ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IGFhNWY3NDIuLmRmMTc0ZWQgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtNjYsNiArNjYsNyBAQAogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogbGlidG9vbAogbG9jYWwvc25tcGNoZWNrCitsb2NhbC9zbm1wY29uZgogTWFrZWZpbGUKIG1hbi8qLlsxMzU4XQogbWFuL2RlZmF1bHRfc3RvcmUuMy5oCmRpZmYgLS1naXQgYS9BR0VOVC50eHQgYi9BR0VOVC50eHQKaW5kZXggNGQ4ZDMyMy4uMzdlYjI3OSAxMDA2NDQKLS0tIGEvQUdFTlQudHh0CisrKyBiL0FHRU5ULnR4dApAQCAtNDE4LDE0ICs0MTgsMTYgQEAKIAogICAgKiBhIG1hZ2ljIG51bWJlciAodGhlICNkZWZpbmVkIGludGVnZXIgY29uc3RhbnQgZGVzY3JpYmVkIGFib3ZlKQogICAgKiBhIHR5cGUgaW5kaWNhdG9yIChmcm9tIHRoZSB2YWx1ZXMgbGlzdGVkIGluIDxzbm1wbGliL3NubXBfaW1wbC5oPikKLSAgICogYW4gYWNjZXNzIGluZGljYXRvciAoZXNzZW50aWFsbHkgUldSSVRFIG9yIFJPTkxZKQorICAgKiBhbiBhY2Nlc3MgaW5kaWNhdG9yIChlc3NlbnRpYWxseSBORVRTTk1QX09MREFQSV9SV1JJVEUgb3IKKyAgICAgTkVUU05NUF9PTERBUElfUk9OTFkpCiAgICAqIHRoZSBuYW1lIG9mIHRoZSByb3V0aW5lIHVzZWQgdG8gaGFuZGxlIHRoaXMgZW50cnkKICAgICogdGhlIGxlbmd0aCBvZiB0aGUgT0lEIHN1ZmZpeCB1c2VkLCBhbmQKICAgICogYW4gYXJyYXkgb2YgaW50ZWdlcnMgc3BlY2lmeWluZyB0aGlzIHN1ZmZpeCAobW9yZSBvbiB0aGlzIGluIGEgbW9tZW50KQogCiBUaHVzIGEgdHlwaWNhbCB2YXJpYWJsZSBlbnRyeSB3b3VsZCBsb29rIGxpa2U6CiAKLSAgICAgICAgeyBFWEFNUExFU1RSSU5HLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHsxfX0KKyAgICAgICAgeyBFWEFNUExFU1RSSU5HLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfZXhhbXBsZSwgMSwgezF9fQogCiBJZiB0aGUgbWFnaWMgbnVtYmVycyBoYXZlIG5vdCBiZWVuIGRlZmluZWQgaW4gdGhlIGhlYWRlciBmaWxlLCB0aGVuIHRoZXkKIHNob3VsZCBiZSBkZWZpbmVkIGhlcmUsIHVzdWFsbHkgY29tbWluZyBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGNvcnJlc3BvbmRpbmcKZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCmluZGV4IDhkOTY3NDcuLmVlYmViMTIgMTAwNjQ0Ci0tLSBhL0NIQU5HRVMKKysrIGIvQ0hBTkdFUwpAQCAtMSw3MDYgKzEsMjU5NyBAQAogVGhpcyBmaWxlIGNvbnRhaW5zIGEgbGlzdCBvZiBzcGVjaWZpYyBidWdzIHRoYXQgaGF2ZSBiZWVuIGZpeGVkLCBhbmQgcGF0Y2hlcwogdGhhdCBoYXZlIGJlZW4gYXBwbGllZCBpbiByZWxlYXNlZCB2ZXJzaW9ucy4gIFBsZWFzZSBzZWUgdGhlIE5FV1MgZmlsZSBmb3IKIGEgc3VtbWFyeSBvZiB0aGUgbWFqb3IgY2hhbmdlcywgYW5kIHRoZSBDaGFuZ2VMb2cgZmlsZSBmb3IgYSBjb21wcmVoZW5zaXZlCi1saXN0aW5nIG9mIGFsbCBjaGFuZ2VzIG1hZGUgdG8gdGhlIGNvZGUuIAotICAgICAgCi0qIDUuNC40ICoKK2xpc3Rpbmcgb2YgYWxsIGNoYW5nZXMgbWFkZSB0byB0aGUgY29kZS4KIAorKjUuNy4zKgogICAgIHNubXBsaWI6Ci0gICAgICAtIFtCVUcgMzEzNDMyM106IEZpeCBjcmFzaCB3aGVuIGNvbXBhcmluZyBpbnZhbGlkIE9JRHMKLSAgICAgIC0gW0JVRyAzMTcxODc4XTogVXNpbmcgU05NUHYzIGNvbnRleHQgZG9lcyBub3Qgd29yawotICAgICAgLSBbQlVHIDMxODI5ODVdOiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoCi0gICAgICAtIFtCVUcgMzIzNDc1NF06IEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTAotICAgICAgLSBbQlVHIDMyNjQ4NTJdOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKLSAgICAgIC0gW1BBVENIIDMwNTg2NDVdOiBVc2UgTVNHX0RPTlRXQUlUIGZvciB0aGUgdW5peCBkb21haW4gc29ja2V0Ci0gICAgICAtIFtQQVRDSCAzMDY3NTQwXTogRml4IElQdjQgT0lEIGluZGV4ZXMgb24gNjQtYml0IGJpZy1lbmRpYW4gc3lzdGVtcwotICAgICAgLSBbUEFUQ0ggMzE2NTg3OF06IENhdGNoIGJ1ZmZlciBvdmVycnVuIG9uIDY0LWJpdCBzeXN0ZW1zCi0gICAgICAtIFtQQVRDSCAzMTgzMDAwXTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aAotICAgICAgLSBBZGRlZCBwdWJsaWMgZGVjbGFyYXRpb24gZm9yIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKQotICAgICAgLSBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLgotICAgICAgLSBBZGRlZCBmdW5jdGlvbiBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKQotICAgICAgLSBBZGRlZCBtYWNybyBuZXRzbm1wX3N0YXRpY19hc3NlcnQoKQotICAgICAgLSBBdm9pZCBWYWxncmluZCBjb21wbGFpbnRzIGFib3V0IHVuaW5pdGlhbGl6ZWQgZGF0YQotICAgICAgLSBDaGVjayB0aGUgcmV0dXJuIHZhbHVlIG9mIHN0cmR1cCBpbiBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLSAgICAgIC0gRml4IGRvdWJsZS1mcmVlIGNyYXNoIHdoZW4gcmVsZWFzaW5nIGR1cGxpY2F0ZWQgaGFuZGxlcnMKLSAgICAgIC0gRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBzbm1wX2ZyZWVfc2Vzc2lvbigpCi0gICAgICAtIEZpeGVkIG1lbW9yeSBjb3JydXB0aW9uIHRyaWdnZXJlZCBieSBzbm1wZC5jb25mICJlbnVtIiBrZXl3b3JkCi0gICAgICAtIEZpeGVkIGJ1Z3MgaW4gYnVpbGRpbmcvcGFyc2luZyA2NC1iaXQgaW50ZWdlcnMKLSAgICAgIC0gRml4ZWQgbGVha3MtYXQtZXhpdCB0cmlnZ2VyZWQgYnkgdXNpbmcgdGhlIHNubXBfZW51bSBjb2RlCi0gICAgICAtIEZpeGVkIG1lbW9yeSBsZWFrIGluIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKQotICAgICAgLSBGaXhlZCBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZHVwbGljYXRlIHNlX2FkZF9wYWlyX3RvX2xpc3QoKQotICAgICAgLSBGaXggaXNzdWUgd2l0aCBVU00gdXNpbmcgaW5hY3RpdmUgdXNlcnMKLSAgICAgIC0gRml4ZWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGdlbmVyYXRpbmcgdGVtcCBmaWxlIG5hbWVzCi0gICAgICAtIEludm9raW5nIHNlX2NsZWFyX3NsaXN0KCkgbm8gbG9uZ2VyIGNyZWF0ZXMgYSBkYW5nbGluZyBwb2ludGVyCi0gICAgICAtIFVzZSByZWFsbG9jK2luaXQgaW5zdGVhZCBvZiBjYWxsb2MKKyAgICAgIC0gRml4ZWQgY3Jhc2ggd2hlbiBNRDUgaGFzaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5TU0wuCisgICAgICAtIEZpeGVkIHBhcnNpbmcgb2Ygc2VxdWVuY2VzLiBEb24ndCBvdmVyd3JpdGUgJ2RhdGEnIHZhcmlhYmxlLCBpdCdzCisJdXNlZCB3aGVuIHBhcnNpbmcgYnVsayByZXNwb25zZXMuCisgICAgICAtIFtCVUcgMTI2NyBdOiBzbm1wbGliOiByZWdpc3Rlcl9taWJfY29udGV4dCgpIGZpeCBmb3IgcmVhZC1vbmx5CisJdmFyaWFibGVzICAgVGhpcyBpcyBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgYSBwYXRjaCBmcm9tCisJSGFyc2hhIFNoaXZhbm5hLgorCisgICAgc25tcDoKKyAgICAgIC0gVXNtLWRoLW9iamVjdHMtbWliOiBBdm9pZCB0cmlnZ2VyaW5nIGFuIGFzc2VydCBzdGF0ZW1lbnQgaW4KKwluZXRzbm1wX3JlYWR5X21vbm90b25pYygpIFRoZSBjYWNoZSB0aW1lb3V0IGZvcgorCXNubXAtdXNtLWRoLW9iamVjdHMtbWliIGlzIC0xLiBBbnkgY2FjaGUgdGltZW91dCB2YWx1ZSA8IDAgZGlzYWJsZXMKKwljYWNoaW5nLiBIb3dldmVyLCBzdHJpY3RseSBuZWdhdGl2ZSB2YWx1ZXMgdHJpZ2dlciB0aGUgYXNzZXJ0CisJc3RhdGVtZW50IGluIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCkuIEF2b2lkIHRyaWdnZXJpbmcgdGhhdAorCWFzc2VydCBzdGF0ZW1lbnQuCisgICAgICAtIEZpeGVkIG1vbml0b3JpbmcgYmFzZWQgb24gbm9uLWRlbHRhIHRyaWdnZXIuICAgc25tcGQgY3Jhc2hlZCB3aXQKKwlmb2xsb3dpbmcgc25tcGQuY29uZjogbW9uaXRvciAtcyAtRCAtciAxMCAtZSBMT0dNQVRDSCAtbworCWxvZ01hdGNoQ3VycmVudENvdW50ICJMb2cgTWF0Y2giICE9IGxvZ01hdGNoQ3VycmVudENvdW50IGxvZ21hdGNoCisJTG9naW5GYWlsdXJlMSAvdmFyL2xvZy9zZWN1cmUgMTAgc3U6IC4qZmFpbC4qIFRoZSByZWFzb24gd2FzCisJdW5pdGlhbGl6ZWQgdmFyaWFibGUgc3lzVVRfdmFyIGluIG10ZVRyaWdnZXJfcnVuKCksIGl0IHdhcyBmaWxsZWQKKwlvbmx5IGlmIHRoZSB0cmlnZ2VyIHdhcyBkZWx0YS12YWx1ZWQsIHdoaWxlIGl0cyB2YWx1ZSB3YXMgdXNlZCBmb3IKKwlhbGwgdHJpZ2dlcnMuIFdpdGggdGhpcyBwYXRjaCwgc3lzVVRfdmFyIGlzIGZpbGxlZCBmb3IgYWxsIGNvZGUKKwlicmFuY2hlcyB3aGVyZSBpdCBpcyBuZWVkZWQuCiAKICAgICBzbm1wZDoKLSAgICAgIC0gW0JVRyAxODQwMjMwXTogRG9uJ3QgaW5jbHVkZSBubG1Mb2dWYXJpYWJsZUluZGV4IGFzIChwc2V1ZG8tKWFjY2Vzc2luZyBjb2x1bW4KLSAgICAgIC0gW0JVRyAyOTcyNTc5XTogZml4ZWQgY2hlY2tpbmcgb2Ygc25tcFRhcmdldEFkZHJSb3dTdGF0dXMgU0VUIHJlcXVlc3RzCi0gICAgICAtIFtCVUcgMzAwMzk4MV06IFByb3RlY3QgYWdhaW5zdCBjb25maWcgcGFyc2luZyBidWZmZXIgb3ZlcmZsb3cKLSAgICAgIC0gW0JVRyAzMDE5MjQzXTogUmVnaXN0ZXIgZXhlY0ZpeCBjb21wYXRhYmlsaXR5IGRpcmVjdGl2ZSBjb3JyZWN0bHkKLSAgICAgIC0gW0JVRyAzMDU4MTAxXTogV3JpdGVhYmxlICdpbnQnIGluc3RhbmNlcyBkb24ndCB3b3JrIG9uIDY0LWJpdCBzeXN0ZW1zCi0gICAgICAtIFtCVUcgMzA2MjUzOF06IEZpeCBjb20yc2VjKiBoYW5kbGluZyBvZiBub24tZGVmYXVsdCBjb250ZXh0cwotICAgICAgLSBbQlVHIDMxNTE4OTddOiBmZCBsZWFrIHdpdGggL3Byb2MvcGFydGl0aW9ucyByZWFkIGluIGRpc2tpbwotICAgICAgLSBbQlVHIDMxNzgzODldOiBGaXggaW5jb25zaXN0ZW50IGhhbmRsaW5nIG9mIFRaIG9mZnNldHMKLSAgICAgIC0gW0JVRyAzMTg1NTI4XTogc2h1dGRvd25fbWFzdGVyX2FnZW50IGRvZXNuJ3QgY2xvc2UgVURQIHNvY2tldHMKLSAgICAgIC0gW0JVRyAzMzA1MTU3XTogRml4IGlwQWRkcmVzc1ByZWZpeCBoYW5kbGluZyBvZiBJUHY2IGFkZHJlc3NlcwotICAgICAgLSBbUEFUQ0ggMjExOTcyNV06IEZpeCBza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIGhhbmRsaW5nIG9mIGhyU3RvcmFnZVRhYmxlCi0gICAgICAtIFtQQVRDSCAyODI1NjUzXTogRml4IHNlbmRtYWlsLmNmIHBhcnNpbmcgaW4gY2VydGFpbiBjb25kaXRpb25zCi0gICAgICAtIFtQQVRDSCAyOTA0OTAwXTogRG9jdW1lbnRhdGlvbiBwbHVzIGFzc29ydGVkIGhhbmRsZXIgY29kZSBmaXhlcwotICAgICAgLSBbUEFUQ0ggMjkxMTM2MV06IFJlbW92ZSByZWR1bmRhbnQgdmFyaWFibGVzCi0gICAgICAtIFtQQVRDSCAyOTQxODExXTogSGFuZGxlIHN1Y2Nlc3NmdWwgcmVxdWVzdHMgd2l0aCByZXFJRCAwCi0gICAgICAtIFtQQVRDSCAyOTc1MjU0XTogQXZvaWQgY2FsbGJhY2sgcmUtdXNlIG9mIGNsb3NlZCBzZXNzaW9ucwotICAgICAgLSBbUEFUQ0ggMzA1MzQzNl06IEZpeCB0Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MgaW52YWxpZCBtZW1vcnkgYWNjZXNzCi0gICAgICAtIFtQQVRDSCAzMDYyNTI2XTogRml4IHNlY3VyaXR5IGVuZ2luZUlEIHNldHRpbmcgaW4gdGhlIHRyYXBzZXNzIGRpcmVjdGl2ZQotICAgICAgLSBbUEFUQ0ggMzA2Njg2Ml06IEZpeCBjb21wYXJpc29uIG9mIGxhcmdlIHVuc2lnbmVkIGluZGV4ZXMgKGRpc2svZXh0ZW5kIHRhYmxlcykKLSAgICAgIC0gW1BBVENIIDMwOTY3MjVdOiBEb24ndCByZWdpc3RlciB2MVRyYXAgY2FsbGJhY2ssIGlmIFNOTVB2MSBub3Qgc3VwcG9ydGVkCi0gICAgICAtIFtQQVRDSCAzMDk2NzI1XTogc3lzT1JUYWJsZSByZWdpc3RhdGlvbiBmb3IgTm90aWZpY2F0aW9uIExvZyBtaWIKLSAgICAgIC0gW1BBVENIIDMwOTY3MjVdOiBJbmNsdWRlIFNOTVB2MSB0cmFwIE9JRHMgaW4gbmxtTG9nTm90aWZpY2F0aW9uSUQgY29sdW1uCi0gICAgICAtIFtQQVRDSCAzMTQxNDYyXTogRml4IGFnZW50eCBzdWJhZ2VudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZS1vYmplY3QgcmVxdWVzdHMKLSAgICAgIC0gW1BBVENIIDMxOTg3ODFdOiBFbnN1cmUgZGlzbWFuL3twaW5nLHRyYWNlcm91dGV9IGRvIGF0IGxlYXN0IGNvbXBpbGUKLSAgICAgIC0gW1BBVENIIDMyOTkzODRdOiBGaXggSU5GT1JNcyBzbyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlECisgICAgICAtIEFkZCBhIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb24KKyAgICAgIC0gQWRkZWQgYnRyZnMgc3VwcG9ydCB0byBockZTVGFibGUKKyAgICAgIC0gQ29ycmVjdCB0aGUgc2l6ZSBvZiBvZiB0aGUgRVhBTVBMRUlQQUREUkVTUyB2YWx1ZSBvbiBMNjQgaG9zdHMKKyAgICAgIC0gRml4ZWQgY3Jhc2ggaW4gVUNELVNOTVAtTUlCOjpleHRUYWJsZSBzbm1wZCBjcmFzaGVkIHdoZW4gdGhlCisJY29tbWFuZCB0byBleGVjdXRlIGhhZCBubyBhcmd1bWVudHMsIGkuZS4gZXh0ZW5kLT5hcmdzIHdhcyBOVUxMLgorICAgICAgLSBGaXhlZCB2YWx1ZSBvZiBVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQgdG8gY29udGFpbiBmdWxsIGNvbW1hbmQKKwlsaW5lLiBNSUIgZGVzY3JpcHRpb24gb2YgVUNELVNOTVAtTUlCOjpleHRDb21tYW5kIHN1Z2dlc3RzIGl0CisJc2hvdWxkIGNvbnRhaWwgZnVsbCBjb21tYW5kIGxpbmUuIEFsc28gaW4gTmV0LVNOTVAgNS4zLjIuMiwgd2hvbGUKKwljb21tYW5kIGxpbmUgd2FzIHNob3duLgorICAgICAgLSBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBOVUwgY2hhcmFjdGVycyBpbiB0aGUgaW5kaWNlcyBmb3IKKwlzbm1wVGFyZ2V0QWRkclRhYmxlCisgICAgICAtIFBBVENIIDI0NzI6IGZyb20gU3VuaWw6IGRvbid0IHVzZSBIQktUIGFzIGhlYXJ0YmVhdCBpbnRlcnZhbCBpbgorCVNDVFAtTUlCOjpzY3RwQXNzb2NUYWJsZS4KKyAgICAgIC0gUmVtb3ZlIHNvbWUgdW51c2VkIGluY2x1ZGVzCisgICAgICAtIFNob3cgTGludXgga2VybmVsIHRocmVhZHMgaW4gaHJTV1J1blRhYmxlLgorICAgICAgLSBVc2UgMCBmb3IgdGhlIGlnbm9yZWQgbnVtdmFycyBhcmd1bWVudCB0byBuZXRzbm1wX3JlZ2lzdGVyX21pYiBUaGUKKwludW12YXJzIGFyZ3VtZW50IG9mIG5ldHNubXBfcmVnaXN0ZXJfbWliIGlzIGlnbm9yZWQgaWYgdGhlIHZhcgorCWFyZ3VtZW50IGlzIE5VTEwuIEluIG9yZGVyIHRvIHVuaWZ5IHRoaXMgdXNlIG9mIGl0IHdpdGggYWxsIG90aGVyCisJb25lcywgY2hhbmdlIGl0IGZyb20gMSB0byAwCisgICAgICAtIFNFQ1VSSVRZOiBhIGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFjayB2ZWN0b3Igd2FzIGRpc2NvdmVyZWQgb24KKyAgICAgICAgdGhlIGxpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBJQ01QLU1JQi4gIFRoaXMgcmVsZWFzZSBmaXhlcworICAgICAgICB0aGlzIGJ1ZyBhbmQgYWxsIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVwZGF0ZSB0aGVpciBTTk1QCisgICAgICAgIGFnZW50IGlmIHRoZXkgbWFrZSB1c2Ugb2YgdGhlIElDTVAtTUlCIHRhYmxlIG9iamVjdHMuCisgICAgICAtIFBBVENIOiAxMjc1OiBmcm9tIFZpbGlhbSBQw7rEjWlrOiBmaXhlZCBQZXJsIHRyYXAgaGFuZGxlciB3aGVuCisJcHJvY2Vzc2luZyB0cmFwIHdpdGggZW1wdHkgY29tbXVuaXR5IHN0cmluZy4KIAotICAgICAgLSBBZGQgbmV3bHkgY3JlYXRlZC9kZXN0cm95ZWQgaW50ZXJmYWNlcyB0byBpcHY2SWZUYWJsZQotICAgICAgLSBDYWxsIHNodXRkb3duX21hc3Rlcl9hZ2VudCgpIGFuZCBzaHV0ZG93bl9hZ2VudCgpIGR1cmluZyBzaHV0ZG93bgotICAgICAgLSBEb24ndCBkZXJlZ2lzdGVyIGNsb3NlZCBzZXNzaW9ucwotICAgICAgLSBEb24ndCBzZWNvbmQtZ3Vlc3MgY2FjaGUgaGFuZGxlcgotICAgICAgLSBGaXggY2xlYW5fc3VidHJlZSgpIG1lbW9yeSBoYW5kbGluZwotICAgICAgLSBGaXhlZCBhIGRvdWJsZSBmcmVlLCB0cmlnZ2VyZWQgYnkgY2xlYW5pbmcgdXAgZW1iZWRkZWQgUGVybCBkYXRhIHN0cnVjdHVyZS4KLSAgICAgIC0gRml4ZWQgYWRkaW5nIG5ldyBhZGRyZXNzZXMgdG8gaXBBZGRyZXNzVGFibGUKLSAgICAgIC0gRml4ZWQgbG9nZ2luZyBvZiAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4ge0lQLFRDUH0tTUlCCi0gICAgICAtIEZpeGVkIElQLU1JQjo6aXBJZlN0YXRzUmVhc21SZXFkcyB2YWx1ZQotICAgICAgLSBGaXhlZCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHBhcnNpbmcgT0lEcyBpbiBjb25maWcgZmlsZXMKLSAgICAgIC0gRml4ZWQgcmFjZSBjb25kaXRpb25zIGluIGhyU1dSdW5UYWJsZSBhbmQgVUNEIHByVGFibGUKLSAgICAgIC0gRml4ZWQgYWdlbnQgYm9ndXMgNjQtYml0IHdyYXAgd2FybmluZyAoaXBTeXN0ZW1TdGF0cykKLSAgICAgIC0gRml4IGVuZ2luZWlkIGdlbmVyYXRpb24gb24gb3V0Z29pbmcgdjMgdHJhcHMgZnJvbSB0aGUgYWdlbnQKLSAgICAgIC0gRml4IFZBQ00gcGVyc2lzdGFudCBzdG9yYWdlLgotICAgICAgLSBPcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZSB0YWJsZXMKLSAgICAgIC0gVXNlIGNhY2hlLXVuaXF1ZSBpZCBpbnN0ZWFkIG9mIGhhbmRsZXIgbmFtZSBmb3Igc2hhcmVkIGNhY2hlIHJlbG9hZCBwcm90ZWN0aW9uCi0gICAgICAtIFZhcmlvdXMgTUlCLXNwZWNpZmljIGxlYWstYXQtZXhpdCBmaXhlcy4KLQotICAgIHNubXB0cmFuc2xhdGU6Ci0gICAgICAtIEZpeGVkIHByaW50aW5nIG9mIHJhbmdlcyB3aXRoIFVOU0lHTkVEIHR5cGUKKyAgICBzbm1wZCwgc25tcHRyYXBkIGFuZCBhcHBzOgorICAgICAgLSBNYWtlIEVOVl9TRVBBUkFUT1JfQ0hBUiBjb25maWd1cmFibGUKIAogICAgIHNubXB0cmFwZDoKLSAgICAgIC0gW0JVRyAzMTUxMjU0XTogRml4IGNyYXNoIHdpdGggaW52YWxpZCB0cmFwaGFuZGxlIGRpcmVjdGl2ZQotICAgICAgLSBGaXhlZCBhIGRvdWJsZSBmcmVlLCB0cmlnZ2VyZWQgYnkgY2xlYW5pbmcgdXAgZW1iZWRkZWQgUGVybCBkYXRhIHN0cnVjdHVyZS4KIAotICAgIHNubXB1c206Ci0gICAgICAtIENvcnJlY3QgaWZkZWZzLCByZW1vdmUgZGVhZCB2YXJpYWJsZXMKKyAgICBhcHBzOgorICAgICAgLSBTdG9wIGFnZW50eHRyYXAgZnJvbSBhY2Nlc3NpbmcgdGhlIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiBUaGlzIGlzCisJbmVlZGVkIHRvIHByZXZlbnQgbW9hbmluZyBhYm91dCBub3QgYmVlaW5nIGFsbG93ZWQgdG8gd3JpdGUgdGhvc2UKKwlmaWxlcyBkdWUgdG8gYmFkIHBlcm1pc3Npb25zLgorICAgICAgLSBTdG9wIHVzaW5nIHNubXBfcGVycm9yIHdoZW4gbG9nZ2luZyBhZnRlciBmdW5jdGlvbnMgdGhhdCBkb24ndCBzZXQKKwlzbm1wX2Vycm5vLgorCisgICAgYnVpbGRpbmc6CisgICAgICAtIE1ha2UgdGhlIC13aXRob3V0IG9wdGlvbnMgdG8gcnBtYnVpbGQgd29yaworICAgICAgLSBBdm9pZCBkdXBsaWNhdGUgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUgZGVwZW5kZW5jeSBmaWxlcy4KKworICAgIGRvY3VtZW50YXRpb246CisgICAgICAtIEZyb20gIkVyaWMgUy4gUmF5bW9uZCI6IENvcnJlY3QgbWFuIHBhZ2UgbWFya3VwIHByb2JsZW0gQW1iaWd1b3VzCisJb3IgaW52YWxpZCBiYWNrc2xhc2guICBUaGlzIGRvZXNuJ3QgY2F1c2UgZ3JvZmYgYSBwcm9ibGVtLiBidXQgaXQKKwljb25mdXNlcyBkb2NsaWZ0ZXIgYW5kIG1heSBjb25mdXNlIG9sZGVyIHRyb2ZmIGltcGxlbWVudGF0aW9ucy4KKworICAgIHBlcmw6CisgICAgICAtIEJVRzogMjQwMjogQWRkIHN1cHBvcnQgZm9yIFNOTVB2MyB0cmFwcworCisgICAgcHl0aG9uOgorICAgICAgLSBGaXhlZCBJUEFERFJFU1Mgc2l6ZSBvbiA2NGJpdCBzeXN0ZW1zLgorICAgICAgLSBGaXhlZCByZXR1cm5pbmcgb2YgZW1wdHkgc3RyaW5ncy4gVmFyYmluZCB0eXBlIChTTk1QX05PU1VDSE9CSkVDVAorCWV0Yy4pIHNob3VsZCBiZSB1c2VkIHRvIGRldGVjdCBlcnJvcnMgaW5zdGVhZCBvZiBsZW5ndGggb2YgdGhlCisJdmFyaWFibGUgLSBpdCBjYW4gYmUgZW1wdHkgc3RyaW5nLgorICAgICAgLSBbUEFUQ0ggMTIzOV06IEZpeCBtZW1vcnkgbGVhaworCisgICAgdGVzdGluZzoKKyAgICAgIC0gTWFrZSBzdXJlIFRlc3Q6Okhhcm5lc3MgaXMgb2YgYXQgbGVhc3QgdmVyc2lvbiAxLjIxIFRlc3Q6Okhhcm5lc3MKKwkxLjIxIGlzIHRoZSBmaXJzdCB2ZXJzaW9uIHRoYXQgaW1wbGVtZW50cyBUQVAgdjEyIHdoaWNoIGFsbG93cworCXB1dHRpbmcgdGhlIGhlYWRlciAoMS4uTikgYWZ0ZXIgdGhlIHRlc3RzIGFuZCBzaW5jZSBvdXIgdGVzdHMKKwl1dGlsaXplIHRoYXQgd2Ugc2hvdWxkIG1ha2Ugc3VyZSB0aGF0IHRoZSB0ZXN0IHJ1bm5lciBzdXBwb3J0cyBpdC4KKworICAgIHVuc3BlY2lmaWVkOgorICAgICAgLSBBZGRlZCBzaW1mcyAoT3BlblZaIGZpbGVzeXN0ZW0pIHRvIGhyU3RvcmFnZVRhYmxlIGFuZCBockZTVGFibGUuCisgICAgICAtIFVwcG9ydCBuZXcgTUlCIHN0cnVjdHVyZXMgYW5kIE1GRCByZXdyaXRlcyB1bmRlciBEYXJ3aW4KKyAgICAgIC0gW0JVRyAyNDcwXTogQWNjZXB0IDY1NTM1IGFzIGEgdmFsaWQgSVB2NiBwb3J0IG51bWJlcgorICAgICAgLSBbQlVHIDI0NzZdOiBzbm1wZCBmYWlscyB0byBzdGFydCBvbiBBSVggT24gYW4gQUlYIHN5c3RlbSB0aGVyZSBpcworCW5vIDxrdm0uaD4gaGVhZGVyIGZpbGUgbm9yIGRvIHRoZSAvZGV2L2RtZW0gb3IgL2Rldi9kcnVtIGRldmljZXMKKwlleGlzdCBhbmQgaGVuY2UgRE1FTV9MT0MgaXMgbm90IGRlZmluZWQuIEF2b2lkIHRoYXQgaW5pdF9rbWVtKCkKKwlmYWlscyBpbiB0aGF0IGNhc2UuCisKKyAgICBBSVg6CisgICAgICAtIE1ha2UgdGNwLW1pYiBidWlsZAorICAgICAgLSBNYWtlIHVkcC1taWIgYnVpbGQKKworICAgIExpbnV4OgorICAgICAgLSBCVUc6IDIyMzg6IEFkZCBsaWJubDMgc3VwcG9ydAorICAgICAgLSBSRVNPVVJDRVMtTUlCLCBoclNXUnVuIHRhYmxlOiBQYXJzZSAvcHJvYy88cGlkPi9zdGF0IGNvcnJlY3RseSBvbgorCUxpbnV4IFRoaXMgaXNzdWUgd2FzIHJlcG9ydGVkIGJ5IFZpbmNlbnQgQmVybmF0CisJPHZpbmNlbnQuYmVybmF0QGRhaWx5bW90aW9uLmNvbT4uIFNlZSBhbHNvCisJaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1Ny8uCisKKyAgICBXaW4zMjoKKyAgICAgIC0gUGVybDogQlVHOiAyNDg4OiBBdm9pZCAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvcgorICAgICAgLSBQZXJsOiBCVUc6IDI0ODg6IEF2b2lkICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9yIiBUaGlzIHJldmVydHMKKwljb21taXQgYjI3MjU5NjRiZGU5MjFiNjI4NWUzYTU5YTUxMjU1MmNhZTBhMGNhNS4KKworICAgIFdpbmRvd3M6CisgICAgICAtIEFkZCBtdWx0aWhvbWluZyBzdXBwb3J0IE9uIFdpbmRvd3MgVmlzdGEgLyBXaW5kb3dzIFNlcnZlciAyMDA4IGFuZAorCWxhdGVyIGl0IGlzIHBvc3NpYmxlIHRvIGFkZCBtdWx0aWhvbWluZyBzdXBwb3J0IGJ5IHVzaW5nIHRoZQorCUlQX1BLVElORk8gc29ja2V0IG9wdGlvbi4gQ29uZmxpY3RzOgorCXNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jCisgICAgICAtIE1ha2Ugd2luRXh0RExMIHdvcmsgb24gNjQtYml0IFdpbmRvd3Mgc3lzdGVtcworICAgICAgLSBQb3J0IGJhdGNoIGJ1aWxkIGluZnJhc3RydWN0dXJlIHRvIFZpc3VhbCBTdHVkaW8gMjAxMCBhbmQgbGF0ZXIKKwlGcm9tIFZpc3VhbCBTdHVkaW8gMjAxMCBvbiBpdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gc3BlY2lmeQorCWluY2x1ZGUgb3IgbGlicmFyeSBkaXJlY3RvcmllcyBnbG9iYWxseSAtIHRoZXNlIGhhdmUgdG8gYmUKKwlzcGVjaWZpZWQgcGVyIHByb2plY3QuIEhlbmNlIHR3byBhZGRpdGlvbmFsIG1lbnUgZW50cmllcyBpbgorCWJ1aWxkLmJhdCB0aGF0IGFsbG93IHRvIHNwZWNpZnkgdGhlc2UgZGlyZWN0b3JpZXMuCisgICAgICAtIFBvcnRlZCB1Y2Qtc25tcC9kbG1vZCB0byBNaW5HVyAvIE1TVkMKKworKjUuNy4yKgorCisgICAgc25tcGxpYjoKKyAgICAgIC0gQWRkIERveHlnZW4tc3R5bGUgZnVuY3Rpb24gaGVhZGVyIGZvcgorCW5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoKSBhbmQKKwluZXRzbm1wX2NsZWFyX2RlZmF1bHRfdGFyZ2V0KCkuCisgICAgICAtIEFkZCBuZXRzbm1wX3NldGVudigpLgorICAgICAgLSBBdm9pZCB0aGF0IHN5c3RlbSBjbG9jayBjaGFuZ2VzIChlLmcuIGJ5IG50cGQpIGFmZmVjdCBjb2RlIHRoYXQKKwluZWVkcyByZWxhdGl2ZSB0aW1lIE1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgU05NUHYzIHZhcmlhYmxlCisJc25tcEVuZ2luZVRpbWUgaXMgMC4uMjE0NzQ4MzY0NyBvbiBhbGwgc3VwcG9ydGVkIHN5c3RlbXMgaW5zdGVhZCBvZgorCTAuLjQyOTQ5NjcyIG9uIHNvbWUgc3lzdGVtcyAoaS5lLiB3cmFwYXJvdW5kIGFmdGVyIDQ5NyBkYXlzKSBBZGQKKwluZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soKSwgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigpLAorCW5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCksIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKQorICAgICAgLSBBdm9pZCB0aGF0IHN5c3RlbSBjbG9jayBjaGFuZ2VzIChlLmcuIGJ5IG50cGQpIGFmZmVjdCBjb2RlIHRoYXQKKwluZWVkcyByZWxhdGl2ZSB0aW1lIE1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgU05NUHYzIHZhcmlhYmxlCisJc25tcEVuZ2luZVRpbWUgaXMgMC4uMjE0NzQ4MzY0NyBvbiBhbGwgc3VwcG9ydGVkIHN5c3RlbXMgaW5zdGVhZCBvZgorCTAuLjQyOTQ5NjcyIG9uIHNvbWUgc3lzdGVtcyAoaS5lLiB3cmFwYXJvdW5kIGFmdGVyIDQ5NyBkYXlzKSBBZGQKKwluZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soKSwgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigpLAorCW5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCksIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKSBEZXByZWNhdGUKKwlhdGltZV9kaWZmKCksIGF0aW1lX25ld01hcmtlcigpLCBhdGltZV9yZWFkeSgpLCBhdGltZV9zZXRNYXJrZXIoKSwKKwltYXJrZXJfdHRpY2tzKCksIG5ldHNubXBfbWFya2VyX3VwdGltZSgpLCBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKCksCisJdGltZXZhbF90dGlja3MoKSwgdWF0aW1lX2RpZmYoKSwgdWF0aW1lX2hkaWZmKCkgYW5kIHVhdGltZV9yZWFkeSgpLgorICAgICAgLSBBdm9pZCB3YWl0aW5nIGluZGVmaW5pdGVseSBpZiBhIHNlc3Npb24gaGFzIHRpbWVvdXQgemVybworICAgICAgLSBEZWNsYXJlICJ0eXBlIiBhcmd1bWVudCBvZiBzZV9zdG9yZV9saXN0KCkgLyBzZV9zdG9yZV9zbGlzdCgpIC8KKwlzZV9zdG9yZV9lbnVtX2xpc3QoKSBjb25zdAorICAgICAgLSBNYWtlIGl0IGV4cGxpY2l0IHRoYXQgTUFYX1NVQklEIGlzIGFuIHVuc2lnbmVkIGNvbnN0YW50CisgICAgICAtIE1ha2UgbmV0c25tcF9jYWxsYmFja19hY2NlcHQoKSByZXR1cm4gLTEgKGZhaWx1cmUpIGluc3RlYWQgb2YgMAorCShTVERJTl9GSUxFTk8pCisgICAgICAtIE1ha2UgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgcm9idXN0IGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24KKwlmYWlsdXJlcy4gTWFrZSBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oKSB1c2UgbWVtc2V0KCkgb24gVW5peCBzeXN0ZW1zCisJaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBsb29wLgorICAgICAgLSBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHJvYnVzdCBhZ2FpbnN0IG1lbW9yeSBhbGxvY2F0aW9uCisJZmFpbHVyZXMuIE1ha2UgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCkgdXNlIG1lbXNldCgpIG9uIFVuaXggc3lzdGVtcworCWluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcC4gTWFrZSBzdXJlIHRoYXQgb24gVW5peCBzeXN0ZW1zCisJbmV0c25tcF9sYXJnZV9mZF9jbHIoKSBkb2Vzbid0IHRyeSB0byByZWFkIG1lbW9yeSBpdCBpc24ndCBhbGxvd2VkCisJdG8gcmVhZCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlCisJcGFzc2VkIGJ5IHRoZSBjYWxsZXIpLgorICAgICAgLSBNZXJnZSB0b2dldGhlciB0aGUgTGludXggYW5kICpCU0QgdmVyc2lvbiBvZiBzcmMgcG9ydCBzZW5kaW5nLgorICAgICAgLSBPbmx5IHRyYW5zZm9ybSB0aGUgYWRkcmVzcyB0byBwcmludGFibGUgZm9ybSB3aGVuIG5lZWRlZC4KKyAgICAgIC0gUEFUQ0ggMzUxMDQ1NDogQWxsb3cgdGhlIHVzZSBvZiAwLjAuMC4wLzAgYXMgYWxpYXMgZm9yIGRlZmF1bHQKKyAgICAgIC0gUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yIE5FVFNOTVBfUkVNT1ZFX0NPTlNUIGdpdC1zdm4taWQ6CisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMQorCTgwNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisgICAgICAtIFJlZHVjZSBvdmVyaGVhZCBvZiBjb25maWcgZmlsZSBwYXJzaW5nCisgICAgICAtIFJlbW92ZSBvYnNvbGV0ZSBzbm1wX2dldF9mZF9mb3Jfc2Vzc2lvbigpIGRlY2xhcmF0aW9uCisgICAgICAtIFNlcGFyYXRlIG91dCB0aGUgY21lc2cgYnVmZmVyIHNpemUKKyAgICAgIC0gU2V0IHRoZSBycGF0aCBmb3IgbGlicGVybC5zbyBpbiBsaWJuZXRzbm1wbWlicy5zbyBzdWNoIHRoYXQgdGhlCisJZHluYW1pYyBsaW5rZXIgY2FuIGZpbmQgbGlicGVybC5zbyB3aXRob3V0IHJlcXVpcmluZyB0aGUgdXNlciB0bworCW1vZGlmeSB0aGUgZHluYW1pYyBsaW5rZXIgc2V0dGluZ3MuIFRoaXMgY2hhbmdlIGluCisJYWdlbnQvTWFrZWZpbGUuaW4gaXMgbmVjZXNzYXJ5IG9uIHRoZSA1LjUgYnJhbmNoIGFuZCBsYXRlciBidXQgbm90CisJb24gdGhlIDUuNCBicmFuY2guIFRoYXQgaXMgYmVjYXVzZSB0aGUgNS40IGJyYW5jaCB1c2VzIGFuIG9sZGVyCisJdmVyc2lvbiBvZiBsaWJ0b29sIHRoYXQgcHJvcGFnYXRlcyB0aGUgcnBhdGggb2YgZGVwZW5kZW50CisJbGlicmFyaWVzLiBUaGlzIGlzIGNhbGxlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY3kgdHJhY2tpbmcgaW4gdGhlCisJbGlidG9vbCBtYW51YWwuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGluIGxpYnRvb2wgdmVyc2lvbiAxCisJYnV0IG5vdCBpbiBsaWJ0b29sIHZlcnNpb24gMi4gRm9yIG1vcmUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhYm91dAorCWR5bmFtaWMgbGlicmFyaWVzIGFuZCBycGF0aHMsIHNlZSBhbHNvIHRoZSBkb2N1bWVudCB3aXRoIHRoZSB0aXRsZQorCSJScGF0aElzc3VlIiBvbiB0aGUgRGViaWFuIHdpa2kKKwkoaHR0cDovL3dpa2kuZGViaWFuLm9yZy9ScGF0aElzc3VlKS4KKyAgICAgIC0gU2ltcGxpZnkgaW1wbGVtZW50YXRpb24gb2YgZnVuY3Rpb25zIG1hbmlwdWxhdGluZyA2NC1iaXQgbnVtYmVycy4KKyAgICAgIC0gU2ltcGxpZnkgdGhlIHNlX3N0b3JlX2VudW1fbGlzdCgpIGltcGxlbWVudGF0aW9uCisgICAgICAtIFVzZSBTTk1QX0FMTE9DX1RZUEVERUYgdG8gYWxsb2NhdGUgdHJhbnNwb3J0cyBpbiBvcmRlciB0byBhdm9pZCB0aGUKKwlzZXBhcmF0ZSBjYWxsIHRvIG1lbXNldC4KKyAgICAgIC0gW1BBVENIIDM0MTQ3NzNdOiBFbmNvZGUgaW50ZWdlciB2YWx1ZSB1c2luZyBBU05fSU5URUdFUgorICAgICAgLSBbUEFUQ0ggMzUyNjU5OV06IERvbid0IGhhbmcgb24gcmV0cmllZCBmYWlsaW5nIFNOTVB2MyByZXNwb25zZXMKKyAgICAgIC0gUEFUQ0ggMzU2MDQ3MzogZnJvbSBmZW5uZXI6IEhhbmRsZSBUaW1lVGlja3Mgd2hlbiBwcmV0dHktcHJpbnRpbmcKKwlPSUQgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICAgIC0gQWRkIHRoZSBzeW1ib2wgTkVUU05NUF9QUklvIHRvIGhlbHAgaW4gcHJpbnRpbmcgb2lkIHZhbHVlcy4KKyAgICAgIC0gRG8gbm90IGNyYXNoIGZyb20gZW1wdHkgdmFsdWVzIGluIC0tdG9rZW49dmFsdWUgYXJndW1lbnRzCisgICAgICAtIERvIG5vdCBjcmFzaCBvbiBpbmNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gdG9rZW5zLgorICAgICAgLSBEbyBub3QgdHJ1bmNhdGUgc2luZ2xlIGRlZmF1bHQgdHJhbnNwb3J0IGRvbWFpbnMKKyAgICAgIC0gTW92ZSB0aGUgY2hlY2sgdGhhdCB0aGUgcGR1IHZhcmlhYmxlIGlzIG5vbi1OVUxMIHRvIGJlZm9yZSB0aGUKKwlmaXJzdCBkZXJlZmVyZW5jZSBvZiBpdC4KKworICAgIHNubXBsaWIgKyBzbm1wZCArIHNubXB3YWxrOgorICAgICAgLSBBdm9pZCB0aGF0IHN5c3RlbSBjbG9jayBjaGFuZ2VzIChlLmcuIGJ5IG50cGQpIGFmZmVjdCBjb2RlIHRoYXQKKwluZWVkcyByZWxhdGl2ZSB0aW1lCisKKyAgICBzbm1wbGliLCBzbm1wZCwgcGVybDoKKyAgICAgIC0gRWxpbWluYXRlIGRlYWQgdmFyaWFibGVzIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYworCWFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMKKwlhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjCisJZXNzLmMgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jCisJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMKKwlhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYworCWFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jCisJYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jCisJYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2VzcworCS5jIGFwcHMvc25tcHRscy5jIGFwcHMvc25tcHRyYXBkX2xvZy5jIHNubXBsaWIvZGlyX3V0aWxzLmMKKwlzbm1wbGliL3NubXBfY2xpZW50LmMgc25tcGxpYi9zbm1wX29wZW5zc2wuYworCXNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMKKyAgICAgIC0gQlVHOiAzNTE3MDMwOiBFbnN1cmUgbGFyZ2UgdGFibGVzIGFyZSB3YWxrZWQgcHJvcGVybHkKKyAgICAgIC0gQlVHOiAzNTQxMDEyOiBGaXggaGFuZGxpbmcgb2YgZ2V0dGFibGUgY29sdW1ucworICAgICAgLSBbUEFUQ0ggMzUyOTU0MV06IERvbid0IHJlZmVyIHRvIGludGVybmFsICdteScgdmFyaWFibGVzIGZyb20KKwlleHRlcm5hbCBzY3JpcHRzIEZpeCBwcm92aWRlZCBieSBMZXp6IEdpbGVzCisKKyAgICBzbm1wOgorICAgICAgLSBCcmlkZ2UtbWliOiBGaXggaW5kZXggaW50ZXJwcmV0YXRpb24uIFRoaXMgcGF0Y2ggY29ycmVjdHMgYSB3cm9uZworCWRhdGEgaW50ZXJwcmV0YXRpb24uIHNubXAtYnJpZGdlLW1pYiBvYnRhaW5zIHRoZSBpZmluZGV4IHZhbHVlIGZyb20KKwl0aGUgc3lzZnMgYXR0cmlidXRlICdpZmluZGV4JyBUaGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIHN5c2ZzCisJYXR0cmlidXRlIGlzIGFuIGludGVnZXIsIHdoaWNoIGlzIGhhbmRsZWQgYXMgaGV4IGFuZCBsZWFkcyB0bworCWluY29ycmVjdCBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci4gZS5nLiAkID4gc25tcHdhbGsgbG9jYWxob3N0CisJQlJJREdFLU1JQjo6ZG90MWRCYXNlUG9ydElmSW5kZXguMgorCUJSSURHRS1NSUI6OmRvdDFkQmFzZVBvcnRJZkluZGV4LjIgPSBJTlRFR0VSOiA1NCBhY2NvcmRpbmcgdG8gdGhlCisJc3lzZnMgYXR0cmlidXRlIHRoZSB2YWx1ZSBpcyAzNiAkID4gY2F0CisJL3N5cy9jbGFzcy9uZXQvPGRldmljZT4vaWZpbmRleCAzNiBTaWduZWQtb2ZmLWJ5OiBNaWpvIFNhZnJhZGluCisJPHNhZnJhZGluQGxpbnV4LnZuZXQuaWJtLmNvbT4KKworICAgIHNubXBkOgorICAgICAgLSBMb3dlcmVkIHNldmVyaXR5IG9mICdFcnJvciBleHBhbmRpbmcgWFhYIHRvIDY0Yml0cycgbWVzc2FnZXMuCisgICAgICAtIFJlbW92ZWQgZXJyb3IgbG9nIG1lc3NhZ2VzIHdoZW4gSVB2NiBpcyBkaXNhYmxlZC4KKyAgICAgIC0gQWRkIG1pc3NpbmcgZGVidWcgdGFnCisgICAgICAtIEFkZCBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoKQorICAgICAgLSBBdm9pZCB0aGF0IHN5c3RlbSBjbG9jayBjaGFuZ2VzIChlLmcuIGJ5IG50cGQpIGFmZmVjdCBjb2RlIHRoYXQKKwluZWVkcyByZWxhdGl2ZSB0aW1lIE1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgU05NUHYzIHZhcmlhYmxlCisJc25tcEVuZ2luZVRpbWUgaXMgMC4uMjE0NzQ4MzY0NyBvbiBhbGwgc3VwcG9ydGVkIHN5c3RlbXMgaW5zdGVhZCBvZgorCTAuLjQyOTQ5NjcyIG9uIHNvbWUgc3lzdGVtcyAoaS5lLiB3cmFwYXJvdW5kIGFmdGVyIDQ5NyBkYXlzKQorICAgICAgLSBCVUcgMzU0MjE4ODogQ29ycmVjdCBzeXNPUkRlc2NyIGZvciBzbm1wVXNtTUlCLiBUaGFua3MgdG8gRGF2ZQorCVZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisgICAgICAtIEJVRyAzNTQyMzA3OiBDb3JyZWN0IHN5c09SSUQgZm9yIHNubXBNUERTdGF0cy4gVGhhbmtzIHRvIERhdmUKKwlWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorICAgICAgLSBCVUc6IDM0MzkyMzQ6IENvcnJlY3QgdGhlIGRlcGVuZGVuY2llcyBvZiB1Y2Qtc25tcC9wYXNzIGFuZAorCXVjZC1zbm1wL3Bhc3NfcGVyc2lzdAorICAgICAgLSBCVUc6IDM0MzkyMzQ6IE1vdmUgbmV0c25tcF9wYXNzX3N0cl90b19lcnJubyB0byBwYXNzX2NvbW1vbiBhbmQKKwlyZW5hbWUgaXQgdG8gbmV0c25tcF9pbnRlcm5hbF9wYXNzX3N0cl90b19lcnJubworICAgICAgLSBCVUc6IDM0NjM3Njc6IEhhbmRsZSBwYXJzaW5nIHN1YmlkZW50aWZpZXJzID4gMl4zMQorICAgICAgLSBCVUc6IDM1MzIwOTA6IEZpeCBoaWdoIGlmSW5kZXggdmFsdWVzIGNyYXNoaW5nIGhyRGV2aWNlRGVzY3IKKyAgICAgIC0gQ2FsbCBzbm1wX29pZHRyZWVfY29tcGFyZSBpbnN0ZWFkIG9mIHNubXBfb2lkX21pbl9jb21wYXJlCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogQXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMgKGJhc2VkIG9uIHBhdGNoIDM1MDMyNTkpCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogQXZvaWQgcmVhZGluZyBmcmVlZCBtZW1vcnkgd2hlbiBkZWxldGluZyBhIHJvdworCWZyb20gYSB0YWJsZQorICAgICAgLSBESVNNQU4tUElORy1NSUI6IERvIG5vdCBzZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhY2sgb3ZlciB0aGUKKwluZXR3b3JrCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogRG9uJ3QgY2FsbCBleGl0KCkgdXBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogRml4IElQdjYgc29ja2V0IGxlYWsgaW4gZXJyb3IgcGF0aHMKKyAgICAgIC0gRElTTUFOLVBJTkctTUlCOiBGaXggYSBzb2NrZXQgbGVhayB0cmlnZ2VyZWQgYnkgcGluZ2luZyBhIHJlbW90ZQorCWhvc3QKKyAgICAgIC0gRElTTUFOLVBJTkctTUlCOiBGaXggbW9yZSBtZW1vcnkgbGVha3MKKyAgICAgIC0gRElTTUFOLVBJTkctTUlCOiBGaXggc2V2ZXJhbCBtZW1vcnkgbGVha3MKKyAgICAgIC0gRElTTUFOLVBJTkctTUlCOiBNYWtlIHBpbmcgaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQgb2YgbnRwZCBjbG9jaworCWp1bXBzCisgICAgICAtIERJU01BTi1QSU5HLU1JQjogTWFrZSBwaW5naW5nIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzZXMgd29yaworICAgICAgLSBESVNNQU4tU0NIRURVTEVSLU1JQjogSGFuZGxlIDMyLWNoYXJhY3RlciBzY2hlZENvbnRleHROYW1lIHZhbHVlcworCWNvcnJlY3RseS4gU2VlIGFsc28gY29tbWl0CisJYjNjNDk4MjU0MmUwYWIxNTFmYjM4ODQ3NTRjZGZiY2I0NzJkYTUyZC4KKyAgICAgIC0gRGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgaW50ZWdlcjY0IGluIHBhc3Mgc2NyaXB0cyBpZiBjb21waWxpbmcKKwl3aXRob3V0IG9wYXF1ZS1zcGVjaWFsLXR5cGVzLgorICAgICAgLSBGYWN0b3Igb3V0IGFzYzJiaW4gYW5kIGJpbjJhc2MuIEFkZCBhIG5ldHNubXBfaW50ZXJuYWxfIHByZWZpeCB0bworCXRoZW0KKyAgICAgIC0gRml4ZWQgVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBhZnRlciAzMCBkYXlzIG9mIHVwdGltZS4gQWZ0ZXIgMzAKKwlkYXlzLCB2YWx1ZXMgZnJvbSAvcHJvYy9zdGF0IChvbiBMaW51eCkgY2FuIGdldCBiaWdnZXIgdGhhbiAzMmJpdHMKKwlhbmQgc25tcGQgY2FsY3VsYXRpb25zIG1pZ2h0IHJlbmRlciBjb3VudGVycyBsaWtlIHNzQ3B1VXNlcgorCW5lZ2F0aXZlIG9yIHplcm8sIHdoaWxlIHRoZSByZWFsIHZhbHVlIGlzIGhpZ2hlci4gVGhlcmVmb3JlIHRoZQorCWNvdW50ZXJzIHNob3VsZCBiZSB0cmFja2VkIGFzIHRoZSBsYXJnZXN0IGludGVnZXIgYXZhaWxhYmxlLgorICAgICAgLSBGaXhlZCBzbm1wZCAnLWQnIG9wdGlvbi4gTm93IGl0IGR1bXBzIHBhY2tldHMgYWdhaW4uCisgICAgICAtIElGLU1JQjo6aWZUeXBlOiBSZXBvcnQgdHlwZSAiaW5maW5pYmFuZCAoMTk5KSIgZm9yIEluZmluaUJhbmQKKwlpbnRlcmZhY2VzIGluc3RlYWQgb2YgdHlwZSAib3RoZXIgKDEpIi4KKyAgICAgIC0gSW5pdF9hZ2VudCgpICsgaW5pdF9rbWVtKCk6IFJldHVybiBhbiBlcnJvciB2YWx1ZSBpbnN0ZWFkIG9mCisJaW52b2tpbmcgZXhpdCgpIGlmIGFjY2VzcyB0byBrZXJuZWwgdmlydHVhbCBtZW1vcnkgaXMgZGVuaWVkCisgICAgICAtIE1ha2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRsbW9kIG1vZHVsZSBmYWlsIHJhdGhlciB0aGFuCisJZ2VuZXJhdGUgYSBkdW1teSBtb2R1bGUgaWYgdGhlIGRsb3BlbiBmdW5jdGlvbiBpc24ndCBhdmFpbGFibGUuCisgICAgICAtIE1hdGNoIGVhY2ggZ2V0cHduYW0oKS9nZXRwd3VpZCgpIGNhbGwgd2l0aCBhbiBlbmRwd2VudCgpIGNhbGwgYW5kCisJZWFjaCBnZXRncmVudCgpIGNhbGwgd2l0aCBhbiBlbmRncmVudCgpIGNhbGwuCisgICAgICAtIFBBVENIIDM0MDIzNzY6IGZyb20gTGVvbmFyZG8gQ2hpcXVpdHRvOiBSZWNvZ25pc2UgUmVpc2VyRlMgQWxzbworCW1vdmUgdmFyaW91cyBGU1R5cGUgZGVmaW5pdGlvbnMgdG8gdGhlIGFwcHJvcHJpYXRlIGJsb2NrcworICAgICAgLSBQQVRDSCAzNDUzODY4OiBmcm9tICJCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4iOiBGYWN0b3IgY29tbW9uCisJY29kZSBpbnRvIHBhc3NfY29tbW9uIE1vdmUgdGhlIGNvZGUgZm9yIHBvcm1hdHRpbmcgYW5kIHByaW50aW5nCisJdmFsdWVzIGZyb20gcGFzcyBhbmQgcGFzc19wZXJzaXN0IGludG8gcGFzc19jb21tb24uCisgICAgICAtIFBBVENIOiAzNDg3ODY3OiBEb24ndCBza2lwIG1pc3NpbmcgaWZYVGFibGUgZW50cmllcworCShpZkNvbm5lY3RvclByZXNlbnQgRkFMU0UpCisgICAgICAtIFBhc3NfcGVyc2lzdDogIEZpeGVzIGEgcmFjZSBjb25kaXRpb24gaW50cm9kdWNlZCBpbiBjb21taXQKKwkzMWZhMDdjZDlmZmRlNDZkNDFkMmI1ODM4YzNmYzRkMDE1NDhiZmI1LiBUaGUgZm9sbG93aW5nIHJhY2UKKwljb25kaXRpb24gY291bGQgaGFwcGVuOiAtIEEgc3lzdGVtIGNhbGwgZmFpbHMgYW5kIGVycm5vIGlzIHNldAorCWFjY29yZGluZ2x5IGJ5IHRoZSBDIGxpYnJhcnkuIC0gU0lHQ0hMRCBoYW5kbGVyIGludm9rZXMgYSBzeXN0ZW0KKwljYWxsIHRoYXQgZmFpbHMgYW5kIGhlbmNlIG92ZXJ3cml0ZXMgZXJybm8uIC0gU0lHQ0hMRCBoYW5kbGVyCisJbGVhdmVzLiAtIG9yaWdpbmFsIGNvbnRleHQgY2hlY2tzIGVycm5vIGFuZCBmaW5kcyB0aGUgdmFsdWUgZnJvbQorCXRoZSBzeXN0ZW0gY2FsbCBpbnZva2VkIGJ5IHRoZSBTSUdDSExEIGhhbmRsZXIgaW5zdGVhZCBvZiB0aGUKKwlzeXN0ZW0gY2FsbCB0aGF0IGZhaWxlZCBvcmlnaW5hbGx5LiBPdGhlciBmaXhlcyBpbmNsdWRlZCBpbiB0aGlzCisJcGF0Y2g6IC0gUmVuYW1lZCBkZWluaXRfcGFzc19wZXJzaXN0KCkgaW50byBzaHV0ZG93bl9wYXNzX3BlcnNpc3QoKQorCXN1Y2ggdGhhdCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGR1cmluZyBhZ2VudCBzaHV0ZG93bi4gLSBNYWRlCisJc3VyZSB0aGF0IHNodXRkb3duX3Bhc3NfcGVyc2lzdCgpIGlzIGNhbGxlZCBieSB0aGUgV2luZG93cworCXNubXBkLmV4ZSB0b28uIC0gV2luZG93czogYXZvaWQgY2FsbGluZworCUNsb3NlSGFuZGxlKElOVkFMSURfSEFORExFX1ZBTFVFKS4gLSBXaW5kb3dzOiBhdm9pZCB0aGF0IGNsb3NpbmcgYQorCXBhc3NfcGVyc2lzdCBwaXBlIHRyaWdnZXJzIGEgY3Jhc2guIC0gV2luZG93czogcGFzc19wZXJzaXN0OiBjbG9zZQorCWhhbmRsZXMgb2YgZmluaXNoZWQgcHJvY2Vzc2VzLgorCWFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jIHdpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaAorICAgICAgLSBTbXV4OiBzaW1wbGlmeSBzbXV4X2xpc3RfZGV0YWNoKCkKKyAgICAgIC0gVURQLU1JQjogUmVwb3J0IHRoZSBwcm9wZXIgYWRkcmVzcyBpbiB1ZHBMb2NhbEFkZHJlc3MgaW5zdGVhZCBvZgorCTAuMC4wLjAuIE1ha2VzIHRlc3QgVDE2MHNubXBuZXRzdGF0IHBhc3MgYWdhaW4uIEZpeGVzIGEgYnVnCisJaW50cm9kdWNlZCBpbiBjb21taXQgYzc2ZmI5NmY2NWUzM2JhMmZkMjEyYTkyMWU4YzM4NjE1NWVlNWM3YS4KKyAgICAgIC0gW0JVRyAzNDYwMzY0XTogRml4IHVzZSBvZiBibG9jayBmYWN0b3Igd2hlbiBkZXRlY3RpbmcgZXJyb3IKKwljb25kaXRpb25zCisgICAgICAtIFtCVUcgMzQ4OTYzMV06IEZpeCBpbmNvcnJlY3QgaGFuZGxpbmcgb2YgVUNEIG1vbml0b3JpbmcgZmxhZworICAgICAgLSBbUEFUQ0ggMzQxMDA1MF06IFNraXAgYWxyZWFkeS0ncHJvY2Vzc2VkJyB2YXJiaW5kcyBCYXNlZCBvbiBtaWIyYworCXBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gVHVybmVyCisgICAgICAtIFtQQVRDSCAzNDEwMDU5XTogRml4IHNwYXJzZWx5IGF1Z21lbnRpbmcgdHJpZ2dlciB0YWJsZXMgUGF0Y2gKKwlwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorICAgICAgLSBbUEFUQ0ggMzQ0NzQ0NF06IEZpeCBTSUdfUElQRSBoYW5kbGluZyBQYXRjaCBwcm92aWRlZCBieSBCaWxsCisJRmVubmVyCisgICAgICAtIFtQQVRDSCAzNDQ3NjcxXTogRml4IG92ZXJyaWRlIGhhbmRsaW5nIG9mIE9JRCB2YWx1ZXMgUGF0Y2ggc3VwcGxpZWQKKwlieSBQaGlsbGlwIE8nRG9ubmVsbAorICAgICAgLSBbUEFUQ0ggMzQ3OTc0MF06IEZpeCBoclNXUnVuUGVyZiBzdGF0aXN0aWNzCisgICAgICAtIFtQQVRDSCAzNDg3OTE5XTogRml4IGNvbXBpbGF0aW9uIHdoZW4gY2FjaGluZyBpcyBkaXNhYmxlZAorICAgICAgLSBbUEFUQ0ggMzQ5NTY5N106IFN0b3JlIHBlcnNpc3RlbnQgc25tcFRhcmdldCB0YWJsZSBjaGFuZ2VzCisgICAgICAtIEJVRyAzNTQyMTg4OiBDb3JyZWN0IHN5c09SRGVzY3IgZm9yIHNubXBVc21NSUIuIFRoYW5rcyB0byBEYXZlCisJVnVjaWNoIGZvciByZXBvcnRpbmcgdGhpcy4KKyAgICAgIC0gQlVHIDM1NDIzMDc6IENvcnJlY3Qgc3lzT1JJRCBmb3Igc25tcE1QRFN0YXRzLiBUaGFua3MgdG8gRGF2ZQorCVZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisgICAgICAtIEJVRzogMzU0Mzg2NDogUmVtb3ZlIGV4dHJhbmVvdXMgZnVuY3Rpb24gdHlwZSAoYW5kIGZpeCBhIHJlbGF0ZWQKKwl0eXBvKQorICAgICAgLSBSZW1vdmVkIGxpbWl0IG9mICdleGVjJyBhbmQgJ3NoJyBlbnRyaWVzIGluIHNubXBkLmNvbmYgVXNlIGR5bmFtaWMKKwkocmUpYWxsb2NhdGlvbiBpbnN0ZWFkLgorICAgICAgLSBbUEFUQ0ggMzU0MzAwMF06IFZhcmlvdXMgZml4ZXMgdG8gUm1vbiBjb2RlIFN1cHBsaWVkIGJ5IFBhdHJpY2sKKwlSaXR0ZXIKKworICAgIHNubXBkeDoKKyAgICAgIC0gW1BBVENIIDM0NDU0MzddOiBMb2cgQWdlbnRYIGRpc2Nvbm5lY3Rpb25zIChpbiBsaW5lIHdpdGgKKwljb25uZWN0aW9ucykgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworICAgIHNubXB0cmFwZDoKKyAgICAgIC0gQXZvaWQgY3Jhc2ggZHVyaW5nIHNodXRkb3duIGR1ZSB0byBpbnZva2luZyBwZXJsX2Rlc3RydWN0KE5VTEwpCisgICAgICAtIERvIG5vdCBpbnZva2Ugc2h1dGRvd25fcGVybCgpIGZyb20gaW5zaWRlIHRoZSBTSUdURVJNIGhhbmRsZXIgc2luY2UKKwl0aGF0IGZhaWxzIGlmIFNJR1RFUk0gaXMgcmVjZWl2ZWQgd2hpbGUgYSBQZXJsIGhhbmRsZXIgaXMgYWN0aXZlLgorCUJhc2VkIG9uIGEgcGF0Y2ggcG9zdGVkIGJ5IEpvZWwgQXZuaSA8amF2bmlAYXJ1YmFuZXR3b3Jrcy5jb20+CisgICAgICAtIEVsaW1pbmF0ZSBhbiB1bnVzZWQgdmFyaWFibGUgKE5vdykKKyAgICAgIC0gTW92ZSB0aGUgbWFpbiBsb29wIGNvZGUgaW50byBhIG5ldyBmdW5jdGlvbgorICAgICAgLSBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdHMKKworICAgIHNubXB0cmFwZF9zcWw6CisgICAgICAtIEF2b2lkIHRoYXQgYSBsaW5rZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIG9uIHN5c3RlbXMgd2hlcmUgbXlfcHJvZ25hbWUKKwlpcyBtaXNzaW5nIGluIGxpYm15c3FsY2xpZW50IChlLmcuIEZlZG9yYSAxNSBhbmQgMTYpLiBUaGlzIGlzIGEKKwliYWNrcG9ydCBvZiBjb21taXQgOWY2NTNmNy4KKworICAgIGFpeDoKKyAgICAgIC0gRWxpbWluYXRlIGNvbmZpZ3VyZSB3YXJuaW5nIHJlZ2FyZGluZyBsaWJwZXJmc3RhdC5oIG9uIEFJWCA2LjEgYW5kCisJdXAKKyAgICAgIC0gUEFUQ0ggMzQwMzQzMzogZnJvbSBibGVudHo6IElzc3VlcyB3aXRoIGhyU1dSdW5OYW1lIGFuZCBQYXJhbWV0ZXJzCisJb24gQUlYCSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIKKwk8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAgYXBwcywgc25tcGxpYjoKKyAgICAgIC0gUEFUQ0g6IDI4MzU1Nzc6IGlkZW50aWZpZWQgYnkgIkJhcnQgVmFuIEFzc2NoZSI6IFJlcGxhY2UgU05NUF9aRVJPCisJb2YgYXJyYXlzIHdpdGggYSBtZW1zZXQuIGdpdC1zdm4taWQ6CisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMQorCTc3OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisgICAgICAtIEJVRzogMzUyOTc2ODogQmUgbW9yZSBjYXJlZnVsIHdoZW4gc3RyaXBwaW5nIG9mZiBudW1lcmljIHN1ZmZpeGVzCiAKICAgICBidWlsZDoKLSAgICAgIC0gW0JVRyAzMTAyOTA0XTogQ29tcGlsZSBhbGwgc291cmNlIGZpbGVzIHdpdGggLWZuby1zdHJpY3QtYWxpYXNpbmcKLSAgICAgIC0gRG8gbm90IGNhbGwgVkFDTSBBUElzIGlmIFZBQ00gbW9kdWxlIGlzIG5vdCBpbmNsdWRlZAotICAgICAgLSBGaXggYXV0b2NvbmYgZGV0ZWN0aW9uIG9mIHN0cmNhc2VjbXAKLSAgICAgIC0gRml4IGJ1aWxkaW5nIG9mIHN0YXRpYyBhcHBsaWNhdGlvbnMgdXNpbmcgbmV0LXNubXAtY29uZmlnIC0qbGlicwotICAgICAgLSBGaXggZGVmaW5pdGlvbiBvZiBWRVJTSU9OIChudW1iZXIsIG5vdCBleHByZXNzaW9uKQorICAgICAgLSBEbyBub3QgZ2VuZXJhdGUgYW4gb3V0cHV0IGZpbGUgb24gZmFpbHVyZSBtYWtlIHN1cHBvc2VzIHRoYXQgbm8KKwlvdXRwdXQgaXMgZ2VuZXJhdGVkIGlmIHRoZSBjb21tYW5kIGZhaWxlZC4gQ2hhbmdlIGZlYXR1cmUtcmVtb3ZlIHRvCisJZm9sbG93IHRoYXQgcHJlc3VtcHRpb24uCisgICAgICAtIEJVRzogMzUzMjIzNDogRml4IHR5cG8gaW4gbGlidG9vbCBzY3JpcHQgKGFkZHJlc3NlZCBwcm9wZXJseSBpbgorCWxpYnRvb2wgMi40LjIpCisKKyAgICBidWlsZGluZzoKKyAgICAgIC0gQWRkIGRlcGVuZGVuY2llcyBvbiBARkVBVFVSRVRBUkdTQCB0byBtYWtlIHRoZSBzdWJ0YXJnZXQgd29yayBhcworCXdlbGwuCisgICAgICAtIEFkZCBtaXNzaW5nIGVuZCBjb21tZW50cyB0byBmZWF0dXJlIGlmbmRlZnMuCisgICAgICAtIEFkZCB0YXJnZXQgdG8gYnVpbGQgYWdlbnR4dHJhcCBmcm9tIHRoZSB0b3BsZXZlbAorICAgICAgLSBCdWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZyBmaWVsZCBtc2dfZmxhZ3MgaW4gc3RydWN0IG1zZ2hkcgorCShlLmcuIElSSVgpCisgICAgICAtIEJ1aWxkIGZpeCBmb3Igc3lzdGVtcyBsYWNraW5nIGZpZWxkcyBtc2dfY29udHJvbC9tc2dfZmxhZ3MgaW4KKwlzdHJ1Y3QgbXNnaGRyIChiYWNrcG9ydCkKKyAgICAgIC0gQ29ycmVjdCBkZXBlbmRlbmNpZXMgLSBzaW5jZQorCWJmNzRmZWE2OWYyNGRjNmU4NWY5MDhmM2Y0MWQxNDI2YjJlMDk2ODggc25tcGNvbmYgaXMgbG9jYXRlZCBpbgorCWJ1aWxkZGlyLCBub3Qgc3JjZGlyCisgICAgICAtIENvcnJlY3QgZGVwZW5kZW5jaWVzIC0gc2luY2UKKwliZjc0ZmVhNjlmMjRkYzZlODVmOTA4ZjNmNDFkMTQyNmIyZTA5Njg4IHNubXBjb25mIGlzIGxvY2F0ZWQgaW4KKwlidWlsZGRpciwgbm90IHNyY2RpciIgVGhpcyByZXZlcnRzIGNvbW1pdAorCTllZmE0NjdhOTcyYmI2ZTFjN2ZiZGFmMmUyNzQyOWQyOWY0YWI4OWUuCisgICAgICAtIE1ha2UgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGNvZGUgd29yayBhZ2FpbiBQcmV2aW91c2x5IHRoZQorCXRyYW5zcG9ydCBpbmhlcml0YW5jZSBwcm9jZXNzaW5nIGNvZGUgcmFuIHdpdGgKKwlORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgc2V0LiBJbiB0aGlzIG1vZGUgdGhlIGZpbGUKKwluZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaCBpcyByZXF1aWVyZWQuIFRoYXQgZmlsZSBpcyBjcmVhdGVkCisJZHVyaW5nIHRoZSBmaXJzdCBtYWtlIHJ1biwgYW5kIHRoYXQgaGFwcGVucyBhZnRlciBjb25maWd1cmUgaXMgcnVuLgorCUNoYW5nZSB0aGlzIHRvIHVuZGVmaW5lIE5FVFNOTVBfTUlOSU1BTF9DT0RFLCBlZmZlY3RpdmVseSB0dXJuaW5nCisJb2ZmIGZlYXR1cmUgc3VwcG9ydCBkdXJpbmcgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gaW4gb3JkZXIgdG8gbWFrZQorCWl0IHdvcmsgYXQgYWxsLgorICAgICAgLSBSdW4gbGlidG9vbCAtLW1vZGU9ZmluaXNoIG9uIHRoZSByaWdodCBkaXJlY3RvcnkKKworICAgIGxpYm5ldHNubXA6CisgICAgICAtIFBBVENIIDMzOTQ1ODY6IGZyb20gcndhLWNvOiBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiByZWFkX2NvbmZpZworCSgrZml4KSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgIGxpYnNubXA6CisgICAgICAtIENoYW5nZWQgdGhlIHR5cGUgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBvZiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkKKwlmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2ggdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuCisJcGFzc2luZyBhbm90aGVyIGRhdGF0eXBlIHRoZW4gY2hhciogb3IgY29uc3QgY2hhciouCiAKICAgICBtYW46Ci0gICAgICAtIFtCVUcgMzE5MDcyNV06IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZCBzbm1wX2FzeW5jX3NlbmQKLSAgICAgIC0gY2xlYW4gdXAgbWFudWFsIHBhZ2VzIChmcm9tIERlYmlhbiBwYXRjaCA1Nl9tYW5wYWdlKQorICAgICAgLSBbQlVHIDM0OTA3MDhdOiBDbGFyaWZ5IHVzZSBvZiBjb21tb24gY29tbWFuZC1saW5lIG9wdGlvbnMKKyAgICAgIC0gQlVHOiAzNTM1MjY5OiBEb2N1bWVudCB1c2Ugb2YgW3NubXBdIGZvciBjbGllbnQtc2lkZSB0b29scy4KKworICAgIHBhc3M6CisKKyAgICBwZXJsOgorICAgICAgLSBBZGQgYWdlbnQ6OnVwdGltZSgpCisgICAgICAtIEVuYWJsZSBzZW5kaW5nIFNOTVB2MiB0cmFwcyB3aXRoIGFuIGVtcHR5IHZhcmJpbmQgbGlzdAorICAgICAgLSBGaXggc3BlbGxpbmcgaW4gdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIFNOTVAgbW9kdWxlCisgICAgICAtIEZpeGVkIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxzLiBXaGVuCisJbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyIGZhaWxzLCBpdCBmcmVlcyBpdHMgcmVnaW5mbyAtPgorCW5zYWhyX0RFU1RST1kgKGFuZCBhbnkgb3RoZXIgZnVuY3Rpb24pIG11c3Qgbm90IGRlcmVmZXJlbmNlIGl0LgorICAgICAgLSBQZXJsOiBNYWtlIHN1cmUgdGhhdCB0aGUgY29uc3RhbnQgU05NUF9ERUZBVUxUX1JFVFJJRVMgaXMKKwlyZWNvZ25pemVkLiBTTk1QIG1vZHVsZTogQWRkIGNvbnN0YW50cworCU5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRSBhbmQKKwlORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVC4gV2hlbiB0aGUgTmV0LVNOTVAgUGVybCBtb2R1bGVzIGFyZQorCWJ1aWx0IG9uIFdpbmRvd3Mgd2l0aCBNU1ZDIG9yIE1pbkdXIGl0IGlzIHBvc3NpYmxlIHRoYXQgZWFjaCB0aGVzZQorCWFyZSBsaW5rZWQgd2l0aCBhbm90aGVyIHZlcnNpb24gb2YgdGhlIE1TVkMgcnVudGltZSBsaWJyYXJ5IHRoYW4KKwl0aGUgUGVybCBpbnRlcnByZXRlciBpdHNlbGYuIEluIHRoYXQgY2FzZSB0aGUgImVycm5vIiB2YXJpYWJsZSB1c2VkCisJaW5zaWRlIC54cyBzb3VyY2UgZmlsZXMgaXMgYW5vdGhlciB2YXJpYWJsZSB0aGFuIHRoZSAkISB2YXJpYWJsZSBpbgorCS5wbSBmaWxlcy4gT3I6IGFzc2lnbm1lbnRzIHRvICJlcnJubyIgaW4gYSAueHMgZmlsZSBkbyBub3QgbW9kaWZ5CisJdGhlICIkISIgUGVybCB2YXJpYWJsZSBUaGlzIHBhdGNoIGF2b2lkcyB1c2luZyAiZXJybm8iIGJ5IG1vZGlmeWluZworCXRoZSBkaWZmZXJlbnQgY29uc3RhbnQoKSBmdW5jdGlvbnMgc3VjaCB0aGF0IHRoZXNlIHJldHVybiBhCisJdHdvLWVsZW1lbnQgYXJyYXkgaW5zdGVhZCBvZiByZXR1cm5pbmcgYSBzY2FsYXIgYW5kIHNldHRpbmcgZXJybm8uCisKKyAgICBweXRob246CisgICAgICAtIEF2b2lkIHRoYXQgYW4gU05NUCBzZXQgd2l0aCBVc2VFbnVtcyBlbmFibGVkIGNhdXNlcyBhIHNlZ21lbnRhdGlvbgorCWZhdWx0CisgICAgICAtIFtQQVRDSCAzNDMzODQ2XTogRml4IGZvciB1c2Ugd2l0aCBweXRob24gMi40CisgICAgICAtIEJVRzogMzUzNTk2NzogRml4IG1lbW9yeSBsZWFrIC0gc25tcF97c2Vzc199ZXJyb3IgYWxsb2NhdGVzIHRoZQorCW91dHB1dCBidWZmZXIKKworICAgIHRlc3Rpbmc6CisgICAgICAtIEFkZCBhIHRlc3QgZm9yIHNlX3N0b3JlX2xpc3QoKQorICAgICAgLSBBZGQgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUKKyAgICAgIC0gQXZvaWQgZmFsc2UgbmVnYXRpdmUgZm9yIFQxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSBjYXVzZWQgYnkgdGhlCisJdGVzdCByZXN1bHQgYmVpbmcgcHJlc2VudCBpbiB0aGUgaGV4IGR1bXAgKCJtb3N0bHlfaGFybWxlc3MiKQorICAgICAgLSBDb252ZXJ0IHNubXBsaWIvdGVzdF9iaW5hcnlfYXJyYXkuYyBpbnRvIHR3byB1bml0IHRlc3RzCisgICAgICAtIEZpeCBQZXJsIHJlZ3Jlc3Npb24gdGVzdCBmYWlsdXJlcyBBbGwgUGVybCByZWdyZXNzaW9uIHRlc3RzIHBhc3MKKwlub3cgb24gTGludXggYW5kIG9uIFdpbmRvd3MgKE1TVkMpLgorICAgICAgLSBNYWtlIHRoZSBhc24xIHRlc3QgcGFzcyBldmVuIGlmIHN1cHBvcnQgZm9yIG9wYXF1ZSB0eXBlcyBhcmUKKwlyZW1vdmVkLgorICAgICAgLSBQZXJsIHJlZ3Jlc3Npb24gdGVzdHM6IERvbid0IGZhaWwgc2tpcHBlZCB0ZXN0cy4KKyAgICAgIC0gUHJvdGVjdCB0aGUgdXNlIG9mICRPU1RZUEUgdG8gZW5zdXJlIHRoYXQgJ3Rlc3QnIGdldCBlbm91Z2gKKwlwYXJhbWV0ZXJzLgorICAgICAgLSBSZW1vdmUgYW4gaW5jb3JyZWN0IGNvbW1lbnQgZnJvbSBzaW1wbGVfZXZhbF90b29scy5zaAorICAgICAgLSBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisgICAgICAtIFJlcXVpcmUgYSBzZW1pY29sb24gYWZ0ZXIgT0soKSwgT0tGKCkgYW5kIFBMQU4oKSBBbHNvLCBsZXQgT0tGKCkKKwllbWl0IGEgc2luZ2xlIGxpbmUgb2Ygb3V0cHV0IHN1Y2ggdGhhdCBhbGwgb3V0cHV0IGl0IHByb2R1Y2VzIGlzCisJdmlzaWJsZSBpbiB0aGUgb3V0cHV0IG9mICJtYWtlIHRlc3QiLgorICAgICAgLSBbQlVHIDM0NzQ1OTBdOiBEb24ndCBtYXRjaCB1bmRlcnNjb3JlcyB3aXRoaW4gdGhlIHNvdXJjZSByb290CisJZmlsZW5hbWUKKyAgICAgIC0gQWRkIHRlc3QgY2FzZXMgZm9yIHNubXBfc2VydmljZQorCisgICAgdW5zcGVjaWZpZWQ6CisgICAgICAtIEFkZGVkIENWRlMgKENlbnRyYVZpc2lvbiBGaWxlIFN5c3RlbSkgdG8gaHJTdG9yYWdlVGFibGUgYW5kCisJaHJGU1RhYmxlLgorICAgICAgLSBSZW1vdmVkIGNvdW50ZXItNjQgZXJyb3IgbWVzc2FnZXMuICAgVGhlc2UgbWVzc2FnZXMgZG8gbm90IHNheQorCWVueXRoaW5nIHVzZWZ1bCwgY2FsbGVyIHNob3VsZCBjaGVjayB0aGVpciByZXR1cm4gdmFsdWUgYW5kIHJlcG9ydAorCWl0LgorICAgICAgLSBBZGRlZCBPQ0ZTMiAoT3JhY2xlIENsdXN0ZXIgRlMpIHRvIGhyU3RvcmFnZVRhYmxlIGFuZCBockZTVGFibGUKKyAgICAgIC0gW0JVRyAzNDQ0OTM5XTogQlVHOiAxNzk2ODg2OiBzbm1wbGliOiBBdm9pZCB0aGF0CisJc3ByaW50X3JlYWxsb2Nfb2N0ZXRfc3RyaW5nKCkgZW1iZWRzIHVucHJpbnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycworCW9yIGJpbmFyeSB6ZXJvZXMgaW4gaXRzIG91dHB1dC4gVGhpcyBiZWhhdmlvciBjb3VsZCBjYXVzZSB0cnVuY2F0ZWQKKwlvdXRwdXQgaW4gc25tcHRyYXBkLgorICAgICAgLSBbQlVHIDM0NTIwNjldOiBGaXggc25tcHRyYXBfb2lkIGRlY2xhcmF0aW9uIGluIG1pYjJjIGdlbmVyYXRlZCBjb2RlCisJVGhpcyBidWcgd2FzIGludHJvZHVjZWQgY29uc2lkZXJhYmxlIHRpbWUgYWdvLiBJdCBkaWQgYWxyZWFkeSBleGlzdAorCWF0IHRoZSB0aW1lIHRoZSA1LjYgYnJhbmNoIHdhcyBjcmVhdGVkIChzZWUgYWxzbyBjb21taXQKKwkwZWMwODhhZmEyN2NmZGE0ZTZlYTc4YWFlN2NmYzU1MDc1NjRlZGRlKS4KKyAgICAgIC0gW0JVRyAzNDU0MTY4XTogY29uZmlndXJlOiBGaXggYnVpbGRpbmcgd2l0aCAtLWVuYWJsZS1yZWFkLW9ubHkKKyAgICAgIC0gW1BBVENIIDM0MTg2NDldOiBIT1NULVJFU09VUkNFUy1NSUI6IFVzZSBwY2xvc2UoKSBpbnN0ZWFkIG9mCisJZmNsb3NlKCkgdG8gY2xvc2UgYSBwaXBlLgorICAgICAgLSBbQlVHIDM1NDA2MjFdOiBkaXN0OiBBZGQgbWlzc2luZyBQcm92aWRlczogdG8gbmV0LXNubXAtcGVybG1vZHMgUlBNCisJc3BlYworCisgICAgQlNEOgorCisgICAgQnVnIDMxNTI4NDE6CisgICAgICAtIERvIG5vdCBpbnN0YWxsIHRoZSB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMgdGhhdCB3ZXJlIHJlbW92ZWQgaW4gNS43CisgICAgICAtIEluc3RhbGwgdXRpbF9mdW5jcyBzdWJoZWFkZXJzCisgICAgICAtIEluc3RhbGwgdXRpbF9mdW5jcyBzdWJoZWFkZXJzIGludHJvZHVjZWQgaW4gNS42CisKKyAgICBDeWd3aW46CisgICAgICAtIE1ha2UgZGF0ZV9uX3RpbWUoKSBwcm9kdWNlIHRpbWUgem9uZSBpbmZvcm1hdGlvbgorCisgICAgQ3l3aW46CisgICAgICAtIEFnZW50OiBJbXBsZW1lbnQgZ2V0X3VwdGltZSgpIHN1Y2ggdGhhdCBxdWVyeWluZworCUhPU1QtUkVTT1VSQ0VTLU1JQjo6aHJTeXN0ZW1VcHRpbWUgcmV0dXJucyBhIG5vbi16ZXJvIHZhbHVlLgorCisgICAgRnJlZUJTRDoKKyAgICAgIC0gUmVzdG9yZSBJUF9SRUNWRFNUQUREUiBmdW5jdGlvbmFsaXR5LgorICAgICAgLSBTbm1wZCArIGFwcHM6IFNlbmRpbmcgVURQIHBhY2tldHMgd29ya3MgYWdhaW4gZm9yIG5vbi1yb290IHVzZXJzCisgICAgICAtIFtQQVRDSCAzNDg5Mzg3XTogSW5zdGFsbCBGcmVlQlNEIDEwIGhlYWRlciBmaWxlIChwbHVzIG90aGVyIG1pc3NpbmcKKwl2ZXJzaW9ucykKKworICAgIExpbnV4OgorICAgICAgLSBQQVRDSDogMzUyNTk5ODogRG9uJ3QgdXNlIGFuIHVuaW5pdGlhbGlzZWQgdmFsdWUgaW4gZXJyb3IgbWVzc2FnZQorICAgICAgLSBbUEFUQ0ggMzUzNjQyMF06IEVuc3VyZSBzbmQvcmN2IG1lbW9yeSBidWZmZXJzIGFyZSBzdWl0YWJseSBhbGlnbmVkCisJUGF0Y2ggcHJvdmlkZWQgYnkgVHlsZXIgT2xtc3RlYWQKKworICAgIE1pbkdXOgorICAgICAgLSBOZXQtU05NUCBQZXJsIG1vZHVsZXMgYnVpbGQgYWdhaW4uCisgICAgICAtIFN1cHBvcnQgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgcmVjZW50IFNoaW5pbmcgTGlnaHQgT3BlblNTTAorCWJpbmFyeSBkaXN0cmlidXRpb25zCisgICAgICAtIFRlc3Rpbmc6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSB0ZXN0IGZyYW1ld29yaworICAgICAgLSBUZXN0aW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdGVzdCBydW5uZXIKKyAgICAgIC0gVGVzdGluZzogTWFrZSB0ZXN0IFQxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSBwYXNzCisgICAgICAtIFRlc3Rpbmc6IE1ha2UgdGhvc2UgcmVncmVzc2lvbiB0ZXN0cyBwYXNzIGZvciB3aGljaCBTTk1QQ09ORlBBVEgKKwlhbmQvb3IgU05NUF9QRVJTSVNURU5UX0RJUiBtYXR0ZXIKKyAgICAgIC0gVGVzdGluZzogTWFrZSB1bml0LXRlc3RzL1QwMTRnZXRob3N0YnlhZGRyX2NsaWIgcGFzcworICAgICAgLSBUZXN0aW5nOiBNYWtlIHVuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliIHBhc3MuCisgICAgICAtIFRlc3Rpbmc6IE9idGFpbiB0aGUgTVNZUyBwYXRoIGZyb20gdGhlIGVudmlyb25tZW50CisKKyAgICBXaW4zMjoKKyAgICAgIC0gQXZvaWQgdGhhdCBjb21waWxpbmcgdGhlIGhlYWRlciBmaWxlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKwl3aXRoIHRoZSBNaW5HVyBnY2MgY29tcGlsZXIgdHJpZ2dlcnMgd2FybmluZ3MgYWJvdXQgInByYWdtYQorCWNvbW1lbnQiLgorICAgICAgLSBBdm9pZCB0aGF0IHRoZSBQQUNLQUdFXyogbWFjcm9zIGRlZmluZWQgaW4KKwk8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhdXNlIHRyb3VibGUgd2hlbiBpbmNsdWRpbmcgdGhpcworCWhlYWRlciBpbiBhIHBhY2thZ2UgdGhhdCB1c2VzIHRoZSBHTlUgYXV0b3Rvb2xzLgorICAgICAgLSBCdWlsZGluZzogQnVpbGRzIG5vdyBjb3JyZWN0bHkgd2l0aCBhIDY0LWJpdCBjb21waWxlci4gZ2l0LXN2bi1pZDoKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxCisJOTQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKyAgICAgIC0gU25tcGQ6IFJlbW92ZSBkbG1vZAorCisgICAgV2luZG93czoKKyAgICAgIC0gQnVpbGRpbmcgKGJ1aWxkLmJhdCk6IEluc3RhbGwgbmV0c25tcC5kbGwgYmVmb3JlIHJ1bm5pbmcgdGhlIFBlcmwKKwlyZWdyZXNzaW9uIHRlc3RzIHN1Y2ggdGhhdCB0aGUgcmVncmVzc2lvbiB0ZXN0cyBhcmUgcnVuIHdpdGggdGhlCisJY29ycmVjdCB2ZXJzaW9uIG9mIG5ldHNubXAuZGxsLgorICAgICAgLSBNU1ZDOiBBdm9pZCB0aGF0IHRoZSB0eXBlZGVmcyBpbiA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisJY29uZmxpY3Qgd2l0aCB0aG9zZSBpbiA8c3RkaW50Lmg+IGZyb20gdGhlIG1zaW50dHlwZXMgcHJvamVjdAorICAgICAgLSBNU1ZDOiBMaW5rIHdpdGggcHJvcGVyIGxpYmVheTMyIGxpYnJhcnkKKyAgICAgIC0gTVNWQzogV2hlbiBsaW5raW5nIHdpdGggT3BlblNTTCwgbGluayB3aXRoIHVzZXIzMi5saWIgdG9vCisgICAgICAtIE1ha2UgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgcm9idXN0IGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24KKwlmYWlsdXJlcy4gTWFrZSBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oKSB1c2UgbWVtc2V0KCkgb24gVW5peCBzeXN0ZW1zCisJaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBsb29wLiBNYWtlIHN1cmUgdGhhdCBvbiBVbml4IHN5c3RlbXMKKwluZXRzbm1wX2xhcmdlX2ZkX2NscigpIGRvZXNuJ3QgdHJ5IHRvIHJlYWQgbWVtb3J5IGl0IGlzbid0IGFsbG93ZWQKKwl0byByZWFkIGlmIHRoZSBmaXJzdCBhcmd1bWVudCBlcXVhbHMgLTEgKGEgdmFsdWUgdGhhdCBzaG91bGRuJ3QgYmUKKwlwYXNzZWQgYnkgdGhlIGNhbGxlcikuIE1ha2UgbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoKSByZXR1cm4gZmFsc2UKKwlvbiBVbml4IHN5c3RlbXMgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGVxdWFscyAtMSAoYSB2YWx1ZSB0aGF0CisJc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4gTWFrZQorCW5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHNocmluayBiZWhhdmlvciBjb3JyZWN0LgorICAgICAgLSBQZXJsIChidWlsZC5iYXQpOiBXaGVuIGluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMsIGluc3RhbGwgdGhlCisJUERCIGZpbGVzIHRvby4KKyAgICAgIC0gUmVtb3ZlIHN1cGVyZmx1b3VzIGxpbmsgbGlicmFyaWVzIGZyb20gcHJvamVjdCBmaWxlcyAoKi5kc3ApCisgICAgICAtIFNubXB0cmFwZDogTWFrZSB0aGUgSVAgYWRkcmVzcyB0byBob3N0bmFtZSBjb252ZXJzaW9uIHdvcmsKKyAgICAgIC0gVGVzdGluZzogcGVybDogRml4IGFuIGluY29ycmVjdCBtZXNzYWdlIHByaW50ZWQgd2hpbGUgcnVubmluZyB0aGUKKwlQZXJsIG1vZHVsZSByZWdyZXNzaW9uIHRlc3RzCisKKworCisKKyo1LjcuMSoKKworICAgIHNubXBsaWI6CisgICAgICAtIEZpeCBhIGNyYXNoIHRoYXQgY291bGQgYmUKKyAgICAgIC0gdHdlYWsgcGF0Y2ggMzA0NDg4OCB0byByZXN0b3JlCisKKyAgICBzbm1wZDoKKyAgICAgIC0gW1BBVENIIDMzODY2MzNdOiBmaXggaW50ZWdlciBvdmVyZmxvdyBpbiBkaXNrIHBlcmNlbnQgY2FsY3VsYXRpb25zCisgICAgICAtIE1ha2UKKyAgICAgIC0gUmVzdG9yZSBzdG9yYWdlIHRhYmxlcyBvbiBMaW51eAorICAgICAgLSBydW4gc2lnbmFsIGhhbmRsZXJzIHdoZW4gc2VsZWN0KCkKKworICAgIHNubXB0cmFwZDoKKyAgICAgIC0gQWRkIG1pc3NpbmcgbmV3bGluZQorICAgICAgLSBJbnZva2Ugc2h1dGRvd25fcGVybCgpIHdoZW4KKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBbUEFUQ0ggMzM4Mzk1MV06IEZpeCAtV3VudXNlZCBjb21waWxlIHdhcm5pbmdzIHdpdGggRnJlZUJTRC9OZXRCU0QKKwlTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKyAgICAgIC0gYnVpbGQgZml4CisgICAgICAtIGJ1aWxkIGZpeCBmb3Igc3lzdGVtcyBsYWNraW5nCisKKyAgICBsaWJuZXRzbm1wOgorICAgICAgLSBbUEFUQ0ggMzM4NzEzOV06IGZyb20KKworICAgIG1hbjoKKyAgICAgIC0gW1BBVENIIDMzMTI4NjFdOiBNYW4gcGFnZXMKKworICAgIHRlc3Rpbmc6CisgICAgICAtIENoYW5nZWQKKyAgICAgIC0gQ2hlY2sgUElEIGZpbGUgZXhpc3RlbmNlIGFmdGVyIGhhdmluZyByZWFkIGl0IGluc3RlYWQgb2YgYmVmb3JlLgorCVRoaXMgZml4ZXMgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBQSUQgZmlsZSBkaXNhcHBlYXJlZCBhZnRlcgorCXRoZSBleGlzdGVuY2UgY2hlY2sgYW5kIGJlZm9yZSBpdCB3YXMgcmVhZC4KKyAgICAgIC0gTWFrZSB0aGUgU05NUF9WRVJCT1NFPTEgb3V0cHV0IGV2ZW4gbW9yZSB2ZXJib3NlLgorCisgICAgdW5zcGVjaWZpZWQ6CisgICAgICAtIG1pbm9yIE5FV1MgcG9saXNoCisKKyAgICBQZXJsOgorICAgICAgLSBSZW1vdmUgZmlsZSBwZXJsL05ldFNOTVAueHMKKworICAgIFdpbjMyOgorICAgICAgLSBBZGQgc3VwcG9ydCBmb3IKKyAgICAgIC0gRG9jdW1lbnQgaG93IHRvIGJ1aWxkIDY0LWJpdAorICAgICAgLSBEb2N1bWVudGVkIGhvdyB0byB1c2UgYnVpbGQuYmF0IHdpdGgKKyAgICAgIC0gd2luRXh0RExMOiBJbnZva2UKKworICAgIFdpbmRvd3M6CisgICAgICAtIEF2b2lkIHRoYXQgaWYKKyAgICAgIC0gUmVtb3ZlIG91dGRhdGVkIGluc3RydWN0aW9ucyBhYm91dAorCisqNS43KgorICAgIHNubXBsaWI6CisgICAgICAtIEFkZGVkIGZ1bmN0aW9uIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkuCisgICAgICAtIEFkZGVkIGZ1bmN0aW9uIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkuIEFkZGVkIGRlY2xhcmF0aW9uCisJZm9yIHRoZSBmdW5jdGlvbiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkgaW4gYSBwdWJsaWMKKwlhZ2VudCBoZWFkZXIgZmlsZS4KKyAgICAgIC0gQWRkZWQgZnVuY3Rpb24gbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKS4gQWRkZWQgZGVjbGFyYXRpb24KKwlmb3IgdGhlIGZ1bmN0aW9uIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKSBpbiBhIHB1YmxpYworCWFnZW50IGhlYWRlciBmaWxlLiBGaXhlZCBtZW1vcnkgbGVhayBpbgorCW5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKS4KKyAgICAgIC0gQWRkZWQgZnVuY3Rpb24gbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKS4gQWRkZWQgZGVjbGFyYXRpb24KKwlmb3IgdGhlIGZ1bmN0aW9uIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKSBpbiBhIHB1YmxpYworCWFnZW50IGhlYWRlciBmaWxlLiBGaXhlZCBtZW1vcnkgbGVhayBpbgorCW5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKS4gRml4ZWQgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5CisJdW5yZWdpc3RlcmluZyBhIHRhYmxlIGhhbmRsZXIuCisgICAgICAtIEFkZGVkIG1hY3JvIG5ldHNubXBfc3RhdGljX2Fzc2VydCgpLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX21pYl9oYW5kbGVyLmRhdGFfY2xvbmUsIGEgZnVuY3Rpb24gcG9pbnRlciB0aGF0CisJZGVmaW5lcyBob3cgdG8gY2xvbmUgbmV0c25tcF9taWJfaGFuZGxlci5teXZvaWQuIE11c3QgYmUgZGVmaW5lZCBpZgorCWFuZCBvbmx5IGlmIGRhdGFfZnJlZSBpcyBzZXQuIFRoZSBmdW5jdGlvbiBuZXRzbm1wX2hhbmRsZXJfZHVwKCkKKwlkb2VzIG5vdyBjbG9uZSBNSUIgaGFuZGxlciBwcml2YXRlIGRhdGEgaWYgZGF0YV9jbG9uZSgpIGlzIHNldC4KKwlQcmV2aW91c2x5IGFmdGVyIGR1cGxpY2F0aW5nIGEgTUlCIGhhbmRsZXIgYW5kIHVucmVnaXN0ZXJpbmcgb25lIG9mCisJdGhlIHR3byBNSUIgaGFuZGxlcnMsIHRoZSBwcml2YXRlIGRhdGEgcG9pbnRlciAobXl2b2lkKSBvZiB0aGUKKwlvdGhlciBiZWNhbWUgYSBkYW5nbGluZyBwb2ludGVyLiBOb3RlOiBhZGRpdGlvbiBvZgorCW5ldHNubXBfbWliX2hhbmRsZXIuZGF0YV9jbG9uZSBpcyBhbiBBQkkgY2hhbmdlLgorICAgICAgLSBBZGRlZCBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKS4KKyAgICAgIC0gQWRkZWQgdGhlIGZ1bmN0aW9uIG5ldHNubXBfY2hlY2tfZGVmaW5lZG5lc3MoKSwgd2hpY2ggaGVscHMgdG8gZmluZAorCXRoZSBjYXVzZSBvZiB1bmRlZmluZWQgdmFsdWUgZXJyb3JzIGFzIHJlcG9ydGVkIGJ5IFZhbGdyaW5kLgorICAgICAgLSBBdm9pZCB0aGF0IFZhbGdyaW5kIGNvbXBsYWlucyBhYm91dCB1bmluaXRpYWxpemVkIGRhdGEgZm9yIHRoZQorCWJ1ZmZlcnMgcmV0dXJuZWQgYnkgbmV0c25tcF9jYWxsYmFja19yZWN2KCkgYW5kCisJbmV0c25tcF9jYWxsYmFja19ob29rX2J1aWxkKCkuCisgICAgICAtIEJlIGNvbnN0IGNvcnJlY3Qgb3ZlciBjYWxscyB0byBzdHIqIGZ1bmN0aW9ucy4KKyAgICAgIC0gQ2hhbmdlZCB0aGUgYXJndW1lbnQgdHlwZSBvZiBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoKSBmcm9tIGNoYXIgKgorCWludG8gY29uc3QgY2hhciAqLgorICAgICAgLSBDaGVjayB0aGF0IHRoZSBhcmd1bWVudCB0byBuZXRzbm1wX3RyYW5zcG9ydF9jb3B5IGlzIG5vbi1OVUxMCisgICAgICAtIENoZWNrIHRoZSByZXR1cm4gdmFsdWUgb2Ygc3RyZHVwIGluIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCBhbmQKKwlmYWlsIGlmIHN0cmR1cCBmYWlscy4KKyAgICAgIC0gQ29ycmVjdCB0aGUgZXh0ZXJuICJDIiBkZWNsYXJhdGlvbnMgdG8gYmUgY29uc2lzdGVudC4gUmVtb3ZlCisJY29tbWVudGVkIG91dCBjb2RlLgorICAgICAgLSBGZW5uZXI6IGZpeCBzZW5kaW5nIG9mIFVEUCByZXNwb25zZXMgZnJvbSBtdWx0aWhvbWVkIGFnZW50cy4gVHJ5IHRvCisJc2VuZCB0aGUgcmVzcG9uc2UgYXMgaXQgd2FzIGJlZm9yZSBOZXQtU05NUCA1LjYgKGFzc3VtaW5nIHRoZQorCWFwcHJvcHJpYXRlIHJlcXVlc3Qgd2FzIHVuaWNhc3QpIGFuZCBvbmx5IGlmIGl0IGZhaWxzIHRyeSB0byBzZXQKKwlpZl9pbmRleCAodGhlIHJlcXVlc3QgbXVzdCBiZSBicm9hZGNhc3QpLgorICAgICAgLSBGaXhlZCBidWdzIGluIGFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NCgpLAorCWFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCgpLCBhc25fcGFyc2Vfc2lnbmVkX2ludDY0KCkgYW5kCisJYXNuX2J1aWxkX3NpZ25lZF9pbnQ2NCgpLiBNb3N0IGJ1dCBub3QgYWxsIG9mIHRoZXNlIGJ1Z3Mgd2VyZQorCXNwZWNpZmljIHRvIDY0LWJpdCBzeXN0ZW1zLiBGaXhlcyBidWcgIzMwOTMxOTkuCisgICAgICAtIEZpeGVkIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBjYWxsaW5nIHNlX2FkZF9wYWlyX3RvX2xpc3QoKSB3aXRoIGEKKwl2YWx1ZSB0aGF0IGFscmVhZHkgZXhpc3RlZCBpbiB0aGUgbGlzdC4KKyAgICAgIC0gSW52b2tpbmcgc2VfY2xlYXJfc2xpc3QoKSBkb2VzIG5vIGxvbmdlciBjcmVhdGUgYSBkYW5nbGluZyBwb2ludGVyLgorICAgICAgLSBJbnZva2luZyBzZV9jbGVhcl9zbGlzdCgpIGRvZXMgbm8gbG9uZ2VyIGNyZWF0ZSBhIGRhbmdsaW5nIHBvaW50ZXIuCisJRml4ZWQgbGVha3MtYXQtZXhpdCB0cmlnZ2VyZWQgYnkgdXNpbmcgdGhlIHNubXBfZW51bSBjb2RlLgorICAgICAgLSBJbnZva2luZyBzZV9jbGVhcl9zbGlzdCgpIGRvZXMgbm8gbG9uZ2VyIGNyZWF0ZSBhIGRhbmdsaW5nIHBvaW50ZXIuCisJRml4ZWQgbGVha3MtYXQtZXhpdCB0cmlnZ2VyZWQgYnkgdXNpbmcgdGhlIHNubXBfZW51bSBjb2RlLgorCURvY3VtZW50ZWQgYmVoYXZpb3Igb2Ygc2VfYWRkX3BhaXIoKSwgc2VfYWRkX3BhaXJfdG9fc2xpc3QoKSBhbmQKKwljbGVhcl9zbm1wX2VudW0oKS4gTWFkZSBzbm1wX2VudW0gZXhhbXBsZSBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3QKKwlvZiB0aGUgY29kZSBieSBhZGRpbmcgc3RyZHVwKCkgY2FsbHMgYW5kIGFkZGVkIGEgY2FsbCB0bworCXNlX2NsZWFyX2FsbF9saXN0cygpLgorICAgICAgLSBJbnZva2luZyBzZV9jbGVhcl9zbGlzdCgpIGRvZXMgbm8gbG9uZ2VyIGNyZWF0ZSBhIGRhbmdsaW5nIHBvaW50ZXIuCisJRml4ZWQgbGVha3MtYXQtZXhpdCB0cmlnZ2VyZWQgYnkgdXNpbmcgdGhlIHNubXBfZW51bSBjb2RlLgorCURvY3VtZW50ZWQgYmVoYXZpb3Igb2Ygc2VfYWRkX3BhaXIoKSwgc2VfYWRkX3BhaXJfdG9fc2xpc3QoKSBhbmQKKwljbGVhcl9zbm1wX2VudW0oKS4gTWFkZSBzbm1wX2VudW0gZXhhbXBsZSBjb25zaXN0ZW50IHdpdGggdGhlIHJlc3QKKwlvZiB0aGUgY29kZSBieSBhZGRpbmcgc3RyZHVwKCkgY2FsbHMgYW5kIGFkZGVkIGEgY2FsbCB0bworCXNlX2NsZWFyX2FsbF9saXN0cygpLiBGaXhlZCBhIG1lbW9yeSBjb3JydXB0aW9uIHByb2JsZW0gdHJpZ2dlcmVkCisJYnkgdGhlICh1bmRvY3VtZW50ZWQpIHNubXBkLmNvbmYgImVudW0iIGtleXdvcmQgaGFuZGxlciAtIHN0b3JpbmcKKwlwb2ludGVycyB0byBzdHJpbmdzIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgaW4gYSBnbG9iYWwgbGlzdCBkb2VzCisJbm90IHdvcmsuCisgICAgICAtIFJlbW92ZSB0aGUgc3VwcG9ydCBmb3IgQ01VIGNvbXBhdGliaWxpdHkgc2luY2UgdGhlcmUgaXMgbm8gd2F5IHRvCisJZW5hYmxlIGl0IGFuZCBub2JvZHkgaGF2ZSBtaXNzZWQgaXQuCisgICAgICAtIFtCVUcgMzEzNDMyM106IEZpeCBjcmFzaCB3aGVuIGNvbXBhcmluZyBpbnZhbGlkIE9JRHMKKyAgICAgIC0gW1BBVENIIDMxNjU4NzhdOiBDYXRjaCBidWZmZXIgb3ZlcnJ1biBvbiA2NC1iaXQgc3lzdGVtcworICAgICAgLSBbUEFUQ0ggMzE5NTUzN106IE1pbm9yIGJpbmFyeV9hcnJheSBjb250YWluZXIgc29ydCBvcHRpbWl6YXRpb24KKyAgICAgIC0gW1BBVENIIDMyMDM4MDZdOiBBZGQgdGhlIGZ1bmN0aW9uIG5ldHNubXBfbGFyZ2Vfc2VsZWN0KCkuCisgICAgICAtIFtQQVRDSCAzMjAzODA2XTogTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSBjbGVhciBhbGwKKwlyZWxldmFudCBmaWxlIGRlc2NyaXB0b3JzLgorICAgICAgLSBbUEFUQ0ggMzIwMzgwNl06IE1pbm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvZgorCW5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpLgorICAgICAgLSBhZGQgSVB2NiBzdXBwb3J0IHRvIERUTFNVRFAgdHJhbnNwb3J0CisgICAgICAtIGFkZCBJUHY2IHN1cHBvcnQgdG8gRFRMU1VEUCB0cmFuc3BvcnQgdXNlIG5ldworCW5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSBpbiBuZXRzbm1wX2FkZHJfcGFpcgorICAgICAgLSBhZGQgSVB2NiBzdXBwb3J0IHRvIERUTFNVRFAgdHJhbnNwb3J0IHVzZSBuZXcKKwluZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgaW4gbmV0c25tcF9hZGRyX3BhaXIgYWRkIGJhc2VfdHJhbnNwb3J0CisJcHRyIGZvciB0dW5uZWxlZCB0cmFuc3BvcnRzCisgICAgICAtIGFkZCBtb3JlIG9wZW5zc2wgZXJyb3IgY2FzZXMgd2hlcmUgd2UgY2hlY2sgZm9yIGxvY2FsIGNlcnQKKyAgICAgIC0gYWRkIG5ldyB0cmFuc3BvcnQgY29uZmlnIHRva2VucyBsb2NhbENlcnQvcGVlckNlcnQsIGRlcHJlY2F0ZQorCW91cl9pZGVudGl0eSwgdGhlaXJfaWRlbnRpdHkKKyAgICAgIC0gYWRkIG9wdGlvbmFsIHN1cHBvcnQgZm9yIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIG9mIGhvc3RuYW1lcwktCisJb3B0aW9uYWwgYXQgY29uZmlndXJlIHRpbWU6IC0td2l0aC1sb2NhbC1kbnNzZWMtdmFsaWRhdGlvbiAtCisJcmVxdWlyZXMgRE5TU0VDLVRvb2wgdmFsaWRhdGlvbiBsaWJyYXJpZXMgLSBpbml0aWFsIHN1cHBvcnQsIGZvcgorCXN5c3RlbXMgd2l0aCBnZXRhZGRyaW5mby4gc3VwcG9ydCBmb3IgYWRkaXRpb25hbCByZXNvbHZlcgorCWludGVyZmFjZXMgY29taW5nIHNvb24uIC0gYWxzbyBUT0RPOiBmbGFnIGZvciBpZ25vcmluZyB2YWxpZGF0b2luCisJZXJyb3JzIChsb2cgJiBjb250aW51ZSkKKyAgICAgIC0gZG9udCByZXR1cm4gZW1wdHkgYXJyYXkKKyAgICAgIC0gZm9yY2UgYSA7IGF0IHRoZSBlbmQgb2YgdGhlIHN0YXRpY19hc3NlcnQgbWFjcm8uCisgICAgICAtIGludHJvZHVjZSBuZXcgbG9jYWxDZXJ0L3BlZXJDZXJ0LCBkZXByZWNhdGUgc2VydmVyQ2VydCwgY2xpZW50Q2VydCwKKwlkZWZYNTA5U2VydmVyUHViLCBkZWZYNTA5Q2xpZW50UHViCisgICAgICAtIG5ldHNubXBfaGFuZGxlcl9kdXAoKTogZnJlZWluZyB0aGUgZHVwbGljYXRlZCBoYW5kbGVyIG5vIGxvbmdlcgorCWNhdXNlcyBhIGNyYXNoIChkb3VibGUgZnJlZSkgd2hlbiBoYW5kbGVyLT5teXZvaWQgb2YgdGhlIG9yaWdpbmFsCisJaGFuZGxlciB3YXMgbm9uLU5VTEwuCisgICAgICAtIHJlYWxsb2MraW5pdCBpbnN0ZWFkIG9mIGNhbGxvYyBpbnNwaXJlZCBieSBwYXRjaCAzMTk1NTMyIGZyb20KKwlTdGVwaGVuIEhlbW1pbmdlcgorICAgICAgLSByZWZpbmUgY2VydCBkZWJ1Z2dpbmc7IHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24KKyAgICAgIC0gcmVtb3ZlIGlubGluZSB2ZXJzaW9ucyBvZiBjb250YWluZXIgZnVuY3MKKyAgICAgIC0gc25tcF9zaHV0ZG93bigpOiBhZGRlZCBjYWxsIHRvIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKS4KKyAgICAgIC0gMCBBcHBsaWVkIHRoZSBpbnRlbnQgb2YgcGF0Y2ggMzA0NDg4OCB0byBhbGxvdyBhcHBsaWNhdGlvbnMgdG8gcmVhZAorCXRoZSBlcnJvciBtZXNzYWdlcyBvZiBhIE1JQiBwYXJzaW5nIGZhaWx1cmUuCisgICAgICAtIEZpeGVkIGEgbWVtb3J5IGxlYWsgaW4gc25tcF9mcmVlX3Nlc3Npb24oKS4KKyAgICAgIC0gW0JVRyAzMTg0Njk3XTogRG9uJ3QgcmVmZXJlbmNlIGludGVybmFsIE1ENSB3aGVuIGl0J3MgZXhwbGljaXRseQorCWRpc2FibGVkCisgICAgICAtIFtCVUcgMzIzNDc1NF06IEVuc3VyZSBvbGQgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMgaW5pdGlhbGl6ZWQKKwl0byBOVUxMCisgICAgICAtIFtCVUcgMzI2NDg1Ml06IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcworCShzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykKKyAgICAgIC0gX21pYmluZGV4X2FkZCgpIG5vIGxvbmdlciByZWFkcyBwYXN0IHRoZSBlbmQgb2YgdGhlIGR5bmFtaWNhbGx5CisJYWxsb2NhdGVkIGFycmF5IF9taWJpbmRleGVzLgorICAgICAgLSBbQlVHIDMxNTE4NDVdOiBmaXggbXVsdGlwbGUgcmVnaXN0cmF0aW9ucyBvZiBzbm1wIHRyYW5zcG9ydCBoYW5kbGVyCisKKyAgICBzbm1wOgorICAgICAgLSBwYXRjaDogMzA5NjcyNTogc3lzT1JUYWJsZSByZWdpc3RhdGlvbiBmb3Igbm90aWZpY2F0aW9uIGxvZyBtaWIKKwlvcmlnaW5hbCBwYXRjaCBmaXhlZCBzZXZlcmFsIGlzc3Vlcywgb3RoZXIgcGFydHMgYXBwbGllZCBlYXJsaWVyCisKKyAgICBzbm1wZDoKKyAgICAgIC0gQWRkIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb24KKyAgICAgIC0gQWRkZWQgZnVuY3Rpb25zIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYnJlcSgpLAorCW5ldHNubXBfcmVnaXN0cmF0aW9uX293bnNfdGFicmVxKCksIG5ldHNubXBfaXRlcmF0b3JfY2xvbmUoKS4KKwlFeHBvcnRlZCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2Nsb25lKCkuCisgICAgICAtIEFkZGVkIGZ1bmN0aW9ucyBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJyZXEoKSwKKwluZXRzbm1wX3JlZ2lzdHJhdGlvbl9vd25zX3RhYnJlcSgpLCBuZXRzbm1wX2l0ZXJhdG9yX2Nsb25lKCkuCisJRXhwb3J0ZWQgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZSgpLiBNb2RpZmllZAorCW5ldHNubXBfaXRlcmF0b3JfZGVsZXRlX3RhYmxlKCkgc3VjaCB0aGF0IGl0IGZyZWVzIHRoZSB0YWJsZQorCXJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBzdG9yZWQgaW4gYSB0YWJsZSBpdGVyYXRvciB0b28uIE1vZGlmaWVkCisJbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlcigpIHN1Y2ggdGhhdCB0aGUgdGFibGUgaXRlcmF0b3IKKwlwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBpcyBmcmVlZCB3aGVuIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgaXMKKwlmcmVlZC4gUmVzdG9yZWQgdGhlIGJlaGF2aW9yIG9mIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIoKSB0byB0aGF0CisJb2YgcjE5NDQ5LCB0aGF0IGlzLCBub3Qgc2V0dGluZyB1cCB0aGUgZGF0YV9mcmVlIHBvaW50ZXIgYmVjYXVzZQorCW5vdCBhbGwgY2FsbGVycyBvZiBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKCkgZXhwZWN0IHRoYXQgdGFibGUKKwlyZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gaXMgZnJlZWQgd2hlbiB0aGUgYXNzb2NpYXRlZCBoYW5kbGVyIGlzCisJZnJlZWQuCisgICAgICAtIEFkZGVkIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yMigpLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcjIoKS4gQWRkZWQKKwluZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigpLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcjIoKS4gQWRkZWQKKwluZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigpLiBBZGRlZAorCW5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8oKS4KKyAgICAgIC0gQWRkZWQgbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3IyKCkuIEFkZGVkCisJbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoKS4gQWRkZWQKKwluZXRzbm1wX2hhbmRsZXJfb3duc19pdGVyYXRvcl9pbmZvKCkuIEZpeGVkIGxlYWstYXQtZXhpdCB0cmlnZ2VyZWQKKwlieSBzbm1wTm90aWZ5VGFibGUuCisgICAgICAtIEFkZGVkIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yMigpLiBBZGRlZAorCW5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKCkuIEFkZGVkCisJbmV0c25tcF9oYW5kbGVyX293bnNfaXRlcmF0b3JfaW5mbygpLiBGaXhlZCBsZWFrLWF0LWV4aXQgdHJpZ2dlcmVkCisJYnkgc25tcE5vdGlmeVRhYmxlLiBGaXhlZCBsZWFrLWF0LWV4aXQgdHJpZ2dlcmVkIGJ5CisJc25tcFRhcmdldEFkZHJUYWJsZS4gQWxzbywgcmVzdG9yZWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb2YKKwluZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKCkuCisgICAgICAtIEFkZGVkIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoKSwKKwluZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMigpLCBuZXRzbm1wX2Nsb25lX3dhdGNoZXJfaW5mbygpCisJYW5kIG5ldHNubXBfb3duc193YXRjaGVyX2luZm8oKS4gU2VlIGFsc28gdGhlIERveHlnZW4gY29tbWVudHMgZm9yCisJbW9yZSBpbmZvLgorICAgICAgLSBBZGRlZCBuZXRzbm1wX3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKCkuCisgICAgICAtIEFkZGVkIHJlZmVyZW5jZSBjb3VudCBpbiB0aGUgbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzIGRhdGEKKwlzdHJ1Y3R1cmUgYW5kIG1hZGUgc3VyZSB0aGF0IHRoaXMgZGF0YSBzdHJ1Y3R1cmUgaXMgYXV0b21hdGljYWxseQorCWZyZWVkIHdoZW4gdGhlIGhhbmRsZXIgdGhhdCBvd25zIGl0IGlzIHVucmVnaXN0ZXJlZC4KKyAgICAgIC0gQWRkZWQgc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKCkuIENhbGwgc2h1dGRvd25fbWFzdGVyX2FnZW50KCkgYW5kCisJc2h1dGRvd25fYWdlbnQoKSBkdXJpbmcgc2h1dGRvd24uCisgICAgICAtIEFkZGVkIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCgpLiBDYWxsIHNodXRkb3duX21hc3Rlcl9hZ2VudCgpIGFuZAorCXNodXRkb3duX2FnZW50KCkgZHVyaW5nIHNodXRkb3duLiBUaGUgZnVuY3Rpb24gY2xlYW5fc3VidHJlZSgpIGRvZXMKKwlubyBsb25nZXIgdHJpZ2dlciBkb3VibGUgZnJlZXMgYW5kIGludmFsaWQgbWVtb3J5IHJlYWRzLiBOb3RlOiB0aGlzCisJZnVuY3Rpb24gd2FzIGFscmVhZHkgd3JvbmcgYXQgdGhlIHRpbWUgaXQgd2FzIGludHJvZHVjZWQgKHBhdGNoCisJIzcyNDkyNSAvIHI4NTMxLCBKdWx5IDIwMDMpLgorICAgICAgLSBBZGRlZCBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKS4gQ2FsbCBzaHV0ZG93bl9tYXN0ZXJfYWdlbnQoKSBhbmQKKwlzaHV0ZG93bl9hZ2VudCgpIGR1cmluZyBzaHV0ZG93bi4gVGhlIGZ1bmN0aW9uIGNsZWFuX3N1YnRyZWUoKSBkb2VzCisJbm8gbG9uZ2VyIHRyaWdnZXIgZG91YmxlIGZyZWVzIGFuZCBpbnZhbGlkIG1lbW9yeSByZWFkcy4gTm90ZTogdGhpcworCWZ1bmN0aW9uIHdhcyBhbHJlYWR5IHdyb25nIGF0IHRoZSB0aW1lIGl0IHdhcyBpbnRyb2R1Y2VkIChwYXRjaAorCSM3MjQ5MjUgLyByODUzMSwgSnVseSAyMDAzKS4gUmVtb3ZlZCBhIGNvbW1lbnQgaW4KKwluZXRzbm1wX2hhbmRsZXJfZnJlZSgpIHRoYXQgaXMgbm93IG9ic29sZXRlIGJlY2F1c2Ugb2YgdGhlCisJY2xlYW5fc3VidHJlZSgpIGNoYW5nZXMuCisgICAgICAtIEFkZGVkIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCgpLiBDYWxsIHNodXRkb3duX21hc3Rlcl9hZ2VudCgpIGFuZAorCXNodXRkb3duX2FnZW50KCkgZHVyaW5nIHNodXRkb3duLiBUaGUgZnVuY3Rpb24gY2xlYW5fc3VidHJlZSgpIGRvZXMKKwlubyBsb25nZXIgdHJpZ2dlciBkb3VibGUgZnJlZXMgYW5kIGludmFsaWQgbWVtb3J5IHJlYWRzLiBOb3RlOiB0aGlzCisJZnVuY3Rpb24gd2FzIGFscmVhZHkgd3JvbmcgYXQgdGhlIHRpbWUgaXQgd2FzIGludHJvZHVjZWQgKHBhdGNoCisJIzcyNDkyNSAvIHI4NTMxLCBKdWx5IDIwMDMpLiBSZW1vdmVkIGEgY29tbWVudCBpbgorCW5ldHNubXBfaGFuZGxlcl9mcmVlKCkgdGhhdCBpcyBub3cgb2Jzb2xldGUgYmVjYXVzZSBvZiB0aGUKKwljbGVhbl9zdWJ0cmVlKCkgY2hhbmdlcy4gTW9kaWZpZWQgbmV0c25tcF9kZXJlZ2lzdGVyX2FnZW50X25zYXAoKQorCXN1Y2ggdGhhdCBpdCBuZXZlciBleGFtaW5lcyBzZXNzaW9ucyB0aGF0IGFscmVhZHkgaGF2ZSBiZWVuIGNsb3NlZC4KKwlJdCBpcyBmb3IgdGhpcyBjaGFuZ2UgdGhhdCBpdCB3YXMgbmVjZXNzYXJ5IHRvIGludHJvZHVjZSB0aGUgbmV3CisJZnVuY3Rpb24gc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwKCkuCisgICAgICAtIEFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUoKSBhbmQKKwluZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZSgpLgorICAgICAgLSBBZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKCkgYW5kCisJbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoKS4gTWVtb3J5IGFsbG9jYXRlZCBieQorCW5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpIGZvciBzdG9yaW5nIFNOTVAgdmFyaWFibGVzIGlzIG5vdyBmcmVlZAorCXdoZW4gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciBpcyB1bnJlZ2lzdGVyZWQuCisgICAgICAtIEFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUoKSBhbmQKKwluZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZSgpLiBNZW1vcnkgYWxsb2NhdGVkIGJ5CisJbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkgZm9yIHN0b3JpbmcgU05NUCB2YXJpYWJsZXMgaXMgbm93IGZyZWVkCisJd2hlbiB0aGUgYXNzb2NpYXRlZCBoYW5kbGVyIGlzIHVucmVnaXN0ZXJlZC4gQ2FsbGJhY2sgZnVuY3Rpb24gZGF0YQorCWRlYWxsb2NhdGlvbiBkb2VzIG5vIGxvbmdlciBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUKKwlBZ2VudFggc2Vzc2lvbiAtIHRoZSBtZW1vcnkgdGhhdCB3YXMgYWxsb2NhdGVkIGZvciBBZ2VudFggc2Vzc2lvbnMKKwlpcyBub3cgZGVhbGxvY2F0ZWQganVzdCBhcyB0aGF0IGZvciBhbnkgb3RoZXIgc2Vzc2lvbi4gVGhpcyBmaXhlcyBhCisJbGVhay1hdC1leGl0LgorICAgICAgLSBBZGRlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKCkgYW5kCisJbmV0c25tcF9jYWNoZV9oYW5kbGVyX293bnNfY2FjaGUoKS4gTWVtb3J5IGFsbG9jYXRlZCBieQorCW5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpIGZvciBzdG9yaW5nIFNOTVAgdmFyaWFibGVzIGlzIG5vdyBmcmVlZAorCXdoZW4gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciBpcyB1bnJlZ2lzdGVyZWQuIENhbGxiYWNrIGZ1bmN0aW9uIGRhdGEKKwlkZWFsbG9jYXRpb24gZG9lcyBubyBsb25nZXIgZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBmb3IgdGhlCisJQWdlbnRYIHNlc3Npb24gLSB0aGUgbWVtb3J5IHRoYXQgd2FzIGFsbG9jYXRlZCBmb3IgQWdlbnRYIHNlc3Npb25zCisJaXMgbm93IGRlYWxsb2NhdGVkIGp1c3QgYXMgdGhhdCBmb3IgYW55IG90aGVyIHNlc3Npb24uIFRoaXMgZml4ZXMgYQorCWxlYWstYXQtZXhpdC4gTm90aWZ5IGZpbHRlciB0YWJsZTogQ2FsbGJhY2sgZnVuY3Rpb24gZGF0YQorCWRlYWxsb2NhdGlvbiBkb2VzIG5vIGxvbmdlciBmcmVlIHRoZSBkYXRhIGluICoJICAKKwkqc25tcE5vdGlmeUZpbHRlclRhYmxlX2lmX2N0eC5jb250YWluZXIgLSB0aGlzIGlzIG5vdyBkb25lIGJ5ICAKKwlzaHV0ZG93bl9zbm1wTm90aWZ5RmlsdGVyVGFibGUoKSBhbmQKKyAgICAgIC0gQXV0b21hdGljYWxseSBmcmVlIHRoZSBwcml2YXRlIGRhdGEgc3RydWN0dXJlIGFsbG9jYXRlZCBieQorCW5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KCkuCisgICAgICAtIEJ1aWxkcyB3aXRoIG1vc3QgcmVjZW50IE1pbkdXIChoYXZpbmcgI2RlZmluZSBsb2NhbHRpbWVfcikuCisgICAgICAtIENvdW50IHRoZSBudW1iZXIgb2YgdXNlcnMgb2YgYSBuZXRzbm1wX2NhY2hlIGRhdGEgc3RydWN0dXJlIGluc3RlYWQKKwlvZiBkdXBsaWNhdGluZyBpdC4KKyAgICAgIC0gRGVjbGFyZSB0aGUgT0lEIGFyZ3VtZW50IHR5cGUgb2YgTUlCIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYXMKKwknY29uc3Qgb2lkIConIGluc3RlYWQgb2YgJ29pZCAqJyBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgZG8gbm90CisJbW9kaWZ5IHRoZSBPSUQuCisgICAgICAtIERvIG5vdCBsZWFrIHRoZSBsaW1pdHMgb2Ygc2NhbGFyX2dyb3VwIG9iamVjdHMgb24gc2h1dGRvd24uCisgICAgICAtIEV4dGVuZCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgZGF0YV9jbG9uZSBhbmQgZGF0YV9mcmVlCisgICAgICAtIEZhY3RvciBvdXQgY29tbW9uIGNvbmZpZ19hZGRfbWliIHN0YXRtZW50cworICAgICAgLSBGaW5kIG91dCB3aGV0aGVyIGxpYnJwbSBpcyBhdmFpbGFibGUgYmVmb3JlIGNvbmZpZ3VyaW5nIHRoZSBhZ2VudAorCW1vZHVsZXMgYmVjYXVzZSBob3N0L2RhdGEvYWNjZXNzL3N3aW5zdCBuZWVkcyBzeW1ib2wgSEFWRV9MSUJSUE0uCisJQXMgYSByZXN1bHQsIGNvbmZpZ3VyZSBoYXMgdG8gYmUgcnVuIG9ubHkgb25jZSBpbnN0ZWFkIG9mIHR3aWNlIHRvCisJZW5hYmxlIHRoZSBoclNXSW5zdGFsbGVkIHRhYmxlIG9uIHN5c3RlbXMgdGhhdCBoYXZlIGxpYnJwbS4KKyAgICAgIC0gRml4ZWQgYSBkb3VibGUgZnJlZSBhdCBleGl0IHRoYXQgd2FzIHRyaWdnZXJlZCBieSBjbGVhbmluZyB1cCB0aGUKKwlkYXRhIHN0cnVjdHVyZXMgdXNlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LgorICAgICAgLSBGaXhlZCBhIHllYXItMjAzOCBidWcgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIGlwUm91dGVUYWJsZS4KKyAgICAgIC0gSW50cm9kdWNlZCBuZXRzbm1wX3BpZF90LgorICAgICAgLSBNSUItc3BlY2lmaWMgbGVhay1hdC1leGl0IGZpeGVzLgorICAgICAgLSBNYWtlIGl0IHBvc3NpYmxlIHRvIGNvcHkgd2F0Y2hlZCBkYXRhIGl0ZW1zIHdpdGhvdXQgbWVtb3J5IGxlYWtzLgorICAgICAgLSBNYWtlIHRoZSBzZXR0aW5nIG9mIHRoZSBhcmd2cmVzdGFydCogdmFyaWFibGVzIG9wdGlvbmFsIG9uCisJVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRS4KKyAgICAgIC0gTWFrZSB0aGUgc2V0dGluZyBvZiB0aGUgYXJndnJlc3RhcnQqIHZhcmlhYmxlcyBvcHRpb25hbCBvbgorCVVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUuIFJlbW92ZSB1dGlsX2Z1bmNzL3Jlc3RhcnQgZnJvbSB0aGUKKwlyZXF1aXJlbWVudCBzZXRzIG9mIHV0aWxfZnVuY3MgYW5kIGRlZmF1bHRfbW9kdWxlcy4KKyAgICAgIC0gTWFrZSB0aGUgc2V0dGluZyBvZiB0aGUgYXJndnJlc3RhcnQqIHZhcmlhYmxlcyBvcHRpb25hbCBvbgorCVVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUuIFJlbW92ZSB1dGlsX2Z1bmNzL3Jlc3RhcnQgZnJvbSB0aGUKKwlyZXF1aXJlbWVudCBzZXRzIG9mIHV0aWxfZnVuY3MgYW5kIGRlZmF1bHRfbW9kdWxlcy4gQWRkCisJdXRpbF9mdW5jcy9yZXN0YXJ0IHRvIHRoZSByZXF1aXJlbWVudCBzZXQgb2YgdWNkLXNubXAvdmVyc2lvbmluZm8uCisgICAgICAtIFBhdGNoIDMxNDE0NjI6IGZyb20gZmVubmVyOiBmaXggYWdlbnR4IHN1YmFnZW50IGlzc3VlcyB3aXRoCisJbXVsdGlwbGUtb2JqZWN0IHJlcXVlc3RzCisgICAgICAtIFBhdGNoIGZyb20gTmllbHMgdG8gZml4IFZBQ00gcGVyc2lzdGFudCBzdG9yYWdlLgorICAgICAgLSBSZW1vdmUgdW51c2VkIHZhcmlhYmxlIGNtcAorICAgICAgLSBSZW1vdmUgdXRpbF9mdW5jcy9FeGl0IGZyb20gdGhlIHJlcXVpcmVtZW50IHNldHMgb2YgdXRpbF9mdW5jcyBhbmQKKwlkZWZhdWx0X21vZHVsZXMuCisgICAgICAtIFJlbW92ZSB1dGlsX2Z1bmNzL0V4aXQgZnJvbSB0aGUgcmVxdWlyZW1lbnQgc2V0cyBvZiB1dGlsX2Z1bmNzIGFuZAorCWRlZmF1bHRfbW9kdWxlcy4gTmV2ZXIgdXNlIEV4aXQgdG8gdGVybWluYXRlIHRoZSBhZ2VudC4KKyAgICAgIC0gUmVtb3ZpbmcgdGhlIGxhc3QgY2FjaGUgdmlhIG5ldHNubXBfY2FjaGVfcmVtb3ZlKCkgZG9lcyBubyBsb25nZXIKKwl0cmlnZ2VyIGEgY3Jhc2guCisgICAgICAtIFVwZGF0ZSB0aGUgbGVuZ3RoIG9mIHN5c09iamVjdElEIGFzIHdlbGwgYXMgdGhlIGRhdGEgd2hlbiBpdCBpcyBzZXQKKwlmcm9tIGEgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgLSBVc2UgdGhlIHNhbWUgYXV0b2NvbmYgc3ltYm9sIHRvIGRlY2lkZSBib3RoIGlmIHN0cmNhc2VjbXAgc2hvdWxkIGJlCisJZGVjbGFyZWQgYW5kIGlmIGl0IHNob3VsZCBiZSBkZWZpbmVkLgorICAgICAgLSBbQlVHIDE4NDAyMzBdOiBEb24ndCBpbmNsdWRlIHRoZSBpbmRleCBvYmplY3QgYXMKKwkocHNldWRvLSlhY2Nlc3NpYmxlIGNvbHVtbi4KKyAgICAgIC0gW0JVRyAzMDU4MTAxXTogV3JpdGVhYmxlICdsb25nJyBpbnN0YW5jZXMgd29yayBvbiA2NC1iaXQgc3lzdGVtcywKKwlidXQgbm90IHdyaXRhYmxlICdpbnQncworICAgICAgLSBbQlVHIDMwNjI1MzhdOiBGaXggY29tMnNlYyogaGFuZGxpbmcgb2Ygbm9uLWRlZmF1bHQgY29udGV4dHMKKyAgICAgIC0gW0JVRyAzMjA1NzY1XTogaGFuZGxlIHJlY29uZmlnIGZvciBjZXJ0U2VjTmFtZSB0b2tlbgorICAgICAgLSBbQlVHIF06IGVuZm9yY2UgbWF4IGxlbmd0aCBvbiBUTFMgc2VjTmFtZSBtYXBzCisgICAgICAtIFtCVUcgXTogZW5mb3JjZSBtYXggbGVuZ3RoIG9uIFRMUyBzZWNOYW1lIG1hcHMgYWRkIHByaW9yaXR5IHRvCisJc2VjbmFtZSBkZWJ1Z2dpbmcKKyAgICAgIC0gW1BBVENIIDIxMTk3MjVdOiBGaXggc2tpcE5GU0luSG9zdFJlc291cmNlcyBoYW5kbGluZyBvZgorCWhyU3RvcmFnZVRhYmxlCisgICAgICAtIFtQQVRDSCAyOTQxODExXTogSGFuZGxlIHN1Y2Nlc3NmdWwgcmVxdWVzdHMgd2l0aCByZXFJRCAwCisgICAgICAtIFtQQVRDSCAyOTc1MjU0XTogQXZvaWQgY2FsbGJhY2sgcmUtdXNlIG9mIGNsb3NlZCBzZXNzaW9ucyBRbjoKKwlTaG91bGQgdGhpcyBhbHNvIGJlIGFwcGxpZWQgd2hlbiBtYWluIHNlc3Npb24gaXMgTlVMTD8KKyAgICAgIC0gW1BBVENIIDMwNTM0MzZdOiBmcm9tOiB0YWtldm9zOiBmaXg6IHRjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2VzcworCWludmFsaWQgbWVtb3J5IGFjY2VzcworICAgICAgLSBbUEFUQ0ggMzA1NzA5MF06IG1ha2UgZXRodG9vbCBzdXBwb3J0IG9uIGxpbnV4IHVzZSB0aGUgaGlnaCBzcGVlZAorCXN0cnVjdCBpbmZvIGZvciAxMDBHKy4KKyAgICAgIC0gW1BBVENIIDMwNTcwOTNdOiBhbGxvdyBsaW51eCB0byB1c2UgbGlicGNpIGZvciBjcmVhdGluZyB1c2VmdWwKKwlpZkRlc2NyIHN0cmluZ3MKKyAgICAgIC0gW1BBVENIIDMwOTY3MjVdOiBEb24ndCByZWdpc3RlciB2MVRyYXAgY2FsbGJhY2ssIGlmIFNOTVB2MSBpcyBub3QKKwlzdXBwb3J0ZWQKKyAgICAgIC0gW1BBVENIIDMwOTY3MjVdOiBJbmNsdWRlIFNOTVB2MSB0cmFwIE9JRHMgaW4gbmxtTG9nTm90aWZpY2F0aW9uSUQKKwljb2x1bW4KKyAgICAgIC0gW1BBVENIIDMxMjU5Nl06IGxpc3RlbiBmb3IgbmV0bGluayBjaGFuZ2UgZXZlbnRzIGZvciB0aGUKKwlhcnAtcmVsYXRlZCB0YWJsZXMKKyAgICAgIC0gW1BBVENIIDMxNTI0MTJdOiBIYW5kbGUgKGFuZCByZXBvcnQpIHByb2JsZW1zIHJlYWRpbmcgL3Byb2Mvdm1zdGF0CisgICAgICAtIFtQQVRDSCAzMjAzODA2XTogQXZvaWQgdGhhdCB0aGUgbWFpbiBhZ2VudCBwcm9jZXNzaW5nIGxvb3AgLSB3aGVuCisJdXNpbmcgbW9yZSB0aGFuIEZEX1NFVFNJWkUgZmlsZSBkZXNjcmlwdG9ycyAtIGNhbiBjYXVzZSBtZW1vcnkKKwljb3JydXB0aW9uIGJ5IGludm9raW5nIHNlbGVjdCgpLgorICAgICAgLSBbUEFUQ0ggXTogb3B0aW1pemF0aW9ucyBmb3IgbGFyZ2Ugcm91dGUgdGFibGVzIGZyb20gU3RlcGhlbgorCUhlbW1pbmdlciBhcHBsaWVkIHBhcnRzIDEtMyBvZiA0IGZyb20gaGltIChtc2dzIHRvIGNvZGVycyBvbgorCTIvMjgvMTE7IHN1YmplY3QgaXAtZm9yd2FyZC1taWIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzOyBwYXJ0IDQKKwluZWVkcyBtb3JlIHdvcmsKKyAgICAgIC0gYWRkIGRlYnVnIGZvciBjZXJ0IGZpbmQgaGludCBhcyBzdHJpbmcvaW50CisgICAgICAtIGFkZCBuZXdseSBjcmVhdGVkL2Rlc3Ryb3llZCBpbnRlcmZhY2VzIHRvIGlwdjZJZlRhYmxlIFRoZSBsaXN0IG9mCisJaW50ZXJmYWNlcyB3YXMgbmV2ZXIgcmVmcmVzaGVkLCBub3cgaXQgaXMgcmVsb2FkZWQgZXZlcnkgdGltZSB0aGUKKwl0YWJsZSBpcyBhY2Nlc3NlZC4gSSd2ZSBhbHNvIGZpeGVkIGEgbWVtb3J5IGxlYWsgYW5kIG9wdGltaXplZCB0aGUKKwlsb2FkaW5nIG9mIHRoZSBsaXN0IGEgYml0LgorICAgICAgLSBjb20yc2VjNiBkaXJlY3RpdmU6IElmIGNvbmZpZ3VyZSBoYXMgbm90IGZvdW5kIGdldGFkZHJpbmZvKCksCisJbm9uLW51bWVyaWMgSVB2NiBhZGRyZXNzZXMgZG8gbm93IHRyaWdnZXIgYW4gZXJyb3IgbWVzc2FnZS4KKyAgICAgIC0gZG9uJ3Qgc2Vjb25kLWd1ZXNzIGNhY2hlIGhhbmRsZXIgKHdhdmVzIGhhbmQpIHRoaXMgaXMgbm90IHRoZQorCWZ1bmN0aW9uIHlvdSBhcmUgbG9va2luZyBmb3IuIG5ldHNubXBfY2FjaGVfaXNfdmFsaWQoKSBpcyBub3QgbWVhbnQKKwlmb3IgbWliIG1vZHVsZXMKKyAgICAgIC0gZXhhbXBsZSBNSUI6IEFkZGVkIHNodXRkb3duIGZ1bmN0aW9uIHRoYXQgZnJlZXMgYWxsIG1lbW9yeSBvd25lZCBieQorCXRoaXMgTUlCIGltcGxlbWVudGF0aW9uLgorICAgICAgLSBmaXggZG91YmxlIGZyZWUgaW4gVExTIGVycm9yIGhhbmRsaW5nCisgICAgICAtIGZpeGVkIHRoZSBhZ2VudCB3cml0aW5nICdsb29rcyBsaWtlIGEgNjRiaXQgd3JhcCwgYnV0IHByZXYhPW5ldycgaW4KKwlzeXNsb2cgd2hlbiBjb21wdXRpbmcgaXBTeXN0ZW1TdGF0cyBXaXRob3V0IHRoZSBtZW1jcHksCisJcHJldl92YWxzLT5zdGF0cyBhbmQgbmV3X3ZhbHMtPnN0YXRzIGNvdWxkIGdldCBkaWZmZXJlbnQsIHdoaWNoCisJY291bGQgbXVjaCBtdWNoIGxhdGVyICh3aGVuIGEgY291bnRlciBnZXRzIGJpZ2dlciB0aGFuIDMyIGJpdHMpCisJcmVzdWx0IGluICdwcmV2IT1uZXcnIG1lc3NhZ2UgaW4gc3lzbG9nLiBUeXBpY2FsbHkgdGhpcyBoYXBwZW5zCisJYWZ0ZXIgbG9uZyB0aW1lIG9mIHVwdGltZSBhbmQgaXQgaXMgdmVyeSBoYXJkIHRvIHJlcHJvZHVjZS4KKyAgICAgIC0gaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisJbmV0c25tX3N3aW5zdF9hcmNoX2luaXQoKS4KKyAgICAgIC0gaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOiBQYXNzIGNvcnJlY3QgcGF0aCB0byBycG1kYk9wZW4oKSBzdWNoCisJdGhhdCBvcGVuaW5nIHRoZSBkYXRhYmFzZSBzdWNjZWVkcy4KKyAgICAgIC0gaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOiBQYXNzIGNvcnJlY3QgcGF0aCB0byBycG1kYk9wZW4oKSBzdWNoCisJdGhhdCBvcGVuaW5nIHRoZSBkYXRhYmFzZSBzdWNjZWVkcy4gaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOgorCUxvZyBhbiBlcnJvciBtZXNzYWdlIGlmIHJwbWRiT3BlbigpIGZhaWxzLgorICAgICAgLSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gTkVUU05NUF9EU19MSUJfQVBQVFlQRSwgYnJlYWsgb3V0IGNlcnQgdGFibGUKKwlpbml0cyB0byBuZXcgYWdlbnQgY2VydCBpbml0IGZ1bmN0aW9uLCBjYWxsZWQgZnJvbSBpbml0X2FnZW50LgorICAgICAgLSBuZXRzbm1wX2NhY2hlX2ZyZWUoKTogQSBtb3JlIGRldGFpbGVkIG1lc3NhZ2UgaXMgbm93IGxvZ2dlZCB3aGVuCisJYXR0ZW1wdGluZyB0byBmcmVlIGEgY2FjaGUgdGhhdCBpcyBzdGlsbCBpbiB0aGUgY2FjaGUgbGlzdC4KKyAgICAgIC0gcmV3b3JrZWQgaHJTdG9yYWdlVGFibGUgdG8gc3VwcG9ydCBsYXJnZSBmaWxlc3lzdGVtcy4gVGhlCisJaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzIGRvZXMgbm90IHJlcG9ydCByZWFsIGFsbG9jYXRpb24gdW5pdCBzaXplLAorCWJ1dCBzb21lIGNhbGN1bGF0ZWQgdmFsdWUgc28gaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzICoKKwloclN0b3JhZ2VTaXplIGdpdmVzIHJlYWwgc2l6ZSBvZiB0aGUgZmlsZXN5c3RlbS4gVGhpcyBjYWxjdWxhdGlvbgorCWhhcHBlbnMgb25seSB3aGVuIGhyU3RvcmFnZVNpemUgaXMgdG9vIHNtYWxsICgzMmJpdHMpIGZvcgorCWZpbGVzeXN0ZW0gc2l6ZSwgZS5nLiBmaWxlc3lzdGVtcyBsYXJnZXIgdGhhbiA4VEIgd2l0aCA0MDk2IGJ5dGVzCisJYmxvY2sgc2l6ZS4gVGhpcyBjYWxjdWxhdGlvbiBjYW4gYmUgdHVybmVkIG9mZiBieQorCSdyZWFsU3RvcmFnZVVuaXRzJyBjb25maWcgb3B0aW9uLgorICAgICAgLSBza2lwIG5vbi1BRl9JTkVUIGludGVyZmFjZXMgd2hlbiBsb2FkaW5nIGlwdjQgYWRkcnMKKyAgICAgIC0gc25tcGQgaXMgYWdhaW4gc2luZ2xlLXRocmVhZGVkLiBbUEFUQ0ggMjk1OTgxMV06IFNhZnJhbmVrOgorCVJlaW1wbGVtZW50IExpbnV4IE5ldGxpbmsgSVB2NiBwcmVmaXggbGlzdGVuZXIuCisgICAgICAtIEZpeGVkIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIgdGFibGVzIGludHJvZHVjZWQgYnkgcGF0Y2ggIzMwNTM0MzYuCisgICAgICAtIEZpeGVkIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIgdGFibGVzIGludHJvZHVjZWQgYnkgcGF0Y2ggIzMwNTM0MzYuIgorCVtQQVRDSCAzMDUzNDM2XTogZnJvbTogdGFrZXZvczogZml4OiB0Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MKKwlpbnZhbGlkIG1lbW9yeSBhY2Nlc3MiIHRoZSBidWcgMzA1MzQzNiBpcyBmaXhpbmcgd2FzIGludHJvZHVjZWQgaW4KKwlyMTc3MTksIGFuZCBmaXhlZCBpbiByMTc4NjEuCisgICAgICAtIFVzZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmllciBpbiBkZWJ1ZyBzdGF0ZW1lbnRzIGZvciBwcmludGluZyB2YWx1ZXMKKwlvZiB0eXBlICdvaWQnLgorICAgICAgLSBbUEFUQ0ggMzA2Njg2Ml06IGZpeCB0aGUgYWdlbnQgZm9yIGNvbXBhcmluZyB1bnNpZ25lZCBsYXJnZSBpbmRleGVzCisJb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuCisgICAgICAtIGZpeGVkIGhyU1dSdW5QYXRoIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcyBvbiBMaW51eC4gICBmZ2V0cygpCisJcmV0dXJucyBOVUxMIGJvdGggd2hlbiAvcHJvYy9QSUQvY21kbGluZSBpcyBlbXB0eSAoPSBzd2FwcGVkIG91dCkKKwlhbmQgd2hlbiB0aGUgcHJvY2VzcyBleGl0ZWQgYWZ0ZXIgZm9wZW4oKSwgc28gY2hlY2sKKwkvcHJvYy9QSUQvc3RhdHVzIGluIGJvdGggY2FzZXMuCisgICAgICAtIGZpeGVkIHJhY2UgY29uZGl0aW9uIGluIGhyU1dSdW5UYWJsZSBUcmVhdCB0aGUgcmVhZHMgZnJvbQorCS9wcm9jLzxwaWQ+LyogY2FyZWZ1bHksIHByb2Nlc3NlcyBjYW4gZXhpdCBpbiB0aGUgbWlkZGxlIG9mCisJcHJvY2Vzc2luZy4gKGFscmVhZHkgZml4ZWQgaW4gVjUtNS1wYXRjaGVzIGFuZCBWNS00LXBhdGNoZXMgaW4gU1ZOCisJcmV2LiAyMDExNSwgZHVubm8gd2h5IEkgZGlkIG5vdCBwYXRjaCB0cnVuaykKKyAgICAgIC0gcGF0Y2ggMzEzMTM5NzogZnJvbSB0YWtldm9zOiBodWdlIHNwZWVkdXBzIG9mIHRoZSBUQ1AvVURQIFRhYmxlcworICAgICAgLSBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlELgorICAgICAgLSBwYXRjaCAzMzA2NDc2OiBmcm9tIHRpbnlweXJhbWlkczogZml4IG1lbW9yeSBsZWFrIGluIHRoZSBzd3J1bgorCWNvbnRhaW5lciBsb2FkaW5nCisgICAgICAtIHVjZF9zbm1wIGJ1aWxkcyBhZ2FpbiBvbiBNaW5HVyBhbmQgQ3lnd2luLgorICAgICAgLSBwYXRjaCAzMzEwMjUwOiBmcm9tIGZlbm5lcjogbWlzYyBmaXhlcyBmb3IgZGVidWdnaW5nIG91dHB1dCBvZgorCWFnZW50eAorCisgICAgc25tcHRyYXBkOgorICAgICAgLSBGaXhlZCBhIGRvdWJsZSBmcmVlIGF0IGV4aXQgdGhhdCB3YXMgdHJpZ2dlcmVkIGJ5IGNsZWFuaW5nIHVwIHRoZQorCWRhdGEgc3RydWN0dXJlcyB1c2VkIGZvciBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuIEZpeGVkIGEgZG91YmxlIGZyZWUKKwlhdCBleGl0IHRoYXQgd2FzIHRyaWdnZXJlZCBieSBjbGVhbmluZyB1cCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQKKwlmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBWYWxncmluZCByZXBvcnRlZCB0aGF0IGRvdWJsZSBmcmVlIGFzCisJZm9sbG93czogSW52YWxpZCByZWFkIG9mIHNpemUgNCBhdCAweDU5RDA1MDE6IHBlcmxfZGVzdHJ1Y3QgKGluCisJL3Vzci9saWIvcGVybDUvNS4xMi4xL3g4Nl82NC1saW51eC10aHJlYWQtbXVsdGkvQ09SRS9saWJwZXJsLnNvKSBieQorCTB4NTQ0REY4RTogc2h1dGRvd25fcGVybCAoc25tcF9wZXJsLmM6MTY2KSBieSAweDQwMzk2NjoKKwl0ZXJtX2hhbmRsZXIgKHNubXB0cmFwZC5jOjMxOCkgYnkgMHg2RDQzQTVGOiA/Pz8gKGluCisJL2xpYjY0L2xpYmMtMi4xMS4yLnNvKSBBZGRyZXNzIDB4NzY2MGY4OCBpcyA1NiBieXRlcyBpbnNpZGUgYSBibG9jaworCW9mIHNpemUgMiw5MTIgZnJlZSdkIGF0IDB4NEMyNjQ5NjogZnJlZSAodmdfcmVwbGFjZV9tYWxsb2MuYzozNjYpCisJYnkgMHg1NDRERjlBOiBzaHV0ZG93bl9wZXJsIChzbm1wX3BlcmwuYzoxNjcpIGJ5IDB4NkREQURGMjoKKwlfX3NlbGVjdF9ub2NhbmNlbCAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKSBieSAweDQwNEUyMDogbWFpbgorCShzbm1wdHJhcGQuYzoxMjU4KQorCisgICAgYXBwczoKKyAgICAgIC0gW1BBVENIIDMwNTQ4MTddOiBBZGRzIHBlci12YXJpYWJsZSB0aW1lZCBvdXRwdXQgc3VwcG9ydCB0byBzbm1wd2FsaworCXVzaW5nIC1DVAorICAgICAgLSBhZGQgc25tcC5jb25mIHRva2VucyBmb3IgdGltZW91dHMgYW5kIHJldHJpZXMKKworICAgIGJ1aWxkOgorICAgICAgLSBbQlVHIDMwODgzNjBdOiBFbnN1cmUgcHl0aG9uIG1vZHVsZXMgYXJlIGJ1aWx0IGFnYWluc3QgdGhlIGNvcnJlY3QKKwlsaWJyYXJpZXMKKworICAgIGJ1aWxkaW5nOgorICAgICAgLSBGaXggLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMgaGFuZGxpbmcgQWxsb3cgcmVwZWF0ZWQgbW9kdWxlcworCSh0c20sdHNtKSBhcyB3ZWxsIGFzIGRlZmFpbHQgbW9kdWxlcyAodXNtKSBNb3ZlIHRoZSBnZW5lcmF0aW9uIG9mCisJdGhlIGZpbGVzIGFmdGVyIHRoZSBjaGVja2luZworICAgICAgLSBNYWtlIGl0IHBvc3NpYmxlIHRvIHJlZ2VuZXJhdGUgdXNpbmcgYXV0b2NvbmYgMi42OC4KKyAgICAgIC0gU29tZSBzeXN0ZW1zIGRvIG5vdCBzdXBwb3J0IHRoZSAtRSBmbGFnIHRvIGdyZXAsIHVzZSBhdXRvY29uZiB0bworCWZpbmQgdGhlIHJpZ2h0IGVncmVwIGF0IGFsbCB0aW1lcy4KKyAgICAgIC0gY2hlY2sgZm9yIC9kZXYva21lbSBpbnN0ZWFkIG9mIGFzc3VtaW5nIGl0IGV4aXN0cyBhbmQgaGFyZGNvZGluZworCXdoZW4gaXQgaXMgbm90IHRoZXJlCisKKyAgICBsaWJuZXRzbm1wOgorICAgICAgLSBtYWRlIHRoZSBTU0ggdHJhbnNwb3J0IGNvbmZpZ3VyYWJsZSBhcyBpdCBzaG91bGQgYmUuCisKKyAgICBsaWJuZXRzbm1wbWliczoKKyAgICAgIC0gTWFrZSBhbGwgZnVuY3Rpb25zIGluIHRoZSBkbG1vZCBtb2R1bGUgdGhhdCBkb24ndCBoYXZlIHRvIGJlIHB1YmxpYworCXN0YXRpYwogCiAgICAgbWliMmM6CiAgICAgICAtIFtQQVRDSCAzMTc1MzIzXTogRml4IGhhbmRsaW5nIG9mICd3aGlsZSAoZmFsc2UpJyBibG9ja3MKICAgICAgIC0gW1BBVENIIDMyMDQ4ODNdOiBGaXggaGFuZGxpbmcgb2Ygbm9uLXRhYmxlIG9iamVjdHMgbmFtZWQgZm9vVGFibGUKICAgICAgIC0gW1BBVENIIDMyMTE0ODRdOiBTdXBwb3J0IGVudW1lcmF0aW9ucyBpbiBub3RpZmljYXRpb24gdmFyYmluZHMKLSAgICAgIC0gTWFrZSB0aGUgbWliMmMgZm9yZWFjaCByYW5nZXMgd29yayBhcyBhZHZlcnRpc2VkCisgICAgICAtIG1ha2UgdGhlIG1pYjJjIGZvcmVhY2ggcmFuZ2VzIHdvcmsgYXMgYWR2ZXJ0aXNlZCBpbiB0aGUgY29tbWVudHMuCiAKLSAgICBtaWJzOgotICAgICAgLSBbUEFUQ0ggMjk3NDcxNl06IEZpeCBpc3N1ZXMgaW4gdGhlIFNNVVgtTUlCCisgICAgcGFja2FnaW5nOgorICAgICAgLSBFbmFibGUgbWljcm8tYW5kLW1hY3JvLWZlYXR1cmUgbWFuYWdlbWVudCB3aXRoaW4gTmV0LVNOTVA7IHRoaXMKKwlhZGRzIGEgbnVtYmVyIG9mIG5ldyBmbGFncyB0byBjb25maWd1cmUgKC0tZW5hYmxlLW1pbmltYWxpc3QgYW5kCisJLS1lbmFibGUtcmVhZC1vbmx5KS4gVGhlc2UgY2hhbmdlcyBhcmUgZGVzaWduZWQgdG8gcmVtb3ZlIG11Y2ggb2YKKwl0aGUgaW5saW5lIGNvZGUgdGhhdCBpc24ndCBhbHdheXMgbmVjZXNzYXJ5IG9yIGRlc2lyZWQuIFNjcmlwdHMKKwlleGlzdCAoYW5kIHdpbGwgYmUgaW1wcm92ZWQpIHRvIHN0aXAgb3V0IHVudXNlZCBjb21wb25lbnRzIGZyb20gdGhlCisJY29kZSBlbnRpcmVseSB0byBlbmFibGUgYSBzaG9ydGVyIHJldmlldyBwcm9jZXNzIGZvciB1cGdyYWRpbmcgdG8KKwluZXcgcmVsZWFzZXMuIFRoaXMgd29yayB3YXMgZG9uZSBieSBXZXMgSGFyZGFrZXIgYW5kIE1pY2hhZWwgQmFlcgorCWZyb20gU1BBUlRBLCBJbmMuIGJ1dCBpcyBiZWluZyBjaGVja2VkIGluIGFzIGEgbGFyZ2UgcGF0Y2ggc2luY2UKKwljb252ZXJ0aW5nIHRoZSBtaWNybyBwYXRjaGVzIGZyb20gZ2l0IHRvIHN2biB0dXJlbmQgb3V0IHRvIGJlCisJaW1wb3NzaWJsZQorCisgICAgcGF0Y2ggMzE0MDgzMzoKKyAgICAgIC0gZml4IHByb3h5IEdFVE5FWFQgcmVxdWVzdHMgV2hlbiBPSURzIHJlcXVlc3RlZCBhcmUgYmVsb3cgdGhlIHByb3h5CisJcmVxdWVzdCByZW1hcCwgd2UgbmVlZCB0byBub3QgaW5jbHVkZSBhbnkgT0lEcyB0aGF0IG1pZ2h0IGJlIGluIHRoZQorCXNwYWNlIGJldHdlZW4gdGhlIG9yaWdpbmFsIE9JRCBhbmQgdGhlIHJlbWFwcGVkIE9JRC4gVGhpcyBwYXRjaAorCWZ1ZGdlcyB0aGUgcmVxdWVzdCBzbyB0aGF0IGl0IGZpeGVzIHRoZSByZXF1ZXN0IE9JRCBzbyBpdCdzIGp1c3QKKwliZWZvcmUgdGhlIHJlbWFwcGVkIHByb3h5IHJhbmdlLgorCisgICAgcGF0Y2ggMzE4NDAyNjoKKyAgICAgIC0gQXZvaWQgY29uc3RhbnQgcmVmcmVzaCBvZiBpbnRlcmZhY2Ugc3RhdGlzdGljcwogCiAgICAgcGVybDoKLSAgICAgIC0gW1BBVENIIDMwNDYzNzFdOiBGaXggbWVtb3J5IGxlYWsgaW4gU05NUHYxIHRyYXAgaGFuZGxpbmcKLSAgICAgIC0gW1BBVENIIDMwNDkwMjldOiBGaXggYSBtZW1vcnkgbGVhayB3aXRoIHNubXAgYnVsa3dhbGtzCi0gICAgICAtIERvbid0IGFsd2F5cyBvcGVuIHN0ZGVyciBhcyB0aGUgY2FsbHMgdG8gc25tcF9sb2cgYWxyZWFkeSBkbyB0aGlzCi0gICAgICAgICAgIGFuZCBpdCBtZXNzZXMgdXAgdGhlIGFnZW50IHdoZW4gZW1iZWRkZWQKLSAgICAgIC0gSGFuZGxlIGVtYmVkZGVkICUncyBpbiB0aGUgcmVzdWx0IG1lc3NhZ2UuCisgICAgICAtIHBhdGNoIDMwNDkwMjk6IGZyb20gZmVubmVjOiBmaXggYSBtZW1vcnkgbGVhayB3aXRoIHNubXAgYnVsa3dhbGtzCisgICAgICAtIHBhdGNoIGZyb20gTWFydGluIEJ1Y2s6IGRvbid0IGFsd2F5cyBvcGVuIHN0ZGVyciBhcyB0aGUgY2FsbHMgdG8KKwlzbm1wX2xvZyBhbHJlYWR5IGRvIHRoaXMgYW5kIGl0IG1lc3NlcyB1cCB0aGUgYWdlbnQgd2hlbiBlbWJlZGRlZAogCiAgICAgcHl0aG9uOgotICAgICAgLSBbQlVHIDMwODgzNjBdOiBFbnN1cmUgbW9kdWxlcyBhcmUgYnVpbHQgYWdhaW5zdCB0aGUgY29ycmVjdCBsaWJyYXJpZXMKLSAgICAgIC0gW0JVRyAzMjk1NDA3XTogRml4IGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlcgotICAgICAgLSBbUEFUQ0ggMzAzNTMyOF06IENoZWNrIGZvciBmYWlsdXJlcyBpbiBjcmVhdGluZyBhIHNlc3Npb24KLSAgICAgIC0gW1BBVENIIDMwMzU1NzhdOiBLZWVwIGVycm9yIGNvZGVzIHVwIHRvIGRhdGUKICAgICAgIC0gW1BBVENIIDMxODUwODVdOiBGaXggc2VnZmF1bHQgb24gNjQtYml0IHN5c3RlbXMKKyAgICAgIC0gW0JVRyAzMjk1NDA3XTogRml4IGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlcgogCiAgICAgdGVzdGluZzoKLSAgICAgIC0gU3VwcG9ydCBkeW5hbWljIGFuYWx5c2lzIG9mIHJlZ3Jlc3Npb24gdGVzdHMKKyAgICAgIC0gQWRkIG1pc3NpbmcgcHJlY29uZGl0aW9ucworICAgICAgLSBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLiBBZGRlZCBkZWNsYXJhdGlvbgorCWZvciB0aGUgZnVuY3Rpb24gbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpIGluIGEgcHVibGljCisJYWdlbnQgaGVhZGVyIGZpbGUuIEZpeGVkIG1lbW9yeSBsZWFrIGluCisJbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpLiBGaXhlZCBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkKKwl1bnJlZ2lzdGVyaW5nIGEgdGFibGUgaGFuZGxlci4gVW5pdCB0ZXN0cyBjYW4gbm93IGludm9rZSBmdW5jdGlvbnMKKwlmcm9tIGxpYmFnZW50LgorICAgICAgLSBBZGRlZCBmdW5jdGlvbiBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldCgpLiBBZGRlZCBkZWNsYXJhdGlvbgorCWZvciB0aGUgZnVuY3Rpb24gbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpIGluIGEgcHVibGljCisJYWdlbnQgaGVhZGVyIGZpbGUuIEZpeGVkIG1lbW9yeSBsZWFrIGluCisJbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpLiBGaXhlZCBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkKKwl1bnJlZ2lzdGVyaW5nIGEgdGFibGUgaGFuZGxlci4gVW5pdCB0ZXN0cyBjYW4gbm93IGludm9rZSBmdW5jdGlvbnMKKwlmcm9tIGxpYmFnZW50LiBBZGRlZCB1bml0IHRlc3QgZm9yIHRhYmxlX2RhdGFzZXQuCisgICAgICAtIEFkZGVkIGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKSB1bml0IHRlc3QuCisgICAgICAtIEFkZGVkIG5ldHNubXBfbWliX2hhbmRsZXIuZGF0YV9jbG9uZSwgYSBmdW5jdGlvbiBwb2ludGVyIHRoYXQKKwlkZWZpbmVzIGhvdyB0byBjbG9uZSBuZXRzbm1wX21pYl9oYW5kbGVyLm15dm9pZC4gTXVzdCBiZSBkZWZpbmVkIGlmCisJYW5kIG9ubHkgaWYgZGF0YV9mcmVlIGlzIHNldC4gVGhlIGZ1bmN0aW9uIG5ldHNubXBfaGFuZGxlcl9kdXAoKQorCWRvZXMgbm93IGNsb25lIE1JQiBoYW5kbGVyIHByaXZhdGUgZGF0YSBpZiBkYXRhX2Nsb25lKCkgaXMgc2V0LgorCVByZXZpb3VzbHkgYWZ0ZXIgZHVwbGljYXRpbmcgYSBNSUIgaGFuZGxlciBhbmQgdW5yZWdpc3RlcmluZyBvbmUgb2YKKwl0aGUgdHdvIE1JQiBoYW5kbGVycywgdGhlIHByaXZhdGUgZGF0YSBwb2ludGVyIChteXZvaWQpIG9mIHRoZQorCW90aGVyIGJlY2FtZSBhIGRhbmdsaW5nIHBvaW50ZXIuIE5vdGU6IGFkZGl0aW9uIG9mCisJbmV0c25tcF9taWJfaGFuZGxlci5kYXRhX2Nsb25lIGlzIGFuIEFCSSBjaGFuZ2UuIGFkZGVkIG1vcmUgdGVzdAorCWNhc2VzIHRvIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiB0ZXN0LgorICAgICAgLSBHZW5lcmF0ZSBhIG5vcm1hbCAjbGluZSBkaXJlY3RpdmUgYXMgcGVyIEM5OSBpbnN0ZWFkIG9mIHRoZQorCWNvbXBpbGVyLXNwZWNpZmljICM8bj4tZGlyZWN0aXZlLgorICAgICAgLSBJbnRyb2R1Y2VkIG5ldyB0ZXN0IHR5cGUgbmV4dCB0byBjYXBwIGFuZCBjbGliOiBjYWdlbnRsaWIuCisgICAgICAtIEl0IGlzIGFnYWluIHBvc3NpYmxlIHRvIHJ1biBhbiBpbmRpdmlkdWFsIHRlc3QgdmlhIHRoZSBzY3JpcHQKKwl0ZXN0aW5nL1JVTlRFU1RTLgorICAgICAgLSBJdCBpcyBub3cgcG9zc2libGUgdG8gYW5hbHl6ZSB0aGUgdW5pdCB0ZXN0cyB3aXRoIFZhbGdyaW5kIGJ5CisJc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIFNOTVBfU0FWRV9UTVBESVIgYW5kCisJRFlOQU1JQ19BTkFMWVpFUi4gQW4gZXhhbXBsZTogKGV4cG9ydCBTTk1QX1NBVkVfVE1QRElSPXllcworCURZTkFNSUNfQU5BTFlaRVI9InZhbGdyaW5kIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tbGVhay1jaGVjaz1mdWxsIjsKKwljZCB0ZXN0aW5nICYmIC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHMpCisgICAgICAtIFRlc3QgNzEgKGNvbTJzZWM2X3NpbXBsZSkgZG9lcyBub3cgc3VjY2VlZCBldmVuIGlmIElQdjYgRE5TCisJcmVzb2x1dGlvbiBpcyBub3QgYXZhaWxhYmxlLgorICAgICAgLSBUZXN0IFQwMzAgZG9lcyBub3cgcGFzcyBvbiBNaW5HVy4KKyAgICAgIC0gYXV0by1jcmVhdGUgdXNlciBzcGVjaWZpZWQgU05NUF9UTVBESVIgYW5kIFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKKwl0b287IGRlZmF1bHQgU05NUF9UTVBfUEVSU0lTVEVORElSIGJhc2VkIG9uIFNOTVBfVE1QRElSIGZvciB1c2VyCisJc3BlY2lmaWVkIFNOTVBfVE1QRElSCisKKyAgICBtYW46CisgICAgICAtIFtCVUcgMzE5MDcyNV06IERvY3VtZW50IHNubXB7LF9zZXNzfXN5bmNoX3Jlc3BvbnNlIGFuZAorCXNubXBfYXN5bmNfc2VuZAorCisgICAgR2VuZXJpYzoKKyAgICAgIC0gTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBzdGF0aWMgYXBwbGljYXRpb25zIHVzaW5nIG5ldC1zbm1wLWNvbmZpZworCWFuZCB0aGUgLSpsaWJzIGZsYWdzIG9uY2UgbW9yZS4KKyAgICAgIC0gW0JVRyAzMTAyOTA0XTogQWxsIE5ldC1TTk1QIEMgc291cmNlIGZpbGVzIGFyZSBub3cgY29tcGlsZWQgd2l0aAorCS1mbm8tc3QgcmljdC1hbGlhc2luZywgYXQgbGVhc3QgaWYgdGhlIGNvbmZpZ3VyZWQgY29tcGlsZXIgc3VwcG9ydHMKKwl0aGlzIGZsYWcuCisgICAgICAtIFtQQVRDSCAzMDc0OTE4XTogZnJvbSB3ZWl6aGVuZzogY2hlY2sgZm9yIENPTlRBSU5FUl9JTlNFUlQgZmFpbHVyZXMKKwlhbmQgcmVhY3QgYXBwcm9wcmlhdGVseSB0byBhdm9pZCBtZW1vcnkgbGVha3MKKyAgICAgIC0gW1BBVENIIDMxNjczMjVdOiBmcm9tIGtyaXN6dG9mb3JvOiBVQ0QtU05NUC9TeXN0ZW1TdGF0czogYWRkCisJdmFyaWFibGVzIHRvIHJlcG9ydCBjcHVzdGVhbCwgY3B1Z3Vlc3QsIGNwdWd1ZXN0bmljZQorCisgICAgQ3lnd2luOgogCiAgICAgTGludXg6Ci0gICAgICAtIFtQQVRDSCAzMDc0OTE4XTogY2hlY2sgZm9yIENPTlRBSU5FUl9JTlNFUlQgZmFpbHVyZXMKICAgICAgIC0gW1BBVENIIDMwODMwMjddOiBGaXggUlBNIHNwZWMgZmlsZSB0byBzdXBwb3J0IENlbnRPUwotICAgICAgLSBbUEFUQ0ggMzE1MjQxMl06IEhhbmRsZSAoYW5kIHJlcG9ydCkgcHJvYmxlbXMgcmVhZGluZyAvcHJvYy92bXN0YXQKLSAgICAgIC0gRml4IGEgc3RybGVuIGNhbGN1bGF0aW9uIGluIElGLU1JQiBzdXBwb3J0Ci0gICAgICAtIEZpeGVkIGhyU1dSdW5QYXRoIG9mIHN3YXBwZWQtb3V0IHByb2Nlc3NlcwotICAgICAgLSBGaXhlZCB2YWx1ZSBvZiBJUC1NSUI6OmlwdjZJbnRlcmZhY2VGb3J3YXJkaW5nCi0KLSAgICBOZXRCU0Q6Ci0gICAgICAtIERyYWdvbkZseSBzdXBwb3J0Ci0gICAgICAtIFJldHJpZXZlIE1JQi1JSSBuZXR3b3JrIHN0YXRpc3RpY3MgdmlhIHN5c2N0bAotICAgICAgLSBVcGRhdGUgbWVtb3J5IGFuZCBDUFUgc3RhdGlzdGljcyBoYW5kbGluZwotCi0gICAgT3BlbkJTRDoKLSAgICAgIC0gU3VwcG9ydCB1cGRhdGluZyB0aGUgcm91dGluZyB0YWJsZSBbRnJvbSBPcGVuQlNEIHBhdGNoIGFyY2hpdmVdCi0KLSAgICBXaW4zMjoKLSAgICAgIC0gW1BBVENIIDMyOTM4NDJdOiBFbGltaW5hdGUgcmVnaXN0cnkgYXJndW1lbnQgbGltaXQgb2YgMTI3IGNoYXJhY3RlcnMKLSAgICAgIC0gQXZvaWQgTVNWQyB3YXJuaW5nIGFib3V0IHJlZGVmaW5pbmcgRUFERFJJTlVTRQotICAgICAgLSBGaXggb3V0LW9mLXJhbmdlIGFycmF5IGFjY2Vzc2VzIGVycm9ycyBpbiBtaWJJSSBpbnRlcmZhY2VzIHRhYmxlCi0gICAgICAtIEZpeCB0ZXN0IFQwMzAgb24gTWluR1cuCi0gICAgICAtIEZpeCB0ZXN0IFQyMDAgZmFpbHVyZXMgb24ga25vd24gTWljcm9zb2Z0IFNOTVAgZXh0ZW5zaW9uIERMTCBidWdzCi0gICAgICAtIEZpeGVkIG1lbW9yeSBsZWFrIGluIHRoZSBpbnRlcm5hbCAobm9uLXdpbkV4dERMTCkgaXBOZXRUb01lZGlhVGFibGUKLSAgICAgIC0gSGFsdCBzbm1wZCBwcm9jZXNzIG9uIGtleSBwcmVzcyB3aGVuIHJ1biBmcm9tIGEgY29tbWFuZCBwcm9tcHQKLSAgICAgICAgICAoVG8gYWlkIGRlYnVnZ2luZyBzbm1wZC5leGUpCisgICAgICAtIFtQQVRDSCAzMjA1ODExXTogT3B0aW9uIHRvIHNraXAgZmQvbG9vcC9yYW0gZGV2aWNlcyBpbiBkaXNrSU9UYWJsZQorICAgICAgLSBhZ2VudDogaXBOZXRUb1BoeXNpY2FsVGFibGU6IERvIG5vdCBsb2cgYW4gZXJyb3IgbWVzc2FnZSBpZiBvbmUgb3IKKwltb3JlIGludGVyZmFjZXMgYXJlIHByZXNlbnQgdGhhdCBkbyBub3QgaGF2ZSBzdWNoIGluZm9ybWF0aW9uCisJKE5VRF9OT0FSUCksIGUuZy4gdHVubmVscy4gUmVwb3J0ZWQgYnkgU3RlcGhlbiBIZW1taW5nZXIuIFNlZSBhbHNvCisJcGF0Y2ggIzMxMDcwMDMuCisgICAgICAtIHNubXBkIGlzIGFnYWluIHNpbmdsZS10aHJlYWRlZC4KIAogICAgIE1pbkdXOgotICAgICAgLSBNYWtlIHJlZ3Jlc3Npb24gdGVzdHMgaW5kZXBlbmRlbnQgb2YgcmVnaXN0cnkgc2V0dGluZ3MKLSAgICAgIC0gVXNlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gaGVhZGVyIGZpbGUgdW5kZXIgV2luR1cKKyAgICAgIC0gTWFkZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGluZGVwZW5kZW50IG9mIHRoZSBOZXQtU05NUCB2YXJpYWJsZXMKKwlkZWZpbmVkIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiBTb21lIHRlc3RzIHRoYXQgZmFpbGVkIHByZXZpb3VzbHkKKwlhZnRlciB0aGUgTmV0LVNOTVAgYmluYXJpZXMgKE1TVkMgYnVpbGQpIGhhZCBiZWVuIGluc3RhbGxlZCBkbyBub3cKKwlwYXNzLgorICAgICAgLSBjb25maWd1cmU6IERldGVjdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGdhaV9zdHJlcnJvcigpLAorCWdldGFkZHJpbmZvKCksIGdldGhvc3RieW5hbWUoKSBhbmQgZ2V0aG9zdG5hbWUoKSBkb2VzIG5vdyBzdWNjZWVkLgorICAgICAgLSB0ZXN0aW5nOiBJZiB0aGUgYWdlbnQgaGFzIGJlZW4gYXNrZWQgdG8gc3RvcCwgd2FpdCB1bnRpbCB0aGUgc25tcGQKKwlwcm9jZXNzIGRpc2FwcGVhcmVkIGJlZm9yZSBwcm9jZWVkaW5nLgorICAgICAgLSBUZXN0cyAwMjUgYW5kIDAyNiBwYXNzIG9uIE1pbkdXIGV2ZW4gaWYgd2luRXh0RExMIGhhcyBiZWVuIGVuYWJsZWQuCiAKLSAgICAgIAotKiA1LjQuMyAqCisgICAgTmV0QlNEOgorICAgICAgLSBEcmFnb25GbHkgc3VwcG9ydCBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KKworICAgIE9wZW5CU0Q6CisgICAgICAtIFVwZGF0ZSBTV1J1biBjb2RlIHRvIHVzZSBrdm1fZ2V0cHJvYzIgW0Zyb20gT3BlbkJTRCBwYXRjaCBhcmNoaXZlXQorCisgICAgV2luMzI6CisgICAgICAtIEF2b2lkIHRoYXQgTVNWQyByZXBvcnRzIGEgd2FybmluZyBtZXNzYWdlIGFib3V0IHJlZGVmaW5pdGlvbiBvZiB0aGUKKwltYWxsb2MoKSBtYWNybyBkdXJpbmcgYnVpbGRpbmcgdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlLgorICAgICAgLSBEZXByZWNhdGVkIGxpYnNubXAuZGVmIC0gYWRkIE5FVFNOTVBfSU1QT1JUIHRvIGZ1bmN0aW9uCisJZGVjbGFyYXRpb25zIGluc3RlYWQgdG8gZXhwb3J0IGEgZnVuY3Rpb24gZnJvbSBuZXRzbm1wLmRsbC4KKyAgICAgIC0gR3VhcmQgbmV0c25tcF91ZHBfcmVjdmZyb20oKSBldGMuIGRlY2xhcmF0aW9ucyBjb25zaXN0ZW50bHkuIEJ1aWxkcworCXdpdGggVmlzdWFsIFN0dWRpbyAyMDEwLgorICAgICAgLSBJbnRyb2R1Y2VkIG5ldHNubXBfcGlkX3QuIEVsaW1pbmF0ZWQgY2FzdHMgYmV0d2VlbiBpbnQgYW5kIEhBTkRMRQorCWluIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYyBhbmQKKwlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYy4KKyAgICAgIC0gV2hlbiBzbm1wZC5leGUgaXMgc3RhcnRlZCBpbiBhIGNvbW1hbmQgcHJvbXB0IHdpbmRvdywgdGhlIHNubXBkCisJcHJvY2VzcyBub3cgc3RvcHMgdXBvbiB0aGUgZmlyc3Qga2V5IHByZXNzLiBUaGlzIG1ha2VzIGl0IGVhc2llciB0bworCWRlYnVnIHNubXBkLmV4ZSBmb3IgbWVtb3J5IGxlYWtzLgorICAgICAgLSBbUEFUQ0ggMzA4NTE4N106IEJ1aWxkaW5nIHZpYSB0aGUgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gcHJvamVjdAorCWZpbGUgKC5kc3cvLmRzcCkgd29ya3MgYWdhaW4uCisgICAgICAtIFtQQVRDSCAzMjkzODQyXTogRWxpbWluYXRlIHJlZ2lzdHJ5IGFyZ3VtZW50IGxpbWl0IG9mIDEyNworCWNoYXJhY3RlcnMgKHRoaXMgbGltaXRhdGlvbiB3YXMgcmVwb3J0ZWQgYnkgU3lsdmFpbiBEZXJ5KS4KKyAgICAgIC0gYnVpbGRpbmc6IEF2b2lkIHRoYXQgTVNWQyAyMDEwIHByaW50cyBhIHdhcm5pbmcgbWVzc2FnZSBhYm91dAorCXJlZGVmaW5pbmcgRUFERFJJTlVTRS4KKyAgICAgIC0gYnVpbGRpbmc6IEJ1aWxkcyBub3cgY29ycmVjdGx5IHdpdGggYSA2NC1iaXQgY29tcGlsZXIuCisgICAgICAtIGJ1aWxkaW5nOiBiYXRjaCBidWlsZCB3aXRoIE9wZW5TU0wgZW5hYmxlZCBhbmQgd2l0aCByZWNlbnQgT3BlblNTTAorCWRldmVsb3BtZW50IGZpbGVzIHdvcmtzIGFnYWluLgorICAgICAgLSBoZWFkZXIgZmlsZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhbiBub3cgYmUgdXNlZCBpbiB0aGUKKwlNaW5HVyBlbnZpcm9ubWVudC4KKyAgICAgIC0gdGVzdGluZzogQXZvaWQgdGhhdCBUMjAwIGZhaWxzIG9uIGtub3duIE1pY3Jvc29mdCBTTk1QIGV4dGVuc2lvbgorCURMTCBidWdzLgorICAgICAgLSBCdWlsZCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMgb25seSBpZgorCU5FVFNOTVBfRU5BQkxFX0lQVjYgaGFzIGJlZW4gZGVmaW5lZC4KKyAgICAgIC0gRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uCisJb2YgdGhlIE1JQi1JSSBpcE5ldFRvTWVkaWFUYWJsZS4KKyAgICAgIC0gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW86IExpbmsgd2l0aCBnZGkzMi5saWIgaWYgT3BlblNTTCBoYXMgYmVlbgorCWVuYWJsZWQgYmVjYXVzZSBnZGkzMi5saWIgaXMgYSBkZXBlbmRlbmN5IG9mIE9wZW5TU0wuCisKKyo1LjYqCiAKICAgICBzbm1wbGliOgotICAgICAgLSBbQlVHIDI4MzgyNDNdOiBDb3JyZWN0IHRoZSBvdXRwdXQgb2YgdW5zaWduZWQgdmFsdWVzLgotICAgICAgLSBbQlVHIDI5MTkzMjBdOiBBdm9pZCBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5CisgICAgICAtIEFkZCBjb25zdCBkZWNsYXJhdGlvbnMgdG8gdGhlIGRpc2FibGVkIHZlcnNpb25zIG9mIHRoZSBkZWJ1Z2dpbmcKKwljb2RlIGFzIHdlbGwuCisgICAgICAtIEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRyYW5zcG9ydHMuCisgICAgICAtIEFkZCBtaXNzaW5nIHN5bWJvbCBuZXRzbm1wX3NubXBTU0hEb21haW5fbGVuLCBtYWtlCisJbmV0c25tcF9zbm1wU1NIRG9tYWluIGNvbnN0LgorICAgICAgLSBDaGFuZ2Ugb2lkIHRvIGJlIGEgMzItYml0IHR5cGUgb24gSUxQNjQgYW5kIExQNjQgcGxhdGZvcm1zLgorICAgICAgLSBDaGFuZ2UgdGhlIHBhcnNpbmcgb2YgcmFuZ2VzIHRvIGFjY2VwdCBhbGwgdmFsaWQgdmFsdWVzLgorICAgICAgLSBDb3JyZWN0IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRyYW5zcG9ydHMuIFJlbW92ZSB1bm5lY2Vzc2FyeQorCWluY2x1ZGVzLgorICAgICAgLSBDb3JyZWN0IHRoZSBzcGVsbGluZyBvZiBfX2NwbHVzcGx1cyB3aGVuIGNoZWNraW5nIGlmIHRoZSBmaWxlCisJc2hvdWxkIGJlIHdyYXBwZWQgaW4gZXh0ZXJuICJDIi4KKyAgICAgIC0gRG8gbm90IHJlcXVpcmUgdGhhdCB0aGUgVURQIHRyYW5zcG9ydCBpcyBpbmNsdWRlZC4KKyAgICAgIC0gRml4IGFnZW50IGNyYXNoIHdoZW4gc2VuZGluZyBlbmNyeXB0ZWQgU05NUHYzIHRyYXBzLiBSZXBvcnRlZCBieQorCVNyaWthcGlsYW4gR2FuZGhpCisgICAgICAtIEZpeCByZXNwb25kaW5nIHRvIGJyb2FkY2FzdCByZXF1ZXN0cy4gVURQIHJlc3BvbnNlcyBhcmUgc2VudCB3aXRoCisJc291cmNlIElQIGFkZHJlc3Mgd2hpY2ggd2FzIGRlc3RpbmF0aW9uIG9mIGFwcHJvcHJpYXRlIHJlcXVlc3RzCisJKGltcGxlbWVudGVkIGluIFNWTiByZXYuIDE1MjE1KS4gQnV0IGlmIHRoZSBkZXN0aW5hdGlvbiBvZiBhCisJcmVxdWVzdCBpcyBicm9hZGNhc3QgSVAgYWRkcmVzcywgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgd2l0aCB0aGUKKwlicm9hZGNhc3QgYWRkcmVzcyBhcyBzb3VyY2UuIHNlbmRtc2coKSBvbiBMaW51eCBkb2VzIG5vdCBzdXBwb3J0CisJdGhpcyBhbmQgcmV0dXJucyBlcnJvciAtPiByZXNwb25zZSBpcyBub3Qgc2VudC4gSW4gb3JkZXIgdG8gc2VuZAorCXJlc3BvbnNlcyBmcm9tIHRoZSBzYW1lIGludGVyZmFjZSwgaW50ZXJmYWNlIGluZGV4IG9mIHRoZQorCWFwcHJvcHJpYXRlIGludGVyZmFjZSBtdXN0IGJlIHVzZWQuCisgICAgICAtIEluc3RhbGwgbGlicmFyeS9vaWQuaC4gVGhhbmtzIHRvICJUb21hc3ogTGlzIiB3aG8gc3BvdHRlZCB0aGUgYnVnLgorICAgICAgLSBNYWtlIHRoZSBjb250ZXh0IGFyZ3VtZW50IG9mIHNlbmRfdjN0cmFwLAorCXNlbmRfdHJhcF92YXJzX3dpdGhfY29udGV4dCBhbmQgbmV0c25tcF9zZW5kX3RyYXBzIHJlZmVyIHRvIGEgY29uc3QKKwljaGFyKi4KKyAgICAgIC0gTWFrZSB0aGUgbmFtZSBhcmd1bWVudCB0byBmaW5kX3ZhcmJpbmRfaW5fbGlzdCBjb25zdAorICAgICAgLSBQcmV2ZW50IGdjYyBwZWQtd2FybmluZyBmb3IgTkVUU05NUF9SRU1PVkVfQ09OU1QKKyAgICAgIC0gUmVtb3ZlIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBkb24ndCBleGlzdCBvciBhcmUgZGVjbGFyZWQKKwllbHNld2hlcmUuCisgICAgICAtIFJlbW92ZSB0aGUgb2lkIHR5cGVkZWYgZnJvbSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+LiBJdCBpcyBzdGlsbAorCXByZXNlbnQgaW4gPG5ldC1zbm1wL3R5cGVzLmg+LCB1c2UgdGhhdCBmaWxlLgorICAgICAgLSBSZXBsYWNlIHRoZSBkZWJ1Z2dpbmcgZnVuY3Rpb25zIHdpdGggZHVtbWllcyB3aGVuIGRlYnVnZ2luZyBpcworCWRpc2FibGVkLgorICAgICAgLSBSZXZlcnQgMTc4MDgsIGluc3RlYWQgZmFjdG9yIG91dCB0aGUgZGVjbGFyYXRpb24gb2Ygb2lkIHRvIGl0J3Mgb3duCisJZmlsZSBhbmQgaW5jbHVkZSB0aGF0IGZpbGUgZnJvbSBib3RoIHR5cGVzLmggYW5kIGFzbjEuaAorICAgICAgLSBVc2UgYSB2b2lkIGFyZ3VtZW50IGZvciB0aGUgZGF0YSBhcmd1bWVudCBvZiB4ZHVtcC4KKyAgICAgIC0gW0JVRyAyOTE5MzIwXTogQXZvaWQgYWNjZXNzaW5nIGZyZWVkIG1lbW9yeSBSZXBvcnRlZCBieSBUb21hc3ogTGlzCiAgICAgICAtIFtCVUcgMjkyMjM5MF06IEZpeCB0ZXN0IGZvciBtaXNzaW5nIGNvbnRleHROYW1lIHBhcmFtZXRlcgotICAgICAgLSBbUEFUQ0ggMjA0MzAxOF06IGZpeCByZWN2ZnJvbSBoYW5ncwotICAgICAgLSBbUEFUQ0ggMjI1ODIyOV06IFJlbW92ZSBtaXNsZWFkaW5nIGNvbW1lbnQKLSAgICAgIC0gW1BBVENIIDI0Nzk3MDBdOiBGaXggem9uZWQgSVAgYWRkcmVzcyB1c2VkIGFzIHRhYmxlIGluZGljZXMKLSAgICAgIC0gW1BBVENIIDI0OTIzNzddOiBGaXggdHlwby9idWcgaW4gc25tcF9lbmFibGVfY2FsbGJhY2soKQotICAgICAgLSBbUEFUQ0ggMjUwNTQ4OF06IEZpeCBhbGFybSBiZWhhdmlvdXIgb24gbGFyZ2UgY2xvY2sgc2tld3MKLSAgICAgIC0gW1BBVENIIDI1MzgxNjldOiBQcmV2ZW50IGluZmluaXRlIHJldHJpZXMgZm9yIGludmFsaWQgZXJyb3ItaW5kZXgKLSAgICAgIC0gW1BBVENIIDI2ODgzNDVdOiBGaXggbmV0c25tcF9hc3NlcnQoKSBmb3IgVmlzdWFsIFN0dWRpbwotICAgICAgLSBbUEFUQ0ggMjY4OTM2Ml06IEZpeCBoYW5kbGluZyBvZiBJUHY2IGhvc3RuYW1lcwotICAgICAgLSBbUEFUQ0ggMjcxMzg0MV06IEZpeCBydW50aW1lIGVycm9ycyB0cmlnZ2VyZWQgYnkgaGlnaC1BU0NJSSBjaGFycwotICAgICAgLSBbUEFUQ0ggMjc4MDQxMV06IEZpeCBjb21waWxlciB3YXJuaW5ncwotICAgICAgLSBbUEFUQ0ggMjc5NzI1MV06IEZpeCBtZW1vcnkgbGVha3MKLSAgICAgIC0gW1BBVENIIDI4NzE3NDddOiBGaXggbWVtb3J5IGxlYWsgaW4gT0lEIHByb2Nlc3NpbmcKLSAgICAgIC0gW1BBVENIIDI5NTIxNDBdOiBPdmVyZmxvdyBjb3VudGVyMzIgYW5kIGdhdWdlMzIKLSAgICAgIC0gW1BBVENIIDI5NTIwMzRdOiBSZXR1cm4gb2YgdGhlIEdyZWF0IFN1U0UgJ3NwcmludGYnIEh1bnQKLSAgICAgIC0gQ2hhbmdlIHRoZSBwYXJzaW5nIG9mIHJhbmdlcyB0byBhY2NlcHQgYWxsIHZhbGlkIHZhbHVlcwotICAgICAgLSBFbnN1cmUgT19DUkVBVEUgbWFzayBpcyBhbHdheXMgc3BlY2lmaWVkCi0gICAgICAtIEZpeCBleHRlcm4gIkMiIHdyYXBwaW5nCi0gICAgICAtIE1ha2UgLUxOIHN0b3AgZHVtcGluZyBjb3JlLgotICAgICAgLSBNYWtlIGJhZCBkZWJ1ZyBsZXZlbHMgcmVwb3J0IHRoZSBvZmZlbmRpbmcgc3ltYm9sCi0gICAgICAtIFJlbW92ZSBpbmxpbmUgZGVjbGFyYXRpb25zIGZvciBub24taW5saW5lIGRlZmluZWQgZnVuY3Rpb25zCisgICAgICAtIFtQQVRDSCAyODcxNzQ3XTogcGx1ZyBtZW1vcnkgbGVhayBpbiBPSUQgcHJvY2Vzc2luZy4gVGhlIG1lbW9yeQorCWxlYWtlZCB3aGVuIHNtYWxsIE9JRCwgd2hpY2ggY291bGQgZml0IHByZS1hbGxvY2F0ZWQgdnAtPm5hbWVfbG9jLAorCXdhcyBwbGFjZWQgaW4gZGlmZmVyZW50IChhbGxvY2F0ZWQpIG9uZS4KKyAgICAgIC0gW1BBVENIIDI5NDI5NDBdOiBBZGQgYSBuZXcgZnVuY3Rpb24sIG5ldHNubXBfcGFyc2VfYXJncywgdGhhdCBpcworCWxpa2Ugc25tcF9wYXJzZV9hcmdzIGJ1dCB0YWtlcyBhbiBhZGRpdGlvbmFsIGJpdG1hc2ssIGZsYWdzLCB0bworCWFmZmVjdCB0aGUgYmVoYXZpb3VyLiBBbHNvIHJlbW92ZSB0aGUgbWFnaWMgaGFuZGxpbmcgb2Ygc29tZQorCWFwcGxpY2F0aW9uIG5hbWVzLgorICAgICAgLSBbUEFUQ0ggMjk3MTI3MF06IHJlZnVzZSB0byBwYXJzZSBBU04uMSB0b2tlbnMgd2l0aCB3cm9uZyB0eXBlCisJZmllbGQuIFRoaXMgbWF5IHlpZWxkIHRvIHByb2JsZW1zIHdpdGggdGhpcmQtcGFydHkgYXBwbGljYXRpb25zCisJd2hpY2ggbWF5IGRlcGVuZCBvbiBwYXJzaW5nIHVnbHkgQVNOLjEgZGF0YSAtIHdlJ2xsIHNlZS4uLgorICAgICAgLSBhZGQgZnVuY3Rpb24gdG8gdmFsaWRhdGUgUm93U3RhdHVzIGFuZCBTdG9yYWdlVHlwZSB2YXJiaW5kcyAtIGFsc28KKwlyZW1vdmUgc29tZSBkdXBsaWNhdGUgY29kZSBhbmQgZml4IGNvbW1lbnRzIGluZGVudCBtYW5nbGVkCisgICAgICAtIGFkZCBmdW5jdGlvbnMgdG8gcmVtb3ZlIGxpc3Qvcm93IGRhdGEgZnJvbSByZXF1ZXN0IGxpc3QKKyAgICAgIC0gYWRkIGludGVyZmFjZSBmb3IgZHVwbGljYXRpbmcgYSBjb250YWluZXIKKyAgICAgIC0gYWRkIGludGVyZmFjZSBmb3IgZHVwbGljYXRpbmcgYSBjb250YWluZXIgY29udGFpbmVyIGNoYW5nZXM6IGFkZAorCWZsYWdzIGZpZWxkIHRvIGNvbnRhaW5lciBtZXRhLWRhdGE7IGNoZyBiaW5hcnlfYXJyYXkgY29udGFpbmVyIHRvCisJdXNlIGNvbnRhaW5lciBtZXRhLWRhdGEgZmxhZ3MKKyAgICAgIC0gYWRkIHJlbW92ZSBmdW5jdGlvbiB0byBjb250YWluZXIgaXRlcmF0b3I7IGltcGxlbWVudCBpdCBmb3IKKwliaW5hcnlfYXJyYXkKKyAgICAgIC0gYWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX21hbGxvYygpLCBuZXRzbm1wX2NhbGxvYygpLAorCW5ldHNubXBfcmVhbGxvYygpLCBuZXRzbm1wX3N0cmR1cCgpIGFuZCBuZXRzbm1wX2ZyZWUoKS4KKyAgICAgIC0gYnVpbGRzIGFnYWluIHdoZW4gSEFWRV9HRVRBRERSSU5GTyBpcyBub3QgZGVmaW5lZC4KKyAgICAgIC0gY29uZiBmaWxlcyBjYW4gbm93IGluY2x1ZGUgb3RoZXIgY29uZiBmaWxlcyAtIGFsc28gdHdlYWtlZCBkZWJ1ZworCXRva2VucyBoZXJlIGFuZCB0aGVyZQorICAgICAgLSBjcmVhdGUgaW5kZXhlcyBmb3IgY2VydGlmaWNhdGVzIGluIGNvbmZpZyBwYXRoCisgICAgICAtIGRpcmVjdG9yeSBjb250YWluZXIgZW5oYW5jZW1lbnRzIC0gZml4IHBvdGVudGlhbCBtZW1vcnkgbGVhayAtIGFkZAorCWZpbHRlciBjYWxsYmFjayB0byBmaWx0ZXIgZmlsZXMgcmV0dXJuZWQgLSBhZGQgb3B0aW9uIHRvIHJldHVybgorCXJlbGF0aXZlIGFuZCBub3QgZnVsbCBwYXRocyAtIGFkZCBvcHRpb24gdG8gc29ydCByZXR1cm5lZCBsaXN0IC0KKwlhZGQgb3B0aW9uIHRvIHJldHVybiBlbXB0eSBjb250YWluZXIgaW5zdGVhZCBvZiBOVUxMIGlmIG5vIGZpbGVzCisJZm91bmQgLSBjaGFuZ2UgZGVmYXVsdCBjb250YWluZXIgbmFtZSB0byBkaXJlY3RvcnkgdGhhdCB3YXMgc2Nhbm5lZAorCS0gdHdlYWsgZGVidWcvbG9nIG1lc3NhZ2VzCisgICAgICAtIGVuaGFuY2UgZmlsZSB1dGlscyBhbmQgZGlyIHV0aWxzIC0gYWRkIG9wdGlvbmFsIHN0YXRzIHN0cnVjdCB0bworCW5ldHNubXBfZmlsZSAtIGdlbmVyYWxpemUgZGlyIGNvbnRhaW5lciBmaWx0ZXIsIGFkZCBjb250ZXh0IHRvCisJY2FsbGJhY2sgLSBhZGQgb3B0aW9uIHRvIHN0b3JlIG5ldHNubXBfZmlsZXMgKHcvc3RhdHMpIGluIGNvbnRhaW5lcgorCWluc3RlYWQgb2YganVzdCBuYW1lCisgICAgICAtIGZpeCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgaW4gQ09OVEFJTkVSX0ZSRUUgLSBhbHNvIGFkZGVkIHNldmVyYWwKKwljb21wYXJlIHJvdXRpbmVzCisgICAgICAtIG5ldHNubXBfY29udGFpbmVyIGVuaGFuY2VtZW50czogLSBhZGQgZnJlZV9pdGVtIGZ1bmN0aW9uOyBkZWZhdWx0cworCXRvIG5ldHNubXBfY29udGFpbmVyX3NpbXBsZV9mcmVlIC0gYWRkIENPTlRBSU5FUl9GUkVFX0FMTAorCW1hY3JvL2Z1bmN0aW9uIChsaWtlIENPTlRBSU5FUl9DTEVBUiBidXQgY2FsbHMgY29udGFpbmVyIGZyZWVfaXRlbQorCWZvciBlYWNoIGl0ZW0gaW4gcHJpbWFyeSBjb250YWluZXIpIC0gYWRkIGFiaWxpdHkgdG8gc2V0IG9wdGlvbnMgb24KKwliaW5hcnlfYXJyYXkgY29udGFpbmVycworICAgICAgLSBuZXcgY2VydGlmaWNhdGUgYXBpIHRvIHN1cHBvcnQgdGxzL2R0bHMKKyAgICAgIC0gbmV3IHNubXAgdG9rZW4gbG9nT3B0aW9uIGFsbG93cyBzcGVjaWZ5aW5nIGxvZyBkZXN0aW5hdGlvbnMgdmkgY29uZgorCWZpbGVzIC0gaWYgc3RkZXJyIGxvZyBlbmFibGVkIGJlY2F1c2Ugb2Ygbm8gbG9nIGRlc3RpbmF0aW9uLCB0dXJuCisJaXQgb2ZmIHdoZW4gYSBsb2cgZGVzdGluYXRpb24gaXMgZW5hYmxlZCAtIGRvbid0IGNhbGwKKwluZXRzbm1wX2VuYWJsZV9zdGRlcnJsb2coKSBmcm9tIGFwcHMgYW55bW9yZQorICAgICAgLSBvYnNvbGV0ZWQgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHLiBGcm9tIG5vdyBvbiB1c2luZworCVNJR0FMUk0gdG8gdHJpZ2dlciBOZXQtU05NUCBhbGFybSBoYW5kbGVycyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgorCU1vdGl2YXRpb246IGFzIGtub3duIGxpYm5ldHNubXAgc3VwcG9ydHMgdGltZS1iYXNlZCBhbGFybXMgdmlhIHRoZQorCWZ1bmN0aW9ucyBzbm1wX2FsYXJtX3JlZ2lzdGVyKCksIHJ1bl9hbGFybXMoKSBhbmQgb3RoZXIgZnVuY3Rpb25zLgorCVR3byBkaWZmZXJlbnQgd2F5cyB0byB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBydW5fYWxhcm1zKCkgYXJlCisJc3VwcG9ydGVkIGluc2lkZSBsaWJuZXRzbm1wOiAxLiBCeSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB0aW1lb3V0CisJYXJndW1lbnQgb2Ygc2VsZWN0KCkgaXMgc21hbGwgZW5vdWdoIHN1Y2ggdGhhdCBzZWxlY3QoKSByZXR1cm5zCisJYmVmb3JlIHRoZSBuZXh0IGFsYXJtIG11c3QgYmUgaGFuZGxlZCAod2hlbiB0aGUgdmFyaWFibGUKKwlORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaXMgc2V0IHRvIG9uZSwgd2hpY2ggaXMgdGhlCisJZGVmYXVsdCkuIDIuIEJ5IG1ha2luZyBzdXJlIHRoYXQgdGhlIGtlcm5lbCBmaXJlcyBTSUdBTFJNIGF0IHRoZQorCXRpbWUgd2hlbiBydW5fYWxhcm1zKCkgc2hvdWxkIGJlIGNhbGxlZCAod2hlbiB0aGUgdmFyaWFibGUKKwlORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaXMgc2V0IHRvIHplcm8sIHdoaWNoIGhhcyB0byBiZQorCWNvbmZpZ3VyZWQgZXhwbGljaXRseSkuIFRoZSBmb2xsb3dpbmcgaXNzdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGgKKwl0aGUgc2Vjb25kIGFwcHJvYWNoOiAxLiBBbGFybSBmdW5jdGlvbnMgYXJlIHVzZWQgaW5zaWRlIE5ldC1TTk1QIHRvCisJZS5nLiByZWZyZXNoIGNhY2hlZCB0YWJsZSBjb250ZW50cy4gQXMgZmFyIGFzIEkgY2FuIHNlZSB0aGVyZSBpcworCW5vdGhpbmcgaW4gdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIHRoYXQgcHJldmVudHMgdGhlIGZvbGxvd2luZworCWZyb20gaGFwcGVuaW5nOiBhIHRhYmxlIHJlZnJlc2ggdHJpZ2dlcmVkIHZpYSBTSUdBTFJNIHdoaWxlIGEgcm93CisJaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGEgY2FjaGVkIHRhYmxlLiBUaGlzIGNhbiByZXN1bHQgaW4gZGFuZ2xpbmcKKwlwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgZXZlbiBhIGNyYXNoLiAyLiBQT1NJWCByZXN0cmljdHMgc2lnbmFsCisJaGFuZGxlcnMgdG8gY2FsbGluZyBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIHJlZW50cmFudCBvcgorCW5vbi1pbnRlcnJ1cHRpYmxlCisJKGh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMveHNoX2NoYXAwMgorCV8wNC5odG1sI3RhZ18wMl8wNCkuIFN0YW5kYXJkIEkvTyBmdW5jdGlvbnMgbGlrZSBwcmludGYoKSBhbmQKKwlmcHJpbnRmKCkgYXJlIG5laXRoZXIgcmVlbnRyYW50IG5vciBub24taW50ZXJydXB0aWJsZS4gcnVuX2FsYXJtcygpCisJaXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgc2lnbmFsIGhhbmRsZXIsIHdoaWNoIG1lYW5zIHRoYXQgdGhpcworCXJlc3RyaWN0aW9uIGFwcGxpZXMgdG8gdGhlIGZ1bmN0aW9uIHJ1bl9hbGFybXMoKSBpdHNlbGYgYW5kIGFsbAorCWZ1bmN0aW9ucyBjYWxsZWQgYnkgaXQgKHdoaWNoIGluY2x1ZGVzIHRoZSBhbGFybSBjYWxsYmFjaworCWZ1bmN0aW9ucykuIE9yOiBlLmcuIHNubXBfbG9nKCkgYW5kIGl0cyBjYWxsZXJzIG11c3Qgbm90IGJlIGNhbGxlZAorCWZyb20gaW5zaWRlIHJ1bl9hbGFybXMoKSB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGluc2lkZQorCWEgc2lnbmFsIGhhbmRsZXIuIFRoaXMgaXMgYSBzZXZlcmUgcmVzdHJpY3Rpb24sIGFuZCBvbmUgdGhhdCBpcworCWhhcmQgdG8gd29yayB3aXRoLiAzLiBOb3QgYWxsIHNvZnR3YXJlIGRldmVsb3BlcnMga25vdyBob3cgdG8gbWFrZQorCXN1cmUgdGhhdCBzaWduYWwgZGVsaXZlcnkgd29ya3MgY29ycmVjdGx5IGluIGEgbXVsdGl0aHJlYWRlZAorCWNvbnRleHQuIFBPU0lYIGRvZXMgbm90IGd1YXJhbnRlZSB0byB3aGljaCB0aHJlYWQgYSBzaWduYWwgbGlrZQorCVNJR0FMUk0gd2lsbCBiZSBkZWxpdmVyZWQsIHVubGVzcyB0aGF0IHNpZ25hbCBoYXMgYmVlbiBibG9ja2VkCisJYmVmb3JlIHRocmVhZCBjcmVhdGlvbiBhbmQgaXMgdW5ibG9ja2VkIGFmdGVyIHRocmVhZCBjcmVhdGlvbiAoc2VlCisJYWxzbworCWh0dHA6Ly93d3cub3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwOTY5NTM5OS9mdW5jdGlvbnMvcHRocmVhZF9zaWcKKwltYXNrLmh0bWwpLiBUaGlzIGlzIHJlbGV2YW50IGZvciB0aGUgTmV0LVNOTVAgcHJvamVjdCBub3Qgb25seQorCWJlY2F1c2UgYSB3b3JrZXIgdGhyZWFkIGlzIGNyZWF0ZWQgaW5zaWRlCisJYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jIGJ1dCBhbHNvCisJYmVjYXVzZSBsaWJuZXRzbm1wIGlzIG9mdGVuIHVzZWQgaW5zaWRlIG11bHRpdGhyZWFkZWQgc29mdHdhcmUuCisJQ3VycmVudGx5IG5vIGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHN1cmUgdGhhdCBTSUdBTFJNIGlzIHByb2Nlc3NlZAorCWJ5IHRoZSBOZXQtU05NUCBldmVudCBwcm9jZXNzaW5nIGxvb3AgdGhyZWFkLiBJZiBTSUdBTFJNIGlzCisJcHJvY2Vzc2VkIGJ5IGFub3RoZXIgdGhyZWFkLCB0aGlzIHdpbGwgcmVzdWx0IGluIG9uZSBvciBtb3JlIGRhdGEKKwlyYWNlcy4gQmVjYXVzZSBhbGwgdGhlIGRpZmZpY3VsdGllcyBhc3NvY2lhdGVkIHdpdGggcHJvY2Vzc2luZworCWFsYXJtcyBmcm9tIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyIGZ1bmN0aW9uLCBhbmQgYmVjYXVzZSBmaXhpbmcKKwl0aGVzZSB3b3VsZCByZXF1aXJlIG1vcmUgZWZmb3J0IHRoYW4gaXQgaXMgd29ydGgsCisJTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIGZyb20gbm93CisJb24gYXBwcm9hY2ggKDEpIGlzIHRoZSBvbmx5IHN1cHBvcnRlZCBhcHByb2FjaCB0byB0cmlnZ2VyIGFsYXJtCisJaGFuZGxlcnMuCisgICAgICAtIHBsaXQgc25tcElQQmFzZURvbWFpbiBhbmQgbW92ZSB0aGUgSVB2NCBwYXJ0cyB0byBJUHY0QmFzZSBhbmQgdGhlCisJc29ja2V0IGdlbmVyaWMgcGFydHMgdG8gU29ja2V0QmFzZS4KKyAgICAgIC0gd2hlbiBmcmVlaW5nIGEgY2FjaGUsIHN0b3AgdGltZXIgYW5kIGNhbGwgY2FjaGUgZnJlZSBmdW5jIC0gYWxzbworCWFkZCBuZXRzbm1wX2NhY2hlX3JlbW92ZQorICAgICAgLSBuZXcgZXhwZXJpbWVudGFsIHNpbXBsZSBzdGF0ZSBtYWNoaW5lCisgICAgICAtIG5ldyBleHBlcmltZW50YWwgc2ltcGxlIHN0YXRlIG1hY2hpbmUgbmV3IGV4cGVyaW1lbnRhbCByb3cgY3JlYXRpb24KKwlBUEkgd2hpY2ggdXNlcyBhIHN0YXRlIG1hY2hpbmUgdG8gdHJ5IHJlYWxseSBoYXJkIHRvIGNyZWF0ZSBhIHJvdworCWZyb20gYSBnaXZlbiB2YXJiaW5kIGxpc3QKKyAgICAgIC0gZml4IGlzc3VlIHdpdGggVVNNIHVzaW5nIGluYWN0aXZlIHVzZXJzCisgICAgICAtIGZpeGVkIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBnZW5lcmF0aW5nIHRlbXAuIGZpbGUgbmFtZXMKKyAgICAgIC0gaW1wbGVtZW50ZWQgYSBmaXggZm9yIHRoZSBpc3N1ZSByZXBvcnRlZCBpbiBwYXRjaCAjMzA0Mjc3MC4gQ3JlYXRlZAorCWEgc25tcF9zZWxlY3RfaW5mb19mbGFncyBmdW5jdGlvbiwgYW5kIHNpbWlsYXIsIHRoYXQgYWxsb3cgZm9yCisJYWxhcm1zIHRvIG5vdCBiZSBydW4uIFRoaXMgaXMgdGhlbiB1c2VkIGluIHRoZSBzeW5jaF9yZXNwb25zZQorCWZ1bmN0aW9ucyB0byBhdm9pZCAxMDAlIENQVSBsb29wcworICAgICAgLSBwYXRjaDogMzA0Mjc3MDogZnJvbSBtZWhhZjogTWFkZSBydW5fYWxhcm1zKCkgcmVlbnRyYW50CisgICAgICAtIHdoZW4gZGlzcGxheWluZyBhIGJ5dGUgYXMgc2luZ2xlIGRpZ2l0IGhleCB2YWx1ZSwgZGVmYXVsdCB0bworCXByZWZpeGluZyB3aXRoIDAgdW5sZXNzIHRoZXJlIGlzIGEgc2VwZXJhdG9yIG9yIGFkZGl0aW9uIGhpbnQgZGF0YQorICAgICAgLSAwIHBhdGNoIDMwNTg2NDU6IGZyb20gam9yaXNlc2F0dXJudXM6IG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHBhdGNoCisJdG8gdXNlIE1TR19ET05UV0FJVCBmb3IgdGhlIHVuaXggZG9tYWluIHNvY2tldAorICAgICAgLSBbUEFUQ0ggMzA2NzU0MF06IEZpeCBJUHY0IE9JRCBpbmRleGVzIG9uIDY0LWJpdCBiaWctZW5kaWFuIHN5c3RlbXMuCisKKyAgICBzbm1wbGliLCBzbm1wZDoKKyAgICAgIC0gRG8gbm90IGNoZWNrIGlmIHZhbHVlcyBvZiB0eXBlIHNpemVfdCBhcmUgbGVzcyB0aGFuIDAuCisgICAgICAtIE1ha2Ugc3VyZSB0aGF0IGEgbWFzayBpcyBnaXZlbiB0byBvcGVuIHdoZW4gT19DUkVBVCBpcyBzcGVjaWZpZWQKKworICAgIHNubXBsaWIsIHNubXBkLCBzbm1wbmV0c3RhdDoKKyAgICAgIC0gQWRkIGNvcnJlY3Qgc2l6ZSBwcmVmaXhlcyB3aGVuIHByaW50aW5nIHZhcmlhYmxlcyBvZiB0eXBlIG9pZC4KIAogICAgIHNubXBkOgotICAgICAgLSBbQlVHIDE2OTMwMzldOiBCZSBzaWxlbnQgd2hlbiBpbnNlcnQgZmFpbHMuCisgICAgICAtIEFkZCBzdXBwb3J0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB3aXRoIEhXIGFkZHJlc3MgYmlnZ2VyIHRoYW4gNgorCWJ5dGVzIHRvIGlwTmV0VG9NZWRpYVRhYmxlIGFuZCBpcE5ldFRvUGh5c2ljYWxUYWJsZS4gU29tZSBIVywgbGlrZQorCUluZmluaUJhbmQsIHVzZXMgSFcgYWRkcmVzc2VzIHdpdGggOSBhbmQgbW9yZSBieXRlcy4gU25tcGQgb24gTGludXgKKwl3YXMgbm90IGFibGUgdG8gcGFyc2UgL3Byb2MvbmV0L2FycCB0aGVuIGFuZCBwcm9kdWNlZCB1Z2x5ICdpb2N0bAorCTM1MTIzIHJldHVybmVkIC0xJyB0byBsb2cuCisgICAgICAtIENoZWNrIHRoZSByYW5nZSBvZiBvaWQgdmFsdWVzIHRvd2FyZHMgdGhlIG1heGltdW0gb2lkIHZhbHVlLAorCW5vdFVMT05HX01BWAorICAgICAgLSBFeHRyYWN0IHRoZSBFeGl0IGFuZCByZXN0YXJ0KiBzdWJyb3V0aW5lcyBmcm9tIHV0aWxfZnVuYyBpbiBvcmRlcgorCXRvIG1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgbGVzcyBjb2RlIGZvciB0aGUgbWluaW1hbCBjYXNlLgorICAgICAgLSBGaXhlZCBjcmVhdGlvbiBvZiB2aWV3cyB1c2luZyBzbm1wdXNtLCBPSURzIHdpdGggaW5kZXhlcyA+IDI1NSBhcmUKKwlhbGxvd2VkIG5vdy4gVGhpcyByZXZlcnRzIFNWTiBjb21taXQgIzc0OTIuCisgICAgICAtIEZpeGVkIGludmFsaWQgYWNjZXNzIHRvIG1lbW9yeSBpbiBUQ1AtTUlCIFRoaXMgcGFydGx5IHJldmVydHMgcGF0Y2gKKwkxNzcxOSAtIHRoZSBlbnRyaWVzICphcmUqIHVzZWQgYWZ0ZXIgcmF3X2RhdGEgY29udGFpbmVyIGlzIGZyZWVkLgorCVRoZXNlIGVudHJpZXMgc2hvdWxkIGJlIGZyZWVkIHdoZW4gYXNzb2NpYXRlZCByb3dyZXFfY3R4IGlzIGZyZWVkLgorICAgICAgLSBGaXhlZCBsb2dnaW5nIG9mICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbiBJUC1NSUIgYW5kCisJVENQLU1JQiBUaGUgY291bnRlcnMsIHdoaWNoIGdyb3cgZmFzdCBhcmUgbm93IGN1dCB0byAzMmJpdHMuCisgICAgICAtIEZpeGVkIHVkcFRhYmxlIGluZGV4ZXMgb24gYmlnLWVuZGlhbiA2NGJpdCBMaW51eC4gVGhlIGluZGV4IHdhcworCWFsd2F5cyAnMC4wLjAuMCcgaW5zdGVhZCBvZiByZWFsIGxvY2FsIElQIGFkZHJlc3MuCisgICAgICAtIE1hZGUgc3VidHJlZV9jb250ZXh0X2NhY2hlOjpjb250ZXh0X25hbWUgYSBjb25zdCBjaGFyKi4KKyAgICAgIC0gTWFrZSBhbGwgdGhlIG9pZHMgYW5kIG9pZCBsZW5ndGhzIGluIGFnZW50X3RyYXAuYyBjb25zdCBhbmQgdXNlCisJdGhlbSBmcm9tIGV2ZXJ5d2hlcmUuCisgICAgICAtIE1ha2UgdGhlIGVudGVycHJpc2UgYXJndW1lbnQgb2YgbmV0c25tcF9zZW5kX3RyYXBzIGFuZAorCXNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMgY29uc3QKKyAgICAgIC0gT25seSBlbmFibGUgaG9zdFN3SW5zdCBycG0gc3VwcG9ydCBvbiBsaW51eCBob3N0cyB3aXRoIGxpYnJwbS4gVGhpcworCW1ha2VzIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIG9uIG5vbi1ycG0gbGludXggZGlzdHJpYnV0aW9ucy4KKyAgICAgIC0gUmVtb3ZlZCB0aGUgdW51c2VkIGZ1bmN0aW9uIHh4X3Rva2VuaXplX2V4ZWNfY29tbWFuZCBmcm9tCisJdXRpbGl0aWVzL2V4ZWN1dGUuCiAgICAgICAtIFtCVUcgMjgyMjM2MF06IEZpeCBtZW1vcnkgbGVhayB3aGVuIGJ1aWxkaW5nIHRhYmxlIE9JRHMKLSAgICAgIC0gW0JVRyAyODQxMDA4XTogUHJvdGVjdCBhZ2FpbnN0IGNyYXNoIGZvbGxvd2luZyBmYWlsZWQgQWdlbnRYIHJlc3BvbnNlCi0gICAgICAtIFtCVUcgMjg3Mzg1OF06IEZpeCBoYW5kbGluZyBvZiBzY2hlZE93bmVyIGluZGV4LgorICAgICAgLSBbQlVHIDI4NDEwMDhdOiBQcm90ZWN0IGFnYWluc3QgY3Jhc2ggZm9sbG93aW5nIGZhaWxlZCBBZ2VudFgKKwlyZXNwb25zZQorICAgICAgLSBbQlVHIDI4NzM4NThdOiBGaXggaGFuZGxpbmcgb2Ygc2NoZWRPd25lciBpbmRleC4gUGF0Y2ggcHJvdmlkZWQgYnkKKwlNYXggU2NodWJlcnQuCiAgICAgICAtIFtCVUcgMjg5NDA1OV06IEhhbmRsZSBlcnJvcnMgd2hlbiBjb3VudGluZyBpbnRlcmZhY2VzCiAgICAgICAtIFtCVUcgMjg5NzAwMF06IFN1cHByZXNzIDMyLWJpdCBjb3VudGVyIHRydW5jYXRpb24gd2FybmluZ3MuCi0gICAgICAtIFtCVUcgMjkxNDQxMF06IEZpeCBjcmFzaCBvbiBlbXB0eSBjb21tYW5kIGxpbmVzCi0gICAgICAtIFtCVUcgMjkyNDE0MF06IEZpeCB0ZXJtaW5hdGlvbiBvZiBDUFUvRlBVIHR5cGVzCi0gICAgICAtIFtQQVRDSCAxMjU3MzQ3XTogTm9uLWZpeGVkIHNpemUgY29ubmVjdGlvbiBidWZmZXIKLSAgICAgIC0gW1BBVENIIDE1NTA3MzBdOiBSZXBvcnQgZXJyb3JzIGZyb20gaXRlcmF0b3ItYmFzZWQgaGFuZGxlcnMKLSAgICAgIC0gW1BBVENIIDE5Nzc0MzldOiBGaXggcGFzcy9fcGVyc2lzdCBidWcgd2l0aCBTRVQgb2lkIHZhbHVlCi0gICAgICAtIFtQQVRDSCAyMDEyNDAyXTogSGFuZGxlIGZhaWx1cmUgdG8gbG9vayB1cCBpbnRlcmZhY2UgZXJyb3IgY291bnRlcnMKLSAgICAgIC0gW1BBVENIIDIwODI3MjZdOiBjb3JyZWN0bHkgcmVwb3J0IE5JQyBzcGVlZHMgaGlnaGVyIHRoYW4gNEdiaXQvcwotICAgICAgLSBbUEFUQ0ggMjEyNDI4OF06IEZpeCBzZXR0aW5nIG9mIHVzbVVzZXJQcml2UHJvdG9jb2wgYXQgY3JlYXRpb24KLSAgICAgIC0gW1BBVENIIDIxNjI2NTJdOiBGaXggc2ltcGxlIGhyZnMgY2hlY2tzIHdoZW4gTkZTIGlzIGluIHVzZQotICAgICAgLSBbUEFUQ0ggMjM4NDc3OV06IEZpeCBoYW5kbGluZyBvZiBHZXRCdWxrIHdpdGggTj4wLE09PTAKLSAgICAgIC0gW1BBVENIIDI2ODYyODBdOiBSZXBvcnQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbnMgYXMgYW4gZXJyb3IKLSAgICAgIC0gW1BBVENIIDI2OTM2NzBdOiBEb24ndCBvcGVuIEFnZW50WCBzb2NrZXRzIGlmIG90aGVyIHRyYW5zcG9ydHMgZmFpbAotICAgICAgLSBbUEFUQ0ggMjc5MTQxN106IEZpeCBzbm1wZCBzZWdmYXVsdCB3aGVuIHJ1biB3aXRoIC1EQUxMCi0gICAgICAtIFtQQVRDSCAyNzk3MjUxXTogU3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXNhdGlvbiBhbmQgc2h1dGRvd24KLSAgICAgIC0gW1BBVENIIDI4MjIzMzddOiBGaXggbWVtb3J5IGxlYWsgaW4gaXBBZGRyZXNzUHJlZml4VGFibGUKKyAgICAgIC0gW0JVRyAyOTAwMDc4XTogQWRkIHN1cHBvcnQgZm9yIE9JRCB2YXJpYWJsZXMgd2l0aCBzaXplIGluIGVsZW1lbnRzCisJaW5zdGVhZCBvZiBieXRlcywgY29ycmVjdCBzeXNPYmplY3RJRCB0byB1c2UgdGhpcy4KKyAgICAgIC0gW1BBVENIIDI4MzU1NzZdOiBGaXggZW5kaWFubmVzcyBpc3N1ZXMgaW4gcGFzcy9wYXNzX3BlcnNpc3QKICAgICAgIC0gW1BBVENIIDI4Nzc1MThdOiBGaXggaGFuZGxpbmcgb2Ygc2NvcGVkIEFnZW50WCB2YXJpYWJsZXMKLSAgICAgIC0gW1BBVENIIDI4ODMxNTVdOiBGaXggbWVtb3J5IGxlYWsgaW4gcHJveHkgaGFuZGxpbmcuCisgICAgICAtIFtQQVRDSCAyODgzMDkyXTogU3VwcG9ydCBtb25pdG9yaW5nIHByb2Nlc3NlcyB0aGF0IHNob3VsZCBub3QgYmUKKwlydW5uaW5nLiBQYXRjaCBwcm92aWRlZCBieSBDaHJpc3RpYW4gKGNnNzUpLiBRbjogU2hvdWxkIHRoaXMKKwlmdW5jdGlvbmFsaXR5IGJlIGJhY2stcG9ydGVkIHRvIGVhcmxpZXIgbGluZXM/CisgICAgICAtIFtQQVRDSCAyODgzMjIwXTogRml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdoZW4gaWZYVGFibGUgaXMgbm90CisJaW5jbHVkZWQuCiAgICAgICAtIFtQQVRDSCAyODg3ODE2XTogUHJvdGVjdCBhZ2FpbnN0IGRpdmlzaW9uLWJ5LXplcm8gY3Jhc2gKLSAgICAgIC0gW1BBVENIIDI5MDEwMjldOiBGaXggY29tcGlsZXIgd2FybmluZyBvbiBDbG9zZUhhbmRsZSgpCi0gICAgICAtIFtQQVRDSCAyOTExMzIzXTogRml4IGFnZW50IGxvY2t1cCB3aGVuIG1vbml0b3JpbmcgQWdlbnRYLWRlbGVnYXRlZCBpbmZvcm1hdGlvbgotICAgICAgLSBbUEFUQ0ggMjkxMjU4NF06IEZpeCBudWxsIE9JRCBoYW5kbGluZyBpbiBBZ2VudHggb24gNjRiaXQKLSAgICAgIC0gW1BBVENIIDI5NTA4NDVdOiBGaXggaWZIaWdoU3BlZWQgY2FsY3VsYXRpb24KLSAgICAgIC0gW1BBVENIIDI5NTIwMzRdOiBSZXR1cm4gb2YgdGhlIEdyZWF0IFN1U0UgJ3NwcmludGYnIEh1bnQKLSAgICAgIC0gW1BBVENIIDI5NTY2NTddOiBIYW5kbGUgb3Zlci1sZW5ndGggQWdlbnRYIE9JRHMKLSAgICAgIC0gW1BBVENIIDI5Njg2NDJdOiBDYXRjaCBvdmVyZmxvdyBvZiBwYXNzLXRocm91Z2ggY29tbWFuZCBidWZmZXIKLSAgICAgIC0gQWxsb3cgIm1vbml0b3IiIHRvIGhhbmRsZSBuZWdhdGl2ZSB0aHJlc2hvbGQgdmFsdWVzCi0gICAgICAtIENoYW5nZSBkZWZhdWx0IEFnZW50WCB0YXJnZXQgZnJvbSAwLjAuMC4wOjcwNSB0byBsb2NhbGhvc3Q6NzA1Ci0gICAgICAtIENsZWFuIHVwIG5vdGlmaWNhdGlvbgotICAgICAgLSBFbnN1cmUgT19DUkVBVEUgbWFzayBpcyBhbHdheXMgc3BlY2lmaWVkCi0gICAgICAtIEZpeCBhZ2VudCBjcmFzaCB3aGVuIHNlbmRpbmcgZW5jcnlwdGVkIFNOTVB2MyB0cmFwcwotICAgICAgLSBGaXggQ1ZFLTIwMDgtNDMwOSAoR0VUQlVMSyBpc3N1ZSByZXBvcnRlZCBieSBPc2NhciBNaXJhLVNhbmNoZXopCi0gICAgICAtIEZpeCBjcmVhdGlvbiBvZiB2aWV3cyB1c2luZyBzbm1wdXNtCi0gICAgICAtIEZpeCBoYW5kbGluZyBvZiBtdWx0aXBsZSBtYXRjaGluZyBWQUNNIGVudHJpZXMKLSAgICAgIC0gRml4IGludmFsaWQgYWNjZXNzIHRvIG1lbW9yeSBpbiBUQ1AtTUlCCi0gICAgICAtIEZpeCBsb2dnaW5nIG9mICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWVzJyBpbiBJUC1NSUIgYW5kIFRDUC1NSUIKLSAgICAgIC0gRml4IG1lbW9yeSBsZWFrIHdoZW4gbXVsdGlwbGUgaW50ZXJmYWNlcyBoYXZlIHRoZSBzYW1lIElQdjYgYWRkcmVzcwotICAgICAgLSBGaXggcG9zc2libGUgY3Jhc2ggd2hlbiA2NC1iaXQgY291bnRlcnMgZXhjZWVkIDJeMzIKLSAgICAgIC0gRml4IHR3byBidWdzIHdpdGggc211eCBwYXNzd29yZCBzdXBwb3J0Ci0gICAgICAtIEZpeCB1ZHBUYWJsZSBpbmRleGVzIG9uIGJpZy1lbmRpYW4gNjRiaXQgTGludXguCi0gICAgICAtIEltcHJvdmUgcGFyc2luZyBvZiAtTFMgY29tbWFuZCBsaW5lIGFyZ3VtZW50Ci0gICAgICAtIExhdGNoIGxhcmdlLWRpc2sgc3RhdGlzdGljcyBhdCAyVGIgKHJhdGhlciB0aGFuIHdyYXBwaW5nKQotICAgICAgLSBSZWdpc3RlciBDUFUvbWVtb3J5IGhhcmR3YXJlIG1vZHVsZXMgd2l0aCBuc0NhY2hlVGFibGUKLSAgICAgIC0gUmVtb3ZlIGlubGluZSBkZWNsYXJhdGlvbnMgZm9yIG5vbi1pbmxpbmUgZGVmaW5lZCBmdW5jdGlvbnMKLSAgICAgIC0gUmVwb3J0IGlmU3BlZWQgb2YgZG93biBuZXR3b3JrIGludGVyZmFjZXMKLSAgICAgIC0gU3VwcG9ydCBsYXJnZSBIVyBhZGRyZXNzZXMgKD42Ynl0ZXMpCisgICAgICAtIFtQQVRDSCAyOTAxMDI5XTogRml4IGNvbXBpbGVyIHdhcm5pbmcgb24gQ2xvc2VIYW5kbGUoKSBFbmRpYW4KKwlwcm9ibGVtcyBhbHJlYWR5IGFkZHJlc3NlZCBieSBwYXRjaCAjMjgzNTU3NgorICAgICAgLSBbUEFUQ0ggMjkwMzA5Ml06IEZpeCBicm9rZW4gaGFuZGxpbmcgb2YgYnJvYWRjYXN0IGVudHJpZXMuCisgICAgICAtIFtQQVRDSCAyOTExMzIzXTogRml4IGFnZW50IGxvY2t1cCB3aGVuIG1vbml0b3JpbmcgQWdlbnRYLWRlbGVnYXRlZAorCWluZm9ybWF0aW9uCisgICAgICAtIFtQQVRDSCAyOTExOTcwXTogUHJvcGVybHkgdGVybWluYXRlIGxpbmtlZCBsaXN0IG9mIHJlZ2lzdHJhdGlvbnMuCisJUGF0Y2ggcHJvdmlkZWQgYnkgTWlya28gRGVja2VydC4KKyAgICAgIC0gW1BBVENIIDI5NTY2NTddOiBIYW5kbGUgb3Zlci1sZW5ndGggQWdlbnRYIE9JRHMuIFBhdGNoIHByb3ZpZGVkIGJ5CisJUm9iIFdlc3QKKyAgICAgIC0gW1BBVENIIDI5Njc0MDBdOiBSZXRyaWV2ZSBlcnJvciBjb3VudGVycyBmb3IgdGhlIEV0aGVyTGlrZS1NSUIKKwlQYXRjaCBzdXBwbGllZCBieSBKb3NlZiBNb2VsbGVycy4KKyAgICAgIC0gW1BBVENIIDI5Njg2NDJdOiBDYXRjaCBvdmVyZmxvdyBvZiBwYXNzLXRocm91Z2ggY29tbWFuZCBidWZmZXIuCisJUGF0Y2ggZnJvbSBBbmRyZWFzIEphZWdlci9MZW9uYXJkbyBDaGlxdWl0dG8KKyAgICAgIC0gYWdlbnQgd2lsbCBubyBsb25nZXIgY2FsbCB0YWJsZSBoYW5kbGVycyBpZiBhIHNldCByZXF1ZXN0IGZvciB0aGUKKwloYW5kbGVyIGhhcyBpbnZhbGlkIGluZGV4ZXMKKyAgICAgIC0gYWdlbnQgd2lsbCBubyBsb25nZXIgY2FsbCB0YWJsZSBoYW5kbGVycyBpZiBhIHNldCByZXF1ZXN0IGZvciB0aGUKKwloYW5kbGVyIGhhcyBpbnZhbGlkIGluZGV4ZXMgZG9uJ3QgY2FsbCBjbGVhbnVwIG9uIGZpcnN0IHJlcXVlc3Qgb24KKwliYWQgaW5kZXhlcy4gaW5zdGVhZCwgc2V0IGFjdHVhbCBlcnJvciBsYXRlciwgYW5kIGZyZWUgcmVxdWVzdCBkYXRhCisJc2V0cyBvbiBmaXJzdCByZXF1ZXN0IGZvciBzZXRzCisgICAgICAtIGRlZmluZSBhbmQgdXNlIG5ldyBORVRTTk1QX0xPR09OQ0UgbWFjcm8KKyAgICAgIC0gZml4IGNyYXNoIGluIElGLU1JQiBhbmQgSVAtTUlCIHdoZW4gdGhlcmUgYXJlIHNvbWUgaW50ZXJmYWNlcyB3aXRoCisJYnJvYWRjYXN0IElQIGFkZHJlc3MgYW5kIHNvbWUgd2l0aG91dC4gUmVzZXQgdGhlIGJjYXN0ZW50cnkgaW4gdGhlCisJbG9vcCwgc28gaXQgY2Fubm90IGJlIGluc2VydGVkIHRvIHRoZSB0d2ljZS4gV2l0aG91dCB0aGlzIHBhdGNoLAorCXdoZW4gYW4gaW50ZXJmYWNlIHdpdGhvdXQgYnJvYWRjYXN0IGFkZHJlc3MgaXMgcHJvY2Vzc2VkLCB0aGUKKwliY2FzdGFkZHJlc3MgZnJvbSBwcmV2aW91cyBsb29wIGlzIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lci4KKwlUaGlzIG9idmlvdXNseSBmYWlscyBhbmQgdGhlIGJjYXN0ZW50cnkgaXMgZnJlZWQsIGJ1dCB0aGUgY29udGFpbmVyCisJc3RpbGwgY29udGFpbnMgcmVmZXJlbmNlIHRvIGl0IC0+IFNJR1NFR1YuCisgICAgICAtIGZpeCBtZW1vcnkgbGVhayBpbiBpcEFkZHJlc3NQcmVmaXhUYWJsZSAtCisJbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyByZXR1cm5zIGRpZmZlcmVudCBjb2RlLCB3aGVuIHRoZQorCWVudHJ5IHdhcyBub3QgaW5zZXJ0ZWQgdG8gbGlzdCBhbmQgY2FuIGJlIGZyZWVkLgorICAgICAgLSBmaXggcmFyZSByYWNlIGNvbmRpdGlvbiB3aGVuIHJlYWRpbmcgUlBNIGRhdGFiYXNlLiBPbGQgcnBtIHZlcnNpb25zCisJcmV0dXJuIE5VTEwgaW5zdGVhZCBvZiBIZWFkZXIgd2hlbiBhbm90aGVyIFJQTSBpbnN0YW5jZSBob2xkcworCWRhdGFiYXNlIGxvY2tzLiBJLmUuIHNubXBkIHNvbWV0aW1lcyBjcmFzaGVzIHdoZW4gcmVhZGluZyBocl9zd0luc3QKKwlhbmQgcnBtIGlzIGluc3RhbGxpbmcvdXBkYXRpbmcvcmVtb3ZpbmcgYW5vdGhlciBwYWNrYWdlLiBBcyBhCisJc29sdXRpb24sIHdob2xlIFJQTSBjYWNoZSBpcyB0aHJvd24gYXdheSBhbmQgcmUtcmVhZCB3aGVuIHdlIGdvdCBhbgorCWVycm9yIGZyb20gbGlicnBtLiBUaGUgd2hvbGUgcHJvY2VzcyBpcyByZXN0YXJ0ZWQgb25seSB0aHJlZSB0aW1lcywKKwl0byBwcmV2ZW50IGVuZGxlc3MgbG9vcC4KKyAgICAgIC0gZml4ZWQgYSBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCLgorICAgICAgLSBmaXhlZCBmaWxlZGVzY3JpcHRvciBsZWFrIGluIEV0aGVybGlrZS1NSUIgYW5kIFJNT04tTUlCCisgICAgICAtIGZpeGVkIG1lbW9yeSBsZWFrIHdoZW4gcmVhZGluZyBzZW5zb3JzIGZvciBMTS1TRU5TT1JTLU1JQi4KKyAgICAgIC0gZml4ZWQgb25lIGxlYWstYXQtZXhpdC4KKyAgICAgIC0gaW5jbHVkZSBsb2NhbCBwb3J0IG51bWJlciBpbiBwYWNrZXQgZHVtcHMuIEFuIGV4YW1wbGU6IFJlY2VpdmVkIDM2CisJYnl0ZSBwYWNrZXQgZnJvbSBVRFA6IFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxIDAwMDA6IDMwCisJMjIgMDIgMDEgMDEgMDQgMDYgNzAgNzUgNjIgNkMgNjkgNjMgQTEgMTUgMDIgMCIuLi4uLnB1YmxpYy4uLiAwMDE2OgorCTA0IDM3IEYyIEQ0IDlCIDAyIDAxIDAwIDAyIDAxIDAwIDMwIDA3IDMwIDA1IDA2IC43Li4uLi4uLi4uMC4wLi4KKwkwMDMyOiAwMSAwMSAwNSAwMCAuLi4uIFJlY2VpdmVkIFNOTVAgcGFja2V0KHMpIGZyb20gVURQOiBHRVRORVhUCisJbWVzc2FnZSAtLSBjY2l0dC4xIFNlbmRpbmcgMTE4IGJ5dGVzIHRvIFVEUDoKKwlbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MSAwMDAwOiAzMCA3NCAwMiAwMSAwMSAwNCAwNiA3MAorCTc1IDYyIDZDIDY5IDYzIEEyIDY3IDAyIDB0Li4uLi5wdWJsaWMuZy4gMDAxNjogMDQgMzcgRjIgRDQgOUIgMDIgMDEKKwkwMCAwMiAwMSAwMCAzMCA1OSAzMCA1NyAwNiAuNy4uLi4uLi4uLjBZMFcuIDAwMzI6IDA4IDJCIDA2IDAxIDAyIDAxCisJMDEgMDEgMDAgMDQgNEIgNEMgNjkgNkUgNzUgNzggLisuLi4uLi4uLktMaW51eCAwMDQ4OiAyMCA2MSA3MyA3NSA3MworCTIwIDMyIDJFIDM2IDJFIDMzIDMzIDJFIDMyIDJEIDczIGFzdXMgMi42LjMzLjItcyAwMDY0OiA2MyA3MyA3NCAyMAorCTIzIDMxIDIwIDUzIDREIDUwIDIwIDUwIDUyIDQ1IDQ1IDREIGNzdCAjMSBTTVAgUFJFRU0gMDA4MDogNTAgNTQgMjAKKwk1MyA2MSA3NCAyMCA0MSA3MCA3MiAyMCAzMyAyMCAzMiAzMSAzQSBQVCBTYXQgQXByIDMgMjE6IDAwOTY6IDMxIDMwCisJM0EgMzUgMzggMjAgNDMgNDUgNTMgNTQgMjAgMzIgMzAgMzEgMzAgMjAgMTA6NTggQ0VTVCAyMDEwIDAxMTI6IDc4CisJMzggMzYgNUYgMzYgMzQgeDg2XzY0CisgICAgICAtIG1hZGUgc3VyZSB0aGF0IGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWx1cmUgZG9lcyBub3QgY3JlYXRlCisJZGFuZ2xpbmcgcG9pbnRlcnMgaW4gdGhlIE1JQiBzdWJ0cmVlIHJlZ2lzdHJ5LgorICAgICAgLSByZXBvcnQgcmVhbCBpZlNwZWVkIG9mIG5ldHdvcmsgaW50ZXJmYWNlIGV2ZW4gaXQgaXMgZG93bi4gU29tZQorCWludGVyZmFjZXMgY2FuIHJlcG9ydCB0aGVpciByZWFsIHNwZWVkLCBldmVuIHRoZXkgYXJlIGRvd24uIEFuZCBpZgorCXRoZXkgY2FuJ3QsIHRoZSBmYWxsYmFjayB0byAxME1icHMgaXMgc3RpbGwgdGhlcmUuCisgICAgICAtIHRhYmxlX2RhdGEvdGRhdGEgbmV4dCBoYW5kbGVyIHdpbGwgbm90IGJlIGNhbGxlZCBkdXJpbmcgZ2V0CisJcHJvY2Vzc2luZyBpZiBubyB2YWxpZCByb3dzIGFyZSBmb3VuZCBmb3IgdGhlIGhhbmRsZXIKKyAgICAgIC0gdGRhdGEgaGVscGVyIG5vdyBzYXZlcyBmbGFncyBwYXNzZWQgZHVyaW5nIGNyZWF0aW9uOyBhZGQgdGRhdGEgZmxhZworCXRvIE5PVCBjcmVhdGUgdGhlIHRhYmxlIGNvbnRhaW5lcgorICAgICAgLSB0cmFuc2xhdGUgTk9TVUNIKi9FTkRPRk1JQiBlcnJvcnMgZHVyaW5nIFJFU0VSVkUxIHRvIE5PQ1JFQVRJT04KKyAgICAgIC0gdXRpbGl0aWVzL2V4ZWN1dGUgZG8gbm90IG5lZWQgYW55dGhpbmcgZnJvbSB1dGlsX2Z1bmNzLCBzbyBzdG9wCisJZGVwZW5kaW5nIG9uIGl0LgorICAgICAgLSBmaXhlZCB2YWx1ZSBvZiBJUC1NSUI6OmlwdjZJbnRlcmZhY2VGb3J3YXJkaW5nIG9uIExpbnV4ICAgVGhlIHZhbHVlCisJd2FzIDAgKG5vdCBmb3J3YXJkaW5nKSBvciAxIChmb3J3YXJkaW5nKSwgc2hvdWxkIGJlIDIgYW5kIDEgaW5zdGVhZAorCS0gbmV0c25tcF9pbnRlcmZhY2VfZW50cnkuZm9yd2FyZGluZ192NiBpcyBib29sZWFuLCBub3QgVHJ1dGhWYWx1ZS4KKyAgICAgIC0gbmV3IEFQSSBmb3IgaW5kaWNhdGluZyB0aGF0IHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMgdG8gYmUgc2F2ZWQKKwlhZnRlciB0aGUgY3VycmVudCByZXF1ZXN0IGZpbmlzaGVzIHByb2Nlc3NpbmcKKyAgICAgIC0gW0JVRyAzMDAzOTgxXTogUHJvdGVjdCBhZ2FpbnN0IGJ1ZmZlciBvdmVyZmxvdworICAgICAgLSBbQlVHIDMwMTkyNDNdOiBSZWdpc3RlciBleGVjRml4IGNvbXBhdGFiaWxpdHkgZGlyZWN0aXZlIGNvcnJlY3RseS4KKyAgICAgIC0gcGF0Y2ggMjkxMjUyMDogZnJvbSBsaXN0b206IEZyZWUga21lbSByZWZlcmVuY2VzIG9uIHNodXRkb3duCisgICAgICAtIHBhdGNoOiAzMDI4OTIzOiBmcm9tIGplbnNvOiBuZXcgY29weSBvZiB0aGUgYnJpZGdlLW1pYiBwZXJsCisJaW1wbGVtZW50YXRpb24KKyAgICAgIC0gcmVwb3J0IGdmcyBmaWxlc3lzdGVtcyBpbiBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlLgorICAgICAgLSBbUEFUQ0ggMjkwNDkwMF06IERvY3VtZW50YXRpb24gcGx1cyBhc3NvcnRlZCBoYW5kbGVyIGNvZGUgZml4ZXMKKyAgICAgIC0gW1BBVENIIDI5MTEzNjFdOiBEb2N1bWVudGF0aW9uIChQcm92aWRlZCBieSBUb21hc3ogTGlzKQorICAgICAgLSBbUEFUQ0ggMjkxMTM2MV06IFJlLW9yZGVyIGNvZGUgdG8gZ3JvdXAgcmVsYXRlZCBmdW5jdGlvbnMgdG9nZXRoZXIKKyAgICAgIC0gW1BBVENIIDI5MTEzNjFdOiBSZW1vdmUgcmVkdW5kYW50IHZhcmlhYmxlcworICAgICAgLSBbUEFUQ0ggMjkzMTQ0Nl06IG1ha2UgdGhlIGxvYWQgYXZlcmFnZXMgd3JpdGFibGUuCisgICAgICAtIFtQQVRDSCAzMDQ0NTEyXTogZml4IHN5c29iamVjdGlkIGRpcmVjdGl2ZS4KKyAgICAgIC0gcGF0Y2ggMjc5MDI0OTogZnJvbSB3aWxscHdpbGxwOiByZWR1Y2UgY2FjaGUgdGltZSBmb3IgdGhlIGlmdGFibGUKKwl0byAzc2Vjb25kcyB0byBpbmNyZWFzZSBhY2N1cmFjeQorICAgICAgLSBwYXRjaCAyODI1NjUzOiBmcm9tIGJydTVjZTogZml4IHNlbmRtYWlsLmNmIHBhcnNpbmcgaW4gY2VydGFpbgorCWNvbmRpdGlvbnMKKyAgICAgIC0gTG9nIGJlZm9yZSByZXR1cm5pbmcuCisgICAgICAtIFtQQVRDSCAzMDUzNDI4XTogZml4IGdldF9waWRfZnJvbV9pbm9kZSB3aGVuIHRoZSBpbm9kZSBpcyBub3QKKwlmb3VuZC4KKyAgICAgIC0gW1BBVENIIDMwNTgxNDBdOiBjaGVjayB0aGF0IGlub2RlIGlzIG5vbi16ZXJvCisgICAgICAtIHBhdGNoIDMwNjI1MjY6IGZyb20gbWFyaW9nODU6IGZpeCBzZWN1cml0eSBlbmdpbmVJRCBzZXR0aW5nIGluIHRoZQorCXRyYXBzZXNzIGRpcmVjdGl2ZQogCi0gICAgc25tcHRyYXBkOgotICAgICAgLSBbUEFUQ0ggMjcyNjMwMl06IFBhc3MgcmVzdWx0cyBvZiBQZXJsIHRyYXAgaGFuZGxlcnMgdG8gdHJhcCBkYWVtb24KLSAgICAgIC0gUmVtb3ZlIGdsaWJjLXNwZWNpZmljIHByaW50Zi1mb3JtYXR0aW5nIHRva2VucworICAgIHNubXBkbGliOgorICAgICAgLSBuZXcgZnVuY3Rpb25zIHRvIG1ha2Ugc3Rhc2ggcHRyIGFuZCBuZXdyb3cgYXZhaWxhYmxlIHRvCisJdGFibGVfZGF0YXNldCBoYW5kbGVycyBub25ld3M6IGZpeCB0eXBvOyB0YWJzIHRvIHNwYWNlczsgdXNlIHNpemVvZgorCWluc3RlYWQgb2YgY29uc3RhbnQKKworICAgIHNubXBkeDoKKyAgICAgIC0gY2hhbmdlZCBkZWZhdWx0IFRDUCB0YXJnZXQgZnJvbSAwLjAuMC4wOjcwNSB0byBsb2NhbGhvc3Q6NzA1LiBUaGlzCisJaXMgbm90IG9ubHkgYSBtb3JlIHNlY3VyZSBjaG9pY2UgYnV0IGl0IGFsc28gbWFrZXMgaXQgcG9zc2libGUgb24KKwlXaW5kb3dzIHN5c3RlbXMgdG8gbGV0IGFuIEFnZW50WCBzdWJhZ2VudCBjb25uZWN0IHRvIGFuIEFnZW50WAorCW1hc3RlciBhZ2VudCBydW5uaW5nIG9uIHRoZSBzYW1lIHN5c3RlbSB3aXRob3V0IGhhdmluZyB0byBzZXQgdGhlCisJdmFyaWFibGUgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVC4KIAogICAgIHNubXB0YWJsZToKICAgICAgIC0gW0JVRyAyODM3OTk4XTogSGFuZGxlIG1pc3NpbmcgaW5zdGFuY2Ugc3ViaWRlbnRpZmllcnMgaW4gcmVzdWx0cwotICAgICAgLSBbUEFUQ0ggMjg1MDA2N106IFN1cHByZXNzIGV4dHJhbmVvdXMgImluZGV4IiBoZWFkZXIgdG9rZW4KKyAgICAgIC0gW1BBVENIIDI4NTAwNjddOiBTdXBwcmVzcyBleHRyYW5lb3VzICJpbmRleCIgaGVhZGVyIHRva2VuIFBhdGNoCisJc3VwcGxpZWQgYnkgRGFuIE5lbHNvbgorCisgICAgc25tcHVzbToKKyAgICAgIC0gUHJlZmVyIHRvIHVzZSBhIHZhcmlhYmxlIG9mIHRoZSByaWdodCB0eXBlIG92ZXIgYW4gdWdseSBjYXN0LgorCUxlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlIGFzIHdlbGwuCisgICAgICAtIHBhdGNoIGZyb20gTWFydGluIEJqb3JrbHVuZCB0byBhZGQgYSAtQ3cgb3B0aW9uIHRvIHVzZQorCWNyZWF0ZUFuZFdhaXQgZm9yIGFnZW50cyB0aGF0IGFyZSBzdHJpY3QgYWJvdXQgbm90IGFsbG93aW5nIGEgcm93CisJdG8gYmUgc2V0IHRvIGFjdGl2ZSB1bnRpbCB0aGUgYXV0aGVudGljYXRpb24gcGFzc3dvcmQgaGFzIGJlZW4KKwljaGFuZ2VkOyBwbHVzIHdoaXRlLXNwYWNlIGNsZWFuIHVwLCBtYW51YWwgYWRkaXRpb25zIGFuZCBoZWxwCisJb3V0cHV0IG1vZGlmaWNhdGlvbnMgYnkgaGFyZGFrZXIKKyAgICAgIC0gQ29ycmVjdCBpZmRlZnMsIHJlbW92ZSBkZWFkIHZhcmlhYmxlcy4KKworICAgIG1hbjoKKyAgICAgIC0gY2xlYW4gdXAgbWFudWFsIHBhZ2VzIChmcm9tIERlYmlhbiBwYXRjaCA1Nl9tYW5wYWdlKQorCisgICAgc25tcHdhbGs6CisgICAgICAtIEhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBlbmQgb2lkIGlzIGxvbmdlciB0aGFuIHRoZSBjdXJyZW50IG9pZAorCWNvcnJlY3RseQogCiAgICAgYXBwczoKLSAgICAgIC0gW0JVRyAyODExNTc3XTogRml4IGJ1ZyBpbiBHZXRCdWxrIGhhbmRsaW5nCi0gICAgICAtIFtQQVRDSCAyOTM3OTk2XTogQWRkIERhdGU6IGhlYWRlciB0byBlbWFpbCBzZW5kIGJ5IHRyYXB0b2VtYWlsCi0gICAgICAtIEltcHJvdmUgcGFyc2luZyBvZiAtTFMgY29tbWFuZCBsaW5lIGFyZ3VtZW50CisgICAgICAtIEFkZCBjb21tYW5kIHRvIHNlbmQgQWdlbnRYIG5vdGlmeSByZXF1ZXN0cyB0byBhIG1hc3RlciBhZ2VudC4KKyAgICAgIC0gR2VuZXJpYyBob3N0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc25tcC5jb25mIGZpbGVzIGFyZSBub3cgcmVhZC4KKwlTZWUgdGhlIEhPU1QtU1BFQ0lGSUMgRklMRVMgc2VjdGlvbiBvZiB0aGUgc25tcC5jb25mIG1hbnVhbCBwYWdlLgorICAgICAgLSBPbmx5IGJ1aWxkIGFnZW50eHRyYXAgaWYgdGhlIGFnZW50eCBsaWJyYXJpZXMgYXJlIGJ1aWx0LiBBZGQgYSB0ZXN0CisJY2FzZSBmb3IgYWdlbnR4dHJhcC4gVGhlIGVuYWJsZW1lbnQvZGlzYWJsZW1lbnQgaXMgaW5zcGlyZWQgYnkKKwlhdXRvbWFrZSBjb25kaXRpb25hbHMKKyAgICAgIC0gVCBjb21tYW5kIGxpbmUgZmxhZyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgdHJhbnNwb3J0cworICAgICAgLSBBIG5ldyAnc25tcHRscycgY29tbWFuZCBmb3IgbWFuaXB1bGF0aW5nIHRoZSBhZ2VudCdzIFRMUyBjb25maWd1cmF0aW9uCisKKyAgICBhcHBzLCBzbm1wbGliOgorICAgICAgLSBbUEFUQ0ggMjgzNTU3N106IGlkZW50aWZpZWQgYnkgIkJhcnQgVmFuIEFzc2NoZSI6IFJlcGxhY2UgU05NUF9aRVJPCisJb2YgYXJyYXlzIHdpdGggYSBtZW1zZXQuCisKKyAgICBzbm1wdHJhbnNsYXRlOgorICAgICAgLSBmaXhlZCBwcmludGluZyBvZiByYW5nZXMgd2l0aCBVTlNJR05FRCB0eXBlLgogCiAgICAgYnVpbGQ6Ci0gICAgICAtIFtCVUcgMjA5NTk4M106IEZpeCBlcnJvcnMgaW4gZmluZC1yZXF1aXJlcyBoZWxwZXIgc2NyaXB0Ci0gICAgICAtIFtCVUcgMjc4MjcwMF06IEJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZyAtLXdpdGgtcGtjcyBvbiBTb2xhcmlzCi0gICAgICAtIFtQQVRDSCAyMTg0MDM5XTogTWlzYyBmaXhlcyBmb3IgZnJlZWluZyBtZW1vcnkKLSAgICAgIC0gW1BBVENIIDI5NTIwMjBdOiBTZXQgcGVybWlzc2lvbiBvbiB0ZXN0aW5nIGRpcmVjdG9yaWVzCi0gICAgICAtICdtYWtlIHRlc3QgVEVTVE9QVFM9Ii1QIHRjcCInIHdvcmtzIGZpbmUgbm93CisgICAgICAtIFtQQVRDSCAyOTUyMDIwXTogRXhwbGljaXRseSBzZXQgcGVybWlzc2lvbiBvbiB0ZW1wb3JhcnkgdGVzdGluZworCW91dHB1dCBkaXJlY3Rvcmllcy4gUGF0Y2ggcHJvdmlkZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvLgorICAgICAgLSBydW4gcnBtIGNvbmZpZ3VyZSBjaGVja3MgZm9yIGhyX3N3aW5zdCByZXdyaXRlIChycG0gdmVyc2lvbiBvbmx5KQorICAgICAgLSBEbyBub3QgY2FsbCB2YWNtX3N0YW5kYXJkX3ZpZXdzKCkgb3IgaW5pdF92YWNtX2NvbmZpZ190b2tlbnMoKSBpZgorCXRoZSBjb3JyZXNwb25kaW5nIG1vZHVsZSB3YXMgbm90IGNvbXBpbGVkIChmcm9tIERlYmlhbiBwYXRjaAorCTYxX3ZhY21fbWlzc2luZ19kZXBlbmRlbmN5X2NoZWNrKQorICAgICAgLSBGaXggaXB2NiBnZW5lcmljIGNhc2Ugc28gdGVzdCBtYXRjaGVzIHZlcmlmaWNhdGlvbgogCi0gICAgZG9jczoKLSAgICAgIC0gW1BBVENIIDI3ODgwNzJdOiBEb2N1bWVudCAnbG9nbWF0Y2gnIGZ1bmN0aW9uYWxpdHkuCi0gICAgICAtIFtQQVRDSCAyNzk1NzM5XTogRml4IGluY29ycmVjdCBkaXNrL2ZpbGUgc2l6ZSBkZXNjcmlwdGlvbnMgJiB1bml0IHNwZWNpZmllcnMKKyAgICBidWlsZGluZzoKKyAgICAgIC0gJ21ha2UgdGVzdCBURVNUT1BUUz0iLVAgdGNwIicgd29ya3MgZmluZSBub3cKKyAgICAgIC0gMCBJbiBjYXNlIGV4ZWNfcHJlZml4IGlzIHVuc2V0IHRoZW4gc2V0IGl0IHRvICcke3ByZWZpeH0nIGluIG9yZGVyCisJdG8gcGljayB1cCBvdmVycmlkZXMgb2YgJHByZWZpeCBpbiBtYWtlIGluc3RhbGwuCisgICAgICAtIEJ1aWxkaW5nIE5ldC1TTk1QIHdpdGggZG1hbGxvYyBzdXBwb3J0IGVuYWJsZWQgaXMgYWdhaW4gcG9zc2libGUuCisgICAgICAtIERvIG5vdCBsaW5rIHdpdGggbGlibmV0c25tcGhlbHBlcnMgYW55IG1vcmUgYXMgaXQgaXMgZW1wdHkuCisgICAgICAtIEZpeGVkIGNvbXBpbGF0aW9uIHdpdGggcnBtLTQuNi4gVHVybiBvbiB0aGUgbGVnYWN5IEFQSSB3aGVuIHJwbS00LjYKKwlpcyBkZXRlY3RlZC4KKyAgICAgIC0gSW50cm9kdWNlZCB0aGUgdmFyaWFibGUgJ3dpdGhfc29ja2xpYicgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisJVGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIndpbnNvY2syIiBmb3IgTWluR1cgYW5kIHRvICJkZWZhdWx0IiBmb3IKKwlhbGwgb3RoZXIgc3lzdGVtcy4gV2luc29jazIgdGVzdHMgYXJlIG9ubHkgcnVuIGlmIHRoaXMgdmFyaWFibGUgaXMKKwlzZXQgdG8gIndpbnNvY2syIiAoTWluR1cpLgorICAgICAgLSBPUyBoZWFkZXIgZGV0ZWN0aW9uIGNoZWNrIGlzIG5vdyBydW4gYmVmb3JlIElQdjYgc3RhY2sgZGV0ZWN0aW9uLgorICAgICAgLSBVc2UgQUNfUkVQTEFDRV9GVU5DUyB0byBoYW5kbGUgY29kZSB0aGF0IGlzIG1pc3Npbmcgb24gc29tZQorCXBsYXRmb3Jtcy4KKyAgICAgIC0gVXNlIGF1dG9jb25mIHRvIGRlY2lkZSBpZiBpbmV0X250b3AuYyBhbmQgaW5ldF9wdG9uLmMgYXJlIHRvIGJlCisJY29tcGlsZWQuCisgICAgICAtIFVzZSB0aGUgc2FtZSBjb21waWxlciBjb21tYW5kIGFuZCBmbGFncyBmb3IgYnVpbGRpbmcgb2YgdGVzdHMgYXMKKwlmb3IgYnVpbGRpbmcgb2YgdGhlIGNvZGUsIHRodXMgZW5hYmxpbmcgdGVzdCBvZiBlLmcuIDMyLWJpdCBjb2RlCisJY29tcGlsZWQgb24gYSA2NC1iaXQgcGxhdGZvcm0uCisgICAgICAtIGFib3J0IGlmIHRoZSBmaWxlIHByb2dyYW0gY291bGQgbm90IGJlIGZvdW5kLCBzaW5jZSB0aGlzIGlzCisJZXNzZW50aWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uIG9mIGxpYnRvb2wuCisgICAgICAtIGFkZGVkIGRldGVjdGlvbiBvZiBsbV9zZW5zb3JzIHZlcnNpb24uIEkgYW0gbm90IEF1dG9jb25mIGd1cnUsIHNvIEkKKwlob3BlIEkgZ290IGl0IHJpZ2h0LiBUaGUgZ29hbCBpcyB0byBkZWZpbmUgTkVUU05NUF9VU0VfU0VOU09SU19WMworCSpiZWZvcmUqIGNvbmZpZ19tb2R1bGVzX2FnZW50IHByb2Nlc3NlcworCWFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaC4KKyAgICAgIC0gbWFkZSBzdXJlIHRoYXQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZG9lcyBubyBsb25nZXIgaW52b2tlICJ0YWlsCisJLTEiLCB3aGljaCBpcyBub3QgUE9TSVgtY29tcGxpYW50LgorICAgICAgLSBzYXZlIGNvbmZpZ3VyZSBjYWNoZSBldmVyeSBvbmNlIGluIHdoaWxlCisgICAgICAtIHVwZGF0ZSBWZXJzaW9uLU11bmdlIGZvciByZW5hbWVkIGNvbmZpZ3VyZS5hYworICAgICAgLSB3aGVuIGdlbmVyYXRpbmcgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgc3lzdGVtIGxvY2F0aW9uIGFuZCBubworCWRvbWFpbiBuYW1lIGlzIGZvdW5kIGluIC9ldGMvcmVzb2x2LmNvbmYsIHVzZSAiQG5vLndoZXJlIiBpbnN0ZWFkCisJb2YgIiIuCisgICAgICAtIEFkZCBuZXcgdGVzdCogZW50cmllcyBmcm9tIHRoZSB0ZXN0aW5nIE1ha2VmaWxlLmluIHRvIHRoZSB0b3AtbGV2ZWwKKwlNYWtlZmlsZS5pbgorCisgICAgYnVpbGRpbmcsIFdpbjMyOgorICAgICAgLSBSZW1vdmUgYSBmZXcgdW51c2VkIGNvbmZpZ3VyZSBzeW1ib2xzCisKKyAgICBocHV4OgorICAgICAgLSBmaXggYnVpbGQgZXJyb3Igb24gSFAtVVggMTAuMjAKKworICAgIGxpYm5ldHNubXA6CisgICAgICAtIFN1cHBvcnQgZm9yIGEgc3RyZWFtLWxpbmUgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGludGVybmFsIE9wZW5TU0wKKwlzdXBwb3J0IHVzaW5nIC0td2l0aC1vcGVuc3NsPWludGVybmFsCisKKyAgICBsaWJuZXRzbm1wYWdlbnQsIGxpYm5ldHNubXBoZWxwZXJzOgorICAgICAgLSBtb3ZlZCB0aGUgZnVuY3Rpb25zIG5ldHNubXBfYnVsa190b19uZXh0X2ZpeF9yZXF1ZXN0cygpLAorCW5ldHNubXBfZ2V0X2J1bGtfdG9fbmV4dF9oYW5kbGVyKCksIG5ldHNubXBfcmVnaXN0ZXJfbnVsbCgpLAorCW5ldHNubXBfcmVnaXN0ZXJfbnVsbF9jb250ZXh0KCkgYW5kIG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpIGZyb20KKwlsaWJuZXRzbm1waGVscGVycyB0byBsaWJuZXRzbm1wYWdlbnQuIE5vdGVzOiAtIFRoaXMgZG9lcyBub3QgYWZmZWN0CisJYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGFwcGxpY2F0aW9ucyB0aGF0IGxpbmsgd2l0aAorCSQobmV0LXNubXAtY29uZmlnIC0tYWdlbnQtbGlicykgc2luY2UgdGhpcyBpbnZvbHZlcyBsaW5raW5nIHdpdGgKKwlib3RoIGxpYm5ldHNubXBoZWxwZXJzIGFuZCBsaWJuZXRzbm1wYWdlbnQuIC0gRnVuY3Rpb25zIGhhdmUgYmVlbgorCW1vdmVkIGJldHdlZW4gbGlicmFyaWVzIGJ5IG1vdmluZyBlbnRpcmUgc291cmNlIGZpbGVzLgorCisgICAgbGlicmFyeToKKyAgICAgIC0gW1BBVENIIDI5NTIxNDBdOiBPdmVyZmxvdyBjb3VudGVyMzIgYW5kIGdhdWdlMzIgb24gNjRiaXQgc3lzdGVtcworCWNvcnJlY3RseSBQYXRjaCBwcm92aWRlZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8KKworICAgIGxpYnNubXA6CisgICAgICAtIGNoYW5nZWQgdGhlIHR5cGUgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBvZiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkKKwlmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2ggdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuCisJcGFzc2luZyBhbm90aGVyIGRhdGF0eXBlIHRoZW4gY2hhciogb3IgY29uc3QgY2hhciouCisKKyAgICBtYW46CisgICAgICAtIFtCVUcgMjk3Mjg2MF06IFVwZGF0ZSBicm9rZW4gcmVmZXJlbmNlcwogCiAgICAgbWliMmM6Ci0gICAgICAtIFtCVUcgMjgyNzI2OV06IFN1cHByZXNzIG5vbi1vcmRlcmVkIFRPRE8gY29tbWVudHMKKyAgICAgIC0gUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzIHRvIHVfY2hhcioKICAgICAgIC0gW0JVRyAyODg4NTY5XTogRml4IGdlbmVyYXRpb24gb2YgdGFibGUgY29sdW1ucyBhcnJheQotICAgICAgLSBbUEFUQ0ggMjEzNjQzN106IEltcHJvdmUgNjQtYml0IGhhbmRsaW5nIG9mIGxhcmdlIHRhYmxlIEZMQUcgZGVmaW5lcyAKLSAgICAgIC0gW1BBVENIIDIzMTYxMjddOiBGaXggYnVnIGluIGl0ZXJhdGVfYWNjZXNzIGdlbmVyYXRlZCBjb2RlLgorICAgICAgLSBtaWIyYyBjYW4gbm93IG9wdGlvbmFsbHkgcnVuIHNlZCBvbiBnZW5lcmF0ZWQgY29kZQorICAgICAgLSB0YWJsZV9kYXRhIHRlbXBsYXRlIGVuaGFuY2VtZW50cyAtIGFkZCBlcnJvciBjaGVja3MgZHVyaW5nIHRhYmxlCisJaW5pdCAtIGNyZWF0ZSBjYWNoZSBlYXJsaWVyIHNvIHdlIGNhbiBiYWlsIG9uIGZhaWx1cmUgLSBhZGQgb3B0aW9uCisJdG8gY3JlYXRlL2RlbGV0ZSByb3cgdy9vdXQgYWRkaW5nL3JlbW92aW5nIGZyb20gY29udGFpbmVyCisgICAgICAtIHVwZGF0ZSBpbmxpbmUgZG9jdW1lbnRhdGlvbjsgYWRkIHN0b3JhZ2V0eXBlIHRlc3QgZm9yIGNvbHVtbnMKIAogICAgIG1pYnM6CiAgICAgICAtIFtCVUcgMjk3Mzg5MF06IEZpeCBpbXBvcnRzLCBEaXNrSU9FbnRyeSBsaXN0IGFuZCByZXZpc2lvbiBoaXN0b3JpZXMKKyAgICAgIC0gcGF0Y2ggMjk3NDcxNjogZnJvbSBidmFzc2NoZTogZml4IGlzc3VlcyBpbiB0aGUgU01VWC1NSUIKKworICAgIG1pc2M6CisgICAgICAtIFtQQVRDSCAyODM2MTEyXTogVXNlIHRoZSByaWdodCBtb2RpZmllciB3aGVuIHByaW50aW5nIHNpemVfdCBhbmQKKwlzc2l6ZV90IHZhcmlhYmxlcy4KKyAgICAgIC0gW1BBVENIIDI5NTI3MDhdOiBPc3RlcmthbXA6IEFkZGVkIFBlcmwgaW1wbGVtZW50YXRpb24gb2YgQlJJREdFLU1JQgogCiAgICAgcGVybDoKLSAgICAgIC0gW0JVRyAxNTU0ODE3XTogRml4IGNsYXNzIGFzc2lnbWVudCBzbyBnZXRSb290T0lEIHdvcmtzIHByb3Blcmx5Ci0gICAgICAtIFtQQVRDSCAyMDIyOTQ4XTogRml4IGZvciBDb3VudGVyNjQgaW4gcGVybCBzdWJhZ2VudAotICAgICAgLSBbUEFUQ0ggMjE4MjA3OV06IEZpeCB2YXJpb3VzIHdhcm5pbmdzICYgYWxsb3cgdXNlIG9mICJ1c2Ugc3RyaWN0IgotICAgICAgLSBbUEFUQ0ggMjM2MTcxMl06IEZpeCBnZXRidWxrIG9wdGltaXphdGlvbiBkdXJpbmcgd2Fsa3MKLSAgICAgIC0gW1BBVENIIDI3OTM4NTddOiBSZXBvcnQgZmFpbGVkIGFzeW5jaHJvbm91cyByZXF1ZXN0cwotICAgICAgLSBbUEFUQ0ggMjg5MDkzMV06IEJldHRlciBoYW5kbGluZyBvZiBDb3VudGVyNjQgdmFsdWVzLgorICAgICAgLSBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHI6OmdldFZhbHVlKCk6IGRvbid0IHJldHVybiBhCisJcG9pbnRlciB0byBhIGJ1ZmZlciBvbiB0aGUgc3RhY2suIEhvdyBjYW4gdGhpcyBoYXZlIHdvcmtlZCByZWxpYWJseQorCT8/IE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX3JlcXVlc3RfaW5mb1B0cjo6c2V0VmFsdWUoKSwKKwlBU05fQ09VTlRFUjY0OiBmaXhlZCBidWcgdGhhdCBjb3VsZCBjYXVzZSB0aGlzIG1ldGhvZCB0byBmYWlsIGV2ZW4KKwl3aGVuIGEgdmFsaWQgbnVtYmVyIHdhcyBwcm92aWRlZC4KKyAgICAgIC0gW1BBVENIIDI4OTA5MzFdOiBCZXR0ZXIgaGFuZGxpbmcgb2YgQ291bnRlcjY0IHZhbHVlcy4gUGF0Y2gKKwlwcm92aWRlZCBieSBNYXggUm9tYW5vdi4KKyAgICAgIC0gZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZGVzdHJveWluZyBhCisJTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gb2JqZWN0LgorICAgICAgLSBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBkZXN0cm95aW5nIGEKKwlOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBvYmplY3QuIGZpeGVkIGEgbWVtb3J5CisJbGVhayB0cmlnZ2VyZWQgYnkgZmFpbHVyZSBvZiBjcmVhdGluZyBhIE5ldFNOTVA6Ok9JRCBvYmplY3QuCisgICAgICAtIGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGRlc3Ryb3lpbmcgYQorCU5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdC4gZml4ZWQgYSBtZW1vcnkKKwlsZWFrIHRyaWdnZXJlZCBieSBmYWlsdXJlIG9mIGNyZWF0aW5nIGEgTmV0U05NUDo6T0lEIG9iamVjdC4gZml4ZWQKKwlhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSB0aGUgTmV0U05NUDo6T0lEOjpnZXR0YWJsZSgpIHN1YnJvdXRpbmUuCisgICAgICAtIGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGRlc3Ryb3lpbmcgYQorCU5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdC4gZml4ZWQgYSBtZW1vcnkKKwlsZWFrIHRyaWdnZXJlZCBieSBmYWlsdXJlIG9mIGNyZWF0aW5nIGEgTmV0U05NUDo6T0lEIG9iamVjdC4gZml4ZWQKKwlhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSB0aGUgTmV0U05NUDo6T0lEOjpnZXR0YWJsZSgpIHN1YnJvdXRpbmUuCisJZml4ZWQgYW4gb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MgdHJpZ2dlcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbgorCW9mIE5ldFNOTVA6OlNOTVAuIGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGEgUERVIHByb2Nlc3NpbmcKKwllcnJvciBpbiBOZXRTTk1QOjpTTk1QLiBmaXhlZCBtZW1vcnkgbGVha3MgdHJpZ2dlcmVkIGJ5IGNyZWF0aW5nIGFuCisJU05NUHYzIHNlc3Npb24gdmlhIE5ldFNOTVA6OlNOTVAuIEFsc28gZml4ZWQgdGhlIHVuaW5pdGlhbGl6ZWQKKwl2YXJpYWJsZSBhY2Nlc3NlcyB0cmlnZ2VyZWQgYnkgYWRkaW5nIGEgdmFyYmluZCB0byBhIFBEVSB2aWEKKwlOZXRTTk1QOjpTTk1QIGludHJvZHVjZWQgYSBmZXcgZGF5cyBhZ28uIFRoZSBidWdzIG1lbnRpb25lZCBhYm92ZQorCWhhdmUgYmVlbiBmb3VuZCBieSBpbnNwZWN0aW5nIHRoZSBvdXRwdXQgb2YgdGhlIGZvbGxvd2luZyBzaGVsbAorCWNvbW1hbmQ6IGNkIHBlcmwgJiYgdmFsZ3JpbmQgLS10cmFjZS1jaGlsZHJlbj15ZXMgLS1sZWFrLWNoZWNrPWZ1bGwKKwltYWtlIHRlc3QKIAogICAgIHB5dGhvbjoKLSAgICAgIC0gW0JVRyAyMjU4OTM1XTogUHl0aG9uIEV4dGVuc2lvbiBNb2R1bGUgZmFpbHMgb24gU29sYXJpcwotICAgICAgLSBbQlVHIDI5MTkzNzldOiBJbml0aWFsaXNlIFNOTVAgc2Vzc2lvbnMgcHJvcGVybHkKLSAgICAgIC0gW1BBVENIIDIwNzQ4MTddOiBGaXggcmVnZXhwIGVuZ2luZSBDUFUgcGVyZm9ybWFuY2UgaXNzdWVzCi0gICAgICAtIFtQQVRDSCAyMjYwODI4XTogRml4IHB5dGhvbiBzbm1wd2FsayBtZW1vcnkgbGVhawotICAgICAgLSBbUEFUQ0ggMjU4MDk3OV06IEZpeCBweXRob24gc2Vzc2lvbiBwb2ludGVycyBvbiA2NC1iaXQgc3lzdGVtcwotICAgICAgLSBbUEFUQ0ggMjY2NzQxNV06IFN1cHBvcnQgIlVzZU51bWVyaWMiIG9wdGlvbgotICAgICAgLSBTdXBwb3J0IG51bGwtYnl0ZXMgaW4gb2N0ZXQgc3RyaW5ncworICAgICAgLSBbQlVHIDI5MTkzNzldOiBJbml0aWFsaXNlIFNOTVAgc2Vzc2lvbnMgcHJvcGVybHkgUHJvdmlkZWQgYnkgRGllZ28KKwlCaWxsaQorICAgICAgLSBbUEFUQ0ggMjAwMTY1Nl06IEhhbmRsZSBudWxsLXRlcm1pbmF0aW9uIG9mIHN0cmluZyB2YWx1ZXMgcHJvcGVybHkuCisJQmFzZWQgb24gdGhlIHByaW5jaXBsZXMgb2YgdGhlIHBhdGNoIGZyb20gVG9tbXkgQmVhZGxlLgorICAgICAgLSBTdXBwb3J0IG51bGwtYnl0ZXMgaW4gb2N0ZXQgc3RyaW5ncyBQYXRjaCBzdXBwbGllZCBieSBUb21teSBCZWFkbGUKKyAgICAgIC0gW1BBVENIIDMwMzUzMjhdOiBmcm9tOiBzd3M6IGNoZWNrIHRoZSByZXN1bHRzIG9mIHNlc3Npb24gY3JlYXRpb24KKwlmb3IgYSBmYWlsdXJlIGNhc2UuCisgICAgICAtIHBhdGNoIDMwMzU1Nzg6IGZyb20gc3dzOiBrZWVwIGVycm9yIGNvZGVzIHVwIHRvIGRhdGUKIAorICAgIHRlc3Rpbmc6CisgICAgICAtIEJyYW5kIG5ldyB0ZXN0IHN1aXRlIGRlc2lnZW5lZCB0byBldmVudHVhbGx5IHRlc3QgbW9yZQorCWZ1bmN0aW9uYWxpdHksIHByb3ZpZGUgZm9yIHN1cHBvcnQgb2YgdW5pdC10ZXN0cyBhbmQgc3VwcG9ydCBvZiBBUEkKKwl0ZXN0cworICAgICAgLSBDaGFuZ2UgdGhlIHRlc3Qgc3VpdGUgdG8gd29yayBldmVuIGlmIG1pYiBsb29rdXAgaXMgZGlzYWJsZWQuCisgICAgICAtIENoZWNrIHRoZSBzaXplIG9mIHN1bl9wYXRoIGFuZCB1c2UgdGhhdCB0byBnZW5lcmF0ZSB0aGUgbWF4aW1hbAorCXNpemUgc3RyaW5ncyBmb3Igc3RyZXNzaW5nIGNvbTJzZWN1bml4LgorICAgICAgLSBNYWtlIGl0IHBvc3NpYmxlIHRvIHJ1biB0aGUgdGVzdCBzdWl0ZSBmcm9tIGFueXdoZXJlLiBDaGFuZ2UgdGhlIC1ECisJb3B0aW9uIHRvIGV4cGVjdCB0aGUgcGF0aCBvZiB0aGUgdG9wIHNvdXJjZSBkaXJlY3RvcnkuIEFkZCBhbgorCS1zcmNkaXIgb3B0aW9uIHRoYXQgaXMgYW4gYWxpYXMgZm9yIC1ELiBBZGQgYW4gLWJ1aWxkZGlyIG9wdGlvbiB0bworCWRlc2lnbmF0ZSB0aGUgZGlyZWN0b3J5IHdoZXJlIHRoZSB0ZXN0IG9iamVjdCBpcy4gUHV0IHNyY2RpciBhbmQKKwlidWlsZGRpciBpbiB0aGUgZW52aXJvbm1lbnQgZm9yIHRoZSB0ZXN0IHNjcmlwdHMgRmFjdG9yIG91dCB0aGUKKwlncmVwIHBhcnQgb2YgU0tJUElGIGFuZCBTS0lQSUZOT1QgdG8gSVNERUZJTkVEIFVzZSBtb3JlIHJlYWRhYmxlCisJa2V5cyBpbiB0aGUgb3B0cyBoYXNoIGluIFJVTkZVTExURVNUUyBBZGp1c3QgZXZlcnl0aGluZyB0byB1c2UKKwlzcmNkaXIgYW5kIGJ1aWxkZGlyCisgICAgICAtIE1vdmUgdGhlIHNldHRpbmcgb2YgTUlCRElSUyBmcm9tIHRoZSBzdXBwb3J0IHNjcmlwdCB0byB0aGUgZHJpdmVycworCXNpbmNlIGl0IGlzIG5lZWRlZCBmb3IgdGhlIEMgdGVzdHMgYXMgd2VsbC4KKyAgICAgIC0gVXNlIG9sZHVjZF9ydW4sIG5vdCBydW5fb2xkdWNkLiBDaGFuZ2Ugc3JjZGlyIHRvIHJlZmVyIHRvIHRoZSB0b3AKKwlkaXJlY3RvcnkgYW5kIG5vdCB0aGUgdGVzdGluZyBzdWJkaXJlY3RvcnkgYXMgdGhhdCBpcyB3aGF0IGlzCisJZXhwZWN0ZWQgaW4gdGhlIHRlc3Qgc2NyaXB0cy4KKyAgICAgIC0gYWRkIHRoZSB0ZXN0IG5hbWUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlICJpbnZva2VkIi4KKyAgICAgIC0gbWFkZSBpdCBwb3NzaWJsZSB0byBhbmFseXplIGFsbCBjb2RlIGNvdmVyZWQgYnkgdGhlIHJlZ3Jlc3Npb24KKwl0ZXN0cyB3aXRoIGEgZHluYW1pYyBhbmFseXplciwgYXQgbGVhc3QgaWYgdGhhdCBhbmFseXplciBzdXBwb3J0cworCWZvbGxvd2luZyBjaGlsZCBwcm9jZXNzZXMuIEFuIGV4YW1wbGU6CSBybSAtcmYgL3RtcC9zbm1wLXRlc3QtKgorCW1ha2UgLXMgU05NUF9TQVZFX1RNUERJUj15ZXMgRFlOQU1JQ19BTkFMWVpFUj0idmFsZ3JpbmQKKwktLXRyYWNlLWNoaWxkcmVuPXllcyAtLXRyYWNrLW9yaWdpbnM9eWVzIiBtYWtlIC1zIHRlc3QgZ3JlcCAtaQorCXVuaW5pdGlhbGlzZWQgL3RtcC9zbm1wLXRlc3QtKiB8IHhhcmdzIGxlc3MKIAotICAgIEFJWDoKLSAgICAgIC0gW0JVRyAyNzEyNjcwXTogQWdlbnQgY3Jhc2hlcyBvbiBBSVggd2l0aCBoclN0b3JhZ2UKKyAgICB1bnNwZWNpZmllZDoKKyAgICAgIC0gQ2hhbmdlIHRoZSB0eXBlcyBvZiB0aGUgcmV0dXJuIHZhbHVlcyBvZiBuZXRzbm1wXypfZ2V0U2VjTmFtZSBmcm9tCisJY2hhciogdG8gY29uc3QgY2hhciogc2luY2UgdGhleSBwb2ludCBpbnRvIGludGVybmFsIHN0cnVjdHVyZXMuCisgICAgICAtIEhpZGUgbW9zdCBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcyBpbiB0aGUgbG9nbWF0Y2ggbW9kdWxlLiBDbGVhbmVkCisJdXAgdGhlIGhlYWRlciBhY2NvcmRpbmdseS4gUmVtb3ZlIHRoZSBuZWVkIGZvciBmb3J3YXJkIGRlY2xhcmF0aW9ucworCWJ5IHJlb3JkZXJpbmcgdGhlIGZ1bmN0aW9ucy4KKyAgICAgIC0gTWFrZSB0aGUgbGlzdHMgb2YgY29tMlNlYypFbnRyaWVzIHN0YXRpYworICAgICAgLSBbQlVHIDI4MzgyNDNdOiBDb3JyZWN0IHRoZSBvdXRwdXQgb2YgdW5zaWduZWQgdmFsdWVzLiBUaGFua3MgdG8KKwlKYWNrIEh1YW5nIG9mIFF1YWxjb21tIHdobyBwb2ludGVkIG91dCB0aGlzIGJ1Zy4KKyAgICAgIC0gW0JVRyAyOTY5ODcyXTogbWFkZSBzdXJlIHRoYXQgU09DS19TVEFSVFVQIGlzIGludm9rZWQgYmVmb3JlCisJaW5pdF9hZ2VudCgpIG9uIFdpbmRvd3MuCisgICAgICAtIFtCVUcgMjk3MTI1N106IEZpeGVkIHdpbkV4dERMTCBoYW5kbGluZyBvZiBtdWx0aS12YXJiaW5kIGdldE5leHQKKwlyZXF1ZXN0cyB3aXRoIE9JRHMgaW4gcmV2ZXJzZSBsZXhpY29ncmFwaGljYWwgb3JkZXIuCisgICAgICAtIFtQQVRDSCAyOTI2Mzc0XTogZnJvbSBFZCBTd2llcms6IGZpeGVkIHJlYWRpbmcgb2YgaXBBZGRyZXNzVGFibGUKKwlmcm9tIC9wcm9jL25ldC9pZl9pbmV0NiBvbiBMaW51eCBUaGUga2VybmVsIG1pZ2h0IHByb3ZpZGUgbG9uZ2VyCisJZmllbGRzLCBlc3BlY2lhbGx5IG9uIDY0LWJpdCBzeXN0ZW1zLgorICAgICAgLSBbUEFUQ0ggMjk1MjAzNF06IFJldHVybiBvZiB0aGUgR3JlYXQgU3VTRSAnc3ByaW50ZicgSHVudC4uLiBQYXRjaAorCXN1cHBsaWVkIGJ5IExlb25hcmRvIENoaXF1aXR0bworICAgICAgLSBhZGQgZnVuY3Rpb25zIHRvIGdldCBmaW5nZXJwcmludCBmcm9tIGNlcnQgYW5kIGxvZyBvcGVuc3NsIGVycnMKKyAgICAgIC0gYWRkZWQgYSBuZXcgREVCVUdUUkFDRVRPSygpIG1hY3JvCisgICAgICAtIGNvcnJlY3RseSBjYWxjdWxhdGUgaWZYVGFibGUuaWZIQ0luVWNhc3RQa3RzIG9uIDMyLWJpdCBMaW51eCBMaW51eAorCWRvZXMgbm90IHByb3ZpZGUgc3RhbmRhbG9uZSBjb3VudGVyIGZvciBpbmNvbWluZyB1bmljYXN0IHBhY2tldHMKKwkoaXVjYXN0KSAtIGl0IHByb3ZpZGVzIGNvdW50ZXIgb2YgYWxsIHBhY2tldHMgKGlhbGwpICsgc2VwYXJhdGUKKwljb3VudGVyIGZvciB0aGUgbXVsdGljYXN0IG9uZXMgKGltY2FzdCkuIFByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mCisJaWZUYWJsZSByZWFkIHRoZXNlIGNvdW50ZXJzIGFuZCBjYWxjdWxhdGVkIGl1Y2FzdCA9IGlhbGwgLSBpbWNhc3QKKwkqYmVmb3JlKiB0aGVzZSB2YWx1ZXMgd2VyZSBleHBhbmRlZCBpbnRvIDY0Yml0cy4gVGhpcyBwcm9kdWNlZAorCWVycm9ycyBvbiAzMmJpdCBzeXN0ZW1zIHdoZW4gaWFsbCBvdmVyZmxvd2VkIHRvIHplcm8gYW5kIGltY2FzdCB3YXMKKwlub3plcm8gLT4gaXVjYXN0IGdvdCBuZWdhdGl2ZSBhbmQgJ2M2NCAzMiBiaXQgY2hlY2sgZmFpbGVkJyBlcnJvcgorCWluIHNubXBkIGxvZy4gTm93IHRoZSBhZ2VudCBleHBhbmRzIHRoZXNlIHZhbHVlcyB0byA2NGJpdHMgZmlyc3QKKwlhbmQgKgkgICp0aGVuKiBwZXJmb3JtcyAgICB0aGUgY2FsY3VsYXRpb24sIHVzaW5nIGEgbmV3IGZsYWcuIAorCTIwMTAtMDUtMjcgMDg6MTggIG1hZ2ZyCisgICAgICAtIGZpeGVkIG1lbW9yeSBsZWFrIGluIFJNT04tTUlCIGFuZCBFVEhFUkxJS0UtTUlCIHdoZW4gdGhlcmUgYXJlCisJbXVsdGlwbGUgYWxpYXNlcyBvZiBhbiBuZXR3b3JrIGludGVyZmFjZSBSYXRpb25hbGU6IHRoZSBhbGlhc2VkCisJaW50ZXJmYWNlcyBoYXZlIHRoZSBzYW1lIGlmSW5kZXggLT4gQ09OVEFJTkVSX0lOU0VSVCBmYWlscywgYnV0IHRoZQorCXJlamVjdGVkIGVudHJ5IHdhcyBub3QgZnJlZWQuCisgICAgICAtIGdlbmVyYXRlIHRoZSB0cmFuc3BvcnQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gbGlzdCBkeW5hbWljYWxseSBhbmQKKwl1c2UgaXQKKyAgICAgIC0gbW92ZWQgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGxpYm5ldHNubXBoZWxwZXJzIHRvCisJbGlibmV0c25tcGFnZW50LiBsaWJuZXRzbm1waGVscGVycyBpcyBub3cgYW4gZW1wdHkgbGlicmFyeS4KKyAgICAgIC0gbW92ZWQgdHJhbnNwb3J0IGNvZGUgaW50byBhIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbiBzbm1wbGliCisgICAgICAtIFtCVUcgMzAyNzkwMF06IHdoZW4gY3Jvc3MtY29tcGlsaW5nIGl0IGlzIG5vdyBhc3N1bWVkIHRoYXQgbWVtY21wKCkKKwlpcyBhdmFpbGFibGUgaW5zdGVhZCBvZiBhc3N1bWluZyB0aGF0IGl0IGlzIG5vdCBhdmFpbGFibGUuCisgICAgICAtIERvIG5vIGRvdWJsZSBkZWNsYXJlIHRoZSBpbmRleCB2YWx1ZXMuCisgICAgICAtIEhhbmRsZSBlbWJlZGRlZCAlJ3MgaW4gdGhlIHJlc3VsdCBtZXNzYWdlLgorICAgICAgLSBpbGVuY2Ugc29tZSBjb21waWxhdGlvbiB3YXJuaW5ncyBmcm9tIHRlc3QgY2FzZXMuCiAKLSAgICAqQlNEOgotICAgICAgLSBbUEFUQ0ggMjQzNTc5M106IFN1cHBvcnQgNjQtYml0IElGLU1JQiBjb3VudGVycyBvbiBzeXNjdGwgc3lzdGVtcwotICAgICAgLSBGaXggYSBtYWtlIHRlc3QKLQotICAgIEhQLVVYOgotICAgICAgLSBbQlVHIDI3Nzk0NzJdOiBGaWxlc3lzdGVtcyBtaXNzaW5nIGluIGhyU3RvcmFnZSB0YWJsZSAoSFAtVVggMTEuMzEpCi0gICAgICAtIFtQQVRDSCAyMDg4NzI2XTogRml4IGFuIGlzc3VlIHJlcG9ydGluZyBuZWdhdGl2ZSBtZW1vcnkgdmFsdWVzCisgICAgQ3lnd2luOgorICAgICAgLSBJUHY2IGlzIG9ubHkgc3VwcG9ydGVkIHVuZGVyIEN5Z3dpbiAxLjcgb3IgbGF0ZXIuIFRoZSBvbGQKKwlpbXBsZW1lbnRhdGlvbiBvZiBJUHY2IHN1cHBvcnQgaW4gTmV0LVNOTVAgdW5kZXIgQ3lnd2luIGludm9sdmVkIGEKKwlzdHJhbmdlIG1peHR1cmUgb2YgQ3lnd2luIGFuZCBXaW5zb2NrMiBzb2NrZXQgY2FsbHMsIHdoaWNoIHdhcyB0b28KKwloYXJkIHRvIG1haW50YWluLgorICAgICAgLSBJUHY2IGlzIG9ubHkgc3VwcG9ydGVkIHVuZGVyIEN5Z3dpbiAxLjcgb3IgbGF0ZXIuIFRoZSBvbGQKKwlpbXBsZW1lbnRhdGlvbiBvZiBJUHY2IHN1cHBvcnQgaW4gTmV0LVNOTVAgdW5kZXIgQ3lnd2luIGludm9sdmVkIGEKKwlzdHJhbmdlIG1peHR1cmUgb2YgQ3lnd2luIGFuZCBXaW5zb2NrMiBzb2NrZXQgY2FsbHMsIHdoaWNoIHdhcyB0b28KKwloYXJkIHRvIG1haW50YWluLiBidWlsZHMgYWdhaW4gd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZAorCSgtLWVuYWJsZS1pcHY2KS4gQXQgbGVhc3QgTmV0LVNOTVAgNS41IGRvZXNuJ3QgYnVpbGQgdW5kZXIgQ3lnd2luCisJd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZC4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmVwb3J0ZWQgImNoZWNraW5nCisJaXB2NiBzdGFjayB0eXBlIC4uLiByZXN1bHQ6ICJ1bmtub3duLCBubyIgLi4uIGVycm9yOiBJUHY2CisJdHJhbnNwb3J0cyBub3QgYXZhaWxhYmxlIGlmIElQdjYgc3VwcG9ydCBpcyBub3QgZW5hYmxlZCIuCisgICAgICAtIFtCVUcgMjkzOTE2OF06IGJ5dGUgb3JkZXIgb2YgdWRwTG9jYWxQb3J0IGlzIG5vdyBjb3JyZWN0LgorICAgICAgLSBbQlVHIDI5MzkxNjhdOiBmaXhlZCB0ZXN0IGluZnJhc3RydWN0dXJlICgibWFrZSB0ZXN0IikuIFRoaXMgaGFzCisJYmVlbiBmaXhlZCBieSB1c2luZyB0aGUgcHJvcGVyIGVudmlyb25tZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIgYW5kCisJYnkgYWRkaW5nIHRoZSBwYXRoIG9mIHRoZSBuZXRzdGF0IGV4ZWN1dGFibGUgZm9yIEN5Z3dpbiBpbgorCXRlc3RpbmcvVEVTVENPTkYuc2guCisgICAgICAtIGFib3J0IGlmIHRoZSBmaWxlIHByb2dyYW0gY291bGQgbm90IGJlIGZvdW5kLCBzaW5jZSB0aGlzIGlzCisJZXNzZW50aWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uIG9mIGxpYnRvb2wuIG5laXRoZXIgY29tcGlsZSBub3IgbGluaworCXdpbnBpcGUuYy4KKyAgICAgIC0gYnVpbGRpbmcgd2l0aCBhbm90aGVyIE9wZW5TU0wgcGFja2FnZSB0aGFuIHRoZSBDeWd3aW4tcHJvdmlkZWQKKwlwYWNrYWdlcyBvcGVuc3NsIGFuZCBvcGVuc3NsLWRldmVsIGlzIGFnYWluIHBvc3NpYmxlLgorICAgICAgLSBidWlsZHMgbm93IGFsc28gd2hlbiB0aGUgc291cmNlIGZpbGVzIGFyZSBsb2NhdGVkIG9uIGEgU2FtYmEKKwlmaWxlc3lzdGVtIGluc3RlYWQgb2YgYSBsb2NhbCBmaWxlc3lzdGVtLgorICAgICAgLSBlbmFibGVkIFVuaXggdHJhbnNwb3J0LiAoRm9yd2FyZC1wb3J0ZWQgcjE4Njg3IGZyb20gdGhlIFY1LjUKKwlicmFuY2gpLgorICAgICAgLSBsaWJuZXRzbm1wIGRvZXMgbm93IGJ1aWxkIGFzIGEgRExMIHdoZW4gY29uZmlndXJlZCB3aXRoCisJLS1lbmFibGUtc2hhcmVkLgorICAgICAgLSBsaWJuZXRzbm1wIGRvZXMgbm93IGJ1aWxkIGFzIGEgRExMIHdoZW4gY29uZmlndXJlZCB3aXRoCisJLS1lbmFibGUtc2hhcmVkLiBwZXJsIG1vZHVsZXMgZG8gbm93IGJ1aWxkICgtLXdpdGgtcGVybC1tb2R1bGVzKS4KKwlOb3RlOiB0aGUgVDA2MHRyYXBkcGVybF9vbGR1Y2QsIFQwNjFhZ2VudHBlcmxfb2xkdWNkIGFuZAorCVQxMTVhZ2VudHhwZXJsX29sZHVjZCB0ZXN0cyBzdGlsbCBmYWlsLgorICAgICAgLSBsaWJuZXRzbm1wbWlicywgbGlibmV0c25tcGhlbHBlcnMgYW5kIGxpYm5ldHNubXBhZ2VudCBkbyBub3cgYnVpbGQKKwlhcyBhIERMTCB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLWVuYWJsZS1zaGFyZWQuCisgICAgICAtIHBlcmw6IGJ1aWxkaW5nIHRoZSBQZXJsIG1vZHVsZXMgd2l0aCB0aGUgQ3lnd2luIFBlcmwgcGFja2FnZSBpcyBub3cKKwlwb3NzaWJsZS4gKEZvcndhcmQtcG9ydGVkIHIxODY4OCBmcm9tIHRoZSBWNS41IGJyYW5jaC4pCisgICAgICAtIHRoZSBtZXNzYWdlICJjb25maWd1cmU6IFdBUk5JTkc6IHdpbnNvY2suaDogcHJlc2VudCBidXQgY2Fubm90IGJlCisJY29tcGlsZWQiIGRvZXMgbm8gbG9uZ2VyIGFwcGVhciB3aGVuIHJ1bm5pbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisJRm9sbG93LXVwIGZvciByMTgwNTA6IHJlLWVuYWJsZWQgbGliaXBobHBhcGkgYW5kIGlwaGxwYXBpLmggdGVzdHMKKwlmb3Igbm9uLU1pbkdXIHBsYXRmb3JtcyBzaW5jZSB0aGUgQ3lnd2luIGJ1aWxkIG5lZWRzIHRoZXNlLgorICAgICAgLSBjb3JyZWN0ZWQgZXJyb3IgaGFuZGxpbmcgaW4gbWliSUkvYXQuCiAKICAgICBMaW51eDoKLSAgICAgIC0gW0JVRyAyODIyMzU1XTogRml4IG1lbW9yeSBsZWFrcyBvbiB1ZHBFbmRwb2ludFRhYmxlCi0gICAgICAtIFtQQVRDSCAyOTI2Mzc0XTogRml4IC9wcm9jL25ldC9pZl9pbmV0NiByZWFkaW5nIG9mIGlwQWRkcmVzc1RhYmxlCi0gICAgICAtIEZpeCBidWlsZCBvbiBtb2Rlcm4gZGlzdHJpYnV0aW9ucyAodXNpbmcgcnBtLTQuNikKLSAgICAgIC0gZml4IHJhcmUgcmFjZSBjb25kaXRpb24gd2hlbiByZWFkaW5nIFJQTSBkYXRhYmFzZQorICAgICAgLSBJbXByb3ZlZCBFdGhlckxpa2UtTUlCIHN1cHBvcnQgUGF0Y2ggc3VwcGxpZWQgYnkgSm9zZWYgTW9lbGxlcnMKKyAgICAgIC0gYnVpbGRzIGFnYWluIHdpdGggZW1iZWRkZWQgUGVybCBkaXNhYmxlZCAoYnVnIDI5ODU5MTUpLgorCisgICAgTWluR1c6CisgICAgICAtIGJ1aWxkaW5nIHdpdGggYW5vdGhlciBPcGVuU1NMIHBhY2thZ2UgdGhhbiB0aGUgQ3lnd2luLXByb3ZpZGVkCisJcGFja2FnZXMgb3BlbnNzbCBhbmQgb3BlbnNzbC1kZXZlbCBpcyBhZ2FpbiBwb3NzaWJsZS4gYnVpbGRpbmcgd2l0aAorCU9wZW5TU0wgd29ya3MgYWdhaW4uCisgICAgICAtIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBpcyBhZ2FpbiBwb3NzaWJsZSAoJ21ha2UgdGVzdCcpLgorICAgICAgLSBzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWQgY29uZmlndXJlIHRlc3QgZG9lcyBub3cgd29yay4KKyAgICAgIC0gd2luRXh0RExMIGNvbXBpbGVzIG5vdyB1bmRlciBNaW5HVy4gYnVpbGRpbmcgTmV0LVNOTVAgd29ya3MgYWdhaW4uCisJRGV0YWlsZWQgb3ZlcnZpZXc6ICogQ2hhbmdlcyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdDoKKyAgICAgIC0gcmVmdXNlIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0cyBpZiBraWxsLmV4ZSBjYW5ub3QgYmUgZm91bmQuCisgICAgICAtIHJ1bl9zaGVsbF9jb21tYW5kKCkgd2l0aCBlaXRoZXIgaW5wdXQgb3Igb3V0cHV0IChidXQgbm90IGJvdGgpIGRvZXMKKwlub3cgd29yay4gVGhpcyBkaWQgbm90IHdvcmsgdW50aWwgbm93IGJlY2F1c2Ugb24gTWluR1cgbWtzdGVtcCgpCisJZ2VuZXJhdGVzIGEgTWluR1ctc3R5bGUgcGF0aCAoL3RtcC8uLi4pIHdoaWxlIHN5c3RlbSgpIGludm9rZXMKKwljbWQuZXhlIGFuZCBoZW5jZSBleHBlY3RzIGEgV2luZG93cy1zdHlsZSBwYXRoIChDOlwuLi4pLgorICAgICAgLSB0ZXN0aW5nOiBza2lwIHRoZSB0ZXN0cyB0aGF0IHJlcXVpcmUgU0lHSFVQIHNpbmNlIE1pbkdXIGRvZXMgbm90CisJc3VwcG9ydCBTSUdIVVAuCisgICAgICAtIHRlc3RzIFQwNTkgYW5kIFQwNjUgZG8gbm93IHBhc3MuCisgICAgICAtIHRlc3RzIFQxMTAsIFQxMTEsIFQxMTIsIFQxMjAsIFQxMjEgYW5kIFQxMjIgZG8gbm93IHBhc3Mgd2hlbiBzbm1wZAorCWlzIGJ1aWx0IHdpdGggd2luRXh0RExMIHN1cHBvcnQgZW5hYmxlZC4KIAogICAgIFNvbGFyaXM6Ci0gICAgICAtIFtQQVRDSCAyMDEyNDA0XTogRGVhbCB3aXRoIG1vcmUgdGhhbiAxMCBpbnRlcmZhY2VzCi0gICAgICAtIFtQQVRDSCAyNDA2Mzc4XTogRml4IGhyU1dSdW5QZXJmTWVtIG9uIDY0LWJpdCBTb2xhcmlzIHN5c3RlbXMKLSAgICAgIC0gW1BBVENIIDI3NTE1ODhdOiBJbmNvbnNpc3RlbnQgZGF0YSAoZS5nLiBVRFAvVENQIE1JQiBzY2FsYXIgdmFsdWVzCi0Jb2YgemVybykgY2FuIGJlIHJlcG9ydGVkIG9uIFNvbGFyaXMgMTBVNCsKLSAgICAgIC0gUHJvdGVjdCBhZ2FpbnN0IG1pc3NpbmcgcGFja2FnZSB2ZXJzaW9uCisgICAgICAtIE9TIGhlYWRlciBkZXRlY3Rpb24gY2hlY2sgaXMgbm93IHJ1biBiZWZvcmUgSVB2NiBzdGFjayBkZXRlY3Rpb24uCisJc29ja2FkZHJfaW42LnNpbjZfYWRkciBjb25maWd1cmUgdGVzdCBkb2VzIG5vdyB3b3JrLgorICAgICAgLSBQcm90ZWN0IGFnYWluc3QgbWlzc2luZyBwYWNrYWdlIHZlcnNpb24gaW5mb3JtYXRpb24gY3Jhc2hpbmcgdGhlCisJYWdlbnQuIFByb2JsZW0gcmVwb3J0ZWQgYnkgSW55YXZlbiBTYWthcmFpLgogCi0gICAgV2luZG93czoKLSAgICAgIC0gW0JVRyAyOTk3NDkyXTogYnl0ZSBvcmRlciBvZiB1ZHBMb2NhbFBvcnQgaXMgbm93IGNvcnJlY3QKLSAgICAgIC0gW0JVRyAyOTcxMjU3XTogRml4ZWQgd2luRXh0RExMIGhhbmRsaW5nIG9mIG11bHRpLXZhcmJpbmQgZ2V0TmV4dCByZXF1ZXN0cy4KLSAgICAgIC0gW0JVRyAyNzc5NTQxXTogRml4ZWQgaGFuZGxlIGxlYWsgaW4gcGFzc19wZXJzaXN0Ci0gICAgICAtIFtQQVRDSCAyNjg2MjQ4XTogQXBwbGllZCBwYXRjaCBieSBCYXJ0IFZhbiBBc3NjaGUKLSAgICAgIC0gW1BBVENIIDI2ODgzNDJdOiBGaXggdmFyaW91cyBWUzIwMDUgY29tcGlsZXIgd2FybmluZ3MKLSAgICAgIC0gW1BBVENIIDI2OTE4NzZdOiBBcHBsaWVkIHBhdGNoIGJ5IHJkaWV6IHRvIGFsbG93Ci0gICAgICAtIFtQQVRDSCAyNjkzNzQ2XTogaW1wcm92ZWQgc29ja2V0IHN0YXJ0dXAgc3VwcG9ydAotICAgICAgLSBEZXRlY3QgZnJlZSBVRFAgcG9ydHMgY29ycmVjdGx5IGZvciB1c2UgaW4gdGVzdCBpbmZyYXN0cnVjdHVyZS4KLSAgICAgIC0gRml4IGJhdGNoIGJ1aWxkIHVzaW5nIHJlY2VudCB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvLgotICAgICAgLSBGaXggYnVpbGRzIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQKLSAgICAgIC0gRml4IGJ1aWxkIHVuZGVyIE1pbkdXCi0gICAgICAtIEZpeCB3aW5FeHRETEwgYnVpbGQgb24gV2luZG93cyBWaXN0YSwgV2luZG93cyA3Ci0gICAgICAtIEZpeCB3aW5FeHRETEwgYnVpbGQgd2l0aCBNaW5HVwotICAgICAgLSBTaW1wbGlmeSBidWlsZGluZyBOZXQtU05NUCArIHdpbkV4dERMTCB3aXRoIE1TVkMKLSAgICAgIC0gd2luRXh0RExMOiBGaXhlZCBhIG1lbW9yeSBsZWFrIHdoZW4gU25tcEV4dGVuc2lvblF1ZXJ5KEV4KSBmYWlscwotICAgICAgLSB3aW5FeHRETEw6IExvZyBlcnJvcnMgd2hlbiBsb2FkaW5nIGFuIGV4dGVuc2lvbiBETEwgZmFpbHMKLSAgICAgIC0gd2luRXh0RExMOiBVc2UgUkZDLWNvbXBsaWFudCBlcnJvciBjb2RlcyBpbiBTTk1QIHJlc3BvbnNlIFBEVXMKLSAgICAgIC0gd2luRXh0RExMOiBGaXggaGFuZGxpbmcgb2YgbXVsdGlwbGUgdmFyYmluZCBTRVQgcmVxdWVzdHMKKyAgICBXaW4zMjoKKyAgICAgIC0gRml4IGJhdGNoIGJ1aWxkIHVzaW5nIHJlY2VudCB2ZXJzaW9ucyBvZiBWaXN1YWwgU3R1ZGlvLiBQYXJ0aWFsCisJYmFjayBwb3J0IG9mIFNWTiByZXZpc2lvbnMgMTc1NzMgYW5kIDE3Njk2LgorICAgICAgLSBUaGUgaGVhZGVyIGZpbGUgPHN5cy90aW1lYi5oPiBpcyBubyBsb25nZXIgaW5jbHVkZWQgZnJvbQorCTxuZXQtc25tcC90eXBlcy5oPi4gT3I6IHRoZSBoZWFkZXIgZmlsZSA8c3lzL3RpbWViLmg+IHdpbGwgaGF2ZSB0bworCWJlIGluY2x1ZGVkIGV4cGxpY2l0bHkgaW4gc291cmNlIGZpbGVzIHRoYXQgbmVlZCB0aGUgZGVjbGFyYXRpb24gb2YKKwl0aGUgZnVuY3Rpb24gZnRpbWUoKS4gTm90ZTogY29tcGFyZWQgdG8gcjE4MDI0IGFuZCBiZWZvcmUsIHRoaXMKKwljaGFuZ2UgZG9lcyBub3QgYWZmZWN0IEJTRCBzeXN0ZW1zIC0tIDxzeXMvdGltZWIuaD4gd2FzIG9ubHkKKwlpbmNsdWRlZCBmcm9tIDxuZXQtc25tcC90eXBlcy5oPiBvbiBCU0Qgc3lzdGVtcyBpbiByZXZpc2lvbnMKKwlyMTgwMjUuLnIxODE1Mi4KKyAgICAgIC0gYWRkZWQgI2luY2x1ZGUgPG1hbGxvYy5oPiBpbiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBzdWNoCisJdGhhdCB0aGUgTVNWQyBjb21waWxlciBkb2Vzbid0IGdldCBjb25mdXNlZCBieSB0aGUgbWFsbG9jCisJcmVkZWZpbml0aW9uIHdoZW4gYnVpbGRpbmcgbGlic25tcCBhcyBhIERMTC4KKyAgICAgIC0gYWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX21hbGxvYygpLCBuZXRzbm1wX2NhbGxvYygpLAorCW5ldHNubXBfcmVhbGxvYygpLCBuZXRzbm1wX3N0cmR1cCgpIGFuZCBuZXRzbm1wX2ZyZWUoKS4gc25tcGxpYjoKKwlyZW1vdmVkIHRoZSB0cm91Ymxlc29tZSAjZGVmaW5lIG1hbGxvYyBuZXRzbm1wX21hbGxvYyBldGMuIFRoaXMKKwltZWFucyB0aGF0IHdoZW4gY2FsbGluZyBmdW5jdGlvbnMgZnJvbSB0aGUgTmV0LVNOTVAgRExMIGZyb20gQyBvcgorCUMrKyBjb2RlIHRoYXQgaXMgYmVpbmcgbGlua2VkIGFnYWluc3QgYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBNU1ZDCisJcnVudGltZSBETEwgdGhhbiB0aGUgTmV0LVNOTVAgRExMLCBhbmQgd2hlbiBhbGxvY2F0aW5nIG1lbW9yeSB0aGF0CisJd2lsbCBiZSBmcmVlZCBieSB0aGUgTmV0LVNOTVAgRExMLCB5b3Ugd2lsbCBlaXRoZXIgaGF2ZSB0byBjYWxsIHRoZQorCU5ldC1TTk1QIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBleHBsaWNpdGx5IG9yIHJlZGVmaW5lCisJbWFsbG9jKCkgZXRjLiB5b3Vyc2VsZi4KKyAgICAgIC0gYmF0Y2ggYnVpbGQ6IHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSAvR1ggYnkgdGhlIGVxdWl2YWxlbnQgL0VIc2MuCisgICAgICAtIGJhdGNoIGJ1aWxkOiByZXBsYWNlZCB0aGUgb2Jzb2xldGUgL0dYIGJ5IHRoZSBlcXVpdmFsZW50IC9FSHNjLgorCWJhdGNoIGJ1aWxkOiBhZGRlZCAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9ECisJIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgdG8gbWFrZSBidWlsZGluZyB3aXRoIE1TVkMgMjAwOCBtb3JlCisJc2lsZW50LgorICAgICAgLSBiYXRjaCBidWlsZDogcmVwbGFjZWQgdGhlIG9ic29sZXRlIC9HWCBieSB0aGUgZXF1aXZhbGVudCAvRUhzYy4KKwliYXRjaCBidWlsZDogYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRAorCSJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIHRvIG1ha2UgYnVpbGRpbmcgd2l0aCBNU1ZDIDIwMDggbW9yZQorCXNpbGVudC4gYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgL0ZwLi4uIGFuZCAvWVguIFRoZXNlIG9wdGlvbnMKKwlpbmZsdWVuY2UgaG93IHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgZ2VuZXJhdGVkLCB3aGljaCBhcmUgbm90CisJdXNlZCBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QuIC9ZWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE1TVkMKKwkyMDA4LgorICAgICAgLSBiYXRjaCBidWlsZDogcmVwbGFjZWQgdGhlIG9ic29sZXRlIC9HWCBieSB0aGUgZXF1aXZhbGVudCAvRUhzYy4KKwliYXRjaCBidWlsZDogYWRkZWQgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRAorCSJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIHRvIG1ha2UgYnVpbGRpbmcgd2l0aCBNU1ZDIDIwMDggbW9yZQorCXNpbGVudC4gYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgL0ZwLi4uIGFuZCAvWVguIFRoZXNlIG9wdGlvbnMKKwlpbmZsdWVuY2UgaG93IHByZWNvbXBpbGVkIGhlYWRlciBmaWxlcyBhcmUgZ2VuZXJhdGVkLCB3aGljaCBhcmUgbm90CisJdXNlZCBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QuIC9ZWCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE1TVkMKKwkyMDA4LiBiYXRjaCBidWlsZDogcmVtb3ZlZCBhIGR1cGxpY2F0ZSBvY2N1cnJlbmNlIG9mIHN0cnRvdWxsLm9iai4KKyAgICAgIC0gYnVpbGRpbmc6IEFkZGVkIGxpYnNubXAuZGVmIHRvIHRoZSBsaXN0IG9mIGxpYnNubXBfZGxsLmRzcCBzb3VyY2UKKwlmaWxlcyBzdWNoIHRoYXQgdGhlIERMTCBpcyByZWJ1aWx0IHdoZW4gdGhlIC5kZWYgZmlsZSBoYXMgYmVlbgorCW1vZGlmaWVkLgorICAgICAgLSBidWlsZGluZzogYnVpbGRpbmcgTmV0U05NUC5wbSBkb2VzIG5vIGxvbmdlciB0cmlnZ2VyIGNvbXBpbGVyCisJd2FybmluZ3MgYWJvdXQgcmVkZWZpbmluZyBfV0lOMzJfV0lOTlQgbm9yIE5URERJX1ZFUlNJT04uCisgICAgICAtIGJ1aWxkaW5nOiBjb252ZXJ0ZWQgLmRzcC8uZHN3IGZpbGVzIHRvIC52Y3Byb2ovLnNsbiBmaWxlcy4gVGhpcworCWltcGxpZXMgdGhhdCBzdXBwb3J0IGZvciBNU1ZDIDYuMCBoYXMgYmVlbiBkcm9wcGVkIGFuZCB0aGUgbWluaW11bQorCU1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24gcmVxdWlyZWQgdG8gYnVpbGQgdGhlIE5ldC1TTk1QCisJc291cmNlIGNvZGUgaXMgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAoMjAwMikuCisgICAgICAtIGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIE5ldFNOTVAucG0gbW9yZSBzaWxlbnQgYnkgYWRkaW5nIHRoZSBNU1ZDCisJY29tcGlsZXIgZmxhZ3MgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUworCS1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTLgorICAgICAgLSBidWlsZGluZzogbWFkZSBidWlsZGluZyBtb3JlIHNpbGVudCBieSBub3QgcmVkZWZpbmluZyBtYWxsb2MoKSBvcgorCWZyZWUoKSBkdXJpbmcgY29tcGlsYXRpb24gb2YgUGVybCBleHRlbnNpb25zIChyZXN1bHRlZCBpbiB3YXJuaW5ncworCWFib3V0IG1hbGxvYygpIC8gZnJlZSgpIHJlZGVmaW5pdGlvbiBpbiB0aGUgUGVybCBoZWFkZXIKKwlDT1JFL1hTVUIuaCkuCisgICAgICAtIGJ1aWxkaW5nOiByZW5hbWVkIGxpYnNkbGwuZHN3IGludG8gd2luMzJkbGwuZHN3LgorICAgICAgLSBidWlsZGluZzogcmVuYW1lZCBsaWJzZGxsLmRzdyBpbnRvIHdpbjMyZGxsLmRzdy4gYnVpbGRpbmc6CisJc2ltcGxpZmllZCBsaW5raW5nIHRoZSBOZXQtU05NUCBhcHBsaWNhdGlvbnMgd2l0aCBuZXRzbm1wLmRsbCBieQorCWFkZGluZyBhbGwgYXBwbGljYXRpb24gcHJvamVjdHMgdG8gdGhlIHNhbWUgd29ya3NwYWNlIHRoYXQgaXMgdXNlZAorCWZvciBidWlsZGluZyB0aGUgRExMLgorICAgICAgLSBidWlsZGluZzogcmVuYW1lZCBsaWJzZGxsLmRzdyBpbnRvIHdpbjMyZGxsLmRzdy4gYnVpbGRpbmc6CisJc2ltcGxpZmllZCBsaW5raW5nIHRoZSBOZXQtU05NUCBhcHBsaWNhdGlvbnMgd2l0aCBuZXRzbm1wLmRsbCBieQorCWFkZGluZyBhbGwgYXBwbGljYXRpb24gcHJvamVjdHMgdG8gdGhlIHNhbWUgd29ya3NwYWNlIHRoYXQgaXMgdXNlZAorCWZvciBidWlsZGluZyB0aGUgRExMLiBidWlsZGluZzogbWFkZSBidWlsZGluZyBuZXRzbm1wLmRsbCBsZXNzCisJZXJyb3IgcHJvbmUgYnkgbGV0dGluZyB0aGUgY29tcGlsZXIgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUKKwlwcmVwcm9jZXNzb3Igc3ltYm9sIE5FVFNOTVBfVVNFX0RMTCBoYXMgbm90IGJlZW4gZGVmaW5lZC4KKyAgICAgIC0gYnVpbGRpbmc6IHNpbXBsaWZpZWQgdGhlIGJ1aWxkIHByb2Nlc3MgYnkgcmVtb3ZpbmcgdGhlIGZpbGUKKwl3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbi4gV2hpY2ggSVB2NiBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkCisJZnJvbSBuZXRzbm1wLmRsbCBpcyBub3cgZGV0ZXJtaW5lZCBieSB3aGljaCBvZiB0aGUgZnVuY3Rpb25zIGluCisJdGhpcyBETEwgaGF2ZSBiZWVuIGRlY2xhcmVkIGFzIE5FVFNOTVBfSU1QT1JULgorICAgICAgLSBidWlsZGluZzogc2ltcGxpZmllZCB0aGUgcHJvY2VkdXJlIGZvciBidWlsZGluZyB3aXRoIFNOTVB2MyBzdXBwb3J0CisJZW5hYmxlZCAoT3BlblNTTCkuCisgICAgICAtIGNoYW5nZWQgdGhlIHR5cGUgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBvZiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkKKwlmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2ggdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuCisJcGFzc2luZyBhbm90aGVyIGRhdGF0eXBlIHRoZW4gY2hhciogb3IgY29uc3QgY2hhciouIGNoYW5nZWQKKwlpbl9hZGRyX3QgZnJvbSB1X2ludCB0byB1X2xvbmcgc3VjaCB0aGF0IGl0IG1hdGNoZXMgdGhlIGRhdGF0eXBlIG9mCisJc29ja2FkZHJfaW46OnNpbl9hZGRyLiBBbHNvLCBmaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzCisJKG1vc3RseSBjaGFyICogPD4gdV9jaGFyICogbWlzbWF0Y2hlcykgYW5kIHJlbW92ZWQgc29tZSBjYXN0cy4KKyAgICAgIC0gZGVjbGFyZWQgYWxsIGZ1bmN0aW9ucyB0aGF0IGFyZSBleHBvcnRlZCBmcm9tIHRoZSBOZXQtU05NUCBETEwgYXMKKwlORVRTTk1QX0lNUE9SVC4gVGhlIHJlc3VsdCBpcyBhIG1pbm9yIG9wdGltaXphdGlvbjogY29kZSB0aGF0IHVzZXMKKwl0aGUgTmV0LVNOTVAgRExMIHdpbGwgbm93IGNhbGwgdGhlIERMTC1leHBvcnRlZCBmdW5jdGlvbnMgZGlyZWN0bHkKKwlpbnN0ZWFkIG9mIGluZGlyZWN0bHkgdmlhIHRoZSBzdHViIGluIHRoZSBpbXBvcnQgbGlicmFyeS4KKyAgICAgIC0gZXhwb3J0ZWQgbmV0c25tcF9yZWFkX21vZHVsZSgpIGZyb20gbmV0c25tcC5kbGwgc3VjaCB0aGF0CisJTmV0U05NUC5wbSBidWlsZHMgYWdhaW4uCisgICAgICAtIGV4cG9ydGVkIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKCkgZnJvbSBuZXRzbm1wLmRsbC4KKyAgICAgIC0gbGlic25tcCBidWlsZHMgYWdhaW4gYXMgYSBETEwgd2hlbiBJUHY2IGlzIGVuYWJsZWQuCisgICAgICAtIHBlcmw6IGZpeGVkIHNldmVyYWwgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3JzLiBOb3RlOiBzaW5jZQorCWNhbGxvYygpIGlzIG5vdCByZWRlZmluZWQgaW4gPENPUkUvWFNVQi5oPiB1c2luZyBjYWxsb2MoKSBkaXJlY3RseQorCW9yIGluZGlyZWN0bHkgbGVhZHMgdG8gIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3JzLCBhdCBsZWFzdCBvbgorCVdpbmRvd3MuCisgICAgICAtIHdpbkV4dERMTDogZG9uJ3QgdHJpZ2dlciBhIG5ldHNubXBfYXNzZXJ0KCkgd2hlbiBubyBleHRlbnNpb24gRExMcworCWhhdmUgYmVlbiBsb2FkZWQuCisgICAgICAtIHdpbkV4dERMTDogZml4ZWQgYSBidWcgaW4gZ2V0TmV4dCBoYW5kbGluZyB0aGF0IGNvdWxkIGNhdXNlIHRoZSBNSUIKKwlvdXRwdXQgdG8gYmUgdHJ1bmNhdGVkLgorICAgICAgLSB3aW5FeHRETEw6IG11bHRpcGxlIHZhcmJpbmQgc2V0IHJlcXVlc3RzIGFyZSBub3cgcHJvY2Vzc2VkCisJY29ycmVjdGx5LgorICAgICAgLSB3aW5FeHRETEw6IG11bHRpcGxlIHZhcmJpbmQgc2V0IHJlcXVlc3RzIGFyZSBub3cgcHJvY2Vzc2VkCisJY29ycmVjdGx5LiB3aW5FeHRETEw6IG1hZGUgZXJyb3IgY29kZXMgaW4gU05NUCByZXNwb25zZSBQRFVzIGFzCisJUkZDLWNvbXBsaWFudCBhcyBwb3NzaWJsZS4KKyAgICAgIC0gd2luRXh0RExMOiBtdWx0aXBsZSB2YXJiaW5kIHNldCByZXF1ZXN0cyBhcmUgbm93IHByb2Nlc3NlZAorCWNvcnJlY3RseS4gd2luRXh0RExMOiBtYWRlIGVycm9yIGNvZGVzIGluIFNOTVAgcmVzcG9uc2UgUERVcyBhcworCVJGQy1jb21wbGlhbnQgYXMgcG9zc2libGUuIHdpbkV4dERMTDogaWYgbG9hZGluZyBhbiBleHRlbnNpb24gRExMCisJZmFpbHMsIHRoZSByZWFzb24gd2h5IGxvYWRpbmcgZmFpbGVkIGlzIG5vdyBsb2dnZWQuCisgICAgICAtIHdpbkV4dERMTDogbXVsdGlwbGUgdmFyYmluZCBzZXQgcmVxdWVzdHMgYXJlIG5vdyBwcm9jZXNzZWQKKwljb3JyZWN0bHkuIHdpbkV4dERMTDogbWFkZSBlcnJvciBjb2RlcyBpbiBTTk1QIHJlc3BvbnNlIFBEVXMgYXMKKwlSRkMtY29tcGxpYW50IGFzIHBvc3NpYmxlLiB3aW5FeHRETEw6IGlmIGxvYWRpbmcgYW4gZXh0ZW5zaW9uIERMTAorCWZhaWxzLCB0aGUgcmVhc29uIHdoeSBsb2FkaW5nIGZhaWxlZCBpcyBub3cgbG9nZ2VkLiB3aW5FeHRETEw6CisJZml4ZWQgYSBtZW1vcnkgbGVhayB0aGF0IG9jY3VycmVkIHdoZW4gU25tcEV4dGVuc2lvblF1ZXJ5KEV4KQorCWZhaWxlZC4gVGhpcyBtZW1vcnkgbGVhayBoYXMgYmVlbiBmb3VuZCB2aWEgc291cmNlIHJlYWRpbmcuIE5vdGU6CisJaXQgaXMgbm90IGNsZWFyIHdoZXRoZXIgaXQgd2FzIHBvc3NpYmxlIHRvIHRyaWdnZXIgdGhpcyBtZW1vcnkKKwlsZWFrLiBUaGlzIGxlYWsgaXMgY2VydGFpbmx5IG5vdCB0cmlnZ2VyZWQgYnkgZXZlcnkgcmVxdWVzdCBmb3IKKwl3aGljaCBhIHJlc3BvbnNlIHdpdGggbm9uLXplcm8gZXJyb3Igc3RhdHVzIGlzIHNlbnQgYmFjay4KKyAgICAgIC0gU3VwcHJlc3NlZCAiaW1wbGljaXQgY2FzdCBmcm9tIGludCB0byB1X2NoYXIiIHdhcm5pbmdzIGdlbmVyYXRlZCBieQorCU1TVkMuCisgICAgICAtIG1hZGUgc3VyZSB0aGF0IGFjY2Vzc2luZyB0aGUgbWliSUkgaW50ZXJmYWNlcyB0YWJsZSBkb2VzIG5vdAorCXRyaWdnZXIgb3V0LW9mLXJhbmdlIGFycmF5IGFjY2Vzc2VzICh3YXMgZGV0ZWN0ZWQgYnkKKwlCb3VuZHNDaGVja2VyKS4KKyAgICAgIC0gRml4IGJ1aWxkIHVuZGVyIE1pbkdXIGJhY2svZm9yd2FyZCBwb3J0IG9mIHJldmlzaW9uIDE4NjMxCiAKIAotKiA1LjQuMiAqCisKKyo1LjUqCiAKICAgICBzbm1wbGliOgotICAgICAgLSBbQlVHIDE3OTM1NDVdOiBUYWtlIHRoZSBuYW1lIGZyb20gdGhlIHNvY2thZGRyX3VuCisgICAgICAtIFtCVUcgMTE3MTkwNF06IGZpeCByZWN2ZnJvbSBoYW5ncyAoYWxyZWFkeSBjbG9zZWQpCisgICAgICAtIFtCVUcgMTM0NTI5Nl06IGZpeCByZWN2ZnJvbSBoYW5ncyAoYWxyZWFkeSBjbG9zZWQpCisgICAgICAtIFtCVUcgMTYwMDE3MV06IFN1cHBvcnQgbG9uZ2VyIGNvbW11bml0eSBzdHJpbmdzIGluIFZBQ00gY29uZmlnLgorICAgICAgLSBbQlVHIDE2MTk4MjddOiBpbXByb3ZlIGhhbmRsaW5nIG9mIGxpbmsgZGVwZW5kZW5jaWVzCisgICAgICAtIFtCVUcgMTY2MDA2MV06IFZhbGlkYXRlIGVuZ2luZUlEcyBtb3JlIHN0cmljdGx5LgogICAgICAgLSBbQlVHIDE3OTU4NDBdOiBTaWduZWQgMzItYml0IHRydW5jYXRpb24gbG9nZ2VkIGFzIGRlYnVnIG1lc3NhZ2UKLSAgICAgIC0gW0JVRyAxODAxODM1XTogU3VwcG9ydCBtdWx0aXBsZSBkZWZhdWx0IHRyYW5zcG9ydHMgZm9yIGFuIGFwcC4KICAgICAgIC0gW0JVRyAxODY2NjU1XTogSGFuZGxlIHBhcnNpbmcgaW52YWxpZCBPSUQgc3ViaWRlbnRpZmllcnMKKyAgICAgIC0gW0JVRyAxODk4MTk4XTogQXZvaWQgYSBzZWdmYXVsdCB3aGVuIHBhcnNpbmcgYnJva2VuIG1pYnMuCiAgICAgICAtIFtCVUcgMTk1ODA0MV06IEVuc3VyZSBJRHMgYXJlIG5vdCB0cnVuY2F0ZWQuCi0gICAgICAtIFtCVUcgMjAyNzgzNF06IEV4dGVuZCBzdHJpbmcgcHJpbnQgYnVmZmVyIGJ5IHRoZSBtaW5pbXVtIG5lY2Vzc2FyeQorICAgICAgLSBbQlVHIDE5NzY3NzJdOiBDaGFuZ2VkIG1pYiBwYXJzZXIgdG8gaGFuZGxlIGxvbmcgYmluYXJ5L2hleCBzdHJpbmdzLgorICAgICAgLSBbQlVHIDIwMDExMjRdOiBBbGxvdyBlbWJlZGRlZCBOVUwgY2hhcmFjdGVycyBpbiB1c21Vc2VyUHVibGljCisgICAgICAtIFtCVUcgMjAyNzgzNF06IEV4dGVuZCBzdHJpbmcgcHJpbnQgYnVmZmVyIGJ5IHRoZSBtaW5pbXVtIG5lY2Vzc2FyeS4KKyAgICAgIC0gW0JVRyAyMDk5OTg1XTogQWRkZWQgY29uc3QgcXVhbGlmaWVycyB0byB0aW1lIGNvbnZlcnNpb24gcm91dGlucworICAgICAgLSBbUEFUQ0ggMjgyNzcyMl06IEltcHJvdmUgc3RydG91bGwgdG8gYmUgbGVzcyBNU1ZDLXNwZWNpZmljCiAgICAgICAtIFtCVUcgQ292ZXJpdHkgIzE4M106IGZpeCBtZW1vcnkgbGVhayBpZiBJUF9QS1RJTkZPIGZhaWxzCisgICAgICAtIFtQQVRDSCAgNzAwNjgxXTogbGltaXRlZCBzdXBwb3J0IGZvciBVRFB2NCBicm9hZGNhc3QgYWRkcmVzc2VzCisgICAgICAtIFtQQVRDSCAxNTQ4NjcwXTogRml4IHJhbmdlIGNoZWNrcyBmb3IgdW5zaWduZWQgaW50ZWdlcnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAoRGViaWFuIGJ1ZyAjMzgzMzgwKQorICAgICAgLSBbUEFUQ0ggMTU5MjcwNl06IEZpeCBtZW1vcnkgbGVhayB3aGVuIGNsb25pbmcgdmFyYmluZHMuCisgICAgICAtIFtQQVRDSCAxNjE2OTEyXTogZml4IG1lbW9yeSBsZWFrIGluIHNubXBfdWRwX3RyYW5zcG9ydAorICAgICAgLSBbUEFUQ0ggMTYyMDQyNF06IEhvbm9yIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCBvdmVyIHRoZSBkZWZhdWx0IHN5c3RlbQorICAgICAgLSBbUEFUQ0ggMTYyNzA0OV06IE5ldyBBUEkgdG8gaGFuZGxlIGxhcmdlIG51bWJlcnMgb2YgZmlsZSBkZXNjcmlwdG9ycy4KKyAgICAgIC0gW1BBVENIIDE2MzQ2MjBdOiBGaXggbGVha3MgZnJvbSBjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24gZmFpbHVyZS4KKyAgICAgIC0gW1BBVENIIDE2NDAxMTRdOiBEb24ndCBzdG9yZSB0cmFpbGluZyBudWxsIGNoYXJhY3Rlci4KKyAgICAgIC0gW1BBVENIIDE2NDE4OTVdOiBFeHRlbmQgc2hvcnQgdmlldyBtYXNrcyAoYXMgcGVyIFJGQyBzcGVjcykKKyAgICAgIC0gW1BBVENIIDE2NDE5NzJdOiBhZGQgbWlzc2luZyBjb25zdAorICAgICAgLSBbUEFUQ0ggMTY0MjA3MV06IERvbid0IGZpZGRsZSB3aXRoIHRoZSBzdG9yYWdlIG9mIHByZS1leGlzdGluZyB1c2Vycy4KKyAgICAgIC0gW1BBVENIIDE2NDU2OThdOiBmaXggNjQtYml0IHNpZ25lZCBpbnRlZ2VyIGVuY29kaW5nCisgICAgICAtIFtQQVRDSCAxNjUzNjcwXTogQ29uc2lzdGVudCBTTk1QdjMgYmVoYXZpb3VyIHdoZW4gb3BlbmluZyBzZXNzaW9ucy4KKyAgICAgIC0gW1BBVENIIDE2NjU1NDNdOiBIYW5kbGUgVkFDTSBjaGVja3MgY29ycmVjdGx5LgorICAgICAgLSBbUEFUQ0ggMTY4MTAzMF06IEJldHRlciBoYW5kbGluZyBvZiBlbXB0eSBhcHB0eXBlIGNvbmZpZ3MuCisgICAgICAtIFtQQVRDSCAxNjgxOTc3XTogQWRkIGNhbGxiYWNrcyBwcmlvciB0byByZWFkaW5nIGNvbmZpZy4KKyAgICAgIC0gW1BBVENIIDE2ODczMTZdOiBEb24ndCBkcm9wIGNvbnN0IGZyb20gY2FzdHMuCisgICAgICAtIFtQQVRDSCAxNjg3MzE3XTogUmVtb3ZlIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZQorICAgICAgLSBbUEFUQ0ggMTY4NzMxOF06IE1ha2UgX3Nlc3Nfc2VscG9sX2luZm8gc3RhdGljLgorICAgICAgLSBbUEFUQ0ggMTY4NzMxOV06IERlY2xhcmUgc25tcF9zZXNzX3JlYWRfZXh0ZCgpCisgICAgICAtIFtQQVRDSCAxNjg3MzI1XTogRml4IHByb2JsZW0gd2l0aCBvcGVyYXRvciBwcmVjZWRlbmNlLgorICAgICAgLSBbUEFUQ0ggMTY4NzMzN106IEltcGxlbWVudCBfc2Vzc19vcGVuIGluIHRlcm1zIG9mIHNubXBfc2Vzc19hZGQKKyAgICAgIC0gW1BBVENIIDE3MjgyNDddOiBDbGVhbiB1cCBpbnQ2NCB0eXBlIGNoZWNraW5nIGFuZCB1c2FnZSBmb3IgYnVpbGRpbmcgcGFja2V0cworICAgICAgLSBbUEFUQ0ggMTczNzA4NV06IGZpeCB0aGUgLU0gc3dpdGNoIGZvciBtaWIgcGFyc2luZyB2cyBkZWZhdWx0cwogICAgICAgLSBbUEFUQ0ggMTc2ODI4NV06IENvdW50IE1JQiBmaWxlcyBjb3JyZWN0bHkgaW4gYWRkX21pYmRpcigpCiAgICAgICAtIFtQQVRDSCAxNzc1MTI0XTogRml4IGNsaWVudGFkZHIgZnVuY3Rpb25hbGl0eQogICAgICAgLSBbUEFUQ0ggMTgwNjMzNl06IGZpeCAtTFMgb3B0aW9uIHBhcnNpbmcKICAgICAgIC0gW1BBVENIIDE4MDc0ODldOiBmaXggaWdub3Jpbmcgb2YgZGlzcGxheSBoaW50cy4KICAgICAgIC0gW1BBVENIIDE4MTE0NjldOiByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKCkgcmVhZHMgcGFzdCBtYWxsb2MnZCBidWZmZXIKICAgICAgIC0gW1BBVENIIDE4NzUwMjJdOiBpbXByb3ZlIGNhbGxiYWNrIGxvY2tpbmcgbWVjaGFuaXNtcworICAgICAgLSBbUEFUQ0ggMTg4MjA2OV06IEFkZCB0b2tlbiBmb3Igc3BlY2lmeWluZyBhbiBleGFjdCBTTk1QdjMgZW5naW5lSUQKICAgICAgIC0gW1BBVENIIDE4OTU5MjddOiBjaGFuZ2Ugb2Jzb2xldGUgcmVjdi9zZW5kIHRvIHJlY3Zmcm9tL3NlbmR0bwotICAgICAgLSBbUEFUQ0ggMTg5ODIwNF0sIFtCVUYgMTg5ODE5OF06IGZpeCBzZWdmYXVsdCB3aGVuIHBhcnNpbmcgYnJva2VuIG1pYnMuCisgICAgICAtIFtQQVRDSCAxODk4MjA0XTogQXZvaWQgYSBzZWdmYXVsdCB3aGVuIHBhcnNpbmcgYnJva2VuIG1pYnMuCisgICAgICAtIFtQQVRDSCAxOTE2ODQwXTogbmV3IGNvbmZpZyBvcHRpb24gdG8gc2V0IFNOTVB2MSB0cmFwIGFnZW50IGFkZHJlc3MKKwlbUEFUQ0ggMTkxNjg0MF06IGludHJvZHVjZSBuZXRzbm1wX2dldGhvc3RieW5hbWVfdjQKICAgICAgIC0gW1BBVENIIDE5MjE4NjFdOiBBdm9pZCBlbmRsZXNzIGxvb3AgYWZ0ZXIgdHJ1bmNhdGluZyA2NGJpdCBpbnQKLSAgICAgIC0gW1BBVENIIDIwMDM0NTBdOiBGaXggYSBjb3VwbGUgb2YgNjQtYml0IHByb2JsZW1zCi0gICAgICAtIENoYW5nZSBDT05UQUlORVJfSU5TRVJUIHRvIG5vdCBkbyBwYXJ0aWFsIGluc2VydHMgaW4gY29udGFpbmVycwotCXdpdGggbXVsdGlwbGUgaW5kaWNlcyB3aGVuIG9uZSBpbnNlcnQgZmFpbHMuCisgICAgICAtIFtQQVRDSCAyMDAzNDUwXTogRml4IGEgY291cGxlIG9mIDY0LWJpdCBwcm9ibGVtcy4KKyAgICAgIC0gW1BBVENIIDIwNDMwMThdOiBmaXggcmVjdmZyb20gaGFuZ3MKKyAgICAgIC0gW1BBVENIIDIyNTgyMjldOiBSZW1vdmUgbWlzbGVhZGluZyBjb21tZW50CisgICAgICAtIFtQQVRDSCAyNDc5NzAwXTogRml4IHpvbmVkIElQIGFkZHJlc3MgdXNlZCBhcyB0YWJsZSBpbmRpY2VzCisgICAgICAtIFtQQVRDSCAyNDkyMzc3XTogRml4IHR5cG8vYnVnIGluIHNubXBfZW5hYmxlX2NhbGxiYWNrKCkKKyAgICAgIC0gW1BBVENIIDI1MDU0ODhdOiBGaXggYWxhcm1zIG5vdCB0cmlnZ2VyZWQgZHVlIHRvIGxhcmdlIGNsb2NrIHNrZXdzLgorICAgICAgLSBbUEFUQ0ggMjUzODE2OV06IFByZXZlbnQgaW5maW5pdGUgcmV0cmllcyBmb3IgYW4gaW52YWxpZCBlcnJvci1pbmRleC4KKyAgICAgIC0gW1BBVENIIDI2ODkzNjJdOiBGaXggaGFuZGxpbmcgb2YgSVB2NiBob3N0bmFtZXMuCisgICAgICAtIFtQQVRDSCAyNzEzODQxXTogRml4IHJ1bnRpbWUgZXJyb3JzIHRyaWdnZXJlZCBieSBoaWdoLUFTQ0lJIGNoYXJzCisgICAgICAtIFtQQVRDSCAyNzcyNzg3XTogQ2xlYW5lciBhcHByb2FjaCB0byBoYW5kbGluZyBsYXJnZSBmZF9zZXRzLgorICAgICAgLSBbUEFUQ0ggMjc4MDQxMV06IEZpeCBjb21waWxlciB3YXJuaW5ncworICAgICAgLSBbRkVBVFVSRVMgIDQ1NDAyOF06IERldGVjdCBlbXB0eSBNSUIgaW5kZXggZmlsZXMuCisgICAgICAtIFtGRUFUVVJFUyAgODUxODg3XTogUmVwb3J0IHJhbmdlIGluZm9ybWF0aW9uIGZvciBpbnZhbGlkIFNFVCByZXF1ZXN0cy4KKyAgICAgIC0gW0ZFQVRVUkVTIDEwNDE4ODhdOiBDaGVjayBkaXJlY3RvcnkgcGF0aHMgZm9yIGNvbmZpZyBmaWxlcy4KKyAgICAgIC0gW0ZFQVRVUkVTIDE0MDc0NzZdOiBSZW5hbWUgJ3N0cmljdENvbW1lbnRUZXJtJyB0byByZWZsZWN0IGFjdHVhbCBiZWhhdmlvdXIuCisgICAgICAtIEFkZCBHQ0MgZm9ybWF0IGNoZWNraW5nIGF0dHJpYnV0ZXMgdG8gdGhlIGRlYnVnIGZ1bmN0aW9ucy4KKyAgICAgIC0gQWRkIGl0ZXJhdG9yIGZvciBzaW5nbHkgbGlua2VkIGxpc3RzCisgICAgICAtIENvcnJlY3QgTUFYX0VOR0lORUlEX0xFTkdUSCB0byAzMiAoYXMgcGVyIFNubXBFbmdpbmVJRCBUQykKKyAgICAgIC0gQ29ycmVjdCByZWdpc3RyYXRpb24gb2YgbXVsdGlwbGUgcHJlbWliIGNvbmZpZyBoYW5kbGVycy4KKyAgICAgIC0gRGVhbGxvY2F0ZSB2YXJpb3VzIHJlc291cmNlcyBpbiBzaHV0ZG93bl9taWIKICAgICAgIC0gRG8gbm90IGxlYWsgbWVtb3J5IHdoZW5ldmVyIGFuIHVkcCBhZGRyZXNzIGlzIGZvcm1hdHRlZC4KICAgICAgIC0gRG8gbm90IHRyeSB0byBsb29rIHVwIGVtcHR5IHN0cmluZ3MgYXMgaG9zdG5hbWVzIGZvciBJUHY2Ci0gICAgICAtIEZpeCByZWdpc3RlcmluZyBvZiBtdWx0aXBsZSBwcmVtaWIgY29uZmlnIGhhbmRsZXJzCisgICAgICAtIEZpeCBmb3J3YXJkaW5nIGVuY29kaW5nCiAgICAgICAtIEZpeCBwb3RlbnRpYWwgYnVmZmVyIG92ZXJmbG93IGluIHNwcmludGYgZm9yIFVEUC9JUHY2CisgICAgICAtIEhhbmRsZSBtYXBwaW5nIGNvbXBsZXggdHJhbnNwb3J0IHN0cmluZ3MgdG8gc2ltcGxlIG5hbWUgZGVmaW5pdGlvbnMKKyAgICAgIC0gSGFyZGNvZGUgZGVmYXVsdCBwb3J0IG51bWJlcnMgKHJhdGhlciB0aGFuIHVzZSBnZXRzZXJ2YnluYW1lKQorICAgICAgLSBJbXBsZW1lbnQgUkZDNTM0MyBjb250ZXh0RW5naW5lSUQgcHJvYmluZy4KKyAgICAgIC0gSW1wcm92ZSBDT05UQUlORVJfSU5TRVJUIGhhbmRsaW5nIG9mIHBhcnRpYWwgZmFpbHVyZSB3aXRoIG11bHRpcGxlIGluZGV4ZXMKKyAgICAgIC0gSW1wcm92ZSBuZXRzbm1wX3dhdGNoZXJfaW5mbyB0byBoYW5kbGUgc3RhdGljYWxseSBhbGxvY2F0ZWQgZGF0YS4KKyAgICAgIC0gSW50cm9kdWNlIHByaW50Zi1saWtlIHZlcnNpb25zIG9mIGNvbmZpZ19wZXJyb3IgYW5kIGNvbmZpZ19wd2FybgorICAgICAgLSBMaWJyYXJ5IGxheWVyaW5nIGltcHJvdmVtZW50cworICAgICAgLSBSZWFkIGRlZntUYXJnZXQsRG9tYWlufSBmcm9tIHNubXAuY29uZiBhcyB3ZWxsIGFzIDxhcHA+LmNvbmYKKyAgICAgIC0gcmVuYW1lIE1JQiBtYWNybyB0byBORVRTTk1QX01JQjJfT0lELCBNSUIgaXMgdG9vIGdlbmVyaWMgYW5kIG1heQorCWNvbmZsaWN0IHdpdGggYXBwbGljYXRpb25zLiAgIFRoZSBvbGQgTUlCIG1hY3JvIGlzIGtlcHQgZm9yCisJYmFja3dhcmQgY29tcGF0aWJpbGl0eSwgdW5sZXNzIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIGlzCisJZGVmaW5lZC4KIAogICAgIHNubXBkOgotICAgICAgLSBbQlVHIDE1NTczNzJdOiBSZWFsaWduIGhyRlNTdG9yYWdlSW5kZXggd2l0aCBoclN0b3JhZ2VUYWJsZQorICAgICAgLSBbQlVHICA5MDI2MTBdOiBEb24ndCBkaXNjYXJkIHBlbmRpbmcgZGF0YSBmb2xsb3dpbmcgYSBUUkFQLgorICAgICAgLSBbQlVHICA5MDI4MDFdOiBGaXggb3JkZXJpbmcgb2YgU01VWC1yZWdpc3RlcmVkIHN1YnRyZWVzLgorICAgICAgLSBbQlVHIDEwNDYzMjddOiBSZXNldCAiaW5jbHVkZUFsbERpc2tzIiBmbGFnIHdoZW4gcmVsb2FkaW5nLgorICAgICAgLSBbQlVHIDExMDIwNThdOiBTa2lwIG5vbi1tb3VudGVkIGRpc2tzIChlLmcuIHN3YXAgcGFydGl0aW9ucykKKyAgICAgIC0gW0JVRyAxMzk3ODk1XTogaW5jbHVkZSBtaXNzaW5nIGludGVyZmFjZSBkZWNsYXJhdGlvbnMKKyAgICAgIC0gW0JVRyAxNDAwMTAxXTogcmVtb3ZlIGRlbGV0ZWQgaW50ZXJmYWNlcyBmcm9tIGlmVGFibGUKKyAgICAgIC0gW0JVRyAxNDEzNzI4XTogUmVmZXJlbmNlIGluZGV4IHZhbHVlcyBpbiBkZWJ1ZyBvdXRwdXQgY29ycmVjdGx5LgorICAgICAgLSBbQlVHIDE0MTYyNzZdOiBIYW5kbGUgZGVwZW5kZW5jeSBvbiBNSUIgcGFyc2luZyBBUEkuCisgICAgICAtIFtCVUcgMTU0NjgxN106IEZpeCBzbm1wRW50ZXJwcmlzZSB2YXJiaW5kIHdoZW4gZm9yd2FyZGluZyB2MSB0cmFwcy4KKyAgICAgIC0gW0JVRyAxNTU4ODIzXTogZml4IGlwQWRkcmVzc1RhYmxlIG1lbW9yeSBsZWFrCisgICAgICAtIFtCVUcgMTYwMDI2MV06IEhhbmRsZSBub24teDg2IC9wcm9jL2NwdWluZm8gZm9ybWF0CisgICAgICAtIFtCVUcgMTYwMDQzMl06IEhhbmRsZSBzaWduYWxzIHByb3Blcmx5IHdoZW4gcmVzdGFydGluZyB0aGUgYWdlbnQuCisgICAgICAtIFtCVUcgMTYwMjI4Nl06IERvbid0IGxldCB0YWJsZSBob2xlcyBibG9jayBsYXRlciByb3dzLgorICAgICAgLSBbQlVHIDE2Mjg2MTNdOiBSZXN0b3JlIG1lbVRvdGFsRnJlZS4wIG9uIFNvbGFyaXMKKyAgICAgIC0gW0JVRyAxNjMzNTk1XTogRml4IEFnZW50WCBoYW5kbGluZyBvZiBDb3VudGVyNjQgdmFsdWVzCisgICAgICAtIFtCVUcgMTY3NzA2M106IENoZWNrIGZvciBmYWlsZWQgbWFsbG9jIGNhbGxzLgorICAgICAgLSBbQlVHIDE2ODUwNjddOiBNb3JlIHByZWNpc2UgaGFuZGxpbmcgb2YgU05NUHYzLWFkbWluIE1JQiB0YWJsZXMuCisgICAgICAtIFtCVUcgMTY4NTA4MV06IENoZWNrIGZvciB2YWxpZCBPSUQgb24gRnJlZS9VbmRvIHBhc3Nlcy4KKyAgICAgIC0gW0JVRyAxNjkzMDM5XTogYmUgc2lsZW50IHdoZW4gaW5zZXJ0IGZhaWxzLgorICAgICAgLSBbQlVHIDE3MTI5ODhdOiBkZWZhdWx0L2NvbmZpZ3VyYWJsZSBtYXggIyB2YXJiaW5kcyByZXR1cm5lZCBieSBHRVRCVUxLCisgICAgICAtIFtCVUcgMTc0NTExM106IEhhbmRsZSBzaW5nbGUtbGluZSBvdXRwdXQgaW4gVUNEIGNvbXBhdGFiaWxpdHkgbW9kZS4KICAgICAgIC0gW0JVRyAxNzQ4MjA2XTogUHJvdGVjdCBhZ2FpbnN0IGZhaWx1cmVzIHRvIG9wZW4gL2V0Yy9tdGFiIChvciBlcXVpdikKLSAgICAgIC0gW0JVRyAxNzU4MjEyXTogSGFuZGxpbmcgbWlzc2luZyB2YXJpYWJsZSB0eXBlcyAoSXBBZGRyZXNzLENvdW50ZXIsT3BhcXVlKQorICAgICAgLSBbQlVHIDE3NTgyMTJdOiBIYW5kbGUgbWlzc2luZyB2YXJpYWJsZSB0eXBlcyAoSXBBZGRyZXNzLENvdW50ZXIsT3BhcXVlKQorICAgICAgLSBbQlVHIDE3NjA2MzNdOiBmaXggdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCiAgICAgICAtIFtCVUcgMTc3MTIyMV06IFJldGFpbiBpZkxhc3RDaGFuZ2UgaW5mb3JtYXRpb24gb24gZGF0YSByZWxvYWQuCiAgICAgICAtIFtCVUcgMTc5Mjg5MF06IGluY2x1ZGUgQ0lGUyBtb3VudHMgd2hlbiBza2lwcGluZyByZW1vdGUgZmlsZXN5c3RlbXMKICAgICAgIC0gW0JVRyAxODIyMzYwXTogRml4IHNwaW5sb2NrIGhlbHBlciBlcnJvciBoYW5kbGluZy4KLSAgICAgIC0gW0JVRyAxODUxMDQ3XTogRG9uJ3Qgb3Zlci1wcm9jZXNzIGZhaWxlZCB3YXRjaGVyIHJlcXVlc3RzCi0gICAgICAtIFtCVUcgMTkxMjY0N106IEZpeCBtZW1vcnkgbGVhayBmb2xsb3dpbmcgZmFpbGVkIHJlcXVlc3QKLSAgICAgIC0gW0JVRyAxOTMxMzkxXTogRml4IHJlcG9ydGluZyBvZiBNZW1vcnkgYnVmZmVycyBhbmQgY2FjaGVkIG1lbW9yeQotICAgICAgLSBbQlVHIDIwMDMxNDRdOiBJbmNyZWFzZSBzaXplIG9mIEFnZW50WCBwYWNrZXQKLSAgICAgIC0gW0JVRyAyMDA2Nzg2XTogSW50ZXJmYWNlIG5hbWUgY2FuIGhhdmUgbW9yZSB0aGFuIDggY2hhcmFjdGVycwotICAgICAgLSBbQlVHIDIwMTgwMzFdOiBEb24ndCBwcm9iZSBlbmdpbmVJRCBpbiBpbnRlcm5hbCBtb25pdG9yIHNlc3Npb25zCi0gICAgICAtIFtCVUcgMjAyMzgwM106IFJlbW92ZSBpcnJlbGV2YW50IGNvbmZpZ3VyZSBkZXBlbmRlbmN5IChIUC1VWCAxMSkKLSAgICAgIC0gW1BBVENIIDE3MTY1NDhdOiBGaXggaGVscCBvdXRwdXQgZm9yIC1ECisgICAgICAtIFtCVUcgMTkxMjY0N106IEZpeCBtZW1vcnkgbGVhayBmb2xsb3dpbmcgZmFpbGVkIHJlcXVlc3RzLgorICAgICAgLSBbQlVHIDE5MzEzOTFdOiBGaXggcmVwb3J0aW5nIG9mIE1lbW9yeSBidWZmZXJzIGFuZCBjYWNoZWQgbWVtb3J5LgorICAgICAgLSBbQlVHIDIwMDExMjRdOiBBbGxvdyBlbWJlZGRlZCBOVUwgY2hhcmFjdGVycyBpbiB1c21Vc2VyUHVibGljCisgICAgICAtIFtCVUcgMjAwMzE0NF06IEluY3JlYXNlIHNpemUgb2YgQWdlbnRYIHBhY2tldCBidWlsZCBidWZmZXIKKyAgICAgIC0gW0JVRyAyMDA2Nzg2XTogSW50ZXJmYWNlIG5hbWUgY2FuIGhhdmUgbW9yZSB0aGFuIDggY2hhcmFjdGVycy4KKyAgICAgIC0gW0JVRyAyMDE4MDMxXTogRG9uJ3QgcHJvYmUgZW5naW5lSUQgaW4gaW50ZXJuYWwgbW9uaXRvciBzZXNzaW9ucy4KKyAgICAgIC0gW0JVRyAyNjkzNjcwXTogRG9uJ3Qgb3BlbiAoJiBjbG9iYmVyKSBBZ2VudFggc29ja2V0IGlmIG90aGVyIHRyYW5zcG9ydHMgZmFpbAorICAgICAgLSBbQlVHIDI4MjIzNTVdOiBGaXggbWVtb3J5IGxlYWtzIG9uIHVkcEVuZHBvaW50VGFibGUgKGxpbnV4KSBQYXRjaAorCXN1cHBsaWVkIGJ5IEZyYW5rIExpY2h0ZW5oZWxkCisgICAgICAtIFtQQVRDSCAxMjI1NDQwXTogRGVsYXkgc2lnaHVwIHRpbGwgaXQgaXMgc2FmZS4KKyAgICAgIC0gW1BBVENIIDEyNTczNDddOiBOb24tZml4ZWQgc2l6ZSBjb25uZWN0aW9uIGJ1ZmZlcgorICAgICAgLSBbUEFUQ0ggMTU1MDczMF06IFJlcG9ydCBlcnJvcnMgZnJvbSBpdGVyYXRvci1iYXNlZCBoYW5kbGVycy4KKyAgICAgIC0gW1BBVENIIDE1ODUxNDZdOiBFeHRlbmQgcmFuZ2Ugb2YgYXZhaWxhYmxlIGVycm9yIGNvZGVzCisgICAgICAtIFtQQVRDSCAxNTk1NTY4XTogZml4IGRlbGVnYXRlZCBTRVQgcmVxdWVzdHMgZnJvbSBhZ2VudHggc3ViYWdlbnRzCisgICAgICAtIFtQQVRDSCAxNjAxMTg4XTogSGFuZGxlIHNpZ25hbHMgcHJvcGVybHkgd2hlbiByZXN0YXJ0aW5nIHRoZSBhZ2VudC4KKyAgICAgIC0gW1BBVENIIDE2MDE0NTNdOiBEeW5hbWljIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGltcHJvdmVtZW50cworICAgICAgLSBbUEFUQ0ggMTYxNzI1NV06IGZpeCBsZW5ndGggb2YgdGhlIGhpc3RvcnkgYXJyYXkgdG8gbWF0Y2ggY29kZS4KKyAgICAgIC0gW1BBVENIIDE2MjA0MjRdOiBGaXggZGVmYXVsdCBwb3J0IGZvciBzZW5kaW5nIG5vdGlmaWNhdGlvbgorICAgICAgLSBbUEFUQ0ggMTYyNTA2OV06IHNwZWVkIGltcHJvdmVtZW50cyBmb3Igc29sYXJpcyByb3V0aW5nIHRhYmxlIGFjY2VzcworICAgICAgLSBbUEFUQ0ggMTYzOTI4Ml06IFNhdmUgcGVyc2lzdGVudCBzbm1wVGFyZ2V0UGFyYW1zVGFibGUgc2V0dGluZ3MgY29ycmVjdGx5LgorICAgICAgLSBbUEFUQ0ggMTYzOTcyNl06IFJlcG9ydCBwaHlzaWNhbCBtZW1vcnkgY29ycmVjdGx5IG9uICpCU0QKKyAgICAgIC0gW1BBVENIIDE2NDEzMzJdOiBJbmNsdWRlIG1pc3NpbmcgYWdlbnQgY29uZmlnIGRlZmluaXRpb25zLgorICAgICAgLSBbUEFUQ0ggMTY0MTY4NV06IEhhbmRsZSB1bnJlc3BvbnNpdmUgQWdlbnRYIHN1YmFnZW50cyBtb3JlIHJlbGlhYmx5LgorICAgICAgLSBbUEFUQ0ggMTY0MTg2NV06IERvbid0IGRvdWJsZSBjaGVjayBzbm1wVHJhcE9JRCBpbiB0aGUgZmlsdGVyIHRhYmxlLgorICAgICAgLSBbUEFUQ0ggMTY0MjI1NV06IEhhbmRsZSBzYXZpbmcgbG9uZyBzbm1wTm90aWZ5RmlsdGVyVGFibGUgZW50cmllcy4KKyAgICAgIC0gW1BBVENIIDE2NDQyODBdOiBEb24ndCBhdXRvbWF0aWNhbGx5IHByb2JlIGZvciB2MyBFbmdpbmVJRHMuCisgICAgICAtIFtQQVRDSCAxNjQ0MjgwXTogVXNlIHRoZSBjb3JyZWN0IGVuZ2luZUlEIHdoZW4gc2VuZGluZyB2MyB0cmFwcy4KKyAgICAgIC0gW1BBVENIIDE2NDQ3MTRdOiByZXBsYWNlIGxhc3QgdXNlIG9mIGRlcHJlY2F0ZWQgY29weV93b3JkIGJ5IGNvcHlfbndvcmQKKyAgICAgIC0gW1BBVENIIDE2NTQ0MjRdOiBIYW5kbGUgcm93IGRlbGV0aW9uIGlzc3VlcyBpbiBkYXRhc2V0IHRhYmxlcworICAgICAgLSBbUEFUQ0ggMTY1Nzc0MV06IEhhbmRsZSA2NC1iaXQgdHlwZXMgdmlhIHBhc3MgbWVjaGFuaXNtLgorICAgICAgLSBbUEFUQ0ggMTY1OTYyM106IEhhbmRsZSBTTVVYIHBlZXJzIHdpdGggYW4gZW1wdHkgcGFzc3dvcmQuCisgICAgICAtIFtQQVRDSCAxNjY1NTQzXTogSGFuZGxlIFZBQ00gY2hlY2tzIGNvcnJlY3RseS4KKyAgICAgIC0gW1BBVENIIDE2NjU1NDldOiBIYW5kbGUgY3JlYXRpbmcgVkFDTSBlbnRyaWVzIGNvcnJlY3RseS4KKyAgICAgIC0gW1BBVENIIDE2NjU5ODVdOiBJbXBsZW1lbnQgaXBSZWFzbVRpbWVvdXQKKyAgICAgIC0gW1BBVENIIDE2NjY3MzddOiBpbmNsdWRlIElQdjYgdHJhZmZpYyBpbiB2YXJpb3VzIFVEUCBjb3VudGVycy4KKyAgICAgIC0gW1BBVENIIDE2NjgxOTNdOiBGaXggY2hlY2sgZm9yIHY2IFJlYXNtTWF4U2l6ZSBzdXBwb3J0LgorICAgICAgLSBbUEFUQ0ggMTY2ODE5M106IFVwZGF0ZSByZWdpc3RyYXRpb24gb2YgUmVhc21NYXhTaXplIHN1cHBvcnQuCisgICAgICAtIFtQQVRDSCAxNjY4OTUyXTogSWdub3JlIHpvbWJpZSBwcm9jZXNzZXMuCisgICAgICAtIFtQQVRDSCAxNjY5MDQ4XTogQWRkIHN1cHBvcnQgZm9yIGlwdjZJbnRlcmZhY2VJZGVudGlmaWVyCisgICAgICAtIFtQQVRDSCAxNjc2NDc4XTogZml4IHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzcworICAgICAgLSBbUEFUQ0ggMTY3ODMwMV06IERlYWxsb2NhdGUgZG9tYWluIHJlZ2lzdHJ5IGF0IHNodXRkb3duCisgICAgICAtIFtQQVRDSCAxNjc4MzA1XTogRGVhbGxvY2F0ZSBjYWNoZSBpbiBoYXJkd2FyZS9jcHUvY3B1IG9uIHNodXRkb3duCisgICAgICAtIFtQQVRDSCAxNjc4MzA2XTogRGVhbGxvY2F0ZSBsb2cgaW4gbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZworICAgICAgLSBbUEFUQ0ggMTY3ODc4OF06IEJldHRlciBoYW5kbGluZyBvZiBTTVVYIHNvY2tldCBkZXNjcmlwdG9ycy4KKyAgICAgIC0gW1BBVENIIDE2ODEwNDNdOiBjbGVhbiB1cCBoZWxwZXIgaW5jbHVkZXMKKyAgICAgIC0gW1BBVENIIDE2ODMwNTRdOiBzZXQgdWRwRW5kcG9pbnRJbnN0YW5jZSB0byBpZGVudGlmeSBkaWZmZXJlbnQgcHJvY2Vzc2VzLgorICAgICAgLSBbUEFUQ0ggMTY4NzMzNl06IFN0YXJ0IHVzaW5nIHRoZSBlbmhhbmNlZCByZWFkX2NvbmZpZyBpbnRlcmZhY2UKKyAgICAgIC0gW1BBVENIIDE2OTI3NjhdOiBGaXggY29weWluZyBvZiBub24tb2N0ZXQtYWxpZ25lZCBJUCBhZGRyZXNzIHByZWZpeGVzLgorICAgICAgLSBbUEFUQ0ggMTY5MjgxN106IEltcHJvdmVkIFJGQyA0MjkzIHN1cHBvcnQgKGluYy4gbm9uLXVuaWNhc3QvcmFuZG9tIElQIGFkZHJlc3NlcykKKyAgICAgIC0gW1BBVENIIDE2OTgxODRdOiBSZWdpc3RlciBub24tZGVmYXVsdCBjb250ZXh0IGludGVnZXJzIGFzIHdyaXRhYmxlLgorICAgICAgLSBbUEFUQ0ggMTcwMDE1N106IEZpeCBvcmRlcmluZyBvZiBleGVjIHRva2VucyBpbiBNSUIgb3V0cHV0CisgICAgICAtIFtQQVRDSCAxNzAwNzMwXTogUmVtb3ZlIHVudXNlZCBleHRlcm4gZGVjbGFyYXRpb24uCisgICAgICAtIFtQQVRDSCAxNzAwNzMyXTogRml4IGRlYnVnIG91dHB1dCBzdGF0ZW1lbnRzLgorICAgICAgLSBbUEFUQ0ggMTcwMDczN106IFRpZHkgdXAgc2V0U2VyaWFsTm8gaW1wbGVtZW50YXRpb25zLgorICAgICAgLSBbUEFUQ0ggMTcwMjM2MV06IFJlYWQgc3RhdHMgZnJvbSAvcHJvYy9uZXQvc25tcDYKKyAgICAgIC0gW1BBVENIIDE3MDIzNjZdOiBTdXBwb3J0IGZvciBpY21wU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcwMzAwNF06IENvbnNvbGlkYXRlIHNubXA2IGhhbmRsaW5nLgorICAgICAgLSBbUEFUQ0ggMTcxMDYzMl06IGZpeCBtZW1vcnkgbGVhayBvbiBicm9rZW4gY29udGFpbmVyIGluc2VydGlvbnMgZm9yIHRoZSBpcEFkZHJlc3NUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcxNTM5NV06IGZpeCBpY21wIHRhYmxlIGVycm9ycyBpbiBuZXcgaWNtcCBjb2RlCisgICAgICAtIFtQQVRDSCAxNzE1NDA2XTogcmVnaXN0cmF0aW9uIG9yZGVyaW5nIGZpeGVzIGZvciBpY21wU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcxNjU0OF06IEZpeCBoZWxwIG91dHB1dCBzbyBubyBzcGFjZSBpcyBwcmludGVkIGJldHdlZW4gLUQgYW5kIGFyZ3VtZW50cy4KKyAgICAgIC0gW1BBVENIIDE3MTkyNTNdOiBmaXggc2tpcE5GU0luSG9zdFJlc291cmNlcyBmb3IgbXVsdGlwbGUgd2Fsa3MKKyAgICAgIC0gW1BBVENIIDE3MjEwOTZdOiByZW1vdmUgdW51c2VkIHZhcmlhYmxlIHN0YXRzIGZyb20ga2VybmVsIGV4dHJhY3Rpb24gZm9yIGJldHRlciBwb3J0YWJpbGl0eS4KKyAgICAgIC0gW1BBVENIIDE3MjM2MTFdOiBOZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJNT04gYWxhcm1UYWJsZQorICAgICAgLSBbUEFUQ0ggMTcyOTYyOV06IEZpeCBtZW1vcnkgbGVhayBpbiBkaXNtYW4gYWdlbnQuCisgICAgICAtIFtQQVRDSCAxNzM3NDM5XTogYXV0b21hdGljIGxpbmsgdXAvZG93biB0cmFwcyBvbiBhIHdhbGsKICAgICAgIC0gW1BBVENIIDE3NDQxNTddOiBSZXBvcnQgZHVwbGljYXRlICJleHRlbmQvZXhlYyIgaWRlbnRpZmllcnMuCi0gICAgICAtIFtQQVRDSCAxNzQ2ODMxXTogZml4IHByb2Nlc3MgY2hlY2tpbmcgcmFjZSBjb25kaXRpb24KKyAgICAgIC0gW1BBVENIIDE3NDY4MzFdOiBmaXggcHJvY2VzcyBjaGVja2luZyByYWNlIGNvbmRpdGlvbiB1bmRlciBMaW51eCBhbmQgcGxhdGZvcm0gI2lmZGVmcwogICAgICAgLSBbUEFUQ0ggMTc1MjkzNF06IEZpeCBvZmYtYnktb25lIHFzb3J0IGVycm9yIGluIHRhYmxlIHV0aWxpdGllcy4KICAgICAgIC0gW1BBVENIIDE3NTM0MzddOiBGaXggZXJyb3IgaW5kZXggb24gZmFpbGluZyBTRVQgcmVxdWVzdHMKICAgICAgIC0gW1BBVENIIDE3NTM0NDldOiBGaXggQWdlbnRYIGVycm9yIHByb3BhZ2F0aW9uCiAgICAgICAtIFtQQVRDSCAxNzUzNDYzXTogRml4IEFnZW50WCBzdWJhZ2VudCBwaW5nIGFsYXJtIGhhbmRsaW5nCiAgICAgICAtIFtQQVRDSCAxNzU4MjA4XTogRml4IG1lbW9yeSBsZWFrCi0gICAgICAtIFtQQVRDSCAxNzc0NjEyXTogTW9yZSByZXNpbGllbnQgcHJvY2VzcyBzdGF0dXMgaGFuZGxpbmcKLSAgICAgIC0gW1BBVENIIDE3ODM3MzNdOiBJbmNsdWRlIHZlcnNpb24gaW5mbyBpbiBoclNXSW5zdCB0YWJsZSAoc29sYXJpcykKLSAgICAgIC0gW1BBVENIIDE3ODQ3NDddOiBGaXggaXAgYWRyZXNzZXMgb24gNjQgYml0IHN5c3RlbXMKKyAgICAgIC0gW1BBVENIIDE3ODM3MzNdOiBQdXQgdGhlIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIgaW50byB0aGUgaHJTV0luc3QgdGFibGUgZm9yIHNvbGFyaXMuCisgICAgICAtIFtQQVRDSCAxNzg0NzQ3XTogRml4IGxvbmcgdXNhZ2UgZm9yIGlwIGFkcmVzc2VzIG9uIDY0IGJpdCBzeXN0ZW1zIGluIHZhcmlvdXMgTUlCLUlJIHRhYmxlcy4KKyAgICAgIC0gW1BBVENIIDE3OTcxMTFdOiBpbXBsZW1lbnQgSVAtTUlCOjppcElmU3RhdHNUYWJsZQorICAgICAgLSBbUEFUQ0ggMTgwNDQ0NV06IEhpZ2ggb3JkZXIgYml0cyBvZiBIQ0luT2N0ZXRzIG5vdCBzZXQgb24gU29sYXJpcworICAgICAgLSBbUEFUQ0ggMTgwNjUwMV06IEFkZCBBUEkgZm9yIHNlbmRpbmcgdHJhcHMgd2l0aCBhIHNubXB2MyBjb250ZXh0CisgICAgICAtIFtQQVRDSCAxODIzNDY1XTogIGZpeCBpY21wIGNhY2hlIHJlZ2lzdHJhdGlvbgogICAgICAgLSBbUEFUQ0ggMTgyMzgwMF06IHJlbGVhc2UgYW5kIHJlbG9hZCBhbGwgdHJhcCBkZXN0aW5hdGlvbnMgb24gU0lHSFVQCiAgICAgICAtIFtQQVRDSCAxODI2MDg4XTogVXNlIHRoZSByaWdodCBpbnRlcmZhY2UgdG8gcmVhZCB0aGUgbmV0bWFzawotICAgICAgLSBbUEFUQ0ggMTgyNjEwMl06IHN1cHBvcnQgbG9uZ2VyIGludGVyZmFjZSBuYW1lcyBvbiBsaW51eAotICAgICAgLSBbUEFUQ0ggMTgyODgzOV06IGhhbmRsZSBvZiBkaXNrIG1vdW50IHBhdGhzIHdpdGggZW1iZWRkZWQgc3BhY2VzCisgICAgICAtIFtQQVRDSCAxODI4ODM5XTogdG8gcHJvdmlkZSBiZXR0ZXIgaGFuZGxpbmcgb2YgZGlza3MgbW91bnRlZCBvbiBwYXRocyB3aXRoIGVtYmVkZGVkIHNwYWNlcwogICAgICAgLSBbUEFUQ0ggMTg0OTkwM106IGRvIG5vdCBzcGFtIGxvZyB3aXRoIGFzc2VydHMgd2hlbiBYRU4gaXMgdXNlZAotICAgICAgLSBbUEFUQ0ggMTg2NjgyM106IHRydW5jYXRlIDMyIGJpdCBjb3VudGVyIHZhbHVlcyBvbiA2NCBiaXQgbWFjaGluZXMKLSAgICAgIC0gW1BBVENIIDE4NzkyNjFdOiBBZGQgaW5hY3RpdmUgbWVtb3J5IHRvIGNhY2hlZCByZXBvcnQgKGZyZWVic2QpCisgICAgICAtIFtQQVRDSCAxODY2ODIzXTogdHJ1bmNhdGUgMzIgYml0IGNvdW50ZXIgdmFsdWVzIG9uIDY0IGJpdCBtYWNoaW5lcyB0byBhdm9pZCBib2d1cyB3YXJuaW5ncy4KKyAgICAgIC0gW1BBVENIIDE4NzkyNjFdOiBBZGQgaW4gaW5hY3RpdmUgbWVtb3J5IHRvIHRoZSBjYWNoZWQgcmVwb3J0IGZvciBmcmVlYnNkCisgICAgICAtIFtQQVRDSCAxODgyNjIxXTogQWRkIExWTSBzdXBwb3J0IHRvIHRoZSBwYXJ0aXRpb24gdGFibGUKICAgICAgIC0gW1BBVENIIDE4OTM0NjhdOiBmaXhlZCByZWdpc3RyYXRpb24gb2YgT0lEcyB3aXRoIHJhbmdlcwotICAgICAgLSBbUEFUQ0ggMTg5NjExOF06IGZpeCBpZlRhYmxlIDMyYml0IGNvdW50ZXJzIG9uIGxpbnV4Ci0gICAgICAtIFtQQVRDSCAxOTA5ODEzXTogZml4IHRhYmxlX2l0ZXJhdG9yIGhpbnQgZm9yIFNPUlRFRCB0YWJsZXMKLSAgICAgIC0gW1BBVENIIDE5NDQ1ODFdOiBEb24ndCBjb3JlIGR1bXAgb24gbG9uZyBzdHJpbmcgaW5kZXggdmFsdWVzLgotICAgICAgLSBbUEFUQ0ggMTk1MTk5Nl06IEZpeCBmb3IgQ1BVIHN0YXRzIG9uIEZyZWVCU0QKKyAgICAgIC0gW1BBVENIIDE5MDE3NjRdOiBmb3Igc3VwcG9ydGluZyBsb2d3YXRjaCBmaWxlcyB0aGF0IGFyZSBkYXRlIGJhc2VkCisgICAgICAtIFtQQVRDSCAxOTA5ODEzXTogZml4IHRhYmxlX2l0ZXJhdG9yIGhhbmRsaW5nIG9mIFNPUlRFRCBoaW50CisgICAgICAtIFtQQVRDSCAxOTE2ODQwXTogbmV3IGNvbmZpZyBvcHRpb24gdG8gc2V0IFNOTVB2MSB0cmFwIGFnZW50IGFkZHJlc3MKKyAgICAgIC0gW1BBVENIIDE5NDQ1ODFdOiBQcm90ZWN0IGFnYWluc3QgY29yZSBkdW1wcyB3aXRoIGxvbmcgc3RyaW5nIGluZGV4IHZhbHVlcy4KICAgICAgIC0gW1BBVENIIDE5NjcxOTRdOiBSZWNvZ25pc2UgTkZTNCBtb3VudHMKKyAgICAgIC0gW1BBVENIIDE5Nzc0MzldOiBGaXggcGFzcy9fcGVyc2lzdCBidWcgd2l0aCBTRVQgb2lkIHZhbHVlCisgICAgICAtIFtQQVRDSCAxOTk1NzUzXTogbWlub3IgY2xlYW51cCBhZ2VudC9hdXRvX25saXN0LmMKKyAgICAgIC0gW1BBVENIIDIwMTI0MDJdOiBkb24ndCBmYWlsIG9uIGZhaWx1cmUgdG8gbG9vayB1cCBpbnRlcmZhY2UgZXJyb3IgY291bnRlcnMuCiAgICAgICAtIFtQQVRDSCAyMDE0MjA0XTogU3VwcG9ydCAtZyB7Z3JvdXBuYW1lfQogICAgICAgLSBbUEFUQ0ggMjAyMjkzNl06IEZpeCBBZ2VudFggQ291bnRlcjY0IGRlY29kaW5nIG9uIDY0LWJpdCBhcmNoaXRlY3R1cmVzCi0gICAgICAtIFtQQVRDSCAyMDIzNjMzXTogYWRkIFNDVFAtTUlCIGltcGxlbWVudGF0aW9uIChMaW51eCBvbmx5KQorICAgICAgLSBbUEFUQ0ggMjA4MjcyNl06IGNvcnJlY3RseSByZXBvcnQgTklDIHNwZWVkcyBoaWdoZXIgdGhhbiA0R2JpdC9zCisgICAgICAtIFtQQVRDSCAyMTAzNDkyXTogaW1wbGVtZW50IFJNT04tTUlCOjpldGhlclN0YXRzSmFiYmVycworICAgICAgLSBbUEFUQ0ggMjEyNDI4OF06IEZpeCBzZXR0aW5nIG9mIHVzbVVzZXJQcml2UHJvdG9jb2wgYXQgY3JlYXRpb24uCisgICAgICAtIFtQQVRDSCAyMTYyNjUyXTogcGF0Y2ggdG8gZml4IHNpbXBsZSBocmZzIGNoZWNrcyB3aGVuIE5GUyBpcyBpbiB1c2UuCisgICAgICAtIFtQQVRDSCAyMzg0Nzc5XTogRml4IGhhbmRsaW5nIG9mIEdldEJ1bGsgd2l0aCBOPjAsTT09MAorICAgICAgLSBbUEFUQ0ggMjQwNjM3OF06IEZpeCBoclNXUnVuUGVyZk1lbSBvbiA2NC1iaXQgU29sYXJpcyBzeXN0ZW1zCisgICAgICAtIFtQQVRDSCAyNDMxMzUzXTogTWFrZSBzb21lIEMrKyBjb21waWxlcnMgaGFwcGllcgorICAgICAgLSBbUEFUQ0ggMjQzNTY4MV06IEVuYWJsZSBpZi1taWIgcmV3cml0ZSAod2l0aCBzeXNjdGwgYmFja2VuZCkgb24gTmV0QlNECisgICAgICAtIFtQQVRDSCAyNDM1NzkzXTogU3VwcG9ydCA2NC1iaXQgSUYtTUlCIGNvdW50ZXJzIG9uIHN5c2N0bCAoKkJTRCkgc3lzdGVtLgorICAgICAgLSBbUEFUQ0ggMjQ0OTIxMF06IGFkZCA2NC1iaXQgZGlzayB1c2FnZSBzdGF0aXN0aWNzIHRvIFVDRC1TTk1QLU1JQjo6ZHNrVGFibGUKKyAgICAgIC0gW1BBVENIIDI1NjQ1NTJdOiBwcm92aWRlIGxpYm5ldGxpbmsgc3VwcG9ydCBmb3IgbG9hZGluZyB0aGUgdGNwIHRhYmxlCisgICAgICAtIFtQQVRDSCAyNjg2MjgwXTogUmVwb3J0IGR1cGxpY2F0ZSByZWdpc3RyYXRpb25zIGFzIGFuIGVycm9yCisgICAgICAtIFtQQVRDSCAyNzkxNDE3XTogZml4IHNubXBkIHNlZ2ZhdWx0IHdoZW4gcnVuIHdpdGggLURBTEwgUGF0Y2gKKyAgICAgIC0gW1BBVENIIDI4MjIzMzddOiBGaXggbWVtb3J5IGxlYWsgaW4gaXBBZGRyZXNzUHJlZml4VGFibGUKKyAgICAgIC0gW0ZFQVRVUkVTIDEwMTk0MjldOiBTZXQgc3VwcGxlbWVudGFyeSBncm91cHMgdmlhIGluaXRncm91cHMoMykKKyAgICAgIC0gQWRkIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb25zICYgaW5jbHVkZSBmaWxlcy4KKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIGEgdXNlciBwcm92aWRlZCBsZW5ndGggdmFyaWFibGUKKwkgICBhbmQgQyBzdHJpbmcgdmFsdWVzIHRvIHRoZSB3YXRjaGVyIGhlbHBlci4KKyAgICAgIC0gQWxsb3cgIm1vbml0b3IiIHRvIGhhbmRsZSBuZWdhdGl2ZSB0aHJlc2hvbGQgdmFsdWVzLgorICAgICAgLSBBdXRvbWF0aWNhbGx5IHJlcmVnaXN0ZXIgc3lzT1JUYWJsZSBlbnRyaWVzIGZyb20gQWdlbnRYIHN1YmFnZW50cy4KKyAgICAgIC0gQ2xlYW4gdXAgbm90aWZpY2F0aW9uIHJlZ2lzdHJhdGlvbnMgZHVyaW5nIEV2ZW50IE1JQiBjbGVhbnVwCiAgICAgICAtIEVuZm9yY2UgdGhlIGxvd2VyIGxpbWl0IG9uIHNjYWxhcl9ncm91cHMKLSAgICAgIC0gc3VwcHJlc3MgYW5ub3lpbmcgInJlZ2lzdHJhdGlvbiAhPSBkdXBsaWNhdGUiIHdhcm5pbmcgZm9yIHJvb3Qgb2lkcwotICAgICAgLSBIYW5kbGUgZGV2aWNlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzIGluIFVDRC1TTk1QLU1JQiAoZHNrRGV2aWNlKQorICAgICAgLSBGaXggQ1ZFLTIwMDgtNDMwOSAoR0VUQlVMSyBpc3N1ZSByZXBvcnRlZCBieSBPc2NhciBNaXJhLVNhbmNoZXopCisgICAgICAtIEZpeCBtZW1vcnkgbGVhayB3aGVuIG11bHRpcGxlIGludGVyZmFjZXMgaGF2ZSB0aGUgc2FtZSBJUHY2IGFkZHJlc3MKKyAgICAgIC0gRml4IHR3byBidWdzIHdpdGggc211eCBwYXNzd29yZCBzdXBwb3J0LgorICAgICAgLSBIYW5kbGUgZGV2aWNlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzIGluIFVDRC1TTk1QLU1JQjo6ZHNrRGV2aWNlCisgICAgICAtIEltcGxlbWVudCBpcE5ldFRvUGh5c2ljYWxMYXN0VXBkYXRlZAorICAgICAgLSBJbXBsZW1lbnQgaXBBZGRyZXNzU3BpbkxvY2sKKyAgICAgIC0gSW1wcm92ZSBlZmZpY2llbmN5IG9mIHNjYWxhcl9ncm91cCBoZWxwZXIuCisgICAgICAtIEltcHJvdmUgcGFyc2luZyBvZiAtTFMgY29tbWFuZCBsaW5lIGFyZ3VtZW50CisgICAgICAtIFJlZ2lzdGVyIENQVS9tZW1vcnkgaGFyZHdhcmUgbW9kdWxlcyB3aXRoIG5zQ2FjaGVUYWJsZS4KKyAgICAgIC0gUmVpbXBsZW1lbnRhdGlvbiBvZiBMTS1TRU5TT1JTLU1JQgorICAgICAgLSBSZWltcGxlbWVudGF0aW9uIG9mIHNubXBNUERTdGF0cy4KKyAgICAgIC0gUmVpbXBsZW1lbnRhdGlvbiBvZiB1c21TdGF0cy4KKyAgICAgIC0gUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMuCisgICAgICAtIFN1cHByZXNzIGFubm95aW5nICJyZWdpc3RyYXRpb24gIT0gZHVwbGljYXRlIiB3YXJuaW5nIGZvciByb290IG9pZHMKKyAgICAgIC0gVW5pZnkgYWxsIHNubXBkIHN0YXRpc3RpYyB2YXJpYWJsZXMgd2l0aCBhIGNvbW1vbiBoYW5kbGVyLgorICAgICAgLSBVc2UgdGhlIHdvcmtlciBoZWxwZXJzIGZyb20gdGhlIHJlZ2lzdGVyXypfaW5zdGFuY2UgaGVscGVycyBhbmQKKwlzY2hlZHVsZSB0aGUgaW5zdGFuY2UgaGVscGVycyBmb3IgcmVtb3ZhbCBpbiA1LjYKKyAgICAgIC0gVXNlIHN0YXRpYyB3YXRjaGVyX2luZm8gZm9yIGFsbCB3YXRjaGVkIHZhcmlhYmxlcyBhbmQgaW4gaW50X3dhdGNoLgorICAgICAgLSBmaXggcG9zc2libGUgY3Jhc2ggd2hlbiA2NC1iaXQgY291bnRlcnMgaW4gaXBTeXN0ZW1TdGF0c1RhYmxlIGdldAorCWJpZ2dlciB0aGFuIDJeMzIKIAogICAgIHNubXB0cmFwZDoKKyAgICAgIC0gW0JVRyAxNjM4MjI1XTogRml4IGludGVycHJldGF0aW9uIG9mIHRyYW5zcG9ydCBhZGRyZXNzIGRhdGEuCiAgICAgICAtIFtCVUcgMTk1NTIyN106IE1lbW9yeSBsZWFrIGZvciBlbWJlZGRlZCBQZXJsIG9uIHg4Nl82NAogICAgICAgLSBbUEFUQ0ggMTc0Njk5Ml06IEltcHJvdmUgc25tcHRyYXBkIGFjY2Vzcy1jb250cm9sIGVycm9yIG1lc3NhZ2VzLgogICAgICAgLSBbUEFUQ0ggMTc2NzcyNV06IENsb3NlIGFsbCBub24gc3RhbmRhcmQgZmlsZSBoYW5kbGVzCisgICAgICAtIFtQQVRDSCAxOTA4Mjg4XTogUnVuIHBlcmwgRU5EIGJsb2NrIG9uIHRlcm1pbmF0aW9uCisgICAgICAtIFtQQVRDSCAyNzI2MzAyXTogUGFzcyByZXN1bHRzIG9mIFBlcmwgdHJhcCBoYW5kbGVycyB0byB0cmFwIGRhZW1vbgorICAgICAgLSBbUEFUQ0ggMTIyNTQ0MF06IERlbGF5IHNpZ2h1cCB0aWxsIGl0IGlzIHNhZmUuCisgICAgICAtIFtGRUFUVVJFICA3NDEzNzVdOiBFeHRlbmQgLUYgZmxhZyB0byBjb3ZlciBzeXNsb2cvZXhlY3V0ZSBmb3JtYXQgc3RyaW5ncy4KKyAgICAgIC0gW0ZFQVRVUkUgMTE1OTk0N106IEFsbG93IGNvbnRyb2wgb2YgdHJhcGhhbmRsZSBkYXRhIGZvcm1hdAorICAgICAgLSBBZGQgdHJhcCBoYW5kbGVyIGZvciBsb2dnaW5nIHRyYXBzIHRvIGEgbXlzcWwgZGF0YWJhc2UKKyAgICAgIC0gU3VwcG9ydCBmb3IgZm9yd2FyZGluZyB0cmFwcyBieSBPSUQgc3VidHJlZS4KKyAgICAgIC0gU3VwcG9ydCBwZXItdHJhcCBmb3JtYXQgc3BlY2lmaWNhdGlvbnMKKyAgICAgIC0gV2l0aGRyYXcgZGVwcmVjYXRlZCBvcHRpb25zLgorCisgICAgYXBwczoKKyAgICAgIC0gW0JVRyAxOTY0MTM2XTogRHJvcCBOVUxMIHR5cGUgZnJvbSBzbm1wc2V0IHVzYWdlIG1lc3NhZ2UuCisgICAgICAtIFtCVUcgMjgxMTU3N106IEZpeCBidWcgaW4gR2V0QnVsayBoYW5kbGluZy4gRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5CisJaW5kZXggdmFsdWVzIHRoYXQgY29udGFpbiBhICc6JyBjaGFyYWN0ZXIuCisgICAgICAtIFtQQVRDSCAxNTI5NTIzXTogQ2xvc2UgU05NUCBzZXNzaW9uIG9uIGZhaWx1cmUuCisgICAgICAtIEltcHJvdmUgcGFyc2luZyBvZiAtTFMgY29tbWFuZCBsaW5lIGFyZ3VtZW50CisKKyAgICBzbm1wbmV0c3RhdDoKKyAgICAgIC0gW1BBVENIIDI1NjQ1MzhdOiBTdXBwb3J0IEdFVEJVTEsgaW4gdjJjKyBzbm1wIHZlcnNpb25zCisKKyAgICBzbm1wdXNtOgorICAgICAgLSBbUEFUQ0ggMTU5MTM1NV06IEFsbG93IGNsb25pbmcgdG8gYXJiaXRyYXJ5IGVuZ2luZUlEcworCisgICAgc25tcHdhbGs6CisgICAgICAtIFtQQVRDSCAxNzIzNjIwXTogU3BlY2lmeSBhbiBleHBsaWNpdCBlbmQtcG9pbnQgZm9yIHRoZSB3YWxrLgogCiAgICAgYnVpbGQ6CisgICAgICAtIFtCVUcgMTA5NjE2Nl06IEhhbmRsZSAtLXdpdGhvdXQtbG9nZmlsZSBjb3JyZWN0bHkuCisgICAgICAtIFtCVUcgMTU2NzMyNF06IENsYXJpZnkgcHJvbXB0aW5nIGZvciB1c2VyLXN1cHBsaWVkIHZhbHVlcy4KKyAgICAgIC0gW0JVRyAxNjAwMDkzXTogYXV0b2NvbmYgMi42MCBicmVha3MgdGhlIGJ1aWxkCisgICAgICAtIFtCVUcgMTY0Nzk3Nl06IEN5Z3dpbi9NaW5HVyBXaW5kb3dzIGJ1aWxkIGZhaWxzIGR1ZSB0byBsaWJ0b29sIGVycm9yCisgICAgICAtIFtCVUcgMTcwNzQ2OV06IFdpbjMyOiBzbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCBub3QgaW5zdGFsbGVkCiAgICAgICAtIFtCVUcgMTgwMjgzM106IEVuc3VyZSBzbm1wdHJhcGQgYnVpbGRzIHdpdGggLS1kaXNhYmxlLXNubXB2MS8yYworICAgICAgLSBbQlVHIDE4MjMzODFdOiBVc2UgYSBzZW5zaWJsZSBkZWZhdWx0IE1JQkRJUiBwYXRoIG9uIEN5Z3dpbi9NaW5HVwogICAgICAgLSBbQlVHIDE4MjMzODFdOiBWYWxpZCBNSUIgZGlyZWN0b3J5IHNlYXJjaCBwYXRoIG9uIFdpbmRvd3MKICAgICAgIC0gW0JVRyAxODcyMjY2XTogUEVSTENDIGNoZWNrIGZhaWxzIGZvciBDQyB3aXRoIG9wdGlvbnMKLSAgICAgIC0gW0JVRyAxOTk1MTcyXTogZml4IC0td2l0aG91dC1lbGYgY29uZmlndXJlIHVzYWdlCisgICAgICAtIFtCVUcgMTk5NTE3Ml06IGZpeCAtLXdpdGhvdXQtZWxmIGNvbmZpZ3VyZSB1c2FnZSBtZXNzYWdlCiAgICAgICAtIFtCVUcgMjAxNDUyNl06IFdpbjMyOiBzbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCBub3QgaW5zdGFsbGVkCiAgICAgICAtIFtCVUcgMjAyMzgwM106IENvbXBpbGF0aW9uIHByb2JsZW1zIG9uIEhQLVVYIDExLjMxCi0gICAgICAtIFtQQVRDSCAxNjgxMDM1XTogaW1wcm92ZSBuZXQtc25tcC1jb25maWcgL2Jpbi9zaCBjb21wYXRpYmlsaXR5CisgICAgICAtIFtCVUcgMjA5NTk4M106IGZpeCBzeW50YXgvcGVybWlzc2luZyBlcnJvciBpbiBmaW5kLXJlcXVpcmVzIGhlbHBlciBzY3JpcHQKKyAgICAgIC0gW0JVRyAyMTY4MTgwXTogSW1wcm92ZSBoYW5kbGluZyBvZiB2YXJpb3VzIC0tZW5hYmxlLy0tZGlzYWJsZSBvcHRpb25zLgorICAgICAgLSBbQlVHIDI3ODI3MDBdOiBidWlsZCBmYWlsdXJlIHdoZW4gdXNpbmcgLS13aXRoLXBrY3Mgb24gU29sYXJpcworICAgICAgLSBbUEFUQ0ggMTU3NzkxN106U2ltcGxpZnkgbWFrZWZpbGUgdGFyZ2V0IHJlZmVyZW5jZXMgKHBhdGNoIGZyb20gQXBwbGUpCisgICAgICAtIFtQQVRDSCAxNjAwNDUzXTogRml4IGNyb3NzLWNvbXBpbGUgYnVpbGRzIGluIGFwcGxlcyBidWlsZCBlbnZpcm9ubWVudC4KKyAgICAgIC0gW1BBVENIIDE2MjQ0MDZdOiBvcHRpb24gdG8gaGFyZGNvZGUgbG9jYXRpb24gb2YgbW91bnQgdGFibGUKKyAgICAgIC0gW1BBVENIIDE2MjUxMzVdOiBjb25maWd1cmUgbG9jYXRpb24gb2YgcHl0aG9uIGludGVycHJldGVyIAorICAgICAgLSBbUEFUQ0ggMTY3ODMwMF06IGNvbXBpbGUtc3ViYWdlbnQgZG9lc24ndCBjYWxsIHNodXRkb3duXyBtZXRob2RzCisgICAgICAtIFtQQVRDSCAxNjgxMDczXTogI2lmZGVmIGJhc2VkIGNvbmZpZ19lcnJvciBpbnN0ZWFkIG9mIHNwZWNpYWwgY2FzZXMKKyAgICAgIC0gW1BBVENIIDE3MjgyNDFdOiBBZGQgY29uZmlndXJlIGNoZWNrIGZvciA8c3lzL3Vpby5oPgorICAgICAgLSBbUEFUQ0ggMTcyODIzMF06IGFkZCBjb25maWd1cmUgY2hlY2sgZm9yIGdhaV9zdHJlcnJvcigpCisgICAgICAtIFtQQVRDSCAxNzI4MjMzXTogbWFrZSBzdXJlIHR5cGUgbmZkc190IGlzIGRlZmluZWQKKyAgICAgIC0gW1BBVENIIDE3MjgyMzddOiBNb3ZlIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGF0IHRoZSB0b3Agb2YgbmV0c25tcF91ZHBfc2VuZHRvCisgICAgICAtIFtQQVRDSCAxNzI4MjQ0XTogQWRkIGNvbmZpZ3VyZSBjaGVjayBmb3Igc2luNl9zY29wZV9pZAorICAgICAgLSBbUEFUQ0ggMTcyODI0N106IEFkZCB0eXBlIGNoZWNrIGZvciBpbnQ/P190IGFuZCB1aW50Pz9fdAogICAgICAgLSBbUEFUQ0ggMTg5OTc2Ml06IFR3ZWFrIGVtYmVkZGVkX3BlcmwgY29uZmlndXJlIGNoZWNrcy4KLSAgICAgIC0gYWRkIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBjb25maWd1cmUgb3B0aW9uCi0gICAgICAtIEFkZCBzdXBwb3J0IGZvciB3aW5FeHRETEwgdG8gYnVpbGQuYmF0ICh3aW4zMikKLSAgICAgIC0gRGlzYWJsZSBhZ2VudCB0ZXN0cyBpZiBidWlsdCB3aXRob3V0IG5lY2Vzc2FyeSBtaWIgbW9kdWxlcwotICAgICAgLSBMaW1pdCB0aGUgdXNlIG9mIF9LRVJORUwgZGVmaW5pdGlvbnMgaW4gY29uZmlndXJlIHRlc3RzIHRvIG1hdGNoCi0gICAgICAgIHRoZSB1c2Ugb2YgX0tFUk5FTCBpbiBvdXIgY29kZWJhc2UKLSAgICAgIC0gVXBkYXRlIHRvIGxpYnRvb2wgMS41LjI2Ci0KLSAgICBtaWIyYzoKLSAgICAgIC0gW0JVRyAxODc0MDU5LDE3MzcwNjhdOiBIYW5kbGUgTUlCIG9iamVjdHMgd2l0aCBlbWJlZGRlZCBoeXBoZW5zCi0gICAgICAtIFtQQVRDSCAxOTE0Mzk4XTogaW5zdGFsbCBtaWIyYy5wZXJsLmNvbmYKKyAgICAgIC0gW1BBVENIIDIwMDA4NzRdOiBDbGVhbnVwIHRyYW5zcG9ydCBzZWxlY3Rpb24uCisgICAgICAtIFtQQVRDSCAyMDkxMTU2XTogY29ycmVjdGx5IGRlY2xhcmUgZGVwZW5kZW5jaWVzIGluIE1ha2VmaWxlLiAnbWFrZSAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4KKyAgICAgIC0gW1BBVENIIDIxODQwMzldOiBGaXhlcyBmb3IgZnJlZWluZyBtZW1vcnkgZHVyaW5nIGVycm9yIGNvbmRpdGlvbnMuCisgICAgICAtIFtQQVRDSCAyNzk3MjUxXTogU3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXNhdGlvbi9zaHV0ZG93biwgZml4IG1lbW9yeSBsZWFrcworICAgICAgLSBBZGQgYSB2YXJpYXRpb24gb2YgQUNfU0VBUkNIX0xJQlMgd2hlcmUgdGhlIHJlc3VsdCBpcyBzZXR0YWJsZS4KKyAgICAgIC0gQWRkICJCdWlsZFJlcXVpcmVzOiBwZXJsLUV4dFV0aWxzLUVtYmVkIiB0byB0aGUgc3BlYyBmaWxlCisgICAgICAtIEFkZCAnLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuJyBjb25maWd1cmUgb3B0aW9uCisgICAgICAtIEFzc3VtZSB0YXJnZXQgcGxhdGZvcm0gc3VwcG9ydHMgbWVte2NweSxtb3ZlLHNldH0gJiBzdHJ7LHJ9Y2hyCisgICAgICAtIERpc2FibGUgaW5saW5pbmcgb24gc29sYXJpcyAoZHVlIHRvIGxpbmtpbmcgZXJyb3JzKQorICAgICAgLSBEaXNhYmxlIE1JQi1zcGVjaWZpYyB0ZXN0cyBpZiB0aGUgYWdlbnQgb21pdHMgdGhlIG5lY2Vzc2FyeSBtb2R1bGVzLgorICAgICAgLSAnLS1kaXNhYmxlLWFzLW5lZWRlZCcgcmV2ZXJ0cyB0byBsaW5raW5nIHN5c3RlbSBsaWJzIGludG8gYXBwbGljYXRpb25zCisgICAgICAtIERvIG5vdCBjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKSBpZiBub3RoaW5nIGZyb20gdXRpbF9mdW5jcyBpcyB1c2VkCisgICAgICAtIERvIG5vdCByZXF1aXJlIHVzZSBvZiAtLXdpdGgtZW5kaWFubmVzcyB3aGVuIGNyb3NzLWNvbXBpbGluZy4KKyAgICAgIC0gRml4IGJ1aWxkIGlzc3VlcyB3aXRoIGV0aHRvb2wgKG9uIFJIOSkuCisgICAgICAtIEZpeCBjaGVja3MgZm9yIHN1cHBvcnQgb2Ygc3RhdGljIGlubGluZSBmdW5jdGlvbnMKKyAgICAgIC0gRml4IGNvbXBpbGF0aW9uIG9uIElSSVgKKyAgICAgIC0gRml4IG1hY3JvIGZvciAnLS13aXRoLWZlYXR1cmVzLW9mJworICAgICAgLSBJbXByb3ZlIGxpYnJhcnkgbGF5ZXJpbmcgJiBkZXBlbmRlbmN5IGhhbmRsaW5nIHdoZW4gbGlua2luZyBhcHBzCisgICAgICAtIEltcHJvdmUgcm9idXN0bmVzcyBvZiBzZWQvZ3JlcC9ldGMgY29tbWFucyAodXNpbmcgYXV0b2NvbmYgbWFjcm9zKQorICAgICAgLSBJbXByb3ZlIFJQTSBzcGVjIGZpbGVzLCBmb3IgY29uc2lzdGVuY3kgd2l0aCB2ZW5kb3ItcHJvdmlkZWQgcGFja2FnZXMuCisgICAgICAtIE1lY2hhbmlzbSBmb3Igc2VsZWN0aW5nIGJ1aWxkIGVudmlyb25tZW50IGJhc2VkIG9uIHZlcnNpb24KKyAgICAgIC0gTmV3IE5FVFNOTVBfQVJHX1dJVEgvRU5BQkxFIG1hY3JvcyB0byBjYXRjaCBpbmNvcnJlY3QgJ3dpdGgvZW5hYmxlJyB1c2FnZQorICAgICAgLSAnLS1lbmFibGUtaXB2Nicgc2hvdWxkIG9ubHkgZW5hYmxlICdtaWJJSS9pcHY2JyBvbiBzdXBwb3J0ZWQgc3lzdGVtcworICAgICAgLSBSZW1vdmUgTmV0LVNOTVAgc3BlY2lhbC1jYXNlIGhhbmRsaW5nIG9mIHN0YW5kYXJkIGZ1bmN0aW9uYWxpdHkuCisgICAgICAtIFJlc3RydWN0dXJlIGNvbmZpZ3VyZSB0ZW1wbGF0ZQorICAgICAgLSBTdHJpY3RlciBjaGVja3Mgb24gJy0td2l0aC1wZXJzaXN0ZW50LW1hc2snIHZhbHVlcworICAgICAgLSBVcGRhdGUgdG8gYXV0b2NvbmYgMi42MyAmIGxpYnRvb2wgMi4yLjYKKyAgICAgIC0gVXNlICdjb25maWdfZXJyb3InIHRvIGdlbmVyYXRlIGVycm9yIG1lc3NhZ2VzIGF0IGNvbmZpZ3VyZSB0aW1lLgorICAgICAgLSBVc2UgTERGTEFHUyB3aGVuIGJ1aWxkaW5nIGFnZW50LCBoZWxwZXJzIGFuZCBtaWIgbGliCisgICAgICAtIFVzZSAibGlidG9vbCBjbGVhbiIgdG8gZW5zdXJlIHJlbW92YWwgb2YgYWxsIGxpYnRvb2wgdGVtcCBmaWxlcy4KKyAgICAgIC0gYWxsb3cgYnVpbGRpbmcgd2l0aCBQZXJsIHZlcnNpb25zIHRoYXQgbGFjayBQRVJMX0VYSVRfREVTVFJVQ1RfRU5ECisgICAgICAtIGJ1aWxkIGZpeCBmb3IgVHJ1NjQgVW5peCBhbmQgSVJJWDogbW92ZSBfWE9QRU4qIGRlZmluaXRpb25zIHRvCisJd2hlcmUgdGhleSBhcmUgaW4gNS40LnggYW5kIGVhcmxpZXIKIAogICAgIGRvY3VtZW50YXRpb246CisgICAgICAtIFtCVUcgMTI0NzE2NF06IERvY3VtZW50IHVzZSBvZiBPSUQgbWFjcm9zCisgICAgICAtIFtCVUcgMTQwNzQ3Nl06IENsYXJpZnkgTUlCIHBhcnNpbmcgdG9nZ2xlIG9wdGlvbnMgJiBjb21tZW50IGhhbmRsaW5nLgorICAgICAgLSBbQlVHIDE2MTQxMDRdOiBicm9rZW4gc25tcGQoOCkgbWFudWFsIHBhZ2UgaW4gNS40CiAgICAgICAtIFtCVUcgMjAyNzEyOV06IGZpeCB0eXBvIGluIHNubXBjbWQuMQorICAgICAgLSBbUEFUQ0ggMTYwNDU4MF06IFNOTVAoMykgbWFudWFsIHBhZ2UgY29ycmVjdGlvbnMKKyAgICAgIC0gW1BBVENIIDE2NDQ3MzVdOiBBZGQgZ2NjIGJ1aWxkIGluc3RydWN0aW9ucyBmb3IgSVJJWAorICAgICAgLSBGaXggbWlub3IgZG9jdW1lbnRhdGlvbiBidWdzIChwYXRjaCBmcm9tIEFwcGxlKQorCisgICAgbWliMmM6CisgICAgICAtIFtCVUcgIDgzMzY3M106IE1vcmUgZm9jdXNlZCBzaXplIGNoZWNrcy4KKyAgICAgIC0gW0JVRyAxNDI5NDcyXTogUHJvdGVjdCBhZ2FpbnN0IG1pc3NpbmcgaW5zdGFuY2VzIChhbmQgaW52YWxpZCBvYmplY3RzKQorICAgICAgLSBbQlVHIDE1ODI5NzJdOiBIYW5kbGUgQHdoaWxlQC9AZW5kQCBwcm9wZXJseS4KKyAgICAgIC0gW0JVRyAxNzM3MDY4XTogSGFuZGxlIE1JQiBvYmplY3RzIHdpdGggZW1iZWRkZWQgaHlwaGVucworICAgICAgLSBbQlVHIDE4NzQwNTldOiBIYW5kbGUgTUlCIG9iamVjdHMgd2l0aCBlbWJlZGRlZCBoeXBoZW5zCisgICAgICAtIFtQQVRDSCAxNjY4MTcxXTogc2tpcCB1bmtub3duIGNvbHMgaW4gbWluL21heCByYW5nZSBmb3IgdGFibGVzCisgICAgICAtIFtQQVRDSCAxNzE5MjQ0XTogRml4IG1mZCBnZW5lcmF0aW5nIG1hcCBmdW5jdGlvbgorICAgICAgLSBbUEFUQ0ggMTkxNDM5OF06IGluc3RhbGwgbWliMmMucGVybC5jb25mCisgICAgICAtIFtQQVRDSCAyMTM2NDM3XTogSW1wcm92ZSBGTEFHIGRlZmluZXMgZm9yIGh1Z2UgdGFibGVzIG9uIDY0Yml0IHN5c3RlbXMKKyAgICAgIC0gW1BBVENIIDIzMTYxMjddOiBGaXggYnVnIGluIGl0ZXJhdGVfYWNjZXNzIGdlbmVyYXRlZCBjb2RlLgogCiAgICAgbWlzYzoKLSAgICAgIC0gQXZvaWQgY2FsbGluZyBkZWJ1ZyBtYWNyb3Mgd2l0aCB0b28gZmV3L21hbnkgYXJndW1lbnRzLgotICAgICAgLSBlbmhhbmNlIHNubXBuZXRzdGF0IHRlc3QgdG8gY2hlY2sgdGNwVGFibGUgaW4gVENQIG1vZGUKKyAgICAgIC0gW1BBVENIIDE3Mzc3MjddOiBBZGQgYSBORVRTTk1QX09MREFQSV8gcHJlZml4IHRvIG9sZC1hcGkgYWNjZXNzIG1hY3Jvcy4KKyAgICAgIC0gW1BBVENIIDE3Mzc3MjddOiBSZXBsYWNlIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFIHdpdGggTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyAgICAgIC0gQWRkIGNvbmZpZyByZXJlYWQgc3VwcG9ydCB0byAibmV0LXNubXAtY29uZmlnIC0tY29tcGlsZS1zdWJhZ2VudCIgY29kZS4KKyAgICAgIC0gQXZvaWQgY2FsbGluZyBkZWJ1ZyBtYWNyb3Mgd2l0aCB3cm9uZyBudW1iZXIgb2YgYXJndW1lbnRzLgorICAgICAgLSBEb24ndCB1c2UgdGhlIGxlZ2FjeSBzeW1ib2wgU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCisgICAgICAtIFByZWxpbWluYXJ5IChhbHBoYSkgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFNTSCBhbmQgRFRMUy9VRFAuCisgICAgICAtIFByZWxpbWluYXJ5IChhbHBoYSkgc3VwcG9ydCBmb3IgdGhlIFRTTSBzZWN1cml0eSBtb2RlbAorICAgICAgLSBTZXBhcmF0ZSB1c2VyIG1hbmFnZW1lbnQgaW50byBuZXcgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgc2NyaXB0CisKKyAgICB1bnNwZWNpZmllZDoKKyAgICAgIC0gW0JVRyAxNTk2NjM4XTogbWVtb3J5IGxlYWsgaW4gaXBDaWRyUm91dGVUYWJsZSwgaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAtIFtCVUcgMTYxMTUyNF06IGZpeCB0Y3AgY29ubmVjdGlvbiB0YWJsZSBmZCBsZWFrCisgICAgICAtIFtCVUcgMTc5MzU0NV06IFRha2UgdGhlIG5hbWUgZnJvbSB0aGUgc29ja2FkZHJfdW4gaW4gb3JkZXIgdG8gYXZvaWQKKwkgICAgICAgICAgICAgICB0cmFuc3BvcnQgc3BlY2lmaWVycyBhbmQgb3RoZXIgZGVjb3JhdGlvbnMuCisgICAgICAtIFtCVUcgMTgwMTgzNV06IE11bHRpcGxlIGRlZmF1bHQgdHJhbnNwb3J0cyBmb3IgYW4gYXBwbGljYXRpb24uCisgICAgICAtIFtCVUcgMTg1MTA0N106IERvbid0IGNvbnRpbnVlIHRvIHByb2Nlc3MgYSBjb3JydXB0IHdhdGNoZWQgdmFsdWUuCisgICAgICAtIFtQQVRDSCAxNjAxNDUzXTogRHluYW1pYyBNZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBpbXByb3ZlbWVudHMKKyAgICAgIC0gW1BBVENIIDE2NzQyOThdOiBSZW1vdmUgdW51c2VkIHNpbmtwb3J0IHZhcmlhYmxlCisgICAgICAtIFtQQVRDSCAxNjc0Mjk5XTogTGVzc2VuIHNjb3BlIG9mIHpvbmUgdmFyaWFibGUgaW4gZHVtcF9yZWFsbG9jX29pZF90b19pbmV0YWRkcmVzcworICAgICAgLSBbUEFUQ0ggMTY3NDMwMl06IExlc3NlbiBzY29wZSBvZiBsZW4gdmFyaWFibGUgaW4gY29udmVydF92MnBkdV90b192MQorICAgICAgLSBbUEFUQ0ggMTY3ODI5OF06IGNvbXBpbGUtc3ViYWdlbnQgY2hlY2tzIGZvciBiYWQgSEFWRV9TSUdOQUxfSAorICAgICAgLSBbUEFUQ0ggMTY3ODMwMl06IG5ldHNubXBfbWliaW5kZXhfbG9hZCBsZWFrcyBtZW1vcnkKKyAgICAgIC0gW1BBVENIIDE2ODEwMzVdOiBJbXByb3ZlIG5ldC1zbm1wLWNvbmZpZyAvYmluL3NoIGNvbXBhdGliaWxpdHkKKyAgICAgIC0gW1BBVENIIDE5MDIxMDVdOiBIaWRlIGFuZCBpbXByb3ZlIGRlYnVnIGxvZyBtZXNzYWdlcworICAgICAgLSBbUEFUQ0ggMTkwMjExM106IEZpeCBlcnJvciBsb2cgaW4gaW5ldE5ldFRvTWVkaWF0YWJsZQorICAgICAgLSBGaXggZm9yIHJlZnMgdG8gT0JKRUNULUdST1VQIGluIGFub3RoZXIgTUlCCisgICAgICAtIEluaXRhbGl6ZSBsb2cgc3Vic3lzdGVtCisgICAgICAtIFJlbW92ZSBzdXBwb3J0IGZvciB1c2Ugb2YgdmFyYXJncy5oLgogCiAgICAgcGVybDoKKyAgICAgIC0gW0JVRyAxNDUwNjY5XTogYSBwZXJsIGFnZW50eCBjb25zdW1lcyBtZW1vcnkKKyAgICAgIC0gW0JVRyAxNTU0ODE3XTogRml4IGNsYXNzIGFzc2lnbWVudCBzbyBnZXRSb290T0lEIHdvcmtzIHByb3Blcmx5LgogICAgICAgLSBbQlVHIDE2MDYwNjJdOiBwZXJsIGJ1bGt3YWxrIChhc3luYykgY29yZWR1bXAKKyAgICAgIC0gW0JVRyAxNjE5ODI3XTogaW1wcm92ZSBoYW5kbGluZyBvZiBsaW5rIGRlcGVuZGVuY2llcwogICAgICAgLSBbQlVHIDE3NDc3MzNdOiBNb3JlIHJvYnVzdCBoYW5kbGluZyBvZiB1bmRlZmluZWQgdmFsdWVzLgotICAgICAgLSBbQlVHIDE4MjYxNzRdOiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4gcHJpbnRpbmcgdmFsdWVzLgogICAgICAgLSBbQlVHIDE4MzQ1MzldOiBDb25zaXN0ZW50IGhhbmRsaW5nIG9mIE9JRCBwYXJzaW5nLgorICAgICAgLSBbUEFUQ0ggMTYyNzk0OV06IGEgcGVybCBhZ2VudHggY29uc3VtZXMgbWVtb3J5CisgICAgICAtIFtQQVRDSCAxNzI1MDQ5XTogRml4IGJ1bGt3YWxrIGluIGNhc2VzIG9mIG5vbi1yZXBlYXRlciB1c2FnZS4KICAgICAgIC0gW1BBVENIIDE4MTE0NjNdOiBwZXJsIGFzeW5jIGNhbGxiYWNrIGNvcmVkdW1wCisgICAgICAtIFtQQVRDSCAxODM0OTgzXTogQ29uc2lzdGVudCBoYW5kbGluZyBvZiBPSUQgcGFyc2luZy4KICAgICAgIC0gW1BBVENIIDE5MTQzOTNdOiByZWdpc3RlckFnZW50IGNhbiBub3cgYmUgcnVuIG11bHRpcGxlIHRpbWVzCiAgICAgICAtIFtQQVRDSCAxOTE0NjQzXTogZml4IGlzc3VlcyB3aXRoIGVtYmVkZGVkIHBlcmwKICAgICAgIC0gW1BBVENIIDE5MTQ2NDVdOiBiZXR0ZXIgZW5kIG9mIG1pYiBzdXBwb3J0CiAgICAgICAtIFtQQVRDSCAxOTIwMzkwXTogZml4IHJlZ2lzdHJhdGlvbiBvZiB0YWJsZXMgd2l0aCAuMCBhcyBJSURzCi0gICAgICAtIFtQQVRDSCAyMDIxNDQ0XTogU3VwcG9ydCBTTk1QdjJjIGluIGdldHRhYmxlCi0gICAgICAtIGZpeGVkIGFuIGV4dHJhIGJyYWNlIGluIHRoZSBkb2NzIHBvaW50ZWQgb3V0IGJ5IEphc29uIE1hcnRpbgotCi0gICAgcHl0aG9uOgotICAgICAgLSBbQlVHIDE4MjYxNzRdOiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4gcHJpbnRpbmcgdmFsdWVzCi0gICAgICAtIFtCVUcgMTg2ODI3OF06IFB5dGhvbiBzZWdmYXVsdCAoaW50cm9kdWNlZCBieSByMTY5NjIpCi0gICAgICAtIFtQQVRDSCAxODYyMTc3XTogbWFkZSBjb2RlIG1vcmUgd2luZG93cy9jeWd3aW4gY29tcGlsZXIgZnJpZW5kbHkKLSAgICAgIC0gW1BBVENIIDE4Nzc4NDBdOiBmaXggTUlCIGxhYmVsIGFuZCBpbmRleGluZyBkdWUgdG8gYnJva2VuIHJlZ2V4cAotCi0gICAgQUlYOgotICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgQUlYIDYueC4KLQotICAgIExpbnV4OgotICAgICAgLSBbUEFUQ0ggMTk2OTYyN106IEhhbmRsZSBlbXB0eSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrIGZpbGUKLSAgICAgIC0gSW1wcm92ZWQgUlBNIHNwZWMgZmlsZXMsIGZvciBiZXR0ZXIgY29uc2lzdGVuY3kgd2l0aAotICAgICAgICB2ZW5kb3ItcHJvdmlkZWQgcGFja2FnZXMKLQotICAgIFNvbGFyaXM6Ci0gICAgICAtIFtCVUcgMTgxMDgxNF06IHRjcFRhYmxlIG1pc3NpbmcgZW50cmllcyBhbmQgd3JvbmcgcG9ydHMKLSAgICAgIC0gW1BBVENIIDE4MjQxOTZdOiB7aWZPcGVyU3RhdHVzLGlwQWRFbnRJZkluZGV4fSByZXBvcnRlZCBpbmNvcnJlY3RseQotICAgICAgLSBbUEFUQ0ggMTgzNDY5OV06IEZpeCAxODMzMjk0OiBETFBJIHByb2JsZW1zIG9uIFNvbGFyaXMgMi42Ci0gICAgICAtICNkZWZpbmUgTkVXX01JQl9DT01QTElBTlQgdG8gc3VwcG9ydCBTb2xhcmlzIDEwVTQrCi0KLSogNS40LjEgKgotCi0gICAgc25tcGxpYjoKLSAgICAgIC0gQ2hhbmdlIHNubXBfc2Vzc19hZGRfZXggdG8gY29uc2lzdGVudGx5IGNsb3NlIGFuZAotICAgICAgLSBEZWFsbG9jYXRlIHRoZSBjb25mbWlicyBhbmQgY29uZm1pYmRpcnMKLSAgICAgIC0gRkVBVFVSRVM6IDEwNDE4ODg6IENoZWNrIGRpcmVjdG9yeSBwYXRocyBmb3IKLSAgICAgIC0gRkVBVFVSRVM6IDg1MTg4NzogUmVwb3J0IHJhbmdlIGluZm9ybWF0aW9uIGZvcgotICAgICAgLSBSZWFkIHRoZSBjb25maWcgcGFyYW1ldGVycyBkZWZUYXJnZXQgYW5kCi0gICAgICAtIFVzZSB0aGUgZGVmYXVsdF90YXJnZXQgYXJndW1lbnQgaWYgaXQgaXMKLSAgICAgIC0gW0JVRyAxNjAwMTcxXTogU3VwcG9ydCBsb25nZXIgY29tbXVuaXR5IHN0cmluZ3MKLSAgICAgIC0gW0JVRyAxNjE5ODI3XTogbGluayBhZ2FpbnN0IG5lZWRlZCBleHRlcm5hbAotICAgICAgLSBbQlVHIDE2MTk4MjddOiBsaW5rIG5ldC1zbm1wIGxpYnJhcmllcyBhbmQgYmluYXJpZXMKLSAgICAgIC0gW0JVRyAxNjYwMDYxXTogVmFsaWRhdGUgZW5naW5lSURzIG1vcmUgc3RyaWN0bHkuCi0gICAgICAtIFtQQVRDSCAxNTQ4NjcwXTogRml4IHJhbmdlIGNoZWNrcyBmb3IgdW5zaWduZWQKLSAgICAgIC0gW1BBVENIIDE1OTI3MDZdOiBGaXggbWVtb3J5IGxlYWsgd2hlbiBjbG9uaW5nCi0gICAgICAtIFtQQVRDSCAxNjE2OTEyXTogZml4Ci0gICAgICAtIFtQQVRDSCAxNjIwNDI0XTogSG9ub3IKLSAgICAgIC0gW1BBVENIIDE2MzQ2MjBdOiBGaXggbGVha3MgZnJvbQotICAgICAgLSBbUEFUQ0ggMTY0MDExNF06IERvbid0IHN0b3JlIHRyYWlsaW5nIG51bGwKLSAgICAgIC0gW1BBVENIIDE2NDE4OTVdOiBFeHRlbmQgc2hvcnQgdmlldyBtYXNrcyAoYXMgcGVyCi0gICAgICAtIFtQQVRDSCAxNjQxOTcyXTogYWRkIG1pc3NpbmcgY29uc3QKLSAgICAgIC0gW1BBVENIIDE2NTM2NzBdOiBDb25zaXN0ZW50IFNOTVB2MyBiZWhhdmlvdXIKLSAgICAgIC0gW1BBVENIIDE2ODEwMzBdOiBCZXR0ZXIgaGFuZGxpbmcgb2YgZW1wdHkKLSAgICAgIC0gW1BBVENIIDE2ODczMTZdOiBEb24ndCBkcm9wIGNvbnN0IGZyb20gY2FzdHMuCi0gICAgICAtIFtQQVRDSCAxNjg3MzI1XTogRml4IHByb2JsZW0gd2l0aCBvcGVyYXRvcgotICAgICAgLSBpbmNyZW1lbnQgImN1cnJlbnQiIGFuZCAiYWdlIiBhY2NvcmRpbmcgdG8KLSAgICAgIC0gbGlicmFyeSBsYXllcmluZyBpbXByb3ZlbWVudHM6IGludHJvZHVjZQotICAgICAgLSBwYXRjaDogMTY0NTY5ODogZml4IDY0LWJpdCBzaWduZWQgaW50ZWdlcgotCi0gICAgc25tcGFwaToKLSAgICAgIC0gRG8gbm90IHVzZSBnZXRzZXJ2YnluYW1lIHRvIGZpbmQgZGVmYXVsdCBwb3J0Ci0KLSAgICBzbm1wZDoKLSAgICAgIC0gQ29ycmVjdCB0aGUgZGVwZW5kZW5jeSBpbmZvcm1hdGlvbiBmb3IKLSAgICAgIC0gW0JVRyAxMDQ2MzI3XTogUmVzZXQgImluY2x1ZGVBbGxEaXNrcyIgZmxhZyB3aGVuCi0gICAgICAtIFtCVUcgMTA3Mzc4Ml06IFJlc3RvcmUgUGVyZlN0YXQgdmFsdWVzIGZvciBGcmVlQlNECi0gICAgICAtIFtCVUcgMTEwMjA1OF06IFNraXAgbm9uLW1vdW50ZWQgZGlza3MgKGUuZy4gc3dhcAotICAgICAgLSBbQlVHIDExNTk5MDhdOiBGaXggbWVtb3J5IGxlYWsKLSAgICAgIC0gW0JVRyAxMzk3ODk1XTogaW5jbHVkZSBtaXNzaW5nIGludGVyZmFjZQotICAgICAgLSBbQlVHIDE0MTM3MjhdOiBSZWZlcmVuY2UgaW5kZXggdmFsdWVzIGluIGRlYnVnCi0gICAgICAtIFtCVUcgMTQxNjI3Nl06IEhhbmRsZSBkZXBlbmRlbmN5IG9uIE1JQiBwYXJzaW5nCi0gICAgICAtIFtCVUcgMTU0NjgxN106IEZpeCBzbm1wRW50ZXJwcmlzZSB2YXJiaW5kIHdoZW4KLSAgICAgIC0gW0JVRyAxNTU4ODIzXTogZml4IGlwQWRkcmVzc1RhYmxlIG1lbW9yeSBsZWFrCi0gICAgICAtIFtCVUcgMTYwMDI2MV06IEhhbmRsZSBub24teDg2IC9wcm9jL2NwdWluZm8gZm9ybWF0Ci0gICAgICAtIFtCVUcgMTYwMjI4Nl06IERvbid0IGxldCB0YWJsZSBob2xlcyBibG9jayBsYXRlcgotICAgICAgLSBbQlVHIDE2Mjg2MTNdOiBSZXN0b3JlIG1lbVRvdGFsRnJlZS4wIG9uIFNvbGFyaXMKLSAgICAgIC0gW0JVRyAxNjMzNTk1XTogRml4IEFnZW50WCBoYW5kbGluZyBvZiBDb3VudGVyNjQKLSAgICAgIC0gW0JVRyAxNjc3MDYzXTogQ2hlY2sgZm9yIGZhaWxlZCBtYWxsb2MgY2FsbHMuCi0gICAgICAtIFtCVUcgMTY4NTA2N106IE1vcmUgcHJlY2lzZSBoYW5kbGluZyBvZgotICAgICAgLSBbQlVHIDE2ODUwODFdOiBDaGVjayBmb3IgdmFsaWQgT0lEIG9uIEZyZWUvVW5kbwotICAgICAgLSBbQlVHIDE3MTI5ODhdOiBkZWZhdWx0IGFuZCBjb25maWd1cmFibGUgbWF4aW11bQotICAgICAgLSBbQlVHIDE3NDUxMTNdOiBIYW5kbGUgc2luZ2xlLWxpbmUgKGFuZCB6ZXJvLWxpbmUpCi0gICAgICAtIFtCVUcgMTc2MDYzM106IGZpeCB0eXBvIGluIGRlYnVnIG1lc3NhZ2UKLSAgICAgIC0gW0JVRyA5MDI2MTBdOiBEb24ndCBkaXNjYXJkIHBlbmRpbmcgZGF0YSBmb2xsb3dpbmcKLSAgICAgIC0gW0JVRyA5MDI4MDFdOiBGaXggb3JkZXJpbmcgb2YgU01VWC1yZWdpc3RlcmVkCi0gICAgICAtIFtQQVRDSCAxNjAxMTg4LCBdOiBCVUc6IDE2MDA0MzI6IEhhbmRsZSBzaWduYWxzCi0gICAgICAtIFtQQVRDSCAxNjIwNDI0XTogRml4IG5vdGlmaWNhdGlvbiBzZW5kaW5nIHNvIHRoYXQKLSAgICAgIC0gW1BBVENIIDE2MzcyODddOiBIYW5kbGUgbXVsdGlwbGUgdGFyZ2V0IHRhZ3MKLSAgICAgIC0gW1BBVENIIDE2MzkyODJdOiBTYXZlIHBlcnNpc3RlbnQKLSAgICAgIC0gW1BBVENIIDE2MzkzNjBdOiBGaXggc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZQotICAgICAgLSBbUEFUQ0ggMTYzOTcyNl06IFJlcG9ydCBwaHlzaWNhbCBtZW1vcnkKLSAgICAgIC0gW1BBVENIIDE2NDEzMzJdOiBJbmNsdWRlIG1pc3NpbmcgYWdlbnQgY29uZmlnCi0gICAgICAtIFtQQVRDSCAxNjQxNjg1XTogSGFuZGxlIHVucmVzcG9uc2l2ZSBBZ2VudFgKLSAgICAgIC0gW1BBVENIIDE2NDE4NjVdOiBEb24ndCBkb3VibGUgY2hlY2sgc25tcFRyYXBPSUQKLSAgICAgIC0gW1BBVENIIDE2NDIyNTVdOiBIYW5kbGUgc2F2aW5nIGxvbmcKLSAgICAgIC0gW1BBVENIIDE2NDQyODBdOiBEb24ndCBhdXRvbWF0aWNhbGx5IHByb2JlIGZvcgotICAgICAgLSBbUEFUQ0ggMTY0NDI4MF06IFVzZSB0aGUgY29ycmVjdCBlbmdpbmVJRCB3aGVuCi0gICAgICAtIFtQQVRDSCAxNjQ0NzE0XTogcmVwbGFjZQotICAgICAgLSBbUEFUQ0ggMTY1OTYyM106IEhhbmRsZSBTTVVYIHBlZXJzIHdpdGggYW4gZW1wdHkKLSAgICAgIC0gW1BBVENIIDE2NjU1NDldOiBIYW5kbGUgY3JlYXRpbmcgVkFDTSBlbnRyaWVzCi0gICAgICAtIFtQQVRDSCAxNjY1OTg1XTogSW1wbGVtZW50IGlwUmVhc21UaW1lb3V0Ci0gICAgICAtIFtQQVRDSCAxNjY2NzM3XTogaW5jbHVkZSBpcHY2IGNvdW50cyBpbgotICAgICAgLSBbUEFUQ0ggMTY2ODE5M106IEZpeCBjaGVjayBmb3IgdjYgUmVhc21NYXhTaXplCi0gICAgICAtIFtQQVRDSCAxNjY4MTkzXTogVXBkYXRlIHJlZ2lzdHJhdGlvbiBvZgotICAgICAgLSBbUEFUQ0ggMTY2ODk1Ml06IElnbm9yZSB6b21iaWUgcHJvY2Vzc2VzLgotICAgICAgLSBbUEFUQ0ggMTY3NjQ3OF06IGZpeCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3MKLSAgICAgIC0gW1BBVENIIDE2Nzg3ODhdOiBCZXR0ZXIgaGFuZGxpbmcgb2YgU01VWCBzb2NrZXQKLSAgICAgIC0gW1BBVENIIDE2ODMwNTRdOiBzZXQgdWRwRW5kcG9pbnRJbnN0YW5jZSB0bwotICAgICAgLSBbUEFUQ0ggMTY4NzMzNl06IFN0YXJ0IHVzaW5nIHRoZSBlbmhhbmNlZAotICAgICAgLSBbUEFUQ0ggMTY5Mjc2OF06IEZpeCBjb3B5aW5nIG9mIG5vbi1vY3RldC1hbGlnbmVkCi0gICAgICAtIFtQQVRDSCAxNjk4MTg0XTogUmVnaXN0ZXIgbm9uLWRlZmF1bHQgY29udGV4dAotICAgICAgLSBbUEFUQ0ggMTcwMDczMF06IFJlbW92ZSB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgotICAgICAgLSBbUEFUQ0ggMTcwMDczMl06IEZpeCBkZWJ1ZyBvdXRwdXQgc3RhdGVtZW50cy4KLSAgICAgIC0gW1BBVENIIDE3MDA3MzddOiBUaWR5IHVwIHNldFNlcmlhbE5vCi0gICAgICAtIFtQQVRDSCAxNzI5NjI5XTogRml4IG1lbW9yeSBsZWFrIGluIGRpc21hbgotICAgICAgLSBwYXRjaCBmcm9tIFdvanRlayBKYXdvciB0byBoYW5kbGUgcm93IGRlbGV0aW9uCi0gICAgICAtIHBhdGNoOiAxMjI1NDQwOiBBcHBseSBpbnRlbnQgb2YgcGF0Y2g6IHRvIGRlbGF5Ci0gICAgICAtIHBhdGNoOiAxNTk1NTY4OiBmcm9tIGN5cmlsX21hcmdhcmlhOiBmaXgKLSAgICAgIC0gcGF0Y2g6IDE2MTcyNTU6IGZpeCBsZW5ndGggb2YgdGhlIGhpc3RvcnkgYXJyYXkKLSAgICAgIC0gcGF0Y2g6IDE3MDAxNTc6IGZyb20gYWZyaWthOiBmaXhlcyBvcmRlcmluZyBvZiBleGVjCi0gICAgICAtIHBhdGNoOiAxNzEwNjMyOiBmcm9tIG1hdmFybGV5OiBmaXggbWVtb3J5IGxlYWsgb24KLSAgICAgIC0gcGF0Y2g6IDE3MTkyNTM6IGZyb20gIkNocmlzdGlhbiBKdW5nIjogZml4Ci0gICAgICAtIHBhdGNoOiAxNzE5MjU0OiBmcm9tICJDaHJpc3RhbiBKdW5nIjogdXBkYXRlCi0KLSAgICBzbm1wdHJhcGQ6Ci0gICAgICAtIFtCVUcgMTYzODIyNV06IEZpeCBpbnRlcnByZXRhdGlvbiBvZiB0cmFuc3BvcnQKLSAgICAgIC0gW1BBVENIIDE2MjA0MjRdOiBGaXggbm90aWZpY2F0aW9uIHJlY2VwdGlvbiBzbwotICAgICAgLSBwYXRjaDogMTIyNTQ0MDogQXBwbHkgaW50ZW50IG9mIHBhdGNoOiB0bwotICAgICAgLSB1cHBvcnQgZm9yIGZvcndhcmRpbmcgdHJhcHMgYnkgT0lEIHN1YnRyZWUuCi0KLSAgICBhcHBzOgotICAgICAgLSBbQlVHIDE5NjQxMzZdOiBEcm9wIE5VTEwgdHlwZSBmcm9tIHNubXBzZXQgdXNhZ2UKLSAgICAgIC0gW1BBVENIIDE1Mjk1MjNdOiBDbG9zZSBTTk1QIHNlc3Npb24gb24gZmFpbHVyZS4KLQotICAgIGJ1aWxkOgotICAgICAgLSBMaW5rIGxpYmRsIGFnYWluc3QgbGlibmV0c25tcG1pYnMgaW5zdGVhZCBvZgotICAgICAgLSBMaW5rIGxpYmt2bSBhbmQgbGlid3JhcCB0byBsaWJuZXRzbm1wYWdlbnQKLSAgICAgIC0gW0JVRyAxMDk2MTY2XTogSGFuZGxlIC0td2l0aG91dC1sb2dmaWxlIGNvcnJlY3RseS4KLSAgICAgIC0gW0JVRyAxNjQ3OTc2XTogQ3lnd2luL01pbkdXIFdpbmRvd3MgYnVpbGQgZmFpbHMKLSAgICAgIC0gW1BBVENIIDE2MjUxMzVdOiBjb25maWd1cmUgbG9jYXRpb24gb2YgcHl0aG9uCi0gICAgICAtIFtQQVRDSCAxNjgxMDczXTogI2lmZGVmIGJhc2VkIGNvbmZpZ19lcnJvciBpbnN0ZWFkCi0gICAgICAtIFtQQVRDSCAxNzI4MjI2XTogbWFrZSBzdXJlCi0gICAgICAtIFtQQVRDSCAxNzI4MjMwXTogYWRkCi0gICAgICAtIFtQQVRDSCAxNzI4MjM3XTogTW92ZQotICAgICAgLSBbUEFUQ0ggMTcyODI0NF06IEFkZAotICAgICAgLSBbUEFUQ0ggMTcyODI0N106IEFkZCB0eXBlCi0gICAgICAtIGFkZCAiQnVpbGRSZXF1aXJlczogcGVybC1FeHRVdGlscy1FbWJlZCIgdG8gdGhlCi0gICAgICAtIGFkZCBjb25maWd1cmUgY2hlY2sgZm9yIGhhc21udG9wdCB0byBmaXggdGhlCi0gICAgICAtIG9ubHkgZW5hYmxlIG1pYklJL2lwdjYgdGhyb3VnaCAtLWVuYWJsZS1pcHY2IG9uCi0gICAgICAtIHBhdGNoIGZyb20gYXBwbGUgdG8gc2ltcGxpZnkgbWFrZWZpbGUgdGFyZ2V0Ci0gICAgICAtIHVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNCAoZnJvbSAxLjUuMjIpCi0gICAgICAtIHVzZSBMREZMQUdTIHdoZW4gYnVpbGRpbmcgYWdlbnQsIGhlbHBlcnMgYW5kIG1pYgotICAgICAgLSB1c2UgbGlidG9vbCBjbGVhbiBmb3IgcmVtb3ZpbmcgZmlsZXMgdG8gZW5zdXJlIHdlCi0gICAgICAtIHdvcmsgYXJvdW5kIGxpYm5ldHNubXBhZ2VudC9saWJuZXRzbm1waGVscGVycwotICAgICAgLSB5ZXQgYW5vdGhlciBmaXggdG8gYWRkcmVzcyBidWlsZCBpc3N1ZXMgd2l0aAotCi0gICAgYnVpbGRpbmc6Ci0gICAgICAtIENoZWNrIGZvciBzdXBwb3J0IG9mIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zCi0gICAgICAtIERpc2FibGUgaW5saW5pbmcgb24gc29sYXJpcyBhcyB0aGVyZSBhcmUgc29tZQotCi0gICAgY29uZmlndXJlOgotICAgICAgLSBbQlVHIDE1NjczMjRdOiBDbGFyaWZ5IHByb21wdGluZyBmb3IKLQotICAgIGRvY3VtZW50YXRpb246Ci0gICAgICAtIFtCVUcgMTI0NzE2NF06IERvY3VtZW50IHVzZSBvZiBPSUQgbWFjcm9zCi0gICAgICAtIFtCVUcgMTQwNzQ3Nl06IENsYXJpZnkgTUlCIHBhcnNpbmcgdG9nZ2xlCi0gICAgICAtIFtCVUcgMTYxNDEwNF06IGJyb2tlbiBzbm1wZCg4KSBtYW51YWwgcGFnZQotICAgICAgLSBbUEFUQ0ggMTYwNDU4MF06IFNOTVAoMykgbWFudWFsIHBhZ2UKLQotICAgIGlyaXg6Ci0gICAgICAtIFtQQVRDSCAxNzA5NzQ4XTogT3B0aW1pemVkIElSSVggY3B1IHN0YXRzCi0KLSAgICBsaWJyYXJ5OgotICAgICAgLSBGRUFUVVJFUzogNDU0MDI4OiBEZXRlY3QgYW5kIGhhbmRsZSBlbXB0eSBNSUIKLSAgICAgIC0gUGF0Y2ggZnJvbSAiTWl0c3VydSBDaGluZW4iOiBjbGVhbnMgdXAgdGhlCi0gICAgICAtIFtQQVRDSCAxNjQyMDcxXTogRG9uJ3QgZmlkZGxlIHdpdGggdGhlIHN0b3JhZ2UKLSAgICAgIC0gW1BBVENIIDE2NjU1NDNdOiBIYW5kbGUgVkFDTSBjaGVja3MgY29ycmVjdGx5LgotCi0gICAgbWliMmM6Ci0gICAgICAtIFtCVUcgMTQyOTQ3Ml06IFByb3RlY3QgYWdhaW5zdCBtaXNzaW5nIGluc3RhbmNlcwotICAgICAgLSBbQlVHIDE1ODI5NzJdOiBIYW5kbGUgQHdoaWxlQC9AZW5kQCBwcm9wZXJseS4KLSAgICAgIC0gW0JVRyA4MzM2NzNdOiBNb3JlIGZvY3VzZWQgc2l6ZSBjaGVja3MuCi0gICAgICAtIFtQQVRDSCAxNjY4MTcxXTogc2tpcCB1bmtub3duIGNvbHMgaW4gbWluL21heAotCi0gICAgbWlzYzoKLSAgICAgIC0gRG9uJ3QgdXNlIHRoZSBsZWdhY3kgc3ltYm9sCi0KLSAgICBwYXRjaDoKLSAgICAgIC0gZml4IHRoZSAtTSBzd2l0Y2ggZm9yCi0KLSAgICBwZXJsOgotICAgICAgLSBbQlVHIDE0NTA2NjldOiBQQVRDSDogMTYyNzk0OTogZnJvbSBtYXJ0aW45ODc6IGEKLSAgICAgIC0gW0JVRyAxNjE5ODI3XTogbGluayBsaWJuZXRzbm1wYWdlbnQvbGlibmV0c25tcHRyYXBkCisgICAgICAtIFtQQVRDSCAxOTU2MTkzXTogYmV0YSB0aHJlYWRhYmxlIHBlcmwgbW9kdWxlIGNvZGUgZm9yIFNOTVB2MS8yYyB1c2FnZS4KKyAgICAgIC0gW1BBVENIIDIwMjE0NDRdOiBTdXBwb3J0IFNOTVB2MmMgaW4gZ2V0dGFibGUgcHJvY2Vzc2luZworICAgICAgLSBbUEFUQ0ggMjAyMjk0OF06IEZpeCBmb3IgQ291bnRlcjY0IGluIHBlcmwgc3ViYWdlbnQKKyAgICAgIC0gW1BBVENIIDIxODIwNzldOiBGaXggdmFyaW91cyBwZXJsIHdhcm5pbmdzICYgYWxsb3cgdXNlIG9mICJ1c2Ugc3RyaWN0IgorICAgICAgLSBbUEFUQ0ggMjI3MjM0N106IEltcGxlbWVudCAiaW1wbGllZCIgaW4gTUlCIGhhc2gKKyAgICAgIC0gW1BBVENIIDIzNjE3MTJdOiBGaXggZ2V0YnVsayBvcHRpbWl6YXRpb24gZHVyaW5nIHdhbGtzCisgICAgICAtIFtQQVRDSCAyNzA5NzA1XTogUmV0cmlldmUgc3JjL3RhcmdldCBJUCBhZGRyZXNzIGluIFBlcmwtYmFzZWQgYWdlbnRzCisgICAgICAtIFtQQVRDSCAyNzYzNzE3XTogQWxsb3cgcGVybCB0byB1c2UgT1BBUVVFcworICAgICAgLSBbUEFUQ0ggMjc5Mzg1N106IFJlcG9ydCBmYWlsZWQgYXN5bmNocm9ub3VzIHJlcXVlc3RzLgogICAgICAgLSBmaXggU05NUCBTRVQgZm9yIElQIGFkZHJlc3NlcyBvbiA2NC1iaXQKICAgICAgIC0gZml4IHByZXJlcXVpc2l0ZXMgZm9yIE5ldFNOTVA6OlRyYXBSZWNlaXZlcgogICAgICAgLSBmaXggc3ludGF4IGVycm9yIGluIE5ldFNOTVA6OmFnZW50OjpTdXBwb3J0Ci0gICAgICAtIGluc3RhbGwgZW1iZWRkZWQgcGVybCBpbml0IGZpbGVzIGZvcgotICAgICAgLSBwYXRjaDogMTcyNTA0OTogZml4IGJ1bGt3YWxrIGluIGNhc2VzIG9mIG5vbi1yZXBlYXRlcgotCi0gICAgcG9ydHM6Ci0gICAgICAtIHBhdGNoOiAxNzA2MzQ0OiBmcm9tIG5heWxvcjogZml4IGNvbXBpbGF0aW9uIHdpdGgKKyAgICAgIC0gaW5zdGFsbCBlbWJlZGRlZCBwZXJsIGluaXQgZmlsZXMgd2l0aCBjb3JyZWN0IHBlcm1pc3Npb25zCiAKICAgICBweXRob246Ci0gICAgICAtIFtQQVRDSCAxNzE2MTE0XTogTGV0IHB5dGhvbiBidWlsZCBpbiBzb3VyY2UgdHJlZQorICAgICAgLSBbQlVHIDE4MjYxNzRdOiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4gcHJpbnRpbmcgdmFsdWVzLgorCSAgICAgICAgICAgICAgIEFkZHJlc3NlcyBDVkUtMjAwOC0yMjkyCisgICAgICAtIFtCVUcgMTg2ODI3OF06IFB5dGhvbiBzZWdmYXVsdAorICAgICAgLSBbQlVHIDIyNTg5MzVdOiBQeXRob24gRXh0ZW5zaW9uIE1vZHVsZSBmYWlscyBvbiBTb2xhcmlzCisgICAgICAtIFtQQVRDSCAxNzE2MTE0XTogTGV0IHB5dGhvbiBidWlsZCBpbiBzb3VyY2UgdHJlZSAgKERlYmlhbiBwYXRjaCMzOCkKKyAgICAgIC0gW1BBVENIIDE4NjIxNzddOiBtYWRlIGNvZGUgbW9yZSB3aW5kb3dzL2N5Z3dpbiBjb21waWxlciBmcmllbmRseQorICAgICAgLSBbUEFUQ0ggMTg3Nzg0MF06IEZpeCBNSUIgbGFiZWwgYW5kIGluZGV4aW5nIGR1ZSB0byBzbCwgYnJva2VuIHJlZ2V4cAorICAgICAgLSBbUEFUQ0ggMjA3NDgxN106IEZpeCByZWdleHAgZW5naW5lIENQVSBwZXJmb3JtYW5jZSBpc3N1ZXMKKyAgICAgIC0gW1BBVENIIDIyNjA4MjhdOiBGaXggcHl0aG9uIHNubXB3YWxrIG1lbW9yeSBsZWFrCisgICAgICAtIFtQQVRDSCAyNTgwOTc5XTogRml4IHB5dGhvbiBzZXNzaW9uIHBvaW50ZXJzIG9uIDY0LWJpdCBzeXN0ZW1zLgorICAgICAgLSBbUEFUQ0ggMjY2NzQxNV06IFN1cHBvcnQgIlVzZU51bWVyaWMiIG9wdGlvbi4KKyAgICAgIC0gW1BBVENIIDI3NzU4MDBdOiBBbGxvdyB0aHJlYWRpbmcgdG8gY29udGludWUgd2hlbiBhIHJlcXVlc3QgaXMgc2VudAogCiAgICAgdGVzdDoKLSAgICAgIC0gc3VwcG9ydCBhIC1uIGZsYWcgdG8gUlVOVEVTVFMgdG8gcHJpbnQgdGhlIHRlc3QKKyAgICAgIC0gZW5oYW5jZSBzbm1wbmV0c3RhdCB0ZXN0IHRvIGNoZWNrIHRjcFRhYmxlIGluIFRDUCBtb2RlCisgICAgICAtIHN1cHBvcnQgYSAtbiBmbGFnIHRvIFJVTlRFU1RTIHRvIHByaW50IHRoZSB0ZXN0IG51bWJlciBmb3VuZCBpbiB0aGUKKwl0ZXN0IGZpbGUgYXMgb3Bwb3NlZCB0byB0aGUgbnVtZXJpY2FsIGNvdW50CisgICAgICAtIERvIG5vdCB0ZXJtaW5hdGUgb24gU0lHQ0hMRCBzaW5jZSBkYXNoIGFuZCBzb3VtZSBib3VybmUgc2hlbGxzIHdpbGwKKwlleGl0IHRoZSBtYWluIHNoZWxsIHdoZW4gYSBzdWJzaGVsbCB0ZXJtaW5hdGVzIGluIHRoYXQgY2FzZS4KIAotICAgIHVuc3BlY2lmaWVkOgotICAgICAgLSBbQlVHIDE1OTY2MzhdOiBtZW1vcnkgbGVhayBpbiBpcENpZHJSb3V0ZVRhYmxlLAotICAgICAgLSBbQlVHIDE2MDAwOTNdOiBhdXRvY29uZiAyLjYwIGJyZWFrcyB0aGUgYnVpbGQKLSAgICAgIC0gW0JVRyAxNjExNTI0XTogZml4IHRjcCBjb25uZWN0aW9uIHRhYmxlIGZkIGxlYWsKLSAgICAgIC0gW0JVRyAxNjMzNDgzXTogU3VwcG9ydCBDUFUgSEFMIG9uIEZyZWVCU0Q0LngKKyAgICBQb3J0czoKICAgICAgIC0gW0JVRyAxNzEwOTEwXTogaW5pdGlhbCBzdXBwb3J0IGZvciBEcmFnb25GbHkgQlNECi0gICAgICAtIFtQQVRDSCAxNjc4Mjk4XTogZnJvbSBtYWdmcjogY29tcGlsZS1zdWJhZ2VudCBjaGVja3MgZm9yCi0gICAgICAtIFtQQVRDSCAxNjc4MzAxXTogZnJvbSBtYWdmcjogZGVhbGxvY2F0ZSBkb21haW4gcmVnaXN0cnkKLSAgICAgIC0gW1BBVENIIDE2NzgzMDJdOiBmcm9tIG1hZ2ZyOiBuZXRzbm1wX21pYmluZGV4X2xvYWQgbGVha3MKLSAgICAgIC0gW1BBVENIIDE2NzgzMDVdOiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBjYWNoZSBpbgotICAgICAgLSBbUEFUQ0ggMTY3ODMwNl06IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGxvZyBpbgotICAgICAgLSBbUEFUQ0ggMTcxOTI0NF06IGZpeCBtZmQgZ2VuZXJhdGluZyBtYXAgZnVuY3Rpb24KLSAgICAgIC0gW1BBVENIIDE3MjgyNDFdOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBhZGQgY29uZmlndXJlIGNoZWNrCi0gICAgICAtIHBhdGNoIGZyb20gYXBwbGUgdG8gZml4IGNyb3NzLWNvbXBpbGUgYnVpbGRzIGluIGFwcGxlcwotICAgICAgLSBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBtaW5vciBkb2N1bWVudGF0aW9uIGJ1Z3MuCi0gICAgICAtIHBhdGNoIGZyb20gYXBwbGUgdG8gaW1wcm92ZSBtZW1vcnkgcmVwb3J0aW5nCisgICAgICAtIFtQQVRDSCAxNjIzODc0XTogYWRkIEdOVS9rRnJlZUJTRCBzdXBwb3J0CiAKICAgICBBSVg6Ci0gICAgICAtIFtQQVRDSCAxNjY1MDc5XTogQUlYIHBhdGNoZXMKLSAgICAgIC0gYnVpbGQgZml4ZXMgZm9yIGVtYmVkZGVkIFBlcmwKLSAgICAgIC0gZml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nCi0gICAgICAtIHVzZSAiLVdsLC1icnRsIiB3aGVuIGNvbXBpbGluZyB3aXRoIGdjYworICAgICAgLSBbUEFUQ0ggMTY2NTA3OV06IEFJWCBwYXRjaGVzIGZvciBjcHUgc3RhdHMgYW5kIHByb2Nlc3MgbW9uaXRvcmluZworICAgICAgLSBBZGQgc3VwcG9ydCBmb3IgQUlYIDYueAorICAgICAgLSBCdWlsZCBmaXhlcyBmb3IgZW1iZWRkZWQgUGVybAorICAgICAgLSBGaXggZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBidWlsZGluZyBpbnN0ZWFkIG9mIGZvcmNpbmcgc3RhdGljCisgICAgICAtIFVzZSAiLVdsLC1icnRsIiB3aGVuIGNvbXBpbGluZyB3aXRoIGdjYworICAgICAgLSBbUEFUQ0ggMjg4NjU5OF06IEhlYWRlciBmaXhlcyBmb3IgY29tcGlsaW5nIG9uIEFJWDYKIAogICAgIEZyZWVCU0Q6Ci0gICAgICAtIGFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHVwY29taW5nIEZyZWVCU0QgNwotICAgICAgLSBmaXggY29uZmlndXJlIHdhcm5pbmcgZm9yIHN5cy9jb25mLmgKKyAgICAgIC0gW0JVRyAxMDczNzgyXTogUmVzdG9yZSBQZXJmU3RhdCB2YWx1ZXMgZm9yIEZyZWVCU0QgNS54IHN5c3RlbXMuCisgICAgICAtIFtCVUcgMTYzMzQ4M106IFN1cHBvcnQgQ1BVIEhBTCBvbiBGcmVlQlNENC54CisgICAgICAtIFtQQVRDSCAxOTUxOTk2XTogRml4IGZvciBDUFUgc3RhdHMgb24gRnJlZUJTRAorICAgICAgLSBbUEFUQ0ggMjUwNzI0OV06IHNjdHAtbWliIHN1cHBvcnQgZm9yIEZyZWVCU0QuCisgICAgICAtIEFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHVwY29taW5nIEZyZWVCU0QgNworICAgICAgLSBGaXggY29uZmlndXJlIHdhcm5pbmcgZm9yIHN5cy9jb25mLmgKKyAgICAgIC0gcGF0Y2ggZnJvbSBDZXphcnkgTW9yZ2EgdG8gZml4IGEgbWFrZSB0ZXN0IG9uIGZyZWVic2QKIAotICAgIEhQOgotICAgICAgLSBVWDogQlVHOiAxNzQyMjc4OiBjb21waWxlIGVycm9yIG9uIEhQLVVYIDExLjIzIChJQTY0KQotICAgICAgLSBVWDogSFAtVVggbmVlZHMgX1JFRU5UUkFOVCBkZWZpbmVkIHRvIHBpY2sgdXAKKyAgICBIUC1VWDoKKyAgICAgIC0gW0JVRyAyNzc5NDcyXTogRmlsZXN5c3RlbXMgbWlzc2luZyBpbiBoclN0b3JhZ2UgdGFibGUKKyAgICAgIC0gW1BBVENIIDIwODg3MjZdOiBGaXggYW4gaXNzdWUgcmVwb3J0aW5nIG1lbW9yeSBpbiBuZWdhdGl2ZSB2YWx1ZXMuCisgICAgICAtIE5lZWRzIF9SRUVOVFJBTlQgZGVmaW5lZCB0byBwaWNrIHVwIHN0cnRva19yLgogCiAgICAgSVJJWDoKLSAgICAgIC0gW1BBVENIIDE2NzU4NjldOiBDUFUgc3RhdGlzdGljcyBmb3IgSVJJWAorICAgICAgLSBbUEFUQ0ggMTY3NTg2OV06IENQVSBzdGF0aXN0aWNzIGZvciBJUklYIGJhc2VkIG9uIFBDUAorICAgICAgLSBbUEFUQ0ggMTcwOTc0OF06IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cwogCiAgICAgTGludXg6Ci0gICAgICAtIFtCVUcgMTY2NjAwNV06IEZhaWwgdG8gd2FsayBpcHY2SW50ZXJmYWNlVGFibGUgb24KLSAgICAgIC0gW1BBVENIIDE1ODEyOTRdOiAKLSAgICAgIC0gZml4IGV0aHRvb2wgY29uZmlndXJlIGNoZWNrIGZvciByZWNlbnQgc3lzdGVtcworICAgICAgLSBbQlVHIDE2NjYwMDVdOiBGYWlsIHRvIHdhbGsgaXB2NkludGVyZmFjZVRhYmxlIG9uIExpbnV4CisgICAgICAtIFtQQVRDSCAxNTgxMjk0XTogaG9zdC1yZXNvdXJjZXMgaW1wcm92ZW1lbnRzCisgICAgICAtIFtQQVRDSCAxOTY5NjI3XTogSGFuZGxlIGluc3RhbGwgd2l0aCBlbXB0eSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrIGZpbGUgCisgICAgICAtIFtQQVRDSCAxNzA0MTA1XTogQWRkIElQdjYgc3VwcG9ydCB0byB0aGUgaW5ldE5ldFRvTWVkaWFUYWJsZQorICAgICAgLSBbUEFUQ0ggMTcwNTU5NF06IFZhcmlvdXMgZml4ZXMgdG8gaXBBZGRyZXNzUHJlZml4VGFibGUgcmVwb3J0aW5nCisgICAgICAtIFtQQVRDSCAxNzA4MjQzXTogSW1wbGVtZW50IGlwRGVmYXVsdFJvdXRlVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MTU0MDVdOiBJbXBsZW1lbnQgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAgICAgIC0gW1BBVENIIDE3MTkyNTRdOiB1cGRhdGUgSFJGU19pZ25vcmUgbGlzdCB0byBjdXJyZW50IGxpbnV4IGxpa2VseWhvb2RzCisgICAgICAtIFtQQVRDSCAxNzI0NjAyXTogTWZELWJhc2VkIGlwRGVmYXVsdFJvdXRlclRhYmxlIGltcGxlbWVudGF0aW9uCisgICAgICAtIFtQQVRDSCAxNzgzNDIzXTogcmV0dXJuIGEgY29ycmVjdCBpcHY2SW50ZXJmYWNlSWRlbnRpZmllciBvZiBsb29wYmFjaworICAgICAgLSBbUEFUQ0ggMTgyNjEwMl06IHN1cHBvcnQgbG9uZ2VyIGludGVyZmFjZSBuYW1lcworICAgICAgLSBbUEFUQ0ggMTgyODYwMl06IFN1cHBvcnQgaXBEZWZhdWx0VFRMIGFuZCBpcEZvcndhcmRpbmcgU0VUcworICAgICAgLSBbUEFUQ0ggMTg5NjExOF06IEZpeCBpZlRhYmxlIDMyYml0IGNvdW50ZXJzCisgICAgICAtIFtQQVRDSCAxOTI3NzUxXTogSW1wbGVtZW50IGljbXBNc2dTdGF0c1RhYmxlCisgICAgICAtIFtQQVRDSCAyMDIzNjMzXTogSW1wbGVtZW50IFNDVFAtTUlCCisgICAgICAtIFtQQVRDSCAyMDUzMjczXTogSW1wbGVtZW50IEV0aGVyTGlrZSBNSUIKIAogICAgIE1hY09TWDoKLSAgICAgIC0gW1BBVENIIDE2MDA0NTNdOiBPUyBYCi0gICAgICAtIFtQQVRDSCAxNjAwNTIyXTogQ1BVIEhBTAotCi0gICAgUGVybDoKLSAgICAgIC0gbGluayBQZXJsIG1vZHVsZXMgYWdhaW5zdCB0aGUgZXhhY3Qgc2V0IG9mIGxpYnJhcmllcworICAgICAgLSBbUEFUQ0ggMTYwMDQ1M106IE9TIFggY29tcGlsZS10aW1lIGVuZGlhbiBkZXRlcm1pbmF0aW9uCisgICAgICAtIFtQQVRDSCAxNjAwNTIyXTogQ1BVIEhBTCBpbXBsZW1lbnRhdGlvbiBmb3IgbWFjaC9kYXJ3aW4KKyAgICAgIC0gSW1wcm92ZSBtZW1vcnkgcmVwb3J0aW5nIChwYXRjaCBmcm9tIEFwcGxlKQorICAgICAgLSBQYXRjaDogMzUxNDA0OSBmcm9tIHR3b2JpdHMtZ2l0aHViOiBmaXggY29tcGlsYXRpb24gb24gZGFyd2luMTEKIAogICAgIFNvbGFyaXM6Ci0gICAgICAtIElGLU1JQiBmaXg6IGFkZCBtaXNzaW5nIHJldHVybiBhdCBlbmQgb2YKLSAgICAgIC0gW0JVRyAxNjI2MTUzXTogbm8gaHJTV1J1biBpbmZvcm1hdGlvbnMgb24KLSAgICAgIC0gW1BBVENIIDE2MjM0NDddOiBoclNXUnVuCisgICAgICAtIFtCVUcgMTYyNjE1M106IE5vIGhyU1dSdW4gaW5mb3JtYXRpb25zIG9uIFNvbGFyaXMgem9uZXMKKyAgICAgIC0gW0JVRyAxODEwODE0XTogdGNwVGFibGUgbWlzc2luZyBlbnRyaWVzIGFuZCB3cm9uZyBwb3J0cworICAgICAgLSBbQlVHIDE4MTkxODldOiB7aWZPcGVyU3RhdHVzLGlwQWRFbnRJZkluZGV4fSByZXBvcnRlZCBpbmNvcnJlY3RseQorICAgICAgLSBbQlVHIDE4MjIyNzVdOiB7aWZPcGVyU3RhdHVzLGlwQWRFbnRJZkluZGV4fSByZXBvcnRlZCBpbmNvcnJlY3RseQorICAgICAgLSBbUEFUQ0ggMTYyMzQ0N106IEZpeCBoclNXUnVuIGZvciB0ZXJtaW5hdGVkIHByb2Nlc3NlcworICAgICAgLSBbUEFUQ0ggMTcxOTczMF06IFN1cHBvcnQgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBBZGRyZXNzVGFibGUKKyAgICAgIC0gW1BBVENIIDE4MjQxOTZdOiB7aWZPcGVyU3RhdHVzLGlwQWRFbnRJZkluZGV4fSByZXBvcnRlZCBpbmNvcnJlY3RseQorICAgICAgLSBbUEFUQ0ggMTgzNDY5OV06IEZpeCAxODMzMjk0OiBETFBJIHByb2JsZW1zIG9uIFNvbGFyaXMgMi42CisgICAgICAtIFtQQVRDSCAyMDEyNDA0XTogRGVhbCB3aXRoIG1vcmUgdGhhbiAxMCBpbnRlcmZhY2VzLgorICAgICAgLSBbUEFUQ0ggMjc1MTU4OF06IEluY29uc2lzdGVudCBkYXRhIGNhbiBiZSByZXBvcnRlZCBvbiBTb2xhcmlzIDEwVTQrCisgICAgICAtICNkZWZpbmUgTkVXX01JQl9DT01QTElBTlQgdG8gc3VwcG9ydCBTb2xhcmlzIDEwVTQrCisgICAgICAtIElGLU1JQiBmaXg6IGFkZCBtaXNzaW5nIHJldHVybiBhdCBlbmQgb2YgZ2V0X2lmX3N0YXRzCiAKICAgICBXaW4zMjoKICAgICAgIC0gW0JVRyAxNjYyOTg3XTogY29tcGlsZSBlcnJvciBvbiBDeWd3aW4KLSAgICAgIC0gW1BBVENIIDE2MjIwODBdOiBBOiBwYXNzIFdpbjMyCisgICAgICAtIFtCVUcgMjc3OTU0MV06IEZpeGVkIGhhbmRsZSBsZWFrIGluIHBhc3NfcGVyc2lzdC4KKyAgICAgIC0gW1BBVENIIDE2MjIwODBdOiBBOiBwYXNzIFdpbjMyIGhhbmRsZXMgcmVtYWluIG9wZW4uCisgICAgICAtIFtQQVRDSCAxNzA2MzQ0XTogRml4IGNvbXBpbGF0aW9uIHdpdGggY3lnd2luCisgICAgICAtIFtQQVRDSCAyNjg2MjQ4XTogRml4IHNldmVyYWwgd2luRXh0RExMIGJ1Z3MuCisgICAgICAtIFtQQVRDSCAyNjg4MzQyXTogRml4IFZTMjAwNSB2YXJpb3VzIGNvbXBpbGVyIHdhcm5pbmcKKyAgICAgIC0gW1BBVENIIDI2OTE4NzZdOiBBbGxvdyBjb21waWxpbmcgdGhlIHNlcnZpY2VzIHVzaW5nIHVuaWNvZGUuCisgICAgICAtIFtQQVRDSCAyNjkzNzQ2XTogaW1wcm92ZWQgc29ja2V0IHN0YXJ0dXAgc3VwcG9ydAorICAgICAgLSBBZGQgc3VwcG9ydCBmb3Igd2luRXh0RExMIHRvIGJ1aWxkLmJhdAorICAgICAgLSBCdWlsZCBmaXhlcyBmb3IgTVNWQyAyMDA4LgogICAgICAgLSBmaXggQUVTIHN1cHBvcnQKICAgICAgIC0gZml4IHdpbjMyL0NvbmZpZ3VyZSAtLXdpdGgtaXB2NgogCisqNS40KgorCisgICAgYnVpbGQ6CisgICAgICAtIFtCVUcgMTQxNjQ4MV06IFN1cHBvcnQgc3BlY2lmeWluZyBhbiBleHBsaWNpdCBsaW5rZXIuCisgICAgICAtIGVuYWJsZS1hcy1uZWVkZWQgd2lsbCB0cnkgdG8gbGluayBidWlsdCBsaWJyYXJpZXMgYWdhaW5zdCBuZWVkZWQKKwlsaWJyYXJpZXMgYXQgbGlicmFyeSBsaW5rIHRpbWUsIHJhdGhlciB0aGFuIGFwcGxpY2F0aW9uIGxpbmsgdGltZS4KKworICAgIHNubXBsaWI6CisgICAgICAtIFtQQVRDSCAxMjgyNTY2XTogdG8gcmV3b3JrIHRyYW5zcG9ydCBjcmVhdGlvbiB0byBhbGxvdyBmb3IKKwlhbHRlcm5hdGl2ZSBpbnRlcnByZXRhdGlvbnMgb2YgdGhlIGFkZHJlc3MgYW5kIGEgbW9yZSBmbGV4aWJsZQorCXRyYW5zcG9ydCByZWdpc3RyYXRpb24gc3lzdGVtCisgICAgICAtIFtCVUdTOiAxNTM3NDU5LCBCVUdTOiAxNTQwNzQ1XSBGaXggbWlzc2luZyBNSUIgcGFyc2luZyB0b2tlbnMKKyAgICAgIC0gW1BBVENIIDE1NjIxNjhdOiBjaGVjayBmb3IgYSBzb2NrIGZkIGxlc3MgdGhhbiAwLgorICAgICAgLSBbUEFUQ0ggMTU3MDY1MF06IGNyZWF0ZSBhIGxvZ2dpbmcgc2h1dGRvd24gZnVuY3Rpb24gdG8gcHJvcGVscnkKKwljbGVhbiB1cCBsb2cgcmVnaXN0cmF0aW9ucyBpZiBuZWVkZWQuCisgICAgICAtIFtQQVRDSCAxNTY1MjkzXTogVURQSVB2NiB0cmFuc3BvcnQgcmVwb3J0cyB3cm9uZyBwb3J0IG51bWJlcgorICAgICAgLSByZW5hbWUgaW5pdF9taWIgdG8gbmV0c25tcF9pbml0X21pYiB0byBhdm9pZCBzeW1ib2wgY2xhc2ggd2l0aAorCUhQLVVYJ3MgbGlibm0KKyAgICAgIC0gW1BBVENIIDE1MDk5NDNdOiByZXNwb25zZXMgd2lsbCBnZXQgc2VudCBmcm9tIHRoZSBvcmlnaW5hbCBkZXN0IElQCisJYWRkcmVzcyB3aGVuIHBvc3NpYmxlLgorCisgICAgc25tcGQ6CisgICAgICAtIFtQQVRDSCAxNTUwNzI1XTogQSBuZXcgdWludCBpbnN0YW5jZSBoZWxwZXIgdG8gbWF0Y2ggdGhlIGV4aXN0aW5nCisJaW50LCBsb25nIGFuZCB1bG9uZyBoZWxwZXJzCisgICAgICAtIFtCVUcgMTUyNzkzMF06IGZpeCBzbXV4IGF1dGhlbnRpY2F0aW9uCisgICAgICAtIFtQQVRDSCAxNTYxMjc3XTogdXNlIG5ldC5pcHY2Lm5laWdoLmxvLmJhc2VfcmVhY2hhYmxlX3RpbWVfbXMKKwlpbnN0ZWFkIG9mIGRlcHJlY2F0ZWQgYmFzZV9yZWFjaGFibGVfdGltZQorICAgICAgLSBbQlVHIDE0NzQ0NjhdOiBpZkNvbm5lY3RvclByZXNlbnQgYWx3YXlzIHJldHVybnMgMAorICAgICAgLSBbUEFUQ0ggMTUyNDc1NV06IHRvIGJldHRlciBzdXBwb3J0IHRoZSBVRFBUYWJsZSBmb3IgdW5rbm93biBhZGRyZXNzCisJdHlwZXMKKyAgICAgIC0gW1BBVENIIDE1MzQ4NzddOiB0byBhZGQgc3VwcG9ydCBmb3Igc2tpcHBpbmcgTkZTIGVudHJpZXMgaW4gdGhlCisJaG9zdCByZXNvdXJjZXMgaHJTdG9yYWdlVGFibGUuCVNlZSB0aGUgc2tpcE5GU0luSG9zdFJlc291cmNlcworCXRva2VuIGluIHRoZSBzbm1wZC5jb25mIGZpbGUgZm9yIGRldGFpbHMuCisgICAgICAtIFtQQVRDSCAxNTU3NTE0IF06IERvIG5vdCBhdHRlbXB0IHRvIGNvbGxlY3QgZGF0YSBkdXJpbmcgU0VUCisJcHJvY2Vzc2luZy4KKyAgICAgIC0gW0JVRyAxNTM1OTAzXTogU3VwcG9ydCBzcGFjZXMgd2l0aGluIHNlY3VyaXR5IG5hbWVzCisgICAgICAtIEFnZW50IGJ1aWxkcyBkZWZhdWx0IG1vZHVsZSBsaXN0IGZyb20gYSBkZWZhdWx0X21pYnMuaCByYXRoZXIgdGhhbgorCWEgaGFyZCBjb2RlZCBjb25maWd1cmUgbGlzdAorICAgICAgLSBbQlVHIDE1NTkzNThdOiBjaGVjayBzY2FuZiByZXN1bHRzIGZvciBkaXNraW8gc2Nhbm5pbmcKKyAgICAgIC0gW0JVRyAxNTY0MjMzXTogSGF2ZSBjb25maWd1cmUgdGVzdCBmb3IgcnBtIGhlYWRlcnMgbm90IGp1c3QgdGhlCisJbGlicmFyaWVzCisgICAgICAtIFtQQVRDSCAxNTc5MzY0XTogVXBkYXRlZCBkYXJ3aW4gcGF0Y2ggdG8gZml4IGNvbXBpbGF0aW9uIG9uIFRpZ2VyCisJYW5kIExlYXBvcmQKKyAgICAgIC0gW1BBVENIIDE1NjU3MDNdOiBwYXRjaCB0byBmaXggcmFwaWQgcmVnaXN0cmF0aW9ucy9kZXJlZ2lzdHJhdGlvbgorCWlzc3VlcworICAgICAgLSBbUEFUQ0ggMTU2MjY4OF06IGZpeCBwaW5nL3JlYXR0YWNoIGFnZW50eCBjb2RlCisgICAgICAtIFtQQVRDSCAxNTUxOTQ4XTogTWFrZSBwYXNzX3BlcnNpc3QgdXNhYmxlIG9uIHVDbGludXgKKyAgICAgIC0gW1BBVENIIDE1NjgxNTBdOiBFeHRlbmQgcGFzc19wZXJzaXN0IGVycm9yIG1lc3NhZ2VzIHRoYXQgY2FuIGJlCisJcGFzc2VkIGJhY2sgZnJvbSB0aGUgc2NyaXB0CisgICAgICAtIFtQQVRDSCAxNTcwNjUwXTogbWFrZSBkZWxldGUgdGFibGUgZnVuY3Rpb24gcHVibGljCisgICAgICAtIFtQQVRDSCAxNTc1OTg0XTogYmxvY2sgU0lHSFVQIGR1cmluZyByZWNvbmZpZworICAgICAgLSBbUEFUQ0ggMTU3MDk4MiBdOiBTb2xhcmlzIElGLU1JQjogU3VwcG9ydCBmb3IgSVB2Ni1vbmx5IGludGVyZmFjZXMKKyAgICAgIC0gbWVtVG90YWxGcmVlIHNob3VsZCByZXBvcnQgdG90YWwgdmlydHVhbCBpbnN0ZWFkIG9mIHBoeXNpY2FsIG1lbW9yeQorICAgICAgLSBidWlsZCBmaXggZm9yIC0td2l0aG91dC1rbWVtLXVzYWdlCisgICAgICAtIFtCVUcgMTU4NTgxNV06IGZpeCBtZmQgYml0cyBsZW5ndGggY2FsY3VsYXRpb24KKyAgICAgIC0gW0JVRyAxNDI3NDEwXTogU2V0IGF1dGggZW5naW5lSUQgZm9yIFNOTVB2MyB0cmFwcy4KKyAgICAgIC0gW0JVRyAxNTAyMjY3XTogQnVpbGQgYWNjZXNzIGxpc3QgaW4gdGhlIGNvcnJlY3Qgb3JkZXIuCisgICAgICAtIFtQQVRDSCAxNTU0ODI3XTogZnJvbSBydHlsZTogZml4IGhhbmRsaW5nIG9mIGZhaWxlZCBwcm94eSBTRVQKKwlyZXF1ZXN0cworICAgICAgLSBbUEFUQ0ggMTU5ODk2Nl06IEZpeCBidWcgIzE1OTg5Mjc6ICNlbGlmIGJ1aWxkIGZpeAorCisgICAgc25tcHRyYXBkOgorICAgICAgLSB0aGUgdHJhcGhhbmRsZSBkaXJlY3RpdmUgbm93IHN1cHBvcnRzIGEgLXQgc3dpdGNoIHRvIGluZGljYXRlCisJbWF0Y2hpbmcgYW55IE9JRCBpbiB0aGUgdHJlZSBiZWxvdyB0aGUgc3BlY2lmaWVkIE9JRAorICAgICAgLSBbUEFUQ0ggMTUzNjc3M106IHN1cHBvcnQgcGFydGlhbCBvaWQgbWF0Y2hpbmcKKyAgICAgIC0gW1BBVENIIDE1OTg5NjhdOiBGaXggYnVnICMxNTg3NzU5OiBzbm1wdHJhcGQgZG9lc24ndCByZWNvZ25pemUgLUEKKwlvcHRpb24KKworICAgIHNubXBkZjoKKyAgICAgIC0gW0JVRyAxNTE1NTA3XTogSGFuZGxlIGZhaWxlZCByZXF1ZXN0cyBiZXR0ZXIKKworICAgIHBlcmw6CisgICAgICAtIEZpeGVkIHRoZSBwZXJsIGJ1bGt3YWxrIGZ1bmN0aW9uCisgICAgICAtIFtQQVRDSCAxNTc1OTM3XTogZml4IHVzZW51bWVyaWMgb3V0cHV0IGluIGFzeW5jIHZhcmJpbmRzIHNvIHRoZXkKKwlyZXR1cm4gT0lEcyBpbnN0ZWFkIG9mIGVtcHR5IHN0cmluZ3MuCisgICAgICAtIHVwZGF0ZSBkZWZhdWx0X3N0b3JlIG1vZHVsZSB0byBsYXRlc3QgZGVmYXVsdF9zdG9yZSBjLWJpbmRpbmcKKwl0b2tlbnMKKyAgICAgIC0gbWFrZSBwZXJsdGVzdCBmaXhlcyBmb3IgU29sYXJpcyAyLjYgYW5kIGVhcmxpZXIKKyAgICAgIC0gZml4ZXMgZm9yIDY0LWJpdCBwbGF0Zm9ybXMKKyAgICAgIC0gbWFrZSBwZXJsdGVzdCBmaXhlcyBmb3IgSFAtVVgKKyAgICAgIC0gbWFrZSBwZXJsdGVzdCBmaXhlcyBmb3IgSVJJWAorICAgICAgLSBbUEFUQ0ggMjk5NTA5OF06IEZpeCBjcmVhdGlvbiBvZiBTTk1QdjMgc2Vzc2lvbnMgd2l0aCBBUElfU0lOR0xFCisgICAgICAtIHBhdGNoIDMwNDYzNzE6IGZyb20gY2hyaXN0b3BoYjQ6IEZpeCBtZW1vcnkgbGVhayBpbiBTTk1QdjEgdHJhcAorCWhhbmRsaW5nLgorCisgICAgbWliMmM6CisgICAgICAtIFtCVUcgMTQ3OTkxNl06IFJlc3RvcmUgY29uc2lzdGVuY3kgaW4gcm93IGNyZWF0aW9uIGNvZGUuCisgICAgICAtIFtCVUcgMjgyNzI2OV06IFN1cHByZXNzIG5vbi1vcmRlcmVkIFRPRE8gY29tbWVudHMuCisKKyAgICBtaXNjOgorICAgICAgLSBNb3N0IG5ldC1zbm1wIHNwZWNpZmljIGRlZmluZXMgYXJlIG5vdyAoYWxzbykgYXZhaWxhYmxlIHVuZGVyIGEKKwlwcm9wZXIgTkVUU05NUF8gcHJlZml4LiBUaGUgb2xkZXIsIHBvdGVudGlhbGx5IGNvbmZsaWN0aW5nIG5hbWVzIGFzCisJd2VsbCBhcyB0aGUgYXV0b2NvbmYgdmFyaWFibGVzIGNhbiBub3cgYmUgdHVybmVkIG9mZiBieSBhIHNwZWNpYWwKKwlkZWZpbmUuCisgICAgICAtIFtCVUcgMTU4NTI1MF06IGRvbid0IHVzZSBkZXByZWNhdGVkIG9wdGlvbnMgaW4gc3RhcnQgc2NyaXB0CisgICAgICAtICJtYWtlIHRlc3QiIGZpeGVzIGZvciBub24tVURQIHRyYW5zcG9ydHMKKyAgICAgIC0gW0JVRyAxNTc3OTEzXTogYWRkIG1pc3NpbmcgbWFudWFsIHBhZ2VzIGZvciBleGVjdXRhYmxlcywgc3VwcGxpZWQKKwlieSBEZWJpYW4KKyAgICAgIC0gW1BBVENIIDE1OTYwMjhdOiBmcm9tICJTdGVwaGVuIEouIEZyaWVkbCI6IGNvbnN0IGZpeGVzIGZvciB0aGUKKwltaWJfYXBpKDMpIG1hbnVhbCBwYWdlCisgICAgICAtIFJQTSBzcGVjIGZpbGUgZml4ZXMgZm9yIDY0LWJpdCBwbGF0Zm9ybXMKKworICAgIE1hY09TWDoKKyAgICAgIC0gW1BBVENIIDE1NjY3NzddOiBidWlsZCBmaXhlcyBmb3IgbWVtb3J5X2Rhcndpbi5jCisgICAgICAtIGJ1aWxkIGZpeCBmb3IgbWliSUkvdWRwVGFibGUKKworICAgIFRydTY0OgorICAgICAgLSBmaXggImF1dG9fbmxpc3QgZmFpbGVkIG9uIGFycHRhYl9zaXplIGF0IGxvY2F0aW9uIDAiIGVycm9ycworCisgICAgSVJJWDoKKyAgICAgIC0gcHJvcGVyIGltcGxlbWVudGF0aW9uIGZvciBVQ0QtU05NUC1NSUI6OmxhVGFibGUgKGF2b2lkaW5nIG5saXN0KQorCisgICAgU29sYXJpczoKKyAgICAgIC0gW1BBVENIIDE1Njk1MzcsMTU2OTUzOV06IG5ldyBVRFAtTUlCIGFuZCBUQ1AtTUlCIGltcGxlbWVudGF0aW9uCisJKGVuYWJsZSB0aHJvdWdoIC0td2l0aC1taWItbW9kdWxlcz11ZHAtbWliLHRjcC1taWIpCisKKyAgICBBSVg6CisgICAgICAtIHVzZSBjb3JyZWN0IEFSUFRBQl9TWU1CT0wgYW5kIEFSUFRBQl9TSVpFX1NZTUJPTAorICAgICAgLSBbQlVHIDEyMDUzMDBdOiBubGlzdCBlcnI6IG5laXRoZXIgbnByb2Mgbm9yIF9ucHJvYyBmb3VuZCAoc2FtZSBmb3IKKwlydF90YWJsZSwgcnRoYXNoc2l6ZSwgcnRob3N0LCBydG5ldCkKKworICAgIHFueDY6CisgICAgICAtIFtQQVRDSCAyODM2ODk1XTogc3VwcG9ydCBmb3IgUU5YNgpkaWZmIC0tZ2l0IGEvQ09QWUlORyBiL0NPUFlJTkcKaW5kZXggMjZkYjYwNi4uM2VlZjQ0MCAxMDA2NDQKLS0tIGEvQ09QWUlORworKysgYi9DT1BZSU5HCkBAIC0yMjksMyArMjI5LDk5IEBACiBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOCiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KIAorLS0tLSBQYXJ0IDg6IEFwcGxlIEluYy4gY29weXJpZ2h0IG5vdGljZSAoQlNEKSAtLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgIAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zICAKK2FyZSBtZXQ6CisKKzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAgCitub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSAgCitjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyAgCitkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgIAord2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZiBpdHMgIAorY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkICAKK2Zyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCAgCitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCAgCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSAgCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyAgCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgIAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAgCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GICAKK1VTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgIAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksICAKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCAgCitPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgIAorU1VDSCBEQU1BR0UuCisKKy0tLS0gUGFydCA5OiBTY2llbmNlTG9naWMsIExMQyBjb3B5cmlnaHQgbm90aWNlIChCU0QpIC0tLS0tCisKK0NvcHlyaWdodCAoYykgMjAwOSwgU2NpZW5jZUxvZ2ljLCBMTEMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisgCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKyAKKyogIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisqICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAKKyogIE5laXRoZXIgdGhlIG5hbWUgb2YgU2NpZW5jZUxvZ2ljLCBMTEMgbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorIAorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKK0hPTERFUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKK1VTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworLS0tLSBQYXJ0IDEwOiBJRVRGIGNvcHlyaWdodCBub3RpY2UgKEJTRCkgLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDEzIElFVEYgVHJ1c3QgYW5kIHRoZSBwZXJzb25zIGlkZW50aWZpZWQgYXMgYXV0aG9ycyBvZgordGhlIGNvZGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworwrcgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAordGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworwrcgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK8K3IE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZXJuZXQgU29jaWV0eSwgSUVURiBvciBJRVRGIFRydXN0LCBub3IgdGhlCituYW1lcyBvZiBzcGVjaWZpYyBjb250cmlidXRvcnMsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCitwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIOKAnEFTCitJU+KAnSBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIKK09SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAxZGYwMjBjLi40NjUxYzE0IDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDEwNSArMSwzMDAzOCBAQAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQ2hhbmdlczogVjUuNC4zIC0+IFY1LjQuNAorIyAtKi0gdGV4dCAtKi0KIAotMjAxMS0wNi0yNCAxMjozOCAgZHRzMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKK0NoYW5nZXM6IFY1LjcuMy5wcmU0IC0+IFY1LjcuMy5wcmU1CiAKLSAgIE1pc3NpbmcgY2hlY2sgZm9yIHJwbXRzLmgKK2NvbW1pdCBmM2YzNzFiMjc2ZDI2NWI0NTVmYzQ5MGZjZTE5NDdkYWRmODllOWMyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDggMTk6NDk6MDYgMjAxNCAtMDcwMAogCi0yMDExLTA2LTI0IDEyOjIwICBkdHMxMgorICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMy5wcmU1CisKK2NvbW1pdCA0MTgxMzJmNDNjYzQzMjMxOTY2YThiOTY3MmM2MjZmNjBiOTkxMDM5CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDggMTQ6MjQ6NTIgMjAxNCAtMDcwMAorCisgICAgZml4IHRoZSBydW4tYXV0b2NvbmYgcHJvZ3JhbQorCitjb21taXQgN2RiNzk1OTQ5MDc1ZWZiNDg5MzczZjUxZjcwNjYzNmZlNTRhOTgzNQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyA4IDE0OjI0OjUyIDIwMTQgLTA3MDAKKworICAgIGZpeCB0aGUgcnVuLWF1dG9jb25mIHByb2dyYW0KKworY29tbWl0IDc4ZjFlZjgxNmRkYWQwOGU3ZDdjOWUxYjExZTRiNGFiMjZmNmU0YjAKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgOCAxMzoyODo0NyAyMDE0IC0wNzAwCisKKyAgICB1c2VkIHRoZSByaWdodCBhdXRvY29uZgorCitjb21taXQgMWVhZWFjODAxYTM2MjViNzJiMDljN2RhNTgwMzg0MDljZDhkYzY4MQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyA4IDEzOjI2OjExIDIwMTQgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjMucHJlNQorCitjb21taXQgN2VjZmQzZWRlMTllOWMyMjE4YzliZjU5NTljMDk1Y2U5ZmE2YzhhYgorQXV0aG9yOiBCcmlhbiBTaXBvcyA8YnNpcG9zcmtmQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyA2IDEwOjMwOjU0IDIwMTQgLTA3MDAKKworICAgIEZpeCBkZXRlY3Rpb24gb2Ygc2hhMjI0IGFuZCBzaGEzODQsIHBhdGNoIGZyb20gQnJpYW4gU2lwb3MKKyAgICAKKyAgICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL2J1Z3MvMjU2NC8KKyAgICAKKyAgICBMdWNraWx5IG5vYm9keSdzIG5lZWRlZCB0byBidWlsZCB1c2luZyBhbiBPcGVuU1NMIHZlcnNpb24KKyAgICB0aGF0IGRvZXNuJ3Qgc3VwcG9ydCBzaGEyMjQgb3Igc2hhMzg0LCBzaW5jZSB0aGUgaW52ZXJzaW9uCisgICAgb2YgdGhlIHRlc3QgaGVyZSB3b3VsZCB0cnkgdG8gdXNlIHNoYTIyNC9zaGEzODQgc3VwcG9ydCBvbmx5CisgICAgb24gT3BlblNTTCB2ZXJzaW9ucyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbSEKKworY29tbWl0IGE5Mzk5MWVhZjUzYjE5OWIxOWM1ODJiNjMwZGEyNTE1ODMwMGE5ZDEKK0F1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAbG9jYWxob3N0PgorRGF0ZTogICBGcmkgQXVnIDEgMTA6MDc6NDUgMjAxNCAtMDQwMAorCisgICAgZml4ICMyNDgyIHNubXAgcmVzcG9uc2U6IFRvbyBsb25nCisKK2NvbW1pdCA5ZjQxZDMwYjA5ZTdjODViODI2ODEwM2NhMzIwYWM2Y2MzMmQ1YjA0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVsIDI2IDA4OjI4OjQzIDIwMTQgKzAyMDAKKworICAgIEZpeCBidWcgMjU0NjogbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsIHVzZXMgd3JvbmcgcG9ydCBmb3Igc25tcHRyYXAgKyB1ZHA2CisKK2NvbW1pdCBkYjFmMjE3NTQxZTAwYjUzODEzZDk0ZjZiZWZiOWE0MmQ0ODM4ZTk1CitBdXRob3I6IEplZmYgR2VobGJhY2ggPGplZmZnQG9wZW5ubXMub3JnPgorRGF0ZTogICBGcmkgSnVsIDI1IDE2OjExOjIzIDIwMTQgLTA0MDAKKworICAgIEZpeCBidWcgMjU2MjogV2luZG93cyB4NjQgYnVpbGQgYnJva2VuIG9uIDUuNy4zLnByZTQKKworY29tbWl0IDk3NDFmMDhlNzViNDE2MmJiM2M4YjQ0OTI3OWYxODJkOTQ5ZGEzNzMKK0F1dGhvcjogQmlsbCBGZW5uZXIgPGZlbm5lckBnbWFpbC5jb20+CitEYXRlOiAgIFRodSBKdWwgMjQgMDg6MTA6NDAgMjAxNCAtMDQwMAorCisgICAgVXNlIHRoZSBzdGFuZGFyZCBleHByICI6IiBzeW50YXgKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjMucHJlMyAtPiBWNS43LjMucHJlNAorCitjb21taXQgODY0YWJiNWJhMWViMzI0ZTQyMzE1N2RiNWZiMTcyM2Y4NTU5NzNiMgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAyMyAxNTowNzo0MSAyMDE0IC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjMucHJlNAorCitjb21taXQgNWZjOGY5OWM5Zjc3ZGRhZGVlYWNlZGFlN2YwNmZlYTE3NjdkNGE5ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAyMyAxNTowMjoxOSAyMDE0IC0wNzAwCisKKyAgICBmaXggQysrIHN0eWxlIGNvbW1lbnQKKworY29tbWl0IDU0YTRhOTBhNTUyOWVhNThhZGQ5ZTZhZjZhN2U4YWQwNjU0NDA4MjgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMjMgMTQ6NDk6NDEgMjAxNCAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMy5wcmU0CisKK2NvbW1pdCBjMGQ2NjgyNmI3MWYwNTQwM2YzNmM3ZjgyMzRmZjhmN2VjYmQxNTkwCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgSnVsIDIyIDA2OjQ5OjI4IDIwMTQgLTA3MDAKKworICAgIFdoZW4gZW5sYXJnaW5nIGEgbGFyZ2VfZmRfc2V0LCB1c2UgRkRfWkVSTyBpZiBwb3NzaWJsZQorICAgIAorICAgIFRoZSBtb3N0IGNvbW1vbiBjYXNlIG9mIGNyZWF0aW5nIGEgbGFyZ2VfZmRfc2V0IG9uIFVOSVgKKyAgICBpcyB0byBjcmVhdGUgaXQgd2l0aCBzaXplIHplcm8sIGFuZCB0aGVuIGltbWVkaWF0ZWx5IGVubGFyZ2UKKyAgICBpdCB0byBzaXplIEZEX1NFVFNJWkUuICBJbnN0ZWFkIG9mIGxvb3BpbmcgYW5kIGNhbGxpbmcKKyAgICBGRF9DTFIoKSwgd2UgY2FuIG9wdGltaXplIHRoaXMgY29tbW9uIGNhc2Ugd2l0aCB0aGUgT1MncworICAgIEZEX1pFUk8uCisKK2NvbW1pdCBkY2FkMzFhZWI0NDIzNjlhNmZiNTJmNGRjN2Q0Zjc4MWJjNTYwMDZjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDE3IDIzOjQwOjEzIDIwMTQgKzAyMDAKKworICAgIFNvbGFyaXMgZG9lcyBub3QgbGlrZSAiZ3JlcCAtRSIgb3IgImlmICEiLgorICAgIFByb3BhZ2F0ZSBjb25maWd1cmVzIEVHUkVQIHRvIG1hbi9NYWtlZmlsZS5pbiBhbmQgYWxzbyB1c2VkIGNvbmZpZ3VyZWQgU0VELgorCitjb21taXQgYTUxY2JlZGY3ZDFkNDI0MzQyYWI1Y2EzYTRiNjcyMTdhMzY0NDA5YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAxNSAyMTo0NTo1NCAyMDE0ICswMjAwCisKKyAgICBzbm1wbmV0c3RhdC9pZi5jOiBwcm9wZXJseSBkZXRlY3Qgc25tcCBleGNlcHRpb25zCisKK2NvbW1pdCBlZWU5MjUxOWYzOGU5MzdmMjI3YmVhNzcwMWRkYjExNTdjOGJjY2NjCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgSnVsIDE1IDA3OjI3OjE4IDIwMTQgLTA3MDAKKworICAgIENsb3NlIHBpcGVzIHdoZW4gZnJlZWluZyBjb25maWcgYW5kIGtpbGwgY2hpbGQgcHJvY2VzcyBvbiBlcnJvcgorICAgIAorICAgIFdoZW4gZnJlZWluZyB0aGUgY29uZmlnLCBjbG9zZSB0aGUgcGlwZXMgY29ycmVzcG9uZGluZyB0byB0aGF0CisgICAgY29uZmlnLCBzbyB0aGV5IGRvbid0IGdldCBsZWFrZWQuICBBbHNvLCBpZiB3ZSBoYXZlIGFuIGVycm9yLAorICAgIHNlbmQgYSBTSUdLSUxMIHRvIHRoZSBjaGlsZCBwcm9jZXNzIGluIGNhc2UgaXQgaXMgYmxvY2tlZCBhbmQKKyAgICB3b24ndCBkaWUganVzdCBiZWNhdXNlIHdlIGNsb3NlZCB0aGUgcGlwZXMgdG8gaXQuCisKK2NvbW1pdCA4NDMxZjkxMzU1NGUwY2NjYzQ4YmVkY2UxZmQ0YThhMjg4YjZjMjdkCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgSnVsIDE1IDA3OjE5OjMzIDIwMTQgLTA3MDAKKworICAgIElmIHRoZSBhc3AgbG9va3VwIHJldHVybnMgTlVMTCwgZG9uJ3QgdHJ5IHRvIHVzZSBpdAorICAgIAorICAgIElmIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgYXNwLCB3ZSBzZXQgdGhlIHJlc3VsdCBwcm9wZXJseQorICAgIGJ1dCBzdGlsbCBmYWxsIHRocm91Z2ggYW5kIGF0dGVtcHQgdG8gdXNlIGl0LiAgSW5zdGVhZCwganVzdAorICAgIGNvbnRpbnVlLgorCitjb21taXQgMTQ2ZmEzODRkOGIwNWUxZTVhMmM2N2Y4OGQwZWNhMGEzMDRmYTFmMAorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIEp1bCAxNCAxNToyNjoxNCAyMDE0IC0wNzAwCisKKyAgICBGaXggZGVwZW5kZW5jaWVzIGZvciBhdXRvLWdlbmVyYXRlZCBtYW4gcGFnZXMKKyAgICAKKyAgICBBbHNvIG1ha2Ugc3VyZSB0aGF0IHRoZSBhdXRvLWdlbmVyYXRlZCAuc28gZmlsZXMgYXJlIGxpc3RlZAorICAgIGluIHRoZSByaWdodCBNYWtlZmlsZSB2YXJpYWJsZXMsIGFuZCB1cGRhdGUgdGhlIHZhcmlhYmxlcworICAgIHRvIGluY2x1ZGUgdGhlIG9uZXMgdGhhdCBoYWQgYmVlbiBsZWZ0IG91dCBhbHJlYWR5LgorCitjb21taXQgNDQzMTcyOGNmN2EwOTUwYWVkMjkzZDQ4YzAyZTY5MDAwZjViODNlOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1bCAxMyAwMzowNzoyMSAyMDE0IC0wNzAwCisKKyAgICBBSVg6IEZpeCBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzCisgICAgCisgICAgQXZvaWQgdGhhdCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGNhc3RpbmcgYXdheSBjb25zdCwgYWJvdXQKKyAgICB1bnVzZWQgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucywgYWJvdXQgbWlzc2luZyBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgYW5kIGFsc28gYXZvaWQgdGhhdCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIHRoYXQgdGhlIHR5cGUgb2YgdGhlCisgICAgdGhpcmQgYXJndW1lbnQgb2YgbW50Y3RsKCkgaXMgd3JvbmcuCisKK2NvbW1pdCA0MmE2NWYxMWUzZWQ1Njk2M2Y3OGE1YzE1NjFlZGQ2NzY1OGNjZDAwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVsIDEzIDA5OjQ3OjI2IDIwMTQgKzAyMDAKKworICAgIFJlbW92ZSBDOTkgbGVuZ3RoIHNwZWNpZmllciAneicgYW5kIHVzZSBhIGNhc3QgaW5zdGVhZAorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCBiNGVhYjExMTM5ZWIxMjJjOWFkM2MxM2FiOGI5NDUzZTA0ZTQ2ODQyLgorCitjb21taXQgMzVkMGY1OWNkZDg4OTRiOGZiYmFkNjUzNzBiNWUzMDFlMzc3YTM3ZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEp1bCAxMSAyMToyNjozMyAyMDE0ICswMjAwCisKKyAgICBVcGRhdGVkIERPQ1MtSUYtTUlCIHJlZmVyZW5jZQorCitjb21taXQgN2E0ZDJlYTJiM2UxNjNmZGQ5OGYwNjdhZTQ0MGZhYTMxNTJjODBjNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEp1bCAxMSAyMToyNToyNyAyMDE0ICswMjAwCisKKyAgICBVcGRhdGVkIElBTkEgbWlicworCitjb21taXQgMDFiM2I2NjQ2NDEzYzE0YTA1MDc0MjcyNmI5N2NmMzA4YjhmZTA5YgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCA5IDIzOjUxOjI3IDIwMTQgKzAyMDAKKworICAgIEFkZCBSRkMgNzI1NyB2cGxzIG1pYnMKKworY29tbWl0IGIwYmUxZDhhZDJjY2JjYWEyOWZmYzdjZjg4NGQwMjQzOGM0YzE2NjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgOSAyMzo1MDoyMSAyMDE0ICswMjAwCisKKyAgICBhZGp1c3QgZGVidWcgdG9rZW4gZm9yIG5ldHNubXBfc29ja2FkZHJfaW42XzIKKworY29tbWl0IDk5MjBlOWU3NjdiMTBmMDI5YWI0YjAyMGU4MjU5Njc2ZDFhMzJiMmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKdWwgOCAxMDoyNToyMiAyMDE0ICswMjAwCisKKyAgICBBSVg6IFN1cHByZXNzIGEgY29uZmlndXJlIHdhcm5pbmcKKyAgICAKKyAgICBBdm9pZCB0aGF0IHRoZSAnc29ydCcgY29tbWFuZCBjb21wbGFpbnMgZHVyaW5nIHRoZSBjb25maWd1cmUgcHJvY2VzcworICAgIHRoYXQgaXRzIGlucHV0IGlzIG5vdCB0ZXJtaW5hdGVkIGJ5IGEgbmV3bGluZS4gU2VlIGFsc28gY29tbWl0CisgICAgYTYzZTM4MWQ5YzFjOWM4NzIxMGJmMmIwMjJlM2Q2YWM3MWQyN2E3ZS4KKworY29tbWl0IGI0ZWFiMTExMzllYjEyMmM5YWQzYzEzYWI4Yjk0NTNlMDRlNDY4NDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBKdWwgNyAxNDowNDo0NSAyMDE0IC0wNzAwCisKKyAgICBBSVg6IEZpeCBhIGZldyBjb21waWxlciB3YXJuaW5ncworICAgIAorICAgIEF2b2lkIHRoYXQgdGhlIGZvbGxvd2luZyBjb21waWxlciB3YXJuaW5ncyBhcmUgcmVwb3J0ZWQ6CisgICAgLSBBc3NpZ25tZW50IGRpc2NhcmRzIGNvbnN0LgorICAgIC0gVW51c2VkIGxvY2FsIHZhcmlhYmxlLgorICAgIC0gTWlzbWF0Y2ggYmV0d2VlbiBmb3JtYXQgc3RyaW5nIGFuZCBhcmd1bWVudCBsaXN0LgorICAgIAorICAgIEFsc28gY29ycmVjdCB0aGUgaW5kZW50YXRpb24gb2YgdHdvIFNvbGFyaXMtc3BlY2lmaWMgY29kZSBzdGF0ZW1lbnRzLgorCitjb21taXQgMGRkMjc4M2I3NDdmYjk2ZDc0OTc4ZTExYzgyYTUwNGMwZGYxZDU1NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1bCA2IDExOjEyOjMwIDIwMTQgKzAyMDAKKworICAgIEhQIFVYLCBDUFUgc3RhdGlzdGljczogRml4IGFuIGludmFsaWQgcG9pbnRlciBkZXJlZmVyZW5jZQorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCAwMDM0NTgxZGViM2U2NzZkMzI4ODI0Yzg3NjM3YWFjYTMxODUwYzZhLgorCitjb21taXQgZGJkNTkzMTMyZjcxOWNjM2Q5YmI1MDE3ZWM4YmM1YzhjYmIwNjNiNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAzIDIzOjIzOjI5IDIwMTQgKzAyMDAKKworICAgIFQwNzFjb20yc2VjNl9zaW1wbGU6IHVzZSBwcml2YXRlIGhvc3QgdG8gY2hlY2sgaXB2NiBhZGRyZXNzIHJlc29sdXRpb24gdG8gbWFrZSBzdXJlIHdlIGdldCB0aGUgZXhwZWN0ZWQgcmVzdWx0CisKK2NvbW1pdCAwMDM0NTgxZGViM2U2NzZkMzI4ODI0Yzg3NjM3YWFjYTMxODUwYzZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDMwIDIyOjA4OjM0IDIwMTQgKzAyMDAKKworICAgIEJVRyAjYTI1NTE6IGZpeCBub24tc2VxdWVudGlhbCBjcHUgbnVtYmVycyBvbiBIUC1VWC4KKyAgICBUaGFua3MgdG8gRGF2ZSBPbGtlci4KKworY29tbWl0IGIwZjQ5YmEyMWZiODEwZWZjYjA5OTJmMDFjNGZjNWZkMzBjZjY5YWYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdW4gMjYgMjE6NDI6NDggMjAxNCArMDIwMAorCisgICAgY3B1X3BzdGF0LmM6IGZpeCBtaXNzaW5nIGJyZWFrKHMpIGluIHN3aXRjaCBzdGF0ZW1lbnQKKworY29tbWl0IGE2M2UzODFkOWMxYzljODcyMTBiZjJiMDIyZTNkNmFjNzFkMjdhN2UKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKdW4gMjAgMTA6NTc6MzkgMjAxNCArMDIwMAorCisgICAgUmVjZW50IHBhdGNoIGZyb20gQmFydCAoRGlzcGxheSBtb2R1bGUgbmFtZXMgc29ydGVkKSBtYWtlIGNvbmZpZ3VyZSBsb3NlIGFsbCBtb2R1bGUgbmFtZXMgb24gU29sYXJpcyA4IGFuZCAxMC4KKyAgICBUaGlzIGNoYW5nZXMgdGhlIHdheSB0aGUgc29ydGluZyBpcyBkb25lLgorCitjb21taXQgNjBjZjZhMDZmZjczYWU3ZDRmMjQ1NGYyZWY0MGM1NmZjZDM5NGJmYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1biAxOCAyMjoxOTozMiAyMDE0ICswMjAwCisKKyAgICBtYWtlIHRlc3Q6IGJhaWwgb3V0IGlmIG5ldHN0YXQgbm90IGZvdW5kLgorCitjb21taXQgYzEwZjJhY2JmY2MzODM0Y2Q5Mzg2NDFkYzFhMmM3MmFjYTdmNzg0NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1biAxMCAxNjowNjo1OSAyMDE0ICswMjAwCisKKyAgICBGaXggc3R1cGlkIGJ1ZyBpbiBwa2ctbmcgcGF0Y2gKKworY29tbWl0IGUyZGE1NDg5YzNiYjgyOTc2MjYwNGM5ZDQxZjA4Y2IzYWVkZmQ4YTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMiAxNTo0MTo1NiAyMDE0ICswMjAwCisKKyAgICBQQVRDSCAjYTEyODM6IFJlY29nbml6ZSBPcmFjbGUgQUNGUyBmaWxlIHN5c3RlbSAoVGhhbmtzIEpvaG4gSGF4YnkpCisKK2NvbW1pdCA1NGMyY2MyNjU1YzFiNmM1NDg1ZDk5NDQxYWVkMmFjMTY5ZWVlNWY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDIgMTU6MjY6MDAgMjAxNCArMDIwMAorCisgICAgSW5zdGFsbCBTTk1QLVRTTS1NSUIgYW5kIFNOTVAtVExTLVRNLU1JQgorCitjb21taXQgY2UzMDkxY2JjNDhiYzQwNWM2ZWIxYWY3ZGRhZWIzNzBlZDc4NjQ3MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1biAyIDE1OjIzOjI0IDIwMTQgKzAyMDAKKworICAgIEJVRyAjYTI1Mzc6IFN1cHBvcnQgKkJTRCBwa2ctbmcKKworY29tbWl0IDQ5ZTRlNDliMTJhYWUwZDhmNzU3MjgzOTM2NWQ0NmNmOTMyYmZlYzkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdW4gMiAxNToxODo0NiAyMDE0ICswMjAwCisKKyAgICBGaXggRnJlZUJTRCBzeXN0ZW0gZGVmaW5lIGNoYWluCisKK2NvbW1pdCAzYzVlNzEyNGIzNWZkNmFjYTQyODRlYWMzNjVkNzRiNjk4MTA3ODVhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVuIDEgMTE6Mjc6MjUgMjAxNCArMDIwMAorCisgICAgQ0hBTkdFUzogQlVHOiAxMjY3IHNubXBsaWI6IHJlZ2lzdGVyX21pYl9jb250ZXh0KCkgZml4IGZvciByZWFkLW9ubHkgdmFyaWFibGVzCisgICAgCisgICAgVGhpcyBpcyBhIHNsaWdodGx5IG1vZGlmaWVkIHZlcnNpb24gb2YgYSBwYXRjaCBmcm9tIEhhcnNoYSBTaGl2YW5uYS4KKworY29tbWl0IDU2ZWNjNDMzYjA5ZTk4NWYxZmRkNzg2YWFlNjBiMDYxZmZhYzAzODIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBKdW4gMSAxMToxMjo0NyAyMDE0ICswMjAwCisKKyAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYzogRml4IGNvbXBpbGVyIHdhcm5pbmdzCisKK2NvbW1pdCBjOWNmOGZkODY5ZjM3OTFhNThhNzFiOGE2M2Y1ZDYxZDY3MjkxZmFlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVuIDEgMTA6MDk6MjggMjAxNCArMDIwMAorCisgICAgY29uZmlndXJlOiBEaXNwbGF5IG1vZHVsZXMgbmFtZXMgc29ydGVkCisKK2NvbW1pdCAyN2ExNjA1NGQ2NTZlYjEwYWJkMDMyZGJhYzY4ZWJiYzI2Yzc2MDA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gSnVuIDEgMDk6MjI6NTIgMjAxNCArMDIwMAorCisgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXg6IFJld29yayBuZXRsaW5rIGJ1ZmZlciBhbGlnbm1lbnQKKyAgICAKKyAgICBCYXNlZCBvbiBhIHBhdGNoIGZyb20gSm9zaHVhIEhva2UuIFNlZSBhbHNvCisgICAgaHR0cHM6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9idWdzLzI1NDcvLgorCitjb21taXQgYmQxM2YwMDRmNmRjMTZkYmU1NmVhNTM4MTY2MjQ5NTc0NWQ5MzdlMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IE1heSAzMSAyMDoxNjoyMCAyMDE0ICswMjAwCisKKyAgICBXaW5kb3dzOiA2NC1iaXQgZml4IGZvciBidWlsZC1iaW5hcnkucGwKKworY29tbWl0IDFmYTRkYTFjNmNmOTY3NjA2MzMzZjdlNzdlNDA4YjdmNTFlZjYyNTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBNYXkgMzAgMTc6NDI6MDcgMjAxNCArMDIwMAorCisgICAgV2luZG93czogU3VwcHJlc3MgVmlzdWFsIFN0dWRpbyAyMDEzIHdhcm5pbmdzIGFib3V0IHN0cnRvdWxsKCkKKworY29tbWl0IGIzMWFlZGU5YzhiNjM0NjFiNTA5MmUxNmQ2MjZhNjc2YjE3MmY4YWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXkgMjIgMjM6MDU6MTkgMjAxNCArMDIwMAorCisgICAgUEFUQ0ggIzEyNzc6IEZpeCBpZnNwZWVkIGZvciBTb2xhcmlzIHpvbmVzLiBUaGFua3MgdG8gbGlqbworCitjb21taXQgODY5Zjc4NTU0MWExZWEzYjQyNzgxNDU4NjdiMTUyYmVjNTBkM2ViMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEFwciAzMCAxNDo1MjozMSAyMDE0ICswMjAwCisKKyAgICB3aW5FeHRETEw6IFRyYW5zbGF0ZSBTbm1wRXh0ZW5zaW9uUXVlcnkoKSBQRFUgdHlwZSBjb3JyZWN0bHkKKworY29tbWl0IGUwMTA3YzI2YjNhMGUzMGFlODMyMzViYjIyNWZlYjc4YTFhMTU2MzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBcHIgMzAgMTU6Mzg6NTUgMjAxNCArMDIwMAorCisgICAgV2luZG93czogU2lsZW5jZSBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDNhOWY4NzU0MjNjY2FhOGJhZWU3ZTE2NGJiOGE3NWRkOGUwYjczNDMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgNiAwNjoyNzoxMCAyMDE0ICswMjAwCisKKyAgICBQQVRDSCAjMTI3OTogTW9kaWZpZWQgcGF0Y2ggZnJvbSBNb2hhbiBmb3IgY29yZWR1bXAgYWZ0ZXIgY2FsbGluZworICAgIGZyZWUgd2l0aCBhIGJhZCByZWdleC4KKworY29tbWl0IDUxMzAyYmE1NzI4NWQ0ZDQ3OTkyZWQxNWE0NjA1ODAxMTJhM2U5MjQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgNiAwNjoyMToyNCAyMDE0ICswMjAwCisKKyAgICBCVUcgIzI1MjE6IEFJWDogZG9udCBkaWUgd2hlbiBDUFUgaXMgZHluYW1pY2FsbHkgYWRkZWQgdG8gc3lzdGVtLgorCitjb21taXQgMTMxYzkzYmE5MmU0NmRkZGVjNGViM2E4MjA4YWI1YTNjMTAyNjUwOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1heSA2IDA2OjIwOjI4IDIwMTQgKzAyMDAKKworICAgIENvbXBsYWluIGFib3V0IC1EIG9wdGlvbiBpZiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCisKK2NvbW1pdCA5NmE3YTZhODY4OTVmZGJmODkxNzk5ZTM3NjliMjdhN2U1NGFmMDg0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWF5IDYgMDY6MTk6NDIgMjAxNCArMDIwMAorCisgICAgc25tcHRyYXBkLjg6IGFkZCBzb21lIG1pc3NpbmcgZm9ybWF0IHRva2VucyB0byBtYW4gcGFnZS4KKworY29tbWl0IDgwYmU5MDdiZTlmNGYxZGY2YTE0NzBmZWFmYWE5MTZiOWM5YzQ5OTEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBcHIgMjcgMTU6MjU6MzAgMjAxNCArMDIwMAorCisgICAgRml4IGJ1ZyAyMzEzIGZvciBjcm9zcyBjb21waWxhdGlvbi4KKworY29tbWl0IDlhZTU5ODE1MzBmZDJiZGQ5ZjJhNWM4NmI3ZDY5OTRiODczMDMzZDcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBcHIgMjYgMjI6MzY6MjYgMjAxNCArMDIwMAorCisgICAgUHJlcGFyZSBmb3IgRnJlZUJTRCAxMSBhbmQgMTIKKworY29tbWl0IGUzMmY3MGIxMmY1N2QyNmQ2OWQ0OTFmMWM3NDJiMDEzMmFjYTc2NjAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBcHIgMjYgMjE6NDI6MjEgMjAxNCArMDIwMAorCisgICAgRml4IGEgY291cGxlIG9mIHN0cnVjdCBzaXplcyB0byBiZXR0ZXIgbWF0Y2ggZGVjbGFyYXRpb24uCisKK2NvbW1pdCA3Y2MyZGViNWQ5MTVkMjU3MjMyODMxN2QzNzAxZDM1ZDg2MWQzZDkyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXByIDI2IDIxOjM0OjI2IDIwMTQgKzAyMDAKKworICAgIFVzZSBpbmV0X3B0b24gb25wbGFjZSBvZiBpbmV0X2F0b24gdG8gaGVscCBwb3J0YWJpbGl0eS4KKworY29tbWl0IGEwODdmYzlmMTY0MDIzZGU0MTRiMDliZmQzNzQ3YzcyZjFiY2EwN2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBcHIgMjYgMjE6MzA6NTQgMjAxNCArMDIwMAorCisgICAgVXBkYXRlIHRvIGN1cnJlbnQgSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQiBhbmQgY3VycmVudCBSRkNzLgorCitjb21taXQgODU3MDM3YThkMjQ1N2FjOWFhMmE1MjUxMDk1NzY0Nzk3MWE0NjYzNAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEFwciAyNiAyMToyODowMCAyMDE0ICswMjAwCisKKyAgICBQcmVwYXJlIGZvciBGcmVlQlNEIDExIGFuZCAxMi4KKworY29tbWl0IGI5OTMwODQxN2Q0YmU3ZTEzOWY2MTAzZDQ0ZjExYjU1NDMzYTZiZjEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBNYXIgMTYgMDg6MDQ6MTUgMjAxNCArMDEwMAorCisgICAgQmV0dGVyIGRvY3VtZW50YXRpb24gZm9yIHRyYXAgbG9nZ2luZyBmb3JtYXRzLgorCitjb21taXQgYTZlNGViMjZmNWMwNGQxNTc2MWNlYWY5MjQ1ODBlMGM0MGY3MmRmZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE1hciA5IDA4OjQ2OjU3IDIwMTQgKzAxMDAKKworICAgIHN3cnVuXyo6IFNpbXBsaWZ5IGNvbW1pdCBkYTAwYmExCisKK2NvbW1pdCAzN2FmNzkyM2I4MzJmMmVjODA4MzdmYTI4ZWRjYWM4ZWIwYzdlOGVhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gTWFyIDkgMDg6MzQ6MTIgMjAxNCArMDEwMAorCisgICAgc3dydW5fKjogUmVzdG9yZSBidWZmZXIgb3ZlcmZsb3cgcHJldmVudGlvbiBjb2RlIHRoYXQgd2FzIHJlbW92ZWQgaW4gZGEwMGJhMQorCitjb21taXQgZjQzNmNlMjhmZGEzZWRjNzAxMGNkODZlY2YzYzM4NmM1YWY1MjE5NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciA4IDE0OjA3OjU3IDIwMTQgKzAxMDAKKworICAgIHV0aWxfZnVuYzogZml4IHNraXBwaW5nIG9mIGRpZ2l0cyB3aGljaCB3b3VsZCBydW4gb25lIHRvbyBmYXIKKworY29tbWl0IGRhMDBiYTE0MmQ2YjUwNDI1NTg4OWYwOWViOWY3ZDIyMmVmNDBhZGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgOCAxNDowNDoxOSAyMDE0ICswMTAwCisKKyAgICBzd3J1bl8qOiBzbnByaW50IG1heSBoYXZlIHNldCBhIHRvbyBsb25nIHN0cmluZyBsZW5ndGguIEZpeCBpdCBpZiBuZWVkZWQuCisKK2NvbW1pdCAzYjIwMmViMDVlYzRlNWY2ZjhmNTRiYzhhY2I0MzczNzNlNmI1ZDAzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDggMTQ6MDI6MTggMjAxNCArMDEwMAorCisgICAgc3dpbnN0X2FwdDogZW5zdXJlIHJvb20gZm9yIHN0cmluZyB0ZXJtaW5hdG9yCisKK2NvbW1pdCA4YTY2ODE0ZWRhZDVhMjhmZGJjODY0NWZiMGUxNDQ1OWJmOTE1ZGEwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDggMTQ6MDA6MjggMjAxNCArMDEwMAorCisgICAgbXRhX3NlbmRtYWlsOiBpc3NwYWNlIGNhbm5vdCB0YWtlIGEgY2hhciBhcmd1bWVudAorCitjb21taXQgM2U3MzRmYjNiZGRmMTFiOTliNmJhN2RkY2IzMGFlOTMyZDhiYTNiMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciA4IDEzOjU4OjA3IDIwMTQgKzAxMDAKKworICAgIGV4cEV4cHJlc3Npb25Db25mLCBleHBWYWx1ZTogaXNzcGFjZSBjYW5ub3QgdGFrZSBhIGNoYXIgYXJndW1lbnQuCisKK2NvbW1pdCA3NmU4ZDZkMTAwMzIwNjI5ZDhhMjNiZTRiMDEyODYxOTYwMGM5MTlkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA2IDA5OjIxOjUxIDIwMTQgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTI3NTogZnJvbSBWaWxpYW0gUMO6xI1pazogZml4ZWQgUGVybCB0cmFwIGhhbmRsZXIgd2hlbiBwcm9jZXNzaW5nIHRyYXAgd2l0aCBlbXB0eSBjb21tdW5pdHkgc3RyaW5nLgorCitjb21taXQgNWQwNmE1ZmJiNWVkM2NhMmI1ODIwZThlZjJkNWI1Yjg4YjlkN2RmOAorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAzIDExOjU4OjAzIDIwMTQgLTA4MDAKKworICAgIEFsbG93IHRoZSBub2RlbWFwIHRvIGNvbnRhaW4gbXVsdGlwbGUgbm9kZXMgZm9yIG1pYnMgbGlrZSBJRi1NSUIKKyAgICAKKyAgICBJbiB0aGUgSUYtTUlCLCAiaW50ZXJmYWNlcyIgYW5kICJpZk1JQk9iamVjdHMiIGJvdGggY29udGFpbgorICAgIHNpZ25pZmljYW50IHN1YnRyZWVzLiAgQWxsb3cgbm9kZW1hcCB0byBjb250YWluIGEgY29tbWEtc2VwYXJhdGVkCisgICAgbGlzdCBvZiBub2RlcywgdG8gaGFuZGxlIE1JQnMgbGlrZSB0aGlzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMy5wcmUyIC0+IFY1LjcuMy5wcmUzCisKK2NvbW1pdCA1NDE2NmNmNmM3YTk4YmY4ZTVkMGRiYWJmOWI1ZTVhMjU1YzRjNDIxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDI1IDEyOjQ1OjE0IDIwMTQgLTA4MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMy5wcmUzCisKK2NvbW1pdCAzZDRlM2E2NmJkMDk3ZTM3MjBmZTVkZTJmMmUwNTc0MWIzMzA2MzA1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDI1IDExOjQyOjE1IDIwMTQgLTA4MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjMucHJlMworCitjb21taXQgYTFmZDY0NzE2ZjY3OTRjNTVjMzRkNzdlNjE4MjEwMjM4YTczYmZhMQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiAxOSAxNToyMTo1NyAyMDE0IC0wODAwCisKKyAgICBidWcgZml4IGZyb20gZmVubmVyOiBmaXggSUNNUCBtaWIgdGFibGUgaGFuZGxpbmcgb24gbGludXgKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMy5wcmUxIC0+IFY1LjcuMy5wcmUyCisKK2NvbW1pdCBiZjBhMWMzN2Q4YjhjNjQ0ZTgzNzA0MWQwOTBhYWJlOGZkODEzMWU4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDI1IDA3OjQ5OjA0IDIwMTQgLTA4MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMy5wcmUyCisKK2NvbW1pdCBkZWNmZDhkNzliNTRkMjk4ZGVkOTc0MzllZmI3MTBlOGY2YmE1MjRjCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDI1IDA3OjMzOjUyIDIwMTQgLTA4MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjMucHJlMgorCitjb21taXQgOGFlY2NlZjM5YmJhZWI4YjgwMjVhNjhlYzQ3NjFiYzgyZWM5YWVhYQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAyNSAwNzoyNzo0NyAyMDE0IC0wODAwCisKKyAgICBORVdTOiBzbm1wZDogcGF0Y2ggMjUyNTogZnJvbSBSeWFuIFN0ZWlubWV0ejogRml4IGFyZ3VtZW50IGxlbmd0aCBwYXJzaW5nIG9mIHRoZSBob3N0IHJlc291cmNlcyBtaWIKKworY29tbWl0IGIyMjJlN2EzZWVmNTljYmI2OGE0NTM0NzZjYjM2NDM0MmM3NGU2NDAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgMTkgMjI6MjY6MDggMjAxNCArMDEwMAorCisgICAgRml4IHNwZWxpbmcgZXJyb3IKKworY29tbWl0IGY4ZmNiM2JjMzgxODhjY2JlOWJhY2VlNThkNmZkMmI5ODNkMDk5MjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgMTkgMjI6MjQ6MjYgMjAxNCArMDEwMAorCisgICAgRml4IHNwZWxpbmcgZXJyb3IKKworY29tbWl0IGQyMTRkNzBjNDUyNGU2MmZjY2FmMTA4M2FiYzViYTFhNDM5YTQ2M2UKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgMTkgMjI6MjE6NTUgMjAxNCArMDEwMAorCisgICAgc25tcHN0YXR1czogZGV0ZWN0IFNOTVAgZXhjZXB0aW9uIHJlc3BvbnNlcy4KKworY29tbWl0IGJmNzVlYzY2OTY1ZDE1N2NiMDQ0MmY3ZGZmNTY1NmY5OWNkNzA2MzUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBGZWIgMTkgMjI6MjA6MDUgMjAxNCArMDEwMAorCisgICAgRml4IHRlc3QgZm9yIGNvbTJzZWM2IGFjY2Vzcy4KKworY29tbWl0IDY1NjdhMzdmYTMwMWI4ZmExYjY4MDA5ZDVhMGIzYTNjYmZiOWU4ZjEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTcgMjE6NDk6MTMgMjAxNCArMDEwMAorCisgICAgdGVzdGluZy9NYWtlZmlsZS5pbjogbWFrZSBzdXJlICckJyBzdXJ2aXZlcyBmb3IgcGVybCB0ZXN0LgorCitjb21taXQgMDViNTUxYmMzMzExODVlZGExYzA4MWQzMTM4ZDBhYzYyNWIwN2Q2YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiAxNyAyMTozNjo0OCAyMDE0ICswMTAwCisKKyAgICBGaXggc29tZSBtYW4gcGFnZSBzcGVsbGluZ3MuCisKK2NvbW1pdCA4YjA1NTVkOTVjYmMyMzhjYmU5ODM2NDM5Yjg4MDcwYzgwYTljYTVlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDE3IDIxOjM1OjI4IDIwMTQgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmaXggY2FsbCBvZiBtZW1jcHkgd2l0aCBvdmVybGFwcGluZyBhcmVhcy4KKworY29tbWl0IDNjNmE3YTZjOTQ3NDI0ODI0ZTcyNGUyOTQ0ODNhN2VjZDcwZDlkNDEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgMTcgMjE6MzM6NDcgMjAxNCArMDEwMAorCisgICAgcm91dGVfaW9jdGwuYzogc2V0IHByb3BlciBtYXNrIGJlZm9yZSBTSU9DREVMUlQuCisKK2NvbW1pdCBmOTllZjVjZWYyMDNlYTM3ODU1M2EyYWI0OTI1ZmNkODY5ZTdmNWEzCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUdWUgRmViIDExIDA4OjQ3OjUxIDIwMTQgLTA4MDAKKworICAgIERhdmlkIEphcnZpZSdzIHBhdGNoIGZvciBidWcgMjUwNworCitjb21taXQgZDcwZjJlOTFlMmM3MjU4ZTc2OGUzMmI2ODNkODE0YTk0MTU2NGFjMQorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgTW9uIEZlYiAzIDExOjU4OjAzIDIwMTQgLTA4MDAKKworICAgIEFsbG93IHRoZSBub2RlbWFwIHRvIGNvbnRhaW4gbXVsdGlwbGUgbm9kZXMgZm9yIG1pYnMgbGlrZSBJRi1NSUIKKyAgICAKKyAgICBJbiB0aGUgSUYtTUlCLCAiaW50ZXJmYWNlcyIgYW5kICJpZk1JQk9iamVjdHMiIGJvdGggY29udGFpbgorICAgIHNpZ25pZmljYW50IHN1YnRyZWVzLiAgQWxsb3cgbm9kZW1hcCB0byBjb250YWluIGEgY29tbWEtc2VwYXJhdGVkCisgICAgbGlzdCBvZiBub2RlcywgdG8gaGFuZGxlIE1JQnMgbGlrZSB0aGlzLgorCitjb21taXQgOTg3ODFhZTNkYTQzYjdiMTU4M2VjZGUzZTIxYmI2NTI1YTJjMGI4MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAyNyAyMjoyNDoxOCAyMDE0ICswMTAwCisKKyAgICByb3V0ZV9pb2N0bC5jOiBGaXggc2V0dGluZyB0aGUgbmV0bWFzayB3aGVuIGNyZWF0aW5nIHJvdXRlIHRocm91Z2gKKyAgICBpbmV0Q2lkclJvdXRlVGFibGUgYW5kIGlwQ2lkclJvdXRlVGFibGUuCisKK2NvbW1pdCAyZTk0Nzc3NjkzZjE4NTM0NzlkZWQ2NzBiZTMwN2VjZTcxMzhmZWI1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDI3IDIyOjEzOjA1IDIwMTQgKzAxMDAKKworICAgIEZpeCBjb21waWxlIGZvciBTb2xhcmlzIHdpdGhvdXQgSVB2Ni4KKworY29tbWl0IDhmNjk5MWEyMTE0ZmQyMWJhNTUxOWVlOTU3NmJlYjA4MmY2MDNkZWMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMjMgMTY6MzA6NDYgMjAxNCArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IHNlYXJjaCBpZk5hbWUgYW5kIGlmQWxpYXMgd2hlbiBsb29raW5nIGZvciBpbnRlcmZhY2UKKyAgICBuYW1lIGZyb20gLUNJIG9wdGlvbi4KKworY29tbWl0IDRhMzYwMTA0NjU5YzE2OWNlMjMyMjU2ZTEzOGQ5MzhkOTRlNDM1ZjkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMjMgMTY6Mjg6MzIgMjAxNCArMDEwMAorCisgICAgbG9nbWF0Y2g6IGZpeCBvdXQtb2YtYm91bmRzIGFjY2Vzcy4gVGhhbmtzIHRvIGdjYyBvciBjbGFuZworICAgIHdpdGggLWZzYW5pdGl6ZT1hZGRyZXNzIChyZWNvbW1lbmRlZCEpCisKK2NvbW1pdCBlZWYyZjY0YjQ2MzU3YjM1M2M3OTUwNGJjNTkzNTM1ZWJlNzQyMWU3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDIzIDE2OjI3OjA3IDIwMTQgKzAxMDAKKworICAgIGNwdV9saW51eDogc3VwcG9ydCBzeXN0ZW1zIHdpdGggbW9yZSB0aGFuIDEwMCBjcHVzLgorCitjb21taXQgM2JkNjgzYzk2ZDZhODg2NGZiZDgwNzg1NzRhZWU4Y2Q0MzFjZTMwMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxNSAxODozNjowMSAyMDE0ICswMTAwCisKKyAgICBVcGRhdGUgb3B0aW9ucyBsaXN0cyBpbiBtYW51YWwgcGFnZXMgYW5kIGNvbW1hbmRzIGhlbHAuCisKK2NvbW1pdCBhNWVmZThkZjE3ZGRjNGY2NjkzYzdkYTlhNTJjNDAxZjRkYjJiZTYzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE1IDE4OjI4OjI0IDIwMTQgKzAxMDAKKworICAgIHRlc3QgVDAyNzogbWFrZSBzdXJlIGl0IHdvcmtzIGFsc28gd2hlbiBjb25maWd1cmVkIHdpdGggLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uICE9IDMuCisKK2NvbW1pdCA1N2QxMDgyOTAwZjlhYzkzMTQ0NDMxNmE2Zjk1ZjE5ZWRhMDY5MDc0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE1IDE4OjI2OjI0IDIwMTQgKzAxMDAKKworICAgIGNwdV9saW51eDogcmVtb3ZlIHJlZHVuZGFudCBjYXN0cy4KKworY29tbWl0IDlmNGM1NzI2MTQwOTE0MDRkZWNiYTBkNGVmMWE0Y2JhZjlmYzViZDIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDkgMTM6MzU6MjcgMjAxNCArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIG1vbml0b3JpbmcgYmFzZWQgb24gbm9uLWRlbHRhIHRyaWdnZXIuCisgICAgCisgICAgc25tcGQgY3Jhc2hlZCB3aXQgZm9sbG93aW5nIHNubXBkLmNvbmY6CisgICAgICAgIG1vbml0b3IgLXMgLUQgLXIgMTAgLWUgTE9HTUFUQ0ggLW8gbG9nTWF0Y2hDdXJyZW50Q291bnQgIkxvZyBNYXRjaCIgIT0gbG9nTWF0Y2hDdXJyZW50Q291bnQKKyAgICAgICAgbG9nbWF0Y2ggTG9naW5GYWlsdXJlMSAvdmFyL2xvZy9zZWN1cmUgMTAgc3U6IC4qZmFpbC4qCisgICAgCisgICAgVGhlIHJlYXNvbiB3YXMgdW5pdGlhbGl6ZWQgdmFyaWFibGUgc3lzVVRfdmFyIGluIG10ZVRyaWdnZXJfcnVuKCksIGl0IHdhcworICAgIGZpbGxlZCBvbmx5IGlmIHRoZSB0cmlnZ2VyIHdhcyBkZWx0YS12YWx1ZWQsIHdoaWxlIGl0cyB2YWx1ZSB3YXMgdXNlZCBmb3IgYWxsCisgICAgdHJpZ2dlcnMuCisgICAgCisgICAgV2l0aCB0aGlzIHBhdGNoLCBzeXNVVF92YXIgaXMgZmlsbGVkIGZvciBhbGwgY29kZSBicmFuY2hlcyB3aGVyZSBpdCBpcyBuZWVkZWQuCisKK2NvbW1pdCBjNzUxMmFmZTU2NDNlY2FhZTk3NDVhYzE5OWI4MzljM2FhZDg0NTdiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI5IDE3OjM0OjUxIDIwMTMgKzAxMDAKKworICAgIFJlZ2VuZXJhdGUgZGVwZW5kZW5jaWVzCisKK2NvbW1pdCBjOTFmODQwZDgzOTgxZjY2MGI3NTI3NGRiY2MzODdjYjVjNWY5OWFmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI5IDE3OjI5OjI2IDIwMTMgKzAxMDAKKworICAgIFJlZ2VuZXJhdGUgZGVwZW5kZW5jaWVzCisKK2NvbW1pdCAyZGQ3ZGJhNzZkMWQwYjRmODY2ODM0ZTBmZDYwMTQ4YzI4MWExNTNjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI5IDE3OjI1OjA1IDIwMTMgKzAxMDAKKworICAgIFJlZ2VuZXJhdGUgZGVwZW5kZW5jaWVzCisKK2NvbW1pdCA1OTE0MzFmNzk5MWY4M2QyMzg1YWRiYzVhMjJjNGE4OTU3NmJjMzEzCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI5IDE3OjIxOjU2IDIwMTMgKzAxMDAKKworICAgIFJlZ2VuZXJhdGUgY29uZmlndXJlIHVzaW5nIHRoZSByaWdodCBhdXRvY29uZiB2ZXJzaW9uCisKK2NvbW1pdCA4NWJiNGI1YzlmNDg5Njg3NjcxNWNiMWYxNGY0ZjFiNTgyZDIyM2JkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI5IDE3OjEyOjAzIDIwMTMgKzAxMDAKKworICAgIFJlZ2VuZXJhdGUgZGVwZW5kZW5jaWVzCisKK2NvbW1pdCBkMjU1Y2E0MjZkMWUzZDRiYzQ4YjhmM2RiOTM3NDM1Nzg4OTM0YzQyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI5IDEyOjM1OjMwIDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBdm9pZCBkdXBsaWNhdGUgYW5kIHRyYWlsaW5nIHNwYWNlcyBpbiB0aGUgZGVwZW5kZW5jeSBmaWxlcy4KKworY29tbWl0IGQxNWNkMmI5NzQzY2NjYjUwMmRlYWZkMTQzYWRlMGFhOTBjZjMxZTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMDk6MDU6MTMgMjAxMyArMDIwMAorCisgICAgTWluR1c6IEJ1aWxkIGZpeAorICAgIAorICAgIEFwcGFyZW50bHkgd2l0aCByZWNlbnQgTWluR1cgaGVhZGVyIGZpbGVzIDx3aW5zb2NrMi5oPiBzaG91bGQgYmUKKyAgICBpbmNsdWRlZCBpbnN0ZWFkIG9mIDx3aW5zb2NrLmg+LiBNb2RpZnkgPG5ldC1zbm1wL3R5cGVzLmg+IGFjY29yZGluZ2x5LgorCitjb21taXQgN2JhMjNlNTcwNzY0OTllZjhlZWIyMzg4NTM4MzQ3M2NjZjQ0NzM2NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAxNSAxMDo1ODoyNSAyMDEzICswMTAwCisKKyAgICBXaW4zMjogYmF0Y2ggYnVpbGQ6IENoZWNrIHdoZXRoZXIgUGVybCBhcmNoaXRlY3R1cmUgbWF0Y2hlcyB0YXJnZXQgYXJjaGl0ZWN0dXJlCisgICAgCisgICAgQnVpbGRpbmcgdGhlIFBlcmwgbW9kdWxlcyBmYWlscyBpbiBhIHN1YnRsZSB3YXkgaWYgZS5nLiBhIDMyLWJpdCBQZXJsCisgICAgaW50ZXJwcmV0ZXIgaXMgcHJlc2VudCBpbiAlUEFUSCUgYW5kIGEgNjQtYml0IEMgY29tcGlsZXIgb3IgdmljZSB2ZXJzYS4KKyAgICBIZW5jZSBjaGVjayB3aGV0aGVyIFBlcmwgaW50ZXJwcmV0ZXIgYW5kIEMgY29tcGlsZXIgdGFyZ2V0IGFyY2hpdGVjdHVyZQorICAgIG1hdGNoIGJlZm9yZSBzdGFydGluZyBhIGJ1aWxkLgorCitjb21taXQgNmI3MDZjNTNkNGNmNzUxZTQ5NWFhYjY2ZmUzOWZkNTFjMzJjZTkzMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAxNSAxMDowNjoyMSAyMDEzICswMTAwCisKKyAgICBXaW4zMjogVmlzdWFsIFN0dWRpbyAyMDEzIGJ1aWxkIGZpeAorICAgIAorICAgIEFwcGFyZW50bHkgVmlzdWFsIFN0dWRpbyAyMDEzIGRvZXMgbm90IHN1cHBvcnQgZ290byA8dHlwZWRlZiBuYW1lPi4KKyAgICBIZW5jZSByZW5hbWUgdGhlIFVJTlQgbGFiZWwuIEZvciBjb25zaXN0ZW5jeSByZWFzb25zLCBhbHNvIHJlbmFtZQorICAgIHRoZSBPQ1QgbGFiZWwuCisKK2NvbW1pdCAxM2M4NTkwZTM4MjY5YTkyNjVlYWQ1Yzg1ZjA1Yzg4OTRlODZkODRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDE1IDA5OjMxOjQ0IDIwMTMgKzAxMDAKKworICAgIFJlbW92ZSB0aGUgTkVUU05NUF9ET05UV0FJVCAvIE5FVFNOTVBfTk9TSUdOQUwgYWxpYXNlcyBmb3Igc2VuZHRvL3NlbmRtc2cgZmxhZ3MKKyAgICAKKyAgICBOb3RlOiB0aGlzIHBhdGNoIGlzIGEgbW9yZSBlbGFib3JhdGUgdmVyc2lvbiBvZiB0aGUgVjUtNy1wYXRjaGVzIGNvbW1pdAorICAgIDg5YTUwNGZlMzMxZTA5YTU0ZjZiMDFjMjg3N2NmMDIyOTAwNzA1YTggKDIwMTEtMTItMTkpLgorCitjb21taXQgZTBlYWQyZDU0ZWJmNDM1MzNlNTYyYzM0MDJlMTIxODhjZmRjMDc5ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IERlYyAxNCAxODo1NDowMSAyMDEzICswMTAwCisKKyAgICB3aW4zMi9idWlsZC5wbDogQWRkIHN1cHBvcnQgZm9yIHRoZSBWaXN1YWwgU3R1ZGlvIDIwMTMgY29tbWFuZC1saW5lIGVudmlyb25tZW50CisKK2NvbW1pdCA4ODg2MDk1YTk5MDkwMjkzYjA2YTA3MTllN2I4NjhmMWVkYzE0OTMzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgRGVjIDE0IDE4OjI5OjAxIDIwMTMgKzAxMDAKKworICAgIGxpYmFnZW50OiBXaW4zMiBidWlsZCBmaXggKHNlZSBhbHNvIGNvbW1pdCAwMTcyM2M2KQorCitjb21taXQgNWYzMmI0YWFhOGJjZDIyZWJhOWM2NDkyMjNmZTA4MGQ1NDc5YmM4ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IERlYyAxNCAxNzoxNzozMCAyMDEzICswMTAwCisKKyAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaDogQWRkIGEgbWlzc2luZyBkZWNsYXJhdGlvbgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMiAtPiBWNS43LjMucHJlMQorCitjb21taXQgZDAxMTdhZGVlODRlZmNiNThhNWU0MTgzZjdkN2NjNmU3MDBmMDI2NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyA1IDIzOjMzOjUxIDIwMTMgLTA4MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMy5wcmUxCisKK2NvbW1pdCBiMWRiZGE4YmJjY2E4MjM3NzY2NGRjYTljYjZiYjA2ZjljZTYzN2EyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDUgMjM6MzM6MzcgMjAxMyAtMDgwMAorCisgICAgUmVwbGFjZSAvLyBjb21tZW50cyB3aXRoIC8qIGNvbW1lbnRzCisKK2NvbW1pdCA5ZWUzOTZjZWMxODExNTEyZmJjYjI0NDkwYjNiZTBiOTcwZjY5ZmZiCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDUgMjM6MDY6MTMgMjAxMyAtMDgwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMy5wcmUxCisKK2NvbW1pdCA2YzM5MmZlZDZjZDVkN2EzMmVkMTBjODE3MGFlZDg1MWNlZTc3OTg1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDUgMjM6MDQ6MjUgMjAxMyAtMDgwMAorCisgICAgaW5jcmVtZW50IHRoZSByZXZpc2lvbgorCitjb21taXQgZjU0MDNlNzU2N2ViMDcxYmVkOGRhZGJhMzhhMmNkYTYwMzMyYjhmYworQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgU3VuIERlYyAxIDE4OjI0OjEyIDIwMTMgLTA4MDAKKworICAgIERvbid0IHNldCB0aGUgaWZpbmRleCB3aGVuIHNlbmRpbmcgYSBub3JtYWwgcmVwbHkuCisgICAgCisgICAgU2V0dGluZyB0aGUgaWZpbmRleCBpbiB0aGUgSVBfUEtUSU5GTyByZXN1bHRzIGluIHNldHRpbmcKKyAgICB0aGUgc291cmNlIGFkZHJlc3MgdG9vIChpZ25vcmluZyB0aGUgc291cmNlIGFkZHJlc3MgdGhhdAorICAgIHdlIGFsc28gc3VwcGx5KS4gIFRoZSBzZXF1ZW5jZSBoZXJlIGlzIHRoYXQgd2Ugc2VuZCB3aXRoCisgICAgbm8gaW50ZXJmYWNlIHNwZWNpZmllZCBidXQgdGhlIHJlcXVlc3QncyBkZXN0aW5hdGlvbgorICAgIHNwZWNpZmllZCBhcyBvdXIgc291cmNlLiAgSWYgd2UgZ2V0IEVJTlZBTCwgaXQncyBiZWNhdXNlCisgICAgdGhlIHJlcXVlc3QncyBkZXN0aW5hdGlvbiB3YXMgYSBicm9hZGNhc3QgYWRkcmVzcyB3aGljaAorICAgIGlzIGFuIGludmFsaWQgc291cmNlIGFkZHJlc3MsIHNvIHdlIHRyeSBhZ2FpbiB3aXRoIHRoZQorICAgIGluY29taW5nIGludGVyZmFjZSdzIGlmX2luZGV4IGFuZCBzcGVjaWZ5IHRoZSBzb3VyY2UKKyAgICBhcyBJTkFERFJfQU5ZLgorICAgIAorICAgIElmIHdlIHN1cHBseSB0aGUgaWZpbmRleCBpbiB0aGUgZmlyc3QgY2FsbCwgYSByZXBseSBmcm9tCisgICAgYSBtdWx0aS1ob21lZCBhZ2VudCBtYXkgY29tZSBmcm9tIGEgZGlmZmVyZW50IHNvdXJjZSBhZGRyZXNzCisgICAgdGhhbiB0aGUgcmVxdWVzdCB3YXMgc2VudCB0bywgcG90ZW50aWFsbHkgY29uZnVzaW5nIGEgbWFuYWdlci4KKyAgICBUaGlzIGJ1ZyB3YXMgZmlyc3QgaW50cm9kdWNlZCBpbiBTVk4gcjE3ODU1IGFuZCB3YXMgZml4ZWQKKyAgICBpbiBTVk4gcjE5NzY3OyBhbHNvIHNlZSB0aGUgbWFpbGluZyBsaXN0IHRocmVhZAorICAgIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvbWFpbGFyY2hpdmUvZm9ydW0ucGhwP3RocmVhZF9uYW1lPUFBTkxrVGltMzdIN003QmEwMTBMbWRrMVlHWUt3UFRrRHlSS29Ecjc2dXFEVCU0MG1haWwuZ21haWwuY29tJmZvcnVtX25hbWU9bmV0LXNubXAtY29kZXJzCisKK2NvbW1pdCAxNDRhMTMyMDhiNGZhNmYwYTFjZDk3MWY0MWE3Mjc5NzE2YjI3ZWVlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDI5IDA4OjA3OjI4IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmaXhpbmcgdGhlIHN0YXRzIG91dHB1dCBicm9rZSB0aGUgY29ubiBvdXRwdXQgOi0oLiBGaXhlZC4KKworY29tbWl0IGY0ZTVlZTZmMzk2MzBiNzNmOGFkOTk0NmM5OTBlOTY5MDU4MGQ3Y2YKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBOb3YgMjcgMDE6MTI6MDAgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIHRlc3RzIGZvciBhc25fcmVhbGxvY19yYnVpbGRfKmludCogYW5kIHRlc3RzIGZvciBvcGFxdWUgdW5zaWduZWQgNjQtYml0IHR5cGVzLgorCitjb21taXQgMjBlNGIzNzkzMmE5ZTljYzU2YjM2MGEyMzZlOWQ4MTgwNzkzYTI5NworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIE5vdiAyNyAwMDo1NDo1OCAyMDEzICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBDb3JyZWN0IHRoZSB0eXBlIGNoZWNrIGZvciBvcGFxdWUgdmFyaWFibGVzIHdoZW4gZGVjb2RpbmcgY291bnRlcjY0IHZhbHVlcy4KKyAgICAKKyAgICBUaGFua3MgdG8gcmtqQHNvZnRob21lLm5ldCBmb3IgcmVwb3J0aW5nIHRoaXMgaXNzdWUuCisKK2NvbW1pdCA2ZTc2Y2JiYjJhMDc4M2YyMmY1OGZiN2QzMjNlOWY3MjE3Y2M2MDRhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgTm92IDI3IDAxOjAxOjA0IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEF2b2lkIGZhaWx1cmUgdG8gdHJpZ2dlciBzaWduIGV4dGVuc2lvbiBkdWUgdG8gb3ZlcmxvbmcgdHlwZXMKKyAgICAKKyAgICBJbiBhc25fcmVhbGxvY19yYnVpbGRfc2lnbmVkX2ludDY0IHRoZSBhbGdvcml0aG0gYXNzdW1lcyB0aGF0IHNoaWZ0aW5nCisgICAgdmFsdWVzIGdyZWF0ZXIgdGhhbiAweDdmZmZmZmZmIHJpZ2h0IGlzIGFuIGFyaXRobWV0aWMgc2hpZnQgdGhhdCB3aWxsCisgICAgc2hpZnQgaW4gMSdzLiBPbiBob3N0cyB3aGVyZSBsb25nIGlzIG1vcmUgdGhhbiAzMiBiaXRzIHRoZSB1c2Ugb2YgbG9uZworICAgIGZvciAnbG93JyBhbmQgJ2hpZ2gnIG1ha2VzIHRoaXMgYXNzdW1wdGlvbiBmYWxzZS4KKyAgICAKKyAgICBUaGFua3MgdG8gcmtqQHNvZnRob21lLm5ldCBmb3IgcmVwb3J0aW5nIHRoaXMgaXNzdWUuCisKK2NvbW1pdCA0YTRiNzhlNjNkZDY4ODg5MmI3Mzk5YjU4NGUyNmUwNDdkMzY3NTAxCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDI3IDIyOjE2OjQ0IDIwMTMgKzAxMDAKKworICAgIEFkZGl0aW9uYWwgZml4IGZvciBkYXJ3aW4xMworCitjb21taXQgOTFiZDVkNGM1ZjQxYjU0YzQ2MjQyODgzZGI5MmFhNGU0OTQ1NTI5NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyNyAyMjoxMzowMyAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZml4IHRydW5jYXRlZCBzdGF0aXN0aWNzIHdoZW4gdXNpbmcgLXYxCisKK2NvbW1pdCAwY2IxNGQ0ZTVjMzlhMDdjNzg0NzQ4ODFlNmM3M2ZhNjE3NTA3YmRiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDI3IDIyOjA2OjU4IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmaXggc3RhdGlzdGljcyBmb3IgaXB2NgorCitjb21taXQgMmQ0ZGVmZTc3YmRlYmJiYzFhNzczZWI4ZDQ4NDk4YjZmMjU1OGYyMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIE5vdiA1IDA2OjQ5OjM1IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBVc2UgMCBmb3IgdGhlIGlnbm9yZWQgbnVtdmFycyBhcmd1bWVudCB0byBuZXRzbm1wX3JlZ2lzdGVyX21pYgorICAgIAorICAgIFRoZSBudW12YXJzIGFyZ3VtZW50IG9mIG5ldHNubXBfcmVnaXN0ZXJfbWliIGlzIGlnbm9yZWQgaWYgdGhlIHZhcgorICAgIGFyZ3VtZW50IGlzIE5VTEwuIEluIG9yZGVyIHRvIHVuaWZ5IHRoaXMgdXNlIG9mIGl0IHdpdGggYWxsIG90aGVyIG9uZXMsCisgICAgY2hhbmdlIGl0IGZyb20gMSB0byAwCisKK2NvbW1pdCBiOTkzM2U2MTgzYjE3MTVjOTBkN2NmNmRmYWMxODkxMDAwNzk2YmNlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTm92IDIyIDIzOjA0OjA4IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgc29tZSB1bnVzZWQgaW5jbHVkZXMKKworY29tbWl0IGE3ODMwNzAzOGJmMGI0ODU5ZTExYmQ4NmNhMzA0OWMzMzlhYmUxMjYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMjMgMDk6NDk6MDEgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBhIG1pc3NpbmcgZnVuY3Rpb24gZGVjbGFyYXRpb24KKworY29tbWl0IGQ4ZDYwNzhiM2U2NWI1YmExMzFkZjg0MmQ5MmM3NzQzNzM3ZmY5NTUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBOb3YgMTkgMDg6MDY6MzQgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFyayByZWdpc3Rlcl9zaWduYWwgYW5kIHVucmVnaXN0ZXJfc2lnbmFsIGFzIHVudXNlZC4KKworY29tbWl0IGJmMDgzZjViNjljY2I5NWZmNzBlMmEyOGE3YzY0ZmVjN2Q3ZTQyMmUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTggMjI6NDE6MjggMjAxMyArMDEwMAorCisgICAgUGF0Y2ggYTEyNzA6IG1hbiBwYWdlIGZpeHVwcyAodGhua3MgQWxla3NhbmRycyBTYXZlbGpldnMpCisKK2NvbW1pdCA2MmE2MzRjZTY3MWMzOGFkZTk3OTE3MDc3MDM5ZTM0YWUzZDkyNzM0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gTm92IDMgMTY6MDI6MzkgMjAxMyAtMDgwMAorCisgICAgV2luMzI6IFVuYnJlYWsgdGhlIGJ1aWxkIChzZWUgYWxzbyBjb21taXQgMjUzZjkwNzQzKQorCitjb21taXQgYTgxM2I1MTExMjU1Zjc1ZmVmNjk0NGNlZGQ2NDhkYmY4YzM0YTlhZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE5vdiAxMSAxNzo1NDo0NCAyMDEzICswMTAwCisKKyAgICBXaW4zMjogcGVybDogQXZvaWQgdHJhbnNwb3J0IGluaXRpYWxpemF0aW9uIGZhaWx1cmUgaW4gUGVybCBTTk1QIGFnZW50cworICAgIAorICAgIEF2b2lkIHRoYXQgdGhlIGZvbGxvd2luZ24gbWVzc2FnZSBpcyBwcmludGVkIGR1cmluZyBzdGFydHVwIG9mIGEgUGVybCBTTk1QCisgICAgYWdlbnQ6CisgICAgCisgICAgbmV0c25tcF9hc3NlcnQgcyAhPSAoLTEpIGZhaWxlZCAuLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUEJhc2VEb21haW4uYzo0ODQKKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgMzZhN2RlNzIzMGZiYmJiNTJjYzM3Y2JiZWQyODFlYjU1OTQwNGJlOS4KKworY29tbWl0IGEyYTNhMWFhNjdmZjM4ZGFhOGYxMzk1MThhYmIzNTQ4NDc1ZWQ1OTEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgOCAyMjozMjoyOSAyMDEzICswMTAwCisKKyAgICBzbm1wbmV0c3RhdDogZml4IHVzYWdlIG1lc3NhZ2UgdG8gYmUgY2xvc2VyIHRvIHJlYWxpdHkuIEZpeCBoYW5kbGluZyBvZiAtQ3AgYW5kIC1DZiBvcHRpb25zIHdpdGggbmV3IHRhYmxlcy4KKworY29tbWl0IDcyNzc0MDAxMDJkZmNhOTIxZWFjMGJkOWNlZjg2YjMyZjU5ODAwM2QKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgOCAyMjozMDoxNCAyMDEzICswMTAwCisKKyAgICBDbGVhbiB1cCBzbm1wbmV0c3RhdCBtYW4gcGFnZSwgcmVtb3Zpbmcgc29tZSBsZWZ0IG92ZXIgY3J1ZnQgbWFuCisgICAgb3JpZ2luYWwgYnNkIG5ldHN0YXQgcGFnZS4KKworY29tbWl0IGViMDM3OWRiMzg1M2ZhZDEzOGY5MmY0NzkyYTgwMzQxNzdkOTYyOWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgNCAyMjowOTo1NSAyMDEzICswMTAwCisKKyAgICBGaXggbGVuZ3RoIG9mIGRlZmF1bHQgcm91dGVyIGFkZGRyZXNzIHVzaW5nIHN5c2N0bC4KKworY29tbWl0IDhmYTQ2ZjI5NjEzYzE3OTJjNGExNDQzMjk0NDI3M2I2ZDc0ZTNmM2MKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgNCAyMjowNzo1NiAyMDEzICswMTAwCisKKyAgICBGaXggaGFuZGxpbmcgb2YgY29tbWFuZCBuYW1lcyB3aXRoIGJsYW5rcyBvbiBMaW51eC4KKworY29tbWl0IDZmY2IzODFkY2Q0NjBiNzk1NTYzMzllYjM2ZmJlNTc5YmY0OWRjMDMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgNCAyMjowNTo1NiAyMDEzICswMTAwCisKKyAgICBBZGQgTElTUC1NSUIgdG8gcmZjbGlzdC4KKworY29tbWl0IDFjNTEwNDc0MTA3MDIxOWYxMzgwMGQ3NmFmZDU3YTBkNjM2YzI0M2IKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgNCAyMTo1NDozNiAyMDEzICswMTAwCisKKyAgICBGaXggcGFnaW5nIHN0YXRpc3RpY3MgZm9yIE9wZW5CU0QgNS40CisKK2NvbW1pdCAyZjU3YjgwNGU4M2I4Zjg5Yjg5Njk2MzdmODNkODg4NjAxMDgzOGZmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDMwIDIxOjM1OjMzIDIwMTMgKzAxMDAKKworICAgIEFkZCBkYXJ3aW4xMyBzdXBwb3J0IGZpbGUKKworY29tbWl0IDgyM2Q1MWY3OWI4NGUxMzU5M2U1YjFhYzliNDA3NjM0YzU0MzQ2ZjQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjEgMjA6NDk6NTMgMjAxMyArMDIwMAorCisgICAgRml4IG1ha2UgaW5zdGFsbCBpbiBtYW4gZGlyZWN0b3J5IGZvciBTb2xhcmlzIGNhdXNlZCBieSBWUEFUSCBvZGRpdHkuCisKK2NvbW1pdCBjNTc1MjA0YTAyMDU5MTk5NDI4Y2UxMzViYzEyZWNiMzg1ZTM2NzYzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIxIDIwOjQ3OjMxIDIwMTMgKzAyMDAKKworICAgIENoYW5nZSBhbiBvY2N1cnJlbmNlb2Ygc3ByaW50ZiB0byBzbnByaW50Zi4KKworY29tbWl0IGEyYmRhOTk0MDE5MjgwMjc4YmVkZWQ3OTE3Yzg3N2ZjYjQ0ODg3M2QKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjEgMjA6NDY6MzAgMjAxMyArMDIwMAorCisgICAgQmV0dGVyIHdvcmRpbmcgZm9yIHN0YXRpc3RpYyBlbnRyeS4KKworY29tbWl0IDY2NDRiMDVkM2NmMzQxMjNjZWRhNzRiN2I4NGYxNjk0NDM1OWU3Y2EKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjEgMjA6NDU6MTUgMjAxMyArMDIwMAorCisgICAgRml4IHdhcm5pbmdzIGZvciBsaWJubDEuCisKK2NvbW1pdCA5NDA4MTZlMDE5MTcxYTA0MTRlZTAwYTQ2Y2RhNGNlNjBiYzAxZjcxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgT2N0IDUgMTE6MDU6MTIgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDEyNjU6IEZpeCBhIGJ1ZmZlciBvdmVyZmxvdyBpbiBkdW1wX3JlYWxsb2Nfb2lkX3RvX2luZXRhZGRyZXNzKCkKKworY29tbWl0IDA5OTJlY2Y4ZmM1ZDg3ODM3MDA2ZDRiYzNhODY4MWU1NzM2ZTM1NzMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBPY3QgMTcgMDc6MTY6MjMgMjAxMyArMDIwMAorCisgICAgcGFzc19wZXJzaXN0OiB6YXAgcG9zc2libGUgQ1IgYXQgZW5kIG9mIGxpbmUuCisKK2NvbW1pdCBlYjg4ZTAyNGI0YzI2Nzk5NGRlNDA0MDFlOGI3ZDc3ZTMyZGVjNmNmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDE1IDIxOjMzOjU2IDIwMTMgKzAyMDAKKworICAgIE1haW50YWluIGJ5dGUgb3JkZXIgZm9yIElQdjYgcG9ydCBudW1iZXJzIGluIHRyYW5zcG9ydCBkYXRhIChwcm9ibGVtIHN1cmZhY2VkIGluIHNubXBUYXJnZXRBZGRyRW50cnkpCisKK2NvbW1pdCBmMmU1N2I4ZTYzOGExZmNkYzg1ZmQwZmQyZjY1NTJhMzNmY2FiM2Y4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDE1IDIxOjE3OjIxIDIwMTMgKzAyMDAKKworICAgIHNubXBuZXRzdGF0OiBiZXR0ZXIgaGFuZGxpbmcgb2Ygc25tcCBleGNlcHRpb25zLgorCitjb21taXQgZTAyODAyOTRlN2U2YmViZDYyZmJhYjk5MjhiMWI1ZjAxYjczNWU3MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCAxNSAyMToxNTozOSAyMDEzICswMjAwCisKKyAgICBGaXggRElTUExBWS1ISU5UIGZvciBuZWdhdGl2ZSB2YWx1ZXMgYW5kIGhpbnQgImQtbiIuCisKK2NvbW1pdCAxYWJiNWEwOTRkMjc1MTRiODE0N2IxMTI4ZGIyY2RkY2IxNzAzYmI4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTm92IDIgMTQ6NDU6NDIgMjAxMiArMDEwMAorCisgICAgVXNlIE5FVFNOTVBfUFJJeiB0byBwcmludCBzaXplX3QgdmFsdWVzIGluIF9zZXNzX3JlYWQKKworY29tbWl0IGFjYjcyNTg5YWNiMzAxOGU0NDNmNWUzZjY1NGRkMDNmN2MyNjMxNmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMSAxODo0MTo1MSAyMDEzICswMjAwCisKKyAgICBBZGQgZm9yZ290dGVuIGljbXBPdXRFY2hvcyB0byBpY21wTXNnVGFibGUuCisKK2NvbW1pdCAyNTNmOTA3NDM5MTUxMDIzYTkyYTNhYzQzYTlmMzE3ZTNhNGUxN2ZhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDMwIDIyOjEzOjQzIDIwMTMgKzAyMDAKKworICAgIFNvbGFyaXM6IHN1cHBvcnQgaWNtcE1zZ1N0YXRzVGFibGUKKworY29tbWl0IDZlZTkxZjA2YjViZDBlMGNiZDJiNjlmM2RhZTBiZjYxNDFjYzk1NTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMzAgMDY6NTk6MTAgMjAxMyArMDIwMAorCisgICAgU29sYXJpcyBzdXBwb3J0IGZvciBJUC1GT1JXQVJELU1JQgorCitjb21taXQgNGViZGYzZmIwNDQ1ZjkwNjdlY2IzODM5NGMyZGYyYmQzYjczODE4MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAzMCAwNjo1NDoyOCAyMDEzICswMjAwCisKKyAgICBQcm9wZXJseSBoYW5kbGUgdGhlICdiJyBkaXNwbGF5IGhpbnQuCisKK2NvbW1pdCA3ZjJlZGJmNjgzNDhjYWJlYWY5OTVhYWJhMWIyYTc4OTNkMThjNWU3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgQXVnIDMwIDA4OjUwOjA5IDIwMTMgKzAyMDAKKworICAgIFJlbW92ZSBzb21lIGNvbW1lbnRlZCBvdXQgZGVmaW5lcworCitjb21taXQgNDM1ZWUxZjQwMjNjYjAwMjI0NWMzYTU2ZGJlYWJhMzdhM2QzZWRiZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IFNlcCAyOCAxNDoyNjoxMCAyMDEzICswMjAwCisKKyAgICBQYXRjaCBhMTI1OSAoYnVnIGEyNDU2KTogcHJvYmxlbXMgd2l0aCBpcENpZHJSb3V0ZVRhYmxlIG9uIDY0LWJpdCBiaWdlbmRpYW4gbWFjaGluZXMuIFRoYW5rcyB0byBDaHJpc3RvcGhlciBXdS4KKworY29tbWl0IDlhNmY1NjYzOTJhM2NmMTJkYWI0ODhhNzZkNjlmYzg3M2RiZWMyYWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBBdWcgMjUgMTA6MTg6NTMgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUmVuYW1lIG1lbWR1cCgpIGludG8gbmV0c25tcF9tZW1kdXAoKQorICAgIAorICAgIFJlbmFtZSB0aGUgZnVuY3Rpb24gbWVtZHVwKCkgZGVmaW5lZCBpbiBsaWJuZXRzbm1wLnNvIGludG8KKyAgICBuZXRzbm1wX21lbWR1cCgpLiBUaGlzIGF2b2lkcyBjb25mbGljdHMgd2l0aCBtZW1kdXAoKSBmdW5jdGlvbnMKKyAgICBkZWZpbmVkIGluIG90aGVyIGxpYnJhcmllcyB0aGF0IGRlZmluZSBhIGZ1bmN0aW9uIHdpdGggdGhlIHNhbWUKKyAgICBuYW1lLiBBcyBhbiBleGFtcGxlLCBpZiBXSU5TIG5hbWUgcmVzb2x1dGlvbiBoYXMgYmVlbiBlbmFibGVkIHZpYQorICAgIC9ldGMvbnNzd2l0Y2guY29uZiB0aGVuIHBlcmZvcm1pbmcgYSBob3N0IG5hbWUgbG9va3VwIGNhbiB0cmlnZ2VyCisgICAgYSBjcmFzaCBpbiB0aGUgU0FNQkEgV0lOUyBuYW1lIGxvb2t1cCBsaWJyYXJ5IGJlY2F1c2UgY2FsbHMgdG8KKyAgICBtZW1kdXAoKSBmcm9tIHRoYXQgbGlicmFyeSBnZXQgcmVkaXJlY3RlZCB0byB0aGUgaW5jb21wYXRpYmxlCisgICAgTmV0LVNOTVAgbWVtZHVwKCkgZnVuY3Rpb24uIFNlZSBhbHNvCisgICAgaHR0cHM6Ly9idWd6aWxsYS5yZWRoYXQuY29tL3Nob3dfYnVnLmNnaT9pZD0xMDAwNzgwIGZvciB0aGUgZGV0YWlscy4KKyAgICBUaGlzIHBhdGNoIGludGVudGlvbmFsbHkgY2hhbmdlcyB0aGUgTmV0LVNOTVAgQUJJLgorCitjb21taXQgM2RkZTQxOTk4NjI1ZmUwZTI0MTE5YTJlMWY0NTA5YmEzYmEyZmQ5YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCA1IDIwOjI3OjIyIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IExpbnV4OiBCVUc6IDIyMzg6IEFkZCBsaWJubDMgc3VwcG9ydAorCitjb21taXQgYTM3OTU3YmVlOWY3OWRiMTliYmE5M2YxMWZhYTAzNzkyMWQ2ZTU4NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAyMyAyMjoyNDoxNSAyMDEzICswMjAwCisKKyAgICByb3V0ZV9zeXNjdGwuYzogRml4IGZvciBsaW5rbG9jYWwgcm91dGVzIG9uIEZyZWVCU0QgMTAKKworY29tbWl0IGQ5YTdmOWZjNjc5NDU1YjBmYTMyOGZiYWU2N2VjMmVlMjkwNmI5NGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTk6NDI6NTEgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IEF1dG9tYXRlIGJ1aWxkaW5nIHRoZSBpbnN0YWxsZXIKKworY29tbWl0IGViMWExNjQxNTAwZDZiY2YzOWY5Yjg0N2EyYzA2YzllZGEwYzg4YzQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTk6MzI6MzEgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGFuIGluc3RhbGxlciB3aXRob3V0IGFkbWluaXN0cmF0aXZlIHByaXZpbGVnZXMKKworY29tbWl0IGE5Nzc3ZWM5YWZiMzdjYTY0NDIxNjYwNzliZDViMmUwMzQ5YmUzZTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTg6MzU6NTUgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBGaXggT3BlblNTTCB2ZXJzaW9uIGNoZWNrCisKK2NvbW1pdCA1Y2IyY2M3YWIyMGIyOTBhNmM3NDU4NWY5ODVmOWM5MTJjZGVjOGNlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDEwOjI1OjAwIDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaTogUmVtb3ZlIE1TVkMgcmVkaXN0cmlidXRhYmxlIGZpbGVzIGZyb20gdGhlIGluc3RhbGxlcgorCitjb21taXQgMTc4MTIwMDYxZWNlNDhjY2Q5N2EzYWUzNmI4ODBkYTZiMTA5NTIwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAwOTo1MDoxOCAyMDEzICswMjAwCisKKyAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQ6IEdlbmVyYWxpemUKKworY29tbWl0IDg1YTFjNTAyNmYxMGZmMTQzZjQzN2YwMDM4OTRhNmM0YWExODdhOTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTg6NDM6MDUgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IEZpeCB4NjQgZGV0ZWN0aW9uCisKK2NvbW1pdCBhMGMyYTdhYjQyOTk3NDMzZTcwN2MxMGY4YWNmNjFmOTEyNDQyZjcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDE3OjI4OjU0IDIwMTMgKzAyMDAKKworICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBFeGFtaW5lIHR3byBsb2NhdGlvbnMgZm9yIE1pbkdXIGJpbiBkaXIKKworY29tbWl0IGNmMTAwNmU2N2Y5Yzc3ZmJkYTk0ZDQ1MjFlNzhmMDA5OGM4YTBlMTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTA6MTE6MTMgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IEZpeCBTU0wgYnVpbGQKKworY29tbWl0IGI0N2YxMzZiZWE4ZWY1NDY4YTIwZDk0NTJiMTIzMThkYjZjMzQ5ZWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMTc6MDU6MzcgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IEFkZCBXU0RLIHN1cHBvcnQKKworY29tbWl0IDBlMThhMjA2YWFhNDkwZmRlYjJjNzBhMGU2ZTUyYzkxZWI1ZjNlZDkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMjIgMDk6NDg6MDYgMjAxMyArMDIwMAorCisgICAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uCisKK2NvbW1pdCA4NWRmMDJiODM2MzIwY2M0NWU1ZDJkYjQ1NDgzYmM1MDg2MzE0NDZjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gU2VwIDIyIDEwOjAyOjIxIDIwMTMgKzAyMDAKKworICAgIHdpbjMyL0NvbmZpZ3VyZTogRml4IGJ1aWxkIHdpdGhvdXQgT3BlblNTTAorCitjb21taXQgM2Y5YWRiOTg3YjViZjVkMmQwOTVjZmQ2ZWEyZGE5Y2Q4MWQxYmVjNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCAyMiAwOToxNTo0MSAyMDEzICswMjAwCisKKyAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzogV2luMzIgYnVpbGQgZml4CisKK2NvbW1pdCBhNmUxODUxZmJlNzQ3Y2YxNWVkMDc1ODA3NzgxY2U4OWEzNGU5NmMyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDE5OjU1OjAyIDIwMTMgKzAyMDAKKworICAgIFJlc3RvcmUgIkNIQU5HRVM6IFdpbjMyOiBwZXJsOiBCVUc6IDI0ODg6IEF2b2lkICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9yIgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYjI3MjU5NjRiZGU5MjFiNjI4NWUzYTU5YTUxMjU1MmNhZTBhMGNhNS4KKworY29tbWl0IGIyNzI1OTY0YmRlOTIxYjYyODVlM2E1OWE1MTI1NTJjYWUwYTBjYTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMTk6NDk6NTggMjAxMyArMDIwMAorCisgICAgUmV2ZXJ0ICJDSEFOR0VTOiBXaW4zMjogcGVybDogQlVHOiAyNDg4OiBBdm9pZCAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvciIKKyAgICAKKyAgICBUaGlzIHBhdGNoIGlzIG5vdCBhcHByb3ByaWF0ZSBmb3IgdGhlIHY1LjQgYnJhbmNoLgorCitjb21taXQgNjQ1MzcxN2Y2YWM2NjViZjUzMjc0NGE4NmNkYjg5OGFhZjgzZDZiZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAxOTozNDoyNSAyMDEzICswMjAwCisKKyAgICBBZGQgcmVwcm9kdWNlciBmb3IgYnVnIDI0ODgKKworY29tbWl0IDBkMGE0NjI5NzAyZWI5ZjlmZTk5NTZjMWJhYzRiNDQ1NjEwZmYzYzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMzEgMTc6MjE6MjIgMjAxMyArMDIwMAorCisgICAgU2ltcGxpZnkgc25tcFRhcmdldEFkZHJfcm93U3RhdHVzQ2hlY2soKQorCitjb21taXQgNGI4N2UzY2I0ZDM2NzlhYjYwYzM1M2JhNGZmMzAxZjY4NDJiODRiYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAyMSAxNjozNzowOSAyMDEzICswMjAwCisKKyAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjhleGVjZml4X3NpbXBsZTogU2ltcGxpZnkKKworY29tbWl0IDY1Yzg4ZTJlY2Y1ZGU5MzY1YzgzYzQ2ZWYzYmI0Y2Q4OWNkYzQ0ZTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBTZXAgMTUgMTE6MTE6NDMgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogV2luMzI6IHBlcmw6IEJVRzogMjQ4ODogQXZvaWQgIkZyZWUgdG8gd3JvbmcgcG9vbCIgZXJyb3IKKworY29tbWl0IDFhNDg1NWRhNGIxZGQ2OTNhMmIwMzc3YjkxZTljMzNlM2M3ZjJhNGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBTZXAgMjEgMTc6MTE6NDUgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogQlVHOiAyNDAyOiBBZGQgc3VwcG9ydCBmb3IgU05NUHYzIHRyYXBzCisKK2NvbW1pdCAzZDA1MTU2OTNmNmEwZDI5ZDM5ZGQwYzg2OGQzNzhjNzRiYzRmODdjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDA5OjE2OjMzIDIwMTMgKzAyMDAKKworICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2OGV4ZWNmaXhfc2ltcGxlOiBQb3J0IHRvIE1pbkdXIGFuZCBGcmVlQlNECisKK2NvbW1pdCA1YjZlNDMxZDlmNjYzYTNjMzI3ZDcxZGFjOTUzOTJjZmQ4NmIzMjkxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgU2VwIDIxIDA5OjAzOjU5IDIwMTMgKzAyMDAKKworICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzogRml4IGNvbXBpbGVyIHdhcm5pbmdzCisKK2NvbW1pdCA5ZjJlOGZjOGQ5YTI2ZjU3YWIwODlhYmEzZDFhZTI2YjNlOGYyZDU0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDE3IDIyOjMwOjM4IDIwMTMgKzAyMDAKKworICAgIEZpeCBkZXBlbmRlbmN5IGZvciBGcmVlQlNEMTAKKworY29tbWl0IGE1MDZlZmRkMWRiODI0YTllZWVlMDNkMDAyMWM5MGZhZjNiNjI5MjQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMTcgMjI6Mjk6MzQgMjAxMyArMDIwMAorCisgICAgc25tcGRmIG1hbiBwYWdlOiBmaXggZm9ybWF0dGluZyBvZiAtQ2gvLUNIIG9wdGlvbnMKKworY29tbWl0IGEyZTk3YmViZmM1MjE3MGY5ZWMxMDM2ZDI0YWE4NGY1OWNmMmU1MDgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMTcgMjI6Mjc6NDkgMjAxMyArMDIwMAorCisgICAgVXBkYXRlIHRoZSBCU0QgbXVsdGktY3B1IGNvdW50ZXJzIGNvZGUgdG8gd29yayB3aXRob3V0IGNvbmZpZ3VyZSBoZWxwLgorCitjb21taXQgYzg1ZDY0ZDU0YjA2ODc5YTNhNjkxZGFkZmZjMDNiZmIxZjU5MDk2ZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIFNlcCAxNyAwNjozNzoxOCAyMDEzICswMjAwCisKKyAgICBPbmx5IHRlc3QgdGhlIGV4ZWNmaXggY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgaWYgaXQgaXMgZW5hYmxlZAorCitjb21taXQgZWQ4YjY5N2NlYTA2NzlkZTdiZTViM2Y1ZDQ2OTEzNGUxY2RhZWQ1NgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCA3IDEwOjI3OjAyIDIwMTMgKzAyMDAKKworICAgIG00L2FjX2FkZF9zZWFyY2hfcGF0aC5tNDogRml4IGEgY29tbWVudAorCitjb21taXQgZjc3OWM1ZTk0Njc4ODU4NTJmMTZjNTU0MWEzODAxMTFmOWVhZDA2MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCA3IDIwOjI4OjI5IDIwMTMgKzAyMDAKKworICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MKKyAgICAKKyAgICBSZW1vdmUgdGhlIHVudXNlZCB2YXJpYWJsZSAncmMnIGFuZCBmaXggYSBmb3JtYXQgc3RyaW5nLgorCitjb21taXQgYzY0Mzk2MjdkMDlmNTAzZmRjOGNmYTMyZDg4NGU4MzQ3MzgzMTc1NAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE1hciA4IDAwOjEzOjA1IDIwMTEgKzAwMDAKKworICAgIGFsbG93IGZvciB2MmMgU0VUIHN1cHBvcnQgdGVzdGluZworICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgNWNiZDU0MzQxYTJhNzliZjg1MzczNzdkMTEzNzI0ODNmMDg2NDdhZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCAxNCAxNDoyODoyMSAyMDEzICswMjAwCisKKyAgICByZWdyZXNzaW9uIHRlc3RzOiBBZGQgYSB0ZXN0IGZvciB0aGUgZXhlY2ZpeCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZQorCitjb21taXQgMWM3NTYzNDllNGQzMWQzOWVjMmZjNTNjNjQ0MGFlNTNiM2IwM2RmMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IFNlcCA3IDIwOjI4OjU2IDIwMTMgKzAyMDAKKworICAgIHNubXBkOiB1Y2Qtc25tcDogRml4IGEgcG90ZW50aWFsIGNyYXNoIGluIGZpeEV4ZWNFcnJvcigpCisgICAgCisgICAgRG8gbm90IGludGVycHJldCBhIGNvbW1hbmQgc3BlY2lmaWVkIHZpYSB0aGUgZXhlY2ZpeCBjb25maWd1cmF0aW9uCisgICAgZGlyZWN0aXZlIGFzIGEgcHJpbnRmKCkgZm9ybWF0IHN0cmluZy4KKworY29tbWl0IDhiMTQwZDA5NjVlMTFmNTkyMTc2OGJmMDVkMGMyYjE5NDFjMGQzMzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMzEgMTc6MTA6NTUgMjAxMyArMDIwMAorCisgICAgU05NUC1UQVJHRVQtTUlCOiBEZWNsYXJlIGxvY2FsIHZhcmlhYmxlcyBhdCBmaWxlIHNjb3BlIHN0YXRpYworICAgIAorICAgIEFsc28sIGRlY2xhcmUgdGhvc2UgdmFyaWFibGVzIGNvbnN0IHRoYXQgYXJlIG5vdCBtb2RpZmllZC4KKworY29tbWl0IDdiODJjNjFlNzUzZTE1N2M0Yjg2OTgyMTkwMDZmMmY4M2RmNTI4MDEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMzEgMTY6NTE6MTUgMjAxMyArMDIwMAorCisgICAgU05NUC1UQVJHRVQtTUlCOiBFbGltaW5hdGUgdHdvIHN1cGVyZmx1b3VzIGNhc3RzCisKK2NvbW1pdCBkYmNmNDdkZDRmZTUyNjJhZDBmYWQ3Yzk3NzQ1MjA5NTg5NTQwYzQwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAxMSAxMDoyMTozMiAyMDEzICswMjAwCisKKyAgICBSZXdvcmQgdGhlIGluY2x1ZGVGaWxlIHNlYXJjaCBwcm9jZXNzIHRvIGZpdCB0aGUgaW1wbGVtZW50YXRpb24uCisKK2NvbW1pdCA4NTA3MzA4NWQ2N2VkNjZhYjc0NjExYzhlNWY4MTAxOTI0OTFiYTY4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDkgMjI6MjY6MjMgMjAxMyArMDIwMAorCisgICAgUGF0Y2ggYTEyNjM6IE1ha2UgZGF0YWJhc2UgbmFtZSBjb25maWd1cmFibGUgZm9yIHRyYXBkIHNxbCBsb2dnaW5nLgorICAgIFRoYW5rcyB0byBSb2JpbiBTb25lZm9ycy4KKworY29tbWl0IDdlNzI1OGVmOGIzMmY5NzQwNDhmM2ZkMDk4YTlkYTUyNmRhMmU2MTMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgOSAyMjoxNzoxNSAyMDEzICswMjAwCisKKyAgICBQYXRjaCBhMTI2MjogRml4IG1lbW9yeSBlcnJvciBjYXVzZWQgYnkgY29uZnVzaW5nIHNpemUgb2YgcG9pbnRlcgorICAgIHdpdGggc2l1emUgb2YgcG9pbnRlZCBhcmVhLiBUaGFua3MgdG8gUm9iaW4gU29uZWZvcnMuCisKK2NvbW1pdCA1ODZlMDdiOGRlNTFiMDU0MDBkNTgyZmFjZDkxZDQ0MTBkZDM3NzAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDMxIDE3OjA5OjU5IDIwMTMgKzAyMDAKKworICAgIHNubXBkOiBDb25zdGlmeSBhIGZldyBhcmd1bWVudHMgb2YgTUlCIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMKKyAgICAKKyAgICBOb3RlOiB0aGlzIHBhdGNoIGRvZXMgbm90IGNoYW5nZSB0aGUgQUJJLgorCitjb21taXQgNDRjMzY3MWRkOTNmZTBmMDgyOTllNjFkMGE0MjJmZDA3MmI0OTBlNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIFNlcCA4IDA3OjM1OjQ2IDIwMTMgKzAyMDAKKworICAgIFJ1biBhdXRvcmVjb25mCisKK2NvbW1pdCA2MmRhZGVmYTFiMjY4OGMwMjc5MmU5ZmQyZDNmYzMxYzc5ZWQxMWMzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgU2VwIDYgMTE6NTQ6MTMgMjAxMyArMDIwMAorCisgICAgc3dydW5fZGFyd2luOiBGaXggYnVmZmVyIG92ZXJydW4gd2hlbiBjb2xsZWN0aW5nIGhyU1dSdW5QYXJhbWV0ZXJzCisKK2NvbW1pdCAxZTA1MjZmODVlZDYxNTY3Y2E2ZWE1M2I1NjZjNzcyOTkyMTExYzllCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDQgMjI6MzA6NDAgMjAxMyArMDIwMAorCisgICAgQWRkIGEgY291cGxlIG9mIGNvbnRyaWJ1dG9ycyB0byBSRUFETUUKKworY29tbWl0IGVkYzYwOGViZDVkMDIxOTg2M2JjNWY2NTZkMTc3YjFkNTYxMDQ4YzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgNCAyMTo1OToxOCAyMDEzICswMjAwCisKKyAgICBGaXggYSBwcmludGYgZm9ybWF0IHdhcm5pbmcuCisKK2NvbW1pdCBmYjI0ZjczM2NiMzE2YzM1Y2NmZGM1OWY0ODdiNjVlMGNkOTc0YzY4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDQgMjE6NTQ6MjcgMjAxMyArMDIwMAorCisgICAgc25tcG5ldHN0YXQ6IEluZGVudCBJQ01QIGhpc3RvZ3JhbSBmb3IgcmVhZGFiaWxpdHkuCisKK2NvbW1pdCBmNzk0M2E1ZDU4YTZmOTUzYzc5ZmI1NWFiODk3Yzg0OTIyOGVkYjhhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDQgMjE6NDU6MTkgMjAxMyArMDIwMAorCisgICAgUmVjb2duaXplIHpmcyBmaWxlIHN5c3RlbXMKKworY29tbWl0IGFiNDM3MGJhZjVjY2MxNDZmOGQxYzgzOWJiMGY0MTllZTM3ZTcxYzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMiAyMToyMToyNSAyMDEzICswMjAwCisKKyAgICBQYXRjaCBhMTI2MSAoQmlsbCBGZW5uZXIpOiBGaXggY3Jhc2ggd2hlbiBtaWItaW5kZXhlcyBhcmUgbm90IGFsbCByZWFkYWJsZQorCitjb21taXQgYzZjYWEzMDA3ZjYwZjZjZGVhYTEzNDE1Mjc1ODY0NWE3M2E3ZmU2NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAyIDE5OjM5OjE0IDIwMTMgKzAyMDAKKworICAgIHNubXBuZXRzdGF0OiBQcm9wZXIgdGVzdHMgZm9yIHYyL3YzIGV4Y2VwdGlvbiByZXN1bHRzIChCdWcgYTI0NzcpCisKK2NvbW1pdCAzOTQyMGJkNDBiN2ExYmE3MjBhOWNiYjkyMjY0ZDNmOWNjMGE3ZTJmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDIxIDIyOjA4OjQxIDIwMTMgKzAyMDAKKworICAgIFBBVENIIGExMjYwOiBTdXBwb3J0IG11bHRpLWNwdSB1c2FnZSBmb3IgRnJlZS9OZXQvT3Blbi1CU0QuCisgICAgVGhhbmtzIHRvIFBhYmxvIENhcmJvbmkgZm9yIGZpcnN0IHN0YWIgYXQgdGhpcy4KKworY29tbWl0IDYyMzA1Y2QwMjhkOGFiZjQzMDEyMWU5MDA4YWNjOGYwZDE4NzFlMWMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgMjEgMjI6MDg6NDEgMjAxMyArMDIwMAorCisgICAgUEFUQ0ggYTEyNjA6IFN1cHBvcnQgbXVsdGktY3B1IHVzYWdlIGZvciBGcmVlL05ldC9PcGVuLUJTRC4KKyAgICBUaGFua3MgdG8gUGFibG8gQ2FyYm9uaSBmb3IgZmlyc3Qgc3RhYiBhdCB0aGlzLgorCitjb21taXQgY2MyZmU2YmRlNmEzYzI4YjNjMWFkMTY1YzliYTNmYzFkNTgzYzI1MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEF1ZyAyNSAwODoyMzo0MyAyMDEzICswMjAwCisKKyAgICBJUC1NSUI6IEZpeCBEb3h5Z2VuIGhlYWRlciBvZiBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4oKQorCitjb21taXQgOTYzMDJhZjdmYzMxMDhjMjA4MjI3NDMyZjBmMGI3NWYzZTdiOTA2ZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEF1ZyAyOCAxMDo1OTowNSAyMDEzICswMjAwCisKKyAgICBDb3JyZWN0IGNvbnZlcnNpb24gZmFjdG9yIGZyb20gbWljcm9zZWNvbmRzIHRvIGNlbnRpc2Vjb25kcy4KKworY29tbWl0IGU4Y2Y3NjZlMDgzODM0YWY3ZmRmZWQ4NzdkYmU4ODEwYmYwMGE0ZWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMTkgMjI6MTc6MTEgMjAxMyArMDIwMAorCisgICAgRml4IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbiB0byB0YWtlIGFuIGFyZ3VtZW50IGluIG5ldHdvcmsgYnl0ZSBvcmRlciBhcyBkb2t1bWVudGV0CisKK2NvbW1pdCBhMGM1OWEzYjQ1OGU4YThkZmIwNTlhNjI3OTJkMjVhNGM1YzlmYzllCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDE5IDIyOjE0OjE1IDIwMTMgKzAyMDAKKworICAgIEZpeCBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4gdG8gdGFrZSBhbiBhcmd1bWVudCBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIgYXMgZG9rdW1lbnRldAorCitjb21taXQgNjZiOWJmYmE0ZWFlODQ5NDRhYmY0ZTZkMDc0ODk0YWNkMDUxM2M2YgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyAxOSAyMjoxMjo1NyAyMDEzICswMjAwCisKKyAgICBGaXggbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuIHRvIHRha2UgYW4gYXJndW1lbnQgaW4gbmV0d29yayBieXRlIG9yZGVyIGFzIGRva3VtZW50ZXQKKworY29tbWl0IGVjOTZiMzVkNTA2MGMwOWI5ZjUzZDRkZWM3M2ZiNzk2NWMyYWMxNDUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMTkgMjI6MTE6MzYgMjAxMyArMDIwMAorCisgICAgRml4IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbiB0byB0YWtlIGFuIGFyZ3VtZW50IGluIG5ldHdvcmsgYnl0ZSBvcmRlciBhcyBkb2t1bWVudGV0CisKK2NvbW1pdCBiMjdiNDdiNTc5ODQ2OWU5YWI1YmQ0YjUxYWMzOWQ0M2ZjZDk1NjA4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXVnIDE3IDEwOjEyOjE0IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2Ugc3VyZSBUZXN0OjpIYXJuZXNzIGlzIG9mIGF0IGxlYXN0IHZlcnNpb24gMS4yMQorICAgIAorICAgIFRlc3Q6Okhhcm5lc3MgMS4yMSBpcyB0aGUgZmlyc3QgdmVyc2lvbiB0aGF0IGltcGxlbWVudHMgVEFQIHYxMiB3aGljaCBhbGxvd3MKKyAgICBwdXR0aW5nIHRoZSBoZWFkZXIgKDEuLk4pIGFmdGVyIHRoZSB0ZXN0cyBhbmQgc2luY2Ugb3VyIHRlc3RzIHV0aWxpemUgdGhhdAorICAgIHdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgdGVzdCBydW5uZXIgc3VwcG9ydHMgaXQuCisKK2NvbW1pdCAxNGY4ZDRhZDZmMDZkMDlkODcwOTZkZDY4MTM3YTEyNWEwMzljNTYyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDI5IDE3OjQyOjU0IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IEFJWDogTWFrZSB1ZHAtbWliIGJ1aWxkCisKK2NvbW1pdCAzOGQ3N2M3YzIwYTNlNzk3OWMwOWM1MTQ0Zjg2OTM0ZWQ0NjU0MGRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDI5IDE3OjM5OjM4IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IEFJWDogTWFrZSB0Y3AtbWliIGJ1aWxkCisKK2NvbW1pdCA1OGZkMjNiNzExMGM5M2VlNDk2ZmZhZmU4Njg1MzljMmFmODU0M2JkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgQXVnIDE2IDEwOjM5OjAzIDIwMTMgKzAyMDAKKworICAgIFdpbjMyOiBCdWlsZCBmaXg6IEV4cG9ydCBza2lwX3doaXRlX2NvbnN0KCksIHNraXBfbm90X3doaXRlX2NvbnN0KCkgYW5kIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KCkKKworY29tbWl0IDBhYjljZDE2NTVkNDZmOTY4ZGMxMmJkNjcxNGFjMTdiOWJjZTVlNzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBBdWcgMTYgMDg6Mjg6MDggMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcC11c20tZGgtb2JqZWN0cy1taWI6IEF2b2lkIHRyaWdnZXJpbmcgYW4gYXNzZXJ0IHN0YXRlbWVudCBpbiBuZXRzbm1wX3JlYWR5X21vbm90b25pYygpCisgICAgCisgICAgVGhlIGNhY2hlIHRpbWVvdXQgZm9yIHNubXAtdXNtLWRoLW9iamVjdHMtbWliIGlzIC0xLiBBbnkgY2FjaGUgdGltZW91dAorICAgIHZhbHVlIDwgMCBkaXNhYmxlcyBjYWNoaW5nLiBIb3dldmVyLCBzdHJpY3RseSBuZWdhdGl2ZSB2YWx1ZXMgdHJpZ2dlcgorICAgIHRoZSBhc3NlcnQgc3RhdGVtZW50IGluIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCkuIEF2b2lkIHRyaWdnZXJpbmcgdGhhdAorICAgIGFzc2VydCBzdGF0ZW1lbnQuCisKK2NvbW1pdCAxZmE1ODRiMjIyYzU2NzI0Mzc4ZjVjODU5OTNlZWVlNjUxNTI2MGFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgQXVnIDE2IDEwOjAyOjQ3IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEZpeCBORVRTTk1QX0ZEX1NFVF9CWVRFUygpCisgICAgCisgICAgVGhpcyBwYXRjaCBhdm9pZHMgdGhhdCB1bml0IHRlc3QgVDAwOWxhcmdlX2ZkX3NldF9jbGliIGNyYXNoZXMgb24gQUlYLgorCitjb21taXQgOTVhYzE5MGI1MjZkYmE1MjA1NjM3NDExYTg5MmI1MmI5ZWQ2Yjk0YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEp1bCAyMSAxNzoxNjo0MiAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDI0NzY6IHNubXBkIGZhaWxzIHRvIHN0YXJ0IG9uIEFJWAorICAgIAorICAgIE9uIGFuIEFJWCBzeXN0ZW0gdGhlcmUgaXMgbm8gPGt2bS5oPiBoZWFkZXIgZmlsZSBub3IgZG8gdGhlIC9kZXYvZG1lbQorICAgIG9yIC9kZXYvZHJ1bSBkZXZpY2VzIGV4aXN0IGFuZCBoZW5jZSBETUVNX0xPQyBpcyBub3QgZGVmaW5lZC4gQXZvaWQKKyAgICB0aGF0IGluaXRfa21lbSgpIGZhaWxzIGluIHRoYXQgY2FzZS4KKworY29tbWl0IDUwNDgxYjc2OWUyOWZjNWNlNmIxZTQwY2U1NjgxODViYjA4OTg0NTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBBdWcgMTYgMDc6MjI6MDIgMjAxMyArMDIwMAorCisgICAgc25tcGQ6IFJlZmFjdG9yIGluaXRfa21lbSgpCisgICAgCisgICAgVGhpcyBwYXRjaCBkb2VzIG5vdCBjaGFuZ2UgYW55IGZ1bmN0aW9uYWxpdHkuCisKK2NvbW1pdCBjZDdlZjdiZTM5MTAzNWQ5ZGYwNWVkYzZhYzllNmYzNTE5YjQ2ZjhiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgQXVnIDE0IDIzOjM4OjIxIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEJlIG1vcmUgcm9idXN0IGlmIGNsb2NrX2dldHRpbWUgZmFpbHMuCisgICAgCisgICAgT24gUkhFTDMgaXQgc2VlbXMgY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUMsICkgYWx3YXlzIHJldHVybnMgRUlOVkFMIGJ1dAorICAgIGl0IHdvcmtzIGZvciB0aGUgb3RoZXIgY2xvY2tzLgorICAgIAorICAgIEZ1cnRoZXIsIHRoZSBvbGQgY29kZSB3aGljaCByZXR1cm5lZCBhIGNvbnN0YW50IHsgMCwgMCB9IGNhdXNlZCB0aGUgdGVzdCBzdWl0ZQorICAgIHRvIGdldCBzdHVjayBpbiBhIGxvb3AgaWYgbm8gcmVzcG9uc2UgYXJyaXZlZCAtIHRodXMgdGhpcyBjb2RlIGhhdmUgdGhlCisgICAgYWR2YW50YWdlIG9mIHdvcmtpbmcgbGVzcyBiYWQuCisKK2NvbW1pdCA5ZDcxZmVlYTI3MWY5MWNjOWI3YWRlZTY2MTNhZjE5ZWJhN2VjNmNkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAxNCAxNTo1Njo1NiAyMDEzICswMjAwCisKKyAgICBGaXhlZCByZXR1cm4gdmFsdWUgb24gZXJyb3IuCisKK2NvbW1pdCA5NjIxZjRjZGM1YTE5Y2VlNGUxMWJmMjcwOTRhYmYzMzM5ZGRjMzBlCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAxNCAxNTo0ODozOSAyMDEzICswMjAwCisKKyAgICBSZW1vdmluZyB1c2VsZXNzIGNoZWNrLCBlbnRyeS0+ZF9uYW1lIGlzIGFycmF5IGFuZCBjYW4ndCBiZSBOVUxMLgorCitjb21taXQgZTQxYzJmNTc0YzI1ZDhkZDI3M2YyNDA2ZWVlYWMxOWJjMmFlMTZkYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgMTIgMTQ6MzA6NTEgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgcGFyc2luZyBvZiBzZXF1ZW5jZXMuCisgICAgCisgICAgRG9uJ3Qgb3ZlcndyaXRlICdkYXRhJyB2YXJpYWJsZSwgaXQncyB1c2VkIHdoZW4gcGFyc2luZyBidWxrIHJlc3BvbnNlcy4KKworY29tbWl0IDM5MDMwMzA1OWZiZDk4YjFlZTc2MjFkZGQ0YWQ0YzExZDEwMGZmZjkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKdWwgMjggMjE6Mjg6MTQgMjAxMyArMDIwMAorCisgICAgUmV2ZXJ0IDc4ZGFjNmUzNzk0M2QxYWQ5OTg0MTg5ODgwNmVhNjBiMGVlZGU2MzYgYW5kIHJlc29sdmUgYTI0NzggaW4gYSB3YXkgdGhhdCBhdm9pZHMgdHJ1bmNhdGluZyBzbm1wVGFyZ2V0QWRkclRpbWVvdXQuCisKK2NvbW1pdCBlNTlkNWRiNmQ2ZTcyZDEzNDU5MWJiYWFhNmZhYTU5YjI5MzM4MTkxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSnVsIDI4IDIxOjE3OjU4IDIwMTMgKzAyMDAKKworICAgIENoZWNrIHRoYXQgdGhlIHRpbWVvdXQgdmFsdWUgaXMgaW4gcmFuZ2UuCisKK2NvbW1pdCA0ZWNiMzZhN2FiYTNhYjBlZmE4OTM1MTY1MGNlMDUzZWJjZjQ4YjZhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gSnVsIDI5IDIxOjU0OjI1IDIwMTMgKzAyMDAKKworICAgIENoZWNrIHRoYXQgc25tcFRhcmdldEFkZHJUaW1lb3V0IGhhbmRsZXMgc2V0dGluZyBwcm9wZXJseQorCitjb21taXQgMWFlODViNjcyZWIwN2QwYzAxYTU0ZTA2ZDNkZGQ0ZjRkYzU4ZmYyZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEp1bCAyOCAxMDo0MzoxNyAyMDEzICswMjAwCisKKyAgICBBZGQgc29tZSBtb3JlIHRlc3RzIGZvciBzbm1wVGFyZ2V0QWRkcgorICAgIChjaGVycnkgcGlja2VkIGZyb20gY29tbWl0IDZlMTNlYmI4NWU0NDA0OTg0NmVhZTdmNjBlMDUwMzc1ZjlhY2Y1OGUpCisgICAgU2FuaXRpemVkCisKK2NvbW1pdCA2YTVhMDQ3Y2JjMTFkNjJkZjA0YTk2NjY5MDhmNzY1MmIyMTdjMWFhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgQXVnIDEgMjM6MTk6MzQgMjAxMyArMDIwMAorCisgICAgUmVpbnN0YXRlIHRoZSBjaGVjayBmb3IgY3JlYXRpb24gb2YgZW50cmllcyB3aXRoIGVtYmVkZGVkIE5VTCdzIGluIHRoZSBuYW1lCisKK2NvbW1pdCA1MzNiYjgwYTVhNDMwNWIzNWRiYjc5NzQ0NGJkNTk2ZDdkNTk5NTFjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgQXVnIDEgMjI6NTU6NDUgMjAxMyArMDIwMAorCisgICAgU2FuaXRpemUuCisgICAgCisgICAgQ2hhbmdlIHRvIHVzZSBTTk1QdjMgc2luY2UgdGhhdCBpcyB3cml0ZWFibGUgaW4gVjUtNi1wYXRjaGVzLgorICAgIENoYW5nZSB0byBjaGVjayB2YWx1ZXMgb24gaW5kZXggJ0EnCisgICAgUmVtb3ZlIHRoZSBjaGVjayBmb3IgZW1iZWRkZWQgTlVMIGluIGluZGljZXMuCisKK2NvbW1pdCBiMjRiZjQ2MjIwYWFhZjU3OTRlOTQwZjVkNDY3M2RiNzEzMzlmOWMwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgSnVsIDIwIDEyOjM5OjU5IDIwMTMgKzAyMDAKKworICAgIEFkZCB0ZXN0cyBmb3Igc25tcFRhcmdldEFkZHIKKyAgICAoY2hlcnJ5IHBpY2tlZCBmcm9tIGNvbW1pdCA3MWYzMTljZDIzNDQ1YzZlMjJhNjBhMWE4NWYzMWMyYjY5MDRiM2ZiKQorCitjb21taXQgNmUxM2ViYjg1ZTQ0MDQ5ODQ2ZWFlN2Y2MGUwNTAzNzVmOWFjZjU4ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEp1bCAyOCAxMDo0MzoxNyAyMDEzICswMjAwCisKKyAgICBBZGQgc29tZSBtb3JlIHRlc3RzIGZvciBzbm1wVGFyZ2V0QWRkcgorCitjb21taXQgMDc2OWY0MjBkOGY0Mjc5OTNiMTM0MGZkYjdlY2IzYmMwNDlkM2Y2YworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEp1bCAyNSAwODoxNTozMiAyMDEzICswMjAwCisKKyAgICBGaXJzdCBzaG90IG9uIGhhbmRsaW5nIGNlcnRpZmljYXRlcyB3aXRoIGVtYmVkZGVkIG51bCBjaGFyYWN0ZXJzCisKK2NvbW1pdCBkODMzYjBjOGJlNTA5YmZhM2I4MDAxYWU2ZjU1MjI4OWNlOTU2N2QwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgSnVsIDIwIDEyOjQxOjQwIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSBOVUwgY2hhcmFjdGVycyBpbiB0aGUgaW5kaWNlcyBmb3Igc25tcFRhcmdldEFkZHJUYWJsZQorCitjb21taXQgNzFmMzE5Y2QyMzQ0NWM2ZTIyYTYwYTFhODVmMzFjMmI2OTA0YjNmYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEp1bCAyMCAxMjozOTo1OSAyMDEzICswMjAwCisKKyAgICBBZGQgdGVzdHMgZm9yIHNubXBUYXJnZXRBZGRyCisKK2NvbW1pdCBlYTM5ZTM2NzY2NjViN2U4Y2M1ZGZlYjViYmJjZDBhZDQzNGFkOTEyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgSnVsIDE4IDAxOjM2OjI2IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgdGhlIGRhdGEgYXJndW1lbnQgdG8gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcgYWNjZXB0IGNvbnN0YW50IHZhbHVlcworCitjb21taXQgNzhkYWM2ZTM3OTQzZDFhZDk5ODQxODk4ODA2ZWE2MGIwZWVkZTYzNgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAyMiAxMjozOTowMCAyMDEzIC0wNzAwCisKKyAgICBmaXggYnVnIG51bWJlciAjYTI0Nzg6IGZpeCBtaWIgcmVwcmVzZW50YXRpb24gb2YgdGltZW91dCB2YWx1ZXMKKworY29tbWl0IGE3ZTNiYzhkZGJlMzg3ZWJmNmYzZjZiMDUwZTI5OTI5NTZiZDJlNjEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTEgMjA6MTQ6NDcgMjAxMyArMDIwMAorCisgICAgRml4ZXMgZm9yIG1lbW9yeSBzdGF0aXN0aWNzIGZyb20gKkJTRAorCitjb21taXQgOWRiZTEyNDAzY2VhYWZlNjE3ZjdkNDk5OTMzMTZhMjQ5ZmNiYjk5YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxMSAyMDoxMzozNiAyMDEzICswMjAwCisKKyAgICBGaXggYSBtaXNzaW5nIG5ld2ZpbGUgaW4gYSBkZWJ1ZyBtZXNzYWdlCisKK2NvbW1pdCAwNDFkZWVkZjgxNTM3YmM2MTY5Mjk4NzUzZjlkY2EzZjZjZDYxYTM1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDExIDIwOjEyOjEyIDIwMTMgKzAyMDAKKworICAgIE1ha2Ugc3VyZSB3ZSBkb24ndCBtYWtlIElQdjYgbWFzayBsb25nZXIgdGhlbiAxMjgKKworY29tbWl0IGM2N2M3ODk0MDMzOWZhZWFiNDJiMWIxYTBhNmJlNmNkNmRmZTJlMjIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgMTEgMjA6MDY6MzEgMjAxMyArMDIwMAorCisgICAgSW1wbGFtZW50IGlwQWRkcmVzc1RhYmxlIGZvciAqQlNECisKK2NvbW1pdCBiMTgxZTQzYTZkMWY1NjdiZmQxMDcxN2E3N2RmMTg0OGUzYmIwZjQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDExIDIwOjA1OjA4IDIwMTMgKzAyMDAKKworICAgIE1hcmsgT1MgdGhyZWFkcyBhcyBzdWNoLgorCitjb21taXQgZTM2YTVjYzVmMjAyNzJhZmZmNDIyOGU3ZTQzOTFkZDVlNmMwNjNiMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCAxMSAyMDowMzozNiAyMDEzICswMjAwCisKKyAgICBGaWMgc29tZSBtYW4gcGFnZSBjcm9zcyByZWZlcmVuY2VzCisKK2NvbW1pdCBlY2Y4NjgyZDg2NGQyZjA4NTI1MDc4NTQzODU4ZDM2MWIzYWRjYTVjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAxMCAxMDo0NzozMyAyMDEzICswMjAwCisKKyAgICBMb3dlciBpbXBvcnRhbmNlIG9mIGRlYnVnZ2luZyBtZXNzYWdlcywgdGhleSBzcGFtIHN5c2xvZy4KKworY29tbWl0IGVmOTYzMDYzZGU0OTQ4NWJkOTFjMTI5ZTA1M2YwNmQwNzQ0NDgzZTEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSnVsIDQgMTE6MzQ6MjUgMjAxMyArMDIwMAorCisgICAgRml4ZWQgc2l6ZSBvZiBuZXRsaW5rIG1lc3NhZ2UuCisgICAgCisgICAgUHJldmVudGluZyBrZXJuZWwgdG8gbG9nICduZXRsaW5rOiAxMiBieXRlcyBsZWZ0b3ZlciBhZnRlciBwYXJzaW5nIGF0dHJpYnV0ZXMuJyBtZXNzYWdlLgorCitjb21taXQgMmUwZDEwODczMTNiMGZhMDgzZTJiMWNhNDg5NWZiZjI0OGQ2M2NhOQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEp1bCA0IDIyOjA0OjEyIDIwMTMgKzAyMDAKKworICAgIFJ1biBhdXRvcmVjb25mCisKK2NvbW1pdCBjN2ZiYTc4ZTEyMjUyNTRhMGY2NTYwNWYzODFhZWRkN2Q4YTIxMmNhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgSnVsIDQgMjE6NDc6MDkgMjAxMyArMDIwMAorCisgICAgUnVuIGF1dG9yZWNvbmYKKworY29tbWl0IDU3MWJkNDA3ZjhiZTljOTRjYzU1MmQ0ZDNiN2Y1YjZiMDk4NGQyMzcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBKdWwgNCAyMTozOTo1OSAyMDEzICswMjAwCisKKyAgICBSdW4gYXV0b3JlY29uZgorCitjb21taXQgOGFhNTBlZGJhN2EyZDk2NmQ4ZGZjN2ZmNGQ3Yzc4ZWZkZGU4YzViZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IEp1bCA0IDA4OjUzOjU2IDIwMTMgKzAyMDAKKworICAgIFVzZSBBQ19MSU5LX0lGRUxTRSBpbnN0ZWFkIG9mIEFDX1RSWV9MSU5LIGFzIHRoZSBsYXR0ZXIgaXMgZGVwcmVjYXRlZAorCitjb21taXQgNTljNmFlMzQ2MjVlZTA0YWNlMzgyNGVjNDA0NjEzZTBiNTFkYzFiMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEp1bCAyIDE3OjQwOjU0IDIwMTMgKzAyMDAKKworICAgIFVzZSB0aGUgY3BwIGFuZCBsaW5rZXIgZmxhZ3MgZnJvbSBteXNxbF9jb25maWcgd2hlbiBjaGVja2luZyBmb3IgbXlzcWwgaGVhZGVycy4KKworY29tbWl0IGY4OWNmY2FmZGFlMjFmYWI1MGE3MGJkZGYxNThmZmQ5ZTRlMDAxZDIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBKdWwgMiAxNzozOToyNSAyMDEzICswMjAwCisKKyAgICBVc2UgdGhlIG91dHB1dCBvZiBteXNxbF9jb25maWcgLS1pbmNsdWRlIGluc3RyZWFkIG9mIHRoZSBvdXRwdXQgb2YgbXlzcWxfY29uZmlnIC0tY2ZsYWdzIGl0byBmaW5kIGluY2x1ZGUgZmlsZXMuCisgICAgCisgICAgQWNjb3JkaW5nIHRvIHRoZSBteXNxbF9jb25maWcgbWFuIHBhZ2UsIC0taW5jbHVkZSBpcyByZWNvbW1lbmRlZCBmb3IgZ3JlYXRlcgorICAgIHBvcnRhYmlsaXR5IHNpbmNlIC0tY2ZsYWdzIG1pZ2h0IGNvbnRhaW4gY29tcGlsZXIgZmxhZ3MgZm9yIHRoZSBjb21waWxlciB0aGF0CisgICAgd2FzIHVzZWQgdG8gYnVpbGQgbGlibXlzcWxjbGllbnQgd2hpY2ggbWlnaHQgY2xhc2ggd2l0aCB0aGUgb25lcyB1c2VkIHRvCisgICAgYnVpbGQgdGhlIGFwcGxpY2F0aW9uLgorCitjb21taXQgNjhhNmExY2E2ZGM0Y2E4OTAxYmFjYWI1OTgzMjZhZjczYjQ0NDY1NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIEp1bCAyIDE3OjMwOjI5IDIwMTMgKzAyMDAKKworICAgIE9ubHkgY2hlY2sgZm9yIG15c3FsL215c3FsLmggb25jZS4gUmVtb3ZlIEhBVkVfTVlTUUxfTVlTUUxfSCBzaW5jZSBub3RoaW5nIHVzZXMgaXQuCisKK2NvbW1pdCBhZDg3YmI2MDhiMzA1NTY3YTNjNWVhZjA0NmI3Yzk4ZWEzZTRiZGQ1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCA0IDExOjMwOjA0IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSCAyNDcyOiBmcm9tIFN1bmlsOiBkb24ndCB1c2UgSEJLVCBhcyBoZWFydGJlYXQgaW50ZXJ2YWwgaW4gU0NUUC1NSUI6OnNjdHBBc3NvY1RhYmxlLgorCitjb21taXQgNGM0YTQyODFmZDViMmM2MTU2YzUxMjBmOWEyZThiNzA4ZjQ2NmNjZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKdWwgNCAxMTowODo0OCAyMDEzICswMjAwCisKKyAgICBpbmNsdWRlRGlyIGlzIG5vdCBwcmVkaWN0YWJsZSB3aXRoIHJlbGF0aXZlIHBhdGhzCisKK2NvbW1pdCA3OWU4ZGQyYTM3MmEyMGVlOTdkZTFjNzEwN2I1OWFkNGFhZjg5YTM2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEp1bCA0IDEwOjQ3OjI5IDIwMTMgKzAyMDAKKworICAgIFVwZGF0ZSBjb25maWd1cmF0aW9uIGRvY3VtZW50YXRpb24gd2l0aCBpbmNsdWRlRmlsZSBhbmQgaW5jbHVkZURpci4KKworY29tbWl0IGUwZTgwNDQ4MmJlYzcwZjRjNDE2YTM1ZmNiMzIzYTQxNjk5NjVjNWYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKdWwgMyAxNTowODoxNCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDI0NzA6IEFjY2VwdCA2NTUzNSBhcyBhIHZhbGlkIElQdjYgcG9ydCBudW1iZXIKKworY29tbWl0IGRkMzMyYTAzNWU4NTNjNzJhODMyNzQ4NDY5YmFiN2I4ODJlMjdiN2MKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMiAwNzowMDo1MSAyMDEzICswMjAwCisKKyAgICBCVUcgYSMyNDYzOiBGaXggY29uZmlndXJlIHRvIHJlc3BlY3QgZGF0YSBmcm9tIG15c3FsX2NvbmZpZy4KKworY29tbWl0IDQwOGNjOTczMmMzNDYxMTFmYzFmZGEyM2UxMzZkNjA4ODNjZGI3ZTQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDEgMTQ6MjU6NDEgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBjb3JyZWN0bHkgcmVwb3J0IGVycm9yIHdoZW4gcGFyc2luZyBtYWxmb3JtZWQgT0lELgorCitjb21taXQgOWEyYmZjOGY5NWQ2ZTkyNmRjYmYxNmZmNDRiNTNiMjdlMzhjODQzNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMSAxMzo1NDozOCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBweXRob246IEZpeGVkIHJldHVybmluZyBvZiBlbXB0eSBzdHJpbmdzLgorICAgIAorICAgIFZhcmJpbmQgdHlwZSAoU05NUF9OT1NVQ0hPQkpFQ1QgZXRjLikgc2hvdWxkIGJlIHVzZWQgdG8gZGV0ZWN0IGVycm9ycyBpbnN0ZWFkIG9mIGxlbmd0aCBvZiB0aGUgdmFyaWFibGUgLSBpdCBjYW4gYmUgZW1wdHkgc3RyaW5nLgorCitjb21taXQgMWEwZjA3NTc0YTgwZDFkNmE2Nzg4Y2FlYjM5MWExZDJmZWY5NTcxMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKdW4gMjggMTA6Mzc6NDYgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHNob3cgTGludXgga2VybmVsIHRocmVhZHMgaW4gaHJTV1J1blRhYmxlLgorCitjb21taXQgMjY1OWMwZjZiZDg2ZjAxNzE4NjlkMzRmZjhhN2Q0ODE5NGVhNGIzMQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXkgMjEgMDk6MTM6NDEgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZGVkIGJ0cmZzIHN1cHBvcnQgdG8gaHJGU1RhYmxlCisKK2NvbW1pdCBhODQwMzlkMGExZDZmNTUwYjQ3M2QyOTU5MjEwMTBkODBlMThkODNmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVuIDI1IDE0OjU1OjI2IDIwMTMgKzAyMDAKKworICAgIHNubXBfc3RyY2F0OiBkb250IHRlc3QgKmJ1ZiBiZWZvcmUgd2UgaGF2ZSB0cmllZCByZWFsbG9jCisKK2NvbW1pdCA1NTUzZWY0MzYyZDUyNGEwODhiNTE5ZTEzNTU2MTU4ZTVkNjI1ZWM0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSnVuIDMgMDI6NDg6MDYgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IHByaW50ZigiJXMiLCBOVUxMKSBhcyB0aGF0IGlzIHVuZGVmaW5lZCBiZWhhdmlvdXIuCisKK2NvbW1pdCA4OTQxNmU3OWY1YzUwNTY4ZTk5YzA3ZmFiMDZhOWFlOWY5NzZiYmVmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gSnVuIDI0IDIyOjIyOjAzIDIwMTMgKzAyMDAKKworICAgIEJVRzogQTI0NDE6IENvcnJlY3QgY29tbWVudAorCitjb21taXQgMWEzYWU2NDc3YjgxNjNhMWI0M2I4MzRhYmIzMGIxZjAzMTQ1YWI2MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEp1biAyMiAyMDoyNzozNCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBIT1NULVJFU09VUkNFUy1NSUIsIGhyU1dSdW4gdGFibGU6IFBhcnNlIC9wcm9jLzxwaWQ+L3N0YXQgY29ycmVjdGx5IG9uIExpbnV4CisgICAgCisgICAgVGhpcyBpc3N1ZSB3YXMgcmVwb3J0ZWQgYnkgVmluY2VudCBCZXJuYXQgPHZpbmNlbnQuYmVybmF0QGRhaWx5bW90aW9uLmNvbT4uCisgICAgU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1Ny8uCisKK2NvbW1pdCBmOTJmZmU5MTdhMzAwYzQxZWJlMDdlMjRjNjQxODg1NWU3NTlmOTM4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE5OjM3OjAzIDIwMTMgKzAyMDAKKworICAgIHNubXB0cmFwZDogRml4IGEgZG91YmxlIGZyZWUgaW4gYW4gZXJyb3IgcGF0aAorICAgIAorICAgIERldGVjdGVkIGJ5IENvdmVyaXR5LiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IGM1ZjNhMWQ4YmI1ODA0Nzk5YjYwMmQyNzY5YjAzMWQ2ZmFmNWYwZWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTc6NTE6NDMgMjAxMyArMDIwMAorCisgICAgc25tcGxpYjogaGV4X3RvX2JpbmFyeTIoKTogUmV0dXJuIC0xIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzCisKK2NvbW1pdCBmOGYwOGUxZDZkM2VjODE5NGZhYmQ2YWIwMDJhYjkxN2FmYmE5MWEzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE3OjEzOjAxIDIwMTMgKzAyMDAKKworICAgIHNubXBsaWI6IFNpbXBsaWZ5IHRoZSBjb2RlIGZvciBkZWxldGluZyBhIHJlcXVlc3QgZnJvbSB0aGUgcmVxdWVzdCBsaXN0CisgICAgCisgICAgVGhlIGdvYWwgaXMgKGhvcGVmdWxseSkgdGhhdCB0aGUgbmV3IGltcGxlbWVudGF0aW9uIGRvZXMgbm90IGNvbmZ1c2UKKyAgICBDb3Zlcml0eSBhbnltb3JlLiBTZWUgYWxzbyBodHRwOi8vc291cmNlZm9yZ2UubmV0L3AvbmV0LXNubXAvcGF0Y2hlcy8xMjUxLy4KKworY29tbWl0IGVmNmQ1YzdhMDMxMzI0N2E2Yzk0NzMyNjE3NzdlOTYzZjdhNDk1MjkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBKdW4gMjIgMTQ6NDg6MjIgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogc25tcF9zdHJjYXQoKTogQ2hlY2sgKmJ1ZiBiZWZvcmUgdXNpbmcgaXQKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCAyNTY2YjgzZWJlYjBlMzRlZWE5MDc5MjhjNTRjMmI0ZTc0ZmYzN2Y4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjIzOjMzIDIwMTMgKzAyMDAKKworICAgIGhyU1dJbnN0YWxsZWQgdGFibGU6IENoZWNrIHN0YXQoKSByZXR1cm4gdmFsdWUgKDIvMikKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCA0OWNmZTRkODQwYzU4ZTEyMDJmYTI3MWZiZTc2MGJkNzUyNmE4M2E4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjIzOjAzIDIwMTMgKzAyMDAKKworICAgIGhyU1dJbnN0YWxsZWQgdGFibGU6IENoZWNrIHN0YXQoKSByZXR1cm4gdmFsdWUgKDEvMikKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCA1ZGY1NDYyNjM5ZjI0M2Q1OTI5ZmE5YmExNGQyMGIzNzExZjdjYWNlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjIxOjE4IDIwMTMgKzAyMDAKKworICAgIHVjZC1zbm1wOiBmaW5kX2RldmljZSgpOiBSZW1vdmUgYW4gdW51c2VkIHZhcmlhYmxlCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvCisKK2NvbW1pdCAxM2NlMTk5NmE4MmUwYjQ1OGIyNmFlMzlhYmYyMDEyZGI1OWM4YTU1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjIwOjE1IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IF9pbnNlcnRfbnNmaWxlKCk6IENoZWNrIHN0YXQoKSByZXR1cm4gdmFsdWUKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCA4MWEwZDg1OTE2M2Y4ZDU0OTA4NTI1YjUyMjQzMjk1ZDdiNDE0NTUwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjA3OjM3IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEZpeCBhIGJhZCBmcmVlKCkKKyAgICAKKyAgICBEZXRlY3RlZCBieSBDb3Zlcml0eS4gU2VlIGFsc28gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wL25ldC1zbm1wL3BhdGNoZXMvMTI1MS8uCisKK2NvbW1pdCBkMzRjODNlOTM0MjQxOWFlZWNmZjVmZmQ3ZGVhYjgzOTg3ZGJlYmNhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgSnVuIDIyIDE0OjAwOjM5IDIwMTMgKzAyMDAKKworICAgIGV0aGVybGlrZS1taWIsIHJtb24tbWliOiBGaXggbWFsbG9jKC4uLikgPCAwIHRlc3RzCisgICAgCisgICAgRGV0ZWN0ZWQgYnkgQ292ZXJpdHkuIFNlZSBhbHNvIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcC9uZXQtc25tcC9wYXRjaGVzLzEyNTEvLgorCitjb21taXQgNDNjNDQwMTc2YjNlNGY5Y2U5OTVlNDgyZWM2OTc1YmEwYzg1OWJmMworQXV0aG9yOiBNaWNoYWVsIFNoY3dhcmN6IDxNaWNoYWVsLlNoY3dhcmN6QGNvbXBhc3MtZW9zLmNvbT4KK0RhdGU6ICAgU2F0IEp1biAyMiAxMjo0NjowNCAyMDEzICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEZpeCBhIGRvdWJsZSBmcmVlIGF0IGV4aXQKKyAgICAKKyAgICBBIHF1b3RlIGZyb20gYSBtZXNzYWdlIGZyb20gTWljaGFlbCBTaGN3YXJjejoKKyAgICAKKyAgICBJIGFtIHJ1bm5pbmcgbmV0LXNubXAgNS43LjIgYW5kIGl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBkb3VibGUKKyAgICBmcmVlIHByb2JsZW0gaW4gc25tcHRyYXBkLCBpbiBmcmVlX3RyYXBkX2FkZHJlc3MoKSBhbmQKKyAgICBwYXJzZV90cmFwZF9hZGRyZXNzKCkuIEkgZ2V0IGEgU0lHQUJPUlQgb24gdGhlIHNlY29uZCBTSUdIVVAKKyAgICAobG9va3MgbGlrZSBpdCBkb2VzIGEgZG91YmxlIGZyZWUgb24gdGhlIGZpcnN0IFNJR0hVUCBhbmQgb24KKyAgICB0aGUgc2Vjb25kIGl0IGNyYXNoZXMpLgorICAgIAorICAgIEkgaGF2ZSB0aGlzIHNubXB0cmFwZC5jb25mIGNvbmZpZ3VyYXRpb246CisgICAgICBzbm1wVHJhcGRBZGRyIHVkcDoxNjIsdWRwNjoxNjIKKyAgICAgIGF1dGhDb21tdW5pdHkgbG9nLGV4ZWN1dGUsbmV0IHB1YmxpYworICAgIAorICAgIEFuZCB0aGlzIGlzIHRoZSBiYWNrLXRyYWNlIGZyb20gZ2RiOgorICAgICoqKiBnbGliYyBkZXRlY3RlZCAqKiogL29wdC9jb21wYXNzL2Jpbi9zbm1wdHJhcGQ6IGZyZWUoKTogaW52YWxpZCBuZXh0IHNpemUgKGZhc3QpOiAweDA4MGMxN2E4ICoqKgorICAgID09PT09PT0gQmFja3RyYWNlOiA9PT09PT09PT0KKyAgICAvbGliL2xpYmMuc28uNlsweGY3MjA0ODQ1XQorICAgIC9saWIvbGliYy5zby42KGNmcmVlKzB4OWMpWzB4ZjcyMDY2ZWNdCisgICAgL29wdC9jb21wYXNzL2Jpbi9zbm1wdHJhcGQoZnJlZV90cmFwZF9hZGRyZXNzKzB4MmEpWzB4ODA0YTZiYV0KKyAgICAvdXNyL2xpYi9saWJuZXRzbm1wLnNvLjMwKGZyZWVfY29uZmlnKzB4MzIpWzB4Zjc0YWU0YzJdCisgICAgL29wdC9jb21wYXNzL2Jpbi9zbm1wdHJhcGRbMHg4MDRhNTU3XQorICAgIC9vcHQvY29tcGFzcy9iaW4vc25tcHRyYXBkWzB4ODA0YmZhOV0KKyAgICAvbGliL2xpYmMuc28uNihfX2xpYmNfc3RhcnRfbWFpbisweGU1KVsweGY3MWIwNDU1XQorICAgIAorICAgIEkgaGF2ZSBhIHBhdGNoIHRoYXQgZml4ZXMgdGhpcyBpc3N1ZSwgaGVyZSBpcyB0aGUgZGlmZjoKKyAgICBAQCAtNDQ2LDYgKzQ0Niw3IEBAIGZyZWVfdHJhcGRfYWRkcmVzcyh2b2lkKQorICAgIHsKKyAgICAgICAgIGlmIChkZWZhdWx0X3BvcnQgIT0gZGRlZmF1bHRfcG9ydCkgeworICAgICAgICAgICAgZnJlZShkZWZhdWx0X3BvcnQpOworICAgICsgICAgICAgZGVmYXVsdF9wb3J0ID0gZGRlZmF1bHRfcG9ydDsKKyAgICAgICAgIH0KKyAgICB9CisKK2NvbW1pdCAyZGI1NDg1ZmMxY2NjZTM5ZWZhNjlhMzc3YmI4ZDZmNjIzMWViMGIyCitBdXRob3I6IEVyaWMgUy4gUmF5bW9uZCA8ZXNyQHRoeXJzdXMuY29tPgorRGF0ZTogICBGcmkgSnVuIDIxIDEwOjQ3OjMyIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IGRvY3VtZW50YXRpb246IGZyb20gIkVyaWMgUy4gUmF5bW9uZCI6IENvcnJlY3QgbWFuIHBhZ2UgbWFya3VwIHByb2JsZW0KKyAgICBBbWJpZ3VvdXMgb3IgaW52YWxpZCBiYWNrc2xhc2guICBUaGlzIGRvZXNuJ3QgY2F1c2UgZ3JvZmYgYSBwcm9ibGVtLgorICAgIGJ1dCBpdCBjb25mdXNlcyBkb2NsaWZ0ZXIgYW5kIG1heSBjb25mdXNlIG9sZGVyIHRyb2ZmIGltcGxlbWVudGF0aW9ucy4KKworY29tbWl0IGQ2NzcxNDY0ZjE2ZGM2ZmU2NGRkMjRjMDhhZjRiZTcyNTg4NWFkYWQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBKdW4gMTggMjM6NDU6MjggMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogYXBwczogU3RvcCBhZ2VudHh0cmFwIGZyb20gYWNjZXNzaW5nIHRoZSBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24KKyAgICBUaGlzIGlzIG5lZWRlZCB0byBwcmV2ZW50IG1vYW5pbmcgYWJvdXQgbm90IGJlZWluZyBhbGxvd2VkIHRvIHdyaXRlIHRob3NlCisgICAgZmlsZXMgZHVlIHRvIGJhZCBwZXJtaXNzaW9ucy4KKworY29tbWl0IDE0YWM1ZDVkMmM0ZDlmM2E3OTlkNDAxY2MxZTQwM2E4YTI5MmQ0MjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMTIgMjI6Mzc6MjMgMjAxMyArMDIwMAorCisgICAgRGFyd2luIGZpeGVzOiBVRFAgYW5kIFRDUCB0YWJsZXMsIG1lbW9yeSBkYXRhLCBhbmQgc29tZSBlcnJvciBjaGVja2luZy4KKworY29tbWl0IGJhYmQzMWQxMDQ5ZTIzM2M0NTRmMWNiZDg4YmJhNzVmMmY0MDc4MWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMTIgMjI6MjU6MTkgMjAxMyArMDIwMAorCisgICAgRml4IHNvbWUgbWFuIHBhZ2VzIHJlZmVyZW5jZXMgdG8gb3RoZXIgcGFnZXMKKworY29tbWl0IGJkZWZjZTA2YTFlYTFjMTQzMDgwMjcxNGZjODM3YjU1OGUxYTY3NWEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMTIgMjI6MjM6NTcgMjAxMyArMDIwMAorCisgICAgVXBkYXRlZCBFTlRJVFktTUlCIGluIHJmYyA2OTMzCisKK2NvbW1pdCBkZjg2M2E1MzQ4YWFiZjcxYmJjYTdiZmVmY2Y4YmViOGJiOWU3NzYyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDEyIDIyOjE3OjQ2IDIwMTMgKzAyMDAKKworICAgIEZpeCBCdWcgIzI0Mjc6IENhbm5vdCByZXNvbHZlIElQdjYgb25seSBob3N0bmFtZXMsIGJ5IGFjY2VwdGluZyBhIGxpc3QKKyAgICBvZiB0cmFuc3BvcnQgZG9tYWlucy4KKworY29tbWl0IGRhMWZlZjM4MjU5MWZmNDVkYzkyZWIzYjk1YTZiZmVmZjllY2ZhNGYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTWF5IDIxIDA5OjEzOjQxIDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGRlZCBidHJmcyBzdXBwb3J0IHRvIGhyRlNUYWJsZQorCitjb21taXQgOTMxYzg3YTA1ZjVmNjYyODk2MTNmZWQ3N2FjNzg4NDRiNjFjYjc5ZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSAxNSAyMDoxODoxNCAyMDEzICswMjAwCisKKyAgICBCVUcgMjQ1ODogRml4IG1pc3NpbmcgaW5pdGlhbGl6YXRpb24gb2YgYXV0b19ubGlzdCBzdHJ1Y3R1cmUgKFRoYW5rcyBSeWFuIFN0ZWlubWV0eikKKworY29tbWl0IDkxMDRlMmEzZjE5NTUwNmE0NzczMzk4M2Q4Y2JhMzhlZDU5MmE5ODgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXkgMTUgMjA6MTM6MDUgMjAxMyArMDIwMAorCisgICAgUEFUQ0ggMTI1MzogRml4IHBhcnNpbmcgb2YgREVGVkFMIEJJVFMgKFRoYW5rcyBNaWtlKQorCitjb21taXQgODU1ZTU0ZTM0NWM1NWVhMjJiN2U3YWMxMmEyNDlkNzQwOWZiYjMwOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSAxNSAyMDoxMToyOSAyMDEzICswMjAwCisKKyAgICByZmNsaXN0OiBhZGQgUkZDIDY5NDUKKworY29tbWl0IDM2NTI3Y2Q4Y2NhNjUwNzEzYzg1ZTAzMjhjMGMyYTFjZDA5NWMzNTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBNYXkgMTIgMTA6MDQ6MDggMjAxMyArMDIwMAorCisgICAgV2luZG93cywgVmlzdWFsIFN0dWRpbzogVW5icmVhayBjb21waWxhdGlvbiB3aXRoIHRoZSBXaW5kb3dzIFhQIFBsYXRmb3JtIFNESworICAgIAorICAgIFRoaXMgd2FzIHJlcG9ydGVkIGJ5IFdpbSBEZXZvcworCitjb21taXQgNTE3YTU1MTIxMDJkMzM5NDg5YzlhNzBlYThkMDg3YTBlMTAwMzVhOQorQXV0aG9yOiBXaW0gRGV2b3MgPFdpbS5EZXZvc0BtZXVjY2ktc29sdXRpb25zLmNvbT4KK0RhdGU6ICAgU3VuIE1heSAxMiAwOTo0MDo1MyAyMDEzICswMjAwCisKKyAgICBXaW5kb3dzOiBVbmJyZWFrIHRoZSBWaXN1YWwgU3R1ZGlvIGJ1aWxkCisgICAgCisgICAgInN0YXRpYyBORVRTTk1QX0lOTElORSIgdHJpZ2dlcnMgdGhlIGVycm9yIG1lc3NhZ2UgImVycm9yIEMyMTU5OiBtb3JlCisgICAgdGhhbiBvbmUgc3RvcmFnZSBjbGFzcyBzcGVjaWZpZWQiLCBzbyB1c2UgTkVUU05NUF9TVEFUSUNfSU5MSU5FIGluc3RlYWQuCisKK2NvbW1pdCA0ZGYwMmY5NjdkMGI5ZDE2Y2ExMmI1ODIxNWU5ODM1YmM5ZjM5MWNhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTWF5IDQgMTQ6NTQ6NDggMjAxMyArMDIwMAorCisgICAgUmVtb3ZlIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgbWlzc2luZyBwcm90b3R5cGUKKworY29tbWl0IDE4ZGFmYTU4ZDgxMjE5NjFiMDU4ZDZkNDE2NzA3ZGYxZDZhMDQyYWMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBNYXkgNCAxNDo1MzoxMCAyMDEzICswMjAwCisKKyAgICBSZW1vdmUgb25lIGNvcHkgb2YgdGhlIGxpbnV4X3N0YXRlcyBhcnJheS4gTWFrZSB0aGUgd2hvbGUgdGhpbmcgY29uc3QuCisKK2NvbW1pdCAwMmFkODFlYTJkZTJkNDY4Nzc5NDA1N2UyZTgxMDRhNjUyMzkyNTRkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTWF5IDMgMDg6MDg6MDEgMjAxMyArMDIwMAorCisgICAgUmV2ZXJ0IHRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgZnJvbSAnRml4IG1peGluZyBvZiBjb2RlIGFuZCBkZWNsYXJhdGlvbnMnWzFdCisgICAgaW4gb3JkZXIgdG8gbm90IHVzZSB2YXJpYWJsZXMgYmVmb3JlIHRoZXkgYXJlIHNldCBhbmQgbm90IGluY3JlYXNlIHRoZQorICAgIHByb2JhYmlsaXR5IGZvciBtZW1vcnkgbGVha3MuCisgICAgCisgICAgMSkgcmV2IGVlZmMyNWNhNjcwNWEyZDFhOGY1MjE2MDc2ZjQzOWUwZDNlM2VmNzYKKworY29tbWl0IDRmZDA1MjVkNmE2NWFjZmVhM2Q3YjQzMWM5Nzg5M2RjNDc5MjdkYTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXkgMiAyMjo0NTo1MSAyMDEzICswMjAwCisKKyAgICBhdXRvY29uZgorCitjb21taXQgNTVkZGQ4Mjk1YWU2NWU0N2YyMjBmNDgwNzc5NGZiYWM5YjY5ZjBmYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1heSAyIDIyOjIwOjQ2IDIwMTMgKzAyMDAKKworICAgIHRlc3Rpbmc6IERvY3VtZW50IHdoeSB3ZSBza2lwIHRlc3RzCisKK2NvbW1pdCBlZWZjMjVjYTY3MDVhMmQxYThmNTIxNjA3NmY0MzllMGQzZTNlZjc2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWF5IDIgMjI6MTM6NDIgMjAxMyArMDIwMAorCisgICAgRml4IG1peGluZyBvZiBjb2RlIGFuZCBkZWNsYXJhdGlvbnMuCisKK2NvbW1pdCBiOTRiNzM0ZGQzNTNiY2Y3OTNjOGI2NWEyNzNhMTM4N2JmZDI1NmVhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWF5IDIgMjI6MTI6MTEgMjAxMyArMDIwMAorCisgICAgRGFyd2luOiBzdXBwb3J0IDY0LWJpdCBjb3VudGVycyBmb3IgZGlza2lvIHRhYmxlCisKK2NvbW1pdCA4ZDg0MWMxZDliMWI0ZWVjMjY0ZDY4MmFjMTI2MDMyYWEwOGYyZTgyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWF5IDIgMjI6MDk6MTcgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogU3VwcG9ydCBuZXcgTUlCIHN0cnVjdHVyZXMgYW5kIE1GRCByZXdyaXRlcyB1bmRlciBEYXJ3aW4KKworY29tbWl0IDI3NjQwZmNmYjIwNTI2YmVmMmY2ZWI0MGMyYTU0NTY2ZGZjNmM0YzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBcHIgMjcgMTA6NTg6MjkgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IENvcnJlY3QgdGhlIHNpemUgb2Ygb2YgdGhlIEVYQU1QTEVJUEFERFJFU1MgdmFsdWUgb24gTDY0IGhvc3RzCisKK2NvbW1pdCBlYmJlMmEzOTkwZWY2ZGNiZGNiOTlhMzlhZGQ0NjUzOTgzNTRjMzRjCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgQXByIDIzIDA3OjI1OjIxIDIwMTMgKzAyMDAKKworICAgIGJ1aWxkaW5nOiBNYWtlIC0tZW5hYmxlLW1pbmltYWxpc3QgY29tcGlsYXRpb24gd29yayBhZ2FpbgorCitjb21taXQgNGJkN2Q3M2IxZmU2MGJiNTM2YmYzOWViNGEzODU5NmU4OTY1YzNmMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMiAyMjoyNTozOCAyMDEzICswMjAwCisKKyAgICB0eXBlY2FzdCB0byBzaWxlbmNlIHdhcm5pbmcgZm9yIGZvcm1hdAorCitjb21taXQgZGIwNzFkMGE2ZjQ4NzQyMTc2OWI2OWYyMmNjZjA5Y2MyNDJkOTQ1NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMiAyMjoyMzo1MiAyMDEzICswMjAwCisKKyAgICBPbmx5IGRlY2xhcmUgSFJQX21heG5hbWVzIHdoZW4gbmVlZGVkCisKK2NvbW1pdCBmYWYwMGNlM2IwZmViNGQzN2ZhYmVmNmQ0MTM1ZTM2ODAzYjAwMzc5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIyIDIyOjIyOjI0IDIwMTMgKzAyMDAKKworICAgIGlwLmM6IGZpeCBpbmNvbnNpc3RlbnMgZGVjbGFyYXRpb25zIG9mIGlwX21vZHVsZV9vaWRfbGVuCisKK2NvbW1pdCA3ZjZiNTk1MzNjZGZhMDY0NTBhZWU0MTU3MDIyM2IxY2RkMmNhNmI4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIyIDIyOjE5OjQ0IDIwMTMgKzAyMDAKKworICAgIFJlY292ZXIgZnJvbSBmYWlsdXJlcyBpbiBsaWJwY2kKKworY29tbWl0IDQwOTM4YTYyNjE5NTkwYjRlYTA3MWFlODViYWEyZjQyYTBiN2ZjYjIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIyIDE1OjAwOjAwIDIwMTMgKzAyMDAKKworICAgIENoZWNrIGlmICdhc25fcGFyc2VfKiAnIGFjdHVhbGx5IHN1Y2NlZWRlZC4KKyAgICAKKyAgICBJZiBub3QsIGRpc2NhcmQgdGhlIHBhY2tldCBpbnN0ZWFkIG9mIHVzaW5nIHdyb25nIGRhdGEuCisKK2NvbW1pdCBhYTRmYjk0OTAxMmQ3YzAyMmE0MzY5OTJhYzIwM2MwNjVmZDc0MjBhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMiAxNDo1ODo0MSAyMDEzICswMjAwCisKKyAgICBJbnRlZ2VyIHZhbHVlcyBlbmNvZGVkIGluIEJFUiBtdXN0IGhhdmUgYXQgbGVhc3Qgb25lIGNoYXJhY3Rlci4KKyAgICAKKyAgICBJZiBhc25fbGVuZ3RoID09IDAsIHdlIHdvdWxkIHJlYWQgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIG5leHQgdmFyYmluZCBvbiBuZXh0IGxpbmU6CisgICAgICAgIGlmICgqYnVmcCAmIDB4ODApCisgICAgLT4gcmVhZGluZyBwYXN0IHRoZSBidWZmZXIgaWYgdGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSAtPiBzaWdzZWd2LgorCitjb21taXQgZjZlZWQ2ZTIzODRjYmY4NTc3NjhmMGVlOGM2NjAyZWI3Y2QyZjAzYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEFwciAyMiAwODoxODo1NCAyMDEzICswMjAwCisKKyAgICBSZWdlbmVyYXRlIGNvbmZpZ3VyZQorCitjb21taXQgYTU4N2QxMWZiNjdmYWQzYWYyNDUxN2E0MDhhYmMzNzAwNTY1ZWRmNQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEFwciAyMiAwODoxODozNSAyMDEzICswMjAwCisKKyAgICBSZWdlbmVyYXRlIGNvbmZpZ3VyZQorCitjb21taXQgY2UzYzkyMTQxMjhiMWNkYmViZDI5NzVkYTBmMzZhNTVlMjU4NGZhMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIEFwciAyMiAwODoxNjowMiAyMDEzICswMjAwCisKKyAgICBSZXBvcnQgdGhlIHJlc3VsdCBvZiB0aGUgUE9TSVggc2hlbGwgdGVzdCwgbm90IGEgY29uc3RhbnQgeWVzCisKK2NvbW1pdCAwYzg3MGY3NGIyZTQzMzdiNGJmM2I3ZjExZjU1YjEyZTgwZGY0OWZmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gQXByIDIyIDA4OjAwOjMyIDIwMTMgKzAyMDAKKworICAgIENoYW5nZSB0aGUgY2hlY2sgb2YgcGVybCBzaGVsbCBkZXRlY3Rpb24gdG8gd29yayB3aXRoIEFJWCBzaCBhcyB3ZWxsCisKK2NvbW1pdCA1ZjA4MTlmMTAyZDFjZGUzODk5ZDA4NzA4YzljMTI2MjY4ODk5MzE4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gQXByIDEgMDc6Mzg6MDkgMjAxMyArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdXBkYXRlLWNvbnRyb2xsZWQgY2hhbmdlcyB0cmlnZ2VyIHBlcmlvZGljIHNhdmVzLiBUaGFua3MgdG8gQ2xhdXMgS2xlaW4gZm9yIG5vdGljaW5nIHRoYXQgdGhpcyB3YXMgbWlzc2luZy4KKworY29tbWl0IGE4ZmYyNjg4M2Q2Mzg2MWQ4NzY5ODVkZGU4OWYzODkxNTc3ZDYwMjYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXIgMzEgMTM6MzM6MDIgMjAxMyArMDIwMAorCisgICAgc25tcGQ6IE1ha2UgdGhlIHVwZGF0ZSBoYW5kbGVyIGNhbGwgYW55IGNoaWxkIGhhbmRsZXJzCisKK2NvbW1pdCAyYmM2MmI5NzJhMmJkMGI5MWRkZDRmN2MxMWQ0N2RiZTViZjZmZjAzCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWFyIDMxIDEzOjMyOjI5IDIwMTMgKzAyMDAKKworICAgIHNubXBkOiBEbyBub3QgbGVhayBtZW1vcnkgaWYgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbHMuCisKK2NvbW1pdCBhZTkxNDhiNTFiOWIwMjI3MGZkZGJiNzQxMTFiYTJjMDJhOGVhNjdjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXByIDE2IDIyOjAzOjAwIDIwMTMgKzAyMDAKKworICAgIGV4dGVuZC5jOiBmaXggbWlzc2luZyBzZW1pY29sb24gYW5kIHdhcm5pbmcKKworY29tbWl0IDQ2NDIyZDE3ZGZkYjQxNmViMjRhZDdkYjc0NTNlYzQ3M2RiMjA4MjAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXByIDE2IDEzOjQ4OjI2IDIwMTMgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBjcmFzaCBpbiBVQ0QtU05NUC1NSUI6OmV4dFRhYmxlCisgICAgCisgICAgc25tcGQgY3Jhc2hlZCB3aGVuIHRoZSBjb21tYW5kIHRvIGV4ZWN1dGUgaGFkIG5vIGFyZ3VtZW50cywgaS5lLiBleHRlbmQtPmFyZ3Mgd2FzIE5VTEwuCisKK2NvbW1pdCA4YjU3YmRiMGEwOTQ3MmExNmQzYWY2OWZkMmIxMzc0YzA5ZTZhM2FkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDggMjA6MzY6MzUgMjAxMyArMDIwMAorCisgICAgcmVydW4gYXV0b2hlYWRlci9hdXRvY29uZgorCitjb21taXQgOWE5ZWEyNTdlNmViNDc4MDBkMzRmMWE4NmVjMGEyYTZlOTA4NWYzMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciA4IDIwOjM1OjI0IDIwMTMgKzAyMDAKKworICAgIHJlcnVuIGF1dG9oZWFkZXIvYXV0b2NvbmYKKworY29tbWl0IDU5YTMyMTQzOThiY2ViMjJjNDhkNThjMGZlOWM1NTJiMmUxZWNiOGMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgOCAyMDozMTo0OSAyMDEzICswMjAwCisKKyAgICByZXJ1biBhdXRvaGVhZGVyL2F1dG9jb25mCisKK2NvbW1pdCBlNGQ3MmRiMTFkM2ZiN2E0NDQyNTA5N2I1ZWMyNmI5ZjkxN2E5YzgyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDggMTk6MTQ6MDQgMjAxMyArMDIwMAorCisgICAgc25tcGtzbTogaGFuZGxlIGRlcHJlY2F0ZWQga3JiNV9hdXRoX2Nvbl9nZXR7bG9jYWwscmVtb3RlfXN1YmtleQorCitjb21taXQgOTlmZjk1MzY3M2Y3MzYxNDQ2M2FjZTEyMTBjNGFjMDczYTFmMmE4MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciA4IDE5OjA1OjQ3IDIwMTMgKzAyMDAKKworICAgIHNubXBrc206IGZpeCBzb21lIGNvbnN0IGNhc3Qgd2FybmluZ3MKKworY29tbWl0IGNmMGQ0ZWYyMjRiYWQwMDA5OTUzNzA0ODNhNWM5OGRjMTc4MzlhNDEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBcHIgNSAyMjowNTozMyAyMDEzICswMjAwCisKKyAgICBJbml0aWFsaXplIGEgY291cGxlIG9mIHZhcmlhYmxlcyB0byBwbGVhc2UgY2xhbmcKKworY29tbWl0IDcxZjU5ZTllNmM5OGU4ZGJmYWIxZmZiMGQxZTQ2OGMxMmUzZDkyY2UKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBcHIgNSAyMTozODo0NCAyMDEzICswMjAwCisKKyAgICBNYWtlIHN1cmUgc25tcGtzbSBpbmNsdWRlcyBjb21fZXJyLmggKHdoZXJldmVyIGl0IGlzKSB0byBkZWNsYXJlIGVycm9yX21lc3NhZ2UKKworY29tbWl0IDhjMDFmNjQ3MjhhNDM2NTZkYzNhYzVmYmVmZGY4ZWNlYzhkYTE1MDYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBcHIgNSAyMToxMzozMCAyMDEzICswMjAwCisKKyAgICBNaW5vciBmaXggdG8gaW5saW5lIHRvIGFsbG93IGNvbXBpbGF0aW9uIHdpdGggY2xhbmcKKworY29tbWl0IDJkYjEyZjY4OGUxZjJlZWViYjU4OWVjNzNkYTgyZWI4OTdmMzRiZDEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBNYXIgMTggMDg6NTQ6NDkgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIGxvY2FsIHRydXRodmFsdWUgaGFuZGxlciBjYWxsIGFueSBzdWJoYW5kbGVycyBpdCBtaWdodCBoYXZlLiBUaGFua3MgdG8gQ2xhdXMgS2xlaW4gZm9yIG5vdGljaW5nIHRoaXMgcHJvYmxlbS4KKworY29tbWl0IDkwNTEyYTMyYmQxYzJiZTVkMTdiMjNmMTA5NTYyNzgzOTVkZTM3NTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBNYXIgMTkgMjI6Mjg6MzQgMjAxMyArMDEwMAorCisgICAgUGF0Y2ggMTI1MCBmcm9tIHN0aGVuOiBpbmNsdWRlIDxzeXMvcHJvYy5oPiBpbiBzd3J1bl9raW5mby5jIGZvciBPcGVuQlNEIDUuMworCitjb21taXQgMzkxOTM2MDBlYzM4ZGViNTEzNzlhMTA5NjQ4ZDY5ZTdlOTAwMTcwMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA3IDIxOjQ0OjU5IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBwcm90b3R5cGUgcm91dGU2cHIKKworY29tbWl0IGFjY2U4Mjk2ZGM1YjY4ZDIxMmY3NDA0ZWRjMmFmZGI4YjAyODE3YzAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBNYXIgNyAyMTozOToxNiAyMDEzICswMTAwCisKKyAgICBjbGVhbiB0YWJzIHRwIHNwYWNlcworCitjb21taXQgNDAyYmRhZTk2YTZkNzliM2I2M2I2NzI2MWIzN2E4NDdhYjQ4MTdlMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA3IDIxOjM3OjQzIDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmYWxsIGJhY2sgdG8gaXB2NFJvdXRlVGFibGUgKFRoYW5rcyB0byBmZW5uZXIpCisKK2NvbW1pdCBlNjkxN2UzNzJhMDZkZGQ3NzYxYjMxMDNiMzI5YmNmNjk2ZTkzYTFmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDcgMjE6Mjk6NDQgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IHNob3cgQVMgaW4gcm91dGluZyB0YWJsZSBpZiBhdmFpbGFibGUgKFRoYW5rcyB0byBmZW5uZXIpCisKK2NvbW1pdCA5ZWI4ZDBmOTA3ZWQ4ZDc4ZGU5MGRjZjY2MjNjMzMwNjA5OTNmMmEwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDcgMjE6Mjg6MjYgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQ6IGVhcmx5IGRldGVjdCBpZiB3ZSB3YW50IGlwdjQgcm91dGUgdGFibGUgKFRoYW5rcyB0byBmZW5uZXIpCisKK2NvbW1pdCA0MDgzNzM0ZWY3ZjRiZWFmMWI5YTEzMjU3MzhiYTE4NWViN2NjNzE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDcgMjE6MjU6NTMgMjAxMyArMDEwMAorCisgICAgRml4IG1pc3BsYWNlZCBuZXdsaW5lcyBpbiBlcnJvciBtZXNzYWdlcworCitjb21taXQgNWIwZWQzYjc2ZjZlNDY2OWYyMzhiNWM4MmNkM2NjNmNiNmNhYTVjZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciA1IDE3OjE2OjI2IDIwMTMgKzAxMDAKKworICAgIFVuaXQgdGVzdCBUMDE0OiBGaXggYSBDeWd3aW4gYnVpbGQgd2FybmluZworCitjb21taXQgMTA2YWQyNDUwZjJiNzg4NDhmMjkyYWQwMzQ0NWE5N2M3Zjg3ZTZmNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciA1IDE3OjE3OjA1IDIwMTMgKzAxMDAKKworICAgIFVuaXQgdGVzdCBUMDE0OiBJbml0aWFsaXplIHZhcmlhYmxlcyBwcm9wZXJseQorCitjb21taXQgYTdkZWE1NzM0ODU5MzE1NjEwNTFhMjAxOTAyN2Q3ZWQwOWQxNTU2NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA0IDIyOjM1OjA2IDIwMTMgKzAxMDAKKworICAgIHJmY2xpc3Q6IGFkZCBHOTk4eCBtaWJzCisKK2NvbW1pdCA0NjA0Y2Y2MWU3Y2Y2ZWE2NGU3ODJmNGEzZDcyZDRmYjAyNGMxZjliCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDQgMjI6MjM6MjMgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQgLUNzOiBjb25zaXN0ZW50IGZpZWxkIHdpZHRocyBmb3Igc3RhdGlzdGljcy4gRG9jdW1lbnQKKyAgICBzbm1wbmV0c3RhdCAtQ3NzIHZhcmlhbnQuCisKK2NvbW1pdCA0YWE5MjE1N2NlNTVkMWU1MjhkN2RlNTI0OTFkM2ViNzAyMDg2OWU3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDQgMjI6MTc6MTkgMjAxMyArMDEwMAorCisgICAgc25tcG5ldHN0YXQuMTogcmVtb3ZlIGludmFsaWQgcmVmZXJlbmNlcyB0byByb3V0aW5nIHN0YXRpc3RpY3Mgb3V0cHV0LgorCitjb21taXQgNzUxZjRhNmM3ZmM4OWE1Y2YyYjI4NzlmNmY5MTViMzE0NjZhMDRiNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA0IDIyOjE0OjI5IDIwMTMgKzAxMDAKKworICAgIHNubXBuZXRzdGF0OiBmYWxsIGJhY2sgZmlyc3QgdG8gaXBDaWRyUm91dGVUYWJsZS4gVGhhbmtzIHRvCisgICAgQmlsbCBGZW5uZXIgZm9yIGluaXRpYWwgcGF0Y2ggZm9yIHRoaXMuCisKK2NvbW1pdCA5M2M4NmU2ZTFjZjMwMWJkMjY5ZmRmZmI1ZTlhYWFjZThhYTE5M2Y0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUdWUgSmFuIDMgMDc6MjE6MDMgMjAxMiArMDEwMAorCisgICAgRG8gbm90IGxlYWsgbWVtb3J5IG9uIGVycm9yCisgICAgCisgICAgSWYgYWxsb2NhdGlvbiBvZiBpaW5mbyBmYWlscyB0aGVuIHRhYmxlX2luZm8gaXMgbGVha2VkLgorICAgIERlYWxsb2NhdGUgdGFibGVfaW5mbyBpbiB0aGlzIGNhc2UuCisKK2NvbW1pdCAzNmE3ZGU3MjMwZmJiYmI1MmNjMzdjYmJlZDI4MWViNTU5NDA0YmU5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDI1IDIwOjQwOjA5IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IEFkZCBtdWx0aWhvbWluZyBzdXBwb3J0CisgICAgCisgICAgT24gV2luZG93cyBWaXN0YSAvIFdpbmRvd3MgU2VydmVyIDIwMDggYW5kIGxhdGVyIGl0IGlzIHBvc3NpYmxlIHRvIGFkZAorICAgIG11bHRpaG9taW5nIHN1cHBvcnQgYnkgdXNpbmcgdGhlIElQX1BLVElORk8gc29ja2V0IG9wdGlvbi4KKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCXNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jCisKK2NvbW1pdCA3YmJhYmFiMjM2MmRhYTZkNzZhZDczMDMzYjNmMzJiMmNiYTcyNTNmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgRmViIDIyIDE4OjU1OjQ3IDIwMTMgKzAxMDAKKworICAgIFJld29yayBJUF9QS1RJTkZPIC8gSVBfUkVDVkRTVEFERFIgZGV0ZWN0aW9uCisgICAgCisgICAgRGV0ZWN0IElQX1BLVElORk8gLyBJUF9SRUNWRFNUQUREUiBzdXBwb3J0IGR1cmluZyB0aGUgY29uZmlndXJlCisgICAgcGhhc2UgaW5zdGVhZCBvZiByZXBlYXRpbmcgdGhlIGZvbGxvd2luZyB0ZXN0IGluIGVpZ2h0IGRpZmZlcmVudAorICAgIHBsYWNlczoKKyAgICAKKyAgICAgI2lmIChkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKElQX1BLVElORk8pKSBcCisgICAgICAgICB8fCBkZWZpbmVkKElQX1JFQ1ZEU1RBRERSKSAmJiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0NPTlRST0wgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19GTEFHUworICAgICAuLi4KKyAgICAgI2VuZGlmCisgICAgCisgICAgVHdvIHNpZGUtZWZmZWN0cyBvZiB0aGlzIHBhdGNoIGFyZToKKyAgICAqIElQX1BLVElORk8gc3VwcG9ydCBpcyBlbmFibGVkIG9uIEN5Z3dpbi4KKyAgICAqIHNldHNvY2tvcHQoSVBfUkVDVkRTVEFERFIpIGlzIG5vIGxvbmdlciBpbnZva2VkIG9uIFdpbmRvd3Mgd2hlbgorICAgICAgYnVpbHQgd2l0aCBWaXN1YWwgU3R1ZGlvIG9yIE1pbkdXLWdjYy4KKworY29tbWl0IDFhMTk2YWQ5ZjE1MTc4NjhiOTNhNmJlYzkzYTBjZmUxZDI5ZTI4M2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBGZWIgMjMgMTQ6MDM6MjkgMjAxMyArMDEwMAorCisgICAgVGVzdGluZzogTWFrZSB1bml0IHRlc3QgVDAxNCBtb3JlIHJvYnVzdAorCitjb21taXQgOWJlMjJhYWFmODM5MzcxM2ZiYzM5MDI1ZjcwMjExMWY1MGYxZTRlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEZlYiAyMyAxMTowMzoyMCAyMDEzICswMTAwCisKKyAgICBXaW5kb3dzOiBBdm9pZCBjb2xsaXNpb25zIHdpdGggdGhlIFdpbmRvd3MgVmlzdGEgb3IgbGF0ZXIgU0RLCisKK2NvbW1pdCAwYjZiZmVmMmNhOWFlOWUxYzJiZWFmZTcwMDEwMGZhZTVmNmY0YzFhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgRmViIDIzIDExOjIwOjIzIDIwMTMgKzAxMDAKKworICAgIGluZXRfbnRvcCgpIC8gaW5ldF9wdG9uKCk6IENvbnZlcnQgcHJvdG90eXBlcyBmcm9tIEsmUiB0byBBTlNJIEMKKworY29tbWl0IDJiYjUxZDcxZWVjNGU3ODk5ODJjMmE3NDExODZkY2U2ZGYyMzg1NDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjEgMjA6NTk6MjUgMjAxMyArMDEwMAorCisgICAgUmVkdWNlIHRoZSB0aW1lIG5lZWRlZCB0byBydW4gdGhlIHJlZ3Jlc3Npb24gdGVzdHMgKHdhcyBlbmxhcmdlZCBieSBjb21taXQgYjNkNWVkODcpCisKK2NvbW1pdCBjZjY0MGNjZDY4ZTk2MzY4MDViNzUwNzk5MjhjNzI3N2ZhMjYwODNiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDExOjU1OjAzIDIwMTMgKzAwMDAKKworICAgIFVuaXQgdGVzdCBUMDE0OiBBY2NlcHQgImxvY2FsaG9zdC5sb2NhbGRvbWFpbiIgdG9vCisKK2NvbW1pdCBiZGE0MzU3Mzc1YWQyOTljZjE4NDc1NzllMWExYmMzYzYxMTg5NWMzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDE2OjA3OjQxIDIwMTMgKzAxMDAKKworICAgIFJlZ3Jlc3Npb24gdGVzdCBUMDYwOiBFc2NhcGUgYmFja3NsYXNoZXMgcGFzc2VkIHRvIENPTkZJR1RSQVBECisKK2NvbW1pdCA2YjVkNzg0ZjRkNmQwMDAzOTAwMTRkMTIwZjE1YjkzNzM2MmY4YzA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDIwOjMzOjAyIDIwMTMgKzAxMDAKKworICAgIFB5dGhvbiBiaW5kaW5nczogRml4IGEgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCA2ZDI1OGVmYTJhY2NhZGZjY2M1MGQ4NmJkNDYzNzk3NDU0NDljYTRhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDE1OjI3OjE5IDIwMTMgKzAxMDAKKworICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IFJlbW92ZSBzdXBlcmZsdW91cyBjYXN0cworCitjb21taXQgMmMyZTFmNDE2MzkzZDQ4NWY5YWM5MGM4N2Y3MjA2NWM2NjhiNzMyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMSAxNTo0ODozNCAyMDEzICswMTAwCisKKyAgICBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBGaXggYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCAxYmM3OTlkZTZjYWIwMTBiMjVjMGM0ZDNmNTE1NWI1ZmJhZjUyN2YwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIxIDIwOjA1OjE0IDIwMTMgKzAxMDAKKworICAgIFB5dGhvbiBiaW5kaW5nczogRml4IHRoZSBvdXQtb2YtYm91bmRzIHdyaXRlCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IDIzNDE1OGI4ZTg0Y2MyMDRjYmFjOTZlNmU5YmU2OTU5NjM1NDA0YjgKKworY29tbWl0IDRmNGVhZWI5MjBhZDE1YzkyOWM2Njc4MmNjMGE2NDI5MTJjYWJkMDYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE3IDEyOjI0OjI2IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogZml4ZWQgSVBBRERSRVNTIHNpemUgb24gNjRiaXQgc3lzdGVtcy4KKworY29tbWl0IDQ4NmYxMWRkZWU5ZjFjMmRkODA1NjQ0OWU5MDMxZTI0Yjg2NDY4NzIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRmViIDIxIDEwOjA2OjEyIDIwMTMgKzAxMDAKKworICAgIEFkZGVkIElFVEYgQlNEIGxpY2Vuc2UgZm9yIE1JQiBmaWxlcy4KKyAgICAKKyAgICBNSUJzIGluY2x1ZGVkIGluIE5ldC1TTk1QIHRha2VuIGZyb20gSUVURiBEb2N1bWVudHMgYXJlIGNvbnNpZGVyZWQKKyAgICBDb2RlIENvbXBvbmVudHMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBJRVRGIFRydXN0IExpY2Vuc2UgUG9saWN5LCBhcyBmb3VuZAorICAgIGhlcmU6CisgICAgCisgICAgaHR0cDovL3RydXN0ZWUuaWV0Zi5vcmcvbGljZW5zZS1pbmZvLworCitjb21taXQgZDI0ZWZiMDQ3NzhkODcwZWZhMjczOTQ5Mzk0OWRiNjVmM2ZkZDRmMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAxMiAyMDo0NDo0NiAyMDEzICswMTAwCisKKyAgICBTb2xhcmlzOiBGaXggZmV0Y2hpbmcgb2YgbGFyZ2UgY2h1bmtzIG9mIGRhdGEgKGxhcmdlciB0aGFuIG9uZSBidWZmZXIpCisgICAgVGhpcyBmaXhlcyBwcm9ibGVtIHdpdGggbWFueSBpbnRlcmZhY2VzLCBidXQgY291bGQgYWxzbyBmaXggb3RoZXIgbGFyZ2UgdGFibGVzLgorCitjb21taXQgNDUwMDFmZDk4YzcyOWRmOWZmMDUzNjI3YzQxNmFiNWYyZTRjNjBmMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiAxMiAyMDozOTo1MCAyMDEzICswMTAwCisKKyAgICBGaXggYnVnIDIyODYsMjQzOTogQm91bmQgYnVmZmVyc2l6ZSBmb3Igc3dydW4gZGF0YSBvbiBGcmVlQlNECisKK2NvbW1pdCA5YmQwNDEzYmZiZGNkODQ1NDEzYzEzNWJiZmY4NzcxZmE3MTMwODA5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiAxMSAxMTo1NzowMSAyMDEzICswMTAwCisKKyAgICBFeHBsaWNpdGx5IGVudW1lcmF0ZSBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgIAorICAgIFRoZSBnZW5lcmljIGNvbmYgYW5kIGxvY2FsLmNvbmYgZXh0ZW5zaW9ucyB3ZXJlIGludGVycHJldGVkIGFzIG15LnNubXAuY29uZiBhbmQgbXkub3RoZXIuc25tcC5sb2NhbC5jb25mIGJ5IHNvbWUgY3VzdG9tZXJzLgorCitjb21taXQgMGJkZDA5ODg5ZDA4MTFmODY0ZGYxMzFiODQ0ZjIwYjAwMzkyMDYyYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEZlYiA3IDAwOjA1OjAzIDIwMTMgKzAxMDAKKworICAgIHNubXBfY2xpZW50LmM6Om5ldHNubXBfcXVlcnlfd2FsazogaGFuZGxlIFNOTVB2MiBleGNlcHRpb24gcmVzdWx0cworCitjb21taXQgODY0YjRhY2E4ZGZhNDgwYTc4Yjc0NWZhZTIwOTFlZGM1MzczYTBjNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiA2IDE2OjAwOjU0IDIwMTMgKzAxMDAKKworICAgIHNubXB0cmFwZDogQWRkIC1YIG9wdGlvbiB0byBkaXNhYmxlIEFnZW50WAorCitjb21taXQgMTEyZjNkNGZhNTM2YjJjNTMxZDA3ODA2NzYxOTg5MTVhMWY1ODE3OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEZlYiA2IDE1OjU5OjUzIDIwMTMgKzAxMDAKKworICAgIHJmY2xpc3Q6IEFkZCBSQlJJREdFLU1JQgorCitjb21taXQgYzBhNjU0OTU5Nzk0N2YyOWMzNmVmYWRiMDQ5MjdmZjY5MDE4OWViYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAzMCAxNTo1MzoxNSAyMDEzICswMTAwCisKKyAgICBSVU5URVNUUzogZG9uJ3QgdHJhcCBvbiBTSUdDSExELiBJdCBjb25mdXNlcyBkYXNoLCBta3NoIGFuZCBtYXliZSBvdGhlciBzaGVsbHMuCisgICAgKGRhc2ggaXMgL2Jpbi9zaCBvbiBVYnVudHUpCisKK2NvbW1pdCBiOTVhYzM4NmU2YzIzNTZhMWVjMjlmMWM0MDliMmVjM2U5MDE1OWMzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDI5IDA4OjU5OjAxIDIwMTMgKzAxMDAKKworICAgIHJmY2xpc3Q6IGFkZCBURUQtTUlCCisKK2NvbW1pdCAyM2JkZjZkMjZmNDMzN2QwN2VhNmU5OTAxYTc3MzhkMTE4NmQxNmQ0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDI5IDA4OjU4OjA3IDIwMTMgKzAxMDAKKworICAgIHNubXBkZjogYWRkIC1DSCBhcyBhbHRlcm5hdGl2ZSB0byAtQ2gKKworY29tbWl0IDQwMjU4ZTljMDYwYWVjYWM2NTU1YWVkZmYzZTcwYmRlN2QyYWI4NDYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMjggMTc6MDU6MDggMjAxMyArMDEwMAorCisgICAgVDA3MmNvbTJzZWN1bml4X3NpbXBsZTogYXdrIHN0cmluZyBpbmRpY2VzIHN0YXJ0IGF0IDEhCisgICAgRml4IHRlc3QgdG8gd29yayB3aXRoIG1hd2sgKGRlZmF1bHQgZm9yIERlYmlhbi9VYnVudHUpCisKK2NvbW1pdCBlMzdmMmI2YmRmZmE3YWZhYTFkYzBiOGFlZTU2NWE0ZGE4MmQ2ZmU0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDI1IDE2OjI0OjEwIDIwMTMgKzAxMDAKKworICAgIHNubXBkZjogQWRkIC1DaCAoaHVtYW4gdW5pdHMpIG9wdGlvbgorCitjb21taXQgN2E0MDdhZDM0NTA1ZWQ0ZGJhYTJlODRlMDZhMWRiZjQ4YzNjNzdlNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyNSAxNToyODo0MyAyMDEzICswMTAwCisKKyAgICBzbm1wZGY6IEhhbmRsZSBTTk1QICh2MmMvdjMpIGV4Y2VwdGlvbnMKKworY29tbWl0IGM3MzljYjM4NzVmYjVkNGNhZDQxMzg2NjFjYzBhNDE3MTM4NGMzNDEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjUgMTA6MTQ6MDIgMjAxMyArMDEwMAorCisgICAgQXBwbHkgcGF0Y2gjMTI0NjogRml4IHBhc3NpbmcgYSBTRVQgb2YgYSBzdHJpbmcgdG8gbm90IGN1dCBpdCBhdAorICAgIGZvdXIgY2hhcmFjdGVycyB0byBhIHBhc3MvcGFzc19wZXJzaXN0IGhlbHBlci4KKworY29tbWl0IDIzNDE1OGI4ZTg0Y2MyMDRjYmFjOTZlNmU5YmU2OTU5NjM1NDA0YjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE3IDEyOjI0OjI2IDIwMTMgKzAxMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogZml4ZWQgSVBBRERSRVNTIHNpemUgb24gNjRiaXQgc3lzdGVtcy4KKworY29tbWl0IDllMGEwZTM1ZDhkMWIzNmZhNDdjZWM5MzhkNmM4NzRkZTAwNzFiYjYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSmFuIDkgMjI6Mzc6NDcgMjAxMyArMDAwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAxMjM5OiBGaXggbWVtb3J5IGxlYWsKKworY29tbWl0IDU1NjA1ZWUzNDUyYWVmNWFhYmU0ZWQxNWE4MzM3NGE5NzcyOGU2NGEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDkgMDk6MjY6NTYgMjAxMyArMDEwMAorCisgICAgRml4ZWQgbWVtb3J5IGxlYWsgb24gZmFpbGVkIHJlYWxsb2MuCisKK2NvbW1pdCBhMzJjYTkzYTliOTE2NzRhOGMxZTg5ZTFhMzgzYTc2MTM2YjhhYzM4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEphbiA4IDE2OjQyOjU0IDIwMTMgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxMjQwOiBGaXggZGVhbGxvY2F0aW9uIG9mIGludGVnZXIgaW5kZXhlcworCitjb21taXQgODc2ODFmMGZiMjg1YTAyMTYzNmUwNmE2ZjIzNTFkNzY0MDllZWJjOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEphbiA1IDE1OjA2OjEyIDIwMTMgKzAxMDAKKworICAgIEF2b2lkIHVzaW5nICJsb2NhbCIgc2luY2UgU29sYXJpcycgL2Jpbi9zaCBkb2VzIG5vdCB1bmRlcnN0YW5kIGl0CisKK2NvbW1pdCA1OWI0ZDQwZjM5NzBiYTgyZjNkZjJhMzk5OTcxMjU0YjA0ODI3NDQzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDQgMTg6MDA6NTMgMjAxMyArMDEwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTWFrZSB3aW5FeHRETEwgd29yayBvbiA2NC1iaXQgV2luZG93cyBzeXN0ZW1zCisKK2NvbW1pdCAzOTU5NzEwNjAzOGY2ZTFjNWVkNDliM2ZjZTAwMjFhNmM1OWVjMWZlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDQgMTg6MDU6MzggMjAxMyArMDEwMAorCisgICAgd2luRXh0RExMOiBBZGQgbW9yZSBkZWJ1Z2dpbmcKKworY29tbWl0IDg1Y2U5MDYyOTExZDMxYjQyZTBjMWUxMzVhYmQzYmRhODEzZTMwMDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNCAxODowMjozMCAyMDEzICswMTAwCisKKyAgICB3aW5FeHRETEw6IEludm9rZSBTbm1wRXh0ZW5zaW9uQ2xvc2UoKSBiZWZvcmUgdW5sb2FkaW5nIGFuIGV4dGVuc2lvbiBhZ2VudAorCitjb21taXQgN2UwMzEyMjk1NDM1NzlkMzdiMDA2Mjk2ZTJmNDQ1NDgyZDA1MTJjYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEphbiA1IDEzOjA0OjAyIDIwMTMgKzAxMDAKKworICAgIHdpbkV4dERMTDogUmVtb3ZlIHNvdXJjZSBmaWxlIHdpbjMyL01nbXRBcGktd2luRXh0RExMLmgKKworY29tbWl0IDJlODk2MjRlNTVlNzM1NTc4NjI1OTRmMWY1MjVmOWRmZmM4Mjc5ODYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gNCAyMjoyNjo0NyAyMDEzICswMTAwCisKKyAgICBTb2xhcmlzIC9iaW4vc2ggZG9lcyBub3QgdW5kZXJzdGFuZCAnbG9jYWwnIGJ1aWx0aW4uCisKK2NvbW1pdCA2MjU3ZGVhNDgyN2U4NWM3YWY4NDVhZTljZGVkNDhkNDRhYTdiYjNkCitBdXRob3I6IEphbiBQb2tvcm7vvoPvvb0gPGpwb2tvcm55QHJlZGhhdC5jb20+CitEYXRlOiAgIFRodSBEZWMgMjAgMTQ6NDU6NDUgMjAxMiArMDEwMAorCisgICAgRml4IGNvbW1lbnQgdHlwb3MgaW4gZXhhbXBsZS5jCisgICAgCisgICAgUGF0Y2ggZnJvbSBQb2tvcm7vvoPvvb0gPGpwb2tvcm55IGF0IHJlZGhhdC5jb20+CisKK2NvbW1pdCA5ZGZjNDRjOTFkN2EyOWE0YzQzZjc3OTA4NWRkZTM0YzVmZTZkNWFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDMgMTA6MzA6MjcgMjAxMyArMDEwMAorCisgICAgTWluR1csIHRlc3QgaGFybmVzczogRml4IGEgbG9nIG1lc3NhZ2UKKworY29tbWl0IDFkMDk5YzdiOTE5ZWYyNWVmYTAzYzE0YWE3N2NjYmVjOGU1YmIwMDkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gMyAxMDoyNDo0OCAyMDEzICswMTAwCisKKyAgICBhcHBzL2FnZW50eHRyYXAuYywgV2luZG93czogRml4IHVzYWdlIHRleHQKKworY29tbWl0IGYwMjFlNmZkNGJjMmFjYjZmZmFjMzM5ZDNmMzhlNGMxNWJiNWJkN2QKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMSAxNzo1MzoxNiAyMDEzICswMTAwCisKKyAgICBNaW5HVzogVXBkYXRlIHRlc3QgaGFybmVzcy4gSW5zdGFsbGF0aW9uIG9mIHBzbGlzdC5leGUgaXMgbm93IHJlcXVpcmVkLgorCitjb21taXQgNGJjM2MwNTQ3ZTBiMzNlZWE3MWYzYzFhMDllZmRkNTk2OWQ3ZTI3OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIERlYyAzMSAxNzoyNDozMyAyMDEyICswMTAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogRW5hYmxlIGluIE1TVkMgYmF0Y2ggYnVpbGQKKworY29tbWl0IGU5ZWZiMjAwOTU0NjhlNjQxNTdiODRmMThiNmNjZDk5MWUxMDgyZTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMSAxNTowNDozNyAyMDEzICswMTAwCisKKyAgICBXaW5kb3dzOiBMaW5rIHdpdGggc25tcGFwaS5saWIgYW5kIG1nbXRhcGkubGliIGV2ZW4gaWYgbm90IHVzaW5nIHRoZSBwbGF0Zm9ybSBTREsKKworY29tbWl0IDkwMGFhZThlYTY5M2ZiODQwZDU3NTI2ZmI2NzFkMjE1Zjg2NWJlZGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMSAwMTozMzowMSAyMDEzIC0wODAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogRml4IGFuIE1TVkMgY29tcGlsZXIgd2FybmluZworCitjb21taXQgMzYzZTNmYTFhNDNjYTYyMjNmZTNiMDgwOGU2NjI5NWIzZDkzODZiOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxIDAxOjI3OjQyIDIwMTMgLTA4MDAKKworICAgIHVjZC1zbm1wL2RsbW9kOiBBZGQgZGxtb2QuYyB0byBNU1ZDIHByb2plY3QKKworY29tbWl0IGUzNTQyYzA0YTg0NjE3ODU3Njg4YWI4ZTg3MThjZGM0YzZhNjhjZjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMSAwOToxNDozMyAyMDEzICswMTAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogUmVtb3ZlIG1vcmUgc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IDFlM2IwYWUyYjAyY2YxZmFjY2FkNDg5NmJjM2JkYmVhMWRiNGE2OGYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBEZWMgMzEgMTM6MTk6MzYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogUG9ydGVkIHVjZC1zbm1wL2RsbW9kIHRvIE1pbkdXIC8gTVNWQworCitjb21taXQgOTg2ZmI5Yjg1ZTEzODNiODFlYWVhNDBkMmNiN2MxNDQ5MmRkYmRhYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIERlYyAzMSAxMjozMjo1NiAyMDEyICswMTAwCisKKyAgICBNaW5HVzogQXZvaWQgY29uZnVzaW9uIGJldHdlZW4gTWluR1cncyBraWxsLmV4ZSBhbmQgdGhlIFN5c0ludGVybmFscyBwc2tpbGwuZXhlIChiYWNrcG9ydCBjb21taXQgOWI0MjdiMzUzZjFjZWI4ZmU4N2U2ZmM4ZWQzYjZjZmFiM2NlN2YyMCkKKworY29tbWl0IDc5OGI3M2NmNTllMzY4N2Y2NWJkNTRhN2E4YWMyOWZlMjQ5OGM2OWYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMTcgMTM6MDU6NTMgMjAwOSArMDAwMAorCisgICAgVW5icmVhayB0aGUgTWluR1cgYnVpbGQgZm9yIHRoZSA1LjQgYnJhbmNoIC0gdGltZXJhZGQoKSBpcyBub3QgQU5TSSBDCisgICAgCisgICAgUmVtb3ZlIERJRkZUSU1FVkFMKCkgYmVjYXVzZSBpdCdzIGJ1Z2d5OiBpbiAiZGlmZi50dl91c2VjID4gMTAwMDAwMEwiIHRoZSAiPiIKKyAgICBzaG91bGQgaGF2ZSBiZWVuICI+PSIgaW5zdGVhZC4KKyAgICAKKyAgICBUaGlzIGlzIGEgcGFydGlhbCBiYWNrcG9ydCBvZiBjb21taXQgODU4NTA5YzllMTk5OGY2ZDI2ZTkwY2I2MjJlNGIxN2ViMjQ4OGE0Zi4KKworY29tbWl0IDFlNTU2Y2M3NzQwYzA2MzY3ZmYzMzYxYWE5NmJmNDUzMzljMmU4YTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMzAgMTc6NTk6NDQgMjAxMiArMDEwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IFJlbW92ZSBzdXBlcmZsdW91cyBjYXN0cworCitjb21taXQgNTFkZmE2ZTY3ZmQ4NDg3Yjg4ODJjMTYzMmU4MTExOTVkOTQ5NmU0MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIERlYyAzMCAxMDo0MjoxNiAyMDEyICswMTAwCisKKyAgICB1Y2Qtc25tcC9kbG1vZDogTWVudGlvbiBsaWJyYXJ5IHBhdGggaW4gZXJyb3IgbWVzc2FnZXMKKworY29tbWl0IDAyYTM1N2Q2Yjk1MzhhNDg4OTYzNjg5MDBiYmI1OTNkYmI0ZGMzNzQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBEZWMgMzAgMTA6NDA6NTUgMjAxMiArMDEwMAorCisgICAgdWNkLXNubXAvZGxtb2Q6IFJlbW92ZSBhIHN1cGVyZmx1b3VzIGluaXRpYWxpemVyCisKK2NvbW1pdCBlZjc0ODg0NWIxNGMwOTUwNDllZDU0ODAzZWE3NGNmNDU3ZWZkMTg5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gRGVjIDMwIDA5OjU3OjM4IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IEZpeCBlbnZpcm9ubWVudCBzZXBhcmF0b3IgaW4gc25tcGQvc25tcHRyYXBkL3NubXB0cmFuc2xhdGUgaGVscCB0ZXh0LiBSZXBvcnRlZCBieSBKYXNvbiBNY0NvbGx1bSA8am1jY29sbHVtQGNvbXRlY2hlZmRhdGEuY29tPi4KKworY29tbWl0IGJjMGFiYWU1NWRkODY3ZGJiZjRlNDJlNjdhMzYyMzQwODhjOTM3NzEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMiAwOToyNTozMyAyMDEzIC0wODAwCisKKyAgICBjb3B5cmlnaHQgdXBkYXRlCisKK2NvbW1pdCA0MDg2YWY5NWIyOThmMWNmMTMwZDA4ZGViN2UwOTAwNThiMzIxYWY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIwIDA3OjM3OjE0IDIwMTIgKzAxMDAKKworICAgIEZpeCB0aGUgTUlCIG5hbWVzIHRvIGFjdHVhbGx5IHdvcmsKKworY29tbWl0IDc5NTI3NGZjMjFlMWJhMDNlZmJlOWI2MDQyYzZhMzUxM2Q4OWRlYmYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjAgMDc6MjQ6NDcgMjAxMiArMDEwMAorCisgICAgQ2xlYW4gdXAgYW5kIHZhbHVlIGNoZWNraW5nIGZvciBpcERlZmF1bHRUVEwsIGlwdjZJcERlZmF1bHRIb3BMaW1pdAorCitjb21taXQgNDM5ZDUwYzY3OWU5ZjA5YjEwNmJmZGY2NGY4Y2M3NjY0MTllMTM0NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMCAwNzoyNDoxNiAyMDEyICswMTAwCisKKyAgICBGaXggaWNtcE1zZ1N0YXRzVGFibGUgZm9yIFNvbGFyaXMKKworY29tbWl0IDAwN2E3ZDI0YmM1ZjI3OTM5MmZkMGVjNDM2MTQ3N2NkOGYxNGU1YWYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMTkgMjI6MTQ6MDYgMjAxMiArMDEwMAorCisgICAgZ2l0IGlnbm9yZSB0aWxkZSBmaWxlcworCitjb21taXQgYWZmMDJmMjRlMTk4YTI5MjMxMjczZDQ5NDgyMGRkNmUzNTQxNTVjYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIERlYyAxNyAyMjo0NDoxOCAyMDEyICswMTAwCisKKyAgICBSdW5uaW5nIGF1dG9oZWFkZXIvYXV0b2NvbmYKKworY29tbWl0IDljZmQ2ODBmMmYyZjQ1Y2Y3NmNkNDIxNjY5M2I4NjJmYWEyN2NiYzEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBEZWMgMTcgMjI6NDI6MDAgMjAxMiArMDEwMAorCisgICAgQ29uZmlnIGNoZWNrIGZvciBCU0QgdWRwc3RhdC51ZHBzX2lwYWNrZXRzCisKK2NvbW1pdCA1M2MyZmRkNWI2NjAyMTE0NGFkMjY1MzliNTNiZTljMTU5M2I0ODg0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRGVjIDE3IDIyOjI3OjAzIDIwMTIgKzAxMDAKKworICAgIEFkZCBTRCBzdXBwb3J0IGZvciBpcC1mb3J3YXJkLW1pYgorCitjb21taXQgY2E3YjE3YTQxZDRkMTZiZDI3YWFjZjkyMTE2YmVhMzU2MmVlZWEzNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBEZWMgMTcgMTI6NDA6MzIgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHVzZSBjYWNoZSBmb3IgZHNrVGFibGUgdG8gc3BlZWQgaXQgdXAuCisgICAgCisgICAgVUNELVNOTVA6OmRza1RhYmxlIHdhcyBzbG93IG9uIE5GUyBtb3VudHMuIE5vdyBpdCB1c2VzIGZzeXMgY2FjaGUKKyAgICB0byByZWxvYWQgbW91bnRzIGV2ZXJ5IDUgc2Vjb25kcy4KKworY29tbWl0IDBiNzE4MTg0ZTA3MGQyNTc0YzA5YjE4ZjU2ODk1MGE4YzlmZjc2NTkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTYgMjA6NTc6MjkgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYXBwczogU3RvcCB1c2luZyBzbm1wX3BlcnJvciB3aGVuIGxvZ2dpbmcgYWZ0ZXIgZnVuY3Rpb25zIHRoYXQgZG9uJ3Qgc2V0IHNubXBfZXJybm8uCisKK2NvbW1pdCA3ZWRjZTBjMzExYTdkZDU0MjhlMGVkYjcwMWRhYmU5ZGM3OWQwOTY3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRGVjIDE1IDEyOjQwOjEwIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIHRoZSAtd2l0aG91dCBvcHRpb25zIHRvIHJwbWJ1aWxkIHdvcmsKKworY29tbWl0IGM2MDM3NTQ4ZmI0YjQ3OTk2MzMwZmUxYmMxZTgyNjVhY2VhNWRkNTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBEZWMgMTAgMDA6NDE6NDIgMjAxMiArMDEwMAorCisgICAgVGhlIHByb3BlciByb3V0ZXIgZmlsZXMgZm9yIEJTRAorCitjb21taXQgMmIzNTllNDUwOTg2YmI4NzQ0YmJmZjIxZTBjYWI0OTNhY2FjZWE5OAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIERlYyA5IDIzOjAyOjAyIDIwMTIgKzAxMDAKKworICAgIFN1cHBvcnQgZm9yIGlwU3lzdGVtU3RhdHNUYWJsZSBmb3IgKkJTRC4gTW9zdCBvZiB0aGUgY29kZSBieSBHYXJyZXR0CisgICAgQ29vcGVyLiBQYXJ0aWFsbHkgZnVuZGVkIGJ5IENpc2NvIElyb25wb3J0LgorCitjb21taXQgOWEwNDQxMjhlOGIzMzE3OTYyMjExNjYzNTg3NjllYjA1MzVkZmMxZgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIERlYyA5IDIyOjM2OjIxIDIwMTIgKzAxMDAKKworICAgIFN1cHBvcnQgZm9yIGlwTmV0VG9NZWRpYVRhYmxlIGZvciAqQlNELiBNb3N0IG9mIHRoZSBjb2RlIGJ5IEdhcnJldHQgQ29vcGVyLgorICAgIFBhcnRpYWxseSBmdW5kZWQgYnkgQ2lzY28gSXJvbnBvcnQuCisKK2NvbW1pdCBmOWNiMjk4ZGQyMGVmNmQ0YmM2ODNjZTA2N2YyMzMwNzM3YmU0ZTA5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gRGVjIDkgMjI6MTc6MjIgMjAxMiArMDEwMAorCisgICAgU3VwcG9ydCBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUgZm9yICpCU0QuIE1vc3Qgb2YgdGhlIGNvZGUgYnkgR2FycmV0dAorICAgIENvb3Blci4gUGFydGlhbGx5IGZ1bmRlZCBieSBDaXNjbyBJcm9ucG9ydC4KKworY29tbWl0IDFkZWU0MTU2MmM1NGUwYjU0YjMwMWEzNzgzOGIzYmE2NTA5ZGNjMzgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBEZWMgOSAyMTo1NDoxNCAyMDEyICswMTAwCisKKyAgICBTdXBwb3J0IGZvciBpcFN5c3RlbVN0YXRzVGFibGUgZm9yICpCU0QuIE1vc3Qgb2YgdGhlIGNvZGUgYnkgR2FycmV0dCBDb29wZXIuCisgICAgUGFydGlhbGx5IGZ1bmRlZCBieSBDaXNjbyBJcm9ucG9ydC4KKworY29tbWl0IDNkYmFiYzk3MDY4YjZjNjkwYjNmZGY5N2I1YWIzYWUwZDllYWIyOGMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBEZWMgOSAyMTo0Nzo0NSAyMDEyICswMTAwCisKKyAgICBDaGFuZ2Ugc29tZSBkZWJ1ZyBvdXRwdXQgaW50byBlcnJvciBsb2dnaW5nLiBGYWlsdXJlIHRvIGV4cGFuZCAzMiB0byA2NAorICAgIElTIGFuIGVycm9yLgorCitjb21taXQgOTA3MzYwZTA5ZmZmMzM5MGQ2MjY5ZjhjYjQ3NDBiZGJjZDk1ODE2NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIERlYyA5IDIxOjQ1OjQ0IDIwMTIgKzAxMDAKKworICAgIEZpeCBzb21lIGxhYmVscyBmb3IgbmV0c3RhdCBpY21wIG91dHB1dC4KKworY29tbWl0IDlmMmYwNTQwNWM3YmI0OTllYmUwODM5YjBkNzliYTI1YzYxYzBmNTUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOTo0OTo1MSAyMDEyICswMTAwCisKKyAgICBSdW5uaW5nIGF1dG9jb25mCisKK2NvbW1pdCBkMjdmMzY0NTI1ODNkMjkxZjI1NWVmMDkwZTJhZWFlYWYzOWE5ZTBlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6NDk6MDIgMjAxMiArMDEwMAorCisgICAgUnVubmluZyBhdXRvY29uZgorCitjb21taXQgNTYzNTJjMmViZTk1NDFmNmFiZjlkMmI5ZWJjNDcwNWQ4MThkODliOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIERlYyA3IDA5OjQ4OjIxIDIwMTIgKzAxMDAKKworICAgIFJ1bm5pbmcgYXV0b2NvbmYKKworY29tbWl0IDM5NzkyM2UwYWFlMTM4NWEwYWYzYTgwM2U2MGViZTgxMjRmOTYxZDIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOToyNjoyMSAyMDEyICswMTAwCisKKyAgICBGaXhlcyBmb3IgY29uZmlndXJlIG9mIGtzbSBtb2R1bGUuIFByZXZpb3VzbHkga3NtIGhhZCB0byBiZSB0aGUKKyAgICBmaXJzdCBzZWN1cml0eSBtb2R1bGUgaW4gbGlzdCB0byBiZSBpbmNsdWRlZC4KKworY29tbWl0IDQzMGQxMGQyOTZiOGQ4Yzk4YTNhYWZkMjdhOGM2ZmY0ZjY0MDgxMTQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOToyNDozOSAyMDEyICswMTAwCisKKyAgICBGaXggc3BlbGluZyB3aGljaCBoYXMgcHJldmVudGVkIGtzbSBtb2R1bGUgZnJvbSBjb21waWxpbmcgZm9yIG1hbnkgeWVhcnMgOi0oCisgICAgQWxzbyBzb21lIGZpeGVzIHRvIHN1cHBvcnQgSGVpbWRhbCBLZXJiZXJvcy4gVGhpcyBzdXBwb3J0cyBGcmVlL05ldEJTRC4KKworY29tbWl0IGJmZjgzMmFiMjQ4ZTA4NjI4YmU0NmViZjc2MTExOTExZTdmMzllNTIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBEZWMgNyAwOToxNzoyMiAyMDEyICswMTAwCisKKyAgICBBZGFwdCBmb3IgbG9uZ2VyIGxpbmVzIGZyb20gL3Byb2MvbmV0L3RjcDYuIEFuZCBpc3N1ZSBhbiBlcnJvciBpZgorICAgIGl0IGhhcHBlbnMgdG8gZmFpbCBhZ2Fpbi4gUGF0Y2ggZnJvbSBidWcgIzI0MjUgKFRoYW5rcyBaaGl4dSBMaXUpCisKK2NvbW1pdCA5Njg3ZTRkNTA3ODFiYTAxNjg0MTZmMTVjNGYyZDlmYzgzNzEwNTBhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6MTU6NDggMjAxMiArMDEwMAorCisgICAgaWNtcCBzdXBwb3J0IGZpbGVzIGZvciAqQlNEIChleGNlcHROZXRCU0QpCisKK2NvbW1pdCBmMjE1YmExZTM3YThjM2UwNzY5NThlZmQ4M2MwZjVkMzkzYTE0YzIyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgRGVjIDcgMDk6MTM6MjQgMjAxMiArMDEwMAorCisgICAgU3VwcG9ydCBmb3IgaWNtcFN0YXRzVGFibGUvaWNtcE1zZ1N0YXRzVGFibGUgZm9yICpCU0QgYW5kIFNvbGFyaXMKKworY29tbWl0IGE3YjdjM2MwYzNiZTNmNmNmMmQwOWY2NDcwZDNmYTA4NjE1M2QwMzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMzAgMTU6MzU6MzMgMjAxMiArMDEwMAorCisgICAgU2h1ZmZsZSBpbiBwcmVwYXJhdGlvbiBmb3IgYnJvYWRlciBzdXBwb3J0IGZvciBpY21wU3RhdHMvaWNtcE1zZ1N0YXRzCisKK2NvbW1pdCBiZDI5NmFjMTg0MjM1MDNlZGE4ZWZmZWI4NmFmYjE5ZTAwMTQzODg5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDMwIDE1OjM0OjUyIDIwMTIgKzAxMDAKKworICAgIFNodWZmbGUgaW4gcHJlcGFyYXRpb24gZm9yIGJyb2FkZXIgc3VwcG9ydCBmb3IgaWNtcFN0YXRzL2ljbXBNc2dTdGF0cworCitjb21taXQgMmUyM2VhMGYyOTNiYjhlOWNlYWY1NjM2ZGI3YjdkMDdmNmQ2MmM3YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE5vdiAyMCAyMzozMzo1OCAyMDEyICswMTAwCisKKyAgICBBZGQgbWlzc2luZyBzc0lPUmF3U2VudC9yZWNlaXZlZCBmb3IgU29sYXJpcy4KKworY29tbWl0IDU5ZWViYzQxYTk0MzU4MTEwNzNmZWM1MGQ3NmRkNmFlZjlkZDU4YTcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBOb3YgMjAgMjM6MzI6NTMgMjAxMiArMDEwMAorCisgICAgQWRkIHNvbWUgZXJyb3IgY2hlY2tpbmcgdG8gZ2l0dG9vbHMKKworY29tbWl0IDgwYjE4Mzc1ODI2NjUzNjI2YzJkNzA0NTFjMmI1NGExYzUwYTNjZTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBOb3YgMTMgMTM6NTU6NDcgMjAxMiArMDEwMAorCisgICAgUmVtZW1iZXIgdG8gaW5pdCB0aGUgc3lzdGVtc3RhdHMgcHJvdmlkZXIKKworY29tbWl0IDc0M2NiNjY3MTg5MDQ5NzlmNTU4OTU0NzI1MDE1ODRjMzBjNjZmMTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQ5OjE1IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGNyYXNoIHdoZW4gTUQ1IGFuZC9vciBTSEEtMSBoYXNoIGlzIG5vdCBzdXBwb3J0ZWQgYnkgT3BlblNTTC4KKworY29tbWl0IDE4OThjZmM3MWJkYjNmNGExNjg1YzZkMjFiNTRkZDFhMzQ4MjU5MWMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDg6MTUgMjAxMiArMDEwMAorCisgICAgT3BlbkJTRCA1LjIgc3VwcG9ydC4KKworY29tbWl0IGRkNTNmZmJhZmViMzFjZGU2MTZhODk5NDllNzBlM2Q1ZmUwY2MxYjMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQ2OjQzIDIwMTIgKzAxMDAKKworICAgIEZhbGwgYmFjayB0byBTSEEtMSBpZiBNRDUgaXMgbm90IGF2YWlsYWJsZS4KKyAgICAKKyAgICBPbiBwYXJhbm9pZCBzeXN0ZW1zIHdoZXJlIE1ENSBpcyBkaXNhYmxlZCB1c2UgU0hBLTEgaW5zdGVhZCBvZiBNRDUgYW5kIGRvbid0IGNyYXNoLgorCitjb21taXQgZWE4Zjc0YzgxZjgyYzEwNWI5ZmMwMTk2NWFkY2UxNGIwZDgxODZkYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxMiAxNTo0NjozNCAyMDEyICswMTAwCisKKyAgICBGaXggTmV0QlNEIG1lbW9yeSBkYXRhIHR5cGluZworCitjb21taXQgZGRlM2EzNWJhYWViNjgzY2YxNDQxYTE2YTE1NDQxZjhiNDU2YzUyMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDU6MjcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgY3Jhc2ggd2hlbiBNRDUgaGFzaCBpcyBub3Qgc3VwcG9ydGVkIGJ5IE9wZW5TU0wuCisKK2NvbW1pdCBiNzdiNjdkOGQ2MjlmNzg1NjM5ZTQwMmZhNGZiZWU2Y2NmZTE4ZmE1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDE1OjQ0OjQ5IDIwMTIgKzAxMDAKKworICAgIEtlcm5lbCBwcm9jZXNzZXMgaW4gRHJhZ29uRmx5LCBhbmQgZml4ZWQgY3B1IHVzYWdlIGRhdGEKKworY29tbWl0IGQ2YzYyMDEyYzgwODJmYzg4NmY3NDdlMGUyYzliYjhhNmM2NmM2NjMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMTIgMTU6NDE6NTUgMjAxMiArMDEwMAorCisgICAgRGlza2lvIGZvciBPcGVuQlNELCBhbmQgc29tZSBjbGVhbi11cCBmb3IgRnJlZUJTRC9EcmFnb25GbHkKKworY29tbWl0IDRhNWUwZjRjOTVmYjZjZDEyM2E0OTAxNzg3Mzc2ZTQ0N2QzMzJjMDIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDkgMTQ6MjM6NDggMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogYWRkZWQgc2ltZnMgKE9wZW5WWiBmaWxlc3lzdGVtKSB0byBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlLgorCitjb21taXQgMmEwY2QzNWFjZjMzMjVhNmZkYzBhMTA0MjNmNTRjYjhiNWNlNTIyYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBTZXAgMTMgMTU6MjU6NTIgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGluZmluaXRlIGxvb3Agd2hlbiBTSUdURU0gYXJyaXZlcyBpbiBtaWRkbGUgb2YgaW50ZXJuYWwgcXVlcnkgcHJvY2Vzc2luZy4KKyAgICAKKyAgICBXaGVuIHNubXBkIHN0YXJ0cyBpbnRlcm5hbCBxdWVyeSwgZS5nLiBmb3IgJ21vbml0b3InIGNvbmZpZyBvcHRpb25zLCBpdCBjYWxscworICAgIG5ldHNubXBfcXVlcnlfd2FsaygpLiBUaGlzIGZ1bmN0aW9uIGxvb3BzIHVudGlsIGVpdGhlciBlcnJvciBvY2N1cnMgb3IgdGhlCisgICAgaW50ZXJuYWwgcmVxdWVzdCBpcyBwcm9jZXNzZWQuIEFuZCBpZiBTSUdURVJNIGNvbWVzIHRvIHRoaXMgbG9vcCwgdGhlIHJlcXVlc3QKKyAgICBpcyBub3QgbWFya2VkIGFzIGZhaWxlZC4KKyAgICAKKyAgICBQYXRjaCBvcmlnaW5hbGx5IGZyb20gTWFzYWhpcm8gTWF0c3V5YSwgbW1hdHN1eWEgW2F0XSByZWRoYXQuY29tCisKK2NvbW1pdCBiYzQ0OWMwZjg1YWU5ZmEwOGFjNGZjZTY3MjgyZjQ4ZWI3YWIxOTg0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxMCAxMzoyNTozOCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgdmFsdWUgb2YgVUNELVNOTVAtTUlCOjpleHRDb21tYW5kIHRvIGNvbnRhaW4gZnVsbCBjb21tYW5kIGxpbmUuCisgICAgCisgICAgTUlCIGRlc2NyaXB0aW9uIG9mIFVDRC1TTk1QLU1JQjo6ZXh0Q29tbWFuZCBzdWdnZXN0cyBpdCBzaG91bGQgY29udGFpbCBmdWxsIGNvbW1hbmQgbGluZS4KKyAgICBBbHNvIGluIE5ldC1TTk1QIDUuMy4yLjIsIHdob2xlIGNvbW1hbmQgbGluZSB3YXMgc2hvd24uCisKK2NvbW1pdCBhMzk3OGYyY2MyMDU2Yzk3YTRjM2YzMzhmNzA5YTIwMjkxYWVkNDcyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDEyIDA2OjQ4OjM3IDIwMTIgKzAxMDAKKworICAgIFByb3BlciBoYW5kbGluZyBvZiBjb25maWd1cmUtZ2VuZXJhdGVkIHNubXBjb25mCisKK2NvbW1pdCAwZjQ2OTkyOTI0ZGU1YTRhYjA3NjNhOGQ0NGExY2VjZTRhOTkxZDgwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDUgMjE6MTY6MzcgMjAxMiArMDEwMAorCisgICAgUGF0Y2ggZm9yIE9wZW5CU0QgNS4yIChQYXRjaCAzNTU5NDIwKQorCitjb21taXQgOWVkMGIyZTBhYzBjOGU1NDliOGY5YTU4NDVlOWQxZmFhY2FiNzNjNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiA1IDIwOjA4OjQxIDIwMTIgKzAxMDAKKworICAgIHJmYzY3NzkKKworY29tbWl0IGFlZjc2Y2EwY2JhMmNhNTZmNmFhMWRiNWM1YjU4YTU0OTM5ZjM4OWIKK0F1dGhvcjogcXFzaGthIDxxcXNoa2FAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDMxIDIwOjAwOjA0IDIwMTIgKzAxMDAKKworICAgIEFnZW50WCwgSVBYOiBSZXN0b3JlIGRlZmF1bHQgcG9ydCAoYnVnICMzNTgyMjgzKS4KKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDdiOWUwMzQ0MWMzZGMzYTA3NjcwZWQwMWY1ZDA0NzkxYTgyYzc1MGMuCisKK2NvbW1pdCBkN2Q5OGU1YWE5ZWU4Y2E3OTE4Yjc2NzUwNDNkNDc5Y2Y3N2I4M2M0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDEgMTA6MzM6MDYgMjAxMSArMDIwMAorCisgICAgLmdpdGlnbm9yZTogQWRkIGxvY2FsL3NubXBjb25mCisKK2NvbW1pdCA3MWQ4M2JhNDExN2EyY2ZiNzg3NGU5MTgzMmU0NTk3M2RhNDJlZTk4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDEgMTA6MzQ6MzAgMjAxMSArMDIwMAorCisgICAgV2luMzIsIE1TVkM6IE1ha2UgYnVpbGQuYmF0IHdvcmsgYWdhaW4gbm93IHRoYXQgRU5WX1NFUEFSQVRPUiBpcyBjb25maWd1cmFibGUKKworY29tbWl0IDVlNTAwMDgyNzI4ZjQ1MzU5NWY1MDI0ZDI0MTIwOGM1MWYwOGQyMmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMjkgMTg6MTI6NDEgMjAxMiArMDEwMAorCisgICAgUkVBRE1FLndpbjMyOiBSZW1vdmUgcmVmZXJlbmNlIHRvIHRoZSBubyBsb25nZXIgc3VwcG9ydGVkIEN5Z3dpbiBjb21waWxlciBvcHRpb24gLS1tbm8tY3lnd2luCisKK2NvbW1pdCAxYTM2ZGVlMTY1YjhiZDdkZjNlZjY5NGI3YzNmMjYyMWE1NDQ5ZGFhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgQXVnIDMwIDIwOjU0OjAwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkLCBzbm1wdHJhcGQgYW5kIGFwcHM6IE1ha2UgRU5WX1NFUEFSQVRPUl9DSEFSIGNvbmZpZ3VyYWJsZQorCitjb21taXQgMGUxY2E0NWE2ZjhkOGFjZjQ0YWEyMWEwMDlhOWU1MTE5MmU4NDc4MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIE9jdCAyOCAxMDoxMToyMiAyMDEyIC0wNzAwCisKKyAgICBzbm1wbmV0c3RhdDogRml4IE1TVkMgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IDRhNmQwMzc4YTM5MTY1NzFjZTc2MDRjNGEzZDU0YThjOTZhOGY4MDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBPY3QgMjggMDk6NTQ6MTIgMjAxMiAtMDcwMAorCisgICAgV2luZG93czogVmlzdWFsIFN0dWRpbyA2IGJ1aWxkIGZpeCBmb3Igc3RybGNhdCgpCisKK2NvbW1pdCA0MWI0OGE2MzcwOTUyYmY0YjEyZDM0ZmIwNWVjNTVmYjA3MDJlOGNmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gT2N0IDI4IDE0OjM3OjUyIDIwMTIgKzAxMDAKKworICAgIFdpbmRvd3M6IE1ha2Ugc25tcG5ldHN0YXQgYnVpbGQgYWdhaW4KKworY29tbWl0IDI0NTFmODI2NDc5ODgxYTQ5MjZmY2Y4ODg1NWY1ODI1ODVlYjgxM2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBPY3QgMjggMTA6MjM6MTcgMjAxMiArMDEwMAorCisgICAgd2luMzIvYnVpbGQucGw6IFJlZHVjZSBjb2RlIHJlZHVuZGFuY3kKKworY29tbWl0IDZlOTkzODg2ODNhNmM4NTQwMzVmMDQyYTlkMDdjMDcyMzExN2U4YTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBPY3QgMjggMDk6NDE6MjAgMjAxMiArMDEwMAorCisgICAgV2luZG93cywgYmF0Y2ggYnVpbGQ6IFJlbW92ZSB0aGUgb2Jzb2xldGUgdmFyaWFibGUgIlNTTCIKKworY29tbWl0IDc1NDRhZGM1YTFjNzY4ODllNGE5ZWQ1MWU5NmQyMmQwMmZkNTY5NWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMjIgMTU6MzU6MDQgMjAxMiArMDAwMAorCisgICAgTkVXUzogV2luZG93czogUG9ydCBiYXRjaCBidWlsZCBpbmZyYXN0cnVjdHVyZSB0byBWaXN1YWwgU3R1ZGlvIDIwMTAgYW5kIGxhdGVyCisgICAgCisgICAgRnJvbSBWaXN1YWwgU3R1ZGlvIDIwMTAgb24gaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHNwZWNpZnkKKyAgICBpbmNsdWRlIG9yIGxpYnJhcnkgZGlyZWN0b3JpZXMgZ2xvYmFsbHkgLSB0aGVzZSBoYXZlIHRvIGJlIHNwZWNpZmllZAorICAgIHBlciBwcm9qZWN0LiBIZW5jZSB0d28gYWRkaXRpb25hbCBtZW51IGVudHJpZXMgaW4gYnVpbGQuYmF0IHRoYXQKKyAgICBhbGxvdyB0byBzcGVjaWZ5IHRoZXNlIGRpcmVjdG9yaWVzLgorCitjb21taXQgMWI4YTc5YzFjMmViMTNmOGIyMDdjMTJhYTZlNzFhMjlmZjAwMzk2ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAyMiAxOToxMDowNyAyMDEyICswMDAwCisKKyAgICB3aW4zMi9Db25maWd1cmU6IEZhY3RvciBvdXQgY29tbW9uIGNvZGUKKworY29tbWl0IDJhZjdhNzNiMGNhOGNkYmQzNmE3ZjE5ZGQ4ZTU1NzY0Yzg0OTg1NTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBPY3QgMjcgMTg6Mjc6NDIgMjAxMiArMDIwMAorCisgICAgV2luZG93czogTWFrZSBzbm1wbmV0c3RhdCBidWlsZCBhZ2FpbiAoc2VlIGFsc28gY29tbWl0IGFhNTkxMmI4OTg2Y2RlNzQwOTBiYTE1YmUxOTY0MjYzMDlhMWUxZjApCisKK2NvbW1pdCBmYTk4YjRjYmQ2ZGMxNWFhOTI2MTY2ZWVmMDRkNWJjOGRmYmFhYWQ2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgT2N0IDI2IDA3OjU2OjA2IDIwMTIgKzAyMDAKKworICAgIENvcGUgd2l0aCBhZGRpdGlvbmFsIHN0YXRpc3RpY3MgaW4gL3Byb2MvbmV0L3NjdHAvc25tcCBpbiBSSDYKKworY29tbWl0IDU0MjkwYmVkZTMzODE2NGNhNjVhM2VlZDIyNGZhNTA0MGQ3ZGQ4NTcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBPY3QgMjYgMDc6NTA6MTEgMjAxMiArMDIwMAorCisgICAgQmV0dGVyIGNsZWFudXAgb2YgImV4ZWMiIGNvbmZpZyB0byBhdm9pZCBjcmFzaCBkdXJpbmcgcmVsb2FkIG9mIGNvbmZpZworCitjb21taXQgODJhYTI0NjY3MTE5NGYwNGJlNTJjNjIxZTlmODNkMGZhYmQyNGZhNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNCAxNTozMDoxMSAyMDEyICswMjAwCisKKyAgICBEb24ndCBtaXggY29kZSBhbmQgZGVjbGFyYXRpb25zIQorCitjb21taXQgNGU5ZWE4NDU1OTJmZmY4YjJhYWU1ZDMxOGRjYWJmNDFmOTU3MDYzMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNCAxNToyNTozNSAyMDEyICswMjAwCisKKyAgICBEb24ndCBtaXggY29kZSBhbmQgZGVjbGFyYXRpb25zIQorCitjb21taXQgMjFkNWM2Nzg1ZTkxNmI1MTAxNDQwZWQxYTRmNzFiNDFiYTJlYjgwOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNCAwOToyNzoyMyAyMDEyICswMjAwCisKKyAgICBSZW1lbWJlciB0byBmcmVlIHRoZSBkZXNjcmlwdGlvbiAoaWYgc2F2ZWQpIGR1cmluZyB1bmxvYWRfYWxsX21pYnMKKyAgICAocGF0Y2ggMzU2NTkyMikKKworY29tbWl0IDJiOTk0MGNhNTZmYzhkM2Q2MTBlZmQyZWJhOWFlNGViYjc0MWU2NzEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMjQgMDY6NDE6NDYgMjAxMiArMDIwMAorCisgICAgQ2xlYW4gdXAgZGlza2lvIGNvbmZpZyBiZWZvcmUgcmVsb2FkaW5nLgorCitjb21taXQgZjc3NjhmYjY0M2JlMjgyZDYzNTI4OWI1N2Y4OGEwN2QwNzA0ODdiMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE9jdCAyMyAxMTo0ODozMSAyMDEyICswMjAwCisKKyAgICBhcHBzL3NubXBuZXRzdGF0L2luZXR4LmM6IEVsaW1pbmF0ZSBkZWFkIGNvZGUgKHNlZSBhbHNvIGNvbW1pdCBhYTU5MTJiOCkKKworY29tbWl0IDY0YzU2ZjI3YzVlZDQzMmNlOGRlNDRlMjU3OWNhMGM4MDZhNTE3ZWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMjIgMTc6NDU6MTkgMjAxMiArMDAwMAorCisgICAgYnVpbGQucGw6IEVsaW1pbmF0ZSBhIHRlbXBvcmFyeSB2YXJpYWJsZQorCitjb21taXQgMzBhNWQwMTNhODBlOWZkNTBiOGZkMGY3MGZmZDk2ZmYyNmI2ZTQ1NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAyMDoyOTowOSAyMDEyICswMjAwCisKKyAgICBVcGRhdGUgdG8gY3VycmVudCBJQU5BIHZlcnNpb24KKworY29tbWl0IGY0MGQ0NDA2ODkwNjdlZjZjNGRhN2RkYWRmYjM3M2E0NTIxOTdmYmQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTk6NDc6MDYgMjAxMiArMDIwMAorCisgICAgd2luMzIvQ29uZmlndXJlOiBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlCisKK2NvbW1pdCBkMzRlMDU3Nzc5Y2IzMmU5NDMyNDA4OWRjNDYyNTYzODMwOWNmZTg5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDIyIDE4OjM2OjU5IDIwMTIgKzAyMDAKKworICAgIHdpbjMyL2J1aWxkLnBsOiBTdHJpcCB0cmFpbGluZyB3aGl0ZXNwYWNlCisKK2NvbW1pdCAzMGRhZWYxODYwMzk3ZjA0NWM0MDU1Y2Q2MWQ2NjNkMjkwZGQ0N2YyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE4OjMyOjM4IDIwMTIgKzAyMDAKKworICAgIEZpeCBNU1lTIGtpbGwvcHNraWxsIGNvbmZ1c2lvbgorCitjb21taXQgMTRiZTkxMzJiOTExNThiMDUxMjA3MTBiMWZmNmE0YjJhY2NjNTMxZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxODoxMDo0NCAyMDEyICswMjAwCisKKyAgICBGaXggbmV0MC9uZXR4IGNvbmZ1c2lvbgorCitjb21taXQgODEwN2E2MzUyZGYyNDc4NjYwOTk0ZWYxMDNkNTI4MDFhNjYwN2NjOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxNzowMzo0NyAyMDEyICswMjAwCisKKyAgICBGaXggc3BlbGluZyBlcnJvcnMKKworY29tbWl0IGFhNTkxMmI4OTg2Y2RlNzQwOTBiYTE1YmUxOTY0MjYzMDlhMWUxZjAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjIgMTY6NTg6NTAgMjAxMiArMDIwMAorCisgICAgSW1wbGVtZW50IHRoZSBtb2Rlcm4gSVAgdmVyc2lvbiBhZ25vc3RpYyB0YWJsZSBpbiBzbm1wbmV0c3RhdC4KKyAgICBJZiB0aGUgbW9kZXJuIHRhYmxlIGlzIG5vdCBhdmFpbGFibGUgKG9yIHRoZSAtQ0wgb3B0aW9uIGlzIHVzZWQpCisgICAgZmFsbCBiYWNrIHRvIHRoZSBsZWdhY3kgdGFibGVzLgorCitjb21taXQgMWEzNGQyMjQ5ZWYwZDIyMTVlNTg4NmY5YjNjOTdlY2ZhN2ViNTE5MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAyMiAxNjozOTo0MSAyMDEyICswMjAwCisKKyAgICBQaWNrIHVwIGlmRGVzY3IgZnJvbSBpZlhUYWJsZSB3aGVuIGF2YWlsYWJsZSwgYW5kIHVzZSB0aGF0IGFzIHRoZSBuYW1lLgorICAgIFZlcnkgdXNlZnVsIGlmIHBjaS11dGlscyB3ZXJlIGF2YWxhYmxlIHdoZW4gY29tcGlsaW5nIHRoZSBhZ2VudCBhcyB0aGUKKyAgICBuYW1lIG90aGVyd2lzZSB3aWxsIGJlIHRoZSB2ZXJ5IG9ic2N1cmUgY2hpcCBuYW1lCisKK2NvbW1pdCBiNGNhZjU0M2NmZjdkYmE4ZjlhY2NhMmI5ZWE4OGM5Yjc5ZGMzOWVlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE2OjMyOjEyIDIwMTIgKzAyMDAKKworICAgIFBpY2sgdXAgSEMgb2N0ZXRzIGFuZCBNY2FzdE9jdGV0cyBmcm9tIC9wcm9jL25ldC9uZXRzdGF0IG9mIGN1cnJlbnQgUkhFTDYKKyAgICBhbmQgRmVkb3JhIGtlcm5lbHMuCisKK2NvbW1pdCBjNjU1ZmNlNzg0NTMyYTUyM2Y3ZGI1ODJkMGNkMDdkZWU0YWQ3YWM1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDIyIDE2OjI1OjU5IDIwMTIgKzAyMDAKKworICAgIFRyeSB0byBiZXR0ZXIgY2xhc3NpZnkgTGludXgga2VybmVsIHRocmVhZHMgYXMgaHJTV1J1blR5cGU9T3MKKworY29tbWl0IGUxYThjOTVjYTU1ZjU2OTU4NWM4OGUxNzRhNDNmNmQ0MTI5YzQzOWQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBPY3QgMjAgMDk6NTk6NDEgMjAxMiArMDIwMAorCisgICAgQ29ycmVjdCB0aGUgbmVzdGluZyBvcmRlciBvZiB0aGUgZG94eWdlbiBlbmQgc2VjdGlvbiBjb21tZW50IGFuZCB0aGUgZmVhdHVyZSByZW1vdmFsIGVuZGlmLgorCitjb21taXQgZjY3YWRmMmEzN2E4YzE4MmVhY2JjZmU1MmQ1Yjc4OTE5MWE2NTkyOQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCA5IDE2OjMyOjQ3IDIwMTIgLTA3MDAKKworICAgIHJlbW92ZSByZWxlYXNlIHJlcXVpcmVtZW50cworCitjb21taXQgM2U1NDMzMDM5M2NjYzg2NTI1ZWQ2ZmI5YTBmYzE5YzA2ODMwNjYxMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5lQHJlZGhhdC5jb20+CitEYXRlOiAgIFR1ZSBPY3QgOSAwNjozNDoxMCAyMDEyIC0wNzAwCisKKyAgICBmaXggZG91YmxlLW5lZ2F0aXZlIHR5cG8KKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LjIucmMzIC0+IFY1LjcuMgorCitjb21taXQgNTA1NGI1NzA2MTlkZjBhODE5NThhMDQ1YmVmMTM1YjIwMjA1ZjAzNgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCA5IDE1OjI2OjA1IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMgorCitjb21taXQgNTZhNzk3ZmYzZTcxZGM4ODY0NjdkMTdjZTAyNWIwMjM3YzhjMWNjMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIE9jdCA5IDE0OjQyOjIzIDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIKKworY29tbWl0IDA4MTNmOGI2MmRmMGU4NDQwZmZlZjE2MWNlMTM0ZmY5NDU1ZTdkZTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZUByZWRoYXQuY29tPgorRGF0ZTogICBUdWUgT2N0IDkgMDY6MzM6NTggMjAxMiAtMDcwMAorCisgICAgZml4IGRvdWJsZS1uZWdhdGl2ZSB0eXBvCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBhNmE4ODkyNzUzNDY4NGUyNzVjY2YwZTc4MDUxMzA5NGE3M2ZjNmJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDkgMDY6MzE6MjEgMjAxMiAtMDcwMAorCisgICAgQUlYIG5ldC1zbm1wNS43LjEgaHJTV1J1blBhdGggbm90IGNvbXBsZXRlCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA1OGE0ZDg4MzkwMjFmNzcyYzM1YTczMmJkMDk2ZDFlMjkwZGMwYTYyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDkgMDY6MzA6NTcgMjAxMiAtMDcwMAorCisgICAgQUlYIG5ldC1zbm1wNS43LjEgaHJTV1J1blBhdGggbm90IGNvbXBsZXRlCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA2MjZlYWJlYzRlYTk4ZTUzNTkwODk3OTA4NTg0NzlhNTlhMjZjZGNiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gU2VwIDMwIDIzOjMwOjI4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1vdmUgdGhlIGNoZWNrIHRoYXQgdGhlIHBkdSB2YXJpYWJsZSBpcyBub24tTlVMTCB0byBiZWZvcmUgdGhlIGZpcnN0IGRlcmVmZXJlbmNlIG9mIGl0LgorCitjb21taXQgNjhhYWI1NzJjMmQyNzQ2YjUxYTk1ZWJhMTEwNTY4YzM4YjA1MDgwOAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNSAxOTowNzo0MiAyMDEyIC0wNzAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNy1wYXRjaGVzCisKK2NvbW1pdCAwYTQxNTMzYjFiNDlmMDBkNzM1N2EzZDJiZWE1ZGZhNzVlOGVkY2Q3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gU2VwIDI0IDAwOjA3OjE5IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCB0ZXN0IGNhc2VzIGZvciBzbm1wX3NlcnZpY2UKKworY29tbWl0IGE2MWI0OGQ3OGUxMWQ5NDVkZWY0NmZkZTBmN2Q1NWY3OTE5YzMzNWEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBTZXAgMjMgMDc6NTM6MDkgMjAxMiArMDIwMAorCisgICAgUHJlZmVyIGNvcHlfbndvcmRfY29uc3Qgb3ZlciBjb3B5X253b3JkKE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisKK2NvbW1pdCA5YmZmYzU0MTNkMGQ4ODIzOThiMDZmNDEwOWFjODA3YWYyZjc4MzQ3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gU2VwIDIzIDAwOjI5OjQ0IDIwMTIgKzAyMDAKKworICAgIFNpbXBsaWZ5IGxvZ2dpbmcgdGhyb3VnaCB0aGUgdXNlIG9mIG5ldHNubXBfY29uZmlnX2Vycm9yCisKK2NvbW1pdCBkMDlkNTNhMGZhNmRmNjNiMjFlNmYxMjczMWJlZTUxYTM2MjRlODVlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgU2VwIDIyIDIxOjMwOjA4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBjcmFzaCBvbiBpbmNvbXBsZXRlIGNvbmZpZ3VyYXRpb24gdG9rZW5zLgorCitjb21taXQgMDJkY2U2ZjQzYjk5Zjg1OTQxNjI3OTI4YzFhNTAyMmQ2NzI1ZDEyNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IFNlcCAyMiAyMToyODo1MSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgdHJ1bmNhdGUgc2luZ2xlIGRlZmF1bHQgdHJhbnNwb3J0IGRvbWFpbnMKKworY29tbWl0IDIxMWUzYzcwNjI1OTY1NDQxYjJhMDI5YTYxMTM4MDI5NzQ2NzNjNDMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBTZXAgMjIgMTE6MjM6MTkgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IGNyYXNoIGZyb20gZW1wdHkgdmFsdWVzIGluIC0tdG9rZW49dmFsdWUgYXJndW1lbnRzCisKK2NvbW1pdCBhZjNkMmQ5NzNiMWU4ZTI5ZDIwNWQ4YTA3YWNkODJiMWY4NTQ4MTllCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgU2VwIDIyIDEwOjMwOjE2IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCB0aGUgc3ltYm9sIE5FVFNOTVBfUFJJbyB0byBoZWxwIGluIHByaW50aW5nIG9pZCB2YWx1ZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4yLnJjMiAtPiBWNS43LjIucmMzCisKK2NvbW1pdCA4YjQ1MjkyMzAxZjAzNDlmZmI2OWQ0ZmQ4NTk1ZjJkNWIxOTllNmI2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI1IDE5OjM1OjM5IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMi5yYzMKKworY29tbWl0IDBjYmZmYjU2NWU2MmFlZjkzN2ZjNzAwZDhkM2MzYjhjNjVkZGZhNjUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjUgMTk6MDc6NDAgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5yYzMKKworY29tbWl0IDQwNTA1OTcxYWRkNmEzYjZmNTk1NGNmYmRlNTMyNzQ5YmZiY2IxNmEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6MzQ6MzcgMjAxMiAtMDcwMAorCisgICAgZml4IGZvciBoaWRkZW4gQ01TR194eHggbWFjcm9zIG9uIEFJWAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNjBmMGE5ZTk4M2FiODI3YzgyNGUzOTdkNjJhZWZmNDhhNjBmMDEzMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzozMToxMiAyMDEyIC0wNzAwCisKKyAgICBGaXggcHN0YXQgbWVtb3J5IGxlYWsgb24gaHB1eCAxMWkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDEzYmQ0ZDU2YmFhOTg4NjAxOGEwMDQ3N2UzMjE0ZWJlMDI3MDVmZmUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6MzE6MDQgMjAxMiAtMDcwMAorCisgICAgRml4IHBzdGF0IG1lbW9yeSBsZWFrIG9uIGhwdXggMTFpCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAwODA1NDIwODEzZGUxNTZjN2ZjNTE0MjUzNGZiNDIwYTBmY2MzNTcyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gU2VwIDE3IDEzOjI4OjU5IDIwMTIgLTA3MDAKKworICAgIGZpeGVzIEFUIGNvZGUgb24gaHB1eCAxMWkKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGJkYjNiMTQ2MzgwZGIxMzE2Y2FiZDU4YjcwNDQzNmU3ZWVjZGQ5ZjUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBTZXAgMTcgMTM6Mjg6NTAgMjAxMiAtMDcwMAorCisgICAgZml4ZXMgQVQgY29kZSBvbiBocHV4IDExaQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZTkzNmNmODEwYTQ3Mzc5MTU2ZDkxM2E3MTRlMzgxNjE4MWEwZDNkYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzoyNToyMCAyMDEyIC0wNzAwCisKKyAgICBmaXhlcyBkaXNBdmFpbCBvbiBGcmVlQlNEIHVmcworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNjA4YWI1Nzg4N2U1NTY2ZTYzNTA5YTNmN2U1ZDBhM2UyODkyZjRhNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIFNlcCAxNyAxMzoyNTowMiAyMDEyIC0wNzAwCisKKyAgICBmaXhlcyBkaXNBdmFpbCBvbiBGcmVlQlNEIHVmcworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMi5yYzEgLT4gVjUuNy4yLnJjMgorCitjb21taXQgMDdmOTE0NTY0ZTA5NzIyNGQ2Nzc1MTVjMmY1ZmQxZjNjMGM5ZWI0MgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IFNlcCAxIDA5OjU0OjQyIDIwMTIgLTA3MDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS03LXBhdGNoZXMKKworY29tbWl0IGFlZTIxN2MwN2VhOWYzNGEzMjI2OGU5NjZjN2VjZWYwMzZlYzRhOTYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBTZXAgMSAwOTo1NDozOCAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnJjMgorCitjb21taXQgMTE5YjBkM2NmMTJjOTdjYTNjNzRkNmQxZTcyMzE5NjcwYTgzNzhhYQorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IFNlcCAxIDA5OjUxOjA4IDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1NjA0NzM6IGZyb20gZmVubmVyOiBIYW5kbGUgVGltZVRpY2tzIHdoZW4gcHJldHR5LXByaW50aW5nIE9JRAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgYzk0YzYyZWEwZWRjZWJiZmJiNzNmYWI2ZWNkZGM2NzlmNzY5NGRhYgorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IFNlcCAxIDA5OjUxOjA4IDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1NjA0NzM6IGZyb20gZmVubmVyOiBIYW5kbGUgVGltZVRpY2tzIHdoZW4gcHJldHR5LXByaW50aW5nIE9JRAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNmQ3ZjllYjBkZWNkYjk2ODI4MzZmZmQwM2YxOTc0MjE5N2FkODdkYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAyOSAyMToxNDo0NiAyMDEyICswMjAwCisKKyAgICBGaXggcG9zc2libGUgbWVtb3J5IG92ZXJydW4gaW4gZnN5c19nZXRmc3N0YXRzLmMgKHBhdGNoIDM1NTk0MTcpCisKK2NvbW1pdCBmMjM1ZWU4YjMyZWVkMWRlM2YxZTQyMDJlZjQ1YjYzNzdmYmNlMTYzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDI5IDIxOjA3OjE0IDIwMTIgKzAyMDAKKworICAgIEZpeCBmb3IgaHJTdG9yYWdlVGFibGUgb24gQUlYIChidWcgMzU1NzE1OSkKKworY29tbWl0IDc4Y2M5ZDVjY2Q4NmIxNzA2MjJhYWM1NDNjMzQ1YzAyMDc1NWM3OGEKK0F1dGhvcjogc3RoZW4gPHN0aGVuMjM5MzRAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDI4IDE3OjE4OjA5IDIwMTIgLTA3MDAKKworICAgIGFkZCBtaXNzaW5nIHByb2Nlc3Mgc3RhdHVzIHZhbHVlcyB1bmRlciBuZXQvb3Blbi1ic2QKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDRlZjlkY2Q4MGIwYmRhMWUxOGI3ZTM0OWEwOGJjMGYyMmE3ZTc1NWUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjggMTc6MTY6MzcgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogT3BlbkJTRDogUEFUQ0ggMzU1OTQxNDogZnJvbSBuYmE6IHN1cHBvcnQgT3BlbkJTRCBmb3IgaHJfc3dpbnN0CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCAwYjU2OWZjY2VhOTQxNGM1MGNmZDZiMGU4M2UxODMxYmExMjkxY2UyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDI4IDE3OjE0OjQ1IDIwMTIgLTA3MDAKKworICAgIGFkZCBtaXNzaW5nIHByb2Nlc3Mgc3RhdHVzIHZhbHVlcyB1bmRlciBuZXQvb3Blbi1ic2QKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDFkM2M3YmU3ZmE3YTM4ZmQzZmMzOTcyMGJiNWNiNzBmOGJkNzExNjAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjggMTc6MTQ6MjIgMjAxMiAtMDcwMAorCisgICAgYWRkIG1pc3NpbmcgcHJvY2VzcyBzdGF0dXMgdmFsdWVzIHVuZGVyIG5ldC9vcGVuLWJzZAorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZmY0Mzg0MzNhY2EwOTZiYmJlYTI5ZGQzMGRmZDVjNTUyMzc2MWE3MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyOCAxNjo1MDo0NiAyMDEyIC0wNzAwCisKKyAgICBGaXggcmVhbCBtZW1vcnkgcmVwb3J0aW5nIG9uIEJTRCBzeXN0ZW1zCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBjNDI5YTRmMzk4NGRhZTc5MWUzMDdkZjcwMjI1MWY5NmVmMDQ3ZDg4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDI4IDE2OjQ5OjEwIDIwMTIgLTA3MDAKKworICAgIEZpeCByZWFsIG1lbW9yeSByZXBvcnRpbmcgb24gQlNEIHN5c3RlbXMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDQxZDk4MGMwMTU1NjRkYjdmMjJmNzYzMTkwZjYxYWMwZDU2YmEzYjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBBdWcgMjQgMTQ6MzU6NTMgMjAxMiArMDAwMAorCisgICAgV2luZG93czogVW5icmVhayBETEwgYnVpbGQKKworY29tbWl0IDI3OTM5MjNiZmUyYjAyNmZjYWVhZjUzOGFlNTAzZjEwNWNiMzE1YmMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMyAyMjoyNjoyMCAyMDExICswMDAwCisKKyAgICBhZGRlZCBtaXNzaW5nIFRMU1RDUCBtZW50aW9uIGluIHRoZSBoZWxwIG91dHB1dAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMi5wcmUzIC0+IFY1LjcuMi5yYzEKKworY29tbWl0IDllYzVjNTk5NzgwMjUxZGNkMzE1NWY5YWM5ODA2ZWNlN2VkNmJhMjIKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBBdWcgMTEgMTI6MDA6MzcgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yLnJjMQorCitjb21taXQgMzM1OGI2NWIxMWUyYzBlZTcxMmY2MDlmMDIwNzEyNjBmNzVmOWJiMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEF1ZyAxMSAxMTozOTozOCAyMDEyIC0wNzAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNy1wYXRjaGVzCisKK2NvbW1pdCA0ODQ5YTQzMGRhYWZiOTFjN2E2MWJmYmJjMTdmOTI5OWU1OGZjZjY0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgQXVnIDExIDExOjM5OjM1IDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIucmMxCisKK2NvbW1pdCAxYmMyNjg0MjhlODI5ODUyYzllZjBhNzk1NTJjYTQwNDVhZGQyOGEzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMjI6NDI6NTIgMjAxMiArMDIwMAorCisgICAgTWFrZSBzdXJlIHdlIGhhdmUgYW4gaW5pdGlhbGl6ZWQga3ZtIHN0cnVjdHVyZSB3aGVuIHF1ZXJ5aW5nIHByb2MgdGFibGUgb24gQlNELgorCitjb21taXQgN2U2N2M1MDM4YjZhYWJmZGExOTM5ZWE4MWQ5NDBiMjQwMDBjZmI1MQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxNDoyNzowOCAyMDEyICswMjAwCisKKyAgICBSZW1vdmVkIGVycm9yIG1lc3NhZ2Ugd2hlbiBmaWxlIGNhbm5vdCBiZSBvcGVuZWQuCisgICAgCisgICAgVGhpcyBzaG91bGQgYmUgaGFuZGxlZCBieSBjYWxsZXIsIG5vdCBpbiB0aGUgZnVuY3Rpb24uIFRoZXJlIGlzIG9ubHkgb25lIGNhbGxlciBub3csIHVkcF9lbmRwb2ludF9saW51eC5jLgorCitjb21taXQgNTliMGRlMGI4ZmE3M2ViNDAzMDA2Y2VlNzVmZjg2NTFlMTU4NWUyOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxNDoyMzoxNCAyMDEyICswMjAwCisKKyAgICBGaXggY29tcGlsYXRpb24gZXJyb3JzIGludHJvZHVjZWQgYnkgY29tbWl0IGY5NWRmNjM0MWIxZDA2MjQ5NDQzZTUxNmI1OWE0M2NkZmEzZDQ3NzcuCisgICAgCisgICAgVGhpcyBpcyBlbWJhcmFzc2luZywgSSBjb21waWxlZCB0aGUgc291cmNlcyB3aXRob3V0IC0tZW5hYmxlLWlwdjYuIFNvcnJ5IGZvciBpbmNvbnZlbmllbmNlLgorCitjb21taXQgNWQ3ZWRhZGQ0NzYxNjgwYjY2ZDFkZjNiZmRlN2NhNWIxNmNhNWExNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxMjo0NjozNSAyMDEyICswMjAwCisKKyAgICBGaXggY29tcGlsYXRpb24gZXJyb3IgaW50cm9kdWNlZCBieSBjb21taXQgZjk1ZGY2MzQxYjFkMDYyNDk0NDNlNTE2YjU5YTQzY2RmYTNkNDc3Ny4KKworY29tbWl0IDQzYzk3YmJhYWYyMTFmNGM3ZjdjNzA0Y2ZjYjkwMWRmYmY4MzQ4NzQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTI6MzA6MDkgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IExvd2VyZWQgc2V2ZXJpdHkgb2YgJ0Vycm9yIGV4cGFuZGluZyBYWFggdG8gNjRiaXRzJyBtZXNzYWdlcy4KKworY29tbWl0IDhlNWNmMmE3MmE0NmNkNDgzZDIyZTYyOTBhNmM4YzRjMjZhZjZhZDIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDkgMTI6MjU6NDggMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogcmVtb3ZlZCBjb3VudGVyLTY0IGVycm9yIG1lc3NhZ2VzLgorICAgIAorICAgIFRoZXNlIG1lc3NhZ2VzIGRvIG5vdCBzYXkgZW55dGhpbmcgdXNlZnVsLCBjYWxsZXIgc2hvdWxkIGNoZWNrIHRoZWlyIHJldHVybiB2YWx1ZSBhbmQgcmVwb3J0IGl0LgorCitjb21taXQgZjk1ZGY2MzQxYjFkMDYyNDk0NDNlNTE2YjU5YTQzY2RmYTNkNDc3NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxMjowMToyNSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogcmVtb3ZlZCBlcnJvciBsb2cgbWVzc2FnZXMgd2hlbiBJUHY2IGlzIGRpc2FibGVkLgorCitjb21taXQgMThkYWNlOGU0YTM2YjA4M2Q2ZWY3MTc3MzVjNjNlN2Y0MDIyNGRiOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgOSAxMDo0MTo0NSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBhZGRlZCBDVkZTIChDZW50cmFWaXNpb24gRmlsZSBTeXN0ZW0pIHRvIGhyU3RvcmFnZVRhYmxlIGFuZCBockZTVGFibGUuCisKK2NvbW1pdCA5MGY0MzFiNDVkMjE1MDY0MjdiYzBiZDFkNGVlNjllMGI4ZWEzMGJjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDggMjM6MTA6NTAgMjAxMiArMDIwMAorCisgICAgVXBkYXRlIHRvIGN1cnJlbnQgTUlCIHZlcnNpb25zCisKK2NvbW1pdCA5ZTdhMGI5ZTU4MGQzYjFlYTYxOThhNzQxNGM4MTZjMjNiMTIzYjEwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgQXVnIDggMjI6Mjc6MTYgMjAxMiArMDIwMAorCisgICAgVXNlIGEgd3JraW5nIGF3ayBmb3IgU29sYXJpcworCitjb21taXQgMGUzOTIyYWUyMWU0YjdlYzUzODg2N2FmZDIyY2U3NGQ3NDFlMGYxYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyA4IDIyOjE3OjM0IDIwMTIgKzAyMDAKKworICAgIGZpeCBwcm90b3R5cGUgZm9yIGtsb29rdXAKKworY29tbWl0IGEyMjEwOTcxMWE2ZDFlYzE0YjZhM2YxY2FjMjIxZDcwMjYzZjEwNGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBBdWcgOCAyMjowODoxMyAyMDEyICswMjAwCisKKyAgICBmaXggcHJvdG90eXBlcyBmb3Iga2xvb2t1cAorCitjb21taXQgYWMwNjI5NzJjNTg1MTc0Zjk1ZDdiYTg3YWE1ZWM1NGM0MmZkZWM1NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyA4IDIyOjAwOjI2IDIwMTIgKzAyMDAKKworICAgIGZpeCBwcm90b3R5cGVzIGZvciBrbG9va3VwCisKK2NvbW1pdCA3Y2RkOGViZWY5NTA3ZmU3NjYxMDdjYTlmZWUwNTRjNDRjYzBiYWM1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gQXVnIDUgMDg6MTM6NTkgMjAxMiArMDAwMAorCisgICAgTWFrZSBzbm1wX2FsYXJtX3Jlc2V0KCkgdXNlIHRoZSBtb25vdG9uaWMgY2xvY2suIEZpeGVzIGEgYnVnIGludHJvZHVjZWQgaW4gY29tbWl0IDM3YmE3ZTIuCisKK2NvbW1pdCAwMjNmNjFlYTc4M2JmY2M1M2ZlOTBhYTY2NTQ1YzVhZWEyZGI4MDYxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDggMTY6MjY6NTQgMjAxMiArMDAwMAorCisgICAgRml4IGJ1aWxkIGJyZWFrYWdlIGNhdXNlZCBieSBjb21taXQgMDI4NjE0ZWNmMmQ2NzM5ODY5OWRjM2JkNzg0MDI5ZjMzNjBmMmUxMworCitjb21taXQgY2Q4MjA5NDlhMTQ5MWFmMTAzYTg1NTVmNmJkYWUwNDg1MWYzZDI4NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyA4IDE2OjE2OjQzIDIwMTIgKzAwMDAKKworICAgIFVuZG8gYnVpbGQgYnJlYWthZ2UgY2F1c2VkIGJ5IGNvbW1pdCAzN2JhN2UyMGE1MjFmYmYwNDU4YTBjNzdlZWEyZTVlMzZiZDdlYzBhCisKK2NvbW1pdCBmMTQzMDA4Y2NjNTdlYTEwY2JiODhhYjM1NTQ4MjJiMTdiNjI3MGFhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gQXVnIDUgMDg6NDU6NDIgMjAxMiArMDAwMAorCisgICAgTWFrZSBnZXRfZXhlY19vdXRwdXQoKSB3b3JrIG9uIGJpZyBlbmRpYW4gc3lzdGVtcy4KKyAgICAKKyAgICBVbmRvIEFQSSBicmVha2FnZSBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCA3Mzc0Yjg0ZmU0YzJlZjg0OTdmZGUzZGFlODBhNjlhYTg5ZWJhMTljLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMi5wcmUyIC0+IFY1LjcuMi5wcmUzCisKK2NvbW1pdCA4NDMyMmUwZGMyYTg5NzQ2NDY1NDJkOTg4MWJjMDFiNDNkYzNhMTJkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDE2OjI0OjA3IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMi5wcmUzCisKK2NvbW1pdCA4ZmVjN2E4MWQ2MTMzYTVmMDVlZDM0YTVhZjk4MDZhZjVkMTI4MjIzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDE1OjU3OjU2IDIwMTIgLTA3MDAKKworICAgIGZpeCB0aGUgYXNzZXJ0IGNoZWNrIHRvIGFsbG93IGZvciBzb21lIGtub3duIGFzc2VydHMKKworY29tbWl0IGRmZGU2ZDJkZGQ1MTljOGMyYWUxNzg4Nzc0ZmRmOTBkOGJlYTAyYjEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMzAgMTA6MDg6MjQgMjAxMiAtMDcwMAorCisgICAgaW5jbHVkZSBlcnJuby5oIGFuZCBkb24ndCB1c2UgY29udGludWUgb3V0c2lkZSBhIGxvb3AKKworY29tbWl0IDdjZmZlMDIyMmNkOThhMjFlMzBmNDRjM2RmOWYwZDkwYmYwOTZmZTkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTQ6MTM6NTAgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5wcmUzCisKK2NvbW1pdCAyMmFmN2ZkNDY3NzZhOGRiMjM2MmU4OGFjYjFiNjliMTY1YzAzNGI2CitBdXRob3I6IGJsZW50eiA8YmxlbnR6QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMzo1Mjo0MCAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBhaXg6IFBBVENIIDM0MDM0MzM6IGZyb20gYmxlbnR6OiBJc3N1ZXMgd2l0aCBoclNXUnVuTmFtZSBhbmQgUGFyYW1ldGVycyBvbiBBSVgKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDUxNmI5ZjgyNzViOGRiMDNjZGM0MTA3OGU2NWMyMTcwMzA5YTNmOGIKK0F1dGhvcjogSnVsaWVuIFBpbm9uIDxqcGlub25AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSnVsIDMxIDEzOjI1OjMxIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IHBlcmw6IFBBVENIIDM0MTI5Mzk6IGZyb20ganBpbm9uOiBSZXBhaXIgdGttaWIKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IDhmMjMwZjQwMWM2NGQ4MjI4ODNhYzQ0NDYyNGEyYzJmZDcxMjhkOGUKK0F1dGhvcjogSGFyc2hhIFNoaXZhbm5hIDxuYWFudWhzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMzoyMjoxMSAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTUyNzQ1OiBmcm9tIG5hYW51aHM6IGZpeCB0byBzdXBwb3J0IDMyIGNoYXJzIGZvciBWQUNNIG5hbWVzIGFzIHBlciBSRkMtMjU3NQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMzQwMDhkMzJhZWY0M2Q4YmJlMTAwMGZiOWJmOTQ2NDJjMDUxNGY2ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxMzoyMDozMSAyMDEyIC0wNzAwCisKKyAgICBmaXggdGhlIGFnZW50eCBwaW5nIHBhdGNoIHNvIGl0IHdvcmtzIHdpdGggdGhlIG5ld2VyIGFsYXJtIHN0cnVjdHVyZSBuYW1lcworCitjb21taXQgOTYyNjc2Mzk0ZDNmZTU1N2VhZDkxMDU3YjRkNzgwMjI2ZGMwZDZiMworQXV0aG9yOiBNaWpvIFNhZnJhZGluIDxtaWpvc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTI6NDg6MDEgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDM0MTQwNTE6IGZyb20gbWlqb3M6IHNubXAtYnJpZGdlLW1pYjogZml4IGZvciBkb3QxZEJhc2VUYWJsZQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMzdiYTdlMjBhNTIxZmJmMDQ1OGEwYzc3ZWVhMmU1ZTM2YmQ3ZWMwYQorQXV0aG9yOiBWaW5jZW50IEJlcm5hdCA8dmJlcm5hdEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTI6Mjc6MjggMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDM0ODE2ODY6IGZyb20gdmJlcm5hdDogRG9udCBwaW5nIG1hc3RlciBhZ2VudCB1bmxlc3MgdGhlcmUgaXMgbm8gaW5jb21pbmcgdHJhZmZpYworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgMmJlNWZlYWRiMDU0MDg0NmUwZTNhZGEyN2VmYjk3ODk0YTRjYmQ1MgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAwNzoyOToxNyAyMDEyIC0wNzAwCisKKyAgICBhZGRlZCBhIGRhcndpbiAxMiB2ZXJzaW9uCisKK2NvbW1pdCAxZjliY2QyMWU3YzJkNWVmZmI2MmFhMDFiN2I4N2U0M2RjODYyMTRjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEp1bCAzMSAxNDo0MzoyNyAyMDEyICswMjAwCisKKyAgICBGaXhlZCBTQ1RQLU1JQjo6c2N0cEFzc29jUHJpbVByb2Nlc3MsIHRoZSBsaXN0IG9mIHByb2Nlc3NlcyB3YXMgbm90IGluaXRpYWxpemVkLgorCitjb21taXQgNDhiZTVlODlhYTA0YWRiMGRmN2UwOTRiMmZlNDYzMDE1NDI5ZmM5OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMzEgMTM6NDg6MzEgMjAxMiArMDIwMAorCisgICAgQWRkZWQgbG9nIG1lc3NhZ2Ugd2hlbiBpcFRhYmxlIG1pc3NlcyBzb21lIGludGVyZmFjZXMuCisKK2NvbW1pdCA3NTIzZjBmMDFiYTRkYjY1YWMxNjQ3YTIzMjI4Y2YwNmMwYjcyYTAzCitBdXRob3I6IE1hcml1c3ogQ2VpZXIgPG1jZWllckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMzAgMTA6MTk6MzMgMjAxMiAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzUzNjY5MjogZnJvbSBtY2VpZXI6IGNyZWF0ZSBhIHVuaXQgdGVzdCBmb3IgcmVhZF9jb25maWcgQVBJcworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgYzA3YjhkOWIzNzcwYjYxNWM4ZTE2MmRiZGY3NjQzODA1ZjM3MmQ3NQorQXV0aG9yOiBNYXJpdXN6IENlaWVyIDxtY2VpZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDMwIDEwOjE4OjQyIDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1MzY2OTI6IGZyb20gbWNlaWVyOiBGaXggZm9yIGNhbGxiYWNrIGNhbGxpbmcgd2hlbiB1bnJlZ2lzdGVyaW5nIGNvbmZpZyBoYW5kbGVyCisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCA1YzI0MjRmMDdkODVjMGM0Zjc5ZDZjNWZhZjY0ZDdmM2VlODYxNzI2CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDMwIDEwOjA4OjQyIDIwMTIgLTA3MDAKKworICAgIGRvbid0IGR1cGxpY2F0ZSBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzIGRlZgorCitjb21taXQgNzM3NGI4NGZlNGMyZWY4NDk3ZmRlM2RhZTgwYTY5YWE4OWViYTE5YworQXV0aG9yOiBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDMwIDA5OjQxOjE3IDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzODM5NzA6IGZyb20geWFiZXJhdW5leWE6IEZpeCBjb21waWxlIGVycm9yIG9uIEZyZWVCU0QgOS54L1BPU0lYaWZ5IGF1dG9fbmxpc3QsIGV0YworICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNjcwZDk2ZTc4NjU5MGZkZDMwYTE2YTMzMDBjMGVkNWJkNmU1MzIxNAorQXV0aG9yOiBNYXJrIFJ1c2sgPHVzZXJfaWQ9MzQ5ODk1QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEp1bCAyOSAyMzozOToyMiAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzQyNDkzMzogZnJvbSB1c2VyX2lkPTM0OTg5NTogVXNlIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1RJTUVPVVQgZm9yIHRoZSBkZWZhdWx0IHRpbWVvdXQKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGYxZWFlYzE1ZWY2MDNiOGNlNTQyOTMyZmZkYmQ4Nzg4YzNkMWFjYzUKK0F1dGhvcjogRGFuaWVsIEhvYmkgPGhvYmlkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEp1bCAyOSAyMzoyODowMSAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzUzMDc5NDogZnJvbSBob2JpZDogcGFzcy9wYXNzX3BlcnNpc3Q6IHVucmVnaXN0ZXIgTUlCIHdpdGggY29ycmVjdCBwcmlvcml0eQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZDc4M2FkOTkwZTkxNGMwZWUxYzk4ZDBhOTNhNDI5ZWIyYjJmNDk5NworQXV0aG9yOiBEb3VnIE1hbmxleSA8dGVra2FtYW5lbmRsZXNzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEp1bCAyOSAyMzoyNTo0MCAyMDEyIC0wNzAwCisKKyAgICBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzNTI2NTk5OiBmcm9tIHRla2thbWFuZW5kbGVzczogQSBidWdneSBTTk1QdjMgYWdlbnQgY2FuIGNhdXNlIGEgbmV0LXNubXAgY2xpZW50IHRvIGhhbmcKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGU5ODUxNTIwYzE4ZDdlZDE3MjQwNGEzN2RjMGRjN2ExMzZiZmFlZGQKK0F1dGhvcjogRGFuaWVsIEV2ZXJzIDxkYW5pZWwtZXZlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gSnVsIDI5IDIzOjE0OjE5IDIwMTIgLTA3MDAKKworICAgIENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDM1NDgyNTc6IGZyb20gZGFuaWVsLWV2ZXJzOiBmaXggZm9yIHJlY3Vyc2l2ZSBwdGhyZWFkIG11dGV4ZXMKKyAgICAKKyAgICBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworY29tbWl0IGU3YTM3Njc4YzJiNzM1OWFmZDQ0YTMwN2U4MjRjMWY3ZDdhMGM4N2QKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKdWwgMjkgMjE6MzU6MzUgMjAxMiAtMDcwMAorCisgICAgTkVXUzogb3N4OiBwYXRjaDogMzUxNDA0OSBmcm9tIHR3b2JpdHMtZ2l0aHViOiBmaXggY29tcGlsYXRpb24gb24gZGFyd2luMTEKKworY29tbWl0IDEyMjE0MjZhYmFkMTViOWIyZmNlZThmMWUzMmFiNTJlZjI2OTI5NTIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVsIDI3IDE0OjE4OjI0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHBlcmw6IFBBVENIRVM6IDM1Mjk1NDE6IERvbid0IHJlZmVyIHRvIGludGVybmFsICdteScgdmFyaWFibGVzIGZyb20gZXh0ZXJuYWwgc2NyaXB0cworICAgIAorICAgIEZpeCBwcm92aWRlZCBieSBMZXp6IEdpbGVzCisKK2NvbW1pdCA5YzA2YzIyMDJkYzA1NjcwM2M4MDk1OWEwZWNhOWE3MTY4NGMyOGRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1bCAyNyAxMzoyOTozMCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBMaW51eDogUEFUQ0hFUzogMzUzNjQyMDogRW5zdXJlIHNuZC9yY3YgbWVtb3J5IGJ1ZmZlcnMgYXJlIHN1aXRhYmx5IGFsaWduZWQKKyAgICAKKyAgICBQYXRjaCBwcm92aWRlZCBieSBUeWxlciBPbG1zdGVhZAorCitjb21taXQgODliODJjNTVmOWVmZDJlOGFiOGM2ZDY1ZmE1NjdjNWIxZmFjMTg0MworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdWwgMjcgMTM6MTQ6MDcgMjAxMiArMDEwMAorCisgICAgIklkbGUiIHByb2Nlc3NlcyAoaS5lLiBpbiB0aGUgcHJvY2VzcyBvZiBiZWluZyBjcmVhdGVkKSBhcmUgcHJvYmFibHkKKyAgICBiZXN0IHJlZ2FyZGVkIGFzICJ3YWl0aW5nIGZvciBhbiBldmVudCIgdG8gYmVjb21lIHJ1bm5hYmxlIC0gaS5lLiAnbm90UnVubmFibGUoMyknCisgICAgVGhhdCBldmVudCBiZWluZyB0aGUgY29tcGxldGlvbiBvZiB0aGUgY3JlYXRpb24gcHJvY2Vzcy4KKyAgICAgICBJdCdzIGFyZ3VhYmxlIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIHN0cmljdGx5ICJsb2FkZWQiLCBidXQKKyAgICB0aGlzIGZlZWxzIGxlc3MgbWlzbGVhZGluZyB0aGFuIHJlcG9ydGluZyB0aGVtIGFzICdpbnZhbGlkKDQpJworCitjb21taXQgNmU3ODBhNWJmMGQ2NGJmNDdkZmJmNDc5YWU3ZjU2YzEwZmY4MTY2ZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdWwgMjcgMTI6NTc6NTQgMjAxMiArMDEwMAorCisgICAgQ2xhcmlmeSBtZWFuaW5nIG9mIGhyU1dSdW5TdGF0dXMgJ2ludmFsaWQoNCknCisgICAgRW5zdXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBhbHRlcm5hdGl2ZXMgZG9uJ3QgY29uZnVzZSBjb2RlIHN5bnRheAorCitjb21taXQgOTliMzUzZjcyNTNhNWJiMzhiODZmMzFjMjcwOGUxNmIzNGE0NmNlNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdWwgMjcgMTI6NTA6NTEgMjAxMiArMDEwMAorCisgICAgQWRkaXRpb25hbCBwYXRjaCBmcm9tIFBhdGNoIElEICMzNTQzMDAwCisKK2NvbW1pdCBkMGUwM2ZlNGEyMzY5NDVkYWY0MmFmN2E0NzA5NGU2ODZmOWJkYjllCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1bCAyNyAxMjo0MTowMiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzU0MzAwMDogVmFyaW91cyBmaXhlcyB0byBSbW9uIGNvZGUKKyAgICBTdXBwbGllZCBieSBQYXRyaWNrIFJpdHRlcgorCitjb21taXQgNjYzMmEyYjliOWZhZDFhMGIwZDZiYWVkZjJhMmIzOTFmNWQ0ZTkxNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTQ6Mzk6NDIgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogQlVHOiAzNTE3MDMwOiBFbnN1cmUgbGFyZ2UgdGFibGVzIGFyZSB3YWxrZWQgcHJvcGVybHkKKworY29tbWl0IGI4ZDE2NjA0ZGJiMmY4MGViZTI4NTIzMjJhYTgzMzYxYTAzMjM3OTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDE0OjE5OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IGFwcHM6IEJVRzogMzUyOTc2ODogQmUgbW9yZSBjYXJlZnVsIHdoZW4gc3RyaXBwaW5nIG9mZiBudW1lcmljIHN1ZmZpeGVzCisKK2NvbW1pdCAwYjNhZDQ0ZWM0YzFiOWY0MWRjM2VmNzBlNmEzOGE1M2VmMjY4YWRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMzozNDoxMCAyMDEyICswMTAwCisKKyAgICBGaXggY29tbWVudHMgZGVzY3JpYmluZyBGcmVlQlNEIHJlbGF0aW9uc2hpcHMKKworY29tbWl0IDhjZjdhODkxODdhOTk2ZmFmZjA0MDQxNDk4NmZmYTVkNzhkNTY4M2UKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDI2IDEzOjIxOjU2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDM1MzIyMzQ6IEZpeCB0eXBvIGluIGxpYnRvb2wgc2NyaXB0CisgICAgKGFkZHJlc3NlZCBwcm9wZXJseSBpbiBsaWJ0b29sIDIuNC4yKQorCitjb21taXQgNDI1OGQ4NTJjYTdiNmFlYWU5M2FkNzMwNjRkNDNhYTgwN2ViNjEwNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTM6MTY6MjAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogZG9jOiBCVUc6IDM1MzUyNjk6IERvY3VtZW50IHVzZSBvZiBbc25tcF0gZm9yIGNsaWVudC1zaWRlIHRvb2xzLgorCitjb21taXQgMjZlZDQwY2JkMDdjZjI3MWE5Y2ZjNDUxN2Q5NjQ3NzQ3MTJhZDc3YworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTI6NTc6NTYgMjAxMiArMDEwMAorCisgICAgU3VwcG9ydCBsb2NhbCByb2xsdXAgb2YgcGF0Y2hlcyB3aXRob3V0IGZpcnN0IHN5bmNocm9uaXNpbmcgd2l0aCBleHRlbmFsIHJlcG8uCisKK2NvbW1pdCA5MDRjNDQyZDYwYzViOTlhYWNkN2Y2MDMwN2MyODY4NGVmYWU4NTRjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMjo1MzozNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBweXRob246IEJVRzogMzUzNTk2NzogRml4IG1lbW9yeSBsZWFrIC0gc25tcF97c2Vzc199ZXJyb3IgYWxsb2NhdGVzIHRoZSBvdXRwdXQgYnVmZmVyCisKK2NvbW1pdCA1OTdlY2RhNjhlZTJiNTgwYjY2NjI4ODk3N2IwNGFhMTMzMjA3NTE3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IEp1bCAyNiAxMjoxNzoxNCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM1NDA2MjE6IGRpc3Q6IEFkZCBtaXNzaW5nIFByb3ZpZGVzOiB0byBuZXQtc25tcC1wZXJsbW9kcyBSUE0gc3BlYworCitjb21taXQgNDNkNWJhMjI0YzNmMjlmZDhlN2ZkMWQwNjBhMTcwNDVhYWQ3ZWZmMAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTE6MjU6NDMgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogQlVHOiAzNTQxMDEyOiBGaXggaGFuZGxpbmcgb2YgZ2V0dGFibGUgY29sdW1ucworCitjb21taXQgYmMyOTNhY2FkOGQzNDg3Y2RkZWYzYzcwY2VhNzQzNjhmMzRkOTM1NAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBKdWwgMjYgMTE6MjA6MjAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzU0Mzg2NDogUmVtb3ZlIGV4dHJhbmVvdXMgZnVuY3Rpb24gdHlwZQorICAgIChhbmQgZml4IGEgcmVsYXRlZCB0eXBvKQorCitjb21taXQgMDI4NjE0ZWNmMmQ2NzM5ODY5OWRjM2JkNzg0MDI5ZjMzNjBmMmUxMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKdWwgMjQgMTU6Mzc6MTYgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHNubXBkIGV4aXRpbmcgc2hvcnRseSBhZnRlciBzdGFydCBkdWUgdG8gaW5jb21pbmcgc2lnbmFsLgorCitjb21taXQgNGQzODg5NWY0NTlhMWRmMjRmNjhjNGE2MGU0Y2FmNmE3NzhkOGMxZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdW4gMjcgMDk6MzU6NDQgMjAxMiAtMDQwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHJlbW92ZWQgbGltaXQgb2YgJ2V4ZWMnIGFuZCAnc2gnIGVudHJpZXMgaW4gc25tcGQuY29uZgorICAgIAorICAgIFVzZSBkeW5hbWljIChyZSlhbGxvY2F0aW9uIGluc3RlYWQuCisKK2NvbW1pdCBkY2VlYWNjOTk4ZmUyMzIyODgyZTdlZWRlYzBhNzFhNzlkYzQ5NGFiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEp1bCAyNCAwOTowMDoyMyAyMDEyICswMTAwCisKKyAgICBEb24ndCBiZSBzdXJwcmlzZWQgaWYgdGhlcmUgYXJlIG5vIGNoYW5nZXMgdG8gdmFyaW91cyBmaWxlcworCitjb21taXQgNTZjM2MwNzgzMzZjYmYxYmYwOWZkMWIwMTA3OGE5MDMwNzE3NjEzZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEp1bCAxMSAwODo0NzoxMyAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHIDM1NDIzMDc6IENvcnJlY3Qgc3lzT1JJRCBmb3Igc25tcE1QRFN0YXRzLiBUaGFua3MgdG8gRGF2ZSBWdWNpY2ggZm9yIHJlcG9ydGluZyB0aGlzLgorCitjb21taXQgNjFlY2VkYzA4M2Y4ODFkYjhhOWE1MGQ1MGJkZWVkMzY2MjRlZDMwNworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEp1bCAxMSAwMDoyMToyNyAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHIDM1NDIxODg6IENvcnJlY3Qgc3lzT1JEZXNjciBmb3Igc25tcFVzbU1JQi4gVGhhbmtzIHRvIERhdmUgVnVjaWNoIGZvciByZXBvcnRpbmcgdGhpcy4KKworY29tbWl0IDJmOWVkZTQxOWY0MGU4NDhhMjQyNTM4OTI4OGNhYzBlMjMzMWI5OTIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgSnVsIDE5IDE3OjEwOjUyIDIwMTIgKzAxMDAKKworICAgIEZpeCBleGFtcGxlICdyc3luYycgY29tbWFuZCBmb3IgZnVsbCByZWxlYXNlcworCitjb21taXQgNmRkNzg4NGQ5OWU3NTZlMmYyMmI2ODg4MjNjZTFiMWQ1MjZhZDE2NgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBKdWwgMTggMTU6NTk6NTkgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yCisKK2NvbW1pdCA5NzY2OTZhMTI4ZTU3YjUxMmJmN2FkNDAwZDAwMjM2OGI0YTlhODcxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAxNDozNDozMSAyMDEyICswMTAwCisKKyAgICBWNS02LXBhdGNoZXMgb3V0IG9mIFJlbGVhc2UgQ2FuZGlkYXRlCisKK2NvbW1pdCA1N2M1NjhkM2QzOTgxNzJjNTU0MWZiMzFiYjc1ZDE4ZmNjZTJlMjZmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAxNDozNDoxNSAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yCisKK2NvbW1pdCA3M2Q5MDZiYzdjOTg1MDZmYTJiNGQ2ZDI5MGY3YjNiZWJhMmU0YTBkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAxMToxMjo1OCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIKKworY29tbWl0IDQyYjVhZmIzY2Q2ZDA2YWRiNDI2ZjFkYmFhOTgzNThmMmIyZThhNTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDEwOjQ2OjQ3IDIwMTIgKzAxMDAKKworICAgIFY1LTUtcGF0Y2hlcyBvdXQgb2YgUmVsZWFzZSBDYW5kaWRhdGUKKworY29tbWl0IDhiZDQ0MGM0M2UzNjVhMGI3N2Q0N2Y1ODJjYWRlOWY5N2M3YmZjZTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDEwOjQ2OjI4IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIKKworY29tbWl0IDZlMDg1NWEzMTU3MTk4NDk5NDExYWM1MmI0NmQ1ZjMyYWFkNWI5ZmEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgSnVsIDE4IDA5OjUxOjMyIDIwMTIgKzAxMDAKKworICAgIEFkZCBtaXNzaW5nIHJldHVybiB0eXBlIGluIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisKK2NvbW1pdCAwN2Q4MjVlOGJiMzVlZWE5YWM2YjFjYjgyY2JiMjM0ZmU2NmIxYWI2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIEp1bCAxOCAwOTo1MTozMiAyMDEyICswMTAwCisKKyAgICBBZGQgbWlzc2luZyByZXR1cm4gdHlwZSBpbiBmdW5jdGlvbiBkZWNsYXJhdGlvbgorCitjb21taXQgNWRiNzAwMzZlZjY3NTYzNTY0N2U1YjdjNzI1MzQ1NjgzODgzNjY0NworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAxMSAxNDo1NTozOCAyMDEyIC0wNzAwCisKKyAgICBkb24ndCB1c2UgLS1yZWJhc2UKKworY29tbWl0IGQ0YzE1NDk1OTNjZTJjMmNhZWI5OGU1ZjhhYmZkN2E1YWU1YTAyNzMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVuIDI3IDA5OjM1OjQ0IDIwMTIgLTA0MDAKKworICAgIENIQU5HRVM6IHNubXBkOiByZW1vdmVkIGxpbWl0IG9mICdleGVjJyBhbmQgJ3NoJyBlbnRyaWVzIGluIHNubXBkLmNvbmYKKyAgICAKKyAgICBVc2UgZHluYW1pYyAocmUpYWxsb2NhdGlvbiBpbnN0ZWFkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcuMi5wcmUxIC0+IFY1LjcuMi5wcmUyCisKK2NvbW1pdCBmZmNlNDlmYjFhYjRhNzhkNGYyOTQ3YmUwNmQ2MjBmMTQyNDUyOGZkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSnVsIDExIDE3OjEyOjMxIDIwMTIgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjIucHJlMgorCitjb21taXQgYmQ3YzcyOTcxODc4MThlNWVlZjczMjc2NjdlNGE4MWY2YzlmYzg5YgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAxMSAxNDo1NTozOCAyMDEyIC0wNzAwCisKKyAgICBkb24ndCB1c2UgLS1yZWJhc2UKKworY29tbWl0IGE3MTUzMTJlMmNlNDlkNGRhOTNmYzE0MGNjMzlmYzEwMGIwYjc5NzgKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKdWwgMTEgMTU6NDc6MjIgMjAxMiAtMDcwMAorCisgICAgdXBkYXRlZCBmb3IgdGhlIHByZXZpb3VzIDUuNy4yLnByZTEgcmVsZWFzZQorCitjb21taXQgMTcyNzc2ODliNjI5ZjQ1ODZkNWQ3MTRkODdjZTZiYzExZjg4NzY2OAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEp1bCAxMSAxNDo1NTozOCAyMDEyIC0wNzAwCisKKyAgICBkb24ndCB1c2UgLS1yZWJhc2UKKworY29tbWl0IDY3ODZmZmM3NmZhY2Y3NDZhZmI2YWYyNTE1OGY3OTQwNjU2YWIzOWMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBKdWwgMTEgMDg6NDc6MTMgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRyAzNTQyMzA3OiBDb3JyZWN0IHN5c09SSUQgZm9yIHNubXBNUERTdGF0cy4gVGhhbmtzIHRvIERhdmUgVnVjaWNoIGZvciByZXBvcnRpbmcgdGhpcy4KKworY29tbWl0IGYwZTM1ZDYxZjkyNThkYzYwOGRhOWJmNzE4YWYxNDU3YTg1OWZhMTkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBKdWwgMTEgMDA6MjE6MjcgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRyAzNTQyMTg4OiBDb3JyZWN0IHN5c09SRGVzY3IgZm9yIHNubXBVc21NSUIuIFRoYW5rcyB0byBEYXZlIFZ1Y2ljaCBmb3IgcmVwb3J0aW5nIHRoaXMuCisKK2NvbW1pdCA1MjA2ZDI1ZDRjYjk0ZDRiMGRkMzMxYTVhNDExM2Q0ZDg3NzgyYzQyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVsIDIgMTI6MTQ6MzkgMjAxMiAtMDcwMAorCisgICAgYmV0dGVyIGRlc2NyaXB0aW9uIG9mIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgZjkyODUzMjgxNDc3ZWU3MjRhNTFhOTk2N2YzN2QzZjFkZDFiMGY3ZQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEp1bCAyIDEyOjA5OjUwIDIwMTIgLTA3MDAKKworICAgIHJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbnMgY2F1c2luZyBhIHByb2JsZW0KKworY29tbWl0IDViZTI3MzY4NzUxNjkxZmMxYWI1NWZlNjJiNDEwNmQ4ZDk5Yjg3MDQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKdWwgMiAxMjowNjo1OCAyMDEyIC0wNzAwCisKKyAgICBhZnRlciBwdWxsaW5nIGFsbCB0aGUgYnJhbmNoZXMsIHN3aXRjaCBiYWNrIHRvIHRoZSBpbml0aWFsIG9uZQorCitjb21taXQgODI1OTZhNjlmNWNlNTNkNWE2ZjBhZjQyMTVjOThkNjE4NGRhYjRkNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTQ6MDQ6NTAgMjAxMiArMDEwMAorCisgICAgVW5waWNrIG1lcmdlIGNvbmZsaWN0LgorICAgIChOb3Qgc3VyZSB3aHkgdGhpcyB3YXNuJ3QgZmxhZ2dlZCB1cCBlYXJsaWVyIC0gb3IgbWF5YmUgSSBqdXN0IG1pc3NlZCBpdCEpCisgICAgKGNoZXJyeSBwaWNrZWQgZnJvbSBjb21taXQgYjA1YmQ3OGY5ZjIzNGJiNTdhMDBiNTRjNWJmYjFkZTMyYTA5ZjRhNCkKKworY29tbWl0IDZhMDc1YWU0OTRjNzZiODJlZWE5NjMyN2NmNTI0MmRmMDQ4NzQzZGIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDE0OjIxOjA4IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5yYzMKKworY29tbWl0IGEzN2U3ZTAyOTQ1MTQ3YmZlNmNhZGI5NTcxNzA2YzZiMmVjNzQzYmYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDE0OjE3OjQyIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5yYzMKKworY29tbWl0IGIwNWJkNzhmOWYyMzRiYjU3YTAwYjU0YzViZmIxZGUzMmEwOWY0YTQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDE0OjA0OjUwIDIwMTIgKzAxMDAKKworICAgIFVucGljayBtZXJnZSBjb25mbGljdC4KKyAgICAoTm90IHN1cmUgd2h5IHRoaXMgd2Fzbid0IGZsYWdnZWQgdXAgZWFybGllciAtIG9yIG1heWJlIEkganVzdCBtaXNzZWQgaXQhKQorCitjb21taXQgNGQxNTc0MmM3NTBhOTZhNGRiYjNkYTg3NDc0MWFlMTUyNDg5ZjhkNQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6NTg6MDcgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTYtcGF0Y2hlcworCitjb21taXQgZjZiNWUzMzc2ZWQzYThlOWVhZjc0YjdkNjgyMmIzYTc2NTc3MmVlOAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBKdW4gMjIgMTM6NTc6NTYgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5yYzMKKworY29tbWl0IDVjZmIwODExMTI3YTY1M2RmZjBmNGU1M2FkNjAyOWUyMjk4YTZjNjIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjI4OjM3IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IGU3MmUyMDVmZGNlZjc4N2VmODQwYzhjOTI4ZWQyNzM1MWE2OTU0NGIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjU4OjA3IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS02LXBhdGNoZXMKKworY29tbWl0IGY3OWE1NGYyNDcyNTA4YjE2N2Q5NzdmMzY3YzM4NjRiNTYyMWU4OWQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjQyOjUzIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzMKKworY29tbWl0IDU2ZWY1ZjBkYjUxY2ZkNTUyMjZmODJmOTRmM2YzZDI0NTBlNGZlYjUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjM5OjMyIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzMKKworY29tbWl0IGFmMWQwMGFiMDI0NjI3NWRhZGI1ZjBjZDNhMjNhNzdkNWY1NTk4Y2QKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjI4OjM3IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IGYxODc3NmQ2M2E1MTYwMjAzMTdlNTg4NzVhYjI0MzUyZDVkYjg2NTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEzOjI4OjI2IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIucmMzCisKK2NvbW1pdCBmZTEwNzc5NGU3NDAwZDIzOWU4YWYzZGE4YjRhM2ZiZWYwNmI1ZGE5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMzoyODozNyAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCAwZjg0ZmJjZjcxOTk1YmRkYWZhYjUwMGQ4N2M5YzVhNmY0NjFhNzM0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEp1biAyMiAxMjoyOTozNCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ3OTc0MDogRml4IGhyU1dSdW5QZXJmIHN0YXRpc3RpY3MKKworY29tbWl0IDFlM2JiNjA2MGJlNjE1NmQzZmYzMTZjNWE3ZTRmZDdmMDVlMzdjZmYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBGcmkgSnVuIDIyIDEyOjExOjU2IDIwMTIgKzAxMDAKKworICAgIE5FV1M6IHNubXBkOiBCVUc6IDM1MzIwOTA6IEZpeCBoaWdoIGlmSW5kZXggdmFsdWVzIGNyYXNoaW5nIGhyRGV2aWNlRGVzY3IKKworY29tbWl0IGU4NjYzZmFjOGI4ODY2MzI4MjY2OTcyNmEwOGYxNmRiMTZiNWY0ZGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDE4IDEzOjMwOjI1IDIwMTIgKzAyMDAKKworICAgIFJldmVydCAiQ0hOQUdFUzogc25tcGQ6IGZpeGVkIHNubXBkIGV4aXRpbmcgc2hvcnRseSBhZnRlciBzdGFydCBkdWUgdG8gaW5jb21pbmcgc2lnbmFsLiIKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IGIxMWE0ZTkzZjUwZDhhNTQ0ZjgzNWYzNzZjM2E0YjhjMDY0MWEzMWEsCisgICAgd2UncmUgaW4gUkMtcGhhc2UgYW5kIGNvZGUgaXMgZnJvemVuCisgICAgCisgICAgKHNvcnJ5IGZvciBub2lzZSkKKworY29tbWl0IGIxMWE0ZTkzZjUwZDhhNTQ0ZjgzNWYzNzZjM2E0YjhjMDY0MWEzMWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDExIDE2OjI2OjA5IDIwMTIgKzAyMDAKKworICAgIENITkFHRVM6IHNubXBkOiBmaXhlZCBzbm1wZCBleGl0aW5nIHNob3J0bHkgYWZ0ZXIgc3RhcnQgZHVlIHRvIGluY29taW5nIHNpZ25hbC4KKworY29tbWl0IGE1NzAyMzhkNThlYjVhOTk2YjU2ZjAxYTI3YTE4ZGY2ZjM3ZDBmNjAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSnVuIDExIDE0OjIwOjI1IDIwMTIgKzAyMDAKKworICAgIE1vcmUgcHJlY2lzZWx5IGRlc2NyaWJlIC1jIG9wdGlvbi4KKworY29tbWl0IDQ4Y2MzOWYxYWEwZmE2Y2U5NTVlZjc2YjI1ZGI4ZjlkY2EwNmI4MGQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwOToyNzoxMCAyMDEyIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjIucHJlMQorCitjb21taXQgODEwMTg1YWUwYjBjZDJhZDRkNDI0YTFiYTc3NWVmNWNlYWY1MGYwMworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IEp1biAyIDA5OjI0OjE5IDIwMTIgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMi5wcmUxCisKK2NvbW1pdCA2MjcxNDcxZTAxMjgyZjM2NzU3MjRlYWYxMzU4Y2ViMGU5NWRkZDRlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDg6MzI6NDAgMjAxMiAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMi5wcmUxCisKK2NvbW1pdCBmY2I3ODJhYTg4OTMxMzRjNzQxNGE5MjZkOTI2ODU5NGY3MjViOTE1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDg6MzI6MTggMjAxMiAtMDcwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IGUzYmNkODdjNzJmY2VhNzcwNmU4NjhiNWFjZTc1Mjk2MDkzZjc0OTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDE0OjA5OjQyIDIwMTIgKzAxMDAKKworICAgIEZpeCBkaXN0L3JlbGVhc2UgZm9ybWF0CisKK2NvbW1pdCBkODEzY2UyZWVlZmM2ODIyOWNmY2FmMjA2MDMyNDRjZGQ2ZDA5ZDNjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxNDowNzo1MiAyMDEyICswMTAwCisKKyAgICBGaXggZGlzdC9yZWxlYXNlIGZvcm1hdAorCitjb21taXQgZmE3YmQ1ODFlMzc4MzY4NWRiMzljOWI0ZWFmODQ3YmU1YWM4NmZkMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6NTM6MTAgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMgorCitjb21taXQgMDczOWUyMzgyZDMxMTQ2YWNhMzIwNTI0NGNmNzA3ODhiNDBhNDI4ZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6NTE6NDUgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMgorCitjb21taXQgZDlhMTU0NDVhYTc0ZjUzMTZiZmM3MTFjMTU1ODQ2Nzg3MmMyOTU4YworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6NTA6MTIgMjAxMiArMDEwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNi4yLnJjMgorCitjb21taXQgYmNhYmQyYzk1NDJkYmViZDFkMzE5YjQ0OTQ0MTNiZGNjYTA2NjE0ZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6Mzg6MzggMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTYtcGF0Y2hlcworCitjb21taXQgYjQ3Mzg5OGMwYzVhYzllYjQ3YzdjMDVhM2Y3NDVlNGZmMmE3NmFhYQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6Mzg6MjggMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5yYzIKKworY29tbWl0IDEzMTQyOWU3MDYyZmJhYTY1YjgyYWZmZWQxZmI5MmRmMmMwY2M4MTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjM4OjM4IDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS02LXBhdGNoZXMKKworY29tbWl0IDFjODExMGIzM2I4MTA1Y2E2MTkwOTQ1YTM1ZmU3YWU5MDMyNTJkNjgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjIxOjM4IDIwMTIgKzAxMDAKKworICAgIEF2b2lkIHBlcmwgdmVyc2lvbmluZyBwcm9ibGVtcyB3aGVuIHNldHRpbmcgdXAgdGhlIGJ1aWxkIGVudmlyb25tZW50CisKK2NvbW1pdCA1MDhlY2UxNmU2ZjZmNDk1NjJkYTIwNDc5MmFlMDY0NDI2OTk5NGQxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzoyMDo1OCAyMDEyICswMTAwCisKKyAgICBGaXggaGFuZGxpbmcgb2YgZGlzdC9yZWxlYXNlIG1lcmdlCisKK2NvbW1pdCA1YjhhODU0N2IxYTQ3ZDJmNWIyMDdmNDhmMjQ5NmU0MjQxZDkwMmM2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMToxMDo0OCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucmMyCisKK2NvbW1pdCA2YzMyOTE0YmYyOGQ2OTVkZjM0OWRjYTI2OWU0ODhiNTAxNzAwMzE2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMTowNzoyMiAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucmMyCisKK2NvbW1pdCA5ZjVhODJhNWFmZGJiM2RhZWIyZmQ0MzdhMzA5ZjBiOGQzNTdjZjRiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMTowNTozOSAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucmMyCisKK2NvbW1pdCAzOTIwM2YyOTQ3N2EzYmVkZjAxMmQ0MTEzNWQ4YWJkNmJjYWQwOGIxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMDo1NDoyNyAyMDEyICswMTAwCisKKyAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZSBmb3IgNS41LjIucmMyCisKK2NvbW1pdCAxN2U3OWVmMGZhZDc5NjA5YzViYTJmZWI0ZThiOWViNWQ3ZGI2ODg2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMDo0NjoxMSAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCA1ODIxYmU1YmJiNDAxOGRlZDI4MmZiYmJkNDgzMGNmMmVlYWRkOWUxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMDo0NTo1OSAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yLnJjMgorCitjb21taXQgM2YyMTExZGU2NzMzYTA0ZTEyZDkxMGQzMDZhMzRkNjcxZTAwODc2MgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTA6NDY6MTEgMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTUtcGF0Y2hlcworCitjb21taXQgY2NmOGZmMmM0ZGI2MDEyMmQ0MTMwMmU0YWViNzAwZTBiODY4MTA1ZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgMjggMTA6MTg6NDMgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzUyNjU5OTogRG9uJ3QgaGFuZyBvbiByZXRyaWVkIGZhaWxpbmcgU05NUHYzIHJlc3BvbnNlcworCitjb21taXQgYzgxYzg0ODM5OTA5MTFmNDc0MzVkMzAwNTI1NWQ5MWMzN2FiOTJiMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1heSAyNyAxNDowOToyNiAyMDEyICswMjAwCisKKyAgICBGaXggQlNEIHRoYXQgZG93bm5vdCBhbHdheXMgbGlrZSBJUF9TRU5EU1JDQUREUiAtIHNvIHJldHJ5IHdpdGhvdXQKKworY29tbWl0IGZmY2UxZjJkYzJmOGIzMWFiZDAxZjkzYjI2ZGE3OGY0NzI2YTFlNjQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBNYXkgMjcgMTQ6MDM6NTggMjAxMiArMDIwMAorCisgICAgRml4IE9TIG1pc3NpbmcgTVNHX0RPTlRXQUlUIChBSVgpLiBCYWNrcG9ydCBmcm9tIDUuNworCitjb21taXQgYzU3NTIxNjg1MDE4NWI1NjQ1NGRhZDAyNTNlMzE2NDk3OWUxMzUxMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1heSAyNyAxMzo1NjowMSAyMDEyICswMjAwCisKKyAgICBGaXggbWlzc2luZyBpbmNsdWRlLiBGaXhlcyBTSUdTRUdWIG9uIEZyZWVCU0Q5IHg2NAorCitjb21taXQgNTgwNTg3ODc0OWMwODA2MmRlYmYwYTlkNzk4ZDA4ZmI5MTZjYWEyZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1heSAyNyAwNjoyMzoxOSAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQWRkIG1pc3NpbmcgZGVidWcgdGFnCisKK2NvbW1pdCBkMWE0MmJiY2M3YjE0NzMwYzlhNmQ5OWM0ZjA0NzA5Nzg0M2E1NDliCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTWF5IDI1IDA5OjAyOjI3IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBSdW4gbGlidG9vbCAtLW1vZGU9ZmluaXNoIG9uIHRoZSByaWdodCBkaXJlY3RvcnkKKworY29tbWl0IDFmYmYzMzcxMWExOWVhYzk3MzlhZDIzZjZmNjI1MWVhY2M0MWYxYzQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWF5IDIyIDE0OjU0OjQ1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IExpbnV4OiBQQVRDSDogMzUyNTk5ODogRG9uJ3QgdXNlIGFuIHVuaW5pdGlhbGlzZWQgdmFsdWUgaW4gZXJyb3IgbWVzc2FnZQorCitjb21taXQgMzJjMTY4NmI2N2RjODVjNGExODk1NzYzNjMwNjU2MDlkZmVkNWU2MQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXkgMjIgMTQ6NTI6NTYgMjAxMiArMDEwMAorCisgICAgQXR0ZW1wdCB0byBtYXJrIHJlbGVhc2UtY2FuZGlkYXRlIGJyYW5jaGVzIGFzIHN1Y2guCisgICAgT21pdCBmaW5hbC1yZWxlYXNlLW9ubHkgc3RlcHMgd2hlbiBwcmVwYXJpbmcgcHJlTi9yY04gcmVsZWFzZXMKKyAgICAoUmVsaWVzIG9uIGEgdHdlYWsgdG8gdGhlIE1ha2VyZWxlYXNlIHBlcmwgbW9kdWxlcykKKworY29tbWl0IDRjNTYzM2YxNjAzZTRiZDAzZWQwNWMzN2Q3ODJlYzg5MTE3NTljNDcKK0F1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgorRGF0ZTogICBNb24gTWF5IDE0IDExOjQwOjA2IDIwMTIgLTA0MDAKKworICAgIE5FV1M6IHNubXA6IEJVRzogMzUyNjU0OTogQ1ZFLTIwMTItMjE0MSBBcnJheSBpbmRleCBlcnJvciBsZWFkaW5nIHRvIGNyYXNoCisKK2NvbW1pdCA2NWRkODNjMjI1NWVlNThlZGJmMGUyNTg2M2U1NWI1OGE0MTEzNjc5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDIwOjMwOjQyIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5yYzEKKworY29tbWl0IGFjNGJjNjVlMjkwOWYzYmQ4NWYzMmYwNGI1MDRmYTY1ZDJmNjQ1NTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMjA6Mjg6MDYgMjAxMiArMDEwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNi4yLnJjMQorCitjb21taXQgYjc0OTk0ODY0MTk1MTE5ZWRiNmUxOWM4NTE0N2ZhYzAwYmNiOTNlMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAyMDoxMzo0NiAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnJjMQorCitjb21taXQgOTEzNTAwOTJjNDZlNjZkMDZkNzQxNDNmNDgxNjQ3M2RiNGQyNTE2MAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxOTo1NjozMyAyMDEyICswMTAwCisKKyAgICBNYXJrIHZlcnNpb24tc3BlY2lmaWMgY2hhbmdlcyBfYmVmb3JlXyBwdXNoaW5nIHRvIGNlbnRyYWwgcmVwb3NpdG9yeQorCitjb21taXQgNzI0MWFjY2Q3MGI4MmQwZmNkNDRkNWE1MjM4YjJlZTk0NDU5MDBkYgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzo1MzoxNyAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucmMxCisKK2NvbW1pdCA3Yzc5NmExNWExZDFiYjg1ZmVlYTk0MGJkNGUzNTE2ODc3OTIwOTE5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjUwOjQ5IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IDA3ZTI2OGJmYjY0YjBlYzY0NWIzZjdlODcyNjY5ODRmOTIxN2NmMTIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6NDQ6MzcgMjAxMiArMDEwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNS4yLnJjMQorCitjb21taXQgMTZlYWFmNmMzYmExNDU5NmNhOWVmYWY0YjExNGYxYjcwOWY0MmI2OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzoyOTowMyAyMDEyICswMTAwCisKKyAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZSBmb3IgNS41LjIucmMxCisKK2NvbW1pdCBjNzI5NDY5ZWYxMjE1NDkzMGNmOWQxNTk2N2UxNjE4NmZiNDQ1ZjMwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjI3OjIwIDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIucmMxCisKK2NvbW1pdCAxNDI1NzFkM2NlYTA4ZjBjMDcyZDI0YzFkMzlhNDNjNzQ0NmY4Y2U3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjAxOjAzIDIwMTIgKzAxMDAKKworICAgIFdoZW4gYnVpbGRpbmcgYSBuZXcgcmVsZWFzZSwgdGhlIGluc3RhbGxlZCB2ZXJzaW9uIG9mIHRoZSBwZXJsCisgICAgbW9kdWxlcyBtYXkgd2VsbCBiZSBkaWZmZXJlbnQgdG8gdGhlIHZlcnNpb24gYmVpbmcgYnVpbHQuCisgICAgVGhhdCBzaG91bGQgbm90IGJyZWFrIHRoZSBidWlsZC4KKworY29tbWl0IGViYTg2YjZmN2FmZjI2MWVlMGU2MTMzNGRmNzBkZTcxNTZlNWMzY2IKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6MDE6MDMgMjAxMiArMDEwMAorCisgICAgV2hlbiBidWlsZGluZyBhIG5ldyByZWxlYXNlLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIHBlcmwKKyAgICBtb2R1bGVzIG1heSB3ZWxsIGJlIGRpZmZlcmVudCB0byB0aGUgdmVyc2lvbiBiZWluZyBidWlsdC4KKyAgICBUaGF0IHNob3VsZCBub3QgYnJlYWsgdGhlIGJ1aWxkLgorCitjb21taXQgNWMwZjY0ZDZkYjJiNTkzZjdjYzBlZDJkNGY1NWI3YzU5MmI3NzRhOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMyAyMjoyNToxNSAyMDEyICswMjAwCisKKyAgICBPbmx5IG91dHB1dCBjcHUgd2FybmluZ3Mgb25jZS4KKworY29tbWl0IGVlNThlNDgyN2I5ZmExNmU2NjM1Y2EwMDNlOGE0ZjExZGNiNWZiN2EKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBcHIgMjMgMjI6MTc6NDIgMjAxMiArMDIwMAorCisgICAgRml4IHNwZWxpbmcgaW4gZXJyb3JtZXNzYWdlLgorCitjb21taXQgMDNmNDg1ZGYyMmYyMGUxNDljZmFlOTRjNTdjYjgyZmVlY2I1ZDc0YgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMyAyMjoxMjoxMSAyMDEyICswMjAwCisKKyAgICBOb3QgYWxsIExpbnV4ZXMgdXNlIHJwbSAoZGViaWFuL3VidW50dSBjb21lcyB0byBtaW5kKQorCitjb21taXQgOTMwODM4MjI0Zjc4MTY5NmJkMzUyMjVmMjI1NjkzNDc0MTZmMWIxNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMyAyMjoxMDoxNSAyMDEyICswMjAwCisKKyAgICBDaGVjayBuZWVkIGZvciAtbG0gdG8gdXNlIHJvdW5kL2V4cAorCitjb21taXQgYTA2MDljZjFmM2E2OTE3ZDI2MzcyNTczMjI0OGNkOTM3YTQ1YWQ5NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEFwciA3IDA4OjQwOjQ0IDIwMTIgKzAyMDAKKworICAgIFJlbW92ZSBsaW1pdGF0aW9uIG9uIGNvbmZpZ3VyYXRpb24gbGluZSBsZW5ndGguCisKK2NvbW1pdCAzMDU5NzMzMzhhNjNhZTU0YzVlMDJhODYyNmZiZTlhODA2NGRjYjdlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXByIDcgMDA6MzI6MTkgMjAxMiArMDIwMAorCisgICAgUmVkdWNlIHZhcmlhYmxlIHNjb3Blcy4KKworY29tbWl0IGNjYWI0ZTlkM2VkNDI0YzM5ZDBkYzI3YmU2M2ZhNzZjNzQ2MWVhODEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBcHIgNyAwMDoxNToyMiAyMDEyICswMjAwCisKKyAgICBJbnRlcm5hbGl6ZSB0aGUgbmFtZSBhbmQgbGluZSBudW1iZXIgb2YgdGhlIGN1cnJldCBjb25maWd1cmF0aW9uIGZpbGUKKworY29tbWl0IGNmODc0YWQ3YjlkYWY0ZmNjMGQ0NmNkZDAzNDQ3NGI0NzgwMDUzNDEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBBcHIgNiAyMTo0NzoyOCAyMDEyICswMjAwCisKKyAgICBSZXBsYWNlICNpZiAoQSkgQiAjZWxzZSBCICNlbmRpZiB3aXRoIEIuCisKK2NvbW1pdCBlZjllYTY0MWJjMjkwZWVjNTA2ODViNjA1MTliMzFiZWU4YjE0YTY5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciA5IDIxOjA0OjA2IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5wcmUyCisKK2NvbW1pdCAzNWFiYTE5NTlkZTExOWYxZmI4OTIwM2MzNzEwOWFhNmYwZTIxYzU3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciA5IDIxOjAwOjQwIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5wcmUyCisKK2NvbW1pdCBlNDFmYmFmZjE4YWM5MDk1Y2Y0YTczOWEwNmVjMzlhMWE2Y2NmZGMxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciA5IDIwOjM1OjM1IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucHJlMgorCitjb21taXQgMTM3ZmU1ODJkNmNjNTYxMTQzMGRhYjQ2ZWYxNDRlZmQ4NGNmYzgwMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIEZyaSBBcHIgNiAyMDo0Njo1NiAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgY29tbWl0IDFmNGE4MjliMTgyNzVlNDk1NmNhOTFlNWVjMzcwZGYwMTVmMDYxMzMKKyAgICAoc25tcF9zdG9yZV9uZWVkZWQoKSBBUEkgaXMgbm90IGF2YWlsYWJsZSBpbiA1Lls0NV0ueCkKKworY29tbWl0IDJiN2U2NDI4OGMwMWE4YTA2MjAyNmM1MjFjYTMxYTVlODg1ZjMwY2MKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTY6MTI6MTIgMjAxMiArMDEwMAorCisgICAgRnJlZUJTRC05OiBGaXggZm9yICdjb25zdCdpZnllZCBubGlzdCBhcmd1bWVudHMKKyAgICBCYWNrcG9ydCBvZiBlZDY1ZWNhNmU3ZjljZmE3MzgwYTc4ZDU2YzAxZWQzMTQ3NDViMTY5IGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCA3ZTk1ZDgwYjY5ODA1MTI1OTY0NWMwNzRhNTNmZmQyNjRhNmZhOTE2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDE2OjA2OjU2IDIwMTIgKzAxMDAKKworICAgIEZyZWVCU0QtOTogRml4IGZvciAnY29uc3QnaWZ5ZWQgbmxpc3QgYXJndW1lbnRzCisgICAgQmFja3BvcnQgb2YgZWQ2NWVjYTZlN2Y5Y2ZhNzM4MGE3OGQ1NmMwMWVkMzE0NzQ1YjE2OSBmcm9tIFY1LTYtcGF0Y2hlcworCitjb21taXQgMWE5YjdiN2MwMmUyZGVlZmU5OTRkNTk1YTdjYzFkZDJmZmJlZWUxZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxNTo1MToyMCAyMDEyICswMTAwCisKKyAgICBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCAncmVjZW50JyBoZWFkZXIgc2h1ZmZsaW5nCisgICAgQmFja3BvcnQgb2YgYzUzZDhjMzUyNWY1OTBmMjIxM2QzNWIwZGE5NDEyMzg2MmYzZTM2NiBmcm9tIFY1LTUtcGF0Y2hlcworICAgIChQYXRjaCAjMzM2MzMwOCAtIG9taXR0aW5nIHR3ZWFrcyB0byBjb25maWd1cmUpCisKK2NvbW1pdCAzZDlkZGI0MWUyNjNiYzFhNzhmOWY5NDQwYjhkNGFkNGY4NmM4MmUxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDEwOjM2OjE4IDIwMTIgKzAxMDAKKworICAgIEZpeCB0eXBvCisgICAgQmFja3BvcnQgb2YgNWI3MDJiMDI0YjYwMTc2ZDdmNTY5OWI5MmU1NWRhNTBhOGRlYWU3MSBmcm9tIFY1LTYtcGF0Y2hlcworCitjb21taXQgMGQzNWM2MDk1NjRiNjZhMWZmZTgxNTU2ZDM3YWRmMDUwM2MzODljZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxMDoxNTowOCAyMDEyICswMTAwCisKKyAgICBQcm92aWRlIG1pc3NpbmcgZGVmaW5pdGlvbiBvZiBORVRTTk1QX1BSSW8KKyAgICAodXNlZCBpbiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMpCisKK2NvbW1pdCBhNzkxNDFhNDE5OTUzZDAxMGE2OTg5ZThiODhmNGRmMTI3Mzk0ZDM4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDA5OjE5OjI2IDIwMTIgKzAxMDAKKworICAgIEhlYWRlciBmaWRkbGluZyBmb3IgRnJlZUJTRCxPcGVuQlNELERyYWdvbmZseQorICAgIEJhY2twb3J0IG9mIGY3YjBkZTE1MTgwMDJjNmU4ZjliOTRlZjNkZWI4ODgyZTFlOTMzOGUgZnJvbSBWNS03LXBhdGNoZXMKKworY29tbWl0IGFkZjc0YmY3NTNkMzk3MDM1N2FmZDYzMzgwMzI1NjI0MWQ5YzdiODcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMDg6MjA6NDYgMjAxMiArMDEwMAorCisgICAgRml4IElQdjYgVENQICYgVURQIHRhYmxlcywgKkJTRCBzdXBwb3J0IChpbmNsdWRpbmcgT3BlbkJTRCkKKyAgICBCYWNrcG9ydCBvZiBjb21taXRzIDVjZDE1NzM2MjU0NzFjMDU4M2U5MDg3YWVjNjgwMmI3NzE1N2Q1YTIKKyAgICAgIGFuZCA1MGQ3M2YwZDU2ZmUyMmM1OTA1MzBiM2UzMDVkNDFkY2RhYzNjZTAwIGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCBkOTU1NWFjYjlmNDdjM2FhOGZkZTRiYzIwYTQ0ZDdjYTYxODFhOGE5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTdW4gTWFyIDI1IDE4OjQ4OjEyIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEF2b2lkIGRhbmdsaW5nIHBvaW50ZXJzIChiYXNlZCBvbiBwYXRjaCAzNTAzMjU5KQorCitjb21taXQgODJhOGI0N2VlOTZlNWQyOWEyYjdhYzNjYTAwNzIyZDczN2Q1YjQ3OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciAyOSAyMjozMTo1NiAyMDEyICswMjAwCisKKyAgICBSdW5uaW5nIGF1dG9oZWFkZXIgLyBhdXRvY29uZgorCitjb21taXQgOWNhOGQ5MzlhYjM5MzMwNmExZDBmMTQ2YzljYjcwZWEwY2IxOWQ0OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciAyOSAyMjozMDozOCAyMDEyICswMjAwCisKKyAgICBSdW5uaW5nIGF1dG9oZWFkZXIgLyBhdXRvY29uZgorCitjb21taXQgY2VjZDQ4NjlkZWI2OGYzZDRjNzFlNzY4ZDViNDBkZDU3NjQ0NjkyNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciAyOSAyMjoyOTozMSAyMDEyICswMjAwCisKKyAgICBSdW5uaW5nIGF1dG9oZWFkZXIgLyBhdXRvY29uZgorCitjb21taXQgYTFhNDUxM2JkM2U0ZTYxNDIwMGY2ZGI1YTAyZjYxZDZjOGVlZmIzMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBNYXIgMjggMDk6NDc6NDUgMjAxMiArMDEwMAorCisgICAgRG94eWdlbi1zdHlsZSBkb2N1bWVudGF0aW9uIGZpeGVzIChiYWNrcG9ydCBvZiBnaXQgY29tbWl0IGMwOTkwM2E0MmU5ZDk3MzMxZmQ5ZTQ4ZWU4MzFhODVhZmRmOWM3MGEpCisKK2NvbW1pdCA5YmRiY2NhMTIyYzM3ZGEzMDRmYzZhYTY5Mzk3Mjk0NzVmOTBmNWZkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIE1hciAyOCAwOTozMDo0OSAyMDEyICswMTAwCisKKyAgICBEb3h5Z2VuLXN0eWxlIGRvY3VtZW50YXRpb24gZml4ZXMgKGJhY2stcG9ydCBvZiBHSVQgY29tbWl0IGMwOTkwM2E0MmU5ZDk3MzMxZmQ5ZTQ4ZWU4MzFhODVhZmRmOWM3MGEpCisKK2NvbW1pdCAxZjRhODI5YjE4Mjc1ZTQ5NTZjYTkxZTVlYzM3MGRmMDE1ZjA2MTMzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciAyNyAyMTo0MToyNCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ5NTY5NzogU3RvcmUgcGVyc2lzdGVudCBzbm1wVGFyZ2V0IHRhYmxlIGNoYW5nZXMKKworY29tbWl0IDFmNzVmMzc3ZDBkYjAxNzU0YzBjMTYxZGM0NDM3MzA4MWJlZWY1MjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDI3IDIxOjE0OjA2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IEZyZWVCU0Q6IFBBVENIRVM6IDM0ODkzODc6IEluc3RhbGwgRnJlZUJTRCAxMCBoZWFkZXIgZmlsZSAocGx1cyBvdGhlciBtaXNzaW5nIHZlcnNpb25zKQorCitjb21taXQgM2Q3MmM5ZTc4ZjJhZDgxN2M5ZDFkODI5NzczMjdiYmIyMGQ2M2FiOQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjcgMjE6MDY6MzEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzNDg3ODY3OiBEb24ndCBza2lwIG1pc3NpbmcgaWZYVGFibGUgZW50cmllcyAoaWZDb25uZWN0b3JQcmVzZW50IEZBTFNFKQorCitjb21taXQgMTI5MDY1NzhhYjMwY2Y3NzZkMDgwYzBlZjMwMjViMzAzMzRkNzY1NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxNjoxNzo0NSAyMDEyICswMjAwCisKKyAgICBESVNNQU4tUElORy1NSUI6IEZpeCBldmVuIG1vcmUgbWVtb3J5IGxlYWtzCisKK2NvbW1pdCBjY2ZkNWNhNmZlMTAzMTNkNjE4MWQyNGJiYjE3OTc4MjVhOTdkYTEwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE1OjUxOjE2IDIwMTIgKzAyMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogRWxpbWluYXRlIGR1cGxpY2F0ZSBjb2RlCisKK2NvbW1pdCA5ZmRhMjY2ODcyMmYwOGRkYmZkZDY3YTIyMzlkOGIwMjFkYjY0YTgzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE1OjQ4OjQ2IDIwMTIgKzAyMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogV3JpdGUgYSBsb29wIGFzIGEgbG9vcAorCitjb21taXQgY2JjMThlYjc2M2JhNmRmNjllZjcwNjY4YTU0ZDc1YmYzNWU3OTUwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxNToyNDowOCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggbW9yZSBtZW1vcnkgbGVha3MKKworY29tbWl0IGM3NzI1MTkyNDc4YWVjMDE4ZmI0YWVmYTYwOTQ2ZTA0YTQwNmMwMGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTM6NDM6MjQgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQXZvaWQgcmVhZGluZyBmcmVlZCBtZW1vcnkgd2hlbiBkZWxldGluZyBhIHJvdyBmcm9tIGEgdGFibGUKKworY29tbWl0IGE2YmU3Mzk1NjZmMzEwZDc0NDFmZDdmNTQ5ODllMzk0NDZmN2ExNDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTM6NDI6MjggMjAxMiArMDIwMAorCisgICAgRXh0ZW5kIERJU01BTi1QSU5HLU1JQiB0ZXN0CisKK2NvbW1pdCA4YTliNTcyOTE0NTNjYjhhZWMyOGU3NjZjNTk0NzAxZWQxOWM0ZmM2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDI2IDIxOjAzOjQxIDIwMTIgKzAyMDAKKworICAgIEZpeCBmb3IgRHJhZ29uRmx5IDMKKworY29tbWl0IGU1YzlhMzJmNzllYWMyZTg1NTI3YzljZjA1MDg3Y2RhZTliMzVhNmMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgMjYgMjA6NTk6NTMgMjAxMiArMDIwMAorCisgICAgRHJhZ29uRmx5IG5lZWRzIF9LRVJORUxfU1RSVUNUVVJFUyB0byBjb21waWxlIGlwdjYgY29kZQorCitjb21taXQgY2Q0M2JjMDlhMzliZDk3ZmY1ZTcxOWEyY2UyMzJjZTQyNDYwMGE2NQorQXV0aG9yOiBEYXZpZCBJbWhvZmYgPGRpbWhvZmZAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDI0IDE1OjQ3OjE3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIIDM1MTA0NTQ6IEFsbG93IHRoZSB1c2Ugb2YgMC4wLjAuMC8wIGFzIGFsaWFzIGZvciBkZWZhdWx0CisKK2NvbW1pdCBlMmZjMTVmOWU1YTZlM2UzNmJlNWY0ODk2MDFjYmY2YmY3MzE5MTdmCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDI0IDE1OjIxOjM4IDIwMTIgKzAxMDAKKworICAgIEZpeCBUQ1Agc3RhdGUgdmFsdWVzIGZvciBEcmFnb25GbHkKKworY29tbWl0IDQzMmZlM2RkZjU0ZjJjOThmOTM2OTU5NDY5Y2I5YjAxNGQ1OTlmMDYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MTA6NTIgMjAxMiArMDEwMAorCisgICAgUmVxdWlyZSBwZXJsIHRvIGRvIHBhc3NfcGVyc2lzdCB0ZXN0CisKK2NvbW1pdCAzN2QyNzcwY2Y1MGM5ODAyM2VlYmE5MGUyNWQzNzJiZmY3MzE2YWRhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlci5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MDY6NDAgMjAxMiArMDEwMAorCisgICAgRml4IFRDUCBzdGF0ZSB2YWx1ZXMgZm9yIERyYWdvbkZseQorCitjb21taXQgODZhOTQ4ZDg2OTFlODgxZDU1NTkxZGNhYmRkYzI3MzljZTcyYjMwZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQG5iYS1saW51eC5zYi5zdGF0c2JpYmxpb3Rla2V0LmRrPgorRGF0ZTogICBTYXQgTWFyIDI0IDE1OjAxOjM3IDIwMTIgKzAxMDAKKworICAgIFByb3Blcmx5IGZpbmQgcGFzcyBoZWxwZXJzIGZvciB0ZXN0aW5nLgorCitjb21taXQgZmUyNmEzYzRmMjlmMDQ2YmY2NWVkNTJlOWQ5NDA1NGI2NzVmYmM0YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyMiAwOTowNDo0MiAyMDEyICswMTAwCisKKyAgICBESVNNQU4tUElORy1NSUI6IExpbWl0IHNvdXJjZSBjb2RlIGxpbmVzIHRvIDgwIGNvbHVtbnMKKworY29tbWl0IDc0NWJhZmNkY2M5YzhlODQ2MTZkNGUyNzRkYjJhMzg0YmYyMzRkYTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBNYXIgMjIgMDg6NTU6MDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogTWFrZSBwaW5nIGltcGxlbWVudGF0aW9uIGluZGVwZW5kZW50IG9mIG50cGQgY2xvY2sganVtcHMKKworY29tbWl0IGRhNjkyNWU2NzYzY2FkYmUwMmY0YThiYmZlNjhhMzYyZTUzNWFkNWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTA6Mzg6MzYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1NGRpc21hbnBpbmdtaWJfc2ltcGxlCisKK2NvbW1pdCBmYTYwNmRkN2NhNmFmZjkzMDhkNGU4YjAxYmJjZGUxNDhmNDQxMjcxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDE2OjQ5OjIxIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IE1ha2UgcGluZ2luZyBsb2NhbCBpbnRlcmZhY2UgYWRkcmVzc2VzIHdvcmsKKworY29tbWl0IDYxN2E4M2JhNzk5NTc1Yzg0YzY2ZjZiMWM0ODBlZjYzMzE2MWE2NGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6Mjg6NDYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRml4IGEgc29ja2V0IGxlYWsgdHJpZ2dlcmVkIGJ5IHBpbmdpbmcgYSByZW1vdGUgaG9zdAorCitjb21taXQgNjI1ZjU1YzI3MmVjNjI4MWUzOGQ4ZTMwZWI1M2ZkNTE1MTZiMDBhZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyMiAwOTo1NDo1NSAyMDEyICswMTAwCisKKyAgICBESVNNQU4tUElORy1NSUI6IENvbnZlcnQgYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgdmFyaWFibGUgaW50byBhIHN0YWNrIHZhcmlhYmxlCisKK2NvbW1pdCBiNDhmMTlhZDRiNGFhNjhjM2UxNmUyYTcyZGYzN2I5YzBjZDM2YzRhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDE2OjI0OjA3IDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogQWRkIG1vcmUgZGVidWdnaW5nIHN0YXRlbWVudHMKKworY29tbWl0IGQ3NGNiMzk2NjE3NTg5MjU2MmY1ZTNhOWIxNjgzYWNiYTJjMjJlMDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTE6NDU6MTggMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRml4IHNldmVyYWwgbWVtb3J5IGxlYWtzCisKK2NvbW1pdCAwYjFhNzc2NzQ2NzhjYzlhMTViZTNlNzcwMGQzY2VmNjUwZWQwMmM3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTWFyIDIwIDEyOjAwOjMwIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IERvIG5vdCBzZW5kIHRoZSBjb250ZW50cyBvZiB0aGUgc3RhY2sgb3ZlciB0aGUgbmV0d29yaworCitjb21taXQgMTM5MDIzY2QzYWI1MTYzMWNjMTBlMjg2NmQ3MWFiY2Y5OWFlNGMxYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyMSAwODo1NjowNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBEb24ndCBjYWxsIGV4aXQoKSB1cG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUKKworY29tbWl0IDE2OWI2YWFhN2I2MTgyN2NjMWFkMGIzYWVlYWUzYTcyMjlkZDI1ZDgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDg6NTM6MjYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRml4IElQdjYgc29ja2V0IGxlYWsgaW4gZXJyb3IgcGF0aHMKKworY29tbWl0IGEwYmUzMmFkMDUzYTcxZmE5NjEzNGQ1NWU1NDJiYjA3ZDRmMDI5N2QKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTE6NDM6NDYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQXZvaWQgdGhhdCBob3N0IG5hbWUgcmVzb2x1dGlvbiBmYWlsdXJlIGNhdXNlcyBhIGNyYXNoCisKK2NvbW1pdCBiZjliZmY2NDU1Njc4N2Q3NjZlZTJlZjJkNTc4YWZiOTIwNzE5ZjNhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTWFyIDIxIDA4OjUxOjU1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IENvbnZlcnQgcHJpbnRmKCkgc3RhdGVtZW50cyBpbnRvIHNubXBfbG9nKCkgYW5kIERFQlVHTVNHKCktc3RhdGVtZW50cy4KKworY29tbWl0IDVkNzRjMDEyNDU1MjNhOWQ4ZGIxZWRhMjdkMWVmYWUyZWJjMTA0ZmIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6NDA6MDIgMjAxMiArMDEwMAorCisgICAgTmV3IE1JQjogVlJSUFYzLU1JQgorCitjb21taXQgNWIzOGYwNjJiOTliNmVmMzY3MDhlMmM3ZGU0OTY1YTMxOTI2MTJlOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODozNDo0OCAyMDEyICswMTAwCisKKyAgICBGb3Igc2FmZXR5LCBzaXplb2YgdGhlIHJpZ2h0IHZhcmlhYmxlIGluIG1lbWNweQorCitjb21taXQgZTVmODI3ODJkYTA1ZWZhN2MwZTZkYzJiZjVhNDFlZTExODY4ZjQ2OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODozMzoyMSAyMDEyICswMTAwCisKKyAgICBGaXggZm9yIGhyU1dSdW4gZGF0YSBmb3IgRnJlZUJTRAorCitjb21taXQgODMyNzU2NWU4MjMyNzBkMTBhNDUwNDU2OGVkYmU1YjVhZTMyM2E1NQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODozMTo1NCAyMDEyICswMTAwCisKKyAgICBDbGVhbiB1cCB2YXJpYWJsZXMgZm9yIE9wZW5CU0QvTmV0QlNECisKK2NvbW1pdCAxNzBmNmYwMjdiZjRmOTE3NGI3MDczNTMwZGE0ZDA3ZjQwMGJiYTU4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjI4OjU4IDIwMTIgKzAxMDAKKworICAgIE1vdmUgZGVjbGFyYXRpb25zIGluIGZyb250IG9mIHN0YXRlbWVudHMKKworY29tbWl0IGRiYjQ1NzNiNjlmYWU4NWNkYzkzMWIyODkyYjVjZTRlNWIxNmIzMjEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6MjM6MzYgMjAxMiArMDEwMAorCisgICAgUmVxdWlyZSBrZXJuZWxfbmV0YnNkIGZvciBOZXRCU0Q2CisKK2NvbW1pdCBmMTE2ODFmMTVhYWQ3ZDlhNTJmYTI5ODEyZWNiYjUwN2YxYjdmZTI0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIE1hciAyMSAxMjozNjozOCAyMDEyICswMDAwCisKKyAgICBDaGVjayBmb3Igb2xkIHRhcmJhbGxzIChhbmQgdW5wYWNrZWQgZGlzdHJpYnV0aW9ucykgYmVmb3JlIHN0YXJ0aW5nLgorICAgIFRoZXNlIGNhbiBjb25mdXNlIHN0ZXBzIHN1Y2ggYXMgIm1ha2UgZGVwZW5kY2hlY2siLCB0aGF0IGRvIGEgJ2ZpbmQnCisgICAgb24gdGhlIGN1cnJlbnQgdHJlZSwgYW5kIHdvdWxkIGRlc2NlbmQgaW50byBzdWNoIHVucGFja2VkIHNvdXJjZSB0cmVlcy4KKworY29tbWl0IDQ3MGRjZDRiNmMzZmYxMWZmMGEzNTMyYTczNDBhNTZjZmZkNjkwOTgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDIxIDEyOjMyOjEzIDIwMTIgKzAwMDAKKworICAgIERvbid0IHJ1biAibWFrZSBkb2NzOyBtYWtlIG1hbmNwIiBpZiB0aGVyZSdzIG5vIE1ha2VmaWxlIHByZXNlbnQKKworY29tbWl0IGM5YWM0MjAzNDNlMTZkZjJiNzA2NWY1YmYyNzkwZGY0NGUyNDdmYmEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDIwIDEwOjI2OjEwIDIwMTIgKzAwMDAKKworICAgIEFsbG93IGRpc3RyaWJ1dGlvbiBhcyBwYXJ0IG9mIG5vcm1hbCBOZXQtU05NUCBwYWNrYWdlcy4KKworY29tbWl0IDU5OTlmNjBjNTc3MjNmMjNmM2MyNTRhZjU3ZmRiMTBhZjMwMWE4ZWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXIgMTggMTk6MDM6MDggMjAxMiArMDEwMAorCisgICAgUmVnZW5lcmF0ZQorCitjb21taXQgMjc1ZDIwNDAzNmE2MDdlM2RmNTBlODQ0N2Q0YmM3NTVlOWRiMDJmZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEF1ZyAyOCAyMToyOTowMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgLS1kaXNhYmxlLWFwcGxpY2F0aW9ucy8tLWRpc2FibGUtYWdlbnQgdG9nZXRoZXIgd2l0aCAtLWVuYWJsZS1taW5pbWFsaXN0CisKK2NvbW1pdCBiZGNjYzg3NTcxMDI5NWFhY2Y1MGY3MWViMWMxZDJlZTk3ZjMzNmZlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTWFyIDE2IDIwOjEwOjU4IDIwMTIgKzAxMDAKKworICAgIERvIG5vdCBkZWNsYXJlIHRoZSBsb2NhbCB2YXJpYWJsZXMgZm9yIG9wYXF1ZV9zcGVjaWFsX3R5cGVzIHVubGVzcyB0aGF0IG9wdGlvbiBpcyBzZXQuCisKK2NvbW1pdCBiODBhNjdkYTA1MmFkY2ExYjVhNjQ0ZGI4M2E3ODJlMTVjMjIzN2MzCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgTWFyIDE2IDE5OjUwOjAzIDIwMTIgKzAxMDAKKworICAgIENoZWNrIHRoYXQgdGhlIGRhdGEgZXhpc3QgYmVmb3JlIHRyeWluZyB0byByZWFkIGl0CisKK2NvbW1pdCBlZmFlODZiYmE1OTYyNDkxZDQyYjc3YjkzNTE5MWEzZWIyNWRkOTM5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgTWFyIDE0IDAxOjA1OjMzIDIwMTIgKzAxMDAKKworICAgIFBhcnRpYWxseSByZXZlcnQgIk1lcmdlIHJlbW90ZSBicmFuY2ggJ29yaWdpbi9WNS03LXBhdGNoZXMnIGludG8gVjUtNy1wYXRjaGVzIgorICAgIAorICAgIENvbW1pdCBkMzVhMTg2MDIxN2U3MjNlNGY4NjZkZDk4ZWY2NjIxNjY1OTM0YzRhIGFjY2lkZW50YWxseSByZXZlcnRlZAorICAgIAorICAgIDRhMmU1YmNkNTZjZDJhZmIzNmViMTVkNzU0ZTJmZWU4ODhkZDUwYzAgKGhyaF9zdG9yYWdlIGlzIGEgcHJvcGVyIHJlcGxhY2VtZW50IGZvciBocl9zdG9yYWdlKQorICAgIDBkZDFlNTQ1NTdkMWJhNDk4YjU1ZDAxN2IwYTkzZThjY2Y5YmQ1MjIgKENIQU5HRVM6IHNubXBkOiBVRFAtTUlCOiBSZXBvcnQgdGhlIHByb3BlciBhZGRyZXNzIGluIHVkcExvY2FsQWRkcmVzcykKKyAgICA1MTE2ZDQ4Mzc4ZWNmMDNlNzIyZjMwMTBhZDQ3YmYyMmEzZmJjYjhjIChSZWR1Y2Ugc2NvcGUgb2YgcHJlZml4X3ZhbCBzdWNoIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qgd2FybiBhYm91dCBhbiB1bnNlZCB2YXJpYWJsZSkKKyAgICAxMGY1NjZmNGQ0Y2JiM2UyMDUwMjNjMjM2NjkyODllNGJmZDA4OWNiIChwZXJsL1NOTVAvU05NUC54czogRml4IGEgY29tcGlsZXIgd2FybmluZykKKyAgICAKKyAgICBhbmQgcGFydCBvZgorICAgIAorICAgIDZlNzRkNjRmODVhNTlkNTBlNDYxZGI0YzM0YWM3NmY5ZGU0NjhiZmIgKEF2b2lkIHVzaW5nIGdyZXAgb3B0aW9ucyAtcSBhbmQgLXcgYmVjYXVzZSBncmVwIGluIFNvbGFyaXMpCisgICAgCisgICAgVGhpcyByZXZlcnRzIHRob3NlIHJldmVydHMuCisKK2NvbW1pdCBhYWVkZDU5Y2MyZGE3MDE1MjdkYzJkMjYxZDRlOWY4NWYxNmU3NTA0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWFyIDExIDIwOjU3OjM4IDIwMTIgKzAxMDAKKworICAgIEFsbG93IG1ha2UgdGVzdCB3aGVyZSB0aGUgc291cmNlIHBhdGggY29udGFpbnMgdGhlIHN0cmluZyBOZXQtU05NUCB0byBzdWNjZWVkLgorCitjb21taXQgNGI5NGQ3OTY5MThhNGVlYWU2OGFiMjFhYTUzZDQ0NGE4YjVjMjkyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE1hciA5IDA4OjA0OjU5IDIwMTIgKzAxMDAKKworICAgIFVuYnJlYWsgY29tcGlsYXRpb24gb24gRnJlZUJTRCA0CisKK2NvbW1pdCAxMGZlNmI4MzMyNGFkMzdkMThiOTM3Y2M4YzZkZTk0ZGU1MzRkMDM1CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciA4IDEzOjA0OjA3IDIwMTIgKzAwMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5wcmUxCisKK2NvbW1pdCBlMTEyMmVkYzFhNWZlNzk3NmIwNjUwNDQxMzRkMzllN2RiNTk4NWVhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciA4IDEyOjQzOjE5IDIwMTIgKzAwMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5wcmUxCisKK2NvbW1pdCBhNjEzZDNhODM0OTEyMjA2ZDFiYTU5NzFlNDQxYTNlYTZiMzZhZjIzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciA4IDEyOjMzOjAzIDIwMTIgKzAwMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjYuMi5wcmUxCisKK2NvbW1pdCAwZWYzNGU2NTE5ZGZjYjgyYzk3ZGY4NDI3NTQ3YzA4ZGNmODFlNjlhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IE1hciA4IDEwOjExOjMwIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBzbm1wZCAnLWQnIG9wdGlvbi4KKyAgICAKKyAgICBOb3cgaXQgZHVtcHMgcGFja2V0cyBhZ2Fpbi4KKworY29tbWl0IDhlNjk3NDJmMTQzZTRmYzExMTk2ZTViMmVkNjZjOGY3ZjUzZmQwMmYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDYgMDk6MjQ6MjEgMjAxMiArMDAwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5wcmUxCisKK2NvbW1pdCBjNGUwMGI4YzNlMTAxMGNkY2FiNWU2YzAyZDYwZDc1ZGY5YzZkY2YyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciA2IDA5OjI0OjA1IDIwMTIgKzAwMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjYuMi5wcmUxCisKK2NvbW1pdCAzOTQ5MDEwNGEzYWI1ODIzNWFhY2UyZjlkODcxYzI2NmRjNDQ4NWVlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCA0YTJlNWJjZDU2Y2QyYWZiMzZlYjE1ZDc1NGUyZmVlODg4ZGQ1MGMwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTWFyIDUgMjA6NTk6MzggMjAxMiArMDEwMAorCisgICAgaHJoX3N0b3JhZ2UgaXMgYSBwcm9wZXIgcmVwbGFjZW1lbnQgZm9yIGhyX3N0b3JhZ2UKKworY29tbWl0IGNlODU4MzI5MzJjY2Q5MTZjNDIzMTkxMTRjNDA4ODVhNDY2YTlkMGUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAyMDo1Njo0MCAyMDEyICswMTAwCisKKyAgICBNb3JlIGZpeGVzIGZvciBTb2xhcmlzIHNoCisKK2NvbW1pdCAwZGQxZTU0NTU3ZDFiYTQ5OGI1NWQwMTdiMGE5M2U4Y2NmOWJkNTIyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDUgMTU6MDg6MjYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFVEUC1NSUI6IFJlcG9ydCB0aGUgcHJvcGVyIGFkZHJlc3MgaW4gdWRwTG9jYWxBZGRyZXNzIGluc3RlYWQgb2YgMC4wLjAuMC4gTWFrZXMgdGVzdCBUMTYwc25tcG5ldHN0YXQgcGFzcyBhZ2Fpbi4gRml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiBjb21taXQgYzc2ZmI5NmY2NWUzM2JhMmZkMjEyYTkyMWU4YzM4NjE1NWVlNWM3YS4KKworY29tbWl0IDUxODkxN2U5ZjM5ZjdhOWQzYzNiZjNhODY1ZThhYzBlMzAyNmQ2MDAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxNDowNDo1NCAyMDEyICswMTAwCisKKyAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzogRml4IHNvdXJjZSBjb2RlIGluZGVudGF0aW9uCisKK2NvbW1pdCAyNjUxOTA5Y2NjZWFiZmNmYWRhZjk0MmMwMjQ1MGUyOGZlODM3ZGM5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgTm92IDkgMTI6MDQ6MDQgMjAxMCArMDAwMAorCisgICAgUGFzc2VzIG5vdyBvbiBNaW5HVyB0b28uCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk2NTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBlNDFmMTE1ZTQwMzA0Yzk0MWJhMTdkNjdlMjQ3MTA3MjJkOTA3NDFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDUgMTM6Mzk6MTcgMjAxMiArMDEwMAorCisgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC13IGFuZCAtcSBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcycgZGVmYXVsdCBwYXRoIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGVzZS4KKworY29tbWl0IDUxMTZkNDgzNzhlY2YwM2U3MjJmMzAxMGFkNDdiZjIyYTNmYmNiOGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxMDo0NzoyMCAyMDEyICswMTAwCisKKyAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6IFJlZHVjZSBzY29wZSBvZiBwcmVmaXhfdmFsIHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCB3YXJuIGFib3V0IGFuIHVuc2VkIHZhcmlhYmxlIGlmIGl0IGlzbid0IG5lZWRlZC4KKworY29tbWl0IDZlNzRkNjRmODVhNTlkNTBlNDYxZGI0YzM0YWM3NmY5ZGU0NjhiZmIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAwOToyMjozMSAyMDEyICswMTAwCisKKyAgICB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6IEF2b2lkIHVzaW5nIGdyZXAgb3B0aW9ucyAtcSBhbmQgLXcgYmVjYXVzZSBncmVwIGluIFNvbGFyaXMnIGRlZmF1bHQgcGF0aCBkb2Vzbid0IHVuZGVyc3RhbmQgdGhlc2Ugb3B0aW9ucy4KKworY29tbWl0IDEwZjU2NmY0ZDRjYmIzZTIwNTAyM2MyMzY2OTI4OWU0YmZkMDg5Y2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxMDo0NzozOSAyMDEyICswMTAwCisKKyAgICBwZXJsL1NOTVAvU05NUC54czogRml4IGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgNDRhYTI2NTg5MWNkNTYzZjdmNDExNGVmMjVkY2Y3YWFmM2IxNGU5YQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXIgNSAwOTowNjo1MiAyMDEyICswMDAwCisKKyAgICBNYXJrIHRoZSBjaGFuZ2VzIG1ha2UgYXMgcGFydCBvZiB0aGUgcmVsZWFzZSBwcm9jZXNzIGFzIHNwZWNpZmljIHRvCisgICAgdGhlIHBhcnRpY3VsYXIgYnJhbmNoIGJlaW5nIHJlbGVhc2VkLiAgVmVyc2lvbiB0YWdzLCBjaGFuZ2Vsb2cgZW50cmllcworICAgIGFuZCB0aGUgbGlrZSBzaG91bGRuJ3QgcHJvcGFnYXRlIHRvIGxhdGVyIGJyYW5jaGVzLgorCitjb21taXQgZGFlNGUxNmJlODYxMTc4NjFmNjNkMWEyZjk4MWFkMzYxNDE4ZjVjNgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXIgNSAwOTowNjo1MiAyMDEyICswMDAwCisKKyAgICBNYXJrIHRoZSBjaGFuZ2VzIG1ha2UgYXMgcGFydCBvZiB0aGUgcmVsZWFzZSBwcm9jZXNzIGFzIHNwZWNpZmljIHRvCisgICAgdGhlIHBhcnRpY3VsYXIgYnJhbmNoIGJlaW5nIHJlbGVhc2VkLiAgVmVyc2lvbiB0YWdzLCBjaGFuZ2Vsb2cgZW50cmllcworICAgIGFuZCB0aGUgbGlrZSBzaG91bGRuJ3QgcHJvcGFnYXRlIHRvIGxhdGVyIGJyYW5jaGVzLgorCitjb21taXQgMjhmNjIyNmYyZTIyOGI4Y2EyNDg0ODk3MzVmODY1MDJiMmNjZTBhMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXIgNSAwOTowNjo1MiAyMDEyICswMDAwCisKKyAgICBNYXJrIHRoZSBjaGFuZ2VzIG1ha2UgYXMgcGFydCBvZiB0aGUgcmVsZWFzZSBwcm9jZXNzIGFzIHNwZWNpZmljIHRvCisgICAgdGhlIHBhcnRpY3VsYXIgYnJhbmNoIGJlaW5nIHJlbGVhc2VkLiAgVmVyc2lvbiB0YWdzLCBjaGFuZ2Vsb2cgZW50cmllcworICAgIGFuZCB0aGUgbGlrZSBzaG91bGRuJ3QgcHJvcGFnYXRlIHRvIGxhdGVyIGJyYW5jaGVzLgorCitjb21taXQgNDAwMjJhNjk3OTU4MjU5Y2NmYmIzZmVkNDRlYjNjNDcyZjVlODM3ZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1hciA0IDEwOjM3OjQxIDIwMTIgKzAxMDAKKworICAgIFNvbGFyaXMgc2ggZG9lcyBub3QgdW5kZXJzdGFuZCAidGVzdCAtZSIKKworY29tbWl0IDc3M2FmMGM0MmUwNzdiZWJkYWVjZjFjMGNhZjM5MzI4NWE3Njg4ZjEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMyAxNzoxOTozMCAyMDEyICswMTAwCisKKyAgICBDbGVhbiB1cCBuc3JvbGx1cCBjb21wbGljYXRpb25zCisKK2NvbW1pdCBlZTcxMDQ5YzNlMjFjMWQwZTM0MjQyOTcxMzY2NTJiYmUwZTM5ZDg1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDMgMTY6NDk6NDEgMjAxMiArMDEwMAorCisgICAgbWliZ3JvdXAvaWNtcC5jOiBhZGp1c3QgaWZkZWZzIHRvIG1ha2UgaXQgY29tcGlsZSBvbiBCU0QncworCitjb21taXQgY2U5NjAwMzYxZTY2NWRkZTE3YWY5ZDhhYjE2ZDdjZTg1ZGMwNTY0MworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjM5OjU1IDIwMTIgKzAxMDAKKworICAgIGRvdDNTdGF0c1RhYmxlIGhhcyBidWdzIDotKAorCitjb21taXQgZGZmYWNmNmZhMDc1NWUxNzAwY2JhYzI1Yjg0NDE4NWFiZDgwN2EwYQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjM4OjEwIDIwMTIgKzAxMDAKKworICAgIHBhc3NwZXJzaXN0IHRlc3QgbmVlZHMgL3Vzci9iaW4vcGVybAorCitjb21taXQgODcyNjk5NWM3YThhZWY2NzRjNGYxNjRiMTg3MWMzN2JiZGNkYWQ1MAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjM2OjU4IDIwMTIgKzAxMDAKKworICAgIGdyZXAgLXcgZmFpbHMgd2l0aCBPcGVuQlNEIGFuZCBTb2xhcmlzIDEwLTY0CisKK2NvbW1pdCAxZWI0NzQ1YjIzY2MzYTgzOTg2NGU3ZjZlYTI4MzU1YjA1NjZlYjY3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzU6NDkgMjAxMiArMDEwMAorCisgICAgU29sYXJpcyBuZWVkcyAvdXNyL3hwZzQvYmluL2dyZXAgdG8gdW5kZXJzdGFuZCAtcQorCitjb21taXQgOTk1NGI0Yjc0MWZkOGM2M2Q2MTI4YmQwNTI3Mjk4YzhlNGU5ODlmYworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjM0OjQ1IDIwMTIgKzAxMDAKKworICAgIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBwcm9wZXIgc3JjZGlyIGZvciBvdXQtb2Ytc291cmNlIGJ1aWxkcworCitjb21taXQgNzgzNjkwMDJiZTI3MTFmMGFhODc2YjY0YTRlMTBiMDkwY2MyNDFjZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjMzOjMxIDIwMTIgKzAxMDAKKworICAgIE5vdCBhbGwgbWFrZSB2ZXJzaW9ucyBkZWZpbmUgJChSTSkKKworY29tbWl0IDk0MjQ1YjI5YTNjZGE4OTQ3NWM2ZWFiNWQ5NDkzYzY2NTdmZjM4ZTMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMToyNDoyNCAyMDEyICswMTAwCisKKyAgICBNYWtlIGF1dG9jb25mIDIuNjggaGFwcHkKKworY29tbWl0IDQ0YWNkNmMyODVmYjU2MTRiNGM5NjExYjFhYmRlY2E5ZGQyOGU0YmIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMToxMjo0NyAyMDEyICswMTAwCisKKyAgICBGaXggc3BlbGxpbmcgb2YgbWliIG1vZHVsZSBmc3lzX2dldGZzc3RhdHMKKworY29tbWl0IDFmYTFmZWUzNjkzZjY3YjgyMDIyMzgwNmIzZDczYWZkNGM1MGVjMTgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMiAwMTozNzoyMCAyMDEyICswMTAwCisKKyAgICBTaWxlbmNlIGEgY2xhbmcgd2FybmluZy4KKworY29tbWl0IDkzMjYzYjk4YTVkYjM0NGNmMmM0ZDQ4OWM0Mzk3MWU3YjI5Y2RiMDMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTM6Mzc6MjAgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnByZTEKKworY29tbWl0IDVhMTc1NDI4Yjk3M2QyZWE4NTUzZTI5ZmVjZjk0Y2YxNTY2YWE4NTgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTE6NDg6MTggMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnByZTEKKworY29tbWl0IDM2NDI3NmExYzVhYTY2Y2FhMjNlYjViN2YxMTFmZGViNWFmNzFmYTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTE6NDU6MTAgMjAxMiArMDAwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNS4yLnByZTEKKworY29tbWl0IDczNTk4MzQwMTcyZWZmNzU3MjlhNmQ1NzE5MmI4MTcxZDViYmYwMGUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTA6NDI6NTYgMjAxMiArMDAwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMi5wcmUxCisKK2NvbW1pdCBmMzIxNDQwMjY3MmNhMTk5ZmQ1MzFlNjYxMjJiZjk2YzRkOWE0ZWI3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1hciAxIDEwOjQyOjM5IDIwMTIgKzAwMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5wcmUxCisKK2NvbW1pdCAyZTc0YWNiNmYxOWU0NzI5Y2VkZTBhYjQzZTkzMTk2MWNiMjNhYWVhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgTWFyIDEgMDk6MTg6MzkgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogQnVnIDMxNTI4NDE6IERvIG5vdCBpbnN0YWxsIHRoZSB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMgdGhhdCB3ZXJlIHJlbW92ZWQgaW4gNS43CisKK2NvbW1pdCBiNzEwOTY0NmI5NWE3MDcxM2QxYWQ5OTFkNDFiY2NkNTdjMGJiM2ViCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgTWFyIDEgMDg6NDg6NDggMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogQnVnIDMxNTI4NDE6IEluc3RhbGwgdXRpbF9mdW5jcyBzdWJoZWFkZXJzIGludHJvZHVjZWQgaW4gNS42CisKK2NvbW1pdCA0MzJjYmI3YTU1MDFhYjkwZDY2ZDBhODNlNzMxZTczNDNiYzA0YjM3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRmViIDI1IDEwOjEzOjE1IDIwMTIgKzAxMDAKKworICAgIENvcnJlY3QgdHlwb3MKKworY29tbWl0IDZhNmM5YmJjNzU4NGYxOTZhMTE4NWNjMTkzNTIwNGYxMjA2ODExZWQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBGZWIgMjkgMDg6NTU6MzUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogQnVnIDMxNTI4NDE6IEluc3RhbGwgdXRpbF9mdW5jcyBzdWJoZWFkZXJzCisKK2NvbW1pdCBkNTE1ZTJhNmU0YzJhMWM0ZDg0NzM0Y2M3YjJkMGIyZmM1YTg5NGFkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxNTo1NjoyMSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ4NzkxOTogRml4IGNvbXBpbGF0aW9uIHdoZW4gY2FjaGluZyBpcyBkaXNhYmxlZAorCitjb21taXQgYWY4MzY4ZWQ4ODk4YTc4ZDA4NjhiNDdhZjQ2YmM5ZGIwN2QxYzc2NAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTU6NTA6NTYgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzQxNDc3MzogRW5jb2RlIGludGVnZXIgdmFsdWUgdXNpbmcgQVNOX0lOVEVHRVIKKworY29tbWl0IDE5ZTI3MTU4MDdmZTA2ZmQwYmFlZGY4ODE2NTAxMWFlZTkzM2U3NTUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDE0OjA1OjM0IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IG1hbjogQlVHUzogMzQ5MDcwODogQ2xhcmlmeSB1c2Ugb2YgY29tbW9uIGNvbW1hbmQtbGluZSBvcHRpb25zCisKK2NvbW1pdCA2NWY3OTYyZjkzMmM5Yjc1YzViYmJiMDQ3ZDFlMjZhZTYwOTc4ZTUzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMjoyMzozNCAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHUzogMzQ4OTYzMTogRml4IGluY29ycmVjdCBoYW5kbGluZyBvZiBVQ0QgbW9uaXRvcmluZyBmbGFnCisKK2NvbW1pdCBhYzE2NjA1MWI2YTA5MmRkNGE1OTQzMjZlYzg1ZTJmNjk5YjYyNTQ3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMTo1Nzo0MSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBCVUdTOiAzNDc0NTkwOiBEb24ndCBtYXRjaCB1bmRlcnNjb3JlcyB3aXRoaW4gdGhlIHNvdXJjZSByb290IGZpbGVuYW1lCisKK2NvbW1pdCA4NzliZjcwNzlkMzRmYTQ2ZjZmY2Y1NGEwMWM4NTAwYmVhZWNlNTlhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDo0NDo0MSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHUzogMzQ2MDM2NDogRml4IHVzZSBvZiBibG9jayBmYWN0b3Igd2hlbiBkZXRlY3RpbmcgZXJyb3IgY29uZGl0aW9ucworCitjb21taXQgMDM0ZjFjNTcyZjY4M2VhNDI4NTgzMDc0NDcxZTVkNWQxM2I1MTgzNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTA6MjI6MjAgMjAxMiArMDAwMAorCisgICAgU2tpcCBTRVQtYmFzZWQgdGVzdHMgd2hlbiBjb25maWd1cmVkIHVzaW5nIC0tZW5hYmxlLXJlYWQtb25seQorCitjb21taXQgMzY0MjNlMjEwYmZiNjVlZjEyMWM2YTY2YWVjNDM4YzdjMjM3ZDNkZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTA6MDM6MjUgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNDU0MTY4OiBjb25maWd1cmU6IEZpeCBidWlsZGluZyB3aXRoIC0tZW5hYmxlLXJlYWQtb25seQorCitjb21taXQgZWVkMGJjYmM0M2ZlYTE4MjU5ZjBmNjNiMjA4MWI2ZDEwNTM1YTA1MgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMDk6Mjc6MTEgMjAxMiArMDAwMAorCisgICAgU2tpcCBTRVQtYmFzZWQgYmFieS1zdGVwcyB3aGVuIGNvbXBpbGVkIHdpdGggLS1kaXNhYmxlLXNldC1zdXBwb3J0LgorICAgIEluc3BpcmVkIGJ5IGJ1ZyAjMzQ1NDE2OAorCitjb21taXQgZWM2YTIzMDMwZTVhMjA3MmMxOWMxOGMxZDljMTI0Mzg3ZGE1NmI3YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiAyNyAxODo0Mjo1OCAyMDEyICswMDAwCisKKyAgICBBZGQgLWxydCB0byBORVRTTk1QTElCUyBzdWNoIHRoYXQgY2xvY2tfZ2V0dGltZSgpIGNhbiBiZSBmb3VuZAorCitjb21taXQgZjEzMzIwNTAwMjk0YmIyNDBmNjNjNmRkN2QyZTlhMjIwOGViNzQwZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBGZWIgMjcgMTY6NTI6NTEgMjAxMiArMDAwMAorCisgICAgU2tpcCBTRVQtYmFzZWQgdGVzdHMgd2hlbiBjb21waWxlZCB1c2luZyAtLWRpc2FibGUtc2V0LXN1cHBvcnQKKworY29tbWl0IGM0Mjc2YjYyMzJjMjkxNDVjMDM5ODg0ZTZiNWE2YjZkYTRiOTM4MzcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gRmViIDI3IDE1OjU0OjQ1IDIwMTIgKzAwMDAKKworICAgIE9taXQgU0VULXJlbGF0ZWQgY29kZSB3aGVuIGNvbXBpbGluZyB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydCAoaW5zcGlyZWQgYnkgcGF0Y2ggIzM0MjQ5MzApCisKK2NvbW1pdCAwMWM5MzBlZGNjMjU3MDBkNmI1ZmIwMzc2ZjU1YTI2NDI1ZTEzZmIwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEZlYiAyNyAxNToxNzoyMiAyMDEyICswMDAwCisKKyAgICBPbWl0IFNFVC1yZWxhdGVkIGNvZGUgd2hlbiBjb21waWxpbmcgd2l0aCAtLWRpc2FibGUtc2V0LXN1cHBvcnQKKyAgICAoaW5zcGlyZWQgYnkgcGF0Y2ggIzM0MjQ5MzApCisKK2NvbW1pdCA5NDg0ZDgzMjAzYzRlMmQ4MjA0MTZiZTY2NWZhODMzYWE3MDQ0NGQyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgRmViIDI0IDE0OjAwOjMyIDIwMTIgKzAxMDAKKworICAgIFJld29yayBjb21taXQgYjRhMTk1MDVhMDU4MTZlOTRlMDFkZTk3YmY5OWFjMzdmY2RjNmQyMy4KKworY29tbWl0IDJiN2YxMzQ5NTIyODYzNWQ4MTZlNThiMjE3NGRjMTI0ZGQwY2YzOWYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBGZWIgMjQgMDc6NDM6MjIgMjAxMiAtMDgwMAorCisgICAgc2V0IE1FUkdFX0FVVE9FRElUIGJlZm9yZSBtZXJnaW5nIHRvIGF2b2lkIHRoZSBmdXR1cmUgZ2l0IDEuNy4xMCBmb3JjZWQgbXNnCisKK2NvbW1pdCBlMWI5MTBiMGJlOTM0MzU4NmFlOWVkYmE2ZjQ2MDQwYWYzMTVmY2RkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIzIDEwOjI3OjU0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBpbml0X2FnZW50KCkgKyBpbml0X2ttZW0oKTogUmV0dXJuIGFuIGVycm9yIHZhbHVlIGluc3RlYWQgb2YgaW52b2tpbmcgZXhpdCgpIGlmIGFjY2VzcyB0byBrZXJuZWwgdmlydHVhbCBtZW1vcnkgaXMgZGVuaWVkCisKK2NvbW1pdCA0NjNlZWQyMTIwZjlkMTkxYmMyMjY3MzQ5NmE0OWU4MTc0NjY0ZTRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIzIDEwOjAzOjMxIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZSBvYnNvbGV0ZSBzeW1ib2wgTkVUU05NUF9FWElUX09OX0JBRF9LTFJFQUQKKworY29tbWl0IGMzNmFiNzFhNGUwOTZmMTZjYzVhNTU1MzNmMDgwYzlhOTQwMDk5MTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMDg6NTM6NTYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogRnJlZUJTRDogc25tcGQgKyBhcHBzOiBTZW5kaW5nIFVEUCBwYWNrZXRzIHdvcmtzIGFnYWluIGZvciBub24tcm9vdCB1c2VycworCitjb21taXQgZWRlYmRkYmE5MzBmOGIxNDcyZmEwYmQyMGZjNDEzZWY4Y2Y0NjRhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEZlYiAyMSAxMTozMTo0NiAyMDEyICswMTAwCisKKyAgICB0ZXN0aW5nL1JVTlRFU1RTOiBGaXggYSBiYXNoaXNtCisKK2NvbW1pdCBiNGExOTUwNWEwNTgxNmU5NGUwMWRlOTdiZjk5YWMzN2ZjZGM2ZDIzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDIwIDE2OjU4OjQ3IDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCAlbGQgdmVyc3VzIHRpbWVfdCBvbiBzeXN0ZW1zIHdoZXJlIHRpbWVfdCBpcyBhIHN5bm9ueW0gZm9yIGxvbmcgbG9uZyBpbnN0ZWFkIG9mIGxvbmcuCisKK2NvbW1pdCBkODk3OGVjYzgyMTFiZTdjMWU3OTA1ZjFlMjE1YmIwNmRlZDI2NmI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgRmViIDIxIDEyOjMyOjI1IDIwMTIgKzAxMDAKKworICAgIEZpeCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYyBmaWxlIGhlYWRlcgorCitjb21taXQgYWE3NjZkMTk2ZTUyODdmNmNhNzliNThhMzQ1YjAyNDI2MGFiYTM1NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiAyMCAxNzowNzoxMyAyMDEyICswMTAwCisKKyAgICBJRi1NSUI6IGRvIG5vdCB0cmlnZ2VyIHVuZGVmaW5lZCBiZWhhdmlvciAoPj4gMzIgb2YgYSAzMi1iaXQgdmFyaWFibGUpIHdoZW4gdXBkYXRpbmcgYSBjb3VudGVyIGFuZCBpZmlfaXBhY2tldHMgaXMgYSAzMi1iaXQgdmFyaWFibGUKKworY29tbWl0IGMzZmI2ZGQ5ZTZiOTllOTU0MjQ5MzE4ODk4Nzg3MWZjNTAxN2NiM2MKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMDk6NDU6NDUgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBvbiBzeXN0ZW1zIHdoZXJlIG1vZGVfdCBpcyB1bnNpZ25lZAorCitjb21taXQgZjhhM2VmMGQzZDRlNTMwMjc5OTAwMTAxMDQ5YjhkZTk4YTQ0YTZmYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjQ4OjUyIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWIgKyBzbm1wZCArIHNubXB3YWxrOiBBdm9pZCB0aGF0IHN5c3RlbSBjbG9jayBjaGFuZ2VzIChlLmcuIGJ5IG50cGQpIGFmZmVjdCBjb2RlIHRoYXQgbmVlZHMgcmVsYXRpdmUgdGltZQorICAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHN1cmUgdGhhdCB0aGUgcmFuZ2Ugb2YgdGhlIFNOTVB2MyB2YXJpYWJsZSBzbm1wRW5naW5lVGltZSBpcyAwLi4yMTQ3NDgzNjQ3IG9uIGFsbCBzdXBwb3J0ZWQgc3lzdGVtcyBpbnN0ZWFkIG9mIDAuLjQyOTQ5NjcyIG9uIHNvbWUgc3lzdGVtcyAoaS5lLiB3cmFwYXJvdW5kIGFmdGVyIDQ5NyBkYXlzKQorICAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soKSwgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigpLCBuZXRzbm1wX3JlYWR5X21vbm90b25pYygpLCBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCkKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBEZXByZWNhdGUgYXRpbWVfZGlmZigpLCBhdGltZV9uZXdNYXJrZXIoKSwgYXRpbWVfcmVhZHkoKSwgYXRpbWVfc2V0TWFya2VyKCksIG1hcmtlcl90dGlja3MoKSwgbmV0c25tcF9tYXJrZXJfdXB0aW1lKCksIG5ldHNubXBfdGltZXZhbF91cHRpbWUoKSwgdGltZXZhbF90dGlja3MoKSwgdWF0aW1lX2RpZmYoKSwgdWF0aW1lX2hkaWZmKCkgYW5kIHVhdGltZV9yZWFkeSgpLgorICAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZSB0aGUgbmFtZXMgb2YgdGhlIHN0cnVjdCB0aW1ldmFsIG1lbWJlcnMgb2YgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd2VyZSB1c2VkIHRvIHN0b3JlIGEgd2FsbCBjbG9jayB0aW1lIGJ1dCB0aGF0IGRvIG5vdyBjb250YWluIGEgbW9ub3RvbmljIGNsb2NrIHZhbHVlCisKK2NvbW1pdCBjMTk3NjBmMzMzM2M5MmZhYzVkNTBlOTc2OGNkZjkzOTIxOGJjNDg3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgRmViIDE1IDA5OjQ1OjAzIDIwMTIgKzAxMDAKKworICAgIHNubXBsaWIvc25tcHYzLmM6IEZpeCBzb3VyY2UgY29kZSBpbmRlbnRhdGlvbgorCitjb21taXQgYTZkYjIzOTk0NWUxOTVkZTVhOTBmYTE4MzcwMGIyN2E2ZWNiMjhkMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEZlYiA3IDAwOjExOjE0IDIwMTIgKzAxMDAKKworICAgIEZpeCBwb3NzaWJsZSBtZW1vcnkgbGVhayBmcm9tIHJlY2VudCBkZWNsYXJhdGlvbnMgcGF0Y2gKKworY29tbWl0IDBmYmJiOWE5ZTI5MDZhN2FmOTU2OTU3MDYxZDQ4NTg3NDQ2MmFlYTkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgNiAyMDo0MzowNCAyMDEyICswMTAwCisKKyAgICBEbyBub3QgbWl4IGRlY2xhcmF0aW9ucyBhbmQgc3RhdGVtZW50cworCitjb21taXQgZjMwOGQ1YmFmYjA1ZDc4ZWQ0MDMwYzRlY2ZmMzI0YjZjYmRhNjgwZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE1OjI1OjMwIDIwMTIgKzAxMDAKKworICAgIEZpeCB0d28gY29tcGlsZXIgd2FybmluZ3MgaW4gYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMKKworY29tbWl0IDQ2ZjBmYzFiN2ZjMjZhMjI1NzYzYmM2NWNjYTUyMGExYzU5ZjAyNTEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBGZWIgNiAyMDo1NDozMiAyMDEyICswMTAwCisKKyAgICBzZW5kbXNnIGRvZXMgbm90IGxpa2UgSVBfU0VORFNSQ0FERFIgaWYgYWRkciBpcyBJTkFERFJfQU5ZCisKK2NvbW1pdCBkZWJhYzQ5OGZlODQxMDExMDEwN2EyZmU2NGY4YWZiNzQ4ZWRhYTA3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDE2OjQ4OjA5IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IGFkZGVkIE9DRlMyIChPcmFjbGUgQ2x1c3RlciBGUykgdG8gaHJTdG9yYWdlVGFibGUgYW5kIGhyRlNUYWJsZQorCitjb21taXQgZmFmYzk5Y2Q4OWU3M2VjN2UwMGJmNzM2MGQwYjRmYTYxOTQ0YTRmNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDExOjE4OjM0IDIwMTIgKzAxMDAKKworICAgIFNpbXBsaWZ5IGNhbGN1bGF0ZV90aW1lX2RpZmYoKSBhbmQgY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigpCisKK2NvbW1pdCA3YWYyMDEzZGU4YmYxYjM3OWMwNzZkYjRlMTA0NTA4ZTE3ODc0ZDNlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NTU6NTggMjAxMiArMDEwMAorCisgICAgRml4IG9yZGVyIG9mIGZlYXR1cmUgI2lmbmRlZiBhbmQgRG94eWdlbiBjb21tZW50IGJsb2NrCisKK2NvbW1pdCBiYmQ2N2Y2MzUzMGY1ZWYwYmZjOTQ4ZmM1OGRmZTZhOTNmOGY4Njc5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTU6MjU6MzAgMjAxMiArMDEwMAorCisgICAgRml4IHR3byBjb21waWxlciB3YXJuaW5ncyBpbiBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYworCitjb21taXQgNDJhNjZhZWZmMjViOWU5ZWY2MzVhNDA0YWQyZjUyMTJmOWU4Y2YwZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjQ3OjU0IDIwMTIgKzAxMDAKKworICAgIFJlbmFtZSB0d28gZnVuY3Rpb24gYXJndW1lbnRzCisKK2NvbW1pdCAzZmU3MmIzYjk5YjdlNGIyYjk4MjM2M2RmYzRmMmQ4ZDEzZjQwNTkyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTM6NDk6MjIgMjAxMiArMDEwMAorCisgICAgQ29udmVydCBzbm1wX3NlbGVjdF9pbmZvKCkgZG9jdW1lbnRhdGlvbiB0byBEb3h5Z2VuIGZvcm1hdAorCitjb21taXQgZTlkYjI2NmFlNDhkMDVhN2E2Y2I1ZDcxYjRiZGVhN2FkODA4ZWY1ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDExOjE3OjU3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbmV0c25tcF9nZXRfbmV4dF9hbGFybV90aW1lKCkKKworY29tbWl0IGQwODA0NGNiOWU1NzAyZmJmNTQ5ZTE0NDI1ZjQyNzk0MjU5ZDhhMjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAwOTozODowNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQWRkIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKQorCitjb21taXQgYTA1YzI3YzI3MTFjYjQxNTgyYTNiNGMzMWUzOGIwZTkzNTMwYjYyZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjUxOjMzIDIwMTIgKzAxMDAKKworICAgIEZpeCBzcGVsbGluZyBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQKKworY29tbWl0IDkxMGQ3YjBkOTkxODM2MDliOTUyOWIwNGMzZjI5MzMwZWI2NjEwMjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDozODoxMiAyMDEyICswMTAwCisKKyAgICBSZXBsYWNlIG5ldHNubXBfdGltZXZhbF91cHRpbWUoKSBieSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKQorCitjb21taXQgNDNhODNmNmM2YTk2Y2MyMzE2YjcwZWVjYWNmMTI3ZWI2OTEzYzdhNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDExOjE5OjE1IDIwMTIgKzAxMDAKKworICAgIFVzZSB0aGUgYXNzaWdubWVudCBvcGVyYXRvciBpbnN0ZWFkIG9mIG1lbWNweSgpIGZvciBjb3B5aW5nIHN0cnVjdCB0aW1ldmFsCisKK2NvbW1pdCAyZmU1NzllZmIxY2IzYTc0ZjgyODAzY2EzMjM5MjhmNmI4ZTRiNWMwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgRmViIDMgMTQ6MDQ6MDIgMjAxMiArMDEwMAorCisgICAgTWFrZSBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMgYnVpbGQgYWdhaW4gb24gbm9uLUxpbnV4IHN5c3RlbXMuCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IDM0NWExZTQyNTQ4MTJjYjllZGMxZDI3NDQ5MWI3NjY4MWE5ZGJhMWUuCisKK2NvbW1pdCA4ODFkZTZhYjczNTUyNzdhNWMxMTZhMDA4ZmJlNTEzMjkzYjA1MDM5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgRmViIDMgMTA6MDg6MjEgMjAxMiArMDEwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgUm1vbiBNSUIgaW1wbGVtZW50YXRpb24KKworY29tbWl0IDQ2Mjk5MzNjMGQzYjNmOWY0YmE1ODM1MzRmNzlhMzdmYjk2MzM4MTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAyMDowNTozMSAyMDEyICswMDAwCisKKyAgICBNb3JlIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMKKworY29tbWl0IGU5YjVhM2RlZTZmOWFmYWI4YjkwYTI5MzkyMDQwNjMyYjA3NWFkN2EKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNjo1Njo1NSAyMDEyICswMTAwCisKKyAgICBVc2UgU05NUF9NSU4oKSBpbnN0ZWFkIG9mIG1pbigpCisKK2NvbW1pdCBhZTQ1MmM3N2I0MTExMzlkNmI1ODAwZmZjZjg4ZDQ4ZTliNDc5MmE4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTU6MjM6MzggMjAxMiArMDEwMAorCisgICAgUmVzdG9yZSBjb21taXQgZGJiODc5NWE3ZGY1OTVmMDYwM2YyZWM2MTcwNDc5OWY0YzQ4MjY2Ny4KKworY29tbWl0IGM3ZDExZmEwMGY5OTk1ZGRiOWZlM2Q0OTk0YTNlOTc5MGRhMmUxODkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNToxODo0MCAyMDEyICswMTAwCisKKyAgICBSZXN0b3JlIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3IHBhcnRpYWxseS4KKworY29tbWl0IDAwZmQ2MjcyMGVjNDU0ZjVhNjkwZGU0ZmViYTA4MjIzY2ZiMmMzZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNDo0ODo0NCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEF2b2lkIGNyYXNoIGR1cmluZyBzaHV0ZG93biBkdWUgdG8gaW52b2tpbmcgcGVybF9kZXN0cnVjdChOVUxMKQorCitjb21taXQgZDllMjI5ZDgxYWJlYWYxOTFlZjJjY2IwNzc4NDI4ODVjMjMwZDYyMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE0OjQ3OjQxIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZSBhIHN1cGVyZmx1b3VzIGRlY2xhcmF0aW9uCisKK2NvbW1pdCAxZTJlMmFmNmNhZTgzMGYzODFlODdhMjQ0ZDAyOWViODZiZjNmY2NlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTM6MjA6MzcgMjAxMiArMDEwMAorCisgICAgcGVybC9TTk1QL2V4YW1wbGVzL3BpbmdtaWIucGw6IEFkZCBlcnJvciBjaGVja2luZworCitjb21taXQgMjQxYTE0MWUzMWYxNjg0ZmM2Y2Y3MGNjNGEwMGNjZTYzNmZkMzUyNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDExOjI4OjM3IDIwMTIgKzAxMDAKKworICAgIE1ha2UgY29uZmlndXJlLXRpbWUgRVZQX01EX0NUWF9jcmVhdGUoKSBkZXRlY3Rpb24gd29yayBvbiB0aGUgNS40IGJyYW5jaC4KKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgNDZlYWMwMmU5YTI3YmY0ZjMwNjhlNzk1Y2FiODkxZjA1YTg0ODg3MC4KKworY29tbWl0IDZkOWQxNGZlYWFhMmQwZmVjNjhiNGQxNTg5NDRkMzJjYjA0ZmYxYmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMToxMjowMCAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgdGhlIGNoYW5nZXMgdGhhdCBicmVhayB0aGUgYnVpbGQgb24gdGhlIDUuNCBicmFuY2ggZnJvbSBjb21taXQgZGJiODc5NWE3ZGY1OTVmMDYwM2YyZWM2MTcwNDc5OWY0YzQ4MjY2Ny4KKworY29tbWl0IDhhYmU0OWUzMGM5N2M4OTgzZTgzYjQ1YTM1YzcxNmZlOTFmNjZiZWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMSAxMTo1Njo1OCAyMDEyICswMTAwCisKKyAgICBGaXggc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBpbiB0aGUgRElTTUFOIE1JQiBpbXBsZW1lbnRhdGlvbnMuCisKK2NvbW1pdCBmOWZiMGE1MzMzNzVlMTRkYzM3MDAyNWEwYjJmYmM3NjFiZjI3YmU2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMDk6NTY6MDIgMjAxMiArMDEwMAorCisgICAgUmV2ZXJ0ICJIT1NULVJFU09VUkNFU19NSUI6IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmciIGJlY2F1c2UgaXQncyB3cm9uZy4KKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IGFhNmI3OWJjMTI0YTdiN2E4ODVkN2U1MDM1YWIwNmFhM2VjZWY2MTMuCisKK2NvbW1pdCBjYTRhNGZlMjVlZmQyNzE0ZjhmMTk2MWI5Nzg1NjYxNjU2M2Y0MmM5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTA6MjE6NDkgMjAxMiArMDEwMAorCisgICAgLmdpdGlnbm9yZTogQWRkIHB5dGhvbi9idWlsZAorCitjb21taXQgMTNhZGE1NjU1OGI0NGUyOGQxMzU1YzBkY2UxZDkyMWYzNzQ2ZDU0OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6NTM6NDkgMjAxMiArMDEwMAorCisgICAgUmV2ZXJ0ICJSZXZlcnQgIkZpeCBmb3JtYXQgc3BlY2lmaWVycyB0byBhdm9pZCB3YXJuaW5ncyIiIC0gdGhlcmUgKmlzKiBORVRTTk1QX1BSSW8gaW4gVjUtNisgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IGFhNTI4YmQyMmM3NDkzY2E4ZDY3ZTY3OGZiZjYxNWNhMGY2M2VhNmQuCisKK2NvbW1pdCBhYTUyOGJkMjJjNzQ5M2NhOGQ2N2U2NzhmYmY2MTVjYTBmNjNlYTZkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDoxMzoxOCAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIkZpeCBmb3JtYXQgc3BlY2lmaWVycyB0byBhdm9pZCB3YXJuaW5ncyIgLSB0aGVyZSBpcyBubyBORVRTTk1QX1BSSW8gaW4gVjUtNCBvciBWNS01IGJyYW5jaGVzCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCAzOTBjMDExNGM4ZWMwYmRiMjdiMDhiNmY3NGUzZjZlZjNhNjI5ODFiLgorCitjb21taXQgMmZiOTliZTlhYTg2YTZjYTM0OWI4NmQ0ZWY4YmM3MjZlZDlmMmE4MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6NTg6MzUgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCBlNWMzNTU4OWUwYmY0MTZiZmQwMzZiZDQ2OGY0MmFhZWFiMjVlNzg4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDo1NTo1NiAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDM0NWExZTQyNTQ4MTJjYjllZGMxZDI3NDQ5MWI3NjY4MWE5ZGJhMWUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjUxOjI2IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGVycm9yIGhhbmRsaW5nIGluIGluaXRfaWNtcCgpLgorCitjb21taXQgYzMwMzU0OWE1OWZhOGMyZjIwYTlkOGJmMWU5ODVmYmM4YWJkZTZhOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6NDY6MjkgMjAxMiArMDEwMAorCisgICAgUmV3b3JrZWQgX3JlZ2lzdGVyX2V4dGVuZCgpIGVycm9yIGhhbmRsaW5nLgorCitjb21taXQgOWMyMGUyN2E3MDI2ZmMwMzBkYTNiMzI4YjlhMmUxYjRmMzY2NzBjZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MjE6MjggMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCAyMmZkMGJmYzJkZjBlMWY2MDIwZGMzYzUwYTc1M2RkZjI4YTQ1OTljCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNToyMDoyMiAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDVkNjFlNTdiYWY1ODBjNzgyNTJjMGFiYjAwOThjMDdiYjA1YWYxN2MKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjE3OjA1IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgM2MzZWVhZTgwZDc5NmYyNzU5N2M5MDFlN2ZmMjA0NmM3NjllZjRiOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDg6MDkgMjAxMiArMDEwMAorCisgICAgTWFyayByb3dyZXFfY3R4IGFzIGZyZWVkIHNvIG5leHQgaXRlcmF0aW9uIGFsbG9jYXRlcyBuZXcgb25lIGluc3RlYWQgb2YgcmV1c2luZyB0aGUgZnJlZWQgb25lLgorCitjb21taXQgYWY5YWJkNTNjMjMzN2M5MGE2OTFhN2IwNDRmZjNmOTdjMTAwMzE2MQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDU6MTAgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCBjZjk0NjVmNTQxODFlNjJlMjFhOWIxMDIxOTEzMTEwN2EzZDJlYmY2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowNDowNiAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDc4NzFmMmIwOWI4YjUyZjM0YTllNTc3ODQyNjY0NTkwNTMxNjViY2IKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjAyOjUwIDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgN2EzN2YzM2QzMTBjOTU5ODYwN2JjMzIzZDliZGJmOTFhYWY3MmM5NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDA6NTEgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCAzZTQ1ZjcwMjYyNDllNDUzNTBlZGFhYzg1MzM3NDIzYWEwZTk1ZDhiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDoxMzoxOCAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIkZpeCBmb3JtYXQgc3BlY2lmaWVycyB0byBhdm9pZCB3YXJuaW5ncyIgLSB0aGVyZSBpcyBubyBORVRTTk1QX1BSSW8gaW4gVjUtNCBvciBWNS01IGJyYW5jaGVzCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCAzOTBjMDExNGM4ZWMwYmRiMjdiMDhiNmY3NGUzZjZlZjNhNjI5ODFiLgorCitjb21taXQgNjE5MzY3NjJlNjQxYzE4ZGI3NWFhNTEyNWEzM2U3NzZjNjc3YWRjNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTE6MTM6MzkgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZnJlZWluZyByZWdpbmZvIHR3aWNlIG9uIGVycm9yIGluIGEgdGVtcGxhdGUgYW5kIGFsbCBpdHMgaW5zdGFuY2VzLgorCitjb21taXQgNDk2NDM3NDMwNDE1ZmJhZmViMWNjZDQ3NzRmMWNhMDBkNjI3ZWExZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAyMCAxMTowNDoxMyAyMDEyICswMTAwCisKKyAgICBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOiBGaXggY29tcGlsZXIgd2FybmluZ3MgaW50cm9kdWNlZCBvbiBWNS42IGJyYW5jaAorCitjb21taXQgNWI0YTI0Y2RjZWUxYmMzZDgyNjMzY2NhZmViOTZmY2U5NTM0OWM1OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAyMCAwOToyMjoyNyAyMDEyICswMTAwCisKKyAgICB1bml0IHRlc3RzOiBmaXggYSA2NC1iaXQgY29tcGlsZXIgd2FybmluZworCitjb21taXQgY2JmMWM5MWJhZjcxOTFiZTVmYTI3ZDgxYmNmODcxNDMzMWEyYzEyZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAyMCAwOToyMDo0MiAyMDEyICswMTAwCisKKyAgICBVc2Ugc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZSgpIHRvIGZyZWUgYSBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QuCisgICAgCisgICAgRml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiBjb21taXQgZGJmMjZhMDVhMDRlZjI0YzQ3MzQ2ZTVhZGRhNDhlMzM4NDk4ZTcxZi4KKworY29tbWl0IGFhNmI3OWJjMTI0YTdiN2E4ODVkN2U1MDM1YWIwNmFhM2VjZWY2MTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gMjAgMDk6MjA6MzEgMjAxMiArMDEwMAorCisgICAgSE9TVC1SRVNPVVJDRVNfTUlCOiBmaXggYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCAzYTc2YjQzZTExZmZmYWRhNjMyZmNjYjg0OGFiNTAwZTg3NmFkNDhiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDE4IDE2OjIxOjA1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogQXZvaWQgdGhhdCBhbiBTTk1QIHNldCB3aXRoIFVzZUVudW1zIGVuYWJsZWQgY2F1c2VzIGEgc2VnbWVudGF0aW9uIGZhdWx0CisKK2NvbW1pdCA4NGRlYzlmYTkyYjBhYTJkNThlYjcwMjAzMzBmNGY5OGU1MTU0MzIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDE4IDE0OjM4OjIxIDIwMTIgKzAxMDAKKworICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IEZpeCBtb3N0IGNvbXBpbGVyIHdhcm5pbmdzCisKK2NvbW1pdCAzOGNmMjE4YzNmMWE3Mjc3ODZlMjI3YTVkM2ZiMTg2ZmQwZjFhMTVmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxNDo1MDoxMyAyMDEyICswMTAwCisKKyAgICBGaXggYSB0eXBvCisKK2NvbW1pdCA0NTQxMjIyNDQxMjJiZmRiNmY2N2NhYjMxMjU2ZDdiNDYzNzJlOWUxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxNDozMDoxOCAyMDEyICswMTAwCisKKyAgICBGcmVlIHRtU3RhdGVSZWYgb24gZXJyb3JzLgorCitjb21taXQgMDExOTAyMmRhYTU5YzczYmZlYzBkYTIzODZkMDYyOGYxNGU2ZGFiNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTQ6MDk6MTIgMjAxMiArMDEwMAorCisgICAgRnJlZSBmaW5nZXJwcmludCB3aGVuIGl0J3Mgbm90IG5lZWRlZC4KKworY29tbWl0IDBlODRjZDMwM2EwODI2N2RlYzc4ZjZkODFjOWJiMDdlM2Q4M2ExMWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjQ4OjI2IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDYzZGM4NDZhNzk0OWNlNjk3YjNlMjhjNTQzZGMxMTA1ZTYzYTIyNTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjA4OjI4IDIwMTIgKzAxMDAKKworICAgIEZyZWUgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQuCisKK2NvbW1pdCBjZTFmMjg0YTYzZWI4MTY0NGIzZTMyNjA2Y2JlMzliNjdlMWRmZjJhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxNDozNzowOSAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA3ZTIxNDEzY2E2ZjJlZmQ3YTNhZmI2MmM2MmI2NDQ4ODFiOGJkMWU3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxMzo0NjozMCAyMDEyICswMTAwCisKKyAgICBQcm9wZXJseSBhbGxvY2F0ZSBhbmQgZnJlZSBlbmdpbmVJRC4KKworY29tbWl0IDM0Yzk2Mjg4MjYwN2MzNjM4YTJmYTI1YTJhYzUzMTQ5MmQ3MWM3ODcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjM3OjI1IDIwMTIgKzAxMDAKKworICAgIEZyZWUgbG9jYWxseSBhbGxvY2F0ZWQgdG1TdGF0ZVJlZi4KKworY29tbWl0IGY1N2FlNTMxZGM1NjU4YWJjZDY1YjE2Mjc2MTU1MjUyMzhkMTZkMmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjIwOjI0IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDUzNmJjNTc1NTZjMzE0MTU2MWVhNGExOTQ4MTBiMTYyOTBhNjkxZWUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjE1OjQ3IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIGlmIHRoZSBmdW5jdGlvbiBhY3R1YWxseSBkb2VzIHNvbWV0aGluZy4KKworY29tbWl0IGEwNzc3ZDMwN2RiY2FmMjE5ZWUwMTg0YTBmYmFiOWQ0ZTVkNmFhMGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjAxOjQ1IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDhiOTdhNzFjOGU3OTU5NDI4ZWI0ZDRlOGQ5MGU5MDk2ZDQzZmYwOWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEyOjU3OjI2IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDJjMTUwN2MyMjAzMDU0OWFlNjYwYzBlMjExZmJkYzVjNzVlYzVjNTcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEyOjUzOjQ3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDY1ZjJiN2JjZDRmZTAzOTA2YWExYTExNWFiNjBhODliOGFlOTMzZDUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEyOjUxOjM2IDIwMTIgKzAxMDAKKworICAgIENsb3NlIG9wZW4gZmlsZXMgb24gZXJyb3IuCisKK2NvbW1pdCAwZTUyZTRmNjZkNDQ3NjZiZWEzNzQ3MzU1NmM3OGU1MjE5Yjk1NDYxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNTo0NTozMyAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCBkYmYyNmEwNWEwNGVmMjRjNDczNDZlNWFkZGE0OGUzMzg0OThlNzFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNTo0MjoxNyAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA3NDhkYTg0YjFmZDY1NGUzMzhiYzcwMWU4ZjllNWRhMjI5MTg3ZjFjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNTozMjowNCAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCBlYjIxNzE0NmZkNTQwMzZlYTQyMDJiZmVmNzhiYmY3NzRkN2UzODJkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNToyMzoxMCAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA5YmEzOGVlYzY2MTM4ZWMxZjYxM2VhOGQwNGUxNTgxMzBjNzEyMWJjCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNToxODo1NSAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCBkOWQ5MzhkMzAxOGMyN2Y1MzI3N2JjNWU1OTU3ODUwMDQ5MGMxZDA5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNToxNjozOCAyMDEyICswMTAwCisKKyAgICBDbG9zZSBvcGVuIGZpbGUgb24gZXJyb3IuCisKK2NvbW1pdCBkNWU4MTdkNWJkNTE4ZDlhYzZhMGQ2MGUwZTE0MWRkNjRmMjdhZDE5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNToxNDoxMiAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCAyYWU2OGYwNTlkZjlkNzRiMDc0ZDEyZjU5YzE4NDc0NjZlZDU3NmNkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNTowMzoxNyAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCBhMDBmM2Q0NjExMjFiNTQ1YWVkNzJhYzEyYjI0Mzg3OTFkY2ZjNGJhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxOCAxNDo1ODozOSAyMDEyICswMTAwCisKKyAgICBGcmVlIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeSBvbiBlcnJvcnMuCisKK2NvbW1pdCA1OTg4NGJiNGQzNWFkMTM3NDdmZmE2NzIzNDM2ZGNhNTg3YTlhYjc3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNzowOToxMiAyMDEyICswMTAwCisKKyAgICBJbiBhYm92ZSBjb2RlLCBvbGVuZ3RoIGlzIGNoZWNrZWQsIHNvIGxldCdzIGNoZWNrIGl0IGFsc28gaGVyZS4KKworY29tbWl0IGJhNWQ1MjkyYjA0MzkzYjBjN2Q3ZDdlZDk2MTI0MTkyOTQxOGM2ZTQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE3OjA1OjE0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGRlcmVmZXJlbmNpbmcgTlVMTC4KKworY29tbWl0IGRhMmQ2YTcwMjhhMTNiOWVkZjNhNWM4NDMxNGQwZjFmZWVmNzY3MTQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjQ0OjU2IDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgZjg4MDU0YTliNjliNmRlMjc0ZjdhMTRhNTliNDczMjNlNWU0ZTRjNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6Mzc6MzUgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgZGVyZWZlcmVuY2UgY29udGV4dCBpZiBpdCdzIE5VTEwuCisKK2NvbW1pdCA3YzRkNDU5ZThmMWY2NTJjYzIwOThjM2Q0YzgxZGU5MGE4NGVkNzEwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjozMDowOSAyMDEyICswMTAwCisKKyAgICBEb24ndCBkZWZlcmVuY2UgTlVMTC4KKworY29tbWl0IGZjMTliN2YzM2I1ODc5MjdkMmEwMWU3MmQyM2QyMWI5YjE2OTZhYjMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjI1OjI2IDIwMTIgKzAxMDAKKworICAgIERvbid0IGNsb3NlIE5VTEwgZmlsZS4KKworY29tbWl0IDVlOTVjYTY3OTAwNzZiNzg4MDcyYTgwMWVlN2M4Mjk2OWQ5OTViY2IKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjE3OjA5IDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgZGVyZWZlcmVuY2luZyBOVUxMIHdoZW4gYSB0cmFuc3BvcnQgZG9lcyBub3QgaGF2ZSBmX2ZtdGFkZHIuCisKK2NvbW1pdCBlZWQ2ZjVmOWI5YWU1NGQyY2VhYjY3YWQ4NWFkZGUxZjZhOGEyMWQ1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjoxMzoxMyAyMDEyICswMTAwCisKKyAgICBQcmV2ZW50IGRlcmVmZXJlbmNpbmcgTlVMTC4KKworY29tbWl0IDQxY2RlNjhiNWZhNGIzOGQ4MTQ1MGNmOTFlMDgyY2RmYTgyNWU3Y2YKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjEwOjEwIDIwMTIgKzAxMDAKKworICAgIENoZWNrIGlmIGEgcmVnaXN0cmF0aW9uIHdhcyByZWFsbHkgZm91bmQuCisKK2NvbW1pdCA1YjcyYTQwODUzODc2YTE4NmVmY2MwMDkwYTRlMzJjMjM1YjljMDVmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjowMzo1OCAyMDEyICswMTAwCisKKyAgICBEb24ndCBkZXJlZmVyZW5jZSBOVUxMIHdoZW4gZGlmZmxlbiBpcyBTTVVYX01BWF9QUklPUklUWSAod2hpY2ggaXMgaGlnaGx5IHVubGlrZWx5LCBidXQuLi4pCisKK2NvbW1pdCBmYTZhOTEyZTQxYzVkMGZkMmE2MzY4OTRlODZiNjQyNmMwNzM3NWFiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNTozNzo0NCAyMDEyICswMTAwCisKKyAgICBDaGVjayBmb3IgbWlzc2luZyB2YWx1ZSBpbiBzZXRFdmVudC4KKworY29tbWl0IDQxMGI3MWRhNDI1Mzg5ZmVjYzI1ZDE0ZjQ5ZjIzNzUzNTgxNTc2YWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE1OjI4OjQxIDIwMTIgKzAxMDAKKworICAgIERlcmVmZXJlbmNlIGVyZWcgb25seSBpZiBpdCBpcyBub3QgTlVMTC4KKworY29tbWl0IDE4NTI3MmQxYTBiOTEzNzc0MTg2ZjFiOTEzNWFlYWY2MzdlYmVkNTIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE1OjE3OjIxIDIwMTIgKzAxMDAKKworICAgIEFzIHBlciBhYm92ZSBjb2RlLCB0ZW1wbGF0ZV92MnBkdSBjYW4gYmUgTlVMTCwgc28gY2hlY2sgaXQgYmVmb3JlIGRlcmVmZXJlbmNpbmcuCisKK2NvbW1pdCA0OGU1ZWFkM2ZkMmMyYjM4NWRmNjk3MmM2NzUyNmZmNmJkYzMwNzY4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNDo0MjoyMiAyMDEyICswMTAwCisKKyAgICBVcGRhdGVkIGxhc3QgZml4IHRvIG5ldyBlcnJvciByZXBvcnRpbmcgc3R5bGUuCisKK2NvbW1pdCBmMzNkMzM2MTVkNmQ4NWQwMDczNzI2NDczYzQxNDZjYmNkZjExY2VkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNDozMDowNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBzaWdzZWd2IHdoZW4gZW1wdHkgY29uZmlnIGxpbmUgaXMgcGFyc2VkLgorCitjb21taXQgYjVkZjFlZWI0N2VkMzU1OWI2ZjRkOWVjY2NkYjI0MjEyNmU2Yzk5MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTQ6MTE6NTggMjAxMiArMDEwMAorCisgICAgRml4ZWQgKGhpZ2hseSB0aGVvcmV0aWNhbCkgc2lnc2VndiB3aGVuIHNwLT5zZWN1cml0eUVuZ2luZUlEIGlzIE5VTEwuCisKK2NvbW1pdCA2ZmVlZDYyOWE3MTg5OWMxMTMwOTY5NTlkODU0OWRjMTIwMWU4ZjlhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxMzo0MzozNyAyMDEyICswMTAwCisKKyAgICBBZGRlZCBOVUxMIGFuZCBsZW4gY2hlY2sganVzdCBpbiBjYXNlIHNvbWVvbmUgcHJvdmlkZXMgdmFsdWUgPSBOVUxMIGFuZCBub3plcm8gbGVuICgtPiBOVUxMIGlzIHRoZW4gZGVyZWZlcmVuY2VkKS4KKworY29tbWl0IDM1NWM1YWIyNjRhZjJhNjAyMGExZDhhOTIzZjgwZjExYjk0MjI5NWUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDEzOjM2OjQxIDIwMTIgKzAxMDAKKworICAgIEV4dGVuZCB0aGUgTlVMTCBjaGVjaywgaS5lLiByZXR1cm4gaWYgdGhlcmUgaXMgbm90aGluZyB0byByZW1vdmUuCisKK2NvbW1pdCBkZGQ3OTQ4YWNhZDkzOGNkNDI5NzQ1MDVkZGNhNGYwMzcyMTE2NzA5CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDE2IDExOjExOjI5IDIwMTIgLTA4MDAKKworICAgIHVwZGF0ZSBzcGFydGEncyBjb3B5cmlnaHQKKworY29tbWl0IDQxMjU2MDg2YTdhNTA0MTQ1MzQxOWNmZDZlNTYyYzdiNTVjNTZiMGEKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMTA6MzI6MDQgMjAxMiAtMDgwMAorCisgICAgcHVsbGVkIGZ1bGwgY29weSBvZiBleHRyYWN0bmV3cyBmcm9tIG1hc3RlcgorCitjb21taXQgNjI1YTcwZGJkZmQ5OTAyZGE3OWVmYTI5M2ZlNmQyYWM4Y2NmMmIyZQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAxNiAxMDoyNDoxOSAyMDEyIC0wODAwCisKKyAgICB1cGRhdGUgdG8gY2hhbmdlIHRvIHRoZSBuZXdlciBsb2cgZ2VuZXJhdGluZy9wYXJzaW5nCisKK2NvbW1pdCA2MmUzMmIxMzA4OWIyOWVkY2YyNzZmNjE1ZGE2N2U0NTA4ZmU3YmI1CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDE2IDA5OjI5OjQyIDIwMTIgLTA4MDAKKworICAgIGNvbmZsaWN0aW5nIG1lcmdlIGZyb20gbWFzdGVyIGZvciBleHRyYWN0bmV3cworCitjb21taXQgNzAwODRkYTYxZDJiY2JkMmNmMWVkODFiZGMzYmY2Nzk0YzJhZmZiNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAxMyAxMTo0OToxNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVNDSEVEVUxFUi1NSUI6IEhhbmRsZSAzMi1jaGFyYWN0ZXIgc2NoZWRDb250ZXh0TmFtZSB2YWx1ZXMgY29ycmVjdGx5LgorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCBiM2M0OTgyNTQyZTBhYjE1MWZiMzg4NDc1NGNkZmJjYjQ3MmRhNTJkLgorCitjb21taXQgMDRiZjNlMjg4MTU4ZWU4ODBlZGYyMzdlNDAwN2ZlZTM3ZDIwNDRkZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6Mzk6MzcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZW5kbGVzcyBsb29wIHdoZW4gU1NMX3JlYWQgcmV0dXJucyBlcnJvci4KKworY29tbWl0IGMxNTI2ZmNjYzA0NzRjMWRiMThjYWE5ZGJiODMzODUzY2RkZGUzY2MKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjEzOjIxIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGEgdHlwby4KKworY29tbWl0IGEyN2FhMTlkZjI4MzE1NmMwMzJjODFlYWVlNWUxMTU4NTlkMzhjMTcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjExOjMyIDIwMTIgKzAxMDAKKworICAgIERvbid0IHJlcGxhY2UgJ3JjJyB2YXJpYWJsZSwgaXQncyB2YWx1ZSBpcyBuZWVkZWQgb3V0c2lkZSB0aGUgbG9vcC4KKworY29tbWl0IDk4NWRmZjJiMDg3NmQ5NDgzYzQxNGZjY2VhM2VmNmJjNjNlMTQ1NjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjAxOjMyIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZWQgZHVwbGljYXRlIGNvZGUuCisKK2NvbW1pdCAyZmQ3ODE4MzE4ZTdhNWRmZTk4ZjUyY2NmNzUwYzJhNjNlODI1ZGVkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNTowMDoyMiAyMDEyICswMTAwCisKKyAgICBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgorCitjb21taXQgMTVmMjExMzBiYTMzZGM5YWZkMTY0ZTUyZGZkNzRjOWNlYzBlOTIzMgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6NTg6MTQgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCBkdXBsaWNhdGUgY29kZS4KKworY29tbWl0IDJhOGE4ZjJhYjdjZDc1ODI2YzVkNDFlYzNjZmQ1Y2UzZTk2MzRjZjMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE0OjM5OjI4IDIwMTIgKzAxMDAKKworICAgIHJlbW92ZSBkZWFkIGNvZGUsICdjcCcgaXMgYWx3YXlzICE9IE5VTEwgaGVyZS4KKworY29tbWl0IDM4ZmQ2Mzc4Y2MzMjc1MTgwZjYzYjhkOWI5YTQwNzJiM2RhYmY4ZTQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE0OjI1OjA2IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGEgdHlwby4KKworY29tbWl0IGViZDkyZTE5YjEwYzBhMzhlMTdjZGU0MDc4NjRiNDVjMjZlMTczMjcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE0OjA3OjQzIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZWQgdW5uZWNlc3NhcnkgaWYgKHZhbHVlKSBjaGVjayAtIHZhbHVlIGlzIGNoZWNrZWQgZmV3IGxpbmVzIGJlZm9yZS4KKworY29tbWl0IGM1Y2FjZjVjYWY5NzlkMDE4ZWE2Y2FlMWMwM2I4ZmRmMGIxMThkZmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDEzOjQ0OjQzIDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgZG91YmxlIGZyZWUoKSwgJ2Rpcm5hbWUnIGlzIGFscmVhZHkgZnJlZWQgaW5zaWRlIHNlX2FkZF9wYWlyX3RvX2xpc3QoKSBpZiBpdCBmYWlscy4KKworY29tbWl0IGFjZGNlYjUwZWE2NmQ2YjMyM2M3NGVlMDIxZmI3N2U4MTBlNGU3YWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDEzOjQzOjE5IDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgbWVtb3J5IGxlYWsgd2hlbiBtYWxsb2MgZmFpbHMuCisKK2NvbW1pdCAxNzA1M2UzNGNmZTlhOGFiMzk1ZmI1MGY1YzNmMWRhZmM3MjQ3YWViCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxMzozMjo1NyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBkb3VibGUgZmNsb3NlKCkuCisgICAgTGludXggbWFuIHBhZ2UgZm9yIGZjbG9zZSgzKSBzYXlzOiBJbiBlaXRoZXIgY2FzZSBhbnkgZnVydGhlciBhY2Nlc3MgKGluY2x1ZGluZyBhbm90aGVyIGNhbGwgdG8gZmNsb3NlKCkpIHRvIHRoZSBzdHJlYW0gcmVzdWx0cyBpbiB1bmRlZmluZWQgYmVoYXZpb3IuCisKK2NvbW1pdCBhNjY0MWVkYjljYjc0ZmMyMjM2YjQyY2U1NTU0ZmMzMzI5OTU2NTUyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDE1OjIyOjM0IDIwMTIgKzAxMDAKKworICAgIE1pbkdXOiBTa2lwIHRlc3QgVDA2NSBpZiBub3Qgc3RhcnRlZCBmcm9tIGluc2lkZSBhbiBNU1lTIHNoZWxsCisKK2NvbW1pdCBhODgzZWYxOTgyZjMwMWIxNDg1ZDIyNzMwMTY3NDkyNzMzMGY1YjY3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiAxMSAxNToxNDo1MyAyMDEyICswMTAwCisKKyAgICBNb3ZlZCBkZWJ1ZyBvcHV0cHV0IGJlZm9yZSByZXR1cm4uCisKK2NvbW1pdCA0NTc1MTk2NzI4N2Q5NzY0MGVmZGNkZjhlNzdlOGQ0OTA5MzlkOGViCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDE0OjE3OjE4IDIwMTIgKzAxMDAKKworICAgIENvbnZlcnQgc3RydG91bGwoKSB1bml0IHRlc3QgaW50byBhIE5ldC1TTk1QIHVuaXQgdGVzdAorCitjb21taXQgMmMyZmE0ODMzNmE0ZjFmMTc3YzI5OTFkNjUxNWQyOWYzOTUzM2M0NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxMzo1MDo0NCAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KCkgdW5pdCB0ZXN0IGludG8gYSBOZXQtU05NUCB1bml0IHRlc3QKKworY29tbWl0IDA3YzY2NmY2Y2VhMjdmMmIyYWI5YmMwOGFlZDBjYjYxMzNmZTM3NTgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDExIDEzOjE3OjQ1IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGNvbW1pdCA3M2E1MjNlNDY4Mjc3ZjZkZjJlOTg0ODkxMzEzYjhiZThiY2UxOTIxOgorICAgIEZpZGV4IGRlcmVmZXJlbmNpbmcga2V5LT5pbmZvIHdoZW4ga2V5IGlzIGtub3duIHRvIGJlIE5VTEwuCisKK2NvbW1pdCAzYjY4NjU2NjI5NmRkODdiYzQyYjdmMTE2OWRhYWNkYjNjNDVjYzU4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDE4IDA2OjI1OjU2IDIwMTAgKzAwMDAKKworICAgIFdpbjMyOiBidWlsZHMgYWdhaW4gd2l0aG91dCB3YXJuaW5ncyB3aXRoIE1TVkMgNi4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0ODkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBmM2E3ZDFiMDk2MDlkYWQ2NDlmNThiYmRiNWI3ZTEwZDM5YjM5OGMxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gT2N0IDE3IDExOjA0OjA2IDIwMTAgKzAwMDAKKworICAgIEZvbGxvdy11cCBmb3IgcjE5NDc2OiBmaXhlZCBhIHR5cG8uCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5NDc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgMmRlNzNiZDM2NWEzODFiOWMzNTNjYTUyMzA3NjllZWZiMWFjNzFlZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxMTo0Mjo0MiAyMDEyICswMTAwCisKKyAgICBsb2NhbC9wYXNzdGVzdDogUmVtb3ZlIGFuIGluY29ycmVjdCBQQVRIPSBzdGF0ZW1lbnQKKworY29tbWl0IDY5OTUxM2YxMjM4ZTBhZGNlMWYxY2VjOThlMGQxNDcyOTNmYzUwNDcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBPY3QgMTcgMDk6MjU6NTEgMjAxMCArMDAwMAorCisgICAgTkVUU05NUF9SRU1PVkVfQ09OU1QoKS1yZWxhdGVkIGNsZWFudXAuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5NDc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgNjM1OGRlZTcyZmIzNDdlMjYwMGEwYTdiZDIxZjIzMjcwZDNhMDBmNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAxMDo1ODoxNSAyMDEyICswMTAwCisKKyAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jOiBBZGQgYSBjb21tZW50CisKK2NvbW1pdCA1Mzk2YmZlMDMyYzhjYmM3M2M4ZmY1ZDRiMDg1ZWJhZGE5ZjU5ODQ2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEwOjMwOjE2IDIwMTIgKzAxMDAKKworICAgIFJlcGxhY2Ugc3RybmNweSgpL3N0cm5jYXQoKSBieSBzdHJsY3B5KCkvc3RybGNhdCgpCisKK2NvbW1pdCBmZWIzYWYyOGRjYWUyMjAxNWFlODY1YTJlNWRkOGM0MTZlOTk5MWQ4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEwOjAyOjA4IDIwMTIgKzAxMDAKKworICAgIFJlcGxhY2Ugc3RybmNweSgpL3N0cm5jYXQoKSBieSBzdHJsY3B5KCkvc3RybGNhdCgpCisKK2NvbW1pdCBiN2UxYWEyNTViYWU0YTM0NTNmOWVjYTY0NGE4NzY2MzQzNTFmMTFkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDIwIDE5OjM2OjI4IDIwMTAgKzAwMDAKKworICAgIENIQU5HRVM6IGxpYnNubXA6IGNoYW5nZWQgdGhlIHR5cGUgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBvZiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKCkgZnJvbSBjb25zdCBjaGFyKiB0byBjb25zdCB2b2lkKiBzdWNoIHRoYXQgbm8gY2FzdCBpcyBuZWNlc3Nhcnkgd2hlbiBwYXNzaW5nIGFub3RoZXIgZGF0YXR5cGUgdGhlbiBjaGFyKiBvciBjb25zdCBjaGFyKi4KKyAgICBDSEFOR0VTOiBXaW4zMjogY2hhbmdlZCBpbl9hZGRyX3QgZnJvbSB1X2ludCB0byB1X2xvbmcgc3VjaCB0aGF0IGl0IG1hdGNoZXMgdGhlIGRhdGF0eXBlIG9mIHNvY2thZGRyX2luOjpzaW5fYWRkci4KKyAgICBBbHNvLCBmaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIChtb3N0bHkgY2hhciAqIDw+IHVfY2hhciAqIG1pc21hdGNoZXMpIGFuZCByZW1vdmVkIHNvbWUgY2FzdHMuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTgzNDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlhZ2VudC9hZ2VudF9yZWdpc3RyeS5jCisgICAgCWFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYworICAgIAlhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jCisgICAgCWFwcHMvc25tcHRyYXBkLmMKKyAgICAJc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYworICAgIAlzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMKKyAgICAJc25tcGxpYi9zeXN0ZW0uYworCitjb21taXQgZjQ3YTM3NTI4NDlkYjA3NWU2ZjIwNTNiODU5NWI3Yjc5MmZiNjQ2MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE9jdCAxNSAxMDo1NjowOSAyMDEwICswMDAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IEJ1aWxkcyBub3cgY29ycmVjdGx5IHdpdGggYSA2NC1iaXQgY29tcGlsZXIuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk0NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCAwMmI2MDU2ZGY5NWRhOGI2NzMwMzRlMzljMmM3YzM4NmVkMGYzNjljCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEwIDExOjQ0OjUzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgY2FzdGluZyBhd2F5IGNvbnN0CisKK2NvbW1pdCBhMTk4NjU4MzJmYzc3ZjRjMDQ4MTQ0ZDkxYTQzMWIxZTk0ZDMyOWYyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAxNCAyMzoxMjowNSAyMDA5ICswMDAwCisKKyAgICBDSEFOR0VTOiBhcHBzLCBzbm1wbGliOiBQQVRDSDogMjgzNTU3NzogaWRlbnRpZmllZCBieSAiQmFydCBWYW4gQXNzY2hlIjogUmVwbGFjZSBTTk1QX1pFUk8gb2YgYXJyYXlzIHdpdGggYSBtZW1zZXQuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTc3OTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCA2N2EzZTJlY2NiOTVmOWM5ZDA4MDllZmNiZGRjZDg2NmVlMzA2MmQ1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDYgMTQ6Mjc6MTUgMjAxMCArMDAwMAorCisgICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxNzk3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDNkY2RlMmU4YTU5NWE1MjdmMDYxNDJjM2I4NTJkZTg0MzNhMWNmMjgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gSmFuIDI0IDE0OjI3OjU1IDIwMTAgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFByZXZlbnQgZ2NjIHBlZC13YXJuaW5nIGZvciBORVRTTk1QX1JFTU9WRV9DT05TVAorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE4MDUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgYzJlMTUyNWE4NWJkYTUyOTlhM2I5ZjI0MTYxNGY3ZTY1MDlhZWViYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA2IDEzOjM1OjExIDIwMTAgKzAwMDAKKworICAgIEJhY2twb3J0IGNvbW1pdCAyOTVmNDczYzgzNTQ2MjIxYjJhNzFkODE1YzYxZTMzYTY3Zjk4YWUzOiByZWZpbmUgTkVUU05NUF9SRU1PVkVfQ09OU1QoKSBpbXBsZW1lbnRhdGlvbi4KKworY29tbWl0IGNiNDIzYjBhZTllZDAwNTlhYTEwMGRjNGUyZmQ5M2FkMWI5N2ZhZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNiAxMTo1Nzo1MSAyMDEwICswMDAwCisKKyAgICBCYWNrcG9ydCBjb21taXQgZTJmYjA5ZTAwOTNlMmY2NDhmZTI2MzhkYTJmM2FmMThmZGIzMmJmMCAtIGludHJvZHVjZSBORVRTTk1QX1JFTU9WRV9DT05TVCgpLgorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAJYWdlbnQvc25tcF9wZXJsLmMKKyAgICAJc25tcGxpYi9zbm1wX3NlcnZpY2UuYworCitjb21taXQgYWZjMzk2YWIxNjE4YTg1OTVhMjUxOWZiYzI1ZjdhNDk4ZTE3NDQxMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAwODo0OTozNCAyMDEyICswMTAwCisKKyAgICBVbmJyZWFrIG5ldHNubXBfbWt0ZW1wKCkgYW5kIG1ha2VfdGVtcCgpLgorICAgIAorICAgIFRoZXNlIHdlcmUgYnJva2VuIGJ5IGNvbW1pdCBiYjhmY2JiODc0OTk4MDAwZjk0NWYwNThkMWFhNmZlMTRlOTI1ODk5LgorICAgIEFsc28gcmVwbGFjZSBhIHN0cm5jcHkoKSBjYWxsIGJ5IGEgY2FsbCB0byBzdHJsY3B5KCkgYW5kIHJlcGxhY2UgdGhlCisgICAgbWFrZV90ZW1wZmlsZSgpIGltcGxlbWVudGF0aW9uIGJ5IGEgY2FsbCB0byBuZXRzbm1wX21rdGVtcCgpLgorCitjb21taXQgMjEwMTg1YzE1ZDBkNjVmMGVhOThiNWUzYzJlMDc3NmY2MjIyZDE3MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiAxMSAwODoyNzo0MyAyMDEyICswMTAwCisKKyAgICBGaXggYSBjcmFzaCBkdXJpbmcgc3RhcnR1cCBvZiBzbm1wZCBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCA4ODUwNjE2ODdkOWNhYTM4NDcwOTc5NjY3ZDdkOGFkNjU2M2NlZGFkLgorICAgIAorICAgIEFsc28sIG1ha2Ugc3VyZSB0aGVyZSBpcyBvbmx5IGEgc2luZ2xlIGNvcHkgb2YgdGhlIGNsZWFudXAgY29kZSBpbiBmdW5jdGlvbgorICAgIG1rZGlyaGllcigpLgorCitjb21taXQgOGJiNGU4NmFiY2Y5OGZmMjg3NDhhZjBhZjg5Yzk4ZTY0ZDVjZDk2MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEphbiAxMSAwNzo0NzoxMiAyMDEyICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSBvbGRtYXNrIHZhcmlhYmxlLgorCitjb21taXQgNjY4MDE0N2IxMzhlYzExNGY4MWM1ZDEyOGFjOTM1MGM4NDUwZDA4MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAxODo0NDozMSAyMDEyICswMDAwCisKKyAgICBNYWtlIHRlc3QgVDAxNWludDY0X2NsaWIgcGFzcyBvbiA2NC1iaXQgc3lzdGVtcworCitjb21taXQgM2FhZDE1YWU1NjBhYzg1N2U3M2M5MDc2NGU5MDNlN2NhMDJiMzI5NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6NDA6NTkgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IGZvciBsYXJnZSBPSUQgbmFtZXMKKworY29tbWl0IGZiYTE4OGVlODIwMTBiMmYyZDhjYTJlNDI2YmE2NTQ0OTlhYjNkMGEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjMxOjMzIDIwMTIgKzAxMDAKKworICAgIGZpeGVkIGJ1ZmZlciBvdmVyZmxvdyBpbiBfX2NvbmNhdF9vaWRfc3RyCisKK2NvbW1pdCAyMWQyNWQ4NmI4ZTQ5MDRkNzk4ZGM4Yzk2ZGFkZTllNTA0ODQ1N2E4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNToyNjowNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBwYXJzaW5nIHBvcnQgbnVtYmVycy4KKworY29tbWl0IGQzNjkzMTg0MWIyZmMyY2ViYzYzNjRiMjk0OTEyOWEwYWQ0MmFkMWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjA1OjUxIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGEgYnVmZmVyIG92ZXJmbG93IHdoZW4gbGFyZ2UgU3VtRmlsZSBpcyB1c2VkLgorCitjb21taXQgMGVmZGQwMjJkYTA5YWYxYjVlMTYxNzFmYTdhMmI1MjNjNWQ2ZWM1OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MDE6NTMgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gdG9vIGJpZyB0ZW1wIGZpbGUgcGF0dGVybiBpcyB1c2VkLgorCitjb21taXQgNTYwYmM2YzA5Yjc1MTU1NmVmZDZiNGM0NDk1NzUxYjEwOWE5M2Y5MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6NTk6MjQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93LCBqdXN0IHRvIGJlIHN1cmUuCisKK2NvbW1pdCA4MjkxZDdjNWI5MmEzMWRkNGY1ODJiNDk3ZDRiMmEwODUzMzY3YTU2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo1NToxNiAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cuCisKK2NvbW1pdCA4OGUxZjM0ZGU3MzAwNTc1ZmE2ZGFiODU3ZWNkZGIyNDJhODdkZTgwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo0ODo1NSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiB0b28gbG9uZyBpbnRlcmZhY2UgbmFtZXMgYXJlIHVzZWQuCisKK2NvbW1pdCBiZTEzNzVhOTkyNmViZTBjZDViNzhhNDA0NWMzYmQxMWM4MzY2NGIxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo0Njo0OSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBhIHNlbnNvciBuYW1lIGlzIHRvbyBsb25nLgorCitjb21taXQgMWNiMjQ2MjUzNzIwNjJiMTRjNzFkN2RkNTFlMjBmZWY3NzNlMjc0MworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6NDE6MDAgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gYSBDUFUgaGFzIHRvbyBsb25nIG5hbWUuCisKK2NvbW1pdCA4NGM4MDdlZTAzMjUxZTU0ODU2ZTgzZDYyZDA2ZWEwOGI4ZGY1MjdhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDozNjo1MCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiB0b28gbG9uZyBpbnRlcmZhY2UgbmFtZXMgYXJlIHVzZWQuCisKK2NvbW1pdCBjMzEwZTM5MGI1ZGQwNWYyNGJlN2ViMTkwNGM3NGU0MTI1OWM5M2RiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDoyNDo1NCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiB0b28gYmlnIHRlbXAgZmlsZSBwYXR0ZXJuIGlzIHVzZWQuCisKK2NvbW1pdCA0NjAwZDExNDM0ZTgzYjg2NTNjZjlmODEzYTNkOGI2MzA0NTViNDJkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDoxNzowOCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBwbGF1c2libGUgc3RyaW5nIG92ZXJmbG93IGJlZm9yZSBwYXJzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLgorCitjb21taXQgODg1MDYxNjg3ZDljYWEzODQ3MDk3OTY2N2Q3ZDhhZDY1NjNjZWRhZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTQ6MTE6MDIgMjAxMiArMDEwMAorCisgICAgR2V0IHJpZCBvZiAoaW5zZWN1cmUpIFNOTVBfTUFYUEFUSCBpbiBta2RpcmhpZXIoKQorCitjb21taXQgODAxNjg5MGE0NDVmNmE3ZTJhODczYTA0ODczZDRlMjdiNmVlNjRlMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6NDg6MzQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgd3JvbmcgaW50ZWdlciBzaXplIG9uIDY0IGJpdCBwbGF0Zm9ybS4KKworY29tbWl0IGJiOGZjYmI4NzQ5OTgwMDBmOTQ1ZjA1OGQxYWE2ZmUxNGU5MjU4OTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDEzOjMxOjM2IDIwMTIgKzAxMDAKKworICAgIFNlY3VyZSBta3N0ZW1wKCkgd2l0aCB1bWFzaygpIC0gb24gc29tZSBpbXBsZW1lbnRhdGlvbnMgaXQgZG9lcyBub3Qgc2V0IDA2MDAgcGVybWlzc2lvbnMgYXV0b21hdGljYWxseS4KKworY29tbWl0IDIwMjUyM2NhNzA0YmQ3MjJkYzFhYzBlMWU2YjBlNGI0ZTU0MjQ0OTUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDEzOjExOjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGRlcmVmZXJlbmNpbmcgJ2MnIGJlZm9yZSBOVUxMIGNoZWNrLgorCitjb21taXQgNzNhNTIzZTQ2ODI3N2Y2ZGYyZTk4NDg5MTMxM2I4YmU4YmNlMTkyMQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MDg6MjQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyBrZXktPmluZm8gd2hlbiBrZXkgaXMga25vd24gdG8gYmUgTlVMTC4KKworY29tbWl0IDJmNGU2YWNkNzE0MTgzZjAxNWI3NjM2NTdmOGYwODQ1OTMzNTdlMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTA6Mzg6MTYgMjAxMiArMDEwMAorCisgICAgLmdpdGlnbm9yZTogSWdub3JlIHBlcmwvKi55bWwgZmlsZXMKKworY29tbWl0IGMzNjVkODBjMTZjMmQxN2IxNjAwMTFlOGMxZjljYjk1ODk1NGU5ZGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMDg6MzQ6MTYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBEbyBub3QgaW52b2tlIHNodXRkb3duX3BlcmwoKSBmcm9tIGluc2lkZSB0aGUgU0lHVEVSTSBoYW5kbGVyIHNpbmNlIHRoYXQgZmFpbHMgaWYgU0lHVEVSTSBpcyByZWNlaXZlZCB3aGlsZSBhIFBlcmwgaGFuZGxlciBpcyBhY3RpdmUuIEJhc2VkIG9uIGEgcGF0Y2ggcG9zdGVkIGJ5IEpvZWwgQXZuaSA8amF2bmlAYXJ1YmFuZXR3b3Jrcy5jb20+CisKK2NvbW1pdCBkMDU5ZmI4NzhiMTQzNjU5OTk1M2NlYTVhMDc3NDk5ZGRjZGNiY2I1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTc6MDM6NTUgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNDQwNzUyOiBJRi1NSUI6IFJlcG9ydCBpbnRlcmZhY2Ugc3BlZWQgY29ycmVjdGx5IGZvciBFdGhlcm5ldCBpbnRlcmZhY2VzIGlmIG90aGVyIHRoYW4gMTAgTWJwcywgMTAwIE1icHMsIDEgR2JwcywgMi41IEdicHMgb3IgMTAgR2Jwcy4gQWRkIHN1cHBvcnQgZm9yIE5JQ3MgZmFzdGVyIHRoYW4gNjUgR2Jwcy4KKworY29tbWl0IGMwOTkwM2E0MmU5ZDk3MzMxZmQ5ZTQ4ZWU4MzFhODVhZmRmOWM3MGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBKYW4gOSAxMzoyNjoxNyAyMDEyICswMTAwCisKKyAgICBEb3h5Z2VuLXN0eWxlIGRvY3VtZW50YXRpb24gZml4ZXMKKworY29tbWl0IGUzMjVlY2JmY2U3N2YwMGFjNWNmNmZiZDk1N2Y5NTQ5NWY2MWM1OWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBKYW4gOSAxMzoyNToxMCAyMDEyICswMTAwCisKKyAgICBTdXBwcmVzcyB1bmludGVyZXN0aW5nIERveHlnZW4gd2FybmluZ3MKKworY29tbWl0IGJlOTE2MWQzYTU4OThlODYzNzY3ZjkyNjYxMzQ4NjEyNmMyY2JmNjcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxMjozNTozOSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBTaW1wbGlmeSBpbXBsZW1lbnRhdGlvbiBvZiBmdW5jdGlvbnMgbWFuaXB1bGF0aW5nIDY0LWJpdCBudW1iZXJzLgorCitjb21taXQgODZlNGMyYmUwODUyYTBhMTNiMDYwMzA3NTcyMGIzMjY0ZWM3MGRkZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDEyOjI5OjExIDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgaXQgZXhwbGljaXQgdGhhdCBNQVhfU1VCSUQgaXMgYW4gdW5zaWduZWQgY29uc3RhbnQKKworY29tbWl0IDM3ZTI3MmQ4ZjdiNzE4MGJhMTQwZmEzODZhNWZmMDU4OTY4YTA4YTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxODoyMTo0OCAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogSUYtTUlCOjppZlR5cGU6IFJlcG9ydCB0eXBlICJpbmZpbmliYW5kICgxOTkpIiBmb3IgSW5maW5pQmFuZCBpbnRlcmZhY2VzIGluc3RlYWQgb2YgdHlwZSAib3RoZXIgKDEpIi4KKworY29tbWl0IDI2OTkzMmZhMzJjN2NkNDc5NTc0ODk2OThlMDliZWUzMWY2M2I3YWYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNDozNDo0MiAyMDEyICswMTAwCisKKyAgICBGaXggYW4gTVNWQyBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCAwZDFjMjFmOTk5MWQxMzA5ZDA1N2UzZTQwNTZkNTQ3ZGY3ZDQwZWNmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTY6MDY6MzEgMjAxMiArMDEwMAorCisgICAgTWFrZSBkZWNsYXJhdGlvbiBhbmQgZGVmaW5pdGlvbiBvZiBzdHJsY2F0KCkgY29uc2lzdGVudC4KKworY29tbWl0IDBjM2Q0ZGJiMGE5Y2Y1YjM1OWY3MGIyZjE5OTE1NDk1NTU0Zjg0MGYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNToyMzoxNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogc25tcGQ6IFJlbW92ZSBkbG1vZAorCitjb21taXQgODkzZWNjOTdiNTg3NjYxMDQ1YmVjYmUwOWEzMjBjMWJjYmM3MWM3YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE0OjM2OjU5IDIwMTIgKzAxMDAKKworICAgIEFkZCBzdHJsY2F0KCkgdG8gdGhlIE1TVkMgYnVpbGQgaW5mcmFzdHJ1Y3R1cmUuCisKK2NvbW1pdCAzZDEyNjQyMmU2MjU3MDJiOWQzZmEwNjc2YTk3ZWM1Y2IyMGQ5ZDEwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTU6MDE6MDYgMjAxMiArMDEwMAorCisgICAgTWFrZSB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBjb25zaXN0ZW50IHdpdGggaXRzIC5pbiBmaWxlCisKK2NvbW1pdCBhZjUzYjc2YzJmZmE3NTFlMzk1OGQwZmM1ZDgyNzlmNzhjMmMxYzI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTQ6NDM6NTUgMjAxMiArMDEwMAorCisgICAgU2tpcCBUMDY2cGFzc19zaW1wbGUgYW5kIFQwNjdwYXNzcGVyc2lzdF9zaW1wbGUgb24gTWluR1cKKworY29tbWl0IDM1YTkyZTY5M2QxMzNhNWIxMWU5ZTliNTk5ZGJmNDdlZGVmNDkzM2IKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAwODoxNjozNiAyMDEyICswMTAwCisKKyAgICBSZW1vdmUgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jIGFnYWluLCB3aGljaCB3YXMgYWRkZWQgYWNjaWRlbnRhbGx5IHdoaWxlIHJlc29sdmluZyBtZXJnZSBjb25mbGljdHMgKGNvbW1pdCAxZDc4ZjdkNWI1OGFlZDJiNTJjNGQzODZhN2JhODBhNDQ3MTFiYWNhKQorCitjb21taXQgYTliMDczZWEzYjZjZWRmNzEzZTMwNWU3YjE1ZjI4YWU1N2JmZGYxYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDE3OjQ3OjExIDIwMTIgKzAwMDAKKworICAgIEZpeCA2NC1iaXQgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IDdlODkwZGFkOTVmNTY2MDY5ZWUyODAyMTVhNGZlYTNmMGUyZTM5ODAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNjozODo1MCAyMDEyICswMTAwCisKKyAgICBBdm9pZCBhIFNJR1NFR1YgaWYgY3AgPT0gTlVMTC4gVGhpcyBpcyBhIGZvbGxvdy11cCBmb3IgY29tbWl0IDA4OWJjYjM2MGFhMjY3OTBhZDJhOGNlZGRmNTgzYjdiYTVkZGZkNDguCisKK2NvbW1pdCAxZjYyMDBjZmUxYjBiMjdlYmIwOTNhMTYwNmI1OTJmOWU5Njg0YmU4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTU6NTM6MzQgMjAxMiArMDEwMAorCisgICAgQ29udmVydCBzdHJuY3B5KCkgY2FsbHMgaW50cm9kdWNlZCBpbiB2NS42CisKK2NvbW1pdCBjMzEyNmIxNDM5MjFmYWJlYWM0NDIxNjZlY2E1YjViNzQyZmQ0MmMwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTU6MDI6MzkgMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBtb3N0IHN0cm5jcHkoKSBjYWxscyBpbnRyb2R1Y2VkIGluIHY1LjUKKworY29tbWl0IGIyNGVlN2M5MDk2NTdkYjQzYmQ4YzVkOGMwMTA1NWNhMDg4M2M5Y2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAwODo0MDozOSAyMDEyICswMTAwCisKKyAgICBFbGltaW5hdGUgbW9zdCBzdHJuY3B5KCkgYW5kIHN0cm5jYXQoKSBjYWxscworICAgIAorICAgIFVzaW5nIHN0cm5jcHkoKSBhbmQgc3RybmNhdCgpIGlzIGVycm9yIHByb25lIC0tIHNlZSBhbHNvCisgICAgaHR0cDovL3d3dy5ncmF0aXNvZnQudXMvdG9kZC9wYXBlcnMvc3RybGNweS5odG1sLiBIZW5jZSByZXBsYWNlCisgICAgYWxsIGludm9jYXRpb25zIG9mIHN0cm5jcHkoKSBhbmQgc3RybmNhdCgpLiBSZXBsYWNlCisgICAgc3RybmNweShkc3QsIHNyYywgbikgY2FsbHMgYnk6CisgICAgKiBzdHJsY3B5KGRzdCwgc3JjLCBuKSBpZiB0aGUgZ29hbCB3YXMgdG8gYXZvaWQgb3V0cHV0IGJ1ZmZlciBvdmVyZmxvdy4KKyAgICAqIHNwcmludGYoZHN0LCAiJS4qcyIsIG4sIHNyYykgdG8gY29weSBhIHByZWZpeCBvZiBzcmMgdG8gZHN0IG9yIGlmIHNyYyBpcworICAgICAgICBub3QgJ1wwJy10ZXJtaW5hdGVkLgorICAgICogbWVtY3B5KGRzdCwgc3JjLCBuKSBpZiBzdHJsZW4oc3JjKSA+PSBuIGFuZCBuIDwgc2l6ZSBvZiBkc3QuCisgICAgKiBzdHJjcHkoZHN0LCBzcmMpIGlmIG4gPiBzdHJsZW4oc3JjKSBhbmQgbiA8IHNpemUgb2YgZHN0LgorCitjb21taXQgNmQ5NWJjNDE0OTQ3MjkzMTAwNTQ3NWMzMGE1NDFmZWQ1NTM0ZGEzOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDExOjE5OjE2IDIwMTIgKzAxMDAKKworICAgIEZpeCB3YXJuaW5ncyB0cmlnZ2VyZWQgZHVyaW5nIGNvbXBpbGF0aW9uIG9mIHRoZSBQZXJsIHhzIHNvdXJjZSBmaWxlcworCitjb21taXQgYmFkMDYwMGY2ZWM5NDRlZjg0NTVlMzI3Y2U3ODRiOWIwN2QyNDdjOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDEwOjAwOjEzIDIwMTIgKzAxMDAKKworICAgIEFkZCBjb25maWd1cmUgdGVzdCBmb3Igc29ja2FkZHJfdW4uc3VuX3BhdGggc3VjaCB0aGF0IHRoZSBjb20yc2VjIHRlc3QgaXMgcnVuCisKK2NvbW1pdCA5MmEzMmFjNDg2NmE1ZWRjN2YzNDdkMzc5NDJiZjAyOGRlMDI3NjJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTA6MDA6MjkgMjAxMiArMDEwMAorCisgICAgR2V0IHJpZCBvZiBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDgzZTRjMGUzMDRmNjE3Y2NhYzY2MTBlZGQ3NGQxNzA2Nzk3YmJmNTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAwOToxNTozNyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgYSB0ZXN0IGZvciBzZV9zdG9yZV9saXN0KCkKKworY29tbWl0IDRmYWU1ODUyMTAzZWMzODkzYWQ0ODhiYzBkOTA1Y2E2OTE0NTk1ZWYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAwOToxNzoxNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBTaW1wbGlmeSB0aGUgc2Vfc3RvcmVfZW51bV9saXN0KCkgaW1wbGVtZW50YXRpb24KKworY29tbWl0IGIzMjIyYmIyNzVmMmYyMzQ2ZTBmZDA0NzhhZmEyZWZiNjAwNzczZTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAwOToxNjo0NSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBEZWNsYXJlICJ0eXBlIiBhcmd1bWVudCBvZiBzZV9zdG9yZV9saXN0KCkgLyBzZV9zdG9yZV9zbGlzdCgpIC8gc2Vfc3RvcmVfZW51bV9saXN0KCkgY29uc3QKKworY29tbWl0IDAyMmY4NDBmYmZjYjBlMjZiMDhmMGU1NTcyODIzMWY2MTE0OTU4MDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxOTo1NTo1NiAyMDEyICswMDAwCisKKyAgICBBdm9pZCB0aGF0IFZhbGdyaW5kIGNvbXBsYWlucyBhYm91dCBzZW5kaW5nIFVEUCBkYXRhCisKK2NvbW1pdCA2NzJhODA5YzIyOGU5NTUwYjk5Yjg5MTBiZTc1ZDBiMTYxOTg1NDAyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTc6MzM6MDkgMjAxMiArMDAwMAorCisgICAgRml4IGEgNjQtYml0IGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDI0ZmYyNjBhZDg5Y2UyYWEzNjFhNTVjN2M3MmU5MTYwMzFkZWZlMzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNzoxMToyNCAyMDEyICswMTAwCisKKyAgICBDaGFuZ2UgdGhlIHR5cGUgb2YgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBzbm1wX3NldF92YXJfdmFsdWUoKSBhbmQgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCkgZnJvbSB1X2NoYXIqIHRvIHZvaWQqLCBsaWtlIG9uIG1vcmUgcmVjZW50IGJyYW5jaGVzCisKK2NvbW1pdCBjNmNhNzM3ZmI0NmY5MGE0YmRhNWQ0MzczNGFhYzM0ZTgzN2EwNWY0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgTWFyIDEzIDE5OjA3OjM3IDIwMTAgKzAwMDAKKworICAgIEJhY2twb3J0IGNvbW1pdCBmNTA0Y2UyZDc0YTRiYzg4ZjY4Y2M5NTE1ZmE3MDUzMzczY2IxNWI1LgorICAgIChGaXhlZCBtb3N0IGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgc291cmNlIGNvZGUgaW4gdGhlIHBlcmwgc3ViZGlyZWN0b3J5LiBOb3RlOiB0aGVzZSBjaGFuZ2VzIG1heSBjb250YWluIHNvbWUgcmVhbCBidWcgZml4ZXMuKQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJcGVybC9BU04vQVNOLnhzCisgICAgCXBlcmwvT0lEL09JRC54cworICAgIAlwZXJsL1NOTVAvU05NUC54cworICAgIAlwZXJsL2FnZW50L2FnZW50LnhzCisKK2NvbW1pdCBkMjEyZGM5ODRlYzM0ZTRkMjMwNjI1ZTQ2ZTU4YjBjNjI4YTUwZGY1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTY6NDY6NDkgMjAxMiArMDEwMAorCisgICAgU05NUC54cyBjb21waWxlciB3YXJuaW5nIGZpeGVzCisKK2NvbW1pdCBiYWNlZWJiMTBkOGNhZjVkYjYzY2MzNjkzNWZlZDY1ZWU5MzEwMjlkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTY6MjI6NDQgMjAxMiArMDEwMAorCisgICAgQWRkIGRlY2xhcmF0aW9uIGZvciBzaHV0ZG93bl9zbm1wTm90aWZ5VGFibGUoKQorCitjb21taXQgZjdmOTY2YWJkNmQyODQ5YjEzMzEyNTJhZmU1YzQ3M2U1YzQwYjMyZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE0OjI0OjMzIDIwMTIgKzAxMDAKKworICAgIEZpeCBmb3JtYXQgc3BlY2lmaWNhdGlvbiBtaXNtYXRjaGVzLgorCitjb21taXQgMzAzYzAxNWJjZmU5YWYwYjE1NGU5ODgxYzdiNGY0NDllMDhmMzBiYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSA2IDIyOjA2OjIzIDIwMDkgKzAwMDAKKworICAgIEJhY2twb3J0IGNvbW1pdCBkM2ViMmI1Y2VkMjJhODQ4MDA1M2NlNDNhY2Y5NzM5NzI5MDU1NDA0CisgICAgKFNwcmlua2xlIHNvbWUgY29uc3QtbmVzcyB3aGVyZSByZWxldmFudCAvIGZpeCBmb3JtYXQgc3RyaW5nIG1pc21hdGNoZXMsCisgICAgTmllbHMgQmFnZ2VzZW4sIE1heSAyMDA5KQorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jCisgICAgCWFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYworICAgIAlhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYworICAgIAlpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKyAgICAJaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKworY29tbWl0IGQ5NWI0MDQwNjkxNmJkYTViNDhiNWE2MTMxYmVjMjdiODY2YjBhNzkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXkgNiAyMTo1OToyMCAyMDA5ICswMDAwCisKKyAgICBCYWNrcG9ydCBhMmE3MzE2YzMxMGYwZmNjMzcyODY3M2ZhMDQ3MDUxYzIzYjcxOTYwCisgICAgKFRyaXZpYWwgd2FybmluZyBmaXhlcywgTmllbHMgQmFnZ2VzZW4sIE1heSAyMDA5KS4KKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCWFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYworICAgIAlhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jCisgICAgCWFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYworICAgIAlhZ2VudC9zbm1wZC5jCisgICAgCXNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jCisKK2NvbW1pdCBkODZjNDdmMDAzZmRjMTkyYmNlN2I0NmFjNGYwNmIwOWUzODdjMTJiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEzOjI5OjA4IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGEgdHlwbworCitjb21taXQgYmVlNGQ3OWNmNGViN2UwYTQ1Mzk3ZjU5YjUyOThkYTYzM2E4ZTFiYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMzoxNDo1NyAyMDEyICswMTAwCisKKyAgICBGaXhlZCByZWFkaW5nIHBhc3QgZW5kIG9mIGJ1ZmZlci4KKworY29tbWl0IDNkYzBlMDBhMmZkOGUzNGZlMWFlMzNlY2FiZjM2ZTE0NjQ2MGEzMWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTI6NDA6MDcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdoZW4gbGFyZ2UgJ3Rva2VuJyBpcyB1c2VkLgorCitjb21taXQgYjNjNDk4MjU0MmUwYWIxNTFmYjM4ODQ3NTRjZGZiY2I0NzJkYTUyZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMjoyODo1MiAyMDEyICswMTAwCisKKyAgICBGaXhlZCBvZmYtYnktb25lIG1lbXNldC4KKworY29tbWl0IDBmNTM2OTUwNDRkZDNmMGMzNTA3NzUzZTNmOGMyOWQ5N2U5Njg3MmQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMyAyMTozODoyNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZCwgcGVybDogRWxpbWluYXRlIGRlYWQgdmFyaWFibGVzCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jCisgICAgCWFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jCisgICAgCWFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYworICAgIAlhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKKyAgICAJYXBwcy9zbm1wdGxzLmMKKyAgICAJYXBwcy9zbm1wdHJhcGRfbG9nLmMKKyAgICAJc25tcGxpYi9kaXJfdXRpbHMuYworICAgIAlzbm1wbGliL3NubXBfY2xpZW50LmMKKyAgICAJc25tcGxpYi9zbm1wX29wZW5zc2wuYworICAgIAlzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jCisKK2NvbW1pdCAwMTUzODA1Yzk5YjkxOTczNjU5MzVjNWQxMWFlOWMzZDRiZmFhMGYzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMDk6NDg6NDEgMjAxMiArMDEwMAorCisgICAgRml4IGEgc2V0LWJ1dC1ub3QtdXNlZCB3YXJuaW5nCisKK2NvbW1pdCAzZjg4ODVmYmVlOTQwNzc0OGZjMmYwNTczNzI4YTExYmEyYmMwMjNhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEFwciAyOCAwNTo1MToxMyAyMDA5ICswMDAwCisKKyAgICBSZXR1cm4gYSB2YWx1ZSBmcm9tIHNwcmludF9yZWFsbG9jX3ZhbHVlIGV2ZW4gaWYgbm8gc3VidHJlZSBpcyBsb2NhdGVkLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE3NTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgYjFlYWFmMzAyMzY5ZmQ0NTUyZThmZWU3YjZhODA1MDkxZWMwYTliNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMTozODo1MSAyMDEyICswMTAwCisKKyAgICBBZGRlZCBjaGVjayBvZiBmaW5kX3NlY19tb2QoKSByZXR1cm4gdmFsdWUuCisKK2NvbW1pdCBhZWU0ZTg5NWZlM2JkNWY0YTYxZTM0Mjc1YmZjYTAzNjhiNTYwNTU1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDExOjMxOjIyIDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIHNubXBfc2Vzc190cmFuc3BvcnQoKSByZXR1cm4gdmFsdWUuCisKK2NvbW1pdCA1ZDFkMGE3NDRhYjMwYzhlNjQ1YzNiODUwNmNiYmQyY2NlYjNkMjc1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDExOjA0OjQ4IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIG5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0KCkgcmV0dXJuIHZhbHVlLgorCitjb21taXQgMjk5ZWE5YTg5YzNmMTc1OGE3NzQ4YmI5YjM0MTFmNjJmMmM3MGY4OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMDo1NDo1NSAyMDEyICswMTAwCisKKyAgICBBZGRlZCBjaGVjayBvZiBmb3BlbigpIHJldHVybiB2YWx1ZSwganVzdCBpbiBjYXNlIG9mIHNvbWUgcmFjZS4KKworY29tbWl0IDkwZjFhZTY3NTc5MTc0ODE2MzZlZWY3NzEwMGNhZWViNTNlZGZlMDEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMDowNjo1NiAyMDEyICswMTAwCisKKyAgICBBZGQgc3RybGNhdC5jLiBTb3VyY2U6IGh0dHA6Ly93d3cuZnJlZWJzZC5vcmcvY2dpL2N2c3dlYi5jZ2kvc3JjL2xpYi9saWJjL3N0cmluZy9zdHJsY2F0LmMuCisKK2NvbW1pdCAwODliY2IzNjBhYTI2NzkwYWQyYThjZWRkZjU4M2I3YmE1ZGRmZDQ4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEwOjUwOjU2IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIHN0cnJjaHIgcmV0dXJuIHZhbHVlIGNoZWNrLCBqdXN0IHRvIGJlIHN1cmUuCisKK2NvbW1pdCAxOTlhMDUxMWY2ZWIwZWYzZmYxZDlmOTIyYjc5MGFiNjdkZmRlMDFlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTA6MzE6MjYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHNtdXg6IHNpbXBsaWZ5IHNtdXhfbGlzdF9kZXRhY2goKQorCitjb21taXQgZDg4MzU3M2FhNzNlMGY1ZmMxODhhY2VkZWU2NDUxZjk1ZGFlOTAwYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDEwOjIzOjA2IDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGNvbXBpbGVyIHdhcm5pbmcgaW50cm9kdWNlZCBieSBjb21taXQgYTgwOWZlNTA3NWM5ZjM3NDcxNWY3ZDFhNjgyOTQ5YTA3MzAxNzJjMS4KKworY29tbWl0IDdiN2EzZWIyNTAwNTI3ZWFhMTY5OTI4N2E2Y2E2ZmNjNGNjMmUwOGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAwOTo0MDowMiAyMDEyICswMTAwCisKKyAgICBGaXggYSBidWlsZCBlcnJvciBjYXVzZWQgYnkgY29tbWl0IGE4MDlmZTUwNzVjOWYzNzQ3MTVmN2QxYTY4Mjk0OWEwNzMwMTcyYzEuCisKK2NvbW1pdCAyYjZjMTE5ZmVkNDg0OGRhNjY2M2MxMWYwYzJjYmRjMjk5MjFiNWM2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE1OjUxOjEwIDIwMTIgKzAxMDAKKworICAgIENoZWNrIGZvciBuZXRzbm1wX2RzX2dldF9pbnQoKSBlcnJvcnMuCisKK2NvbW1pdCA2Y2U1MzYwY2FhNGM5ZGU1MWFkZTU3ODc5ZTgzZjk2YmQwNGI0YzVhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE1OjQyOjIzIDIwMTIgKzAxMDAKKworICAgIENoZWNrIGZvciBtaXNzaW5nIHZpZXcuCisKK2NvbW1pdCBiM2JjNTRiZWQzMTY5MGE4NWRmMmFjZmJmMzI5NmRhOTNhOWU4OWI0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE1OjIzOjE3IDIwMTIgKzAxMDAKKworICAgIENoZWNrIHNvY2tldCgpIHJlc3VsdC4KKyAgICBBbHNvIGNsb3NlIHRoZSBzb2NrZXQgb24gZXJyb3IuCisKK2NvbW1pdCA5MjA3NWY1MWNkNDVhMzhjYTM4NzYwYjNmZmU4MmUxNjU1OWU5YzJlCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE1OjE4OjI2IDIwMTIgKzAxMDAKKworICAgIENoZWNrIG9wZW4oKSByZXN1bHQuCisKK2NvbW1pdCA2NjY1ZDVmZTJmYzU2OWQ2ZmE4NTRkMWQ3OGUzNDdiYmFjNjllMDcwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjIyOjIyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIG1pc3NpbmcgYnJlYWsuCisKK2NvbW1pdCBhNjY0OGM1NDUzZTFlZjhkYWM1N2EzOGVmY2MwMGNjZTUzYmY5ZTRmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjIwOjI3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIG1pc3NpbmcgYnJlYWsuCisKK2NvbW1pdCBkNjhkY2FlMGYxOGQ1NTQ1NzFhZWYzMjE5NDRhNTI5MDU0OGRkZTg2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjE2OjExIDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCBmYjZmODBjMGZlM2JhMzZlNTZmNWI5MTFhNDdlM2Y2ZjMyYmEyNjZlCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjE0OjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGV4aXQgY29kZSBvZiBlbmNvZGVfa2V5Y2hhbmdlIHdpdGggd3JvbmcgYXJndW1lbnRzLgorICAgIEFsc28gYWRkZWQgYSBjb21tZW50IGZvciBDb3Zlcml0eS4KKworY29tbWl0IDMxMzBlMjRmZGMyMzI0NjRkZDdiYjIxNmY0NmNhZmEyZTBlNzc1YTYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MDk6NTQgMjAxMiArMDEwMAorCisgICAgQWRkZWQgbWlzc2luZyBicmVhaworCitjb21taXQgMThjMTI2YTk1NjVjYjRkNjlkNzUxM2I5NDRhMjEwNTU4ODA0NWQzNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDowNzoyOSAyMDEyICswMTAwCisKKyAgICBBZGRlZCAnZmFsbHRocm91Z2gnIGNvbW1lbnQgZm9yIENvdmVyaXR5LgorCitjb21taXQgNmQzMWM4MjA3MGEyYzY4ZmUzYzUxOWU5ZDU2ZmEyNzc5NTU0ZDAxZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDowMTo1MyAyMDEyICswMTAwCisKKyAgICBBZGRlZCAnZmFsbHRocm91Z2gnIGNvbW1lbnQgZm9yIENvdmVyaXR5LgorCitjb21taXQgZGM2ZjBlMmU1NDliNGNkMDYxZWJjMTkwMDg0YjFmYzc3YTU1ZjQwZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMzozMjo1OSAyMDEyICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBvcGVyYXRvcgorCitjb21taXQgZGFiMzI4NjdlZDBiOTkzMDFlZmQ3YjhkODUyYWQxMjg4YTE4NGJlMAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMzozMDozMyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBRVUlURlVOIHVzYWdlLgorCitjb21taXQgYjFhMmJjZjY0NjE1ZWI2NmJjMjRkNWJlNDk1MGU0NTAxMjk2MjA0NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMzoxODowMyAyMDEyICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBvcGVyYXRvcgorCitjb21taXQgYjJiMWM4NTFiOTRmZWQzN2MzODZlYWExYmZlYWQ1Yzc3Njk2ZTNlZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMzoxNDo1MiAyMDEyICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBvcGVyYXRvcgorCitjb21taXQgYTgwOWZlNTA3NWM5ZjM3NDcxNWY3ZDFhNjgyOTQ5YTA3MzAxNzJjMQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMDo1ODo0NiAyMDEyICswMTAwCisKKyAgICBBZGRlZCBjaGVjayBmb3IgZmFpbGVkIHJlZ2lzdGVyX21pYi4KKworY29tbWl0IDU5NDlmMDU1YzE2YWU2NTA2MTVhYWU3YTFmZWUzZjJkN2IxNmQ5NDAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTA6Mjk6NTkgMjAxMiArMDEwMAorCisgICAgTWFrZSBNSUIgZmlsZSBwYXJzaW5nIGFuZCBkZXRlY3Rpb24gbW9yZSBzdHJpY3QgLSBMQUJFTCBpcyByZXF1aXJlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIE1JQiBmaWxlcy4KKworY29tbWl0IGU0YjY3MzY4M2M2OGJhOGIzYWJjMDQwYjkxMjVlYzMwNDY0M2NjN2MKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKYW4gMSAyMzowMDoyNCAyMDEyICswMTAwCisKKyAgICBBc3N1bWUgdGhhdCBsaWJkbCBtaWdodCBiZSBpbiBBR0VOVExJQlMgb3IgU05NUExJQlMgc28gcHJlYWRkIHRoZW0uCisKK2NvbW1pdCBiMTNjMWU1N2JlZGJhNzliODA2MTAzYzc0ZjE5MjFkNTNhNzA2YjM4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gSmFuIDEgMjI6NTU6MDYgMjAxMiArMDEwMAorCisgICAgRG8gbm90IHJlcXVpcmUgdWNkLXNubXAvZGxtb2QgdW5sZXNzIGl0IHdpbGwgd29yay4KKworY29tbWl0IDI3ZGNlYTBkNWY4MDFkZjQ5NGFiMmNiNWM1YzBlYmU1NGViMGRjZDMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMzEgMTQ6NDg6MjkgMjAxMSArMDEwMAorCisgICAgQWRqdXN0IHBhdGhzIGZvciB0ZXN0IHJlc3RydWN0dXJlCisKK2NvbW1pdCAxNGI2MGU4NWExYjU3MDBlOTNkMTI2ZTJmMjkxZDVjNDg1ZjM0ZTM2CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRGVjIDMxIDE0OjE0OjI5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHRoZSBjb25maWd1cmF0aW9uIG9mIHRoZSBkbG1vZCBtb2R1bGUgZmFpbCByYXRoZXIgdGhhbiBnZW5lcmF0ZSBhIGR1bW15IG1vZHVsZSBpZiB0aGUgZGxvcGVuIGZ1bmN0aW9uIGlzbid0IGF2YWlsYWJsZS4KKworY29tbWl0IDk4YTk3NTM4ZmMxZTlmZjQ2YjYwZDVkOTY5MzQ3NDQ0NTc4Mzc4YzAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMzEgMTM6MzU6MTMgMjAxMSArMDEwMAorCisgICAgQWRqdXN0IHRoZSBwYXRocyB0byBzdXBwb3J0IHRlc3RpbmcgZXZlbiBpZiBidWlsZGRpciAhPSBzcmNkaXIKKworY29tbWl0IDg4ZjBhZjNjZmI5MTZhZTU4NjNjYzI5ODYwNzFkNDM1ZjIwYzMwNjQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMzEgMTE6Mzc6NTIgMjAxMSArMDEwMAorCisgICAgUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGVzICdwJyBhbmQgJ2xlbicuCisKK2NvbW1pdCAwODE1YTc1MzZjNzZmN2U0ODQyNjM4NjgzZjY3NDg5NGExYThjZTE0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IERlYyAyOSAxNDo0Mjo1NCAyMDExICswMDAwCisKKyAgICBSZXBvcnQgcHJvYmxlbXMgd2l0aCBTZXRVbmRvIHByb2Nlc3NpbmcKKyAgICBNaXNzZWQgd2hlbiBhcHBseWluZyBwYXRjaCAjMzQ0NTQ0MAorCitjb21taXQgZWIyYWIyMzc0MmNhODZjMGI4OWNjZmU5MWViNmVhMzc0YmYzYWNjMQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBEZWMgMjkgMTQ6Mzc6MzEgMjAxMSArMDAwMAorCisgICAgQ2hlY2sgZm9yIHRoZSBleHBlY3RlZCBlcnJvciAoRVBJUEUpIG9uIGNsb3N1cmUuCisgICAgTWlzc2VkIHdoZW4gYXBwbHlpbmcgcGF0Y2ggIzM0NDc0NDQKKworY29tbWl0IGFhYzEwYmM0ZjA1M2MwMTRmMzgyZDY1OTNmYzMyYWI5NWUwYjFhNTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDI5IDEyOjU5OjUyIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0NjM3Njc6IEhhbmRsZSBwYXJzaW5nIHN1YmlkZW50aWZpZXJzID4gMl4zMQorCitjb21taXQgYmJjMDJlMzZlOTBjMWFhYjc4OTg1NjJmOTYzZjVjYWRiMjZlMTBiZAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBEZWMgMjggMTc6MTU6MTYgMjAxMSArMDAwMAorCisgICAgTW92ZSBwYXNzL3Bhc3NfcGVyc2lzdCB0ZXN0cyB0byB0aGUgbmV3IGxvY2F0aW9uCisKK2NvbW1pdCAzODk4YzA0ZmQ2Zjg5ODY3MDYyZmRmZWJmMzY4NTdhYjYxOWMwNDUwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIERlYyAyOCAxNjo1MzoyNCAyMDExICswMDAwCisKKyAgICBBZGQgdGVzdHMgZm9yIHBhc3MvcGFzc19wZXJzaXN0LCBzdXBwbGllZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgZDVlZTNmMGExYTYzYmIxNzUyYzc0Y2JjYTU1YWEzZDQwYmY5YmYxMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMjE6NTg6NTEgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDM0NDc0NDQ6IEZpeCBTSUdfUElQRSBoYW5kbGluZworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCAyYTE3YjM3NDMwYzE4NTI5OThjMzU4OGU1NDdkN2ViNjFjMDZkYTcxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAyMTo0NTozOCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBhZ2VudHg6IFBBVENIRVM6IDM0NDU0NDA6IE1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIEFnZW50WCBlcnJvcnMKKyAgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgZmU1OGEwZTVmNGQ0ZTJlMmVjYmNiNDczODJiMDhjYjFlNGRmMzUyYworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTg6MTY6MjMgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzQ1Njc3MDogSGFuZGxlIChvYnNvbGV0ZSkgVUludGVnZXIgdHlwZSBwcm9wZXJseQorICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCAxYmU4Y2YwOGE2N2E5MTg1NWZlZTFlYzRhMmQ4ZTA4N2M3ODEyNDU2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxODowNDoxMCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBhZ2VudHg6IFBBVENIRVM6IDM0NDU0Mzc6IExvZyBBZ2VudFggZGlzY29ubmVjdGlvbnMKKyAgICAoaW4gbGluZSB3aXRoIGNvbm5lY3Rpb25zKSBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgMDY4MDM3Mjg5MTA3ZmFhMmJhM2Y1Y2QyZmIwMGMxOTQ5NGJiOWEwNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTc6Mjc6NDYgMjAxMSArMDAwMAorCisgICAgSGFuZGxlIGFueSBHRVRORVhUIHJlcXVlc3QgT0lELCBub3QganVzdCBhIHNpbXBsZSB3YWxrLgorCitjb21taXQgYTc0ZmE1Mjg5ODMxMjNkMzU1YThjZGNhYTc3ZGQ0ZWI0YjhjNjk1OQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTc6MDA6MTggMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogcGFzczogUEFUQ0hFUzogMzQ5Mzk0OiBCcmluZyBwYXNzX3BlcnNpc3R0ZXN0IHNjcmlwdCBpbnRvIGxpbmUgd2l0aCBwYXNzdGVzdCoKKyAgICAoaS5lLiB1c2luZyB0aGUgbGVnaXRpbWF0ZSBzdHJ1Y3R1cmUgb2YgTkVULVNOTVAtUEFTUy1NSUIpCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IGJiZTY0OWViZmE2MWVhMjIzOTkxNzBiMzZiOTlkYjMwYTFkZTgwMTIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE2OjU0OjM4IDIwMTEgKzAwMDAKKworICAgIFJld29yayAicGFzc3Rlc3QiIGV4YW1wbGUgdG8gZnVsbHkgdmFsaWRhdGUgR0VUTkVYVCByZXF1ZXN0cworICAgIGFuZCB1c2UgYSBsZWdpdGltYXRlIHN0cnVjdHVyZSBmb3Igb3V0cHV0LiAgQmFja3BvcnQgb2YgU1ZOCisgICAgcmV2aXNpb24gMTc2MzIgKHdoaWNoIHVwZGF0ZWQgJ3Bhc3N0ZXN0LnBsJyBidXQgbWlzc2VkICdwYXNzdGVzdCcpCisgICAgQ29ycmVjdCBpbiBicmFuY2hlcyA1LjUgYW5kIGFib3ZlCisKK2NvbW1pdCA4MmQwNmM3MjQ3YjIyYzhiMDFkNDViZjU1MDQxZDJmMWU2NDI3ZDQ5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxMzo0NToxOCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ0NzY3MTogRml4IG92ZXJyaWRlIGhhbmRsaW5nIG9mIE9JRCB2YWx1ZXMKKyAgICBQYXRjaCBzdXBwbGllZCBieSBQaGlsbGlwIE8nRG9ubmVsbAorCitjb21taXQgYmE0YTljZTUxYzk2MDBmOWZkYTE2OGYxZTZlZmYzMmExZGI2M2NiOQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTM6MjQ6MjYgMjAxMSArMDAwMAorCisgICAgVHdlYWsgLS1kaXNhYmxlLXNubXAtc2V0IGNoYW5nZXMKKworY29tbWl0IDgyN2M4YjI4ODMwMTcxZmFhOWM2MWQ1M2VmY2E5ZWI2NjAwNTYxYzIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDExOjI1OjQzIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0hFUzogMzQzMzg0NjogRml4IGZvciB1c2Ugd2l0aCBweXRob24gMi40CisKK2NvbW1pdCBmOThhNTRhOTljYWY3YjQ2YjEwMGE5MjBkYjk0MmNiY2E5YzQzOTI2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxMDoxMDozNiAyMDExICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbmZpZ3VyZWQgd2l0aCAtLWRpc2FibGUtc2V0LXN1cHBvcnQKKworY29tbWl0IDIzMGRmMTRmOTRjMzczNmZmMzQzNzlhNGUyODFlZWEzNTNiNDdmODAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBEZWMgMjYgMjM6MzQ6MjMgMjAxMSArMDEwMAorCisgICAgRG8gbm90IGFzc2lnbiB0bVN0YXRlUmVmIHR3aWNlCisKK2NvbW1pdCBjOTZiM2I0ZDg1MzBhZDVlMGVmYjAzZjI0ZGFiNWU1ZjFhNDYwMDMxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI1IDExOjE4OjIxIDIwMTEgKzAxMDAKKworICAgIENvcnJlY3QgdXNlLWFmdGVyLWZyZWUuCisKK2NvbW1pdCBjNTk3OGM4OWNkZTI0NDBmNGQyMGRhZGJjOWQxZGQ4ZGI1NjJkNTZlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDI1IDExOjE1OjQ0IDIwMTEgKzAxMDAKKworICAgIENvcnJlY3QgZG91YmxlLWZyZWUuCisgICAgCisgICAgbmV0c25tcF90bHN0bUFkZHJfYWRkIHRha2VzIG93bmVyc2hpcCBvZiBpdCdzIGFyZ3VtZW50IHNvIGNhbGxpbmcgZnJlZSBvbiB0aGUKKyAgICBhcmd1bWVudCBvbiBmYWlsdXJlIGlzIGluY29ycmVjdC4KKworY29tbWl0IGMxMzljYTEyM2I0NGJiM2I5YjZiZjkyMWUxNjA5Y2M0NWY2M2E2NjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBTYXQgRGVjIDI0IDE2OjU1OjMwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTIDM0MTAwNTk6IEZpeCBzcGFyc2VseSBhdWdtZW50aW5nIHRyaWdnZXIgdGFibGVzCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgU3RlcGhlbiBUdXJuZXIKKworY29tbWl0IGM0YWUwMjFiMmU2Mzg0NDM3MDgxYzU2MjNmMzYwYzg4OTYzOTAxODgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBTYXQgRGVjIDI0IDE2OjI5OjU0IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTIDM0MTAwNTA6IFNraXAgYWxyZWFkeS0ncHJvY2Vzc2VkJyB2YXJiaW5kcworICAgIEJhc2VkIG9uIG1pYjJjIHBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gVHVybmVyCisKK2NvbW1pdCBjNmFjY2Y4YzY2MjU0ZmE4YzQ4NzY3ZWQ3ZGVjNzk1ZGRhZmM1MjJlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgU2F0IERlYyAyNCAxNjoyNzoxMSAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUyAzNDEwMDUwOiBTa2lwIGFscmVhZHktJ3Byb2Nlc3NlZCcgdmFyYmluZHMKKyAgICBQYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorCitjb21taXQgYTYxODI2YWQ4Y2E1NDY2MWQxZDkwOTcxMjUwM2JkM2E4YjMyZWVkMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IERlYyAyMiAxODozNTo0NiAyMDExICswMTAwCisKKyAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlLgorICAgIAorICAgIG15TWF0Y2ggaXMgdW51c2VkIGFzIG5tYXRjaCBpcyB6ZXJvIGFuZCBhbHNvIHNpbmNlIHJlZ2V4QnVmZmVyIGlzIGNyZWF0ZWQKKyAgICB3aXRoIFJFR19OT1NVQiBzZXQuCisKK2NvbW1pdCBiYTRmYzgwZmUyY2ZkNWE1ZDg5MjMwZDhmMzcwM2U0ZmUwMWU2MDE5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IERlYyAyMiAxOToyNDo0MCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzQwMjM3NjogZnJvbSBMZW9uYXJkbyBDaGlxdWl0dG86IFJlY29nbmlzZSBSZWlzZXJGUworICAgIEFsc28gbW92ZSB2YXJpb3VzIEZTVHlwZSBkZWZpbml0aW9ucyB0byB0aGUgYXBwcm9wcmlhdGUgYmxvY2tzCisKK2NvbW1pdCBiNWFjNGEwNGRjZDU0NzBkMDhkMDMzMjFhYmNkMWU5ODI2MjFlNmUwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMiAxNDozOTo0NiAyMDExICswMTAwCisKKyAgICBGaXhlZCB1bnRlcm1pbmF0ZWQgc3RyaW5ncyBhZnRlciBzdHJuY3B5CisKK2NvbW1pdCAyYjM3ZTRlOGYyNTBhMGQ4ODIxMTk5YTc0YWMzZjRlNWI3YjdiYWJhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMiAxNDozMTo1MSAyMDExICswMTAwCisKKyAgICBGaXhlZCB1bnRlcm1pbmF0ZWQgc3RyaW5ncyBhZnRlciBzdHJuY3B5CisKK2NvbW1pdCAzZDA4MzQ1MTU2YzQxOTMzM2RlOTY5ZjEzZDIxZmNlYzdlMThlOTRkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMiAxNDozMjoyOSAyMDExICswMTAwCisKKyAgICBGaXhlZCB1bnRlcm1pbmF0ZWQgc3RyaW5ncyBhZnRlciBzdHJuY3B5CisKK2NvbW1pdCBjZDg1OWFkNTFjNGYxOGQ1YjBmYzY5ZGQ2NjlmY2IwNTFjNzk4OTY5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IERlYyAyMiAxNDozOTozMyAyMDExICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBtZW1tb3ZlIHNpemUKKworY29tbWl0IDMwZmY1OGQwOWQ0YzlkNTQzOGJiNjIxMDU0ZmQ3YWQ3YTJhNTk3ZTQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjA3OjE5IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIGxlbmd0aCBvZiBidWZmZXIgd2hlbiBwcmludGluZyBBU05fQklUX1NUUgorCitjb21taXQgNmMxNDg3ZTFkMzYwZDNkMjYwYTM5Y2IxZjViMTVkYTk3ODM5NTA1MworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTU6NDc6MzQgMjAxMSArMDEwMAorCisgICAgRml4ZWQgcG90ZW50aWFsIGZyZWUgb2YgdW5pbml0aWFsaXplZCBwb2ludGVyIGluIGVycm9yIGNhc2VzCisKK2NvbW1pdCBjNzZmYjk2ZjY1ZTMzYmEyZmQyMTJhOTIxZThjMzg2MTU1ZWU1YzdhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNTo0NDo0NiAyMDExICswMTAwCisKKyAgICBGaXhlZCB1bml0aWFsaXplZCB2YWx1ZXMgaW4gdWRwVGFibGUKKworY29tbWl0IGM0NDYwODY3OWI4OTc1MTE3NmYyOGEyZTU0ZDUyODJiNDZlMmEwNWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE0OjU2OjEzIDIwMTEgKzAxMDAKKworICAgIFVzZSBjYWxsb2MgaW5zdGVhZCBvZiBtYWxsb2MgYW5kIG1hbnVhbCBjbGVhcmluZworCitjb21taXQgYTA1YzVmOTUxMzQ2MTgyNGU3OTAzYWU5YWU5YTZjMzM4NmUzMzg3OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTQ6NDA6NTAgMjAxMSArMDEwMAorCisgICAgRml4ZWQgcHJpbnRpbmcgb2YgdW5pdGlhbGl6ZWQgdmFyaWFibGUgd2hlbiBzZW5zb3JzX2dldF9sYWJlbCgpIGZhaWxzCisKK2NvbW1pdCBlNGE1ZWRjNzIzOTNiZDNkZTliZjEyYmNlYmE5ZDgzYmJmN2RlNzBiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNDozMToyNSAyMDExICswMTAwCisKKyAgICBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZQorCitjb21taXQgZmFlMmU1YjgzNWI4ZGYxZWFlNDdlNGNlYmI0ZWI0MDRkNzI4MjM3NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTM6MzE6MjEgMjAxMSArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyB1bml0aWFsaXplZCBpaWQgaW4gZXJyb3IgY2FzZXMgYW5kIHdpdGggZGVidWcgaW5mbyBlbmFibGVkLgorCitjb21taXQgOWQ1OGY4MWE5MjM5Y2ZiY2ZjOGViY2UzNjdkMjFlOWIzZGNiMDI4YgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTM6MzM6MzMgMjAxMSArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbiBlcnJvciBjYXNlcworCitjb21taXQgMGJjOGMwOGVkZWFlN2FlMDk1ZjExNjI1OGMyMGFlNTc2N2Q2MDY1MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTM6MjA6NTIgMjAxMSArMDEwMAorCisgICAgRml4ZWQgcmV0dXJuaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgJ3N0YXR1cycgd2hlbiBzcyA9PSBOVUxMCisKK2NvbW1pdCA3MzA0YzUzY2Y4YWRlZThlY2NlZjFhOGYyNjc1NmZjMDdmMDk4NzIxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDE4IDIzOjMxOjUzIDIwMTEgKzAxMDAKKworICAgIE9uIHNvbGFyaXMgMTAgdGVzdCBpbiAvYmluL3NoIGRvZXNuJ3Qgc3VwcG9ydCB0aGUgLWUgdGVzdC4gUmVwbGFjZSBpdCB3aXRoIC1mCisKK2NvbW1pdCA4Y2QzYmU2MGQ2OTNjOWMzNmZmYjk3ZDNkOWJjYjQ5YzFiNGFiZTM1CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgRGVjIDE3IDA4OjUyOjI0IDIwMTEgKzAxMDAKKworICAgIEF2b2lkIHJlcGV0aXRpb24gb2YgdGhlIGNvbXBsZXggZXhwcmVzc2lvbiBkZXRlcm1pbmluZyBpZiBpdCBpcyBwb3NzaWJsZSB0byBnZXQgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MuCisgICAgCisgICAgVGhpcyBhbHNvIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIG9uIHBsYXRmb3JtcyBsaWtlIFNvbGFyaXMgMTAgdGhhdCBkZWZpbmUKKyAgICBJUF9SRUNWRFNUQUREUiBidXQgbGFjayBlaXRoZXIgb2YgbXNnaGRyLm1zZ19jb250cm9sIGFuZCBtc2doZHIubXNnX2ZsYWdzLgorCitjb21taXQgOTUzZjJlM2Q0MjVlZGUzYjg2M2EyZTdjY2IwYjRiYzg2MjkyOGI1NworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiA1IDIyOjEzOjA3IDIwMTEgKzAxMDAKKworICAgIE1vdmUgdGhlIHVzZSBvZiBfc2VuZHRvIGFuZCBfcmVjdmZyb20gYmVsb3cgdGhlaXIgZGVmaW5pdGlvbnMuCisKK2NvbW1pdCA2OGExMTczYzQ2Y2Y3NzYwMTQyNmNmMzkxZDlhODUyNzk0ZjIwNTdlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTm92IDIwIDIwOjA1OjE4IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNlcGFyYXRlIG91dCB0aGUgY21lc2cgYnVmZmVyIHNpemUKKworY29tbWl0IDQ2MWRkMTZmM2IyNjQ3MzIyY2RjZTYzNjMwODFjYzQ0YmE1YTQ5YjUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMjYgMjE6NTE6MDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWVyZ2UgdG9nZXRoZXIgdGhlIExpbnV4IGFuZCAqQlNEIHZlcnNpb24gb2Ygc3JjIHBvcnQgc2VuZGluZy4KKworY29tbWl0IDdhY2NiNjliYWExZmMwYjZhMzQzOWQyZTU0OWM4NmRhMzQ1M2JhZDIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MzA6MzEgMjAxMSArMDEwMAorCisgICAgVXNlIGEgYmFyZSBzdHJ1Y3QgaW92ZWMgaW4gaW5zdGVhZCBvZiBhIG9uZSBlbGVtZW50IGFycmF5LgorICAgIAorICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgY2hhbmdlIGlzIHRvIG1ha2UgX3JlY3Zmcm9tIG1vcmUgc2ltaWxhciB0byBfc2VuZHRvLgorCitjb21taXQgMzk4NTJjZDRjODVlZjJiZmM3NWNkZWEyODI1MjYxZWU5M2U3NjhjMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToyOToyMCAyMDExICswMTAwCisKKyAgICBBZGQgY29tbWVudCBkZXNjcmliaW5nIHRoZSBwdXJwb3NlIG9mIHRoZSBjYWxsIHRvIGdldHNvY2tuYW1lIGFmdGVyIGFsbW9zdCByZW1vdmluZyBpdC4KKworY29tbWl0IDFiMjkyY2EyN2VhYjVjYWE3M2ZlYWFhODNkYzljMTJhYmMwZjJlNzAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6Mjc6NTkgMjAxMSArMDEwMAorCisgICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlLgorCitjb21taXQgYmM4Nzk1NzFlY2E5NTIwYmMxMzJmODQwYzNlNjU5ZDM3OTMxNDRkNworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToyNTozNiAyMDExICswMTAwCisKKyAgICBJbnRyb2R1Y2UgdGVtcG9yYXJ5IHZhcmlhYmxlcyB0byBlYXNlIHRoZSBleHRyYWN0aW9uIG9mIHRoZSBzZXJ2ZXIgYWRkcmVzcy4KKworY29tbWl0IGI3ZWVhNmNmZmJkODcyOTMyY2UyYzA0ZmVmYjZmNDNkZTMzOWYzNzQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MTg6MzMgMjAxMSArMDEwMAorCisgICAgUmVuYW1lIHRoZSBjbWVzZ3B0ciB2YXJpYWJsZSB0byBjbS4KKyAgICAKKyAgICBUaGUgcHVycG9zZSBvZiB0aGlzIGlzIHRvIGluY3JlYXNlIHRoZSByZWFkYWJpbGl0eSBvZiB0aGUgY29kZS4KKworY29tbWl0IDBhNzQ2MWU3Mjg4MDVjNjJhMWNhYjlkODdiZmM3NGM3OTI3YTlmY2MKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MTU6MjIgMjAxMSArMDEwMAorCisgICAgRmFjdG9yIG91dCBhIGNvbW1vbiBsb29wIGluIHJlY3Ztc2cgb3B0aW9uIHByb2Nlc3NpbmcuCisKK2NvbW1pdCBiM2M2MjQ4ZDAyMDFhYjE2MTA4NDBkNmQwZTc0OWIzYjZjNGFkNzkyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjEzOjQzIDIwMTEgKzAxMDAKKworICAgIFVuaWZ5IHRoZSBzdHJ1Y3R1cmUgb2YgTGludXggYW5kIEJTRCByZWN2bXNnIG9wdGlvbiBwYXJzaW5nIHNvbWV3aGF0LgorCitjb21taXQgMzU2NDAwZDYyOTBhNDIzYjUyZWJlZWE1YTVlOTc2ZmIxNWJiNzNiNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOTowNDo1NiAyMDExICswMTAwCisKKyAgICBVc2UgQ01TR19EQVRBIG9uIHRoZSByZXN1bHQgb2YgQ01TR19GSVJTVC9ORVhUSERSLCBub3Qgb24gdGhlIGJ1ZmZlci4KKworY29tbWl0IDNiMzUxNzA4YzYyZGU0NmFhMWI5MGVkMjMyY2ZkOGM3YzViMDIyMzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAxMjowMDozMiAyMDExICswMTAwCisKKyAgICBSZW1vdmUgYSBjYXN0CisKK2NvbW1pdCBkZTkyNTBkOWRhZTk3MjdhNmNjN2Y2NDc2ODhkZGRmMWI4NTk3MTI4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMTE6NTg6MDQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2Ugc3ByaW50X21pYl9vaWQoKSB0cmVhdCBPSUQgY29tcG9uZW50cyBhcyB1bnNpZ25lZCBpbnN0ZWFkIG9mIHNpZ25lZCBpbnRlZ2VycworCitjb21taXQgMGUzM2IzYjZkNTg1NGE0YmFjMTVkNGVhNWUwMTZjNTNkMTYxZDBjZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDEwOjAyOjI4IDIwMTEgKzAxMDAKKworICAgIEZpeCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzCisKK2NvbW1pdCBiN2U1MGQ1ZjlhNjc1NTk4MmQyYWYzMTkxNDczY2IzNDY0M2JjMDNmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMDg6Mzc6MjIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUmVkdWNlIG92ZXJoZWFkIG9mIGNvbmZpZyBmaWxlIHBhcnNpbmcKKworY29tbWl0IDczYzllZTQyZDI4YWZlMmUxMDdhN2Q2NjE2YjZkMDExODkwYzM2ZWEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAwOTowOTo1OSAyMDExICswMTAwCisKKyAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcworCitjb21taXQgM2RiOTc5NjJiMzdlYjEyZDI1NGQ2MWU2YmUyMzRiMDZhMzkxYzhiYgorQXV0aG9yOiBCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4KK0RhdGU6ICAgVGh1IERlYyA4IDA3OjQzOjQ1IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSCAzNDUzODY4OiBmcm9tICJCaWxsIEZlbm5lciA8ZmVubmVyQGdtYWlsLmNvbT4iOiBGYWN0b3IgY29tbW9uIGNvZGUgaW50byBwYXNzX2NvbW1vbgorICAgIAorICAgIE1vdmUgdGhlIGNvZGUgZm9yIHBvcm1hdHRpbmcgYW5kIHByaW50aW5nIHZhbHVlcyBmcm9tIHBhc3MgYW5kIHBhc3NfcGVyc2lzdAorICAgIGludG8gcGFzc19jb21tb24uCisKK2NvbW1pdCBiNjU2OGM4M2YxNzU2ZTlhNjU0MzRlZGVlZWI0MGQyM2RkYmJiNjUyCitBdXRob3I6IGNjY2hpdSA8Y2NjaGl1QHNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyA3IDE2OjI1OjI3IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IEJVRzogMzQ1MjA2OTogRml4IHNubXB0cmFwX29pZCBkZWNsYXJhdGlvbiBpbiBtaWIyYyBnZW5lcmF0ZWQgY29kZQorICAgIAorICAgIFRoaXMgYnVnIHdhcyBpbnRyb2R1Y2VkIGNvbnNpZGVyYWJsZSB0aW1lIGFnby4gSXQgZGlkIGFscmVhZHkgZXhpc3QgYXQgdGhlCisgICAgdGltZSB0aGUgNS42IGJyYW5jaCB3YXMgY3JlYXRlZCAoc2VlIGFsc28gY29tbWl0CisgICAgMGVjMDg4YWZhMjdjZmRhNGU2ZWE3OGFhZTdjZmM1NTA3NTY0ZWRkZSkuCisKK2NvbW1pdCBkNDk0ZGI2NGMyMDhiNGRjNjI4MTMxMzJmODg2M2JkNWMxYTM5ZDc3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6Mzg6MTcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBFbGltaW5hdGUgYW4gdW51c2VkIHZhcmlhYmxlIChOb3cpCisKK2NvbW1pdCAyOGYyNTYxYmMyOTM1ZDhlMWNiZjQ2ZDI4MjAxNTgxNzNlN2E0Y2Y0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6Mzc6MTEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBNb3ZlIHRoZSBtYWluIGxvb3AgY29kZSBpbnRvIGEgbmV3IGZ1bmN0aW9uCisKK2NvbW1pdCAzOTZlMTIyZGRjNDJhOTE2ZjA2YTAyODg0YzBlOGEyNThlZGJlMjM4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMDk6MzI6MTYgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1hdGNoIGVhY2ggZ2V0cHduYW0oKS9nZXRwd3VpZCgpIGNhbGwgd2l0aCBhbiBlbmRwd2VudCgpIGNhbGwgYW5kIGVhY2ggZ2V0Z3JlbnQoKSBjYWxsIHdpdGggYW4gZW5kZ3JlbnQoKSBjYWxsLgorCitjb21taXQgM2VmZWZiYzAwMjQzOTk3ODZmOGI2OGIxZTkzYjBhOGZkZGRkYzdkYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyAxIDEwOjQxOjAxIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogUmVtb3ZlIHN1cGVyZmx1b3VzIGNhc3RzCisKK2NvbW1pdCA3ZjA1ZGFhOGUwZTBmNTMzYjBmMTJhM2UxY2YwNzY0MTUxOTkwOWQ2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTE6NTg6MzIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNDQ0OTM5OiBCVUc6IDE3OTY4ODY6IHNubXBsaWI6IEF2b2lkIHRoYXQgc3ByaW50X3JlYWxsb2Nfb2N0ZXRfc3RyaW5nKCkgZW1iZWRzIHVucHJpbnRhYmxlIGNvbnRyb2wgY2hhcmFjdGVycyBvciBiaW5hcnkgemVyb2VzIGluIGl0cyBvdXRwdXQuIFRoaXMgYmVoYXZpb3IgY291bGQgY2F1c2UgdHJ1bmNhdGVkIG91dHB1dCBpbiBzbm1wdHJhcGQuCisKK2NvbW1pdCBkYjhmNTU4ZmQyZjNiN2MxMDllYTNhMWMyMTMzYjc1YjZmOGNiMmFkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6MDQ6NDEgMjAxMSArMDEwMAorCisgICAgQ29tcGlsZXIgd2FybmluZyBmaXg6IHBhc3MgdW5zaWduZWQgY2hhcnMgdG8gaXNwcmludCgpIGluc3RlYWQgb2Ygc2lnbmVkIGNoYXJzLgorCitjb21taXQgODAwZGMxMDI4ZTdlMGNkOGNjMTRkODRkZDMxNzIzZDQ3YWMwNzNkYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IERlYyAxIDEwOjE4OjU4IDIwMTEgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIGhpbnQgdmFyaWFibGUKKworY29tbWl0IDgzZWE0YTA4MGM5MGE3NGI5NzQzZDNmMjRjZjBkNGI4YTFlOGM4NDkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBOb3YgMjcgMjE6MTY6NTIgMjAxMSArMDEwMAorCisgICAgUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGUgcW9zCisKK2NvbW1pdCA3YjllMDM0NDFjM2RjM2EwNzY3MGVkMDFmNWQwNDc5MWE4MmM3NTBjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjA0OjAxIDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSAjZGVmaW5lIHZhbCh4KSBfX1NUUklORyh4KSBhbmQgY2hhbmdlIHZhbCh4KSBpbnRvIF9fU1RSSU5HKHgpLgorCitjb21taXQgMmYzNzliMGU0ZWNhZGZhNGU1NDFlMzAwNWM4ZmM4MjgxODgyYjc0MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAzMCAxNTo1ODo0NyAyMDExICswMTAwCisKKyAgICBGb2xsb3ctdXAgZm9yIGNvbW1pdCAxYWE3MDRlOiB1bmJyZWFrIHRoZSBNU1ZDIGJ1aWxkCisKK2NvbW1pdCA2NGVmMGY3MTEyNzYxNzgzNzAyN2ZiMmNmYWYxNzRiOTViYTc5ZTBkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjE5OjUwIDIwMTEgKzAxMDAKKworICAgIEFkZCBTTk1QOjpyZWdpc3Rlcl9kZWJ1Z190b2tlbnMoKQorCitjb21taXQgN2JlYWQ5Y2E5MTdjNjc1NjZkNWVkOThhYjUwN2JiYzAyODE2MjE3ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE5vdiAzMCAxNDowODowOCAyMDExICswMTAwCisKKyAgICBBZ2VudFggc3ViYWdlbnQ6IFJlZHVjZSBjb2RlIGR1cGxpY2F0aW9uCisKK2NvbW1pdCAwZWQ3MTU0MWY4N2U3ZDc4YmM5OThlZWJkYTMyMTdjNTllMWRmODMwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjAzOjE5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBEb3h5Z2VuLXN0eWxlIGZ1bmN0aW9uIGhlYWRlciBmb3IgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgpIGFuZCBuZXRzbm1wX2NsZWFyX2RlZmF1bHRfdGFyZ2V0KCkuCisKK2NvbW1pdCA4YzI5NzJiNjFlNDAxNjliNDdjNTA5ODhiNmFlOWU4YzI4NWY4NGY4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjAyOjU0IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEZpeCBzcGVsbGluZyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiB0aGUgU05NUCBtb2R1bGUKKworY29tbWl0IDVkZjJiYWM2YmQ3MTc3OTkzMTFmMDAxYWM3YjczZGI4OGYxMWJkZGEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFR1ZSBOb3YgMjkgMDg6NTk6NTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogT25seSB0cmFuc2Zvcm0gdGhlIGFkZHJlc3MgdG8gcHJpbnRhYmxlIGZvcm0gd2hlbiBuZWVkZWQuCisKK2NvbW1pdCAxNzFlOGQ0OGQ0YWYwNDAxM2NmZjhmZDI4ZjUzNDFhMmFlZjIxZDg4CitBdXRob3I6IE1pam8gU2FmcmFkaW4gPHNhZnJhZGluQGxpbnV4LnZuZXQuaWJtLmNvbT4KK0RhdGU6ICAgVHVlIE5vdiAyOSAxNjo0OTo0NiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wLWJyaWRnZS1taWI6IEZpeCBpbmRleCBpbnRlcnByZXRhdGlvbi4KKyAgICAKKyAgICBUaGlzIHBhdGNoIGNvcnJlY3RzIGEgd3JvbmcgZGF0YSBpbnRlcnByZXRhdGlvbi4KKyAgICBzbm1wLWJyaWRnZS1taWIgb2J0YWlucyB0aGUgaWZpbmRleCB2YWx1ZSBmcm9tIHRoZSBzeXNmcworICAgIGF0dHJpYnV0ZSAnaWZpbmRleCcgVGhlIHZhbHVlIGdpdmVuIGJ5IHRoZSBzeXNmcyBhdHRyaWJ1dGUKKyAgICBpcyBhbiBpbnRlZ2VyLCB3aGljaCBpcyBoYW5kbGVkIGFzIGhleCBhbmQgbGVhZHMgdG8KKyAgICBpbmNvcnJlY3QgZGF0YSBkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuCisgICAgCisgICAgZS5nLgorICAgICAgICAkID4gc25tcHdhbGsgbG9jYWxob3N0IEJSSURHRS1NSUI6OmRvdDFkQmFzZVBvcnRJZkluZGV4LjIKKyAgICAgICAgQlJJREdFLU1JQjo6ZG90MWRCYXNlUG9ydElmSW5kZXguMiA9IElOVEVHRVI6IDU0CisgICAgCisgICAgYWNjb3JkaW5nIHRvIHRoZSBzeXNmcyBhdHRyaWJ1dGUgdGhlIHZhbHVlIGlzIDM2CisgICAgCisgICAgICAgICQgPiBjYXQgL3N5cy9jbGFzcy9uZXQvPGRldmljZT4vaWZpbmRleAorICAgICAgICAzNgorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IE1pam8gU2FmcmFkaW4gPHNhZnJhZGluQGxpbnV4LnZuZXQuaWJtLmNvbT4KKworY29tbWl0IDgyZTM5ZmI2NzA2ZGY5MGVjZjJmYzllMTBhZGEyYjk2MmVlMTk2ZjMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTm92IDI5IDEyOjI3OjQ2IDIwMTEgKzAwMDAKKworICAgIEZpeCBtdWx0aS1saW5lIGNhc2UgdGVzdGluZyBvZiBpbmNvbWluZyBPSUQKKworY29tbWl0IGIxNWRhMWE0NTE2MDYxMTA1YTFlYWM3NDUwY2Y2NTBlYzQ0MjY2YjIKK0F1dGhvcjogTmlrb2xheSBEZW5ldiA8bmRlbmV2QGdtYWlsLmNvbT4KK0RhdGU6ICAgVHVlIE5vdiAyOSAwODoyOTo0OSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBGcmVlQlNEOiBSZXN0b3JlIElQX1JFQ1ZEU1RBRERSIGZ1bmN0aW9uYWxpdHkuCisKK2NvbW1pdCA3ZjQ3ZjUyZTQ4MWJhYTlhYWZiNTc4NDI0NGIwZGQyNjUzZTdkY2ZmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gTm92IDI4IDA4OjUxOjM5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFVzZSBTTk1QX0FMTE9DX1RZUEVERUYgdG8gYWxsb2NhdGUgdHJhbnNwb3J0cyBpbiBvcmRlciB0byBhdm9pZCB0aGUgc2VwYXJhdGUgY2FsbCB0byBtZW1zZXQuCisKK2NvbW1pdCBjZjg2MDM5ZTMwODYyMjVjMzA4NWJiOWFkZjA4OGI4YmE1YmE2OTc5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTm92IDIyIDE1OjAyOjU4IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBNYWtlIHVuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliIHBhc3MuCisKK2NvbW1pdCAxYTg3ZTc2ZTAwZWUzZDVjZDM3YTA3YmZjM2Q4NDQ5MGQzYzJhNGVjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTm92IDIyIDE0OjU1OjQyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBNYWtlIHVuaXQtdGVzdHMvVDAxNGdldGhvc3RieWFkZHJfY2xpYiBwYXNzCisKK2NvbW1pdCA4ODY3ZmQxZGNmZTcyYjU5ZDA3MzIyZmYzOGE2OTliNjZlYzRmMzI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgTm92IDIyIDA5OjQ0OjM4IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgcm9idXN0IGFnYWluc3QgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZXMuCisgICAgCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBORVRTTk1QX0xBUkdFX0ZEX1pFUk8oKSB1c2UgbWVtc2V0KCkgb24gVW5peCBzeXN0ZW1zIGluc3RlYWQgb2YgYW4gZXhwbGljaXQgbG9vcC4KKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHN1cmUgdGhhdCBvbiBVbml4IHN5c3RlbXMgbmV0c25tcF9sYXJnZV9mZF9jbHIoKSBkb2Vzbid0IHRyeSB0byByZWFkIG1lbW9yeSBpdCBpc24ndCBhbGxvd2VkIHRvIHJlYWQgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGVxdWFscyAtMSAoYSB2YWx1ZSB0aGF0IHNob3VsZG4ndCBiZSBwYXNzZWQgYnkgdGhlIGNhbGxlcikuCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX2lzX3NldCgpIHJldHVybiBmYWxzZSBvbiBVbml4IHN5c3RlbXMgaWYgdGhlIGZpcnN0IGFyZ3VtZW50IGVxdWFscyAtMSAoYSB2YWx1ZSB0aGF0IHNob3VsZG4ndCBiZSBwYXNzZWQgYnkgdGhlIGNhbGxlcikuCisgICAgQ0hBTkdFUzogV2luZG93czogTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSBzaHJpbmsgYmVoYXZpb3IgY29ycmVjdC4KKworY29tbWl0IDIzZGIwY2YwOWI4YjBlYWIzN2I3NDllZjBjM2MzZjMwNjkwMDI0NWMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBOb3YgMjEgMjM6MDI6NTcgMjAxMSArMDEwMAorCisgICAgRml4IGNhc3RpbmcgdHZfdXNlYyB0byBpbnQgd2hpY2ggbWF5IGJlIHRvbyBzaG9ydAorCitjb21taXQgODBlZTQwMjJlNTM0ZTY0YWFkNWE1ZjI3MTkyODQzYjQyYWNiODVlMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwOToxNDowMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzNDM5MjM0OiBNb3ZlIG5ldHNubXBfcGFzc19zdHJfdG9fZXJybm8gdG8gcGFzc19jb21tb24gYW5kIHJlbmFtZSBpdCB0byBuZXRzbm1wX2ludGVybmFsX3Bhc3Nfc3RyX3RvX2Vycm5vCisKK2NvbW1pdCAwYmFhOTI5NmMwNzJiYjM3MzU3NjBiMGRkOTkyZjJkMWQzY2EyN2ZhCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDE5IDA5OjA1OjI0IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MzkyMzQ6IENvcnJlY3QgdGhlIGRlcGVuZGVuY2llcyBvZiB1Y2Qtc25tcC9wYXNzIGFuZCB1Y2Qtc25tcC9wYXNzX3BlcnNpc3QKKworY29tbWl0IDFhYTcwNGU0YTI5NDQzMGIyOGUzOWI2ZjllNDY4M2I4YTQ4YmNlMDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMTkgMDg6MzU6MjEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEZhY3RvciBvdXQgYXNjMmJpbiBhbmQgYmluMmFzYy4gQWRkIGEgbmV0c25tcF9pbnRlcm5hbF8gcHJlZml4IHRvIHRoZW0KKworY29tbWl0IGNkYThmZTkxMDEzZjEyY2JmNjRhMDc3NWFiYjU1NzIwMDM1YWY5MzEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMTkgMDA6NTU6MjQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IENhbGwgc25tcF9vaWR0cmVlX2NvbXBhcmUgaW5zdGVhZCBvZiBzbm1wX29pZF9taW5fY29tcGFyZQorICAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgc25tcF9vaWRfbWluX2NvbXBhcmUgc2luY2UgaXQgaXMgaW50ZXJuYWwgYW5kIHVudXNlZAorCitjb21taXQgODVmODkzZTJiNjA1ZTY3ZjliZDA0NDNjNzRlMmVkMjY5YWE2ODU2NAorQXV0aG9yOiBOaWtpIERlbmV2IDxuaWtpX2RAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTm92IDE3IDIyOjQyOjMyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzMTc1NjQwOiBVc2UgSVBfUkVDVkRTVEFERFIgc29ja29wdCB3aGVyZSBhdmFpbGFibGUgKCpCU0QpCisgICAgCisgICAgVGhpcyBodW5rIGZlbGwgb2Ygd2hlbiB0aGUgcmVzdCBvZiB0aGUgcGF0Y2ggd2FzIG1lcmdlZC4KKworY29tbWl0IDVjOTEzZTU0NjU2YWUwMDk2YjFmZWI2ZGE5OGI1ZmM5Y2E4MWYyNzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MzM6MDcgMjAxMSArMDEwMAorCisgICAgRGVmaW5lIHRoZSBmdWxsIE5ldEJTRCBoaWVyYXJjaHkgZG93bndhcmRzCisKK2NvbW1pdCBiODgxODQxYmQwNDkzZGQ3MWQ2MzI1OWJkZGVkNDQ5YjA2ZjAyYzMyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjMwOjMzIDIwMTEgKzAxMDAKKworICAgIEZpeCBzaXplX3QvaW50IG1pc21hdGNoZXMKKworY29tbWl0IGNhMjk0Y2Y3NWJiYzhlOTBkYmY0NGVlNDA0Nzg5MzVlOTFkYjE0ODcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTg6MDMgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKKworY29tbWl0IGNkMzJjMmRmZjA2YjliNDUyY2MxOGQ1NTJkMmYyMjM0MDkyYzgyOWMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTc6MDkgMjAxMSArMDEwMAorCisgICAgRml4IGZvcm1hdCB3YXJuaW5nCisKK2NvbW1pdCA4ODMxMzZjMmIyZmEwNzM5ZjQzN2E4Y2ZiNjYxNGFjY2M3NmUyNjhlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjE1OjU4IDIwMTEgKzAxMDAKKworICAgIE1vcmUgbmVlZHMgZm9yIE5FVFNOTVBfUFJJbyBmb3JtYXQgc3BlY2lmaWVyCisKK2NvbW1pdCBiODA4NGE3Y2NjOTA5YjZkNmRiN2MwZThlNTk2ZDc4NjcxZjU2NzhiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjE0OjI2IDIwMTEgKzAxMDAKKworICAgIEZpeCB1c2luZyBjaGFyIGFzIGFycmF5IGluZGV4IChjdHlwZS5oKQorCitjb21taXQgODQ1MjllNjMyMGE4OWQ5N2YxMzE0YWViYWQ4MDYyNTVkMmExYjE4YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzowMDo1NyAyMDExICswMTAwCisKKyAgICBGaXggbWlzc2luZyBmb3JtYXQgZm9yIEZyZWVCU0QgNAorCitjb21taXQgNGJkMDM1Mjk1NWEyNTUxYmZlMDIzMDhkZDEzNGI5MTI4Yzk4YjllOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMjo1OTozNiAyMDExICswMTAwCisKKyAgICBGaXggcGFyYW50aGVzaXMgcHJvYmxlbQorCitjb21taXQgZmU2MjY5YjE5MDBjZjQ0ZGMyN2ExOTlhNzYxZDE1YTAxYzNmMzA5MgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMjo1ODozNCAyMDExICswMTAwCisKKyAgICBGaXggc2l6ZV90L2ludCBtaXNtYXRjaGVzCisKK2NvbW1pdCBhNGRiOWY5ZmMxM2QyMWVjZmY0ODhlYjQxMDM3NmVkZGE2YzI4MjMyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDEzOjQzOjM0IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCAzOTBjMDExNGM4ZWMwYmRiMjdiMDhiNmY3NGUzZjZlZjNhNjI5ODFiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDEzOjM3OjQ5IDIwMTEgKzAxMDAKKworICAgIEZpeCBmb3JtYXQgc3BlY2lmaWVycyB0byBhdm9pZCB3YXJuaW5ncworCitjb21taXQgMjVjZmMxOTYyYWU1NzZjY2IxNTU4ZGExZTNlZjhiNmMxN2Y2M2MxNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAxMToyNzo1MyAyMDExICswMTAwCisKKyAgICBSZWFsbHkgdXAtdG8tZGF0ZSBtaWJzCisKK2NvbW1pdCAwZTg2Yzc4MWYzOTg5YmYwMjJjODk5M2ExMTg2MTdiNzRhNzU0MjBjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE3OjE5IDIwMTEgKzAxMDAKKworICAgIG1lbW9yeV9saW51eDogZ2V0IFNobWVtIGZyb20gL3Byb2MvbWVtaW5mbyBmb3IgMi42IChvciBuZXdlcikga2VybmVscworCitjb21taXQgYmYyNjRkMTVkZWQ3YWNiYmYyZTM4NzFiOThmZDFmY2VmNDNkOWVjMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAwOToxNjoxNiAyMDExICswMTAwCisKKyAgICBtZW1vcnlfbGludXg6IGNsb3NlIHNvY2tldHMgaW4gZXJyb3Igc2l0dWF0aW9ucworCitjb21taXQgNTdmZjhhNDBiYWU1ZDliY2FkMTYwODkxNDJhOWNmMzI4YzlmYTFmNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAwOToxNDo1NyAyMDExICswMTAwCisKKyAgICBkaXNtYW4vcGluZywgZGlzbWFuL3RyYWNlcm91dGU6IENsb3NlIHNvY2tldHMgaW4gZXJyb3Igc2l0dWF0aW9ucworCitjb21taXQgOGEyNTAyYTE1YzMyMTdiOTU5MzlhM2M4MzYxNjdkMjMwYWMzNWYwMgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAwOToxMzo1MyAyMDExICswMTAwCisKKyAgICBVcC10by1kYXRlIGxpc3Qgb2YgUkZDcyB3aXQgbWlicworCitjb21taXQgZGNkZDcwMjExMWQ4ZGE1ZjUzODA0Y2ZjZjBkZmRhZDczMTQ2OGJkZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBOb3YgMTUgMTA6NTc6MzQgMjAxMSArMDAwMAorCisgICAgRG9uJ3QgdHJ5IHRvIGluc3RhbGwgYW4gZW1wdHkgbGlzdCBvZiBtYW4gcGFnZXMgKE1BTjMpCisKK2NvbW1pdCBiYTYxOTgwNGU1OTc4YThkZjc1NDg0NGVmY2NhNTJiNjliNTAxNWZhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTm92IDE0IDEzOjM0OjIwIDIwMTEgKzAxMDAKKworICAgIE1pbkdXOiBNYWtlIHN1cmUgdGhhdCB0aGUgYmFja3NsYXNoZXMgaW4gdGhlIHBza2lsbCBtZXNzYWdlIGFyZSBkaXNwbGF5ZWQuCisKK2NvbW1pdCA5MjNlZWNjNTA3Zjc1MDQzYjYwYzVlNjgwNTNhNGYzOTZhYjBiMGQyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTm92IDE0IDEyOjM2OjM4IDIwMTEgKzAxMDAKKworICAgIENvbXBpbGVyIHdhcm5pbmcgZml4IGZvciBzeXN0ZW1zIHdoZXJlIHVpbnQ2NF90ID0gdW5zaWduZWQgbG9uZyAoZS5nLiBSSEVMIDYuMS94ODZfNjQpCisKK2NvbW1pdCA0MzRiZmMxZjc0NTc1NTBiNmY4N2Q1YmNkNTExMjc2YjI3MGI1OTY0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAxNCAxMToyMjo1MyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZnJvbSBNYXJ0aW4gV2lsY2s6IGZpeGVkIHNubXBkIGNyYXNoaW5nIHdpdGggJ3NlbGVjdDogYmFkIGZpbGUgZGVzY3JpcHRvcicuCisgICAgCisgICAgT24gMzItYml0IHN5c3RlbXMsIHNubXBkIGRpZXMgd2l0aCBhZm9yZW1lbnRpb25lZCBtZXNzYWdlIHdoZW4gdXNpbmcgZmlsZSBkZXNjcmlwdGlvbnMgPiAzMiwgZS5nLiB3aGVuIGhhdmluZyA+MzIgQWdlbnRYIHN1YmFnZW50cy4KKworY29tbWl0IGVkNjVlY2E2ZTdmOWNmYTczODBhNzhkNTZjMDFlZDMxNDc0NWIxNjkKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMTEgMTk6MDE6MjEgMjAxMSArMDEwMAorCisgICAgRnJlZUJTRC05OiBGaXggZm9yIGNvbnN0J2lmeWVkIG5saXN0IGFyZ3VtZW50cworCitjb21taXQgZWFjYTc5ODNlMzY1NWFiNjk2ZmNjNDQ2MWNhMGNlZGJhYzZjZTY5YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxOTowMDoxMiAyMDExICswMTAwCisKKyAgICBOZXRCU0QtNjogT25lIG1vcmUgaW5zdGFuY2Ugb2YgdGltZXNwZWMgcmVwbGFjaW5nIHRpbWV2YWwKKworY29tbWl0IDhhZDZjNTNmZGVjNWFkZWFlNGU1MmYxNzUxZWNlYzRhMzQ1YmFiMDUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMTEgMTg6NTk6MDEgMjAxMSArMDEwMAorCisgICAgRml4IGJ1aWcgIzM0MzY1Mjc6IGFycF9uZXRsaW5rOiBmaXggZHlpbmcgcmVsb2FkIG9mIGNhY2hlCisKK2NvbW1pdCAzNzhmZmVkMDNiYTc5YTgzNDZkNmM2Mjc4MWUyZGRmNWNlOTJhNDc4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDExIDE4OjU1OjQzIDIwMTEgKzAxMDAKKworICAgIEZpeCBidWcgIzM0MzY1Mjg6IHN3aW5zdF9wa2dpbmZvOiByZWNvdmVyIGZyb20gTlVMTCByZXR1cm4gZnJvbSBvcGVuZGlyCisKK2NvbW1pdCBkN2FkOGY1ZjlmM2Y2N2YxNmY2NWMyNTE1ZDExZTE5NGQyY2RkMTJjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDEwIDE0OjA0OjQxIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IEN5Z3dpbjogTWFrZSBkYXRlX25fdGltZSgpIHByb2R1Y2UgdGltZSB6b25lIGluZm9ybWF0aW9uCisKK2NvbW1pdCBiYTM1YzUwYjJmNDU5YmQ5YzExZWQ1OWNjN2QxYjE2MjE1NjQ0ZmEzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDEwIDE0OjE3OjA0IDIwMTEgKzAxMDAKKworICAgIFJlcGxhY2UgQUNfVFJZX0xJTksoKSBieSBBQ19MSU5LX0lGRUxTRSgpCisgICAgCisgICAgTm90ZTogdGhlc2UgY2hhbmdlcyBkbyBub3QgYWZmZWN0IHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdC4KKworY29tbWl0IGY2MTViZjI0ZjVkMGYyM2NlOTMwMWRhNTU2MTg0ZDY0NjA3NDA0NTYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgOSAyMDozMjo0OSAyMDExICswMTAwCisKKyAgICBGaXMgQnVnICMzNDM0ODI0OiBTSUdTRUdWIHdoZW4gcmVhZGluZyBkaXNrIGRpcmVjdGl2ZSBhZnRlciBTSUdIVVAKKworY29tbWl0IGE5NGExNzlkOTM0MGY1MWZhN2MyMzQzMTYzMGJjMGZmZDZkNzU5ZTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgOSAyMDozMDo1MSAyMDExICswMTAwCisKKyAgICBGaXggYnVnICMzNDMzNjE2OiBkb250IHRyZWF0IERhdGVBbmRUaW1lIGFzIGEgc3RyaW5nCisKK2NvbW1pdCBiMjllNDE2NDUzMWQyNThmZTM0YTZmZTJiOWUxZWM2MGM1NmY5NTQ0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gTm92IDcgMDE6MjU6NTcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCitjb21taXQgZTIyMWU2NWZkYzFjNjhmMTk2ODY1MTcxN2RjYzljY2ZiNjQxNDc4MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE5vdiAzIDE1OjA1OjAwIDIwMTEgKzAxMDAKKworICAgIEZpeCB3YXJuaW5ncyBhYm91dCBjb252ZXJ0aW5nIHNvY2thZGRyX2luICogaW50byBzb2NrYWRkciAqLgorICAgIAorICAgIFRoaXMgaXMgYSBmb2xsb3ctdXAgZm9yIGNvbW1pdCBhMGFmMzg1LgorCitjb21taXQgMmU3ZTllZGEwYjBkNjJhNzY0NWE5YThmNzBlZjNmYjZmM2RkNjk0MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE5vdiAzIDExOjE3OjQ4IDIwMTEgKzAxMDAKKworICAgIEZpeCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHdhcm5pbmdzLgorCitjb21taXQgMzQ2MmViY2RkMGI3YzI5OGNiMTVjMzA5OTczNmY0Zjk1MjI1Nzg0NgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE9jdCAyOCAxNjowNzoxNSAyMDExICswMjAwCisKKyAgICBSZW1vdmUgdGhvc2Ugc3VwZXJmbHVvdXMgcGFyZW50aGVzZXMgdGhhdCB0cmlnZ2VyIGEgY2xhbmcgd2FybmluZy4KKworY29tbWl0IDNlNWZlZGQzZTdkMWVmMzE2ODM2MDRiZjczZGM1NmU5NDRjYWQzNDkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTm92IDMgMDk6NDU6MjcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgYWZ0ZXIgMzAgZGF5cyBvZiB1cHRpbWUuCisgICAgCisgICAgQWZ0ZXIgMzAgZGF5cywgdmFsdWVzIGZyb20gL3Byb2Mvc3RhdCAob24gTGludXgpIGNhbiBnZXQgYmlnZ2VyIHRoYW4gMzJiaXRzIGFuZCBzbm1wZCBjYWxjdWxhdGlvbnMgbWlnaHQgcmVuZGVyIGNvdW50ZXJzIGxpa2Ugc3NDcHVVc2VyIG5lZ2F0aXZlIG9yIHplcm8sIHdoaWxlIHRoZSByZWFsIHZhbHVlIGlzIGhpZ2hlci4gVGhlcmVmb3JlIHRoZSBjb3VudGVycyBzaG91bGQgYmUgdHJhY2tlZCBhcyB0aGUgbGFyZ2VzdCBpbnRlZ2VyIGF2YWlsYWJsZS4KKworY29tbWl0IDBmYzgyMjFiMjQ5ODhjNGFlNjE4MGVkNDJiODZiOTg1MmZkNTg2YWQKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMiAyMjo1OTowOCAyMDExICswMTAwCisKKyAgICBkc2tJbmRleCB3YXMgb2ZmIGJ5IG9uZQorCitjb21taXQgYTViMjg4MjllNjRkNWYzYjg3ZTRiOWIxZWY4Y2MyMDRmMzNhNjFiNworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyIDIxOjI1OjA3IDIwMTEgKzAxMDAKKworICAgIFNvbGFyaXMgbmVlZHMgJEFXSyB0byBnZXQgYSB1c2FibGUgbmF3aworCitjb21taXQgMjgwMWEyMTM5ZjI3MDIxZTFhYjE1ZTM2MmUyZDNkNjI0ZmZhYTQ5NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAzMSAyMjo1NTo1MyAyMDExICswMTAwCisKKyAgICBQYXRjaCAjMzQwNjM2NDogRml4IHVuc3RhYmxlIGRhdGEgZm9yIE5ldEJTRC4KKworY29tbWl0IDgyMWE1OGQxMTJkN2FjNDk1MTQ5ZTI2MmQ3MDQ0MTJiYTI4MDA0MzgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMzEgMjI6NDM6NTIgMjAxMSArMDEwMAorCisgICAgRml4IGlwdjYgc3RhdGlzdGljcyBsb29waW5nIHRvbyBmYXIgd2hlbiBzY2FubmluZyBpbnRlcmZhY2VzLgorICAgIEZpeCBUQ1Agc2Vzc2lvbiB0YWJsZSByZXBlYXRpbmcgZGF0YSBmcm9tIGZpcnN0IGVudHJ5IGZvciBhbGwuCisKK2NvbW1pdCAzNDk1OTFkMDNlMTdhNTViNDNlYWNjNmE2ODdiMDJmZDhkNGU5NTI4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBNb24gT2N0IDMxIDA4OjU5OjM3IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHBlcmw6IE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgcGVybCBzdXBwb3J0IHdpdGhvdXQgc3VwcG9ydCBmb3Igb3BhcXVlIHR5cGVzLgorCitjb21taXQgMWVjNzExMGU3MmJjZTE1NjFmNzQ2NTE3NDU5ZDZmMDQzMDE2YjYwZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAzMCAxOTowNTozMCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBNYWtlIHRoZSBhc24xIHRlc3QgcGFzcyBldmVuIGlmIHN1cHBvcnQgZm9yIG9wYXF1ZSB0eXBlcyBhcmUgcmVtb3ZlZC4KKworY29tbWl0IDZkMjY5MThhZjU1YWEzNjYyYTcyMDU0MmRlNzdiYmYzOWIwYTNlOTEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBPY3QgMjkgMDg6MzQ6MzMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERpc2FibGUgdGhlIHN1cHBvcnQgZm9yIGludGVnZXI2NCBpbiBwYXNzIHNjcmlwdHMgaWYgY29tcGlsaW5nIHdpdGhvdXQgb3BhcXVlLXNwZWNpYWwtdHlwZXMuCisKK2NvbW1pdCAyOWJmNjlkNzA0MjRmMzU5ZDljODdmMDdhOTY0YTA5OTQxNTY0OWE1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDEwIDEzOjAyOjI1IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZF9zcWw6IEF2b2lkIHRoYXQgYSBsaW5rZXIgZXJyb3IgaXMgdHJpZ2dlcmVkIG9uIHN5c3RlbXMgd2hlcmUgbXlfcHJvZ25hbWUgaXMgbWlzc2luZyBpbiBsaWJteXNxbGNsaWVudCAoZS5nLiBGZWRvcmEgMTUgYW5kIDE2KS4KKyAgICAKKyAgICBUaGlzIGlzIGEgYmFja3BvcnQgb2YgY29tbWl0IDlmNjUzZjcuCisKK2NvbW1pdCAyY2M5NTA0YjliYjg2MjViOTRiZTZjZGE3ZTYwOTkzZDA1OWNkOTI4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDI2IDA5OjAxOjIzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMzQyODUwNjogRml4IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigpCisgICAgCisgICAgVGhpcyBwYXRjaCBzaG91bGQgZml4IHRoZSByZWdyZXNzaW9ucyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCA4NWQ5NmM0IChNYXkgMTMsIDIwMTEpLgorCitjb21taXQgOWI0MjdiMzUzZjFjZWI4ZmU4N2U2ZmM4ZWQzYjZjZmFiM2NlN2YyMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE9jdCAyNyAwODoyMDowMCAyMDExICswMjAwCisKKyAgICBNaW5HVzogQXZvaWQgY29uZnVzaW9uIGJldHdlZW4gTWluR1cncyBraWxsLmV4ZSBhbmQgdGhlIFN5c0ludGVybmFscyBwc2tpbGwuZXhlCisKK2NvbW1pdCAyYzQ1ZjkyY2ZjYjViMDVlMDQ5MjI2YTVhNzg4M2EwYjEwNjAxMWFlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDI2IDEwOjQyOjI5IDIwMTEgKzAyMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBwYXNzaW5nIGEgY29uc3QgcG9pbnRlciB0byBhIGZ1bmN0aW9uIGFjY2VwdGluZyBhIG5vbi1jb25zdCBwb2ludGVyLgorCitjb21taXQgMjc1ZDIzZWRmZGViZTA1NzdiMDg0MjFlNGM2YzkzNmFlMzliN2ZkYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNiAwOTozMzowOSAyMDExICswMjAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgc2V0LWJ1dC1ub3QtdXNlZCB2YXJpYWJsZXMKKworY29tbWl0IDQ0OTVlMTdjMDc4YWM2OTk3YTljN2ZhMWE4OGRiMDY0NGU5MTk0OTEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMDk6MzI6NDYgMjAxMSArMDIwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNhc3RpbmcgYXdheSBjb25zdAorCitjb21taXQgMTM5NTJmNmJlZTlmNDA4ODY3YWI2ZDJmZGZkZGU0ZjI4NDA3NDk1NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgMjYgMTQ6MDU6MTYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogZnJvbSBTaWRkaGVzaCBQb3lhcmVrYXI6IHByb3Blcmx5IGNsZWFuIHVwIG9sZCByZXF1ZXN0cyBpbiBhIHN1YmFnZW50IHdoZW4gd2UgcmVjb25uZWN0IHRvIG1hc3Rlci4KKyAgICAKKyAgICBBbiBzbm1wIHN1YmFnZW50IGxpbmtlZCBhZ2FpbnN0IG5ldC1zbm1wLWxpYnMgbWF5IGNyYXNoIGlmIGl0IGhhbmRsZXMgYQorICAgIHJlc3BvbnNlIHdoaWNoIGhhcyBtYWdpYyByZWZlcnJpbmcgdG8gYW4gb2xkZXIgZGlzY29ubmVjdGVkIG1haW4gc2Vzc2lvbi4gVGhpcworICAgIG1heSBoYXBwZW4gd2hlbiB0aGUgc3ViYWdlbnQKKyAgICBhdHRlbXB0cyB0byBjbGVhbiB1cCBvbGQgcmVxdWVzdHMgb24gcmVjb25uZWN0aW9uIG9mIHRoZSBkaXNjb25uZWN0ZWQgbWFzdGVyCisgICAgc2Vzc2lvbi4KKworY29tbWl0IGFlMDUyNDcyYjIyNzIwZDA4MzY5ZTg1MTI3ZGIyMTQyNDVkZjJlM2YKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgT2N0IDI1IDE2OjE1OjE3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIHNlZ21lbnRhdGlvbiBmYXVsdCB3aGVuIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxzLgorICAgIAorICAgIFdoZW4gbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyIGZhaWxzLCBpdCBmcmVlcyBpdHMgcmVnaW5mbyAtPiBuc2Focl9ERVNUUk9ZIChhbmQgYW55IG90aGVyIGZ1bmN0aW9uKSBtdXN0IG5vdCBkZXJlZmVyZW5jZSBpdC4KKworY29tbWl0IGMxOTliZjkxYjYyMzlmMjZiMmFhYjM0ZTg1NzVlMGYwZGY5Y2RlOWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDI0IDE0OjI1OjI4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiB4ZnMsIGpmcyBhbmQgdnhmcyBmaWxlc3lzdGVtcyBhcmUgbm93IHJlY29nbml6ZWQgaW4gaHJTdG9yYWdlVGFibGUKKworY29tbWl0IDc0N2ZkYzcxZTY0ZDA5ZTA4MDkyOGViYmI0ZDA0Y2JkZTM5MDY3OTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDUgMTU6NTc6NTkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IExvd2VyZWQgc2V2ZXJpdHkgb2YgJ2Vycm9yIGZpbmRpbmcgcm93IGluZGV4IGluIF9pZlhUYWJsZV9jb250YWluZXJfcm93X3Jlc3RvcmUnIG1lc3NhZ2UuCisgICAgCisgICAgVGhlIG1lc3NhZ2UgaXMgc2hvd3MgdXAgd2hlbiBzbm1wZCBpcyBzdGFydGVkIGFuZCB0aGVyZSBpcyBkaWZmZXJlbnQgc2V0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB0aGFuIGl0IHdhcyB3aGVuIHNubXBkIHdhc3QgbGFzdCBzdG9wcGVkLiBUaGlzIGlzIGNvbW1vbiBvbiBwcHAtc2VydmVycyBvciB2aXJ0dWFsIGhvc3RzLgorCitjb21taXQgMjUwZjY5OGU1OWVhYjlmMWZmZDMzMmZmNTlmZGI3MmVhMGRmMDZmZgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyMyAwODo1MToyMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWFrZSB0aGUgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gY29kZSB3b3JrIGFnYWluCisgICAgCisgICAgUHJldmlvdXNseSB0aGUgdHJhbnNwb3J0IGluaGVyaXRhbmNlIHByb2Nlc3NpbmcgY29kZSByYW4gd2l0aAorICAgIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyBzZXQuIEluIHRoaXMgbW9kZSB0aGUgZmlsZSBuZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaAorICAgIGlzIHJlcXVpZXJlZC4gVGhhdCBmaWxlIGlzIGNyZWF0ZWQgZHVyaW5nIHRoZSBmaXJzdCBtYWtlIHJ1biwgYW5kIHRoYXQgaGFwcGVucworICAgIGFmdGVyIGNvbmZpZ3VyZSBpcyBydW4uCisgICAgQ2hhbmdlIHRoaXMgdG8gdW5kZWZpbmUgTkVUU05NUF9NSU5JTUFMX0NPREUsIGVmZmVjdGl2ZWx5IHR1cm5pbmcgb2ZmIGZlYXR1cmUKKyAgICBzdXBwb3J0IGR1cmluZyB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBpbiBvcmRlciB0byBtYWtlIGl0IHdvcmsgYXQgYWxsLgorCitjb21taXQgNmVmNjkwNzY0MjI0N2M2NjNiOWI4OTY0YjlmZDQ0YTIxMWRiY2FhNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE9jdCAyMCAyMDozMDo1NCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzNDA4Mzk4OiBGaXggYSBtZW1vcnkgbGVhayBpbiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLgorICAgIAorICAgIFRoaXMgbWVtb3J5IGxlYWsgd2FzIGludHJvZHVjZWQgdmlhIGNvbW1pdAorICAgIDliZjNkOTZkOTZhOGVjZDRhNWZjMzVjMzI2ZGM5Mzc0NjcwMDJiNmM6IEluaXRpYWwgSEFMCisgICAgaW1wbGVtZW50YXRpb24gb2YgRmlsZVN5c3RlbSBpbmZvcm1hdGlvbiAoTWFyY2ggNywgMjAwOCkuCisKK2NvbW1pdCBjZjgyYjg5NGIyMjE3YzI2ZWRjNmYxMzU2MzUxYzkzMjQxNTYwNGUyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgT2N0IDE1IDE0OjQ1OjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMzQyMzkxNTogQ2hhbmdlIGRlZmF1bHQgbnVtYmVyIG9mIHJldHJpZXMgYmFjayBmcm9tIDAgdG8gNQorICAgIAorICAgIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW50cm9kdWNlZCB2aWEgY29tbWl0IDZjYWMwNTAgKE1heSA1LCAyMDExLAorICAgIGFkZGVkIHN1cHBvcnQgZm9yIHNwZWNpZnlpbmcgdGhlIGRlZmF1bHQgbnVtYmVyIG9mIHJldHJpZXMgaW4KKyAgICBzbm1wZC5jb25mKS4KKworY29tbWl0IGMxMWFkYWExMjkxNWFiZmVlNjI5YmI2YzAyNmMyMWYyMTg1YjIxNmUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTcgMTA6MjQ6NDYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luMzI6IEF2b2lkIHRoYXQgY29tcGlsaW5nIHRoZSBoZWFkZXIgZmlsZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IHdpdGggdGhlIE1pbkdXIGdjYyBjb21waWxlciB0cmlnZ2VycyB3YXJuaW5ncyBhYm91dCAicHJhZ21hIGNvbW1lbnQiLgorCitjb21taXQgYjE3YTcyYTc5MzQ4M2FlZTRhNWJiMmYyZTJjN2Y0ZmQ4Njk4MTdlNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxNyAxMDoyMjoyMCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogQXZvaWQgdGhhdCB0aGUgUEFDS0FHRV8qIG1hY3JvcyBkZWZpbmVkIGluIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gY2F1c2UgdHJvdWJsZSB3aGVuIGluY2x1ZGluZyB0aGlzIGhlYWRlciBpbiBhIHBhY2thZ2UgdGhhdCB1c2VzIHRoZSBHTlUgYXV0b3Rvb2xzLgorCitjb21taXQgNjY0ZDNhZTEwN2Q3NTQwNTFiOGM0MjI3OWQ0NTlhYTU3YTFiZTFjMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxMCAxNjo0NzoxNiAyMDExICswMjAwCisKKyAgICBNaW5HVywgaHdfZnN5czogVXNlIHByb3BlciBmb3JtYXQgc3BlY2lmaWVycyBpbiBhIGRlYnVnIHN0YXRlbWVudC4KKyAgICAKKyAgICBUaGlzIHBhdGNoIGZpeGVzIGFuIGlzc3VlIGludHJvZHVjZWQgaW4gY29tbWl0IDc2ZmYyNWQuCisKK2NvbW1pdCAyMTFkY2I0OTMwNjU2MWUzNWJhM2MyMTNiZTdjZmEyNTdiNDBhOGU1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDEwIDE1OjUyOjQzIDIwMTEgKzAyMDAKKworICAgIEF2b2lkIHRoYXQgZ2NjIDQuNiBjb21wbGFpbnMgYWJvdXQgc2V0IGJ1dCBub3QgdXNlZCB2YXJpYWJsZXMKKworY29tbWl0IDlmNjUzZjczZTVhYTcwZjBiZWYxMTc0NjMyZTk1NTk0Zjg3ZjY2OWYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTM6MDI6MjUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkX3NxbDogQXZvaWQgdGhhdCBhIGxpbmtlciBlcnJvciBpcyB0cmlnZ2VyZWQgb24gc3lzdGVtcyB3aGVyZSBteV9wcm9nbmFtZSBpcyBtaXNzaW5nIGluIGxpYm15c3FsY2xpZW50IChlLmcuIEZlZG9yYSAxNSBhbmQgMTYpLgorCitjb21taXQgNGM4M2I5MjI5YTc0NTRmMzRmNmZmNzVmNjllNjdlNDAzMGM0MTliNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE9jdCA3IDE1OjU4OjQ1IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNldCB0aGUgcnBhdGggZm9yIGxpYnBlcmwuc28gaW4gbGlibmV0c25tcG1pYnMuc28gc3VjaCB0aGF0IHRoZSBkeW5hbWljIGxpbmtlciBjYW4gZmluZCBsaWJwZXJsLnNvIHdpdGhvdXQgcmVxdWlyaW5nIHRoZSB1c2VyIHRvIG1vZGlmeSB0aGUgZHluYW1pYyBsaW5rZXIgc2V0dGluZ3MuCisgICAgCisgICAgVGhpcyBjaGFuZ2UgaW4gYWdlbnQvTWFrZWZpbGUuaW4gaXMgbmVjZXNzYXJ5IG9uIHRoZSA1LjUgYnJhbmNoIGFuZAorICAgIGxhdGVyIGJ1dCBub3Qgb24gdGhlIDUuNCBicmFuY2guIFRoYXQgaXMgYmVjYXVzZSB0aGUgNS40IGJyYW5jaCB1c2VzCisgICAgYW4gb2xkZXIgdmVyc2lvbiBvZiBsaWJ0b29sIHRoYXQgcHJvcGFnYXRlcyB0aGUgcnBhdGggb2YgZGVwZW5kZW50CisgICAgbGlicmFyaWVzLiBUaGlzIGlzIGNhbGxlZCBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY3kgdHJhY2tpbmcgaW4gdGhlCisgICAgbGlidG9vbCBtYW51YWwuIFRoaXMgZnVuY3Rpb25hbGl0eSBpcyBwcmVzZW50IGluIGxpYnRvb2wgdmVyc2lvbiAxCisgICAgYnV0IG5vdCBpbiBsaWJ0b29sIHZlcnNpb24gMi4gRm9yIG1vcmUgYmFja2dyb3VuZCBpbmZvcm1hdGlvbiBhYm91dAorICAgIGR5bmFtaWMgbGlicmFyaWVzIGFuZCBycGF0aHMsIHNlZSBhbHNvIHRoZSBkb2N1bWVudCB3aXRoIHRoZSB0aXRsZQorICAgICJScGF0aElzc3VlIiBvbiB0aGUgRGViaWFuIHdpa2kgKGh0dHA6Ly93aWtpLmRlYmlhbi5vcmcvUnBhdGhJc3N1ZSkuCisKK2NvbW1pdCA4OTI1YzkxMmQyNjM5NzUyYTg0YmNmZmVlZjFiNzBhODEwMjY0NDliCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDcgMTQ6MjE6MjggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IEhPU1QtUkVTT1VSQ0VTLU1JQjogQWRkIG1pc3NpbmcgYnJhY2UgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKworY29tbWl0IDc2ZmYyNWQ5YmY5NzU3OWU3MjEzMTAyMDY1ZmQ1MDk2ZjA0OWE0YzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBPY3QgNyAxNDoxMzoxOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogSE9TVC1SRVNPVVJDRVMtTUlCOjpoclN0b3JhZ2VUYWJsZTogZml4IGJ1ZyBpbiBoYW5kbGluZyBsYXJnZSBmaWxlc3lzdGVtcywgd2hlcmUgbGFyZ2UgbWVhbnMgYWJvdmUgOCBUQiAoPSAyKiozMSAqIDQwOTYgYnl0ZXMpLgorICAgIAorICAgIFRoaXMgcGF0Y2ggZml4ZXMgYSBidWcgaW50cm9kdWNlZCBpbiBjb21taXQKKyAgICA3MWQ4MjkzZjM4N2E2Y2Q2NmJiMGRiYjEzYzBmNTAxNzRkMmU2NzhiLgorICAgIEZvciB0aGUgb3JpZ2luYWwgYnVnIHJlcG9ydCwgc2VlIGFsc28KKyAgICBodHRwczovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhdGlkPTExMjY5NCZhaWQ9MzQxOTgyNSZncm91cF9pZD0xMjY5NC4KKworY29tbWl0IDg2NjAzM2RiOTkwNGZmYjEyMDNmMjgzZjgzODA5MmU0Y2Y2OGRlNmIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBPY3QgNiAwNzozMzoyNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUmVtb3ZlIHNwdXJpb3VzICNlbmRpZiB0aGF0IHNlZW1zIHRvIGJlIHRoZSByZXN1bHQgb2YgYSBtaXNtZXJnZS4KKworY29tbWl0IDIwZjRmMzI2N2VlMjBkNTU3MDViN2E0Mzc4OTg3OWMxMDNmOTY2MjAKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBPY3QgNiAwMDowODo1OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIG1pc3NpbmcgZW5kIGNvbW1lbnRzIHRvIGZlYXR1cmUgaWZuZGVmcy4KKworY29tbWl0IGU1ZGUyY2M1N2JmMzA0ZjMzMjBjYWQwMDM0ZDJlYTJkOGFlZGM0MzYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgNSAwOToxNToxMCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogTG9nIGEgbW9yZSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlIGlmIGVtYmVkZGVkIHBlcmwgaW5pdGlhbGl6YXRpb24gZmFpbHMKKworY29tbWl0IDVlZWY5OTkwZGUyOGY2MzExMWU2YzA5M2JlMGYzYzdhZTJkNTEzYTEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgNSAwODo0NTo0OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBBZGQgYWdlbnQ6OnVwdGltZSgpCisKK2NvbW1pdCA2ODEwZWQ0MmY5YmM1NjA3NTBkNmRiZmI3ZTUwYjZlMmFjMTE4OTljCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgU2VwIDMwIDExOjAxOjIzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IEN5d2luOiBhZ2VudDogSW1wbGVtZW50IGdldF91cHRpbWUoKSBzdWNoIHRoYXQgcXVlcnlpbmcgSE9TVC1SRVNPVVJDRVMtTUlCOjpoclN5c3RlbVVwdGltZSByZXR1cm5zIGEgbm9uLXplcm8gdmFsdWUuCisKK2NvbW1pdCA5NzE3MmIzMTFkMjBmNDQ0MWM3YTdlOTAwOTJiNTljMWUwZGE5OWY3CitBdXRob3I6IFRob21hcyBKYXJvc2NoIDx0amFyb3NjaEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgNSAwODo0NjozOSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBQQVRDSDogMzQxODY0OTogSE9TVC1SRVNPVVJDRVMtTUlCOiBVc2UgcGNsb3NlKCkgaW5zdGVhZCBvZiBmY2xvc2UoKSB0byBjbG9zZSBhIHBpcGUuCisKK2NvbW1pdCA2NTkxOTM3YWRiODUwMDBjMjcwNjljNGJlODRjZjQ2ODg4MzhlYmNkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIgMTY6MTg6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IEFkZCBkZXBlbmRlbmNpZXMgb24gQEZFQVRVUkVUQVJHU0AgdG8gbWFrZSB0aGUgc3VidGFyZ2V0IHdvcmsgYXMgd2VsbC4KKworY29tbWl0IGI5YzgwMTJlYzAzNWJjMDg0ZjE3NTg3NmZlY2MzNzUxOTVmOWJlODEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNDowMjo1OCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIHRhcmdldCB0byBidWlsZCBhZ2VudHh0cmFwIGZyb20gdGhlIHRvcGxldmVsCisKK2NvbW1pdCA5OTU2NDdjMGNmZTAwNDEyMjYyY2M1Nzk3YmRmYWU5ZDAwYjcwYzc2CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIgMTU6NDQ6MzYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJlbW92ZSB0aGUgdXNlIG9mIC1MIGZsYWdzIGZvciBpbnRlcm5hbCBsaWJyYXJpZXMgYXMgaXQgY29uZnVzZXMgbGlidG9vbC4KKworY29tbWl0IDkzZGMxMjM1YTBkYjU4ZmZkMjk2MTdjZmYwMGRjMTEyNjM3ODAyMDIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxMTozMTo0NiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWFrZSBtYWtlIGFwcHMgd29yayBhZ2FpbgorICAgIAorICAgIGFwcHMgaW5jbHVkZSBzbm1wdHJhcGQgYW5kIHRoYXQgcmVxdWlyZSB0aGUgYWdlbnQgbGlicmFyaWVzIGFzIHdlbGwuCisKK2NvbW1pdCBiYTQxNDg4ZWQ0NGNkMjNjMjU5NjNkNGZjNTZjNDc2ODUzYjJhYjU5CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIgMTE6Mjk6MzMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IFdoZW4geW91IHNheSBtYWtlIGxpYnMgeW91IGV4cGVjdCBhbGwgdGhlIGxpYnMgdG8gYmUgYnVpbHQuCisgICAgCisgICAgVGhpcyBpcyBkZW1vbnN0cmF0ZWQgYnkgdGhlIHNubXB0cmFwZCB0YXJnZXQgYXQgdGhlIHRvcCBsZXZlbCB3aGljaCBvYnZpb3VzbHkKKyAgICBleHBlY3RlZCBib3RoIGxpYnMgdG8gYmUgYnVpbHQgYW5kIHNvIGZhaWxlZCB0byBjb21waWxlIGJlZm9yZSB0aGlzIHBhdGNoLgorCitjb21taXQgMzA1N2M3M2UwOTM0NzNiZTQ2MjU0YmNkZmI0Y2E3ODhlNDMyZDFiOAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMzAgMDc6MzI6NTIgMjAwOCArMDAwMAorCisgICAgTkVXUzogYnVpbGRpbmc6IFBBVENIOiAyMDkxMTU2OiBjb3JyZWN0bHkgZGVjbGFyZSBkZXBlbmRlbmNpZXMgaW4gTWFrZWZpbGUuCisgICAgJ21ha2UgLWogPE4+JyBzaG91bGQgd29yayBub3cuCisgICAgCisgICAgQmFja3BvcnQgdGhpcyB0byBWNS00IGFzIGl0IGlzIG5lZWRlZCBmb3IgY29ycmVjdCBvcGVyYXRpb24gaW4gdGhlIHNpbmdsZQorICAgIHRocmVhZGVkIGNhc2Ugb2YgbWFrZSBtaWJsaWIgYXMgd2VsbC4KKworY29tbWl0IDZlYWUzNDBmYTJhNjQwODY1OTI5ODJjYzUyNzM1YmMwMTQ4N2Q5NzgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBPY3QgMSAxOTozMzo1MCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogU2lsZW5jZSBsaWJic2QgMC4zLjAgbmFnZ2luZworICAgIAorICAgIElmIHlvdSBoYXZlIGxpYmJzZCAwLjMuMCBpbnN0YWxsZWQgdGhlbiB0aGVpciB2ZXJzaW9uIG9mIG5saXN0Lmggd2FybnMgYW5kCisgICAgdHJpZXMgdG8gbWFrZSB5b3UgaW5jbHVkZSBic2Qvbmxpc3QuaCBpbnN0ZWFkLiBUaGUgcHJvYmxlbSBpcyB0aGF0IHdlIGRvbid0CisgICAgbmVlZCB0aGF0IGNvbXBhdGliaWxpdHkgbGlicmFyeSBhcyB3ZSBrbm93IGhvdyB0byBkbyBpdCBvdXJzZWxmIHNvIGl0IGJlY29tZXMKKyAgICBwdXJlIG5hZ2dpbmcuIFRoaXMgcGF0Y2ggYWRkcyBhIGRlZmluZSB0aGF0IGNoYW5nZXMgdGhlIHdhcm5pbmcgaW50byBhbgorICAgIGVycm9yIGFuZCB0aGVuIGZpZ3VyZXMgb3V0IHRoYXQgdGhlcmUgaXMgbm8gdXNhYmxlIG5saXN0LmggYW5kIGlnbm9yZXMgaXQKKyAgICBmb3IgdGhlIGZ1dHVyZS4KKworY29tbWl0IGFjMzhjYjUzMWJlZTUwZWRjOGQ0YzgzNGYzMDA1ZjU5OTJjNzcxZDgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMTk6MDM6MDIgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogRW5hYmxlIHNlbmRpbmcgU05NUHYyIHRyYXBzIHdpdGggYW4gZW1wdHkgdmFyYmluZCBsaXN0CisKK2NvbW1pdCBhNzVkZTI5NzE1MjdhYzJkMmU4MTIwMjQyOTg2MDJiYjI0MTJmMzM3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgU2VwIDMwIDEwOjQxOjQ0IDIwMTEgKzAyMDAKKworICAgIHBlcmwvU05NUC9TTk1QLnhzOiBVcGRhdGUgZW1hY3MgbW9kZWxpbmUKKworY29tbWl0IDg0OGY2MzAwZWZlMzg0OTJmYjQ1NDQ1MWEwMzBmMGI3ZTZmZjhjOWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTA6NDE6NDQgMjAxMSArMDIwMAorCisgICAgcGVybC9TTk1QL1NOTVAueHM6IFVwZGF0ZSBlbWFjcyBtb2RlbGluZQorCitjb21taXQgYzEzNzQ0NzNlY2Q4ZWM5ZTAzMTAwMTM4NjFlZTE4YzgzZTVkNmM1YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIFNlcCAzMCAwMzoyOTozNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBQcm90ZWN0IHRoZSB1c2Ugb2YgJE9TVFlQRSB0byBlbnN1cmUgdGhhdCAndGVzdCcgZ2V0IGVub3VnaCBwYXJhbWV0ZXJzLgorCitjb21taXQgN2U5N2EyMDYzM2E1N2VhZTM5ZDAxNWIyMzMzOTQ2M2MzMmY1Zjg0OAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyOSAxMDoyMjowOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBDb252ZXJ0IHNubXBsaWIvdGVzdF9iaW5hcnlfYXJyYXkuYyBpbnRvIHR3byB1bml0IHRlc3RzCisKK2NvbW1pdCA5YzBkZDk4MTc2NDU3MzQyZmZmYWE1ZTc0ZDgwMmUzMTQ1ZWQ3MGU3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDI5IDA4OjU2OjE3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCB1bml0IHRlc3QgZm9yIG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpCisKK2NvbW1pdCA1ZmQyNmU0ZmEzZTAwMGVhOWM4MWMzOGFiOTc1Yjc5NDZlZmUyMTU3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgU2VwIDI4IDE3OjQ5OjU1IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBBdm9pZCB0aGF0IG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpIGZhaWx1cmUgdHJpZ2dlcnMgYSBkb3VibGUgZnJlZS4KKyAgICAKKyAgICBGaXhlcyBhIHJlZ3Jlc3Npb24gaW50cm9kdWNlZCB2aWEgY29tbWl0CisgICAgYWE0ZDQ3YzI2MDllNTI4MThjOWNkZjFhOGUyMjA1ZGU5YTMzNWEwYSAoc3ZuIHIxOTUxNSkuCisKK2NvbW1pdCBkMjI1MmQwMTY2OTM4MDczMjZmNzJiNjYxMjM2NDlkZWEwMGFmOTE2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDI5IDEwOjIwOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFJlcXVpcmUgYSBzZW1pY29sb24gYWZ0ZXIgT0soKSwgT0tGKCkgYW5kIFBMQU4oKQorICAgIAorICAgIEFsc28sIGxldCBPS0YoKSBlbWl0IGEgc2luZ2xlIGxpbmUgb2Ygb3V0cHV0IHN1Y2ggdGhhdCBhbGwgb3V0cHV0IGl0CisgICAgcHJvZHVjZXMgaXMgdmlzaWJsZSBpbiB0aGUgb3V0cHV0IG9mICJtYWtlIHRlc3QiLgorCitjb21taXQgMTQyMTkyNGI0ODUyMTQyMTkyYzViYjllOTNkZGJmZWQ2OWU5MDhmYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIFNlcCAyMSAyMjoyMDowOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBBdm9pZCB3YWl0aW5nIGluZGVmaW5pdGVseSBpZiBhIHNlc3Npb24gaGFzIHRpbWVvdXQgemVybworCitjb21taXQgNWYyN2Y0Zjc0YWUyYmQ1YmFmNTAzY2YzMDZiNGY5YTI4NDFhNTdjZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjMyOjAzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdGVzdCBydW5uZXIKKworY29tbWl0IDA5NzAzOTU4Y2M1ZWE4NDU5MjlhZTE5ZWY5ZTA4MDRhZWNhYTUxMmUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMjcgMTI6NDI6NDEgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQXZvaWQgZmFsc2UgbmVnYXRpdmUgZm9yIFQxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZSBjYXVzZWQgYnkgdGhlIHRlc3QgcmVzdWx0IGJlaW5nIHByZXNlbnQgaW4gdGhlIGhleCBkdW1wICgibW9zdGx5X2hhcm1sZXNzIikKKworY29tbWl0IDQzOTMwMDI3OWY2ZjMxNDM4NjM4ZDJmMjIyYzI0YzNjODQxZmE2YWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMjcgMTE6MTY6MzIgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IE1pY3JvLW9wdGltaXplIGFnZW50IG1vZHVsZSBkZXBlbmRlbmN5IGFuYWx5c2lzCisgICAgCisgICAgVGhpcyBtYWtlcyB0aGUgYWdlbnQgbW9kdWxlIGRlcGVuZGVuY3kgYW5hbHlzaXMgY2FycmllZCBvdXQgYnkgdGhlCisgICAgY29uZmlndXJlIHNjcmlwdCBzbGlnaHRseSBmYXN0ZXIsIGVzcGVjaWFsbHkgb24gdGhvc2Ugc3lzdGVtcyB3aGVyZQorICAgIGZvcmsoKSBpcyBleHBlbnNpdmUgKEN5Z3dpbikuCisKK2NvbW1pdCBiYmM2ODAwMDRhMTM3NjAzOGRmZGM0MTcyZGJlN2I5ZTMxMWZiYTY4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gU2VwIDI2IDEwOjE0OjQ1IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBNYWtlIHRlc3QgVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlIHBhc3MKKworY29tbWl0IDcwYjA2Y2Y3ODkyMDhlYWE4OTBiZmJjZDYzOGJkYjc3NWY4MTcwNTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMjAgMDk6NTA6NTcgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogdGVzdGluZzogcGVybDogRml4IGFuIGluY29ycmVjdCBtZXNzYWdlIHByaW50ZWQgd2hpbGUgcnVubmluZyB0aGUgUGVybCBtb2R1bGUgcmVncmVzc2lvbiB0ZXN0cworCitjb21taXQgNzBiY2M4ZGUyZDBmYzkyYmJiODQ4MTgyMzYzMGZhYjliYzg3YWY3NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIFNlcCAxNiAxNjoxNDoyNCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogT2J0YWluIHRoZSBNU1lTIHBhdGggZnJvbSB0aGUgZW52aXJvbm1lbnQKKworY29tbWl0IDYyNjI3NWUyZDFhY2FmYWU3MTQ0YTMzZWQzMDFhNDBmNTk2YjM3YjAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBTZXAgMTQgMTM6MTQ6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogUmVtb3ZlIHN1cGVyZmx1b3VzIGxpbmsgbGlicmFyaWVzIGZyb20gcHJvamVjdCBmaWxlcyAoKi5kc3ApCisKK2NvbW1pdCAzOGZjM2NhYTllZWIzODAwMjU0YjRmNmFkNmY4ZjQ3NjRjMGY4M2RiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDIwIDA5OjM0OjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgbmV0c25tcF9jYWxsYmFja19hY2NlcHQoKSByZXR1cm4gLTEgKGZhaWx1cmUpIGluc3RlYWQgb2YgMCAoU1RESU5fRklMRU5PKQorCitjb21taXQgNmM4YzdlOGFjYThmYzJlZWI1MjAxMGFlM2U5ZmVlNmRkODNlZjc4MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAxMyAwOTo1ODoyNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBSZW1vdmUgb2Jzb2xldGUgc25tcF9nZXRfZmRfZm9yX3Nlc3Npb24oKSBkZWNsYXJhdGlvbgorCitjb21taXQgMDg2MGQxMWZkOGZjNWRiZGFhYWUyMjYxZmFlMmMwN2ZiOWMyYzgyZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCA4IDEzOjU0OjU1IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IE1TVkM6IEF2b2lkIHRoYXQgdGhlIHR5cGVkZWZzIGluIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gY29uZmxpY3Qgd2l0aCB0aG9zZSBpbiA8c3RkaW50Lmg+IGZyb20gdGhlIG1zaW50dHlwZXMgcHJvamVjdAorCitjb21taXQgZjhhMDM2ZjYzZmY2OGYwODM0MzYxMjBlMGFiZDQ3OGI2OTJhMmY2MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCA4IDEzOjIxOjA2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IE1TVkM6IFdoZW4gbGlua2luZyB3aXRoIE9wZW5TU0wsIGxpbmsgd2l0aCB1c2VyMzIubGliIHRvbworCitjb21taXQgODM2YTIzZTEwY2E4MTBjMzg5OTkwMmQzMjU4NzYxNmE5ZDEyMDNkZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEp1bCAxNCAxODozODoxMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNU1ZDOiBMaW5rIHdpdGggcHJvcGVyIGxpYmVheTMyIGxpYnJhcnkKKworY29tbWl0IDdiMDdmZDZjZGVmNDllYzdiYjA0YjE2NmUyYTRmYmIzN2I1ODI4NDAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMToxMDozOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBSZW1vdmUgYW4gaW5jb3JyZWN0IGNvbW1lbnQgZnJvbSBzaW1wbGVfZXZhbF90b29scy5zaAorCitjb21taXQgOThmNmQyOWQ5ODFmZjhlNjA3NjAwYzYzZGFkYjI0MDUzNTYyOTgwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjQ5OjAzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgSVNERUZJTkVEKCkgY2hlY2sgZm9yIGFuIGV4YWN0IG1hdGNoIGluc3RlYWQgb2YgYSBwcmVmaXggbWF0Y2gKKworY29tbWl0IDUyY2QwMDMxYTMxZjY5MmYxMzI2M2E5NGMzMzVkMDZiZTE0NTQ4MDMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDoxMjo1OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogTWFrZSB0aG9zZSByZWdyZXNzaW9uIHRlc3RzIHBhc3MgZm9yIHdoaWNoIFNOTVBDT05GUEFUSCBhbmQvb3IgU05NUF9QRVJTSVNURU5UX0RJUiBtYXR0ZXIKKworY29tbWl0IGY1Y2Q4OWJkMzM1NmRkNzRlMTU1NmMwYjUwOTY2YTY0M2YxOTIwODUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDoxMjo1OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogdGVzdGluZzogRml4IGEgcmFjZSBjb25kaXRpb24gaW4gdGhlIHRlc3QgZnJhbWV3b3JrCisKK2NvbW1pdCBkZWVkZDUyYzgzNGE2NDQ4ODUyYTA2Nzg1NTM2ZTEzODY1OTY5Njk0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6MTI6NTggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IFN1cHBvcnQgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgb2YgcmVjZW50IFNoaW5pbmcgTGlnaHQgT3BlblNTTCBiaW5hcnkgZGlzdHJpYnV0aW9ucworCitjb21taXQgZDU1YmQ0ZTA1NDlmMDNiNmZkMzI1NjJjMmFhN2ZlMzkyNzJhOWVmNworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAyOCAwNjo1NToxOSAyMDExIC0wNzAwCisKKyAgICByZW1vdmUgdGhlIHY1LjcgZnJvbSB0aGUgZnJvemVuIGxpc3QKKworY29tbWl0IGFjMmFlZDNjOTRiYjJlYmI0NzNhZjBhMWUyMGYwNTYxYWQ2Mjk5NTYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgMjggMDY6NTU6MTEgMjAxMSAtMDcwMAorCisgICAgcmVtb3ZlIHRoZSB2NS43IGZyb20gdGhlIGZyb3plbiBsaXN0CisKK2NvbW1pdCA0MDA3OTIwNTk2N2I4ZTVhZWVkYjE5ZmEzY2IyZTdiMmY3OTg4NTc3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI3IDIxOjUzOjQ3IDIwMTEgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kCisKK2NvbW1pdCBjZjE0YTIyODU4M2FmZjNjNWFiMmYwZDQ0YzJmNGMwZmE1YmQ2NmFmCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgU2VwIDI3IDIxOjUzOjE4IDIwMTEgLTA3MDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMQorCitjb21taXQgMTAxNGRkOGRmYjQ4YTViZDA1M2YwNDU0MWViOTcyOGYwYmUwN2Y0NworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAyNyAyMTo0NTowNCAyMDExIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEKKworY29tbWl0IDE4ZDExNmJhMzg4YzFkYzk0OTUyODg4NGJiMDA2OThmMWJhY2FhOTQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBTZXAgMjcgMjE6MTE6NTIgMjAxMSAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMQorCitjb21taXQgNDZlYWMwMmU5YTI3YmY0ZjMwNjhlNzk1Y2FiODkxZjA1YTg0ODg3MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIFNlcCAyNiAyMTo0OToyNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQXZvaWQgdGhhdCBzbm1wZCBjcmFzaGVzIGlmIHN0YXJ0ZWQgb24gYSBzeXN0ZW0gd2l0aCBhbm90aGVyIE9wZW5TU0wgbGlicmFyeSB2ZXJzaW9uIHRoYW4gdGhlIG9uZSBpdCBoYXMgYmVlbiBidWlsdCB3aXRoLgorCitjb21taXQgYTVmMDY0ZGQ4Mjk5NmUyYmUzZjFlOTYxNjcwM2FkMDM5NWZiNWFiYQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IFNlcCAyMiAwNzozMzowMSAyMDExIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucmMzCisKK2NvbW1pdCA1Njk3OTRmY2ViOTllZWQ3YmU4MTdjNjRmODVjZDk0NWNhZjk5NTkyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgU2VwIDIyIDA3OjIwOjA3IDIwMTEgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucmMzCisKK2NvbW1pdCBjNTVmNjA4ZjE2ZjE2MGY1ZTc5ZGMwNTdmODg3OGRlZjQ2Mjk3M2UxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IFNlcCAyMiAxMDozNToyNCAyMDExICswMTAwCisKKyAgICBGaXggdGhlIGNvZGUgZm9yIHBvcHVsYXRpbmcgdGhlIHRhYmxlX3RkYXRhIGNhY2hlLAorICAgIGFuZCBjbGFyaWZ5IGFyZWFzIG5lZWRpbmcgTUlCLXNwZWNpZmljIGFkZGl0aW9ucy4KKworY29tbWl0IDEzNzYzY2YyYzcxYmY5M2ZlYzA5NmVlZTAwNDg1N2MxNWIyY2ZmZmYKK0F1dGhvcjogU3RldmUgRnJpZWRsIDxzdGV2ZUB1bml4d2l6Lm5ldD4KK0RhdGU6ICAgVGh1IFNlcCAyMiAxMDowNjo0NSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogMzQwOTY5MjogQ2FsY3VsYXRlIGRpc2sgcGVyY2VudGFnZSB1c2FnZSB2aWEgZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYworICAgIHRvIGF2b2lkIGludGVnZXIgYXJpdGhtZXRpYyBlcnJvcnMuCisgICAgKENvZGUgYmFzZWQgb24gcGF0Y2gsIHJhdGhlciB0aGFuIGFwcGxpZWQgdmVyYmF0aW0pCisKK2NvbW1pdCBlZTBkM2FkYjA3ODI5MWI3NDNjOWVjYjc2ZDIwYjU5MWI3YjE1OTcyCitBdXRob3I6IFN0ZXZlIEZyaWVkbCA8c3RldmVAdW5peHdpei5uZXQ+CitEYXRlOiAgIFRodSBTZXAgMjIgMDk6NTg6MzkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IDM0MDk2OTI6IENhbGN1bGF0ZSBkaXNrIHBlcmNlbnRhZ2UgdXNhZ2UgdmlhIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMKKyAgICB0byBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93IGVycm9ycy4KKyAgICAoQ29kZSBiYXNlZCBvbiB0aGUgc3VibWl0dGVkIHBhdGNoLCByYXRoZXIgdGhhbiBhcHBsaWVkIHZlcmJhdGltKQorCitjb21taXQgMzY3ZGExNGZjZGIxNDY1OTJkZTY3YzFkNjk5N2EwOTc3NDI1OTY3MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyMiAwODowOToxNyAyMDExICswMjAwCisKKyAgICBUaGUgb25seSBjaGFuZ2UgYmV0d2VlbiBWNS43LnJjMSBhbmQgVjUuNy4xLnJjMiBpcyB0aGUgdmVyc2lvbiBudW1iZXIuIE1ha2UgdGhpcyBjbGVhciBpbiB0aGUgQ2hhbmdlTG9nIGZpbGUuCisKK2NvbW1pdCBjMjc2ZWViOGYwNDU1YTA4NzBjNGI0NzhkZGU2NDhlODY1MjlhZGQzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDIxIDEzOjUxOjU4IDIwMTEgLTA3MDAKKworICAgIGNoYW5nZWxvZyB1cGRhdGUKKworY29tbWl0IDYzMDUwODM4NjY2ZjY0NWZjMzA2ZGMyZWU0ZjczZjVlZmNlNjNmZWQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBTZXAgMjEgMTM6Mzg6MTggMjAxMSAtMDcwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5yYzIKKworY29tbWl0IGJiZTJjMTlhMDFlY2VjMDI0Zjc0MWUyZTU0NzAxYWU2MjEyZjRjM2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBTZXAgNCAxNDo0NDozOCAyMDExICswMjAwCisKKyAgICBUaGlzIHNob3VsZCBoYXZlIGdvbmUgb25seSB0byBtYXN0ZXIuCisgICAgCisgICAgUmV2ZXJ0ICJDSEFOR0VTOiBidWlsZGluZzogQ29ycmVjdCBkZXBlbmRlbmNpZXMgLSBzaW5jZSBiZjc0ZmVhNjlmMjRkYzZlODVmOTA4ZjNmNDFkMTQyNmIyZTA5Njg4IHNubXBjb25mIGlzIGxvY2F0ZWQgaW4gYnVpbGRkaXIsIG5vdCBzcmNkaXIiCisgICAgCisgICAgVGhpcyByZXZlcnRzIGNvbW1pdCA5ZWZhNDY3YTk3MmJiNmUxYzdmYmRhZjJlMjc0MjlkMjlmNGFiODllLgorCitjb21taXQgOWVmYTQ2N2E5NzJiYjZlMWM3ZmJkYWYyZTI3NDI5ZDI5ZjRhYjg5ZQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIFNlcCA0IDE0OjAwOjEyIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBDb3JyZWN0IGRlcGVuZGVuY2llcyAtIHNpbmNlIGJmNzRmZWE2OWYyNGRjNmU4NWY5MDhmM2Y0MWQxNDI2YjJlMDk2ODggc25tcGNvbmYgaXMgbG9jYXRlZCBpbiBidWlsZGRpciwgbm90IHNyY2RpcgorCitjb21taXQgNzgzNTk2NGQzNTkzZTVjNmExYWU3ZGUwYjQxMTRiN2RmMWFlMGZlMQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxOToyMTo1MSAyMDExIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucmMxCisKK2NvbW1pdCBjYjZhMGMwYmQ2ZjhjMmM3Y2Q1ZmQ4NjA4MGRjNjMyNGU3ZjczODU4CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDE5OjIwOjM1IDIwMTEgLTA3MDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjcuMS5yYzEKKworY29tbWl0IGU1ZmYyZWI4M2JiYmVkOTJkYWM3NTFjNWE2NjQzZDc4ZjgzN2NmOWMKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTk6MTk6NDYgMjAxMSAtMDcwMAorCisgICAgZml4IEMrKyBjb21tZW50CisKK2NvbW1pdCBjYjFmNWNmZmM2ZmI1MmMyYTZjMGY3YjQwOGFmZWI0N2ZjZmU1NWU0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDE5OjA5OjU2IDIwMTEgLTA3MDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEucmMxCisKK2NvbW1pdCA0MjJiMDgyYTk1OTNjYTljNjVhYWM0NDllNmQxMjhhOWU5N2U5NGZiCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDE5OjA2OjU2IDIwMTEgLTA3MDAKKworICAgIGFkZGVkIDcgYXMgYSByYyBzZXJpZXMgYnJhbmNoCisKK2NvbW1pdCA3MWMwZDc2NTA0OTM3MTA2MzFmYTA4ZDVkYzRkYWQ1MDFhOWFhNzcxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDE2OjM3OjQxIDIwMTEgLTA3MDAKKworICAgIGRlYWwgcHJvcGVybHkgd2l0aCBpbnZlcnRlZCBlcnJvciBjYXNlcworCitjb21taXQgY2Y0Y2Y3ZjMyYWQ1OGYzMjZmZmVkNTA0OTQ1ODMyMzE2NDhkNzlkMgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyAyNiAxMTowODowOSAyMDExIC0wNzAwCisKKyAgICBhZGRlZCAuZnQgYW5kIC5mdC4xIGZvciBmZWF0dXJlIGZpbGVzCisKK2NvbW1pdCA0MWIyY2RlMTlkMjIyMDliNDgzMjA3NjE0ZTAyNzQ4M2MzNzA2ODc3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXVnIDMwIDExOjAzOjE1IDIwMTEgLTA3MDAKKworICAgIGF1dG8tZGV0ZXJtaW5lIHBhdGNoIGFyZ3VtZW50cyBpZiBwb3NzaWJsZSBmb3IgbnNwYXRjaHRyeQorCitjb21taXQgOTZiYjU4OWMyZTUwNTQ4OTBlOTg3MDVhYjVmNDMwOGFlNmExMzBiYgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxMDoxMzowNiAyMDExIC0wNzAwCisKKyAgICBtYWtlIGl0IHNvIHRoZSBnaXQgY29tbWl0IGxpbmUgY2FuIGJlIGN1dC9wYXN0ZSB3aXRob3V0IGxpbmVicmVha3MKKworY29tbWl0IDNmZTM2ZjdhZDcxYzA4ZTEyODZjZThlNDg3ZTkzNTJlMjdjZDk2Y2MKK0F1dGhvcjogUm9uYWxkIFdhaGwgPHJ3YS1jb0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMzAgMTA6MTI6MTEgMjAxMSAtMDcwMAorCisgICAgQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM5NDU4NjogZnJvbSByd2EtY286IGZpbGUgZGVzY3JpcHRvciBsZWFrIGluIHJlYWRfY29uZmlnICgrZml4KQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgNmU1NGM0MTMxYWY3MzFmZjkwNDY3YTc1YmNjODE3Yzk1N2Y4ZjcyYQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAwOTo1NToxNCAyMDExIC0wNzAwCisKKyAgICBkZXNjcmliZSB0aGF0IG5zcm9sbHVwIG5lZWRzIHRvIGJlIHJ1biBub3cuCisKK2NvbW1pdCA4NmVmZWUyMzQzMmNjYjBkMmUwYzczNmQzNGRjMTA1MTEzMGNkYzBmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEF1ZyAzMCAxMDo1MjozMCAyMDExICswMTAwCisKKyAgICBBcHBhcmVudGx5IElSSVggaGFzIGEgZGlmZmVyZW50IEFQSSBmb3Igc3RhdGZzCisKK2NvbW1pdCBmN2UyMWYyNjMzMzkwYjdhMjdjNTAyMjdiZWU2ZDg2OTZhZTNmYmNmCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDI5IDE2OjAxOjMxIDIwMTEgLTA3MDAKKworICAgIGRvbid0IHByb3ZpZGUgYSBmZWF0dXJlIHdoZW4geW91ciBhIGNoaWxkIG9mIGFub3RoZXIgZmVhdHVyZQorCitjb21taXQgY2FjMjNjMGIyNTc0ZTcyODBiZDEyOGM2MjI2ODc1YWQwZjZiNGJmYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEF1ZyAyOCAwOTozODoxNCAyMDExICswMjAwCisKKyAgICBNYWtlIHN1cmUgdGhhdCBmZWF0dXJlLWRldGFpbHMuaCBleGlzdHMgYmVmb3JlIHRyeWluZyB0byBpbmNsdWRlIGl0CisKK2NvbW1pdCA3ODFmNGNlMmFjYjM3MTU2MDc5N2Q4YjI5YTg5ZWQwNjc0ZTkzNWY4CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gQXVnIDI4IDA5OjM2OjM2IDIwMTEgKzAyMDAKKworICAgIFVzZSB0aGUgZmVhdHVyZSB0YXJnZXQgaW5zdGVhZCBvZiB0aGUgdGFyZ2V0IHdoZW4gYnVpbGRpbmcgdGhlIGZlYXR1cmUgc2V0CisKK2NvbW1pdCAxMWJmZjQ3MmNhN2IxZmNmZjBjMTYxODdhMWI4YTEzMDkzYmM5MWM0CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDI5IDAwOjMzOjU1IDIwMTEgKzAyMDAKKworICAgIHRoZSBpcml4NiBidWlsZCBvbmx5IGRlZmluZXMgaXJpeDYsIG5vdCBpcml4CisKK2NvbW1pdCAzYzczYTE0MDdhMDgxZDQyZWJkZDkxZGZiY2IxZTRmMTUyYjdkZjRhCitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDI5IDAwOjA1OjEzIDIwMTEgKzAyMDAKKworICAgIHJlLWFkZCBzb2NrYWRkcl91bi5zdW5fcGF0aCBjb25maWd1cmUgY2hlY2sgKGxvc3QgaW4gcHJldmlvdXMgY29tbWl0KQorCitjb21taXQgMmUzZjAyZTAzYWVkMTI1Mzg0YmE0ZmUzZDgzNDk0ZDQzZjNhMjllOQorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyOCAyMzo1MzozMCAyMDExICswMjAwCisKKyAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMgZG9lc24ndCBidWlsZCBvbiBJUklYIHlldAorCitjb21taXQgZjk1YWEzMTM3N2Q1NzJiMDQ5YjBiMzE2ZGJiMTYzYmY3YWNhOTNkNQorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyOCAyMzoyNTo0MCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQgZml4IGZvciBzeXN0ZW1zIGxhY2tpbmcgZmllbGRzIG1zZ19jb250cm9sL21zZ19mbGFncyBpbiBzdHJ1Y3QgbXNnaGRyIChiYWNrcG9ydCkKKworY29tbWl0IDdmNDdkOTM3NjVhYTM1YTU4Njg3ZWI5YjRmOWY3MDBlNDM0M2UxM2MKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBBdWcgMjYgMTE6MTE6MzUgMjAxMSAtMDcwMAorCisgICAgYWRkZWQgcmVxdWlyZWQgZmVhdHVyZXMgZm9yIG1mZCBoYW5kbGluZworCitjb21taXQgOWIyZTQyYTZlMDU1MGZiNzg5YzYwN2MzNTIwODgwZDRkYmMwY2YyNAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEF1ZyAyNiAxMTowODowOSAyMDExIC0wNzAwCisKKyAgICBhZGRlZCAuZnQgYW5kIC5mdC4xIGZvciBmZWF0dXJlIGZpbGVzCisKK2NvbW1pdCAzM2RjYmY1NmZjMDYyNmEzZTRmMTM1OTA5NWJkMjE3ZDFhNTY3Nzk0CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDI2IDExOjA3OjU4IDIwMTEgLTA3MDAKKworICAgIG5vX3dyaXRlX3N1cHBvcnQgc3VwcG9ydGVkCisKK2NvbW1pdCA5N2Q0MmVmZDc2OTM3Y2U3ZTRiYzQ4YTcyZWQ1YTExMGU0MjMxMDJkCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDI2IDEwOjA4OjUxIDIwMTEgLTA3MDAKKworICAgIGhhbmRsZSBuby13cml0ZS1zdXBwb3J0IHdpdGggaWZkZWZzCisKK2NvbW1pdCBlYThiZWQ3OWU4MWM0MmUzM2NiZjM3Y2E2ZjNjMDNjNTQ5OTg3YjIyCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgQXVnIDI1IDA2OjU2OjIyIDIwMTEgLTA3MDAKKworICAgIGltcG9ydCBzdGRlcnIKKworY29tbWl0IGZkNmQ4MDRkYzNlNzAzYzQwNTlkYmU3NzUwMDFhM2JlOWI5MzMwOWYKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBBdWcgMjUgMDY6NTU6MzggMjAxMSAtMDcwMAorCisgICAgdXNlID4+IHRvIHByaW50IHRvIHN0ZGVycgorCitjb21taXQgY2VlMDM1OWM2ZmFlMmI4NWQ3YjkzMTg1OWU1MTdkODljZTA3MjJiYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjMgMjM6NDM6MTkgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGQ6IERvIG5vdCBnZW5lcmF0ZSBhbiBvdXRwdXQgZmlsZSBvbiBmYWlsdXJlCisgICAgCisgICAgbWFrZSBzdXBwb3NlcyB0aGF0IG5vIG91dHB1dCBpcyBnZW5lcmF0ZWQgaWYgdGhlIGNvbW1hbmQgZmFpbGVkLiBDaGFuZ2UKKyAgICBmZWF0dXJlLXJlbW92ZSB0byBmb2xsb3cgdGhhdCBwcmVzdW1wdGlvbi4KKworY29tbWl0IGZlMzllNzI4OGNhOTMwZDJjOWFhYTgzMDFjYzlkOTVmMGMzOGYzNmIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDIxIDIxOjQ4OjE3IDIwMTEgKzAyMDAKKworICAgIENvcnJlY3QgdHlwbworCitjb21taXQgMWYwODJhMzFjZDEzOGYxZjVlMjdiZTZkOTBhMWQ1NzkwZGMwZmZlNAorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEF1ZyAyMyAyMzozNTo0MiAyMDExICswMjAwCisKKyAgICBtYWtlIHN1cmUgdGhhdCBfS0VSTkVMIGlzIGRlZmluZWQgdG8gMSBzbyB0aGF0ICIjaWYgX0tFUk5FTCIgd29ya3Mgb24gc3lzdGVtcyB0aGF0IG5lZWQgaXQgKGUuZy4gSVJJWCkKKworY29tbWl0IDI2YmIyNDcwYzEwNmY4MzQ0NDJhMmFkYmM3NjExYmYxNjY1N2ZiZGYKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBBdWcgMjMgMjM6MjI6NDQgMjAxMSArMDIwMAorCisgICAgbWFrZSBzdXJlIHRoYXQgX0tFUk5FTCBpcyBkZWZpbmVkIHRvIDEgc28gdGhhdCAiI2lmIF9LRVJORUwiIHdvcmtzIG9uIHN5c3RlbXMgdGhhdCBuZWVkIGl0IChlLmcuIElSSVgpCisKK2NvbW1pdCBmYzU1NjBjMDVmODQ4MzIxZGEwY2EwYzJlODcwMDFkNWYyMjk1MTY3CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDIyIDE4OjU0OjMwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZCBmaXggZm9yIHN5c3RlbXMgbGFja2luZyBmaWVsZCBtc2dfZmxhZ3MgaW4gc3RydWN0IG1zZ2hkciAoZS5nLiBJUklYKQorCitjb21taXQgOTZlYTJkMWE4ZWJmZmIzNDg2NzNhODY1ZDQ4NmYzMWU2MzVlNjJiZAorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyMSAwMTo1MTo0OSAyMDExICswMjAwCisKKyAgICBhdXRvcmVjb25mCisKK2NvbW1pdCAxYTI2NDhlYWY3MWNiMDE4OTUxNTk2Njg5YzUxNTg4ZGNhODA2M2M1CitBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gQXVnIDIxIDAxOjQ4OjU3IDIwMTEgKzAyMDAKKworICAgIGF1dG9yZWNvbmYKKworY29tbWl0IDNmMmY2MWIwZTYxM2Q2MTA1ZWNmMmNlYjM5NWRlMGJkZTM3ZjNjZTMKK0F1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBBdWcgMjEgMDE6NDc6MTMgMjAxMSArMDIwMAorCisgICAgYXV0b3JlY29uZgorCitjb21taXQgYjYyY2IwODY0ZjU3N2JhODU1NzNkMGQyNTBkMTJhMzkzODdjMDdiNAorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyMSAwMDo1NTozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBhaXg6IGVsaW1pbmF0ZSBjb25maWd1cmUgd2FybmluZyByZWdhcmRpbmcgbGlicGVyZnN0YXQuaCBvbiBBSVggNi4xIGFuZCB1cAorCitjb21taXQgNzFiOTBiNmYyMTc5NDRiNGZmYzE4MzZlNTE2MGQ0MGUzM2I0NDIzZAorQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIEF1ZyAyMSAwMDo0MDoyOCAyMDExICswMjAwCisKKyAgICBmaXggYnJva2VuIGxpbmUgd3JhcAorCitjb21taXQgNWI1OTAwYTRmN2RmZWU2ZTFlYzg2OWUzMjMxMGI4MGNhNmZiMjNmZQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAxMjoyODowNyAyMDExIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjEucHJlMgorCitjb21taXQgM2I3ZTJlMzk5NDlmODhkOWM1NmVkNWY5OTQwMjhiOTQ4MTZhYjc1YworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAxMjoyMzoyOCAyMDExIC0wNzAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS43LjEucHJlMgorCitjb21taXQgZWNlNjNiZmU0OTljNjMwYmRhYWU2MjAwNjQ4ZDI5MTgwY2UzYTE3OQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAxMjowMzoxNyAyMDExIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnByZTIKKworY29tbWl0IDI4YjU0MDcwNTE0NzUzZThkOGFiYjcxOGIyMjRkNjU3YWI3YThhYjgKK0F1dGhvcjogR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAxMTo0OTo1NiAyMDExIC0wNzAwCisKKyAgICBDSEFOR0VTOiBCU0Q6IFBBVENIIDMzODM5NjU6IGZyb20geWFiZXJhdW5leWE6IEZpeCBpZi1taWIgYWdlbnQgY29tcGlsZSB3YXJuaW5ncyBvbiAqQlNECisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKK2NvbW1pdCBmNzNlNjM2NGJiMzQwNzA2MjJlOWY0NDg4Y2QwNDg3ZDJmYjc0MDJhCitBdXRob3I6IFZsYWRpbWlyIEtvbmRyYXRpZXYgPHd1bGYyMDAxQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAxMTo0NToyOSAyMDExIC0wNzAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzM4OTIyODogZnJvbSB3dWxmMjAwMTogaW5jb21wbGV0ZSBjb21taXQgKHBhdGNoIDMzODY2MzM6IGZpeCBpbnRlZ2VyIG92ZXJmbG93KQorICAgIAorICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCitjb21taXQgZTZjZjgyMDZmMGM2NzY1MDAwMWUzNGI1MjZiMzdmNjRlNGE1OTI5YworQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAwOTo0NjozMyAyMDExIC0wNzAwCisKKyAgICBQYXRjaCBmcm9tIENsYXVzIEtsZWluIG9uIC1jb2RlcnMgZm9yIGZpeGluZyBtYW4gcGFnZSB0eXBvcworCitjb21taXQgNmE4NDFkNTY1MThhNzI3MTk2ZTY2YjU5ZTdlNWIzMzA0ZjU0YjBhMQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEF1ZyAxOCAwODozMTowNiAyMDExIC0wNzAwCisKKyAgICBjaGFuZ2VkIGNsaWVudGFkZHIgc28gaXQgcmVnaXN0ZXJzIGFzIHByZS1taWIgdG8gYmUgcGlja2VkIHVwIGJlZm9yZSB0aGUgdHJhbnNwb3J0cyBnZXQgY3JlYXRlZAorCitjb21taXQgYzAyMTMxZTViMzVkMjk2NzU1YmFlYzk5YmQzNjMyMDVhODYzMDdkZAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAxNyAwOTozNDowMCAyMDExIC0wNzAwCisKKyAgICBkZXRlY3QgcmVhbGx5IG9sZCB2ZXJzaW9ucyBvZiBMb25nLnBtCisKK2NvbW1pdCA1MDBkNmRlMDZhYTRmZjMzMGFlZTRkNzQ5YTRjYzM3N2JlYzg5ZTA5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgQXVnIDE3IDE4OjExOjQ3IDIwMTEgKzAyMDAKKworICAgIEZpeCB0aGUgbG9nIG1lc3NhZ2UgdGhhdCByZXBvcnRzIHRoYXQgZ2V0aG9zdGJ5YWRkcigpIGlzIG1pc3NpbmcKKworY29tbWl0IDY1ODA1NTZjYzdiZDgzM2FmNzMxYjYyY2UxZWQyMDE3NTY0ZmU3ZWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBBdWcgMTcgMTg6MDg6MDEgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogc25tcHRyYXBkOiBNYWtlIHRoZSBJUCBhZGRyZXNzIHRvIGhvc3RuYW1lIGNvbnZlcnNpb24gd29yaworCitjb21taXQgM2NiM2YxZWRlMzg4ZDg0ZTM5MmUxZDgxNWQ1OTk0YTRiZjBmMTBmOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU3VuIEF1ZyAxNCAwNzo1OToyNSAyMDExICswMjAwCisKKyAgICBXaW5kb3dzLCBidWlsZC5iYXQ6IFJlc3RvcmUgb3JpZ2luYWwgYnVpbGQgYW5kIGluc3RhbGwgb3JkZXIuIEFwcGFyZW50bHkgdGhlIGNvcnJlY3QgbmV0c25tcC5kbGwgaXMgdXNlZCBkdXJpbmcgdGhlIFBlcmwgdGVzdHMgYnkgc2V0dGluZyBQQVRIIHByb3Blcmx5LgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYzFiNWEwMzBkOGYwNDg3NmNkNWI5YWYwMDhjODc5Y2M0NjhiMjEyZi4KKworY29tbWl0IGRhZmY0OWQ5YjMzNjllZmNjODdmMDVkYzg1OTEzNjJlODFhNDVmZGYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMTg6NDM6NDggMjAxMSArMDIwMAorCisgICAgV2luZG93czogTWFrZSB0aGUgUGVybCBhZ2VudCBtb2R1bGUgd29yayBhZ2FpbiB3aXRoIHRoZSBvcmlnaW5hbCBTTk1QX0ZSRUUoKSBkZWZpbml0aW9uLgorCitjb21taXQgM2M3M2I0ODM4ZTYwNWIxNTBiYzMxNzMxM2YxNGViMzM0NDQ3MjlmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAxNzozODoyNyAyMDExICswMjAwCisKKyAgICBSZXZlcnQgdGhlIHR3byBtb3N0IHJlY2VudCBTTk1QX0ZSRUUoKSBjaGFuZ2VzIChjb21taXRzIDQ3YzhlZjFiODljNmNjYjQyNDdkOTYzMzQ3NzkyNTkwOGM2OGMxYTUgYW5kIDdmNDJkMGQ5MzMyMDQ4NDE1MjI3MTQyN2NjOTgwOGNiZGE0OWJiZDApLgorCitjb21taXQgM2U1MGMzZTAwZTlmMzIxZmI3MDhiYzU3OWViNGRjMWEwZjFlN2M0ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAxMTozMTo0MCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogcGFzc19wZXJzaXN0OiAgRml4ZXMgYSByYWNlIGNvbmRpdGlvbiBpbnRyb2R1Y2VkIGluIGNvbW1pdCAzMWZhMDdjZDlmZmRlNDZkNDFkMmI1ODM4YzNmYzRkMDE1NDhiZmI1LgorICAgIAorICAgIFRoZSBmb2xsb3dpbmcgcmFjZSBjb25kaXRpb24gY291bGQgaGFwcGVuOgorICAgIC0gQSBzeXN0ZW0gY2FsbCBmYWlscyBhbmQgZXJybm8gaXMgc2V0IGFjY29yZGluZ2x5IGJ5IHRoZSBDIGxpYnJhcnkuCisgICAgLSBTSUdDSExEIGhhbmRsZXIgaW52b2tlcyBhIHN5c3RlbSBjYWxsIHRoYXQgZmFpbHMgYW5kIGhlbmNlIG92ZXJ3cml0ZXMgZXJybm8uCisgICAgLSBTSUdDSExEIGhhbmRsZXIgbGVhdmVzLgorICAgIC0gb3JpZ2luYWwgY29udGV4dCBjaGVja3MgZXJybm8gYW5kIGZpbmRzIHRoZSB2YWx1ZSBmcm9tIHRoZSBzeXN0ZW0gY2FsbCBpbnZva2VkCisgICAgICBieSB0aGUgU0lHQ0hMRCBoYW5kbGVyIGluc3RlYWQgb2YgdGhlIHN5c3RlbSBjYWxsIHRoYXQgZmFpbGVkIG9yaWdpbmFsbHkuCisgICAgCisgICAgT3RoZXIgZml4ZXMgaW5jbHVkZWQgaW4gdGhpcyBwYXRjaDoKKyAgICAtIFJlbmFtZWQgZGVpbml0X3Bhc3NfcGVyc2lzdCgpIGludG8gc2h1dGRvd25fcGFzc19wZXJzaXN0KCkgc3VjaCB0aGF0IHRoaXMKKyAgICAgIGZ1bmN0aW9uIGdldHMgY2FsbGVkIGR1cmluZyBhZ2VudCBzaHV0ZG93bi4KKyAgICAtIE1hZGUgc3VyZSB0aGF0IHNodXRkb3duX3Bhc3NfcGVyc2lzdCgpIGlzIGNhbGxlZCBieSB0aGUgV2luZG93cyBzbm1wZC5leGUgdG9vLgorICAgIC0gV2luZG93czogYXZvaWQgY2FsbGluZyBDbG9zZUhhbmRsZShJTlZBTElEX0hBTkRMRV9WQUxVRSkuCisgICAgLSBXaW5kb3dzOiBhdm9pZCB0aGF0IGNsb3NpbmcgYSBwYXNzX3BlcnNpc3QgcGlwZSB0cmlnZ2VycyBhIGNyYXNoLgorICAgIC0gV2luZG93czogcGFzc19wZXJzaXN0OiBjbG9zZSBoYW5kbGVzIG9mIGZpbmlzaGVkIHByb2Nlc3Nlcy4KKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCWFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jCisgICAgCXdpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaAorCitjb21taXQgZTE0N2U0Yjk2NzU1MjA3ZGUxY2UzMDk5MGQ2N2I0YjdjNzZkZDQ4MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODozOToxNCAyMDExICswMjAwCisKKyAgICBVbmJyZWFrIHRoZSBXaW5kb3dzIGJ1aWxkLiBUaGlzIGlzIGEgZm9sbG93LXVwIGZvciBjb21taXQgMWUxMDAwYTg4MTU5MjFiNWVjMmU3OTk3YjUzNTkyYTU0NGIzZGZjMi4KKworY29tbWl0IGMxYjVhMDMwZDhmMDQ4NzZjZDViOWFmMDA4Yzg3OWNjNDY4YjIxMmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogYnVpbGRpbmcgKGJ1aWxkLmJhdCk6IEluc3RhbGwgbmV0c25tcC5kbGwgYmVmb3JlIHJ1bm5pbmcgdGhlIFBlcmwgcmVncmVzc2lvbiB0ZXN0cyBzdWNoIHRoYXQgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgYXJlIHJ1biB3aXRoIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgbmV0c25tcC5kbGwuCisKK2NvbW1pdCAxZTlkMjAwM2JhZWQyMjdmNjhiNjg1MjhmMWU5N2U2ZjVlYTg2YzFhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IHBlcmwgKGJ1aWxkLmJhdCk6IFdoZW4gaW5zdGFsbGluZyBkZXZlbG9wbWVudCBmaWxlcywgaW5zdGFsbCB0aGUgUERCIGZpbGVzIHRvby4KKworY29tbWl0IGE4ZDk0MDA3ZTMyZDAzNzEwNjkyYzhmMWI0MTdkNWJkZmUzNjUwZmEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzIgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogRml4IFBlcmwgcmVncmVzc2lvbiB0ZXN0IGZhaWx1cmVzCisgICAgCisgICAgQWxsIFBlcmwgcmVncmVzc2lvbiB0ZXN0cyBwYXNzIG5vdyBvbiBMaW51eCBhbmQgb24gV2luZG93cyAoTVNWQykuCisKK2NvbW1pdCBiNmQwYjQ5MDE4MWM2ZGY4YzExZWNmMTU1ZjFlNmVhZjExYjFlYzU4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFBlcmwgcmVncmVzc2lvbiB0ZXN0czogRG9uJ3QgZmFpbCBza2lwcGVkIHRlc3RzLgorCitjb21taXQgY2EzYWNmMmIwNzAzOWQ5NmExMTdmMDkwZjdlYzc2YjZlOGI1NDFlOQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBBZGQgU05NUDo6Z2V0ZW52KCkgYW5kIFNOTVA6OnNldGVudigpLgorCitjb21taXQgNTY3NTllNWFkNTM3ZjAxYjRhNTFlN2ZmOTk5NGVjNGI1NWMzMjEzNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxNDo0NiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgbmV0c25tcF9zZXRlbnYoKS4KKworY29tbWl0IDk4NDNlNWJjZjQ3Mjg3N2U4NWIwMzFiNWU1ZGFmYWE5ZDVmYzYzYzUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBBdWcgMTMgMDg6MTA6MzIgMjAxMSArMDIwMAorCisgICAgbG9jYWwvcGFzc19wZXJzaXN0dGVzdDogZG9jdW1lbnQgaG93IHRvIHVzZSBvbiBXaW5kb3dzCisKK2NvbW1pdCA2MDU3ODY2YjczYTAyMjc3MWU5MGU5OTY3ZGQyNWJkYzcxOTJmYmRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBTYXQgQXVnIDEzIDA4OjEwOjMyIDIwMTEgKzAyMDAKKworICAgIFNldCBleGVjdXRlIGZsYWcgb24gbG9jYWwvcGFzc19wZXJzaXN0dGVzdCBzdWNoIHRoYXQgdGhlIGluc3RydWN0aW9ucyBpbiB0aGF0IGZpbGUgd29yaworCitjb21taXQgYzJkYWY1OTQwZjIxYTEzZTg5ODlkZDA1NWIxN2YzMTgxMTEyZjg1NgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgU2F0IEF1ZyAxMyAwODoxMDozMiAyMDExICswMjAwCisKKyAgICAuZ2l0aWdub3JlOiBGaXggYSBzdXBwcmVzc2lvbiBwYXR0ZXJuCisKK2NvbW1pdCAxZjBhOTI4YTI5MTNjZmE3ZjVjZWFhZjQ2OTZjNjlmYmRjNjg3NjIxCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgQXVnIDEyIDA5OjA5OjExIDIwMTEgLTA3MDAKKworICAgIGFkZGVkIHRoZSBtaXNzaW5nIC1lIG9wdGlvbiB0byB0aGUgY3JlYXRlVXNlciBkb2NzCisKK2NvbW1pdCAxZTEwMDBhODgxNTkyMWI1ZWMyZTc5OTdiNTM1OTJhNTQ0YjNkZmMyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgQXVnIDExIDE1OjQ2OjMyIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiBOZXQtU05NUCBQZXJsIG1vZHVsZXMgYnVpbGQgYWdhaW4uCisKK2NvbW1pdCA5N2Q2NDMyZjk1ZTFjZGNmNmZkODVlN2NhMWQwYzU1NTdlYjZkOTE5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgQXVnIDExIDE4OjE2OjQ0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IHBlcmw6IE1ha2Ugc3VyZSB0aGF0IHRoZSBjb25zdGFudCBTTk1QX0RFRkFVTFRfUkVUUklFUyBpcyByZWNvZ25pemVkLgorICAgIAorICAgIENIQU5HRVM6IHBlcmw6IFNOTVAgbW9kdWxlOiBBZGQgY29uc3RhbnRzIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRSBhbmQgTkVUU05NUF9DQUxMQkFDS19PUF9USU1FRF9PVVQuCisgICAgCisgICAgV2hlbiB0aGUgTmV0LVNOTVAgUGVybCBtb2R1bGVzIGFyZSBidWlsdCBvbiBXaW5kb3dzIHdpdGggTVNWQyBvciBNaW5HVyBpdAorICAgIGlzIHBvc3NpYmxlIHRoYXQgZWFjaCB0aGVzZSBhcmUgbGlua2VkIHdpdGggYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBNU1ZDCisgICAgcnVudGltZSBsaWJyYXJ5IHRoYW4gdGhlIFBlcmwgaW50ZXJwcmV0ZXIgaXRzZWxmLiBJbiB0aGF0IGNhc2UgdGhlICJlcnJubyIKKyAgICB2YXJpYWJsZSB1c2VkIGluc2lkZSAueHMgc291cmNlIGZpbGVzIGlzIGFub3RoZXIgdmFyaWFibGUgdGhhbiB0aGUgJCEgdmFyaWFibGUKKyAgICBpbiAucG0gZmlsZXMuIE9yOiBhc3NpZ25tZW50cyB0byAiZXJybm8iIGluIGEgLnhzIGZpbGUgZG8gbm90IG1vZGlmeSB0aGUgIiQhIgorICAgIFBlcmwgdmFyaWFibGUgVGhpcyBwYXRjaCBhdm9pZHMgdXNpbmcgImVycm5vIiBieSBtb2RpZnlpbmcgdGhlIGRpZmZlcmVudAorICAgIGNvbnN0YW50KCkgZnVuY3Rpb25zIHN1Y2ggdGhhdCB0aGVzZSByZXR1cm4gYSB0d28tZWxlbWVudCBhcnJheSBpbnN0ZWFkIG9mCisgICAgcmV0dXJuaW5nIGEgc2NhbGFyIGFuZCBzZXR0aW5nIGVycm5vLgorCitjb21taXQgNzY5MDg5NGI3Yjg0NjRmMDVjN2M5MDJiZDdjZjc1MWNjMjY5OTc3YQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEF1ZyAxMCAwOToyNjozNyAyMDExIC0wNzAwCisKKyAgICBkb24ndCBhc3NlcnQgb24gYSBkb3VibGUgaW5pdDsganVzdCBkb24ndCBkbyBpdCB0d2ljZQorCitjb21taXQgNDdjOGVmMWI4OWM2Y2NiNDI0N2Q5NjMzNDc3OTI1OTA4YzY4YzFhNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAxMCAxNjo0NDozNiAyMDExICswMjAwCisKKyAgICBTTk1QX0ZSRUUoKTogY2FzdCBhcmd1bWVudCB0byAodm9pZCAqKSBiZWZvcmUgcGFzc2luZyBpdCB0byBuZXRzbm1wX2ZyZWUoKQorCitjb21taXQgMDIyMDM5MmQ4OTlhOWNhYjcwMWY3NGFmMTIwMzBiYjFkNGNjNWUyZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEp1bCAxIDEzOjAyOjE1IDIwMTEgKzAyMDAKKworICAgIC5naXRpZ25vcmU6IElnbm9yZSAqLmV4ZSBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhlIFdpbjMyIGJ1aWxkCisKK2NvbW1pdCAwMzQ0ZGY5MmU0NjJmM2JlYzk5NDYwOGMzMzgxZmNhNTM0OGFiY2RiCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXVnIDggMTU6MTI6NTUgMjAxMSAtMDcwMAorCisgICAgZml4IEMrKyBjb21tZW50cworCitjb21taXQgMDlhNjYxZDVkYzYwYzczMGZlMDM4NGIwMmVkNjcyODMwZWY3NGUzMAorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEF1ZyA4IDE1OjEyOjU1IDIwMTEgLTA3MDAKKworICAgIGZpeCBDKysgY29tbWVudHMKKworY29tbWl0IDY5Y2I0MmE0ZWEwNTgzY2U2ZjVmZjhmODM4MzUxNmQzNGJjNGMzNDQKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBBdWcgOCAxNToxMjo1NSAyMDExIC0wNzAwCisKKyAgICBmaXggQysrIGNvbW1lbnRzCisKK2NvbW1pdCA0NDdkZGM2NmQ5MGRkOWU1YzMxMDViMjY4YjZhNjNiZmM1ODBiOTI0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEF1ZyA4IDIyOjAzOjU4IDIwMTEgKzAxMDAKKworICAgIERlZmluZSBfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIHRva2VuCisgICAgKGFzIHBlciBBbGV4JyBidWlsZCBpbnN0cnVjdGlvbnMpCisKK2NvbW1pdCBiMGE2MmViMTk3NjNhYjRmMGI3NzY0MzAyNDJhNjExN2NjYWU1ZGQzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEF1ZyA4IDIxOjU5OjE3IDIwMTEgKzAxMDAKKworICAgIERlZmluZSBfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIHRva2VuCisgICAgKGFzIHBlciBBbGV4JyBidWlsZCBpbnN0cnVjdGlvbnMpCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4xIC0+IFY1LjcuMi5wcmUxCisKK2NvbW1pdCA4MTAxODVhZTBiMGNkMmFkNGQ0MjRhMWJhNzc1ZWY1Y2VhZjUwZjAzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDk6MjQ6MTkgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IDYyNzE0NzFlMDEyODJmMzY3NTcyNGVhZjEzNThjZWIwZTk1ZGRkNGUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwODozMjo0MCAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnByZTEKKworY29tbWl0IGZjYjc4MmFhODg5MzEzNGM3NDE0YTkyNmQ5MjY4NTk0ZjcyNWI5MTUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwODozMjoxOCAyMDEyIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjIucHJlMQorCitjb21taXQgZTNiY2Q4N2M3MmZjZWE3NzA2ZTg2OGI1YWNlNzUyOTYwOTNmNzQ5NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTQ6MDk6NDIgMjAxMiArMDEwMAorCisgICAgRml4IGRpc3QvcmVsZWFzZSBmb3JtYXQKKworY29tbWl0IGQ4MTNjZTJlZWVmYzY4MjI5Y2ZjYWYyMDYwMzI0NGNkZDZkMDlkM2MKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDE0OjA3OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeCBkaXN0L3JlbGVhc2UgZm9ybWF0CisKK2NvbW1pdCBmYTdiZDU4MWUzNzgzNjg1ZGIzOWM5YjRlYWY4NDdiZTVhYzg2ZmQzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MzoxMCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMyCisKK2NvbW1pdCAwNzM5ZTIzODJkMzExNDZhY2EzMjA1MjQ0Y2Y3MDc4OGI0MGE0MjhkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MTo0NSAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMyCisKK2NvbW1pdCBkOWExNTQ0NWFhNzRmNTMxNmJmYzcxMWMxNTU4NDY3ODcyYzI5NThjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MDoxMiAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucmMyCisKK2NvbW1pdCBiY2FiZDJjOTU0MmRiZWJkMWQzMTliNDQ5NDQxM2JkY2NhMDY2MTRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODozOCAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNi1wYXRjaGVzCisKK2NvbW1pdCBiNDczODk4YzBjNWFjOWViNDdjN2MwNWEzZjc0NWU0ZmYyYTc2YWFhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODoyOCAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnJjMgorCitjb21taXQgMTMxNDI5ZTcwNjJmYmFhNjViODJhZmZlZDFmYjkyZGYyYzBjYzgxMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6Mzg6MzggMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTYtcGF0Y2hlcworCitjb21taXQgMWM4MTEwYjMzYjgxMDVjYTYxOTA5NDVhMzVmZTdhZTkwMzI1MmQ2OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6MjE6MzggMjAxMiArMDEwMAorCisgICAgQXZvaWQgcGVybCB2ZXJzaW9uaW5nIHByb2JsZW1zIHdoZW4gc2V0dGluZyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKworY29tbWl0IDUwOGVjZTE2ZTZmNmY0OTU2MmRhMjA0NzkyYWUwNjQ0MjY5OTk0ZDEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjIwOjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBoYW5kbGluZyBvZiBkaXN0L3JlbGVhc2UgbWVyZ2UKKworY29tbWl0IDViOGE4NTQ3YjFhNDdkMmY1YjIwN2Y0OGYyNDk2ZTQyNDFkOTAyYzYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjEwOjQ4IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDZjMzI5MTRiZjI4ZDY5NWRmMzQ5ZGNhMjY5ZTQ4OGI1MDE3MDAzMTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjA3OjIyIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDlmNWE4MmE1YWZkYmIzZGFlYjJmZDQzN2EzMDlmMGI4ZDM1N2NmNGIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjA1OjM5IDIwMTIgKzAxMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDM5MjAzZjI5NDc3YTNiZWRmMDEyZDQxMTM1ZDhhYmQ2YmNhZDA4YjEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjU0OjI3IDIwMTIgKzAxMDAKKworICAgIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDE3ZTc5ZWYwZmFkNzk2MDljNWJhMmZlYjRlOGI5ZWI1ZDdkYjY4ODYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ2OjExIDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IDU4MjFiZTViYmI0MDE4ZGVkMjgyZmJiYmQ0ODMwY2YyZWVhZGQ5ZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ1OjU5IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIucmMyCisKK2NvbW1pdCAzZjIxMTFkZTY3MzNhMDRlMTJkOTEwZDMwNmEzNGQ2NzFlMDA4NzYyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMDo0NjoxMSAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCBjY2Y4ZmYyYzRkYjYwMTIyZDQxMzAyZTRhZWI3MDBlMGI4NjgxMDVmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSAyOCAxMDoxODo0MyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNTI2NTk5OiBEb24ndCBoYW5nIG9uIHJldHJpZWQgZmFpbGluZyBTTk1QdjMgcmVzcG9uc2VzCisKK2NvbW1pdCBjODFjODQ4Mzk5MDkxMWY0NzQzNWQzMDA1MjU1ZDkxYzM3YWI5MmIyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDE0OjA5OjI2IDIwMTIgKzAyMDAKKworICAgIEZpeCBCU0QgdGhhdCBkb3dubm90IGFsd2F5cyBsaWtlIElQX1NFTkRTUkNBRERSIC0gc28gcmV0cnkgd2l0aG91dAorCitjb21taXQgZmZjZTFmMmRjMmY4YjMxYWJkMDFmOTNiMjZkYTc4ZjQ3MjZhMWU2NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1heSAyNyAxNDowMzo1OCAyMDEyICswMjAwCisKKyAgICBGaXggT1MgbWlzc2luZyBNU0dfRE9OVFdBSVQgKEFJWCkuIEJhY2twb3J0IGZyb20gNS43CisKK2NvbW1pdCBjNTc1MjE2ODUwMTg1YjU2NDU0ZGFkMDI1M2UzMTY0OTc5ZTEzNTEzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDEzOjU2OjAxIDIwMTIgKzAyMDAKKworICAgIEZpeCBtaXNzaW5nIGluY2x1ZGUuIEZpeGVzIFNJR1NFR1Ygb24gRnJlZUJTRDkgeDY0CisKK2NvbW1pdCA1ODA1ODc4NzQ5YzA4MDYyZGViZjBhOWQ3OThkMDhmYjkxNmNhYTJkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWF5IDI3IDA2OjIzOjE5IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbWlzc2luZyBkZWJ1ZyB0YWcKKworY29tbWl0IGQxYTQyYmJjYzdiMTQ3MzBjOWE2ZDk5YzRmMDQ3MDk3ODQzYTU0OWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXkgMjUgMDk6MDI6MjcgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJ1biBsaWJ0b29sIC0tbW9kZT1maW5pc2ggb24gdGhlIHJpZ2h0IGRpcmVjdG9yeQorCitjb21taXQgMWZiZjMzNzExYTE5ZWFjOTczOWFkMjNmNmY2MjUxZWFjYzQxZjFjNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXkgMjIgMTQ6NTQ6NDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogTGludXg6IFBBVENIOiAzNTI1OTk4OiBEb24ndCB1c2UgYW4gdW5pbml0aWFsaXNlZCB2YWx1ZSBpbiBlcnJvciBtZXNzYWdlCisKK2NvbW1pdCAzMmMxNjg2YjY3ZGM4NWM0YTE4OTU3NjM2MzA2NTYwOWRmZWQ1ZTYxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1heSAyMiAxNDo1Mjo1NiAyMDEyICswMTAwCisKKyAgICBBdHRlbXB0IHRvIG1hcmsgcmVsZWFzZS1jYW5kaWRhdGUgYnJhbmNoZXMgYXMgc3VjaC4KKyAgICBPbWl0IGZpbmFsLXJlbGVhc2Utb25seSBzdGVwcyB3aGVuIHByZXBhcmluZyBwcmVOL3JjTiByZWxlYXNlcworICAgIChSZWxpZXMgb24gYSB0d2VhayB0byB0aGUgTWFrZXJlbGVhc2UgcGVybCBtb2R1bGVzKQorCitjb21taXQgNGM1NjMzZjE2MDNlNGJkMDNlZDA1YzM3ZDc4MmVjODkxMTc1OWM0NworQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CitEYXRlOiAgIE1vbiBNYXkgMTQgMTE6NDA6MDYgMjAxMiAtMDQwMAorCisgICAgTkVXUzogc25tcDogQlVHOiAzNTI2NTQ5OiBDVkUtMjAxMi0yMTQxIEFycmF5IGluZGV4IGVycm9yIGxlYWRpbmcgdG8gY3Jhc2gKKworY29tbWl0IDY1ZGQ4M2MyMjU1ZWU1OGVkYmYwZTI1ODYzZTU1YjU4YTQxMTM2NzkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMjA6MzA6NDIgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMQorCitjb21taXQgYWM0YmM2NWUyOTA5ZjNiZDg1ZjMyZjA0YjUwNGZhNjVkMmY2NDU1MworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAyMDoyODowNiAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucmMxCisKK2NvbW1pdCBiNzQ5OTQ4NjQxOTUxMTllZGI2ZTE5Yzg1MTQ3ZmFjMDBiY2I5M2UzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDIwOjEzOjQ2IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucmMxCisKK2NvbW1pdCA5MTM1MDA5MmM0NmU2NmQwNmQ3NDE0M2Y0ODE2NDczZGI0ZDI1MTYwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE5OjU2OjMzIDIwMTIgKzAxMDAKKworICAgIE1hcmsgdmVyc2lvbi1zcGVjaWZpYyBjaGFuZ2VzIF9iZWZvcmVfIHB1c2hpbmcgdG8gY2VudHJhbCByZXBvc2l0b3J5CisKK2NvbW1pdCA3MjQxYWNjZDcwYjgyZDBmY2Q0NGQ1YTUyMzhiMmVlOTQ0NTkwMGRiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjUzOjE3IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IDdjNzk2YTE1YTFkMWJiODVmZWVhOTQwYmQ0ZTM1MTY4Nzc5MjA5MTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6NTA6NDkgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMQorCitjb21taXQgMDdlMjY4YmZiNjRiMGVjNjQ1YjNmN2U4NzI2Njk4NGY5MjE3Y2YxMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzo0NDozNyAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucmMxCisKK2NvbW1pdCAxNmVhYWY2YzNiYTE0NTk2Y2E5ZWZhZjRiMTE0ZjFiNzA5ZjQyYjY4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjI5OjAzIDIwMTIgKzAxMDAKKworICAgIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IGM3Mjk0NjllZjEyMTU0OTMwY2Y5ZDE1OTY3ZTE2MTg2ZmI0NDVmMzAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6Mjc6MjAgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMi5yYzEKKworY29tbWl0IDE0MjU3MWQzY2VhMDhmMGMwNzJkMjRjMWQzOWE0M2M3NDQ2ZjhjZTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6MDE6MDMgMjAxMiArMDEwMAorCisgICAgV2hlbiBidWlsZGluZyBhIG5ldyByZWxlYXNlLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIHBlcmwKKyAgICBtb2R1bGVzIG1heSB3ZWxsIGJlIGRpZmZlcmVudCB0byB0aGUgdmVyc2lvbiBiZWluZyBidWlsdC4KKyAgICBUaGF0IHNob3VsZCBub3QgYnJlYWsgdGhlIGJ1aWxkLgorCitjb21taXQgZWJhODZiNmY3YWZmMjYxZWUwZTYxMzM0ZGY3MGRlNzE1NmU1YzNjYgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzowMTowMyAyMDEyICswMTAwCisKKyAgICBXaGVuIGJ1aWxkaW5nIGEgbmV3IHJlbGVhc2UsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgcGVybAorICAgIG1vZHVsZXMgbWF5IHdlbGwgYmUgZGlmZmVyZW50IHRvIHRoZSB2ZXJzaW9uIGJlaW5nIGJ1aWx0LgorICAgIFRoYXQgc2hvdWxkIG5vdCBicmVhayB0aGUgYnVpbGQuCisKK2NvbW1pdCA1YzBmNjRkNmRiMmI1OTNmN2NjMGVkMmQ0ZjU1YjdjNTkyYjc3NGE4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjI1OjE1IDIwMTIgKzAyMDAKKworICAgIE9ubHkgb3V0cHV0IGNwdSB3YXJuaW5ncyBvbmNlLgorCitjb21taXQgZWU1OGU0ODI3YjlmYTE2ZTY2MzVjYTAwM2U4YTRmMTFkY2I1ZmI3YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMyAyMjoxNzo0MiAyMDEyICswMjAwCisKKyAgICBGaXggc3BlbGluZyBpbiBlcnJvcm1lc3NhZ2UuCisKK2NvbW1pdCAwM2Y0ODVkZjIyZjIwZTE0OWNmYWU5NGM1N2NiODJmZWVjYjVkNzRiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjEyOjExIDIwMTIgKzAyMDAKKworICAgIE5vdCBhbGwgTGludXhlcyB1c2UgcnBtIChkZWJpYW4vdWJ1bnR1IGNvbWVzIHRvIG1pbmQpCisKK2NvbW1pdCA5MzA4MzgyMjRmNzgxNjk2YmQzNTIyNWYyMjU2OTM0NzQxNmYxYjE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjEwOjE1IDIwMTIgKzAyMDAKKworICAgIENoZWNrIG5lZWQgZm9yIC1sbSB0byB1c2Ugcm91bmQvZXhwCisKK2NvbW1pdCBhMDYwOWNmMWYzYTY5MTdkMjYzNzI1NzMyMjQ4Y2Q5MzdhNDVhZDk0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXByIDcgMDg6NDA6NDQgMjAxMiArMDIwMAorCisgICAgUmVtb3ZlIGxpbWl0YXRpb24gb24gY29uZmlndXJhdGlvbiBsaW5lIGxlbmd0aC4KKworY29tbWl0IDMwNTk3MzMzOGE2M2FlNTRjNWUwMmE4NjI2ZmJlOWE4MDY0ZGNiN2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBcHIgNyAwMDozMjoxOSAyMDEyICswMjAwCisKKyAgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzLgorCitjb21taXQgY2NhYjRlOWQzZWQ0MjRjMzlkMGRjMjdiZTYzZmE3NmM3NDYxZWE4MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEFwciA3IDAwOjE1OjIyIDIwMTIgKzAyMDAKKworICAgIEludGVybmFsaXplIHRoZSBuYW1lIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgY3VycmV0IGNvbmZpZ3VyYXRpb24gZmlsZQorCitjb21taXQgY2Y4NzRhZDdiOWRhZjRmY2MwZDQ2Y2RkMDM0NDc0YjQ3ODAwNTM0MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIEFwciA2IDIxOjQ3OjI4IDIwMTIgKzAyMDAKKworICAgIFJlcGxhY2UgI2lmIChBKSBCICNlbHNlIEIgI2VuZGlmIHdpdGggQi4KKworY29tbWl0IGVmOWVhNjQxYmMyOTBlZWM1MDY4NWI2MDUxOWIzMWJlZThiMTRhNjkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjE6MDQ6MDYgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTIKKworY29tbWl0IDM1YWJhMTk1OWRlMTE5ZjFmYjg5MjAzYzM3MTA5YWE2ZjBlMjFjNTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjE6MDA6NDAgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTIKKworY29tbWl0IGU0MWZiYWZmMThhYzkwOTVjZjRhNzM5YTA2ZWMzOWExYTZjY2ZkYzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjA6MzU6MzUgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5wcmUyCisKK2NvbW1pdCAxMzdmZTU4MmQ2Y2M1NjExNDMwZGFiNDZlZjE0NGVmZDg0Y2ZjODAzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEFwciA2IDIwOjQ2OjU2IDIwMTIgKzAxMDAKKworICAgIFJldmVydCBjb21taXQgMWY0YTgyOWIxODI3NWU0OTU2Y2E5MWU1ZWMzNzBkZjAxNWYwNjEzMworICAgIChzbm1wX3N0b3JlX25lZWRlZCgpIEFQSSBpcyBub3QgYXZhaWxhYmxlIGluIDUuWzQ1XS54KQorCitjb21taXQgMmI3ZTY0Mjg4YzAxYThhMDYyMDI2YzUyMWNhMzFhNWU4ODVmMzBjYworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxNjoxMjoxMiAyMDEyICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgJ2NvbnN0J2lmeWVkIG5saXN0IGFyZ3VtZW50cworICAgIEJhY2twb3J0IG9mIGVkNjVlY2E2ZTdmOWNmYTczODBhNzhkNTZjMDFlZDMxNDc0NWIxNjkgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IDdlOTVkODBiNjk4MDUxMjU5NjQ1YzA3NGE1M2ZmZDI2NGE2ZmE5MTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTY6MDY6NTYgMjAxMiArMDEwMAorCisgICAgRnJlZUJTRC05OiBGaXggZm9yICdjb25zdCdpZnllZCBubGlzdCBhcmd1bWVudHMKKyAgICBCYWNrcG9ydCBvZiBlZDY1ZWNhNmU3ZjljZmE3MzgwYTc4ZDU2YzAxZWQzMTQ3NDViMTY5IGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAxYTliN2I3YzAyZTJkZWVmZTk5NGQ1OTVhN2NjMWRkMmZmYmVlZTFkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDE1OjUxOjIwIDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoICdyZWNlbnQnIGhlYWRlciBzaHVmZmxpbmcKKyAgICBCYWNrcG9ydCBvZiBjNTNkOGMzNTI1ZjU5MGYyMjEzZDM1YjBkYTk0MTIzODYyZjNlMzY2IGZyb20gVjUtNS1wYXRjaGVzCisgICAgKFBhdGNoICMzMzYzMzA4IC0gb21pdHRpbmcgdHdlYWtzIHRvIGNvbmZpZ3VyZSkKKworY29tbWl0IDNkOWRkYjQxZTI2M2JjMWE3OGY5Zjk0NDBiOGQ0YWQ0Zjg2YzgyZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTA6MzY6MTggMjAxMiArMDEwMAorCisgICAgRml4IHR5cG8KKyAgICBCYWNrcG9ydCBvZiA1YjcwMmIwMjRiNjAxNzZkN2Y1Njk5YjkyZTU1ZGE1MGE4ZGVhZTcxIGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAwZDM1YzYwOTU2NGI2NmExZmZlODE1NTZkMzdhZGYwNTAzYzM4OWNlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDEwOjE1OjA4IDIwMTIgKzAxMDAKKworICAgIFByb3ZpZGUgbWlzc2luZyBkZWZpbml0aW9uIG9mIE5FVFNOTVBfUFJJbworICAgICh1c2VkIGluIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYykKKworY29tbWl0IGE3OTE0MWE0MTk5NTNkMDEwYTY5ODllOGI4OGY0ZGYxMjczOTRkMzgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMDk6MTk6MjYgMjAxMiArMDEwMAorCisgICAgSGVhZGVyIGZpZGRsaW5nIGZvciBGcmVlQlNELE9wZW5CU0QsRHJhZ29uZmx5CisgICAgQmFja3BvcnQgb2YgZjdiMGRlMTUxODAwMmM2ZThmOWI5NGVmM2RlYjg4ODJlMWU5MzM4ZSBmcm9tIFY1LTctcGF0Y2hlcworCitjb21taXQgYWRmNzRiZjc1M2QzOTcwMzU3YWZkNjMzODAzMjU2MjQxZDljN2I4NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAwODoyMDo0NiAyMDEyICswMTAwCisKKyAgICBGaXggSVB2NiBUQ1AgJiBVRFAgdGFibGVzLCAqQlNEIHN1cHBvcnQgKGluY2x1ZGluZyBPcGVuQlNEKQorICAgIEJhY2twb3J0IG9mIGNvbW1pdHMgNWNkMTU3MzYyNTQ3MWMwNTgzZTkwODdhZWM2ODAyYjc3MTU3ZDVhMgorICAgICAgYW5kIDUwZDczZjBkNTZmZTIyYzU5MDUzMGIzZTMwNWQ0MWRjZGFjM2NlMDAgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IGQ5NTU1YWNiOWY0N2MzYWE4ZmRlNGJjMjBhNDRkN2NhNjE4MWE4YTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBNYXIgMjUgMTg6NDg6MTIgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMgKGJhc2VkIG9uIHBhdGNoIDM1MDMyNTkpCisKK2NvbW1pdCA4MmE4YjQ3ZWU5NmU1ZDI5YTJiN2FjM2NhMDA3MjJkNzM3ZDViNDc5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjMxOjU2IDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCA5Y2E4ZDkzOWFiMzkzMzA2YTFkMGYxNDZjOWNiNzBlYTBjYjE5ZDQ5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjMwOjM4IDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCBjZWNkNDg2OWRlYjY4ZjNkNGM3MWU3NjhkNWI0MGRkNTc2NDQ2OTI1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjI5OjMxIDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCBhMWE0NTEzYmQzZTRlNjE0MjAwZjZkYjVhMDJmNjFkNmM4ZWVmYjMyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIE1hciAyOCAwOTo0Nzo0NSAyMDEyICswMTAwCisKKyAgICBEb3h5Z2VuLXN0eWxlIGRvY3VtZW50YXRpb24gZml4ZXMgKGJhY2twb3J0IG9mIGdpdCBjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYSkKKworY29tbWl0IDliZGJjY2ExMjJjMzdkYTMwNGZjNmFhNjkzOTcyOTQ3NWY5MGY1ZmQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDI4IDA5OjMwOjQ5IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoYmFjay1wb3J0IG9mIEdJVCBjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYSkKKworY29tbWl0IDFmNGE4MjliMTgyNzVlNDk1NmNhOTFlNWVjMzcwZGYwMTVmMDYxMzMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDI3IDIxOjQxOjI0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDk1Njk3OiBTdG9yZSBwZXJzaXN0ZW50IHNubXBUYXJnZXQgdGFibGUgY2hhbmdlcworCitjb21taXQgMWY3NWYzNzdkMGRiMDE3NTRjMGMxNjFkYzQ0MzczMDgxYmVlZjUyMAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjcgMjE6MTQ6MDYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogRnJlZUJTRDogUEFUQ0hFUzogMzQ4OTM4NzogSW5zdGFsbCBGcmVlQlNEIDEwIGhlYWRlciBmaWxlIChwbHVzIG90aGVyIG1pc3NpbmcgdmVyc2lvbnMpCisKK2NvbW1pdCAzZDcyYzllNzhmMmFkODE3YzlkMWQ4Mjk3NzMyN2JiYjIwZDYzYWI5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciAyNyAyMTowNjozMSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDM0ODc4Njc6IERvbid0IHNraXAgbWlzc2luZyBpZlhUYWJsZSBlbnRyaWVzIChpZkNvbm5lY3RvclByZXNlbnQgRkFMU0UpCisKK2NvbW1pdCAxMjkwNjU3OGFiMzBjZjc3NmQwODBjMGVmMzAyNWIzMDMzNGQ3NjU1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE2OjE3OjQ1IDIwMTIgKzAyMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogRml4IGV2ZW4gbW9yZSBtZW1vcnkgbGVha3MKKworY29tbWl0IGNjZmQ1Y2E2ZmUxMDMxM2Q2MTgxZDI0YmJiMTc5NzgyNWE5N2RhMTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6NTE6MTYgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBFbGltaW5hdGUgZHVwbGljYXRlIGNvZGUKKworY29tbWl0IDlmZGEyNjY4NzIyZjA4ZGRiZmRkNjdhMjIzOWQ4YjAyMWRiNjRhODMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6NDg6NDYgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBXcml0ZSBhIGxvb3AgYXMgYSBsb29wCisKK2NvbW1pdCBjYmMxOGViNzYzYmE2ZGY2OWVmNzA2NjhhNTRkNzViZjM1ZTc5NTAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE1OjI0OjA4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEZpeCBtb3JlIG1lbW9yeSBsZWFrcworCitjb21taXQgYzc3MjUxOTI0NzhhZWMwMThmYjRhZWZhNjA5NDZlMDRhNDA2YzAwYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxMzo0MzoyNCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCByZWFkaW5nIGZyZWVkIG1lbW9yeSB3aGVuIGRlbGV0aW5nIGEgcm93IGZyb20gYSB0YWJsZQorCitjb21taXQgYTZiZTczOTU2NmYzMTBkNzQ0MWZkN2Y1NDk4OWUzOTQ0NmY3YTE0MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxMzo0MjoyOCAyMDEyICswMjAwCisKKyAgICBFeHRlbmQgRElTTUFOLVBJTkctTUlCIHRlc3QKKworY29tbWl0IDhhOWI1NzI5MTQ1M2NiOGFlYzI4ZTc2NmM1OTQ3MDFlZDE5YzRmYzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgMjYgMjE6MDM6NDEgMjAxMiArMDIwMAorCisgICAgRml4IGZvciBEcmFnb25GbHkgMworCitjb21taXQgZTVjOWEzMmY3OWVhYzJlODU1MjdjOWNmMDUwODdjZGFlOWIzNWE2YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciAyNiAyMDo1OTo1MyAyMDEyICswMjAwCisKKyAgICBEcmFnb25GbHkgbmVlZHMgX0tFUk5FTF9TVFJVQ1RVUkVTIHRvIGNvbXBpbGUgaXB2NiBjb2RlCisKK2NvbW1pdCBjZDQzYmMwOWEzOWJkOTdmZjVlNzE5YTJjZTIzMmNlNDI0NjAwYTY1CitBdXRob3I6IERhdmlkIEltaG9mZiA8ZGltaG9mZkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6NDc6MTcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0ggMzUxMDQ1NDogQWxsb3cgdGhlIHVzZSBvZiAwLjAuMC4wLzAgYXMgYWxpYXMgZm9yIGRlZmF1bHQKKworY29tbWl0IGUyZmMxNWY5ZTVhNmUzZTM2YmU1ZjQ4OTYwMWNiZjZiZjczMTkxN2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MjE6MzggMjAxMiArMDEwMAorCisgICAgRml4IFRDUCBzdGF0ZSB2YWx1ZXMgZm9yIERyYWdvbkZseQorCitjb21taXQgNDMyZmUzZGRmNTRmMmM5OGY5MzY5NTk0NjljYjliMDE0ZDU5OWYwNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNToxMDo1MiAyMDEyICswMTAwCisKKyAgICBSZXF1aXJlIHBlcmwgdG8gZG8gcGFzc19wZXJzaXN0IHRlc3QKKworY29tbWl0IDM3ZDI3NzBjZjUwYzk4MDIzZWViYTkwZTI1ZDM3MmJmZjczMTZhZGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2VyLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNTowNjo0MCAyMDEyICswMTAwCisKKyAgICBGaXggVENQIHN0YXRlIHZhbHVlcyBmb3IgRHJhZ29uRmx5CisKK2NvbW1pdCA4NmE5NDhkODY5MWU4ODFkNTU1OTFkY2FiZGRjMjczOWNlNzJiMzBlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAbmJhLWxpbnV4LnNiLnN0YXRzYmlibGlvdGVrZXQuZGs+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MDE6MzcgMjAxMiArMDEwMAorCisgICAgUHJvcGVybHkgZmluZCBwYXNzIGhlbHBlcnMgZm9yIHRlc3RpbmcuCisKK2NvbW1pdCBmZTI2YTNjNGYyOWYwNDZiZjY1ZWQ1MmU5ZDk0MDU0YjY3NWZiYzRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA5OjA0OjQyIDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogTGltaXQgc291cmNlIGNvZGUgbGluZXMgdG8gODAgY29sdW1ucworCitjb21taXQgNzQ1YmFmY2RjYzljOGU4NDYxNmQ0ZTI3NGRiMmEzODRiZjIzNGRhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyMiAwODo1NTowNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBNYWtlIHBpbmcgaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQgb2YgbnRwZCBjbG9jayBqdW1wcworCitjb21taXQgZGE2OTI1ZTY3NjNjYWRiZTAyZjRhOGJiZmU2OGEzNjJlNTM1YWQ1ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMDozODozNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUKKworY29tbWl0IGZhNjA2ZGQ3Y2E2YWZmOTMwOGQ0ZThiMDFiYmNkZTE0OGY0NDEyNzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6NDk6MjEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogTWFrZSBwaW5naW5nIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzZXMgd29yaworCitjb21taXQgNjE3YTgzYmE3OTk1NzVjODRjNjZmNmIxYzQ4MGVmNjMzMTYxYTY0YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxNjoyODo0NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggYSBzb2NrZXQgbGVhayB0cmlnZ2VyZWQgYnkgcGluZ2luZyBhIHJlbW90ZSBob3N0CisKK2NvbW1pdCA2MjVmNTVjMjcyZWM2MjgxZTM4ZDhlMzBlYjUzZmQ1MTUxNmIwMGFlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA5OjU0OjU1IDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogQ29udmVydCBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZSBpbnRvIGEgc3RhY2sgdmFyaWFibGUKKworY29tbWl0IGI0OGYxOWFkNGI0YWE2OGMzZTE2ZTJhNzJkZjM3YjljMGNkMzZjNGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6MjQ6MDcgMjAxMiArMDEwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBBZGQgbW9yZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCitjb21taXQgZDc0Y2IzOTY2MTc1ODkyNTYyZjVlM2E5YjE2ODNhY2JhMmMyMmUwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMTo0NToxOCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggc2V2ZXJhbCBtZW1vcnkgbGVha3MKKworY29tbWl0IDBiMWE3NzY3NDY3OGNjOWExNWJlM2U3NzAwZDNjZWY2NTBlZDAyYzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTI6MDA6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRG8gbm90IHNlbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGFjayBvdmVyIHRoZSBuZXR3b3JrCisKK2NvbW1pdCAxMzkwMjNjZDNhYjUxNjMxY2MxMGUyODY2ZDcxYWJjZjk5YWU0YzFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTWFyIDIxIDA4OjU2OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IERvbid0IGNhbGwgZXhpdCgpIHVwb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorCitjb21taXQgMTY5YjZhYWE3YjYxODI3Y2MxYWQwYjNhZWVhZTNhNzIyOWRkMjVkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyMSAwODo1MzoyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggSVB2NiBzb2NrZXQgbGVhayBpbiBlcnJvciBwYXRocworCitjb21taXQgYTBiZTMyYWQwNTNhNzFmYTk2MTM0ZDU1ZTU0MmJiMDdkNGYwMjk3ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMTo0Mzo0NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCB0aGF0IGhvc3QgbmFtZSByZXNvbHV0aW9uIGZhaWx1cmUgY2F1c2VzIGEgY3Jhc2gKKworY29tbWl0IGJmOWJmZjY0NTU2Nzg3ZDc2NmVlMmVmMmQ1NzhhZmI5MjA3MTlmM2EKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDg6NTE6NTUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQ29udmVydCBwcmludGYoKSBzdGF0ZW1lbnRzIGludG8gc25tcF9sb2coKSBhbmQgREVCVUdNU0coKS1zdGF0ZW1lbnRzLgorCitjb21taXQgNWQ3NGMwMTI0NTUyM2E5ZDhkYjFlZGEyN2QxZWZhZTJlYmMxMDRmYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODo0MDowMiAyMDEyICswMTAwCisKKyAgICBOZXcgTUlCOiBWUlJQVjMtTUlCCisKK2NvbW1pdCA1YjM4ZjA2MmI5OWI2ZWYzNjcwOGUyYzdkZTQ5NjVhMzE5MjYxMmU5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjM0OjQ4IDIwMTIgKzAxMDAKKworICAgIEZvciBzYWZldHksIHNpemVvZiB0aGUgcmlnaHQgdmFyaWFibGUgaW4gbWVtY3B5CisKK2NvbW1pdCBlNWY4Mjc4MmRhMDVlZmE3YzBlNmRjMmJmNWE0MWVlMTE4NjhmNDY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjMzOjIxIDIwMTIgKzAxMDAKKworICAgIEZpeCBmb3IgaHJTV1J1biBkYXRhIGZvciBGcmVlQlNECisKK2NvbW1pdCA4MzI3NTY1ZTgyMzI3MGQxMGE0NTA0NTY4ZWRiZTViNWFlMzIzYTU1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjMxOjU0IDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIHZhcmlhYmxlcyBmb3IgT3BlbkJTRC9OZXRCU0QKKworY29tbWl0IDE3MGY2ZjAyN2JmNGY5MTc0YjcwNzM1MzBkYTRkMDdmNDAwYmJhNTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6Mjg6NTggMjAxMiArMDEwMAorCisgICAgTW92ZSBkZWNsYXJhdGlvbnMgaW4gZnJvbnQgb2Ygc3RhdGVtZW50cworCitjb21taXQgZGJiNDU3M2I2OWZhZTg1Y2RjOTMxYjI4OTJiNWNlNGU1YjE2YjMyMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODoyMzozNiAyMDEyICswMTAwCisKKyAgICBSZXF1aXJlIGtlcm5lbF9uZXRic2QgZm9yIE5ldEJTRDYKKworY29tbWl0IGYxMTY4MWYxNWFhZDdkOWE1MmZhMjk4MTJlY2JiNTA3ZjFiN2ZlMjQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDIxIDEyOjM2OjM4IDIwMTIgKzAwMDAKKworICAgIENoZWNrIGZvciBvbGQgdGFyYmFsbHMgKGFuZCB1bnBhY2tlZCBkaXN0cmlidXRpb25zKSBiZWZvcmUgc3RhcnRpbmcuCisgICAgVGhlc2UgY2FuIGNvbmZ1c2Ugc3RlcHMgc3VjaCBhcyAibWFrZSBkZXBlbmRjaGVjayIsIHRoYXQgZG8gYSAnZmluZCcKKyAgICBvbiB0aGUgY3VycmVudCB0cmVlLCBhbmQgd291bGQgZGVzY2VuZCBpbnRvIHN1Y2ggdW5wYWNrZWQgc291cmNlIHRyZWVzLgorCitjb21taXQgNDcwZGNkNGI2YzNmZjExZmYwYTM1MzJhNzM0MGE1NmNmZmQ2OTA5OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTI6MzI6MTMgMjAxMiArMDAwMAorCisgICAgRG9uJ3QgcnVuICJtYWtlIGRvY3M7IG1ha2UgbWFuY3AiIGlmIHRoZXJlJ3Mgbm8gTWFrZWZpbGUgcHJlc2VudAorCitjb21taXQgYzlhYzQyMDM0M2UxNmRmMmI3MDY1ZjViZjI3OTBkZjQ0ZTI0N2ZiYQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTA6MjY6MTAgMjAxMiArMDAwMAorCisgICAgQWxsb3cgZGlzdHJpYnV0aW9uIGFzIHBhcnQgb2Ygbm9ybWFsIE5ldC1TTk1QIHBhY2thZ2VzLgorCitjb21taXQgNTk5OWY2MGM1NzcyM2YyM2YzYzI1NGFmNTdmZGIxMGFmMzAxYThlYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1hciAxOCAxOTowMzowOCAyMDEyICswMTAwCisKKyAgICBSZWdlbmVyYXRlCisKK2NvbW1pdCAyNzVkMjA0MDM2YTYwN2UzZGY1MGU4NDQ3ZDRiYzc1NWU5ZGIwMmZkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gQXVnIDI4IDIxOjI5OjAzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSAtLWRpc2FibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hZ2VudCB0b2dldGhlciB3aXRoIC0tZW5hYmxlLW1pbmltYWxpc3QKKworY29tbWl0IGJkY2NjODc1NzEwMjk1YWFjZjUwZjcxZWIxYzFkMmVlOTdmMzM2ZmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMTYgMjA6MTA6NTggMjAxMiArMDEwMAorCisgICAgRG8gbm90IGRlY2xhcmUgdGhlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3BhcXVlX3NwZWNpYWxfdHlwZXMgdW5sZXNzIHRoYXQgb3B0aW9uIGlzIHNldC4KKworY29tbWl0IGI4MGE2N2RhMDUyYWRjYTFiNWE2NDRkYjgzYTc4MmUxNWMyMjM3YzMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTk6NTA6MDMgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgdGhhdCB0aGUgZGF0YSBleGlzdCBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgaXQKKworY29tbWl0IGVmYWU4NmJiYTU5NjI0OTFkNDJiNzdiOTM1MTkxYTNlYjI1ZGQ5MzkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBNYXIgMTQgMDE6MDU6MzMgMjAxMiArMDEwMAorCisgICAgUGFydGlhbGx5IHJldmVydCAiTWVyZ2UgcmVtb3RlIGJyYW5jaCAnb3JpZ2luL1Y1LTctcGF0Y2hlcycgaW50byBWNS03LXBhdGNoZXMiCisgICAgCisgICAgQ29tbWl0IGQzNWExODYwMjE3ZTcyM2U0Zjg2NmRkOThlZjY2MjE2NjU5MzRjNGEgYWNjaWRlbnRhbGx5IHJldmVydGVkCisgICAgCisgICAgNGEyZTViY2Q1NmNkMmFmYjM2ZWIxNWQ3NTRlMmZlZTg4OGRkNTBjMCAoaHJoX3N0b3JhZ2UgaXMgYSBwcm9wZXIgcmVwbGFjZW1lbnQgZm9yIGhyX3N0b3JhZ2UpCisgICAgMGRkMWU1NDU1N2QxYmE0OThiNTVkMDE3YjBhOTNlOGNjZjliZDUyMiAoQ0hBTkdFUzogc25tcGQ6IFVEUC1NSUI6IFJlcG9ydCB0aGUgcHJvcGVyIGFkZHJlc3MgaW4gdWRwTG9jYWxBZGRyZXNzKQorICAgIDUxMTZkNDgzNzhlY2YwM2U3MjJmMzAxMGFkNDdiZjIyYTNmYmNiOGMgKFJlZHVjZSBzY29wZSBvZiBwcmVmaXhfdmFsIHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCB3YXJuIGFib3V0IGFuIHVuc2VkIHZhcmlhYmxlKQorICAgIDEwZjU2NmY0ZDRjYmIzZTIwNTAyM2MyMzY2OTI4OWU0YmZkMDg5Y2IgKHBlcmwvU05NUC9TTk1QLnhzOiBGaXggYSBjb21waWxlciB3YXJuaW5nKQorICAgIAorICAgIGFuZCBwYXJ0IG9mCisgICAgCisgICAgNmU3NGQ2NGY4NWE1OWQ1MGU0NjFkYjRjMzRhYzc2ZjlkZTQ2OGJmYiAoQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC1xIGFuZCAtdyBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcykKKyAgICAKKyAgICBUaGlzIHJldmVydHMgdGhvc2UgcmV2ZXJ0cy4KKworY29tbWl0IGFhZWRkNTljYzJkYTcwMTUyN2RjMmQyNjFkNGU5Zjg1ZjE2ZTc1MDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXIgMTEgMjA6NTc6MzggMjAxMiArMDEwMAorCisgICAgQWxsb3cgbWFrZSB0ZXN0IHdoZXJlIHRoZSBzb3VyY2UgcGF0aCBjb250YWlucyB0aGUgc3RyaW5nIE5ldC1TTk1QIHRvIHN1Y2NlZWQuCisKK2NvbW1pdCA0Yjk0ZDc5NjkxOGE0ZWVhZTY4YWIyMWFhNTNkNDQ0YThiNWMyOTIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgTWFyIDkgMDg6MDQ6NTkgMjAxMiArMDEwMAorCisgICAgVW5icmVhayBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDQKKworY29tbWl0IDEwZmU2YjgzMzI0YWQzN2QxOGI5MzdjYzhjNmRlOTRkZTUzNGQwMzUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTM6MDQ6MDcgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IGUxMTIyZWRjMWE1ZmU3OTc2YjA2NTA0NDEzNGQzOWU3ZGI1OTg1ZWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTI6NDM6MTkgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IGE2MTNkM2E4MzQ5MTIyMDZkMWJhNTk3MWU0NDFhM2VhNmIzNmFmMjMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTI6MzM6MDMgMjAxMiArMDAwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IDBlZjM0ZTY1MTlkZmNiODJjOTdkZjg0Mjc1NDdjMDhkY2Y4MWU2OWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMTA6MTE6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIHNubXBkICctZCcgb3B0aW9uLgorICAgIAorICAgIE5vdyBpdCBkdW1wcyBwYWNrZXRzIGFnYWluLgorCitjb21taXQgOGU2OTc0MmYxNDNlNGZjMTExOTZlNWIyZWQ2NmM4ZjdmNTNmZDAyZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgNiAwOToyNDoyMSAyMDEyICswMDAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnByZTEKKworY29tbWl0IGM0ZTAwYjhjM2UxMDEwY2RjYWI1ZTZjMDJkNjBkNzVkZjljNmRjZjIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDYgMDk6MjQ6MDUgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IDM5NDkwMTA0YTNhYjU4MjM1YWFjZTJmOWQ4NzFjMjY2ZGM0NDg1ZWUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MDY6NTIgMjAxMiArMDAwMAorCisgICAgTWFyayB0aGUgY2hhbmdlcyBtYWtlIGFzIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyBhcyBzcGVjaWZpYyB0bworICAgIHRoZSBwYXJ0aWN1bGFyIGJyYW5jaCBiZWluZyByZWxlYXNlZC4gIFZlcnNpb24gdGFncywgY2hhbmdlbG9nIGVudHJpZXMKKyAgICBhbmQgdGhlIGxpa2Ugc2hvdWxkbid0IHByb3BhZ2F0ZSB0byBsYXRlciBicmFuY2hlcy4KKworY29tbWl0IDRhMmU1YmNkNTZjZDJhZmIzNmViMTVkNzU0ZTJmZWU4ODhkZDUwYzAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAyMDo1OTozOCAyMDEyICswMTAwCisKKyAgICBocmhfc3RvcmFnZSBpcyBhIHByb3BlciByZXBsYWNlbWVudCBmb3IgaHJfc3RvcmFnZQorCitjb21taXQgY2U4NTgzMjkzMmNjZDkxNmM0MjMxOTExNGM0MDg4NWE0NjZhOWQwZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA1IDIwOjU2OjQwIDIwMTIgKzAxMDAKKworICAgIE1vcmUgZml4ZXMgZm9yIFNvbGFyaXMgc2gKKworY29tbWl0IDBkZDFlNTQ1NTdkMWJhNDk4YjU1ZDAxN2IwYTkzZThjY2Y5YmQ1MjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxNTowODoyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogVURQLU1JQjogUmVwb3J0IHRoZSBwcm9wZXIgYWRkcmVzcyBpbiB1ZHBMb2NhbEFkZHJlc3MgaW5zdGVhZCBvZiAwLjAuMC4wLiBNYWtlcyB0ZXN0IFQxNjBzbm1wbmV0c3RhdCBwYXNzIGFnYWluLiBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCBjNzZmYjk2ZjY1ZTMzYmEyZmQyMTJhOTIxZThjMzg2MTU1ZWU1YzdhLgorCitjb21taXQgNTE4OTE3ZTlmMzlmN2E5ZDNjM2JmM2E4NjVlOGFjMGUzMDI2ZDYwMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDE0OjA0OjU0IDIwMTIgKzAxMDAKKworICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOiBGaXggc291cmNlIGNvZGUgaW5kZW50YXRpb24KKworY29tbWl0IDI2NTE5MDljY2NlYWJmY2ZhZGFmOTQyYzAyNDUwZTI4ZmU4MzdkYzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBOb3YgOSAxMjowNDowNCAyMDEwICswMDAwCisKKyAgICBQYXNzZXMgbm93IG9uIE1pbkdXIHRvby4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTY1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGU0MWYxMTVlNDAzMDRjOTQxYmExN2Q2N2UyNDcxMDcyMmQ5MDc0MWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxMzozOToxNyAyMDEyICswMTAwCisKKyAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBBdm9pZCB1c2luZyBncmVwIG9wdGlvbnMgLXcgYW5kIC1xIGJlY2F1c2UgZ3JlcCBpbiBTb2xhcmlzJyBkZWZhdWx0IHBhdGggZG9lc24ndCB1bmRlcnN0YW5kIHRoZXNlLgorCitjb21taXQgNTExNmQ0ODM3OGVjZjAzZTcyMmYzMDEwYWQ0N2JmMjJhM2ZiY2I4YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjQ3OjIwIDIwMTIgKzAxMDAKKworICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzogUmVkdWNlIHNjb3BlIG9mIHByZWZpeF92YWwgc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IHdhcm4gYWJvdXQgYW4gdW5zZWQgdmFyaWFibGUgaWYgaXQgaXNuJ3QgbmVlZGVkLgorCitjb21taXQgNmU3NGQ2NGY4NWE1OWQ1MGU0NjFkYjRjMzRhYzc2ZjlkZTQ2OGJmYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjIyOjMxIDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvZXZhbF90b29scy5zaDogQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC1xIGFuZCAtdyBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcycgZGVmYXVsdCBwYXRoIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGVzZSBvcHRpb25zLgorCitjb21taXQgMTBmNTY2ZjRkNGNiYjNlMjA1MDIzYzIzNjY5Mjg5ZTRiZmQwODljYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjQ3OjM5IDIwMTIgKzAxMDAKKworICAgIHBlcmwvU05NUC9TTk1QLnhzOiBGaXggYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCA0NGFhMjY1ODkxY2Q1NjNmN2Y0MTE0ZWYyNWRjZjdhYWYzYjE0ZTlhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCBkYWU0ZTE2YmU4NjExNzg2MWY2M2QxYTJmOTgxYWQzNjE0MThmNWM2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCAyOGY2MjI2ZjJlMjI4YjhjYTI0ODQ4OTczNWY4NjUwMmIyY2NlMGExCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCA0MDAyMmE2OTc5NTgyNTljY2ZiYjNmZWQ0NGViM2M0NzJmNWU4MzdlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWFyIDQgMTA6Mzc6NDEgMjAxMiArMDEwMAorCisgICAgU29sYXJpcyBzaCBkb2VzIG5vdCB1bmRlcnN0YW5kICJ0ZXN0IC1lIgorCitjb21taXQgNzczYWYwYzQyZTA3N2JlYmRhZWNmMWMwY2FmMzkzMjg1YTc2ODhmMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAzIDE3OjE5OjMwIDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIG5zcm9sbHVwIGNvbXBsaWNhdGlvbnMKKworY29tbWl0IGVlNzEwNDljM2UyMWMxZDBlMzQyNDI5NzEzNjY1MmJiZTBlMzlkODUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMyAxNjo0OTo0MSAyMDEyICswMTAwCisKKyAgICBtaWJncm91cC9pY21wLmM6IGFkanVzdCBpZmRlZnMgdG8gbWFrZSBpdCBjb21waWxlIG9uIEJTRCdzCisKK2NvbW1pdCBjZTk2MDAzNjFlNjY1ZGRlMTdhZjlkOGFiMTZkN2NlODVkYzA1NjQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6Mzk6NTUgMjAxMiArMDEwMAorCisgICAgZG90M1N0YXRzVGFibGUgaGFzIGJ1Z3MgOi0oCisKK2NvbW1pdCBkZmZhY2Y2ZmEwNzU1ZTE3MDBjYmFjMjViODQ0MTg1YWJkODA3YTBhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6Mzg6MTAgMjAxMiArMDEwMAorCisgICAgcGFzc3BlcnNpc3QgdGVzdCBuZWVkcyAvdXNyL2Jpbi9wZXJsCisKK2NvbW1pdCA4NzI2OTk1YzdhOGFlZjY3NGM0ZjE2NGIxODcxYzM3YmJkY2RhZDUwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzY6NTggMjAxMiArMDEwMAorCisgICAgZ3JlcCAtdyBmYWlscyB3aXRoIE9wZW5CU0QgYW5kIFNvbGFyaXMgMTAtNjQKKworY29tbWl0IDFlYjQ3NDViMjNjYzNhODM5ODY0ZTdmNmVhMjgzNTViMDU2NmViNjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozNTo0OSAyMDEyICswMTAwCisKKyAgICBTb2xhcmlzIG5lZWRzIC91c3IveHBnNC9iaW4vZ3JlcCB0byB1bmRlcnN0YW5kIC1xCisKK2NvbW1pdCA5OTU0YjRiNzQxZmQ4YzYzZDYxMjhiZDA1MjcyOThjOGU0ZTk4OWZjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzQ6NDUgMjAxMiArMDEwMAorCisgICAgTWFrZSBzdXJlIHdlIGhhdmUgdGhlIHByb3BlciBzcmNkaXIgZm9yIG91dC1vZi1zb3VyY2UgYnVpbGRzCisKK2NvbW1pdCA3ODM2OTAwMmJlMjcxMWYwYWE4NzZiNjRhNGUxMGIwOTBjYzI0MWNkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzM6MzEgMjAxMiArMDEwMAorCisgICAgTm90IGFsbCBtYWtlIHZlcnNpb25zIGRlZmluZSAkKFJNKQorCitjb21taXQgOTQyNDViMjlhM2NkYTg5NDc1YzZlYWI1ZDk0OTNjNjY1N2ZmMzhlMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjI0OjI0IDIwMTIgKzAxMDAKKworICAgIE1ha2UgYXV0b2NvbmYgMi42OCBoYXBweQorCitjb21taXQgNDRhY2Q2YzI4NWZiNTYxNGI0Yzk2MTFiMWFiZGVjYTlkZDI4ZTRiYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjEyOjQ3IDIwMTIgKzAxMDAKKworICAgIEZpeCBzcGVsbGluZyBvZiBtaWIgbW9kdWxlIGZzeXNfZ2V0ZnNzdGF0cworCitjb21taXQgMWZhMWZlZTM2OTNmNjdiODIwMjIzODA2YjNkNzNhZmQ0YzUwZWMxOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1hciAyIDAxOjM3OjIwIDIwMTIgKzAxMDAKKworICAgIFNpbGVuY2UgYSBjbGFuZyB3YXJuaW5nLgorCitjb21taXQgOTMyNjNiOThhNWRiMzQ0Y2YyYzRkNDg5YzQzOTcxZTdiMjljZGIwMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMzozNzoyMCAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgNWExNzU0MjhiOTczZDJlYTg1NTNlMjlmZWNmOTRjZjE1NjZhYTg1OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMTo0ODoxOCAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgMzY0Mjc2YTFjNWFhNjZjYWEyM2ViNWI3ZjExMWZkZWI1YWY3MWZhNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMTo0NToxMCAyMDEyICswMDAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucHJlMQorCitjb21taXQgNzM1OTgzNDAxNzJlZmY3NTcyOWE2ZDU3MTkyYjgxNzFkNWJiZjAwZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMDo0Mjo1NiAyMDEyICswMDAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yLnByZTEKKworY29tbWl0IGYzMjE0NDAyNjcyY2ExOTlmZDUzMWU2NjEyMmJmOTZjNGQ5YTRlYjcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTA6NDI6MzkgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnByZTEKKworY29tbWl0IDJlNzRhY2I2ZjE5ZTQ3MjljZWRlMGFiNDNlOTMxOTYxY2IyM2FhZWEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBNYXIgMSAwOToxODozOSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogRG8gbm90IGluc3RhbGwgdGhlIHV0aWxfZnVuY3Mgc3ViaGVhZGVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiA1LjcKKworY29tbWl0IGI3MTA5NjQ2Yjk1YTcwNzEzZDFhZDk5MWQ0MWJjY2Q1N2MwYmIzZWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBNYXIgMSAwODo0ODo0OCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogSW5zdGFsbCB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMgaW50cm9kdWNlZCBpbiA1LjYKKworY29tbWl0IDQzMmNiYjdhNTUwMWFiOTBkNjZkMGE4M2U3MzFlNzM0M2JjMDRiMzcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBGZWIgMjUgMTA6MTM6MTUgMjAxMiArMDEwMAorCisgICAgQ29ycmVjdCB0eXBvcworCitjb21taXQgNmE2YzliYmM3NTg0ZjE5NmExMTg1Y2MxOTM1MjA0ZjEyMDY4MTFlZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEZlYiAyOSAwODo1NTozNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogSW5zdGFsbCB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMKKworY29tbWl0IGQ1MTVlMmE2ZTRjMmExYzRkODQ3MzRjYzdiMmQwYjJmYzVhODk0YWQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDE1OjU2OjIxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDg3OTE5OiBGaXggY29tcGlsYXRpb24gd2hlbiBjYWNoaW5nIGlzIGRpc2FibGVkCisKK2NvbW1pdCBhZjgzNjhlZDg4OThhNzhkMDg2OGI0N2FmNDZiYzlkYjA3ZDFjNzY0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxNTo1MDo1NiAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNDE0NzczOiBFbmNvZGUgaW50ZWdlciB2YWx1ZSB1c2luZyBBU05fSU5URUdFUgorCitjb21taXQgMTllMjcxNTgwN2ZlMDZmZDBiYWVkZjg4MTY1MDExYWVlOTMzZTc1NQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTQ6MDU6MzQgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogbWFuOiBCVUdTOiAzNDkwNzA4OiBDbGFyaWZ5IHVzZSBvZiBjb21tb24gY29tbWFuZC1saW5lIG9wdGlvbnMKKworY29tbWl0IDY1Zjc5NjJmOTMyYzliNzVjNWJiYmIwNDdkMWUyNmFlNjA5NzhlNTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEyOjIzOjM0IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAzNDg5NjMxOiBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIFVDRCBtb25pdG9yaW5nIGZsYWcKKworY29tbWl0IGFjMTY2MDUxYjZhMDkyZGQ0YTU5NDMyNmVjODVlMmY2OTliNjI1NDcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDExOjU3OjQxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEJVR1M6IDM0NzQ1OTA6IERvbid0IG1hdGNoIHVuZGVyc2NvcmVzIHdpdGhpbiB0aGUgc291cmNlIHJvb3QgZmlsZW5hbWUKKworY29tbWl0IDg3OWJmNzA3OWQzNGZhNDZmNmZjZjU0YTAxYzg1MDBiZWFlY2U1OWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEwOjQ0OjQxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAzNDYwMzY0OiBGaXggdXNlIG9mIGJsb2NrIGZhY3RvciB3aGVuIGRldGVjdGluZyBlcnJvciBjb25kaXRpb25zCisKK2NvbW1pdCAwMzRmMWM1NzJmNjgzZWE0Mjg1ODMwNzQ0NzFlNWQ1ZDEzYjUxODM3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDoyMjoyMCAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbmZpZ3VyZWQgdXNpbmcgLS1lbmFibGUtcmVhZC1vbmx5CisKK2NvbW1pdCAzNjQyM2UyMTBiZmI2NWVmMTIxYzZhNjZhZWM0MzhjN2MyMzdkM2RmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDowMzoyNSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NTQxNjg6IGNvbmZpZ3VyZTogRml4IGJ1aWxkaW5nIHdpdGggLS1lbmFibGUtcmVhZC1vbmx5CisKK2NvbW1pdCBlZWQwYmNiYzQzZmVhMTgyNTlmMGY2M2IyMDgxYjZkMTA1MzVhMDUyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAwOToyNzoxMSAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCBiYWJ5LXN0ZXBzIHdoZW4gY29tcGlsZWQgd2l0aCAtLWRpc2FibGUtc2V0LXN1cHBvcnQuCisgICAgSW5zcGlyZWQgYnkgYnVnICMzNDU0MTY4CisKK2NvbW1pdCBlYzZhMjMwMzBlNWEyMDcyYzE5YzE4YzFkOWMxMjQzODdkYTU2YjdiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDI3IDE4OjQyOjU4IDIwMTIgKzAwMDAKKworICAgIEFkZCAtbHJ0IHRvIE5FVFNOTVBMSUJTIHN1Y2ggdGhhdCBjbG9ja19nZXR0aW1lKCkgY2FuIGJlIGZvdW5kCisKK2NvbW1pdCBmMTMzMjA1MDAyOTRiYjI0MGY2M2M2ZGQ3ZDJlOWEyMjA4ZWI3NDBkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEZlYiAyNyAxNjo1Mjo1MSAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbXBpbGVkIHVzaW5nIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgYzQyNzZiNjIzMmMyOTE0NWMwMzk4ODRlNmI1YTZiNmRhNGI5MzgzNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBGZWIgMjcgMTU6NTQ6NDUgMjAxMiArMDAwMAorCisgICAgT21pdCBTRVQtcmVsYXRlZCBjb2RlIHdoZW4gY29tcGlsaW5nIHdpdGggLS1kaXNhYmxlLXNldC1zdXBwb3J0IChpbnNwaXJlZCBieSBwYXRjaCAjMzQyNDkzMCkKKworY29tbWl0IDAxYzkzMGVkY2MyNTcwMGQ2YjVmYjAzNzZmNTVhMjY0MjVlMTNmYjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gRmViIDI3IDE1OjE3OjIyIDIwMTIgKzAwMDAKKworICAgIE9taXQgU0VULXJlbGF0ZWQgY29kZSB3aGVuIGNvbXBpbGluZyB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorICAgIChpbnNwaXJlZCBieSBwYXRjaCAjMzQyNDkzMCkKKworY29tbWl0IDk0ODRkODMyMDNjNGUyZDgyMDQxNmJlNjY1ZmE4MzNhYTcwNDQ0ZDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMjQgMTQ6MDA6MzIgMjAxMiArMDEwMAorCisgICAgUmV3b3JrIGNvbW1pdCBiNGExOTUwNWEwNTgxNmU5NGUwMWRlOTdiZjk5YWMzN2ZjZGM2ZDIzLgorCitjb21taXQgMmI3ZjEzNDk1MjI4NjM1ZDgxNmU1OGIyMTc0ZGMxMjRkZDBjZjM5ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEZlYiAyNCAwNzo0MzoyMiAyMDEyIC0wODAwCisKKyAgICBzZXQgTUVSR0VfQVVUT0VESVQgYmVmb3JlIG1lcmdpbmcgdG8gYXZvaWQgdGhlIGZ1dHVyZSBnaXQgMS43LjEwIGZvcmNlZCBtc2cKKworY29tbWl0IGUxYjkxMGIwYmU5MzQzNTg2YWU5ZWRiYTZmNDYwNDBhZjMxNWZjZGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMTA6Mjc6NTQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGluaXRfYWdlbnQoKSArIGluaXRfa21lbSgpOiBSZXR1cm4gYW4gZXJyb3IgdmFsdWUgaW5zdGVhZCBvZiBpbnZva2luZyBleGl0KCkgaWYgYWNjZXNzIHRvIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBpcyBkZW5pZWQKKworY29tbWl0IDQ2M2VlZDIxMjBmOWQxOTFiYzIyNjczNDk2YTQ5ZTgxNzQ2NjRlNGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMTA6MDM6MzEgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIG9ic29sZXRlIHN5bWJvbCBORVRTTk1QX0VYSVRfT05fQkFEX0tMUkVBRAorCitjb21taXQgYzM2YWI3MWE0ZTA5NmYxNmNjNWE1NTUzM2YwODBjOWE5NDAwOTkxNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwODo1Mzo1NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBGcmVlQlNEOiBzbm1wZCArIGFwcHM6IFNlbmRpbmcgVURQIHBhY2tldHMgd29ya3MgYWdhaW4gZm9yIG5vbi1yb290IHVzZXJzCisKK2NvbW1pdCBlZGViZGRiYTkzMGY4YjE0NzJmYTBiZDIwZmM0MTNlZjhjZjQ2NGEyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgRmViIDIxIDExOjMxOjQ2IDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvUlVOVEVTVFM6IEZpeCBhIGJhc2hpc20KKworY29tbWl0IGI0YTE5NTA1YTA1ODE2ZTk0ZTAxZGU5N2JmOTlhYzM3ZmNkYzZkMjMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMjAgMTY6NTg6NDcgMjAxMiArMDEwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0ICVsZCB2ZXJzdXMgdGltZV90IG9uIHN5c3RlbXMgd2hlcmUgdGltZV90IGlzIGEgc3lub255bSBmb3IgbG9uZyBsb25nIGluc3RlYWQgb2YgbG9uZy4KKworY29tbWl0IGQ4OTc4ZWNjODIxMWJlN2MxZTc5MDVmMWUyMTViYjA2ZGVkMjY2YjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBGZWIgMjEgMTI6MzI6MjUgMjAxMiArMDEwMAorCisgICAgRml4IHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jIGZpbGUgaGVhZGVyCisKK2NvbW1pdCBhYTc2NmQxOTZlNTI4N2Y2Y2E3OWI1OGEzNDViMDI0MjYwYWJhMzU0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDIwIDE3OjA3OjEzIDIwMTIgKzAxMDAKKworICAgIElGLU1JQjogZG8gbm90IHRyaWdnZXIgdW5kZWZpbmVkIGJlaGF2aW9yICg+PiAzMiBvZiBhIDMyLWJpdCB2YXJpYWJsZSkgd2hlbiB1cGRhdGluZyBhIGNvdW50ZXIgYW5kIGlmaV9pcGFja2V0cyBpcyBhIDMyLWJpdCB2YXJpYWJsZQorCitjb21taXQgYzNmYjZkZDllNmI5OWU5NTQyNDkzMTg4OTg3ODcxZmM1MDE3Y2IzYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwOTo0NTo0NSAyMDEyICswMTAwCisKKyAgICBGaXggYSBjb21waWxlciB3YXJuaW5nIG9uIHN5c3RlbXMgd2hlcmUgbW9kZV90IGlzIHVuc2lnbmVkCisKK2NvbW1pdCBmOGEzZWYwZDNkNGU1MzAyNzk5MDAxMDEwNDliOGRlOThhNDRhNmZiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NDg6NTIgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYiArIHNubXBkICsgc25tcHdhbGs6IEF2b2lkIHRoYXQgc3lzdGVtIGNsb2NrIGNoYW5nZXMgKGUuZy4gYnkgbnRwZCkgYWZmZWN0IGNvZGUgdGhhdCBuZWVkcyByZWxhdGl2ZSB0aW1lCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgU05NUHYzIHZhcmlhYmxlIHNubXBFbmdpbmVUaW1lIGlzIDAuLjIxNDc0ODM2NDcgb24gYWxsIHN1cHBvcnRlZCBzeXN0ZW1zIGluc3RlYWQgb2YgMC4uNDI5NDk2NzIgb24gc29tZSBzeXN0ZW1zIChpLmUuIHdyYXBhcm91bmQgYWZ0ZXIgNDk3IGRheXMpCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygpLCBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCksIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCksIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKQorICAgIENIQU5HRVM6IHNubXBsaWI6IERlcHJlY2F0ZSBhdGltZV9kaWZmKCksIGF0aW1lX25ld01hcmtlcigpLCBhdGltZV9yZWFkeSgpLCBhdGltZV9zZXRNYXJrZXIoKSwgbWFya2VyX3R0aWNrcygpLCBuZXRzbm1wX21hcmtlcl91cHRpbWUoKSwgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpLCB0aW1ldmFsX3R0aWNrcygpLCB1YXRpbWVfZGlmZigpLCB1YXRpbWVfaGRpZmYoKSBhbmQgdWF0aW1lX3JlYWR5KCkuCisgICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIHRoZSBuYW1lcyBvZiB0aGUgc3RydWN0IHRpbWV2YWwgbWVtYmVycyBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHVzZWQgdG8gc3RvcmUgYSB3YWxsIGNsb2NrIHRpbWUgYnV0IHRoYXQgZG8gbm93IGNvbnRhaW4gYSBtb25vdG9uaWMgY2xvY2sgdmFsdWUKKworY29tbWl0IGMxOTc2MGYzMzMzYzkyZmFjNWQ1MGU5NzY4Y2RmOTM5MjE4YmM0ODcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMTUgMDk6NDU6MDMgMjAxMiArMDEwMAorCisgICAgc25tcGxpYi9zbm1wdjMuYzogRml4IHNvdXJjZSBjb2RlIGluZGVudGF0aW9uCisKK2NvbW1pdCBhNmRiMjM5OTQ1ZTE5NWRlNWE5MGZhMTgzNzAwYjI3YTZlY2IyOGQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDcgMDA6MTE6MTQgMjAxMiArMDEwMAorCisgICAgRml4IHBvc3NpYmxlIG1lbW9yeSBsZWFrIGZyb20gcmVjZW50IGRlY2xhcmF0aW9ucyBwYXRjaAorCitjb21taXQgMGZiYmI5YTllMjkwNmE3YWY5NTY5NTcwNjFkNDg1ODc0NDYyYWVhOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDIwOjQzOjA0IDIwMTIgKzAxMDAKKworICAgIERvIG5vdCBtaXggZGVjbGFyYXRpb25zIGFuZCBzdGF0ZW1lbnRzCisKK2NvbW1pdCBmMzA4ZDViYWZiMDVkNzhlZDQwMzBjNGVjZmYzMjRiNmNiZGE2ODBmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTU6MjU6MzAgMjAxMiArMDEwMAorCisgICAgRml4IHR3byBjb21waWxlciB3YXJuaW5ncyBpbiBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYworCitjb21taXQgNDZmMGZjMWI3ZmMyNmEyMjU3NjNiYzY1Y2NhNTIwYTFjNTlmMDI1MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDIwOjU0OjMyIDIwMTIgKzAxMDAKKworICAgIHNlbmRtc2cgZG9lcyBub3QgbGlrZSBJUF9TRU5EU1JDQUREUiBpZiBhZGRyIGlzIElOQUREUl9BTlkKKworY29tbWl0IGRlYmFjNDk4ZmU4NDEwMTEwMTA3YTJmZTY0ZjhhZmI3NDhlZGFhMDcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDYgMTY6NDg6MDkgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYWRkZWQgT0NGUzIgKE9yYWNsZSBDbHVzdGVyIEZTKSB0byBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlCisKK2NvbW1pdCBmYWZjOTljZDg5ZTczZWM3ZTAwYmY3MzYwZDBiNGZhNjE5NDRhNGY0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTg6MzQgMjAxMiArMDEwMAorCisgICAgU2ltcGxpZnkgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGFuZCBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkKKworY29tbWl0IDdhZjIwMTNkZThiZjFiMzc5YzA3NmRiNGUxMDQ1MDhlMTc4NzRkM2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDo1NTo1OCAyMDEyICswMTAwCisKKyAgICBGaXggb3JkZXIgb2YgZmVhdHVyZSAjaWZuZGVmIGFuZCBEb3h5Z2VuIGNvbW1lbnQgYmxvY2sKKworY29tbWl0IGJiZDY3ZjYzNTMwZjVlZjBiZmM5NDhmYzU4ZGZlNmE5M2Y4Zjg2NzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNToyNTozMCAyMDEyICswMTAwCisKKyAgICBGaXggdHdvIGNvbXBpbGVyIHdhcm5pbmdzIGluIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jCisKK2NvbW1pdCA0MmE2NmFlZmYyNWI5ZTllZjYzNWE0MDRhZDJmNTIxMmY5ZThjZjBkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NDc6NTQgMjAxMiArMDEwMAorCisgICAgUmVuYW1lIHR3byBmdW5jdGlvbiBhcmd1bWVudHMKKworY29tbWl0IDNmZTcyYjNiOTliN2U0YjJiOTgyMzYzZGZjNGYyZDhkMTNmNDA1OTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxMzo0OToyMiAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHNubXBfc2VsZWN0X2luZm8oKSBkb2N1bWVudGF0aW9uIHRvIERveHlnZW4gZm9ybWF0CisKK2NvbW1pdCBlOWRiMjY2YWU0OGQwNWE3YTZjYjVkNzFiNGJkZWE3YWQ4MDhlZjVlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTc6NTcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoKQorCitjb21taXQgZDA4MDQ0Y2I5ZTU3MDJmYmY1NDllMTQ0MjVmNDI3OTQyNTlkOGEyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDA5OjM4OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSgpCisKK2NvbW1pdCBhMDVjMjdjMjcxMWNiNDE1ODJhM2I0YzMxZTM4YjBlOTM1MzBiNjJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NTE6MzMgMjAxMiArMDEwMAorCisgICAgRml4IHNwZWxsaW5nIGluIGEgc291cmNlIGNvZGUgY29tbWVudAorCitjb21taXQgOTEwZDdiMGQ5OTE4MzYwOWI5NTI5YjA0YzNmMjkzMzBlYjY2MTAyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjM4OjEyIDIwMTIgKzAxMDAKKworICAgIFJlcGxhY2UgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpIGJ5IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpCisKK2NvbW1pdCA0M2E4M2Y2YzZhOTZjYzIzMTZiNzBlZWNhY2YxMjdlYjY5MTNjN2E3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTk6MTUgMjAxMiArMDEwMAorCisgICAgVXNlIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGluc3RlYWQgb2YgbWVtY3B5KCkgZm9yIGNvcHlpbmcgc3RydWN0IHRpbWV2YWwKKworY29tbWl0IDJmZTU3OWVmYjFjYjNhNzRmODI4MDNjYTMyMzkyOGY2YjhlNGI1YzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMyAxNDowNDowMiAyMDEyICswMTAwCisKKyAgICBNYWtlIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYyBidWlsZCBhZ2FpbiBvbiBub24tTGludXggc3lzdGVtcy4KKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgMzQ1YTFlNDI1NDgxMmNiOWVkYzFkMjc0NDkxYjc2NjgxYTlkYmExZS4KKworY29tbWl0IDg4MWRlNmFiNzM1NTI3N2E1YzExNmEwMDhmYmU1MTMyOTNiMDUwMzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMyAxMDowODoyMSAyMDEyICswMTAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBSbW9uIE1JQiBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgNDYyOTkzM2MwZDNiM2Y5ZjRiYTU4MzUzNGY3OWEzN2ZiOTYzMzgxNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDIwOjA1OjMxIDIwMTIgKzAwMDAKKworICAgIE1vcmUgY29tcGlsZXIgd2FybmluZyBmaXhlcworCitjb21taXQgZTliNWEzZGVlNmY5YWZhYjhiOTBhMjkzOTIwNDA2MzJiMDc1YWQ3YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE2OjU2OjU1IDIwMTIgKzAxMDAKKworICAgIFVzZSBTTk1QX01JTigpIGluc3RlYWQgb2YgbWluKCkKKworY29tbWl0IGFlNDUyYzc3YjQxMTEzOWQ2YjU4MDBmZmNmODhkNDhlOWI0NzkyYTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNToyMzozOCAyMDEyICswMTAwCisKKyAgICBSZXN0b3JlIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3LgorCitjb21taXQgYzdkMTFmYTAwZjk5OTVkZGI5ZmUzZDQ5OTRhM2U5NzkwZGEyZTE4OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE1OjE4OjQwIDIwMTIgKzAxMDAKKworICAgIFJlc3RvcmUgY29tbWl0IGRiYjg3OTVhN2RmNTk1ZjA2MDNmMmVjNjE3MDQ3OTlmNGM0ODI2NjcgcGFydGlhbGx5LgorCitjb21taXQgMDBmZDYyNzIwZWM0NTRmNWE2OTBkZTRmZWJhMDgyMjNjZmIyYzNmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE0OjQ4OjQ0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogQXZvaWQgY3Jhc2ggZHVyaW5nIHNodXRkb3duIGR1ZSB0byBpbnZva2luZyBwZXJsX2Rlc3RydWN0KE5VTEwpCisKK2NvbW1pdCBkOWUyMjlkODFhYmVhZjE5MWVmMmNjYjA3Nzg0Mjg4NWMyMzBkNjIyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTQ6NDc6NDEgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIGEgc3VwZXJmbHVvdXMgZGVjbGFyYXRpb24KKworY29tbWl0IDFlMmUyYWY2Y2FlODMwZjM4MWU4N2EyNDRkMDI5ZWI4NmJmM2ZjY2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMzoyMDozNyAyMDEyICswMTAwCisKKyAgICBwZXJsL1NOTVAvZXhhbXBsZXMvcGluZ21pYi5wbDogQWRkIGVycm9yIGNoZWNraW5nCisKK2NvbW1pdCAyNDFhMTQxZTMxZjE2ODRmYzZjZjcwY2M0YTAwY2NlNjM2ZmQzNTI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTE6Mjg6MzcgMjAxMiArMDEwMAorCisgICAgTWFrZSBjb25maWd1cmUtdGltZSBFVlBfTURfQ1RYX2NyZWF0ZSgpIGRldGVjdGlvbiB3b3JrIG9uIHRoZSA1LjQgYnJhbmNoLgorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCA0NmVhYzAyZTlhMjdiZjRmMzA2OGU3OTVjYWI4OTFmMDVhODQ4ODcwLgorCitjb21taXQgNmQ5ZDE0ZmVhYWEyZDBmZWM2OGI0ZDE1ODk0NGQzMmNiMDRmZjFiYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDExOjEyOjAwIDIwMTIgKzAxMDAKKworICAgIFJldmVydCB0aGUgY2hhbmdlcyB0aGF0IGJyZWFrIHRoZSBidWlsZCBvbiB0aGUgNS40IGJyYW5jaCBmcm9tIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3LgorCitjb21taXQgOGFiZTQ5ZTMwYzk3Yzg5ODNlODNiNDVhMzVjNzE2ZmU5MWY2NmJlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEZlYiAxIDExOjU2OjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGluIHRoZSBESVNNQU4gTUlCIGltcGxlbWVudGF0aW9ucy4KKworY29tbWl0IGY5ZmIwYTUzMzM3NWUxNGRjMzcwMDI1YTBiMmZiYzc2MWJmMjdiZTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAwOTo1NjowMiAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIkhPU1QtUkVTT1VSQ0VTX01JQjogZml4IGEgY29tcGlsZXIgd2FybmluZyIgYmVjYXVzZSBpdCdzIHdyb25nLgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWE2Yjc5YmMxMjRhN2I3YTg4NWQ3ZTUwMzVhYjA2YWEzZWNlZjYxMy4KKworY29tbWl0IGNhNGE0ZmUyNWVmZDI3MTRmOGYxOTYxYjk3ODU2NjE2NTYzZjQyYzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMDoyMTo0OSAyMDEyICswMTAwCisKKyAgICAuZ2l0aWdub3JlOiBBZGQgcHl0aG9uL2J1aWxkCisKK2NvbW1pdCAxM2FkYTU2NTU4YjQ0ZTI4ZDEzNTVjMGRjZTFkOTIxZjM3NDZkNTQ4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTo1Mzo0OSAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIlJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiIgLSB0aGVyZSAqaXMqIE5FVFNOTVBfUFJJbyBpbiBWNS02KyBicmFuY2hlcworICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWE1MjhiZDIyYzc0OTNjYThkNjdlNjc4ZmJmNjE1Y2EwZjYzZWE2ZC4KKworY29tbWl0IGFhNTI4YmQyMmM3NDkzY2E4ZDY3ZTY3OGZiZjYxNWNhMGY2M2VhNmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjEzOjE4IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiAtIHRoZXJlIGlzIG5vIE5FVFNOTVBfUFJJbyBpbiBWNS00IG9yIFY1LTUgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIuCisKK2NvbW1pdCAyZmI5OWJlOWFhODZhNmNhMzQ5Yjg2ZDRlZjhiYzcyNmVkOWYyYTgyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDo1ODozNSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IGU1YzM1NTg5ZTBiZjQxNmJmZDAzNmJkNDY4ZjQyYWFlYWIyNWU3ODgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjU1OjU2IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgMzQ1YTFlNDI1NDgxMmNiOWVkYzFkMjc0NDkxYjc2NjgxYTlkYmExZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6NTE6MjYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZXJyb3IgaGFuZGxpbmcgaW4gaW5pdF9pY21wKCkuCisKK2NvbW1pdCBjMzAzNTQ5YTU5ZmE4YzJmMjBhOWQ4YmYxZTk4NWZiYzhhYmRlNmE4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTo0NjoyOSAyMDEyICswMTAwCisKKyAgICBSZXdvcmtlZCBfcmVnaXN0ZXJfZXh0ZW5kKCkgZXJyb3IgaGFuZGxpbmcuCisKK2NvbW1pdCA5YzIwZTI3YTcwMjZmYzAzMGRhM2IzMjhiOWEyZTFiNGYzNjY3MGNkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNToyMToyOCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDIyZmQwYmZjMmRmMGUxZjYwMjBkYzNjNTBhNzUzZGRmMjhhNDU5OWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjIwOjIyIDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgNWQ2MWU1N2JhZjU4MGM3ODI1MmMwYWJiMDA5OGMwN2JiMDVhZjE3YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MTc6MDUgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCAzYzNlZWFlODBkNzk2ZjI3NTk3YzkwMWU3ZmYyMDQ2Yzc2OWVmNGI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowODowOSAyMDEyICswMTAwCisKKyAgICBNYXJrIHJvd3JlcV9jdHggYXMgZnJlZWQgc28gbmV4dCBpdGVyYXRpb24gYWxsb2NhdGVzIG5ldyBvbmUgaW5zdGVhZCBvZiByZXVzaW5nIHRoZSBmcmVlZCBvbmUuCisKK2NvbW1pdCBhZjlhYmQ1M2MyMzM3YzkwYTY5MWE3YjA0NGZmM2Y5N2MxMDAzMTYxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowNToxMCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IGNmOTQ2NWY1NDE4MWU2MmUyMWE5YjEwMjE5MTMxMTA3YTNkMmViZjYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjA0OjA2IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgNzg3MWYyYjA5YjhiNTJmMzRhOWU1Nzc4NDI2NjQ1OTA1MzE2NWJjYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDI6NTAgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCA3YTM3ZjMzZDMxMGM5NTk4NjA3YmMzMjNkOWJkYmY5MWFhZjcyYzk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowMDo1MSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDNlNDVmNzAyNjI0OWU0NTM1MGVkYWFjODUzMzc0MjNhYTBlOTVkOGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjEzOjE4IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiAtIHRoZXJlIGlzIG5vIE5FVFNOTVBfUFJJbyBpbiBWNS00IG9yIFY1LTUgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIuCisKK2NvbW1pdCA2MTkzNjc2MmU2NDFjMThkYjc1YWE1MTI1YTMzZTc3NmM2NzdhZGM1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxMToxMzozOSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBmcmVlaW5nIHJlZ2luZm8gdHdpY2Ugb24gZXJyb3IgaW4gYSB0ZW1wbGF0ZSBhbmQgYWxsIGl0cyBpbnN0YW5jZXMuCisKK2NvbW1pdCA0OTY0Mzc0MzA0MTVmYmFmZWIxY2NkNDc3NGYxY2EwMGQ2MjdlYTFmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDExOjA0OjEzIDIwMTIgKzAxMDAKKworICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncyBpbnRyb2R1Y2VkIG9uIFY1LjYgYnJhbmNoCisKK2NvbW1pdCA1YjRhMjRjZGNlZTFiYzNkODI2MzNjY2FmZWI5NmZjZTk1MzQ5YzU5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIyOjI3IDIwMTIgKzAxMDAKKworICAgIHVuaXQgdGVzdHM6IGZpeCBhIDY0LWJpdCBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCBjYmYxYzkxYmFmNzE5MWJlNWZhMjdkODFiY2Y4NzE0MzMxYTJjMTJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIwOjQyIDIwMTIgKzAxMDAKKworICAgIFVzZSBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKCkgdG8gZnJlZSBhIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdC4KKyAgICAKKyAgICBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCBkYmYyNmEwNWEwNGVmMjRjNDczNDZlNWFkZGE0OGUzMzg0OThlNzFmLgorCitjb21taXQgYWE2Yjc5YmMxMjRhN2I3YTg4NWQ3ZTUwMzVhYjA2YWEzZWNlZjYxMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAyMCAwOToyMDozMSAyMDEyICswMTAwCisKKyAgICBIT1NULVJFU09VUkNFU19NSUI6IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDNhNzZiNDNlMTFmZmZhZGE2MzJmY2NiODQ4YWI1MDBlODc2YWQ0OGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTggMTY6MjE6MDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBBdm9pZCB0aGF0IGFuIFNOTVAgc2V0IHdpdGggVXNlRW51bXMgZW5hYmxlZCBjYXVzZXMgYSBzZWdtZW50YXRpb24gZmF1bHQKKworY29tbWl0IDg0ZGVjOWZhOTJiMGFhMmQ1OGViNzAyMDMzMGY0Zjk4ZTUxNTQzMjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTggMTQ6Mzg6MjEgMjAxMiArMDEwMAorCisgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogRml4IG1vc3QgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IDM4Y2YyMThjM2YxYTcyNzc4NmUyMjdhNWQzZmIxODZmZDBmMWExNWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjUwOjEzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIHR5cG8KKworY29tbWl0IDQ1NDEyMjI0NDEyMmJmZGI2ZjY3Y2FiMzEyNTZkN2I0NjM3MmU5ZTEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjMwOjE4IDIwMTIgKzAxMDAKKworICAgIEZyZWUgdG1TdGF0ZVJlZiBvbiBlcnJvcnMuCisKK2NvbW1pdCAwMTE5MDIyZGFhNTljNzNiZmVjMGRhMjM4NmQwNjI4ZjE0ZTZkYWI3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxNDowOToxMiAyMDEyICswMTAwCisKKyAgICBGcmVlIGZpbmdlcnByaW50IHdoZW4gaXQncyBub3QgbmVlZGVkLgorCitjb21taXQgMGU4NGNkMzAzYTA4MjY3ZGVjNzhmNmQ4MWM5YmIwN2UzZDgzYTExZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6NDg6MjYgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNjNkYzg0NmE3OTQ5Y2U2OTdiM2UyOGM1NDNkYzExMDVlNjNhMjI1MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MDg6MjggMjAxMiArMDEwMAorCisgICAgRnJlZSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludC4KKworY29tbWl0IGNlMWYyODRhNjNlYjgxNjQ0YjNlMzI2MDZjYmUzOWI2N2UxZGZmMmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjM3OjA5IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDdlMjE0MTNjYTZmMmVmZDdhM2FmYjYyYzYyYjY0NDg4MWI4YmQxZTcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjQ2OjMwIDIwMTIgKzAxMDAKKworICAgIFByb3Blcmx5IGFsbG9jYXRlIGFuZCBmcmVlIGVuZ2luZUlELgorCitjb21taXQgMzRjOTYyODgyNjA3YzM2MzhhMmZhMjVhMmFjNTMxNDkyZDcxYzc4NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6Mzc6MjUgMjAxMiArMDEwMAorCisgICAgRnJlZSBsb2NhbGx5IGFsbG9jYXRlZCB0bVN0YXRlUmVmLgorCitjb21taXQgZjU3YWU1MzFkYzU2NThhYmNkNjViMTYyNzYxNTUyNTIzOGQxNmQyZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MjA6MjQgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNTM2YmM1NzU1NmMzMTQxNTYxZWE0YTE5NDgxMGIxNjI5MGE2OTFlZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MTU6NDcgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nLgorCitjb21taXQgYTA3NzdkMzA3ZGJjYWYyMTllZTAxODRhMGZiYWI5ZDRlNWQ2YWEwYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MDE6NDUgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgOGI5N2E3MWM4ZTc5NTk0MjhlYjRkNGU4ZDkwZTkwOTZkNDNmZjA5ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTc6MjYgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgMmMxNTA3YzIyMDMwNTQ5YWU2NjBjMGUyMTFmYmRjNWM3NWVjNWM1NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTM6NDcgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNjVmMmI3YmNkNGZlMDM5MDZhYTFhMTE1YWI2MGE4OWI4YWU5MzNkNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTE6MzYgMjAxMiArMDEwMAorCisgICAgQ2xvc2Ugb3BlbiBmaWxlcyBvbiBlcnJvci4KKworY29tbWl0IDBlNTJlNGY2NmQ0NDc2NmJlYTM3NDczNTU2Yzc4ZTUyMTliOTU0NjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjQ1OjMzIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGRiZjI2YTA1YTA0ZWYyNGM0NzM0NmU1YWRkYTQ4ZTMzODQ5OGU3MWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjQyOjE3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDc0OGRhODRiMWZkNjU0ZTMzOGJjNzAxZThmOWU1ZGEyMjkxODdmMWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjMyOjA0IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGViMjE3MTQ2ZmQ1NDAzNmVhNDIwMmJmZWY3OGJiZjc3NGQ3ZTM4MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjIzOjEwIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDliYTM4ZWVjNjYxMzhlYzFmNjEzZWE4ZDA0ZTE1ODEzMGM3MTIxYmMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE4OjU1IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGQ5ZDkzOGQzMDE4YzI3ZjUzMjc3YmM1ZTU5NTc4NTAwNDkwYzFkMDkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE2OjM4IDIwMTIgKzAxMDAKKworICAgIENsb3NlIG9wZW4gZmlsZSBvbiBlcnJvci4KKworY29tbWl0IGQ1ZTgxN2Q1YmQ1MThkOWFjNmEwZDYwZTBlMTQxZGQ2NGYyN2FkMTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE0OjEyIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDJhZTY4ZjA1OWRmOWQ3NGIwNzRkMTJmNTljMTg0NzQ2NmVkNTc2Y2QKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjAzOjE3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGEwMGYzZDQ2MTEyMWI1NDVhZWQ3MmFjMTJiMjQzODc5MWRjZmM0YmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE0OjU4OjM5IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDU5ODg0YmI0ZDM1YWQxMzc0N2ZmYTY3MjM0MzZkY2E1ODdhOWFiNzcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE3OjA5OjEyIDIwMTIgKzAxMDAKKworICAgIEluIGFib3ZlIGNvZGUsIG9sZW5ndGggaXMgY2hlY2tlZCwgc28gbGV0J3MgY2hlY2sgaXQgYWxzbyBoZXJlLgorCitjb21taXQgYmE1ZDUyOTJiMDQzOTNiMGM3ZDdkN2VkOTYxMjQxOTI5NDE4YzZlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTc6MDU6MTQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgZGEyZDZhNzAyOGExM2I5ZWRmM2E1Yzg0MzE0ZDBmMWZlZWY3NjcxNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6NDQ6NTYgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwuCisKK2NvbW1pdCBmODgwNTRhOWI2OWI2ZGUyNzRmN2ExNGE1OWI0NzMyM2U1ZTRlNGM2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjozNzozNSAyMDEyICswMTAwCisKKyAgICBEb24ndCBkZXJlZmVyZW5jZSBjb250ZXh0IGlmIGl0J3MgTlVMTC4KKworY29tbWl0IDdjNGQ0NTllOGYxZjY1MmNjMjA5OGMzZDRjODFkZTkwYTg0ZWQ3MTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjMwOjA5IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlZmVyZW5jZSBOVUxMLgorCitjb21taXQgZmMxOWI3ZjMzYjU4NzkyN2QyYTAxZTcyZDIzZDIxYjliMTY5NmFiMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MjU6MjYgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgY2xvc2UgTlVMTCBmaWxlLgorCitjb21taXQgNWU5NWNhNjc5MDA3NmI3ODgwNzJhODAxZWU3YzgyOTY5ZDk5NWJjYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTc6MDkgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwgd2hlbiBhIHRyYW5zcG9ydCBkb2VzIG5vdCBoYXZlIGZfZm10YWRkci4KKworY29tbWl0IGVlZDZmNWY5YjlhZTU0ZDJjZWFiNjdhZDg1YWRkZTFmNmE4YTIxZDUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjEzOjEzIDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgNDFjZGU2OGI1ZmE0YjM4ZDgxNDUwY2Y5MWUwODJjZGZhODI1ZTdjZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTA6MTAgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgaWYgYSByZWdpc3RyYXRpb24gd2FzIHJlYWxseSBmb3VuZC4KKworY29tbWl0IDViNzJhNDA4NTM4NzZhMTg2ZWZjYzAwOTBhNGUzMmMyMzViOWMwNWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjAzOjU4IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlcmVmZXJlbmNlIE5VTEwgd2hlbiBkaWZmbGVuIGlzIFNNVVhfTUFYX1BSSU9SSVRZICh3aGljaCBpcyBoaWdobHkgdW5saWtlbHksIGJ1dC4uLikKKworY29tbWl0IGZhNmE5MTJlNDFjNWQwZmQyYTYzNjg5NGU4NmI2NDI2YzA3Mzc1YWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE1OjM3OjQ0IDIwMTIgKzAxMDAKKworICAgIENoZWNrIGZvciBtaXNzaW5nIHZhbHVlIGluIHNldEV2ZW50LgorCitjb21taXQgNDEwYjcxZGE0MjUzODlmZWNjMjVkMTRmNDlmMjM3NTM1ODE1NzZhZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6Mjg6NDEgMjAxMiArMDEwMAorCisgICAgRGVyZWZlcmVuY2UgZXJlZyBvbmx5IGlmIGl0IGlzIG5vdCBOVUxMLgorCitjb21taXQgMTg1MjcyZDFhMGI5MTM3NzQxODZmMWI5MTM1YWVhZjYzN2ViZWQ1MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6MTc6MjEgMjAxMiArMDEwMAorCisgICAgQXMgcGVyIGFib3ZlIGNvZGUsIHRlbXBsYXRlX3YycGR1IGNhbiBiZSBOVUxMLCBzbyBjaGVjayBpdCBiZWZvcmUgZGVyZWZlcmVuY2luZy4KKworY29tbWl0IDQ4ZTVlYWQzZmQyYzJiMzg1ZGY2OTcyYzY3NTI2ZmY2YmRjMzA3NjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjQyOjIyIDIwMTIgKzAxMDAKKworICAgIFVwZGF0ZWQgbGFzdCBmaXggdG8gbmV3IGVycm9yIHJlcG9ydGluZyBzdHlsZS4KKworY29tbWl0IGYzM2QzMzYxNWQ2ZDg1ZDAwNzM3MjY0NzNjNDE0NmNiY2RmMTFjZWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjMwOjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHNpZ3NlZ3Ygd2hlbiBlbXB0eSBjb25maWcgbGluZSBpcyBwYXJzZWQuCisKK2NvbW1pdCBiNWRmMWVlYjQ3ZWQzNTU5YjZmNGQ5ZWNjY2RiMjQyMTI2ZTZjOTkyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNDoxMTo1OCAyMDEyICswMTAwCisKKyAgICBGaXhlZCAoaGlnaGx5IHRoZW9yZXRpY2FsKSBzaWdzZWd2IHdoZW4gc3AtPnNlY3VyaXR5RW5naW5lSUQgaXMgTlVMTC4KKworY29tbWl0IDZmZWVkNjI5YTcxODk5YzExMzA5Njk1OWQ4NTQ5ZGMxMjAxZThmOWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDEzOjQzOjM3IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIE5VTEwgYW5kIGxlbiBjaGVjayBqdXN0IGluIGNhc2Ugc29tZW9uZSBwcm92aWRlcyB2YWx1ZSA9IE5VTEwgYW5kIG5vemVybyBsZW4gKC0+IE5VTEwgaXMgdGhlbiBkZXJlZmVyZW5jZWQpLgorCitjb21taXQgMzU1YzVhYjI2NGFmMmE2MDIwYTFkOGE5MjNmODBmMTFiOTQyMjk1ZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTM6MzY6NDEgMjAxMiArMDEwMAorCisgICAgRXh0ZW5kIHRoZSBOVUxMIGNoZWNrLCBpLmUuIHJldHVybiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbW92ZS4KKworY29tbWl0IGRkZDc5NDhhY2FkOTM4Y2Q0Mjk3NDUwNWRkY2E0ZjAzNzIxMTY3MDkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMTE6MTE6MjkgMjAxMiAtMDgwMAorCisgICAgdXBkYXRlIHNwYXJ0YSdzIGNvcHlyaWdodAorCitjb21taXQgNDEyNTYwODZhN2E1MDQxNDUzNDE5Y2ZkNmU1NjJjN2I1NWM1NmIwYQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAxNiAxMDozMjowNCAyMDEyIC0wODAwCisKKyAgICBwdWxsZWQgZnVsbCBjb3B5IG9mIGV4dHJhY3RuZXdzIGZyb20gbWFzdGVyCisKK2NvbW1pdCA2MjVhNzBkYmRmZDk5MDJkYTc5ZWZhMjkzZmU2ZDJhYzhjY2YyYjJlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDE2IDEwOjI0OjE5IDIwMTIgLTA4MDAKKworICAgIHVwZGF0ZSB0byBjaGFuZ2UgdG8gdGhlIG5ld2VyIGxvZyBnZW5lcmF0aW5nL3BhcnNpbmcKKworY29tbWl0IDYyZTMyYjEzMDg5YjI5ZWRjZjI3NmY2MTVkYTY3ZTQ1MDhmZTdiYjUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMDk6Mjk6NDIgMjAxMiAtMDgwMAorCisgICAgY29uZmxpY3RpbmcgbWVyZ2UgZnJvbSBtYXN0ZXIgZm9yIGV4dHJhY3RuZXdzCisKK2NvbW1pdCA3MDA4NGRhNjFkMmJjYmQyY2YxZWQ4MWJkYzNiZjY3OTRjMmFmZmI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDEzIDExOjQ5OjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tU0NIRURVTEVSLU1JQjogSGFuZGxlIDMyLWNoYXJhY3RlciBzY2hlZENvbnRleHROYW1lIHZhbHVlcyBjb3JyZWN0bHkuCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IGIzYzQ5ODI1NDJlMGFiMTUxZmIzODg0NzU0Y2RmYmNiNDcyZGE1MmQuCisKK2NvbW1pdCAwNGJmM2UyODgxNThlZTg4MGVkZjIzN2U0MDA3ZmVlMzdkMjA0NGRkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNTozOTozNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBlbmRsZXNzIGxvb3Agd2hlbiBTU0xfcmVhZCByZXR1cm5zIGVycm9yLgorCitjb21taXQgYzE1MjZmY2NjMDQ3NGMxZGIxOGNhYTlkYmI4MzM4NTNjZGRkZTNjYworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MTM6MjEgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvLgorCitjb21taXQgYTI3YWExOWRmMjgzMTU2YzAzMmM4MWVhZWU1ZTExNTg1OWQzOGMxNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MTE6MzIgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgcmVwbGFjZSAncmMnIHZhcmlhYmxlLCBpdCdzIHZhbHVlIGlzIG5lZWRlZCBvdXRzaWRlIHRoZSBsb29wLgorCitjb21taXQgOTg1ZGZmMmIwODc2ZDk0ODNjNDE0ZmNjZWEzZWY2YmM2M2UxNDU2MQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MDE6MzIgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCBkdXBsaWNhdGUgY29kZS4KKworY29tbWl0IDJmZDc4MTgzMThlN2E1ZGZlOThmNTJjY2Y3NTBjMmE2M2U4MjVkZWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjAwOjIyIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZWQgZHVwbGljYXRlIGNvZGUuCisKK2NvbW1pdCAxNWYyMTEzMGJhMzNkYzlhZmQxNjRlNTJkZmQ3NGM5Y2VjMGU5MjMyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNDo1ODoxNCAyMDEyICswMTAwCisKKyAgICBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgorCitjb21taXQgMmE4YThmMmFiN2NkNzU4MjZjNWQ0MWVjM2NmZDVjZTNlOTYzNGNmMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6Mzk6MjggMjAxMiArMDEwMAorCisgICAgcmVtb3ZlIGRlYWQgY29kZSwgJ2NwJyBpcyBhbHdheXMgIT0gTlVMTCBoZXJlLgorCitjb21taXQgMzhmZDYzNzhjYzMyNzUxODBmNjNiOGQ5YjlhNDA3MmIzZGFiZjhlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6MjU6MDYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvLgorCitjb21taXQgZWJkOTJlMTliMTBjMGEzOGUxN2NkZTQwNzg2NGI0NWMyNmUxNzMyNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6MDc6NDMgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBpZiAodmFsdWUpIGNoZWNrIC0gdmFsdWUgaXMgY2hlY2tlZCBmZXcgbGluZXMgYmVmb3JlLgorCitjb21taXQgYzVjYWNmNWNhZjk3OWQwMThlYTZjYWUxYzAzYjhmZGYwYjExOGRmZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6NDQ6NDMgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkb3VibGUgZnJlZSgpLCAnZGlybmFtZScgaXMgYWxyZWFkeSBmcmVlZCBpbnNpZGUgc2VfYWRkX3BhaXJfdG9fbGlzdCgpIGlmIGl0IGZhaWxzLgorCitjb21taXQgYWNkY2ViNTBlYTY2ZDZiMzIzYzc0ZWUwMjFmYjc3ZTgxMGU0ZTdhZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6NDM6MTkgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBtZW1vcnkgbGVhayB3aGVuIG1hbGxvYyBmYWlscy4KKworY29tbWl0IDE3MDUzZTM0Y2ZlOWE4YWIzOTVmYjUwZjVjM2YxZGFmYzcyNDdhZWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDEzOjMyOjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGRvdWJsZSBmY2xvc2UoKS4KKyAgICBMaW51eCBtYW4gcGFnZSBmb3IgZmNsb3NlKDMpIHNheXM6IEluIGVpdGhlciBjYXNlIGFueSBmdXJ0aGVyIGFjY2VzcyAoaW5jbHVkaW5nIGFub3RoZXIgY2FsbCB0byBmY2xvc2UoKSkgdG8gdGhlIHN0cmVhbSByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvci4KKworY29tbWl0IGE2NjQxZWRiOWNiNzRmYzIyMzZiNDJjZTU1NTRmYzMzMjk5NTY1NTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTU6MjI6MzQgMjAxMiArMDEwMAorCisgICAgTWluR1c6IFNraXAgdGVzdCBUMDY1IGlmIG5vdCBzdGFydGVkIGZyb20gaW5zaWRlIGFuIE1TWVMgc2hlbGwKKworY29tbWl0IGE4ODNlZjE5ODJmMzAxYjE0ODVkMjI3MzAxNjc0OTI3MzMwZjViNjcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDExIDE1OjE0OjUzIDIwMTIgKzAxMDAKKworICAgIE1vdmVkIGRlYnVnIG9wdXRwdXQgYmVmb3JlIHJldHVybi4KKworY29tbWl0IDQ1NzUxOTY3Mjg3ZDk3NjQwZWZkY2RmOGU3N2U4ZDQ5MDkzOWQ4ZWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTQ6MTc6MTggMjAxMiArMDEwMAorCisgICAgQ29udmVydCBzdHJ0b3VsbCgpIHVuaXQgdGVzdCBpbnRvIGEgTmV0LVNOTVAgdW5pdCB0ZXN0CisKK2NvbW1pdCAyYzJmYTQ4MzM2YTRmMWYxNzdjMjk5MWQ2NTE1ZDI5ZjM5NTMzYzQ0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEzOjUwOjQ0IDIwMTIgKzAxMDAKKworICAgIENvbnZlcnQgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKSB1bml0IHRlc3QgaW50byBhIE5ldC1TTk1QIHVuaXQgdGVzdAorCitjb21taXQgMDdjNjY2ZjZjZWEyN2YyYjJhYjliYzA4YWVkMGNiNjEzM2ZlMzc1OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTM6MTc6NDUgMjAxMiArMDEwMAorCisgICAgRml4ZWQgY29tbWl0IDczYTUyM2U0NjgyNzdmNmRmMmU5ODQ4OTEzMTNiOGJlOGJjZTE5MjE6CisgICAgRmlkZXggZGVyZWZlcmVuY2luZyBrZXktPmluZm8gd2hlbiBrZXkgaXMga25vd24gdG8gYmUgTlVMTC4KKworY29tbWl0IDNiNjg2NTY2Mjk2ZGQ4N2JjNDJiN2YxMTY5ZGFhY2RiM2M0NWNjNTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMTggMDY6MjU6NTYgMjAxMCArMDAwMAorCisgICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRob3V0IHdhcm5pbmdzIHdpdGggTVNWQyA2LgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTQ4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGYzYTdkMWIwOTYwOWRhZDY0OWY1OGJiZGI1YjdlMTBkMzliMzk4YzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBPY3QgMTcgMTE6MDQ6MDYgMjAxMCArMDAwMAorCisgICAgRm9sbG93LXVwIGZvciByMTk0NzY6IGZpeGVkIGEgdHlwby4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCAyZGU3M2JkMzY1YTM4MWI5YzM1M2NhNTIzMDc2OWVlZmIxYWM3MWVkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDExOjQyOjQyIDIwMTIgKzAxMDAKKworICAgIGxvY2FsL3Bhc3N0ZXN0OiBSZW1vdmUgYW4gaW5jb3JyZWN0IFBBVEg9IHN0YXRlbWVudAorCitjb21taXQgNjk5NTEzZjEyMzhlMGFkY2UxZjFjZWM5OGUwZDE0NzI5M2ZjNTA0NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE9jdCAxNyAwOToyNTo1MSAyMDEwICswMDAwCisKKyAgICBORVRTTk1QX1JFTU9WRV9DT05TVCgpLXJlbGF0ZWQgY2xlYW51cC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0NzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCA2MzU4ZGVlNzJmYjM0N2UyNjAwYTBhN2JkMjFmMjMyNzBkM2EwMGY2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEwOjU4OjE1IDIwMTIgKzAxMDAKKworICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmM6IEFkZCBhIGNvbW1lbnQKKworY29tbWl0IDUzOTZiZmUwMzJjOGNiYzczYzhmZjVkNGIwODVlYmFkYTlmNTk4NDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6MzA6MTYgMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBzdHJuY3B5KCkvc3RybmNhdCgpIGJ5IHN0cmxjcHkoKS9zdHJsY2F0KCkKKworY29tbWl0IGZlYjNhZjI4ZGNhZTIyMDE1YWU4NjVhMmU1ZGQ4YzQxNmU5OTkxZDgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6MDI6MDggMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBzdHJuY3B5KCkvc3RybmNhdCgpIGJ5IHN0cmxjcHkoKS9zdHJsY2F0KCkKKworY29tbWl0IGI3ZTFhYTI1NWJhZTRhMzQ1M2Y5ZWNhNjQ0YTg3NjYzNDM1MWYxMWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjAgMTk6MzY6MjggMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogbGlic25tcDogY2hhbmdlZCB0aGUgdHlwZSBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IG9mIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSBmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2ggdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuIHBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgorICAgIENIQU5HRVM6IFdpbjMyOiBjaGFuZ2VkIGluX2FkZHJfdCBmcm9tIHVfaW50IHRvIHVfbG9uZyBzdWNoIHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGF0YXR5cGUgb2Ygc29ja2FkZHJfaW46OnNpbl9hZGRyLgorICAgIEFsc28sIGZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgKG1vc3RseSBjaGFyICogPD4gdV9jaGFyICogbWlzbWF0Y2hlcykgYW5kIHJlbW92ZWQgc29tZSBjYXN0cy4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxODM0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCWFnZW50L2FnZW50X3JlZ2lzdHJ5LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYworICAgIAlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMKKyAgICAJYXBwcy9zbm1wdHJhcGQuYworICAgIAlzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jCisgICAgCXNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYworICAgIAlzbm1wbGliL3N5c3RlbS5jCisKK2NvbW1pdCBmNDdhMzc1Mjg0OWRiMDc1ZTZmMjA1M2I4NTk1YjdiNzkyZmI2NDYyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgT2N0IDE1IDEwOjU2OjA5IDIwMTAgKzAwMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQnVpbGRzIG5vdyBjb3JyZWN0bHkgd2l0aCBhIDY0LWJpdCBjb21waWxlci4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDAyYjYwNTZkZjk1ZGE4YjY3MzAzNGUzOWMyYzdjMzg2ZWQwZjM2OWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTE6NDQ6NTMgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBjYXN0aW5nIGF3YXkgY29uc3QKKworY29tbWl0IGExOTg2NTgzMmZjNzdmNGMwNDgxNDRkOTFhNDMxYjFlOTRkMzI5ZjIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDE0IDIzOjEyOjA1IDIwMDkgKzAwMDAKKworICAgIENIQU5HRVM6IGFwcHMsIHNubXBsaWI6IFBBVENIOiAyODM1NTc3OiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbiBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTyBvZiBhcnJheXMgd2l0aCBhIG1lbXNldC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxNzc5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDY3YTNlMmVjY2I5NWY5YzlkMDgwOWVmY2JkZGNkODY2ZWUzMDYyZDUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNiAxNDoyNzoxNSAyMDEwICswMDAwCisKKyAgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE3OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgM2RjZGUyZThhNTk1YTUyN2YwNjE0MmMzYjg1MmRlODQzM2ExY2YyOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKYW4gMjQgMTQ6Mjc6NTUgMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yIE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTgwNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBjMmUxNTI1YTg1YmRhNTI5OWEzYjlmMjQxNjE0ZjdlNjUwOWFlZWJhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDYgMTM6MzU6MTEgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IDI5NWY0NzNjODM1NDYyMjFiMmE3MWQ4MTVjNjFlMzNhNjdmOThhZTM6IHJlZmluZSBORVRTTk1QX1JFTU9WRV9DT05TVCgpIGltcGxlbWVudGF0aW9uLgorCitjb21taXQgY2I0MjNiMGFlOWVkMDA1OWFhMTAwZGM0ZTJmZDkzYWQxYjk3ZmFmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA2IDExOjU3OjUxIDIwMTAgKzAwMDAKKworICAgIEJhY2twb3J0IGNvbW1pdCBlMmZiMDllMDA5M2UyZjY0OGZlMjYzOGRhMmYzYWYxOGZkYjMyYmYwIC0gaW50cm9kdWNlIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkuCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlhZ2VudC9zbm1wX3BlcmwuYworICAgIAlzbm1wbGliL3NubXBfc2VydmljZS5jCisKK2NvbW1pdCBhZmMzOTZhYjE2MThhODU5NWEyNTE5ZmJjMjVmN2E0OThlMTc0NDExCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDA4OjQ5OjM0IDIwMTIgKzAxMDAKKworICAgIFVuYnJlYWsgbmV0c25tcF9ta3RlbXAoKSBhbmQgbWFrZV90ZW1wKCkuCisgICAgCisgICAgVGhlc2Ugd2VyZSBicm9rZW4gYnkgY29tbWl0IGJiOGZjYmI4NzQ5OTgwMDBmOTQ1ZjA1OGQxYWE2ZmUxNGU5MjU4OTkuCisgICAgQWxzbyByZXBsYWNlIGEgc3RybmNweSgpIGNhbGwgYnkgYSBjYWxsIHRvIHN0cmxjcHkoKSBhbmQgcmVwbGFjZSB0aGUKKyAgICBtYWtlX3RlbXBmaWxlKCkgaW1wbGVtZW50YXRpb24gYnkgYSBjYWxsIHRvIG5ldHNubXBfbWt0ZW1wKCkuCisKK2NvbW1pdCAyMTAxODVjMTVkMGQ2NWYwZWE5OGI1ZTNjMmUwNzc2ZjYyMjJkMTcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDA4OjI3OjQzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGNyYXNoIGR1cmluZyBzdGFydHVwIG9mIHNubXBkIGludHJvZHVjZWQgYnkgY29tbWl0IDg4NTA2MTY4N2Q5Y2FhMzg0NzA5Nzk2NjdkN2Q4YWQ2NTYzY2VkYWQuCisgICAgCisgICAgQWxzbywgbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgY29weSBvZiB0aGUgY2xlYW51cCBjb2RlIGluIGZ1bmN0aW9uCisgICAgbWtkaXJoaWVyKCkuCisKK2NvbW1pdCA4YmI0ZTg2YWJjZjk4ZmYyODc0OGFmMGFmODljOThlNjRkNWNkOTYxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSmFuIDExIDA3OjQ3OjEyIDIwMTIgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIG9sZG1hc2sgdmFyaWFibGUuCisKK2NvbW1pdCA2NjgwMTQ3YjEzOGVjMTE0ZjgxYzVkMTI4YWM5MzUwYzg0NTBkMDgxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEwIDE4OjQ0OjMxIDIwMTIgKzAwMDAKKworICAgIE1ha2UgdGVzdCBUMDE1aW50NjRfY2xpYiBwYXNzIG9uIDY0LWJpdCBzeXN0ZW1zCisKK2NvbW1pdCAzYWFkMTVhZTU2MGFjODU3ZTczYzkwNzY0ZTkwM2U3Y2EwMmIzMjk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTo0MDo1OSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgZm9yIGxhcmdlIE9JRCBuYW1lcworCitjb21taXQgZmJhMTg4ZWU4MjAxMGIyZjJkOGNhMmU0MjZiYTY1NDQ5OWFiM2QwYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MzE6MzMgMjAxMiArMDEwMAorCisgICAgZml4ZWQgYnVmZmVyIG92ZXJmbG93IGluIF9fY29uY2F0X29pZF9zdHIKKworY29tbWl0IDIxZDI1ZDg2YjhlNDkwNGQ3OThkYzhjOTZkYWRlOWU1MDQ4NDU3YTgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjI2OjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHBhcnNpbmcgcG9ydCBudW1iZXJzLgorCitjb21taXQgZDM2OTMxODQxYjJmYzJjZWJjNjM2NGIyOTQ5MTI5YTBhZDQyYWQxZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MDU6NTEgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSBidWZmZXIgb3ZlcmZsb3cgd2hlbiBsYXJnZSBTdW1GaWxlIGlzIHVzZWQuCisKK2NvbW1pdCAwZWZkZDAyMmRhMDlhZjFiNWUxNjE3MWZhN2EyYjUyM2M1ZDZlYzU5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTowMTo1MyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiB0b28gYmlnIHRlbXAgZmlsZSBwYXR0ZXJuIGlzIHVzZWQuCisKK2NvbW1pdCA1NjBiYzZjMDliNzUxNTU2ZWZkNmI0YzQ0OTU3NTFiMTA5YTkzZjkyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo1OToyNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3csIGp1c3QgdG8gYmUgc3VyZS4KKworY29tbWl0IDgyOTFkN2M1YjkyYTMxZGQ0ZjU4MmI0OTdkNGIyYTA4NTMzNjdhNTYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjU1OjE2IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdy4KKworY29tbWl0IDg4ZTFmMzRkZTczMDA1NzVmYTZkYWI4NTdlY2RkYjI0MmE4N2RlODAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQ4OjU1IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBsb25nIGludGVyZmFjZSBuYW1lcyBhcmUgdXNlZC4KKworY29tbWl0IGJlMTM3NWE5OTI2ZWJlMGNkNWI3OGE0MDQ1YzNiZDExYzgzNjY0YjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQ2OjQ5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGEgc2Vuc29yIG5hbWUgaXMgdG9vIGxvbmcuCisKK2NvbW1pdCAxY2IyNDYyNTM3MjA2MmIxNGM3MWQ3ZGQ1MWUyMGZlZjc3M2UyNzQzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo0MTowMCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBhIENQVSBoYXMgdG9vIGxvbmcgbmFtZS4KKworY29tbWl0IDg0YzgwN2VlMDMyNTFlNTQ4NTZlODNkNjJkMDZlYTA4YjhkZjUyN2EKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjM2OjUwIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBsb25nIGludGVyZmFjZSBuYW1lcyBhcmUgdXNlZC4KKworY29tbWl0IGMzMTBlMzkwYjVkZDA1ZjI0YmU3ZWIxOTA0Yzc0ZTQxMjU5YzkzZGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjI0OjU0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBiaWcgdGVtcCBmaWxlIHBhdHRlcm4gaXMgdXNlZC4KKworY29tbWl0IDQ2MDBkMTE0MzRlODNiODY1M2NmOWY4MTNhM2Q4YjYzMDQ1NWI0MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjE3OjA4IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHBsYXVzaWJsZSBzdHJpbmcgb3ZlcmZsb3cgYmVmb3JlIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKK2NvbW1pdCA4ODUwNjE2ODdkOWNhYTM4NDcwOTc5NjY3ZDdkOGFkNjU2M2NlZGFkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDoxMTowMiAyMDEyICswMTAwCisKKyAgICBHZXQgcmlkIG9mIChpbnNlY3VyZSkgU05NUF9NQVhQQVRIIGluIG1rZGlyaGllcigpCisKK2NvbW1pdCA4MDE2ODkwYTQ0NWY2YTdlMmE4NzNhMDQ4NzNkNGUyN2I2ZWU2NGUzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzo0ODozNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBpbnRlZ2VyIHNpemUgb24gNjQgYml0IHBsYXRmb3JtLgorCitjb21taXQgYmI4ZmNiYjg3NDk5ODAwMGY5NDVmMDU4ZDFhYTZmZTE0ZTkyNTg5OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MzE6MzYgMjAxMiArMDEwMAorCisgICAgU2VjdXJlIG1rc3RlbXAoKSB3aXRoIHVtYXNrKCkgLSBvbiBzb21lIGltcGxlbWVudGF0aW9ucyBpdCBkb2VzIG5vdCBzZXQgMDYwMCBwZXJtaXNzaW9ucyBhdXRvbWF0aWNhbGx5LgorCitjb21taXQgMjAyNTIzY2E3MDRiZDcyMmRjMWFjMGUxZTZiMGU0YjRlNTQyNDQ5NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MTE6NTcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyAnYycgYmVmb3JlIE5VTEwgY2hlY2suCisKK2NvbW1pdCA3M2E1MjNlNDY4Mjc3ZjZkZjJlOTg0ODkxMzEzYjhiZThiY2UxOTIxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzowODoyNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIGtleS0+aW5mbyB3aGVuIGtleSBpcyBrbm93biB0byBiZSBOVUxMLgorCitjb21taXQgMmY0ZTZhY2Q3MTQxODNmMDE1Yjc2MzY1N2Y4ZjA4NDU5MzM1N2UyNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMDozODoxNiAyMDEyICswMTAwCisKKyAgICAuZ2l0aWdub3JlOiBJZ25vcmUgcGVybC8qLnltbCBmaWxlcworCitjb21taXQgYzM2NWQ4MGMxNmMyZDE3YjE2MDAxMWU4YzFmOWNiOTU4OTU0ZTlkYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAwODozNDoxNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IERvIG5vdCBpbnZva2Ugc2h1dGRvd25fcGVybCgpIGZyb20gaW5zaWRlIHRoZSBTSUdURVJNIGhhbmRsZXIgc2luY2UgdGhhdCBmYWlscyBpZiBTSUdURVJNIGlzIHJlY2VpdmVkIHdoaWxlIGEgUGVybCBoYW5kbGVyIGlzIGFjdGl2ZS4gQmFzZWQgb24gYSBwYXRjaCBwb3N0ZWQgYnkgSm9lbCBBdm5pIDxqYXZuaUBhcnViYW5ldHdvcmtzLmNvbT4KKworY29tbWl0IGQwNTlmYjg3OGIxNDM2NTk5OTUzY2VhNWEwNzc0OTlkZGNkY2JjYjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNzowMzo1NSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NDA3NTI6IElGLU1JQjogUmVwb3J0IGludGVyZmFjZSBzcGVlZCBjb3JyZWN0bHkgZm9yIEV0aGVybmV0IGludGVyZmFjZXMgaWYgb3RoZXIgdGhhbiAxMCBNYnBzLCAxMDAgTWJwcywgMSBHYnBzLCAyLjUgR2JwcyBvciAxMCBHYnBzLiBBZGQgc3VwcG9ydCBmb3IgTklDcyBmYXN0ZXIgdGhhbiA2NSBHYnBzLgorCitjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEphbiA5IDEzOjI2OjE3IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcworCitjb21taXQgZTMyNWVjYmZjZTc3ZjAwYWM1Y2Y2ZmJkOTU3Zjk1NDk1ZjYxYzU5YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEphbiA5IDEzOjI1OjEwIDIwMTIgKzAxMDAKKworICAgIFN1cHByZXNzIHVuaW50ZXJlc3RpbmcgRG94eWdlbiB3YXJuaW5ncworCitjb21taXQgYmU5MTYxZDNhNTg5OGU4NjM3NjdmOTI2NjEzNDg2MTI2YzJjYmY2NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDEyOjM1OjM5IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBtYW5pcHVsYXRpbmcgNjQtYml0IG51bWJlcnMuCisKK2NvbW1pdCA4NmU0YzJiZTA4NTJhMGExM2IwNjAzMDc1NzIwYjMyNjRlYzcwZGRlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTI6Mjk6MTEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBpdCBleHBsaWNpdCB0aGF0IE1BWF9TVUJJRCBpcyBhbiB1bnNpZ25lZCBjb25zdGFudAorCitjb21taXQgMzdlMjcyZDhmN2I3MTgwYmExNDBmYTM4NmE1ZmYwNTg5NjhhMDhhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE4OjIxOjQ4IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBJRi1NSUI6OmlmVHlwZTogUmVwb3J0IHR5cGUgImluZmluaWJhbmQgKDE5OSkiIGZvciBJbmZpbmlCYW5kIGludGVyZmFjZXMgaW5zdGVhZCBvZiB0eXBlICJvdGhlciAoMSkiLgorCitjb21taXQgMjY5OTMyZmEzMmM3Y2Q0Nzk1NzQ4OTY5OGUwOWJlZTMxZjYzYjdhZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE0OjM0OjQyIDIwMTIgKzAxMDAKKworICAgIEZpeCBhbiBNU1ZDIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDBkMWMyMWY5OTkxZDEzMDlkMDU3ZTNlNDA1NmQ1NDdkZjdkNDBlY2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNjowNjozMSAyMDEyICswMTAwCisKKyAgICBNYWtlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbml0aW9uIG9mIHN0cmxjYXQoKSBjb25zaXN0ZW50LgorCitjb21taXQgMGMzZDRkYmIwYTljZjViMzU5ZjcwYjJmMTk5MTU0OTU1NTRmODQwZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE1OjIzOjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBzbm1wZDogUmVtb3ZlIGRsbW9kCisKK2NvbW1pdCA4OTNlY2M5N2I1ODc2NjEwNDViZWNiZTA5YTMyMGMxYmNiYzcxYzdjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTQ6MzY6NTkgMjAxMiArMDEwMAorCisgICAgQWRkIHN0cmxjYXQoKSB0byB0aGUgTVNWQyBidWlsZCBpbmZyYXN0cnVjdHVyZS4KKworY29tbWl0IDNkMTI2NDIyZTYyNTcwMmI5ZDNmYTA2NzZhOTdlYzVjYjIwZDlkMTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNTowMTowNiAyMDEyICswMTAwCisKKyAgICBNYWtlIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGNvbnNpc3RlbnQgd2l0aCBpdHMgLmluIGZpbGUKKworY29tbWl0IGFmNTNiNzZjMmZmYTc1MWUzOTU4ZDBmYzVkODI3OWY3OGMyYzFjMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNDo0Mzo1NSAyMDEyICswMTAwCisKKyAgICBTa2lwIFQwNjZwYXNzX3NpbXBsZSBhbmQgVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZSBvbiBNaW5HVworCitjb21taXQgMzVhOTJlNjkzZDEzM2E1YjExZTllOWI1OTlkYmY0N2VkZWY0OTMzYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDA4OjE2OjM2IDIwMTIgKzAxMDAKKworICAgIFJlbW92ZSBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMgYWdhaW4sIHdoaWNoIHdhcyBhZGRlZCBhY2NpZGVudGFsbHkgd2hpbGUgcmVzb2x2aW5nIG1lcmdlIGNvbmZsaWN0cyAoY29tbWl0IDFkNzhmN2Q1YjU4YWVkMmI1MmM0ZDM4NmE3YmE4MGE0NDcxMWJhY2EpCisKK2NvbW1pdCBhOWIwNzNlYTNiNmNlZGY3MTNlMzA1ZTdiMTVmMjhhZTU3YmZkZjFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTc6NDc6MTEgMjAxMiArMDAwMAorCisgICAgRml4IDY0LWJpdCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgN2U4OTBkYWQ5NWY1NjYwNjllZTI4MDIxNWE0ZmVhM2YwZTJlMzk4MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDE2OjM4OjUwIDIwMTIgKzAxMDAKKworICAgIEF2b2lkIGEgU0lHU0VHViBpZiBjcCA9PSBOVUxMLiBUaGlzIGlzIGEgZm9sbG93LXVwIGZvciBjb21taXQgMDg5YmNiMzYwYWEyNjc5MGFkMmE4Y2VkZGY1ODNiN2JhNWRkZmQ0OC4KKworY29tbWl0IDFmNjIwMGNmZTFiMGIyN2ViYjA5M2ExNjA2YjU5MmY5ZTk2ODRiZTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNTo1MzozNCAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHN0cm5jcHkoKSBjYWxscyBpbnRyb2R1Y2VkIGluIHY1LjYKKworY29tbWl0IGMzMTI2YjE0MzkyMWZhYmVhYzQ0MjE2NmVjYTViNWI3NDJmZDQyYzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNTowMjozOSAyMDEyICswMTAwCisKKyAgICBSZXBsYWNlIG1vc3Qgc3RybmNweSgpIGNhbGxzIGludHJvZHVjZWQgaW4gdjUuNQorCitjb21taXQgYjI0ZWU3YzkwOTY1N2RiNDNiZDhjNWQ4YzAxMDU1Y2EwODgzYzljZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA4OjQwOjM5IDIwMTIgKzAxMDAKKworICAgIEVsaW1pbmF0ZSBtb3N0IHN0cm5jcHkoKSBhbmQgc3RybmNhdCgpIGNhbGxzCisgICAgCisgICAgVXNpbmcgc3RybmNweSgpIGFuZCBzdHJuY2F0KCkgaXMgZXJyb3IgcHJvbmUgLS0gc2VlIGFsc28KKyAgICBodHRwOi8vd3d3LmdyYXRpc29mdC51cy90b2RkL3BhcGVycy9zdHJsY3B5Lmh0bWwuIEhlbmNlIHJlcGxhY2UKKyAgICBhbGwgaW52b2NhdGlvbnMgb2Ygc3RybmNweSgpIGFuZCBzdHJuY2F0KCkuIFJlcGxhY2UKKyAgICBzdHJuY3B5KGRzdCwgc3JjLCBuKSBjYWxscyBieToKKyAgICAqIHN0cmxjcHkoZHN0LCBzcmMsIG4pIGlmIHRoZSBnb2FsIHdhcyB0byBhdm9pZCBvdXRwdXQgYnVmZmVyIG92ZXJmbG93LgorICAgICogc3ByaW50Zihkc3QsICIlLipzIiwgbiwgc3JjKSB0byBjb3B5IGEgcHJlZml4IG9mIHNyYyB0byBkc3Qgb3IgaWYgc3JjIGlzCisgICAgICAgIG5vdCAnXDAnLXRlcm1pbmF0ZWQuCisgICAgKiBtZW1jcHkoZHN0LCBzcmMsIG4pIGlmIHN0cmxlbihzcmMpID49IG4gYW5kIG4gPCBzaXplIG9mIGRzdC4KKyAgICAqIHN0cmNweShkc3QsIHNyYykgaWYgbiA+IHN0cmxlbihzcmMpIGFuZCBuIDwgc2l6ZSBvZiBkc3QuCisKK2NvbW1pdCA2ZDk1YmM0MTQ5NDcyOTMxMDA1NDc1YzMwYTU0MWZlZDU1MzRkYTM5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTE6MTk6MTYgMjAxMiArMDEwMAorCisgICAgRml4IHdhcm5pbmdzIHRyaWdnZXJlZCBkdXJpbmcgY29tcGlsYXRpb24gb2YgdGhlIFBlcmwgeHMgc291cmNlIGZpbGVzCisKK2NvbW1pdCBiYWQwNjAwZjZlYzk0NGVmODQ1NWUzMjdjZTc4NGI5YjA3ZDI0N2M5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTA6MDA6MTMgMjAxMiArMDEwMAorCisgICAgQWRkIGNvbmZpZ3VyZSB0ZXN0IGZvciBzb2NrYWRkcl91bi5zdW5fcGF0aCBzdWNoIHRoYXQgdGhlIGNvbTJzZWMgdGVzdCBpcyBydW4KKworY29tbWl0IDkyYTMyYWM0ODY2YTVlZGM3ZjM0N2QzNzk0MmJmMDI4ZGUwMjc2MmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxMDowMDoyOSAyMDEyICswMTAwCisKKyAgICBHZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgODNlNGMwZTMwNGY2MTdjY2FjNjYxMGVkZDc0ZDE3MDY3OTdiYmY1MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE1OjM3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCBhIHRlc3QgZm9yIHNlX3N0b3JlX2xpc3QoKQorCitjb21taXQgNGZhZTU4NTIxMDNlYzM4OTNhZDQ4OGJjMGQ5MDVjYTY5MTQ1OTVlZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE3OjE1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNpbXBsaWZ5IHRoZSBzZV9zdG9yZV9lbnVtX2xpc3QoKSBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgYjMyMjJiYjI3NWYyZjIzNDZlMGZkMDQ3OGFmYTJlZmI2MDA3NzNlNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE2OjQ1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERlY2xhcmUgInR5cGUiIGFyZ3VtZW50IG9mIHNlX3N0b3JlX2xpc3QoKSAvIHNlX3N0b3JlX3NsaXN0KCkgLyBzZV9zdG9yZV9lbnVtX2xpc3QoKSBjb25zdAorCitjb21taXQgMDIyZjg0MGZiZmNiMGUyNmIwOGYwZTU1NzI4MjMxZjYxMTQ5NTgwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE5OjU1OjU2IDIwMTIgKzAwMDAKKworICAgIEF2b2lkIHRoYXQgVmFsZ3JpbmQgY29tcGxhaW5zIGFib3V0IHNlbmRpbmcgVURQIGRhdGEKKworY29tbWl0IDY3MmE4MDljMjI4ZTk1NTBiOTliODkxMGJlNzVkMGIxNjE5ODU0MDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNzozMzowOSAyMDEyICswMDAwCisKKyAgICBGaXggYSA2NC1iaXQgY29tcGlsZXIgd2FybmluZworCitjb21taXQgMjRmZjI2MGFkODljZTJhYTM2MWE1NWM3YzcyZTkxNjAzMWRlZmUzNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE3OjExOjI0IDIwMTIgKzAxMDAKKworICAgIENoYW5nZSB0aGUgdHlwZSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHNubXBfc2V0X3Zhcl92YWx1ZSgpIGFuZCBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoKSBmcm9tIHVfY2hhciogdG8gdm9pZCosIGxpa2Ugb24gbW9yZSByZWNlbnQgYnJhbmNoZXMKKworY29tbWl0IGM2Y2E3MzdmYjQ2ZjkwYTRiZGE1ZDQzNzM0YWFjMzRlODM3YTA1ZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMTMgMTk6MDc6MzcgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGY1MDRjZTJkNzRhNGJjODhmNjhjYzk1MTVmYTcwNTMzNzNjYjE1YjUuCisgICAgKEZpeGVkIG1vc3QgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgcGVybCBzdWJkaXJlY3RvcnkuIE5vdGU6IHRoZXNlIGNoYW5nZXMgbWF5IGNvbnRhaW4gc29tZSByZWFsIGJ1ZyBmaXhlcy4pCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlwZXJsL0FTTi9BU04ueHMKKyAgICAJcGVybC9PSUQvT0lELnhzCisgICAgCXBlcmwvU05NUC9TTk1QLnhzCisgICAgCXBlcmwvYWdlbnQvYWdlbnQueHMKKworY29tbWl0IGQyMTJkYzk4NGVjMzRlNGQyMzA2MjVlNDZlNThiMGM2MjhhNTBkZjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNjo0Njo0OSAyMDEyICswMTAwCisKKyAgICBTTk1QLnhzIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMKKworY29tbWl0IGJhY2VlYmIxMGQ4Y2FmNWRiNjNjYzM2OTM1ZmVkNjVlZTkzMTAyOWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNjoyMjo0NCAyMDEyICswMTAwCisKKyAgICBBZGQgZGVjbGFyYXRpb24gZm9yIHNodXRkb3duX3NubXBOb3RpZnlUYWJsZSgpCisKK2NvbW1pdCBmN2Y5NjZhYmQ2ZDI4NDliMTMzMTI1MmFmZTVjNDczZTVjNDBiMzJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTQ6MjQ6MzMgMjAxMiArMDEwMAorCisgICAgRml4IGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoZXMuCisKK2NvbW1pdCAzMDNjMDE1YmNmZTlhZjBiMTU0ZTk4ODFjN2I0ZjQ0OWUwOGYzMGJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDYgMjI6MDY6MjMgMjAwOSArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGQzZWIyYjVjZWQyMmE4NDgwMDUzY2U0M2FjZjk3Mzk3MjkwNTU0MDQKKyAgICAoU3ByaW5rbGUgc29tZSBjb25zdC1uZXNzIHdoZXJlIHJlbGV2YW50IC8gZml4IGZvcm1hdCBzdHJpbmcgbWlzbWF0Y2hlcywKKyAgICBOaWVscyBCYWdnZXNlbiwgTWF5IDIwMDkpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMKKyAgICAJYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jCisgICAgCWFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jCisgICAgCWluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorICAgIAlpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorCitjb21taXQgZDk1YjQwNDA2OTE2YmRhNWI0OGI1YTYxMzFiZWMyN2I4NjZiMGE3OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSA2IDIxOjU5OjIwIDIwMDkgKzAwMDAKKworICAgIEJhY2twb3J0IGEyYTczMTZjMzEwZjBmY2MzNzI4NjczZmEwNDcwNTFjMjNiNzE5NjAKKyAgICAoVHJpdmlhbCB3YXJuaW5nIGZpeGVzLCBOaWVscyBCYWdnZXNlbiwgTWF5IDIwMDkpLgorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYworICAgIAlhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisgICAgCWFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYworICAgIAlhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYworICAgIAlhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jCisgICAgCWFnZW50L3NubXBkLmMKKyAgICAJc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMKKworY29tbWl0IGQ4NmM0N2YwMDNmZGMxOTJiY2U3YjQ2YWM0ZjA2YjA5ZTM4N2MxMmIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTM6Mjk6MDggMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvCisKK2NvbW1pdCBiZWU0ZDc5Y2Y0ZWI3ZTBhNDUzOTdmNTliNTI5OGRhNjMzYThlMWJhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEzOjE0OjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHJlYWRpbmcgcGFzdCBlbmQgb2YgYnVmZmVyLgorCitjb21taXQgM2RjMGUwMGEyZmQ4ZTM0ZmUxYWUzM2VjYWJmMzZlMTQ2NDYwYTMxZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMjo0MDowNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBsYXJnZSAndG9rZW4nIGlzIHVzZWQuCisKK2NvbW1pdCBiM2M0OTgyNTQyZTBhYjE1MWZiMzg4NDc1NGNkZmJjYjQ3MmRhNTJkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEyOjI4OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIG9mZi1ieS1vbmUgbWVtc2V0LgorCitjb21taXQgMGY1MzY5NTA0NGRkM2YwYzM1MDc3NTNlM2Y4YzI5ZDk3ZTk2ODcyZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAzIDIxOjM4OjI2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkLCBwZXJsOiBFbGltaW5hdGUgZGVhZCB2YXJpYWJsZXMKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCWFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYworICAgIAlhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworICAgIAlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworICAgIAlhcHBzL3NubXB0bHMuYworICAgIAlhcHBzL3NubXB0cmFwZF9sb2cuYworICAgIAlzbm1wbGliL2Rpcl91dGlscy5jCisgICAgCXNubXBsaWIvc25tcF9jbGllbnQuYworICAgIAlzbm1wbGliL3NubXBfb3BlbnNzbC5jCisgICAgCXNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMKKworY29tbWl0IDAxNTM4MDVjOTliOTE5NzM2NTkzNWM1ZDExYWU5YzNkNGJmYWEwZjMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAwOTo0ODo0MSAyMDEyICswMTAwCisKKyAgICBGaXggYSBzZXQtYnV0LW5vdC11c2VkIHdhcm5pbmcKKworY29tbWl0IDNmODg4NWZiZWU5NDA3NzQ4ZmMyZjA1NzM3MjhhMTFiYTJiYzAyM2EKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXByIDI4IDA1OjUxOjEzIDIwMDkgKzAwMDAKKworICAgIFJldHVybiBhIHZhbHVlIGZyb20gc3ByaW50X3JlYWxsb2NfdmFsdWUgZXZlbiBpZiBubyBzdWJ0cmVlIGlzIGxvY2F0ZWQuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTc1NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBiMWVhYWYzMDIzNjlmZDQ1NTJlOGZlZTdiNmE4MDUwOTFlYzBhOWI0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDExOjM4OjUxIDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIGZpbmRfc2VjX21vZCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IGFlZTRlODk1ZmUzYmQ1ZjRhNjFlMzQyNzViZmNhMDM2OGI1NjA1NTUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6MzE6MjIgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2Ygc25tcF9zZXNzX3RyYW5zcG9ydCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IDVkMWQwYTc0NGFiMzBjOGU2NDVjM2I4NTA2Y2JiZDJjY2ViM2QyNzUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6MDQ6NDggMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2YgbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQoKSByZXR1cm4gdmFsdWUuCisKK2NvbW1pdCAyOTllYTlhODljM2YxNzU4YTc3NDhiYjliMzQxMWY2MmYyYzcwZjg4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEwOjU0OjU1IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIGZvcGVuKCkgcmV0dXJuIHZhbHVlLCBqdXN0IGluIGNhc2Ugb2Ygc29tZSByYWNlLgorCitjb21taXQgOTBmMWFlNjc1NzkxNzQ4MTYzNmVlZjc3MTAwY2FlZWI1M2VkZmUwMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjA2OjU2IDIwMTIgKzAxMDAKKworICAgIEFkZCBzdHJsY2F0LmMuIFNvdXJjZTogaHR0cDovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvY3Zzd2ViLmNnaS9zcmMvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYy4KKworY29tbWl0IDA4OWJjYjM2MGFhMjY3OTBhZDJhOGNlZGRmNTgzYjdiYTVkZGZkNDgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTA6NTA6NTYgMjAxMiArMDEwMAorCisgICAgQWRkZWQgc3RycmNociByZXR1cm4gdmFsdWUgY2hlY2ssIGp1c3QgdG8gYmUgc3VyZS4KKworY29tbWl0IDE5OWEwNTExZjZlYjBlZjNmZjFkOWY5MjJiNzkwYWI2N2RmZGUwMWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxMDozMToyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogc211eDogc2ltcGxpZnkgc211eF9saXN0X2RldGFjaCgpCisKK2NvbW1pdCBkODgzNTczYWE3M2UwZjVmYzE4OGFjZWRlZTY0NTFmOTVkYWU5MDBjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTA6MjM6MDYgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxLgorCitjb21taXQgN2I3YTNlYjI1MDA1MjdlYWExNjk5Mjg3YTZjYTZmY2M0Y2MyZTA4YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA5OjQwOjAyIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGJ1aWxkIGVycm9yIGNhdXNlZCBieSBjb21taXQgYTgwOWZlNTA3NWM5ZjM3NDcxNWY3ZDFhNjgyOTQ5YTA3MzAxNzJjMS4KKworY29tbWl0IDJiNmMxMTlmZWQ0ODQ4ZGE2NjYzYzExZjBjMmNiZGMyOTkyMWI1YzYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6NTE6MTAgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG5ldHNubXBfZHNfZ2V0X2ludCgpIGVycm9ycy4KKworY29tbWl0IDZjZTUzNjBjYWE0YzlkZTUxYWRlNTc4NzllODNmOTZiZDA0YjRjNWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6NDI6MjMgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG1pc3Npbmcgdmlldy4KKworY29tbWl0IGIzYmM1NGJlZDMxNjkwYTg1ZGYyYWNmYmYzMjk2ZGE5M2E5ZTg5YjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6MjM6MTcgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgc29ja2V0KCkgcmVzdWx0LgorICAgIEFsc28gY2xvc2UgdGhlIHNvY2tldCBvbiBlcnJvci4KKworY29tbWl0IDkyMDc1ZjUxY2Q0NWEzOGNhMzg3NjBiM2ZmZTgyZTE2NTU5ZTljMmUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6MTg6MjYgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgb3BlbigpIHJlc3VsdC4KKworY29tbWl0IDY2NjVkNWZlMmZjNTY5ZDZmYTg1NGQxZDc4ZTM0N2JiYWM2OWUwNzAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MjI6MjIgMjAxMiArMDEwMAorCisgICAgRml4ZWQgbWlzc2luZyBicmVhay4KKworY29tbWl0IGE2NjQ4YzU0NTNlMWVmOGRhYzU3YTM4ZWZjYzAwY2NlNTNiZjllNGYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MjA6MjcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgbWlzc2luZyBicmVhay4KKworY29tbWl0IGQ2OGRjYWUwZjE4ZDU1NDU3MWFlZjMyMTk0NGE1MjkwNTQ4ZGRlODYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MTY6MTEgMjAxMiArMDEwMAorCisgICAgQWRkZWQgJ2ZhbGx0aHJvdWdoJyBjb21tZW50IGZvciBDb3Zlcml0eS4KKworY29tbWl0IGZiNmY4MGMwZmUzYmEzNmU1NmY1YjkxMWE0N2UzZjZmMzJiYTI2NmUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MTQ6MDcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZXhpdCBjb2RlIG9mIGVuY29kZV9rZXljaGFuZ2Ugd2l0aCB3cm9uZyBhcmd1bWVudHMuCisgICAgQWxzbyBhZGRlZCBhIGNvbW1lbnQgZm9yIENvdmVyaXR5LgorCitjb21taXQgMzEzMGUyNGZkYzIzMjQ2NGRkN2JiMjE2ZjQ2Y2FmYTJlMGU3NzVhNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDowOTo1NCAyMDEyICswMTAwCisKKyAgICBBZGRlZCBtaXNzaW5nIGJyZWFrCisKK2NvbW1pdCAxOGMxMjZhOTU2NWNiNGQ2OWQ3NTEzYjk0NGEyMTA1NTg4MDQ1ZDM1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjA3OjI5IDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCA2ZDMxYzgyMDcwYTJjNjhmZTNjNTE5ZTlkNTZmYTI3Nzk1NTRkMDFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjAxOjUzIDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCBkYzZmMGUyZTU0OWI0Y2QwNjFlYmMxOTAwODRiMWZjNzdhNTVmNDBmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjMyOjU5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBkYWIzMjg2N2VkMGI5OTMwMWVmZDdiOGQ4NTJhZDEyODhhMTg0YmUwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjMwOjMzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIFFVSVRGVU4gdXNhZ2UuCisKK2NvbW1pdCBiMWEyYmNmNjQ2MTVlYjY2YmMyNGQ1YmU0OTUwZTQ1MDEyOTYyMDQ1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjE4OjAzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBiMmIxYzg1MWI5NGZlZDM3YzM4NmVhYTFiZmVhZDVjNzc2OTZlM2VmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjE0OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjU4OjQ2IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIGZvciBmYWlsZWQgcmVnaXN0ZXJfbWliLgorCitjb21taXQgNTk0OWYwNTVjMTZhZTY1MDYxNWFhZTdhMWZlZTNmMmQ3YjE2ZDk0MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMDoyOTo1OSAyMDEyICswMTAwCisKKyAgICBNYWtlIE1JQiBmaWxlIHBhcnNpbmcgYW5kIGRldGVjdGlvbiBtb3JlIHN0cmljdCAtIExBQkVMIGlzIHJlcXVpcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgTUlCIGZpbGVzLgorCitjb21taXQgZTRiNjczNjgzYzY4YmE4YjNhYmMwNDBiOTEyNWVjMzA0NjQzY2M3YworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEphbiAxIDIzOjAwOjI0IDIwMTIgKzAxMDAKKworICAgIEFzc3VtZSB0aGF0IGxpYmRsIG1pZ2h0IGJlIGluIEFHRU5UTElCUyBvciBTTk1QTElCUyBzbyBwcmVhZGQgdGhlbS4KKworY29tbWl0IGIxM2MxZTU3YmVkYmE3OWI4MDYxMDNjNzRmMTkyMWQ1M2E3MDZiMzgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKYW4gMSAyMjo1NTowNiAyMDEyICswMTAwCisKKyAgICBEbyBub3QgcmVxdWlyZSB1Y2Qtc25tcC9kbG1vZCB1bmxlc3MgaXQgd2lsbCB3b3JrLgorCitjb21taXQgMjdkY2VhMGQ1ZjgwMWRmNDk0YWIyY2I1YzVjMGViZTU0ZWIwZGNkMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxNDo0ODoyOSAyMDExICswMTAwCisKKyAgICBBZGp1c3QgcGF0aHMgZm9yIHRlc3QgcmVzdHJ1Y3R1cmUKKworY29tbWl0IDE0YjYwZTg1YTFiNTcwMGU5M2QxMjZlMmYyOTFkNWM0ODVmMzRlMzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMzEgMTQ6MTQ6MjkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRsbW9kIG1vZHVsZSBmYWlsIHJhdGhlciB0aGFuIGdlbmVyYXRlIGEgZHVtbXkgbW9kdWxlIGlmIHRoZSBkbG9wZW4gZnVuY3Rpb24gaXNuJ3QgYXZhaWxhYmxlLgorCitjb21taXQgOThhOTc1MzhmYzFlOWZmNDZiNjBkNWQ5NjkzNDc0NDQ1NzgzNzhjMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxMzozNToxMyAyMDExICswMTAwCisKKyAgICBBZGp1c3QgdGhlIHBhdGhzIHRvIHN1cHBvcnQgdGVzdGluZyBldmVuIGlmIGJ1aWxkZGlyICE9IHNyY2RpcgorCitjb21taXQgODhmMGFmM2NmYjkxNmFlNTg2M2NjMjk4NjA3MWQ0MzVmMjBjMzA2NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxMTozNzo1MiAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZXMgJ3AnIGFuZCAnbGVuJy4KKworY29tbWl0IDA4MTVhNzUzNmM3NmY3ZTQ4NDI2Mzg2ODNmNjc0ODk0YTFhOGNlMTQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDI5IDE0OjQyOjU0IDIwMTEgKzAwMDAKKworICAgIFJlcG9ydCBwcm9ibGVtcyB3aXRoIFNldFVuZG8gcHJvY2Vzc2luZworICAgIE1pc3NlZCB3aGVuIGFwcGx5aW5nIHBhdGNoICMzNDQ1NDQwCisKK2NvbW1pdCBlYjJhYjIzNzQyY2E4NmMwYjg5Y2NmZTkxZWI2ZWEzNzRiZjNhY2MxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IERlYyAyOSAxNDozNzozMSAyMDExICswMDAwCisKKyAgICBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIGVycm9yIChFUElQRSkgb24gY2xvc3VyZS4KKyAgICBNaXNzZWQgd2hlbiBhcHBseWluZyBwYXRjaCAjMzQ0NzQ0NAorCitjb21taXQgYWFjMTBiYzRmMDUzYzAxNGYzODJkNjU5M2ZjMzJhYjk1ZTBiMWE1NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBEZWMgMjkgMTI6NTk6NTIgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQ2Mzc2NzogSGFuZGxlIHBhcnNpbmcgc3ViaWRlbnRpZmllcnMgPiAyXjMxCisKK2NvbW1pdCBiYmMwMmUzNmU5MGMxYWFiNzg5ODU2MmY5NjNmNWNhZGIyNmUxMGJkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIERlYyAyOCAxNzoxNToxNiAyMDExICswMDAwCisKKyAgICBNb3ZlIHBhc3MvcGFzc19wZXJzaXN0IHRlc3RzIHRvIHRoZSBuZXcgbG9jYXRpb24KKworY29tbWl0IDM4OThjMDRmZDZmODk4NjcwNjJmZGZlYmYzNjg1N2FiNjE5YzA0NTAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgRGVjIDI4IDE2OjUzOjI0IDIwMTEgKzAwMDAKKworICAgIEFkZCB0ZXN0cyBmb3IgcGFzcy9wYXNzX3BlcnNpc3QsIHN1cHBsaWVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBkNWVlM2YwYTFhNjNiYjE3NTJjNzRjYmNhNTVhYTNkNDBiZjliZjEzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAyMTo1ODo1MSAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ0NzQ0NDogRml4IFNJR19QSVBFIGhhbmRsaW5nCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDJhMTdiMzc0MzBjMTg1Mjk5OGMzNTg4ZTU0N2Q3ZWI2MWMwNmRhNzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDIxOjQ1OjM4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50eDogUEFUQ0hFUzogMzQ0NTQ0MDogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgQWdlbnRYIGVycm9ycworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBmZTU4YTBlNWY0ZDRlMmUyZWNiY2I0NzM4MmIwOGNiMWU0ZGYzNTJjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxODoxNjoyMyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNDU2NzcwOiBIYW5kbGUgKG9ic29sZXRlKSBVSW50ZWdlciB0eXBlIHByb3Blcmx5CisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDFiZThjZjA4YTY3YTkxODU1ZmVlMWVjNGEyZDhlMDg3Yzc4MTI0NTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE4OjA0OjEwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50eDogUEFUQ0hFUzogMzQ0NTQzNzogTG9nIEFnZW50WCBkaXNjb25uZWN0aW9ucworICAgIChpbiBsaW5lIHdpdGggY29ubmVjdGlvbnMpIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCAwNjgwMzcyODkxMDdmYWEyYmEzZjVjZDJmYjAwYzE5NDk0YmI5YTA0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNzoyNzo0NiAyMDExICswMDAwCisKKyAgICBIYW5kbGUgYW55IEdFVE5FWFQgcmVxdWVzdCBPSUQsIG5vdCBqdXN0IGEgc2ltcGxlIHdhbGsuCisKK2NvbW1pdCBhNzRmYTUyODk4MzEyM2QzNTVhOGNkY2FhNzdkZDRlYjRiOGM2OTU5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNzowMDoxOCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBwYXNzOiBQQVRDSEVTOiAzNDkzOTQ6IEJyaW5nIHBhc3NfcGVyc2lzdHRlc3Qgc2NyaXB0IGludG8gbGluZSB3aXRoIHBhc3N0ZXN0KgorICAgIChpLmUuIHVzaW5nIHRoZSBsZWdpdGltYXRlIHN0cnVjdHVyZSBvZiBORVQtU05NUC1QQVNTLU1JQikKKyAgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgYmJlNjQ5ZWJmYTYxZWEyMjM5OTE3MGIzNmI5OWRiMzBhMWRlODAxMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTY6NTQ6MzggMjAxMSArMDAwMAorCisgICAgUmV3b3JrICJwYXNzdGVzdCIgZXhhbXBsZSB0byBmdWxseSB2YWxpZGF0ZSBHRVRORVhUIHJlcXVlc3RzCisgICAgYW5kIHVzZSBhIGxlZ2l0aW1hdGUgc3RydWN0dXJlIGZvciBvdXRwdXQuICBCYWNrcG9ydCBvZiBTVk4KKyAgICByZXZpc2lvbiAxNzYzMiAod2hpY2ggdXBkYXRlZCAncGFzc3Rlc3QucGwnIGJ1dCBtaXNzZWQgJ3Bhc3N0ZXN0JykKKyAgICBDb3JyZWN0IGluIGJyYW5jaGVzIDUuNSBhbmQgYWJvdmUKKworY29tbWl0IDgyZDA2YzcyNDdiMjJjOGIwMWQ0NWJmNTUwNDFkMmYxZTY0MjdkNDkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEzOjQ1OjE4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDQ3NjcxOiBGaXggb3ZlcnJpZGUgaGFuZGxpbmcgb2YgT0lEIHZhbHVlcworICAgIFBhdGNoIHN1cHBsaWVkIGJ5IFBoaWxsaXAgTydEb25uZWxsCisKK2NvbW1pdCBiYTRhOWNlNTFjOTYwMGY5ZmRhMTY4ZjFlNmVmZjMyYTFkYjYzY2I5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxMzoyNDoyNiAyMDExICswMDAwCisKKyAgICBUd2VhayAtLWRpc2FibGUtc25tcC1zZXQgY2hhbmdlcworCitjb21taXQgODI3YzhiMjg4MzAxNzFmYWE5YzYxZDUzZWZjYTllYjY2MDA1NjFjMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTE6MjU6NDMgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzNDMzODQ2OiBGaXggZm9yIHVzZSB3aXRoIHB5dGhvbiAyLjQKKworY29tbWl0IGY5OGE1NGE5OWNhZjdiNDZiMTAwYTkyMGRiOTQyY2JjYTljNDM5MjYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEwOjEwOjM2IDIwMTEgKzAwMDAKKworICAgIFNraXAgU0VULWJhc2VkIHRlc3RzIHdoZW4gY29uZmlndXJlZCB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgMjMwZGYxNGY5NGMzNzM2ZmYzNDM3OWE0ZTI4MWVlYTM1M2I0N2Y4MAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIERlYyAyNiAyMzozNDoyMyAyMDExICswMTAwCisKKyAgICBEbyBub3QgYXNzaWduIHRtU3RhdGVSZWYgdHdpY2UKKworY29tbWl0IGM5NmIzYjRkODUzMGFkNWUwZWZiMDNmMjRkYWI1ZTVmMWE0NjAwMzEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjUgMTE6MTg6MjEgMjAxMSArMDEwMAorCisgICAgQ29ycmVjdCB1c2UtYWZ0ZXItZnJlZS4KKworY29tbWl0IGM1OTc4Yzg5Y2RlMjQ0MGY0ZDIwZGFkYmM5ZDFkZDhkYjU2MmQ1NmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjUgMTE6MTU6NDQgMjAxMSArMDEwMAorCisgICAgQ29ycmVjdCBkb3VibGUtZnJlZS4KKyAgICAKKyAgICBuZXRzbm1wX3Rsc3RtQWRkcl9hZGQgdGFrZXMgb3duZXJzaGlwIG9mIGl0J3MgYXJndW1lbnQgc28gY2FsbGluZyBmcmVlIG9uIHRoZQorICAgIGFyZ3VtZW50IG9uIGZhaWx1cmUgaXMgaW5jb3JyZWN0LgorCitjb21taXQgYzEzOWNhMTIzYjQ0YmIzYjliNmJmOTIxZTE2MDljYzQ1ZjYzYTY2MAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6NTU6MzAgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVMgMzQxMDA1OTogRml4IHNwYXJzZWx5IGF1Z21lbnRpbmcgdHJpZ2dlciB0YWJsZXMKKyAgICBQYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorCitjb21taXQgYzRhZTAyMWIyZTYzODQ0MzcwODFjNTYyM2YzNjBjODg5NjM5MDE4OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6Mjk6NTQgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVMgMzQxMDA1MDogU2tpcCBhbHJlYWR5LSdwcm9jZXNzZWQnIHZhcmJpbmRzCisgICAgQmFzZWQgb24gbWliMmMgcGF0Y2ggcHJvdmlkZWQgYnkgU3RlcGhlbiBUdXJuZXIKKworY29tbWl0IGM2YWNjZjhjNjYyNTRmYThjNDg3NjdlZDdkZWM3OTVkZGFmYzUyMmUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBTYXQgRGVjIDI0IDE2OjI3OjExIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTIDM0MTAwNTA6IFNraXAgYWxyZWFkeS0ncHJvY2Vzc2VkJyB2YXJiaW5kcworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gVHVybmVyCisKK2NvbW1pdCBhNjE4MjZhZDhjYTU0NjYxZDFkOTA5NzEyNTAzYmQzYThiMzJlZWQwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgRGVjIDIyIDE4OjM1OjQ2IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisgICAgCisgICAgbXlNYXRjaCBpcyB1bnVzZWQgYXMgbm1hdGNoIGlzIHplcm8gYW5kIGFsc28gc2luY2UgcmVnZXhCdWZmZXIgaXMgY3JlYXRlZAorICAgIHdpdGggUkVHX05PU1VCIHNldC4KKworY29tbWl0IGJhNGZjODBmZTJjZmQ1YTVkODkyMzBkOGYzNzAzZTRmZTAxZTYwMTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDIyIDE5OjI0OjQwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNDAyMzc2OiBmcm9tIExlb25hcmRvIENoaXF1aXR0bzogUmVjb2duaXNlIFJlaXNlckZTCisgICAgQWxzbyBtb3ZlIHZhcmlvdXMgRlNUeXBlIGRlZmluaXRpb25zIHRvIHRoZSBhcHByb3ByaWF0ZSBibG9ja3MKKworY29tbWl0IGI1YWM0YTA0ZGNkNTQ3MGQwOGQwMzMyMWFiY2QxZTk4MjYyMWU2ZTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjM5OjQ2IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IDJiMzdlNGU4ZjI1MGEwZDg4MjExOTlhNzRhYzNmNGU1YjdiN2JhYmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjMxOjUxIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IDNkMDgzNDUxNTZjNDE5MzMzZGU5NjlmMTNkMjFmY2VjN2UxOGU5NGQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjMyOjI5IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IGNkODU5YWQ1MWM0ZjE4ZDViMGZjNjlkZDY2OWZjYjA1MWM3OTg5NjkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjM5OjMzIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG1lbW1vdmUgc2l6ZQorCitjb21taXQgMzBmZjU4ZDA5ZDRjOWQ1NDM4YmI2MjEwNTRmZDdhZDdhMmE1OTdlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6MDc6MTkgMjAxMSArMDEwMAorCisgICAgRml4ZWQgd3JvbmcgbGVuZ3RoIG9mIGJ1ZmZlciB3aGVuIHByaW50aW5nIEFTTl9CSVRfU1RSCisKK2NvbW1pdCA2YzE0ODdlMWQzNjBkM2QyNjBhMzljYjFmNWIxNWRhOTc4Mzk1MDUzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNTo0NzozNCAyMDExICswMTAwCisKKyAgICBGaXhlZCBwb3RlbnRpYWwgZnJlZSBvZiB1bmluaXRpYWxpemVkIHBvaW50ZXIgaW4gZXJyb3IgY2FzZXMKKworY29tbWl0IGM3NmZiOTZmNjVlMzNiYTJmZDIxMmE5MjFlOGMzODYxNTVlZTVjN2EKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE1OjQ0OjQ2IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVuaXRpYWxpemVkIHZhbHVlcyBpbiB1ZHBUYWJsZQorCitjb21taXQgYzQ0NjA4Njc5Yjg5NzUxMTc2ZjI4YTJlNTRkNTI4MmI0NmUyYTA1YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTQ6NTY6MTMgMjAxMSArMDEwMAorCisgICAgVXNlIGNhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYyBhbmQgbWFudWFsIGNsZWFyaW5nCisKK2NvbW1pdCBhMDVjNWY5NTEzNDYxODI0ZTc5MDNhZTlhZTlhNmMzMzg2ZTMzODc5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNDo0MDo1MCAyMDExICswMTAwCisKKyAgICBGaXhlZCBwcmludGluZyBvZiB1bml0aWFsaXplZCB2YXJpYWJsZSB3aGVuIHNlbnNvcnNfZ2V0X2xhYmVsKCkgZmFpbHMKKworY29tbWl0IGU0YTVlZGM3MjM5M2JkM2RlOWJmMTJiY2ViYTlkODNiYmY3ZGU3MGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE0OjMxOjI1IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlCisKK2NvbW1pdCBmYWUyZTViODM1YjhkZjFlYWU0N2U0Y2ViYjRlYjQwNGQ3MjgyMzc3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzozMToyMSAyMDExICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIHVuaXRpYWxpemVkIGlpZCBpbiBlcnJvciBjYXNlcyBhbmQgd2l0aCBkZWJ1ZyBpbmZvIGVuYWJsZWQuCisKK2NvbW1pdCA5ZDU4ZjgxYTkyMzljZmJjZmM4ZWJjZTM2N2QyMWU5YjNkY2IwMjhiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzozMzozMyAyMDExICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGVycm9yIGNhc2VzCisKK2NvbW1pdCAwYmM4YzA4ZWRlYWU3YWUwOTVmMTE2MjU4YzIwYWU1NzY3ZDYwNjUyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzoyMDo1MiAyMDExICswMTAwCisKKyAgICBGaXhlZCByZXR1cm5pbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZSAnc3RhdHVzJyB3aGVuIHNzID09IE5VTEwKKworY29tbWl0IDczMDRjNTNjZjhhZGVlOGVjY2VmMWE4ZjI2NzU2ZmMwN2YwOTg3MjEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTggMjM6MzE6NTMgMjAxMSArMDEwMAorCisgICAgT24gc29sYXJpcyAxMCB0ZXN0IGluIC9iaW4vc2ggZG9lc24ndCBzdXBwb3J0IHRoZSAtZSB0ZXN0LiBSZXBsYWNlIGl0IHdpdGggLWYKKworY29tbWl0IDhjZDNiZTYwZDY5M2M5YzM2ZmZiOTdkM2Q5YmNiNDljMWI0YWJlMzUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMTcgMDg6NTI6MjQgMjAxMSArMDEwMAorCisgICAgQXZvaWQgcmVwZXRpdGlvbiBvZiB0aGUgY29tcGxleCBleHByZXNzaW9uIGRldGVybWluaW5nIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGdldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAKKyAgICBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gYnVpbGQgb24gcGxhdGZvcm1zIGxpa2UgU29sYXJpcyAxMCB0aGF0IGRlZmluZQorICAgIElQX1JFQ1ZEU1RBRERSIGJ1dCBsYWNrIGVpdGhlciBvZiBtc2doZHIubXNnX2NvbnRyb2wgYW5kIG1zZ2hkci5tc2dfZmxhZ3MuCisKK2NvbW1pdCA5NTNmMmUzZDQyNWVkZTNiODYzYTJlN2NjYjBiNGJjODYyOTI4YjU3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDUgMjI6MTM6MDcgMjAxMSArMDEwMAorCisgICAgTW92ZSB0aGUgdXNlIG9mIF9zZW5kdG8gYW5kIF9yZWN2ZnJvbSBiZWxvdyB0aGVpciBkZWZpbml0aW9ucy4KKworY29tbWl0IDY4YTExNzNjNDZjZjc3NjAxNDI2Y2YzOTFkOWE4NTI3OTRmMjA1N2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBOb3YgMjAgMjA6MDU6MTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2VwYXJhdGUgb3V0IHRoZSBjbWVzZyBidWZmZXIgc2l6ZQorCitjb21taXQgNDYxZGQxNmYzYjI2NDczMjJjZGNlNjM2MzA4MWNjNDRiYTVhNDliNQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAyNiAyMTo1MTowMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNZXJnZSB0b2dldGhlciB0aGUgTGludXggYW5kICpCU0QgdmVyc2lvbiBvZiBzcmMgcG9ydCBzZW5kaW5nLgorCitjb21taXQgN2FjY2I2OWJhYTFmYzBiNmEzNDM5ZDJlNTQ5Yzg2ZGEzNDUzYmFkMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOTozMDozMSAyMDExICswMTAwCisKKyAgICBVc2UgYSBiYXJlIHN0cnVjdCBpb3ZlYyBpbiBpbnN0ZWFkIG9mIGEgb25lIGVsZW1lbnQgYXJyYXkuCisgICAgCisgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gbWFrZSBfcmVjdmZyb20gbW9yZSBzaW1pbGFyIHRvIF9zZW5kdG8uCisKK2NvbW1pdCAzOTg1MmNkNGM4NWVmMmJmYzc1Y2RlYTI4MjUyNjFlZTkzZTc2OGMyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI5OjIwIDIwMTEgKzAxMDAKKworICAgIEFkZCBjb21tZW50IGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgdG8gZ2V0c29ja25hbWUgYWZ0ZXIgYWxtb3N0IHJlbW92aW5nIGl0LgorCitjb21taXQgMWIyOTJjYTI3ZWFiNWNhYTczZmVhYWE4M2RjOWMxMmFiYzBmMmU3MAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToyNzo1OSAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUuCisKK2NvbW1pdCBiYzg3OTU3MWVjYTk1MjBiYzEzMmY4NDBjM2U2NTlkMzc5MzE0NGQ3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI1OjM2IDIwMTEgKzAxMDAKKworICAgIEludHJvZHVjZSB0ZW1wb3JhcnkgdmFyaWFibGVzIHRvIGVhc2UgdGhlIGV4dHJhY3Rpb24gb2YgdGhlIHNlcnZlciBhZGRyZXNzLgorCitjb21taXQgYjdlZWE2Y2ZmYmQ4NzI5MzJjZTJjMDRmZWZiNmY0M2RlMzM5ZjM3NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxODozMyAyMDExICswMTAwCisKKyAgICBSZW5hbWUgdGhlIGNtZXNncHRyIHZhcmlhYmxlIHRvIGNtLgorICAgIAorICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gaW5jcmVhc2UgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLgorCitjb21taXQgMGE3NDYxZTcyODgwNWM2MmExY2FiOWQ4N2JmYzc0Yzc5MjdhOWZjYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxNToyMiAyMDExICswMTAwCisKKyAgICBGYWN0b3Igb3V0IGEgY29tbW9uIGxvb3AgaW4gcmVjdm1zZyBvcHRpb24gcHJvY2Vzc2luZy4KKworY29tbWl0IGIzYzYyNDhkMDIwMWFiMTYxMDg0MGQ2ZDBlNzQ5YjNiNmM0YWQ3OTIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MTM6NDMgMjAxMSArMDEwMAorCisgICAgVW5pZnkgdGhlIHN0cnVjdHVyZSBvZiBMaW51eCBhbmQgQlNEIHJlY3Ztc2cgb3B0aW9uIHBhcnNpbmcgc29tZXdoYXQuCisKK2NvbW1pdCAzNTY0MDBkNjI5MGE0MjNiNTJlYmVlYTVhNWU5NzZmYjE1YmI3M2I0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjA0OjU2IDIwMTEgKzAxMDAKKworICAgIFVzZSBDTVNHX0RBVEEgb24gdGhlIHJlc3VsdCBvZiBDTVNHX0ZJUlNUL05FWFRIRFIsIG5vdCBvbiB0aGUgYnVmZmVyLgorCitjb21taXQgM2IzNTE3MDhjNjJkZTQ2YWExYjkwZWQyMzJjZmQ4YzdjNWIwMjIzMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDEyOjAwOjMyIDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSBhIGNhc3QKKworY29tbWl0IGRlOTI1MGQ5ZGFlOTcyN2E2Y2M3ZjY0NzY4OGRkZGYxYjg1OTcxMjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAxMTo1ODowNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBzcHJpbnRfbWliX29pZCgpIHRyZWF0IE9JRCBjb21wb25lbnRzIGFzIHVuc2lnbmVkIGluc3RlYWQgb2Ygc2lnbmVkIGludGVnZXJzCisKK2NvbW1pdCAwZTMzYjNiNmQ1ODU0YTRiYWMxNWQ0ZWE1ZTAxNmM1M2QxNjFkMGNkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMTA6MDI6MjggMjAxMSArMDEwMAorCisgICAgRml4IHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IGI3ZTUwZDVmOWE2NzU1OTgyZDJhZjMxOTE0NzNjYjM0NjQzYmMwM2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAwODozNzoyMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBSZWR1Y2Ugb3ZlcmhlYWQgb2YgY29uZmlnIGZpbGUgcGFyc2luZworCitjb21taXQgNzNjOWVlNDJkMjhhZmUyZTEwN2E3ZDY2MTZiNmQwMTE4OTBjMzZlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDA5OjA5OjU5IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCAzZGI5Nzk2MmIzN2ViMTJkMjU0ZDYxZTZiZTIzNGIwNmEzOTFjOGJiCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUaHUgRGVjIDggMDc6NDM6NDUgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDM0NTM4Njg6IGZyb20gIkJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPiI6IEZhY3RvciBjb21tb24gY29kZSBpbnRvIHBhc3NfY29tbW9uCisgICAgCisgICAgTW92ZSB0aGUgY29kZSBmb3IgcG9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdmFsdWVzIGZyb20gcGFzcyBhbmQgcGFzc19wZXJzaXN0CisgICAgaW50byBwYXNzX2NvbW1vbi4KKworY29tbWl0IGI2NTY4YzgzZjE3NTZlOWE2NTQzNGVkZWVlYjQwZDIzZGRiYmI2NTIKK0F1dGhvcjogY2NjaGl1IDxjY2NoaXVAc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDcgMTY6MjU6MjcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNDUyMDY5OiBGaXggc25tcHRyYXBfb2lkIGRlY2xhcmF0aW9uIGluIG1pYjJjIGdlbmVyYXRlZCBjb2RlCisgICAgCisgICAgVGhpcyBidWcgd2FzIGludHJvZHVjZWQgY29uc2lkZXJhYmxlIHRpbWUgYWdvLiBJdCBkaWQgYWxyZWFkeSBleGlzdCBhdCB0aGUKKyAgICB0aW1lIHRoZSA1LjYgYnJhbmNoIHdhcyBjcmVhdGVkIChzZWUgYWxzbyBjb21taXQKKyAgICAwZWMwODhhZmEyN2NmZGE0ZTZlYTc4YWFlN2NmYzU1MDc1NjRlZGRlKS4KKworY29tbWl0IGQ0OTRkYjY0YzIwOGI0ZGM2MjgxMzEzMmY4ODYzYmQ1YzFhMzlkNzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDozODoxNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEVsaW1pbmF0ZSBhbiB1bnVzZWQgdmFyaWFibGUgKE5vdykKKworY29tbWl0IDI4ZjI1NjFiYzI5MzVkOGUxY2JmNDZkMjgyMDE1ODE3M2U3YTRjZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDozNzoxMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IE1vdmUgdGhlIG1haW4gbG9vcCBjb2RlIGludG8gYSBuZXcgZnVuY3Rpb24KKworY29tbWl0IDM5NmUxMjJkZGM0MmE5MTZmMDZhMDI4ODRjMGU4YTI1OGVkYmUyMzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAwOTozMjoxNiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWF0Y2ggZWFjaCBnZXRwd25hbSgpL2dldHB3dWlkKCkgY2FsbCB3aXRoIGFuIGVuZHB3ZW50KCkgY2FsbCBhbmQgZWFjaCBnZXRncmVudCgpIGNhbGwgd2l0aCBhbiBlbmRncmVudCgpIGNhbGwuCisKK2NvbW1pdCAzZWZlZmJjMDAyNDM5OTc4NmY4YjY4YjFlOTNiMGE4ZmRkZGRjN2RhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6NDE6MDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IDdmMDVkYWE4ZTBlMGY1MzNiMGYxMmEzZTFjZjA3NjQxNTE5OTA5ZDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMTo1ODozMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NDQ5Mzk6IEJVRzogMTc5Njg4Njogc25tcGxpYjogQXZvaWQgdGhhdCBzcHJpbnRfcmVhbGxvY19vY3RldF9zdHJpbmcoKSBlbWJlZHMgdW5wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIGJpbmFyeSB6ZXJvZXMgaW4gaXRzIG91dHB1dC4gVGhpcyBiZWhhdmlvciBjb3VsZCBjYXVzZSB0cnVuY2F0ZWQgb3V0cHV0IGluIHNubXB0cmFwZC4KKworY29tbWl0IGRiOGY1NThmZDJmM2I3YzEwOWVhM2ExYzIxMzNiNzViNmY4Y2IyYWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDowNDo0MSAyMDExICswMTAwCisKKyAgICBDb21waWxlciB3YXJuaW5nIGZpeDogcGFzcyB1bnNpZ25lZCBjaGFycyB0byBpc3ByaW50KCkgaW5zdGVhZCBvZiBzaWduZWQgY2hhcnMuCisKK2NvbW1pdCA4MDBkYzEwMjhlN2UwY2Q4Y2MxNGQ4NGRkMzE3MjNkNDdhYzA3M2RiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6MTg6NTggMjAxMSArMDEwMAorCisgICAgUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgaGludCB2YXJpYWJsZQorCitjb21taXQgODNlYTRhMDgwYzkwYTc0Yjk3NDNkM2YyNGNmMGQ0YjhhMWU4Yzg0OQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE5vdiAyNyAyMToxNjo1MiAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBxb3MKKworY29tbWl0IDdiOWUwMzQ0MWMzZGMzYTA3NjcwZWQwMWY1ZDA0NzkxYTgyYzc1MGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDQ6MDEgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlICNkZWZpbmUgdmFsKHgpIF9fU1RSSU5HKHgpIGFuZCBjaGFuZ2UgdmFsKHgpIGludG8gX19TVFJJTkcoeCkuCisKK2NvbW1pdCAyZjM3OWIwZTRlY2FkZmE0ZTU0MWUzMDA1YzhmYzgyODE4ODJiNzQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE1OjU4OjQ3IDIwMTEgKzAxMDAKKworICAgIEZvbGxvdy11cCBmb3IgY29tbWl0IDFhYTcwNGU6IHVuYnJlYWsgdGhlIE1TVkMgYnVpbGQKKworY29tbWl0IDY0ZWYwZjcxMTI3NjE3ODM3MDI3ZmIyY2ZhZjE3NGI5NWJhNzllMGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MTk6NTAgMjAxMSArMDEwMAorCisgICAgQWRkIFNOTVA6OnJlZ2lzdGVyX2RlYnVnX3Rva2VucygpCisKK2NvbW1pdCA3YmVhZDljYTkxN2M2NzU2NmQ1ZWQ5OGFiNTA3YmJjMDI4MTYyMTdkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjA4OjA4IDIwMTEgKzAxMDAKKworICAgIEFnZW50WCBzdWJhZ2VudDogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24KKworY29tbWl0IDBlZDcxNTQxZjg3ZTdkNzhiYzk5OGVlYmRhMzIxN2M1OWUxZGY4MzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDM6MTkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIERveHlnZW4tc3R5bGUgZnVuY3Rpb24gaGVhZGVyIGZvciBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCkgYW5kIG5ldHNubXBfY2xlYXJfZGVmYXVsdF90YXJnZXQoKS4KKworY29tbWl0IDhjMjk3MmI2MWU0MDE2OWI0N2M1MDk4OGI2YWU5ZThjMjg1Zjg0ZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDI6NTQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogRml4IHNwZWxsaW5nIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBTTk1QIG1vZHVsZQorCitjb21taXQgNWRmMmJhYzZiZDcxNzc5OTMxMWYwMDFhYzdiNzNkYjg4ZjExYmRkYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIE5vdiAyOSAwODo1OTo1OCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBPbmx5IHRyYW5zZm9ybSB0aGUgYWRkcmVzcyB0byBwcmludGFibGUgZm9ybSB3aGVuIG5lZWRlZC4KKworY29tbWl0IDE3MWU4ZDQ4ZDRhZjA0MDEzY2ZmOGZkMjhmNTM0MWEyYWVmMjFkODgKK0F1dGhvcjogTWlqbyBTYWZyYWRpbiA8c2FmcmFkaW5AbGludXgudm5ldC5pYm0uY29tPgorRGF0ZTogICBUdWUgTm92IDI5IDE2OjQ5OjQ2IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXAtYnJpZGdlLW1pYjogRml4IGluZGV4IGludGVycHJldGF0aW9uLgorICAgIAorICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYSB3cm9uZyBkYXRhIGludGVycHJldGF0aW9uLgorICAgIHNubXAtYnJpZGdlLW1pYiBvYnRhaW5zIHRoZSBpZmluZGV4IHZhbHVlIGZyb20gdGhlIHN5c2ZzCisgICAgYXR0cmlidXRlICdpZmluZGV4JyBUaGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIHN5c2ZzIGF0dHJpYnV0ZQorICAgIGlzIGFuIGludGVnZXIsIHdoaWNoIGlzIGhhbmRsZWQgYXMgaGV4IGFuZCBsZWFkcyB0bworICAgIGluY29ycmVjdCBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci4KKyAgICAKKyAgICBlLmcuCisgICAgICAgICQgPiBzbm1wd2FsayBsb2NhbGhvc3QgQlJJREdFLU1JQjo6ZG90MWRCYXNlUG9ydElmSW5kZXguMgorICAgICAgICBCUklER0UtTUlCOjpkb3QxZEJhc2VQb3J0SWZJbmRleC4yID0gSU5URUdFUjogNTQKKyAgICAKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSB0aGUgdmFsdWUgaXMgMzYKKyAgICAKKyAgICAgICAgJCA+IGNhdCAvc3lzL2NsYXNzL25ldC88ZGV2aWNlPi9pZmluZGV4CisgICAgICAgIDM2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWlqbyBTYWZyYWRpbiA8c2FmcmFkaW5AbGludXgudm5ldC5pYm0uY29tPgorCitjb21taXQgODJlMzlmYjY3MDZkZjkwZWNmMmZjOWUxMGFkYTJiOTYyZWUxOTZmMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBOb3YgMjkgMTI6Mjc6NDYgMjAxMSArMDAwMAorCisgICAgRml4IG11bHRpLWxpbmUgY2FzZSB0ZXN0aW5nIG9mIGluY29taW5nIE9JRAorCitjb21taXQgYjE1ZGExYTQ1MTYwNjExMDVhMWVhYzc0NTBjZjY1MGVjNDQyNjZiMgorQXV0aG9yOiBOaWtvbGF5IERlbmV2IDxuZGVuZXZAZ21haWwuY29tPgorRGF0ZTogICBUdWUgTm92IDI5IDA4OjI5OjQ5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IEZyZWVCU0Q6IFJlc3RvcmUgSVBfUkVDVkRTVEFERFIgZnVuY3Rpb25hbGl0eS4KKworY29tbWl0IDdmNDdmNTJlNDgxYmFhOWFhZmI1Nzg0MjQ0YjBkZDI2NTNlN2RjZmYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBOb3YgMjggMDg6NTE6MzkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIFNOTVBfQUxMT0NfVFlQRURFRiB0byBhbGxvY2F0ZSB0cmFuc3BvcnRzIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBzZXBhcmF0ZSBjYWxsIHRvIG1lbXNldC4KKworY29tbWl0IGNmODYwMzllMzA4NjIyNWMzMDg1YmI5YWRmMDg4YjhiYTViYTY5NzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMTU6MDI6NTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIgcGFzcy4KKworY29tbWl0IDFhODdlNzZlMDBlZTNkNWNkMzdhMDdiZmMzZDg0NDkwZDNjMmE0ZWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMTQ6NTU6NDIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliIHBhc3MKKworY29tbWl0IDg4NjdmZDFkY2ZlNzJiNTlkMDczMjJmZjM4YTY5OWI2NmVjNGYzMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMDk6NDQ6MzggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSByb2J1c3QgYWdhaW5zdCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKyAgICAKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygpIHVzZSBtZW1zZXQoKSBvbiBVbml4IHN5c3RlbXMgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBsb29wLgorICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2Ugc3VyZSB0aGF0IG9uIFVuaXggc3lzdGVtcyBuZXRzbm1wX2xhcmdlX2ZkX2NscigpIGRvZXNuJ3QgdHJ5IHRvIHJlYWQgbWVtb3J5IGl0IGlzbid0IGFsbG93ZWQgdG8gcmVhZCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KCkgcmV0dXJuIGZhbHNlIG9uIFVuaXggc3lzdGVtcyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHNocmluayBiZWhhdmlvciBjb3JyZWN0LgorCitjb21taXQgMjNkYjBjZjA5YjhiMGVhYjM3Yjc0OWVmMGMzYzNmMzA2OTAwMjQ1YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAyMSAyMzowMjo1NyAyMDExICswMTAwCisKKyAgICBGaXggY2FzdGluZyB0dl91c2VjIHRvIGludCB3aGljaCBtYXkgYmUgdG9vIHNob3J0CisKK2NvbW1pdCA4MGVlNDAyMmU1MzRlNjRhYWQ1YTVmMjcxOTI4NDNiNDJhY2I4NWUwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDE5IDA5OjE0OjAyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MzkyMzQ6IE1vdmUgbmV0c25tcF9wYXNzX3N0cl90b19lcnJubyB0byBwYXNzX2NvbW1vbiBhbmQgcmVuYW1lIGl0IHRvIG5ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8KKworY29tbWl0IDBiYWE5Mjk2YzA3MmJiMzczNTc2MGIwZGQ5OTJmMmQxZDNjYTI3ZmEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMTkgMDk6MDU6MjQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQzOTIzNDogQ29ycmVjdCB0aGUgZGVwZW5kZW5jaWVzIG9mIHVjZC1zbm1wL3Bhc3MgYW5kIHVjZC1zbm1wL3Bhc3NfcGVyc2lzdAorCitjb21taXQgMWFhNzA0ZTRhMjk0NDMwYjI4ZTM5YjZmOWU0NjgzYjhhNDhiY2UwNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwODozNToyMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRmFjdG9yIG91dCBhc2MyYmluIGFuZCBiaW4yYXNjLiBBZGQgYSBuZXRzbm1wX2ludGVybmFsXyBwcmVmaXggdG8gdGhlbQorCitjb21taXQgY2RhOGZlOTEwMTNmMTJjYmY2NGEwNzc1YWJiNTU3MjAwMzVhZjkzMQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwMDo1NToyNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQ2FsbCBzbm1wX29pZHRyZWVfY29tcGFyZSBpbnN0ZWFkIG9mIHNubXBfb2lkX21pbl9jb21wYXJlCisgICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSBzbm1wX29pZF9taW5fY29tcGFyZSBzaW5jZSBpdCBpcyBpbnRlcm5hbCBhbmQgdW51c2VkCisKK2NvbW1pdCA4NWY4OTNlMmI2MDVlNjdmOWJkMDQ0M2M3NGUyZWQyNjlhYTY4NTY0CitBdXRob3I6IE5pa2kgRGVuZXYgPG5pa2lfZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMTcgMjI6NDI6MzIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMxNzU2NDA6IFVzZSBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0IHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkKKyAgICAKKyAgICBUaGlzIGh1bmsgZmVsbCBvZiB3aGVuIHRoZSByZXN0IG9mIHRoZSBwYXRjaCB3YXMgbWVyZ2VkLgorCitjb21taXQgNWM5MTNlNTQ2NTZhZTAwOTZiMWZlYjZkYTk4YjVmYzljYTgxZjI3NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzozMzowNyAyMDExICswMTAwCisKKyAgICBEZWZpbmUgdGhlIGZ1bGwgTmV0QlNEIGhpZXJhcmNoeSBkb3dud2FyZHMKKworY29tbWl0IGI4ODE4NDFiZDA0OTNkZDcxZDYzMjU5YmRkZWQ0NDliMDZmMDJjMzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MzA6MzMgMjAxMSArMDEwMAorCisgICAgRml4IHNpemVfdC9pbnQgbWlzbWF0Y2hlcworCitjb21taXQgY2EyOTRjZjc1YmJjOGU5MGRiZjQ0ZWU0MDQ3ODkzNWU5MWRiMTQ4NworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxODowMyAyMDExICswMTAwCisKKyAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcworCitjb21taXQgY2QzMmMyZGZmMDZiOWI0NTJjYzE4ZDU1MmQyZjIyMzQwOTJjODI5YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxNzowOSAyMDExICswMTAwCisKKyAgICBGaXggZm9ybWF0IHdhcm5pbmcKKworY29tbWl0IDg4MzEzNmMyYjJmYTA3MzlmNDM3YThjZmI2NjE0YWNjYzc2ZTI2OGUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTU6NTggMjAxMSArMDEwMAorCisgICAgTW9yZSBuZWVkcyBmb3IgTkVUU05NUF9QUklvIGZvcm1hdCBzcGVjaWZpZXIKKworY29tbWl0IGI4MDg0YTdjY2M5MDliNmQ2ZGI3YzBlOGU1OTZkNzg2NzFmNTY3OGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTQ6MjYgMjAxMSArMDEwMAorCisgICAgRml4IHVzaW5nIGNoYXIgYXMgYXJyYXkgaW5kZXggKGN0eXBlLmgpCisKK2NvbW1pdCA4NDUyOWU2MzIwYTg5ZDk3ZjEzMTRhZWJhZDgwNjI1NWQyYTFiMThjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjAwOjU3IDIwMTEgKzAxMDAKKworICAgIEZpeCBtaXNzaW5nIGZvcm1hdCBmb3IgRnJlZUJTRCA0CisKK2NvbW1pdCA0YmQwMzUyOTU1YTI1NTFiZmUwMjMwOGRkMTM0YjkxMjhjOThiOWU5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIyOjU5OjM2IDIwMTEgKzAxMDAKKworICAgIEZpeCBwYXJhbnRoZXNpcyBwcm9ibGVtCisKK2NvbW1pdCBmZTYyNjliMTkwMGNmNDRkYzI3YTE5OWE3NjFkMTVhMDFjM2YzMDkyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIyOjU4OjM0IDIwMTEgKzAxMDAKKworICAgIEZpeCBzaXplX3QvaW50IG1pc21hdGNoZXMKKworY29tbWl0IGE0ZGI5ZjlmYzEzZDIxZWNmZjQ4OGViNDEwMzc2ZWRkYTZjMjgyMzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTM6NDM6MzQgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKKworY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTM6Mzc6NDkgMjAxMSArMDEwMAorCisgICAgRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzCisKK2NvbW1pdCAyNWNmYzE5NjJhZTU3NmNjYjE1NThkYTFlM2VmOGI2YzE3ZjYzYzE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDExOjI3OjUzIDIwMTEgKzAxMDAKKworICAgIFJlYWxseSB1cC10by1kYXRlIG1pYnMKKworY29tbWl0IDBlODZjNzgxZjM5ODliZjAyMmM4OTkzYTExODYxN2I3NGE3NTQyMGMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMDk6MTc6MTkgMjAxMSArMDEwMAorCisgICAgbWVtb3J5X2xpbnV4OiBnZXQgU2htZW0gZnJvbSAvcHJvYy9tZW1pbmZvIGZvciAyLjYgKG9yIG5ld2VyKSBrZXJuZWxzCisKK2NvbW1pdCBiZjI2NGQxNWRlZDdhY2JiZjJlMzg3MWI5OGZkMWZjZWY0M2Q5ZWMzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE2OjE2IDIwMTEgKzAxMDAKKworICAgIG1lbW9yeV9saW51eDogY2xvc2Ugc29ja2V0cyBpbiBlcnJvciBzaXR1YXRpb25zCisKK2NvbW1pdCA1N2ZmOGE0MGJhZTVkOWJjYWQxNjA4OTE0MmE5Y2YzMjhjOWZhMWY1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE0OjU3IDIwMTEgKzAxMDAKKworICAgIGRpc21hbi9waW5nLCBkaXNtYW4vdHJhY2Vyb3V0ZTogQ2xvc2Ugc29ja2V0cyBpbiBlcnJvciBzaXR1YXRpb25zCisKK2NvbW1pdCA4YTI1MDJhMTVjMzIxN2I5NTkzOWEzYzgzNjE2N2QyMzBhYzM1ZjAyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjEzOjUzIDIwMTEgKzAxMDAKKworICAgIFVwLXRvLWRhdGUgbGlzdCBvZiBSRkNzIHdpdCBtaWJzCisKK2NvbW1pdCBkY2RkNzAyMTExZDhkYTVmNTM4MDRjZmNmMGRmZGFkNzMxNDY4YmRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE5vdiAxNSAxMDo1NzozNCAyMDExICswMDAwCisKKyAgICBEb24ndCB0cnkgdG8gaW5zdGFsbCBhbiBlbXB0eSBsaXN0IG9mIG1hbiBwYWdlcyAoTUFOMykKKworY29tbWl0IGJhNjE5ODA0ZTU5NzhhOGRmNzU0ODQ0ZWZjY2E1MmI2OWI1MDE1ZmEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTM6MzQ6MjAgMjAxMSArMDEwMAorCisgICAgTWluR1c6IE1ha2Ugc3VyZSB0aGF0IHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUgcHNraWxsIG1lc3NhZ2UgYXJlIGRpc3BsYXllZC4KKworY29tbWl0IDkyM2VlY2M1MDdmNzUwNDNiNjBjNWU2ODA1M2E0ZjM5NmFiMGIwZDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTI6MzY6MzggMjAxMSArMDEwMAorCisgICAgQ29tcGlsZXIgd2FybmluZyBmaXggZm9yIHN5c3RlbXMgd2hlcmUgdWludDY0X3QgPSB1bnNpZ25lZCBsb25nIChlLmcuIFJIRUwgNi4xL3g4Nl82NCkKKworY29tbWl0IDQzNGJmYzFmNzQ1NzU1MGI2Zjg3ZDViY2Q1MTEyNzZiMjcwYjU5NjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDE0IDExOjIyOjUzIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmcm9tIE1hcnRpbiBXaWxjazogZml4ZWQgc25tcGQgY3Jhc2hpbmcgd2l0aCAnc2VsZWN0OiBiYWQgZmlsZSBkZXNjcmlwdG9yJy4KKyAgICAKKyAgICBPbiAzMi1iaXQgc3lzdGVtcywgc25tcGQgZGllcyB3aXRoIGFmb3JlbWVudGlvbmVkIG1lc3NhZ2Ugd2hlbiB1c2luZyBmaWxlIGRlc2NyaXB0aW9ucyA+IDMyLCBlLmcuIHdoZW4gaGF2aW5nID4zMiBBZ2VudFggc3ViYWdlbnRzLgorCitjb21taXQgZWQ2NWVjYTZlN2Y5Y2ZhNzM4MGE3OGQ1NmMwMWVkMzE0NzQ1YjE2OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxOTowMToyMSAyMDExICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgY29uc3QnaWZ5ZWQgbmxpc3QgYXJndW1lbnRzCisKK2NvbW1pdCBlYWNhNzk4M2UzNjU1YWI2OTZmY2M0NDYxY2EwY2VkYmFjNmNlNjlhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDExIDE5OjAwOjEyIDIwMTEgKzAxMDAKKworICAgIE5ldEJTRC02OiBPbmUgbW9yZSBpbnN0YW5jZSBvZiB0aW1lc3BlYyByZXBsYWNpbmcgdGltZXZhbAorCitjb21taXQgOGFkNmM1M2ZkZWM1YWRlYWU0ZTUyZjE3NTFlY2VjNGEzNDViYWIwNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxODo1OTowMSAyMDExICswMTAwCisKKyAgICBGaXggYnVpZyAjMzQzNjUyNzogYXJwX25ldGxpbms6IGZpeCBkeWluZyByZWxvYWQgb2YgY2FjaGUKKworY29tbWl0IDM3OGZmZWQwM2JhNzlhODM0NmQ2YzYyNzgxZTJkZGY1Y2U5MmE0NzgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMTEgMTg6NTU6NDMgMjAxMSArMDEwMAorCisgICAgRml4IGJ1ZyAjMzQzNjUyODogc3dpbnN0X3BrZ2luZm86IHJlY292ZXIgZnJvbSBOVUxMIHJldHVybiBmcm9tIG9wZW5kaXIKKworY29tbWl0IGQ3YWQ4ZjVmOWYzZjY3ZjE2ZjY1YzI1MTVkMTFlMTk0ZDJjZGQxMmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMTAgMTQ6MDQ6NDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQ3lnd2luOiBNYWtlIGRhdGVfbl90aW1lKCkgcHJvZHVjZSB0aW1lIHpvbmUgaW5mb3JtYXRpb24KKworY29tbWl0IGJhMzVjNTBiMmY0NTliZDljMTFlZDU5Y2M3ZDFiMTYyMTU2NDRmYTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMTAgMTQ6MTc6MDQgMjAxMSArMDEwMAorCisgICAgUmVwbGFjZSBBQ19UUllfTElOSygpIGJ5IEFDX0xJTktfSUZFTFNFKCkKKyAgICAKKyAgICBOb3RlOiB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0LgorCitjb21taXQgZjYxNWJmMjRmNWQwZjIzY2U5MzAxZGE1NTYxODRkNjQ2MDc0MDQ1NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiA5IDIwOjMyOjQ5IDIwMTEgKzAxMDAKKworICAgIEZpcyBCdWcgIzM0MzQ4MjQ6IFNJR1NFR1Ygd2hlbiByZWFkaW5nIGRpc2sgZGlyZWN0aXZlIGFmdGVyIFNJR0hVUAorCitjb21taXQgYTk0YTE3OWQ5MzQwZjUxZmE3YzIzNDMxNjMwYmMwZmZkNmQ3NTllOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiA5IDIwOjMwOjUxIDIwMTEgKzAxMDAKKworICAgIEZpeCBidWcgIzM0MzM2MTY6IGRvbnQgdHJlYXQgRGF0ZUFuZFRpbWUgYXMgYSBzdHJpbmcKKworY29tbWl0IGIyOWU0MTY0NTMxZDI1OGZlMzRhNmZlMmI5ZTFlYzYwYzU2Zjk1NDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBOb3YgNyAwMToyNTo1NyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKK2NvbW1pdCBlMjIxZTY1ZmRjMWM2OGYxOTY4NjUxNzE3ZGNjOWNjZmI2NDE0NzgzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDMgMTU6MDU6MDAgMjAxMSArMDEwMAorCisgICAgRml4IHdhcm5pbmdzIGFib3V0IGNvbnZlcnRpbmcgc29ja2FkZHJfaW4gKiBpbnRvIHNvY2thZGRyICouCisgICAgCisgICAgVGhpcyBpcyBhIGZvbGxvdy11cCBmb3IgY29tbWl0IGEwYWYzODUuCisKK2NvbW1pdCAyZTdlOWVkYTBiMGQ2MmE3NjQ1YTlhOGY3MGVmM2ZiNmYzZGQ2OTQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDMgMTE6MTc6NDggMjAxMSArMDEwMAorCisgICAgRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MuCisKK2NvbW1pdCAzNDYyZWJjZGQwYjdjMjk4Y2IxNWMzMDk5NzM2ZjRmOTUyMjU3ODQ2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDI4IDE2OjA3OjE1IDIwMTEgKzAyMDAKKworICAgIFJlbW92ZSB0aG9zZSBzdXBlcmZsdW91cyBwYXJlbnRoZXNlcyB0aGF0IHRyaWdnZXIgYSBjbGFuZyB3YXJuaW5nLgorCitjb21taXQgM2U1ZmVkZDNlN2QxZWYzMTY4MzYwNGJmNzNkYzU2ZTk0NGNhZDM0OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMyAwOTo0NToyNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBhZnRlciAzMCBkYXlzIG9mIHVwdGltZS4KKyAgICAKKyAgICBBZnRlciAzMCBkYXlzLCB2YWx1ZXMgZnJvbSAvcHJvYy9zdGF0IChvbiBMaW51eCkgY2FuIGdldCBiaWdnZXIgdGhhbiAzMmJpdHMgYW5kIHNubXBkIGNhbGN1bGF0aW9ucyBtaWdodCByZW5kZXIgY291bnRlcnMgbGlrZSBzc0NwdVVzZXIgbmVnYXRpdmUgb3IgemVybywgd2hpbGUgdGhlIHJlYWwgdmFsdWUgaXMgaGlnaGVyLiBUaGVyZWZvcmUgdGhlIGNvdW50ZXJzIHNob3VsZCBiZSB0cmFja2VkIGFzIHRoZSBsYXJnZXN0IGludGVnZXIgYXZhaWxhYmxlLgorCitjb21taXQgMGZjODIyMWIyNDk4OGM0YWU2MTgwZWQ0MmI4NmI5ODUyZmQ1ODZhZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyIDIyOjU5OjA4IDIwMTEgKzAxMDAKKworICAgIGRza0luZGV4IHdhcyBvZmYgYnkgb25lCisKK2NvbW1pdCBhNWIyODgyOWU2NGQ1ZjNiODdlNGI5YjFlZjhjYzIwNGYzM2E2MWI3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDIgMjE6MjU6MDcgMjAxMSArMDEwMAorCisgICAgU29sYXJpcyBuZWVkcyAkQVdLIHRvIGdldCBhIHVzYWJsZSBuYXdrCisKK2NvbW1pdCAyODAxYTIxMzlmMjcwMjFlMWFiMTVlMzYyZTJkM2Q2MjRmZmFhNDk0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDMxIDIyOjU1OjUzIDIwMTEgKzAxMDAKKworICAgIFBhdGNoICMzNDA2MzY0OiBGaXggdW5zdGFibGUgZGF0YSBmb3IgTmV0QlNELgorCitjb21taXQgODIxYTU4ZDExMmQ3YWM0OTUxNDllMjYyZDcwNDQxMmJhMjgwMDQzOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAzMSAyMjo0Mzo1MiAyMDExICswMTAwCisKKyAgICBGaXggaXB2NiBzdGF0aXN0aWNzIGxvb3BpbmcgdG9vIGZhciB3aGVuIHNjYW5uaW5nIGludGVyZmFjZXMuCisgICAgRml4IFRDUCBzZXNzaW9uIHRhYmxlIHJlcGVhdGluZyBkYXRhIGZyb20gZmlyc3QgZW50cnkgZm9yIGFsbC4KKworY29tbWl0IDM0OTU5MWQwM2UxN2E1NWI0M2VhY2M2YTY4N2IwMmZkOGQ0ZTk1MjgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBPY3QgMzEgMDg6NTk6MzcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBwZXJsIHN1cHBvcnQgd2l0aG91dCBzdXBwb3J0IGZvciBvcGFxdWUgdHlwZXMuCisKK2NvbW1pdCAxZWM3MTEwZTcyYmNlMTU2MWY3NDY1MTc0NTlkNmYwNDMwMTZiNjBlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDMwIDE5OjA1OjMwIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgdGhlIGFzbjEgdGVzdCBwYXNzIGV2ZW4gaWYgc3VwcG9ydCBmb3Igb3BhcXVlIHR5cGVzIGFyZSByZW1vdmVkLgorCitjb21taXQgNmQyNjkxOGFmNTVhYTM2NjJhNzIwNTQyZGU3N2JiZjM5YjBhM2U5MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAyOSAwODozNDozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgaW50ZWdlcjY0IGluIHBhc3Mgc2NyaXB0cyBpZiBjb21waWxpbmcgd2l0aG91dCBvcGFxdWUtc3BlY2lhbC10eXBlcy4KKworY29tbWl0IDI5YmY2OWQ3MDQyNGYzNTlkOWM4N2YwN2E5NjRhMDk5NDE1NjQ5YTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTM6MDI6MjUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkX3NxbDogQXZvaWQgdGhhdCBhIGxpbmtlciBlcnJvciBpcyB0cmlnZ2VyZWQgb24gc3lzdGVtcyB3aGVyZSBteV9wcm9nbmFtZSBpcyBtaXNzaW5nIGluIGxpYm15c3FsY2xpZW50IChlLmcuIEZlZG9yYSAxNSBhbmQgMTYpLgorICAgIAorICAgIFRoaXMgaXMgYSBiYWNrcG9ydCBvZiBjb21taXQgOWY2NTNmNy4KKworY29tbWl0IDJjYzk1MDRiOWJiODYyNWI5NGJlNmNkYTdlNjA5OTNkMDU5Y2Q5MjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMDk6MDE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzNDI4NTA2OiBGaXggbmV0c25tcF9nZXRob3N0YnlhZGRyKCkKKyAgICAKKyAgICBUaGlzIHBhdGNoIHNob3VsZCBmaXggdGhlIHJlZ3Jlc3Npb25zIGludHJvZHVjZWQgYnkgY29tbWl0IDg1ZDk2YzQgKE1heSAxMywgMjAxMSkuCisKK2NvbW1pdCA5YjQyN2IzNTNmMWNlYjhmZTg3ZTZmYzhlZDNiNmNmYWIzY2U3ZjIwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgT2N0IDI3IDA4OjIwOjAwIDIwMTEgKzAyMDAKKworICAgIE1pbkdXOiBBdm9pZCBjb25mdXNpb24gYmV0d2VlbiBNaW5HVydzIGtpbGwuZXhlIGFuZCB0aGUgU3lzSW50ZXJuYWxzIHBza2lsbC5leGUKKworY29tbWl0IDJjNDVmOTJjZmNiNWIwNWUwNDkyMjZhNWE3ODgzYTBiMTA2MDExYWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMTA6NDI6MjkgMjAxMSArMDIwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHBhc3NpbmcgYSBjb25zdCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9uLWNvbnN0IHBvaW50ZXIuCisKK2NvbW1pdCAyNzVkMjNlZGZkZWJlMDU3N2IwODQyMWU0YzZjOTM2YWUzOWI3ZmRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDI2IDA5OjMzOjA5IDIwMTEgKzAyMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBzZXQtYnV0LW5vdC11c2VkIHZhcmlhYmxlcworCitjb21taXQgNDQ5NWUxN2MwNzhhYzY5OTdhOWM3ZmExYTg4ZGIwNjQ0ZTkxOTQ5MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNiAwOTozMjo0NiAyMDExICswMjAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2FzdGluZyBhd2F5IGNvbnN0CisKK2NvbW1pdCAxMzk1MmY2YmVlOWY0MDg4NjdhYjZkMmZkZmRkZTRmMjg0MDc0OTU3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNiAxNDowNToxNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBmcm9tIFNpZGRoZXNoIFBveWFyZWthcjogcHJvcGVybHkgY2xlYW4gdXAgb2xkIHJlcXVlc3RzIGluIGEgc3ViYWdlbnQgd2hlbiB3ZSByZWNvbm5lY3QgdG8gbWFzdGVyLgorICAgIAorICAgIEFuIHNubXAgc3ViYWdlbnQgbGlua2VkIGFnYWluc3QgbmV0LXNubXAtbGlicyBtYXkgY3Jhc2ggaWYgaXQgaGFuZGxlcyBhCisgICAgcmVzcG9uc2Ugd2hpY2ggaGFzIG1hZ2ljIHJlZmVycmluZyB0byBhbiBvbGRlciBkaXNjb25uZWN0ZWQgbWFpbiBzZXNzaW9uLiBUaGlzCisgICAgbWF5IGhhcHBlbiB3aGVuIHRoZSBzdWJhZ2VudAorICAgIGF0dGVtcHRzIHRvIGNsZWFuIHVwIG9sZCByZXF1ZXN0cyBvbiByZWNvbm5lY3Rpb24gb2YgdGhlIGRpc2Nvbm5lY3RlZCBtYXN0ZXIKKyAgICBzZXNzaW9uLgorCitjb21taXQgYWUwNTI0NzJiMjI3MjBkMDgzNjllODUxMjdkYjIxNDI0NWRmMmUzZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMjUgMTY6MTU6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogZml4ZWQgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbHMuCisgICAgCisgICAgV2hlbiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIgZmFpbHMsIGl0IGZyZWVzIGl0cyByZWdpbmZvIC0+IG5zYWhyX0RFU1RST1kgKGFuZCBhbnkgb3RoZXIgZnVuY3Rpb24pIG11c3Qgbm90IGRlcmVmZXJlbmNlIGl0LgorCitjb21taXQgYzE5OWJmOTFiNjIzOWYyNmIyYWFiMzRlODU3NWUwZjBkZjljZGU5YgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjQgMTQ6MjU6MjggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHhmcywgamZzIGFuZCB2eGZzIGZpbGVzeXN0ZW1zIGFyZSBub3cgcmVjb2duaXplZCBpbiBoclN0b3JhZ2VUYWJsZQorCitjb21taXQgNzQ3ZmRjNzFlNjRkMDllMDgwOTI4ZWJiYjRkMDRjYmRlMzkwNjc5OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgNSAxNTo1Nzo1OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTG93ZXJlZCBzZXZlcml0eSBvZiAnZXJyb3IgZmluZGluZyByb3cgaW5kZXggaW4gX2lmWFRhYmxlX2NvbnRhaW5lcl9yb3dfcmVzdG9yZScgbWVzc2FnZS4KKyAgICAKKyAgICBUaGUgbWVzc2FnZSBpcyBzaG93cyB1cCB3aGVuIHNubXBkIGlzIHN0YXJ0ZWQgYW5kIHRoZXJlIGlzIGRpZmZlcmVudCBzZXQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHRoYW4gaXQgd2FzIHdoZW4gc25tcGQgd2FzdCBsYXN0IHN0b3BwZWQuIFRoaXMgaXMgY29tbW9uIG9uIHBwcC1zZXJ2ZXJzIG9yIHZpcnR1YWwgaG9zdHMuCisKK2NvbW1pdCAyNTBmNjk4ZTU5ZWFiOWYxZmZkMzMyZmY1OWZkYjcyZWEwZGYwNmZmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIzIDA4OjUxOjIzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb2RlIHdvcmsgYWdhaW4KKyAgICAKKyAgICBQcmV2aW91c2x5IHRoZSB0cmFuc3BvcnQgaW5oZXJpdGFuY2UgcHJvY2Vzc2luZyBjb2RlIHJhbiB3aXRoCisgICAgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HIHNldC4gSW4gdGhpcyBtb2RlIHRoZSBmaWxlIG5ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisgICAgaXMgcmVxdWllcmVkLiBUaGF0IGZpbGUgaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGZpcnN0IG1ha2UgcnVuLCBhbmQgdGhhdCBoYXBwZW5zCisgICAgYWZ0ZXIgY29uZmlndXJlIGlzIHJ1bi4KKyAgICBDaGFuZ2UgdGhpcyB0byB1bmRlZmluZSBORVRTTk1QX01JTklNQUxfQ09ERSwgZWZmZWN0aXZlbHkgdHVybmluZyBvZmYgZmVhdHVyZQorICAgIHN1cHBvcnQgZHVyaW5nIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIG1ha2UgaXQgd29yayBhdCBhbGwuCisKK2NvbW1pdCA2ZWY2OTA3NjQyMjQ3YzY2M2I5Yjg5NjRiOWZkNDRhMjExZGJjYWE3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgT2N0IDIwIDIwOjMwOjU0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MDgzOTg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuCisgICAgCisgICAgVGhpcyBtZW1vcnkgbGVhayB3YXMgaW50cm9kdWNlZCB2aWEgY29tbWl0CisgICAgOWJmM2Q5NmQ5NmE4ZWNkNGE1ZmMzNWMzMjZkYzkzNzQ2NzAwMmI2YzogSW5pdGlhbCBIQUwKKyAgICBpbXBsZW1lbnRhdGlvbiBvZiBGaWxlU3lzdGVtIGluZm9ybWF0aW9uIChNYXJjaCA3LCAyMDA4KS4KKworY29tbWl0IGNmODJiODk0YjIyMTdjMjZlZGM2ZjEzNTYzNTFjOTMyNDE1NjA0ZTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBPY3QgMTUgMTQ6NDU6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzNDIzOTE1OiBDaGFuZ2UgZGVmYXVsdCBudW1iZXIgb2YgcmV0cmllcyBiYWNrIGZyb20gMCB0byA1CisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIHZpYSBjb21taXQgNmNhYzA1MCAoTWF5IDUsIDIwMTEsCisgICAgYWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgcmV0cmllcyBpbgorICAgIHNubXBkLmNvbmYpLgorCitjb21taXQgYzExYWRhYTEyOTE1YWJmZWU2MjliYjZjMDI2YzIxZjIxODViMjE2ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxNyAxMDoyNDo0NiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogQXZvaWQgdGhhdCBjb21waWxpbmcgdGhlIGhlYWRlciBmaWxlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gd2l0aCB0aGUgTWluR1cgZ2NjIGNvbXBpbGVyIHRyaWdnZXJzIHdhcm5pbmdzIGFib3V0ICJwcmFnbWEgY29tbWVudCIuCisKK2NvbW1pdCBiMTdhNzJhNzkzNDgzYWVlNGE1YmIyZjJlMmM3ZjRmZDg2OTgxN2U2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDE3IDEwOjIyOjIwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBBdm9pZCB0aGF0IHRoZSBQQUNLQUdFXyogbWFjcm9zIGRlZmluZWQgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYXVzZSB0cm91YmxlIHdoZW4gaW5jbHVkaW5nIHRoaXMgaGVhZGVyIGluIGEgcGFja2FnZSB0aGF0IHVzZXMgdGhlIEdOVSBhdXRvdG9vbHMuCisKK2NvbW1pdCA2NjRkM2FlMTA3ZDc1NDA1MWI4YzQyMjc5ZDQ1OWFhNTdhMWJlMWMzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDEwIDE2OjQ3OjE2IDIwMTEgKzAyMDAKKworICAgIE1pbkdXLCBod19mc3lzOiBVc2UgcHJvcGVyIGZvcm1hdCBzcGVjaWZpZXJzIGluIGEgZGVidWcgc3RhdGVtZW50LgorICAgIAorICAgIFRoaXMgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW50cm9kdWNlZCBpbiBjb21taXQgNzZmZjI1ZC4KKworY29tbWl0IDIxMWRjYjQ5MzA2NTYxZTM1YmEzYzIxM2JlN2NmYTI1N2I0MGE4ZTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTU6NTI6NDMgMjAxMSArMDIwMAorCisgICAgQXZvaWQgdGhhdCBnY2MgNC42IGNvbXBsYWlucyBhYm91dCBzZXQgYnV0IG5vdCB1c2VkIHZhcmlhYmxlcworCitjb21taXQgOWY2NTNmNzNlNWFhNzBmMGJlZjExNzQ2MzJlOTU1OTRmODdmNjY5ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxMCAxMzowMjoyNSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGRfc3FsOiBBdm9pZCB0aGF0IGEgbGlua2VyIGVycm9yIGlzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdoZXJlIG15X3Byb2duYW1lIGlzIG1pc3NpbmcgaW4gbGlibXlzcWxjbGllbnQgKGUuZy4gRmVkb3JhIDE1IGFuZCAxNikuCisKK2NvbW1pdCA0YzgzYjkyMjlhNzQ1NGYzNGY2ZmY3NWY2OWU2N2U0MDMwYzQxOWI1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDcgMTU6NTg6NDUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2V0IHRoZSBycGF0aCBmb3IgbGlicGVybC5zbyBpbiBsaWJuZXRzbm1wbWlicy5zbyBzdWNoIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIGNhbiBmaW5kIGxpYnBlcmwuc28gd2l0aG91dCByZXF1aXJpbmcgdGhlIHVzZXIgdG8gbW9kaWZ5IHRoZSBkeW5hbWljIGxpbmtlciBzZXR0aW5ncy4KKyAgICAKKyAgICBUaGlzIGNoYW5nZSBpbiBhZ2VudC9NYWtlZmlsZS5pbiBpcyBuZWNlc3Nhcnkgb24gdGhlIDUuNSBicmFuY2ggYW5kCisgICAgbGF0ZXIgYnV0IG5vdCBvbiB0aGUgNS40IGJyYW5jaC4gVGhhdCBpcyBiZWNhdXNlIHRoZSA1LjQgYnJhbmNoIHVzZXMKKyAgICBhbiBvbGRlciB2ZXJzaW9uIG9mIGxpYnRvb2wgdGhhdCBwcm9wYWdhdGVzIHRoZSBycGF0aCBvZiBkZXBlbmRlbnQKKyAgICBsaWJyYXJpZXMuIFRoaXMgaXMgY2FsbGVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jeSB0cmFja2luZyBpbiB0aGUKKyAgICBsaWJ0b29sIG1hbnVhbC4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgaW4gbGlidG9vbCB2ZXJzaW9uIDEKKyAgICBidXQgbm90IGluIGxpYnRvb2wgdmVyc2lvbiAyLiBGb3IgbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGFib3V0CisgICAgZHluYW1pYyBsaWJyYXJpZXMgYW5kIHJwYXRocywgc2VlIGFsc28gdGhlIGRvY3VtZW50IHdpdGggdGhlIHRpdGxlCisgICAgIlJwYXRoSXNzdWUiIG9uIHRoZSBEZWJpYW4gd2lraSAoaHR0cDovL3dpa2kuZGViaWFuLm9yZy9ScGF0aElzc3VlKS4KKworY29tbWl0IDg5MjVjOTEyZDI2Mzk3NTJhODRiY2ZmZWVmMWI3MGE4MTAyNjQ0OWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBPY3QgNyAxNDoyMToyOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogSE9TVC1SRVNPVVJDRVMtTUlCOiBBZGQgbWlzc2luZyBicmFjZSBpbiBhIGRlYnVnIHN0YXRlbWVudAorCitjb21taXQgNzZmZjI1ZDliZjk3NTc5ZTcyMTMxMDIwNjVmZDUwOTZmMDQ5YTRjNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE9jdCA3IDE0OjEzOjE4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3RvcmFnZVRhYmxlOiBmaXggYnVnIGluIGhhbmRsaW5nIGxhcmdlIGZpbGVzeXN0ZW1zLCB3aGVyZSBsYXJnZSBtZWFucyBhYm92ZSA4IFRCICg9IDIqKjMxICogNDA5NiBieXRlcykuCisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdAorICAgIDcxZDgyOTNmMzg3YTZjZDY2YmIwZGJiMTNjMGY1MDE3NGQyZTY3OGIuCisgICAgRm9yIHRoZSBvcmlnaW5hbCBidWcgcmVwb3J0LCBzZWUgYWxzbworICAgIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTEyNjk0JmFpZD0zNDE5ODI1Jmdyb3VwX2lkPTEyNjk0LgorCitjb21taXQgODY2MDMzZGI5OTA0ZmZiMTIwM2YyODNmODM4MDkyZTRjZjY4ZGU2YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE9jdCA2IDA3OjMzOjI3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgc3B1cmlvdXMgI2VuZGlmIHRoYXQgc2VlbXMgdG8gYmUgdGhlIHJlc3VsdCBvZiBhIG1pc21lcmdlLgorCitjb21taXQgMjBmNGYzMjY3ZWUyMGQ1NTcwNWI3YTQzNzg5ODc5YzEwM2Y5NjYyMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE9jdCA2IDAwOjA4OjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgbWlzc2luZyBlbmQgY29tbWVudHMgdG8gZmVhdHVyZSBpZm5kZWZzLgorCitjb21taXQgZTVkZTJjYzU3YmYzMDRmMzMyMGNhZDAwMzRkMmVhMmQ4YWVkYzQzNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCA1IDA5OjE1OjEwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBMb2cgYSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgaWYgZW1iZWRkZWQgcGVybCBpbml0aWFsaXphdGlvbiBmYWlscworCitjb21taXQgNWVlZjk5OTBkZTI4ZjYzMTExZTZjMDkzYmUwZjNjN2FlMmQ1MTNhMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCA1IDA4OjQ1OjQ5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEFkZCBhZ2VudDo6dXB0aW1lKCkKKworY29tbWl0IDY4MTBlZDQyZjliYzU2MDc1MGQ2ZGJmYjdlNTBiNmUyYWMxMTg5OWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTE6MDE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogQ3l3aW46IGFnZW50OiBJbXBsZW1lbnQgZ2V0X3VwdGltZSgpIHN1Y2ggdGhhdCBxdWVyeWluZyBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3lzdGVtVXB0aW1lIHJldHVybnMgYSBub24temVybyB2YWx1ZS4KKworY29tbWl0IDk3MTcyYjMxMWQyMGY0NDQxYzdhN2U5MDA5MmI1OWMxZTBkYTk5ZjcKK0F1dGhvcjogVGhvbWFzIEphcm9zY2ggPHRqYXJvc2NoQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCA1IDA4OjQ2OjM5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFBBVENIOiAzNDE4NjQ5OiBIT1NULVJFU09VUkNFUy1NSUI6IFVzZSBwY2xvc2UoKSBpbnN0ZWFkIG9mIGZjbG9zZSgpIHRvIGNsb3NlIGEgcGlwZS4KKworY29tbWl0IDY1OTE5MzdhZGI4NTAwMGMyNzA2OWM0YmU4NGNmNDY4ODgzOGViY2QKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNjoxODowMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIGRlcGVuZGVuY2llcyBvbiBARkVBVFVSRVRBUkdTQCB0byBtYWtlIHRoZSBzdWJ0YXJnZXQgd29yayBhcyB3ZWxsLgorCitjb21taXQgYjljODAxMmVjMDM1YmMwODRmMTc1ODc2ZmVjYzM3NTE5NWY5YmU4MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDE0OjAyOjU4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgdGFyZ2V0IHRvIGJ1aWxkIGFnZW50eHRyYXAgZnJvbSB0aGUgdG9wbGV2ZWwKKworY29tbWl0IDk5NTY0N2MwY2ZlMDA0MTIyNjJjYzU3OTdiZGZhZTlkMDBiNzBjNzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNTo0NDozNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIHRoZSB1c2Ugb2YgLUwgZmxhZ3MgZm9yIGludGVybmFsIGxpYnJhcmllcyBhcyBpdCBjb25mdXNlcyBsaWJ0b29sLgorCitjb21taXQgOTNkYzEyMzVhMGRiNThmZmQyOTYxN2NmZjAwZGMxMTI2Mzc4MDIwMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDExOjMxOjQ2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIG1ha2UgYXBwcyB3b3JrIGFnYWluCisgICAgCisgICAgYXBwcyBpbmNsdWRlIHNubXB0cmFwZCBhbmQgdGhhdCByZXF1aXJlIHRoZSBhZ2VudCBsaWJyYXJpZXMgYXMgd2VsbC4KKworY29tbWl0IGJhNDE0ODhlZDQ0Y2QyM2MyNTk2M2Q0ZmM1NmM0NzY4NTNiMmFiNTkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxMToyOTozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogV2hlbiB5b3Ugc2F5IG1ha2UgbGlicyB5b3UgZXhwZWN0IGFsbCB0aGUgbGlicyB0byBiZSBidWlsdC4KKyAgICAKKyAgICBUaGlzIGlzIGRlbW9uc3RyYXRlZCBieSB0aGUgc25tcHRyYXBkIHRhcmdldCBhdCB0aGUgdG9wIGxldmVsIHdoaWNoIG9idmlvdXNseQorICAgIGV4cGVjdGVkIGJvdGggbGlicyB0byBiZSBidWlsdCBhbmQgc28gZmFpbGVkIHRvIGNvbXBpbGUgYmVmb3JlIHRoaXMgcGF0Y2guCisKK2NvbW1pdCAzMDU3YzczZTA5MzQ3M2JlNDYyNTRiY2RmYjRjYTc4OGU0MzJkMWI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAzMCAwNzozMjo1MiAyMDA4ICswMDAwCisKKyAgICBORVdTOiBidWlsZGluZzogUEFUQ0g6IDIwOTExNTY6IGNvcnJlY3RseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBpbiBNYWtlZmlsZS4KKyAgICAnbWFrZSAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4KKyAgICAKKyAgICBCYWNrcG9ydCB0aGlzIHRvIFY1LTQgYXMgaXQgaXMgbmVlZGVkIGZvciBjb3JyZWN0IG9wZXJhdGlvbiBpbiB0aGUgc2luZ2xlCisgICAgdGhyZWFkZWQgY2FzZSBvZiBtYWtlIG1pYmxpYiBhcyB3ZWxsLgorCitjb21taXQgNmVhZTM0MGZhMmE2NDA4NjU5Mjk4MmNjNTI3MzViYzAxNDg3ZDk3OAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAxIDE5OjMzOjUwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBTaWxlbmNlIGxpYmJzZCAwLjMuMCBuYWdnaW5nCisgICAgCisgICAgSWYgeW91IGhhdmUgbGliYnNkIDAuMy4wIGluc3RhbGxlZCB0aGVuIHRoZWlyIHZlcnNpb24gb2Ygbmxpc3QuaCB3YXJucyBhbmQKKyAgICB0cmllcyB0byBtYWtlIHlvdSBpbmNsdWRlIGJzZC9ubGlzdC5oIGluc3RlYWQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZG9uJ3QKKyAgICBuZWVkIHRoYXQgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IGFzIHdlIGtub3cgaG93IHRvIGRvIGl0IG91cnNlbGYgc28gaXQgYmVjb21lcworICAgIHB1cmUgbmFnZ2luZy4gVGhpcyBwYXRjaCBhZGRzIGEgZGVmaW5lIHRoYXQgY2hhbmdlcyB0aGUgd2FybmluZyBpbnRvIGFuCisgICAgZXJyb3IgYW5kIHRoZW4gZmlndXJlcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB1c2FibGUgbmxpc3QuaCBhbmQgaWdub3JlcyBpdAorICAgIGZvciB0aGUgZnV0dXJlLgorCitjb21taXQgYWMzOGNiNTMxYmVlNTBlZGM4ZDRjODM0ZjMwMDVmNTk5MmM3NzFkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyOSAxOTowMzowMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBFbmFibGUgc2VuZGluZyBTTk1QdjIgdHJhcHMgd2l0aCBhbiBlbXB0eSB2YXJiaW5kIGxpc3QKKworY29tbWl0IGE3NWRlMjk3MTUyN2FjMmQyZTgxMjAyNDI5ODYwMmJiMjQxMmYzMzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTA6NDE6NDQgMjAxMSArMDIwMAorCisgICAgcGVybC9TTk1QL1NOTVAueHM6IFVwZGF0ZSBlbWFjcyBtb2RlbGluZQorCitjb21taXQgODQ4ZjYzMDBlZmUzODQ5MmZiNDU0NDUxYTAzMGYwYjdlNmZmOGM5ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIFNlcCAzMCAxMDo0MTo0NCAyMDExICswMjAwCisKKyAgICBwZXJsL1NOTVAvU05NUC54czogVXBkYXRlIGVtYWNzIG1vZGVsaW5lCisKK2NvbW1pdCBjMTM3NDQ3M2VjZDhlYzllMDMxMDAxMzg2MWVlMThjODNlNWQ2YzViCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgU2VwIDMwIDAzOjI5OjM2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFByb3RlY3QgdGhlIHVzZSBvZiAkT1NUWVBFIHRvIGVuc3VyZSB0aGF0ICd0ZXN0JyBnZXQgZW5vdWdoIHBhcmFtZXRlcnMuCisKK2NvbW1pdCA3ZTk3YTIwNjMzYTU3ZWFlMzlkMDE1YjIzMzM5NDYzYzMyZjVmODQ4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDI5IDEwOjIyOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IENvbnZlcnQgc25tcGxpYi90ZXN0X2JpbmFyeV9hcnJheS5jIGludG8gdHdvIHVuaXQgdGVzdHMKKworY29tbWl0IDljMGRkOTgxNzY0NTczNDJmZmZhYTVlNzRkODAyZTMxNDVlZDcwZTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMDg6NTY6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIHVuaXQgdGVzdCBmb3IgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkKKworY29tbWl0IDVmZDI2ZTRmYTNlMDAwZWE5YzgxYzM4YWI5NzViNzk0NmVmZTIxNTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBTZXAgMjggMTc6NDk6NTUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IEF2b2lkIHRoYXQgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkgZmFpbHVyZSB0cmlnZ2VycyBhIGRvdWJsZSBmcmVlLgorICAgIAorICAgIEZpeGVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIHZpYSBjb21taXQKKyAgICBhYTRkNDdjMjYwOWU1MjgxOGM5Y2RmMWE4ZTIyMDVkZTlhMzM1YTBhIChzdm4gcjE5NTE1KS4KKworY29tbWl0IGQyMjUyZDAxNjY5MzgwNzMyNmY3MmI2NjEyMzY0OWRlYTAwYWY5MTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMTA6MjA6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUmVxdWlyZSBhIHNlbWljb2xvbiBhZnRlciBPSygpLCBPS0YoKSBhbmQgUExBTigpCisgICAgCisgICAgQWxzbywgbGV0IE9LRigpIGVtaXQgYSBzaW5nbGUgbGluZSBvZiBvdXRwdXQgc3VjaCB0aGF0IGFsbCBvdXRwdXQgaXQKKyAgICBwcm9kdWNlcyBpcyB2aXNpYmxlIGluIHRoZSBvdXRwdXQgb2YgIm1ha2UgdGVzdCIuCisKK2NvbW1pdCAxNDIxOTI0YjQ4NTIxNDIxOTJjNWJiOWU5M2RkYmZlZDY5ZTkwOGZhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgU2VwIDIxIDIyOjIwOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEF2b2lkIHdhaXRpbmcgaW5kZWZpbml0ZWx5IGlmIGEgc2Vzc2lvbiBoYXMgdGltZW91dCB6ZXJvCisKK2NvbW1pdCA1ZjI3ZjRmNzRhZTJiZDViYWY1MDNjZjMwNmI0ZjlhMjg0MWE1N2NmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6MzI6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSB0ZXN0IHJ1bm5lcgorCitjb21taXQgMDk3MDM5NThjYzVlYTg0NTkyOWFlMTllZjllMDgwNGFlY2FhNTEyZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyNyAxMjo0Mjo0MSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBdm9pZCBmYWxzZSBuZWdhdGl2ZSBmb3IgVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlIGNhdXNlZCBieSB0aGUgdGVzdCByZXN1bHQgYmVpbmcgcHJlc2VudCBpbiB0aGUgaGV4IGR1bXAgKCJtb3N0bHlfaGFybWxlc3MiKQorCitjb21taXQgNDM5MzAwMjc5ZjZmMzE0Mzg2MzhkMmYyMjJjMjRjM2M4NDFmYTZhYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyNyAxMToxNjozMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWljcm8tb3B0aW1pemUgYWdlbnQgbW9kdWxlIGRlcGVuZGVuY3kgYW5hbHlzaXMKKyAgICAKKyAgICBUaGlzIG1ha2VzIHRoZSBhZ2VudCBtb2R1bGUgZGVwZW5kZW5jeSBhbmFseXNpcyBjYXJyaWVkIG91dCBieSB0aGUKKyAgICBjb25maWd1cmUgc2NyaXB0IHNsaWdodGx5IGZhc3RlciwgZXNwZWNpYWxseSBvbiB0aG9zZSBzeXN0ZW1zIHdoZXJlCisgICAgZm9yaygpIGlzIGV4cGVuc2l2ZSAoQ3lnd2luKS4KKworY29tbWl0IGJiYzY4MDAwNGExMzc2MDM4ZGZkYzQxNzJkYmU3YjllMzExZmJhNjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMjYgMTA6MTQ6NDUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdGVzdCBUMTMwc25tcHYxdmFjbWdldF9zaW1wbGUgcGFzcworCitjb21taXQgNzBiMDZjZjc4OTIwOGVhYTg5MGJmYmNkNjM4YmRiNzc1ZjgxNzA1NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyMCAwOTo1MDo1NyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiB0ZXN0aW5nOiBwZXJsOiBGaXggYW4gaW5jb3JyZWN0IG1lc3NhZ2UgcHJpbnRlZCB3aGlsZSBydW5uaW5nIHRoZSBQZXJsIG1vZHVsZSByZWdyZXNzaW9uIHRlc3RzCisKK2NvbW1pdCA3MGJjYzhkZTJkMGZjOTJiYmI4NDgxODIzNjMwZmFiOWJjODdhZjc1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgU2VwIDE2IDE2OjE0OjI0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBPYnRhaW4gdGhlIE1TWVMgcGF0aCBmcm9tIHRoZSBlbnZpcm9ubWVudAorCitjb21taXQgNjI2Mjc1ZTJkMWFjYWZhZTcxNDRhMzNlZDMwMWE0MGY1OTZiMzdiMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIFNlcCAxNCAxMzoxNDoxNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBSZW1vdmUgc3VwZXJmbHVvdXMgbGluayBsaWJyYXJpZXMgZnJvbSBwcm9qZWN0IGZpbGVzICgqLmRzcCkKKworY29tbWl0IDM4ZmMzY2FhOWVlYjM4MDAyNTRiNGY2YWQ2ZjhmNDc2NGMwZjgzZGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMjAgMDk6MzQ6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2NhbGxiYWNrX2FjY2VwdCgpIHJldHVybiAtMSAoZmFpbHVyZSkgaW5zdGVhZCBvZiAwIChTVERJTl9GSUxFTk8pCisKK2NvbW1pdCA2YzhjN2U4YWNhOGZjMmVlYjUyMDEwYWUzZTlmZWU2ZGQ4M2VmNzgwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDEzIDA5OjU4OjI2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFJlbW92ZSBvYnNvbGV0ZSBzbm1wX2dldF9mZF9mb3Jfc2Vzc2lvbigpIGRlY2xhcmF0aW9uCisKK2NvbW1pdCAwODYwZDExZmQ4ZmM1ZGJkYWFhZTIyNjFmYWUyYzA3ZmI5YzJjODJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDggMTM6NTQ6NTUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogQXZvaWQgdGhhdCB0aGUgdHlwZWRlZnMgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjb25mbGljdCB3aXRoIHRob3NlIGluIDxzdGRpbnQuaD4gZnJvbSB0aGUgbXNpbnR0eXBlcyBwcm9qZWN0CisKK2NvbW1pdCBmOGEwMzZmNjNmZjY4ZjA4MzQzNjEyMGUwYWJkNDc4YjY5MmEyZjYxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDggMTM6MjE6MDYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogV2hlbiBsaW5raW5nIHdpdGggT3BlblNTTCwgbGluayB3aXRoIHVzZXIzMi5saWIgdG9vCisKK2NvbW1pdCA4MzZhMjNlMTBjYTgxMGMzODk5OTAyZDMyNTg3NjE2YTlkMTIwM2RmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSnVsIDE0IDE4OjM4OjEzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IE1TVkM6IExpbmsgd2l0aCBwcm9wZXIgbGliZWF5MzIgbGlicmFyeQorCitjb21taXQgN2IwN2ZkNmNkZWY0OWVjN2JiMDRiMTY2ZTJhNGZiYjM3YjU4Mjg0MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDExOjEwOjM4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFJlbW92ZSBhbiBpbmNvcnJlY3QgY29tbWVudCBmcm9tIHNpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK2NvbW1pdCA5OGY2ZDI5ZDk4MWZmOGU2MDc2MDBjNjNkYWRiMjQwNTM1NjI5ODA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6NDk6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSBJU0RFRklORUQoKSBjaGVjayBmb3IgYW4gZXhhY3QgbWF0Y2ggaW5zdGVhZCBvZiBhIHByZWZpeCBtYXRjaAorCitjb21taXQgNTJjZDAwMzFhMzFmNjkyZjEzMjYzYTk0YzMzNWQwNmJlMTQ1NDgwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBNYWtlIHRob3NlIHJlZ3Jlc3Npb24gdGVzdHMgcGFzcyBmb3Igd2hpY2ggU05NUENPTkZQQVRIIGFuZC9vciBTTk1QX1BFUlNJU1RFTlRfRElSIG1hdHRlcgorCitjb21taXQgZjVjZDg5YmQzMzU2ZGQ3NGUxNTU2YzBiNTA5NjZhNjQzZjE5MjA4NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdGVzdCBmcmFtZXdvcmsKKworY29tbWl0IGRlZWRkNTJjODM0YTY0NDg4NTJhMDY3ODU1MzZlMTM4NjU5Njk2OTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDoxMjo1OCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogU3VwcG9ydCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBvZiByZWNlbnQgU2hpbmluZyBMaWdodCBPcGVuU1NMIGJpbmFyeSBkaXN0cmlidXRpb25zCisKK2NvbW1pdCBkNTViZDRlMDU0OWYwM2I2ZmQzMjU2MmMyYWE3ZmUzOTI3MmE5ZWY3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDI4IDA2OjU1OjE5IDIwMTEgLTA3MDAKKworICAgIHJlbW92ZSB0aGUgdjUuNyBmcm9tIHRoZSBmcm96ZW4gbGlzdAorCitjb21taXQgYWMyYWVkM2M5NGJiMmViYjQ3M2FmMGExZTIwZjA1NjFhZDYyOTk1NgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAyOCAwNjo1NToxMSAyMDExIC0wNzAwCisKKyAgICByZW1vdmUgdGhlIHY1LjcgZnJvbSB0aGUgZnJvemVuIGxpc3QKKworY29tbWl0IDQ2ZWFjMDJlOWEyN2JmNGYzMDY4ZTc5NWNhYjg5MWYwNWE4NDg4NzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMjYgMjE6NDk6MjcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEF2b2lkIHRoYXQgc25tcGQgY3Jhc2hlcyBpZiBzdGFydGVkIG9uIGEgc3lzdGVtIHdpdGggYW5vdGhlciBPcGVuU1NMIGxpYnJhcnkgdmVyc2lvbiB0aGFuIHRoZSBvbmUgaXQgaGFzIGJlZW4gYnVpbHQgd2l0aC4KKwkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy4xIC0+IFY1LjcuMi5wcmUyCisKK2NvbW1pdCA4MTAxODVhZTBiMGNkMmFkNGQ0MjRhMWJhNzc1ZWY1Y2VhZjUwZjAzCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTYXQgSnVuIDIgMDk6MjQ6MTkgMjAxMiAtMDcwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNy4yLnByZTEKKworY29tbWl0IDYyNzE0NzFlMDEyODJmMzY3NTcyNGVhZjEzNThjZWIwZTk1ZGRkNGUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwODozMjo0MCAyMDEyIC0wNzAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4yLnByZTEKKworY29tbWl0IGZjYjc4MmFhODg5MzEzNGM3NDE0YTkyNmQ5MjY4NTk0ZjcyNWI5MTUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBKdW4gMiAwODozMjoxOCAyMDEyIC0wNzAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LjIucHJlMQorCitjb21taXQgZTNiY2Q4N2M3MmZjZWE3NzA2ZTg2OGI1YWNlNzUyOTYwOTNmNzQ5NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTQ6MDk6NDIgMjAxMiArMDEwMAorCisgICAgRml4IGRpc3QvcmVsZWFzZSBmb3JtYXQKKworY29tbWl0IGQ4MTNjZTJlZWVmYzY4MjI5Y2ZjYWYyMDYwMzI0NGNkZDZkMDlkM2MKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDE0OjA3OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeCBkaXN0L3JlbGVhc2UgZm9ybWF0CisKK2NvbW1pdCBmYTdiZDU4MWUzNzgzNjg1ZGIzOWM5YjRlYWY4NDdiZTVhYzg2ZmQzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MzoxMCAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMyCisKK2NvbW1pdCAwNzM5ZTIzODJkMzExNDZhY2EzMjA1MjQ0Y2Y3MDc4OGI0MGE0MjhkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MTo0NSAyMDEyICswMTAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS42LjIucmMyCisKK2NvbW1pdCBkOWExNTQ0NWFhNzRmNTMxNmJmYzcxMWMxNTU4NDY3ODcyYzI5NThjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzo1MDoxMiAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucmMyCisKK2NvbW1pdCBiY2FiZDJjOTU0MmRiZWJkMWQzMTliNDQ5NDQxM2JkY2NhMDY2MTRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODozOCAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNi1wYXRjaGVzCisKK2NvbW1pdCBiNDczODk4YzBjNWFjOWViNDdjN2MwNWEzZjc0NWU0ZmYyYTc2YWFhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMzozODoyOCAyMDEyICswMTAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnJjMgorCitjb21taXQgMTMxNDI5ZTcwNjJmYmFhNjViODJhZmZlZDFmYjkyZGYyYzBjYzgxMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6Mzg6MzggMjAxMiArMDEwMAorCisgICAgUmVsZWFzZSBDYW5kaWRhdGUgZm9yIFY1LTYtcGF0Y2hlcworCitjb21taXQgMWM4MTEwYjMzYjgxMDVjYTYxOTA5NDVhMzVmZTdhZTkwMzI1MmQ2OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXkgMzEgMTM6MjE6MzggMjAxMiArMDEwMAorCisgICAgQXZvaWQgcGVybCB2ZXJzaW9uaW5nIHByb2JsZW1zIHdoZW4gc2V0dGluZyB1cCB0aGUgYnVpbGQgZW52aXJvbm1lbnQKKworY29tbWl0IDUwOGVjZTE2ZTZmNmY0OTU2MmRhMjA0NzkyYWUwNjQ0MjY5OTk0ZDEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEzOjIwOjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBoYW5kbGluZyBvZiBkaXN0L3JlbGVhc2UgbWVyZ2UKKworY29tbWl0IDViOGE4NTQ3YjFhNDdkMmY1YjIwN2Y0OGYyNDk2ZTQyNDFkOTAyYzYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjEwOjQ4IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDZjMzI5MTRiZjI4ZDY5NWRmMzQ5ZGNhMjY5ZTQ4OGI1MDE3MDAzMTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjA3OjIyIDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDlmNWE4MmE1YWZkYmIzZGFlYjJmZDQzN2EzMDlmMGI4ZDM1N2NmNGIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDExOjA1OjM5IDIwMTIgKzAxMDAKKworICAgIG1ha2UgZGVwZW5kIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDM5MjAzZjI5NDc3YTNiZWRmMDEyZDQxMTM1ZDhhYmQ2YmNhZDA4YjEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjU0OjI3IDIwMTIgKzAxMDAKKworICAgIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciA1LjUuMi5yYzIKKworY29tbWl0IDE3ZTc5ZWYwZmFkNzk2MDljNWJhMmZlYjRlOGI5ZWI1ZDdkYjY4ODYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ2OjExIDIwMTIgKzAxMDAKKworICAgIFJlbGVhc2UgQ2FuZGlkYXRlIGZvciBWNS01LXBhdGNoZXMKKworY29tbWl0IDU4MjFiZTViYmI0MDE4ZGVkMjgyZmJiYmQ0ODMwY2YyZWVhZGQ5ZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWF5IDMxIDEwOjQ1OjU5IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS41LjIucmMyCisKK2NvbW1pdCAzZjIxMTFkZTY3MzNhMDRlMTJkOTEwZDMwNmEzNGQ2NzFlMDA4NzYyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IE1heSAzMSAxMDo0NjoxMSAyMDEyICswMTAwCisKKyAgICBSZWxlYXNlIENhbmRpZGF0ZSBmb3IgVjUtNS1wYXRjaGVzCisKK2NvbW1pdCBjY2Y4ZmYyYzRkYjYwMTIyZDQxMzAyZTRhZWI3MDBlMGI4NjgxMDVmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSAyOCAxMDoxODo0MyAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNTI2NTk5OiBEb24ndCBoYW5nIG9uIHJldHJpZWQgZmFpbGluZyBTTk1QdjMgcmVzcG9uc2VzCisKK2NvbW1pdCBjODFjODQ4Mzk5MDkxMWY0NzQzNWQzMDA1MjU1ZDkxYzM3YWI5MmIyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDE0OjA5OjI2IDIwMTIgKzAyMDAKKworICAgIEZpeCBCU0QgdGhhdCBkb3dubm90IGFsd2F5cyBsaWtlIElQX1NFTkRTUkNBRERSIC0gc28gcmV0cnkgd2l0aG91dAorCitjb21taXQgZmZjZTFmMmRjMmY4YjMxYWJkMDFmOTNiMjZkYTc4ZjQ3MjZhMWU2NAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE1heSAyNyAxNDowMzo1OCAyMDEyICswMjAwCisKKyAgICBGaXggT1MgbWlzc2luZyBNU0dfRE9OVFdBSVQgKEFJWCkuIEJhY2twb3J0IGZyb20gNS43CisKK2NvbW1pdCBjNTc1MjE2ODUwMTg1YjU2NDU0ZGFkMDI1M2UzMTY0OTc5ZTEzNTEzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWF5IDI3IDEzOjU2OjAxIDIwMTIgKzAyMDAKKworICAgIEZpeCBtaXNzaW5nIGluY2x1ZGUuIEZpeGVzIFNJR1NFR1Ygb24gRnJlZUJTRDkgeDY0CisKK2NvbW1pdCA1ODA1ODc4NzQ5YzA4MDYyZGViZjBhOWQ3OThkMDhmYjkxNmNhYTJkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gTWF5IDI3IDA2OjIzOjE5IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbWlzc2luZyBkZWJ1ZyB0YWcKKworY29tbWl0IGQxYTQyYmJjYzdiMTQ3MzBjOWE2ZDk5YzRmMDQ3MDk3ODQzYTU0OWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXkgMjUgMDk6MDI6MjcgMjAxMiArMDIwMAorCisgICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJ1biBsaWJ0b29sIC0tbW9kZT1maW5pc2ggb24gdGhlIHJpZ2h0IGRpcmVjdG9yeQorCitjb21taXQgMWZiZjMzNzExYTE5ZWFjOTczOWFkMjNmNmY2MjUxZWFjYzQxZjFjNAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXkgMjIgMTQ6NTQ6NDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogTGludXg6IFBBVENIOiAzNTI1OTk4OiBEb24ndCB1c2UgYW4gdW5pbml0aWFsaXNlZCB2YWx1ZSBpbiBlcnJvciBtZXNzYWdlCisKK2NvbW1pdCAzMmMxNjg2YjY3ZGM4NWM0YTE4OTU3NjM2MzA2NTYwOWRmZWQ1ZTYxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1heSAyMiAxNDo1Mjo1NiAyMDEyICswMTAwCisKKyAgICBBdHRlbXB0IHRvIG1hcmsgcmVsZWFzZS1jYW5kaWRhdGUgYnJhbmNoZXMgYXMgc3VjaC4KKyAgICBPbWl0IGZpbmFsLXJlbGVhc2Utb25seSBzdGVwcyB3aGVuIHByZXBhcmluZyBwcmVOL3JjTiByZWxlYXNlcworICAgIChSZWxpZXMgb24gYSB0d2VhayB0byB0aGUgTWFrZXJlbGVhc2UgcGVybCBtb2R1bGVzKQorCitjb21taXQgNGM1NjMzZjE2MDNlNGJkMDNlZDA1YzM3ZDc4MmVjODkxMTc1OWM0NworQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CitEYXRlOiAgIE1vbiBNYXkgMTQgMTE6NDA6MDYgMjAxMiAtMDQwMAorCisgICAgTkVXUzogc25tcDogQlVHOiAzNTI2NTQ5OiBDVkUtMjAxMi0yMTQxIEFycmF5IGluZGV4IGVycm9yIGxlYWRpbmcgdG8gY3Jhc2gKKworY29tbWl0IDY1ZGQ4M2MyMjU1ZWU1OGVkYmYwZTI1ODYzZTU1YjU4YTQxMTM2NzkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMjA6MzA6NDIgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnJjMQorCitjb21taXQgYWM0YmM2NWUyOTA5ZjNiZDg1ZjMyZjA0YjUwNGZhNjVkMmY2NDU1MworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAyMDoyODowNiAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS42LjIucmMxCisKK2NvbW1pdCBiNzQ5OTQ4NjQxOTUxMTllZGI2ZTE5Yzg1MTQ3ZmFjMDBiY2I5M2UzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDIwOjEzOjQ2IDIwMTIgKzAxMDAKKworICAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS42LjIucmMxCisKK2NvbW1pdCA5MTM1MDA5MmM0NmU2NmQwNmQ3NDE0M2Y0ODE2NDczZGI0ZDI1MTYwCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE5OjU2OjMzIDIwMTIgKzAxMDAKKworICAgIE1hcmsgdmVyc2lvbi1zcGVjaWZpYyBjaGFuZ2VzIF9iZWZvcmVfIHB1c2hpbmcgdG8gY2VudHJhbCByZXBvc2l0b3J5CisKK2NvbW1pdCA3MjQxYWNjZDcwYjgyZDBmY2Q0NGQ1YTUyMzhiMmVlOTQ0NTkwMGRiCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjUzOjE3IDIwMTIgKzAxMDAKKworICAgIHZlcnNpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IDdjNzk2YTE1YTFkMWJiODVmZWVhOTQwYmQ0ZTM1MTY4Nzc5MjA5MTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6NTA6NDkgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnJjMQorCitjb21taXQgMDdlMjY4YmZiNjRiMGVjNjQ1YjNmN2U4NzI2Njk4NGY5MjE3Y2YxMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzo0NDozNyAyMDEyICswMTAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucmMxCisKK2NvbW1pdCAxNmVhYWY2YzNiYTE0NTk2Y2E5ZWZhZjRiMTE0ZjFiNzA5ZjQyYjY4CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1heSA3IDE3OjI5OjAzIDIwMTIgKzAxMDAKKworICAgIGRvY3VtZW50YXRpb24gdXBkYXRlIGZvciA1LjUuMi5yYzEKKworY29tbWl0IGM3Mjk0NjllZjEyMTU0OTMwY2Y5ZDE1OTY3ZTE2MTg2ZmI0NDVmMzAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6Mjc6MjAgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjUuMi5yYzEKKworY29tbWl0IDE0MjU3MWQzY2VhMDhmMGMwNzJkMjRjMWQzOWE0M2M3NDQ2ZjhjZTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWF5IDcgMTc6MDE6MDMgMjAxMiArMDEwMAorCisgICAgV2hlbiBidWlsZGluZyBhIG5ldyByZWxlYXNlLCB0aGUgaW5zdGFsbGVkIHZlcnNpb24gb2YgdGhlIHBlcmwKKyAgICBtb2R1bGVzIG1heSB3ZWxsIGJlIGRpZmZlcmVudCB0byB0aGUgdmVyc2lvbiBiZWluZyBidWlsdC4KKyAgICBUaGF0IHNob3VsZCBub3QgYnJlYWsgdGhlIGJ1aWxkLgorCitjb21taXQgZWJhODZiNmY3YWZmMjYxZWUwZTYxMzM0ZGY3MGRlNzE1NmU1YzNjYgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBNYXkgNyAxNzowMTowMyAyMDEyICswMTAwCisKKyAgICBXaGVuIGJ1aWxkaW5nIGEgbmV3IHJlbGVhc2UsIHRoZSBpbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgcGVybAorICAgIG1vZHVsZXMgbWF5IHdlbGwgYmUgZGlmZmVyZW50IHRvIHRoZSB2ZXJzaW9uIGJlaW5nIGJ1aWx0LgorICAgIFRoYXQgc2hvdWxkIG5vdCBicmVhayB0aGUgYnVpbGQuCisKK2NvbW1pdCA1YzBmNjRkNmRiMmI1OTNmN2NjMGVkMmQ0ZjU1YjdjNTkyYjc3NGE4CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjI1OjE1IDIwMTIgKzAyMDAKKworICAgIE9ubHkgb3V0cHV0IGNwdSB3YXJuaW5ncyBvbmNlLgorCitjb21taXQgZWU1OGU0ODI3YjlmYTE2ZTY2MzVjYTAwM2U4YTRmMTFkY2I1ZmI3YQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEFwciAyMyAyMjoxNzo0MiAyMDEyICswMjAwCisKKyAgICBGaXggc3BlbGluZyBpbiBlcnJvcm1lc3NhZ2UuCisKK2NvbW1pdCAwM2Y0ODVkZjIyZjIwZTE0OWNmYWU5NGM1N2NiODJmZWVjYjVkNzRiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjEyOjExIDIwMTIgKzAyMDAKKworICAgIE5vdCBhbGwgTGludXhlcyB1c2UgcnBtIChkZWJpYW4vdWJ1bnR1IGNvbWVzIHRvIG1pbmQpCisKK2NvbW1pdCA5MzA4MzgyMjRmNzgxNjk2YmQzNTIyNWYyMjU2OTM0NzQxNmYxYjE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gQXByIDIzIDIyOjEwOjE1IDIwMTIgKzAyMDAKKworICAgIENoZWNrIG5lZWQgZm9yIC1sbSB0byB1c2Ugcm91bmQvZXhwCisKK2NvbW1pdCBhMDYwOWNmMWYzYTY5MTdkMjYzNzI1NzMyMjQ4Y2Q5MzdhNDVhZDk0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgQXByIDcgMDg6NDA6NDQgMjAxMiArMDIwMAorCisgICAgUmVtb3ZlIGxpbWl0YXRpb24gb24gY29uZmlndXJhdGlvbiBsaW5lIGxlbmd0aC4KKworY29tbWl0IDMwNTk3MzMzOGE2M2FlNTRjNWUwMmE4NjI2ZmJlOWE4MDY0ZGNiN2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBBcHIgNyAwMDozMjoxOSAyMDEyICswMjAwCisKKyAgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGVzLgorCitjb21taXQgY2NhYjRlOWQzZWQ0MjRjMzlkMGRjMjdiZTYzZmE3NmM3NDYxZWE4MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IEFwciA3IDAwOjE1OjIyIDIwMTIgKzAyMDAKKworICAgIEludGVybmFsaXplIHRoZSBuYW1lIGFuZCBsaW5lIG51bWJlciBvZiB0aGUgY3VycmV0IGNvbmZpZ3VyYXRpb24gZmlsZQorCitjb21taXQgY2Y4NzRhZDdiOWRhZjRmY2MwZDQ2Y2RkMDM0NDc0YjQ3ODAwNTM0MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIEFwciA2IDIxOjQ3OjI4IDIwMTIgKzAyMDAKKworICAgIFJlcGxhY2UgI2lmIChBKSBCICNlbHNlIEIgI2VuZGlmIHdpdGggQi4KKworY29tbWl0IGVmOWVhNjQxYmMyOTBlZWM1MDY4NWI2MDUxOWIzMWJlZThiMTRhNjkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjE6MDQ6MDYgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTIKKworY29tbWl0IDM1YWJhMTk1OWRlMTE5ZjFmYjg5MjAzYzM3MTA5YWE2ZjBlMjFjNTcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjE6MDA6NDAgMjAxMiArMDEwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTIKKworY29tbWl0IGU0MWZiYWZmMThhYzkwOTVjZjRhNzM5YTA2ZWMzOWExYTZjY2ZkYzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDkgMjA6MzU6MzUgMjAxMiArMDEwMAorCisgICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjYuMi5wcmUyCisKK2NvbW1pdCAxMzdmZTU4MmQ2Y2M1NjExNDMwZGFiNDZlZjE0NGVmZDg0Y2ZjODAzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgRnJpIEFwciA2IDIwOjQ2OjU2IDIwMTIgKzAxMDAKKworICAgIFJldmVydCBjb21taXQgMWY0YTgyOWIxODI3NWU0OTU2Y2E5MWU1ZWMzNzBkZjAxNWYwNjEzMworICAgIChzbm1wX3N0b3JlX25lZWRlZCgpIEFQSSBpcyBub3QgYXZhaWxhYmxlIGluIDUuWzQ1XS54KQorCitjb21taXQgMmI3ZTY0Mjg4YzAxYThhMDYyMDI2YzUyMWNhMzFhNWU4ODVmMzBjYworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAxNjoxMjoxMiAyMDEyICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgJ2NvbnN0J2lmeWVkIG5saXN0IGFyZ3VtZW50cworICAgIEJhY2twb3J0IG9mIGVkNjVlY2E2ZTdmOWNmYTczODBhNzhkNTZjMDFlZDMxNDc0NWIxNjkgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IDdlOTVkODBiNjk4MDUxMjU5NjQ1YzA3NGE1M2ZmZDI2NGE2ZmE5MTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTY6MDY6NTYgMjAxMiArMDEwMAorCisgICAgRnJlZUJTRC05OiBGaXggZm9yICdjb25zdCdpZnllZCBubGlzdCBhcmd1bWVudHMKKyAgICBCYWNrcG9ydCBvZiBlZDY1ZWNhNmU3ZjljZmE3MzgwYTc4ZDU2YzAxZWQzMTQ3NDViMTY5IGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAxYTliN2I3YzAyZTJkZWVmZTk5NGQ1OTVhN2NjMWRkMmZmYmVlZTFkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDE1OjUxOjIwIDIwMTIgKzAxMDAKKworICAgIEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoICdyZWNlbnQnIGhlYWRlciBzaHVmZmxpbmcKKyAgICBCYWNrcG9ydCBvZiBjNTNkOGMzNTI1ZjU5MGYyMjEzZDM1YjBkYTk0MTIzODYyZjNlMzY2IGZyb20gVjUtNS1wYXRjaGVzCisgICAgKFBhdGNoICMzMzYzMzA4IC0gb21pdHRpbmcgdHdlYWtzIHRvIGNvbmZpZ3VyZSkKKworY29tbWl0IDNkOWRkYjQxZTI2M2JjMWE3OGY5Zjk0NDBiOGQ0YWQ0Zjg2YzgyZTEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMTA6MzY6MTggMjAxMiArMDEwMAorCisgICAgRml4IHR5cG8KKyAgICBCYWNrcG9ydCBvZiA1YjcwMmIwMjRiNjAxNzZkN2Y1Njk5YjkyZTU1ZGE1MGE4ZGVhZTcxIGZyb20gVjUtNi1wYXRjaGVzCisKK2NvbW1pdCAwZDM1YzYwOTU2NGI2NmExZmZlODE1NTZkMzdhZGYwNTAzYzM4OWNlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEFwciAyIDEwOjE1OjA4IDIwMTIgKzAxMDAKKworICAgIFByb3ZpZGUgbWlzc2luZyBkZWZpbml0aW9uIG9mIE5FVFNOTVBfUFJJbworICAgICh1c2VkIGluIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYykKKworY29tbWl0IGE3OTE0MWE0MTk5NTNkMDEwYTY5ODllOGI4OGY0ZGYxMjczOTRkMzgKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gQXByIDIgMDk6MTk6MjYgMjAxMiArMDEwMAorCisgICAgSGVhZGVyIGZpZGRsaW5nIGZvciBGcmVlQlNELE9wZW5CU0QsRHJhZ29uZmx5CisgICAgQmFja3BvcnQgb2YgZjdiMGRlMTUxODAwMmM2ZThmOWI5NGVmM2RlYjg4ODJlMWU5MzM4ZSBmcm9tIFY1LTctcGF0Y2hlcworCitjb21taXQgYWRmNzRiZjc1M2QzOTcwMzU3YWZkNjMzODAzMjU2MjQxZDljN2I4NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBBcHIgMiAwODoyMDo0NiAyMDEyICswMTAwCisKKyAgICBGaXggSVB2NiBUQ1AgJiBVRFAgdGFibGVzLCAqQlNEIHN1cHBvcnQgKGluY2x1ZGluZyBPcGVuQlNEKQorICAgIEJhY2twb3J0IG9mIGNvbW1pdHMgNWNkMTU3MzYyNTQ3MWMwNTgzZTkwODdhZWM2ODAyYjc3MTU3ZDVhMgorICAgICAgYW5kIDUwZDczZjBkNTZmZTIyYzU5MDUzMGIzZTMwNWQ0MWRjZGFjM2NlMDAgZnJvbSBWNS02LXBhdGNoZXMKKworY29tbWl0IGQ5NTU1YWNiOWY0N2MzYWE4ZmRlNGJjMjBhNDRkN2NhNjE4MWE4YTkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFN1biBNYXIgMjUgMTg6NDg6MTIgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQXZvaWQgZGFuZ2xpbmcgcG9pbnRlcnMgKGJhc2VkIG9uIHBhdGNoIDM1MDMyNTkpCisKK2NvbW1pdCA4MmE4YjQ3ZWU5NmU1ZDI5YTJiN2FjM2NhMDA3MjJkNzM3ZDViNDc5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjMxOjU2IDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCA5Y2E4ZDkzOWFiMzkzMzA2YTFkMGYxNDZjOWNiNzBlYTBjYjE5ZDQ5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjMwOjM4IDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCBjZWNkNDg2OWRlYjY4ZjNkNGM3MWU3NjhkNWI0MGRkNTc2NDQ2OTI1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDI5IDIyOjI5OjMxIDIwMTIgKzAyMDAKKworICAgIFJ1bm5pbmcgYXV0b2hlYWRlciAvIGF1dG9jb25mCisKK2NvbW1pdCBhMWE0NTEzYmQzZTRlNjE0MjAwZjZkYjVhMDJmNjFkNmM4ZWVmYjMyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIE1hciAyOCAwOTo0Nzo0NSAyMDEyICswMTAwCisKKyAgICBEb3h5Z2VuLXN0eWxlIGRvY3VtZW50YXRpb24gZml4ZXMgKGJhY2twb3J0IG9mIGdpdCBjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYSkKKworY29tbWl0IDliZGJjY2ExMjJjMzdkYTMwNGZjNmFhNjkzOTcyOTQ3NWY5MGY1ZmQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDI4IDA5OjMwOjQ5IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcyAoYmFjay1wb3J0IG9mIEdJVCBjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYSkKKworY29tbWl0IDFmNGE4MjliMTgyNzVlNDk1NmNhOTFlNWVjMzcwZGYwMTVmMDYxMzMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDI3IDIxOjQxOjI0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDk1Njk3OiBTdG9yZSBwZXJzaXN0ZW50IHNubXBUYXJnZXQgdGFibGUgY2hhbmdlcworCitjb21taXQgMWY3NWYzNzdkMGRiMDE3NTRjMGMxNjFkYzQ0MzczMDgxYmVlZjUyMAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjcgMjE6MTQ6MDYgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogRnJlZUJTRDogUEFUQ0hFUzogMzQ4OTM4NzogSW5zdGFsbCBGcmVlQlNEIDEwIGhlYWRlciBmaWxlIChwbHVzIG90aGVyIG1pc3NpbmcgdmVyc2lvbnMpCisKK2NvbW1pdCAzZDcyYzllNzhmMmFkODE3YzlkMWQ4Mjk3NzMyN2JiYjIwZDYzYWI5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE1hciAyNyAyMTowNjozMSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDM0ODc4Njc6IERvbid0IHNraXAgbWlzc2luZyBpZlhUYWJsZSBlbnRyaWVzIChpZkNvbm5lY3RvclByZXNlbnQgRkFMU0UpCisKK2NvbW1pdCAxMjkwNjU3OGFiMzBjZjc3NmQwODBjMGVmMzAyNWIzMDMzNGQ3NjU1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE2OjE3OjQ1IDIwMTIgKzAyMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogRml4IGV2ZW4gbW9yZSBtZW1vcnkgbGVha3MKKworY29tbWl0IGNjZmQ1Y2E2ZmUxMDMxM2Q2MTgxZDI0YmJiMTc5NzgyNWE5N2RhMTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6NTE6MTYgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBFbGltaW5hdGUgZHVwbGljYXRlIGNvZGUKKworY29tbWl0IDlmZGEyNjY4NzIyZjA4ZGRiZmRkNjdhMjIzOWQ4YjAyMWRiNjRhODMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgMjYgMTU6NDg6NDYgMjAxMiArMDIwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBXcml0ZSBhIGxvb3AgYXMgYSBsb29wCisKK2NvbW1pdCBjYmMxOGViNzYzYmE2ZGY2OWVmNzA2NjhhNTRkNzViZjM1ZTc5NTAzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gTWFyIDI2IDE1OjI0OjA4IDIwMTIgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IEZpeCBtb3JlIG1lbW9yeSBsZWFrcworCitjb21taXQgYzc3MjUxOTI0NzhhZWMwMThmYjRhZWZhNjA5NDZlMDRhNDA2YzAwYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxMzo0MzoyNCAyMDEyICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCByZWFkaW5nIGZyZWVkIG1lbW9yeSB3aGVuIGRlbGV0aW5nIGEgcm93IGZyb20gYSB0YWJsZQorCitjb21taXQgYTZiZTczOTU2NmYzMTBkNzQ0MWZkN2Y1NDk4OWUzOTQ0NmY3YTE0MworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciAyNiAxMzo0MjoyOCAyMDEyICswMjAwCisKKyAgICBFeHRlbmQgRElTTUFOLVBJTkctTUlCIHRlc3QKKworY29tbWl0IDhhOWI1NzI5MTQ1M2NiOGFlYzI4ZTc2NmM1OTQ3MDFlZDE5YzRmYzYKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgMjYgMjE6MDM6NDEgMjAxMiArMDIwMAorCisgICAgRml4IGZvciBEcmFnb25GbHkgMworCitjb21taXQgZTVjOWEzMmY3OWVhYzJlODU1MjdjOWNmMDUwODdjZGFlOWIzNWE2YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciAyNiAyMDo1OTo1MyAyMDEyICswMjAwCisKKyAgICBEcmFnb25GbHkgbmVlZHMgX0tFUk5FTF9TVFJVQ1RVUkVTIHRvIGNvbXBpbGUgaXB2NiBjb2RlCisKK2NvbW1pdCBjZDQzYmMwOWEzOWJkOTdmZjVlNzE5YTJjZTIzMmNlNDI0NjAwYTY1CitBdXRob3I6IERhdmlkIEltaG9mZiA8ZGltaG9mZkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6NDc6MTcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0ggMzUxMDQ1NDogQWxsb3cgdGhlIHVzZSBvZiAwLjAuMC4wLzAgYXMgYWxpYXMgZm9yIGRlZmF1bHQKKworY29tbWl0IGUyZmMxNWY5ZTVhNmUzZTM2YmU1ZjQ4OTYwMWNiZjZiZjczMTkxN2YKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MjE6MzggMjAxMiArMDEwMAorCisgICAgRml4IFRDUCBzdGF0ZSB2YWx1ZXMgZm9yIERyYWdvbkZseQorCitjb21taXQgNDMyZmUzZGRmNTRmMmM5OGY5MzY5NTk0NjljYjliMDE0ZDU5OWYwNgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNToxMDo1MiAyMDEyICswMTAwCisKKyAgICBSZXF1aXJlIHBlcmwgdG8gZG8gcGFzc19wZXJzaXN0IHRlc3QKKworY29tbWl0IDM3ZDI3NzBjZjUwYzk4MDIzZWViYTkwZTI1ZDM3MmJmZjczMTZhZGEKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2VyLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAyNCAxNTowNjo0MCAyMDEyICswMTAwCisKKyAgICBGaXggVENQIHN0YXRlIHZhbHVlcyBmb3IgRHJhZ29uRmx5CisKK2NvbW1pdCA4NmE5NDhkODY5MWU4ODFkNTU1OTFkY2FiZGRjMjczOWNlNzJiMzBlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAbmJhLWxpbnV4LnNiLnN0YXRzYmlibGlvdGVrZXQuZGs+CitEYXRlOiAgIFNhdCBNYXIgMjQgMTU6MDE6MzcgMjAxMiArMDEwMAorCisgICAgUHJvcGVybHkgZmluZCBwYXNzIGhlbHBlcnMgZm9yIHRlc3RpbmcuCisKK2NvbW1pdCBmZTI2YTNjNGYyOWYwNDZiZjY1ZWQ1MmU5ZDk0MDU0YjY3NWZiYzRiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA5OjA0OjQyIDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogTGltaXQgc291cmNlIGNvZGUgbGluZXMgdG8gODAgY29sdW1ucworCitjb21taXQgNzQ1YmFmY2RjYzljOGU4NDYxNmQ0ZTI3NGRiMmEzODRiZjIzNGRhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IE1hciAyMiAwODo1NTowNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBNYWtlIHBpbmcgaW1wbGVtZW50YXRpb24gaW5kZXBlbmRlbnQgb2YgbnRwZCBjbG9jayBqdW1wcworCitjb21taXQgZGE2OTI1ZTY3NjNjYWRiZTAyZjRhOGJiZmU2OGEzNjJlNTM1YWQ1ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMDozODozNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGQgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUKKworY29tbWl0IGZhNjA2ZGQ3Y2E2YWZmOTMwOGQ0ZThiMDFiYmNkZTE0OGY0NDEyNzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6NDk6MjEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogTWFrZSBwaW5naW5nIGxvY2FsIGludGVyZmFjZSBhZGRyZXNzZXMgd29yaworCitjb21taXQgNjE3YTgzYmE3OTk1NzVjODRjNjZmNmIxYzQ4MGVmNjMzMTYxYTY0YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxNjoyODo0NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggYSBzb2NrZXQgbGVhayB0cmlnZ2VyZWQgYnkgcGluZ2luZyBhIHJlbW90ZSBob3N0CisKK2NvbW1pdCA2MjVmNTVjMjcyZWM2MjgxZTM4ZDhlMzBlYjUzZmQ1MTUxNmIwMGFlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTWFyIDIyIDA5OjU0OjU1IDIwMTIgKzAxMDAKKworICAgIERJU01BTi1QSU5HLU1JQjogQ29udmVydCBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCB2YXJpYWJsZSBpbnRvIGEgc3RhY2sgdmFyaWFibGUKKworY29tbWl0IGI0OGYxOWFkNGI0YWE2OGMzZTE2ZTJhNzJkZjM3YjljMGNkMzZjNGEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTY6MjQ6MDcgMjAxMiArMDEwMAorCisgICAgRElTTUFOLVBJTkctTUlCOiBBZGQgbW9yZSBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCitjb21taXQgZDc0Y2IzOTY2MTc1ODkyNTYyZjVlM2E5YjE2ODNhY2JhMmMyMmUwNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMTo0NToxOCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggc2V2ZXJhbCBtZW1vcnkgbGVha3MKKworY29tbWl0IDBiMWE3NzY3NDY3OGNjOWExNWJlM2U3NzAwZDNjZWY2NTBlZDAyYzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTI6MDA6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogRG8gbm90IHNlbmQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzdGFjayBvdmVyIHRoZSBuZXR3b3JrCisKK2NvbW1pdCAxMzkwMjNjZDNhYjUxNjMxY2MxMGUyODY2ZDcxYWJjZjk5YWU0YzFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTWFyIDIxIDA4OjU2OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tUElORy1NSUI6IERvbid0IGNhbGwgZXhpdCgpIHVwb24gbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZQorCitjb21taXQgMTY5YjZhYWE3YjYxODI3Y2MxYWQwYjNhZWVhZTNhNzIyOWRkMjVkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE1hciAyMSAwODo1MzoyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBGaXggSVB2NiBzb2NrZXQgbGVhayBpbiBlcnJvciBwYXRocworCitjb21taXQgYTBiZTMyYWQwNTNhNzFmYTk2MTM0ZDU1ZTU0MmJiMDdkNGYwMjk3ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIE1hciAyMCAxMTo0Mzo0NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRElTTUFOLVBJTkctTUlCOiBBdm9pZCB0aGF0IGhvc3QgbmFtZSByZXNvbHV0aW9uIGZhaWx1cmUgY2F1c2VzIGEgY3Jhc2gKKworY29tbWl0IGJmOWJmZjY0NTU2Nzg3ZDc2NmVlMmVmMmQ1NzhhZmI5MjA3MTlmM2EKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBNYXIgMjEgMDg6NTE6NTUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IERJU01BTi1QSU5HLU1JQjogQ29udmVydCBwcmludGYoKSBzdGF0ZW1lbnRzIGludG8gc25tcF9sb2coKSBhbmQgREVCVUdNU0coKS1zdGF0ZW1lbnRzLgorCitjb21taXQgNWQ3NGMwMTI0NTUyM2E5ZDhkYjFlZGEyN2QxZWZhZTJlYmMxMDRmYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODo0MDowMiAyMDEyICswMTAwCisKKyAgICBOZXcgTUlCOiBWUlJQVjMtTUlCCisKK2NvbW1pdCA1YjM4ZjA2MmI5OWI2ZWYzNjcwOGUyYzdkZTQ5NjVhMzE5MjYxMmU5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjM0OjQ4IDIwMTIgKzAxMDAKKworICAgIEZvciBzYWZldHksIHNpemVvZiB0aGUgcmlnaHQgdmFyaWFibGUgaW4gbWVtY3B5CisKK2NvbW1pdCBlNWY4Mjc4MmRhMDVlZmE3YzBlNmRjMmJmNWE0MWVlMTE4NjhmNDY5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjMzOjIxIDIwMTIgKzAxMDAKKworICAgIEZpeCBmb3IgaHJTV1J1biBkYXRhIGZvciBGcmVlQlNECisKK2NvbW1pdCA4MzI3NTY1ZTgyMzI3MGQxMGE0NTA0NTY4ZWRiZTViNWFlMzIzYTU1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWFyIDIxIDE4OjMxOjU0IDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIHZhcmlhYmxlcyBmb3IgT3BlbkJTRC9OZXRCU0QKKworY29tbWl0IDE3MGY2ZjAyN2JmNGY5MTc0YjcwNzM1MzBkYTRkMDdmNDAwYmJhNTgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTg6Mjg6NTggMjAxMiArMDEwMAorCisgICAgTW92ZSBkZWNsYXJhdGlvbnMgaW4gZnJvbnQgb2Ygc3RhdGVtZW50cworCitjb21taXQgZGJiNDU3M2I2OWZhZTg1Y2RjOTMxYjI4OTJiNWNlNGU1YjE2YjMyMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1hciAyMSAxODoyMzozNiAyMDEyICswMTAwCisKKyAgICBSZXF1aXJlIGtlcm5lbF9uZXRic2QgZm9yIE5ldEJTRDYKKworY29tbWl0IGYxMTY4MWYxNWFhZDdkOWE1MmZhMjk4MTJlY2JiNTA3ZjFiN2ZlMjQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgTWFyIDIxIDEyOjM2OjM4IDIwMTIgKzAwMDAKKworICAgIENoZWNrIGZvciBvbGQgdGFyYmFsbHMgKGFuZCB1bnBhY2tlZCBkaXN0cmlidXRpb25zKSBiZWZvcmUgc3RhcnRpbmcuCisgICAgVGhlc2UgY2FuIGNvbmZ1c2Ugc3RlcHMgc3VjaCBhcyAibWFrZSBkZXBlbmRjaGVjayIsIHRoYXQgZG8gYSAnZmluZCcKKyAgICBvbiB0aGUgY3VycmVudCB0cmVlLCBhbmQgd291bGQgZGVzY2VuZCBpbnRvIHN1Y2ggdW5wYWNrZWQgc291cmNlIHRyZWVzLgorCitjb21taXQgNDcwZGNkNGI2YzNmZjExZmYwYTM1MzJhNzM0MGE1NmNmZmQ2OTA5OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFdlZCBNYXIgMjEgMTI6MzI6MTMgMjAxMiArMDAwMAorCisgICAgRG9uJ3QgcnVuICJtYWtlIGRvY3M7IG1ha2UgbWFuY3AiIGlmIHRoZXJlJ3Mgbm8gTWFrZWZpbGUgcHJlc2VudAorCitjb21taXQgYzlhYzQyMDM0M2UxNmRmMmI3MDY1ZjViZjI3OTBkZjQ0ZTI0N2ZiYQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgMjAgMTA6MjY6MTAgMjAxMiArMDAwMAorCisgICAgQWxsb3cgZGlzdHJpYnV0aW9uIGFzIHBhcnQgb2Ygbm9ybWFsIE5ldC1TTk1QIHBhY2thZ2VzLgorCitjb21taXQgNTk5OWY2MGM1NzcyM2YyM2YzYzI1NGFmNTdmZGIxMGFmMzAxYThlYgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE1hciAxOCAxOTowMzowOCAyMDEyICswMTAwCisKKyAgICBSZWdlbmVyYXRlCisKK2NvbW1pdCAyNzVkMjA0MDM2YTYwN2UzZGY1MGU4NDQ3ZDRiYzc1NWU5ZGIwMmZkCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gQXVnIDI4IDIxOjI5OjAzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIGl0IHBvc3NpYmxlIHRvIHVzZSAtLWRpc2FibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hZ2VudCB0b2dldGhlciB3aXRoIC0tZW5hYmxlLW1pbmltYWxpc3QKKworY29tbWl0IGJkY2NjODc1NzEwMjk1YWFjZjUwZjcxZWIxYzFkMmVlOTdmMzM2ZmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMTYgMjA6MTA6NTggMjAxMiArMDEwMAorCisgICAgRG8gbm90IGRlY2xhcmUgdGhlIGxvY2FsIHZhcmlhYmxlcyBmb3Igb3BhcXVlX3NwZWNpYWxfdHlwZXMgdW5sZXNzIHRoYXQgb3B0aW9uIGlzIHNldC4KKworY29tbWl0IGI4MGE2N2RhMDUyYWRjYTFiNWE2NDRkYjgzYTc4MmUxNWMyMjM3YzMKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIEZyaSBNYXIgMTYgMTk6NTA6MDMgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgdGhhdCB0aGUgZGF0YSBleGlzdCBiZWZvcmUgdHJ5aW5nIHRvIHJlYWQgaXQKKworY29tbWl0IGVmYWU4NmJiYTU5NjI0OTFkNDJiNzdiOTM1MTkxYTNlYjI1ZGQ5MzkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFdlZCBNYXIgMTQgMDE6MDU6MzMgMjAxMiArMDEwMAorCisgICAgUGFydGlhbGx5IHJldmVydCAiTWVyZ2UgcmVtb3RlIGJyYW5jaCAnb3JpZ2luL1Y1LTctcGF0Y2hlcycgaW50byBWNS03LXBhdGNoZXMiCisgICAgCisgICAgQ29tbWl0IGQzNWExODYwMjE3ZTcyM2U0Zjg2NmRkOThlZjY2MjE2NjU5MzRjNGEgYWNjaWRlbnRhbGx5IHJldmVydGVkCisgICAgCisgICAgNGEyZTViY2Q1NmNkMmFmYjM2ZWIxNWQ3NTRlMmZlZTg4OGRkNTBjMCAoaHJoX3N0b3JhZ2UgaXMgYSBwcm9wZXIgcmVwbGFjZW1lbnQgZm9yIGhyX3N0b3JhZ2UpCisgICAgMGRkMWU1NDU1N2QxYmE0OThiNTVkMDE3YjBhOTNlOGNjZjliZDUyMiAoQ0hBTkdFUzogc25tcGQ6IFVEUC1NSUI6IFJlcG9ydCB0aGUgcHJvcGVyIGFkZHJlc3MgaW4gdWRwTG9jYWxBZGRyZXNzKQorICAgIDUxMTZkNDgzNzhlY2YwM2U3MjJmMzAxMGFkNDdiZjIyYTNmYmNiOGMgKFJlZHVjZSBzY29wZSBvZiBwcmVmaXhfdmFsIHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCB3YXJuIGFib3V0IGFuIHVuc2VkIHZhcmlhYmxlKQorICAgIDEwZjU2NmY0ZDRjYmIzZTIwNTAyM2MyMzY2OTI4OWU0YmZkMDg5Y2IgKHBlcmwvU05NUC9TTk1QLnhzOiBGaXggYSBjb21waWxlciB3YXJuaW5nKQorICAgIAorICAgIGFuZCBwYXJ0IG9mCisgICAgCisgICAgNmU3NGQ2NGY4NWE1OWQ1MGU0NjFkYjRjMzRhYzc2ZjlkZTQ2OGJmYiAoQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC1xIGFuZCAtdyBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcykKKyAgICAKKyAgICBUaGlzIHJldmVydHMgdGhvc2UgcmV2ZXJ0cy4KKworY29tbWl0IGFhZWRkNTljYzJkYTcwMTUyN2RjMmQyNjFkNGU5Zjg1ZjE2ZTc1MDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBNYXIgMTEgMjA6NTc6MzggMjAxMiArMDEwMAorCisgICAgQWxsb3cgbWFrZSB0ZXN0IHdoZXJlIHRoZSBzb3VyY2UgcGF0aCBjb250YWlucyB0aGUgc3RyaW5nIE5ldC1TTk1QIHRvIHN1Y2NlZWQuCisKK2NvbW1pdCA0Yjk0ZDc5NjkxOGE0ZWVhZTY4YWIyMWFhNTNkNDQ0YThiNWMyOTIxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgTWFyIDkgMDg6MDQ6NTkgMjAxMiArMDEwMAorCisgICAgVW5icmVhayBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDQKKworY29tbWl0IDEwZmU2YjgzMzI0YWQzN2QxOGI5MzdjYzhjNmRlOTRkZTUzNGQwMzUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTM6MDQ6MDcgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IGUxMTIyZWRjMWE1ZmU3OTc2YjA2NTA0NDEzNGQzOWU3ZGI1OTg1ZWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTI6NDM6MTkgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IGE2MTNkM2E4MzQ5MTIyMDZkMWJhNTk3MWU0NDFhM2VhNmIzNmFmMjMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDggMTI6MzM6MDMgMjAxMiArMDAwMAorCisgICAgbWFrZSBkZXBlbmQgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IDBlZjM0ZTY1MTlkZmNiODJjOTdkZjg0Mjc1NDdjMDhkY2Y4MWU2OWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgTWFyIDggMTA6MTE6MzAgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIHNubXBkICctZCcgb3B0aW9uLgorICAgIAorICAgIE5vdyBpdCBkdW1wcyBwYWNrZXRzIGFnYWluLgorCitjb21taXQgOGU2OTc0MmYxNDNlNGZjMTExOTZlNWIyZWQ2NmM4ZjdmNTNmZDAyZgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBNYXIgNiAwOToyNDoyMSAyMDEyICswMDAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNi4yLnByZTEKKworY29tbWl0IGM0ZTAwYjhjM2UxMDEwY2RjYWI1ZTZjMDJkNjBkNzVkZjljNmRjZjIKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgTWFyIDYgMDk6MjQ6MDUgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNi4yLnByZTEKKworY29tbWl0IDM5NDkwMTA0YTNhYjU4MjM1YWFjZTJmOWQ4NzFjMjY2ZGM0NDg1ZWUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gTWFyIDUgMDk6MDY6NTIgMjAxMiArMDAwMAorCisgICAgTWFyayB0aGUgY2hhbmdlcyBtYWtlIGFzIHBhcnQgb2YgdGhlIHJlbGVhc2UgcHJvY2VzcyBhcyBzcGVjaWZpYyB0bworICAgIHRoZSBwYXJ0aWN1bGFyIGJyYW5jaCBiZWluZyByZWxlYXNlZC4gIFZlcnNpb24gdGFncywgY2hhbmdlbG9nIGVudHJpZXMKKyAgICBhbmQgdGhlIGxpa2Ugc2hvdWxkbid0IHByb3BhZ2F0ZSB0byBsYXRlciBicmFuY2hlcy4KKworY29tbWl0IDRhMmU1YmNkNTZjZDJhZmIzNmViMTVkNzU0ZTJmZWU4ODhkZDUwYzAKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBNYXIgNSAyMDo1OTozOCAyMDEyICswMTAwCisKKyAgICBocmhfc3RvcmFnZSBpcyBhIHByb3BlciByZXBsYWNlbWVudCBmb3IgaHJfc3RvcmFnZQorCitjb21taXQgY2U4NTgzMjkzMmNjZDkxNmM0MjMxOTExNGM0MDg4NWE0NjZhOWQwZQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE1hciA1IDIwOjU2OjQwIDIwMTIgKzAxMDAKKworICAgIE1vcmUgZml4ZXMgZm9yIFNvbGFyaXMgc2gKKworY29tbWl0IDBkZDFlNTQ1NTdkMWJhNDk4YjU1ZDAxN2IwYTkzZThjY2Y5YmQ1MjIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxNTowODoyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogVURQLU1JQjogUmVwb3J0IHRoZSBwcm9wZXIgYWRkcmVzcyBpbiB1ZHBMb2NhbEFkZHJlc3MgaW5zdGVhZCBvZiAwLjAuMC4wLiBNYWtlcyB0ZXN0IFQxNjBzbm1wbmV0c3RhdCBwYXNzIGFnYWluLiBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCBjNzZmYjk2ZjY1ZTMzYmEyZmQyMTJhOTIxZThjMzg2MTU1ZWU1YzdhLgorCitjb21taXQgNTE4OTE3ZTlmMzlmN2E5ZDNjM2JmM2E4NjVlOGFjMGUzMDI2ZDYwMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDE0OjA0OjU0IDIwMTIgKzAxMDAKKworICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOiBGaXggc291cmNlIGNvZGUgaW5kZW50YXRpb24KKworY29tbWl0IDI2NTE5MDljY2NlYWJmY2ZhZGFmOTQyYzAyNDUwZTI4ZmU4MzdkYzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBOb3YgOSAxMjowNDowNCAyMDEwICswMDAwCisKKyAgICBQYXNzZXMgbm93IG9uIE1pbkdXIHRvby4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTY1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGU0MWYxMTVlNDAzMDRjOTQxYmExN2Q2N2UyNDcxMDcyMmQ5MDc0MWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBNYXIgNSAxMzozOToxNyAyMDEyICswMTAwCisKKyAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBBdm9pZCB1c2luZyBncmVwIG9wdGlvbnMgLXcgYW5kIC1xIGJlY2F1c2UgZ3JlcCBpbiBTb2xhcmlzJyBkZWZhdWx0IHBhdGggZG9lc24ndCB1bmRlcnN0YW5kIHRoZXNlLgorCitjb21taXQgNTExNmQ0ODM3OGVjZjAzZTcyMmYzMDEwYWQ0N2JmMjJhM2ZiY2I4YworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjQ3OjIwIDIwMTIgKzAxMDAKKworICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzogUmVkdWNlIHNjb3BlIG9mIHByZWZpeF92YWwgc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IHdhcm4gYWJvdXQgYW4gdW5zZWQgdmFyaWFibGUgaWYgaXQgaXNuJ3QgbmVlZGVkLgorCitjb21taXQgNmU3NGQ2NGY4NWE1OWQ1MGU0NjFkYjRjMzRhYzc2ZjlkZTQ2OGJmYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjIyOjMxIDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvZXZhbF90b29scy5zaDogQXZvaWQgdXNpbmcgZ3JlcCBvcHRpb25zIC1xIGFuZCAtdyBiZWNhdXNlIGdyZXAgaW4gU29sYXJpcycgZGVmYXVsdCBwYXRoIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGVzZSBvcHRpb25zLgorCitjb21taXQgMTBmNTY2ZjRkNGNiYjNlMjA1MDIzYzIzNjY5Mjg5ZTRiZmQwODljYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE1hciA1IDEwOjQ3OjM5IDIwMTIgKzAxMDAKKworICAgIHBlcmwvU05NUC9TTk1QLnhzOiBGaXggYSBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCA0NGFhMjY1ODkxY2Q1NjNmN2Y0MTE0ZWYyNWRjZjdhYWYzYjE0ZTlhCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCBkYWU0ZTE2YmU4NjExNzg2MWY2M2QxYTJmOTgxYWQzNjE0MThmNWM2CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCAyOGY2MjI2ZjJlMjI4YjhjYTI0ODQ4OTczNWY4NjUwMmIyY2NlMGExCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIE1hciA1IDA5OjA2OjUyIDIwMTIgKzAwMDAKKworICAgIE1hcmsgdGhlIGNoYW5nZXMgbWFrZSBhcyBwYXJ0IG9mIHRoZSByZWxlYXNlIHByb2Nlc3MgYXMgc3BlY2lmaWMgdG8KKyAgICB0aGUgcGFydGljdWxhciBicmFuY2ggYmVpbmcgcmVsZWFzZWQuICBWZXJzaW9uIHRhZ3MsIGNoYW5nZWxvZyBlbnRyaWVzCisgICAgYW5kIHRoZSBsaWtlIHNob3VsZG4ndCBwcm9wYWdhdGUgdG8gbGF0ZXIgYnJhbmNoZXMuCisKK2NvbW1pdCA0MDAyMmE2OTc5NTgyNTljY2ZiYjNmZWQ0NGViM2M0NzJmNWU4MzdlCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBTdW4gTWFyIDQgMTA6Mzc6NDEgMjAxMiArMDEwMAorCisgICAgU29sYXJpcyBzaCBkb2VzIG5vdCB1bmRlcnN0YW5kICJ0ZXN0IC1lIgorCitjb21taXQgNzczYWYwYzQyZTA3N2JlYmRhZWNmMWMwY2FmMzkzMjg1YTc2ODhmMQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU2F0IE1hciAzIDE3OjE5OjMwIDIwMTIgKzAxMDAKKworICAgIENsZWFuIHVwIG5zcm9sbHVwIGNvbXBsaWNhdGlvbnMKKworY29tbWl0IGVlNzEwNDljM2UyMWMxZDBlMzQyNDI5NzEzNjY1MmJiZTBlMzlkODUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMyAxNjo0OTo0MSAyMDEyICswMTAwCisKKyAgICBtaWJncm91cC9pY21wLmM6IGFkanVzdCBpZmRlZnMgdG8gbWFrZSBpdCBjb21waWxlIG9uIEJTRCdzCisKK2NvbW1pdCBjZTk2MDAzNjFlNjY1ZGRlMTdhZjlkOGFiMTZkN2NlODVkYzA1NjQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6Mzk6NTUgMjAxMiArMDEwMAorCisgICAgZG90M1N0YXRzVGFibGUgaGFzIGJ1Z3MgOi0oCisKK2NvbW1pdCBkZmZhY2Y2ZmEwNzU1ZTE3MDBjYmFjMjViODQ0MTg1YWJkODA3YTBhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6Mzg6MTAgMjAxMiArMDEwMAorCisgICAgcGFzc3BlcnNpc3QgdGVzdCBuZWVkcyAvdXNyL2Jpbi9wZXJsCisKK2NvbW1pdCA4NzI2OTk1YzdhOGFlZjY3NGM0ZjE2NGIxODcxYzM3YmJkY2RhZDUwCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzY6NTggMjAxMiArMDEwMAorCisgICAgZ3JlcCAtdyBmYWlscyB3aXRoIE9wZW5CU0QgYW5kIFNvbGFyaXMgMTAtNjQKKworY29tbWl0IDFlYjQ3NDViMjNjYzNhODM5ODY0ZTdmNmVhMjgzNTViMDU2NmViNjcKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBNYXIgMiAyMTozNTo0OSAyMDEyICswMTAwCisKKyAgICBTb2xhcmlzIG5lZWRzIC91c3IveHBnNC9iaW4vZ3JlcCB0byB1bmRlcnN0YW5kIC1xCisKK2NvbW1pdCA5OTU0YjRiNzQxZmQ4YzYzZDYxMjhiZDA1MjcyOThjOGU0ZTk4OWZjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzQ6NDUgMjAxMiArMDEwMAorCisgICAgTWFrZSBzdXJlIHdlIGhhdmUgdGhlIHByb3BlciBzcmNkaXIgZm9yIG91dC1vZi1zb3VyY2UgYnVpbGRzCisKK2NvbW1pdCA3ODM2OTAwMmJlMjcxMWYwYWE4NzZiNjRhNGUxMGIwOTBjYzI0MWNkCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTWFyIDIgMjE6MzM6MzEgMjAxMiArMDEwMAorCisgICAgTm90IGFsbCBtYWtlIHZlcnNpb25zIGRlZmluZSAkKFJNKQorCitjb21taXQgOTQyNDViMjlhM2NkYTg5NDc1YzZlYWI1ZDk0OTNjNjY1N2ZmMzhlMworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjI0OjI0IDIwMTIgKzAxMDAKKworICAgIE1ha2UgYXV0b2NvbmYgMi42OCBoYXBweQorCitjb21taXQgNDRhY2Q2YzI4NWZiNTYxNGI0Yzk2MTFiMWFiZGVjYTlkZDI4ZTRiYgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE1hciAyIDIxOjEyOjQ3IDIwMTIgKzAxMDAKKworICAgIEZpeCBzcGVsbGluZyBvZiBtaWIgbW9kdWxlIGZzeXNfZ2V0ZnNzdGF0cworCitjb21taXQgMWZhMWZlZTM2OTNmNjdiODIwMjIzODA2YjNkNzNhZmQ0YzUwZWMxOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgRnJpIE1hciAyIDAxOjM3OjIwIDIwMTIgKzAxMDAKKworICAgIFNpbGVuY2UgYSBjbGFuZyB3YXJuaW5nLgorCitjb21taXQgOTMyNjNiOThhNWRiMzQ0Y2YyYzRkNDg5YzQzOTcxZTdiMjljZGIwMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMzozNzoyMCAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgNWExNzU0MjhiOTczZDJlYTg1NTNlMjlmZWNmOTRjZjE1NjZhYTg1OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMTo0ODoxOCAyMDEyICswMDAwCisKKyAgICB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS41LjIucHJlMQorCitjb21taXQgMzY0Mjc2YTFjNWFhNjZjYWEyM2ViNWI3ZjExMWZkZWI1YWY3MWZhNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMTo0NToxMCAyMDEyICswMDAwCisKKyAgICBtYWtlIGRlcGVuZCBmb3IgNS41LjIucHJlMQorCitjb21taXQgNzM1OTgzNDAxNzJlZmY3NTcyOWE2ZDU3MTkyYjgxNzFkNWJiZjAwZQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBNYXIgMSAxMDo0Mjo1NiAyMDEyICswMDAwCisKKyAgICBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNS4yLnByZTEKKworY29tbWl0IGYzMjE0NDAyNjcyY2ExOTlmZDUzMWU2NjEyMmJmOTZjNGQ5YTRlYjcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgTWFyIDEgMTA6NDI6MzkgMjAxMiArMDAwMAorCisgICAgdmVyc2lvbiB1cGRhdGUgZm9yIDUuNS4yLnByZTEKKworY29tbWl0IDJlNzRhY2I2ZjE5ZTQ3MjljZWRlMGFiNDNlOTMxOTYxY2IyM2FhZWEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBNYXIgMSAwOToxODozOSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogRG8gbm90IGluc3RhbGwgdGhlIHV0aWxfZnVuY3Mgc3ViaGVhZGVycyB0aGF0IHdlcmUgcmVtb3ZlZCBpbiA1LjcKKworY29tbWl0IGI3MTA5NjQ2Yjk1YTcwNzEzZDFhZDk5MWQ0MWJjY2Q1N2MwYmIzZWIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFRodSBNYXIgMSAwODo0ODo0OCAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogSW5zdGFsbCB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMgaW50cm9kdWNlZCBpbiA1LjYKKworY29tbWl0IDQzMmNiYjdhNTUwMWFiOTBkNjZkMGE4M2U3MzFlNzM0M2JjMDRiMzcKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBGZWIgMjUgMTA6MTM6MTUgMjAxMiArMDEwMAorCisgICAgQ29ycmVjdCB0eXBvcworCitjb21taXQgNmE2YzliYmM3NTg0ZjE5NmExMTg1Y2MxOTM1MjA0ZjEyMDY4MTFlZAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgV2VkIEZlYiAyOSAwODo1NTozNSAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBCdWcgMzE1Mjg0MTogSW5zdGFsbCB1dGlsX2Z1bmNzIHN1YmhlYWRlcnMKKworY29tbWl0IGQ1MTVlMmE2ZTRjMmExYzRkODQ3MzRjYzdiMmQwYjJmYzVhODk0YWQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDE1OjU2OjIxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDg3OTE5OiBGaXggY29tcGlsYXRpb24gd2hlbiBjYWNoaW5nIGlzIGRpc2FibGVkCisKK2NvbW1pdCBhZjgzNjhlZDg4OThhNzhkMDg2OGI0N2FmNDZiYzlkYjA3ZDFjNzY0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxNTo1MDo1NiAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNDE0NzczOiBFbmNvZGUgaW50ZWdlciB2YWx1ZSB1c2luZyBBU05fSU5URUdFUgorCitjb21taXQgMTllMjcxNTgwN2ZlMDZmZDBiYWVkZjg4MTY1MDExYWVlOTMzZTc1NQorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBGZWIgMjggMTQ6MDU6MzQgMjAxMiArMDAwMAorCisgICAgQ0hBTkdFUzogbWFuOiBCVUdTOiAzNDkwNzA4OiBDbGFyaWZ5IHVzZSBvZiBjb21tb24gY29tbWFuZC1saW5lIG9wdGlvbnMKKworY29tbWl0IDY1Zjc5NjJmOTMyYzliNzVjNWJiYmIwNDdkMWUyNmFlNjA5NzhlNTMKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEyOjIzOjM0IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAzNDg5NjMxOiBGaXggaW5jb3JyZWN0IGhhbmRsaW5nIG9mIFVDRCBtb25pdG9yaW5nIGZsYWcKKworY29tbWl0IGFjMTY2MDUxYjZhMDkyZGQ0YTU5NDMyNmVjODVlMmY2OTliNjI1NDcKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDExOjU3OjQxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEJVR1M6IDM0NzQ1OTA6IERvbid0IG1hdGNoIHVuZGVyc2NvcmVzIHdpdGhpbiB0aGUgc291cmNlIHJvb3QgZmlsZW5hbWUKKworY29tbWl0IDg3OWJmNzA3OWQzNGZhNDZmNmZjZjU0YTAxYzg1MDBiZWFlY2U1OWEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRmViIDI4IDEwOjQ0OjQxIDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUdTOiAzNDYwMzY0OiBGaXggdXNlIG9mIGJsb2NrIGZhY3RvciB3aGVuIGRldGVjdGluZyBlcnJvciBjb25kaXRpb25zCisKK2NvbW1pdCAwMzRmMWM1NzJmNjgzZWE0Mjg1ODMwNzQ0NzFlNWQ1ZDEzYjUxODM3CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDoyMjoyMCAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbmZpZ3VyZWQgdXNpbmcgLS1lbmFibGUtcmVhZC1vbmx5CisKK2NvbW1pdCAzNjQyM2UyMTBiZmI2NWVmMTIxYzZhNjZhZWM0MzhjN2MyMzdkM2RmCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAxMDowMzoyNSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NTQxNjg6IGNvbmZpZ3VyZTogRml4IGJ1aWxkaW5nIHdpdGggLS1lbmFibGUtcmVhZC1vbmx5CisKK2NvbW1pdCBlZWQwYmNiYzQzZmVhMTgyNTlmMGY2M2IyMDgxYjZkMTA1MzVhMDUyCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIEZlYiAyOCAwOToyNzoxMSAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCBiYWJ5LXN0ZXBzIHdoZW4gY29tcGlsZWQgd2l0aCAtLWRpc2FibGUtc2V0LXN1cHBvcnQuCisgICAgSW5zcGlyZWQgYnkgYnVnICMzNDU0MTY4CisKK2NvbW1pdCBlYzZhMjMwMzBlNWEyMDcyYzE5YzE4YzFkOWMxMjQzODdkYTU2YjdiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDI3IDE4OjQyOjU4IDIwMTIgKzAwMDAKKworICAgIEFkZCAtbHJ0IHRvIE5FVFNOTVBMSUJTIHN1Y2ggdGhhdCBjbG9ja19nZXR0aW1lKCkgY2FuIGJlIGZvdW5kCisKK2NvbW1pdCBmMTMzMjA1MDAyOTRiYjI0MGY2M2M2ZGQ3ZDJlOWEyMjA4ZWI3NDBkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgTW9uIEZlYiAyNyAxNjo1Mjo1MSAyMDEyICswMDAwCisKKyAgICBTa2lwIFNFVC1iYXNlZCB0ZXN0cyB3aGVuIGNvbXBpbGVkIHVzaW5nIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgYzQyNzZiNjIzMmMyOTE0NWMwMzk4ODRlNmI1YTZiNmRhNGI5MzgzNworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIE1vbiBGZWIgMjcgMTU6NTQ6NDUgMjAxMiArMDAwMAorCisgICAgT21pdCBTRVQtcmVsYXRlZCBjb2RlIHdoZW4gY29tcGlsaW5nIHdpdGggLS1kaXNhYmxlLXNldC1zdXBwb3J0IChpbnNwaXJlZCBieSBwYXRjaCAjMzQyNDkzMCkKKworY29tbWl0IDAxYzkzMGVkY2MyNTcwMGQ2YjVmYjAzNzZmNTVhMjY0MjVlMTNmYjAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBNb24gRmViIDI3IDE1OjE3OjIyIDIwMTIgKzAwMDAKKworICAgIE9taXQgU0VULXJlbGF0ZWQgY29kZSB3aGVuIGNvbXBpbGluZyB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorICAgIChpbnNwaXJlZCBieSBwYXRjaCAjMzQyNDkzMCkKKworY29tbWl0IDk0ODRkODMyMDNjNGUyZDgyMDQxNmJlNjY1ZmE4MzNhYTcwNDQ0ZDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMjQgMTQ6MDA6MzIgMjAxMiArMDEwMAorCisgICAgUmV3b3JrIGNvbW1pdCBiNGExOTUwNWEwNTgxNmU5NGUwMWRlOTdiZjk5YWMzN2ZjZGM2ZDIzLgorCitjb21taXQgMmI3ZjEzNDk1MjI4NjM1ZDgxNmU1OGIyMTc0ZGMxMjRkZDBjZjM5ZgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEZlYiAyNCAwNzo0MzoyMiAyMDEyIC0wODAwCisKKyAgICBzZXQgTUVSR0VfQVVUT0VESVQgYmVmb3JlIG1lcmdpbmcgdG8gYXZvaWQgdGhlIGZ1dHVyZSBnaXQgMS43LjEwIGZvcmNlZCBtc2cKKworY29tbWl0IGUxYjkxMGIwYmU5MzQzNTg2YWU5ZWRiYTZmNDYwNDBhZjMxNWZjZGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMTA6Mjc6NTQgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IGluaXRfYWdlbnQoKSArIGluaXRfa21lbSgpOiBSZXR1cm4gYW4gZXJyb3IgdmFsdWUgaW5zdGVhZCBvZiBpbnZva2luZyBleGl0KCkgaWYgYWNjZXNzIHRvIGtlcm5lbCB2aXJ0dWFsIG1lbW9yeSBpcyBkZW5pZWQKKworY29tbWl0IDQ2M2VlZDIxMjBmOWQxOTFiYzIyNjczNDk2YTQ5ZTgxNzQ2NjRlNGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMjMgMTA6MDM6MzEgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIG9ic29sZXRlIHN5bWJvbCBORVRTTk1QX0VYSVRfT05fQkFEX0tMUkVBRAorCitjb21taXQgYzM2YWI3MWE0ZTA5NmYxNmNjNWE1NTUzM2YwODBjOWE5NDAwOTkxNAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwODo1Mzo1NiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBGcmVlQlNEOiBzbm1wZCArIGFwcHM6IFNlbmRpbmcgVURQIHBhY2tldHMgd29ya3MgYWdhaW4gZm9yIG5vbi1yb290IHVzZXJzCisKK2NvbW1pdCBlZGViZGRiYTkzMGY4YjE0NzJmYTBiZDIwZmM0MTNlZjhjZjQ2NGEyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgRmViIDIxIDExOjMxOjQ2IDIwMTIgKzAxMDAKKworICAgIHRlc3RpbmcvUlVOVEVTVFM6IEZpeCBhIGJhc2hpc20KKworY29tbWl0IGI0YTE5NTA1YTA1ODE2ZTk0ZTAxZGU5N2JmOTlhYzM3ZmNkYzZkMjMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgMjAgMTY6NTg6NDcgMjAxMiArMDEwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0ICVsZCB2ZXJzdXMgdGltZV90IG9uIHN5c3RlbXMgd2hlcmUgdGltZV90IGlzIGEgc3lub255bSBmb3IgbG9uZyBsb25nIGluc3RlYWQgb2YgbG9uZy4KKworY29tbWl0IGQ4OTc4ZWNjODIxMWJlN2MxZTc5MDVmMWUyMTViYjA2ZGVkMjY2YjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBGZWIgMjEgMTI6MzI6MjUgMjAxMiArMDEwMAorCisgICAgRml4IHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jIGZpbGUgaGVhZGVyCisKK2NvbW1pdCBhYTc2NmQxOTZlNTI4N2Y2Y2E3OWI1OGEzNDViMDI0MjYwYWJhMzU0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDIwIDE3OjA3OjEzIDIwMTIgKzAxMDAKKworICAgIElGLU1JQjogZG8gbm90IHRyaWdnZXIgdW5kZWZpbmVkIGJlaGF2aW9yICg+PiAzMiBvZiBhIDMyLWJpdCB2YXJpYWJsZSkgd2hlbiB1cGRhdGluZyBhIGNvdW50ZXIgYW5kIGlmaV9pcGFja2V0cyBpcyBhIDMyLWJpdCB2YXJpYWJsZQorCitjb21taXQgYzNmYjZkZDllNmI5OWU5NTQyNDkzMTg4OTg3ODcxZmM1MDE3Y2IzYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyMyAwOTo0NTo0NSAyMDEyICswMTAwCisKKyAgICBGaXggYSBjb21waWxlciB3YXJuaW5nIG9uIHN5c3RlbXMgd2hlcmUgbW9kZV90IGlzIHVuc2lnbmVkCisKK2NvbW1pdCBmOGEzZWYwZDNkNGU1MzAyNzk5MDAxMDEwNDliOGRlOThhNDRhNmZiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NDg6NTIgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYiArIHNubXBkICsgc25tcHdhbGs6IEF2b2lkIHRoYXQgc3lzdGVtIGNsb2NrIGNoYW5nZXMgKGUuZy4gYnkgbnRwZCkgYWZmZWN0IGNvZGUgdGhhdCBuZWVkcyByZWxhdGl2ZSB0aW1lCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2Ugc3VyZSB0aGF0IHRoZSByYW5nZSBvZiB0aGUgU05NUHYzIHZhcmlhYmxlIHNubXBFbmdpbmVUaW1lIGlzIDAuLjIxNDc0ODM2NDcgb24gYWxsIHN1cHBvcnRlZCBzeXN0ZW1zIGluc3RlYWQgb2YgMC4uNDI5NDk2NzIgb24gc29tZSBzeXN0ZW1zIChpLmUuIHdyYXBhcm91bmQgYWZ0ZXIgNDk3IGRheXMpCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygpLCBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCksIG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKCksIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKQorICAgIENIQU5HRVM6IHNubXBsaWI6IERlcHJlY2F0ZSBhdGltZV9kaWZmKCksIGF0aW1lX25ld01hcmtlcigpLCBhdGltZV9yZWFkeSgpLCBhdGltZV9zZXRNYXJrZXIoKSwgbWFya2VyX3R0aWNrcygpLCBuZXRzbm1wX21hcmtlcl91cHRpbWUoKSwgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpLCB0aW1ldmFsX3R0aWNrcygpLCB1YXRpbWVfZGlmZigpLCB1YXRpbWVfaGRpZmYoKSBhbmQgdWF0aW1lX3JlYWR5KCkuCisgICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIHRoZSBuYW1lcyBvZiB0aGUgc3RydWN0IHRpbWV2YWwgbWVtYmVycyBvZiBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3ZXJlIHVzZWQgdG8gc3RvcmUgYSB3YWxsIGNsb2NrIHRpbWUgYnV0IHRoYXQgZG8gbm93IGNvbnRhaW4gYSBtb25vdG9uaWMgY2xvY2sgdmFsdWUKKworY29tbWl0IGMxOTc2MGYzMzMzYzkyZmFjNWQ1MGU5NzY4Y2RmOTM5MjE4YmM0ODcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBGZWIgMTUgMDk6NDU6MDMgMjAxMiArMDEwMAorCisgICAgc25tcGxpYi9zbm1wdjMuYzogRml4IHNvdXJjZSBjb2RlIGluZGVudGF0aW9uCisKK2NvbW1pdCBhNmRiMjM5OTQ1ZTE5NWRlNWE5MGZhMTgzNzAwYjI3YTZlY2IyOGQzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgRmViIDcgMDA6MTE6MTQgMjAxMiArMDEwMAorCisgICAgRml4IHBvc3NpYmxlIG1lbW9yeSBsZWFrIGZyb20gcmVjZW50IGRlY2xhcmF0aW9ucyBwYXRjaAorCitjb21taXQgMGZiYmI5YTllMjkwNmE3YWY5NTY5NTcwNjFkNDg1ODc0NDYyYWVhOQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDIwOjQzOjA0IDIwMTIgKzAxMDAKKworICAgIERvIG5vdCBtaXggZGVjbGFyYXRpb25zIGFuZCBzdGF0ZW1lbnRzCisKK2NvbW1pdCBmMzA4ZDViYWZiMDVkNzhlZDQwMzBjNGVjZmYzMjRiNmNiZGE2ODBmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTU6MjU6MzAgMjAxMiArMDEwMAorCisgICAgRml4IHR3byBjb21waWxlciB3YXJuaW5ncyBpbiBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYworCitjb21taXQgNDZmMGZjMWI3ZmMyNmEyMjU3NjNiYzY1Y2NhNTIwYTFjNTlmMDI1MQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEZlYiA2IDIwOjU0OjMyIDIwMTIgKzAxMDAKKworICAgIHNlbmRtc2cgZG9lcyBub3QgbGlrZSBJUF9TRU5EU1JDQUREUiBpZiBhZGRyIGlzIElOQUREUl9BTlkKKworY29tbWl0IGRlYmFjNDk4ZmU4NDEwMTEwMTA3YTJmZTY0ZjhhZmI3NDhlZGFhMDcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gRmViIDYgMTY6NDg6MDkgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogYWRkZWQgT0NGUzIgKE9yYWNsZSBDbHVzdGVyIEZTKSB0byBoclN0b3JhZ2VUYWJsZSBhbmQgaHJGU1RhYmxlCisKK2NvbW1pdCBmYWZjOTljZDg5ZTczZWM3ZTAwYmY3MzYwZDBiNGZhNjE5NDRhNGY0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTg6MzQgMjAxMiArMDEwMAorCisgICAgU2ltcGxpZnkgY2FsY3VsYXRlX3RpbWVfZGlmZigpIGFuZCBjYWxjdWxhdGVfc2VjdGltZV9kaWZmKCkKKworY29tbWl0IDdhZjIwMTNkZThiZjFiMzc5YzA3NmRiNGUxMDQ1MDhlMTc4NzRkM2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNDo1NTo1OCAyMDEyICswMTAwCisKKyAgICBGaXggb3JkZXIgb2YgZmVhdHVyZSAjaWZuZGVmIGFuZCBEb3h5Z2VuIGNvbW1lbnQgYmxvY2sKKworY29tbWl0IGJiZDY3ZjYzNTMwZjVlZjBiZmM5NDhmYzU4ZGZlNmE5M2Y4Zjg2NzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxNToyNTozMCAyMDEyICswMTAwCisKKyAgICBGaXggdHdvIGNvbXBpbGVyIHdhcm5pbmdzIGluIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jCisKK2NvbW1pdCA0MmE2NmFlZmYyNWI5ZTllZjYzNWE0MDRhZDJmNTIxMmY5ZThjZjBkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NDc6NTQgMjAxMiArMDEwMAorCisgICAgUmVuYW1lIHR3byBmdW5jdGlvbiBhcmd1bWVudHMKKworY29tbWl0IDNmZTcyYjNiOTliN2U0YjJiOTgyMzYzZGZjNGYyZDhkMTNmNDA1OTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBGZWIgNiAxMzo0OToyMiAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHNubXBfc2VsZWN0X2luZm8oKSBkb2N1bWVudGF0aW9uIHRvIERveHlnZW4gZm9ybWF0CisKK2NvbW1pdCBlOWRiMjY2YWU0OGQwNWE3YTZjYjVkNzFiNGJkZWE3YWQ4MDhlZjVlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTc6NTcgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBuZXRzbm1wX2dldF9uZXh0X2FsYXJtX3RpbWUoKQorCitjb21taXQgZDA4MDQ0Y2I5ZTU3MDJmYmY1NDllMTQ0MjVmNDI3OTQyNTlkOGEyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDA5OjM4OjA3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBBZGQgbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSgpCisKK2NvbW1pdCBhMDVjMjdjMjcxMWNiNDE1ODJhM2I0YzMxZTM4YjBlOTM1MzBiNjJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTQ6NTE6MzMgMjAxMiArMDEwMAorCisgICAgRml4IHNwZWxsaW5nIGluIGEgc291cmNlIGNvZGUgY29tbWVudAorCitjb21taXQgOTEwZDdiMGQ5OTE4MzYwOWI5NTI5YjA0YzNmMjkzMzBlYjY2MTAyMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEZlYiA2IDE0OjM4OjEyIDIwMTIgKzAxMDAKKworICAgIFJlcGxhY2UgbmV0c25tcF90aW1ldmFsX3VwdGltZSgpIGJ5IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpCisKK2NvbW1pdCA0M2E4M2Y2YzZhOTZjYzIzMTZiNzBlZWNhY2YxMjdlYjY5MTNjN2E3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gRmViIDYgMTE6MTk6MTUgMjAxMiArMDEwMAorCisgICAgVXNlIHRoZSBhc3NpZ25tZW50IG9wZXJhdG9yIGluc3RlYWQgb2YgbWVtY3B5KCkgZm9yIGNvcHlpbmcgc3RydWN0IHRpbWV2YWwKKworY29tbWl0IDJmZTU3OWVmYjFjYjNhNzRmODI4MDNjYTMyMzkyOGY2YjhlNGI1YzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMyAxNDowNDowMiAyMDEyICswMTAwCisKKyAgICBNYWtlIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYyBidWlsZCBhZ2FpbiBvbiBub24tTGludXggc3lzdGVtcy4KKyAgICAKKyAgICBTZWUgYWxzbyBjb21taXQgMzQ1YTFlNDI1NDgxMmNiOWVkYzFkMjc0NDkxYjc2NjgxYTlkYmExZS4KKworY29tbWl0IDg4MWRlNmFiNzM1NTI3N2E1YzExNmEwMDhmYmU1MTMyOTNiMDUwMzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBGZWIgMyAxMDowODoyMSAyMDEyICswMTAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBSbW9uIE1JQiBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgNDYyOTkzM2MwZDNiM2Y5ZjRiYTU4MzUzNGY3OWEzN2ZiOTYzMzgxNworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDIwOjA1OjMxIDIwMTIgKzAwMDAKKworICAgIE1vcmUgY29tcGlsZXIgd2FybmluZyBmaXhlcworCitjb21taXQgZTliNWEzZGVlNmY5YWZhYjhiOTBhMjkzOTIwNDA2MzJiMDc1YWQ3YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE2OjU2OjU1IDIwMTIgKzAxMDAKKworICAgIFVzZSBTTk1QX01JTigpIGluc3RlYWQgb2YgbWluKCkKKworY29tbWl0IGFlNDUyYzc3YjQxMTEzOWQ2YjU4MDBmZmNmODhkNDhlOWI0NzkyYTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxNToyMzozOCAyMDEyICswMTAwCisKKyAgICBSZXN0b3JlIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3LgorCitjb21taXQgYzdkMTFmYTAwZjk5OTVkZGI5ZmUzZDQ5OTRhM2U5NzkwZGEyZTE4OQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE1OjE4OjQwIDIwMTIgKzAxMDAKKworICAgIFJlc3RvcmUgY29tbWl0IGRiYjg3OTVhN2RmNTk1ZjA2MDNmMmVjNjE3MDQ3OTlmNGM0ODI2NjcgcGFydGlhbGx5LgorCitjb21taXQgMDBmZDYyNzIwZWM0NTRmNWE2OTBkZTRmZWJhMDgyMjNjZmIyYzNmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDE0OjQ4OjQ0IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXB0cmFwZDogQXZvaWQgY3Jhc2ggZHVyaW5nIHNodXRkb3duIGR1ZSB0byBpbnZva2luZyBwZXJsX2Rlc3RydWN0KE5VTEwpCisKK2NvbW1pdCBkOWUyMjlkODFhYmVhZjE5MWVmMmNjYjA3Nzg0Mjg4NWMyMzBkNjIyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTQ6NDc6NDEgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlIGEgc3VwZXJmbHVvdXMgZGVjbGFyYXRpb24KKworY29tbWl0IDFlMmUyYWY2Y2FlODMwZjM4MWU4N2EyNDRkMDI5ZWI4NmJmM2ZjY2UKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMzoyMDozNyAyMDEyICswMTAwCisKKyAgICBwZXJsL1NOTVAvZXhhbXBsZXMvcGluZ21pYi5wbDogQWRkIGVycm9yIGNoZWNraW5nCisKK2NvbW1pdCAyNDFhMTQxZTMxZjE2ODRmYzZjZjcwY2M0YTAwY2NlNjM2ZmQzNTI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRmViIDIgMTE6Mjg6MzcgMjAxMiArMDEwMAorCisgICAgTWFrZSBjb25maWd1cmUtdGltZSBFVlBfTURfQ1RYX2NyZWF0ZSgpIGRldGVjdGlvbiB3b3JrIG9uIHRoZSA1LjQgYnJhbmNoLgorICAgIAorICAgIFNlZSBhbHNvIGNvbW1pdCA0NmVhYzAyZTlhMjdiZjRmMzA2OGU3OTVjYWI4OTFmMDVhODQ4ODcwLgorCitjb21taXQgNmQ5ZDE0ZmVhYWEyZDBmZWM2OGI0ZDE1ODk0NGQzMmNiMDRmZjFiYworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEZlYiAyIDExOjEyOjAwIDIwMTIgKzAxMDAKKworICAgIFJldmVydCB0aGUgY2hhbmdlcyB0aGF0IGJyZWFrIHRoZSBidWlsZCBvbiB0aGUgNS40IGJyYW5jaCBmcm9tIGNvbW1pdCBkYmI4Nzk1YTdkZjU5NWYwNjAzZjJlYzYxNzA0Nzk5ZjRjNDgyNjY3LgorCitjb21taXQgOGFiZTQ5ZTMwYzk3Yzg5ODNlODNiNDVhMzVjNzE2ZmU5MWY2NmJlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEZlYiAxIDExOjU2OjU4IDIwMTIgKzAxMDAKKworICAgIEZpeCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGluIHRoZSBESVNNQU4gTUlCIGltcGxlbWVudGF0aW9ucy4KKworY29tbWl0IGY5ZmIwYTUzMzM3NWUxNGRjMzcwMDI1YTBiMmZiYzc2MWJmMjdiZTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAwOTo1NjowMiAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIkhPU1QtUkVTT1VSQ0VTX01JQjogZml4IGEgY29tcGlsZXIgd2FybmluZyIgYmVjYXVzZSBpdCdzIHdyb25nLgorICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWE2Yjc5YmMxMjRhN2I3YTg4NWQ3ZTUwMzVhYjA2YWEzZWNlZjYxMy4KKworY29tbWl0IGNhNGE0ZmUyNWVmZDI3MTRmOGYxOTYxYjk3ODU2NjE2NTYzZjQyYzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBGZWIgMiAxMDoyMTo0OSAyMDEyICswMTAwCisKKyAgICAuZ2l0aWdub3JlOiBBZGQgcHl0aG9uL2J1aWxkCisKK2NvbW1pdCAxM2FkYTU2NTU4YjQ0ZTI4ZDEzNTVjMGRjZTFkOTIxZjM3NDZkNTQ4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTo1Mzo0OSAyMDEyICswMTAwCisKKyAgICBSZXZlcnQgIlJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiIgLSB0aGVyZSAqaXMqIE5FVFNOTVBfUFJJbyBpbiBWNS02KyBicmFuY2hlcworICAgIAorICAgIFRoaXMgcmV2ZXJ0cyBjb21taXQgYWE1MjhiZDIyYzc0OTNjYThkNjdlNjc4ZmJmNjE1Y2EwZjYzZWE2ZC4KKworY29tbWl0IGFhNTI4YmQyMmM3NDkzY2E4ZDY3ZTY3OGZiZjYxNWNhMGY2M2VhNmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjEzOjE4IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiAtIHRoZXJlIGlzIG5vIE5FVFNOTVBfUFJJbyBpbiBWNS00IG9yIFY1LTUgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIuCisKK2NvbW1pdCAyZmI5OWJlOWFhODZhNmNhMzQ5Yjg2ZDRlZjhiYzcyNmVkOWYyYTgyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNDo1ODozNSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IGU1YzM1NTg5ZTBiZjQxNmJmZDAzNmJkNDY4ZjQyYWFlYWIyNWU3ODgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjU1OjU2IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgMzQ1YTFlNDI1NDgxMmNiOWVkYzFkMjc0NDkxYjc2NjgxYTlkYmExZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTQ6NTE6MjYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZXJyb3IgaGFuZGxpbmcgaW4gaW5pdF9pY21wKCkuCisKK2NvbW1pdCBjMzAzNTQ5YTU5ZmE4YzJmMjBhOWQ4YmYxZTk4NWZiYzhhYmRlNmE4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTo0NjoyOSAyMDEyICswMTAwCisKKyAgICBSZXdvcmtlZCBfcmVnaXN0ZXJfZXh0ZW5kKCkgZXJyb3IgaGFuZGxpbmcuCisKK2NvbW1pdCA5YzIwZTI3YTcwMjZmYzAzMGRhM2IzMjhiOWEyZTFiNGYzNjY3MGNkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNToyMToyOCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDIyZmQwYmZjMmRmMGUxZjYwMjBkYzNjNTBhNzUzZGRmMjhhNDU5OWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjIwOjIyIDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgNWQ2MWU1N2JhZjU4MGM3ODI1MmMwYWJiMDA5OGMwN2JiMDVhZjE3YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MTc6MDUgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCAzYzNlZWFlODBkNzk2ZjI3NTk3YzkwMWU3ZmYyMDQ2Yzc2OWVmNGI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowODowOSAyMDEyICswMTAwCisKKyAgICBNYXJrIHJvd3JlcV9jdHggYXMgZnJlZWQgc28gbmV4dCBpdGVyYXRpb24gYWxsb2NhdGVzIG5ldyBvbmUgaW5zdGVhZCBvZiByZXVzaW5nIHRoZSBmcmVlZCBvbmUuCisKK2NvbW1pdCBhZjlhYmQ1M2MyMzM3YzkwYTY5MWE3YjA0NGZmM2Y5N2MxMDAzMTYxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowNToxMCAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IGNmOTQ2NWY1NDE4MWU2MmUyMWE5YjEwMjE5MTMxMTA3YTNkMmViZjYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE1OjA0OjA2IDIwMTIgKzAxMDAKKworICAgIERvbid0IHRvdWNoIHJlZ2luZm8gd2hlbiByZWdpc3RyYXRpb24gZmFpbHMgLSBpdCBoYXMgYmVlbiBhbHJlYWR5IGZyZWVkLgorCitjb21taXQgNzg3MWYyYjA5YjhiNTJmMzRhOWU1Nzc4NDI2NjQ1OTA1MzE2NWJjYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBKYW4gMjAgMTU6MDI6NTAgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgdG91Y2ggcmVnaW5mbyB3aGVuIHJlZ2lzdHJhdGlvbiBmYWlscyAtIGl0IGhhcyBiZWVuIGFscmVhZHkgZnJlZWQuCisKK2NvbW1pdCA3YTM3ZjMzZDMxMGM5NTk4NjA3YmMzMjNkOWJkYmY5MWFhZjcyYzk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxNTowMDo1MSAyMDEyICswMTAwCisKKyAgICBEb24ndCB0b3VjaCByZWdpbmZvIHdoZW4gcmVnaXN0cmF0aW9uIGZhaWxzIC0gaXQgaGFzIGJlZW4gYWxyZWFkeSBmcmVlZC4KKworY29tbWl0IDNlNDVmNzAyNjI0OWU0NTM1MGVkYWFjODUzMzc0MjNhYTBlOTVkOGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgSmFuIDIwIDE0OjEzOjE4IDIwMTIgKzAxMDAKKworICAgIFJldmVydCAiRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzIiAtIHRoZXJlIGlzIG5vIE5FVFNOTVBfUFJJbyBpbiBWNS00IG9yIFY1LTUgYnJhbmNoZXMKKyAgICAKKyAgICBUaGlzIHJldmVydHMgY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIuCisKK2NvbW1pdCA2MTkzNjc2MmU2NDFjMThkYjc1YWE1MTI1YTMzZTc3NmM2NzdhZGM1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIEphbiAyMCAxMToxMzozOSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBmcmVlaW5nIHJlZ2luZm8gdHdpY2Ugb24gZXJyb3IgaW4gYSB0ZW1wbGF0ZSBhbmQgYWxsIGl0cyBpbnN0YW5jZXMuCisKK2NvbW1pdCA0OTY0Mzc0MzA0MTVmYmFmZWIxY2NkNDc3NGYxY2EwMGQ2MjdlYTFmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDExOjA0OjEzIDIwMTIgKzAxMDAKKworICAgIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IEZpeCBjb21waWxlciB3YXJuaW5ncyBpbnRyb2R1Y2VkIG9uIFY1LjYgYnJhbmNoCisKK2NvbW1pdCA1YjRhMjRjZGNlZTFiYzNkODI2MzNjY2FmZWI5NmZjZTk1MzQ5YzU5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIyOjI3IDIwMTIgKzAxMDAKKworICAgIHVuaXQgdGVzdHM6IGZpeCBhIDY0LWJpdCBjb21waWxlciB3YXJuaW5nCisKK2NvbW1pdCBjYmYxYzkxYmFmNzE5MWJlNWZhMjdkODFiY2Y4NzE0MzMxYTJjMTJmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDIwIDA5OjIwOjQyIDIwMTIgKzAxMDAKKworICAgIFVzZSBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKCkgdG8gZnJlZSBhIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdC4KKyAgICAKKyAgICBGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdCBkYmYyNmEwNWEwNGVmMjRjNDczNDZlNWFkZGE0OGUzMzg0OThlNzFmLgorCitjb21taXQgYWE2Yjc5YmMxMjRhN2I3YTg4NWQ3ZTUwMzVhYjA2YWEzZWNlZjYxMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiAyMCAwOToyMDozMSAyMDEyICswMTAwCisKKyAgICBIT1NULVJFU09VUkNFU19NSUI6IGZpeCBhIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDNhNzZiNDNlMTFmZmZhZGE2MzJmY2NiODQ4YWI1MDBlODc2YWQ0OGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTggMTY6MjE6MDUgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBBdm9pZCB0aGF0IGFuIFNOTVAgc2V0IHdpdGggVXNlRW51bXMgZW5hYmxlZCBjYXVzZXMgYSBzZWdtZW50YXRpb24gZmF1bHQKKworY29tbWl0IDg0ZGVjOWZhOTJiMGFhMmQ1OGViNzAyMDMzMGY0Zjk4ZTUxNTQzMjEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTggMTQ6Mzg6MjEgMjAxMiArMDEwMAorCisgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogRml4IG1vc3QgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IDM4Y2YyMThjM2YxYTcyNzc4NmUyMjdhNWQzZmIxODZmZDBmMWExNWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjUwOjEzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIHR5cG8KKworY29tbWl0IDQ1NDEyMjI0NDEyMmJmZGI2ZjY3Y2FiMzEyNTZkN2I0NjM3MmU5ZTEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjMwOjE4IDIwMTIgKzAxMDAKKworICAgIEZyZWUgdG1TdGF0ZVJlZiBvbiBlcnJvcnMuCisKK2NvbW1pdCAwMTE5MDIyZGFhNTljNzNiZmVjMGRhMjM4NmQwNjI4ZjE0ZTZkYWI3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxOSAxNDowOToxMiAyMDEyICswMTAwCisKKyAgICBGcmVlIGZpbmdlcnByaW50IHdoZW4gaXQncyBub3QgbmVlZGVkLgorCitjb21taXQgMGU4NGNkMzAzYTA4MjY3ZGVjNzhmNmQ4MWM5YmIwN2UzZDgzYTExZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6NDg6MjYgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNjNkYzg0NmE3OTQ5Y2U2OTdiM2UyOGM1NDNkYzExMDVlNjNhMjI1MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MDg6MjggMjAxMiArMDEwMAorCisgICAgRnJlZSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludC4KKworY29tbWl0IGNlMWYyODRhNjNlYjgxNjQ0YjNlMzI2MDZjYmUzOWI2N2UxZGZmMmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDE0OjM3OjA5IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDdlMjE0MTNjYTZmMmVmZDdhM2FmYjYyYzYyYjY0NDg4MWI4YmQxZTcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDE5IDEzOjQ2OjMwIDIwMTIgKzAxMDAKKworICAgIFByb3Blcmx5IGFsbG9jYXRlIGFuZCBmcmVlIGVuZ2luZUlELgorCitjb21taXQgMzRjOTYyODgyNjA3YzM2MzhhMmZhMjVhMmFjNTMxNDkyZDcxYzc4NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6Mzc6MjUgMjAxMiArMDEwMAorCisgICAgRnJlZSBsb2NhbGx5IGFsbG9jYXRlZCB0bVN0YXRlUmVmLgorCitjb21taXQgZjU3YWU1MzFkYzU2NThhYmNkNjViMTYyNzYxNTUyNTIzOGQxNmQyZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MjA6MjQgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNTM2YmM1NzU1NmMzMTQxNTYxZWE0YTE5NDgxMGIxNjI5MGE2OTFlZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MTU6NDcgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgaWYgdGhlIGZ1bmN0aW9uIGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nLgorCitjb21taXQgYTA3NzdkMzA3ZGJjYWYyMTllZTAxODRhMGZiYWI5ZDRlNWQ2YWEwYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTM6MDE6NDUgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgOGI5N2E3MWM4ZTc5NTk0MjhlYjRkNGU4ZDkwZTkwOTZkNDNmZjA5ZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTc6MjYgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgMmMxNTA3YzIyMDMwNTQ5YWU2NjBjMGUyMTFmYmRjNWM3NWVjNWM1NworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTM6NDcgMjAxMiArMDEwMAorCisgICAgRnJlZSBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkgb24gZXJyb3JzLgorCitjb21taXQgNjVmMmI3YmNkNGZlMDM5MDZhYTFhMTE1YWI2MGE4OWI4YWU5MzNkNQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTkgMTI6NTE6MzYgMjAxMiArMDEwMAorCisgICAgQ2xvc2Ugb3BlbiBmaWxlcyBvbiBlcnJvci4KKworY29tbWl0IDBlNTJlNGY2NmQ0NDc2NmJlYTM3NDczNTU2Yzc4ZTUyMTliOTU0NjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjQ1OjMzIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGRiZjI2YTA1YTA0ZWYyNGM0NzM0NmU1YWRkYTQ4ZTMzODQ5OGU3MWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjQyOjE3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDc0OGRhODRiMWZkNjU0ZTMzOGJjNzAxZThmOWU1ZGEyMjkxODdmMWMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjMyOjA0IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGViMjE3MTQ2ZmQ1NDAzNmVhNDIwMmJmZWY3OGJiZjc3NGQ3ZTM4MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjIzOjEwIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDliYTM4ZWVjNjYxMzhlYzFmNjEzZWE4ZDA0ZTE1ODEzMGM3MTIxYmMKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE4OjU1IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGQ5ZDkzOGQzMDE4YzI3ZjUzMjc3YmM1ZTU5NTc4NTAwNDkwYzFkMDkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE2OjM4IDIwMTIgKzAxMDAKKworICAgIENsb3NlIG9wZW4gZmlsZSBvbiBlcnJvci4KKworY29tbWl0IGQ1ZTgxN2Q1YmQ1MThkOWFjNmEwZDYwZTBlMTQxZGQ2NGYyN2FkMTkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjE0OjEyIDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDJhZTY4ZjA1OWRmOWQ3NGIwNzRkMTJmNTljMTg0NzQ2NmVkNTc2Y2QKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE1OjAzOjE3IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IGEwMGYzZDQ2MTEyMWI1NDVhZWQ3MmFjMTJiMjQzODc5MWRjZmM0YmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDE4IDE0OjU4OjM5IDIwMTIgKzAxMDAKKworICAgIEZyZWUgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5IG9uIGVycm9ycy4KKworY29tbWl0IDU5ODg0YmI0ZDM1YWQxMzc0N2ZmYTY3MjM0MzZkY2E1ODdhOWFiNzcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE3OjA5OjEyIDIwMTIgKzAxMDAKKworICAgIEluIGFib3ZlIGNvZGUsIG9sZW5ndGggaXMgY2hlY2tlZCwgc28gbGV0J3MgY2hlY2sgaXQgYWxzbyBoZXJlLgorCitjb21taXQgYmE1ZDUyOTJiMDQzOTNiMGM3ZDdkN2VkOTYxMjQxOTI5NDE4YzZlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTc6MDU6MTQgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgZGEyZDZhNzAyOGExM2I5ZWRmM2E1Yzg0MzE0ZDBmMWZlZWY3NjcxNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6NDQ6NTYgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwuCisKK2NvbW1pdCBmODgwNTRhOWI2OWI2ZGUyNzRmN2ExNGE1OWI0NzMyM2U1ZTRlNGM2CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNjozNzozNSAyMDEyICswMTAwCisKKyAgICBEb24ndCBkZXJlZmVyZW5jZSBjb250ZXh0IGlmIGl0J3MgTlVMTC4KKworY29tbWl0IDdjNGQ0NTllOGYxZjY1MmNjMjA5OGMzZDRjODFkZTkwYTg0ZWQ3MTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjMwOjA5IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlZmVyZW5jZSBOVUxMLgorCitjb21taXQgZmMxOWI3ZjMzYjU4NzkyN2QyYTAxZTcyZDIzZDIxYjliMTY5NmFiMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MjU6MjYgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgY2xvc2UgTlVMTCBmaWxlLgorCitjb21taXQgNWU5NWNhNjc5MDA3NmI3ODgwNzJhODAxZWU3YzgyOTY5ZDk5NWJjYgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTc6MDkgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkZXJlZmVyZW5jaW5nIE5VTEwgd2hlbiBhIHRyYW5zcG9ydCBkb2VzIG5vdCBoYXZlIGZfZm10YWRkci4KKworY29tbWl0IGVlZDZmNWY5YjlhZTU0ZDJjZWFiNjdhZDg1YWRkZTFmNmE4YTIxZDUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjEzOjEzIDIwMTIgKzAxMDAKKworICAgIFByZXZlbnQgZGVyZWZlcmVuY2luZyBOVUxMLgorCitjb21taXQgNDFjZGU2OGI1ZmE0YjM4ZDgxNDUwY2Y5MWUwODJjZGZhODI1ZTdjZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTY6MTA6MTAgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgaWYgYSByZWdpc3RyYXRpb24gd2FzIHJlYWxseSBmb3VuZC4KKworY29tbWl0IDViNzJhNDA4NTM4NzZhMTg2ZWZjYzAwOTBhNGUzMmMyMzViOWMwNWYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE2OjAzOjU4IDIwMTIgKzAxMDAKKworICAgIERvbid0IGRlcmVmZXJlbmNlIE5VTEwgd2hlbiBkaWZmbGVuIGlzIFNNVVhfTUFYX1BSSU9SSVRZICh3aGljaCBpcyBoaWdobHkgdW5saWtlbHksIGJ1dC4uLikKKworY29tbWl0IGZhNmE5MTJlNDFjNWQwZmQyYTYzNjg5NGU4NmI2NDI2YzA3Mzc1YWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE1OjM3OjQ0IDIwMTIgKzAxMDAKKworICAgIENoZWNrIGZvciBtaXNzaW5nIHZhbHVlIGluIHNldEV2ZW50LgorCitjb21taXQgNDEwYjcxZGE0MjUzODlmZWNjMjVkMTRmNDlmMjM3NTM1ODE1NzZhZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6Mjg6NDEgMjAxMiArMDEwMAorCisgICAgRGVyZWZlcmVuY2UgZXJlZyBvbmx5IGlmIGl0IGlzIG5vdCBOVUxMLgorCitjb21taXQgMTg1MjcyZDFhMGI5MTM3NzQxODZmMWI5MTM1YWVhZjYzN2ViZWQ1MgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTU6MTc6MjEgMjAxMiArMDEwMAorCisgICAgQXMgcGVyIGFib3ZlIGNvZGUsIHRlbXBsYXRlX3YycGR1IGNhbiBiZSBOVUxMLCBzbyBjaGVjayBpdCBiZWZvcmUgZGVyZWZlcmVuY2luZy4KKworY29tbWl0IDQ4ZTVlYWQzZmQyYzJiMzg1ZGY2OTcyYzY3NTI2ZmY2YmRjMzA3NjgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjQyOjIyIDIwMTIgKzAxMDAKKworICAgIFVwZGF0ZWQgbGFzdCBmaXggdG8gbmV3IGVycm9yIHJlcG9ydGluZyBzdHlsZS4KKworY29tbWl0IGYzM2QzMzYxNWQ2ZDg1ZDAwNzM3MjY0NzNjNDE0NmNiY2RmMTFjZWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDE0OjMwOjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHNpZ3NlZ3Ygd2hlbiBlbXB0eSBjb25maWcgbGluZSBpcyBwYXJzZWQuCisKK2NvbW1pdCBiNWRmMWVlYjQ3ZWQzNTU5YjZmNGQ5ZWNjY2RiMjQyMTI2ZTZjOTkyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxNyAxNDoxMTo1OCAyMDEyICswMTAwCisKKyAgICBGaXhlZCAoaGlnaGx5IHRoZW9yZXRpY2FsKSBzaWdzZWd2IHdoZW4gc3AtPnNlY3VyaXR5RW5naW5lSUQgaXMgTlVMTC4KKworY29tbWl0IDZmZWVkNjI5YTcxODk5YzExMzA5Njk1OWQ4NTQ5ZGMxMjAxZThmOWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDE3IDEzOjQzOjM3IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIE5VTEwgYW5kIGxlbiBjaGVjayBqdXN0IGluIGNhc2Ugc29tZW9uZSBwcm92aWRlcyB2YWx1ZSA9IE5VTEwgYW5kIG5vemVybyBsZW4gKC0+IE5VTEwgaXMgdGhlbiBkZXJlZmVyZW5jZWQpLgorCitjb21taXQgMzU1YzVhYjI2NGFmMmE2MDIwYTFkOGE5MjNmODBmMTFiOTQyMjk1ZQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTcgMTM6MzY6NDEgMjAxMiArMDEwMAorCisgICAgRXh0ZW5kIHRoZSBOVUxMIGNoZWNrLCBpLmUuIHJldHVybiBpZiB0aGVyZSBpcyBub3RoaW5nIHRvIHJlbW92ZS4KKworY29tbWl0IGRkZDc5NDhhY2FkOTM4Y2Q0Mjk3NDUwNWRkY2E0ZjAzNzIxMTY3MDkKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMTE6MTE6MjkgMjAxMiAtMDgwMAorCisgICAgdXBkYXRlIHNwYXJ0YSdzIGNvcHlyaWdodAorCitjb21taXQgNDEyNTYwODZhN2E1MDQxNDUzNDE5Y2ZkNmU1NjJjN2I1NWM1NmIwYQorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIEphbiAxNiAxMDozMjowNCAyMDEyIC0wODAwCisKKyAgICBwdWxsZWQgZnVsbCBjb3B5IG9mIGV4dHJhY3RuZXdzIGZyb20gbWFzdGVyCisKK2NvbW1pdCA2MjVhNzBkYmRmZDk5MDJkYTc5ZWZhMjkzZmU2ZDJhYzhjY2YyYjJlCitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gSmFuIDE2IDEwOjI0OjE5IDIwMTIgLTA4MDAKKworICAgIHVwZGF0ZSB0byBjaGFuZ2UgdG8gdGhlIG5ld2VyIGxvZyBnZW5lcmF0aW5nL3BhcnNpbmcKKworY29tbWl0IDYyZTMyYjEzMDg5YjI5ZWRjZjI3NmY2MTVkYTY3ZTQ1MDhmZTdiYjUKK0F1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBKYW4gMTYgMDk6Mjk6NDIgMjAxMiAtMDgwMAorCisgICAgY29uZmxpY3RpbmcgbWVyZ2UgZnJvbSBtYXN0ZXIgZm9yIGV4dHJhY3RuZXdzCisKK2NvbW1pdCA3MDA4NGRhNjFkMmJjYmQyY2YxZWQ4MWJkYzNiZjY3OTRjMmFmZmI2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDEzIDExOjQ5OjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBESVNNQU4tU0NIRURVTEVSLU1JQjogSGFuZGxlIDMyLWNoYXJhY3RlciBzY2hlZENvbnRleHROYW1lIHZhbHVlcyBjb3JyZWN0bHkuCisgICAgCisgICAgU2VlIGFsc28gY29tbWl0IGIzYzQ5ODI1NDJlMGFiMTUxZmIzODg0NzU0Y2RmYmNiNDcyZGE1MmQuCisKK2NvbW1pdCAwNGJmM2UyODgxNThlZTg4MGVkZjIzN2U0MDA3ZmVlMzdkMjA0NGRkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNTozOTozNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBlbmRsZXNzIGxvb3Agd2hlbiBTU0xfcmVhZCByZXR1cm5zIGVycm9yLgorCitjb21taXQgYzE1MjZmY2NjMDQ3NGMxZGIxOGNhYTlkYmI4MzM4NTNjZGRkZTNjYworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MTM6MjEgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvLgorCitjb21taXQgYTI3YWExOWRmMjgzMTU2YzAzMmM4MWVhZWU1ZTExNTg1OWQzOGMxNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MTE6MzIgMjAxMiArMDEwMAorCisgICAgRG9uJ3QgcmVwbGFjZSAncmMnIHZhcmlhYmxlLCBpdCdzIHZhbHVlIGlzIG5lZWRlZCBvdXRzaWRlIHRoZSBsb29wLgorCitjb21taXQgOTg1ZGZmMmIwODc2ZDk0ODNjNDE0ZmNjZWEzZWY2YmM2M2UxNDU2MQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTU6MDE6MzIgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCBkdXBsaWNhdGUgY29kZS4KKworY29tbWl0IDJmZDc4MTgzMThlN2E1ZGZlOThmNTJjY2Y3NTBjMmE2M2U4MjVkZWQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDE1OjAwOjIyIDIwMTIgKzAxMDAKKworICAgIFJlbW92ZWQgZHVwbGljYXRlIGNvZGUuCisKK2NvbW1pdCAxNWYyMTEzMGJhMzNkYzlhZmQxNjRlNTJkZmQ3NGM5Y2VjMGU5MjMyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVGh1IEphbiAxMiAxNDo1ODoxNCAyMDEyICswMTAwCisKKyAgICBSZW1vdmVkIGR1cGxpY2F0ZSBjb2RlLgorCitjb21taXQgMmE4YThmMmFiN2NkNzU4MjZjNWQ0MWVjM2NmZDVjZTNlOTYzNGNmMworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6Mzk6MjggMjAxMiArMDEwMAorCisgICAgcmVtb3ZlIGRlYWQgY29kZSwgJ2NwJyBpcyBhbHdheXMgIT0gTlVMTCBoZXJlLgorCitjb21taXQgMzhmZDYzNzhjYzMyNzUxODBmNjNiOGQ5YjlhNDA3MmIzZGFiZjhlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6MjU6MDYgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvLgorCitjb21taXQgZWJkOTJlMTliMTBjMGEzOGUxN2NkZTQwNzg2NGI0NWMyNmUxNzMyNworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTQ6MDc6NDMgMjAxMiArMDEwMAorCisgICAgUmVtb3ZlZCB1bm5lY2Vzc2FyeSBpZiAodmFsdWUpIGNoZWNrIC0gdmFsdWUgaXMgY2hlY2tlZCBmZXcgbGluZXMgYmVmb3JlLgorCitjb21taXQgYzVjYWNmNWNhZjk3OWQwMThlYTZjYWUxYzAzYjhmZGYwYjExOGRmZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6NDQ6NDMgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBkb3VibGUgZnJlZSgpLCAnZGlybmFtZScgaXMgYWxyZWFkeSBmcmVlZCBpbnNpZGUgc2VfYWRkX3BhaXJfdG9fbGlzdCgpIGlmIGl0IGZhaWxzLgorCitjb21taXQgYWNkY2ViNTBlYTY2ZDZiMzIzYzc0ZWUwMjFmYjc3ZTgxMGU0ZTdhZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBKYW4gMTIgMTM6NDM6MTkgMjAxMiArMDEwMAorCisgICAgUHJldmVudCBtZW1vcnkgbGVhayB3aGVuIG1hbGxvYyBmYWlscy4KKworY29tbWl0IDE3MDUzZTM0Y2ZlOWE4YWIzOTVmYjUwZjVjM2YxZGFmYzcyNDdhZWIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgSmFuIDEyIDEzOjMyOjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGRvdWJsZSBmY2xvc2UoKS4KKyAgICBMaW51eCBtYW4gcGFnZSBmb3IgZmNsb3NlKDMpIHNheXM6IEluIGVpdGhlciBjYXNlIGFueSBmdXJ0aGVyIGFjY2VzcyAoaW5jbHVkaW5nIGFub3RoZXIgY2FsbCB0byBmY2xvc2UoKSkgdG8gdGhlIHN0cmVhbSByZXN1bHRzIGluIHVuZGVmaW5lZCBiZWhhdmlvci4KKworY29tbWl0IGE2NjQxZWRiOWNiNzRmYzIyMzZiNDJjZTU1NTRmYzMzMjk5NTY1NTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTU6MjI6MzQgMjAxMiArMDEwMAorCisgICAgTWluR1c6IFNraXAgdGVzdCBUMDY1IGlmIG5vdCBzdGFydGVkIGZyb20gaW5zaWRlIGFuIE1TWVMgc2hlbGwKKworY29tbWl0IGE4ODNlZjE5ODJmMzAxYjE0ODVkMjI3MzAxNjc0OTI3MzMwZjViNjcKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDExIDE1OjE0OjUzIDIwMTIgKzAxMDAKKworICAgIE1vdmVkIGRlYnVnIG9wdXRwdXQgYmVmb3JlIHJldHVybi4KKworY29tbWl0IDQ1NzUxOTY3Mjg3ZDk3NjQwZWZkY2RmOGU3N2U4ZDQ5MDkzOWQ4ZWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTQ6MTc6MTggMjAxMiArMDEwMAorCisgICAgQ29udmVydCBzdHJ0b3VsbCgpIHVuaXQgdGVzdCBpbnRvIGEgTmV0LVNOTVAgdW5pdCB0ZXN0CisKK2NvbW1pdCAyYzJmYTQ4MzM2YTRmMWYxNzdjMjk5MWQ2NTE1ZDI5ZjM5NTMzYzQ0CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEzOjUwOjQ0IDIwMTIgKzAxMDAKKworICAgIENvbnZlcnQgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKSB1bml0IHRlc3QgaW50byBhIE5ldC1TTk1QIHVuaXQgdGVzdAorCitjb21taXQgMDdjNjY2ZjZjZWEyN2YyYjJhYjliYzA4YWVkMGNiNjEzM2ZlMzc1OAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTM6MTc6NDUgMjAxMiArMDEwMAorCisgICAgRml4ZWQgY29tbWl0IDczYTUyM2U0NjgyNzdmNmRmMmU5ODQ4OTEzMTNiOGJlOGJjZTE5MjE6CisgICAgRmlkZXggZGVyZWZlcmVuY2luZyBrZXktPmluZm8gd2hlbiBrZXkgaXMga25vd24gdG8gYmUgTlVMTC4KKworY29tbWl0IDNiNjg2NTY2Mjk2ZGQ4N2JjNDJiN2YxMTY5ZGFhY2RiM2M0NWNjNTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMTggMDY6MjU6NTYgMjAxMCArMDAwMAorCisgICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRob3V0IHdhcm5pbmdzIHdpdGggTVNWQyA2LgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTQ4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IGYzYTdkMWIwOTYwOWRhZDY0OWY1OGJiZGI1YjdlMTBkMzliMzk4YzEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBPY3QgMTcgMTE6MDQ6MDYgMjAxMCArMDAwMAorCisgICAgRm9sbG93LXVwIGZvciByMTk0NzY6IGZpeGVkIGEgdHlwby4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCAyZGU3M2JkMzY1YTM4MWI5YzM1M2NhNTIzMDc2OWVlZmIxYWM3MWVkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDExOjQyOjQyIDIwMTIgKzAxMDAKKworICAgIGxvY2FsL3Bhc3N0ZXN0OiBSZW1vdmUgYW4gaW5jb3JyZWN0IFBBVEg9IHN0YXRlbWVudAorCitjb21taXQgNjk5NTEzZjEyMzhlMGFkY2UxZjFjZWM5OGUwZDE0NzI5M2ZjNTA0NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgU3VuIE9jdCAxNyAwOToyNTo1MSAyMDEwICswMDAwCisKKyAgICBORVRTTk1QX1JFTU9WRV9DT05TVCgpLXJlbGF0ZWQgY2xlYW51cC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk0NzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCA2MzU4ZGVlNzJmYjM0N2UyNjAwYTBhN2JkMjFmMjMyNzBkM2EwMGY2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDEwOjU4OjE1IDIwMTIgKzAxMDAKKworICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmM6IEFkZCBhIGNvbW1lbnQKKworY29tbWl0IDUzOTZiZmUwMzJjOGNiYzczYzhmZjVkNGIwODVlYmFkYTlmNTk4NDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6MzA6MTYgMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBzdHJuY3B5KCkvc3RybmNhdCgpIGJ5IHN0cmxjcHkoKS9zdHJsY2F0KCkKKworY29tbWl0IGZlYjNhZjI4ZGNhZTIyMDE1YWU4NjVhMmU1ZGQ4YzQxNmU5OTkxZDgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gMTEgMTA6MDI6MDggMjAxMiArMDEwMAorCisgICAgUmVwbGFjZSBzdHJuY3B5KCkvc3RybmNhdCgpIGJ5IHN0cmxjcHkoKS9zdHJsY2F0KCkKKworY29tbWl0IGI3ZTFhYTI1NWJhZTRhMzQ1M2Y5ZWNhNjQ0YTg3NjYzNDM1MWYxMWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMjAgMTk6MzY6MjggMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogbGlic25tcDogY2hhbmdlZCB0aGUgdHlwZSBvZiB0aGUgZm91cnRoIGFyZ3VtZW50IG9mIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSBmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2ggdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuIHBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuIGNoYXIqIG9yIGNvbnN0IGNoYXIqLgorICAgIENIQU5HRVM6IFdpbjMyOiBjaGFuZ2VkIGluX2FkZHJfdCBmcm9tIHVfaW50IHRvIHVfbG9uZyBzdWNoIHRoYXQgaXQgbWF0Y2hlcyB0aGUgZGF0YXR5cGUgb2Ygc29ja2FkZHJfaW46OnNpbl9hZGRyLgorICAgIEFsc28sIGZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgKG1vc3RseSBjaGFyICogPD4gdV9jaGFyICogbWlzbWF0Y2hlcykgYW5kIHJlbW92ZWQgc29tZSBjYXN0cy4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxODM0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCWFnZW50L2FnZW50X3JlZ2lzdHJ5LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYworICAgIAlhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMKKyAgICAJYXBwcy9zbm1wdHJhcGQuYworICAgIAlzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jCisgICAgCXNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYworICAgIAlzbm1wbGliL3N5c3RlbS5jCisKK2NvbW1pdCBmNDdhMzc1Mjg0OWRiMDc1ZTZmMjA1M2I4NTk1YjdiNzkyZmI2NDYyCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgT2N0IDE1IDEwOjU2OjA5IDIwMTAgKzAwMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQnVpbGRzIG5vdyBjb3JyZWN0bHkgd2l0aCBhIDY0LWJpdCBjb21waWxlci4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDAyYjYwNTZkZjk1ZGE4YjY3MzAzNGUzOWMyYzdjMzg2ZWQwZjM2OWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTE6NDQ6NTMgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBjYXN0aW5nIGF3YXkgY29uc3QKKworY29tbWl0IGExOTg2NTgzMmZjNzdmNGMwNDgxNDRkOTFhNDMxYjFlOTRkMzI5ZjIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgT2N0IDE0IDIzOjEyOjA1IDIwMDkgKzAwMDAKKworICAgIENIQU5HRVM6IGFwcHMsIHNubXBsaWI6IFBBVENIOiAyODM1NTc3OiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbiBBc3NjaGUiOiBSZXBsYWNlIFNOTVBfWkVSTyBvZiBhcnJheXMgd2l0aCBhIG1lbXNldC4KKyAgICAKKyAgICBnaXQtc3ZuLWlkOiBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxNzc5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworY29tbWl0IDY3YTNlMmVjY2I5NWY5YzlkMDgwOWVmY2JkZGNkODY2ZWUzMDYyZDUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNiAxNDoyNzoxNSAyMDEwICswMDAwCisKKyAgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QgcXVhbGlmaWVyLgorICAgIAorICAgIGdpdC1zdm4taWQ6IGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE3OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCitjb21taXQgM2RjZGUyZThhNTk1YTUyN2YwNjE0MmMzYjg1MmRlODQzM2ExY2YyOAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFN1biBKYW4gMjQgMTQ6Mjc6NTUgMjAxMCArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogUHJldmVudCBnY2MgcGVkLXdhcm5pbmcgZm9yIE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTgwNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBjMmUxNTI1YTg1YmRhNTI5OWEzYjlmMjQxNjE0ZjdlNjUwOWFlZWJhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDYgMTM6MzU6MTEgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IDI5NWY0NzNjODM1NDYyMjFiMmE3MWQ4MTVjNjFlMzNhNjdmOThhZTM6IHJlZmluZSBORVRTTk1QX1JFTU9WRV9DT05TVCgpIGltcGxlbWVudGF0aW9uLgorCitjb21taXQgY2I0MjNiMGFlOWVkMDA1OWFhMTAwZGM0ZTJmZDkzYWQxYjk3ZmFmOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA2IDExOjU3OjUxIDIwMTAgKzAwMDAKKworICAgIEJhY2twb3J0IGNvbW1pdCBlMmZiMDllMDA5M2UyZjY0OGZlMjYzOGRhMmYzYWYxOGZkYjMyYmYwIC0gaW50cm9kdWNlIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCkuCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAlhZ2VudC9zbm1wX3BlcmwuYworICAgIAlzbm1wbGliL3NubXBfc2VydmljZS5jCisKK2NvbW1pdCBhZmMzOTZhYjE2MThhODU5NWEyNTE5ZmJjMjVmN2E0OThlMTc0NDExCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDA4OjQ5OjM0IDIwMTIgKzAxMDAKKworICAgIFVuYnJlYWsgbmV0c25tcF9ta3RlbXAoKSBhbmQgbWFrZV90ZW1wKCkuCisgICAgCisgICAgVGhlc2Ugd2VyZSBicm9rZW4gYnkgY29tbWl0IGJiOGZjYmI4NzQ5OTgwMDBmOTQ1ZjA1OGQxYWE2ZmUxNGU5MjU4OTkuCisgICAgQWxzbyByZXBsYWNlIGEgc3RybmNweSgpIGNhbGwgYnkgYSBjYWxsIHRvIHN0cmxjcHkoKSBhbmQgcmVwbGFjZSB0aGUKKyAgICBtYWtlX3RlbXBmaWxlKCkgaW1wbGVtZW50YXRpb24gYnkgYSBjYWxsIHRvIG5ldHNubXBfbWt0ZW1wKCkuCisKK2NvbW1pdCAyMTAxODVjMTVkMGQ2NWYwZWE5OGI1ZTNjMmUwNzc2ZjYyMjJkMTcwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDExIDA4OjI3OjQzIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGNyYXNoIGR1cmluZyBzdGFydHVwIG9mIHNubXBkIGludHJvZHVjZWQgYnkgY29tbWl0IDg4NTA2MTY4N2Q5Y2FhMzg0NzA5Nzk2NjdkN2Q4YWQ2NTYzY2VkYWQuCisgICAgCisgICAgQWxzbywgbWFrZSBzdXJlIHRoZXJlIGlzIG9ubHkgYSBzaW5nbGUgY29weSBvZiB0aGUgY2xlYW51cCBjb2RlIGluIGZ1bmN0aW9uCisgICAgbWtkaXJoaWVyKCkuCisKK2NvbW1pdCA4YmI0ZTg2YWJjZjk4ZmYyODc0OGFmMGFmODljOThlNjRkNWNkOTYxCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBXZWQgSmFuIDExIDA3OjQ3OjEyIDIwMTIgKzAxMDAKKworICAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgdGhlIG9sZG1hc2sgdmFyaWFibGUuCisKK2NvbW1pdCA2NjgwMTQ3YjEzOGVjMTE0ZjgxYzVkMTI4YWM5MzUwYzg0NTBkMDgxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgSmFuIDEwIDE4OjQ0OjMxIDIwMTIgKzAwMDAKKworICAgIE1ha2UgdGVzdCBUMDE1aW50NjRfY2xpYiBwYXNzIG9uIDY0LWJpdCBzeXN0ZW1zCisKK2NvbW1pdCAzYWFkMTVhZTU2MGFjODU3ZTczYzkwNzY0ZTkwM2U3Y2EwMmIzMjk1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTo0MDo1OSAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgZm9yIGxhcmdlIE9JRCBuYW1lcworCitjb21taXQgZmJhMTg4ZWU4MjAxMGIyZjJkOGNhMmU0MjZiYTY1NDQ5OWFiM2QwYQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MzE6MzMgMjAxMiArMDEwMAorCisgICAgZml4ZWQgYnVmZmVyIG92ZXJmbG93IGluIF9fY29uY2F0X29pZF9zdHIKKworY29tbWl0IDIxZDI1ZDg2YjhlNDkwNGQ3OThkYzhjOTZkYWRlOWU1MDQ4NDU3YTgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE1OjI2OjA3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHBhcnNpbmcgcG9ydCBudW1iZXJzLgorCitjb21taXQgZDM2OTMxODQxYjJmYzJjZWJjNjM2NGIyOTQ5MTI5YTBhZDQyYWQxZAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTU6MDU6NTEgMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSBidWZmZXIgb3ZlcmZsb3cgd2hlbiBsYXJnZSBTdW1GaWxlIGlzIHVzZWQuCisKK2NvbW1pdCAwZWZkZDAyMmRhMDlhZjFiNWUxNjE3MWZhN2EyYjUyM2M1ZDZlYzU5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNTowMTo1MyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiB0b28gYmlnIHRlbXAgZmlsZSBwYXR0ZXJuIGlzIHVzZWQuCisKK2NvbW1pdCA1NjBiYzZjMDliNzUxNTU2ZWZkNmI0YzQ0OTU3NTFiMTA5YTkzZjkyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo1OToyNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3csIGp1c3QgdG8gYmUgc3VyZS4KKworY29tbWl0IDgyOTFkN2M1YjkyYTMxZGQ0ZjU4MmI0OTdkNGIyYTA4NTMzNjdhNTYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjU1OjE2IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdy4KKworY29tbWl0IDg4ZTFmMzRkZTczMDA1NzVmYTZkYWI4NTdlY2RkYjI0MmE4N2RlODAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQ4OjU1IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBsb25nIGludGVyZmFjZSBuYW1lcyBhcmUgdXNlZC4KKworY29tbWl0IGJlMTM3NWE5OTI2ZWJlMGNkNWI3OGE0MDQ1YzNiZDExYzgzNjY0YjEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjQ2OjQ5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIGEgc2Vuc29yIG5hbWUgaXMgdG9vIGxvbmcuCisKK2NvbW1pdCAxY2IyNDYyNTM3MjA2MmIxNGM3MWQ3ZGQ1MWUyMGZlZjc3M2UyNzQzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDo0MTowMCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBhIENQVSBoYXMgdG9vIGxvbmcgbmFtZS4KKworY29tbWl0IDg0YzgwN2VlMDMyNTFlNTQ4NTZlODNkNjJkMDZlYTA4YjhkZjUyN2EKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjM2OjUwIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBsb25nIGludGVyZmFjZSBuYW1lcyBhcmUgdXNlZC4KKworY29tbWl0IGMzMTBlMzkwYjVkZDA1ZjI0YmU3ZWIxOTA0Yzc0ZTQxMjU5YzkzZGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjI0OjU0IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aGVuIHRvbyBiaWcgdGVtcCBmaWxlIHBhdHRlcm4gaXMgdXNlZC4KKworY29tbWl0IDQ2MDBkMTE0MzRlODNiODY1M2NmOWY4MTNhM2Q4YjYzMDQ1NWI0MmQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDEwIDE0OjE3OjA4IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHBsYXVzaWJsZSBzdHJpbmcgb3ZlcmZsb3cgYmVmb3JlIHBhcnNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKK2NvbW1pdCA4ODUwNjE2ODdkOWNhYTM4NDcwOTc5NjY3ZDdkOGFkNjU2M2NlZGFkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxNDoxMTowMiAyMDEyICswMTAwCisKKyAgICBHZXQgcmlkIG9mIChpbnNlY3VyZSkgU05NUF9NQVhQQVRIIGluIG1rZGlyaGllcigpCisKK2NvbW1pdCA4MDE2ODkwYTQ0NWY2YTdlMmE4NzNhMDQ4NzNkNGUyN2I2ZWU2NGUzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzo0ODozNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCB3cm9uZyBpbnRlZ2VyIHNpemUgb24gNjQgYml0IHBsYXRmb3JtLgorCitjb21taXQgYmI4ZmNiYjg3NDk5ODAwMGY5NDVmMDU4ZDFhYTZmZTE0ZTkyNTg5OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MzE6MzYgMjAxMiArMDEwMAorCisgICAgU2VjdXJlIG1rc3RlbXAoKSB3aXRoIHVtYXNrKCkgLSBvbiBzb21lIGltcGxlbWVudGF0aW9ucyBpdCBkb2VzIG5vdCBzZXQgMDYwMCBwZXJtaXNzaW9ucyBhdXRvbWF0aWNhbGx5LgorCitjb21taXQgMjAyNTIzY2E3MDRiZDcyMmRjMWFjMGUxZTZiMGU0YjRlNTQyNDQ5NQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMTAgMTM6MTE6NTcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZGVyZWZlcmVuY2luZyAnYycgYmVmb3JlIE5VTEwgY2hlY2suCisKK2NvbW1pdCA3M2E1MjNlNDY4Mjc3ZjZkZjJlOTg0ODkxMzEzYjhiZThiY2UxOTIxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMzowODoyNCAyMDEyICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIGtleS0+aW5mbyB3aGVuIGtleSBpcyBrbm93biB0byBiZSBOVUxMLgorCitjb21taXQgMmY0ZTZhY2Q3MTQxODNmMDE1Yjc2MzY1N2Y4ZjA4NDU5MzM1N2UyNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAxMDozODoxNiAyMDEyICswMTAwCisKKyAgICAuZ2l0aWdub3JlOiBJZ25vcmUgcGVybC8qLnltbCBmaWxlcworCitjb21taXQgYzM2NWQ4MGMxNmMyZDE3YjE2MDAxMWU4YzFmOWNiOTU4OTU0ZTlkYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAxMCAwODozNDoxNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IERvIG5vdCBpbnZva2Ugc2h1dGRvd25fcGVybCgpIGZyb20gaW5zaWRlIHRoZSBTSUdURVJNIGhhbmRsZXIgc2luY2UgdGhhdCBmYWlscyBpZiBTSUdURVJNIGlzIHJlY2VpdmVkIHdoaWxlIGEgUGVybCBoYW5kbGVyIGlzIGFjdGl2ZS4gQmFzZWQgb24gYSBwYXRjaCBwb3N0ZWQgYnkgSm9lbCBBdm5pIDxqYXZuaUBhcnViYW5ldHdvcmtzLmNvbT4KKworY29tbWl0IGQwNTlmYjg3OGIxNDM2NTk5OTUzY2VhNWEwNzc0OTlkZGNkY2JjYjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNzowMzo1NSAyMDEyICswMDAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NDA3NTI6IElGLU1JQjogUmVwb3J0IGludGVyZmFjZSBzcGVlZCBjb3JyZWN0bHkgZm9yIEV0aGVybmV0IGludGVyZmFjZXMgaWYgb3RoZXIgdGhhbiAxMCBNYnBzLCAxMDAgTWJwcywgMSBHYnBzLCAyLjUgR2JwcyBvciAxMCBHYnBzLiBBZGQgc3VwcG9ydCBmb3IgTklDcyBmYXN0ZXIgdGhhbiA2NSBHYnBzLgorCitjb21taXQgYzA5OTAzYTQyZTlkOTczMzFmZDllNDhlZTgzMWE4NWFmZGY5YzcwYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEphbiA5IDEzOjI2OjE3IDIwMTIgKzAxMDAKKworICAgIERveHlnZW4tc3R5bGUgZG9jdW1lbnRhdGlvbiBmaXhlcworCitjb21taXQgZTMyNWVjYmZjZTc3ZjAwYWM1Y2Y2ZmJkOTU3Zjk1NDk1ZjYxYzU5YgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIEphbiA5IDEzOjI1OjEwIDIwMTIgKzAxMDAKKworICAgIFN1cHByZXNzIHVuaW50ZXJlc3RpbmcgRG94eWdlbiB3YXJuaW5ncworCitjb21taXQgYmU5MTYxZDNhNTg5OGU4NjM3NjdmOTI2NjEzNDg2MTI2YzJjYmY2NworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDEyOjM1OjM5IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNpbXBsaWZ5IGltcGxlbWVudGF0aW9uIG9mIGZ1bmN0aW9ucyBtYW5pcHVsYXRpbmcgNjQtYml0IG51bWJlcnMuCisKK2NvbW1pdCA4NmU0YzJiZTA4NTJhMGExM2IwNjAzMDc1NzIwYjMyNjRlYzcwZGRlCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTI6Mjk6MTEgMjAxMiArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBpdCBleHBsaWNpdCB0aGF0IE1BWF9TVUJJRCBpcyBhbiB1bnNpZ25lZCBjb25zdGFudAorCitjb21taXQgMzdlMjcyZDhmN2I3MTgwYmExNDBmYTM4NmE1ZmYwNTg5NjhhMDhhMgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE4OjIxOjQ4IDIwMTIgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBJRi1NSUI6OmlmVHlwZTogUmVwb3J0IHR5cGUgImluZmluaWJhbmQgKDE5OSkiIGZvciBJbmZpbmlCYW5kIGludGVyZmFjZXMgaW5zdGVhZCBvZiB0eXBlICJvdGhlciAoMSkiLgorCitjb21taXQgMjY5OTMyZmEzMmM3Y2Q0Nzk1NzQ4OTY5OGUwOWJlZTMxZjYzYjdhZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE0OjM0OjQyIDIwMTIgKzAxMDAKKworICAgIEZpeCBhbiBNU1ZDIGNvbXBpbGVyIHdhcm5pbmcKKworY29tbWl0IDBkMWMyMWY5OTkxZDEzMDlkMDU3ZTNlNDA1NmQ1NDdkZjdkNDBlY2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNjowNjozMSAyMDEyICswMTAwCisKKyAgICBNYWtlIGRlY2xhcmF0aW9uIGFuZCBkZWZpbml0aW9uIG9mIHN0cmxjYXQoKSBjb25zaXN0ZW50LgorCitjb21taXQgMGMzZDRkYmIwYTljZjViMzU5ZjcwYjJmMTk5MTU0OTU1NTRmODQwZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDE1OjIzOjE2IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBzbm1wZDogUmVtb3ZlIGRsbW9kCisKK2NvbW1pdCA4OTNlY2M5N2I1ODc2NjEwNDViZWNiZTA5YTMyMGMxYmNiYzcxYzdjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgSmFuIDYgMTQ6MzY6NTkgMjAxMiArMDEwMAorCisgICAgQWRkIHN0cmxjYXQoKSB0byB0aGUgTVNWQyBidWlsZCBpbmZyYXN0cnVjdHVyZS4KKworY29tbWl0IDNkMTI2NDIyZTYyNTcwMmI5ZDNmYTA2NzZhOTdlYzVjYjIwZDlkMTAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNTowMTowNiAyMDEyICswMTAwCisKKyAgICBNYWtlIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGNvbnNpc3RlbnQgd2l0aCBpdHMgLmluIGZpbGUKKworY29tbWl0IGFmNTNiNzZjMmZmYTc1MWUzOTU4ZDBmYzVkODI3OWY3OGMyYzFjMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBKYW4gNiAxNDo0Mzo1NSAyMDEyICswMTAwCisKKyAgICBTa2lwIFQwNjZwYXNzX3NpbXBsZSBhbmQgVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZSBvbiBNaW5HVworCitjb21taXQgMzVhOTJlNjkzZDEzM2E1YjExZTllOWI1OTlkYmY0N2VkZWY0OTMzYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIEphbiA2IDA4OjE2OjM2IDIwMTIgKzAxMDAKKworICAgIFJlbW92ZSBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMgYWdhaW4sIHdoaWNoIHdhcyBhZGRlZCBhY2NpZGVudGFsbHkgd2hpbGUgcmVzb2x2aW5nIG1lcmdlIGNvbmZsaWN0cyAoY29tbWl0IDFkNzhmN2Q1YjU4YWVkMmI1MmM0ZDM4NmE3YmE4MGE0NDcxMWJhY2EpCisKK2NvbW1pdCBhOWIwNzNlYTNiNmNlZGY3MTNlMzA1ZTdiMTVmMjhhZTU3YmZkZjFiCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTc6NDc6MTEgMjAxMiArMDAwMAorCisgICAgRml4IDY0LWJpdCBjb21waWxlciB3YXJuaW5ncworCitjb21taXQgN2U4OTBkYWQ5NWY1NjYwNjllZTI4MDIxNWE0ZmVhM2YwZTJlMzk4MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDE2OjM4OjUwIDIwMTIgKzAxMDAKKworICAgIEF2b2lkIGEgU0lHU0VHViBpZiBjcCA9PSBOVUxMLiBUaGlzIGlzIGEgZm9sbG93LXVwIGZvciBjb21taXQgMDg5YmNiMzYwYWEyNjc5MGFkMmE4Y2VkZGY1ODNiN2JhNWRkZmQ0OC4KKworY29tbWl0IDFmNjIwMGNmZTFiMGIyN2ViYjA5M2ExNjA2YjU5MmY5ZTk2ODRiZTgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNTo1MzozNCAyMDEyICswMTAwCisKKyAgICBDb252ZXJ0IHN0cm5jcHkoKSBjYWxscyBpbnRyb2R1Y2VkIGluIHY1LjYKKworY29tbWl0IGMzMTI2YjE0MzkyMWZhYmVhYzQ0MjE2NmVjYTViNWI3NDJmZDQyYzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxNTowMjozOSAyMDEyICswMTAwCisKKyAgICBSZXBsYWNlIG1vc3Qgc3RybmNweSgpIGNhbGxzIGludHJvZHVjZWQgaW4gdjUuNQorCitjb21taXQgYjI0ZWU3YzkwOTY1N2RiNDNiZDhjNWQ4YzAxMDU1Y2EwODgzYzljZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA4OjQwOjM5IDIwMTIgKzAxMDAKKworICAgIEVsaW1pbmF0ZSBtb3N0IHN0cm5jcHkoKSBhbmQgc3RybmNhdCgpIGNhbGxzCisgICAgCisgICAgVXNpbmcgc3RybmNweSgpIGFuZCBzdHJuY2F0KCkgaXMgZXJyb3IgcHJvbmUgLS0gc2VlIGFsc28KKyAgICBodHRwOi8vd3d3LmdyYXRpc29mdC51cy90b2RkL3BhcGVycy9zdHJsY3B5Lmh0bWwuIEhlbmNlIHJlcGxhY2UKKyAgICBhbGwgaW52b2NhdGlvbnMgb2Ygc3RybmNweSgpIGFuZCBzdHJuY2F0KCkuIFJlcGxhY2UKKyAgICBzdHJuY3B5KGRzdCwgc3JjLCBuKSBjYWxscyBieToKKyAgICAqIHN0cmxjcHkoZHN0LCBzcmMsIG4pIGlmIHRoZSBnb2FsIHdhcyB0byBhdm9pZCBvdXRwdXQgYnVmZmVyIG92ZXJmbG93LgorICAgICogc3ByaW50Zihkc3QsICIlLipzIiwgbiwgc3JjKSB0byBjb3B5IGEgcHJlZml4IG9mIHNyYyB0byBkc3Qgb3IgaWYgc3JjIGlzCisgICAgICAgIG5vdCAnXDAnLXRlcm1pbmF0ZWQuCisgICAgKiBtZW1jcHkoZHN0LCBzcmMsIG4pIGlmIHN0cmxlbihzcmMpID49IG4gYW5kIG4gPCBzaXplIG9mIGRzdC4KKyAgICAqIHN0cmNweShkc3QsIHNyYykgaWYgbiA+IHN0cmxlbihzcmMpIGFuZCBuIDwgc2l6ZSBvZiBkc3QuCisKK2NvbW1pdCA2ZDk1YmM0MTQ5NDcyOTMxMDA1NDc1YzMwYTU0MWZlZDU1MzRkYTM5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTE6MTk6MTYgMjAxMiArMDEwMAorCisgICAgRml4IHdhcm5pbmdzIHRyaWdnZXJlZCBkdXJpbmcgY29tcGlsYXRpb24gb2YgdGhlIFBlcmwgeHMgc291cmNlIGZpbGVzCisKK2NvbW1pdCBiYWQwNjAwZjZlYzk0NGVmODQ1NWUzMjdjZTc4NGI5YjA3ZDI0N2M5CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSmFuIDUgMTA6MDA6MTMgMjAxMiArMDEwMAorCisgICAgQWRkIGNvbmZpZ3VyZSB0ZXN0IGZvciBzb2NrYWRkcl91bi5zdW5fcGF0aCBzdWNoIHRoYXQgdGhlIGNvbTJzZWMgdGVzdCBpcyBydW4KKworY29tbWl0IDkyYTMyYWM0ODY2YTVlZGM3ZjM0N2QzNzk0MmJmMDI4ZGUwMjc2MmYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBKYW4gNSAxMDowMDoyOSAyMDEyICswMTAwCisKKyAgICBHZXQgcmlkIG9mIGEgY29tcGlsZXIgd2FybmluZworCitjb21taXQgODNlNGMwZTMwNGY2MTdjY2FjNjYxMGVkZDc0ZDE3MDY3OTdiYmY1MgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE1OjM3IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IEFkZCBhIHRlc3QgZm9yIHNlX3N0b3JlX2xpc3QoKQorCitjb21taXQgNGZhZTU4NTIxMDNlYzM4OTNhZDQ4OGJjMGQ5MDVjYTY5MTQ1OTVlZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE3OjE1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFNpbXBsaWZ5IHRoZSBzZV9zdG9yZV9lbnVtX2xpc3QoKSBpbXBsZW1lbnRhdGlvbgorCitjb21taXQgYjMyMjJiYjI3NWYyZjIzNDZlMGZkMDQ3OGFmYTJlZmI2MDA3NzNlNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IEphbiA1IDA5OjE2OjQ1IDIwMTIgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IERlY2xhcmUgInR5cGUiIGFyZ3VtZW50IG9mIHNlX3N0b3JlX2xpc3QoKSAvIHNlX3N0b3JlX3NsaXN0KCkgLyBzZV9zdG9yZV9lbnVtX2xpc3QoKSBjb25zdAorCitjb21taXQgMDIyZjg0MGZiZmNiMGUyNmIwOGYwZTU1NzI4MjMxZjYxMTQ5NTgwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE5OjU1OjU2IDIwMTIgKzAwMDAKKworICAgIEF2b2lkIHRoYXQgVmFsZ3JpbmQgY29tcGxhaW5zIGFib3V0IHNlbmRpbmcgVURQIGRhdGEKKworY29tbWl0IDY3MmE4MDljMjI4ZTk1NTBiOTliODkxMGJlNzVkMGIxNjE5ODU0MDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNzozMzowOSAyMDEyICswMDAwCisKKyAgICBGaXggYSA2NC1iaXQgY29tcGlsZXIgd2FybmluZworCitjb21taXQgMjRmZjI2MGFkODljZTJhYTM2MWE1NWM3YzcyZTkxNjAzMWRlZmUzNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDE3OjExOjI0IDIwMTIgKzAxMDAKKworICAgIENoYW5nZSB0aGUgdHlwZSBvZiB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIHNubXBfc2V0X3Zhcl92YWx1ZSgpIGFuZCBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoKSBmcm9tIHVfY2hhciogdG8gdm9pZCosIGxpa2Ugb24gbW9yZSByZWNlbnQgYnJhbmNoZXMKKworY29tbWl0IGM2Y2E3MzdmYjQ2ZjkwYTRiZGE1ZDQzNzM0YWFjMzRlODM3YTA1ZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFNhdCBNYXIgMTMgMTk6MDc6MzcgMjAxMCArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGY1MDRjZTJkNzRhNGJjODhmNjhjYzk1MTVmYTcwNTMzNzNjYjE1YjUuCisgICAgKEZpeGVkIG1vc3QgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBpbiB0aGUgcGVybCBzdWJkaXJlY3RvcnkuIE5vdGU6IHRoZXNlIGNoYW5nZXMgbWF5IGNvbnRhaW4gc29tZSByZWFsIGJ1ZyBmaXhlcy4pCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlwZXJsL0FTTi9BU04ueHMKKyAgICAJcGVybC9PSUQvT0lELnhzCisgICAgCXBlcmwvU05NUC9TTk1QLnhzCisgICAgCXBlcmwvYWdlbnQvYWdlbnQueHMKKworY29tbWl0IGQyMTJkYzk4NGVjMzRlNGQyMzA2MjVlNDZlNThiMGM2MjhhNTBkZjUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNjo0Njo0OSAyMDEyICswMTAwCisKKyAgICBTTk1QLnhzIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMKKworY29tbWl0IGJhY2VlYmIxMGQ4Y2FmNWRiNjNjYzM2OTM1ZmVkNjVlZTkzMTAyOWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxNjoyMjo0NCAyMDEyICswMTAwCisKKyAgICBBZGQgZGVjbGFyYXRpb24gZm9yIHNodXRkb3duX3NubXBOb3RpZnlUYWJsZSgpCisKK2NvbW1pdCBmN2Y5NjZhYmQ2ZDI4NDliMTMzMTI1MmFmZTVjNDczZTVjNDBiMzJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTQ6MjQ6MzMgMjAxMiArMDEwMAorCisgICAgRml4IGZvcm1hdCBzcGVjaWZpY2F0aW9uIG1pc21hdGNoZXMuCisKK2NvbW1pdCAzMDNjMDE1YmNmZTlhZjBiMTU0ZTk4ODFjN2I0ZjQ0OWUwOGYzMGJiCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTWF5IDYgMjI6MDY6MjMgMjAwOSArMDAwMAorCisgICAgQmFja3BvcnQgY29tbWl0IGQzZWIyYjVjZWQyMmE4NDgwMDUzY2U0M2FjZjk3Mzk3MjkwNTU0MDQKKyAgICAoU3ByaW5rbGUgc29tZSBjb25zdC1uZXNzIHdoZXJlIHJlbGV2YW50IC8gZml4IGZvcm1hdCBzdHJpbmcgbWlzbWF0Y2hlcywKKyAgICBOaWVscyBCYWdnZXNlbiwgTWF5IDIwMDkpCisgICAgCisgICAgQ29uZmxpY3RzOgorICAgIAorICAgIAlhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMKKyAgICAJYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jCisgICAgCWFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jCisgICAgCWluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorICAgIAlpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorCitjb21taXQgZDk1YjQwNDA2OTE2YmRhNWI0OGI1YTYxMzFiZWMyN2I4NjZiMGE3OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE1heSA2IDIxOjU5OjIwIDIwMDkgKzAwMDAKKworICAgIEJhY2twb3J0IGEyYTczMTZjMzEwZjBmY2MzNzI4NjczZmEwNDcwNTFjMjNiNzE5NjAKKyAgICAoVHJpdmlhbCB3YXJuaW5nIGZpeGVzLCBOaWVscyBCYWdnZXNlbiwgTWF5IDIwMDkpLgorICAgIAorICAgIENvbmZsaWN0czoKKyAgICAKKyAgICAJYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYworICAgIAlhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCisgICAgCWFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYworICAgIAlhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYworICAgIAlhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jCisgICAgCWFnZW50L3NubXBkLmMKKyAgICAJc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMKKworY29tbWl0IGQ4NmM0N2YwMDNmZGMxOTJiY2U3YjQ2YWM0ZjA2YjA5ZTM4N2MxMmIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTM6Mjk6MDggMjAxMiArMDEwMAorCisgICAgRml4ZWQgYSB0eXBvCisKK2NvbW1pdCBiZWU0ZDc5Y2Y0ZWI3ZTBhNDUzOTdmNTliNTI5OGRhNjMzYThlMWJhCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEzOjE0OjU3IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHJlYWRpbmcgcGFzdCBlbmQgb2YgYnVmZmVyLgorCitjb21taXQgM2RjMGUwMGEyZmQ4ZTM0ZmUxYWUzM2VjYWJmMzZlMTQ2NDYwYTMxZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBKYW4gNCAxMjo0MDowNyAyMDEyICswMTAwCisKKyAgICBGaXhlZCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBsYXJnZSAndG9rZW4nIGlzIHVzZWQuCisKK2NvbW1pdCBiM2M0OTgyNTQyZTBhYjE1MWZiMzg4NDc1NGNkZmJjYjQ3MmRhNTJkCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEyOjI4OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIG9mZi1ieS1vbmUgbWVtc2V0LgorCitjb21taXQgMGY1MzY5NTA0NGRkM2YwYzM1MDc3NTNlM2Y4YzI5ZDk3ZTk2ODcyZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEF1ZyAzIDIxOjM4OjI2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkLCBwZXJsOiBFbGltaW5hdGUgZGVhZCB2YXJpYWJsZXMKKyAgICAKKyAgICBDb25mbGljdHM6CisgICAgCisgICAgCWFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYworICAgIAlhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworICAgIAlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMKKyAgICAJYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jCisgICAgCWFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYworICAgIAlhcHBzL3NubXB0bHMuYworICAgIAlhcHBzL3NubXB0cmFwZF9sb2cuYworICAgIAlzbm1wbGliL2Rpcl91dGlscy5jCisgICAgCXNubXBsaWIvc25tcF9jbGllbnQuYworICAgIAlzbm1wbGliL3NubXBfb3BlbnNzbC5jCisgICAgCXNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMKKworY29tbWl0IDAxNTM4MDVjOTliOTE5NzM2NTkzNWM1ZDExYWU5YzNkNGJmYWEwZjMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAwOTo0ODo0MSAyMDEyICswMTAwCisKKyAgICBGaXggYSBzZXQtYnV0LW5vdC11c2VkIHdhcm5pbmcKKworY29tbWl0IDNmODg4NWZiZWU5NDA3NzQ4ZmMyZjA1NzM3MjhhMTFiYTJiYzAyM2EKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgQXByIDI4IDA1OjUxOjEzIDIwMDkgKzAwMDAKKworICAgIFJldHVybiBhIHZhbHVlIGZyb20gc3ByaW50X3JlYWxsb2NfdmFsdWUgZXZlbiBpZiBubyBzdWJ0cmVlIGlzIGxvY2F0ZWQuCisgICAgCisgICAgZ2l0LXN2bi1pZDogZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTc1NzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKK2NvbW1pdCBiMWVhYWYzMDIzNjlmZDQ1NTJlOGZlZTdiNmE4MDUwOTFlYzBhOWI0CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDExOjM4OjUxIDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIGZpbmRfc2VjX21vZCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IGFlZTRlODk1ZmUzYmQ1ZjRhNjFlMzQyNzViZmNhMDM2OGI1NjA1NTUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6MzE6MjIgMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2Ygc25tcF9zZXNzX3RyYW5zcG9ydCgpIHJldHVybiB2YWx1ZS4KKworY29tbWl0IDVkMWQwYTc0NGFiMzBjOGU2NDVjM2I4NTA2Y2JiZDJjY2ViM2QyNzUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTE6MDQ6NDggMjAxMiArMDEwMAorCisgICAgQWRkZWQgY2hlY2sgb2YgbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQoKSByZXR1cm4gdmFsdWUuCisKK2NvbW1pdCAyOTllYTlhODljM2YxNzU4YTc3NDhiYjliMzQxMWY2MmYyYzcwZjg4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIEphbiA0IDEwOjU0OjU1IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIG9mIGZvcGVuKCkgcmV0dXJuIHZhbHVlLCBqdXN0IGluIGNhc2Ugb2Ygc29tZSByYWNlLgorCitjb21taXQgOTBmMWFlNjc1NzkxNzQ4MTYzNmVlZjc3MTAwY2FlZWI1M2VkZmUwMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjA2OjU2IDIwMTIgKzAxMDAKKworICAgIEFkZCBzdHJsY2F0LmMuIFNvdXJjZTogaHR0cDovL3d3dy5mcmVlYnNkLm9yZy9jZ2kvY3Zzd2ViLmNnaS9zcmMvbGliL2xpYmMvc3RyaW5nL3N0cmxjYXQuYy4KKworY29tbWl0IDA4OWJjYjM2MGFhMjY3OTBhZDJhOGNlZGRmNTgzYjdiYTVkZGZkNDgKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgSmFuIDQgMTA6NTA6NTYgMjAxMiArMDEwMAorCisgICAgQWRkZWQgc3RycmNociByZXR1cm4gdmFsdWUgY2hlY2ssIGp1c3QgdG8gYmUgc3VyZS4KKworY29tbWl0IDE5OWEwNTExZjZlYjBlZjNmZjFkOWY5MjJiNzkwYWI2N2RmZGUwMWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBKYW4gNCAxMDozMToyNiAyMDEyICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogc211eDogc2ltcGxpZnkgc211eF9saXN0X2RldGFjaCgpCisKK2NvbW1pdCBkODgzNTczYWE3M2UwZjVmYzE4OGFjZWRlZTY0NTFmOTVkYWU5MDBjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgSmFuIDQgMTA6MjM6MDYgMjAxMiArMDEwMAorCisgICAgRml4IGEgY29tcGlsZXIgd2FybmluZyBpbnRyb2R1Y2VkIGJ5IGNvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxLgorCitjb21taXQgN2I3YTNlYjI1MDA1MjdlYWExNjk5Mjg3YTZjYTZmY2M0Y2MyZTA4YQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIEphbiA0IDA5OjQwOjAyIDIwMTIgKzAxMDAKKworICAgIEZpeCBhIGJ1aWxkIGVycm9yIGNhdXNlZCBieSBjb21taXQgYTgwOWZlNTA3NWM5ZjM3NDcxNWY3ZDFhNjgyOTQ5YTA3MzAxNzJjMS4KKworY29tbWl0IDJiNmMxMTlmZWQ0ODQ4ZGE2NjYzYzExZjBjMmNiZGMyOTkyMWI1YzYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6NTE6MTAgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG5ldHNubXBfZHNfZ2V0X2ludCgpIGVycm9ycy4KKworY29tbWl0IDZjZTUzNjBjYWE0YzlkZTUxYWRlNTc4NzllODNmOTZiZDA0YjRjNWEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6NDI6MjMgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgZm9yIG1pc3Npbmcgdmlldy4KKworY29tbWl0IGIzYmM1NGJlZDMxNjkwYTg1ZGYyYWNmYmYzMjk2ZGE5M2E5ZTg5YjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6MjM6MTcgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgc29ja2V0KCkgcmVzdWx0LgorICAgIEFsc28gY2xvc2UgdGhlIHNvY2tldCBvbiBlcnJvci4KKworY29tbWl0IDkyMDc1ZjUxY2Q0NWEzOGNhMzg3NjBiM2ZmZTgyZTE2NTU5ZTljMmUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTU6MTg6MjYgMjAxMiArMDEwMAorCisgICAgQ2hlY2sgb3BlbigpIHJlc3VsdC4KKworY29tbWl0IDY2NjVkNWZlMmZjNTY5ZDZmYTg1NGQxZDc4ZTM0N2JiYWM2OWUwNzAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MjI6MjIgMjAxMiArMDEwMAorCisgICAgRml4ZWQgbWlzc2luZyBicmVhay4KKworY29tbWl0IGE2NjQ4YzU0NTNlMWVmOGRhYzU3YTM4ZWZjYzAwY2NlNTNiZjllNGYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MjA6MjcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgbWlzc2luZyBicmVhay4KKworY29tbWl0IGQ2OGRjYWUwZjE4ZDU1NDU3MWFlZjMyMTk0NGE1MjkwNTQ4ZGRlODYKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MTY6MTEgMjAxMiArMDEwMAorCisgICAgQWRkZWQgJ2ZhbGx0aHJvdWdoJyBjb21tZW50IGZvciBDb3Zlcml0eS4KKworY29tbWl0IGZiNmY4MGMwZmUzYmEzNmU1NmY1YjkxMWE0N2UzZjZmMzJiYTI2NmUKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUdWUgSmFuIDMgMTQ6MTQ6MDcgMjAxMiArMDEwMAorCisgICAgRml4ZWQgZXhpdCBjb2RlIG9mIGVuY29kZV9rZXljaGFuZ2Ugd2l0aCB3cm9uZyBhcmd1bWVudHMuCisgICAgQWxzbyBhZGRlZCBhIGNvbW1lbnQgZm9yIENvdmVyaXR5LgorCitjb21taXQgMzEzMGUyNGZkYzIzMjQ2NGRkN2JiMjE2ZjQ2Y2FmYTJlMGU3NzVhNgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxNDowOTo1NCAyMDEyICswMTAwCisKKyAgICBBZGRlZCBtaXNzaW5nIGJyZWFrCisKK2NvbW1pdCAxOGMxMjZhOTU2NWNiNGQ2OWQ3NTEzYjk0NGEyMTA1NTg4MDQ1ZDM1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjA3OjI5IDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCA2ZDMxYzgyMDcwYTJjNjhmZTNjNTE5ZTlkNTZmYTI3Nzk1NTRkMDFmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDE0OjAxOjUzIDIwMTIgKzAxMDAKKworICAgIEFkZGVkICdmYWxsdGhyb3VnaCcgY29tbWVudCBmb3IgQ292ZXJpdHkuCisKK2NvbW1pdCBkYzZmMGUyZTU0OWI0Y2QwNjFlYmMxOTAwODRiMWZjNzdhNTVmNDBmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjMyOjU5IDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBkYWIzMjg2N2VkMGI5OTMwMWVmZDdiOGQ4NTJhZDEyODhhMTg0YmUwCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjMwOjMzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIFFVSVRGVU4gdXNhZ2UuCisKK2NvbW1pdCBiMWEyYmNmNjQ2MTVlYjY2YmMyNGQ1YmU0OTUwZTQ1MDEyOTYyMDQ1CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjE4OjAzIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBiMmIxYzg1MWI5NGZlZDM3YzM4NmVhYTFiZmVhZDVjNzc2OTZlM2VmCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEzOjE0OjUyIDIwMTIgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG9wZXJhdG9yCisKK2NvbW1pdCBhODA5ZmU1MDc1YzlmMzc0NzE1ZjdkMWE2ODI5NDlhMDczMDE3MmMxCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIEphbiAzIDEwOjU4OjQ2IDIwMTIgKzAxMDAKKworICAgIEFkZGVkIGNoZWNrIGZvciBmYWlsZWQgcmVnaXN0ZXJfbWliLgorCitjb21taXQgNTk0OWYwNTVjMTZhZTY1MDYxNWFhZTdhMWZlZTNmMmQ3YjE2ZDk0MAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBKYW4gMyAxMDoyOTo1OSAyMDEyICswMTAwCisKKyAgICBNYWtlIE1JQiBmaWxlIHBhcnNpbmcgYW5kIGRldGVjdGlvbiBtb3JlIHN0cmljdCAtIExBQkVMIGlzIHJlcXVpcmVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgTUlCIGZpbGVzLgorCitjb21taXQgZTRiNjczNjgzYzY4YmE4YjNhYmMwNDBiOTEyNWVjMzA0NjQzY2M3YworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIEphbiAxIDIzOjAwOjI0IDIwMTIgKzAxMDAKKworICAgIEFzc3VtZSB0aGF0IGxpYmRsIG1pZ2h0IGJlIGluIEFHRU5UTElCUyBvciBTTk1QTElCUyBzbyBwcmVhZGQgdGhlbS4KKworY29tbWl0IGIxM2MxZTU3YmVkYmE3OWI4MDYxMDNjNzRmMTkyMWQ1M2E3MDZiMzgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBKYW4gMSAyMjo1NTowNiAyMDEyICswMTAwCisKKyAgICBEbyBub3QgcmVxdWlyZSB1Y2Qtc25tcC9kbG1vZCB1bmxlc3MgaXQgd2lsbCB3b3JrLgorCitjb21taXQgMjdkY2VhMGQ1ZjgwMWRmNDk0YWIyY2I1YzVjMGViZTU0ZWIwZGNkMworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxNDo0ODoyOSAyMDExICswMTAwCisKKyAgICBBZGp1c3QgcGF0aHMgZm9yIHRlc3QgcmVzdHJ1Y3R1cmUKKworY29tbWl0IDE0YjYwZTg1YTFiNTcwMGU5M2QxMjZlMmYyOTFkNWM0ODVmMzRlMzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMzEgMTQ6MTQ6MjkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGRsbW9kIG1vZHVsZSBmYWlsIHJhdGhlciB0aGFuIGdlbmVyYXRlIGEgZHVtbXkgbW9kdWxlIGlmIHRoZSBkbG9wZW4gZnVuY3Rpb24gaXNuJ3QgYXZhaWxhYmxlLgorCitjb21taXQgOThhOTc1MzhmYzFlOWZmNDZiNjBkNWQ5NjkzNDc0NDQ1NzgzNzhjMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxMzozNToxMyAyMDExICswMTAwCisKKyAgICBBZGp1c3QgdGhlIHBhdGhzIHRvIHN1cHBvcnQgdGVzdGluZyBldmVuIGlmIGJ1aWxkZGlyICE9IHNyY2RpcgorCitjb21taXQgODhmMGFmM2NmYjkxNmFlNTg2M2NjMjk4NjA3MWQ0MzVmMjBjMzA2NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IERlYyAzMSAxMTozNzo1MiAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZXMgJ3AnIGFuZCAnbGVuJy4KKworY29tbWl0IDA4MTVhNzUzNmM3NmY3ZTQ4NDI2Mzg2ODNmNjc0ODk0YTFhOGNlMTQKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDI5IDE0OjQyOjU0IDIwMTEgKzAwMDAKKworICAgIFJlcG9ydCBwcm9ibGVtcyB3aXRoIFNldFVuZG8gcHJvY2Vzc2luZworICAgIE1pc3NlZCB3aGVuIGFwcGx5aW5nIHBhdGNoICMzNDQ1NDQwCisKK2NvbW1pdCBlYjJhYjIzNzQyY2E4NmMwYjg5Y2NmZTkxZWI2ZWEzNzRiZjNhY2MxCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVGh1IERlYyAyOSAxNDozNzozMSAyMDExICswMDAwCisKKyAgICBDaGVjayBmb3IgdGhlIGV4cGVjdGVkIGVycm9yIChFUElQRSkgb24gY2xvc3VyZS4KKyAgICBNaXNzZWQgd2hlbiBhcHBseWluZyBwYXRjaCAjMzQ0NzQ0NAorCitjb21taXQgYWFjMTBiYzRmMDUzYzAxNGYzODJkNjU5M2ZjMzJhYjk1ZTBiMWE1NworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFRodSBEZWMgMjkgMTI6NTk6NTIgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQ2Mzc2NzogSGFuZGxlIHBhcnNpbmcgc3ViaWRlbnRpZmllcnMgPiAyXjMxCisKK2NvbW1pdCBiYmMwMmUzNmU5MGMxYWFiNzg5ODU2MmY5NjNmNWNhZGIyNmUxMGJkCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgV2VkIERlYyAyOCAxNzoxNToxNiAyMDExICswMDAwCisKKyAgICBNb3ZlIHBhc3MvcGFzc19wZXJzaXN0IHRlc3RzIHRvIHRoZSBuZXcgbG9jYXRpb24KKworY29tbWl0IDM4OThjMDRmZDZmODk4NjcwNjJmZGZlYmYzNjg1N2FiNjE5YzA0NTAKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBXZWQgRGVjIDI4IDE2OjUzOjI0IDIwMTEgKzAwMDAKKworICAgIEFkZCB0ZXN0cyBmb3IgcGFzcy9wYXNzX3BlcnNpc3QsIHN1cHBsaWVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBkNWVlM2YwYTFhNjNiYjE3NTJjNzRjYmNhNTVhYTNkNDBiZjliZjEzCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAyMTo1ODo1MSAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzQ0NzQ0NDogRml4IFNJR19QSVBFIGhhbmRsaW5nCisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDJhMTdiMzc0MzBjMTg1Mjk5OGMzNTg4ZTU0N2Q3ZWI2MWMwNmRhNzEKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDIxOjQ1OjM4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50eDogUEFUQ0hFUzogMzQ0NTQ0MDogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgQWdlbnRYIGVycm9ycworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCBmZTU4YTBlNWY0ZDRlMmUyZWNiY2I0NzM4MmIwOGNiMWU0ZGYzNTJjCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxODoxNjoyMyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzNDU2NzcwOiBIYW5kbGUgKG9ic29sZXRlKSBVSW50ZWdlciB0eXBlIHByb3Blcmx5CisgICAgUGF0Y2ggcHJvdmlkZWQgYnkgQmlsbCBGZW5uZXIKKworY29tbWl0IDFiZThjZjA4YTY3YTkxODU1ZmVlMWVjNGEyZDhlMDg3Yzc4MTI0NTYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDE4OjA0OjEwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50eDogUEFUQ0hFUzogMzQ0NTQzNzogTG9nIEFnZW50WCBkaXNjb25uZWN0aW9ucworICAgIChpbiBsaW5lIHdpdGggY29ubmVjdGlvbnMpIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKK2NvbW1pdCAwNjgwMzcyODkxMDdmYWEyYmEzZjVjZDJmYjAwYzE5NDk0YmI5YTA0CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNzoyNzo0NiAyMDExICswMDAwCisKKyAgICBIYW5kbGUgYW55IEdFVE5FWFQgcmVxdWVzdCBPSUQsIG5vdCBqdXN0IGEgc2ltcGxlIHdhbGsuCisKK2NvbW1pdCBhNzRmYTUyODk4MzEyM2QzNTVhOGNkY2FhNzdkZDRlYjRiOGM2OTU5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxNzowMDoxOCAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBwYXNzOiBQQVRDSEVTOiAzNDkzOTQ6IEJyaW5nIHBhc3NfcGVyc2lzdHRlc3Qgc2NyaXB0IGludG8gbGluZSB3aXRoIHBhc3N0ZXN0KgorICAgIChpLmUuIHVzaW5nIHRoZSBsZWdpdGltYXRlIHN0cnVjdHVyZSBvZiBORVQtU05NUC1QQVNTLU1JQikKKyAgICBQYXRjaCBwcm92aWRlZCBieSBCaWxsIEZlbm5lcgorCitjb21taXQgYmJlNjQ5ZWJmYTYxZWEyMjM5OTE3MGIzNmI5OWRiMzBhMWRlODAxMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTY6NTQ6MzggMjAxMSArMDAwMAorCisgICAgUmV3b3JrICJwYXNzdGVzdCIgZXhhbXBsZSB0byBmdWxseSB2YWxpZGF0ZSBHRVRORVhUIHJlcXVlc3RzCisgICAgYW5kIHVzZSBhIGxlZ2l0aW1hdGUgc3RydWN0dXJlIGZvciBvdXRwdXQuICBCYWNrcG9ydCBvZiBTVk4KKyAgICByZXZpc2lvbiAxNzYzMiAod2hpY2ggdXBkYXRlZCAncGFzc3Rlc3QucGwnIGJ1dCBtaXNzZWQgJ3Bhc3N0ZXN0JykKKyAgICBDb3JyZWN0IGluIGJyYW5jaGVzIDUuNSBhbmQgYWJvdmUKKworY29tbWl0IDgyZDA2YzcyNDdiMjJjOGIwMWQ0NWJmNTUwNDFkMmYxZTY0MjdkNDkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEzOjQ1OjE4IDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzNDQ3NjcxOiBGaXggb3ZlcnJpZGUgaGFuZGxpbmcgb2YgT0lEIHZhbHVlcworICAgIFBhdGNoIHN1cHBsaWVkIGJ5IFBoaWxsaXAgTydEb25uZWxsCisKK2NvbW1pdCBiYTRhOWNlNTFjOTYwMGY5ZmRhMTY4ZjFlNmVmZjMyYTFkYjYzY2I5CitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIERlYyAyNyAxMzoyNDoyNiAyMDExICswMDAwCisKKyAgICBUd2VhayAtLWRpc2FibGUtc25tcC1zZXQgY2hhbmdlcworCitjb21taXQgODI3YzhiMjg4MzAxNzFmYWE5YzYxZDUzZWZjYTllYjY2MDA1NjFjMgorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBEZWMgMjcgMTE6MjU6NDMgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSEVTOiAzNDMzODQ2OiBGaXggZm9yIHVzZSB3aXRoIHB5dGhvbiAyLjQKKworY29tbWl0IGY5OGE1NGE5OWNhZjdiNDZiMTAwYTkyMGRiOTQyY2JjYTljNDM5MjYKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUdWUgRGVjIDI3IDEwOjEwOjM2IDIwMTEgKzAwMDAKKworICAgIFNraXAgU0VULWJhc2VkIHRlc3RzIHdoZW4gY29uZmlndXJlZCB3aXRoIC0tZGlzYWJsZS1zZXQtc3VwcG9ydAorCitjb21taXQgMjMwZGYxNGY5NGMzNzM2ZmYzNDM3OWE0ZTI4MWVlYTM1M2I0N2Y4MAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgTW9uIERlYyAyNiAyMzozNDoyMyAyMDExICswMTAwCisKKyAgICBEbyBub3QgYXNzaWduIHRtU3RhdGVSZWYgdHdpY2UKKworY29tbWl0IGM5NmIzYjRkODUzMGFkNWUwZWZiMDNmMjRkYWI1ZTVmMWE0NjAwMzEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjUgMTE6MTg6MjEgMjAxMSArMDEwMAorCisgICAgQ29ycmVjdCB1c2UtYWZ0ZXItZnJlZS4KKworY29tbWl0IGM1OTc4Yzg5Y2RlMjQ0MGY0ZDIwZGFkYmM5ZDFkZDhkYjU2MmQ1NmUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMjUgMTE6MTU6NDQgMjAxMSArMDEwMAorCisgICAgQ29ycmVjdCBkb3VibGUtZnJlZS4KKyAgICAKKyAgICBuZXRzbm1wX3Rsc3RtQWRkcl9hZGQgdGFrZXMgb3duZXJzaGlwIG9mIGl0J3MgYXJndW1lbnQgc28gY2FsbGluZyBmcmVlIG9uIHRoZQorICAgIGFyZ3VtZW50IG9uIGZhaWx1cmUgaXMgaW5jb3JyZWN0LgorCitjb21taXQgYzEzOWNhMTIzYjQ0YmIzYjliNmJmOTIxZTE2MDljYzQ1ZjYzYTY2MAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6NTU6MzAgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVMgMzQxMDA1OTogRml4IHNwYXJzZWx5IGF1Z21lbnRpbmcgdHJpZ2dlciB0YWJsZXMKKyAgICBQYXRjaCBwcm92aWRlZCBieSBTdGVwaGVuIFR1cm5lcgorCitjb21taXQgYzRhZTAyMWIyZTYzODQ0MzcwODFjNTYyM2YzNjBjODg5NjM5MDE4OAorQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFNhdCBEZWMgMjQgMTY6Mjk6NTQgMjAxMSArMDAwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVMgMzQxMDA1MDogU2tpcCBhbHJlYWR5LSdwcm9jZXNzZWQnIHZhcmJpbmRzCisgICAgQmFzZWQgb24gbWliMmMgcGF0Y2ggcHJvdmlkZWQgYnkgU3RlcGhlbiBUdXJuZXIKKworY29tbWl0IGM2YWNjZjhjNjYyNTRmYThjNDg3NjdlZDdkZWM3OTVkZGFmYzUyMmUKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBTYXQgRGVjIDI0IDE2OjI3OjExIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTIDM0MTAwNTA6IFNraXAgYWxyZWFkeS0ncHJvY2Vzc2VkJyB2YXJiaW5kcworICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gVHVybmVyCisKK2NvbW1pdCBhNjE4MjZhZDhjYTU0NjYxZDFkOTA5NzEyNTAzYmQzYThiMzJlZWQwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgRGVjIDIyIDE4OjM1OjQ2IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUuCisgICAgCisgICAgbXlNYXRjaCBpcyB1bnVzZWQgYXMgbm1hdGNoIGlzIHplcm8gYW5kIGFsc28gc2luY2UgcmVnZXhCdWZmZXIgaXMgY3JlYXRlZAorICAgIHdpdGggUkVHX05PU1VCIHNldC4KKworY29tbWl0IGJhNGZjODBmZTJjZmQ1YTVkODkyMzBkOGYzNzAzZTRmZTAxZTYwMTkKK0F1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorRGF0ZTogICBUaHUgRGVjIDIyIDE5OjI0OjQwIDIwMTEgKzAwMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBQQVRDSCAzNDAyMzc2OiBmcm9tIExlb25hcmRvIENoaXF1aXR0bzogUmVjb2duaXNlIFJlaXNlckZTCisgICAgQWxzbyBtb3ZlIHZhcmlvdXMgRlNUeXBlIGRlZmluaXRpb25zIHRvIHRoZSBhcHByb3ByaWF0ZSBibG9ja3MKKworY29tbWl0IGI1YWM0YTA0ZGNkNTQ3MGQwOGQwMzMyMWFiY2QxZTk4MjYyMWU2ZTAKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjM5OjQ2IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IDJiMzdlNGU4ZjI1MGEwZDg4MjExOTlhNzRhYzNmNGU1YjdiN2JhYmEKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjMxOjUxIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IDNkMDgzNDUxNTZjNDE5MzMzZGU5NjlmMTNkMjFmY2VjN2UxOGU5NGQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjMyOjI5IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVudGVybWluYXRlZCBzdHJpbmdzIGFmdGVyIHN0cm5jcHkKKworY29tbWl0IGNkODU5YWQ1MWM0ZjE4ZDViMGZjNjlkZDY2OWZjYjA1MWM3OTg5NjkKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBUaHUgRGVjIDIyIDE0OjM5OjMzIDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHdyb25nIG1lbW1vdmUgc2l6ZQorCitjb21taXQgMzBmZjU4ZDA5ZDRjOWQ1NDM4YmI2MjEwNTRmZDdhZDdhMmE1OTdlNAorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBEZWMgMjIgMTQ6MDc6MTkgMjAxMSArMDEwMAorCisgICAgRml4ZWQgd3JvbmcgbGVuZ3RoIG9mIGJ1ZmZlciB3aGVuIHByaW50aW5nIEFTTl9CSVRfU1RSCisKK2NvbW1pdCA2YzE0ODdlMWQzNjBkM2QyNjBhMzljYjFmNWIxNWRhOTc4Mzk1MDUzCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNTo0NzozNCAyMDExICswMTAwCisKKyAgICBGaXhlZCBwb3RlbnRpYWwgZnJlZSBvZiB1bmluaXRpYWxpemVkIHBvaW50ZXIgaW4gZXJyb3IgY2FzZXMKKworY29tbWl0IGM3NmZiOTZmNjVlMzNiYTJmZDIxMmE5MjFlOGMzODYxNTVlZTVjN2EKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE1OjQ0OjQ2IDIwMTEgKzAxMDAKKworICAgIEZpeGVkIHVuaXRpYWxpemVkIHZhbHVlcyBpbiB1ZHBUYWJsZQorCitjb21taXQgYzQ0NjA4Njc5Yjg5NzUxMTc2ZjI4YTJlNTRkNTI4MmI0NmUyYTA1YworQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBEZWMgMjEgMTQ6NTY6MTMgMjAxMSArMDEwMAorCisgICAgVXNlIGNhbGxvYyBpbnN0ZWFkIG9mIG1hbGxvYyBhbmQgbWFudWFsIGNsZWFyaW5nCisKK2NvbW1pdCBhMDVjNWY5NTEzNDYxODI0ZTc5MDNhZTlhZTlhNmMzMzg2ZTMzODc5CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxNDo0MDo1MCAyMDExICswMTAwCisKKyAgICBGaXhlZCBwcmludGluZyBvZiB1bml0aWFsaXplZCB2YXJpYWJsZSB3aGVuIHNlbnNvcnNfZ2V0X2xhYmVsKCkgZmFpbHMKKworY29tbWl0IGU0YTVlZGM3MjM5M2JkM2RlOWJmMTJiY2ViYTlkODNiYmY3ZGU3MGIKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDIxIDE0OjMxOjI1IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlCisKK2NvbW1pdCBmYWUyZTViODM1YjhkZjFlYWU0N2U0Y2ViYjRlYjQwNGQ3MjgyMzc3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzozMToyMSAyMDExICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIHVuaXRpYWxpemVkIGlpZCBpbiBlcnJvciBjYXNlcyBhbmQgd2l0aCBkZWJ1ZyBpbmZvIGVuYWJsZWQuCisKK2NvbW1pdCA5ZDU4ZjgxYTkyMzljZmJjZmM4ZWJjZTM2N2QyMWU5YjNkY2IwMjhiCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzozMzozMyAyMDExICswMTAwCisKKyAgICBGaXhlZCBkZXJlZmVyZW5jaW5nIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluIGVycm9yIGNhc2VzCisKK2NvbW1pdCAwYmM4YzA4ZWRlYWU3YWUwOTVmMTE2MjU4YzIwYWU1NzY3ZDYwNjUyCitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIERlYyAyMSAxMzoyMDo1MiAyMDExICswMTAwCisKKyAgICBGaXhlZCByZXR1cm5pbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZSAnc3RhdHVzJyB3aGVuIHNzID09IE5VTEwKKworY29tbWl0IDczMDRjNTNjZjhhZGVlOGVjY2VmMWE4ZjI2NzU2ZmMwN2YwOTg3MjEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTggMjM6MzE6NTMgMjAxMSArMDEwMAorCisgICAgT24gc29sYXJpcyAxMCB0ZXN0IGluIC9iaW4vc2ggZG9lc24ndCBzdXBwb3J0IHRoZSAtZSB0ZXN0LiBSZXBsYWNlIGl0IHdpdGggLWYKKworY29tbWl0IDhjZDNiZTYwZDY5M2M5YzM2ZmZiOTdkM2Q5YmNiNDljMWI0YWJlMzUKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBEZWMgMTcgMDg6NTI6MjQgMjAxMSArMDEwMAorCisgICAgQXZvaWQgcmVwZXRpdGlvbiBvZiB0aGUgY29tcGxleCBleHByZXNzaW9uIGRldGVybWluaW5nIGlmIGl0IGlzIHBvc3NpYmxlIHRvIGdldCB0aGUgZGVzdGluYXRpb24gYWRkcmVzcy4KKyAgICAKKyAgICBUaGlzIGFsc28gbWFrZXMgaXQgcG9zc2libGUgdG8gYnVpbGQgb24gcGxhdGZvcm1zIGxpa2UgU29sYXJpcyAxMCB0aGF0IGRlZmluZQorICAgIElQX1JFQ1ZEU1RBRERSIGJ1dCBsYWNrIGVpdGhlciBvZiBtc2doZHIubXNnX2NvbnRyb2wgYW5kIG1zZ2hkci5tc2dfZmxhZ3MuCisKK2NvbW1pdCA5NTNmMmUzZDQyNWVkZTNiODYzYTJlN2NjYjBiNGJjODYyOTI4YjU3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDUgMjI6MTM6MDcgMjAxMSArMDEwMAorCisgICAgTW92ZSB0aGUgdXNlIG9mIF9zZW5kdG8gYW5kIF9yZWN2ZnJvbSBiZWxvdyB0aGVpciBkZWZpbml0aW9ucy4KKworY29tbWl0IDY4YTExNzNjNDZjZjc3NjAxNDI2Y2YzOTFkOWE4NTI3OTRmMjA1N2UKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBOb3YgMjAgMjA6MDU6MTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2VwYXJhdGUgb3V0IHRoZSBjbWVzZyBidWZmZXIgc2l6ZQorCitjb21taXQgNDYxZGQxNmYzYjI2NDczMjJjZGNlNjM2MzA4MWNjNDRiYTVhNDliNQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAyNiAyMTo1MTowMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNZXJnZSB0b2dldGhlciB0aGUgTGludXggYW5kICpCU0QgdmVyc2lvbiBvZiBzcmMgcG9ydCBzZW5kaW5nLgorCitjb21taXQgN2FjY2I2OWJhYTFmYzBiNmEzNDM5ZDJlNTQ5Yzg2ZGEzNDUzYmFkMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOTozMDozMSAyMDExICswMTAwCisKKyAgICBVc2UgYSBiYXJlIHN0cnVjdCBpb3ZlYyBpbiBpbnN0ZWFkIG9mIGEgb25lIGVsZW1lbnQgYXJyYXkuCisgICAgCisgICAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBjaGFuZ2UgaXMgdG8gbWFrZSBfcmVjdmZyb20gbW9yZSBzaW1pbGFyIHRvIF9zZW5kdG8uCisKK2NvbW1pdCAzOTg1MmNkNGM4NWVmMmJmYzc1Y2RlYTI4MjUyNjFlZTkzZTc2OGMyCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI5OjIwIDIwMTEgKzAxMDAKKworICAgIEFkZCBjb21tZW50IGRlc2NyaWJpbmcgdGhlIHB1cnBvc2Ugb2YgdGhlIGNhbGwgdG8gZ2V0c29ja25hbWUgYWZ0ZXIgYWxtb3N0IHJlbW92aW5nIGl0LgorCitjb21taXQgMWIyOTJjYTI3ZWFiNWNhYTczZmVhYWE4M2RjOWMxMmFiYzBmMmU3MAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToyNzo1OSAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdmFyaWFibGUgc2NvcGUuCisKK2NvbW1pdCBiYzg3OTU3MWVjYTk1MjBiYzEzMmY4NDBjM2U2NTlkMzc5MzE0NGQ3CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjI1OjM2IDIwMTEgKzAxMDAKKworICAgIEludHJvZHVjZSB0ZW1wb3JhcnkgdmFyaWFibGVzIHRvIGVhc2UgdGhlIGV4dHJhY3Rpb24gb2YgdGhlIHNlcnZlciBhZGRyZXNzLgorCitjb21taXQgYjdlZWE2Y2ZmYmQ4NzI5MzJjZTJjMDRmZWZiNmY0M2RlMzM5ZjM3NAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxODozMyAyMDExICswMTAwCisKKyAgICBSZW5hbWUgdGhlIGNtZXNncHRyIHZhcmlhYmxlIHRvIGNtLgorICAgIAorICAgIFRoZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gaW5jcmVhc2UgdGhlIHJlYWRhYmlsaXR5IG9mIHRoZSBjb2RlLgorCitjb21taXQgMGE3NDYxZTcyODgwNWM2MmExY2FiOWQ4N2JmYzc0Yzc5MjdhOWZjYworQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIERlYyAxMSAxOToxNToyMiAyMDExICswMTAwCisKKyAgICBGYWN0b3Igb3V0IGEgY29tbW9uIGxvb3AgaW4gcmVjdm1zZyBvcHRpb24gcHJvY2Vzc2luZy4KKworY29tbWl0IGIzYzYyNDhkMDIwMWFiMTYxMDg0MGQ2ZDBlNzQ5YjNiNmM0YWQ3OTIKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBEZWMgMTEgMTk6MTM6NDMgMjAxMSArMDEwMAorCisgICAgVW5pZnkgdGhlIHN0cnVjdHVyZSBvZiBMaW51eCBhbmQgQlNEIHJlY3Ztc2cgb3B0aW9uIHBhcnNpbmcgc29tZXdoYXQuCisKK2NvbW1pdCAzNTY0MDBkNjI5MGE0MjNiNTJlYmVlYTVhNWU5NzZmYjE1YmI3M2I0CitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gRGVjIDExIDE5OjA0OjU2IDIwMTEgKzAxMDAKKworICAgIFVzZSBDTVNHX0RBVEEgb24gdGhlIHJlc3VsdCBvZiBDTVNHX0ZJUlNUL05FWFRIRFIsIG5vdCBvbiB0aGUgYnVmZmVyLgorCitjb21taXQgM2IzNTE3MDhjNjJkZTQ2YWExYjkwZWQyMzJjZmQ4YzdjNWIwMjIzMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDEyOjAwOjMyIDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSBhIGNhc3QKKworY29tbWl0IGRlOTI1MGQ5ZGFlOTcyN2E2Y2M3ZjY0NzY4OGRkZGYxYjg1OTcxMjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAxMTo1ODowNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBzcHJpbnRfbWliX29pZCgpIHRyZWF0IE9JRCBjb21wb25lbnRzIGFzIHVuc2lnbmVkIGluc3RlYWQgb2Ygc2lnbmVkIGludGVnZXJzCisKK2NvbW1pdCAwZTMzYjNiNmQ1ODU0YTRiYWMxNWQ0ZWE1ZTAxNmM1M2QxNjFkMGNkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDggMTA6MDI6MjggMjAxMSArMDEwMAorCisgICAgRml4IHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MKKworY29tbWl0IGI3ZTUwZDVmOWE2NzU1OTgyZDJhZjMxOTE0NzNjYjM0NjQzYmMwM2YKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgOCAwODozNzoyMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBSZWR1Y2Ugb3ZlcmhlYWQgb2YgY29uZmlnIGZpbGUgcGFyc2luZworCitjb21taXQgNzNjOWVlNDJkMjhhZmUyZTEwN2E3ZDY2MTZiNmQwMTE4OTBjMzZlYQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IERlYyA4IDA5OjA5OjU5IDIwMTEgKzAxMDAKKworICAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzCisKK2NvbW1pdCAzZGI5Nzk2MmIzN2ViMTJkMjU0ZDYxZTZiZTIzNGIwNmEzOTFjOGJiCitBdXRob3I6IEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorRGF0ZTogICBUaHUgRGVjIDggMDc6NDM6NDUgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDM0NTM4Njg6IGZyb20gIkJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPiI6IEZhY3RvciBjb21tb24gY29kZSBpbnRvIHBhc3NfY29tbW9uCisgICAgCisgICAgTW92ZSB0aGUgY29kZSBmb3IgcG9ybWF0dGluZyBhbmQgcHJpbnRpbmcgdmFsdWVzIGZyb20gcGFzcyBhbmQgcGFzc19wZXJzaXN0CisgICAgaW50byBwYXNzX2NvbW1vbi4KKworY29tbWl0IGI2NTY4YzgzZjE3NTZlOWE2NTQzNGVkZWVlYjQwZDIzZGRiYmI2NTIKK0F1dGhvcjogY2NjaGl1IDxjY2NoaXVAc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgRGVjIDcgMTY6MjU6MjcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQlVHOiAzNDUyMDY5OiBGaXggc25tcHRyYXBfb2lkIGRlY2xhcmF0aW9uIGluIG1pYjJjIGdlbmVyYXRlZCBjb2RlCisgICAgCisgICAgVGhpcyBidWcgd2FzIGludHJvZHVjZWQgY29uc2lkZXJhYmxlIHRpbWUgYWdvLiBJdCBkaWQgYWxyZWFkeSBleGlzdCBhdCB0aGUKKyAgICB0aW1lIHRoZSA1LjYgYnJhbmNoIHdhcyBjcmVhdGVkIChzZWUgYWxzbyBjb21taXQKKyAgICAwZWMwODhhZmEyN2NmZGE0ZTZlYTc4YWFlN2NmYzU1MDc1NjRlZGRlKS4KKworY29tbWl0IGQ0OTRkYjY0YzIwOGI0ZGM2MjgxMzEzMmY4ODYzYmQ1YzFhMzlkNzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDozODoxNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEVsaW1pbmF0ZSBhbiB1bnVzZWQgdmFyaWFibGUgKE5vdykKKworY29tbWl0IDI4ZjI1NjFiYzI5MzVkOGUxY2JmNDZkMjgyMDE1ODE3M2U3YTRjZjQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDozNzoxMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IE1vdmUgdGhlIG1haW4gbG9vcCBjb2RlIGludG8gYSBuZXcgZnVuY3Rpb24KKworY29tbWl0IDM5NmUxMjJkZGM0MmE5MTZmMDZhMDI4ODRjMGU4YTI1OGVkYmUyMzgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAwOTozMjoxNiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTWF0Y2ggZWFjaCBnZXRwd25hbSgpL2dldHB3dWlkKCkgY2FsbCB3aXRoIGFuIGVuZHB3ZW50KCkgY2FsbCBhbmQgZWFjaCBnZXRncmVudCgpIGNhbGwgd2l0aCBhbiBlbmRncmVudCgpIGNhbGwuCisKK2NvbW1pdCAzZWZlZmJjMDAyNDM5OTc4NmY4YjY4YjFlOTNiMGE4ZmRkZGRjN2RhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6NDE6MDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBSZW1vdmUgc3VwZXJmbHVvdXMgY2FzdHMKKworY29tbWl0IDdmMDVkYWE4ZTBlMGY1MzNiMGYxMmEzZTFjZjA3NjQxNTE5OTA5ZDYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMTo1ODozMiAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBCVUc6IDM0NDQ5Mzk6IEJVRzogMTc5Njg4Njogc25tcGxpYjogQXZvaWQgdGhhdCBzcHJpbnRfcmVhbGxvY19vY3RldF9zdHJpbmcoKSBlbWJlZHMgdW5wcmludGFibGUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIGJpbmFyeSB6ZXJvZXMgaW4gaXRzIG91dHB1dC4gVGhpcyBiZWhhdmlvciBjb3VsZCBjYXVzZSB0cnVuY2F0ZWQgb3V0cHV0IGluIHNubXB0cmFwZC4KKworY29tbWl0IGRiOGY1NThmZDJmM2I3YzEwOWVhM2ExYzIxMzNiNzViNmY4Y2IyYWQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBEZWMgMSAxMDowNDo0MSAyMDExICswMTAwCisKKyAgICBDb21waWxlciB3YXJuaW5nIGZpeDogcGFzcyB1bnNpZ25lZCBjaGFycyB0byBpc3ByaW50KCkgaW5zdGVhZCBvZiBzaWduZWQgY2hhcnMuCisKK2NvbW1pdCA4MDBkYzEwMjhlN2UwY2Q4Y2MxNGQ4NGRkMzE3MjNkNDdhYzA3M2RiCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBUaHUgRGVjIDEgMTA6MTg6NTggMjAxMSArMDEwMAorCisgICAgUmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgaGludCB2YXJpYWJsZQorCitjb21taXQgODNlYTRhMDgwYzkwYTc0Yjk3NDNkM2YyNGNmMGQ0YjhhMWU4Yzg0OQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE5vdiAyNyAyMToxNjo1MiAyMDExICswMTAwCisKKyAgICBSZWR1Y2UgdGhlIHNjb3BlIG9mIHRoZSB2YXJpYWJsZSBxb3MKKworY29tbWl0IDdiOWUwMzQ0MWMzZGMzYTA3NjcwZWQwMWY1ZDA0NzkxYTgyYzc1MGMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDQ6MDEgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlICNkZWZpbmUgdmFsKHgpIF9fU1RSSU5HKHgpIGFuZCBjaGFuZ2UgdmFsKHgpIGludG8gX19TVFJJTkcoeCkuCisKK2NvbW1pdCAyZjM3OWIwZTRlY2FkZmE0ZTU0MWUzMDA1YzhmYzgyODE4ODJiNzQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE1OjU4OjQ3IDIwMTEgKzAxMDAKKworICAgIEZvbGxvdy11cCBmb3IgY29tbWl0IDFhYTcwNGU6IHVuYnJlYWsgdGhlIE1TVkMgYnVpbGQKKworY29tbWl0IDY0ZWYwZjcxMTI3NjE3ODM3MDI3ZmIyY2ZhZjE3NGI5NWJhNzllMGQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MTk6NTAgMjAxMSArMDEwMAorCisgICAgQWRkIFNOTVA6OnJlZ2lzdGVyX2RlYnVnX3Rva2VucygpCisKK2NvbW1pdCA3YmVhZDljYTkxN2M2NzU2NmQ1ZWQ5OGFiNTA3YmJjMDI4MTYyMTdkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgTm92IDMwIDE0OjA4OjA4IDIwMTEgKzAxMDAKKworICAgIEFnZW50WCBzdWJhZ2VudDogUmVkdWNlIGNvZGUgZHVwbGljYXRpb24KKworY29tbWl0IDBlZDcxNTQxZjg3ZTdkNzhiYzk5OGVlYmRhMzIxN2M1OWUxZGY4MzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDM6MTkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIERveHlnZW4tc3R5bGUgZnVuY3Rpb24gaGVhZGVyIGZvciBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCkgYW5kIG5ldHNubXBfY2xlYXJfZGVmYXVsdF90YXJnZXQoKS4KKworY29tbWl0IDhjMjk3MmI2MWU0MDE2OWI0N2M1MDk4OGI2YWU5ZThjMjg1Zjg0ZjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBOb3YgMzAgMTQ6MDI6NTQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogRml4IHNwZWxsaW5nIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBTTk1QIG1vZHVsZQorCitjb21taXQgNWRmMmJhYzZiZDcxNzc5OTMxMWYwMDFhYzdiNzNkYjg4ZjExYmRkYQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVHVlIE5vdiAyOSAwODo1OTo1OCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBPbmx5IHRyYW5zZm9ybSB0aGUgYWRkcmVzcyB0byBwcmludGFibGUgZm9ybSB3aGVuIG5lZWRlZC4KKworY29tbWl0IDE3MWU4ZDQ4ZDRhZjA0MDEzY2ZmOGZkMjhmNTM0MWEyYWVmMjFkODgKK0F1dGhvcjogTWlqbyBTYWZyYWRpbiA8c2FmcmFkaW5AbGludXgudm5ldC5pYm0uY29tPgorRGF0ZTogICBUdWUgTm92IDI5IDE2OjQ5OjQ2IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXAtYnJpZGdlLW1pYjogRml4IGluZGV4IGludGVycHJldGF0aW9uLgorICAgIAorICAgIFRoaXMgcGF0Y2ggY29ycmVjdHMgYSB3cm9uZyBkYXRhIGludGVycHJldGF0aW9uLgorICAgIHNubXAtYnJpZGdlLW1pYiBvYnRhaW5zIHRoZSBpZmluZGV4IHZhbHVlIGZyb20gdGhlIHN5c2ZzCisgICAgYXR0cmlidXRlICdpZmluZGV4JyBUaGUgdmFsdWUgZ2l2ZW4gYnkgdGhlIHN5c2ZzIGF0dHJpYnV0ZQorICAgIGlzIGFuIGludGVnZXIsIHdoaWNoIGlzIGhhbmRsZWQgYXMgaGV4IGFuZCBsZWFkcyB0bworICAgIGluY29ycmVjdCBkYXRhIGRpc3BsYXllZCB0byB0aGUgdXNlci4KKyAgICAKKyAgICBlLmcuCisgICAgICAgICQgPiBzbm1wd2FsayBsb2NhbGhvc3QgQlJJREdFLU1JQjo6ZG90MWRCYXNlUG9ydElmSW5kZXguMgorICAgICAgICBCUklER0UtTUlCOjpkb3QxZEJhc2VQb3J0SWZJbmRleC4yID0gSU5URUdFUjogNTQKKyAgICAKKyAgICBhY2NvcmRpbmcgdG8gdGhlIHN5c2ZzIGF0dHJpYnV0ZSB0aGUgdmFsdWUgaXMgMzYKKyAgICAKKyAgICAgICAgJCA+IGNhdCAvc3lzL2NsYXNzL25ldC88ZGV2aWNlPi9pZmluZGV4CisgICAgICAgIDM2CisgICAgCisgICAgU2lnbmVkLW9mZi1ieTogTWlqbyBTYWZyYWRpbiA8c2FmcmFkaW5AbGludXgudm5ldC5pYm0uY29tPgorCitjb21taXQgODJlMzlmYjY3MDZkZjkwZWNmMmZjOWUxMGFkYTJiOTYyZWUxOTZmMworQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CitEYXRlOiAgIFR1ZSBOb3YgMjkgMTI6Mjc6NDYgMjAxMSArMDAwMAorCisgICAgRml4IG11bHRpLWxpbmUgY2FzZSB0ZXN0aW5nIG9mIGluY29taW5nIE9JRAorCitjb21taXQgYjE1ZGExYTQ1MTYwNjExMDVhMWVhYzc0NTBjZjY1MGVjNDQyNjZiMgorQXV0aG9yOiBOaWtvbGF5IERlbmV2IDxuZGVuZXZAZ21haWwuY29tPgorRGF0ZTogICBUdWUgTm92IDI5IDA4OjI5OjQ5IDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IEZyZWVCU0Q6IFJlc3RvcmUgSVBfUkVDVkRTVEFERFIgZnVuY3Rpb25hbGl0eS4KKworY29tbWl0IDdmNDdmNTJlNDgxYmFhOWFhZmI1Nzg0MjQ0YjBkZDI2NTNlN2RjZmYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBOb3YgMjggMDg6NTE6MzkgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIFNOTVBfQUxMT0NfVFlQRURFRiB0byBhbGxvY2F0ZSB0cmFuc3BvcnRzIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBzZXBhcmF0ZSBjYWxsIHRvIG1lbXNldC4KKworY29tbWl0IGNmODYwMzllMzA4NjIyNWMzMDg1YmI5YWRmMDg4YjhiYTViYTY5NzkKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMTU6MDI6NTggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIgcGFzcy4KKworY29tbWl0IDFhODdlNzZlMDBlZTNkNWNkMzdhMDdiZmMzZDg0NDkwZDNjMmE0ZWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMTQ6NTU6NDIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdW5pdC10ZXN0cy9UMDE0Z2V0aG9zdGJ5YWRkcl9jbGliIHBhc3MKKworY29tbWl0IDg4NjdmZDFkY2ZlNzJiNTlkMDczMjJmZjM4YTY5OWI2NmVjNGYzMjYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBOb3YgMjIgMDk6NDQ6MzggMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSByb2J1c3QgYWdhaW5zdCBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4KKyAgICAKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygpIHVzZSBtZW1zZXQoKSBvbiBVbml4IHN5c3RlbXMgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBsb29wLgorICAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2Ugc3VyZSB0aGF0IG9uIFVuaXggc3lzdGVtcyBuZXRzbm1wX2xhcmdlX2ZkX2NscigpIGRvZXNuJ3QgdHJ5IHRvIHJlYWQgbWVtb3J5IGl0IGlzbid0IGFsbG93ZWQgdG8gcmVhZCBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfaXNfc2V0KCkgcmV0dXJuIGZhbHNlIG9uIFVuaXggc3lzdGVtcyBpZiB0aGUgZmlyc3QgYXJndW1lbnQgZXF1YWxzIC0xIChhIHZhbHVlIHRoYXQgc2hvdWxkbid0IGJlIHBhc3NlZCBieSB0aGUgY2FsbGVyKS4KKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBNYWtlIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIHNocmluayBiZWhhdmlvciBjb3JyZWN0LgorCitjb21taXQgMjNkYjBjZjA5YjhiMGVhYjM3Yjc0OWVmMGMzYzNmMzA2OTAwMjQ1YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE5vdiAyMSAyMzowMjo1NyAyMDExICswMTAwCisKKyAgICBGaXggY2FzdGluZyB0dl91c2VjIHRvIGludCB3aGljaCBtYXkgYmUgdG9vIHNob3J0CisKK2NvbW1pdCA4MGVlNDAyMmU1MzRlNjRhYWQ1YTVmMjcxOTI4NDNiNDJhY2I4NWUwCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTYXQgTm92IDE5IDA5OjE0OjAyIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MzkyMzQ6IE1vdmUgbmV0c25tcF9wYXNzX3N0cl90b19lcnJubyB0byBwYXNzX2NvbW1vbiBhbmQgcmVuYW1lIGl0IHRvIG5ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8KKworY29tbWl0IDBiYWE5Mjk2YzA3MmJiMzczNTc2MGIwZGQ5OTJmMmQxZDNjYTI3ZmEKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFNhdCBOb3YgMTkgMDk6MDU6MjQgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzQzOTIzNDogQ29ycmVjdCB0aGUgZGVwZW5kZW5jaWVzIG9mIHVjZC1zbm1wL3Bhc3MgYW5kIHVjZC1zbm1wL3Bhc3NfcGVyc2lzdAorCitjb21taXQgMWFhNzA0ZTRhMjk0NDMwYjI4ZTM5YjZmOWU0NjgzYjhhNDhiY2UwNAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwODozNToyMSAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRmFjdG9yIG91dCBhc2MyYmluIGFuZCBiaW4yYXNjLiBBZGQgYSBuZXRzbm1wX2ludGVybmFsXyBwcmVmaXggdG8gdGhlbQorCitjb21taXQgY2RhOGZlOTEwMTNmMTJjYmY2NGEwNzc1YWJiNTU3MjAwMzVhZjkzMQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE5vdiAxOSAwMDo1NToyNCAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogQ2FsbCBzbm1wX29pZHRyZWVfY29tcGFyZSBpbnN0ZWFkIG9mIHNubXBfb2lkX21pbl9jb21wYXJlCisgICAgQ0hBTkdFUzogc25tcGQ6IFJlbW92ZSBzbm1wX29pZF9taW5fY29tcGFyZSBzaW5jZSBpdCBpcyBpbnRlcm5hbCBhbmQgdW51c2VkCisKK2NvbW1pdCA4NWY4OTNlMmI2MDVlNjdmOWJkMDQ0M2M3NGUyZWQyNjlhYTY4NTY0CitBdXRob3I6IE5pa2kgRGVuZXYgPG5pa2lfZEB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMTcgMjI6NDI6MzIgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMxNzU2NDA6IFVzZSBJUF9SRUNWRFNUQUREUiBzb2Nrb3B0IHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkKKyAgICAKKyAgICBUaGlzIGh1bmsgZmVsbCBvZiB3aGVuIHRoZSByZXN0IG9mIHRoZSBwYXRjaCB3YXMgbWVyZ2VkLgorCitjb21taXQgNWM5MTNlNTQ2NTZhZTAwOTZiMWZlYjZkYTk4YjVmYzljYTgxZjI3NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzozMzowNyAyMDExICswMTAwCisKKyAgICBEZWZpbmUgdGhlIGZ1bGwgTmV0QlNEIGhpZXJhcmNoeSBkb3dud2FyZHMKKworY29tbWl0IGI4ODE4NDFiZDA0OTNkZDcxZDYzMjU5YmRkZWQ0NDliMDZmMDJjMzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MzA6MzMgMjAxMSArMDEwMAorCisgICAgRml4IHNpemVfdC9pbnQgbWlzbWF0Y2hlcworCitjb21taXQgY2EyOTRjZjc1YmJjOGU5MGRiZjQ0ZWU0MDQ3ODkzNWU5MWRiMTQ4NworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxODowMyAyMDExICswMTAwCisKKyAgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcworCitjb21taXQgY2QzMmMyZGZmMDZiOWI0NTJjYzE4ZDU1MmQyZjIyMzQwOTJjODI5YworQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAxNiAyMzoxNzowOSAyMDExICswMTAwCisKKyAgICBGaXggZm9ybWF0IHdhcm5pbmcKKworY29tbWl0IDg4MzEzNmMyYjJmYTA3MzlmNDM3YThjZmI2NjE0YWNjYzc2ZTI2OGUKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTU6NTggMjAxMSArMDEwMAorCisgICAgTW9yZSBuZWVkcyBmb3IgTkVUU05NUF9QUklvIGZvcm1hdCBzcGVjaWZpZXIKKworY29tbWl0IGI4MDg0YTdjY2M5MDliNmQ2ZGI3YzBlOGU1OTZkNzg2NzFmNTY3OGIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMjM6MTQ6MjYgMjAxMSArMDEwMAorCisgICAgRml4IHVzaW5nIGNoYXIgYXMgYXJyYXkgaW5kZXggKGN0eXBlLmgpCisKK2NvbW1pdCA4NDUyOWU2MzIwYTg5ZDk3ZjEzMTRhZWJhZDgwNjI1NWQyYTFiMThjCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIzOjAwOjU3IDIwMTEgKzAxMDAKKworICAgIEZpeCBtaXNzaW5nIGZvcm1hdCBmb3IgRnJlZUJTRCA0CisKK2NvbW1pdCA0YmQwMzUyOTU1YTI1NTFiZmUwMjMwOGRkMTM0YjkxMjhjOThiOWU5CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIyOjU5OjM2IDIwMTEgKzAxMDAKKworICAgIEZpeCBwYXJhbnRoZXNpcyBwcm9ibGVtCisKK2NvbW1pdCBmZTYyNjliMTkwMGNmNDRkYzI3YTE5OWE3NjFkMTVhMDFjM2YzMDkyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDIyOjU4OjM0IDIwMTEgKzAxMDAKKworICAgIEZpeCBzaXplX3QvaW50IG1pc21hdGNoZXMKKworY29tbWl0IGE0ZGI5ZjlmYzEzZDIxZWNmZjQ4OGViNDEwMzc2ZWRkYTZjMjgyMzIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTM6NDM6MzQgMjAxMSArMDEwMAorCisgICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMKKworY29tbWl0IDM5MGMwMTE0YzhlYzBiZGIyN2IwOGI2Zjc0ZTNmNmVmM2E2Mjk4MWIKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMTM6Mzc6NDkgMjAxMSArMDEwMAorCisgICAgRml4IGZvcm1hdCBzcGVjaWZpZXJzIHRvIGF2b2lkIHdhcm5pbmdzCisKK2NvbW1pdCAyNWNmYzE5NjJhZTU3NmNjYjE1NThkYTFlM2VmOGI2YzE3ZjYzYzE2CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDExOjI3OjUzIDIwMTEgKzAxMDAKKworICAgIFJlYWxseSB1cC10by1kYXRlIG1pYnMKKworY29tbWl0IDBlODZjNzgxZjM5ODliZjAyMmM4OTkzYTExODYxN2I3NGE3NTQyMGMKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBOb3YgMTYgMDk6MTc6MTkgMjAxMSArMDEwMAorCisgICAgbWVtb3J5X2xpbnV4OiBnZXQgU2htZW0gZnJvbSAvcHJvYy9tZW1pbmZvIGZvciAyLjYgKG9yIG5ld2VyKSBrZXJuZWxzCisKK2NvbW1pdCBiZjI2NGQxNWRlZDdhY2JiZjJlMzg3MWI5OGZkMWZjZWY0M2Q5ZWMzCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE2OjE2IDIwMTEgKzAxMDAKKworICAgIG1lbW9yeV9saW51eDogY2xvc2Ugc29ja2V0cyBpbiBlcnJvciBzaXR1YXRpb25zCisKK2NvbW1pdCA1N2ZmOGE0MGJhZTVkOWJjYWQxNjA4OTE0MmE5Y2YzMjhjOWZhMWY1CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjE0OjU3IDIwMTEgKzAxMDAKKworICAgIGRpc21hbi9waW5nLCBkaXNtYW4vdHJhY2Vyb3V0ZTogQ2xvc2Ugc29ja2V0cyBpbiBlcnJvciBzaXR1YXRpb25zCisKK2NvbW1pdCA4YTI1MDJhMTVjMzIxN2I5NTkzOWEzYzgzNjE2N2QyMzBhYzM1ZjAyCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDE2IDA5OjEzOjUzIDIwMTEgKzAxMDAKKworICAgIFVwLXRvLWRhdGUgbGlzdCBvZiBSRkNzIHdpdCBtaWJzCisKK2NvbW1pdCBkY2RkNzAyMTExZDhkYTVmNTM4MDRjZmNmMGRmZGFkNzMxNDY4YmRlCitBdXRob3I6IERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KK0RhdGU6ICAgVHVlIE5vdiAxNSAxMDo1NzozNCAyMDExICswMDAwCisKKyAgICBEb24ndCB0cnkgdG8gaW5zdGFsbCBhbiBlbXB0eSBsaXN0IG9mIG1hbiBwYWdlcyAoTUFOMykKKworY29tbWl0IGJhNjE5ODA0ZTU5NzhhOGRmNzU0ODQ0ZWZjY2E1MmI2OWI1MDE1ZmEKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTM6MzQ6MjAgMjAxMSArMDEwMAorCisgICAgTWluR1c6IE1ha2Ugc3VyZSB0aGF0IHRoZSBiYWNrc2xhc2hlcyBpbiB0aGUgcHNraWxsIG1lc3NhZ2UgYXJlIGRpc3BsYXllZC4KKworY29tbWl0IDkyM2VlY2M1MDdmNzUwNDNiNjBjNWU2ODA1M2E0ZjM5NmFiMGIwZDIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBOb3YgMTQgMTI6MzY6MzggMjAxMSArMDEwMAorCisgICAgQ29tcGlsZXIgd2FybmluZyBmaXggZm9yIHN5c3RlbXMgd2hlcmUgdWludDY0X3QgPSB1bnNpZ25lZCBsb25nIChlLmcuIFJIRUwgNi4xL3g4Nl82NCkKKworY29tbWl0IDQzNGJmYzFmNzQ1NzU1MGI2Zjg3ZDViY2Q1MTEyNzZiMjcwYjU5NjQKK0F1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gTm92IDE0IDExOjIyOjUzIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBmcm9tIE1hcnRpbiBXaWxjazogZml4ZWQgc25tcGQgY3Jhc2hpbmcgd2l0aCAnc2VsZWN0OiBiYWQgZmlsZSBkZXNjcmlwdG9yJy4KKyAgICAKKyAgICBPbiAzMi1iaXQgc3lzdGVtcywgc25tcGQgZGllcyB3aXRoIGFmb3JlbWVudGlvbmVkIG1lc3NhZ2Ugd2hlbiB1c2luZyBmaWxlIGRlc2NyaXB0aW9ucyA+IDMyLCBlLmcuIHdoZW4gaGF2aW5nID4zMiBBZ2VudFggc3ViYWdlbnRzLgorCitjb21taXQgZWQ2NWVjYTZlN2Y5Y2ZhNzM4MGE3OGQ1NmMwMWVkMzE0NzQ1YjE2OQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxOTowMToyMSAyMDExICswMTAwCisKKyAgICBGcmVlQlNELTk6IEZpeCBmb3IgY29uc3QnaWZ5ZWQgbmxpc3QgYXJndW1lbnRzCisKK2NvbW1pdCBlYWNhNzk4M2UzNjU1YWI2OTZmY2M0NDYxY2EwY2VkYmFjNmNlNjlhCitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBGcmkgTm92IDExIDE5OjAwOjEyIDIwMTEgKzAxMDAKKworICAgIE5ldEJTRC02OiBPbmUgbW9yZSBpbnN0YW5jZSBvZiB0aW1lc3BlYyByZXBsYWNpbmcgdGltZXZhbAorCitjb21taXQgOGFkNmM1M2ZkZWM1YWRlYWU0ZTUyZjE3NTFlY2VjNGEzNDViYWIwNQorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgRnJpIE5vdiAxMSAxODo1OTowMSAyMDExICswMTAwCisKKyAgICBGaXggYnVpZyAjMzQzNjUyNzogYXJwX25ldGxpbms6IGZpeCBkeWluZyByZWxvYWQgb2YgY2FjaGUKKworY29tbWl0IDM3OGZmZWQwM2JhNzlhODM0NmQ2YzYyNzgxZTJkZGY1Y2U5MmE0NzgKK0F1dGhvcjogTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIEZyaSBOb3YgMTEgMTg6NTU6NDMgMjAxMSArMDEwMAorCisgICAgRml4IGJ1ZyAjMzQzNjUyODogc3dpbnN0X3BrZ2luZm86IHJlY292ZXIgZnJvbSBOVUxMIHJldHVybiBmcm9tIG9wZW5kaXIKKworY29tbWl0IGQ3YWQ4ZjVmOWYzZjY3ZjE2ZjY1YzI1MTVkMTFlMTk0ZDJjZGQxMmMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMTAgMTQ6MDQ6NDEgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogQ3lnd2luOiBNYWtlIGRhdGVfbl90aW1lKCkgcHJvZHVjZSB0aW1lIHpvbmUgaW5mb3JtYXRpb24KKworY29tbWl0IGJhMzVjNTBiMmY0NTliZDljMTFlZDU5Y2M3ZDFiMTYyMTU2NDRmYTMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBOb3YgMTAgMTQ6MTc6MDQgMjAxMSArMDEwMAorCisgICAgUmVwbGFjZSBBQ19UUllfTElOSygpIGJ5IEFDX0xJTktfSUZFTFNFKCkKKyAgICAKKyAgICBOb3RlOiB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBhZmZlY3QgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0LgorCitjb21taXQgZjYxNWJmMjRmNWQwZjIzY2U5MzAxZGE1NTYxODRkNjQ2MDc0MDQ1NgorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiA5IDIwOjMyOjQ5IDIwMTEgKzAxMDAKKworICAgIEZpcyBCdWcgIzM0MzQ4MjQ6IFNJR1NFR1Ygd2hlbiByZWFkaW5nIGRpc2sgZGlyZWN0aXZlIGFmdGVyIFNJR0hVUAorCitjb21taXQgYTk0YTE3OWQ5MzQwZjUxZmE3YzIzNDMxNjMwYmMwZmZkNmQ3NTllOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiA5IDIwOjMwOjUxIDIwMTEgKzAxMDAKKworICAgIEZpeCBidWcgIzM0MzM2MTY6IGRvbnQgdHJlYXQgRGF0ZUFuZFRpbWUgYXMgYSBzdHJpbmcKKworY29tbWl0IGIyOWU0MTY0NTMxZDI1OGZlMzRhNmZlMmI5ZTFlYzYwYzU2Zjk1NDQKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBOb3YgNyAwMToyNTo1NyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKK2NvbW1pdCBlMjIxZTY1ZmRjMWM2OGYxOTY4NjUxNzE3ZGNjOWNjZmI2NDE0NzgzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDMgMTU6MDU6MDAgMjAxMSArMDEwMAorCisgICAgRml4IHdhcm5pbmdzIGFib3V0IGNvbnZlcnRpbmcgc29ja2FkZHJfaW4gKiBpbnRvIHNvY2thZGRyICouCisgICAgCisgICAgVGhpcyBpcyBhIGZvbGxvdy11cCBmb3IgY29tbWl0IGEwYWYzODUuCisKK2NvbW1pdCAyZTdlOWVkYTBiMGQ2MmE3NjQ1YTlhOGY3MGVmM2ZiNmYzZGQ2OTQxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgTm92IDMgMTE6MTc6NDggMjAxMSArMDEwMAorCisgICAgRml4IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgd2FybmluZ3MuCisKK2NvbW1pdCAzNDYyZWJjZGQwYjdjMjk4Y2IxNWMzMDk5NzM2ZjRmOTUyMjU3ODQ2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDI4IDE2OjA3OjE1IDIwMTEgKzAyMDAKKworICAgIFJlbW92ZSB0aG9zZSBzdXBlcmZsdW91cyBwYXJlbnRoZXNlcyB0aGF0IHRyaWdnZXIgYSBjbGFuZyB3YXJuaW5nLgorCitjb21taXQgM2U1ZmVkZDNlN2QxZWYzMTY4MzYwNGJmNzNkYzU2ZTk0NGNhZDM0OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFRodSBOb3YgMyAwOTo0NToyNyAyMDExICswMTAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgVUNELVNOTVAtTUlCOjpzeXN0ZW1TdGF0cyBhZnRlciAzMCBkYXlzIG9mIHVwdGltZS4KKyAgICAKKyAgICBBZnRlciAzMCBkYXlzLCB2YWx1ZXMgZnJvbSAvcHJvYy9zdGF0IChvbiBMaW51eCkgY2FuIGdldCBiaWdnZXIgdGhhbiAzMmJpdHMgYW5kIHNubXBkIGNhbGN1bGF0aW9ucyBtaWdodCByZW5kZXIgY291bnRlcnMgbGlrZSBzc0NwdVVzZXIgbmVnYXRpdmUgb3IgemVybywgd2hpbGUgdGhlIHJlYWwgdmFsdWUgaXMgaGlnaGVyLiBUaGVyZWZvcmUgdGhlIGNvdW50ZXJzIHNob3VsZCBiZSB0cmFja2VkIGFzIHRoZSBsYXJnZXN0IGludGVnZXIgYXZhaWxhYmxlLgorCitjb21taXQgMGZjODIyMWIyNDk4OGM0YWU2MTgwZWQ0MmI4NmI5ODUyZmQ1ODZhZAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE5vdiAyIDIyOjU5OjA4IDIwMTEgKzAxMDAKKworICAgIGRza0luZGV4IHdhcyBvZmYgYnkgb25lCisKK2NvbW1pdCBhNWIyODgyOWU2NGQ1ZjNiODdlNGI5YjFlZjhjYzIwNGYzM2E2MWI3CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgTm92IDIgMjE6MjU6MDcgMjAxMSArMDEwMAorCisgICAgU29sYXJpcyBuZWVkcyAkQVdLIHRvIGdldCBhIHVzYWJsZSBuYXdrCisKK2NvbW1pdCAyODAxYTIxMzlmMjcwMjFlMWFiMTVlMzYyZTJkM2Q2MjRmZmFhNDk0CitBdXRob3I6IE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBNb24gT2N0IDMxIDIyOjU1OjUzIDIwMTEgKzAxMDAKKworICAgIFBhdGNoICMzNDA2MzY0OiBGaXggdW5zdGFibGUgZGF0YSBmb3IgTmV0QlNELgorCitjb21taXQgODIxYTU4ZDExMmQ3YWM0OTUxNDllMjYyZDcwNDQxMmJhMjgwMDQzOAorQXV0aG9yOiBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgTW9uIE9jdCAzMSAyMjo0Mzo1MiAyMDExICswMTAwCisKKyAgICBGaXggaXB2NiBzdGF0aXN0aWNzIGxvb3BpbmcgdG9vIGZhciB3aGVuIHNjYW5uaW5nIGludGVyZmFjZXMuCisgICAgRml4IFRDUCBzZXNzaW9uIHRhYmxlIHJlcGVhdGluZyBkYXRhIGZyb20gZmlyc3QgZW50cnkgZm9yIGFsbC4KKworY29tbWl0IDM0OTU5MWQwM2UxN2E1NWI0M2VhY2M2YTY4N2IwMmZkOGQ0ZTk1MjgKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIE1vbiBPY3QgMzEgMDg6NTk6MzcgMjAxMSArMDEwMAorCisgICAgQ0hBTkdFUzogcGVybDogTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBwZXJsIHN1cHBvcnQgd2l0aG91dCBzdXBwb3J0IGZvciBvcGFxdWUgdHlwZXMuCisKK2NvbW1pdCAxZWM3MTEwZTcyYmNlMTU2MWY3NDY1MTc0NTlkNmYwNDMwMTZiNjBlCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDMwIDE5OjA1OjMwIDIwMTEgKzAxMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgdGhlIGFzbjEgdGVzdCBwYXNzIGV2ZW4gaWYgc3VwcG9ydCBmb3Igb3BhcXVlIHR5cGVzIGFyZSByZW1vdmVkLgorCitjb21taXQgNmQyNjkxOGFmNTVhYTM2NjJhNzIwNTQyZGU3N2JiZjM5YjBhM2U5MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAyOSAwODozNDozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogRGlzYWJsZSB0aGUgc3VwcG9ydCBmb3IgaW50ZWdlcjY0IGluIHBhc3Mgc2NyaXB0cyBpZiBjb21waWxpbmcgd2l0aG91dCBvcGFxdWUtc3BlY2lhbC10eXBlcy4KKworY29tbWl0IDI5YmY2OWQ3MDQyNGYzNTlkOWM4N2YwN2E5NjRhMDk5NDE1NjQ5YTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTM6MDI6MjUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcHRyYXBkX3NxbDogQXZvaWQgdGhhdCBhIGxpbmtlciBlcnJvciBpcyB0cmlnZ2VyZWQgb24gc3lzdGVtcyB3aGVyZSBteV9wcm9nbmFtZSBpcyBtaXNzaW5nIGluIGxpYm15c3FsY2xpZW50IChlLmcuIEZlZG9yYSAxNSBhbmQgMTYpLgorICAgIAorICAgIFRoaXMgaXMgYSBiYWNrcG9ydCBvZiBjb21taXQgOWY2NTNmNy4KKworY29tbWl0IDJjYzk1MDRiOWJiODYyNWI5NGJlNmNkYTdlNjA5OTNkMDU5Y2Q5MjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMDk6MDE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzNDI4NTA2OiBGaXggbmV0c25tcF9nZXRob3N0YnlhZGRyKCkKKyAgICAKKyAgICBUaGlzIHBhdGNoIHNob3VsZCBmaXggdGhlIHJlZ3Jlc3Npb25zIGludHJvZHVjZWQgYnkgY29tbWl0IDg1ZDk2YzQgKE1heSAxMywgMjAxMSkuCisKK2NvbW1pdCA5YjQyN2IzNTNmMWNlYjhmZTg3ZTZmYzhlZDNiNmNmYWIzY2U3ZjIwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgT2N0IDI3IDA4OjIwOjAwIDIwMTEgKzAyMDAKKworICAgIE1pbkdXOiBBdm9pZCBjb25mdXNpb24gYmV0d2VlbiBNaW5HVydzIGtpbGwuZXhlIGFuZCB0aGUgU3lzSW50ZXJuYWxzIHBza2lsbC5leGUKKworY29tbWl0IDJjNDVmOTJjZmNiNWIwNWUwNDkyMjZhNWE3ODgzYTBiMTA2MDExYWUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBPY3QgMjYgMTA6NDI6MjkgMjAxMSArMDIwMAorCisgICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHBhc3NpbmcgYSBjb25zdCBwb2ludGVyIHRvIGEgZnVuY3Rpb24gYWNjZXB0aW5nIGEgbm9uLWNvbnN0IHBvaW50ZXIuCisKK2NvbW1pdCAyNzVkMjNlZGZkZWJlMDU3N2IwODQyMWU0YzZjOTM2YWUzOWI3ZmRjCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgT2N0IDI2IDA5OjMzOjA5IDIwMTEgKzAyMDAKKworICAgIEZpeCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBzZXQtYnV0LW5vdC11c2VkIHZhcmlhYmxlcworCitjb21taXQgNDQ5NWUxN2MwNzhhYzY5OTdhOWM3ZmExYTg4ZGIwNjQ0ZTkxOTQ5MQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCAyNiAwOTozMjo0NiAyMDExICswMjAwCisKKyAgICBGaXggY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgY2FzdGluZyBhd2F5IGNvbnN0CisKK2NvbW1pdCAxMzk1MmY2YmVlOWY0MDg4NjdhYjZkMmZkZmRkZTRmMjg0MDc0OTU3CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCAyNiAxNDowNToxNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wbGliOiBmcm9tIFNpZGRoZXNoIFBveWFyZWthcjogcHJvcGVybHkgY2xlYW4gdXAgb2xkIHJlcXVlc3RzIGluIGEgc3ViYWdlbnQgd2hlbiB3ZSByZWNvbm5lY3QgdG8gbWFzdGVyLgorICAgIAorICAgIEFuIHNubXAgc3ViYWdlbnQgbGlua2VkIGFnYWluc3QgbmV0LXNubXAtbGlicyBtYXkgY3Jhc2ggaWYgaXQgaGFuZGxlcyBhCisgICAgcmVzcG9uc2Ugd2hpY2ggaGFzIG1hZ2ljIHJlZmVycmluZyB0byBhbiBvbGRlciBkaXNjb25uZWN0ZWQgbWFpbiBzZXNzaW9uLiBUaGlzCisgICAgbWF5IGhhcHBlbiB3aGVuIHRoZSBzdWJhZ2VudAorICAgIGF0dGVtcHRzIHRvIGNsZWFuIHVwIG9sZCByZXF1ZXN0cyBvbiByZWNvbm5lY3Rpb24gb2YgdGhlIGRpc2Nvbm5lY3RlZCBtYXN0ZXIKKyAgICBzZXNzaW9uLgorCitjb21taXQgYWUwNTI0NzJiMjI3MjBkMDgzNjllODUxMjdkYjIxNDI0NWRmMmUzZgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFR1ZSBPY3QgMjUgMTY6MTU6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogcGVybDogZml4ZWQgc2VnbWVudGF0aW9uIGZhdWx0IHdoZW4gaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbHMuCisgICAgCisgICAgV2hlbiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIgZmFpbHMsIGl0IGZyZWVzIGl0cyByZWdpbmZvIC0+IG5zYWhyX0RFU1RST1kgKGFuZCBhbnkgb3RoZXIgZnVuY3Rpb24pIG11c3Qgbm90IGRlcmVmZXJlbmNlIGl0LgorCitjb21taXQgYzE5OWJmOTFiNjIzOWYyNmIyYWFiMzRlODU3NWUwZjBkZjljZGU5YgorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIE1vbiBPY3QgMjQgMTQ6MjU6MjggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IHhmcywgamZzIGFuZCB2eGZzIGZpbGVzeXN0ZW1zIGFyZSBub3cgcmVjb2duaXplZCBpbiBoclN0b3JhZ2VUYWJsZQorCitjb21taXQgNzQ3ZmRjNzFlNjRkMDllMDgwOTI4ZWJiYjRkMDRjYmRlMzkwNjc5OQorQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CitEYXRlOiAgIFdlZCBPY3QgNSAxNTo1Nzo1OSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wZDogTG93ZXJlZCBzZXZlcml0eSBvZiAnZXJyb3IgZmluZGluZyByb3cgaW5kZXggaW4gX2lmWFRhYmxlX2NvbnRhaW5lcl9yb3dfcmVzdG9yZScgbWVzc2FnZS4KKyAgICAKKyAgICBUaGUgbWVzc2FnZSBpcyBzaG93cyB1cCB3aGVuIHNubXBkIGlzIHN0YXJ0ZWQgYW5kIHRoZXJlIGlzIGRpZmZlcmVudCBzZXQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHRoYW4gaXQgd2FzIHdoZW4gc25tcGQgd2FzdCBsYXN0IHN0b3BwZWQuIFRoaXMgaXMgY29tbW9uIG9uIHBwcC1zZXJ2ZXJzIG9yIHZpcnR1YWwgaG9zdHMuCisKK2NvbW1pdCAyNTBmNjk4ZTU5ZWFiOWYxZmZkMzMyZmY1OWZkYjcyZWEwZGYwNmZmCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBTdW4gT2N0IDIzIDA4OjUxOjIzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb2RlIHdvcmsgYWdhaW4KKyAgICAKKyAgICBQcmV2aW91c2x5IHRoZSB0cmFuc3BvcnQgaW5oZXJpdGFuY2UgcHJvY2Vzc2luZyBjb2RlIHJhbiB3aXRoCisgICAgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HIHNldC4gSW4gdGhpcyBtb2RlIHRoZSBmaWxlIG5ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisgICAgaXMgcmVxdWllcmVkLiBUaGF0IGZpbGUgaXMgY3JlYXRlZCBkdXJpbmcgdGhlIGZpcnN0IG1ha2UgcnVuLCBhbmQgdGhhdCBoYXBwZW5zCisgICAgYWZ0ZXIgY29uZmlndXJlIGlzIHJ1bi4KKyAgICBDaGFuZ2UgdGhpcyB0byB1bmRlZmluZSBORVRTTk1QX01JTklNQUxfQ09ERSwgZWZmZWN0aXZlbHkgdHVybmluZyBvZmYgZmVhdHVyZQorICAgIHN1cHBvcnQgZHVyaW5nIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluIG9yZGVyIHRvIG1ha2UgaXQgd29yayBhdCBhbGwuCisKK2NvbW1pdCA2ZWY2OTA3NjQyMjQ3YzY2M2I5Yjg5NjRiOWZkNDRhMjExZGJjYWE3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgT2N0IDIwIDIwOjMwOjU0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDM0MDgzOTg6IEZpeCBhIG1lbW9yeSBsZWFrIGluIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuCisgICAgCisgICAgVGhpcyBtZW1vcnkgbGVhayB3YXMgaW50cm9kdWNlZCB2aWEgY29tbWl0CisgICAgOWJmM2Q5NmQ5NmE4ZWNkNGE1ZmMzNWMzMjZkYzkzNzQ2NzAwMmI2YzogSW5pdGlhbCBIQUwKKyAgICBpbXBsZW1lbnRhdGlvbiBvZiBGaWxlU3lzdGVtIGluZm9ybWF0aW9uIChNYXJjaCA3LCAyMDA4KS4KKworY29tbWl0IGNmODJiODk0YjIyMTdjMjZlZGM2ZjEzNTYzNTFjOTMyNDE1NjA0ZTIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFNhdCBPY3QgMTUgMTQ6NDU6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzNDIzOTE1OiBDaGFuZ2UgZGVmYXVsdCBudW1iZXIgb2YgcmV0cmllcyBiYWNrIGZyb20gMCB0byA1CisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIHZpYSBjb21taXQgNmNhYzA1MCAoTWF5IDUsIDIwMTEsCisgICAgYWRkZWQgc3VwcG9ydCBmb3Igc3BlY2lmeWluZyB0aGUgZGVmYXVsdCBudW1iZXIgb2YgcmV0cmllcyBpbgorICAgIHNubXBkLmNvbmYpLgorCitjb21taXQgYzExYWRhYTEyOTE1YWJmZWU2MjliYjZjMDI2YzIxZjIxODViMjE2ZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxNyAxMDoyNDo0NiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW4zMjogQXZvaWQgdGhhdCBjb21waWxpbmcgdGhlIGhlYWRlciBmaWxlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gd2l0aCB0aGUgTWluR1cgZ2NjIGNvbXBpbGVyIHRyaWdnZXJzIHdhcm5pbmdzIGFib3V0ICJwcmFnbWEgY29tbWVudCIuCisKK2NvbW1pdCBiMTdhNzJhNzkzNDgzYWVlNGE1YmIyZjJlMmM3ZjRmZDg2OTgxN2U2CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDE3IDEwOjIyOjIwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbjMyOiBBdm9pZCB0aGF0IHRoZSBQQUNLQUdFXyogbWFjcm9zIGRlZmluZWQgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjYXVzZSB0cm91YmxlIHdoZW4gaW5jbHVkaW5nIHRoaXMgaGVhZGVyIGluIGEgcGFja2FnZSB0aGF0IHVzZXMgdGhlIEdOVSBhdXRvdG9vbHMuCisKK2NvbW1pdCA2NjRkM2FlMTA3ZDc1NDA1MWI4YzQyMjc5ZDQ1OWFhNTdhMWJlMWMzCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBNb24gT2N0IDEwIDE2OjQ3OjE2IDIwMTEgKzAyMDAKKworICAgIE1pbkdXLCBod19mc3lzOiBVc2UgcHJvcGVyIGZvcm1hdCBzcGVjaWZpZXJzIGluIGEgZGVidWcgc3RhdGVtZW50LgorICAgIAorICAgIFRoaXMgcGF0Y2ggZml4ZXMgYW4gaXNzdWUgaW50cm9kdWNlZCBpbiBjb21taXQgNzZmZjI1ZC4KKworY29tbWl0IDIxMWRjYjQ5MzA2NTYxZTM1YmEzYzIxM2JlN2NmYTI1N2I0MGE4ZTUKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBPY3QgMTAgMTU6NTI6NDMgMjAxMSArMDIwMAorCisgICAgQXZvaWQgdGhhdCBnY2MgNC42IGNvbXBsYWlucyBhYm91dCBzZXQgYnV0IG5vdCB1c2VkIHZhcmlhYmxlcworCitjb21taXQgOWY2NTNmNzNlNWFhNzBmMGJlZjExNzQ2MzJlOTU1OTRmODdmNjY5ZgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgTW9uIE9jdCAxMCAxMzowMjoyNSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBzbm1wdHJhcGRfc3FsOiBBdm9pZCB0aGF0IGEgbGlua2VyIGVycm9yIGlzIHRyaWdnZXJlZCBvbiBzeXN0ZW1zIHdoZXJlIG15X3Byb2duYW1lIGlzIG1pc3NpbmcgaW4gbGlibXlzcWxjbGllbnQgKGUuZy4gRmVkb3JhIDE1IGFuZCAxNikuCisKK2NvbW1pdCA0YzgzYjkyMjlhNzQ1NGYzNGY2ZmY3NWY2OWU2N2U0MDMwYzQxOWI1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgT2N0IDcgMTU6NTg6NDUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogU2V0IHRoZSBycGF0aCBmb3IgbGlicGVybC5zbyBpbiBsaWJuZXRzbm1wbWlicy5zbyBzdWNoIHRoYXQgdGhlIGR5bmFtaWMgbGlua2VyIGNhbiBmaW5kIGxpYnBlcmwuc28gd2l0aG91dCByZXF1aXJpbmcgdGhlIHVzZXIgdG8gbW9kaWZ5IHRoZSBkeW5hbWljIGxpbmtlciBzZXR0aW5ncy4KKyAgICAKKyAgICBUaGlzIGNoYW5nZSBpbiBhZ2VudC9NYWtlZmlsZS5pbiBpcyBuZWNlc3Nhcnkgb24gdGhlIDUuNSBicmFuY2ggYW5kCisgICAgbGF0ZXIgYnV0IG5vdCBvbiB0aGUgNS40IGJyYW5jaC4gVGhhdCBpcyBiZWNhdXNlIHRoZSA1LjQgYnJhbmNoIHVzZXMKKyAgICBhbiBvbGRlciB2ZXJzaW9uIG9mIGxpYnRvb2wgdGhhdCBwcm9wYWdhdGVzIHRoZSBycGF0aCBvZiBkZXBlbmRlbnQKKyAgICBsaWJyYXJpZXMuIFRoaXMgaXMgY2FsbGVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jeSB0cmFja2luZyBpbiB0aGUKKyAgICBsaWJ0b29sIG1hbnVhbC4gVGhpcyBmdW5jdGlvbmFsaXR5IGlzIHByZXNlbnQgaW4gbGlidG9vbCB2ZXJzaW9uIDEKKyAgICBidXQgbm90IGluIGxpYnRvb2wgdmVyc2lvbiAyLiBGb3IgbW9yZSBiYWNrZ3JvdW5kIGluZm9ybWF0aW9uIGFib3V0CisgICAgZHluYW1pYyBsaWJyYXJpZXMgYW5kIHJwYXRocywgc2VlIGFsc28gdGhlIGRvY3VtZW50IHdpdGggdGhlIHRpdGxlCisgICAgIlJwYXRoSXNzdWUiIG9uIHRoZSBEZWJpYW4gd2lraSAoaHR0cDovL3dpa2kuZGViaWFuLm9yZy9ScGF0aElzc3VlKS4KKworY29tbWl0IDg5MjVjOTEyZDI2Mzk3NTJhODRiY2ZmZWVmMWI3MGE4MTAyNjQ0OWIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBPY3QgNyAxNDoyMToyOCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBhZ2VudDogSE9TVC1SRVNPVVJDRVMtTUlCOiBBZGQgbWlzc2luZyBicmFjZSBpbiBhIGRlYnVnIHN0YXRlbWVudAorCitjb21taXQgNzZmZjI1ZDliZjk3NTc5ZTcyMTMxMDIwNjVmZDUwOTZmMDQ5YTRjNQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIE9jdCA3IDE0OjEzOjE4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3RvcmFnZVRhYmxlOiBmaXggYnVnIGluIGhhbmRsaW5nIGxhcmdlIGZpbGVzeXN0ZW1zLCB3aGVyZSBsYXJnZSBtZWFucyBhYm92ZSA4IFRCICg9IDIqKjMxICogNDA5NiBieXRlcykuCisgICAgCisgICAgVGhpcyBwYXRjaCBmaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIGNvbW1pdAorICAgIDcxZDgyOTNmMzg3YTZjZDY2YmIwZGJiMTNjMGY1MDE3NGQyZTY3OGIuCisgICAgRm9yIHRoZSBvcmlnaW5hbCBidWcgcmVwb3J0LCBzZWUgYWxzbworICAgIGh0dHBzOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmF0aWQ9MTEyNjk0JmFpZD0zNDE5ODI1Jmdyb3VwX2lkPTEyNjk0LgorCitjb21taXQgODY2MDMzZGI5OTA0ZmZiMTIwM2YyODNmODM4MDkyZTRjZjY4ZGU2YgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE9jdCA2IDA3OjMzOjI3IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgc3B1cmlvdXMgI2VuZGlmIHRoYXQgc2VlbXMgdG8gYmUgdGhlIHJlc3VsdCBvZiBhIG1pc21lcmdlLgorCitjb21taXQgMjBmNGYzMjY3ZWUyMGQ1NTcwNWI3YTQzNzg5ODc5YzEwM2Y5NjYyMAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgVGh1IE9jdCA2IDAwOjA4OjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgbWlzc2luZyBlbmQgY29tbWVudHMgdG8gZmVhdHVyZSBpZm5kZWZzLgorCitjb21taXQgZTVkZTJjYzU3YmYzMDRmMzMyMGNhZDAwMzRkMmVhMmQ4YWVkYzQzNgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCA1IDA5OjE1OjEwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGFnZW50OiBMb2cgYSBtb3JlIGRldGFpbGVkIGVycm9yIG1lc3NhZ2UgaWYgZW1iZWRkZWQgcGVybCBpbml0aWFsaXphdGlvbiBmYWlscworCitjb21taXQgNWVlZjk5OTBkZTI4ZjYzMTExZTZjMDkzYmUwZjNjN2FlMmQ1MTNhMQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIE9jdCA1IDA4OjQ1OjQ5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHBlcmw6IEFkZCBhZ2VudDo6dXB0aW1lKCkKKworY29tbWl0IDY4MTBlZDQyZjliYzU2MDc1MGQ2ZGJmYjdlNTBiNmUyYWMxMTg5OWMKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTE6MDE6MjMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogQ3l3aW46IGFnZW50OiBJbXBsZW1lbnQgZ2V0X3VwdGltZSgpIHN1Y2ggdGhhdCBxdWVyeWluZyBIT1NULVJFU09VUkNFUy1NSUI6OmhyU3lzdGVtVXB0aW1lIHJldHVybnMgYSBub24temVybyB2YWx1ZS4KKworY29tbWl0IDk3MTcyYjMxMWQyMGY0NDQxYzdhN2U5MDA5MmI1OWMxZTBkYTk5ZjcKK0F1dGhvcjogVGhvbWFzIEphcm9zY2ggPHRqYXJvc2NoQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIE9jdCA1IDA4OjQ2OjM5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFBBVENIOiAzNDE4NjQ5OiBIT1NULVJFU09VUkNFUy1NSUI6IFVzZSBwY2xvc2UoKSBpbnN0ZWFkIG9mIGZjbG9zZSgpIHRvIGNsb3NlIGEgcGlwZS4KKworY29tbWl0IDY1OTE5MzdhZGI4NTAwMGMyNzA2OWM0YmU4NGNmNDY4ODgzOGViY2QKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNjoxODowMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIGRlcGVuZGVuY2llcyBvbiBARkVBVFVSRVRBUkdTQCB0byBtYWtlIHRoZSBzdWJ0YXJnZXQgd29yayBhcyB3ZWxsLgorCitjb21taXQgYjljODAxMmVjMDM1YmMwODRmMTc1ODc2ZmVjYzM3NTE5NWY5YmU4MQorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDE0OjAyOjU4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBZGQgdGFyZ2V0IHRvIGJ1aWxkIGFnZW50eHRyYXAgZnJvbSB0aGUgdG9wbGV2ZWwKKworY29tbWl0IDk5NTY0N2MwY2ZlMDA0MTIyNjJjYzU3OTdiZGZhZTlkMDBiNzBjNzYKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxNTo0NDozNiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIHRoZSB1c2Ugb2YgLUwgZmxhZ3MgZm9yIGludGVybmFsIGxpYnJhcmllcyBhcyBpdCBjb25mdXNlcyBsaWJ0b29sLgorCitjb21taXQgOTNkYzEyMzVhMGRiNThmZmQyOTYxN2NmZjAwZGMxMTI2Mzc4MDIwMgorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU3VuIE9jdCAyIDExOjMxOjQ2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBNYWtlIG1ha2UgYXBwcyB3b3JrIGFnYWluCisgICAgCisgICAgYXBwcyBpbmNsdWRlIHNubXB0cmFwZCBhbmQgdGhhdCByZXF1aXJlIHRoZSBhZ2VudCBsaWJyYXJpZXMgYXMgd2VsbC4KKworY29tbWl0IGJhNDE0ODhlZDQ0Y2QyM2MyNTk2M2Q0ZmM1NmM0NzY4NTNiMmFiNTkKK0F1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+CitEYXRlOiAgIFN1biBPY3QgMiAxMToyOTozMyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogV2hlbiB5b3Ugc2F5IG1ha2UgbGlicyB5b3UgZXhwZWN0IGFsbCB0aGUgbGlicyB0byBiZSBidWlsdC4KKyAgICAKKyAgICBUaGlzIGlzIGRlbW9uc3RyYXRlZCBieSB0aGUgc25tcHRyYXBkIHRhcmdldCBhdCB0aGUgdG9wIGxldmVsIHdoaWNoIG9idmlvdXNseQorICAgIGV4cGVjdGVkIGJvdGggbGlicyB0byBiZSBidWlsdCBhbmQgc28gZmFpbGVkIHRvIGNvbXBpbGUgYmVmb3JlIHRoaXMgcGF0Y2guCisKK2NvbW1pdCAzMDU3YzczZTA5MzQ3M2JlNDYyNTRiY2RmYjRjYTc4OGU0MzJkMWI4CitBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgVHVlIFNlcCAzMCAwNzozMjo1MiAyMDA4ICswMDAwCisKKyAgICBORVdTOiBidWlsZGluZzogUEFUQ0g6IDIwOTExNTY6IGNvcnJlY3RseSBkZWNsYXJlIGRlcGVuZGVuY2llcyBpbiBNYWtlZmlsZS4KKyAgICAnbWFrZSAtaiA8Tj4nIHNob3VsZCB3b3JrIG5vdy4KKyAgICAKKyAgICBCYWNrcG9ydCB0aGlzIHRvIFY1LTQgYXMgaXQgaXMgbmVlZGVkIGZvciBjb3JyZWN0IG9wZXJhdGlvbiBpbiB0aGUgc2luZ2xlCisgICAgdGhyZWFkZWQgY2FzZSBvZiBtYWtlIG1pYmxpYiBhcyB3ZWxsLgorCitjb21taXQgNmVhZTM0MGZhMmE2NDA4NjU5Mjk4MmNjNTI3MzViYzAxNDg3ZDk3OAorQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KK0RhdGU6ICAgU2F0IE9jdCAxIDE5OjMzOjUwIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBTaWxlbmNlIGxpYmJzZCAwLjMuMCBuYWdnaW5nCisgICAgCisgICAgSWYgeW91IGhhdmUgbGliYnNkIDAuMy4wIGluc3RhbGxlZCB0aGVuIHRoZWlyIHZlcnNpb24gb2Ygbmxpc3QuaCB3YXJucyBhbmQKKyAgICB0cmllcyB0byBtYWtlIHlvdSBpbmNsdWRlIGJzZC9ubGlzdC5oIGluc3RlYWQuIFRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZG9uJ3QKKyAgICBuZWVkIHRoYXQgY29tcGF0aWJpbGl0eSBsaWJyYXJ5IGFzIHdlIGtub3cgaG93IHRvIGRvIGl0IG91cnNlbGYgc28gaXQgYmVjb21lcworICAgIHB1cmUgbmFnZ2luZy4gVGhpcyBwYXRjaCBhZGRzIGEgZGVmaW5lIHRoYXQgY2hhbmdlcyB0aGUgd2FybmluZyBpbnRvIGFuCisgICAgZXJyb3IgYW5kIHRoZW4gZmlndXJlcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB1c2FibGUgbmxpc3QuaCBhbmQgaWdub3JlcyBpdAorICAgIGZvciB0aGUgZnV0dXJlLgorCitjb21taXQgYWMzOGNiNTMxYmVlNTBlZGM4ZDRjODM0ZjMwMDVmNTk5MmM3NzFkOAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVGh1IFNlcCAyOSAxOTowMzowMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBwZXJsOiBFbmFibGUgc2VuZGluZyBTTk1QdjIgdHJhcHMgd2l0aCBhbiBlbXB0eSB2YXJiaW5kIGxpc3QKKworY29tbWl0IGE3NWRlMjk3MTUyN2FjMmQyZTgxMjAyNDI5ODYwMmJiMjQxMmYzMzcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIEZyaSBTZXAgMzAgMTA6NDE6NDQgMjAxMSArMDIwMAorCisgICAgcGVybC9TTk1QL1NOTVAueHM6IFVwZGF0ZSBlbWFjcyBtb2RlbGluZQorCitjb21taXQgODQ4ZjYzMDBlZmUzODQ5MmZiNDU0NDUxYTAzMGYwYjdlNmZmOGM5ZAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgRnJpIFNlcCAzMCAxMDo0MTo0NCAyMDExICswMjAwCisKKyAgICBwZXJsL1NOTVAvU05NUC54czogVXBkYXRlIGVtYWNzIG1vZGVsaW5lCisKK2NvbW1pdCBjMTM3NDQ3M2VjZDhlYzllMDMxMDAxMzg2MWVlMThjODNlNWQ2YzViCitBdXRob3I6IE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorRGF0ZTogICBGcmkgU2VwIDMwIDAzOjI5OjM2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFByb3RlY3QgdGhlIHVzZSBvZiAkT1NUWVBFIHRvIGVuc3VyZSB0aGF0ICd0ZXN0JyBnZXQgZW5vdWdoIHBhcmFtZXRlcnMuCisKK2NvbW1pdCA3ZTk3YTIwNjMzYTU3ZWFlMzlkMDE1YjIzMzM5NDYzYzMyZjVmODQ4CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDI5IDEwOjIyOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IENvbnZlcnQgc25tcGxpYi90ZXN0X2JpbmFyeV9hcnJheS5jIGludG8gdHdvIHVuaXQgdGVzdHMKKworY29tbWl0IDljMGRkOTgxNzY0NTczNDJmZmZhYTVlNzRkODAyZTMxNDVlZDcwZTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMDg6NTY6MTcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIHVuaXQgdGVzdCBmb3IgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkKKworY29tbWl0IDVmZDI2ZTRmYTNlMDAwZWE5YzgxYzM4YWI5NzViNzk0NmVmZTIxNTcKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFdlZCBTZXAgMjggMTc6NDk6NTUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogYWdlbnQ6IEF2b2lkIHRoYXQgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkgZmFpbHVyZSB0cmlnZ2VycyBhIGRvdWJsZSBmcmVlLgorICAgIAorICAgIEZpeGVzIGEgcmVncmVzc2lvbiBpbnRyb2R1Y2VkIHZpYSBjb21taXQKKyAgICBhYTRkNDdjMjYwOWU1MjgxOGM5Y2RmMWE4ZTIyMDVkZTlhMzM1YTBhIChzdm4gcjE5NTE1KS4KKworY29tbWl0IGQyMjUyZDAxNjY5MzgwNzMyNmY3MmI2NjEyMzY0OWRlYTAwYWY5MTYKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFRodSBTZXAgMjkgMTA6MjA6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogUmVxdWlyZSBhIHNlbWljb2xvbiBhZnRlciBPSygpLCBPS0YoKSBhbmQgUExBTigpCisgICAgCisgICAgQWxzbywgbGV0IE9LRigpIGVtaXQgYSBzaW5nbGUgbGluZSBvZiBvdXRwdXQgc3VjaCB0aGF0IGFsbCBvdXRwdXQgaXQKKyAgICBwcm9kdWNlcyBpcyB2aXNpYmxlIGluIHRoZSBvdXRwdXQgb2YgIm1ha2UgdGVzdCIuCisKK2NvbW1pdCAxNDIxOTI0YjQ4NTIxNDIxOTJjNWJiOWU5M2RkYmZlZDY5ZTkwOGZhCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBXZWQgU2VwIDIxIDIyOjIwOjA4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IEF2b2lkIHdhaXRpbmcgaW5kZWZpbml0ZWx5IGlmIGEgc2Vzc2lvbiBoYXMgdGltZW91dCB6ZXJvCisKK2NvbW1pdCA1ZjI3ZjRmNzRhZTJiZDViYWY1MDNjZjMwNmI0ZjlhMjg0MWE1N2NmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6MzI6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IEZpeCBhIHJhY2UgY29uZGl0aW9uIGluIHRoZSB0ZXN0IHJ1bm5lcgorCitjb21taXQgMDk3MDM5NThjYzVlYTg0NTkyOWFlMTllZjllMDgwNGFlY2FhNTEyZQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyNyAxMjo0Mjo0MSAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiB0ZXN0aW5nOiBBdm9pZCBmYWxzZSBuZWdhdGl2ZSBmb3IgVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlIGNhdXNlZCBieSB0aGUgdGVzdCByZXN1bHQgYmVpbmcgcHJlc2VudCBpbiB0aGUgaGV4IGR1bXAgKCJtb3N0bHlfaGFybWxlc3MiKQorCitjb21taXQgNDM5MzAwMjc5ZjZmMzE0Mzg2MzhkMmYyMjJjMjRjM2M4NDFmYTZhYgorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyNyAxMToxNjozMiAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBidWlsZGluZzogTWljcm8tb3B0aW1pemUgYWdlbnQgbW9kdWxlIGRlcGVuZGVuY3kgYW5hbHlzaXMKKyAgICAKKyAgICBUaGlzIG1ha2VzIHRoZSBhZ2VudCBtb2R1bGUgZGVwZW5kZW5jeSBhbmFseXNpcyBjYXJyaWVkIG91dCBieSB0aGUKKyAgICBjb25maWd1cmUgc2NyaXB0IHNsaWdodGx5IGZhc3RlciwgZXNwZWNpYWxseSBvbiB0aG9zZSBzeXN0ZW1zIHdoZXJlCisgICAgZm9yaygpIGlzIGV4cGVuc2l2ZSAoQ3lnd2luKS4KKworY29tbWl0IGJiYzY4MDAwNGExMzc2MDM4ZGZkYzQxNzJkYmU3YjllMzExZmJhNjgKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMjYgMTA6MTQ6NDUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IE1ha2UgdGVzdCBUMTMwc25tcHYxdmFjbWdldF9zaW1wbGUgcGFzcworCitjb21taXQgNzBiMDZjZjc4OTIwOGVhYTg5MGJmYmNkNjM4YmRiNzc1ZjgxNzA1NAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCAyMCAwOTo1MDo1NyAyMDExICswMDAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiB0ZXN0aW5nOiBwZXJsOiBGaXggYW4gaW5jb3JyZWN0IG1lc3NhZ2UgcHJpbnRlZCB3aGlsZSBydW5uaW5nIHRoZSBQZXJsIG1vZHVsZSByZWdyZXNzaW9uIHRlc3RzCisKK2NvbW1pdCA3MGJjYzhkZTJkMGZjOTJiYmI4NDgxODIzNjMwZmFiOWJjODdhZjc1CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBGcmkgU2VwIDE2IDE2OjE0OjI0IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBPYnRhaW4gdGhlIE1TWVMgcGF0aCBmcm9tIHRoZSBlbnZpcm9ubWVudAorCitjb21taXQgNjI2Mjc1ZTJkMWFjYWZhZTcxNDRhMzNlZDMwMWE0MGY1OTZiMzdiMAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgV2VkIFNlcCAxNCAxMzoxNDoxNyAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBXaW5kb3dzOiBSZW1vdmUgc3VwZXJmbHVvdXMgbGluayBsaWJyYXJpZXMgZnJvbSBwcm9qZWN0IGZpbGVzICgqLmRzcCkKKworY29tbWl0IDM4ZmMzY2FhOWVlYjM4MDAyNTRiNGY2YWQ2ZjhmNDc2NGMwZjgzZGIKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgMjAgMDk6MzQ6MDggMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSBuZXRzbm1wX2NhbGxiYWNrX2FjY2VwdCgpIHJldHVybiAtMSAoZmFpbHVyZSkgaW5zdGVhZCBvZiAwIChTVERJTl9GSUxFTk8pCisKK2NvbW1pdCA2YzhjN2U4YWNhOGZjMmVlYjUyMDEwYWUzZTlmZWU2ZGQ4M2VmNzgwCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDEzIDA5OjU4OjI2IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHNubXBsaWI6IFJlbW92ZSBvYnNvbGV0ZSBzbm1wX2dldF9mZF9mb3Jfc2Vzc2lvbigpIGRlY2xhcmF0aW9uCisKK2NvbW1pdCAwODYwZDExZmQ4ZmM1ZGJkYWFhZTIyNjFmYWUyYzA3ZmI5YzJjODJkCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDggMTM6NTQ6NTUgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogQXZvaWQgdGhhdCB0aGUgdHlwZWRlZnMgaW4gPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBjb25mbGljdCB3aXRoIHRob3NlIGluIDxzdGRpbnQuaD4gZnJvbSB0aGUgbXNpbnR0eXBlcyBwcm9qZWN0CisKK2NvbW1pdCBmOGEwMzZmNjNmZjY4ZjA4MzQzNjEyMGUwYWJkNDc4YjY5MmEyZjYxCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgU2VwIDggMTM6MjE6MDYgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogV2luZG93czogTVNWQzogV2hlbiBsaW5raW5nIHdpdGggT3BlblNTTCwgbGluayB3aXRoIHVzZXIzMi5saWIgdG9vCisKK2NvbW1pdCA4MzZhMjNlMTBjYTgxMGMzODk5OTAyZDMyNTg3NjE2YTlkMTIwM2RmCitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUaHUgSnVsIDE0IDE4OjM4OjEzIDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IFdpbmRvd3M6IE1TVkM6IExpbmsgd2l0aCBwcm9wZXIgbGliZWF5MzIgbGlicmFyeQorCitjb21taXQgN2IwN2ZkNmNkZWY0OWVjN2JiMDRiMTY2ZTJhNGZiYjM3YjU4Mjg0MAorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDExOjEwOjM4IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IHRlc3Rpbmc6IFJlbW92ZSBhbiBpbmNvcnJlY3QgY29tbWVudCBmcm9tIHNpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK2NvbW1pdCA5OGY2ZDI5ZDk4MWZmOGU2MDc2MDBjNjNkYWRiMjQwNTM1NjI5ODA3CitBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorRGF0ZTogICBUdWUgU2VwIDYgMTA6NDk6MDMgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogdGVzdGluZzogTWFrZSBJU0RFRklORUQoKSBjaGVjayBmb3IgYW4gZXhhY3QgbWF0Y2ggaW5zdGVhZCBvZiBhIHByZWZpeCBtYXRjaAorCitjb21taXQgNTJjZDAwMzFhMzFmNjkyZjEzMjYzYTk0YzMzNWQwNmJlMTQ1NDgwMworQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBNYWtlIHRob3NlIHJlZ3Jlc3Npb24gdGVzdHMgcGFzcyBmb3Igd2hpY2ggU05NUENPTkZQQVRIIGFuZC9vciBTTk1QX1BFUlNJU1RFTlRfRElSIG1hdHRlcgorCitjb21taXQgZjVjZDg5YmQzMzU2ZGQ3NGUxNTU2YzBiNTA5NjZhNjQzZjE5MjA4NQorQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KK0RhdGU6ICAgVHVlIFNlcCA2IDEwOjEyOjU5IDIwMTEgKzAyMDAKKworICAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBGaXggYSByYWNlIGNvbmRpdGlvbiBpbiB0aGUgdGVzdCBmcmFtZXdvcmsKKworY29tbWl0IGRlZWRkNTJjODM0YTY0NDg4NTJhMDY3ODU1MzZlMTM4NjU5Njk2OTQKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIFR1ZSBTZXAgNiAxMDoxMjo1OCAyMDExICswMjAwCisKKyAgICBDSEFOR0VTOiBNaW5HVzogU3VwcG9ydCB0aGUgZGlyZWN0b3J5IHN0cnVjdHVyZSBvZiByZWNlbnQgU2hpbmluZyBMaWdodCBPcGVuU1NMIGJpbmFyeSBkaXN0cmlidXRpb25zCisKK2NvbW1pdCBkNTViZDRlMDU0OWYwM2I2ZmQzMjU2MmMyYWE3ZmUzOTI3MmE5ZWY3CitBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorRGF0ZTogICBXZWQgU2VwIDI4IDA2OjU1OjE5IDIwMTEgLTA3MDAKKworICAgIHJlbW92ZSB0aGUgdjUuNyBmcm9tIHRoZSBmcm96ZW4gbGlzdAorCitjb21taXQgYWMyYWVkM2M5NGJiMmViYjQ3M2FmMGExZTIwZjA1NjFhZDYyOTk1NgorQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK0RhdGU6ICAgV2VkIFNlcCAyOCAwNjo1NToxMSAyMDExIC0wNzAwCisKKyAgICByZW1vdmUgdGhlIHY1LjcgZnJvbSB0aGUgZnJvemVuIGxpc3QKKworY29tbWl0IDQ2ZWFjMDJlOWEyN2JmNGYzMDY4ZTc5NWNhYjg5MWYwNWE4NDg4NzAKK0F1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CitEYXRlOiAgIE1vbiBTZXAgMjYgMjE6NDk6MjcgMjAxMSArMDIwMAorCisgICAgQ0hBTkdFUzogc25tcGQ6IEF2b2lkIHRoYXQgc25tcGQgY3Jhc2hlcyBpZiBzdGFydGVkIG9uIGEgc3lzdGVtIHdpdGggYW5vdGhlciBPcGVuU1NMIGxpYnJhcnkgdmVyc2lvbiB0aGFuIHRoZSBvbmUgaXQgaGFzIGJlZW4gYnVpbHQgd2l0aC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnJjMyAtPiBWNS43LjEKKworMjAxMS0wOS0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43LjEKKworCisyMDExLTA5LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5yYzMKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnJjMiAtPiBWNS43LjEucmMzCisKKzIwMTEtMDktMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnJjMworCisKKzIwMTEtMDktMjIgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCAwN2Y2MWEwMmEyNDA5MDk2ZTVjOTYyY2QyMTExMjYzOTZhZDA5ZDJiIE1lcmdlOiBlZTBkM2FkCisKKyBiZGEzMjRiIEF1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIFRodQorIFNlcCAyMiAxMDozOTo1OSAyMDExICswMTAwCisKKzIwMTEtMDktMjIgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCBjNTVmNjA4ZjE2ZjE2MGY1ZTc5ZGMwNTdmODg3OGRlZjQ2Mjk3M2UxIEF1dGhvcjogRGF2ZQorCisgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4gRGF0ZTogICBUaHUgU2VwIDIyIDEwOjM1OjI0IDIwMTEKKyArMDEwMAorCisyMDExLTA5LTIyICBTdGV2ZSBGcmllZGwgPHN0ZXZlQHVuaXh3aXoubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzogQ0hBTkdFUzogc25tcGQ6IDM0MDk2OTI6CisKKyBDYWxjdWxhdGUgZGlzayBwZXJjZW50YWdlIHVzYWdlIHZpYSBmbG9hdGluZy1wb2ludCBhcml0aG1ldGljIHRvCisgYXZvaWQgaW50ZWdlciBhcml0aG1ldGljIGVycm9ycy4gIChDb2RlIGJhc2VkIG9uIHBhdGNoLCByYXRoZXIgdGhhbgorIGFwcGxpZWQgdmVyYmF0aW0pCisKKzIwMTEtMDktMjIgIFN0ZXZlIEZyaWVkbCA8c3RldmVAdW5peHdpei5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOiBDSEFOR0VTOiBzbm1wZDogMzQwOTY5MjoKKworIENhbGN1bGF0ZSBkaXNrIHBlcmNlbnRhZ2UgdXNhZ2UgdmlhIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgdG8KKyBhdm9pZCBpbnRlZ2VyIG92ZXJmbG93IGVycm9ycy4gIChDb2RlIGJhc2VkIG9uIHRoZSBzdWJtaXR0ZWQgcGF0Y2gsCisgcmF0aGVyIHRoYW4gYXBwbGllZCB2ZXJiYXRpbSkKKworMjAxMS0wOS0yMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogQ2hhbmdlTG9nOiBUaGUgb25seSBjaGFuZ2UgYmV0d2VlbiBWNS43LnJjMSBhbmQgVjUuNy4xLnJjMiBpcyB0aGUKKworIHZlcnNpb24gbnVtYmVyLiBNYWtlIHRoaXMgY2xlYXIgaW4gdGhlIENoYW5nZUxvZyBmaWxlLgorCisyMDExLTA5LTIxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IGNoYW5nZWxvZyB1cGRhdGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnJjMSAtPiBWNS43LjEucmMyCisKKzIwMTEtMDktMjEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnJjMgorCisKKzIwMTEtMDktMDQgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorCisgICAqIDogY29tbWl0IDRkNmRlZmRhZTcyYzM1YjEwODAwNzYxODAzMTNkMjkxMDU2ODQ3NWIgTWVyZ2U6IGQzYTc1OGMKKworIDNiN2ZkYzQgQXV0aG9yOiBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4gRGF0ZTogICBTdW4KKyBTZXAgNCAxNDo0NjowMiAyMDExICswMjAwCisKKzIwMTEtMDktMDQgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorCisgICAqIDogY29tbWl0IGJiZTJjMTlhMDFlY2VjMDI0Zjc0MWUyZTU0NzAxYWU2MjEyZjRjM2UgQXV0aG9yOiBNYWdudXMKKworIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+IERhdGU6ICAgU3VuIFNlcCA0IDE0OjQ0OjM4IDIwMTEKKyArMDIwMAorCisyMDExLTA5LTA0ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KKworICAgKiA6IGNvbW1pdCBkM2E3NThjZjMwMjU0YjgwNzA2YTQzZjE5MWMxNTIzOGIyY2I3M2M5IE1lcmdlOiBjMTA3Y2UwCisKKyAyMjdkYmQ3IEF1dGhvcjogTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAbHlzYXRvci5saXUuc2U+IERhdGU6ICAgU3VuCisgU2VwIDQgMTQ6MDg6MzUgMjAxMSArMDIwMAorCisyMDExLTA5LTA0ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckBseXNhdG9yLmxpdS5zZT4KKworICAgKiA6IGNvbW1pdCA5ZWZhNDY3YTk3MmJiNmUxYzdmYmRhZjJlMjc0MjlkMjlmNGFiODllIEF1dGhvcjogTWFnbnVzCisKKyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPiBEYXRlOiAgIFN1biBTZXAgNCAxNDowMDoxMiAyMDExCisgKzAyMDAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnByZTIgLT4gVjUuNy4xLnJjMQorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZQorCisgZGVwZW5kIGZvciA1LjcuMS5yYzEKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOiBmaXggQysrIGNvbW1lbnQKKworCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcuMS5yYzEKKworCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjMTA3Y2UwNzg0MDlkMjY1YjliMjE4ZDQ5ZjM4MTViNzk1ZGIxZGMzIE1lcmdlOiBlYTRiM2IyCisKKyA5MTVhYThkIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAzMCAxOTowNzowNyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDQyMmIwODJhOTU5M2NhOWM2NWFhYzQ0OWU2ZDEyOGE5ZTk3ZTk0ZmIgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEF1ZyAzMAorIDE5OjA2OjU2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZWE0YjNiMjNmMzUwNTgzZTU2MjYzMjhiNTM2N2U2YzYxNzI1NWY5NSBNZXJnZTogYmNmMzhiOAorCisgYjM0ZDVkYyBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMzAgMTY6Mzg6MjUgMjAxMSAtMDcwMAorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA3MWMwZDc2NTA0OTM3MTA2MzFmYTA4ZDVkYzRkYWQ1MDFhOWFhNzcxIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFR1ZSBBdWcgMzAKKyAxNjozNzo0MSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGIxM2Y0ZDg4ODZiNmE0ZTczYmMwN2RmMmI5MGQxYTYxMTVjZjNkZmMgTWVyZ2U6IGY3ZTIxZjIKKworIDY0ZTk3NzggQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDMwIDExOjA5OjMwIDIwMTEgLTA3MDAKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYjVkMmE0M2Y5N2E1OTg1OGM5NDRlYmEyMjkwYjU5YjkzYzIzMGE2YSBNZXJnZTogODZlZmVlMgorCisgY2Y0Y2Y3ZiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMzAgMTE6MDk6MjkgMjAxMSAtMDcwMAorCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS02LXBhdGNoZXMnIGludG8KKworIFY1LTYtcGF0Y2hlcworCisyMDExLTA4LTMwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF1dG8tZGV0ZXJtaW5lIHBhdGNoIGFyZ3VtZW50cyBpZgorCisgcG9zc2libGUgZm9yIG5zcGF0Y2h0cnkKKworMjAxMS0wOC0zMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtYWtlIGl0IHNvIHRoZSBnaXQgY29tbWl0IGxpbmUgY2FuCisKKyBiZSBjdXQvcGFzdGUgd2l0aG91dCBsaW5lYnJlYWtzCisKKzIwMTEtMDgtMzAgIFJvbmFsZCBXYWhsIDxyd2EtY29AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM5NDU4NjogZnJvbQorCisgcndhLWNvOiBmaWxlIGRlc2NyaXB0b3IgbGVhayBpbiByZWFkX2NvbmZpZyAoK2ZpeCkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMzAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBkZXNjcmliZSB0aGF0IG5zcm9sbHVwIG5lZWRzIHRvIGJlIHJ1biBub3cuCisKKworMjAxMS0wOC0zMCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IDJiOTJhMGExZTNhMDYxOGM1MTVlYmQ5MDIyNzFiOTVjMDg5MzFhZmEgTWVyZ2U6IGEwODYzNDcKKworIDg2ZWZlZTIgQXV0aG9yOiBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+IERhdGU6ICAgVHVlCisgQXVnIDMwIDExOjI4OjE0IDIwMTEgKzAxMDAKKworMjAxMS0wOC0zMCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYzogQXBwYXJlbnRseSBJUklYIGhhcyBhCisKKyBkaWZmZXJlbnQgQVBJIGZvciBzdGF0ZnMKKworMjAxMS0wOC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOiBkb24ndCBwcm92aWRlIGEgZmVhdHVyZSB3aGVuIHlvdXIgYQorCisgY2hpbGQgb2YgYW5vdGhlciBmZWF0dXJlCisKKzIwMTEtMDgtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTctcGF0Y2hlcycgaW50bworCisgVjUtNy1wYXRjaGVzCisKKzIwMTEtMDgtMjggIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQGx5c2F0b3IubGl1LnNlPgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW46IFVzZSB0aGUgZmVhdHVyZSB0YXJnZXQgaW5zdGVhZCBvZiB0aGUgdGFyZ2V0CisKKyB3aGVuIGJ1aWxkaW5nIHRoZSBmZWF0dXJlIHNldAorCisyMDExLTA4LTI5ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmg6IHRoZSBpcml4NiBidWlsZCBvbmx5IGRlZmluZXMKKworIGlyaXg2LCBub3QgaXJpeAorCisyMDExLTA4LTI5ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogcmUtYWRkIHNvY2thZGRyX3VuLnN1bl9wYXRoCisKKyBjb25maWd1cmUgY2hlY2sgKGxvc3QgaW4gcHJldmlvdXMgY29tbWl0KQorCisyMDExLTA4LTI4ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmg6IAorCisgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jIGRvZXNuJ3QgYnVpbGQgb24gSVJJWCB5ZXQKKworMjAxMS0wOC0yOCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYTA4NjM0NzlkODA5NjJjNjUyOTQ3ZGZkZWUxMWJkZDEzNmMwZTAxMyBNZXJnZTogNTI1MDg5MworCisgZjk1YWEzMSBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFN1biBBdWcgMjggMjM6Mzc6MjcgMjAxMSArMDIwMAorCisyMDExLTA4LTI4ICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZCBmaXgKKworIGZvciBzeXN0ZW1zIGxhY2tpbmcgZmllbGRzIG1zZ19jb250cm9sL21zZ19mbGFncyBpbiBzdHJ1Y3QgbXNnaGRyCisgKGJhY2twb3J0KQorCisyMDExLTA4LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmM6IGFkZGVkIHJlcXVpcmVkIGZlYXR1cmVzIGZvcgorCisgbWZkIGhhbmRsaW5nCisKKzIwMTEtMDgtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIC5naXRpZ25vcmU6IGFkZGVkIC5mdCBhbmQgLmZ0LjEgZm9yIGZlYXR1cmUgZmlsZXMKKworCisyMDExLTA4LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOiBub193cml0ZV9zdXBwb3J0IHN1cHBvcnRlZAorCisKKzIwMTEtMDgtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYzogaGFuZGxlIG5vLXdyaXRlLXN1cHBvcnQgd2l0aAorCisgaWZkZWZzCisKKzIwMTEtMDgtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDUyNTA4OTMyN2FiYTdkMDFkNjMzYzYzNGM2YjZmMDZkZTQyYWNiYjggTWVyZ2U6IDFiYjIzNGEKKworIDA0ZmQ3MWEgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDI1IDA2OjU3OjIxIDIwMTEgLTA3MDAKKworMjAxMS0wOC0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZWE4YmVkNzllODFjNDJlMzNjYmYzN2NhNmYzYzAzYzU0OTk4N2IyMiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgQXVnIDI1CisgMDY6NTY6MjIgMjAxMSAtMDcwMAorCisyMDExLTA4LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnQucHk6IHVzZSA+PiB0byBwcmludCB0byBzdGRlcnIKKworCisyMDExLTA4LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZTogQ0hBTkdFUzogYnVpbGQ6IERvIG5vdCBnZW5lcmF0ZQorCisgYW4gb3V0cHV0IGZpbGUgb24gZmFpbHVyZSBtYWtlIHN1cHBvc2VzIHRoYXQgbm8gb3V0cHV0IGlzIGdlbmVyYXRlZCBpZiB0aGUgY29tbWFuZCBmYWlsZWQuCisgQ2hhbmdlIGZlYXR1cmUtcmVtb3ZlIHRvIGZvbGxvdyB0aGF0IHByZXN1bXB0aW9uLgorCisyMDExLTA4LTIxICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLXJlbW92ZTogQ29ycmVjdCB0eXBvCisKKworMjAxMS0wOC0yMyAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMWJiMjM0YTZjYzM2ZTZhNGVmYmUzZmIyOWM0ODAyMTBkYzJiOWMxMyBNZXJnZTogMzVhOThjMworCisgMWYwODJhMyBBdXRob3I6IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgMjMgMjM6Mzg6MDcgMjAxMSArMDIwMAorCisyMDExLTA4LTIzICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczogbWFrZSBzdXJlIHRoYXQKKworIF9LRVJORUwgaXMgZGVmaW5lZCB0byAxIHNvIHRoYXQgIiNpZiBfS0VSTkVMIiB3b3JrcyBvbiBzeXN0ZW1zIHRoYXQKKyBuZWVkIGl0IChlLmcuIElSSVgpCisKKzIwMTEtMDgtMjMgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDM1YTk4YzNkN2M1YTNjNWRmMzU2YWRkOWU4YjgwODI4Nzg5OWI2OWEgTWVyZ2U6IDFmMzdmNTcKKworIGEyN2Y3NDQgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUdWUgQXVnIDIzIDIzOjMwOjI3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0yMyAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjZiYjI0NzBjMTA2ZjgzNDQ0MmEyYWRiYzc2MTFiZjE2NjU3ZmJkZiBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgQXVnIDIzIDIzOjIyOjQ0CisgMjAxMSArMDIwMAorCisyMDExLTA4LTIyICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGF1dG9yZWNvbmYKKworCisyMDExLTA4LTIyICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQgZml4CisKKyBmb3Igc3lzdGVtcyBsYWNraW5nIGZpZWxkIG1zZ19mbGFncyBpbiBzdHJ1Y3QgbXNnaGRyIChlLmcuIElSSVgpCisKKzIwMTEtMDgtMjEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogYXV0b3JlY29uZgorCisKKzIwMTEtMDgtMjEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogYXV0b3JlY29uZgorCisKKzIwMTEtMDgtMjEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogYXV0b3JlY29uZgorCisKKzIwMTEtMDgtMjEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGI2MmNiMDg2NGY1NzdiYTg1NTczZDBkMjUwZDEyYTM5Mzg3YzA3YjQgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU3VuIEF1ZyAyMSAwMDo1NTozMworIDIwMTEgKzAyMDAKKworMjAxMS0wOC0yMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNzFiOTBiNmYyMTc5NDRiNGZmYzE4MzZlNTE2MGQ0MGUzM2I0NDIzZCBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTdW4gQXVnIDIxIDAwOjQwOjI4CisgMjAxMSArMDIwMAorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucHJlMSAtPiBWNS43LjEucHJlMgorCisyMDExLTA4LTE4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZQorCisgZGVwZW5kIGZvciA1LjcuMS5wcmUyCisKKzIwMTEtMDgtMTggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy4xLnByZTIKKworCisyMDExLTA4LTE4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAwMzA1MzQ3OTYwNGJjODNlZmJlYTU3OWI0NTYyYjE4MzFjZWExY2I2IE1lcmdlOiBmNzNlNjM2CisKKyBkOTRkZjM5IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyAxOCAxMTo1Nzo0NiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMTggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI4YjU0MDcwNTE0NzUzZThkOGFiYjcxOGIyMjRkNjU3YWI3YThhYjggQXV0aG9yOiBHYXJyZXR0CisKKyBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgQXVnIDE4CisgMTE6NDk6NTYgMjAxMSAtMDcwMAorCisyMDExLTA4LTE4ICBWbGFkaW1pciBLb25kcmF0aWV2IDx3dWxmMjAwMUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOiBDSEFOR0VTOiBhZ2VudDogUEFUQ0ggMzM4OTIyODoKKworIGZyb20gd3VsZjIwMDE6IGluY29tcGxldGUgY29tbWl0IChwYXRjaCAzMzg2NjMzOiBmaXggaW50ZWdlcgorIG92ZXJmbG93KSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0xOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZjogUGF0Y2ggZnJvbSBDbGF1cyBLbGVpbiBvbiAtY29kZXJzIGZvciBmaXhpbmcKKworIG1hbiBwYWdlIHR5cG9zCisKKzIwMTEtMDgtMTggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogY2hhbmdlZCBjbGllbnRhZGRyIHNvIGl0IHJlZ2lzdGVycyBhcyBwcmUtbWliCisKKyB0byBiZSBwaWNrZWQgdXAgYmVmb3JlIHRoZSB0cmFuc3BvcnRzIGdldCBjcmVhdGVkCisKKzIwMTEtMDgtMTcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGMwMjEzMWU1YjM1ZDI5Njc1NWJhZWM5OWJkMzYzMjA1YTg2MzA3ZGQgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEF1ZyAxNworIDA5OjM0OjAwIDIwMTEgLTA3MDAKKworMjAxMS0wOC0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogRml4IHRoZSBsb2cgbWVzc2FnZSB0aGF0IHJlcG9ydHMgdGhhdAorCisgZ2V0aG9zdGJ5YWRkcigpIGlzIG1pc3NpbmcKKworMjAxMS0wOC0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMTgyZTFkYzBjM2VhY2ZhNGU5Y2NkYjI4NjAwZmYwZjIzNzAyMTFhZSBNZXJnZTogNDk5Yjc5NgorCisgNTE3YjZiMCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcKKyAxNyAxODowOTozMCAyMDExICswMjAwCisKKzIwMTEtMDgtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDY1ODA1NTZjYzdiZDgzM2FmNzMxYjYyY2UxZWQyMDE3NTY0ZmU3ZWIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZyAxNyAxODowODowMSAyMDExICswMjAwCisKKzIwMTEtMDgtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDQ5OWI3OTZjYmQ3ODA2NWMzMzU0Nzc5MTM2YmQzZDlkMWY1NDhhNTggTWVyZ2U6IDA0MThmZjAKKworIGE5Y2IyNjcgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gQXVnCisgMTQgMDg6MDI6MzggMjAxMSArMDIwMAorCisyMDExLTA4LTE0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAzY2IzZjFlZGUzODhkODRlMzkyZTFkODE1ZDU5OTRhNGJmMGYxMGY5IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBBdWcgMTQgMDc6NTk6MjUgMjAxMSArMDIwMAorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBwZXJsL09JRC9PSUQueHMsIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOiBXaW5kb3dzOgorCisgTWFrZSB0aGUgUGVybCBhZ2VudCBtb2R1bGUgd29yayBhZ2FpbiB3aXRoIHRoZSBvcmlnaW5hbCBTTk1QX0ZSRUUoKQorIGRlZmluaXRpb24uCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDA0MThmZjBjZGEyMTQxMWE0N2ZhODk3OGMzZTBkMDQzYTE5ZDI0YjYgTWVyZ2U6IDI2YjBhYTMKKworIDNjNzNiNDggQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgQXVnCisgMTMgMTg6NDI6MDUgMjAxMSArMDIwMAorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDogUmV2ZXJ0IHRoZSB0d28gbW9zdCByZWNlbnQKKworIFNOTVBfRlJFRSgpIGNoYW5nZXMgKGNvbW1pdHMKKyA0N2M4ZWYxYjg5YzZjY2I0MjQ3ZDk2MzM0Nzc5MjU5MDhjNjhjMWE1IGFuZAorIDdmNDJkMGQ5MzMyMDQ4NDE1MjI3MTQyN2NjOTgwOGNiZGE0OWJiZDApLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyNmIwYWEzMDEwZmExODJiNjAzOWE4YzJjYWQ4Y2NiNDU3MTY1MmRlIE1lcmdlOiAyZjNkNjA3CisKKyAwYzhlMWE5IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEF1ZworIDEzIDExOjQzOjIwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgM2U1MGMzZTAwZTlmMzIxZmI3MDhiYzU3OWViNGRjMWEwZjFlN2M0ZCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTYXQgQXVnIDEzIDExOjMxOjQwIDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMmYzZDYwNzlkYzM2YWFkOTU1OWQ5MWM1YzMyNGUyY2U1MzU1NzNkZCBNZXJnZTogZTMyYWE5NworCisgZmYxNzM0ZCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFNhdCBBdWcKKyAxMyAwOTowODowNiAyMDExICswMjAwCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGUxNDdlNGI5Njc1NTIwN2RlMWNlMzA5OTBkNjdiNGI3Yzc2ZGQ0ODMgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEF1ZyAxMyAwODozOToxNCAyMDExICswMjAwCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHdpbjMyL2J1aWxkLnBsOiBDSEFOR0VTOiBXaW5kb3dzOiBidWlsZGluZyAoYnVpbGQuYmF0KTogSW5zdGFsbAorCisgbmV0c25tcC5kbGwgYmVmb3JlIHJ1bm5pbmcgdGhlIFBlcmwgcmVncmVzc2lvbiB0ZXN0cyBzdWNoIHRoYXQgdGhlCisgcmVncmVzc2lvbiB0ZXN0cyBhcmUgcnVuIHdpdGggdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiBuZXRzbm1wLmRsbC4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogd2luMzIvTWFrZWZpbGUuaW46IENIQU5HRVM6IFdpbmRvd3M6IHBlcmwgKGJ1aWxkLmJhdCk6IFdoZW4KKworIGluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMsIGluc3RhbGwgdGhlIFBEQiBmaWxlcyB0b28uCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBwZXJsL1NOTVAvdC9hc3luYy50LCBwZXJsL1NOTVAvdC9jb25mLnQsIHBlcmwvU05NUC90L21pYi50LCAKKyAgICAgIHBlcmwvYWdlbnQvdGVzdC5wbDogQ0hBTkdFUzogdGVzdGluZzogRml4IFBlcmwgcmVncmVzc2lvbiB0ZXN0CisKKyBmYWlsdXJlcyBBbGwgUGVybCByZWdyZXNzaW9uIHRlc3RzIHBhc3Mgbm93IG9uIExpbnV4IGFuZCBvbiBXaW5kb3dzIChNU1ZDKS4KKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogcGVybC9TTk1QL3QvYXN5bmMudCwgcGVybC9TTk1QL3QvYnVsa3dhbGsudDogQ0hBTkdFUzogdGVzdGluZzoKKworIFBlcmwgcmVncmVzc2lvbiB0ZXN0czogRG9uJ3QgZmFpbCBza2lwcGVkIHRlc3RzLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6IENIQU5HRVM6IHBlcmw6IEFkZAorCisgU05NUDo6Z2V0ZW52KCkgYW5kIFNOTVA6OnNldGVudigpLgorCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQWRkIG5ldHNubXBfc2V0ZW52KCkuCisKKzIwMTEtMDgtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3Q6IGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3Q6IGRvY3VtZW50IGhvdyB0bworCisgdXNlIG9uIFdpbmRvd3MKKworMjAxMS0wOC0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogbG9jYWwvcGFzc19wZXJzaXN0dGVzdDogU2V0IGV4ZWN1dGUgZmxhZyBvbiBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0CisKKyBzdWNoIHRoYXQgdGhlIGluc3RydWN0aW9ucyBpbiB0aGF0IGZpbGUgd29yaworCisyMDExLTA4LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBGaXggYSBzdXBwcmVzc2lvbiBwYXR0ZXJuCisKKworMjAxMS0wOC0xMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZTMyYWE5Nzc0MjIzMmNlZDNhNzJmOGI4NDVhY2U1Y2UzZDUzYjhkZiBNZXJnZTogNGFkZmVjOAorCisgODZmYmQzMyBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIEZyaSBBdWcgMTIgMDk6MTE6MTQgMjAxMSAtMDcwMAorCisyMDExLTA4LTEyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBhNzNlYjQwZWMyNjNhMGZkZjUzYTc0ZTcyMGRkZjQxYzRhN2VlM2Q0IE1lcmdlOiA3NjkwODk0CisKKyAyOTQwZWUzIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgRnJpIEF1ZyAxMiAwOToxMToxMyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMTIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDFmMGE5MjhhMjkxM2NmYTdmNWNlYWFmNDY5NmM2OWZiZGM2ODc2MjEgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgRnJpIEF1ZyAxMgorIDA5OjA5OjExIDIwMTEgLTA3MDAKKworMjAxMS0wOC0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNGFkZmVjODEyMTZmNmM1YmYyNWM5YWM2YjJiNzQ3OGQxYmU4ZTg0MiBNZXJnZTogMjgxYjg2OQorCisgMjk0MGVlMyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyAxMSAxODo1NzoyOSAyMDExICswMjAwCisKKzIwMTEtMDgtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDFlMTAwMGE4ODE1OTIxYjVlYzJlNzk5N2I1MzU5MmE1NDRiM2RmYzIgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZyAxMSAxNTo0NjozMiAyMDExICswMjAwCisKKzIwMTEtMDgtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDI4MWI4Njk2MWIxMDI2NmRkZjM4ODM5NDJkNGRjM2I2Yjk4ZDMyMjcgTWVyZ2U6IGQ4ZDIyNWMKKworIGYxODEwOTkgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgMTEgMTg6NDY6MDYgMjAxMSArMDIwMAorCisyMDExLTA4LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IE1lcmdlIFY1LTQtcGF0Y2hlcy4KKworCisyMDExLTA4LTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmM6IGRvbid0IGFzc2VydCBvbiBhIGRvdWJsZQorCisgaW5pdDsganVzdCBkb24ndCBkbyBpdCB0d2ljZQorCisyMDExLTA4LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkOGQyMjVjYTM0YThmMjI3NTIxNTNhY2I3OTQ0Zjk0MzVmNTY0ZDJjIE1lcmdlOiAwNmI0MTg2CisKKyA0N2M4ZWYxIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgV2VkIEF1ZworIDEwIDE4OjA1OjIxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6IFNOTVBfRlJFRSgpOiBjYXN0IGFyZ3VtZW50IHRvCisKKyAodm9pZCAqKSBiZWZvcmUgcGFzc2luZyBpdCB0byBuZXRzbm1wX2ZyZWUoKQorCisyMDExLTA4LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAwNmI0MTg2NWVjMzAyYzM5MzFiMTA4M2QzZmRlODlmOTM0NWVjMDZmIE1lcmdlOiAxMTQyNmZiCisKKyBhNGY2YWM3IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyA5IDA2OjQ0OjQxIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMTE0MjZmYjNjNmYzMjc4MjBiOWJiODZhNzZlY2M5ZTJjMzdlNzkzNCBNZXJnZTogMDM0NGRmOQorCisgOWJmMDY4MSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBBdWcgOSAwNjo0NDoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTQtcGF0Y2hlcycgaW50bworCisgVjUtNC1wYXRjaGVzCisKKzIwMTEtMDgtMDkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDliZjA2ODEyMThlZGY0M2NkYjVmYzY4ZjE3MjEyM2JjNGEyZDAxODggTWVyZ2U6IGY5ZGI2MTEKKworIGNjYjBlYjYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgQXVnCisgOSAwODoxOTozMyAyMDExICswMjAwCisKKzIwMTEtMDgtMDkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGRlN2UzNDhlY2UwM2QyMzgwYzJhODgwNmViYmFkNWQ5YjU0ODc2ODIgTWVyZ2U6IGQ1MzhiY2IKKworIGNjYjBlYjYgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUdWUgQXVnCisgOSAwODowNzoyMiAyMDExICswMjAwCisKKzIwMTEtMDgtMDkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDAyMjAzOTJkODk5YTljYWI3MDFmNzRhZjEyMDMwYmIxZDRjYzVlMmUgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bCAxIDEzOjAyOjE1IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUywgTkVXUzogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnByZTEKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcuMS5wcmUxCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogZml4IEMrKyBjb21tZW50cworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IGZpeCBDKysgY29tbWVudHMKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBmaXggQysrIGNvbW1lbnRzCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogZml4IEMrKyBjb21tZW50cworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sCisgICAgICAgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6CisKKyA1LjcuMS5wcmUxCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLnRvcDogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnByZTEKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjZjRjY2U0YzE4OWNmNDdmNGM0ODlkYjQzYjdmYTUxMGY4OTA2YTFhIE1lcmdlOiBkZjkxYTlmCisKKyA5M2U5N2RjIEF1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIE1vbgorIEF1ZyA4IDIyOjE1OjI4IDIwMTEgKzAxMDAKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTYtcGF0Y2hlcycgaW50bworCisgVjUtNi1wYXRjaGVzCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA4ICBEYXZlIFNoaWVsZCA8RC5ULlNoaWVsZEBsaXZlcnBvb2wuYWMudWs+CisKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgCisgICAgICB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOiBEZWZpbmUKKworIF9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04gdG9rZW4gKGFzIHBlciBBbGV4JyBidWlsZAorIGluc3RydWN0aW9ucykKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqICB3aW4zMi9NYWtlZmlsZS1hcHBzLmluLCB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46IERlZmluZQorCisgX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiB0b2tlbiAoYXMgcGVyIEFsZXgnIGJ1aWxkCisgaW5zdHJ1Y3Rpb25zKQorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkZjE2ZGMyMjIxZTk5M2RkM2M2NjY1MGQ1ZTg3MjU3N2ZmZTZjMDFiIE1lcmdlOiA3MTRiYzgyCisKKyA4ZTVhMjhkIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEzOjU2OjQzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZmZhMDViMDUxYWMzZTJiMTk3MTk1YTk5ODljYzdhOTFmZThkOTI4MiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gQXVnIDggMTM6NTU6MzgKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCA3MTRiYzgyZmEwMWUyMWEzNjU1ODI0OTYzZmE1NGU5YjgwNDJmZmIwIE1lcmdlOiA2ZmU4ZmU1CisKKyAzZWYxZGI1IEF1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIE1vbgorIEF1ZyA4IDIxOjIxOjQ2IDIwMTEgKzAxMDAKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IGI0NTE2MDdkY2EwMTVjMTExZTk2ZmRmZWIyZGRiMDY2MWZiNGY3MjQgQXV0aG9yOiBEYXZlCisKKyBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIE1vbiBBdWcgOCAyMToyMDozMiAyMDExCisgKzAxMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNmZlOGZlNTI5NGE0NWJjN2U0ZWEzNzUxYTFhZDdhYTQ3YjVjYWJiMiBNZXJnZTogMzY0ZjhmZgorCisgZjY5YWJlMyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDIyOjAyOjM4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYzk0ODEzMDQ0YTRjNGE2MDhlOThlODAyMjMwNzVjNmZhZjA0ZWUxMSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDggMjE6NTY6MTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAzNjRmOGZmYWViOTBiNGViMDE2NWZjODU1Njg4Y2QwNjI2NjMyNzk0IE1lcmdlOiAzMjg3Mjk1CisKKyA3YWJiOTI2IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDExOjI0OjI2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNi1wYXRjaGVzJyBpbnRvCisKKyBWNS02LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBkaXNwbGF5IHRoZSBicmFuY2ggd2UnbGwgY29tbWl0IHRvCisKKworMjAxMS0wOC0wOCAgVmxhZGltaXIgS29uZHJhdGlldiA8d3VsZjIwMDFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMzODY2MzM6CisKKyBmcm9tIHd1bGYyMDAxOiBmaXggaW50ZWdlciBvdmVyZmxvdyBpbiBkaXNrIHBlcmNlbnQgY2FsY3VsYXRpb25zIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4NGE3NzVkMDU1N2ZlYTk3NTcwZTQxNzE1YTMxNjQ5NzBiNGMwM2EyIE1lcmdlOiA2ZmZmMWMxCisKKyBkMzczYzRmIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMjA6MTI6MzIgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM4NzEzOTogZnJvbQorCisgeWFiZXJhdW5leWE6IEF2b2lkIHNlZ2ZhdWx0IGlmIHRyYXBzZXNzIHRyYW5zcG9ydCBlbGVtZW50IGNhbnQgYmUKKyBwYXJzZWQgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbnNzZnBhdGNoYXBwbHk6IHNwbGl0IHRoZQorCisgZGlzcGxheWVkIGdpdCBjb21taXQgY29tbWFuZCBpbnRvIG11bHRpcGxlIHNlZ21lbnRzCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMzg2OTYxOgorCisgTWFrZSBTTk1QIEdFVCB3b3JrIGluIGFuIEFnZW50WCBzdWJhZ2VudCBpZiB3cml0ZSBzdXBwb3J0IGlzCisgZGlzYWJsZWQgdmlhIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAoTWFyayBSdXNrKS4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogRml4IGEgY3Jhc2ggdGhhdCBjb3VsZCBiZQorCisgdHJpZ2dlcmVkIGJ5IGNhbGxpbmcgX21pYmluZGV4X2FkZCgpIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCBub3QKKyBlcXVhbCB0byAtMS4KKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNmZmZjFjMWFlNTFiMDZjOWQ4MGZhZjE1MzczYTk2M2QxNzNmMTRlOCBNZXJnZTogODM3YzUyZQorCisgOGNjOTAwNCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMDo1ODo1OSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDhjYTdmZjFlNjkyY2FlYzQxODZiNzg4YzlhZTJkMjdiZTIxMzI5MGYgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEF1ZyA4IDEwOjMzOjU2CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiOGY1MjljYmEyN2MwMTE0YjRjYjczNDBjZmQ0NDk1MDRmYTA3NTA2IE1lcmdlOiAwODIyZjJkCisKKyA1NTZlOTM4IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEwOjA1OjM2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBmaXggZnVuY3Rpb24gbmFtZSB0eXBvCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjk4ODJhMDc4YTk1OWEwZjc4YjAzZTAxOTY4ZjFkMTdiN2Y2YTI5OSBNZXJnZTogNWU5YmQyZgorCisgMDQwOWMwYSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMDowMzozNCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlIG9mIHB1bGwvcHVzaAorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbWFrZSBuc3B1bGwvbnNwdXNoIGNoZWNrIGZvciBhCisKKyBjbGVhbiByZXBvCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbmV3IGZ1bmN0aW9uICJuc21ha2VhbGwiIHRvIHRlc3QKKworIGJ1aWxkaW5nIG9uIGV2ZXJ5IGJyYW5jaAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGRlZmF1bHQgdG8gbWVyZ2UKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS03LXBhdGNoZXMnIGludG8KKworIFY1LTctcGF0Y2hlcworCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDogQ0hBTkdFUzogV2luZG93czogQXZvaWQgdGhhdCBpZgorCisgdGhlIE5ldC1TTk1QIFBlcmwgbW9kdWxlcyBoYXZlIGJlZW4gYnVpbHQgd2l0aCBhbm90aGVyIHZlcnNpb24gb2YKKyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyB0aGFuIEFjdGl2ZVBlcmwgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2UgUGVybAorIG1vZHVsZXMgdHJpZ2dlcnMgYSAiRnJlZSB0byB3cm9uZyBwb29sIiBjcmFzaC4gVGhpcyByZWdyZXNzaW9uIHdhcworIGNhdXNlZCBieSBjb21taXQgM2IxNGM1OWNmODI3OGQ0MTAyMDdmZjQyZGViZGEyNjM2NDI2YTQ2OCAodGhlCisgbmV0c25tcF9mcmVlKCkgaW50byBTTk1QX0ZSRUUoKSBjaGFuZ2VzIGluIHRoZSAqLnhzIGZpbGVzKS4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZTEwOTUzOTkzMDcwM2NiMzA1MmQ1MjQxYjE4YWM2ZmMwNjJmYWFjYSBNZXJnZTogMGM5YjZjYgorCisgZTQ2YjE3MCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDE4OjM0OjExIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogRml4IGEgY3Jhc2ggdGhhdCBjb3VsZCBiZQorCisgdHJpZ2dlcmVkIGJ5IGNhbGxpbmcgX21pYmluZGV4X2FkZCgpIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCBub3QKKyBlcXVhbCB0byAtMS4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgN2Y0MmQwZDkzMzIwNDg0MTUyMjcxNDI3Y2M5ODA4Y2JkYTQ5YmJkMCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDggMDk6NTA6NTEgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwYzliNmNiZTlkYmUyZWM1MjE3YTk1YjY3ODFmZDdkYzFmNmViZGE3IE1lcmdlOiBmYTZjZWY1CisKKyA5NjMzMjBmIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMTg6MTQ6MzYgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhM2I4NjU0YTIzMmM1NjNiYzk3Y2M5OTI1Y2Q5ODU5MGEzMGM1YmM1IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgOCAxNzoyNDoxOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGZhNmNlZjVjYTkxZGYzYTBiMDM0NTViNjg1NTlkMmJlZTI0ODEwMWMgTWVyZ2U6IGY1ZmU1MzYKKworIDhhZGQwZGEgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gQXVnCisgNyAxMDoxODo1NCAyMDExICswMjAwCisKKzIwMTEtMDgtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGEwZGQzY2FmMjU5MjZlNDM0NjU3MThiZjQxN2E0NjRjMmZiMzYzNjYgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEF1ZyA3IDEwOjE3OjAxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogMzIgaXMgdG9vIGxpbWl0ZWQgZm9yCisKKyBiaWdnZXIgdGFibGVzOyBpbmNyZWFzZSB0aGUgbWF4IG1zZyBjb3VudCB0byAxMjgKKworMjAxMS0wOC0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtYWtlIHJvbGx1cCBhbmQgc3luYyBzdXBwb3J0CisKKyAtLXJlYmFzZSBhbmQgY2hhbmdlIHRoZSBkZWZhdWx0IGJhY2sgdG8gbWVyZ2UKKworMjAxMS0wOC0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogUkVBRE1FLndpbjMyOiBDSEFOR0VTOiBXaW4zMjogRG9jdW1lbnRlZCBob3cgdG8gdXNlIGJ1aWxkLmJhdCB3aXRoCisKKyBPcGVuU1NMIGVuYWJsZWQKKworMjAxMS0wNy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogUkVBRE1FLndpbjMyOiBDSEFOR0VTOiBXaW5kb3dzOiBSZW1vdmUgb3V0ZGF0ZWQgaW5zdHJ1Y3Rpb25zIGFib3V0CisKKyBlZGl0aW5nIHdpbjMyXGxpYnNubXBfZGxsXGxpYnNubXAuZGVmIGZyb20gUkVBRE1FLndpbjMyCisKKzIwMTEtMDctMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIFJFQURNRS53aW4zMjogQ0hBTkdFUzogV2luMzI6IERvY3VtZW50IGhvdyB0byBidWlsZCA2NC1iaXQKKworIGV4ZWN1dGFibGVzIGZvciB0aGUgeDY0L2FtZDY0IGFyY2hpdGVjdHVyZQorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBmNWZlNTM2ZThmZDZjNDhmZTI0M2RlY2QzMWZhYzljZjFjOTJmNGNjIE1lcmdlOiA3ODUwZWExCisKKyA4MDkyOGE4IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTU6MTM6MjcgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4MDkyOGE4OTA5Y2ZhYjM3ZjAxYjM5YTA3MWEzZThhZDg1OTU2MjIyIE1lcmdlOiBmMTZhMDk0CisKKyAwZGJjODY5IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTM6NTc6MzAgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwZGJjODY5ZmVjMDdkOGU5MGRiZDFjOTU0OTNlZTdjYmM2MjNjOTVjIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcgNSAxMjo0MDozMSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZAorCisgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUuZGVmIGFuZCBwZXJsL1NOTVAvdAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4NmMxZTJiOTY3OWZlYzJjZDc5OWJhNzYwMDVjM2Q2MGU5ZDQ3NjM0IE1lcmdlOiBiY2Q4NjM1CisKKyBmMTZhMDk0IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTI6MjA6NTAgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyZjhkNGY1Nzk2Y2JjMWM3ZTk2N2FjZGFhODAxOWIyNGYxNTIwYTM2IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcgNSAxMjowMjo1MSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogVW5icmVhayB0aGUgVjUtNC1wYXRjaGVzIC0gcmV2ZXJ0IGNvbW1pdAorCisgZDJjNDc2OGJkMmVmYjQ4NjY0NDM0YTgzMTQyNWMyZGRhODVkNzEzMyAoQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0gKKyAzMzYyMjMzOiBmcm9tIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZQorIG5vaXNlKS4KKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaDogCisKKyBVbmJyZWFrIHRoZSBWNS00LXBhdGNoZXMgYnJhbmNoIC0gd2FzIGJyb2tlbiBieSBjb21taXQKKyBiZjcxNzhiMGIyMjU4N2Q0M2QxYTgwYzI2OWNkMjE2YmQ1OTMwMjE0IChhZ2VudDogY2hhbmdlIHR5cGUgb2YKKyBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIHRvIGxvbmcpCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg6IFVuYnJlYWsgdGhlIFY1LTQtcGF0Y2hlcworCisgYnJhbmNoIC0gd2FzIGJyb2tlbiBieSBjb21taXQKKyAwZTY4NDJmZTA4MGNlYzg1M2IwOGNkMjMyMzAxNWFiYWJjMzgxY2UxIChDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENICisgMzM4MzQ0MTogZnJvbSBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mCisgZnJlZWQgbWVtb3J5KS4KKworMjAxMS0wOC0wNSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogbWlub3IgTkVXUyBwb2xpc2gKKworCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBiY2Q4NjM1MDcxMzgyMjk2M2QzNzZlZmY1ODJhOTJmNDNlNDI2ZDZjIE1lcmdlOiA5YzgxMGEzCisKKyA3YTIwZjcxIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTA6Mjg6NTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAzYWE5NDlmYmRmYzFhOTRhODM0MGFkOGJhZjhiMzE0NzU2YTBiYjlkIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcgNSAxMDoyNjoxNSAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDljODEwYTNiMzdiNjg1NzNjNDAzMzdlMjQ2ZTJmYWYyOTliNzdkMzEgTWVyZ2U6IDcxY2IyZTgKKworIDYxMGQ2M2YgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMTA6NDI6MDggMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA5NDM5MzBlMWUxMjQzODVmZDk0NzM4YjZkY2RhMzdkMjlkYzdhYzdmIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBBdWcgNCAxMDo0MTo0MQorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNGVkY2I4OGRhZThiMmU1OWRjNjgzZTgwZDQxNGZhN2VjZWMzNjg4NSBNZXJnZTogNjVmM2VlZgorCisgMmRkOWVkMCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAxMDoyNDoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTUtcGF0Y2hlcycgaW50bworCisgVjUtNS1wYXRjaGVzCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGJjNWNhMDNhMDRhYjE5YzYzNGEzNGQwNjBiMGIxNmI3NDg0Y2I1MjAgTWVyZ2U6IDg4ZmRkYjcKKworIDkwYzBlNzUgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAxOToxMzowNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdXNtLmM6IHNubXB1c206IEZpeCByZWNlbnRseQorCisgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncworCisyMDExLTA4LTA0ICBTdHVhcnQgSGVuZGVyc29uIDx0MGp3MmZ1MGttZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9uZXRic2QuYzogQ0hBTkdFUzogb3BlbmJzZDoKKworIFBBVENIIDMzNTc5MzI6IGZyb20gdDBqdzJmdTBrbWc6IENsZWFuaW5nIGluIG1lbW9yeV9uZXRic2QuYyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgVmxhZGltaXIgS29uZHJhdGlldiA8d3VsZjIwMDFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmM6IENIQU5HRVM6IGFnZW50OgorCisgUEFUQ0ggMzM4NjE0NzogZnJvbSB3dWxmMjAwMTogZml4IFVDRC1TTk1QLU1JQjo6ZHNrVXNlZCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDczZDdlNWNkNGQ0MTFiYmEyMGViODUzNTlkODcyODA2MzMwMWNiZCBNZXJnZTogYTRlOGI2MgorCisgODhmZGRiNyBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwOToyODoyMiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDIxMDFiYjJkN2FkNmRiMDM4Yzc1NWFhOTE5M2M4YWNlMGRiZDRmNTggQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEF1ZyA0IDA5OjI4OjA2CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAuZ2l0aWdub3JlOiBpZ25vcmUgKi5vcmlnIGFuZCAqLnJlagorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogaGVscCBvdXRwdXQgZGVzY3JpYmVzIHJlYmFzZSB2cworCisgbWVyZ2UgYmV0dGVyCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGYxMjZhMTdjNmEzMDYzNDU1YTUxMTk0MGIwMjMwNDdhYmQ5YjQ4ZWUgTWVyZ2U6IGFkNzY1ZjQKKworIDc3YTQ3ODQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDk6MjU6MTYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0NTJlMTcwN2YyMDllYzQ1ZTdjN2YyYTMwNDBlZjU5NWZiOWQxYWY2IE1lcmdlOiBkYzc1NWE2CisKKyBiMzcyZTVhIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA5OjI1OjAzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgU3R1YXJ0IEhlbmRlcnNvbiA8dDBqdzJmdTBrbWdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5pbiwgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2Q0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZDUuaDogQ0hBTkdFUzogb3BlbmJzZDogUEFUQ0gKKyAgICAgIDMzNTc5Mjc6CisKKyBmcm9tIHQwancyZnUwa21nOiBSZWNvZ25pc2Ugb3BlbmJzZDUgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZml4IHdoZXJlIGFyZ3VtZW50cyBhcmUgc2V0CisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBzcGxpdCBuc3NmcGF0Y2hhcHBseSBpbnRvIHR3bworCisgcGFydHM6IGFwcGx5IGFuZCBjb21taXRpbmcKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBwYXRjaCB1c2luZyAtTgorCisKKzIwMTEtMDgtMDQgIERhdmlkIEFybm9sZCA8ZGphQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QsIG1hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmLCAKKyAgICAgIG1hbi9maXhwcm9jLjEuZGVmLCBtYW4vbWliMmMuY29uZi41LmluLCBtYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmLAorICAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgCisgICAgICBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsCisgICAgICBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCAgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wY29uZi4xLmRlZiwKKyAgICAgIG1hbi9zbm1wZC44LmRlZiwgIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsIAorICAgICAgbWFuL3NubXBkZWx0YS4xLmRlZiwgbWFuL3NubXBkZi4xLmRlZiwgbWFuL3NubXBnZXQuMS5kZWYsIAorICAgICAgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCBtYW4vc25tcG5ldHN0YXQuMS5kZWYsIG1hbi9zbm1wc2V0LjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wc3RhdHVzLjEuZGVmLCBtYW4vc25tcHRhYmxlLjEuZGVmLCBtYW4vc25tcHRlc3QuMS5kZWYsIAorICAgICAgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgCisgICAgICBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wdXNtLjEuZGVmLCBtYW4vc25tcHZhY20uMS5kZWYsIAorICAgICAgbWFuL3NubXB3YWxrLjEuZGVmOiBDSEFOR0VTOiBtYW46IFBBVENIIDMzMTI4NjE6IGZyb20gZGphOiBNYW4KKyAgICAgIHBhZ2VzCisKKyBoeXBoZW4tdnMtbWludXMgY2xlYW51cCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IERldGVjdCAoYW5kIHJlamVjdCkgT3BlblNTTAorCisgMS4wLjAKKworMjAxMS0wOC0wNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IENvbW1hbmQtbGluZSBvcHRpb25zIGZvciBzaWxlbnQKKworIGluc3RhbGwKKworMjAxMS0wOC0wNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEVuc3VyZSBXaW5kb3dzIHBhY2thZ2UKKworIHVuaW5zdGFsbHMgY29tcGxldGVseS4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgODFjNjNmYjVjNWU0YWJiOWMyOWFjYTg5YmY5ZDY5NDQxMDA4NmU5NyBNZXJnZTogNGE2OTIwYQorCisgZGM3NTVhNiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwODozMzozNCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzogYWRkZWQgc3BhY2luZyB0byBtYXRjaCB0aGUgbGF0ZXIgYnJhbmNoZXMKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZQorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzogcmVtb3ZlZCBhY2NpZGVudGlhbGx5IGR1cGxpY2F0ZWQgY29kZQorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2UKKworCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMwODoKKyAgICAgIGZyb20KKworIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCByZWNlbnQgaGVhZGVyCisgc2h1ZmZsaW5nIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzI4OiBmcm9tIHlhYmVyYXVuZXlhOgorCisgQWRkIEZyZWVCU0QgOS54IHRvIHN1cHBvcnRlZCBPU2VzIGxpc3QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfdmFycy5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzA4OgorICAgICAgZnJvbQorCisgeWFiZXJhdW5leWE6IEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoIHJlY2VudCBoZWFkZXIKKyBzaHVmZmxpbmcgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMjg6IGZyb20geWFiZXJhdW5leWE6CisKKyBBZGQgRnJlZUJTRCA5LnggdG8gc3VwcG9ydGVkIE9TZXMgbGlzdCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF92YXJzLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMDg6CisgICAgICBmcm9tCisKKyB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggcmVjZW50IGhlYWRlcgorIHNodWZmbGluZyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgc25tcGxpYi9rZXl0b29scy5jLAorICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgQ0hBTkdFUzogYnVpbGRpbmc6IFBBVENIIDMzODM5NTE6IGZyb20geWFiZXJhdW5leWE6IEZpeCAtV3VudXNlZAorIGNvbXBpbGUgd2FybmluZ3Mgd2l0aCBGcmVlQlNEL05ldEJTRCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgc25tcGxpYi9rZXl0b29scy5jLAorICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgQ0hBTkdFUzogYnVpbGRpbmc6IFBBVENIIDMzODM5NTE6IGZyb20geWFiZXJhdW5leWE6IEZpeCAtV3VudXNlZAorIGNvbXBpbGUgd2FybmluZ3Mgd2l0aCBGcmVlQlNEL05ldEJTRCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZTg3OGFiYmRiMTgwOGVmODNlMGE4MDc0NTM2ZmI1NGUxMzIxOWE4YiBNZXJnZTogNDAzZGU0MgorCisgODc4ZmJmNCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwNzo1NTowMCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI1MGFmYTA2ODkyZmQ4OTdhYzMxZTM4MzZhN2ZmYzllMmI0Y2Y3YjkgTWVyZ2U6IDJjMTRjMWMKKworIDNhZmM1ZTAgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDc6NTE6MzMgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA1NzhjZDdjY2UzNTFhZThkOTA0ZWMzZDgwYmU5YmE2ZDFkNDhhNzEyIE1lcmdlOiAyNTk4OGJlCisKKyBmM2JjNTUxIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA3OjUwOjU2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhdXRvY29uZgorCisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOiBDSEFOR0VTOiBidWlsZGluZzogUEFUQ0gKKworIDMzODM5NDk6IGZyb20geWFiZXJhdW5leWE6IEZpeCBhdXRvY29uZiB0ZXN0cyBmb3Igc3lzL21idWYuaCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBwcm9tcHQgZm9yIHBhdGNoIGFuZCBhbiBhcmVhLCBhbmQKKworIHVzZSB0aGUgcHJvcGVyIENIQU5HRVMgbGluZSBmb3JtYXQKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBVc2UgZmV0Y2ggLS1hbGwgYW5kIHJlYmFzZSBhcworCisgc3VnZ2VzdGVkIGJ5IEJhcnQgZm9yIHNwZWVkIGltcHJvdmVtZW50cworCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkNmExYTg5ZTZmNjQ4OTUxYTliODMxOTMyZDNjYzIzMDgyMWYyZDM3IE1lcmdlOiBkY2I3MTJmCisKKyA4NzJlMDEzIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMTI6MDY6MTggMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA0NDk2OWI0ZTU3YzI3MTk0ZTViZDM1N2JjNDUyNzVmZWI4Njk1ZDIyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgOCAyMDo1MjoyNSAyMDExICswMjAwCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOiBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBJbnZva2UKKworIFNubXBVdGlsT2lkRnJlZSgpIGJlZm9yZSBTbm1wVXRpbE9pZENweSgpLiBJdCdzIG5vdCBjbGVhciB5ZXQgd2h5CisgdGhlIG9yaWdpbmFsIGNvZGUgZGlkIG5vdCBtYWtlIHNubXB3YWxrIHRyaWdnZXIgYSBtZW1vcnkgbGVhay4KKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZGNiNzEyZmZjODZiMzM1ODMwMDBlZjRhZTlhNTFjZWQyNWNkMTViZiBNZXJnZTogZTg1Y2ZhNQorCisgOTg2MjNlZiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDExOjM2OjE3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgOGEwMWVjNjQyM2Q0MDBjNGExM2NjYWM2OGEzNzkxZDAyMThhMDg4NSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnIDQgMTE6MTk6MTcgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBlODVjZmE1OTliMjNiNzZkOTc5MTNjOTZiNWQ3MDNiZmY2YmE0OTQ0IE1lcmdlOiBiMDU2ZWU2CisKKyBlMjFlZWYyIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMDg6NDQ6NDMgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IENIQU5HRVM6IGFnZW50OgorCisgQXZvaWQgdGhhdCBhIE1JQiB3YWxrIG9uIHRoZSBob3N0IHJlc291cmNlcyBNSUIgdHJpZ2dlcnMgYSBjcmFzaCBvbgorIEZlZG9yYSAxNQorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBiMDU2ZWU2ZWI1MzkwOWFkMDRmMTZlYzI2ZDI2OTBkN2EwODMxOTJhIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcgNCAwNzo1OTowNCAyMDExICswMjAwCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjCisgICAgICAgZXNzLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MKKyAgICAgICAuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgYWdlbnQvc25tcF9hZ2VudC5jLCAKKyAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wdGxzLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmMsIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcF9lbnVtLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvc25tcHVzbS5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWIsIHNubXBkOgorCisgcGVybDogRWxpbWluYXRlIGRlYWQgdmFyaWFibGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGFlOGUzZWNkMmRmNGNmMzc2MjU5NDRhZGVkMWRmZTQ3MzVkNDRlZWEgTWVyZ2U6IDczMTg3Y2UKKworIDkzMzVlMTkgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBXZWQgQXVnIDMgMTQ6Mzc6MzYgMjAxMSAtMDcwMAorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA3OTRmOWE2OWQ3ZWI2NDIyNjgyMDBiMGE0YjE5OTE1MWRlZjY2ZWQwIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBBdWcgMyAxNDozNjoyNQorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvbW1lbnQKKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb21tZW50CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb21tZW50CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIuaDogUmVlbmFibGUgSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZQorICAgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6IFJlZW5hYmxlIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUKKyAgICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wNy0xOCAgSWx5YSBZYW5vayA8eWFub2tAZW1jcmFmdC5jb20+CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jOiBhZ2VudDogY2hhbmdlCisKKyB0eXBlIG9mIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgdG8gbG9uZyBUeXBlIG9mIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgdmFyaWFibGUgaXMgY2hhbmdlZCBmcm9tIGludCB0byBsb25nLgorIFRoaXMgZml4ZXMgdGhlIGJ1ZyB3aXRoIHdyaXRpbmcgdG8gc25tcEVuYWJsZUF1dGhlblRyYXBzIGlmIHNlcnZlcgorIGlzIGNvbXBpbGVkIGZvciA2NGJpdCAoc25tcHNldCByZXBvcnRzIHdyb25nIGxlbmd0aCkuIFRoaXMgYnVnIHdhcworIGludHJvZHVjZWQgYSBsb25nIHRpbWUgYWdvIChieSBmYWVlY2QwIGNvbW1pdCkuICBBY3R1YWxseSB0aGlzIGlzIGEgJ2xlc3MgZWZmb3J0JyB0eXBlIG9mIGZpeCBidXQgSSB3b25kZXIgd2h5IHdlCisgbmVlZCBhIGxvbmcgdG8gc3RvcmUgYW4gSU5URUdFUiBpbiB0aGUgZmlyc3QgcGxhY2U/IFNpZ25lZC1vZmYtYnk6IElseWEgWWFub2sgPHlhbm9rQGVtY3JhZnQuY29tPiBTaWduZWQtb2ZmLWJ5OiBXZXMKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNmFkN2UyOGZmOWU1ZTRlYmMxMzU4ZWUzOWNjOTc5NmE0NGExYmVlNyBNZXJnZTogZjI4MzJlMworCisgMWUxNTRjZSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcKKyAzIDE5OjE1OjI0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNjFiMTc4ZjFlZTg5NTJhYTAzYWEzYjFiYTUxZjRhNjY1NWU0N2YwMSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnIDMgMTg6MDk6NDcgMjAxMSArMDIwMAorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6IFdoaXRlc3BhY2Utb25seSBjaGFuZ2U6IGZpeCBpbmRlbnRhdGlvbgorCisgb2YgYW4gI2luY2x1ZGUgZGlyZWN0aXZlCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHBlcmwvTmV0U05NUC54czogQ0hBTkdFUzogUGVybDogUmVtb3ZlIGZpbGUgcGVybC9OZXRTTk1QLnhzCisKKyBiZWNhdXNlIGl0IGJyZWFrcyB0aGUgV2luZG93cyBidWlsZC4gIFRvIFdlczogaWYgeW91IGNhbiB0ZWxsIG1lIGhvdyB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0geW91IG9ic2VydmVkCisgSSdsbCB0cnkgdG8gZmluZCBhIHBvcnRhYmxlIGZpeC4gIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDU0ODcxZjUyOTM2NzVjODA1OGVjY2U4OGZlZDViNjQ2YzgzNjMyMyAoIkFkZGVkCisgYSBib2d1cyBlbXB0eSAueHMgZmlsZSBmb3IgYnVuZGxpbmcgb24gbmV3ZXIgcGVybCB0aGF0IHdhbnRzCisgInNvbWV0aGluZyIiKS4KKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGY0ODliMTk5YWRhYjQ4YjE2MzNlYmNhZjVmZjVhN2MyMmM0Y2I4OSBNZXJnZTogZjRlYWEwMgorCisgNzJhNTliYyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBBdWcKKyAyIDEwOjExOjUzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgN2ZjYzBiODAzMmY4ZGE1YjdiYzMwMDU5YWYwYmE2NTZlYWU3MTA5MSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDEgMTQ6MTE6MjggMjAxMSArMDIwMAorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYzogRml4IGEgY29tcGlsZXIgd2FybmluZyBpbgorCisKKyBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuYworCisyMDExLTA4LTAxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQgZmlsZSBuYW1lcyBhbmQgcGF0dGVybnMgZm9yIG91dHB1dAorCisgZmlsZXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgV2luZG93cyBidWlsZAorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBTb3J0IGFscGhhYmV0aWNhbGx5CisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkIGFwcHMvc3NodG9zbm1wCisKKworMjAxMS0wOC0wMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIC5naXRpZ25vcmUsIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LWMuaW5jLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LXhzLmluYzogUmVtb3ZlIHR3byBnZW5lcmF0ZWQgUGVybCBmaWxlcy4KKworCisyMDExLTA4LTAyICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmNGVhYTAyZDliMDc2YTY3ZDcyNzJkZTdlZWY4ZTlkZmJmMTg5YmJmIE1lcmdlOiA0MDEyNWQ4CisKKyBhZGFkY2I5IEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAyIDAwOjU3OjUxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMiAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zOiBzdXBwcmVzcyAib2siIHRlc3Qgb3V0cHV0IGluIG5zYgorCisKKzIwMTEtMDgtMDEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0MDEyNWQ4NTM5Y2Q4OWY5NTJmYmMyNDU4OGM1ZTgxZTljZDgyMWZlIEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gQXVnIDEKKyAxMzo1ODozMyAyMDExICswMjAwCisKKzIwMTEtMDgtMDEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDVhY2YwZDJjZWIzOTc3OTY0ZWQzOWYwMDMwNzNiYTY0MTM4YzJlYmQgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU3VuIEp1bCAzMSAyMzo1Nzo0MQorIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTc3MjJhODFmOWNiN2FhODY3MGU3YzIzODYwMTM2MmEzMTA4N2FjYyBNZXJnZTogMjQyZTE3OQorCisgYWU5YWM2YyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBKdWwKKyAzMSAwOToxMTo0NSAyMDExICswMjAwCisKKzIwMTEtMDctMzEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc3NodG9zbm1wLmM6IEZpeCBhbiBpbmNvcnJlY3Qgc291cmNlIGNvZGUgY29tbWVudDogdGhlcmUgaXMKKworIG5vIHJlcXVpcmVtZW50IGluIHRoZSBBTlNJIEMgc3RhbmRhcmQgdGhhdCBzdGFjayB2YXJpYWJsZXMgc2hvdWxkIGJlCisgaW5pdGlhbGl6ZWQgdG8gemVyby4KKworMjAxMS0wNy0zMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjQyZTE3OTdiMjY5NGEwNjg5ODU2YWUzNmQwNWQzNDEzYWFmOGQ3NyBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTdW4gSnVsIDMxIDAxOjQ0OjA5CisgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQgZml4IGZvciBzeXN0ZW1zIGxhY2tpbmcKKworIGdldGFkZHJpbmZvKCkgYW5kIEVBSV9GQUlMIChlLmcuIEhQLVVYIDEwLjIwLzExLjAwKQorCisyMDExLTA3LTMwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxOGRmNzU5ZjE5Yjk3NWM0NDlkMDEwYmIwYTE2MjExOWJiNjgzNjBkIE1lcmdlOiA1NGE0NGNiCisKKyA3MDUwNzE4IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEp1bAorIDMwIDE2OjM5OjEzIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODJkNzNmYjExYmUzYWUzMWYzOWM5ZDYxOGQ1Mzg4ZGM5YjEwMDZkNyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDI5IDIwOjUxOjI3IDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogYXV0b3JlY29uZgorCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IGF1dG9yZWNvbmYKKworCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAxMDlmNjY5NGQ3ODhmNDhlYmQ5ZmMwYTFlOTBjNDVhYmMzN2JlYTIwIEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFNhdCBKdWwgMzAgMTQ6MjI6MTkKKyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDdkODEwMGVlZDQ1OWExZmYxYTIwYzA2NzM2NGZhNmNiNDc0OTEzMDkgTWVyZ2U6IDExNmMyNGYKKworIDllNDdhYzQgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBTYXQgSnVsIDMwIDAwOjIwOjAxIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zLCBkaXN0L25zYi1uaWdodGx5LCBkaXN0L25zYi1wYWNrYWdlOiBtaW5vciBuc2IKKworIGZpeGVzL2VuaGFuY2VtZW50cyBmcm9tIG15IG9sZCBzdm4gdHJlZQorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxMTZjMjRmMGY3ZmIzZjk5YmE2NDY3MzBmNjFjNTZkMWFlMjNiYTQxIE1lcmdlOiA5ODJmYjdmCisKKyA0ZmMwYjhiIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bAorIDI5IDExOjMxOjIwIDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYzQ4MTczYzA2YTllYWFkYmY4MWU2YjQ5NjJkNTVlZjBhNTRkYjI1MSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDI5IDEwOjI3OjM5IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogY29uZmlndXJlLCBsdG1haW4uc2gsIG00L2xpYnRvb2wubTQ6IFJlcnVuIGF1dG9yZWNvbmYKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBTb3J0IGFscGhhYmV0aWNhbGx5CisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkIGFwcHMvc3NodG9zbm1wCisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYzogRml4IHR3byBmaWxlbmFtZXMgaW4gaG9zdCBtaWIKKworIHNvdXJjZSBjb2RlIGNvbW1lbnRzLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOTgyZmI3ZmQ4YmFiMjVjNDMyMmFhNjJjNTA0MzcwMzZjZTI5NmUzZSBNZXJnZTogMWVkYTY3NQorCisgMzQ1ODEyOCBBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgSnVsIDI4IDE2OjI0OjAzIDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogRml4IHBvdGVudGlhbAorCisgc2lnc2VndiB3aGVuIGFuIGlmVGFibGUgZW50cnkgaXMgcmVtb3ZlZCBhcyByZXN1bHQgb2YgYm90aAorIGludGVyZmFjZV9yZXBsYWNlX29sZCBhbmQgaW50ZXJmYWNlX2ZhZGVvdXQgYXQgdGhlIHNhbWUgdGltZS4KKworMjAxMS0wNy0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zc2h0b3NubXAuYzogTWFrZSBhcHBzL3NzaHRvc25tcC5jIGJ1aWxkIGFnYWluICh3YXMgYnJva2VuIGJ5CisKKyBjb21taXQgNjEyMjQ3Y2RmMTRjMWU3NDVjMzg0Y2VmZTFmM2ZkZTNlNDQ1YjM0NyB0aGF0IGNoYW5nZWQKKyBNU0dfTk9TSUdOQUwgaW50byBORVRTTk1QX05PU0lHTkFMKQorCisyMDExLTA3LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxZWRhNjc1M2I3ZmU3ZDNiM2YyMTdjMDkyNTRlYzAyZDBlZTFkMGNlIE1lcmdlOiBkYjhiODYwCisKKyBhMmY5ZWNlIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEp1bAorIDI4IDE1OjMyOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOiAKKworIENIQU5HRVM6IHNubXBkOiBSZXN0b3JlIHN0b3JhZ2UgdGFibGVzIG9uIExpbnV4CisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogRG9jdW1lbnQgaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIG9wdGlvbi4KKworCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfcmVwbGFjZV9vbGQnIG9wdGlvbiB0byByZW1vdmUgb2xkIGVudHJpZXMgaW4KKyBpZlRhYmxlIHdoZW4gYW4gaW50ZXJmYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbHJlYWR5IGV4aXNpbmcgb25lCisgYXBwZWFycy4gIEUuZy4gcmVtb3ZlIG9sZCBwcHAwIGludGVyZmFjZSB3aGVuIG5ldyBwcHAwIHNob3dzIHVwLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IERvY3VtZW50IHRoZSBpbnRlcmZhY2VfZmFkZW91dCBvcHRpb24uCisKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQWxsb3cgaWZUYWJsZQorCisgZW50cmllcyB0byBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IHdoZW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlCisgZGlzYXBwZWFycyAoaS5lLiBpbnRlcmZhY2VfZmFkZW91dCA9IDAgd29ya3MgYXMgZXhwZWN0ZWQpLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfZmFkZW91dCcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0CisgbGlmZXRpbWUgb2YgaWZUYWJsZSBlbnRyaWVzIG9mIHJlbW92ZWQgaW50ZXJmYWNlcy4gIFByZXZpb3VzIGxpZmV0aW1lIHdhcyBoYXJkY29kZWQgNSBtaW51dGVzLCBub3cgaXQncyBjb25maWd1cmFibGUuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkNjJhMGViOTA3MGI0ZDhkOWZlMmJjZmRiNGQ1M2QzN2VmODE0ZjliIEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgSnVsIDI4CisgMTQ6NDk6MDggMjAxMSArMDIwMAorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfcmVwbGFjZV9vbGQnIG9wdGlvbiB0byByZW1vdmUgb2xkIGVudHJpZXMgaW4KKyBpZlRhYmxlIHdoZW4gYW4gaW50ZXJmYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbHJlYWR5IGV4aXNpbmcgb25lCisgYXBwZWFycy4gIEUuZy4gcmVtb3ZlIG9sZCBwcHAwIGludGVyZmFjZSB3aGVuIG5ldyBwcHAwIHNob3dzIHVwLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IERvY3VtZW50IHRoZSBpbnRlcmZhY2VfZmFkZW91dCBvcHRpb24uCisKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQWxsb3cgaWZUYWJsZQorCisgZW50cmllcyB0byBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IHdoZW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlCisgZGlzYXBwZWFycyAoaS5lLiBpbnRlcmZhY2VfZmFkZW91dCA9IDAgd29ya3MgYXMgZXhwZWN0ZWQpLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfZmFkZW91dCcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0CisgbGlmZXRpbWUgb2YgaWZUYWJsZSBlbnRyaWVzIG9mIHJlbW92ZWQgaW50ZXJmYWNlcy4gIFByZXZpb3VzIGxpZmV0aW1lIHdhcyBoYXJkY29kZWQgNSBtaW51dGVzLCBub3cgaXQncyBjb25maWd1cmFibGUuCisKKzIwMTEtMDctMjggIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhcHBzL3NzaHRvc25tcC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6IENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZAorICAgICAgZml4CisKKyBmb3Igc3lzdGVtcyBsYWNraW5nIE1TR19ET05UV0FJVAorCisyMDExLTA3LTI3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYzogQ0hBTkdFUzogc25tcGQ6IE1ha2UKKworIFRDUC1NSUI6OnRjcEN1cnJFc3RhYiB3b3JrIGFnYWluLiBXYXMgYnJva2VuIGluIDUuNyBieSB0aGUKKyBpbnRyb2R1Y3Rpb24gb2YgdGhlICJmZWF0dXJlcyIgZmVhdHVyZS4KKworMjAxMS0wNy0yNyAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGZiODgwNzRmYmJjMjY4YzdmMDUwOTQ5MTUzNWFlYzVmZWNiMDU2ODQgTWVyZ2U6IGE3NDNhZTUKKworIDM4MjEyNzMgQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgV2VkIEp1bCAyNyAxNDo0NzoyNSAyMDExICswMjAwCisKKzIwMTEtMDctMjcgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAzMWZhMDdjZDlmZmRlNDZkNDFkMmI1ODM4YzNmYzRkMDE1NDhiZmI1IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgSnVsIDI3CisgMTQ6NDU6NDcgMjAxMSArMDIwMAorCisyMDExLTA3LTI3ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogQ0hBTkdFUzogc25tcGQ6IHJ1biBzaWduYWwgaGFuZGxlcnMgd2hlbiBzZWxlY3QoKQorCisgaXMgaW50ZXJydXB0ZWQuICBUaGlzIGJlaGF2aW9yIGlzIGluZGljYXRlZCBpbiBjb21tZW50IG9uIGxpbmUgMTI0NCwgYnV0IGl0IHdhcyBub3QKKyBhY3R1YWxseSBkb25lLgorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyZTk0NjZkN2Y1OWQ2NWQwNTAyNzc3MzVlNGVkOWQzMDcxOWZmNzUyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwgMjYgMTM6MTA6MDQgMjAxMSArMDIwMAorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA3NzA4Mjk2NzYwZWFmNWE4MGQ4NTQwNzQ2YzljMjQ5ODI2ZmQxYmZlIE1lcmdlOiBlYTExZTVlCisKKyBjZDZlMzgyIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bAorIDI2IDE2OjIxOjQxIDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOiBDbGFyaWZ5IGFuIElQdjYgc291cmNlIGNvZGUgY29tbWVudAorCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYywgbWFuL25ldHNubXBfaGFuZGxlci4zOiBTcGVsbGluZyBmaXg6CisKKyBkZWZpbmVkeSAtPiBkZWZpbmVkCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMzogU3BlbGxpbmcKKworIGZpeDogYWxldmlhdGUgLT4gYWxsZXZpYXRlCisKKzIwMTEtMDctMjYgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkZDJjNDcxMzM0OTNkNWEwMGRlNmIzY2RiY2ZhYzdlOWQ0NGI2ZmZlIE1lcmdlOiBmOWNjYmM3CisKKyBlYTExZTVlIEF1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBKdWwgMjYgMTQ6MjU6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTI2ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzVhODQ2NGM0MmE5NGMyNTBlZTJkZmEyYTQ3MzEwOWE3MzQyMDNkOCBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEp1bCAyNgorIDE0OjI0OjU1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGY5Y2NiYzc3MjY2NjEzNGQxZDE3OGI1MDVhZjlkZGNkZDllZDQyNDQgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBKdWwgMjUKKyAxNTowMjoxNSAyMDExICswMjAwCisKKzIwMTEtMDctMjAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGIwYzBhMzU1ZDVmNjAxYTExYmU0OTE0ZmJmNzEzNzE2YWJkMzBhMjkgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEp1bCAxOQorIDE4OjM2OjExIDIwMTEgLTA3MDAKKworMjAxMS0wNy0yMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzE0ZmMzODYxNGJhZjEwZDUxNzEzNmYwNDgwOTA3YjdmMDNkOGQ3NCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgSnVsIDIwCisgMTM6NDQ6NTkgMjAxMSAtMDcwMAorCisyMDExLTA3LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jOiByZW1vdmUgYnJva2VuIHdoaXRlc3BhY2UgbGluZXMgdGhhdAorCisgbGVhZHMgdG8gcmVhZGluZyBjb25mdXNpb24KKworMjAxMS0wNy0yMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZWJkZDIxNmMwNzRiZjQxY2QzYTA4NGJkMTQ2ODljZjAxYzg4N2IzMSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgSnVsIDE5CisgMTg6MzY6MTEgMjAxMSAtMDcwMAorCisyMDExLTA3LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAuZ2l0aWdub3JlOiB1cGRhdGVkIGdpdGlnbm9yZSB0byBpZ25vcmUgYSBudW1iZXIgb2YgYXV0by1nZW5lcmF0ZWQKKworIGZpbGVzCisKKzIwMTEtMDctMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmM6IHJlbW92ZSBicm9rZW4gd2hpdGVzcGFjZSBsaW5lcyB0aGF0CisKKyBsZWFkcyB0byByZWFkaW5nIGNvbmZ1c2lvbgorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkZjVmNzAwNTVjZjliZTMzZjA1ZmI1MGFiZTJmNWE4MWVhYzA5MmFkIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwgMTkgMTE6MDc6MTkgMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBmNTk2ZjE4MjQyZGNkZmQ2Y2Y0OWM4OGRhMWQ4MzZjMTZlMjYwY2FjIE1lcmdlOiAwZjMwOWI0CisKKyA3MGRlZTRiIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bAorIDE5IDExOjMzOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOgorICAgICAgMzM2OTY4MDoKKworIGZyb20gSWx5YSBZYW5vazogY2hhbmdlIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgZnJvbSBpbnQgdG8gbG9uZyBzdWNoCisgdGhhdCBtb2RpZnlpbmcgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIG9iamVjdCBkb2VzIG5vdCBvdmVyd3JpdGUKKyBtZW1vcnkgaW4gNjQtYml0IGJ1aWxkcy4KKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzM3MDY0NToKKworIGZyb20gQmlsbCBGZW5uZXI6IEZpeCBBZ2VudFggc3ViYWdlbnQgZm91ciBieXRlIGxlYWsKKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzOiBkbworCisgbm90IGludm9rZSBJU1JVTk5JTkcoKSBvbiBNaW5HVy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzOgorCisgY2xlYW51cCAtIHJlbW92ZSBjb2RlIHRoYXQgYmVjYW1lIHN1cGVyZmx1b3VzLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBNaW5HVzogRG8gbm90CisKKyBhc3N1bWUgdGhhdCBraWxsLmV4ZSByZXBvcnRzIHZpYSBpdHMgZXhpdCBzdGF0dXMgd2hldGhlciB0aGUKKyBzaWduYWxsZWQgcHJvY2VzcyBzdGlsbCBleGlzdHMuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBSZW1vdmUgdGhlIGZ1bmN0aW9uIFdBSVRPUkRJRSgpIGZyb20gc2ltcGxlX2V2YWxfdG9vbHMuc2ggc2luY2UgaXQKKyBpcyBuZXZlciBpbnZva2VkLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgU2ltcGxpZnkgV0FJVEZPUigpIGluIHNpbXBsZV9ldmFsX3Rvb2xzLnNoLiBUaGUgY29kZSB0aGF0IGhhbmRsZWQKKyBpbnZvY2F0aW9uIG9mIFdBSVRGT1IoKSB3aXRoIHplcm8gb3Igb25lIGFyZ3VtZW50cyBoYXMgYmVlbiBkcm9wcGVkCisgc2luY2UgV0FJVEZPUigpIGlzIGFsd2F5cyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50cy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzOgorCisgbWlub3Igc2ltcGxpZmljYXRpb24uCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGU6IENIQU5HRVM6CisKKyB0ZXN0aW5nOiBTa2lwIHRlc3QgNTkgaWYgU0lHSFVQIGlzIG5vdCBzdXBwb3J0ZWQuIE1ha2VzIHRlc3QgNTkgcGFzcworIG9uIE1pbkdXLgorCisyMDExLTA3LTA2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBNaW5HVyBmaXgKKworCisyMDExLTA3LTA2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGZyYW1ld29yaworCisgcmVmYWN0b3Jpbmc6IEludHJvZHVjZSBXQUlURk9STk9UQ09ORCgpLgorCisyMDExLTA3LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgTWFrZSBTVE9QUFJPRyBzZW5kIFNJR1RFUk0gcmVwZWF0ZWRseS4gVGhpcyBmaXhlcyBhIHJhY2Ugd2hlcmUKKyBTSUdURVJNIGNvdWxkIGJlIHNlbnQgYmVmb3JlIHRoZSBTSUdURVJNIHNpZ25hbCBoYW5kbGVyIHdhcyBzZXQgdXAsCisgZXNwZWNpYWxseSB3aGVuIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgVmFsZ3JpbmQuCisgQ0hBTkdFUzogdGVzdGluZzogTWFrZSB0aGUgU05NUF9WRVJCT1NFPTEgb3V0cHV0IGV2ZW4gbW9yZSB2ZXJib3NlLgorCisyMDExLTA3LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3MKKworIHJlZmFjdG9yaW5nOiBpbnRyb2R1Y2UgRUNIT1NFTkRTSUdURVJNKCkgYW5kIEVDSE9TRU5EU0lHS0lMTCgpCisKKzIwMTEtMDctMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IEZpeCBhIGJ1ZyBpbgorCisgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaCB0aGF0IHdhcyBpbnRyb2R1Y2VkCisgaW4gY29tbWl0IDkzOGQ3NWMuCisKKzIwMTEtMDctMDEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IElnbm9yZSAqLmV4ZSBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhlIFdpbjMyCisKKyBidWlsZAorCisyMDExLTA3LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgVGVzdCBvbmx5IG9uY2UgZHVyaW5nIGEgdGVzdCB3aGV0aGVyIHRoZSBzaGVsbCBzdXBwb3J0cyBzdWItc2Vjb25kCisgc2xlZXBpbmcgaW5zdGVhZCBvZiByZXBlYXRlZGx5LgorCisyMDExLTA3LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46IENIQU5HRVM6IHRlc3Rpbmc6IENoYW5nZWQKKworIGRlZmF1bHQgdGltZW91dCBmcm9tIDFzIHRvIDEwcyB3aGVuIHRoZSByZWdyZXNzaW9uIHRlc3RzIGFyZSBydW4KKyB1bmRlciBWYWxncmluZAorCisyMDExLTA3LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgQWZ0ZXIgaGF2aW5nIHNlbnQgU0lHVEVSTSB0byBzbm1wZCBvciBzbm1wdHJhcGQsIHdhaXQgdW50aWwgdGhlCisgcHJvY2VzcyBoYXMgc3RvcHBlZCBiZWZvcmUgc2VuZGluZyBTSUdLSUxMLiBUaGlzIHJhY2UgY29uZGl0aW9uIHdhcworIGhpdCBtb3N0IGVhc2lseSB3aGVuIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgVmFsZ3JpbmQuCisgQ0hBTkdFUzogdGVzdGluZzogQ2hlY2sgUElEIGZpbGUgZXhpc3RlbmNlIGFmdGVyIGhhdmluZyByZWFkIGl0CisgaW5zdGVhZCBvZiBiZWZvcmUuIFRoaXMgZml4ZXMgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBQSUQgZmlsZQorIGRpc2FwcGVhcmVkIGFmdGVyIHRoZSBleGlzdGVuY2UgY2hlY2sgYW5kIGJlZm9yZSBpdCB3YXMgcmVhZC4KKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZpeCBhIGJ1ZyBpbiBhIGRlYnVnIHN0YXRlbWVudAorCisgaW50cm9kdWNlZCBieSBwYXRjaCAzMzEwMjUwIC8gcjIwNDk0OiB1c2UgJWxkIHRvIHByaW50IGEgdmFsdWUgb2YKKyB0eXBlIG9pZCBpbnN0ZWFkIG9mICVkLiAgVGhpcyBwYXRjaCBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdG8gVjUuNiBTVk4gcGF0Y2hlczogZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWRnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwZjMwOWI0OTNjMjFkM2M2OTE0NDg3NTE0YjQxNTYwNzU0ZmZjZGY5IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwgMTkgMDg6Mzc6NTAgMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxYjc0NTRiYzI4MTU2ODQ3MGExMzAwNDc2ZDJlZGI0ZjQxMWU2MDI5IE1lcmdlOiA4ZDlkY2M4CisKKyA2OTBlYTdkIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bAorIDE5IDA4OjMxOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzogQ0hBTkdFUzogc25tcHRyYXBkOiBBZGQgbWlzc2luZyBuZXdsaW5lCisKKyBjaGFyYWN0ZXIgaW4gYSBsb2cgbWVzc2FnZQorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NubXB0cmFwZC5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IEludm9rZSBzaHV0ZG93bl9wZXJsKCkgd2hlbgorCisgc2h1dHRpbmcgZG93bgorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6IFNwZWxsaW5nIGZpeDogYnJhbmtldCAtPiBicmFja2V0CisKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBSdW4gYXV0b3JlY29uZi4KKworIEZpeGVzIGJ1aWxkIGJyZWFrYWdlIGNhdXNlZCBieSBwYXRjaAorIGQ1ODhlYzg1M2JkMDUzMWYyMTJmY2JmNTFiOTYyYjk2YzY4MjhiNTkgKFJQTSA0Ljkgc3VwcG9ydCkKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZDYxN2Q4NGY4M2ZhNjllZDlmYTlmOThlZmM0YWZhZjg4MGQxMjFmMiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgSnVsIDE0IDE2OjQzOjQ3IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBNYWtlCisKKyBuZXRzbm1wX2lwdjZfZm10YWRkcigpIHNob3cgdGhlIElQdjYgc2NvcGUgSUQKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IEFkZCBzdXBwb3J0CisgICAgICBmb3IKKworIElQdjYgYWRkcmVzcyBzY29wZSBJRAorCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFJ1biBhdXRvcmVjb25mCisKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTU2NzIxYTNlNzc1NGUzODlkYWE3ZThhM2Q1NzkyODk5ZWRjOWRlMyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgSnVsIDE0IDE2OjE4OjMyIDIwMTEgKzAyMDAKKworMjAxMS0wNy0xNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgODQ0ZDRjZTg2N2JmM2FiZTdiNzUzNmM1ZGJmYmE0MDE5MzdhOGQ0YSBNZXJnZTogZWVkMDE5OAorCisgNjEwMzZhOCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIEZyaSBKdWwgMTUgMTU6MzM6MTAgMjAxMSAtMDcwMAorCisyMDExLTA3LTE1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4NTFiY2Y1M2ZjZDEzY2RmMGJhOWYxMmU1ZDYwM2U3M2Y4YmI5NjExIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIEZyaSBKdWwgMTUKKyAxNTozMjo0OSAyMDExIC0wNzAwCisKKzIwMTEtMDctMTQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBmaXggYSB0eXBvCisKKworMjAxMS0wNy0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAbG9jYWxob3N0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogc25tcGxpYjogIHR3ZWFrIHBhdGNoIDMwNDQ4ODggdG8gcmVzdG9yZQorCisgcHJvcGVyIG5vbi1lcnJvciByZXR1cm4gZHVyaW5nIG1pYiBsb2FkaW5nCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYWRkZWQgNS43IHBhdGNoZXMgdG8gdGhlIGJyYW5jaCBsaXN0IGFuZCBmaXggdGhlIHJlbGVhc2UgZmlsZQorCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYWRkZWQgNS43IHBhdGNoZXMgdG8gdGhlIGJyYW5jaCBsaXN0CisKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9yZWxlYXNlOiBhIGNvcHkgb2YgdGhlIHJlbGVhc2UgZmlsZSBhcHBsaWVkIHRvIHRoZSBvbGRlcgorCisgYnJhbmNoZXMKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCA1LjcgcGF0Y2hlcworCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGM0MzEyMzFlOGYwYTM5ZDE5NTBiYzcyYzMyZTM0MDJmOTBmYTgwMzAgTWVyZ2U6IDU2ZmVlNDAKKworIGEyYWMyNGQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gSnVsIDExIDE5OjMzOjE3IDIwMTEgLTA3MDAKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvcHkgb2YgdGhlCisKKyBzaGVsbC1mdW5jdGlvbnMgdG8gdGhlIG9sZGVyIGJyYW5jaAorCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L3JlbGVhc2U6IGEgY29weSBvZiB0aGUgcmVsZWFzZSBmaWxlIGFwcGxpZWQgdG8gdGhlIG9sZGVyCisKKyBicmFuY2hlcworCisyMDExLTA3LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGZvciA1LjcKKworCisyMDExLTA3LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcKKworCisyMDExLTA3LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogUmV2ZXJ0ICJmaXggZHRsc3VkcAorCisgdHJhbnNwb3J0IGFkZHJlc3MgZm9ybWF0IGZ1bmN0aW9uIiBUaGlzIHJldmVydHMgY29tbWl0IDJhYjNhNmU2ZjJmY2MxZmYzZTVmMGZiNWRjNWQwNWU0OTg4MjBkODkuICAgLSBmb3Igc29tZSByZWFzb24gSSBzYXcgJ3JjJyBhbmQgbXkgYnJhaW4gaW50ZXJwcmV0ZWQgaXQgYXMgICAgJ3ByZS1yZWxlYXNlJy4gV2hhdCBjYW4gSSBzYXksIGl0IHdhcyBsYXRlLiA6LS8KKworMjAxMS0wNy0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAbG9jYWxob3N0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IGZpeCBkdGxzdWRwIHRyYW5zcG9ydAorCisgYWRkcmVzcyBmb3JtYXQgZnVuY3Rpb24gIC0gdXBkYXRlIGlwdjQgZm10YWRkciB0byBoYW5kbGUgc29ja2FkZHIgYW5kIHRvIGNoZWNrICAgIHNpemUgYmVmb3JlIGFzc3VtaW5nIGRhdGEgaXMgYWRkciBwYWlyICAtIG1vdmUgZHRsc3VkcCBmdW5jdGlvbnMgdG8gZXh0cmFjdCBhZGRyKHMpIHRvIHRsc2Jhc2UKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNTZmZWU0MDExOGIyMWE5ZjRkYzAyYTZmMjQ3ZjdkYTZmYzY5YTAwNSBNZXJnZTogZDM5MTk0YgorCisgOWZmNDcxNCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFdlZCBKdW4gMjkgMjM6MTg6MTMgMjAxMSAtMDcwMAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogZml4IHRhZyBwdXNoaW5nCisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IGZpeCB0YWcgcHVzaGluZworCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBtaXNjIHB1YmxpY2F0aW9uIGZpeGVzIGZvdW5kIHdoaWxlCisKKyBwdWJsaXNoaW5nCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy5yYzMKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcucmMzCisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHJlbW92ZSB1bm5lZWRlZCBjb21tZW50CisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IG1pc2MgcHVibGljYXRpb24gZml4ZXMgZm91bmQgd2hpbGUKKworIHB1Ymxpc2hpbmcKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogcmFuIGF1dG9oZWFkZXIgdG8gYWRkIHRoZQorCisgbWlzc2luZyB0ZW1wbGF0ZSBpZmRlZnMKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBmb3IgNS43LnJjMgorCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6IDUuNy5yYzIKKworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA2NGI2YzY4YTg0OTMwYWIwMWUzZTE0NmM0OWYzYWI1MzgyZWZkYTNlIE1lcmdlOiAxMjdlZWMyCisKKyBkMzkxOTRiIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgV2VkIEp1biAyOSAxNzoxMjo0NiAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGRmOWNmOWExZTI5M2QwNWEyNDc4NjY5NGY2OGMwNWEyYmUxM2E5YjMgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEp1biAyOQorIDE2OjM0OjExIDIwMTEgLTA3MDAKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHVzZSBnaXQyY2wgdG8gZ2VuZXJhdGUgdGhlIENoYW5nZUxvZyBmaWxlOworCisgbmVlZHMgbXVjaCBtb3JlIHdvcmsuCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiB1c2UgdGhlIG5ldyBydW4tYXV0b2NvbmYgc2NyaXB0CisKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9ydW4tYXV0b2NvbmY6IEEgc2NyaXB0IHRvIGludm9rZSB0aGUgY29ycmVjdCB2ZXJzaW9uIG9mIHRoZQorCisgYXV0b2NvbmYgdG9vbAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogcmVtYWluaW5nIGNvbW1hbmQgbGluZSBjaGFuZ2VzIGZvciBzdm4gLT4KKworIGdpdAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogbWFrZSB0aGUgYnJhbmNoIGVjaG8gb3V0cHV0IGFuZCBzdm4gdXBkYXRlCisKKyBjb252ZXJ0ZWQgdG8gZ2l0IGVxdWl2YWxlbnRzCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBwdWxsIHRoZSBicmFuY2ggaW5mbyBmcm9tIGdpdAorCisKKzIwMTEtMDYtMjkgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOiBUd2VhayBSUE0gaGFuZGxpbmcgdG8gd29yayB3aXRoCisgICAgICBsaWJyYXJ5CisKKyB2ZXJzaW9uIDQuOQorCisyMDExLTA2LTI5ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZDU4OGVjODUzYmQwNTMxZjIxMmZjYmY1MWI5NjJiOTZjNjgyOGI1OSBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgV2VkIEp1biAyOQorIDE2OjA3OjAwIDIwMTEgKzAyMDAKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9yZWxlYXNlOiBub3RlZCB0aGF0IHRoZSBtYXN0ZXIgYnJhbmNoIGlzIGluIHJjIHN0YXRlCisKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogOiBjb21taXQgOGIyM2I0YzEzOTIzYjhjYWY0ZDRhZWQzMmE0NTA5MzM5MzRmZjQ2MSBNZXJnZTogMTUzNzgxZAorCisgNDdmNTA0OCBBdXRob3I6IFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PiBEYXRlOiAgIFR1ZQorIEp1biAyOCAxMzoxNDo1MiAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIDogY29tbWl0IGFmOGIyMzUyMzRmNzI5NDRhNjQ5YTc2ZjBkMzBjZmY5NWFjMmU4OTUgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+IERhdGU6ICAgVHVlIEp1biAyOCAxMzoxMToxOSAyMDExCisgLTA3MDAKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiB1c2UgZ2l0IG1lcmdlIHdpdGggdGhlIC0tbG9nCisKKyBvcHRpb24KKworMjAxMS0wNi0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMTUzNzgxZGJmYjJhZmMwMDAzYmE0ZTU4ZmZjY2E1MzAwMWU0ODZkNiBNZXJnZTogYjNlODBkZQorCisgM2M1YTQwOSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdW4KKyAyOCAxOTo0MzoxMyAyMDExICswMjAwCisKKzIwMTEtMDYtMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IDliYzgyZTRjYTQ4MzdmMDAwNzJkYmE4NmI5NDk3YTI3MTg2OTA5ZjkgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1biAyOCAxOToxMzozNSAyMDExICswMjAwCisKKzIwMTEtMDYtMjggIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIEZBUTogV2UncmUgbm93IHVzaW5nIGdpdCEKKworCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiA6IGNvbW1pdCBiM2U4MGRlOWIwN2QyODJmZjExYWY4YjA2YTkxZDY0Mjc5ZDMyNjFkIE1lcmdlOiBjNGFkMjc4CisKKyA2YTVlNWE2IEF1dGhvcjogV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+IERhdGU6ICAgTW9uCisgSnVuIDI3IDIxOjM0OjU5IDIwMTEgLTA3MDAKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKyAgICogOiBjb21taXQgMzhmZTgxNzdkNTMzMTM1YTZjYzY4MjcyNGYxNmE5MTExM2JjZDdmMyBNZXJnZTogN2Q5MTdjZgorCisgZGQ1OGJhZiBBdXRob3I6IFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PiBEYXRlOiAgIE1vbgorIEp1biAyNyAyMTozNDo1NiAyMDExIC0wNzAwCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8b3BlbnNvdXJjZUBoYXJkYWtlcnMubmV0PgorCisgICAqIDogY29tbWl0IDVjMTc3ZjUxN2QxNmYwNTU0NWIyNzlkMTZmMGU0ZmQ1Njk2YmU2NTEgTWVyZ2U6IGYwZDZiZjAKKworIGMyYmNlYmMgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4gRGF0ZTogICBNb24KKyBKdW4gMjcgMjE6MzQ6NTUgMjAxMSAtMDcwMAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworICAgKiA6IGNvbW1pdCA5Yzk3Njk1NzJlYjhjMDNiNjk1NTZjMWM1YWFiOWI0ZDU2YzZkMWQzIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBKdW4gMjcKKyAxNDoxMToxNCAyMDExICswMDAwCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBmZWF0dXJlIHRvIG5vdCByb2xsCisKKyBicmFuY2hlcyBjdXJyZW5seSBpbiByYyBwaGFzZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBuc3JvbGx1cCBmdW5jdGlvbiBmb3IKKworIHJvbGxpbmcgYnJhbmNoZXMgdXB3YXJkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGNyZWF0ZWQgYW4gbnNwYXRjaGFwcGx5IGZ1bmN0aW9uCisKKyB0byBhcHBseSBhIHByZXZpb3VzbHkgdGVzdGVkIHBhdGNoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIG5zdHJ5cGF0Y2ggZnVuY3Rpb24gdG8KKworIHRlc3QgcGF0Y2ggYXBwbGljYXRpb24gYWdhaW5zdCB2YXJpb3VzIGJyYW5jaGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCB2ZXJib3NlIG91dHB1dCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtb3JlIHByZWZpeCBjaGFuZ2VzIGFuZCBiZXR0ZXIKKworIHNldHRpbmcgb2YgZGVmYXVsdCB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHVzZSBucyBwcmVmaXhlcyBpbnN0ZWFkIG9mIGdlbmVyaWMKKworIHNubXAgcHJlZml4ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiAKKworIE1pc3NpbmcgY2hlY2sgZm9yIHJwbXRzLmggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjMgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFR3ZWFrIFJQTSBoYW5kbGluZyB0byB3b3JrCisKKyB3aXRoIGxpYnJhcnkgdmVyc2lvbiA0LjkgQmFzZWQgb24gYSBwYXRjaCBieSBKYW4gU2FmcmFuZWsgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUxOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOiBQcm92aWRlIGEgZnJhbWV3b3JrIGZvciByZWFkaW5nCisKKyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5IChyYXRoZXIgdGhhbiBxdWVyeWluZworIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKyBmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDUxNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA1MTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA1MTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOiBQcm92aWRlIGEKKworIGZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5CisgKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKyBmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IFByb3ZpZGUgYQorCisgZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20gYSBjYWNoZSBkaXJlY3RvcnkKKyAocmF0aGVyIHRoYW4gcXVlcnlpbmcgdGhlIFJQTWRiIGRpcmVjdGx5KS4gIE15IGFwb2xvZ2llcyB0byBKZWZmIEpvaG5zb24gZm9yIHRoZSBkZWxheSBpbiBhZGRpbmcgdGhpcworIGZ1bmN0aW9uYWxpdHkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzogUHJvdmlkZSBhCisKKyBmcmFtZXdvcmsgZm9yIHJlYWRpbmcgUlBNIHBhY2thZ2UgaW5mb3JtYXRpb24gZnJvbSBhIGNhY2hlIGRpcmVjdG9yeQorIChyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLiAgTXkgYXBvbG9naWVzIHRvIEplZmYgSm9obnNvbiBmb3IgdGhlIGRlbGF5IGluIGFkZGluZyB0aGlzCisgZnVuY3Rpb25hbGl0eS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZvbGxvdy11cCBmb3IgcjIwNTExOiByZWFsbHkgdXNlCisKKyB0aGUgcHJvcGVyIGZvcm1hdCBzcGVjaWZpY2F0aW9uLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZvbGxvdy11cCBmb3IgcjIwNTExOiByZWFsbHkgdXNlCisKKyB0aGUgcHJvcGVyIGZvcm1hdCBzcGVjaWZpY2F0aW9uLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZpeCBhIGJ1ZyBpbiBhIGRlYnVnIHN0YXRlbWVudAorCisgaW50cm9kdWNlZCBieSBwYXRjaCAzMzEwMjUwIC8gcjIwNDk0OiB1c2UgJWxkIHRvIHByaW50IGEgdmFsdWUgb2YKKyB0eXBlIG9pZCBpbnN0ZWFkIG9mICVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZpeCBhIGJ1ZyBpbiBhIGRlYnVnIHN0YXRlbWVudAorCisgaW50cm9kdWNlZCBieSBwYXRjaCAzMzEwMjUwIC8gcjIwNDk0OiB1c2UgJWxkIHRvIHByaW50IGEgdmFsdWUgb2YKKyB0eXBlIG9pZCBpbnN0ZWFkIG9mICVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IFVzZSAlcCB0byBwcmludCBhIHBvaW50ZXIgaW5zdGVhZAorCisgb2YgJWxkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBVc2UgJXAgdG8gcHJpbnQgYSBwb2ludGVyIGluc3RlYWQKKworIG9mICVsZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNTEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBydW4gY29ycmVjdCB2ZXJzaW9uIG9mIGF1dG9jb25mIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTEzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmU6IHJhbiBhdXRvY29uZiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xMCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmM6IEluY2x1ZGUgc3RkbGliLmggdG8gbWFrZSBkbWFsbG9jIGhhcHB5CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTAgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXM6IEZpeCBidWlsZCBvZiBzbm1wdXNtCisKKyB3aGVuIGFkZGl0aW9uYWwgc2VjIG1vZHVsZXMgcmVxdWVzdGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmM6IEluY2x1ZGUgc3Rk54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAj7HniK31gJGL772k9YCMtPWAkpFiLmggdG8gbWFrZSBkbWFsbG9jIGhhcHB5CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUwMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wOSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzogQ0hBTkdFUzogQlVHOiAzMTUxODQ1OiBmaXggbXVsdGlwbGUKKworIHJlZ2lzdHJhdGlvbnMgb2Ygc25tcCB0cmFuc3BvcnQgaGFuZGxlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDk5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTA5ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOiBDSEFOR0VTOiBCVUc6IDMxNTE4NDU6IGZpeCBtdWx0aXBsZQorCisgcmVnaXN0cmF0aW9ucyBvZiBzbm1wIHRyYW5zcG9ydCBoYW5kbGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wOCAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCBzbm1wbGliL3NubXBfYXBpLmMsIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYzogbW9yZSBkbnNzZWMgdHdlYWtzICAtIGNyZWF0ZSBhbiBhcHAtZ2xvYmFsCisgICAgICB2YWxpZGF0b3IgY29udGV4dCBmb3IgdXNlIHdpdGggYWxsICAgIHZhbGlkYXRpb24gcm91dGluZXMuIG1haW5seQorICAgICAgdXNlZnVsIGZvciBsb25nLWxpdmVkIGFwcHMuICAgLSB1c2UgdGhlIGFwcHR5cGUgYXMgdGhlIHZhbGlkYXRvcgorICAgICAgJ3Njb3BlJywgYWxsb3dpbmcgICAgZm9yIGFwcC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIG9mIHZhbGlkYXRpb24KKyAgICAgIHZpYSBsaWJ2YWwncyAgICBkbnN2YWwuY29uZiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wNyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg6IGFkZCBhIG1heCBkZWZpbmUgZm9yCisKKyBlYWNoIGRlZmF1bHQgc3RvcmUgdHlwZSAgIG5vdCBhY3R1YWxseSB1c2VkLCBqdXN0IGEgaGVscGZ1bCByZW1pbmRlciBmb3IgdGhvc2UgYWRkaW5nICAgbmV3IGlkcyB3aG8gbWlnaHQgbm90IHRoaW5rIHRvIGNoZWNrIE5FVFNOTVBfRFNfTUFYX1NVQklEUy4gICAgKHRoZSBib29sIGxpc3QgaXMgcmFwaWRseSBhcHByb2FjaGluZyB0aGUgY3VycmVudCBsaW1pdC4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wNyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjogbWVudGlvbiBidWlsZGRpciB3aGVuCisKKyBjb21wbGFpbmluZyBhYm91dCBub3QgYmVpbmcgcnVuIGZyb20gc291cmNlIHRyZWUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDk2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBwZXJsL1NOTVAvU05NUC54czogUmV2ZXJ0ZWQgcjIwMzYyOiB0aGF0IHBhdGNoIG1ha2VzIHNlbnNlIG9uIHRoZQorCisgdHJ1bmsgYW5kIHRoZSA1LjYgYnJhbmNoIGJ1dCBub3Qgb24gdGhlIDUuNSBub3Igb24gdGhlIDUuNCBicmFuY2guICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDk1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMzMTAyNTA6IGZyb20gZmVubmVyOiBtaXNjIGZpeGVzIGZvciBkZWJ1Z2dpbmcKKyBvdXRwdXQgb2YgYWdlbnR4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0OTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzMxMDI1MDogZnJvbSBmZW5uZXI6IG1pc2MgZml4ZXMgZm9yIGRlYnVnZ2luZworIG91dHB1dCBvZiBhZ2VudHggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDk0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMzMTAyNTA6IGZyb20gZmVubmVyOiBtaXNjIGZpeGVzIGZvciBkZWJ1Z2dpbmcKKyBvdXRwdXQgb2YgYWdlbnR4IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0OTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVMsIE5FV1M6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDkyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZSBkZXBlbmQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0OTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogZml4ZWQgYXV0b2NvbmYgdmVyc2lvbiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ5MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UKKworIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDg1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOiBSZWluc3RhdGUgYW4gInVudXNlZCIgbGFiZWwgdGhhdCBpcyBhY3R1YWxseQorCisgc3RpbGwgcmVxdWlyZWQuICAocmVmZXJlbmNlZCBpbiBsaW5lIDI3MTApIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiBGaXggdHlwbyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0ODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMDEgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDogbWFrZSBkZXBlbmQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgCisgICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKyAgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTAxICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBDSEFOR0VTLCBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6IGZpeCB4bWwgcXVvdGluZyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvcGFyc2UuYzogZml4IG5vbiBleGlzdGVudCBtYWxsb2MgbWFjcm8gdG8gdXNlIGNhbGxvYworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBBcHBsaWVkIHRoZSBpbnRlbnQgb2YgcGF0Y2ggMzA0NDg4OCB0byBhbGxvdyBhcHBsaWNhdGlvbnMKKyB0byByZWFkIHRoZSBlcnJvciBtZXNzYWdlcyBvZiBhIE1JQiBwYXJzaW5nIGZhaWx1cmUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IAorCisgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMwNjY4NjI6IGZyb20gZmhldzogZml4IHRoZSBhZ2VudCBmb3IKKyBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcyBvZiB0aGUgZGlzayBhbmQgZXh0ZW5kIHRhYmxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IAorCisgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMwNjY4NjI6IGZyb20gZmhldzogZml4IHRoZSBhZ2VudCBmb3IKKyBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcyBvZiB0aGUgZGlzayBhbmQgZXh0ZW5kIHRhYmxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IAorCisgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMwNjY4NjI6IGZyb20gZmhldzogZml4IHRoZSBhZ2VudCBmb3IKKyBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcyBvZiB0aGUgZGlzayBhbmQgZXh0ZW5kIHRhYmxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IAorCisgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMwNjY4NjI6IGZyb20gZmhldzogZml4IHRoZSBhZ2VudCBmb3IKKyBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcyBvZiB0aGUgZGlzayBhbmQgZXh0ZW5kIHRhYmxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMzEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IAorCisgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMwNjY4NjI6IGZyb20gZmhldzogZml4IHRoZSBhZ2VudCBmb3IKKyBjb21wYXJpbmcgdW5zaWduZWQgbGFyZ2UgaW5kZXhlcyBvZiB0aGUgZGlzayBhbmQgZXh0ZW5kIHRhYmxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGhyU1dSdW5QYXRoCisKKyBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMgb24gTGludXguICBmZ2V0cygpIHJldHVybnMgTlVMTCBib3RoIHdoZW4gL3Byb2MvUElEL2NtZGxpbmUgaXMgZW1wdHkgKD0gc3dhcHBlZAorIG91dCkgYW5kIHdoZW4gdGhlIHByb2Nlc3MgZXhpdGVkIGFmdGVyIGZvcGVuKCksIHNvIGNoZWNrCisgL3Byb2MvUElEL3N0YXR1cyBpbiBib3RoIGNhc2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGhyU1dSdW5QYXRoCisKKyBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMgb24gTGludXguICBmZ2V0cygpIHJldHVybnMgTlVMTCBib3RoIHdoZW4gL3Byb2MvUElEL2NtZGxpbmUgaXMgZW1wdHkgKD0gc3dhcHBlZAorIG91dCkgYW5kIHdoZW4gdGhlIHByb2Nlc3MgZXhpdGVkIGFmdGVyIGZvcGVuKCksIHNvIGNoZWNrCisgL3Byb2MvUElEL3N0YXR1cyBpbiBib3RoIGNhc2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGhyU1dSdW5QYXRoCisKKyBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMgb24gTGludXguICBmZ2V0cygpIHJldHVybnMgTlVMTCBib3RoIHdoZW4gL3Byb2MvUElEL2NtZGxpbmUgaXMgZW1wdHkgKD0gc3dhcHBlZAorIG91dCkgYW5kIHdoZW4gdGhlIHByb2Nlc3MgZXhpdGVkIGFmdGVyIGZvcGVuKCksIHNvIGNoZWNrCisgL3Byb2MvUElEL3N0YXR1cyBpbiBib3RoIGNhc2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0zMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIGhyU1dSdW5QYXRoCisKKyBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMgb24gTGludXguICBmZ2V0cygpIHJldHVybnMgTlVMTCBib3RoIHdoZW4gL3Byb2MvUElEL2NtZGxpbmUgaXMgZW1wdHkgKD0gc3dhcHBlZAorIG91dCkgYW5kIHdoZW4gdGhlIHByb2Nlc3MgZXhpdGVkIGFmdGVyIGZvcGVuKCksIHNvIGNoZWNrCisgL3Byb2MvUElEL3N0YXR1cyBpbiBib3RoIGNhc2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogdXAgdGhlIGFudGUgYW5kIHJ1biBvdGhlciB0ZXN0IHN1aXRlcworCisgYmVzaWRlcyBqdXN0IHRoZSBkZWZhdWx0IHNldCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28KKworIHRoZXkgcmV0cnkgcHJvYmluZyBmb3IgYW4gZW5naW5lSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOiBBcHBsaWVkIChyb3VnaGx5KSBwYXRjaCAzMjk5MzcwIHRvIGF2b2lkCisKKyByZXdyaXRpbmcgZXhpc3RpbmcgYXV0aGtleS9wcml2a2V5L2V0Y3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzogQXBwbGllZCB0aGUgaW50ZW50CisgICAgICBvZgorCisgcGF0Y2ggMzI5OTM4NiB3aGljaCBmaXhlcyBkdXBsaWNhdGUgZW50cmllcyBvbiBhIFNJR0hVUC4gIFRvIGFjaGlldmUKKyB0aGlzIHNvbWUgbmV3IGhlYWRlcl9jb21wbGV4IGZ1bmN0aW9ucyBuZWVkZWQgdG8gYmUgY3JlYXRlZCB0aGF0CisgZGlkbid0IGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIG9sZGVyIG9uZXMuICBUaGUgbm90aWZpY2F0aW9uIGNvZGUKKyBub3cgY2FsbHMgdGhlc2UgbmV3ZXIgZnVuY3Rpb25zLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbworCisgdGhleSByZXRyeSBwcm9iaW5nIGZvciBhbiBlbmdpbmVJRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDMyOTkzODQ6IGZpeCBJTkZPUk1zIHNvCisKKyB0aGV5IHJldHJ5IHByb2JpbmcgZm9yIGFuIGVuZ2luZUlELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMzI5OTM4NDogZml4IElORk9STXMgc28KKworIHRoZXkgcmV0cnkgcHJvYmluZyBmb3IgYW4gZW5naW5lSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbworCisgdGhleSByZXRyeSBwcm9iaW5nIGZvciBhbiBlbmdpbmVJRC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQXBwbGllZCAocm91Z2hseSkgcGF0Y2ggMzI5OTM3MCB0byBhdm9pZAorCisgcmV3cml0aW5nIGV4aXN0aW5nIGF1dGhrZXkvcHJpdmtleS9ldGNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQXBwbGllZCAocm91Z2hseSkgcGF0Y2ggMzI5OTM3MCB0byBhdm9pZAorCisgcmV3cml0aW5nIGV4aXN0aW5nIGF1dGhrZXkvcHJpdmtleS9ldGNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQXBwbGllZCAocm91Z2hseSkgcGF0Y2ggMzI5OTM3MCB0byBhdm9pZAorCisgcmV3cml0aW5nIGV4aXN0aW5nIGF1dGhrZXkvcHJpdmtleS9ldGNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQXBwbGllZCAocm91Z2hseSkgcGF0Y2ggMzI5OTM3MCB0byBhdm9pZAorCisgcmV3cml0aW5nIGV4aXN0aW5nIGF1dGhrZXkvcHJpdmtleS9ldGNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaCwgcGVybC9NYWtlZmlsZS5QTDoKKworIE5FV1M6IHNubXBkOiBwYXRjaCAzMTMxMzk3OiBmcm9tIHRha2V2b3M6IGh1Z2Ugc3BlZWR1cHMgb2YgdGhlCisgVENQL1VEUCBUYWJsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBwZXJsL05ldFNOTVAueHM6IEFkZGVkIGEgYm9ndXMgZW1wdHkgLnhzIGZpbGUgZm9yIGJ1bmRsaW5nIG9uCisKKyBuZXdlciBwZXJsIHRoYXQgd2FudHMgInNvbWV0aGluZyIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYzogQ0hBTkdFUzoKKworIHNubXBkOiBwYXRjaCAzMzA2NDc2OiBmcm9tIHRpbnlweXJhbWlkczogZml4IG1lbW9yeSBsZWFrIGluIHRoZQorIHN3cnVuIGNvbnRhaW5lciBsb2FkaW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IHBhdGNoIDMzMDY0NzY6IGZyb20gdGlueXB5cmFtaWRzOiBmaXggbWVtb3J5IGxlYWsgaW4gdGhlCisgc3dydW4gY29udGFpbmVyIGxvYWRpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6IEZvbGxvdy11cCBmb3IgcjIwNDQ5OiB1c2UKKworIE5FVFNOTVBfUFJJbyAidSIgZm9yIHByaW50aW5nIHN1YmlkcyBpbnN0ZWFkIG9mIG9ubHkgTkVUU05NUF9QUklvLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOiBGb2xsb3ctdXAgZm9yIHIyMDQ0OTogdXNlCisKKyBORVRTTk1QX1BSSW8gInUiIGZvciBwcmludGluZyBzdWJpZHMgaW5zdGVhZCBvZiBvbmx5IE5FVFNOTVBfUFJJby4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogTWljcm9zb2Z0CisKKyBWaXN1YWwgU3R1ZGlvOiBMaW5rIHdpdGggZ2RpMzIubGliIGlmIE9wZW5TU0wgaGFzIGJlZW4gZW5hYmxlZAorIGJlY2F1c2UgZ2RpMzIubGliIGlzIGEgZGVwZW5kZW5jeSBvZiBPcGVuU1NMLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ1MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogTWljcm9zb2Z0CisKKyBWaXN1YWwgU3R1ZGlvOiBMaW5rIHdpdGggZ2RpMzIubGliIGlmIE9wZW5TU0wgaGFzIGJlZW4gZW5hYmxlZAorIGJlY2F1c2UgZ2RpMzIubGliIGlzIGEgZGVwZW5kZW5jeSBvZiBPcGVuU1NMLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ1MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBDSEFOR0VTOiBXaW4zMjogTWljcm9zb2Z0CisKKyBWaXN1YWwgU3R1ZGlvOiBMaW5rIHdpdGggZ2RpMzIubGliIGlmIE9wZW5TU0wgaGFzIGJlZW4gZW5hYmxlZAorIGJlY2F1c2UgZ2RpMzIubGliIGlzIGEgZGVwZW5kZW5jeSBvZiBPcGVuU1NMLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDUxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6IEZvbGxvdy11cCBmb3IgcjIwNDQ4OiBzaW5jZSB0aGUKKworICJvaWQiIHR5cGVkZWYgaGFzIGJlZW4gY2hhbmdlZCBiYWNrIGZyb20gdWludDMyX3QgdG8gdV9sb25nLCBjaGFuZ2UKKyBORVRTTk1QX1BSSW8gZnJvbSBORVRTTk1QX1BSSTMyIGludG8gImwiLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ1MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOiBGb2xsb3ctdXAgZm9yIHIyMDQ0ODogc2luY2UgdGhlCisKKyAib2lkIiB0eXBlZGVmIGhhcyBiZWVuIGNoYW5nZWQgYmFjayBmcm9tIHVpbnQzMl90IHRvIHVfbG9uZywgY2hhbmdlCisgTkVUU05NUF9QUklvIGZyb20gTkVUU05NUF9QUkkzMiBpbnRvICJsIi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ1MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOiBDSEFOR0VTOiBzbm1wZDogVXNlIHByb3BlciBmb3JtYXQKKworIHNwZWNpZmllciBpbiBkZWJ1ZyBzdGF0ZW1lbnRzIGZvciBwcmludGluZyB2YWx1ZXMgb2YgdHlwZSAnb2lkJy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzogQ0hBTkdFUzogc25tcGQ6IFVzZSBwcm9wZXIgZm9ybWF0CisKKyBzcGVjaWZpZXIgaW4gZGVidWcgc3RhdGVtZW50cyBmb3IgcHJpbnRpbmcgdmFsdWVzIG9mIHR5cGUgJ29pZCcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6IENIQU5HRVM6IHNubXBkOiBVc2UgcHJvcGVyIGZvcm1hdAorCisgc3BlY2lmaWVyIGluIGRlYnVnIHN0YXRlbWVudHMgZm9yIHByaW50aW5nIHZhbHVlcyBvZiB0eXBlICdvaWQnLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOiBDSEFOR0VTOiBzbm1wZDogVXNlIHByb3BlciBmb3JtYXQKKworIHNwZWNpZmllciBpbiBkZWJ1ZyBzdGF0ZW1lbnRzIGZvciBwcmludGluZyB2YWx1ZXMgb2YgdHlwZSAnb2lkJy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOiByZXZlcnQgT0lEIHR5cGVkZWYgdG8gdV9sb25nIGFzCisKKyBhZ3JlZWQgdG8gb24gLWNvZGVycyBhbmQgaW4gdGhlIGFkbWluIG1lZXRpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOiByZXZlcnQgT0lEIHR5cGVkZWYgdG8gdV9sb25nIGFzCisKKyBhZ3JlZWQgdG8gb24gLWNvZGVycyBhbmQgaW4gdGhlIGFkbWluIG1lZXRpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQ4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTI0ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9zeXN0ZW0uYzogUmVtZW1iZXIgdG8gcmV0dXJuIGluZm8gYWxzbyB3aXRob3V0IEROU1NFQworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jOiBBZGRlZCBOVUxMLWNoZWNrcworCisgYWZ0ZXIgbWFsbG9jIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jOiBBZGRlZCBOVUxMLWNoZWNrcworCisgYWZ0ZXIgbWFsbG9jIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0NDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jOiBBZGRlZCBOVUxMLWNoZWNrcworCisgYWZ0ZXIgbWFsbG9jIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjQgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jOiBBZGRlZCBOVUxMLWNoZWNrcworCisgYWZ0ZXIgbWFsbG9jIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6IENIQU5HRVM6CisKKyBhZ2VudDogQlVHOiAzMzA1MTU3OiBGaXggaXBBZGRyZXNzUHJlZml4IGhhbmRsaW5nIG9mIElQdjYgYWRkcmVzc2VzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjA0NDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jOiBDSEFOR0VTOgorCisgYWdlbnQ6IEJVRzogMzMwNTE1NzogRml4IGlwQWRkcmVzc1ByZWZpeCBoYW5kbGluZyBvZiBJUHY2IGFkZHJlc3NlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQ1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogQlVHOiAzMjk1NDA3OiBGaXgKKworIGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogQlVHOiAzMjk1NDA3OiBGaXgKKworIGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDQ0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogQlVHOiAzMjk1NDA3OiBGaXgKKworIGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzogQ0hBTkdFUzogcHl0aG9uOiBCVUc6IDMyOTU0MDc6IEZpeAorCisgaGFuZGxpbmcgb2Ygdm9pZCBwb2ludGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0NDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEJVRzogMzI2NDg1MjogUmVjb2duaXNlIG1pc3NpbmcgcmVwb3J0IHR5cGVzCisgKHNubXB7VW5hdmFpbGFibGUsVW5rbm93bn1Db250ZXh0cyxzbm1wVW5rbm93blBEVUhhbmRsZXJzKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6CisKKyBzbm1wbGliOiBCVUc6IDMyNjQ4NTI6IFJlY29nbmlzZSBtaXNzaW5nIHJlcG9ydCB0eXBlcworIChzbm1we1VuYXZhaWxhYmxlLFVua25vd259Q29udGV4dHMsc25tcFVua25vd25QRFVIYW5kbGVycykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOgorCisgc25tcGxpYjogQlVHOiAzMjY0ODUyOiBSZWNvZ25pc2UgbWlzc2luZyByZXBvcnQgdHlwZXMKKyAoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEJVRzogMzI2NDg1MjogUmVjb2duaXNlIG1pc3NpbmcgcmVwb3J0IHR5cGVzCisgKHNubXB7VW5hdmFpbGFibGUsVW5rbm93bn1Db250ZXh0cyxzbm1wVW5rbm93blBEVUhhbmRsZXJzKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0NDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEJVRzogMzI2NDg1MjogUmVjb2duaXNlIG1pc3NpbmcgcmVwb3J0IHR5cGVzCisgKHNubXB7VW5hdmFpbGFibGUsVW5rbm93bn1Db250ZXh0cyxzbm1wVW5rbm93blBEVUhhbmRsZXJzKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMsIHNubXBsaWIvc25tcEFsaWFzRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBJUFhEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBTU0hEb21haW4uYywgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogQlVHOiAzMjM0NzU0OiBFbnN1cmUKKyAgICAgIG9sZAorCisgZl9jcmVhdGVfZnJvbV90c3RyaW5nIGhvb2sgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTIwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IEJVRzoKKyAgICAgIDMyMzQ3NTQ6CisKKyBFbnN1cmUgb2xkIGZfY3JlYXRlX2Zyb21fdHN0cmluZyBob29rIGlzIGluaXRpYWxpemVkIHRvIE5VTEwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBCVUc6CisgICAgICAzMjM0NzU0OgorCisgRW5zdXJlIG9sZCBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcgaG9vayBpcyBpbml0aWFsaXplZCB0byBOVUxMIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQ0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0yMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCBzbm1wbGliL3NubXBJUFhEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBTVEREb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzogQ0hBTkdFUzoKKworIHNubXBsaWI6IEJVRzogMzIzNDc1NDogRW5zdXJlIG9sZCBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcgaG9vayBpcworIGluaXRpYWxpemVkIHRvIE5VTEwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQ0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogdXNlICNpZmRlZgorCisgcmF0aGVyIHRoYW4gI2lmIGZvciBkZWZpbmUgY2hlY2tzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQ0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogdXNlICNpZmRlZgorCisgcmF0aGVyIHRoYW4gI2lmIGZvciBkZWZpbmUgY2hlY2tzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQ0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogdXNlICNpZmRlZgorCisgcmF0aGVyIHRoYW4gI2lmIGZvciBkZWZpbmUgY2hlY2tzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQ0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogdXNlICNpZmRlZgorCisgcmF0aGVyIHRoYW4gI2lmIGZvciBkZWZpbmUgY2hlY2tzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiB1c2UgI2lmZGVmCisKKyByYXRoZXIgdGhhbiAjaWYgZm9yIGRlZmluZSBjaGVja3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wX2FwaS4zLmRlZiwgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6IENIQU5HRVM6IG1hbjogQlVHOgorCisgMzE5MDcyNTogRG9jdW1lbnQgc25tcHssX3Nlc3N9c3luY2hfcmVzcG9uc2UgYW5kIHNubXBfYXN5bmNfc2VuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNDQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6IENIQU5HRVM6IG1hbjogQlVHOgorCisgMzE5MDcyNTogRG9jdW1lbnQgc25tcHssX3Nlc3N9c3luY2hfcmVzcG9uc2UgYW5kIHNubXBfYXN5bmNfc2VuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZjogCisKKyBDSEFOR0VTOiBtYW46IEJVRzogMzE5MDcyNTogRG9jdW1lbnQgc25tcHssX3Nlc3N9c3luY2hfcmVzcG9uc2UgYW5kCisgc25tcF9hc3luY19zZW5kIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0NDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmOiAKKworIENIQU5HRVM6IG1hbjogQlVHOiAzMTkwNzI1OiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZSBhbmQKKyBzbm1wX2FzeW5jX3NlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wX2FwaS4zLmRlZiwgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6IENIQU5HRVM6IG1hbjogQlVHOgorCisgMzE5MDcyNTogRG9jdW1lbnQgc25tcHssX3Nlc3N9c3luY2hfcmVzcG9uc2UgYW5kIHNubXBfYXN5bmNfc2VuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcmFjZQorCisgY29uZGl0aW9uIGluIGhyU1dSdW5UYWJsZSBUcmVhdCB0aGUgcmVhZHMgZnJvbSAvcHJvYy88cGlkPi8qCisgY2FyZWZ1bHksIHByb2Nlc3NlcyBjYW4gZXhpdCBpbiB0aGUgbWlkZGxlIG9mIHByb2Nlc3NpbmcuICAoYWxyZWFkeQorIGZpeGVkIGluIFY1LTUtcGF0Y2hlcyBhbmQgVjUtNC1wYXRjaGVzIGluIFNWTiByZXYuIDIwMTE1LCBkdW5ubyB3aHkKKyBJIGRpZCBub3QgcGF0Y2ggdHJ1bmspIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6IENIQU5HRVM6IHNubXBkOiBmaXhlZCByYWNlCisKKyBjb25kaXRpb24gaW4gaHJTV1J1blRhYmxlIFRyZWF0IHRoZSByZWFkcyBmcm9tIC9wcm9jLzxwaWQ+LyoKKyBjYXJlZnVseSwgcHJvY2Vzc2VzIGNhbiBleGl0IGluIHRoZSBtaWRkbGUgb2YgcHJvY2Vzc2luZy4gIChhbHJlYWR5CisgZml4ZWQgaW4gVjUtNS1wYXRjaGVzIGFuZCBWNS00LXBhdGNoZXMgaW4gU1ZOIHJldi4gMjAxMTUsIGR1bm5vIHdoeQorIEkgZGlkIG5vdCBwYXRjaCB0cnVuaykgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDM4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE5ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9zY2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBCVUc6CisKKyAzMTg0Njk3OiBEb24ndCByZWZlcmVuY2UgaW50ZXJuYWwgTUQ1IHdoZW4gaXQncyBleHBsaWNpdGx5IGRpc2FibGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTkgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL3NjYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IEJVRzoKKworIDMxODQ2OTc6IERvbid0IHJlZmVyZW5jZSBpbnRlcm5hbCBNRDUgd2hlbiBpdCdzIGV4cGxpY2l0bHkgZGlzYWJsZWQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDM3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTE2ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogbWFrZSBzdXJlIHdlIGdldCB0aGUgaGludCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9SVU5URVNUUzogRm9sbG93LXVwIGZvciByMjA0MzI6IHRlc3RpbmcvUlVOVEVTVFMgd2l0aG91dAorCisgYXJndW1lbnRzIHdvcmtzIGFnYWluIGFzIGl0IHNob3VsZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6IEZvbGxvdy11cCBmb3IgcjIwNDMyOiB0ZXN0aW5nL1JVTlRFU1RTIHdpdGhvdXQKKworIGFyZ3VtZW50cyB3b3JrcyBhZ2FpbiBhcyBpdCBzaG91bGQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzogUmFuCisKKyBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMgdGhyb3VnaCBkb3MydW5peC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlOiBGaXhlZCBhIHR5cG8gaW4gYQorCisgY29tbWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZTogRml4ZWQgYSB0eXBvIGluIGEKKworIGNvbW1lbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6IFJVTlRFU1RTIHdvcmtzIGFnYWluIGZvciB0ZXN0cyB3aXRoIGEgZm91ci1kaWdpdAorCisgbnVtYmVyLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9SVU5URVNUUzogUlVOVEVTVFMgd29ya3MgYWdhaW4gZm9yIHRlc3RzIHdpdGggYSBmb3VyLWRpZ2l0CisKKyBudW1iZXIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc3lzdGVtLmM6IEZpeGVkIGEgcmVjZW50bHkgaW50cm9kdWNlZCBidWcgaW4KKworIG5ldHNubXBfZ2V0YWRkcmluZm8oKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQzMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6IERvY3VtZW50IHRoYXQgdGhlIHVjZC1zbm1wCisKKyBkaXNraW8gY29kZSBzdGlsbCBoYXMgdG8gYmUgbW9kaWZpZWQgc3VjaCB0aGF0IGRpc2tpb19mcmVlX2NvbmZpZygpCisgZ2V0cyBpbnZva2VkIHVwb24gU0lHSFVQLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6IERvY3VtZW50IHRoYXQgdGhlIHVjZC1zbm1wCisKKyBkaXNraW8gY29kZSBzdGlsbCBoYXMgdG8gYmUgbW9kaWZpZWQgc3VjaCB0aGF0IGRpc2tpb19mcmVlX2NvbmZpZygpCisgZ2V0cyBpbnZva2VkIHVwb24gU0lHSFVQLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogZml4IGNhc3QgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5jOiBSZXZlcnQgMjA0MjAgIkNIQU5HRVM6IHNubXBkOiBGaXhlZCBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCCisKKyB0YWJsZXMgaW50cm9kdWNlZCBieSBwYXRjaCAjMzA1MzQzNi4iIFJldmVydCAxOTcwOCAiQ0hBTkdFUzogc25tcGQ6CisgUEFUQ0g6IDMwNTM0MzY6IGZyb206IHRha2V2b3M6IGZpeDogdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzCisgaW52YWxpZCBtZW1vcnkgYWNjZXNzIiB0aGUgYnVnIDMwNTM0MzYgaXMgZml4aW5nIHdhcyBpbnRyb2R1Y2VkIGluIHIxNzcxOSwgYW5kIGZpeGVkIGluCisgcjE3ODYxLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIAorICAgICAgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczIsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N5c3RlbS5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6IG1vcmUgZG5zIHJlbGF0ZWQgdHdlYWtzICAtCisgICAgICBhZGQgbmV0c25tcF9nZXRob3N0YnlhZGRyICAtIGFsd2F5cyBkZWZpbmUgbmV0c25tcF8qIHZlcnNpb25zOworICAgICAgbG9nb25jZSBpZiB1bmRlcmx5aW5nICAgIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgIC0gdXNlIG5ldworICAgICAgZnVuY3Rpb25zIGluIGRpc21hbiBtaWJzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgc25tcGxpYi9zbm1wdjMuYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6IHVzZSBuZXcgbmV0c25tcCBkbnMKKworIGZ1bmN0aW9ucyBpbiBhcHBzL3NubXBsaWIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDI2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBzbm1wbGliL3N5c3RlbS5jOiBtb3ZlIEROU1NFQworCisgdmFsaWRhdGlvbiBpbnRvIHJlc29sdmVyIHdyYXBwZXIgZnVuY3Rpb25zICAgLSBhbGxvd3Mgb3RoZXIgY29kZSB0byBiZW5lZml0IGZyb20gdmFsaWRhdGlvbiAgIC0gbmV3IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZSwgbmV0c25tcF9nZXRhZGRyaW5mbyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbWliLmM6IEZvbGxvdy11cCBmb3IgcjIwNDE3OiByZXBsYWNlZCBhIG1hbGxvYygpL2ZyZWUoKQorCisgcGFpciBieSBhIGNhbGwgdG8gcmVhbGxvYygpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9taWIuYzogRm9sbG93LXVwIGZvciByMjA0MTc6IHJlcGxhY2VkIGEgbWFsbG9jKCkvZnJlZSgpCisKKyBwYWlyIGJ5IGEgY2FsbCB0byByZWFsbG9jKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL21pYi5jOiBGb2xsb3ctdXAgZm9yIHIyMDQxNzogcmVwbGFjZWQgYSBtYWxsb2MoKS9mcmVlKCkKKworIHBhaXIgYnkgYSBjYWxsIHRvIHJlYWxsb2MoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jOiBGaXggZm9yIFJIRUw0CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOiBIZWFkZXIgZmlkZGxpbmcgZm9yIHRoZQorCisgYmVuZWZpdCBvZiBSSEVMNCwgU29sYXJpcywgT3BlbkJTRCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hCisgICAgICAgY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5jOiBDSEFOR0VTOiBzbm1wZDogRml4ZWQgbWVtb3J5IGxlYWsgaW4gVENQLU1JQiB0YWJsZXMKKyAgICAgIGludHJvZHVjZWQKKworIGJ5IHBhdGNoICMzMDUzNDM2LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDQyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmM6IENIQU5HRVM6IHNubXBkOiBGaXhlZCBtZW1vcnkgbGVhayBpbiBUQ1AtTUlCIHRhYmxlcworICAgICAgaW50cm9kdWNlZAorCisgYnkgcGF0Y2ggIzMwNTM0MzYuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOiBSZXZlcnRlZCBhY2NpZGVudGFsbHkgY29tbWl0dGVkCisKKyBjaGFuZ2VzIG9mIHIyMDQxMi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyBzbm1wX2ZyZWVfc2Vzc2lvbigpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyBzbm1wX2ZyZWVfc2Vzc2lvbigpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyBzbm1wX2ZyZWVfc2Vzc2lvbigpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluCisKKyBzbm1wX2ZyZWVfc2Vzc2lvbigpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL21pYi5jOiBDSEFOR0VTOiBzbm1wbGliOiBfbWliaW5kZXhfYWRkKCkgbm8gbG9uZ2VyIHJlYWRzCisKKyBwYXN0IHRoZSBlbmQgb2YgdGhlIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhcnJheSBfbWliaW5kZXhlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbWliLmM6IENIQU5HRVM6IHNubXBsaWI6IF9taWJpbmRleF9hZGQoKSBubyBsb25nZXIgcmVhZHMKKworIHBhc3QgdGhlIGVuZCBvZiB0aGUgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFycmF5IF9taWJpbmRleGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQxNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogX21pYmluZGV4X2FkZCgpIG5vIGxvbmdlciByZWFkcworCisgcGFzdCB0aGUgZW5kIG9mIHRoZSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYXJyYXkgX21pYmluZGV4ZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbGNkX3RpbWUuYzogQXZvaWQgdGhhdCBNU1ZDIHRyaWdnZXJzIGEgY29tcGlsZXIgd2FybmluZyBvbgorCisgdGhlIGNvZGUgaW4gc25tcGxpYi9sY2RfdGltZS5jLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jOiBBdm9pZAorCisgcmVhZGluZyBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBOZXRUb01lZGlhVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBOZXRUb01lZGlhVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwNDE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBOZXRUb01lZGlhVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNDE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbgorCisgdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBOZXRUb01lZGlhVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5CisKKyBsZWFrIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlmVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeQorCisgbGVhayBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpZlRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkKKworIGxlYWsgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaWZUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5CisKKyBsZWFrIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlmVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jOiBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhaworCisgaW4gdGhlIE5ldC1TTk1QIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJCisgaXBBZGRyVGFibGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNDEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYzogQ0hBTkdFUzogV2luMzI6IEZpeGVkIGEgbWVtb3J5IGxlYWsKKworIGluIHRoZSBOZXQtU05NUCAobm9uLXdpbkV4dERMTCkgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSQorIGlwQWRkclRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmM6IENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrCisKKyBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkKKyBpcEFkZHJUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDogCisKKyBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgTmV0LVNOTVAgKG5vbi13aW5FeHRETEwpCisgaW1wbGVtZW50YXRpb24gb2YgdGhlIE1JQi1JSSBpcEFkZHJUYWJsZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiBEb2N1bWVudGF0aW9uIC8gc291cmNlIGNvZGUgY29tbWVudCBzcGVsbGluZyBmaXg6CisKKyBleGl0ZW50IC0+IGV4aXN0ZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDQxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nLCBzbm1wbGliL21pYi5jOiBEb2N1bWVudGF0aW9uIC8gc291cmNlIGNvZGUgY29tbWVudAorCisgc3BlbGxpbmcgZml4OiBleGl0ZW50IC0+IGV4aXN0ZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDQxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nLCBzbm1wbGliL21pYi5jOiBEb2N1bWVudGF0aW9uIC8gc291cmNlIGNvZGUgY29tbWVudAorCisgc3BlbGxpbmcgZml4OiBleGl0ZW50IC0+IGV4aXN0ZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDQxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nLCBzbm1wbGliL21pYi5jOiBEb2N1bWVudGF0aW9uIC8gc291cmNlIGNvZGUgY29tbWVudAorCisgc3BlbGxpbmcgZml4OiBleGl0ZW50IC0+IGV4aXN0ZW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmM6IENIQU5HRVM6IFdpbjMyOiBCdWlsZAorCisgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jIG9ubHkgaWYgTkVUU05NUF9FTkFCTEVfSVBWNgorIGhhcyBiZWVuIGRlZmluZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIGNvbmZpZ3VyZSwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZTogaW5zdGFsbCB0aGUgYnVpbHQgZmVhdHVyZQorCisgaGVhZGVycyB0b28gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDA5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlOiBDSEFOR0VTOgorCisgdGVzdGluZzogVGVzdHMgMDI1IGFuZCAwMjYgcGFzcyBvbiBNaW5HVyBldmVuIGlmIHdpbkV4dERMTCBoYXMgYmVlbgorIGVuYWJsZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZTogVDA2NSByb2J1c3RuZXNzCisKKyBpbXByb3ZlbWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfdm9pZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuaDogQ0hBTkdFUzogc25tcGQ6IHVjZF9zbm1wIGJ1aWxkcworCisgYWdhaW4gb24gTWluR1cgYW5kIEN5Z3dpbi4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IGluc3RhbGwgdGhlIG5ldC1zbm1wLWZlYXR1cmVzLmggZmlsZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOiBJbXByb3ZlZCB0ZXN0CisKKyByb2J1c3RuZXNzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOiBDb21waWxlciB3YXJuaW5nIGZpeGVzLiAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA0MDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBNaW5HVzogYXZvaWQgdGhhdCBnY2MgY29tcGxhaW5zIGFib3V0IHBhc2luZworCisgYSAoY2hhciAqKSBhcmd1bWVudCB3aGlsZSAodW5zaWduZWQgY2hhciAqKSBpcyBleHBlY3RlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA0MDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBNaW5HVzogYXZvaWQgdGhhdCBnY2MgY29tcGxhaW5zIGFib3V0IHBhc2luZworCisgYSAoY2hhciAqKSBhcmd1bWVudCB3aGlsZSAodW5zaWduZWQgY2hhciAqKSBpcyBleHBlY3RlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA0MDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBNaW5HVzogYXZvaWQgdGhhdCBnY2MgY29tcGxhaW5zIGFib3V0IHBhc2luZworCisgYSAoY2hhciAqKSBhcmd1bWVudCB3aGlsZSAodW5zaWduZWQgY2hhciAqKSBpcyBleHBlY3RlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA0MDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBNaW5HVzogYXZvaWQgdGhhdCBnY2MgY29tcGxhaW5zIGFib3V0IHBhc2luZworCisgYSAoY2hhciAqKSBhcmd1bWVudCB3aGlsZSAodW5zaWduZWQgY2hhciAqKSBpcyBleHBlY3RlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDQwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90b29scy5jOiBBdm9pZCBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyBpZiB0aGUgbGFzdCBjaGFyCisKKyBvZiB0aW1lX3N0cmluZyBpcyBpbiB0aGUgcmFuZ2UgMHg4MC4uMHhmZSBhbmQgY2hhciBpcyBhIHNpZ25lZCB0eXBlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDAxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6IFJldmVydGVkIHIyMDM4MCBiZWNhdXNlIGl0IGJyZWFrcworCisgYWxsIHN0YXRlbWVudHMgdGhhdCBwcmludCBhbiBPSUQgc3ViLUlEIG9uIGFueSA2NC1iaXQgcGxhdGZvcm0uIFRoZQorIGVmZmVjdCBvZiByMjAzODAgb24gYmlnIGVuZGlhbiBhcmNoaXRlY3R1cmVzIHdhcyB0aGF0IGEgIjAiIHdvdWxkIGJlCisgcHJpbnRlZCBpbnN0ZWFkIG9mIHRoZSBPSUQgc3ViLUlEIChhdCBsZWFzdCB3aXRoIHRoZSBMUDY0IGFuZCB0aGUKKyBJTFA2NCBtb2RlbHMpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNDAwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTLCBORVdTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM4NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6IG1ha2UKKworIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMTAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6IEMrKyAtPiBDIGNvbW1lbnRzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogTkVXUyB1cGRhdGUgZm9yIDUuNyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oOiByZXZlcnQgdGhlIG9pZCB0eXBlZGVmIHJlc2l6aW5nCisKKyBmcm9tIHIxNzgwOSBiZWNhdXNlIGl0IGJyb2tlIGJhY2t3YXJkcyBjb21wYXQsIGFzIHBvaW50ZWQgb3V0IGJ5CisgdXNlcnMgb24gdGhlIC1jb2RlcnMgbGlzdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogdXNlIHByb3BlciBhdXRvY29uZiB2ZXJzaW9uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLAorICAgICAgIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbTogVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUudG9wOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogYWRkZWQgYSBtaXNzaW5nIDAgaW4gdGhlIHJldmlzaW9uIGRhdGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmM6IFVzZSBzeW1ib2xpYworCisgbmFtZWQgZm9yIGlmVHlwZSB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDM3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jOiBVc2Ugc3ltYm9saWMKKworIG5hbWVkIGZvciBpZlR5cGUgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYzogVXNlIHN5bWJvbGljCisKKyBuYW1lZCBmb3IgaWZUeXBlIHZhbHVlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmM6IFVzZSBzeW1ib2xpYworCisgbmFtZWQgZm9yIGlmVHlwZSB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jOiBVc2Ugc3ltYm9saWMKKworIG5hbWVkIGZvciBpZlR5cGUgdmFsdWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9yZmNtaWJzLmRpZmY6IElBTkEgaGFzIGZpeGVkIHRoZQorCisgSUFOQS1JUFBNLU1FVFJJQ1MtUkVHSVNUUlktTUlCIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvcmZjbWlicy5kaWZmOiBJQU5BIGhhcyBmaXhlZCB0aGUKKworIElBTkEtSVBQTS1NRVRSSUNTLVJFR0lTVFJZLU1JQiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogYWRkZWQgYSBuZXcgUkVWSVNJT04gY2xhdXNlIHRvIGxpc3QgdGhlCisKKyBjaGFuZ2VzIGluIHRoZSB0aGUgcmVjZW50IHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IGFkZGVkIHBpbmcvdHJhY2Vyb3V0ZSBtaWJzIG5vdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6IHdlIGFjdHVhbGx5IHdhbnQgdG8gdXNlIHRoZSBiYXNlCisKKyBPSUQgYXMgdGhlIHN0YXJ0aW5nIHBvaW50LCBub3QgdGhlIHJlZyBPSUQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6IGZpeGVkIHRoZSBwcm94eSBzdXBwb3J0IHRvIGRvIGEKKworIHByb3BlciBPSUQgbGVzcyB0aGFuIE9JRCBjb21wYXJlLiAgV2UgYWN0dWFsbHkgZG9uJ3QgY2FyZSBhYm91dCB0aGUKKyBsZW5ndGggb2YgdGhlIG9yaWdpbmFsIHJlcXVlc3QsIG9ubHkgdGhhdCBpdCB3YXMgYmVmb3JlIHRoZQorIHJlZ2lzdGVyZWQgcmViYXNlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzogQ0hBTkdFUzogcGF0Y2ggMzE0MDgzMzogZnJvbQorCisganNhZnJhbmVrOiBmaXggcHJveHkgR0VUTkVYVCByZXF1ZXN0cyBXaGVuIE9JRHMgcmVxdWVzdGVkIGFyZSBiZWxvdworIHRoZSBwcm94eSByZXF1ZXN0IHJlbWFwLCB3ZSBuZWVkIHRvIG5vdCBpbmNsdWRlIGFueSBPSURzIHRoYXQgbWlnaHQKKyBiZSBpbiB0aGUgc3BhY2UgYmV0d2VlbiB0aGUgb3JpZ2luYWwgT0lEIGFuZCB0aGUgcmVtYXBwZWQgT0lELiAgVGhpcworIHBhdGNoIGZ1ZGdlcyB0aGUgcmVxdWVzdCBzbyB0aGF0IGl0IGZpeGVzIHRoZSByZXF1ZXN0IE9JRCBzbyBpdCdzCisganVzdCBiZWZvcmUgdGhlIHJlbWFwcGVkIHByb3h5IHJhbmdlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgsIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKyAgICAgIE5FV1M6CisKKyBQQVRDSCAzMTY3MzI1OiBmcm9tIGtyaXN6dG9mb3JvOiBVQ0QtU05NUC9TeXN0ZW1TdGF0czogYWRkIHZhcmlhYmxlcworIHRvIHJlcG9ydCBjcHVzdGVhbCwgY3B1Z3Vlc3QsIGNwdWd1ZXN0bmljZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYzogQ0hBTkdFUzogcGF0Y2gKKworIDMxODQwMjY6IGZyb20gZWl2bmFlczogQXZvaWQgY29uc3RhbnQgcmVmcmVzaCBvZiBpbnRlcmZhY2UKKyBzdGF0aXN0aWNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM2NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgYXBwcy9zbm1wZGVsdGEuYywgc25tcGxpYi9zY2FwaS5jLCAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jOiBGaXhlZAorICAgICAgc2V2ZXJhbAorCisgY29tcGlsZXIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgdGhlIE1TVkMgY29tcGlsZXIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2dldHRpbWVvZmRheS5jOiBXaW4zMi9NU1ZDOiBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcuIAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOiBDSEFOR0VTOiBhZ2VudDogRml4ZWQgYQorCisgeWVhci0yMDM4IGJ1ZyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YgaXBSb3V0ZVRhYmxlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzY0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmM6IEZpeAorCisgd2FybmluZ3MgYW5kIGRhdGEgZm9ybWF0IGZvciBEYXRlQW5kVGltZSBvYmplY3RzLiAgVGhlc2UgbW9kdWxlcworIHdvcmssIGJ1dDogLSBUaGV5IGFyZSBMaW51eCBvbmx5IC0gUm93cyBtdXN0IGJlIGNyZWF0ZWQgd2l0aCByb3dTdGF0dXMgY3JlYXRlQW5kV2FpdCBiZWZvcmUgdGhleSBhcmUKKyBwb3B1bGF0ZWQgLSBBZ2VudCBtdXN0IHJ1biBhcyByb290IC0gQWdlbnQgaXMgYmxvY2tlZCB3aGlsZSB0ZXN0cyBydW4gLSBEYXRhIGZvcm1hdCBmb3IgSW5ldEFkZHJlc3Mgb2JqZWN0cyBpcyB3cm9uZy4gSXQgaXMgQVNDSUksIG5vdAorICAgYmluYXJ5IChtYWtpbmcgaXQgZWFzaWVyIHRvIHVzZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCAuLi4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYzogRml4CisKKyB3YXJuaW5ncyBhbmQgZGF0YSBmb3JtYXQgZm9yIERhdGVBbmRUaW1lIG9iamVjdHMuICBUaGVzZSBtb2R1bGVzCisgd29yaywgYnV0OiAtIFRoZXkgYXJlIExpbnV4IG9ubHkgLSBSb3dzIG11c3QgYmUgY3JlYXRlZCB3aXRoIHJvd1N0YXR1cyBjcmVhdGVBbmRXYWl0IGJlZm9yZSB0aGV5IGFyZQorIHBvcHVsYXRlZCAtIEFnZW50IG11c3QgcnVuIGFzIHJvb3QgLSBBZ2VudCBpcyBibG9ja2VkIHdoaWxlIHRlc3RzIHJ1biAtIERhdGEgZm9ybWF0IGZvciBJbmV0QWRkcmVzcyBvYmplY3RzIGlzIHdyb25nLiBJdCBpcyBBU0NJSSwgbm90CisgICBiaW5hcnkgKG1ha2luZyBpdCBlYXNpZXIgdG8gdXNlIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYnV0IC4uLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM2MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jOiBGaXgKKworIHdhcm5pbmdzIGFuZCBkYXRhIGZvcm1hdCBmb3IgRGF0ZUFuZFRpbWUgb2JqZWN0cy4gIFRoZXNlIG1vZHVsZXMKKyB3b3JrLCBidXQ6IC0gVGhleSBhcmUgTGludXggb25seSAtIFJvd3MgbXVzdCBiZSBjcmVhdGVkIHdpdGggcm93U3RhdHVzIGNyZWF0ZUFuZFdhaXQgYmVmb3JlIHRoZXkgYXJlCisgcG9wdWxhdGVkIC0gQWdlbnQgbXVzdCBydW4gYXMgcm9vdCAtIEFnZW50IGlzIGJsb2NrZWQgd2hpbGUgdGVzdHMgcnVuIC0gRGF0YSBmb3JtYXQgZm9yIEluZXRBZGRyZXNzIG9iamVjdHMgaXMgd3JvbmcuIEl0IGlzIEFTQ0lJLCBub3QKKyAgIGJpbmFyeSAobWFraW5nIGl0IGVhc2llciB0byB1c2UgZnJvbSB0aGUgY29tbWFuZCBsaW5lLCBidXQgLi4uKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA4ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmM6IEZpeAorCisgd2FybmluZ3MgYW5kIGRhdGEgZm9ybWF0IGZvciBEYXRlQW5kVGltZSBvYmplY3RzLiAgVGhlc2UgbW9kdWxlcworIHdvcmssIGJ1dDogLSBUaGV5IGFyZSBMaW51eCBvbmx5IC0gUm93cyBtdXN0IGJlIGNyZWF0ZWQgd2l0aCByb3dTdGF0dXMgY3JlYXRlQW5kV2FpdCBiZWZvcmUgdGhleSBhcmUKKyBwb3B1bGF0ZWQgLSBBZ2VudCBtdXN0IHJ1biBhcyByb290IC0gQWdlbnQgaXMgYmxvY2tlZCB3aGlsZSB0ZXN0cyBydW4gLSBEYXRhIGZvcm1hdCBmb3IgSW5ldEFkZHJlc3Mgb2JqZWN0cyBpcyB3cm9uZy4gSXQgaXMgQVNDSUksIG5vdAorICAgYmluYXJ5IChtYWtpbmcgaXQgZWFzaWVyIHRvIHVzZSBmcm9tIHRoZSBjb21tYW5kIGxpbmUsIGJ1dCAuLi4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDggIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYzogRml4CisKKyB3YXJuaW5ncyBhbmQgZGF0YSBmb3JtYXQgZm9yIERhdGVBbmRUaW1lIG9iamVjdHMuICBUaGVzZSBtb2R1bGVzCisgd29yaywgYnV0OiAtIFRoZXkgYXJlIExpbnV4IG9ubHkgLSBSb3dzIG11c3QgYmUgY3JlYXRlZCB3aXRoIHJvd1N0YXR1cyBjcmVhdGVBbmRXYWl0IGJlZm9yZSB0aGV5IGFyZQorIHBvcHVsYXRlZCAtIEFnZW50IG11c3QgcnVuIGFzIHJvb3QgLSBBZ2VudCBpcyBibG9ja2VkIHdoaWxlIHRlc3RzIHJ1biAtIERhdGEgZm9ybWF0IGZvciBJbmV0QWRkcmVzcyBvYmplY3RzIGlzIHdyb25nLiBJdCBpcyBBU0NJSSwgbm90CisgICBiaW5hcnkgKG1ha2luZyBpdCBlYXNpZXIgdG8gdXNlIGZyb20gdGhlIGNvbW1hbmQgbGluZSwgYnV0IC4uLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgcGVybC9TTk1QL1NOTVAueHM6IFJlbW92ZWQgYW4gdW51c2VkIGxhYmVsIGZyb20gcGVybC9TTk1QL1NOTVAueHMuCisgICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgcGVybC9TTk1QL1NOTVAueHM6IFJlbW92ZWQgYW4gdW51c2VkIGxhYmVsIGZyb20gcGVybC9TTk1QL1NOTVAueHMuCisgICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgcGVybC9TTk1QL1NOTVAueHM6IFJlbW92ZWQgYW4gdW51c2VkIGxhYmVsIGZyb20gcGVybC9TTk1QL1NOTVAueHMuCisgICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgcGVybC9TTk1QL1NOTVAueHM6IFJlbW92ZWQgYW4gdW51c2VkIGxhYmVsIGZyb20gcGVybC9TTk1QL1NOTVAueHMuCisgICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmg6IENIQU5HRVM6IHNubXBkOiBEZWNsYXJlIHRoZSBPSUQKKworIGFyZ3VtZW50IHR5cGUgb2YgTUlCIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYXMgJ2NvbnN0IG9pZCAqJyBpbnN0ZWFkCisgb2YgJ29pZCAqJyBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgZG8gbm90IG1vZGlmeSB0aGUgT0lELiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6IFVzZSB0aGUgY29ycmVjdCBkYXRhIHR5cGUgZm9yCisKKyB0aGUgJ2NhY2hlIGV4cGlyZWQnIHZhcmlhYmxlOiBjaGFyIGluc3RlYWQgb2YgaW50LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMKKworIGludHJvZHVjZWQgaW4gcjIwMTUxLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzU5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogV2luMzI6IGltcHJvdmVkIHNvdXJjZSBjb2RlIGNvbnNpc3RlbmN5IGJ5CisKKyB1c2luZyBMUENUU1RSIGluc3RlYWQgb2YgTFBDU1RSLiBOb3RlOiB0aGlzIGRvZXMgbm90IG1lYW4gdGhhdAorIFVuaWNvZGUgYnVpbGRzIGFyZSBzdXBwb3J0ZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzU4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogV2luMzI6IGltcHJvdmVkIHNvdXJjZSBjb2RlIGNvbnNpc3RlbmN5IGJ5CisKKyB1c2luZyBMUENUU1RSIGluc3RlYWQgb2YgTFBDU1RSLiBOb3RlOiB0aGlzIGRvZXMgbm90IG1lYW4gdGhhdAorIFVuaWNvZGUgYnVpbGRzIGFyZSBzdXBwb3J0ZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jOiBBZGQgZmlsZQorCisgZm9yZ290dGVuIGluIHIyMDM1MyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOiBSZXZlcnRlZCBhIGNoYW5nZSB0aGF0IHdhcworCisgY29tbWl0dGVkIGFjY2lkZW50YWxseSBpbiByMjAyNzYuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzU2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogRml4ZWQgdHdvIGNvbXBpbGVyCisKKyB3YXJuaW5ncy4gIChCYWNrcG9ydGVkIHIyMDIzNiBmcm9tIHRoZSB0cnVuay4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzNTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOiBDb21tZW50ZWQgb3V0IGFuIHVudXNlZCBmdW5jdGlvbgorCisgYmVjYXVzZSB0aGUgY29tcGlsZXIgY29tcGxhaW5lZCBhYm91dCBpdC4gIChCYWNrcG9ydGVkIHIyMDIzNyBmcm9tCisgdGhlIHRydW5rLikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDM1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhXworICAgICAgIGFjY2Vzcy5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzEyNTk2OgorCisgZnJvbSBmYWJsZWQ4MDogbGlzdGVuIGZvciBuZXRsaW5rIGNoYW5nZSBldmVudHMgZm9yIHRoZSBhcnAtcmVsYXRlZAorIHRhYmxlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzNTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaDogTkVXUzogUEFUQ0gKKworIDMxOTg3ODE6IGZyb20gZmVubmVyOiBHZXQgZGlzbWFuL3BpbmcgYW5kIGRpc21hbi90cmFjZXJvdXRlIHRvIGF0CisgbGVhc3QgY29tcGlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMzUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmg6IE5FV1M6IFBBVENICisKKyAzMTk4NzgxOiBmcm9tIGZlbm5lcjogR2V0IGRpc21hbi9waW5nIGFuZCBkaXNtYW4vdHJhY2Vyb3V0ZSB0byBhdAorIGxlYXN0IGNvbXBpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDM1MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oOiBORVdTOiBQQVRDSAorCisgMzE5ODc4MTogZnJvbSBmZW5uZXI6IEdldCBkaXNtYW4vcGluZyBhbmQgZGlzbWFuL3RyYWNlcm91dGUgdG8gYXQKKyBsZWFzdCBjb21waWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaDogTkVXUzogUEFUQ0gKKworIDMxOTg3ODE6IGZyb20gZmVubmVyOiBHZXQgZGlzbWFuL3BpbmcgYW5kIGRpc21hbi90cmFjZXJvdXRlIHRvIGF0CisgbGVhc3QgY29tcGlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzogTkVXUzogc25tcGxpYjogYWRkIG9wdGlvbmFsIHN1cHBvcnQgZm9yIGxvY2FsCisKKyBETlNTRUMgdmFsaWRhdGlvbiBvZiBob3N0bmFtZXMgIC0gb3B0aW9uYWwgYXQgY29uZmlndXJlIHRpbWU6IC0td2l0aC1sb2NhbC1kbnNzZWMtdmFsaWRhdGlvbiAgLSByZXF1aXJlcyBETlNTRUMtVG9vbCB2YWxpZGF0aW9uIGxpYnJhcmllcyAgLSBpbml0aWFsIHN1cHBvcnQsIGZvciBzeXN0ZW1zIHdpdGggZ2V0YWRkcmluZm8uIHN1cHBvcnQgZm9yCisgICAgYWRkaXRpb25hbCByZXNvbHZlciBpbnRlcmZhY2VzIGNvbWluZyBzb29uLiAgIC0gYWxzbyBUT0RPOiBmbGFnIGZvciBpZ25vcmluZyB2YWxpZGF0b2luIGVycm9ycyAobG9nICYgY29udGludWUpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM1MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oOiBtb3ZlIHVudXNlZCAoYW5kIHRvbyBnZW5lcmljKQorCisgdG9rZW4gd2l0aGluIFVDRF9DT01QQVRJQkxFIGlmZGVmICAgLSBNQVhMQUJFTCBjb25mbGljdHMgd2l0aCA8YXJwYS9uYW1lc2VyLmg+ICAgLSBhZGRlZCBORVRTTk1QX01BWExBQkVMIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM1MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCBjb25maWd1cmUsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IHVwZGF0ZSBjb25maWd1cmUvTWFrZWZpbGVzCisKKyBmb3IgRE5TU0VDIGxvY2FsIHZhbGlkYXRpb24gb3B0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOiBtYWtlIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzNDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6IHJlbW92ZWQgdGhlCisKKyBhY2NpZGVudGFsIGJyb2tlbiBmZWF0dXJlIHJlcXVpcmUgbGluZSB0aGF0IGdvdCBoYWxmIGluc2VydGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDM0MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDSEFOR0VTOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzNDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzMzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOiBtYWtlIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzMzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOiBkb2N1bWVudGF0aW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzMzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAzMzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBGaXggaW5jb21wbGV0ZSB1bmluc3RhbGwKKworIGNvbmZpZ3VyYXRpb246IC0gYnJva2VuIHJlbW92YWwgb2YgTWljcm9zb2Z0IERMTCAtIHJlbW92ZSBhc3NvcnRlZCBuZXcgTUlCcyBhbmQgaGVhZGVyIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBGaXggaW5jb21wbGV0ZSB1bmluc3RhbGwKKworIGNvbmZpZ3VyYXRpb246IC0gYnJva2VuIHJlbW92YWwgb2YgTWljcm9zb2Z0IERMTCAtIHJlbW92ZSBhc3NvcnRlZCBuZXcgTUlCcyBhbmQgaGVhZGVyIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBGaXggaW5jb21wbGV0ZSB1bmluc3RhbGwKKworIGNvbmZpZ3VyYXRpb246IC0gYnJva2VuIHJlbW92YWwgb2YgTWljcm9zb2Z0IERMTCAtIHJlbW92ZSBhc3NvcnRlZCBuZXcgTUlCcyBhbmQgaGVhZGVyIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAzMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpOiBGaXggaW5jb21wbGV0ZSB1bmluc3RhbGwKKworIGNvbmZpZ3VyYXRpb246IC0gYnJva2VuIHJlbW92YWwgb2YgTWljcm9zb2Z0IERMTCAtIHJlbW92ZSBhc3NvcnRlZCBuZXcgTUlCcyBhbmQgaGVhZGVyIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEZpeCBpbmNvbXBsZXRlIHVuaW5zdGFsbAorCisgY29uZmlndXJhdGlvbjogLSBicm9rZW4gcmVtb3ZhbCBvZiBNaWNyb3NvZnQgRExMIC0gcmVtb3ZlIGFzc29ydGVkIG5ldyBNSUJzIGFuZCBoZWFkZXIgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDMzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogU3VwcG9ydCBUYXIvR1ppcCBjb21tYW5kIHBhdGhzCisKKyBjb250YWluaW5nIHNwYWNlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMzM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBTdXBwb3J0IFRhci9HWmlwIGNvbW1hbmQgcGF0aHMKKworIGNvbnRhaW5pbmcgc3BhY2VzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzMzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFN1cHBvcnQgVGFyL0daaXAgY29tbWFuZCBwYXRocworCisgY29udGFpbmluZyBzcGFjZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA2ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDogUmVwb3J0IEdaaXAgY29tbWFuZCBjb3JyZWN0bHkKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDMzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6IFJlcG9ydCBHWmlwIGNvbW1hbmQgY29ycmVjdGx5CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDYgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsOiBSZXBvcnQgR1ppcCBjb21tYW5kIGNvcnJlY3RseQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jOiBGaXggZm9yIERyYWdvbkZseSBCU0QgKGRvZXMKKyAgICAgIG5vdAorCisgZGVmaW5lIElQX1NFTkRTUkNBRERSKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMzMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4uYzogRml4IGZvciBEcmFnb25GbHkgQlNEIChkb2VzCisgICAgICBub3QKKworIGRlZmluZSBJUF9TRU5EU1JDQUREUikgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oOiBGaXggc3BlbGxpbmcgb2YKKworIFNPX1JFQ1ZEU1RBRERSIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzMzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg6IEZpeCBzcGVsbGluZyBvZgorCisgU09fUkVDVkRTVEFERFIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsIG1hbi9zbm1wLmNvbmYuNS5kZWYsIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOiBORVdTOiBhcHBzOiBhZGQgc25tcC5jb25mIHRva2VucyBmb3IgdGltZW91dHMKKworIGFuZCByZXRyaWVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMzMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90b29scy5jLCB0ZXN0aW5nL1RFU1RDT05GLnNoOiBDSEFOR0VTOiBNaW5HVzogTWFkZQorCisgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUgTmV0LVNOTVAgdmFyaWFibGVzIGRlZmluZWQKKyBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4gU29tZSB0ZXN0cyB0aGF0IGZhaWxlZCBwcmV2aW91c2x5IGFmdGVyIHRoZQorIE5ldC1TTk1QIGJpbmFyaWVzIChNU1ZDIGJ1aWxkKSBoYWQgYmVlbiBpbnN0YWxsZWQgZG8gbm93IHBhc3MuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMzI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3Rvb2xzLmMsIHRlc3RpbmcvVEVTVENPTkYuc2g6IENIQU5HRVM6IE1pbkdXOiBNYWRlCisKKyByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGluZGVwZW5kZW50IG9mIHRoZSBOZXQtU05NUCB2YXJpYWJsZXMgZGVmaW5lZAorIGluIHRoZSBXaW5kb3dzIHJlZ2lzdHJ5LiBTb21lIHRlc3RzIHRoYXQgZmFpbGVkIHByZXZpb3VzbHkgYWZ0ZXIgdGhlCisgTmV0LVNOTVAgYmluYXJpZXMgKE1TVkMgYnVpbGQpIGhhZCBiZWVuIGluc3RhbGxlZCBkbyBub3cgcGFzcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAzMjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdG9vbHMuYywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6IAorCisgQ0hBTkdFUzogTWluR1c6IE1hZGUgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUKKyBOZXQtU05NUCB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4gU29tZSB0ZXN0cyB0aGF0CisgZmFpbGVkIHByZXZpb3VzbHkgYWZ0ZXIgdGhlIE5ldC1TTk1QIGJpbmFyaWVzIChNU1ZDIGJ1aWxkKSBoYWQgYmVlbgorIGluc3RhbGxlZCBkbyBub3cgcGFzcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAzMjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdG9vbHMuYywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6IAorCisgQ0hBTkdFUzogTWluR1c6IE1hZGUgcmVncmVzc2lvbiB0ZXN0IG91dHB1dCBpbmRlcGVuZGVudCBvZiB0aGUKKyBOZXQtU05NUCB2YXJpYWJsZXMgZGVmaW5lZCBpbiB0aGUgV2luZG93cyByZWdpc3RyeS4gU29tZSB0ZXN0cyB0aGF0CisgZmFpbGVkIHByZXZpb3VzbHkgYWZ0ZXIgdGhlIE5ldC1TTk1QIGJpbmFyaWVzIChNU1ZDIGJ1aWxkKSBoYWQgYmVlbgorIGluc3RhbGxlZCBkbyBub3cgcGFzcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osIHdpbjMyL3dpbjMyLnNsbiwKKyAgICAgIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworIFJlbW92ZWQgVmlzdWFsIFN0dWRpbyAyMDA1IHNvbHV0aW9uIGFuZCBwcm9qZWN0IGZpbGVzIGFnYWluIHNpbmNlCisgVmlzdWFsIFN0dWRpbyAyMDEwIHJlZnVzZXMgdG8gbG9hZCB0aGVzZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IGNsZWFuIHRoZSBwZXJsL3B5dGhvbiBmZWF0dXJlIGxlZnRvdmVycyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGZpeCBtaWIgbW9kdWxlIGludm9jYXRpb24gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzogZml4IGlmZGVmCisKKyB0eXBvIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IGZpeCBwZXJsL3B5dGhvbiBmZWF0dXJlIGRlcGVuZGVuY2llcyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOiByZXZlcnRlZCBhdXRvX25saXN0IG1hY3JvIHVzYWdlOyB0aGUgZnVuY3Rpb24KKworIGlzIHVzZWQgaW4gaGVhZGVycyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogQWRkIGEgLVQgb3B0aW9uIHRvIHJ1biAnbWFrZSB0ZXN0JworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvTWFrZWZpbGUuaW46IGZpeCB0aGUgZW5jb2RlX2tleWNoYW5nZSAuZnQgZmlsZW5hbWUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHBlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCBzbm1wbGliL3Rvb2xzLmM6IAorCisgZml4IHRoZSBmZWF0dXJlcyByZXF1aXJlZCBieSB0aGUgVHJhcFJlY2VpdmVyIG1vZHVsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5pbjogQWRkIHRoZSBUcmFwUmVjZWl2ZXIgdG8gdGhlIGxpc3Qgb2YgcGVybCBtb2R1bGVzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6IHVzZSB0aGUgbmV3ZXIgTmV0LVNOTVAgQVBJcywgcmF0aGVyIHRoYW4gdGhlCisKKyBvbGRlciBVQ0Qgb25lcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBwZXJsL1NOTVAvU05NUC54czogcmVtb3ZlIFNFVCBjb2RlIHdoZW4gdW5kZXIgLS1yZWFkLW9ubHkgbW9kZQorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYzogcmVxdWlyZQorCisgY2hlY2tfdmJfdWludCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW4KKyAgICAgICB0LmMsIGFnZW50L3NubXBfYWdlbnQuYywgbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYywgCisgICAgICBweXRob24vbmV0c25tcC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jOiBsYXN0IG9mIHRoZSBwZXJsLXVzZWQgZmVhdHVyZSBmdW5jdGlvbnMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VuCisgICAgICAgdC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmM6CisKKyBzdGFydGVkIHRoZSBmaW5hbCBzZXQgb2YgZnVuY3Rpb24gcmVtb3ZhbHMgZm9yIGZlYXR1cmVzIHJlcXVpcmVkIGJ5CisgcGVybC9weXRob24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpOiBhZGRlZCB0aGUKKworIG5ldC1zbm1wLWZlYXR1cmVzLmggaGVhZGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHBlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAKKyAgICAgIHBlcmwvU05NUC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oOiBBZGRlZCBwZXJsIGZlYXR1cmUKKworIHJlcXVpcmVtZW50cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIGNvbmZpZ3VyZSwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgCisgICAgICBwZXJsL0FTTi9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsIAorICAgICAgcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmg6IGhvcGVmdWxseQorICAgICAgd29ya2luZworCisgcnVsZXMgdG8gYXBwbHkgZmVhdHVyZSByZXF1aXJlbWVudHMgdG8gcGVybCBhbmQgcHl0aG9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jOiBtb3JlIGNoYW5nZXMgdG8gcmVtb3ZlIHVubmVlZGVkIGZ1bmN0aW9ucworCisgcHJpbWFyaWx5IHdoZW4gd3JpdGUgbW9kZSBpcyB0dXJuZWQgb2ZmIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzogY2hhbmdlIHRoZSB3YW50IGludm9jYXRpb24gdG8gb25seSBkZWZhdWx0CisKKyB0byBleGNsdWRlIGV4dGVybmFsIGhvb2tzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOiBzZWFyY2ggdGhyb3VnaCAueHMgZmlsZXMgZm9yCisKKyBmdW5jdGlvbiBpbnZvY2F0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAzMDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzogZm9yZ290IGEgc2VtaWNvbG9uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzA3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmM6IGlxdWVyeSBwZHUKKyAgICAgIHNlc3Npb25zCisKKyBhcmUgb25seSBuZWVkZWQgaW4gd3JpdGUgbW9kZS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjogZml4IGZlYXR1cmUgZGV0ZWN0aW9uIG9mIHNvbWV0aW1lcy1idWlsdAorCisgYXBwbGljYXRpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOiB1c2UgdGhlIGZlYXR1cmVfdW51c2VkIG1hY3JvIGZvciBtYWtpbmcgYW4KKworIGVtcHR5IGZpbGUgZm9yIGNvbnNpc3RlbmN5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTgorICAgICAgIFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIGFwcHMvc25tcHRscy5jLCAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IEFub3RoZXIgc3dlZXAgZm9yIHVudXNlZAorCisgZnVuY3Rpb25zIHdoZW4gcmVhZF9vbmx5IG1vZGUgaXMgdHVybmVkIG9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMKKyAgICAgICAsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOCisgICAgICAgVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuCisgICAgICAgYywgc25tcGxpYi9jaGVja192YXJiaW5kLmM6IG1hcmsgYSBzbGV3IG9mIGZ1bmN0aW9ucyBhcyBmZWF0dXJlcworCisgdGhhdCBhcmUgb25seSBuZWVkZWQgd2l0aCB3cml0ZV9zdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDMwMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOiBydW4gZ3JlcCB3aXRoIC1uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzAxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiAKKworIGZlYXR1cml6ZSBuZXRzbm1wX3NvY2thZGRyX3NpemUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMzAwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6IHJlbW92ZSBhCisKKyBmZWF0dXJlX3JlcXVpcmUgbm90IGFjdHVhbGx5IG5lZWRlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYzogbWFyayBTVUJDT05UQUlORVJfRklORAorCisgYXMgYSBmZWF0dXJlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB0c20uYzogdGhlIHJvdyBjcmVhdGlvbiBBUEkgaXMKKworIG9ubHkgdXNlZCBpbiB0aGUgVFNNIGltcGxlbWVudGF0aW9uIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXB0c20uYzogdGhlIG5ld2VyIGNvbnRleHQgZW5naW5lSUQKKworIHByb2JpbmcgaXMgb25seSBuZWVkZWQgaWZmIFRTTSBpcyBpbiB1c2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjk2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2Rpcl91dGlscy5jOiBmaXggYW4gaWZkZWYgdHlwbyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzogbW92ZWQgZmV0YXVyZSBjaGlsZF9vZiBzdGF0ZW1lbnRzIHRvIHRoZQorCisgdG9wIG9mIHRoZSBmaWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzogbWFya2VkIGEgY291cGxlIG9mIHJhcmVseSB1c2VkIGNvbnRhaW5lcgorCisgZnVuY3Rpb25zLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjkzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6IHNwbGl0IG91dCB0aGUgcHJlZml4X2luZm8gZmVhdHVyZQorICAgICAgaW50bworCisgc3ViLWZlYXR1cmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI5MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jOiBtYXJrIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgYXMgdW5uZWVkZWQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyOTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmM6IGZpeCBhIGNoaWxkX29mIHN0YXRlbWVudAorCisgd2l0aCBhIGNvcHkvcGFzdGUgZXJyb3IgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjkwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6IHRoZSBjb250YWluZXIgcm93LXJlbW92ZSBpcyBvbmx5CisKKyBuZWVkZWQgaWYgdGhlIHRkYXRhIHJlbW92ZV9yb3cgaXMgbmVlZGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOCisgICAgICAgVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuCisgICAgICAgYzogZmVhdHVyZSBtYXJraW5nIG9mIHVudXNlZCB0ZGF0YSBmdW5jdGlvbnMgICAgCisgICAgICB0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUgICAgIHRhYmxlX3RkYXRhX2V4dHJhY3RfdGFibGUgICAgCisgICAgICB0YWJsZV90ZGF0YV9yZW1vdmVfcm93IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjg4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmM6IHJlbW92YWwgb2Ygc29tZSByYXJlbHkgdXNlZAorCisgCWZ1bmN0aW9ucyB0YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93IAl0YWJsZV9kYXRhc2V0X3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IEFkZGVkIGEgZGVmaW5pdGlvbiB0byBpbmNvcnBvcmF0ZQorCisgcmVhZF9vbmx5L25vdGlmeV9vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmM6IGFkZGVkIGEgbWlzc2luZyBmZWF0dXJlIGRlZmluaXRpb24KKworIGxpbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjg1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjogYWRkZWQgYmFjayBpbiBtaXNzaW5nIG1pYmdyb3VwIGZlYXR1cmUKKworIGRlZmluaXRpb24gbGlzdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBJbmNsdWRlIHRoZSBvcmlnaW5hbCBiYXNlIGZsYWdzIHRvCisKKyBlbnN1cmUgLS13aXRoLWRlZmF1bHRzIGdldHMgcGlja2VkIHVwIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGZpeCB1c2FnZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IEFkZGVkIGEgLWIgZmxhZyBmb3IgYmFzZSBhcmd1bWVudHMgdG8KKworIHN0YXJ0IGZyb20gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogZGVmYXVsdCB0byBhIGxpbmVhciBzZWFjaCBvZiBzaXplCisKKyB0ZXN0cywgcmF0aGVyIHRoYW4gZXhwb25lbnRpYWwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzogCisKKyBDSEFOR0VTOiBzbm1wbGliOiBHdWFyZCBuZXRzbm1wX3VkcF9yZWN2ZnJvbSgpIGV0Yy4gZGVjbGFyYXRpb25zCisgY29uc2lzdGVudGx5LiAgQ0hBTkdFUzogV2luMzI6IEJ1aWxkcyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAyNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjoKKyAgICAgIEd1YXJkCisKKyBuZXRzbm1wX3VkcF9yZWN2ZnJvbSgpIGV0Yy4gZGVjbGFyYXRpb25zIGNvbnNpc3RlbnRseS4gIENIQU5HRVM6CisgV2luMzI6IEJ1aWxkcyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAyNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjoKKyAgICAgIEd1YXJkCisKKyBuZXRzbm1wX3VkcF9yZWN2ZnJvbSgpIGV0Yy4gZGVjbGFyYXRpb25zIGNvbnNpc3RlbnRseS4gIENIQU5HRVM6CisgV2luMzI6IEJ1aWxkcyB3aXRoIFZpc3VhbCBTdHVkaW8gMjAxMC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IENIQU5HRVM6IFdpbjMyOiBQQVRDSDogMzI5Mzg0MjogRWxpbWluYXRlCisKKyByZWdpc3RyeSBhcmd1bWVudCBsaW1pdCBvZiAxMjcgY2hhcmFjdGVycyAodGhpcyBsaW1pdGF0aW9uIHdhcworIHJlcG9ydGVkIGJ5IFN5bHZhaW4gRGVyeSkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMjc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA1LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogQ0hBTkdFUzogV2luMzI6IFBBVENIOiAzMjkzODQyOiBFbGltaW5hdGUKKworIHJlZ2lzdHJ5IGFyZ3VtZW50IGxpbWl0IG9mIDEyNyBjaGFyYWN0ZXJzICh0aGlzIGxpbWl0YXRpb24gd2FzCisgcmVwb3J0ZWQgYnkgU3lsdmFpbiBEZXJ5KS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAyNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBDSEFOR0VTOiBXaW4zMjogUEFUQ0g6IDMyOTM4NDI6IEVsaW1pbmF0ZQorCisgcmVnaXN0cnkgYXJndW1lbnQgbGltaXQgb2YgMTI3IGNoYXJhY3RlcnMgKHRoaXMgbGltaXRhdGlvbiB3YXMKKyByZXBvcnRlZCBieSBTeWx2YWluIERlcnkpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDI3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6IENIQU5HRVM6IFdpbjMyOiBQQVRDSDogMzI5Mzg0MjogRWxpbWluYXRlCisKKyByZWdpc3RyeSBhcmd1bWVudCBsaW1pdCBvZiAxMjcgY2hhcmFjdGVycyAodGhpcyBsaW1pdGF0aW9uIHdhcworIHJlcG9ydGVkIGJ5IFN5bHZhaW4gRGVyeSkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IGhlYWRlciBmaWxlCisKKyA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhbiBub3cgYmUgdXNlZCBpbiB0aGUgTWluR1cKKyBlbnZpcm9ubWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAyNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IGhlYWRlciBmaWxlCisKKyA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhbiBub3cgYmUgdXNlZCBpbiB0aGUgTWluR1cKKyBlbnZpcm9ubWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAyNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IGhlYWRlciBmaWxlCisKKyA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhbiBub3cgYmUgdXNlZCBpbiB0aGUgTWluR1cKKyBlbnZpcm9ubWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAyNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IGhlYWRlciBmaWxlCisKKyA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGNhbiBub3cgYmUgdXNlZCBpbiB0aGUgTWluR1cKKyBlbnZpcm9ubWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNS0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oOiBXaW4zMiBETEwgYnVpbGQgZml4ZXMuCisKKyAoQmFja3BvcnRlZCByMjAxODQgZnJvbSB0cnVuay4pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAyNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDUtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaDogV2luMzIgRExMIGJ1aWxkIGZpeGVzLgorCisgKEJhY2twb3J0ZWQgcjIwMTg0IGZyb20gdHJ1bmsuKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMjc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogU3BlbGxpbmcgYW5kIGdyYW1tYXIgZml4ZXMgZm9yIHRoZSBzb3VyY2UKKworIGNvZGUgY29tbWVudHMgaW4gc25tcGxpYi93aW5zZXJ2aWNlLmMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMjc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3dpbnNlcnZpY2UuYzogU3BlbGxpbmcgYW5kIGdyYW1tYXIgZml4ZXMgZm9yIHRoZSBzb3VyY2UKKworIGNvZGUgY29tbWVudHMgaW4gc25tcGxpYi93aW5zZXJ2aWNlLmMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBTcGVsbGluZyBhbmQgZ3JhbW1hciBmaXhlcyBmb3IgdGhlIHNvdXJjZQorCisgY29kZSBjb21tZW50cyBpbiBzbm1wbGliL3dpbnNlcnZpY2UuYy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAyNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvd2luc2VydmljZS5jOiBTcGVsbGluZyBhbmQgZ3JhbW1hciBmaXhlcyBmb3IgdGhlIHNvdXJjZQorCisgY29kZSBjb21tZW50cyBpbiBzbm1wbGliL3dpbnNlcnZpY2UuYy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAyNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE5FV1M6IGFkZGVkIG5vdGUgYWJvdXQgdGhlIG5ldyB0aW1pbmcgZnVuY3Rpb24gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOiBVcGRhdGUgdGhlIG1hbnVhbCBwYWdlIHRvIHJlZmxlY3QgdGhlIG5ldworCisgdGltaW5nIG9wdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3Rvb2xzLmM6IGJldHRlciBkb2N1bWVudGF0aW9uIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jOiB1c2UgdGhlCisKKyBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoKSBmb3IgcGFyc2luZyBmcmVxdWVuY2llcy90aW1lIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYzogZml4IHBkdQorCisgYnVpbGRpbmcgdGVzdHMgdW5kZXIgdmFyaW91cyBkaXNhYmxlZCBtb2RlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmM6IGRvbid0IHRyeSB0bworCisgYnVpbGQgdGhlIEdFVCBwZHUgdW5kZXIgbm90aWZ5X29ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjY4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOiBmaXggYSBidWcgd2l0aAorCisgbm8tc3VmZml4IHN0cmluZ3MgYW5kIHVzZSBhIGNvbnN0IGlucHV0IHN0cmluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjc19jbGliLmM6CisKKyBBIG5ldyB1bml0IHRlc3QgZm9yIHRoZSB0aW1lIGNvbnZlcnNpb24gcm91dGluZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IHVzZSB0aGUKKworIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcygpIGZ1bmN0aW9uIGZvciBjb21wdXRpbmcgaW50ZXJ2YWwKKyBwZXJpb2RzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzogQWRkZWQgYQorCisgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKCkgZnVuY3Rpb25zIHRvIGNvbnZlcnQsIGUuZy4sIDFoIHRvIDM2MDAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjY0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IHJlbW92ZSBjb2RlIHRvIGJ1aWxkL3BhcnNlIEdFVC9ldGMgcmVxdWVzdHMKKworIHdoZW4gTk9USUZZX09OTFkgaXMgdHVybmVkIG9uLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiB1cGRhdGUgdGhlIE5FV1MgdG8gcmVmbGVjdCB0aGUgbmV3IC0tZW5hYmxlLXJlYWQtb25seSBhbmQKKworIC0tZW5hYmxlLW5vdGlmeS1vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jOiBtaW5vcgorCisgaW1wcm92ZW1lbnRzIGZvciByb25seSB2cyByd3JpdGUgaGFuZGxpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jOiBzdGlsbCBlbmFibGUKKworIFJPTkxZIHdoZW4gUldSSVRFIGlzbid0IHBvc3NpYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI2MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6IGZpeCBHRVQgc3VwcG9ydCB3aGVuIG5vX3dyaXRlIGlzCisKKyBlbmFibGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogbWFyayBhIGZ1dHVyZQorCisgbW9kaWZpY2F0aW9uIG5lZWQgaW4gYSBjb21tZW50IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jOiBmaXggaGFuZGxpbmcgb2Ygbm9fd3JpdGUgc3VwcG9ydAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfYWdlbnQuYywgYWdlbnQvc25tcGQuYzogCisKKyBkb24ndCBvcGVuIGFueSBsaXN0ZW5pbmcgdHJhbnNwb3J0cyB3aGVuIG5vdGlmeS1vbmx5IGlzIHNwZWNpZmllZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6IHNldCB0aGUKKworIG5vLWxpc3RlbiBhbmQgcmVhZC1vbmx5IGZsYWdzIHdoZW4gLS1lbmFibGUtbm90aWZ5LW9ubHkgaXMgc2V0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogcmFuIGF1dG9oZWFkZXIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzogaW1wbGVtZW50IHRoZQorCisgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCBpbiB0aGVzZSB0cmFuc3BvcnRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlOiBydW4gYXV0b2NvbmYgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOiBtb3ZlIHRoZSByZWFkLW9ubHkgZmxhZworCisgZGVmaW5pdGlvbiBiZWxvdyB0aGUgbm90aWZ5LW9ubHksIHNpbmNlIG5vdGlmeS1vbmx5IG5lZWRzIHRvIGltcGx5CisgcmVhZC1vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI1MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZTogRGVmaW5lZCBhIG5ldworCisgLS1lbmFibGUtbm90aWZ5LW9ubHkgZmxhZyBmb3IgYnVpbGRpbmcgYSB0b29sc2V0IHRoYXQgb25seSBhbGxvd3MKKyBmb3Igbm90aWZpY2F0aW9ucyB3aXRoIG5vIHJlYWQvd3JpdGUgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6IERlZmluZWQgYSBuZXcKKworIC0tbm8tbGlzdGVuIGZsYWcgdG8gcmVtb3ZlIGxpc3RlbmluZyBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmg6IHRoZSBkaXNtYW4gc2NoZWR1bGUgbWliIGlzIG9ubHkKKworIHVzZWZ1bCB3aGVuIFNFVHMgYXJlIHR1cm5lZCBvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi5oOiB0aGUgZGlzbWFuIHNjaGVkdWxlIG1pYiBpcyBvbmx5IHVzZWZ1bAorCisgd2hlbiBTRVRzIGFyZSB0dXJuZWQgb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQ3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyCisgICAgICAgZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmCisgICAgICAgYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLgorICAgICAgIGMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLgorICAgICAgIGM6IGZpbmlzaGVkIG5vX3dyaXRlIHN1cHBvcnQgZm9yIGNvbW1vbiBpbmNsdWRlZCB0YWJsZXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQ2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzogQWRkIGJhY2sgaW4KKworICduZXRzbm1wX3NldF9yb3dfY29sdW1uJyB3aGVuIG5vX3dyaXRlIHN1cHBvcnQgaXMgZW5hYmxlZCBUaGlzCisgZnVuY3Rpb24gaXMgYSBnZW5lcmljIGRhdGEgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uLCBub3QgU0VUIHNwZWNpZmljIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6IGRvbid0IHVzZSBtYXJrX3Jvd19jb2x1bW5fd3JpdGFibGUKKworIHdoZW4gcmVhZC1vbmx5IHN1cHBvcnQgaXMgZW5hYmxlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6IGZpeCBub193cml0ZSBzdXBwb3J0CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDI0MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6IGZpeCBub193cml0ZSBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6IERvbid0IGZyZWUKKworIHRoZSBpZlhUYWJsZSByb3cgZm91bmQgb24gbG9hZCBmYWlsdXJlIGFzIHdlIGRvbid0IG93biBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMjQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6IERvbid0IGZyZWUKKworIHRoZSBpZlhUYWJsZSByb3cgZm91bmQgb24gbG9hZCBmYWlsdXJlIGFzIHdlIGRvbid0IG93biBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMjQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6IERvbid0IGZyZWUKKworIHRoZSBpZlhUYWJsZSByb3cgZm91bmQgb24gbG9hZCBmYWlsdXJlIGFzIHdlIGRvbid0IG93biBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMjQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6IERvbid0IGZyZWUKKworIHRoZSBpZlhUYWJsZSByb3cgZm91bmQgb24gbG9hZCBmYWlsdXJlIGFzIHdlIGRvbid0IG93biBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMjQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6IERvbid0IGZyZWUKKworIHRoZSBpZlhUYWJsZSByb3cgZm91bmQgb24gbG9hZCBmYWlsdXJlIGFzIHdlIGRvbid0IG93biBpdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZ2l0IGJhc2gtc2hlbGwgZnVuY3Rpb25zIHRvIGVuYWJsZQorCisgYnJhbmNoIHN3aXRjaGluZyBhbmQgZXh0ZXJuYWwgYnVpbGRpbmcgVGhlc2UgbG9jYWwgc2hlbGwgZnVuY3Rpb25zCisgKHNubXBjb25maWd1cmUgYW5kIHNubXBtYWtlKSBsZXQgeW91IGNvbmZpZ3VyZSBhbmQgYnVpbGQgdGhlCisgTmV0LVNOTVAgc291cmNlIGNvZGUgaW4gZXh0ZXJuYWwgZGlyZWN0b3JpZXMgdGhhdCBhcmUKKyBhdXRvLWNhbGN1bGF0ZWQgYmFzZWQgb24gdGhlIGV4aXN0aW5nIGJyYW5jaCBuYW1lICh3aXRoIGFuIG9wdGlvbmFsCisgc3VmZml4KS4gIFRoaXMgbGV0cyB5b3UgcnVuICdzbm1wbWFrZScgZnJvbSB3aXRoaW4gdGhlIHNvdXJjZQorIGRpcmVjdG9yeSBhbmQgaGF2ZSBpdCBhY3R1YWxseSBleHRlcm5hbGx5IGtlZXAgdHJhY2sgb2YgbW9kaWZpZWQKKyBmaWxlcywgZXRjLCBzbyBidWlsZGluZyBpbiBtdWx0aXBsZSBicmFuY2hlcyBjYW4gYmUgZG9uZSBmcm9tIGEKKyBzaW5nbGUgZ2l0IGNoZWNrb3V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogY2xlYW4gdXAgdGhlIGl0ZXJhdG9ycworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGZyZWUgdmFyYmluZHMgYWZ0ZXIKKworIHNlbmRpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjM4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTI1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzogQ29tbWVudGVkIG91dCBhbiB1bnVzZWQgZnVuY3Rpb24KKworIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNvbXBsYWluZWQgYWJvdXQgaXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBGaXhlZCB0d28gY29tcGlsZXIKKworIHdhcm5pbmdzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjM2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jOiBSZW1vdmUgdW5uZWNlc3NhcnkgbnVsbCBjaGVjaworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jOiBNb3ZlIHBvaW50ZXIgZGVyZWZlcmVuY2UgdG8gYWZ0ZXIKKworIHRoZSBjaGVjayBmb3Igc3VjY2Vzc2Z1bCBhbGxvY2F0aW9uIG9mIHRoZSBwb2ludGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6IFJlZHVjZSB2YXJpYWJsZSBzY29wZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6IFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOiBSZWR1Y2UgdmFyaWFibGUgc2NvcGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjMgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOiBSZWR1Y2UgdmFyaWFibGUgc2NvcGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6IFJlZHVjZSB2YXJpYWJsZSBzY29wZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IG1lbnRpb24gd2hpY2ggbW9kdWxlIGlzIHJlcXVpcmVkIHdoZW4KKworIGJ1aWxkaW5nIHRvIGdldCB0aGUgZGVsaXZlciBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogZGVsZXRlZCBhbiB1bm5lZWRlZAorCisgZGVidWdnaW5nIHN0YXRlbWVudCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IHByb3Blcmx5IHVwZGF0ZSB0aGUgbWF4CisKKyBjb3VudCBpbiB0aGUgb3V0Z29pbmcgbm90aWZpY2F0aW9ucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGJldHRlciBwYWNrZXQgZXN0aW1hdGlvbgorCisgdG8gZW5zdXJlIHdlIGRvbid0IG92ZXJydW4uICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGVzdGltYXRlIHRoZSBwYWNrZXQgc2l6ZQorCisgYW5kIGJyZWFrIHRoZSBub3RpZmljYXRpb24gdXAgYmFzZWQgb24gaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiB0cmFuc2Zvcm0gdGhlCisKKyBub3RpZmljYXRpb24gc2VuZGluZyBpbnRvIGEgbGFyZ2VyIGxvb3AgZm9yIGxhdGVyIG11bHRpLW5vdGlmcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMjIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBORVdTOiBmdXJ0aGVyIGluZm9ybWF0aW9uIGFib3V0IGZlYXR1cmUgbWFya2luZy9zZWxlY3Rpb24KKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjIxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBORVdTOiBtZW50aW9uIHRoZSBuZXcgZGVsaXZlcnkgYnkgbm90aWZpY2F0aW9ucyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIyMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogZG9jdW1lbnQgdGhlIG1pbmltYWxpc3Qgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxOSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IGRvY3VtZW50IHRoZSBuZXcgZGVsaXZlckJ5Tm90aWZ5IGNvbmZpZworCisgdG9rZW5zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogYWxsb3cgcnVuIHRpbWUKKworIG1vZGlmaWNhdGlvbnMgb2YgdGhlIE9JRHMgdG8gdXNlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogYWRkIGNvbmZpZyBmbGFncyB0byBub3QKKworIGluY2x1ZGUgdGhlIHBlcmlvZCBjb25maWcgYW5kIG1zZyBjb3VudCB2YWx1ZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBpbmNsdWRlIHRoZSBwZXJpb2RpYworCisgY291bnQsIHRoZSBtZXNzYWdlIG51bWJlciBhbmQgdGhlIG1heCBtZXNzYWdlIG51bWJlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGRlbGV0ZWQgZGVidWdnaW5nCisKKyBjb21tZW50IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dDogTW92ZSB0aGUgbm90aWZpY2F0aW9uCisKKyBkZWZpbml0aW9uIHRvIHdpdGhpbiB0aGUgc3ViLW1pYiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGRlbGV0ZSBhbiB1bnVzZWQKKworIHZhcmlhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogbG9hZCB0aGUgTUlCIGludG8gdGhlCisKKyBkZWZhdWx0IHNldCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQ6IEEgbmV3IG1pYiB0byBob2xkIHRoZQorCisgcGVyaW9kaWMgbm90aWZ5IG9iamVjdHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBmaWxsIG91dCB0aGUgY29uZmlnIGZyZWUKKworIHJvdXRpbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjA5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBwcm9wZXJseSBtb25pdG9yIHRoZQorCisgd2hvbGUgY29udGFpbmVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogcGFyc2UgdGhlIGNvbmYgZmlsZXMgYW5kCisKKyBjcmVhdGUgYW5kIGluc2VydCBvYmplY3RzIGludG8gdGhlIGNvbnRhaW5lciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6IGRlZmluZWQgYSBjb250YWluZXIgdG8KKworIHN0b3JlIGEgbGlzdCBvZiBkZWxpdmVyIG9iamVjdHMgaW4gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBhZGRlZCBhIG5leHRfcnVuCisKKyB0aW1lc3RhbXAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjA1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBhY3R1YWxseSBzZW5kIGEKKworIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSByZXN1bHRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDIwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogbWFrZSB0aGUgd2FsayBvbiB0aGUKKworIHRlc3Qgb2JqZWN0IGZ1bmN0aW9uLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjAzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiBjcmVhdGUgYSBtYXggcGFja2V0IHNpemUKKworIGNvbmZpZyB0b2tlbiBhbmQgcGFyc2UgaXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjAyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOiBtaW5pbWFsIHN0YXJ0aW5nIHRlc3QKKworIG9iamVjdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAyMDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IGFkZGVkIGEgZnVuY3Rpb24gdG8KKworIGNhbGN1bGF0ZSB0aGUgdGltZSB1bnRpbCB0aGUgbmV4dCBydW4gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMjAwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOiByZW1vdmUgbGVmdCBpbiB0ZW1wbGF0ZQorCisgbGluZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6IHVzZSBhbiBhbGFybSBjYWxsYmFjaworCisgcHJvdG90eXBlIGZvciBleGVjdXRlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE5OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0yMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDogYmVnaW5uaW5nIHRlbXBsYXRlIGNvZGUKKworIGZvciBkZWxpdmVyeSBvZiBkYXRhIGJ5IG5vdGlmaWNhdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTIyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOiBSZWR1Y2UgdmFyaWFibGUgc2NvcGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6IFJlZHVjZSB2YXJpYWJsZSBzY29wZXMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMjIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6IFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxOTQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osIHdpbjMyL3dpbjMyLnNsbjogQWRkZWQgVmlzdWFsIFN0dWRpbworCisgMjAwNSBwcm9qZWN0IGFuZCBzb2x1dGlvbiBmaWxlIGZvciBidWlsZGluZyB0aGUgTmV0LVNOTVAgbGlicmFyeSBhcworIGEgc3RhdGljIGxpYnJhcnkuIEJvdGggdGhlIFdpbjMyIGFuZCB0aGUgeDY0IGNvbmZpZ3VyYXRpb25zIGFyZQorIGluY2x1ZGVkLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTkzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qOiBNb3JlIFZpc3VhbCBTdHVkaW8gMjAwNSBwcm9qZWN0CisgICAgICBmaWxlCisKKyBjbGVhbnVwLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qOiBDbGVhbmVkIHVwIFdpbjMyIFZTMjAwNSBwcm9qZWN0CisKKyBmaWxlcyAtIHJlbW92ZWQgc3VwZXJmbHVvdXMgbGlicmFyeSByZWZlcmVuY2VzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTg5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLnZjcHJvaiwgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLnZjcHJvaiwKKyAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCB3aW4zMi93aW4zMmRsbC5zbG46IEFkZGVkIHg2NAorCisgY29uZmlndXJhdGlvbnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTggIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLnZjcHJvaiwgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLAorICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLAorICAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUudmNwcm9qLCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osCisgICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay52Y3Byb2osIHdpbjMyL3dpbjMyZGxsLnNsbjogQWRkZWQKKworIHdpbjMyZGxsLXJlbGF0ZWQgVmlzdWFsIFN0dWRpbyAyMDA1IHByb2plY3QgYW5kIHNvbHV0aW9uIGZpbGVzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTg2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg6IFdpbjMyIERMTCBidWlsZCBmaXhlcy4gCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMxNzU2NDA6IFVzZQorCisgSVBfUkVDVkRTVEFERFIgc29ja29wdCB3aGVyZSBhdmFpbGFibGUgKCpCU0QpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTcgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wZDoKKyAgICAgIFBBVENIRVM6CisKKyAzMTc1NjQwOiBVc2UgSVBfUkVDVkRTVEFERFIgc29ja29wdCB3aGVyZSBhdmFpbGFibGUgKCpCU0QpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTcgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wZDoKKyAgICAgIFBBVENIRVM6CisKKyAzMTc1NjQwOiBVc2UgSVBfUkVDVkRTVEFERFIgc29ja29wdCB3aGVyZSBhdmFpbGFibGUgKCpCU0QpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDMxODMwMDA6IEZpeAorCisgY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6CisgMzE4Mjk4NTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzE4MzAwMDogRml4CisKKyBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggQ0hBTkdFUzogc25tcGxpYjogQlVHUzoKKyAzMTgyOTg1OiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSEVTOiAzMTgzMDAwOiBGaXgKKworIGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOgorIDMxODI5ODU6IEZpeCBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIRVM6IDMxODMwMDA6IEZpeAorCisgY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6CisgMzE4Mjk4NTogRml4IGNhbGN1bGF0aW9uIG9mIGNvbW1vbiBPSUQgcHJlZml4IGxlbmd0aCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTgyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0hFUzogMzE4MzAwMDogRml4CisKKyBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lEIHByZWZpeCBsZW5ndGggQ0hBTkdFUzogc25tcGxpYjogQlVHUzoKKyAzMTgyOTg1OiBGaXggY2FsY3VsYXRpb24gb2YgY29tbW9uIE9JRCBwcmVmaXggbGVuZ3RoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsIGFwcHMvc25tcHRyYXBkX2RzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCBtYW4vc25tcGQuY29uZi41LmRlZjogQ0hBTkdFUzoKKworIExpbnV4OiBQQVRDSEVTOiAzMjA1ODExOiBPcHRpb24gdG8gc2tpcCBmZC9sb29wL3JhbSBkZXZpY2VzIGluCisgZGlza0lPVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE4MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsIGFwcHMvc25tcHRyYXBkX2RzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCBtYW4vc25tcGQuY29uZi41LmRlZjogQ0hBTkdFUzoKKworIExpbnV4OiBQQVRDSEVTOiAzMjA1ODExOiBPcHRpb24gdG8gc2tpcCBmZC9sb29wL3JhbSBkZXZpY2VzIGluCisgZGlza0lPVGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogUEFUQ0hFUzogMzE4NTA4NToKKworIEZpeCBzZWdmYXVsdCBvbiA2NC1iaXQgc3lzdGVtcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogUEFUQ0hFUzogMzE4NTA4NToKKworIEZpeCBzZWdmYXVsdCBvbiA2NC1iaXQgc3lzdGVtcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogUEFUQ0hFUzogMzE4NTA4NToKKworIEZpeCBzZWdmYXVsdCBvbiA2NC1iaXQgc3lzdGVtcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTgwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6IENIQU5HRVM6IHB5dGhvbjogUEFUQ0hFUzogMzE4NTA4NToKKworIEZpeCBzZWdmYXVsdCBvbiA2NC1iaXQgc3lzdGVtcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMTc1MzIzOiBGaXggaGFuZGxpbmcgb2YKKworICd3aGlsZSAoZmFsc2UpJyBibG9ja3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMxNzUzMjM6IEZpeCBoYW5kbGluZyBvZgorCisgJ3doaWxlIChmYWxzZSknIGJsb2NrcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTc5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pYjJjOiBDSEFOR0VTOiBtaWIyYzogUEFUQ0hFUzogMzE3NTMyMzogRml4IGhhbmRsaW5nIG9mCisKKyAnd2hpbGUgKGZhbHNlKScgYmxvY2tzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMTc1MzIzOiBGaXggaGFuZGxpbmcgb2YKKworICd3aGlsZSAoZmFsc2UpJyBibG9ja3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMxNzUzMjM6IEZpeCBoYW5kbGluZyBvZgorCisgJ3doaWxlIChmYWxzZSknIGJsb2NrcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjA0ODgzOiBGaXggaGFuZGxpbmcgb2YKKworIG5vbi10YWJsZSBvYmplY3RzIG5hbWVkIGZvb1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjA0ODgzOiBGaXggaGFuZGxpbmcgb2YKKworIG5vbi10YWJsZSBvYmplY3RzIG5hbWVkIGZvb1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjA0ODgzOiBGaXggaGFuZGxpbmcgb2YKKworIG5vbi10YWJsZSBvYmplY3RzIG5hbWVkIGZvb1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjA0ODgzOiBGaXggaGFuZGxpbmcgb2YKKworIG5vbi10YWJsZSBvYmplY3RzIG5hbWVkIGZvb1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmM6IENIQU5HRVM6IG1pYjJjOiBQQVRDSEVTOiAzMjA0ODgzOiBGaXggaGFuZGxpbmcgb2YKKworIG5vbi10YWJsZSBvYmplY3RzIG5hbWVkIGZvb1RhYmxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMTE0ODQ6IFN1cHBvcnQKKworIGVudW1lcmF0aW9ucyBpbiBub3RpZmljYXRpb24gdmFyYmluZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDE3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMTE0ODQ6IFN1cHBvcnQKKworIGVudW1lcmF0aW9ucyBpbiBub3RpZmljYXRpb24gdmFyYmluZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMTE0ODQ6IFN1cHBvcnQKKworIGVudW1lcmF0aW9ucyBpbiBub3RpZmljYXRpb24gdmFyYmluZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMTE0ODQ6IFN1cHBvcnQKKworIGVudW1lcmF0aW9ucyBpbiBub3RpZmljYXRpb24gdmFyYmluZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYzogQ0hBTkdFUzogbWliMmM6IFBBVENIRVM6IDMyMTE0ODQ6IFN1cHBvcnQKKworIGVudW1lcmF0aW9ucyBpbiBub3RpZmljYXRpb24gdmFyYmluZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IEFkZCBtaXNzaW5nIHN5c3RlbSBvaWRzIHRvIG1pYiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogQWRkIG1pc3Npbmcgc3lzdGVtIG9pZHMgdG8gbWliIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDE3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0xMiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OiBBZGQgbWlzc2luZyBzeXN0ZW0gb2lkcyB0byBtaWIgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6IEFkZCBtaXNzaW5nIHN5c3RlbSBvaWRzIHRvIG1pYiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDogQWRkIG1pc3Npbmcgc3lzdGVtIG9pZHMgdG8gbWliIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggZm9yIGdhcmJhZ2Ugb3V0cHV0IHdoZW4gYWdlbnQgcHJlc2VudHMgbW9yZQorCisgY29sdW1ucyBpbiBidWxrIHJlc3BvbnNlIHRoYW4gb3VyIGxvY2FsIE1JQiBmaWxlICBzcGVjaWZpZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggZm9yIGdhcmJhZ2Ugb3V0cHV0IHdoZW4gYWdlbnQgcHJlc2VudHMgbW9yZQorCisgY29sdW1ucyBpbiBidWxrIHJlc3BvbnNlIHRoYW4gb3VyIGxvY2FsIE1JQiBmaWxlICBzcGVjaWZpZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggZm9yIGdhcmJhZ2Ugb3V0cHV0IHdoZW4gYWdlbnQgcHJlc2VudHMgbW9yZQorCisgY29sdW1ucyBpbiBidWxrIHJlc3BvbnNlIHRoYW4gb3VyIGxvY2FsIE1JQiBmaWxlICBzcGVjaWZpZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggZm9yIGdhcmJhZ2Ugb3V0cHV0IHdoZW4gYWdlbnQgcHJlc2VudHMgbW9yZQorCisgY29sdW1ucyBpbiBidWxrIHJlc3BvbnNlIHRoYW4gb3VyIGxvY2FsIE1JQiBmaWxlICBzcGVjaWZpZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTc1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTEyICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggZm9yIGdhcmJhZ2Ugb3V0cHV0IHdoZW4gYWdlbnQgcHJlc2VudHMgbW9yZQorCisgY29sdW1ucyBpbiBidWxrIHJlc3BvbnNlIHRoYW4gb3VyIGxvY2FsIE1JQiBmaWxlICBzcGVjaWZpZWQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wdHJhcGQuOC5kZWY6IEZpeCB3cm9uZyBuYW1lIGZvciBjb25maWcgdG9rZW4KKworICdkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MnIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS0zLXBhdGNoZXNAMjAxNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wdHJhcGQuOC5kZWY6IEZpeCB3cm9uZyBuYW1lIGZvciBjb25maWcgdG9rZW4KKworICdkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MnIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjAxNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wdHJhcGQuOC5kZWY6IEZpeCB3cm9uZyBuYW1lIGZvciBjb25maWcgdG9rZW4KKworICdkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MnIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wdHJhcGQuOC5kZWY6IEZpeCB3cm9uZyBuYW1lIGZvciBjb25maWcgdG9rZW4KKworICdkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MnIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMTIgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wdHJhcGQuOC5kZWY6IEZpeCB3cm9uZyBuYW1lIGZvciBjb25maWcgdG9rZW4KKworICdkb05vdFJldGFpbk5vdGlmaWNhdGlvbkxvZ3MnIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jOiBSZW1vdmUgYm9ndXMKKworIChMaW51eCkgZGVmaW5lcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmM6IFJlbW92ZSBib2d1cworCisgKExpbnV4KSBkZWZpbmVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYzogUmVtb3ZlIGJvZ3VzCisKKyAoTGludXgpIGRlZmluZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9zbm1wLXRjLmM6IEhBVkVfVE1fVE1fR01UT0ZGIGlzIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9zbm1wLXRjLmM6IEhBVkVfVE1fVE1fR01UT0ZGIGlzIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9zbm1wLXRjLmM6IEhBVkVfVE1fVE1fR01UT0ZGIGlzIEhBVkVfU1RSVUNUX1RNX1RNX0dNVE9GRgorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaCwgY29uZmlndXJlLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IEJpbGwgRmVubmVycyBwYXRjaCB0byBtYWtlCisKKyBESVNNQU4gUElORyBhbmQgVFJBQ0VST1VURSBNSUJTIGNvbXBpbGUgdW5kZXIgTGludXggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmM6IFNvbGFyaXMgc3VwcG9ydCBmb3IKKworIFNDVFAtTUlCIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYzogU29sYXJpcyBzdXBwb3J0IGZvcgorCisgU0NUUC1NSUIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jOiBTb2xhcmlzIHN1cHBvcnQgZm9yCisKKyBTQ1RQLU1JQiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDQtMDkgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBUWiBpcyBvbmUgaG91ciBvZmYgaWYgSEFWRV9UTV9UTV9HTVRPRkYgYW5kCisKKyBTWVNWIChzdWNoIGlzIExpbnV4KSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTA5ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogVFogaXMgb25lIGhvdXIgb2ZmIGlmIEhBVkVfVE1fVE1fR01UT0ZGIGFuZAorCisgU1lTViAoc3VjaCBpcyBMaW51eCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wOSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IFRaIGlzIG9uZSBob3VyIG9mZiBpZiBIQVZFX1RNX1RNX0dNVE9GRiBhbmQKKworIFNZU1YgKHN1Y2ggaXMgTGludXgpIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBkdGxzOgorCisgb3ZlcmhhdWwgb2YgZGVidWcgICAtIGRyYXN0aWMgcmVkdWN0aW9uIGluIG51bWJlciBvZiBtZXNzYWdlcyBhbmQgbXNnIGNvbXBsZXhpdHkgICAgIGZvciBiYXNpYyBkdGxzdWRwIHRva2VuICAgLSBwcmV2aW91cyBsZXZlbCBvZiBkZXRhaWwgYXZhaWxhYmxlIGJ5IGFkZGluZyA5OmR0bHNkdXAgdG9rZW4gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE2OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNC0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBkdGxzOgorCisgb3ZlcmhhdWwgb2YgZGVidWcgICAtIGRyYXN0aWMgcmVkdWN0aW9uIGluIG51bWJlciBvZiBtZXNzYWdlcyBhbmQgbXNnIGNvbXBsZXhpdHkgICAgIGZvciBiYXNpYyBkdGxzdWRwIHRva2VuICAgLSBwcmV2aW91cyBsZXZlbCBvZiBkZXRhaWwgYXZhaWxhYmxlIGJ5IGFkZGluZyA5OmR0bHNkdXAgdG9rZW4gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTY4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IGR0bHM6CisKKyBjbGVhbiB1cCBjbG9zZTsgY2F0Y2ggJ2Nvbm5lY3QnLydkaXNjb25uZWN0JyAgIGNvbm5lY3QgPSB3ZSBnZXQgc3VjY2Vzc2Z1bGx5IGRlY29kZWQgc25tcCBkYXRhICAgZGlzY29ubmVjdCA9IDAgYnl0ZSByZWFkLCBzc2ggc2h1dGRvd24gZmxhZyBzZXQgICBhZGQgYmlvX2NhY2hlIGZsYWdzIGZvciBjb25uZWN0ZWQvZGlzY29ubmVjdGVkICAgY2hlY2sgZm9yIG51bGwgcHRyIGJlZm9yZSBkZXJlZmVyZW5jaW5nICAgY2xvc2UgaGFuZGxpbmc6ICAgLSAgb25seSBzZW5kIHF1ZXVlZCBkYXRhIGlmIHdlIGdvdCB0byBjb25uZWN0ZWQgc3RhdGUgICAtICBzZXJpb3VzbHkgcmVkdWNlIHRpbWVvdXQgdG8gd2FpdCBmb3IganVuayByZWFkLiBpIHRoaW5rICAgICAgd2Ugc2hvdWxkbid0IGV2ZW4gYm90aGVyICAgLSByZXR1cm4gZWFybHkgaWYgY2FjaGVwIGlzIE5VTEwsIHNvIHdlIGRvbid0IGhhdmUgdG8gdGVzdCBpdCAgICAgcmVwZWF0ZWRseSAgIC0gdXNlIGNvcnJlY3QgbmZkcyB2YWx1ZSBpbiBzZWxlY3QgY2FsbCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTY3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA0LTAxICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IGR0bHM6CisKKyBjbGVhbiB1cCBjbG9zZTsgY2F0Y2ggJ2Nvbm5lY3QnLydkaXNjb25uZWN0JyAgIGNvbm5lY3QgPSB3ZSBnZXQgc3VjY2Vzc2Z1bGx5IGRlY29kZWQgc25tcCBkYXRhICAgZGlzY29ubmVjdCA9IDAgYnl0ZSByZWFkLCBzc2ggc2h1dGRvd24gZmxhZyBzZXQgICBhZGQgYmlvX2NhY2hlIGZsYWdzIGZvciBjb25uZWN0ZWQvZGlzY29ubmVjdGVkICAgY2hlY2sgZm9yIG51bGwgcHRyIGJlZm9yZSBkZXJlZmVyZW5jaW5nICAgY2xvc2UgaGFuZGxpbmc6ICAgLSAgb25seSBzZW5kIHF1ZXVlZCBkYXRhIGlmIHdlIGdvdCB0byBjb25uZWN0ZWQgc3RhdGUgICAtICBzZXJpb3VzbHkgcmVkdWNlIHRpbWVvdXQgdG8gd2FpdCBmb3IganVuayByZWFkLiBpIHRoaW5rICAgICAgd2Ugc2hvdWxkbid0IGV2ZW4gYm90aGVyICAgLSByZXR1cm4gZWFybHkgaWYgY2FjaGVwIGlzIE5VTEwsIHNvIHdlIGRvbid0IGhhdmUgdG8gdGVzdCBpdCAgICAgcmVwZWF0ZWRseSAgIC0gdXNlIGNvcnJlY3QgbmZkcyB2YWx1ZSBpbiBzZWxlY3QgY2FsbCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMzEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogbWFrZSB0cnVuayBhbmQKKworIHY1LTYtcGF0Y2hlcyBjbG9zZWx5IGFsaWduZWQgICBtb3N0bHkgY2hhbmdlcyBpbiBkZWJ1ZywgY29va2llIHRyYWNraW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxNjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMzEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzogbWFrZSB0cnVuayBhbmQKKworIHY1LTYtcGF0Y2hlcyBjbG9zZWx5IGFsaWduZWQgICBtb3N0bHkgY2hhbmdlcyBpbiBkZWJ1ZywgY29va2llIHRyYWNraW5nIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0zMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBhZGQgY29va2llIGhhbmRsaW5nOworCisgcmVtb3ZlIGlmZGVmJ2QgY29kZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTY1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI3ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IFNpbXBsaWZ5IGFycmF5IHJlc2l6aW5nIHNvbWV3aGF0CisKKyBmdXJ0aGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE2NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBEbyBub3QgYXNzaWduIG5ld19kYXRhIGlmIHRoZQorCisgdmFsdWUgd29uJ3QgYmUgdXNlZC4gIFJlZHVjZSB2YXJpYWJsZSBzY29wZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNjMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjcgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzogSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjbGVhciBhCisKKyBjaHVuayBvZiBtZW1vcnkgaWYgdGhlIG5leHQgYWN0aW9uIG9uIGl0IGlzIHRvIGZpbGwgaXQgc28gdXNlIG1hbGxvYworIGluc3RlYWQgb2YgY2FsbG9jLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTYyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI3ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IENvbnRhaW5lckJpbmFyeUFycmF5IHJlYWxseQorCisgY2FuJ3QgaG9sZCBhbnl0aG5nIGJ1dCBwb2ludGVycyBhbmQgdGhhdCBtZWFucyB0aGUgZGF0YV9zaXplIGZpZWxkCisgaXMgdW5uZWNlc3Nhcnkgc28gSSByZW1vdmVkIGl0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgYXBwcy9zbm1wdHJhcGQuYywgCisgICAgICBzbm1wbGliL2ludDY0LmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvc25tcF9zZWNtb2QuYywgCisgICAgICBzbm1wbGliL3NubXB2My5jOiBBZGQgbWlzc2luZyBpbmNsdWRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6IFVzZSB0aGUgcmlnaHQgZmVhdHVyZQorCisgbWFjcm8gaW4gb3JkZXIgdG8gbWFrZSBidWlsZHMgd2l0aCAtLWVuYWJsZS1pcHY2CisgLS13aXRoLW91dC10cmFuc3BvcnRzPVVEUElQdjYgc3VjY2VlZC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOiBSZW1vdmUgZHVwbGljYXRlIGNvcGllcyBvZgorCisgZnVuY3Rpb25zIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6IHR3ZWFrIGRlYnVnIG1lc3NhZ2UgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMjUgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogdXBkYXRlCisKKyBjZXJ0IHRva2VuIGhhbmRsaW5nICAtIHJlbW92ZSBkZWZYNTA5IGNlcnQgdG9rZW5zIChzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYmVmb3JlIDUuNikgIC0gd2FybmluZ3MgZm9yIG91ci90aGVpciB0b2tlbnMsIHJlY29tbWVuZCB1c2luZyBsb2NhbC9wZWVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzogbWVyZ2UgbmV0c25tcF9kdGxzdWRwNgorICAgICAgaW50bworCisgbmV0c25tcF9kdGxzdWRwICAgIHVzZSBhZGRyIHNpemUgdG8gdGVsbCB0aGVtIGFwYXJ0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzogbG9nIChvbmNlKSB3YXJuaW5nIHdoZW4gZGVwcmVjYXRlZAorCisgZl9jcmVhdGVfZnJvbV90c3RyaW5nIHRyYW5zcG9ydCBmdW5jdGlvbiB1c2VkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDE1NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0yNSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmM6IHJlZHVjZSBjYXN0aW5nOyBtYWtlIHN1cmUgdG8KKworIGZyZWUgdGhlIHJpZ2h0IHBvaW50ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTUzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI1ICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6IHJlZHVjZSBjYXN0aW5nIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTI0ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogUmVwbGFjZSBhIHZhcmlhYmxlIHdpdGggYQorCisgY29uc3RhbnQuIE1ha2Ugb25lIG1vcmUgb2lkIGNvbnN0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTUxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE4ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENIQU5HRVM6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE0NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xOCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDE0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xOCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlIGRlcGVuZCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTggIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbgorCisgdXBkYXRlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTggIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxNDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1hbi9zbm1wZGVsdGEuMS5kZWY6IEZvcm1hdHRpbmcgYm90Y2ggZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGRlbHRhLjEuZGVmOiBGb3JtYXR0aW5nIGJvdGNoIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL01ha2VmaWxlLmluOiBJbnN0YWxsIHJlcXVpcmVkIG1pYnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTQxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtaWJzL01ha2VmaWxlLmluOiBJbnN0YWxsIHJlcXVpcmVkIG1pYnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNDEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTcgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIG1pYnMvcmZjbGlzdDogTmV3IFJGQyBtaWJzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDE0MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWlicy9yZmNsaXN0OiBOZXcgUkZDIG1pYnMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxNDAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUywgTkVXUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTM4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTM3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlCisKKyBkZXBlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDEzNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sIAorICAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgcGVybC9hZ2VudC9hZ2VudC5wbSwgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICAgIFZlcnNpb24KKworIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDEzNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS50b3A6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDEzNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmM6IFNwZWxsaW5nIGZpeDogcmVnaW5lcmF0ZWQgLT4gcmVnZW5lcmF0ZWQuIAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYzogU3BlbGxpbmcgZml4OiByZWdpbmVyYXRlZCAtPiByZWdlbmVyYXRlZC4gCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmM6IFNpbXBsaWZpZWQgcjE5NTk0IChsZWFrLWF0LWV4aXQgZml4KS4gCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzogRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzCisKKyBpbnRyb2R1Y2VkIGluIHIyMDExMy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcworCisgaW50cm9kdWNlZCBpbiByMjAxMTMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTQgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogQ0hBTkdFUywgTkVXUzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTI4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIENoYW5nZUxvZzogdmVyc2lvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTI3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTE0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOiBtYWtlCisKKyBkZXBlbmQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIAorICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF91dGlsLjMsCisgICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEyNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sIAorICAgICAgcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICAgIFZlcnNpb24KKworIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS50b3A6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDEyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBGaXggbWFpbiBhZ2VudCBzZWxlY3QgY2FsbCB0byB1c2UgdGhlIHJlbmFtZWQgQVBJCisKKyByb3V0aW5lLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEyMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBGaXggbWFpbiBhZ2VudCBzZWxlY3QgY2FsbCB0byB1c2UgdGhlIHJlbmFtZWQgQVBJCisKKyByb3V0aW5lLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEzICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogCisKKyBCcmluZyB0aGUgbmFtaW5nIG9mIHRoZSBsYXJnZV9mZF9zZXQgc2VsZWN0IGNhbGwgaW50byBsaW5lIHdpdGggdGhlCisgcmVzdCBvZiB0aGUgQVBJLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDEyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMyAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IAorCisgQnJpbmcgdGhlIG5hbWluZyBvZiB0aGUgbGFyZ2VfZmRfc2V0IHNlbGVjdCBjYWxsIGludG8gbGluZSB3aXRoIHRoZQorIHJlc3Qgb2YgdGhlIEFQSS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTMgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiAKKworIEJyaW5nIHRoZSBuYW1pbmcgb2YgdGhlIGxhcmdlX2ZkX3NldCBzZWxlY3QgY2FsbCBpbnRvIGxpbmUgd2l0aCB0aGUKKyByZXN0IG9mIHRoZSBBUEkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTMgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiAKKworIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBBZGQgdGhlIGZ1bmN0aW9uCisgbmV0c25tcF9sYXJnZV9zZWxlY3QoKSAocGx1cyB0d2Vha3MgdG8gbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDIwMTIwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEyICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IENIQU5HRVM6IHNubXBsaWI6IHJlYWxsb2MraW5pdAorCisgaW5zdGVhZCBvZiBjYWxsb2MgIGluc3BpcmVkIGJ5IHBhdGNoIDMxOTU1MzIgZnJvbSBTdGVwaGVuIEhlbW1pbmdlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEyICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IENIQU5HRVM6IHNubXBsaWI6IHJlYWxsb2MraW5pdAorCisgaW5zdGVhZCBvZiBjYWxsb2MgIGluc3BpcmVkIGJ5IHBhdGNoIDMxOTU1MzIgZnJvbSBTdGVwaGVuIEhlbW1pbmdlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTE5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEyICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IENIQU5HRVM6IHNubXBsaWI6IHJlYWxsb2MraW5pdAorCisgaW5zdGVhZCBvZiBjYWxsb2MgIGluc3BpcmVkIGJ5IHBhdGNoIDMxOTU1MzIgZnJvbSBTdGVwaGVuIEhlbW1pbmdlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTIgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5Lmg6CisKKyBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIHJvdXRlIHRhYmxlcyBmcm9tCisgU3RlcGhlbiBIZW1taW5nZXIgIGFwcGxpZWQgcGFydHMgMS0zIG9mIDQgZnJvbSBoaW0gKG1zZ3MgdG8gY29kZXJzIG9uIDIvMjgvMTE7IHN1YmplY3QgIGlwLWZvcndhcmQtbWliIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50czsgcGFydCA0IG5lZWRzIG1vcmUgd29yayBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwMTE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEyICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jOiBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIHJvdXRlCisKKyB0YWJsZXMgZnJvbSBTdGVwaGVuIEhlbW1pbmdlciAgYXBwbGllZCBwYXJ0cyAxLTMgb2YgNCBmcm9tIGhpbSAobXNncyB0byBjb2RlcnMgb24gMi8yOC8xMTsgc3ViamVjdCAgaXAtZm9yd2FyZC1taWIgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnRzOyBwYXJ0IDQgbmVlZHMgbW9yZSB3b3JrIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTIgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDogb3B0aW1pemF0aW9ucyBmb3IgbGFyZ2Ugcm91dGUKKworIHRhYmxlcyBmcm9tIFN0ZXBoZW4gSGVtbWluZ2VyICBhcHBsaWVkIHBhcnRzIDEtMyBvZiA0IGZyb20gaGltIChtc2dzIHRvIGNvZGVycyBvbiAyLzI4LzExOyBzdWJqZWN0ICBpcC1mb3J3YXJkLW1pYiBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudHM7IHBhcnQgNCBuZWVkcyBtb3JlIHdvcmsgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTE4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWI6IGFkZCBtb3JlCisKKyBvcGVuc3NsIGVycm9yIGNhc2VzIHdoZXJlIHdlIGNoZWNrIGZvciBsb2NhbCBjZXJ0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzogQ0hBTkdFUzogc25tcGxpYjogYWRkIG1vcmUKKworIG9wZW5zc2wgZXJyb3IgY2FzZXMgd2hlcmUgd2UgY2hlY2sgZm9yIGxvY2FsIGNlcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTE3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6IE1pbkdXOiBkc2tUYWJsZTogUmVwb3J0IHplcm8gZm9yCisKKyB1bmltcGxlbWVudGVkIGZpZWxkcyBpbnN0ZWFkIG9mIHJhbmRvbSBkYXRhLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOiBNaW5HVzogZHNrVGFibGU6IFJlcG9ydCB6ZXJvIGZvcgorCisgdW5pbXBsZW1lbnRlZCBmaWVsZHMgaW5zdGVhZCBvZiByYW5kb20gZGF0YS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHJhY2UKKworIGNvbmRpdGlvbiBpbiBoclNXUnVuVGFibGUgVHJlYXQgdGhlIHJlYWRzIGZyb20gL3Byb2MvPHBpZD4vKgorIGNhcmVmdWx5LCBwcm9jZXNzZXMgY2FuIGV4aXQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDExNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzogQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHJhY2UKKworIGNvbmRpdGlvbiBpbiBoclNXUnVuVGFibGUgVHJlYXQgdGhlIHJlYWRzIGZyb20gL3Byb2MvPHBpZD4vKgorIGNhcmVmdWx5LCBwcm9jZXNzZXMgY2FuIGV4aXQgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDExNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOiBDSEFOR0VTOiBzbm1wZDogQnVpbGRzCisKKyB3aXRoIG1vc3QgcmVjZW50IE1pbkdXIChoYXZpbmcgI2RlZmluZSBsb2NhbHRpbWVfcikuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTE0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTExICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6IENIQU5HRVM6IHNubXBkOiBCdWlsZHMKKworIHdpdGggbW9zdCByZWNlbnQgTWluR1cgKGhhdmluZyAjZGVmaW5lIGxvY2FsdGltZV9yKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IENIQU5HRVM6IHNubXBsaWI6CisKKyByZWZpbmUgY2VydCBkZWJ1Z2dpbmc7IHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IENIQU5HRVM6IHNubXBsaWI6CisKKyByZWZpbmUgY2VydCBkZWJ1Z2dpbmc7IHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBSb2JlcnQgU3RvcnkgPHJzdG9yeUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzIwNTc2NTogaGFuZGxlIHJlY29uZmlnCisKKyBmb3IgY2VydFNlY05hbWUgdG9rZW4gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDExMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMyMDU3NjU6IGhhbmRsZSByZWNvbmZpZworCisgZm9yIGNlcnRTZWNOYW1lIHRva2VuIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogU3BlbGxpbmcgZml4IGluIGEgc291cmNlIGNvZGUgY29tbWVudDogbWVzc2dlcyAtPgorCisgbWVzc2FnZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wZC5jOiBTcGVsbGluZyBmaXggaW4gYSBzb3VyY2UgY29kZSBjb21tZW50OiBtZXNzZ2VzIC0+CisKKyBtZXNzYWdlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IE1pbm9yCisKKyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gb2YgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTEwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogTWlub3IKKworIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBvZiBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDExMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMjAzODA2OiBBdm9pZCB0aGF0IHRoZSBtYWluCisKKyBhZ2VudCBwcm9jZXNzaW5nIGxvb3AgLSB3aGVuIHVzaW5nIG1vcmUgdGhhbiBGRF9TRVRTSVpFIGZpbGUKKyBkZXNjcmlwdG9ycyAtIGNhbiBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiBieSBpbnZva2luZyBzZWxlY3QoKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBkLmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzIwMzgwNjogQXZvaWQgdGhhdCB0aGUgbWFpbgorCisgYWdlbnQgcHJvY2Vzc2luZyBsb29wIC0gd2hlbiB1c2luZyBtb3JlIHRoYW4gRkRfU0VUU0laRSBmaWxlCisgZGVzY3JpcHRvcnMgLSBjYW4gY2F1c2UgbWVtb3J5IGNvcnJ1cHRpb24gYnkgaW52b2tpbmcgc2VsZWN0KCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogCisKKyBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogQWRkIHRoZSBmdW5jdGlvbgorIG5ldHNubXBfbGFyZ2Vfc2VsZWN0KCkuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMTA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IAorCisgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IEFkZCB0aGUgZnVuY3Rpb24KKyBuZXRzbm1wX2xhcmdlX3NlbGVjdCgpLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTA4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYzogCisKKyBGaXhlZCB0d28gY29tcGlsZXIgd2FybmluZ3MgKGJhY2twb3J0ZWQgcjIwMDk4IGZyb20gdGhlIHRydW5rKS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA5bGFyZ2VfZmRfc2V0X2NsaWIuYzogQWRkZWQgYQorCisgbWluaW1hbCB1bml0IHRlc3QgZm9yIG5ldHNubXBfbGFyZ2VfZmRfc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMTA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOWxhcmdlX2ZkX3NldF9jbGliLmM6IEFkZGVkIGEKKworIG1pbmltYWwgdW5pdCB0ZXN0IGZvciBuZXRzbm1wX2xhcmdlX2ZkX3NldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAxMDYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBNYWtlCisKKyBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoKSBjbGVhciBhbGwgcmVsZXZhbnQgZmlsZSBkZXNjcmlwdG9ycy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDEwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzogQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDMyMDM4MDY6IE1ha2UKKworIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpIGNsZWFyIGFsbCByZWxldmFudCBmaWxlIGRlc2NyaXB0b3JzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE3ODM4OTogRml4IGluY29uc2lzdGVudAorCisgaGFuZGxpbmcgb2YgVFogb2Zmc2V0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwMTA0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcC10Yy5jOiBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTc4Mzg5OiBGaXggaW5jb25zaXN0ZW50CisKKyBoYW5kbGluZyBvZiBUWiBvZmZzZXRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjAxMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNzgzODk6IEZpeCBpbmNvbnNpc3RlbnQKKworIGhhbmRsaW5nIG9mIFRaIG9mZnNldHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDEwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXAtdGMuYzogQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE3ODM4OTogRml4IGluY29uc2lzdGVudAorCisgaGFuZGxpbmcgb2YgVFogb2Zmc2V0cyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAxMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMTAgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6IENIQU5HRVM6IHNubXBkOiBCVUc6IDMxNzgzODk6IEZpeCBpbmNvbnNpc3RlbnQKKworIGhhbmRsaW5nIG9mIFRaIG9mZnNldHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDEwNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6IG1ha2UKKworIHZhcmlhYmxlIG5hbWVzIG1hdGNoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0xMCAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmM6IAorCisgRml4ZWQgdHdvIGNvbXBpbGVyIHdhcm5pbmdzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDk4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTEwICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjogZml4ZWQgaW5zdGFsbGF0aW9uCisKKyB2YXJpYWJsZXMgZm9yIHRoZSBvcHRpb25hbCBTRVQgcHJvZ3JhbXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOiBjaG1vZCBhK3ggZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOiBwcmludCBhbiBlcnJvciBpZiB0aGUgZW5kIG9mCisKKyBhIGZpbGUgd2FzIHJlYWNoZWQgYW5kIHdlJ3JlIG5vdCBiYWNrIGludG8gdGhlIHN0YXRlIHdlIGNhbiB3cml0ZTsKKyBvdGhlcndpc2UgYSBjbG9zaW5nICNpZmRlZiBpcyBtaXNzaW5nLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDk1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzogZml4IGVuZGlmIGNvbW1lbnQgdG8gbWF0Y2gKKworIHRoZSBvcGVuaW5nIGlmZGVmIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6IHJlc2V0IHRoZSBjYW53cml0ZSBmbGFnIGZvcgorCisgZXZlcnkgZmlsZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6IHRlbXBvcmFyaWx5IGxlYXZlIGluCisKKyBoZWFkZXIgZmlsZXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDkyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYzogY2hhbmdlIHRoZSB1bmlxdWUgZmlsZSBjaGVjayB0byBvbmUgdGhhdAorCisgaXMgbm90IGluIHRoZSBtaWJncm91cCBkaXJlY3RvcnkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9yZWFkLW9ubHkvVDAxNDFzbm1wdjJjc2V0ZmFpbF9zaW1wbGU6IGEgdGVzdCBmb3IKKworIGVuc3VyaW5nIHRoZSBhZ2VudCByZWplY3RzIFNFVCByZXF1ZXN0cyB3aXRoIC0tZW5hYmxlLXJlYWQtb25seSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwOTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZTogYWRkIGJhY2sgaW4gdGhlCisKKyBzdG9wYWdlbnQgY29tbWFuZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDFwZHVfdHlwZV9jbGliLmMsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYywgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDNwZHVfcGFyc2VfY2xpYi5jOiB1bml0IHRlc3RzCisgICAgICB3cml0ZW4KKworIGZvciB0aGUgcmVhZC1vbmx5IHN1cHBvcnQgY29udmVydGVkIHRvIHdvcmsgd2l0aCBvciB3aXRob3V0CisgcmVhZC1vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOiBkb24ndCBydW4gdGhlCisKKyBzZXQgdGVzdCBpZiBub193cml0ZV9zdXBwb3J0IGlzIHR1cm5lZCBvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGU6IHNraXAgaWYKKworIG5vX3dyaXRlX3N1cHBvcnQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6IEEgbmV3IHRlc3QgdG8KKworIGNoZWNrIHdoZXRoZXIgU05NUHYyYyBTRVRzIHRvIHN5c0NvbnRhY3Qgd29yayBhcyBleHBlY3RlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3Zhbnljb25maWc6IGFsbG93IGZvciB2MmMgU0VUIHN1cHBvcnQKKworIHRlc3RpbmcgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDg0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzogQWxsb3cgZm9yIHNpbmdsZSBxdW90ZXMgZm9yIHZhY20KKworIGNvbnRleHQgbmFtZSBxdW90aW5nIHRvbyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZTogZml4IHRoZSBjb25maWd1cmUgdGVzdHMgdG8gaW5jbHVkZSB0aGUgd29yZCB0ZXN0IGluIHRoZQorCisgdGVzdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjogZml4IHRoZSBjb25maWd1cmUgdGVzdHMgdG8gaW5jbHVkZQorCisgdGhlIHdvcmQgdGVzdCBpbiB0aGUgdGVzdCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwODEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXM6IEFkZGVkIGFuIGFubm95aW5nbHkgbG9uZworCisgbGlzdCBvZiBleGNlcHRpb25zIHRoYXQgbmVlZHMgdG8gYmUgYXV0b21hdGVkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA4MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczogQSBxdWljayBwZXJsIHNjcmlwdCB0bworCisgcmVtb3ZlIHVubmVlZGVkIGNvZGUgbW9kdWxlcyBmcm9tIHRoZSBtb2R1bGVzIGRpcmVjdG9yeSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi92YWNtLmM6IG1vcmUKKworIGltcHJvdmVtZW50cyAocmVtb3ZlbWVudHMpIGZvciBmZWF0dXJpemF0aW9uIGFuZCByZWFkLW9ubHkgc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOiBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDoKKworIDMxOTU1Mzc6IE1pbm9yIGJpbmFyeV9hcnJheSBjb250YWluZXIgc29ydCBvcHRpbWl6YXRpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA3NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOgorCisgMzE5NTUzNzogTWlub3IgYmluYXJ5X2FycmF5IGNvbnRhaW5lciBzb3J0IG9wdGltaXphdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDYgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYzogVGFicyB0byBzcGFjZXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA3NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNiAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jOiBUYWJzIHRvIHNwYWNlcworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDYgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOiBDb25maWd1cmUgY2hlY2sgZm9yIGdldGhvc3RuYW1lMgorCisgVXNlIGdldGFkZHJpbmZvIGlmIGF2YWlsYWJsZS4gTm93IHdvcmtzIGZvciBTb2xhcmlzIChhbmQgV2luZG93cz8pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDYgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOiBDb25maWd1cmUgY2hlY2sgZm9yIGdldGhvc3RuYW1lMgorCisgVXNlIGdldGFkZHJpbmZvIGlmIGF2YWlsYWJsZS4gTm93IHdvcmtzIGZvciBTb2xhcmlzIChhbmQgV2luZG93cz8pIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNSAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRlc3QuYzogQWRkIGRyb3BwZWQgfHwncyBmcm9tIHIyMDA3MiBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYzogQ2xlYW4gdXAsIGFuZAorCisgY29zb2xpZGF0ZSByZXN1bHQgdGFibGUgcm93IGNyZWF0aW9uIGludG8gYSBuZXcgZnVuY3Rpb24uICBTYXZlcyAyMDAKKyBsaW5lcyBvZiBjb2RlLCB3aXRoIChob3BlZnVsbHkpIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDUgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmM6IENsZWFuIHVwLCBhbmQKKworIGNvc29saWRhdGUgcmVzdWx0IHRhYmxlIHJvdyBjcmVhdGlvbiBpbnRvIGEgbmV3IGZ1bmN0aW9uLiAgU2F2ZXMgMjAwCisgbGluZXMgb2YgY29kZSwgd2l0aCAoaG9wZWZ1bGx5KSBubyBmdW5jdGlvbmFsaXR5IGNoYW5nZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNzMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXB0ZXN0LmMsIGNvbmZpZ3VyZSwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6IGRvbid0IGJ1aWxkIFNFVCByZWxhdGVkIGFwcHMgd2l0aAorCisgLS1lbmFibGUtcmVhZC1vbmx5IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA3MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOiBmaXgKKworIGlzc3VlcyB3aXRoIGNvbWJpbmluZyAtLWVuYWJsZS1taW5pbWFsaXN0IGFuZCAtLWVuYWJsZS1yZWFkLW9ubHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6IGJldHRlciBvdXRwdXQgZm9yIGZpbmRpbmcKKworIG9iamVjdCBzeW1ib2xzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6IGxhc3QgY29tbWl0OiBjaGFuZ2VzIHRvIGFsbG93CisKKyBwYXJzaW5nIG9mIGZlYXR1ZXJzIGZpbGVzIHRvIGdldCBhbGwgbWluaW1hbGlzdCB0YWdzIHdoaWNoIGFyZSB0aGVuCisgcHJvY2Vzc2VkIGZvciByZW1vdmFsIHRoaXMgY29tbWl0OiBjaGFuZ2VkIGNvbW1lbnRzL3doaXRlIHNwYWNlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzogYWRkZWQgbm9fd3JpdGUgc3VwcG9ydCB0byBleHRlbmQuYworICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6IEFkZGVkIG1pc3NpbmcgI2VuZGlmIGNvbW1lbnQgZm9yIHJlbW92ZQorCisgaWZkZWYgY29kZSBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgTWlrZSBCYWVyIDxiYWVybUBzdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOiBhZGRlZCBjaGFuZ2VzIHRvIGFsbG93IGNvZGUKKworIHJlbW92YWwgaW4tcGxhY2UgKGkuZS4gZG9lcyBub3QgcmVxdWlyZSBjcmVhdGluZyBhIG5ldyBmaWxlKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2lnbm9yZS5yZWdleHA6IGFkZGluZyBhIGlnbm9yZS5yZWdleHAgZmlsZSB0aGF0CisKKyBjYW4gYmUgdXNlZCB3aXRoIHJlbW92ZWlmZGVmY29kZS5wbCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczogYWRkIGEgb3V0Z29pbmcgbGluayB0byB0aGUKKworIHBhcmVudCBtYXJraW5nIHBhZ2UgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDY0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBBZGRlZCBhIHdpa2kgb3V0cHV0IG1vZGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDYzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IE5vdGUgdGhhdCB0aGUgb3JnIG91dHB1dCBpcyB0aGUKKworIGRlZmF1bHQgaW4gdGhlIGhlbHAgb3V0cHV0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQKKworICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbiBVQ0QtU05NUC1NSUI6OnN5c3RlbVN0YXRzIG9uCisgTGludXggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDA2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQKKworICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbiBVQ0QtU05NUC1NSUI6OnN5c3RlbVN0YXRzIG9uCisgTGludXggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDA2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQKKworICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbiBVQ0QtU05NUC1NSUI6OnN5c3RlbVN0YXRzIG9uCisgTGludXggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA2MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jOiBDSEFOR0VTOiBzbm1wZDogZml4ZWQKKworICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbiBVQ0QtU05NUC1NSUI6OnN5c3RlbVN0YXRzIG9uCisgTGludXggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDYxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywKKyAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyByZWNsYXNzaWZpY2F0aW9uIG9mIHRoZSByZW1haW5pbmcgZmVhdHVyZXMgaW50byBhIGhpZXJhcmNoeSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6IGRvbid0IGRvdWJsZS1kZWNsYXJlIGNlcnRfdXRpbHMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzogdGhlCisKKyBpcGFkZHJlc3NfbGludXggd2FzIGluY29ycmVjdGx5IG1hcmtlZCBhcyBuZWVkaW5nIGNlcnRfZmluZ2VycHJpbnRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA1OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzogcHV0IHRoZSBhZ2VudF9yZWdpc3RyeSBmZWF0dXJlIGluCisKKyBsaWJuZXRzbm1wYWdlbnQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOiBDSEFOR0VTOiBXaW4zMjogRGVwcmVjYXRlZAorCisgbGlic25tcC5kZWYgLSBhZGQgTkVUU05NUF9JTVBPUlQgdG8gZnVuY3Rpb24gZGVjbGFyYXRpb25zIGluc3RlYWQgdG8KKyBleHBvcnQgYSBmdW5jdGlvbiBmcm9tIG5ldHNubXAuZGxsLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6IENIQU5HRVM6IFdpbjMyOiBEZXByZWNhdGVkCisKKyBsaWJzbm1wLmRlZiAtIGFkZCBORVRTTk1QX0lNUE9SVCB0byBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zdGVhZCB0bworIGV4cG9ydCBhIGZ1bmN0aW9uIGZyb20gbmV0c25tcC5kbGwuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6IE1vdmVkIGEgc291cmNlIGNvZGUgY29tbWVudAorCisgc3VjaCB0aGF0IGl0IGlzIGFnYWluIGltbWVkaWF0ZWx5IGFib3ZlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaXQKKyBhcHBsaWVzIHRvLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDA1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOiBBZGRlZCBtaXNzaW5nCisgICAgICBORVRTTk1QX0lNUE9SVAorCisgZGVjbGFyYXRpb25zLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6IEFkZGVkIG1pc3NpbmcKKyAgICAgIE5FVFNOTVBfSU1QT1JUCisKKyBkZWNsYXJhdGlvbnMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDU0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYsIHdpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWY6IAorCisgUmVtb3ZlZCB0d28gb2Jzb2xldGUgV2luMzIgZmlsZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZiwgd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZjogCisKKyBSZW1vdmVkIHR3byBvYnNvbGV0ZSBXaW4zMiBmaWxlcy4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjAwNTMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzogVHJpdmlhbCBjb21tZW50IGZpeDoKKworIHNubXBJUHY2QmFzZURvbWFpbi5jIGNvbnRhaW5zIElQdjYgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyBpbnN0ZWFkIG9mIElQdjQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzogVHJpdmlhbCBjb21tZW50IGZpeDoKKworIHNubXBJUHY2QmFzZURvbWFpbi5jIGNvbnRhaW5zIElQdjYgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyBpbnN0ZWFkIG9mIElQdjQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwMDUyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9jb25maWcuaDogUmVtb3ZlZCBhbiBvYnNvbGV0ZSBmaWxlLiAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgd2luMzIvc25tcHNtX3NodXRkb3duLmgsIAorICAgICAgd2luMzIvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmg6IEJ1aWxkcyBhZ2FpbiB3aXRoIFZpc3VhbCBTdHVkaW8KKworIGFmdGVyIHRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlICJmZWF0dXJlIiBmZWF0dXJlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQ5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9zbm1wc21faW5pdC5oOiBSZW1vdmVkIGEgbWlzbGVhZGluZyBjb21tZW50LiAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjogQ29ycmVjdCB0aGUgY2hlY2sgb2YKKworIHdldGhlciB1c20gc2VjdXJpdHkgaXMgZW5hYmxlZC4gIFJlZ2VuZXJhdGUgY29uZmlndXJlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQ3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogUmVnZW5lcmF0ZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jOiBBZGQgbWlzc2luZyBkZXBlbmRlbmNpZXMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB1c20uYzogSWdub3JlIHRoZSByZXR1cm4gdmFsdWUgZnJvbQorCisgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6IFNwbGl0IHRoZSBjb250YWluZXJfY29tcGFyZV9mdW5jdGlvbnMgZmVhdHVyZQorCisgaW50byBjb250YWluZXJfY29tcGFyZV9tZW0sIGNvbnRhaW5lcl9jb21wYXJlX2xvbmcsCisgY29udGFpbmVyX2NvbXBhcmVfdWxvbmcsIGNvbnRhaW5lcl9jb21wYXJlX2ludDMyIGFuZAorIGNvbnRhaW5lcl9jb21wYXJlX3VpbnQzMiBVbmlmeSB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb21wYXJlCisgZnVuY3Rpb25zIGZ1cnRoZXIuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwNDMgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDMtMDIgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOiBDaGFuZ2UgdGhlIHNwZWxsaW5nIG9mIHRoZQorCisgY29udGFpbmVyX2NvbXBhcmVfY3N0cmluZyBmZWF0dXJlIHRvIGNvbnRhaW5lcl9uY29tcGFyZV9jc3RyaW5nIGFzCisgdGhhdCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcyBndWFyZGVkIGJ5IHRoYXQgYXR0cmlidXRlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAzLTAyICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6IEFkZCB0aGUgbWlzc2luZyByZXBsYWNlbWVudAorCisgbWFjcm8gZm9yIHNubXBfaW5pdF9zdGF0aXN0aWNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDA0MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMy0wMiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOiBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkKKworIHRha2VzIHR3byBhcmd1bWVudHMgc28gbGV0IHRoZSByZXBsYWNlbWVudCBtYWNybyB0YWtlIHR3byBhcmd1bWVudHMKKyBhcyB3ZWxsLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDQwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI3ICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYzogRml4IHR5cG8gaW4KKworIHIxOTk5MCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2s6IFJlbW92ZSBsaW5lcyBzdGFydGluZyB3aXRoICNkZWZpbmUKKworIGluIHRoZSBvdXRwdXQgb2YgdGhlIHByZXByb2Nlc3NvciBXaGVuIGdjYyAtRSBpcyBjYWxsZWQgd2l0aCAtZ2dkYjMKKyAob3IgLWREKSB0aGVuIGFsbCB0aGUgbWFjcm8gZGVmaW5pdGlvbnMgYXJlIHBhc3NlZCB0aHJvdWdoIHRoZQorIHByZXByb2Nlc3NvciBhbmQgdGhhdCBtZXNzZXMgdXAgb3VyIHByb2Nlc3NpbmcuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBNYWtlZmlsZS5ydWxlczogUHV0IHRoZSBnZW5lcmF0ZWQgZmlsZSBpbiB0aGUgYnVpbGQgdHJlZSwgbm90IHRoZQorCisgc291cmNlIHRyZWUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcgorICAgICAgIGZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmCisgICAgICAgYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLgorICAgICAgIGMsIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYzogbW92ZWQgYSBidW5jaCBvZiBmZWF0dXJlcyBpbnRvIHRoZSBsaWJuZXRzbm1wbWlicyBmZWF0dXJlIHNldC4KKyAgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfaW5kZXguYywgCisgICAgICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF90cmFwLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jLCAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHMsIHNubXBsaWIvbWliLmM6CisKKyBjbGFzc2lmaWVkIGxpYm5ldHNubXBhZ2VudCBmZWF0dXJlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiByZXZlcnNlIHRoZSBvcmRlciBvZiB0aGUgbGlicmFyaWVzCisKKyAoc25tcGxpYiBmaXJzdCkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDM0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogb3V0cHV0IGNsZWFudXAgYW5kIGFkZGVkIGFnZW50LW1pYnMKKworIGFuZCBsb2dnaW5nIG9wdGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDMzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogYWRkIGEgZGVmYXVsdCBzZXQgb2YgYXJndW1lbnRzCisKKyBjYWxjdWxhdGUgcmVzdWx0aW5nIHNpemVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAzMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9kaXJfdXRpbHMuYzogQWRkZWQgYSBtaXNzaW5nIDsgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBwcmVmaXggdGhlIG91dHB1dCBmaWxlcyB3aXRoIGEgbnVtYmVyCisKKyB0byBpbmRpY2F0ZSBvcmRlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBzYXZlIHRoZSByZXN1bHRzIG9mIHRoZSBzeXN0ZW0KKworIGV4ZWN1dGlvbnMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDI5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogZW5hYmxlIGJ1aWxkaW5nIG9mIHRoZSByZXN1bHRpbmcKKworIGNvbWJpbmF0aW9ucyBBZGQgYSAtbiBmbGFnIGZvciBkcnktcnVucyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czogZW5hYmxlIHRoZSAtdCB0YWcgZm9yIGxpbWl0aW5nIHR5cGVzCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IEFkZGVkIGFyZ3VtZW50IHBhcnNpbmcgYW5kIGFyZ3VtZW50cworCisgZm9yIHNlbGVjdGluZyBhbmQgbGlzdGluZyB0eXBlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBnZW5lcmF0ZSBjb25maWd1cmUgc2NyaXB0IGFyZ3VtZW50cworCisgZnJvbSBzcGVjcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOiBhZGRlZCBhIGJ1bmNoIG9mIG5ldyBmZWF0dXJlIG9wdGlvbnMKKworIGFuZCBjbGVhbmVkIHVwIGEgYml0IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6IGFkZGVkIGEgbmV3IChub3QgeWV0IHdvcmtpbmcpIHNjcmlwdAorCisgdG8gdGVzdCBzaXppbmcgb2YgdmFyaW91cyBhcmd1bWVudCBzZXRzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IFNpbXBsaWZ5IHRoZSBjb2RlLiBVbmlmeSBzb21lCisKKyBkZWJ1ZyBsb2dzLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI2ICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzogUmVkdWNlIHRoZSBzY29wZSBvZiBhIGZldworCisgdmFyaWFibGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBSZW1vdmUgc29tZSB1bnVzZWQgaW5jbHVkZXMuIAorICAgICAgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBNYWtlIGl0IHBvc3NpYmxlIHRvCisKKyBpbml0aWFsaXplL3VuaW5pdGlhbGl6ZSBtb2R1bGVzIHdpdGggNjQgY2hhcmFjdGVyIG5hbWVzIGFuZCBub3QKKyBzdWZmZXIgd2lsZCB3cml0ZXMuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOiBDb2RlIHJlc3RydWN0dXJpbmcgLSBwdXQgdGhlCisKKyBtYW5hZ2VkIHJvdXRpbmVzIGJlZm9yZSB0aGUgbWFuYWdtZW50IGNvZGUuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjYgIE1hZ251cyBGcm9tcmVpZGUgPG1hZ2ZyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oOiAKKworIENIQU5HRVM6IGxpYm5ldHNubXBtaWJzOiBNYWtlIGFsbCBmdW5jdGlvbnMgaW4gdGhlIGRsbW9kIG1vZHVsZSB0aGF0CisgZG9uJ3QgaGF2ZSB0byBiZSBwdWJsaWMgc3RhdGljIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxNyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNiAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6IFJlbmFtZSBkZWluaXRfZGxtb2QgdG8KKworIHNodXRkb3duX2RsbW9kIGFzIHRoYXQgaXMgd2hhdCBpdCByZWFsbHkgaXMgYWJvdXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jOiBhZGRpbmcgbWluaW1hbGlzdCBpZmRlZnMKKworIHRvIG5ldC1zbm1wLXZhY20gbWliIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBwcm9wZXJseSBoYW5kbGUgdHdpbiBjaGlsZHJlbjsKKworIGFsc28gc29ydCB0aGUgY2hpbGQgbGlzdCBhbHBoYWJldGljYWxseS4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzogSSBzdXBwb3NlIGxvZ2dpbmcgc2hvdWxkIHByb2JhYmx5IGRlZmF1bHQKKworIHRvIGJlaW5nIGEgd2FudGVkIG9wdGlvbiA6LSkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IG9yZy1saW5rIHRoZSBmaWxlcyBpbiB0aGUKKworIG91dHB1dCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5ydWxlcywgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluLCAKKyAgICAgIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrLCBzbm1wbGliL01ha2VmaWxlLmluOiBtYWtlIHRoZQorCisgZmVhdHVyZXMtY2hlY2sgc2NyaXB0IHRyYWNrIHRoZSBmdWxsIHNvdXJjZSBwYXRoIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBjaGFuZ2UgdGhlIGZ1bmN0aW9uIG5hbWVzIHRvCisKKyBtYXRjaCB0aGF0IGl0J3MgcHJpbnRpbmcgdG8gb3JnLW1vZGUgYXQgdGhlIG1vbWVudC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAxMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIvZmlsZV91dGlscy5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL29pZF9zdGFzaC5jLCAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi90b29scy5jOiBsYXN0CisgICAgICBvZgorCisgdGhlIGZlYXR1cmUgY2xhc3NpZmljYXRpb24gaW4gbGlibmV0c25tcCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL3NjYXBpLmM6IG1ha2UgdGhlCisKKyB1c21fc3VwcG9ydCB1dGlsaXRpZXMgc2VsZi1kZWNsYXJlIHRoZW1zZWx2ZXMgYXMgY2hpbGRyZW4gdG8gbWFrZQorIHN1cmUgdGhleSdyZSBwcm9wZXJseSBpbmNsdWRlZCBkdXJpbmcgZGVwZW5kZW5jeSBvcmRlcmluZyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvZGF0YV9saXN0LmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLAorICAgICAgIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCBzbm1wbGliL2ZpbGVfdXRpbHMuYywgCisgICAgICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvc25tcHVzbS5jOiBzdXBlcnN0cnVjdHVyYWxpemF0aW9uaXppbmcKKworIHRoZSBmZWF0dXJlcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc25tcC10Yy5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wX2VudW0uYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3N5c3RlbS5jLCAKKyAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jLCBzbm1wbGliL3Rvb2xzLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvdWNkX2NvbXBhdC5jOgorCisgc2lnbmlmaWNhbnQgcGFyZW50L2NoaWxkIGZlYXR1cmUgY2xhc3NpZmljYXRpb24gZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDA2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcHVzbS5jOiBjbGFzc2lmeSBhIGZldyBjb21wb25lbnRzCisKKyBpbnRvIGEgdG9wLWxldmVsIGxpYm5ldHNubXAgY29tcG9uZW50IGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwNSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL3NjYXBpLmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IHN0cnVjdHVyaXplIHRoZSB1c20gZmVhdHVyZXMgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYzogc3RydWN0dXJlIHRoZSBjb250YWluZXIgZmVhdHVyZXMgaW50byBhCisKKyBoaWVyYXJjaHkgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwMDAzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOiBncm91cCB0aGUgbG9nZ2luZyBoYW5kbGVycyB1bmRlciBhIHBhcmVudAorCisgZmVhdHVyZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjAwMDIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6IGZpeCB0aGUgZXhwZWN0IGFyZ3VtZW50IGNvdW50CisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBmaXggdGhlIG5hbWUgb2YgdGhlIGV4cGVjdGVkCisKKyBpbnB1dCBmaWxlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDAwMCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOiBhcmd1bWVudCBwYXJzaW5nIGFuZCB1c2FnZSgpCisKKyBvdXRwdXQgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTk5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCBzbm1wbGliL29pZF9zdGFzaC5jOiAtCisgICAgICBhZGRlZCB0d28gb2lkX3N0YXNoIGZ1bmN0aW9ucyBhcyBpbmRpdmlkdWFsIGZlYXR1cmVzIC0gY2xlYW5lZCB1cAorICAgICAgc29tZSB3YXJuaW5ncyBpbiB0aGUgdGFibGVfaXRlcmF0b3IgY29kZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk5OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZS54bWw6IEZpeCB0aGUgY29tbWFuZCB0byBjcmVhdGUgYSBuZXcgU1ZOIHRhZyBsaW5lCisgICAgICAoSGF2aW5nIGJyb3VnaHQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgNS41LnggYnJhbmNoICBpbnRvIGxpbmUgd2l0aAorICAgICAgdGhlIG90aGVyIGJyYW5jaGVzLCB0aGUgcHJldmlvdXMgIGNvbW1hbmQgaXMgbm93IHdyb25nIGZvciAqYWxsKgorICAgICAgYnJhbmNoZXMsIHJhdGhlciAgdGhhbiBqdXN0IG1vc3Qgb2YgdGhlbSEpIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZS54bWw6IEZpeCB0aGUgY29tbWFuZCB0byBjcmVhdGUgYSBuZXcgU1ZOIHRhZyBsaW5lCisgICAgICAoSGF2aW5nIGJyb3VnaHQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgNS41LnggYnJhbmNoICBpbnRvIGxpbmUgd2l0aAorICAgICAgdGhlIG90aGVyIGJyYW5jaGVzLCB0aGUgcHJldmlvdXMgIGNvbW1hbmQgaXMgbm93IHdyb25nIGZvciAqYWxsKgorICAgICAgYnJhbmNoZXMsIHJhdGhlciAgdGhhbiBqdXN0IG1vc3Qgb2YgdGhlbSEpIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AxOTk5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZS54bWw6IEZpeCB0aGUgY29tbWFuZCB0byBjcmVhdGUgYSBuZXcgU1ZOIHRhZyBsaW5lCisgICAgICAoSGF2aW5nIGJyb3VnaHQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgNS41LnggYnJhbmNoICBpbnRvIGxpbmUgd2l0aAorICAgICAgdGhlIG90aGVyIGJyYW5jaGVzLCB0aGUgcHJldmlvdXMgIGNvbW1hbmQgaXMgbm93IHdyb25nIGZvciAqYWxsKgorICAgICAgYnJhbmNoZXMsIHJhdGhlciAgdGhhbiBqdXN0IG1vc3Qgb2YgdGhlbSEpIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk5NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZS54bWw6IEZpeCB0aGUgY29tbWFuZCB0byBjcmVhdGUgYSBuZXcgU1ZOIHRhZyBsaW5lCisgICAgICAoSGF2aW5nIGJyb3VnaHQgdGhlIHN0cnVjdHVyZSBvZiB0aGUgNS41LnggYnJhbmNoICBpbnRvIGxpbmUgd2l0aAorICAgICAgdGhlIG90aGVyIGJyYW5jaGVzLCB0aGUgcHJldmlvdXMgIGNvbW1hbmQgaXMgbm93IHdyb25nIGZvciAqYWxsKgorICAgICAgYnJhbmNoZXMsIHJhdGhlciAgdGhhbiBqdXN0IG1vc3Qgb2YgdGhlbSEpIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTk3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6IGRvY3VtZW50YXRpb24KKworIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTk1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sCisgICAgICAgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOiBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk5NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBDaGFuZ2VMb2c6IHZlcnNpb24gdXBkYXRlIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk5MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLAorICAgICAgIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnBtLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbTogVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICAgICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5OTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdjMuYzogQXZvaWQgYSBwb3NzaWJsZSBjcmFzaCBpZiB0aGUgZW5naW5lSUQgaXMgbm90CisKKyBhdmFpbGFibGUgb3Igc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AxOTk5MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB2My5jOiBBdm9pZCBhIHBvc3NpYmxlIGNyYXNoIGlmIHRoZSBlbmdpbmVJRCBpcyBub3QKKworIGF2YWlsYWJsZSBvciBzZXQuICBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDE5OTkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHYzLmM6IEF2b2lkIGEgcG9zc2libGUgY3Jhc2ggaWYgdGhlIGVuZ2luZUlEIGlzIG5vdAorCisgYXZhaWxhYmxlIG9yIHNldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5OTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zbm1wdjMuYzogQXZvaWQgYSBwb3NzaWJsZSBjcmFzaCBpZiB0aGUgZW5naW5lSUQgaXMgbm90CisKKyBhdmFpbGFibGUgb3Igc2V0LiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTkxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI1ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcHYzLmM6IEF2b2lkIGEgcG9zc2libGUgY3Jhc2ggaWYgdGhlIGVuZ2luZUlEIGlzIG5vdAorCisgYXZhaWxhYmxlIG9yIHNldC4gIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5OTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjUgIE1pa2UgQmFlciA8YmFlcm1Ac3VzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuaDogYWRkaW5nIGlmZGVmIGNvZGUKKworIGZvciBtaW5pbWFsaXN0IHN1cHBvcnQgb2YgZGlmZm1hbiBtaWIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTkwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBNaWtlIEJhZXIgPGJhZXJtQHN1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaDoKKworIEFkZGluZyBtaW5pbWFsaXN0IGlmZGVmcyB0byBob3N0IHJlc291cmNlIG1pYiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgc25tcGxpYi9kYXRhX2xpc3QuYzogbWFyayB0aGUKKworIGRhdGFfbGlzdCBmdW5jdGlvbiB0aGF0J3Mgb25seSB1c2VkIGluIHN0YWNoX2NhY2hpbmcgYXMgYSBmZWF0dXJlIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4OCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jOiB3aG9vcHMuICBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzogbW9yZSBtaXNzaW5nIHN0YXNoIHJlZmVyZW5jZXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTg2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTI0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6IGlmZGVmZWQvZmVhdHVyZWQgb3V0IGEgbWlzc2luZworCisgc3Rhc2hfY2FjaGUgc2VjdGlvbiBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODUgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzogbWFrZSB0aGUgcHJlZml4X2luZm8gbW9yZQorCisgaGllcmFyY2hpY2FsIGFuZCBzdWItZmVhdHVyZSB0aGUgdW51c2VkIG9uZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODQgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZTogZG8gaW5jbHVkZSB0aGUgcGVybC9weXRob24gY29kZQorCisgd2hlbiBzZWFyY2hpbmcgZm9yIGZpbGVzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4MyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOiBtYWtlIHRoZSBzZW1pLXVzZWQgdGFibGVfdGRhdGEKKworIGZ1bmN0aW9ucyBjaGlsZHJlbiBvZiB0YWJsZV90ZGF0YV9hbGwgaW5zdGVhZCBvZiBqdXN0IHRhYmxlX3RkYXRhIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk4MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTWFnbnVzIEZyb21yZWlkZSA8bWFnZnJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzogQ29ycmVjdCB0eXBvIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTgxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBNYWdudXMgRnJvbXJlaWRlIDxtYWdmckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDb3JyZWN0IHR5cG8gZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5ODAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L3NubXBfdmFycy5jOiBwcm9wZXIgaW5jbHVkZSBvZiBwcm90b3R5cGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6IGNvbXBhdCBzb21lIGZlYXR1cmUgaGVhZGVyCisKKyBjaGlja2VuIGFuZCBlZ2cgcHJvYmxlbXMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTc4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzogSW5jbHVkZSByZXF1aXJlZCBwcm90b3R5cGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTc3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3NubXB1c20uYzogdW5zaWduZWQganVnZ2xpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTc2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXQKKyAgICAgICBhX2FjY2Vzcy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyB1bnNpZ25lZCBqdWdnbGluZyB0byByZW1vdmUgd2FybmluZ3MgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgdW5zaWduZWQganVnZ2xpbmcgdG8gcmVtb3ZlIHdhcm5pbmdzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk3NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6IEVuYWJsZSAocHJvYmFibHkgZm9yZ290dGVuKQorCisgaXBBZGRyZXNzUHJlZml4VGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk3NCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6IEVuYWJsZSAocHJvYmFibHkgZm9yZ290dGVuKQorCisgaXBBZGRyZXNzUHJlZml4VGFibGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTc0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrLCAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jcywKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmUsIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlLCAKKyAgICAgIGxvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsOiBhZGRlZCBvdGhlciBtaXNzaW5nICduZXcnCisgICAgICBmaWxlcworCisgbm90IGluY2x1ZGVkIGluIHRoZSBtaW5pbWFsaXN0IHBhdGNoIGZpbGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTczIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmM6IExvYWRpbmcKKworIElQdjYgZGF0YSBpcyBhIG5vLW5vIHdoZW4gSVB2NiBub3QgZW5hYmxlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTcyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmM6IExvYWRpbmcKKworIElQdjYgZGF0YSBpcyBhIG5vLW5vIHdoZW4gSVB2NiBub3QgZW5hYmxlZCBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBidWcgMzExODYzMTogc25tcHRhYmxlIHNlZ2ZhdWx0cyBpZiBpbmRleAorCisgY29udGFpbnMgOiBjaGFyYWN0ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AxOTk3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGJ1ZyAzMTE4NjMxOiBzbm1wdGFibGUgc2VnZmF1bHRzIGlmIGluZGV4CisKKyBjb250YWlucyA6IGNoYXJhY3RlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDE5OTcxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhcHBzL3NubXB0YWJsZS5jOiBGaXggYnVnIDMxMTg2MzE6IHNubXB0YWJsZSBzZWdmYXVsdHMgaWYgaW5kZXgKKworIGNvbnRhaW5zIDogY2hhcmFjdGVyIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMTk5NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6IEZpeCBidWcgMzExODYzMTogc25tcHRhYmxlIHNlZ2ZhdWx0cyBpZiBpbmRleAorCisgY29udGFpbnMgOiBjaGFyYWN0ZXIgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk3MSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYXBwcy9zbm1wdGFibGUuYzogRml4IGJ1ZyAzMTE4NjMxOiBzbm1wdGFibGUgc2VnZmF1bHRzIGlmIGluZGV4CisKKyBjb250YWlucyA6IGNoYXJhY3RlciBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NzEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q4Lmg6IEZyZWVCU0QgOCBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AxOTk3MCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMyAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDguaDogRnJlZUJTRCA4IHN1cHBvcnQgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkOC5oOiBGcmVlQlNEIDggc3VwcG9ydCBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NzAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjMgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q4Lmg6IEZyZWVCU0QgOCBzdXBwb3J0IGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTcwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg6IGFkZGVkIG1pc3NpbmcKKworIG5ldC1zbm1wLWZlYXR1cmVzLmggZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTY5IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBNYWtlZmlsZS50b3AsIGFnZW50L01ha2VmaWxlLmluLCAKKyAgICAgIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfaW5kZXguYywgCisgICAgICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAKKyAgICAgIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvbXVsdGlwbGV4ZXIuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYywgYWdlbnQvaGVscGVycy90YWJsZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWMKKyAgICAgICBlLmMsIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9kYXJ3aW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50CisgICAgICAgZXJmYWNlLmMsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhXworICAgICAgIGFjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXIKKyAgICAgICBmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhCisgICAgICAgY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfaW50ZXJmYWNlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jCisgICAgICAgLCBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9pbnRlcmZhY2UuYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0c181XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmCisgICAgICAgYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLgorICAgICAgIGMsIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOCisgICAgICAgVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuCisgICAgICAgYywgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFnZW50L3NubXBfdmFycy5jLCAgYWdlbnQvc25tcGQuYywKKyAgICAgIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvYWdlbnR4dHJhcC5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oLCBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIAorICAgICAgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgYXBwcy9zbm1wdHJhcGQuYywgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9zcWwuYywgY29uZmlndXJlLCAKKyAgICAgIGNvbmZpZ3VyZS5hYywgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0cywKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHBlcmwvT0lEL09JRC54cywgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcGVybC9hZ2VudC9hZ2VudC54cywgc25tcGxpYi9NYWtlZmlsZS5pbiwgCisgICAgICBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyLmMsIHNubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMsIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgc25tcGxpYi9kaXJfdXRpbHMuYywKKyAgICAgICBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgc25tcGxpYi9maWxlX3V0aWxzLmMsCisgICAgICBzbm1wbGliL2ludDY0LmMsICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYywKKyAgICAgIHNubXBsaWIvbWliLmMsICBzbm1wbGliL29pZF9zdGFzaC5jLCBzbm1wbGliL3BhcnNlLmMsCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsICBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcC10Yy5jLAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCAgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXBfZW51bS5jLAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgc25tcGxpYi9zbm1wX3NlY21vZC5jLAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3NubXBrc20uYywgIHNubXBsaWIvc25tcHRzbS5jLAorICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICBzbm1wbGliL3N5c3RlbS5jLAorICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmMsIHNubXBsaWIvdG9vbHMuYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvdWNkX2NvbXBhdC5jLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzY29uZmlnLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3ZhY21jb25maWcsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlLCAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSwgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZTogTkVXUzoKKworIHBhY2thZ2luZzogRW5hYmxlIG1pY3JvLWFuZC1tYWNyby1mZWF0dXJlIG1hbmFnZW1lbnQgd2l0aGluCisgTmV0LVNOTVA7IHRoaXMgYWRkcyBhIG51bWJlciBvZiBuZXcgZmxhZ3MgdG8gY29uZmlndXJlCisgKC0tZW5hYmxlLW1pbmltYWxpc3QgYW5kIC0tZW5hYmxlLXJlYWQtb25seSkuICBUaGVzZSBjaGFuZ2VzIGFyZQorIGRlc2lnbmVkIHRvIHJlbW92ZSBtdWNoIG9mIHRoZSBpbmxpbmUgY29kZSB0aGF0IGlzbid0IGFsd2F5cworIG5lY2Vzc2FyeSBvciBkZXNpcmVkLiAgU2NyaXB0cyBleGlzdCAoYW5kIHdpbGwgYmUgaW1wcm92ZWQpIHRvIHN0aXAKKyBvdXQgdW51c2VkIGNvbXBvbmVudHMgZnJvbSB0aGUgY29kZSBlbnRpcmVseSB0byBlbmFibGUgYSBzaG9ydGVyCisgcmV2aWV3IHByb2Nlc3MgZm9yIHVwZ3JhZGluZyB0byBuZXcgcmVsZWFzZXMuICBUaGlzIHdvcmsgd2FzIGRvbmUgYnkKKyBXZXMgSGFyZGFrZXIgYW5kIE1pY2hhZWwgQmFlciBmcm9tIFNQQVJUQSwgSW5jLiBidXQgaXMgYmVpbmcgY2hlY2tlZAorIGluIGFzIGEgbGFyZ2UgcGF0Y2ggc2luY2UgY29udmVydGluZyB0aGUgbWljcm8gcGF0Y2hlcyBmcm9tIGdpdCB0bworIHN2biB0dXJlbmQgb3V0IHRvIGJlIGltcG9zc2libGUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTY4IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBGQVE6IHVzZSB0aGUgd2lraSBVUkwgaW5zdGVhZCBvZiB0aGUgdHV0b3JpYWwtNSBVUkwgZm9yIHRoZQorCisgc25tcHRyYXAgdHV0b3JpYWwgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTY3IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6IFJldmVydCBhIGJvZ3VzIGNoYW5nZSB0aGF0IGNyZXB0CisKKyBpbnRvIHRoZSBjb2RlLiAgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AxOTk2NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgQUdFTlQudHh0LCBDSEFOR0VTLCBDT1BZSU5HLCBDaGFuZ2VMb2csIENvZGluZ1N0eWxlLCAKKyAgICAgIEVYQU1QTEUuY29uZi5kZWYsIEZBUSwgSU5TVEFMTCwgTWFrZWZpbGUuYW0sIE1ha2VmaWxlLmluLCAKKyAgICAgIE1ha2VmaWxlLnJ1bGVzLCBNYWtlZmlsZS50b3AsIE5FV1MsIFBPUlRJTkcsIFJFQURNRSwgCisgICAgICBSRUFETUUuUGFuYXNvbmljX0FNM1gudHh0LCBSRUFETUUuYWdlbnQtbWlicywgUkVBRE1FLmFnZW50eCwgCisgICAgICBSRUFETUUuYWl4LCBSRUFETUUuaHB1eDExLCBSRUFETUUuaXJpeCwgUkVBRE1FLmtyYjUsIFJFQURNRS5vc1gsIAorICAgICAgUkVBRE1FLnNubXB2MywgUkVBRE1FLnNvbGFyaXMsIFJFQURNRS5zcWwsIFJFQURNRS50aHJlYWQsIAorICAgICAgUkVBRE1FLnRydTY0LCBSRUFETUUud2luMzIsIFRPRE8sIGFjY29uZmlnLmgsIGFjbG9jYWwubTQsIAorICAgICAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCAKKyAgICAgIGFnZW50L2FnZW50X2luZGV4LmMsIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jLCAKKyAgICAgIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvYXV0b19ubGlzdC5jLCBhZ2VudC9hdXRvbmxpc3QuaCwgCisgICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgCisgICAgICBhZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMsIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMsIGFnZW50L2hlbHBlcnMvbXVsdGlwbGV4ZXIuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL251bGwuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIAorICAgICAgYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYywgYWdlbnQvaGVscGVycy90YWJsZS5jLCAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9nZW5lcmljLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMsIAorICAgICAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L2tlcm5lbC5jLCBhZ2VudC9rZXJuZWwuaCwgCisgICAgICBhZ2VudC9tMm0uaCwgYWdlbnQvbWliX21vZHVsZXMuYywgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9SRUFETUUsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUkVBRE1FLnNtdXgsIGFnZW50L21pYmdyb3VwL1Jtb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL1JFQURNRSwgYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5oLCBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbF9hcGkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5oLCAgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oLCAgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMsCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaCwgIGFnZW50L21pYmdyb3VwL1Jtb24vcm93X2FwaS5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMsICBhZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vdGVzdF9hbGFybS5zaCwgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3Rlc3RfaGlzdC5zaCwgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmgsIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmgsIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmgsIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50X21pYnMuaCwgYWdlbnQvbWliZ3JvdXAvYWdlbnR4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCBhZ2VudC9taWJncm91cC9kaXNtYW4uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQtbWliLmgsIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBTY2FsYXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwU2NhbGFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cF9lbnVtLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24tbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL29sZC1ldmVudC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjYworICAgICAgIGVzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2MKKyAgICAgICBlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0CisgICAgICAgLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldAorICAgICAgIC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQKKyAgICAgICAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0CisgICAgICAgLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9lbnVtcy5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjCisgICAgICAgZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWMKKyAgICAgICBlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmgsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMuaCwgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvTWFrZWZpbGUuZGxtb2QsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jb2x1bW5zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfZW51bXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9ub3RpZmljYXRpb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9ub3RpZmljYXRpb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmNtZHMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jb25mLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5oLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2VybmRhdGEuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tlcm5kYXRhLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X251bGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X251bGwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BzdGF0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wc3RhdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21vdW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2Rhcndpbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZHluaXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2hwdXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2lyaXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9udWxsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV93aW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2N5Z3dpbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX25saXN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmgsICBhZ2VudC9taWJncm91cC9ob3N0L2hyX290aGVyLmMsCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX290aGVyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jLCAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oLAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMsICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmgsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmgsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RlZnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9kYXRhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICAuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2NvbnN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUKKyAgICAgICBfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2RhdGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZQorICAgICAgIF9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlCisgICAgICAgX2ludGVyZmFjZS5oLCBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfY29uCisgICAgICAgc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuaCwgYWdlbnQvbWliZ3JvdXAvaXAtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19jb21tb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9jb25zdAorICAgICAgIGFudHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfCisgICAgICAgYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhXworICAgICAgIGFjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXIKKyAgICAgICBmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcgorICAgICAgIGZhY2UuaCwgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uCisgICAgICAgc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuaCwgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2NvbnN0YW50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCwKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfYWNjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfZ2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdAorICAgICAgIGFfZ2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2VudQorICAgICAgIG1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludAorICAgICAgIGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnQKKyAgICAgICBlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkCisgICAgICAgcy5oLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfY29uc3RhbgorICAgICAgIHRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hYworICAgICAgIGNlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjCisgICAgICAgY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmEKKyAgICAgICBjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmEKKyAgICAgICBjZS5oLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9jb25zdGFuCisgICAgICAgdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9kYXRhX2FjCisgICAgICAgY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWMKKyAgICAgICBjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbgorICAgICAgIHQuYywgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9jb25zdGFuCisgICAgICAgdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjCisgICAgICAgY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWMKKyAgICAgICBjZXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYQorICAgICAgIGNlLmgsIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9kYXRhX2FjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9kYXRhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9lbnVtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWIKKyAgICAgICBsZV9pbnRlcmZhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFiCisgICAgICAgbGVfaW50ZXJmYWNlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYgorICAgICAgIGxlX29pZHMuaCwgYWdlbnQvbWliZ3JvdXAvaXBmd2NoYWlucy9SRUFETUUsIAorICAgICAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pZlRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5oLCBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY29sdW1ucy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5oLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5oLCBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5oLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmgsICBhZ2VudC9taWJncm91cC9taWJkZWZzLmgsCisgICAgICBhZ2VudC9taWJncm91cC9taWJpbmNsLmgsICBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzCisgICAgICAgLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2VzcworICAgICAgIC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuYywKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oLAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmMsCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuaCwKKyAgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2VudW1zLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYworICAgICAgICwgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oCisgICAgICAgLCBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX29pZHMuaCwKKyAgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYywgYWdlbnQvbWliZ3JvdXAvc211eC5oLAorICAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eF9nYXRlZC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfY29uc3RhbnRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aQorICAgICAgIGZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpCisgICAgICAgZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGkKKyAgICAgICBmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhQYXJhbWV0ZXJzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhQYXJhbWV0ZXJzL3VzbURIUGFyYW1ldAorICAgICAgIGVycy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIUGFyYW1ldGVycy91c21ESFBhcmFtZXQKKyAgICAgICBlcnMuaCwKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RhdGFfYWNjZXNzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZGF0YV9hY2Nlc3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kYXRhX2dldC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RhdGFfZ2V0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VySworICAgICAgIGV5VGFibGVfZGF0YV9zZXQuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9kYXRhX3NldC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2RveHlnZW4uY29uZiwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLCisgICAgICAgZXlUYWJsZV9lbnVtcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2ludGVyZmFjZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX2ludGVyZmFjZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcksKKyAgICAgICBleVRhYmxlX29pZHMuaCwgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Db25mLmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Db25mLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCwgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oLCBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy9NYWtlZmlsZSwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3ByaXZhdGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5UYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2NvbnN0YQorICAgICAgIG50cy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmYKKyAgICAgICBhY2UuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmCisgICAgICAgYWNlLmgsIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9jb25zdGFudHMuCisgICAgICAgaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXMKKyAgICAgICBzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLgorICAgICAgIGMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLgorICAgICAgIGgsIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMsIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsLmgsIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYywgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmgsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmgsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5oLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLAorICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMsCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMsCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguaCwgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaCwgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfY29tbW9uLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9wcml2YXRlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfY29uc3RhbnRzLgorICAgICAgIGgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2NlcworICAgICAgIHMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2VzCisgICAgICAgcy5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBoLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzLmgsIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuYywgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdmVyc2lvbnRhZywgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmgsIGFnZW50L29iamVjdF9tb25pdG9yLmMsIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jLCBhZ2VudC9zbm1wX3BlcmwuYywgYWdlbnQvc25tcF9wZXJsLmgsIAorICAgICAgYWdlbnQvc25tcF9wZXJsLnBsLCBhZ2VudC9zbm1wX3ZhcnMuYywgYWdlbnQvc25tcGQuYywgCisgICAgICBhZ2VudC9zbm1wZC5oLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5pbiwgCisgICAgICBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgYXBwcy9zbm1wX3BlcmxfdHJhcGQucGwsIAorICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9mZnMuYywgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5oLCAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oLCBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmMsIGFwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5oLCAKKyAgICAgIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgYXBwcy9zbm1wdGFibGUuYywgCisgICAgICBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCBhcHBzL3NubXB0cmFwLmMsIAorICAgICAgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfYXV0aC5jLCBhcHBzL3NubXB0cmFwZF9hdXRoLmgsIAorICAgICAgYXBwcy9zbm1wdHJhcGRfZHMuaCwgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5oLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgCisgICAgICBhcHBzL3NubXB0cmFwZF9sb2cuaCwgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIGFwcHMvc25tcHVzbS5jLCAKKyAgICAgIGFwcHMvc25tcHZhY20uYywgYXBwcy9zbm1wd2Fsay5jLCBhcHBzL3NzaHRvc25tcC5jLCBjb25maWcuZ3Vlc3MsIAorICAgICAgY29uZmlnLnN1YiwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywKKyAgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbCwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L1JFQURNRS5idWlsZC1zY3JpcHRzLCBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TLCAKKyAgICAgIGRpc3QvYXV0b2NvbmYtdmVyc2lvbiwgZGlzdC9jaGFuZ2Vsb2dmaXgsIGRpc3QvY2hlY2stYXBpLWNoYW5nZSwgCisgICAgICBkaXN0L2N2c3Nob3csIGRpc3QvY3ZzdXAsIGRpc3QvZXh0cmFjdG5ld3MsIGRpc3QvZmluZC1yZXF1aXJlcywgCisgICAgICBkaXN0L21ha2VyZWxlYXNlLnhtbCwgZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL0RFVkVOViwgCisgICAgICBkaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvUkVBRE1FLCAKKyAgICAgIGRpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9idWlsZHBhY2thZ2Utc29sYXJpcywgCisgICAgICBkaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvZWxmZGVwZW5kLnNoLCBkaXN0L25ldC1zbm1wLnNwZWMsIAorICAgICAgZGlzdC9uc2ItY29uZmlnLCBkaXN0L25zYi1mdW5jdGlvbnMsIGRpc3QvbnNiLW5pZ2h0bHksIAorICAgICAgZGlzdC9uc2ItcGFja2FnZSwgZGlzdC9uc2ItcGxhdGZvcm0sIGRpc3QvcGF0bWUsIAorICAgICAgZGlzdC9zY2hlbWEtc25tcHRyYXBkLnNxbCwgZGlzdC9zbm1wZC1pbml0LmQsIAorICAgICAgZGlzdC9zbm1wdHJhcGQtaW5pdC5kLCBkaXN0L3N2bnVwLCBkb2MvcmZjL2FnZW50eC9yZmMyNzQxLnR4dCwgCisgICAgICBkb2MvcmZjL21pc2MvcmZjMzUxMi50eHQsIGRvYy9yZmMvbWlzYy9yZmMzNTg0LnR4dCwgCisgICAgICBkb2MvcmZjL3NtaVYyL3JmYzI1NzgudHh0LCBkb2MvcmZjL3NtaVYyL3JmYzI1NzkuZXJyYXRhLCAKKyAgICAgIGRvYy9yZmMvc21pVjIvcmZjMjU3OS50eHQsIGRvYy9yZmMvc21pVjIvcmZjMjU4MC50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjEvcmZjMTE1NS50eHQsIGRvYy9yZmMvc25tcFYxL3JmYzExNTcudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYxL3JmYzEyMTIudHh0LCBkb2MvcmZjL3NubXBWMS9yZmMxMjEzLnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMi9yZmMxOTAxLnR4dCwgZG9jL3JmYy9zbm1wVjIvcmZjMTkwMi50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjIvcmZjMTkwMy50eHQsIGRvYy9yZmMvc25tcFYyL3JmYzE5MDQudHh0LCAKKyAgICAgIGRvYy9yZmMvc25tcFYyL3JmYzE5MDUudHh0LCBkb2MvcmZjL3NubXBWMi9yZmMxOTA2LnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMi9yZmMxOTA3LnR4dCwgZG9jL3JmYy9zbm1wVjIvcmZjMTkwOC50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjIvcmZjMjA4OS50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTAuZXJyYXRhLCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTAudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDExLnR4dCwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDEyLnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxMy5lcnJhdGEsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxMy50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTQuZXJyYXRhLCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTQudHh0LCBkb2MvcmZjL3NubXBWMy9yZmMzNDE1LmVycmF0YSwgCisgICAgICBkb2MvcmZjL3NubXBWMy9yZmMzNDE1LnR4dCwgZG9jL3JmYy9zbm1wVjMvcmZjMzQxNi50eHQsIAorICAgICAgZG9jL3JmYy9zbm1wVjMvcmZjMzQxNy50eHQsIGRvYy9yZmMvc25tcFYzL3JmYzM0MTguZXJyYXRhLCAKKyAgICAgIGRvYy9yZmMvc25tcFYzL3JmYzM0MTgudHh0LCBkb3RnZGJpbml0LCBkb3h5Z2VuLmNvbmYsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaCwgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L29iamVjdF9tb25pdG9yLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2V0X2hlbHBlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfdG9fbmV4dC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oLCBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL25ldC1zbm1wLWRhdGEtYWNjZXNzLWluY2x1ZGVzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvUkVBRE1FLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY211X2NvbXBhdC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgsICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXh0X3V0aWxzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oLCBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaCwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYnNkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYnNkaS5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ic2RpMy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2JzZGk0LmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oLAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RyYWdvbmZseS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2R5bml4LmgsCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDIuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkMy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q3LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4LmgsCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaXJpeC5oLAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0va2ZyZWVic2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oLAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzJtc3ZjLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWlwcy5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29zZjUuaCwKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuMy5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjQuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzMi41LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuNi5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N1bm9zLmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3VsdHJpeDQuaCwKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIGluY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL1JFQURNRSwgaW5jbHVkZS91Y2Qtc25tcC9hZ2VudF9pbmRleC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvYWdlbnRfcmVhZF9jb25maWcuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL2FnZW50X3JlZ2lzdHJ5LmgsIGluY2x1ZGUvdWNkLXNubXAvYWdlbnRfdHJhcC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvYXNuMS5oLCBpbmNsdWRlL3VjZC1zbm1wL2F1dG9fbmxpc3QuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL2NhbGxiYWNrLmgsIGluY2x1ZGUvdWNkLXNubXAvZGVmYXVsdF9zdG9yZS5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvZHNfYWdlbnQuaCwgaW5jbHVkZS91Y2Qtc25tcC9oZWFkZXJfY29tcGxleC5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvaW50NjQuaCwgaW5jbHVkZS91Y2Qtc25tcC9rZXl0b29scy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvbWliLmgsIGluY2x1ZGUvdWNkLXNubXAvbWliX21vZHVsZV9jb25maWcuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL21pYmluY2wuaCwgaW5jbHVkZS91Y2Qtc25tcC9wYXJzZS5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvcmVhZF9jb25maWcuaCwgaW5jbHVkZS91Y2Qtc25tcC9zY2FwaS5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcC10Yy5oLCBpbmNsdWRlL3VjZC1zbm1wL3NubXAuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXBfYWdlbnQuaCwgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2FsYXJtLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2FwaS5oLCBpbmNsdWRlL3VjZC1zbm1wL3NubXBfY2xpZW50LmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2RlYnVnLmgsIGluY2x1ZGUvdWNkLXNubXAvc25tcF9pbXBsLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC9zbm1wX2xvZ2dpbmcuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3NubXBfcGFyc2VfYXJncy5oLCBpbmNsdWRlL3VjZC1zbm1wL3NubXBfdmFycy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc25tcHVzbS5oLCBpbmNsdWRlL3VjZC1zbm1wL3NubXB2My5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvc3RydWN0LmgsIGluY2x1ZGUvdWNkLXNubXAvc3lzdGVtLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC90b29scy5oLCBpbmNsdWRlL3VjZC1zbm1wL3RyYW5zZm9ybV9vaWRzLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC91Y2Qtc25tcC1hZ2VudC1pbmNsdWRlcy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvdWNkLXNubXAtY29uZmlnLmgsIAorICAgICAgaW5jbHVkZS91Y2Qtc25tcC91Y2Qtc25tcC1pbmNsdWRlcy5oLCAKKyAgICAgIGluY2x1ZGUvdWNkLXNubXAvdXRpbF9mdW5jcy5oLCBpbmNsdWRlL3VjZC1zbm1wL3Zhcl9zdHJ1Y3QuaCwgCisgICAgICBpbmNsdWRlL3VjZC1zbm1wL3ZlcnNpb24uaCwgaW5zdGFsbC1zaCwgbG9jYWwvRkFRMkhUTUwsIAorICAgICAgbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL1JFQURNRS5taWIyYywgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCwgCisgICAgICBsb2NhbC9jb252ZXJ0Y29kZSwgbG9jYWwvZml4cHJvYywgbG9jYWwvaHRtbC1hZGQtaGVhZGVyLWZvb3Rlci5wbCwKKyAgICAgICBsb2NhbC9odG1sLXRleHRmaWxlLWZpeC5wbCwgbG9jYWwvaXBmLW1vZC5wbCwgbG9jYWwvbWliMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2RlZmF1bHQtbWZkLXRvcC5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2RldGFpbHMtZW51bXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9kZXRhaWxzLW5vZGUubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9kZXRhaWxzLXRhYmxlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtY29weS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LXNldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZGF0YS1hbGxvY2F0ZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZGF0YS1jb250ZXh0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtY2hhci5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LWRlY2wtYm90Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1nZXQtZGVjbC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LWxvbmcubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1vaWQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWhlYWRlci1ib3R0b20ubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWhlYWRlci10b3AubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtY29uc3RhbnRzLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy1mcm9tLW9pZC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy1zZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXZhcmJpbmQtc2V0dXAubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLW9pZHMubTJjLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXZhbHVlLW1hcC1mdW5jLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy12YWx1ZS1tYXAtcmV2ZXJzZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdmFsdWUtbWFwLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbTJjLWludGVybmFsLXdhcm5pbmcubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tMmNfc2V0dXBfZW51bS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL20yY19zZXR1cF9ub2RlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbTJjX3NldHVwX3RhYmxlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbTJjX3RhYmxlX3NhdmVfZGVmYXVsdHMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtYWNjZXNzLWNvbnRhaW5lci1jYWNoZWQtZGVmaW5lcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1hY2Nlc3MtdW5zb3J0ZWQtZXh0ZXJuYWwtZGVmaW5lcy5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1kYXRhLWFjY2Vzcy5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1kYXRhLWdldC5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1kYXRhLXNldC5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1kb3h5Z2VuLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYywgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1tYWtlZmlsZS5tMm0sIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1yZWFkbWUubTJjLCBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXRvcC5tMmMsCisgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL25vZGUtZ2V0Lm0yaSwgbG9jYWwvbWliMmMtY29uZi5kL25vZGUtc2V0Lm0yaSwKKyAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbm9kZS1zdG9yYWdlLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbm9kZS12YWxpZGF0ZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL25vZGUtdmFyYmluZC12YWxpZGF0ZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3BhcmVudC1kZXBlbmRlbmNpZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9wYXJlbnQtc2V0Lm0yaSwKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1DT1VOVEVSNjQtZ2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LURhdGVBbmRUaW1lLWdldC5tMmQsIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1EYXRlQW5kVGltZS1nZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtRGF0ZUFuZFRpbWUtcmVhZG1lLm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LUluZXRBZGRyZXNzLWdldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1JbmV0QWRkcmVzcy1zZXQubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtSW5ldEFkZHJlc3NUeXBlLWdldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1JbmV0QWRkcmVzc1R5cGUtc2V0Lm0yaSwgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ludGF4LVJvd1N0YXR1cy1kZXBlbmRlbmNpZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtUm93U3RhdHVzLWdldC5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1Sb3dTdGF0dXMtdmFyYmluZC12YWxpZGF0ZS5tMmksIAorICAgICAgbG9jYWwvbWliMmMtY29uZi5kL3N5bnRheC1TdG9yYWdlVHlwZS1kZXBlbmRlbmNpZXMubTJpLCAKKyAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9zeW50YXgtVGVzdEFuZEluY3ItZ2V0Lm0yaSwgbG9jYWwvbWliMmMtdXBkYXRlLAorICAgICAgIGxvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiwgbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLmNoZWNrX3ZhbHVlcy5jb25mLAorICAgICAgbG9jYWwvbWliMmMuY2hlY2tfdmFsdWVzX2xvY2FsLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuY29sdW1uX2RlZmluZXMuY29uZiwgbG9jYWwvbWliMmMuY29sdW1uX2VudW1zLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuY29sdW1uX3N0b3JhZ2UuY29uZiwgbG9jYWwvbWliMmMuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgbG9jYWwvbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5lbXVsYXRpb24uY29uZiwgbG9jYWwvbWliMmMuZ2VuaHRtbC5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLmludF93YXRjaC5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgbG9jYWwvbWliMmMubWZkLmNvbmYsIAorICAgICAgbG9jYWwvbWliMmMubm90aWZ5LmNvbmYsIGxvY2FsL21pYjJjLm9sZC1hcGkuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy5wZXJsLmNvbmYsIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mLCAKKyAgICAgIGxvY2FsL21pYjJjLnJvdy5jb25mLCBsb2NhbC9taWIyYy5zY2FsYXIuY29uZiwgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmYsIGxvY2FsL3Bhc3NfcGVyc2lzdHRlc3QsIAorICAgICAgbG9jYWwvcGFzc3Rlc3QsIGxvY2FsL3Bhc3N0ZXN0LnBsLCBsb2NhbC9zbm1wLXVjZC5zaCwgCisgICAgICBsb2NhbC9zbm1wY2hlY2suZGVmLCBsb2NhbC9zbm1wY29uZiwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcC1kYXRhL2F1dGhvcHRzLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wLWRhdGEvZGVidWdnaW5nLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wLWRhdGEvbWlicywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcC1kYXRhL291dHB1dCwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcC1kYXRhL3NubXBjb25mLWNvbmZpZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9hY2wsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvYmFzaWNfc2V0dXAsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvZXh0ZW5kaW5nLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL21vbml0b3IsIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvb3BlcmF0aW9uLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wZC1kYXRhL3NubXBjb25mLWNvbmZpZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9zeXN0ZW0sIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvdHJhcHNpbmtzLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wdHJhcGQtZGF0YS9hdXRoZW50aWNhdGlvbiwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcHRyYXBkLWRhdGEvZm9ybWF0dGluZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcHRyYXBkLWRhdGEvbG9nZ2luZywgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcHRyYXBkLWRhdGEvcnVudGltZSwgCisgICAgICBsb2NhbC9zbm1wY29uZi5kaXIvc25tcHRyYXBkLWRhdGEvc25tcGNvbmYtY29uZmlnLCAKKyAgICAgIGxvY2FsL3NubXBjb25mLmRpci9zbm1wdHJhcGQtZGF0YS90cmFwaGFuZGxlLCBsb2NhbC9zbm1wZHVtcC5wbCwgCisgICAgICBsb2NhbC90a21pYiwgbG9jYWwvdHJhcHRvZW1haWwsIGx0bWFpbi5zaCwgCisgICAgICBtNC9hY19hZGRfc2VhcmNoX3BhdGgubTQsIG00L2FjX21zZ19jYWNoZS5tNCwgCisgICAgICBtNC9hY19tc2dfbW9kdWxlX2RiZy5tNCwgbTQvYWNfcHJvbXB0X3VzZXIubTQsIG00L2xpYnRvb2wubTQsIAorICAgICAgbTQvbHRvcHRpb25zLm00LCBtNC9sdHN1Z2FyLm00LCBtNC9sdHZlcnNpb24ubTQsCisgICAgICBtNC9sdH5vYnNvbGV0ZS5tNCwgIG00L25ldHNubXBfYXJnLm00LCBtNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00LAorICAgICAgbWFrZWRlcGVuZC5pbiwgIG1ha2VmaWxlaW5kZXBlbmQucGwsIG1ha2Vub3N5c2RlcGVuZC5wbCwKKyAgICAgIG1ha2V0YXJnZXQsICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9hZGRfbWliZGlyLjMsCisgICAgICBtYW4vYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zLCAgbWFuL2NvbmZpZ19hcGkuMy5kZWYsCisgICAgICBtYW4vZGVmYXVsdF9zdG9yZS4zLmJvdCwgIG1hbi9kZWZhdWx0X3N0b3JlLjMudG9wLAorICAgICAgbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYsICBtYW4vZml4cHJvYy4xLmRlZiwKKyAgICAgIG1hbi9nZXRfbW9kdWxlX25vZGUuMywgbWFuL2luaXRfbWliLjMsICBtYW4vaW5pdF9taWJfaW50ZXJuYWxzLjMsCisgICAgICBtYW4vbWFrZV9pbmRleC5wbCwgbWFuL21hbl9zZWN0aW9ucy50eHQsICBtYW4vbWliMmMtdXBkYXRlLjEuZGVmLAorICAgICAgbWFuL21pYjJjLjEuZGVmLCBtYW4vbWliMmMuY29uZi41LmluLCAgbWFuL21pYjJjLmV4dHJhY3QucGwsCisgICAgICBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZiwgCisgICAgICBtYW4vbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYsIAorICAgICAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsIAorICAgICAgbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgCisgICAgICBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9sZWFmLjMsIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgCisgICAgICBtYW4vbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zZXRfZGF0YS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zLCBtYW4vcGR1X2FwaS4zLmRlZiwgbWFuL3ByaW50X2Rlc2NyaXB0aW9uLjMsCisgICAgICAgbWFuL3ByaW50X21pYi4zLCBtYW4vcHJpbnRfb2JqaWQuMywgbWFuL3ByaW50X3ZhbHVlLjMsIAorICAgICAgbWFuL3ByaW50X3ZhcmlhYmxlLjMsIG1hbi9yZWFkX2FsbF9taWJzLjMsIG1hbi9yZWFkX21pYi4zLCAKKyAgICAgIG1hbi9yZWFkX21vZHVsZS4zLCBtYW4vcmVhZF9tb2R1bGVfbm9kZS4zLCBtYW4vcmVhZF9vYmppZC4zLCAKKyAgICAgIG1hbi9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3NodXRkb3duX21pYi4zLCBtYW4vc25tcC5jb25mLjUuZGVmLCAKKyAgICAgIG1hbi9zbm1wX2FnZW50X2FwaS4zLmRlZiwgbWFuL3NubXBfYWxhcm0uMy5kZWYsIAorICAgICAgbWFuL3NubXBfYXBpX2VycnN0cmluZy4zLCBtYW4vc25tcF9jbG9zZS4zLCBtYW4vc25tcF9jb25maWcuNS5kZWYsCisgICAgICAgbWFuL3NubXBfZXJyb3IuMywgbWFuL3NubXBfZnJlZV9wZHUuMywgbWFuL3NubXBfb3Blbi4zLCAKKyAgICAgIG1hbi9zbm1wX3BlcnJvci4zLCBtYW4vc25tcF9yZWFkLjMsIG1hbi9zbm1wX3NlbGVjdF9pbmZvLjMsIAorICAgICAgbWFuL3NubXBfc2VuZC4zLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZiwgCisgICAgICBtYW4vc25tcF9zZXNzX2FzeW5jX3NlbmQuMywgbWFuL3NubXBfc2Vzc19jbG9zZS4zLCAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfZXJyb3IuMywgbWFuL3NubXBfc2Vzc19pbml0LjMsIG1hbi9zbm1wX3Nlc3Nfb3Blbi4zLAorICAgICAgIG1hbi9zbm1wX3Nlc3NfcGVycm9yLjMsIG1hbi9zbm1wX3Nlc3NfcmVhZC4zLCAKKyAgICAgIG1hbi9zbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMywgbWFuL3NubXBfc2Vzc19zZW5kLjMsIAorICAgICAgbWFuL3NubXBfc2Vzc19zZXNzaW9uLjMsIG1hbi9zbm1wX3Nlc3NfdGltZW91dC4zLCAKKyAgICAgIG1hbi9zbm1wX3NldF9taWJfd2FybmluZ3MuMywgbWFuL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMsIAorICAgICAgbWFuL3NubXBfdGltZW91dC4zLCBtYW4vc25tcF90cmFwX2FwaS4zLmRlZiwKKyAgICAgIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwgIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsIG1hbi9zbm1wY21kLjEuZGVmLAorICAgICAgbWFuL3NubXBjb25mLjEuZGVmLCAgbWFuL3NubXBkLjguZGVmLCBtYW4vc25tcGQuY29uZi41LmRlZiwKKyAgICAgIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgIG1hbi9zbm1wZC5pbnRlcm5hbC41LmRlZiwKKyAgICAgIG1hbi9zbm1wZGVsdGEuMS5kZWYsIG1hbi9zbm1wZGYuMS5kZWYsICBtYW4vc25tcGdldC4xLmRlZiwKKyAgICAgIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgbWFuL3NubXBpbmZvcm0uMSwgIG1hbi9zbm1wbmV0c3RhdC4xLmRlZiwKKyAgICAgIG1hbi9zbm1wc2V0LjEuZGVmLCBtYW4vc25tcHN0YXR1cy4xLmRlZiwgIG1hbi9zbm1wdGFibGUuMS5kZWYsCisgICAgICBtYW4vc25tcHRlc3QuMS5kZWYsIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCAgbWFuL3NubXB0cmFwLjEuZGVmLAorICAgICAgbWFuL3NubXB0cmFwZC44LmRlZiwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmLCAgbWFuL3NubXB1c20uMS5kZWYsCisgICAgICBtYW4vc25tcHZhY20uMS5kZWYsIG1hbi9zbm1wd2Fsay4xLmRlZiwgIG1hbi90a21pYi4xLmRlZiwKKyAgICAgIG1hbi90cmFwdG9lbWFpbC4xLmRlZiwgbWFuL3ZhcmJpbmRfYXBpLjMuZGVmLCAKKyAgICAgIG1hbi92YXJpYWJsZXMuNS5kZWYsIG1pYnMvQUdFTlRYLU1JQi50eHQsIAorICAgICAgbWlicy9ESVNNQU4tRVZFTlQtTUlCLnR4dCwgbWlicy9ESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0LCAKKyAgICAgIG1pYnMvRElTTUFOLU5TTE9PS1VQLU1JQi50eHQsIG1pYnMvRElTTUFOLVBJTkctTUlCLnR4dCwgCisgICAgICBtaWJzL0RJU01BTi1TQ0hFRFVMRS1NSUIudHh0LCBtaWJzL0RJU01BTi1TQ1JJUFQtTUlCLnR4dCwgCisgICAgICBtaWJzL0RJU01BTi1UUkFDRVJPVVRFLU1JQi50eHQsIG1pYnMvRXRoZXJMaWtlLU1JQi50eHQsIAorICAgICAgbWlicy9IQ05VTS1UQy50eHQsIG1pYnMvSE9TVC1SRVNPVVJDRVMtTUlCLnR4dCwgCisgICAgICBtaWJzL0hPU1QtUkVTT1VSQ0VTLVRZUEVTLnR4dCwgCisgICAgICBtaWJzL0lBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0LCAKKyAgICAgIG1pYnMvSUFOQS1MQU5HVUFHRS1NSUIudHh0LCBtaWJzL0lBTkEtUlRQUk9UTy1NSUIudHh0LCAKKyAgICAgIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0LCBtaWJzL0lGLUlOVkVSVEVELVNUQUNLLU1JQi50eHQsIAorICAgICAgbWlicy9JRi1NSUIudHh0LCBtaWJzL0lORVQtQUREUkVTUy1NSUIudHh0LCAKKyAgICAgIG1pYnMvSVAtRk9SV0FSRC1NSUIudHh0LCBtaWJzL0lQLU1JQi50eHQsIAorICAgICAgbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dCwgbWlicy9JUFY2LUlDTVAtTUlCLnR4dCwgCisgICAgICBtaWJzL0lQVjYtTUlCLnR4dCwgbWlicy9JUFY2LVRDLnR4dCwgbWlicy9JUFY2LVRDUC1NSUIudHh0LCAKKyAgICAgIG1pYnMvSVBWNi1VRFAtTUlCLnR4dCwgbWlicy9MTS1TRU5TT1JTLU1JQi50eHQsIG1pYnMvTVRBLU1JQi50eHQsIAorICAgICAgbWlicy9NYWtlZmlsZS5pbiwgbWlicy9NYWtlZmlsZS5taWIsIG1pYnMvTkVULVNOTVAtQUdFTlQtTUlCLnR4dCwgCisgICAgICBtaWJzL05FVC1TTk1QLUVYQU1QTEVTLU1JQi50eHQsIG1pYnMvTkVULVNOTVAtRVhURU5ELU1JQi50eHQsIAorICAgICAgbWlicy9ORVQtU05NUC1NSUIudHh0LCBtaWJzL05FVC1TTk1QLU1PTklUT1ItTUlCLnR4dCwgCisgICAgICBtaWJzL05FVC1TTk1QLVBBU1MtTUlCLnR4dCwgbWlicy9ORVQtU05NUC1TWVNURU0tTUlCLnR4dCwgCisgICAgICBtaWJzL05FVC1TTk1QLVRDLnR4dCwgbWlicy9ORVQtU05NUC1WQUNNLU1JQi50eHQsIAorICAgICAgbWlicy9ORVRXT1JLLVNFUlZJQ0VTLU1JQi50eHQsIG1pYnMvTk9USUZJQ0FUSU9OLUxPRy1NSUIudHh0LCAKKyAgICAgIG1pYnMvUkVBRE1FLm1pYnMsIG1pYnMvUkZDLTEyMTUudHh0LCBtaWJzL1JGQzExNTUtU01JLnR4dCwgCisgICAgICBtaWJzL1JGQzEyMTMtTUlCLnR4dCwgbWlicy9STU9OLU1JQi50eHQsIG1pYnMvU0NUUC1NSUIudHh0LCAKKyAgICAgIG1pYnMvU01VWC1NSUIudHh0LCBtaWJzL1NOTVAtQ09NTVVOSVRZLU1JQi50eHQsIAorICAgICAgbWlicy9TTk1QLUZSQU1FV09SSy1NSUIudHh0LCBtaWJzL1NOTVAtTVBELU1JQi50eHQsIAorICAgICAgbWlicy9TTk1QLU5PVElGSUNBVElPTi1NSUIudHh0LCBtaWJzL1NOTVAtUFJPWFktTUlCLnR4dCwgCisgICAgICBtaWJzL1NOTVAtVEFSR0VULU1JQi50eHQsIG1pYnMvU05NUC1VU0VSLUJBU0VELVNNLU1JQi50eHQsIAorICAgICAgbWlicy9TTk1QLVVTTS1BRVMtTUlCLnR4dCwgbWlicy9TTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQsIAorICAgICAgbWlicy9TTk1QLVZJRVctQkFTRUQtQUNNLU1JQi50eHQsIG1pYnMvU05NUHYyLUNPTkYudHh0LCAKKyAgICAgIG1pYnMvU05NUHYyLU1JQi50eHQsIG1pYnMvU05NUHYyLVNNSS50eHQsIG1pYnMvU05NUHYyLVRDLnR4dCwgCisgICAgICBtaWJzL1NOTVB2Mi1UTS50eHQsIG1pYnMvVENQLU1JQi50eHQsIAorICAgICAgbWlicy9UUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0LCBtaWJzL1RVTk5FTC1NSUIudHh0LCAKKyAgICAgIG1pYnMvVUNELURFTU8tTUlCLmluYywgbWlicy9VQ0QtREVNTy1NSUIudHh0LCAKKyAgICAgIG1pYnMvVUNELURJU0tJTy1NSUIuaW5jLCBtaWJzL1VDRC1ESVNLSU8tTUlCLnR4dCwgCisgICAgICBtaWJzL1VDRC1ETE1PRC1NSUIuaW5jLCBtaWJzL1VDRC1ETE1PRC1NSUIudHh0LCAKKyAgICAgIG1pYnMvVUNELUlQRklMVEVSLU1JQi5pbmMsIG1pYnMvVUNELUlQRklMVEVSLU1JQi50eHQsIAorICAgICAgbWlicy9VQ0QtSVBGV0FDQy1NSUIuaW5jLCBtaWJzL1VDRC1JUEZXQUNDLU1JQi50eHQsIAorICAgICAgbWlicy9VQ0QtU05NUC1NSUItT0xELnR4dCwgbWlicy9VQ0QtU05NUC1NSUIuaW5jLCAKKyAgICAgIG1pYnMvVUNELVNOTVAtTUlCLnR4dCwgbWlicy9VRFAtTUlCLnR4dCwgbWlicy9pYW5hbGlzdCwgCisgICAgICBtaWJzL21ha2VodG1sLnBsLCBtaWJzL21pYmZldGNoLCBtaWJzL25vZGVtYXAsIG1pYnMvcmZjbGlzdCwgCisgICAgICBtaWJzL3JmY21pYnMuZGlmZiwgbWlicy9zbWlzdHJpcCwgbWtpbnN0YWxsZGlycywgCisgICAgICBuZXQtc25tcC1jb25maWcuaW4sIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluLCBvdi9NYWtlZmlsZS5pbiwgCisgICAgICBvdi9SRUFETUUsIG92L1VDRC1Db21wdXRlciwgb3YvVUNELWZpZWxkcywgb3YvYml0bWFwcy9VQ0QuMjAubSwgCisgICAgICBvdi9iaXRtYXBzL1VDRC4yMC5wLCBvdi9iaXRtYXBzL1VDRC4yNi5tLCBvdi9iaXRtYXBzL1VDRC4yNi5wLCAKKyAgICAgIG92L2JpdG1hcHMvVUNELjMyLm0sIG92L2JpdG1hcHMvVUNELjMyLnAsIG92L2JpdG1hcHMvVUNELjM4Lm0sIAorICAgICAgb3YvYml0bWFwcy9VQ0QuMzgucCwgb3YvYml0bWFwcy9VQ0QuNDQubSwgb3YvYml0bWFwcy9VQ0QuNDQucCwgCisgICAgICBvdi9iaXRtYXBzL1VDRC41MC5tLCBvdi9iaXRtYXBzL1VDRC41MC5wLCBvdi9iaXRtYXBzL1VDRC5maWVsZHMsIAorICAgICAgb3Yvb2lkX3RvX3N5bS5pbiwgb3Yvb2lkX3RvX3R5cGUuaW4sIHBlcmwvQVNOL0FTTi5wbSwgCisgICAgICBwZXJsL0FTTi9BU04ueHMsIHBlcmwvQVNOL0NoYW5nZXMsIHBlcmwvQVNOL01BTklGRVNULCAKKyAgICAgIHBlcmwvQVNOL01ha2VmaWxlLlBMLCBwZXJsL0FTTi90ZXN0LnBsLCBwZXJsL0FueURhdGFfU05NUC9DaGFuZ2VzLAorICAgICAgIHBlcmwvQW55RGF0YV9TTk1QL0RCRF9BbnlEYXRhLnBhdGNoLCBwZXJsL0FueURhdGFfU05NUC9Gb3JtYXQucG0sCisgICAgICAgcGVybC9BbnlEYXRhX1NOTVAvSU5TVEFMTCwgcGVybC9BbnlEYXRhX1NOTVAvTUFOSUZFU1QsIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvTWFrZWZpbGUuUEwsIHBlcmwvQW55RGF0YV9TTk1QL1JFQURNRSwgCisgICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL0FueURhdGFfU05NUC9jb25maWdzL3NjbGksIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvY29uZmlncy91bml4LCBwZXJsL0FueURhdGFfU05NUC9uZXRzaCwgCisgICAgICBwZXJsL01ha2VmaWxlLlBMLCBwZXJsL01ha2VmaWxlLm1ha2VmaWxlcywgcGVybC9NYWtlZmlsZS5zdWJzLnBsLCAKKyAgICAgIHBlcmwvT0lEL0NoYW5nZXMsIHBlcmwvT0lEL01BTklGRVNULCBwZXJsL09JRC9NYWtlZmlsZS5QTCwgCisgICAgICBwZXJsL09JRC9PSUQucG0sIHBlcmwvT0lEL09JRC54cywgcGVybC9PSUQvUkVBRE1FLCAKKyAgICAgIHBlcmwvT0lEL3Rlc3QucGwsIHBlcmwvT0lEL3R5cGVtYXAsIHBlcmwvU05NUC9CVUcsIAorICAgICAgcGVybC9TTk1QL01BTklGRVNULCBwZXJsL1NOTVAvTUFOSUZFU1QuU0tJUCwKKyAgICAgIHBlcmwvU05NUC9NYWtlZmlsZS5QTCwgIHBlcmwvU05NUC9SRUFETUUsIHBlcmwvU05NUC9TTk1QLnBtLAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsICBwZXJsL1NOTVAvVE9ETywgcGVybC9TTk1QL2V4YW1wbGVzL2FzeW5jMS5wbCwgCisgICAgICBwZXJsL1NOTVAvZXhhbXBsZXMvYXN5bmMyLnBsLCBwZXJsL1NOTVAvZXhhbXBsZXMvYnVsa3dhbGsucGwsIAorICAgICAgcGVybC9TTk1QL2V4YW1wbGVzL2lwZm9yd2FyZC5wbCwgcGVybC9TTk1QL2V4YW1wbGVzL21pYnRyZWUucGwsIAorICAgICAgcGVybC9TTk1QL2V4YW1wbGVzL21pYndhbGsucGwsIHBlcmwvU05NUC9leGFtcGxlcy9waW5nbWliLnBsLCAKKyAgICAgIHBlcmwvU05NUC9leGFtcGxlcy90YWJsZXdhbGsucGwsIHBlcmwvU05NUC9leGFtcGxlcy90ZXN0bGVhay5wbCwgCisgICAgICBwZXJsL1NOTVAvZXhhbXBsZXMvdHJhcC1leGFtcGxlLnBsLCBwZXJsL1NOTVAvaGludHMvaXJpeC5wbCwgCisgICAgICBwZXJsL1NOTVAvaGludHMvc29sYXJpcy5wbCwgcGVybC9TTk1QL3Blcmxzbm1wLmgsIAorICAgICAgcGVybC9TTk1QL3QvUkVBRE1FLCBwZXJsL1NOTVAvdC9hc3luYy50LCBwZXJsL1NOTVAvdC9idWxrd2Fsay50LCAKKyAgICAgIHBlcmwvU05NUC90L2NvbmYudCwgcGVybC9TTk1QL3QvY29uZnRlc3QuY29uZiwgcGVybC9TTk1QL3QvZ2V0LnQsIAorICAgICAgcGVybC9TTk1QL3QvZ2V0bmV4dC50LCBwZXJsL1NOTVAvdC9taWIudCwgcGVybC9TTk1QL3QvbWliLnR4dCwgCisgICAgICBwZXJsL1NOTVAvdC9taWJsb2FkLnQsIHBlcmwvU05NUC90L25vdGlmeS50LAorICAgICAgcGVybC9TTk1QL3Qvc2Vzc2lvbi50LCAgcGVybC9TTk1QL3Qvc2V0LnQsCisgICAgICBwZXJsL1NOTVAvdC9zbm1wdGVzdC5jb25mLCAgcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbCwKKyAgICAgIHBlcmwvU05NUC90eXBlbWFwLCAgcGVybC9UcmFwUmVjZWl2ZXIvQ2hhbmdlcywKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL01BTklGRVNULCAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9SRUFETUUsICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC1jLmluYywgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC14cy5pbmMsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvZmFsbGJhY2svY29uc3QtYy5pbmMsIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvZmFsbGJhY2svY29uc3QteHMuaW5jLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL3Blcmxfc25tcHRyYXBkLmgsIHBlcmwvVHJhcFJlY2VpdmVyL3BwcG9ydC5oLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL3QvMS50LCBwZXJsL1RyYXBSZWNlaXZlci90eXBlbWFwLCAKKyAgICAgIHBlcmwvYWdlbnQvQ2hhbmdlcywgcGVybC9hZ2VudC9NQU5JRkVTVCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvYWdlbnQueHMsIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzLCAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9nZW4sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS90ZXN0LnBsLCAKKyAgICAgIHBlcmwvYWdlbnQvbmV0c25tcF9yZXF1ZXN0X2luZm9QdHIucG0sIHBlcmwvYWdlbnQvdGVzdC5wbCwgCisgICAgICBwZXJsL2FnZW50L3R5cGVtYXAsIHBlcmwvZGVmYXVsdF9zdG9yZS9DaGFuZ2VzLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NQU5JRkVTVCwgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9SRUFETUUsIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzLCBwZXJsL2RlZmF1bHRfc3RvcmUvZ2VuLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsLCBwZXJsL2RlZmF1bHRfc3RvcmUvdHlwZW1hcCwgCisgICAgICBwZXJsL21ha2UtcGVybC1tYWtlZmlsZXMsIHBlcmwvbWFuYWdlci9JTlNUQUxMLCAKKyAgICAgIHBlcmwvbWFuYWdlci9NYWtlZmlsZS5QTCwgcGVybC9tYW5hZ2VyL2Rpc3BsYXl0YWJsZS5wbSwgCisgICAgICBwZXJsL21hbmFnZXIvZ2V0VmFsdWVzLnBtLCBwZXJsL21hbmFnZXIvbWFuYWdlci5wbSwgCisgICAgICBwZXJsL21hbmFnZXIvc2V0dXBhdXRoLCBwZXJsL21hbmFnZXIvc2V0dXBkYiwgCisgICAgICBwZXJsL21hbmFnZXIvc2V0dXB1c2VyLCBwZXJsL21hbmFnZXIvc25tcHRvc3FsLCBweXRob24vTElDRU5TRSwgCisgICAgICBweXRob24vUkVBRE1FLCBweXRob24vbmV0c25tcC9fX2luaXRfXy5weSwgCisgICAgICBweXRob24vbmV0c25tcC9jbGllbnQucHksIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMsIAorICAgICAgcHl0aG9uL25ldHNubXAvdGVzdHMvX19pbml0X18ucHksIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmYsCisgICAgICAgcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weSwgcHl0aG9uL3NldHVwLnB5LCByZW1vdmUtZmlsZXMsIAorICAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgCisgICAgICBzbm1wbGliL2FzbjEuYywgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgCisgICAgICBzbm1wbGliL2NtdV9jb21wYXQuYywgc25tcGxpYi9jb250YWluZXIuYywgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYywgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCBzbm1wbGliL2Rpcl91dGlscy5jLAorICAgICAgIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCBzbm1wbGliL2ZpbGVfdXRpbHMuYywKKyAgICAgIHNubXBsaWIvZ2V0b3B0LmMsICBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jLAorICAgICAgc25tcGxpYi9pbnQ2NC5jLCAgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLAorICAgICAgc25tcGxpYi9sY2RfdGltZS5jLCAgc25tcGxpYi9tZDUuYywgc25tcGxpYi9taWIuYywKKyAgICAgIHNubXBsaWIvbXRfc3VwcG9ydC5jLCAgc25tcGxpYi9vaWRfc3Rhc2guYywgc25tcGxpYi9wYXJzZS5jLAorICAgICAgc25tcGxpYi9wa2NzLmMsICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc2NhcGkuYywKKyAgICAgIHNubXBsaWIvc25tcC10Yy5jLCAgc25tcGxpYi9zbm1wLmMsIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wSVBYRG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCAgc25tcGxpYi9zbm1wX2F1dGguYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLAorICAgICAgc25tcGxpYi9zbm1wX2RlYnVnLmMsICBzbm1wbGliL3NubXBfZW51bS5jLAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgc25tcGxpYi9zbm1wX3NlY21vZC5jLAorICAgICAgc25tcGxpYi9zbm1wX3NlcnZpY2UuYywgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmMsICBzbm1wbGliL3NubXBrc20uYywgc25tcGxpYi9zbm1wdHNtLmMsCisgICAgICBzbm1wbGliL3NubXB1c20uYywgIHNubXBsaWIvc25tcHYzLmMsIHNubXBsaWIvc25wcmludGYuYywKKyAgICAgIHNubXBsaWIvc3RybGNweS5jLCAgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvbC5jLAorICAgICAgc25tcGxpYi9zdHJ0b3VsLmMsICBzbm1wbGliL3N0cnRvdWxsLmMsIHNubXBsaWIvc3lzdGVtLmMsCisgICAgICBzbm1wbGliL3Rlc3RfYmluYXJ5X2FycmF5LmMsICBzbm1wbGliL3RleHRfdXRpbHMuYywKKyAgICAgIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi91Y2Qtc25tcC1pbmNsdWRlcy5oLCAKKyAgICAgIHNubXBsaWIvdWNkX2NvbXBhdC5jLCBzbm1wbGliL3ZhY20uYywgc25tcGxpYi93aW5waXBlLmMsIAorICAgICAgc25tcGxpYi93aW5zZXJ2aWNlLmMsIHNubXBsaWIvd2luc2VydmljZS5tYywKKyAgICAgIHNubXBsaWIvd2luc2VydmljZS5yYywgIHNubXBsaWIvd2luc2VydmljZXJjLnJjLCBzdGFtcC1oLAorICAgICAgc3RhbXAtaC5pbiwgdGVzdGluZy9NYWtlZmlsZS5pbiwgIHRlc3RpbmcvUkVBRE1FLAorICAgICAgdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9ULmMsIHRlc3RpbmcvVDIuc2gsIAorICAgICAgdGVzdGluZy9URVNUQ09ORi5zaCwgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1tZDUsIAorICAgICAgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLCB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEtZGVzLCAKKyAgICAgIHRlc3RpbmcvZGF0YS5rdWwtbWQ1LCB0ZXN0aW5nL2RhdGEua3VsLXNoYTEsIHRlc3RpbmcvZXRpbWV0ZXN0LmMsIAorICAgICAgdGVzdGluZy9ldmFsX29uZXByb2dyYW0uc2gsIHRlc3RpbmcvZXZhbF9vbmVzY3JpcHQuc2gsIAorICAgICAgdGVzdGluZy9ldmFsX3N1aXRlLnNoLCB0ZXN0aW5nL2V2YWxfdGVzdGxpc3QsIAorICAgICAgdGVzdGluZy9ldmFsX3Rvb2xzLnNoLCB0ZXN0aW5nL2tleW1hbmFnZXRlc3QuYywKKyAgICAgIHRlc3RpbmcvbWlzY3Rlc3QuYywgIHRlc3RpbmcvcmZjMTIxMy9SRUFETUUsIHRlc3RpbmcvcmZjMTIxMy9ydW4sIAorICAgICAgdGVzdGluZy9yZmMxMjEzL3NubXBmdW4uc2gsIHRlc3RpbmcvcmZjMTIxMy90ZXN0X2Z1biwgCisgICAgICB0ZXN0aW5nL3JmYzEyMTMvdGVzdG1pYjEuc2gsIHRlc3RpbmcvcmZjMTIxMy90ZXN0bWliMi5zaCwgCisgICAgICB0ZXN0aW5nL3JmYzEyMTMvdGVzdG1pYjMuc2gsIHRlc3Rpbmcvc2NhcGl0ZXN0LmMsIAorICAgICAgdGVzdGluZy90ZXN0X2tleWNoYW5nZS5zaCwgdGVzdGluZy90ZXN0X2t1bC5zaCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N0cmFuc3BvcnQsIHRlc3RpbmcvdGVzdHMvU3YxY29uZmlnLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YyY2NvbmZpZywgdGVzdGluZy90ZXN0cy9TdjNjb25maWcsIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdhZ2VudCwgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdiYXNlLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlndHJhcGQsIHRlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZywgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1N2YW55Y29uZmlnLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAwMGNvbmZpZ3VyZSwgdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LCB0ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldCwKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI0c25tcHYzZ2V0U0hBMSwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI2c25tcHYzZ2V0U0hBQUVTLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI4c25tcHYzZ2V0ZmFpbCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24sIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0sCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYsIHRlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QyLAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDMsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgIHRlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybCwgIHRlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kLAorICAgICAgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsICB0ZXN0aW5nL3Rlc3RzL1QxMTBhZ2VudHhnZXQsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQsICB0ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsLAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwsCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCAgdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldCwKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMnNubXB2M3ZhY21nZXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MnNubXB2M3ZhY21nZXRmYWlsLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzaywgdGVzdGluZy90ZXN0cy9UMTUyaG9zdHVwdGltZSwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcCwgdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQsIAorICAgICAgdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGwsIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsIHRlc3RpbmcvdGVzdHMvVDMyMHVkcHY2LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM2MGR0bHN1ZHAsIHRlc3RpbmcvdGVzdHMvVDM5OWFsaWFzLCAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LnByaXYsIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLmNlcnQsIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIucHJpdiwgd2luMzIvQ29uZmlndXJlLCAKKyAgICAgIHdpbjMyL0VYQU1QTEUuY29uZi53aW4zMiwgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgCisgICAgICB3aW4zMi9NYWtlZmlsZS5pbiwgd2luMzIvTWdtdEFwaS13aW5FeHRETEwuaCwgCisgICAgICB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLCB3aW4zMi9hZ2VudF9tb2R1bGVfZG90X2NvbmYuaCwgCisgICAgICB3aW4zMi9hZ2VudF9tb2R1bGVfaW5jbHVkZXMuaCwgd2luMzIvYWdlbnRfbW9kdWxlX2luaXRzLmgsIAorICAgICAgd2luMzIvYnVpbGQuYmF0LCB3aW4zMi9idWlsZC5wbCwgd2luMzIvY29uZmlnLmgsIAorICAgICAgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCAKKyAgICAgIHdpbjMyL2Rpc3QvUkVBRE1FLnR4dCwgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkuYmF0LCAKKyAgICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvQ29uZmlndXJhdGlvbl9PdmVydmlldy5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvRGV2ZWxvcGVyX0ZBUS5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvRkFRLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9IZWxwX0NhdmVhdHMuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL0ludHJvZHVjdGlvbi5odG1sLCAKKyAgICAgIHdpbjMyL2Rpc3QvaHRtbGhlbHAvTmV0LVNOTVAuaGhjLAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9OZXQtU05NUC5oaHAsIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9zbm1wLmNvbmYud2luMzIuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL3NubXBkLmNvbmYud2luMzIuaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L2h0bWxoZWxwL3NubXB0cmFwZC5jb25mLndpbjMyLmh0bWwsIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvQWRkMlBhdGgubnNpLCAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL1NldEVuVmFyLm5zaSwgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2ksIHdpbjMyL2Rpc3Qvc2NyaXB0cy9jcmVhdGUtdG9jLCAKKyAgICAgIHdpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbCwgCisgICAgICB3aW4zMi9kaXN0L3NjcmlwdHMvbmV0LXNubXAtcGVybC10ZXN0LnBsLCAKKyAgICAgIHdpbjMyL2Rpc3Qvc2NyaXB0cy9wb2RkaXIyaHRtbCwgd2luMzIvZGlzdC9zY3JpcHRzL3JlYWRtZTJodG1sLCAKKyAgICAgIHdpbjMyL2Rpc3Qvc2NyaXB0cy90eHQyaHRtbCwgd2luMzIvZGlzdC90b3NvY2sxLnNoLCAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsIAorICAgICAgd2luMzIvaW5zdGFsbC1uZXQtc25tcC5iYXQsIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRlZiwgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAKKyAgICAgIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwKKyAgICAgIHdpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWYsICB3aW4zMi9sb2NhbC9NYWtlZmlsZS5pbiwKKyAgICAgIHdpbjMyL2xvY2FsL21pYjJjLmJhdCwgIHdpbjMyL2xvY2FsL3NubXBjb25mLmJhdCwKKyAgICAgIHdpbjMyL2xvY2FsL3RyYXB0b2VtYWlsLmJhdCwgIHdpbjMyL21pYl9tb2R1bGVfZG90X2NvbmYuaCwKKyAgICAgIHdpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaCwgIHdpbjMyL21pYl9tb2R1bGVfaW5pdHMuaCwKKyAgICAgIHdpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsCisgICAgICB3aW4zMi9ubWFrZXBlcmwuYmF0LCAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLCAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgCisgICAgICB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwLCAKKyAgICAgIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLCAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLCAKKyAgICAgIHdpbjMyL3NubXBzbV9pbml0LmgsIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AsIAorICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AsIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluLAorICAgICAgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLAorICAgICAgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLCAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMmRsbC5kc3c6CisKKyBGaXggNS41LnggYnJhbmNoIHN0cnVjdHVyZSAocGFydCAyKSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNS1wYXRjaGVzQDE5OTY1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmM6IHByb3BlciBwcm9jZXNzCisKKyBzdGF0dXMgdmFsdWVzIGZvciBuZXRic2QgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jOiBwcm9wZXIgcHJvY2VzcworCisgc3RhdHVzIHZhbHVlcyBmb3IgbmV0YnNkIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk2MiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9zY2FwaS5jOiBjb25kaXRpb25hbGl6ZSB2YXJpYWJsZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc2NhcGkuYzogY29uZGl0aW9uYWxpemUgdmFyaWFibGUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NjEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oOiB0Y3AtbWliL3VkcC1taWIKKworIHN1cHBvcnQgZm9yIHRoZSAqYnNkcyBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDE5OTYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaDogdGNwLW1pYi91ZHAtbWliCisKKyBzdXBwb3J0IGZvciB0aGUgKmJzZHMgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTYwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYywgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS4KKyAgICAgICBjOiB0Y3AtbWliL3VkcC1taWIgc3VwcG9ydCBmb3IgdGhlICpic2RzIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJLmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCwgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuCisgICAgICAgYzogdGNwLW1pYi91ZHAtbWliIHN1cHBvcnQgZm9yIHRoZSAqYnNkcyBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk1OSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYQorICAgICAgIGNjZXNzLmM6IFByb3Blcmx5IGVuZCBkZWJ1ZyBtZXNzYWdlIHdpdGggbmV3bGluZSBnaXQtc3ZuLWlkOgorCisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2EKKyAgICAgICBjY2Vzcy5jOiBQcm9wZXJseSBlbmQgZGVidWcgbWVzc2FnZSB3aXRoIG5ld2xpbmUgZ2l0LXN2bi1pZDoKKworCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NTggMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jOiByZW1vdmUgdmFyCisKKyB0aGF0IHNoYWRvd3MgdGhlIHVzZWZ1bCBvbmUgZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk1NyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmM6IHJlbW92ZSB2YXIKKworIHRoYXQgc2hhZG93cyB0aGUgdXNlZnVsIG9uZSBnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMTk5NTcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYzogbWFqb3IgZmlkZGxpbmcgdG8gZ2V0IHRoaW5ncyB3b3JraW5nCisKKyBmb3Igb3BlbmJzZCB0b28uIFRoaXMgc2hvdWxkIHJlYWxseSBiZSByZXdvcmtlZCB0byB1c2UgdGhlCisgdGNwLW1pYi91ZHAtbWliL2RhdGFfYWNjZXNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMTk5NTYgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDItMjEgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYzogbWFqb3IgZmlkZGxpbmcgdG8gZ2V0IHRoaW5ncyB3b3JraW5nCisKKyBmb3Igb3BlbmJzZCB0b28uIFRoaXMgc2hvdWxkIHJlYWxseSBiZSByZXdvcmtlZCB0byB1c2UgdGhlCisgdGNwLW1pYi91ZHAtbWliL2RhdGFfYWNjZXNzIGdpdC1zdm4taWQ6CisKKyBmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AxOTk1NiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmM6IGZpeCB0Y3Agc3RhdGVzIGZvciBkcmFnb25mbHlic2QKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AxOTk1NSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wMi0yMSAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmM6IGZpeCB0Y3Agc3RhdGVzIGZvciBkcmFnb25mbHlic2QKKyAgICAgIGdpdC1zdm4taWQ6CisKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDE5OTU1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTAyLTIxICBOaWVscyBCYWdnZXNlbiA8bmJhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaDogZW5hYmxlIG5ldyB0Y3AvdWRwIG1pYnMgZm9yIHNvbGFyaXMKKyAgICAgIGdpdC1zdm4taWQ6CisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcgLT4gVjUuNy4xLnByZTEKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogZml4IEMrKyBjb21tZW50cworCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sCisgICAgICAgcGVybC9PSUQvT0lELnBtLCBwZXJsL1NOTVAvU05NUC5wbSwgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOiBWZXJzaW9uIG51bWJlciB1cGRhdGU6CisKKyA1LjcuMS5wcmUxCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLnRvcDogdmVyc2lvbiB1cGRhdGUgZm9yIDUuNy4xLnByZTEKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBjZjRjY2U0YzE4OWNmNDdmNGM0ODlkYjQzYjdmYTUxMGY4OTA2YTFhIE1lcmdlOiBkZjkxYTlmCisKKyA5M2U5N2RjIEF1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIE1vbgorIEF1ZyA4IDIyOjE1OjI4IDIwMTEgKzAxMDAKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTYtcGF0Y2hlcycgaW50bworCisgVjUtNi1wYXRjaGVzCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCAKKyAgICAgIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46IERlZmluZQorCisgX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiB0b2tlbiAoYXMgcGVyIEFsZXgnIGJ1aWxkCisgaW5zdHJ1Y3Rpb25zKQorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkZjE2ZGMyMjIxZTk5M2RkM2M2NjY1MGQ1ZTg3MjU3N2ZmZTZjMDFiIE1lcmdlOiA3MTRiYzgyCisKKyA4ZTVhMjhkIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEzOjU2OjQzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZmZhMDViMDUxYWMzZTJiMTk3MTk1YTk5ODljYzdhOTFmZThkOTI4MiBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gQXVnIDggMTM6NTU6MzgKKyAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGxpdmVycG9vbC5hYy51az4KKworICAgKiA6IGNvbW1pdCA3MTRiYzgyZmEwMWUyMWEzNjU1ODI0OTYzZmE1NGU5YjgwNDJmZmIwIE1lcmdlOiA2ZmU4ZmU1CisKKyAzZWYxZGI1IEF1dGhvcjogRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIE1vbgorIEF1ZyA4IDIxOjIxOjQ2IDIwMTEgKzAxMDAKKworMjAxMS0wOC0wOCAgRGF2ZSBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPgorCisgICAqIDogY29tbWl0IGI0NTE2MDdkY2EwMTVjMTExZTk2ZmRmZWIyZGRiMDY2MWZiNGY3MjQgQXV0aG9yOiBEYXZlCisKKyBTaGllbGQgPEQuVC5TaGllbGRAbGl2ZXJwb29sLmFjLnVrPiBEYXRlOiAgIE1vbiBBdWcgOCAyMToyMDozMiAyMDExCisgKzAxMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNmZlOGZlNTI5NGE0NWJjN2U0ZWEzNzUxYTFhZDdhYTQ3YjVjYWJiMiBNZXJnZTogMzY0ZjhmZgorCisgZjY5YWJlMyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDIyOjAyOjM4IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYzk0ODEzMDQ0YTRjNGE2MDhlOThlODAyMjMwNzVjNmZhZjA0ZWUxMSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDggMjE6NTY6MTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAzNjRmOGZmYWViOTBiNGViMDE2NWZjODU1Njg4Y2QwNjI2NjMyNzk0IE1lcmdlOiAzMjg3Mjk1CisKKyA3YWJiOTI2IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDExOjI0OjI2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNi1wYXRjaGVzJyBpbnRvCisKKyBWNS02LXBhdGNoZXMKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBkaXNwbGF5IHRoZSBicmFuY2ggd2UnbGwgY29tbWl0IHRvCisKKworMjAxMS0wOC0wOCAgVmxhZGltaXIgS29uZHJhdGlldiA8d3VsZjIwMDFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIIDMzODY2MzM6CisKKyBmcm9tIHd1bGYyMDAxOiBmaXggaW50ZWdlciBvdmVyZmxvdyBpbiBkaXNrIHBlcmNlbnQgY2FsY3VsYXRpb25zIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4NGE3NzVkMDU1N2ZlYTk3NTcwZTQxNzE1YTMxNjQ5NzBiNGMwM2EyIE1lcmdlOiA2ZmZmMWMxCisKKyBkMzczYzRmIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMjA6MTI6MzIgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM4NzEzOTogZnJvbQorCisgeWFiZXJhdW5leWE6IEF2b2lkIHNlZ2ZhdWx0IGlmIHRyYXBzZXNzIHRyYW5zcG9ydCBlbGVtZW50IGNhbnQgYmUKKyBwYXJzZWQgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbnNzZnBhdGNoYXBwbHk6IHNwbGl0IHRoZQorCisgZGlzcGxheWVkIGdpdCBjb21taXQgY29tbWFuZCBpbnRvIG11bHRpcGxlIHNlZ21lbnRzCisKKzIwMTEtMDgtMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmM6IENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMzg2OTYxOgorCisgTWFrZSBTTk1QIEdFVCB3b3JrIGluIGFuIEFnZW50WCBzdWJhZ2VudCBpZiB3cml0ZSBzdXBwb3J0IGlzCisgZGlzYWJsZWQgdmlhIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAoTWFyayBSdXNrKS4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogRml4IGEgY3Jhc2ggdGhhdCBjb3VsZCBiZQorCisgdHJpZ2dlcmVkIGJ5IGNhbGxpbmcgX21pYmluZGV4X2FkZCgpIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCBub3QKKyBlcXVhbCB0byAtMS4KKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNmZmZjFjMWFlNTFiMDZjOWQ4MGZhZjE1MzczYTk2M2QxNzNmMTRlOCBNZXJnZTogODM3YzUyZQorCisgOGNjOTAwNCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMDo1ODo1OSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDhjYTdmZjFlNjkyY2FlYzQxODZiNzg4YzlhZTJkMjdiZTIxMzI5MGYgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgTW9uIEF1ZyA4IDEwOjMzOjU2CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS00LXBhdGNoZXMnIGludG8KKworIFY1LTQtcGF0Y2hlcworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBiOGY1MjljYmEyN2MwMTE0YjRjYjczNDBjZmQ0NDk1MDRmYTA3NTA2IE1lcmdlOiAwODIyZjJkCisKKyA1NTZlOTM4IEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgTW9uIEF1ZyA4IDEwOjA1OjM2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBmaXggZnVuY3Rpb24gbmFtZSB0eXBvCisKKworMjAxMS0wOC0wOCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjk4ODJhMDc4YTk1OWEwZjc4YjAzZTAxOTY4ZjFkMTdiN2Y2YTI5OSBNZXJnZTogNWU5YmQyZgorCisgMDQwOWMwYSBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIE1vbiBBdWcgOCAxMDowMzozNCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlIG9mIHB1bGwvcHVzaAorCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbWFrZSBuc3B1bGwvbnNwdXNoIGNoZWNrIGZvciBhCisKKyBjbGVhbiByZXBvCisKKzIwMTEtMDgtMDggIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbmV3IGZ1bmN0aW9uICJuc21ha2VhbGwiIHRvIHRlc3QKKworIGJ1aWxkaW5nIG9uIGV2ZXJ5IGJyYW5jaAorCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGRlZmF1bHQgdG8gbWVyZ2UKKworCisyMDExLTA4LTA4ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IE1lcmdlIHJlbW90ZS10cmFja2luZyBicmFuY2ggJ29yaWdpbi9WNS03LXBhdGNoZXMnIGludG8KKworIFY1LTctcGF0Y2hlcworCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDogQ0hBTkdFUzogV2luZG93czogQXZvaWQgdGhhdCBpZgorCisgdGhlIE5ldC1TTk1QIFBlcmwgbW9kdWxlcyBoYXZlIGJlZW4gYnVpbHQgd2l0aCBhbm90aGVyIHZlcnNpb24gb2YKKyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyB0aGFuIEFjdGl2ZVBlcmwgdGhhdCB1c2luZyBvbmUgb2YgdGhlc2UgUGVybAorIG1vZHVsZXMgdHJpZ2dlcnMgYSAiRnJlZSB0byB3cm9uZyBwb29sIiBjcmFzaC4gVGhpcyByZWdyZXNzaW9uIHdhcworIGNhdXNlZCBieSBjb21taXQgM2IxNGM1OWNmODI3OGQ0MTAyMDdmZjQyZGViZGEyNjM2NDI2YTQ2OCAodGhlCisgbmV0c25tcF9mcmVlKCkgaW50byBTTk1QX0ZSRUUoKSBjaGFuZ2VzIGluIHRoZSAqLnhzIGZpbGVzKS4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZTEwOTUzOTkzMDcwM2NiMzA1MmQ1MjQxYjE4YWM2ZmMwNjJmYWFjYSBNZXJnZTogMGM5YjZjYgorCisgZTQ2YjE3MCBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcKKyA4IDE4OjM0OjExIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9taWIuYzogQ0hBTkdFUzogc25tcGxpYjogRml4IGEgY3Jhc2ggdGhhdCBjb3VsZCBiZQorCisgdHJpZ2dlcmVkIGJ5IGNhbGxpbmcgX21pYmluZGV4X2FkZCgpIHdpdGggdGhlIHNlY29uZCBhcmd1bWVudCBub3QKKyBlcXVhbCB0byAtMS4KKworMjAxMS0wOC0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgN2Y0MmQwZDkzMzIwNDg0MTUyMjcxNDI3Y2M5ODA4Y2JkYTQ5YmJkMCBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDggMDk6NTA6NTEgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwYzliNmNiZTlkYmUyZWM1MjE3YTk1YjY3ODFmZDdkYzFmNmViZGE3IE1lcmdlOiBmYTZjZWY1CisKKyA5NjMzMjBmIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgTW9uIEF1ZworIDggMTg6MTQ6MzYgMjAxMSArMDIwMAorCisyMDExLTA4LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBhM2I4NjU0YTIzMmM1NjNiYzk3Y2M5OTI1Y2Q5ODU5MGEzMGM1YmM1IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIE1vbiBBdWcgOCAxNzoyNDoxOCAyMDExICswMjAwCisKKzIwMTEtMDgtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGZhNmNlZjVjYTkxZGYzYTBiMDM0NTViNjg1NTlkMmJlZTI0ODEwMWMgTWVyZ2U6IGY1ZmU1MzYKKworIDhhZGQwZGEgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBTdW4gQXVnCisgNyAxMDoxODo1NCAyMDExICswMjAwCisKKzIwMTEtMDgtMDcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGEwZGQzY2FmMjU5MjZlNDM0NjU3MThiZjQxN2E0NjRjMmZiMzYzNjYgQXV0aG9yOiBCYXJ0IFZhbgorCisgQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU3VuIEF1ZyA3IDEwOjE3OjAxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzogMzIgaXMgdG9vIGxpbWl0ZWQgZm9yCisKKyBiaWdnZXIgdGFibGVzOyBpbmNyZWFzZSB0aGUgbWF4IG1zZyBjb3VudCB0byAxMjgKKworMjAxMS0wOC0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBtYWtlIHJvbGx1cCBhbmQgc3luYyBzdXBwb3J0CisKKyAtLXJlYmFzZSBhbmQgY2hhbmdlIHRoZSBkZWZhdWx0IGJhY2sgdG8gbWVyZ2UKKworMjAxMS0wOC0wNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogUkVBRE1FLndpbjMyOiBDSEFOR0VTOiBXaW4zMjogRG9jdW1lbnRlZCBob3cgdG8gdXNlIGJ1aWxkLmJhdCB3aXRoCisKKyBPcGVuU1NMIGVuYWJsZWQKKworMjAxMS0wNy0xNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogUkVBRE1FLndpbjMyOiBDSEFOR0VTOiBXaW5kb3dzOiBSZW1vdmUgb3V0ZGF0ZWQgaW5zdHJ1Y3Rpb25zIGFib3V0CisKKyBlZGl0aW5nIHdpbjMyXGxpYnNubXBfZGxsXGxpYnNubXAuZGVmIGZyb20gUkVBRE1FLndpbjMyCisKKzIwMTEtMDctMTUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIFJFQURNRS53aW4zMjogQ0hBTkdFUzogV2luMzI6IERvY3VtZW50IGhvdyB0byBidWlsZCA2NC1iaXQKKworIGV4ZWN1dGFibGVzIGZvciB0aGUgeDY0L2FtZDY0IGFyY2hpdGVjdHVyZQorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBmNWZlNTM2ZThmZDZjNDhmZTI0M2RlY2QzMWZhYzljZjFjOTJmNGNjIE1lcmdlOiA3ODUwZWExCisKKyA4MDkyOGE4IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTU6MTM6MjcgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4MDkyOGE4OTA5Y2ZhYjM3ZjAxYjM5YTA3MWEzZThhZDg1OTU2MjIyIE1lcmdlOiBmMTZhMDk0CisKKyAwZGJjODY5IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTM6NTc6MzAgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwZGJjODY5ZmVjMDdkOGU5MGRiZDFjOTU0OTNlZTdjYmM2MjNjOTVjIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcgNSAxMjo0MDozMSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IEFkZAorCisgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUuZGVmIGFuZCBwZXJsL1NOTVAvdAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA4NmMxZTJiOTY3OWZlYzJjZDc5OWJhNzYwMDVjM2Q2MGU5ZDQ3NjM0IE1lcmdlOiBiY2Q4NjM1CisKKyBmMTZhMDk0IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTI6MjA6NTAgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyZjhkNGY1Nzk2Y2JjMWM3ZTk2N2FjZGFhODAxOWIyNGYxNTIwYTM2IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcgNSAxMjowMjo1MSAyMDExICswMjAwCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogVW5icmVhayB0aGUgVjUtNC1wYXRjaGVzIC0gcmV2ZXJ0IGNvbW1pdAorCisgZDJjNDc2OGJkMmVmYjQ4NjY0NDM0YTgzMTQyNWMyZGRhODVkNzEzMyAoQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0gKKyAzMzYyMjMzOiBmcm9tIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZQorIG5vaXNlKS4KKworMjAxMS0wOC0wNSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaDogCisKKyBVbmJyZWFrIHRoZSBWNS00LXBhdGNoZXMgYnJhbmNoIC0gd2FzIGJyb2tlbiBieSBjb21taXQKKyBiZjcxNzhiMGIyMjU4N2Q0M2QxYTgwYzI2OWNkMjE2YmQ1OTMwMjE0IChhZ2VudDogY2hhbmdlIHR5cGUgb2YKKyBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzIHRvIGxvbmcpCisKKzIwMTEtMDgtMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmg6IFVuYnJlYWsgdGhlIFY1LTQtcGF0Y2hlcworCisgYnJhbmNoIC0gd2FzIGJyb2tlbiBieSBjb21taXQKKyAwZTY4NDJmZTA4MGNlYzg1M2IwOGNkMjMyMzAxNWFiYWJjMzgxY2UxIChDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENICisgMzM4MzQ0MTogZnJvbSBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mCisgZnJlZWQgbWVtb3J5KS4KKworMjAxMS0wOC0wNSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTkVXUzogbWlub3IgTkVXUyBwb2xpc2gKKworCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBiY2Q4NjM1MDcxMzgyMjk2M2QzNzZlZmY1ODJhOTJmNDNlNDI2ZDZjIE1lcmdlOiA5YzgxMGEzCisKKyA3YTIwZjcxIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEF1ZworIDUgMTA6Mjg6NTUgMjAxMSArMDIwMAorCisyMDExLTA4LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAzYWE5NDlmYmRmYzFhOTRhODM0MGFkOGJhZjhiMzE0NzU2YTBiYjlkIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBBdWcgNSAxMDoyNjoxNSAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDljODEwYTNiMzdiNjg1NzNjNDAzMzdlMjQ2ZTJmYWYyOTliNzdkMzEgTWVyZ2U6IDcxY2IyZTgKKworIDYxMGQ2M2YgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMTA6NDI6MDggMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA5NDM5MzBlMWUxMjQzODVmZDk0NzM4YjZkY2RhMzdkMjlkYzdhYzdmIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFRodSBBdWcgNCAxMDo0MTo0MQorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBNZXJnZSByZW1vdGUtdHJhY2tpbmcgYnJhbmNoICdvcmlnaW4vVjUtNC1wYXRjaGVzJyBpbnRvCisKKyBWNS00LXBhdGNoZXMKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNGVkY2I4OGRhZThiMmU1OWRjNjgzZTgwZDQxNGZhN2VjZWMzNjg4NSBNZXJnZTogNjVmM2VlZgorCisgMmRkOWVkMCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAxMDoyNDoxMSAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogTWVyZ2UgcmVtb3RlLXRyYWNraW5nIGJyYW5jaCAnb3JpZ2luL1Y1LTUtcGF0Y2hlcycgaW50bworCisgVjUtNS1wYXRjaGVzCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIDogY29tbWl0IGJjNWNhMDNhMDRhYjE5YzYzNGEzNGQwNjBiMGIxNmI3NDg0Y2I1MjAgTWVyZ2U6IDg4ZmRkYjcKKworIDkwYzBlNzUgQXV0aG9yOiBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnCisgNCAxOToxMzowNyAyMDExICswMjAwCisKKzIwMTEtMDgtMDQgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdXNtLmM6IHNubXB1c206IEZpeCByZWNlbnRseQorCisgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncworCisyMDExLTA4LTA0ICBTdHVhcnQgSGVuZGVyc29uIDx0MGp3MmZ1MGttZ0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9uZXRic2QuYzogQ0hBTkdFUzogb3BlbmJzZDoKKworIFBBVENIIDMzNTc5MzI6IGZyb20gdDBqdzJmdTBrbWc6IENsZWFuaW5nIGluIG1lbW9yeV9uZXRic2QuYyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgVmxhZGltaXIgS29uZHJhdGlldiA8d3VsZjIwMDFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmM6IENIQU5HRVM6IGFnZW50OgorCisgUEFUQ0ggMzM4NjE0NzogZnJvbSB3dWxmMjAwMTogZml4IFVDRC1TTk1QLU1JQjo6ZHNrVXNlZCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgNDczZDdlNWNkNGQ0MTFiYmEyMGViODUzNTlkODcyODA2MzMwMWNiZCBNZXJnZTogYTRlOGI2MgorCisgODhmZGRiNyBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwOToyODoyMiAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDIxMDFiYjJkN2FkNmRiMDM4Yzc1NWFhOTE5M2M4YWNlMGRiZDRmNTggQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVGh1IEF1ZyA0IDA5OjI4OjA2CisgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAuZ2l0aWdub3JlOiBpZ25vcmUgKi5vcmlnIGFuZCAqLnJlagorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogaGVscCBvdXRwdXQgZGVzY3JpYmVzIHJlYmFzZSB2cworCisgbWVyZ2UgYmV0dGVyCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGYxMjZhMTdjNmEzMDYzNDU1YTUxMTk0MGIwMjMwNDdhYmQ5YjQ4ZWUgTWVyZ2U6IGFkNzY1ZjQKKworIDc3YTQ3ODQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDk6MjU6MTYgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0NTJlMTcwN2YyMDllYzQ1ZTdjN2YyYTMwNDBlZjU5NWZiOWQxYWY2IE1lcmdlOiBkYzc1NWE2CisKKyBiMzcyZTVhIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA5OjI1OjAzIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgU3R1YXJ0IEhlbmRlcnNvbiA8dDBqdzJmdTBrbWdAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBNYWtlZmlsZS5pbiwgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oLCAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2Q0LmgsIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZDUuaDogQ0hBTkdFUzogb3BlbmJzZDogUEFUQ0gKKyAgICAgIDMzNTc5Mjc6CisKKyBmcm9tIHQwancyZnUwa21nOiBSZWNvZ25pc2Ugb3BlbmJzZDUgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogZml4IHdoZXJlIGFyZ3VtZW50cyBhcmUgc2V0CisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBzcGxpdCBuc3NmcGF0Y2hhcHBseSBpbnRvIHR3bworCisgcGFydHM6IGFwcGx5IGFuZCBjb21taXRpbmcKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBwYXRjaCB1c2luZyAtTgorCisKKzIwMTEtMDgtMDQgIERhdmlkIEFybm9sZCA8ZGphQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgbWFuL2RlZmF1bHRfc3RvcmUuMy5ib3QsIG1hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmLCAKKyAgICAgIG1hbi9maXhwcm9jLjEuZGVmLCBtYW4vbWliMmMuY29uZi41LmluLCBtYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmLAorICAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgCisgICAgICBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsCisgICAgICBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCAgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wY29uZi4xLmRlZiwKKyAgICAgIG1hbi9zbm1wZC44LmRlZiwgIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsIAorICAgICAgbWFuL3NubXBkZWx0YS4xLmRlZiwgbWFuL3NubXBkZi4xLmRlZiwgbWFuL3NubXBnZXQuMS5kZWYsIAorICAgICAgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCBtYW4vc25tcG5ldHN0YXQuMS5kZWYsIG1hbi9zbm1wc2V0LjEuZGVmLCAKKyAgICAgIG1hbi9zbm1wc3RhdHVzLjEuZGVmLCBtYW4vc25tcHRhYmxlLjEuZGVmLCBtYW4vc25tcHRlc3QuMS5kZWYsIAorICAgICAgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgCisgICAgICBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wdXNtLjEuZGVmLCBtYW4vc25tcHZhY20uMS5kZWYsIAorICAgICAgbWFuL3NubXB3YWxrLjEuZGVmOiBDSEFOR0VTOiBtYW46IFBBVENIIDMzMTI4NjE6IGZyb20gZGphOiBNYW4KKyAgICAgIHBhZ2VzCisKKyBoeXBoZW4tdnMtbWludXMgY2xlYW51cCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IERldGVjdCAoYW5kIHJlamVjdCkgT3BlblNTTAorCisgMS4wLjAKKworMjAxMS0wOC0wNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IENvbW1hbmQtbGluZSBvcHRpb25zIGZvciBzaWxlbnQKKworIGluc3RhbGwKKworMjAxMS0wOC0wNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2k6IEVuc3VyZSBXaW5kb3dzIHBhY2thZ2UKKworIHVuaW5zdGFsbHMgY29tcGxldGVseS4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgODFjNjNmYjVjNWU0YWJiOWMyOWFjYTg5YmY5ZDY5NDQxMDA4NmU5NyBNZXJnZTogNGE2OTIwYQorCisgZGM3NTVhNiBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwODozMzozNCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzogYWRkZWQgc3BhY2luZyB0byBtYXRjaCB0aGUgbGF0ZXIgYnJhbmNoZXMKKworCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IG1hbnVhbCBtZXJnZQorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzogcmVtb3ZlZCBhY2NpZGVudGlhbGx5IGR1cGxpY2F0ZWQgY29kZQorCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogbWFudWFsIG1lcmdlCisKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBtYW51YWwgbWVyZ2UKKworCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogbGlibmV0c25tcDogUEFUQ0ggMzM2MjIzMzogZnJvbQorCisgeWFiZXJhdW5leWE6IE11dGUgdW5uZWNlc3NhcnkgY2Fubm90IGZpbmQgbW9kdWxlIG5vaXNlIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9zbm1wX3ZhcnMuYywgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczogQ0hBTkdFUzogZnJlZWJzZDogUEFUQ0ggMzM2MzMwODoKKyAgICAgIGZyb20KKworIHlhYmVyYXVuZXlhOiBGaXggY29tcGlsYXRpb24gb24gRnJlZUJTRCA5Lnggd2l0aCByZWNlbnQgaGVhZGVyCisgc2h1ZmZsaW5nIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFsbG93IG5zcm9sbHVwIHRvIHRha2UgYSAtLW1lcmdlCisKKyBmbGFnIGZvciBtZXJnaW5nIGluc3RlYWQgb2YgcmViYXNpbmcKKworMjAxMS0wOC0wNCAgU2FjaGluIFN1cmVuZHJhbiA8c2FjaGluc3VyZW5kcmFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIIDMzODM0NDE6IGZyb20KKworIHNhY2hpbnN1cmVuZHJhbjogRml4IGNyYXNoIG9uIDUuNC40IGR1ZSB0byBhY2Nlc3Mgb2YgZnJlZWQgbWVtb3J5IFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTA0ICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIE1ha2VmaWxlLmluOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzI4OiBmcm9tIHlhYmVyYXVuZXlhOgorCisgQWRkIEZyZWVCU0QgOS54IHRvIHN1cHBvcnRlZCBPU2VzIGxpc3QgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogc25tcGxpYi9wYXJzZS5jOiBDSEFOR0VTOiBsaWJuZXRzbm1wOiBQQVRDSCAzMzYyMjMzOiBmcm9tCisKKyB5YWJlcmF1bmV5YTogTXV0ZSB1bm5lY2Vzc2FyeSBjYW5ub3QgZmluZCBtb2R1bGUgbm9pc2UgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L3NubXBfdmFycy5jLCAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOiBDSEFOR0VTOiBmcmVlYnNkOiBQQVRDSCAzMzYzMzA4OgorICAgICAgZnJvbQorCisgeWFiZXJhdW5leWE6IEZpeCBjb21waWxhdGlvbiBvbiBGcmVlQlNEIDkueCB3aXRoIHJlY2VudCBoZWFkZXIKKyBzaHVmZmxpbmcgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWxsb3cgbnNyb2xsdXAgdG8gdGFrZSBhIC0tbWVyZ2UKKworIGZsYWcgZm9yIG1lcmdpbmcgaW5zdGVhZCBvZiByZWJhc2luZworCisyMDExLTA4LTA0ICBTYWNoaW4gU3VyZW5kcmFuIDxzYWNoaW5zdXJlbmRyYW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6IENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0ggMzM4MzQ0MTogZnJvbQorCisgc2FjaGluc3VyZW5kcmFuOiBGaXggY3Jhc2ggb24gNS40LjQgZHVlIHRvIGFjY2VzcyBvZiBmcmVlZCBtZW1vcnkgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogTWFrZWZpbGUuaW46IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMjg6IGZyb20geWFiZXJhdW5leWE6CisKKyBBZGQgRnJlZUJTRCA5LnggdG8gc3VwcG9ydGVkIE9TZXMgbGlzdCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF92YXJzLmMsIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6IENIQU5HRVM6IGZyZWVic2Q6IFBBVENIIDMzNjMzMDg6CisgICAgICBmcm9tCisKKyB5YWJlcmF1bmV5YTogRml4IGNvbXBpbGF0aW9uIG9uIEZyZWVCU0QgOS54IHdpdGggcmVjZW50IGhlYWRlcgorIHNodWZmbGluZyBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3BhcnNlLmM6IENIQU5HRVM6IGxpYm5ldHNubXA6IFBBVENIIDMzNjIyMzM6IGZyb20KKworIHlhYmVyYXVuZXlhOiBNdXRlIHVubmVjZXNzYXJ5IGNhbm5vdCBmaW5kIG1vZHVsZSBub2lzZSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhbGxvdyBuc3JvbGx1cCB0byB0YWtlIGEgLS1tZXJnZQorCisgZmxhZyBmb3IgbWVyZ2luZyBpbnN0ZWFkIG9mIHJlYmFzaW5nCisKKzIwMTEtMDgtMDQgIFNhY2hpbiBTdXJlbmRyYW4gPHNhY2hpbnN1cmVuZHJhbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywgCisgICAgICBzbm1wbGliL3NubXB1c20uYzogQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSCAzMzgzNDQxOiBmcm9tCisKKyBzYWNoaW5zdXJlbmRyYW46IEZpeCBjcmFzaCBvbiA1LjQuNCBkdWUgdG8gYWNjZXNzIG9mIGZyZWVkIG1lbW9yeSBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgc25tcGxpYi9rZXl0b29scy5jLAorICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgQ0hBTkdFUzogYnVpbGRpbmc6IFBBVENIIDMzODM5NTE6IGZyb20geWFiZXJhdW5leWE6IEZpeCAtV3VudXNlZAorIGNvbXBpbGUgd2FybmluZ3Mgd2l0aCBGcmVlQlNEL05ldEJTRCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2ZyZWVic2QuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgc25tcGxpYi9rZXl0b29scy5jLAorICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgQ0hBTkdFUzogYnVpbGRpbmc6IFBBVENIIDMzODM5NTE6IGZyb20geWFiZXJhdW5leWE6IEZpeCAtV3VudXNlZAorIGNvbXBpbGUgd2FybmluZ3Mgd2l0aCBGcmVlQlNEL05ldEJTRCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZTg3OGFiYmRiMTgwOGVmODNlMGE4MDc0NTM2ZmI1NGUxMzIxOWE4YiBNZXJnZTogNDAzZGU0MgorCisgODc4ZmJmNCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFRodSBBdWcgNCAwNzo1NTowMCAyMDExIC0wNzAwCisKKzIwMTEtMDgtMDQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDI1MGFmYTA2ODkyZmQ4OTdhYzMxZTM4MzZhN2ZmYzllMmI0Y2Y3YjkgTWVyZ2U6IDJjMTRjMWMKKworIDNhZmM1ZTAgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgQXVnIDQgMDc6NTE6MzMgMjAxMSAtMDcwMAorCisyMDExLTA4LTA0ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA1NzhjZDdjY2UzNTFhZThkOTA0ZWMzZDgwYmU5YmE2ZDFkNDhhNzEyIE1lcmdlOiAyNTk4OGJlCisKKyBmM2JjNTUxIEF1dGhvcjogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVGh1IEF1ZyA0IDA3OjUwOjU2IDIwMTEgLTA3MDAKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBhdXRvY29uZgorCisKKzIwMTEtMDgtMDQgIEdhcnJldHQgQ29vcGVyIDx5YWJlcmF1bmV5YUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOiBDSEFOR0VTOiBidWlsZGluZzogUEFUQ0gKKworIDMzODM5NDk6IGZyb20geWFiZXJhdW5leWE6IEZpeCBhdXRvY29uZiB0ZXN0cyBmb3Igc3lzL21idWYuaCBTaWduZWQtb2ZmLWJ5OiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBwcm9tcHQgZm9yIHBhdGNoIGFuZCBhbiBhcmVhLCBhbmQKKworIHVzZSB0aGUgcHJvcGVyIENIQU5HRVMgbGluZSBmb3JtYXQKKworMjAxMS0wOC0wNCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBVc2UgZmV0Y2ggLS1hbGwgYW5kIHJlYmFzZSBhcworCisgc3VnZ2VzdGVkIGJ5IEJhcnQgZm9yIHNwZWVkIGltcHJvdmVtZW50cworCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkNmExYTg5ZTZmNjQ4OTUxYTliODMxOTMyZDNjYzIzMDgyMWYyZDM3IE1lcmdlOiBkY2I3MTJmCisKKyA4NzJlMDEzIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMTI6MDY6MTggMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA0NDk2OWI0ZTU3YzI3MTk0ZTViZDM1N2JjNDUyNzVmZWI4Njk1ZDIyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIEZyaSBKdWwgOCAyMDo1MjoyNSAyMDExICswMjAwCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOiBDSEFOR0VTOiBXaW4zMjogd2luRXh0RExMOiBJbnZva2UKKworIFNubXBVdGlsT2lkRnJlZSgpIGJlZm9yZSBTbm1wVXRpbE9pZENweSgpLiBJdCdzIG5vdCBjbGVhciB5ZXQgd2h5CisgdGhlIG9yaWdpbmFsIGNvZGUgZGlkIG5vdCBtYWtlIHNubXB3YWxrIHRyaWdnZXIgYSBtZW1vcnkgbGVhay4KKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZGNiNzEyZmZjODZiMzM1ODMwMDBlZjRhZTlhNTFjZWQyNWNkMTViZiBNZXJnZTogZTg1Y2ZhNQorCisgOTg2MjNlZiBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcKKyA0IDExOjM2OjE3IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgOGEwMWVjNjQyM2Q0MDBjNGExM2NjYWM2OGEzNzkxZDAyMThhMDg4NSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgQXVnIDQgMTE6MTk6MTcgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBlODVjZmE1OTliMjNiNzZkOTc5MTNjOTZiNWQ3MDNiZmY2YmE0OTQ0IE1lcmdlOiBiMDU2ZWU2CisKKyBlMjFlZWYyIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEF1ZworIDQgMDg6NDQ6NDMgMjAxMSArMDIwMAorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IENIQU5HRVM6IGFnZW50OgorCisgQXZvaWQgdGhhdCBhIE1JQiB3YWxrIG9uIHRoZSBob3N0IHJlc291cmNlcyBNSUIgdHJpZ2dlcnMgYSBjcmFzaCBvbgorIEZlZG9yYSAxNQorCisyMDExLTA4LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBiMDU2ZWU2ZWI1MzkwOWFkMDRmMTZlYzI2ZDI2OTBkN2EwODMxOTJhIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFRodSBBdWcgNCAwNzo1OTowNCAyMDExICswMjAwCisKKzIwMTEtMDgtMDMgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjCisgICAgICAgZXNzLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYywgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MKKyAgICAgICAuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgYWdlbnQvc25tcF9hZ2VudC5jLCAKKyAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wdGxzLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmMsIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAKKyAgICAgIHNubXBsaWIvc25tcF9lbnVtLmMsIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvc25tcHVzbS5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6IENIQU5HRVM6IHNubXBsaWIsIHNubXBkOgorCisgcGVybDogRWxpbWluYXRlIGRlYWQgdmFyaWFibGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGFlOGUzZWNkMmRmNGNmMzc2MjU5NDRhZGVkMWRmZTQ3MzVkNDRlZWEgTWVyZ2U6IDczMTg3Y2UKKworIDkzMzVlMTkgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBXZWQgQXVnIDMgMTQ6Mzc6MzYgMjAxMSAtMDcwMAorCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA3OTRmOWE2OWQ3ZWI2NDIyNjgyMDBiMGE0YjE5OTE1MWRlZjY2ZWQwIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFdlZCBBdWcgMyAxNDozNjoyNQorIDIwMTEgLTA3MDAKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvbW1lbnQKKworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb21tZW50CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGF0IGVuZCBvZiBuc3JvbGx1cCBtZW50aW9uIHRoYXQKKworIG5vdyB3b3VsZCBiZSBhIGdvb2QgdGltZSB0byBydW4gbnNzeW5jCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYSBuZXcgbnNzeW5jKCkgZnVuY3Rpb24gZm9yCisKKyBwdXNoL3B1bGxpbmcgYWN0aXZlIGJyYW5jaGVzCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBjb21tZW50CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhdCBlbmQgb2YgbnNyb2xsdXAgbWVudGlvbiB0aGF0CisKKyBub3cgd291bGQgYmUgYSBnb29kIHRpbWUgdG8gcnVuIG5zc3luYworCisyMDExLTA4LTAzICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGEgbmV3IG5zc3luYygpIGZ1bmN0aW9uIGZvcgorCisgcHVzaC9wdWxsaW5nIGFjdGl2ZSBicmFuY2hlcworCisyMDExLTA4LTAzICBHYXJyZXR0IENvb3BlciA8eWFiZXJhdW5leWFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIuaDogUmVlbmFibGUgSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZQorICAgICAgU2lnbmVkLW9mZi1ieTogV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKworMjAxMS0wOC0wMyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBBIG5ldyBmdW5jdGlvbjogbnNzZnBhdGNoYXBwbHkKKworIHRoYXQgYXV0by1wdWxscyBnaXQgY29tbWFuZCBsaW5lIGluZm8gZnJvbSBTRgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgR2FycmV0dCBDb29wZXIgPHlhYmVyYXVuZXlhQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6IFJlZW5hYmxlIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUKKyAgICAgIFNpZ25lZC1vZmYtYnk6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtY3R4LWdldC5tMmk6IGFkZGVkIHZhcmlhYmxlcyBuYW1lcyB0bworCisgdGhlIGdlbmVyYXRlZCBlcnJvciBtZXNzYWdlcy4KKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6IFdvcmRpbmcgY2hhbmdlcyB0bworCisgaGVscCBkZXNjcmliZSBjb250ZXh0cyBiZXR0ZXIKKworMjAxMS0wOC0wMiAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLWdldC1VNjQubTJpOiBBZGRlZAorCisgdGhlIG1pc3NpbmcgVTY0IG0yaSBmaWxlCisKKzIwMTEtMDgtMDMgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogQSBuZXcgZnVuY3Rpb246IG5zc2ZwYXRjaGFwcGx5CisKKyB0aGF0IGF1dG8tcHVsbHMgZ2l0IGNvbW1hbmQgbGluZSBpbmZvIGZyb20gU0YKKworMjAxMS0wNy0xOCAgSWx5YSBZYW5vayA8eWFub2tAZW1jcmFmdC5jb20+CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jOiBhZ2VudDogY2hhbmdlCisKKyB0eXBlIG9mIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgdG8gbG9uZyBUeXBlIG9mIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgdmFyaWFibGUgaXMgY2hhbmdlZCBmcm9tIGludCB0byBsb25nLgorIFRoaXMgZml4ZXMgdGhlIGJ1ZyB3aXRoIHdyaXRpbmcgdG8gc25tcEVuYWJsZUF1dGhlblRyYXBzIGlmIHNlcnZlcgorIGlzIGNvbXBpbGVkIGZvciA2NGJpdCAoc25tcHNldCByZXBvcnRzIHdyb25nIGxlbmd0aCkuIFRoaXMgYnVnIHdhcworIGludHJvZHVjZWQgYSBsb25nIHRpbWUgYWdvIChieSBmYWVlY2QwIGNvbW1pdCkuICBBY3R1YWxseSB0aGlzIGlzIGEgJ2xlc3MgZWZmb3J0JyB0eXBlIG9mIGZpeCBidXQgSSB3b25kZXIgd2h5IHdlCisgbmVlZCBhIGxvbmcgdG8gc3RvcmUgYW4gSU5URUdFUiBpbiB0aGUgZmlyc3QgcGxhY2U/IFNpZ25lZC1vZmYtYnk6IElseWEgWWFub2sgPHlhbm9rQGVtY3JhZnQuY29tPiBTaWduZWQtb2ZmLWJ5OiBXZXMKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1jdHgtZ2V0Lm0yaTogYWRkZWQgdmFyaWFibGVzIG5hbWVzIHRvCisKKyB0aGUgZ2VuZXJhdGVkIGVycm9yIG1lc3NhZ2VzLgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzogV29yZGluZyBjaGFuZ2VzIHRvCisKKyBoZWxwIGRlc2NyaWJlIGNvbnRleHRzIGJldHRlcgorCisyMDExLTA4LTAyICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtZ2V0LVU2NC5tMmk6IEFkZGVkCisKKyB0aGUgbWlzc2luZyBVNjQgbTJpIGZpbGUKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNmFkN2UyOGZmOWU1ZTRlYmMxMzU4ZWUzOWNjOTc5NmE0NGExYmVlNyBNZXJnZTogZjI4MzJlMworCisgMWUxNTRjZSBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFdlZCBBdWcKKyAzIDE5OjE1OjI0IDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgNjFiMTc4ZjFlZTg5NTJhYTAzYWEzYjFiYTUxZjRhNjY1NWU0N2YwMSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBXZWQgQXVnIDMgMTg6MDk6NDcgMjAxMSArMDIwMAorCisyMDExLTA4LTAzICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6IFdoaXRlc3BhY2Utb25seSBjaGFuZ2U6IGZpeCBpbmRlbnRhdGlvbgorCisgb2YgYW4gI2luY2x1ZGUgZGlyZWN0aXZlCisKKzIwMTEtMDgtMDIgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHBlcmwvTmV0U05NUC54czogQ0hBTkdFUzogUGVybDogUmVtb3ZlIGZpbGUgcGVybC9OZXRTTk1QLnhzCisKKyBiZWNhdXNlIGl0IGJyZWFrcyB0aGUgV2luZG93cyBidWlsZC4gIFRvIFdlczogaWYgeW91IGNhbiB0ZWxsIG1lIGhvdyB0byByZXByb2R1Y2UgdGhlIHByb2JsZW0geW91IG9ic2VydmVkCisgSSdsbCB0cnkgdG8gZmluZCBhIHBvcnRhYmxlIGZpeC4gIFRoaXMgcmV2ZXJ0cyBjb21taXQgZDU0ODcxZjUyOTM2NzVjODA1OGVjY2U4OGZlZDViNjQ2YzgzNjMyMyAoIkFkZGVkCisgYSBib2d1cyBlbXB0eSAueHMgZmlsZSBmb3IgYnVuZGxpbmcgb24gbmV3ZXIgcGVybCB0aGF0IHdhbnRzCisgInNvbWV0aGluZyIiKS4KKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgMGY0ODliMTk5YWRhYjQ4YjE2MzNlYmNhZjVmZjVhN2MyMmM0Y2I4OSBNZXJnZTogZjRlYWEwMgorCisgNzJhNTliYyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBBdWcKKyAyIDEwOjExOjUzIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgN2ZjYzBiODAzMmY4ZGE1YjdiYzMwMDU5YWYwYmE2NTZlYWU3MTA5MSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBNb24gQXVnIDEgMTQ6MTE6MjggMjAxMSArMDIwMAorCisyMDExLTA4LTAyICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0CisgICAgICAgYV9hY2Nlc3MuYzogRml4IGEgY29tcGlsZXIgd2FybmluZyBpbgorCisKKyBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuYworCisyMDExLTA4LTAxICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBBZGQgZmlsZSBuYW1lcyBhbmQgcGF0dGVybnMgZm9yIG91dHB1dAorCisgZmlsZXMgZ2VuZXJhdGVkIGR1cmluZyB0aGUgV2luZG93cyBidWlsZAorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBTb3J0IGFscGhhYmV0aWNhbGx5CisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkIGFwcHMvc3NodG9zbm1wCisKKworMjAxMS0wOC0wMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIC5naXRpZ25vcmUsIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LWMuaW5jLCAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LXhzLmluYzogUmVtb3ZlIHR3byBnZW5lcmF0ZWQgUGVybCBmaWxlcy4KKworCisyMDExLTA4LTAyICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBmNGVhYTAyZDliMDc2YTY3ZDcyNzJkZTdlZWY4ZTlkZmJmMTg5YmJmIE1lcmdlOiA0MDEyNWQ4CisKKyBhZGFkY2I5IEF1dGhvcjogVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgVHVlIEF1ZyAyIDAwOjU3OjUxIDIwMTEgKzAyMDAKKworMjAxMS0wOC0wMiAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zOiBzdXBwcmVzcyAib2siIHRlc3Qgb3V0cHV0IGluIG5zYgorCisKKzIwMTEtMDgtMDEgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA0MDEyNWQ4NTM5Y2Q4OWY5NTJmYmMyNDU4OGM1ZTgxZTljZDgyMWZlIEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBNb24gQXVnIDEKKyAxMzo1ODozMyAyMDExICswMjAwCisKKzIwMTEtMDgtMDEgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDVhY2YwZDJjZWIzOTc3OTY0ZWQzOWYwMDMwNzNiYTY0MTM4YzJlYmQgQXV0aG9yOiBUaG9tYXMKKworIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgU3VuIEp1bCAzMSAyMzo1Nzo0MQorIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTc3MjJhODFmOWNiN2FhODY3MGU3YzIzODYwMTM2MmEzMTA4N2FjYyBNZXJnZTogMjQyZTE3OQorCisgYWU5YWM2YyBBdXRob3I6IEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFN1biBKdWwKKyAzMSAwOToxMTo0NSAyMDExICswMjAwCisKKzIwMTEtMDctMzEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFwcHMvc3NodG9zbm1wLmM6IEZpeCBhbiBpbmNvcnJlY3Qgc291cmNlIGNvZGUgY29tbWVudDogdGhlcmUgaXMKKworIG5vIHJlcXVpcmVtZW50IGluIHRoZSBBTlNJIEMgc3RhbmRhcmQgdGhhdCBzdGFjayB2YXJpYWJsZXMgc2hvdWxkIGJlCisgaW5pdGlhbGl6ZWQgdG8gemVyby4KKworMjAxMS0wNy0zMSAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgMjQyZTE3OTdiMjY5NGEwNjg5ODU2YWUzNmQwNWQzNDEzYWFmOGQ3NyBBdXRob3I6IFRob21hcworCisgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBTdW4gSnVsIDMxIDAxOjQ0OjA5CisgMjAxMSArMDIwMAorCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBzbm1wbGliL3N5c3RlbS5jOiBDSEFOR0VTOiBidWlsZGluZzogYnVpbGQgZml4IGZvciBzeXN0ZW1zIGxhY2tpbmcKKworIGdldGFkZHJpbmZvKCkgYW5kIEVBSV9GQUlMIChlLmcuIEhQLVVYIDEwLjIwLzExLjAwKQorCisyMDExLTA3LTMwICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxOGRmNzU5ZjE5Yjk3NWM0NDlkMDEwYmIwYTE2MjExOWJiNjgzNjBkIE1lcmdlOiA1NGE0NGNiCisKKyA3MDUwNzE4IEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgU2F0IEp1bAorIDMwIDE2OjM5OjEzIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgODJkNzNmYjExYmUzYWUzMWYzOWM5ZDYxOGQ1Mzg4ZGM5YjEwMDZkNyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDI5IDIwOjUxOjI3IDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogYXV0b3JlY29uZgorCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IGF1dG9yZWNvbmYKKworCisyMDExLTA3LTMwICBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAxMDlmNjY5NGQ3ODhmNDhlYmQ5ZmMwYTFlOTBjNDVhYmMzN2JlYTIwIEF1dGhvcjogVGhvbWFzCisKKyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIFNhdCBKdWwgMzAgMTQ6MjI6MTkKKyAyMDExICswMjAwCisKKzIwMTEtMDctMzAgIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IDdkODEwMGVlZDQ1OWExZmYxYTIwYzA2NzM2NGZhNmNiNDc0OTEzMDkgTWVyZ2U6IDExNmMyNGYKKworIDllNDdhYzQgQXV0aG9yOiBUaG9tYXMgQW5kZXJzIDx0YW5kZXJzQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBTYXQgSnVsIDMwIDAwOjIwOjAxIDIwMTEgKzAyMDAKKworMjAxMS0wNy0zMCAgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zLCBkaXN0L25zYi1uaWdodGx5LCBkaXN0L25zYi1wYWNrYWdlOiBtaW5vciBuc2IKKworIGZpeGVzL2VuaGFuY2VtZW50cyBmcm9tIG15IG9sZCBzdm4gdHJlZQorCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxMTZjMjRmMGY3ZmIzZjk5YmE2NDY3MzBmNjFjNTZkMWFlMjNiYTQxIE1lcmdlOiA5ODJmYjdmCisKKyA0ZmMwYjhiIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgRnJpIEp1bAorIDI5IDExOjMxOjIwIDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYzQ4MTczYzA2YTllYWFkYmY4MWU2YjQ5NjJkNTVlZjBhNTRkYjI1MSBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBGcmkgSnVsIDI5IDEwOjI3OjM5IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogY29uZmlndXJlLCBsdG1haW4uc2gsIG00L2xpYnRvb2wubTQ6IFJlcnVuIGF1dG9yZWNvbmYKKworCisyMDExLTA3LTI5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiAuZ2l0aWdub3JlOiAuZ2l0aWdub3JlOiBTb3J0IGFscGhhYmV0aWNhbGx5CisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogLmdpdGlnbm9yZTogLmdpdGlnbm9yZTogQWRkIGFwcHMvc3NodG9zbm1wCisKKworMjAxMS0wNy0yOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oLCAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYzogRml4IHR3byBmaWxlbmFtZXMgaW4gaG9zdCBtaWIKKworIHNvdXJjZSBjb2RlIGNvbW1lbnRzLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgOTgyZmI3ZmQ4YmFiMjVjNDMyMmFhNjJjNTA0MzcwMzZjZTI5NmUzZSBNZXJnZTogMWVkYTY3NQorCisgMzQ1ODEyOCBBdXRob3I6IEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBUaHUgSnVsIDI4IDE2OjI0OjAzIDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogRml4IHBvdGVudGlhbAorCisgc2lnc2VndiB3aGVuIGFuIGlmVGFibGUgZW50cnkgaXMgcmVtb3ZlZCBhcyByZXN1bHQgb2YgYm90aAorIGludGVyZmFjZV9yZXBsYWNlX29sZCBhbmQgaW50ZXJmYWNlX2ZhZGVvdXQgYXQgdGhlIHNhbWUgdGltZS4KKworMjAxMS0wNy0yOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zc2h0b3NubXAuYzogTWFrZSBhcHBzL3NzaHRvc25tcC5jIGJ1aWxkIGFnYWluICh3YXMgYnJva2VuIGJ5CisKKyBjb21taXQgNjEyMjQ3Y2RmMTRjMWU3NDVjMzg0Y2VmZTFmM2ZkZTNlNDQ1YjM0NyB0aGF0IGNoYW5nZWQKKyBNU0dfTk9TSUdOQUwgaW50byBORVRTTk1QX05PU0lHTkFMKQorCisyMDExLTA3LTI4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxZWRhNjc1M2I3ZmU3ZDNiM2YyMTdjMDkyNTRlYzAyZDBlZTFkMGNlIE1lcmdlOiBkYjhiODYwCisKKyBhMmY5ZWNlIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVGh1IEp1bAorIDI4IDE1OjMyOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yOCAgTmllbHMgQmFnZ2VzZW4gPG5iYUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxOiAKKworIENIQU5HRVM6IHNubXBkOiBSZXN0b3JlIHN0b3JhZ2UgdGFibGVzIG9uIExpbnV4CisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjogRG9jdW1lbnQgaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIG9wdGlvbi4KKworCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfcmVwbGFjZV9vbGQnIG9wdGlvbiB0byByZW1vdmUgb2xkIGVudHJpZXMgaW4KKyBpZlRhYmxlIHdoZW4gYW4gaW50ZXJmYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbHJlYWR5IGV4aXNpbmcgb25lCisgYXBwZWFycy4gIEUuZy4gcmVtb3ZlIG9sZCBwcHAwIGludGVyZmFjZSB3aGVuIG5ldyBwcHAwIHNob3dzIHVwLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IERvY3VtZW50IHRoZSBpbnRlcmZhY2VfZmFkZW91dCBvcHRpb24uCisKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQWxsb3cgaWZUYWJsZQorCisgZW50cmllcyB0byBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IHdoZW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlCisgZGlzYXBwZWFycyAoaS5lLiBpbnRlcmZhY2VfZmFkZW91dCA9IDAgd29ya3MgYXMgZXhwZWN0ZWQpLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfZmFkZW91dCcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0CisgbGlmZXRpbWUgb2YgaWZUYWJsZSBlbnRyaWVzIG9mIHJlbW92ZWQgaW50ZXJmYWNlcy4gIFByZXZpb3VzIGxpZmV0aW1lIHdhcyBoYXJkY29kZWQgNSBtaW51dGVzLCBub3cgaXQncyBjb25maWd1cmFibGUuCisKKzIwMTEtMDctMjggIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkNjJhMGViOTA3MGI0ZDhkOWZlMmJjZmRiNGQ1M2QzN2VmODE0ZjliIEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUaHUgSnVsIDI4CisgMTQ6NDk6MDggMjAxMSArMDIwMAorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfcmVwbGFjZV9vbGQnIG9wdGlvbiB0byByZW1vdmUgb2xkIGVudHJpZXMgaW4KKyBpZlRhYmxlIHdoZW4gYW4gaW50ZXJmYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhcyBhbHJlYWR5IGV4aXNpbmcgb25lCisgYXBwZWFycy4gIEUuZy4gcmVtb3ZlIG9sZCBwcHAwIGludGVyZmFjZSB3aGVuIG5ldyBwcHAwIHNob3dzIHVwLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6IERvY3VtZW50IHRoZSBpbnRlcmZhY2VfZmFkZW91dCBvcHRpb24uCisKKworMjAxMS0wNy0yOCAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzogQWxsb3cgaWZUYWJsZQorCisgZW50cmllcyB0byBiZSBkZWxldGVkIGltbWVkaWF0ZWx5IHdoZW4gYXBwcm9wcmlhdGUgaW50ZXJmYWNlCisgZGlzYXBwZWFycyAoaS5lLiBpbnRlcmZhY2VfZmFkZW91dCA9IDAgd29ya3MgYXMgZXhwZWN0ZWQpLgorCisyMDExLTA3LTI4ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOiBDSEFOR0VTOgorCisgc25tcGQ6IGFkZGVkICdpbnRlcmZhY2VfZmFkZW91dCcgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gc2V0CisgbGlmZXRpbWUgb2YgaWZUYWJsZSBlbnRyaWVzIG9mIHJlbW92ZWQgaW50ZXJmYWNlcy4gIFByZXZpb3VzIGxpZmV0aW1lIHdhcyBoYXJkY29kZWQgNSBtaW51dGVzLCBub3cgaXQncyBjb25maWd1cmFibGUuCisKKzIwMTEtMDctMjggIFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBhcHBzL3NzaHRvc25tcC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6IENIQU5HRVM6IGJ1aWxkaW5nOiBidWlsZAorICAgICAgZml4CisKKyBmb3Igc3lzdGVtcyBsYWNraW5nIE1TR19ET05UV0FJVAorCisyMDExLTA3LTI3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYzogQ0hBTkdFUzogc25tcGQ6IE1ha2UKKworIFRDUC1NSUI6OnRjcEN1cnJFc3RhYiB3b3JrIGFnYWluLiBXYXMgYnJva2VuIGluIDUuNyBieSB0aGUKKyBpbnRyb2R1Y3Rpb24gb2YgdGhlICJmZWF0dXJlcyIgZmVhdHVyZS4KKworMjAxMS0wNy0yNyAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGZiODgwNzRmYmJjMjY4YzdmMDUwOTQ5MTUzNWFlYzVmZWNiMDU2ODQgTWVyZ2U6IGE3NDNhZTUKKworIDM4MjEyNzMgQXV0aG9yOiBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6CisgV2VkIEp1bCAyNyAxNDo0NzoyNSAyMDExICswMjAwCisKKzIwMTEtMDctMjcgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCAzMWZhMDdjZDlmZmRlNDZkNDFkMmI1ODM4YzNmYzRkMDE1NDhiZmI1IEF1dGhvcjogSmFuCisKKyBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgSnVsIDI3CisgMTQ6NDU6NDcgMjAxMSArMDIwMAorCisyMDExLTA3LTI3ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvc25tcGQuYzogQ0hBTkdFUzogc25tcGQ6IHJ1biBzaWduYWwgaGFuZGxlcnMgd2hlbiBzZWxlY3QoKQorCisgaXMgaW50ZXJydXB0ZWQuICBUaGlzIGJlaGF2aW9yIGlzIGluZGljYXRlZCBpbiBjb21tZW50IG9uIGxpbmUgMTI0NCwgYnV0IGl0IHdhcyBub3QKKyBhY3R1YWxseSBkb25lLgorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAyZTk0NjZkN2Y1OWQ2NWQwNTAyNzc3MzVlNGVkOWQzMDcxOWZmNzUyIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwgMjYgMTM6MTA6MDQgMjAxMSArMDIwMAorCisyMDExLTA3LTI2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCA3NzA4Mjk2NzYwZWFmNWE4MGQ4NTQwNzQ2YzljMjQ5ODI2ZmQxYmZlIE1lcmdlOiBlYTExZTVlCisKKyBjZDZlMzgyIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bAorIDI2IDE2OjIxOjQxIDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNiAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOiBDbGFyaWZ5IGFuIElQdjYgc291cmNlIGNvZGUgY29tbWVudAorCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYywgbWFuL25ldHNubXBfaGFuZGxlci4zOiBTcGVsbGluZyBmaXg6CisKKyBkZWZpbmVkeSAtPiBkZWZpbmVkCisKKzIwMTEtMDctMjYgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMzogU3BlbGxpbmcKKworIGZpeDogYWxldmlhdGUgLT4gYWxsZXZpYXRlCisKKzIwMTEtMDctMjYgIEphbiBTYWZyYW5layA8anNhZnJhbmVrQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCBkZDJjNDcxMzM0OTNkNWEwMGRlNmIzY2RiY2ZhYzdlOWQ0NGI2ZmZlIE1lcmdlOiBmOWNjYmM3CisKKyBlYTExZTVlIEF1dGhvcjogSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIFR1ZSBKdWwgMjYgMTQ6MjU6MjggMjAxMSArMDIwMAorCisyMDExLTA3LTI2ICBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzVhODQ2NGM0MmE5NGMyNTBlZTJkZmEyYTQ3MzEwOWE3MzQyMDNkOCBBdXRob3I6IEphbgorCisgU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEp1bCAyNgorIDE0OjI0OjU1IDIwMTEgKzAyMDAKKworMjAxMS0wNy0yNSAgSmFuIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGY5Y2NiYzc3MjY2NjEzNGQxZDE3OGI1MDVhZjlkZGNkZDllZDQyNDQgQXV0aG9yOiBKYW4KKworIFNhZnJhbmVrIDxqc2FmcmFuZWtAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIE1vbiBKdWwgMjUKKyAxNTowMjoxNSAyMDExICswMjAwCisKKzIwMTEtMDctMjAgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGIwYzBhMzU1ZDVmNjAxYTExYmU0OTE0ZmJmNzEzNzE2YWJkMzBhMjkgQXV0aG9yOiBXZXMKKworIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+IERhdGU6ICAgVHVlIEp1bCAxOQorIDE4OjM2OjExIDIwMTEgLTA3MDAKKworMjAxMS0wNy0yMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgYzE0ZmMzODYxNGJhZjEwZDUxNzEzNmYwNDgwOTA3YjdmMDNkOGQ3NCBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBXZWQgSnVsIDIwCisgMTM6NDQ6NTkgMjAxMSAtMDcwMAorCisyMDExLTA3LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jOiByZW1vdmUgYnJva2VuIHdoaXRlc3BhY2UgbGluZXMgdGhhdAorCisgbGVhZHMgdG8gcmVhZGluZyBjb25mdXNpb24KKworMjAxMS0wNy0yMCAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgZWJkZDIxNmMwNzRiZjQxY2QzYTA4NGJkMTQ2ODljZjAxYzg4N2IzMSBBdXRob3I6IFdlcworCisgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZTogICBUdWUgSnVsIDE5CisgMTg6MzY6MTEgMjAxMSAtMDcwMAorCisyMDExLTA3LTE5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiAuZ2l0aWdub3JlOiB1cGRhdGVkIGdpdGlnbm9yZSB0byBpZ25vcmUgYSBudW1iZXIgb2YgYXV0by1nZW5lcmF0ZWQKKworIGZpbGVzCisKKzIwMTEtMDctMTkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmM6IHJlbW92ZSBicm9rZW4gd2hpdGVzcGFjZSBsaW5lcyB0aGF0CisKKyBsZWFkcyB0byByZWFkaW5nIGNvbmZ1c2lvbgorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBkZjVmNzAwNTVjZjliZTMzZjA1ZmI1MGFiZTJmNWE4MWVhYzA5MmFkIEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwgMTkgMTE6MDc6MTkgMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCBmNTk2ZjE4MjQyZGNkZmQ2Y2Y0OWM4OGRhMWQ4MzZjMTZlMjYwY2FjIE1lcmdlOiAwZjMwOWI0CisKKyA3MGRlZTRiIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bAorIDE5IDExOjMzOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYzogQ0hBTkdFUzogc25tcGQ6IFBBVENIOgorICAgICAgMzM2OTY4MDoKKworIGZyb20gSWx5YSBZYW5vazogY2hhbmdlIHNubXBfZW5hYmxlYXV0aGVudHJhcHMgZnJvbSBpbnQgdG8gbG9uZyBzdWNoCisgdGhhdCBtb2RpZnlpbmcgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIG9iamVjdCBkb2VzIG5vdCBvdmVyd3JpdGUKKyBtZW1vcnkgaW4gNjQtYml0IGJ1aWxkcy4KKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6IENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzM3MDY0NToKKworIGZyb20gQmlsbCBGZW5uZXI6IEZpeCBBZ2VudFggc3ViYWdlbnQgZm91ciBieXRlIGxlYWsKKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzOiBkbworCisgbm90IGludm9rZSBJU1JVTk5JTkcoKSBvbiBNaW5HVy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzOgorCisgY2xlYW51cCAtIHJlbW92ZSBjb2RlIHRoYXQgYmVjYW1lIHN1cGVyZmx1b3VzLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBNaW5HVzogRG8gbm90CisKKyBhc3N1bWUgdGhhdCBraWxsLmV4ZSByZXBvcnRzIHZpYSBpdHMgZXhpdCBzdGF0dXMgd2hldGhlciB0aGUKKyBzaWduYWxsZWQgcHJvY2VzcyBzdGlsbCBleGlzdHMuCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IENIQU5HRVM6IHRlc3Rpbmc6CisKKyBSZW1vdmUgdGhlIGZ1bmN0aW9uIFdBSVRPUkRJRSgpIGZyb20gc2ltcGxlX2V2YWxfdG9vbHMuc2ggc2luY2UgaXQKKyBpcyBuZXZlciBpbnZva2VkLgorCisyMDExLTA3LTA4ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgU2ltcGxpZnkgV0FJVEZPUigpIGluIHNpbXBsZV9ldmFsX3Rvb2xzLnNoLiBUaGUgY29kZSB0aGF0IGhhbmRsZWQKKyBpbnZvY2F0aW9uIG9mIFdBSVRGT1IoKSB3aXRoIHplcm8gb3Igb25lIGFyZ3VtZW50cyBoYXMgYmVlbiBkcm9wcGVkCisgc2luY2UgV0FJVEZPUigpIGlzIGFsd2F5cyBpbnZva2VkIHdpdGggdHdvIGFyZ3VtZW50cy4KKworMjAxMS0wNy0wOCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDogVGVzdCBoYXJuZXNzOgorCisgbWlub3Igc2ltcGxpZmljYXRpb24uCisKKzIwMTEtMDctMDggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGU6IENIQU5HRVM6CisKKyB0ZXN0aW5nOiBTa2lwIHRlc3QgNTkgaWYgU0lHSFVQIGlzIG5vdCBzdXBwb3J0ZWQuIE1ha2VzIHRlc3QgNTkgcGFzcworIG9uIE1pbkdXLgorCisyMDExLTA3LTA2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBNaW5HVyBmaXgKKworCisyMDExLTA3LTA2ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGZyYW1ld29yaworCisgcmVmYWN0b3Jpbmc6IEludHJvZHVjZSBXQUlURk9STk9UQ09ORCgpLgorCisyMDExLTA3LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgTWFrZSBTVE9QUFJPRyBzZW5kIFNJR1RFUk0gcmVwZWF0ZWRseS4gVGhpcyBmaXhlcyBhIHJhY2Ugd2hlcmUKKyBTSUdURVJNIGNvdWxkIGJlIHNlbnQgYmVmb3JlIHRoZSBTSUdURVJNIHNpZ25hbCBoYW5kbGVyIHdhcyBzZXQgdXAsCisgZXNwZWNpYWxseSB3aGVuIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgVmFsZ3JpbmQuCisgQ0hBTkdFUzogdGVzdGluZzogTWFrZSB0aGUgU05NUF9WRVJCT1NFPTEgb3V0cHV0IGV2ZW4gbW9yZSB2ZXJib3NlLgorCisyMDExLTA3LTA1ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBUZXN0IGhhcm5lc3MKKworIHJlZmFjdG9yaW5nOiBpbnRyb2R1Y2UgRUNIT1NFTkRTSUdURVJNKCkgYW5kIEVDSE9TRU5EU0lHS0lMTCgpCisKKzIwMTEtMDctMDUgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6IEZpeCBhIGJ1ZyBpbgorCisgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaCB0aGF0IHdhcyBpbnRyb2R1Y2VkCisgaW4gY29tbWl0IDkzOGQ3NWMuCisKKzIwMTEtMDctMDEgIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisgICAqIC5naXRpZ25vcmU6IC5naXRpZ25vcmU6IElnbm9yZSAqLmV4ZSBmaWxlcyBnZW5lcmF0ZWQgYnkgdGhlIFdpbjMyCisKKyBidWlsZAorCisyMDExLTA3LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgVGVzdCBvbmx5IG9uY2UgZHVyaW5nIGEgdGVzdCB3aGV0aGVyIHRoZSBzaGVsbCBzdXBwb3J0cyBzdWItc2Vjb25kCisgc2xlZXBpbmcgaW5zdGVhZCBvZiByZXBlYXRlZGx5LgorCisyMDExLTA3LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46IENIQU5HRVM6IHRlc3Rpbmc6IENoYW5nZWQKKworIGRlZmF1bHQgdGltZW91dCBmcm9tIDFzIHRvIDEwcyB3aGVuIHRoZSByZWdyZXNzaW9uIHRlc3RzIGFyZSBydW4KKyB1bmRlciBWYWxncmluZAorCisyMDExLTA3LTA0ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOiBDSEFOR0VTOiB0ZXN0aW5nOgorCisgQWZ0ZXIgaGF2aW5nIHNlbnQgU0lHVEVSTSB0byBzbm1wZCBvciBzbm1wdHJhcGQsIHdhaXQgdW50aWwgdGhlCisgcHJvY2VzcyBoYXMgc3RvcHBlZCBiZWZvcmUgc2VuZGluZyBTSUdLSUxMLiBUaGlzIHJhY2UgY29uZGl0aW9uIHdhcworIGhpdCBtb3N0IGVhc2lseSB3aGVuIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgdW5kZXIgVmFsZ3JpbmQuCisgQ0hBTkdFUzogdGVzdGluZzogQ2hlY2sgUElEIGZpbGUgZXhpc3RlbmNlIGFmdGVyIGhhdmluZyByZWFkIGl0CisgaW5zdGVhZCBvZiBiZWZvcmUuIFRoaXMgZml4ZXMgdGhlIHJhY2UgY29uZGl0aW9uIHdoZXJlIHRoZSBQSUQgZmlsZQorIGRpc2FwcGVhcmVkIGFmdGVyIHRoZSBleGlzdGVuY2UgY2hlY2sgYW5kIGJlZm9yZSBpdCB3YXMgcmVhZC4KKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZpeCBhIGJ1ZyBpbiBhIGRlYnVnIHN0YXRlbWVudAorCisgaW50cm9kdWNlZCBieSBwYXRjaCAzMzEwMjUwIC8gcjIwNDk0OiB1c2UgJWxkIHRvIHByaW50IGEgdmFsdWUgb2YKKyB0eXBlIG9pZCBpbnN0ZWFkIG9mICVkLiAgVGhpcyBwYXRjaCBpcyBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmb2xsb3dpbmcgdG8gVjUuNiBTVk4gcGF0Y2hlczogZ2l0LXN2bi1pZDoKKworIGZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWRnaXQtc3ZuLWlkOgorCisgZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTEyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAwZjMwOWI0OTNjMjFkM2M2OTE0NDg3NTE0YjQxNTYwNzU0ZmZjZGY5IEF1dGhvcjogQmFydCBWYW4KKworIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPiBEYXRlOiAgIFR1ZSBKdWwgMTkgMDg6Mzc6NTAgMjAxMSArMDIwMAorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiA6IGNvbW1pdCAxYjc0NTRiYzI4MTU2ODQ3MGExMzAwNDc2ZDJlZGI0ZjQxMWU2MDI5IE1lcmdlOiA4ZDlkY2M4CisKKyA2OTBlYTdkIEF1dGhvcjogQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+IERhdGU6ICAgVHVlIEp1bAorIDE5IDA4OjMxOjI4IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xOSAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogYXBwcy9zbm1wdHJhcGQuYzogQ0hBTkdFUzogc25tcHRyYXBkOiBBZGQgbWlzc2luZyBuZXdsaW5lCisKKyBjaGFyYWN0ZXIgaW4gYSBsb2cgbWVzc2FnZQorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBhcHBzL3NubXB0cmFwZC5jOiBDSEFOR0VTOiBzbm1wdHJhcGQ6IEludm9rZSBzaHV0ZG93bl9wZXJsKCkgd2hlbgorCisgc2h1dHRpbmcgZG93bgorCisyMDExLTA3LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6IFNwZWxsaW5nIGZpeDogYnJhbmtldCAtPiBicmFja2V0CisKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBSdW4gYXV0b3JlY29uZi4KKworIEZpeGVzIGJ1aWxkIGJyZWFrYWdlIGNhdXNlZCBieSBwYXRjaAorIGQ1ODhlYzg1M2JkMDUzMWYyMTJmY2JmNTFiOTYyYjk2YzY4MjhiNTkgKFJQTSA0Ljkgc3VwcG9ydCkKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgZDYxN2Q4NGY4M2ZhNjllZDlmYTlmOThlZmM0YWZhZjg4MGQxMjFmMiBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgSnVsIDE0IDE2OjQzOjQ3IDIwMTEgKzAyMDAKKworMjAxMS0wNy0xNCAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jOiBDSEFOR0VTOiBzbm1wbGliOiBNYWtlCisKKyBuZXRzbm1wX2lwdjZfZm10YWRkcigpIHNob3cgdGhlIElQdjYgc2NvcGUgSUQKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYywgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogQ0hBTkdFUzogV2luMzI6IEFkZCBzdXBwb3J0CisgICAgICBmb3IKKworIElQdjYgYWRkcmVzcyBzY29wZSBJRAorCisyMDExLTA3LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4KKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFJ1biBhdXRvcmVjb25mCisKKworMjAxMS0wNy0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFuYXNzY2hlQGFjbS5vcmc+CisKKyAgICogOiBjb21taXQgYTU2NzIxYTNlNzc1NGUzODlkYWE3ZThhM2Q1NzkyODk5ZWRjOWRlMyBBdXRob3I6IEJhcnQgVmFuCisKKyBBc3NjaGUgPGJ2YW5hc3NjaGVAYWNtLm9yZz4gRGF0ZTogICBUaHUgSnVsIDE0IDE2OjE4OjMyIDIwMTEgKzAyMDAKKworMjAxMS0wNy0xNSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogOiBjb21taXQgODQ0ZDRjZTg2N2JmM2FiZTdiNzUzNmM1ZGJmYmE0MDE5MzdhOGQ0YSBNZXJnZTogZWVkMDE5OAorCisgNjEwMzZhOCBBdXRob3I6IFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOgorIEZyaSBKdWwgMTUgMTU6MzM6MTAgMjAxMSAtMDcwMAorCisyMDExLTA3LTE1ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiA6IGNvbW1pdCA4NTFiY2Y1M2ZjZDEzY2RmMGJhOWYxMmU1ZDYwM2U3M2Y4YmI5NjExIEF1dGhvcjogV2VzCisKKyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PiBEYXRlOiAgIEZyaSBKdWwgMTUKKyAxNTozMjo0OSAyMDExIC0wNzAwCisKKzIwMTEtMDctMTQgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOiBmaXggYSB0eXBvCisKKworMjAxMS0wNy0xMyAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAbG9jYWxob3N0PgorCisgICAqIHNubXBsaWIvcGFyc2UuYzogQ0hBTkdFUzogc25tcGxpYjogIHR3ZWFrIHBhdGNoIDMwNDQ4ODggdG8gcmVzdG9yZQorCisgcHJvcGVyIG5vbi1lcnJvciByZXR1cm4gZHVyaW5nIG1pYiBsb2FkaW5nCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYWRkZWQgNS43IHBhdGNoZXMgdG8gdGhlIGJyYW5jaCBsaXN0IGFuZCBmaXggdGhlIHJlbGVhc2UgZmlsZQorCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogYWRkZWQgNS43IHBhdGNoZXMgdG8gdGhlIGJyYW5jaCBsaXN0CisKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogZGlzdC9yZWxlYXNlOiBhIGNvcHkgb2YgdGhlIHJlbGVhc2UgZmlsZSBhcHBsaWVkIHRvIHRoZSBvbGRlcgorCisgYnJhbmNoZXMKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCA1LjcgcGF0Y2hlcworCisKKzIwMTEtMDctMTEgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIDogY29tbWl0IGM0MzEyMzFlOGYwYTM5ZDE5NTBiYzcyYzMyZTM0MDJmOTBmYTgwMzAgTWVyZ2U6IDU2ZmVlNDAKKworIGEyYWMyNGQgQXV0aG9yOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4gRGF0ZToKKyBNb24gSnVsIDExIDE5OjMzOjE3IDIwMTEgLTA3MDAKKworMjAxMS0wNy0xMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIGNvcHkgb2YgdGhlCisKKyBzaGVsbC1mdW5jdGlvbnMgdG8gdGhlIG9sZGVyIGJyYW5jaAorCisyMDExLTA3LTExICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworICAgKiBkaXN0L3JlbGVhc2U6IGEgY29weSBvZiB0aGUgcmVsZWFzZSBmaWxlIGFwcGxpZWQgdG8gdGhlIG9sZGVyCisKKyBicmFuY2hlcworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjcucmMzIC0+IFY1LjcKKworMjAxMS0wNy0wMSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZTogNS43CisKKworMjAxMS0wNy0wMSAgUm9iZXJ0IFN0b3J5IDxyc3RvcnlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6IFJldmVydCAiZml4IGR0bHN1ZHAKKworIHRyYW5zcG9ydCBhZGRyZXNzIGZvcm1hdCBmdW5jdGlvbiIgVGhpcyByZXZlcnRzIGNvbW1pdCAyYWIzYTZlNmYyZmNjMWZmM2U1ZjBmYjVkYzVkMDVlNDk4ODIwZDg5LiAgIC0gZm9yIHNvbWUgcmVhc29uIEkgc2F3ICdyYycgYW5kIG15IGJyYWluIGludGVycHJldGVkIGl0IGFzICAgICdwcmUtcmVsZWFzZScuIFdoYXQgY2FuIEkgc2F5LCBpdCB3YXMgbGF0ZS4gOi0vCisKKzIwMTEtMDctMDEgIFJvYmVydCBTdG9yeSA8cnN0b3J5QGxvY2FsaG9zdD4KKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOiBmaXggZHRsc3VkcCB0cmFuc3BvcnQKKworIGFkZHJlc3MgZm9ybWF0IGZ1bmN0aW9uICAtIHVwZGF0ZSBpcHY0IGZtdGFkZHIgdG8gaGFuZGxlIHNvY2thZGRyIGFuZCB0byBjaGVjayAgICBzaXplIGJlZm9yZSBhc3N1bWluZyBkYXRhIGlzIGFkZHIgcGFpciAgLSBtb3ZlIGR0bHN1ZHAgZnVuY3Rpb25zIHRvIGV4dHJhY3QgYWRkcihzKSB0byB0bHNiYXNlCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBmaXggdGFnIHB1c2hpbmcKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS43LnJjMiAtPiBWNS43LnJjMworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLAorCWRpc3QvbmV0LXNubXAuc3BlYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlOiA1LjcucmMzCisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogcmVtb3ZlIHVubmVlZGVkIGNvbW1lbnQKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiBtaXNjIHB1YmxpY2F0aW9uIGZpeGVzIGZvdW5kIHdoaWxlCisJcHVibGlzaGluZworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogcmFuIGF1dG9oZWFkZXIgdG8gYWRkIHRoZQorCW1pc3NpbmcgdGVtcGxhdGUgaWZkZWZzCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5yYzEgLT4gVjUuNy5yYzIKKworMjAxMS0wNi0yOSAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGRpc3QvbWFrZXJlbGVhc2UueG1sOiB1c2UgdGhlIG5ldyBydW4tYXV0b2NvbmYgc2NyaXB0CisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L3J1bi1hdXRvY29uZjogQSBzY3JpcHQgdG8gaW52b2tlIHRoZSBjb3JyZWN0IHZlcnNpb24gb2YgdGhlCisJYXV0b2NvbmYgdG9vbAorCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHJlbWFpbmluZyBjb21tYW5kIGxpbmUgY2hhbmdlcyBmb3Igc3ZuIC0+CisJZ2l0CisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L21ha2VyZWxlYXNlLnhtbDogbWFrZSB0aGUgYnJhbmNoIGVjaG8gb3V0cHV0IGFuZCBzdm4gdXBkYXRlCisJY29udmVydGVkIHRvIGdpdCBlcXVpdmFsZW50cworCisyMDExLTA2LTI5ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogZGlzdC9tYWtlcmVsZWFzZS54bWw6IHB1bGwgdGhlIGJyYW5jaCBpbmZvIGZyb20gZ2l0CisKKzIwMTEtMDYtMjkgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBkaXN0L3JlbGVhc2U6IG5vdGVkIHRoYXQgdGhlIG1hc3RlciBicmFuY2ggaXMgaW4gcmMgc3RhdGUKKworMjAxMS0wNi0yOCAgV2VzIEhhcmRha2VyIDxvcGVuc291cmNlQGhhcmRha2Vycy5uZXQ+CisKKwkqIEZBUTogTWVudGlvbiB0aGUgR2l0IHdpa2kgcGFnZQorCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiB1c2UgZ2l0IG1lcmdlIHdpdGggdGhlIC0tbG9nCisJb3B0aW9uCisKKzIwMTEtMDYtMjggIEJhcnQgVmFuIEFzc2NoZSA8YnZhbmFzc2NoZUBhY20ub3JnPgorCisJKiAuZ2l0aWdub3JlOiBBZGQgLmdpdGlnbm9yZQorCisyMDExLTA2LTI4ICBXZXMgSGFyZGFrZXIgPG9wZW5zb3VyY2VAaGFyZGFrZXJzLm5ldD4KKworCSogRkFROiBXZSdyZSBub3cgdXNpbmcgZ2l0IQorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiB1c2UgcmViYXNlIHRvIHB1dCBsb2NhbCBjaGFuZ2VzIGF0CisJdGhlIHRvcCBvZiB0aGUgcmVtb3RlIGJyYW5jaGVzIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUzMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogYWRkZWQgYSBmZWF0dXJlIHRvIG5vdCByb2xsCisJYnJhbmNoZXMgY3VycmVubHkgaW4gcmMgcGhhc2UgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIG5zcm9sbHVwIGZ1bmN0aW9uIGZvcgorCXJvbGxpbmcgYnJhbmNoZXMgdXB3YXJkLiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMxIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBjcmVhdGVkIGFuIG5zcGF0Y2hhcHBseSBmdW5jdGlvbgorCXRvIGFwcGx5IGEgcHJldmlvdXNseSB0ZXN0ZWQgcGF0Y2ggZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTMwIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI3ICBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogbG9jYWwvZ2l0dG9vbHMvc2hlbGwtZnVuY3Rpb25zOiBhZGRlZCBhIG5zdHJ5cGF0Y2ggZnVuY3Rpb24gdG8KKwl0ZXN0IHBhdGNoIGFwcGxpY2F0aW9uIGFnYWluc3QgdmFyaW91cyBicmFuY2hlcyBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IGFkZGVkIHZlcmJvc2Ugb3V0cHV0IGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNyAgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGxvY2FsL2dpdHRvb2xzL3NoZWxsLWZ1bmN0aW9uczogbW9yZSBwcmVmaXggY2hhbmdlcyBhbmQgYmV0dGVyCisJc2V0dGluZyBvZiBkZWZhdWx0IHZhbHVlcyBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vdHJ1bmtAMjA1MjcgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjcgIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6IHVzZSBucyBwcmVmaXhlcyBpbnN0ZWFkIG9mIGdlbmVyaWMKKwlzbm1wIHByZWZpeGVzIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby90cnVua0AyMDUyNiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTI0IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjogCisJTWlzc2luZyBjaGVjayBmb3IgcnBtdHMuaCBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBjb25maWd1cmU6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNC1wYXRjaGVzQDIwNTIyIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTI0ICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAorCW1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKKwltYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAorCW1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKKwltYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCisJbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAorCW1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKKwltYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAorCW1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCisJbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCisJbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCisJbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAorCW1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKKwltYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCisJbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKKwltYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKKwltYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCisJbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAorCW1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAorCW1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAorCW1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAorCW1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKKwltYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAorCW1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCisJbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCisJbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAorCW1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKKwltYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywKKwltYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLAorCW1hbi9uZXRzbm1wX3dhdGNoZXIuMzogZG9jdW1lbnRhdGlvbiB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUyMSAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yNCAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCisJc25tcGxpYi9zbm1wX3ZlcnNpb24uYzogVmVyc2lvbiBudW1iZXIgdXBkYXRlIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MjAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjMgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAorCWluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46IFR3ZWFrIFJQTSBoYW5kbGluZyB0byB3b3JrCisJd2l0aCBsaWJyYXJ5IHZlcnNpb24gNC45IEJhc2VkIG9uIGEgcGF0Y2ggYnkgSmFuIFNhZnJhbmVrIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MTkgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMjIgIERhdmUgU2hpZWxkIDxkdHMxMkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6IFByb3ZpZGUgYSBmcmFtZXdvcmsgZm9yIHJlYWRpbmcKKwlSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5IChyYXRoZXIgdGhhbiBxdWVyeWluZworCXRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKwlmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTQtcGF0Y2hlc0AyMDUxOCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMiAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogQ2hhbmdlTG9nOiB2ZXJzaW9uIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNTE2IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBjb25maWd1cmU6IFZlcnNpb24gbnVtYmVyIHVwZGF0ZSBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtMy1wYXRjaGVzQDIwNTE1IDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTIyICBEYXZlIFNoaWVsZCA8ZHRzMTJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKKwlzbm1wbGliL3NubXBfdmVyc2lvbi5jOiBWZXJzaW9uIG51bWJlciB1cGRhdGUgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTMtcGF0Y2hlc0AyMDUxNCAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwKKwlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IFByb3ZpZGUgYQorCWZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5CisJKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKwlmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTYtcGF0Y2hlc0AyMDUxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwKKwlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IFByb3ZpZGUgYQorCWZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5CisJKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKwlmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMyAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0yMSAgRGF2ZSBTaGllbGQgPGR0czEyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwKKwlhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmM6IFByb3ZpZGUgYQorCWZyYW1ld29yayBmb3IgcmVhZGluZyBSUE0gcGFja2FnZSBpbmZvcm1hdGlvbiBmcm9tIGEgY2FjaGUgZGlyZWN0b3J5CisJKHJhdGhlciB0aGFuIHF1ZXJ5aW5nIHRoZSBSUE1kYiBkaXJlY3RseSkuICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKKwlmdW5jdGlvbmFsaXR5LiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL3RydW5rQDIwNTEzIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE5ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZvbGxvdy11cCBmb3IgcjIwNTExOiByZWFsbHkgdXNlCisJdGhlIHByb3BlciBmb3JtYXQgc3BlY2lmaWNhdGlvbi4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS02LXBhdGNoZXNAMjA1MTIgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTkgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzogRm9sbG93LXVwIGZvciByMjA1MTE6IHJlYWxseSB1c2UKKwl0aGUgcHJvcGVyIGZvcm1hdCBzcGVjaWZpY2F0aW9uLiAgZ2l0LXN2bi1pZDoKKworCWZpbGU6Ly8vaG9tZS9oYXJkYWtlci9saWIvc2YtYmt1cHMvbmV0LXNubXAtY29udmVydC1zdm5yZXBvL2JyYW5jaGVzL1Y1LTUtcGF0Y2hlc0AyMDUxMiAwNjgyNzgwOS1hNTJhLTA0MTAtYjM2Ni1kNjY3MTg2MjlkZWQKKworMjAxMS0wNi0xNyAgQmFydCBWYW4gQXNzY2hlIDxidmFzc2NoZUB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CisKKwkqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOiBGaXggYSBidWcgaW4gYSBkZWJ1ZyBzdGF0ZW1lbnQKKwlpbnRyb2R1Y2VkIGJ5IHBhdGNoIDMzMTAyNTAgLyByMjA0OTQ6IHVzZSAlbGQgdG8gcHJpbnQgYSB2YWx1ZSBvZgorCXR5cGUgb2lkIGluc3RlYWQgb2YgJWQuICBnaXQtc3ZuLWlkOgorCisJZmlsZTovLy9ob21lL2hhcmRha2VyL2xpYi9zZi1ia3Vwcy9uZXQtc25tcC1jb252ZXJ0LXN2bnJlcG8vYnJhbmNoZXMvVjUtNi1wYXRjaGVzQDIwNTExIDA2ODI3ODA5LWE1MmEtMDQxMC1iMzY2LWQ2NjcxODYyOWRlZAorCisyMDExLTA2LTE3ICBCYXJ0IFZhbiBBc3NjaGUgPGJ2YXNzY2hlQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworCSogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6IEZpeCBhIGJ1ZyBpbiBhIGRlYnVnIHN0YXRlbWVudAorCWludHJvZHVjZWQgYnkgcGF0Y2ggMzMxMDI1MCAvIHIyMDQ5NDogdXNlICVsZCB0byBwcmludCBhIHZhbHVlIG9mCisJdHlwZSBvaWQgaW5zdGVhZCBvZiAlZC4gIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTEgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogVXNlICVwIHRvIHByaW50IGEgcG9pbnRlciBpbnN0ZWFkCisJb2YgJWxkIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS00LXBhdGNoZXNAMjA1MTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKzIwMTEtMDYtMTcgIEJhcnQgVmFuIEFzc2NoZSA8YnZhc3NjaGVAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorCisJKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzogVXNlICVwIHRvIHByaW50IGEgcG9pbnRlciBpbnN0ZWFkCisJb2YgJWxkIGdpdC1zdm4taWQ6CisKKwlmaWxlOi8vL2hvbWUvaGFyZGFrZXIvbGliL3NmLWJrdXBzL25ldC1zbm1wLWNvbnZlcnQtc3ZucmVwby9icmFuY2hlcy9WNS01LXBhdGNoZXNAMjA1MTAgMDY4Mjc4MDktYTUyYS0wNDEwLWIzNjYtZDY2NzE4NjI5ZGVkCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNy5wcmUyIC0+IFY1LjcucmMxCisKKzIwMTEtMDYtMTMgMTY6MTEgIGhhcmRha2VyCiAKICAgICogY29uZmlndXJlOgogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgIHJ1biBjb3JyZWN0IHZlcnNpb24gb2YgYXV0b2NvbmYKIAotMjAxMS0wNi0yNCAxMjowOCAgZHRzMTIKKzIwMTEtMDYtMTMgMTY6MTAgIGhhcmRha2VyCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0KLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMTEtMDYtMjQgMTI6MDIgIGR0czEyCi0KLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKIAogICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCiAKLTIwMTEtMDYtMjMgMTU6NDEgIGR0czEyCisyMDExLTA2LTEzIDE2OjA0ICBoYXJkYWtlcgogCi0gICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisgICAqIGNvbmZpZ3VyZToKIAotICAgVHdlYWsgUlBNIGhhbmRsaW5nIHRvIHdvcmsgd2l0aCBsaWJyYXJ5IHZlcnNpb24gNC45Ci0gICBCYXNlZCBvbiBhIHBhdGNoIGJ5IEphbiBTYWZyYW5laworICAgcmFuIGF1dG9jb25mCiAKLTIwMTEtMDYtMjIgMTQ6MjcgIGR0czEyCisyMDExLTA2LTEwIDA2OjAzICBuYmEKIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgorICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzOgogCi0gICBQcm92aWRlIGEgZnJhbWV3b3JrIGZvciByZWFkaW5nIFJQTSBwYWNrYWdlIGluZm9ybWF0aW9uIGZyb20KLSAgIGEgY2FjaGUgZGlyZWN0b3J5IChyYXRoZXIgdGhhbiBxdWVyeWluZyB0aGUgUlBNZGIgZGlyZWN0bHkpLgorICAgRml4IGJ1aWxkIG9mIHNubXB1c20gd2hlbiBhZGRpdGlvbmFsIHNlYyBtb2R1bGVzIHJlcXVlc3RlZAorCisyMDExLTA2LTA5IDIxOjEzICBuYmEKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBJbmNsdWRlIHN0ZOeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMteeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLT1gJKRYi5oIHRvIG1ha2UgZG1hbGxvYyBoYXBweQorCisyMDExLTA2LTA5IDE0OjM1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIENIQU5HRVM6IEJVRzogMzE1MTg0NTogZml4IG11bHRpcGxlIHJlZ2lzdHJhdGlvbnMgb2Ygc25tcAorICAgdHJhbnNwb3J0IGhhbmRsZXIKKworMjAxMS0wNi0wOCAxNjozNCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIG1vcmUgZG5zc2VjIHR3ZWFrcwogICAgCi0gICBNeSBhcG9sb2dpZXMgdG8gSmVmZiBKb2huc29uIGZvciB0aGUgZGVsYXkgaW4gYWRkaW5nIHRoaXMKLSAgIGZ1bmN0aW9uYWxpdHkuCisgICAtIGNyZWF0ZSBhbiBhcHAtZ2xvYmFsIHZhbGlkYXRvciBjb250ZXh0IGZvciB1c2Ugd2l0aCBhbGwKKyAgIHZhbGlkYXRpb24gcm91dGluZXMuIG1haW5seSB1c2VmdWwgZm9yIGxvbmctbGl2ZWQgYXBwcy4KKyAgIC0gdXNlIHRoZSBhcHB0eXBlIGFzIHRoZSB2YWxpZGF0b3IgJ3Njb3BlJywgYWxsb3dpbmcKKyAgIGZvciBhcHAtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvZiB2YWxpZGF0aW9uIHZpYSBsaWJ2YWwncworICAgZG5zdmFsLmNvbmYKIAotMjAxMS0wNi0xNyAxOTowNiAgYnZhc3NjaGUKKzIwMTEtMDYtMDcgMTY6NDggIHJzdG9yeQogCi0gICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oOgogCi0gICBVc2UgJXAgdG8gcHJpbnQgYSBwb2ludGVyIGluc3RlYWQgb2YgJWxkCisgICBhZGQgYSBtYXggZGVmaW5lIGZvciBlYWNoIGRlZmF1bHQgc3RvcmUgdHlwZQorICAgCisgICBub3QgYWN0dWFsbHkgdXNlZCwganVzdCBhIGhlbHBmdWwgcmVtaW5kZXIgZm9yIHRob3NlIGFkZGluZworICAgbmV3IGlkcyB3aG8gbWlnaHQgbm90IHRoaW5rIHRvIGNoZWNrIE5FVFNOTVBfRFNfTUFYX1NVQklEUy4KKyAgICh0aGUgYm9vbCBsaXN0IGlzIHJhcGlkbHkgYXBwcm9hY2hpbmcgdGhlIGN1cnJlbnQgbGltaXQuKQogCi0yMDExLTA2LTAxIDE1OjU3ICBkdHMxMgorMjAxMS0wNi0wNyAxNjo0NiAgcnN0b3J5CiAKLSAgICogQ0hBTkdFUzoKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgbWVudGlvbiBidWlsZGRpciB3aGVuIGNvbXBsYWluaW5nIGFib3V0IG5vdCBiZWluZyBydW4gZnJvbSBzb3VyY2UKKyAgIHRyZWUKIAotMjAxMS0wNi0wMSAxNTo0OCAgZHRzMTIKKzIwMTEtMDYtMDEgMjI6MjQgIGhhcmRha2VyCiAKLSAgICogQ2hhbmdlTG9nOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMzEwMjUwOiBmcm9tIGZlbm5lcjogbWlzYyBmaXhlcyBmb3IKKyAgIGRlYnVnZ2luZyBvdXRwdXQgb2YgYWdlbnR4CiAKLTIwMTEtMDYtMDEgMTU6NDcgIGR0czEyCisKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42IC0+IFY1LjcucHJlMgorCisyMDExLTA1LTEwIDAwOjIwICBoYXJkYWtlcgogCiAgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKQEAgLTEwNywxOTcgKzMwMDQwLDU2IEBACiAKICAgIG1ha2UgZGVwZW5kCiAKLTIwMTEtMDYtMDEgMTU6NDIgIGR0czEyCisyMDExLTA1LTEwIDAwOjIwICBoYXJkYWtlcgogCi0gICAqIHBlcmwvU05NUC9TTk1QLnhzOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKIAotICAgUmVpbnN0YXRlIGFuICJ1bnVzZWQiIGxhYmVsIHRoYXQgaXMgYWN0dWFsbHkgc3RpbGwgcmVxdWlyZWQuCi0gICAocmVmZXJlbmNlZCBpbiBsaW5lIDI3MTApCisgICBDKysgLT4gQyBjb21tZW50cwogCi0yMDExLTA2LTAxIDE1OjMyICBkdHMxMgorMjAxMS0wNS0xMCAwMDoxNyAgaGFyZGFrZXIKIAotICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisgICAqIE5FV1M6CiAKLSAgIEZpeCB0eXBvCisgICBORVdTIHVwZGF0ZSBmb3IgNS43CiAKLTIwMTEtMDYtMDEgMTU6MDggIGR0czEyCisyMDExLTA1LTA5IDIzOjE0ICBoYXJkYWtlcgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmg6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICByZXZlcnQgdGhlIG9pZCB0eXBlZGVmIHJlc2l6aW5nIGZyb20gcjE3ODA5IGJlY2F1c2UgaXQgYnJva2UKKyAgIGJhY2t3YXJkcyBjb21wYXQsIGFzIHBvaW50ZWQgb3V0IGJ5IHVzZXJzIG9uIHRoZSAtY29kZXJzIGxpc3QKIAotMjAxMS0wNi0wMSAxNDo1MSAgZHRzMTIKKzIwMTEtMDUtMDkgMjI6NTEgIGhhcmRha2VyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogY29uZmlndXJlOgorCisgICB1c2UgcHJvcGVyIGF1dG9jb25mIHZlcnNpb24KKworMjAxMS0wNS0wOSAyMjozOCAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBwZXJsL0FTTi9BU04ucG0sICAgCisgICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sIHBlcmwvU05NUC9TTk1QLnBtLCAKKyAgICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sICAgIHBlcmwvYWdlbnQvYWdlbnQucG0sCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtOgogCiAgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKIAotMjAxMS0wNS0zMSAyMjo0OSAgaGFyZGFrZXIKKzIwMTEtMDUtMDkgMjI6MzggIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKKyAgICogTWFrZWZpbGUudG9wOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzA2Njg2MjogZnJvbSBmaGV3OiBmaXggdGhlIGFnZW50IGZvcgotICAgY29tcGFyaW5nIHVuc2lnbmVkIGxhcmdlIGluZGV4ZXMgb2YgdGhlIGRpc2sgYW5kIGV4dGVuZCB0YWJsZXMuCisgICB2ZXJzaW9uIHVwZGF0ZQogCi0yMDExLTA1LTMxIDEyOjMwICBqc2FmcmFuZWsKKzIwMTEtMDUtMDkgMjI6MTAgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgorICAgKiBtaWJzL1VDRC1TTk1QLU1JQi50eHQ6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBoclNXUnVuUGF0aCBvZiBzd2FwcGVkLW91dCBwcm9jZXNzZXMgb24KLSAgIExpbnV4LgotICAgCi0gICBmZ2V0cygpIHJldHVybnMgTlVMTCBib3RoIHdoZW4gL3Byb2MvUElEL2NtZGxpbmUgaXMgZW1wdHkgKD0KLSAgIHN3YXBwZWQgb3V0KSBhbmQgd2hlbiB0aGUgcHJvY2VzcyBleGl0ZWQgYWZ0ZXIgZm9wZW4oKSwgc28gY2hlY2sKLSAgIC9wcm9jL1BJRC9zdGF0dXMgaW4gYm90aCBjYXNlcy4KLQotMjAxMS0wNS0yNiAxNjoxMiAgaGFyZGFrZXIKLQotICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0KLSAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMjk5Mzg0OiBmaXggSU5GT1JNcyBzbyB0aGV5IHJldHJ5IHByb2JpbmcKLSAgIGZvciBhbiBlbmdpbmVJRC4KLQotMjAxMS0wNS0yNiAxNjowNiAgaGFyZGFrZXIKLQotICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0KLSAgIEFwcGxpZWQgKHJvdWdobHkpIHBhdGNoIDMyOTkzNzAgdG8gYXZvaWQgcmV3cml0aW5nIGV4aXN0aW5nCi0gICBhdXRoa2V5L3ByaXZrZXkvZXRjcwotCi0yMDExLTA1LTI1IDA5OjIxICBidmFzc2NoZQotCi0gICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzoKLQotICAgQ0hBTkdFUzogc25tcGQ6IFVzZSBwcm9wZXIgZm9ybWF0IHNwZWNpZmllciBpbiBkZWJ1ZyBzdGF0ZW1lbnRzCi0gICBmb3IgcHJpbnRpbmcgdmFsdWVzIG9mIHR5cGUgJ29pZCcuCi0KLTIwMTEtMDUtMjQgMTI6NTEgIGpzYWZyYW5lawotCi0gICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmM6Ci0KLSAgIEFkZGVkIE5VTEwtY2hlY2tzIGFmdGVyIG1hbGxvYwotCi0yMDExLTA1LTIyIDE5OjM0ICBkdHMxMgotCi0gICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKLQotICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMzMwNTE1NzogRml4IGlwQWRkcmVzc1ByZWZpeCBoYW5kbGluZyBvZgotICAgSVB2NiBhZGRyZXNzZXMKLQotMjAxMS0wNS0yMiAxOTowNyAgZHRzMTIKLQotICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgotCi0gICBDSEFOR0VTOiBweXRob246IEJVRzogMzI5NTQwNzogRml4IGhhbmRsaW5nIG9mIHZvaWQgcG9pbnRlcgotCi0yMDExLTA1LTIyIDE4OjU3ICBkdHMxMgotCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6Ci0KLSAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMzI2NDg1MjogUmVjb2duaXNlIG1pc3NpbmcgcmVwb3J0IHR5cGVzCi0gICAoc25tcHtVbmF2YWlsYWJsZSxVbmtub3dufUNvbnRleHRzLHNubXBVbmtub3duUERVSGFuZGxlcnMpCi0KLTIwMTEtMDUtMjAgMTU6NDEgIGR0czEyCi0KLSAgICogIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgc25tcGxpYi9zbm1wSVBYRG9tYWluLmMsICAgCi0gICAgICBzbm1wbGliL3NubXBTVEREb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCi0gICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAotICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6Ci0KLSAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMzIzNDc1NDogRW5zdXJlIG9sZCBmX2NyZWF0ZV9mcm9tX3RzdHJpbmcKLSAgIGhvb2sgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTAotCi0yMDExLTA1LTE5IDE5OjQ2ICBoYXJkYWtlcgotCi0gICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0KLSAgIHVzZSAjaWZkZWYgcmF0aGVyIHRoYW4gI2lmIGZvciBkZWZpbmUgY2hlY2tzLgotCi0yMDExLTA1LTE5IDE3OjE5ICBkdHMxMgotCi0gICAqIG1hbi9zbm1wX2FwaS4zLmRlZiwgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6Ci0KLSAgIENIQU5HRVM6IG1hbjogQlVHOiAzMTkwNzI1OiBEb2N1bWVudCBzbm1weyxfc2Vzc31zeW5jaF9yZXNwb25zZQotICAgYW5kIHNubXBfYXN5bmNfc2VuZAotCi0yMDExLTA1LTEyIDA5OjAzICBidmFzc2NoZQotCi0gICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLQotICAgQ0hBTkdFUzogc25tcGxpYjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiBzbm1wX2ZyZWVfc2Vzc2lvbigpLgotCi0yMDExLTA1LTEyIDA4OjEyICBidmFzc2NoZQotCi0gICAqIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmM6Ci0KLSAgIENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBOZXQtU05NUAotICAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkgaXBOZXRUb01lZGlhVGFibGUuCi0KLTIwMTEtMDUtMTIgMDg6MDggIGJ2YXNzY2hlCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOgotCi0gICBDSEFOR0VTOiBXaW4zMjogRml4ZWQgYSBtZW1vcnkgbGVhayBpbiB0aGUgTmV0LVNOTVAKLSAgIChub24td2luRXh0RExMKSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTUlCLUlJIGlmVGFibGUuCi0KLTIwMTEtMDUtMTIgMDc6MzMgIGJ2YXNzY2hlCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmM6Ci0KLSAgIENIQU5HRVM6IFdpbjMyOiBGaXhlZCBhIG1lbW9yeSBsZWFrIGluIHRoZSBOZXQtU05NUAotICAgKG5vbi13aW5FeHRETEwpIGltcGxlbWVudGF0aW9uIG9mIHRoZSBNSUItSUkgaXBBZGRyVGFibGUuCi0KLTIwMTEtMDUtMTIgMDY6NTQgIGJ2YXNzY2hlCi0KLSAgICogQ2hhbmdlTG9nOgotCi0gICBEb2N1bWVudGF0aW9uIC8gc291cmNlIGNvZGUgY29tbWVudCBzcGVsbGluZyBmaXg6IGV4aXRlbnQgLT4KLSAgIGV4aXN0ZW50LgotCi0yMDExLTA1LTEwIDE1OjAyICBidmFzc2NoZQotCi0gICAqIHNubXBsaWIvd2luc2VydmljZS5jOgotCi0gICBNaW5HVzogYXZvaWQgdGhhdCBnY2MgY29tcGxhaW5zIGFib3V0IHBhc2luZyBhIChjaGFyICopIGFyZ3VtZW50Ci0gICB3aGlsZSAodW5zaWduZWQgY2hhciAqKSBpcyBleHBlY3RlZC4KKyAgIGFkZGVkIGEgbWlzc2luZyAwIGluIHRoZSByZXZpc2lvbiBkYXRlCiAKIDIwMTEtMDUtMDkgMjA6NTIgIG5iYQogCkBAIC0zMDUsNiArMzAwOTcsOTQgQEAKIAogICAgVXNlIHN5bWJvbGljIG5hbWVkIGZvciBpZlR5cGUgdmFsdWVzCiAKKzIwMTEtMDUtMDkgMjA6NDMgIG5iYQorCisgICAqIG1pYnMvcmZjbWlicy5kaWZmOgorCisgICBJQU5BIGhhcyBmaXhlZCB0aGUgSUFOQS1JUFBNLU1FVFJJQ1MtUkVHSVNUUlktTUlCCisKKzIwMTEtMDUtMDkgMTU6MjQgIGhhcmRha2VyCisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBhZGRlZCBhIG5ldyBSRVZJU0lPTiBjbGF1c2UgdG8gbGlzdCB0aGUgY2hhbmdlcyBpbiB0aGUgdGhlIHJlY2VudAorICAgdXBkYXRlCisKKzIwMTEtMDUtMDkgMTQ6MTkgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgYWRkZWQgcGluZy90cmFjZXJvdXRlIG1pYnMgbm90ZQorCisyMDExLTA1LTA5IDE0OjE5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6CisKKyAgIHdlIGFjdHVhbGx5IHdhbnQgdG8gdXNlIHRoZSBiYXNlIE9JRCBhcyB0aGUgc3RhcnRpbmcgcG9pbnQsIG5vdAorICAgdGhlIHJlZyBPSUQuCisKKzIwMTEtMDUtMDkgMTQ6MTggIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYzoKKworICAgZml4ZWQgdGhlIHByb3h5IHN1cHBvcnQgdG8gZG8gYSBwcm9wZXIgT0lEIGxlc3MgdGhhbiBPSUQgY29tcGFyZS4KKyAgIFdlIGFjdHVhbGx5IGRvbid0IGNhcmUgYWJvdXQgdGhlIGxlbmd0aCBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdCwKKyAgIG9ubHkKKyAgIHRoYXQgaXQgd2FzIGJlZm9yZSB0aGUgcmVnaXN0ZXJlZCByZWJhc2UKKworMjAxMS0wNS0wOSAxNDoxOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOgorCisgICBDSEFOR0VTOiBwYXRjaCAzMTQwODMzOiBmcm9tIGpzYWZyYW5lazogZml4IHByb3h5IEdFVE5FWFQKKyAgIHJlcXVlc3RzCisgICBXaGVuIE9JRHMgcmVxdWVzdGVkIGFyZSBiZWxvdyB0aGUgcHJveHkgcmVxdWVzdCByZW1hcCwgd2UgbmVlZCB0bworICAgbm90CisgICBpbmNsdWRlIGFueSBPSURzIHRoYXQgbWlnaHQgYmUgaW4gdGhlIHNwYWNlIGJldHdlZW4gdGhlIG9yaWdpbmFsCisgICBPSUQKKyAgIGFuZCB0aGUgcmVtYXBwZWQgT0lELiBUaGlzIHBhdGNoIGZ1ZGdlcyB0aGUgcmVxdWVzdCBzbyB0aGF0IGl0CisgICBmaXhlcworICAgdGhlIHJlcXVlc3QgT0lEIHNvIGl0J3MganVzdCBiZWZvcmUgdGhlIHJlbWFwcGVkIHByb3h5IHJhbmdlLgorCisyMDExLTA1LTA5IDE0OjE4ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaCwgbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBORVdTOiBQQVRDSCAzMTY3MzI1OiBmcm9tIGtyaXN6dG9mb3JvOiBVQ0QtU05NUC9TeXN0ZW1TdGF0czogYWRkCisgICB2YXJpYWJsZXMKKyAgIHRvIHJlcG9ydCBjcHVzdGVhbCwgY3B1Z3Vlc3QsIGNwdWd1ZXN0bmljZQorCisyMDExLTA1LTA5IDE0OjE3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYzoKKworICAgQ0hBTkdFUzogcGF0Y2ggMzE4NDAyNjogZnJvbSBlaXZuYWVzOiBBdm9pZCBjb25zdGFudCByZWZyZXNoIG9mCisgICBpbnRlcmZhY2Ugc3RhdGlzdGljcworCisyMDExLTA1LTA5IDEwOjQ0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGFwcHMvc25tcGRlbHRhLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIHJlcG9ydGVkIGJ5IHRoZSBNU1ZDIGNvbXBpbGVyLgorCisyMDExLTA1LTA5IDEwOjM1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvZ2V0dGltZW9mZGF5LmM6CisKKyAgIFdpbjMyL01TVkM6IEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAxMS0wNS0wOSAxMDozMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEZpeGVkIGEgeWVhci0yMDM4IGJ1ZyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2YKKyAgIGlwUm91dGVUYWJsZS4KKwogMjAxMS0wNS0wOCAyMDowMSAgbmJhCiAKICAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIApAQCAtMzM0LDgzICszMDIxNCw5OSBAQAogCiAgICBSZW1vdmVkIGFuIHVudXNlZCBsYWJlbCBmcm9tIHBlcmwvU05NUC9TTk1QLnhzLgogCi0yMDExLTA1LTA2IDIxOjMyICBoYXJkYWtlcgorMjAxMS0wNS0wNyAxNDo0OCAgYnZhc3NjaGUKIAotICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCwgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmg6CisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oOgogCi0gICBORVdTOiBQQVRDSCAzMTk4NzgxOiBmcm9tIGZlbm5lcjogR2V0IGRpc21hbi9waW5nIGFuZAotICAgZGlzbWFuL3RyYWNlcm91dGUgdG8gYXQgbGVhc3QgY29tcGlsZQorICAgQ0hBTkdFUzogc25tcGQ6IERlY2xhcmUgdGhlIE9JRCBhcmd1bWVudCB0eXBlIG9mIE1JQiByZWdpc3RyYXRpb24KKyAgIGZ1bmN0aW9ucyBhcyAnY29uc3Qgb2lkIConIGluc3RlYWQgb2YgJ29pZCAqJyBzaW5jZSB0aGVzZQorICAgZnVuY3Rpb25zIGRvIG5vdCBtb2RpZnkgdGhlIE9JRC4KIAotMjAxMS0wNS0wNiAxNzo0NiAgZHRzMTIKKzIwMTEtMDUtMDcgMTQ6NDQgIGJ2YXNzY2hlCiAKLSAgICogQ0hBTkdFUzoKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFVzZSB0aGUgY29ycmVjdCBkYXRhIHR5cGUgZm9yIHRoZSAnY2FjaGUgZXhwaXJlZCcgdmFyaWFibGU6IGNoYXIKKyAgIGluc3RlYWQgb2YgaW50LgogCi0yMDExLTA1LTA2IDE3OjM3ICBkdHMxMgorMjAxMS0wNS0wNyAxNDo0MyAgYnZhc3NjaGUKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMjAxNTEuCiAKLTIwMTEtMDUtMDYgMTc6MzUgIGR0czEyCisyMDExLTA1LTA3IDEzOjE1ICBidmFzc2NoZQogCi0gICAqIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBXaW4zMjogaW1wcm92ZWQgc291cmNlIGNvZGUgY29uc2lzdGVuY3kgYnkgdXNpbmcgTFBDVFNUUiBpbnN0ZWFkCisgICBvZiBMUENTVFIuIE5vdGU6IHRoaXMgZG9lcyBub3QgbWVhbiB0aGF0IFVuaWNvZGUgYnVpbGRzIGFyZQorICAgc3VwcG9ydGVkLgogCi0yMDExLTA1LTA2IDE3OjIyICBkdHMxMgorMjAxMS0wNS0wNyAxMzoxNCAgbmJhCiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgQWRkIGZpbGUgZm9yZ290dGVuIGluIHIyMDM1MwogCi0yMDExLTA1LTA2IDE3OjE3ICBkdHMxMgorMjAxMS0wNS0wNiAyMzozMiAgaGFyZGFrZXIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDoKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0ggMzEyNTk2OiBmcm9tIGZhYmxlZDgwOiBsaXN0ZW4gZm9yIG5ldGxpbmsKKyAgIGNoYW5nZSBldmVudHMgZm9yIHRoZSBhcnAtcmVsYXRlZCB0YWJsZXMKKworMjAxMS0wNS0wNiAxODozNiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIG9wdGlvbmFsIHN1cHBvcnQgZm9yIGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uCisgICBvZiBob3N0bmFtZXMKKyAgIAorICAgLSBvcHRpb25hbCBhdCBjb25maWd1cmUgdGltZTogLS13aXRoLWxvY2FsLWRuc3NlYy12YWxpZGF0aW9uCisgICAtIHJlcXVpcmVzIEROU1NFQy1Ub29sIHZhbGlkYXRpb24gbGlicmFyaWVzCisgICAtIGluaXRpYWwgc3VwcG9ydCwgZm9yIHN5c3RlbXMgd2l0aCBnZXRhZGRyaW5mby4gc3VwcG9ydCBmb3IKKyAgIGFkZGl0aW9uYWwKKyAgIHJlc29sdmVyIGludGVyZmFjZXMgY29taW5nIHNvb24uCisgICAtIGFsc28gVE9ETzogZmxhZyBmb3IgaWdub3JpbmcgdmFsaWRhdG9pbiBlcnJvcnMgKGxvZyAmIGNvbnRpbnVlKQorCisyMDExLTA1LTA2IDE4OjM2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaDoKKworICAgbW92ZSB1bnVzZWQgKGFuZCB0b28gZ2VuZXJpYykgdG9rZW4gd2l0aGluIFVDRF9DT01QQVRJQkxFIGlmZGVmCisgICAKKyAgIC0gTUFYTEFCRUwgY29uZmxpY3RzIHdpdGggPGFycGEvbmFtZXNlci5oPgorICAgLSBhZGRlZCBORVRTTk1QX01BWExBQkVMCisKKzIwMTEtMDUtMDYgMTg6MzYgIHJzdG9yeQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgdXBkYXRlIGNvbmZpZ3VyZS9NYWtlZmlsZXMgZm9yIEROU1NFQyBsb2NhbCB2YWxpZGF0aW9uIG9wdGlvbgorCisyMDExLTA1LTA2IDE0OjM4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6CisKKyAgIHJlbW92ZWQgdGhlIGFjY2lkZW50YWwgYnJva2VuIGZlYXR1cmUgcmVxdWlyZSBsaW5lIHRoYXQgZ290IGhhbGYKKyAgIGluc2VydGVkCiAKIDIwMTEtMDUtMDYgMTM6NTAgIGR0czEyCiAKQEAgLTQyMCwxNSArMzAzMTYsNDkyIEBACiAgICAtIGJyb2tlbiByZW1vdmFsIG9mIE1pY3Jvc29mdCBETEwKICAgIC0gcmVtb3ZlIGFzc29ydGVkIG5ldyBNSUJzIGFuZCBoZWFkZXIgZmlsZXMKIAorMjAxMS0wNS0wNiAxMjo1OCAgZHRzMTIKKworICAgKiB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbDoKKworICAgU3VwcG9ydCBUYXIvR1ppcCBjb21tYW5kIHBhdGhzIGNvbnRhaW5pbmcgc3BhY2VzCisKKzIwMTEtMDUtMDYgMTI6NTcgIGR0czEyCisKKyAgICogd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGw6CisKKyAgIFJlcG9ydCBHWmlwIGNvbW1hbmQgY29ycmVjdGx5CisKKzIwMTEtMDUtMDUgMjE6NDggIG5iYQorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmM6CisKKyAgIEZpeCBmb3IgRHJhZ29uRmx5IEJTRCAoZG9lcyBub3QgZGVmaW5lIElQX1NFTkRTUkNBRERSKQorCisyMDExLTA1LTA1IDIwOjI5ICBuYmEKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg6CisKKyAgIEZpeCBzcGVsbGluZyBvZiBTT19SRUNWRFNUQUREUgorCisyMDExLTA1LTA1IDE4OjU0ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgbWFuL3NubXAuY29uZi41LmRlZiwgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgTkVXUzogYXBwczogYWRkIHNubXAuY29uZiB0b2tlbnMgZm9yIHRpbWVvdXRzIGFuZCByZXRyaWVzCisKIDIwMTEtMDUtMDUgMDY6MDcgIGJ2YXNzY2hlCiAKLSAgICogc25tcGxpYi90b29scy5jLCB0ZXN0aW5nL1RFU1RDT05GLnNoOgorICAgKiBzbm1wbGliL3Rvb2xzLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgogCiAgICBDSEFOR0VTOiBNaW5HVzogTWFkZSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGluZGVwZW5kZW50IG9mIHRoZQogICAgTmV0LVNOTVAgdmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIFdpbmRvd3MgcmVnaXN0cnkuIFNvbWUgdGVzdHMKICAgIHRoYXQgZmFpbGVkIHByZXZpb3VzbHkgYWZ0ZXIgdGhlIE5ldC1TTk1QIGJpbmFyaWVzIChNU1ZDIGJ1aWxkKQogICAgaGFkIGJlZW4gaW5zdGFsbGVkIGRvIG5vdyBwYXNzLgogCisyMDExLTA1LTA1IDA1OjU3ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgd2luMzIvd2luMzIuc2xuLCAgIAorICAgICAgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICBSZW1vdmVkIFZpc3VhbCBTdHVkaW8gMjAwNSBzb2x1dGlvbiBhbmQgcHJvamVjdCBmaWxlcyBhZ2FpbiBzaW5jZQorICAgVmlzdWFsIFN0dWRpbyAyMDEwIHJlZnVzZXMgdG8gbG9hZCB0aGVzZS4KKworMjAxMS0wNS0wNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgY2xlYW4gdGhlIHBlcmwvcHl0aG9uIGZlYXR1cmUgbGVmdG92ZXJzCisKKzIwMTEtMDUtMDQgMjM6NDIgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGZpeCBtaWIgbW9kdWxlIGludm9jYXRpb24KKworMjAxMS0wNS0wNCAyMDo1NyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIGZpeCBpZmRlZiB0eXBvCisKKzIwMTEtMDUtMDQgMjA6NTYgIGhhcmRha2VyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIGZpeCBwZXJsL3B5dGhvbiBmZWF0dXJlIGRlcGVuZGVuY2llcworCisyMDExLTA1LTA0IDIwOjU2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzoKKworICAgcmV2ZXJ0ZWQgYXV0b19ubGlzdCBtYWNybyB1c2FnZTsgdGhlIGZ1bmN0aW9uIGlzIHVzZWQgaW4gaGVhZGVycworCisyMDExLTA1LTA0IDIwOjU2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBBZGQgYSAtVCBvcHRpb24gdG8gcnVuICdtYWtlIHRlc3QnCisKKzIwMTEtMDUtMDQgMjA6NTYgIGhhcmRha2VyCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjoKKworICAgZml4IHRoZSBlbmNvZGVfa2V5Y2hhbmdlIC5mdCBmaWxlbmFtZQorCisyMDExLTA1LTA0IDE2OjIwICBoYXJkYWtlcgorCisgICAqIHBlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIGZpeCB0aGUgZmVhdHVyZXMgcmVxdWlyZWQgYnkgdGhlIFRyYXBSZWNlaXZlciBtb2R1bGUKKworMjAxMS0wNS0wNCAxNjoyMCAgaGFyZGFrZXIKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQWRkIHRoZSBUcmFwUmVjZWl2ZXIgdG8gdGhlIGxpc3Qgb2YgcGVybCBtb2R1bGVzCisKKzIwMTEtMDUtMDQgMTQ6NDIgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIHVzZSB0aGUgbmV3ZXIgTmV0LVNOTVAgQVBJcywgcmF0aGVyIHRoYW4gdGhlIG9sZGVyIFVDRCBvbmVzCisKKzIwMTEtMDUtMDQgMTQ6NDEgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIHJlbW92ZSBTRVQgY29kZSB3aGVuIHVuZGVyIC0tcmVhZC1vbmx5IG1vZGUKKworMjAxMS0wNS0wNCAxNDo0MSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmM6CisKKyAgIHJlcXVpcmUgY2hlY2tfdmJfdWludAorCisyMDExLTA1LTA0IDE0OjQxICBoYXJkYWtlcgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYywKKyAgICAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYywgICAKKyAgICAgIHB5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgbGFzdCBvZiB0aGUgcGVybC11c2VkIGZlYXR1cmUgZnVuY3Rpb25zCisKKzIwMTEtMDUtMDQgMTQ6NDAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsICAgCisgICAgICBsb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmM6CisKKyAgIHN0YXJ0ZWQgdGhlIGZpbmFsIHNldCBvZiBmdW5jdGlvbiByZW1vdmFscyBmb3IgZmVhdHVyZXMgcmVxdWlyZWQKKyAgIGJ5IHBlcmwvcHl0aG9uCisKKzIwMTEtMDUtMDQgMTQ6MzkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaToKKworICAgYWRkZWQgdGhlIG5ldC1zbm1wLWZlYXR1cmVzLmggaGVhZGVyCisKKzIwMTEtMDUtMDQgMTQ6MzkgIGhhcmRha2VyCisKKyAgICogIHBlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgsICAgCisgICAgICBwZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oOgorCisgICBBZGRlZCBwZXJsIGZlYXR1cmUgcmVxdWlyZW1lbnRzCisKKzIwMTEtMDUtMDQgMTQ6MzkgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sICAgCisgICAgICBwZXJsL0FTTi9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvT0lEL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oLCAgIAorICAgICAgcGVybC9hZ2VudC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaDoKKworICAgaG9wZWZ1bGx5IHdvcmtpbmcgcnVsZXMgdG8gYXBwbHkgZmVhdHVyZSByZXF1aXJlbWVudHMgdG8gcGVybCBhbmQKKyAgIHB5dGhvbgorCisyMDExLTA1LTA0IDE0OjM4ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBtb3JlIGNoYW5nZXMgdG8gcmVtb3ZlIHVubmVlZGVkIGZ1bmN0aW9ucyBwcmltYXJpbHkgd2hlbiB3cml0ZQorICAgbW9kZSBpcyB0dXJuZWQgb2ZmCisKKzIwMTEtMDUtMDQgMTQ6MzcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgY2hhbmdlIHRoZSB3YW50IGludm9jYXRpb24gdG8gb25seSBkZWZhdWx0IHRvIGV4Y2x1ZGUgZXh0ZXJuYWwKKyAgIGhvb2tzCisKKzIwMTEtMDUtMDQgMTQ6MzcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOgorCisgICBzZWFyY2ggdGhyb3VnaCAueHMgZmlsZXMgZm9yIGZ1bmN0aW9uIGludm9jYXRpb25zCisKKzIwMTEtMDUtMDQgMTQ6MzcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYXV0b19ubGlzdC5jOgorCisgICBmb3Jnb3QgYSBzZW1pY29sb24KKworMjAxMS0wNS0wNCAxNDozNyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmM6CisKKyAgIGlxdWVyeSBwZHUgc2Vzc2lvbnMgYXJlIG9ubHkgbmVlZGVkIGluIHdyaXRlIG1vZGUuCisKKzIwMTEtMDUtMDQgMTQ6MzYgIGhhcmRha2VyCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbjoKKworICAgZml4IGZlYXR1cmUgZGV0ZWN0aW9uIG9mIHNvbWV0aW1lcy1idWlsdCBhcHBsaWNhdGlvbnMKKworMjAxMS0wNS0wNCAxNDozNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6CisKKyAgIHVzZSB0aGUgZmVhdHVyZV91bnVzZWQgbWFjcm8gZm9yIG1ha2luZyBhbiBlbXB0eSBmaWxlIGZvcgorICAgY29uc2lzdGVuY3kKKworMjAxMS0wNS0wNCAxNDozNiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgYXBwcy9zbm1wdGxzLmMsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIEFub3RoZXIgc3dlZXAgZm9yIHVudXNlZCBmdW5jdGlvbnMgd2hlbiByZWFkX29ubHkgbW9kZSBpcyB0dXJuZWQKKyAgIG9uCisKKzIwMTEtMDUtMDQgMTQ6MzQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jOgorCisgICBtYXJrIGEgc2xldyBvZiBmdW5jdGlvbnMgYXMgZmVhdHVyZXMgdGhhdCBhcmUgb25seSBuZWVkZWQgd2l0aAorICAgd3JpdGVfc3VwcG9ydAorCisyMDExLTA1LTA0IDE0OjMyICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZToKKworICAgcnVuIGdyZXAgd2l0aCAtbgorCisyMDExLTA1LTA0IDE0OjMyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZlYXR1cml6ZSBuZXRzbm1wX3NvY2thZGRyX3NpemUKKworMjAxMS0wNS0wNCAxNDozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIHJlbW92ZSBhIGZlYXR1cmVfcmVxdWlyZSBub3QgYWN0dWFsbHkgbmVlZGVkLgorCisyMDExLTA1LTA0IDE0OjMxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIG1hcmsgU1VCQ09OVEFJTkVSX0ZJTkQgYXMgYSBmZWF0dXJlCisKKzIwMTEtMDUtMDQgMTQ6MzEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXB0c20uYzoKKworICAgdGhlIHJvdyBjcmVhdGlvbiBBUEkgaXMgb25seSB1c2VkIGluIHRoZSBUU00gaW1wbGVtZW50YXRpb24KKworMjAxMS0wNS0wNCAxNDozMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB0aGUgbmV3ZXIgY29udGV4dCBlbmdpbmVJRCBwcm9iaW5nIGlzIG9ubHkgbmVlZGVkIGlmZiBUU00gaXMgaW4KKyAgIHVzZQorCisyMDExLTA1LTA0IDE0OjMwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIGZpeCBhbiBpZmRlZiB0eXBvCisKKzIwMTEtMDUtMDQgMTQ6MzAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgbW92ZWQgZmV0YXVyZSBjaGlsZF9vZiBzdGF0ZW1lbnRzIHRvIHRoZSB0b3Agb2YgdGhlIGZpbGUKKworMjAxMS0wNS0wNCAxNDozMCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9kaXJfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIG1hcmtlZCBhIGNvdXBsZSBvZiByYXJlbHkgdXNlZCBjb250YWluZXIgZnVuY3Rpb25zLgorCisyMDExLTA1LTA0IDE0OjI5ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIHNwbGl0IG91dCB0aGUgcHJlZml4X2luZm8gZmVhdHVyZSBpbnRvIHN1Yi1mZWF0dXJlcworCisyMDExLTA1LTA0IDE0OjI5ICBoYXJkYWtlcgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBtYXJrIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMgYXMgdW5uZWVkZWQKKworMjAxMS0wNS0wNCAxNDoyOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jOgorCisgICBmaXggYSBjaGlsZF9vZiBzdGF0ZW1lbnQgd2l0aCBhIGNvcHkvcGFzdGUgZXJyb3IKKworMjAxMS0wNS0wNCAxNDoyOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIHRoZSBjb250YWluZXIgcm93LXJlbW92ZSBpcyBvbmx5IG5lZWRlZCBpZiB0aGUgdGRhdGEgcmVtb3ZlX3JvdworICAgaXMgbmVlZGVkCisKKzIwMTEtMDUtMDQgMTQ6MjggIGhhcmRha2VyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBmZWF0dXJlIG1hcmtpbmcgb2YgdW51c2VkIHRkYXRhIGZ1bmN0aW9ucworICAgdGFibGVfdGRhdGFfZGVsZXRlX3RhYmxlCisgICB0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlCisgICB0YWJsZV90ZGF0YV9yZW1vdmVfcm93CisKKzIwMTEtMDUtMDQgMTQ6MjcgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jOgorCisgICByZW1vdmFsIG9mIHNvbWUgcmFyZWx5IHVzZWQgZnVuY3Rpb25zCisgICB0YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93CisgICB0YWJsZV9kYXRhc2V0X3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlCisKKzIwMTEtMDUtMDQgMTQ6MjcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIEFkZGVkIGEgZGVmaW5pdGlvbiB0byBpbmNvcnBvcmF0ZSByZWFkX29ubHkvbm90aWZ5X29ubHkKKworMjAxMS0wNS0wNCAxNDoyNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYzoKKworICAgYWRkZWQgYSBtaXNzaW5nIGZlYXR1cmUgZGVmaW5pdGlvbiBsaW5lCisKKzIwMTEtMDUtMDQgMTQ6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvTWFrZWZpbGUuaW46CisKKyAgIGFkZGVkIGJhY2sgaW4gbWlzc2luZyBtaWJncm91cCBmZWF0dXJlIGRlZmluaXRpb24gbGlzdAorCisyMDExLTA1LTA0IDE0OjI2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBJbmNsdWRlIHRoZSBvcmlnaW5hbCBiYXNlIGZsYWdzIHRvIGVuc3VyZSAtLXdpdGgtZGVmYXVsdHMgZ2V0cworICAgcGlja2VkIHVwCisKKzIwMTEtMDUtMDQgMTQ6MjYgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGZpeCB1c2FnZQorCisyMDExLTA1LTA0IDE0OjI2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBBZGRlZCBhIC1iIGZsYWcgZm9yIGJhc2UgYXJndW1lbnRzIHRvIHN0YXJ0IGZyb20KKworMjAxMS0wNS0wNCAxNDoyNSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgZGVmYXVsdCB0byBhIGxpbmVhciBzZWFjaCBvZiBzaXplIHRlc3RzLCByYXRoZXIgdGhhbiBleHBvbmVudGlhbAorCisyMDExLTA1LTAzIDE4OjU1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEd1YXJkIG5ldHNubXBfdWRwX3JlY3Zmcm9tKCkgZXRjLiBkZWNsYXJhdGlvbnMKKyAgIGNvbnNpc3RlbnRseS4KKyAgIENIQU5HRVM6IFdpbjMyOiBCdWlsZHMgd2l0aCBWaXN1YWwgU3R1ZGlvIDIwMTAuCisKIDIwMTEtMDUtMDMgMTU6MjkgIGJ2YXNzY2hlCiAKICAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6CkBAIC00NTEsNiArMzA4MjQsMjQ4IEBACiAgICBTcGVsbGluZyBhbmQgZ3JhbW1hciBmaXhlcyBmb3IgdGhlIHNvdXJjZSBjb2RlIGNvbW1lbnRzIGluCiAgICBzbm1wbGliL3dpbnNlcnZpY2UuYy4KIAorMjAxMS0wNC0yOSAwMDoyMyAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBhZGRlZCBub3RlIGFib3V0IHRoZSBuZXcgdGltaW5nIGZ1bmN0aW9uCisKKzIwMTEtMDQtMjkgMDA6MTQgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIFVwZGF0ZSB0aGUgbWFudWFsIHBhZ2UgdG8gcmVmbGVjdCB0aGUgbmV3IHRpbWluZyBvcHRpb25zCisKKzIwMTEtMDQtMjkgMDA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBiZXR0ZXIgZG9jdW1lbnRhdGlvbgorCisyMDExLTA0LTI5IDAwOjE0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jOgorCisgICB1c2UgdGhlIG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcygpIGZvciBwYXJzaW5nCisgICBmcmVxdWVuY2llcy90aW1lCisKKzIwMTEtMDQtMjkgMDA6MTMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYzoKKworICAgZml4IHBkdSBidWlsZGluZyB0ZXN0cyB1bmRlciB2YXJpb3VzIGRpc2FibGVkIG1vZGVzCisKKzIwMTEtMDQtMjkgMDA6MTMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYzoKKworICAgZG9uJ3QgdHJ5IHRvIGJ1aWxkIHRoZSBHRVQgcGR1IHVuZGVyIG5vdGlmeV9vbmx5CisKKzIwMTEtMDQtMjkgMDA6MTIgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKKworICAgZml4IGEgYnVnIHdpdGggbm8tc3VmZml4IHN0cmluZ3MgYW5kIHVzZSBhIGNvbnN0IGlucHV0IHN0cmluZworCisyMDExLTA0LTI5IDAwOjEyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjc19jbGliLmM6CisKKyAgIEEgbmV3IHVuaXQgdGVzdCBmb3IgdGhlIHRpbWUgY29udmVyc2lvbiByb3V0aW5lCisKKzIwMTEtMDQtMjkgMDA6MTIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgdXNlIHRoZSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoKSBmdW5jdGlvbiBmb3IgY29tcHV0aW5nCisgICBpbnRlcnZhbCBwZXJpb2RzCisKKzIwMTEtMDQtMjkgMDA6MTEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKKworICAgQWRkZWQgYSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoKSBmdW5jdGlvbnMgdG8gY29udmVydCwgZS5nLiwKKyAgIDFoIHRvIDM2MDAKKworMjAxMS0wNC0yOSAwMDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlbW92ZSBjb2RlIHRvIGJ1aWxkL3BhcnNlIEdFVC9ldGMgcmVxdWVzdHMgd2hlbiBOT1RJRllfT05MWSBpcworICAgdHVybmVkIG9uLgorCisyMDExLTA0LTI3IDIxOjMzICBoYXJkYWtlcgorCisgICAqIE5FV1M6CisKKyAgIHVwZGF0ZSB0aGUgTkVXUyB0byByZWZsZWN0IHRoZSBuZXcgLS1lbmFibGUtcmVhZC1vbmx5IGFuZAorICAgLS1lbmFibGUtbm90aWZ5LW9ubHkKKworMjAxMS0wNC0yNyAyMTozMyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgbWlub3IgaW1wcm92ZW1lbnRzIGZvciByb25seSB2cyByd3JpdGUgaGFuZGxpbmcKKworMjAxMS0wNC0yNyAyMTozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jOgorCisgICBzdGlsbCBlbmFibGUgUk9OTFkgd2hlbiBSV1JJVEUgaXNuJ3QgcG9zc2libGUKKworMjAxMS0wNC0yNyAyMTozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgZml4IEdFVCBzdXBwb3J0IHdoZW4gbm9fd3JpdGUgaXMgZW5hYmxlZAorCisyMDExLTA0LTI3IDIxOjMyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIG1hcmsgYSBmdXR1cmUgbW9kaWZpY2F0aW9uIG5lZWQgaW4gYSBjb21tZW50CisKKzIwMTEtMDQtMjcgMjE6MzEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy9vbGRfYXBpLmM6CisKKyAgIGZpeCBoYW5kbGluZyBvZiBub193cml0ZSBzdXBwb3J0CisKKzIwMTEtMDQtMjcgMjE6MzEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF9hZ2VudC5jLCBhZ2VudC9zbm1wZC5jOgorCisgICBkb24ndCBvcGVuIGFueSBsaXN0ZW5pbmcgdHJhbnNwb3J0cyB3aGVuIG5vdGlmeS1vbmx5IGlzIHNwZWNpZmllZAorCisyMDExLTA0LTI3IDIxOjMxICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIHNldCB0aGUgbm8tbGlzdGVuIGFuZCByZWFkLW9ubHkgZmxhZ3Mgd2hlbiAtLWVuYWJsZS1ub3RpZnktb25seQorICAgaXMgc2V0CisKKzIwMTEtMDQtMjcgMjE6MzAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgcmFuIGF1dG9oZWFkZXIKKworMjAxMS0wNC0yNyAyMTozMCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIGltcGxlbWVudCB0aGUgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCBpbiB0aGVzZSB0cmFuc3BvcnRzCisKKzIwMTEtMDQtMjcgMjE6MzAgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlOgorCisgICBydW4gYXV0b2NvbmYKKworMjAxMS0wNC0yNyAyMToyOSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgbW92ZSB0aGUgcmVhZC1vbmx5IGZsYWcgZGVmaW5pdGlvbiBiZWxvdyB0aGUgbm90aWZ5LW9ubHksIHNpbmNlCisgICBub3RpZnktb25seSBuZWVkcyB0byBpbXBseSByZWFkLW9ubHkKKworMjAxMS0wNC0yNyAyMToyOSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBEZWZpbmVkIGEgbmV3IC0tZW5hYmxlLW5vdGlmeS1vbmx5IGZsYWcgZm9yIGJ1aWxkaW5nIGEgdG9vbHNldAorICAgdGhhdCBvbmx5IGFsbG93cyBmb3Igbm90aWZpY2F0aW9ucyB3aXRoIG5vIHJlYWQvd3JpdGUgc3VwcG9ydAorCisyMDExLTA0LTI3IDIxOjI5ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIERlZmluZWQgYSBuZXcgLS1uby1saXN0ZW4gZmxhZyB0byByZW1vdmUgbGlzdGVuaW5nIHN1cHBvcnQKKworMjAxMS0wNC0yNyAyMToyOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaDoKKworICAgdGhlIGRpc21hbiBzY2hlZHVsZSBtaWIgaXMgb25seSB1c2VmdWwgd2hlbiBTRVRzIGFyZSB0dXJuZWQgb24KKworMjAxMS0wNC0yNyAyMToyOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4uaDoKKworICAgdGhlIGRpc21hbiBzY2hlZHVsZSBtaWIgaXMgb25seSB1c2VmdWwgd2hlbiBTRVRzIGFyZSB0dXJuZWQgb24KKworMjAxMS0wNC0yNyAyMToyOCAgaGFyZGFrZXIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jOgorCisgICBmaW5pc2hlZCBub193cml0ZSBzdXBwb3J0IGZvciBjb21tb24gaW5jbHVkZWQgdGFibGVzCisKKzIwMTEtMDQtMjcgMjE6MjcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIEFkZCBiYWNrIGluICduZXRzbm1wX3NldF9yb3dfY29sdW1uJyB3aGVuIG5vX3dyaXRlIHN1cHBvcnQgaXMKKyAgIGVuYWJsZWQKKyAgIFRoaXMgZnVuY3Rpb24gaXMgYSBnZW5lcmljIGRhdGEgbWFuaXB1bGF0aW9uIGZ1bmN0aW9uLCBub3QgU0VUCisgICBzcGVjaWZpYworCisyMDExLTA0LTI3IDIxOjI3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBkb24ndCB1c2UgbWFya19yb3dfY29sdW1uX3dyaXRhYmxlIHdoZW4gcmVhZC1vbmx5IHN1cHBvcnQgaXMKKyAgIGVuYWJsZWQKKworMjAxMS0wNC0yNyAyMToyNiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBmaXggbm9fd3JpdGUgc3VwcG9ydAorCisyMDExLTA0LTI3IDIxOjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgorCisgICBmaXggbm9fd3JpdGUgc3VwcG9ydAorCiAyMDExLTA0LTI3IDIxOjE2ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYzoKQEAgLTQ1OCw2ICszMTA3Myw0NjMgQEAKICAgIERvbid0IGZyZWUgdGhlIGlmWFRhYmxlIHJvdyBmb3VuZCBvbiBsb2FkIGZhaWx1cmUgYXMgd2UgZG9uJ3Qgb3duCiAgICBpdAogCisyMDExLTA0LTI2IDE4OjE2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL2dpdHRvb2xzLCBsb2NhbC9naXR0b29scy9zaGVsbC1mdW5jdGlvbnM6CisKKyAgIGdpdCBiYXNoLXNoZWxsIGZ1bmN0aW9ucyB0byBlbmFibGUgYnJhbmNoIHN3aXRjaGluZyBhbmQgZXh0ZXJuYWwKKyAgIGJ1aWxkaW5nCisgICBUaGVzZSBsb2NhbCBzaGVsbCBmdW5jdGlvbnMgKHNubXBjb25maWd1cmUgYW5kIHNubXBtYWtlKSBsZXQgeW91CisgICBjb25maWd1cmUgYW5kIGJ1aWxkIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBpbiBleHRlcm5hbAorICAgZGlyZWN0b3JpZXMKKyAgIHRoYXQgYXJlIGF1dG8tY2FsY3VsYXRlZCBiYXNlZCBvbiB0aGUgZXhpc3RpbmcgYnJhbmNoIG5hbWUgKHdpdGgKKyAgIGFuCisgICBvcHRpb25hbCBzdWZmaXgpLiBUaGlzIGxldHMgeW91IHJ1biAnc25tcG1ha2UnIGZyb20gd2l0aGluIHRoZQorICAgc291cmNlCisgICBkaXJlY3RvcnkgYW5kIGhhdmUgaXQgYWN0dWFsbHkgZXh0ZXJuYWxseSBrZWVwIHRyYWNrIG9mIG1vZGlmaWVkCisgICBmaWxlcywgZXRjLCBzbyBidWlsZGluZyBpbiBtdWx0aXBsZSBicmFuY2hlcyBjYW4gYmUgZG9uZSBmcm9tIGEKKyAgIHNpbmdsZQorICAgZ2l0IGNoZWNrb3V0LgorCisyMDExLTA0LTI1IDIwOjU3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGNsZWFuIHVwIHRoZSBpdGVyYXRvcnMKKworMjAxMS0wNC0yNSAyMDo1NyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBmcmVlIHZhcmJpbmRzIGFmdGVyIHNlbmRpbmcKKworMjAxMS0wNC0yNSAxODo0OCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgQ29tbWVudGVkIG91dCBhbiB1bnVzZWQgZnVuY3Rpb24gYmVjYXVzZSB0aGUgY29tcGlsZXIgY29tcGxhaW5lZAorICAgYWJvdXQgaXQuCisKKzIwMTEtMDQtMjUgMTg6NDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIEZpeGVkIHR3byBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMS0wNC0yMyAxNDozMSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYzoKKworICAgUmVtb3ZlIHVubmVjZXNzYXJ5IG51bGwgY2hlY2sKKworMjAxMS0wNC0yMyAxNDowNSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jOgorCisgICBNb3ZlIHBvaW50ZXIgZGVyZWZlcmVuY2UgdG8gYWZ0ZXIgdGhlIGNoZWNrIGZvciBzdWNjZXNzZnVsCisgICBhbGxvY2F0aW9uIG9mIHRoZSBwb2ludGVyCisKKzIwMTEtMDQtMjMgMDg6MjAgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlCisKKzIwMTEtMDQtMjMgMDg6MTYgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZQorCisyMDExLTA0LTIzIDA4OjA2ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZQorCisyMDExLTA0LTIzIDA3OjU1ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZQorCisyMDExLTA0LTIyIDE5OjM1ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlCisKKzIwMTEtMDQtMjIgMTk6MzAgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlCisKKzIwMTEtMDQtMjIgMTc6MjkgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIG1lbnRpb24gd2hpY2ggbW9kdWxlIGlzIHJlcXVpcmVkIHdoZW4gYnVpbGRpbmcgdG8gZ2V0IHRoZSBkZWxpdmVyCisgICBzdXBwb3J0CisKKzIwMTEtMDQtMjIgMTY6MzMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZGVsZXRlZCBhbiB1bm5lZWRlZCBkZWJ1Z2dpbmcgc3RhdGVtZW50CisKKzIwMTEtMDQtMjIgMTY6MzMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgcHJvcGVybHkgdXBkYXRlIHRoZSBtYXggY291bnQgaW4gdGhlIG91dGdvaW5nIG5vdGlmaWNhdGlvbnMKKworMjAxMS0wNC0yMiAxNjozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBiZXR0ZXIgcGFja2V0IGVzdGltYXRpb24gdG8gZW5zdXJlIHdlIGRvbid0IG92ZXJydW4uCisKKzIwMTEtMDQtMjIgMTY6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgZXN0aW1hdGUgdGhlIHBhY2tldCBzaXplIGFuZCBicmVhayB0aGUgbm90aWZpY2F0aW9uIHVwIGJhc2VkIG9uCisgICBpdAorCisyMDExLTA0LTIyIDE2OjMxICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIHRyYW5zZm9ybSB0aGUgbm90aWZpY2F0aW9uIHNlbmRpbmcgaW50byBhIGxhcmdlciBsb29wIGZvciBsYXRlcgorICAgbXVsdGktbm90aWZzCisKKzIwMTEtMDQtMjIgMTY6MzEgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBmZWF0dXJlIG1hcmtpbmcvc2VsZWN0aW9uCisKKzIwMTEtMDQtMjIgMTY6MzEgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgbWVudGlvbiB0aGUgbmV3IGRlbGl2ZXJ5IGJ5IG5vdGlmaWNhdGlvbnMKKworMjAxMS0wNC0yMiAxNjozMSAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBkb2N1bWVudCB0aGUgbWluaW1hbGlzdCBzdXBwb3J0CisKKzIwMTEtMDQtMjIgMTY6MzAgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSBuZXcgZGVsaXZlckJ5Tm90aWZ5IGNvbmZpZyB0b2tlbnMKKworMjAxMS0wNC0yMiAxNjozMCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBhbGxvdyBydW4gdGltZSBtb2RpZmljYXRpb25zIG9mIHRoZSBPSURzIHRvIHVzZQorCisyMDExLTA0LTIyIDE2OjMwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgYWRkIGNvbmZpZyBmbGFncyB0byBub3QgaW5jbHVkZSB0aGUgcGVyaW9kIGNvbmZpZyBhbmQgbXNnIGNvdW50CisgICB2YWx1ZXMKKworMjAxMS0wNC0yMiAxNjoyOSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBpbmNsdWRlIHRoZSBwZXJpb2RpYyBjb3VudCwgdGhlIG1lc3NhZ2UgbnVtYmVyIGFuZCB0aGUgbWF4CisgICBtZXNzYWdlIG51bWJlcgorCisyMDExLTA0LTIyIDE2OjI5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGRlbGV0ZWQgZGVidWdnaW5nIGNvbW1lbnQKKworMjAxMS0wNC0yMiAxNjoyOSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIG1pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQ6CisKKyAgIE1vdmUgdGhlIG5vdGlmaWNhdGlvbiBkZWZpbml0aW9uIHRvIHdpdGhpbiB0aGUgc3ViLW1pYgorCisyMDExLTA0LTIyIDE2OjI4ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGRlbGV0ZSBhbiB1bnVzZWQgdmFyaWFibGUKKworMjAxMS0wNC0yMiAxNjoyOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oOgorCisgICBsb2FkIHRoZSBNSUIgaW50byB0aGUgZGVmYXVsdCBzZXQKKworMjAxMS0wNC0yMiAxNjoyOCAgaGFyZGFrZXIKKworICAgKiBtaWJzL05FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIudHh0OgorCisgICBBIG5ldyBtaWIgdG8gaG9sZCB0aGUgcGVyaW9kaWMgbm90aWZ5IG9iamVjdHMKKworMjAxMS0wNC0yMiAxNjoyOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jOgorCisgICBmaWxsIG91dCB0aGUgY29uZmlnIGZyZWUgcm91dGluZQorCisyMDExLTA0LTIyIDE2OjI3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIHByb3Blcmx5IG1vbml0b3IgdGhlIHdob2xlIGNvbnRhaW5lcgorCisyMDExLTA0LTIyIDE2OjI3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaDoKKworICAgcGFyc2UgdGhlIGNvbmYgZmlsZXMgYW5kIGNyZWF0ZSBhbmQgaW5zZXJ0IG9iamVjdHMgaW50byB0aGUKKyAgIGNvbnRhaW5lcgorCisyMDExLTA0LTIyIDE2OjI3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIGRlZmluZWQgYSBjb250YWluZXIgdG8gc3RvcmUgYSBsaXN0IG9mIGRlbGl2ZXIgb2JqZWN0cyBpbgorCisyMDExLTA0LTIyIDE2OjI3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIGFkZGVkIGEgbmV4dF9ydW4gdGltZXN0YW1wCisKKzIwMTEtMDQtMjIgMTY6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgYWN0dWFsbHkgc2VuZCBhIG5vdGlmaWNhdGlvbiB3aXRoIHRoZSByZXN1bHRzCisKKzIwMTEtMDQtMjIgMTY6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgbWFrZSB0aGUgd2FsayBvbiB0aGUgdGVzdCBvYmplY3QgZnVuY3Rpb24uCisKKzIwMTEtMDQtMjIgMTY6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYzoKKworICAgY3JlYXRlIGEgbWF4IHBhY2tldCBzaXplIGNvbmZpZyB0b2tlbiBhbmQgcGFyc2UgaXQKKworMjAxMS0wNC0yMiAxNjoyNSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIG1pbmltYWwgc3RhcnRpbmcgdGVzdCBvYmplY3QKKworMjAxMS0wNC0yMiAxNjoyNSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIGFkZGVkIGEgZnVuY3Rpb24gdG8gY2FsY3VsYXRlIHRoZSB0aW1lIHVudGlsIHRoZSBuZXh0IHJ1bgorCisyMDExLTA0LTIyIDE2OjI1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmM6CisKKyAgIHJlbW92ZSBsZWZ0IGluIHRlbXBsYXRlIGxpbmUKKworMjAxMS0wNC0yMiAxNjoyNSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIHVzZSBhbiBhbGFybSBjYWxsYmFjayBwcm90b3R5cGUgZm9yIGV4ZWN1dGUKKworMjAxMS0wNC0yMiAxNjoyNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVsaXZlciwgYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5Lmg6CisKKyAgIGJlZ2lubmluZyB0ZW1wbGF0ZSBjb2RlIGZvciBkZWxpdmVyeSBvZiBkYXRhIGJ5IG5vdGlmaWNhdGlvbnMKKworMjAxMS0wNC0yMiAwOToxMyAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIFJlZHVjZSB2YXJpYWJsZSBzY29wZQorCisyMDExLTA0LTIyIDA5OjA3ICBtYWdmcgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgUmVkdWNlIHZhcmlhYmxlIHNjb3BlcworCisyMDExLTA0LTIyIDA5OjAzICBtYWdmcgorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZQorCisyMDExLTA0LTE5IDA4OjM4ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvbGlic25tcC52Y3Byb2osIHdpbjMyL3dpbjMyLnNsbjoKKworICAgQWRkZWQgVmlzdWFsIFN0dWRpbyAyMDA1IHByb2plY3QgYW5kIHNvbHV0aW9uIGZpbGUgZm9yIGJ1aWxkaW5nCisgICB0aGUgTmV0LVNOTVAgbGlicmFyeSBhcyBhIHN0YXRpYyBsaWJyYXJ5LiBCb3RoIHRoZSBXaW4zMiBhbmQgdGhlCisgICB4NjQgY29uZmlndXJhdGlvbnMgYXJlIGluY2x1ZGVkLgorCisyMDExLTA0LTE5IDA3OjU3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXA6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMS0wNC0xOSAwNzozOSAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvajoKKworICAgTW9yZSBWaXN1YWwgU3R1ZGlvIDIwMDUgcHJvamVjdCBmaWxlIGNsZWFudXAuCisKKzIwMTEtMDQtMTkgMDY6NTcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvYmluOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTEtMDQtMTggMTU6MzQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qOgorCisgICBDbGVhbmVkIHVwIFdpbjMyIFZTMjAwNSBwcm9qZWN0IGZpbGVzIC0gcmVtb3ZlZCBzdXBlcmZsdW91cworICAgbGlicmFyeSByZWZlcmVuY2VzLgorCisyMDExLTA0LTE4IDE1OjI1ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC52Y3Byb2osICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBzZXQvc25tcHNldC52Y3Byb2osIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIAorICAgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLnZjcHJvaiwgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIEFkZGVkIHg2NCBjb25maWd1cmF0aW9ucy4KKworMjAxMS0wNC0xOCAxNToxNCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWI6CisKKyAgIEFub3RoZXIgV2luMzItcmVsYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0IHVwZGF0ZS4KKworMjAxMS0wNC0xOCAxNToxMyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay52Y3Byb2osIHdpbjMyL3NubXBkL3NubXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXBnZXQvc25tcGdldC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMudmNwcm9qLCAKKyAgICAgICAgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAudmNwcm9qLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgCisgICAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osIHdpbjMyL3NubXB2YWNtL3NubXB2YWNtLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgd2luMzIvd2luMzJkbGwuc2xuOgorCisgICBBZGRlZCB3aW4zMmRsbC1yZWxhdGVkIFZpc3VhbCBTdHVkaW8gMjAwNSBwcm9qZWN0IGFuZCBzb2x1dGlvbgorICAgZmlsZXMuCisKKzIwMTEtMDQtMTggMTM6MzcgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyLCB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlLCB3aW4zMi9saWIsIHdpbjMyL2xpYmFnZW50LCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkLCB3aW4zMi9saWJzbm1wLCB3aW4zMi9saWJzbm1wX2RsbCwgICAKKyAgICAgIHdpbjMyL2xpYnVjZG1pYnMsIHdpbjMyL25ldC1zbm1wLCB3aW4zMi9uZXRzbm1wbWlicywgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0LCB3aW4zMi9zbm1wYnVsa3dhbGssIHdpbjMyL3NubXBkLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhLCB3aW4zMi9zbm1wZGYsIHdpbjMyL3NubXBnZXQsIHdpbjMyL3NubXBnZXRuZXh0LCAgCisgICAgICAgd2luMzIvc25tcG5ldHN0YXQsIHdpbjMyL3NubXBzZXQsIHdpbjMyL3NubXBzdGF0dXMsICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUsIHdpbjMyL3NubXB0ZXN0LCB3aW4zMi9zbm1wdHJhbnNsYXRlLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAsIHdpbjMyL3NubXB0cmFwZCwgd2luMzIvc25tcHVzbSwgd2luMzIvc25tcHZhY20sICAgCisgICAgICB3aW4zMi9zbm1wd2FsazoKKworICAgQWRkZWQgKi52Y3Byb2ouKi51c2VyIGFuZCB4NjQgdG8gdGhlIHdpbjMyIFN1YnZlcnNpb24gaWdub3JlCisgICBsaXN0cy4gUmFuIHRoZXNlIHRocm91Z2ggTENfQUxMPUMgc29ydCAtZnUgdG9vLgorCisyMDExLTA0LTE4IDEyOjEwICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg6CisKKyAgIFdpbjMyIERMTCBidWlsZCBmaXhlcy4KKworMjAxMS0wNC0xNyAyMDo1NiAgZHRzMTIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMzE3NTY0MDogVXNlIElQX1JFQ1ZEU1RBRERSIHNvY2tvcHQKKyAgIHdoZXJlIGF2YWlsYWJsZSAoKkJTRCkKKwogMjAxMS0wNC0xNSAxMzo0MiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC00NjcsNiArMzE1MzksMTQgQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6IDMxODI5ODU6IEZpeCBjYWxjdWxhdGlvbiBvZiBjb21tb24gT0lECiAgICBwcmVmaXggbGVuZ3RoCiAKKzIwMTEtMDQtMTUgMTM6MTcgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCBhcHBzL3NubXB0cmFwZF9kcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgQ0hBTkdFUzogTGludXg6IFBBVENIRVM6IDMyMDU4MTE6IE9wdGlvbiB0byBza2lwIGZkL2xvb3AvcmFtCisgICBkZXZpY2VzIGluIGRpc2tJT1RhYmxlCisKIDIwMTEtMDQtMTQgMjE6MzEgIGR0czEyCiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKQEAgLTUxMyw0MiArMzE1OTMsMjM0IEBACiAKICAgIEZpeCB3cm9uZyBuYW1lIGZvciBjb25maWcgdG9rZW4gJ2RvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncycKIAotMjAxMS0wMy0xNSAxMjozNyAgZHRzMTIKKzIwMTEtMDQtMDkgMjE6NTkgIG5iYQogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICAqIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFJlbW92ZSBib2d1cyAoTGludXgpIGRlZmluZXMKIAotMjAxMS0wMy0xNSAxMDo1NyAgZHRzMTIKKzIwMTEtMDQtMDkgMjE6NTYgIG5iYQogCi0gICAqIENoYW5nZUxvZzoKKyAgICogc25tcGxpYi9zbm1wLXRjLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBIQVZFX1RNX1RNX0dNVE9GRiBpcyBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKIAotMjAxMS0wMy0xNSAxMDo1NiAgZHRzMTIKKzIwMTEtMDQtMDkgMjA6MDggIG5iYQogCi0gICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKLSAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCBjb25maWd1cmUsIAorICAgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICBtYWtlIGRlcGVuZAorICAgQmlsbCBGZW5uZXJzIHBhdGNoIHRvIG1ha2UgRElTTUFOIFBJTkcgYW5kIFRSQUNFUk9VVEUgTUlCUworICAgY29tcGlsZSB1bmRlciBMaW51eAogCi0yMDExLTAzLTE1IDEwOjQyICBkdHMxMgorMjAxMS0wNC0wOSAyMDowNCAgbmJhCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sICAgCi0gICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCAgIAotICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIHBlcmwvYWdlbnQvYWdlbnQucG0sICAgCi0gICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgICAKLSAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiAgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jLCBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYzoKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICBTb2xhcmlzIHN1cHBvcnQgZm9yIFNDVFAtTUlCCiAKLTIwMTEtMDMtMTUgMTA6NDEgIGR0czEyCisyMDExLTA0LTA5IDE5OjUwICBuYmEKIAotICAgKiBNYWtlZmlsZS50b3A6CisgICAqIHNubXBsaWIvc25tcC10Yy5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgVFogaXMgb25lIGhvdXIgb2ZmIGlmIEhBVkVfVE1fVE1fR01UT0ZGIGFuZCBTWVNWIChzdWNoIGlzIExpbnV4KQorCisyMDExLTA0LTAxIDAxOjExICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZHRsczogb3ZlcmhhdWwgb2YgZGVidWcKKyAgIAorICAgLSBkcmFzdGljIHJlZHVjdGlvbiBpbiBudW1iZXIgb2YgbWVzc2FnZXMgYW5kIG1zZyBjb21wbGV4aXR5CisgICBmb3IgYmFzaWMgZHRsc3VkcCB0b2tlbgorICAgLSBwcmV2aW91cyBsZXZlbCBvZiBkZXRhaWwgYXZhaWxhYmxlIGJ5IGFkZGluZyA5OmR0bHNkdXAgdG9rZW4KKworMjAxMS0wNC0wMSAwMDo1MyAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGR0bHM6IGNsZWFuIHVwIGNsb3NlOyBjYXRjaAorICAgJ2Nvbm5lY3QnLydkaXNjb25uZWN0JworICAgCisgICBjb25uZWN0ID0gd2UgZ2V0IHN1Y2Nlc3NmdWxseSBkZWNvZGVkIHNubXAgZGF0YQorICAgZGlzY29ubmVjdCA9IDAgYnl0ZSByZWFkLCBzc2ggc2h1dGRvd24gZmxhZyBzZXQKKyAgIGFkZCBiaW9fY2FjaGUgZmxhZ3MgZm9yIGNvbm5lY3RlZC9kaXNjb25uZWN0ZWQKKyAgIGNoZWNrIGZvciBudWxsIHB0ciBiZWZvcmUgZGVyZWZlcmVuY2luZworICAgY2xvc2UgaGFuZGxpbmc6CisgICAtIG9ubHkgc2VuZCBxdWV1ZWQgZGF0YSBpZiB3ZSBnb3QgdG8gY29ubmVjdGVkIHN0YXRlCisgICAtIHNlcmlvdXNseSByZWR1Y2UgdGltZW91dCB0byB3YWl0IGZvciBqdW5rIHJlYWQuIGkgdGhpbmsKKyAgIHdlIHNob3VsZG4ndCBldmVuIGJvdGhlcgorICAgLSByZXR1cm4gZWFybHkgaWYgY2FjaGVwIGlzIE5VTEwsIHNvIHdlIGRvbid0IGhhdmUgdG8gdGVzdCBpdAorICAgcmVwZWF0ZWRseQorICAgLSB1c2UgY29ycmVjdCBuZmRzIHZhbHVlIGluIHNlbGVjdCBjYWxsCisKKzIwMTEtMDMtMzEgMDU6MTcgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtYWtlIHRydW5rIGFuZCB2NS02LXBhdGNoZXMgY2xvc2VseSBhbGlnbmVkCisgICAKKyAgIG1vc3RseSBjaGFuZ2VzIGluIGRlYnVnLCBjb29raWUgdHJhY2tpbmcKKworMjAxMS0wMy0yNyAxMTowOCAgbWFnZnIKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgU2ltcGxpZnkgYXJyYXkgcmVzaXppbmcgc29tZXdoYXQgZnVydGhlcgorCisyMDExLTAzLTI3IDEwOjIxICBtYWdmcgorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBEbyBub3QgYXNzaWduIG5ld19kYXRhIGlmIHRoZSB2YWx1ZSB3b24ndCBiZSB1c2VkLgorICAgUmVkdWNlIHZhcmlhYmxlIHNjb3Blcy4KKworMjAxMS0wMy0yNyAxMDoxNCAgbWFnZnIKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBjbGVhciBhIGNodW5rIG9mIG1lbW9yeSBpZiB0aGUgbmV4dCBhY3Rpb24KKyAgIG9uIGl0IGlzIHRvCisgICBmaWxsIGl0IHNvIHVzZSBtYWxsb2MgaW5zdGVhZCBvZiBjYWxsb2MuCisKKzIwMTEtMDMtMjcgMTA6MDkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIENvbnRhaW5lckJpbmFyeUFycmF5IHJlYWxseSBjYW4ndCBob2xkIGFueXRobmcgYnV0IHBvaW50ZXJzIGFuZAorICAgdGhhdCBtZWFucyB0aGUKKyAgIGRhdGFfc2l6ZSBmaWVsZCBpcyB1bm5lY2Vzc2FyeSBzbyBJIHJlbW92ZWQgaXQuCisKKzIwMTEtMDMtMjYgMTk6NTUgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3NubXBfc2VjbW9kLmMsICAgCisgICAgICBzbm1wbGliL3NubXB2My5jOgorCisgICBBZGQgbWlzc2luZyBpbmNsdWRlCisKKzIwMTEtMDMtMjYgMDg6MDcgIG1hZ2ZyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIFVzZSB0aGUgcmlnaHQgZmVhdHVyZSBtYWNybyBpbiBvcmRlciB0byBtYWtlIGJ1aWxkcyB3aXRoCisgICAtLWVuYWJsZS1pcHY2IC0td2l0aC1vdXQtdHJhbnNwb3J0cz1VRFBJUHY2IHN1Y2NlZWQuCisKKzIwMTEtMDMtMjYgMDg6MDIgIG1hZ2ZyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIFJlbW92ZSBkdXBsaWNhdGUgY29waWVzIG9mIGZ1bmN0aW9ucworCisyMDExLTAzLTI1IDIwOjM1ICByc3RvcnkKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICB0d2VhayBkZWJ1ZyBtZXNzYWdlCisKKzIwMTEtMDMtMjUgMjA6MzIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiB1cGRhdGUgY2VydCB0b2tlbiBoYW5kbGluZworICAgCisgICAtIHJlbW92ZSBkZWZYNTA5IGNlcnQgdG9rZW5zIChzaG91bGQgaGF2ZSBiZWVuIHJlbW92ZWQgYmVmb3JlCisgICA1LjYpCisgICAtIHdhcm5pbmdzIGZvciBvdXIvdGhlaXIgdG9rZW5zLCByZWNvbW1lbmQgdXNpbmcgbG9jYWwvcGVlcgorCisyMDExLTAzLTI1IDIwOjMxICByc3RvcnkKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgbWVyZ2UgbmV0c25tcF9kdGxzdWRwNiBpbnRvIG5ldHNubXBfZHRsc3VkcAorICAgCisgICB1c2UgYWRkciBzaXplIHRvIHRlbGwgdGhlbSBhcGFydAorCisyMDExLTAzLTI1IDIwOjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGxvZyAob25jZSkgd2FybmluZyB3aGVuIGRlcHJlY2F0ZWQgZl9jcmVhdGVfZnJvbV90c3RyaW5nCisgICB0cmFuc3BvcnQgZnVuY3Rpb24gdXNlZAorCisyMDExLTAzLTI1IDIwOjMwICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jOgorCisgICByZWR1Y2UgY2FzdGluZzsgbWFrZSBzdXJlIHRvIGZyZWUgdGhlIHJpZ2h0IHBvaW50ZXIKKworMjAxMS0wMy0yNSAyMDoyOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIHJlZHVjZSBjYXN0aW5nCisKKzIwMTEtMDMtMjQgMDY6MTkgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgUmVwbGFjZSBhIHZhcmlhYmxlIHdpdGggYSBjb25zdGFudC4gTWFrZSBvbmUgbW9yZSBvaWQgY29uc3QuCisKKzIwMTEtMDMtMTcgMjE6MDkgIG5iYQorCisgICAqIG1hbi9zbm1wZGVsdGEuMS5kZWY6CisKKyAgIEZvcm1hdHRpbmcgYm90Y2gKKworMjAxMS0wMy0xNyAyMTowNyAgbmJhCisKKyAgICogbWlicy9NYWtlZmlsZS5pbjoKKworICAgSW5zdGFsbCByZXF1aXJlZCBtaWJzCisKKzIwMTEtMDMtMTcgMjE6MDUgIG5iYQorCisgICAqIG1pYnMvcmZjbGlzdDoKKworICAgTmV3IFJGQyBtaWJzCisKKzIwMTEtMDMtMTUgMTA6MzEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgU3BlbGxpbmcgZml4OiByZWdpbmVyYXRlZCAtPiByZWdlbmVyYXRlZC4KKworMjAxMS0wMy0xNSAxMDoxOSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBTaW1wbGlmaWVkIHIxOTU5NCAobGVhay1hdC1leGl0IGZpeCkuCisKKzIwMTEtMDMtMTUgMDk6NTkgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjIwMTEzLgorCisyMDExLTAzLTE0IDA5OjMxICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIEZpeCBtYWluIGFnZW50IHNlbGVjdCBjYWxsIHRvIHVzZSB0aGUgcmVuYW1lZCBBUEkgcm91dGluZS4KKworMjAxMS0wMy0xMyAyMDowOSAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIEJyaW5nIHRoZSBuYW1pbmcgb2YgdGhlIGxhcmdlX2ZkX3NldCBzZWxlY3QgY2FsbCBpbnRvCisgICBsaW5lIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEFQSS4KIAogMjAxMS0wMy0xMiAwNjo1OSAgcnN0b3J5CiAKQEAgLTU2Myw4ICszMTgzNSw3IEBACiAgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKICAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCiAgICAgICAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAotICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaDoKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYzoKIAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiBvcHRpbWl6YXRpb25zIGZvciBsYXJnZSByb3V0ZSB0YWJsZXMgZnJvbQogICAgU3RlcGhlbiBIZW1taW5nZXIKQEAgLTU3MywxMyArMzE4NDQsODIgQEAKICAgIHN1YmplY3QKICAgIGlwLWZvcndhcmQtbWliIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50czsgcGFydCA0IG5lZWRzIG1vcmUgd29yawogCi0yMDExLTAzLTExIDExOjExICBqc2FmcmFuZWsKKzIwMTEtMDMtMTEgMTQ6NDMgIHJzdG9yeQogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCByYWNlIGNvbmRpdGlvbiBpbiBoclNXUnVuVGFibGUKLSAgIFRyZWF0IHRoZSByZWFkcyBmcm9tIC9wcm9jLzxwaWQ+LyogY2FyZWZ1bHksIHByb2Nlc3NlcyBjYW4gZXhpdAotICAgaW4gdGhlIG1pZGRsZSBvZiBwcm9jZXNzaW5nLgorICAgQ0hBTkdFUzogc25tcGxpYjogYWRkIG1vcmUgb3BlbnNzbCBlcnJvciBjYXNlcyB3aGVyZSB3ZSBjaGVjayBmb3IKKyAgIGxvY2FsIGNlcnQKKworMjAxMS0wMy0xMSAxMjowMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisKKyAgIE1pbkdXOiBkc2tUYWJsZTogUmVwb3J0IHplcm8gZm9yIHVuaW1wbGVtZW50ZWQgZmllbGRzIGluc3RlYWQgb2YKKyAgIHJhbmRvbSBkYXRhLgorCisyMDExLTAzLTExIDA4OjQyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJ1aWxkcyB3aXRoIG1vc3QgcmVjZW50IE1pbkdXIChoYXZpbmcgI2RlZmluZQorICAgbG9jYWx0aW1lX3IpLgorCisyMDExLTAzLTExIDAzOjA4ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiByZWZpbmUgY2VydCBkZWJ1Z2dpbmc7IHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24KKworMjAxMS0wMy0xMCAyMToyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzIwNTc2NTogaGFuZGxlIHJlY29uZmlnIGZvciBjZXJ0U2VjTmFtZQorICAgdG9rZW4KKworMjAxMS0wMy0xMCAyMDowMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBTcGVsbGluZyBmaXggaW4gYSBzb3VyY2UgY29kZSBjb21tZW50OiBtZXNzZ2VzIC0+IG1lc3NhZ2VzLgorCisyMDExLTAzLTEwIDE5OjU1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBNaW5vciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24KKyAgIG9mIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZSgpLgorCisyMDExLTAzLTEwIDE5OjQ4ICBidmFzc2NoZQorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzIwMzgwNjogQXZvaWQgdGhhdCB0aGUgbWFpbiBhZ2VudAorICAgcHJvY2Vzc2luZyBsb29wIC0gd2hlbiB1c2luZyBtb3JlIHRoYW4gRkRfU0VUU0laRSBmaWxlCisgICBkZXNjcmlwdG9ycyAtIGNhbiBjYXVzZSBtZW1vcnkgY29ycnVwdGlvbiBieSBpbnZva2luZyBzZWxlY3QoKS4KKworMjAxMS0wMy0xMCAxOTo0MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAzMjAzODA2OiBBZGQgdGhlIGZ1bmN0aW9uCisgICBuZXRzbm1wX2xhcmdlX3NlbGVjdCgpLgorCisyMDExLTAzLTEwIDE4OjU1ICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDlsYXJnZV9mZF9zZXRfY2xpYi5jOgorCisgICBBZGRlZCBhIG1pbmltYWwgdW5pdCB0ZXN0IGZvciBuZXRzbm1wX2xhcmdlX2ZkX3NldC4KKworMjAxMS0wMy0xMCAxODo1MiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzIwMzgwNjogTWFrZQorICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKCkgY2xlYXIgYWxsIHJlbGV2YW50IGZpbGUKKyAgIGRlc2NyaXB0b3JzLgogCiAyMDExLTAzLTEwIDE1OjUxICBkdHMxMgogCkBAIC01ODgsNiArMzE5MjgsMjg4IEBACiAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMTc4Mzg5OiBGaXggaW5jb25zaXN0ZW50IGhhbmRsaW5nIG9mIFRaCiAgICBvZmZzZXRzCiAKKzIwMTEtMDMtMTAgMTU6NDAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGU6CisKKyAgIElnbm9yZSBvYmplY3QgZmlsZXMgYW5kIGxpYnJhcmllcworCisyMDExLTAzLTEwIDE1OjA1ICBkdHMxMgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0czoKKworICAgSWdub3JlIG9iamVjdCBmaWxlcyBhbmQgbGlicmFyaWVzCisKKzIwMTEtMDMtMTAgMTQ6MzIgIGhhcmRha2VyCisKKyAgICogYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIG1ha2UgdmFyaWFibGUgbmFtZXMgbWF0Y2gKKworMjAxMS0wMy0xMCAxNDoyOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYzoKKworICAgRml4ZWQgdHdvIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDExLTAzLTEwIDE0OjI0ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBmaXhlZCBpbnN0YWxsYXRpb24gdmFyaWFibGVzIGZvciB0aGUgb3B0aW9uYWwgU0VUIHByb2dyYW1zCisKKzIwMTEtMDMtMDggMDA6NTMgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczoKKworICAgY2htb2QgYSt4CisKKzIwMTEtMDMtMDggMDA6MTUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6CisKKyAgIHByaW50IGFuIGVycm9yIGlmIHRoZSBlbmQgb2YgYSBmaWxlIHdhcyByZWFjaGVkIGFuZCB3ZSdyZSBub3QKKyAgIGJhY2sKKyAgIGludG8gdGhlIHN0YXRlIHdlIGNhbiB3cml0ZTsgb3RoZXJ3aXNlIGEgY2xvc2luZyAjaWZkZWYgaXMKKyAgIG1pc3NpbmcuCisKKzIwMTEtMDMtMDggMDA6MTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CisKKyAgIGZpeCBlbmRpZiBjb21tZW50IHRvIG1hdGNoIHRoZSBvcGVuaW5nIGlmZGVmCisKKzIwMTEtMDMtMDggMDA6MTUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6CisKKyAgIHJlc2V0IHRoZSBjYW53cml0ZSBmbGFnIGZvciBldmVyeSBmaWxlCisKKzIwMTEtMDMtMDggMDA6MTUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczoKKworICAgdGVtcG9yYXJpbHkgbGVhdmUgaW4gaGVhZGVyIGZpbGVzCisKKzIwMTEtMDMtMDggMDA6MTQgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuYWM6CisKKyAgIGNoYW5nZSB0aGUgdW5pcXVlIGZpbGUgY2hlY2sgdG8gb25lIHRoYXQgaXMgbm90IGluIHRoZSBtaWJncm91cAorICAgZGlyZWN0b3J5CisKKzIwMTEtMDMtMDggMDA6MTQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3JlYWQtb25seSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3JlYWQtb25seS9UMDE0MXNubXB2MmNzZXRmYWlsX3NpbXBsZToKKworICAgYSB0ZXN0IGZvciBlbnN1cmluZyB0aGUgYWdlbnQgcmVqZWN0cyBTRVQgcmVxdWVzdHMgd2l0aAorICAgLS1lbmFibGUtcmVhZC1vbmx5CisKKzIwMTEtMDMtMDggMDA6MTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlOgorCisgICBhZGQgYmFjayBpbiB0aGUgc3RvcGFnZW50IGNvbW1hbmQKKworMjAxMS0wMy0wOCAwMDoxNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAxcGR1X3R5cGVfY2xpYi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAycGR1X2J1aWxkX2NsaWIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwM3BkdV9wYXJzZV9jbGliLmM6CisKKyAgIHVuaXQgdGVzdHMgd3JpdGVuIGZvciB0aGUgcmVhZC1vbmx5IHN1cHBvcnQgY29udmVydGVkIHRvIHdvcmsKKyAgIHdpdGggb3Igd2l0aG91dCByZWFkLW9ubHkKKworMjAxMS0wMy0wOCAwMDoxMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6CisKKyAgIGRvbid0IHJ1biB0aGUgc2V0IHRlc3QgaWYgbm9fd3JpdGVfc3VwcG9ydCBpcyB0dXJuZWQgb24KKworMjAxMS0wMy0wOCAwMDoxMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlOgorCisgICBza2lwIGlmIG5vX3dyaXRlX3N1cHBvcnQKKworMjAxMS0wMy0wOCAwMDoxMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTQxc25tcHYyY3NldF9zaW1wbGU6CisKKyAgIEEgbmV3IHRlc3QgdG8gY2hlY2sgd2hldGhlciBTTk1QdjJjIFNFVHMgdG8gc3lzQ29udGFjdCB3b3JrIGFzCisgICBleHBlY3RlZAorCisyMDExLTAzLTA4IDAwOjEzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3Zhbnljb25maWc6CisKKyAgIGFsbG93IGZvciB2MmMgU0VUIHN1cHBvcnQgdGVzdGluZworCisyMDExLTAzLTA4IDAwOjEyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgorCisgICBBbGxvdyBmb3Igc2luZ2xlIHF1b3RlcyBmb3IgdmFjbSBjb250ZXh0IG5hbWUgcXVvdGluZyB0b28KKworMjAxMS0wMy0wNyAxOToxOSAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmU6CisKKyAgIGZpeCB0aGUgY29uZmlndXJlIHRlc3RzIHRvIGluY2x1ZGUgdGhlIHdvcmQgdGVzdCBpbiB0aGUgdGVzdAorCisyMDExLTAzLTA3IDE5OjE4ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgZml4IHRoZSBjb25maWd1cmUgdGVzdHMgdG8gaW5jbHVkZSB0aGUgd29yZCB0ZXN0IGluIHRoZSB0ZXN0CisKKzIwMTEtMDMtMDcgMTk6MTggIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlczoKKworICAgQWRkZWQgYW4gYW5ub3lpbmdseSBsb25nIGxpc3Qgb2YgZXhjZXB0aW9ucyB0aGF0IG5lZWRzIHRvIGJlCisgICBhdXRvbWF0ZWQKKworMjAxMS0wMy0wNyAxOToxOCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzOgorCisgICBBIHF1aWNrIHBlcmwgc2NyaXB0IHRvIHJlbW92ZSB1bm5lZWRlZCBjb2RlIG1vZHVsZXMgZnJvbSB0aGUKKyAgIG1vZHVsZXMgZGlyZWN0b3J5CisKKzIwMTEtMDMtMDcgMTk6MTggIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi92YWNtLmM6CisKKyAgIG1vcmUgaW1wcm92ZW1lbnRzIChyZW1vdmVtZW50cykgZm9yIGZlYXR1cml6YXRpb24gYW5kIHJlYWQtb25seQorICAgc3VwcG9ydAorCisyMDExLTAzLTA3IDE3OjE5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzE5NTUzNzogTWlub3IgYmluYXJ5X2FycmF5IGNvbnRhaW5lcgorICAgc29ydCBvcHRpbWl6YXRpb24KKworMjAxMS0wMy0wNiAxOTo0NyAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmM6CisKKyAgIFRhYnMgdG8gc3BhY2VzCisKKzIwMTEtMDMtMDYgMTE6MjggIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CisKKyAgIENvbmZpZ3VyZSBjaGVjayBmb3IgZ2V0aG9zdG5hbWUyCisgICBVc2UgZ2V0YWRkcmluZm8gaWYgYXZhaWxhYmxlLiBOb3cgd29ya3MgZm9yIFNvbGFyaXMgKGFuZAorICAgV2luZG93cz8pCisKKzIwMTEtMDMtMDUgMTk6MTYgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdGVzdC5jOgorCisgICBBZGQgZHJvcHBlZCB8fCdzIGZyb20gcjIwMDcyCisKKzIwMTEtMDMtMDUgMTI6NTAgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jOgorCisgICBDbGVhbiB1cCwgYW5kIGNvc29saWRhdGUgcmVzdWx0IHRhYmxlIHJvdyBjcmVhdGlvbiBpbnRvIGEgbmV3CisgICBmdW5jdGlvbi4KKyAgIFNhdmVzIDIwMCBsaW5lcyBvZiBjb2RlLCB3aXRoIChob3BlZnVsbHkpIG5vIGZ1bmN0aW9uYWxpdHkgY2hhbmdlCisKKzIwMTEtMDMtMDUgMDY6MTcgIGhhcmRha2VyCisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcHRlc3QuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBkb24ndCBidWlsZCBTRVQgcmVsYXRlZCBhcHBzIHdpdGggLS1lbmFibGUtcmVhZC1vbmx5CisKKzIwMTEtMDMtMDUgMDY6MTYgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBmaXggaXNzdWVzIHdpdGggY29tYmluaW5nIC0tZW5hYmxlLW1pbmltYWxpc3QgYW5kCisgICAtLWVuYWJsZS1yZWFkLW9ubHkKKworMjAxMS0wMy0wNSAwNjoxNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZpbmQtdW51c2VkLWNvZGU6CisKKyAgIGJldHRlciBvdXRwdXQgZm9yIGZpbmRpbmcgb2JqZWN0IHN5bWJvbHMuCisKKzIwMTEtMDMtMDQgMjE6NTYgIGJhZXJtCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6CisKKyAgIGxhc3QgY29tbWl0OiBjaGFuZ2VzIHRvIGFsbG93IHBhcnNpbmcgb2YgZmVhdHVlcnMgZmlsZXMgdG8gZ2V0CisgICBhbGwgbWluaW1hbGlzdCB0YWdzIHdoaWNoIGFyZSB0aGVuIHByb2Nlc3NlZCBmb3IgcmVtb3ZhbAorICAgCisgICB0aGlzIGNvbW1pdDogY2hhbmdlZCBjb21tZW50cy93aGl0ZSBzcGFjZQorCisyMDExLTAzLTA0IDE5OjI3ICBiYWVybQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgorCisgICBhZGRlZCBub193cml0ZSBzdXBwb3J0IHRvIGV4dGVuZC5jCisKKzIwMTEtMDMtMDQgMTk6MjYgIGJhZXJtCisKKyAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOgorCisgICBBZGRlZCBtaXNzaW5nICNlbmRpZiBjb21tZW50IGZvciByZW1vdmUgaWZkZWYgY29kZSBzdXBwb3J0CisKKzIwMTEtMDMtMDQgMTk6MjQgIGJhZXJtCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6CisKKyAgIGFkZGVkIGNoYW5nZXMgdG8gYWxsb3cgY29kZSByZW1vdmFsIGluLXBsYWNlCisgICAoaS5lLiBkb2VzIG5vdCByZXF1aXJlIGNyZWF0aW5nIGEgbmV3IGZpbGUpCisKKzIwMTEtMDMtMDQgMTk6MjMgIGJhZXJtCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9pZ25vcmUucmVnZXhwOgorCisgICBhZGRpbmcgYSBpZ25vcmUucmVnZXhwIGZpbGUgdGhhdCBjYW4gYmUgdXNlZCB3aXRoCisgICByZW1vdmVpZmRlZmNvZGUucGwKKworMjAxMS0wMy0wNCAxOToyMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIGFkZCBhIG91dGdvaW5nIGxpbmsgdG8gdGhlIHBhcmVudCBtYXJraW5nIHBhZ2UKKworMjAxMS0wMy0wNCAxOToxOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIEFkZGVkIGEgd2lraSBvdXRwdXQgbW9kZQorCisyMDExLTAzLTA0IDE5OjE5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgTm90ZSB0aGF0IHRoZSBvcmcgb3V0cHV0IGlzIHRoZSBkZWZhdWx0IGluIHRoZSBoZWxwIG91dHB1dAorCiAyMDExLTAzLTA0IDE1OjA5ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYzoKQEAgLTU5NSw2ICszMjIxNyw0ODAgQEAKICAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCAndHJ1bmNhdGluZyBpbnRlZ2VyIHZhbHVlID4gMzIgYml0cycgaW4KICAgIFVDRC1TTk1QLU1JQjo6c3lzdGVtU3RhdHMgb24gTGludXgKIAorMjAxMS0wMy0wNCAxNDo0OSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlY2xhc3NpZmljYXRpb24gb2YgdGhlIHJlbWFpbmluZyBmZWF0dXJlcyBpbnRvIGEgaGllcmFyY2h5CisKKzIwMTEtMDMtMDQgMTQ6NDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZG9uJ3QgZG91YmxlLWRlY2xhcmUgY2VydF91dGlscworCisyMDExLTAzLTA0IDE0OjQ5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgdGhlIGlwYWRkcmVzc19saW51eCB3YXMgaW5jb3JyZWN0bHkgbWFya2VkIGFzIG5lZWRpbmcKKyAgIGNlcnRfZmluZ2VycHJpbnRzCisKKzIwMTEtMDMtMDQgMTQ6NDggIGhhcmRha2VyCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgcHV0IHRoZSBhZ2VudF9yZWdpc3RyeSBmZWF0dXJlIGluIGxpYm5ldHNubXBhZ2VudC4KKworMjAxMS0wMy0wMyAxMDo1NiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgQ0hBTkdFUzogV2luMzI6IERlcHJlY2F0ZWQgbGlic25tcC5kZWYgLSBhZGQgTkVUU05NUF9JTVBPUlQgdG8KKyAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBpbnN0ZWFkIHRvIGV4cG9ydCBhIGZ1bmN0aW9uIGZyb20KKyAgIG5ldHNubXAuZGxsLgorCisyMDExLTAzLTAzIDEwOjQ4ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBBZGRlZCBtaXNzaW5nIE5FVFNOTVBfSU1QT1JUIGRlY2xhcmF0aW9ucy4KKworMjAxMS0wMy0wMyAxMDoyNCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYsIHdpbjMyL2xpYnVjZG1pYnMvbGlidWNkbWlicy5kZWY6CisKKyAgIFJlbW92ZWQgdHdvIG9ic29sZXRlIFdpbjMyIGZpbGVzLgorCisyMDExLTAzLTAzIDEwOjA5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzoKKworICAgVHJpdmlhbCBjb21tZW50IGZpeDogc25tcElQdjZCYXNlRG9tYWluLmMgY29udGFpbnMgSVB2NiBiYXNlCisgICB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMgaW5zdGVhZCBvZiBJUHY0LgorCisyMDExLTAzLTAyIDE5OjEwICBidmFzc2NoZQorCisgICAqIHNubXBsaWI6CisKKyAgIEFkZGVkIHNubXBzbV9zaHV0ZG93bi5oIHRvIHRoZSBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0IGJlY2F1c2UKKyAgIGl0J3MgYSBnZW5lcmF0ZWQgZmlsZS4KKworMjAxMS0wMy0wMiAxNTo1OCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9jb25maWcuaDoKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSBmaWxlLgorCisyMDExLTAzLTAyIDE1OjUyICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgd2luMzIvc25tcHNtX3NodXRkb3duLmgsICAKKyAgICAgICB3aW4zMi9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaDoKKworICAgQnVpbGRzIGFnYWluIHdpdGggVmlzdWFsIFN0dWRpbyBhZnRlciB0aGUgaW50cm9kdWN0aW9uIG9mIHRoZQorICAgImZlYXR1cmUiIGZlYXR1cmUuCisKKzIwMTEtMDMtMDIgMTU6NDggIGJ2YXNzY2hlCisKKyAgICogd2luMzIvc25tcHNtX2luaXQuaDoKKworICAgUmVtb3ZlZCBhIG1pc2xlYWRpbmcgY29tbWVudC4KKworMjAxMS0wMy0wMiAwODo0MCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgQ29ycmVjdCB0aGUgY2hlY2sgb2Ygd2V0aGVyIHVzbSBzZWN1cml0eSBpcyBlbmFibGVkLgorICAgUmVnZW5lcmF0ZSBjb25maWd1cmUuCisKKzIwMTEtMDMtMDIgMDg6MzkgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVnZW5lcmF0ZQorCisyMDExLTAzLTAyIDA4OjIxICBtYWdmcgorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcworCisyMDExLTAzLTAyIDA3OjE5ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBJZ25vcmUgdGhlIHJldHVybiB2YWx1ZSBmcm9tIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYworCisyMDExLTAzLTAyIDA3OjE5ICBtYWdmcgorCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIFNwbGl0IHRoZSBjb250YWluZXJfY29tcGFyZV9mdW5jdGlvbnMgZmVhdHVyZSBpbnRvCisgICBjb250YWluZXJfY29tcGFyZV9tZW0sCisgICBjb250YWluZXJfY29tcGFyZV9sb25nLCBjb250YWluZXJfY29tcGFyZV91bG9uZywKKyAgIGNvbnRhaW5lcl9jb21wYXJlX2ludDMyIGFuZAorICAgY29udGFpbmVyX2NvbXBhcmVfdWludDMyCisgICBVbmlmeSB0aGUgc3RydWN0dXJlIG9mIHRoZSBjb21wYXJlIGZ1bmN0aW9ucyBmdXJ0aGVyLgorCisyMDExLTAzLTAyIDA3OjE5ICBtYWdmcgorCisgICAqIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIENoYW5nZSB0aGUgc3BlbGxpbmcgb2YgdGhlIGNvbnRhaW5lcl9jb21wYXJlX2NzdHJpbmcgZmVhdHVyZSB0bworICAgY29udGFpbmVyX25jb21wYXJlX2NzdHJpbmcgYXMgdGhhdCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBpcworICAgZ3VhcmRlZCBieSB0aGF0CisgICBhdHRyaWJ1dGUuCisKKzIwMTEtMDMtMDIgMDc6MTcgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIEFkZCB0aGUgbWlzc2luZyByZXBsYWNlbWVudCBtYWNybyBmb3Igc25tcF9pbml0X3N0YXRpc3RpY3MKKworMjAxMS0wMy0wMiAwNzoxNiAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5IHRha2VzIHR3byBhcmd1bWVudHMgc28gbGV0IHRoZQorICAgcmVwbGFjZW1lbnQgbWFjcm8KKyAgIHRha2UgdHdvIGFyZ3VtZW50cyBhcyB3ZWxsLgorCisyMDExLTAyLTI3IDEzOjU1ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYzoKKworICAgRml4IHR5cG8gaW4gcjE5OTkwCisKKzIwMTEtMDItMjYgMTA6NTMgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrOgorCisgICBSZW1vdmUgbGluZXMgc3RhcnRpbmcgd2l0aCAjZGVmaW5lIGluIHRoZSBvdXRwdXQgb2YgdGhlCisgICBwcmVwcm9jZXNzb3IKKyAgIFdoZW4gZ2NjIC1FIGlzIGNhbGxlZCB3aXRoIC1nZ2RiMyAob3IgLWREKSB0aGVuIGFsbCB0aGUgbWFjcm8KKyAgIGRlZmluaXRpb25zIGFyZQorICAgcGFzc2VkIHRocm91Z2ggdGhlIHByZXByb2Nlc3NvciBhbmQgdGhhdCBtZXNzZXMgdXAgb3VyCisgICBwcm9jZXNzaW5nLgorCisyMDExLTAyLTI2IDEwOjUyICBtYWdmcgorCisgICAqIE1ha2VmaWxlLnJ1bGVzOgorCisgICBQdXQgdGhlIGdlbmVyYXRlZCBmaWxlIGluIHRoZSBidWlsZCB0cmVlLCBub3QgdGhlIHNvdXJjZSB0cmVlLgorCisyMDExLTAyLTI2IDAxOjIzICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIG1vdmVkIGEgYnVuY2ggb2YgZmVhdHVyZXMgaW50byB0aGUgbGlibmV0c25tcG1pYnMgZmVhdHVyZSBzZXQuCisKKzIwMTEtMDItMjYgMDE6MjIgIGhhcmRha2VyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfaW5kZXguYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3RyYXAuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYywgICAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHMsIHNubXBsaWIvbWliLmM6CisKKyAgIGNsYXNzaWZpZWQgbGlibmV0c25tcGFnZW50IGZlYXR1cmVzCisKKzIwMTEtMDItMjYgMDE6MjEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIHJldmVyc2UgdGhlIG9yZGVyIG9mIHRoZSBsaWJyYXJpZXMgKHNubXBsaWIgZmlyc3QpCisKKzIwMTEtMDItMjYgMDE6MjEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIG91dHB1dCBjbGVhbnVwIGFuZCBhZGRlZCBhZ2VudC1taWJzIGFuZCBsb2dnaW5nIG9wdGlvbnMKKworMjAxMS0wMi0yNiAwMToyMSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgYWRkIGEgZGVmYXVsdCBzZXQgb2YgYXJndW1lbnRzCisgICBjYWxjdWxhdGUgcmVzdWx0aW5nIHNpemVzCisKKzIwMTEtMDItMjYgMDE6MjEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgQWRkZWQgYSBtaXNzaW5nIDsKKworMjAxMS0wMi0yNiAwMToyMCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgcHJlZml4IHRoZSBvdXRwdXQgZmlsZXMgd2l0aCBhIG51bWJlciB0byBpbmRpY2F0ZSBvcmRlcgorCisyMDExLTAyLTI2IDAxOjIwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBzYXZlIHRoZSByZXN1bHRzIG9mIHRoZSBzeXN0ZW0gZXhlY3V0aW9ucworCisyMDExLTAyLTI2IDAxOjIwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBlbmFibGUgYnVpbGRpbmcgb2YgdGhlIHJlc3VsdGluZyBjb21iaW5hdGlvbnMKKyAgIEFkZCBhIC1uIGZsYWcgZm9yIGRyeS1ydW5zCisKKzIwMTEtMDItMjYgMDE6MjAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHM6CisKKyAgIGVuYWJsZSB0aGUgLXQgdGFnIGZvciBsaW1pdGluZyB0eXBlcworCisyMDExLTAyLTI2IDAxOjE5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBBZGRlZCBhcmd1bWVudCBwYXJzaW5nIGFuZCBhcmd1bWVudHMgZm9yIHNlbGVjdGluZyBhbmQgbGlzdGluZworICAgdHlwZXMKKworMjAxMS0wMi0yNiAwMToxOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgZ2VuZXJhdGUgY29uZmlndXJlIHNjcmlwdCBhcmd1bWVudHMgZnJvbSBzcGVjcworCisyMDExLTAyLTI2IDAxOjE5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzOgorCisgICBhZGRlZCBhIGJ1bmNoIG9mIG5ldyBmZWF0dXJlIG9wdGlvbnMgYW5kIGNsZWFuZWQgdXAgYSBiaXQKKworMjAxMS0wMi0yNiAwMToxOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0czoKKworICAgYWRkZWQgYSBuZXcgKG5vdCB5ZXQgd29ya2luZykgc2NyaXB0IHRvIHRlc3Qgc2l6aW5nIG9mIHZhcmlvdXMKKyAgIGFyZ3VtZW50IHNldHMKKworMjAxMS0wMi0yNiAwMDoyNiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBTaW1wbGlmeSB0aGUgY29kZS4gVW5pZnkgc29tZSBkZWJ1ZyBsb2dzLgorCisyMDExLTAyLTI2IDAwOjE5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIFJlZHVjZSB0aGUgc2NvcGUgb2YgYSBmZXcgdmFyaWFibGVzCisKKzIwMTEtMDItMjYgMDA6MTYgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgUmVtb3ZlIHNvbWUgdW51c2VkIGluY2x1ZGVzLgorCisyMDExLTAyLTI2IDAwOjE1ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gaW5pdGlhbGl6ZS91bmluaXRpYWxpemUgbW9kdWxlcyB3aXRoIDY0CisgICBjaGFyYWN0ZXIgbmFtZXMgYW5kIG5vdCBzdWZmZXIgd2lsZCB3cml0ZXMuCisKKzIwMTEtMDItMjYgMDA6MTIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYzoKKworICAgQ29kZSByZXN0cnVjdHVyaW5nIC0gcHV0IHRoZSBtYW5hZ2VkIHJvdXRpbmVzIGJlZm9yZSB0aGUKKyAgIG1hbmFnbWVudCBjb2RlLgorCisyMDExLTAyLTI2IDAwOjExICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmg6CisKKyAgIENIQU5HRVM6IGxpYm5ldHNubXBtaWJzOiBNYWtlIGFsbCBmdW5jdGlvbnMgaW4gdGhlIGRsbW9kIG1vZHVsZQorICAgdGhhdCBkb24ndCBoYXZlIHRvIGJlIHB1YmxpYyBzdGF0aWMKKworMjAxMS0wMi0yNiAwMDowNyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jOgorCisgICBSZW5hbWUgZGVpbml0X2RsbW9kIHRvIHNodXRkb3duX2RsbW9kIGFzIHRoYXQgaXMgd2hhdCBpdCByZWFsbHkKKyAgIGlzIGFib3V0LgorCisyMDExLTAyLTI1IDE4OjI0ICBiYWVybQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmM6CisKKyAgIGFkZGluZyBtaW5pbWFsaXN0IGlmZGVmcyB0byBuZXQtc25tcC12YWNtIG1pYgorCisyMDExLTAyLTI1IDE2OjA5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgcHJvcGVybHkgaGFuZGxlIHR3aW4gY2hpbGRyZW47IGFsc28gc29ydCB0aGUgY2hpbGQgbGlzdAorICAgYWxwaGFiZXRpY2FsbHkuCisKKzIwMTEtMDItMjUgMTY6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgSSBzdXBwb3NlIGxvZ2dpbmcgc2hvdWxkIHByb2JhYmx5IGRlZmF1bHQgdG8gYmVpbmcgYSB3YW50ZWQKKyAgIG9wdGlvbiA6LSkKKworMjAxMS0wMi0yNSAxNjowOSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIG9yZy1saW5rIHRoZSBmaWxlcyBpbiB0aGUgb3V0cHV0CisKKzIwMTEtMDItMjUgMTY6MDggIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLnJ1bGVzLCBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4sICAgCisgICAgICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrLCBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBtYWtlIHRoZSBmZWF0dXJlcy1jaGVjayBzY3JpcHQgdHJhY2sgdGhlIGZ1bGwgc291cmNlIHBhdGgKKworMjAxMS0wMi0yNSAxNjowOCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M6CisKKyAgIGNoYW5nZSB0aGUgZnVuY3Rpb24gbmFtZXMgdG8gbWF0Y2ggdGhhdCBpdCdzIHByaW50aW5nIHRvIG9yZy1tb2RlCisgICBhdCB0aGUgbW9tZW50LgorCisyMDExLTAyLTI1IDE2OjA4ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2ZpbGVfdXRpbHMuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9vaWRfc3Rhc2guYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi90b29scy5jOgorCisgICBsYXN0IG9mIHRoZSBmZWF0dXJlIGNsYXNzaWZpY2F0aW9uIGluIGxpYm5ldHNubXAKKworMjAxMS0wMi0yNSAxNjowNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9zY2FwaS5jOgorCisgICBtYWtlIHRoZSB1c21fc3VwcG9ydCB1dGlsaXRpZXMgc2VsZi1kZWNsYXJlIHRoZW1zZWx2ZXMgYXMKKyAgIGNoaWxkcmVuIHRvCisgICBtYWtlIHN1cmUgdGhleSdyZSBwcm9wZXJseSBpbmNsdWRlZCBkdXJpbmcgZGVwZW5kZW5jeSBvcmRlcmluZworCisyMDExLTAyLTI1IDE2OjA3ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAKKyAgICAgICAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9kYXRhX2xpc3QuYywgICAKKyAgICAgIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgICAKKyAgICAgIHNubXBsaWIvZmlsZV91dGlscy5jLCBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBzdXBlcnN0cnVjdHVyYWxpemF0aW9uaXppbmcgdGhlIGZlYXR1cmVzCisKKzIwMTEtMDItMjUgMTY6MDcgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zbm1wLXRjLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgIAorICAgICAgIHNubXBsaWIvc25tcF9lbnVtLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi9zeXN0ZW0uYywgCisgICAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi91Y2RfY29tcGF0LmM6CisKKyAgIHNpZ25pZmljYW50IHBhcmVudC9jaGlsZCBmZWF0dXJlIGNsYXNzaWZpY2F0aW9uCisKKzIwMTEtMDItMjUgMTY6MDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXB1c20uYzoKKworICAgY2xhc3NpZnkgYSBmZXcgY29tcG9uZW50cyBpbnRvIGEgdG9wLWxldmVsIGxpYm5ldHNubXAgY29tcG9uZW50CisKKzIwMTEtMDItMjUgMTY6MDYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL3NjYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYzoKKworICAgc3RydWN0dXJpemUgdGhlIHVzbSBmZWF0dXJlcworCisyMDExLTAyLTI1IDE2OjA2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIHN0cnVjdHVyZSB0aGUgY29udGFpbmVyIGZlYXR1cmVzIGludG8gYSBoaWVyYXJjaHkKKworMjAxMS0wMi0yNSAxNjowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBncm91cCB0aGUgbG9nZ2luZyBoYW5kbGVycyB1bmRlciBhIHBhcmVudCBmZWF0dXJlCisKKzIwMTEtMDItMjUgMTY6MDUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBmaXggdGhlIGV4cGVjdCBhcmd1bWVudCBjb3VudAorCisyMDExLTAyLTI1IDE2OjA1ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jczoKKworICAgZml4IHRoZSBuYW1lIG9mIHRoZSBleHBlY3RlZCBpbnB1dCBmaWxlCisKKzIwMTEtMDItMjUgMTY6MDUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLW1ha2Vkb2NzOgorCisgICBhcmd1bWVudCBwYXJzaW5nIGFuZCB1c2FnZSgpIG91dHB1dAorCisyMDExLTAyLTI1IDE2OjA0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsIGFnZW50L2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsIHNubXBsaWIvb2lkX3N0YXNoLmM6CisKKyAgIC0gYWRkZWQgdHdvIG9pZF9zdGFzaCBmdW5jdGlvbnMgYXMgaW5kaXZpZHVhbCBmZWF0dXJlcworICAgLSBjbGVhbmVkIHVwIHNvbWUgd2FybmluZ3MgaW4gdGhlIHRhYmxlX2l0ZXJhdG9yIGNvZGUKKwogMjAxMS0wMi0yNSAxMjo1NSAgZHRzMTIKIAogICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKQEAgLTYxMiw2ICszMjcwOCwxNjEgQEAKIAogICAgQXZvaWQgYSBwb3NzaWJsZSBjcmFzaCBpZiB0aGUgZW5naW5lSUQgaXMgbm90IGF2YWlsYWJsZSBvciBzZXQuCiAKKzIwMTEtMDItMjUgMDA6NDAgIGJhZXJtCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oOgorCisgICBhZGRpbmcgaWZkZWYgY29kZSBmb3IgbWluaW1hbGlzdCBzdXBwb3J0IG9mIGRpZmZtYW4gbWliCisKKzIwMTEtMDItMjQgMTk6MjEgIGJhZXJtCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oOgorCisgICBBZGRpbmcgbWluaW1hbGlzdCBpZmRlZnMgdG8gaG9zdCByZXNvdXJjZSBtaWIKKworMjAxMS0wMi0yNCAwNTo0NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIG1hcmsgdGhlIGRhdGFfbGlzdCBmdW5jdGlvbiB0aGF0J3Mgb25seSB1c2VkIGluIHN0YWNoX2NhY2hpbmcgYXMKKyAgIGEgZmVhdHVyZQorCisyMDExLTAyLTI0IDA1OjQ2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzoKKworICAgd2hvb3BzLgorCisyMDExLTAyLTI0IDA1OjQ2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYzoKKworICAgbW9yZSBtaXNzaW5nIHN0YXNoIHJlZmVyZW5jZXMKKworMjAxMS0wMi0yNCAwNTo0NSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6CisKKyAgIGlmZGVmZWQvZmVhdHVyZWQgb3V0IGEgbWlzc2luZyBzdGFzaF9jYWNoZSBzZWN0aW9uCisKKzIwMTEtMDItMjQgMDU6NDUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBtYWtlIHRoZSBwcmVmaXhfaW5mbyBtb3JlIGhpZXJhcmNoaWNhbCBhbmQgc3ViLWZlYXR1cmUgdGhlIHVudXNlZAorICAgb25lCisKKzIwMTEtMDItMjQgMDU6NDUgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlOgorCisgICBkbyBpbmNsdWRlIHRoZSBwZXJsL3B5dGhvbiBjb2RlIHdoZW4gc2VhcmNoaW5nIGZvciBmaWxlcworCisyMDExLTAyLTI0IDA1OjQ1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgbWFrZSB0aGUgc2VtaS11c2VkIHRhYmxlX3RkYXRhIGZ1bmN0aW9ucyBjaGlsZHJlbiBvZgorICAgdGFibGVfdGRhdGFfYWxsCisgICBpbnN0ZWFkIG9mIGp1c3QgdGFibGVfdGRhdGEKKworMjAxMS0wMi0yMyAyMjowMCAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIENvcnJlY3QgdHlwbworCisyMDExLTAyLTIzIDIxOjU0ICBtYWdmcgorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgQ29ycmVjdCB0eXBvCisKKzIwMTEtMDItMjMgMjE6MTAgIG5iYQorCisgICAqIGFnZW50L3NubXBfdmFycy5jOgorCisgICBwcm9wZXIgaW5jbHVkZSBvZiBwcm90b3R5cGUKKworMjAxMS0wMi0yMyAyMTowNyAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgY29tcGF0IHNvbWUgZmVhdHVyZSBoZWFkZXIgY2hpY2tlbiBhbmQgZWdnIHByb2JsZW1zCisKKzIwMTEtMDItMjMgMTU6MjcgIG5iYQorCisgICAqIHNubXBsaWIvc25tcHVzbS5jOgorCisgICB1bnNpZ25lZCBqdWdnbGluZyB0byByZW1vdmUgd2FybmluZ3MKKworMjAxMS0wMi0yMyAxNToyMyAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICB1bnNpZ25lZCBqdWdnbGluZyB0byByZW1vdmUgd2FybmluZ3MKKworMjAxMS0wMi0yMyAxNToyMCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliLmg6CisKKyAgIEVuYWJsZSAocHJvYmFibHkgZm9yZ290dGVuKSBpcEFkZHJlc3NQcmVmaXhUYWJsZQorCisyMDExLTAyLTIzIDE0OjMwICBoYXJkYWtlcgorCisgICAqICBsb2NhbC9taW5pbWFsaXN0LCBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2ssICAgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3MsICAgCisgICAgICBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlLCAgIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlLCAgIAorICAgICAgbG9jYWwvbWluaW1hbGlzdC9yZW1vdmVpZmRlZmNvZGUucGw6CisKKyAgIGFkZGVkIG90aGVyIG1pc3NpbmcgJ25ldycgZmlsZXMgbm90IGluY2x1ZGVkIGluIHRoZSBtaW5pbWFsaXN0CisgICBwYXRjaCBmaWxlCisKKzIwMTEtMDItMjMgMDk6NTQgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmM6CisKKyAgIExvYWRpbmcgSVB2NiBkYXRhIGlzIGEgbm8tbm8gd2hlbiBJUHY2IG5vdCBlbmFibGVkCisKIDIwMTEtMDItMjMgMDk6MzYgIG5iYQogCiAgICAqIGFwcHMvc25tcHRhYmxlLmM6CkBAIC02MjUsNDQgKzMyODc2LDM0NyBAQAogCiAgICBGcmVlQlNEIDggc3VwcG9ydAogCisyMDExLTAyLTIzIDAxOjQ4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaDoKKworICAgYWRkZWQgbWlzc2luZyBuZXQtc25tcC1mZWF0dXJlcy5oCisKKzIwMTEtMDItMjMgMDA6MDEgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBNYWtlZmlsZS5ydWxlcywgTWFrZWZpbGUudG9wLCBhZ2VudC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfaW5kZXguYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsICAKKyAgICAgICBhZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYywgYWdlbnQvaGVscGVycy90YWJsZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL01ha2VmaWxlLmluLCAgIAorICAgICAgYXBwcy9hZ2VudHh0cmFwLmMsIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wbmV0c3RhdC9uZXRzdGF0LmgsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsICAKKyAgICAgICBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgCisgICAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24sICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBwZXJsL09JRC9PSUQueHMsICAgCisgICAgICBwZXJsL1NOTVAvU05NUC54cywgcGVybC9hZ2VudC9hZ2VudC54cywgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2FsbGJhY2suYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsIAorICAgICAgICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMsIHNubXBsaWIvY29udGFpbmVyX251bGwuYywgICAKKyAgICAgIHNubXBsaWIvZGF0YV9saXN0LmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYywgc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMsICAgCisgICAgICBzbm1wbGliL2ZpbGVfdXRpbHMuYywgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL2tleXRvb2xzLmMsICAgCisgICAgICBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvbWliLmMsIHNubXBsaWIvb2lkX3N0YXNoLmMsICAgCisgICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wLXRjLmMsIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2VudW0uYywgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfc2VjbW9kLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcGtzbS5jLCBzbm1wbGliL3NubXB0c20uYywgc25tcGxpYi9zbm1wdXNtLmMsICAgCisgICAgICBzbm1wbGliL3NubXB2My5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3RleHRfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvdWNkX2NvbXBhdC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZToKKworICAgTkVXUzogcGFja2FnaW5nOiBFbmFibGUgbWljcm8tYW5kLW1hY3JvLWZlYXR1cmUgbWFuYWdlbWVudCB3aXRoaW4KKyAgIE5ldC1TTk1QOyB0aGlzIGFkZHMgYSBudW1iZXIgb2YgbmV3IGZsYWdzIHRvIGNvbmZpZ3VyZQorICAgKC0tZW5hYmxlLW1pbmltYWxpc3QgYW5kIC0tZW5hYmxlLXJlYWQtb25seSkuIFRoZXNlIGNoYW5nZXMgYXJlCisgICBkZXNpZ25lZCB0byByZW1vdmUgbXVjaCBvZiB0aGUgaW5saW5lIGNvZGUgdGhhdCBpc24ndCBhbHdheXMKKyAgIG5lY2Vzc2FyeSBvciBkZXNpcmVkLiBTY3JpcHRzIGV4aXN0IChhbmQgd2lsbCBiZSBpbXByb3ZlZCkgdG8KKyAgIHN0aXAgb3V0IHVudXNlZCBjb21wb25lbnRzIGZyb20gdGhlIGNvZGUgZW50aXJlbHkgdG8gZW5hYmxlIGEKKyAgIHNob3J0ZXIgcmV2aWV3IHByb2Nlc3MgZm9yIHVwZ3JhZGluZyB0byBuZXcgcmVsZWFzZXMuIFRoaXMgd29yaworICAgd2FzIGRvbmUgYnkgV2VzIEhhcmRha2VyIGFuZCBNaWNoYWVsIEJhZXIgZnJvbSBTUEFSVEEsIEluYy4gYnV0CisgICBpcyBiZWluZyBjaGVja2VkIGluIGFzIGEgbGFyZ2UgcGF0Y2ggc2luY2UgY29udmVydGluZyB0aGUgbWljcm8KKyAgIHBhdGNoZXMgZnJvbSBnaXQgdG8gc3ZuIHR1cmVuZCBvdXQgdG8gYmUgaW1wb3NzaWJsZQorCisyMDExLTAyLTIyIDIzOjU1ICBoYXJkYWtlcgorCisgICAqIEZBUToKKworICAgdXNlIHRoZSB3aWtpIFVSTCBpbnN0ZWFkIG9mIHRoZSB0dXRvcmlhbC01IFVSTCBmb3IgdGhlIHNubXB0cmFwCisgICB0dXRvcmlhbAorCisyMDExLTAyLTIxIDIyOjQwICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmM6CisKKyAgIHByb3BlciBwcm9jZXNzIHN0YXR1cyB2YWx1ZXMgZm9yIG5ldGJzZAorCisyMDExLTAyLTIxIDIyOjM5ICBuYmEKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGNvbmRpdGlvbmFsaXplIHZhcmlhYmxlCisKKzIwMTEtMDItMjEgMjI6MjAgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oOgorCisgICB0Y3AtbWliL3VkcC1taWIgc3VwcG9ydCBmb3IgdGhlICpic2RzCisKKzIwMTEtMDItMjEgMjI6MTYgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2ZyZWVic2Q0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jOgorCisgICB0Y3AtbWliL3VkcC1taWIgc3VwcG9ydCBmb3IgdGhlICpic2RzCisKKzIwMTEtMDItMjEgMjI6MDUgIG5iYQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIFByb3Blcmx5IGVuZCBkZWJ1ZyBtZXNzYWdlIHdpdGggbmV3bGluZQorCisyMDExLTAyLTIxIDIyOjA0ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYzoKKworICAgcmVtb3ZlIHZhciB0aGF0IHNoYWRvd3MgdGhlIHVzZWZ1bCBvbmUKKworMjAxMS0wMi0yMSAyMjowMiAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jOgorCisgICBtYWpvciBmaWRkbGluZyB0byBnZXQgdGhpbmdzIHdvcmtpbmcgZm9yIG9wZW5ic2QgdG9vLiBUaGlzIHNob3VsZAorICAgcmVhbGx5IGJlIHJld29ya2VkIHRvIHVzZSB0aGUgdGNwLW1pYi91ZHAtbWliL2RhdGFfYWNjZXNzCisKKzIwMTEtMDItMjEgMjE6NTkgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmM6CisKKyAgIGZpeCB0Y3Agc3RhdGVzIGZvciBkcmFnb25mbHlic2QKKworMjAxMS0wMi0yMSAyMTo1NyAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkuaDoKKworICAgZW5hYmxlIG5ldyB0Y3AvdWRwIG1pYnMgZm9yIHNvbGFyaXMKKworMjAxMS0wMi0yMSAyMTo1MyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jOgorCisgICBEbyBub3QgdXNlIGM5OQorCiAyMDExLTAyLTIxIDE5OjA4ICBoYXJkYWtlcgogCiAgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgogCiAgICBVcGRhdGVkIGNvbW1lbnQgYWJvdXQgd2hlcmUgbWFrZXJlbGVhc2UgY29tZXMgZnJvbSAobm93IGdpdGh1YikKIAotMjAxMS0wMi0yMSAxMToxNCAgYnZhc3NjaGUKLQotICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKLQotICAgQmFja3BvcnRlZCByMTk0NTQgZnJvbSB0aGUgdHJ1bmsgYW5kIHRoZXJlYnkgZml4ZWQgdGhpcyBWYWxncmluZAotICAgY29tcGxhaW50OgotICAgCi0gICA9PTYyODc9PSBJbnZhbGlkIHJlYWQgb2Ygc2l6ZSA4Ci0gICA9PTYyODc9PSBhdCAweDRFNkNDQUU6IG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0Ci0gICAodGFibGVfZGF0YXNldC5jOjE4NikKLSAgID09NjI4Nz09IGJ5IDB4NTEyMTk3NDogc2h1dGRvd25fbm90aWZpY2F0aW9uX2xvZwotICAgKG5vdGlmaWNhdGlvbl9sb2cuYzo1NjQpCi0gICA9PTYyODc9PSBieSAweDUxOTQxREI6IF9zaHV0ZG93bl9taWJfbW9kdWxlcwotICAgKG1pYl9tb2R1bGVfc2h1dGRvd24uaDozMikKLSAgID09NjI4Nz09IGJ5IDB4NTRCMTRGNDogc25tcF9jYWxsX2NhbGxiYWNrcyAoY2FsbGJhY2suYzozNDQpCi0gICA9PTYyODc9PSBieSAweDU0OEI1OEI6IHNubXBfc2h1dGRvd24gKHNubXBfYXBpLmM6ODYyKQotICAgPT02Mjg3PT0gYnkgMHg0MDRDMDY6IG1haW4gKHNubXBkLmM6MTA2MCkKLSAgID09NjI4Nz09IEFkZHJlc3MgMHg2ODZmMzE4IGlzIDI0IGJ5dGVzIGluc2lkZSBhIGJsb2NrIG9mIHNpemUgNDAKLSAgIGZyZWUnZAotICAgPT02Mjg3PT0gYXQgMHg0QTA2MEUwOiBmcmVlICh2Z19yZXBsYWNlX21hbGxvYy5jOjM2NikKLSAgID09NjI4Nz09IGJ5IDB4NEU2QUIxNjogbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZQotICAgKHRhYmxlX2RhdGEuYzozMjApCi0gICA9PTYyODc9PSBieSAweDRFNkNDODQ6IG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0Ci0gICAodGFibGVfZGF0YXNldC5jOjE4MCkKLSAgID09NjI4Nz09IGJ5IDB4NTEyMTk3NDogc2h1dGRvd25fbm90aWZpY2F0aW9uX2xvZwotICAgKG5vdGlmaWNhdGlvbl9sb2cuYzo1NjQpCi0gICA9PTYyODc9PSBieSAweDUxOTQxREI6IF9zaHV0ZG93bl9taWJfbW9kdWxlcwotICAgKG1pYl9tb2R1bGVfc2h1dGRvd24uaDozMikKLSAgID09NjI4Nz09IGJ5IDB4NTRCMTRGNDogc25tcF9jYWxsX2NhbGxiYWNrcyAoY2FsbGJhY2suYzozNDQpCi0gICA9PTYyODc9PSBieSAweDU0OEI1OEI6IHNubXBfc2h1dGRvd24gKHNubXBfYXBpLmM6ODYyKQotICAgPT02Mjg3PT0gYnkgMHg0MDRDMDY6IG1haW4gKHNubXBkLmM6MTA2MCkKLQogMjAxMS0wMi0yMCAwOToyNCAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CkBAIC02NzEsNiArMzMyMjUsNjEgQEAKICAgIFVEUCBzb2NrZXQKICAgIChGaXhlcyBhIGJ1ZyBpbnRyb2R1Y2VkIGluIHIxOTUxMS4pCiAKKzIwMTEtMDItMTggMTQ6NDMgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIENIQU5HRVM6IHNubXBkOiByZXdvcmtlZCBoclN0b3JhZ2VUYWJsZSB0byBzdXBwb3J0IGxhcmdlCisgICBmaWxlc3lzdGVtcy4KKyAgIAorICAgVGhlIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyBkb2VzIG5vdCByZXBvcnQgcmVhbCBhbGxvY2F0aW9uIHVuaXQKKyAgIHNpemUsCisgICBidXQgc29tZSBjYWxjdWxhdGVkIHZhbHVlIHNvIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyAqCisgICBoclN0b3JhZ2VTaXplCisgICBnaXZlcyByZWFsIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0uCisgICAKKyAgIFRoaXMgY2FsY3VsYXRpb24gaGFwcGVucyBvbmx5IHdoZW4gaHJTdG9yYWdlU2l6ZSBpcyB0b28gc21hbGwKKyAgICgzMmJpdHMpCisgICBmb3IgZmlsZXN5c3RlbSBzaXplLCBlLmcuIGZpbGVzeXN0ZW1zIGxhcmdlciB0aGFuIDhUQiB3aXRoIDQwOTYKKyAgIGJ5dGVzCisgICBibG9jayBzaXplLgorICAgCisgICBUaGlzIGNhbGN1bGF0aW9uIGNhbiBiZSB0dXJuZWQgb2ZmIGJ5ICdyZWFsU3RvcmFnZVVuaXRzJyBjb25maWcKKyAgIG9wdGlvbi4KKworMjAxMS0wMi0xOCAxNDoyOSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaDoKKworICAgQWRkIEpGUyBhbmQgWEZTIHRvIGxpc3Qgb2Yga25vd24gZmlsZXN1c3RlbXMKKworMjAxMS0wMi0xNyAxMToyOCAganNhZnJhbmVrCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICBGaXhlZCBzbm1wLWJyaWRnZS1taWIgaW4gc3RhbmRhbG9uZSAoYWdlbnR4KSB2ZXJzaW9uLgorICAgRG9uJ3QgZGVjbGFyZSBsb2NhbCB2YXJpYWJsZXMgaW5zaWRlIGJsb2NrLiBQYXRjaCBwcm92aWRlZCBieQorICAgSmVucyBPc3RlcmthbXAuCisKKzIwMTEtMDItMTYgMTQ6NTYgIGpzYWZyYW5laworCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgRml4ZWQgc25tcC1icmlkZ2UtbWliIHdoZW4gd29ya2luZyBpbiB0aGUgZW1iZWRkZWQgcGVybC4KKworMjAxMS0wMi0xNiAxMzoxNiAganNhZnJhbmVrCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICBGaXhlZCBHRVRORVhUIHByb2Nlc3NpbmcgaW4gc25tcC1icmlkZ2UtbWliLgorCiAyMDExLTAyLTE1IDIyOjI0ICBuYmEKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jOgpAQCAtNjgzLDEyICszMzI5MiwyNCBAQAogCiAgICByZW1vdmUgcmVkdW5kYW50IGluY2x1ZGVzCiAKLTIwMTEtMDItMTUgMjE6NDggIG5iYQorMjAxMS0wMi0xNSAyMTo0NiAgbmJhCiAKLSAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorICAgKiBjb25maWd1cmU6CiAKICAgIHJlcnVuIGF1dG9oZWFkZXIvYXV0b2NvbmYKIAorMjAxMS0wMi0xNSAyMTozMyAgbmJhCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGluY2x1ZGUgc3lzL3R5cGVzLmggYmVmb3JlIHN5cy9zb2NrZXQuaAorCisyMDExLTAyLTE1IDIxOjI2ICBuYmEKKworICAgKiBtNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00OgorCisgICBUb28gbXVjaCBxdW90aW5nIGlzIGJhZAorCiAyMDExLTAyLTE1IDIxOjExICBuYmEKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIApAQCAtNzEwLDYgKzMzMzMxLDM4IEBACiAKICAgIEZpbHRlciBJUHY2IGVudHJpZXMgZnJvbSBJUHY0IHRhYmxlCiAKKzIwMTEtMDItMTUgMjA6NDIgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmM6CisKKyAgIFByb3BlciB1c2Ugb2YgZ2V0cHJvYzIgYW5kIGRyYWdvbmZseSBzdXBwb3J0CisKKzIwMTEtMDItMTUgMjA6NDEgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmM6CisKKyAgIGdldHZmc3N0YXQgaXMgb25seSBmb3IgTmV0QlNECisKKzIwMTEtMDItMTUgMjA6MzkgIG5iYQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBEZXRlY3QgbmVlZCBmb3IgLWxrdm0gaW4gcHJvcGVyIHRpbWUKKworMjAxMS0wMi0xNSAxOTo0MiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICByZW1vdmUgdGhlIHN0YXRlbWVudCBhYm91dCBlbmFibGluZyBzdGRlcnIgYnkgZGVmYXVsdC4KKworMjAxMS0wMi0xNSAxOTo0MiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKKworICAgcmVtb3ZlIDMgZnVuY3Rpb25zIHRoYXQgYXMgZmFyIGFzIEkgY2FuIHRlbGwgaGF2ZSBwb3NzaWJseSBuZXZlcgorICAgYmVlbiB1c2VkCisKIDIwMTEtMDItMTQgMTQ6MzggIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvc25tcGQuYzoKQEAgLTczOCw2ICszMzM5MSwxOSBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDMxNTI0MTI6IEhhbmRsZSAoYW5kIHJlcG9ydCkgcHJvYmxlbXMKICAgIHJlYWRpbmcgL3Byb2Mvdm1zdGF0CiAKKzIwMTEtMDItMDkgMDc6MzQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oOgorCisgICBCdWlsZGluZyBETEwgYW5kIFBlcmwgbW9kdWxlcyB3aXRoIHdpbjMyL2J1aWxkLmJhdCB3b3JrcyBhZ2Fpbi4KKworMjAxMS0wMi0wOCAxOTozOCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaDoKKworICAgUmVtb3ZlIHRoZSBmdW5jdGlvbnMgbWFya2VkIGFzIGRlcHJlY2F0ZWQgYW5kIHNhZmUgZm9yIHJlbW92YWwgaW4KKyAgIDUuNi4KKwogMjAxMS0wMi0wOCAxNzo0MSAgaGFyZGFrZXIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54cywgcGVybC9hZ2VudC9hZ2VudC5wbToKQEAgLTc1Myw2ICszMzQxOSwzMSBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEZpeCBhIHN0cmxlbiBjYWxjdWxhdGlvbiBhcyBwb2ludGVkIG91dCBieQogICAgS29uc3RhbnRpbiBCYXlkYXJvdgogCisyMDExLTAyLTA3IDIwOjA3ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSAzIG5ldyBTU0ggY29uZmlnIHRva2VucworCisyMDExLTAyLTA3IDIwOjA3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGxpYm5ldHNubXA6IG1hZGUgdGhlIFNTSCB0cmFuc3BvcnQgY29uZmlndXJhYmxlIGFzIGl0CisgICBzaG91bGQgYmUuCisKKzIwMTEtMDItMDcgMjA6MDcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaDoKKworICAgQWRkZWQgZGVmYXVsdF9zdG9yZSBzdHJpbmdzIGZvciBzc2g6IHVzZXJuYW1lLCBwdWJrZXksIHByaXZrZXkKKworMjAxMS0wMi0wNiAwNjozNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIFNpbXBsaWZ5IHRoZSBjb250cm9sIGZsb3cgdG8gYWxsb3cgZm9yIG1vcmUgb3B0aW1pemF0aW9uLgorCiAyMDExLTAyLTAzIDIyOjQyICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtNzYwLDYgKzMzNDUxLDIwIEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDMxNzE4Nzg6IFVzaW5nIFNOTVB2MyBjb250ZXh0IGRvZXMgbm90CiAgICB3b3JrCiAKKzIwMTEtMDItMDIgMDc6MDkgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgSW5jbHVkZSB0aGUgVVNJTkdfIHZhcmlhYmxlcyBmcm9tIHRoZSBhZ2VudCBsaWJyYXJ5IGFzIHdlbGwsIGluCisgICBwYXJ0aWN1bGFyIHRoZQorICAgVVNJTkdfQUdFTlRYXyogdmFyaWFibGVzLgorCisyMDExLTAyLTAxIDEzOjA3ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmM6CisKKyAgIERvbid0IGNoZWNrIGZvciAzMi82NGJpdCB3cmFwIGluIGNhbGN1bGF0ZWQgZW50cmllcy4KKwogMjAxMS0wMi0wMSAwOTo0MSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jOgpAQCAtNzc1LDYgKzMzNDgwLDEyIEBACiAgICBsb25nIHRpbWUgb2YKICAgIHVwdGltZSBhbmQgaXQgaXMgdmVyeSBoYXJkIHRvIHJlcHJvZHVjZS4KIAorMjAxMS0wMi0wMSAwNzoxOSAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBSZW1vdmUgc29tZSB1bnVzZWQgaW5jbHVkZXMKKwogMjAxMS0wMS0zMSAyMjozOSAgbmJhCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmM6CkBAIC04MDQsNiArMzM1MTUsMTggQEAKIAogICAgcHJvcGVybHkgbmFtZSBpbml0YWxpemVyIGZ1bmN0aW9uIGZvciBjcHVfa2luZm8KIAorMjAxMS0wMS0zMCAxNToyMSAgbWFnZnIKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgUmVkdWNlIHRoZSBudW1iZXIgb2YgdXNlZCBpbmNsdWRlIGZpbGVzLgorCisyMDExLTAxLTMwIDA5OjM1ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBtaXNzaW5nIGZ1bmN0aW9uIGRlY2xhcmF0aW9uCisKIDIwMTEtMDEtMzAgMDE6MDYgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKQEAgLTgxMSw2ICszMzUzNCwxMiBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzE1MTg5NzogZmQgbGVhayB3LyAvcHJvYy9wYXJ0aXRpb25zCiAgICByZWFkIGluIGRpc2tpbwogCisyMDExLTAxLTI5IDIzOjM2ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYzoKKworICAgTkVXUzogc25tcGQ6IEJVRzogMzE2NjU2ODogaHJTeXN0ZW1Qcm9jZXNzZXMgbWlzc2luZyBpbiA1LjYvNS42LjEKKwogMjAxMS0wMS0yNyAwOTozNSAgZHRzMTIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgpAQCAtODI1LDYgKzMzNTU0LDE4IEBACiAgICBDSEFOR0VTOiBtaWIyYzogbWFrZSB0aGUgbWliMmMgZm9yZWFjaCByYW5nZXMgd29yayBhcyBhZHZlcnRpc2VkCiAgICBpbiB0aGUgY29tbWVudHMuCiAKKzIwMTEtMDEtMjYgMTY6NDkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI3c25tcHYzRGVmYXVsdHNfc2ltcGxlOgorCisgICBhIHRlc3QgdG8gZW5zdXJlIHYzL1VTTSBzbm1wLmNvbmYgc2V0dGluZ3Mgd29yaworCisyMDExLTAxLTI2IDE2OjQ5ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICByZW1vdmUgdGVzdG9wdHMKKwogMjAxMS0wMS0yNiAwOToxMiAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgpAQCAtODM2LDExICszMzU3Nyw1NCBAQAogICAgZmdldHMoKSBmcm9tIGl0LiBzbm1wZCBzaG91bGQgY29udGludWUgd2l0aCBvdGhlciBwcm9jZXNzZXMgYW5kCiAgICBub3QgdG8gc3RvcC4KIAotMjAxMS0wMS0xOSAwNjoyMCAgbmJhCisyMDExLTAxLTE5IDEzOjU3ICBqc2FmcmFuZWsKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMToKKworICAgTWFrZSB1cyBjb21wYXRpYmxlIHdpdGggcnBtLTQuOSwgcnBtR2V0RmlsZXN5c3RlbUxpc3QgZG9lcyBub3QKKyAgIGV4aXN0IGFueW1vcmUsIHNvIHRoZSBjb25maWd1cmUgc2NyaXB0IHNob3VsZCBub3QgY2hlY2sgaXQuCisKKzIwMTEtMDEtMTkgMDY6MzEgIG5iYQorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMToKKworICAgZGlza0lPTEF4IHJlcXVpcmVzIGV4cCB3aGljaCBtYXkgcmVxdWlyZSAtbG0KKworMjAxMS0wMS0xOCAyMjozOSAgbmJhCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgYXV0b2hlYWRlcgorCisyMDExLTAxLTE4IDIyOjM3ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg6CisKKyAgIEZpbmQgcHJvcGVyIGlmLW1pYiBpbnRlcmZhY2UgZm9yIE5ldEJTRAorCisyMDExLTAxLTE4IDIyOjM2ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CisKKyAgIHR5cG8KKworMjAxMS0wMS0xOCAyMjozNSAgbmJhCiAKICAgICogYWNjb25maWcuaDoKIAotICAgRGVmaW5lIERSQUdPTkZMWUlECisgICBkZWZpbmUgZHJhZ29uZmx5aWQKKworMjAxMS0wMS0xNCAxMzoyNCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBBZGQgSVB2NiBzdXBwb3J0IGZvciBjcmVhdGluZyByb3dzIGluIGlwQWRkcmVzc3RhYmxlLgorICAgCisgICBVc2luZyBTTk1QIFNFVCwgaXQgaXMgbm93IHBvc3NpYmxlIHRvIGNyZWF0ZSBhbmQgZGVzdHJveSBJUHY2CisgICBhZGRyZXNzZXMgb24gYW4gaW50ZXJmYWNlLgogCiAyMDExLTAxLTE0IDEyOjI4ICBqc2FmcmFuZWsKIApAQCAtODY2LDYgKzMzNjUwLDEyIEBACiAKICAgIHJlbW92ZSBjb21wbGV0ZWx5IHVzZWxlc3MgYW5kIG5vbnNlbnNpY2FsIGNvZGUKIAorMjAxMS0wMS0xMyAxNzoyNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGFsbG9jYXRlIHNwYWNlIGZvciBhcnJheSBOVUxMIHRlcm1pbmF0aW9uCisKIDIwMTEtMDEtMTMgMTU6NTYgIGR0czEyCiAKICAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CkBAIC04NzksOSArMzM2NjksMTYgQEAKIAogICAgUmVtb3ZlIEMrKyBjb21tZW50cwogCisyMDExLTAxLTEzIDEzOjE3ICBkdHMxMgorCisgICAqIGFnZW50L2F1dG9fbmxpc3QuYzoKKworICAgRml4IGJyb2tlbiBwYXRjaAorCiAyMDExLTAxLTEzIDEyOjE0ICBkdHMxMgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMToKIAogICAgQ29uZmlndXJlIGZpeGVzIGZvciBEcmFnb25GbHkgc3VwcG9ydAogCkBAIC05MDAsNiArMzM2OTcsMzAgQEAKIAogICAgRml4IHR5cG8KIAorMjAxMS0wMS0xMiAyMToyMyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOgorCisgICBtZXJnZSBkdXBsaWNhdGVkIHNodXRkb3duIGZ1bmN0aW9ucworCisyMDExLTAxLTEyIDIwOjExICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg6CisKKyAgIFJlaW1wbGVtZW50IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKCkgYnkgYWRkaW5nIHRoZSBmbGFnCisgICBORVRTTk1QX0lURVJBVE9SX09XTlNfSUlORk8gZm9yCisgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8uIFJlbW92ZQorICAgbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlcjIoKSBiZWNhdXNlIGl0IGlzIG5vdworICAgc3VwZXJmbHVvdXMuCisKKzIwMTEtMDEtMTIgMTk6MjIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIEF2b2lkIHRoYXQgdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBhIG1pc3NpbmcgZGVjbGFyYXRpb24gZm9yCisgICBuZXRzbm1wX2NlcnRzX2FnZW50X2luaXQoKS4KKwogMjAxMS0wMS0xMiAxOToyMCAgYnZhc3NjaGUKIAogICAgKiAKQEAgLTkyNywyOCArMzM3NDgsMTEgQEAKICAgIAogICAgb3JpZ2luYWwgcGF0Y2ggZml4ZWQgc2V2ZXJhbCBpc3N1ZXMsIG90aGVyIHBhcnRzIGFwcGxpZWQgZWFybGllcgogCi0yMDExLTAxLTEyIDE0OjM3ICByc3RvcnkKKzIwMTEtMDEtMTEgMTc6MjcgIHJzdG9yeQogCi0gICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYywKLSAgICAgICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKLSAgICAgICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMsICAKLSAgICAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCi0gICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMsCi0gICAgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IE1JQi1zcGVjaWZpYyBsZWFrLWF0LWV4aXQgZml4ZXMuCi0gICAKLSAgIGJhY2twb3J0IGFwcGxpY2FibGUgcGFydHMgb2YgcjE5NTMzIGZyb20gdHJ1bmsKKyAgIGRvIG5vdCBpbmNsdWRlIGlwdjYgc3RydWN0IGlmIGlwdjYgaXMgbm90IGVuYWJsZWQKIAogMjAxMS0wMS0xMSAxNjowNCAgZHRzMTIKIApAQCAtOTkzLDI0ICszMzc5NywyMiBAQAogCiAyMDExLTAxLTExIDE0OjM2ICBkdHMxMgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczoKIAogICAgTmV0QlNEL0RyYWdvbkZseSAnc3RydWN0IGlmbmV0JyByZXF1aXJlcyBLRVJORUwsIGJ1dCBub3QgX0tFUk5FTAogICAgW0Zyb20gTmV0QlNEIHBhdGNoIGFyY2hpdmVdCiAgICAoSSBob3BlIEkndmUgZ290IHRoaXMgb25lIHJpZ2h0ISkKIAotMjAxMS0wMS0xMSAxNDoxNCAgcnN0b3J5CisyMDExLTAxLTExIDEzOjM0ICBqc2FmcmFuZWsKIAotICAgKiAKLSAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jLAotICAgICAgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmM6CisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgogCi0gICByZXZlcnQgUEFUQ0ggMzA1MzQzNjogdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzIGludmFsaWQKLSAgIG1lbW9yeSBhY2Nlc3MKKyAgIENIQU5HRVM6IHNubXBsaWI6IGZyb20gQmlsbCBGZW5uZXI6IGZpeCBzZW5kaW5nIG9mIFVEUCByZXNwb25zZXMKKyAgIGZyb20gbXVsdGlob21lZCBhZ2VudHMuCiAgICAKLSAgIHRoZSBidWcgdGhpcyBpcyBmaXhpbmcgd2FzIGludHJvZHVjZWQgaW4gcjE3NzE5LCBhbmQgZml4ZWQgaW4KLSAgIHIxNzg2MS4KKyAgIFRyeSB0byBzZW5kIHRoZSByZXNwb25zZSBhcyBpdCB3YXMgYmVmb3JlIE5ldC1TTk1QIDUuNiAoYXNzdW1pbmcKKyAgIHRoZSBhcHByb3ByaWF0ZSByZXF1ZXN0IHdhcyB1bmljYXN0KSBhbmQgb25seSBpZiBpdCBmYWlscyB0cnkgdG8KKyAgIHNldCBpZl9pbmRleCAodGhlIHJlcXVlc3QgbXVzdCBiZSBicm9hZGNhc3QpLgogCiAyMDExLTAxLTExIDEzOjIyICBkdHMxMgogCkBAIC0xMDIxLDIxICszMzgyMywyOCBAQAogCiAyMDExLTAxLTExIDEyOjI0ICBkdHMxMgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgogCiAgICBBZGRpdGlvbmFsIGhlYWRlcnMgd2hlbiB0ZXN0aW5nIGZvciBJUHY2IGhlYWRlcnMKICAgIFtGcm9tIE5ldEJTRCBwYXRjaCBhcmNoaXZlXQogCiAyMDExLTAxLTExIDEyOjE0ICBkdHMxMgogCi0gICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6CiAKICAgIE1pc3NpbmcgdHlwZSB1bmRlciBkYXJ3aW4KICAgIFtGcm9tIE5ldEJTRCBwYXRjaCBhcmNoaXZlXQogCisyMDExLTAxLTExIDEyOjEwICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBOZXRCU0Qgc3VwcG9ydCBmb3IgRGlzayBJL08gc3RhdHMKKyAgIFtGcm9tIE5ldEJTRCBwYXRjaCBhcmNoaXZlXQorCiAyMDExLTAxLTExIDEyOjAxICBkdHMxMgogCi0gICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAogICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAogICAgSGFuZGxlIHN5c3RlbXMgd2l0aCAnc3RydWN0IHRpbWVzcGVjIGlmbmV0LmlmX2xhc3RjaGFuZ2UnIChyYXRoZXIKQEAgLTEwNjEsNiArMzM4NzAsMTIgQEAKICAgIENIQU5HRVM6IE5ldEJTRDogUmV0cmlldmUgTUlCLUlJIG5ldHdvcmsgc3RhdGlzdGljcyB2aWEgc3lzY3RsCiAgICBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KIAorMjAxMS0wMS0xMSAwNzowNCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBGaXggZm9yIHBjaV9sb29rdXBfbmFtZSBhbmQgUkhFTDQKKwogMjAxMS0wMS0xMCAxNjo1NiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jOgpAQCAtMTA5MSw2ICszMzkwNiwyMyBAQAogICAgRml4IGRpdmlkZS1ieS16ZXJvIGVycm9yIGluIENQVSBwZXJmb3JtYW5jZSBzdGF0aXN0aWNzCiAgICBbRnJvbSBOZXRCU0QgcGF0Y2ggYXJjaGl2ZV0KIAorMjAxMS0wMS0wOSAyMjo1NCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczI6CisKKyAgIENIQU5HRVM6IE9wZW5CU0Q6IFVwZGF0ZSBTV1J1biBjb2RlIHRvIHVzZSBrdm1fZ2V0cHJvYzIKKyAgIFtGcm9tIE9wZW5CU0QgcGF0Y2ggYXJjaGl2ZV0KKworMjAxMS0wMS0wOSAyMTozMCAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBDSEFOR0VTOiBidWlsZDogT3BlbkJTRDogRml4IG9yZGVyIG9mIGhlYWRlcnMgd2hlbiBjaGVja2luZworICAgPG5ldGluZXQvaW5fcGNiLmg+CisgICBbRnJvbSBPcGVuQlNEIHBhdGNoIGFyY2hpdmVdCisKIDIwMTEtMDEtMDkgMTk6NDQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYzoKQEAgLTExMTUsMTMgKzMzOTQ3LDIyIEBACiAKICAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYywgICAKICAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZC5jOgorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9uZXRic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYzoKIAogICAgc3lzY3RsIHRha2VzIGEgJ3NpemVfdCcgdmFyaWFibGUgZm9yIHRoZSBzaXplIHBhcmFtZXRlcgogCisyMDExLTAxLTA4IDA4OjMwICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfc2VjdXJpdHlfbW9kdWxlczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEZpeCAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcyBoYW5kbGluZworICAgQWxsb3cgcmVwZWF0ZWQgbW9kdWxlcyAodHNtLHRzbSkgYXMgd2VsbCBhcyBkZWZhaWx0IG1vZHVsZXMgKHVzbSkKKyAgIE1vdmUgdGhlIGdlbmVyYXRpb24gb2YgdGhlIGZpbGVzIGFmdGVyIHRoZSBjaGVja2luZworCiAyMDExLTAxLTA4IDAwOjQ3ICBtYWdmcgogCi0gICAqIGFjY29uZmlnLmg6CisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKICAgIFVwZGF0ZSBhY2NvbmZpZy5oIHdpdGggY2hhbmdlcyBmcm9tIHIxOTgxOS4KICAgIFJlcnVuIGF1dG9oZWFkZXIuCkBAIC0xMjc3LDEyICszNDExOCw0NSBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDI5NDE4MTE6IEhhbmRsZSBzdWNjZXNzZnVsIHJlcXVlc3RzIHdpdGgKICAgIHJlcUlEIDAKIAotMjAxMS0wMS0wNSAxNjozMSAgZHRzMTIKKzIwMTEtMDEtMDYgMDk6MzggIGJ2YXNzY2hlCiAKLSAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5jOgogCi0gICBVc2UgdGhlIGFwcHJvcHJpYXRlIEFQSSBjYWxsIGZvciByZXBvcnRpbmcgY29uZmlnIGVycm9ycy4KLSAgICgiRG9uJ3QgYmUgc28gaW1wYXRpZW50LCBEYXZlLi4uLiIpCisgICBTcGVsbGluZyBmaXg6IEluaXRpYWx6aWVzIC0+IEluaXRpYWxpemVzLgorCisyMDExLTAxLTA2IDA5OjM1ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcjIoKS4KKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigpLgorICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIG5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8oKS4KKyAgIENIQU5HRVM6IGFnZW50OiBGaXhlZCBsZWFrLWF0LWV4aXQgdHJpZ2dlcmVkIGJ5IHNubXBOb3RpZnlUYWJsZS4KKyAgIENIQU5HRVM6IGFnZW50OiBGaXhlZCBsZWFrLWF0LWV4aXQgdHJpZ2dlcmVkIGJ5CisgICBzbm1wVGFyZ2V0QWRkclRhYmxlLgorICAgQWxzbywgcmVzdG9yZWQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgb2YKKyAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoKS4KKworMjAxMS0wMS0wNiAwNDo0NSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGluY2x1ZGUgc3lzL3NvY2tldC5oIGlmIGF2YWlsYWJsZQogCiAyMDExLTAxLTA1IDE0OjA2ICBkdHMxMgogCkBAIC0xMjk4LDEyICszNDE3MiwxNjQgQEAKICAgIENIQU5HRVM6IHNubXB0cmFwZDogQlVHUzogMzE1MTI1NDogRml4IGNyYXNoIHdpdGggaW52YWxpZAogICAgdHJhcGhhbmRsZSBkaXJlY3RpdmUKIAorMjAxMS0wMS0wNSAwOTo1NSAgZHRzMTIKKworICAgKiBhcHBzL3NubXB3YWxrLmM6CisKKyAgIEV4cGFuZCB0YWIgY2hhcmFjdGVycworCisyMDExLTAxLTA0IDIyOjA2ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ2hlY2sgdGhhdCB0aGUgYXJndW1lbnQgdG8KKyAgIG5ldHNubXBfdHJhbnNwb3J0X2NvcHkgaXMgbm9uLU5VTEwKKwogMjAxMS0wMS0wNCAxODoyNCAgaGFyZGFrZXIKIAogICAgKiBDT1BZSU5HOgogCiAgICBDb3B5cmlnaHQgdXBkYXRlIGZvciAyMDExCiAKKzIwMTEtMDEtMDQgMTI6MDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6CisKKyAgIEZpeCBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIFdpbjMyIE1JQi1JSQorICAgaW1wbGVtZW50YXRpb24uCisKKzIwMTEtMDEtMDMgMTk6NDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYzoKKworICAgUmVtb3ZlZCB0d28gdW51c2VkIHZhcmlhYmxlcy4KKworMjAxMS0wMS0wMyAxOTo0NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIEZpeGVkIGEgcmVjZW50bHkgaW50cm9kdWNlZCBtaXNtYXRjaCBiZXR3ZWVuIGZvcm1hdCBzcGVjaWZpY2F0aW9uCisgICBhbmQgYXJndW1lbnQgbGlzdC4KKworMjAxMS0wMS0wMyAxOTo0NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgR2V0IHJpZCBvZiByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzIGJ5IGFkZGluZyB0d28KKyAgICNpbmNsdWRlIGRpcmVjdGl2ZXMgYW5kIGNvbW1lbnRpbmcgb3V0IHR3byB1bnVzZWQgZnVuY3Rpb25zLgorCisyMDExLTAxLTAyIDA1OjQ4ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBkb24ndCBmcmVlIGNhbGxlcnMgcHRyCisKKzIwMTEtMDEtMDIgMDU6NDggIHJzdG9yeQorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pZi5jLCBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgICAKKyAgICAgIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdjMuYywgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYzoKKworICAgY2xlYW4gdXAgU05NUF9GUkVFIHVzYWdlCisKKzIwMTEtMDEtMDIgMDU6NDcgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYzoKKworICAgZml4IGN1dC1uLXBhc3RlIGVycm9yIGluIGRlYnVnIHRva2VuCisKKzIwMTEtMDEtMDIgMDU6NDcgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oOgorCisgICBmaXggZnVuY3Rpb24gbmFtZSBpbiBwcm90b3R5cGUKKworMjAxMS0wMS0wMiAwNTo0NiAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nCisKKzIwMTEtMDEtMDIgMDU6NDYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcmVtb3ZlIGlubGluZSB2ZXJzaW9ucyBvZiBjb250YWluZXIgZnVuY3MKKworMjAxMS0wMS0wMiAwNTo0NiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZG9udCByZXR1cm4gZW1wdHkgYXJyYXkKKworMjAxMS0wMS0wMiAwNTo0NiAgcnN0b3J5CisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWYsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBmaXggdHlwb3MvZ3JhbW1hciBpbiBtYW4gcGFnZXMvY29tbWVudHMgKG5vIGNvZGUgY2hhbmdlcykKKworMjAxMS0wMS0wMiAwNTo0NSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgbmV3IHRyYW5zcG9ydCBjb25maWcgdG9rZW5zCisgICBsb2NhbENlcnQvcGVlckNlcnQsCisgICBkZXByZWNhdGUgb3VyX2lkZW50aXR5LCB0aGVpcl9pZGVudGl0eQorCisyMDExLTAxLTAyIDA1OjQ1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgbWFuL3NubXBjbWQuMS5kZWYsICAgCisgICAgICBtYW4vc25tcGQuY29uZi41LmRlZiwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBORVdTOiBzbm1wbGliOiBpbnRyb2R1Y2UgbmV3IGxvY2FsQ2VydC9wZWVyQ2VydCwgZGVwcmVjYXRlCisgICBzZXJ2ZXJDZXJ0LCBjbGllbnRDZXJ0LCBkZWZYNTA5U2VydmVyUHViLCBkZWZYNTA5Q2xpZW50UHViCisKKzIwMTEtMDEtMDIgMDU6NDQgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCBJUHY2IHN1cHBvcnQgdG8gRFRMU1VEUCB0cmFuc3BvcnQKKyAgIENIQU5HRVM6IHNubXBsaWI6IHVzZSBuZXcgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlIGluCisgICBuZXRzbm1wX2FkZHJfcGFpcgorICAgQ0hBTkdFUzogc25tcGxpYjogYWRkIGJhc2VfdHJhbnNwb3J0IHB0ciBmb3IgdHVubmVsZWQgdHJhbnNwb3J0cworCisyMDExLTAxLTAyIDA1OjQyICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBza2lwIG5vbi1BRl9JTkVUIGludGVyZmFjZXMgd2hlbiBsb2FkaW5nIGlwdjQKKyAgIGFkZHJzCisKIDIwMTAtMTItMjkgMDE6MzcgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6CkBAIC0xMzIzLDYgKzM0MzQ5LDI2IEBACiAKICAgIEJyaW5nIGFsbCB2ZXJzaW9ucyBvZiBtYWtlcmVsZWFzZS54bWwgaW50byBsaW5lCiAKKzIwMTAtMTItMjEgMDY6MTQgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50X21pYnMuaDoKKworICAgZml4IGNvbmZpZ3VyaW5nIHdpdGggLS1kaXNhYmxlLWRlYnVnZ2luZworCisyMDEwLTEyLTIwIDIzOjI3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBQYXRjaCBmcm9tIE1hZ251cyB0byBmaXggaWYgISB0ZXN0cyBvbiBzb2xhcmlzCisKKzIwMTAtMTItMTQgMjA6MTAgIHJzdG9yeQorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICBmaXggdHlwbyBpbiBtYW4gcGFnZQorCiAyMDEwLTEyLTEwIDE1OjUwICBoYXJkYWtlcgogCiAgICAqIGFnZW50L2FnZW50X3RyYXAuYywgc25tcGxpYi9zbm1wdXNtLmM6CkBAIC0xMzQzLDYgKzM0Mzg5LDI3IEBACiAgICB0aGUgbG9hZGluZwogICAgb2YgdGhlIGxpc3QgYSBiaXQuCiAKKzIwMTAtMTItMDYgMjM6MjMgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYzoKKworICAgUGF0Y2ggZnJvbSBOaWVscyB0byByZW1vdmUgZXh0cmEgaGVhZGVycyBmcm9tIHRoZSBsaW51eCBkb3Qzc3RhdHMKKyAgIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMTItMDYgMjI6MDggIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgorCisgICBDaGVjayBmb3IgdGhlIG1pbmltdW0gcmVxdWlyZWQgZnVuY3Rpb24gaW4gT3BlblNTTCBmb3IgRFRMUworICAgc3VwcG9ydAorCisyMDEwLTEyLTA2IDE2OjM0ICByc3RvcnkKKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgY2FsbCBuZXRzbm1wX2NlcnRzX2FnZW50X2luaXQgc29vbmVyLCBmaXhpbmcgc25tcHRyYXBkIChEKVRMUworICAgc3VwcG9ydAorCiAyMDEwLTEyLTA2IDE2OjI0ICBoYXJkYWtlcgogCiAgICAqIGFwcHMvc25tcHRyYXAuYzoKQEAgLTEzNTAsMTIgKzM0NDE3LDMxIEBACiAgICBmaXggY29udGV4dEVuZ2luZUlEcyBmb3Igb3V0Z29pbmcgaW5mb3JtcyBmcm9tIHNubXBpbmZvcm0gdG8gYmUKICAgIHRoZSBsb2NhbCBlbmdpbmVJRAogCisyMDEwLTEyLTAxIDIxOjE4ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIEZpeCBjb25mbGljdGluZyBkZWNsYXJhdGlvbnMKKworMjAxMC0xMi0wMSAwMToyMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgUGF0Y2ggZnJvbSBtYWdmciB0byBmaXggYnVpbGRpbmcgd2l0aG91dCBvcGVuc3NsCisKIDIwMTAtMTItMDEgMDE6MDYgIGhhcmRha2VyCiAKICAgICogYWdlbnQvc25tcGQuYzoKIAogICAgdXNlIG5ldHNubXBfYXNzZXJ0IGluc3RlYWQgb2YgYXNzZXJ0CiAKKzIwMTAtMTEtMzAgMjM6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGltcGxlbWVudCBEVExTIGNvb2tpZXMgc2VtaS1wcm9wZXJseSAoc3RhdGUgaXMgc3RpbGwgc2F2ZWQsIHdoaWNoCisgICBzdGlsbCBuZWVkcyB0byBjaGFuZ2UpCisKIDIwMTAtMTEtMzAgMjM6MjcgIGhhcmRha2VyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6CkBAIC0xMzc5LDYgKzM0NDY1LDU3IEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNTM0MzY6IGZyb206IHRha2V2b3M6IGZpeDoKICAgIHRjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MgaW52YWxpZCBtZW1vcnkgYWNjZXNzCiAKKzIwMTAtMTEtMzAgMjI6MTggIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgcmV2ZXJ0ZWQgMTk3MDEgKGV0aHRvb2wpIGFzIGl0IGJyb2tlIHRoaW5ncworCisyMDEwLTExLTMwIDIxOjA4ICBuYmEKKworICAgKiBhcHBzL3NubXB0bHMuYywgYXBwcy9zbm1wdHJhcGRfc3FsLmM6CisKKyAgIHVfaW50MzJfdCBpcyBsZXNzIHBvcnRhYmxlIHRoYW4gdWludDMyX3QgKFNvbGFyaXMgMTEpCisKKzIwMTAtMTEtMzAgMjA6NTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBhIGNvbXBpbGUgd2FybmluZyBhYm91dCBhIG5lc3RlZCBpZiB3aXRob3V0IGEgYmxvY2sKKworMjAxMC0xMS0zMCAxOTo1NyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZXJyb3IgY2hlY2sgdGhlIHJpZ2h0IHBvaW50ZXIgYWZ0ZXIgYXR0ZW1wdGluZyBhbGxvY2F0aW9uCisKKzIwMTAtMTEtMzAgMDU6NTggIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wd2Fsay5jOgorCisgICBORVdTOiBhcHBzOiBQQVRDSCAzMDU0ODE3OiBmcm9tIG5pZ2h0Y29kaW5nOiBBZGRzIHBlci12YXJpYWJsZQorICAgdGltZWQgb3V0cHV0IHN1cHBvcnQgdG8gc25tcHdhbGsgdXNpbmcgLUNUCisKKzIwMTAtMTEtMzAgMDU6NTYgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDU3MDkwOiBmcm9tIHNoZW1taW5nZXI6IG1ha2UgZXRodG9vbAorICAgc3VwcG9ydCBvbiBsaW51eCB1c2UgdGhlIGhpZ2ggc3BlZWQgc3RydWN0IGluZm8gZm9yIDEwMEcrLgorCisyMDEwLTExLTMwIDA1OjQ3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSCAzMDU3MDkzOiBmcm9tIHNoZW1taW5nZXI6IGFsbG93IGxpbnV4IHRvIHVzZQorICAgbGlicGNpIGZvciBjcmVhdGluZyB1c2VmdWwgaWZEZXNjciBzdHJpbmdzCisKIDIwMTAtMTEtMzAgMDQ6NTggIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmM6CkBAIC0xMzg2LDcgKzM0NTIzLDM3IEBACiAgICBDSEFOR0VTOiBQQVRDSCAzMDc0OTE4OiBmcm9tIHdlaXpoZW5nOiBjaGVjayBmb3IgQ09OVEFJTkVSX0lOU0VSVAogICAgZmFpbHVyZXMgYW5kIHJlYWN0IGFwcHJvcHJpYXRlbHkgdG8gYXZvaWQgbWVtb3J5IGxlYWtzCiAKLTIwMTAtMTEtMjkgMjI6MTQgIHJzdG9yeQorMjAxMC0xMS0zMCAwNDozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGFkZCBkZWJ1ZyBmb3IgY2VydCBmaW5kIGhpbnQgYXMgc3RyaW5nL2ludAorCisyMDEwLTExLTMwIDA0OjMwICByc3RvcnkKKworICAgKiAgYWdlbnQvc25tcF92YXJzLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gTkVUU05NUF9EU19MSUJfQVBQVFlQRSwKKyAgIGJyZWFrIG91dAorICAgY2VydCB0YWJsZSBpbml0cyB0byBuZXcgYWdlbnQgY2VydCBpbml0IGZ1bmN0aW9uLCBjYWxsZWQgZnJvbQorICAgaW5pdF9hZ2VudC4KKworMjAxMC0xMS0zMCAwNDoyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogZW5mb3JjZSBtYXggbGVuZ3RoIG9uIFRMUyBzZWNOYW1lIG1hcHMKKyAgIENIQU5HRVM6IHNubXBkOiBhZGQgcHJpb3JpdHkgdG8gc2VjbmFtZSBkZWJ1Z2dpbmcKKworMjAxMC0xMS0yOSAyMjoyMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBhZGQgZGVidWcgZm9yIHNzbCBjaXBoZXJzLCBjbGFyaWZ5IGZpbmdlcnByaW50CisgICBtYXRjaCBkZWJ1ZworCisyMDEwLTExLTI5IDIyOjE4ICByc3RvcnkKIAogICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKIApAQCAtMTM5NCw2ICszNDU2MSwyMiBAQAogICAgc2hhcmVkCiAgICBjYWNoZSByZWxvYWQgcHJvdGVjdGlvbgogCisyMDEwLTExLTE5IDE1OjI1ICBuYmEKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYzoKKworICAgTmllbHMsIE5pZWxzLCB5b3Ugc2hvdWxkIGtub3cgYmV0dGVyIHRoYW4gbWFraW5nIGxhc3QgbWludXRlCisgICBjaGFuZ2VzIHRvIGEKKyAgIHBhdGNoIGFuZCB0aGVuIGNvbW1pdCBpdCB3aXRob3V0IHRlc3RpbmcgOi0oCisKKzIwMTAtMTEtMTggMTE6MDQgIGJ2YXNzY2hlCisKKyAgICogIC4sICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmM6CisKKyAgIEFwcGxpZWQgcjE5Njg4IG9uIHRoZSB0cnVuayB0b28gKGZvbGxvdy11cCBmb3IgcjE5Njg1KS4KKwogMjAxMC0xMS0xOCAwMzo0OSAgcnN0b3J5CiAKICAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKQEAgLTE0MDYsNiArMzQ1ODksNTkgQEAKICAgIAogICAgbmV0c25tcF9jYWNoZV9pc192YWxpZCgpIGlzIG5vdCBtZWFudCBmb3IgbWliIG1vZHVsZXMKIAorMjAxMC0xMS0xNyAxOTo1OSAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jOgorCisgICBNb3JlIHByb2N0aW9uIGFnYWluc3Qgb3ZlcmZsb3dpbmcgc25wcmludGYKKworMjAxMC0xMS0xNyAxOTo1NyAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmg6CisKKyAgIERvbnQgdXNlIGZpcnN0IGVsZW1lbnQgb2Ygb2lkIHRvIHNhdmUgaWZJbmRleCAtIGl0IGNhbiBvbmx5IGJlCisgICAwLi4yCisgICBTZWNvbmQgZWxlbWVudCBpcyBvbmx5IDAuLjM5LCBzbyB3ZSBoYXZlIHRvIHVzZSBhIHRoaXJkIGVsZW1lbnQuCisKKzIwMTAtMTEtMTcgMTk6MzkgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAKKyAgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczEsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMjoKKworICAgVGVzdCBnZXRmc3N0YXQvZ2V0dmZzc3RhdCBpbiB0aW1lIGZvciBtb2R1bGUgc2VsZWN0aW9uCisKKzIwMTAtMTEtMTcgMTk6MzcgIG5iYQorCisgICAqIHNubXBsaWIvZmlsZV91dGlscy5jOgorCisgICBSZW1vdmUgYm9ndXMgdGVzdCBmb3IgZmxhZ3M9PTAgKE9fUkRPTkxZPT0wKS4gTWFrZXMKKyAgIHVkcEVuZHBvaW50VGFibGUgd29yayBhZ2FpbgorCisyMDEwLTExLTE3IDA0OjU1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4IGRvdWJsZSBmcmVlIGluIFRMUyBlcnJvciBoYW5kbGluZworCisyMDEwLTExLTE2IDEwOjM5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZToKKworICAgUmV2ZXJ0ZWQgTWluR1ctc3BlY2lmaWMgY2hhbmdlcyBmcm9tIHIxOTU0OSBzdWNoIHRoYXQgdGVzdCBUMDY1CisgICBwYXNzZXMgYWdhaW4gb24gTWluR1cuCisKKzIwMTAtMTEtMTYgMTA6MDQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBDSEFOR0VTOiBMaW51eDogYWdlbnQ6IGlwTmV0VG9QaHlzaWNhbFRhYmxlOiBEbyBub3QgbG9nIGFuIGVycm9yCisgICBtZXNzYWdlIGlmIG9uZSBvciBtb3JlIGludGVyZmFjZXMgYXJlIHByZXNlbnQgdGhhdCBkbyBub3QgaGF2ZQorICAgc3VjaCBpbmZvcm1hdGlvbiAoTlVEX05PQVJQKSwgZS5nLiB0dW5uZWxzLiBSZXBvcnRlZCBieSBTdGVwaGVuCisgICBIZW1taW5nZXIuIFNlZSBhbHNvIHBhdGNoICMzMTA3MDAzLgorCiAyMDEwLTExLTE1IDE0OjE1ICBidmFzc2NoZQogCiAgICAqIHNubXBsaWIvYXNuMS5jOgpAQCAtMTQxNSwxMSArMzQ2NTEsMzggQEAKICAgIGFzbl9idWlsZF9zaWduZWRfaW50NjQoKS4gTW9zdCBidXQgbm90IGFsbCBvZiB0aGVzZSBidWdzIHdlcmUKICAgIHNwZWNpZmljIHRvIDY0LWJpdCBzeXN0ZW1zLiBGaXhlcyBidWcgIzMwOTMxOTkuCiAKLTIwMTAtMTEtMTUgMTQ6MTIgIGJ2YXNzY2hlCisyMDEwLTExLTE1IDEzOjMyICBidmFzc2NoZQogCi0gICAqIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oOgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDhhc24xX2NsaWIuYzoKIAotICAgQnVpbGRzIGFnYWluLgorICAgQXZvaWQgdHJpZ2dlcmluZyB0cnVuY2F0aW9uIHdhcm5pbmdzLgorCisyMDEwLTExLTE1IDEzOjE2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOGFzbjFfY2xpYi5jOgorCisgICBSZXN0cmljdGVkIGFsbCBjb25zdGFudHMgdG8gMzIgYml0cy4KKworMjAxMC0xMS0xNSAxMjozNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgRm9sbG93LXVwIGZvciByMTk2NjUuCisKKzIwMTAtMTEtMTUgMTI6MzMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgsIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2VkIHRoZSBhcmd1bWVudCB0eXBlIG9mCisgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoKSBmcm9tIGNoYXIgKiBpbnRvIGNvbnN0IGNoYXIgKi4KKworMjAxMC0xMS0xNSAxMDo1NiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDhhc24xX2NsaWIuYzoKKworICAgQWRkZWQgdW5pdCB0ZXN0IGZvciBBU04uMSBlbmNvZGluZyBhbmQgZGVjb2RpbmcgKG9ubHkgMzItYml0IGFuZAorICAgNjQtYml0CisgICBpbnRlZ2VycyBzbyBmYXIpLgogCiAyMDEwLTExLTExIDIyOjQ4ICBuYmEKIApAQCAtMTQyOCw5ICszNDY5MSw0MSBAQAogICAgRml4IHIxOTYzNjogVHJhcE9JRCBpcyBub3QgdGhlIGZpcnN0IHZhcmJpbmQgaW4gdGhlIGNvbnZlcnRlZCB2MgogICAgdHJhcAogCisyMDEwLTExLTExIDA4OjM4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaDoKKworICAgQ2xlYW51cDogUmVtb3ZlZCBzdXBlcmZsdW91cyByZWZlcmVuY2VzIHRvIHRoZSBQT1NJWCB0aHJlYWRzCisgICBsaWJyYXJ5LgorCisyMDEwLTExLTExIDA4OjIwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaDoKKworICAgRm9sbG93LXVwIGZvciByMTk2NjA6IFVzZSBwaWRfdCBjb25zaXN0ZW50bHkuCisKKzIwMTAtMTEtMTAgMTY6MzYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogSW50cm9kdWNlZCBuZXRzbm1wX3BpZF90LgorICAgQ0hBTkdFUzogV2luMzI6IEVsaW1pbmF0ZWQgY2FzdHMgYmV0d2VlbiBpbnQgYW5kIEhBTkRMRSBpbgorICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jIGFuZAorICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMuCisKKzIwMTAtMTEtMTAgMTU6NDkgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTYwNjogY211X2NvbXBhdCByZW1vdmFsLgorCiAyMDEwLTExLTEwIDEyOjMxICBidmFzc2NoZQogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKIAogICAgQ0hBTkdFUzogQlVHOiAzMTAyOTA0OiBBbGwgTmV0LVNOTVAgQyBzb3VyY2UgZmlsZXMgYXJlIG5vdwogICAgY29tcGlsZWQgd2l0aCAtZm5vLXN0CkBAIC0xNDM5LDE2ICszNDczNCw5OSBAQAogCiAyMDEwLTExLTA5IDEzOjQ3ICBidmFzc2NoZQogCi0gICAqIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbjoKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZToKIAogICAgQ0hBTkdFUzogdGVzdGluZzogVGVzdCBUMDMwIGRvZXMgbm93IHBhc3Mgb24gTWluR1cuCiAKKzIwMTAtMTEtMDkgMTM6NDAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgc2ltcGxlX2V2YWxfdG9vbHMuc2g6IFJlbW92ZWQgYSBzdXBlcmZsdW91cyBJU0RFRklORUQgaW52b2NhdGlvbi4KKworMjAxMC0xMS0wOSAxMjowNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGU6CisKKyAgIFBhc3NlcyBub3cgb24gTWluR1cgdG9vLgorCisyMDEwLTExLTA5IDExOjMxICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uczoKKworICAgRm9sbG93LXVwIGZvciByMTk2NDYuCisKKzIwMTAtMTEtMDkgMTE6MzAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQ0hBTkdFUzogTWluR1c6IHRlc3Rpbmc6IElmIHRoZSBhZ2VudCBoYXMgYmVlbiBhc2tlZCB0byBzdG9wLAorICAgd2FpdCB1bnRpbCB0aGUgc25tcGQgcHJvY2VzcyBkaXNhcHBlYXJlZCBiZWZvcmUgcHJvY2VlZGluZy4KKworMjAxMC0xMS0wOSAxMDowMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IGNvbTJzZWM2IGRpcmVjdGl2ZTogSWYgY29uZmlndXJlIGhhcyBub3QgZm91bmQKKyAgIGdldGFkZHJpbmZvKCksIG5vbi1udW1lcmljIElQdjYgYWRkcmVzc2VzIGRvIG5vdyB0cmlnZ2VyIGFuIGVycm9yCisgICBtZXNzYWdlLgorCisyMDEwLTExLTA4IDE1OjM2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZToKKworICAgQ0hBTkdFUzogdGVzdGluZzogVGVzdCA3MSAoY29tMnNlYzZfc2ltcGxlKSBkb2VzIG5vdyBzdWNjZWVkIGV2ZW4KKyAgIGlmIElQdjYgRE5TIHJlc29sdXRpb24gaXMgbm90IGF2YWlsYWJsZS4KKworMjAxMC0xMS0wOCAxNTowMiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIE1pbkdXLCB0ZXN0aW5nOiBjbGliIHRlc3RzIGJ1aWxkIGFnYWluIHdpdGhvdXQgd2FybmluZ3MuCisKKzIwMTAtMTEtMDggMTQ6NTIgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgQ0hBTkdFUzogTWluR1c6IGNvbmZpZ3VyZTogRGV0ZWN0aW9uIG9mIHRoZSBmdW5jdGlvbnMKKyAgIGdhaV9zdHJlcnJvcigpLCBnZXRhZGRyaW5mbygpLCBnZXRob3N0YnluYW1lKCkgYW5kIGdldGhvc3RuYW1lKCkKKyAgIGRvZXMgbm93IHN1Y2NlZWQuCisKKzIwMTAtMTEtMDggMTQ6NDggIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA3aW5ldF9wdG9uX2NsaWIuYzoKKworICAgQ0hBTkdFUzogdGVzdGluZzogQWRkZWQgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpIHVuaXQgdGVzdC4KKworMjAxMC0xMS0wOCAxNDo0NyAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIHRlc3Rpbmc6IGNsaWJfYnVpbGQ6IEFkZGVkICNpbmNsdWRlIGRpcmVjdGl2ZXMgKDxhcnBhL2luZXQuaD4gYW5kCisgICA8bmV0aW5ldC9pcDYuaD4pLgorCiAyMDEwLTExLTA4IDA4OjQ2ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CiAKICAgIFdpbjMyOiBhZ2VudDogZWxpbWluYXRlZCBjYXN0cyBmcm9tL3RvIGludCBmb3IgdGhyZWFkIGhhbmRsZXMuCiAKKzIwMTAtMTEtMDggMDc6NTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIFJlbW92ZWQgTkVUU05NUF9TVEFUSUNfSU5MSU5FIGZyb20gdGhlIGRlY2xhcmF0aW9uIG9mCisgICBfYnVpbGRfY2FjaGVfbmFtZSAtIGF0IGxlYXN0IGdjYyBpcyBiZXR0ZXIgdGhhbiBhIGh1bWFuIGF0CisgICBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIGJlIGlubGluZWQgYW5kIHdoaWNoIG9uZXMgbm90LgorCisyMDEwLTExLTA4IDA3OjU2ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jOgorCisgICBuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93KCk6IEFkZGVkIG1pc3NpbmcgZnJlZSgpIHN0YXRlbWVudCBpbgorICAgYW4gZXJyb3IgcGF0aC4KKwogMjAxMC0xMS0wNyAyMToxNSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKQEAgLTE0ODQsMTkgKzM0ODYyLDYgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAzMDk2NzI1OiBJbmNsdWRlIFNOTVB2MSB0cmFwIE9JRHMgaW4KICAgIG5sbUxvZ05vdGlmaWNhdGlvbklEIGNvbHVtbgogCi0yMDEwLTExLTA3IDE5OjI2ICBkdHMxMgotCi0gICAqIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgotCi0gICBTdXBwb3J0IGhvbGVzIGluIGRhdGFzZXQgdGFibGVzLgotICAgKFBhcnRpYWwgYmFjay1wb3J0IG9mIHJldmlzaW9uIDE3OTI5KQotCi0yMDEwLTExLTA3IDE5OjIyICBkdHMxMgotCi0gICAqIGFnZW50L2FnZW50X3RyYXAuYzoKLQotICAgRml4IGEgdHlwbywgYW5kIGRyb3AgYSBjb3VwbGUgb2YgcmVkdW5kYW50IHZhcmlhYmxlcy4KLQogMjAxMC0xMS0wNyAxNjozNSAgbWFnZnIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKQEAgLTE1MDQsMTIgKzM0ODY5LDYyIEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBmb3JjZSBhIDsgYXQgdGhlIGVuZCBvZiB0aGUgc3RhdGljX2Fzc2VydAogICAgbWFjcm8uCiAKLTIwMTAtMTEtMDcgMTY6MjEgIGR0czEyCisyMDEwLTExLTA1IDE1OjQxICBidmFzc2NoZQogCi0gICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgogCi0gICBCYWNrcG9ydCBvZiByZXZpc2lvbiAxNzU5NgotICAgVHJpdmlhbCB3YXJuaW5nIGZpeGVzCisgICBNYWRlIHN1cmUgdGhhdCBycG1HZXRQYXRoKCkgY2FuIGJlIGZvdW5kIGJ5IGNvbmZpZ3VyZS4KKworMjAxMC0xMS0wNSAxNDo1MCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMToKKworICAgUmVtb3ZlZCBzdXBlcmZsdW91cyAtSS91c3IvaW5jbHVkZS9ycG0uCisKKzIwMTAtMTEtMDUgMTI6MTggIGJ2YXNzY2hlCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyOgorCisgICBDSEFOR0VTOiBhZ2VudDogRmluZCBvdXQgd2hldGhlciBsaWJycG0gaXMgYXZhaWxhYmxlIGJlZm9yZQorICAgY29uZmlndXJpbmcgdGhlIGFnZW50IG1vZHVsZXMgYmVjYXVzZSBob3N0L2RhdGEvYWNjZXNzL3N3aW5zdAorICAgbmVlZHMgc3ltYm9sIEhBVkVfTElCUlBNLiBBcyBhIHJlc3VsdCwgY29uZmlndXJlIGhhcyB0byBiZSBydW4KKyAgIG9ubHkgb25jZSBpbnN0ZWFkIG9mIHR3aWNlIHRvIGVuYWJsZSB0aGUgaHJTV0luc3RhbGxlZCB0YWJsZSBvbgorICAgc3lzdGVtcyB0aGF0IGhhdmUgbGlicnBtLgorCisyMDEwLTExLTA1IDEyOjExICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYzoKKworICAgU3VwcHJlc3MgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTExLTA1IDEwOjAwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOiBGaXhlZCBhIG1lbW9yeSBsZWFrCisgICBpbiBuZXRzbm1fc3dpbnN0X2FyY2hfaW5pdCgpLgorCisyMDEwLTExLTA1IDA5OjIzICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtOiBQYXNzIGNvcnJlY3QgcGF0aCB0bworICAgcnBtZGJPcGVuKCkgc3VjaCB0aGF0IG9wZW5pbmcgdGhlIGRhdGFiYXNlIHN1Y2NlZWRzLgorICAgQ0hBTkdFUzogYWdlbnQ6IGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbTogTG9nIGFuIGVycm9yIG1lc3NhZ2UKKyAgIGlmIHJwbWRiT3BlbigpIGZhaWxzLgorCisyMDEwLTExLTA1IDA4OjUwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMsIGFnZW50L21pYmdyb3VwL1Jtb24vcm93X2FwaS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jOgorCisgICBSbW9uIC8gZGlzbWFuIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMuCiAKIDIwMTAtMTEtMDUgMDg6NDggIGJ2YXNzY2hlCiAKQEAgLTE1MTcsNiArMzQ5MzIsMTggQEAKIAogICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgbWFjcm8gbmV0c25tcF9zdGF0aWNfYXNzZXJ0KCkuCiAKKzIwMTAtMTEtMDUgMDg6NDAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NTY2LgorCisyMDEwLTExLTA1IDA4OjM3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg6CisKKyAgIFJlbW92ZWQgYSAoaGFybWxlc3MgPykgY2lyY3VsYXIgcmVmZXJlbmNlLgorCiAyMDEwLTExLTA0IDEzOjA5ICBkdHMxMgogCiAgICAqIGRpc3QvbmV0LXNubXAuc3BlYzoKQEAgLTE1MjQsMjUgKzM0OTUxLDIzIEBACiAgICBDSEFOR0VTOiBMaW51eDogUEFUQ0hFUzogMzA4MzAyNzogRml4IFJQTSBzcGVjIGZpbGUgdG8gc3VwcG9ydAogICAgQ2VudE9TCiAKLTIwMTAtMTEtMDQgMDc6MDkgIGJ2YXNzY2hlCisyMDEwLTExLTAzIDEzOjIyICByc3RvcnkKIAotICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwVGxzSXB2Nl9zaW1wbGU6CiAKLSAgIEJhY2twb3J0ZWQgcjE5NjAyLCB3aGljaCBmaXhlcyB0aGUgZG91YmxlIGZyZWUgYXQgZXhpdCB0aGF0IHdhcwotICAgaW50cm9kdWNlZCBieSByMTk0NjIuCisgICBza2lwIHRsc2lwdjYgdGVzdCBpZiBub3QgdGxzdGNwL3RjcGlwdjYgZG9tYWlucwogCi0yMDEwLTExLTAzIDE0OjU5ICBidmFzc2NoZQorMjAxMC0xMS0wMSAyMzowMyAgbWFnZnIKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jbXVfY29tcGF0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY211X2NvbXBhdC5jLCBzbm1wbGliL21pYi5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CiAKLSAgIENIQU5HRVM6IGJ1aWxkaW5nOiBWRVJTSU9OIGlzIGFnYWluIGEgbnVtYmVyIGluc3RlYWQgb2YgYSBDCi0gICBleHByZXNzaW9uLCBzdWNoIHRoYXQgdGhlIFBlcmwgbW9kdWxlcyBidWlsZCBhZ2Fpbi4KLQotMjAxMC0xMS0wMyAxNDo0NyAgYnZhc3NjaGUKLQotICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg6Ci0KLSAgIEZpeGVkIGFuIGluY29ycmVjdCBmaWxlIGhlYWRlciAoYSBzb3VyY2UgY29kZSBjb21tZW50KS4KKyAgIE5FV1M6IHNubXBsaWI6IFJlbW92ZSB0aGUgc3VwcG9ydCBmb3IgQ01VIGNvbXBhdGliaWxpdHkgc2luY2UKKyAgIHRoZXJlIGlzIG5vIHdheSB0byBlbmFibGUgaXQgYW5kIG5vYm9keSBoYXZlIG1pc3NlZCBpdC4KIAogMjAxMC0xMS0wMSAxNjo1MCAgZHRzMTIKIApAQCAtMTU1Myw2OCArMzQ5NzgsMjc4IEBACiAKIDIwMTAtMTEtMDEgMTY6NDcgIGR0czEyCiAKLSAgICogbWFuL3NubXBnZXQuMS5kZWYsIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZjoKKyAgICogbWFuL3NubXBnZXQuMS5kZWY6CiAKICAgIERvY3VtZW50IC1DZiBpbiB0aGUgdHdvIG1hbiBwYWdlcyBzZXBhcmF0ZWx5LgogCi0yMDEwLTExLTAxIDE2OjMwICBkdHMxMgorMjAxMC0xMC0yOSAyMjozMSAgcnN0b3J5CiAKLSAgICogIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vc25tcGJ1bGtnZXQuMS5kZWYsICAgCi0gICAgICBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCBtYW4vc25tcGdldC4xLmRlZiwgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCAKLSAgICAgICAgbWFuL3NubXBzZXQuMS5kZWYsIG1hbi9zbm1wdHJhcC4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgICAKLSAgICAgIG1hbi9zbm1wd2Fsay4xLmRlZjoKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CiAKLSAgIFJlbW92ZSBDTVUgY29weXJpZ2h0IG5vdGljZSBmcm9tIG1hbiBwYWdlcyB0aGF0Ci0gICB3ZXJlIG5vdCBpbmhlcml0ZWQgZnJvbSBDTVUtU05NUAotICAgKGFuZCBxdWFsaWZ5IHRoZSBjb3B5cmlnaHQgZm9yIHRob3NlIHRoYXQgd2VyZSkuCisgICBudWxsIG91dCBiaW8gcG9pbnRlcnMgYWZ0ZXIgYmVpbmcgZnJlZWQ7IGJhaWwgb24gY29ubmVjdGlvbgorICAgd2l0aCBubyBzc2wgcG9pbnRlcgogCi0yMDEwLTExLTAxIDEzOjU1ICBkdHMxMgorMjAxMC0xMC0yOSAxNDozNSAgYnZhc3NjaGUKIAotICAgKiAgbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYsIG1hbi9maXhwcm9jLjEuZGVmLCAgIAotICAgICAgbWFuL21pYjJjLXVwZGF0ZS4xLmRlZiwgbWFuL21pYjJjLjEuZGVmLCBtYW4vbWliX2FwaS4zLmRlZiwgICAKLSAgICAgIG1hbi9uZXQtc25tcC1jb25maWcuMS5kZWYsIG1hbi9yZWFkX2NvbmZpZy4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wX2FnZW50X2FwaS4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wX2FsYXJtLjMuZGVmLCBtYW4vc25tcF9hcGkuMy5kZWYsIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwgIAotICAgICAgIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vc25tcF90cmFwX2FwaS4zLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgbWFuL3NubXBjbWQuMS5kZWYsIAotICAgICAgICBtYW4vc25tcGNvbmYuMS5kZWYsIG1hbi9zbm1wZC44LmRlZiwgbWFuL3NubXBkLmNvbmYuNS5kZWYsICAgCi0gICAgICBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsIG1hbi9zbm1wZC5pbnRlcm5hbC41LmRlZiwgICAKLSAgICAgIG1hbi9zbm1wZGVsdGEuMS5kZWYsIG1hbi9zbm1wZGYuMS5kZWYsIG1hbi9zbm1wZ2V0LjEuZGVmLCAgIAotICAgICAgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCBtYW4vc25tcG5ldHN0YXQuMS5kZWYsIG1hbi9zbm1wc2V0LjEuZGVmLCAgCi0gICAgICAgbWFuL3NubXBzdGF0dXMuMS5kZWYsIG1hbi9zbm1wdGFibGUuMS5kZWYsIG1hbi9zbm1wdGVzdC4xLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsIAotICAgICAgICBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wdXNtLjEuZGVmLCBtYW4vc25tcHZhY20uMS5kZWYsCi0gICAgICAgICBtYW4vc25tcHdhbGsuMS5kZWYsIG1hbi90a21pYi4xLmRlZiwgbWFuL3RyYXB0b2VtYWlsLjEuZGVmLCAgIAotICAgICAgbWFuL3ZhcmlhYmxlcy41LmRlZjoKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jOgogCi0gICBTdXBwcmVzcyBmb3JjaW5nIG9mICJCZXJrZWxleSBEaXN0cmlidXRpb24iIGZvb3RlcgotICAgKEFsbG93cyBOZXQtU05NUCB2ZXJzaW9uIGluZm9ybWF0aW9uIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgbWFuCi0gICBwYWdlKQorICAgUmV2ZXJ0ZWQgaW5jb3JyZWN0IGNoYW5nZXMgZnJvbSByMTk1NzUuCiAKLTIwMTAtMTEtMDEgMTM6NDIgIGR0czEyCisyMDEwLTEwLTI5IDE0OjIxICBidmFzc2NoZQogCi0gICAqICBtYW4vbWliMmMuMS5kZWYsIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vcmVhZF9jb25maWcuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcF9hZ2VudF9hcGkuMy5kZWYsICAgCi0gICAgICBtYW4vc25tcF9hbGFybS4zLmRlZiwgbWFuL3NubXBfYXBpLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWYsIG1hbi9zbm1wX3RyYXBfYXBpLjMuZGVmLCAgIAotICAgICAgbWFuL3NubXBidWxrZ2V0LjEuZGVmLCBtYW4vc25tcGJ1bGt3YWxrLjEuZGVmLCBtYW4vc25tcGNtZC4xLmRlZiwgCi0gICAgICAgIG1hbi9zbm1wY29uZi4xLmRlZiwgbWFuL3NubXBkLjguZGVmLCBtYW4vc25tcGQuY29uZi41LmRlZiwgICAKLSAgICAgIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgbWFuL3NubXBkLmludGVybmFsLjUuZGVmLCAgIAotICAgICAgbWFuL3NubXBnZXQuMS5kZWYsIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgbWFuL3NubXBuZXRzdGF0LjEuZGVmLCAgCi0gICAgICAgbWFuL3NubXBzZXQuMS5kZWYsIG1hbi9zbm1wdGFibGUuMS5kZWYsIG1hbi9zbm1wdGVzdC4xLmRlZiwgICAKLSAgICAgIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsIAotICAgICAgICBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wdXNtLjEuZGVmLCBtYW4vc25tcHZhY20uMS5kZWYsCi0gICAgICAgICBtYW4vc25tcHdhbGsuMS5kZWYsIG1hbi92YXJpYWJsZXMuNS5kZWY6CisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgogCi0gICBVcGRhdGUgbWFuIHBhZ2UgZGF0ZXN0YW1wcyB0byBtYXRjaCB0aGUgbGF0ZXN0IChub24tdHJpdmlhbCkKLSAgIGNvbnRlbnQgY2hhbmdlLgorICAgRml4ZWQgYSBidWcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTk1MTUuCisKKzIwMTAtMTAtMjkgMTQ6MDAgIGJ2YXNzY2hlCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIFJldmVydGVkIHRoZSBpbmNvcnJlY3QgY2hhbmdlcyBmcm9tIHIxOTU5My4KKworMjAxMC0xMC0yOSAxMzozOCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBSZWR1Y2VkIG51bWJlciBvZiBsZWFrLWF0LWV4aXQgY29tcGxhaW50cyB0cmlnZ2VyZWQgYnkKKyAgIHNubXBsaWIvY2VydF91dGlsLmMuCisKKzIwMTAtMTAtMjkgMTM6MzcgIGJ2YXNzY2hlCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgTW9yZSBsZWFrLWF0LWV4aXQgZml4ZXMuCisKKzIwMTAtMTAtMjkgMTM6MzUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oOgorCisgICBNb3JlIGxlYWstYXQtZXhpdCBmaXhlcy4KIAogMjAxMC0xMC0yOSAxMjoxOCAgYnZhc3NjaGUKIAotICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CiAKICAgIFNwZWxsaW5nIGZpeCBpbiBsb2cgdGV4dHM6IGNvbnRhaW50ZXIgLT4gY29udGFpbmVyLgogCisyMDEwLTEwLTI5IDA5OjU4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgUmFuIGZpbGx1cF9lbnRyeV9pbmZvKCkgdGhyb3VnaCBpbmRlbnQuCisKKzIwMTAtMTAtMjkgMDk6NTYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBOZXRsaW5rIElQdjYgcHJlZml4IHByb2Nlc3Npbmc6IEFkZGVkIG1vcmUgZGVidWcgc3RhdGVtZW50cy4KKworMjAxMC0xMC0yOSAwOTo1NCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIE1hZGUgYXJndW1lbnQgY2hlY2tpbmcgb2YgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbygpIG1vcmUKKyAgIHN0cmljdC4KKworMjAxMC0xMC0yOSAwOTo1MiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oOgorCisgICBNb3JlIE1JQi1zcGVjaWZpYyBsZWFrLWF0LWV4aXQgZml4ZXMuCisKKzIwMTAtMTAtMjkgMDc6NTYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmM6CisKKyAgIE1vcmUgY29tcGlsZXIgd2FybmluZyBmaXhlcy4KKworMjAxMC0xMC0yOCAxODozMSAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgRml4IGNvbnN0IHF1YWxpZmllciB3YXJuaW5nCisKKzIwMTAtMTAtMjggMTc6NTMgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmM6CisKKyAgIENsZWFuIG91dCBTb2xhcmlzIHdhcm5pbmdzCisKKzIwMTAtMTAtMjggMTc6NTIgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgorCisgICBMVk0gaXMgTGludXggb25seQorCisyMDEwLTEwLTI4IDE3OjUxICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIEF2b2lkIGNoYXIgc3Vic2NyaXB0cyAoc2lnbmVkIGNoYXJzXCEpCisKKzIwMTAtMTAtMjggMTc6NDMgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBjYXN0cyBhbmQgZm9ybWF0IHNwZWNpZmllcnMgaW4gZGVidWcgb3V0cHV0CisKKzIwMTAtMTAtMjggMTc6NDEgIG5iYQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBDYXN0IHRvIHNvY2thZGRyIHRvIGF2b2lkIHdhcm5pbmcKKworMjAxMC0xMC0yOCAxNzo0MCAgbmJhCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIFVudGFuZ2xlIHBpY2wgZnJvbSBrc3RhdCBhY2Nlc3Mgc28gaXQgY29tcGlsZXMgb24geDg2IFNvbHJhaXMKKyAgIDEwL09wZW5Tb2xhcmlzCisKKzIwMTAtMTAtMjggMTU6MTUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBNb3JlIGxlYWstYXQtZXhpdCBmaXhlcy4KKworMjAxMC0xMC0yOCAxNToxMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKCksCisgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMigpLCBuZXRzbm1wX2Nsb25lX3dhdGNoZXJfaW5mbygpCisgICBhbmQgbmV0c25tcF9vd25zX3dhdGNoZXJfaW5mbygpLiBTZWUgYWxzbyB0aGUgRG94eWdlbiBjb21tZW50cworICAgZm9yIG1vcmUgaW5mby4KKwogMjAxMC0xMC0yOCAxNDowMiAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYy5jaGVja192YWx1ZXMuY29uZjoKQEAgLTE2MjIsNiArMzUyNTcsMTMgQEAKICAgIEZpeCBsb2dpYyBvZiB0ZXN0aW5nIGZvciBvdXQtb2YtcmFuZ2UgZW51bSB2YWx1ZXMuCiAgICBSZXBvcnRlZCBieSBCb3JpcyBad2VpbXVlbGxlci4KIAorMjAxMC0xMC0yOCAxMjoyMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgR2V0IHJpZCBvZiBPcGVuU1NMLXJlbGF0ZWQgY29tcGlsYXRpb24gd2FybmluZ3MuIFNob3VsZCB3b3JrIGZvcgorICAgYm90aCBPcGVuU1NMIHZlcnNpb25zIDAuOS54IGFuZCAxLjAueC4KKwogMjAxMC0xMC0yOCAxMTo0NiAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmM6CkBAIC0xNjI5LDYgKzM1MjcxLDE5IEBACiAgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgKG1pc21hdGNoIGJldHdlZW4gZm9ybWF0IHNwZWNpZmljYXRpb24KICAgIGFuZCBhcmd1bWVudCkgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByNjU2Mi4KIAorMjAxMC0xMC0yOCAxMTo0MyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgR2V0IHJpZCBvZiByZWNlbnRseSBpbnRyb2R1Y2VkIG1lbWR1cCgpIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTEwLTI4IDExOjQxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTk1NTAuCisKIDIwMTAtMTAtMjggMTE6MzIgIGJ2YXNzY2hlCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvdG9vbHMuYzoKQEAgLTE2MzYsNiArMzUyOTEsMjMgQEAKICAgIFJldmVydGVkIHIxOTU2NSBiZWNhdXNlIGl0IGNhdXNlZCBnY2MgdG8gcmVwb3J0IG1vcmUgd2FybmluZ3MKICAgIGluc3RlYWQgb2YgbGVzcy4KIAorMjAxMC0xMC0yOCAxMToxOCAgYnZhc3NjaGUKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTk1NjYuCisKKzIwMTAtMTAtMjggMTA6NDAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCwgc25tcGxpYi9jYWxsYmFjay5jOgorCisgICBQYXJ0aWFsbHkgcmV2ZXJ0ZWQgcjE5NTE1OiByZW1vdmVkIHRoZSBuZXdseSBpbnRyb2R1Y2VkIGZ1bmN0aW9ucworICAgYW5kIGRhdGEgbWVtYmVycyBhZ2FpbiwgYnV0IHdpdGhvdXQgcmVpbnRyb2R1Y2luZyB0aGUKKyAgIGxlYWstYXQtZXhpdC4KKwogMjAxMC0xMC0yOCAxMDozMiAgYnZhc3NjaGUKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgpAQCAtMTY0NCwxMSArMzUzMTYsODIgQEAKICAgIGxvbmdlciBuZWNlc3NhcnkgdG8gY2FzdCB0aGVzZSB0d28gYXJndW1lbnRzIChoYXMgYmVlbiByZXZlcnRlZAogICAgdmlhIHIxOTU2OCkuCiAKLTIwMTAtMTAtMjggMTA6MDYgIGJ2YXNzY2hlCisyMDEwLTEwLTI4IDA5OjQ3ICBidmFzc2NoZQogCi0gICAqIHRlc3RpbmcvZXZhbF90b29scy5zaDoKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CiAKLSAgIEJhY2twb3J0ZWQgSVNERUZJTkVEIGZyb20gcjE4NjcwLgorICAgRml4ZWQgeWV0IGFub3RoZXIgY3Jhc2ggaW4gbmV0c25tcF9jYWNoZV9yZW1vdmUoKS4KKworMjAxMC0xMC0yOCAwODo0NCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBNYWRlIGl0IGVhc2llciB0byBlbmFibGUgdGhlIG1lbW9yeSBsZWFrIGNoZWNrZXIgYnVpbHQtaW4gaW4KKyAgIE1TVkMncyBDIHJ1bnRpbWUgbGlicmFyeS4KKworMjAxMC0xMC0yNyAyMDozNyAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYzoKKworICAgU2l6ZW9mIGhhcyB0eXBlIHNpemVfdAorCisyMDEwLTEwLTI3IDIwOjM1ICBuYmEKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIFJlbW92ZSBzdXBlcmZsdW91cyBjYXN0CisKKzIwMTAtMTAtMjcgMTg6NDAgIG5iYQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jOgorCisgICBTcHJpbmtsZSBzb21lIHVuc2lnbmVkbmVzcyBzbyB2YXJzIGFuZCBwYXJhbXMgYWdyZWUgb24gdHlwZQorCisyMDEwLTEwLTI3IDE4OjM4ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgSW5pdGlhbGl6ZSB2YXJzIHRoYXQgZ2NjIHRoaW5rcyBhcmUgdW5pbml0aWFsaXplZAorCisyMDEwLTEwLTI3IDE4OjM2ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIEEgbW9yZSBtZWFuaW5nZnVsIHRlc3QgZm9yIE1MRF9MSVNURU5FUl9RVUVSWQorCisyMDEwLTEwLTI3IDE4OjM1ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmg6CisKKyAgIHByb3RvdHlwZXMgYW5kIGluY2x1ZGVzIHdlcmUgbWlzc2luZworCisyMDEwLTEwLTI3IDE4OjMzICBuYmEKKworICAgKiBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgYXBwcy9zbm1wdGVzdC5jOgorCisgICBDaGVjayBmZ2V0cyByZXR1cm4KIAogMjAxMC0xMC0yNSAyMDo1OSAgZHRzMTIKIApAQCAtMTY2NCw2ICszNTQwNywxNCBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMzA1ODEwMTogV3JpdGVhYmxlICdsb25nJyBpbnN0YW5jZXMgd29yayBvbgogICAgNjQtYml0IHN5c3RlbXMsIGJ1dCBub3Qgd3JpdGFibGUgJ2ludCdzCiAKKzIwMTAtMTAtMjUgMTY6MDUgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBEb24ndCBhdHRlbXB0IHRvIHByb2Nlc3MgdW5yZWNvZ25pc2VkICJpZ25vcmUqIiBkaXJlY3RpdmVzLgorICAgUGFzcyB0aGVzZSB0aHJvdWdoIHRvIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlcmVkIGNvbmZpZyBoYW5kbGVycworICAgKGlmIGFueSkKKwogMjAxMC0xMC0yNSAxNTo1NiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKQEAgLTE2NzksMTcgKzM1NDMwLDI5OSBAQAogCiAyMDEwLTEwLTI1IDEyOjU0ICBidmFzc2NoZQogCi0gICAqIHRlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsOgorICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlOgogCiAgICBDSEFOR0VTOiBXaW4zMjogdGVzdGluZzogQXZvaWQgdGhhdCBUMjAwIGZhaWxzIG9uIGtub3duIE1pY3Jvc29mdAogICAgU05NUCBleHRlbnNpb24gRExMIGJ1Z3MuCiAKLTIwMTAtMTAtMjIgMDk6MTkgIGJ2YXNzY2hlCisyMDEwLTEwLTI1IDA4OjA2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIE5FV1M6IExpbnV4OiBzbm1wZCBpcyBhZ2FpbiBzaW5nbGUtdGhyZWFkZWQuCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI5NTk4MTE6IGZyb20gSmFuIFNhZnJhbmVrOiBSZWltcGxlbWVudAorICAgTGludXggTmV0bGluayBJUHY2IHByZWZpeCBsaXN0ZW5lci4KKworMjAxMC0xMC0yNSAwNzoxNSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgQXZvaWQgdGhhdCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGNhc3RpbmcgYXdheSB0aGUgJ2NvbnN0JworICAgYXR0cmlidXRlIGZvciB0aGUgZmlyc3QgYXJndW1lbnQgb2Ygc3NsY3R4X2NsaWVudF9zZXR1cCgpIGFuZAorICAgc3NsY3R4X3NlcnZlcl9zZXR1cCgpLgorCisyMDEwLTEwLTI1IDA2OjI4ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmg6CisKKyAgIGluY2x1ZGUgbmVlZGVkIHByb3RvdHlwZXMKKworMjAxMC0xMC0yNSAwNjoxNiAgbmJhCisKKyAgICogIGFwcHMvc25tcHRscy5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBBZGp1c3QgdHlwZXMgdG8gYmV0dGVyIG1hdGNoIHVzYWdlCisKKzIwMTAtMTAtMjUgMDY6MTUgIG5iYQorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICBSZXZlYWwgaGlkZGVuIC1lIGFuZCAtdSBvcHRpb25zCisKKzIwMTAtMTAtMjUgMDY6MTQgIG5iYQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBpbmNsdWRlIG5lZWRlZCBwcm90b3R5cGVzCisKKzIwMTAtMTAtMjUgMDY6MDEgIG5iYQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QuYywgYXBwcy9zbm1wdHJhcGQuYywKKyAgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBpbmNsdWRlIG5lZWRlZCBwcm90b3R5cGVzCisKKzIwMTAtMTAtMjUgMDY6MDAgIG5iYQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgICBhcHBzL3NubXB0cmFwZF9zcWwuYzoKKworICAgY29uc3QtanVnZ2xpbmcgLSB3ZSBkb250IGxpa2Ugd2FybmluZ3MKKworMjAxMC0xMC0yMyAxMTo1NiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgUmVlbmFibGVkIGNhY2hlIHJlbW92YWwgYW5kIGZyZWVpbmcgLyBtb3ZlZCBjYWNoZSByZWZjb3VudAorICAgaW5jcmVtZW50aW5nIHRvIG5ldHNubXBfY2FjaGVfb3duc19jYWNoZSgpIC8gY29udmVydGVkIHRhYnMgdG8KKyAgIHNwYWNlcy4KKworMjAxMC0xMC0yMyAxMTowNCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgRml4ZWQgYW5vdGhlciBjcmFzaCBpbiBuZXRzbm1wX2NhY2hlX3JlbW92ZSgpLgorCisyMDEwLTEwLTIzIDExOjAwICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUmVtb3ZpbmcgdGhlIGxhc3QgY2FjaGUgdmlhCisgICBuZXRzbm1wX2NhY2hlX3JlbW92ZSgpIGRvZXMgbm8gbG9uZ2VyIHRyaWdnZXIgYSBjcmFzaC4KKworMjAxMC0xMC0yMyAxMDo1NyAgYnZhc3NjaGUKKworICAgKiAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmM6CisKKyAgIFQwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYjogSW50cm9kdWNlZAorICAgbmV0c25tcF9jYWNoZV9jcmVhdGUoKS4KKworMjAxMC0xMC0yMiAxNToyNCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYzoKKworICAgRGlzYWJsZWQgY2FjaGUgZGVhbGxvY2F0aW9uIGJlY2F1c2UgaXQgbWFrZXMgdHdvIHVuaXQgdGVzdHMgZmFpbAorICAgLSB0byBiZSBhbmFseXplZCBmdXJ0aGVyLgorCisyMDEwLTEwLTIyIDE1OjAzICBidmFzc2NoZQorCisgICAqIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYzoKKworICAgQnVpbGRzIGFnYWluLgorCisyMDEwLTEwLTIyIDE0OjQ5ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IE1JQi1zcGVjaWZpYyBsZWFrLWF0LWV4aXQgZml4ZXMuCisKKzIwMTAtMTAtMjIgMTQ6NDIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogZXhhbXBsZSBNSUI6IEFkZGVkIHNodXRkb3duIGZ1bmN0aW9uIHRoYXQgZnJlZXMKKyAgIGFsbCBtZW1vcnkgb3duZWQgYnkgdGhpcyBNSUIgaW1wbGVtZW50YXRpb24uCisKKzIwMTAtMTAtMjIgMTQ6NDAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEF1dG9tYXRpY2FsbHkgZnJlZSB0aGUgcHJpdmF0ZSBkYXRhIHN0cnVjdHVyZQorICAgYWxsb2NhdGVkIGJ5IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KCkuCisKKzIwMTAtMTAtMjIgMTQ6MzggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBDb3VudCB0aGUgbnVtYmVyIG9mIHVzZXJzIG9mIGEgbmV0c25tcF9jYWNoZSBkYXRhCisgICBzdHJ1Y3R1cmUgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdC4KKworMjAxMC0xMC0yMiAxNDozNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBBZGRlZCByZWZlcmVuY2UgY291bnQgaW4gdGhlCisgICBuZXRzbm1wX2JhYnlfc3RlcHNfbW9kZXMgZGF0YSBzdHJ1Y3R1cmUgYW5kIG1hZGUgc3VyZSB0aGF0IHRoaXMKKyAgIGRhdGEgc3RydWN0dXJlIGlzIGF1dG9tYXRpY2FsbHkgZnJlZWQgd2hlbiB0aGUgaGFuZGxlciB0aGF0IG93bnMKKyAgIGl0IGlzIHVucmVnaXN0ZXJlZC4KKworMjAxMC0xMC0yMiAxNDozNCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIG5ldHNubXBfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUoKS4KKworMjAxMC0xMC0yMiAwODo1MSAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgogCi0gICBCYWNrcG9ydGVkIHIxOTUyNTogbWFkZSBzdXJlIHRoYXQgY2xlYW5fc3VidHJlZSgpIGRlYWxsb2NhdGVzIGFsbAotICAgY29udGV4dCBjYWNoZSBub2Rlcy4KKyAgIEZvbGxvdy11cCBmb3IgcjE5NTExOiBtYWRlIHN1cmUgdGhhdCBjbGVhbl9zdWJ0cmVlKCkgZGVhbGxvY2F0ZXMKKyAgIGFsbCBjb250ZXh0IGNhY2hlIG5vZGVzLgorCisyMDEwLTEwLTIyIDA4OjQ5ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogbmV0c25tcF9jYWNoZV9mcmVlKCk6IEEgbW9yZSBkZXRhaWxlZCBtZXNzYWdlIGlzCisgICBub3cgbG9nZ2VkIHdoZW4gYXR0ZW1wdGluZyB0byBmcmVlIGEgY2FjaGUgdGhhdCBpcyBzdGlsbCBpbiB0aGUKKyAgIGNhY2hlIGxpc3QuCisKKzIwMTAtMTAtMjIgMDY6MzkgIGJ2YXNzY2hlCisKKyAgICogbHRtYWluLnNoOgorCisgICBSZXZlcnRlZCBsdG1haW4uc2ggY2hhbmdlcyBmcm9tIHIxOTUyMi4KKworMjAxMC0xMC0yMiAwNjozNCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIGx0bWFpbi5zaDoKKworICAgUmVnZW5lcmF0ZWQgYXV0b2NvbmYvYXV0b21ha2UvbGlidG9vbC1nZW5lcmF0ZWQgZmlsZXMgYnkgcnVubmluZworICAgYXV0b3JlY29uZiAtZi4KKworMjAxMC0xMC0yMSAwNzo1MSAgYnZhc3NjaGUKKworICAgKiBsdG1haW4uc2g6CisKKyAgIFJlYXBwbGllZCByMTg3MjYrcjE4NzY2OiBtYWtlIGxpYnRvb2wgc3VwcG9ydCAtZnN0YWNrLXByb3RlY3RvciouCisgICBTZWUgYWxzbworICAgaHR0cDovL2Jsb2cuZ21hbmUub3JnL2dtYW5lLmNvbXAuZ251LmxpYnRvb2wuYnVncy9tb250aD0yMDEwMDYwMQorICAgZm9yIHRoZSBjb25maXJtYXRpb24gdGhhdCB0aGlzIGlzIGEgbGlidG9vbCBidWcuCisKKzIwMTAtMTAtMjAgMjA6MTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBBdm9pZCB0aGF0IG5ldHNubXBfY2hlY2tfZGVmaW5lZG5lc3MoKSB0cmlnZ2VycyBhIGJ1aWxkIGZhaWx1cmUKKyAgIHdoZW4gY29tcGlsZWQgYWdhaW5zdCBvbGQgVmFsZ3JpbmQgaGVhZGVycy4gTm90ZTogdGhlIGludHJvZHVjZWQKKyAgIGNoZWNrIGlzIHN0cmljdGVyIHRoYW4gbmVjZXNzYXJ5IC0gVkFMR1JJTkRfUFJJTlRGX0JBQ0tUUkFDRSgpCisgICB3YXMgaW50cm9kdWNlZCBpbiBWYWxncmluZCAzLjUuMCBvciBiZWZvcmUgKG5vdCBzdXJlIHdoaWNoCisgICB2ZXJzaW9uKS4KKworMjAxMC0xMC0yMCAxNzoxMyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIGFkZGVkIGEgY29tbWVudCBpbiBjb2RlIG5vdGUgdGhhdCB0aGlzIHJlcXVpcmVzIGEgZmFpcmx5IHJlY2VudAorICAgdmFsZ3JpbmQKKworMjAxMC0xMC0yMCAxNzowMCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmU6CisKKyAgIHJlcmFuIGF1dG9jb25mIGFmdGVyIHVwZGF0aW5nIGxpYnRvb2wKKworMjAxMC0xMC0yMCAxNjo1OSAgaGFyZGFrZXIKKworICAgKiAgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBpbnN0YWxsLXNoLCBsdG1haW4uc2gsIG00L2xpYnRvb2wubTQsICAgCisgICAgICBtNC9sdG9wdGlvbnMubTQsIG00L2x0dmVyc2lvbi5tNCwgbTQvbHR+b2Jzb2xldGUubTQ6CisKKyAgIHVwZGF0ZSB0byBsaWJ0b29sIDIuNAorCisyMDEwLTEwLTIwIDE2OjU5ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgZGlzdC9hdXRvY29uZi12ZXJzaW9uOgorCisgICB1cGRhdGVkIHRvIGF1dG9jb25mIDIuNjgKKworMjAxMC0xMC0yMCAxNDoyNiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgsIHNubXBsaWIvY2FsbGJhY2suYywgICAKKyAgICAgIHdpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUoKQorICAgYW5kIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKCkuCisgICBDSEFOR0VTOiBhZ2VudDogTWVtb3J5IGFsbG9jYXRlZCBieSBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKQorICAgZm9yIHN0b3JpbmcgU05NUCB2YXJpYWJsZXMgaXMgbm93IGZyZWVkIHdoZW4gdGhlIGFzc29jaWF0ZWQKKyAgIGhhbmRsZXIgaXMgdW5yZWdpc3RlcmVkLgorICAgQ0hBTkdFUzogYWdlbnQ6IENhbGxiYWNrIGZ1bmN0aW9uIGRhdGEgZGVhbGxvY2F0aW9uIGRvZXMgbm8KKyAgIGxvbmdlciBmcmVlIHRoZSBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgQWdlbnRYIHNlc3Npb24gLSB0aGUKKyAgIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIEFnZW50WCBzZXNzaW9ucyBpcyBub3cgZGVhbGxvY2F0ZWQKKyAgIGp1c3QgYXMgdGhhdCBmb3IgYW55IG90aGVyIHNlc3Npb24uIFRoaXMgZml4ZXMgYSBsZWFrLWF0LWV4aXQuCisgICBDSEFOR0VTOiBhZ2VudDogTm90aWZ5IGZpbHRlciB0YWJsZTogQ2FsbGJhY2sgZnVuY3Rpb24gZGF0YQorICAgZGVhbGxvY2F0aW9uIGRvZXMgbm8gbG9uZ2VyIGZyZWUgdGhlIGRhdGEgaW4KKyAgICogICAgICpzbm1wTm90aWZ5RmlsdGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lciAtIHRoaXMgaXMgbm93IGRvbmUgYnkgIAorICAgICAgIHNodXRkb3duX3NubXBOb3RpZnlGaWx0ZXJUYWJsZSgpLiAgICBDSEFOR0VTOiBXaW4zMjoKKyAgICAgIHNodXRkb3duX3NubXBOb3RpZnlGaWx0ZXJUYWJsZSgpIGFuZAorCisgICBzaHV0ZG93bl93aW5FeHRETEwoKSBhcmUgbm93IGludm9rZWQgd2hlbiB0aGUgTmV0LVNOTVAgc2VydmljZSBpcworICAgc3RvcHBlZC4KKworMjAxMC0xMC0yMCAxMzo0NyAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NhZ2VudGxpYi5jOgorCisgICBVbml0LXRlc3RpbmcsIFQwMDV0YWJsZV9kYXRhc2V0X2NhZ2VudGxpYjogYWRkZWQgaW5pdF9hZ2VudCgpIGFuZAorICAgc2h1dGRvd25fYWdlbnQoKSBjYWxscy4KKworMjAxMC0xMC0yMCAxMzoxMiAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYzoKKworICAgRml4IG5vbi1BTlNJIGZ1bmN0aW9uIGhlYWRpbmcKIAogMjAxMC0xMC0yMCAxMjo1MSAgcnN0b3J5CiAKQEAgLTE3MDEsNyArMzU3MzQsNyBAQAogCiAgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCiAgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFnZW50L3NubXBkLmMsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmM6CiAKICAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIHNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCgpLgogICAgQ0hBTkdFUzogYWdlbnQ6IENhbGwgc2h1dGRvd25fbWFzdGVyX2FnZW50KCkgYW5kIHNodXRkb3duX2FnZW50KCkKQEAgLTE3MTcsMTQgKzM1NzUwLDgyIEBACiAgICBpcyBmb3IgdGhpcyBjaGFuZ2UgdGhhdCBpdCB3YXMgbmVjZXNzYXJ5IHRvIGludHJvZHVjZSB0aGUgbmV3CiAgICBmdW5jdGlvbiBzbm1wX3Nlc3Nfc2Vzc2lvbl9sb29rdXAoKS4KIAotMjAxMC0xMC0yMCAwNzo1NCAgYnZhc3NjaGUKKzIwMTAtMTAtMTkgMjM6NDkgIG1hZ2ZyCiAKLSAgICogdGVzdGluZy9ldmFsX3Rvb2xzLnNoOgorICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlOgogCi0gICBDSEFOR0VTOiB0ZXN0aW5nOiBNYWRlIGl0IHBvc3NpYmxlIHRvIGFuYWx5emUgYWxsIGNvZGUgY292ZXJlZCBieQotICAgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgd2l0aCBhIGR5bmFtaWMgYW5hbHl6ZXIsIGF0IGxlYXN0IGlmIHRoYXQKLSAgIGFuYWx5emVyIHN1cHBvcnRzIGZvbGxvd2luZyBjaGlsZCBwcm9jZXNzZXMuCi0gICAoQmFja3BvcnRlZCByMTkyODMgZnJvbSB0aGUgdHJ1bmsuKQorICAgQ0hBTkdFUzogdGVzdGluZzogQWRkIG1pc3NpbmcgcHJlY29uZGl0aW9ucworCisyMDEwLTEwLTE5IDIyOjExICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIGRvbid0IGRlZmF1bHQgdG8gYXBwbHlpbmcgdG8gNS4yCisKKzIwMTAtMTAtMTkgMjI6MTAgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgYWRkZWQgdGhlIDUuNiBicmFuY2gKKworMjAxMC0xMC0xOSAyMToxMyAgbmJhCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBCVUcgMzA3OTA3MiBmcm9tIERhdmUgQmVhbDogZml4IGJ1ZmZlciBvdmVyZmxvdyBmcm9tIGJhZCB1c2Ugb2YKKyAgIHN0cm5jYXQKKworMjAxMC0xMC0xOSAyMDo1NSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYzoKKworICAgUEFUQ0g6IDMwODUyOTUgZnJvbSBCaWxsIEZlbm5lcjogcmVjb2duaXplIExJU1RFTiBzdGF0ZSBhZ2FpbgorCisyMDEwLTEwLTE5IDIwOjA5ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYzoKKworICAgRml4IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMTAtMTkgMjA6MDggIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3JwbS5jOgorCisgICBGaXggcmV0dXJuaW5nIGdhcmJhZ2UgaW4gaHJTV0luc3RhbGxlZE5hbWUgKHNlZSByZXYgMTk0ODQgZm9yCisgICBmdXJ0aGVyIG5vdGVzKQorCisyMDEwLTEwLTE5IDE5OjU4ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmM6CisKKyAgIFByb3RlY3QgYWdhaW5zdCB1bnNhZmUgKCUpIGRldmljZSBuYW1lcworCisyMDEwLTEwLTE5IDE5OjU3ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKKworICAgU29sYXJpcyBkb2VzIG5vdCB1c2UgZ2V0c3RhdCwgc28gZG9udCBkZWNsYXJlIGl0CisKKzIwMTAtMTAtMTkgMTk6NTYgIG5iYQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jOgorCisgICB1ZHAvdGNwIGNvbmZ1c2lvbiBpbiBkZWJ1ZyBoYW5kbGUKKworMjAxMC0xMC0xOSAxOTo1NCAgbmJhCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgQWJvcnQgYWZ0ZXIgYmFkIC1DPyBvcHRpb24KKworMjAxMC0xMC0xOSAxOTo1MyAgbmJhCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgRGVsZXRlIHJlZHVuZGFudCBleHRlcm4gZGVjbGFyYXRpb25zCiAKIDIwMTAtMTAtMTkgMTg6MDggIGJ2YXNzY2hlCiAKQEAgLTE3MzQsNiArMzU4MzUsNjYgQEAKICAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogQXZvaWQgdGhhdCBNU1ZDIDIwMTAgcHJpbnRzIGEgd2FybmluZwogICAgbWVzc2FnZSBhYm91dCByZWRlZmluaW5nIEVBRERSSU5VU0UuCiAKKzIwMTAtMTAtMTkgMTg6MDUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90b29scy5jOgorCisgICBDSEFOR0VTOiBXaW4zMjogQXZvaWQgdGhhdCBNU1ZDIHJlcG9ydHMgYSB3YXJuaW5nIG1lc3NhZ2UgYWJvdXQKKyAgIHJlZGVmaW5pdGlvbiBvZiB0aGUgbWFsbG9jKCkgbWFjcm8gZHVyaW5nIGJ1aWxkaW5nIHRoZSBOZXQtU05NUAorICAgc291cmNlIGNvZGUuCisKKzIwMTAtMTAtMTkgMDc6MDQgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmg6CisKKyAgIENIQU5HRVM6IGFnZW50OiBGYWN0b3Igb3V0IGNvbW1vbiBjb25maWdfYWRkX21pYiBzdGF0bWVudHMKKworMjAxMC0xMC0xOCAxNDoyMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgTWFyayB0aGUgcHJvcGVyIGhhbmRsZXIgdGhhdCBvd25zIHRoZSB0YWJsZSByZWdpc3RyYXRpb24KKyAgIGluZm9ybWF0aW9uLgorCisyMDEwLTEwLTE4IDEwOjU0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogQWRkZWQgZnVuY3Rpb25zIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYnJlcSgpLAorICAgbmV0c25tcF9yZWdpc3RyYXRpb25fb3duc190YWJyZXEoKSwgbmV0c25tcF9pdGVyYXRvcl9jbG9uZSgpLgorICAgRXhwb3J0ZWQgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZSgpLgorICAgQ0hBTkdFUzogYWdlbnQ6IE1vZGlmaWVkIG5ldHNubXBfaXRlcmF0b3JfZGVsZXRlX3RhYmxlKCkgc3VjaAorICAgdGhhdCBpdCBmcmVlcyB0aGUgdGFibGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBhCisgICB0YWJsZSBpdGVyYXRvciB0b28uCisgICBDSEFOR0VTOiBhZ2VudDogTW9kaWZpZWQgbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlcigpCisgICBzdWNoIHRoYXQgdGhlIHRhYmxlIGl0ZXJhdG9yIHBhc3NlZCB0byB0aGlzIGZ1bmN0aW9uIGlzIGZyZWVkCisgICB3aGVuIHRoZSBhc3NvY2lhdGVkIGhhbmRsZXIgaXMgZnJlZWQuCisgICAKKyAgIFJlc3RvcmVkIHRoZSBiZWhhdmlvciBvZiBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKCkgdG8gdGhhdCBvZgorICAgcjE5NDQ5LCB0aGF0IGlzLCBub3Qgc2V0dGluZyB1cCB0aGUgZGF0YV9mcmVlIHBvaW50ZXIgYmVjYXVzZSBub3QKKyAgIGFsbCBjYWxsZXJzIG9mIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIoKSBleHBlY3QgdGhhdCB0YWJsZQorICAgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGlzIGZyZWVkIHdoZW4gdGhlIGFzc29jaWF0ZWQgaGFuZGxlciBpcworICAgZnJlZWQuCisKKzIwMTAtMTAtMTggMTA6MzQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGNhc3RpbmcgYXdheSBjb25zdG5lc3MuCisKIDIwMTAtMTAtMTggMDg6NTIgIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvc25tcGQuYzoKQEAgLTE3NDIsNiArMzU5MDMsMTMgQEAKICAgIHdpbmRvdywgdGhlIHNubXBkIHByb2Nlc3Mgbm93IHN0b3BzIHVwb24gdGhlIGZpcnN0IGtleSBwcmVzcy4KICAgIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIGRlYnVnIHNubXBkLmV4ZSBmb3IgbWVtb3J5IGxlYWtzLgogCisyMDEwLTEwLTE4IDA2OjI1ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGhvdXQgd2FybmluZ3Mgd2l0aCBNU1ZDIDYuCisKIDIwMTAtMTAtMTggMDY6MTUgIG1hZ2ZyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgpAQCAtMTc3NywxMiArMzU5NDUsNjUgQEAKIAogMjAxMC0xMC0xNyAxNzozMyAgYnZhc3NjaGUKIAotICAgKiBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jOgorICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmM6CiAKICAgIENIQU5HRVM6IHNubXBsaWI6IEF2b2lkIHRoYXQgVmFsZ3JpbmQgY29tcGxhaW5zIGFib3V0CiAgICB1bmluaXRpYWxpemVkIGRhdGEgZm9yIHRoZSBidWZmZXJzIHJldHVybmVkIGJ5CiAgICBuZXRzbm1wX2NhbGxiYWNrX3JlY3YoKSBhbmQgbmV0c25tcF9jYWxsYmFja19ob29rX2J1aWxkKCkuCiAKKzIwMTAtMTAtMTcgMTY6NTcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogdGFibGVfaGVscGVyX2hhbmRsZXIoKSwgNjQtYml0IGFyY2hpdGVjdHVyZXM6CisgICBhdm9pZCBwYXNzaW5nIGEgcG9pbnRlciB0byBhIDMyLWJpdCB2YWx1ZSB0byBhIGZ1bmN0aW9uIHRoYXQKKyAgIGV4cGVjdHMgYSBwb2ludGVyIHRvIGEgNjQtYml0IHZhbHVlIChwYXJzZV9vbmVfb2lkX2luZGV4KCkpLiBOb3QKKyAgIHN1cmUgd2hhdCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYnVnIHdlcmUuIEl0IG1pZ2h0IGhhdmUgY2F1c2VkCisgICB2ZXJ5IHN0cmFuZ2UgdGFibGUgYmVoYXZpb3Igb24gNjQtYml0IGJpZyBlbmRpYW4gc3lzdGVtcy4KKyAgIEZvdW5kIHRoaXMgdmlhIFZhbGdyaW5kLgorCisyMDEwLTEwLTE3IDE2OjUxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQXZvaWQgdGhhdCBoclNXUnVuUGF0aCBjb250YWlucyB0cmFpbGluZyBnYXJiYWdlCisgICBjaGFyYWN0ZXJzIG9uIExpbnV4IHN5c3RlbXMuCisgICBGb3VuZCB0aGlzIGJ5IGFuYWx5emluZyBhIFZhbGdyaW5kIGNvbXBsYWludC4gRm9yIGFueW9uZSB3aG8gaXMKKyAgIHdvbmRlcmluZyB3aHkgdGhpcyBwYXRjaCBtYWtlcyBzZW5zZSwgYSBxdW90ZSBmcm9tIHRoZSBnbGliYworICAgc25wcmludGYoKSBkb2N1bWVudGF0aW9uCisgICAoaHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYmMvbWFudWFsL2h0bWxfbm9kZS9Gb3JtYXR0ZWQtT3V0cHV0LUZ1bmN0aW9ucy5odG1sKToKKyAgIDxxdW90ZT4KKyAgIFRoZSByZXR1cm4gdmFsdWUgaXMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdoaWNoIHdvdWxkIGJlCisgICBnZW5lcmF0ZWQgZm9yIHRoZSBnaXZlbiBpbnB1dCwgZXhjbHVkaW5nIHRoZSB0cmFpbGluZyBudWxsLiBJZgorICAgdGhpcyB2YWx1ZSBpcyBncmVhdGVyIG9yIGVxdWFsIHRvIHNpemUsIG5vdCBhbGwgY2hhcmFjdGVycyBmcm9tCisgICB0aGUgcmVzdWx0IGhhdmUgYmVlbiBzdG9yZWQgaW4gcy4KKyAgIDwvcXVvdGU+CisgICBQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgZGlmZmVycyBmcm9tIHRoZSBzdGFuZGFyZCBiZWhhdmlvci4gQSBxdW90ZQorICAgZnJvbSBodHRwOi8vb3Blbmdyb3VwLm9yZy9vbmxpbmVwdWJzLzAwNzkwODc5OS94c2gvc25wcmludGYuaHRtbDoKKyAgIDxxdW90ZT4KKyAgIFJFVFVSTiBWQUxVRQorICAgVXBvbiBzdWNjZXNzZnVsIGNvbXBsZXRpb24sIHRoZXNlIGZ1bmN0aW9ucyByZXR1cm4gdGhlIG51bWJlciBvZgorICAgYnl0ZXMgdHJhbnNtaXR0ZWQgZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBudWxsIGluIHRoZSBjYXNlIG9mCisgICBzcHJpbnRmKCkgb3Igc25wcmludGYoKSBvciBhIG5lZ2F0aXZlIHZhbHVlIGlmIGFuIG91dHB1dCBlcnJvcgorICAgd2FzIGVuY291bnRlcmVkLgorICAgPC9xdW90ZT4KKworMjAxMC0xMC0xNyAxNDozMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBJdCBpcyBhZ2FpbiBwb3NzaWJsZSB0byBydW4gYW4gaW5kaXZpZHVhbCB0ZXN0CisgICB2aWEgdGhlIHNjcmlwdCB0ZXN0aW5nL1JVTlRFU1RTLgorCisyMDEwLTEwLTE3IDE0OjI4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIHRoZSBmdW5jdGlvbiBuZXRzbm1wX2NoZWNrX2RlZmluZWRuZXNzKCksCisgICB3aGljaCBoZWxwcyB0byBmaW5kIHRoZSBjYXVzZSBvZiB1bmRlZmluZWQgdmFsdWUgZXJyb3JzIGFzCisgICByZXBvcnRlZCBieSBWYWxncmluZC4KKwogMjAxMC0xMC0xNyAxNDoyNCAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaDoKQEAgLTE3OTAsMjkgKzM2MDExLDE1OCBAQAogICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSBkZWNsYXJhdGlvbjogdGhlIGZ1bmN0aW9uIGFnZW50eF9idWlsZCgpIGhhcwogICAgYmVlbiByZW1vdmVkIGEgbG9uZyB0aW1lIGFnby4KIAorMjAxMC0xMC0xNyAxNDowNSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciB0aGUgVmFsZ3JpbmQgaGVhZGVyIGZpbGVzLgorCisyMDEwLTEwLTE3IDEyOjAxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NDc3OiBtYWRlIHRoZSBpbnNlcnRlZCB0eXBlY2FzdHMgcG9ydGFibGUuCisKKzIwMTAtMTAtMTcgMTE6MDQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NDc2OiBmaXhlZCBhIHR5cG8uCisKKzIwMTAtMTAtMTcgMDk6MzYgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgRml4ZWQgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MgYnkgaW5zZXJ0aW5nIGFwcHJvcHJpYXRlIGNhc3RzLgorCisyMDEwLTEwLTE3IDA5OjI1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCktcmVsYXRlZCBjbGVhbnVwLgorCisyMDEwLTEwLTE3IDAxOjQxICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgYWdlbnQvc25tcGQuYzoKKworICAgTkVXUzogc25tcGQ6IFJlbW92ZSB1dGlsX2Z1bmNzL0V4aXQgZnJvbSB0aGUgcmVxdWlyZW1lbnQgc2V0cyBvZgorICAgdXRpbF9mdW5jcyBhbmQgZGVmYXVsdF9tb2R1bGVzLgorICAgTkVXUzogc25tcGQ6IE5ldmVyIHVzZSBFeGl0IHRvIHRlcm1pbmF0ZSB0aGUgYWdlbnQuCisKKzIwMTAtMTAtMTYgMjI6MzIgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsIGFnZW50L3NubXBkLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHRoZSBzZXR0aW5nIG9mIHRoZSBhcmd2cmVzdGFydCogdmFyaWFibGVzCisgICBvcHRpb25hbCBvbiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFLgorICAgTkVXUzogc25tcGQ6IFJlbW92ZSB1dGlsX2Z1bmNzL3Jlc3RhcnQgZnJvbSB0aGUgcmVxdWlyZW1lbnQgc2V0cworICAgb2YgdXRpbF9mdW5jcyBhbmQgZGVmYXVsdF9tb2R1bGVzLgorICAgQ0hBTkdFUzogc25tcGQ6IEFkZCB1dGlsX2Z1bmNzL3Jlc3RhcnQgdG8gdGhlIHJlcXVpcmVtZW50IHNldCBvZgorICAgdWNkLXNubXAvdmVyc2lvbmluZm8uCisKKzIwMTAtMTAtMTYgMjI6MDUgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBFeHRlbmQgdGhlIGRvY3VtZW50YXRpb24gZm9yIGRhdGFfY2xvbmUgYW5kCisgICBkYXRhX2ZyZWUKKworMjAxMC0xMC0xNiAyMjowMyAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgaXQgcG9zc2libGUgdG8gY29weSB3YXRjaGVkIGRhdGEgaXRlbXMKKyAgIHdpdGhvdXQgbWVtb3J5IGxlYWtzLgorCisyMDEwLTEwLTE2IDIyOjAxICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUmVtb3ZlIHVudXNlZCB2YXJpYWJsZSBjbXAKKworMjAxMC0xMC0xNiAxOTo0NCAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogRG8gbm90IGxlYWsgdGhlIGxpbWl0cyBvZiBzY2FsYXJfZ3JvdXAgb2JqZWN0cyBvbgorICAgc2h1dGRvd24uCisKIDIwMTAtMTAtMTYgMDg6MzcgIGJ2YXNzY2hlCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50OgogCiAgICBTcGVsbGluZyBmaXg6IGR1bHBpY2F0ZSAtPiBkdXBsaWNhdGUuCiAKLTIwMTAtMTAtMTUgMTI6NTMgIGJ2YXNzY2hlCisyMDEwLTEwLTE2IDA4OjM0ICBidmFzc2NoZQogCi0gICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCAgIAotICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaCwgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oOgorICAgKiAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmM6CiAKLSAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIGZ1bmN0aW9uIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KCkuCi0gICBDSEFOR0VTOiBzbm1wbGliOiBBZGRlZCBkZWNsYXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uCi0gICBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkgaW4gYSBwdWJsaWMgYWdlbnQgaGVhZGVyIGZpbGUuCi0gICBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBtZW1vcnkgbGVhayBpbgotICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSgpLgotICAgKEJhY2twb3J0ZWQgcjE5NDUwIGFuZCByMTk0NTQgZnJvbSB0cnVuay4pCisgICBBZGRlZCBtb3JlIHRlc3QgY29kZS4KKworMjAxMC0xMC0xNiAwODozMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgRm9sbG93LXVwIGZvciByMTk0NjU6IGhhbmRsZSBvdXQtb2YtbWVtb3J5IHByb3Blcmx5IC8gcmVtb3ZlZCBhCisgICBkdXBsaWNhdGUgZnVuY3Rpb24uCisKKzIwMTAtMTAtMTUgMTk6MTcgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FnZW50bGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2xpYi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA2c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jYWdlbnRsaWIuYywKKyAgICAgICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NsaWIuYzoKKworICAgQ0hBTkdFUzogdGVzdGluZzogSW50cm9kdWNlZCBuZXcgdGVzdCB0eXBlIG5leHQgdG8gY2FwcCBhbmQgY2xpYjoKKyAgIGNhZ2VudGxpYi4KKworMjAxMC0xMC0xNSAxODo1NiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYywgYWdlbnQvaGVscGVycy90YWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2xpYi5jOgorCisgICBORVdTOiBzbm1wbGliOiBBZGRlZCBuZXRzbm1wX21pYl9oYW5kbGVyLmRhdGFfY2xvbmUsIGEgZnVuY3Rpb24KKyAgIHBvaW50ZXIgdGhhdCBkZWZpbmVzIGhvdyB0byBjbG9uZSBuZXRzbm1wX21pYl9oYW5kbGVyLm15dm9pZC4KKyAgIE11c3QgYmUgZGVmaW5lZCBpZiBhbmQgb25seSBpZiBkYXRhX2ZyZWUgaXMgc2V0LiBUaGUgZnVuY3Rpb24KKyAgIG5ldHNubXBfaGFuZGxlcl9kdXAoKSBkb2VzIG5vdyBjbG9uZSBNSUIgaGFuZGxlciBwcml2YXRlIGRhdGEgaWYKKyAgIGRhdGFfY2xvbmUoKSBpcyBzZXQuIFByZXZpb3VzbHkgYWZ0ZXIgZHVwbGljYXRpbmcgYSBNSUIgaGFuZGxlcgorICAgYW5kIHVucmVnaXN0ZXJpbmcgb25lIG9mIHRoZSB0d28gTUlCIGhhbmRsZXJzLCB0aGUgcHJpdmF0ZSBkYXRhCisgICBwb2ludGVyIChteXZvaWQpIG9mIHRoZSBvdGhlciBiZWNhbWUgYSBkYW5nbGluZyBwb2ludGVyLiBOb3RlOgorICAgYWRkaXRpb24gb2YgbmV0c25tcF9taWJfaGFuZGxlci5kYXRhX2Nsb25lIGlzIGFuIEFCSSBjaGFuZ2UuCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBhZGRlZCBtb3JlIHRlc3QgY2FzZXMgdG8gdGhlIGhhbmRsZXIKKyAgIHJlZ2lzdHJhdGlvbiB0ZXN0LgorCisyMDEwLTEwLTE1IDE4OjMyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLgogCiAyMDEwLTEwLTE1IDEyOjMwICBidmFzc2NoZQogCi0gICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYzoKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2xpYi5jOgogCiAgICBSZXZlcnRlZCByMTk0NjAgYmVjYXVzZSBpdCBtYWtlcyBzb21lIHJlZ3Jlc3Npb24gdGVzdHMgZmFpbAogICAgKFQxMjBwcm94eWdldF9zaW1wbGUsIFQxMjFwcm94eXNldF9zaW1wbGUsCkBAIC0xODI4LDE3ICszNjE3OCwxMDggQEAKICAgIGhhbmRsZXIgbm8gbG9uZ2VyIGNhdXNlcyBhIGNyYXNoIChkb3VibGUgZnJlZSkgd2hlbgogICAgaGFuZGxlci0+bXl2b2lkIG9mIHRoZSBvcmlnaW5hbCBoYW5kbGVyIHdhcyBub24tTlVMTC4KIAotMjAxMC0xMC0xNSAxMDowMiAgYnZhc3NjaGUKKzIwMTAtMTAtMTUgMTE6MzIgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBtYW4vbmV0c25tcF9oYW5kbGVyLjM6CisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2xpYi5jOgogCi0gICBTcGVsbGluZyBmaXg6IGR1bHBpY2F0ZXMgLT4gZHVwbGljYXRlcy4KKyAgIEFkZGVkIGEgdW5pdCB0ZXN0IGZvciBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBhbmQgZGVyZWdpc3RyYXRpb24uCiAKLTIwMTAtMTAtMTUgMDk6NTMgIGJ2YXNzY2hlCisyMDEwLTEwLTE1IDEwOjU2ICBidmFzc2NoZQogCi0gICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYzoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgRml4ZWQgYSBzcGVsbGluZyBlcnJvciBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQuCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IEJ1aWxkcyBub3cgY29ycmVjdGx5IHdpdGggYSA2NC1iaXQKKyAgIGNvbXBpbGVyLgorCisyMDEwLTEwLTE1IDA5OjQ1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogc25tcF9zaHV0ZG93bigpOiBhZGRlZCBjYWxsIHRvCisgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCkuCisKKzIwMTAtMTAtMTUgMDY6NDUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5NDUwOiBsZXQgbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKSBmcmVlCisgICBhbGwgdGFibGVfZGF0YXNldC1yZWxhdGVkIG1lbW9yeS4KKworMjAxMC0xMC0xNCAyMzoxNSAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogTWFrZSBpdCBwb3NzaWJsZSB0byByZWdlbmVyYXRlIHVzaW5nIGF1dG9jb25mCisgICAyLjY4LgorCisyMDEwLTEwLTE0IDIzOjAxICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCZSBjb25zdCBjb3JyZWN0IG92ZXIgY2FsbHMgdG8gc3RyKiBmdW5jdGlvbnMuCisKKzIwMTAtMTAtMTQgMTU6MTkgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDV0YWJsZV9kYXRhc2V0X2NsaWIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkZWQgZnVuY3Rpb24gbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQoKS4KKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZGVkIGRlY2xhcmF0aW9uIGZvciB0aGUgZnVuY3Rpb24KKyAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUoKSBpbiBhIHB1YmxpYyBhZ2VudCBoZWFkZXIgZmlsZS4KKyAgIENIQU5HRVM6IHNubXBsaWI6IEZpeGVkIG1lbW9yeSBsZWFrIGluCisgICBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCkuCisgICBDSEFOR0VTOiBzbm1wbGliOiBGaXhlZCBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgdW5yZWdpc3RlcmluZyBhCisgICB0YWJsZSBoYW5kbGVyLgorICAgQ0hBTkdFUzogdGVzdGluZzogVW5pdCB0ZXN0cyBjYW4gbm93IGludm9rZSBmdW5jdGlvbnMgZnJvbQorICAgbGliYWdlbnQuCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBBZGRlZCB1bml0IHRlc3QgZm9yIHRhYmxlX2RhdGFzZXQuCisKKzIwMTAtMTAtMTQgMTQ6MDUgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYzoKKworICAgVW5pdCB0ZXN0IFQwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOiBGaXhlZCBsZWFrcy1hdC1leGl0LgorCisyMDEwLTEwLTE0IDA4OjQzICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX3J1bjoKKworICAgQ0hBTkdFUzogdGVzdGluZzogSXQgaXMgbm93IHBvc3NpYmxlIHRvIGFuYWx5emUgdGhlIHVuaXQgdGVzdHMKKyAgIHdpdGggVmFsZ3JpbmQgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgICBTTk1QX1NBVkVfVE1QRElSIGFuZCBEWU5BTUlDX0FOQUxZWkVSLiBBbiBleGFtcGxlOiAoZXhwb3J0CisgICBTTk1QX1NBVkVfVE1QRElSPXllcyBEWU5BTUlDX0FOQUxZWkVSPSJ2YWxncmluZAorICAgLS10cmFjZS1jaGlsZHJlbj15ZXMgLS1sZWFrLWNoZWNrPWZ1bGwiOyBjZCB0ZXN0aW5nICYmCisgICAuL1JVTkZVTExURVNUUyAtZyB1bml0LXRlc3RzKQorCisyMDEwLTEwLTE0IDA4OjQwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmM6CisKKyAgIFVuaXQgdGVzdCBUMDA0c25tcF9lbnVtX2NsaWIuYzogYWRkZWQgdGVzdCBoZWFkZXIgLyBhZGRlZCBhIHRlc3QKKyAgIGNhc2UuCisKKzIwMTAtMTAtMTQgMDg6MzkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIEZpeGVkIGxlYWtzLWF0LWV4aXQgaW4gdW5pdCB0ZXN0IFQwMDJjb250YWluZXJzX2NsaWIuYy4KKworMjAxMC0xMC0xNCAwODozOCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOgorCisgICBGaXhlZCBhIGxlYWstYXQtZXhpdCBpbiB1bml0IHRlc3QgVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMuCiAKIDIwMTAtMTAtMTQgMDg6MzYgIGJ2YXNzY2hlCiAKQEAgLTE4NDgsMTkgKzM2Mjg5LDE5NyBAQAogICAgc2VfYWRkX3BhaXJfdG9fbGlzdCgpIHdpdGggYSB2YWx1ZSB0aGF0IGFscmVhZHkgZXhpc3RlZCBpbiB0aGUKICAgIGxpc3QuCiAKKzIwMTAtMTAtMTQgMDc6MTYgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZzoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTEwLTE0IDA3OjEyICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDBjb25maWd1cmUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDBjb25maWd1cmVfc2ltcGxlOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgdmFyaWFibGUgJFNOTVBfQkFTRURJUiBpcyBhdmFpbGFibGUgaW4gdGhlCisgICBUMDAwY29uZmlndXJlIHRlc3QuCisKKzIwMTAtMTAtMTQgMDY6MTkgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZWdlbmVyYXRlZAorCisyMDEwLTEwLTE0IDA1OjM2ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgUXVlbGwgd2FybmluZ3MKKworMjAxMC0xMC0xNCAwMzo1MCAgcnN0b3J5CisKKyAgICogIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2Rhcndpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaCwgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgdGVzdCBmb3Igb3BlbnNzbCBzaGEgMjI0LzI1Ni8zODUvNTEyIHN1cHBvcnQgaW5zdGVhZCBvZgorICAgaGFyZGNvZGluZworCisyMDEwLTEwLTE0IDAzOjUwICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBhZGQgT1VUUFVURU5WVkFSUyB0byBzYXZlIGltcG9ydGFudCBlbnZpcm9ubWVudCB2YXJpYWJsZXM7IHdoZW4KKyAgIFNOTVBfVkVSQk9TRQorICAgaXMgc2V0LCBzYXZlIGVudiB2YXJzIGFuZCBjb21tYW5kIHRvIGluZGl2aWR1YWwgaW52b2tlZCBmaWxlIGZvcgorICAgZWFjaCB0ZXN0OworICAgc2F2ZSBlbnYgdmFycyBhbmQgY29tbWFuZCBmb3IgZWFjaCBTVEFSVFBST0cKKworMjAxMC0xMC0xNCAwMzo1MCAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IGF1dG8tY3JlYXRlIHVzZXIgc3BlY2lmaWVkIFNOTVBfVE1QRElSIGFuZAorICAgU05NUF9UTVBfUEVSU0lTVEVOVERJUiB0b287IGRlZmF1bHQgU05NUF9UTVBfUEVSU0lTVEVORElSIGJhc2VkCisgICBvbiBTTk1QX1RNUERJUgorICAgZm9yIHVzZXIgc3BlY2lmaWVkIFNOTVBfVE1QRElSCisKKzIwMTAtMTAtMTQgMDM6NDkgIHJzdG9yeQorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogY2hlY2sgZm9yIC9kZXYva21lbSBpbnN0ZWFkIG9mIGFzc3VtaW5nIGl0CisgICBleGlzdHMgYW5kIGhhcmRjb2Rpbmcgd2hlbiBpdCBpcyBub3QgdGhlcmUKKworMjAxMC0xMC0xNCAwMzoyOCAgcnN0b3J5CisKKyAgICogIHNubXBsaWIvc25tcHRzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2V0IHRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwgYmFzZWQgb24gc3NsIHNlc3Npb24gYWxnb3JpdGhtcworCisyMDEwLTEwLTE0IDAzOjI2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGFkZCBuZXRzbm1wX29wZW5zc2xfbnVsbF9jaGVja3MKKworMjAxMC0xMC0xNCAwMzoyMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2xlYW51cCBzc2wvYmlvIG9uIGZhaWxlZCBjb25uZWN0aW9uCisKKzIwMTAtMTAtMTQgMDM6MjEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyIHdhcm5pbmcKKworMjAxMC0xMC0xNCAwMzoxOCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcmVtb3ZlIHVudXNlZCB2YXIKKworMjAxMC0xMC0xNCAwMzoxNiAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvCisKKzIwMTAtMTAtMTQgMDM6MTIgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGNoZWNrIGZvciBudWxsIGJlZm9yZSBkZXJlZgorCisyMDEwLTEwLTEzIDIwOjEyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogR2VuZXJhdGUgYSBub3JtYWwgI2xpbmUgZGlyZWN0aXZlIGFzIHBlciBDOTkKKyAgIGluc3RlYWQgb2YgdGhlIGNvbXBpbGVyLXNwZWNpZmljICM8bj4tZGlyZWN0aXZlLgorCiAyMDEwLTEwLTEzIDE2OjUzICBoYXJkYWtlcgogCi0gICAqIGRpc3QvYXV0b2NvbmYtdmVyc2lvbiwgdGVzdGluZy90ZXN0cy9UMDAwY29uZmlndXJlOgorICAgKiBkaXN0L2F1dG9jb25mLXZlcnNpb24sIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMGNvbmZpZ3VyZToKIAogICAgYWRkZWQgYSBhdXRvY29uZiB2ZXJzaW9uIGNoZWNraW5nIHRlc3QgdG8gY2F0Y2ggZGV2ZWxvcGVycyBhbmQKICAgIHNjcmlwdHMgdGhhdCBmYWlsIHRvIHVzZSB0aGUgY29ycmVjdCBhdXRvY29uZiB2ZXJzaW9uCiAKKzIwMTAtMTAtMTMgMTY6MzAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIFBhdGNoIGZyb20gQmlsbCBGZW5uZXIgdG8gZml4IG9ubHkgaW5jbHVkaW5nIHRoZSBzZXNzaW9uX2FwaS5oCisgICBmaWxlCisKKzIwMTAtMTAtMTMgMTY6MjkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTQyMTogTWFkZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGFnYWluIHJlcG9ydHMKKyAgIHRoZSBwcm9wZXIgZmlsZW5hbWUgYW5kIGxpbmUgbnVtYmVyIGluZm9ybWF0aW9uIHdoaWxlIGNvbXBpbGluZworICAgdW5pdCB0ZXN0cy4KKworMjAxMC0xMC0xMyAxMTo1MyAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogYmF0Y2ggYnVpbGQgd2l0aCBPcGVuU1NMIGVuYWJsZWQgYW5kCisgICB3aXRoIHJlY2VudCBPcGVuU1NMIGRldmVsb3BtZW50IGZpbGVzIHdvcmtzIGFnYWluLgorCisyMDEwLTEwLTEzIDA5OjU4ICBidmFzc2NoZQorCisgICAqICBuZXQtc25tcC1jb25maWcuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9ydW46CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogUnVubmluZyB0aGUgdW5pdCB0ZXN0cyBkb2VzIG5vdyB3b3JrIChjZCB0ZXN0aW5nCisgICAmJiAuL1JVTkZVTExURVNUUyAtZyB1bml0LXRlc3RzKS4KKyAgIENIQU5HRVM6IE1pbkdXOiBSdW5uaW5nIHRoZSB1bml0IHRlc3RzIGRvZXMgbm93IHdvcmsgKGNkIHRlc3RpbmcKKyAgICYmIC4vUlVORlVMTFRFU1RTIC1nIHVuaXQtdGVzdHMpLgorCisyMDEwLTEwLTEzIDA4OjAwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIEZpeGVkIGEgc3BlbGxpbmcgZXJyb3IgaW4gYSBzb3VyY2UgY29kZSBjb21tZW50LgorCiAyMDEwLTEwLTEzIDA3OjQzICBidmFzc2NoZQogCiAgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKIAogICAgU3BlbGxpbmcgZml4ZXMuCiAKKzIwMTAtMTAtMTIgMTQ6MDIgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oOgorCisgICBBZGRlZCBkZWNsYXJhdGlvbiBmb3Igc2VfY2xlYXJfc2xpc3QoKS4KKworMjAxMC0xMC0xMiAxMToxMiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jOgorCisgICBBZGRlZCBtb3JlIHRlc3QgY2FzZXMgdG8KKyAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmMuCisgICBWZXJpZmllZCB3aXRoIFZhbGdyaW5kIHRoYXQgZXZlcnl0aGluZyBkb2VzIG5vdyB3b3JrIGNvcnJlY3RseQorICAgYW5kIHRoYXQgdGhlCisgICB0ZXN0IHByb2dyYW0gaXMgZnJlZSBvZiBsZWFrcy1hdC1leGl0LgorCiAyMDEwLTEwLTEyIDExOjExICBidmFzc2NoZQogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaCwgc25tcGxpYi9zbm1wX2VudW0uYzoKQEAgLTE4NzksMTMgKzM2NDk4LDE4OSBAQAogICAgbm90IHdvcmsuCiAgICBDSEFOR0VTOiBzbm1wbGliOgogCi0yMDEwLTA5LTIxIDAwOjA2ICBoYXJkYWtlcgorMjAxMC0xMC0xMiAwNjoyNyAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCB3aW4zMi9saWJoZWxwZXJzLCB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdzoKKworICAgQ0hBTkdFUzogV2luMzI6IFBBVENIOiAzMDg1MTg3OiBCdWlsZGluZyB2aWEgdGhlIE1pY3Jvc29mdCBWaXN1YWwKKyAgIFN0dWRpbyBwcm9qZWN0IGZpbGUgKC5kc3cvLmRzcCkgd29ya3MgYWdhaW4uCisKKzIwMTAtMTAtMTIgMDU6MzUgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IENvcnJlY3QgdGhlIGV4dGVybiAiQyIgZGVjbGFyYXRpb25zIHRvIGJlCisgICBjb25zaXN0ZW50LiBSZW1vdmUgY29tbWVudGVkIG91dCBjb2RlLgorCisyMDEwLTEwLTExIDIxOjQxICBuYmEKKworICAgKiBjb25maWd1cmU6CisKKyAgIHJ1biBhdXRvY29uZgorCisyMDEwLTEwLTExIDIxOjM5ICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBTdXBwb3J0IGZvciBoclNXSW5zdGFsbGVkVGFibGUgZm9yIGRwa2cvYXB0LWJhc2VkIHN5c3RlbXMKKworMjAxMC0xMC0xMSAyMDo0NiAgbmJhCisKKyAgICogbWlicy9NYWtlZmlsZS5taWIsIG1pYnMvcmZjbGlzdDoKKworICAgVXBkYXRlIHNvdXJjZXMgZm9yIFNOTVAtVExTLVRNLU1JQgorCisyMDEwLTEwLTExIDIwOjQyICBuYmEKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgQ2hlY2sgZWFybHkgZm9yIHBpY2wuaAorCisyMDEwLTEwLTExIDIwOjMxICBuYmEKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg6CisKKyAgIEZpeCB3YXJuaW5ncyBmcm9tIGxtc2Vuc29yTWliCisKKzIwMTAtMTAtMTEgMjA6MzAgIG5iYQorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYzoKKworICAgRml4IG5ldyBzdHlsZSBsbXNlbnNvck1pYiBmb3IgU29sYXJpcyAod2FzIGl0IGV2ZXIgY29tcGlsZWQKKyAgIGJlZm9yZSkKKworMjAxMC0xMC0xMSAyMDoyOCAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIEZpeCBsbVNlbnNvcnMgZm9yIFNvbGFyaXMKKworMjAxMC0xMC0xMSAyMDoyNyAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmM6CisKKyAgIEZpeCBhIFNvbGFyaXMgZmlsZSBkZXNjcmlwdG9yIGxlYWsKKworMjAxMC0xMC0xMSAyMDoyNSAgbmJhCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIE1ha2UgLS1kaXNhYmxlLWRldmVsb3BlciB3b3JrCisKKzIwMTAtMTAtMTEgMTg6MjMgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogVXBkYXRlIHRoZSBsZW5ndGggb2Ygc3lzT2JqZWN0SUQgYXMgd2VsbCBhcyB0aGUKKyAgIGRhdGEgd2hlbiBpdCBpcyBzZXQgZnJvbSBhIGNvbmZpZ3VyYXRpb24gZmlsZS4KKworMjAxMC0xMC0xMSAxNzo1OCAgbWFnZnIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBmcm9tICJOaWVscyBCYWdnZXNlbiI6IFNvbWUgc3lzdGVtcyBkbyBub3QKKyAgIHN1cHBvcnQgdGhlIC1FIGZsYWcgdG8gZ3JlcCwgdXNlIGF1dG9jb25mIHRvIGZpbmQgdGhlIHJpZ2h0IGVncmVwCisgICBhdCBhbGwgdGltZXMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNi5SQzMgLT4gVjUuNgorCisyMDEwLTEwLTA3IDIwOjMzICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTEwLTA2IDExOjMxICBuYmEKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXM6CisKKyAgIEZpeCBpcHY2IGdlbmVyaWMgY2FzZSBzbyB0ZXN0IG1hdGNoZXMgdmVyaWZpY2F0aW9uCisKKzIwMTAtMTAtMDEgMTY6NDQgIGR0czEyCisKKyAgICogbWFuL3ZhcmlhYmxlcy41LmRlZjoKKworICAgUmV3b3JrIGRlc2NyaXB0aW9uIG9mIE9JRCBuYW1lIGhhbmRsaW5nIHRvIGJlCisgICBub3QgcXVpdGUgc28gaW5jcmVkaWJseSBvdXQgb2YgZGF0ZS4KKworMjAxMC0wOS0yMiAxNDowMiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmU6CisKKyAgIGVyZy4uLiByZWFsbHkgdXNlIHRoZSByaWdodCBhdXRvY29uZiB2ZXJzaW9uIGJ5IHNldHRpbmcgdGhlIHBhdGgKKyAgIHJpZ2h0CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNi5yYzIgLT4gVjUuNi5yYzMKKworMjAxMC0wOS0yMSAyMzo1MyAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmU6CisKKyAgIHJlZ2VuZXJhdGVkIHdpdGggcHJvcGVyIGF1dG9jb25mIHZlcnNpb24KKworMjAxMC0wOS0yMSAyMzo0OSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wOS0yMSAyMzo0NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB2ZXJpZmllZCBwYXRjaCBmcm9tIHJzdG9yeSB0byBmaXggY2VydGlmaWNhdGUgbG9hZGluZyBvZgorICAgaW5jb21wbGV0ZSBjaGFpbnMKKworMjAxMC0wOS0yMSAxODowNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoIDMwNTgzODg6IGZyb20gY2hyaXNib2x0OiBkb24ndCBwYXJzZQorICAgaW5jbHVkZUFsbERpc2tzIGluIHRoZSBtYWluIHNubXBsaWIgcm91dGluZXMKKworMjAxMC0wOS0yMSAxODowNiAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CiAKICAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAzMDYyNTI2OiBmcm9tIG1hcmlvZzg1OiBmaXggc2VjdXJpdHkKICAgIGVuZ2luZUlEIHNldHRpbmcgaW4gdGhlIHRyYXBzZXNzIGRpcmVjdGl2ZQogCisyMDEwLTA5LTIxIDE1OjEzICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgVXBkYXRlZCBXaW4zMiBkb2N1bWVudGF0aW9uLgorCisyMDEwLTA5LTIwIDIzOjIwICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgUGF0Y2ggZnJvbSBGdWxrbyBIZXcgdG8gZml4IHBhdGNoIDI5MDAwNzggd2hpY2ggYnJva2Ugc3lzT2JqZWN0SUQKKyAgIGxlbmd0aHMKKworMjAxMC0wOS0yMCAyMTozMiAgZHRzMTIKKworICAgKiBtYW4vc25tcGdldC4xLmRlZiwgbWFuL3NubXBnZXRuZXh0LjEuZGVmOgorCisgICBEb2N1bWVudCAtQ2YgaW4gdGhlIHR3byBtYW4gcGFnZXMgc2VwYXJhdGVseS4KKwogMjAxMC0wOS0yMCAyMDoyMyAgYnZhc3NjaGUKIAogICAgKiBzbm1wbGliL21pYi5jOgpAQCAtMTg5MywyMCArMzY2ODgsMzExIEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMzA2NzU0MDogZnJvbSBqb3ljZWFubWFjaGluZTogRml4IElQdjQKICAgIE9JRCBpbmRleGVzIG9uIDY0LWJpdCBiaWctZW5kaWFuIHN5c3RlbXMuCiAKKzIwMTAtMDktMjAgMTk6MjUgIGJ2YXNzY2hlCisKKyAgICogIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oLCB3aW4zMi9Db25maWd1cmUsICAgCisgICAgICB3aW4zMi9NYWtlZmlsZS5pbiwgd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AsIHdpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMmRsbC5kc3c6CisKKyAgIFVuLWJyZWFrIHRoZSBNU1ZDIGJ1aWxkLgorCisyMDEwLTA5LTIwIDA5OjE4ICBidmFzc2NoZQorCisgICAqIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzLCBtYW4sIHRlc3RpbmcsIHdpbjMyOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3RzLgorCisyMDEwLTA5LTE3IDEwOjM0ICBkdHMxMgorCisgICAqICBtYW4vYWdlbnR4dHJhcC4xLmRlZiwgbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3NubXBidWxrZ2V0LjEuZGVmLCAgIAorICAgICAgbWFuL3NubXBidWxrd2Fsay4xLmRlZiwgbWFuL3NubXBnZXQuMS5kZWYsIG1hbi9zbm1wZ2V0bmV4dC4xLmRlZiwgCisgICAgICAgIG1hbi9zbm1wc2V0LjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIG1hbi9zbm1wdHJhcGQuOC5kZWYsICAgCisgICAgICBtYW4vc25tcHdhbGsuMS5kZWY6CisKKyAgIFJlbW92ZSBDTVUgY29weXJpZ2h0IG5vdGljZSBmcm9tIG1hbiBwYWdlcyB0aGF0IHdlcmUgbm90CisgICBpbmhlcml0ZWQgZnJvbSBDTVUtU05NUCAoYW5kIHF1YWxpZnkgdGhlIGNvcHlyaWdodCBmb3IKKyAgIHRob3NlIHRoYXQgd2VyZSkuCisKKzIwMTAtMDktMTcgMDk6NTEgIGR0czEyCisKKyAgICogIG1hbi9kZWZhdWx0X3N0b3JlLjMuYm90LCBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vc25tcC5jb25mLjUuZGVmLCBtYW4vc25tcF9hbGFybS4zLmRlZiwgbWFuL3NubXBfY29uZmlnLjUuZGVmLCAKKyAgICAgICAgbWFuL3NubXBkLmNvbmYuNS5kZWYsIG1hbi9zbm1wZC5leGFtcGxlcy41LmRlZiwgICAKKyAgICAgIG1hbi9zbm1wZC5pbnRlcm5hbC41LmRlZiwgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmOgorCisgICBVcGRhdGUgbWFuIHBhZ2UgcmVmZXJlbmNlcyB0byByZWZsZWN0IG5ldyBBUEkgZG9jdW1lbnRhdGlvbgorICAgc3RydWN0dXJlLgorCisyMDEwLTA5LTEwIDA0OjIzICBtYWdmcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogQWRkIG5ldyB0ZXN0KiBlbnRyaWVzIGZyb20gdGhlIHRlc3RpbmcKKyAgIE1ha2VmaWxlLmluIHRvIHRoZSB0b3AtbGV2ZWwgTWFrZWZpbGUuaW4KKworMjAxMC0wOS0wOCAxNTo0MSAgZHRzMTIKKworICAgKiAgbWFuL2FnZW50eHRyYXAuMS5kZWYsIG1hbi9kZWZhdWx0X3N0b3JlLjMudG9wLCAgIAorICAgICAgbWFuL2VuY29kZV9rZXljaGFuZ2UuMS5kZWYsIG1hbi9maXhwcm9jLjEuZGVmLCAgIAorICAgICAgbWFuL21pYjJjLXVwZGF0ZS4xLmRlZiwgbWFuL21pYjJjLjEuZGVmLCBtYW4vbWliMmMuY29uZi41LmluLCAgIAorICAgICAgbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZiwgbWFuL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wLWJyaWRnZS1taWIuMSwgbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBfYWxhcm0uMy5kZWYsIAorICAgICAgICBtYW4vc25tcF9jb25maWcuNS5kZWYsIG1hbi9zbm1wYnVsa2dldC4xLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wYnVsa3dhbGsuMS5kZWYsIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcGNvbmYuMS5kZWYsICAgCisgICAgICBtYW4vc25tcGQuOC5kZWYsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYsICAKKyAgICAgICBtYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYsIG1hbi9zbm1wZGVsdGEuMS5kZWYsIG1hbi9zbm1wZGYuMS5kZWYsIAorICAgICAgICBtYW4vc25tcGdldC4xLmRlZiwgbWFuL3NubXBnZXRuZXh0LjEuZGVmLCBtYW4vc25tcG5ldHN0YXQuMS5kZWYsCisgICAgICAgICBtYW4vc25tcHNldC4xLmRlZiwgbWFuL3NubXBzdGF0dXMuMS5kZWYsIG1hbi9zbm1wdGFibGUuMS5kZWYsICAKKyAgICAgICBtYW4vc25tcHRlc3QuMS5kZWYsIG1hbi9zbm1wdHJhbnNsYXRlLjEuZGVmLCBtYW4vc25tcHRyYXAuMS5kZWYsIAorICAgICAgICBtYW4vc25tcHRyYXBkLjguZGVmLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYsCisgICAgICBtYW4vc25tcHVzbS4xLmRlZiwgICAgbWFuL3NubXB2YWNtLjEuZGVmLCBtYW4vc25tcHdhbGsuMS5kZWYsCisgICAgICBtYW4vdGttaWIuMS5kZWYsICAgIG1hbi90cmFwdG9lbWFpbC4xLmRlZiwgbWFuL3ZhcmlhYmxlcy41LmRlZjoKKworICAgVXBkYXRlIG1hbiBwYWdlIGRhdGVzdGFtcHMgdG8gbWF0Y2ggdGhlIGxhdGVzdCAobm9uLXRyaXZpYWwpCisgICBjb250ZW50IGNoYW5nZS4KKyAgIFN1cHByZXNzIGZvcmNpbmcgb2YgIkJlcmtlbGV5IERpc3RyaWJ1dGlvbiIgZm9vdGVyCisgICAoQWxsb3dzIE5ldC1TTk1QIHZlcnNpb24gaW5mb3JtYXRpb24gdG8gYmUgZGlzcGxheWVkIGluIHRoZSBtYW4KKyAgIHBhZ2UpCisKKzIwMTAtMDktMDggMDU6MzcgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSZWdlbmVyYXRlZAorCisyMDEwLTA5LTA0IDA2OjM4ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTkzNTYgYnkKKyAgIGNoYW5naW5nIHRoZSByZXR1cm4KKyAgIHR5cGUgb2YgbmV0c25tcF90bHNiYXNlX2ZyZWVfdGxzZGF0YSgpIGZyb20gdm9pZCogdG8gdm9pZC4KKworMjAxMC0wOS0wNCAwNjozNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyB0aGF0IHdhcyBpbnRyb2R1Y2VkIGluIHIxOTMyMiAocGF0Y2gKKyAgIDMwNDQ1MTIpLgorICAgVGhlIHRoaXJkIGFyZ3VtZW50IHBhc3NlZCB0byByZWFkX29iamlkKCkgd2FzIGFuIGludCBpbnN0ZWFkIG9mCisgICBzaXplX3QuCisgICBUaGlzIGNvdWxkIGhhdmUgY2F1c2VkIG1lbW9yeSBjb3JydXB0aW9uIG9uIDY0LWJpdCBzeXN0ZW1zLgorCisyMDEwLTA5LTA0IDAzOjA5ICBoYXJkYWtlcgorCisgICAqIENIQU5HRVM6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDktMDQgMDM6MDggIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA5LTA0IDAxOjU3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wOS0wNCAwMDo1OSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wOS0wMyAyMjoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggdGxzdGNwIHBhcnNpbmcgb2YgaG9zdCBuYW1lcy4KKworMjAxMC0wOS0wMyAyMjoxMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYzoKKworICAgY2hlY2sgdGhlIHJldHVybiBjb2RlIG9mIGZnZXRzIGFuZCBmb3BlbiBiZWZvcmUgaW5zZXJ0aW5nIHRoZQorICAgcmVzdWx0cy4KKworMjAxMC0wOS0wMyAyMjoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgUGF0Y2ggZnJvbSB0YW5kZXJzIHRvIGZpeCBicm9rZW4gYWxhcm1zIGFmdGVyIHRoZSBwcmV2aW91cworICAgcmUtZW50cmFudCBwYXRjaAorCiAyMDEwLTA5LTAzIDIyOjA1ICBoYXJkYWtlcgogCi0gICAqIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmM6CiAKICAgIENIQU5HRVM6IHNubXBsaWI6IHBhdGNoIDMwNTg2NDU6IGZyb20gam9yaXNlc2F0dXJudXM6IG1vZGlmaWVkCiAgICB2ZXJzaW9uIG9mIHRoZSBwYXRjaCB0byB1c2UgTVNHX0RPTlRXQUlUIGZvciB0aGUgdW5peCBkb21haW4KICAgIHNvY2tldAogCisyMDEwLTA5LTAzIDIxOjU2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA1ODE0MDogZnJvbSB0YWtldm9zOiBjaGVjayB0aGF0IGlub2RlIGlzCisgICBub24temVybworCisyMDEwLTA5LTAzIDIxOjUwICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA1MzQyODogZnJvbSB0YWtldm9zOiBmaXgKKyAgIGdldF9waWRfZnJvbV9pbm9kZSB3aGVuIHRoZSBpbm9kZSBpcyBub3QgZm91bmQuCisKKzIwMTAtMDktMDMgMjA6MjAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZW1vdmUgdGhlIGR1cGxpY2F0ZSByZXR1cm4gYmVmb3JlIHRoZSBlcnJvciBjb2RlcyBnZXQgc2V0LgorCisyMDEwLTA5LTAxIDE4OjA0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IExvZyBiZWZvcmUgcmV0dXJuaW5nLgorCisyMDEwLTA5LTAxIDAyOjQzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBUTFMgc2VuZF9ub3RpZnkgb24gY2xvc3VyZSBhbmQgc29tZSBtZW1vcnkgY2xlYW4tdXAgcGF0Y2hlcworCisyMDEwLTA4LTMxIDE3OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgT25seSBwcmludCB0aGUgc2VjdXJpdHkvY29udGV4dCBFbmdpbmVJRCBtaXNtYXRjaCBub3RlIHVuZGVyIFVTTQorCisyMDEwLTA4LTI1IDE1OjEzICByc3RvcnkKKworICAgKiBDSEFOR0VTOgorCisgICByZW1vdmUgcmVmZXJlbmNlIHRvIHJldmVydGVkIHBhdGNoIDMwNDI3NjUKKworMjAxMC0wOC0yNSAxNToxMyAgcnN0b3J5CisKKyAgICogYWNjb25maWcuaDoKKworICAgYWRkIG5vdGUgb24gd2hlcmUgdG8gZmluZCBjb250ZW50IHVzZWQgdG8gZ2VuZXJhdGUKKyAgIG5ldC1zbm1wLWNvbmZpZy5oLmluCisKKzIwMTAtMDgtMjUgMDI6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgcmV2ZXJ0IHIxOTM0MiwgcGF0Y2ggMzA0Mjc2NSwgd2hpY2ggYnJva2UgY2xpZW50IHRjcCBkaXNjb25uZWN0CisgICBoYW5kbGluZworCisyMDEwLTA4LTI1IDAyOjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggbW9yZSBjb2RlIGJyb2tlbiBieSAnY29tcGlsZXIgd2FybmluZyBmaXgnIGluIHIxOTE3OQorCisyMDEwLTA4LTI1IDAyOjQ1ICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICBjaGVjayBmb3IgY29uZiBlcnJvcnMgYWZ0ZXIgYWdlbnQgc3RhcnR1cDsgZW5hYmxlIGxvZ1RpbWVzdGFtcDsKKyAgIG1ha2Ugc3VyZQorICAgYWxsIGNlcnQgbmFtZS90YWdzIGFyZSB1bmlxdWUKKworMjAxMC0wOC0yNCAyMTowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZml4IGVycm9yIHN0cmluZyB0byBkaXNjdXNzIHRoZSByaWdodCBmYWlsZWQgb3BlbnNzbCBuZXcKKyAgIGludm9jYXRpb24KKwogMjAxMC0wOC0yNCAwNTozNyAgbWFnZnIKIAogICAgKiBhcHBzL3NubXB1c20uYzoKIAogICAgQ0hBTkdFUzogc25tcHVzbTogQ29ycmVjdCBpZmRlZnMsIHJlbW92ZSBkZWFkIHZhcmlhYmxlcy4KIAorMjAxMC0wOC0xOSAyMToyMiAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA4LTE5IDIxOjIwICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wOC0xOSAyMToxMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wOC0xOSAyMToxMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oOgorCisgICAvLyAtPiBDIGNvbW1lbnRzCisKKzIwMTAtMDgtMTkgMjA6MzYgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDgtMTkgMjA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSCAzMDQyNzY1OiBmcm9tIG1laGFmOiBtYWtlCisgICBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiKCkgcmUtZW50cmFudAorCisyMDEwLTA4LTE5IDIwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB0dXJuIG9mZiBjb29raWUgZXhjaGFuZ2VzIHVudGlsIGEgY29tcGxldGUgY29kZSBzZXQgY2FuIGJlCisgICB3cml0dGVuIHRvIHN1cHBvcnQgaXQgYmFzZWQgb24gdGhlIHJlcXVpcmVkIGZ1bmN0aW9uIGNhbGxiYWNrcworCisyMDEwLTA4LTE3IDE4OjMxICByc3RvcnkKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBhZGQgbWlzc2luZyBjYWxsIHRvIHN0b3JlIHBlcnNpc3RlbnQgZGF0YSBhcyBuZWVkZWQKKworMjAxMC0wOC0xNyAxODozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogd2hlbiBkaXNwbGF5aW5nIGEgYnl0ZSBhcyBzaW5nbGUgZGlnaXQgaGV4CisgICB2YWx1ZSwgZGVmYXVsdCB0bworICAgcHJlZml4aW5nIHdpdGggMCB1bmxlc3MgdGhlcmUgaXMgYSBzZXBlcmF0b3Igb3IgYWRkaXRpb24gaGludAorICAgZGF0YQorCiAyMDEwLTA4LTE3IDEwOjMxICBidmFzc2NoZQogCiAgICAqIGFwcHMvc25tcHVzbS5jOgpAQCAtMTkxNSw2ICszNzAwMSwxMyBAQAogICAgd2hlbgogICAgY29tcGlsaW5nIHdpdGhvdXQgU1NMIHN1cHBvcnQuCiAKKzIwMTAtMDgtMTYgMjM6MTEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMjc5MDI0OTogZnJvbSB3aWxscHdpbGxwOiByZWR1Y2UgY2FjaGUgdGltZQorICAgZm9yIHRoZSBpZnRhYmxlIHRvIDNzZWNvbmRzIHRvIGluY3JlYXNlIGFjY3VyYWN5CisKIDIwMTAtMDgtMTYgMTY6MjYgIGhhcmRha2VyCiAKICAgICogcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzOgpAQCAtMTkyOSw2ICszNzAyMiwzMyBAQAogICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDI4MjU2NTM6IGZyb20gYnJ1NWNlOiBmaXggc2VuZG1haWwuY2YKICAgIHBhcnNpbmcgaW4gY2VydGFpbiBjb25kaXRpb25zCiAKKzIwMTAtMDgtMTYgMTA6MTYgIGR0czEyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICBCdWlsZCBuZXRzbm1wX2FnZW50X2FwaS4zIG1hbiBwYWdlIGZyb20gdGVtcGxhdGUKKworMjAxMC0wOC0xNiAwOToyMCAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTEzNjE6IERvY3VtZW50YXRpb24gKFByb3ZpZGVkIGJ5IFRvbWFzegorICAgTGlzKQorCisyMDEwLTA4LTE2IDA4OjA2ICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMTM2MTogUmUtb3JkZXIgY29kZSB0byBncm91cCByZWxhdGVkCisgICBmdW5jdGlvbnMgdG9nZXRoZXIKKworMjAxMC0wOC0xNiAwNzo0MiAgZHRzMTIKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI5OTUwOTg6IEZpeCBjcmVhdGlvbiBvZiBTTk1QdjMgc2Vzc2lvbnMKKyAgIHdpdGggQVBJX1NJTkdMRQorCiAyMDEwLTA4LTE0IDE2OjMwICBkdHMxMgogCiAgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmM6CkBAIC0xOTQyLDMxICszNzA2Miw1NDUgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkwNDkwMDogRG9jdW1lbnRhdGlvbiBwbHVzIGFzc29ydGVkCiAgICBoYW5kbGVyIGNvZGUgZml4ZXMKIAotMjAxMC0wOC0xMyAxMjoyMiAgZHRzMTIKKzIwMTAtMDgtMTQgMDk6MjggIGR0czEyCiAKLSAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wX2FsYXJtLjMuZGVmOgogCi0gICBGaXggaGFuZGxpbmcgb2YgaW5kZXggdmFsdWVzIGluIGNhY2hlIGxvYWQgZnVuY3Rpb24uCisgICBSZXN0b3JlIGFnZW50IEFQSSBtYW4gcGFnZQorICAgRG9uJ3QgdHJ5IHRvIGV4dHJhY3QgbXVsdGlwbGUgbWFuIHBhZ2UgbGlua3MgcGVyIGxpbmUKKyAgICh3aGljaCBydW5zIGludG8gcHJvYmxlbXMgd2l0aCBPUy1zcGVjaWZpYyBsaW5lIGVuZGluZ3MpLgorICAgSW5zdGVhZCwgZW5zdXJlIHRoZSBtYW4gcGFnZSBOQU1FIHNlY3Rpb24gbGlzdHMgb25lCisgICByb3V0aW5lIHBlciBsaW5lCiAKLTIwMTAtMDgtMTAgMDQ6NTkgIG1hZ2ZyCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgZml4IGJyb2tlbiBNYWtlZmlsZSBhZnRlciBtYW4gcGFnZSBtb3ZlcworCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqIG1pYnMvU05NUC1UTFMtVE0tTUlCLnR4dCwgbWlicy9yZmNsaXN0OgorCisgICB1cGRhdGVkIFRMUyBNSUIgdG8gY3VycmVudCBjb3B5CisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICByZXBsYWNlZCBSRkMgY29tbWVudCBudW1iZXIKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oLCBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2g6IDMwNDI3NzA6IGZyb20gbWVoYWY6IE1hZGUgcnVuX2FsYXJtcygpCisgICByZWVudHJhbnQKKworMjAxMC0wOC0xMyAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMzA0NDUxMjogZnJvbSBwaGlsd2Vic3RlcjogZml4IHN5c29iamVjdGlkCisgICBkaXJlY3RpdmUuCisKKzIwMTAtMDgtMTMgMTk6MDAgIHJzdG9yeQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4OgorCisgICB1c2UgMTI3LjAuMC4xIGluc3RlYWQgb2YgbG9jYWxob3N0IGFzIGRlZmF1bHQgU05NUF9URVNUX0RFU1Qgc28KKyAgIFRMUyB0ZXN0cyB3b3JrCisKKzIwMTAtMDgtMTMgMTg6NTAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBpbXBsZW1lbnRlZCBhIGZpeCBmb3IgdGhlIGlzc3VlIHJlcG9ydGVkIGluCisgICBwYXRjaCAjMzA0Mjc3MC4gQ3JlYXRlZCBhIHNubXBfc2VsZWN0X2luZm9fZmxhZ3MgZnVuY3Rpb24sIGFuZAorICAgc2ltaWxhciwgdGhhdCBhbGxvdyBmb3IgYWxhcm1zIHRvIG5vdCBiZSBydW4uIFRoaXMgaXMgdGhlbiB1c2VkCisgICBpbiB0aGUgc3luY2hfcmVzcG9uc2UgZnVuY3Rpb25zIHRvIGF2b2lkIDEwMCUgQ1BVIGxvb3BzCisKKzIwMTAtMDgtMTMgMTg6NTAgIGhhcmRha2VyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIG1ha2Ugc25tcHRyYXBkIHJlZ2lzdGVyIHRoZSBjZXJ0dG9zZWNuYW1lIHRhYmxlIGluIHRoZSBhZ2VudHgKKyAgIHJlZ2lzdHJhdGlvbnMKKworMjAxMC0wOC0xMyAxODo0OSAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9taWIyYy5jb25mOgorCisgICBtaW5vciB3b3JkaW5nIGFkZGl0aW9ucworCisyMDEwLTA4LTEzIDE1OjA0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmM6CisKKyAgIENIQU5HRVM6IGFpeDogUEFUQ0g6IDI4ODY1OTg6IGZyb20gZXhzbmFmdTogSGVhZGVyIGZpeGVzIGZvcgorICAgY29tcGlsaW5nIG9uIEFJWDYKKworMjAxMC0wOC0xMyAxNTowNCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL250by1xbng2Lmg6CisKKyAgIE5FV1M6IHBvcnRzOiBQQVRDSDogMjgzNjg5NTogZnJvbSBzZWFuYm91ZHJlYXU6IHN1cHBvcnQgZm9yIFFOWDYKKworMjAxMC0wOC0xMyAxNDozMyAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgbWFuL25ldHNubXBfc2Vzc19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfdHJhcF9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZjoKKworICAgJ2VuZm9yY2UgbmV0c25tcCBwcmVmaXhlcworCisyMDEwLTA4LTEzIDE0OjI5ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmLCBtYW4vdmFyYmluZF9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOSAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgbWFuL3NubXBfdHJhcF9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOCAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgbWFuL3NubXBfc2Vzc19hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyOCAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYsIG1hbi9zbm1wX2FnZW50X2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI4ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vc2Vzc2lvbl9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyNyAgZHRzMTIKKworICAgKiBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCBtYW4vcGR1X2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI3ICBkdHMxMgorCisgICAqIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjcgIGR0czEyCisKKyAgICogbWFuL2NvbmZpZ19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyMCAgZHRzMTIKKworICAgKiBNYWtlZmlsZS5pbiwgZG94eWdlbi5jb25mOgorCisgICBEb24ndCBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIG1hbiBwYWdlcworCisyMDEwLTA4LTEzIDE0OjE4ICBkdHMxMgorCisgICAqICBtYW4vc25tcF9hcGlfZXJyc3RyaW5nLjMsIG1hbi9zbm1wX2Nsb3NlLjMsIG1hbi9zbm1wX2Vycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9mcmVlX3BkdS4zLCBtYW4vc25tcF9vcGVuLjMsIG1hbi9zbm1wX3BlcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfcmVhZC4zLCBtYW4vc25tcF9zZWxlY3RfaW5mby4zLCBtYW4vc25tcF9zZW5kLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX2FzeW5jX3NlbmQuMywgbWFuL3NubXBfc2Vzc19jbG9zZS4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19lcnJvci4zLCBtYW4vc25tcF9zZXNzX2luaXQuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3Nfb3Blbi4zLCBtYW4vc25tcF9zZXNzX3BlcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19yZWFkLjMsIG1hbi9zbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3Nfc2VuZC4zLCBtYW4vc25tcF9zZXNzX3Nlc3Npb24uMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfdGltZW91dC4zLCBtYW4vc25tcF9zZXRfbWliX3dhcm5pbmdzLjMsICAgCisgICAgICBtYW4vc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMywgbWFuL3NubXBfdGltZW91dC4zOgorCisgICBSZW1vdmUgcmVkdW5kYW50IG1hbiBwYWdlIGxpbmtzCisgICAoU2hvdWxkIGJlIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5LCBidXQgZG9uJ3QgZXhpc3QgYW55IG1vcmUKKyAgIGFueXdheSkKKworMjAxMC0wOC0xMyAxNDoxMyAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vYWRkX21pYmRpci4zLCBtYW4vYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zLCAgCisgICAgICAgbWFuL2dldF9tb2R1bGVfbm9kZS4zLCBtYW4vaW5pdF9taWIuMywgbWFuL2luaXRfbWliX2ludGVybmFscy4zLCAKKyAgICAgICAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zLCBtYW4vbmV0c25tcF9oYW5kbGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xlYWYuMywgbWFuL25ldHNubXBfbGlicmFyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgCisgICAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zZXRfZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAorICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90ZGF0YS4zLCBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjMsIG1hbi9wcmludF9kZXNjcmlwdGlvbi4zLCBtYW4vcHJpbnRfbWliLjMsICAKKyAgICAgICBtYW4vcHJpbnRfb2JqaWQuMywgbWFuL3ByaW50X3ZhbHVlLjMsIG1hbi9wcmludF92YXJpYWJsZS4zLCAgIAorICAgICAgbWFuL3JlYWRfYWxsX21pYnMuMywgbWFuL3JlYWRfbWliLjMsIG1hbi9yZWFkX21vZHVsZS4zLCAgIAorICAgICAgbWFuL3JlYWRfbW9kdWxlX25vZGUuMywgbWFuL3JlYWRfb2JqaWQuMywgbWFuL3NodXRkb3duX21pYi4zOgorCisgICBSZW1vdmUgRG94eWdlbi1nZW5lcmF0ZWQgbWFuIHBhZ2VzLCBhbmQgdGhvc2UgbGlua2luZworICAgaW5kaXZpZHVhbCByb3V0aW5lcyB0byB0aGUgYXBwcm9wcmlhdGUgbWFuIHBhZ2UuCisgICAoVGhlc2UgYXJlIGJldHRlciBnZW5lcmF0ZWQgZHluYW1pY2FsbHkpCisKKzIwMTAtMDgtMTMgMTI6MTkgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIFByb21wdCBmb3Igd2hldGhlciB0byBnZW5lcmF0ZSBjYWNoaW5nIGNvZGUgb3Igbm90LgorCisyMDEwLTA4LTEzIDEyOjE5ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLmNvbmY6CisKKyAgIFJld29yayBndWlkYW5jZSBxdWVzdGlvbnMgd2hlbiBzZWxlY3RpbmcgdGhlIGJlc3QgdGFibGUgZnJhbWV3b3JrCisgICB0byB1c2UuCisgICBFbnN1cmUgdGFibGUgaGFuZGxpbmcgY29kZSBkb2Vzbid0IG92ZXJ3cml0ZSBzY2FsYXIgaGFuZGxpbmcKKyAgIGNvZGUuCisgICBDaGVjayB0aGF0IHRoZSBzdGFydGluZyBwb2ludCBpcyBzdWl0YWJsZSBmb3IgTWZEIGZyYW1ld29yay4KKworMjAxMC0wOC0xMiAxNTo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IGNvZGUgYnJva2VuIGJ5ICdjb21waWxlciB3YXJuaW5nIGZpeCcgaW4gcjE5MTc5CisKKzIwMTAtMDgtMTIgMTU6MzkgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaDoKKworICAgZml4IHR5cG8gaW4gY29tbWVudAorCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgYSBkdXBsaWNhdGUgdmFsdWUgY2hlY2sKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICBhZGQgYSB0ZXN0IHdoZXJlIHdlIGNhbiB0cnVzdCBhIENBLXNpZ25lZCBjZXJ0IGFuZCB3ZSBkb24ndCB0cnVzdAorICAgdGhlIENBCisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgdGVzdCBhIGRpcmVjdGx5IG1hcHBlZCBDQSBjZXJ0aWZpY2F0ZQorCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgY2hhbmdlIHRoZSBsYUNvbmZpZyB0byByZWFkLXdyaXRlIHRvIG1hdGNoIHRoZSBwYXRjaAorCisyMDEwLTA4LTExIDIyOjA3ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAyOTMxNDQ2OiBmcm9tIGFobWFrZTogbWFrZSB0aGUgbG9hZCBhdmVyYWdlcworICAgd3JpdGFibGUuCisKKzIwMTAtMDgtMTEgMDY6NDMgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmM6CisKKyAgIENIQU5HRVM6IFNpbGVuY2Ugc29tZSBjb21waWxhdGlvbiB3YXJuaW5ncyBmcm9tIHRlc3QgY2FzZXMuCisKKzIwMTAtMDgtMDkgMjE6MDkgIG1hZ2ZyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6CiAKICAgIENIQU5HRVM6IEhhbmRsZSBlbWJlZGRlZCAlJ3MgaW4gdGhlIHJlc3VsdCBtZXNzYWdlLgogCisyMDEwLTA4LTA5IDIxOjA3ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBDSEFOR0VTOiBEbyBubyBkb3VibGUgZGVjbGFyZSB0aGUgaW5kZXggdmFsdWVzLgorCiAyMDEwLTA4LTA1IDExOjQ5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgogCiAgICBVcGRhdGUgImF1dGgqIiB1c2FnZSBtZXNzYWdlIHdpdGggY29udGV4dCBzdXBwb3J0CiAKKzIwMTAtMDgtMDIgMjA6MDggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jOgorCisgICBGaXggdHdvIHNpbGx5IG1pc3Rha2VzLgorCisyMDEwLTA4LTAyIDE0OjE4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRjdGwuYzoKKworICAgQUlYIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIHRhZ2dlZCBhcyBpbnRlZ2Vycywgbm90IHN0cmluZ3MuCisKKzIwMTAtMDgtMDIgMTM6NDkgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgZml4IFBlcmwgc3lzdGVtKCkgY29uZmlndXJlIGNoZWNrIHRvIHdvcmsgcmVsaWFibHkgb24gc3lzdGVtcworICAgdGhhdCBsYWNrCisgICBQZXJsCisKKzIwMTAtMDgtMDIgMTE6MDggIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogbWFkZSBpdCBwb3NzaWJsZSB0byBhbmFseXplIGFsbCBjb2RlIGNvdmVyZWQgYnkKKyAgIHRoZSByZWdyZXNzaW9uIHRlc3RzIHdpdGggYSBkeW5hbWljIGFuYWx5emVyLCBhdCBsZWFzdCBpZiB0aGF0CisgICBhbmFseXplciBzdXBwb3J0cyBmb2xsb3dpbmcgY2hpbGQgcHJvY2Vzc2VzLiBBbiBleGFtcGxlOgorICAgCisgICBybSAtcmYgL3RtcC9zbm1wLXRlc3QtKgorICAgbWFrZSAtcworICAgU05NUF9TQVZFX1RNUERJUj15ZXMgRFlOQU1JQ19BTkFMWVpFUj0idmFsZ3JpbmQKKyAgIC0tdHJhY2UtY2hpbGRyZW49eWVzIC0tdHJhY2stb3JpZ2lucz15ZXMiIG1ha2UgLXMgdGVzdAorICAgZ3JlcCAtaSB1bmluaXRpYWxpc2VkIC90bXAvc25tcC10ZXN0LSogfCB4YXJncyBsZXNzCisKKzIwMTAtMDgtMDIgMTE6MDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jOgorCisgICBGaXhlZCB0aGUgZm9sbG93aW5nIHR3byBWYWxncmluZCBjb21wbGFpbnRzOgorICAgCisgICBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkIHZhbHVlKHMpCisgICBhdCAweDZENzAyRTA6IHZmcHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZEOTlEMTE6IHZzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RDdBNDEyOiBzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RTE0NDM3OiBpbmV0X250b2EgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NUU1RTIxOTogbmV0c25tcF9pcHY0X2ZtdGFkZHIgKHNubXBJUHY0QmFzZURvbWFpbi5jOjIxNSkKKyAgIGJ5IDB4NUU2NTcxNzogbmV0c25tcF90Y3BfZm10YWRkciAoc25tcFRDUERvbWFpbi5jOjcwKQorICAgYnkgMHg1RTU2N0VDOiBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZworICAgKHNubXBfdHJhbnNwb3J0LmM6MjI0KQorICAgYnkgMHg1RTI0NzlBOiBfc2Vzc19wcm9jZXNzX3BhY2tldCAoc25tcF9hcGkuYzo1NDQxKQorICAgYnkgMHg1RTI1RTM3OiBfc2Vzc19yZWFkIChzbm1wX2FwaS5jOjYwMzcpCisgICBieSAweDVFMjYxREE6IHNubXBfc2Vzc19yZWFkMiAoc25tcF9hcGkuYzo2MTQ5KQorICAgYnkgMHg1RTI2MjgyOiBzbm1wX3JlYWQyIChzbm1wX2FwaS5jOjU3NDApCisgICBieSAweDQwNERFNDogbWFpbiAoc25tcGQuYzoxMjI3KQorICAgVW5pbml0aWFsaXNlZCB2YWx1ZSB3YXMgY3JlYXRlZCBieSBhIGhlYXAgYWxsb2NhdGlvbgorICAgYXQgMHg0QzI3MEE1OiBtYWxsb2MgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MjM2KQorICAgYnkgMHg1RTY1NzM5OiBuZXRzbm1wX3RjcF9hY2NlcHQgKHNubXBUQ1BEb21haW4uYzo4MikKKyAgIGJ5IDB4NUUyNTM4MzogX3Nlc3NfcmVhZCAoc25tcF9hcGkuYzo1Nzg2KQorICAgYnkgMHg1RTI2MURBOiBzbm1wX3Nlc3NfcmVhZDIgKHNubXBfYXBpLmM6NjE0OSkKKyAgIGJ5IDB4NUUyNjI4Mjogc25tcF9yZWFkMiAoc25tcF9hcGkuYzo1NzQwKQorICAgYnkgMHg0MDRERTQ6IG1haW4gKHNubXBkLmM6MTIyNykKKyAgIAorICAgQ29uZGl0aW9uYWwganVtcCBvciBtb3ZlIGRlcGVuZHMgb24gdW5pbml0aWFsaXNlZCB2YWx1ZShzKQorICAgYXQgMHg2RjdCMkUwOiB2ZnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2RkE0RDExOiB2c25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkY4NTQxMjogc25wcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NzAxRjQzNzogaW5ldF9udG9hIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDU2RkEyMTk6IG5ldHNubXBfaXB2NF9mbXRhZGRyIChzbm1wSVB2NEJhc2VEb21haW4uYzoyMTUpCisgICBieSAweDU3MDE3MTc6IG5ldHNubXBfdGNwX2ZtdGFkZHIgKHNubXBUQ1BEb21haW4uYzo3MCkKKyAgIGJ5IDB4NTZGMjdFQzogbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjIyNCkKKyAgIGJ5IDB4NTZGMjk0RjogbmV0c25tcF90cmFuc3BvcnRfc2VuZCAoc25tcF90cmFuc3BvcnQuYzoyNDgpCisgICBieSAweDU2QkM0ODc6IHNubXBfc2Vzc19hc3luY19zZW5kIChzbm1wX2FwaS5jOjUyMDQpCisgICBieSAweDU2QkM2NTE6IHNubXBfYXN5bmNfc2VuZCAoc25tcF9hcGkuYzo0OTk4KQorICAgYnkgMHg1NkJDNjc3OiBzbm1wX3NlbmQgKHNubXBfYXBpLmM6NDk4NCkKKyAgIGJ5IDB4NTY5ODQ0MDogc25tcF9zeW5jaF9yZXNwb25zZV9jYiAoc25tcF9jbGllbnQuYzoxMDA2KQorICAgVW5pbml0aWFsaXNlZCB2YWx1ZSB3YXMgY3JlYXRlZCBieSBhIGhlYXAgYWxsb2NhdGlvbgorICAgYXQgMHg0QzI3MEE1OiBtYWxsb2MgKHZnX3JlcGxhY2VfbWFsbG9jLmM6MjM2KQorICAgYnkgMHg1NzAxQjNFOiBuZXRzbm1wX3RjcF90cmFuc3BvcnQgKHNubXBUQ1BEb21haW4uYzoxNjMpCisgICBieSAweDU3MDFFNkY6IG5ldHNubXBfdGNwX2NyZWF0ZV90c3RyaW5nIChzbm1wVENQRG9tYWluLmM6MzA1KQorICAgYnkgMHg1NkYzODA0OiBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjYwMSkKKyAgIGJ5IDB4NTZGM0FDQzogbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQKKyAgIChzbm1wX3RyYW5zcG9ydC5jOjY2OSkKKyAgIGJ5IDB4NTQzNDRGNjogc3ViYWdlbnRfb3Blbl9tYXN0ZXJfc2Vzc2lvbiAoc3ViYWdlbnQuYzo3NTgpCisgICBieSAweDU0MzQ5Qzg6IGFnZW50eF9yZW9wZW5fc2Vzc2lvbiAoc3ViYWdlbnQuYzo4NjkpCisgICBieSAweDU0MzREMDA6IHN1YmFnZW50X3N0YXJ0dXAgKHN1YmFnZW50LmM6OTkpCisgICBieSAweDU2RUFFQjc6IHNubXBfY2FsbF9jYWxsYmFja3MgKGNhbGxiYWNrLmM6MzM4KQorICAgYnkgMHg1NkRFNkZCOiByZWFkX2NvbmZpZ3MgKHJlYWRfY29uZmlnLmM6MTAxOCkKKyAgIGJ5IDB4NTZDMjg3RTogaW5pdF9zbm1wIChzbm1wX2FwaS5jOjg1MCkKKyAgIGJ5IDB4NDA0NzdCOiBtYWluIChzbm1wdHJhcGQuYzoxMDQ4KQorCisyMDEwLTA4LTAxIDA2OjExICBidmFzc2NoZQorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIEZpeGVkIHNwZWxsaW5nIGVycm9ycyByZXBvcnRlZCBieSBpc3BlbGwgLWwuCisKIDIwMTAtMDgtMDEgMDY6MDAgIGJ2YXNzY2hlCiAKLSAgICogc25tcGxpYi9zbm1wX2VudW0uYzoKKyAgICogIHNubXBsaWIvc25tcF9lbnVtLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDRzbm1wX2VudW1fY2xpYi5jOgogCiAgICBGaXhlZCBhIHR5cG8gaW4gYSB0ZXh0IHN0cmluZyBpbiBhIHVuaXQgdGVzdDogcmVzdHVyYW50IC0+CiAgICByZXN0YXVyYW50LgogCisyMDEwLTA4LTAxIDA1OjUzICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaDoKKworICAgRG9jdW1lbnRlZCBiZWhhdmlvciBvZiBzZV9hZGRfcGFpcl90b19zbGlzdCgpLgorCisyMDEwLTA3LTMxIDIzOjUwICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaDoKKworICAgRm9sbG93LXVwIGZvciByMTkyNjY6IGFkZCBtaXNzaW5nIGhlYWRlciBmaWxlIHRvIHN1cHBvcnQgTWFjIE9TIFgKKyAgIDEwLjYKKyAgIChTbm93IExlb3BhcmQgLSAiZGFyd2luMTAiKQorCisyMDEwLTA3LTMxIDIwOjM4ICBoYXJkYWtlcgorCisgICAqIENIQU5HRVM6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDctMzEgMjA6MzUgIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA3LTMxIDIwOjMxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNy0zMSAyMDoyNCAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAxMC0wNy0zMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wNy0zMSAyMDoxMSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgY2hhbmdlZCB0aGUgbmFtZSBvZiB0aGUgcmVhZG1lIHNlY3Rpb24gdG8gY2FsbCBvdXQgTkVXUy10b28KKworMjAxMC0wNy0zMSAyMDoxMCAgaGFyZGFrZXIKKworICAgKiBORVdTOgorCisgICBhZGRlZCBtaXNzaW5nIG5ld3MgaXRlbXMKKwogMjAxMC0wNy0zMCAxMzowNiAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CkBAIC0xOTgxLDYgKzM3NjE1LDg3IEBACiAgICBDSEFOR0VTOiBweXRob246IHBhdGNoIDMwMzU1Nzg6IGZyb20gc3dzOiBrZWVwIGVycm9yIGNvZGVzIHVwIHRvCiAgICBkYXRlCiAKKzIwMTAtMDctMjkgMTU6NDggIGR0czEyCisKKyAgICogY29uZmlndXJlOgorCisgICBBZGQgc3VwcG9ydCBmb3IgTWFjIE9TIFggMTAuNiAoU25vdyBMZW9wYXJkIC0gImRhcndpbjEwIikKKyAgIChPbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgdGhlIHNhbWUgYXMgTWFjIE9TIFggMTAuNQorICAgKExlb3BhcmQgLSAiZGFyd2luOSIpKQorCisyMDEwLTA3LTI5IDE1OjQ3ICBkdHMxMgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob246CisKKyAgIEFkZCBzdXBwb3J0IGZvciBNYWMgT1MgWCAxMC42IChTbm93IExlb3BhcmQgLSAiZGFyd2luMTAiKQorICAgKE9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyBNYWMgT1MgWCAxMC41CisgICAoTGVvcGFyZCAtICJkYXJ3aW45IikpCisKKzIwMTAtMDctMjkgMTU6MDMgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmg6CisKKyAgIFByb3ZpZGUgYSBkZWZpbml0aW9uIG9mICd2YV9saXN0JyBmb3IgdmFyYXJncy1iYXNlZCBBUElzCisKKzIwMTAtMDctMjkgMTQ6NTggIGR0czEyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L2F1dG9fbmxpc3QuYywgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS5oLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQWRkIHByZWxpbWluYXJ5IHN1cHBvcnQgZm9yIEFJWCA3CisgICAob24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIGlkZW50aWNhbCB0byBBSVggNikKKworMjAxMC0wNy0yOSAxNDo1NiAgZHRzMTIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uOgorCisgICBEaXNhYmxlIGVtYmVkZGVkIHBlcmwgYnkgZGVmYXVsdCBvbiBhcmNoaXRlY3VyZXMgd2hlcmUKKyAgIHRoaXMgc2VlbXMgdG8gY2F1c2UgcHJvYmxlbXMgKEhQLVVYICYgTWFjIE9TIFgpCisKKzIwMTAtMDctMjkgMTE6MTMgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBHdWFyZCBhZ2FpbnN0IGJsYW5rICdpbmNsdWRlKicgbGluZXMuCisgICBIYW5kbGUgcmVsYXRpdmUgJ2luY2x1ZGVGaWxlJyBwYXRocworCisyMDEwLTA3LTI5IDEwOjQ3ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFJldHVybiBhbiBpbmRpY2F0aW9uIG9mIHdoZXRoZXIgY29uZmlnIGZpbGVzIGFyZSBhY3R1YWxseQorICAgcHJvY2Vzc2VkLgorICAgUmVwb3J0IHByb2JsZW1zIHdpdGggZmFpbGluZyB0byBpbmNsdWRlIGNvbmZpZyBmaWxlcy4KKworMjAxMC0wNy0yOCAxNDo0NCAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgsIG1hbi9jb25maWdfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3ZhcmJpbmRfYXBpLjMuZGVmLCAgCisgICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIEJyaW5nIG1hbiBwYWdlIGRvY3VtZW50YXRpb24sIGhlYWRlciBmaWxlcyBhbmQgV2luZG93cyBETEwKKyAgIGRlZmluaXRpb25zCisgICBvZiB0b3AtbGV2ZWwgcHVibGljIEFQSSBjYWxscyBpbnRvIGxpbmUgd2l0aCBlYWNoIG90aGVyLgorCiAyMDEwLTA3LTI4IDE0OjQwICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTE5ODksMTMgKzM3NzA0LDM5IEBACiAKIDIwMTAtMDctMjggMTQ6MzYgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CiAKICAgIERvbid0IG1peCBTTUl2MSBhbmQgU01JdjIgTUlCcyBpbiB0aGUgbGlzdCBvZiBkZWZhdWx0IE1JQnMgdG8KICAgIGxvYWQuCiAgICBVc2UgbmV3ZXIgU01JdjIgdmVyc2lvbnMgKHdoaWNoIGluY2x1ZGUgc3VpdGFibGUgZGlzcGxheSBoaW50cykKICAgIHJhdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBSRkMxMjEzIE1JQiAod2hpY2ggZG9lc24ndCkKIAorMjAxMC0wNy0yOCAxNDoxMCAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZpeCBpbmRlbnRhdGlvbiBmb3IgJ2luY2x1ZGVTZWFyY2gnIHByb2Nlc3NpbmcgY29kZS4KKworMjAxMC0wNy0yOCAxNDowOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEV4dGVuZCAnaW5jbHVkZScgY29uZmlnIGZpbGUgcHJvY2Vzc2luZyB0byBjb3ZlciB0aHJlZQorICAgZGlmZmVyZW50IG1vZGVzIG9mIHdvcmtpbmc6CisgICAtIGxvb2sgZm9yIHRoZSBmaWxlIG9uIHRoZSBjb25maWcgc2VhcmNoIHBhdGgKKyAgIC0gaW5jbHVkZSB0aGUgc3BlY2lmaWVkIGZpbGUgYnkgbmFtZQorICAgLSBpb2FkIHRoZSBjb250ZW50cyBvZiB0aGUgc3BlY2lmaWVkIGRpcmVjdG9yeQorICAgVXNlIGRpZmZlcmVudCBjb25maWcgdG9rZW5zIHRvIGRpc3Rpbmd1aXNoIHRoZXNlIGNhc2VzLgorCisyMDEwLTA3LTI3IDExOjEyICBoYXJkYWtlcgorCisgICAqIGFnZW50L2tlcm5lbC5jLCBhZ2VudC9rZXJuZWwuaCwgYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCAyOTEyNTIwOiBmcm9tIGxpc3RvbTogRnJlZSBrbWVtIHJlZmVyZW5jZXMKKyAgIG9uIHNodXRkb3duCisKIDIwMTAtMDctMjcgMTA6NTQgIGhhcmRha2VyCiAKICAgICogbWlicy9TTVVYLU1JQi50eHQ6CkBAIC0yMDAzLDYgKzM3NzQ0LDY0IEBACiAgICBDSEFOR0VTOiBtaWJzOiBwYXRjaCAyOTc0NzE2OiBmcm9tIGJ2YXNzY2hlOiBmaXggaXNzdWVzIGluIHRoZQogICAgU01VWC1NSUIKIAorMjAxMC0wNy0yNyAwODo1NCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGluY2x1ZGUgdGhlIG5ldyBzZWN1cml0eS1oZWRhZXJzIG1vZHVsZQorCisyMDEwLTA3LTI3IDA4OjU0ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL3NubXAtYnJpZGdlLW1pYjoKKworICAgcmVtb3RlIGRlYnVnZ2luZy9wcm9jZXNzaW5nIHN0ZGVyciBvdXRwdXQKKworMjAxMC0wNy0yNyAwODo1NCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMzAyODkyMzogZnJvbSBqZW5zbzogbmV3IGNvcHkgb2YgdGhlCisgICBicmlkZ2UtbWliIHBlcmwgaW1wbGVtZW50YXRpb24KKworMjAxMC0wNy0yNyAwODozMSAgaGFyZGFrZXIKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMsICAgCisgICAgICBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tc2VjdXJpdHktaGVhZGVycy5pbjoKKworICAgc2VwYXJhdGUgb3V0IHRoZSBzZWN1cml0eSBoZWFkZXIvaW5pdCBnZW5lcmF0aW9uCisKKzIwMTAtMDctMjcgMDg6MzEgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfdHJhbnNwb3J0czoKKworICAgdHJhbnNwb3J0IGNvbmZpZ3VyZSBwb3J0aW9uCisKKzIwMTAtMDctMjcgMDg6MzAgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMsICAgCisgICAgICBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdHJhbnNwb3J0LWhlYWRlcnMuaW4sICAgCisgICAgICBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluOgorCisgICBtb3ZlIHRyYW5zcG9ydCBoZWFkZXIgZ2VuZXJhdGlvbiB0byBhIHNlcGFyYXRlIGZpbGUgYW5kIGNyZWF0ZSBhbgorICAgZXh0ZXJuYWwgc2VwYXJhdGUgc2NyaXB0IGZvciBnZW5lcmF0aW5nIGl0CisKKzIwMTAtMDctMjcgMDg6MTQgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiByZXBvcnQgZ2ZzIGZpbGVzeXN0ZW1zIGluIGhyU3RvcmFnZVRhYmxlIGFuZAorICAgaHJGU1RhYmxlLgorCisyMDEwLTA3LTI0IDE1OjQyICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRG9uJ3QgbG9zZSB0cmFjayBvZiB3aGljaCBjb25maWcgZmlsZSB3YXMgYmVpbmcgcGFyc2VkLAorICAgd2hlbiBwcm9jZXNzaW5nIGFuIGluY2x1ZGVkIGNvbmZpZyBmaWxlLgorICAgRml4ZXMgYSBidWcgd2l0aCByZXBvcnRpbmcgbGF0ZXIgY29uZmlnIGVycm9ycy4KKwogMjAxMC0wNy0yNCAxNTozNiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CkBAIC0yMDExLDYgKzM3ODEwLDc5IEBACiAgICB3aGVuIG9wZW5pbmcgYSBuZXcgU05NUCBzZXNzaW9uLgogICAgRml4ZXMgYSBidWcgd2l0aCByZXBvcnRpbmcgbGF0ZXIgY29uZmlnIGVycm9ycy4KIAorMjAxMC0wNy0yMyAwMzoxMiAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgYWRkIHRoZSBUTFMgbW9kdWxlcyB0byB0aGUgbGlzdCBvZiB0ZXN0IG1vZHVsZXMKKworMjAxMC0wNy0yMSAxOToyNSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmM6CisKKyAgIEZpeCB0eXBvIGluIGRveHlnZW4gY29tbWVudAorCisyMDEwLTA3LTIxIDE5OjI0ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgorCisgICBGaXggdHlwbyBpbiBzcGVlZCBjb21wdXRhdGlvbgorCisyMDEwLTA3LTIxIDE5OjIxICBuYmEKKworICAgKiBzbm1wbGliL3NubXBfc2VjbW9kLmM6CisKKyAgIEluY2x1ZGUgZ2VuZXJhdGVkIHNlY3VyaXR5LWluY2x1ZGVzLmgKKworMjAxMC0wNy0yMSAxOToyMCAgbmJhCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oOgorCisgICBGaXggaW5pdCBmdW5jIG5hbWUgKGNvcHktcGFzdGUgZ2xpdGNoKQorCisyMDEwLTA3LTIxIDE5OjE4ICBuYmEKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgUmVtb3ZlIHN1cGVyZmx1b3VzIHNlbWljb2xvbgorCisyMDEwLTA3LTIxIDE5OjE4ICBuYmEKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgT3V0IG9mIG9yZGVyIGRlY2xhcmF0aW9uCisKKzIwMTAtMDctMjEgMTk6MTcgIG5iYQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIExvZyBlcnJvciBvbiBmaWxlIG9wZW4gZXJyb3IKKworMjAxMC0wNy0yMSAxOToxNiAgbmJhCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBTcGVsaW5nIGVycm9yCisKKzIwMTAtMDctMjEgMTg6MTAgIG5iYQorCisgICAqIG1pYnMvaWFuYWxpc3QsIG1pYnMvcmZjbGlzdCwgbWlicy9yZmNtaWJzLmRpZmY6CisKKyAgIFVwZGF0ZSBmb3IgY3VycmVudCBSRkNzCisKKzIwMTAtMDctMjEgMTg6MDggIG5iYQorCisgICAqIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0OgorCisgICBDdXJyZW50IHZlcnNpb24gZnJvbSBJQU5BCisKKzIwMTAtMDctMjEgMTg6MDUgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICByMTc0OTUgZXJyb25lb3VzbHkgZGlzYWJsZWQgZGlza0lPTEF4IGZvciBsaW51eAorCiAyMDEwLTA3LTIwIDEwOjM4ICBqc2FmcmFuZWsKIAogICAgKiBzbm1wbGliL3N5c3RlbS5jOgpAQCAtMjAyMCwxOCArMzc4OTIsMTYwIEBACiAKIDIwMTAtMDctMjAgMDc6MzIgIGpzYWZyYW5lawogCi0gICAqICBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKLSAgICAgIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiwgbWFuL3NubXB0cmFwZC44LmRlZiwgIAotICAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisgICAqICBhZ2VudC9zbm1wZC5jLCBhcHBzL2FnZW50eHRyYXAuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZC5jLCBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsICAgCisgICAgICBtYW4vc25tcHRyYXBkLjguZGVmLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgogCiAgICBEZXNjcmliZSAtRCB1c2FnZSBhcyAtRFtUT0tFTl0gaW5zdGVhZCBvZiAtRCBbVE9LRU5dCiAKKzIwMTAtMDctMTcgMTU6MTAgIHJzdG9yeQorCisgICAqIG1pYnMvU05NUC1UTFMtVE0tTUlCLnR4dDoKKworICAgdXBkYXRlIGRpc3BsYXkgaGludCB0byBzb21lIGxlc3MgYW1iaWd1b3VzIChhbmQgdGhhdCB3b3JrcyB3aXRoCisgICBvdXIgbGliKQorCisyMDEwLTA3LTE3IDA0OjEzICByc3RvcnkKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBmaXggdGVzdHNpbXBsZSBmb3IgYnVpbGRkaXIhPXNyY2RpcgorCisyMDEwLTA3LTE3IDA0OjEyICByc3RvcnkKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBhZGQgdGVzdHNpbXBsZSB0YXJnZXQKKworMjAxMC0wNy0xNiAxOToyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbGVhc2UgaXRlcmF0b3Igd2hlbiBkb25lIHdpdGggaXQKKwogMjAxMC0wNy0xNSAxODoyOCAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3NubXB1c20uYzoKIAogICAgQ0hBTkdFUzogc25tcGxpYjogZml4IGlzc3VlIHdpdGggVVNNIHVzaW5nIGluYWN0aXZlIHVzZXJzCiAKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIGRvbid0IHVzZSBzdHJuZHVwIChwb3J0YWJpbGl0eSkKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgaW5jbHVkZSBhcHByb3ByaWF0ZSBzdHJpbmcgaGVhZGVyOyBkZWZpbmUgTkFNRV9NQVggaWYgbm90IGFscmVhZHkKKyAgIGRlZmluZWQ7CisgICBkb24ndCB1c2Ugc3RybmR1cCAocG9ydGFiaWxpdHkpCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGVjayB0aGF0IHNvbWUgbmV3ZXIgb3BlbnNzbCBtYWNyb3MgYXJlIGRlZmluZWQgYmVmb3JlIHVzaW5nCisgICB0aGVtOyBpbmNsdWRlCisgICBhcHByb3ByaWF0ZSBzdHJpbmcgaGVhZGVyCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgY2hlY2sgZm9yIGR0bHMgc3VwcG9ydCBpbiBvcGVuc3NsCisKKzIwMTAtMDctMTUgMDE6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBkb24ndCBjb21waWxlIGR0bHMgZG9tYWluIGlmIG5vIGR0bHMgc3VwcG9ydCBpbiBvcGVuc3NsCisKKzIwMTAtMDctMTUgMDE6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGlmZGVmIHByb3RlY3Rpb24gZm9yIGxhdGVyIHNoYSBhbGdvcml0aG1zCisKKzIwMTAtMDctMTUgMDE6MzQgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKKworICAgZGFyd2luIG9wZW5zc2wgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHJlY2VudCBzaGEgYWxnb3JpdGhtcworCisyMDEwLTA3LTE1IDAxOjMzICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIGZpeCB0eXBvIGluIGlmZGVmIHRlc3QKKworMjAxMC0wNy0xNSAwMTozMyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jOgorCisgICBmaXggY3V0LW4tcGFzdGUgZXJyb3IgaW4gaW5jbHVkZWQgZmlsZSBuYW1lCisKKzIwMTAtMDctMTQgMTU6MDggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIGZpeCB0aGUgZml4OiBwdXQgUFJJeiBzcGVjIGluIGNvcnJlY3QgcGxhY2UKKworMjAxMC0wNy0xNCAxNTowMyAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgc3BlY2lmeSBTTk1QIHZlcnNpb24gb24gY29tbWFuZGxpbmUKKworMjAxMC0wNy0xNCAxNTowMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyCisKKzIwMTAtMDctMTQgMTU6MDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBxdWlldCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTA3LTEzIDIwOjAzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgIGFwcHMvc25tcHRscy5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGluY2x1ZGUgc3NsLmggYmVmb3JlIGNlcnRfdXRpbC5oCisKKzIwMTAtMDctMTMgMjA6MDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBkZWJ1ZyBvdXRwdXQgZm9yIGZvdW5kIGNlcnQKKworMjAxMC0wNy0xMyAxNjoyNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvIGluIGxvZyBtc2cKKwogMjAxMC0wNy0xMiAxMDoyNiAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6CkBAIC0yMDQwLDYgKzM4MDU0LDEwOSBAQAogICAgaW50ZXJmYWNlcyB0YWJsZSBkb2VzIG5vdCB0cmlnZ2VyIG91dC1vZi1yYW5nZSBhcnJheSBhY2Nlc3NlcwogICAgKHdhcyBkZXRlY3RlZCBieSBCb3VuZHNDaGVja2VyKS4KIAorMjAxMC0wNy0xMiAxMDoyMSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKKworICAgRml4ZWQgYSBkYW5nbGluZy1wb2ludGVyLXJlYWQgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTkwMTguIEluCisgICByMTkwMTggdGhlIHR5cGUgb2YgZ3JvdXBTdWJ0cmVlTGVuIHdhcyBjaGFuZ2VkIGZyb20gaW50IHRvCisgICBzaXplX3QsIHdoaWNoIGNoYW5nZWQgdGhlIGJlaGF2aW9yIG9mIHRoZSBsb29wICJ3aGlsZQorICAgKGdyb3VwU3VidHJlZUxlbi0tID4gMCkgLi4uIjogaW5zdGVhZCBvZiBub3QgZXhlY3V0aW5nIHRoZSBsb29wCisgICBib2R5IHdoZW4gZ3JvdXBTdWJ0cmVlTGVuIHdhcyBuZWdhdGl2ZSwgcjE5MDE4IGNhdXNlZCB0aGUgYm9keSBvZgorICAgdGhhdCBsb29wIHRvIGJlIGV4ZWN1dGVkLiBEZXRlY3RlZCBieSBydW5uaW5nIHNubXBkIHVuZGVyCisgICBCb3VuZHNDaGVja2VyIHdoaWxlIHBlcmZvcm1pbmcgYSBNSUIgd2Fsay4KKworMjAxMC0wNy0xMiAxMDoxMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jOgorCisgICBSZXZlcnRlZCByMTkwNDcgKHdoaWNoIHdhcyB3cm9uZykgYW5kIGltcGxlbWVudGVkIGEgcHJvcGVyIGZpeAorICAgZm9yIHRoZSBjb21waWxlciB3YXJuaW5ncyBhYm91dCBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2hlcy4KKworMjAxMC0wNy0xMiAxMDowOSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgY29tbWVudC4KKworMjAxMC0wNy0xMiAxMDowOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCB3aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmg6CisKKyAgIFN1cHByZXNzZWQgbW9yZSBNU1ZDIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA3LTEyIDA0OjQ1ICByc3RvcnkKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnM6CisKKyAgIGFkZCBjb21tZW50IHdpdGggb2JqZWN0IG5hbWUgZm9yIG51bWVyaWMgaWRzCisKKzIwMTAtMDctMTIgMDQ6NDUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG5ldyBmdW5jdGlvbiB0byBnZXQgc2VydmVySWQgZnJvbSBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YTsgdXNlCisgICBuZXcgYXBpCisgICB0byBjb25maWcgc2VydmljZUlkIGZvciB0cmFwIHRyYW5zcG9ydCB3aGVuIHNlbmRpbmcgdHJhcHMKKworMjAxMC0wNy0xMSAxMToxOCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CisKKyAgIENIQU5HRVM6IEJVRzogMzAyNzkwMDogd2hlbiBjcm9zcy1jb21waWxpbmcgaXQgaXMgbm93IGFzc3VtZWQKKyAgIHRoYXQgbWVtY21wKCkgaXMgYXZhaWxhYmxlIGluc3RlYWQgb2YgYXNzdW1pbmcgdGhhdCBpdCBpcyBub3QKKyAgIGF2YWlsYWJsZS4KKworMjAxMC0wNy0xMSAxMDozMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHIxOTE5Ny4KKworMjAxMC0wNy0xMCAyMDowMCAgcnN0b3J5CisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN5bmMgdXAgaGVscCBvdXRwdXQgYW5kIG9wdGlvbnMgcHJvY2Vzc2luZworCisyMDEwLTA3LTA5IDE1OjEzICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgVXBkYXRlZCBDeWd3aW4gc2VjdGlvbiBpbiBSRUFETUUud2luMzIuCisKKzIwMTAtMDctMDkgMTU6MTMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYzoKKworICAgQ0hBTkdFUzogV2luMzI6IFN1cHByZXNzZWQgImltcGxpY2l0IGNhc3QgZnJvbSBpbnQgdG8gdV9jaGFyIgorICAgd2FybmluZ3MgZ2VuZXJhdGVkIGJ5IE1TVkMuCisKKzIwMTAtMDctMDkgMTU6MTEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgVGVzdGluZzogbWFkZSB0aGUgZGVidWcgb3V0cHV0IHRoYXQgYXBwZWFycyBpbiB0aGUgImludm9rZWQiIGZpbGUKKyAgIGV2ZW4gbW9yZSB2ZXJib3NlLgorCisyMDEwLTA3LTA5IDE1OjEwICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMiBNU1ZDIGJ1aWxkIGZpeGVzLgorCisyMDEwLTA3LTA4IDE5OjMwICBtYXJ6CisKKyAgICogIGxvY2FsL2NlcnRnZW4tdGVzdC5wbCwgbG9jYWwvbmV0LXNubXAtY2VydCwgICAKKyAgICAgIGxvY2FsL25ldC1zbm1wLWNlcnQuY29uZjoKKworICAgYWRkcyBwZXIgaWRlbnRpdHkgY29uZmlndXJhdGlvbiBmaWxlIHN1cHBvcnQgc28gZGVmYXVsdHMgY2FuIGJlCisgICBjdXN0b21pc2VkIG9uIGNtZGxpbmUgdyAtaSA8aWRlbnRpdHk+IC0gc2VlIG5ldC1zbm1wLWNlcnQuY29uZgorICAgZm9yIGV4YW1wbGVzIGFuZCBzb21lIGhlbHAgaW5mbworCiAyMDEwLTA3LTA4IDEyOjE3ICBkdHMxMgogCiAgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmM6CkBAIC0yMDUzLDM5ICszODE3MCw3ODIgQEAKICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMwMTkyNDM6IFJlZ2lzdGVyIGV4ZWNGaXggY29tcGF0YWJpbGl0eQogICAgZGlyZWN0aXZlIGNvcnJlY3RseS4KIAorMjAxMC0wNy0wNyAxMDoxOSAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGU6CisKKyAgIENIQU5HRVM6IEN5Z3dpbiBhbmQgTWluR1c6IHRlc3RzIFQxMTAsIFQxMTEsIFQxMTIsIFQxMjAsIFQxMjEgYW5kCisgICBUMTIyIGRvIG5vdyBwYXNzIHdoZW4gc25tcGQgaXMgYnVpbHQgd2l0aCB3aW5FeHRETEwgc3VwcG9ydAorICAgZW5hYmxlZC4KKworMjAxMC0wNy0wNiAxODo1OSAgYnZhc3NjaGUKKworICAgKiAgQ2hhbmdlTG9nLCBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgTWFkZSByZWdyZXNzaW9uIHRlc3RzIGVhc2llciB0byBkZWJ1ZyBieSBpbmNsdWRpbmcgb2sgLyBub3Qgb2sKKyAgIHN0YXR1cyBpbiB0aGUgImludm9rZWQiIGZpbGUuCisgICBTcGVsbGluZyBmaXhlczogcmVtZWJlciAtPiByZW1lbWJlcjsgc2VwZXJhdG9yIC0+IHNlcGFyYXRvci4KKworMjAxMC0wNy0wNiAxNTowNCAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIFRlc3QgVDA2NSBkb2VzIG5vdyByZWFsbHkgcGFzcyBvbiBNaW5HVy4KKworMjAxMC0wNy0wNSAxMDowMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBBZGRlZCBjdXJseSBicmFjZXMgc3VjaCB0aGF0ICd8fCcgYW5kICcmJicgYXJlIGV2YWx1YXRlZCBpbiB0aGUKKyAgIGNvcnJlY3Qgb3JkZXIuCisKKzIwMTAtMDctMDQgMTE6MzcgIGJ2YXNzY2hlCisKKyAgICogYXBwczoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTA3LTA0IDExOjM0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIEZhbGwgYmFjayBmcm9tIFJVTkZVTExURVNUUyB0byBSVU5URVNUUyBpZiBuZWl0aGVyIFRBUDo6SGFybmVzcworICAgbm9yIFRlc3Q6Okhhcm5lc3MgaXMgYXZhaWxhYmxlLgorCisyMDEwLTA3LTA0IDExOjIxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIHRlc3QgbnVtYmVyIGluIC90bXAvc25tcC10ZXN0cy0kdGVzdG51bSBpcyBzZXQKKyAgIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgdGhhbiBqdXN0ICIwIi4KKworMjAxMC0wNy0wNCAxMToyMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBTcGxpdCBhIGxvbmcgY29tbWVudCBsaW5lLgorCisyMDEwLTA3LTA0IDEwOjUyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIEJ1ZyBmaXg6IG1hZGUgc3VyZSB0aGF0IHNyY2RpciBpcyBjb21wdXRlZCBjb3JyZWN0bHkgaWYgYGRpcm5hbWUKKyAgICQwYCA9IC4KKworMjAxMC0wNy0wMiAxNjoyNyAgYnZhc3NjaGUKKworICAgKiBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBTaW1wbGlmaWVkIHIxOTE4MSAoRml4ZWQgVExTVENQLWVuYWJsZWQgYnVpbGQgZm9yIHBsYXRmb3JtcyB3aXRoCisgICBub24tZW1wdHkgJChFWEVFWFQpLCBpLmUuIEN5Z3dpbiBhbmQgTWluR1cpLgorCisyMDEwLTA3LTAxIDE4OjE1ICBidmFzc2NoZQorCisgICAqIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIEZpeGVkIFRMU1RDUC1lbmFibGVkIGJ1aWxkIGZvciBwbGF0Zm9ybXMgd2l0aCBub24tZW1wdHkKKyAgICQoRVhFRVhUKSwgaS5lLiBDeWd3aW4gYW5kIE1pbkdXLgorCisyMDEwLTA3LTAxIDE4OjExICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHRscy5jOgorCisgICBGaXhlZCB5ZXQgYW5vdGhlciByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDctMDEgMTc6NTMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgRml4ZWQgdHdvIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDctMDEgMDA6MTkgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNy0wMSAwMDoxMyAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDctMDEgMDA6MDMgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNi0zMCAyMzo1NSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAxMC0wNi0zMCAyMzo0OCAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBweXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wNi0zMCAyMzo0NSAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgbWlzc2VkIHR3byB0b2tlbnMgaW4gdGhlIG1hbiBwZ2FlcworCisyMDEwLTA2LTMwIDIzOjQ1ICBoYXJkYWtlcgorCisgICAqICBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBkLjguZGVmLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICByZW5hbWUgdGhlIGRlZlg1MDkgdG9rZW5zIHRvIHNvbWV0aGluZyBtb3JlIGZyaWVuZGx5OiBjbGllbnRDZXJ0CisgICBhbmQgc2VydmVyQ2VydAorCisyMDEwLTA2LTMwIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHRvcC1maWxlIGNvbW1lbnQgdXBkYXRlcworCisyMDEwLTA2LTMwIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGRvbid0IGNhbGwgY2VydF9maW5kIHdpdGggYSBOVUxMIGFyZ3VtZW50CisKKzIwMTAtMDYtMzAgMjM6NDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWxsb3cgZGVmIGNlcnRzIHRvIGJlIHNwZWNpZmllZCB1c2luZyBhIGZpbGVuYW1lCisKKzIwMTAtMDYtMzAgMjM6NDEgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIGZpeCBzeW50YXggZXJyb3IKKworMjAxMC0wNi0zMCAyMzowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB0dXJuIGEgY291cGxlIG9mIG5vbi1jcml0aWNhbCBlcnJvcnMgaW50byBkZWJ1ZyBzdGF0ZW1lbnRzIHBlcgorICAgZGlzY3Vzc2lvbiB3aXRoIHJzdG9yeQorCisyMDEwLTA2LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBtYWtlIHRoZSByZWdleHAgcGF0dGVybiBtYXRjaCBmb3IgdGVzdHMgdG8gcnVuIGNhc2UgaW5zZW5zaXRpdmUKKworMjAxMC0wNi0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnQucHk6CisKKyAgIGltcG9ydCBzdGRlcnIgZnJvbSBzeXMsIHBlciBkaXNjdXNzaW9uIG9uIC11c2VycworCisyMDEwLTA2LTMwIDIyOjE3ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZCBiYWNrIGluIHRoZSBkZWZhdWx0IHBvcnQgc3BlY2lmaWVyCisKKzIwMTAtMDYtMzAgMjI6MTcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZW5hYmxlIHB1bGxpbmcgdGhlIHByaXZhdGUga2V5IG92ZXIgaHR0cAorCisyMDEwLTA2LTMwIDIyOjE3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1vdmUgVVJMIGNvbGxlY3Rpb24gaW50byBhIHN1YiBmdW5jdGlvbgorCisyMDEwLTA2LTMwIDIyOjE2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZGVkIGFiaWxpdHkgdG8gcHVsbCBhIGNlcnQgZnJvbSBhIFVSTAorCisyMDEwLTA2LTMwIDIyOjE2ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBhcmd1bWVudCBidWcgaW4gdGhlIGlzX3VybCBmdW5jdGlvbgorCisyMDEwLTA2LTMwIDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHRscy5jOgorCisgICByZW1vdmUgZGVidWdnaW5nIGNvZGUKKworMjAxMC0wNi0zMCAyMDoyNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdEdGxzQ05TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3ZHRsc0NOU2Vzc2lvbl9zaW1wbGU6CisKKyAgIHJlbmFtZSBmaWxlIGZvciBjb25zaXN0ZW5jeQorCisyMDEwLTA2LTMwIDIwOjAxICByc3RvcnkKKworICAgKiBjb25maWd1cmU6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHNubXB0bHMgYXBwCisKKzIwMTAtMDYtMzAgMjA6MDAgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHJlbW92ZSBhY2NpZGVudGFsbHkgY2hlY2tlZCBpbnQgZGVidWcgY29kZQorCisyMDEwLTA2LTMwIDE5OjU5ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICBkZWZpbmUgT0lEcyBiYXNlZCBvbiBTTk1QX1RMU19UTV9CQVNFCisKKzIwMTAtMDYtMzAgMTk6NTkgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIGF1dG8tdHJhbnNpc3Rpb24gYmV0d2VlbiBub3RSZWFkeS9ub3RJblNlcnZpY2UKKworMjAxMC0wNi0zMCAxOTo1NyAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaDoKKworICAgYXV0by10cmFuc2lzdGlvbiBiZXR3ZWVuIG5vdFJlYWR5L25vdEluU2VydmljZTsgYWRkCisgICBzbm1wX3N0b3JlX25lZWRlZCBvbiBjb21taXQKKworMjAxMC0wNi0zMCAxOTo1NiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXNlIG5ldyBmaW5nZXJwcmludCBwYXJzZS9idWlsZCBmdW5jdGlvbnM7IHJlbW92ZSBiYWQgbGVuZ3RoCisgICBjaGVjazsgYXV0bworICAgdHJhbnNpdGlvbiBiZXR3ZWVuIG5vdFJlYWR5IGFuZCBub3RJblNlcnZpY2UKKworMjAxMC0wNi0zMCAxOTo1NSAgcnN0b3J5CisKKyAgICogbWlicy9UTFNUTS1NSUIudHh0OgorCisgICByZW1vdmUgcHJlLXJmYyBtaWI7IHNlZSBTTk1QLVRMUy1UTS1NSUIudHh0IGluc3RlYWQKKworMjAxMC0wNi0zMCAxOTo1NCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgY29uc29saWRhdGUgbXVsdGlwbGUgZmlsZXMKKworMjAxMC0wNi0zMCAxOTo1MyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtYWtlIGhhc2ggdHlwZSBwYXJzZSByb3V0aW5lIHB1YmxpYzsgYWRkIHJvdXRpbmVzIHRvIGJ1aWxkL3BhcnNlCisgICBTbm1wVExTRmluZ2VycHJpbnQKKworMjAxMC0wNi0zMCAxOTo1MSAgcnN0b3J5CisKKyAgICogIE1ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NubXB0bHMuYywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBORVdTOiBzbm1wdGxzOiBuZXcgYXBwIGZvciBtYW5hZ2luZyAoRClUTFMgY29uZmlnIHZpYQorICAgU05NUC1UTFMtVE0tTUlCIHRhYmxlcworCisyMDEwLTA2LTMwIDE5OjUwICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYzoKKworICAgY2FsbCBuZXcgc25tcF9zdG9yZV9uZWVkZWQoKSBmdW5jdGlvbiBhZnRlciBhIGNvbW1pdCBpbiB0YWJsZXMKKyAgIHRoYXQKKyAgIGhhdmUgcGVyc2lzdGVudCBzdG9yZQorCisyMDEwLTA2LTMwIDE5OjQ5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXcgZXhwZXJpbWVudGFsIHNpbXBsZSBzdGF0ZSBtYWNoaW5lCisgICBORVdTOiBzbm1wbGliOiBuZXcgZXhwZXJpbWVudGFsIHJvdyBjcmVhdGlvbiBBUEkgd2hpY2ggdXNlcyBhCisgICBzdGF0ZSBtYWNoaW5lCisgICB0byB0cnkgcmVhbGx5IGhhcmQgdG8gY3JlYXRlIGEgcm93IGZyb20gYSBnaXZlbiB2YXJiaW5kIGxpc3QKKworMjAxMC0wNi0zMCAxOTo0OCAgcnN0b3J5CisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE5FV1M6IHNubXBkOiBuZXcgQVBJIGZvciBpbmRpY2F0aW5nIHRoYXQgcGVyc2lzdGVudCBzdG9yZSBuZWVkcworICAgdG8gYmUgc2F2ZWQgYWZ0ZXIgdGhlIGN1cnJlbnQgcmVxdWVzdCBmaW5pc2hlcyBwcm9jZXNzaW5nCisKKzIwMTAtMDYtMzAgMTk6NDYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBhZGQgc29tZSBuZXcgd3JhcHBlciBtYWNyb3MKKworMjAxMC0wNi0zMCAxNTo1OSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNDTlNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhblNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlclNlc3Npb24sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNUR0bHNTYW5TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE2VGxzU2FuU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN2R0bHNDTlNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMThUbHNDTlNlc3Npb25fc2ltcGxlOgorCisgICBhZGRlZCBjaGVja3MgZm9yIGNoZWNraW5nIGRpcmVjdCBwYXNzaW5nIG9mIGxvY2FsaG9zdCB0byB0aGUKKyAgIGV4cGVjdGVkIG5hbWUKKworMjAxMC0wNi0zMCAxNTo1OSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NlcnZlcjoKKworICAgY2hlY2sgZm9yIHdpbGRjYXJkIHN1cHBvcnQKKworMjAxMC0wNi0zMCAxNTo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc3VwcG9ydCBTQU4gYW5kIENOIHdpbGRjYXJkIG1hdGNoaW5nIHBlciBzcGVjCisKKzIwMTAtMDYtMzAgMTU6MDAgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc05hbWUsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2FuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1RyYXBkVXNlciwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFycywgIAorICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NjaXBoZXJUZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc2FnZW50dHJhcHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNuYW1ldGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NhbnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdHJhcGR1c2VydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdHNtcHJlZml4LCAKKyAgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFEdGxzVXNlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMWR0bHN1ZHB1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJUbHNVc2VyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAydGxzdGNwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExRHRsc1NlcnZlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMlRsc1NlcnZlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzRHRsc1Nhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM2R0bHN1ZHBzYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTRUbHNTYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTR0bHN0Y3BzYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFEdGxzVHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMWR0bHN1ZHB0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJUbHNUcmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIydGxzdGNwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxRHRsc0FnZW50VHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMWR0bHN1ZHBhZ2VudHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMlRsc0FnZW50VHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMnRsc3RjcGFnZW50dHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxRHRsc0NybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MWR0bHN1ZHBjcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJUbHNDcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJ0bHN0Y3Bjcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFEdGxzQ2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MWR0bHNjaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUyVGxzQ2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MnRsc2NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDBUbHNJcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwdGxzaXB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMFRsc1BlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwdGxzdGNwcGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFEdGxzUGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFkdGxzcGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFEdGxzVHNtUHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxZHRsc3RzbXByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMlRsc1RzbVByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMnRsc3RzbXByZWZpeF9zaW1wbGU6CisKKyAgIG1vdmVkIHRlc3QgZmlsZXMgYXJvdW5kIGZvciBiZXR0ZXIgbmFtaW5nCisKKzIwMTAtMDYtMzAgMTQ6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvcHkgZHRscyB0cmFuc3BvcnQgYWRkcmVzcyB0byB0aGUgZXhwZWN0ZWQgaG9zdG5hbWUKKworMjAxMC0wNi0zMCAxNDo1OCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzZXQgdGhlIGV4cGVjdGVkIGhvc3RuYW1lIGZyb20gdGhlIHRyYW5zcG9ydCBzdHJpbmcgaWYgcG9zc2libGUKKworMjAxMC0wNi0zMCAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhIGJpdCBtb3JlIGhlbHAgb3V0cHV0IGJ5IGRlZmF1bHQKKwogMjAxMC0wNi0yOSAyMjoyOSAgdGFuZGVycwogCiAgICAqIGFwcHMvc25tcHRyYXBkX2F1dGguYzoKIAogICAgRm9sbG93LXVwIGZvciByMTkxMTY6IG1ha2Ugc3VyZSB3ZSBpbmNsdWRlIGFnZW50IGNvbmZpZwogCisyMDEwLTA2LTI5IDIyOjE4ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmg6CisKKyAgIEFkZCBtaXNzaW5nIGNvbmZpZ19yZXF1aXJlcworCisyMDEwLTA2LTI5IDE3OjMzICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICByZXdvcmsgdGhlIHNubXBjbWQgbWFudWFsIHBhZ2UgdG8gc2VwYXJhdGUgb3V0IHRoZSBmbGFncyBpbnRvCisgICBzZWN0aW9ucyBhcHByb3ByaWF0ZSBmb3IgdGhlaXIgdXNhZ2UgdHlwZQorCisyMDEwLTA2LTI5IDE2OjUxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgcG9kIGRvY3MsIHNvbWUgZGVmYXVsdCB2YWwgZml4ZXMsIGluZm8gb3V0cHV0IG5vcm1hbGl6ZWQKKworMjAxMC0wNi0yOSAxNjozMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIGFkZGVkIHNzaC5oIGluY2x1ZGUKKworMjAxMC0wNi0yOSAxNjoyNyAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgcmVvcmdhbml6ZSB0aGUgbWFudWFsIHBhZ2UgYSBiaXQgZm9yIFNOTVB2MyBhbmQgVExTCisKKzIwMTAtMDYtMjkgMTY6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGRlZmF1bHQgdGxzIHJlZ2lzdHJhdGlvbnMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIGNoZWNrIGZvciBOVUxMIHRyYW5zcG9ydHMgYWZ0ZXIgYW4gb3BlbiBmYWlscworCisyMDEwLTA2LTI5IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZpbmcgbG9nZ2luZyBhcm91bmQgc28gdGhhdCBvcGVuc3NsIGVycm9ycyBhcmUgcHJpbnRlZCBvbgorICAgZmFpbHVyZXMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdHNtcHJlZml4OgorCisgICBmaXggc29tZSBub24taW50ZXJhY3RpdmUgaW52b2NhdGlvbiBpc3N1ZXMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZSBzb21lIGNvbW1vbiBjb2RlIGludG8gYSBjb21tb24gZnVuY3Rpb24KKworMjAxMC0wNi0yOCAxOToxMyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NjaXBoZXJUZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxZHRsc2NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJ0bHNjaXBoZXJzX3NpbXBsZToKKworICAgY2lwaGVyIHN1aXRlIHNlbGVjdGlvbiBhbmQgdGVzdHMgZm9yIGl0CisKKzIwMTAtMDYtMjggMTk6MTIgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL0xJQ0VOU0U6CisKKyAgIGxpY2Vuc2UgdXBkYXRlcworCisyMDEwLTA2LTI4IDE5OjEyICBoYXJkYWtlcgorCisgICAqICBweXRob24vUkVBRE1FLCBweXRob24vbmV0c25tcC9jbGllbnQucHksICAgCisgICAgICBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBTTk1QdjMgb3ZlciBUTFMgc3VwcG9ydAorCisyMDEwLTA2LTI4IDE5OjEyICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHk6CisKKyAgIGJldHRlciBvdXRwdXQgc2hvd2luZyB0ZXN0IHR5cGVzCisKIDIwMTAtMDYtMjggMDA6NTQgIHRhbmRlcnMKIAogICAgKiAgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCAgCiAgICAgICAgbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgICAKICAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wZC5jb25mLjUuZGVmLCAgIAotICAgICAgbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmOgorICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZjoKIAogICAgQ0hBTkdFUzogbWFuOiBjbGVhbiB1cCBtYW51YWwgcGFnZXMKICAgIChmcm9tIERlYmlhbiBwYXRjaCA1Nl9tYW5wYWdlKQogCi0yMDEwLTA2LTI4IDAwOjIxICB0YW5kZXJzCi0KLSAgICogYWdlbnQvb2JqZWN0X21vbml0b3IuYzoKLQotICAgZml4IGNwcCBzeW50YXggZXJyb3IKLQogMjAxMC0wNi0yNyAyMzoyOSAgdGFuZGVycwogCi0gICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAotICAgICAgYXBwcy9zbm1wdHJhcGRfYXV0aC5jOgorICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9hdXRoLmM6CiAKICAgIENIQU5HRVM6IGJ1aWxkOiBEbyBub3QgY2FsbCB2YWNtX3N0YW5kYXJkX3ZpZXdzKCkgb3IKICAgIGluaXRfdmFjbV9jb25maWdfdG9rZW5zKCkgaWYgdGhlIGNvcnJlc3BvbmRpbmcgbW9kdWxlIHdhcyBub3QKICAgIGNvbXBpbGVkCiAgICAoZnJvbSBEZWJpYW4gcGF0Y2ggNjFfdmFjbV9taXNzaW5nX2RlcGVuZGVuY3lfY2hlY2spCiAKKzIwMTAtMDYtMjcgMDM6MjMgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggYXBwIHRhZyBjb21wbGV0aW9ucworCisyMDEwLTA2LTI3IDAwOjU2ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydCwgbG9jYWwvbmV0LXNubXAtY2VydC5jb25mOgorCisgICBoYW5kbGUgY29uZmlnIGZpbGUgc2V0dGluZyBpbnRlcmFjdGl2ZSwgdHJ1ZS9mYWxzZSB2YWx1ZXMgaGFuZGxlZAorICAgaW4gY29uZmlnCisKKzIwMTAtMDYtMjYgMjA6NTggIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggc29tZSBidWdzIHcvIHNwYWNlcyBpbiBuYW1lcyBhbmQgYXBwIHRhZyBoZWxwCisKKzIwMTAtMDYtMjYgMTk6MzggIG1hcnoKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCB0ZXN0cyB0byB1c2Ugbm9uLWludGVyYWN0aXZlIC1JCisKKzIwMTAtMDYtMjYgMTc6NDYgIG1hcnoKKworICAgKiBsb2NhbC9jZXJ0Z2VuLXRlc3QucGwsIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGJldHRlciBpbnRlcmFjdGl2ZSwgPz1oZWxwLCA8dGFiPiBjb21wbCwgbW9yZSBoZWxwLCBTQU4gbG9vcAorICAgZm9ybWF0IGFuZCB0ZXJtaW5hdGlvbiBmaXgsIHRvbGVyYXRlIHNwYWNlcyBpbiBmaWVsZHMgYW5kCisgICBmaWxlbmFtZXMsIG1vcmUgY29tcGxldGUgZXJyb3Igb3V0cHV0LCBlbWJyeW9uaWMgaW1wb3J0IGZyb20gdXJsCisKKzIwMTAtMDYtMjYgMTM6NDggIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBNb3JlIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXMuCisKKzIwMTAtMDYtMjYgMTM6NDcgIGJ2YXNzY2hlCisKKyAgICogYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRml4ZWQgdGhlIGVycm9ycyBpbiBhY2NvbmZpZy5oIGFuZCByZWdlbmVyYXRlZAorICAgbmV0LXNubXAtY29uZmlnLmguaW4uCisKKzIwMTAtMDYtMjYgMTM6NDQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSBTTVVYIE1JQiBpbXBsZW1lbnRhdGlvbi4KKworMjAxMC0wNi0yNiAwMDo0NSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2FudGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM2R0bHN1ZHBzYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTR0bHN0Y3BzYW5fc2ltcGxlOgorCisgICBmaXhlcyBhbmQgdGVzdGluZyBmb3IgY2hlY2tpbmcgU0FOIEROUyBuYW1lcyBmcm9tIHRoZSBzZXJ2ZXIKKworMjAxMC0wNi0yNiAwMDo0NCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNuYW1ldGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGU6CisKKyAgIGdlbmVyaWNpemUgdGhlIHNlcnZlciBuYW1lIHRlc3RzCisKKzIwMTAtMDYtMjUgMjM6MDEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RzbS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaCwgICAKKyAgICAgIHNubXBsaWIvc25tcHRzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3RzbXByZWZpeCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxZHRsc3RzbXByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMnRsc3RzbXByZWZpeF9zaW1wbGU6CisKKyAgIHVzZXByZWZpeCBzY2FsYXIgdGVzdGluZyBhbmQgc3VwcG9ydAorCisyMDEwLTA2LTI1IDIzOjAxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHM6CisKKyAgIHJlbW92ZSBkZWJ1Z2dpbmcgbGluZXMKKworMjAxMC0wNi0yNSAyMzowMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzOgorCisgICBwdXQgaW4gb25seSBtaW5pbWlhbCBkZWJ1ZyBmbGFncworCisyMDEwLTA2LTI1IDIzOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MWR0bHN1ZHBjcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDJ0bHN0Y3Bjcmxfc2ltcGxlOgorCisgICBjb2RlIGFuZCB0ZXN0IGNhc2VzIGZvciBDUkwgaGFuZGxpbmcKKworMjAxMC0wNi0yNSAxNToyNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlOgorCisgICBBZGRlZCBhIG5ld2xpbmUgYXQgdGhlIGVuZCBvZiBlYWNoIGxpbmUgcHJpbnRlZCBieSB0aGUgUGVybAorICAgaW50ZXJwcmV0ZXIuCisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJlZHVjZSBudW1iZXIgb2YgcmVzZW5kIGF0dGVtcHRzIGFuZCB0aW1lb3V0CisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICB3YXJuaW5nIGZpeGVzCisKKzIwMTAtMDYtMjUgMTM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcmVtb3ZlIGxvZ2ljIHR5cG8gZnJvbSBwcmV2aW91cyBjb21taXQKKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QyMDB0bHNpcHY2X3NpbXBsZToKKworICAgSVB2NiBmaXhlcyBmb3IgVENQCisKIDIwMTAtMDYtMjUgMTM6MDEgIGpzYWZyYW5lawogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTIwOTksNiArMzg5NTksODQgQEAKICAgIENIQU5HRVM6IHNubXB0cmFuc2xhdGU6IGZpeGVkIHByaW50aW5nIG9mIHJhbmdlcyB3aXRoIFVOU0lHTkVECiAgICB0eXBlLgogCisyMDEwLTA2LTI0IDIzOjU1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggZnVuY3Rpb24gbmFtZXMgZm9yIHN0YXQgaW5jcmVhc2VzCisKKzIwMTAtMDYtMjQgMjM6NTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpeCBlcnJvcnMgaW4gY29tbWVudHMKKworMjAxMC0wNi0yNCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29tbWVudHMgZm9yIDUuNCBmb3IgZHRscworCisyMDEwLTA2LTI0IDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjb21tZW50cyBmb3IgNS4zLjIKKworMjAxMC0wNi0yNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2xpZW50IHNpZGUgY29ubmVjdCBjb21tZW50cworCisyMDEwLTA2LTI0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3VudGVyIGFuZCBjb21tZW50IGltcHJvdmVtZW50cworCisyMDEwLTA2LTI0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB1cGRhdGUgY291bnRlciBjYWxscyBhbmQgY29tbWVudCB0ZXh0CisKKzIwMTAtMDYtMjQgMTk6MDMgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBNb3ZlZCBMRF9MSUJSQVJZX1BBVEggc2V0dXAgZnJvbSBpbmRpdmlkdWFsIHRlc3RzIHNjcmlwdHMgdG8KKyAgIHNpbXBsZV9URVNUQ09ORi5zaC4KKworMjAxMC0wNi0yNCAxOTowMiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIEZpeGVkIGEgY29tbWVudC4KKworMjAxMC0wNi0yNCAxNzo0OCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaDoKKworICAgU2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiByMTkwODQuCisKKzIwMTAtMDYtMjQgMTc6NDcgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBzZXZlcmFsIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDYtMjQgMTI6MzAgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgInRlc3QgLWUiIGlzbid0IHBvcnRhYmxlOyB1c2UgInRlc3QgLXgiIGluc3RlYWQgZm9yIHRoZSBQZXJsCisgICBzeXN0ZW0oKQorICAgY2hlY2sKKwogMjAxMC0wNi0yMyAxMToxNCAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYzoKQEAgLTIxMTEsMTggKzM5MDQ5LDExMjIgQEAKICAgIGluc3RlYWQgLSBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeS5mb3J3YXJkaW5nX3Y2IGlzIGJvb2xlYW4sIG5vdAogICAgVHJ1dGhWYWx1ZS4KIAorMjAxMC0wNi0yMiAyMzowNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIHN1cHBvcnQgZm9yIGNlcnRTZWNOYW1lIG1hcHBpbmcgZnJvbSBhIGxvY2FsIGNlcnQgZmlsZSBuYW1lIGFuZCBhCisgICB0ZXN0IGZvciBpdAorCisyMDEwLTA2LTIyIDIyOjQ0ICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtOgorCisgICBkb2N1bWVuYXRpb24gdXBkYXRlIHRvIGNsZWFuIHVwIGFuZCBpbmNsdWRlIFRMUyBwYXJhbWV0ZXJzCisKKzIwMTAtMDYtMjIgMjI6NDQgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBzdXBwb3J0IGZvciBwYXNzaW5nIGlkZW50aXRpZXMgYW5kIGZ1bGwgd29ya2luZyB2ZXJzaW9uCisKKzIwMTAtMDYtMjIgMjI6NDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwdGxzdGNwcGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFkdGxzcGVybC50OgorCisgICBwZXJsIFRMUy9EVExTIHRlc3RzCisKKzIwMTAtMDYtMjIgMjI6NDMgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBmaXJzdCBwdGFjaCBvbiBTTk1QL1RMUyBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIGZ1bmN0aW9uCisKKzIwMTAtMDYtMjIgMjI6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpcnN0IHdvcmtpbmcgc3VwcG9ydCBmb3IgYSBkZWxheWVkIGNsb3NlKCkgdG8gYXR0ZW1wdCB0byBzZW5kaW5nCisgICBvdXRzdGFuZGluZyBwYWNrZXRzIGluIHRoZSBxdWV1ZTsgdGhpcyBpcyByZXF1aXJlZCBmb3Igc25tcHRyYXAKKyAgIHRvIHdvcmsgYXQgYWxsIHdoZW4gc2VuZGluZyB0cmFwcyAobm90IGluZm9ybXMpIG92ZXIgRFRMUworCisyMDEwLTA2LTIyIDE5OjAzICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0cyBUMDU5dHJhcGhhbmRsZV9zaW1wbGUgYW5kCisgICBUMDY1YWdlbnRleHRlbmRfc2ltcGxlIGRvIG5vdyBwYXNzLgorCisyMDEwLTA2LTIyIDE5OjAxICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYzoKKworICAgVGhlIHdpZHRoIGFyZ3VtZW50IGZvciAlLipkIG11c3QgaGF2ZSB0eXBlIGludCwgbm90IHNpemVfdC4gVGhpcworICAgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHIxOTAxNC4KKworMjAxMC0wNi0yMiAxODo1NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jOgorCisgICBORVdTOiBNaW5HVzogdGhlIHNubXBkLmNvbmYga2V5d29yZCBleHRlbmQgZG9lcyBub3cgd29yay4KKyAgIE5FV1M6IE1pbkdXOiB0aGUgc25tcHRyYXBkLmNvbmYga2V5d29yZCB0cmFwaGFuZGxlIGRvZXMgbm93IHdvcmsuCisgICBDSEFOR0VTOiBNaW5HVzogcnVuX3NoZWxsX2NvbW1hbmQoKSB3aXRoIGVpdGhlciBpbnB1dCBvciBvdXRwdXQKKyAgIChidXQgbm90IGJvdGgpIGRvZXMgbm93IHdvcmsuCisgICBUaGlzIGRpZCBub3Qgd29yayB1bnRpbCBub3cgYmVjYXVzZSBvbiBNaW5HVyBta3N0ZW1wKCkgZ2VuZXJhdGVzCisgICBhIE1pbkdXLXN0eWxlIHBhdGggKC90bXAvLi4uKSB3aGlsZSBzeXN0ZW0oKSBpbnZva2VzIGNtZC5leGUgYW5kCisgICBoZW5jZSBleHBlY3RzIGEgV2luZG93cy1zdHlsZSBwYXRoIChDOlwuLi4pLgorCisyMDEwLTA2LTIyIDE3OjM5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIEFsc28gcmVwb3J0IHRoZSBwb3J0IHNwZWNpZmljYXRpb24gaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF0uCisKKzIwMTAtMDYtMjIgMTc6MzggIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGU6CisKKyAgIFJlcGxhY2VkIGFuIGV4cGxpY2l0IHRlc3QgZm9yIE1pbkdXIGJ5IGEgdGVzdCBvbiBIQVZFX1NJR0hVUC4KKworMjAxMC0wNi0yMiAxNzozNiAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgU0lHSFVQLgorCisyMDEwLTA2LTIyIDE3OjM1ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIFJlcG9ydCB3aGljaCB0ZXN0cyBmYWlsZWQsIGlmIGFueS4KKwogMjAxMC0wNi0yMiAwODozNyAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKIAogICAgRml4ZWQgYW4gZXJyb3IgaW4gYSBjb21tZW50IGJsb2NrLgogCisyMDEwLTA2LTIxIDE5OjI2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGU6CisKKyAgIFJlYXJyYW5nZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgdGVzdCBzdWNoIHRoYXQgaXQgaXMgbm8KKyAgIGxvbmdlciBuZWNlc3NhcnkKKyAgIHRvIGludm9rZSBzaW1wbGVfZXZhbF90b29scy5zaCB3aGVuIHRoaXMgc2NyaXB0IGlzIGludm9rZWQgYXMgYQorICAgdHJhcCBoYW5kbGVyCisgICBieSBzbm1wdHJhcGQuCisKKzIwMTAtMDYtMjEgMDg6MDEgIGR0czEyCisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgRW5zdXJlIHRoYXQgZmRzZXQgc3RydWN0dXJlIGlzIHJlc2l6ZWQgc3VmZmljaWVudGx5CisgICB0byBhY2NvbW9kYXRlIHRoZSBzcGVjaWZpZWQgc29ja2V0IElELgorICAgUHJvYmxlbSByZXBvcnRlZCBieSBTaGl5YWxlaS4KKworMjAxMC0wNi0yMCAxOTozMiAgZHRzMTIKKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jbXVfY29tcGF0LmMsIHNubXBsaWIvcGtjcy5jLCAgIAorICAgICAgc25tcGxpYi9zbnByaW50Zi5jOgorCisgICBBdm9pZCBkdXBsaWNhdGUgKHVudXNlZCkgc3ltYm9scy4KKworMjAxMC0wNi0yMCAxOTozMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlOgorCisgICBDb21tZW50ZWQgb3V0IGRlYnVnIGNvZGUuCisKKzIwMTAtMDYtMjAgMTk6MzAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBSZXN0b3JlZCBzdW1tYXJ5IHN1Y2Nlc3MvZmFpbHVyZSBjb3VudCByZXBvcnRpbmcuCisgICBBbHNvLCBtb3ZlZCBraWxsLmV4ZSB0ZXN0IGJhY2sgdG8gUlVOVEVTVFMuCisKKzIwMTAtMDYtMjAgMTk6MjkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogYWRkIHRoZSB0ZXN0IG5hbWUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCisgICAiaW52b2tlZCIuCisKKzIwMTAtMDYtMjAgMTk6MjcgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGU6CisKKyAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBza2lwIHRoZSB0ZXN0cyB0aGF0IHJlcXVpcmUgU0lHSFVQIHNpbmNlCisgICBNaW5HVyBkb2VzIG5vdCBzdXBwb3J0IFNJR0hVUC4KKworMjAxMC0wNi0yMCAxNToxOSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgQWRkZWQgYSBjb25maWd1cmUgdGVzdCB0aGF0IGRldGVjdHMgd2hldGhlciBvciBub3QgUGVybCdzCisgICBzeXN0ZW0oKSBmdW5jdGlvbgorICAgaW52b2tlcyBhIFBPU0lYIHNoZWxsLiAibWFrZSB0ZXN0IiBkb2VzIG5vdyBmYWxsIGJhY2sgdG8gUlVOVEVTVFMKKyAgIGlmIG5vdC4KKworMjAxMC0wNi0yMCAxNToxNiAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBCdWlsZHMgYWdhaW4gb24gTWluR1cgLS0gYWRkZWQgI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+IHdoZXJlCisgICBuZWNlc3NhcnkuCisgICBOb3RlOiBhbHRob3VnaCA8bmV0LXNubXAvdHlwZXMuaD4gaXMgaW5jbHVkZWQgaW5kaXJlY3RseSBmcm9tIHRoZQorICAgKiAgICAgKnRyYW5zcG9ydC5oICAgIGhlYWRlciBmaWxlcywgdGhlc2UgI2luY2x1ZGUgc3RhdGVtZW50cyBhcmUKKyAgICAgIG5lY2Vzc2FyeSBiZWNhdXNlIG9mICAgIGEgcGVza3kgICAgY2lyY3VsYXIgZGVwZW5kZW5jZSBiZXR3ZWVuCisgICAgICA8bmV0LXNubXAvdHlwZXMuaD4gYW5kICAgIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+LiAKKyAgICAgIDIwMTAtMDYtMjAgMTU6MTIgIGJ2YXNzY2hlCisKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIENIQU5HRVM6IE1pbkdXOiByZWZ1c2UgdG8gcnVuIHRoZSByZWdyZXNzaW9uIHRlc3RzIGlmIGtpbGwuZXhlCisgICBjYW5ub3QgYmUgZm91bmQuCisKKzIwMTAtMDYtMjAgMTU6MTEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgU2hvcnRlbmVkIHRoZSBzcmNkaXIgcGF0aCBieSBtYWtpbmcgc3VyZSB0aGF0IGl0IGRvZXMgbm90IGNvbnRhaW4KKyAgIC8uLgorCisyMDEwLTA2LTE5IDE4OjMwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBBZGRlZCBzdXBwb3J0IGZvciBydW5uaW5nIFJVTkZVTExURVNUUyB3aXRoIFRlc3Q6Okhhcm5lc3MgaW4KKyAgIGFub3RoZXIgZGlyZWN0b3J5IHRoYW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisKKzIwMTAtMDYtMTkgMTY6NDEgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmg6CisKKyAgIGNvbXBsZXRlIHJld3JpdGUgb2YgcGFyYW1zIHRvIHVzZSB0YWJsZV9kYXRhc2V0IGluc3RlYWQgb2YKKyAgIGNyZWF0ZS1kYXRhc2V0CisKKzIwMTAtMDYtMTkgMTY6NDEgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICB1c2UgdGV4dCBmb3IgaGFzaCB0eXBlIGluIHBlcnNpc3RlbnQgc3RvcmUKKworMjAxMC0wNi0xOSAxNjo0MCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jOgorCisgICBxdWlldCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTA2LTE5IDE2OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IG1pc3Npbmcgc3BlY2lmaWVyIGluIGRlYnVnCisKKzIwMTAtMDYtMTkgMTY6MzkgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVzZSBkZWZpbmUgaW5zdGVhZCBvZiBjb25zdGFudDsgZml4IGNoZWNrIGZvciByb3dzIHRvIHNhdmUKKworMjAxMC0wNi0xOSAxNjozOSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgcmVtb3ZlL2ZpbmQgZnVuY3Rpb24gZm9yIG1hcHMvYWRkcnMvcGFyYW1zOyByZW5hbWUgcGFyYW1zCisgICB0YWctPm5hbWU7CisgICBkZXN0cm95IC0+IGZyZWU7IGdyb3VwIHJlY2VudCB0cnVzdCBmdW5jdGlvbnMgdG9nZXRoZXIgaW4gc3JjOworICAgZG9uJ3Qgc3RvcmUKKyAgIHBhcmFtcyBmcCBhcyBiaW5hcnk7IGhhbmQgdGV4dCBhcmdzIGZvciBoYXNoIHR5cGUgKGUuZyAtLXNoYTEpCisKKzIwMTAtMDYtMTggMTU6MzUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBjb3JyZWN0ZWQgZXJyb3IgaGFuZGxpbmcgaW4gbWliSUkvYXQuCisKKzIwMTAtMDYtMTggMDc6MjMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNi0xOCAwMTo0MiAgbWFnZnIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIERvIG5vdCBkZWZpbmUgcmV0IHR3aWNlIHdoZW4gTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPIGlzIHNldC4KKworMjAxMC0wNi0xOCAwMTozOSAgbWFnZnIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBDb3JyZWN0ZWQgdHlwby4KKworMjAxMC0wNi0xOCAwMDozMSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICBiZXR0ZXIgTkVXUyBhbmQgQ0hBTkdFUyBmaWxlcworCisyMDEwLTA2LTE3IDIwOjM5ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNi0xNyAyMDozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDYtMTcgMTg6NTkgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMTAtMDYtMTcgMTg6NTUgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDYtMTcgMTg6NTQgIGhhcmRha2VyCisKKyAgICogTWFrZWZpbGUudG9wOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDEwLTA2LTE3IDE4OjM5ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICByZS1lbmFibGUgc29tZSBjb21tYW5kcworCisyMDEwLTA2LTE3IDE3OjQ2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFyczoKKworICAgZm9yZ290IG1pc3NpbmcgcXVvdGVzIGluIFNFVCBvdXRwdXQKKworMjAxMC0wNi0xNyAxNzo0NiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNhZ2VudHRyYXB0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFyczoKKworICAgdGxzIHRlc3RpbmcgY2xlYW51cAorCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgZml4ZXMgZm9yIGFkZHJlc3MgcHJpbnRpbmc7IG1vcmUgdG8gY29tZQorCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vc3RseSBwcm9wZXJseSBzZXQgcmVtb3RlL2xvY2FsIHRyYW5zcG9ydCBwYXJhbWV0ZXJzCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzYWdlbnR0cmFwdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMWR0bHN1ZHBhZ2VudHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMnRsc3RjcGFnZW50dHJhcHRlc3RzX3NpbXBsZToKKworICAgdGVzdHMgZm9yIGFnZW50cyBzZW5kaW5nIG9mIHRyYXBzIG92ZXIgKEQpVExTCisKKzIwMTAtMDYtMTcgMTc6NDUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxZHRsc3VkcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMnRsc3RjcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxZHRsc3VkcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMnRsc3RjcHRyYXB0ZXN0c19zaW1wbGU6CisKKyAgIG1vdmUgZXhwb3J0IHN0YXRlbWVudHMgdG8gdGhlIHN1cHBvcnQgZmlsZSBmb3Igc2ltcGxpY2l0eQorCisyMDEwLTA2LTE3IDE3OjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlIHRscyBib290c3RyYXBwaW5nIHRvIHBvc3RfcHJlbWliIHNvIG90aGVyIGNvbmZpZyB0b2tlbnMgY2FuCisgICB1c2UgdGhlIGNlcnQgbG9hZGluZyByZXN1bHRzCisKKzIwMTAtMDYtMTcgMTc6NDQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYzoKKworICAgYWRkZWQgc25tcF9lbnVtIHRlc3RzIHB1bGxlZCBmcm9tIHRoZSBtYWluKCkgdGVzdCBhdCB0aGUgYm90dG9tCisgICBvZiB0aGUgb3JpZ2luYWwgLmMgZmlsZQorCisyMDEwLTA2LTE3IDE2OjAwICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBFbGltaW5hdGUgImRpZmZlciBpbiBzaWduZWRuZXNzIiB3YXJuaW5nCisKKzIwMTAtMDYtMTcgMDA6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmM6CisKKyAgIHJldmVydCBVRFAgY2hhbmdlcyBmcm9tIHIxODk4NCBzaW5jZSBpdCBicm9rZSB0aGUgVURQIHRyYW5zcG9ydDsKKyAgIHRoZSBzdHJ1Y3QgcHJvYmFibHkgbmVlZHMgdG8gbWF0Y2ggYW5vdGhlciBzdHJ1Y3Qgc29tZXdoZXJlIGVsc2UKKworMjAxMC0wNi0xNiAyMzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgYSBuZXcgS0VZV09SRCBvdXRwdXQgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcworCisyMDEwLTA2LTE2IDIzOjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgdXNlIGNvbmZpZ19hbmRfb3BlbiBmb3Igb3BlbmluZyB0aGUgdHJhbnNwb3J0CisKKzIwMTAtMDYtMTYgMjM6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGV4dHJhIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCisKKzIwMTAtMDYtMTYgMjI6MTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICBleHBsaWNpdGx5IGRlY2xhcmUgdHJ1c3QgY2VydGlmaWNhdGVzIHRvIHRyYW5zcG9ydAorCisyMDEwLTA2LTE2IDIyOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNsZWFudXAgc29tZSBsb3N0IG1lbW9yeSBvbiBjbG9zaW5nCisKKzIwMTAtMDYtMTYgMjE6NTYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvcworCisyMDEwLTA2LTE2IDIxOjM0ICBkdHMxMgorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24iIHdhcm5pbmdzIGZyb20KKyAgIGFnZW50IGNvZGUgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDIwOjE2ICBkdHMxMgorCisgICAqICBzbm1wbGliL2FzbjEuYywgc25tcGxpYi9jaGVja192YXJiaW5kLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYywgc25tcGxpYi9kaXJfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9wYXJzZS5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3RleHRfdXRpbHMuYywgc25tcGxpYi92YWNtLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgInNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbiIgd2FybmluZ3MgZnJvbQorICAgbGlicmFyeSBjb2RlIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAxOTozNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIG9sZGVyIG5vLWxvbmdlci1uZWVkZWQtZHVwbGljYXRlLWNvbmZpZyBlbnRyaWVzCisKIDIwMTAtMDYtMTYgMTk6MTQgIGR0czEyCiAKICAgICogc25tcGxpYi92YWNtLmM6CiAKICAgIEZpeCBwcm9jZXNzaW5nIG9mIHZpZXcgbWFza3MgKG1pc3BsYWNlZCBwYXJlbnRoZXNlcykKIAorMjAxMC0wNi0xNiAxODo0NSAgZHRzMTIKKworICAgKiAgYXBwcy9hZ2VudHh0cmFwLmMsIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgYXBwcy9zbm1wdXNtLmM6CisKKyAgIEVsaW1pbmF0ZSAic2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIiBmcm9tIGFwcCBjb2RlCisgICBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMTc6MjIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN0cmFwZHVzZXJ0ZXN0czoKKworICAgY2hlY2sgZm9yIGluZm9ybXMgc2VudCBvdmVyIHRscyB0cmFuc3BvcnRzCisKKzIwMTAtMDYtMTYgMTc6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNvcHkgb3RoZXIgdmFsdXNlIGZyb20gcGFyZW50IHRsc2Jhc2UgZGF0YQorCisyMDEwLTA2LTE2IDE3OjIxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3RyYXBkdXNlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFkdGxzdWRwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIydGxzdGNwdHJhcHRlc3RzX3NpbXBsZToKKworICAgYWRkZWQgYmFzaWMgdHJhcCBzZW5kaW5nIGFuZCByZWNlaXZpbmcgdGVzdHMKKworMjAxMC0wNi0xNiAxNzoyMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIHJlbW92ZSBubyBsb25nZXIgbmVlZGVkIHRlbXAgZmlsZSB0b3VjaGVzCisKKzIwMTAtMDYtMTYgMTc6MjAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGFkZGVkIGEgbmV3IGZ1bmN0aW9uIGFuZCB0cmFuc3BvcnQgZmxhZyB0byBpbmRpY2F0ZSBpZiB0aGUgZl9vcGVuCisgICBjYWxsIGhhcyBiZWVuIGNhbGxlZCB5ZXQKKworMjAxMC0wNi0xNiAxNzoyMCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgdW51c2VkIHZhciB3YXJuaW5nIGNsZWFudXAKKworMjAxMC0wNi0xNiAxNzoxOSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGFkZGVkIHRydXN0Q2VydCBjb25maWd1cmF0aW9uIHRva2VuCisKKzIwMTAtMDYtMTYgMTc6MTkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICBtaW5vciB0d2Vha3MgZm9yIHRlc3RpbmcgY2xhcml0eQorCisyMDEwLTA2LTE2IDE3OjE4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMWR0bHN1ZHB1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJ0bHN0Y3B1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGU6CisKKyAgIG1vdmVkIGNvbXBsZXggKEQpVExTIHRvIGEgc2VwYXJhdGUgc2VjdGlvbiBhbmQgbWFkZSB0aGUgdHJhbnNwb3J0CisgICB0ZXN0cyBvbmx5IHRlc3QgbWluaW1hbCBzdXBwb3J0CisKKzIwMTAtMDYtMTYgMTc6MTcgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGQgbWVjaGFuaXNtcyBmb3Igc3BlY2lmeWluZyBhbmQgZXhwZWN0aW5nIHRoZSBob3N0bmFtZSBvZiB0aGUKKyAgIGZhciBzaWRlCisKKzIwMTAtMDYtMTYgMTc6MTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnM6CisKKyAgIHRlc3RzIGZvciB2ZXJpZnlpbmcgc2VydmVyIGNlcnRpZmljYXRlIGNoZWNrIGZhaWx1cmVzCisKKzIwMTAtMDYtMTYgMTc6MTcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RscywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzZXJ2ZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTExZHRsc3VkcHNlcnZlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEydGxzdGNwc2VydmVydGVzdHNfc2ltcGxlOgorCisgICB0ZXN0aW5nIGZvciBjaGVja2luZyBjbGllbnQgc2lkZSB2ZXJpZmljYXRpb24gb2Ygc2VydmVyCisgICBjZXJ0aWZpY2F0ZXMKKworMjAxMC0wNi0xNiAxNzoxNiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaDoKKworICAgc2V0dXAgZm9yIGEgaG9zdG5hbWUgY29uZmlnIG9wdGlvbgorCisyMDEwLTA2LTE2IDE3OjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzZXR1cCBmb3IgYSBob3N0bmFtZSBjb25maWcgb3B0aW9uCisKKzIwMTAtMDYtMTYgMTc6MTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2hlY2sgdG8gbWFrZSBzdWVyIHNzbCBwb2ludGVyIGhhcyBiZWVuIGNyZWF0ZWQgdmlhIGZfb3BlbiBjYWxsCisKKzIwMTAtMDYtMTYgMTU6MDIgIGR0czEyCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmgsIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIERlY2xhcmUgJ3NodXRkb3duX3BlcmwnIHByb3Blcmx5LgorCisyMDEwLTA2LTE2IDE0OjM3ICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmMsIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9sY2RfdGltZS5jOgorCisgICBFbGltaW5hdGUgInNpZ25lZCBhbmQgdW5zaWduZWQgdHlwZSBpbiBjb25kaXRpb25hbCBleHByZXNzaW9uIgorICAgd2FybmluZ3MgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDE0OjI3ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgRWxpbWluYXRlICJ1bnVzZWQgdmFyaWFibGUiIHdhcm5pbmcKKworMjAxMC0wNi0xNiAxNDoyMiAgZHRzMTIKKworICAgKiAgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L3NubXBkLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICBFbGltaW5hdGUgdmFyaW91cyAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xNiAxMzoxMyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYXBwcy9zbm1wdmFjbS5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgc2lnbmVkLXZzLXVuc2lnbmVkIHdhcm5pbmdzIGZyb20gbnVtZXJpYyBzY2FuZgorICAgcHJvY2Vzc2luZyBbLXBlZGFudGljXQorCisyMDEwLTA2LTE2IDAzOjI4ICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICB0aGUgZ3JlYXQgdW4tbmFtZWQgY29udGFpbmVyIGh1bnQKKworMjAxMC0wNi0xNiAwMzoyNyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICBzaGFyZSBjYWNoZSBiZXR3ZWVuIHRhYmxlIGFuZCBjb3VudCBzY2FsYXI7IHdoZW4gcmVhZGluZyBjb25maWcsCisgICBhZGQgdG8KKyAgIGxpYnJhcnkgY29udGFpbmVycyBmb3IgYWN0aXZlIHJvd3MsIHRhYmxlIGNvbnRhaW5lcnMgZm9yIGluYWN0aXZlCisgICByb3dzOworICAgdXNlciBjZXJ0X3V0aWwgYXBpcyBpbnN0ZWFkIG9mIGRpcmVjdCBjb250YWluZXIgbWFuaXB1bGF0aW9uOworICAgd2hlbgorICAgc2F2aW5nIGluYWN0aXZlIG1hcCByb3dzLCBza2lwIGFsbCBidXQgbm9uVm9sYXRpbGUKKworMjAxMC0wNi0xNiAwMzoyNiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGRlYnVnIHRva2VuIHR5cG8KKworMjAxMC0wNi0xNiAwMzoyNSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgYXBpIGZvciBhZGRpbmcgZW50cmllcyB0byB0bHRzbSBhZGRyLCBwYXJhbXMgYW5kIGNlcnQgbWFwCisgICBjb250YWluZXJzOworICAgcmVnaXN0ZXIgc2Ugc2xpc3QgcGFpciBlYXJsaWVyIHNvIHRoZXkgYXJlIGF2YWlsYWJsZSBkdXJpbmcKKyAgIGNvbmZpZyBwYXJzaW5nOworICAgbWFrZSBzdXJlIGNvbmZpZyBzdHJpbmdzIGFyZSBudWxsIHRlcm1pbmF0ZWQKKworMjAxMC0wNi0xNSAyMTo0MiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIFN1cHByZXNzIHdhcm5pbmdzOgorICAgJ3N0cnVjdCBubG1zZ2hkciBkZWZpbmVkIGluc2lkZSBwYXJhbWV0ZXIgbGlzdCcgYW5kCisgICAnZnVuY3Rpb24gX2xvYWRfdjYgZGVjbGFyZWQgYnV0IG5ldmVyIGRlZmluZWQnCisKKzIwMTAtMDYtMTUgMjE6MzAgIGR0czEyCisKKyAgICogIGFnZW50L2tlcm5lbC5jLCBhcHBzL3NubXB0cmFwZF9zcWwuYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvY211X2NvbXBhdC5jLCBzbm1wbGliL3BrY3MuYywgc25tcGxpYi9zbnByaW50Zi5jOgorCisgICBFbGltaW5hdGUgImVtcHR5IHRyYW5zbGF0aW9uIHVuaXQiIHdhcm5pbmdzIFstcGVkYW50aWNdCisKKzIwMTAtMDYtMTUgMDc6MDcgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAzY29weV9ud29yZF9jbGliLmM6CisKKyAgIEFkZCB0ZXN0IG9mIGNvcHlfbndvcmQKKworMjAxMC0wNi0xNCAyMTozMiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jOgorCisgICBFbGltaW5hdGUgIm92ZXJmbG93IGluIGltcGxpY2l0IGNvbnN0YW50IGNvbnZlcnNpb24iIHdhcm5pbmdzCisgICBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTE0IDE1OjUxICBkdHMxMgorCisgICAqIGFnZW50L3NubXBkLmMsIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEVsaW1pbmF0ZSAic3RyaW5nIGxlbmd0aCBncmVhdGVyIHRoYW4gNTA5IiB3YXJuaW5ncyBbLXBlZGFudGljXQorCisyMDEwLTA2LTE0IDE1OjE5ICBkdHMxMgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICBFbGltaW5hdGUgImluaXRpYWxpemVyIGVsZW1lbnQgaXMgbm90IGNvbXB1dGFibGUiIHdhcm5pbmdzCisgICBbLXBlZGFudGljXQorCisyMDEwLTA2LTE0IDA1OjI3ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIGNvdW50IGhhbmRsZXJzIHRvIGNvdW50IG5vbi1hY3RpdmUgcm93cyB0b28KKworMjAxMC0wNi0xNCAwNToxMiAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgb25seSB0d2VhayBzdG9yYWdlVHlwZSBmb3IgYWN0aXZlIHJvd3M7IHJlc2V0IGVudHJ5IGZsYWdzIHdoZW4KKyAgIHJlbW92aW5nIGZyb20KKyAgIGNlcnRfdXRpbCBtYXBzOyB3aGVuIGNyZWF0ZWluZyByb3dzIGZyb20gY2VydF91dGlsIG1hcHMsIHNldAorICAgc3RyYWdldFR5cGUgdG8KKyAgIHZvbGF0aWxlIGlmIG5vblZvbGF0aWxlIGZsYWcgbm90IHNldDsgZG9udCBmcmVlIGNhY2hlIGluCisgICBjYWNoZV9sb2FkIG9uIGVycgorCisyMDEwLTA2LTE0IDA1OjEwICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgbW92ZSB0bHN0bUFkZHIgdGFibGUgY29uZmlnIHBhcnNpbmcgdG8gY2VydF91dGlsOyBhZGQgY2FjaGUgdG8KKyAgIG1lcmdlIGNlcnRfdXRpbAorICAgYWRkcnMgKGFjdGl2ZSkgYW5kIG5vbi1hY3RpdmUgcm93czsKKworMjAxMC0wNi0xNCAwNToxMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgbm9uVm9sYXRpbGUgZmxhZyB0byB0bHN0bUFkZHIgdGFibGU7IHNldCBjb250YWluZXIgbmFtZTsgc2tpcAorICAgJzB4JyBpbiBmcAorCisyMDEwLTA2LTE0IDA1OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hhbmdlIExPR19FUlIgdG8gTE9HX0lORk8gZm9yIG5vbi1lcnJvciBsb2cgbXNnCisKKzIwMTAtMDYtMTMgMjE6MDIgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgZnJvbQorICAgTWZELWJhc2VkIE1JQiBtb2R1bGUgY29kZSwgYW5kIE1mRCB0ZW1wbGF0ZSBbLVdjKystY29tcGF0XQorCisyMDEwLTA2LTEyIDIxOjMzICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgZnJvbSAobm9uLU1mRCkKKyAgIE1JQiBtb2R1bGUgY29kZS4gWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xMiAxMDoyNiAgZHRzMTIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF9pbmRleC5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9iYWJ5X3N0ZXBzLmMsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMsIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgICAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jLCBzbm1wbGliL2ZpbGVfdXRpbHMuYywgICAKKyAgICAgIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAiaW1wbGljaXQgY29udmVyc2lvbiIgd2FybmluZ3MgZnJvbSBsaWJyYXJ5LAorICAgYXBwcyBhbmQgYWdlbnQgZnJhbWV3b3JrK2hlbHBlcnMgY29kZS4gWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xMCAyMDowMSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBsb29rdXAgY2VydCBrZXlzIGZvciB0bHMgZG9tYWluczsgdXNlIFNFQ19NT0RFTCBkZWZpbmUgaW5zdGVhZCBvZgorICAgaGFyZGNvZGVkCisgICBjb25zdGFudDsgYWRkIFNFQ19NT0RFTF9UU00gdG8gYWxsb3dlZCBzZWMgbW9kZWxzIGZvciBtcE1vZGVsCisgICBTTk1QX1ZFUlNJT05fMworCisyMDEwLTA2LTEwIDIwOjAwICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmM6CisKKyAgIGRlZmF1bHQgdG8gcmVhZE9ubHkvYWN0aXZlIGZvciBiYWQgY29uZmlnCisKKzIwMTAtMDYtMTAgMjA6MDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhZGQgZGVidWc7IHN3aXRjaCB0byBTRUNfTU9ERUxfVFNNIGFuZCB3YXJuIGlmIG90aGVyIHNlY21vZGUgc2V0LAorICAgaW5zdGVhZAorICAgb2Ygc2ltcGx5IGxvZ2dpbmcgdGhhdCBpdCB3b24ndCB3b3JrCisKKzIwMTAtMDYtMTAgMTk6NTkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjaGVjayBwdHJzIGJlZm9yZSBkZXJlZmVyZW5jZQorCisyMDEwLTA2LTEwIDE5OjU4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vdmUgc25tcFRsc3RtQWRkclRhYmxlIGRhdGEgbWFuYWdlbWVudCB0byBjZXJ0X3V0aWw7IGltcGxlbWVudAorICAgVEFSR0VUX0FERFIKKyAgIGFuZCBUQVJHRVRfUEFSQU1TIGxvb2t1cCBpbiBjZXJ0IEFQSQorCisyMDEwLTA2LTEwIDE5OjQ3ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHVwZGF0ZSBzZWMgbW9kZWwgZGVmaW5lIG1pc3NlZCBpbiBlYXJsaWVyIGNoZWNraW4KKworMjAxMC0wNi0xMCAxOTo0NiAgcnN0b3J5CisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBjb25maWcgdHJhcHNlc3MgdHJhbnNwb3J0cyBvbiBjcmVhdGlvbjsgc2ltcGxpZnkgaWZkZWZzIGZvcgorICAgRElTQUJMRV9TTk1QVjEKKworMjAxMC0wNi0xMCAxOTo0NiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcGtzbS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdHNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhdXRvIHN3aXRjaCB0byB2MyBmb3IgKGQpdGxzIHNlc3Npb25zIGluc3RlYWQgb2YgbG9nZ2luZyB0aGF0CisgICBvdGhlcnMgd29udAorICAgd29yazsgZGVmaW5lIFRTTSBzZWMgbW9kZWwgd2l0aCBvdGhlciBzZWMgbW9kZWxzOyBjb25zaXN0ZW50bHkKKyAgIHVzZQorICAgU05NUF9TRUNfTU9ERUxfKiBpbiB0aGUgY29kZSwgdXNpbmcgI2RlZmluZXMgZm9yIGJhY2t3YXJkcworICAgY29tcGF0aWJpbGl0eQorICAgdy8qX1NFQ1VSSVRZX01PREVMCisKKzIwMTAtMDYtMTAgMTk6NDYgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNlcnRUb1RTTjogbW92ZSBtaWIgcmVsYXRlZCBwZXJzaXN0ZW5jZSBiYWNrIGludG8gbWliIG1vZHVsZTsKKyAgIGNlcnRfdXRpbDogYWRkIHRsc3RtUGFyYW1zIHBlcnNpc3RlbmNlOyB1c2Ugc2xpc3QgZm9yIGNlcnQgbWFwCisgICB0eXBlIG5hbWUKKyAgIG1hcHBpbmc7CisKKzIwMTAtMDYtMTAgMTk6NDUgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZyAoY29uc3QpCisKKzIwMTAtMDYtMTAgMDQ6NTggIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfaGFuZGxlci5jOgorCisgICBBZGQgbWlzc2luZyBpbmRlbnRhdGlvbiBvZiBhIGRvLXdoaWxlIGxvb3AgdG8gbWFrZSB0aGUgY29kZQorICAgcmVhZGFibGUuCisKKzIwMTAtMDYtMDkgMjI6NTcgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgY29tbWVudCBvdXQga2V5VXNhZ2Ugc28gcHJvcGVyIHNlbGYtc2lnbmVkIGNlcnRzIGFyZSBnZW5lcmF0ZWQKKworMjAxMC0wNi0wOSAyMjo1NyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc29saWRpZnkgY2VydGlmaWNhdGUgYWNjZXB0YW5jZSBmb3IgdGhlIGNsaWVudCBzaWRlCisKKzIwMTAtMDYtMDkgMjI6NTcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGFycmF5IHR5cG8KKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBsb2cgb3BlbnNzbCBlcnJvcnMgb24gYWNjZXB0IGZhaWx1cmUKKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJlZ2lzdGVyIGRlZmF1bHQgcG9ydHMgZm9yIHRscy9kdGxzCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZG8gcHJvcGVyIFNUT1JFIGxvYWRpbmcgb2YgdHJ1c3RlZCBjZXJ0aWZpY2F0ZXMgcmF0aGVyIHRoYW4gZmlsZQorICAgYmFzZWQgbG9hZGluZworCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkZWQgdHdvIG5ldyBBUElzOiBuZXRzbm1wX2NlcnRfdHJ1c3QgYW5kIG5ldHNubXBfY2VydF90cnVzdF9jYQorCisyMDEwLTA2LTA5IDIyOjU1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGFkZGVkIHN0cmFpZ2h0ICd0bHMnIHRyYW5zcG9ydCBuYW1lCisKKzIwMTAtMDYtMDkgMjI6NTUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGFkZGVkIHN0cmFpZ2h0ICdkdGxzJyB0cmFuc3BvcnQgbmFtZQorCisyMDEwLTA2LTA4IDIxOjA1ICBtYWdmcgorCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICBJbnN0YWxsIGFnZW50X3JlYWRfY29uZmlnLmggaW4gNS42IGFzIHdlbGwuIEl0IGRpc2FwcGVhcmVkIGluCisgICByMTg4NDMuCisKKzIwMTAtMDYtMDggMDk6MjUgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jOgorCisgICBSZW1vdmUgKG9yIGFjdGl2YXRlKSB1bnVzZWQgdmFyaWFibGVzLgorICAgRml4IG1pc25hbWVkIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgorCisyMDEwLTA2LTA4IDA3OjExICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBBUEkgY2hhbmdlcyBmb3IgcHJlbGltaW5hcnkgSEFMX2Jhc2VkIGltcGxlbWVudGF0aW9uIG9mIFVDRCBkaXNrCisgICBtb2R1bGUuCisgICAoT21pdHRlZCBmcm9tIHJldmlzaW9uIDE4OTMyIGNoZWNraW4pCisKKzIwMTAtMDYtMDggMDQ6MTggIHJzdG9yeQorCisgICAqIGFnZW50L01ha2VmaWxlLmluOgorCisgICB1cGRhdGUgbWFrZWZpbGUgZm9yIG1vdmVkIGhlbHBlciBoZWFkZXJzCisKIDIwMTAtMDYtMDcgMjA6MTggIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jOgpAQCAtMjEzMCw2ICs0MDE3MiwxNjkgQEAKICAgIFJldmVydGluZyByZXYuIDE3NjE2LCB0aGUgbmVjZXNzYXJ5IGNoZWNrIGlzIGFscmVhZHkgaW4gcmV2LgogICAgMTc0MTUuCiAKKzIwMTAtMDYtMDYgMDM6NDUgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRoczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEluIGNhc2UgZXhlY19wcmVmaXggaXMgdW5zZXQgdGhlbiBzZXQgaXQgdG8KKyAgICcke3ByZWZpeH0nIGluIG9yZGVyIHRvIHBpY2sgdXAgb3ZlcnJpZGVzIG9mICRwcmVmaXggaW4gbWFrZQorICAgaW5zdGFsbC4KKworMjAxMC0wNi0wNCAwNDowNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZG8gYSBiZXR0ZXIgam9iIG9mIHZlcmlmeWluZyBmaW5nZXJwcmludHMgb2YgcmVtb3RlIHNlcnZlcnMKKyAgIHB1bGxpbmcgZmluZ2VycHJpbnRzIGZyb20gYSBudW1iZXIgb2YgcG9zc2libGUgcGxhY2VzCisKKzIwMTAtMDYtMDQgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgZ28gYWhlYWQgYW5kIGxvZyBvdXRwdXQgZmlsZSBmb3IgZWFzaWVyIGRlYnVnZ2luZyBpbiBlcnJvcnMKKworMjAxMC0wNi0wNCAwNDowNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IHR5cG8KKworMjAxMC0wNi0wNCAwNDowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIHJlbW92ZSBjb21tZW50IGFib3V0IHJhbmRvbSBiZWluZyBpbmFkZXF1YXRlOyB3ZSdyZSBkb2luZyB0aGUKKyAgIGJlc3Qgd2UgY2FuIGJhc2VkIG9uIHdoYXQgd2UgaGF2ZQorCisyMDEwLTA2LTA0IDA0OjA0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdXNlIGFub3RoZXIgdXNlciBmb3IgdGVzdGluZyBzbm1wYXBwIGRlZmF1bHQgY2VydGlmaWNhdGUKKworMjAxMC0wNi0wNCAwNDowNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHJ1biBhIGRlZmF1bHQgdGVzdCB3aXRob3V0IGEgbG9jYWwga2V5IHRvIGVuc3VyZSB0aGUgc25tcGFwcCB0eXBlCisgICBpcyBwaWNrZWQgdXAKKworMjAxMC0wNi0wNCAwNDowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgYSBzcGVjaWFsIGNhc2UgZm9yIHRoZSBsb2NhbCBpZGVudGl0eSBhbmQgcHVsbCBpdCBmcm9tIGEKKyAgIGZpbGVuYW1lIG9mIHRoZSBpbml0X3NubXAoKSByZWdpc3RlcmVkIHR5cGUgbmFtZQorCisyMDEwLTA2LTA0IDA0OjAzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG06CisKKyAgIGRvYyB1cGRhdGUKKworMjAxMC0wNi0wNCAwNDowMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDV1bml4LnQ6CisKKyAgIHVuaXggc29ja2V0IHRlc3QKKworMjAxMC0wNi0wNCAwNDowMyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAzdWRwNi50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA0dGNwNi50OgorCisgICBpcHY2IHRlc3RzCisKKzIwMTAtMDYtMDQgMDQ6MDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQ6CisKKyAgIG1lbnRpb24gdGVzdCBuYW1lIGlzIElQdjQKKworMjAxMC0wNi0wNCAwNDowMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudDoKKworICAgY2hlY2sgdGhhdCB0cmFuc3BvcnQgd2FzIGNvbmZpZ3VyZWQKKworMjAxMC0wNi0wNCAwNDowMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtOgorCisgICBhZGQgc3VwcG9ydCBmb3IgbmV0LXNubXAtY29uZmlnLmggY2hlY2tzCisKKzIwMTAtMDYtMDQgMDQ6MDEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvTmV0U05NUFRlc3RUcmFuc3BvcnQucG0sICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50OgorCisgICBzb21lIGJhc2ljIHRyYW5zcG9ydCBjaGVja2luZyBmb3IgcGVybDogdWRwIGFuZCB0Y3AKKworMjAxMC0wNi0wNCAwNDowMSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QwMDFiYXNpYy50OgorCisgICBiYXNpYyB0ZXN0cyBmb3IgcGVybAorCisyMDEwLTA2LTA0IDA0OjAxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG06CisKKyAgIGluZnJhc3RydWN0dXJlIG1vZHVsZSBmb3IgdGVzdGluZyBwZXJsIHN1cHBvcnQKKworMjAxMC0wNi0wMyAxNTo1NiAgZHRzMTIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgUG9pbnQgTElCe0NVUlJFTlQsQUdFLFJFVklTSU9OfSBkb2N1bWVudGF0aW9uIHRvIHRoZSBjb3JyZWN0CisgICBmaWxlLgorICAgV2FybiBhYm91dCAnbWFrZWRlcGVuZCcgcGlja2luZyB1cCB0ZXN0aW5nIG1vZHVsZSBjb2RlLgorICAgRW1waGFzaXMgdXBkYXRlIG9mICdkb3dubG9hZC5odG1sJyBwYWdlCisgICBNZW50aW9uIHVwZGF0ZSBvZiBPZmZpY2lhbCBQYXRjaGVzCisgICBTdXBwcmVzcyBicm9rZW4gY29tbWFuZHMKKworMjAxMC0wNi0wMyAxNToxNiAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oLCBhZ2VudC9taWJncm91cC91Y2Rfc25tcC5oOgorCisgICBQcmVsaW1pbmFyeSBIQUxfYmFzZWQgaW1wbGVtZW50YXRpb24gb2YgVUNEIGRpc2sgbW9kdWxlLgorICAgRW5zdXJlcyBjb25zaXN0ZW50IHJlcG9ydGluZyBiZXR3ZWVuIFVDRCBhbmQgSG9zdFJlcyBGU3lzIHVzYWdlCisgICBhbmQgZXh0ZW5kcyAnc2tpcE5GU0luSG9zdFJlc291cmNlcycgY29uZmlnIHRvIFVDRCBkaXNrIHN0YXRzLgorCisyMDEwLTA2LTAzIDE1OjEzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jOgorCisgICBGaXggYnJva2VuIHNpemUgY2FsY3VsYXRpb25zLgorICAgU3VwcG9ydCA2NC1iaXQgc2l6ZS91c2FnZSB2YWx1ZXMuCisKKzIwMTAtMDYtMDIgMTQ6NTIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB1c2UgLS13aXRoLWNhIGluc3RlYWQgb2YgLS1jYQorCisyMDEwLTA2LTAyIDE0OjUxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdXNlIHRoZSBuZXcgLWJyaWVmIG9wdGlvbiBmb3IgZmluZ2VycHJpbnQgY2FwdHVyaW5nCisKKzIwMTAtMDYtMDIgMTQ6NDAgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggLS13aXRoLWNhIGhhbmRsaW5nLCBmaXggQ0EgbmV3Y2VydHMgYm9va2tlZXBpbmcKKwogMjAxMC0wNi0wMiAxMDo1NyAganNhZnJhbmVrCiAKICAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMsICAgCkBAIC0yMTM4LDYgKzQwMzQzLDczIEBACiAgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBwYXJzaW5nIE9JRHMKICAgIGluIGNvbmZpZyBmaWxlcy4KIAorMjAxMC0wNi0wMiAwMDoyNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGNoZWNrIHRoYXQgQ0EgY2VydGlmaWNhdGVzIGNyZWF0ZWQgYWZ0ZXIgc25tcGQgc3RhcnRzIGFyZSBzdGlsbAorICAgdXNhYmxlOyBjaGVjayBhbGwgb3V0cHV0IGZpbmdlcnByaW50cyB0byBlbnN1cmUgdGhleSB3ZXJlCisgICBwcm9wZXJseSBjcmVhdGVkCisKKzIwMTAtMDYtMDIgMDA6MjMgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkIG1pc3NpbmcgZGlyZWN0b3J5IGFuZCBmaWxlIHN1ZmZpeCB0byBjYSBpbnZvY2F0aW9ucworCisyMDEwLTA2LTAyIDAwOjIxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgY2hlY2sgdGhhdCBjZXJ0aWZpY2F0ZSBvdXRwdXQgZmluZ2VycHJpbnRzIHdlcmUgZm91bmQKKworMjAxMC0wNi0wMiAwMDoyMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICB0d28gbmV3IGZ1bmN0aW9ucyBmb3IgdmFsdWUgY29tcGFyaXNvbiB0ZXN0IG91dHB1dAorCisyMDEwLTA2LTAyIDAwOjE2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIHJlbW92ZSBuby1sb25nZXItdXNlZCBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0b2tlbiBzcGVjaWZpZXIgKHdlCisgICByZXF1aXJlIGEgY29weSBvZiB0aGUga2V5KQorCisyMDEwLTA2LTAyIDAwOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIC0gY2hhbmdlZCAnZmluZ2VycHJpbnQnIHRva2VuIHRvIG1vcmUgZ2VuZXJpYyAnaWRlbnRpdHknIGtleXdvcmQKKyAgIC0gYWRkZWQgdGhlIGFiaWxpdHkgZm9yIG5ldHNubXBfY2VydF9maW5kIHRvIHRyeSBtdWx0aXBsZSB0eXBlcworICAgKEZQICYgZmlsZSkKKyAgIC0gYW5kIHByb3ZpZGUgdGVzdCBzdWl0ZSB0ZXN0IGZvciBpdC4KKworMjAxMC0wNi0wMSAyMDoxMiAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZToKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIFBlcmwgZXh0ZW5zaW9uIG1vZHVsZXMgY2FuIGxvYWQgdGhlIE5ldC1TTk1QCisgICBETExzIHdoaWxlIHJ1bm5pbmcgdGhlIE5ldC1TTk1QIHJlZ3Jlc3Npb24gdGVzdHMuCisKKzIwMTAtMDYtMDEgMTY6NDcgIG1hcnoKKworICAgKiBsb2NhbC9jZXJ0Z2VuLXRlc3QucGwsIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1ham9yIHVwZGF0ZSBidWcgZml4ZXMgYW5kIGZlYXR1cmVzIC0gaW50ZXJhY3RpdmUgbW9kZSwgc2VwYXJhdGUKKyAgIENBIGRpcnMsIGdlbiBjc3IgZnJvbSBjZXJ0LCBmaW5nZXJwcmludCBkaXNwbGF5IC0tYnJpZWYsCisgICBlbGltaW5hdGUgc2VkLCBvcGVuc3NsLmNvbmYgb3ZlcndyaXRlIGFuZCB0ZW1wbGF0aW5nCisKIDIwMTAtMDYtMDEgMTQ6NDggIGJ2YXNzY2hlCiAKICAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgpAQCAtMjE1Miw2ICs0MDQyNCw0NTcgQEAKICAgIAogICAgSnVzdCBmaXhpbmcgYSBzdHVwaWQgdHlwby4KIAorMjAxMC0wNS0zMSAxMDo0MyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBlbmFibGVkIFVuaXggdHJhbnNwb3J0LgorICAgKEZvcndhcmQtcG9ydGVkIHIxODY4NyBmcm9tIHRoZSBWNS41IGJyYW5jaCkuCisKKzIwMTAtMDUtMzAgMjI6NTIgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZW5hYmxlIHRvIHJ1biB3aXRoIG9sZGVyIFBlcmwgKGUuZy4gUGVybCA1LjAwNDA1IGFzIHNoaXBwZWQgd2l0aAorICAgSVJJWAorICAgNi41KQorCisyMDEwLTA1LTMwIDIyOjQ5ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHBvbGlzaCBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDUtMzAgMjA6MTkgIG1hZ2ZyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCAgIAorICAgICAgbmV0LXNubXAtY29uZmlnLmluLCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbiwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogRG8gbm90IGxpbmsgd2l0aCBsaWJuZXRzbm1waGVscGVycyBhbnkgbW9yZSBhcworICAgaXQgaXMgZW1wdHkuCisKKzIwMTAtMDUtMzAgMTk6MTggIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaCwgc25tcGxpYi9zbm1wLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFVzZSBhIHZvaWQgYXJndW1lbnQgZm9yIHRoZSBkYXRhIGFyZ3VtZW50IG9mCisgICB4ZHVtcC4KKworMjAxMC0wNS0zMCAxOToxOCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuYzoKKworICAgQ0hBTkdFUzogQlVHOiAyMDUxNzQyOiBhZGRlZCBtaXNzaW5nIFBFUkxfU1lTX0lOSVQzKCkgY2FsbCAoc2VlCisgICBhbHNvIG1hbiBwZXJsZW1iZWQpLgorCisyMDEwLTA1LTMwIDE5OjE2ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaDoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIChmcmVlKCkgY2FsbGVkIHdpdGhvdXQgYmVpbmcgZGVjbGFyZWQKKyAgIGZpcnN0KS4KKworMjAxMC0wNS0zMCAxNjo1NiAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogc25tcGxpYjogRG8gbm90IHJlcXVpcmUgdGhhdCB0aGUgVURQIHRyYW5zcG9ydCBpcyBpbmNsdWRlZC4KKworMjAxMC0wNS0zMCAxMjowMCAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDb3JyZWN0IGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRyYW5zcG9ydHMuIFJlbW92ZQorICAgdW5uZWNlc3NhcnkgaW5jbHVkZXMuCisKKzIwMTAtMDUtMzAgMDY6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9kdW1teS5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBsaWJuZXRzbm1waGVscGVycyBpcyBub3QgZW1wdHkgc3VjaCB0aGF0IGJ1aWxkaW5nCisgICBOZXQtU05NUCBvbiBBSVggYW5kIElSSVggaXMgYWdhaW4gcG9zc2libGUuCisKKzIwMTAtMDUtMjkgMDk6NTIgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4OTAyOiB3b3JrcyBhZ2FpbiB3aXRob3V0IFRBUDo6SGFybmVzcy4KKworMjAxMC0wNS0yOCAyMzoyMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IGxvbmctYWdvIGJyb2tlbiB2ZXJib3NpdHkKKworMjAxMC0wNS0yOCAyMzowNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IG1vcmUgcHJldmlvdXNseSBicm9rZW4gb3B0aW9uIHJlbmFtZXM7IGNoYW5nZSAtZCB0bworICAgbWFzdGVyLWRpcmVjdG9yeSBhbmQgYWRkIGFzIGEgcmVhbCBhcmd1bWVudAorCisyMDEwLTA1LTI4IDIzOjA1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGU6CisKKyAgIG1vcmUgbWlzc2luZyBvbGR1Y2QgcmVuYW1lcworCisyMDEwLTA1LTI4IDIyOjU3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfb2xkdWNkLCAKKyAgICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMXNubXB2M2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyc25tcHYzZ2V0TUQ1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MnNubXB2MmNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OGFnZW50YXV0aHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTExYWdlbnR4c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNWFnZW50eHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIxcHJveHlzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMHNubXB2MXZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGU6CisKKyAgIHJlbmFtZWQgJ29sZHVjZCcgdG8gJ3NpbXBsZScgdG8gcHV0IGEgbW9yZSBwb3NpdGl2ZSBzcGluIG9uIHRoZW0KKworMjAxMC0wNS0yOCAyMjo1NCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JFQURNRSwgdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGRvY3VtZW50YXRpb24gZm9yIHRoZSB0ZXN0IHN1aXRlCisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weToKKworICAgcmV2ZXJ0IHVuaW50ZW50aW9uYW5hbGx5IGNvbW1pdHRlZCB0ZXN0IHRlc3QKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jLCBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5OgorCisgICBmcmVlIHZhcmlhYmxlcyBhZ2FpbgorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIGZpeCB3YWxrcyBzbyB0aGF0IG11bHRpcGxlIHdhbGtzIHRlcm1pbmF0ZSBwcm9wZXJseQorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIHBhdGNoIHRvIGhhbmRsZSB0ZXN0aW5nIG9mIGxvb3Bpbmcgb2YgbXVsdGlwbGUgdmFyYmluZHMgaW4gYSB3YWxrCisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgaW5pdGFsIHBhdGNoIHRvIHByZXZlbnQgbG9vcGluZyB3YWxrcworCisyMDEwLTA1LTI4IDIwOjUzICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGltcGxlbWVudCBjZXJ0IGxvb2t1cCBieSBmaWxlbmFtZQorCisyMDEwLTA1LTI4IDA3OjAyICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBBZGQgY29uc3QgZGVjbGFyYXRpb25zIHRvIHRoZSBkaXNhYmxlZCB2ZXJzaW9ucworICAgb2YgdGhlIGRlYnVnZ2luZyBjb2RlIGFzIHdlbGwuCisKKzIwMTAtMDUtMjggMDI6MTIgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGFkZCBwZXJzaXN0ZW5jZTsgY2hlY2sgZm9yIGNvbCBtb2RzIHdoaWxlIHJvdyBhY3RpdmUKKworMjAxMC0wNS0yOCAwMjoxMSAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0Lmg6CisKKyAgIENIQU5HRVM6IGFnZW50bGliOiBuZXcgZnVuY3Rpb25zIHRvIG1ha2Ugc3Rhc2ggcHRyIGFuZCBuZXdyb3cKKyAgIGF2YWlsYWJsZSB0bworICAgdGFibGVfZGF0YXNldCBoYW5kbGVycworICAgbm9uZXdzOiBmaXggdHlwbzsgdGFicyB0byBzcGFjZXM7IHVzZSBzaXplb2YgaW5zdGVhZCBvZiBjb25zdGFudAorCisyMDEwLTA1LTI3IDE4OjU5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBXaW4zMiBidWlsZCBmaXhlcy4KKworMjAxMC0wNS0yNyAxODoyNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgIm1ha2UgdGVzdCIgd2l0aG91dCBUQVA6Okhhcm5lc3MgKHdhcyBicm9rZW4gYnkgcjE4ODAyKS4KKworMjAxMC0wNS0yNyAxNToxNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCAKKyAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgc25tcGxpYi9sY2RfdGltZS5jLCAgIAorICAgICAgc25tcGxpYi9tZDUuYywgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncy4gTW9zdCBmaXhlcyBpbnZvbHZlZCBhZGRpbmcgdGhlCisgICAiY29uc3QiIGtleXdvcmQuCisKIDIwMTAtMDUtMjcgMTM6NTIgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmM6CkBAIC0yMTU5LDE1MCArNDA4ODIsMTM1MCBAQAogICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjk3MjU3OTogZml4ZWQgY2hlY2tpbmcgb2YKICAgIHNubXBUYXJnZXRBZGRyUm93U3RhdHVzIFNFVCByZXF1ZXN0cy4KIAotMjAxMC0wNS0yNyAwNjo0OSAgYnZhc3NjaGUKKzIwMTAtMDUtMjcgMTM6NDEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuOgorCisgICByZXZlcnQgcGFydCBvZiAxODg4NTogdGVzdCBmaWxlcyBzaG91bGQgYmUgYWJsZSB0byBiZSBydW4gYnkKKyAgIHRoZW1zZWx2ZXMgdG9vCisKKzIwMTAtMDUtMjcgMTE6MTkgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oOgorCisgICBDSEFOR0VTOiBjb3JyZWN0bHkgY2FsY3VsYXRlIGlmWFRhYmxlLmlmSENJblVjYXN0UGt0cyBvbiAzMi1iaXQKKyAgIExpbnV4CisgICAKKyAgIExpbnV4IGRvZXMgbm90IHByb3ZpZGUgc3RhbmRhbG9uZSBjb3VudGVyIGZvciBpbmNvbWluZyB1bmljYXN0CisgICBwYWNrZXRzIChpdWNhc3QpCisgICAtIGl0IHByb3ZpZGVzIGNvdW50ZXIgb2YgYWxsIHBhY2tldHMgKGlhbGwpICsgc2VwYXJhdGUgY291bnRlcgorICAgZm9yIHRoZSBtdWx0aWNhc3QKKyAgIG9uZXMgKGltY2FzdCkuIFByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mIGlmVGFibGUgcmVhZCB0aGVzZQorICAgY291bnRlcnMgYW5kCisgICBjYWxjdWxhdGVkIGl1Y2FzdCA9IGlhbGwgLSBpbWNhc3QgKmJlZm9yZSogdGhlc2UgdmFsdWVzIHdlcmUKKyAgIGV4cGFuZGVkIGludG8KKyAgIDY0Yml0cy4gVGhpcyBwcm9kdWNlZCBlcnJvcnMgb24gMzJiaXQgc3lzdGVtcyB3aGVuIGlhbGwKKyAgIG92ZXJmbG93ZWQgdG8gemVybyBhbmQKKyAgIGltY2FzdCB3YXMgbm96ZXJvIC0+IGl1Y2FzdCBnb3QgbmVnYXRpdmUgYW5kICdjNjQgMzIgYml0IGNoZWNrCisgICBmYWlsZWQnIGVycm9yIGluCisgICBzbm1wZCBsb2cuIE5vdyB0aGUgYWdlbnQgZXhwYW5kcyB0aGVzZSB2YWx1ZXMgdG8gNjRiaXRzIGZpcnN0IGFuZAorICAgKiAgICAgKnRoZW4qIHBlcmZvcm1zICAgIHRoZSBjYWxjdWxhdGlvbiwgdXNpbmcgYSBuZXcgZmxhZy4gCisgICAgICAyMDEwLTA1LTI3IDA4OjE4ICBtYWdmcgorCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCB0ZXN0aW5nL1JVTlRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ydW46CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IE1vdmUgdGhlIHNldHRpbmcgb2YgTUlCRElSUyBmcm9tIHRoZSBzdXBwb3J0CisgICBzY3JpcHQgdG8gdGhlIGRyaXZlcnMgc2luY2UgaXQgaXMgbmVlZGVkIGZvciB0aGUgQyB0ZXN0cyBhcyB3ZWxsLgorCisyMDEwLTA1LTI3IDA4OjA5ICBtYWdmcgorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IFVzZSBvbGR1Y2RfcnVuLCBub3QgcnVuX29sZHVjZC4gQ2hhbmdlIHNyY2RpcgorICAgdG8gcmVmZXIgdG8gdGhlIHRvcCBkaXJlY3RvcnkgYW5kIG5vdCB0aGUgdGVzdGluZyBzdWJkaXJlY3RvcnkgYXMKKyAgIHRoYXQgaXMgd2hhdCBpcyBleHBlY3RlZCBpbiB0aGUgdGVzdCBzY3JpcHRzLgorCisyMDEwLTA1LTI3IDA1OjE3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICB3YXJuaW5nIHNxdWFzaGluZworCisyMDEwLTA1LTI3IDA1OjE2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCBzbm1wbGliL2tleXRvb2xzLmMsICAgCisgICAgICBzbm1wbGliL2xjZF90aW1lLmM6CisKKyAgIG1vcmUgY29uc3QgY29ycmVjdG5lc3MKKworMjAxMC0wNS0yNyAwNDoxOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdGVzdHMgZm9yIGFnZW50LW5vdC1rbm93bi11c2VyLWNlcnRpZmljYXRlcworCisyMDEwLTA1LTI3IDA0OjE2ICBoYXJkYWtlcgorCisgICAqIFJFQURNRS5zbm1wdjM6CisKKyAgIHJlZmVyZW5jZSB0aGUgaXRuZXJuYWwgc3VwcG9ydCBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDUtMjcgMDQ6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsL09QRU5TU0wtTElDRU5TRSwgc25tcGxpYi9vcGVuc3NsL1JFQURNRToKKworICAgaW50ZXJuYWwgT3BlblNTTCBzdXBwb3J0IGRvY3VtZW50YXRpb24KKworMjAxMC0wNS0yNyAwNDoxNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBORVdTOiBsaWJuZXRzbm1wOiBTdXBwb3J0IGZvciBhIHN0cmVhbS1saW5lIHN0cmlwcGVkIGRvd24gdmVyc2lvbgorICAgb2YgaW50ZXJuYWwgT3BlblNTTCBzdXBwb3J0IHVzaW5nIC0td2l0aC1vcGVuc3NsPWludGVybmFsCisKKzIwMTAtMDUtMjcgMDQ6MTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jLCBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaCwgCisgICAgICAgIHNubXBsaWIvc2NhcGkuYzoKKworICAgcmVtb3ZlIG1vcmUgZGVwZW5kZW5jaWVzIGZvciBleHRlcm5hbCBvcGVuc3NsIGhlYWRlcnMKKworMjAxMC0wNS0yNyAwNDoxNSAgaGFyZGFrZXIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgc25tcGxpYi9vcGVuc3NsLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNV9sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbW9kZXMuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMsIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYS5oLCAKKyAgICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaCwgc25tcGxpYi9vcGVuc3NsX2Flc19jZmIuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9hZXNfY29yZS5jLCBzbm1wbGliL29wZW5zc2xfYWVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfY2JjX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfY2ZiMTI4LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfZGVzX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfZGVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQzMl9jb21tb24uaCwgc25tcGxpYi9vcGVuc3NsX21kNS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kNV9sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfbW9kZXMuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9uY2JjX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfc2V0X2tleS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYS5oLCBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYV9sb2NhbC5oLCBzbm1wbGliL29wZW5zc2xfc3ByLmg6CisKKyAgIG1vdmUgb3BlbnNzbCBjb2RlIGludG8gYSBzdWJkaXJlY3RvcnkKKworMjAxMC0wNS0yNyAwNDoxMyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX29sZHVjZDoKKworICAgZml4IHRlc3Rpbmcgc28gaXQgdXNlcyBtdWx0aXBsZSB0eXBlcyBvZiBjcnlwdG8KKworMjAxMC0wNS0yNyAwNDoxMyAgaGFyZGFrZXIKKworICAgKiAgYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGRlZmluaXRpb25zIGFuZCBmaWxlcyBmb3IgZG9pbmcgaW50ZXJuYWwgY3J5cHRvIHN1cHBvcnQKKworMjAxMC0wNS0yNyAwNDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGluY2x1ZGUgaW50ZXJuYWwgYWVzL2RlcyBoZWFkZXJzCisKKzIwMTAtMDUtMjcgMDQ6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2NmYjEyOC5jOgorCisgICBsb2NhbGl6ZQorCisyMDEwLTA1LTI3IDA0OjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9jZmIxMjguYywgc25tcGxpYi9vcGVuc3NsX21vZGVzLmg6CisKKyAgIGluaXRhbCBjb3BpZXMgb2YgY2ZiMTI4IG1vZGVzIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9hZXNfY29yZS5jOgorCisgICBsb2NhbGl6ZQorCisyMDEwLTA1LTI3IDA0OjExICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9hZXNfY29yZS5jLCBzbm1wbGliL29wZW5zc2xfYWVzX2xvY2FsLmg6CisKKyAgIGluaXRpYWwgdmVyc2lvbnMgb2YgYWVzX2NvcmUuYyBhbmQgYWVzX2xvY2wuaAorCisyMDEwLTA1LTI3IDA0OjEwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oOgorCisgICBpbml0aWFsIGNvcHkgb2YgYWVzLmggZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MTAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Flc19jZmIuYzoKKworICAgaW5pdGlhbCBjb3B5IG9mIHRoZSBvcGVuc3NsIGFlc19jZmIuYyBmaWxlCisKKzIwMTAtMDUtMjcgMDQ6MTAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Rlc19lbmMuYzoKKworICAgaW5jbHVkZSBsb2NhbGl6ZWQgY29waWVzIG9mIHRoZSBmaWxlcworCisyMDEwLTA1LTI3IDA0OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgdXNlIGludGVybmFsIERFUworCisyMDEwLTA1LTI3IDA0OjA5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9jYmNfZW5jLmM6CisKKyAgIGxvY2FsaXplZCBjb3B5IG9mIHRoZSBjYmNfZW5jLmMgZmlsZSBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfc3ByLmg6CisKKyAgIGRlcy9zcHIuaCBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfZGVzX2VuYy5jOgorCisgICBhZGRlZCBkZXNfZW5jLmMgZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9zaGEuaDoKKworICAgbG9jYWwgY29waWVzIG9mIHRoZSBvcGVuc3NsIGhlYWRlcnMKKworMjAxMC0wNS0yNyAwNDowNyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaDoKKworICAgaW5pdGlhbCBjb3B5IG9mIG9wZW5zc2wncyBkZXMuaAorCisyMDEwLTA1LTI3IDA0OjA3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9uY2JjX2VuYy5jLCBzbm1wbGliL29wZW5zc2xfc2V0X2tleS5jOgorCisgICBsb2NhbGl6ZWQgaGVhZGVyIGZpbGVzCisKKzIwMTAtMDUtMjcgMDQ6MDcgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvb3BlbnNzbF9kZXNfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX25jYmNfZW5jLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2V0X2tleS5jOgorCisgICBpbml0YWwgY29waWVzIG9mIHNvbWUgb2YgdGhlIG9wZW5zc2wgREVTIGZpbGVzCisKKzIwMTAtMDUtMjcgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGZpbmlzaGluZyBwb3J0aW5nIG9mIGludGVybmFsIGF1dGggc3VwcG9ydAorCisyMDEwLTA1LTI3IDA0OjA2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBpbnRlcm5hbCBjcnlwdG8gZmlsZXMgdG8gdGhlIGNoZWNrL3VzZSBsaXN0CisKKzIwMTAtMDUtMjcgMDQ6MDYgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvbWQzMl9jb21tb24uaCwgc25tcGxpYi9tZDVfbG9jbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kMzJfY29tbW9uLmgsIHNubXBsaWIvb3BlbnNzbF9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDVfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGFfbG9jYWwuaCwgc25tcGxpYi9zaGFfbG9jbC5oOgorCisgICBsb2NhbGl6ZWQgZmlsZSBuYW1lcyB3aXRoIG9wZW5zc2wgcHJlZml4ZXMKKworMjAxMC0wNS0yNyAwNDowNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oLCBzbm1wbGliL21kNV9sb2NsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQ1LmM6CisKKyAgIGxvY2FsaXplIHRoZSBtZDUgaW1wbGVtZW50YXRpb24KKworMjAxMC0wNS0yNyAwNDowNSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9vcGVuc3NsX3NoYS5oLCBzbm1wbGliL29wZW5zc2xfc2hhMS5jLCAgIAorICAgICAgc25tcGxpYi9zaGFfbG9jbC5oOgorCisgICBjb21wbGV0ZWx5IGxvY2FsaXplIHRoZSBvcGVuc3NsIFNIQSBzdXBwb3J0CisKKzIwMTAtMDUtMjcgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX3NoYS5oOgorCisgICBpbml0aWFsIHZlcmlzb24gb2Ygc2hhLmggY29weQorCisyMDEwLTA1LTI3IDA0OjA0ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL21kMzJfY29tbW9uLmgsIHNubXBsaWIvbWQ1X2xvY2wuaCwgc25tcGxpYi9vcGVuc3NsX21kNS5jLCAKKyAgICAgICAgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgc25tcGxpYi9zaGFfbG9jbC5oOgorCisgICBhZGRlZCBsb2NhbCBjb3BpZXMgb2YgdGhlIG9wZW5zc2wgY3J5cHRvIGZ1bmN0aW9ucworCisyMDEwLTA1LTI3IDA0OjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYzoKKworICAgbWFrZSB1c2Ugb2YgaW50ZXJuYWwgY3J5cHRvIGhhc2ggZnVuY3Rpb25zCisKKzIwMTAtMDUtMjcgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGNvbmZpZ3VyZSBjaGVja3MgZm9yIGludGVybmFsLWNyeXB0byBzdXBwb3J0CisKKzIwMTAtMDUtMjYgMjI6MTcgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHByb3Blcmx5IHZlcmlmeSBleHBlY3RlZCBzZXJ2ZXIgY2VydGlmaWNhdGVzIHVuZGVyIERUTFM7IGFkZCBhCisgICBuZXcgZmxhZyBpbiB0bHNiYXNlIHRvIGluZGljYXRlIHZlcmlmaWNhdGlvbiBoYXMgb2NjdXJyZWQKKworMjAxMC0wNS0yNiAyMTowMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICBjb21waWxlciB3YXJuaW5nIHNxdWFzaGluZworCisyMDEwLTA1LTI2IDIxOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCBzbm1wbGliL2xjZF90aW1lLmMsICAgCisgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyAgIGFkZCBjb25zdCBxdWFsaWZpZXJzIHRvIGEgZmV3IHBsYWNlcworCisyMDEwLTA1LTI2IDE5OjQ2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogbGlibmV0c25tcG1pYnMsIGxpYm5ldHNubXBoZWxwZXJzIGFuZAorICAgbGlibmV0c25tcGFnZW50IGRvIG5vdyBidWlsZCBhcyBhIERMTCB3aGVuIGNvbmZpZ3VyZWQgd2l0aAorICAgLS1lbmFibGUtc2hhcmVkLgorCisyMDEwLTA1LTI2IDE3OjQ3ICBidmFzc2NoZQorCisgICAqIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgorCisgICBORVdTOiBtb3ZlZCBhbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbGlibmV0c25tcGhlbHBlcnMgdG8KKyAgIGxpYm5ldHNubXBhZ2VudC4gbGlibmV0c25tcGhlbHBlcnMgaXMgbm93IGFuIGVtcHR5IGxpYnJhcnkuCisKKzIwMTAtMDUtMjYgMTc6MjAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL251bGwuYywgYWdlbnQvaGVscGVycy9vbGRfYXBpLmMsIGFnZW50L251bGwuYywgICAKKyAgICAgIGFnZW50L29sZF9hcGkuYzoKKworICAgUmV2ZXJ0ZWQgcjE4ODI5IGluIG9yZGVyIHRvIG1pbmltaXplIGRpZmZzIHdpdGggb2xkZXIgYnJhbmNoZXMuCisKKzIwMTAtMDUtMjUgMDc6MjMgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBUZWxsIG5ldC1zbm1wLWNlcnQgd2hlcmUgbmV0LXNubXAtY29uZmlnIGlzIGxvY2F0ZWQKKworMjAxMC0wNS0yNSAwNzoxNCAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIENvcnJlY3QgdGhlIHNpZ25hdHVyZSBvZiBtYWluLiBVc2UgI2luY2x1ZGUgaW5zdGVhZCBvZiBzb3VyY2luZworICAgdG8gZ2V0IHRoZSBjb2RlIHVuZGVyIHRlc3QgaW4gb3JkZXIgdG8gZ2V0IGJldHRlciBlcnJvciBtZXNzYWdlcworCisyMDEwLTA1LTI1IDA3OjExICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6CisKKyAgIEFkZCBhcmd1bWVudHMgdG8gc3ByaW50ZiBzdGF0ZW1lbnRzIHRvIG1ha2UgdGhlIHRlc3Qgd29yaworCisyMDEwLTA1LTI1IDA3OjA3ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgUmVtb3ZlIHVudXNlZCB2YXJpYWJsZXMgYW5kIGRpc2FibGVkIGNvZGUKKworMjAxMC0wNS0yNSAwNToyMCAgbWFnZnIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBTcGxpdCBzbm1wSVBCYXNlRG9tYWluIGFuZCBtb3ZlIHRoZSBJUHY0IHBhcnRzCisgICB0byBJUHY0QmFzZSBhbmQgdGhlIHNvY2tldCBnZW5lcmljIHBhcnRzIHRvIFNvY2tldEJhc2UuCisKKzIwMTAtMDUtMjQgMjA6MjQgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZzsgZmluaXNoIHRsc3RtUGFyYW1zVGFibGUgbGFzdENoYW5nZWQgc2NhbGFyCisKKzIwMTAtMDUtMjQgMTk6MjggIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZDoKKworICAgQWRkIC0tZXh0ZXJuYWwtbGlicyBpbiBvcmRlciB0byBzdXBwb3J0IGJ1aWxkaW5nIHRoZSB0ZXN0cyBvbgorICAgc29sYXJpcworCisyMDEwLTA1LTI0IDEzOjMzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgYXJnaC4uIGZpeCBmYWxsb3V0IGZyb20gbWFudWFsbHkgKG1pcylhcHBseWluZyBwYXRjaAorCisyMDEwLTA1LTI0IDEyOjU5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaDoKKworICAgZmlyc3QgcGFzcyBhdCB0bHN0bVBhcmFtc1RhYmxlCisKKzIwMTAtMDUtMjQgMTI6NTkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICB1cGRhdGUgZGVmaW5lcyB0byBtYXRjaCBNSUIgbmFtZXMsIHBlciBncmFuZC1wb29iYWgKKworMjAxMC0wNS0yNCAxMjo1OCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jOgorCisgICB1cGRhdGUgT0lEIHRvIG1hdGNoIHVwY29taW5nIFJGQworCisyMDEwLTA1LTI0IDExOjQ4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9udWxsLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9udWxsLmMsICAgCisgICAgICBhZ2VudC9vbGRfYXBpLmM6CisKKyAgIENIQU5HRVM6IGxpYm5ldHNubXBhZ2VudCwgbGlibmV0c25tcGhlbHBlcnM6IG1vdmVkIHRoZSBmdW5jdGlvbnMKKyAgIG5ldHNubXBfYnVsa190b19uZXh0X2ZpeF9yZXF1ZXN0cygpLAorICAgbmV0c25tcF9nZXRfYnVsa190b19uZXh0X2hhbmRsZXIoKSwgbmV0c25tcF9yZWdpc3Rlcl9udWxsKCksCisgICBuZXRzbm1wX3JlZ2lzdGVyX251bGxfY29udGV4dCgpIGFuZCBuZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoKQorICAgZnJvbSBsaWJuZXRzbm1waGVscGVycyB0byBsaWJuZXRzbm1wYWdlbnQuCisgICBOb3RlczoKKyAgIC0gVGhpcyBkb2VzIG5vdCBhZmZlY3QgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgZm9yIGFwcGxpY2F0aW9ucworICAgdGhhdCBsaW5rIHdpdGggJChuZXQtc25tcC1jb25maWcgLS1hZ2VudC1saWJzKSBzaW5jZSB0aGlzCisgICBpbnZvbHZlcyBsaW5raW5nIHdpdGggYm90aCBsaWJuZXRzbm1waGVscGVycyBhbmQgbGlibmV0c25tcGFnZW50LgorICAgLSBGdW5jdGlvbnMgaGF2ZSBiZWVuIG1vdmVkIGJldHdlZW4gbGlicmFyaWVzIGJ5IG1vdmluZyBlbnRpcmUKKyAgIHNvdXJjZSBmaWxlcy4KKworMjAxMC0wNS0yNCAxMDoxMCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmM6CisKKyAgIFVzZSBwcm9wZXIgc3RyaW5nIHNpemVzIGFuZCBtYWtlIHN1cmUgc3RyaW5ncyBhcmUKKyAgIHplcm8tdGVybWluYXRlZC4KKworMjAxMC0wNS0yNCAwODowMSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsIG5ldC1zbm1wLWNvbmZpZy5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogbGlibmV0c25tcCBkb2VzIG5vdyBidWlsZCBhcyBhIERMTCB3aGVuCisgICBjb25maWd1cmVkIHdpdGggLS1lbmFibGUtc2hhcmVkLgorICAgQ0hBTkdFUzogQ3lnd2luOiBwZXJsIG1vZHVsZXMgZG8gbm93IGJ1aWxkICgtLXdpdGgtcGVybC1tb2R1bGVzKS4KKyAgIE5vdGU6IHRoZSBUMDYwdHJhcGRwZXJsX29sZHVjZCwgVDA2MWFnZW50cGVybF9vbGR1Y2QgYW5kCisgICBUMTE1YWdlbnR4cGVybF9vbGR1Y2QgdGVzdHMgc3RpbGwgZmFpbC4KKworMjAxMC0wNS0yMyAyMzowNiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICB1cGRhdGUgZmlsZW5hbWVzL3BhdHNoIGZvciByZWNlbnQgZmlsZSByZW5hbWVzOyBmaXggdHlwb3MKKworMjAxMC0wNS0yMyAyMjowOCAgbWFnZnIKKworICAgKiAgbmV0LXNubXAtY29uZmlnLmluLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgdGhlIHNhbWUgY29tcGlsZXIgY29tbWFuZCBhbmQgZmxhZ3MgZm9yCisgICBidWlsZGluZyBvZiB0ZXN0cyBhcyBmb3IgYnVpbGRpbmcgb2YgdGhlIGNvZGUsIHRodXMgZW5hYmxpbmcgdGVzdAorICAgb2YgZS5nLiAzMi1iaXQgY29kZSBjb21waWxlZCBvbiBhIDY0LWJpdCBwbGF0Zm9ybS4KKworMjAxMC0wNS0yMyAyMTo0MSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICB1cGRhdGUgaW5jbHVkZS9jb25maWcgZmlsZS9wYXRocyBmb3IgcmVjZW50IHJlbmFtZXMKKworMjAxMC0wNS0yMyAyMTozMSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaCwgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICByZW5hbWUgZmlsZXMgZm9yIE1JQiByZW5hbWVzCisKKzIwMTAtMDUtMjMgMjE6MjUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGU6CisKKyAgIHJlbmFtZSBkaXJlY3RvcmllcyB0byBtYXRjaCByZW5hbWVzIGluIE1JQgorCisyMDEwLTA1LTIwIDA4OjQ4ICBidmFzc2NoZQorCisgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgU3dhcHBlZCBsaW5rIG9yZGVyIG9mIC1sbmV0c25tcGhlbHBlcnMgLWxuZXRzbm1wbWliczogbmV0c25tcG1pYnMKKyAgIGRlcGVuZHMgb24gbmV0c25tcGhlbHBlcnMgYW5kIG5vdCB0aGUgb3RoZXIgd2F5IGFyb3VuZC4KKworMjAxMC0wNS0yMCAwODo0MiAgYnZhc3NjaGUKKworICAgKiAgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYzoKKworICAgRml4ZWQgbW9yZSBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNS0xOSAxODoyNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHN0YXNoaW5nCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYzoKKworICAgb3V0cHV0IGZpbGVuYW1lcyBvZiBmYWlsZWQgdGVzdHMKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgd2lwZSB0cmFpbGluZyBjb21tZW50IEMgbWFya2VyIGlmIGl0IGV4aXN0cworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAyMGhhc2h0ZXN0c19jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICB0aXRsZSB0aGUgU05NUHYzIHRlc3RzCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCB0ZXN0aW5nIG9mIGJ1aWx0IHRpdGxlcworCisyMDEwLTA1LTE5IDE4OjI0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBvbmx5IHByaW50IGZhaWx1cmUgaGVhZGVyIGlmIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUKKworMjAxMC0wNS0xOSAxODoyNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZDoKKworICAgbWFrZSBkZXNjcmlwdGl2ZSB0aXRsZXMgd29yayBhZ2FpbgorCisyMDEwLTA1LTE5IDE4OjI0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jbGliLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICByZW5hbWUgZmlsZXMgc28gcHJlZml4aW5nIGlzIGJhc2VkIG9uIHRoZSBzdWl0ZSBuYW1lLCBub3QgZmlsZQorICAgdHlwZQorCisyMDEwLTA1LTE5IDE3OjUyICBidmFzc2NoZQorCisgICAqICBwZXJsL0FTTi9NYWtlZmlsZS5QTCwgcGVybC9NYWtlZmlsZS5QTCwgcGVybC9NYWtlZmlsZS5zdWJzLnBsLCAgIAorICAgICAgcGVybC9PSUQvTWFrZWZpbGUuUEwsIHBlcmwvU05NUC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBDeWd3aW46IHBlcmw6IGJ1aWxkaW5nIHRoZSBQZXJsIG1vZHVsZXMgd2l0aCB0aGUgQ3lnd2luCisgICBQZXJsIHBhY2thZ2UgaXMgbm93IHBvc3NpYmxlLgorICAgKEZvcndhcmQtcG9ydGVkIHIxODY4OCBmcm9tIHRoZSBWNS41IGJyYW5jaC4pCisKKzIwMTAtMDUtMTkgMTc6NTAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jOgorCisgICBGaXhlZCB5ZXQgYW5vdGhlciBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA1LTE5IDEyOjA1ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmM6CisKKyAgIEZpcnN0LWRyYWZ0IHN1cHBvcnQgZm9yIEFJWCBmaWxlc3lzdGVtIEhBTCBtb2R1bGUgKHVudGVzdGVkKQorCisyMDEwLTA1LTE5IDExOjI1ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYzoKKworICAgU3VwcG9ydCBmb3IgU29sYXJpcy1zdHlsZSAnZ2V0bW50ZW50JyBBUEkuCisKKzIwMTAtMDUtMTkgMDk6NTcgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaDoKKworICAgU2ltcGxpZnkgdGhlIGhhbmRsaW5nIG9mIHVua25vd24vdW53YW50ZWQgZmlsZSBzeXN0ZW1zLgorCisyMDEwLTA1LTE5IDA5OjMwICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIEZpeCBtaXNzaW5nL2Jyb2tlbiBBUEkgZGVjbGFyYXRpb25zLgorCisyMDEwLTA1LTE5IDA4OjQ2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgTWFkZSBlcnJvciBtZXNzYWdlcyBtb3JlIGNsZWFyIGluIGNhc2Ugb2YgZmFpbHVyZSBvciB3cm9uZworICAgaW52b2NhdGlvbi4KKworMjAxMC0wNS0xOSAwMDowMSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGFkZGVkIHRlc3QgZm9yIHVzaW5nIGEgY2VydGlmaWNhdGUgc2lnbmVkIGJ5IGEgQ0EgY2VydGlmaWNhdGUKKworMjAxMC0wNS0xOCAyMzozMSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIG1ha2Ugc3VyZSB3ZSBjYWxsIHRoZSByaWdodCBQZXJsCisKKzIwMTAtMDUtMTggMjA6MzkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBpbmNsdWRlIGxvY2FsIHBvcnQgbnVtYmVyIGluIHBhY2tldCBkdW1wcy4gQW4KKyAgIGV4YW1wbGU6CisgICAKKyAgIFJlY2VpdmVkIDM2IGJ5dGUgcGFja2V0IGZyb20gVURQOgorICAgWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEKKyAgIDAwMDA6IDMwIDIyIDAyIDAxIDAxIDA0IDA2IDcwIDc1IDYyIDZDIDY5IDYzIEExIDE1IDAyCisgICAwIi4uLi4ucHVibGljLi4uCisgICAwMDE2OiAwNCAzNyBGMiBENCA5QiAwMiAwMSAwMCAwMiAwMSAwMCAzMCAwNyAzMCAwNSAwNgorICAgLjcuLi4uLi4uLi4wLjAuLgorICAgMDAzMjogMDEgMDEgMDUgMDAgLi4uLgorICAgCisgICBSZWNlaXZlZCBTTk1QIHBhY2tldChzKSBmcm9tIFVEUDoKKyAgIFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxCisgICBHRVRORVhUIG1lc3NhZ2UKKyAgIC0tIGNjaXR0LjEKKyAgIAorICAgU2VuZGluZyAxMTggYnl0ZXMgdG8gVURQOiBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MQorICAgMDAwMDogMzAgNzQgMDIgMDEgMDEgMDQgMDYgNzAgNzUgNjIgNkMgNjkgNjMgQTIgNjcgMDIKKyAgIDB0Li4uLi5wdWJsaWMuZy4KKyAgIDAwMTY6IDA0IDM3IEYyIEQ0IDlCIDAyIDAxIDAwIDAyIDAxIDAwIDMwIDU5IDMwIDU3IDA2CisgICAuNy4uLi4uLi4uLjBZMFcuCisgICAwMDMyOiAwOCAyQiAwNiAwMSAwMiAwMSAwMSAwMSAwMCAwNCA0QiA0QyA2OSA2RSA3NSA3OAorICAgLisuLi4uLi4uLktMaW51eAorICAgMDA0ODogMjAgNjEgNzMgNzUgNzMgMjAgMzIgMkUgMzYgMkUgMzMgMzMgMkUgMzIgMkQgNzMgYXN1cworICAgMi42LjMzLjItcworICAgMDA2NDogNjMgNzMgNzQgMjAgMjMgMzEgMjAgNTMgNEQgNTAgMjAgNTAgNTIgNDUgNDUgNEQgY3N0ICMxIFNNUAorICAgUFJFRU0KKyAgIDAwODA6IDUwIDU0IDIwIDUzIDYxIDc0IDIwIDQxIDcwIDcyIDIwIDMzIDIwIDMyIDMxIDNBIFBUIFNhdCBBcHIKKyAgIDMgMjE6CisgICAwMDk2OiAzMSAzMCAzQSAzNSAzOCAyMCA0MyA0NSA1MyA1NCAyMCAzMiAzMCAzMSAzMCAyMCAxMDo1OCBDRVNUCisgICAyMDEwCisgICAwMTEyOiA3OCAzOCAzNiA1RiAzNiAzNCB4ODZfNjQKKworMjAxMC0wNS0xOCAxOTo0MiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0bHN0bUFkZHJUYWJsZQorICAgLSBkZWFsIHdpdGggaGFzaCB0eXBlIHByb3Blcmx5IGZvciBnZXQvc2V0IGFuZCBwZXJzaXN0ZW5jZQorICAgLSBhZGQgY291bnQgYW5kIGxhc3QgY2hhbmdlZCBzY2FsYXJzCisKKzIwMTAtMDUtMTggMTk6MDggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jOgorCisgICB1cGRhdGUgdG8gb2ZmaWNhbCBPSUQgZnJvbSB1cGNvbWluZyByZmMKKworMjAxMC0wNS0xOCAxNjoxNiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgdG8gb2ZmaWNpYWwgT0lEcyBmcm9tIHVwY29taW5nIFJGQzsgYWRkIGNvdW50L2xhc3QgY2hhbmdlZAorICAgc2NhbGFycworCisyMDEwLTA1LTE4IDE0OjU2ICBkdHMxMgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDIwMDE2NTY6IEhhbmRsZSBudWxsLXRlcm1pbmF0aW9uIG9mCisgICBzdHJpbmcgdmFsdWVzIHByb3Blcmx5LgorICAgQmFzZWQgb24gdGhlIHByaW5jaXBsZXMgb2YgdGhlIHBhdGNoIGZyb20gVG9tbXkgQmVhZGxlLgorCisyMDEwLTA1LTE4IDE0OjM4ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW50dHlwZXMuaCwgYWdlbnQvbWliZ3JvdXAvaG9zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIFdvcmtpbmcoPykgSEFMLWJhc2VkIHZlcnNpb24gb2YgaHJGU1RhYmxlLgorCisyMDEwLTA1LTE4IDE0OjEyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDEwLTA1LTE3IDIxOjAzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oOgorCisgICB1c2UgcHJvcGVyIFRTTSBzZWN1cml0eSBjb2RlICg0KSBub3cgdGhhdCBpdCdzIG9mZmljaWFsCisKKzIwMTAtMDUtMTcgMTg6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIGJlZ2lubmluZyBvZiBhIGNvbnRhaW5lciB1bml0IHRlc3QKKworMjAxMC0wNS0xNyAxODo0MyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oOgorCisgICBhIGJhc2ljIEMtY29kZSBiYXNlZCB0ZXN0IHJlcG9ydGluZyBtZWNoYW5pc20KKworMjAxMC0wNS0xNyAxODo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMWRlZmF1bHRzdG9yZV9jbGliLmM6CisKKyAgIGJhc2ljIGRlZmF1bHRfc3RvcmUgdGVzdHMKKworMjAxMC0wNS0xNyAxODo0MiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NsaWI6CisKKyAgIGEgYnVpbGQgc3lzdGVtIGZvciBiYXNpYyBsaWJuZXRzbm1wIHRlc3RzCisKKzIwMTAtMDUtMTcgMTg6MTQgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBmaXggZmluZ2VycHJpbnQgYmluL2hleCBjb252ZXJzaW9uOyBhZGQvcmVtb3ZlIGNlcnQgc2VjIG1hcHMgdmlhCisgICBtaWIgbm93IHdvcmtzCisKKzIwMTAtMDUtMTcgMTg6MTMgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIG5ldyBmdW5jdGlvbiBuZXRzbm1wX2JpbmFyeV90b19oZXgKKworMjAxMC0wNS0xNyAxODoxMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZwcmludGYoc3RkZXJyIC0+IERFQlVHTVNHVEwoKAorCisyMDEwLTA1LTE3IDE4OjEyICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3ZlIGNoZWNrIGZvciBoYXNoIHR5cGUKKworMjAxMC0wNS0xNyAxNjozNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBtYWtlIFJVTlRFU1RTIHdvcmsgb3V0c2lkZSB0aGUgc291cmNlZGlyCisKKzIwMTAtMDUtMTcgMTU6MzcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5URVNUUzoKKworICAgbWFkZSBhIGxpbWl0ZWQgcnVuIHRlc3QgcG9zc2libGUgYWdhaW4gd2l0aG91dCBwZXJsCisKKzIwMTAtMDUtMTcgMTU6MzIgIGR0czEyCisKKyAgICogIHdpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaCwgd2luMzIvbWliX21vZHVsZV9pbml0cy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3A6CisKKyAgIFVzZSBuZXdlciBEaXNNYW4gRXZlbnQgTUlCIGNvZGUgZm9yIE1TVkMtYmFzZWQgYnVpbGRzCisgICAoaW4gbGluZSB3aXRoIGFsbCBjb25maWd1cmUtYmFzZWQgYnVpbGRzKQorCisyMDEwLTA1LTE3IDE1OjIzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBtb3ZlIHRoZSByZXR1cm4gb3V0c2lkZSB0aGUgaWYgc3RhdGVtZW50CisKKzIwMTAtMDUtMTcgMTU6MTggIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg6CisKKyAgIFByb3ZpZGUgbWlzc2luZyBwdWJsaWMgaW50ZXJmYWNlIHRvIEhBTC1iYXNlZCBmaWxlc3RvcmUgbW9kdWxlLgorCisyMDEwLTA1LTE3IDEwOjQxICBidmFzc2NoZQorCisgICAqIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgRm9sbG93LXVwIGZvciByMTg3NTQgKHJldmVydCByMTg3MzgpOiByMTg3NTQgb25seSBwYXJ0aWFsbHkKKyAgIHJldmVydGVkIHIxODczOAorICAgYW5kIGhlbmNlIGJyb2tlIHRoZSBXaW4zMi1idWlsZC4gRmluaXNoZWQgcmV2ZXJzYWwgb2YgcjE4NzM4IGJ5CisgICByZXN0b3JpbmcKKyAgIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaC4KKworMjAxMC0wNS0xNiAxODoxNyAgYnZhc3NjaGUKKworICAgKiBsdG1haW4uc2g6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4NzI2OiBvbmx5IHBhc3MgLWZzdGFjay1wcm90ZWN0b3IqIGZsYWdzIHRvIHRoZQorICAgbGlua2VyIGluc3RlYWQgb2YgYWxsIC1mKiBmbGFncyBzdWNoIHRoYXQgaXQgYmVjb21lcyBsZXNzIGxpa2VseQorICAgdGhhdCB0aGlzIG1vZGlmaWNhdGlvbiBjYXVzZXMgdHJvdWJsZSB3aXRoIG5vbi1HTlUgdG9vbGNoYWlucy4KKworMjAxMC0wNS0xNiAxODoxNCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkOgorCisgICBNYWRlIHNoZWxsIGNvZGUgZm9yIGNvbnZlcnRpbmcgYSByZWxhdGl2ZSBwYXRoIHRvIGFuIGFic29sdXRlCisgICBwYXRoIG1vcmUKKyAgIHJvYnVzdCBhbmQgY29udmVydGVkICIkey4uLiMuLi59IiBjb25zdHJ1Y3QgaW50byBlY2hvICsgY3V0LgorCisyMDEwLTA1LTE2IDE4OjEyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgTW9yZSBVU0lOR19VQ0RfU05NUF9FWFRFTlNJQkxFX01PRFVMRSB0bworICAgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFIHN1YnN0aXR1dGlvbnMsIG5lY2Vzc2FyeSB0byBtYWtlCisgICB0ZXN0IDA1OSBhbmQgMDY1IHBhc3MuCisKKzIwMTAtMDUtMTYgMTc6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgZml4IHRlc3RzIGZvciBjaGVja2luZyBzaHV0ZG93biBvZiBhcHBsaWNhdGlvbnMgdG8gbm90IHJlcG9ydAorICAgZmFsc2UgbmVnYXRpdmVzCisKKzIwMTAtMDUtMTYgMTI6MTUgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZDoKKworICAgTWFkZSB0ZXN0IFQwNTkgcGFzcyBhZ2Fpbi4gVGhpcyB0ZXN0IHdhcyByZWNlbnRseSBicm9rZW4gYnkKKyAgIHBhc3NpbmcgYXJndW1lbnRzIHRvIGl0IHdpdGggYWJzb2x1dGUgcGF0aHMgaW5zdGVhZCBvZiByZWxhdGl2ZQorICAgcGF0aHMuCisKKzIwMTAtMDUtMTYgMTI6MTQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfb2xkdWNkOgorCisgICBBZGRlZCAnU0tJUElGTk9UIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRScuCisKKzIwMTAtMDUtMTYgMTE6NDIgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgRml4ZWQgc2V2ZXJhbCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTA1LTE2IDExOjQxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYXBwcy9zc2h0b3NubXAuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBpbiBvbGQgY29kZS4KKworMjAxMC0wNS0xNiAwOTo1OSAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKIAotICAgQ0hBTkdFUzogd2luRXh0RExMOiBjb252ZXJ0IGFzc2VydCgpIHN0YXRlbWVudHMgaW50bwotICAgbmV0c25tcF9hc3NlcnQoKSBzdGF0ZW1lbnRzLgorICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogZG9uJ3QgdHJpZ2dlciBhIG5ldHNubXBfYXNzZXJ0KCkgd2hlbgorICAgbm8gZXh0ZW5zaW9uIERMTHMgaGF2ZSBiZWVuIGxvYWRlZC4KIAotMjAxMC0wNS0yMyAyMTowNyAgZHRzMTIKKzIwMTAtMDUtMTUgMTc6MzEgIHRhbmRlcnMKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgc3RvcC1nYXAgZml4IHRvIHVuYnJlYWsgIm1ha2UgdGVzdCIgZm9yIHRoZSBuaWdodGx5IGJ1aWxkcwogCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1DaGFuZ2VzOiBWNS40LjIgLT4gVjUuNC4zCisyMDEwLTA1LTE1IDEwOjU5ICBidmFzc2NoZQogCi0yMDEwLTA1LTIzIDIwOjQyICBkdHMxMgorICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgUmV2ZXJ0ZWQgcjE4NzI3IGJlY2F1c2UgaXQgY2F1c2VkIGJ1aWxkIGVycm9ycyBvbiBTb2xhcmlzLCBBSVgKKyAgIGFuZCBIUC1VWC4KIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKzIwMTAtMDUtMTUgMDA6NDIgIGhhcmRha2VyCiAKLTIwMTAtMDUtMjMgMjA6MzkgIGR0czEyCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgd2luMzIvYnVpbGQucGw6CiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgcmV2ZXJ0IHIxODczOCBzaW5jZSBuZXcgdHJhbnNwb3J0IHJlcXVpcmUgZHluYW1pY2x5IGJ1aWx0IGhlYWRlcgorICAgZmlsZXMKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisyMDEwLTA1LTE1IDAwOjQwICBoYXJkYWtlcgogCi0yMDEwLTA1LTE0IDEyOjQ2ICBkdHMxMgorICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICBsb2cgZW52IHZhcmlhYmxlcyB1c2VkIHRvIHRoZSBpbnZva2VkIGZpbGUKIAotICAgdmVyc2lvbiB1cGRhdGUKKzIwMTAtMDUtMTQgMjE6MjkgIGhhcmRha2VyCiAKLTIwMTAtMDUtMTQgMTI6NDEgIGR0czEyCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKIAotICAgKiBDaGFuZ2VMb2c6CisgICBmaXggc2NyaXB0IHNvIGl0IGNhbiBiZSBpbnZva2VkIG91dHNpZGUgdGhlIHRlc3QgZW52aXJvbm1lbnQKKyAgIGFnYWluCiAKLSAgIHZlcnNpb24gdXBkYXRlCisyMDEwLTA1LTE0IDIxOjI4ICBoYXJkYWtlcgogCi0yMDEwLTA1LTE0IDEyOjI4ICBkdHMxMgorICAgKiBtaWJzL1NOTVAtVExTLVRNLU1JQi50eHQ6CiAKLSAgICogc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisgICBhZGRlZCB0aGUgU05NUC1UTFMtVE0tTUlCIHdpdGggZmluYWwgSUFOQSBhc3NpZ25tZW50IHNsb3RzCiAKLSAgIG1ha2UgZGVwZW5kCisyMDEwLTA1LTE0IDIxOjI3ICBoYXJkYWtlcgogCi0yMDEwLTA1LTE0IDEyOjE5ICBkdHMxMgorICAgKiBzbm1wbGliL3NubXB0c20uYzoKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgIHVzZSBmaW5hbCBJQU5BIGFzc2lnbmVkIFRTTSBwcmVmaXhlcwogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorMjAxMC0wNS0xNCAyMToyNiAgaGFyZGFrZXIKIAotMjAxMC0wNS0xNCAxMjoxMCAgZHRzMTIKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaDoKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgdXNlIGZpbmFsIElBTkEgYXNzaWduZWQgRG9tYWluIG51bWJlcnMKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisyMDEwLTA1LTE0IDIxOjI1ICBoYXJkYWtlcgogCi0yMDEwLTA1LTExIDE3OjI2ICBidmFzc2NoZQorICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzZXQgZGVmYXVsdCB2ZXJzaW9uIGFuZCBzZWNsZXZlbCBpZiB0bHMvZHRscworCisyMDEwLTA1LTE0IDE1OjI1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hlY2sgcmMgZnJvbSBzZWNuYW1lIG1hcHBpbmc7IGNsYXJpZnkgY29tbWVudAorCisyMDEwLTA1LTE0IDE1OjIyICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBkb24ndCB1c2UgdW5zb3J0ZWQgY29udGFpbmVyOyBkb24ndCBmcmVlIGNhbGxlcidzIGNvbnRhaW5lcgorCisyMDEwLTA1LTE0IDE1OjIyICByc3RvcnkKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgYWRkIGxpbmVhcl9zZWFyY2ggZm9yIHVuc29ydGVkIGNvbnRhaW5lcnMKKworMjAxMC0wNS0xNCAxMTo1NiAgYnZhc3NjaGUKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHdpbjMyL2J1aWxkLnBsLCB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIEltcHJvdmVkIHBvcnRhYmlsaXR5IGJ5IHJlbW92aW5nIHRoZSBnZW5lcmF0ZWQgZmlsZQorICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmguCisgICBDb21tZW50ZWQgb3V0IHRoZSBjb2RlIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGZvciBnZW5lcmF0aW5nCisgICB0aGlzIGhlYWRlciBmaWxlLgorICAgQWRkZWQgY29uZmlndXJlLXRpbWUgY29kZSBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgY29uc3RydWN0b3JzCisgICBmb3IgYWxsIGNvbmZpZ3VyZWQKKyAgIHRyYW5zcG9ydHMgYXJlIGludm9rZWQgZnJvbSBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMuCisKKzIwMTAtMDUtMTQgMTE6MDAgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBEb2N1bWVudGF0aW9uOiB1cGRhdGVkIEN5Z3dpbiBidWlsZCBpbnN0cnVjdGlvbnMuCisKKzIwMTAtMDUtMTQgMDk6MTUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCAgCisgICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDUtMTQgMDg6NTAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQWRkZWQgLW5vLXVuZGVmaW5lZCBmbGFnIHRvIGxpYnJhcnkgbGluayBjb21tYW5kcyBzdWNoIHRoYXQKKyAgIGxpYnRvb2wgY2FuIGJ1aWxkIERMTHMgb24gV2luMzIuCisgICBOb3RlOiBidWlsZGluZyBETExzIG9uIFdpbjMyIGRvZXMgbm90IHlldCB3b3JrIGJlY2F1c2Ugb2YgdGhlCisgICBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KKyAgIGxpYm5ldHNubXBoZWxwZXJzIGFuZCBsaWJuZXRzbm1wYWdlbnQKKyAgIChzZWUgYWxzbworICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvTGlicmFyeV9sYXllcmluZykuCisKKzIwMTAtMDUtMTQgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogbHRtYWluLnNoOgorCisgICBsaWJ0b29sIGJ1ZyBmaXg6IGFsc28gcGFzcyBmbGFncyBzdGFydGluZyB3aXRoIC1mIHRvIHRoZSBsaW5rZXIKKyAgIHNpbmNlIHRoZXNlIGNhbiBhZmZlY3QgbGlua2luZy4gVGhlIGZsYWcgLWZzdGFjay1wcm90ZWN0b3IgZS5nLgorICAgdHJpZ2dlcnMgaW5jbHVzaW9uIG9mIGxpYnNzcC4KKworMjAxMC0wNS0xNCAwODo0MCAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBhYm9ydCBpZiB0aGUgZmlsZSBwcm9ncmFtIGNvdWxkIG5vdCBiZSBmb3VuZCwKKyAgIHNpbmNlIHRoaXMgaXMgZXNzZW50aWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uIG9mIGxpYnRvb2wuCisgICBDSEFOR0VTOiBDeWd3aW46IG5laXRoZXIgY29tcGlsZSBub3IgbGluayB3aW5waXBlLmMuCisKKzIwMTAtMDUtMTMgMDg6NTggIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSYW4gYXV0b3JlY29uZi4KKworMjAxMC0wNS0xMiAyMDoxNiAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBMaW51eDogYnVpbGRzIGFnYWluIHdpdGggZW1iZWRkZWQgUGVybCBkaXNhYmxlZCAoYnVnCisgICAyOTg1OTE1KS4KKworMjAxMC0wNS0xMiAxOTo0NyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODY4NDogdW4tYnJlYWsgdGhlIFdpbjMyIE1TVkMgYnVpbGQuCisKKzIwMTAtMDUtMTIgMTk6NDMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBXaW4zMjogZml4ZWQgYSB0eXBvIGFuZCBtYWRlIGluZGVudGF0aW9uIGNvbnNpc3RlbnQuCisKKzIwMTAtMDUtMTIgMTk6MTEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNvbnN0cnVjdCB0ZW1wIGJ1aWxkIGZpbGVzIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5CisKKzIwMTAtMDUtMTIgMTk6MTAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCByZWNlbnRseSBicm9rZW4gb2xkIHBlcmwgZnVuY3Rpb25hbGl0eQorCisyMDEwLTA1LTEyIDE4OjAxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZGVkIGEgLS1zaG9ydCBvcHRpb24gdG8gc2hvcnRlbiB0aGUgc2hvdyBvdXRwdXQgdG8gbWluaW1hbGlzdGljCisKKzIwMTAtMDUtMTIgMTQ6MTQgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBhIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIuCisKKzIwMTAtMDUtMTIgMTM6MDIgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBtZW1vcnkgbGVhayB3aGVuIHJlYWRpbmcgc2Vuc29ycyBmb3IKKyAgIExNLVNFTlNPUlMtTUlCLgorCisyMDEwLTA1LTEyIDEyOjU3ICBkdHMxMgogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CiAKLSAgIEJ1aWxkcyBhZ2FpbiB3aXRoIHRoZSBNaWNyb3NvZnQgVmlzdWFsIEMgY29tcGlsZXJzLCB3aGljaCBkbyBub3QKLSAgIHJlY29nbml6ZSB0aGUgQzk5IFVMTCBzdWZmaXguCisgICBSZXZlcnQgcmV2aXNpb24gMTg2ODkKKyAgIExhdGVzdCBXaW4zMiBidWlsZHMgaW5jbHVkZSBzdXBwb3J0IGZvciBzdHJ0b3VsbC4KKworMjAxMC0wNS0xMiAxMjowNSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBhZGRlZCBkZXRlY3Rpb24gb2YgbG1fc2Vuc29ycyB2ZXJzaW9uLgorICAgSSBhbSBub3QgQXV0b2NvbmYgZ3VydSwgc28gSSBob3BlIEkgZ290IGl0IHJpZ2h0LiBUaGUgZ29hbCBpcyB0bworICAgZGVmaW5lIE5FVFNOTVBfVVNFX1NFTlNPUlNfVjMgKmJlZm9yZSogY29uZmlnX21vZHVsZXNfYWdlbnQKKyAgIHByb2Nlc3NlcyBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmguCisKKzIwMTAtMDUtMTIgMDc6MDMgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBtaXNzaW5nIGRlcGVuZGVuY2llcyBiZXR3ZWVuIHRyYW5zcG9ydHMuCisKKzIwMTAtMDUtMTIgMDM6MDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCB0aXRsZSBnZW5lcmF0aW9uIGFmdGVyIGNoYW5nZSB0byB3aGF0IHNyY2RpciBtZWFudAorCisyMDEwLTA1LTEyIDAyOjMwICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHVuZG8gbGFzdCBjaGFuZ2Ugd2hpY2ggdHVybmVkIG91dCB0byBvbmx5IGNhdXNlIGVycm9ycyBpZiB5b3UgaGFkCisgICBhIG9sZCAuY29uZiBmaWxlIGFyb3VuZAorCisyMDEwLTA1LTEyIDAyOjEzICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCB2M19jYSBjcmVhdGlvbiBleHRlbnNpb24gbmFtZQorCisyMDEwLTA1LTEyIDAyOjA1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBrZWVwIGZvcm1hdCB2ZXJzaW9uICMgaW4gY2VydCBpbmRleGVzOyBkb24ndCBzdG9yZSBoYXNoIHR5cGUKKyAgIHN0cmluZyBpbiBpbmRleDsKKworMjAxMC0wNS0xMiAwMjowNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgZml4IGludmVydGVkIGNvbnZlcnNpb24gY2FsbDsgbGVzcyB2ZXJib3NlIGRlZmF1bHQgZGVidWcKKworMjAxMC0wNS0xMiAwMjowNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgZml4IHBhcnNpbmcgb2YgLVQgbmFtZS92YWx1ZSBwYWlycworCisyMDEwLTA1LTExIDIzOjMzICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGJ1ZyBmaXhpbmcgYW5kIGJldHRlciBlcnJvciBtZXNzYWdlcyBmb3IgIm1ha2UgdGVzdCIgd2l0aAorICAgVGVzdDo6SGFybmVzcworICAgKHN0aWxsIGRvZXNuJ3Qgd29yayBmb3IgbWUsIHRob3VnaCkKKworMjAxMC0wNS0xMSAyMjozNCAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBEbyBOT1QgaGFyZGNvZGUgL3Vzci9iaW4vcGVybCBhcyB0aGUgUGVybCBwYXRoCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBzdGFzaCBmaWxlIGhhbmRsaW5nCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGxvbmcgb3B0aW9ucyBzdWNrIDstKS4gcHJlZmVyIGRvdWJsZSBkYXNoZXMgZm9yIGxvbmcgb3B0aW9ucyB0bworICAgbWF0Y2ggdGhlIHJlc3Qgb2YgdGhlIE5ldC1TTk1QIGNvZGUgYmFzZQorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBhZGRlZCBhYmlsaXR5IHRvIHJ1biBvbmx5IHRoZSBmYWlsZWQgdGVzdHMgZnJvbSB0aGUgbGFzdCBydW4KKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZG9uJ3QgZm9yY2UgY29sb3IKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY2xlYW51cCBvZiBvbGRlcgorCisyMDEwLTA1LTExIDIwOjE1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBNaW5pbWFsbHkgc3VwcG9ydCB0aGUgb2xkZXIgVGVzdDo6SGFybmVzcyBwZXJsIG1vZHVsZSBmb3IgcnVubmluZworICAgdGhlIG9sZGVyIHRlc3RzIGF0IGxlYXN0CisKKzIwMTAtMDUtMTEgMjA6MTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzZXQgYSBkZWZhdWx0IHNlY3VyaXR5TmFtZSBhbmQgc2VjdXJpdHlNb2RlbCBpZiBUTFMgb3IgRFRMUyBpcyBpbgorICAgdXNlIG9uIHRoZSBjbGllbnQgc2lkZQorCisyMDEwLTA1LTExIDIwOjE1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jOgorCisgICBhbGxvdyBzZWN1cml0eSBtb2RlbHMgdG8gcGVyZm9ybSBtb3JlIG9mIHRoZSBzZXNzaW9uIHNldHVwOyBtb3ZlZAorICAgbW9yZSBVU00gc3BlY2lmaWMgc2V0dXAgaW50byBpdCdzIHNldHVwIHJvdXRpbmUKKworMjAxMC0wNS0xMSAxODowMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBwYXJhbSB0byBsb29rdXAgcGVlciBjZXJ0CisKKzIwMTAtMDUtMTEgMTY6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgYWxsb3cgJy0nIGluIGZxZG47IGFkZCBkZWJ1ZyBvdXRwdXQgZm9yIGhvc3Qgc3BlY2lmaWMgY29uZmlnCiAKIDIwMTAtMDUtMTEgMTU6NDYgIGR0czEyCiAKLSAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKIAogICAgRW5zdXJlICduZXRzbm1wX3JlYWRfbW9kdWxlJyBpcyBhdmFpbGFibGUgZm9yIHBlcmwgYnVpbGQuCiAKQEAgLTIzMTIsMTIgKzQyMjM1LDIxNyBAQAogCiAgICBGaXggcGVybCBidWlsZCB1bmRlciBXaW5kb3dzIChzdHJ0b3VsbCBub3QgYXZhaWxhYmxlKQogCi0yMDEwLTA1LTA5IDE2OjM0ICBidmFzc2NoZQorMjAxMC0wNS0xMCAwNzowNyAgbWFnZnIKIAotICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaDoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jOgogCi0gICBDSEFOR0VTOiBDeWd3aW46IEJVRzogMjk5NzQ5MjogYnl0ZSBvcmRlciBvZiB1ZHBMb2NhbFBvcnQgaXMgbm93IGNvcnJlY3QKLSAgIChCYWNrcG9ydGVkIHIxODA3NCBmcm9tIHRydW5rLikKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBtaXNzaW5nIHN5bWJvbCBuZXRzbm1wX3NubXBTU0hEb21haW5fbGVuLAorICAgbWFrZSBuZXRzbm1wX3NubXBTU0hEb21haW4gY29uc3QuCisKKzIwMTAtMDUtMDkgMjI6MDMgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkOgorCisgICBEbyBub3QgcmVxdWlyZSBxdW90ZXMgYXJvdW5kIHRoZSBDUFUgc3RyaW5nIGFzIHRoYXQgZGVwZW5kcyBvbgorICAgaG93IHRoZSBhZ2VudCBpcyBjb25maWd1cmVkLgorCisyMDEwLTA1LTA5IDIxOjQzICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEV4dHJhY3QgdGhlIEV4aXQgYW5kIHJlc3RhcnQqIHN1YnJvdXRpbmVzIGZyb20KKyAgIHV0aWxfZnVuYyBpbiBvcmRlciB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGxlc3MgY29kZSBmb3IgdGhlCisgICBtaW5pbWFsIGNhc2UuCisKKzIwMTAtMDUtMDkgMTY6NDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbgorICAgZ2V0X2V4ZWNfb3V0cHV0KCkgcmV0dXJucyBhIHZhbHVlIHdoZW4gdGhlIHByZXByb2Nlc3NvciBzeW1ib2wKKyAgIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFIGhhcyBub3QgYmVlbiBkZWZpbmVkLgorCisyMDEwLTA1LTA5IDE2OjQ1ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGJ1aWxkcyBub3cgYWxzbyB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlCisgICBsb2NhdGVkIG9uIGEgU2FtYmEgZmlsZXN5c3RlbSBpbnN0ZWFkIG9mIGEgbG9jYWwgZmlsZXN5c3RlbS4KKworMjAxMC0wNS0wOSAxMzowNSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBDb3JyZWN0IHRoZSBpZiB0aGF0IHRyaWVzIHRvIGZpZ3VyZSBvdXQgaWYgYSBzdWZmaWNpZW50bHkgbmV3IGdjYworICAgaXMgaW4gdXNlLgorCisyMDEwLTA1LTA5IDEyOjUwICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENoZWNrIGZvciB0aGUgbmVlZGVkIG1vZHVsZSBhbmQgbm90IHNvbWUgb3RoZXIgb25lLgorICAgTG9nIHRoZSBjb3JyZWN0IG1pc3Npbmcgc3ltYm9sLgorCisyMDEwLTA1LTA5IDA5OjIxICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHV0aWxpdGllcy9leGVjdXRlIGRvIG5vdCBuZWVkIGFueXRoaW5nIGZyb20KKyAgIHV0aWxfZnVuY3MsIHNvIHN0b3AgZGVwZW5kaW5nIG9uIGl0LgorCisyMDEwLTA1LTA5IDA5OjEyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBSZW1vdmVkIHRoZSB1bnVzZWQgZnVuY3Rpb24geHhfdG9rZW5pemVfZXhlY19jb21tYW5kCisgICBmcm9tIHV0aWxpdGllcy9leGVjdXRlLgorCisyMDEwLTA1LTA5IDA5OjAxICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBSZXBsYWNlIHRoZSBkZWJ1Z2dpbmcgZnVuY3Rpb25zIHdpdGggZHVtbWllcworICAgd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCisKKzIwMTAtMDUtMDkgMDg6MDIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZDoKKworICAgQ2hlY2sgdGhhdCB0aGUgVURQIHRyYW5zcG9ydCBpcyBlbmFibGVkCisKKzIwMTAtMDUtMDkgMDg6MDEgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2Q6CisKKyAgIEZhY3RvciBvdXQgY2hlY2sgZm9yIG1pYklJL3N5c3RlbV9taWIKKworMjAxMC0wNS0wOSAwNzo1OSAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgQWRkIG1pc3NpbmcgaW5jbHVkZXMKKworMjAxMC0wNS0wOCAyMzoxNiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgQWRkaXRpb25hbGx5IGZpeCBtYWtlIHRlc3QgZm9yIHRoZSB1bmNvbW1vbiBjYXNlIHdoZXJlIGJ1aWxkZGlyCisgICA9PSBzcmNkaXIKKworMjAxMC0wNS0wOCAyMjo1NSAgbWFnZnIKKworICAgKiAgdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgaXQgcG9zc2libGUgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlIGZyb20KKyAgIGFueXdoZXJlLgorICAgQ2hhbmdlIHRoZSAtRCBvcHRpb24gdG8gZXhwZWN0IHRoZSBwYXRoIG9mIHRoZSB0b3Agc291cmNlCisgICBkaXJlY3RvcnkuCisgICBBZGQgYW4gLXNyY2RpciBvcHRpb24gdGhhdCBpcyBhbiBhbGlhcyBmb3IgLUQuCisgICBBZGQgYW4gLWJ1aWxkZGlyIG9wdGlvbiB0byBkZXNpZ25hdGUgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdGVzdAorICAgb2JqZWN0IGlzLgorICAgUHV0IHNyY2RpciBhbmQgYnVpbGRkaXIgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgdGVzdCBzY3JpcHRzCisgICBGYWN0b3Igb3V0IHRoZSBncmVwIHBhcnQgb2YgU0tJUElGIGFuZCBTS0lQSUZOT1QgdG8gSVNERUZJTkVECisgICBVc2UgbW9yZSByZWFkYWJsZSBrZXlzIGluIHRoZSBvcHRzIGhhc2ggaW4gUlVORlVMTFRFU1RTCisgICBBZGp1c3QgZXZlcnl0aGluZyB0byB1c2Ugc3JjZGlyIGFuZCBidWlsZGRpcgorCisyMDEwLTA1LTA4IDIyOjQyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmM6CisKKyAgIFVzZSBjb3JyZWN0IGFyZ3VtZW50IHR5cGVzCisKKzIwMTAtMDUtMDggMjI6MDcgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIENvbnNvbGlkYXRlIHRoZSB0ZXN0IGFuZCB0ZXN0LW1pYnMgdGFyZ2V0cy4KKyAgIEV4cG9zZSB0aGUgdGVzdGFsbCB0YXJnZXQgaW4gdGhlIHRvcCBtYWtlZmlsZS4KKworMjAxMC0wNS0wOCAyMjowNSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIERvIG5vdCBhYm9ydCB3aGVuIHN0ciBpcyBOVUxMIGFzIHRoYXQgaXMgYSBwZXJmZWN0bHkgdmFsaWQgaW5wdXQuCisKKzIwMTAtMDUtMDggMjI6MDMgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jOgorCisgICBVc2UgY29ycmVjdCBhcmd1bWVudCB0eXBlcworCisyMDEwLTA1LTA4IDIyOjAyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgQWRkIG1pc3NpbmcgbmV3bGluZQorCisyMDEwLTA1LTA3IDIxOjExICByc3RvcnkKKworICAgKiBjb25maWd1cmU6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IGNvbmZpZ3VyZS5hYworCisyMDEwLTA1LTA3IDE5OjIxICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIGZpeCBoYW5kbGluZyBvZiBjZXJ0IGFsZ29yaXRobSBpbiBmaW5nZXJwcmludHM7IGNvbnZlcnQgaW4vb3V0CisgICBmaW5nZXJwaW50cworICAgZnJvbS90byBoZXgKKworMjAxMC0wNS0wNyAxOToyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGRvbnQgc3BlY2lmeSBoYXNoIHR5cGUgZm9yIGZpbmdlcnByaW50CisKKzIwMTAtMDUtMDcgMTk6MjEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBoYW5kbGUgZmluZ2VycHJpbnQgdHlwZXM7IGRyb3Agc2FuIGZpZWxkcyBmcm9tIGNlcnQgc3RydWN0OworICAgY29uc2lkZXIgZGlyZWN0b3J5CisgICB3aGVuIHBhcnRuZXJpbmcga2V5cy9jZXJ0cworCisyMDEwLTA1LTA3IDE5OjIwICByc3RvcnkKKworICAgKiBjb25maWd1cmUuYWM6CisKKyAgIG1vdmUgZGVmYXVsdCBwcm9tcHRzIGVhcmxpZXIKKworMjAxMC0wNS0wNiAxNTo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgYmV0dGVyIFNBTiBleHRyYWN0aW9uOyB0d2VhayBkdWJndXMgbWVzc2FnZXM7IHF1aWV0IGNvbXBpbGVyCisgICB3YXJuaW5ncworCisyMDEwLTA1LTA2IDE1OjM5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICByZWR1Y2UgY2VydCBkZWJ1ZyBvdXRwdXQ7IGRlYnVnIGluc3RlYWQgb2YgbG9nX2luZm8gaW4gZHVtcHMKIAogMjAxMC0wNS0wNiAxNDo0OSAgZHRzMTIKIApAQCAtMjMyNiw3NiArNDI0NTQsNjc1IEBACiAgICBEb24ndCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIDxzdHJpbmcuaD4KICAgIChicmluZyBpbnRvIGxpbmUgd2l0aCBhbGwgb3RoZXIgb2NjdXJhbmNlcykKIAotMjAxMC0wNS0wNiAxNDo0NCAgZHRzMTIKKzIwMTAtMDUtMDYgMTQ6NDEgIGR0czEyCiAKLSAgICogd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMnNkay5kc3c6Ci0KLSAgIEFkZCBwcm9qZWN0IGRlcGVuZGVuY2llcyBmb3IgTVNWQyBidWlsZHMuCi0KLTIwMTAtMDUtMDYgMDY6MzMgIGJ2YXNzY2hlCi0KLSAgICogIG5ldC1zbm1wLWNvbmZpZy5pbiwgdGVzdGluZy9URVNUQ09ORi5zaCwgICAKLSAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgICAKLSAgICAgIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmw6Ci0KLSAgIENIQU5HRVM6IEN5Z3dpbjogRGV0ZWN0IGZyZWUgVURQIHBvcnRzIGNvcnJlY3RseSBmb3IgdXNlIGluIHRlc3QgaW5mcmFzdHJ1Y3R1cmUuCi0gICAoQmFja3BvcnRlZCB0cnVuayByMTgwNzMgYW5kIHIxODA4MCkuCi0KLTIwMTAtMDQtMzAgMTk6MTAgIGJ2YXNzY2hlCi0KLSAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKLSAgICAgIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBzbm1wbGliL2NhbGxiYWNrLmM6CisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBzbm1wbGliL2NhbGxiYWNrLmM6CiAKICAgIENIQU5HRVM6IFdpbmRvd3M6IEZpeCBidWlsZCB1bmRlciBNaW5HVworICAgYmFjay9mb3J3YXJkIHBvcnQgb2YgcmV2aXNpb24gMTg2MzEKIAotMjAxMC0wNC0zMCAxODo0NCAgYnZhc3NjaGUKKzIwMTAtMDUtMDUgMTc6NDMgIHJzdG9yeQogCi0gICAqIGNvbmZpZ3VyZToKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKIAotICAgU2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiByMTg2MjcuCisgICBmaXggdHlwZSBpbiBsb2cgbXNnCiAKLTIwMTAtMDQtMzAgMTg6MjcgIGJ2YXNzY2hlCisyMDEwLTA1LTA1IDE3OjQzICByc3RvcnkKIAotICAgKiBjb25maWd1cmUuaW46CisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CiAKLSAgIG1hZGUgc3VyZSB0aGF0IGNyb3NzLWNvbXBpbGluZyB3aXRob3V0IHNwZWNpZnlpbmcgdGhlIGVuZGlhbm5lc3MKLSAgIGRvZXMgbm90IHRyaWdnZXIgYSBzeW50YXggZXJyb3IgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQuCisgICByZW1vdmUgaW1wb3J0IGZvciB1bnVzZWQgZnVuY3Rpb24KIAotMjAxMC0wNC0yOCAxMDo0OCAgYnZhc3NjaGUKKzIwMTAtMDUtMDQgMDc6MTIgIG1hZ2ZyCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CiAKLSAgIGxlZnQgb3V0IGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKSBmcm9tIGxpYm5ldHNubXAgc2luY2UgdGhlc2UKLSAgIGZ1bmN0aW9ucyBhcmUgYWxyZWFkeSBwcmVzZW50IGluIEN5Z3dpbnMgQyBsaWJyYXJ5LgorICAgTmVnYXRlIHJlYXNvbiBnaXZlbiBmcm9tIFNLSVBJRgogCi0yMDEwLTA0LTI4IDEwOjI2ICBidmFzc2NoZQorMjAxMC0wNS0wMyAyMjozOCAgcnN0b3J5CiAKLSAgICogUkVBRE1FLndpbjMyOgorICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgogCi0gICBGaXhlZCBhIGRvY3VtZW50YXRpb24gYnVnIHdpdGggcmVnYXJkIHRvIHRoZSBDeWd3aW4gYnVpbGQ6Ci0gICBsaW5raW5nIHdpdGggd3MyXzMyIGlzIG9ubHkgbmVjZXNzYXJ5IGZvciByZWFsbHkgYW5jaWVudCBDeWd3aW4gdmVyc2lvbnMuCisgICBmaXggbGVuIGluIGVtYWlsIGNtcDsgbW9yZSBleHRyYWN0IGRlYnVnZ2luZwogCi0yMDEwLTA0LTI4IDA3OjI5ICBidmFzc2NoZQorMjAxMC0wNS0wMyAyMjozOCAgcnN0b3J5CiAKLSAgICogIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmMsICAgCi0gICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKIAotICAgQ0hBTkdFUzogQ3lnd2luOiBidWlsZHMgbm93IHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQuCisgICBjb3B5IG9jZXJ0IHRvIGFkZGlvbmFsIG1hcHMKIAotMjAxMC0wNC0yNyAxNjo1NSAgYnZhc3NjaGUKKzIwMTAtMDUtMDMgMTQ6MjAgIG1hcnoKIAotICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCi0gICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKIAotICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkLgorICAgcmVtb3ZlIGRlcGVuZGVuY3kgb24gcGVybCBtb2R1bGUgbm90IHByZXNlbnQgaW4gQ2VudE9TCiAKLTIwMTAtMDQtMjcgMTU6NDIgIGR0czEyCisyMDEwLTA1LTAzIDAzOjQ5ICByc3RvcnkKIAotICAgKiAgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCwgICAKLSAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluOgorICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgogCi0gICBSZS1pbnN0YXRlIE5vdGlmaWNhdGlvbi1Mb2cgTUlCIHN1cHBvcnQgd2hlbiBidWlsZGluZyB3aXRoCi0gICBXaW5kb3dzIFBsYXRmb3JtIFNESy4KKyAgIGRvbid0IGFjY2VzcyBzdHJ1Y3QgaW50ZXJuYWxzIGRpcmVjdGx5CisKKzIwMTAtMDUtMDMgMDM6NDggIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgZml4IGNvbXBpbGluZyB3aXRoLW91dC1taWJtb2R1bGVzPXV0aWxpdGllcy9leGVjdXRlCisKKzIwMTAtMDUtMDEgMTk6MDggIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkOgorCisgICBDb3JyZWN0IHRoZSBzb3VnaHQgc3RyaW5nIHRvIG1ha2UgdGhlIHRlc3QgcGFzcyB3aGVuIG9rLgorCisyMDEwLTA1LTAxIDE3OjE1ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbW9yZSBjb25zaXN0ZW50IHRyZWF0bWVudCBvZiBrZXlVc2FnZSwgYmFzaWNDb25zdHJhaW50cywgb3RoZXIKKyAgIHg1MDl2MyBvcHRpb25zCisKKzIwMTAtMDQtMzAgMjM6MzcgIG1hcnoKKworICAgKiBsb2NhbC9jZXJ0Z2VuLXRlc3QucGw6CisKKyAgIGxhbWUgdGVzdCBzY3JpcHQgYnV0IGNvdmVycyBhIGNodW5rIG9mIHRoZSBjb2RlCisKKzIwMTAtMDQtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1raW5zdGFsbGRpcnMgaW5zdGVhZCBpbnN0ZWFkIG9mIEZpbGU6OlBhdGgKKworMjAxMC0wNC0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIGVuc3VyZSBuZXQtc25tcC1jb25maWcgc2NyaXB0IGNhbiBiZSBydW4gZnJvbSB0aGUgYnVpbGQgZGlyCisKKzIwMTAtMDQtMzAgMjE6MzEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBoYW5kbGUgZ2VuY2VydCAtLWNhCisKKzIwMTAtMDQtMzAgMjE6MDEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBoZWxwIGZvciBjZXJ0U2VjTmFtZTsgY29udGludWUgYnVpbGRpbmcgY2VydCBpbmRleGVzIGV2ZW4gaWYKKyAgIHdlIGNhbnQgc2F2ZQorICAgdG8gcGVyc2lzdGVudCBkaXIKKworMjAxMC0wNC0zMCAyMDo0OCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IGNoZWNrIGNvdW50IGZvciA4MjIgbmFtZXMgaW4gdGhlIHNubXBkLmxvZworCisyMDEwLTA0LTMwIDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggbWFsbG9jIHVubmRlcmxlbmd0aCBieSAxIGVycm9yCisKKzIwMTAtMDQtMzAgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGNvbW1lbnQgb3V0IHRoZSA4MjIgdGVzdHM7IHRoZXkncmUgYnJva2VuIGF0IHRoZSBtb21lbnQKKworMjAxMC0wNC0zMCAxOTozNiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGRvbid0IGxvc2UgU0FOIHdoZW4gc2lnbmluZyB3LyBDQQorCisyMDEwLTA0LTMwIDE4OjQ2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1ha2UgbmFtZSBjaGFuZ2UgdG8gcmZjODIyIGZyb20gdHlwb2VkIDgyMjAKKworMjAxMC0wNC0zMCAxODo0NiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGFkZGVkIHRlc3RzIHRvIGRvIG90aGVyIHN1YmplY3RBbHROYW1lIG1hcHBpbmcKKworMjAxMC0wNC0zMCAxNzozMSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBpc3N1ZXMgMSwyLDQgYW5kIC1DIGhhbmRsaW5nCisKKzIwMTAtMDQtMjkgMDM6MzIgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIHRsc3RtQ2VydFRvVFNOVGFibGUgdG8gdXNlIGNhY2hlICsgY2VydF91dGlsIG1hcHMKKyAgIGNvbnRhaW5lcgorCisyMDEwLTA0LTI5IDAzOjMxICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIGNoZWNrIGluc2VydCByZXR1cm4KKworMjAxMC0wNC0yOSAwMzozMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgcmVtb3ZlIGZ1bmN0aW9uIHRvIGNvbnRhaW5lciBpdGVyYXRvcjsKKyAgIGltcGxlbWVudCBpdCBmb3IKKyAgIGJpbmFyeV9hcnJheQorCisyMDEwLTA0LTI5IDAzOjMxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgbWFrZSBzdXJlIGNvbnRhaW5lciBzeW5jIGluY3JlbWVudGVkIG9uIHNvcnQsIGluc2VydCBhbmQgcmVtb3ZlCisKKzIwMTAtMDQtMjggMDc6MjAgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9pbmV0X250b3AuYzoKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSBjb21tZW50LgorCisyMDEwLTA0LTI4IDAwOjMzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGZpeCBtYWtlZmlsZSBmb3IgdGVzdCB0YXJnZXQKKworMjAxMC0wNC0yOCAwMDozMyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHA6CisKKyAgIG1ha2UgdGhlIHRlc3Qgc3VpdGUgcnVuIG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkgYWdhaW4uCisKKzIwMTAtMDQtMjggMDA6MzMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzOgorCisgICBkZWFsIHdpdGggb3V0LW9mLXNvdXJjZSB0cmVlIGJ1aWxkaW5nCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB0ZXN0aW5nIHRvIGNoZWNrIGNlcnRpZmljYXRlIHRvIHNlY3VyaXR5bmFtZSBtYXBwaW5ncyBhbmQgZGVuaWFscworCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgY3JlYXRlZCBhIG1hcHBlZCB1c2VyCisKKzIwMTAtMDQtMjggMDA6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwOgorCisgICBnZW5lcmF0ZSBvYmplY3QgY29kZSB3aXRoIC1nIGRlYnVnZ2luZworCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYzoKKworICAgbW9yZSBhY2N1cmF0ZSBjdXJyZW50IEFQSSB1c2FnZSBmb3Igc2NhcGkgY29kZQorCisyMDEwLTA0LTI3IDIxOjEzICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggY2VydCBpbml0IGR1cGxpY2F0ZSBjYWxsIGNoZWNrCisKKzIwMTAtMDQtMjcgMjA6NTggIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgY29udmVydCB1c2VyIGZpbmdlcnByaW50IHRvIGxvd2VyIGFuZCBzdHJpcCBjb2xvbnM7IGFkZCBleHRlcm4KKyAgIHByb3RvdHlwZQorICAgZm9yIGNlcnQgaW5pdCBzbyB3ZSBkb24ndCBuZWVkIGhlYWRlcgorCisyMDEwLTA0LTI3IDIwOjE1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBtYW4vc25tcGQuY29uZi41LmRlZiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzZXBhcmF0ZSBjZXJ0IGluaXQgYW5kIGNlcnQgbG9hZGluZzsgYWRkIGNlcnRTZWNOYW1lIGNvbmZpZyB0b2tlbgorCisyMDEwLTA0LTI3IDAzOjE4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgbWVyZ2UgTkVUU05NUF9GVU5DVElPTiBhbmQgIU5FVFNOTVBfRlVOQ1RJT04gYXNzZXJ0IGNhc2VzCisKKzIwMTAtMDQtMjcgMDM6MDIgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbG90cyBvZiBuZXcgY2VydCBmdW5jdGlvbmFsaXR5CisgICAtIGFkZCBzc2wgZnVuY3MgZm9yIGNlcnQgZXh0ZW5zaW9ucyBhbmQgc3NsIGNlcnQgY2hhaW5zCisgICAtIGZ1bmN0aW9ucyBhbmQgbmV3IG5ldHNtcF9jZXJ0X21hcCBzdHJ1Y3QgZm9yIGxvb2tpbmcgdXAgY2VydAorICAgbWFwcGluZ3MKKyAgIC0gYWRkIGNlcnRpZmljYXRlIG1hcHBpbmcgZm9yIHNlY25hbWUKKyAgIC0gYWRkIGNvZGUgdG8gYnVpbGQgY2VydCBjaGFpbnMKKyAgIC0gYWRkIHN1YmplY3QgdG8gY2VydCBpbmRleCBjYWNoZQorICAgLSByZWJ1aWxkIGluZGV4ZXMgaWYgYW55IGVycm9yIHdoaWxlIHBhcnNpbmcgaW5kZXgKKyAgIC0gcmVmb3JtYXQgZHVtcCBvdXRwdXQKKyAgIC0gYWRkIE5TX0NFUlRfQ0EgYWxsb3dlZF91c2UgZmxhZworICAgLSBhZGQgc3ViamVjdCwgaXNzdWVyIGFuZCBpc3N1ZXJfY2VydCB0byBuZXRzbm1wX2NlcnQKKyAgIC0gbW92ZSBjZXJ0IGNvbnRhaW5lciBzZXR1cCB0byBpdHMgb3duIGZ1bmN0aW9uCisgICAtIGFkZCBjZXJ0IHN1YmplY3QgbmFtZSBzdWJjb250YWluZXIKKworMjAxMC0wNC0yNyAwMzowMiAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYzoKKworICAgbW92ZSBpcHY2IHNwZWNpZmljIHZhciBkZWNsIGluc2lkZSBpZmRlZgorCisyMDEwLTA0LTI3IDAzOjAyICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oOgorCisgICBDSEFOR0VTOiBhZ2VudDogdGRhdGEgaGVscGVyIG5vdyBzYXZlcyBmbGFncyBwYXNzZWQgZHVyaW5nCisgICBjcmVhdGlvbjsgYWRkIHRkYXRhCisgICBmbGFnIHRvIE5PVCBjcmVhdGUgdGhlIHRhYmxlIGNvbnRhaW5lcgorCisyMDEwLTA0LTI3IDAzOjAxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IGFkZCBpbnRlcmZhY2UgZm9yIGR1cGxpY2F0aW5nIGEgY29udGFpbmVyCisgICBDSEFOR0VTOiBzbm1wbGliOiBjb250YWluZXIgY2hhbmdlczogYWRkIGZsYWdzIGZpZWxkIHRvIGNvbnRhaW5lcgorICAgbWV0YS1kYXRhOworICAgY2hnIGJpbmFyeV9hcnJheSBjb250YWluZXIgdG8gdXNlIGNvbnRhaW5lciBtZXRhLWRhdGEgZmxhZ3MKKworMjAxMC0wNC0yNiAyMjozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgYWRkZWQgYSB0ZXN0IHRvIHZlcmlmeSB0aGF0IHdoZW4gdGhlIHRyYW5zcG9ydCBpcyBjb25maWd1cmVkIHdpdGgKKyAgIGEgcmVtb3RlIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHRoZSBjb25uZWN0aW9uIGlzIGRlbmllZAorCisyMDEwLTA0LTI2IDIyOjMyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZDoKKworICAgYWRkZWQgdGVzdHMgZm9yIC1UIGZsYWcgdXNhZ2UgYW5kIGludmFsaWQgdXNlciB1c2FnZQorCisyMDEwLTA0LTI2IDIwOjU0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX29sZHVjZDoKKworICAgaGF2ZSB0aGUgYWxpYXMgdHJhbnNwb3J0IHNvdXJjZSB0aGUgcmlnaHQgU3YzY29uZmlnIGZpbGUKKworMjAxMC0wNC0yNiAyMDo1MCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfb2xkdWNkOgorCisgICB3b3JraW5nIHN1cHBvcnQgb2YgVExTL0RUTFMgdGVzdGluZyBpbmNsdWRpbmcgY2VydCBnZW5lcmF0aW9uCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaG9ub3IgdGhlIGNvbmZpZyBkaXIgaWYgc3BlY2lmaWVkIHZpYSAtQworCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBmaXggcmVhbGxvYyBjYWxsIGZvciBidWZmZXJlZCBwYWNrZXRzCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgcHJvcGVyIHNraXAgb3V0cHV0IGZvciByZXBvcnRpbmcgcmVhc29uCisKKzIwMTAtMDQtMjYgMjA6NDkgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmM6CisKKyAgIHJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGFmdGVyIGJhY2tzbGFzaCBpbiBtYWNybworCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdHJhbnNwb3J0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM5OWFsaWFzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLmNlcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5wcml2OgorCisgICB0ZXN0cyBmb3IgbWluaW1hbGx5IHRlc3RpbmcgYWxsIHRoZSB0cmFuc3BvcnRzCisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SRUFETUU6CisKKyAgIG1pbmltYWxseSBkb2N1bWVudCBuZXcgUlVORlVMTFRFU1RTIHNjcmlwdAorCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1QuYywgdGVzdGluZy9UMi5zaCwgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1tZDUsICAgCisgICAgICB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEsIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMS1kZXMsICAgCisgICAgICB0ZXN0aW5nL2RhdGEua3VsLW1kNSwgdGVzdGluZy9kYXRhLmt1bC1zaGExLCB0ZXN0aW5nL21pc2N0ZXN0LmMsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3Rfa2V5Y2hhbmdlLnNoLCB0ZXN0aW5nL3Rlc3Rfa3VsLnNoOgorCisgICBkZWxldGVkIG9sZCBmaWxlcyBub3Qgd29ydGggcmVzdG9yaW5nCisKKzIwMTAtMDQtMjYgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9ldmFsX3Rlc3RsaXN0OgorCisgICByZW1vdmUgb2Jzb2x1dGUgdGVzdCBsaXN0CisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jOgorCisgICBhIGhhc2gtdGVzdGluZyAuYyBmaWxlIEkgaGFkIGxheWluZyBhcm91bmQKKworMjAxMC0wNC0yNiAyMDo0NyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBtYWtlIHRlc3RhbGwgdGFyZ2V0CisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCB0ZXN0aW5nL2V0aW1ldGVzdC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2tleW1hbmFnZXRlc3QuYywgdGVzdGluZy9zY2FwaXRlc3QuYzoKKworICAgbW92ZSBvbGQgQy1jb2RlIHRlc3RzIGluIHBsYWNlCisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9vbGR1Y2Q6CisKKyAgIHNraXAgc29sYXJpcyBjb21tZW50cworCisyMDEwLTA0LTI2IDIwOjQ2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIGZpeCBpbnZvY2F0aW9uIG9mIFJVTkZVTExURVNUUworCisyMDEwLTA0LTI2IDIwOjQ2ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL01ha2VmaWxlLmluLCB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjFjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MmNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYWdlbnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2Jhc2UsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ3RyYXBkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3Zhbnljb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTFzbm1wdjJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcxY29tMnNlYzZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcyY29tMnNlY3VuaXhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3RyYW5zcG9ydCwgdGVzdGluZy90ZXN0cy9TdjFjb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N2MmNjb25maWcsIHRlc3RpbmcvdGVzdHMvU3YzY29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdhZ2VudCwgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdiYXNlLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWd0cmFwZCwgdGVzdGluZy90ZXN0cy9TdjN2YWNtY29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9TdmFueWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTdzbm1wdjJjdG92MWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjBzbm1wdjNnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQsIHRlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENSwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNHNubXB2M2dldFNIQTEsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjZzbm1wdjNnZXRTSEFBRVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjhzbm1wdjNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2LCB0ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDIsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsIHRlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA2MWFnZW50cGVybCwgdGVzdGluZy90ZXN0cy9UMDY1YWdlbnRleHRlbmQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzBjb20yc2VjLCB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4LCB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMGFnZW50eGdldCwgdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXAsIHRlc3RpbmcvdGVzdHMvVDExNWFnZW50eHBlcmwsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsIHRlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzFzbm1wdjJjdmFjbWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEzMnNubXB2M3ZhY21nZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MnNubXB2M3ZhY21nZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUwc29sYXJpc2hvc3RjcHUsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTFzb2xhcmlzaG9zdGRpc2ssIHRlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcCwgdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QyMDBzbm1wdjJjd2Fsa2FsbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QuY2VydCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC1sb2NhbGhvc3QucHJpdiwgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIuY2VydCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLnByaXY6CisKKyAgIE5FV1M6IHRlc3Rpbmc6IEJyYW5kIG5ldyB0ZXN0IHN1aXRlIGRlc2lnZW5lZCB0byBldmVudHVhbGx5IHRlc3QKKyAgIG1vcmUgZnVuY3Rpb25hbGl0eSwgcHJvdmlkZSBmb3Igc3VwcG9ydCBvZiB1bml0LXRlc3RzIGFuZCBzdXBwb3J0CisgICBvZiBBUEkgdGVzdHMKKworMjAxMC0wNC0yNiAyMDo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICByZW1vdmVkIGEgZGVidWdnaW5nIGVjaG8KKworMjAxMC0wNC0yNiAyMDo0MyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBtb3JlIGJ1ZyBmaXhlcyBmb3Igc3RyaW5nIHNlYXJjaGVzCisKKzIwMTAtMDQtMjYgMjA6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgYWRkZWQgYSBuZXcgbWFjcm8gdG8gY2hlY2sgYSB0cmFwZCBjb3VudAorCisyMDEwLTA0LTI2IDIwOjQyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIHVzZSBpbmRpdmlkdWFsIG91dHB1dCBmaWxlcyBhbmQgZml4IHNvbWUgdGVzdHMKKworMjAxMC0wNC0yNiAyMDo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBtYWRlIGV4aXN0aW5nIHRlc3Qgc3VpdGUgcHV0IG91dCBUQVAgb3V0cHV0CisKKzIwMTAtMDQtMjYgMjA6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVOVEVTVFMsIHRlc3RpbmcvVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2V2YWxfb25lcHJvZ3JhbS5zaCwgdGVzdGluZy9ldmFsX29uZXNjcmlwdC5zaCwgICAKKyAgICAgIHRlc3RpbmcvZXZhbF9zdWl0ZS5zaCwgdGVzdGluZy9ldmFsX3Rvb2xzLnNoLCB0ZXN0aW5nL2Z1bGx0ZXN0cywgIAorICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIGJlZ2lubmluZyBvZiBtb3ZpbmcgVUNEIHRlc3Qgc3VpdGUgaW50byBhIGxhcmdlciBzdWJkaXJlY3RvcnkKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgYWxsb3cgcnVubmluZyB0ZXN0cyB0aGF0IG1hdGNoIGEgcmVnZXhwCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN1bW1hcml6ZSB0ZXN0cyB0aGF0IGZhaWxlZAorCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjcmVhdGVkIHRoZSBhYmlsaXR5IHRvIGhhdmUgcnVuXyBzY3JpcHRzIGZvciBleGVjdXRpbmcgY2VydGFpbgorICAgdHlwZXMKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbWFkZSB0aGUgYnVpbGQtc2NyaXB0LWNoZWNrIHJvdXRpbmUgZ2VuZXJpYworCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdXBwb3J0IGZvciBidWlsZCBzY3JpcHRzCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHByb3ZpZGUgaW5mcmFzdHJ1Y3R1cmUgZm9yIGJ1aWxkaW5nIGFuZCByZW5hbWluZyB0ZXN0cworCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBtb3JlIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgc2V0dXAKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3VwcG9ydCB0aGUga2V5d29yZCAnYWxsJworCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBlbmFibGUgZ3JvdXAgZ2F0aGVyaW5nCisKKzIwMTAtMDQtMjYgMjA6MzkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNyZWF0aW5vIG9mIGEgbmV3IHRlc3RpbmcgaGFybmVzcwogCiAyMDEwLTA0LTI1IDE3OjM3ICBidmFzc2NoZQogCkBAIC0yNDAzLDM0ICs0MzEzMCw0MDMgQEAKIAogICAgRG9jdW1lbnRhdGlvbiB1cGRhdGUuCiAKLTIwMTAtMDQtMjEgMTE6MDUgIGJ2YXNzY2hlCi0KLSAgICogc25tcGxpYi9zdHJ0b3VsbC5jOgotCi0gICBDb3BpZWQgdGhlIHNvdXJjZSBmaWxlIHNubXBsaWIvc3RydG91bGwuYyBmcm9tIHRoZSB0cnVuayB0byB0aGUKLSAgIFY1LjQgYnJhbmNoLgotCi0yMDEwLTA0LTE4IDEzOjQwICBidmFzc2NoZQotCi0gICAqIHNubXBsaWIvd2lucGlwZS5jOgotCi0gICBBZGRlZCAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGluIGZpbGUKLSAgIHNubXBsaWIvd2lucGlwZS5jIHN1Y2gKLSAgIHRoYXQgYnVpbGRpbmcgb24gV2luZG93cyBkb2Vzbid0IHRyaWdnZXIgYSB3YXJuaW5nIGFib3V0Ci0gICBpbmNsdWRpbmcgYm90aAotICAgPHN0ZGFyZ3MuaD4gYW5kIDx2YXJhcmdzLmg+IGluIHRoZSBzYW1lIHNvdXJjZSBmaWxlLgotCi0yMDEwLTA0LTE4IDEzOjI0ICBidmFzc2NoZQorMjAxMC0wNC0yNSAxNToyMSAgYnZhc3NjaGUKIAogICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCiAgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgUmV2ZXJ0ZWQgYW5vdGhlciBjaGFuZ2UgdGhhdCB3YXMgaW50cm9kdWNlZCBpbiByMTg0OTUgYW5kIHRoYXQncwotICAgb2J2aW91c2x5IGJyb2tlbi4KKyAgIFdpbjMyOiByZXZlcnRlZCBhIHJlY2VudCB1bm5lY2Vzc2FyeSBtb2RpZmljYXRpb24uCisKKzIwMTAtMDQtMjUgMTU6MDAgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBoYW5kbGUgbXVsdGlwbGUgLS1zYW4gYXJncywgY2hlY2sgZXJyb3IgY29kZXMgb24gb3BlbnNzbCBjbWRzIGFuZAorICAgZGllIG9uIGZhaWx1cmUKKworMjAxMC0wNC0yNSAxNDoxOCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGggU0RLIHN1cHBvcnQgZGlzYWJsZWQuCisKKzIwMTAtMDQtMjUgMTQ6MTggIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIAorICAgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBXaW4zMjogcmVzdG9yZWQgY29uc2lzdGVuY3kgYmV0d2VlbiB3b3Jrc3BhY2UtYnVpbGQgYW5kIGJhdGNoCisgICBidWlsZCAtLSBtYWRlIHN1cmUgdGhhdCBub3RpZmljYXRpb25fbG9nLmMgaXMgb25seSBpbmNsdWRlZCBpbgorICAgdGhlIG5ldHNubXBtaWJzIHByb2plY3QuCisKKzIwMTAtMDQtMjUgMTM6NTggIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAKKyAgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgV2luMzI6IGZpeGVzIGZvciByZWNlbnRseSBpbnRyb2R1Y2VkIGJ1aWxkIGJyZWFrYWdlLgorCisyMDEwLTA0LTI1IDEzOjUxICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluOgorCisgICBXaW4zMjogYnVpbGRzIGFnYWluIHdpdGggU0RLIHN1cHBvcnQgZGlzYWJsZWQuCisKKzIwMTAtMDQtMjUgMTM6NDggIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgc25tcGxpYi9jbG9zZWRpci5jLCBzbm1wbGliL29wZW5kaXIuYywgIAorICAgICAgIHNubXBsaWIvcmVhZGRpci5jLCBzbm1wbGliL3dpbnNlcnZpY2UuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIFdpbjMyIE1TVkMgNiBub24tU0RLIGJ1aWxkIHdvcmtzIGFnYWluLgorCisyMDEwLTA0LTI1IDEzOjQyICBidmFzc2NoZQorCisgICAqIHdpbjMyL0NvbmZpZ3VyZToKKworICAgUmVtb3ZlZCBhbiBvYnNvbGV0ZSB0cmFuc2Zvcm1hdGlvbiBydWxlLgorCisyMDEwLTA0LTI1IDEyOjA1ICBidmFzc2NoZQorCisgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNYWRlIGl0IGFnYWluIHBvc3NpYmxlIHRvIGRpc2FibGUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgd2hlbgorICAgYnVpbGRpbmcgdmlhIHdpbjMyL2J1aWxkLmJhdC4KKworMjAxMC0wNC0yMyAxMzoxNCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZGVkIC0tc2FuIEROUzphLmIuYyBoYW5kbGluZywgaGVscCB0ZXh0IGZpeGVzLCBvdGhlciBidWcgZml4ZXMuCisgICBOb3RlIG11bHRpcGxlIC0tc2FuIG5vdCBzdXBwb3J0ZWQgeWV0CisKKzIwMTAtMDQtMjEgMjI6MzEgIGhhcmRha2VyCisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW46CisKKyAgIGJ1aWxkIHRoZSAubWFkZSB2ZXJzaW9uIG9mIG5ldC1zbm1wLWNlcnQKKworMjAxMC0wNC0yMSAyMjozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kIGFmdGVyIG1vdmluZyBhbGwgdGhlIGZpbGVzIGFyb3VuZAorCisyMDEwLTA0LTIxIDIwOjE2ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGJ1aWxkIHRydXN0IGNoYWluIGZvciBjbGllbnQgY2VydDsgYWRkIHN1YmplY3QgdG8gaW5kZXggY2FjaGU7CisgICByZWJ1aWxkIGluZGV4ZXMKKyAgIGlmIGFueSBlcnJvciB3aGlsZSBwYXJzaW5nIGluZGV4OyByZWZvcm1hdCBkdW1wIG91dHB1dAorICAgLSBhZGQgTlNfQ0VSVF9DQSBhbGxvd2VkX3VzZSBmbGFnCisgICAtIGFkZCBzdWJqZWN0LCBpc3N1ZXIgYW5kIGlzc3Vlcl9jZXJ0IHRvIG5ldHNubXBfY2VydAorICAgLSBtb3ZlIGNlcnRUb1RTTl9lbnRyeSB0byBjZXJ0X3V0aWwgaGVhZGVyCisgICAtIG1vdmUgY29udGFpbmVyIHNldHVwIHRvIGl0cyBvd24gZnVuY3Rpb24KKyAgIC0gYWRkIHN1YmplY3QgbmFtZSBzdWJjb250YWluZXIKKyAgIC0gYWRkIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucywKKyAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2lzc3VlZF9ieQorCisyMDEwLTA0LTIxIDE2OjE2ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgorCisgICBkb2N1bWVudCB0aGUgc2luZ2xlLWRhc2ggLyBzbm1wLmNvbmYgLyBkb3VibGUtZGFzaCBwcmVjaWRlbmNlCisKKzIwMTAtMDQtMjEgMTY6MTUgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgaW4gdGhlIHNubXAuY29uZiBmaWxlIHRoYXQgdGhlIHRva2VucyBjYW4gYmUgdXNlZCBmb3IKKyAgIGNvbW1hbmQgbGluZSBhcHBsaWNhdGlvbnMgdG9vCisKKzIwMTAtMDQtMjEgMTY6MTUgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgdGhlIGZpbGUgbG9hZGluZyBvcmRlciBhbmQgaG93IHRvIHR1cm4gb2ZmIGhvc3Qtc3BlY2lmaWMKKyAgIGNvbmZpZworCisyMDEwLTA0LTIxIDE1OjUyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgbWFuL3NubXAuY29uZi41LmRlZiwgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBORVdTOiBhcHBzOiBHZW5lcmljIGhvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzbm1wLmNvbmYgZmlsZXMKKyAgIGFyZSBub3cgcmVhZC4gU2VlIHRoZSBIT1NULVNQRUNJRklDIEZJTEVTIHNlY3Rpb24gb2YgdGhlCisgICBzbm1wLmNvbmYgbWFudWFsIHBhZ2UuCisKKzIwMTAtMDQtMjAgMTI6NDQgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvYXNuMS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjk3MTI3MDogcmVmdXNlIHRvIHBhcnNlIEFTTi4xIHRva2VucworICAgd2l0aCB3cm9uZyB0eXBlIGZpZWxkLgorICAgVGhpcyBtYXkgeWllbGQgdG8gcHJvYmxlbXMgd2l0aCB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbnMgd2hpY2gKKyAgIG1heSBkZXBlbmQgb24gcGFyc2luZyB1Z2x5IEFTTi4xIGRhdGEgLSB3ZSdsbCBzZWUuLi4KKworMjAxMC0wNC0yMCAwMDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY29tYmluZSByZW1vdGUgZmluZ2VycHJpbnQgY2hlY2tpbmcgYW5kIGNoZWNrIGJvdGggc2lkZXMKKworMjAxMC0wNC0yMCAwMDowNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGlmIHRoZSByZW1vdGUgZmluZ2VycHJpbnQgaXMgc3BlY2lmaWVkLCByZXF1aXJlIGFuIGV4YWN0IG1hdGNoCisKKzIwMTAtMDQtMTkgMjM6NDQgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCB2YXJpb3VzIG1pbm9yIGJ1Z3MsIGVzcGVjaWFsbHkgaW4gb3V0cHV0IG1lc3NhZ2VzCisKKzIwMTAtMDQtMTkgMjE6MTQgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGRvY3VtZW50YXRpb24gYW5kIHByb3RvdHlwaW5nIG9mIG5lZWRlZCBSRkMgc3RlcHMKKworMjAxMC0wNC0xOSAyMToxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjb252ZXJ0IGlmIGVycm9yIGNoZWNrIHRvIHJldHVybiBpbW1lZGlhdGVseSBzbyBvdGhlciBjb2RlIGNhbiBiZQorICAgb3V0ZGVudGVkCisKKzIwMTAtMDQtMTkgMjE6MTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGNvbW1lbnRzIGZyb20gdGhlIFJGQyB0ZXh0CisKKzIwMTAtMDQtMTggMTU6MjUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCBzbm1wbGliL3RyYW5zcG9ydHMsICAgCisgICAgICB3aW4zMi9idWlsZC5wbCwgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgCisgICAgICAgIHdpbjMyL3RyYW5zcG9ydHMsIHdpbjMyL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaDoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wNC0xNiAxODo1MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY3JlYXRlZCBhIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlIHNlY3VyaXR5TmFtZSBmcm9tIHRoZSBjZXJ0CisKKzIwMTAtMDQtMTYgMTg6NTMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZG9uJ3QgbmVlZCB0byBzZXQgdGhlIGFjY2VwdCBzdGF0ZSBmb3IgVExTIChqdXN0IERUTFMpCisKKzIwMTAtMDQtMTYgMTg6NTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIFRMUyBjb21tZW50IGRvY3VtZW50YXRpb24gYW5kIHN0ZXBzIHRha2VuIGZyb20gdGhlIFJGQworCisyMDEwLTA0LTE2IDEzOjU1ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbnVtZXJvdXMgZml4ZXMsIG1vcmUgdmVyYm9zZSBkZWZhdWx0IG91dHB1dCwgYWRkaXRpdmUgc2hvdyBmbGFncywKKyAgIGFyYml0cmFyeSBjb25maWcgcGFyYW0gaGFuZGxpbmcsIGJldHRlciBoZWxwIHRleHQKKworMjAxMC0wNC0xNiAxMzowOCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgZG9uJ3QgZG91YmxlIGRlY2xhcmUgYSBzdHJ1Y3QKKworMjAxMC0wNC0xNiAwMzozMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY2VydCB1dGlsIGZpeGVzCisgICAtIHJlbW92ZSB1bnVzZWQgdmFycyBhbmQgZHVwbGljYXRlIGNvZGUKKyAgIC0gY2hlY2sgcHJ0IGJlZm9yZSBmcmVlCisgICAtIG5ldyBmdW5jIGZvciB0eXBlIGZyb20gZmlsZW5hbWUKKyAgIC0gbmV3IGZ1bmN0aW9ucyBmb3IgZmluZGluZyBzdWJzZXRzIGZyb20gZmlsZW5hbWUKKyAgIC0gZml4IHR5cGVzIGluIGtleSBzZWFyY2ggZnVuY3Rpb24gYnV0IHRoZW4gaWZkZWYgaWYgKHVudXNlZAorICAgZnVuY3Rpb24pCisKKzIwMTAtMDQtMTUgMjI6NTcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIHVzZSBhIHN0cnVjdHVyZSByZWZlcmVuY2UgdG8gcHJlZGVjbGFyZSB0aGUgc3RydWN0dXJlCisKKzIwMTAtMDQtMTUgMjE6MjUgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGNvcnJlY3QgZGVjbGFyYXRpb24gb2YgdGhlIGZfb3BlbiBjb21tYW5kIG5vdyByZXF1aXJpbmcgcmV0dXJuaW5nCisgICBhIHRyYW5zcG9ydAorCisyMDEwLTA0LTE1IDIxOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZW1vdmUgdW5uZWVkZWQgY29uZmlnIGNvbnRhaW5lcgorCisyMDEwLTA0LTE1IDIxOjAyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3B5IGZpbmdlcnByaW50IHRyYW5zcG9ydCBpbmZvcm1hdGlvbiBpbnRvIG5ldyB0bHMgc3RydWN0dXJlCisgICB3aXRoaW4gRFRMU1VEUCBzbyBwZXItdHJhbnNwb3J0IGZpbmdlcnByaW50cyBjYW4gYmUgc3BlY2lmaWVkCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHByb3Blcmx5IGNoZWNrIGZvciB0bHNiYXNlIHBvaW50ZXJzIGluIGR0bHN1ZHBfc2VuZCgpCisKKzIwMTAtMDQtMTUgMjE6MDEgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIGdyZXAgdGhlIHRyYW5zcG9ydCBsaXN0IGZvciBUTFMgbm90IGp1c3QgRFRMUyBmb3IgY2hlY2tpbmcgZm9yCisgICAtbHNzbAorCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBidWcgZml4ZXMgYW5kIG1hZGUgVExTVENQIHdvcmsgd2l0aCB0aGUgLVQgZmxhZworCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbWFrZSB0aGUgZl9vcGVuIGNhbGwgYXNzaWduIHRoZSBuZXcgdHJhbnNwb3J0IHBvaW50ZXIgdG8gdXNlIChhbmQKKyAgIGNoZWNrIGlmIE5VTEwgYXMgYSBmYWlsdXJlIGNvbmRpdGlvbgorCisyMDEwLTA0LTE1IDIxOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBiZWdpbiB3b3JrIG1vdmluZyBEVExTIGNvbmZpZyByb3V0aW5lIGluIHBsYWNlCisKKzIwMTAtMDQtMTUgMjE6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBwYXNzIHRoZSBlbnRpcmUgdGxzYmFzZSB0byB0aGUgY2xpZW50X3NldHVwCisKKzIwMTAtMDQtMTUgMjE6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCBzbm1wbGliL3NubXBfYXBpLmMsIAorICAgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc3RhcnRpbmcgdGhlIHN0b3Jpbmcgb2YgY29uZmlnIGRhdGEgaW50byB0aGUgdGxzYmFzZQorCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjaGFuZ2UgY2xpZW50IHNzbCBzZXR1cCB0byBhbGxvdyBmb3IgZGlyZWN0IGZpbmdlcnByaW50CisgICBzcGVjaWZpY2F0aW9uIG9mIG15L3RoZWlyIGNlcnRzCisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogIGFnZW50L3NubXBfYWdlbnQuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsIAorICAgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNwbGl0IFRMUyBpbnRvIGNyZWF0aW9uL2Nsb3NlIGZ1bmN0aW9ucyBmb3IgZXZlbnR1YWwgY29uZmlnCisgICBwYXNzaW5nIHN1cHBvcnQKKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBwYXNzIHRyYW5zcG9ydCBjb25maWcgZGF0YSB0byB0aGUgdHJhbnNwb3J0IGZfY29uZmlnKCkgZnVuY3Rpb24KKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHJldHVybiBOVUxMIG9uIHRyYW5zcG9ydCBjb25maWcgZXJyb3IKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIE5FV1M6IGFwcHM6IC1UIGNvbW1hbmQgbGluZSBmbGFnIGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZQorICAgdHJhbnNwb3J0cworCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgY2hlY2sgdHJhbnNwb3J0IE5VTExuZXNzIGJlZm9yZSB1c2luZworCisyMDEwLTA0LTE1IDIwOjU4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGJlZ2lubmluZyBvZiB3b3JrIHRvIG1ha2UgdHJhbnNwb3J0cyBjb25maWd1cmFibGUgd2l0aAorICAgc3VwcGxpbWVudGFsIGNvbmZpZ3VyYXRpb24gZGF0YSBhbmQgbmV3IGNhbGxzIGZvciBmX29wZW4vZl9jb25maWcKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGRlZCB0ZXh0IGluIGNvbW1lbnRzIGZyb20gZnV0dXJlIFJGQyB0byBkb2N1bWVudCB0aGUKKyAgIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDQtMTUgMTg6NTEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1hcmsgcGVtIHcva2V5IGFzIGlkZW50aXR5OyB0d2VhayBwYXJ0bmVyIGRlYnVnOyBjb21wYXJlIGZpbGUKKyAgIGN0aW1lIGFnYWluc3QgaW5kZXggdG9vCisKKzIwMTAtMDQtMTUgMTc6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHVzZSBsb2NhbCBzcGFjZSB0byByZWZvcm1hdCBjZXJ0IGZvciBzZWFyY2gKIAogMjAxMC0wNC0xNSAxNjo1NSAgYnZhc3NjaGUKIAotICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKyAgICogd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaDoKIAogICAgUGFydGlhbGx5IHJldmVydGVkIHIxODQ5NjoKICAgIC0gQ29tbWVudGVkIG91dCAjZGVmaW5lIE5FVFNOTVBfVVNFX0RMTCBhZ2FpbiBpbiBmaWxlCkBAIC0yNDQ0LDYgKzQzNTQwLDU1IEBACiAgICBvciBWNS41IGJyYW5jaGVzIGFuZCBoZW5jZSB0aGVyZSB3YXMgbm8gcmVhc29uIHRvIGRpc2FibGUgdGhpcwogICAgcHJlcHJvY2Vzc29yIHN5bWJvbC4KIAorMjAxMC0wNC0xNSAxNTowOCAgbWFyegorCisgICAqIGxvY2FsL01ha2VmaWxlLmluOgorCisgICBhZGQgbmV0LXNubXAtY2VydCB0byBtYWtlL2luc3RhbGwKKworMjAxMC0wNC0xNSAxMDo1MiAganNhZnJhbmVrCisKKyAgICogdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0OgorCisgICBUZXN0cyBub3Qgd29ya2luZyBmb3IgVENQIHNob3VsZCBiZSBza2lwcGVkIGFsc28gZm9yIFRDUDYuCisKKzIwMTAtMDQtMTQgMTg6MTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGZpeCB2YXJzL3RleHQgZnJvbSBjdXQtbi1wYXN0ZQorCisyMDEwLTA0LTE0IDE3OjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggY29tbWVudHMKKworMjAxMC0wNC0xNCAxNzo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbG90cyBvZiBjZXJ0IHVwZGF0ZXMKKyAgIC0gY2hhbmdlIGNlcnQgc3ViZGlyIHNlYXJjaGluZyB0byBtYXRjaCBuZXQtc25tcC1jZXJ0CisgICAtIHVwZGF0ZSBrZXkgdHlwZSBoYW5kbGluZworICAgLSBpZ25vcmUgd29ybGQgcmVhZGFibGUga2V5cworICAgLSBrZWVwIHR5cGUgaW4gaW5kZXhlcworICAgLSB0d2VhayBjZXJ0L2tleSBwcmludCBmb3JtYXQKKworMjAxMC0wNC0xNCAxNzo0NCAgcnN0b3J5CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgbWFrZSBuZXQtc25tcC1jZXJ0IGV4ZWN1dGFibGUKKworMjAxMC0wNC0xNCAxMzoxMiAganNhZnJhbmVrCisKKyAgICogIHRlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvVDEyMHByb3h5Z2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQsIHRlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbDoKKworICAgRml4ZWQgdGVzdHMgJ1Byb3h5IEdFVC9TRVQgc3VwcG9ydCcgYW5kICdTTk1QdjIgdmFjbSBkZW5pYWwKKyAgIHN1cHBvcnQnIHdpdGggdWRwNiB0cmFuc3BvcnQuCisKIDIwMTAtMDQtMTQgMDk6NDcgIGR0czEyCiAKICAgICogIHdpbjMyLCB3aW4zMi9iaW4sIHdpbjMyL2Rpc3QsIHdpbjMyL2Rpc3QvaHRtbGhlbHAsICAgCkBAIC0yNDUyLDEwMSArNDM1OTcsMTcyIEBACiAgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQsIHdpbjMyL2xpYnNubXAsIHdpbjMyL2xpYnNubXBfZGxsLCAgIAogICAgICAgd2luMzIvbGlidWNkbWlicywgd2luMzIvbG9jYWwsIHdpbjMyL25ldC1zbm1wLCAgIAogICAgICAgd2luMzIvbmV0LXNubXAvYWdlbnQsIHdpbjMyL25ldC1zbm1wL2xpYnJhcnksIHdpbjMyL25ldHNubXBtaWJzLCAgCi0gICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGssIHdpbjMyL3NubXBidWxrZ2V0LCB3aW4zMi9zbm1wYnVsa3dhbGssICAgCi0gICAgICB3aW4zMi9zbm1wZCwgd2luMzIvc25tcGRlbHRhLCB3aW4zMi9zbm1wZGYsIHdpbjMyL3NubXBkc2RrLCAgIAotICAgICAgd2luMzIvc25tcGdldCwgd2luMzIvc25tcGdldG5leHQsIHdpbjMyL3NubXBuZXRzdGF0LCAgIAotICAgICAgd2luMzIvc25tcHNldCwgd2luMzIvc25tcHN0YXR1cywgd2luMzIvc25tcHRhYmxlLCB3aW4zMi9zbm1wdGVzdCwgCi0gICAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUsIHdpbjMyL3NubXB0cmFwLCB3aW4zMi9zbm1wdHJhcGQsICAgCi0gICAgICB3aW4zMi9zbm1wdXNtLCB3aW4zMi9zbm1wdmFjbSwgd2luMzIvc25tcHdhbGs6CisgICAgICAgd2luMzIvc25tcGJ1bGtnZXQsIHdpbjMyL3NubXBidWxrd2Fsaywgd2luMzIvc25tcGQsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEsIHdpbjMyL3NubXBkZiwgd2luMzIvc25tcGdldCwgd2luMzIvc25tcGdldG5leHQsICAKKyAgICAgICB3aW4zMi9zbm1wbmV0c3RhdCwgd2luMzIvc25tcHNldCwgd2luMzIvc25tcHN0YXR1cywgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZSwgd2luMzIvc25tcHRlc3QsIHdpbjMyL3NubXB0cmFuc2xhdGUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcCwgd2luMzIvc25tcHRyYXBkLCB3aW4zMi9zbm1wdXNtLCB3aW4zMi9zbm1wdmFjbSwgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrOgogCiAgICBEb24ndCB0cnkgdG8gU1ZOLW1hbmFnZSB0aGUgV2luZG93cyBiYXRjaCBidWlsZCBpbmZyYXN0cnVjdHVyZQogICAgKGFkZCByZWxlYXNlLCBkZWJ1ZywgTWFrZWZpbGUgdG8gdGhlIHByZXZpb3VzIGlnbm9yZSBsaXN0KQogCiAyMDEwLTA0LTE0IDA4OjE2ICBkdHMxMgogCi0gICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CiAKICAgIEZpeCBXaW5kb3dzIGJhdGNoIGJ1aWxkIHVzaW5nIFZpc3VhbCBTdHVkaW8gd2l0aCBkeW5hbWljIGxpbmtpbmcuCiAgICBVbnJlZmVyZW5jZWQgc3ltYm9sIGludHJvZHVjZWQgYnkgU1ZOIHJldmlzaW9uIDE4MzkzCiAKLTIwMTAtMDQtMTQgMDg6MTEgIGR0czEyCi0KLSAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaDoKLQotICAgRml4IFdpbmRvd3MgYmF0Y2ggYnVpbGQgdXNpbmcgVmlzdWFsIFN0dWRpbyAyMDA4IHdpdGggUGxhdGZvcm0KLSAgIFNESyBlbmFibGVkLgotCiAyMDEwLTA0LTE0IDA4OjA4ICBkdHMxMgogCi0gICAqICB3aW4zMi9idWlsZC5wbCwgd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCwgICAKLSAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAotICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisgICAqIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg6CiAKLSAgIENIQU5HRVM6IFdpbjMyOiBGaXggYmF0Y2ggYnVpbGQgdXNpbmcgcmVjZW50IHZlcnNpb25zIG9mIFZpc3VhbCBTdHVkaW8uCisgICBDSEFOR0VTOiBXaW4zMjogRml4IGJhdGNoIGJ1aWxkIHVzaW5nIHJlY2VudCB2ZXJzaW9ucyBvZiBWaXN1YWwKKyAgIFN0dWRpby4KICAgIFBhcnRpYWwgYmFjayBwb3J0IG9mIFNWTiByZXZpc2lvbnMgMTc1NzMgYW5kIDE3Njk2LgogCi0yMDEwLTA0LTA3IDE0OjM3ICBkdHMxMgorMjAxMC0wNC0xNCAwMTo0NyAgbWFyegogCi0gICAqIENIQU5HRVMsIE5FV1M6CisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBmaXggcGVybXMgb24gY3JlYXRlZCBmaWxlcyAtcnctLS0tLS0tLCB1bWFzaygwNzcpCiAKLTIwMTAtMDQtMDcgMTQ6MjIgIGR0czEyCisyMDEwLTA0LTEzIDIyOjE1ICBtYXJ6CiAKLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQsIGxvY2FsL25ldC1zbm1wLWNlcnQuY29uZjoKIAotICAgbWFrZSBkZXBlbmQKKyAgIGZpeCBwZXJtcywgYWRkIC0tY24vLWMsIGJldHRlciBkYXRlcyBkZWZhdWx0cywgc25tcC10bHMgb3JnX3VuaXQsCisgICBhZGRlZCBpbml0aWFsIGR1bW15IGNvbmZpZyBmaWxlCiAKLTIwMTAtMDQtMDcgMTQ6MTIgIGR0czEyCisyMDEwLTA0LTEzIDE0OjIxICBtYXJ6CiAKLSAgICogIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAotICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsICAKLSAgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBmaXhlcyBmb3Igc2hvdyBjbWRzLCBjbWRsaW5lLCBoZWxwCiAKLTIwMTAtMDQtMDcgMTQ6MDggIGR0czEyCisyMDEwLTA0LTEzIDAyOjE3ICByc3RvcnkKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgIGFkZCBzdXBwb3J0IGZvciBrZXkrY2VydCBpbiAucGVtIGZpbGVzOyBtaXNjIHR3ZWFrcworCisyMDEwLTA0LTEwIDIzOjI0ICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBidWlsZCBmaXggZm9yIEM4OSBjb21waWxlcnMgKGUuZy4gb24gSFAtVVggMTAuMjApCisKKzIwMTAtMDQtMTAgMjI6MjUgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmg6CisKKyAgIGluaXRpYWwgY3V0IGF0IHRsc3RtQ2VydFRvVFNOVGFibGUKKworMjAxMC0wNC0xMCAyMjoyNCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oOgorCisgICBhZGQgZGVmaW5lIG9mIG1heCBoYXNoIGNvbnN0YW50CisKKzIwMTAtMDQtMTAgMjI6MjQgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jOgorCisgICB1c2UgY2VydCB1dGlsIGNoZWNrIGZvciBmaW5nZXJwcmludCBsZW4vYWxnb3JpdGhtCisKKzIwMTAtMDQtMTAgMTI6NTkgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBzaG93IGNtZCBmaXhlcworCisyMDEwLTA0LTA5IDIxOjMyICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZmFpcmx5IGZ1bmN0aW9uYWwgKG5vbi1pbnRlcmFjdGl2ZSkgLSBiZSBpdCBrbm93bjogdGhlcmUgYXJlIGJ1Z3MKKworMjAxMC0wNC0wOSAyMDo1NCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaDoKKworICAgbWVyZ2Ugc29tZSB0YWJsZV9kYXRhLmNvbmYgY2hhbmdlczsgcmVtb3ZlIHVudXNlZCBjb2RlIGFuZCBhCisgICBidW5jaCBvZiB2ZXJib3NlIGNvbW1lbnRzCisKKzIwMTAtMDQtMDggMTQ6NTcgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLXVwZGF0ZToKKworICAgdXNlIGZ1bGwgcGF0aAorCisyMDEwLTA0LTA4IDEwOjU1ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oOgorCisgICBDaGVjayByZXN1bHRzIG9mIGNhbGxzIHRvIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSBhbmQgbG9nCisgICBhbiBlcnJvci4KKyAgIFRoaXMgYWxsb3dzIHVzZXJzIHRvIHJlbGF0ZSB2YXJpb3VzICdjNjQgMzIgYml0IGNoZWNrIGZhaWxlZCcKKyAgIGVycm9ycyB3aXRoIHNwZWNpZmljIGNvdW50ZXIuCisKKzIwMTAtMDQtMDggMDE6MDkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaDoKKworICAgYWRkIHByb3RvdHlwZSBmb3IgbmV3IGZ1bmN0aW9uCisKKzIwMTAtMDQtMDggMDE6MDUgIHJzdG9yeQorCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHRyYW5zbGF0ZSBOT1NVQ0gqL0VORE9GTUlCIGVycm9ycyBkdXJpbmcgUkVTRVJWRTEKKyAgIHRvIE5PQ1JFQVRJT04KKworMjAxMC0wNC0wOCAwMDo1NiAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBORVdTOiBzbm1wZDogdGFibGVfZGF0YS90ZGF0YSBuZXh0IGhhbmRsZXIgd2lsbCBub3QgYmUgY2FsbGVkCisgICBkdXJpbmcgZ2V0CisgICBwcm9jZXNzaW5nIGlmIG5vIHZhbGlkIHJvd3MgYXJlIGZvdW5kIGZvciB0aGUgaGFuZGxlcgorCisyMDEwLTA0LTA4IDAwOjU2ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBhZ2VudCB3aWxsIG5vIGxvbmdlciBjYWxsIHRhYmxlIGhhbmRsZXJzIGlmIGEgc2V0CisgICByZXF1ZXN0IGZvcgorICAgdGhlIGhhbmRsZXIgaGFzIGludmFsaWQgaW5kZXhlcworICAgQ0hBTkdFUzogc25tcGQ6IGRvbid0IGNhbGwgY2xlYW51cCBvbiBmaXJzdCByZXF1ZXN0IG9uIGJhZAorICAgaW5kZXhlcy4gaW5zdGVhZCwKKyAgIHNldCBhY3R1YWwgZXJyb3IgbGF0ZXIsIGFuZCBmcmVlIHJlcXVlc3QgZGF0YSBzZXRzIG9uIGZpcnN0CisgICByZXF1ZXN0IGZvciBzZXRzCisKKzIwMTAtMDQtMDggMDA6NTYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGZ1bmN0aW9uIHRvIHZhbGlkYXRlIGZpbmdlcnByaW50IHZhcmJpbmQKKworMjAxMC0wNC0wNyAyMjo1NiAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgU29sYXJpcyB0ciBkb2Vzbid0IHN1cHBvcnQgY2hhcmFjdGVyIHJhbmdlcyByZWxpYWJseSAoc2VlIHRoZQorICAgYXV0b2NvbmYgbWFudWFsKSwgY2hhbmdlIHRoZSBleHByZXNzaW9uIHRvIG9uZSB0aGF0IGlzIHNpbXBsZQorICAgZW5vdWdoIHRvIGIgc3VwcG9ydGVkLgogCiAyMDEwLTA0LTA3IDE0OjA1ICBkdHMxMgogCkBAIC0yNTU0LDI3ICs0Mzc3MCw1MTAgQEAKIAogICAgSW5zZXJ0IHRoZSBjYWNoZSBoZWxwZXIgY29ycmVjdGx5LgogCisyMDEwLTA0LTA3IDEwOjQwICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGQgZnVuY3Rpb25zIHRvIHJlbW92ZSBsaXN0L3JvdyBkYXRhIGZyb20KKyAgIHJlcXVlc3QgbGlzdAorCisyMDEwLTA0LTA3IDEwOjQwICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIGlmZGVmIHZhciBkZWNsIGZvciB2YXJzIG9ubHkgdXNlZCBpbiBsYXRlciBpZmRlZiBibG9jaworCisyMDEwLTA0LTA3IDEwOjQwICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wLXRjLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZCBmdW5jdGlvbiB0byB2YWxpZGF0ZSBSb3dTdGF0dXMgYW5kCisgICBTdG9yYWdlVHlwZSB2YXJiaW5kcworICAgLSBhbHNvIHJlbW92ZSBzb21lIGR1cGxpY2F0ZSBjb2RlIGFuZCBmaXggY29tbWVudHMgaW5kZW50IG1hbmdsZWQKKworMjAxMC0wNC0wNyAxMDozOSAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMtdXBkYXRlLCBtYW4vbWliMmMtdXBkYXRlLjEuZGVmOgorCisgICB1cGRhdGUgbWFuIHBhZ2U7IGZpeCBzaGVsbCByZWRpcmVjdDsgY3JlYXRlIGV4YW1wbGUgcmNmaWxlIGlmCisgICBtaXNzaW5nCisKKzIwMTAtMDQtMDcgMDc6MTUgIG1hZ2ZyCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIFVzZSBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgaW5zdGVhZCBvZiBESVNBQkxFX01JQl9MT0FESU5HCisKKzIwMTAtMDQtMDcgMDA6MzggIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IE9ubHkgZW5hYmxlIGhvc3RTd0luc3QgcnBtIHN1cHBvcnQgb24gbGludXggaG9zdHMKKyAgIHdpdGggbGlicnBtLiBUaGlzIG1ha2VzIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIG9uIG5vbi1ycG0gbGludXgKKyAgIGRpc3RyaWJ1dGlvbnMuCisKKzIwMTAtMDQtMDcgMDA6MTQgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtYXV0aCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYsIHRlc3RpbmcvdGVzdHMvVDA1MHNubXB2M3RyYXAsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcCwgdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTRhZ2VudHYyY3RyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQsIHRlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWw6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IENoYW5nZSB0aGUgdGVzdCBzdWl0ZSB0byB3b3JrIGV2ZW4gaWYgbWliCisgICBsb29rdXAgaXMgZGlzYWJsZWQuCisKKzIwMTAtMDQtMDcgMDA6MTEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzY6CisKKyAgIENoZWNrIGZvciBjb20yc2VjNiwgbm90IGNvbTJzZWMuCisKKzIwMTAtMDQtMDYgMjI6NTEgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIE1vdmUgZGlyZWN0b3J5IGNyZWF0aW9uIGJlZm9yZSB0aGUgZGlyZWN0b3JpZXMgYXJlIHVzZWQuCisKIDIwMTAtMDQtMDYgMTE6MDMgIGR0czEyCiAKICAgICogRkFROgogCiAgICBQeXRob24gaXMgYXBwYXJlbnRseSBjbGllbnQtc2lkZSBvbmx5LgogCi0yMDEwLTA0LTA2IDA4OjU2ICBkdHMxMgorMjAxMC0wNC0wNiAxMDowNiAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKyAgICogYWdlbnQvc25tcGQuYzoKIAotICAgTkVXUzogc25tcGQ6IExhdGNoIGxhcmdlLWRpc2sgc3RhdGlzdGljcyBhdCAyVGIgKHJhdGhlciB0aGFuCi0gICB3cmFwcGluZy4KKyAgIFNldCBzdXBwbGVtZW50YXJ5IGdyb3VwcyBiZWZvcmUgY2hhbmdpbmcgVUlECisgICAod2hpY2ggcHJvYmFibHkgaW52b2x2ZXMgZ2l2aW5nIHVwIHByaXZpbGVnZXMpCiAKLTIwMTAtMDMtMjkgMTU6MjYgIGR0czEyCisyMDEwLTA0LTA2IDA4OjU3ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBzbm1wbGliL3BhcnNlLmM6CisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKIAotICAgSW5jbHVkZSBNSUIgZGlyZWN0b3J5IHNlYXJjaCBwYXRoIGluIHJlcG9ydHMgb2YgbWlzc2luZyBNSUIKLSAgIGZpbGVzLgotICAgSW5jbHVkZSBjb25maWcgZmlsZSBzZWFyY2ggcGF0aCBpbiByZXBvcnRzIG9mIG1pc3NpbmcgYWNjZXNzCi0gICBjb250cm9sIHNldHRpbmdzLgorICAgRG9jdW1lbnQgbGFyZ2UtZGlzayBzdGF0aXN0aWNzIGFzIGxhdGNoaW5nIGF0IDJUYiAocmF0aGVyIHRoYW4KKyAgIHdyYXBwaW5nKS4KKworMjAxMC0wNC0wNiAwMTo1MiAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMsIG1hbi9taWIyYy4xLmRlZjoKKworICAgTkVXUzogbWliMmM6IG1pYjJjIGNhbiBub3cgb3B0aW9uYWxseSBydW4gc2VkIG9uIGdlbmVyYXRlZCBjb2RlCisKKzIwMTAtMDQtMDYgMDE6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjb252ZXJ0IEMrKyBjb21tZW50cyB0byBDIGNvbW1lbnRzCisKKzIwMTAtMDQtMDYgMDE6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtb3ZlIHB0ciBjaGVjayBiZWZvcmUgcHJ0IHVzZQorCisyMDEwLTA0LTA2IDAxOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgZmlsZW5hbWUgdG8gZGVidWcgb24gbmV3IGNlcnRzOyBtYWtlIHN0YXRpYyBmdW5jIHRvIHJldHVybgorICAgbW9kZSBuYW1lcworCisyMDEwLTA0LTA2IDAwOjQ3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhbGxvdyBhIGZvdW5kIGZpbmdlcnByaW50IHNlbGYtc2lnbmVkIGNlcnQgZm9yIG5vdzsgZXZlbnR1YWxseQorICAgbmVlZCB0byByZXNwZWN0IHRoZSBNSUIgY29uZmlnIHRhYmxlCisKKzIwMTAtMDQtMDYgMDA6MTIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIG1rZGlyIHNubXBsaWIvdHJhbnNwb3J0cyB3aGVuIERORSBmb3IgYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlCisgICBkaXIKKworMjAxMC0wNC0wNiAwMDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVtb3ZlIHVudXNlZCB2YXJzCisKKzIwMTAtMDQtMDYgMDA6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAxMC0wNC0wNiAwMDoxMSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGVycm9yIGNvZGUgY2xlYW51cCBmb3IgdGxzYmFzZV93cmFwdXBfcmVjdgorCisyMDEwLTA0LTA1IDIzOjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vcmUgYmV0dGVyIGVycm9yL2RlYnVnIGNvZGVzCisKKzIwMTAtMDQtMDUgMjM6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgY29tbWVudHMgZnJvbSB0aGUgZnV0dXJlLVJGQyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb247IHVzZQorICAgZmxhZ3MgZm9yIHNlcnZlci9jbGllbnQgc3BlY2lmaWNhdGlvbiBmb3IgZXhwYW5zaW9uCisKKzIwMTAtMDQtMDUgMjM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciB1c2FnZSBjb25zdHJhaW50cworCisyMDEwLTA0LTA1IDIzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vdmUgZnVuY3Rpb24gcHJvdGVjdGlvbiBsb2dpYyBpbiBhIHRvcC1sZXZlbCBjaGVjaworCisyMDEwLTA0LTAyIDE2OjM2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBmaXggaW5pdCBvcmRlcmluZworCisyMDEwLTA0LTAyIDE2OjM2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbXYgdGxzYmFzZSBpbml0IGZ1bmN0aW9uIHRvIGEgcHJvcGVyIGN0b3IgZm9yIGF1dG8tY2FsbGluZworCisyMDEwLTA0LTAyIDE2OjM2ICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGdlbmVyYXRlIHRoZSB0cmFuc3BvcnQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gbGlzdAorICAgZHluYW1pY2FsbHkgYW5kIHVzZSBpdAorCisyMDEwLTA0LTAyIDE2OjM1ICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBTU0hEb21haW4uYywgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi90cmFuc3BvcnRzLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogbW92ZWQgdHJhbnNwb3J0IGNvZGUgaW50byBhIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbgorICAgc25tcGxpYgorCisyMDEwLTA0LTAyIDA5OjAyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jOgorCisgICBEbyBub3QgYXR0ZW1wdCB0byBjaGVjayBzaXplb2Ygdm9pZCB0byBvYnRhaW4gdGhlIGFtb3VudCBvZgorICAgbWVtb3J5IHRvIGNvcHkuCisKKzIwMTAtMDQtMDEgMTc6MTEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgaW5zdGVhZCBvZiBmd2QgZGVjbGFyZXMsIHJlcXVpcmUgb3RoZXIgaGVhZGVyCisKKzIwMTAtMDQtMDEgMTc6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZworCisyMDEwLTA0LTAxIDE3OjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBvdXRkYXRlZCBkZWJ1ZyBtc2cKKworMjAxMC0wNC0wMSAxNzowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICB1c2UgY2VydGFwaSB0byBmaW5kIGNlcnRzL2tleXMKKworMjAxMC0wNC0wMSAxNDo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZWdpc3RlciBleHRyYVg1MDlTdWJEaXIgdG9rZW4KKworMjAxMC0wNC0wMSAxNDoxOCAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBjaGVjayBwdHIgYmVmb3JlIHVzZQorCisyMDEwLTA0LTAxIDE0OjE4ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIGNoZWNrIHB0ciBiZWZvcmUgdXNlCisKKzIwMTAtMDQtMDEgMTM6MTMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICBhZGQgcGVyc2lzdGVudCBzdG9yYWdlOyB0b2tlbiBmb3IgY3JlYXRpbmcgZW50cmllcyBpbiBzbm1wZC5jb25mOworICAgZml4IGluZGV4CisKKzIwMTAtMDQtMDEgMTM6MTIgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV3IGNlcnRpZmljYXRlIGFwaSB0byBzdXBwb3J0IHRscy9kdGxzCisKKzIwMTAtMDQtMDEgMTM6MTIgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgQ0hBTkdFUzogYWRkIGZ1bmN0aW9ucyB0byBnZXQgZmluZ2VycHJpbnQgZnJvbSBjZXJ0IGFuZCBsb2cKKyAgIG9wZW5zc2wgZXJycworCisyMDEwLTA0LTAxIDEyOjQ2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBmaXggdHlwbworCisyMDEwLTA0LTAxIDEwOjMzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgQnVpbGRzIGFnYWluIHdpdGggcHJlLUM5MCBjb21waWxlcnMuCisKKzIwMTAtMDQtMDEgMTA6MDEgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgQ0hBTkdFUzogbWliMmM6IHRhYmxlX2RhdGEgdGVtcGxhdGUgZW5oYW5jZW1lbnRzCisgICAtIGFkZCBlcnJvciBjaGVja3MgZHVyaW5nIHRhYmxlIGluaXQKKyAgIC0gY3JlYXRlIGNhY2hlIGVhcmxpZXIgc28gd2UgY2FuIGJhaWwgb24gZmFpbHVyZQorICAgLSBhZGQgb3B0aW9uIHRvIGNyZWF0ZS9kZWxldGUgcm93IHcvb3V0IGFkZGluZy9yZW1vdmluZyBmcm9tCisgICBjb250YWluZXIKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oOgorCisgICBhZGQgaGVscGZ1bCBwYXJhbSBuYW1lcyBhcyBoaW50cyBpbiBwcm90b3R5cGUKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBzZWFyY2ggZm9yIGNvbnRhaW5lciBzcGVjaWZpYyBjb250YWluZXIgYmVmb3JlIGdlbmVyaWMKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgsIHNubXBsaWIvZGlyX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL2ZpbGVfdXRpbHMuYzoKKworICAgTkVXUzogc25tcGxpYjogZW5oYW5jZSBmaWxlIHV0aWxzIGFuZCBkaXIgdXRpbHMKKyAgIC0gYWRkIG9wdGlvbmFsIHN0YXRzIHN0cnVjdCB0byBuZXRzbm1wX2ZpbGUKKyAgIC0gZ2VuZXJhbGl6ZSBkaXIgY29udGFpbmVyIGZpbHRlciwgYWRkIGNvbnRleHQgdG8gY2FsbGJhY2sKKyAgIC0gYWRkIG9wdGlvbiB0byBzdG9yZSBuZXRzbm1wX2ZpbGVzICh3L3N0YXRzKSBpbiBjb250YWluZXIKKyAgIGluc3RlYWQgb2YganVzdCBuYW1lCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgYWRkIHByb3RvdHlwZSB0byBoZWFkZXI7IGNoZWNrIHB0ciBiZWZvcmUgZGVyZWZlcmVuY2luZworCisyMDEwLTAzLTMxIDE1OjM0ICBqc2FmcmFuZWsKKworICAgKiAgbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL3NubXAtYnJpZGdlLW1pYiwgbWFuL01ha2VmaWxlLmluLCAgIAorICAgICAgbWFuL3NubXAtYnJpZGdlLW1pYi4xLCBtaWJzL0JSSURHRS1NSUIudHh0LCBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgbWlicy9NYWtlZmlsZS5taWI6CisKKyAgIE5FV1M6IG1pc2M6IFBBVENIOiAyOTUyNzA4OiBmcm9tIEplbnMgT3N0ZXJrYW1wOiBBZGRlZCBQZXJsCisgICBpbXBsZW1lbnRhdGlvbiBvZiBCUklER0UtTUlCCisKKzIwMTAtMDMtMzEgMDI6MTIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBwcm9wZXIgcGFja2V0IGxhYmVsaW5nIGZvciBEVExTVURQCisKKzIwMTAtMDMtMzEgMDI6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHVzZSBjb21tb24gY29udGV4dCBjcmVhdGlvbiBjb2RlCisKKzIwMTAtMDMtMzAgMjM6MjQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNoYW5nZSBUTFMgbWV0aG9kIHRvIFRMU3YxIGZyb20gU1NMdjIzCisKKzIwMTAtMDMtMzAgMjM6MjMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW92ZSBtb3JlIGNvbW1vbiBkYXRhIGFuZCBmdW5jdGlvbmFsaXR5IGludG8gdGhlIFRMUyBiYXNlCisKKzIwMTAtMDMtMzAgMjM6MjAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1pbm9yIFRMUyBjb2RlIGNsZWFudXAKKworMjAxMC0wMy0zMCAyMDoyOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJld29yayBpZigpIHdyYXBwaW5nIGZvciBsZXNzIGNvbmZ1c2lvbiBpbiBlcnJvciBoYW5kbGluZworCisyMDEwLTAzLTMwIDIwOjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29kZSBjb25zb2xpZGF0aW9uIGluIHN0YXJ0X25ld19jYWNoZWRfY29ubmVjdGlvCisKKzIwMTAtMDMtMzAgMjA6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZW5hbWUgZ2VuZXJpYyAnYmlvJyBwb2ludGVyIHRvICdyZWFkX2JpbycgZm9yIGJldHRlciByZWFkYWJpbGl0eQorCisyMDEwLTAzLTMwIDIwOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbW92ZSBidWZmZXJlZCBkYXRhIGNyZWF0aW9uIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIHJldXNlCisKKzIwMTAtMDMtMzAgMTc6NTIgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBpbml0aWFsIGNlcnQgZ2VuIHdyYXBwZXIgc2NyaXB0IC0gbm90IHdvcmtpbmcKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNsZWFuIHVwIGVycm9yIG91dHB1dCBzbyBpdCBkb2Vzbid0IHJlcG9ydCB3YW50X3JlYWQgYW5kCisgICB3YW50X3dyaXRlIGVycm9ycworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVuYW1pbmcgb2Ygc2VuZGluZyBmdW5jdGlvbiBmb3IgY2xhcml0eSBhbmQgY2hlY2sgb25lIG1vcmUKKyAgIGxvY2F0aW9uIGZvciBuZWVkZWQgb3V0Z29pbmcgcGFja2V0cworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYWRkZWQgZHRsc3VkcCB0cmFjaW5nIHRva2VucworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIENIQU5HRVM6IGFkZGVkIGEgbmV3IERFQlVHVFJBQ0VUT0soKSBtYWNybworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYmV0dGVyIGNvbW1lbnRzIGFuZCBtb3JlIHdvcmsgb24gc2VuZGluZyBidWZmZXJlZCBkYXRhIGluIHRoZQorICAgcmlnaHQgc3BvdHMKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGFyZ3VtZW50cyB0byBnZXRfY29tbW9uTmFtZQorCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYmVnaW5uaW5nIG9mIGNhY2hpbmcgb2YgcGFja2V0cyBiZWZvcmUgdGhleSBjYW4gYmUgc2VudCB2aWEgRFRMUworCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgaGFuZGxlIFNTTF9XQU5UX1JFQUQvV1JJVEUgYmV0dGVyOyBzdGlsbCBuZWVkIHRvIGJ1ZmZlciBvdXRnb2luZworICAgd3JpdGUgZGF0YQorCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbWlub3IgY2hhbmdlIHRvIG91dHB1dCBlcnJvciBwcmludGluZwogCiAyMDEwLTAzLTI5IDE1OjIwICBkdHMxMgogCkBAIC0yNTg2LDYgKzQ0Mjg1LDE5IEBACiAgICBOb3RlIHRoYXQgdGhpcyBjb3VsZCBwb3RlbnRpYWxseSBhZmZlY3QgdGhlIGJlaGF2aW91ciBvZgogICAgZXhpc3RpbmcgYWNjZXNzIGNvbnRyb2wgY29uZmlndXJhdGlvbnMuCiAKKzIwMTAtMDMtMjkgMTU6MTYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogcGVybDoKKyAgIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX3JlcXVlc3RfaW5mb1B0cjo6Z2V0VmFsdWUoKTogZG9uJ3QgcmV0dXJuCisgICBhIHBvaW50ZXIgdG8gYSBidWZmZXIgb24gdGhlIHN0YWNrLiBIb3cgY2FuIHRoaXMgaGF2ZSB3b3JrZWQKKyAgIHJlbGlhYmx5ID8/CisgICBDSEFOR0VTOiBwZXJsOgorICAgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfcmVxdWVzdF9pbmZvUHRyOjpzZXRWYWx1ZSgpLAorICAgQVNOX0NPVU5URVI2NDogZml4ZWQgYnVnIHRoYXQgY291bGQgY2F1c2UgdGhpcyBtZXRob2QgdG8gZmFpbAorICAgZXZlbiB3aGVuIGEgdmFsaWQgbnVtYmVyIHdhcyBwcm92aWRlZC4KKwogMjAxMC0wMy0yOSAxNToxNSAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXB1c20uYzoKQEAgLTI1OTQsNiArNDQzMDYsMTQ3IEBACiAgICB0cmFwcy4KICAgIFJlcG9ydGVkIGJ5IFNyaWthcGlsYW4gR2FuZGhpCiAKKzIwMTAtMDMtMjkgMTI6NDYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgQ2F0Y2ggc3RkZXJyIG9uIFdpbmRvd3MgdG9vLgorCisyMDEwLTAzLTI5IDExOjQ4ICBidmFzc2NoZQorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIEJ1aWxkcyBhZ2FpbiB3aXRoIHByZS1DOTAgY29tcGlsZXJzLgorCisyMDEwLTAzLTI5IDExOjE5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgcGVybC9PSUQvT0lELnhzLCAgIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGRlc3Ryb3lpbmcgYQorICAgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gb2JqZWN0LgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZmFpbHVyZSBvZgorICAgY3JlYXRpbmcgYSBOZXRTTk1QOjpPSUQgb2JqZWN0LgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgdGhlCisgICBOZXRTTk1QOjpPSUQ6OmdldHRhYmxlKCkgc3Vicm91dGluZS4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGFuIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzIHRyaWdnZXJlZCBieQorICAgdGhlIGltcGxlbWVudGF0aW9uIG9mIE5ldFNOTVA6OlNOTVAuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBhIFBEVSBwcm9jZXNzaW5nCisgICBlcnJvciBpbiBOZXRTTk1QOjpTTk1QLgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgbWVtb3J5IGxlYWtzIHRyaWdnZXJlZCBieSBjcmVhdGluZyBhbiBTTk1QdjMKKyAgIHNlc3Npb24gdmlhIE5ldFNOTVA6OlNOTVAuCisgICAKKyAgIEFsc28gZml4ZWQgdGhlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgYWNjZXNzZXMgdHJpZ2dlcmVkIGJ5CisgICBhZGRpbmcgYSB2YXJiaW5kIHRvIGEgUERVIHZpYSBOZXRTTk1QOjpTTk1QIGludHJvZHVjZWQgYSBmZXcgZGF5cworICAgYWdvLgorICAgCisgICBUaGUgYnVncyBtZW50aW9uZWQgYWJvdmUgaGF2ZSBiZWVuIGZvdW5kIGJ5IGluc3BlY3RpbmcgdGhlIG91dHB1dAorICAgb2YgdGhlIGZvbGxvd2luZyBzaGVsbCBjb21tYW5kOgorICAgY2QgcGVybCAmJiB2YWxncmluZCAtLXRyYWNlLWNoaWxkcmVuPXllcyAtLWxlYWstY2hlY2s9ZnVsbCBtYWtlCisgICB0ZXN0CisKKzIwMTAtMDMtMjkgMTA6NTkgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgU3dpdGNoZWQgYmFjayB0byB0aGUgcHJldmlvdXMgd2F5IG9mIHN0YXJ0aW5nIHByb2Nlc3NlcworICAgYXN5bmNocm9ub3VzbHkgYmVjYXVzZSBpdCBpcyBtb3JlIHJlbGlhYmxlLgorCisyMDEwLTAzLTI5IDA5OjI3ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIERvIG5vdCBvbmx5IHNhdmUgc25tcGQgLyBzbm1wdHJhcGQgbG9ncyBidXQgYWxzbyB0aGUgc3Rkb3V0IC8KKyAgIHN0ZGVyciBvdXRwdXQgZ2VuZXJhdGVkIGJ5IHRoZXNlIHByb2Nlc3Nlcy4KKworMjAxMC0wMy0yOCAxNjowOSAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBDaGFuZ2VzIGluIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisgICAtIEFkZGVkIGNvbW1hbmQtbGluZSBvcHRpb24gLWQgZm9yIHNubXBkIGFuZCBzbm1wdHJhcGQuCisgICAtIHNubXBkIGFuZCBzbm1wdHJhcGQgb3V0cHV0IGlzIG5vdyBzYXZlZCB0byBhIGxvZyBmaWxlIChvbmUgcGVyCisgICB0ZXN0KS4KKyAgIC0gUmV3cm90ZSBQZXJsIGNvZGUgZm9yIHN0YXJ0aW5nIHRoZSBzbm1wZC9zbm1wdHJhcGQgcHJvY2Vzc2VzCisgICBzdWNoIHRoYXQgdGhlIHNhbWUgY29kZSB3b3JrcyBvbiBVbml4IGFuZCBvbiBXaW5kb3dzLgorCisyMDEwLTAzLTI4IDEzOjM3ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYWRkZWQgdGhlIGZ1bmN0aW9ucyBuZXRzbm1wX21hbGxvYygpLAorICAgbmV0c25tcF9jYWxsb2MoKSwgbmV0c25tcF9yZWFsbG9jKCksIG5ldHNubXBfc3RyZHVwKCkgYW5kCisgICBuZXRzbm1wX2ZyZWUoKS4KKyAgIENIQU5HRVM6IFdpbjMyOiBzbm1wbGliOiByZW1vdmVkIHRoZSB0cm91Ymxlc29tZSAjZGVmaW5lIG1hbGxvYworICAgbmV0c25tcF9tYWxsb2MgZXRjLiBUaGlzIG1lYW5zIHRoYXQgd2hlbiBjYWxsaW5nIGZ1bmN0aW9ucyBmcm9tCisgICB0aGUgTmV0LVNOTVAgRExMIGZyb20gQyBvciBDKysgY29kZSB0aGF0IGlzIGJlaW5nIGxpbmtlZCBhZ2FpbnN0CisgICBhbm90aGVyIHZlcnNpb24gb2YgdGhlIE1TVkMgcnVudGltZSBETEwgdGhhbiB0aGUgTmV0LVNOTVAgRExMLAorICAgYW5kIHdoZW4gYWxsb2NhdGluZyBtZW1vcnkgdGhhdCB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBOZXQtU05NUAorICAgRExMLCB5b3Ugd2lsbCBlaXRoZXIgaGF2ZSB0byBjYWxsIHRoZSBOZXQtU05NUCBtZW1vcnkgYWxsb2NhdGlvbgorICAgZnVuY3Rpb25zIGV4cGxpY2l0bHkgb3IgcmVkZWZpbmUgbWFsbG9jKCkgZXRjLiB5b3Vyc2VsZi4KKworMjAxMC0wMy0yOCAxMjo0NiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgRml4ZWQgYSByZWNlbnRseSByZWludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wMy0yNyAxODo0MiAgYnZhc3NjaGUKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgQWRkZWQgYSBjaGVjayBmb3IgaW52b2NhdGlvbiBvZiBjYWxsb2MoKSBmcm9tIFhTVUJzLgorCisyMDEwLTAzLTI2IDE5OjE2ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgcGVybC9PSUQvT0lELnhzLCAgIAorICAgICAgcGVybC9TTk1QL1NOTVAueHMsIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54czoKKworICAgRm9sbG93LXVwIGZvciByMTgzNjggYW5kIHIxODM2OTogbWFkZSBzdXJlIHRoYXQgdGhlIE5ldC1TTk1QIFBlcmwKKyAgIGV4dGVuc2lvbnMgY29tcGlsZSB3aXRob3V0IHRyaWdnZXJpbmcgcHJlcHJvY2Vzc29yIHdhcm5pbmdzIGFib3V0CisgICByZWRlZmluaW5nIG1hbGxvYyBldGMuIG5vciB0cmlnZ2VyICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9ycyBvbgorICAgV2luZG93cy4KKworMjAxMC0wMy0yNiAxNDo0NCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYzoKKworICAgUmVmYWN0b3Jpbmc6IGludHJvZHVjZWQgYSBuZXcgZnVuY3Rpb246CisgICBuZXRzbm1wX3NldF9ub25fYmxvY2tpbmdfbW9kZSgpLgorCisyMDEwLTAzLTI2IDExOjU4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsICAKKyAgICAgICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAKKyAgICAgICAgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL21pYi5jLCBzbm1wbGliL3BhcnNlLmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IHVzaW5nIHZhcmlhYmxlcyBvZiB0eXBlIGNoYXIgYXMgYW4KKyAgIGFycmF5IHN1YnNjcmlwdC4gTm90ZTogYXMgZmFyIGFzIEkga25vdyB0aGVzZSB3YXJuaW5ncyBhcmUgb25seQorICAgcmVwb3J0ZWQgd2hlbiB1c2luZyB0aGUgQ3lnd2luIGdsaWJjIGhlYWRlcnMuCisKKzIwMTAtMDMtMjYgMTA6NDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBBZGRlZCBtaXNzaW5nICNpbmNsdWRlIGRpcmVjdGl2ZSAob24gV2luZG93cyBNU1ZDIHdhcyBjb21wbGFpbmluZworICAgYWJvdXQgc2l6ZV90IHdoaWxlIHByb2Nlc3NpbmcgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+KS4KKwogMjAxMC0wMy0yNSAyMDowNyAgYnZhc3NjaGUKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jOgpAQCAtMjYwNCw2ICs0NDQ1NywxMTcgQEAKICAgIGNvbm5lY3QgdG8gYW4gQWdlbnRYIG1hc3RlciBhZ2VudCBydW5uaW5nIG9uIHRoZSBzYW1lIHN5c3RlbQogICAgd2l0aG91dCBoYXZpbmcgdG8gc2V0IHRoZSB2YXJpYWJsZSBORVRTTk1QX0RTX0FHRU5UX1hfU09DS0VULgogCisyMDEwLTAzLTI1IDE2OjExICBidmFzc2NoZQorCisgICAqICBwZXJsL09JRC9PSUQueHMsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBXaW4zMjogcGVybDogZml4ZWQgc2V2ZXJhbCAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvcnMuCisgICBOb3RlOiBzaW5jZSBjYWxsb2MoKSBpcyBub3QgcmVkZWZpbmVkIGluIDxDT1JFL1hTVUIuaD4gdXNpbmcKKyAgIGNhbGxvYygpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgbGVhZHMgdG8gIkZyZWUgdG8gd3JvbmcgcG9vbCIKKyAgIGVycm9ycywgYXQgbGVhc3Qgb24gV2luZG93cy4KKworMjAxMC0wMy0yNSAxNjowNCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIG1vcmUgc2lsZW50IGJ5IG5vdAorICAgcmVkZWZpbmluZyBtYWxsb2MoKSBvciBmcmVlKCkgZHVyaW5nIGNvbXBpbGF0aW9uIG9mIFBlcmwKKyAgIGV4dGVuc2lvbnMgKHJlc3VsdGVkIGluIHdhcm5pbmdzIGFib3V0IG1hbGxvYygpIC8gZnJlZSgpCisgICByZWRlZmluaXRpb24gaW4gdGhlIFBlcmwgaGVhZGVyIENPUkUvWFNVQi5oKS4KKworMjAxMC0wMy0yNSAxNTowNiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IEJVRzogMjk2OTg3MjogbWFkZSBzdXJlIHRoYXQgU09DS19TVEFSVFVQIGlzIGludm9rZWQKKyAgIGJlZm9yZSBpbml0X2FnZW50KCkgb24gV2luZG93cy4KKworMjAxMC0wMy0yNSAxMzozOSAganNhZnJhbmVrCisKKyAgICogIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFwLmMsICAgCisgICAgICBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCBhcHBzL3NubXB3YWxrLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBVc2UgbWFjcm9zIGluc3RlYWQgb2YgbWFnaWMgbnVtYmVycyBhcyBuZXRzbm1wX3BhcnNlX2FyZ3MgcmV0dXJuCisgICBjb2Rlcy4KKworMjAxMC0wMy0yNSAxMzozMCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHNpbXBsaWZpZWQgdGhlIGJ1aWxkIHByb2Nlc3MgYnkKKyAgIHJlbW92aW5nIHRoZSBmaWxlIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluLiBXaGljaCBJUHY2CisgICBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZyb20gbmV0c25tcC5kbGwgaXMgbm93IGRldGVybWluZWQgYnkKKyAgIHdoaWNoIG9mIHRoZSBmdW5jdGlvbnMgaW4gdGhpcyBETEwgaGF2ZSBiZWVuIGRlY2xhcmVkIGFzCisgICBORVRTTk1QX0lNUE9SVC4KKworMjAxMC0wMy0yNCAyMDoxMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2VudW0uYzoKKworICAgZG9uJ3QgdXNlIHBhc3NlZCBwdHIgYXMgdGVtcCB2YXI7IHVzZSBzbm1wX2VudW1fbGlzdHMgaW4gaW5pdAorICAgdGVzdAorCisyMDEwLTAzLTI0IDIwOjEwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oOgorCisgICBhZGQgTkVUU05NUF9EU19MSUJfQ0VSVF9FWFRSQV9TVUJESVIKKworMjAxMC0wMy0yNCAyMDoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIG1vdmUgY2VydCBpbml0IGVhcmxpZXIgKGhhdmUgdGxzX2Jvb3RzdHJhcCBjYWxsIGl0KQorCisyMDEwLTAzLTI0IDIwOjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5nczsgYWRkIGNlcnQgZGVidWcgbXNncyBpbiBzZXJ2ZXIgc2V0dXA7IGZyZWUKKyAgIHNzbCBsb2cgZGF0YQorCisyMDEwLTAzLTI0IDEwOjQ3ICBqc2FmcmFuZWsKKworICAgKiAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYXAuYywgICAKKyAgICAgIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsIGFwcHMvc25tcHdhbGsuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIENIQU5HRVM6IGFwcHM6IHJldHVybiBub3plcm8gZXhpdCBjb2RlIHdoZW4gcGFyc2luZyBvZiBjZXJ0YWluCisgICBwYXJhbWV0ZXIgZmFpbHMuCisgICBFLmcuICctQScgcGFyYW1ldGVyIHdpdGggdG9vIHNob3J0IHBhc3NwaHJhc2Ugb3IgS3Uga2V5CisgICBnZW5lcmF0aW9uIGluIGdlbmVyYWwuCisKKzIwMTAtMDMtMjQgMDc6MTEgIG1hZ2ZyCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIENvcnJlY3QgdGhlIHR5cGUgb2YgdGhlIGlkL2Rlc2NyaXB0aW9uIG9mIHRoZSBPcGVuLVBEVS4KKworMjAxMC0wMy0yMiAxODoyOSAgYnZhc3NjaGUKKworICAgKiBNYWtlZmlsZS5pbjoKKworICAgVXBkYXRlcyBmb3IgIm1ha2UgY2hlY2tzIjoKKyAgIC0gTWFkZSBzdXJlIHRoYXQgZXhpdCBjb2RlIDAgaXMgZ2VuZXJhdGVkIHdoZW4gdGhlIGNoZWNrIGlzCisgICBzdWNjZXNzZnVsIGFuZCB0aGF0CisgICBleGl0IGNvZGUgMSBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgY2hlY2sgZmFpbGVkLgorICAgLSBNYWRlICJtYWtlZmlsZWNoZWNrIiBza2lwIFN1YnZlcnNpb24gYm9va2tlZXBpbmcgZmlsZXMgYW5kIGFsc28KKyAgIHRoZSBtYWtlZmlsZQorICAgdGhhdCBjb250YWlucyAibWFrZWZpbGVjaGVjayIuCisKIDIwMTAtMDMtMjIgMTY6MTAgIGR0czEyCiAKICAgICogbWlicy9ORVQtU05NUC1QQVNTLU1JQi50eHQ6CkBAIC0yNjExLDYgKzQ0NTc1LDE2IEBACiAgICBGaXggdHlwbyBpbiBkZWZhdWx0IElwQWRkcmVzcyB2YWx1ZQogICAgKFNlZSBCdWcgIzI5NzIxNDEpCiAKKzIwMTAtMDMtMjIgMTU6NDQgIHJzdG9yeQorCisgICAqICBNYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBzbm1wbGliL2NhbGxiYWNrLmMsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc3RydG9rX3IuYywgc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBjaGFuZ2UgYWxsIGFzc2VydCgpIHRvIG5ldHNubXBfYXNzZXJ0KCk7IGFkZCBhc3NlcnRjaGVjayB0byB0b3AKKyAgIGxldmVsIG1ha2VmaWxlCisKIDIwMTAtMDMtMjIgMTU6MjQgIGJ2YXNzY2hlCiAKICAgICogbWlicy9VQ0QtRElTS0lPLU1JQi50eHQ6CkBAIC0yNjE4LDYgKzQ0NTkyLDIzIEBACiAgICBGb2xsb3ctdXAgZm9yIHIxODM0OTogYWRkZWQgbWlzc2luZyBjb21tYSBzdWNoIHRoYXQgaXQgaXMgYWdhaW4KICAgIHBvc3NpYmxlIHRvIGNvbXBpbGUgVUNELURJU0tJTy1NSUIuCiAKKzIwMTAtMDMtMjIgMTQ6MzYgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgRml4IGJ1aWxkIHdoZW4gTUlCIGxvYWRpbmcgaXMgZGlzYWJsZWQgKGJyb2tlbiBieSBTVk4gcmV2aXNpb24KKyAgIDE4MzQxKQorICAgUmVwb3J0IGRlZmF1bHQgTUlCIHBhdGggZm9yIGNsaWVudCBhcHBzIHRvby4KKworMjAxMC0wMy0yMiAxMzo1OSAgZHRzMTIKKworICAgKiAgbWFuL3NubXBfYXBpX2VycnN0cmluZy4zLCBtYW4vc25tcF9jbG9zZS4zLCBtYW4vc25tcF9lcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfZnJlZV9wZHUuMywgbWFuL3NubXBfb3Blbi4zLCBtYW4vc25tcF9wZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX3JlYWQuMywgbWFuL3NubXBfc2VsZWN0X2luZm8uMywgbWFuL3NubXBfc2VuZC4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19wZXJyb3IuMywgbWFuL3NubXBfdGltZW91dC4zOgorCisgICBDSEFOR0VTOiBtYW46IEJVRzogMjk3Mjg2MDogVXBkYXRlIGJyb2tlbiByZWZlcmVuY2VzCisKIDIwMTAtMDMtMjIgMTM6NDkgIGR0czEyCiAKICAgICogIG1pYnMvVUNELURJU0tJTy1NSUIudHh0LCBtaWJzL1VDRC1ETE1PRC1NSUIudHh0LCAgIApAQCAtMjYzNSwxMiArNDQ2MjYsMTA0IEBACiAgICBBU04gdmFyYmluZHMgd2l0aCBBU04gdHlwZSB6ZXJvLiBOb3RlOiB0aGlzIGNvZGUgY2hhbmdlIGRvZXMgbm90CiAgICBjaGFuZ2UgdGhlIGFnZW50IGJlaGF2aW9yLgogCisyMDEwLTAzLTIwIDIwOjIxICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaDoKKworICAgQnVpbGRzIGFnYWluIHdpdGggTVNWQy4KKworMjAxMC0wMy0yMCAyMDoyMCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmM6CisKKyAgIEFkZGVkIGEgdHJhaWxpbmcgYmFja3NsYXNoIChzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGluIHRoZQorICAgcHJldmlvdXMgY29tbWl0KS4KKworMjAxMC0wMy0yMCAxOTozNiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBhZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9zbm1wZC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgCisgICAgICAgIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgc25tcGxpYi9zeXN0ZW0uYywgc25tcGxpYi90b29scy5jLCAgIAorICAgICAgc25tcGxpYi93aW5waXBlLmMsIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBDSEFOR0VTOiBsaWJzbm1wOiBjaGFuZ2VkIHRoZSB0eXBlIG9mIHRoZSBmb3VydGggYXJndW1lbnQgb2YKKyAgIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSBmcm9tIGNvbnN0IGNoYXIqIHRvIGNvbnN0IHZvaWQqIHN1Y2gKKyAgIHRoYXQgbm8gY2FzdCBpcyBuZWNlc3Nhcnkgd2hlbiBwYXNzaW5nIGFub3RoZXIgZGF0YXR5cGUgdGhlbgorICAgY2hhciogb3IgY29uc3QgY2hhciouCisgICBDSEFOR0VTOiBXaW4zMjogY2hhbmdlZCBpbl9hZGRyX3QgZnJvbSB1X2ludCB0byB1X2xvbmcgc3VjaCB0aGF0CisgICBpdCBtYXRjaGVzIHRoZSBkYXRhdHlwZSBvZiBzb2NrYWRkcl9pbjo6c2luX2FkZHIuCisgICBBbHNvLCBmaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIChtb3N0bHkgY2hhciAqIDw+IHVfY2hhciAqCisgICBtaXNtYXRjaGVzKSBhbmQgcmVtb3ZlZCBzb21lIGNhc3RzLgorCiAyMDEwLTAzLTIwIDE5OjE2ICBidmFzc2NoZQogCiAgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgogCiAgICBGaXhlZCB0aGUgY29tcGlsZXIgd2FybmluZ3MgcmVwb3J0ZWQgYnkgZ2NjIChNaW5HVykuCiAKKzIwMTAtMDMtMjAgMTk6MDUgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciBzaWdwcm9jbWFzay4KKworMjAxMC0wMy0yMCAwOToxNCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgUmVmYWN0b3Jpbmc6IG1vdmVkIGR1cGxpY2F0ZWQgY29kZSBpbnRvIGEgbmV3IGZ1bmN0aW9uLgorCisyMDEwLTAzLTE5IDIyOjU2ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL3BhcnNlLmM6CisKKyAgIFJlcG9ydCBNSUIgYW5kIGNvbmZpZyBkaXJlY3RvcmllcyBzZWFyY2ggcGF0aHMgb24gZXJyb3JzCisgICAoYW5kIGluIHRoZSBoZWxwIG1lc3NhZ2UpCisKKzIwMTAtMDMtMTkgMTM6MTIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IG1hZGUgdGhlIGVycm9yIG1lc3NhZ2UgdGhhdCBpcyBsb2dnZWQgd2hlbgorICAgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBpcyBhdHRlbXB0ZWQgbW9yZSBkZXRhaWxlZC4KKyAgIAorICAgQW4gZXhhbXBsZToKKyAgIChiZWZvcmUpCisgICBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIChtaWJJSS9zbm1wLAorICAgQzpcV0lORE9XU1xTeXN0ZW0zMlxzbm1wbWliLmRsbCkKKyAgIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxlZC4KKyAgIChhZnRlcikKKyAgIGR1cGxpY2F0ZSByZWdpc3RyYXRpb246IE1JQiBtb2R1bGVzIG1pYklJL3NubXAgYW5kCisgICBDOlxXSU5ET1dTXFN5c3RlbTMyXHNubXBtaWIuZGxsIChvaWQgLjEuMy42LjEuMi4xLjExKS4KKyAgIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWxlZC4KKwogMjAxMC0wMy0xOSAxMjo0MCAgYnZhc3NjaGUKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAgIApAQCAtMjY1OSwxOCArNDQ3NDIsOTQgQEAKICAgIGJ5IGV2ZXJ5IHJlcXVlc3QgZm9yIHdoaWNoIGEgcmVzcG9uc2Ugd2l0aCBub24temVybyBlcnJvciBzdGF0dXMKICAgIGlzIHNlbnQgYmFjay4KIAotMjAxMC0wMy0xOSAxMTo0MSAgYnZhc3NjaGUKKzIwMTAtMDMtMTggMTY6MjkgIHJzdG9yeQogCi0gICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgogCi0gICBSZXZlcnRlZCByMTgzMjQgc2luY2UgdGhlIDUuNCBicmFuY2ggaXMgaW4gUkMgc3RhZ2UgYW5kIGEKLSAgIGxlYWstYXQtZXhpdCBpcyBub3QgYSBzaG93c3RvcHBlci4KKyAgIGtlZXAgY291bnQgb2YgZW5hYmxlZCBsb2dzOyB1c2UgdGhpcyBjb3VudCB0byBkZXRlcm1pbmUgd2hlbiB0bworICAgbG9nIHRvIHN0ZGVycgogCi0yMDEwLTAzLTE3IDEzOjQxICBidmFzc2NoZQorMjAxMC0wMy0xOCAxNjoyOCAgcnN0b3J5CisKKyAgICogIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCBhcHBzL3NubXB0cmFwZC5jLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV3IHNubXAgdG9rZW4gbG9nT3B0aW9uIGFsbG93cyBzcGVjaWZ5aW5nIGxvZworICAgZGVzdGluYXRpb25zIHZpIGNvbmYgZmlsZXMKKyAgIC0gaWYgc3RkZXJyIGxvZyBlbmFibGVkIGJlY2F1c2Ugb2Ygbm8gbG9nIGRlc3RpbmF0aW9uLCB0dXJuIGl0CisgICBvZmYgd2hlbiBhCisgICBsb2cgZGVzdGluYXRpb24gaXMgZW5hYmxlZAorICAgLSBkb24ndCBjYWxsIG5ldHNubXBfZW5hYmxlX3N0ZGVycmxvZygpIGZyb20gYXBwcyBhbnltb3JlCisKKzIwMTAtMDMtMTggMTU6MzEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIHVkcCB0cmFuc3BvcnQgaW5oZXJpdGFuY2UgdHdlYWtzCisgICAtIG1vdmUgYmFzaWMgdWRwIHJlY3Zmcm9tL3NlbmR0byBjb2RlIGZyb20gVURQRG9tYWluIHRvCisgICBVRFBCYXNlRG9tYWluCisgICAtIHR3ZWFrIHVwZCByZWN2ZnJvbS9zZW5kdG8gdG8gY2FsbCB1ZHBiYXNlIHZlcnN0aW9uCisgICAtIHR3ZWFrIHVkcGlwdjQgcmVjdmZyb20vc2VuZHRvIHRvIGNhbGwgdWRwYmFzZSB2ZXJzaW9uCisgICAtIGFsc28gZml4ZWQgbmV0c25tcF9pcHY0XyogLT4gbmV0c25tcF91ZHBpcHY0XyoKKyAgIC0gdHdlYWsgRFRMU1VEUERvbWFpbiBvdCB1c2UgdWRwYmFzZV8qIGluc3RlYWQgb2YgdWRwXyoKKworMjAxMC0wMy0xOCAxNToyMSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHByb3RlY3QgY2VydCBoZWFkZXIgYW5kIGluaXQgY2FsbCB3aXRoIGlmZGVmcworCisyMDEwLTAzLTE3IDE5OjAxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICB1c2UgbmV3IHV0aWxpdHkgcm91dGluZSBmb3IgY2VydCBuYW1lcworCisyMDEwLTAzLTE3IDE5OjAxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3ZlIHNubXBfb3BlbnNzbCBoZWFkZXIgYWZ0ZXIgb3BlbnNzbCBoZWFkZXJzCisKKzIwMTAtMDMtMTcgMTk6MDAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgYWRkIHJvdXRpbmVzIHRvIHB1bGwvZHVtcCBuYW1lcyBmcm9tIFg1MDkgY2VydHMKKworMjAxMC0wMy0xNyAxOTowMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdXNlIGVudW0gbGlzdHMgdG8gbWFuYWdlIGRpcmVjdG9yeSBpbmRleGVzCisKKzIwMTAtMDMtMTcgMTk6MDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9lbnVtLmM6CisKKyAgIGluaXRpYWxpemUgc3RhdGljIHN0b3JhZ2UgYmVmb3JlIHVzZTsgcHJvdGVjdCBlbnVtIGluaXQgZnJvbQorICAgbXVsdGlwbGUgY2FsbHMKKworMjAxMC0wMy0xNyAxODo1NCAgcnN0b3J5CisKKyAgICogUkVBRE1FLmFnZW50LW1pYnM6CisKKyAgIGFkZCBpbmZvIGFib3V0IG5ldyB0c20vdGxzIG1pYnMKKworMjAxMC0wMy0xNyAxODo1NCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIG1vdmUgY2VydCBpbml0IHRvIHNubXAgaW5pdAorCisyMDEwLTAzLTE3IDEzOjM3ICBidmFzc2NoZQogCiAgICAqIG1pYnMvTkVULVNOTVAtQUdFTlQtTUlCLnR4dCwgbWlicy9ORVQtU05NUC1FWFRFTkQtTUlCLnR4dDoKIAotICAgTWlub3IgTUlCIGZpeGVzIChiYWNrcG9ydGVkIHIxODMyMCwgcjE4MzIxIGFuZCByMTgzMjUpLgorICAgVXBkYXRlZCBNSUIgcmV2aXNpb24gaGlzdG9yeS4KIAogMjAxMC0wMy0xNyAxMzoyOSAgYnZhc3NjaGUKIApAQCAtMjY4NSw4NSArNDQ4NDQsMjk3IEBACiAgICBDSEFOR0VTOiBCVUc6IDI5NzEyNTc6IEZpeGVkIHdpbkV4dERMTCBoYW5kbGluZyBvZiBtdWx0aS12YXJiaW5kCiAgICBnZXROZXh0IHJlcXVlc3RzIHdpdGggT0lEcyBpbiByZXZlcnNlIGxleGljb2dyYXBoaWNhbCBvcmRlci4KIAotMjAxMC0wMy0xNCAyMjo1NiAgZHRzMTIKKzIwMTAtMDMtMTcgMTA6MjUgIGJ2YXNzY2hlCiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBNb3JlIHdpbkV4dERMTCBkZWJ1ZyBvdXRwdXQgdHVuaW5nLgogCi0yMDEwLTAzLTE0IDIyOjMxICBkdHMxMgorMjAxMC0wMy0xNiAxOTozMSAgYnZhc3NjaGUKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIG1pYnMvTkVULVNOTVAtQUdFTlQtTUlCLnR4dDoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENvbXBpbGVzIG5vdyB3aXRoIE1JQiBjb21waWxlcnMgdGhhdCBkbyBub3QgcmVjb2duaXplIGEgZG91YmxlCisgICBkYXNoIGFzIHRoZSBlbmQgb2YgYSBNSUIgY29tbWVudC4KIAotMjAxMC0wMy0xNCAyMjoyOCAgZHRzMTIKKzIwMTAtMDMtMTYgMTk6MjcgIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIG1pYnMvTkVULVNOTVAtRVhURU5ELU1JQi50eHQ6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBGaXhlZCB0d28gc3ludGF4IGVycm9ycy4KIAotMjAxMC0wMy0xNCAyMjoxOSAgZHRzMTIKKzIwMTAtMDMtMTYgMTk6MTggIGJ2YXNzY2hlCiAKLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgogCi0gICBtYWtlIGRlcGVuZAorICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogZml4ZWQgYSBidWcgaW4gZ2V0TmV4dCBoYW5kbGluZyB0aGF0CisgICBjb3VsZCBjYXVzZSB0aGUgTUlCIG91dHB1dCB0byBiZSB0cnVuY2F0ZWQuCiAKLTIwMTAtMDMtMTQgMjI6MTkgIGR0czEyCisyMDEwLTAzLTE2IDE4OjUwICBidmFzc2NoZQogCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKIAotICAgbWFrZSBkZXBlbmQKKyAgIE1hZGUgd2luRXh0RExMIGRlYnVnIG91dHB1dCBtb3JlIGRldGFpbGVkLgogCi0yMDEwLTAzLTE0IDIyOjEwICBkdHMxMgorMjAxMC0wMy0xNiAxNToyNCAgYnZhc3NjaGUKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmg6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBNYWRlIHN1cmUgdGhhdCBDKysgcHJvZ3JhbXMgdGhhdCBpbmNsdWRlIE5ldC1TTk1QIGhlYWRlciBmaWxlcworICAgY29tcGlsZSBhZ2Fpbi4KIAotMjAxMC0wMy0xNCAyMjowNyAgZHRzMTIKKzIwMTAtMDMtMTUgMDc6MjAgIG1hZ2ZyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKKyAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOgogCi0gICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKyAgIE1ha2UgaXQgY29tcGlsZSB3aXRoIC0tZGlzYWJsZS1kZXByZWNhdGVkIGFnYWluLgorCisyMDEwLTAzLTE1IDA3OjE5ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jOgorCisgICBEaXNhYmxlIGFsbCB0aGUgcHJpbnRpbmcgaWYgZGVidWcgb3V0cHV0IGlzIG9mZi4KKworMjAxMC0wMy0xNSAwMDoxNyAgdGFuZGVycworCisgICAqIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmdzIHJlZ2FyZGluZyBwcmludGYgZm9ybWF0CisKKzIwMTAtMDMtMTUgMDA6MDcgIHRhbmRlcnMKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5ncyByZWdhcmRpbmcgcHJpbnRmIGZvcm1hdAorCisyMDEwLTAzLTE0IDIxOjA1ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaDoKKworICAgbWFrZSBzdXJlIGhlYWRlciBpZmRlZiBuYW1lIGlzIHVuaXF1ZQorCisyMDEwLTAzLTE0IDIxOjA0ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oOgorCisgICBhZGQgbWlzc2luZyBpbml0L3NodXRkb3duIHByb3RvdHlwZXMgdG8gZml4IGNvbXBpbGVyIHdhcm5pbmdzCisKKzIwMTAtMDMtMTQgMjE6MDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvZGF0YV9saXN0LmM6CisKKyAgIG1vdmUgZGVidWcgbWVzc2FnZSBlYXJsaWVyCisKKzIwMTAtMDMtMTQgMjE6MDIgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYzoKKworICAgYWRkIHByb3RvdHlwZSBmb3IgbmV0c25tcF9pbml0X2NvbnRhaW5lcjsgZml4IGNvbXBsZXIgd2FybmluZworCisyMDEwLTAzLTE0IDIwOjUxICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBDb3JyZWN0IG5ldHNubXBfYXNzZXJ0X29yX3JldHVybiBhbmQgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuCisgICBmb3IgdGhlIE5FVFNOTVBfTk9fREVCVUdHSU5HIGNhc2UKKworMjAxMC0wMy0xNCAxOToxMCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVuYW1lIGNlcnQgaW5pdC9zaHV0ZG93biBmdW5jczsgb25seSBjb21waWxlIGNlcnRfdXRpbHMgaWYKKyAgIHVzaW5nL2hhdmUgU1NMOyBpbml0IGNlcnRzIGZyb20gdGxzIGJhc2UKKworMjAxMC0wMy0xNCAxOTowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgY2FsbCBuZXRzbm1wX2luaXRfb3BlbnNzbCBpbnN0ZWFkIG9mIG5ldHNubXBfaW5pdF90bHNiYXNlCisKKzIwMTAtMDMtMTQgMTk6MDkgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICB1cGRhdGUgZm9yIHJlbmFtZWQgb2JqZWN0cyBpbiB2ZXJzaW9uIDA4IG9mIHRoZSBkdGxzIGRyYWZ0CisKKzIwMTAtMDMtMTQgMTk6MDggIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIsIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24sICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYiwgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaDoKKworICAgaW1wb3J0IGluaXRpYWwgY29kZSBmb3IgZHRscyBtaWJzCisKKzIwMTAtMDMtMTQgMTk6MDggIHJzdG9yeQorCisgICAqIG1pYnMvVExTVE0tTUlCLnR4dDoKKworICAgVExTVE0tTUlCIGZyb20gZHJhZnQtaWV0Zi1pc21zLWR0bHMtdG0tMDkudHh0CisKKzIwMTAtMDMtMTQgMTc6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBGaXhlZCBhIGZldyBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTAzLTE0IDE0OjEwICBidmFzc2NoZQorCisgICAqIHBlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzM4NDogY2hhbmdlZCBORVRTTk1QX0RTX01BWF9TVUJJRFMgZnJvbSA0MCB0bworICAgNDguCisKKzIwMTAtMDMtMTQgMTM6NTMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENoYW5nZXM6CisgICAtIFJlbW92ZWQgLVduby1jaGFyLXN1YnNjcmlwdHMgZnJvbSBERVZGTEFHUy4gVXNpbmcgYSB2YXJpYWJsZSBvcgorICAgZXhwcmVzc2lvbiBvZgorICAgdHlwZSBjaGFyIGFzIGFuIGFycmF5IGluZGV4IGlzIGFsbW9zdCBhbHdheXMgYW4gZXJyb3IuCisgICBGdXJ0aGVybW9yZSwKKyAgIC1XY2hhci1zdWJzY3JpcHQgZG9lcyBub3QgdHJpZ2dlciBhbnkgd2FybmluZ3Mgb24gdGhlIE5ldC1TTk1QCisgICBjb2RlIGJhc2UuCisgICAtIFJlbW92ZWQgLVdpbmxpbmUgZnJvbSBERVZGTEFHUy4gTm90IG9ubHkgd2FzIG5vYm9keSBwYXlpbmcKKyAgIGF0dGVudGlvbiB0byB0aGUKKyAgIG1lc3NhZ2VzIHRyaWdnZXJlZCBieSAtV2lubGluZSwgYnV0IHJlY2VudCB2ZXJzaW9ucyBvZiB0aGUgZ2NjCisgICBjb21waWxlciBhcmUKKyAgIGJldHRlciB0aGFuIGh1bWFucyBhdCBkZWNpZGluZyB3aGljaCBmdW5jdGlvbnMgc2hvdWxkIGJlIGlubGluZWQKKyAgIGFuZCB3aGljaAorICAgb25lcyBub3QuCisKKzIwMTAtMDMtMTQgMTM6MzkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVyYW4gYXV0b3JlY29uZi4KKworMjAxMC0wMy0xNCAxMzozOSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTAzLTE0IDEzOjM2ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBSZW1vdmVkIHRoZSAnMHgnIHByZWZpeCBhZ2FpbiBmcm9tIGEgZGVidWcgc3RhdGVtZW50IHRoYXQgd2FzCisgICBpbnRyb2R1Y2VkIGluIHIxODI4Mi4KKworMjAxMC0wMy0xMyAxOTowNyAgYnZhc3NjaGUKKworICAgKiAgcGVybC9BU04vQVNOLnhzLCBwZXJsL09JRC9PSUQueHMsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL1RyYXBSZWNlaXZlci9wcHBvcnQuaCwgICAKKyAgICAgIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIEZpeGVkIG1vc3QgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IHRoZSBzb3VyY2UgY29kZSBpbiB0aGUKKyAgIHBlcmwgc3ViZGlyZWN0b3J5LgorICAgTm90ZTogdGhlc2UgY2hhbmdlcyBtYXkgY29udGFpbiBzb21lIHJlYWwgYnVnIGZpeGVzLgorCisyMDEwLTAzLTEzIDA5OjU3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRml4ZWQgc2V2ZXJhbCByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmdzLgorCisyMDEwLTAzLTEzIDAxOjE2ICBoYXJkYWtlcgorCisgICAqIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgZGVmaW5lIHRoZSBUTFNUQ1AgRE9NQUlOCisKKzIwMTAtMDMtMTMgMDE6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBmaXggaWZkZWYgdHlwbworCisyMDEwLTAzLTEyIDIwOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hhbmdlIGRlYnVnZ2luZyBzeW1ib2wgbmFtZXMgdG8gYSBnZW5lcmljIHRscyBzdHJpbmcKKworMjAxMC0wMy0xMiAyMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgaW5pdGlhbCB3b3JraW5nIFNOTVAgb3ZlciBUTFMgb3ZlciBUQ1AgY29ubmVjdGlvbgorCisyMDEwLTAzLTEyIDIwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcHJpbnQgYSBtb3JlIGNvbXBsZXRlIE9wZW5TU0wgc3RhY2sKKworMjAxMC0wMy0xMiAyMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZml4IGFzc2VydCBzdGF0ZW1lbnRzCisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg6CisKKyAgIGFkZGVkIGFuIGFjY2VwdGVkX2JpbyBwb2ludGVyIGZvciB0aGUgYmlvIGFmdGVyIFNTTF9hY2NlcHQKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGFkZCB0aGUgYWJpbGl0eSBmb3IgZl9jb3B5IGFuZCBmX2NvbmZpZworCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBtaXNzaW5nIDsKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgYWRkIGEgZl9jb3B5IHBvaW50ZXIKKworMjAxMC0wMy0xMiAyMDoyMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgcmV0dXJuIGludCBub3QgaW50ICogb24gZXJyb3IKKworMjAxMC0wMy0xMiAyMDoyMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgYWRkZWQgYSBmX2NvbmZpZyBmdW5jdGlvbiBmb3IgdHJhbnNwb3J0cwogCiAyMDEwLTAzLTEyIDExOjUzICBkdHMxMgogCkBAIC0yNzczLDYgKzQ1MTQ0LDEzIEBACiAgICBoZWFkZXIgdG9rZW4KICAgIFBhdGNoIHN1cHBsaWVkIGJ5IERhbiBOZWxzb24KIAorMjAxMC0wMy0xMiAxMTo0MyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jOgorCisgICBSZW1vdmUgZHVwbGljYXRlIGRlZmluaXRpb24gb2YKKyAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcygpCisKIDIwMTAtMDMtMTEgMTY6NTIgIGR0czEyCiAKICAgICogbWFuL3NubXBjbWQuMS5kZWY6CkBAIC0yNzg1LDEyICs0NTE2MywyNCBAQAogCiAgICBSZW1vdmUgbWVudGlvbiBvZiB0aGUgKGFiYW5kb25lZCkgJ2RhdGFzZXQyJyBoZWxwZXIuCiAKLTIwMTAtMDMtMTEgMTY6MDMgIGR0czEyCisyMDEwLTAzLTExIDE1OjU5ICBkdHMxMgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIERvbid0IGluaXRpYWxpc2UgdGhlIFRMUyB0cmFuc3BvcnQgdW5sZXNzIGl0J3MgYWN0dWFsbHkgYmVlbgorICAgY29uZmlndXJlZCBpbi4KKworMjAxMC0wMy0xMSAxNTo0NyAgcnN0b3J5CiAKICAgICogdGVzdGluZy9ldmFsX3N1aXRlLnNoOgogCi0gICBVc2UgU05NUF9UTVBESVIgaW5zdGVhZCBvZiBUTVBESVIKLSAgIEJhY2twb3J0IG9mIHJldmlzaW9uIDE4MjYyCisgICB1c2UgU05NUF9UTVBESVIgaW5zdGVhZCBvZiBUTVBESVIKKworMjAxMC0wMy0xMSAxNTozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHF1ZXJ5IHJpZ2h0IGJvb2wgKHRzbSBwcmVmaXggaXMgbGliIGJvb2wsIG5vdCBhcHApCiAKIDIwMTAtMDMtMTEgMTU6MDggIGR0czEyCiAKQEAgLTI4MDgsNiArNDUxOTgsMTUgQEAKICAgIENIQU5HRVM6IFBBVENIOiAyOTM3OTk2OiBBZGQgRGF0ZTogaGVhZGVyIHRvIGVtYWlsIHNlbmQgYnkKICAgIHRyYXB0b2VtYWlsCiAKKzIwMTAtMDMtMTEgMTQ6NTAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk2NzQwMDogUmV0cmlldmUgZXJyb3IgY291bnRlcnMgZm9yIHRoZQorICAgRXRoZXJMaWtlLU1JQgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgSm9zZWYgTW9lbGxlcnMuCisKIDIwMTAtMDMtMTEgMTQ6MjMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jOgpAQCAtMjgyMyw2ICs0NTIyMiwyMSBAQAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTU2NjU3OiBIYW5kbGUgb3Zlci1sZW5ndGggQWdlbnRYIE9JRHMuCiAgICBQYXRjaCBwcm92aWRlZCBieSBSb2IgV2VzdAogCisyMDEwLTAzLTExIDEyOjIzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jOgorCisgICBQcm92aWRlIG1pc3NpbmcgZGVidWcgcGFyYW1ldGVyLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5kcmVhcyBKYWVnZXIuCisKKzIwMTAtMDMtMTEgMTI6MjEgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmM6CisKKyAgIFByb3ZpZGUgbWlzc2luZyAoZHVtbXkpIHJldHVybiB2YWx1ZSwgdG8gc3VwcHJlc3MgY29tcGlsZXIKKyAgIHdhcm5pbmcuCisgICBQYXRjaCBwcm92aWRlZCBieSBBbmRyZWFzIEphZWdlci4KKwogMjAxMC0wMy0xMSAxMjoxOSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmM6CkBAIC0yODM3LDcgKzQ1MjUxLDcgQEAKIAogMjAxMC0wMy0xMSAxMTo1NyAgZHRzMTIKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQ6CiAKICAgIFJlcGxhY2UgYmFja3F1b3RlIHdpdGggc2luZ2xlIHF1b3RlIGluIGNvbmZpZ3VyZSBvdXRwdXQgbWVzc2FnZS4KICAgIFdoaWxlIHRoaXMgY2hhbmdlIGlzIHByb2JhYmx5IG5vdCBzdHJpY3RseSBuZWNlc3NhcnksIGl0IGZlZWxzCkBAIC0yODY4LDIxICs0NTI4Miw5NTIgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk1MDg0NTogRml4IGlmSGlnaFNwZWVkIGNhbGN1bGF0aW9uCiAgICBQYXRjaCBwcm92aWRlZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8KIAotMjAxMC0wMy0wMyAxNjoxMSAganNhZnJhbmVrCisyMDEwLTAzLTExIDA4OjI2ICBidmFzc2NoZQorCisgICAqICBwZXJsL0FTTi9BU04ueHMsIHBlcmwvQVNOL01ha2VmaWxlLlBMLCBwZXJsL09JRC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvT0lEL09JRC54cywgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvYWdlbnQueHMsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54cywgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzOgorCisgICBNYWRlIGNvbXBpbGF0aW9uIG9mIHRoZSBQZXJsIG1vZHVsZSBOZXRTTk1QLnBtIG9uIFdpbmRvd3MgbW9yZQorICAgc2lsZW50OiBhZGRlZCBjb21waWxlciBmbGFncyAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisgICAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyBhbmQgbWFkZSBzdXJlIHRoYXQgI2luY2x1ZGUKKyAgIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gb2NjdXJzIGJlZm9yZSBhbnkgb3RoZXIgaW5jbHVkZSBmaWxlCisgICB0aGF0IGRlZmluZXMgX1dJTjMyX1dJTk5ULgorCisyMDEwLTAzLTEwIDIzOjMxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgTkVXUzogc25tcGxpYjogY3JlYXRlIGluZGV4ZXMgZm9yIGNlcnRpZmljYXRlcyBpbiBjb25maWcgcGF0aAorCisyMDEwLTAzLTEwIDE4OjQ4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYzoKKworICAgQWRkZWQgIiNpbmNsdWRlIDx1bmlzdGQuaD4iIHN1Y2ggdGhhdCBvbiBVbml4IHN5c3RlbXMgdGhlCisgICBjb21waWxlciBkb2VzIG5vdCBwcmludCBhIHdhcm5pbmcgYWJvdXQgYSBtaXNzaW5nIGRlY2xhcmF0aW9uIGZvcgorICAgdGhlIGZ1bmN0aW9uIGNsb3NlKCkuCisKKzIwMTAtMDMtMTAgMTg6MzAgIHJzdG9yeQorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgICAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06CisKKyAgIHVwZGF0ZSB2ZXJzaW9uIHRvIDUuNi5kZXYKKworMjAxMC0wMy0xMCAxODoyOSAgcnN0b3J5CisKKyAgICogbG9jYWwvVmVyc2lvbi1NdW5nZS5wbDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IHVwZGF0ZSBWZXJzaW9uLU11bmdlIGZvciByZW5hbWVkIGNvbmZpZ3VyZS5hYworCisyMDEwLTAzLTEwIDE4OjI5ICByc3RvcnkKKworICAgKiBjb25maWd1cmUuYWM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBzYXZlIGNvbmZpZ3VyZSBjYWNoZSBldmVyeSBvbmNlIGluIHdoaWxlCisKKzIwMTAtMDMtMTAgMTY6MTIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbjoKKworICAgUmVvcmRlcmVkIHNvbWUgb2YgdGhlIE1ha2VmaWxlIHJ1bGVzIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZQorICAgZGlmZnMgd2l0aCBsaWJzbm1wX2RsbC9NYWtlZmlsZS5pbi4KKworMjAxMC0wMy0xMCAxNjoxMCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbjoKKworICAgV2luMzIsIGJhdGNoIGJ1aWxkaW5nOiBETEwgYnVpbGRzIGFnYWluLgorCisyMDEwLTAzLTEwIDE2OjA3ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBGaXhlZCBhIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZyBieSBhZGRpbmcgYSBmb3J3YXJkCisgICBkZWNsYXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIF9jYWNoZV9mcmVlKCkuCisKKzIwMTAtMDMtMTAgMTY6MDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQnVpbGRzIGFnYWluIG9uIFdpbjMyLgorCisyMDEwLTAzLTEwIDA0OjE3ICByc3RvcnkKKworICAgKiBSRUFETUU6CisKKyAgIGFkZCBtaXNzaW5nIGNvbnRyaWJ1dG9ycworCisyMDEwLTAzLTEwIDA0OjE3ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGZpeCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgaW4gQ09OVEFJTkVSX0ZSRUUKKyAgIC0gYWxzbyBhZGRlZCBzZXZlcmFsIGNvbXBhcmUgcm91dGluZXMKKworMjAxMC0wMy0xMCAwNDoxNyAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHdoZW4gZnJlZWluZyBhIGNhY2hlLCBzdG9wIHRpbWVyIGFuZCBjYWxsIGNhY2hlCisgICBmcmVlIGZ1bmMKKyAgIC0gYWxzbyBhZGQgbmV0c25tcF9jYWNoZV9yZW1vdmUKKworMjAxMC0wMy0xMCAwMzo1MiAgcnN0b3J5CisKKyAgICogIFJFQURNRSwgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIHVuZG8gY29tbWl0IDE4MjM0CisKKzIwMTAtMDMtMTAgMDM6NDEgIHJzdG9yeQorCisgICAqICBSRUFETUUsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBNZXJnZSBicmFuY2ggJ3B1bGxtZScgb2YgLi4vdHJ1bmstc3RhZ2luZworCisyMDEwLTAzLTA5IDE3OjQ4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogZXhwb3J0ZWQgbmV0c25tcF9yZWFkX21vZHVsZSgpIGZyb20gbmV0c25tcC5kbGwKKyAgIHN1Y2ggdGhhdCBOZXRTTk1QLnBtIGJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wMy0wOSAxNzo0NyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW46CisKKyAgIFNpbXBsaWZpZWQgdHdvIG1ha2VmaWxlcyB1c2VkIGJ5IGJ1aWxkLmJhdCAoV2luMzIpLgorCisyMDEwLTAzLTA5IDE3OjI0ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IGJ1aWxkaW5nIE5ldFNOTVAucG0gZG9lcyBubyBsb25nZXIKKyAgIHRyaWdnZXIgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgcmVkZWZpbmluZyBfV0lOMzJfV0lOTlQgbm9yCisgICBOVERESV9WRVJTSU9OLgorCisyMDEwLTAzLTA5IDE3OjIyICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIE5ldFNOTVAucG0gbW9yZSBzaWxlbnQgYnkKKyAgIGFkZGluZyB0aGUgTVNWQyBjb21waWxlciBmbGFncyAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisgICAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUy4KKworMjAxMC0wMy0wOSAxNzowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICByZW1vdmUgZGVidWcgbXNnIHVzZWQgZHVyaW5nIGRlYnVnZ2luZworCisyMDEwLTAzLTA5IDE3OjAyICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaW5pdGlhbCBjZXJ0IHdyYXBwZXIgLSB0ZXN0aW5nIHJlcG8gd3JpdGUgcHJpdnMKKworMjAxMC0wMy0wOSAxMDoyMCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbjoKKworICAgUmVtb3ZlZCBkdXBsaWNhdGUgYnVpbGQgcnVsZXMuIFRoZXNlIGR1cGxpY2F0ZSBydWxlcyB3ZXJlCisgICBoYXJtbGVzcyBidXQgdHJpZ2dlcmVkIGEgd2FybmluZy4KKworMjAxMC0wMy0wOSAwMjozOCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBkaXJlY3RvcnkgY29udGFpbmVyIGVuaGFuY2VtZW50cworICAgLSBmaXggcG90ZW50aWFsIG1lbW9yeSBsZWFrCisgICAtIGFkZCBmaWx0ZXIgY2FsbGJhY2sgdG8gZmlsdGVyIGZpbGVzIHJldHVybmVkCisgICAtIGFkZCBvcHRpb24gdG8gcmV0dXJuIHJlbGF0aXZlIGFuZCBub3QgZnVsbCBwYXRocworICAgLSBhZGQgb3B0aW9uIHRvIHNvcnQgcmV0dXJuZWQgbGlzdAorICAgLSBhZGQgb3B0aW9uIHRvIHJldHVybiBlbXB0eSBjb250YWluZXIgaW5zdGVhZCBvZiBOVUxMIGlmIG5vCisgICBmaWxlcyBmb3VuZAorICAgLSBjaGFuZ2UgZGVmYXVsdCBjb250YWluZXIgbmFtZSB0byBkaXJlY3RvcnkgdGhhdCB3YXMgc2Nhbm5lZAorICAgLSB0d2VhayBkZWJ1Zy9sb2cgbWVzc2FnZXMKKworMjAxMC0wMy0wOCAyMzowNyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBkZWZpbmUgYW5kIHVzZSBuZXcgTkVUU05NUF9MT0dPTkNFIG1hY3JvCisKKzIwMTAtMDMtMDggMjI6NDQgIHJzdG9yeQorCisgICAqIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBORVdTOiBzbm1wbGliOiBjb25mIGZpbGVzIGNhbiBub3cgaW5jbHVkZSBvdGhlciBjb25mIGZpbGVzCisgICAtIGFsc28gdHdlYWtlZCBkZWJ1ZyB0b2tlbnMgaGVyZSBhbmQgdGhlcmUKKworMjAxMC0wMy0wOCAyMjo0MyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBmaXggdHlwbyAoY2F1c2VkIGV4dGVybmFsIHJlZmVyZW5jZSB3aGVuIERUTFNVRFAgY29uZmlndXJlZAorICAgd2l0aG91dCBkdGxzdGNwKQorCisyMDEwLTAzLTA2IDAyOjI3ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXRzbm1wX2NvbnRhaW5lciBlbmhhbmNlbWVudHM6CisgICAtIGFkZCBmcmVlX2l0ZW0gZnVuY3Rpb247IGRlZmF1bHRzIHRvCisgICBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZQorICAgLSBhZGQgQ09OVEFJTkVSX0ZSRUVfQUxMIG1hY3JvL2Z1bmN0aW9uIChsaWtlIENPTlRBSU5FUl9DTEVBUiBidXQKKyAgIGNhbGxzIGNvbnRhaW5lciBmcmVlX2l0ZW0gZm9yIGVhY2ggaXRlbSBpbiBwcmltYXJ5IGNvbnRhaW5lcikKKyAgIC0gYWRkIGFiaWxpdHkgdG8gc2V0IG9wdGlvbnMgb24gYmluYXJ5X2FycmF5IGNvbnRhaW5lcnMKKworMjAxMC0wMy0wMiAxNzo1NSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluOgorCisgICBNYWRlIHN1cmUgdGhhdCB3aW4zMi9idWlsZC5iYXQgd29ya3MgYWdhaW4gYnkgYWRkaW5nIG1pc3NpbmcKKyAgIHNvdXJjZSBmaWxlIG5hbWVzLiBTb3J0ZWQgc291cmNlIGZpbGUgbmFtZXMgYWxwaGFiZXRpY2FsbHkgdG9vLgorCisyMDEwLTAzLTAyIDE2OjU0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9Db25maWd1cmUsIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTY3IChtZXJnZSBvZiBzbm1wZCBhbmQgc25tcGRzZGsgYW5kIGFsc28gb2YKKyAgIG5ldHNubXBtaWJzIGFuZCBuZXRzbm1wbWlic3Nkayk6IHRoZSBiYXRjaCBmaWxlIHdpbjMyL2J1aWxkLmJhdAorICAgd29ya3MgYWdhaW4gd2l0aCB0aGUgUGxhdGZvcm0gU0RLIGVuYWJsZWQuCisKKzIwMTAtMDMtMDIgMTY6NTIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvTWFrZWZpbGUtYXBwcy5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgyMTUgKHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSBjbC5leGUgb3B0aW9uIC9HWCBieQorICAgdGhlIGVxdWl2YWxlbnQgL0VIc2M7IGFkZGVkIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIsIGFkZGVkCisgICAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiBhbmQgcmVtb3ZlZCAvRnAuLi4gYW5kIC9ZWCkuCisKKzIwMTAtMDItMjggMTU6NTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIFdpbjMyOiBmaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgcmVkZWZpbml0aW9uIG9mCisgICBfV0lOMzJfV0lOTlQgYnkgbWFraW5nIHN1cmUgdGhhdCA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGlzCisgICBpbmNsdWRlZCBiZWZvcmUgPHdpbmRvd3MuaD4uCisKKzIwMTAtMDItMjggMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCB3aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSAvR1ggYnkgdGhlCisgICBlcXVpdmFsZW50IC9FSHNjLgorICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiBhZGRlZCAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiCisgICAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiB0byBtYWtlIGJ1aWxkaW5nIHdpdGggTVNWQyAyMDA4CisgICBtb3JlIHNpbGVudC4KKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogcmVtb3ZlZCAvRnAuLi4gYW5kIC9ZWC4gVGhlc2UKKyAgIG9wdGlvbnMgaW5mbHVlbmNlIGhvdyBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMgYXJlIGdlbmVyYXRlZCwKKyAgIHdoaWNoIGFyZSBub3QgdXNlZCBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QuIC9ZWCBpcyBub3QKKyAgIHN1cHBvcnRlZCBieSBNU1ZDIDIwMDguCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgYSBkdXBsaWNhdGUgb2NjdXJyZW5jZSBvZgorICAgc3RydG91bGwub2JqLgorCisyMDEwLTAyLTI4IDE0OjExICBidmFzc2NoZQorCisgICAqIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvTWFrZWZpbGUuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTY3IChtZXJnZSBvZiBzbm1wZCBhbmQgc25tcGRzZGsgYW5kIGFsc28gb2YKKyAgIG5ldHNubXBtaWJzIGFuZCBuZXRzbm1wbWlic3Nkayk6IGFwcGxpZWQgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvCisgICB0aGUgd2luMzIvQ29uZmlndXJlIHNjcmlwdCBhbmQgd2luMzIvTWFrZWZpbGUuaW4uCisKKzIwMTAtMDItMjcgMTM6MTEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oLCBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oLCAgIAorICAgICAgc25tcGxpYi9nZXRvcHQuYywgc25tcGxpYi9nZXR0aW1lb2ZkYXkuYywgc25tcGxpYi9taWIuYywgICAKKyAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3N0cmxjcHkuYywgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvdWxsLmMsICAgCisgICAgICBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdWNkX2NvbXBhdC5jLCBzbm1wbGliL3dpbnBpcGUuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBkZWNsYXJlZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIGZyb20gdGhlCisgICBOZXQtU05NUCBETEwgYXMgTkVUU05NUF9JTVBPUlQuIFRoZSByZXN1bHQgaXMgYSBtaW5vcgorICAgb3B0aW1pemF0aW9uOiBjb2RlIHRoYXQgdXNlcyB0aGUgTmV0LVNOTVAgRExMIHdpbGwgbm93IGNhbGwgdGhlCisgICBETEwtZXhwb3J0ZWQgZnVuY3Rpb25zIGRpcmVjdGx5IGluc3RlYWQgb2YgaW5kaXJlY3RseSB2aWEgdGhlCisgICBzdHViIGluIHRoZSBpbXBvcnQgbGlicmFyeS4KKworMjAxMC0wMi0yNyAxMTo1MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6CisKKyAgIFJlbW92ZWQgYSByZWR1bmRhbnQgc3RybmNhc2VjbXAoKSBkZWNsYXJhdGlvbi4KKworMjAxMC0wMi0yNyAwOTo1NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3N0cnRva19yLmM6CisKKyAgIEZpeGVkIGEgdHlwbyBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQuCisKKzIwMTAtMDItMjcgMDk6NTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE4OSAocnN0b3J5KTogYnVpbGRzIGFnYWluIG9uIFdpbmRvd3MuCisKKzIwMTAtMDItMjUgMTc6NTMgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsICAgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLCAgCisgICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLCAgCisgICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osICAKKyAgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osICAKKyAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLCB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzIuc2xuLCB3aW4zMi93aW4zMmRsbC5kc3csICAgCisgICAgICB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIFJldmVydGVkIHIxODIwNyAoZHNwL2RzdyB0byB2Y3Byb2ovc2xuIGNvbnZlcnNpb24pIGV4Y2VwdCB0aGUKKyAgIHN1cHByZXNzaW9uCisgICBsaXN0IGNoYW5nZXMuIFRoZSBnb2FsIG9mIHRoaXMgY29udmVyc2lvbiB3YXMgdHdvZm9sZDogbm90IG9ubHkKKyAgIHRvIGJlIGFibGUKKyAgIHRvIGxvYWQgdGhlIHByb2plY3QgZmlsZXMgaW4gTVNWQyAyMDAyIC0gMjAwOCBidXQgYWxzbyB0byBiZSBhYmxlCisgICB0byBjb21taXQKKyAgIGNoYW5nZXMgbWFkZSBmcm9tIGluc2lkZSB0aGUgTVNWQyAyMDA4IElERS4gVW5mb3J0dW5hdGVseQorICAgY29udmVydGluZyBkc3AvZHN3CisgICBmaWxlcyB0byB2Y3Byb2ovc2xuIGZpbGVzIHdpdGggTVNWQyAyMDA4IG1ha2VzIGl0IGltcG9zc2libGUgdG8KKyAgIGxvYWQgdGhlCisgICB2Y3Byb2ovc2xuIGZpbGVzIHdpdGggZWFybGllciBNU1ZDIHZlcnNpb25zLiBXaHkgb24gZWFydGggZGlkCisgICBNaWNyb3NvZnQKKyAgIGRlY2lkZSB0byBwdXQgYSB2ZXJzaW9uIG51bWJlciBpbiBYTUwgZmlsZXMgPworCisyMDEwLTAyLTI0IDE5OjQxICBidmFzc2NoZQorCisgICAqICB3aW4zMiwgd2luMzIvZW5jb2RlX2tleWNoYW5nZSwgICAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsICAgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCB3aW4zMi9saWJhZ2VudCwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycywgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy52Y3Byb2osIHdpbjMyL2xpYm5ldHNubXB0cmFwZCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osIHdpbjMyL2xpYnNubXAsICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgd2luMzIvbmV0c25tcG1pYnMsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osIHdpbjMyL3NubXBidWxrZ2V0LCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCB3aW4zMi9zbm1wYnVsa3dhbGssICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZCwgICAKKyAgICAgIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCB3aW4zMi9zbm1wZGVsdGEsIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osCisgICAgICAgICB3aW4zMi9zbm1wZGYsIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIHdpbjMyL3NubXBnZXQsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQsIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgd2luMzIvc25tcG5ldHN0YXQsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osIHdpbjMyL3NubXBzZXQsICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cywgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIHdpbjMyL3NubXB0YWJsZSwgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLCB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgIAorICAgICAgIHdpbjMyL3NubXB0ZXN0LCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osIHdpbjMyL3NubXB0cmFuc2xhdGUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgd2luMzIvc25tcHRyYXAsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZCwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgd2luMzIvc25tcHVzbSwgICAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdmFjbSwgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLCAgIAorICAgICAgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCB3aW4zMi9zbm1wd2FsaywgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMi5zbG4sIHdpbjMyL3dpbjMyZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgKHJldmVydGVkKSBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IGNvbnZlcnRlZCAuZHNwLy5kc3cgZmlsZXMgdG8KKyAgIC52Y3Byb2ovLnNsbiBmaWxlcy4gVGhpcyBpbXBsaWVzIHRoYXQgc3VwcG9ydCBmb3IgTVNWQyA2LjAgaGFzCisgICBiZWVuIGRyb3BwZWQgYW5kIHRoZSBtaW5pbXVtIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24KKyAgIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBpcyBNaWNyb3NvZnQgVmlzdWFsCisgICBTdHVkaW8gLk5FVCAoMjAwMikuCisKKzIwMTAtMDItMjMgMTk6MDMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiB3aGVuIGdlbmVyYXRpbmcgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgc3lzdGVtCisgICBsb2NhdGlvbiBhbmQgbm8gZG9tYWluIG5hbWUgaXMgZm91bmQgaW4gL2V0Yy9yZXNvbHYuY29uZiwgdXNlCisgICAiQG5vLndoZXJlIiBpbnN0ZWFkIG9mICIiLgorCisyMDEwLTAyLTIzIDE4OjUwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgbTQvYWNfcHJvbXB0X3VzZXIubTQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2VzIG5vCisgICBsb25nZXIgaW52b2tlICJ0YWlsIC0xIiwgd2hpY2ggaXMgbm90IFBPU0lYLWNvbXBsaWFudC4KKworMjAxMC0wMi0yMyAxODo0NSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCB0ZXN0aW5nL3Rlc3RzL1QzNjBkdGxzdWRwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzk5YWxpYXM6CisKKyAgIFJlbW92ZWQgYWxsIHRyYW5zcG9ydCB0ZXN0cyBzaW5jZSBpdCdzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lCisgICB3aGVyZSB0aGV5IGNhbiBzYWZlbHkgb3BlcmF0ZSAod2FzIHN0b3BwaW5nIHRhbmRlcnMnIG5pZ2h0bHkKKyAgIHRlc3RzIGZyb20gc3VjY2VlZGluZykKKworMjAxMC0wMi0yMyAxODo0MSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBlcnJvciBhbmQgZGVidWdnaW5nIG91dHB1dAorCisyMDEwLTAyLTIzIDE4OjQwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHRoZSBzZXJ2ZXIgY29udGV4dCBnZW5lcmF0b3IgdG8gYWN0dWFsbHksIHVtLCByZXR1cm4gdGhlCisgICBjb250ZXh0LgorCisyMDEwLTAyLTIzIDE4OjQwICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgaW5pdGlhbGl6ZSB0aGUgJ3JlcycgdmFyaWFibGUgc2luY2UgaXQncyBjaGVja2VkCisKKzIwMTAtMDItMjMgMTg6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgcHJvZ3Jlc3MgdG93YXJkIGEgcmVhbCBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTAyLTIzIDE4OjM4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgdGxzdGNwIGN0b3IgaW52b2NhdGlvbgorCisyMDEwLTAyLTIzIDE4OjM4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg6CisKKyAgIHJlcXVpcmUgVExTQmFzZQorCisyMDEwLTAyLTIzIDE4OjM3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBhZGRlZCBob3N0IGlkZW50aWZpZXIgYXMgb3V0cHV0CisKKzIwMTAtMDItMjMgMTg6MzUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNpZ25pZmljYW50IG1vcmUgd29yayBvbiB0aGUgVExTIFRDUCBkb21haW4KKworMjAxMC0wMi0yMyAxNzo0MyAgYnZhc3NjaGUKIAogICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIFJlZ2VyYXRlIGNvbmZpZ3VyZSBzY3JpcHQgYWZ0ZXIgcmV2LiAxODE5MyAoYXV0b21hdGljIFJQTSB2ZXJzaW9uCi0gICBkZXRlY3Rpb24pLgotICAgTmV0LVNOTVAgc2hvdWxkIGNvbXBpbGUgd2l0aCBycG0tNC42IGF1dG9tYXRpY2FsbHkuCisgICBGb2xsb3ctdXAgZm9yIHIxODE5MyAoanNhZnJhbmVrKTogcmVyYW4gYXV0b3JlY29uZiBmb3IgdGhlIHRydW5rCisgICBhbmQgdGhlIDUuNSBicmFuY2guCisKKzIwMTAtMDItMjMgMTQ6NTggIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgdXNlIE5FVFNOTVBfUFJJeiBpbnN0ZWFkIG9mICV6CiAKIDIwMTAtMDItMjMgMTI6MjcgIGpzYWZyYW5lawogCi0gICAqIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CiAKICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBGaXhlZCBjb21waWxhdGlvbiB3aXRoIHJwbS00LjYuCiAgICBUdXJuIG9uIHRoZSBsZWdhY3kgQVBJIHdoZW4gcnBtLTQuNiBpcyBkZXRlY3RlZC4KIAorMjAxMC0wMi0yMyAwNzozOCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBSZXZlcnRlZCByMTgwMDAgKGRpc2FibGluZyBTSUdBTFJNIHN1cHBvcnQpIGJlY2F1c2UgdGhpcyBpbnZvbHZlcworICAgYSBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZS4KKworMjAxMC0wMi0yMyAwMDozNiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVENQRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvIGluIGNvbW1lbnQKKworMjAxMC0wMi0yMyAwMDozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBkZWJ1ZyBtc2cgdHdlYWtzOyB1c2UgbmV3IHRyYW5wb3J0IGZ1bmN0aW9ucworICAgLSBhZGQgZGVidWcgaGVhZGVyIGZvciBzbm1wIHZlcnNpb24KKyAgIC0gYWRkIGxlbmd0aCB0byBkZWJ1ZyBzZW5kL3JlY2VpdmUgbWVzc2FnZXMKKyAgIC0gdXNlIG5ldyB0cmFucG9ydCBmdW5jdGlvbnMgZm9yIHNlbmQvcmVjdi9maW5kaW5nIHBlZXIgYWRkcmVzcworCisyMDEwLTAyLTIzIDAwOjI1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGFkZCBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZywgbmV0c25tcF90cmFuc3BvcnRfc2VuZCAmCisgICBuZXRzbm1wX3RyYW5zcG9ydF9yZWN2CisgICAtIG1vdmVzIHRyYW5zcG9ydCBtYW5pcHVsYXRpb24gaW50byB0cmFuc3BvcnQgY29kZQorICAgLSBjZW50cmFsIHBsYWNlIGZvciBsb2dnaW5nL2RlYnVnZ2luZyBzZW50L3JlY2VpdmVkIGRhdGEKKworMjAxMC0wMi0yMiAxOTozMyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMgbm8KKyAgIGxvbmdlciBpbnZva2UgInRhaWwgLTEiLCB3aGljaCBpcyBub3QgUE9TSVgtY29tcGxpYW50LgorCisyMDEwLTAyLTIyIDE5OjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTg2LiBSZWdyZXNzaW9uIHRlc3QgMzQgKHdoZXRoZXIgYXV0aGVudGljYXRpb24KKyAgIGZhaWx1cmUgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQpIHBhc3NlcyBub3cgYWdhaW4uCisKKzIwMTAtMDItMjIgMDk6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IG1hZGUgc3VyZSB0aGF0IGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWx1cmUgZG9lcworICAgbm90IGNyZWF0ZSBkYW5nbGluZyBwb2ludGVycyBpbiB0aGUgTUlCIHN1YnRyZWUgcmVnaXN0cnkuCisKKzIwMTAtMDItMjIgMDk6MTEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQsIGFwcHMsIGFwcHMvc25tcG5ldHN0YXQ6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wMi0yMiAwODo0MiAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmU6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDg0OiBmaXhlZCBsaWJlYXkzMiAoT3BlblNTTCkgY29uZmlndXJlIHRlc3QgZm9yCisgICBNaW5HVy4KKworMjAxMC0wMi0yMiAwODozMSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgRm9sbG93LXVwIGZvciByMTgwODQ6IGZpeGVkIGxpYmVheTMyIChPcGVuU1NMKSBjb25maWd1cmUgdGVzdCBmb3IKKyAgIE1pbkdXLgorCisyMDEwLTAyLTIyIDA4OjEzICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBNaW5HVyB3aGVuIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgorCisyMDEwLTAyLTIxIDE4OjU4ICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIHdpbjMyL2xpYnNkbGwuZHN3LCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgd2luMzIvd2luMzJkbGwuZHN3OgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHJlbmFtZWQgbGlic2RsbC5kc3cgaW50byB3aW4zMmRsbC5kc3cuCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHNpbXBsaWZpZWQgbGlua2luZyB0aGUgTmV0LVNOTVAKKyAgIGFwcGxpY2F0aW9ucyB3aXRoIG5ldHNubXAuZGxsIGJ5IGFkZGluZyBhbGwgYXBwbGljYXRpb24gcHJvamVjdHMKKyAgIHRvIHRoZSBzYW1lIHdvcmtzcGFjZSB0aGF0IGlzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBETEwuCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgbmV0c25tcC5kbGwgbGVzcyBlcnJvcgorICAgcHJvbmUgYnkgbGV0dGluZyB0aGUgY29tcGlsZXIgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUKKyAgIHByZXByb2Nlc3NvciBzeW1ib2wgTkVUU05NUF9VU0VfRExMIGhhcyBub3QgYmVlbiBkZWZpbmVkLgorCisyMDEwLTAyLTIxIDE4OjUxICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBBZGRlZCBsaWJzbm1wLmRlZiB0byB0aGUgbGlzdCBvZgorICAgbGlic25tcF9kbGwuZHNwIHNvdXJjZSBmaWxlcyBzdWNoIHRoYXQgdGhlIERMTCBpcyByZWJ1aWx0IHdoZW4KKyAgIHRoZSAuZGVmIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQuCisKKzIwMTAtMDItMjEgMTg6NDUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogZXhwb3J0ZWQgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoKSBmcm9tCisgICBuZXRzbm1wLmRsbC4KKworMjAxMC0wMi0yMSAxNzozOSAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTW9yZSBXaW4zMiBJUHY2IHNvdXJjZSBjb2RlIGNvbnNpc3RlbmN5IGltcHJvdmVtZW50czoKKyAgIC0gTW92ZWQgI3VuZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVggZnJvbSBzbm1wbGliLyouYyB0bworICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguCisgICAtIENoYW5nZWQgdGhlIGdsb2JhbCBpbjZhZGRyX2FueSB2YXJpYWJsZSBpbnRvIGEgc3RhdGljIHZhcmlhYmxlCisgICBzdWNoIHRoYXQKKyAgIG11bHRpcGxlIGRlZmluaXRpb25zIGRvIG5vdCB0cmlnZ2VyIGEgbGlua2VyIGVycm9yLgorICAgLSBBZGRlZCB0eXBlZGVmcyBmb3IgdWludDhfdCwgaW50OF90LCB1aW50MTZfdCBhbmQgaW50MTZfdC4KKyAgIC0gUmVwbGFjZWQgJyNpZiBORVRTTk1QX0VOQUJMRV9JUFY2JyBieSAnI2lmZGVmCisgICBORVRTTk1QX0VOQUJMRV9JUFY2Jy4KKworMjAxMC0wMi0yMSAwODozMCAgdGFuZGVycworCisgICAqIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jOgorCisgICBtYWtlIHN1cmUgdGhhdCBJTkFERFJfTk9ORSBpcyBkZWZpbmVkIChmaXhlcyBidWlsZCBlcnJvciBvbgorICAgU29sYXJpcykKKworMjAxMC0wMi0xOSAxOTozOSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgU3luY2hyb25pemVkIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGFuZAorICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4uCisKKzIwMTAtMDItMTkgMTQ6MTggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogbGlic25tcCBidWlsZHMgYWdhaW4gYXMgYSBETEwgd2hlbiBJUHY2IGlzCisgICBlbmFibGVkLgorCisyMDEwLTAyLTE5IDEzOjIyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBGb2xsb3cgdXAgZm9yIHIxODE2NDogc3luY2hyb25pemVkIGxpYnNubXAuZGVmLmluIHdpdGgKKyAgIGxpYnNubXAuZGVmCisKKzIwMTAtMDItMTkgMDk6MDUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBhZGRlZCAjaW5jbHVkZSA8bWFsbG9jLmg+IGluCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBzdWNoIHRoYXQgdGhlIE1TVkMgY29tcGlsZXIKKyAgIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIGJ5IHRoZSBtYWxsb2MgcmVkZWZpbml0aW9uIHdoZW4gYnVpbGRpbmcKKyAgIGxpYnNubXAgYXMgYSBETEwuCisKKzIwMTAtMDItMTkgMDg6NTkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBFeHBvcnRlZCBuZXRzbm1wX3BhcnNlX2FyZ3MoKSBzdWNoIHRoYXQgdGhlIE5ldC1TTk1QIGFwcGxpY2F0aW9ucworICAgYnVpbGQgYWdhaW4gd2hlbiBsaWJzbm1wIGlzIGJ1aWx0IGFzIGEgRExMLgorCisyMDEwLTAyLTE5IDA4OjU2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbW92ZWQgTVNWQyBPcGVuU1NMIGxpbmtlciBzZXR0aW5ncyBmcm9tCisgICBzbm1wbGliL2tleXRvb2xzLmMgdG8gd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggc3VjaCB0aGF0CisgICB0aGVzZSBzZXR0aW5ncyBhcmUgbm90IG9ubHkgZWZmZWN0aXZlIHdoZW4gYnVpbGRpbmcgc25tcGxpYiBhcyBhCisgICBzdGF0aWMgbGlicmFyeSBidXQgYWxzbyB3aGVuIGFueSBOZXQtU05NUCBhcHBsaWNhdGlvbiBpcyBidWlsdAorICAgdGhhdCBsaW5rcyB3aXRoIHNubXBsaWIgYXMgYSBzdGF0aWMgbGlicmFyeSBvciBhcyBhIERMTC4KKworMjAxMC0wMi0xOSAwODozMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIFdpbjMyIGNsZWFudXA6IE1TVkMgLyBETEwgdGVzdHMgbm93IHVzZSB0aGUgb2ZmaWNpYWxseSBlbmRvcnNlZAorICAgbWFjcm8gbmFtZXMuCisKKzIwMTAtMDItMTkgMDc6NTAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBCdWlsZHMgYWdhaW4uCisKKzIwMTAtMDItMTkgMDY6NDcgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFBBVENIOiAyOTQyOTQwOiBmcm9tICJCaWxsIEZlbm5lciI6IEFkZCBhIG5ldworICAgZnVuY3Rpb24sIG5ldHNubXBfcGFyc2VfYXJncywgdGhhdCBpcyBsaWtlIHNubXBfcGFyc2VfYXJncyBidXQKKyAgIHRha2VzIGFuIGFkZGl0aW9uYWwgYml0bWFzaywgZmxhZ3MsIHRvIGFmZmVjdCB0aGUgYmVoYXZpb3VyLiBBbHNvCisgICByZW1vdmUgdGhlIG1hZ2ljIGhhbmRsaW5nIG9mIHNvbWUgYXBwbGljYXRpb24gbmFtZXMuCisKKzIwMTAtMDItMTggMTQ6MjIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvYmluOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDItMTggMTQ6MjAgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcDoKKworICAgU29ydGVkIG5hbWVzIG9mIHNvdXJjZSBmaWxlcyBhbHBoYWJldGljYWxseS4KKworMjAxMC0wMi0xOCAxMzowMyAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCBzbm1wbGliL3dpbnNlcnZpY2UuYywgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCB3aW4zMi9uZXRzbm1wbWlic3NkaywgICAKKyAgICAgIHdpbjMyL3NubXBkc2RrLCB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgQ0hBTkdFUzogV2luMzI6IGRyb3BwZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgTmV0LVNOTVAgd2l0aAorICAgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wIHdpdGhvdXQgcGxhdGZvcm0gU0RLLiBCdWlsZGluZworICAgTmV0LVNOTVAgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LjAgKyBQU0RLIG9yIGFueSBsYXRlcgorICAgdmVyc2lvbiBvZiBNU1ZDIGlzIHN0aWxsIHBvc3NpYmxlIGhvd2V2ZXIuCisgICAKKyAgIE5vdGU6IGlmIGluIHRoZSBmdXR1cmUgZm9yIHdoYXRldmVyIHJlYXNvbiBpdCBzaG91bGQgYmVjb21lCisgICBuZWNlc3NhcnkgYWdhaW4gdG8gYmUgYWJsZSB0byBidWlsZCBOZXQtU05NUCB3aXRoIE1TVkMgd2l0aG91dAorICAgcmVseWluZyBvbiB0aGUgcGxhdGZvcm0gU0RLIGhlYWRlcnMsIHBsZWFzZSAjaWZkZWYgb3V0IHRoZSBNSUIKKyAgIGNvZGUgdGhhdCByZWxpZXMgb24gdGhlIFBTREsgaGVhZGVycyBpbnN0ZWFkIG9mIHNwbGl0dGluZyB0aGUKKyAgIHdvcmtzcGFjZSBmaWxlcyBhZ2Fpbi4KKworMjAxMC0wMi0xOCAxMjo1NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jOgorCisgICBkb3MydW5peC4KKworMjAxMC0wMi0xOCAwOTo0NSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaDoKKworICAgU291cmNlIGNvZGUgY2xlYW51cDoKKyAgIC0gTW92ZWQgZG9jdW1lbnRhdGlvbiBvZiBuZXRzbm1wX2xhcmdlX2ZkX3NldCBtZW1iZXJzIHRvIHRoZQorICAgY29tbWVudAorICAgYmxvY2sganVzdCBhYm92ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHR5cGUuCisgICAtIFJlbW92ZWQgc3VwZXJmbHVvdXMgJ2V4dGVybiAiQyInIHNwZWNpZmllcjogdGhpcyBsaW5rYWdlCisgICBzcGVjaWZpZXIKKyAgIG9ubHkgaGFzIGFuIGVmZmVjdCBvbiBkZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIG9mIGZ1bmN0aW9ucyBhbmQKKyAgIG5vdAorICAgb24gdHlwZWRlZnMgb3Igc3RydWN0IGRlZmluaXRpb25zLgorICAgLSBSYW4gdGhpcyBoZWFkZXIgZmlsZSB0aHJvdWdoIGluZGVudC4KKworMjAxMC0wMi0xOCAwOToyNiAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQVjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBDaGFuZ2VzOgorICAgLSBCdWlsZHMgYWdhaW4gd2l0aCBNU1ZDLgorICAgLSBGaXhlZCBhIGZldyBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSBNU1ZDIChwYXNzaW5nIGludAorICAgaW5zdGVhZCBvZiB1X3Nob3J0IHRvIGh0b25zKCkgLyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdGhhdCB3ZXJlCisgICBtaXNzaW5nIGJlY2F1c2Ugb2YgbWlzc2luZyAjaW5jbHVkZSBkaXJlY3RpdmVzKS4KKworMjAxMC0wMi0xNiAxNzoxNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBUaGUgaGVhZGVyIGZpbGUgPHN5cy90aW1lYi5oPiBpcyBubyBsb25nZXIKKyAgIGluY2x1ZGVkIGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+LiBPcjogdGhlIGhlYWRlciBmaWxlCisgICA8c3lzL3RpbWViLmg+IHdpbGwgaGF2ZSB0byBiZSBpbmNsdWRlZCBleHBsaWNpdGx5IGluIHNvdXJjZSBmaWxlcworICAgdGhhdCBuZWVkIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZnRpbWUoKS4KKyAgIAorICAgTm90ZTogY29tcGFyZWQgdG8gcjE4MDI0IGFuZCBiZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGFmZmVjdAorICAgQlNEIHN5c3RlbXMgLS0gPHN5cy90aW1lYi5oPiB3YXMgb25seSBpbmNsdWRlZCBmcm9tCisgICA8bmV0LXNubXAvdHlwZXMuaD4gb24gQlNEIHN5c3RlbXMgaW4gcmV2aXNpb25zIHIxODAyNS4ucjE4MTUyLgorCisyMDEwLTAyLTE0IDE5OjI5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q4Lmg6CisKKyAgIEJ1aWxkcyBub3cgb24gRnJlZUJTRCB2ZXJzaW9uIDguMC4KKworMjAxMC0wMi0xMyAyMDo1OSAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmg6CisKKyAgIEFkanVzdCB0aGUgcGxhY2VtZW50IG9mIDsncyBpbiBvcmRlciB0bworICAgYSkgQXZvaWQgd2FybmluZ3MgYWJvdXQgc3B1cmlvdXMgc2VtaWNvbG9ucworICAgYikgTm90IGhhdmUgdW50ZXJtaW5hdGVkIGRlY2xhcmF0aW9ucyBpbiBoZWFkZXJzCisKKzIwMTAtMDItMTIgMDI6NTcgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjOgorCisgICBDSEFOR0VTOiBtaWIyYzogdXBkYXRlIGlubGluZSBkb2N1bWVudGF0aW9uOyBhZGQgc3RvcmFnZXR5cGUgdGVzdAorICAgZm9yIGNvbHVtbnMKKworMjAxMC0wMi0xMiAwMTo1MCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGZpeCB0eXBvIGluIGRlZmluZQorCisyMDEwLTAyLTEyIDAxOjA1ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBmaXggc2VkIHByb2Nlc3Npbmcgb24gd2hpdGUtc3BhY2UgYWRkaW5nIHNvbGFyaXMgbWFjaGluZXMKKworMjAxMC0wMi0xMCAyMzo1NiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgYWRkIHRvcCBzcmNkaXIgdG8gY3BwIHNlYXJjaCBwYXRoCisKKzIwMTAtMDItMTAgMjM6NTIgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBmcmVlYnNkIG5lZWRzIHRpbWUuaCBhYm92ZSB0aW1lYi5oCisKKzIwMTAtMDItMTAgMjM6MzcgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIHVzZSBzZWQgd2l0aCBtdWx0aXJlcGxhY2Ugb24gYSBsaW5lIHRvIGZpeCBwb3NzaWJsZSB3aGl0ZXNwYWNlCisgICBpc3N1ZSBvbiBzb2xhcmlzCisKKzIwMTAtMDItMTAgMjM6MjIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGJlZ2lubmluZyB3b3JrIGZvciBUTFMgc2VwYXJhdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHdpdGggYSBiYXNlCisgICBmaWxlCisKKzIwMTAtMDItMTAgMjM6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oOgorCisgICBtb3ZlIGJhc2UgdHJhbnNwb3J0IGNyZWF0aW9uIGZ1bmN0aW9uIG91dCBvZiBsaW51eCBpZmRlZnMKKworMjAxMC0wMi0xMCAyMzoyMSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZWQgYW5vdGhlciBlcnJvciBsb2dnaW5nIGZ1bmN0aW9uCisKKzIwMTAtMDItMTAgMjM6MjAgIGhhcmRha2VyCisKKyAgICogbWlicy9ORVQtU05NUC1UQy50eHQ6CisKKyAgIGFkZGVkIFRMUyBvdmVyIFRDUAorCisyMDEwLTAyLTEwIDE2OjM5ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBMaW51eDogSW1wcm92ZWQgRXRoZXJMaWtlLU1JQiBzdXBwb3J0CisgICBQYXRjaCBzdXBwbGllZCBieSBKb3NlZiBNb2VsbGVycworCiAyMDEwLTAyLTEwIDEwOjA0ICBkdHMxMgogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CkBAIC0yODkwLDUxICs0NjIzNSwyODUgQEAKICAgIENIQU5HRVM6IHB5dGhvbjogU3VwcG9ydCBudWxsLWJ5dGVzIGluIG9jdGV0IHN0cmluZ3MKICAgIFBhdGNoIHN1cHBsaWVkIGJ5IFRvbW15IEJlYWRsZQogCi0yMDEwLTAyLTA5IDE1OjA1ICBidmFzc2NoZQorMjAxMC0wMi0xMCAwMDo1OSAgaGFyZGFrZXIKIAotICAgKiAgLiwgUkVBRE1FLndpbjMyLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5oLCB3aW4zMi9NZ210QXBpLXdpbkV4dERMTC5oLCAgIAotICAgICAgd2luMzIvU25tcC13aW5FeHRETEwuaDoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKIAotICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogd29ya3Mgbm93IG9uIFdpbmRvd3MgVmlzdGEsIFdpbmRvd3MgNwotICAgYW5kIFdpbmRvd3MgMjAwOCB0b28uCi0gICBDSEFOR0VTOiBXaW4zMjogc2ltcGxpZmllZCBidWlsZGluZyBOZXQtU05NUCArIHdpbkV4dERMTCB3aXRoCi0gICBNU1ZDLgotICAgQ0hBTkdFUzogTWluR1c6IHdpbkV4dERMTDogYnVpbGRzIG5vdy4KLSAgIE5vdGU6IGFsbCB0aGVzZSBjaGFuZ2VzIGhhdmUgYmVlbiBiYWNrcG9ydGVkIGZyb20gdGhlIHRydW5rLgorICAgbW92ZWQgVExTIGluZnJhc3RydWN0dXJlIGludG8gYSBiYXNlIGRvbWFpbiBmaWxlCiAKLTIwMTAtMDItMDkgMTQ6MjkgIGJ2YXNzY2hlCisyMDEwLTAyLTEwIDAwOjA0ICBoYXJkYWtlcgogCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaDoKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgogCi0gICBDSEFOR0VTOiBXaW4zMjogYWRkZWQgI2luY2x1ZGUgPHN0ZGlvLmg+IGluCi0gICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmggc3VjaCB0aGF0IE5ldC1TTk1QIDUuNQotICAgYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4KKyAgIG1vdmVkIHNvY2tldDYgZnVuY3Rpb25zIHRvIHRoZSBpcHY2IGJhc2UKIAotMjAxMC0wMi0wOCAxOTo0NyAgYnZhc3NjaGUKKzIwMTAtMDItMTAgMDA6MDMgIGhhcmRha2VyCiAKLSAgICogIC4sIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCwgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oLCAgIAotICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgsICAgCi0gICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgICAKLSAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaDoKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgogCi0gICBDSEFOR0VTOiBzbm1wZCwgc25tcGxpYjogUmVtb3ZlIHRoZSBpbmxpbmUgZGVjbGFyYXRpb25zIGZvcgotICAgZnVuY3Rpb25zIHRoYXQgbGFjayBhbiBpbmxpbmUgZGVmaW5pdGlvbi4KLSAgIAotICAgQmFja3BvcnRlZCByMTY5MjYgZnJvbSB0aGUgdHJ1bmsgdG8gdGhlIDUuNCBicmFuY2ggYmVjYXVzZSBNYXJpbwotICAgR2FydG5lciBwb3N0ZWQKLSAgIHBhdGNoIDI5NDUyMDIgaW4gd2hpY2ggaGUgcmVwb3J0ZWQgdGhhdCBnY2MgcHJpbnRlZCBzZXZlcmFsCi0gICB3YXJuaW5ncyBsaWtlIHRoZQotICAgZm9sbG93aW5nIGZvciB0aGUgY29kZSBvbiB0aGUgNS40IGJyYW5jaDoKLSAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oOjI0MTogd2FybmluZzogaW5saW5lCi0gICBmdW5jdGlvbiAndm9pZCoKLSAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvKiwgY29uc3QKLSAgIGNoYXIqKScgdXNlZCBidXQKLSAgIG5ldmVyIGRlZmluZWQKKyAgIHdoaXRlIHNwYWNlIGZvcm1hdHRpbmcKIAotMjAxMC0wMi0wNSAwOTo0OCAganNhZnJhbmVrCisyMDEwLTAyLTEwIDAwOjAzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIHVkcF9zZW5kL3JlY3YgdG8gdWRwYmFzZQorCisyMDEwLTAyLTEwIDAwOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlIG5ldHNubXBfc29ja19idWZmZXJfc2V0IGludG8gc29ja2V0YmFzZQorCisyMDEwLTAyLTEwIDAwOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgaXB2NCBzcGVjaWZpYyBVRFAgdHJhbnNwb3J0IGNyZWF0aW9uIHRvIHVkcGlwdjQgYmFzZQorCisyMDEwLTAyLTEwIDAwOjAxICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgbWFkZSBjb21tb24gZnVuY3Rpb25zIGJlIHJlZmVyZW5jZWQgZGlyZWN0bHkgYnkgdGhlIHRyYW5zcG9ydHMKKyAgIGFuZCByZW1vdmVkIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHk7IHRoZXkgd2VyZSBzdGF0aWMgc28gdGhlcmUgaXMKKyAgIG5vIGJhY2t3YXJkcyBjb21wYXQgaXNzdWVzCisKKzIwMTAtMDItMTAgMDA6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgc29ja2V0IGJhc2VkIGNsb3NlIHRvIGEgc29ja2V0IGJhc2VkIGRvbWFpbiBjb21tb24gdG8gbWFueQorICAgdGhpbmdzCisKKzIwMTAtMDItMDkgMjM6NTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYzoKKworICAgbW92ZSBUQ1AgY29tbW9uIGZ1bmN0aW9ucyB0byBhIFRDUEJhc2UgZG9tYWluIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDItMDkgMjM6NTcgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHdhcm5pbmcgY2xlYW51cAorCisyMDEwLTAyLTA5IDIzOjU2ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICB0bVN0YXRlUmVmZXJlbmNlIHNob3VsZCBiZSB1c2luZyB0aGUgaW5kZXhlZCBhZGRyX3BhaXIKKworMjAxMC0wMi0wOSAyMzo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1ha2UgbmV0c25tcF9kdGxzdWRwX2Nsb3NlIG1ha2UgdXNlIG9mIG5ldHNubXBfYmFzZXVkcF9jbG9zZQorCisyMDEwLTAyLTA5IDIzOjU1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIGJhc2UgVURQIHNvY2tldCBjcmVhdGlvbiBpbnRvIGEgY29tbW9uIGJhc2UgZnVuY3Rpb24gYW5kCisgICBtYWRlIHVzZSBvZiBpdAorCisyMDEwLTAyLTA5IDIzOjU0ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmg6CisKKyAgIHByb3BlciBfSCBpZmRlZiBjaGVja3MKKworMjAxMC0wMi0wOSAyMzo1NCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBhZGRlZCBhIHJhdyBVRFAgYmFzZSBkb21haW4KKworMjAxMC0wMi0wOSAyMzo1MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgY3JlYXRlZCBhIFVEUCBJUHY0IGJhc2U7IG1vdmVkIGFuZCByZXVzZWQgbW9yZSBpbmZyYXN0cnVjdHVyZQorCisyMDEwLTAyLTA5IDIzOjUxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCBpcHY0IGFkZHJlc3MgZm9ybWF0dGluZyBpbnRvIHNubXBJUHY0QmFzZURvbWFpbgorCisyMDEwLTAyLTA5IDIzOjUxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmM6CisKKyAgIHY2IGRvbWFpbiBpbmZyYXN0cnVjdHVyZSBmaWxlcworCisyMDEwLTAyLTA5IDIzOjUxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQVjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUFY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYzoKKworICAgdjYgZG9tYWluIGluZnJhc3RydWN0dXJlIGZpbGVzCisKKzIwMTAtMDItMDkgMjM6NTAgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBWNEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBWNEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBOZXcgSVB2NCBhbmQgSVAgYmFzZSB0cmFuc3BvcnQgZmlsZXMKKworMjAxMC0wMi0wOSAyMzo0OCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGRvbid0IGRvdWJsZSBpbmNsdWRlIHRyYW5zcG9ydCBtb2R1bGVzCisKKzIwMTAtMDItMDkgMjM6NDggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaDoKKworICAgbW92ZWQgYXJjaGl0ZWN0dXJlIHRlc3RzIGludG8gdGhlIGhlYWRlciBmaWxlcyB1c2luZyBjb25maWdfZXJyb3IKKyAgIGZvciBzaWduYWxpbmcgcHJvYmxlbXMKKworMjAxMC0wMi0wOSAyMzo0NiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIG1vdmVkIGFyY2hpdGVjdHVyZSB0ZXN0cyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdXNpbmcgY29uZmlnX2Vycm9yCisgICBmb3Igc2lnbmFsaW5nIHByb2JsZW1zCisKKzIwMTAtMDItMDkgMjM6NDUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oOgorCisgICBtb3ZlZCBhcmNoaXRlY3R1cmUgdGVzdHMgaW50byB0aGUgaGVhZGVyIGZpbGVzIHVzaW5nIGNvbmZpZ19lcnJvcgorICAgZm9yIHNpZ25hbGluZyBwcm9ibGVtcworCisyMDEwLTAyLTA5IDIzOjQzICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgY2hlY2sgZm9yIGFuZCByZXBvcnQgY29uZmlnX2Vycm9ycyBpbiB0cmFuc3BvcnQgaGVhZGVycworCisyMDEwLTAyLTA5IDIzOjQzICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBhbGxvdyBhIE5FVFNOTVBfUVVJQ0tfQ0hFQ0sgZW52IHZhcmlhYmxlIHRvIGJ5cGFzcyBoZWFkZXIgY2hlY2tzCisKKzIwMTAtMDItMDkgMjM6NDIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBiZXR0ZXIgY29tbWVudHMKKworMjAxMC0wMi0wOSAyMzo0MiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGNoZWNrIGZvciBjb25maWdfcmVxdWlyZSBtYWNyb3MgaW4gdHJhbnNwb3J0IGhlYWRlcnMgZm9yCisgICBmb3JjZS1pbmNsdWRpbmcgb2Ygb3RoZXIgdGhpbmdzCisKKzIwMTAtMDItMDkgMjM6NDEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBwZXJsL2FnZW50L2FnZW50LnhzLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBkZWZpbmUgYSBzdGFuZGFyZGl6ZWQgaW5kZXhlZCBhZGRyX3BhaXIgaW5zdGVhZCBvZiB1c2luZyBvbmUKKyAgIGxhYmVsZWQgb25seSBmb3IgVURQIGV2ZXJ5d2hlcmUKKworMjAxMC0wMi0wOSAyMzo0MCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZml4IHRyYW5zcG9ydCBwcmVmaXggbGlzdCBmb3IgaW5jb21pbmcgbWVzc2FnZXMKKworMjAxMC0wMi0wOSAyMzo0MCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oLCBzbm1wbGliL3NubXB0c20uYzoKKworICAgcmVtb3ZlIHRoZSBzZWN1cml0eSBsZXZlbCBmcm9tIHRoZSBUU00gY2FjaGU7IHByZXZpb3VzIGV4aXN0ZW5jZQorICAgZnJvbSBmcm9tIGEgZHJhZnQgY29weSBvZiB0aGUgVFNNIFJGQyBhbmQgaXMgbm93IHN0b3JlZCBlbnRpcmVseQorICAgaW4gdGhlIHRtIHJlZmVyZW5jZQorCisyMDEwLTAyLTA5IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBpbXBsZW1lbnQgaW5jb21pbmcgVFNNIHByb2NlZHVyZXMgYWNjb3JkaW5nIHRvIFJGQyB0ZXh0CisKKzIwMTAtMDItMDkgMjM6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGltcGxlbWVudCBvdXRnb2luZyBUU00gcHJvY2VkdXJlcyBhY2NvcmRpbmcgdG8gUkZDIHRleHQKKworMjAxMC0wMi0wOSAyMzozOSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaDoKKworICAgY3JlYXRlIGRlZmluZWQgc2l6ZWQgYXJyYXkgYW5kIGxlbmd0aCB2YXJpYWJsZQorCisyMDEwLTAyLTA1IDA5OjUyICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBmaWxlZGVzY3JpcHRpb3IgbGVhayBpbiBFdGhlcmxpa2UtTUlCIGFuZAorICAgUk1PTi1NSUIKKworMjAxMC0wMi0wNCAxNTo1NyAganNhZnJhbmVrCiAKICAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKQEAgLTI5NDUsMjYgKzQ2NTI0LDY0IEBACiAgICBTb21lIGludGVyZmFjZXMgY2FuIHJlcG9ydCB0aGVpciByZWFsIHNwZWVkLCBldmVuIHRoZXkgYXJlIGRvd24uCiAgICBBbmQgaWYgdGhleSBjYW4ndCwgdGhlIGZhbGxiYWNrIHRvIDEwTWJwcyBpcyBzdGlsbCB0aGVyZS4KIAotMjAxMC0wMi0wMSAwMTowNyAgdGFuZGVycworMjAxMC0wMi0wMSAxNDo0NyAgYnZhc3NjaGUKIAotICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcDoKKyAgICogYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jOgogCi0gICBGb2xsb3ctdXAgZm9yIHIxODA5Mzogc2FtZSBjaGFuZ2VzIGZvciBhbGwgYnJhbmNoZXMKKyAgIEZpeGVkIHRoZSBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIHNvdXJjZSBmaWxlCisgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMuCisKKzIwMTAtMDItMDEgMTQ6NDUgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyLCBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogc2ltcGxpZmllZCB0aGUgcHJvY2VkdXJlIGZvciBidWlsZGluZworICAgd2l0aCBTTk1QdjMgc3VwcG9ydCBlbmFibGVkIChPcGVuU1NMKS4KKworMjAxMC0wMi0wMSAxNDozNCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsICAgCisgICAgICBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL21kNS5jLCBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgYWxsIGNhbGxzIHRvIGZyZWUoKSBhcmUgaW50ZXJjZXB0ZWQgd2hlbiBidWlsZGluZworICAgd2l0aCBkbWFsbG9jCisgICBzdXBwb3J0IGVuYWJsZWQuIEluY2x1ZGVkIDxkbWFsbG9jLmg+IGluIHRob3NlIHNvdXJjZSBmaWxlcyB3aGVyZQorICAgaXQgd2FzIG5vdAorICAgeWV0IGluY2x1ZGVkLCBhbmQgcHJvdmlkZWQgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBmcmVlKCkgd2hlcmUKKyAgIHRoZSBhZGRyZXNzIG9mCisgICB0aGlzIGZ1bmN0aW9uIHdhcyB0YWtlbiAoRG1hbGxvYyBjYW4gb25seSBpbnRlcmNlcHQgZnJlZSgpIHdoZW4KKyAgIGl0IGlzIGNhbGxlZAorICAgZGlyZWN0bHkgYnV0IG5vdCB3aGVuIGl0IGlzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcikuCisKKzIwMTAtMDItMDEgMTA6NDkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBORVdTOiBidWlsZGluZzogQnVpbGRpbmcgTmV0LVNOTVAgd2l0aCBkbWFsbG9jIHN1cHBvcnQgZW5hYmxlZCBpcworICAgYWdhaW4gcG9zc2libGUuCiAKIDIwMTAtMDItMDEgMDE6MDUgIHRhbmRlcnMKIAogICAgKiAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgICAKLSAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCwgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcDoKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcDoKIAogICAgQ0hBTkdFUzogYnVpbGRpbmc6ICdtYWtlIHRlc3QgVEVTVE9QVFM9Ii1QIHRjcCInIHdvcmtzIGZpbmUgbm93CiAKLTIwMTAtMDEtMzEgMDE6NDIgIHRhbmRlcnMKKzIwMTAtMDEtMzEgMDg6MDIgIGJ2YXNzY2hlCiAKLSAgICogbWFuL01ha2VmaWxlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMjoKIAotICAgRm9sbG93LXVwIGZvciByMTc3MTAgLyBiYWNrcG9ydCBvZiByMTc3MTI6IHJlbW92ZSBhbiBvYnNvbGV0ZQotICAgbWFudWFsCi0gICBwYWdlIGZyb20gdGhlIHNldCBvZiBmaWxlcyB0aGF0IHNob3VsZCBiZSBpbnN0YWxsZWQKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDg0OiBmaXhlZCBhbiBzaCBzeW50YXggZXJyb3IgaW4gdGhlIGNvbmZpZ3VyZQorICAgc2NyaXB0CisgICB0aGF0IHdhcyB0cmlnZ2VyZWQgb24gc3lzdGVtcyB3aXRob3V0IGxpYmNyeXB0byBhbmQgd2l0aG91dAorICAgbGliZWF5MzIuCisgICBUaGUgZm9sbG93aW5nIGVycm9yIHdhcyByZXBvcnRlZDoKKyAgIGNvbmZpZ3VyZVszMzEzNl06IHg6IHVua25vd24gdGVzdCBvcGVyYXRvcgogCiAyMDEwLTAxLTI5IDIwOjA3ICBqc2FmcmFuZWsKIApAQCAtMjk3OSw2ICs0NjU5NiwxMjggQEAKICAgIEZpeCB0ZXN0IDM1IHdoZW4gY29uZmlndXJlIG9wdGlvbiAnLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuJyB3YXMKICAgIHVzZWQgYW5kIHRoZSBkaXJlY3RvcnkgZm9yIHRlbXAuIGZpbGVzIGRvZXMgbm90IGV4aXN0IHlldC4KIAorMjAxMC0wMS0yOSAxNTowNyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9jbG9zZWRpci5jLCAgIAorICAgICAgc25tcGxpYi9nZXR0aW1lb2ZkYXkuYywgc25tcGxpYi9vcGVuZGlyLmMsIHNubXBsaWIvcmVhZGRpci5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgTW92ZWQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBvcGVuZGlyKCksIHJlYWRkaXIoKSwgY2xvc2VkaXIoKSBhbmQKKyAgIGdldHRpbWVvZmRheSgpIHJlcGxhY2VtZW50cyBmb3IgTVNWQyBmcm9tIHNubXBsaWIvc3lzdGVtLmMgdG8KKyAgIHNlcGFyYXRlIHNvdXJjZSBmaWxlcyBpbiBzbm1wbGliLgorCisyMDEwLTAxLTI5IDA4OjU3ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENvbmZpZ3VyZSBzY3JpcHQgY29uc2lzdGVuY3kgaW1wcm92ZW1lbnQ6IHJlbmFtZWQgdGhlIHZhcmlhYmxlCisgICAic2F2ZWRfTElCUyIgaW50byAibmV0c25tcF9zYXZlX0xJQlMiLgorCisyMDEwLTAxLTI5IDA2OjM5ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogQ2hlY2sgdGhlIHNpemUgb2Ygc3VuX3BhdGggYW5kIHVzZSB0aGF0IHRvCisgICBnZW5lcmF0ZSB0aGUgbWF4aW1hbCBzaXplIHN0cmluZ3MgZm9yIHN0cmVzc2luZyBjb20yc2VjdW5peC4KKworMjAxMC0wMS0yNyAxNToxNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6CisKKyAgIE5FV1M6IE1pbkdXOiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgaXMgYWdhaW4gcG9zc2libGUKKyAgICgnbWFrZSB0ZXN0JykuCisKKzIwMTAtMDEtMjcgMTQ6NDMgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBDeWd3aW46IGJ1aWxkaW5nIHdpdGggYW5vdGhlciBPcGVuU1NMIHBhY2thZ2UgdGhhbiB0aGUKKyAgIEN5Z3dpbi1wcm92aWRlZCBwYWNrYWdlcyBvcGVuc3NsIGFuZCBvcGVuc3NsLWRldmVsIGlzIGFnYWluCisgICBwb3NzaWJsZS4KKyAgIE5FV1M6IE1pbkdXOiBidWlsZGluZyB3aXRoIE9wZW5TU0wgd29ya3MgYWdhaW4uCisKKzIwMTAtMDEtMjYgMjE6MjcgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSB0aGUgY29udGV4dCBhcmd1bWVudCBvZiBzZW5kX3YzdHJhcCwKKyAgIHNlbmRfdHJhcF92YXJzX3dpdGhfY29udGV4dCBhbmQgbmV0c25tcF9zZW5kX3RyYXBzIHJlZmVyIHRvIGEKKyAgIGNvbnN0IGNoYXIqLgorCisyMDEwLTAxLTI2IDIxOjI0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzoKKworICAgQ29ycmVjdCBtaXNzcGVsbGluZyAtICNlbHNpZiB0byAjZWxpZgorCisyMDEwLTAxLTI2IDIxOjIxICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBBcHBhcmVudGx5IG5vdCBhbGwgc3lzdGVtcyBkZWZpbmUgSU5FVF9BRERSU1RSTEVOIHNvIGFkZCBpdCBpZiBpdAorICAgaXMgbWlzc2luZy4KKworMjAxMC0wMS0yNiAxNTo0NiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1RFU1RDT05GLnNoOgorCisgICBBZGRlZCBuZXRzdGF0IHBhdGggZm9yIE1pbkdXLgorCisyMDEwLTAxLTI2IDE1OjAwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBmaXggc3RhdCBuYW1lcworCisyMDEwLTAxLTI2IDE1OjAwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuCisKKzIwMTAtMDEtMjYgMTQ6NTkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHVzZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4KKworMjAxMC0wMS0yNiAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybgorCisyMDEwLTAxLTI2IDE0OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB1cGRhdGUgY29tbWVudHMgdG8gcmVmbGVjdCBSRkM1NTkxIGFzIHRoZSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZQorICAgaW1wbGVtZW50YXRpb24KKworMjAxMC0wMS0yNiAxMTo0MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaDoKKworICAgTkVXUzogQ3lnd2luOiBCVUc6IDI5MzkxNjg6IGJ5dGUgb3JkZXIgb2YgdWRwTG9jYWxQb3J0IGlzIG5vdworICAgY29ycmVjdC4KKworMjAxMC0wMS0yNiAxMDo0NiAgYnZhc3NjaGUKKworICAgKiAgbmV0LXNubXAtY29uZmlnLmluLCB0ZXN0aW5nL1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybDoKKworICAgTkVXUzogQ3lnd2luOiBCVUc6IDI5MzkxNjg6IGZpeGVkIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgKCJtYWtlCisgICB0ZXN0IikuIFRoaXMgaGFzIGJlZW4gZml4ZWQgYnkgdXNpbmcgdGhlIHByb3BlciBlbnZpcm9ubWVudAorICAgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQgYnkgYWRkaW5nIHRoZSBwYXRoIG9mIHRoZSBuZXRzdGF0CisgICBleGVjdXRhYmxlIGZvciBDeWd3aW4gaW4gdGVzdGluZy9URVNUQ09ORi5zaC4KKwogMjAxMC0wMS0yNiAwOToyNyAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKQEAgLTI5OTUsMTIgKzQ2NzM0LDYyOCBAQAogICAgd2hvbGUgcHJvY2VzcwogICAgaXMgcmVzdGFydGVkIG9ubHkgdGhyZWUgdGltZXMsIHRvIHByZXZlbnQgZW5kbGVzcyBsb29wLgogCisyMDEwLTAxLTI1IDIyOjE2ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDogRG8gbm90IGNoZWNrIGlmIHZhbHVlcyBvZiB0eXBlIHNpemVfdAorICAgYXJlIGxlc3MgdGhhbiAwLgorCisyMDEwLTAxLTI1IDIyOjExICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQ2hlY2sgdGhlIHJhbmdlIG9mIG9pZCB2YWx1ZXMgdG93YXJkcyB0aGUgbWF4aW11bQorICAgb2lkIHZhbHVlLCBub3RVTE9OR19NQVgKKworMjAxMC0wMS0yNSAyMDowMSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgb25seSBiYWlsIG9uIG1pc3NpbmcgbGliaXBobHBhcGkgZm9yIHh3aW5zb2NrMgorCisyMDEwLTAxLTI1IDE5OjU3ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZW5hbWUgTUFYX1NUQVRTIHRvIE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMKKworMjAxMC0wMS0yNSAxOTo1MyAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYzoKKworICAgdXBkYXRlIGZvciBuZXcgcGF0aCB0byBzbm1wX2dldF9zdGF0aXN0aWNzOyBjaGVjayBmb3IgaW5kZXgKKyAgIG92ZXJmbG93CisKKzIwMTAtMDEtMjUgMTk6NDQgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaDoKKworICAgdXBkYXRlIGZvciBuZXcgcGF0aCB0byBzbm1wX2dldF9zdGF0aXN0aWNzCisKKzIwMTAtMDEtMjUgMTY6MDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIHVzZSAqY3VycmVudCogY29weSBvZiB0aGUgTUlCIHdoZW4gZ2VuZXJhdGluZyBzdGF0cworCisyMDEwLTAxLTI1IDE2OjAxICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9zbm1wX2dldF9zdGF0aXN0aWMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg6CisKKyAgIG1vdmUgc25tcF9nZXRfc3RhdGlzdGljIGhlbHBlciB0byBoZWxwZXJzIGRpcjsgdXBkYXRlIGFsbF9oZWxwZXJzCisgICBoZWFkZXIKKworMjAxMC0wMS0yNSAxNDozNCAgYnZhc3NjaGUKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgUmVwbGFjZWQgZXhwbGljaXQgZGVjbGFyYXRpb25zIG9mIG9wdGluZCwgb3B0b3B0IGFuZCBvcHRhcmcgYnkKKyAgICNpbmNsdWRlIDx1bmlzdGQuaD4gYmVjYXVzZSBleHBsaWNpdGx5IGRlY2xhcmluZyB0aGVzZSB2YXJpYWJsZXMKKyAgIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggQ3lnd2luLgorCisyMDEwLTAxLTI1IDE0OjI1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBORVdTOiBDeWd3aW46IElQdjYgaXMgb25seSBzdXBwb3J0ZWQgdW5kZXIgQ3lnd2luIDEuNyBvciBsYXRlci4KKyAgIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgSVB2NiBzdXBwb3J0IGluIE5ldC1TTk1QIHVuZGVyIEN5Z3dpbgorICAgaW52b2x2ZWQgYSBzdHJhbmdlIG1peHR1cmUgb2YgQ3lnd2luIGFuZCBXaW5zb2NrMiBzb2NrZXQgY2FsbHMsCisgICB3aGljaCB3YXMgdG9vIGhhcmQgdG8gbWFpbnRhaW4uCisgICBORVdTOiBDeWd3aW46IGJ1aWxkcyBhZ2FpbiB3aXRoIElQdjYgc3VwcG9ydCBlbmFibGVkCisgICAoLS1lbmFibGUtaXB2NikuIEF0IGxlYXN0IE5ldC1TTk1QIDUuNSBkb2Vzbid0IGJ1aWxkIHVuZGVyIEN5Z3dpbgorICAgd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZC4gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgcmVwb3J0ZWQKKyAgICJjaGVja2luZyBpcHY2IHN0YWNrIHR5cGUgLi4uIHJlc3VsdDogInVua25vd24sIG5vIiAuLi4gZXJyb3I6CisgICBJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQiLgorCisyMDEwLTAxLTI1IDE0OjEzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgPHN0cmluZy5oPi4KKworMjAxMC0wMS0yNSAxNDoxMCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXM6CisKKyAgIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0IGZvciB0aGUgSVB2NiBzdGFjayBpbmNsdWRlZCBpbiBDeWd3aW4KKyAgIHZlcnNpb24gMS43LgorICAgSVB2NiBzdXBwb3J0IGlzIG9uZSBvZiB0aGUgbmV3IGZlYXR1cmVzIG9mIEN5Z3dpbiAxLjcuIEZvciBtb3JlCisgICBpbmZvcm1hdGlvbiwKKyAgIHNlZSBhbHNvIGh0dHA6Ly9jeWd3aW4uY29tL2N5Z3dpbi11Zy1uZXQvb3YtbmV3MS43Lmh0bWwuCisKKzIwMTAtMDEtMjUgMTI6NDAgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgQ0hBTkdFUzogQ3lnd2luOiB0aGUgbWVzc2FnZSAiY29uZmlndXJlOiBXQVJOSU5HOiB3aW5zb2NrLmg6CisgICBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiIGRvZXMgbm8gbG9uZ2VyIGFwcGVhciB3aGVuCisgICBydW5uaW5nIHRoZSBjb25maWd1cmUgc2NyaXB0LgorICAgRm9sbG93LXVwIGZvciByMTgwNTA6IHJlLWVuYWJsZWQgbGliaXBobHBhcGkgYW5kIGlwaGxwYXBpLmggdGVzdHMKKyAgIGZvciBub24tTWluR1cgcGxhdGZvcm1zIHNpbmNlIHRoZSBDeWd3aW4gYnVpbGQgbmVlZHMgdGhlc2UuCisKKzIwMTAtMDEtMjUgMDc6MjggIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgc25tcGxpYi9pbmV0X250b3AuYywgIAorICAgICAgIHNubXBsaWIvaW5ldF9wdG9uLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgYXV0b2NvbmYgdG8gZGVjaWRlIGlmIGluZXRfbnRvcC5jIGFuZAorICAgaW5ldF9wdG9uLmMgYXJlIHRvIGJlIGNvbXBpbGVkLgorCisyMDEwLTAxLTI1IDA3OjA5ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzOgorCisgICBDSEFOR0VTOiBNaW5HVzogc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkIGNvbmZpZ3VyZSB0ZXN0CisgICBkb2VzIG5vdyB3b3JrLgorCisyMDEwLTAxLTI1IDA1OjE0ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBUTFNUTSBjb3VudGVyIHN0YXRzCisKKzIwMTAtMDEtMjUgMDU6MTMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGFkZCBpbiBUU00gbmVlZGVkIGNvdW50ZXIgZGVmaW5pdGlvbnMKKworMjAxMC0wMS0yNSAwNToxMiAgaGFyZGFrZXIKKworICAgKiBtaWJzL1NOTVAtVFNNLU1JQi50eHQsIG1pYnMvcmZjbGlzdDoKKworICAgYWRkZWQgdGhlIFNOTVAtVFNNLU1JQgorCisyMDEwLTAxLTI0IDE0OjQzICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaDoKKworICAgTkVXUzogc25tcGQ6IE1hZGUgc3VidHJlZV9jb250ZXh0X2NhY2hlOjpjb250ZXh0X25hbWUgYSBjb25zdAorICAgY2hhciouCisKKzIwMTAtMDEtMjQgMTQ6MjcgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFByZXZlbnQgZ2NjIHBlZC13YXJuaW5nIGZvcgorICAgTkVUU05NUF9SRU1PVkVfQ09OU1QKKworMjAxMC0wMS0yNCAxMzoyNyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB1c20uYzoKKworICAgQ0hBTkdFUzogc25tcHVzbTogUHJlZmVyIHRvIHVzZSBhIHZhcmlhYmxlIG9mIHRoZSByaWdodCB0eXBlIG92ZXIKKyAgIGFuIHVnbHkgY2FzdC4gTGVzc2VuIHRoZSBzY29wZSBvZiB0aGUgdmFyaWFibGUgYXMgd2VsbC4KKworMjAxMC0wMS0yNCAxMjo1OSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBJbnRyb2R1Y2VkIHRoZSB2YXJpYWJsZSAnd2l0aF9zb2NrbGliJyBpbiB0aGUKKyAgIGNvbmZpZ3VyZSBzY3JpcHQuIFRoaXMgdmFyaWFibGUgaXMgc2V0IHRvICJ3aW5zb2NrMiIgZm9yIE1pbkdXCisgICBhbmQgdG8gImRlZmF1bHQiIGZvciBhbGwgb3RoZXIgc3lzdGVtcy4gV2luc29jazIgdGVzdHMgYXJlIG9ubHkKKyAgIHJ1biBpZiB0aGlzIHZhcmlhYmxlIGlzIHNldCB0byAid2luc29jazIiIChNaW5HVykuCisKKzIwMTAtMDEtMjQgMTI6NTMgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBSZW1vdmUgc3VwZXJmbHVvdXMgZGVidWcgbG9ncy4KKworMjAxMC0wMS0yNCAxMjo0NSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgV2luZG93cywgY29tcGlsZXIgd2FybmluZyBmaXhlczogZml4ZWQgd2FybmluZ3MgYWJvdXQgY2hhciAqIC8KKyAgIHVuc2lnbmVkIGNoYXIgKgorICAgbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0yNCAxMjo0NCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgV2luZG93cywgY29tcGlsZXIgd2FybmluZyBmaXg6IG1ha2UgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpCisgICBkZWNsYXJhdGlvbnMKKyAgIGF2YWlsYWJsZSB0byB0aGUgY29tcGlsZXIuCisKKzIwMTAtMDEtMjQgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgV2luZG93cywgY29tcGlsZXIgd2FybmluZyBmaXg6IG1hZGUgc3VyZSB0aGF0IDx3czJ0Y3BpcC5oPiB3aWxsCisgICBiZSBpbmNsdWRlZAorICAgZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4gc3VjaCB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IGNvbXBsYWluCisgICBhYm91dCBzdHJ1Y3QKKyAgIHNvY2thZGRyX2luNiBiZWluZyB1c2VkIGJlZm9yZSBiZWluZyBkZWZpbmVkLgorCisyMDEwLTAxLTI0IDExOjQyICBidmFzc2NoZQorCisgICAqIG1hbjoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTAxLTI0IDExOjQxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9pbmRleC5jLCBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJfbW9kdWxlcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jLCBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wYnVsa2dldC5jLCAgIAorICAgICAgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgYXBwcy9zbm1wZGYuYywgICAKKyAgICAgIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsIGFwcHMvc25tcHNldC5jLCAgIAorICAgICAgYXBwcy9zbm1wc3RhdHVzLmMsIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgICAKKyAgICAgIGFwcHMvc25tcHdhbGsuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaCwgc25tcGxpYi9sY2RfdGltZS5jLCAgIAorICAgICAgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcC10Yy5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYywgc25tcGxpYi9zbm1wX2F1dGguYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgICAKKyAgICAgIHNubXBsaWIvc25tcGtzbS5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi92YWNtLmM6CisKKyAgIENsZWFudXAgKFdpbmRvd3MpOiByZW1vdmVkIHN1cGVyZmx1b3VzICNpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyAgIGRpcmVjdGl2ZXMuIFRoaXMgaGVhZGVyIGZpbGUKKyAgIGhhcyBvbmx5IHRvIGJlIGluY2x1ZGVkIGZyb20gc25tcGxpYi9zeXN0ZW0uYyBiZWNhdXNlIG9mIHRoZQorICAgX2Z0aW1lKCkgY2FsbCBpbiB0aGF0IGZpbGUuCisKKzIwMTAtMDEtMjQgMTA6NDMgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmM6CisKKyAgIFRoZSBtYWNybyAnQygpJyBub3cgY2FzdHMgaXRzIHJlc3VsdCBmcm9tIHVuc2lnbmVkIGxvbmcgdG8KKyAgIHVuc2lnbmVkIGludC4KKyAgIFRoaXMgY2hhbmdlIGZpeGVzIGEgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZm9ybWF0IHNwZWNpZmljYXRpb24KKyAgIG1pc21hdGNoZXMKKyAgIGFuZCBmaXhlcyBhIGJ1ZyAoaW5jb3JyZWN0IHNubXBuZXRzdGF0IG91dHB1dCkgb24gYmlnIGVuZGlhbgorICAgc3lzdGVtcy4KKworMjAxMC0wMS0yNCAxMDozMyAgYnZhc3NjaGUKKworICAgKiBtYW4vY29uZmlnX2FwaS4zOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzk0NjogcmVtb3ZlZCBnZW5lcmF0ZWQgbWFuIHBhZ2VzIGZyb20KKyAgIHJlcG9zaXRvcnkuCisKKzIwMTAtMDEtMjQgMTA6MzEgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaCwgc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIE1vdmVkIHR3byBkZWNsYXJhdGlvbnMgb2Ygc3RhdGljIGZ1bmN0aW9ucyBmcm9tIC5oIHRvIC5jLgorCisyMDEwLTAxLTI0IDEwOjIxICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYzoKKworICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzLgorCisyMDEwLTAxLTI0IDEwOjE5ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYnVpbGRzIGFnYWluIHdoZW4gSEFWRV9HRVRBRERSSU5GTyBpcyBub3QKKyAgIGRlZmluZWQuCisKKzIwMTAtMDEtMjQgMTA6MDMgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvaW5ldF9udG9wLmMsICAgCisgICAgICBzbm1wbGliL2luZXRfbnRvcC5oLCBzbm1wbGliL2luZXRfcHRvbi5jLCBzbm1wbGliL2luZXRfcHRvbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ2hhbmdlczoKKyAgIC0gQWRkZWQgY29uZmlndXJlIHRlc3RzIGZvciBpbmV0X250b3AoKSBhbmQgaW5ldF9wdG9uKCkuCisgICAtIEFkZGVkIGhlYWRlciBmaWxlcyBzbm1wbGliL2luZXRfbnRvcC5oIGFuZCBzbm1wbGliL2luZXRfcHRvbi5oLgorICAgLSBSZXBsYWNlZCAiZXh0ZXJuIGluZXRfbnRvcCguLi4pOyIgYW5kICJleHRlcm4gaW5ldF9wdG9uKC4uLik7IgorICAgYnkgI2luY2x1ZGUgImluZXRfbnRvcC9wdG9uLmgiLgorICAgLSBDb252ZXJ0ZWQgc25tcGxpYi9pbmV0X250b3AuYyBhbmQgc25tcGxpYi9pbmV0X3B0b24uYyBmcm9tIEsmUgorICAgQyB0byBBTlNJIEMuCisgICAtIFJlcGxhY2VkIHRoZSBpbmV0X2F0b24oKSBjYWxscyB0aGF0IHdlcmUgaW50cm9kdWNlZCBpbiByMTgwMzMKKyAgIGluIHNubXBsaWIvc25tcFVEUERvbWFpbi5jIGJ5IGluZXRfcHRvbigpIGNhbGxzIHN1Y2ggdGhhdCBpdCBpcworICAgYWdhaW4gcG9zc2libGUgdG8gYnVpbGQgTmV0LVNOTVAgb24gV2luZG93cy4KKworMjAxMC0wMS0yNCAwNjowOCAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUmVtb3ZlIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBkb24ndAorICAgZXhpc3Qgb3IgYXJlIGRlY2xhcmVkIGVsc2V3aGVyZS4KKworMjAxMC0wMS0yNCAwNTo0OCAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFJlbW92ZWQgdGhlIHVudXNlZCB2YXJpYWJsZXMgd2FybV9zdGFydF9vaWQsCisgICBsaW5rX2Rvd25fb2lkLCBsaW5rX3VwX29pZCwgYXV0aF9mYWlsX29pZCBhbmQgZWdwX3h4eF9vaWQuCisKKzIwMTAtMDEtMjMgMjI6MDYgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDA3MGNvbTJzZWMsIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIEJldHRlciBzZXQgb2YgU0tJUElGL1NLSVBJRk5PVFMKKworMjAxMC0wMS0yMyAyMDozMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgdGVzdGluZy90ZXN0cy9UMDcyY29tMnNlY3VuaXg6CisKKyAgIEJlIGNvcnJlY3QgaW4gd2hhdCBpdCBpcyB0aGF0IGlzIHRlc3RlZCBpbiB0aGUgaGVhZGVyLgorCisyMDEwLTAxLTIzIDIwOjI3ICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2VkIHRoZSBjb20yc2VjIGRpcmVjdGl2ZXMgdG8gZmFpbCBpZiB0aGVyZQorICAgYXJlIHRvbyBmZXcgYXJndW1lbnRzLiBBZGRpdGlvbmFsbHkgY2hhbmdlZCB0aGUgc3RvcmFnZSBzdHJ1Y3R1cmUKKyAgIHRvIG5vdCBhbGxvY2F0ZSBtb3JlIHNwYWNlIHRoYW4gbmVjZXNzYXJ5LgorCisyMDEwLTAxLTIzIDIwOjIyICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNzBjb20yc2VjLCB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBuZXcgdGVzdHMgY2hlY2tpbmcgdGhlIGVycm9yIGhhbmRsaW5nIG9mIHRoZSBjb20yc2VjKiBkaXJlY3RpdmVzCisKKzIwMTAtMDEtMjMgMTk6MTcgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDI1OiBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby4KKworMjAxMC0wMS0yMyAxNzo1MSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IE9TIGhlYWRlciBkZXRlY3Rpb24gY2hlY2sgaXMgbm93IHJ1biBiZWZvcmUKKyAgIElQdjYgc3RhY2sgZGV0ZWN0aW9uLgorICAgQ0hBTkdFUzogU29sYXJpczogc29ja2FkZHJfaW42LnNpbjZfYWRkciBjb25maWd1cmUgdGVzdCBkb2VzIG5vdworICAgd29yay4KKworMjAxMC0wMS0yMyAxNzo0MiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2xhcmdlX2ZkX3NldC5jOgorCisgICBGaXhlZCBhIFNvbGFyaXMtc3BlY2lmaWMgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wMS0yMyAxNzowMCAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmg6CisKKyAgIE1pbkdXOiBhZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgPHN5cy90aW1lYi5oPiBhbmQgYWxzbyBmb3Igc3RydWN0CisgICB0aW1lem9uZS4KKworMjAxMC0wMS0yMyAxNjozMiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgTWluR1c6IG1hZGUgc3VyZSB0aGF0IHRoZSBJUHY2LXJlbGF0ZWQgZGF0YXR5cGVzIGFyZSBhdmFpbGFibGUKKyAgIGJlZm9yZSBiZWluZyB1c2VkLgorCisyMDEwLTAxLTIzIDE2OjMwICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEFkZGVkICN1bmRlZiBIQVZFX1dJTkRPV1NfSC4KKworMjAxMC0wMS0yMyAxNjoyOCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIE1pbkdXOiBtYWRlIGdldHRpbWVvZmRheSgpIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlCisgICBjb21waWxlci4KKworMjAxMC0wMS0yMyAxNjoyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE1pbkdXOiBtYWRlIGdldHRpbWVvZmRheSgpIGRlY2xhcmF0aW9uIGF2YWlsYWJsZSBmb3IgdGhlCisgICBjb21waWxlci4KKworMjAxMC0wMS0yMyAxNjoyNiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBNYWRlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QgY29tcGxhaW4gYWJvdXQgYSBtaXNzaW5nCisgICBwcm90b3R5cGUgZm9yIGlzZGlnaXQoKS4KKworMjAxMC0wMS0yMyAxNjoyNCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBNaW5HVzogaXBobHBhcGkuaCBjb25maWd1cmUgdGVzdCBkb2VzIG5vdyB3b3JrLgorCisyMDEwLTAxLTIzIDE1OjEwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlczoKKworICAgUmVuYW1lZCB0aGUgV2luc29jazIgSVB2NiBzdGFjayBmcm9tICdtaW5ndycgaW50byAnd2luc29jazInLgorCisyMDEwLTAxLTIzIDE1OjA3ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsIGFnZW50L3NubXBkLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgCisgICAgICAgc25tcGxpYi9pbmV0X250b3AuYywgc25tcGxpYi9pbmV0X3B0b24uYywgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wU1NIRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEltcHJvdmVkIHBvcnRhYmlsaXR5IGJldHdlZW4gdGhlIHN1cHBvcnRlZCBXaW4zMiBjb21waWxhdGlvbgorICAgZW52aXJvbm1lbnRzIGFzIGZvbGxvd3M6CisgICAtIE1hZGUgc3VyZSB0aGF0IHRoZSA8d2luc29jazIuaD4gYW5kIDx3czJ0Y3BpcC5oPiBoZWFkZXIgZmlsZXMKKyAgIGFyZSBvbmx5IGluY2x1ZGVkIGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+LgorICAgLSBBZGRlZCBjb25maWd1cmUgY2hlY2sgZm9yIDxpcGhscGFwaS5oPi4KKyAgIC0gUmVwbGFjZWQgc2V2ZXJhbCBXSU4zMiAvIGN5Z3dpbiB0ZXN0cyBieSBhIEhBVkVfSVBITFBBUElfSAorICAgdGVzdC4KKyAgIC0gRG9jdW1lbnRlZCB0aGF0IHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGlzIG9ubHkgdXNlZAorICAgZm9yIHRoZSBNU1ZDIGJ1aWxkLgorCisyMDEwLTAxLTIyIDE2OjQ2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvdG9vbHMuYzoKKworICAgRm9sbG93LXVwIGZvciByMTc5MTA6IGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvCisgICA2LgorCisyMDEwLTAxLTIyIDE2OjQxICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCB3aW4zMi9NZ210QXBpLXdpbkV4dERMTC5oOgorCisgICBGb2xsb3cgdXAgZm9yIHIxODAxNjogYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uCisKKzIwMTAtMDEtMjIgMTQ6MTMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgRm9sbG93LXVwIGZvciByMTgwMTY6IG1hZGUgTWluR1cgbGliaXBobHBhcGkgY2hlY2sgbW9yZSByb2J1c3QuCisKKzIwMTAtMDEtMjIgMTM6MzIgIGJ2YXNzY2hlCisKKyAgICogIFJFQURNRS53aW4zMiwgYWNsb2NhbC5tNCwgYWdlbnQvYWdlbnRfaW5kZXguYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYl9tb2R1bGVzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLCBhZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuaCwgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCAgIAorICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jLCBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYW5zbGF0ZS5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9hdXRoLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX3NxbC5jLCBhcHBzL3NubXB1c20uYywgYXBwcy9zbm1wdmFjbS5jLCAgIAorICAgICAgYXBwcy9zbm1wd2Fsay5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvYXNuMS5jLCBzbm1wbGliL2NhbGxiYWNrLmMsIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCAgIAorICAgICAgc25tcGxpYi9pbnQ2NC5jLCBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsICAgCisgICAgICBzbm1wbGliL2xjZF90aW1lLmMsIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvbWliLmMsICAgCisgICAgICBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zY2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXV0aC5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgICAKKyAgICAgIHNubXBsaWIvc25tcGtzbS5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgc25tcGxpYi92YWNtLmMsICAgCisgICAgICBzbm1wbGliL3dpbnBpcGUuYywgd2luMzIvU25tcC13aW5FeHRETEwuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IE1pbkdXOiB3aW5FeHRETEwgY29tcGlsZXMgbm93IHVuZGVyIE1pbkdXLgorICAgQ0hBTkdFUzogTWluR1c6IGJ1aWxkaW5nIE5ldC1TTk1QIHdvcmtzIGFnYWluLgorICAgCisgICBEZXRhaWxlZCBvdmVydmlldzoKKyAgICogQ2hhbmdlcyBpbiB0aGUgY29uZmlndXJlIHNjcmlwdDoKKworICAgLSBzb2NrZXQoKSBsaWJyYXJ5IGNoZWNrIHBhc3NlcyBhZ2FpbiBvbiBNaW5HVy4KKyAgIC0gQWRkZWQgbGlicmFyeSBjaGVja3MgZm9yIGxpYndzMl8zMiwgbGlicmVnZXggYW5kIGxpYnNubXBhcGkuCisgICAtIEFkZGVkIGNoZWNrIGZvciB0aGUgd2luc29jazIuaCBhbmQgd3MydGNwaXAuaCBoZWFkZXIgZmlsZXMuCisgICAtIEFkZGVkIGNoZWNrIGZvciB0aGUgY2hvd24oKSBhbmQgbG9jYWx0aW1lX3IoKSBmdW5jdGlvbnMuCisgICAtIHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkIGNoZWNrIGRvZXMgbm93IHdvcmsgb24gTWluR1cuCisgICAtIEFkZGVkIElQdjYgc3RhY2sgdHlwZSBjYWxsZWQgIm1pbmd3Ii4KKyAgICogU291cmNlIGNvZGUgY2hhbmdlczoKKworICAgLSBJbmNsdWRlIDx3aW5zb2NrMi5oPiBmcm9tIDxuZXQtc25tcC90eXBlcy5oPiBpbnN0ZWFkIG9mCisgICA8d2luc29jay5oPgorICAgdW5kZXIgTWluR1cgc3VjaCB0aGF0IElQdjYgc3VwcG9ydCBpcyBhdmFpbGFibGUuCisgICAtIE1vdmVkICNpbmNsdWRlIDx3aW5zb2NrLmg+IGZyb20gLmMgZmlsZXMgdG8gPG5ldC1zbm1wL3R5cGVzLmg+LgorICAgLSBBZGRlZCBhIGNvcHkgb2YgdGhlIE1pbkdXIGhlYWRlciBmaWxlIDxzbm1wLmg+ICh3aGljaCBpcyBub3QKKyAgIGNvcHlyaWdodGVkKQorICAgYXMgd2luMzIvU25tcC13aW5FeHRETEwuaC4KKyAgIC0gYWdlbnQ6IG9ubHkgY2FsbCBjaG93bigpIHdoZW4gYXZhaWxhYmxlIChIQVZFX0NIT1dOKS4KKyAgICogRG9jdW1lbnRhdGlvbiBjaGFuZ2VzOiB1cGRhdGVkIFJFQURNRS53aW4zMi4KKworCisyMDEwLTAxLTIyIDA4OjM0ICBtYWdmcgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IGNhc3QgZnJvbSBjaGFyKiB0byBjaGFyKgorCiAyMDEwLTAxLTIyIDAwOjM5ICBoYXJkYWtlcgogCiAgICAqIENPUFlJTkc6CiAKICAgIENvcHlyaWdodCBmaWxlIHVwZGF0ZSBmb3IgU1BBUlRBLCBJbmMuCiAKKzIwMTAtMDEtMjIgMDA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGFkZCBwcm9wZXIgcHJlZml4ZXMgaW4gVFNNIGZvciBTU0gsIERUTFMsIGV0YywgYmFzZWQgb24gdGhlCisgICBkb21haW4KKworMjAxMC0wMS0yMiAwMDoyMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L3BhdG1lOgorCisgICBhZGRlZCA1LjUgYnJhbmNoCisKKzIwMTAtMDEtMjIgMDA6MjAgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIG1pbm9yIGVjaG8gb3V0cHV0IGNoYW5nZQorCisyMDEwLTAxLTIxIDIwOjUxICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIG1vdmUgY29tbWVudCBuZXh0IHRvIGNvZGUgaXQgaXMgdGFsa2luZyBhYm91dDsgTm8gY29kZSBjaGFuZ2UKKwogMjAxMC0wMS0yMSAxNDo1NSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jOgpAQCAtMzAxMSw5NyArNDczNjYsNDE4IEBACiAgICBUaGUga2VybmVsIG1pZ2h0IHByb3ZpZGUgbG9uZ2VyIGZpZWxkcywgZXNwZWNpYWxseSBvbiA2NC1iaXQKICAgIHN5c3RlbXMuCiAKKzIwMTAtMDEtMjAgMTI6NDIgIGJ2YXNzY2hlCisKKyAgICogUE9SVElORywgbG9jYWwvc25tcGNoZWNrLmRlZjoKKworICAgRml4ZWQgdHlwbzogcmVwbGFjZWQgJ25lY2lzc2FyeScgYnkgJ25lY2Vzc2FyeScuCisKIDIwMTAtMDEtMjAgMDg6NTMgIGpzYWZyYW5lawogCiAgICAqIG1hbi9zbm1wbmV0c3RhdC4xLmRlZjoKIAogICAgRml4IG1pbm9yIHR5cG8gaW4gbWFuIHBhZ2UsIGl0J3Mgc25tcG5ldHN0YXQgLUNwLCBub3QgLUNQLgogCisyMDEwLTAxLTE0IDEyOjM0ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IGZpeGVkIG1lbW9yeSBsZWFrIGluIFJNT04tTUlCIGFuZCBFVEhFUkxJS0UtTUlCIHdoZW4KKyAgIHRoZXJlIGFyZSBtdWx0aXBsZSBhbGlhc2VzIG9mIGFuIG5ldHdvcmsgaW50ZXJmYWNlCisgICBSYXRpb25hbGU6IHRoZSBhbGlhc2VkIGludGVyZmFjZXMgaGF2ZSB0aGUgc2FtZSBpZkluZGV4IC0+CisgICBDT05UQUlORVJfSU5TRVJUIGZhaWxzLCBidXQgdGhlIHJlamVjdGVkIGVudHJ5IHdhcyBub3QgZnJlZWQuCisKKzIwMTAtMDEtMTMgMTE6MjEgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeCBtZW1vcnkgbGVhayBpbiBpcEFkZHJlc3NQcmVmaXhUYWJsZQorICAgLSBuZXRfc25tcF9zZWFyY2hfdXBkYXRlX3ByZWZpeF9pbmZvIHJldHVybnMgZGlmZmVyZW50IGNvZGUsIHdoZW4KKyAgIHRoZSBlbnRyeSB3YXMgbm90IGluc2VydGVkIHRvIGxpc3QgYW5kIGNhbiBiZSBmcmVlZC4KKworMjAxMC0wMS0xMiAwMDo1MiAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBydW4gcnBtIGNvbmZpZ3VyZSBjaGVja3MgZm9yIGhyX3N3aW5zdCByZXdyaXRlCisgICAocnBtCisgICB2ZXJzaW9uIG9ubHkpCisKKzIwMTAtMDEtMTEgMjM6NTggIHRhbmRlcnMKKworICAgKiBhcHBzL01ha2VmaWxlLmluOgorCisgICBhZGQgUEVSTExET1BUU19GT1JfQVBQUyB0byBhZ2VudHh0cmFwIGxpbmsgbGluZSAoZml4ZXMKKyAgICJsaWJwZXJsLnNvIG5vdAorICAgZm91bmQiIGVycm9ycykKKworMjAxMC0wMS0xMSAwMDoxMSAgdGFuZGVycworCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwOgorCisgICBnZXQgcmlkIG9mIHVzaW5nIGRlcHJlY2F0ZWQgc3ludGF4IGZvciB0cmFwL2luZm9ybSBzaW5rcworCisyMDEwLTAxLTA4IDA4OjQyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IG9ic29sZXRlZCBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcuCisgICBGcm9tIG5vdyBvbiB1c2luZyBTSUdBTFJNIHRvIHRyaWdnZXIgTmV0LVNOTVAgYWxhcm0gaGFuZGxlcnMgaXMKKyAgIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICAKKyAgIE1vdGl2YXRpb246IGFzIGtub3duIGxpYm5ldHNubXAgc3VwcG9ydHMgdGltZS1iYXNlZCBhbGFybXMgdmlhCisgICB0aGUgZnVuY3Rpb25zCisgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKCksIHJ1bl9hbGFybXMoKSBhbmQgb3RoZXIgZnVuY3Rpb25zLiBUd28KKyAgIGRpZmZlcmVudCB3YXlzIHRvCisgICB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBydW5fYWxhcm1zKCkgYXJlIHN1cHBvcnRlZCBpbnNpZGUKKyAgIGxpYm5ldHNubXA6CisgICAxLiBCeSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB0aW1lb3V0IGFyZ3VtZW50IG9mIHNlbGVjdCgpIGlzIHNtYWxsCisgICBlbm91Z2ggc3VjaAorICAgdGhhdCBzZWxlY3QoKSByZXR1cm5zIGJlZm9yZSB0aGUgbmV4dCBhbGFybSBtdXN0IGJlIGhhbmRsZWQgKHdoZW4KKyAgIHRoZQorICAgdmFyaWFibGUgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGlzIHNldCB0byBvbmUsIHdoaWNoCisgICBpcyB0aGUKKyAgIGRlZmF1bHQpLgorICAgMi4gQnkgbWFraW5nIHN1cmUgdGhhdCB0aGUga2VybmVsIGZpcmVzIFNJR0FMUk0gYXQgdGhlIHRpbWUgd2hlbgorICAgcnVuX2FsYXJtcygpCisgICBzaG91bGQgYmUgY2FsbGVkICh3aGVuIHRoZSB2YXJpYWJsZQorICAgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGlzIHNldAorICAgdG8gemVybywgd2hpY2ggaGFzIHRvIGJlIGNvbmZpZ3VyZWQgZXhwbGljaXRseSkuCisgICAKKyAgIFRoZSBmb2xsb3dpbmcgaXNzdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlY29uZCBhcHByb2FjaDoKKyAgIDEuIEFsYXJtIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbnNpZGUgTmV0LVNOTVAgdG8gZS5nLiByZWZyZXNoCisgICBjYWNoZWQgdGFibGUKKyAgIGNvbnRlbnRzLiBBcyBmYXIgYXMgSSBjYW4gc2VlIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIE5ldC1TTk1QCisgICBzb3VyY2UgY29kZQorICAgdGhhdCBwcmV2ZW50cyB0aGUgZm9sbG93aW5nIGZyb20gaGFwcGVuaW5nOiBhIHRhYmxlIHJlZnJlc2gKKyAgIHRyaWdnZXJlZCB2aWEKKyAgIFNJR0FMUk0gd2hpbGUgYSByb3cgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGEgY2FjaGVkIHRhYmxlLiBUaGlzCisgICBjYW4gcmVzdWx0CisgICBpbiBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgZXZlbiBhIGNyYXNoLgorICAgMi4gUE9TSVggcmVzdHJpY3RzIHNpZ25hbCBoYW5kbGVycyB0byBjYWxsaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZQorICAgZWl0aGVyIHJlZW50cmFudAorICAgb3Igbm9uLWludGVycnVwdGlibGUKKyAgIChodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDQpLgorICAgU3RhbmRhcmQgSS9PIGZ1bmN0aW9ucyBsaWtlIHByaW50ZigpIGFuZCBmcHJpbnRmKCkgYXJlIG5laXRoZXIKKyAgIHJlZW50cmFudCBub3IKKyAgIG5vbi1pbnRlcnJ1cHRpYmxlLiBydW5fYWxhcm1zKCkgaXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgc2lnbmFsCisgICBoYW5kbGVyLCB3aGljaAorICAgbWVhbnMgdGhhdCB0aGlzIHJlc3RyaWN0aW9uIGFwcGxpZXMgdG8gdGhlIGZ1bmN0aW9uIHJ1bl9hbGFybXMoKQorICAgaXRzZWxmIGFuZAorICAgYWxsIGZ1bmN0aW9ucyBjYWxsZWQgYnkgaXQgKHdoaWNoIGluY2x1ZGVzIHRoZSBhbGFybSBjYWxsYmFjaworICAgZnVuY3Rpb25zKS4KKyAgIE9yOiBlLmcuIHNubXBfbG9nKCkgYW5kIGl0cyBjYWxsZXJzIG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tCisgICBpbnNpZGUgcnVuX2FsYXJtcygpCisgICB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyLiBUaGlzCisgICBpcyBhIHNldmVyZQorICAgcmVzdHJpY3Rpb24sIGFuZCBvbmUgdGhhdCBpcyBoYXJkIHRvIHdvcmsgd2l0aC4KKyAgIDMuIE5vdCBhbGwgc29mdHdhcmUgZGV2ZWxvcGVycyBrbm93IGhvdyB0byBtYWtlIHN1cmUgdGhhdCBzaWduYWwKKyAgIGRlbGl2ZXJ5IHdvcmtzCisgICBjb3JyZWN0bHkgaW4gYSBtdWx0aXRocmVhZGVkIGNvbnRleHQuIFBPU0lYIGRvZXMgbm90IGd1YXJhbnRlZSB0bworICAgd2hpY2ggdGhyZWFkCisgICBhIHNpZ25hbCBsaWtlIFNJR0FMUk0gd2lsbCBiZSBkZWxpdmVyZWQsIHVubGVzcyB0aGF0IHNpZ25hbCBoYXMKKyAgIGJlZW4gYmxvY2tlZAorICAgYmVmb3JlIHRocmVhZCBjcmVhdGlvbiBhbmQgaXMgdW5ibG9ja2VkIGFmdGVyIHRocmVhZCBjcmVhdGlvbgorICAgKHNlZSBhbHNvCisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3B0aHJlYWRfc2lnbWFzay5odG1sKS4KKyAgIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHRoZSBOZXQtU05NUCBwcm9qZWN0IG5vdCBvbmx5IGJlY2F1c2UgYQorICAgd29ya2VyIHRocmVhZCBpcworICAgY3JlYXRlZCBpbnNpZGUKKyAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYyBidXQgYWxzbworICAgYmVjYXVzZSBsaWJuZXRzbm1wIGlzIG9mdGVuIHVzZWQgaW5zaWRlIG11bHRpdGhyZWFkZWQgc29mdHdhcmUuCisgICBDdXJyZW50bHkgbm8KKyAgIGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHN1cmUgdGhhdCBTSUdBTFJNIGlzIHByb2Nlc3NlZCBieSB0aGUKKyAgIE5ldC1TTk1QIGV2ZW50CisgICBwcm9jZXNzaW5nIGxvb3AgdGhyZWFkLiBJZiBTSUdBTFJNIGlzIHByb2Nlc3NlZCBieSBhbm90aGVyCisgICB0aHJlYWQsIHRoaXMgd2lsbAorICAgcmVzdWx0IGluIG9uZSBvciBtb3JlIGRhdGEgcmFjZXMuCisgICAKKyAgIEJlY2F1c2UgYWxsIHRoZSBkaWZmaWN1bHRpZXMgYXNzb2NpYXRlZCB3aXRoIHByb2Nlc3NpbmcgYWxhcm1zCisgICBmcm9tIGluc2lkZSBhCisgICBzaWduYWwgaGFuZGxlciBmdW5jdGlvbiwgYW5kIGJlY2F1c2UgZml4aW5nIHRoZXNlIHdvdWxkIHJlcXVpcmUKKyAgIG1vcmUgZWZmb3J0IHRoYW4KKyAgIGl0IGlzIHdvcnRoLCBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaGFzIGJlZW4KKyAgIGRlcHJlY2F0ZWQgYW5kIGZyb20gbm93CisgICBvbiBhcHByb2FjaCAoMSkgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGFwcHJvYWNoIHRvIHRyaWdnZXIgYWxhcm0KKyAgIGhhbmRsZXJzLgorCiAyMDEwLTAxLTA3IDE5OjQyICBoYXJkYWtlcgogCi0gICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYzoKIAogICAgUGF0Y2ggZnJvbSBTdGVwaGVuIEhlbW1pbmdlciB0byBmaXggYSBtaW5vciBtZW1sZWFrIGluIGNwdQogICAgc3lzY3RybCBmZXRjaGluZwogCi0yMDEwLTAxLTA2IDE3OjU2ICBkdHMxMgorMjAxMC0wMS0wNyAxNjoyMSAgYnZhc3NjaGUKIAotICAgKiBDSEFOR0VTOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3ZhY20uYzoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIFJlbW92ZWQgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSwgYW5kIG1hZGUgc3VyZSB0aGF0CisgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpICdcMCctdGVybWluYXRlcyB0aGUgb3V0cHV0IGJ1ZmZlcgorICAgaW4gYWxsIGNhc2VzLgorICAgVXBkYXRlZCBkb2N1bWVudGF0aW9uIGFuZCB1bml0IHRlc3RzLgogCi0yMDEwLTAxLTA2IDE3OjI1ICBkdHMxMgorMjAxMC0wMS0wNyAxNDo0MSAgYnZhc3NjaGUKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIHNubXBsaWIvc25tcHVzbS5jOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgUmVtb3ZlZCB0aHJlZSBzdXBlcmZsdW91cyBjYXN0cyBiZWNhdXNlIHRoZXNlIHRyaWdnZXJlZCBhCisgICBjb21waWxlciB3YXJuaW5nCisgICB3aGVuIGNvbXBpbGVkIHdpdGggTVNWQy4KIAotMjAxMC0wMS0wNiAxNzowNiAgZHRzMTIKKzIwMTAtMDEtMDcgMTM6MjggIGJ2YXNzY2hlCiAKLSAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAotICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBSZXZlcnRlZCB0aGUgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBjaGFuZ2VzIGZyb20gcjE3OTkyCisgICBiZWNhdXNlIHRoZXNlCisgICBjYXVzZWQgdGhlIGZvbGxvd2luZyBWYWxncmluZCBjb21wbGFpbnQgZHVyaW5nIHNubXBkIHN0YXJ0dXA6CisgICAKKyAgID09MjUyMDE9PSBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkCisgICB2YWx1ZShzKQorICAgPT0yNTIwMT09IGF0IDB4NDA0N0IxNDogbmV0c25tcF9zZW5kX3RyYXBzIChhZ2VudF90cmFwLmM6Nzk4KQorICAgPT0yNTIwMT09IGJ5IDB4NDA0ODEyODogc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycworICAgKGFnZW50X3RyYXAuYzo4NTMpCisgICA9PTI1MjAxPT0gYnkgMHg0MDQ4MTlEOiBzZW5kX3RyYXBfdmFycyAoYWdlbnRfdHJhcC5jOjk2MykKKyAgID09MjUyMDE9PSBieSAweDQwNDgyNUI6IHNlbmRfZWFzeV90cmFwIChhZ2VudF90cmFwLmM6MTAxMSkKKyAgID09MjUyMDE9PSBieSAweDgwNEI1RDI6IG1haW4gKHNubXBkLmM6Mzk0KQogCi0yMDEwLTAxLTA2IDE3OjA2ICBkdHMxMgorMjAxMC0wMS0wNyAxMjozMCAgYnZhc3NjaGUKIAotICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKLSAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCi0gICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYzoKIAotICAgbWFrZSBkZXBlbmQKKyAgIEZpeGVkIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gbWlzbWF0Y2guCiAKLTIwMTAtMDEtMDYgMTY6NTUgIGR0czEyCisyMDEwLTAxLTA3IDEyOjE5ICBidmFzc2NoZQogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaDoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIERlcGVuZGluZyBvbiB0aGUgY29udGV4dCwgYXNzaWduaW5nIGEgY2hhciAqIHBvaW50ZXIgdG8KKyAgIHN5c09SVGFibGU6Ok9SX2Rlc2NyIGRvZXMgb3IgZG9lcyBub3QgdHJhbnNmZXIKKyAgIG93bmVyc2hpcC4gU28gd2hldGhlciBPUl9kZXNjciBpcyBkZWNsYXJlZCBhcyBjaGFyICogb3IgYXMgY29uc3QKKyAgIGNoYXIgKiwgdGhlcmUgd2lsbCBhbHdheXMgYmUgYXQKKyAgIGxlYXN0IG9uZSBzdGF0ZW1lbnQgb24gd2hpY2ggdGhlIGNvbXBpbGVyIGNvbXBsYWlucyBhYm91dCBhIGNoYXIKKyAgICogIC8gY29uc3QgY2hhciAqIG1pc21hdGNoLiBUaGUgb25seSAgICBzb2x1dGlvbiBpcyB0byBjYXN0IGF3YXkKKyAgICAgIGNvbnN0IHdoZXJlIGFwcHJvcHJpYXRlIHRvIG1ha2Ugc3VyZSAgICB0aGF0IHRoZSBjb21waWxlciBkb2VzIG5vdAorICAgICAgY29tcGxhaW4sICAgIGFzIGltcGxlbWVudGVkIGluIHRoaXMgcGF0Y2guICAyMDEwLTAxLTA3IDExOjQ2IAorICAgICAgYnZhc3NjaGUKIAotMjAxMC0wMS0wNiAxNjo0MyAgZHRzMTIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiBzbm1wbGliL3NubXB1c20uYzoKIAotICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisgICB1c21fc2F2ZV91c2VyKCk6IHdoZW4gd3JpdGluZyB1c2VyLT5uYW1lIGFuZCB1c2VyLT5zZWNOYW1lLCBvbmx5CisgICB3cml0ZSB0aGUgQVNDSUkgZGF0YSBhbmQgbm90IHRoZQorICAgdGVybWluYXRpbmcgJ1wwJy4gU2luY2UgYm90aCBpdGVtcyBhcmUgcmVhZCBieSBjYWxsaW5nCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLCB3cml0aW5nCisgICB0aGUgdGVybWluYXRpbmcgJ1wwJyBpcyBub3QgbmVjZXNzYXJ5IHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBkYXRhCisgICByZWFkIGJhY2sgaXMgdGVybWluYXRlZCBwcm9wZXJseS4KKworMjAxMC0wMS0wNyAwOToxMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENoYW5nZWQgdGhlIGJlaGF2aW9yIG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCk6IHVudGlsCisgICBub3cgdGhpcworICAgZnVuY3Rpb24gdGVybWluYXRlZCB0aGUgb3V0cHV0IGJ1ZmZlciBpbiBzb21lIGNhc2VzIHdpdGggJ1wwJworICAgKHdoZW4gdGhlCisgICBpbnB1dCB3YXMgaW4gdGhlIGZvcm1hdCAweC4uLiBhbmQgYSBidWZmZXIgb3ZlcmZsb3cgb2NjdXJyZWQgYW5kCisgICBhbHNvCisgICB3aGVuIHRoZSBpbnB1dCB3YXMgaW4gQVNDSUkgZm9ybWF0LCBidXQgbm90IHdoZW4gdGhlIGlucHV0IHdhcyBpbgorICAgZm9ybWF0CisgICAweC4uLiBhbmQgbm8gYnVmZmVyIG92ZXJmbG93IG9jY3VycmVkKS4gQ2hhbmdlZCB0aGlzIHN1Y2ggdGhhdAorICAgdGhpcworICAgZnVuY3Rpb24gZG9lcyBubyBsb25nZXIgdGVybWluYXRlIHRoZSBpbnB1dCBidWZmZXIgd2l0aCAnXDAnLgorICAgVGhpcworICAgY2hhbmdlIHdhcyBwb3NzaWJsZSBiZWNhdXNlIGluc2lkZSB0aGUgTmV0LVNOTVAgcHJvamVjdCBhbGwKKyAgIGNhbGxlcnMgdGhhdAorICAgbmVlZGVkIGEgJ1wwJyB0ZXJtaW5hdGVkIHN0cmluZyBoYXZlIGJlZW4gY29udmVydGVkIHRvIHVzZQorICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSBpbnN0ZWFkLgorCisyMDEwLTAxLTA2IDE3OjUyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOgorCisgICBSZXZlcnRlZCByMTc5NjggYW5kIHIxNzk3Mi4KKworMjAxMC0wMS0wNiAxNTo0MCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYzoKKworICAgRml4ZWQgbW9yZSBjb21waWxlciB3YXJuaW5ncyByZWxhdGVkIHRvIHRoZSB1c2Ugb2YgdGhlIGNvbnN0CisgICBrZXl3b3JkLgorCisyMDEwLTAxLTA2IDE1OjM4ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIEZpeGVkIGEgZm9ybWF0IHNwZWNpZmljYXRpb24gbWlzbWF0Y2guCisKKzIwMTAtMDEtMDYgMTU6MzYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaDoKKworICAgQ2hhbmdlZCBhcmd1bWVudCB0eXBlIGZyb20gY2hhciAqIGludG8gY29uc3QgY2hhciAqLiBTaG91bGQgaGF2ZQorICAgYmVlbiBpbmNsdWRlZCBpbiByMTc5NzUuCisKKzIwMTAtMDEtMDYgMTU6MzMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjaGFyICogLyB1X2NoYXIgKgorICAgbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0wNiAxNTozMSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFkZGVkIHRoZSBmdW5jdGlvbnMgcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoKSBhbmQKKyAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCksIHdoaWNoCisgICBhY2NlcHQgYSBwYXJzZXIgZnVuY3Rpb24gdGhhdCBkb2VzIG5vdCBtb2RpZnkgdGhlIHN0cmluZyB0aGF0IGl0CisgICBwYXJzZXMuIFVzaW5nIHRoZXNlIGZ1bmN0aW9ucyByZXN1bHRzCisgICBpbiBlYXNpZXIgdG8gcmVhZCBjb2RlIHRoYW4gdXNpbmcgdGhlIG5vbi1jb25zdCBoYW5kbGVyCisgICByZWdpc3RyYXRpb24gZnVuY3Rpb25zIGFuZCBjYXN0aW5nIHRoZSBwYXJzZXIKKyAgIGZ1bmN0aW9uIGV4cGxpY2l0bHkgZnJvbSAodm9pZCgqKShjb25zdCBjaGFyKiwgY29uc3QgY2hhciopKSB0bworICAgKHZvaWQoKikoY29uc3QgY2hhciosIGNoYXIqKSkuCisKKzIwMTAtMDEtMDYgMTU6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMTQ6NDggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQWRkZWQgcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdCgpLgorCisyMDEwLTAxLTA2IDE0OjQyICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYzoKKworICAgRHVwbGljYXRlZCB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIFJFR0lTVEVSX1NZU09SX1RBQkxFKCkgLworICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoKQorICAgc2luY2UgdGhhdCBhcmd1bWVudCBpcyBmcmVlZCB3aGlsZSB1bnJlZ2lzdGVyaW5nIHN1Y2ggYW4gZW50cnkuCisgICBOb3Qgc3VyZSB3aGV0aGVyCisgICB0aGlzIGNvdWxkIGFjdHVhbGx5IHRyaWdnZXIgYSBjYWxsIG9mIGZyZWUoKSB3aXRoIGEgY29uc3RhbnQKKyAgIHN0cmluZyBhcyBhcmd1bWVudAorICAgYW5kIEknbSBuZWl0aGVyIHN1cmUgYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyBjb3VsZCBoYXZlCisgICB0cmlnZ2VyZWQgYSBjcmFzaC4KKworMjAxMC0wMS0wNiAxNDozNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oLCBzbm1wbGliL3ZhY20uYzoKKworICAgRm9yIHRob3NlIFZBQ00gZnVuY3Rpb25zIHRoYXQgZG8gbm90IG1vZGlmeSB0aGUgc3RyaW5ncyBwYXNzZWQgYXMKKyAgIGFyZ3VtZW50cywKKyAgIGNoYW5nZWQgdGhlIGFyZ3VtZW50IHR5cGUgZnJvbSBjaGFyICogdG8gY29uc3QgY2hhciAqLgorCisyMDEwLTAxLTA2IDE0OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMTQ6MjYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmM6CisKKyAgIFJlbW92ZWQgYW4gdW51c2VkIHZhcmlhYmxlLgorCisyMDEwLTAxLTA2IDE0OjE0ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jOgorCisgICBEdXBsaWNhdGVkIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgUkVHSVNURVJfU1lTT1JfVEFCTEUoKSAvCisgICBSRUdJU1RFUl9TWVNPUl9FTlRSWSgpCisgICBzaW5jZSB0aGF0IGFyZ3VtZW50IGlzIGZyZWVkIHdoaWxlIHVucmVnaXN0ZXJpbmcgc3VjaCBhbiBlbnRyeS4KKyAgIE5vdCBzdXJlIHdoZXRoZXIKKyAgIHRoaXMgY291bGQgYWN0dWFsbHkgdHJpZ2dlciBhIGNhbGwgb2YgZnJlZSgpIHdpdGggYSBjb25zdGFudAorICAgc3RyaW5nIGFzIGFyZ3VtZW50CisgICBhbmQgSSdtIG5laXRoZXIgc3VyZSBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvdWxkIGhhdmUKKyAgIHRyaWdnZXJlZCBhIGNyYXNoLgorCisyMDEwLTAxLTA2IDE0OjA4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0CisgICBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMTQ6MDYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjaGFyICogLyB1X2NoYXIgKgorICAgbWlzbWF0Y2hlcy4KKworMjAxMC0wMS0wNiAxNDowNCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDaGFuZ2VzOgorICAgLSBBZGRlZCBuZXcgZnVuY3Rpb25zIHNraXBfd2hpdGVfY29uc3QoKSwgc2tpcF9ub3Rfd2hpdGVfY29uc3QoKSwKKyAgIHNraXBfdG9rZW5fY29uc3QoKSwgY29weV9ud29yZF9jb25zdCgpIGFuZAorICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoKS4KKyAgIC0gQ2hhbmdlZCByZXR1cm4gdHlwZSBvZiByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpIGZyb20KKyAgIGNoYXIgKiB0bworICAgY29uc3QgY2hhciAqLiBOb3RlOiB0aGlzIGRvZXMgbm90IGFmZmVjdCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eQorICAgc2luY2UgdGhpcworICAgZnVuY3Rpb24gaGFzIG5vdCB5ZXQgYmVlbiBpbmNsdWRlZCBpbiBhbnkgcmVsZWFzZS4KKyAgIC0gRml4ZWQgZG9jdW1lbnRhdGlvbiBvZiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGFuZAorICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKS4KKyAgIC0gUmVkdWNlZCBudW1iZXIgb2YgY2FzdC1hd2F5LWNvbnN0IGNvbnN0cnVjdHMgaW4gcmVhZF9jb25maWcuYy4KKworMjAxMC0wMS0wNiAxMzozNSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDoKKworICAgUmVmaW5lZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIG1hY3JvIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKCk6CisgICB3aGVuIHVzaW5nCisgICB0aGUgZ2NjIGNvbXBpbGVyLCBpdCBpcyBub3cgdmVyaWZpZWQgd2hldGhlciB0aGUgdHlwZXMgKGNvbnN0IHQpCisgICBhbmQgdHlwZW9mKGUpCisgICBhcmUgY29tcGF0aWJsZSwgd2hlcmUgdCBpcyB0aGUgZmlyc3QgYXJndW1lbnQgYW5kIGUgdGhlIHNlY29uZAorICAgYXJndW1lbnQgb2YKKyAgIHRoaXMgbWFjcm8uCiAKIDIwMTAtMDEtMDYgMTM6MzMgIGpzYWZyYW5lawogCkBAIC0zMTIxLDcgKzQ3Nzk3LDk2IEBACiAKICAgICogc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgogCi0gICBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOiAyOTIyMzkwOiBGaXggdGVzdCBmb3IgbWlzc2luZyBjb250ZXh0TmFtZSBwYXJhbWV0ZXIKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6IDI5MjIzOTA6IEZpeCB0ZXN0IGZvciBtaXNzaW5nIGNvbnRleHROYW1lCisgICBwYXJhbWV0ZXIKKworMjAxMC0wMS0wNiAxMTo1NyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvc25tcF9wZXJsLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9wYXJzZS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKKworICAgQ2hhbmdlczoKKyAgIC0gSW50cm9kdWNlZCBhIG5ldyBtYWNybyBORVRTTk1QX1JFTU9WRV9DT05TVCgpIHRoYXQgYWxsb3dzIHRvCisgICBjYXN0CisgICBhd2F5IGNvbnN0bmVzcyB3aXRob3V0IHRoYXQgZ2NjIC1XY2FzdC1xdWFsIHJlcG9ydHMgYSB3YXJuaW5nLgorICAgLSBNYWRlIGNhc3RpbmcgYXdheSBjb25zdG5lc3MgZXhwbGljaXQgYnkgaW50cm9kdWNpbmcgdGhlCisgICBORVRTTk1QX1JFTU9WRV9DT05TVCgpIG1hY3JvLiBUaGlzIHN1cHByZXNzZXMgdGhlIHdhcm5pbmcKKyAgIGdjYyAtV2Nhc3QtcXVhbCBwcmludGVkIGZvciB0aGVzZSBzdGF0ZW1lbnRzLgorCisyMDEwLTAxLTA2IDExOjQ2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMDk6MTQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYXBwcy9hZ2VudHh0cmFwLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRG8gbm90IHVzZSAwIHdoZW4gcmVmZXJyaW5nIHRvIE5VTEwuCisKKzIwMTAtMDEtMDYgMDg6MjYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBDaGFuZ2VkIGFyZ3VtZW50IHR5cGVzIG9mIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSBhbmQKKyAgIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoKQorICAgZnJvbSBzdHJ1Y3QgdGltZXZhbCAqIHRvIGNvbnN0IHN0cnVjdCB0aW1ldmFsICouIE5vdGU6IHRoaXMgZG9lcworICAgbm90IGFmZmVjdAorICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKzIwMTAtMDEtMDYgMDg6MjMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIENoYW5nZXMgKG5vIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW9kaWZpZWQpOgorICAgLSBSZW1vdmVkIGRpc2tpb19wYXJzZV9jb25maWcoKSBkZWNsYXJhdGlvbiBiZWNhdXNlIHRoYXQgZnVuY3Rpb24KKyAgIGlzIG5laXRoZXIgY2FsbGVkIG5vciBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZSBkaXNraW8uYy4KKyAgIC0gQWRkZWQgZGVjbGFyYXRpb24gZm9yIGdldHN0YXRzKCkgc3VjaCB0aGF0IGdjYyBkb2VzIG5vdAorICAgY29tcGxhaW4gYWJvdXQgYSBtaXNzaW5nIGRlY2xhcmF0aW9uLgorICAgLSBMaW51eDogY2hhbmdlZCB2aXNpYmlsaXR5IG9mIGdldHN0YXRzKCkgZnJvbSBnbG9iYWwgdG8gc3RhdGljCisgICBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgQlNEIGFuZCBEYXJ3aW4gaW1wbGVtZW50YXRpb25zIG9mCisgICBnZXRzdGF0cygpLgorCisyMDEwLTAxLTA2IDA4OjAwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvIHVfY2hhciAqIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMDYgMDI6MTggIG1hZ2ZyCisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBtYW4vTWFrZWZpbGUuaW4sIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXA6CisKKyAgIENIQU5HRVM6IGFwcHM6IE9ubHkgYnVpbGQgYWdlbnR4dHJhcCBpZiB0aGUgYWdlbnR4IGxpYnJhcmllcyBhcmUKKyAgIGJ1aWx0LiBBZGQgYSB0ZXN0IGNhc2UgZm9yIGFnZW50eHRyYXAuCisgICAKKyAgIFRoZSBlbmFibGVtZW50L2Rpc2FibGVtZW50IGlzIGluc3BpZXJlZCBieSBhdXRvbWFrZSBjb25kaXRpb25hbHMKKworMjAxMC0wMS0wNiAwMTo1OSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgc3RhcnR0aW1lLgorCisyMDEwLTAxLTA1IDIyOjU0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaDoKKworICAgQ0hBTkdFUzogSGlkZSBtb3N0IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHRoZSBsb2dtYXRjaAorICAgbW9kdWxlLiBDbGVhbmVkIHVwIHRoZSBoZWFkZXIgYWNjb3JkaW5nbHkuIFJlbW92ZSB0aGUgbmVlZCBmb3IKKyAgIGZvcndhcmQgZGVjbGFyYXRpb25zIGJ5IHJlb3JkZXJpbmcgdGhlIGZ1bmN0aW9ucy4KIAogMjAxMC0wMS0wNSAyMjozMyAgZHRzMTIKIApAQCAtMzE0Nyw5ICs0NzkxMiwxNzUgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTEyNTg0OiBGaXggbnVsbCBPSUQgaGFuZGxpbmcgaW4gQWdlbnR4IG9uIDY0Yml0CisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTI1ODQ6IEZpeCBudWxsIE9JRCBoYW5kbGluZyBpbiBBZ2VudHgKKyAgIG9uIDY0Yml0CiAgICBQYXRjaCBzdXBwbGllZCBieSBMdXR6IEphZW5pY2tlCiAKKzIwMTAtMDEtMDUgMTA6MTEgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4Lmg6CisKKyAgIENIQU5HRVM6IGhwdXg6IGZpeCBidWlsZCBlcnJvciBvbiBIUC1VWCAxMC4yMAorCisyMDEwLTAxLTA1IDA4OjQyICBqc2FmcmFuZWsKKworICAgKiBtYW4sIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgUmVtb3ZlIGdlbmVyYXRlZCBtYW4gcGFnZXMgZnJvbSByZXBvc2l0b3J5LgorCisyMDEwLTAxLTA0IDE2OjQ0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRml4ZWQgYSBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZCB0aGF0IG9jY3VycmVkIHdoZW4gYW4gQVNDSUkKKyAgIHN0cmluZyB3YXMKKyAgIHBhc3NlZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQgb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSAvCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpIGFuZCB0aGUgdGhpcmQgYXJndW1lbnQgKCpsZW4pCisgICBlcXVhbHMgMC4KKworMjAxMC0wMS0wNCAxNjo0MSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNhc3RpbmcgYXdheSAnY29uc3QnLgorCisyMDEwLTAxLTA0IDE2OjI3ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQWRkZWQgdW5pdCB0ZXN0IGZvciByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIGFuZAorICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKS4KKworMjAxMC0wMS0wNCAxMDo0NSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgVXNlIGNvcnJlY3Qgb2lkIGxlbmd0aCBpbiB0YWJsZSBpbmRleGVzLgorCisyMDEwLTAxLTA0IDA4OjEwICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBzbm1wX2FsYXJtLmMgY2FuIGJlIGNvbXBpbGVkIGFnYWluIHdpdGggQzg5CisgICBjb21waWxlcnM6IGZvciBDODkKKyAgIGl0IGlzIHJlcXVpcmVkIHRoYXQgaW5pdGlhbGl6ZXJzIGFyZSBjb25zdGFudCBleHByZXNzaW9ucy4KKworMjAxMC0wMS0wMyAxNjoyOCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYzoKKworICAgUmVuYW1lIG5ldHNubXBfYXJjaF90Y3Bjb25uX2RlbGV0ZSB0bworICAgbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfZGVsZXRlIGluIG9yZGVyIHRvIGJlIGNvbnNpc3RlbnQgd2l0aAorICAgdGhlIGhlYWRlciBmaWxlIGFuZCBhbGwgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbiB0aGUgbW9kdWxlLgorCisyMDEwLTAxLTAzIDE2OjI2ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsICAKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaDoKKworICAgQWRkIG1pc3NpbmcgZGVjbGFyYXRpb25zLgorCisyMDA5LTEyLTMwIDEyOjQ5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkzMzogZml4ZWQgdGhlIGlzc3VlIHRoYXQgaW5jbHVkaW5nIHRoZSBoZWFkZXIKKyAgIGZpbGUKKyAgIDxuZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg+IGZyb20gPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyAgIHRyaWdnZXJzCisgICBjb21waWxlciBlcnJvcnMgZHVyaW5nIHRoZSBjb25maWd1cmUgcHJvY2VzcyAoY29tcGxhaW50cyBhYm91dAorICAgPG5ldHNubXAvbmV0LXNubXAtY29uZmlnLmg+IG5vdCBiZWluZyBpbmNsdWRlZCBiZWZvcmUKKyAgIDxuZXQtc25tcC90eXBlcy5oPikuCisgICBOb3RlOiB0aGlzIGRvZXMgbm90IHNvbHZlIHRoZSB1bmRlcmx5aW5nIHByb2JsZW0gdGhhdCBNSUIgY29kZQorICAgbXVzdCBub3QKKyAgIGluY2x1ZGUgdGhlIGhlYWRlciBmaWxlIDxuZXQtc25tcC90eXBlcy5oPiBiZWNhdXNlIGRvaW5nIHNvIHdvdWxkCisgICB0cmlnZ2VyIGEKKyAgIGNpcmN1bGFyIGRlcGVuZGVuY3kgZHVyaW5nIHRoZSBjb25maWd1cmUgc3RlcCAoTUlCIGNvZGUgaXMKKyAgIGNvbXBpbGVkIGR1cmluZworICAgdGhlIGNvbmZpZ3VyZSBzdGVwLCB3aGlsZSB0aGUgY29uZmlndXJlIHN0ZXAgZ2VuZXJhdGVzCisgICA8bmV0c25tcC9uZXQtc25tcC1jb25maWcuaD4gYW5kIDxuZXQtc25tcC90eXBlcy5oPiBuZWVkcworICAgPG5ldHNubXAvbmV0LXNubXAtY29uZmlnLmg+KS4KKworMjAwOS0xMi0zMCAxMTo0OCAgYnZhc3NjaGUKKworICAgKiBhcHBzLCBtYW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTE5OiB1cGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3RzLgorCisyMDA5LTEyLTI4IDE4OjAzICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X2luZGV4LmM6CisKKyAgIEZpeGVkIGEgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWQuIEZvdW5kIHRoaXMgYnkgYW5hbHl6aW5nIGNvbXBpbGVyCisgICB3YXJuaW5ncy4KKyAgIE5vdGU6IHRoZSBhZmZlY3RlZCBmdW5jdGlvbiwgcmVnaXN0ZXJfc3RyaW5nX2luZGV4KCksIGlzbid0CisgICBjYWxsZWQgZnJvbQorICAgYW55d2hlcmUgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0IGl0c2VsZi4KKworMjAwOS0xMi0yMyAwOTo0OSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgRml4IGludmFsaWQgcmVhZCByZXBvcnRlZCBieSB2YWxncmluZDoKKyAgIEludmFsaWQgcmVhZCBvZiBzaXplIDEKKyAgIG1lbWNweSAobWNfcmVwbGFjZV9zdHJtZW0uYzo0MDIpCisgICBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfY29udGFpbmVyX2xvYWRfdjQKKyAgIChpcGFkZHJlc3NfaW9jdGwuYzoyNDApCisgICBuZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkIChpcGFkZHJlc3NfbGludXguYzoxNTgpCisgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfY29udGFpbmVyX2xvYWQgKGlwYWRkcmVzc19jb21tb24uYzoxMTIpCisgICAKKyAgIFJldHVybmluZyBzdHJ1Y3R1cmUgd2l0aCBwb2ludGVycyBpbnNpZGUgaXMgbm90IHRoZSBiZXN0IHRoaW5nIHRvCisgICBkby4KKworMjAwOS0xMi0yMiAxNjowNSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgRml4ZWQgc2V2ZXJhbCBwYXN0LWVuZC1vZi1idWZmZXIgcmVhZHMuCisKKzIwMDktMTItMjIgMTI6MDIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIHNubXBsaWIvc3lzdGVtLmMsIHNubXBsaWIvdG9vbHMuYywgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIAorICAgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgUmV2ZXJ0ZWQgdGhlIGJhY2t3YXJkcy1pbmNvbXBhdGlibGUgY2hhbmdlcyBvZiByMTc5MTM6CisgICAtIFJlc3RvcmVkIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBESUZGVElNRVZBTCgpIG1hY3JvLgorICAgLSBSZXN0b3JlZCB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlIGZ1bmN0aW9ucworICAgY2FsY3VsYXRlX3RpbWVfZGlmZigpLAorICAgdWF0aW1lX3JlYWR5KCksIG1hcmtlcl90dGlja3MoKSBhbmQgdGltZXZhbF90dGlja3MoKS4KKyAgIC0gc3RhcnR0aW1lIGlzIGFnYWluIGEgZ2xvYmFsIHZhcmlhYmxlIGluc3RlYWQgb2YgYSBzdGF0aWMgb25lLgorICAgQWxzbyBpbXBsZW1lbnRlZCB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisgICAtIE1vdmVkIHRoZSBtYXJrZXJfdCB0eXBlZGVmIGZyb20gbmV0LXNubXAvbGlicmFyeS90b29scy5oIHRvCisgICBuZXQtc25tcC9saWJyYXJ5L3R5cGVzLmguCisgICAtIEFkZGVkIGEgbmV3IHR5cGVkZWYsIGNvbnN0X21hcmtlcl90LgorICAgLSBGb3IgdGhvc2UgYXRpbWVfKigpIC8gdWF0aW1lXyooKSAvICpfdHRpY2tzKCkgZnVuY3Rpb25zIHRoYXQgZG8KKyAgIG5vdCBjaGFuZ2UKKyAgIHRoZWlyIGFyZ3VtZW50cywgZGVjbGFyZWQgdGhlc2UgYXJndW1lbnRzIGNvbnN0X21hcmtlcl90IGluc3RlYWQKKyAgIG9mIG1hcmtlcl90LgorICAgLSBSZW5hbWVkIG5ldHNubXBfZ2V0X3N0YXJ0dGltZSgpIGFuZCBuZXRzbm1wX3NldF9zdGFydHRpbWUoKSB0bworICAgbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkgYW5kIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZSgpCisgICByZXNwZWN0aXZlbHkuIE1vdmVkIHRoZXNlIGZ1bmN0aW9ucyBmcm9tIHRvb2xzLmMgdG8gc3lzdGVtLmMuCisgICAtIFJlbW92ZWQgdGhlIGZ1bmN0aW9uIGF0aW1lX2hzdWJ0cmFjdCgpICh3YXMgaW50cm9kdWNlZCBpbgorICAgcjE3OTEzKSBhbmQKKyAgIGludHJvZHVjZWQgYSBuZXcgZnVuY3Rpb24sIG5ldHNubXBfc2V0X2FnZW50X3VwdGltZSgpLgorCiAyMDA5LTEyLTIyIDA3OjU5ICBidmFzc2NoZQogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKQEAgLTMxNjMsNiArNDgwOTQsMjUgQEAKICAgIHN0cmluZwogICAgcmVhZCBieSB0aGlzIGZ1bmN0aW9uLgogCisyMDA5LTEyLTIxIDE0OjI5ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXggY3Jhc2ggaW4gSUYtTUlCIGFuZCBJUC1NSUIgd2hlbiB0aGVyZSBhcmUKKyAgIHNvbWUgaW50ZXJmYWNlcyB3aXRoIGJyb2FkY2FzdCBJUCBhZGRyZXNzIGFuZCBzb21lIHdpdGhvdXQuCisgICAKKyAgIFJlc2V0IHRoZSBiY2FzdGVudHJ5IGluIHRoZSBsb29wLCBzbyBpdCBjYW5ub3QgYmUgaW5zZXJ0ZWQgdG8gdGhlCisgICBjb250YWluZXIKKyAgIHR3aWNlLgorICAgCisgICBXaXRob3V0IHRoaXMgcGF0Y2gsIHdoZW4gYW4gaW50ZXJmYWNlIHdpdGhvdXQgYnJvYWRjYXN0IGFkZHJlc3MKKyAgIGlzIHByb2Nlc3NlZCwKKyAgIHRoZSBiY2FzdGFkZHJlc3MgZnJvbSBwcmV2aW91cyBsb29wIGlzIGluc2VydGVkIGludG8gdGhlCisgICBjb250YWluZXIuIFRoaXMKKyAgIG9idmlvdXNseSBmYWlscyBhbmQgdGhlIGJjYXN0ZW50cnkgaXMgZnJlZWQsIGJ1dCB0aGUgY29udGFpbmVyCisgICBzdGlsbCBjb250YWlucworICAgcmVmZXJlbmNlIHRvIGl0IC0+IFNJR1NFR1YuCisKIDIwMDktMTItMjEgMTM6NTIgIGJ2YXNzY2hlCiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgpAQCAtMzE3Nyw2ICs0ODEyNywzMCBAQAogICAgdHJpZ2dlcmVkIGJ5CiAgICBwYXJzaW5nIHRoZSBwZXJzaXN0ZW50RGlyIGtleXdvcmQuCiAKKzIwMDktMTItMjEgMTM6MzIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIEFwcGxpZWQgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHBhdGNoICMyOTAxMTIyLiBDaGFuZ2VzOgorICAgLSBOZXcgZmVhdHVyZTogc3BlY2lmeWluZyBBU04gdHlwZSBTTk1QX05PU1VDSElOU1RBTkNFIGFzIHRoZQorICAgdGhpcmQgYXJndW1lbnQKKyAgIG9mIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSB3aWxsIGNhdXNlIGFuIFNOTVAgR2V0UmVxdWVzdCAvCisgICBHZXROZXh0UmVxdWVzdCB0bworICAgcmV0dXJuIHRoZSBlcnJvciBjb2RlIG5vU3VjaEluc3RhbmNlIChTTk1QdjIpIG9yIG5vU3VjaE5hbWUKKyAgIChTTk1QdjEpLiBUaGlzCisgICBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYXZlIGEgY2FjaGVkIHRhYmxlIHdpdGggb25lIG9yIG1vcmUKKyAgICJob2xlcyIuCisgICAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG8gbm90IGZyZWUoKSAvIG1hbGxvYygpIHRoZSBtZW1vcnkKKyAgIGZvciBzdG9yaW5nCisgICB0aGUgY2FjaGVkIHZhbHVlIGlmIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQuCisgICAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG8gbm90IGZyZWUoKSAvIG1hbGxvYygpIHRoZSBtZW1vcnkKKyAgIGZvciBzdG9yaW5nCisgICB0aGUgY2FjaGVkIHZhbHVlIGlmIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGhhcyBub3QgYmVlbgorICAgbW9kaWZpZWQuCisgICAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogaWYgdGhlIHNpemUgb2YgdGhlIGNhY2hlZCB2YWx1ZQorICAgc2hydW5rLCB1c2UKKyAgIHJlYWxsb2MoKSBpbnN0ZWFkIG9mIGZyZWUoKSBhbmQgbWFsbG9jKCkuCisKIDIwMDktMTItMjEgMTI6MjMgIGJ2YXNzY2hlCiAKICAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgpAQCAtMzIxNyw3ICs0ODE5MSw4IEBACiAgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYzoKIAogICAgQXBwbGllZCBwYXRjaCAjMjkxMjA2OCwgd2hpY2ggZml4ZXMgYSBtZW1vcnkgbGVhayBkdXJpbmcgc3RhcnR1cC4KLSAgIFRoZSBmdW5jdGlvbiBsb2dfbm90aWZpY2F0aW9uKCkgYWRkcyBhIHJvdyB0byB0aGUgdGFibGUKKyAgIFRoZQorICAgZnVuY3Rpb24gbG9nX25vdGlmaWNhdGlvbigpIGFkZHMgYSByb3cgdG8gdGhlIHRhYmxlCiAgICBubG1Mb2dWYXJUYWJsZSwgYnV0CiAgICB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoYXQgdGFibGUgaGFzIGJlZW4KICAgIGluaXRpYWxpemVkLiBJZgpAQCAtMzI0MiwxMSArNDgyMTcsMTE5IEBACiAgICB2YXJiaW5kIGluY2x1ZGVkIGluIHRyYXBzIGdlbmVyYXRlZCBieSBOZXQtU05NUCBpdHNlbGYgKGUuZy4KICAgIGNvbGRTdGFydCkuIgogCi0yMDA5LTEyLTIxIDEwOjUwICBidmFzc2NoZQorMjAwOS0xMi0yMSAxMDowOSAgYnZhc3NjaGUKIAotICAgKiBSRUFETUUud2luMzI6CisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hbGFybS5jOgogCi0gICBCYWNrcG9ydGVkIHIxNzkwMSAoc3BlbGxpbmcgZml4ZXMgYW5kIGhyU3lzdGVtVXB0aW1lIGRvY3VtZW50YXRpb24pLgorICAgU3BlbGxpbmcgZml4OiByZXBsYWNlZCBhbGwgb2NjdXJyZW5jZXMgb2YgJ3NwZWNpZmMnIGJ5CisgICAnc3BlY2lmaWMnLgorCisyMDA5LTEyLTIxIDEwOjA2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBSZWZhY3RvcmluZzogZWxpbWluYXRlZCBkdXBsaWNhdGVkIGNvZGUgYnkgcmVpbXBsZW1lbnRpbmcKKyAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoKSB1c2luZyBzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyKCkuIE5laXRoZXIgdGhlCisgICBOZXQtU05NUCBBUEkgbm9yIHRoZSBiZWhhdmlvciBvZiBzbm1wX2FsYXJtX3JlZ2lzdGVyKCkgaGFzIGJlZW4KKyAgIGNoYW5nZWQuCisKKzIwMDktMTItMjAgMTE6MTAgIG1hZ2ZyCisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvYWdlbnR4dHJhcC5jLCBtYW4vTWFrZWZpbGUuaW4sICAgCisgICAgICBtYW4vYWdlbnR4dHJhcC4xLmRlZjoKKworICAgTkVXUzogYXBwczogQWRkIGNvbW1hbmQgdG8gc2VuZCBBZ2VudFggbm90aWZ5IHJlcXVlc3RzIHRvIGEKKyAgIG1hc3RlciBhZ2VudC4KKworMjAwOS0xMi0xNyAxNjo0NCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTE3IC0tIGJ1aWxkcyBhZ2FpbiBvbiBXaW5kb3dzIHN5c3RlbXMuCisKKzIwMDktMTItMTcgMTY6MDMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTAzIC8gcGF0Y2ggMjkxMTMyMyAiRml4IGFnZW50IGxvY2t1cCB3aGVuCisgICBtb25pdG9yaW5nCisgICBBZ2VudFgtZGVsZWdhdGVkIGluZm9ybWF0aW9uIiAoc3VibWl0dGVkIGJ5IG15c2VsZikuIFRoYXQgcGF0Y2gKKyAgIGRpZCBub3Qgb25seQorICAgZml4IHRoZSBsb2NrdXAgYnV0IGFsc28gbWFkZSBzbm1wZCBwcmludCBhIHdhcm5pbmcgZHVyaW5nIHN0YXJ0dXAKKyAgIHdoZW4KKyAgIGlxdWVyeVNlY05hbWUgd2FzIG5vdCBjb25maWd1cmVkLiBUaGlzIHdhcm5pbmcgd2FzIHByaW50ZWQgZXZlbgorICAgd2hlbiBubworICAgaW50ZXJuYWwgcXVlcmllcyB3ZXJlIHBlcmZvcm1lZC4gVGhpcyB3YXJuaW5nIGlzIG5vdyBvbmx5IHByaW50ZWQKKyAgIGp1c3QgYmVmb3JlCisgICB0aGUgZmlyc3QgaW50ZXJuYWwgcXVlcnkgaXMgbWFkZSAoZHVyaW5nIHRoZSBmaXJzdCBjYWxsIG9mCisgICBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oKSBpbnN0ZWFkIG9mIGR1cmluZyBjcmVhdGlvbiBvZgorICAgdGhlIGludGVybmFsCisgICBzZXNzaW9uKS4KKworMjAwOS0xMi0xNyAxMzo1NSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jOgorCisgICBSTU9OIE1JQiBzb3VyY2UgY29kZSBjb21waWxlcyBhZ2FpbiAtLSBzaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkCisgICBpbiByMTc5MTMuCisKKzIwMDktMTItMTcgMTM6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYywgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgTW9kaWZpZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoKSBhbmQKKyAgIEFHVVRJTF9zeXNfdXBfdGltZSgpIHN1Y2ggdGhhdCB0aGVzZSBmdW5jdGlvbnMgbm9ybWFsaXplIHRoZQorICAgdHZfdXNlYyBmaWVsZCBvZgorICAgc3RydWN0IHRpbWV2YWwgcHJvcGVybHkuIE5vdGU6IHRoaXMgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9uIGRvZXMKKyAgIG5vdCBhZmZlY3QKKyAgIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHR3byBmdW5jdGlvbnMuCisKKzIwMDktMTItMTcgMTM6MTEgIGJ2YXNzY2hlCisKKyAgICogbWFuL25ldHNubXBfdXRpbC4zOgorCisgICBSZW1vdmVkIGRvY3VtZW50YXRpb24gb2YgdGhlIERJRkZUSU1FVkFMKCkgbWFjcm8gLS0gc2hvdWxkIGhhdmUKKyAgIGJlZW4gaW5jbHVkZWQKKyAgIGluIHIxNzkxMy4KKworMjAwOS0xMi0xNyAxMzowNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENvbnZlcnRlZCBzdGFydHRpbWUgZnJvbSBhIGdsb2JhbCB2YXJpYWJsZSBpbnRvIGEgc3RhdGljIHZhcmlhYmxlCisgICBhbmQgYXBwbGllZCB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisgICAtIEFkZGVkIHR3byBuZXcgbWFjcm9zOiBORVRTTk1QX1RJTUVSQUREKCkgYW5kCisgICBORVRTTk1QX1RJTUVSU1VCKCkuCisgICAtIEFkZGVkIHRocmVlIG5ldyBmdW5jdGlvbnM6IG5ldHNubXBfZ2V0X3N0YXJ0dGltZSgpLAorICAgbmV0c25tcF9zZXRfc3RhcnR0aW1lKCkgYW5kIGF0aW1lX2hzdWJ0cmFjdCgpLgorICAgLSBSZXBsYWNlZCBnZXR0aW1lb2ZkYXkoKSArIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSBjYWxscyBieSBhIGNhbGwKKyAgIHRvIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpLgorICAgLSBSZW1vdmVkIHRoZSBtYWNybyBESUZGVElNRVZBTCgpIGJlY2F1c2UgaXQgd2FzIG5vdCB1c2VkIGluc2lkZQorICAgdGhlIE5ldC1TTk1QIHByb2plY3QgYW5kIGJlY2F1c2UgaXQgY29udGFpbmVkIGEgYnVnLgorICAgLSBSZW1vdmVkIHRoZSBmdW5jdGlvbnMgY2FsY3VsYXRlX3RpbWVfZGlmZigpLCB1YXRpbWVfcmVhZHkoKSwKKyAgIG1hcmtlcl90dGlja3MoKSBhbmQgdGltZXZhbF90dGlja3MoKS4KKworMjAwOS0xMi0xNyAxMjo0NCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBCdWcgZml4OiBhY2NvcmRpbmcgdG8gUkZDIDI1NzEgdGhlIHVuaXQgb2Ygc25tcEVuZ2luZVRpbWUgaXMgb25lCisgICBzZWNvbmQsCisgICBub3Qgb25lIGh1bmRyZWR0aCBvZiBhIHNlY29uZC4KIAogMjAwOS0xMi0xNyAxMDowMyAgZHRzMTIKIApAQCAtMzI1NCw2ICs0ODMzNyw1NSBAQAogCiAgICBGaXggdHlwby4KIAorMjAwOS0xMi0xNiAxMjozMCAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi90b29scy5jLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW5kb3dzLW9ubHkgYnVnIGZpeGVzOgorICAgLSBGaXhlZCB0aGUgc3RyYW5nZSBidWlsZCBlcnJvcnMgdGhhdCBvY2N1cnJlZCB3aGVuIGNvbXBpbGluZworICAgbGlibmV0c25tcCBhcyBhIERMTCBhbmQgd2hlbiBlaXRoZXIgPHN0ZGxpYi5oPiBvciA8c3RyaW5nLmg+IHdhcworICAgaW5jbHVkZWQgYWZ0ZXIgPG5ldC1zbm1wLWNvbmZpZy5oPiBpbnN0ZWFkIG9mIGJlZm9yZS4KKyAgIC0gRm9yIGRlYnVnIGJ1aWxkcyB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLCBmaXhlZCB0aGUKKyAgIG1pc21hdGNoZXMgYmV0d2VlbiB0aGUgX21hbGxvY19kYmcoKSBjYWxsIGludm9rZWQgYnkgc3RyZHVwKCkgYW5kCisgICBmcmVlKCktaW5nIHN0cmR1cCgpLWVkIG1lbW9yeSBieSBpbmNsdWRpbmcgdGhlIDxjcnRkYmcuaD4gaGVhZGVyCisgICBpbiB0b29scy5jIGFuZCBieSBkZWZpbmluZyB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbAorICAgX0NSVERCR19NQVBfQUxMT0MuIERldGVjdGVkIHZpYSB0aGUgbWVtb3J5IGNoZWNrZXIgaW5jbHVkZWQgaW4KKyAgIEludGVsIFBhcmFsbGVsIFN0dWRpby4KKworMjAwOS0xMi0xNCAxNzoyMyAgdGFuZGVycworCisgICAqICBwZXJsL2FnZW50L2FnZW50LnhzLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBzeW5jIGRlZmluaXRpb24gb2YgbmV0c25tcF91ZHBfYWRkcl9wYWlyIGluIFBlcmwgd2l0aCB0aGUgY2hhbmdlcworICAgaW4KKyAgIHIxNzg1NSBhbmQgcjE3OTA4CisKKzIwMDktMTItMTQgMTM6NTUgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcFRDUERvbWFpbi5jOgorCisgICBGaXggVENQIHRyYW5zcG9ydCBicm9rZW4gYnkgcmV2LiAxNzg1NSAtIGNvcGllcyBvZgorICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyIGluIHNubXBUQ1BEb21haW4uYyBhbmQgc25tcFVEUERvbWFpbi5jIG11c3QKKyAgIGJlIHRoZSBzYW1lLgorCisyMDA5LTEyLTExIDE0OjQzICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHVzbS5jLCBtYW4vc25tcHVzbS4xLmRlZjoKKworICAgQ0hBTkdFUzogc25tcHVzbTogcGF0Y2ggZnJvbSBNYXJ0aW4gQmpvcmtsdW5kIHRvIGFkZCBhIC1DdyBvcHRpb24KKyAgIHRvIHVzZSBjcmVhdGVBbmRXYWl0IGZvciBhZ2VudHMgdGhhdCBhcmUgc3RyaWN0IGFib3V0IG5vdAorICAgYWxsb3dpbmcgYSByb3cgdG8gYmUgc2V0IHRvIGFjdGl2ZSB1bnRpbCB0aGUgYXV0aGVudGljYXRpb24KKyAgIHBhc3N3b3JkIGhhcyBiZWVuIGNoYW5nZWQ7IHBsdXMgd2hpdGUtc3BhY2UgY2xlYW4gdXAsIG1hbnVhbAorICAgYWRkaXRpb25zIGFuZCBoZWxwIG91dHB1dCBtb2RpZmljYXRpb25zIGJ5IGhhcmRha2VyCisKKzIwMDktMTItMTEgMTQ6MzUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgYSBmb3JtYXQgc3BlY2lmaWVyIG1pc21hdGNoLgorCiAyMDA5LTEyLTExIDE0OjA2ICBidmFzc2NoZQogCiAgICAqIFJFQURNRS53aW4zMiwgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CkBAIC0zMjY3LDEyICs0ODM5OSwzNiBAQAogICAgdHJhcHMgaXMgbm93CiAgICBjb3JyZWN0LgogCisyMDA5LTEyLTEwIDE1OjUyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0hFUzogMjkxMTk3MDogUHJvcGVybHkgdGVybWluYXRlIGxpbmtlZCBsaXN0CisgICBvZiByZWdpc3RyYXRpb25zLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTWlya28gRGVja2VydC4KKwogMjAwOS0xMi0xMCAxNTo0MyAgZHRzMTIKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMjkxMTMyMzogRml4IGFnZW50IGxvY2t1cCB3aGVuIG1vbml0b3JpbmcgQWdlbnRYLWRlbGVnYXRlZCBpbmZvcm1hdGlvbgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDI5MTEzMjM6IEZpeCBhZ2VudCBsb2NrdXAgd2hlbgorICAgbW9uaXRvcmluZyBBZ2VudFgtZGVsZWdhdGVkIGluZm9ybWF0aW9uCisKKzIwMDktMTItMTAgMTM6NTkgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBDaGFuZ2VzOgorICAgLSBBZGRlZCBpbmZvcm1hdGlvbiBhYm91dCBNaWNyb3NvZnQncyBpbXBsZW1lbnRhdGlvbiBvZgorICAgaHJTeXN0ZW1VcHRpbWUuMC4KKyAgIC0gRml4ZWQgYSBmZXcgdHlwb3MuCisKKzIwMDktMTItMTAgMTM6MDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQWRkZWQgbWlzc2luZyBuZXdsaW5lIGluIGEgbG9nZ2luZyBzdGF0ZW1lbnQuCiAKIDIwMDktMTItMTAgMTI6NTQgIGJ2YXNzY2hlCiAKQEAgLTMyODcsMjEgKzQ4NDQzLDI5NCBAQAogICAgaGFzIGJlZW4KICAgIGRldGVjdGVkLgogCisyMDA5LTEyLTEwIDEyOjM3ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBPSURzIGluIGRlYnVnIG1lc3NhZ2VzIGdlbmVyYXRlZCBieSB0aGUgd2luRXh0RExMIG1vZHVsZSBhcmUgbm93CisgICBwcmludGVkIGluCisgICBzeW1ib2xpYyBmb3JtIGluc3RlYWQgb2YgbnVtZXJpYyBmb3JtLgorCisyMDA5LTEyLTEwIDA4OjU3ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgUHJvamVjdCBkZXBlbmRlbmNpZXMgc2hvdWxkIG5vdyByZWFsbHkgYmUgY29ycmVjdC4gU2hvdWxkIGhhdmUKKyAgIGJlZW4gaW5jbHVkZWQKKyAgIGluIHIxNzg3My4KKworMjAwOS0xMi0xMCAwODo0MSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQ2hhbmdlcyAob25seSBzb3VyY2UgY29kZSBjb21tZW50cyBoYXZlIGJlZW4gY2hhbmdlZCk6CisgICAtIFJlbW92ZWQgYSBub3RlIHRoYXQgY29udHJhZGljdGVkIHRoZSBpbnN0cnVjdGlvbnMgaW4KKyAgIFJFQURNRS53aW4zMi4KKyAgIC0gVXBkYXRlZCBidWlsZCBpbnN0cnVjdGlvbnMgYWZ0ZXIgdGhlIGFkZGl0aW9uIG9mIHRoZSBmaWxlCisgICB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oIGluIHIxNzgzMC4KKworMjAwOS0xMi0xMCAwODoxNyAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBzdGF0dXMuYzoKKworICAgTWFkZSBmaWxlIGhlYWRlciBjb21tZW50cyBjb25zaXN0ZW50IHdpdGggdGhlIGRlc2NyaXB0aW9ucyBpbiB0aGUKKyAgIHJlc3BlY3RpdmUgbWFuIHBhZ2VzLgorCisyMDA5LTEyLTEwIDAzOjA0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBNYWRlIHN1cmUgdGhhdCBhZ2VudF9zeXNPUl9jYWxsYmFjayB3b24ndCB0cmlnZ2VyIGEgd2FybmluZyB3aGVuCisgICByZWdpc3RlcmVkIGFzIGEgY2FsbGJhY2suIENoYW5nZSBhZ2VudHhfcmVvcGVuX3N5c09SVGFibGUgaW4KKyAgIG9yZGVyIHRvIGF2b2lkIHdhcm5pbmdzIG9mIGNvbnN0IHJlbW92YWwuCisKKzIwMDktMTItMDkgMTU6MDUgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgLSBNb3ZlZCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIHZhcmlhYmxlICduZXdsaW5lJyBpbnNpZGUgdGhlCisgICBmdW5jdGlvbgorICAgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCkgYmVjYXVzZSB0aGlzIHZhcmlhYmxlIGlzIG9ubHkgdXNlZCBieQorICAgdGhhdCBmdW5jdGlvbi4KKyAgIC0gRG9jdW1lbnRlZCB0aGUgcHVycG9zZSBvZiB0aGUgdmFyaWFibGUgJ25ld2xpbmUnLgorICAgLSBCdWcgZml4OiBtYWRlIHN1cmUgdGhhdCB0aGUgY2FsbCBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoKSBkb2VzCisgICBub3QgdHJpZ2dlciBhbgorICAgaW52YWxpZCBtZW1vcnkgYWNjZXNzIChzdHJbLTFdKSB3aGVuIGFuIGVtcHR5IHN0cmluZyBpcyBwYXNzZWQgdG8KKyAgIHRoaXMgZnVuY3Rpb24uCisKIDIwMDktMTItMDkgMTQ6MzcgIGpzYWZyYW5lawogCiAgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCiAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oOgogCi0gICBDSEFOR0VTOiBzbm1wZDogQWRkIHN1cHBvcnQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHdpdGggSFcgYWRkcmVzcyBiaWdnZXIgdGhhbiA2IGJ5dGVzIHRvIGlwTmV0VG9NZWRpYVRhYmxlIGFuZCBpcE5ldFRvUGh5c2ljYWxUYWJsZS4KKyAgIENIQU5HRVM6IHNubXBkOiBBZGQgc3VwcG9ydCBvZiBuZXR3b3JrIGludGVyZmFjZXMgd2l0aCBIVyBhZGRyZXNzCisgICBiaWdnZXIgdGhhbiA2IGJ5dGVzIHRvIGlwTmV0VG9NZWRpYVRhYmxlIGFuZAorICAgaXBOZXRUb1BoeXNpY2FsVGFibGUuCiAgICBTb21lIEhXLCBsaWtlIEluZmluaUJhbmQsIHVzZXMgSFcgYWRkcmVzc2VzIHdpdGggOSBhbmQgbW9yZQogICAgYnl0ZXMuIFNubXBkIG9uIExpbnV4IHdhcyBub3QgYWJsZSB0byBwYXJzZSAvcHJvYy9uZXQvYXJwIHRoZW4KICAgIGFuZCBwcm9kdWNlZCB1Z2x5ICdpb2N0bCAzNTEyMyByZXR1cm5lZCAtMScgdG8gbG9nLgogCisyMDA5LTEyLTA5IDEyOjI3ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgQWRkZWQgbWlzc2luZyAtTG8gaW4gYSBjb21tYW5kIGxpbmUgZXhhbXBsZS4KKworMjAwOS0xMi0wOSAxMjoxNiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9zbm1wZHNkay9zbm1wZC5kc3A6CisKKyAgIEFkZGVkIHNubXBhcGkubGliIHRvIHRoZSBsaW5rZXIgaW5wdXQgbGlzdCBvZiBzbm1wZC5leGUuCisgICBBcHBhcmVudGx5IFZpc3VhbAorICAgU3R1ZGlvIDIwMDUgYW5kIDIwMDggbmVlZCB0aGlzIGxpYnJhcnkgaW4gdGhlIGxpbmtlciBpbnB1dCBsaXN0CisgICB3aGVuIGxpbmtpbmcKKyAgIHRoZSBleGUsIHdoaWxlIGZvciBWaXN1YWwgU3R1ZGlvIDYgaXQgaXMgc3VmZmljaWVudCB3aGVuIHRoaXMKKyAgIGxpYnJhcnkgaXMKKyAgIHByZXNlbnQgaW4gdGhlIGxpbmtlciBpbnB1dCBsaXN0IG9mIG5ldHNubXBtaWJzLmxpYi4KKworMjAwOS0xMi0wOSAwODo0NSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFVwZGF0ZWQgUkVBRE1FLndpbjMyOiBiZWNhdXNlIG9mIHIxNzg4NCBhbmQgcjE3ODczLCB0aGUgYnVpbGQKKyAgIHByb2Nlc3MgYmVjYW1lIHNpbXBsZXIuCisKKzIwMDktMTItMDkgMDg6MjIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEV4cG9ydCBzdHJ0b3VsbCAtLSBzaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkIGluIHIxNzg4Ni4KKworMjAwOS0xMi0wOSAwODoyMSAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFJldmVydGVkIHIxNzcwMCBmb3IgUkVBRE1FLndpbjMyOiBiZWNhdXNlIG9mIHIxNzg4NiwgbW9kaWZ5aW5nCisgICB0aGUKKyAgIHN0cnRvdWxsIGxpbmUgaW4gd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYgaXMgbm8gbG9uZ2VyCisgICBuZWNlc3NhcnkuCisKKzIwMDktMTItMDkgMDg6MTIgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgIAorICAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW5kb3dzOiBzd2l0Y2hlZCBmcm9tIF9zdHJ0b3VpNjQoKSB0byBzdHJ0b3VsbCgpIGZvciBNaWNyb3NvZnQKKyAgIFZpc3VhbCBTdHVkaW8KKyAgIDIwMDIgYW5kIGxhdGVyIGJlY2F1c2UgdGhlIGZvcm1lciBpcyBub3QgZnVsbHkgUE9TSVggY29tcGxpYW50LgorICAgVGhlIHN0cnRvdWxsKCkKKyAgIHVuaXQgdGVzdCBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIG91dHB1dCBmb3IgX3N0cnRvdWk2NCgpIHdpdGgKKyAgIE1TVkMgMjAwODoKKyAgIHRlc3QgMTQgZmFpbGVkIChpbnB1dCAiMHgiKTogZXhwZWN0ZWQgZW5kIDEsIGdvdCBlbmQgMAorICAgdGVzdCAxNiBmYWlsZWQgKGlucHV0ICIweCIpOiBleHBlY3RlZCBlbmQgMSwgZ290IGVuZCAwCisKIDIwMDktMTItMDggMjE6NTQgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBzbm1wbGliL3N5c3RlbS5jOgogCi0gICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZDogTWFrZSBzdXJlIHRoYXQgYSBtYXNrIGlzIGdpdmVuIHRvIG9wZW4gd2hlbiBPX0NSRUFUIGlzIHNwZWNpZmllZAorICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6IE1ha2Ugc3VyZSB0aGF0IGEgbWFzayBpcyBnaXZlbiB0byBvcGVuCisgICB3aGVuIE9fQ1JFQVQgaXMgc3BlY2lmaWVkCisKKzIwMDktMTItMDggMTY6MjAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvd2luMzIuZHN3OgorCisgICBNYWRlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGV4ZSdzIGFuZCBsaWIncyBleHBsaWNpdCBzdWNoIHRoYXQKKyAgIFZpc3VhbAorICAgU3R1ZGlvIGNhbiBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgYnVpbGQgb3JkZXIgaW5zdGVhZCBvZiB0aGUgdXNlcgorICAgaGF2aW5nCisgICB0byBmaWd1cmUgdGhpcyBvdXQuCisKKzIwMDktMTItMDggMTU6NDcgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdGFibGUuYzoKKworICAgQnVpbGRzIGFnYWluIG9uIFVuaXggc3lzdGVtcyAoZml4ZWQgYSB0eXBvIGludHJvZHVjZWQgaW4gcjE3ODgxKS4KKworMjAwOS0xMi0wOCAxNTozNyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3A6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4gV2l0aG91dCB0aGlzCisgICBkZWZpbmUgdGhlIE1pY3Jvc29mdAorICAgVmlzdWFsIFN0dWRpbyBjb21waWxlciBjb21wbGFpbnMgYWJvdXQgYSBiZW5pZ24gcmVkZWZpbml0aW9uIG9mCisgICB0eXBlIHNvY2tsZW5fdC4KKworMjAwOS0xMi0wOCAxNToyOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0cmFwZC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgorCisgICBDbGVhbmVkIHVwIHRoZSBjb2RlIGZvciBzZXR0aW5nIGxpbmUgYnVmZmVyaW5nOgorICAgLSBJbnN0ZWFkIG9mIGhhdmluZyBjYWxscyB0byBzZXR2YnVmKCkgaW4gbXVsdGlwbGUgZmlsZXMsIHRoZXJlCisgICBpcyBub3cgb25lIGNhbGwKKyAgIHRvIHNldHZidWYoKSBmcm9tIHRoZSBuZXcgZnVuY3Rpb24gbmV0c25tcF9zZXRfZmlsZWxvZy4gVGhlc2UKKyAgIHNvdXJjZSBmaWxlcworICAgYXJlOiBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFwZC5jLAorICAgYXBwcy9zbm1wdGFibGUuYworICAgYW5kIGFnZW50XG1pYmdyb3VwXGRpc21hblx0cmFjZXJvdXRlXHRyYWNlUm91dGVDdGxUYWJsZS5jLgorICAgLSBVc2luZyAtTG8gLyAtTGUgZG9lcyBub3cgZW5hYmxlIGxpbmUgYnVmZmVyaW5nIGZvciBzdGRvdXQgLworICAgc3RkZXJyIHJlc3BlY3RpdmVseS4KKyAgIC0gUmVtb3ZlZCBjb2RlIGluIHNubXBkLmMgYW5kIHNubXB0cmFwZC5jIGZvciBzZXR0aW5nIGxpbmUKKyAgIGJ1ZmZlcmluZyBvbiBzdGRvdXQKKyAgIHNpbmNlIHNldHRpbmcgbGluZSBidWZmZXJpbmcgb24gc3Rkb3V0IGlzIG5vdyB0cmlnZ2VyZWQgYnkgdGhlCisgICBjb21tYW5kLWxpbmUKKyAgIG9wdGlvbiAtTG8uCisgICBCdWdzIGZpeGVkOgorICAgLSBMaW5lIGJ1ZmZlcmluZyBtb2RlIGlzIG5vdyBhbHNvIHNldCBmb3Igc3RkZXJyIHdoZW4gdGhlCisgICBjb21tYW5kLWxpbmUgb3B0aW9uCisgICAtTGUgaGFzIGJlZW4gc3BlY2lmaWVkLgorICAgLSBMaW5lIGJ1ZmZlcmluZyBtb2RlIGlzIG5vdyBzZXQgY29ycmVjdGx5IGZvciBzdGRvdXQgb24gV2luZG93cworICAgc3lzdGVtcworICAgKGNvbW1hbmQtbGluZSBvcHRpb24gLUxvKS4KKworMjAwOS0xMi0wOCAxMjozMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBsb2NhbCB2YXJpYWJsZXMgdGhhdCB3ZXJlIGRlZmluZWQKKyAgIGJ1dAorICAgbm90IHVzZWQgYnkgb25seSBlbmFibGluZyB0aGUgbG9jYWwgdmFyaWFibGUgZGVmaW5pdGlvbnMgb24gdGhlCisgICBwbGF0Zm9ybSB0aGF0IHVzZXMgdGhlc2UgdmFyaWFibGVzIChMaW51eCkuCisKKzIwMDktMTItMDggMTI6MjYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgorCisgICBBZGRlZCAjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIi4gRml4ZXMgYSBjb21waWxlciB3YXJuaW5nLgorCisyMDA5LTEyLTA4IDEyOjI1ICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jOgorCisgICBJbmNsdWRlIHRoZSBnZXRob3N0ZW50KCkgLyBzZXRob3N0ZW50KCkgZGVjbGFyYXRpb25zIGJlZm9yZSB1c2luZworICAgdGhlc2UKKyAgIGZ1bmN0aW9ucy4gRml4ZXMgYSBjb21waWxlciB3YXJuaW5nIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKworMjAwOS0xMi0wOCAxMjoxMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBGaXhlZCBhbiBpbmNvbnNpc3RlbmN5ICh3aGljaCBpcyBhbGxvd2VkIGJ5IHRoZSBBTlNJIEMgc3RhbmRhcmQpCisgICBiZXR3ZWVuCisgICBmdW5jdGlvbiBkZWNsYXJhdGlvbiBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbiBvZgorICAgbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyIGFuZAorICAgbmV0c25tcF9hZGRfZGVmYXVsdF90cmFwaGFuZGxlciBzdWNoCisgICB0aGF0IHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBjb21waWxlciBkb2VzIG5vIGxvbmdlciBjb21wbGFpbgorICAgYWJvdXQKKyAgIHRoaXMuCisKKzIwMDktMTItMDggMTI6MDggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgY29tcGlsZXIgZG9lcyBub3QKKyAgIGNvbXBsYWluIGFib3V0IGltcGxpY2l0bHkgY2FzdGluZyBhd2F5IGNvbnN0bmVzcy4KKworMjAwOS0xMi0wOCAxMjowNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgT25seSBjb21waWxlIHRoZSB3aW5FeHRETEwgc291cmNlIGNvZGUgaWYgdGhlIHByZXByb2Nlc3NvciBtYWNybworICAgVVNJTkdfV0lORVhURExMX01PRFVMRSBoYXMgYmVlbiBkZWZpbmVkLgorCisyMDA5LTEyLTA4IDEyOjAzICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIEFkZGVkIG1pc3NpbmcgI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4KKworMjAwOS0xMi0wOCAxMjowMSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIE1hZGUgZGVwZW5kZW5jaWVzIGJldHdlZW4gZXhlJ3MgYW5kIGxpYidzIGV4cGxpY2l0IHN1Y2ggdGhhdAorICAgVmlzdWFsCisgICBTdHVkaW8gY2FuIGZpZ3VyZSBvdXQgdGhlIHByb3BlciBidWlsZCBvcmRlciBpbnN0ZWFkIG9mIHRoZSB1c2VyCisgICBoYXZpbmcKKyAgIHRvIGZpZ3VyZSBvdXQgdGhlIGJ1aWxkIG9yZGVyLgorCisyMDA5LTEyLTA4IDA5OjQ2ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW5kb3dzIC8gTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW86IGRpc2FibGVkIHRoZSBjb21waWxlciB3YXJuaW5nCisgICBhYm91dAorICAgc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoZXMgKDQwMTgpIGJlY2F1c2UgdGhpcyB3YXJuaW5nIGRvZXMgbm90CisgICB5aWVsZAorICAgYW55IHVzZWZ1bCBpbmZvcm1hdGlvbi4KKworMjAwOS0xMi0wOCAwOToxNyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTc2MzkgKHBhdGNoIDI3ODA0MTEgLS0gZml4IGNvbXBpbGVyIHdhcm5pbmdzKToKKyAgIGFwcGxpZWQKKyAgIHRoaXMgcGF0Y2ggdG8gbmV0LXNubXAtY29uZmlnLmguaW4gdG9vIHN1Y2ggdGhhdAorICAgbmV0LXNubXAtY29uZmlnLmggYW5kCisgICBuZXQtc25tcC1jb25maWcuaC5pbiBtYXRjaCBhZ2Fpbi4KKworMjAwOS0xMi0wOCAwODoxNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgYWdlbnR4X3N5c09SX2NhbGxiYWNrKCkgZG9lcyBub3QgdHJpZ2dlciBhCisgICBjb21waWxlcgorICAgd2FybmluZyB3aGVuIHRoZSB0aGlyZCBhcmd1bWVudCBwYXNzZWQgdG8gdGhpcyBmdW5jdGlvbiBoYXMgYmVlbgorICAgZGVjbGFyZWQgY29uc3QuCisKKzIwMDktMTItMDggMDg6MTQgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBDaGFuZ2VkIHRoZSByZXR1cm4gdHlwZSBvZiBzdHJ0b3VsbCgpIGZyb20gJ3Vuc2lnbmVkIGxvbmcgbG9uZycKKyAgICh3aGljaAorICAgaXMgbm90IHZhbGlkIEM4OSkgdG8gJ3VpbnQ2NF90JyAoZGVjbGFyZWQgaW4KKyAgIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4pLgorICAgVGhpcyBjaGFuZ2UgbWFrZXMgdGhlIE5ldC1TTk1QIHNvdXJjZSBjb2RlIGNvbXBpbGUgYWdhaW4gd2l0aAorICAgTVNWQyA2LjAuCiAKIDIwMDktMTItMDcgMTA6NDYgIGR0czEyCiAKQEAgLTMzMTAsMTggKzQ4NzM5LDQ2IEBACiAgICBUd2VhayBtaXNzaW5nIHN1YmlkZW50aWZpZXIgcHJvY2Vzc2luZyB0byBiZSBtb3JlIHR5cGUtYXdhcmUuCiAgICAoQW4gaXNzdWUgd2l0aCBBSVgsIGF0IGxlYXN0KQogCisyMDA5LTEyLTA2IDE4OjM4ICBtYWdmcgorCisgICAqICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBNYWtlIHRoZSBsaXN0cyBvZiBjb20yU2VjKkVudHJpZXMgc3RhdGljCisKKzIwMDktMTItMDYgMTg6MzQgIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIE1ha2UgdGhlIGl0ZXJhdG9yIHZhcmlhYmxlIGluIG5ldHNubXBfKl9nZXRTZWNOYW1lIGNvbnN0CisKKzIwMDktMTItMDYgMTg6MjkgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBDaGFuZ2UgdGhlIHR5cGVzIG9mIHRoZSByZXR1cm4gdmFsdWVzIG9mCisgICBuZXRzbm1wXypfZ2V0U2VjTmFtZSBmcm9tIGNoYXIqIHRvIGNvbnN0IGNoYXIqIHNpbmNlIHRoZXkgcG9pbnQKKyAgIGludG8gaW50ZXJuYWwgc3RydWN0dXJlcy4KKworMjAwOS0xMi0wNSAyMDoxOSAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgZml4IGRlY2xhcmF0aW9uIG9mIHN0cnRvdWxsCisKIDIwMDktMTItMDUgMTc6NDIgIHRhbmRlcnMKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKIAogICAgY2FsbCBuZXRzbm1wX3JlYWRfbW9kdWxlIGluc3RlYWQgb2YgcmVhZF9tb2R1bGUgdG8gbWFrZSBpdAotICAgY29tcGlsZSB3aXRoIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCi0KLTIwMDktMTItMDUgMTc6MTkgIHRhbmRlcnMKLQotICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6Ci0KLSAgIGFwcGx5IHIxNzg1NCBidWlsZCBmaXggdG8gYWxsIGFmZmVjdGVkIGJyYW5jaGVzCisgICBjb21waWxlIHdpdGgKKyAgIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCiAKIDIwMDktMTItMDIgMTU6MzkgIGpzYWZyYW5lawogCkBAIC0zMzQ0LDcgKzQ4ODAxLDcgQEAKIAogMjAwOS0xMi0wMSAxMjozNiAgZHRzMTIKIAotICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgogCiAgICBVcGRhdGUgYSByZWR1bmRhbnQgKGFuZCBwcm9iYWJseSBpbmFjY3VyYXRlKSBjb21tZW50LgogCkBAIC0zMzUyLDE5ICs0ODgwOSw1MiBAQAogCiAgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4MjIzNjA6IEZpeCBtZW1vcnkgbGVhayB3aGVuIGJ1aWxkaW5nIHRhYmxlIE9JRHMKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODIyMzYwOiBGaXggbWVtb3J5IGxlYWsgd2hlbiBidWlsZGluZworICAgdGFibGUgT0lEcwogCiAyMDA5LTEyLTAxIDEyOjA4ICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRhYmxlLmM6CiAKLSAgIENIQU5HRVM6IHNubXB0YWJsZTogQlVHUzogMjgzNzk5ODogSGFuZGxlIG1pc3NpbmcgaW5zdGFuY2Ugc3ViaWRlbnRpZmllcnMgaW4gcmVzdWx0cworICAgQ0hBTkdFUzogc25tcHRhYmxlOiBCVUdTOiAyODM3OTk4OiBIYW5kbGUgbWlzc2luZyBpbnN0YW5jZQorICAgc3ViaWRlbnRpZmllcnMgaW4gcmVzdWx0cwogCiAyMDA5LTEyLTAxIDExOjU2ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4NDEwMDg6IFByb3RlY3QgYWdhaW5zdCBjcmFzaCBmb2xsb3dpbmcgZmFpbGVkIEFnZW50WCByZXNwb25zZQorICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4NDEwMDg6IFByb3RlY3QgYWdhaW5zdCBjcmFzaCBmb2xsb3dpbmcKKyAgIGZhaWxlZCBBZ2VudFggcmVzcG9uc2UKKworMjAwOS0xMi0wMSAwNzozNCAganNhZnJhbmVrCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBGaXggcmVzcG9uZGluZyB0byBicm9hZGNhc3QgcmVxdWVzdHMuCisgICBVRFAgcmVzcG9uc2VzIGFyZSBzZW50IHdpdGggc291cmNlIElQIGFkZHJlc3Mgd2hpY2ggd2FzCisgICBkZXN0aW5hdGlvbiBvZgorICAgYXBwcm9wcmlhdGUgcmVxdWVzdHMgKGltcGxlbWVudGVkIGluIFNWTiByZXYuIDE1MjE1KS4gQnV0IGlmIHRoZQorICAgZGVzdGluYXRpb24KKyAgIG9mIGEgcmVxdWVzdCBpcyBicm9hZGNhc3QgSVAgYWRkcmVzcywgdGhlIHJlcXVlc3Qgd2FzIHNlbnQgd2l0aAorICAgdGhlIGJyb2FkY2FzdAorICAgYWRkcmVzcyBhcyBzb3VyY2UuIHNlbmRtc2coKSBvbiBMaW51eCBkb2VzIG5vdCBzdXBwb3J0IHRoaXMgYW5kCisgICByZXR1cm5zIGVycm9yCisgICAtPiByZXNwb25zZSBpcyBub3Qgc2VudC4gSW4gb3JkZXIgdG8gc2VuZCByZXNwb25zZXMgZnJvbSB0aGUgc2FtZQorICAgaW50ZXJmYWNlLAorICAgaW50ZXJmYWNlIGluZGV4IG9mIHRoZSBhcHByb3ByaWF0ZSBpbnRlcmZhY2UgbXVzdCBiZSB1c2VkLgorCisyMDA5LTEyLTAxIDAwOjI5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBhY3R1YWxseSBjb21waWxlIGFmdGVyIDE3ODUyLgorCisyMDA5LTEyLTAxIDAwOjI0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBhY3R1YWxseSBjb21waWxlIGFmdGVyIDE3ODQyLgogCiAyMDA5LTExLTMwIDE2OjU1ICBkdHMxMgogCkBAIC0zMzc3LDUyICs0ODg2Nyw5MiBAQAogCiAgICAqIGxvY2FsL21pYjJjLm9sZC1hcGkuY29uZjoKIAotICAgQ0hBTkdFUzogbWliMmM6IEJVR1M6IDI4ODg1Njk6IEZpeCBnZW5lcmF0aW9uIG9mIHRhYmxlIGNvbHVtbnMgYXJyYXkKKyAgIENIQU5HRVM6IG1pYjJjOiBCVUdTOiAyODg4NTY5OiBGaXggZ2VuZXJhdGlvbiBvZiB0YWJsZSBjb2x1bW5zCisgICBhcnJheQogCiAyMDA5LTExLTMwIDE2OjMwICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKIAotICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4OTQwNTk6IEhhbmRsZSBlcnJvcnMgd2hlbiBjb3VudGluZyBpbnRlcmZhY2VzCisgICBDSEFOR0VTOiBhZ2VudDogQlVHUzogMjg5NDA1OTogSGFuZGxlIGVycm9ycyB3aGVuIGNvdW50aW5nCisgICBpbnRlcmZhY2VzCiAKIDIwMDktMTEtMzAgMTY6MDcgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDI4OTcwMDA6IFN1cHByZXNzIDMyLWJpdCBjb3VudGVyIHRydW5jYXRpb24gd2FybmluZ3MuCisgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyODk3MDAwOiBTdXBwcmVzcyAzMi1iaXQgY291bnRlciB0cnVuY2F0aW9uCisgICB3YXJuaW5ncy4KKworMjAwOS0xMS0zMCAxNTozNCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjkwMzA5MjogRml4IGJyb2tlbiBoYW5kbGluZyBvZiBicm9hZGNhc3QKKyAgIGVudHJpZXMuCiAKIDIwMDktMTEtMzAgMTU6MTkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjkwMTAyOTogRml4IGNvbXBpbGVyIHdhcm5pbmcgb24gQ2xvc2VIYW5kbGUoKQorICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyOTAxMDI5OiBGaXggY29tcGlsZXIgd2FybmluZyBvbgorICAgQ2xvc2VIYW5kbGUoKQogICAgRW5kaWFuIHByb2JsZW1zIGFscmVhZHkgYWRkcmVzc2VkIGJ5IHBhdGNoICMyODM1NTc2CiAKIDIwMDktMTEtMzAgMTU6MTMgIGR0czEyCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC54czoKIAotICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI4OTA5MzE6IEJldHRlciBoYW5kbGluZyBvZiBDb3VudGVyNjQgdmFsdWVzLgorICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI4OTA5MzE6IEJldHRlciBoYW5kbGluZyBvZiBDb3VudGVyNjQKKyAgIHZhbHVlcy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1heCBSb21hbm92LgogCiAyMDA5LTExLTMwIDE1OjA3ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODc4MTY6IFByb3RlY3QgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvIGNyYXNoCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODc4MTY6IFByb3RlY3QgYWdhaW5zdCBkaXZpc2lvbi1ieS16ZXJvCisgICBjcmFzaAorCisyMDA5LTExLTMwIDE1OjAzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMjIwOiBGaXggY29tcGlsYXRpb24gcHJvYmxlbXMgd2hlbgorICAgaWZYVGFibGUgaXMgbm90IGluY2x1ZGVkLgogCiAyMDA5LTExLTMwIDE0OjQ5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmM6CiAKLSAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzE1NTogRml4IG1lbW9yeSBsZWFrIGluIHByb3h5IGhhbmRsaW5nLgorICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMTU1OiBGaXggbWVtb3J5IGxlYWsgaW4gcHJveHkKKyAgIGhhbmRsaW5nLgogICAgUGF0Y2ggc3VwcGxpZWQgYnkgR293dGhhbSBUaG9tbWFuZHJhLgogCisyMDA5LTExLTMwIDE0OjMyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzA5MjogU3VwcG9ydCBtb25pdG9yaW5nIHByb2Nlc3NlcyB0aGF0CisgICBzaG91bGQgbm90IGJlIHJ1bm5pbmcuCisgICBQYXRjaCBwcm92aWRlZCBieSBDaHJpc3RpYW4gKGNnNzUpLgorICAgCisgICBRbjogU2hvdWxkIHRoaXMgZnVuY3Rpb25hbGl0eSBiZSBiYWNrLXBvcnRlZCB0byBlYXJsaWVyIGxpbmVzPworCiAyMDA5LTExLTMwIDE0OjEyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgogCi0gICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4Nzc1MTg6IEZpeCBoYW5kbGluZyBvZiBzY29wZWQgQWdlbnRYIHZhcmlhYmxlcworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODc3NTE4OiBGaXggaGFuZGxpbmcgb2Ygc2NvcGVkIEFnZW50WAorICAgdmFyaWFibGVzCisKKzIwMDktMTEtMzAgMTQ6MDEgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4MzU1NzY6IEZpeCBlbmRpYW5uZXNzIGlzc3VlcyBpbgorICAgcGFzcy9wYXNzX3BlcnNpc3QKIAogMjAwOS0xMS0yNyAwODo1NCAganNhZnJhbmVrCiAKQEAgLTM0MzAsMTMgKzQ4OTYwLDE3MyBAQAogCiAgICBSZW1vdmUgZXhlY3V0YWJsZSBhdHRyaWJ1dGUgZnJvbSBzb3VyY2UgZmlsZXMuCiAKKzIwMDktMTEtMjUgMjA6MzUgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMsICAgCisgICAgICBsb2NhbC9taWIyYy5ub3RpZnkuY29uZjoKKworICAgQ0hBTkdFUzogc25tcGQ6IE1ha2UgYWxsIHRoZSBvaWRzIGFuZCBvaWQgbGVuZ3RocyBpbiBhZ2VudF90cmFwLmMKKyAgIGNvbnN0IGFuZCB1c2UgdGhlbSBmcm9tIGV2ZXJ5d2hlcmUuCisKKzIwMDktMTEtMjUgMjA6MjcgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogc25tcGxpYjogSW5zdGFsbCBsaWJyYXJ5L29pZC5oLiBUaGFua3MgdG8gIlRvbWFzeiBMaXMiCisgICB3aG8gc3BvdHRlZCB0aGUgYnVnLgorCisyMDA5LTExLTI1IDA5OjQ3ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaDoKKworICAgQ29tbWVudC1vbmx5IGNoYW5nZTogY2hhbmdlZCB0aGUgbmFtZSBpbiB0aGUgZmlsZSBoZWFkZXIgZnJvbQorICAgdGVzdGhhbmRsZXIuaAorICAgdG8gaW5zdGFuY2UuaCBzdWNoIHRoYXQgaXQgbm93IG1hdGNoZXMgdGhlIGZpbGVuYW1lLgorCisyMDA5LTExLTI0IDA3OjQ5ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3QKKworMjAwOS0xMS0yMyAwNzowNyAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogTWFrZSB0aGUgZW50ZXJwcmlzZSBhcmd1bWVudCBvZgorICAgbmV0c25tcF9zZW5kX3RyYXBzIGFuZCBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzIGNvbnN0CisKKzIwMDktMTEtMjMgMDc6MDIgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSB0aGUgbmFtZSBhcmd1bWVudCB0byBmaW5kX3ZhcmJpbmRfaW5fbGlzdAorICAgY29uc3QKKworMjAwOS0xMS0yMiAyMzoyNSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oOgorCisgICBSZW1vdmUgc29tZSBsb2NhbCByZWRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMKKworMjAwOS0xMS0yMiAwMTowMyAgbWFnZnIKKworICAgKiAgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmcsIFdpbjMyOiBSZW1vdmUgYSBmZXcgdW51c2VkIGNvbmZpZ3VyZSBzeW1ib2xzCisKKzIwMDktMTEtMjEgMDg6MDEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvU25tcC13aW5FeHRETEwuaCwgd2luMzIvc25tcC13aW5leHRkbGwuaDoKKworICAgUmVwbGFjZWQgYW4gYWNjaWRlbnRhbGx5IGNvbW1pdHRlZCBmaWxlIGJ5IHRoZSBwcm9wZXIgY29udGVudHMuCisKKzIwMDktMTEtMjAgMTY6MjkgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIFJldmVydGVkIGFjY2lkZW50YWxseSBtZXJnZWQgY2hhbmdlcy4KKworMjAwOS0xMS0yMCAxNjoyNiAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGliLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL3NubXAtd2luZXh0ZGxsLmg6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAwOS0xMS0yMCAxNjoxOCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYywgICAKKyAgICAgIGxvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgU3BlbGxpbmcgZml4IGluIEMgc291cmNlIGNvZGUgY29tbWVudHM6IHJlcGxhY2VkICdyZXRyaXZhbCcgYnkKKyAgICdyZXRyaWV2YWwnLgorCisyMDA5LTExLTIwIDE2OjE1ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBGaXhlZCBhIG5hbWluZyBpbmNvbnNpc3RlbmN5OiByZXBsYWNlZCB0d28gb2NjdXJyZW5jZXMgd2luRXh0RGxsCisgICBieSB3aW5FeHRETEwgaW4gc291cmNlIGNvZGUgY29tbWVudHMuCisKKzIwMDktMTEtMTkgMjI6NTIgIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjkwMDA3ODogQWRkIHN1cHBvcnQgZm9yIE9JRCB2YXJpYWJsZXMgd2l0aAorICAgc2l6ZSBpbiBlbGVtZW50cyBpbnN0ZWFkIG9mIGJ5dGVzLCBjb3JyZWN0IHN5c09iamVjdElEIHRvIHVzZQorICAgdGhpcy4KKwogMjAwOS0xMS0xMyAxMjo1OSAganNhZnJhbmVrCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBsb2dnaW5nIG9mICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMiBiaXRzJyBpbiBJUC1NSUIgYW5kIFRDUC1NSUIKKyAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBsb2dnaW5nIG9mICd0cnVuY2F0aW5nIGludGVnZXIgdmFsdWUgPiAzMgorICAgYml0cycgaW4gSVAtTUlCIGFuZCBUQ1AtTUlCCiAgICBUaGUgY291bnRlcnMsIHdoaWNoIGdyb3cgZmFzdCBhcmUgbm93IGN1dCB0byAzMmJpdHMuCiAKKzIwMDktMTEtMTIgMDg6MjYgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgVXNlIGJpZyBwcmludGYncyBpbnN0ZWFkIG9mIG1hbnkgc21hbGwgb25lcyB0byBzYXZlIGEgZmV3IGh1bmRyZWQKKyAgIGJ5dGVzIG9uIHRoZSBmaW5hbCBleGVjdXRhYmxlIHNpemUuCisKKzIwMDktMTEtMTIgMDI6MjQgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL3N0cmxjcHkuYywgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvbC5jLCAgIAorICAgICAgc25tcGxpYi9zdHJ0b3VsLmMsIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBBQ19SRVBMQUNFX0ZVTkNTIHRvIGhhbmRsZSBjb2RlIHRoYXQgaXMKKyAgIG1pc3Npbmcgb24gc29tZSBwbGF0Zm9ybXMuCisKIDIwMDktMTEtMTEgMDk6MDAgIGR0czEyCiAKICAgICogbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CkBAIC0zNDQ1LDkwICs0OTEzNSw4NCBAQAogICAgUmV0dXJuIHN1Y2Nlc3MvZmFpbHVyZSB2YWx1ZXMgZnJvbSBjYWNoZSBsb2FkIHJvdXRpbmUuCiAgICBQcm9ibGVtIGlkZW50aWZpZWQgYnkgWHVhbi4KIAotMjAwOS0xMC0yOSAxNjowNSAgZHRzMTIKKzIwMDktMTAtMzAgMDk6NTEgIG1hZ2ZyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sICAgCi0gICAgICBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCAgIAotICAgICAgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0sIHBlcmwvYWdlbnQvYWdlbnQucG0sICAgCi0gICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwgICAKLSAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBzZWRzY3JpcHQuaW4sICAgCi0gICAgICBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oLCAgCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjMucHJlMSApCisgICBORVdTOiBzbm1wbGliOiBSZXZlcnQgMTc4MDgsIGluc3RlYWQgZmFjdG9yIG91dCB0aGUgZGVjbGFyYXRpb24KKyAgIG9mIG9pZCB0byBpdCdzIG93biBmaWxlIGFuZCBpbmNsdWRlIHRoYXQgZmlsZSBmcm9tIGJvdGggdHlwZXMuaAorICAgYW5kIGFzbjEuaAogCi0yMDA5LTEwLTI5IDE0OjI0ICBkdHMxMgorMjAwOS0xMC0zMCAwODoyOCAgbWFnZnIKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgKiAgYWdlbnQvaGVscGVycy90YWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgIAorICAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvb2lkX3N0YXNoLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCBzbm1wbGliL3NubXB1c20uYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZCwgc25tcG5ldHN0YXQ6IEFkZCBjb3JyZWN0IHNpemUgcHJlZml4ZXMKKyAgIHdoZW4gcHJpbnRpbmcgdmFyaWFibGVzIG9mIHR5cGUgb2lkLgogCi0yMDA5LTEwLTI5IDExOjQ2ICBkdHMxMgorMjAwOS0xMC0zMCAwODowNyAgbWFnZnIKIAotICAgKiBDaGFuZ2VMb2c6CisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENIQU5HRVM6IHNubXBsaWI6IENoYW5nZSBvaWQgdG8gYmUgYSAzMi1iaXQgdHlwZSBvbiBJTFA2NCBhbmQKKyAgIExQNjQgcGxhdGZvcm1zLgogCi0yMDA5LTEwLTI5IDEwOjMwICBkdHMxMgorMjAwOS0xMC0zMCAwODowNSAgbWFnZnIKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaDoKIAotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgIE5FV1M6IHNubXBsaWI6IFJlbW92ZSB0aGUgb2lkIHR5cGVkZWYgZnJvbQorICAgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPi4gSXQgaXMgc3RpbGwgcHJlc2VudCBpbgorICAgPG5ldC1zbm1wL3R5cGVzLmg+LCB1c2UgdGhhdCBmaWxlLgogCi0yMDA5LTEwLTI5IDEwOjI4ICBkdHMxMgorMjAwOS0xMC0yOCAxNjo0OCAgaGFyZGFrZXIKIAotICAgKiBkb3h5Z2VuLmNvbmY6CisgICAqIGFnZW50L3NubXBfdmFycy5jOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjMucHJlMSApCisgICBkb24ndCByZXF1aXJlIHN1YmFnZW50X2luaXQoKSBpZiBub3Qgb25seSBidWlsZGluZyBtYXN0ZXIgYWdlbnQKKyAgIGNvZGUKIAotMjAwOS0xMC0yOSAwOTo1NSAgZHRzMTIKKzIwMDktMTAtMjcgMDY6NDQgIG1hZ2ZyCiAKLSAgICogTWFrZWZpbGUudG9wOgorICAgKiAgbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpLCAgIAorICAgICAgbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mLCBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnJvdy5jb25mLCBsb2NhbC9taWIyYy5zY2FsYXIuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENIQU5HRVM6IG1pYjJjOiBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdHMgdG8gdV9jaGFyKgorCisyMDA5LTEwLTE0IDIzOjEyICBtYWdmcgorCisgICAqIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCBzbm1wbGliL3NjYXBpLmM6CisKKyAgIENIQU5HRVM6IGFwcHMsIHNubXBsaWI6IFBBVENIOiAyODM1NTc3OiBpZGVudGlmaWVkIGJ5ICJCYXJ0IFZhbgorICAgQXNzY2hlIjogUmVwbGFjZSBTTk1QX1pFUk8gb2YgYXJyYXlzIHdpdGggYSBtZW1zZXQuCisKKzIwMDktMTAtMTIgMjA6MjggIG1hZ2ZyCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBMZXNzZW4gdGhlIHNjb3BlIG9mIHRoZSBycCB2YXJpYWJsZSB0byB0aGUgc21hbGxlc3QgcG9zc2libGUgb25lLgogCiAyMDA5LTEwLTA5IDEyOjM4ICBqc2FmcmFuZWsKIAogICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CiAKLSAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyODcxNzQ3OiBwbHVnIG1lbW9yeSBsZWFrIGluIE9JRCBwcm9jZXNzaW5nLgorICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6Mjg3MTc0NzogcGx1ZyBtZW1vcnkgbGVhayBpbiBPSUQKKyAgIHByb2Nlc3NpbmcuCiAgICBUaGUgbWVtb3J5IGxlYWtlZCB3aGVuIHNtYWxsIE9JRCwgd2hpY2ggY291bGQgZml0IHByZS1hbGxvY2F0ZWQKICAgIHZwLT5uYW1lX2xvYywgd2FzIHBsYWNlZCBpbiBkaWZmZXJlbnQgKGFsbG9jYXRlZCkgb25lLgogCkBAIC0zNTQ2LDYgKzQ5MjMwLDE4IEBACiAgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2UgdGhlIHBhcnNpbmcgb2YgcmFuZ2VzIHRvIGFjY2VwdCBhbGwKICAgIHZhbGlkIHZhbHVlcy4KIAorMjAwOS0xMC0wNyAyMjoyNCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IG1pc2M6IFBBVENIOiAyODM2MTEyOiBVc2UgdGhlIHJpZ2h0IG1vZGlmaWVyIHdoZW4KKyAgIHByaW50aW5nIHNpemVfdCBhbmQgc3NpemVfdCB2YXJpYWJsZXMuCisKIDIwMDktMTAtMDcgMTI6NTAgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgpAQCAtMzU1NiwxMiArNDkyNTIsMjAgQEAKIAogMjAwOS0xMC0wNSAxOToxOSAgbWFnZnIKIAotICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaCwgICAKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgsICAgCiAgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdGV4dF91dGlscy5oOgogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBDb3JyZWN0IHRoZSBzcGVsbGluZyBvZiBfX2NwbHVzcGx1cyB3aGVuCiAgICBjaGVja2luZyBpZiB0aGUgZmlsZSBzaG91bGQgYmUgd3JhcHBlZCBpbiBleHRlcm4gIkMiLgogCisyMDA5LTEwLTA1IDA2OjEzICBtYWdmcgorCisgICAqIGFwcHMvc25tcHdhbGsuYzoKKworICAgQ0hBTkdFUzogc25tcHdhbGs6IEhhbmRsZSB0aGUgY2FzZSB3aGVuIHRoZSBlbmQgb2lkIGlzIGxvbmdlcgorICAgdGhhbiB0aGUgY3VycmVudCBvaWQgY29ycmVjdGx5CisKIDIwMDktMDktMzAgMTA6MTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKQEAgLTM1NzAsMTggKzQ5Mjc0LDM1MSBAQAogICAgaW5mb3JtYXRpb24gY3Jhc2hpbmcgdGhlIGFnZW50LgogICAgUHJvYmxlbSByZXBvcnRlZCBieSBJbnlhdmVuIFNha2FyYWkuCiAKKzIwMDktMDktMjcgMTQ6NTkgIGFsZXhfYgorCisgICAqICB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsLCAgIAorICAgICAgd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sOgorCisgICBXaW4zMjogQmluYXJ5IGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgc2NyaXB0IHVwZGF0ZXMuCisKKzIwMDktMDktMjQgMDA6MDggIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wOS0yMyAyMzo1NCAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDktMjMgMjM6NDIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKIDIwMDktMDktMjMgMjM6NDAgIGhhcmRha2VyCiAKICAgICogRkFROgogCisgICByZW1vdmUgU1ZOIGJyYW5jaCB3b3JkaW5nCisKKzIwMDktMDktMjMgMjM6MzYgIGhhcmRha2VyCisKKyAgICogRkFROgorCiAgICBwcm9wZXIgcHJvamVjdCBjYXBpdGFsaXphdGlvbgogCisyMDA5LTA5LTIzIDIzOjM1ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA5LTIzIDIzOjMwICBoYXJkYWtlcgorCisgICAqIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgdmVyc2lvbiB1cGRhdGUKKwogMjAwOS0wOS0yMiAyMTo1MSAgdGFuZGVycwogCiAgICAqIFJFQURNRS5zb2xhcmlzOgogCiAgICBmaXggdHlwb3MKIAorMjAwOS0wOS0xNCAyMjo0OSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCisyMDA5LTA5LTE0IDIyOjQ4ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wOS0xNCAyMjozOSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOS0xNCAyMjozNiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgICAKKyAgICAgIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOS0xNCAyMjoxOCAgaGFyZGFrZXIKKworICAgKiBSRUFETUUuYWl4LCBhcHBzL3NubXBuZXRzdGF0L2lmLmMsIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oOgorCisgICBQYXRjaCBmcm9tIG1hZ2ZyIGZvciA1LjUgc3BlY2lmaWMgYWl4IGJ1aWxkIGZpeGVzCisKKzIwMDktMDktMDIgMDc6MTIgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHJlbmFtZSBNSUIgbWFjcm8gdG8gTkVUU05NUF9NSUIyX09JRCwgTUlCIGlzCisgICB0b28gZ2VuZXJpYyBhbmQgbWF5IGNvbmZsaWN0IHdpdGggYXBwbGljYXRpb25zLgorICAgCisgICBUaGUgb2xkIE1JQiBtYWNybyBpcyBrZXB0IGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5LCB1bmxlc3MKKyAgIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIGlzIGRlZmluZWQuCisKKzIwMDktMDgtMzEgMTk6MzggIG5iYQorCisgICAqIG1pYnMvcmZjbGlzdDoKKworICAgQWRkaXRpb25hbCBSRkMgbWlicworCisyMDA5LTA4LTMxIDE5OjM3ICBuYmEKKworICAgKiBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dDoKKworICAgSUFOQSBmaXhlZCBhIGJ1ZworCisyMDA5LTA4LTI5IDA3OjI5ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogUmVtb3ZlIHVubmVlZGVkIGNhc3RzLgorCisyMDA5LTA4LTI5IDA3OjI4ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogcmV0IGlzIG9ubHkgdXNlZCBpbiBzZXR0YWJsZSB0YWJsZXMgc28gb25seSBkZWNsYXJlIGl0CisgICB0aGVuLgorCisyMDA5LTA4LTI5IDA3OjI0ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogUmVwbGFjZSB0aGUgX29pZF9sZW4gdmFyaWFibGUgd2l0aCBhbiBleHBsaWNpdCBjYWxsIG9mCisgICBPSURfTEVOR1RILgorCisyMDA5LTA4LTI5IDA3OjIxICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogTWFrZSBldmVyeSBmdW5jdGlvbiB0aGF0IGNhbiBiZSBzdGF0aWMgc3RhdGljLiBSZW1vdmUgdGhlCisgICBkZWNsYXJhdGlvbnMgb2YgdGhlIHN0YXRpYyBmdW5jdGlvbnMgYW5kIHRoZSBwcml2YXRlIGRlZmluZXMgZnJvbQorICAgdGhlIGhlYWRlci4KKworMjAwOS0wOC0yOSAwNzoxOSAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFJlb3JkZXIgdGhlIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVlZCBmb3IKKyAgIGZvcndhcmQgZGVjbGFyYXRpb25zLgorCisyMDA5LTA4LTI5IDA3OjE2ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogbmV0c25tcF90YWJsZV9yZWdpc3RlciBzaG91bGQgYmUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZQorICAgYW5kIHRha2Ugb25seSB0d28gYXJnbWVudHMuCisKKzIwMDktMDgtMjkgMDc6MTQgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBidWlsZF9vaWQgZXhwZWN0cyBhIHBvaW50ZXIgdG8gYWxsb2NhdGVkIG9pZC4gQ2hhbmdlIHRvCisgICB1c2UgYnVpbGRfb2lkX25vYWxsb2MgYW5kIHJlbW92ZSBvbmUgY29weSBvZiB0aGUgaW5kaWNlcy4KKworMjAwOS0wOC0yOSAwNzoxMCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IFRoZXJlIGlzIG5vIGluZGV4X29pZF9sZW4gbWVtYmVyIGluIHN0cnVjdCBlbnRyeS4gVXNlIHRoZQorICAgaW50ZW5kZWQgbG9jYWwgdmFyaWFibGUgaW5kZXhfb2lkX2xlbi4KKworMjAwOS0wOC0yOSAwNzowNiAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IENvcnJlY3QgdGhlIHJldHVybiB0eXBlIG9mICR7aX1fZ2V0KmVudHJ5IHRvIG1hdGNoIHRoZQorICAgcmV0dXJuZWQgdHlwZS4KKworMjAwOS0wOC0yNiAyMjozNyAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHdod29vcHM7IGJsZXcgdGhlIGNoYW5nZWxvZyBmb3IgcmMyCisKKzIwMDktMDgtMjYgMTc6MzggIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDgtMjYgMTc6MjkgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDgtMjYgMTc6MjggIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHVwZGF0ZWQgYmFzZWQgb24gbmV3IFNGIHVwbG9hZCBtZXRob2RzOyBubyBsb25nZXIgYXMgYXV0b21hdGFibGUKKworMjAwOS0wOC0yNiAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggZnJvbSBKYW4gdG8gZW5kbGVzcyBsb29wIGluIGRlZmF1bHQgcm91dGVzCisgICBvbiBsaW51eAorCisyMDA5LTA4LTI2IDE3OjI1ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oOgorCisgICBhcHBseSBwYXRjaCBmcm9tIEphbiB0byBmaXggQysrIHdyYXBwZXIKKworMjAwOS0wOC0yNiAxNDo1MyAgZHRzMTIKKworICAgKiBsb2NhbC9NYWtlZmlsZS5pbiwgbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIEluaXRpYWwgc3RhYiBhdCBhIG1pbmltYWwtaGVscGVyIChyYXcpIHRhYmxlIHRlbXBsYXRlLAorICAgbGVhdmluZyBtb3N0IG9mIHRoZSB3b3JrIHRvIHRoZSB1c2VyLXByb3ZpZGVkIE1JQiBoYW5kbGVyLgorCiAyMDA5LTA4LTI2IDE0OjUwICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKQEAgLTM1OTEsNiArNDk2MjgsMTEzIEBACiAgICBkdWUgdG8gMTUtLzMxLWJpdCBtYXNraW5nIHdoZW4gc2VsZWN0aW5nIHJlcXVlc3QgSURzLiBJZGVudGlmaWVkCiAgICBieSBrcm9tZXNreS4KIAorMjAwOS0wOC0yMCAxMzozMCAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwbHVnIGxlYWtzIGluIGlwSWZTdGF0c1RhYmxlLAorICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUsIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQKKyAgIGlwRGVmYXVsdFJvdXRlclRhYmxlLgorICAgCisgICBJdCBzZWVtcyB0byBtZSB0aGUgdGFibGVzIHdlcmUgd3JvbmdseSBnZW5lcmF0ZWQgd2l0aAorICAgbTJjX2RhdGFfYWxsb2NhdGUgb3IKKyAgIHNvbWVvbmUgZm9yZ290IHRvIHJlbGVhc2UgdGhlIHVzZXIgcHJvdmlkZWQgZGF0YS4KKworMjAwOS0wOC0xMiAxNTowMCAgdGFuZGVycworCisgICAqIE5FV1M6CisKKyAgIGZpeCBsaWJ0b29sIHZlcnNpb24gaW4gTkVXUworCisyMDA5LTA4LTExIDAwOjQyICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIENoYW5nZUxvZzoKKworICAgd2hvb3BzOyBhZGQgcmVhbCBjaGFuZ2Vsb2cgZW50ZXJpZXMgZm9yIC5yYzEKKworMjAwOS0wOC0xMCAyMzoxMCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgZml4IHR5cG8gaW4gc3ZuMmNsIGxpbmUKKworMjAwOS0wOC0xMCAyMzowNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAwOS0wOC0xMCAyMTozMiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOC0xMCAyMToyMSAgaGFyZGFrZXIKKworICAgKiAgZGlzdC9tYWtlcmVsZWFzZS54bWwsIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCAgIAorICAgICAgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA4LTA3IDEwOjMyICBkdHMxMgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIENvcnJlY3QsIGNvbnNvbGlkYXRlLCBjbGFyaWZ5IGFuZCBjbGVhbnVwIHRoZSBjYXRhbG9nIG9mIGN1cnJlbnQKKyAgIGNoYW5nZXMuCisKKzIwMDktMDgtMDYgMDc6NTcgIGR0czEyCisKKyAgICogRkFROgorCisgICBFeHBhbmQgb24gZXhlYyB2cyBleHRlbmQuCisKIDIwMDktMDgtMDUgMjA6MDcgIGR0czEyCiAKICAgICogIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCkBAIC0zNjA4LDYgKzQ5NzUyLDIyIEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMjgyMjMzNzogRml4IG1lbW9yeSBsZWFrIGluCiAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZQogCisyMDA5LTA4LTA1IDE1OjE2ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmM6CisKKyAgIEZpeCBtZW1vcnkgbGVhayBpbiBOZXRUb01lZGlhVGFibGUuCisgICBXaGVuIGRlbGV0aW5nIHJvdyBjb250ZXh0LCBkZWxldGUgYWxzbyBhc3NvY2lhdGVkIGRhdGEuCisKKzIwMDktMDgtMDUgMTU6MTUgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBGaXggbWVtb3J5IGxlYWsgaW4gTmV0VG9NZWRpYVRhYmxlLgorICAgVGhlIGNvbnRhaW5lciB1c2VkIHRvIHRyYWNrIGVudHJpZXMgdG8gZGVsZXRlIGZyb20gY2FjaGUgc2hvdWxkCisgICBiZSByZWxlYXNlZCB3aGVuIGl0J3Mgbm90IG5lZWRlZC4KKwogMjAwOS0wOC0wNSAxNToxMiAganNhZnJhbmVrCiAKICAgICogCkBAIC0zNjQyLDMyICs0OTgwMiwxOTIgQEAKICAgIGFzIHdlbGwgYXMgYSBsYXJnZXIgZ3JvdXAuCiAgICBBbHNvIGFkZHJlc3NlcyBidWcgMjE1MDI4NQogCisyMDA5LTA4LTA0IDIxOjE2ICBtYWdmcgorCisgICAqIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgc25tcGxpYjogZnJvbSAiQmFydCB2YW4gQXNzY2hlICYgTWFnbnVzIEZyb21yZWlkZSI6IE1vcmUgdXBkYXRlcworICAgdG8gc3RydG91bGwuYworCiAyMDA5LTA4LTA0IDEwOjU3ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBmcm9tICJNYXJjdXMgUvxja2VydCI6IGZpeCBwb3NzaWJsZSBjcmFzaCB3aGVuCisgICBDSEFOR0VTOiBzbm1wZDogZnJvbSAiTWFyY3VzIFLniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLXniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy05p6La2VydCI6IGZpeCBwb3NzaWJsZSBjcmFzaCB3aGVuCiAgICA2NC1iaXQgY291bnRlcnMgaW4gaXBTeXN0ZW1TdGF0c1RhYmxlIGdldCBiaWdnZXIgdGhhbiAyXjMyCiAKLTIwMDktMDctMjcgMTI6MTMgIGhhcmRha2VyCisyMDA5LTA4LTAzIDE5OjI3ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjgyNzcyMjogZnJvbSAiQmFydCBWYW4gQXNzY2hlIjogSW1wcm92ZQorICAgc3RydG91bGwgdG8gYmUgbGVzcyBNU1ZDLXNwZWNpZmljCisKKzIwMDktMDgtMDMgMTg6MzggIG1hZ2ZyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICByZW1vdmUgYW4gb2Jzb2xldGUgbWFudWFsIHBhZ2UgZnJvbSB0aGUgc2V0IG9mIGZpbGVzIHRoYXQgc2hvdWxkCisgICBiZSBpbnN0YWxsZWQKKworMjAwOS0wNy0yNyAxMjo0MSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMDktMDctMjcgMTI6MTEgIGhhcmRha2VyCiAKICAgICogbWFuL25ldHNubXBfQ29udGFpbmVyX2l0ZXJhdG9yLjM6CiAKLSAgIHJlbW92ZSBvdXRkYXRlIGNhc2UtY29uZmxpY3RpbmcgbWFudWFsIHBhZ2UKKyAgIHJlbW92ZSBhbiBvYnNvbGV0ZSBtYW51YWwgcGFnZQogCi0yMDA5LTA3LTI3IDEyOjA2ICBoYXJkYWtlcgorMjAwOS0wNy0yNyAxMjowMyAgaGFyZGFrZXIKIAogICAgKiBwZXJsL1NOTVAvdC9idWxrd2Fsay50OgogCiAgICBDSEFOR0VTOiBmcmVlYnNkOiBwYXRjaCBmcm9tIENlemFyeSBNb3JnYSB0byBmaXggYSBtYWtlIHRlc3Qgb24KICAgIGZyZWVic2QKIAorMjAwOS0wNy0yNyAxMjowMiAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wNy0yNyAxMTo1MiAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBORVdTLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wNy0yNyAwODozOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4OgorCisgICByZXZlcnQgYWNjaWRlbnRpYWxseSBhcHBsaWVkIHBhdGNoCisKKzIwMDktMDctMjcgMDg6MzcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXgsIHRlc3RpbmcvdGVzdHMvVDM2MGR0bHN1ZHAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LmNlcnQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LnByaXYsIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLmNlcnQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5wcml2OgorCisgICBhZGRlZCBhIHRlc3QgY2FzZSBmb3IgdWRwL2R0bHMKKworMjAwOS0wNy0yNyAwODozNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGRvbid0IHJlcXVpcmUgYSBzZXNzaW9uIHRvIGNhcnJ5IGEgc2VjTmFtZQorCisyMDA5LTA3LTI2IDIxOjM0ICBhbGV4X2IKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgV2luMzI6IE1TVkMgNiBjb21waWxlIGZpeGVzIGZvciBXb3Jrc3BhY2UgYnVpbGQuCisKKzIwMDktMDctMjYgMTg6MjAgIGFsZXhfYgorCisgICAqICBSRUFETUUud2luMzIsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc3RydG91bGwuYywgICAKKyAgICAgIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdCwgd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwsICAgCisgICAgICB3aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2ksIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgLUFkZGVkIHN0cnRvdWxsIGZ1bmN0aW9uIGFuZCBjb25maWd1cmUgY2hlY2sgZm9yIHN5c3RlbXMgd2l0aG91dAorICAgaXQgc3VjaCBhcyBXaW4zMiBNU1ZDIDYKKyAgIC1XaW4zMjogTVNWQyA2IGNvbXBpbGUgZml4ZXMgLSByZXF1aXJlcyBuZXcgc3RydG91bGwuYyBmaWxlCisgICAtV2luMzI6IE5ldyBidWlsZC1iaW5hcnkgc2NyaXB0IHRvIHNpbXBsaWZ5IGJ1aWxkaW5nIHRoZSBXaW5kb3dzCisgICBiaW5hcnkgcGFja2FnZS4KKworMjAwOS0wNy0yNSAwNTozMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdDoKKworICAgTWFrZSBzdXJlIGEgbWVzc2FnZSBpcyB3cml0dGVuIGlmIHRoZSByZWxldmFudCB0YWJsZSBpcyBtaXNzaW5nLgorCiAyMDA5LTA3LTIzIDIxOjI5ICBhbGV4X2IKIAogICAgKiBSRUFETUU6CiAKICAgIFVwZGF0ZSBlbWFpbCBhZGRyZXNzIGluIFJFQURNRS4KIAorMjAwOS0wNy0yMyAwMTowNyAgYWxleF9iCisKKyAgICogIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKKworICAgV2luMzIgTVNWQyAyMDA4KyBmaXhlcy4KKworMjAwOS0wNy0yMyAwMDo1NSAgYWxleF9iCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgorCisgICBXaW4zMiBNU1ZDIDIwMDUrIGJ1aWxkIGZpeGVzLiBUaGFua3MgdG8gQmFydCBWYW4gQXNzY2hlLgorCisyMDA5LTA3LTIxIDEyOjIyICBkdHMxMgorCisgICAqICBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgbG9jYWwvbWliMmMucm93LmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIEFkZCBzaW1wbGUgZGVidWcgb3V0cHV0IHRvIG1pYjJjIHRlbXBsYXRlcy4KKwogMjAwOS0wNy0yMSAxMjoxMyAgZHRzMTIKIAogICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CkBAIC0zNjg2LDEyICs1MDAwNiw1MiBAQAogCiAgICBVcGRhdGVzIHRvIENPRElORyBzZWN0aW9uLgogCisyMDA5LTA3LTIwIDExOjA5ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmg6CisKKyAgIEFkZCBtaXNzaW5nIGhlYWRlciBmaWxlIGZyb20gcGF0Y2ggIzIwNTMyNzMuCisKIDIwMDktMDctMTkgMTU6MDkgIGR0czEyCiAKICAgICogRkFROgogCiAgICBVcGRhdGVzIHRvIENPTVBJTElORyBzZWN0aW9uLgogCisyMDA5LTA3LTE2IDEyOjM4ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYzoKKworICAgQWRkIElQdjYgb2N0ZXQgY291bnRlcnMuCisgICBOZXcgTGludXgga2VybmVscyAoZS5nLiAyLjYuMzEtcmMyLCBtYXliZSBzb21lIGVhcmxpZXIpIHByb3ZpZGUKKyAgIGNvdW50ZXJzIGZvcgorICAgaW5jb21pbmcvb3V0Z29pbmcgSVB2NiB0cmFmZmljIGZvciBpcFN5c3RlbVN0YXRzVGFibGUgYW5kCisgICBpcElmU3RhdHNUYWJsZS4KKworMjAwOS0wNy0xNSAyMjo0NiAgdGFuZGVycworCisgICAqIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXg6CisKKyAgIHB1dCB0ZW1wb3JhcnkgZGF0YSB0byB3aGVyZSB0aGV5IGJlbG9uZworCisyMDA5LTA3LTExIDIxOjUwICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlOgorCisgICByZWdlbmVyYXRlIGNvbmZpZ3VyZQorCisyMDA5LTA3LTExIDIxOjA0ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIGJ1aWxkIGZpeCAoZS5nLiBmb3IgRnJlZUJTRCk6IGFkanVzdCBrdm0gY29uZmlndXJlIHRlc3RzCisKKzIwMDktMDctMTAgMTI6MzUgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ2hlY2sgSVB2NiBwb3J0IHJhbmdlcyBpbiB0aGUgc2FtZSB3YXkgYXMgSVB2NCBwb3J0cyBhcmUgY2hlY2tlZC4KKwogMjAwOS0wNy0xMCAwNzo0NiAganNhZnJhbmVrCiAKICAgICogCkBAIC0zNzAyLDYgKzUwMDYyLDQzIEBACiAgICBBbHNvIGZpeCB0aGUgZGVmYXVsdCB0eXBlIGZvXkNBU05fSVBBRERSRVNTIGluIG1pYjJjLCBzbyB0aGUKICAgIGlwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMgY2FuIGJlIHNhZmVseSByZWdlbmVyYXRlZC4KIAorMjAwOS0wNy0wOSAyMzo0MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4OgorCisgICBjbGVhbnVwIG9mIHRlc3RpbmcgY2FzZXMgdG8gcmVtb3ZlIGRvdWJsZSBpbmNsdWRlIGFuZCBkb3VibGUKKyAgIGV4cG9ydHMKKworMjAwOS0wNy0wOSAyMzowNyAgdGFuZGVycworCisgICAqIHRlc3RpbmcvdGVzdHMvVDMwMHVkcDoKKworICAgYmUgY29uc2lzdGVudCB3aXRoIHRoZSBUQ1AvSVB2NCB0ZXN0CisKKzIwMDktMDctMDkgMjI6MTggIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvU3RyYW5zcG9ydCwgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzk5YWxpYXM6CisKKyAgIG5ldyB0ZXN0cyBmb3IgdGVzdGluZyBkZWZpbmVkIHRyYW5zcG9ydHMKKworMjAwOS0wNy0wOSAyMjoxNyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1RFU1RDT05GLnNoLCB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6CisKKyAgIGEgQ09ORklHQVBQIG1hY3JvIGZvciBhZGRpbmcgc3R1ZmYgdG8gc25tcC5jb25mCisKKzIwMDktMDctMDggMTU6MTIgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBGaXggZ2V0aG9zdGJ5YWRkciBwYXJhbWV0ZXIsIG5ldHNubXBfdWRwX2ZtdGFkZHIgbmV2ZXIgcmV0dXJuZWQgYQorICAgaG9zdG5hbWUuCisKIDIwMDktMDctMDcgMTU6NDYgIGpzYWZyYW5lawogCiAgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5jLCAgIApAQCAtMzcxOSwyMyArNTAxMTYsMTM2ODIgQEAKICAgIHByb2Nlc3NpbmcgLSB1X2xvbmcgY2FuIG1ha2UgcHJvYmxlbXMgb24gYmluIGVuZGlhbiA2NCBiaXQKICAgIHN5c3RlbXMKIAotMjAwOS0wNi0xNiAxNToxOSAgcnN0b3J5CisyMDA5LTA2LTI5IDEzOjUyICBoYXJkYWtlcgorCisgICAqIENIQU5HRVM6CisKKyAgIHJlbW92ZSBlbnRyeSBmb3IgYSBwYXRjaCB0aGF0IGdvdCByZXZlcnRlZAorCisyMDA5LTA2LTI1IDE1OjI0ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgTW92ZSBub24tY29yZSBkYXRhIHR5cGVzIGludG8gYSBzZXBhcmF0ZSAobGlicmFyeSBpbnRlcm5hbHMpCisgICBoZWFkZXIgZmlsZS4KKyAgIE1vdmUgdGhlIGxhcmdlX2ZkX3NldCBkYXRhIHN0cnVjdHVyZSBpbnRvIHRoaXMgaGVhZGVyIGZpbGUuCisKKzIwMDktMDYtMTggMjI6MjkgIHRhbmRlcnMKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IGFsbG93IGJ1aWxkaW5nIHdpdGggUGVybCB2ZXJzaW9ucyB0aGF0IGxhY2sKKyAgIFBFUkxfRVhJVF9ERVNUUlVDVF9FTkQKKworMjAwOS0wNi0xOCAyMjoxMyAgdGFuZGVycworCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaWYuYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IGJ1aWxkIGZpeCBmb3IgVHJ1NjQgVW5peCBhbmQgSVJJWDogbW92ZSBfWE9QRU4qCisgICBkZWZpbml0aW9ucyB0byB3aGVyZSB0aGV5IGFyZSBpbiA1LjQueCBhbmQgZWFybGllcgorCisyMDA5LTA2LTE4IDA2OjAyICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDbGVhbiB1cCAtLXdpdGgtbmwgY29uZmlndXJhdGlvbgorICAgKiAgTW92ZSB0aGUgX0FSR19XSVRIIHRvIGNvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlICAyMDA5LTA2LTE2IDE1OjE3CisgICAgICAgcnN0b3J5CisKIAogICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOgogCiAgICBjaGVjayBmb3IgbnVsbCBwb2ludGVyIGJlZm9yZSBkZXJlZgogCisyMDA5LTA2LTE1IDIzOjUyICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIGFkZCBjb21tZW50IGV4cGxhaW5pbmcgbm90IHF1aXRlIG9idmlvdXMgbGFjayBvZiBtZW1tb3ZlCisKKzIwMDktMDYtMTUgMTk6MzIgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBSZW1vdmUgI2lmIDAgY29tbWVudGVkIGNvZGUKKwogMjAwOS0wNi0xNSAxNToyNSAgZHRzMTIKIAogICAgKiBGQVE6CiAKICAgIFVwZGF0ZXMgdG8gQUdFTlQgc2VjdGlvbi4KIAotMjAwOS0wNi0xNCAyMjowMSAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKIAotICAgcG9ydGFiaWxpdHkgZml4IChzeW5jIHdpdGggNS41KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42LnJjMSAtPiBWNS42LnJjMgorCisyMDEwLTA5LTA0IDAxOjU3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wOS0wNCAwMDo1OSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAxMC0wOS0wMyAyMjoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggdGxzdGNwIHBhcnNpbmcgb2YgaG9zdCBuYW1lcy4KKworMjAxMC0wOS0wMyAyMjoxMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYzoKKworICAgY2hlY2sgdGhlIHJldHVybiBjb2RlIG9mIGZnZXRzIGFuZCBmb3BlbiBiZWZvcmUgaW5zZXJ0aW5nIHRoZQorICAgcmVzdWx0cy4KKworMjAxMC0wOS0wMyAyMjoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgUGF0Y2ggZnJvbSB0YW5kZXJzIHRvIGZpeCBicm9rZW4gYWxhcm1zIGFmdGVyIHRoZSBwcmV2aW91cworICAgcmUtZW50cmFudCBwYXRjaAorCisyMDEwLTA5LTAzIDIyOjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaCAzMDU4NjQ1OiBmcm9tIGpvcmlzZXNhdHVybnVzOiBtb2RpZmllZAorICAgdmVyc2lvbiBvZiB0aGUgcGF0Y2ggdG8gdXNlIE1TR19ET05UV0FJVCBmb3IgdGhlIHVuaXggZG9tYWluCisgICBzb2NrZXQKKworMjAxMC0wOS0wMyAyMTo1NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNTgxNDA6IGZyb20gdGFrZXZvczogY2hlY2sgdGhhdCBpbm9kZSBpcworICAgbm9uLXplcm8KKworMjAxMC0wOS0wMyAyMTo1MCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDMwNTM0Mjg6IGZyb20gdGFrZXZvczogZml4CisgICBnZXRfcGlkX2Zyb21faW5vZGUgd2hlbiB0aGUgaW5vZGUgaXMgbm90IGZvdW5kLgorCisyMDEwLTA5LTAzIDIwOjIwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVtb3ZlIHRoZSBkdXBsaWNhdGUgcmV0dXJuIGJlZm9yZSB0aGUgZXJyb3IgY29kZXMgZ2V0IHNldC4KKworMjAxMC0wOS0wMSAxODowNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBMb2cgYmVmb3JlIHJldHVybmluZy4KKworMjAxMC0wOS0wMSAwMjo0MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgVExTIHNlbmRfbm90aWZ5IG9uIGNsb3N1cmUgYW5kIHNvbWUgbWVtb3J5IGNsZWFuLXVwIHBhdGNoZXMKKworMjAxMC0wOC0zMSAxNzo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIE9ubHkgcHJpbnQgdGhlIHNlY3VyaXR5L2NvbnRleHQgRW5naW5lSUQgbWlzbWF0Y2ggbm90ZSB1bmRlciBVU00KKworMjAxMC0wOC0yNSAxNToxMyAgcnN0b3J5CisKKyAgICogQ0hBTkdFUzoKKworICAgcmVtb3ZlIHJlZmVyZW5jZSB0byByZXZlcnRlZCBwYXRjaCAzMDQyNzY1CisKKzIwMTAtMDgtMjUgMTU6MTMgIHJzdG9yeQorCisgICAqIGFjY29uZmlnLmg6CisKKyAgIGFkZCBub3RlIG9uIHdoZXJlIHRvIGZpbmQgY29udGVudCB1c2VkIHRvIGdlbmVyYXRlCisgICBuZXQtc25tcC1jb25maWcuaC5pbgorCisyMDEwLTA4LTI1IDAyOjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIHJldmVydCByMTkzNDIsIHBhdGNoIDMwNDI3NjUsIHdoaWNoIGJyb2tlIGNsaWVudCB0Y3AgZGlzY29ubmVjdAorICAgaGFuZGxpbmcKKworMjAxMC0wOC0yNSAwMjo0NSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IG1vcmUgY29kZSBicm9rZW4gYnkgJ2NvbXBpbGVyIHdhcm5pbmcgZml4JyBpbiByMTkxNzkKKworMjAxMC0wOC0yNSAwMjo0NSAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgY2hlY2sgZm9yIGNvbmYgZXJyb3JzIGFmdGVyIGFnZW50IHN0YXJ0dXA7IGVuYWJsZSBsb2dUaW1lc3RhbXA7CisgICBtYWtlIHN1cmUKKyAgIGFsbCBjZXJ0IG5hbWUvdGFncyBhcmUgdW5pcXVlCisKKzIwMTAtMDgtMjQgMjE6MDQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpeCBlcnJvciBzdHJpbmcgdG8gZGlzY3VzcyB0aGUgcmlnaHQgZmFpbGVkIG9wZW5zc2wgbmV3CisgICBpbnZvY2F0aW9uCisKKzIwMTAtMDgtMjQgMDU6MzcgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdXNtLmM6CisKKyAgIENIQU5HRVM6IHNubXB1c206IENvcnJlY3QgaWZkZWZzLCByZW1vdmUgZGVhZCB2YXJpYWJsZXMuCisKKwkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNi5wcmUzIC0+IFY1LjYucmMxCisKKzIwMTAtMDgtMTkgMjE6MTEgIGhhcmRha2VyCisKKyAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDgtMTkgMjE6MTAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaDoKKworICAgLy8gLT4gQyBjb21tZW50cworCisyMDEwLTA4LTE5IDIwOjM2ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA4LTE5IDIwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0ggMzA0Mjc2NTogZnJvbSBtZWhhZjogbWFrZQorICAgc25tcF9zeW5jaF9yZXNwb25zZV9jYigpIHJlLWVudHJhbnQKKworMjAxMC0wOC0xOSAyMDoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgdHVybiBvZmYgY29va2llIGV4Y2hhbmdlcyB1bnRpbCBhIGNvbXBsZXRlIGNvZGUgc2V0IGNhbiBiZQorICAgd3JpdHRlbiB0byBzdXBwb3J0IGl0IGJhc2VkIG9uIHRoZSByZXF1aXJlZCBmdW5jdGlvbiBjYWxsYmFja3MKKworMjAxMC0wOC0xNyAxODozMSAgcnN0b3J5CisKKyAgICogYWdlbnQvc25tcGQuYzoKKworICAgYWRkIG1pc3NpbmcgY2FsbCB0byBzdG9yZSBwZXJzaXN0ZW50IGRhdGEgYXMgbmVlZGVkCisKKzIwMTAtMDgtMTcgMTg6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHdoZW4gZGlzcGxheWluZyBhIGJ5dGUgYXMgc2luZ2xlIGRpZ2l0IGhleAorICAgdmFsdWUsIGRlZmF1bHQgdG8KKyAgIHByZWZpeGluZyB3aXRoIDAgdW5sZXNzIHRoZXJlIGlzIGEgc2VwZXJhdG9yIG9yIGFkZGl0aW9uIGhpbnQKKyAgIGRhdGEKKworMjAxMC0wOC0xNyAxMDozMSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXB1c20uYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGFuIHVudXNlZCBsYWJlbCB0aGF0IHdhcyB0cmlnZ2VyZWQKKyAgIHdoZW4KKyAgIGNvbXBpbGluZyB3aXRob3V0IFNTTCBzdXBwb3J0LgorCisyMDEwLTA4LTE2IDIzOjExICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDI3OTAyNDk6IGZyb20gd2lsbHB3aWxscDogcmVkdWNlIGNhY2hlIHRpbWUKKyAgIGZvciB0aGUgaWZ0YWJsZSB0byAzc2Vjb25kcyB0byBpbmNyZWFzZSBhY2N1cmFjeQorCisyMDEwLTA4LTE2IDE2OjI2ICBoYXJkYWtlcgorCisgICAqIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54czoKKworICAgQ0hBTkdFUzogcGVybDogcGF0Y2ggMzA0NjM3MTogZnJvbSBjaHJpc3RvcGhiNDogRml4IG1lbW9yeSBsZWFrCisgICBpbiBTTk1QdjEgdHJhcCBoYW5kbGluZy4KKworMjAxMC0wOC0xNiAxNjowMyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDI4MjU2NTM6IGZyb20gYnJ1NWNlOiBmaXggc2VuZG1haWwuY2YKKyAgIHBhcnNpbmcgaW4gY2VydGFpbiBjb25kaXRpb25zCisKKzIwMTAtMDgtMTYgMTA6MTYgIGR0czEyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICBCdWlsZCBuZXRzbm1wX2FnZW50X2FwaS4zIG1hbiBwYWdlIGZyb20gdGVtcGxhdGUKKworMjAxMC0wOC0xNiAwOToyMCAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI5MTEzNjE6IERvY3VtZW50YXRpb24gKFByb3ZpZGVkIGJ5IFRvbWFzegorICAgTGlzKQorCisyMDEwLTA4LTE2IDA4OjA2ICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMTM2MTogUmUtb3JkZXIgY29kZSB0byBncm91cCByZWxhdGVkCisgICBmdW5jdGlvbnMgdG9nZXRoZXIKKworMjAxMC0wOC0xNiAwNzo0MiAgZHRzMTIKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDI5OTUwOTg6IEZpeCBjcmVhdGlvbiBvZiBTTk1QdjMgc2Vzc2lvbnMKKyAgIHdpdGggQVBJX1NJTkdMRQorCisyMDEwLTA4LTE0IDE2OjMwICBkdHMxMgorCisgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkxMTM2MTogUmVtb3ZlIHJlZHVuZGFudCB2YXJpYWJsZXMKKworMjAxMC0wOC0xNCAxNjoyMyAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9oYW5kbGVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjkwNDkwMDogRG9jdW1lbnRhdGlvbiBwbHVzIGFzc29ydGVkCisgICBoYW5kbGVyIGNvZGUgZml4ZXMKKworMjAxMC0wOC0xNCAwOToyOCAgZHRzMTIKKworICAgKiAgbWFuL01ha2VmaWxlLmluLCBtYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9zbm1wX2FsYXJtLjMuZGVmOgorCisgICBSZXN0b3JlIGFnZW50IEFQSSBtYW4gcGFnZQorICAgRG9uJ3QgdHJ5IHRvIGV4dHJhY3QgbXVsdGlwbGUgbWFuIHBhZ2UgbGlua3MgcGVyIGxpbmUKKyAgICh3aGljaCBydW5zIGludG8gcHJvYmxlbXMgd2l0aCBPUy1zcGVjaWZpYyBsaW5lIGVuZGluZ3MpLgorICAgSW5zdGVhZCwgZW5zdXJlIHRoZSBtYW4gcGFnZSBOQU1FIHNlY3Rpb24gbGlzdHMgb25lCisgICByb3V0aW5lIHBlciBsaW5lCisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogbWFuL01ha2VmaWxlLmluOgorCisgICBmaXggYnJva2VuIE1ha2VmaWxlIGFmdGVyIG1hbiBwYWdlIG1vdmVzCisKKzIwMTAtMDgtMTMgMjM6NTAgIGhhcmRha2VyCisKKyAgICogbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0LCBtaWJzL3JmY2xpc3Q6CisKKyAgIHVwZGF0ZWQgVExTIE1JQiB0byBjdXJyZW50IGNvcHkKKworMjAxMC0wOC0xMyAyMzo1MCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHJlcGxhY2VkIFJGQyBjb21tZW50IG51bWJlcgorCisyMDEwLTA4LTEzIDIzOjUwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgsIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBwYXRjaDogMzA0Mjc3MDogZnJvbSBtZWhhZjogTWFkZSBydW5fYWxhcm1zKCkKKyAgIHJlZW50cmFudAorCisyMDEwLTA4LTEzIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAzMDQ0NTEyOiBmcm9tIHBoaWx3ZWJzdGVyOiBmaXggc3lzb2JqZWN0aWQKKyAgIGRpcmVjdGl2ZS4KKworMjAxMC0wOC0xMyAxOTowMCAgcnN0b3J5CisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXg6CisKKyAgIHVzZSAxMjcuMC4wLjEgaW5zdGVhZCBvZiBsb2NhbGhvc3QgYXMgZGVmYXVsdCBTTk1QX1RFU1RfREVTVCBzbworICAgVExTIHRlc3RzIHdvcmsKKworMjAxMC0wOC0xMyAxODo1MCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGltcGxlbWVudGVkIGEgZml4IGZvciB0aGUgaXNzdWUgcmVwb3J0ZWQgaW4KKyAgIHBhdGNoICMzMDQyNzcwLiBDcmVhdGVkIGEgc25tcF9zZWxlY3RfaW5mb19mbGFncyBmdW5jdGlvbiwgYW5kCisgICBzaW1pbGFyLCB0aGF0IGFsbG93IGZvciBhbGFybXMgdG8gbm90IGJlIHJ1bi4gVGhpcyBpcyB0aGVuIHVzZWQKKyAgIGluIHRoZSBzeW5jaF9yZXNwb25zZSBmdW5jdGlvbnMgdG8gYXZvaWQgMTAwJSBDUFUgbG9vcHMKKworMjAxMC0wOC0xMyAxODo1MCAgaGFyZGFrZXIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAgYXBwcy9zbm1wdHJhcGQuYzoKKworICAgbWFrZSBzbm1wdHJhcGQgcmVnaXN0ZXIgdGhlIGNlcnR0b3NlY25hbWUgdGFibGUgaW4gdGhlIGFnZW50eAorICAgcmVnaXN0cmF0aW9ucworCisyMDEwLTA4LTEzIDE4OjQ5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL21pYjJjLmNvbmY6CisKKyAgIG1pbm9yIHdvcmRpbmcgYWRkaXRpb25zCisKKzIwMTAtMDgtMTMgMTU6MDQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfYWl4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYzoKKworICAgQ0hBTkdFUzogYWl4OiBQQVRDSDogMjg4NjU5ODogZnJvbSBleHNuYWZ1OiBIZWFkZXIgZml4ZXMgZm9yCisgICBjb21waWxpbmcgb24gQUlYNgorCisyMDEwLTA4LTEzIDE1OjA0ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaDoKKworICAgTkVXUzogcG9ydHM6IFBBVENIOiAyODM2ODk1OiBmcm9tIHNlYW5ib3VkcmVhdTogc3VwcG9ydCBmb3IgUU5YNgorCisyMDEwLTA4LTEzIDE0OjMzICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiwgICAKKyAgICAgIG1hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmOgorCisgICAnZW5mb3JjZSBuZXRzbm1wIHByZWZpeGVzCisKKzIwMTAtMDgtMTMgMTQ6MjkgIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYsIG1hbi92YXJiaW5kX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI5ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmLCBtYW4vc25tcF90cmFwX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI4ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmLCBtYW4vc25tcF9zZXNzX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI4ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZiwgbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjggIGR0czEyCisKKyAgICogbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYsIG1hbi9zZXNzaW9uX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjI3ICBkdHMxMgorCisgICAqIG1hbi9uZXRzbm1wX3BkdV9hcGkuMy5kZWYsIG1hbi9wZHVfYXBpLjMuZGVmOgorCisgICBlbmZvcmNlIG5ldHNubXAgcHJlZml4CisKKzIwMTAtMDgtMTMgMTQ6MjcgIGR0czEyCisKKyAgICogbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9uZXRzbm1wX21pYl9hcGkuMy5kZWY6CisKKyAgIGVuZm9yY2UgbmV0c25tcCBwcmVmaXgKKworMjAxMC0wOC0xMyAxNDoyNyAgZHRzMTIKKworICAgKiBtYW4vY29uZmlnX2FwaS4zLmRlZiwgbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZjoKKworICAgZW5mb3JjZSBuZXRzbm1wIHByZWZpeAorCisyMDEwLTA4LTEzIDE0OjIwICBkdHMxMgorCisgICAqIE1ha2VmaWxlLmluLCBkb3h5Z2VuLmNvbmY6CisKKyAgIERvbid0IGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgbWFuIHBhZ2VzCisKKzIwMTAtMDgtMTMgMTQ6MTggIGR0czEyCisKKyAgICogIG1hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMywgbWFuL3NubXBfY2xvc2UuMywgbWFuL3NubXBfZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX2ZyZWVfcGR1LjMsIG1hbi9zbm1wX29wZW4uMywgbWFuL3NubXBfcGVycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9yZWFkLjMsIG1hbi9zbm1wX3NlbGVjdF9pbmZvLjMsIG1hbi9zbm1wX3NlbmQuMywgICAKKyAgICAgIG1hbi9zbm1wX3Nlc3NfYXN5bmNfc2VuZC4zLCBtYW4vc25tcF9zZXNzX2Nsb3NlLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX2Vycm9yLjMsIG1hbi9zbm1wX3Nlc3NfaW5pdC4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19vcGVuLjMsIG1hbi9zbm1wX3Nlc3NfcGVycm9yLjMsICAgCisgICAgICBtYW4vc25tcF9zZXNzX3JlYWQuMywgbWFuL3NubXBfc2Vzc19zZWxlY3RfaW5mby4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19zZW5kLjMsIG1hbi9zbm1wX3Nlc3Nfc2Vzc2lvbi4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc190aW1lb3V0LjMsIG1hbi9zbm1wX3NldF9taWJfd2FybmluZ3MuMywgICAKKyAgICAgIG1hbi9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zLCBtYW4vc25tcF90aW1lb3V0LjM6CisKKyAgIFJlbW92ZSByZWR1bmRhbnQgbWFuIHBhZ2UgbGlua3MKKyAgIChTaG91bGQgYmUgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHksIGJ1dCBkb24ndCBleGlzdCBhbnkgbW9yZQorICAgYW55d2F5KQorCisyMDEwLTA4LTEzIDE0OjEzICBkdHMxMgorCisgICAqICBtYW4vTWFrZWZpbGUuaW4sIG1hbi9hZGRfbWliZGlyLjMsIG1hbi9hZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMsICAKKyAgICAgICBtYW4vZ2V0X21vZHVsZV9ub2RlLjMsIG1hbi9pbml0X21pYi4zLCBtYW4vaW5pdF9taWJfaW50ZXJuYWxzLjMsIAorICAgICAgICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMsIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGVhZi4zLCBtYW4vbmV0c25tcF9saWJyYXJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAKKyAgICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NldF9kYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCisgICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93LjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RkYXRhLjMsIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMywgbWFuL3ByaW50X2Rlc2NyaXB0aW9uLjMsIG1hbi9wcmludF9taWIuMywgIAorICAgICAgIG1hbi9wcmludF9vYmppZC4zLCBtYW4vcHJpbnRfdmFsdWUuMywgbWFuL3ByaW50X3ZhcmlhYmxlLjMsICAgCisgICAgICBtYW4vcmVhZF9hbGxfbWlicy4zLCBtYW4vcmVhZF9taWIuMywgbWFuL3JlYWRfbW9kdWxlLjMsICAgCisgICAgICBtYW4vcmVhZF9tb2R1bGVfbm9kZS4zLCBtYW4vcmVhZF9vYmppZC4zLCBtYW4vc2h1dGRvd25fbWliLjM6CisKKyAgIFJlbW92ZSBEb3h5Z2VuLWdlbmVyYXRlZCBtYW4gcGFnZXMsIGFuZCB0aG9zZSBsaW5raW5nCisgICBpbmRpdmlkdWFsIHJvdXRpbmVzIHRvIHRoZSBhcHByb3ByaWF0ZSBtYW4gcGFnZS4KKyAgIChUaGVzZSBhcmUgYmV0dGVyIGdlbmVyYXRlZCBkeW5hbWljYWxseSkKKworMjAxMC0wOC0xMyAxMjoxOSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgUHJvbXB0IGZvciB3aGV0aGVyIHRvIGdlbmVyYXRlIGNhY2hpbmcgY29kZSBvciBub3QuCisKKzIwMTAtMDgtMTMgMTI6MTkgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMuY29uZjoKKworICAgUmV3b3JrIGd1aWRhbmNlIHF1ZXN0aW9ucyB3aGVuIHNlbGVjdGluZyB0aGUgYmVzdCB0YWJsZSBmcmFtZXdvcmsKKyAgIHRvIHVzZS4KKyAgIEVuc3VyZSB0YWJsZSBoYW5kbGluZyBjb2RlIGRvZXNuJ3Qgb3ZlcndyaXRlIHNjYWxhciBoYW5kbGluZworICAgY29kZS4KKyAgIENoZWNrIHRoYXQgdGhlIHN0YXJ0aW5nIHBvaW50IGlzIHN1aXRhYmxlIGZvciBNZkQgZnJhbWV3b3JrLgorCisyMDEwLTA4LTEyIDE1OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBmaXggY29kZSBicm9rZW4gYnkgJ2NvbXBpbGVyIHdhcm5pbmcgZml4JyBpbiByMTkxNzkKKworMjAxMC0wOC0xMiAxNTozOSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oOgorCisgICBmaXggdHlwbyBpbiBjb21tZW50CisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBhIGR1cGxpY2F0ZSB2YWx1ZSBjaGVjaworCisyMDEwLTA4LTExIDIyOjA4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnM6CisKKyAgIGFkZCBhIHRlc3Qgd2hlcmUgd2UgY2FuIHRydXN0IGEgQ0Etc2lnbmVkIGNlcnQgYW5kIHdlIGRvbid0IHRydXN0CisgICB0aGUgQ0EKKworMjAxMC0wOC0xMSAyMjowOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzOgorCisgICB0ZXN0IGEgZGlyZWN0bHkgbWFwcGVkIENBIGNlcnRpZmljYXRlCisKKzIwMTAtMDgtMTEgMjI6MDggIGhhcmRha2VyCisKKyAgICogbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBjaGFuZ2UgdGhlIGxhQ29uZmlnIHRvIHJlYWQtd3JpdGUgdG8gbWF0Y2ggdGhlIHBhdGNoCisKKzIwMTAtMDgtMTEgMjI6MDcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDI5MzE0NDY6IGZyb20gYWhtYWtlOiBtYWtlIHRoZSBsb2FkIGF2ZXJhZ2VzCisgICB3cml0YWJsZS4KKworMjAxMC0wOC0xMSAwNjo0MyAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYzoKKworICAgQ0hBTkdFUzogU2lsZW5jZSBzb21lIGNvbXBpbGF0aW9uIHdhcm5pbmdzIGZyb20gdGVzdCBjYXNlcy4KKworMjAxMC0wOC0wOSAyMTowOSAgbWFnZnIKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogSGFuZGxlIGVtYmVkZGVkICUncyBpbiB0aGUgcmVzdWx0IG1lc3NhZ2UuCisKKzIwMTAtMDgtMDkgMjE6MDcgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIENIQU5HRVM6IERvIG5vIGRvdWJsZSBkZWNsYXJlIHRoZSBpbmRleCB2YWx1ZXMuCisKKzIwMTAtMDgtMDUgMTE6NDkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CisKKyAgIFVwZGF0ZSAiYXV0aCoiIHVzYWdlIG1lc3NhZ2Ugd2l0aCBjb250ZXh0IHN1cHBvcnQKKworMjAxMC0wOC0wMiAyMDowOCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmM6CisKKyAgIEZpeCB0d28gc2lsbHkgbWlzdGFrZXMuCisKKzIwMTAtMDgtMDIgMTQ6MTggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jOgorCisgICBBSVggZmlsZXN5c3RlbSB0eXBlcyBhcmUgdGFnZ2VkIGFzIGludGVnZXJzLCBub3Qgc3RyaW5ncy4KKworMjAxMC0wOC0wMiAxMzo0OSAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBmaXggUGVybCBzeXN0ZW0oKSBjb25maWd1cmUgY2hlY2sgdG8gd29yayByZWxpYWJseSBvbiBzeXN0ZW1zCisgICB0aGF0IGxhY2sKKyAgIFBlcmwKKworMjAxMC0wOC0wMiAxMTowOCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBtYWRlIGl0IHBvc3NpYmxlIHRvIGFuYWx5emUgYWxsIGNvZGUgY292ZXJlZCBieQorICAgdGhlIHJlZ3Jlc3Npb24gdGVzdHMgd2l0aCBhIGR5bmFtaWMgYW5hbHl6ZXIsIGF0IGxlYXN0IGlmIHRoYXQKKyAgIGFuYWx5emVyIHN1cHBvcnRzIGZvbGxvd2luZyBjaGlsZCBwcm9jZXNzZXMuIEFuIGV4YW1wbGU6CisgICAKKyAgIHJtIC1yZiAvdG1wL3NubXAtdGVzdC0qCisgICBtYWtlIC1zCisgICBTTk1QX1NBVkVfVE1QRElSPXllcyBEWU5BTUlDX0FOQUxZWkVSPSJ2YWxncmluZAorICAgLS10cmFjZS1jaGlsZHJlbj15ZXMgLS10cmFjay1vcmlnaW5zPXllcyIgbWFrZSAtcyB0ZXN0CisgICBncmVwIC1pIHVuaW5pdGlhbGlzZWQgL3RtcC9zbm1wLXRlc3QtKiB8IHhhcmdzIGxlc3MKKworMjAxMC0wOC0wMiAxMTowMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmM6CisKKyAgIEZpeGVkIHRoZSBmb2xsb3dpbmcgdHdvIFZhbGdyaW5kIGNvbXBsYWludHM6CisgICAKKyAgIENvbmRpdGlvbmFsIGp1bXAgb3IgbW92ZSBkZXBlbmRzIG9uIHVuaW5pdGlhbGlzZWQgdmFsdWUocykKKyAgIGF0IDB4NkQ3MDJFMDogdmZwcmludGYgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NkQ5OUQxMTogdnNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZEN0E0MTI6IHNucHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZFMTQ0Mzc6IGluZXRfbnRvYSAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg1RTVFMjE5OiBuZXRzbm1wX2lwdjRfZm10YWRkciAoc25tcElQdjRCYXNlRG9tYWluLmM6MjE1KQorICAgYnkgMHg1RTY1NzE3OiBuZXRzbm1wX3RjcF9mbXRhZGRyIChzbm1wVENQRG9tYWluLmM6NzApCisgICBieSAweDVFNTY3RUM6IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nCisgICAoc25tcF90cmFuc3BvcnQuYzoyMjQpCisgICBieSAweDVFMjQ3OUE6IF9zZXNzX3Byb2Nlc3NfcGFja2V0IChzbm1wX2FwaS5jOjU0NDEpCisgICBieSAweDVFMjVFMzc6IF9zZXNzX3JlYWQgKHNubXBfYXBpLmM6NjAzNykKKyAgIGJ5IDB4NUUyNjFEQTogc25tcF9zZXNzX3JlYWQyIChzbm1wX2FwaS5jOjYxNDkpCisgICBieSAweDVFMjYyODI6IHNubXBfcmVhZDIgKHNubXBfYXBpLmM6NTc0MCkKKyAgIGJ5IDB4NDA0REU0OiBtYWluIChzbm1wZC5jOjEyMjcpCisgICBVbmluaXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVkIGJ5IGEgaGVhcCBhbGxvY2F0aW9uCisgICBhdCAweDRDMjcwQTU6IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzoyMzYpCisgICBieSAweDVFNjU3Mzk6IG5ldHNubXBfdGNwX2FjY2VwdCAoc25tcFRDUERvbWFpbi5jOjgyKQorICAgYnkgMHg1RTI1MzgzOiBfc2Vzc19yZWFkIChzbm1wX2FwaS5jOjU3ODYpCisgICBieSAweDVFMjYxREE6IHNubXBfc2Vzc19yZWFkMiAoc25tcF9hcGkuYzo2MTQ5KQorICAgYnkgMHg1RTI2MjgyOiBzbm1wX3JlYWQyIChzbm1wX2FwaS5jOjU3NDApCisgICBieSAweDQwNERFNDogbWFpbiAoc25tcGQuYzoxMjI3KQorICAgCisgICBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkIHZhbHVlKHMpCisgICBhdCAweDZGN0IyRTA6IHZmcHJpbnRmIChpbiAvbGliNjQvbGliYy0yLjExLjIuc28pCisgICBieSAweDZGQTREMTE6IHZzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg2Rjg1NDEyOiBzbnByaW50ZiAoaW4gL2xpYjY0L2xpYmMtMi4xMS4yLnNvKQorICAgYnkgMHg3MDFGNDM3OiBpbmV0X250b2EgKGluIC9saWI2NC9saWJjLTIuMTEuMi5zbykKKyAgIGJ5IDB4NTZGQTIxOTogbmV0c25tcF9pcHY0X2ZtdGFkZHIgKHNubXBJUHY0QmFzZURvbWFpbi5jOjIxNSkKKyAgIGJ5IDB4NTcwMTcxNzogbmV0c25tcF90Y3BfZm10YWRkciAoc25tcFRDUERvbWFpbi5jOjcwKQorICAgYnkgMHg1NkYyN0VDOiBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZworICAgKHNubXBfdHJhbnNwb3J0LmM6MjI0KQorICAgYnkgMHg1NkYyOTRGOiBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kIChzbm1wX3RyYW5zcG9ydC5jOjI0OCkKKyAgIGJ5IDB4NTZCQzQ4Nzogc25tcF9zZXNzX2FzeW5jX3NlbmQgKHNubXBfYXBpLmM6NTIwNCkKKyAgIGJ5IDB4NTZCQzY1MTogc25tcF9hc3luY19zZW5kIChzbm1wX2FwaS5jOjQ5OTgpCisgICBieSAweDU2QkM2Nzc6IHNubXBfc2VuZCAoc25tcF9hcGkuYzo0OTg0KQorICAgYnkgMHg1Njk4NDQwOiBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiIChzbm1wX2NsaWVudC5jOjEwMDYpCisgICBVbmluaXRpYWxpc2VkIHZhbHVlIHdhcyBjcmVhdGVkIGJ5IGEgaGVhcCBhbGxvY2F0aW9uCisgICBhdCAweDRDMjcwQTU6IG1hbGxvYyAodmdfcmVwbGFjZV9tYWxsb2MuYzoyMzYpCisgICBieSAweDU3MDFCM0U6IG5ldHNubXBfdGNwX3RyYW5zcG9ydCAoc25tcFRDUERvbWFpbi5jOjE2MykKKyAgIGJ5IDB4NTcwMUU2RjogbmV0c25tcF90Y3BfY3JlYXRlX3RzdHJpbmcgKHNubXBUQ1BEb21haW4uYzozMDUpCisgICBieSAweDU2RjM4MDQ6IG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbAorICAgKHNubXBfdHJhbnNwb3J0LmM6NjAxKQorICAgYnkgMHg1NkYzQUNDOiBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX2NsaWVudAorICAgKHNubXBfdHJhbnNwb3J0LmM6NjY5KQorICAgYnkgMHg1NDM0NEY2OiBzdWJhZ2VudF9vcGVuX21hc3Rlcl9zZXNzaW9uIChzdWJhZ2VudC5jOjc1OCkKKyAgIGJ5IDB4NTQzNDlDODogYWdlbnR4X3Jlb3Blbl9zZXNzaW9uIChzdWJhZ2VudC5jOjg2OSkKKyAgIGJ5IDB4NTQzNEQwMDogc3ViYWdlbnRfc3RhcnR1cCAoc3ViYWdlbnQuYzo5OSkKKyAgIGJ5IDB4NTZFQUVCNzogc25tcF9jYWxsX2NhbGxiYWNrcyAoY2FsbGJhY2suYzozMzgpCisgICBieSAweDU2REU2RkI6IHJlYWRfY29uZmlncyAocmVhZF9jb25maWcuYzoxMDE4KQorICAgYnkgMHg1NkMyODdFOiBpbml0X3NubXAgKHNubXBfYXBpLmM6ODUwKQorICAgYnkgMHg0MDQ3N0I6IG1haW4gKHNubXB0cmFwZC5jOjEwNDgpCisKKzIwMTAtMDgtMDEgMDY6MTEgIGJ2YXNzY2hlCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgRml4ZWQgc3BlbGxpbmcgZXJyb3JzIHJlcG9ydGVkIGJ5IGlzcGVsbCAtbC4KKworMjAxMC0wOC0wMSAwNjowMCAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wX2VudW0uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmM6CisKKyAgIEZpeGVkIGEgdHlwbyBpbiBhIHRleHQgc3RyaW5nIGluIGEgdW5pdCB0ZXN0OiByZXN0dXJhbnQgLT4KKyAgIHJlc3RhdXJhbnQuCisKKzIwMTAtMDgtMDEgMDU6NTMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oOgorCisgICBEb2N1bWVudGVkIGJlaGF2aW9yIG9mIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCkuCisKKzIwMTAtMDctMzEgMjM6NTAgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMC5oOgorCisgICBGb2xsb3ctdXAgZm9yIHIxOTI2NjogYWRkIG1pc3NpbmcgaGVhZGVyIGZpbGUgdG8gc3VwcG9ydCBNYWMgT1MgWAorICAgMTAuNgorICAgKFNub3cgTGVvcGFyZCAtICJkYXJ3aW4xMCIpCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjYucHJlMiAtPiBWNS42LnByZTMKKworMjAxMC0wNy0zMSAyMDozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDctMzEgMjA6MjQgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMTAtMDctMzEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDctMzEgMjA6MTEgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGNoYW5nZWQgdGhlIG5hbWUgb2YgdGhlIHJlYWRtZSBzZWN0aW9uIHRvIGNhbGwgb3V0IE5FV1MtdG9vCisKKzIwMTAtMDctMzEgMjA6MTAgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgYWRkZWQgbWlzc2luZyBuZXdzIGl0ZW1zCisKKzIwMTAtMDctMzAgMTM6MDYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBweXRob246IFBBVENIIDMwMzUzMjg6IGZyb206IHN3czogY2hlY2sgdGhlIHJlc3VsdHMgb2YKKyAgIHNlc3Npb24gY3JlYXRpb24gZm9yIGEgZmFpbHVyZSBjYXNlLgorCisyMDEwLTA3LTMwIDEzOjAwICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogcGF0Y2ggMzAzNTU3ODogZnJvbSBzd3M6IGtlZXAgZXJyb3IgY29kZXMgdXAgdG8KKyAgIGRhdGUKKworMjAxMC0wNy0yOSAxNTo0OCAgZHRzMTIKKworICAgKiBjb25maWd1cmU6CisKKyAgIEFkZCBzdXBwb3J0IGZvciBNYWMgT1MgWCAxMC42IChTbm93IExlb3BhcmQgLSAiZGFyd2luMTAiKQorICAgKE9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBpcyB0aGUgc2FtZSBhcyBNYWMgT1MgWCAxMC41CisgICAoTGVvcGFyZCAtICJkYXJ3aW45IikpCisKKzIwMTAtMDctMjkgMTU6NDcgIGR0czEyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbjoKKworICAgQWRkIHN1cHBvcnQgZm9yIE1hYyBPUyBYIDEwLjYgKFNub3cgTGVvcGFyZCAtICJkYXJ3aW4xMCIpCisgICAoT24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGlzIGlzIHRoZSBzYW1lIGFzIE1hYyBPUyBYIDEwLjUKKyAgIChMZW9wYXJkIC0gImRhcndpbjkiKSkKKworMjAxMC0wNy0yOSAxNTowMyAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaDoKKworICAgUHJvdmlkZSBhIGRlZmluaXRpb24gb2YgJ3ZhX2xpc3QnIGZvciB2YXJhcmdzLWJhc2VkIEFQSXMKKworMjAxMC0wNy0yOSAxNDo1OCAgZHRzMTIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvYXV0b19ubGlzdC5jLCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBBZGQgcHJlbGltaW5hcnkgc3VwcG9ydCBmb3IgQUlYIDcKKyAgIChvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgaXMgaWRlbnRpY2FsIHRvIEFJWCA2KQorCisyMDEwLTA3LTI5IDE0OjU2ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob246CisKKyAgIERpc2FibGUgZW1iZWRkZWQgcGVybCBieSBkZWZhdWx0IG9uIGFyY2hpdGVjdXJlcyB3aGVyZQorICAgdGhpcyBzZWVtcyB0byBjYXVzZSBwcm9ibGVtcyAoSFAtVVggJiBNYWMgT1MgWCkKKworMjAxMC0wNy0yOSAxMToxMyAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEd1YXJkIGFnYWluc3QgYmxhbmsgJ2luY2x1ZGUqJyBsaW5lcy4KKyAgIEhhbmRsZSByZWxhdGl2ZSAnaW5jbHVkZUZpbGUnIHBhdGhzCisKKzIwMTAtMDctMjkgMTA6NDcgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgUmV0dXJuIGFuIGluZGljYXRpb24gb2Ygd2hldGhlciBjb25maWcgZmlsZXMgYXJlIGFjdHVhbGx5CisgICBwcm9jZXNzZWQuCisgICBSZXBvcnQgcHJvYmxlbXMgd2l0aCBmYWlsaW5nIHRvIGluY2x1ZGUgY29uZmlnIGZpbGVzLgorCisyMDEwLTA3LTI4IDE0OjQ0ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaCwgbWFuL2NvbmZpZ19hcGkuMy5kZWYsICAgCisgICAgICBtYW4vbWliX2FwaS4zLmRlZiwgbWFuL3Nlc3Npb25fYXBpLjMuZGVmLCBtYW4vdmFyYmluZF9hcGkuMy5kZWYsICAKKyAgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgQnJpbmcgbWFuIHBhZ2UgZG9jdW1lbnRhdGlvbiwgaGVhZGVyIGZpbGVzIGFuZCBXaW5kb3dzIERMTAorICAgZGVmaW5pdGlvbnMKKyAgIG9mIHRvcC1sZXZlbCBwdWJsaWMgQVBJIGNhbGxzIGludG8gbGluZSB3aXRoIGVhY2ggb3RoZXIuCisKKzIwMTAtMDctMjggMTQ6NDAgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBGaXggbWlzbmFtZWQgY29tbWVudAorCisyMDEwLTA3LTI4IDE0OjM2ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgRG9uJ3QgbWl4IFNNSXYxIGFuZCBTTUl2MiBNSUJzIGluIHRoZSBsaXN0IG9mIGRlZmF1bHQgTUlCcyB0bworICAgbG9hZC4KKyAgIFVzZSBuZXdlciBTTUl2MiB2ZXJzaW9ucyAod2hpY2ggaW5jbHVkZSBzdWl0YWJsZSBkaXNwbGF5IGhpbnRzKQorICAgcmF0aGVyIHRoYW4gdGhlIG9yaWdpbmFsIFJGQzEyMTMgTUlCICh3aGljaCBkb2Vzbid0KQorCisyMDEwLTA3LTI4IDE0OjEwICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRml4IGluZGVudGF0aW9uIGZvciAnaW5jbHVkZVNlYXJjaCcgcHJvY2Vzc2luZyBjb2RlLgorCisyMDEwLTA3LTI4IDE0OjA5ICBkdHMxMgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgRXh0ZW5kICdpbmNsdWRlJyBjb25maWcgZmlsZSBwcm9jZXNzaW5nIHRvIGNvdmVyIHRocmVlCisgICBkaWZmZXJlbnQgbW9kZXMgb2Ygd29ya2luZzoKKyAgIC0gbG9vayBmb3IgdGhlIGZpbGUgb24gdGhlIGNvbmZpZyBzZWFyY2ggcGF0aAorICAgLSBpbmNsdWRlIHRoZSBzcGVjaWZpZWQgZmlsZSBieSBuYW1lCisgICAtIGlvYWQgdGhlIGNvbnRlbnRzIG9mIHRoZSBzcGVjaWZpZWQgZGlyZWN0b3J5CisgICBVc2UgZGlmZmVyZW50IGNvbmZpZyB0b2tlbnMgdG8gZGlzdGluZ3Vpc2ggdGhlc2UgY2FzZXMuCisKKzIwMTAtMDctMjcgMTE6MTIgIGhhcmRha2VyCisKKyAgICogYWdlbnQva2VybmVsLmMsIGFnZW50L2tlcm5lbC5oLCBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoIDI5MTI1MjA6IGZyb20gbGlzdG9tOiBGcmVlIGttZW0gcmVmZXJlbmNlcworICAgb24gc2h1dGRvd24KKworMjAxMC0wNy0yNyAxMDo1NCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1NNVVgtTUlCLnR4dDoKKworICAgQ0hBTkdFUzogbWliczogcGF0Y2ggMjk3NDcxNjogZnJvbSBidmFzc2NoZTogZml4IGlzc3VlcyBpbiB0aGUKKyAgIFNNVVgtTUlCCisKKzIwMTAtMDctMjcgMDg6NTQgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBpbmNsdWRlIHRoZSBuZXcgc2VjdXJpdHktaGVkYWVycyBtb2R1bGUKKworMjAxMC0wNy0yNyAwODo1NCAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9zbm1wLWJyaWRnZS1taWI6CisKKyAgIHJlbW90ZSBkZWJ1Z2dpbmcvcHJvY2Vzc2luZyBzdGRlcnIgb3V0cHV0CisKKzIwMTAtMDctMjcgMDg6NTQgIGhhcmRha2VyCisKKyAgICogbG9jYWwvc25tcC1icmlkZ2UtbWliOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDMwMjg5MjM6IGZyb20gamVuc286IG5ldyBjb3B5IG9mIHRoZQorICAgYnJpZGdlLW1pYiBwZXJsIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDctMjcgMDg6MzEgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzLCAgIAorICAgICAgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW46CisKKyAgIHNlcGFyYXRlIG91dCB0aGUgc2VjdXJpdHkgaGVhZGVyL2luaXQgZ2VuZXJhdGlvbgorCisyMDEwLTA3LTI3IDA4OjMxICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHM6CisKKyAgIHRyYW5zcG9ydCBjb25maWd1cmUgcG9ydGlvbgorCisyMDEwLTA3LTI3IDA4OjMwICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzLCAgIAorICAgICAgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluLCAgIAorICAgICAgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbjoKKworICAgbW92ZSB0cmFuc3BvcnQgaGVhZGVyIGdlbmVyYXRpb24gdG8gYSBzZXBhcmF0ZSBmaWxlIGFuZCBjcmVhdGUgYW4KKyAgIGV4dGVybmFsIHNlcGFyYXRlIHNjcmlwdCBmb3IgZ2VuZXJhdGluZyBpdAorCisyMDEwLTA3LTI3IDA4OjE0ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogcmVwb3J0IGdmcyBmaWxlc3lzdGVtcyBpbiBoclN0b3JhZ2VUYWJsZSBhbmQKKyAgIGhyRlNUYWJsZS4KKworMjAxMC0wNy0yNCAxNTo0MiAgZHRzMTIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIERvbid0IGxvc2UgdHJhY2sgb2Ygd2hpY2ggY29uZmlnIGZpbGUgd2FzIGJlaW5nIHBhcnNlZCwKKyAgIHdoZW4gcHJvY2Vzc2luZyBhbiBpbmNsdWRlZCBjb25maWcgZmlsZS4KKyAgIEZpeGVzIGEgYnVnIHdpdGggcmVwb3J0aW5nIGxhdGVyIGNvbmZpZyBlcnJvcnMuCisKKzIwMTAtMDctMjQgMTU6MzYgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBEb24ndCBsb3NlIHRyYWNrIG9mIHdoaWNoIGNvbmZpZyBmaWxlIGlzIGJlaW5nIHBhcnNlZCwKKyAgIHdoZW4gb3BlbmluZyBhIG5ldyBTTk1QIHNlc3Npb24uCisgICBGaXhlcyBhIGJ1ZyB3aXRoIHJlcG9ydGluZyBsYXRlciBjb25maWcgZXJyb3JzLgorCisyMDEwLTA3LTIzIDAzOjEyICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBhZGQgdGhlIFRMUyBtb2R1bGVzIHRvIHRoZSBsaXN0IG9mIHRlc3QgbW9kdWxlcworCisyMDEwLTA3LTIxIDE5OjI1ICBuYmEKKworICAgKiBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYzoKKworICAgRml4IHR5cG8gaW4gZG94eWdlbiBjb21tZW50CisKKzIwMTAtMDctMjEgMTk6MjQgIG5iYQorCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6CisKKyAgIEZpeCB0eXBvIGluIHNwZWVkIGNvbXB1dGF0aW9uCisKKzIwMTAtMDctMjEgMTk6MjEgIG5iYQorCisgICAqIHNubXBsaWIvc25tcF9zZWNtb2QuYzoKKworICAgSW5jbHVkZSBnZW5lcmF0ZWQgc2VjdXJpdHktaW5jbHVkZXMuaAorCisyMDEwLTA3LTIxIDE5OjIwICBuYmEKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmg6CisKKyAgIEZpeCBpbml0IGZ1bmMgbmFtZSAoY29weS1wYXN0ZSBnbGl0Y2gpCisKKzIwMTAtMDctMjEgMTk6MTggIG5iYQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBSZW1vdmUgc3VwZXJmbHVvdXMgc2VtaWNvbG9uCisKKzIwMTAtMDctMjEgMTk6MTggIG5iYQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBPdXQgb2Ygb3JkZXIgZGVjbGFyYXRpb24KKworMjAxMC0wNy0yMSAxOToxNyAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgTG9nIGVycm9yIG9uIGZpbGUgb3BlbiBlcnJvcgorCisyMDEwLTA3LTIxIDE5OjE2ICBuYmEKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIFNwZWxpbmcgZXJyb3IKKworMjAxMC0wNy0yMSAxODoxMCAgbmJhCisKKyAgICogbWlicy9pYW5hbGlzdCwgbWlicy9yZmNsaXN0LCBtaWJzL3JmY21pYnMuZGlmZjoKKworICAgVXBkYXRlIGZvciBjdXJyZW50IFJGQ3MKKworMjAxMC0wNy0yMSAxODowOCAgbmJhCisKKyAgICogbWlicy9JQU5BaWZUeXBlLU1JQi50eHQ6CisKKyAgIEN1cnJlbnQgdmVyc2lvbiBmcm9tIElBTkEKKworMjAxMC0wNy0yMSAxODowNSAgbmJhCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIHIxNzQ5NSBlcnJvbmVvdXNseSBkaXNhYmxlZCBkaXNrSU9MQXggZm9yIGxpbnV4CisKKzIwMTAtMDctMjAgMTA6MzggIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGZpeGVkIHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgd2hlbiBnZW5lcmF0aW5nCisgICB0ZW1wLiBmaWxlIG5hbWVzCisKKzIwMTAtMDctMjAgMDc6MzIgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9zbm1wZC5jLCBhcHBzL2FnZW50eHRyYXAuYywgYXBwcy9zbm1wdHJhbnNsYXRlLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZC5jLCBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXB0cmFuc2xhdGUuMS5kZWYsICAgCisgICAgICBtYW4vc25tcHRyYXBkLjguZGVmLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBEZXNjcmliZSAtRCB1c2FnZSBhcyAtRFtUT0tFTl0gaW5zdGVhZCBvZiAtRCBbVE9LRU5dCisKKzIwMTAtMDctMTcgMTU6MTAgIHJzdG9yeQorCisgICAqIG1pYnMvU05NUC1UTFMtVE0tTUlCLnR4dDoKKworICAgdXBkYXRlIGRpc3BsYXkgaGludCB0byBzb21lIGxlc3MgYW1iaWd1b3VzIChhbmQgdGhhdCB3b3JrcyB3aXRoCisgICBvdXIgbGliKQorCisyMDEwLTA3LTE3IDA0OjEzICByc3RvcnkKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBmaXggdGVzdHNpbXBsZSBmb3IgYnVpbGRkaXIhPXNyY2RpcgorCisyMDEwLTA3LTE3IDA0OjEyICByc3RvcnkKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBhZGQgdGVzdHNpbXBsZSB0YXJnZXQKKworMjAxMC0wNy0xNiAxOToyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbGVhc2UgaXRlcmF0b3Igd2hlbiBkb25lIHdpdGggaXQKKworMjAxMC0wNy0xNSAxODoyOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogZml4IGlzc3VlIHdpdGggVVNNIHVzaW5nIGluYWN0aXZlIHVzZXJzCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIGRvbid0IHVzZSBzdHJuZHVwIChwb3J0YWJpbGl0eSkKKworMjAxMC0wNy0xNSAwMTozNSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgaW5jbHVkZSBhcHByb3ByaWF0ZSBzdHJpbmcgaGVhZGVyOyBkZWZpbmUgTkFNRV9NQVggaWYgbm90IGFscmVhZHkKKyAgIGRlZmluZWQ7CisgICBkb24ndCB1c2Ugc3RybmR1cCAocG9ydGFiaWxpdHkpCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjaGVjayB0aGF0IHNvbWUgbmV3ZXIgb3BlbnNzbCBtYWNyb3MgYXJlIGRlZmluZWQgYmVmb3JlIHVzaW5nCisgICB0aGVtOyBpbmNsdWRlCisgICBhcHByb3ByaWF0ZSBzdHJpbmcgaGVhZGVyCisKKzIwMTAtMDctMTUgMDE6MzUgIHJzdG9yeQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgY2hlY2sgZm9yIGR0bHMgc3VwcG9ydCBpbiBvcGVuc3NsCisKKzIwMTAtMDctMTUgMDE6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBkb24ndCBjb21waWxlIGR0bHMgZG9tYWluIGlmIG5vIGR0bHMgc3VwcG9ydCBpbiBvcGVuc3NsCisKKzIwMTAtMDctMTUgMDE6MzQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGlmZGVmIHByb3RlY3Rpb24gZm9yIGxhdGVyIHNoYSBhbGdvcml0aG1zCisKKzIwMTAtMDctMTUgMDE6MzQgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKKworICAgZGFyd2luIG9wZW5zc2wgZG9lcyBub3Qgc3VwcG9ydCBtb3JlIHJlY2VudCBzaGEgYWxnb3JpdGhtcworCisyMDEwLTA3LTE1IDAxOjMzICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIGZpeCB0eXBvIGluIGlmZGVmIHRlc3QKKworMjAxMC0wNy0xNSAwMTozMyAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jOgorCisgICBmaXggY3V0LW4tcGFzdGUgZXJyb3IgaW4gaW5jbHVkZWQgZmlsZSBuYW1lCisKKzIwMTAtMDctMTQgMTU6MDggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmM6CisKKyAgIGZpeCB0aGUgZml4OiBwdXQgUFJJeiBzcGVjIGluIGNvcnJlY3QgcGxhY2UKKworMjAxMC0wNy0xNCAxNTowMyAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VyczoKKworICAgc3BlY2lmeSBTTk1QIHZlcnNpb24gb24gY29tbWFuZGxpbmUKKworMjAxMC0wNy0xNCAxNTowMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIHF1aWV0IGNvbXBpbGVyCisKKzIwMTAtMDctMTQgMTU6MDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBxdWlldCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTA3LTEzIDIwOjAzICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYywKKyAgICAgICAgIGFwcHMvc25tcHRscy5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg6CisKKyAgIGluY2x1ZGUgc3NsLmggYmVmb3JlIGNlcnRfdXRpbC5oCisKKzIwMTAtMDctMTMgMjA6MDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBkZWJ1ZyBvdXRwdXQgZm9yIGZvdW5kIGNlcnQKKworMjAxMC0wNy0xMyAxNjoyNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvIGluIGxvZyBtc2cKKworMjAxMC0wNy0xMiAxMDoyNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyIGFuZCBDeWd3aW46IG1hZGUgc3VyZSB0aGF0IGFjY2Vzc2luZyB0aGUgbWliSUkKKyAgIGludGVyZmFjZXMgdGFibGUgZG9lcyBub3QgdHJpZ2dlciBvdXQtb2YtcmFuZ2UgYXJyYXkgYWNjZXNzZXMKKyAgICh3YXMgZGV0ZWN0ZWQgYnkgQm91bmRzQ2hlY2tlcikuCisKKzIwMTAtMDctMTIgMTA6MjEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmM6CisKKyAgIEZpeGVkIGEgZGFuZ2xpbmctcG9pbnRlci1yZWFkIHRoYXQgd2FzIGludHJvZHVjZWQgaW4gcjE5MDE4LiBJbgorICAgcjE5MDE4IHRoZSB0eXBlIG9mIGdyb3VwU3VidHJlZUxlbiB3YXMgY2hhbmdlZCBmcm9tIGludCB0bworICAgc2l6ZV90LCB3aGljaCBjaGFuZ2VkIHRoZSBiZWhhdmlvciBvZiB0aGUgbG9vcCAid2hpbGUKKyAgIChncm91cFN1YnRyZWVMZW4tLSA+IDApIC4uLiI6IGluc3RlYWQgb2Ygbm90IGV4ZWN1dGluZyB0aGUgbG9vcAorICAgYm9keSB3aGVuIGdyb3VwU3VidHJlZUxlbiB3YXMgbmVnYXRpdmUsIHIxOTAxOCBjYXVzZWQgdGhlIGJvZHkgb2YKKyAgIHRoYXQgbG9vcCB0byBiZSBleGVjdXRlZC4gRGV0ZWN0ZWQgYnkgcnVubmluZyBzbm1wZCB1bmRlcgorICAgQm91bmRzQ2hlY2tlciB3aGlsZSBwZXJmb3JtaW5nIGEgTUlCIHdhbGsuCisKKzIwMTAtMDctMTIgMTA6MTIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzoKKworICAgUmV2ZXJ0ZWQgcjE5MDQ3ICh3aGljaCB3YXMgd3JvbmcpIGFuZCBpbXBsZW1lbnRlZCBhIHByb3BlciBmaXgKKyAgIGZvciB0aGUgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoZXMuCisKKzIwMTAtMDctMTIgMTA6MDkgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBSZW1vdmVkIGFuIG9ic29sZXRlIGNvbW1lbnQuCisKKzIwMTAtMDctMTIgMTA6MDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oOgorCisgICBTdXBwcmVzc2VkIG1vcmUgTVNWQyBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNy0xMiAwNDo0NSAgcnN0b3J5CisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNWYXJzOgorCisgICBhZGQgY29tbWVudCB3aXRoIG9iamVjdCBuYW1lIGZvciBudW1lcmljIGlkcworCisyMDEwLTA3LTEyIDA0OjQ1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBuZXcgZnVuY3Rpb24gdG8gZ2V0IHNlcnZlcklkIGZyb20gc25tcFRsc3RtQWRkclRhYmxlIGRhdGE7IHVzZQorICAgbmV3IGFwaQorICAgdG8gY29uZmlnIHNlcnZpY2VJZCBmb3IgdHJhcCB0cmFuc3BvcnQgd2hlbiBzZW5kaW5nIHRyYXBzCisKKzIwMTAtMDctMTEgMTE6MTggIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zOgorCisgICBDSEFOR0VTOiBCVUc6IDMwMjc5MDA6IHdoZW4gY3Jvc3MtY29tcGlsaW5nIGl0IGlzIG5vdyBhc3N1bWVkCisgICB0aGF0IG1lbWNtcCgpIGlzIGF2YWlsYWJsZSBpbnN0ZWFkIG9mIGFzc3VtaW5nIHRoYXQgaXQgaXMgbm90CisgICBhdmFpbGFibGUuCisKKzIwMTAtMDctMTEgMTA6MzAgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSByMTkxOTcuCisKKzIwMTAtMDctMTAgMjA6MDAgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzeW5jIHVwIGhlbHAgb3V0cHV0IGFuZCBvcHRpb25zIHByb2Nlc3NpbmcKKworMjAxMC0wNy0wOSAxNToxMyAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIFVwZGF0ZWQgQ3lnd2luIHNlY3Rpb24gaW4gUkVBRE1FLndpbjMyLgorCisyMDEwLTA3LTA5IDE1OjEzICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBTdXBwcmVzc2VkICJpbXBsaWNpdCBjYXN0IGZyb20gaW50IHRvIHVfY2hhciIKKyAgIHdhcm5pbmdzIGdlbmVyYXRlZCBieSBNU1ZDLgorCisyMDEwLTA3LTA5IDE1OjExICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIFRlc3Rpbmc6IG1hZGUgdGhlIGRlYnVnIG91dHB1dCB0aGF0IGFwcGVhcnMgaW4gdGhlICJpbnZva2VkIiBmaWxlCisgICBldmVuIG1vcmUgdmVyYm9zZS4KKworMjAxMC0wNy0wOSAxNToxMCAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzIgTVNWQyBidWlsZCBmaXhlcy4KKworMjAxMC0wNy0wOCAxOTozMCAgbWFyegorCisgICAqICBsb2NhbC9jZXJ0Z2VuLXRlc3QucGwsIGxvY2FsL25ldC1zbm1wLWNlcnQsICAgCisgICAgICBsb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmY6CisKKyAgIGFkZHMgcGVyIGlkZW50aXR5IGNvbmZpZ3VyYXRpb24gZmlsZSBzdXBwb3J0IHNvIGRlZmF1bHRzIGNhbiBiZQorICAgY3VzdG9taXNlZCBvbiBjbWRsaW5lIHcgLWkgPGlkZW50aXR5PiAtIHNlZSBuZXQtc25tcC1jZXJ0LmNvbmYKKyAgIGZvciBleGFtcGxlcyBhbmQgc29tZSBoZWxwIGluZm8KKworMjAxMC0wNy0wOCAxMjoxNyAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAzMDAzOTgxOiBQcm90ZWN0IGFnYWluc3QgYnVmZmVyIG92ZXJmbG93CisKKzIwMTAtMDctMDggMTE6MTkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDMwMTkyNDM6IFJlZ2lzdGVyIGV4ZWNGaXggY29tcGF0YWJpbGl0eQorICAgZGlyZWN0aXZlIGNvcnJlY3RseS4KKworMjAxMC0wNy0wNyAxMDoxOSAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9zaW1wbGU6CisKKyAgIENIQU5HRVM6IEN5Z3dpbiBhbmQgTWluR1c6IHRlc3RzIFQxMTAsIFQxMTEsIFQxMTIsIFQxMjAsIFQxMjEgYW5kCisgICBUMTIyIGRvIG5vdyBwYXNzIHdoZW4gc25tcGQgaXMgYnVpbHQgd2l0aCB3aW5FeHRETEwgc3VwcG9ydAorICAgZW5hYmxlZC4KKworMjAxMC0wNy0wNiAxODo1OSAgYnZhc3NjaGUKKworICAgKiAgQ2hhbmdlTG9nLCBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgTWFkZSByZWdyZXNzaW9uIHRlc3RzIGVhc2llciB0byBkZWJ1ZyBieSBpbmNsdWRpbmcgb2sgLyBub3Qgb2sKKyAgIHN0YXR1cyBpbiB0aGUgImludm9rZWQiIGZpbGUuCisgICBTcGVsbGluZyBmaXhlczogcmVtZWJlciAtPiByZW1lbWJlcjsgc2VwZXJhdG9yIC0+IHNlcGFyYXRvci4KKworMjAxMC0wNy0wNiAxNTowNCAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIFRlc3QgVDA2NSBkb2VzIG5vdyByZWFsbHkgcGFzcyBvbiBNaW5HVy4KKworMjAxMC0wNy0wNSAxMDowMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBBZGRlZCBjdXJseSBicmFjZXMgc3VjaCB0aGF0ICd8fCcgYW5kICcmJicgYXJlIGV2YWx1YXRlZCBpbiB0aGUKKyAgIGNvcnJlY3Qgb3JkZXIuCisKKzIwMTAtMDctMDQgMTE6MzcgIGJ2YXNzY2hlCisKKyAgICogYXBwczoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDEwLTA3LTA0IDExOjM0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW46CisKKyAgIEZhbGwgYmFjayBmcm9tIFJVTkZVTExURVNUUyB0byBSVU5URVNUUyBpZiBuZWl0aGVyIFRBUDo6SGFybmVzcworICAgbm9yIFRlc3Q6Okhhcm5lc3MgaXMgYXZhaWxhYmxlLgorCisyMDEwLTA3LTA0IDExOjIxICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bjoKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIHRlc3QgbnVtYmVyIGluIC90bXAvc25tcC10ZXN0cy0kdGVzdG51bSBpcyBzZXQKKyAgIHRvIHNvbWV0aGluZyBtb3JlIG1lYW5pbmdmdWwgdGhhbiBqdXN0ICIwIi4KKworMjAxMC0wNy0wNCAxMToyMCAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBTcGxpdCBhIGxvbmcgY29tbWVudCBsaW5lLgorCisyMDEwLTA3LTA0IDEwOjUyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIEJ1ZyBmaXg6IG1hZGUgc3VyZSB0aGF0IHNyY2RpciBpcyBjb21wdXRlZCBjb3JyZWN0bHkgaWYgYGRpcm5hbWUKKyAgICQwYCA9IC4KKworMjAxMC0wNy0wMiAxNjoyNyAgYnZhc3NjaGUKKworICAgKiBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBTaW1wbGlmaWVkIHIxOTE4MSAoRml4ZWQgVExTVENQLWVuYWJsZWQgYnVpbGQgZm9yIHBsYXRmb3JtcyB3aXRoCisgICBub24tZW1wdHkgJChFWEVFWFQpLCBpLmUuIEN5Z3dpbiBhbmQgTWluR1cpLgorCisyMDEwLTA3LTAxIDE4OjE1ICBidmFzc2NoZQorCisgICAqIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIEZpeGVkIFRMU1RDUC1lbmFibGVkIGJ1aWxkIGZvciBwbGF0Zm9ybXMgd2l0aCBub24tZW1wdHkKKyAgICQoRVhFRVhUKSwgaS5lLiBDeWd3aW4gYW5kIE1pbkdXLgorCisyMDEwLTA3LTAxIDE4OjExICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHRscy5jOgorCisgICBGaXhlZCB5ZXQgYW5vdGhlciByZWNlbnRseSBpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDctMDEgMTc6NTMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgRml4ZWQgdHdvIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDctMDEgMDA6MTkgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNy0wMSAwMDoxMyAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMTAtMDctMDEgMDA6MDMgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAxMC0wNi0zMCAyMzo1NSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS42LnByZTEgLT4gVjUuNi5wcmUyCisKKzIwMTAtMDYtMzAgMjM6NTUgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMTAtMDYtMzAgMjM6NDggIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYywgcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZjoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMTAtMDYtMzAgMjM6NDUgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIG1pc3NlZCB0d28gdG9rZW5zIGluIHRoZSBtYW4gcGdhZXMKKworMjAxMC0wNi0zMCAyMzo0NSAgaGFyZGFrZXIKKworICAgKiAgbWFuL3NubXBjbWQuMS5kZWYsIG1hbi9zbm1wZC44LmRlZiwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDaXBoZXJUZXN0cywgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUc21QcmVmaXgsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgcmVuYW1lIHRoZSBkZWZYNTA5IHRva2VucyB0byBzb21ldGhpbmcgbW9yZSBmcmllbmRseTogY2xpZW50Q2VydAorICAgYW5kIHNlcnZlckNlcnQKKworMjAxMC0wNi0zMCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICB0b3AtZmlsZSBjb21tZW50IHVwZGF0ZXMKKworMjAxMC0wNi0zMCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBkb24ndCBjYWxsIGNlcnRfZmluZCB3aXRoIGEgTlVMTCBhcmd1bWVudAorCisyMDEwLTA2LTMwIDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFsbG93IGRlZiBjZXJ0cyB0byBiZSBzcGVjaWZpZWQgdXNpbmcgYSBmaWxlbmFtZQorCisyMDEwLTA2LTMwIDIzOjQxICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBmaXggc3ludGF4IGVycm9yCisKKzIwMTAtMDYtMzAgMjM6MDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgdHVybiBhIGNvdXBsZSBvZiBub24tY3JpdGljYWwgZXJyb3JzIGludG8gZGVidWcgc3RhdGVtZW50cyBwZXIKKyAgIGRpc2N1c3Npb24gd2l0aCByc3RvcnkKKworMjAxMC0wNi0zMCAyMzowMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbWFrZSB0aGUgcmVnZXhwIHBhdHRlcm4gbWF0Y2ggZm9yIHRlc3RzIHRvIHJ1biBjYXNlIGluc2Vuc2l0aXZlCisKKzIwMTAtMDYtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50LnB5OgorCisgICBpbXBvcnQgc3RkZXJyIGZyb20gc3lzLCBwZXIgZGlzY3Vzc2lvbiBvbiAtdXNlcnMKKworMjAxMC0wNi0zMCAyMjoxNyAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGQgYmFjayBpbiB0aGUgZGVmYXVsdCBwb3J0IHNwZWNpZmllcgorCisyMDEwLTA2LTMwIDIyOjE3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGVuYWJsZSBwdWxsaW5nIHRoZSBwcml2YXRlIGtleSBvdmVyIGh0dHAKKworMjAxMC0wNi0zMCAyMjoxNyAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtb3ZlIFVSTCBjb2xsZWN0aW9uIGludG8gYSBzdWIgZnVuY3Rpb24KKworMjAxMC0wNi0zMCAyMjoxNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGRlZCBhYmlsaXR5IHRvIHB1bGwgYSBjZXJ0IGZyb20gYSBVUkwKKworMjAxMC0wNi0zMCAyMjoxNiAgaGFyZGFrZXIKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggYXJndW1lbnQgYnVnIGluIHRoZSBpc191cmwgZnVuY3Rpb24KKworMjAxMC0wNi0zMCAyMDo0OSAgaGFyZGFrZXIKKworICAgKiBhcHBzL3NubXB0bHMuYzoKKworICAgcmVtb3ZlIGRlYnVnZ2luZyBjb2RlCisKKzIwMTAtMDYtMzAgMjA6MjcgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3RHRsc0NOU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExN2R0bHNDTlNlc3Npb25fc2ltcGxlOgorCisgICByZW5hbWUgZmlsZSBmb3IgY29uc2lzdGVuY3kKKworMjAxMC0wNi0zMCAyMDowMSAgcnN0b3J5CisKKyAgICogY29uZmlndXJlOgorCisgICB1cGRhdGUgZm9yIG5ldyBzbm1wdGxzIGFwcAorCisyMDEwLTA2LTMwIDIwOjAwICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICByZW1vdmUgYWNjaWRlbnRhbGx5IGNoZWNrZWQgaW50IGRlYnVnIGNvZGUKKworMjAxMC0wNi0zMCAxOTo1OSAgcnN0b3J5CisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgZGVmaW5lIE9JRHMgYmFzZWQgb24gU05NUF9UTFNfVE1fQkFTRQorCisyMDEwLTA2LTMwIDE5OjU5ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jOgorCisgICBhdXRvLXRyYW5zaXN0aW9uIGJldHdlZW4gbm90UmVhZHkvbm90SW5TZXJ2aWNlCisKKzIwMTAtMDYtMzAgMTk6NTcgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmg6CisKKyAgIGF1dG8tdHJhbnNpc3Rpb24gYmV0d2VlbiBub3RSZWFkeS9ub3RJblNlcnZpY2U7IGFkZAorICAgc25tcF9zdG9yZV9uZWVkZWQgb24gY29tbWl0CisKKzIwMTAtMDYtMzAgMTk6NTYgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVzZSBuZXcgZmluZ2VycHJpbnQgcGFyc2UvYnVpbGQgZnVuY3Rpb25zOyByZW1vdmUgYmFkIGxlbmd0aAorICAgY2hlY2s7IGF1dG8KKyAgIHRyYW5zaXRpb24gYmV0d2VlbiBub3RSZWFkeSBhbmQgbm90SW5TZXJ2aWNlCisKKzIwMTAtMDYtMzAgMTk6NTUgIHJzdG9yeQorCisgICAqIG1pYnMvVExTVE0tTUlCLnR4dDoKKworICAgcmVtb3ZlIHByZS1yZmMgbWliOyBzZWUgU05NUC1UTFMtVE0tTUlCLnR4dCBpbnN0ZWFkCisKKzIwMTAtMDYtMzAgMTk6NTQgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIGNvbnNvbGlkYXRlIG11bHRpcGxlIGZpbGVzCisKKzIwMTAtMDYtMzAgMTk6NTMgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbWFrZSBoYXNoIHR5cGUgcGFyc2Ugcm91dGluZSBwdWJsaWM7IGFkZCByb3V0aW5lcyB0byBidWlsZC9wYXJzZQorICAgU25tcFRMU0ZpbmdlcnByaW50CisKKzIwMTAtMDYtMzAgMTk6NTEgIHJzdG9yeQorCisgICAqICBNYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgYXBwcy9zbm1wdGxzLmMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgTkVXUzogc25tcHRsczogbmV3IGFwcCBmb3IgbWFuYWdpbmcgKEQpVExTIGNvbmZpZyB2aWEKKyAgIFNOTVAtVExTLVRNLU1JQiB0YWJsZXMKKworMjAxMC0wNi0zMCAxOTo1MCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEV4cHJlc3Npb25UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmM6CisKKyAgIGNhbGwgbmV3IHNubXBfc3RvcmVfbmVlZGVkKCkgZnVuY3Rpb24gYWZ0ZXIgYSBjb21taXQgaW4gdGFibGVzCisgICB0aGF0CisgICBoYXZlIHBlcnNpc3RlbnQgc3RvcmUKKworMjAxMC0wNi0zMCAxOTo0OSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV3IGV4cGVyaW1lbnRhbCBzaW1wbGUgc3RhdGUgbWFjaGluZQorICAgTkVXUzogc25tcGxpYjogbmV3IGV4cGVyaW1lbnRhbCByb3cgY3JlYXRpb24gQVBJIHdoaWNoIHVzZXMgYQorICAgc3RhdGUgbWFjaGluZQorICAgdG8gdHJ5IHJlYWxseSBoYXJkIHRvIGNyZWF0ZSBhIHJvdyBmcm9tIGEgZ2l2ZW4gdmFyYmluZCBsaXN0CisKKzIwMTAtMDYtMzAgMTk6NDggIHJzdG9yeQorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBORVdTOiBzbm1wZDogbmV3IEFQSSBmb3IgaW5kaWNhdGluZyB0aGF0IHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMKKyAgIHRvIGJlIHNhdmVkIGFmdGVyIHRoZSBjdXJyZW50IHJlcXVlc3QgZmluaXNoZXMgcHJvY2Vzc2luZworCisyMDEwLTA2LTMwIDE5OjQ2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgYWRkIHNvbWUgbmV3IHdyYXBwZXIgbWFjcm9zCisKKzIwMTAtMDYtMzAgMTU6NTkgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQ05TZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW5TZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTVEdGxzU2FuU2Vzc2lvbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNlRsc1NhblNlc3Npb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdkdGxzQ05TZXNzaW9uX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE4VGxzQ05TZXNzaW9uX3NpbXBsZToKKworICAgYWRkZWQgY2hlY2tzIGZvciBjaGVja2luZyBkaXJlY3QgcGFzc2luZyBvZiBsb2NhbGhvc3QgdG8gdGhlCisgICBleHBlY3RlZCBuYW1lCisKKzIwMTAtMDYtMzAgMTU6NTkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXI6CisKKyAgIGNoZWNrIGZvciB3aWxkY2FyZCBzdXBwb3J0CisKKzIwMTAtMDYtMzAgMTU6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHN1cHBvcnQgU0FOIGFuZCBDTiB3aWxkY2FyZCBtYXRjaGluZyBwZXIgc3BlYworCisyMDEwLTA2LTMwIDE1OjAwICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NybCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQWdlbnRUcmFwLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNOYW1lLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhbiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1VzZXJzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnMsICAKKyAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY2lwaGVyVGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU2NybHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNhZ2VudHRyYXB0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzbmFtZXRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzYW50ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3RyYXBkdXNlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3RzbXByZWZpeCwgCisgICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxRHRsc1VzZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFkdGxzdWRwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAyVGxzVXNlcl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMnRsc3RjcHVzZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMUR0bHNTZXJ2ZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJUbHNTZXJ2ZXJfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM0R0bHNTYW5fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTNkdGxzdWRwc2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0VGxzU2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE0dGxzdGNwc2FuX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxRHRsc1RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFkdGxzdWRwdHJhcHRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIyVGxzVHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMnRsc3RjcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMUR0bHNBZ2VudFRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFkdGxzdWRwYWdlbnR0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJUbHNBZ2VudFRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJ0bHN0Y3BhZ2VudHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MUR0bHNDcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFkdGxzdWRwY3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQyVGxzQ3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQydGxzdGNwY3JsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxRHRsc0NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFkdGxzY2lwaGVyc19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MlRsc0NpcGhlcnNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTJ0bHNjaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwVGxzSXB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMHRsc2lwdjZfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDBUbHNQZXJsLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMHRsc3RjcHBlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxRHRsc1BlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxZHRsc3BlcmwudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxRHRsc1RzbVByZWZpeF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMWR0bHN0c21wcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJUbHNUc21QcmVmaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJ0bHN0c21wcmVmaXhfc2ltcGxlOgorCisgICBtb3ZlZCB0ZXN0IGZpbGVzIGFyb3VuZCBmb3IgYmV0dGVyIG5hbWluZworCisyMDEwLTA2LTMwIDE0OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3B5IGR0bHMgdHJhbnNwb3J0IGFkZHJlc3MgdG8gdGhlIGV4cGVjdGVkIGhvc3RuYW1lCisKKzIwMTAtMDYtMzAgMTQ6NTggIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgc2V0IHRoZSBleHBlY3RlZCBob3N0bmFtZSBmcm9tIHRoZSB0cmFuc3BvcnQgc3RyaW5nIGlmIHBvc3NpYmxlCisKKzIwMTAtMDYtMzAgMTQ6NTggIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYSBiaXQgbW9yZSBoZWxwIG91dHB1dCBieSBkZWZhdWx0CisKKzIwMTAtMDYtMjkgMjI6MjkgIHRhbmRlcnMKKworICAgKiBhcHBzL3NubXB0cmFwZF9hdXRoLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE5MTE2OiBtYWtlIHN1cmUgd2UgaW5jbHVkZSBhZ2VudCBjb25maWcKKworMjAxMC0wNi0yOSAyMjoxOCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oOgorCisgICBBZGQgbWlzc2luZyBjb25maWdfcmVxdWlyZXMKKworMjAxMC0wNi0yOSAxNzozMyAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgcmV3b3JrIHRoZSBzbm1wY21kIG1hbnVhbCBwYWdlIHRvIHNlcGFyYXRlIG91dCB0aGUgZmxhZ3MgaW50bworICAgc2VjdGlvbnMgYXBwcm9wcmlhdGUgZm9yIHRoZWlyIHVzYWdlIHR5cGUKKworMjAxMC0wNi0yOSAxNjo1MSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHBvZCBkb2NzLCBzb21lIGRlZmF1bHQgdmFsIGZpeGVzLCBpbmZvIG91dHB1dCBub3JtYWxpemVkCisKKzIwMTAtMDYtMjkgMTY6MzIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jOgorCisgICBhZGRlZCBzc2guaCBpbmNsdWRlCisKKzIwMTAtMDYtMjkgMTY6MjcgIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIHJlb3JnYW5pemUgdGhlIG1hbnVhbCBwYWdlIGEgYml0IGZvciBTTk1QdjMgYW5kIFRMUworCisyMDEwLTA2LTI5IDE2OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBkZWZhdWx0IHRscyByZWdpc3RyYXRpb25zCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBjaGVjayBmb3IgTlVMTCB0cmFuc3BvcnRzIGFmdGVyIGFuIG9wZW4gZmFpbHMKKworMjAxMC0wNi0yOSAxNjoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92aW5nIGxvZ2dpbmcgYXJvdW5kIHNvIHRoYXQgb3BlbnNzbCBlcnJvcnMgYXJlIHByaW50ZWQgb24KKyAgIGZhaWx1cmVzCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3RzbXByZWZpeDoKKworICAgZml4IHNvbWUgbm9uLWludGVyYWN0aXZlIGludm9jYXRpb24gaXNzdWVzCisKKzIwMTAtMDYtMjkgMTY6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgc29tZSBjb21tb24gY29kZSBpbnRvIGEgY29tbW9uIGZ1bmN0aW9uCisKKzIwMTAtMDYtMjggMTk6MTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY2lwaGVyVGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MWR0bHNjaXBoZXJzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUydGxzY2lwaGVyc19zaW1wbGU6CisKKyAgIGNpcGhlciBzdWl0ZSBzZWxlY3Rpb24gYW5kIHRlc3RzIGZvciBpdAorCisyMDEwLTA2LTI4IDE5OjEyICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9MSUNFTlNFOgorCisgICBsaWNlbnNlIHVwZGF0ZXMKKworMjAxMC0wNi0yOCAxOToxMiAgaGFyZGFrZXIKKworICAgKiAgcHl0aG9uL1JFQURNRSwgcHl0aG9uL25ldHNubXAvY2xpZW50LnB5LCAgIAorICAgICAgcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKKworICAgU05NUHYzIG92ZXIgVExTIHN1cHBvcnQKKworMjAxMC0wNi0yOCAxOToxMiAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5OgorCisgICBiZXR0ZXIgb3V0cHV0IHNob3dpbmcgdGVzdCB0eXBlcworCisyMDEwLTA2LTI4IDAwOjU0ICB0YW5kZXJzCisKKyAgICogIG1hbi9taWJfYXBpLjMuZGVmLCBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9jb250YWluZXIuMywgIAorICAgICAgIG1hbi9uZXRzbm1wX2V4YW1wbGVfc2NhbGFyX2ludC4zLCBtYW4vbmV0c25tcF9oYW5kbGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9zbm1wY21kLjEuZGVmLCBtYW4vc25tcHRyYXBkLmNvbmYuNS5kZWY6CisKKyAgIENIQU5HRVM6IG1hbjogY2xlYW4gdXAgbWFudWFsIHBhZ2VzCisgICAoZnJvbSBEZWJpYW4gcGF0Y2ggNTZfbWFucGFnZSkKKworMjAxMC0wNi0yNyAyMzoyOSAgdGFuZGVycworCisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2F1dGguYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IERvIG5vdCBjYWxsIHZhY21fc3RhbmRhcmRfdmlld3MoKSBvcgorICAgaW5pdF92YWNtX2NvbmZpZ190b2tlbnMoKSBpZiB0aGUgY29ycmVzcG9uZGluZyBtb2R1bGUgd2FzIG5vdAorICAgY29tcGlsZWQKKyAgIChmcm9tIERlYmlhbiBwYXRjaCA2MV92YWNtX21pc3NpbmdfZGVwZW5kZW5jeV9jaGVjaykKKworMjAxMC0wNi0yNyAwMzoyMyAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBhcHAgdGFnIGNvbXBsZXRpb25zCisKKzIwMTAtMDYtMjcgMDA6NTYgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0LCBsb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmY6CisKKyAgIGhhbmRsZSBjb25maWcgZmlsZSBzZXR0aW5nIGludGVyYWN0aXZlLCB0cnVlL2ZhbHNlIHZhbHVlcyBoYW5kbGVkCisgICBpbiBjb25maWcKKworMjAxMC0wNi0yNiAyMDo1OCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCBzb21lIGJ1Z3Mgdy8gc3BhY2VzIGluIG5hbWVzIGFuZCBhcHAgdGFnIGhlbHAKKworMjAxMC0wNi0yNiAxOTozOCAgbWFyegorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvUzMwMHRsc3BlcmwucGwsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IHRlc3RzIHRvIHVzZSBub24taW50ZXJhY3RpdmUgLUkKKworMjAxMC0wNi0yNiAxNzo0NiAgbWFyegorCisgICAqIGxvY2FsL2NlcnRnZW4tdGVzdC5wbCwgbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYmV0dGVyIGludGVyYWN0aXZlLCA/PWhlbHAsIDx0YWI+IGNvbXBsLCBtb3JlIGhlbHAsIFNBTiBsb29wCisgICBmb3JtYXQgYW5kIHRlcm1pbmF0aW9uIGZpeCwgdG9sZXJhdGUgc3BhY2VzIGluIGZpZWxkcyBhbmQKKyAgIGZpbGVuYW1lcywgbW9yZSBjb21wbGV0ZSBlcnJvciBvdXRwdXQsIGVtYnJ5b25pYyBpbXBvcnQgZnJvbSB1cmwKKworMjAxMC0wNi0yNiAxMzo0OCAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgCisgICAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIE1vcmUgY29tcGlsZXIgd2FybmluZyBmaXhlcy4KKworMjAxMC0wNi0yNiAxMzo0NyAgYnZhc3NjaGUKKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGaXhlZCB0aGUgZXJyb3JzIGluIGFjY29uZmlnLmggYW5kIHJlZ2VuZXJhdGVkCisgICBuZXQtc25tcC1jb25maWcuaC5pbi4KKworMjAxMC0wNi0yNiAxMzo0NCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgRml4ZWQgY29tcGlsZXIgd2FybmluZ3MgdHJpZ2dlcmVkIGJ5IFNNVVggTUlCIGltcGxlbWVudGF0aW9uLgorCisyMDEwLTA2LTI2IDAwOjQ1ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHNzYW50ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzZHRsc3VkcHNhbl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNHRsc3RjcHNhbl9zaW1wbGU6CisKKyAgIGZpeGVzIGFuZCB0ZXN0aW5nIGZvciBjaGVja2luZyBTQU4gRE5TIG5hbWVzIGZyb20gdGhlIHNlcnZlcgorCisyMDEwLTA2LTI2IDAwOjQ0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc25hbWV0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZToKKworICAgZ2VuZXJpY2l6ZSB0aGUgc2VydmVyIG5hbWUgdGVzdHMKKworMjAxMC0wNi0yNSAyMzowMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wdHNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdHNtcHJlZml4LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDFkdGxzdHNtcHJlZml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAydGxzdHNtcHJlZml4X3NpbXBsZToKKworICAgdXNlcHJlZml4IHNjYWxhciB0ZXN0aW5nIGFuZCBzdXBwb3J0CisKKzIwMTAtMDYtMjUgMjM6MDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0czoKKworICAgcmVtb3ZlIGRlYnVnZ2luZyBsaW5lcworCisyMDEwLTA2LTI1IDIzOjAwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TY3JsdGVzdHM6CisKKyAgIHB1dCBpbiBvbmx5IG1pbmltaWFsIGRlYnVnIGZsYWdzCisKKzIwMTAtMDYtMjUgMjM6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Njcmx0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxZHRsc3VkcGNybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MnRsc3RjcGNybF9zaW1wbGU6CisKKyAgIGNvZGUgYW5kIHRlc3QgY2FzZXMgZm9yIENSTCBoYW5kbGluZworCisyMDEwLTA2LTI1IDE1OjI0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGU6CisKKyAgIEFkZGVkIGEgbmV3bGluZSBhdCB0aGUgZW5kIG9mIGVhY2ggbGluZSBwcmludGVkIGJ5IHRoZSBQZXJsCisgICBpbnRlcnByZXRlci4KKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVkdWNlIG51bWJlciBvZiByZXNlbmQgYXR0ZW1wdHMgYW5kIHRpbWVvdXQKKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHdhcm5pbmcgZml4ZXMKKworMjAxMC0wNi0yNSAxMzowOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICByZW1vdmUgbG9naWMgdHlwbyBmcm9tIHByZXZpb3VzIGNvbW1pdAorCisyMDEwLTA2LTI1IDEzOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMHRsc2lwdjZfc2ltcGxlOgorCisgICBJUHY2IGZpeGVzIGZvciBUQ1AKKworMjAxMC0wNi0yNSAxMzowMSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBSZXZlcnRpbmcgMTkwOTUsIGl0IGJyZWFrcyB0ZXN0cworCisyMDEwLTA2LTI1IDA5OjQwICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXB0cmFuc2xhdGU6IGZpeGVkIHByaW50aW5nIG9mIHJhbmdlcyB3aXRoIFVOU0lHTkVECisgICB0eXBlLgorCisyMDEwLTA2LTI0IDIzOjU1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggZnVuY3Rpb24gbmFtZXMgZm9yIHN0YXQgaW5jcmVhc2VzCisKKzIwMTAtMDYtMjQgMjM6NTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpeCBlcnJvcnMgaW4gY29tbWVudHMKKworMjAxMC0wNi0yNCAyMzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29tbWVudHMgZm9yIDUuNCBmb3IgZHRscworCisyMDEwLTA2LTI0IDIzOjQ0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjb21tZW50cyBmb3IgNS4zLjIKKworMjAxMC0wNi0yNCAyMzo0MyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2xpZW50IHNpZGUgY29ubmVjdCBjb21tZW50cworCisyMDEwLTA2LTI0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3VudGVyIGFuZCBjb21tZW50IGltcHJvdmVtZW50cworCisyMDEwLTA2LTI0IDIzOjQzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICB1cGRhdGUgY291bnRlciBjYWxscyBhbmQgY29tbWVudCB0ZXh0CisKKzIwMTAtMDYtMjQgMTk6MDMgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoOgorCisgICBNb3ZlZCBMRF9MSUJSQVJZX1BBVEggc2V0dXAgZnJvbSBpbmRpdmlkdWFsIHRlc3RzIHNjcmlwdHMgdG8KKyAgIHNpbXBsZV9URVNUQ09ORi5zaC4KKworMjAxMC0wNi0yNCAxOTowMiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIEZpeGVkIGEgY29tbWVudC4KKworMjAxMC0wNi0yNCAxNzo0OCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaDoKKworICAgU2hvdWxkIGhhdmUgYmVlbiBpbmNsdWRlZCBpbiByMTkwODQuCisKKzIwMTAtMDYtMjQgMTc6NDcgIGJ2YXNzY2hlCisKKyAgICogIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBGaXhlZCBzZXZlcmFsIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDYtMjQgMTI6MzAgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9nczoKKworICAgInRlc3QgLWUiIGlzbid0IHBvcnRhYmxlOyB1c2UgInRlc3QgLXgiIGluc3RlYWQgZm9yIHRoZSBQZXJsCisgICBzeXN0ZW0oKQorICAgY2hlY2sKKworMjAxMC0wNi0yMyAxMToxNCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeGVkIHZhbHVlIG9mIElQLU1JQjo6aXB2NkludGVyZmFjZUZvcndhcmRpbmcgb24KKyAgIExpbnV4CisgICAKKyAgIFRoZSB2YWx1ZSB3YXMgMCAobm90IGZvcndhcmRpbmcpIG9yIDEgKGZvcndhcmRpbmcpLCBzaG91bGQgYmUgMgorICAgYW5kIDEKKyAgIGluc3RlYWQgLSBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeS5mb3J3YXJkaW5nX3Y2IGlzIGJvb2xlYW4sIG5vdAorICAgVHJ1dGhWYWx1ZS4KKworMjAxMC0wNi0yMiAyMzowNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3VzZXJzdGVzdHM6CisKKyAgIHN1cHBvcnQgZm9yIGNlcnRTZWNOYW1lIG1hcHBpbmcgZnJvbSBhIGxvY2FsIGNlcnQgZmlsZSBuYW1lIGFuZCBhCisgICB0ZXN0IGZvciBpdAorCisyMDEwLTA2LTIyIDIyOjQ0ICBoYXJkYWtlcgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtOgorCisgICBkb2N1bWVuYXRpb24gdXBkYXRlIHRvIGNsZWFuIHVwIGFuZCBpbmNsdWRlIFRMUyBwYXJhbWV0ZXJzCisKKzIwMTAtMDYtMjIgMjI6NDQgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBzdXBwb3J0IGZvciBwYXNzaW5nIGlkZW50aXRpZXMgYW5kIGZ1bGwgd29ya2luZyB2ZXJzaW9uCisKKzIwMTAtMDYtMjIgMjI6NDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwdGxzdGNwcGVybC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QzMDFkdGxzcGVybC50OgorCisgICBwZXJsIFRMUy9EVExTIHRlc3RzCisKKzIwMTAtMDYtMjIgMjI6NDMgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL1NOTVAucG0sIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBmaXJzdCBwdGFjaCBvbiBTTk1QL1RMUyBjcmVhdGluZyBhIG5ldyBzZXNzaW9uIGZ1bmN0aW9uCisKKzIwMTAtMDYtMjIgMjI6NDMgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGZpcnN0IHdvcmtpbmcgc3VwcG9ydCBmb3IgYSBkZWxheWVkIGNsb3NlKCkgdG8gYXR0ZW1wdCB0byBzZW5kaW5nCisgICBvdXRzdGFuZGluZyBwYWNrZXRzIGluIHRoZSBxdWV1ZTsgdGhpcyBpcyByZXF1aXJlZCBmb3Igc25tcHRyYXAKKyAgIHRvIHdvcmsgYXQgYWxsIHdoZW4gc2VuZGluZyB0cmFwcyAobm90IGluZm9ybXMpIG92ZXIgRFRMUworCisyMDEwLTA2LTIyIDE5OjAzICBidmFzc2NoZQorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2g6CisKKyAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0cyBUMDU5IGFuZCBUMDY1IGRvIG5vdyBwYXNzLgorCisyMDEwLTA2LTIyIDE5OjAxICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYzoKKworICAgVGhlIHdpZHRoIGFyZ3VtZW50IGZvciAlLipkIG11c3QgaGF2ZSB0eXBlIGludCwgbm90IHNpemVfdC4gVGhpcworICAgYnVnIHdhcyBpbnRyb2R1Y2VkIGluIHIxOTAxNC4KKworMjAxMC0wNi0yMiAxODo1NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jOgorCisgICBDSEFOR0VTOiBNaW5HVzogcnVuX3NoZWxsX2NvbW1hbmQoKSB3aXRoIGVpdGhlciBpbnB1dCBvciBvdXRwdXQKKyAgIChidXQgbm90IGJvdGgpIGRvZXMgbm93IHdvcmsuCisgICBUaGlzIGRpZCBub3Qgd29yayB1bnRpbCBub3cgYmVjYXVzZSBvbiBNaW5HVyBta3N0ZW1wKCkgZ2VuZXJhdGVzCisgICBhIE1pbkdXLXN0eWxlIHBhdGggKC90bXAvLi4uKSB3aGlsZSBzeXN0ZW0oKSBpbnZva2VzIGNtZC5leGUgYW5kCisgICBoZW5jZSBleHBlY3RzIGEgV2luZG93cy1zdHlsZSBwYXRoIChDOlwuLi4pLgorCisyMDEwLTA2LTIyIDE3OjM5ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2g6CisKKyAgIEFsc28gcmVwb3J0IHRoZSBwb3J0IHNwZWNpZmljYXRpb24gaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF0uCisKKzIwMTAtMDYtMjIgMTc6MzggIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGU6CisKKyAgIFJlcGxhY2VkIGFuIGV4cGxpY2l0IHRlc3QgZm9yIE1pbkdXIGJ5IGEgdGVzdCBvbiBIQVZFX1NJR0hVUC4KKworMjAxMC0wNi0yMiAxNzozNiAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgU0lHSFVQLgorCisyMDEwLTA2LTIyIDE3OjM1ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIFJlcG9ydCB3aGljaCB0ZXN0cyBmYWlsZWQsIGlmIGFueS4KKworMjAxMC0wNi0yMiAwODozNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYzoKKworICAgRml4ZWQgYW4gZXJyb3IgaW4gYSBjb21tZW50IGJsb2NrLgorCisyMDEwLTA2LTIxIDE5OjI2ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGU6CisKKyAgIFJlYXJyYW5nZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoaXMgdGVzdCBzdWNoIHRoYXQgaXQgaXMgbm8KKyAgIGxvbmdlciBuZWNlc3NhcnkKKyAgIHRvIGludm9rZSBzaW1wbGVfZXZhbF90b29scy5zaCB3aGVuIHRoaXMgc2NyaXB0IGlzIGludm9rZWQgYXMgYQorICAgdHJhcCBoYW5kbGVyCisgICBieSBzbm1wdHJhcGQuCisKKzIwMTAtMDYtMjEgMDg6MDEgIGR0czEyCisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgRW5zdXJlIHRoYXQgZmRzZXQgc3RydWN0dXJlIGlzIHJlc2l6ZWQgc3VmZmljaWVudGx5CisgICB0byBhY2NvbW9kYXRlIHRoZSBzcGVjaWZpZWQgc29ja2V0IElELgorICAgUHJvYmxlbSByZXBvcnRlZCBieSBTaGl5YWxlaS4KKworMjAxMC0wNi0yMCAxOTozMiAgZHRzMTIKKworICAgKiAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9jbXVfY29tcGF0LmMsIHNubXBsaWIvcGtjcy5jLCAgIAorICAgICAgc25tcGxpYi9zbnByaW50Zi5jOgorCisgICBBdm9pZCBkdXBsaWNhdGUgKHVudXNlZCkgc3ltYm9scy4KKworMjAxMC0wNi0yMCAxOTozMSAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlOgorCisgICBDb21tZW50ZWQgb3V0IGRlYnVnIGNvZGUuCisKKzIwMTAtMDYtMjAgMTk6MzAgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuOgorCisgICBSZXN0b3JlZCBzdW1tYXJ5IHN1Y2Nlc3MvZmFpbHVyZSBjb3VudCByZXBvcnRpbmcuCisgICBBbHNvLCBtb3ZlZCBraWxsLmV4ZSB0ZXN0IGJhY2sgdG8gUlVOVEVTVFMuCisKKzIwMTAtMDYtMjAgMTk6MjkgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogYWRkIHRoZSB0ZXN0IG5hbWUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBmaWxlCisgICAiaW52b2tlZCIuCisKKzIwMTAtMDYtMjAgMTk6MjcgIGJ2YXNzY2hlCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTAwYWdlbnRodXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGU6CisKKyAgIENIQU5HRVM6IE1pbkdXOiB0ZXN0aW5nOiBza2lwIHRoZSB0ZXN0cyB0aGF0IHJlcXVpcmUgU0lHSFVQIHNpbmNlCisgICBNaW5HVyBkb2VzIG5vdCBzdXBwb3J0IFNJR0hVUC4KKworMjAxMC0wNi0yMCAxNToxOSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgQWRkZWQgYSBjb25maWd1cmUgdGVzdCB0aGF0IGRldGVjdHMgd2hldGhlciBvciBub3QgUGVybCdzCisgICBzeXN0ZW0oKSBmdW5jdGlvbgorICAgaW52b2tlcyBhIFBPU0lYIHNoZWxsLiAibWFrZSB0ZXN0IiBkb2VzIG5vdyBmYWxsIGJhY2sgdG8gUlVOVEVTVFMKKyAgIGlmIG5vdC4KKworMjAxMC0wNi0yMCAxNToxNiAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBCdWlsZHMgYWdhaW4gb24gTWluR1cgLS0gYWRkZWQgI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+IHdoZXJlCisgICBuZWNlc3NhcnkuCisgICBOb3RlOiBhbHRob3VnaCA8bmV0LXNubXAvdHlwZXMuaD4gaXMgaW5jbHVkZWQgaW5kaXJlY3RseSBmcm9tIHRoZQorICAgKiAgICAgKnRyYW5zcG9ydC5oICAgIGhlYWRlciBmaWxlcywgdGhlc2UgI2luY2x1ZGUgc3RhdGVtZW50cyBhcmUKKyAgICAgIG5lY2Vzc2FyeSBiZWNhdXNlIG9mICAgIGEgcGVza3kgICAgY2lyY3VsYXIgZGVwZW5kZW5jZSBiZXR3ZWVuCisgICAgICA8bmV0LXNubXAvdHlwZXMuaD4gYW5kICAgIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+LiAKKyAgICAgIDIwMTAtMDYtMjAgMTU6MTIgIGJ2YXNzY2hlCisKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW46CisKKyAgIENIQU5HRVM6IE1pbkdXOiByZWZ1c2UgdG8gcnVuIHRoZSByZWdyZXNzaW9uIHRlc3RzIGlmIGtpbGwuZXhlCisgICBjYW5ub3QgYmUgZm91bmQuCisKKzIwMTAtMDYtMjAgMTU6MTEgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgU2hvcnRlbmVkIHRoZSBzcmNkaXIgcGF0aCBieSBtYWtpbmcgc3VyZSB0aGF0IGl0IGRvZXMgbm90IGNvbnRhaW4KKyAgIC8uLgorCisyMDEwLTA2LTE5IDE4OjMwICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBBZGRlZCBzdXBwb3J0IGZvciBydW5uaW5nIFJVTkZVTExURVNUUyB3aXRoIFRlc3Q6Okhhcm5lc3MgaW4KKyAgIGFub3RoZXIgZGlyZWN0b3J5IHRoYW4gdGhlIHNvdXJjZSBkaXJlY3RvcnkuCisKKzIwMTAtMDYtMTkgMTY6NDEgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmg6CisKKyAgIGNvbXBsZXRlIHJld3JpdGUgb2YgcGFyYW1zIHRvIHVzZSB0YWJsZV9kYXRhc2V0IGluc3RlYWQgb2YKKyAgIGNyZWF0ZS1kYXRhc2V0CisKKzIwMTAtMDYtMTkgMTY6NDEgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICB1c2UgdGV4dCBmb3IgaGFzaCB0eXBlIGluIHBlcnNpc3RlbnQgc3RvcmUKKworMjAxMC0wNi0xOSAxNjo0MCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jOgorCisgICBxdWlldCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTA2LTE5IDE2OjQwICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IG1pc3Npbmcgc3BlY2lmaWVyIGluIGRlYnVnCisKKzIwMTAtMDYtMTkgMTY6MzkgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVzZSBkZWZpbmUgaW5zdGVhZCBvZiBjb25zdGFudDsgZml4IGNoZWNrIGZvciByb3dzIHRvIHNhdmUKKworMjAxMC0wNi0xOSAxNjozOSAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgcmVtb3ZlL2ZpbmQgZnVuY3Rpb24gZm9yIG1hcHMvYWRkcnMvcGFyYW1zOyByZW5hbWUgcGFyYW1zCisgICB0YWctPm5hbWU7CisgICBkZXN0cm95IC0+IGZyZWU7IGdyb3VwIHJlY2VudCB0cnVzdCBmdW5jdGlvbnMgdG9nZXRoZXIgaW4gc3JjOworICAgZG9uJ3Qgc3RvcmUKKyAgIHBhcmFtcyBmcCBhcyBiaW5hcnk7IGhhbmQgdGV4dCBhcmdzIGZvciBoYXNoIHR5cGUgKGUuZyAtLXNoYTEpCisKKzIwMTAtMDYtMTggMTU6MzUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBjb3JyZWN0ZWQgZXJyb3IgaGFuZGxpbmcgaW4gbWliSUkvYXQuCisKKzIwMTAtMDYtMTggMDc6MjMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNi0xOCAwMTo0MiAgbWFnZnIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIERvIG5vdCBkZWZpbmUgcmV0IHR3aWNlIHdoZW4gTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPIGlzIHNldC4KKworMjAxMC0wNi0xOCAwMTozOSAgbWFnZnIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBDb3JyZWN0ZWQgdHlwby4KKworMjAxMC0wNi0xOCAwMDozMSAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICBiZXR0ZXIgTkVXUyBhbmQgQ0hBTkdFUyBmaWxlcworCisyMDEwLTA2LTE3IDIwOjM5ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNi0xNyAyMDozMSAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMTAtMDYtMTcgMTg6NTkgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjUgLT4gVjUuNi5wcmUxCisKKzIwMTAtMDYtMTcgMjA6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDEwLTA2LTE3IDE4OjU5ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDEwLTA2LTE3IDE4OjU1ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDEwLTA2LTE3IDE4OjU0ICBoYXJkYWtlcgorCisgICAqIE1ha2VmaWxlLnRvcDoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAxMC0wNi0xNyAxODozOSAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgcmUtZW5hYmxlIHNvbWUgY29tbWFuZHMKKworMjAxMC0wNi0xNyAxNzo0NiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnM6CisKKyAgIGZvcmdvdCBtaXNzaW5nIHF1b3RlcyBpbiBTRVQgb3V0cHV0CisKKzIwMTAtMDYtMTcgMTc6NDYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzYWdlbnR0cmFwdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnM6CisKKyAgIHRscyB0ZXN0aW5nIGNsZWFudXAKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3JlIGZpeGVzIGZvciBhZGRyZXNzIHByaW50aW5nOyBtb3JlIHRvIGNvbWUKKworMjAxMC0wNi0xNyAxNzo0NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBtb3N0bHkgcHJvcGVybHkgc2V0IHJlbW90ZS9sb2NhbCB0cmFuc3BvcnQgcGFyYW1ldGVycworCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc2FnZW50dHJhcHRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFkdGxzdWRwYWdlbnR0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJ0bHN0Y3BhZ2VudHRyYXB0ZXN0c19zaW1wbGU6CisKKyAgIHRlc3RzIGZvciBhZ2VudHMgc2VuZGluZyBvZiB0cmFwcyBvdmVyIChEKVRMUworCisyMDEwLTA2LTE3IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEwMWR0bHN1ZHB1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJ0bHN0Y3B1c2VydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFkdGxzdWRwc2VydmVydGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJ0bHN0Y3BzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMWR0bHN1ZHB0cmFwdGVzdHNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJ0bHN0Y3B0cmFwdGVzdHNfc2ltcGxlOgorCisgICBtb3ZlIGV4cG9ydCBzdGF0ZW1lbnRzIHRvIHRoZSBzdXBwb3J0IGZpbGUgZm9yIHNpbXBsaWNpdHkKKworMjAxMC0wNi0xNyAxNzo0NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZSB0bHMgYm9vdHN0cmFwcGluZyB0byBwb3N0X3ByZW1pYiBzbyBvdGhlciBjb25maWcgdG9rZW5zIGNhbgorICAgdXNlIHRoZSBjZXJ0IGxvYWRpbmcgcmVzdWx0cworCisyMDEwLTA2LTE3IDE3OjQ0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmM6CisKKyAgIGFkZGVkIHNubXBfZW51bSB0ZXN0cyBwdWxsZWQgZnJvbSB0aGUgbWFpbigpIHRlc3QgYXQgdGhlIGJvdHRvbQorICAgb2YgdGhlIG9yaWdpbmFsIC5jIGZpbGUKKworMjAxMC0wNi0xNyAxNjowMCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYzoKKworICAgRWxpbWluYXRlICJkaWZmZXIgaW4gc2lnbmVkbmVzcyIgd2FybmluZworCisyMDEwLTA2LTE3IDAwOjE0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jOgorCisgICByZXZlcnQgVURQIGNoYW5nZXMgZnJvbSByMTg5ODQgc2luY2UgaXQgYnJva2UgdGhlIFVEUCB0cmFuc3BvcnQ7CisgICB0aGUgc3RydWN0IHByb2JhYmx5IG5lZWRzIHRvIG1hdGNoIGFub3RoZXIgc3RydWN0IHNvbWV3aGVyZSBlbHNlCisKKzIwMTAtMDYtMTYgMjM6MjYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGEgbmV3IEtFWVdPUkQgb3V0cHV0IGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKworMjAxMC0wNi0xNiAyMzoyNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIHVzZSBjb25maWdfYW5kX29wZW4gZm9yIG9wZW5pbmcgdGhlIHRyYW5zcG9ydAorCisyMDEwLTA2LTE2IDIzOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBleHRyYSBkZWJ1Z2dpbmcgc3RhdGVtZW50cworCisyMDEwLTA2LTE2IDIyOjE0ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgZXhwbGljaXRseSBkZWNsYXJlIHRydXN0IGNlcnRpZmljYXRlcyB0byB0cmFuc3BvcnQKKworMjAxMC0wNi0xNiAyMjoxNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBjbGVhbnVwIHNvbWUgbG9zdCBtZW1vcnkgb24gY2xvc2luZworCisyMDEwLTA2LTE2IDIxOjU2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBmaXggdHlwb3MKKworMjAxMC0wNi0xNiAyMTozNCAgZHRzMTIKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgRWxpbWluYXRlIChtb3N0KSAic2lnbmVkIGFuZCB1bnNpZ25lZCBjb21wYXJpc29uIiB3YXJuaW5ncyBmcm9tCisgICBhZ2VudCBjb2RlIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAyMDoxNiAgZHRzMTIKKworICAgKiAgc25tcGxpYi9hc24xLmMsIHNubXBsaWIvY2hlY2tfdmFyYmluZC5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvcGFyc2UuYywgICAKKyAgICAgIHNubXBsaWIvcmVhZF9jb25maWcuYywgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3NubXB2My5jLCAgIAorICAgICAgc25tcGxpYi90ZXh0X3V0aWxzLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpICJzaWduZWQgYW5kIHVuc2lnbmVkIGNvbXBhcmlzb24iIHdhcm5pbmdzIGZyb20KKyAgIGxpYnJhcnkgY29kZSBbLVdzaWduLWNvbXBhcmVdCisKKzIwMTAtMDYtMTYgMTk6MzYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBvbGRlciBuby1sb25nZXItbmVlZGVkLWR1cGxpY2F0ZS1jb25maWcgZW50cmllcworCisyMDEwLTA2LTE2IDE5OjE0ICBkdHMxMgorCisgICAqIHNubXBsaWIvdmFjbS5jOgorCisgICBGaXggcHJvY2Vzc2luZyBvZiB2aWV3IG1hc2tzIChtaXNwbGFjZWQgcGFyZW50aGVzZXMpCisKKzIwMTAtMDYtMTYgMTg6NDUgIGR0czEyCisKKyAgICogIGFwcHMvYWdlbnR4dHJhcC5jLCBhcHBzL3NubXBuZXRzdGF0L2lmLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2luZXQuYywgYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsIGFwcHMvc25tcHVzbS5jOgorCisgICBFbGltaW5hdGUgInNpZ25lZCBhbmQgdW5zaWduZWQgY29tcGFyaXNvbiIgZnJvbSBhcHAgY29kZQorICAgWy1Xc2lnbi1jb21wYXJlXQorCisyMDEwLTA2LTE2IDE3OjIyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdHJhcGR1c2VydGVzdHM6CisKKyAgIGNoZWNrIGZvciBpbmZvcm1zIHNlbnQgb3ZlciB0bHMgdHJhbnNwb3J0cworCisyMDEwLTA2LTE2IDE3OjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjb3B5IG90aGVyIHZhbHVzZSBmcm9tIHBhcmVudCB0bHNiYXNlIGRhdGEKKworMjAxMC0wNi0xNiAxNzoyMSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN0cmFwZHVzZXJ0ZXN0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdmFycywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIxZHRsc3VkcHRyYXB0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMnRsc3RjcHRyYXB0ZXN0c19zaW1wbGU6CisKKyAgIGFkZGVkIGJhc2ljIHRyYXAgc2VuZGluZyBhbmQgcmVjZWl2aW5nIHRlc3RzCisKKzIwMTAtMDYtMTYgMTc6MjEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzOgorCisgICByZW1vdmUgbm8gbG9uZ2VyIG5lZWRlZCB0ZW1wIGZpbGUgdG91Y2hlcworCisyMDEwLTA2LTE2IDE3OjIwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBhZGRlZCBhIG5ldyBmdW5jdGlvbiBhbmQgdHJhbnNwb3J0IGZsYWcgdG8gaW5kaWNhdGUgaWYgdGhlIGZfb3BlbgorICAgY2FsbCBoYXMgYmVlbiBjYWxsZWQgeWV0CisKKzIwMTAtMDYtMTYgMTc6MjAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHVudXNlZCB2YXIgd2FybmluZyBjbGVhbnVwCisKKzIwMTAtMDYtMTYgMTc6MTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhZGRlZCB0cnVzdENlcnQgY29uZmlndXJhdGlvbiB0b2tlbgorCisyMDEwLTA2LTE2IDE3OjE5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzdXNlcnN0ZXN0czoKKworICAgbWlub3IgdHdlYWtzIGZvciB0ZXN0aW5nIGNsYXJpdHkKKworMjAxMC0wNi0xNiAxNzoxOCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN1c2Vyc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFkdGxzdWRwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAydGxzdGNwdXNlcnRlc3RzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlOgorCisgICBtb3ZlZCBjb21wbGV4IChEKVRMUyB0byBhIHNlcGFyYXRlIHNlY3Rpb24gYW5kIG1hZGUgdGhlIHRyYW5zcG9ydAorICAgdGVzdHMgb25seSB0ZXN0IG1pbmltYWwgc3VwcG9ydAorCisyMDEwLTA2LTE2IDE3OjE3ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkIG1lY2hhbmlzbXMgZm9yIHNwZWNpZnlpbmcgYW5kIGV4cGVjdGluZyB0aGUgaG9zdG5hbWUgb2YgdGhlCisgICBmYXIgc2lkZQorCisyMDEwLTA2LTE2IDE3OjE3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3NlcnZlcnRlc3RzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdGxzL1N0bHN2YXJzOgorCisgICB0ZXN0cyBmb3IgdmVyaWZ5aW5nIHNlcnZlciBjZXJ0aWZpY2F0ZSBjaGVjayBmYWlsdXJlcworCisyMDEwLTA2LTE2IDE3OjE3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMsIHRlc3RpbmcvZnVsbHRlc3RzL3Rscy9TdGxzc2VydmVydGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU3Rsc3ZhcnMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMWR0bHN1ZHBzZXJ2ZXJ0ZXN0c19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMnRsc3RjcHNlcnZlcnRlc3RzX3NpbXBsZToKKworICAgdGVzdGluZyBmb3IgY2hlY2tpbmcgY2xpZW50IHNpZGUgdmVyaWZpY2F0aW9uIG9mIHNlcnZlcgorICAgY2VydGlmaWNhdGVzCisKKzIwMTAtMDYtMTYgMTc6MTYgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg6CisKKyAgIHNldHVwIGZvciBhIGhvc3RuYW1lIGNvbmZpZyBvcHRpb24KKworMjAxMC0wNi0xNiAxNzoxNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc2V0dXAgZm9yIGEgaG9zdG5hbWUgY29uZmlnIG9wdGlvbgorCisyMDEwLTA2LTE2IDE3OjE1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNoZWNrIHRvIG1ha2Ugc3VlciBzc2wgcG9pbnRlciBoYXMgYmVlbiBjcmVhdGVkIHZpYSBmX29wZW4gY2FsbAorCisyMDEwLTA2LTE2IDE1OjAyICBkdHMxMgorCisgICAqIGFnZW50L3NubXBfcGVybC5oLCBhcHBzL3NubXB0cmFwZC5jOgorCisgICBEZWNsYXJlICdzaHV0ZG93bl9wZXJsJyBwcm9wZXJseS4KKworMjAxMC0wNi0xNiAxNDozNyAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL2tleXRvb2xzLmMsIHNubXBsaWIvbGNkX3RpbWUuYzoKKworICAgRWxpbWluYXRlICJzaWduZWQgYW5kIHVuc2lnbmVkIHR5cGUgaW4gY29uZGl0aW9uYWwgZXhwcmVzc2lvbiIKKyAgIHdhcm5pbmdzIFstV3NpZ24tY29tcGFyZV0KKworMjAxMC0wNi0xNiAxNDoyNyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIEVsaW1pbmF0ZSAidW51c2VkIHZhcmlhYmxlIiB3YXJuaW5nCisKKzIwMTAtMDYtMTYgMTQ6MjIgIGR0czEyCisKKyAgICogIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9zbm1wZC5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgRWxpbWluYXRlIHZhcmlvdXMgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTYgMTM6MTMgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYywgICAKKyAgICAgIGFwcHMvc25tcHZhY20uYywgc25tcGxpYi90b29scy5jOgorCisgICBFbGltaW5hdGUgKG1vc3QpIHNpZ25lZC12cy11bnNpZ25lZCB3YXJuaW5ncyBmcm9tIG51bWVyaWMgc2NhbmYKKyAgIHByb2Nlc3NpbmcgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNiAwMzoyOCAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgc25tcGxpYi9jb250YWluZXIuYzoKKworICAgdGhlIGdyZWF0IHVuLW5hbWVkIGNvbnRhaW5lciBodW50CisKKzIwMTAtMDYtMTYgMDM6MjcgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgc2hhcmUgY2FjaGUgYmV0d2VlbiB0YWJsZSBhbmQgY291bnQgc2NhbGFyOyB3aGVuIHJlYWRpbmcgY29uZmlnLAorICAgYWRkIHRvCisgICBsaWJyYXJ5IGNvbnRhaW5lcnMgZm9yIGFjdGl2ZSByb3dzLCB0YWJsZSBjb250YWluZXJzIGZvciBpbmFjdGl2ZQorICAgcm93czsKKyAgIHVzZXIgY2VydF91dGlsIGFwaXMgaW5zdGVhZCBvZiBkaXJlY3QgY29udGFpbmVyIG1hbmlwdWxhdGlvbjsKKyAgIHdoZW4KKyAgIHNhdmluZyBpbmFjdGl2ZSBtYXAgcm93cywgc2tpcCBhbGwgYnV0IG5vblZvbGF0aWxlCisKKzIwMTAtMDYtMTYgMDM6MjYgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBkZWJ1ZyB0b2tlbiB0eXBvCisKKzIwMTAtMDYtMTYgMDM6MjUgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIGFwaSBmb3IgYWRkaW5nIGVudHJpZXMgdG8gdGx0c20gYWRkciwgcGFyYW1zIGFuZCBjZXJ0IG1hcAorICAgY29udGFpbmVyczsKKyAgIHJlZ2lzdGVyIHNlIHNsaXN0IHBhaXIgZWFybGllciBzbyB0aGV5IGFyZSBhdmFpbGFibGUgZHVyaW5nCisgICBjb25maWcgcGFyc2luZzsKKyAgIG1ha2Ugc3VyZSBjb25maWcgc3RyaW5ncyBhcmUgbnVsbCB0ZXJtaW5hdGVkCisKKzIwMTAtMDYtMTUgMjE6NDIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBTdXBwcmVzcyB3YXJuaW5nczoKKyAgICdzdHJ1Y3Qgbmxtc2doZHIgZGVmaW5lZCBpbnNpZGUgcGFyYW1ldGVyIGxpc3QnIGFuZAorICAgJ2Z1bmN0aW9uIF9sb2FkX3Y2IGRlY2xhcmVkIGJ1dCBuZXZlciBkZWZpbmVkJworCisyMDEwLTA2LTE1IDIxOjMwICBkdHMxMgorCisgICAqICBhZ2VudC9rZXJuZWwuYywgYXBwcy9zbm1wdHJhcGRfc3FsLmMsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL2NtdV9jb21wYXQuYywgc25tcGxpYi9wa2NzLmMsIHNubXBsaWIvc25wcmludGYuYzoKKworICAgRWxpbWluYXRlICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IiB3YXJuaW5ncyBbLXBlZGFudGljXQorCisyMDEwLTA2LTE1IDA3OjA3ICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwM2NvcHlfbndvcmRfY2xpYi5jOgorCisgICBBZGQgdGVzdCBvZiBjb3B5X253b3JkCisKKzIwMTAtMDYtMTQgMjE6MzIgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYzoKKworICAgRWxpbWluYXRlICJvdmVyZmxvdyBpbiBpbXBsaWNpdCBjb25zdGFudCBjb252ZXJzaW9uIiB3YXJuaW5ncworICAgWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xNCAxNTo1MSAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBFbGltaW5hdGUgInN0cmluZyBsZW5ndGggZ3JlYXRlciB0aGFuIDUwOSIgd2FybmluZ3MgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNCAxNToxOSAgZHRzMTIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4uYzoKKworICAgRWxpbWluYXRlICJpbml0aWFsaXplciBlbGVtZW50IGlzIG5vdCBjb21wdXRhYmxlIiB3YXJuaW5ncworICAgWy1wZWRhbnRpY10KKworMjAxMC0wNi0xNCAwNToyNyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSBjb3VudCBoYW5kbGVycyB0byBjb3VudCBub24tYWN0aXZlIHJvd3MgdG9vCisKKzIwMTAtMDYtMTQgMDU6MTIgIHJzdG9yeQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIG9ubHkgdHdlYWsgc3RvcmFnZVR5cGUgZm9yIGFjdGl2ZSByb3dzOyByZXNldCBlbnRyeSBmbGFncyB3aGVuCisgICByZW1vdmluZyBmcm9tCisgICBjZXJ0X3V0aWwgbWFwczsgd2hlbiBjcmVhdGVpbmcgcm93cyBmcm9tIGNlcnRfdXRpbCBtYXBzLCBzZXQKKyAgIHN0cmFnZXRUeXBlIHRvCisgICB2b2xhdGlsZSBpZiBub25Wb2xhdGlsZSBmbGFnIG5vdCBzZXQ7IGRvbnQgZnJlZSBjYWNoZSBpbgorICAgY2FjaGVfbG9hZCBvbiBlcnIKKworMjAxMC0wNi0xNCAwNToxMCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmM6CisKKyAgIG1vdmUgdGxzdG1BZGRyIHRhYmxlIGNvbmZpZyBwYXJzaW5nIHRvIGNlcnRfdXRpbDsgYWRkIGNhY2hlIHRvCisgICBtZXJnZSBjZXJ0X3V0aWwKKyAgIGFkZHJzIChhY3RpdmUpIGFuZCBub24tYWN0aXZlIHJvd3M7CisKKzIwMTAtMDYtMTQgMDU6MTAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYWRkIG5vblZvbGF0aWxlIGZsYWcgdG8gdGxzdG1BZGRyIHRhYmxlOyBzZXQgY29udGFpbmVyIG5hbWU7IHNraXAKKyAgICcweCcgaW4gZnAKKworMjAxMC0wNi0xNCAwNTowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoYW5nZSBMT0dfRVJSIHRvIExPR19JTkZPIGZvciBub24tZXJyb3IgbG9nIG1zZworCisyMDEwLTA2LTEzIDIxOjAyICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIGZyb20KKyAgIE1mRC1iYXNlZCBNSUIgbW9kdWxlIGNvZGUsIGFuZCBNZkQgdGVtcGxhdGUgWy1XYysrLWNvbXBhdF0KKworMjAxMC0wNi0xMiAyMTozMyAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIGZyb20gKG5vbi1NZkQpCisgICBNSUIgbW9kdWxlIGNvZGUuIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTIgMTA6MjYgIGR0czEyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvYWdlbnRfaW5kZXguYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3N5c09SVGFibGUuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jLCBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5jLCBhZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zY2FsYXIuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsICAgCisgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2xvZy5jLCAgIAorICAgICAgc25tcGxpYi9kaXJfdXRpbHMuYywgc25tcGxpYi9maWxlX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIEVsaW1pbmF0ZSAobW9zdCkgImltcGxpY2l0IGNvbnZlcnNpb24iIHdhcm5pbmdzIGZyb20gbGlicmFyeSwKKyAgIGFwcHMgYW5kIGFnZW50IGZyYW1ld29yaytoZWxwZXJzIGNvZGUuIFstV2MrKy1jb21wYXRdCisKKzIwMTAtMDYtMTAgMjA6MDEgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKKworICAgbG9va3VwIGNlcnQga2V5cyBmb3IgdGxzIGRvbWFpbnM7IHVzZSBTRUNfTU9ERUwgZGVmaW5lIGluc3RlYWQgb2YKKyAgIGhhcmRjb2RlZAorICAgY29uc3RhbnQ7IGFkZCBTRUNfTU9ERUxfVFNNIHRvIGFsbG93ZWQgc2VjIG1vZGVscyBmb3IgbXBNb2RlbAorICAgU05NUF9WRVJTSU9OXzMKKworMjAxMC0wNi0xMCAyMDowMCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOgorCisgICBkZWZhdWx0IHRvIHJlYWRPbmx5L2FjdGl2ZSBmb3IgYmFkIGNvbmZpZworCisyMDEwLTA2LTEwIDIwOjAwICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYWRkIGRlYnVnOyBzd2l0Y2ggdG8gU0VDX01PREVMX1RTTSBhbmQgd2FybiBpZiBvdGhlciBzZWNtb2RlIHNldCwKKyAgIGluc3RlYWQKKyAgIG9mIHNpbXBseSBsb2dnaW5nIHRoYXQgaXQgd29uJ3Qgd29yaworCisyMDEwLTA2LTEwIDE5OjU5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY2hlY2sgcHRycyBiZWZvcmUgZGVyZWZlcmVuY2UKKworMjAxMC0wNi0xMCAxOTo1OCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtb3ZlIHNubXBUbHN0bUFkZHJUYWJsZSBkYXRhIG1hbmFnZW1lbnQgdG8gY2VydF91dGlsOyBpbXBsZW1lbnQKKyAgIFRBUkdFVF9BRERSCisgICBhbmQgVEFSR0VUX1BBUkFNUyBsb29rdXAgaW4gY2VydCBBUEkKKworMjAxMC0wNi0xMCAxOTo0NyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICB1cGRhdGUgc2VjIG1vZGVsIGRlZmluZSBtaXNzZWQgaW4gZWFybGllciBjaGVja2luCisKKzIwMTAtMDYtMTAgMTk6NDYgIHJzdG9yeQorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgY29uZmlnIHRyYXBzZXNzIHRyYW5zcG9ydHMgb24gY3JlYXRpb247IHNpbXBsaWZ5IGlmZGVmcyBmb3IKKyAgIERJU0FCTEVfU05NUFYxCisKKzIwMTAtMDYtMTAgMTk6NDYgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oLCBzbm1wbGliL3NubXBrc20uYywgICAKKyAgICAgIHNubXBsaWIvc25tcHRzbS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgYXV0byBzd2l0Y2ggdG8gdjMgZm9yIChkKXRscyBzZXNzaW9ucyBpbnN0ZWFkIG9mIGxvZ2dpbmcgdGhhdAorICAgb3RoZXJzIHdvbnQKKyAgIHdvcms7IGRlZmluZSBUU00gc2VjIG1vZGVsIHdpdGggb3RoZXIgc2VjIG1vZGVsczsgY29uc2lzdGVudGx5CisgICB1c2UKKyAgIFNOTVBfU0VDX01PREVMXyogaW4gdGhlIGNvZGUsIHVzaW5nICNkZWZpbmVzIGZvciBiYWNrd2FyZHMKKyAgIGNvbXBhdGliaWxpdHkKKyAgIHcvKl9TRUNVUklUWV9NT0RFTAorCisyMDEwLTA2LTEwIDE5OjQ2ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jLAorICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjZXJ0VG9UU046IG1vdmUgbWliIHJlbGF0ZWQgcGVyc2lzdGVuY2UgYmFjayBpbnRvIG1pYiBtb2R1bGU7CisgICBjZXJ0X3V0aWw6IGFkZCB0bHN0bVBhcmFtcyBwZXJzaXN0ZW5jZTsgdXNlIHNsaXN0IGZvciBjZXJ0IG1hcAorICAgdHlwZSBuYW1lCisgICBtYXBwaW5nOworCisyMDEwLTA2LTEwIDE5OjQ1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmcgKGNvbnN0KQorCisyMDEwLTA2LTEwIDA0OjU4ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYzoKKworICAgQWRkIG1pc3NpbmcgaW5kZW50YXRpb24gb2YgYSBkby13aGlsZSBsb29wIHRvIG1ha2UgdGhlIGNvZGUKKyAgIHJlYWRhYmxlLgorCisyMDEwLTA2LTA5IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGNvbW1lbnQgb3V0IGtleVVzYWdlIHNvIHByb3BlciBzZWxmLXNpZ25lZCBjZXJ0cyBhcmUgZ2VuZXJhdGVkCisKKzIwMTAtMDYtMDkgMjI6NTcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHNvbGlkaWZ5IGNlcnRpZmljYXRlIGFjY2VwdGFuY2UgZm9yIHRoZSBjbGllbnQgc2lkZQorCisyMDEwLTA2LTA5IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCBhcnJheSB0eXBvCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbG9nIG9wZW5zc2wgZXJyb3JzIG9uIGFjY2VwdCBmYWlsdXJlCisKKzIwMTAtMDYtMDkgMjI6NTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZWdpc3RlciBkZWZhdWx0IHBvcnRzIGZvciB0bHMvZHRscworCisyMDEwLTA2LTA5IDIyOjU2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGRvIHByb3BlciBTVE9SRSBsb2FkaW5nIG9mIHRydXN0ZWQgY2VydGlmaWNhdGVzIHJhdGhlciB0aGFuIGZpbGUKKyAgIGJhc2VkIGxvYWRpbmcKKworMjAxMC0wNi0wOSAyMjo1NiAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZGVkIHR3byBuZXcgQVBJczogbmV0c25tcF9jZXJ0X3RydXN0IGFuZCBuZXRzbm1wX2NlcnRfdHJ1c3RfY2EKKworMjAxMC0wNi0wOSAyMjo1NSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBhZGRlZCBzdHJhaWdodCAndGxzJyB0cmFuc3BvcnQgbmFtZQorCisyMDEwLTA2LTA5IDIyOjU1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBhZGRlZCBzdHJhaWdodCAnZHRscycgdHJhbnNwb3J0IG5hbWUKKworMjAxMC0wNi0wOCAyMTowNSAgbWFnZnIKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgSW5zdGFsbCBhZ2VudF9yZWFkX2NvbmZpZy5oIGluIDUuNiBhcyB3ZWxsLiBJdCBkaXNhcHBlYXJlZCBpbgorICAgcjE4ODQzLgorCisyMDEwLTA2LTA4IDA5OjI1ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tfaHcuYzoKKworICAgUmVtb3ZlIChvciBhY3RpdmF0ZSkgdW51c2VkIHZhcmlhYmxlcy4KKyAgIEZpeCBtaXNuYW1lZCBmdW5jdGlvbiBkZWNsYXJhdGlvbi4KKworMjAxMC0wNi0wOCAwNzoxMSAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaDoKKworICAgQVBJIGNoYW5nZXMgZm9yIHByZWxpbWluYXJ5IEhBTF9iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBVQ0QgZGlzaworICAgbW9kdWxlLgorICAgKE9taXR0ZWQgZnJvbSByZXZpc2lvbiAxODkzMiBjaGVja2luKQorCisyMDEwLTA2LTA4IDA0OjE4ICByc3RvcnkKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgdXBkYXRlIG1ha2VmaWxlIGZvciBtb3ZlZCBoZWxwZXIgaGVhZGVycworCisyMDEwLTA2LTA3IDIwOjE4ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYzoKKworICAgUmV2ZXJ0aW5nIHJldi4gMTc2MTYsIHRoZSBuZWNlc3NhcnkgY2hlY2sgaXMgYWxyZWFkeSBpbiByZXYuCisgICAxNzQxNS4KKworMjAxMC0wNi0wNiAwMzo0NSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogSW4gY2FzZSBleGVjX3ByZWZpeCBpcyB1bnNldCB0aGVuIHNldCBpdCB0bworICAgJyR7cHJlZml4fScgaW4gb3JkZXIgdG8gcGljayB1cCBvdmVycmlkZXMgb2YgJHByZWZpeCBpbiBtYWtlCisgICBpbnN0YWxsLgorCisyMDEwLTA2LTA0IDA0OjA2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBkbyBhIGJldHRlciBqb2Igb2YgdmVyaWZ5aW5nIGZpbmdlcnByaW50cyBvZiByZW1vdGUgc2VydmVycworICAgcHVsbGluZyBmaW5nZXJwcmludHMgZnJvbSBhIG51bWJlciBvZiBwb3NzaWJsZSBwbGFjZXMKKworMjAxMC0wNi0wNCAwNDowNSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICBnbyBhaGVhZCBhbmQgbG9nIG91dHB1dCBmaWxlIGZvciBlYXNpZXIgZGVidWdnaW5nIGluIGVycm9ycworCisyMDEwLTA2LTA0IDA0OjA1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBmaXggdHlwbworCisyMDEwLTA2LTA0IDA0OjA1ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc2NhcGkuYzoKKworICAgcmVtb3ZlIGNvbW1lbnQgYWJvdXQgcmFuZG9tIGJlaW5nIGluYWRlcXVhdGU7IHdlJ3JlIGRvaW5nIHRoZQorICAgYmVzdCB3ZSBjYW4gYmFzZWQgb24gd2hhdCB3ZSBoYXZlCisKKzIwMTAtMDYtMDQgMDQ6MDQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB1c2UgYW5vdGhlciB1c2VyIGZvciB0ZXN0aW5nIHNubXBhcHAgZGVmYXVsdCBjZXJ0aWZpY2F0ZQorCisyMDEwLTA2LTA0IDA0OjA0ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgcnVuIGEgZGVmYXVsdCB0ZXN0IHdpdGhvdXQgYSBsb2NhbCBrZXkgdG8gZW5zdXJlIHRoZSBzbm1wYXBwIHR5cGUKKyAgIGlzIHBpY2tlZCB1cAorCisyMDEwLTA2LTA0IDA0OjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBhIHNwZWNpYWwgY2FzZSBmb3IgdGhlIGxvY2FsIGlkZW50aXR5IGFuZCBwdWxsIGl0IGZyb20gYQorICAgZmlsZW5hbWUgb2YgdGhlIGluaXRfc25tcCgpIHJlZ2lzdGVyZWQgdHlwZSBuYW1lCisKKzIwMTAtMDYtMDQgMDQ6MDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbToKKworICAgZG9jIHVwZGF0ZQorCisyMDEwLTA2LTA0IDA0OjAzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNXVuaXgudDoKKworICAgdW5peCBzb2NrZXQgdGVzdAorCisyMDEwLTA2LTA0IDA0OjAzICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDN1ZHA2LnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDR0Y3A2LnQ6CisKKyAgIGlwdjYgdGVzdHMKKworMjAxMC0wNi0wNCAwNDowMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAxdWRwLnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudDoKKworICAgbWVudGlvbiB0ZXN0IG5hbWUgaXMgSVB2NAorCisyMDEwLTA2LTA0IDA0OjAyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMnRjcC50OgorCisgICBjaGVjayB0aGF0IHRyYW5zcG9ydCB3YXMgY29uZmlndXJlZAorCisyMDEwLTA2LTA0IDA0OjAyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvTmV0U05NUFRlc3QucG06CisKKyAgIGFkZCBzdXBwb3J0IGZvciBuZXQtc25tcC1jb25maWcuaCBjaGVja3MKKworMjAxMC0wNi0wNCAwNDowMSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9OZXRTTk1QVGVzdFRyYW5zcG9ydC5wbSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQ6CisKKyAgIHNvbWUgYmFzaWMgdHJhbnNwb3J0IGNoZWNraW5nIGZvciBwZXJsOiB1ZHAgYW5kIHRjcAorCisyMDEwLTA2LTA0IDA0OjAxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwsIHRlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDAwMWJhc2ljLnQ6CisKKyAgIGJhc2ljIHRlc3RzIGZvciBwZXJsCisKKzIwMTAtMDYtMDQgMDQ6MDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbToKKworICAgaW5mcmFzdHJ1Y3R1cmUgbW9kdWxlIGZvciB0ZXN0aW5nIHBlcmwgc3VwcG9ydAorCisyMDEwLTA2LTAzIDE1OjU2ICBkdHMxMgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBQb2ludCBMSUJ7Q1VSUkVOVCxBR0UsUkVWSVNJT059IGRvY3VtZW50YXRpb24gdG8gdGhlIGNvcnJlY3QKKyAgIGZpbGUuCisgICBXYXJuIGFib3V0ICdtYWtlZGVwZW5kJyBwaWNraW5nIHVwIHRlc3RpbmcgbW9kdWxlIGNvZGUuCisgICBFbXBoYXNpcyB1cGRhdGUgb2YgJ2Rvd25sb2FkLmh0bWwnIHBhZ2UKKyAgIE1lbnRpb24gdXBkYXRlIG9mIE9mZmljaWFsIFBhdGNoZXMKKyAgIFN1cHByZXNzIGJyb2tlbiBjb21tYW5kcworCisyMDEwLTA2LTAzIDE1OjE2ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmgsIGFnZW50L21pYmdyb3VwL3VjZF9zbm1wLmg6CisKKyAgIFByZWxpbWluYXJ5IEhBTF9iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiBVQ0QgZGlzayBtb2R1bGUuCisgICBFbnN1cmVzIGNvbnNpc3RlbnQgcmVwb3J0aW5nIGJldHdlZW4gVUNEIGFuZCBIb3N0UmVzIEZTeXMgdXNhZ2UKKyAgIGFuZCBleHRlbmRzICdza2lwTkZTSW5Ib3N0UmVzb3VyY2VzJyBjb25maWcgdG8gVUNEIGRpc2sgc3RhdHMuCisKKzIwMTAtMDYtMDMgMTU6MTMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmM6CisKKyAgIEZpeCBicm9rZW4gc2l6ZSBjYWxjdWxhdGlvbnMuCisgICBTdXBwb3J0IDY0LWJpdCBzaXplL3VzYWdlIHZhbHVlcy4KKworMjAxMC0wNi0wMiAxNDo1MiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHVzZSAtLXdpdGgtY2EgaW5zdGVhZCBvZiAtLWNhCisKKzIwMTAtMDYtMDIgMTQ6NTEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICB1c2UgdGhlIG5ldyAtYnJpZWYgb3B0aW9uIGZvciBmaW5nZXJwcmludCBjYXB0dXJpbmcKKworMjAxMC0wNi0wMiAxNDo0MCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZpeCAtLXdpdGgtY2EgaGFuZGxpbmcsIGZpeCBDQSBuZXdjZXJ0cyBib29ra2VlcGluZworCisyMDEwLTA2LTAyIDEwOjU3ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBwYXJzaW5nIE9JRHMKKyAgIGluIGNvbmZpZyBmaWxlcy4KKworMjAxMC0wNi0wMiAwMDoyNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGNoZWNrIHRoYXQgQ0EgY2VydGlmaWNhdGVzIGNyZWF0ZWQgYWZ0ZXIgc25tcGQgc3RhcnRzIGFyZSBzdGlsbAorICAgdXNhYmxlOyBjaGVjayBhbGwgb3V0cHV0IGZpbmdlcnByaW50cyB0byBlbnN1cmUgdGhleSB3ZXJlCisgICBwcm9wZXJseSBjcmVhdGVkCisKKzIwMTAtMDYtMDIgMDA6MjMgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgYWRkIG1pc3NpbmcgZGlyZWN0b3J5IGFuZCBmaWxlIHN1ZmZpeCB0byBjYSBpbnZvY2F0aW9ucworCisyMDEwLTA2LTAyIDAwOjIxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgY2hlY2sgdGhhdCBjZXJ0aWZpY2F0ZSBvdXRwdXQgZmluZ2VycHJpbnRzIHdlcmUgZm91bmQKKworMjAxMC0wNi0wMiAwMDoyMCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoOgorCisgICB0d28gbmV3IGZ1bmN0aW9ucyBmb3IgdmFsdWUgY29tcGFyaXNvbiB0ZXN0IG91dHB1dAorCisyMDEwLTA2LTAyIDAwOjE2ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIHJlbW92ZSBuby1sb25nZXItdXNlZCBzZWxmLXNpZ25lZCBjZXJ0aWZpY2F0ZSB0b2tlbiBzcGVjaWZpZXIgKHdlCisgICByZXF1aXJlIGEgY29weSBvZiB0aGUga2V5KQorCisyMDEwLTA2LTAyIDAwOjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIC0gY2hhbmdlZCAnZmluZ2VycHJpbnQnIHRva2VuIHRvIG1vcmUgZ2VuZXJpYyAnaWRlbnRpdHknIGtleXdvcmQKKyAgIC0gYWRkZWQgdGhlIGFiaWxpdHkgZm9yIG5ldHNubXBfY2VydF9maW5kIHRvIHRyeSBtdWx0aXBsZSB0eXBlcworICAgKEZQICYgZmlsZSkKKyAgIC0gYW5kIHByb3ZpZGUgdGVzdCBzdWl0ZSB0ZXN0IGZvciBpdC4KKworMjAxMC0wNi0wMSAyMDoxMiAgYnZhc3NjaGUKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZToKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIFBlcmwgZXh0ZW5zaW9uIG1vZHVsZXMgY2FuIGxvYWQgdGhlIE5ldC1TTk1QCisgICBETExzIHdoaWxlIHJ1bm5pbmcgdGhlIE5ldC1TTk1QIHJlZ3Jlc3Npb24gdGVzdHMuCisKKzIwMTAtMDYtMDEgMTY6NDcgIG1hcnoKKworICAgKiBsb2NhbC9jZXJ0Z2VuLXRlc3QucGwsIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1ham9yIHVwZGF0ZSBidWcgZml4ZXMgYW5kIGZlYXR1cmVzIC0gaW50ZXJhY3RpdmUgbW9kZSwgc2VwYXJhdGUKKyAgIENBIGRpcnMsIGdlbiBjc3IgZnJvbSBjZXJ0LCBmaW5nZXJwcmludCBkaXNwbGF5IC0tYnJpZWYsCisgICBlbGltaW5hdGUgc2VkLCBvcGVuc3NsLmNvbmYgb3ZlcndyaXRlIGFuZCB0ZW1wbGF0aW5nCisKKzIwMTAtMDYtMDEgMTQ6NDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBGaXhlZCBhIHR5cG8gaW4gYSBzb3VyY2UgY29kZSBjb21tZW50LgorCisyMDEwLTA2LTAxIDE0OjI1ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBJUC1NSUI6OmlwSWZTdGF0c1JlYXNtUmVxZHMgdmFsdWUuCisgICAKKyAgIEp1c3QgZml4aW5nIGEgc3R1cGlkIHR5cG8uCisKKzIwMTAtMDUtMzEgMTA6NDMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogZW5hYmxlZCBVbml4IHRyYW5zcG9ydC4KKyAgIChGb3J3YXJkLXBvcnRlZCByMTg2ODcgZnJvbSB0aGUgVjUuNSBicmFuY2gpLgorCisyMDEwLTA1LTMwIDIyOjUyICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGVuYWJsZSB0byBydW4gd2l0aCBvbGRlciBQZXJsIChlLmcuIFBlcmwgNS4wMDQwNSBhcyBzaGlwcGVkIHdpdGgKKyAgIElSSVgKKyAgIDYuNSkKKworMjAxMC0wNS0zMCAyMjo0OSAgdGFuZGVycworCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBwb2xpc2ggZG9jdW1lbnRhdGlvbgorCisyMDEwLTA1LTMwIDIwOjE5ICBtYWdmcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG5ldC1zbm1wLWNvbmZpZy5pbiwgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4sICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IERvIG5vdCBsaW5rIHdpdGggbGlibmV0c25tcGhlbHBlcnMgYW55IG1vcmUgYXMKKyAgIGl0IGlzIGVtcHR5LgorCisyMDEwLTA1LTMwIDE5OjE4ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsIHNubXBsaWIvc25tcC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBVc2UgYSB2b2lkIGFyZ3VtZW50IGZvciB0aGUgZGF0YSBhcmd1bWVudCBvZgorICAgeGR1bXAuCisKKzIwMTAtMDUtMzAgMTk6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmM6CisKKyAgIENIQU5HRVM6IEJVRzogMjA1MTc0MjogYWRkZWQgbWlzc2luZyBQRVJMX1NZU19JTklUMygpIGNhbGwgKHNlZQorICAgYWxzbyBtYW4gcGVybGVtYmVkKS4KKworMjAxMC0wNS0zMCAxOToxNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyAoZnJlZSgpIGNhbGxlZCB3aXRob3V0IGJlaW5nIGRlY2xhcmVkCisgICBmaXJzdCkuCisKKzIwMTAtMDUtMzAgMTY6NTYgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IHNubXBsaWI6IERvIG5vdCByZXF1aXJlIHRoYXQgdGhlIFVEUCB0cmFuc3BvcnQgaXMgaW5jbHVkZWQuCisKKzIwMTAtMDUtMzAgMTI6MDAgIG1hZ2ZyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ29ycmVjdCBkZXBlbmRlbmNpZXMgYmV0d2VlbiB0cmFuc3BvcnRzLiBSZW1vdmUKKyAgIHVubmVjZXNzYXJ5IGluY2x1ZGVzLgorCisyMDEwLTA1LTMwIDA2OjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvZHVtbXkuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgbGlibmV0c25tcGhlbHBlcnMgaXMgbm90IGVtcHR5IHN1Y2ggdGhhdCBidWlsZGluZworICAgTmV0LVNOTVAgb24gQUlYIGFuZCBJUklYIGlzIGFnYWluIHBvc3NpYmxlLgorCisyMDEwLTA1LTI5IDA5OjUyICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODkwMjogd29ya3MgYWdhaW4gd2l0aG91dCBUQVA6Okhhcm5lc3MuCisKKzIwMTAtMDUtMjggMjM6MjMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBsb25nLWFnbyBicm9rZW4gdmVyYm9zaXR5CisKKzIwMTAtMDUtMjggMjM6MDUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBtb3JlIHByZXZpb3VzbHkgYnJva2VuIG9wdGlvbiByZW5hbWVzOyBjaGFuZ2UgLWQgdG8KKyAgIG1hc3Rlci1kaXJlY3RvcnkgYW5kIGFkZCBhcyBhIHJlYWwgYXJndW1lbnQKKworMjAxMC0wNS0yOCAyMzowNSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMyMHVkcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlOgorCisgICBtb3JlIG1pc3Npbmcgb2xkdWNkIHJlbmFtZXMKKworMjAxMC0wNS0yOCAyMjo1NyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5URVNUUywgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X29sZHVjZCwgCisgICAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTRzbm1wdjJjZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNjBzbm1wdjJjYnVsa2dldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTZzbm1wdjJjZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTlzbm1wdjJjbm9zdWNoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMHNubXB2M2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMjBzbm1wdjNidWxrZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI1c25tcHYzZ2V0U0hBREVTX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NGFnZW50djJjdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1NmFnZW50djJjbWludHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MHRyYXBkcGVybF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYxYWdlbnRwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MGNvbTJzZWNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEwYWdlbnR4Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTJhZ2VudHhzZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMnByb3h5c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMXNubXB2MmN2YWNtZ2V0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MnNubXB2M3ZhY21nZXRmYWlsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE2MHNubXBuZXRzdGF0X3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDIwMHNubXB2MmN3YWxrYWxsX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMxMHRjcF9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNTB1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlOgorCisgICByZW5hbWVkICdvbGR1Y2QnIHRvICdzaW1wbGUnIHRvIHB1dCBhIG1vcmUgcG9zaXRpdmUgc3BpbiBvbiB0aGVtCisKKzIwMTAtMDUtMjggMjI6NTQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SRUFETUUsIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBkb2N1bWVudGF0aW9uIGZvciB0aGUgdGVzdCBzdWl0ZQorCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHk6CisKKyAgIHJldmVydCB1bmludGVudGlvbmFuYWxseSBjb21taXR0ZWQgdGVzdCB0ZXN0CisKKzIwMTAtMDUtMjggMjI6NTMgIGhhcmRha2VyCisKKyAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYywgcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weToKKworICAgZnJlZSB2YXJpYWJsZXMgYWdhaW4KKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBmaXggd2Fsa3Mgc28gdGhhdCBtdWx0aXBsZSB3YWxrcyB0ZXJtaW5hdGUgcHJvcGVybHkKKworMjAxMC0wNS0yOCAyMjo1MyAgaGFyZGFrZXIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBwYXRjaCB0byBoYW5kbGUgdGVzdGluZyBvZiBsb29waW5nIG9mIG11bHRpcGxlIHZhcmJpbmRzIGluIGEgd2FsaworCisyMDEwLTA1LTI4IDIyOjUzICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIGluaXRhbCBwYXRjaCB0byBwcmV2ZW50IGxvb3Bpbmcgd2Fsa3MKKworMjAxMC0wNS0yOCAyMDo1MyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBpbXBsZW1lbnQgY2VydCBsb29rdXAgYnkgZmlsZW5hbWUKKworMjAxMC0wNS0yOCAwNzowMiAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfZGVidWcuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIGNvbnN0IGRlY2xhcmF0aW9ucyB0byB0aGUgZGlzYWJsZWQgdmVyc2lvbnMKKyAgIG9mIHRoZSBkZWJ1Z2dpbmcgY29kZSBhcyB3ZWxsLgorCisyMDEwLTA1LTI4IDAyOjEyICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5jOgorCisgICBhZGQgcGVyc2lzdGVuY2U7IGNoZWNrIGZvciBjb2wgbW9kcyB3aGlsZSByb3cgYWN0aXZlCisKKzIwMTAtMDUtMjggMDI6MTEgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oOgorCisgICBDSEFOR0VTOiBhZ2VudGxpYjogbmV3IGZ1bmN0aW9ucyB0byBtYWtlIHN0YXNoIHB0ciBhbmQgbmV3cm93CisgICBhdmFpbGFibGUgdG8KKyAgIHRhYmxlX2RhdGFzZXQgaGFuZGxlcnMKKyAgIG5vbmV3czogZml4IHR5cG87IHRhYnMgdG8gc3BhY2VzOyB1c2Ugc2l6ZW9mIGluc3RlYWQgb2YgY29uc3RhbnQKKworMjAxMC0wNS0yNyAxODo1OSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgsICAgCisgICAgICB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgV2luMzIgYnVpbGQgZml4ZXMuCisKKzIwMTAtMDUtMjcgMTg6MjQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgICJtYWtlIHRlc3QiIHdpdGhvdXQgVEFQOjpIYXJuZXNzICh3YXMgYnJva2VuIGJ5IHIxODgwMikuCisKKzIwMTAtMDUtMjcgMTU6MTUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgCisgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIHNubXBsaWIvbGNkX3RpbWUuYywgICAKKyAgICAgIHNubXBsaWIvbWQ1LmMsIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MuIE1vc3QgZml4ZXMgaW52b2x2ZWQgYWRkaW5nIHRoZQorICAgImNvbnN0IiBrZXl3b3JkLgorCisyMDEwLTA1LTI3IDEzOjUyICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyOTcyNTc5OiBmaXhlZCBjaGVja2luZyBvZgorICAgc25tcFRhcmdldEFkZHJSb3dTdGF0dXMgU0VUIHJlcXVlc3RzLgorCisyMDEwLTA1LTI3IDEzOjQxICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1bjoKKworICAgcmV2ZXJ0IHBhcnQgb2YgMTg4ODU6IHRlc3QgZmlsZXMgc2hvdWxkIGJlIGFibGUgdG8gYmUgcnVuIGJ5CisgICB0aGVtc2VsdmVzIHRvbworCisyMDEwLTA1LTI3IDExOjE5ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaDoKKworICAgQ0hBTkdFUzogY29ycmVjdGx5IGNhbGN1bGF0ZSBpZlhUYWJsZS5pZkhDSW5VY2FzdFBrdHMgb24gMzItYml0CisgICBMaW51eAorICAgCisgICBMaW51eCBkb2VzIG5vdCBwcm92aWRlIHN0YW5kYWxvbmUgY291bnRlciBmb3IgaW5jb21pbmcgdW5pY2FzdAorICAgcGFja2V0cyAoaXVjYXN0KQorICAgLSBpdCBwcm92aWRlcyBjb3VudGVyIG9mIGFsbCBwYWNrZXRzIChpYWxsKSArIHNlcGFyYXRlIGNvdW50ZXIKKyAgIGZvciB0aGUgbXVsdGljYXN0CisgICBvbmVzIChpbWNhc3QpLiBQcmV2aW91cyBpbXBsZW1lbnRhdGlvbiBvZiBpZlRhYmxlIHJlYWQgdGhlc2UKKyAgIGNvdW50ZXJzIGFuZAorICAgY2FsY3VsYXRlZCBpdWNhc3QgPSBpYWxsIC0gaW1jYXN0ICpiZWZvcmUqIHRoZXNlIHZhbHVlcyB3ZXJlCisgICBleHBhbmRlZCBpbnRvCisgICA2NGJpdHMuIFRoaXMgcHJvZHVjZWQgZXJyb3JzIG9uIDMyYml0IHN5c3RlbXMgd2hlbiBpYWxsCisgICBvdmVyZmxvd2VkIHRvIHplcm8gYW5kCisgICBpbWNhc3Qgd2FzIG5vemVybyAtPiBpdWNhc3QgZ290IG5lZ2F0aXZlIGFuZCAnYzY0IDMyIGJpdCBjaGVjaworICAgZmFpbGVkJyBlcnJvciBpbgorICAgc25tcGQgbG9nLiBOb3cgdGhlIGFnZW50IGV4cGFuZHMgdGhlc2UgdmFsdWVzIHRvIDY0Yml0cyBmaXJzdCBhbmQKKyAgICogICAgICp0aGVuKiBwZXJmb3JtcyAgICB0aGUgY2FsY3VsYXRpb24sIHVzaW5nIGEgbmV3IGZsYWcuIAorICAgICAgMjAxMC0wNS0yNyAwODoxOCAgbWFnZnIKKworCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgdGVzdGluZy9SVU5URVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfcnVuOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBNb3ZlIHRoZSBzZXR0aW5nIG9mIE1JQkRJUlMgZnJvbSB0aGUgc3VwcG9ydAorICAgc2NyaXB0IHRvIHRoZSBkcml2ZXJzIHNpbmNlIGl0IGlzIG5lZWRlZCBmb3IgdGhlIEMgdGVzdHMgYXMgd2VsbC4KKworMjAxMC0wNS0yNyAwODowOSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBVc2Ugb2xkdWNkX3J1biwgbm90IHJ1bl9vbGR1Y2QuIENoYW5nZSBzcmNkaXIKKyAgIHRvIHJlZmVyIHRvIHRoZSB0b3AgZGlyZWN0b3J5IGFuZCBub3QgdGhlIHRlc3Rpbmcgc3ViZGlyZWN0b3J5IGFzCisgICB0aGF0IGlzIHdoYXQgaXMgZXhwZWN0ZWQgaW4gdGhlIHRlc3Qgc2NyaXB0cy4KKworMjAxMC0wNS0yNyAwNToxNyAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgd2FybmluZyBzcXVhc2hpbmcKKworMjAxMC0wNS0yNyAwNToxNiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCwgc25tcGxpYi9rZXl0b29scy5jLCAgIAorICAgICAgc25tcGxpYi9sY2RfdGltZS5jOgorCisgICBtb3JlIGNvbnN0IGNvcnJlY3RuZXNzCisKKzIwMTAtMDUtMjcgMDQ6MTggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIHRlc3RzIGZvciBhZ2VudC1ub3Qta25vd24tdXNlci1jZXJ0aWZpY2F0ZXMKKworMjAxMC0wNS0yNyAwNDoxNiAgaGFyZGFrZXIKKworICAgKiBSRUFETUUuc25tcHYzOgorCisgICByZWZlcmVuY2UgdGhlIGl0bmVybmFsIHN1cHBvcnQgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgorCisyMDEwLTA1LTI3IDA0OjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbC9PUEVOU1NMLUxJQ0VOU0UsIHNubXBsaWIvb3BlbnNzbC9SRUFETUU6CisKKyAgIGludGVybmFsIE9wZW5TU0wgc3VwcG9ydCBkb2N1bWVudGF0aW9uCisKKzIwMTAtMDUtMjcgMDQ6MTYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgTkVXUzogbGlibmV0c25tcDogU3VwcG9ydCBmb3IgYSBzdHJlYW0tbGluZSBzdHJpcHBlZCBkb3duIHZlcnNpb24KKyAgIG9mIGludGVybmFsIE9wZW5TU0wgc3VwcG9ydCB1c2luZyAtLXdpdGgtb3BlbnNzbD1pbnRlcm5hbAorCisyMDEwLTA1LTI3IDA0OjE1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYywgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmgsIAorICAgICAgICBzbm1wbGliL3NjYXBpLmM6CisKKyAgIHJlbW92ZSBtb3JlIGRlcGVuZGVuY2llcyBmb3IgZXh0ZXJuYWwgb3BlbnNzbCBoZWFkZXJzCisKKzIwMTAtMDUtMjcgMDQ6MTUgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsIHNubXBsaWIvb3BlbnNzbCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbWQ1LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDVfbG9jYWwuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21vZGVzLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jLCBzbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGEuaCwgCisgICAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc3ByLmgsIHNubXBsaWIvb3BlbnNzbF9hZXNfY2ZiLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfYWVzX2NvcmUuYywgc25tcGxpYi9vcGVuc3NsX2Flc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX2NiY19lbmMuYywgc25tcGxpYi9vcGVuc3NsX2NmYjEyOC5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX2Rlc19lbmMuYywgc25tcGxpYi9vcGVuc3NsX2Rlc19sb2NhbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kMzJfY29tbW9uLmgsIHNubXBsaWIvb3BlbnNzbF9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDVfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX21vZGVzLmgsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbmNiY19lbmMuYywgc25tcGxpYi9vcGVuc3NsX3NldF9rZXkuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGEuaCwgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGFfbG9jYWwuaCwgc25tcGxpYi9vcGVuc3NsX3Nwci5oOgorCisgICBtb3ZlIG9wZW5zc2wgY29kZSBpbnRvIGEgc3ViZGlyZWN0b3J5CisKKzIwMTAtMDUtMjcgMDQ6MTMgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI2c25tcHYzZ2V0U0hBQUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9vbGR1Y2Q6CisKKyAgIGZpeCB0ZXN0aW5nIHNvIGl0IHVzZXMgbXVsdGlwbGUgdHlwZXMgb2YgY3J5cHRvCisKKzIwMTAtMDUtMjcgMDQ6MTMgIGhhcmRha2VyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBkZWZpbml0aW9ucyBhbmQgZmlsZXMgZm9yIGRvaW5nIGludGVybmFsIGNyeXB0byBzdXBwb3J0CisKKzIwMTAtMDUtMjcgMDQ6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zY2FwaS5jOgorCisgICBpbmNsdWRlIGludGVybmFsIGFlcy9kZXMgaGVhZGVycworCisyMDEwLTA1LTI3IDA0OjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9jZmIxMjguYzoKKworICAgbG9jYWxpemUKKworMjAxMC0wNS0yNyAwNDoxMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfY2ZiMTI4LmMsIHNubXBsaWIvb3BlbnNzbF9tb2Rlcy5oOgorCisgICBpbml0YWwgY29waWVzIG9mIGNmYjEyOCBtb2RlcyBmcm9tIG9wZW5zc2wKKworMjAxMC0wNS0yNyAwNDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfYWVzX2NvcmUuYzoKKworICAgbG9jYWxpemUKKworMjAxMC0wNS0yNyAwNDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfYWVzX2NvcmUuYywgc25tcGxpYi9vcGVuc3NsX2Flc19sb2NhbC5oOgorCisgICBpbml0aWFsIHZlcnNpb25zIG9mIGFlc19jb3JlLmMgYW5kIGFlc19sb2NsLmgKKworMjAxMC0wNS0yNyAwNDoxMCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaDoKKworICAgaW5pdGlhbCBjb3B5IG9mIGFlcy5oIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjEwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9hZXNfY2ZiLmM6CisKKyAgIGluaXRpYWwgY29weSBvZiB0aGUgb3BlbnNzbCBhZXNfY2ZiLmMgZmlsZQorCisyMDEwLTA1LTI3IDA0OjEwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9kZXNfZW5jLmM6CisKKyAgIGluY2x1ZGUgbG9jYWxpemVkIGNvcGllcyBvZiB0aGUgZmlsZXMKKworMjAxMC0wNS0yNyAwNDowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NjYXBpLmM6CisKKyAgIHVzZSBpbnRlcm5hbCBERVMKKworMjAxMC0wNS0yNyAwNDowOSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfY2JjX2VuYy5jOgorCisgICBsb2NhbGl6ZWQgY29weSBvZiB0aGUgY2JjX2VuYy5jIGZpbGUgZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MDkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX3Nwci5oOgorCisgICBkZXMvc3ByLmggZnJvbSBvcGVuc3NsCisKKzIwMTAtMDUtMjcgMDQ6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9vcGVuc3NsX2Rlc19lbmMuYzoKKworICAgYWRkZWQgZGVzX2VuYy5jIGZyb20gb3BlbnNzbAorCisyMDEwLTA1LTI3IDA0OjA4ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmg6CisKKyAgIGxvY2FsIGNvcGllcyBvZiB0aGUgb3BlbnNzbCBoZWFkZXJzCisKKzIwMTAtMDUtMjcgMDQ6MDcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmg6CisKKyAgIGluaXRpYWwgY29weSBvZiBvcGVuc3NsJ3MgZGVzLmgKKworMjAxMC0wNS0yNyAwNDowNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL29wZW5zc2xfbmNiY19lbmMuYywgc25tcGxpYi9vcGVuc3NsX3NldF9rZXkuYzoKKworICAgbG9jYWxpemVkIGhlYWRlciBmaWxlcworCisyMDEwLTA1LTI3IDA0OjA3ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL29wZW5zc2xfZGVzX2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9uY2JjX2VuYy5jLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX3NldF9rZXkuYzoKKworICAgaW5pdGFsIGNvcGllcyBvZiBzb21lIG9mIHRoZSBvcGVuc3NsIERFUyBmaWxlcworCisyMDEwLTA1LTI3IDA0OjA2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgc25tcGxpYi9zY2FwaS5jOgorCisgICBmaW5pc2hpbmcgcG9ydGluZyBvZiBpbnRlcm5hbCBhdXRoIHN1cHBvcnQKKworMjAxMC0wNS0yNyAwNDowNiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBhZGQgaW50ZXJuYWwgY3J5cHRvIGZpbGVzIHRvIHRoZSBjaGVjay91c2UgbGlzdAorCisyMDEwLTA1LTI3IDA0OjA2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL21kMzJfY29tbW9uLmgsIHNubXBsaWIvbWQ1X2xvY2wuaCwgICAKKyAgICAgIHNubXBsaWIvb3BlbnNzbF9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL29wZW5zc2xfbWQ1LmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfbWQ1X2xvY2FsLmgsIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsICAgCisgICAgICBzbm1wbGliL29wZW5zc2xfc2hhX2xvY2FsLmgsIHNubXBsaWIvc2hhX2xvY2wuaDoKKworICAgbG9jYWxpemVkIGZpbGUgbmFtZXMgd2l0aCBvcGVuc3NsIHByZWZpeGVzCisKKzIwMTAtMDUtMjcgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvb3BlbnNzbF9tZDUuaCwgc25tcGxpYi9tZDVfbG9jbC5oLCAgIAorICAgICAgc25tcGxpYi9vcGVuc3NsX21kNS5jOgorCisgICBsb2NhbGl6ZSB0aGUgbWQ1IGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDUtMjcgMDQ6MDUgIGhhcmRha2VyCisKKyAgICogIHNubXBsaWIvb3BlbnNzbF9zaGEuaCwgc25tcGxpYi9vcGVuc3NsX3NoYTEuYywgICAKKyAgICAgIHNubXBsaWIvc2hhX2xvY2wuaDoKKworICAgY29tcGxldGVseSBsb2NhbGl6ZSB0aGUgb3BlbnNzbCBTSEEgc3VwcG9ydAorCisyMDEwLTA1LTI3IDA0OjA0ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvb3BlbnNzbF9zaGEuaDoKKworICAgaW5pdGlhbCB2ZXJpc29uIG9mIHNoYS5oIGNvcHkKKworMjAxMC0wNS0yNyAwNDowNCAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9tZDMyX2NvbW1vbi5oLCBzbm1wbGliL21kNV9sb2NsLmgsIHNubXBsaWIvb3BlbnNzbF9tZDUuYywgCisgICAgICAgIHNubXBsaWIvb3BlbnNzbF9zaGExLmMsIHNubXBsaWIvc2hhX2xvY2wuaDoKKworICAgYWRkZWQgbG9jYWwgY29waWVzIG9mIHRoZSBvcGVuc3NsIGNyeXB0byBmdW5jdGlvbnMKKworMjAxMC0wNS0yNyAwNDowNCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIG1ha2UgdXNlIG9mIGludGVybmFsIGNyeXB0byBoYXNoIGZ1bmN0aW9ucworCisyMDEwLTA1LTI3IDA0OjAzICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBjb25maWd1cmUgY2hlY2tzIGZvciBpbnRlcm5hbC1jcnlwdG8gc3VwcG9ydAorCisyMDEwLTA1LTI2IDIyOjE3ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBwcm9wZXJseSB2ZXJpZnkgZXhwZWN0ZWQgc2VydmVyIGNlcnRpZmljYXRlcyB1bmRlciBEVExTOyBhZGQgYQorICAgbmV3IGZsYWcgaW4gdGxzYmFzZSB0byBpbmRpY2F0ZSB2ZXJpZmljYXRpb24gaGFzIG9jY3VycmVkCisKKzIwMTAtMDUtMjYgMjE6MDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgY29tcGlsZXIgd2FybmluZyBzcXVhc2hpbmcKKworMjAxMC0wNS0yNiAyMTowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaCwgc25tcGxpYi9sY2RfdGltZS5jLCAgIAorICAgICAgc25tcGxpYi9zY2FwaS5jOgorCisgICBhZGQgY29uc3QgcXVhbGlmaWVycyB0byBhIGZldyBwbGFjZXMKKworMjAxMC0wNS0yNiAxOTo0NiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGxpYm5ldHNubXBtaWJzLCBsaWJuZXRzbm1waGVscGVycyBhbmQKKyAgIGxpYm5ldHNubXBhZ2VudCBkbyBub3cgYnVpbGQgYXMgYSBETEwgd2hlbiBjb25maWd1cmVkIHdpdGgKKyAgIC0tZW5hYmxlLXNoYXJlZC4KKworMjAxMC0wNS0yNiAxNzo0NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKKworICAgTkVXUzogbW92ZWQgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGxpYm5ldHNubXBoZWxwZXJzIHRvCisgICBsaWJuZXRzbm1wYWdlbnQuIGxpYm5ldHNubXBoZWxwZXJzIGlzIG5vdyBhbiBlbXB0eSBsaWJyYXJ5LgorCisyMDEwLTA1LTI2IDE3OjIwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvYnVsa190b19uZXh0LmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9udWxsLmMsIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9udWxsLmMsICAgCisgICAgICBhZ2VudC9vbGRfYXBpLmM6CisKKyAgIFJldmVydGVkIHIxODgyOSBpbiBvcmRlciB0byBtaW5pbWl6ZSBkaWZmcyB3aXRoIG9sZGVyIGJyYW5jaGVzLgorCisyMDEwLTA1LTI1IDA3OjIzICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgVGVsbCBuZXQtc25tcC1jZXJ0IHdoZXJlIG5ldC1zbm1wLWNvbmZpZyBpcyBsb2NhdGVkCisKKzIwMTAtMDUtMjUgMDc6MTQgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBDb3JyZWN0IHRoZSBzaWduYXR1cmUgb2YgbWFpbi4gVXNlICNpbmNsdWRlIGluc3RlYWQgb2Ygc291cmNpbmcKKyAgIHRvIGdldCB0aGUgY29kZSB1bmRlciB0ZXN0IGluIG9yZGVyIHRvIGdldCBiZXR0ZXIgZXJyb3IgbWVzc2FnZXMKKworMjAxMC0wNS0yNSAwNzoxMSAgbWFnZnIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOgorCisgICBBZGQgYXJndW1lbnRzIHRvIHNwcmludGYgc3RhdGVtZW50cyB0byBtYWtlIHRoZSB0ZXN0IHdvcmsKKworMjAxMC0wNS0yNSAwNzowNyAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzIGFuZCBkaXNhYmxlZCBjb2RlCisKKzIwMTAtMDUtMjUgMDU6MjAgIG1hZ2ZyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogU3BsaXQgc25tcElQQmFzZURvbWFpbiBhbmQgbW92ZSB0aGUgSVB2NCBwYXJ0cworICAgdG8gSVB2NEJhc2UgYW5kIHRoZSBzb2NrZXQgZ2VuZXJpYyBwYXJ0cyB0byBTb2NrZXRCYXNlLgorCisyMDEwLTA1LTI0IDIwOjI0ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmc7IGZpbmlzaCB0bHN0bVBhcmFtc1RhYmxlIGxhc3RDaGFuZ2VkIHNjYWxhcgorCisyMDEwLTA1LTI0IDE5OjI4ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhcHBfYnVpbGQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQ6CisKKyAgIEFkZCAtLWV4dGVybmFsLWxpYnMgaW4gb3JkZXIgdG8gc3VwcG9ydCBidWlsZGluZyB0aGUgdGVzdHMgb24KKyAgIHNvbGFyaXMKKworMjAxMC0wNS0yNCAxMzozMyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmM6CisKKyAgIGFyZ2guLiBmaXggZmFsbG91dCBmcm9tIG1hbnVhbGx5IChtaXMpYXBwbHlpbmcgcGF0Y2gKKworMjAxMC0wNS0yNCAxMjo1OSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmg6CisKKyAgIGZpcnN0IHBhc3MgYXQgdGxzdG1QYXJhbXNUYWJsZQorCisyMDEwLTA1LTI0IDEyOjU5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuYywgCisgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgdXBkYXRlIGRlZmluZXMgdG8gbWF0Y2ggTUlCIG5hbWVzLCBwZXIgZ3JhbmQtcG9vYmFoCisKKzIwMTAtMDUtMjQgMTI6NTggIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYzoKKworICAgdXBkYXRlIE9JRCB0byBtYXRjaCB1cGNvbWluZyBSRkMKKworMjAxMC0wNS0yNCAxMTo0OCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2J1bGtfdG9fbmV4dC5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvbnVsbC5jLCBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvbnVsbC5jLCAgIAorICAgICAgYWdlbnQvb2xkX2FwaS5jOgorCisgICBDSEFOR0VTOiBsaWJuZXRzbm1wYWdlbnQsIGxpYm5ldHNubXBoZWxwZXJzOiBtb3ZlZCB0aGUgZnVuY3Rpb25zCisgICBuZXRzbm1wX2J1bGtfdG9fbmV4dF9maXhfcmVxdWVzdHMoKSwKKyAgIG5ldHNubXBfZ2V0X2J1bGtfdG9fbmV4dF9oYW5kbGVyKCksIG5ldHNubXBfcmVnaXN0ZXJfbnVsbCgpLAorICAgbmV0c25tcF9yZWdpc3Rlcl9udWxsX2NvbnRleHQoKSBhbmQgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKCkKKyAgIGZyb20gbGlibmV0c25tcGhlbHBlcnMgdG8gbGlibmV0c25tcGFnZW50LgorICAgTm90ZXM6CisgICAtIFRoaXMgZG9lcyBub3QgYWZmZWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGZvciBhcHBsaWNhdGlvbnMKKyAgIHRoYXQgbGluayB3aXRoICQobmV0LXNubXAtY29uZmlnIC0tYWdlbnQtbGlicykgc2luY2UgdGhpcworICAgaW52b2x2ZXMgbGlua2luZyB3aXRoIGJvdGggbGlibmV0c25tcGhlbHBlcnMgYW5kIGxpYm5ldHNubXBhZ2VudC4KKyAgIC0gRnVuY3Rpb25zIGhhdmUgYmVlbiBtb3ZlZCBiZXR3ZWVuIGxpYnJhcmllcyBieSBtb3ZpbmcgZW50aXJlCisgICBzb3VyY2UgZmlsZXMuCisKKzIwMTAtMDUtMjQgMTA6MTAgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jOgorCisgICBVc2UgcHJvcGVyIHN0cmluZyBzaXplcyBhbmQgbWFrZSBzdXJlIHN0cmluZ3MgYXJlCisgICB6ZXJvLXRlcm1pbmF0ZWQuCisKKzIwMTAtMDUtMjQgMDg6MDEgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCBuZXQtc25tcC1jb25maWcuaW4sICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGxpYm5ldHNubXAgZG9lcyBub3cgYnVpbGQgYXMgYSBETEwgd2hlbgorICAgY29uZmlndXJlZCB3aXRoIC0tZW5hYmxlLXNoYXJlZC4KKyAgIENIQU5HRVM6IEN5Z3dpbjogcGVybCBtb2R1bGVzIGRvIG5vdyBidWlsZCAoLS13aXRoLXBlcmwtbW9kdWxlcykuCisgICBOb3RlOiB0aGUgVDA2MHRyYXBkcGVybF9vbGR1Y2QsIFQwNjFhZ2VudHBlcmxfb2xkdWNkIGFuZAorICAgVDExNWFnZW50eHBlcmxfb2xkdWNkIHRlc3RzIHN0aWxsIGZhaWwuCisKKzIwMTAtMDUtMjMgMjM6MDYgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlX3BlcnNpc3QuYzoKKworICAgdXBkYXRlIGZpbGVuYW1lcy9wYXRzaCBmb3IgcmVjZW50IGZpbGUgcmVuYW1lczsgZml4IHR5cG9zCisKKzIwMTAtMDUtMjMgMjI6MDggIG1hZ2ZyCisKKyAgICogIG5ldC1zbm1wLWNvbmZpZy5pbiwgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIHRoZSBzYW1lIGNvbXBpbGVyIGNvbW1hbmQgYW5kIGZsYWdzIGZvcgorICAgYnVpbGRpbmcgb2YgdGVzdHMgYXMgZm9yIGJ1aWxkaW5nIG9mIHRoZSBjb2RlLCB0aHVzIGVuYWJsaW5nIHRlc3QKKyAgIG9mIGUuZy4gMzItYml0IGNvZGUgY29tcGlsZWQgb24gYSA2NC1iaXQgcGxhdGZvcm0uCisKKzIwMTAtMDUtMjMgMjE6NDEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgdXBkYXRlIGluY2x1ZGUvY29uZmlnIGZpbGUvcGF0aHMgZm9yIHJlY2VudCByZW5hbWVzCisKKzIwMTAtMDUtMjMgMjE6MzEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUuaDoKKworICAgcmVuYW1lIGZpbGVzIGZvciBNSUIgcmVuYW1lcworCisyMDEwLTA1LTIzIDIxOjI1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlOgorCisgICByZW5hbWUgZGlyZWN0b3JpZXMgdG8gbWF0Y2ggcmVuYW1lcyBpbiBNSUIKKworMjAxMC0wNS0yMCAwODo0OCAgYnZhc3NjaGUKKworICAgKiBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIFN3YXBwZWQgbGluayBvcmRlciBvZiAtbG5ldHNubXBoZWxwZXJzIC1sbmV0c25tcG1pYnM6IG5ldHNubXBtaWJzCisgICBkZXBlbmRzIG9uIG5ldHNubXBoZWxwZXJzIGFuZCBub3QgdGhlIG90aGVyIHdheSBhcm91bmQuCisKKzIwMTAtMDUtMjAgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogIGFwcHMvc25tcHRyYXBkX2xvZy5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIG1vcmUgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDUtMTkgMTg6MjYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCBzdGFzaGluZworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmM6CisKKyAgIG91dHB1dCBmaWxlbmFtZXMgb2YgZmFpbGVkIHRlc3RzCisKKzIwMTAtMDUtMTkgMTg6MjUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHdpcGUgdHJhaWxpbmcgY29tbWVudCBDIG1hcmtlciBpZiBpdCBleGlzdHMKKworMjAxMC0wNS0xOSAxODoyNSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgdGl0bGUgdGhlIFNOTVB2MyB0ZXN0cworCisyMDEwLTA1LTE5IDE4OjI1ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBmaXggdGVzdGluZyBvZiBidWlsdCB0aXRsZXMKKworMjAxMC0wNS0xOSAxODoyNCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgb25seSBwcmludCBmYWlsdXJlIGhlYWRlciBpZiB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lCisKKzIwMTAtMDUtMTkgMTg6MjQgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybWF1dGhfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9vbGR1Y2Q6CisKKyAgIG1ha2UgZGVzY3JpcHRpdmUgdGl0bGVzIHdvcmsgYWdhaW4KKworMjAxMC0wNS0xOSAxODoyNCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9SVU5GVUxMVEVTVFMsIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2xpYiwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX3J1biwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvcnVuX29sZHVjZDoKKworICAgcmVuYW1lIGZpbGVzIHNvIHByZWZpeGluZyBpcyBiYXNlZCBvbiB0aGUgc3VpdGUgbmFtZSwgbm90IGZpbGUKKyAgIHR5cGUKKworMjAxMC0wNS0xOSAxNzo1MiAgYnZhc3NjaGUKKworICAgKiAgcGVybC9BU04vTWFrZWZpbGUuUEwsIHBlcmwvTWFrZWZpbGUuUEwsIHBlcmwvTWFrZWZpbGUuc3Vicy5wbCwgICAKKyAgICAgIHBlcmwvT0lEL01ha2VmaWxlLlBMLCBwZXJsL1NOTVAvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogQ3lnd2luOiBwZXJsOiBidWlsZGluZyB0aGUgUGVybCBtb2R1bGVzIHdpdGggdGhlIEN5Z3dpbgorICAgUGVybCBwYWNrYWdlIGlzIG5vdyBwb3NzaWJsZS4KKyAgIChGb3J3YXJkLXBvcnRlZCByMTg2ODggZnJvbSB0aGUgVjUuNSBicmFuY2guKQorCisyMDEwLTA1LTE5IDE3OjUwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYzoKKworICAgRml4ZWQgeWV0IGFub3RoZXIgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNS0xOSAxMjowNSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jOgorCisgICBGaXJzdC1kcmFmdCBzdXBwb3J0IGZvciBBSVggZmlsZXN5c3RlbSBIQUwgbW9kdWxlICh1bnRlc3RlZCkKKworMjAxMC0wNS0xOSAxMToyNSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmM6CisKKyAgIFN1cHBvcnQgZm9yIFNvbGFyaXMtc3R5bGUgJ2dldG1udGVudCcgQVBJLgorCisyMDEwLTA1LTE5IDA5OjU3ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmg6CisKKyAgIFNpbXBsaWZ5IHRoZSBoYW5kbGluZyBvZiB1bmtub3duL3Vud2FudGVkIGZpbGUgc3lzdGVtcy4KKworMjAxMC0wNS0xOSAwOTozMCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBGaXggbWlzc2luZy9icm9rZW4gQVBJIGRlY2xhcmF0aW9ucy4KKworMjAxMC0wNS0xOSAwODo0NiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIE1hZGUgZXJyb3IgbWVzc2FnZXMgbW9yZSBjbGVhciBpbiBjYXNlIG9mIGZhaWx1cmUgb3Igd3JvbmcKKyAgIGludm9jYXRpb24uCisKKzIwMTAtMDUtMTkgMDA6MDEgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBhZGRlZCB0ZXN0IGZvciB1c2luZyBhIGNlcnRpZmljYXRlIHNpZ25lZCBieSBhIENBIGNlcnRpZmljYXRlCisKKzIwMTAtMDUtMTggMjM6MzEgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBtYWtlIHN1cmUgd2UgY2FsbCB0aGUgcmlnaHQgUGVybAorCisyMDEwLTA1LTE4IDIwOjM5ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogaW5jbHVkZSBsb2NhbCBwb3J0IG51bWJlciBpbiBwYWNrZXQgZHVtcHMuIEFuCisgICBleGFtcGxlOgorICAgCisgICBSZWNlaXZlZCAzNiBieXRlIHBhY2tldCBmcm9tIFVEUDoKKyAgIFsxMjcuMC4wLjFdOjUzOTA5LT5bMTI3LjAuMC4xXToxMTYxCisgICAwMDAwOiAzMCAyMiAwMiAwMSAwMSAwNCAwNiA3MCA3NSA2MiA2QyA2OSA2MyBBMSAxNSAwMgorICAgMCIuLi4uLnB1YmxpYy4uLgorICAgMDAxNjogMDQgMzcgRjIgRDQgOUIgMDIgMDEgMDAgMDIgMDEgMDAgMzAgMDcgMzAgMDUgMDYKKyAgIC43Li4uLi4uLi4uMC4wLi4KKyAgIDAwMzI6IDAxIDAxIDA1IDAwIC4uLi4KKyAgIAorICAgUmVjZWl2ZWQgU05NUCBwYWNrZXQocykgZnJvbSBVRFA6CisgICBbMTI3LjAuMC4xXTo1MzkwOS0+WzEyNy4wLjAuMV06MTE2MQorICAgR0VUTkVYVCBtZXNzYWdlCisgICAtLSBjY2l0dC4xCisgICAKKyAgIFNlbmRpbmcgMTE4IGJ5dGVzIHRvIFVEUDogWzEyNy4wLjAuMV06NTM5MDktPlsxMjcuMC4wLjFdOjExNjEKKyAgIDAwMDA6IDMwIDc0IDAyIDAxIDAxIDA0IDA2IDcwIDc1IDYyIDZDIDY5IDYzIEEyIDY3IDAyCisgICAwdC4uLi4ucHVibGljLmcuCisgICAwMDE2OiAwNCAzNyBGMiBENCA5QiAwMiAwMSAwMCAwMiAwMSAwMCAzMCA1OSAzMCA1NyAwNgorICAgLjcuLi4uLi4uLi4wWTBXLgorICAgMDAzMjogMDggMkIgMDYgMDEgMDIgMDEgMDEgMDEgMDAgMDQgNEIgNEMgNjkgNkUgNzUgNzgKKyAgIC4rLi4uLi4uLi5LTGludXgKKyAgIDAwNDg6IDIwIDYxIDczIDc1IDczIDIwIDMyIDJFIDM2IDJFIDMzIDMzIDJFIDMyIDJEIDczIGFzdXMKKyAgIDIuNi4zMy4yLXMKKyAgIDAwNjQ6IDYzIDczIDc0IDIwIDIzIDMxIDIwIDUzIDREIDUwIDIwIDUwIDUyIDQ1IDQ1IDREIGNzdCAjMSBTTVAKKyAgIFBSRUVNCisgICAwMDgwOiA1MCA1NCAyMCA1MyA2MSA3NCAyMCA0MSA3MCA3MiAyMCAzMyAyMCAzMiAzMSAzQSBQVCBTYXQgQXByCisgICAzIDIxOgorICAgMDA5NjogMzEgMzAgM0EgMzUgMzggMjAgNDMgNDUgNTMgNTQgMjAgMzIgMzAgMzEgMzAgMjAgMTA6NTggQ0VTVAorICAgMjAxMAorICAgMDExMjogNzggMzggMzYgNUYgMzYgMzQgeDg2XzY0CisKKzIwMTAtMDUtMTggMTk6NDIgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9pbnRlcm5hbC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZV9wZXJzaXN0LmMsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5jOgorCisgICB1cGRhdGUgdGxzdG1BZGRyVGFibGUKKyAgIC0gZGVhbCB3aXRoIGhhc2ggdHlwZSBwcm9wZXJseSBmb3IgZ2V0L3NldCBhbmQgcGVyc2lzdGVuY2UKKyAgIC0gYWRkIGNvdW50IGFuZCBsYXN0IGNoYW5nZWQgc2NhbGFycworCisyMDEwLTA1LTE4IDE5OjA4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYzoKKworICAgdXBkYXRlIHRvIG9mZmljYWwgT0lEIGZyb20gdXBjb21pbmcgcmZjCisKKzIwMTAtMDUtMTggMTY6MTYgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYzoKKworICAgdXBkYXRlIHRvIG9mZmljaWFsIE9JRHMgZnJvbSB1cGNvbWluZyBSRkM7IGFkZCBjb3VudC9sYXN0IGNoYW5nZWQKKyAgIHNjYWxhcnMKKworMjAxMC0wNS0xOCAxNDo1NiAgZHRzMTIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyMDAxNjU2OiBIYW5kbGUgbnVsbC10ZXJtaW5hdGlvbiBvZgorICAgc3RyaW5nIHZhbHVlcyBwcm9wZXJseS4KKyAgIEJhc2VkIG9uIHRoZSBwcmluY2lwbGVzIG9mIHRoZSBwYXRjaCBmcm9tIFRvbW15IEJlYWRsZS4KKworMjAxMC0wNS0xOCAxNDozOCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmgsIGFnZW50L21pYmdyb3VwL2hvc3QuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBXb3JraW5nKD8pIEhBTC1iYXNlZCB2ZXJzaW9uIG9mIGhyRlNUYWJsZS4KKworMjAxMC0wNS0xOCAxNDoxMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAxMC0wNS0xNyAyMTowMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaDoKKworICAgdXNlIHByb3BlciBUU00gc2VjdXJpdHkgY29kZSAoNCkgbm93IHRoYXQgaXQncyBvZmZpY2lhbAorCisyMDEwLTA1LTE3IDE4OjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwMmNvbnRhaW5lcnNfY2xpYi5jOgorCisgICBiZWdpbm5pbmcgb2YgYSBjb250YWluZXIgdW5pdCB0ZXN0CisKKzIwMTAtMDUtMTcgMTg6NDMgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaDoKKworICAgYSBiYXNpYyBDLWNvZGUgYmFzZWQgdGVzdCByZXBvcnRpbmcgbWVjaGFuaXNtCisKKzIwMTAtMDUtMTcgMTg6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jOgorCisgICBiYXNpYyBkZWZhdWx0X3N0b3JlIHRlc3RzCisKKzIwMTAtMDUtMTcgMTg6NDIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jbGliOgorCisgICBhIGJ1aWxkIHN5c3RlbSBmb3IgYmFzaWMgbGlibmV0c25tcCB0ZXN0cworCisyMDEwLTA1LTE3IDE4OjE0ICByc3RvcnkKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlL3Rsc3RtQ2VydFRvVFNOVGFibGUuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgZml4IGZpbmdlcnByaW50IGJpbi9oZXggY29udmVyc2lvbjsgYWRkL3JlbW92ZSBjZXJ0IHNlYyBtYXBzIHZpYQorICAgbWliIG5vdyB3b3JrcworCisyMDEwLTA1LTE3IDE4OjEzICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgc25tcGxpYi90b29scy5jOgorCisgICBuZXcgZnVuY3Rpb24gbmV0c25tcF9iaW5hcnlfdG9faGV4CisKKzIwMTAtMDUtMTcgMTg6MTMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBmcHJpbnRmKHN0ZGVyciAtPiBERUJVR01TR1RMKCgKKworMjAxMC0wNS0xNyAxODoxMiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW92ZSBjaGVjayBmb3IgaGFzaCB0eXBlCisKKzIwMTAtMDUtMTcgMTY6MzQgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgbWFrZSBSVU5URVNUUyB3b3JrIG91dHNpZGUgdGhlIHNvdXJjZWRpcgorCisyMDEwLTA1LTE3IDE1OjM3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVOVEVTVFM6CisKKyAgIG1hZGUgYSBsaW1pdGVkIHJ1biB0ZXN0IHBvc3NpYmxlIGFnYWluIHdpdGhvdXQgcGVybAorCisyMDEwLTA1LTE3IDE1OjMyICBkdHMxMgorCisgICAqICB3aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmgsIHdpbjMyL21pYl9tb2R1bGVfaW5pdHMuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwOgorCisgICBVc2UgbmV3ZXIgRGlzTWFuIEV2ZW50IE1JQiBjb2RlIGZvciBNU1ZDLWJhc2VkIGJ1aWxkcworICAgKGluIGxpbmUgd2l0aCBhbGwgY29uZmlndXJlLWJhc2VkIGJ1aWxkcykKKworMjAxMC0wNS0xNyAxNToyMyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZSB0aGUgcmV0dXJuIG91dHNpZGUgdGhlIGlmIHN0YXRlbWVudAorCisyMDEwLTA1LTE3IDE1OjE4ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oOgorCisgICBQcm92aWRlIG1pc3NpbmcgcHVibGljIGludGVyZmFjZSB0byBIQUwtYmFzZWQgZmlsZXN0b3JlIG1vZHVsZS4KKworMjAxMC0wNS0xNyAxMDo0MSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4NzU0IChyZXZlcnQgcjE4NzM4KTogcjE4NzU0IG9ubHkgcGFydGlhbGx5CisgICByZXZlcnRlZCByMTg3MzgKKyAgIGFuZCBoZW5jZSBicm9rZSB0aGUgV2luMzItYnVpbGQuIEZpbmlzaGVkIHJldmVyc2FsIG9mIHIxODczOCBieQorICAgcmVzdG9yaW5nCisgICB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmguCisKKzIwMTAtMDUtMTYgMTg6MTcgIGJ2YXNzY2hlCisKKyAgICogbHRtYWluLnNoOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODcyNjogb25seSBwYXNzIC1mc3RhY2stcHJvdGVjdG9yKiBmbGFncyB0byB0aGUKKyAgIGxpbmtlciBpbnN0ZWFkIG9mIGFsbCAtZiogZmxhZ3Mgc3VjaCB0aGF0IGl0IGJlY29tZXMgbGVzcyBsaWtlbHkKKyAgIHRoYXQgdGhpcyBtb2RpZmljYXRpb24gY2F1c2VzIHRyb3VibGUgd2l0aCBub24tR05VIHRvb2xjaGFpbnMuCisKKzIwMTAtMDUtMTYgMTg6MTQgIGJ2YXNzY2hlCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX29sZHVjZDoKKworICAgTWFkZSBzaGVsbCBjb2RlIGZvciBjb252ZXJ0aW5nIGEgcmVsYXRpdmUgcGF0aCB0byBhbiBhYnNvbHV0ZQorICAgcGF0aCBtb3JlCisgICByb2J1c3QgYW5kIGNvbnZlcnRlZCAiJHsuLi4jLi4ufSIgY29uc3RydWN0IGludG8gZWNobyArIGN1dC4KKworMjAxMC0wNS0xNiAxODoxMiAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIE1vcmUgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUgdG8KKyAgIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRSBzdWJzdGl0dXRpb25zLCBuZWNlc3NhcnkgdG8gbWFrZQorICAgdGVzdCAwNTkgYW5kIDA2NSBwYXNzLgorCisyMDEwLTA1LTE2IDE3OjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIGZpeCB0ZXN0cyBmb3IgY2hlY2tpbmcgc2h1dGRvd24gb2YgYXBwbGljYXRpb25zIHRvIG5vdCByZXBvcnQKKyAgIGZhbHNlIG5lZ2F0aXZlcworCisyMDEwLTA1LTE2IDEyOjE1ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9vbGR1Y2Q6CisKKyAgIE1hZGUgdGVzdCBUMDU5IHBhc3MgYWdhaW4uIFRoaXMgdGVzdCB3YXMgcmVjZW50bHkgYnJva2VuIGJ5CisgICBwYXNzaW5nIGFyZ3VtZW50cyB0byBpdCB3aXRoIGFic29sdXRlIHBhdGhzIGluc3RlYWQgb2YgcmVsYXRpdmUKKyAgIHBhdGhzLgorCisyMDEwLTA1LTE2IDEyOjE0ICBidmFzc2NoZQorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX29sZHVjZDoKKworICAgQWRkZWQgJ1NLSVBJRk5PVCBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUnLgorCisyMDEwLTA1LTE2IDExOjQyICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wNS0xNiAxMTo0MSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFwcHMvc3NodG9zbm1wLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgaW4gb2xkIGNvZGUuCisKKzIwMTAtMDUtMTYgMDk6NTkgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IGRvbid0IHRyaWdnZXIgYSBuZXRzbm1wX2Fzc2VydCgpIHdoZW4KKyAgIG5vIGV4dGVuc2lvbiBETExzIGhhdmUgYmVlbiBsb2FkZWQuCisKKzIwMTAtMDUtMTUgMTc6MzEgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3RvcC1nYXAgZml4IHRvIHVuYnJlYWsgIm1ha2UgdGVzdCIgZm9yIHRoZSBuaWdodGx5IGJ1aWxkcworCisyMDEwLTA1LTE1IDEwOjU5ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW46CisKKyAgIFJldmVydGVkIHIxODcyNyBiZWNhdXNlIGl0IGNhdXNlZCBidWlsZCBlcnJvcnMgb24gU29sYXJpcywgQUlYCisgICBhbmQgSFAtVVguCisKKzIwMTAtMDUtMTUgMDA6NDIgIGhhcmRha2VyCisKKyAgICogIE1ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsICAgCisgICAgICB3aW4zMi9idWlsZC5wbDoKKworICAgcmV2ZXJ0IHIxODczOCBzaW5jZSBuZXcgdHJhbnNwb3J0IHJlcXVpcmUgZHluYW1pY2x5IGJ1aWx0IGhlYWRlcgorICAgZmlsZXMKKworMjAxMC0wNS0xNSAwMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICBsb2cgZW52IHZhcmlhYmxlcyB1c2VkIHRvIHRoZSBpbnZva2VkIGZpbGUKKworMjAxMC0wNS0xNCAyMToyOSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIGZpeCBzY3JpcHQgc28gaXQgY2FuIGJlIGludm9rZWQgb3V0c2lkZSB0aGUgdGVzdCBlbnZpcm9ubWVudAorICAgYWdhaW4KKworMjAxMC0wNS0xNCAyMToyOCAgaGFyZGFrZXIKKworICAgKiBtaWJzL1NOTVAtVExTLVRNLU1JQi50eHQ6CisKKyAgIGFkZGVkIHRoZSBTTk1QLVRMUy1UTS1NSUIgd2l0aCBmaW5hbCBJQU5BIGFzc2lnbm1lbnQgc2xvdHMKKworMjAxMC0wNS0xNCAyMToyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgdXNlIGZpbmFsIElBTkEgYXNzaWduZWQgVFNNIHByZWZpeGVzCisKKzIwMTAtMDUtMTQgMjE6MjYgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaDoKKworICAgdXNlIGZpbmFsIElBTkEgYXNzaWduZWQgRG9tYWluIG51bWJlcnMKKworMjAxMC0wNS0xNCAyMToyNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBzZXQgZGVmYXVsdCB2ZXJzaW9uIGFuZCBzZWNsZXZlbCBpZiB0bHMvZHRscworCisyMDEwLTA1LTE0IDE1OjI1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgY2hlY2sgcmMgZnJvbSBzZWNuYW1lIG1hcHBpbmc7IGNsYXJpZnkgY29tbWVudAorCisyMDEwLTA1LTE0IDE1OjIyICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBkb24ndCB1c2UgdW5zb3J0ZWQgY29udGFpbmVyOyBkb24ndCBmcmVlIGNhbGxlcidzIGNvbnRhaW5lcgorCisyMDEwLTA1LTE0IDE1OjIyICByc3RvcnkKKworICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgYWRkIGxpbmVhcl9zZWFyY2ggZm9yIHVuc29ydGVkIGNvbnRhaW5lcnMKKworMjAxMC0wNS0xNCAxMTo1NiAgYnZhc3NjaGUKKworICAgKiAgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYywgICAKKyAgICAgIHdpbjMyL2J1aWxkLnBsLCB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIEltcHJvdmVkIHBvcnRhYmlsaXR5IGJ5IHJlbW92aW5nIHRoZSBnZW5lcmF0ZWQgZmlsZQorICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmguCisgICBDb21tZW50ZWQgb3V0IHRoZSBjb2RlIGluIHRoZSBjb25maWd1cmUgc2NyaXB0IGZvciBnZW5lcmF0aW5nCisgICB0aGlzIGhlYWRlciBmaWxlLgorICAgQWRkZWQgY29uZmlndXJlLXRpbWUgY29kZSBmb3IgY2hlY2tpbmcgd2hldGhlciB0aGUgY29uc3RydWN0b3JzCisgICBmb3IgYWxsIGNvbmZpZ3VyZWQKKyAgIHRyYW5zcG9ydHMgYXJlIGludm9rZWQgZnJvbSBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMuCisKKzIwMTAtMDUtMTQgMTE6MDAgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBEb2N1bWVudGF0aW9uOiB1cGRhdGVkIEN5Z3dpbiBidWlsZCBpbnN0cnVjdGlvbnMuCisKKzIwMTAtMDUtMTQgMDk6MTUgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYywgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCAgCisgICAgICAgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MuCisKKzIwMTAtMDUtMTQgMDg6NTAgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgQWRkZWQgLW5vLXVuZGVmaW5lZCBmbGFnIHRvIGxpYnJhcnkgbGluayBjb21tYW5kcyBzdWNoIHRoYXQKKyAgIGxpYnRvb2wgY2FuIGJ1aWxkIERMTHMgb24gV2luMzIuCisgICBOb3RlOiBidWlsZGluZyBETExzIG9uIFdpbjMyIGRvZXMgbm90IHlldCB3b3JrIGJlY2F1c2Ugb2YgdGhlCisgICBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4KKyAgIGxpYm5ldHNubXBoZWxwZXJzIGFuZCBsaWJuZXRzbm1wYWdlbnQKKyAgIChzZWUgYWxzbworICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvTGlicmFyeV9sYXllcmluZykuCisKKzIwMTAtMDUtMTQgMDg6NDIgIGJ2YXNzY2hlCisKKyAgICogbHRtYWluLnNoOgorCisgICBsaWJ0b29sIGJ1ZyBmaXg6IGFsc28gcGFzcyBmbGFncyBzdGFydGluZyB3aXRoIC1mIHRvIHRoZSBsaW5rZXIKKyAgIHNpbmNlIHRoZXNlIGNhbiBhZmZlY3QgbGlua2luZy4gVGhlIGZsYWcgLWZzdGFjay1wcm90ZWN0b3IgZS5nLgorICAgdHJpZ2dlcnMgaW5jbHVzaW9uIG9mIGxpYnNzcC4KKworMjAxMC0wNS0xNCAwODo0MCAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3M6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBhYm9ydCBpZiB0aGUgZmlsZSBwcm9ncmFtIGNvdWxkIG5vdCBiZSBmb3VuZCwKKyAgIHNpbmNlIHRoaXMgaXMgZXNzZW50aWFsIGZvciBwcm9wZXIgb3BlcmF0aW9uIG9mIGxpYnRvb2wuCisgICBDSEFOR0VTOiBDeWd3aW46IG5laXRoZXIgY29tcGlsZSBub3IgbGluayB3aW5waXBlLmMuCisKKzIwMTAtMDUtMTMgMDg6NTggIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBSYW4gYXV0b3JlY29uZi4KKworMjAxMC0wNS0xMiAyMDoxNiAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBDSEFOR0VTOiBMaW51eDogYnVpbGRzIGFnYWluIHdpdGggZW1iZWRkZWQgUGVybCBkaXNhYmxlZCAoYnVnCisgICAyOTg1OTE1KS4KKworMjAxMC0wNS0xMiAxOTo0NyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiwgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODY4NDogdW4tYnJlYWsgdGhlIFdpbjMyIE1TVkMgYnVpbGQuCisKKzIwMTAtMDUtMTIgMTk6NDMgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBXaW4zMjogZml4ZWQgYSB0eXBvIGFuZCBtYWRlIGluZGVudGF0aW9uIGNvbnNpc3RlbnQuCisKKzIwMTAtMDUtMTIgMTk6MTEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGNvbnN0cnVjdCB0ZW1wIGJ1aWxkIGZpbGVzIGluIGEgc2VwYXJhdGUgZGlyZWN0b3J5CisKKzIwMTAtMDUtMTIgMTk6MTAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGZpeCByZWNlbnRseSBicm9rZW4gb2xkIHBlcmwgZnVuY3Rpb25hbGl0eQorCisyMDEwLTA1LTEyIDE4OjAxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGFkZGVkIGEgLS1zaG9ydCBvcHRpb24gdG8gc2hvcnRlbiB0aGUgc2hvdyBvdXRwdXQgdG8gbWluaW1hbGlzdGljCisKKzIwMTAtMDUtMTIgMTQ6MTQgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBhIG1lbW9yeSBsZWFrIGluIFRDUC1NSUIuCisKKzIwMTAtMDUtMTIgMTM6MDIgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBtZW1vcnkgbGVhayB3aGVuIHJlYWRpbmcgc2Vuc29ycyBmb3IKKyAgIExNLVNFTlNPUlMtTUlCLgorCisyMDEwLTA1LTEyIDEyOjU3ICBkdHMxMgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIFJldmVydCByZXZpc2lvbiAxODY4OQorICAgTGF0ZXN0IFdpbjMyIGJ1aWxkcyBpbmNsdWRlIHN1cHBvcnQgZm9yIHN0cnRvdWxsLgorCisyMDEwLTA1LTEyIDEyOjA1ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy5oLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IGFkZGVkIGRldGVjdGlvbiBvZiBsbV9zZW5zb3JzIHZlcnNpb24uCisgICBJIGFtIG5vdCBBdXRvY29uZiBndXJ1LCBzbyBJIGhvcGUgSSBnb3QgaXQgcmlnaHQuIFRoZSBnb2FsIGlzIHRvCisgICBkZWZpbmUgTkVUU05NUF9VU0VfU0VOU09SU19WMyAqYmVmb3JlKiBjb25maWdfbW9kdWxlc19hZ2VudAorICAgcHJvY2Vzc2VzIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaC4KKworMjAxMC0wNS0xMiAwNzowMyAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQWRkIG1pc3NpbmcgZGVwZW5kZW5jaWVzIGJldHdlZW4gdHJhbnNwb3J0cy4KKworMjAxMC0wNS0xMiAwMzowOCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHRpdGxlIGdlbmVyYXRpb24gYWZ0ZXIgY2hhbmdlIHRvIHdoYXQgc3JjZGlyIG1lYW50CisKKzIwMTAtMDUtMTIgMDI6MzAgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgdW5kbyBsYXN0IGNoYW5nZSB3aGljaCB0dXJuZWQgb3V0IHRvIG9ubHkgY2F1c2UgZXJyb3JzIGlmIHlvdSBoYWQKKyAgIGEgb2xkIC5jb25mIGZpbGUgYXJvdW5kCisKKzIwMTAtMDUtMTIgMDI6MTMgIGhhcmRha2VyCisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IHYzX2NhIGNyZWF0aW9uIGV4dGVuc2lvbiBuYW1lCisKKzIwMTAtMDUtMTIgMDI6MDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGtlZXAgZm9ybWF0IHZlcnNpb24gIyBpbiBjZXJ0IGluZGV4ZXM7IGRvbid0IHN0b3JlIGhhc2ggdHlwZQorICAgc3RyaW5nIGluIGluZGV4OworCisyMDEwLTA1LTEyIDAyOjA1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggaW52ZXJ0ZWQgY29udmVyc2lvbiBjYWxsOyBsZXNzIHZlcmJvc2UgZGVmYXVsdCBkZWJ1ZworCisyMDEwLTA1LTEyIDAyOjA1ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jOgorCisgICBmaXggcGFyc2luZyBvZiAtVCBuYW1lL3ZhbHVlIHBhaXJzCisKKzIwMTAtMDUtMTEgMjM6MzMgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgYnVnIGZpeGluZyBhbmQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciAibWFrZSB0ZXN0IiB3aXRoCisgICBUZXN0OjpIYXJuZXNzCisgICAoc3RpbGwgZG9lc24ndCB3b3JrIGZvciBtZSwgdGhvdWdoKQorCisyMDEwLTA1LTExIDIyOjM0ICB0YW5kZXJzCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIERvIE5PVCBoYXJkY29kZSAvdXNyL2Jpbi9wZXJsIGFzIHRoZSBQZXJsIHBhdGgKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZml4IHN0YXNoIGZpbGUgaGFuZGxpbmcKKworMjAxMC0wNS0xMSAyMDoxNiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbG9uZyBvcHRpb25zIHN1Y2sgOy0pLiBwcmVmZXIgZG91YmxlIGRhc2hlcyBmb3IgbG9uZyBvcHRpb25zIHRvCisgICBtYXRjaCB0aGUgcmVzdCBvZiB0aGUgTmV0LVNOTVAgY29kZSBiYXNlCisKKzIwMTAtMDUtMTEgMjA6MTYgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGFkZGVkIGFiaWxpdHkgdG8gcnVuIG9ubHkgdGhlIGZhaWxlZCB0ZXN0cyBmcm9tIHRoZSBsYXN0IHJ1bgorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBkb24ndCBmb3JjZSBjb2xvcgorCisyMDEwLTA1LTExIDIwOjE2ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjbGVhbnVwIG9mIG9sZGVyCisKKzIwMTAtMDUtMTEgMjA6MTUgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIE1pbmltYWxseSBzdXBwb3J0IHRoZSBvbGRlciBUZXN0OjpIYXJuZXNzIHBlcmwgbW9kdWxlIGZvciBydW5uaW5nCisgICB0aGUgb2xkZXIgdGVzdHMgYXQgbGVhc3QKKworMjAxMC0wNS0xMSAyMDoxNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNldCBhIGRlZmF1bHQgc2VjdXJpdHlOYW1lIGFuZCBzZWN1cml0eU1vZGVsIGlmIFRMUyBvciBEVExTIGlzIGluCisgICB1c2Ugb24gdGhlIGNsaWVudCBzaWRlCisKKzIwMTAtMDUtMTEgMjA6MTUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIGFsbG93IHNlY3VyaXR5IG1vZGVscyB0byBwZXJmb3JtIG1vcmUgb2YgdGhlIHNlc3Npb24gc2V0dXA7IG1vdmVkCisgICBtb3JlIFVTTSBzcGVjaWZpYyBzZXR1cCBpbnRvIGl0J3Mgc2V0dXAgcm91dGluZQorCisyMDEwLTA1LTExIDE4OjAyICByc3RvcnkKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHBhcmFtIHRvIGxvb2t1cCBwZWVyIGNlcnQKKworMjAxMC0wNS0xMSAxNjoxMCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBhbGxvdyAnLScgaW4gZnFkbjsgYWRkIGRlYnVnIG91dHB1dCBmb3IgaG9zdCBzcGVjaWZpYyBjb25maWcKKworMjAxMC0wNS0xMSAxNTo0NiAgZHRzMTIKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgRW5zdXJlICduZXRzbm1wX3JlYWRfbW9kdWxlJyBpcyBhdmFpbGFibGUgZm9yIHBlcmwgYnVpbGQuCisKKzIwMTAtMDUtMTEgMTU6NDQgIGR0czEyCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgRml4IHBlcmwgYnVpbGQgdW5kZXIgV2luZG93cyAoc3RydG91bGwgbm90IGF2YWlsYWJsZSkKKworMjAxMC0wNS0xMCAwNzowNyAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEFkZCBtaXNzaW5nIHN5bWJvbCBuZXRzbm1wX3NubXBTU0hEb21haW5fbGVuLAorICAgbWFrZSBuZXRzbm1wX3NubXBTU0hEb21haW4gY29uc3QuCisKKzIwMTAtMDUtMDkgMjI6MDMgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfb2xkdWNkOgorCisgICBEbyBub3QgcmVxdWlyZSBxdW90ZXMgYXJvdW5kIHRoZSBDUFUgc3RyaW5nIGFzIHRoYXQgZGVwZW5kcyBvbgorICAgaG93IHRoZSBhZ2VudCBpcyBjb25maWd1cmVkLgorCisyMDEwLTA1LTA5IDIxOjQzICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaCwgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEV4dHJhY3QgdGhlIEV4aXQgYW5kIHJlc3RhcnQqIHN1YnJvdXRpbmVzIGZyb20KKyAgIHV0aWxfZnVuYyBpbiBvcmRlciB0byBtYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIGxlc3MgY29kZSBmb3IgdGhlCisgICBtaW5pbWFsIGNhc2UuCisKKzIwMTAtMDUtMDkgMTY6NDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBmdW5jdGlvbgorICAgZ2V0X2V4ZWNfb3V0cHV0KCkgcmV0dXJucyBhIHZhbHVlIHdoZW4gdGhlIHByZXByb2Nlc3NvciBzeW1ib2wKKyAgIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFIGhhcyBub3QgYmVlbiBkZWZpbmVkLgorCisyMDEwLTA1LTA5IDE2OjQ1ICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBDSEFOR0VTOiBDeWd3aW46IGJ1aWxkcyBub3cgYWxzbyB3aGVuIHRoZSBzb3VyY2UgZmlsZXMgYXJlCisgICBsb2NhdGVkIG9uIGEgU2FtYmEgZmlsZXN5c3RlbSBpbnN0ZWFkIG9mIGEgbG9jYWwgZmlsZXN5c3RlbS4KKworMjAxMC0wNS0wOSAxMzowNSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBDb3JyZWN0IHRoZSBpZiB0aGF0IHRyaWVzIHRvIGZpZ3VyZSBvdXQgaWYgYSBzdWZmaWNpZW50bHkgbmV3IGdjYworICAgaXMgaW4gdXNlLgorCisyMDEwLTA1LTA5IDEyOjUwICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENoZWNrIGZvciB0aGUgbmVlZGVkIG1vZHVsZSBhbmQgbm90IHNvbWUgb3RoZXIgb25lLgorICAgTG9nIHRoZSBjb3JyZWN0IG1pc3Npbmcgc3ltYm9sLgorCisyMDEwLTA1LTA5IDA5OjIxICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHV0aWxpdGllcy9leGVjdXRlIGRvIG5vdCBuZWVkIGFueXRoaW5nIGZyb20KKyAgIHV0aWxfZnVuY3MsIHNvIHN0b3AgZGVwZW5kaW5nIG9uIGl0LgorCisyMDEwLTA1LTA5IDA5OjEyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmM6CisKKyAgIE5FV1M6IHNubXBkOiBSZW1vdmVkIHRoZSB1bnVzZWQgZnVuY3Rpb24geHhfdG9rZW5pemVfZXhlY19jb21tYW5kCisgICBmcm9tIHV0aWxpdGllcy9leGVjdXRlLgorCisyMDEwLTA1LTA5IDA5OjAxICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBSZXBsYWNlIHRoZSBkZWJ1Z2dpbmcgZnVuY3Rpb25zIHdpdGggZHVtbWllcworICAgd2hlbiBkZWJ1Z2dpbmcgaXMgZGlzYWJsZWQuCisKKzIwMTAtMDUtMDkgMDg6MDIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzAwdWRwX29sZHVjZDoKKworICAgQ2hlY2sgdGhhdCB0aGUgVURQIHRyYW5zcG9ydCBpcyBlbmFibGVkCisKKzIwMTAtMDUtMDkgMDg6MDEgIG1hZ2ZyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2Q6CisKKyAgIEZhY3RvciBvdXQgY2hlY2sgZm9yIG1pYklJL3N5c3RlbV9taWIKKworMjAxMC0wNS0wOSAwNzo1OSAgbWFnZnIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgQWRkIG1pc3NpbmcgaW5jbHVkZXMKKworMjAxMC0wNS0wOCAyMzoxNiAgbWFnZnIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgQWRkaXRpb25hbGx5IGZpeCBtYWtlIHRlc3QgZm9yIHRoZSB1bmNvbW1vbiBjYXNlIHdoZXJlIGJ1aWxkZGlyCisgICA9PSBzcmNkaXIKKworMjAxMC0wNS0wOCAyMjo1NSAgbWFnZnIKKworICAgKiAgdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5GVUxMVEVTVFMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9URVNUQ09ORi5zaCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3J1bl9vbGR1Y2Q6CisKKyAgIENIQU5HRVM6IHRlc3Rpbmc6IE1ha2UgaXQgcG9zc2libGUgdG8gcnVuIHRoZSB0ZXN0IHN1aXRlIGZyb20KKyAgIGFueXdoZXJlLgorICAgQ2hhbmdlIHRoZSAtRCBvcHRpb24gdG8gZXhwZWN0IHRoZSBwYXRoIG9mIHRoZSB0b3Agc291cmNlCisgICBkaXJlY3RvcnkuCisgICBBZGQgYW4gLXNyY2RpciBvcHRpb24gdGhhdCBpcyBhbiBhbGlhcyBmb3IgLUQuCisgICBBZGQgYW4gLWJ1aWxkZGlyIG9wdGlvbiB0byBkZXNpZ25hdGUgdGhlIGRpcmVjdG9yeSB3aGVyZSB0aGUgdGVzdAorICAgb2JqZWN0IGlzLgorICAgUHV0IHNyY2RpciBhbmQgYnVpbGRkaXIgaW4gdGhlIGVudmlyb25tZW50IGZvciB0aGUgdGVzdCBzY3JpcHRzCisgICBGYWN0b3Igb3V0IHRoZSBncmVwIHBhcnQgb2YgU0tJUElGIGFuZCBTS0lQSUZOT1QgdG8gSVNERUZJTkVECisgICBVc2UgbW9yZSByZWFkYWJsZSBrZXlzIGluIHRoZSBvcHRzIGhhc2ggaW4gUlVORlVMTFRFU1RTCisgICBBZGp1c3QgZXZlcnl0aGluZyB0byB1c2Ugc3JjZGlyIGFuZCBidWlsZGRpcgorCisyMDEwLTA1LTA4IDIyOjQyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmM6CisKKyAgIFVzZSBjb3JyZWN0IGFyZ3VtZW50IHR5cGVzCisKKzIwMTAtMDUtMDggMjI6MDcgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIENvbnNvbGlkYXRlIHRoZSB0ZXN0IGFuZCB0ZXN0LW1pYnMgdGFyZ2V0cy4KKyAgIEV4cG9zZSB0aGUgdGVzdGFsbCB0YXJnZXQgaW4gdGhlIHRvcCBtYWtlZmlsZS4KKworMjAxMC0wNS0wOCAyMjowNSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIERvIG5vdCBhYm9ydCB3aGVuIHN0ciBpcyBOVUxMIGFzIHRoYXQgaXMgYSBwZXJmZWN0bHkgdmFsaWQgaW5wdXQuCisKKzIwMTAtMDUtMDggMjI6MDMgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMTBzY2FwaXRlc3RfY2FwcC5jOgorCisgICBVc2UgY29ycmVjdCBhcmd1bWVudCB0eXBlcworCisyMDEwLTA1LTA4IDIyOjAyICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYzoKKworICAgQWRkIG1pc3NpbmcgbmV3bGluZQorCisyMDEwLTA1LTA3IDIxOjExICByc3RvcnkKKworICAgKiBjb25maWd1cmU6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IGNvbmZpZ3VyZS5hYworCisyMDEwLTA1LTA3IDE5OjIxICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIGZpeCBoYW5kbGluZyBvZiBjZXJ0IGFsZ29yaXRobSBpbiBmaW5nZXJwcmludHM7IGNvbnZlcnQgaW4vb3V0CisgICBmaW5nZXJwaW50cworICAgZnJvbS90byBoZXgKKworMjAxMC0wNS0wNyAxOToyMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGRvbnQgc3BlY2lmeSBoYXNoIHR5cGUgZm9yIGZpbmdlcnByaW50CisKKzIwMTAtMDUtMDcgMTk6MjEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBoYW5kbGUgZmluZ2VycHJpbnQgdHlwZXM7IGRyb3Agc2FuIGZpZWxkcyBmcm9tIGNlcnQgc3RydWN0OworICAgY29uc2lkZXIgZGlyZWN0b3J5CisgICB3aGVuIHBhcnRuZXJpbmcga2V5cy9jZXJ0cworCisyMDEwLTA1LTA3IDE5OjIwICByc3RvcnkKKworICAgKiBjb25maWd1cmUuYWM6CisKKyAgIG1vdmUgZGVmYXVsdCBwcm9tcHRzIGVhcmxpZXIKKworMjAxMC0wNS0wNiAxNTo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgYmV0dGVyIFNBTiBleHRyYWN0aW9uOyB0d2VhayBkdWJndXMgbWVzc2FnZXM7IHF1aWV0IGNvbXBpbGVyCisgICB3YXJuaW5ncworCisyMDEwLTA1LTA2IDE1OjM5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICByZWR1Y2UgY2VydCBkZWJ1ZyBvdXRwdXQ7IGRlYnVnIGluc3RlYWQgb2YgbG9nX2luZm8gaW4gZHVtcHMKKworMjAxMC0wNS0wNiAxNDo0OSAgZHRzMTIKKworICAgKiBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBEb24ndCBhc3N1bWUgdGhlIHByZXNlbmNlIG9mIDxzdHJpbmcuaD4KKyAgIChicmluZyBpbnRvIGxpbmUgd2l0aCBhbGwgb3RoZXIgb2NjdXJhbmNlcykKKworMjAxMC0wNS0wNiAxNDo0MSAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgc25tcGxpYi9jYWxsYmFjay5jOgorCisgICBDSEFOR0VTOiBXaW5kb3dzOiBGaXggYnVpbGQgdW5kZXIgTWluR1cKKyAgIGJhY2svZm9yd2FyZCBwb3J0IG9mIHJldmlzaW9uIDE4NjMxCisKKzIwMTAtMDUtMDUgMTc6NDMgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGZpeCB0eXBlIGluIGxvZyBtc2cKKworMjAxMC0wNS0wNSAxNzo0MyAgcnN0b3J5CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgcmVtb3ZlIGltcG9ydCBmb3IgdW51c2VkIGZ1bmN0aW9uCisKKzIwMTAtMDUtMDQgMDc6MTIgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgTmVnYXRlIHJlYXNvbiBnaXZlbiBmcm9tIFNLSVBJRgorCisyMDEwLTA1LTAzIDIyOjM4ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBmaXggbGVuIGluIGVtYWlsIGNtcDsgbW9yZSBleHRyYWN0IGRlYnVnZ2luZworCisyMDEwLTA1LTAzIDIyOjM4ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBjb3B5IG9jZXJ0IHRvIGFkZGlvbmFsIG1hcHMKKworMjAxMC0wNS0wMyAxNDoyMCAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIHJlbW92ZSBkZXBlbmRlbmN5IG9uIHBlcmwgbW9kdWxlIG5vdCBwcmVzZW50IGluIENlbnRPUworCisyMDEwLTA1LTAzIDAzOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBkb24ndCBhY2Nlc3Mgc3RydWN0IGludGVybmFscyBkaXJlY3RseQorCisyMDEwLTA1LTAzIDAzOjQ4ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIGZpeCBjb21waWxpbmcgd2l0aC1vdXQtbWlibW9kdWxlcz11dGlsaXRpZXMvZXhlY3V0ZQorCisyMDEwLTA1LTAxIDE5OjA4ICBtYWdmcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MHNvbGFyaXNob3N0Y3B1X29sZHVjZDoKKworICAgQ29ycmVjdCB0aGUgc291Z2h0IHN0cmluZyB0byBtYWtlIHRoZSB0ZXN0IHBhc3Mgd2hlbiBvay4KKworMjAxMC0wNS0wMSAxNzoxNSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG1vcmUgY29uc2lzdGVudCB0cmVhdG1lbnQgb2Yga2V5VXNhZ2UsIGJhc2ljQ29uc3RyYWludHMsIG90aGVyCisgICB4NTA5djMgb3B0aW9ucworCisyMDEwLTA0LTMwIDIzOjM3ICBtYXJ6CisKKyAgICogbG9jYWwvY2VydGdlbi10ZXN0LnBsOgorCisgICBsYW1lIHRlc3Qgc2NyaXB0IGJ1dCBjb3ZlcnMgYSBjaHVuayBvZiB0aGUgY29kZQorCisyMDEwLTA0LTMwIDIzOjAwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBta2luc3RhbGxkaXJzIGluc3RlYWQgaW5zdGVhZCBvZiBGaWxlOjpQYXRoCisKKzIwMTAtMDQtMzAgMjM6MDAgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBlbnN1cmUgbmV0LXNubXAtY29uZmlnIHNjcmlwdCBjYW4gYmUgcnVuIGZyb20gdGhlIGJ1aWxkIGRpcgorCisyMDEwLTA0LTMwIDIxOjMxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaGFuZGxlIGdlbmNlcnQgLS1jYQorCisyMDEwLTA0LTMwIDIxOjAxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgaGVscCBmb3IgY2VydFNlY05hbWU7IGNvbnRpbnVlIGJ1aWxkaW5nIGNlcnQgaW5kZXhlcyBldmVuIGlmCisgICB3ZSBjYW50IHNhdmUKKyAgIHRvIHBlcnNpc3RlbnQgZGlyCisKKzIwMTAtMDQtMzAgMjA6NDggIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGZpeCBjaGVjayBjb3VudCBmb3IgODIyIG5hbWVzIGluIHRoZSBzbm1wZC5sb2cKKworMjAxMC0wNC0zMCAyMDo0OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jLCB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgZml4IG1hbGxvYyB1bm5kZXJsZW5ndGggYnkgMSBlcnJvcgorCisyMDEwLTA0LTMwIDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBjb21tZW50IG91dCB0aGUgODIyIHRlc3RzOyB0aGV5J3JlIGJyb2tlbiBhdCB0aGUgbW9tZW50CisKKzIwMTAtMDQtMzAgMTk6MzYgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBkb24ndCBsb3NlIFNBTiB3aGVuIHNpZ25pbmcgdy8gQ0EKKworMjAxMC0wNC0zMCAxODo0NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtYWtlIG5hbWUgY2hhbmdlIHRvIHJmYzgyMiBmcm9tIHR5cG9lZCA4MjIwCisKKzIwMTAtMDQtMzAgMTg6NDYgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RscywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzOgorCisgICBhZGRlZCB0ZXN0cyB0byBkbyBvdGhlciBzdWJqZWN0QWx0TmFtZSBtYXBwaW5nCisKKzIwMTAtMDQtMzAgMTc6MzEgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBmaXggaXNzdWVzIDEsMiw0IGFuZCAtQyBoYW5kbGluZworCisyMDEwLTA0LTI5IDAzOjMyICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmM6CisKKyAgIHVwZGF0ZSB0bHN0bUNlcnRUb1RTTlRhYmxlIHRvIHVzZSBjYWNoZSArIGNlcnRfdXRpbCBtYXBzCisgICBjb250YWluZXIKKworMjAxMC0wNC0yOSAwMzozMSAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBjaGVjayBpbnNlcnQgcmV0dXJuCisKKzIwMTAtMDQtMjkgMDM6MzEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkIHJlbW92ZSBmdW5jdGlvbiB0byBjb250YWluZXIgaXRlcmF0b3I7CisgICBpbXBsZW1lbnQgaXQgZm9yCisgICBiaW5hcnlfYXJyYXkKKworMjAxMC0wNC0yOSAwMzozMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmM6CisKKyAgIG1ha2Ugc3VyZSBjb250YWluZXIgc3luYyBpbmNyZW1lbnRlZCBvbiBzb3J0LCBpbnNlcnQgYW5kIHJlbW92ZQorCisyMDEwLTA0LTI4IDA3OjIwICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvaW5ldF9udG9wLmM6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgY29tbWVudC4KKworMjAxMC0wNC0yOCAwMDozMyAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBmaXggbWFrZWZpbGUgZm9yIHRlc3QgdGFyZ2V0CisKKzIwMTAtMDQtMjggMDA6MzMgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvTWFrZWZpbGUuaW4sIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9idWlsZF9jYXBwOgorCisgICBtYWtlIHRoZSB0ZXN0IHN1aXRlIHJ1biBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IGFnYWluLgorCisyMDEwLTA0LTI4IDAwOjMzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RsczoKKworICAgZGVhbCB3aXRoIG91dC1vZi1zb3VyY2UgdHJlZSBidWlsZGluZworCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHN0ZXN0czoKKworICAgdGVzdGluZyB0byBjaGVjayBjZXJ0aWZpY2F0ZSB0byBzZWN1cml0eW5hbWUgbWFwcGluZ3MgYW5kIGRlbmlhbHMKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0bHM6CisKKyAgIGNyZWF0ZWQgYSBtYXBwZWQgdXNlcgorCisyMDEwLTA0LTI4IDAwOjMyICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvYnVpbGRfY2FwcDoKKworICAgZ2VuZXJhdGUgb2JqZWN0IGNvZGUgd2l0aCAtZyBkZWJ1Z2dpbmcKKworMjAxMC0wNC0yOCAwMDozMiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmM6CisKKyAgIG1vcmUgYWNjdXJhdGUgY3VycmVudCBBUEkgdXNhZ2UgZm9yIHNjYXBpIGNvZGUKKworMjAxMC0wNC0yNyAyMToxMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IGNlcnQgaW5pdCBkdXBsaWNhdGUgY2FsbCBjaGVjaworCisyMDEwLTA0LTI3IDIwOjU4ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGNvbnZlcnQgdXNlciBmaW5nZXJwcmludCB0byBsb3dlciBhbmQgc3RyaXAgY29sb25zOyBhZGQgZXh0ZXJuCisgICBwcm90b3R5cGUKKyAgIGZvciBjZXJ0IGluaXQgc28gd2UgZG9uJ3QgbmVlZCBoZWFkZXIKKworMjAxMC0wNC0yNyAyMDoxNSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgbWFuL3NubXBkLmNvbmYuNS5kZWYsICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgc2VwYXJhdGUgY2VydCBpbml0IGFuZCBjZXJ0IGxvYWRpbmc7IGFkZCBjZXJ0U2VjTmFtZSBjb25maWcgdG9rZW4KKworMjAxMC0wNC0yNyAwMzoxOCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg6CisKKyAgIG1lcmdlIE5FVFNOTVBfRlVOQ1RJT04gYW5kICFORVRTTk1QX0ZVTkNUSU9OIGFzc2VydCBjYXNlcworCisyMDEwLTA0LTI3IDAzOjAyICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oLCBzbm1wbGliL2NlcnRfdXRpbC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX29wZW5zc2wuYywgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGxvdHMgb2YgbmV3IGNlcnQgZnVuY3Rpb25hbGl0eQorICAgLSBhZGQgc3NsIGZ1bmNzIGZvciBjZXJ0IGV4dGVuc2lvbnMgYW5kIHNzbCBjZXJ0IGNoYWlucworICAgLSBmdW5jdGlvbnMgYW5kIG5ldyBuZXRzbXBfY2VydF9tYXAgc3RydWN0IGZvciBsb29raW5nIHVwIGNlcnQKKyAgIG1hcHBpbmdzCisgICAtIGFkZCBjZXJ0aWZpY2F0ZSBtYXBwaW5nIGZvciBzZWNuYW1lCisgICAtIGFkZCBjb2RlIHRvIGJ1aWxkIGNlcnQgY2hhaW5zCisgICAtIGFkZCBzdWJqZWN0IHRvIGNlcnQgaW5kZXggY2FjaGUKKyAgIC0gcmVidWlsZCBpbmRleGVzIGlmIGFueSBlcnJvciB3aGlsZSBwYXJzaW5nIGluZGV4CisgICAtIHJlZm9ybWF0IGR1bXAgb3V0cHV0CisgICAtIGFkZCBOU19DRVJUX0NBIGFsbG93ZWRfdXNlIGZsYWcKKyAgIC0gYWRkIHN1YmplY3QsIGlzc3VlciBhbmQgaXNzdWVyX2NlcnQgdG8gbmV0c25tcF9jZXJ0CisgICAtIG1vdmUgY2VydCBjb250YWluZXIgc2V0dXAgdG8gaXRzIG93biBmdW5jdGlvbgorICAgLSBhZGQgY2VydCBzdWJqZWN0IG5hbWUgc3ViY29udGFpbmVyCisKKzIwMTAtMDQtMjcgMDM6MDIgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmM6CisKKyAgIG1vdmUgaXB2NiBzcGVjaWZpYyB2YXIgZGVjbCBpbnNpZGUgaWZkZWYKKworMjAxMC0wNC0yNyAwMzowMiAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaDoKKworICAgQ0hBTkdFUzogYWdlbnQ6IHRkYXRhIGhlbHBlciBub3cgc2F2ZXMgZmxhZ3MgcGFzc2VkIGR1cmluZworICAgY3JlYXRpb247IGFkZCB0ZGF0YQorICAgZmxhZyB0byBOT1QgY3JlYXRlIHRoZSB0YWJsZSBjb250YWluZXIKKworMjAxMC0wNC0yNyAwMzowMSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9jb250YWluZXIuYywgICAKKyAgICAgIHNubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jOgorCisgICBORVdTOiBzbm1wbGliOiBhZGQgaW50ZXJmYWNlIGZvciBkdXBsaWNhdGluZyBhIGNvbnRhaW5lcgorICAgQ0hBTkdFUzogc25tcGxpYjogY29udGFpbmVyIGNoYW5nZXM6IGFkZCBmbGFncyBmaWVsZCB0byBjb250YWluZXIKKyAgIG1ldGEtZGF0YTsKKyAgIGNoZyBiaW5hcnlfYXJyYXkgY29udGFpbmVyIHRvIHVzZSBjb250YWluZXIgbWV0YS1kYXRhIGZsYWdzCisKKzIwMTAtMDQtMjYgMjI6MzIgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHM6CisKKyAgIGFkZGVkIGEgdGVzdCB0byB2ZXJpZnkgdGhhdCB3aGVuIHRoZSB0cmFuc3BvcnQgaXMgY29uZmlndXJlZCB3aXRoCisgICBhIHJlbW90ZSBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCB0aGUgY29ubmVjdGlvbiBpcyBkZW5pZWQKKworMjAxMC0wNC0yNiAyMjozMiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2Q6CisKKyAgIGFkZGVkIHRlc3RzIGZvciAtVCBmbGFnIHVzYWdlIGFuZCBpbnZhbGlkIHVzZXIgdXNhZ2UKKworMjAxMC0wNC0yNiAyMDo1NCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19vbGR1Y2Q6CisKKyAgIGhhdmUgdGhlIGFsaWFzIHRyYW5zcG9ydCBzb3VyY2UgdGhlIHJpZ2h0IFN2M2NvbmZpZyBmaWxlCisKKzIwMTAtMDQtMjYgMjA6NTAgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MGR0bHN1ZHBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYxdGxzdGNwX29sZHVjZDoKKworICAgd29ya2luZyBzdXBwb3J0IG9mIFRMUy9EVExTIHRlc3RpbmcgaW5jbHVkaW5nIGNlcnQgZ2VuZXJhdGlvbgorCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGhvbm9yIHRoZSBjb25maWcgZGlyIGlmIHNwZWNpZmllZCB2aWEgLUMKKworMjAxMC0wNC0yNiAyMDo0OSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgZml4IHJlYWxsb2MgY2FsbCBmb3IgYnVmZmVyZWQgcGFja2V0cworCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIHByb3BlciBza2lwIG91dHB1dCBmb3IgcmVwb3J0aW5nIHJlYXNvbgorCisyMDEwLTA0LTI2IDIwOjQ5ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNTBldGltZXRlc3RfY2FwcC5jOgorCisgICByZW1vdmUgdHJhaWxpbmcgd2hpdGVzcGFjZSBhZnRlciBiYWNrc2xhc2ggaW4gbWFjcm8KKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3RyYW5zcG9ydCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzMwdGNwdjZfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LmNlcnQsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LnByaXYsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5jZXJ0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIucHJpdjoKKworICAgdGVzdHMgZm9yIG1pbmltYWxseSB0ZXN0aW5nIGFsbCB0aGUgdHJhbnNwb3J0cworCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUkVBRE1FOgorCisgICBtaW5pbWFsbHkgZG9jdW1lbnQgbmV3IFJVTkZVTExURVNUUyBzY3JpcHQKKworMjAxMC0wNC0yNiAyMDo0OCAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9ULmMsIHRlc3RpbmcvVDIuc2gsIHRlc3RpbmcvZGF0YS5rZXljaGFuZ2UtbWQ1LCAgIAorICAgICAgdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLCB0ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEtZGVzLCAgIAorICAgICAgdGVzdGluZy9kYXRhLmt1bC1tZDUsIHRlc3RpbmcvZGF0YS5rdWwtc2hhMSwgdGVzdGluZy9taXNjdGVzdC5jLCAgCisgICAgICAgdGVzdGluZy90ZXN0X2tleWNoYW5nZS5zaCwgdGVzdGluZy90ZXN0X2t1bC5zaDoKKworICAgZGVsZXRlZCBvbGQgZmlsZXMgbm90IHdvcnRoIHJlc3RvcmluZworCisyMDEwLTA0LTI2IDIwOjQ4ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZXZhbF90ZXN0bGlzdDoKKworICAgcmVtb3ZlIG9ic29sdXRlIHRlc3QgbGlzdAorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYzoKKworICAgYSBoYXNoLXRlc3RpbmcgLmMgZmlsZSBJIGhhZCBsYXlpbmcgYXJvdW5kCisKKzIwMTAtMDQtMjYgMjA6NDcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9NYWtlZmlsZS5pbjoKKworICAgbWFrZSB0ZXN0YWxsIHRhcmdldAorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTkZVTExURVNUUywgdGVzdGluZy9ldGltZXRlc3QuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2MywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDQwa2V5bWFuYWdldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2J1aWxkX2NhcHAsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9rZXltYW5hZ2V0ZXN0LmMsIHRlc3Rpbmcvc2NhcGl0ZXN0LmM6CisKKyAgIG1vdmUgb2xkIEMtY29kZSB0ZXN0cyBpbiBwbGFjZQorCisyMDEwLTA0LTI2IDIwOjQ3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUzc29sYXJpc3N3YXBfb2xkdWNkOgorCisgICBza2lwIHNvbGFyaXMgY29tbWVudHMKKworMjAxMC0wNC0yNiAyMDo0NiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL01ha2VmaWxlLmluOgorCisgICBmaXggaW52b2NhdGlvbiBvZiBSVU5GVUxMVEVTVFMKKworMjAxMC0wNC0yNiAyMDo0NiAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy9NYWtlZmlsZS5pbiwgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YxY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjJjY29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjNjb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3VzbWNvbmZpZ2FnZW50LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWd0cmFwZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3ZhY21jb25maWcsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1QUVTX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjRzbm1wdjNnZXRTSEExX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI4c25tcHYzZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzBzbm1wdjN1c2VyY3JlYXRpb25fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1fb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1wcml2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MHNubXB2M3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTNhZ2VudHYxdHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QyX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3QzX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjVhZ2VudGV4dGVuZF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTNhZ2VudHh0cmFwX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExNGFnZW50eGFnZW50eHRyYXBfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjBwcm94eWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzJzbm1wdjN2YWNtZ2V0X29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX29sZHVjZCwgICAKKyAgICAgIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTFzb2xhcmlzaG9zdGRpc2tfb2xkdWNkLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUyaG9zdHVwdGltZV9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9vbGR1Y2QsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1N0cmFuc3BvcnQsIHRlc3RpbmcvdGVzdHMvU3YxY29uZmlnLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9TdjJjY29uZmlnLCB0ZXN0aW5nL3Rlc3RzL1N2M2NvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYWdlbnQsIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYmFzZSwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlndHJhcGQsIHRlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvU3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvU3Zhbnljb25maWcsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMDFzbm1wdjFnZXQsIHRlc3RpbmcvdGVzdHMvVDAxNHNubXB2MmNnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE5c25tcHYyY25vc3VjaCwgdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUsIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjRzbm1wdjNnZXRTSEExLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI2c25tcHYzZ2V0U0hBQUVTLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDI4c25tcHYzZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdiwgdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcCwgCisgICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QyLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDMsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU5dHJhcGR0cmFwaGFuZGxlLCB0ZXN0aW5nL3Rlc3RzL1QwNjB0cmFwZHBlcmwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwsIHRlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDcwY29tMnNlYywgdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peCwgdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTBhZ2VudHhnZXQsIHRlc3RpbmcvdGVzdHMvVDExMWFnZW50eHNldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDExMmFnZW50eHNldGZhaWwsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCB0ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMzJzbm1wdjN2YWNtZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDFzbm1wdjJjdmFjbWdldGZhaWwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrLCB0ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAsIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGwsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LmNlcnQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtbG9jYWxob3N0LnByaXYsIHRlc3RpbmcvdGVzdHMvdGVzdC11c2VyLmNlcnQsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5wcml2OgorCisgICBORVdTOiB0ZXN0aW5nOiBCcmFuZCBuZXcgdGVzdCBzdWl0ZSBkZXNpZ2VuZWQgdG8gZXZlbnR1YWxseSB0ZXN0CisgICBtb3JlIGZ1bmN0aW9uYWxpdHksIHByb3ZpZGUgZm9yIHN1cHBvcnQgb2YgdW5pdC10ZXN0cyBhbmQgc3VwcG9ydAorICAgb2YgQVBJIHRlc3RzCisKKzIwMTAtMDQtMjYgMjA6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgcmVtb3ZlZCBhIGRlYnVnZ2luZyBlY2hvCisKKzIwMTAtMDQtMjYgMjA6NDMgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgbW9yZSBidWcgZml4ZXMgZm9yIHN0cmluZyBzZWFyY2hlcworCisyMDEwLTA0LTI2IDIwOjQzICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvb2xkdWNkX2V2YWxfdG9vbHMuc2g6CisKKyAgIGFkZGVkIGEgbmV3IG1hY3JvIHRvIGNoZWNrIGEgdHJhcGQgY291bnQKKworMjAxMC0wNC0yNiAyMDo0MiAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoOgorCisgICB1c2UgaW5kaXZpZHVhbCBvdXRwdXQgZmlsZXMgYW5kIGZpeCBzb21lIHRlc3RzCisKKzIwMTAtMDQtMjYgMjA6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvUlVORlVMTFRFU1RTLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfZXZhbF90b29scy5zaDoKKworICAgbWFkZSBleGlzdGluZyB0ZXN0IHN1aXRlIHB1dCBvdXQgVEFQIG91dHB1dAorCisyMDEwLTA0LTI2IDIwOjQyICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL1JVTlRFU1RTLCB0ZXN0aW5nL1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy9ldmFsX29uZXByb2dyYW0uc2gsIHRlc3RpbmcvZXZhbF9vbmVzY3JpcHQuc2gsICAgCisgICAgICB0ZXN0aW5nL2V2YWxfc3VpdGUuc2gsIHRlc3RpbmcvZXZhbF90b29scy5zaCwgdGVzdGluZy9mdWxsdGVzdHMsICAKKyAgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0LCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9vbGR1Y2RfVEVTVENPTkYuc2gsICAgCisgICAgICB0ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L29sZHVjZF9ldmFsX3Rvb2xzLnNoLCAgIAorICAgICAgdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9ydW5fb2xkdWNkOgorCisgICBiZWdpbm5pbmcgb2YgbW92aW5nIFVDRCB0ZXN0IHN1aXRlIGludG8gYSBsYXJnZXIgc3ViZGlyZWN0b3J5CisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIGFsbG93IHJ1bm5pbmcgdGVzdHMgdGhhdCBtYXRjaCBhIHJlZ2V4cAorCisyMDEwLTA0LTI2IDIwOjQxICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBzdW1tYXJpemUgdGVzdHMgdGhhdCBmYWlsZWQKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgY3JlYXRlZCB0aGUgYWJpbGl0eSB0byBoYXZlIHJ1bl8gc2NyaXB0cyBmb3IgZXhlY3V0aW5nIGNlcnRhaW4KKyAgIHR5cGVzCisKKzIwMTAtMDQtMjYgMjA6NDEgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIG1hZGUgdGhlIGJ1aWxkLXNjcmlwdC1jaGVjayByb3V0aW5lIGdlbmVyaWMKKworMjAxMC0wNC0yNiAyMDo0MSAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgc3VwcG9ydCBmb3IgYnVpbGQgc2NyaXB0cworCisyMDEwLTA0LTI2IDIwOjQwICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBwcm92aWRlIGluZnJhc3RydWN0dXJlIGZvciBidWlsZGluZyBhbmQgcmVuYW1pbmcgdGVzdHMKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgbW9yZSB0ZXN0IGluZnJhc3RydWN0dXJlIHNldHVwCisKKzIwMTAtMDQtMjYgMjA6NDAgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9SVU5GVUxMVEVTVFM6CisKKyAgIHN1cHBvcnQgdGhlIGtleXdvcmQgJ2FsbCcKKworMjAxMC0wNC0yNiAyMDo0MCAgaGFyZGFrZXIKKworICAgKiB0ZXN0aW5nL1JVTkZVTExURVNUUzoKKworICAgZW5hYmxlIGdyb3VwIGdhdGhlcmluZworCisyMDEwLTA0LTI2IDIwOjM5ICBoYXJkYWtlcgorCisgICAqIHRlc3RpbmcvUlVORlVMTFRFU1RTOgorCisgICBjcmVhdGlubyBvZiBhIG5ldyB0ZXN0aW5nIGhhcm5lc3MKKworMjAxMC0wNC0yNSAxNzozNyAgYnZhc3NjaGUKKworICAgKiBSRUFETUUud2luMzI6CisKKyAgIERvY3VtZW50YXRpb24gdXBkYXRlLgorCisyMDEwLTA0LTI1IDE1OjIxICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBXaW4zMjogcmV2ZXJ0ZWQgYSByZWNlbnQgdW5uZWNlc3NhcnkgbW9kaWZpY2F0aW9uLgorCisyMDEwLTA0LTI1IDE1OjAwICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaGFuZGxlIG11bHRpcGxlIC0tc2FuIGFyZ3MsIGNoZWNrIGVycm9yIGNvZGVzIG9uIG9wZW5zc2wgY21kcyBhbmQKKyAgIGRpZSBvbiBmYWlsdXJlCisKKzIwMTAtMDQtMjUgMTQ6MTggIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaDoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRoIFNESyBzdXBwb3J0IGRpc2FibGVkLgorCisyMDEwLTA0LTI1IDE0OjE4ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAKKyAgICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbjoKKworICAgV2luMzI6IHJlc3RvcmVkIGNvbnNpc3RlbmN5IGJldHdlZW4gd29ya3NwYWNlLWJ1aWxkIGFuZCBiYXRjaAorICAgYnVpbGQgLS0gbWFkZSBzdXJlIHRoYXQgbm90aWZpY2F0aW9uX2xvZy5jIGlzIG9ubHkgaW5jbHVkZWQgaW4KKyAgIHRoZSBuZXRzbm1wbWlicyBwcm9qZWN0LgorCisyMDEwLTA0LTI1IDEzOjU4ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgCisgICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIFdpbjMyOiBmaXhlcyBmb3IgcmVjZW50bHkgaW50cm9kdWNlZCBidWlsZCBicmVha2FnZS4KKworMjAxMC0wNC0yNSAxMzo1MSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbjoKKworICAgV2luMzI6IGJ1aWxkcyBhZ2FpbiB3aXRoIFNESyBzdXBwb3J0IGRpc2FibGVkLgorCisyMDEwLTA0LTI1IDEzOjQ4ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIHNubXBsaWIvY2xvc2VkaXIuYywgc25tcGxpYi9vcGVuZGlyLmMsICAKKyAgICAgICBzbm1wbGliL3JlYWRkaXIuYywgc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IHRoZSBXaW4zMiBNU1ZDIDYgbm9uLVNESyBidWlsZCB3b3JrcyBhZ2Fpbi4KKworMjAxMC0wNC0yNSAxMzo0MiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9Db25maWd1cmU6CisKKyAgIFJlbW92ZWQgYW4gb2Jzb2xldGUgdHJhbnNmb3JtYXRpb24gcnVsZS4KKworMjAxMC0wNC0yNSAxMjowNSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTWFkZSBpdCBhZ2FpbiBwb3NzaWJsZSB0byBkaXNhYmxlIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIHdoZW4KKyAgIGJ1aWxkaW5nIHZpYSB3aW4zMi9idWlsZC5iYXQuCisKKzIwMTAtMDQtMjMgMTM6MTQgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBhZGRlZCAtLXNhbiBETlM6YS5iLmMgaGFuZGxpbmcsIGhlbHAgdGV4dCBmaXhlcywgb3RoZXIgYnVnIGZpeGVzLgorICAgTm90ZSBtdWx0aXBsZSAtLXNhbiBub3Qgc3VwcG9ydGVkIHlldAorCisyMDEwLTA0LTIxIDIyOjMxICBoYXJkYWtlcgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluOgorCisgICBidWlsZCB0aGUgLm1hZGUgdmVyc2lvbiBvZiBuZXQtc25tcC1jZXJ0CisKKzIwMTAtMDQtMjEgMjI6MzEgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZCBhZnRlciBtb3ZpbmcgYWxsIHRoZSBmaWxlcyBhcm91bmQKKworMjAxMC0wNC0yMSAyMDoxNiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9vcGVuc3NsLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBidWlsZCB0cnVzdCBjaGFpbiBmb3IgY2xpZW50IGNlcnQ7IGFkZCBzdWJqZWN0IHRvIGluZGV4IGNhY2hlOworICAgcmVidWlsZCBpbmRleGVzCisgICBpZiBhbnkgZXJyb3Igd2hpbGUgcGFyc2luZyBpbmRleDsgcmVmb3JtYXQgZHVtcCBvdXRwdXQKKyAgIC0gYWRkIE5TX0NFUlRfQ0EgYWxsb3dlZF91c2UgZmxhZworICAgLSBhZGQgc3ViamVjdCwgaXNzdWVyIGFuZCBpc3N1ZXJfY2VydCB0byBuZXRzbm1wX2NlcnQKKyAgIC0gbW92ZSBjZXJ0VG9UU05fZW50cnkgdG8gY2VydF91dGlsIGhlYWRlcgorICAgLSBtb3ZlIGNvbnRhaW5lciBzZXR1cCB0byBpdHMgb3duIGZ1bmN0aW9uCisgICAtIGFkZCBzdWJqZWN0IG5hbWUgc3ViY29udGFpbmVyCisgICAtIGFkZCBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMsCisgICBuZXRzbm1wX29wZW5zc2xfY2VydF9pc3N1ZWRfYnkKKworMjAxMC0wNC0yMSAxNjoxNiAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgZG9jdW1lbnQgdGhlIHNpbmdsZS1kYXNoIC8gc25tcC5jb25mIC8gZG91YmxlLWRhc2ggcHJlY2lkZW5jZQorCisyMDEwLTA0LTIxIDE2OjE1ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IGluIHRoZSBzbm1wLmNvbmYgZmlsZSB0aGF0IHRoZSB0b2tlbnMgY2FuIGJlIHVzZWQgZm9yCisgICBjb21tYW5kIGxpbmUgYXBwbGljYXRpb25zIHRvbworCisyMDEwLTA0LTIxIDE2OjE1ICBoYXJkYWtlcgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSBmaWxlIGxvYWRpbmcgb3JkZXIgYW5kIGhvdyB0byB0dXJuIG9mZiBob3N0LXNwZWNpZmljCisgICBjb25maWcKKworMjAxMC0wNC0yMSAxNTo1MiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIG1hbi9zbm1wLmNvbmYuNS5kZWYsICAgCisgICAgICBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgTkVXUzogYXBwczogR2VuZXJpYyBob3N0LXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gc25tcC5jb25mIGZpbGVzCisgICBhcmUgbm93IHJlYWQuIFNlZSB0aGUgSE9TVC1TUEVDSUZJQyBGSUxFUyBzZWN0aW9uIG9mIHRoZQorICAgc25tcC5jb25mIG1hbnVhbCBwYWdlLgorCisyMDEwLTA0LTIwIDEyOjQ0ICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL2FzbjEuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI5NzEyNzA6IHJlZnVzZSB0byBwYXJzZSBBU04uMSB0b2tlbnMKKyAgIHdpdGggd3JvbmcgdHlwZSBmaWVsZC4KKyAgIFRoaXMgbWF5IHlpZWxkIHRvIHByb2JsZW1zIHdpdGggdGhpcmQtcGFydHkgYXBwbGljYXRpb25zIHdoaWNoCisgICBtYXkgZGVwZW5kIG9uIHBhcnNpbmcgdWdseSBBU04uMSBkYXRhIC0gd2UnbGwgc2VlLi4uCisKKzIwMTAtMDQtMjAgMDA6MTIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNvbWJpbmUgcmVtb3RlIGZpbmdlcnByaW50IGNoZWNraW5nIGFuZCBjaGVjayBib3RoIHNpZGVzCisKKzIwMTAtMDQtMjAgMDA6MDUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBpZiB0aGUgcmVtb3RlIGZpbmdlcnByaW50IGlzIHNwZWNpZmllZCwgcmVxdWlyZSBhbiBleGFjdCBtYXRjaAorCisyMDEwLTA0LTE5IDIzOjQ0ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggdmFyaW91cyBtaW5vciBidWdzLCBlc3BlY2lhbGx5IGluIG91dHB1dCBtZXNzYWdlcworCisyMDEwLTA0LTE5IDIxOjE0ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBkb2N1bWVudGF0aW9uIGFuZCBwcm90b3R5cGluZyBvZiBuZWVkZWQgUkZDIHN0ZXBzCisKKzIwMTAtMDQtMTkgMjE6MTQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY29udmVydCBpZiBlcnJvciBjaGVjayB0byByZXR1cm4gaW1tZWRpYXRlbHkgc28gb3RoZXIgY29kZSBjYW4gYmUKKyAgIG91dGRlbnRlZAorCisyMDEwLTA0LTE5IDIxOjEzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBjb21tZW50cyBmcm9tIHRoZSBSRkMgdGV4dAorCisyMDEwLTA0LTE4IDE1OjI1ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi90cmFuc3BvcnRzLCAgIAorICAgICAgd2luMzIvYnVpbGQucGwsIHdpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIAorICAgICAgICB3aW4zMi90cmFuc3BvcnRzLCB3aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmg6CisKKyAgIFdpbjMyOiBidWlsZHMgYWdhaW4uCisKKzIwMTAtMDQtMTYgMTg6NTMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNyZWF0ZWQgYSBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBzZWN1cml0eU5hbWUgZnJvbSB0aGUgY2VydAorCisyMDEwLTA0LTE2IDE4OjUzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGRvbid0IG5lZWQgdG8gc2V0IHRoZSBhY2NlcHQgc3RhdGUgZm9yIFRMUyAoanVzdCBEVExTKQorCisyMDEwLTA0LTE2IDE4OjUzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBUTFMgY29tbWVudCBkb2N1bWVudGF0aW9uIGFuZCBzdGVwcyB0YWtlbiBmcm9tIHRoZSBSRkMKKworMjAxMC0wNC0xNiAxMzo1NSAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIG51bWVyb3VzIGZpeGVzLCBtb3JlIHZlcmJvc2UgZGVmYXVsdCBvdXRwdXQsIGFkZGl0aXZlIHNob3cgZmxhZ3MsCisgICBhcmJpdHJhcnkgY29uZmlnIHBhcmFtIGhhbmRsaW5nLCBiZXR0ZXIgaGVscCB0ZXh0CisKKzIwMTAtMDQtMTYgMTM6MDggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGRvbid0IGRvdWJsZSBkZWNsYXJlIGEgc3RydWN0CisKKzIwMTAtMDQtMTYgMDM6MzAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNlcnQgdXRpbCBmaXhlcworICAgLSByZW1vdmUgdW51c2VkIHZhcnMgYW5kIGR1cGxpY2F0ZSBjb2RlCisgICAtIGNoZWNrIHBydCBiZWZvcmUgZnJlZQorICAgLSBuZXcgZnVuYyBmb3IgdHlwZSBmcm9tIGZpbGVuYW1lCisgICAtIG5ldyBmdW5jdGlvbnMgZm9yIGZpbmRpbmcgc3Vic2V0cyBmcm9tIGZpbGVuYW1lCisgICAtIGZpeCB0eXBlcyBpbiBrZXkgc2VhcmNoIGZ1bmN0aW9uIGJ1dCB0aGVuIGlmZGVmIGlmICh1bnVzZWQKKyAgIGZ1bmN0aW9uKQorCisyMDEwLTA0LTE1IDIyOjU3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICB1c2UgYSBzdHJ1Y3R1cmUgcmVmZXJlbmNlIHRvIHByZWRlY2xhcmUgdGhlIHN0cnVjdHVyZQorCisyMDEwLTA0LTE1IDIxOjI1ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBjb3JyZWN0IGRlY2xhcmF0aW9uIG9mIHRoZSBmX29wZW4gY29tbWFuZCBub3cgcmVxdWlyaW5nIHJldHVybmluZworICAgYSB0cmFuc3BvcnQKKworMjAxMC0wNC0xNSAyMTowMiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgcmVtb3ZlIHVubmVlZGVkIGNvbmZpZyBjb250YWluZXIKKworMjAxMC0wNC0xNSAyMTowMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29weSBmaW5nZXJwcmludCB0cmFuc3BvcnQgaW5mb3JtYXRpb24gaW50byBuZXcgdGxzIHN0cnVjdHVyZQorICAgd2l0aGluIERUTFNVRFAgc28gcGVyLXRyYW5zcG9ydCBmaW5nZXJwcmludHMgY2FuIGJlIHNwZWNpZmllZAorCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBwcm9wZXJseSBjaGVjayBmb3IgdGxzYmFzZSBwb2ludGVycyBpbiBkdGxzdWRwX3NlbmQoKQorCisyMDEwLTA0LTE1IDIxOjAxICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICBncmVwIHRoZSB0cmFuc3BvcnQgbGlzdCBmb3IgVExTIG5vdCBqdXN0IERUTFMgZm9yIGNoZWNraW5nIGZvcgorICAgLWxzc2wKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgYnVnIGZpeGVzIGFuZCBtYWRlIFRMU1RDUCB3b3JrIHdpdGggdGhlIC1UIGZsYWcKKworMjAxMC0wNC0xNSAyMTowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1ha2UgdGhlIGZfb3BlbiBjYWxsIGFzc2lnbiB0aGUgbmV3IHRyYW5zcG9ydCBwb2ludGVyIHRvIHVzZSAoYW5kCisgICBjaGVjayBpZiBOVUxMIGFzIGEgZmFpbHVyZSBjb25kaXRpb24KKworMjAxMC0wNC0xNSAyMTowMCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYmVnaW4gd29yayBtb3ZpbmcgRFRMUyBjb25maWcgcm91dGluZSBpbiBwbGFjZQorCisyMDEwLTA0LTE1IDIxOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgcGFzcyB0aGUgZW50aXJlIHRsc2Jhc2UgdG8gdGhlIGNsaWVudF9zZXR1cAorCisyMDEwLTA0LTE1IDIxOjAwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHN0YXJ0aW5nIHRoZSBzdG9yaW5nIG9mIGNvbmZpZyBkYXRhIGludG8gdGhlIHRsc2Jhc2UKKworMjAxMC0wNC0xNSAyMDo1OSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgY2hhbmdlIGNsaWVudCBzc2wgc2V0dXAgdG8gYWxsb3cgZm9yIGRpcmVjdCBmaW5nZXJwcmludAorICAgc3BlY2lmaWNhdGlvbiBvZiBteS90aGVpciBjZXJ0cworCisyMDEwLTA0LTE1IDIwOjU5ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9zbm1wX2FnZW50LmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBzcGxpdCBUTFMgaW50byBjcmVhdGlvbi9jbG9zZSBmdW5jdGlvbnMgZm9yIGV2ZW50dWFsIGNvbmZpZworICAgcGFzc2luZyBzdXBwb3J0CisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcGFzcyB0cmFuc3BvcnQgY29uZmlnIGRhdGEgdG8gdGhlIHRyYW5zcG9ydCBmX2NvbmZpZygpIGZ1bmN0aW9uCisKKzIwMTAtMDQtMTUgMjA6NTkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICByZXR1cm4gTlVMTCBvbiB0cmFuc3BvcnQgY29uZmlnIGVycm9yCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBORVdTOiBhcHBzOiAtVCBjb21tYW5kIGxpbmUgZmxhZyBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUKKyAgIHRyYW5zcG9ydHMKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGNoZWNrIHRyYW5zcG9ydCBOVUxMbmVzcyBiZWZvcmUgdXNpbmcKKworMjAxMC0wNC0xNSAyMDo1OCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBiZWdpbm5pbmcgb2Ygd29yayB0byBtYWtlIHRyYW5zcG9ydHMgY29uZmlndXJhYmxlIHdpdGgKKyAgIHN1cHBsaW1lbnRhbCBjb25maWd1cmF0aW9uIGRhdGEgYW5kIG5ldyBjYWxscyBmb3IgZl9vcGVuL2ZfY29uZmlnCisKKzIwMTAtMDQtMTUgMjA6NTggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgYWRkZWQgdGV4dCBpbiBjb21tZW50cyBmcm9tIGZ1dHVyZSBSRkMgdG8gZG9jdW1lbnQgdGhlCisgICBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTA0LTE1IDE4OjUxICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBtYXJrIHBlbSB3L2tleSBhcyBpZGVudGl0eTsgdHdlYWsgcGFydG5lciBkZWJ1ZzsgY29tcGFyZSBmaWxlCisgICBjdGltZSBhZ2FpbnN0IGluZGV4IHRvbworCisyMDEwLTA0LTE1IDE3OjA5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICB1c2UgbG9jYWwgc3BhY2UgdG8gcmVmb3JtYXQgY2VydCBmb3Igc2VhcmNoCisKKzIwMTAtMDQtMTUgMTY6NTUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaDoKKworICAgUGFydGlhbGx5IHJldmVydGVkIHIxODQ5NjoKKyAgIC0gQ29tbWVudGVkIG91dCAjZGVmaW5lIE5FVFNOTVBfVVNFX0RMTCBhZ2FpbiBpbiBmaWxlCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBvbiB0aGUgNS40IGJyYW5jaC4gVGhpcyBjaGFuZ2UKKyAgIGhhZCBiZWVuIGNvbW1pdHRlZCB1bmludGVudGlvbmFsbHkuCisgICAtIFJlLWVuYWJsZWQgI2RlZmluZQorICAgVVNJTkdfTk9USUZJQ0FUSU9OX0xPR19NSUJfTk9USUZJQ0FUSU9OX0xPR19NT0RVTEUgaW4KKyAgIHdpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggb24gdGhlIHRydW5rIGFuZCB0aGUKKyAgIFY1LjUgYnJhbmNoLiBXaGlsZSBidWlsZC5iYXQgcmVwb3J0cyBhbiBlcnJvciBvbiBlYXJsaWVyIGJyYW5jaGVzCisgICB3aXRoIHRoaXMgc3ltYm9sIGVuYWJsZWQsIHRoZXJlIGlzIG5vIHN1Y2ggcHJvYmxlbSBvbiB0aGUgdHJ1bmsKKyAgIG9yIFY1LjUgYnJhbmNoZXMgYW5kIGhlbmNlIHRoZXJlIHdhcyBubyByZWFzb24gdG8gZGlzYWJsZSB0aGlzCisgICBwcmVwcm9jZXNzb3Igc3ltYm9sLgorCisyMDEwLTA0LTE1IDE1OjA4ICBtYXJ6CisKKyAgICogbG9jYWwvTWFrZWZpbGUuaW46CisKKyAgIGFkZCBuZXQtc25tcC1jZXJ0IHRvIG1ha2UvaW5zdGFsbAorCisyMDEwLTA0LTE1IDEwOjUyICBqc2FmcmFuZWsKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldCwgdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQ6CisKKyAgIFRlc3RzIG5vdCB3b3JraW5nIGZvciBUQ1Agc2hvdWxkIGJlIHNraXBwZWQgYWxzbyBmb3IgVENQNi4KKworMjAxMC0wNC0xNCAxODoxMyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgZml4IHZhcnMvdGV4dCBmcm9tIGN1dC1uLXBhc3RlCisKKzIwMTAtMDQtMTQgMTc6NDUgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGZpeCBjb21tZW50cworCisyMDEwLTA0LTE0IDE3OjQ1ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBsb3RzIG9mIGNlcnQgdXBkYXRlcworICAgLSBjaGFuZ2UgY2VydCBzdWJkaXIgc2VhcmNoaW5nIHRvIG1hdGNoIG5ldC1zbm1wLWNlcnQKKyAgIC0gdXBkYXRlIGtleSB0eXBlIGhhbmRsaW5nCisgICAtIGlnbm9yZSB3b3JsZCByZWFkYWJsZSBrZXlzCisgICAtIGtlZXAgdHlwZSBpbiBpbmRleGVzCisgICAtIHR3ZWFrIGNlcnQva2V5IHByaW50IGZvcm1hdAorCisyMDEwLTA0LTE0IDE3OjQ0ICByc3RvcnkKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBtYWtlIG5ldC1zbm1wLWNlcnQgZXhlY3V0YWJsZQorCisyMDEwLTA0LTE0IDEzOjEyICBqc2FmcmFuZWsKKworICAgKiAgdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsOgorCisgICBGaXhlZCB0ZXN0cyAnUHJveHkgR0VUL1NFVCBzdXBwb3J0JyBhbmQgJ1NOTVB2MiB2YWNtIGRlbmlhbAorICAgc3VwcG9ydCcgd2l0aCB1ZHA2IHRyYW5zcG9ydC4KKworMjAxMC0wNC0xNCAwOTo0NyAgZHRzMTIKKworICAgKiAgd2luMzIsIHdpbjMyL2Jpbiwgd2luMzIvZGlzdCwgd2luMzIvZGlzdC9odG1saGVscCwgICAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyLCB3aW4zMi9kaXN0L3NjcmlwdHMsIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UsIAorICAgICAgICB3aW4zMi9saWIsIHdpbjMyL2xpYmFnZW50LCB3aW4zMi9saWJoZWxwZXJzLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkLCB3aW4zMi9saWJzbm1wLCB3aW4zMi9saWJzbm1wX2RsbCwgICAKKyAgICAgIHdpbjMyL2xpYnVjZG1pYnMsIHdpbjMyL2xvY2FsLCB3aW4zMi9uZXQtc25tcCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50LCB3aW4zMi9uZXQtc25tcC9saWJyYXJ5LCB3aW4zMi9uZXRzbm1wbWlicywgIAorICAgICAgIHdpbjMyL3NubXBidWxrZ2V0LCB3aW4zMi9zbm1wYnVsa3dhbGssIHdpbjMyL3NubXBkLCAgIAorICAgICAgd2luMzIvc25tcGRlbHRhLCB3aW4zMi9zbm1wZGYsIHdpbjMyL3NubXBnZXQsIHdpbjMyL3NubXBnZXRuZXh0LCAgCisgICAgICAgd2luMzIvc25tcG5ldHN0YXQsIHdpbjMyL3NubXBzZXQsIHdpbjMyL3NubXBzdGF0dXMsICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUsIHdpbjMyL3NubXB0ZXN0LCB3aW4zMi9zbm1wdHJhbnNsYXRlLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAsIHdpbjMyL3NubXB0cmFwZCwgd2luMzIvc25tcHVzbSwgd2luMzIvc25tcHZhY20sICAgCisgICAgICB3aW4zMi9zbm1wd2FsazoKKworICAgRG9uJ3QgdHJ5IHRvIFNWTi1tYW5hZ2UgdGhlIFdpbmRvd3MgYmF0Y2ggYnVpbGQgaW5mcmFzdHJ1Y3R1cmUKKyAgIChhZGQgcmVsZWFzZSwgZGVidWcsIE1ha2VmaWxlIHRvIHRoZSBwcmV2aW91cyBpZ25vcmUgbGlzdCkKKworMjAxMC0wNC0xNCAwODoxNiAgZHRzMTIKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZjoKKworICAgRml4IFdpbmRvd3MgYmF0Y2ggYnVpbGQgdXNpbmcgVmlzdWFsIFN0dWRpbyB3aXRoIGR5bmFtaWMgbGlua2luZy4KKyAgIFVucmVmZXJlbmNlZCBzeW1ib2wgaW50cm9kdWNlZCBieSBTVk4gcmV2aXNpb24gMTgzOTMKKworMjAxMC0wNC0xNCAwODowOCAgZHRzMTIKKworICAgKiB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogRml4IGJhdGNoIGJ1aWxkIHVzaW5nIHJlY2VudCB2ZXJzaW9ucyBvZiBWaXN1YWwKKyAgIFN0dWRpby4KKyAgIFBhcnRpYWwgYmFjayBwb3J0IG9mIFNWTiByZXZpc2lvbnMgMTc1NzMgYW5kIDE3Njk2LgorCisyMDEwLTA0LTE0IDAxOjQ3ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4IHBlcm1zIG9uIGNyZWF0ZWQgZmlsZXMgLXJ3LS0tLS0tLSwgdW1hc2soMDc3KQorCisyMDEwLTA0LTEzIDIyOjE1ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydCwgbG9jYWwvbmV0LXNubXAtY2VydC5jb25mOgorCisgICBmaXggcGVybXMsIGFkZCAtLWNuLy1jLCBiZXR0ZXIgZGF0ZXMgZGVmYXVsdHMsIHNubXAtdGxzIG9yZ191bml0LAorICAgYWRkZWQgaW5pdGlhbCBkdW1teSBjb25maWcgZmlsZQorCisyMDEwLTA0LTEzIDE0OjIxICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgZml4ZXMgZm9yIHNob3cgY21kcywgY21kbGluZSwgaGVscAorCisyMDEwLTA0LTEzIDAyOjE3ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgc3VwcG9ydCBmb3Iga2V5K2NlcnQgaW4gLnBlbSBmaWxlczsgbWlzYyB0d2Vha3MKKworMjAxMC0wNC0xMCAyMzoyNCAgdGFuZGVycworCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgYnVpbGQgZml4IGZvciBDODkgY29tcGlsZXJzIChlLmcuIG9uIEhQLVVYIDEwLjIwKQorCisyMDEwLTA0LTEwIDIyOjI1ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUNlcnRUb1RTTlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1DZXJ0VG9UU05UYWJsZS90bHN0bUNlcnRUb1RTTlRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQ2VydFRvVFNOVGFibGUvdGxzdG1DZXJ0VG9UU05UYWJsZS5oOgorCisgICBpbml0aWFsIGN1dCBhdCB0bHN0bUNlcnRUb1RTTlRhYmxlCisKKzIwMTAtMDQtMTAgMjI6MjQgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgYWRkIGRlZmluZSBvZiBtYXggaGFzaCBjb25zdGFudAorCisyMDEwLTA0LTEwIDIyOjI0ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYzoKKworICAgdXNlIGNlcnQgdXRpbCBjaGVjayBmb3IgZmluZ2VycHJpbnQgbGVuL2FsZ29yaXRobQorCisyMDEwLTA0LTEwIDEyOjU5ICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgc2hvdyBjbWQgZml4ZXMKKworMjAxMC0wNC0wOSAyMTozMiAgbWFyegorCisgICAqIGxvY2FsL25ldC1zbm1wLWNlcnQ6CisKKyAgIGZhaXJseSBmdW5jdGlvbmFsIChub24taW50ZXJhY3RpdmUpIC0gYmUgaXQga25vd246IHRoZXJlIGFyZSBidWdzCisKKzIwMTAtMDQtMDkgMjA6NTQgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlX2ludGVybmFsLmg6CisKKyAgIG1lcmdlIHNvbWUgdGFibGVfZGF0YS5jb25mIGNoYW5nZXM7IHJlbW92ZSB1bnVzZWQgY29kZSBhbmQgYQorICAgYnVuY2ggb2YgdmVyYm9zZSBjb21tZW50cworCisyMDEwLTA0LTA4IDE0OjU3ICByc3RvcnkKKworICAgKiBsb2NhbC9taWIyYy11cGRhdGU6CisKKyAgIHVzZSBmdWxsIHBhdGgKKworMjAxMC0wNC0wOCAxMDo1NSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaDoKKworICAgQ2hlY2sgcmVzdWx0cyBvZiBjYWxscyB0byBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUgYW5kIGxvZworICAgYW4gZXJyb3IuCisgICBUaGlzIGFsbG93cyB1c2VycyB0byByZWxhdGUgdmFyaW91cyAnYzY0IDMyIGJpdCBjaGVjayBmYWlsZWQnCisgICBlcnJvcnMgd2l0aCBzcGVjaWZpYyBjb3VudGVyLgorCisyMDEwLTA0LTA4IDAxOjA5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmg6CisKKyAgIGFkZCBwcm90b3R5cGUgZm9yIG5ldyBmdW5jdGlvbgorCisyMDEwLTA0LTA4IDAxOjA1ICByc3RvcnkKKworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiB0cmFuc2xhdGUgTk9TVUNIKi9FTkRPRk1JQiBlcnJvcnMgZHVyaW5nIFJFU0VSVkUxCisgICB0byBOT0NSRUFUSU9OCisKKzIwMTAtMDQtMDggMDA6NTYgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYzoKKworICAgTkVXUzogc25tcGQ6IHRhYmxlX2RhdGEvdGRhdGEgbmV4dCBoYW5kbGVyIHdpbGwgbm90IGJlIGNhbGxlZAorICAgZHVyaW5nIGdldAorICAgcHJvY2Vzc2luZyBpZiBubyB2YWxpZCByb3dzIGFyZSBmb3VuZCBmb3IgdGhlIGhhbmRsZXIKKworMjAxMC0wNC0wOCAwMDo1NiAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZS5jOgorCisgICBORVdTOiBzbm1wZDogYWdlbnQgd2lsbCBubyBsb25nZXIgY2FsbCB0YWJsZSBoYW5kbGVycyBpZiBhIHNldAorICAgcmVxdWVzdCBmb3IKKyAgIHRoZSBoYW5kbGVyIGhhcyBpbnZhbGlkIGluZGV4ZXMKKyAgIENIQU5HRVM6IHNubXBkOiBkb24ndCBjYWxsIGNsZWFudXAgb24gZmlyc3QgcmVxdWVzdCBvbiBiYWQKKyAgIGluZGV4ZXMuIGluc3RlYWQsCisgICBzZXQgYWN0dWFsIGVycm9yIGxhdGVyLCBhbmQgZnJlZSByZXF1ZXN0IGRhdGEgc2V0cyBvbiBmaXJzdAorICAgcmVxdWVzdCBmb3Igc2V0cworCisyMDEwLTA0LTA4IDAwOjU2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGFkZCBmdW5jdGlvbiB0byB2YWxpZGF0ZSBmaW5nZXJwcmludCB2YXJiaW5kCisKKzIwMTAtMDQtMDcgMjI6NTYgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIFNvbGFyaXMgdHIgZG9lc24ndCBzdXBwb3J0IGNoYXJhY3RlciByYW5nZXMgcmVsaWFibHkgKHNlZSB0aGUKKyAgIGF1dG9jb25mIG1hbnVhbCksIGNoYW5nZSB0aGUgZXhwcmVzc2lvbiB0byBvbmUgdGhhdCBpcyBzaW1wbGUKKyAgIGVub3VnaCB0byBiIHN1cHBvcnRlZC4KKworMjAxMC0wNC0wNyAxNDowNSAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIEluc2VydCB0aGUgY2FjaGUgaGVscGVyIGNvcnJlY3RseS4KKworMjAxMC0wNC0wNyAxMDo0MCAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogYWRkIGZ1bmN0aW9ucyB0byByZW1vdmUgbGlzdC9yb3cgZGF0YSBmcm9tCisgICByZXF1ZXN0IGxpc3QKKworMjAxMC0wNC0wNyAxMDo0MCAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBpZmRlZiB2YXIgZGVjbCBmb3IgdmFycyBvbmx5IHVzZWQgaW4gbGF0ZXIgaWZkZWYgYmxvY2sKKworMjAxMC0wNC0wNyAxMDo0MCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oLCBzbm1wbGliL2NoZWNrX3ZhcmJpbmQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcC10Yy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhZGQgZnVuY3Rpb24gdG8gdmFsaWRhdGUgUm93U3RhdHVzIGFuZAorICAgU3RvcmFnZVR5cGUgdmFyYmluZHMKKyAgIC0gYWxzbyByZW1vdmUgc29tZSBkdXBsaWNhdGUgY29kZSBhbmQgZml4IGNvbW1lbnRzIGluZGVudCBtYW5nbGVkCisKKzIwMTAtMDQtMDcgMTA6MzkgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLXVwZGF0ZSwgbWFuL21pYjJjLXVwZGF0ZS4xLmRlZjoKKworICAgdXBkYXRlIG1hbiBwYWdlOyBmaXggc2hlbGwgcmVkaXJlY3Q7IGNyZWF0ZSBleGFtcGxlIHJjZmlsZSBpZgorICAgbWlzc2luZworCisyMDEwLTA0LTA3IDA3OjE1ICBtYWdmcgorCisgICAqIGFwcHMvYWdlbnR4dHJhcC5jOgorCisgICBVc2UgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HIGluc3RlYWQgb2YgRElTQUJMRV9NSUJfTE9BRElORworCisyMDEwLTA0LTA3IDAwOjM4ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBPbmx5IGVuYWJsZSBob3N0U3dJbnN0IHJwbSBzdXBwb3J0IG9uIGxpbnV4IGhvc3RzCisgICB3aXRoIGxpYnJwbS4gVGhpcyBtYWtlcyBpdCBwb3NzaWJsZSB0byBidWlsZCBvbiBub24tcnBtIGxpbnV4CisgICBkaXN0cmlidXRpb25zLgorCisyMDEwLTA0LTA3IDAwOjE0ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybSwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1wcml2LCB0ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwLCAKKyAgICAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sIAorICAgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUsIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0LCB0ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcCwgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjFwcm94eXNldCwgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsOgorCisgICBDSEFOR0VTOiB0ZXN0aW5nOiBDaGFuZ2UgdGhlIHRlc3Qgc3VpdGUgdG8gd29yayBldmVuIGlmIG1pYgorICAgbG9va3VwIGlzIGRpc2FibGVkLgorCisyMDEwLTA0LTA3IDAwOjExICBtYWdmcgorCisgICAqIHRlc3RpbmcvdGVzdHMvVDA3MWNvbTJzZWM2OgorCisgICBDaGVjayBmb3IgY29tMnNlYzYsIG5vdCBjb20yc2VjLgorCisyMDEwLTA0LTA2IDIyOjUxICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBNb3ZlIGRpcmVjdG9yeSBjcmVhdGlvbiBiZWZvcmUgdGhlIGRpcmVjdG9yaWVzIGFyZSB1c2VkLgorCisyMDEwLTA0LTA2IDExOjAzICBkdHMxMgorCisgICAqIEZBUToKKworICAgUHl0aG9uIGlzIGFwcGFyZW50bHkgY2xpZW50LXNpZGUgb25seS4KKworMjAxMC0wNC0wNiAxMDowNiAgZHRzMTIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBTZXQgc3VwcGxlbWVudGFyeSBncm91cHMgYmVmb3JlIGNoYW5naW5nIFVJRAorICAgKHdoaWNoIHByb2JhYmx5IGludm9sdmVzIGdpdmluZyB1cCBwcml2aWxlZ2VzKQorCisyMDEwLTA0LTA2IDA4OjU3ICBkdHMxMgorCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgRG9jdW1lbnQgbGFyZ2UtZGlzayBzdGF0aXN0aWNzIGFzIGxhdGNoaW5nIGF0IDJUYiAocmF0aGVyIHRoYW4KKyAgIHdyYXBwaW5nKS4KKworMjAxMC0wNC0wNiAwMTo1MiAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMsIG1hbi9taWIyYy4xLmRlZjoKKworICAgTkVXUzogbWliMmM6IG1pYjJjIGNhbiBub3cgb3B0aW9uYWxseSBydW4gc2VkIG9uIGdlbmVyYXRlZCBjb2RlCisKKzIwMTAtMDQtMDYgMDE6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBjb252ZXJ0IEMrKyBjb21tZW50cyB0byBDIGNvbW1lbnRzCisKKzIwMTAtMDQtMDYgMDE6NDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBtb3ZlIHB0ciBjaGVjayBiZWZvcmUgcHJ0IHVzZQorCisyMDEwLTA0LTA2IDAxOjQ5ICByc3RvcnkKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBhZGQgZmlsZW5hbWUgdG8gZGVidWcgb24gbmV3IGNlcnRzOyBtYWtlIHN0YXRpYyBmdW5jIHRvIHJldHVybgorICAgbW9kZSBuYW1lcworCisyMDEwLTA0LTA2IDAwOjQ3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICBhbGxvdyBhIGZvdW5kIGZpbmdlcnByaW50IHNlbGYtc2lnbmVkIGNlcnQgZm9yIG5vdzsgZXZlbnR1YWxseQorICAgbmVlZCB0byByZXNwZWN0IHRoZSBNSUIgY29uZmlnIHRhYmxlCisKKzIwMTAtMDQtMDYgMDA6MTIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIG1rZGlyIHNubXBsaWIvdHJhbnNwb3J0cyB3aGVuIERORSBmb3IgYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlCisgICBkaXIKKworMjAxMC0wNC0wNiAwMDoxMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVtb3ZlIHVudXNlZCB2YXJzCisKKzIwMTAtMDQtMDYgMDA6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSB1bnVzZWQgdmFyaWFibGUKKworMjAxMC0wNC0wNiAwMDoxMSAgaGFyZGFrZXIKKworICAgKiAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGVycm9yIGNvZGUgY2xlYW51cCBmb3IgdGxzYmFzZV93cmFwdXBfcmVjdgorCisyMDEwLTA0LTA1IDIzOjEyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIG1vcmUgYmV0dGVyIGVycm9yL2RlYnVnIGNvZGVzCisKKzIwMTAtMDQtMDUgMjM6MDggIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgY29tbWVudHMgZnJvbSB0aGUgZnV0dXJlLVJGQyBhYm91dCB0aGUgaW1wbGVtZW50YXRpb247IHVzZQorICAgZmxhZ3MgZm9yIHNlcnZlci9jbGllbnQgc3BlY2lmaWNhdGlvbiBmb3IgZXhwYW5zaW9uCisKKzIwMTAtMDQtMDUgMjM6MDggIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgYmV0dGVyIGVycm9yIG1lc3NhZ2VzIGZvciB1c2FnZSBjb25zdHJhaW50cworCisyMDEwLTA0LTA1IDIzOjA4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vdmUgZnVuY3Rpb24gcHJvdGVjdGlvbiBsb2dpYyBpbiBhIHRvcC1sZXZlbCBjaGVjaworCisyMDEwLTA0LTAyIDE2OjM2ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBmaXggaW5pdCBvcmRlcmluZworCisyMDEwLTA0LTAyIDE2OjM2ICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbXYgdGxzYmFzZSBpbml0IGZ1bmN0aW9uIHRvIGEgcHJvcGVyIGN0b3IgZm9yIGF1dG8tY2FsbGluZworCisyMDEwLTA0LTAyIDE2OjM2ICBoYXJkYWtlcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmMsIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGdlbmVyYXRlIHRoZSB0cmFuc3BvcnQgaW5pdGlhbGl6YXRpb24gZnVuY3Rpb24gbGlzdAorICAgZHluYW1pY2FsbHkgYW5kIHVzZSBpdAorCisyMDEwLTA0LTAyIDE2OjM1ICBoYXJkYWtlcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiwgICAKKyAgICAgIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBTU0hEb21haW4uYywgc25tcGxpYi9zbm1wU1RERG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi90cmFuc3BvcnRzLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogbW92ZWQgdHJhbnNwb3J0IGNvZGUgaW50byBhIHNlcGFyYXRlIHN1YmRpcmVjdG9yeSBpbgorICAgc25tcGxpYgorCisyMDEwLTA0LTAyIDA5OjAyICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5jOgorCisgICBEbyBub3QgYXR0ZW1wdCB0byBjaGVjayBzaXplb2Ygdm9pZCB0byBvYnRhaW4gdGhlIGFtb3VudCBvZgorICAgbWVtb3J5IHRvIGNvcHkuCisKKzIwMTAtMDQtMDEgMTc6MTEgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaDoKKworICAgaW5zdGVhZCBvZiBmd2QgZGVjbGFyZXMsIHJlcXVpcmUgb3RoZXIgaGVhZGVyCisKKzIwMTAtMDQtMDEgMTc6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU1RDUERvbWFpbi5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZworCisyMDEwLTA0LTAxIDE3OjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbW92ZSBvdXRkYXRlZCBkZWJ1ZyBtc2cKKworMjAxMC0wNC0wMSAxNzowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICB1c2UgY2VydGFwaSB0byBmaW5kIGNlcnRzL2tleXMKKworMjAxMC0wNC0wMSAxNDo0MCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jOgorCisgICByZWdpc3RlciBleHRyYVg1MDlTdWJEaXIgdG9rZW4KKworMjAxMC0wNC0wMSAxNDoxOCAgcnN0b3J5CisKKyAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBjaGVjayBwdHIgYmVmb3JlIHVzZQorCisyMDEwLTA0LTAxIDE0OjE4ICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIGNoZWNrIHB0ciBiZWZvcmUgdXNlCisKKzIwMTAtMDQtMDEgMTM6MTMgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS90bHN0bUFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfaW50ZXJuYWwuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGVfcGVyc2lzdC5jOgorCisgICBhZGQgcGVyc2lzdGVudCBzdG9yYWdlOyB0b2tlbiBmb3IgY3JlYXRpbmcgZW50cmllcyBpbiBzbm1wZC5jb25mOworICAgZml4IGluZGV4CisKKzIwMTAtMDQtMDEgMTM6MTIgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgTkVXUzogc25tcGxpYjogbmV3IGNlcnRpZmljYXRlIGFwaSB0byBzdXBwb3J0IHRscy9kdGxzCisKKzIwMTAtMDQtMDEgMTM6MTIgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCwgc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgQ0hBTkdFUzogYWRkIGZ1bmN0aW9ucyB0byBnZXQgZmluZ2VycHJpbnQgZnJvbSBjZXJ0IGFuZCBsb2cKKyAgIG9wZW5zc2wgZXJycworCisyMDEwLTA0LTAxIDEyOjQ2ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oOgorCisgICBmaXggdHlwbworCisyMDEwLTA0LTAxIDEwOjMzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgQnVpbGRzIGFnYWluIHdpdGggcHJlLUM5MCBjb21waWxlcnMuCisKKzIwMTAtMDQtMDEgMTA6MDEgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgQ0hBTkdFUzogbWliMmM6IHRhYmxlX2RhdGEgdGVtcGxhdGUgZW5oYW5jZW1lbnRzCisgICAtIGFkZCBlcnJvciBjaGVja3MgZHVyaW5nIHRhYmxlIGluaXQKKyAgIC0gY3JlYXRlIGNhY2hlIGVhcmxpZXIgc28gd2UgY2FuIGJhaWwgb24gZmFpbHVyZQorICAgLSBhZGQgb3B0aW9uIHRvIGNyZWF0ZS9kZWxldGUgcm93IHcvb3V0IGFkZGluZy9yZW1vdmluZyBmcm9tCisgICBjb250YWluZXIKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oOgorCisgICBhZGQgaGVscGZ1bCBwYXJhbSBuYW1lcyBhcyBoaW50cyBpbiBwcm90b3R5cGUKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jOgorCisgICBzZWFyY2ggZm9yIGNvbnRhaW5lciBzcGVjaWZpYyBjb250YWluZXIgYmVmb3JlIGdlbmVyaWMKKworMjAxMC0wNC0wMSAxMDowMCAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgsIHNubXBsaWIvZGlyX3V0aWxzLmMsICAgCisgICAgICBzbm1wbGliL2ZpbGVfdXRpbHMuYzoKKworICAgTkVXUzogc25tcGxpYjogZW5oYW5jZSBmaWxlIHV0aWxzIGFuZCBkaXIgdXRpbHMKKyAgIC0gYWRkIG9wdGlvbmFsIHN0YXRzIHN0cnVjdCB0byBuZXRzbm1wX2ZpbGUKKyAgIC0gZ2VuZXJhbGl6ZSBkaXIgY29udGFpbmVyIGZpbHRlciwgYWRkIGNvbnRleHQgdG8gY2FsbGJhY2sKKyAgIC0gYWRkIG9wdGlvbiB0byBzdG9yZSBuZXRzbm1wX2ZpbGVzICh3L3N0YXRzKSBpbiBjb250YWluZXIKKyAgIGluc3RlYWQgb2YganVzdCBuYW1lCisKKzIwMTAtMDQtMDEgMTA6MDAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKKworICAgYWRkIHByb3RvdHlwZSB0byBoZWFkZXI7IGNoZWNrIHB0ciBiZWZvcmUgZGVyZWZlcmVuY2luZworCisyMDEwLTAzLTMxIDE1OjM0ICBqc2FmcmFuZWsKKworICAgKiAgbG9jYWwvTWFrZWZpbGUuaW4sIGxvY2FsL3NubXAtYnJpZGdlLW1pYiwgbWFuL01ha2VmaWxlLmluLCAgIAorICAgICAgbWFuL3NubXAtYnJpZGdlLW1pYi4xLCBtaWJzL0JSSURHRS1NSUIudHh0LCBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgbWlicy9NYWtlZmlsZS5taWI6CisKKyAgIE5FV1M6IG1pc2M6IFBBVENIOiAyOTUyNzA4OiBmcm9tIEplbnMgT3N0ZXJrYW1wOiBBZGRlZCBQZXJsCisgICBpbXBsZW1lbnRhdGlvbiBvZiBCUklER0UtTUlCCisKKzIwMTAtMDMtMzEgMDI6MTIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBwcm9wZXIgcGFja2V0IGxhYmVsaW5nIGZvciBEVExTVURQCisKKzIwMTAtMDMtMzEgMDI6MTEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHVzZSBjb21tb24gY29udGV4dCBjcmVhdGlvbiBjb2RlCisKKzIwMTAtMDMtMzAgMjM6MjQgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGNoYW5nZSBUTFMgbWV0aG9kIHRvIFRMU3YxIGZyb20gU1NMdjIzCisKKzIwMTAtMDMtMzAgMjM6MjMgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW92ZSBtb3JlIGNvbW1vbiBkYXRhIGFuZCBmdW5jdGlvbmFsaXR5IGludG8gdGhlIFRMUyBiYXNlCisKKzIwMTAtMDMtMzAgMjM6MjAgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1pbm9yIFRMUyBjb2RlIGNsZWFudXAKKworMjAxMC0wMy0zMCAyMDoyOCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHJld29yayBpZigpIHdyYXBwaW5nIGZvciBsZXNzIGNvbmZ1c2lvbiBpbiBlcnJvciBoYW5kbGluZworCisyMDEwLTAzLTMwIDIwOjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgY29kZSBjb25zb2xpZGF0aW9uIGluIHN0YXJ0X25ld19jYWNoZWRfY29ubmVjdGlvCisKKzIwMTAtMDMtMzAgMjA6MjcgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICByZW5hbWUgZ2VuZXJpYyAnYmlvJyBwb2ludGVyIHRvICdyZWFkX2JpbycgZm9yIGJldHRlciByZWFkYWJpbGl0eQorCisyMDEwLTAzLTMwIDIwOjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgbW92ZSBidWZmZXJlZCBkYXRhIGNyZWF0aW9uIHRvIGEgc2VwYXJhdGUgZnVuY3Rpb24gZm9yIHJldXNlCisKKzIwMTAtMDMtMzAgMTc6NTIgIG1hcnoKKworICAgKiBsb2NhbC9uZXQtc25tcC1jZXJ0OgorCisgICBpbml0aWFsIGNlcnQgZ2VuIHdyYXBwZXIgc2NyaXB0IC0gbm90IHdvcmtpbmcKKworMjAxMC0wMy0zMCAxNzoyNyAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIGNsZWFuIHVwIGVycm9yIG91dHB1dCBzbyBpdCBkb2Vzbid0IHJlcG9ydCB3YW50X3JlYWQgYW5kCisgICB3YW50X3dyaXRlIGVycm9ycworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgcmVuYW1pbmcgb2Ygc2VuZGluZyBmdW5jdGlvbiBmb3IgY2xhcml0eSBhbmQgY2hlY2sgb25lIG1vcmUKKyAgIGxvY2F0aW9uIGZvciBuZWVkZWQgb3V0Z29pbmcgcGFja2V0cworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYWRkZWQgZHRsc3VkcCB0cmFjaW5nIHRva2VucworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg6CisKKyAgIENIQU5HRVM6IGFkZGVkIGEgbmV3IERFQlVHVFJBQ0VUT0soKSBtYWNybworCisyMDEwLTAzLTMwIDE3OjI3ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYmV0dGVyIGNvbW1lbnRzIGFuZCBtb3JlIHdvcmsgb24gc2VuZGluZyBidWZmZXJlZCBkYXRhIGluIHRoZQorICAgcmlnaHQgc3BvdHMKKworMjAxMC0wMy0zMCAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgZml4IGFyZ3VtZW50cyB0byBnZXRfY29tbW9uTmFtZQorCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgYmVnaW5uaW5nIG9mIGNhY2hpbmcgb2YgcGFja2V0cyBiZWZvcmUgdGhleSBjYW4gYmUgc2VudCB2aWEgRFRMUworCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgaGFuZGxlIFNTTF9XQU5UX1JFQUQvV1JJVEUgYmV0dGVyOyBzdGlsbCBuZWVkIHRvIGJ1ZmZlciBvdXRnb2luZworICAgd3JpdGUgZGF0YQorCisyMDEwLTAzLTMwIDE3OjI2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbWlub3IgY2hhbmdlIHRvIG91dHB1dCBlcnJvciBwcmludGluZworCisyMDEwLTAzLTI5IDE1OjIwICBkdHMxMgorCisgICAqIHNubXBsaWIvdmFjbS5jOgorCisgICBORVdTOiBzbm1wZDogRml4IGhhbmRsaW5nIG9mIG11bHRpcGxlIG1hdGNoaW5nIFZBQ00gZW50cmllcy4KKyAgIChVc2UgdGhlICJiZXN0IiBtYXRjaCwgcmF0aGVyIHRoYW4gdGhlIGZpcnN0IG9uZSkuCisgICBSZXBvcnRlZCBieSBBZGFtIExld2lzLgorICAgTm90ZSB0aGF0IHRoaXMgY291bGQgcG90ZW50aWFsbHkgYWZmZWN0IHRoZSBiZWhhdmlvdXIgb2YKKyAgIGV4aXN0aW5nIGFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb25zLgorCisyMDEwLTAzLTI5IDE1OjE2ICBidmFzc2NoZQorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6CisgICBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHI6OmdldFZhbHVlKCk6IGRvbid0IHJldHVybgorICAgYSBwb2ludGVyIHRvIGEgYnVmZmVyIG9uIHRoZSBzdGFjay4gSG93IGNhbiB0aGlzIGhhdmUgd29ya2VkCisgICByZWxpYWJseSA/PworICAgQ0hBTkdFUzogcGVybDoKKyAgIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX3JlcXVlc3RfaW5mb1B0cjo6c2V0VmFsdWUoKSwKKyAgIEFTTl9DT1VOVEVSNjQ6IGZpeGVkIGJ1ZyB0aGF0IGNvdWxkIGNhdXNlIHRoaXMgbWV0aG9kIHRvIGZhaWwKKyAgIGV2ZW4gd2hlbiBhIHZhbGlkIG51bWJlciB3YXMgcHJvdmlkZWQuCisKKzIwMTAtMDMtMjkgMTU6MTUgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEZpeCBhZ2VudCBjcmFzaCB3aGVuIHNlbmRpbmcgZW5jcnlwdGVkIFNOTVB2MworICAgdHJhcHMuCisgICBSZXBvcnRlZCBieSBTcmlrYXBpbGFuIEdhbmRoaQorCisyMDEwLTAzLTI5IDEyOjQ2ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIENhdGNoIHN0ZGVyciBvbiBXaW5kb3dzIHRvby4KKworMjAxMC0wMy0yOSAxMTo0OCAgYnZhc3NjaGUKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBwcmUtQzkwIGNvbXBpbGVycy4KKworMjAxMC0wMy0yOSAxMToxOSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHBlcmwvT0lEL09JRC54cywgICAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhIG1lbW9yeSBsZWFrIHRyaWdnZXJlZCBieSBkZXN0cm95aW5nIGEKKyAgIE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IGZhaWx1cmUgb2YKKyAgIGNyZWF0aW5nIGEgTmV0U05NUDo6T0lEIG9iamVjdC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdHJpZ2dlcmVkIGJ5IHRoZQorICAgTmV0U05NUDo6T0lEOjpnZXR0YWJsZSgpIHN1YnJvdXRpbmUuCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhbiBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcyB0cmlnZ2VyZWQgYnkKKyAgIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBOZXRTTk1QOjpTTk1QLgorICAgQ0hBTkdFUzogcGVybDogZml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgYSBQRFUgcHJvY2Vzc2luZworICAgZXJyb3IgaW4gTmV0U05NUDo6U05NUC4KKyAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIG1lbW9yeSBsZWFrcyB0cmlnZ2VyZWQgYnkgY3JlYXRpbmcgYW4gU05NUHYzCisgICBzZXNzaW9uIHZpYSBOZXRTTk1QOjpTTk1QLgorICAgCisgICBBbHNvIGZpeGVkIHRoZSB1bmluaXRpYWxpemVkIHZhcmlhYmxlIGFjY2Vzc2VzIHRyaWdnZXJlZCBieQorICAgYWRkaW5nIGEgdmFyYmluZCB0byBhIFBEVSB2aWEgTmV0U05NUDo6U05NUCBpbnRyb2R1Y2VkIGEgZmV3IGRheXMKKyAgIGFnby4KKyAgIAorICAgVGhlIGJ1Z3MgbWVudGlvbmVkIGFib3ZlIGhhdmUgYmVlbiBmb3VuZCBieSBpbnNwZWN0aW5nIHRoZSBvdXRwdXQKKyAgIG9mIHRoZSBmb2xsb3dpbmcgc2hlbGwgY29tbWFuZDoKKyAgIGNkIHBlcmwgJiYgdmFsZ3JpbmQgLS10cmFjZS1jaGlsZHJlbj15ZXMgLS1sZWFrLWNoZWNrPWZ1bGwgbWFrZQorICAgdGVzdAorCisyMDEwLTAzLTI5IDEwOjU5ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC90L3N0YXJ0YWdlbnQucGw6CisKKyAgIFN3aXRjaGVkIGJhY2sgdG8gdGhlIHByZXZpb3VzIHdheSBvZiBzdGFydGluZyBwcm9jZXNzZXMKKyAgIGFzeW5jaHJvbm91c2x5IGJlY2F1c2UgaXQgaXMgbW9yZSByZWxpYWJsZS4KKworMjAxMC0wMy0yOSAwOToyNyAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorCisgICBEbyBub3Qgb25seSBzYXZlIHNubXBkIC8gc25tcHRyYXBkIGxvZ3MgYnV0IGFsc28gdGhlIHN0ZG91dCAvCisgICBzdGRlcnIgb3V0cHV0IGdlbmVyYXRlZCBieSB0aGVzZSBwcm9jZXNzZXMuCisKKzIwMTAtMDMtMjggMTY6MDkgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbDoKKworICAgQ2hhbmdlcyBpbiBwZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsOgorICAgLSBBZGRlZCBjb21tYW5kLWxpbmUgb3B0aW9uIC1kIGZvciBzbm1wZCBhbmQgc25tcHRyYXBkLgorICAgLSBzbm1wZCBhbmQgc25tcHRyYXBkIG91dHB1dCBpcyBub3cgc2F2ZWQgdG8gYSBsb2cgZmlsZSAob25lIHBlcgorICAgdGVzdCkuCisgICAtIFJld3JvdGUgUGVybCBjb2RlIGZvciBzdGFydGluZyB0aGUgc25tcGQvc25tcHRyYXBkIHByb2Nlc3NlcworICAgc3VjaCB0aGF0IHRoZSBzYW1lIGNvZGUgd29ya3Mgb24gVW5peCBhbmQgb24gV2luZG93cy4KKworMjAxMC0wMy0yOCAxMzozNyAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvdG9vbHMuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGFkZGVkIHRoZSBmdW5jdGlvbnMgbmV0c25tcF9tYWxsb2MoKSwKKyAgIG5ldHNubXBfY2FsbG9jKCksIG5ldHNubXBfcmVhbGxvYygpLCBuZXRzbm1wX3N0cmR1cCgpIGFuZAorICAgbmV0c25tcF9mcmVlKCkuCisgICBDSEFOR0VTOiBXaW4zMjogc25tcGxpYjogcmVtb3ZlZCB0aGUgdHJvdWJsZXNvbWUgI2RlZmluZSBtYWxsb2MKKyAgIG5ldHNubXBfbWFsbG9jIGV0Yy4gVGhpcyBtZWFucyB0aGF0IHdoZW4gY2FsbGluZyBmdW5jdGlvbnMgZnJvbQorICAgdGhlIE5ldC1TTk1QIERMTCBmcm9tIEMgb3IgQysrIGNvZGUgdGhhdCBpcyBiZWluZyBsaW5rZWQgYWdhaW5zdAorICAgYW5vdGhlciB2ZXJzaW9uIG9mIHRoZSBNU1ZDIHJ1bnRpbWUgRExMIHRoYW4gdGhlIE5ldC1TTk1QIERMTCwKKyAgIGFuZCB3aGVuIGFsbG9jYXRpbmcgbWVtb3J5IHRoYXQgd2lsbCBiZSBmcmVlZCBieSB0aGUgTmV0LVNOTVAKKyAgIERMTCwgeW91IHdpbGwgZWl0aGVyIGhhdmUgdG8gY2FsbCB0aGUgTmV0LVNOTVAgbWVtb3J5IGFsbG9jYXRpb24KKyAgIGZ1bmN0aW9ucyBleHBsaWNpdGx5IG9yIHJlZGVmaW5lIG1hbGxvYygpIGV0Yy4geW91cnNlbGYuCisKKzIwMTAtMDMtMjggMTI6NDYgIGJ2YXNzY2hlCisKKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIEZpeGVkIGEgcmVjZW50bHkgcmVpbnRyb2R1Y2VkIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDMtMjcgMTg6NDIgIGJ2YXNzY2hlCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIEFkZGVkIGEgY2hlY2sgZm9yIGludm9jYXRpb24gb2YgY2FsbG9jKCkgZnJvbSBYU1VCcy4KKworMjAxMC0wMy0yNiAxOToxNiAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHBlcmwvT0lEL09JRC54cywgICAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MzY4IGFuZCByMTgzNjk6IG1hZGUgc3VyZSB0aGF0IHRoZSBOZXQtU05NUCBQZXJsCisgICBleHRlbnNpb25zIGNvbXBpbGUgd2l0aG91dCB0cmlnZ2VyaW5nIHByZXByb2Nlc3NvciB3YXJuaW5ncyBhYm91dAorICAgcmVkZWZpbmluZyBtYWxsb2MgZXRjLiBub3IgdHJpZ2dlciAiRnJlZSB0byB3cm9uZyBwb29sIiBlcnJvcnMgb24KKyAgIFdpbmRvd3MuCisKKzIwMTAtMDMtMjYgMTQ6NDQgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmM6CisKKyAgIFJlZmFjdG9yaW5nOiBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uOgorICAgbmV0c25tcF9zZXRfbm9uX2Jsb2NraW5nX21vZGUoKS4KKworMjAxMC0wMy0yNiAxMTo1OCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jLCAgCisgICAgICAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9sb2cuYywgCisgICAgICAgIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYywgc25tcGxpYi9zbm1wdjMuYywgICAKKyAgICAgIHNubXBsaWIvdGV4dF91dGlscy5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCB1c2luZyB2YXJpYWJsZXMgb2YgdHlwZSBjaGFyIGFzIGFuCisgICBhcnJheSBzdWJzY3JpcHQuIE5vdGU6IGFzIGZhciBhcyBJIGtub3cgdGhlc2Ugd2FybmluZ3MgYXJlIG9ubHkKKyAgIHJlcG9ydGVkIHdoZW4gdXNpbmcgdGhlIEN5Z3dpbiBnbGliYyBoZWFkZXJzLgorCisyMDEwLTAzLTI2IDEwOjQxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgQWRkZWQgbWlzc2luZyAjaW5jbHVkZSBkaXJlY3RpdmUgKG9uIFdpbmRvd3MgTVNWQyB3YXMgY29tcGxhaW5pbmcKKyAgIGFib3V0IHNpemVfdCB3aGlsZSBwcm9jZXNzaW5nIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPikuCisKKzIwMTAtMDMtMjUgMjA6MDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYzoKKworICAgQ0hBTkdFUzogYWdlbnR4OiBjaGFuZ2VkIGRlZmF1bHQgVENQIHRhcmdldCBmcm9tIDAuMC4wLjA6NzA1IHRvCisgICBsb2NhbGhvc3Q6NzA1LiBUaGlzIGlzIG5vdCBvbmx5IGEgbW9yZSBzZWN1cmUgY2hvaWNlIGJ1dCBpdCBhbHNvCisgICBtYWtlcyBpdCBwb3NzaWJsZSBvbiBXaW5kb3dzIHN5c3RlbXMgdG8gbGV0IGFuIEFnZW50WCBzdWJhZ2VudAorICAgY29ubmVjdCB0byBhbiBBZ2VudFggbWFzdGVyIGFnZW50IHJ1bm5pbmcgb24gdGhlIHNhbWUgc3lzdGVtCisgICB3aXRob3V0IGhhdmluZyB0byBzZXQgdGhlIHZhcmlhYmxlIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQuCisKKzIwMTAtMDMtMjUgMTY6MTEgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvT0lEL09JRC54cywgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBwZXJsOiBmaXhlZCBzZXZlcmFsICJGcmVlIHRvIHdyb25nIHBvb2wiIGVycm9ycy4KKyAgIE5vdGU6IHNpbmNlIGNhbGxvYygpIGlzIG5vdCByZWRlZmluZWQgaW4gPENPUkUvWFNVQi5oPiB1c2luZworICAgY2FsbG9jKCkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBsZWFkcyB0byAiRnJlZSB0byB3cm9uZyBwb29sIgorICAgZXJyb3JzLCBhdCBsZWFzdCBvbiBXaW5kb3dzLgorCisyMDEwLTAzLTI1IDE2OjA0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgbW9yZSBzaWxlbnQgYnkgbm90CisgICByZWRlZmluaW5nIG1hbGxvYygpIG9yIGZyZWUoKSBkdXJpbmcgY29tcGlsYXRpb24gb2YgUGVybAorICAgZXh0ZW5zaW9ucyAocmVzdWx0ZWQgaW4gd2FybmluZ3MgYWJvdXQgbWFsbG9jKCkgLyBmcmVlKCkKKyAgIHJlZGVmaW5pdGlvbiBpbiB0aGUgUGVybCBoZWFkZXIgQ09SRS9YU1VCLmgpLgorCisyMDEwLTAzLTI1IDE1OjA2ICBidmFzc2NoZQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsIHBlcmwvU05NUC9TTk1QLnhzLCAgIAorICAgICAgcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgQ0hBTkdFUzogQlVHOiAyOTY5ODcyOiBtYWRlIHN1cmUgdGhhdCBTT0NLX1NUQVJUVVAgaXMgaW52b2tlZAorICAgYmVmb3JlIGluaXRfYWdlbnQoKSBvbiBXaW5kb3dzLgorCisyMDEwLTAzLTI1IDEzOjM5ICBqc2FmcmFuZWsKKworICAgKiAgYXBwcy9zbm1wYnVsa2dldC5jLCBhcHBzL3NubXBidWxrd2Fsay5jLCBhcHBzL3NubXBkZWx0YS5jLCAgIAorICAgICAgYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wZ2V0LmMsIGFwcHMvc25tcGdldG5leHQuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbWFpbi5jLCBhcHBzL3NubXBzZXQuYywgYXBwcy9zbm1wc3RhdHVzLmMsICAgCisgICAgICBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsIGFwcHMvc25tcHRyYXAuYywgICAKKyAgICAgIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsIGFwcHMvc25tcHdhbGsuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIFVzZSBtYWNyb3MgaW5zdGVhZCBvZiBtYWdpYyBudW1iZXJzIGFzIG5ldHNubXBfcGFyc2VfYXJncyByZXR1cm4KKyAgIGNvZGVzLgorCisyMDEwLTAzLTI1IDEzOjMwICBidmFzc2NoZQorCisgICAqICB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogc2ltcGxpZmllZCB0aGUgYnVpbGQgcHJvY2VzcyBieQorICAgcmVtb3ZpbmcgdGhlIGZpbGUgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4uIFdoaWNoIElQdjYKKyAgIGZ1bmN0aW9ucyBhcmUgZXhwb3J0ZWQgZnJvbSBuZXRzbm1wLmRsbCBpcyBub3cgZGV0ZXJtaW5lZCBieQorICAgd2hpY2ggb2YgdGhlIGZ1bmN0aW9ucyBpbiB0aGlzIERMTCBoYXZlIGJlZW4gZGVjbGFyZWQgYXMKKyAgIE5FVFNOTVBfSU1QT1JULgorCisyMDEwLTAzLTI0IDIwOjExICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfZW51bS5jOgorCisgICBkb24ndCB1c2UgcGFzc2VkIHB0ciBhcyB0ZW1wIHZhcjsgdXNlIHNubXBfZW51bV9saXN0cyBpbiBpbml0CisgICB0ZXN0CisKKzIwMTAtMDMtMjQgMjA6MTAgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg6CisKKyAgIGFkZCBORVRTTk1QX0RTX0xJQl9DRVJUX0VYVFJBX1NVQkRJUgorCisyMDEwLTAzLTI0IDIwOjEwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgbW92ZSBjZXJ0IGluaXQgZWFybGllciAoaGF2ZSB0bHNfYm9vdHN0cmFwIGNhbGwgaXQpCisKKzIwMTAtMDMtMjQgMjA6MTAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IGNvbXBpbGVyIHdhcm5pbmdzOyBhZGQgY2VydCBkZWJ1ZyBtc2dzIGluIHNlcnZlciBzZXR1cDsgZnJlZQorICAgc3NsIGxvZyBkYXRhCisKKzIwMTAtMDMtMjQgMTA6NDcgIGpzYWZyYW5laworCisgICAqICBhcHBzL3NubXBidWxrZ2V0LmMsIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsICAgCisgICAgICBhcHBzL3NubXBkZi5jLCBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMsIGFwcHMvc25tcHNldC5jLCBhcHBzL3NubXBzdGF0dXMuYywgICAKKyAgICAgIGFwcHMvc25tcHRhYmxlLmMsIGFwcHMvc25tcHRlc3QuYywgYXBwcy9zbm1wdHJhcC5jLCAgIAorICAgICAgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgYXBwcy9zbm1wd2Fsay5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgQ0hBTkdFUzogYXBwczogcmV0dXJuIG5vemVybyBleGl0IGNvZGUgd2hlbiBwYXJzaW5nIG9mIGNlcnRhaW4KKyAgIHBhcmFtZXRlciBmYWlscy4KKyAgIEUuZy4gJy1BJyBwYXJhbWV0ZXIgd2l0aCB0b28gc2hvcnQgcGFzc3BocmFzZSBvciBLdSBrZXkKKyAgIGdlbmVyYXRpb24gaW4gZ2VuZXJhbC4KKworMjAxMC0wMy0yNCAwNzoxMSAgbWFnZnIKKworICAgKiBhcHBzL2FnZW50eHRyYXAuYzoKKworICAgQ29ycmVjdCB0aGUgdHlwZSBvZiB0aGUgaWQvZGVzY3JpcHRpb24gb2YgdGhlIE9wZW4tUERVLgorCisyMDEwLTAzLTIyIDE4OjI5ICBidmFzc2NoZQorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBVcGRhdGVzIGZvciAibWFrZSBjaGVja3MiOgorICAgLSBNYWRlIHN1cmUgdGhhdCBleGl0IGNvZGUgMCBpcyBnZW5lcmF0ZWQgd2hlbiB0aGUgY2hlY2sgaXMKKyAgIHN1Y2Nlc3NmdWwgYW5kIHRoYXQKKyAgIGV4aXQgY29kZSAxIGlzIGdlbmVyYXRlZCB3aGVuIHRoZSBjaGVjayBmYWlsZWQuCisgICAtIE1hZGUgIm1ha2VmaWxlY2hlY2siIHNraXAgU3VidmVyc2lvbiBib29ra2VlcGluZyBmaWxlcyBhbmQgYWxzbworICAgdGhlIG1ha2VmaWxlCisgICB0aGF0IGNvbnRhaW5zICJtYWtlZmlsZWNoZWNrIi4KKworMjAxMC0wMy0yMiAxNjoxMCAgZHRzMTIKKworICAgKiBtaWJzL05FVC1TTk1QLVBBU1MtTUlCLnR4dDoKKworICAgRml4IHR5cG8gaW4gZGVmYXVsdCBJcEFkZHJlc3MgdmFsdWUKKyAgIChTZWUgQnVnICMyOTcyMTQxKQorCisyMDEwLTAzLTIyIDE1OjQ0ICByc3RvcnkKKworICAgKiAgTWFrZWZpbGUuaW4sIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgc25tcGxpYi9jYWxsYmFjay5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG91bGwuYzoKKworICAgY2hhbmdlIGFsbCBhc3NlcnQoKSB0byBuZXRzbm1wX2Fzc2VydCgpOyBhZGQgYXNzZXJ0Y2hlY2sgdG8gdG9wCisgICBsZXZlbCBtYWtlZmlsZQorCisyMDEwLTAzLTIyIDE1OjI0ICBidmFzc2NoZQorCisgICAqIG1pYnMvVUNELURJU0tJTy1NSUIudHh0OgorCisgICBGb2xsb3ctdXAgZm9yIHIxODM0OTogYWRkZWQgbWlzc2luZyBjb21tYSBzdWNoIHRoYXQgaXQgaXMgYWdhaW4KKyAgIHBvc3NpYmxlIHRvIGNvbXBpbGUgVUNELURJU0tJTy1NSUIuCisKKzIwMTAtMDMtMjIgMTQ6MzYgIGR0czEyCisKKyAgICogYWdlbnQvc25tcGQuYywgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgRml4IGJ1aWxkIHdoZW4gTUlCIGxvYWRpbmcgaXMgZGlzYWJsZWQgKGJyb2tlbiBieSBTVk4gcmV2aXNpb24KKyAgIDE4MzQxKQorICAgUmVwb3J0IGRlZmF1bHQgTUlCIHBhdGggZm9yIGNsaWVudCBhcHBzIHRvby4KKworMjAxMC0wMy0yMiAxMzo1OSAgZHRzMTIKKworICAgKiAgbWFuL3NubXBfYXBpX2VycnN0cmluZy4zLCBtYW4vc25tcF9jbG9zZS4zLCBtYW4vc25tcF9lcnJvci4zLCAgIAorICAgICAgbWFuL3NubXBfZnJlZV9wZHUuMywgbWFuL3NubXBfb3Blbi4zLCBtYW4vc25tcF9wZXJyb3IuMywgICAKKyAgICAgIG1hbi9zbm1wX3JlYWQuMywgbWFuL3NubXBfc2VsZWN0X2luZm8uMywgbWFuL3NubXBfc2VuZC4zLCAgIAorICAgICAgbWFuL3NubXBfc2Vzc19wZXJyb3IuMywgbWFuL3NubXBfdGltZW91dC4zOgorCisgICBDSEFOR0VTOiBtYW46IEJVRzogMjk3Mjg2MDogVXBkYXRlIGJyb2tlbiByZWZlcmVuY2VzCisKKzIwMTAtMDMtMjIgMTM6NDkgIGR0czEyCisKKyAgICogIG1pYnMvVUNELURJU0tJTy1NSUIudHh0LCBtaWJzL1VDRC1ETE1PRC1NSUIudHh0LCAgIAorICAgICAgbWlicy9VQ0QtSVBGSUxURVItTUlCLnR4dCwgbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBDSEFOR0VTOiBtaWJzOiBCVUc6IDI5NzM4OTA6IEZpeCBpbXBvcnRzLCBEaXNrSU9FbnRyeSBsaXN0IGFuZAorICAgcmV2aXNpb24gaGlzdG9yaWVzCisKKzIwMTAtMDMtMjIgMTE6NTUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBXaW4zMiwgd2luRXh0RExMOiBzb2x2ZWQgdGhlIG15c3Rlcnkgb2YgIkFTTiB0eXBlIHplcm8iLiBUaGUKKyAgIHdpbkV4dERMTCBjb2RlIGRvZXMgbm93IG5vIGxvbmdlciB0cmlnZ2VyIGNvbnZlcnNpb25zIG9mIFdpbmRvd3MKKyAgIEFTTiB2YXJiaW5kcyB3aXRoIEFTTiB0eXBlIHplcm8uIE5vdGU6IHRoaXMgY29kZSBjaGFuZ2UgZG9lcyBub3QKKyAgIGNoYW5nZSB0aGUgYWdlbnQgYmVoYXZpb3IuCisKKzIwMTAtMDMtMjAgMjA6MjEgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBNU1ZDLgorCisyMDEwLTAzLTIwIDIwOjIwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYzoKKworICAgQWRkZWQgYSB0cmFpbGluZyBiYWNrc2xhc2ggKHNob3VsZCBoYXZlIGJlZW4gYWRkZWQgaW4gdGhlCisgICBwcmV2aW91cyBjb21taXQpLgorCisyMDEwLTAzLTIwIDE5OjM2ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L3NubXBkLmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMsIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAKKyAgICAgICAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICBzbm1wbGliL3dpbnBpcGUuYywgc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIENIQU5HRVM6IGxpYnNubXA6IGNoYW5nZWQgdGhlIHR5cGUgb2YgdGhlIGZvdXJ0aCBhcmd1bWVudCBvZgorICAgbmV0c25tcF9zZXRfcm93X2NvbHVtbigpIGZyb20gY29uc3QgY2hhciogdG8gY29uc3Qgdm9pZCogc3VjaAorICAgdGhhdCBubyBjYXN0IGlzIG5lY2Vzc2FyeSB3aGVuIHBhc3NpbmcgYW5vdGhlciBkYXRhdHlwZSB0aGVuCisgICBjaGFyKiBvciBjb25zdCBjaGFyKi4KKyAgIENIQU5HRVM6IFdpbjMyOiBjaGFuZ2VkIGluX2FkZHJfdCBmcm9tIHVfaW50IHRvIHVfbG9uZyBzdWNoIHRoYXQKKyAgIGl0IG1hdGNoZXMgdGhlIGRhdGF0eXBlIG9mIHNvY2thZGRyX2luOjpzaW5fYWRkci4KKyAgIEFsc28sIGZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgKG1vc3RseSBjaGFyICogPD4gdV9jaGFyICoKKyAgIG1pc21hdGNoZXMpIGFuZCByZW1vdmVkIHNvbWUgY2FzdHMuCisKKzIwMTAtMDMtMjAgMTk6MTYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIEZpeGVkIHRoZSBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSBnY2MgKE1pbkdXKS4KKworMjAxMC0wMy0yMCAxOTowNSAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIHNpZ3Byb2NtYXNrLgorCisyMDEwLTAzLTIwIDA5OjE0ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBSZWZhY3RvcmluZzogbW92ZWQgZHVwbGljYXRlZCBjb2RlIGludG8gYSBuZXcgZnVuY3Rpb24uCisKKzIwMTAtMDMtMTkgMjI6NTYgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIGFnZW50L3NubXBkLmMsIHNubXBsaWIvcGFyc2UuYzoKKworICAgUmVwb3J0IE1JQiBhbmQgY29uZmlnIGRpcmVjdG9yaWVzIHNlYXJjaCBwYXRocyBvbiBlcnJvcnMKKyAgIChhbmQgaW4gdGhlIGhlbHAgbWVzc2FnZSkKKworMjAxMC0wMy0xOSAxMzoxMiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogbWFkZSB0aGUgZXJyb3IgbWVzc2FnZSB0aGF0IGlzIGxvZ2dlZCB3aGVuCisgICBkdXBsaWNhdGUgcmVnaXN0cmF0aW9uIGlzIGF0dGVtcHRlZCBtb3JlIGRldGFpbGVkLgorICAgCisgICBBbiBleGFtcGxlOgorICAgKGJlZm9yZSkKKyAgIGR1cGxpY2F0ZSByZWdpc3RyYXRpb24gKG1pYklJL3NubXAsCisgICBDOlxXSU5ET1dTXFN5c3RlbTMyXHNubXBtaWIuZGxsKQorICAgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbGVkLgorICAgKGFmdGVyKQorICAgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbjogTUlCIG1vZHVsZXMgbWliSUkvc25tcCBhbmQKKyAgIEM6XFdJTkRPV1NcU3lzdGVtMzJcc25tcG1pYi5kbGwgKG9pZCAuMS4zLjYuMS4yLjEuMTEpLgorICAgaGFuZGxlciByZWdpc3RyYXRpb24gZmFpbGVkLgorCisyMDEwLTAzLTE5IDEyOjQwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogbXVsdGlwbGUgdmFyYmluZCBzZXQgcmVxdWVzdHMgYXJlIG5vdworICAgcHJvY2Vzc2VkIGNvcnJlY3RseS4KKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IG1hZGUgZXJyb3IgY29kZXMgaW4gU05NUCByZXNwb25zZSBQRFVzCisgICBhcyBSRkMtY29tcGxpYW50IGFzIHBvc3NpYmxlLgorICAgQ0hBTkdFUzogV2luMzI6IHdpbkV4dERMTDogaWYgbG9hZGluZyBhbiBleHRlbnNpb24gRExMIGZhaWxzLCB0aGUKKyAgIHJlYXNvbiB3aHkgbG9hZGluZyBmYWlsZWQgaXMgbm93IGxvZ2dlZC4KKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IGZpeGVkIGEgbWVtb3J5IGxlYWsgdGhhdCBvY2N1cnJlZCB3aGVuCisgICBTbm1wRXh0ZW5zaW9uUXVlcnkoRXgpIGZhaWxlZC4gVGhpcyBtZW1vcnkgbGVhayBoYXMgYmVlbiBmb3VuZAorICAgdmlhIHNvdXJjZSByZWFkaW5nLiBOb3RlOiBpdCBpcyBub3QgY2xlYXIgd2hldGhlciBpdCB3YXMgcG9zc2libGUKKyAgIHRvIHRyaWdnZXIgdGhpcyBtZW1vcnkgbGVhay4gVGhpcyBsZWFrIGlzIGNlcnRhaW5seSBub3QgdHJpZ2dlcmVkCisgICBieSBldmVyeSByZXF1ZXN0IGZvciB3aGljaCBhIHJlc3BvbnNlIHdpdGggbm9uLXplcm8gZXJyb3Igc3RhdHVzCisgICBpcyBzZW50IGJhY2suCisKKzIwMTAtMDMtMTggMTY6MjkgIHJzdG9yeQorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAga2VlcCBjb3VudCBvZiBlbmFibGVkIGxvZ3M7IHVzZSB0aGlzIGNvdW50IHRvIGRldGVybWluZSB3aGVuIHRvCisgICBsb2cgdG8gc3RkZXJyCisKKzIwMTAtMDMtMTggMTY6MjggIHJzdG9yeQorCisgICAqICBhcHBzL3NubXB0cmFuc2xhdGUuYywgYXBwcy9zbm1wdHJhcGQuYywgc25tcGxpYi9jZXJ0X3V0aWwuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IG5ldyBzbm1wIHRva2VuIGxvZ09wdGlvbiBhbGxvd3Mgc3BlY2lmeWluZyBsb2cKKyAgIGRlc3RpbmF0aW9ucyB2aSBjb25mIGZpbGVzCisgICAtIGlmIHN0ZGVyciBsb2cgZW5hYmxlZCBiZWNhdXNlIG9mIG5vIGxvZyBkZXN0aW5hdGlvbiwgdHVybiBpdAorICAgb2ZmIHdoZW4gYQorICAgbG9nIGRlc3RpbmF0aW9uIGlzIGVuYWJsZWQKKyAgIC0gZG9uJ3QgY2FsbCBuZXRzbm1wX2VuYWJsZV9zdGRlcnJsb2coKSBmcm9tIGFwcHMgYW55bW9yZQorCisyMDEwLTAzLTE4IDE1OjMxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICB1ZHAgdHJhbnNwb3J0IGluaGVyaXRhbmNlIHR3ZWFrcworICAgLSBtb3ZlIGJhc2ljIHVkcCByZWN2ZnJvbS9zZW5kdG8gY29kZSBmcm9tIFVEUERvbWFpbiB0bworICAgVURQQmFzZURvbWFpbgorICAgLSB0d2VhayB1cGQgcmVjdmZyb20vc2VuZHRvIHRvIGNhbGwgdWRwYmFzZSB2ZXJzdGlvbgorICAgLSB0d2VhayB1ZHBpcHY0IHJlY3Zmcm9tL3NlbmR0byB0byBjYWxsIHVkcGJhc2UgdmVyc2lvbgorICAgLSBhbHNvIGZpeGVkIG5ldHNubXBfaXB2NF8qIC0+IG5ldHNubXBfdWRwaXB2NF8qCisgICAtIHR3ZWFrIERUTFNVRFBEb21haW4gb3QgdXNlIHVkcGJhc2VfKiBpbnN0ZWFkIG9mIHVkcF8qCisKKzIwMTAtMDMtMTggMTU6MjEgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBwcm90ZWN0IGNlcnQgaGVhZGVyIGFuZCBpbml0IGNhbGwgd2l0aCBpZmRlZnMKKworMjAxMC0wMy0xNyAxOTowMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgdXNlIG5ldyB1dGlsaXR5IHJvdXRpbmUgZm9yIGNlcnQgbmFtZXMKKworMjAxMC0wMy0xNyAxOTowMSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgbW92ZSBzbm1wX29wZW5zc2wgaGVhZGVyIGFmdGVyIG9wZW5zc2wgaGVhZGVycworCisyMDEwLTAzLTE3IDE5OjAwICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvc25tcF9vcGVuc3NsLmM6CisKKyAgIGFkZCByb3V0aW5lcyB0byBwdWxsL2R1bXAgbmFtZXMgZnJvbSBYNTA5IGNlcnRzCisKKzIwMTAtMDMtMTcgMTk6MDAgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIHVzZSBlbnVtIGxpc3RzIHRvIG1hbmFnZSBkaXJlY3RvcnkgaW5kZXhlcworCisyMDEwLTAzLTE3IDE5OjAwICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfZW51bS5jOgorCisgICBpbml0aWFsaXplIHN0YXRpYyBzdG9yYWdlIGJlZm9yZSB1c2U7IHByb3RlY3QgZW51bSBpbml0IGZyb20KKyAgIG11bHRpcGxlIGNhbGxzCisKKzIwMTAtMDMtMTcgMTg6NTQgIHJzdG9yeQorCisgICAqIFJFQURNRS5hZ2VudC1taWJzOgorCisgICBhZGQgaW5mbyBhYm91dCBuZXcgdHNtL3RscyBtaWJzCisKKzIwMTAtMDMtMTcgMTg6NTQgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBtb3ZlIGNlcnQgaW5pdCB0byBzbm1wIGluaXQKKworMjAxMC0wMy0xNyAxMzozNyAgYnZhc3NjaGUKKworICAgKiBtaWJzL05FVC1TTk1QLUFHRU5ULU1JQi50eHQsIG1pYnMvTkVULVNOTVAtRVhURU5ELU1JQi50eHQ6CisKKyAgIFVwZGF0ZWQgTUlCIHJldmlzaW9uIGhpc3RvcnkuCisKKzIwMTAtMDMtMTcgMTM6MjkgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZml4ZWQgb25lIGxlYWstYXQtZXhpdC4KKworMjAxMC0wMy0xNyAxMjo0NCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQ0hBTkdFUzogQlVHOiAyOTcxMjU3OiBGaXhlZCB3aW5FeHRETEwgaGFuZGxpbmcgb2YgbXVsdGktdmFyYmluZAorICAgZ2V0TmV4dCByZXF1ZXN0cyB3aXRoIE9JRHMgaW4gcmV2ZXJzZSBsZXhpY29ncmFwaGljYWwgb3JkZXIuCisKKzIwMTAtMDMtMTcgMTA6MjUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIE1vcmUgd2luRXh0RExMIGRlYnVnIG91dHB1dCB0dW5pbmcuCisKKzIwMTAtMDMtMTYgMTk6MzEgIGJ2YXNzY2hlCisKKyAgICogbWlicy9ORVQtU05NUC1BR0VOVC1NSUIudHh0OgorCisgICBDb21waWxlcyBub3cgd2l0aCBNSUIgY29tcGlsZXJzIHRoYXQgZG8gbm90IHJlY29nbml6ZSBhIGRvdWJsZQorICAgZGFzaCBhcyB0aGUgZW5kIG9mIGEgTUlCIGNvbW1lbnQuCisKKzIwMTAtMDMtMTYgMTk6MjcgIGJ2YXNzY2hlCisKKyAgICogbWlicy9ORVQtU05NUC1FWFRFTkQtTUlCLnR4dDoKKworICAgRml4ZWQgdHdvIHN5bnRheCBlcnJvcnMuCisKKzIwMTAtMDMtMTYgMTk6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiB3aW5FeHRETEw6IGZpeGVkIGEgYnVnIGluIGdldE5leHQgaGFuZGxpbmcgdGhhdAorICAgY291bGQgY2F1c2UgdGhlIE1JQiBvdXRwdXQgdG8gYmUgdHJ1bmNhdGVkLgorCisyMDEwLTAzLTE2IDE4OjUwICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBNYWRlIHdpbkV4dERMTCBkZWJ1ZyBvdXRwdXQgbW9yZSBkZXRhaWxlZC4KKworMjAxMC0wMy0xNiAxNToyNCAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaDoKKworICAgTWFkZSBzdXJlIHRoYXQgQysrIHByb2dyYW1zIHRoYXQgaW5jbHVkZSBOZXQtU05NUCBoZWFkZXIgZmlsZXMKKyAgIGNvbXBpbGUgYWdhaW4uCisKKzIwMTAtMDMtMTUgMDc6MjAgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jOgorCisgICBNYWtlIGl0IGNvbXBpbGUgd2l0aCAtLWRpc2FibGUtZGVwcmVjYXRlZCBhZ2Fpbi4KKworMjAxMC0wMy0xNSAwNzoxOSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL2RlYnVnX2hhbmRsZXIuYzoKKworICAgRGlzYWJsZSBhbGwgdGhlIHByaW50aW5nIGlmIGRlYnVnIG91dHB1dCBpcyBvZmYuCisKKzIwMTAtMDMtMTUgMDA6MTcgIHRhbmRlcnMKKworICAgKiBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIGZpeCBjb21waWxlciB3YXJuaW5ncyByZWdhcmRpbmcgcHJpbnRmIGZvcm1hdAorCisyMDEwLTAzLTE1IDAwOjA3ICB0YW5kZXJzCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jOgorCisgICBmaXggY29tcGlsZXIgd2FybmluZ3MgcmVnYXJkaW5nIHByaW50ZiBmb3JtYXQKKworMjAxMC0wMy0xNCAyMTowNSAgcnN0b3J5CisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmg6CisKKyAgIG1ha2Ugc3VyZSBoZWFkZXIgaWZkZWYgbmFtZSBpcyB1bmlxdWUKKworMjAxMC0wMy0xNCAyMTowNCAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuaDoKKworICAgYWRkIG1pc3NpbmcgaW5pdC9zaHV0ZG93biBwcm90b3R5cGVzIHRvIGZpeCBjb21waWxlciB3YXJuaW5ncworCisyMDEwLTAzLTE0IDIxOjAzICByc3RvcnkKKworICAgKiBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBtb3ZlIGRlYnVnIG1lc3NhZ2UgZWFybGllcgorCisyMDEwLTAzLTE0IDIxOjAyICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmM6CisKKyAgIGFkZCBwcm90b3R5cGUgZm9yIG5ldHNubXBfaW5pdF9jb250YWluZXI7IGZpeCBjb21wbGVyIHdhcm5pbmcKKworMjAxMC0wMy0xNCAyMDo1MSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgQ29ycmVjdCBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4gYW5kIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybgorICAgZm9yIHRoZSBORVRTTk1QX05PX0RFQlVHR0lORyBjYXNlCisKKzIwMTAtMDMtMTQgMTk6MTAgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsIHNubXBsaWIvY2VydF91dGlsLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHJlbmFtZSBjZXJ0IGluaXQvc2h1dGRvd24gZnVuY3M7IG9ubHkgY29tcGlsZSBjZXJ0X3V0aWxzIGlmCisgICB1c2luZy9oYXZlIFNTTDsgaW5pdCBjZXJ0cyBmcm9tIHRscyBiYXNlCisKKzIwMTAtMDMtMTQgMTk6MDkgIHJzdG9yeQorCisgICAqIHNubXBsaWIvY2VydF91dGlsLmM6CisKKyAgIGNhbGwgbmV0c25tcF9pbml0X29wZW5zc2wgaW5zdGVhZCBvZiBuZXRzbm1wX2luaXRfdGxzYmFzZQorCisyMDEwLTAzLTE0IDE5OjA5ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgdXBkYXRlIGZvciByZW5hbWVkIG9iamVjdHMgaW4gdmVyc2lvbiAwOCBvZiB0aGUgZHRscyBkcmFmdAorCisyMDEwLTAzLTE0IDE5OjA4ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliLCBhZ2VudC9taWJncm91cC90bHN0bS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi90bHN0bUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3Rsc3RtQWRkclRhYmxlL3Rsc3RtQWRkclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90bHN0bS1taWIvdGxzdG1BZGRyVGFibGUvdGxzdG1BZGRyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIsIGFnZW50L21pYmdyb3VwL3RzbS1taWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmg6CisKKyAgIGltcG9ydCBpbml0aWFsIGNvZGUgZm9yIGR0bHMgbWlicworCisyMDEwLTAzLTE0IDE5OjA4ICByc3RvcnkKKworICAgKiBtaWJzL1RMU1RNLU1JQi50eHQ6CisKKyAgIFRMU1RNLU1JQiBmcm9tIGRyYWZ0LWlldGYtaXNtcy1kdGxzLXRtLTA5LnR4dAorCisyMDEwLTAzLTE0IDE3OjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgRml4ZWQgYSBmZXcgbW9yZSBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wMy0xNCAxNDoxMCAgYnZhc3NjaGUKKworICAgKiBwZXJsL2RlZmF1bHRfc3RvcmUvdGVzdC5wbDoKKworICAgRm9sbG93LXVwIGZvciByMTczODQ6IGNoYW5nZWQgTkVUU05NUF9EU19NQVhfU1VCSURTIGZyb20gNDAgdG8KKyAgIDQ4LgorCisyMDEwLTAzLTE0IDEzOjUzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDaGFuZ2VzOgorICAgLSBSZW1vdmVkIC1Xbm8tY2hhci1zdWJzY3JpcHRzIGZyb20gREVWRkxBR1MuIFVzaW5nIGEgdmFyaWFibGUgb3IKKyAgIGV4cHJlc3Npb24gb2YKKyAgIHR5cGUgY2hhciBhcyBhbiBhcnJheSBpbmRleCBpcyBhbG1vc3QgYWx3YXlzIGFuIGVycm9yLgorICAgRnVydGhlcm1vcmUsCisgICAtV2NoYXItc3Vic2NyaXB0IGRvZXMgbm90IHRyaWdnZXIgYW55IHdhcm5pbmdzIG9uIHRoZSBOZXQtU05NUAorICAgY29kZSBiYXNlLgorICAgLSBSZW1vdmVkIC1XaW5saW5lIGZyb20gREVWRkxBR1MuIE5vdCBvbmx5IHdhcyBub2JvZHkgcGF5aW5nCisgICBhdHRlbnRpb24gdG8gdGhlCisgICBtZXNzYWdlcyB0cmlnZ2VyZWQgYnkgLVdpbmxpbmUsIGJ1dCByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGdjYworICAgY29tcGlsZXIgYXJlCisgICBiZXR0ZXIgdGhhbiBodW1hbnMgYXQgZGVjaWRpbmcgd2hpY2ggZnVuY3Rpb25zIHNob3VsZCBiZSBpbmxpbmVkCisgICBhbmQgd2hpY2gKKyAgIG9uZXMgbm90LgorCisyMDEwLTAzLTE0IDEzOjM5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlcmFuIGF1dG9yZWNvbmYuCisKKzIwMTAtMDMtMTQgMTM6MzkgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYzoKKworICAgRml4ZWQgc2V2ZXJhbCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wMy0xNCAxMzozNiAgYnZhc3NjaGUKKworICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgUmVtb3ZlZCB0aGUgJzB4JyBwcmVmaXggYWdhaW4gZnJvbSBhIGRlYnVnIHN0YXRlbWVudCB0aGF0IHdhcworICAgaW50cm9kdWNlZCBpbiByMTgyODIuCisKKzIwMTAtMDMtMTMgMTk6MDcgIGJ2YXNzY2hlCisKKyAgICogIHBlcmwvQVNOL0FTTi54cywgcGVybC9PSUQvT0lELnhzLCBwZXJsL1NOTVAvU05NUC54cywgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cywgcGVybC9UcmFwUmVjZWl2ZXIvcHBwb3J0LmgsICAgCisgICAgICBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBGaXhlZCBtb3N0IGNvbXBpbGVyIHdhcm5pbmdzIHRyaWdnZXJlZCBieSB0aGUgc291cmNlIGNvZGUgaW4gdGhlCisgICBwZXJsIHN1YmRpcmVjdG9yeS4KKyAgIE5vdGU6IHRoZXNlIGNoYW5nZXMgbWF5IGNvbnRhaW4gc29tZSByZWFsIGJ1ZyBmaXhlcy4KKworMjAxMC0wMy0xMyAwOTo1NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcmVjZW50bHkgaW50cm9kdWNlZCBjb21waWxlciB3YXJuaW5ncy4KKworMjAxMC0wMy0xMyAwMToxNiAgaGFyZGFrZXIKKworICAgKiBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIGRlZmluZSB0aGUgVExTVENQIERPTUFJTgorCisyMDEwLTAzLTEzIDAxOjE2ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgZml4IGlmZGVmIHR5cG8KKworMjAxMC0wMy0xMiAyMDoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIGNoYW5nZSBkZWJ1Z2dpbmcgc3ltYm9sIG5hbWVzIHRvIGEgZ2VuZXJpYyB0bHMgc3RyaW5nCisKKzIwMTAtMDMtMTIgMjA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGluaXRpYWwgd29ya2luZyBTTk1QIG92ZXIgVExTIG92ZXIgVENQIGNvbm5lY3Rpb24KKworMjAxMC0wMy0xMiAyMDoyMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIHByaW50IGEgbW9yZSBjb21wbGV0ZSBPcGVuU1NMIHN0YWNrCisKKzIwMTAtMDMtMTIgMjA6MjIgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGZpeCBhc3NlcnQgc3RhdGVtZW50cworCisyMDEwLTAzLTEyIDIwOjIxICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oOgorCisgICBhZGRlZCBhbiBhY2NlcHRlZF9iaW8gcG9pbnRlciBmb3IgdGhlIGJpbyBhZnRlciBTU0xfYWNjZXB0CisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBhZGQgdGhlIGFiaWxpdHkgZm9yIGZfY29weSBhbmQgZl9jb25maWcKKworMjAxMC0wMy0xMiAyMDoyMSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaDoKKworICAgbWlzc2luZyA7CisKKzIwMTAtMDMtMTIgMjA6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGFkZCBhIGZfY29weSBwb2ludGVyCisKKzIwMTAtMDMtMTIgMjA6MjAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIHJldHVybiBpbnQgbm90IGludCAqIG9uIGVycm9yCisKKzIwMTAtMDMtMTIgMjA6MjAgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg6CisKKyAgIGFkZGVkIGEgZl9jb25maWcgZnVuY3Rpb24gZm9yIHRyYW5zcG9ydHMKKworMjAxMC0wMy0xMiAxMTo1MyAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0YWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wdGFibGU6IFBBVENIOiAyODUwMDY3OiBTdXBwcmVzcyBleHRyYW5lb3VzICJpbmRleCIKKyAgIGhlYWRlciB0b2tlbgorICAgUGF0Y2ggc3VwcGxpZWQgYnkgRGFuIE5lbHNvbgorCisyMDEwLTAzLTEyIDExOjQzICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmM6CisKKyAgIFJlbW92ZSBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZgorICAgZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKCkKKworMjAxMC0wMy0xMSAxNjo1MiAgZHRzMTIKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZjoKKworICAgRG9jdW1lbnQgdGhlIGZvcm1hdCBvZiB0aGUgLWUvLUUgY29tbWFuZCBsaW5lIG9wdGlvbnMuCisKKzIwMTAtMDMtMTEgMTY6NDcgIGR0czEyCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIFJlbW92ZSBtZW50aW9uIG9mIHRoZSAoYWJhbmRvbmVkKSAnZGF0YXNldDInIGhlbHBlci4KKworMjAxMC0wMy0xMSAxNTo1OSAgZHRzMTIKKworICAgKiBzbm1wbGliL2NlcnRfdXRpbC5jOgorCisgICBEb24ndCBpbml0aWFsaXNlIHRoZSBUTFMgdHJhbnNwb3J0IHVubGVzcyBpdCdzIGFjdHVhbGx5IGJlZW4KKyAgIGNvbmZpZ3VyZWQgaW4uCisKKzIwMTAtMDMtMTEgMTU6NDcgIHJzdG9yeQorCisgICAqIHRlc3RpbmcvZXZhbF9zdWl0ZS5zaDoKKworICAgdXNlIFNOTVBfVE1QRElSIGluc3RlYWQgb2YgVE1QRElSCisKKzIwMTAtMDMtMTEgMTU6MzEgIHJzdG9yeQorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBxdWVyeSByaWdodCBib29sICh0c20gcHJlZml4IGlzIGxpYiBib29sLCBub3QgYXBwKQorCisyMDEwLTAzLTExIDE1OjA4ICBkdHMxMgorCisgICAqICBhZ2VudC9hdXRvX25saXN0LmMsIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFwcHMvc25tcHRlc3QuYywgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAyOTUyMDM0OiBSZXR1cm4gb2YgdGhlIEdyZWF0IFN1U0UgJ3NwcmludGYnCisgICBIdW50Li4uCisgICBQYXRjaCBzdXBwbGllZCBieSBMZW9uYXJkbyBDaGlxdWl0dG8KKworMjAxMC0wMy0xMSAxNDo1NSAgZHRzMTIKKworICAgKiBsb2NhbC90cmFwdG9lbWFpbDoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDI5Mzc5OTY6IEFkZCBEYXRlOiBoZWFkZXIgdG8gZW1haWwgc2VuZCBieQorICAgdHJhcHRvZW1haWwKKworMjAxMC0wMy0xMSAxNDo1MCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTY3NDAwOiBSZXRyaWV2ZSBlcnJvciBjb3VudGVycyBmb3IgdGhlCisgICBFdGhlckxpa2UtTUlCCisgICBQYXRjaCBzdXBwbGllZCBieSBKb3NlZiBNb2VsbGVycy4KKworMjAxMC0wMy0xMSAxNDoyMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk2ODY0MjogQ2F0Y2ggb3ZlcmZsb3cgb2YgcGFzcy10aHJvdWdoCisgICBjb21tYW5kIGJ1ZmZlci4KKyAgIFBhdGNoIGZyb20gQW5kcmVhcyBKYWVnZXIvTGVvbmFyZG8gQ2hpcXVpdHRvCisKKzIwMTAtMDMtMTEgMTI6MzcgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjk1NjY1NzogSGFuZGxlIG92ZXItbGVuZ3RoIEFnZW50WCBPSURzLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgUm9iIFdlc3QKKworMjAxMC0wMy0xMSAxMjoyMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24uYzoKKworICAgUHJvdmlkZSBtaXNzaW5nIGRlYnVnIHBhcmFtZXRlci4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZHJlYXMgSmFlZ2VyLgorCisyMDEwLTAzLTExIDEyOjIxICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5jOgorCisgICBQcm92aWRlIG1pc3NpbmcgKGR1bW15KSByZXR1cm4gdmFsdWUsIHRvIHN1cHByZXNzIGNvbXBpbGVyCisgICB3YXJuaW5nLgorICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5kcmVhcyBKYWVnZXIuCisKKzIwMTAtMDMtMTEgMTI6MTkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jOgorCisgICBTdXBwcmVzcyB3YXJuaW5ncyBvZiBwb3NzaWJsZSBidWZmZXIgb3ZlcmZsb3cuCisgICBUaGlzIGRvZXNuJ3QgX2FjdHVhbGx5XyBwcm90ZWN0IGFnYWluc3Qgc3VjaCBhbiBvdmVyZmxvdywKKyAgIHNpbmNlIHRoZSB0YXJnZXQgYnVmZmVyIGlzIG5vbi1lbXB0eSwgc28gc3RybmNhdCBjYW4ndAorICAgdXNlIGl0IGFsbCBhbnl3YXkuIEJ1dCB0aGlzIHNob3VsZCBhdCBsZWFzdCBtaXNsZWFkIHRoZQorICAgY29tcGlsZXIgc3VmZmljaWVudGx5IHRvIHNodXQgaXQgdXAhCisgICAKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZHJlYXMgSmFlZ2VyLgorCisyMDEwLTAzLTExIDExOjU3ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0OgorCisgICBSZXBsYWNlIGJhY2txdW90ZSB3aXRoIHNpbmdsZSBxdW90ZSBpbiBjb25maWd1cmUgb3V0cHV0IG1lc3NhZ2UuCisgICBXaGlsZSB0aGlzIGNoYW5nZSBpcyBwcm9iYWJseSBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LCBpdCBmZWVscworICAgc2Vuc2libGUgdG8gYXZvaWQgdGhpcyBwYXJ0aWN1bGFyIHVzZSBvZiBiYWNrcXVvdGVzLCBKdXN0IEluCisgICBDYXNlLgorICAgU2VlIGRpc2N1c3Npb24gaW4gUGF0Y2ggIzI5NTIxNjkKKworMjAxMC0wMy0xMSAxMTo0MyAgZHRzMTIKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSDogMjk1MjE0MDogT3ZlcmZsb3cgY291bnRlcjMyIGFuZCBnYXVnZTMyCisgICBvbiA2NGJpdCBzeXN0ZW1zIGNvcnJlY3RseQorICAgUGF0Y2ggcHJvdmlkZWQgYnkgTGVvbmFyZG8gQ2hpcXVpdHRvCisKKzIwMTAtMDMtMTEgMTE6MzYgIGR0czEyCisKKyAgICogdGVzdGluZy9URVNUQ09ORi5zaCwgdGVzdGluZy9ldmFsX3N1aXRlLnNoOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDI5NTIwMjA6IEV4cGxpY2l0bHkgc2V0IHBlcm1pc3Npb24gb24KKyAgIHRlbXBvcmFyeSB0ZXN0aW5nIG91dHB1dCBkaXJlY3Rvcmllcy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IExlb25hcmRvIENoaXF1aXR0by4KKworMjAxMC0wMy0xMSAxMToyNiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTUwODQ1OiBGaXggaWZIaWdoU3BlZWQgY2FsY3VsYXRpb24KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IExlb25hcmRvIENoaXF1aXR0bworCisyMDEwLTAzLTExIDA4OjI2ICBidmFzc2NoZQorCisgICAqICBwZXJsL0FTTi9BU04ueHMsIHBlcmwvQVNOL01ha2VmaWxlLlBMLCBwZXJsL09JRC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvT0lEL09JRC54cywgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvYWdlbnQueHMsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS54cywgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnhzOgorCisgICBNYWRlIGNvbXBpbGF0aW9uIG9mIHRoZSBQZXJsIG1vZHVsZSBOZXRTTk1QLnBtIG9uIFdpbmRvd3MgbW9yZQorICAgc2lsZW50OiBhZGRlZCBjb21waWxlciBmbGFncyAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisgICAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyBhbmQgbWFkZSBzdXJlIHRoYXQgI2luY2x1ZGUKKyAgIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4gb2NjdXJzIGJlZm9yZSBhbnkgb3RoZXIgaW5jbHVkZSBmaWxlCisgICB0aGF0IGRlZmluZXMgX1dJTjMyX1dJTk5ULgorCisyMDEwLTAzLTEwIDIzOjMxICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oLCBzbm1wbGliL01ha2VmaWxlLmluLCAgIAorICAgICAgc25tcGxpYi9jZXJ0X3V0aWwuYzoKKworICAgTkVXUzogc25tcGxpYjogY3JlYXRlIGluZGV4ZXMgZm9yIGNlcnRpZmljYXRlcyBpbiBjb25maWcgcGF0aAorCisyMDEwLTAzLTEwIDE4OjQ4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYzoKKworICAgQWRkZWQgIiNpbmNsdWRlIDx1bmlzdGQuaD4iIHN1Y2ggdGhhdCBvbiBVbml4IHN5c3RlbXMgdGhlCisgICBjb21waWxlciBkb2VzIG5vdCBwcmludCBhIHdhcm5pbmcgYWJvdXQgYSBtaXNzaW5nIGRlY2xhcmF0aW9uIGZvcgorICAgdGhlIGZ1bmN0aW9uIGNsb3NlKCkuCisKKzIwMTAtMDMtMTAgMTg6MzAgIHJzdG9yeQorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIHBlcmwvQVNOL0FTTi5wbSwgICAKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0sIHBlcmwvT0lEL09JRC5wbSwgcGVybC9TTk1QL1NOTVAucG0sIAorICAgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbSwgICAgcGVybC9hZ2VudC9hZ2VudC5wbSwKKyAgICAgIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG06CisKKyAgIHVwZGF0ZSB2ZXJzaW9uIHRvIDUuNi5kZXYKKworMjAxMC0wMy0xMCAxODoyOSAgcnN0b3J5CisKKyAgICogbG9jYWwvVmVyc2lvbi1NdW5nZS5wbDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IHVwZGF0ZSBWZXJzaW9uLU11bmdlIGZvciByZW5hbWVkIGNvbmZpZ3VyZS5hYworCisyMDEwLTAzLTEwIDE4OjI5ICByc3RvcnkKKworICAgKiBjb25maWd1cmUuYWM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBzYXZlIGNvbmZpZ3VyZSBjYWNoZSBldmVyeSBvbmNlIGluIHdoaWxlCisKKzIwMTAtMDMtMTAgMTY6MTIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbjoKKworICAgUmVvcmRlcmVkIHNvbWUgb2YgdGhlIE1ha2VmaWxlIHJ1bGVzIGluIG9yZGVyIHRvIG1pbmltaXplIHRoZQorICAgZGlmZnMgd2l0aCBsaWJzbm1wX2RsbC9NYWtlZmlsZS5pbi4KKworMjAxMC0wMy0xMCAxNjoxMCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbjoKKworICAgV2luMzIsIGJhdGNoIGJ1aWxkaW5nOiBETEwgYnVpbGRzIGFnYWluLgorCisyMDEwLTAzLTEwIDE2OjA3ICBidmFzc2NoZQorCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBGaXhlZCBhIHJlY2VudGx5IGludHJvZHVjZWQgY29tcGlsZXIgd2FybmluZyBieSBhZGRpbmcgYSBmb3J3YXJkCisgICBkZWNsYXJhdGlvbiBmb3IgdGhlIGZ1bmN0aW9uIF9jYWNoZV9mcmVlKCkuCisKKzIwMTAtMDMtMTAgMTY6MDYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9jb250YWluZXIuYzoKKworICAgQnVpbGRzIGFnYWluIG9uIFdpbjMyLgorCisyMDEwLTAzLTEwIDA0OjE3ICByc3RvcnkKKworICAgKiBSRUFETUU6CisKKyAgIGFkZCBtaXNzaW5nIGNvbnRyaWJ1dG9ycworCisyMDEwLTAzLTEwIDA0OjE3ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGZpeCBwb3RlbnRpYWwgZG91YmxlIGZyZWUgaW4gQ09OVEFJTkVSX0ZSRUUKKyAgIC0gYWxzbyBhZGRlZCBzZXZlcmFsIGNvbXBhcmUgcm91dGluZXMKKworMjAxMC0wMy0xMCAwNDoxNyAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IHdoZW4gZnJlZWluZyBhIGNhY2hlLCBzdG9wIHRpbWVyIGFuZCBjYWxsIGNhY2hlCisgICBmcmVlIGZ1bmMKKyAgIC0gYWxzbyBhZGQgbmV0c25tcF9jYWNoZV9yZW1vdmUKKworMjAxMC0wMy0xMCAwMzo1MiAgcnN0b3J5CisKKyAgICogIFJFQURNRSwgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvY2VydF91dGlsLmMsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIHVuZG8gY29tbWl0IDE4MjM0CisKKzIwMTAtMDMtMTAgMDM6NDEgIHJzdG9yeQorCisgICAqICBSRUFETUUsIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL2NlcnRfdXRpbC5jLCBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBNZXJnZSBicmFuY2ggJ3B1bGxtZScgb2YgLi4vdHJ1bmstc3RhZ2luZworCisyMDEwLTAzLTA5IDE3OjQ4ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogZXhwb3J0ZWQgbmV0c25tcF9yZWFkX21vZHVsZSgpIGZyb20gbmV0c25tcC5kbGwKKyAgIHN1Y2ggdGhhdCBOZXRTTk1QLnBtIGJ1aWxkcyBhZ2Fpbi4KKworMjAxMC0wMy0wOSAxNzo0NyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW46CisKKyAgIFNpbXBsaWZpZWQgdHdvIG1ha2VmaWxlcyB1c2VkIGJ5IGJ1aWxkLmJhdCAoV2luMzIpLgorCisyMDEwLTAzLTA5IDE3OjI0ICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IGJ1aWxkaW5nIE5ldFNOTVAucG0gZG9lcyBubyBsb25nZXIKKyAgIHRyaWdnZXIgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgcmVkZWZpbmluZyBfV0lOMzJfV0lOTlQgbm9yCisgICBOVERESV9WRVJTSU9OLgorCisyMDEwLTAzLTA5IDE3OjIyICBidmFzc2NoZQorCisgICAqIHBlcmwvU05NUC9NYWtlZmlsZS5QTDoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBtYWRlIGJ1aWxkaW5nIE5ldFNOTVAucG0gbW9yZSBzaWxlbnQgYnkKKyAgIGFkZGluZyB0aGUgTVNWQyBjb21waWxlciBmbGFncyAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTCisgICAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUy4KKworMjAxMC0wMy0wOSAxNzowOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICByZW1vdmUgZGVidWcgbXNnIHVzZWQgZHVyaW5nIGRlYnVnZ2luZworCisyMDEwLTAzLTA5IDE3OjAyICBtYXJ6CisKKyAgICogbG9jYWwvbmV0LXNubXAtY2VydDoKKworICAgaW5pdGlhbCBjZXJ0IHdyYXBwZXIgLSB0ZXN0aW5nIHJlcG8gd3JpdGUgcHJpdnMKKworMjAxMC0wMy0wOSAxMDoyMCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbjoKKworICAgUmVtb3ZlZCBkdXBsaWNhdGUgYnVpbGQgcnVsZXMuIFRoZXNlIGR1cGxpY2F0ZSBydWxlcyB3ZXJlCisgICBoYXJtbGVzcyBidXQgdHJpZ2dlcmVkIGEgd2FybmluZy4KKworMjAxMC0wMy0wOSAwMjozOCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oLCBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBkaXJlY3RvcnkgY29udGFpbmVyIGVuaGFuY2VtZW50cworICAgLSBmaXggcG90ZW50aWFsIG1lbW9yeSBsZWFrCisgICAtIGFkZCBmaWx0ZXIgY2FsbGJhY2sgdG8gZmlsdGVyIGZpbGVzIHJldHVybmVkCisgICAtIGFkZCBvcHRpb24gdG8gcmV0dXJuIHJlbGF0aXZlIGFuZCBub3QgZnVsbCBwYXRocworICAgLSBhZGQgb3B0aW9uIHRvIHNvcnQgcmV0dXJuZWQgbGlzdAorICAgLSBhZGQgb3B0aW9uIHRvIHJldHVybiBlbXB0eSBjb250YWluZXIgaW5zdGVhZCBvZiBOVUxMIGlmIG5vCisgICBmaWxlcyBmb3VuZAorICAgLSBjaGFuZ2UgZGVmYXVsdCBjb250YWluZXIgbmFtZSB0byBkaXJlY3RvcnkgdGhhdCB3YXMgc2Nhbm5lZAorICAgLSB0d2VhayBkZWJ1Zy9sb2cgbWVzc2FnZXMKKworMjAxMC0wMy0wOCAyMzowNyAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBkZWZpbmUgYW5kIHVzZSBuZXcgTkVUU05NUF9MT0dPTkNFIG1hY3JvCisKKzIwMTAtMDMtMDggMjI6NDQgIHJzdG9yeQorCisgICAqIG1hbi9zbm1wX2NvbmZpZy41LmRlZiwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBORVdTOiBzbm1wbGliOiBjb25mIGZpbGVzIGNhbiBub3cgaW5jbHVkZSBvdGhlciBjb25mIGZpbGVzCisgICAtIGFsc28gdHdlYWtlZCBkZWJ1ZyB0b2tlbnMgaGVyZSBhbmQgdGhlcmUKKworMjAxMC0wMy0wOCAyMjo0MyAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBmaXggdHlwbyAoY2F1c2VkIGV4dGVybmFsIHJlZmVyZW5jZSB3aGVuIERUTFNVRFAgY29uZmlndXJlZAorICAgd2l0aG91dCBkdGxzdGNwKQorCisyMDEwLTAzLTA2IDAyOjI3ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jOgorCisgICBORVdTOiBzbm1wbGliOiBuZXRzbm1wX2NvbnRhaW5lciBlbmhhbmNlbWVudHM6CisgICAtIGFkZCBmcmVlX2l0ZW0gZnVuY3Rpb247IGRlZmF1bHRzIHRvCisgICBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZQorICAgLSBhZGQgQ09OVEFJTkVSX0ZSRUVfQUxMIG1hY3JvL2Z1bmN0aW9uIChsaWtlIENPTlRBSU5FUl9DTEVBUiBidXQKKyAgIGNhbGxzIGNvbnRhaW5lciBmcmVlX2l0ZW0gZm9yIGVhY2ggaXRlbSBpbiBwcmltYXJ5IGNvbnRhaW5lcikKKyAgIC0gYWRkIGFiaWxpdHkgdG8gc2V0IG9wdGlvbnMgb24gYmluYXJ5X2FycmF5IGNvbnRhaW5lcnMKKworMjAxMC0wMy0wMiAxNzo1NSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluOgorCisgICBNYWRlIHN1cmUgdGhhdCB3aW4zMi9idWlsZC5iYXQgd29ya3MgYWdhaW4gYnkgYWRkaW5nIG1pc3NpbmcKKyAgIHNvdXJjZSBmaWxlIG5hbWVzLiBTb3J0ZWQgc291cmNlIGZpbGUgbmFtZXMgYWxwaGFiZXRpY2FsbHkgdG9vLgorCisyMDEwLTAzLTAyIDE2OjU0ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9Db25maWd1cmUsIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTY3IChtZXJnZSBvZiBzbm1wZCBhbmQgc25tcGRzZGsgYW5kIGFsc28gb2YKKyAgIG5ldHNubXBtaWJzIGFuZCBuZXRzbm1wbWlic3Nkayk6IHRoZSBiYXRjaCBmaWxlIHdpbjMyL2J1aWxkLmJhdAorICAgd29ya3MgYWdhaW4gd2l0aCB0aGUgUGxhdGZvcm0gU0RLIGVuYWJsZWQuCisKKzIwMTAtMDMtMDIgMTY6NTIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvTWFrZWZpbGUtYXBwcy5pbjoKKworICAgRm9sbG93LXVwIGZvciByMTgyMTUgKHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSBjbC5leGUgb3B0aW9uIC9HWCBieQorICAgdGhlIGVxdWl2YWxlbnQgL0VIc2M7IGFkZGVkIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIsIGFkZGVkCisgICAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiBhbmQgcmVtb3ZlZCAvRnAuLi4gYW5kIC9ZWCkuCisKKzIwMTAtMDItMjggMTU6NTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi93aW5zZXJ2aWNlLmM6CisKKyAgIFdpbjMyOiBmaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgcmVkZWZpbml0aW9uIG9mCisgICBfV0lOMzJfV0lOTlQgYnkgbWFraW5nIHN1cmUgdGhhdCA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGlzCisgICBpbmNsdWRlZCBiZWZvcmUgPHdpbmRvd3MuaD4uCisKKzIwMTAtMDItMjggMTU6MjQgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluLCB3aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IHJlcGxhY2VkIHRoZSBvYnNvbGV0ZSAvR1ggYnkgdGhlCisgICBlcXVpdmFsZW50IC9FSHNjLgorICAgQ0hBTkdFUzogV2luMzI6IGJhdGNoIGJ1aWxkOiBhZGRlZCAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiCisgICAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiB0byBtYWtlIGJ1aWxkaW5nIHdpdGggTVNWQyAyMDA4CisgICBtb3JlIHNpbGVudC4KKyAgIENIQU5HRVM6IFdpbjMyOiBiYXRjaCBidWlsZDogcmVtb3ZlZCAvRnAuLi4gYW5kIC9ZWC4gVGhlc2UKKyAgIG9wdGlvbnMgaW5mbHVlbmNlIGhvdyBwcmVjb21waWxlZCBoZWFkZXIgZmlsZXMgYXJlIGdlbmVyYXRlZCwKKyAgIHdoaWNoIGFyZSBub3QgdXNlZCBpbnNpZGUgdGhlIE5ldC1TTk1QIHByb2plY3QuIC9ZWCBpcyBub3QKKyAgIHN1cHBvcnRlZCBieSBNU1ZDIDIwMDguCisgICBDSEFOR0VTOiBXaW4zMjogYmF0Y2ggYnVpbGQ6IHJlbW92ZWQgYSBkdXBsaWNhdGUgb2NjdXJyZW5jZSBvZgorICAgc3RydG91bGwub2JqLgorCisyMDEwLTAyLTI4IDE0OjExICBidmFzc2NoZQorCisgICAqIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvTWFrZWZpbGUuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTY3IChtZXJnZSBvZiBzbm1wZCBhbmQgc25tcGRzZGsgYW5kIGFsc28gb2YKKyAgIG5ldHNubXBtaWJzIGFuZCBuZXRzbm1wbWlic3Nkayk6IGFwcGxpZWQgdGhlIG5lY2Vzc2FyeSBjaGFuZ2VzIHRvCisgICB0aGUgd2luMzIvQ29uZmlndXJlIHNjcmlwdCBhbmQgd2luMzIvTWFrZWZpbGUuaW4uCisKKzIwMTAtMDItMjcgMTM6MTEgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oLCBpbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oLCAgIAorICAgICAgc25tcGxpYi9nZXRvcHQuYywgc25tcGxpYi9nZXR0aW1lb2ZkYXkuYywgc25tcGxpYi9taWIuYywgICAKKyAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3N0cmxjcHkuYywgc25tcGxpYi9zdHJ0b2tfci5jLCBzbm1wbGliL3N0cnRvdWxsLmMsICAgCisgICAgICBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdWNkX2NvbXBhdC5jLCBzbm1wbGliL3dpbnBpcGUuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBkZWNsYXJlZCBhbGwgZnVuY3Rpb25zIHRoYXQgYXJlIGV4cG9ydGVkIGZyb20gdGhlCisgICBOZXQtU05NUCBETEwgYXMgTkVUU05NUF9JTVBPUlQuIFRoZSByZXN1bHQgaXMgYSBtaW5vcgorICAgb3B0aW1pemF0aW9uOiBjb2RlIHRoYXQgdXNlcyB0aGUgTmV0LVNOTVAgRExMIHdpbGwgbm93IGNhbGwgdGhlCisgICBETEwtZXhwb3J0ZWQgZnVuY3Rpb25zIGRpcmVjdGx5IGluc3RlYWQgb2YgaW5kaXJlY3RseSB2aWEgdGhlCisgICBzdHViIGluIHRoZSBpbXBvcnQgbGlicmFyeS4KKworMjAxMC0wMi0yNyAxMTo1MCAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmM6CisKKyAgIFJlbW92ZWQgYSByZWR1bmRhbnQgc3RybmNhc2VjbXAoKSBkZWNsYXJhdGlvbi4KKworMjAxMC0wMi0yNyAwOTo1NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3N0cnRva19yLmM6CisKKyAgIEZpeGVkIGEgdHlwbyBpbiBhIHNvdXJjZSBjb2RlIGNvbW1lbnQuCisKKzIwMTAtMDItMjcgMDk6NTYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODE4OSAocnN0b3J5KTogYnVpbGRzIGFnYWluIG9uIFdpbmRvd3MuCisKKzIwMTAtMDItMjUgMTc6NTMgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsICAgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJhZ2VudC9saWJhZ2VudC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwudmNwcm9qLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLnZjcHJvaiwgd2luMzIvc25tcGQvc25tcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEudmNwcm9qLCB3aW4zMi9zbm1wZGYvc25tcGRmLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBkZi9zbm1wZGYudmNwcm9qLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGdldC9zbm1wZ2V0LnZjcHJvaiwgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwLCAgCisgICAgICAgd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQudmNwcm9qLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLCAgCisgICAgICAgd2luMzIvc25tcHNldC9zbm1wc2V0LnZjcHJvaiwgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwgd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS52Y3Byb2osICAKKyAgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwLCB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC52Y3Byb2osICAKKyAgICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLCB3aW4zMi9zbm1wdXNtL3NubXB1c20udmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AsIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3dpbjMyLmRzdywgd2luMzIvd2luMzIuc2xuLCB3aW4zMi93aW4zMmRsbC5kc3csICAgCisgICAgICB3aW4zMi93aW4zMmRsbC5zbG46CisKKyAgIFJldmVydGVkIHIxODIwNyAoZHNwL2RzdyB0byB2Y3Byb2ovc2xuIGNvbnZlcnNpb24pIGV4Y2VwdCB0aGUKKyAgIHN1cHByZXNzaW9uCisgICBsaXN0IGNoYW5nZXMuIFRoZSBnb2FsIG9mIHRoaXMgY29udmVyc2lvbiB3YXMgdHdvZm9sZDogbm90IG9ubHkKKyAgIHRvIGJlIGFibGUKKyAgIHRvIGxvYWQgdGhlIHByb2plY3QgZmlsZXMgaW4gTVNWQyAyMDAyIC0gMjAwOCBidXQgYWxzbyB0byBiZSBhYmxlCisgICB0byBjb21taXQKKyAgIGNoYW5nZXMgbWFkZSBmcm9tIGluc2lkZSB0aGUgTVNWQyAyMDA4IElERS4gVW5mb3J0dW5hdGVseQorICAgY29udmVydGluZyBkc3AvZHN3CisgICBmaWxlcyB0byB2Y3Byb2ovc2xuIGZpbGVzIHdpdGggTVNWQyAyMDA4IG1ha2VzIGl0IGltcG9zc2libGUgdG8KKyAgIGxvYWQgdGhlCisgICB2Y3Byb2ovc2xuIGZpbGVzIHdpdGggZWFybGllciBNU1ZDIHZlcnNpb25zLiBXaHkgb24gZWFydGggZGlkCisgICBNaWNyb3NvZnQKKyAgIGRlY2lkZSB0byBwdXQgYSB2ZXJzaW9uIG51bWJlciBpbiBYTUwgZmlsZXMgPworCisyMDEwLTAyLTI0IDE5OjQxICBidmFzc2NoZQorCisgICAqICB3aW4zMiwgd2luMzIvZW5jb2RlX2tleWNoYW5nZSwgICAKKyAgICAgIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AsICAgCisgICAgICB3aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UudmNwcm9qLCB3aW4zMi9saWJhZ2VudCwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliYWdlbnQvbGliYWdlbnQudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycywgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy52Y3Byb2osIHdpbjMyL2xpYm5ldHNubXB0cmFwZCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvbGlibmV0c25tcHRyYXBkL2xpYm5ldHNubXB0cmFwZC52Y3Byb2osIHdpbjMyL2xpYnNubXAsICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwLCB3aW4zMi9saWJzbm1wL2xpYnNubXAudmNwcm9qLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLnZjcHJvaiwgd2luMzIvbmV0c25tcG1pYnMsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy52Y3Byb2osIHdpbjMyL3NubXBidWxrZ2V0LCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQudmNwcm9qLCB3aW4zMi9zbm1wYnVsa3dhbGssICAgCisgICAgICB3aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsudmNwcm9qLCB3aW4zMi9zbm1wZCwgICAKKyAgICAgIHdpbjMyL3NubXBkL3NubXBkLmRzcCwgd2luMzIvc25tcGQvc25tcGQudmNwcm9qLCB3aW4zMi9zbm1wZGVsdGEsIAorICAgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS52Y3Byb2osCisgICAgICAgICB3aW4zMi9zbm1wZGYsIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLCAgIAorICAgICAgd2luMzIvc25tcGRmL3NubXBkZi52Y3Byb2osIHdpbjMyL3NubXBnZXQsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwLCB3aW4zMi9zbm1wZ2V0L3NubXBnZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcGdldG5leHQsIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LnZjcHJvaiwgd2luMzIvc25tcG5ldHN0YXQsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC52Y3Byb2osIHdpbjMyL3NubXBzZXQsICAgCisgICAgICB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQudmNwcm9qLCAgIAorICAgICAgd2luMzIvc25tcHN0YXR1cywgd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy52Y3Byb2osIHdpbjMyL3NubXB0YWJsZSwgICAKKyAgICAgIHdpbjMyL3NubXB0YWJsZS9zbm1wdGFibGUuZHNwLCB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLnZjcHJvaiwgIAorICAgICAgIHdpbjMyL3NubXB0ZXN0LCB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC52Y3Byb2osIHdpbjMyL3NubXB0cmFuc2xhdGUsICAgCisgICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLnZjcHJvaiwgd2luMzIvc25tcHRyYXAsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsIHdpbjMyL3NubXB0cmFwL3NubXB0cmFwLnZjcHJvaiwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZCwgd2luMzIvc25tcHRyYXBkL3NubXB0cmFwZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLnZjcHJvaiwgd2luMzIvc25tcHVzbSwgICAKKyAgICAgIHdpbjMyL3NubXB1c20vc25tcHVzbS5kc3AsIHdpbjMyL3NubXB1c20vc25tcHVzbS52Y3Byb2osICAgCisgICAgICB3aW4zMi9zbm1wdmFjbSwgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLCAgIAorICAgICAgd2luMzIvc25tcHZhY20vc25tcHZhY20udmNwcm9qLCB3aW4zMi9zbm1wd2FsaywgICAKKyAgICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwgd2luMzIvc25tcHdhbGsvc25tcHdhbGsudmNwcm9qLCAgIAorICAgICAgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMi5zbG4sIHdpbjMyL3dpbjMyZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL3dpbjMyZGxsLnNsbjoKKworICAgKHJldmVydGVkKSBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IGNvbnZlcnRlZCAuZHNwLy5kc3cgZmlsZXMgdG8KKyAgIC52Y3Byb2ovLnNsbiBmaWxlcy4gVGhpcyBpbXBsaWVzIHRoYXQgc3VwcG9ydCBmb3IgTVNWQyA2LjAgaGFzCisgICBiZWVuIGRyb3BwZWQgYW5kIHRoZSBtaW5pbXVtIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIHZlcnNpb24KKyAgIHJlcXVpcmVkIHRvIGJ1aWxkIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBpcyBNaWNyb3NvZnQgVmlzdWFsCisgICBTdHVkaW8gLk5FVCAoMjAwMikuCisKKzIwMTAtMDItMjMgMTk6MDMgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWw6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiB3aGVuIGdlbmVyYXRpbmcgYSBkZWZhdWx0IHZhbHVlIGZvciB0aGUgc3lzdGVtCisgICBsb2NhdGlvbiBhbmQgbm8gZG9tYWluIG5hbWUgaXMgZm91bmQgaW4gL2V0Yy9yZXNvbHYuY29uZiwgdXNlCisgICAiQG5vLndoZXJlIiBpbnN0ZWFkIG9mICIiLgorCisyMDEwLTAyLTIzIDE4OjUwICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgbTQvYWNfcHJvbXB0X3VzZXIubTQ6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBtYWRlIHN1cmUgdGhhdCB0aGUgY29uZmlndXJlIHNjcmlwdCBkb2VzIG5vCisgICBsb25nZXIgaW52b2tlICJ0YWlsIC0xIiwgd2hpY2ggaXMgbm90IFBPU0lYLWNvbXBsaWFudC4KKworMjAxMC0wMi0yMyAxODo0NSAgaGFyZGFrZXIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMzAwdWRwLCB0ZXN0aW5nL3Rlc3RzL1QzMTB0Y3AsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMjB1ZHB2NiwgdGVzdGluZy90ZXN0cy9UMzMwdGNwdjYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCB0ZXN0aW5nL3Rlc3RzL1QzNjBkdGxzdWRwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzk5YWxpYXM6CisKKyAgIFJlbW92ZWQgYWxsIHRyYW5zcG9ydCB0ZXN0cyBzaW5jZSBpdCdzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lCisgICB3aGVyZSB0aGV5IGNhbiBzYWZlbHkgb3BlcmF0ZSAod2FzIHN0b3BwaW5nIHRhbmRlcnMnIG5pZ2h0bHkKKyAgIHRlc3RzIGZyb20gc3VjY2VlZGluZykKKworMjAxMC0wMi0yMyAxODo0MSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBUTFNUQ1BEb21haW4uYzoKKworICAgbW9yZSBlcnJvciBhbmQgZGVidWdnaW5nIG91dHB1dAorCisyMDEwLTAyLTIzIDE4OjQwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgZml4IHRoZSBzZXJ2ZXIgY29udGV4dCBnZW5lcmF0b3IgdG8gYWN0dWFsbHksIHVtLCByZXR1cm4gdGhlCisgICBjb250ZXh0LgorCisyMDEwLTAyLTIzIDE4OjQwICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgaW5pdGlhbGl6ZSB0aGUgJ3JlcycgdmFyaWFibGUgc2luY2UgaXQncyBjaGVja2VkCisKKzIwMTAtMDItMjMgMTg6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIG1vcmUgcHJvZ3Jlc3MgdG93YXJkIGEgcmVhbCBpbXBsZW1lbnRhdGlvbgorCisyMDEwLTAyLTIzIDE4OjM4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgdGxzdGNwIGN0b3IgaW52b2NhdGlvbgorCisyMDEwLTAyLTIzIDE4OjM4ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg6CisKKyAgIHJlcXVpcmUgVExTQmFzZQorCisyMDEwLTAyLTIzIDE4OjM3ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICBhZGRlZCBob3N0IGlkZW50aWZpZXIgYXMgb3V0cHV0CisKKzIwMTAtMDItMjMgMTg6MzUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIHNpZ25pZmljYW50IG1vcmUgd29yayBvbiB0aGUgVExTIFRDUCBkb21haW4KKworMjAxMC0wMi0yMyAxNzo0MyAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTkzIChqc2FmcmFuZWspOiByZXJhbiBhdXRvcmVjb25mIGZvciB0aGUgdHJ1bmsKKyAgIGFuZCB0aGUgNS41IGJyYW5jaC4KKworMjAxMC0wMi0yMyAxNDo1OCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICB1c2UgTkVUU05NUF9QUkl6IGluc3RlYWQgb2YgJXoKKworMjAxMC0wMi0yMyAxMjoyNyAganNhZnJhbmVrCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBGaXhlZCBjb21waWxhdGlvbiB3aXRoIHJwbS00LjYuCisgICBUdXJuIG9uIHRoZSBsZWdhY3kgQVBJIHdoZW4gcnBtLTQuNiBpcyBkZXRlY3RlZC4KKworMjAxMC0wMi0yMyAwNzozOCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBSZXZlcnRlZCByMTgwMDAgKGRpc2FibGluZyBTSUdBTFJNIHN1cHBvcnQpIGJlY2F1c2UgdGhpcyBpbnZvbHZlcworICAgYSBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZS4KKworMjAxMC0wMi0yMyAwMDozNiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVENQRG9tYWluLmM6CisKKyAgIGZpeCB0eXBvIGluIGNvbW1lbnQKKworMjAxMC0wMi0yMyAwMDozNCAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBkZWJ1ZyBtc2cgdHdlYWtzOyB1c2UgbmV3IHRyYW5wb3J0IGZ1bmN0aW9ucworICAgLSBhZGQgZGVidWcgaGVhZGVyIGZvciBzbm1wIHZlcnNpb24KKyAgIC0gYWRkIGxlbmd0aCB0byBkZWJ1ZyBzZW5kL3JlY2VpdmUgbWVzc2FnZXMKKyAgIC0gdXNlIG5ldyB0cmFucG9ydCBmdW5jdGlvbnMgZm9yIHNlbmQvcmVjdi9maW5kaW5nIHBlZXIgYWRkcmVzcworCisyMDEwLTAyLTIzIDAwOjI1ICByc3RvcnkKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIGFkZCBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZywgbmV0c25tcF90cmFuc3BvcnRfc2VuZCAmCisgICBuZXRzbm1wX3RyYW5zcG9ydF9yZWN2CisgICAtIG1vdmVzIHRyYW5zcG9ydCBtYW5pcHVsYXRpb24gaW50byB0cmFuc3BvcnQgY29kZQorICAgLSBjZW50cmFsIHBsYWNlIGZvciBsb2dnaW5nL2RlYnVnZ2luZyBzZW50L3JlY2VpdmVkIGRhdGEKKworMjAxMC0wMi0yMiAxOTozMyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IG1hZGUgc3VyZSB0aGF0IHRoZSBjb25maWd1cmUgc2NyaXB0IGRvZXMgbm8KKyAgIGxvbmdlciBpbnZva2UgInRhaWwgLTEiLCB3aGljaCBpcyBub3QgUE9TSVgtY29tcGxpYW50LgorCisyMDEwLTAyLTIyIDE5OjIxICBidmFzc2NoZQorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MTg2LiBSZWdyZXNzaW9uIHRlc3QgMzQgKHdoZXRoZXIgYXV0aGVudGljYXRpb24KKyAgIGZhaWx1cmUgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQpIHBhc3NlcyBub3cgYWdhaW4uCisKKzIwMTAtMDItMjIgMDk6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IG1hZGUgc3VyZSB0aGF0IGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZhaWx1cmUgZG9lcworICAgbm90IGNyZWF0ZSBkYW5nbGluZyBwb2ludGVycyBpbiB0aGUgTUlCIHN1YnRyZWUgcmVnaXN0cnkuCisKKzIwMTAtMDItMjIgMDk6MTEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQsIGFwcHMsIGFwcHMvc25tcG5ldHN0YXQ6CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wMi0yMiAwODo0MiAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmU6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDg0OiBmaXhlZCBsaWJlYXkzMiAoT3BlblNTTCkgY29uZmlndXJlIHRlc3QgZm9yCisgICBNaW5HVy4KKworMjAxMC0wMi0yMiAwODozMSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgRm9sbG93LXVwIGZvciByMTgwODQ6IGZpeGVkIGxpYmVheTMyIChPcGVuU1NMKSBjb25maWd1cmUgdGVzdCBmb3IKKyAgIE1pbkdXLgorCisyMDEwLTAyLTIyIDA4OjEzICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jOgorCisgICBCdWlsZHMgYWdhaW4gd2l0aCBNaW5HVyB3aGVuIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgorCisyMDEwLTAyLTIxIDE4OjU4ICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIHdpbjMyL2xpYnNkbGwuZHN3LCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgd2luMzIvd2luMzJkbGwuZHN3OgorCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHJlbmFtZWQgbGlic2RsbC5kc3cgaW50byB3aW4zMmRsbC5kc3cuCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IHNpbXBsaWZpZWQgbGlua2luZyB0aGUgTmV0LVNOTVAKKyAgIGFwcGxpY2F0aW9ucyB3aXRoIG5ldHNubXAuZGxsIGJ5IGFkZGluZyBhbGwgYXBwbGljYXRpb24gcHJvamVjdHMKKyAgIHRvIHRoZSBzYW1lIHdvcmtzcGFjZSB0aGF0IGlzIHVzZWQgZm9yIGJ1aWxkaW5nIHRoZSBETEwuCisgICBDSEFOR0VTOiBXaW4zMjogYnVpbGRpbmc6IG1hZGUgYnVpbGRpbmcgbmV0c25tcC5kbGwgbGVzcyBlcnJvcgorICAgcHJvbmUgYnkgbGV0dGluZyB0aGUgY29tcGlsZXIgcHJpbnQgYW4gZXJyb3IgbWVzc2FnZSBpZiB0aGUKKyAgIHByZXByb2Nlc3NvciBzeW1ib2wgTkVUU05NUF9VU0VfRExMIGhhcyBub3QgYmVlbiBkZWZpbmVkLgorCisyMDEwLTAyLTIxIDE4OjUxICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcDoKKworICAgQ0hBTkdFUzogV2luMzI6IGJ1aWxkaW5nOiBBZGRlZCBsaWJzbm1wLmRlZiB0byB0aGUgbGlzdCBvZgorICAgbGlic25tcF9kbGwuZHNwIHNvdXJjZSBmaWxlcyBzdWNoIHRoYXQgdGhlIERMTCBpcyByZWJ1aWx0IHdoZW4KKyAgIHRoZSAuZGVmIGZpbGUgaGFzIGJlZW4gbW9kaWZpZWQuCisKKzIwMTAtMDItMjEgMTg6NDUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogZXhwb3J0ZWQgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoKSBmcm9tCisgICBuZXRzbm1wLmRsbC4KKworMjAxMC0wMi0yMSAxNzozOSAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wSVB2NkJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTW9yZSBXaW4zMiBJUHY2IHNvdXJjZSBjb2RlIGNvbnNpc3RlbmN5IGltcHJvdmVtZW50czoKKyAgIC0gTW92ZWQgI3VuZGVmIEhBVkVfSUZfTkFNRVRPSU5ERVggZnJvbSBzbm1wbGliLyouYyB0bworICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguCisgICAtIENoYW5nZWQgdGhlIGdsb2JhbCBpbjZhZGRyX2FueSB2YXJpYWJsZSBpbnRvIGEgc3RhdGljIHZhcmlhYmxlCisgICBzdWNoIHRoYXQKKyAgIG11bHRpcGxlIGRlZmluaXRpb25zIGRvIG5vdCB0cmlnZ2VyIGEgbGlua2VyIGVycm9yLgorICAgLSBBZGRlZCB0eXBlZGVmcyBmb3IgdWludDhfdCwgaW50OF90LCB1aW50MTZfdCBhbmQgaW50MTZfdC4KKyAgIC0gUmVwbGFjZWQgJyNpZiBORVRTTk1QX0VOQUJMRV9JUFY2JyBieSAnI2lmZGVmCisgICBORVRTTk1QX0VOQUJMRV9JUFY2Jy4KKworMjAxMC0wMi0yMSAwODozMCAgdGFuZGVycworCisgICAqIHNubXBsaWIvc25tcElQQmFzZURvbWFpbi5jOgorCisgICBtYWtlIHN1cmUgdGhhdCBJTkFERFJfTk9ORSBpcyBkZWZpbmVkIChmaXhlcyBidWlsZCBlcnJvciBvbgorICAgU29sYXJpcykKKworMjAxMC0wMi0xOSAxOTozOSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgU3luY2hyb25pemVkIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGFuZAorICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4uCisKKzIwMTAtMDItMTkgMTQ6MTggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBDSEFOR0VTOiBXaW4zMjogbGlic25tcCBidWlsZHMgYWdhaW4gYXMgYSBETEwgd2hlbiBJUHY2IGlzCisgICBlbmFibGVkLgorCisyMDEwLTAyLTE5IDEzOjIyICBidmFzc2NoZQorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBGb2xsb3cgdXAgZm9yIHIxODE2NDogc3luY2hyb25pemVkIGxpYnNubXAuZGVmLmluIHdpdGgKKyAgIGxpYnNubXAuZGVmCisKKzIwMTAtMDItMTkgMDk6MDUgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBhZGRlZCAjaW5jbHVkZSA8bWFsbG9jLmg+IGluCisgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBzdWNoIHRoYXQgdGhlIE1TVkMgY29tcGlsZXIKKyAgIGRvZXNuJ3QgZ2V0IGNvbmZ1c2VkIGJ5IHRoZSBtYWxsb2MgcmVkZWZpbml0aW9uIHdoZW4gYnVpbGRpbmcKKyAgIGxpYnNubXAgYXMgYSBETEwuCisKKzIwMTAtMDItMTkgMDg6NTkgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmOgorCisgICBFeHBvcnRlZCBuZXRzbm1wX3BhcnNlX2FyZ3MoKSBzdWNoIHRoYXQgdGhlIE5ldC1TTk1QIGFwcGxpY2F0aW9ucworICAgYnVpbGQgYWdhaW4gd2hlbiBsaWJzbm1wIGlzIGJ1aWx0IGFzIGEgRExMLgorCisyMDEwLTAyLTE5IDA4OjU2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIva2V5dG9vbHMuYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogbW92ZWQgTVNWQyBPcGVuU1NMIGxpbmtlciBzZXR0aW5ncyBmcm9tCisgICBzbm1wbGliL2tleXRvb2xzLmMgdG8gd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggc3VjaCB0aGF0CisgICB0aGVzZSBzZXR0aW5ncyBhcmUgbm90IG9ubHkgZWZmZWN0aXZlIHdoZW4gYnVpbGRpbmcgc25tcGxpYiBhcyBhCisgICBzdGF0aWMgbGlicmFyeSBidXQgYWxzbyB3aGVuIGFueSBOZXQtU05NUCBhcHBsaWNhdGlvbiBpcyBidWlsdAorICAgdGhhdCBsaW5rcyB3aXRoIHNubXBsaWIgYXMgYSBzdGF0aWMgbGlicmFyeSBvciBhcyBhIERMTC4KKworMjAxMC0wMi0xOSAwODozMiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIFdpbjMyIGNsZWFudXA6IE1TVkMgLyBETEwgdGVzdHMgbm93IHVzZSB0aGUgb2ZmaWNpYWxseSBlbmRvcnNlZAorICAgbWFjcm8gbmFtZXMuCisKKzIwMTAtMDItMTkgMDc6NTAgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICBCdWlsZHMgYWdhaW4uCisKKzIwMTAtMDItMTkgMDY6NDcgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCwgICAKKyAgICAgIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFBBVENIOiAyOTQyOTQwOiBmcm9tICJCaWxsIEZlbm5lciI6IEFkZCBhIG5ldworICAgZnVuY3Rpb24sIG5ldHNubXBfcGFyc2VfYXJncywgdGhhdCBpcyBsaWtlIHNubXBfcGFyc2VfYXJncyBidXQKKyAgIHRha2VzIGFuIGFkZGl0aW9uYWwgYml0bWFzaywgZmxhZ3MsIHRvIGFmZmVjdCB0aGUgYmVoYXZpb3VyLiBBbHNvCisgICByZW1vdmUgdGhlIG1hZ2ljIGhhbmRsaW5nIG9mIHNvbWUgYXBwbGljYXRpb24gbmFtZXMuCisKKzIwMTAtMDItMTggMTQ6MjIgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvYmluOgorCisgICBVcGRhdGVkIFN1YnZlcnNpb24gaWdub3JlIGxpc3QuCisKKzIwMTAtMDItMTggMTQ6MjAgIGJ2YXNzY2hlCisKKyAgICogIHdpbjMyL2xpYmhlbHBlcnMvbGliaGVscGVycy5kc3AsICAgCisgICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcDoKKworICAgU29ydGVkIG5hbWVzIG9mIHNvdXJjZSBmaWxlcyBhbHBoYWJldGljYWxseS4KKworMjAxMC0wMi0xOCAxMzowMyAgYnZhc3NjaGUKKworICAgKiAgUkVBRE1FLndpbjMyLCBzbm1wbGliL3dpbnNlcnZpY2UuYywgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLCB3aW4zMi9uZXRzbm1wbWlic3NkaywgICAKKyAgICAgIHdpbjMyL3NubXBkc2RrLCB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsICAgCisgICAgICB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgQ0hBTkdFUzogV2luMzI6IGRyb3BwZWQgc3VwcG9ydCBmb3IgYnVpbGRpbmcgTmV0LVNOTVAgd2l0aAorICAgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wIHdpdGhvdXQgcGxhdGZvcm0gU0RLLiBCdWlsZGluZworICAgTmV0LVNOTVAgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LjAgKyBQU0RLIG9yIGFueSBsYXRlcgorICAgdmVyc2lvbiBvZiBNU1ZDIGlzIHN0aWxsIHBvc3NpYmxlIGhvd2V2ZXIuCisgICAKKyAgIE5vdGU6IGlmIGluIHRoZSBmdXR1cmUgZm9yIHdoYXRldmVyIHJlYXNvbiBpdCBzaG91bGQgYmVjb21lCisgICBuZWNlc3NhcnkgYWdhaW4gdG8gYmUgYWJsZSB0byBidWlsZCBOZXQtU05NUCB3aXRoIE1TVkMgd2l0aG91dAorICAgcmVseWluZyBvbiB0aGUgcGxhdGZvcm0gU0RLIGhlYWRlcnMsIHBsZWFzZSAjaWZkZWYgb3V0IHRoZSBNSUIKKyAgIGNvZGUgdGhhdCByZWxpZXMgb24gdGhlIFBTREsgaGVhZGVycyBpbnN0ZWFkIG9mIHNwbGl0dGluZyB0aGUKKyAgIHdvcmtzcGFjZSBmaWxlcyBhZ2Fpbi4KKworMjAxMC0wMi0xOCAxMjo1NyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jOgorCisgICBkb3MydW5peC4KKworMjAxMC0wMi0xOCAwOTo0NSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaDoKKworICAgU291cmNlIGNvZGUgY2xlYW51cDoKKyAgIC0gTW92ZWQgZG9jdW1lbnRhdGlvbiBvZiBuZXRzbm1wX2xhcmdlX2ZkX3NldCBtZW1iZXJzIHRvIHRoZQorICAgY29tbWVudAorICAgYmxvY2sganVzdCBhYm92ZSB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIHR5cGUuCisgICAtIFJlbW92ZWQgc3VwZXJmbHVvdXMgJ2V4dGVybiAiQyInIHNwZWNpZmllcjogdGhpcyBsaW5rYWdlCisgICBzcGVjaWZpZXIKKyAgIG9ubHkgaGFzIGFuIGVmZmVjdCBvbiBkZWNsYXJhdGlvbnMgb2YgdmFyaWFibGVzIG9mIGZ1bmN0aW9ucyBhbmQKKyAgIG5vdAorICAgb24gdHlwZWRlZnMgb3Igc3RydWN0IGRlZmluaXRpb25zLgorICAgLSBSYW4gdGhpcyBoZWFkZXIgZmlsZSB0aHJvdWdoIGluZGVudC4KKworMjAxMC0wMi0xOCAwOToyNiAgYnZhc3NjaGUKKworICAgKiAgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcElQVjZCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmMsICAgCisgICAgICB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBDaGFuZ2VzOgorICAgLSBCdWlsZHMgYWdhaW4gd2l0aCBNU1ZDLgorICAgLSBGaXhlZCBhIGZldyBjb21waWxlciB3YXJuaW5ncyByZXBvcnRlZCBieSBNU1ZDIChwYXNzaW5nIGludAorICAgaW5zdGVhZCBvZiB1X3Nob3J0IHRvIGh0b25zKCkgLyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgdGhhdCB3ZXJlCisgICBtaXNzaW5nIGJlY2F1c2Ugb2YgbWlzc2luZyAjaW5jbHVkZSBkaXJlY3RpdmVzKS4KKworMjAxMC0wMi0xNiAxNzoxNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBUaGUgaGVhZGVyIGZpbGUgPHN5cy90aW1lYi5oPiBpcyBubyBsb25nZXIKKyAgIGluY2x1ZGVkIGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+LiBPcjogdGhlIGhlYWRlciBmaWxlCisgICA8c3lzL3RpbWViLmg+IHdpbGwgaGF2ZSB0byBiZSBpbmNsdWRlZCBleHBsaWNpdGx5IGluIHNvdXJjZSBmaWxlcworICAgdGhhdCBuZWVkIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24gZnRpbWUoKS4KKyAgIAorICAgTm90ZTogY29tcGFyZWQgdG8gcjE4MDI0IGFuZCBiZWZvcmUsIHRoaXMgY2hhbmdlIGRvZXMgbm90IGFmZmVjdAorICAgQlNEIHN5c3RlbXMgLS0gPHN5cy90aW1lYi5oPiB3YXMgb25seSBpbmNsdWRlZCBmcm9tCisgICA8bmV0LXNubXAvdHlwZXMuaD4gb24gQlNEIHN5c3RlbXMgaW4gcmV2aXNpb25zIHIxODAyNS4ucjE4MTUyLgorCisyMDEwLTAyLTE0IDE5OjI5ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q4Lmg6CisKKyAgIEJ1aWxkcyBub3cgb24gRnJlZUJTRCB2ZXJzaW9uIDguMC4KKworMjAxMC0wMi0xMyAyMDo1OSAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmg6CisKKyAgIEFkanVzdCB0aGUgcGxhY2VtZW50IG9mIDsncyBpbiBvcmRlciB0bworICAgYSkgQXZvaWQgd2FybmluZ3MgYWJvdXQgc3B1cmlvdXMgc2VtaWNvbG9ucworICAgYikgTm90IGhhdmUgdW50ZXJtaW5hdGVkIGRlY2xhcmF0aW9ucyBpbiBoZWFkZXJzCisKKzIwMTAtMDItMTIgMDI6NTcgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjOgorCisgICBDSEFOR0VTOiBtaWIyYzogdXBkYXRlIGlubGluZSBkb2N1bWVudGF0aW9uOyBhZGQgc3RvcmFnZXR5cGUgdGVzdAorICAgZm9yIGNvbHVtbnMKKworMjAxMC0wMi0xMiAwMTo1MCAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGZpeCB0eXBvIGluIGRlZmluZQorCisyMDEwLTAyLTEyIDAxOjA1ICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBmaXggc2VkIHByb2Nlc3Npbmcgb24gd2hpdGUtc3BhY2UgYWRkaW5nIHNvbGFyaXMgbWFjaGluZXMKKworMjAxMC0wMi0xMCAyMzo1NiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgYWRkIHRvcCBzcmNkaXIgdG8gY3BwIHNlYXJjaCBwYXRoCisKKzIwMTAtMDItMTAgMjM6NTIgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBmcmVlYnNkIG5lZWRzIHRpbWUuaCBhYm92ZSB0aW1lYi5oCisKKzIwMTAtMDItMTAgMjM6MzcgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIHVzZSBzZWQgd2l0aCBtdWx0aXJlcGxhY2Ugb24gYSBsaW5lIHRvIGZpeCBwb3NzaWJsZSB3aGl0ZXNwYWNlCisgICBpc3N1ZSBvbiBzb2xhcmlzCisKKzIwMTAtMDItMTAgMjM6MjIgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVExTQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVExTVENQRG9tYWluLmM6CisKKyAgIGJlZ2lubmluZyB3b3JrIGZvciBUTFMgc2VwYXJhdGlvbiBpbnRvIHNlcGFyYXRlIGZpbGVzIHdpdGggYSBiYXNlCisgICBmaWxlCisKKzIwMTAtMDItMTAgMjM6MjEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oOgorCisgICBtb3ZlIGJhc2UgdHJhbnNwb3J0IGNyZWF0aW9uIGZ1bmN0aW9uIG91dCBvZiBsaW51eCBpZmRlZnMKKworMjAxMC0wMi0xMCAyMzoyMSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFRMU0Jhc2VEb21haW4uYzoKKworICAgbW92ZWQgYW5vdGhlciBlcnJvciBsb2dnaW5nIGZ1bmN0aW9uCisKKzIwMTAtMDItMTAgMjM6MjAgIGhhcmRha2VyCisKKyAgICogbWlicy9ORVQtU05NUC1UQy50eHQ6CisKKyAgIGFkZGVkIFRMUyBvdmVyIFRDUAorCisyMDEwLTAyLTEwIDE2OjM5ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBMaW51eDogSW1wcm92ZWQgRXRoZXJMaWtlLU1JQiBzdXBwb3J0CisgICBQYXRjaCBzdXBwbGllZCBieSBKb3NlZiBNb2VsbGVycworCisyMDEwLTAyLTEwIDEwOjA0ICBkdHMxMgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogU3VwcG9ydCBudWxsLWJ5dGVzIGluIG9jdGV0IHN0cmluZ3MKKyAgIFBhdGNoIHN1cHBsaWVkIGJ5IFRvbW15IEJlYWRsZQorCisyMDEwLTAyLTEwIDAwOjU5ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUTFNCYXNlRG9tYWluLmM6CisKKyAgIG1vdmVkIFRMUyBpbmZyYXN0cnVjdHVyZSBpbnRvIGEgYmFzZSBkb21haW4gZmlsZQorCisyMDEwLTAyLTEwIDAwOjA0ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgbW92ZWQgc29ja2V0NiBmdW5jdGlvbnMgdG8gdGhlIGlwdjYgYmFzZQorCisyMDEwLTAyLTEwIDAwOjAzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYzoKKworICAgd2hpdGUgc3BhY2UgZm9ybWF0dGluZworCisyMDEwLTAyLTEwIDAwOjAzICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIHVkcF9zZW5kL3JlY3YgdG8gdWRwYmFzZQorCisyMDEwLTAyLTEwIDAwOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBTb2NrZXRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlIG5ldHNubXBfc29ja19idWZmZXJfc2V0IGludG8gc29ja2V0YmFzZQorCisyMDEwLTAyLTEwIDAwOjAyICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmM6CisKKyAgIG1vdmUgaXB2NCBzcGVjaWZpYyBVRFAgdHJhbnNwb3J0IGNyZWF0aW9uIHRvIHVkcGlwdjQgYmFzZQorCisyMDEwLTAyLTEwIDAwOjAxICBoYXJkYWtlcgorCisgICAqICBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgbWFkZSBjb21tb24gZnVuY3Rpb25zIGJlIHJlZmVyZW5jZWQgZGlyZWN0bHkgYnkgdGhlIHRyYW5zcG9ydHMKKyAgIGFuZCByZW1vdmVkIG9yaWdpbmFsIGZ1bmN0aW9uYWxpdHk7IHRoZXkgd2VyZSBzdGF0aWMgc28gdGhlcmUgaXMKKyAgIG5vIGJhY2t3YXJkcyBjb21wYXQgaXNzdWVzCisKKzIwMTAtMDItMTAgMDA6MDAgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFNvY2tldEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgbW92ZWQgc29ja2V0IGJhc2VkIGNsb3NlIHRvIGEgc29ja2V0IGJhc2VkIGRvbWFpbiBjb21tb24gdG8gbWFueQorICAgdGhpbmdzCisKKzIwMTAtMDItMDkgMjM6NTkgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQQmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYzoKKworICAgbW92ZSBUQ1AgY29tbW9uIGZ1bmN0aW9ucyB0byBhIFRDUEJhc2UgZG9tYWluIGltcGxlbWVudGF0aW9uCisKKzIwMTAtMDItMDkgMjM6NTcgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHdhcm5pbmcgY2xlYW51cAorCisyMDEwLTAyLTA5IDIzOjU2ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oOgorCisgICB0bVN0YXRlUmVmZXJlbmNlIHNob3VsZCBiZSB1c2luZyB0aGUgaW5kZXhlZCBhZGRyX3BhaXIKKworMjAxMC0wMi0wOSAyMzo1NiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIG1ha2UgbmV0c25tcF9kdGxzdWRwX2Nsb3NlIG1ha2UgdXNlIG9mIG5ldHNubXBfYmFzZXVkcF9jbG9zZQorCisyMDEwLTAyLTA5IDIzOjU1ICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wVURQQmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIG1vdmVkIGJhc2UgVURQIHNvY2tldCBjcmVhdGlvbiBpbnRvIGEgY29tbW9uIGJhc2UgZnVuY3Rpb24gYW5kCisgICBtYWRlIHVzZSBvZiBpdAorCisyMDEwLTAyLTA5IDIzOjU0ICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBCYXNlRG9tYWluLmg6CisKKyAgIHByb3BlciBfSCBpZmRlZiBjaGVja3MKKworMjAxMC0wMi0wOSAyMzo1NCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jOgorCisgICBhZGRlZCBhIHJhdyBVRFAgYmFzZSBkb21haW4KKworMjAxMC0wMi0wOSAyMzo1MyAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQQmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wSVBCYXNlRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUHY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjRCYXNlRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgY3JlYXRlZCBhIFVEUCBJUHY0IGJhc2U7IG1vdmVkIGFuZCByZXVzZWQgbW9yZSBpbmZyYXN0cnVjdHVyZQorCisyMDEwLTAyLTA5IDIzOjUxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUHY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBtb3ZlZCBpcHY0IGFkZHJlc3MgZm9ybWF0dGluZyBpbnRvIHNubXBJUHY0QmFzZURvbWFpbgorCisyMDEwLTAyLTA5IDIzOjUxICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcElQdjZCYXNlRG9tYWluLmM6CisKKyAgIHY2IGRvbWFpbiBpbmZyYXN0cnVjdHVyZSBmaWxlcworCisyMDEwLTAyLTA5IDIzOjUxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQVjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUFY0QmFzZURvbWFpbi5jLCBzbm1wbGliL3NubXBJUFY2QmFzZURvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wSVB2NEJhc2VEb21haW4uYzoKKworICAgdjYgZG9tYWluIGluZnJhc3RydWN0dXJlIGZpbGVzCisKKzIwMTAtMDItMDkgMjM6NTAgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZSwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBWNEJhc2VEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBJUEJhc2VEb21haW4uYywgc25tcGxpYi9zbm1wSVBWNEJhc2VEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBOZXcgSVB2NCBhbmQgSVAgYmFzZSB0cmFuc3BvcnQgZmlsZXMKKworMjAxMC0wMi0wOSAyMzo0OCAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGRvbid0IGRvdWJsZSBpbmNsdWRlIHRyYW5zcG9ydCBtb2R1bGVzCisKKzIwMTAtMDItMDkgMjM6NDggIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaDoKKworICAgbW92ZWQgYXJjaGl0ZWN0dXJlIHRlc3RzIGludG8gdGhlIGhlYWRlciBmaWxlcyB1c2luZyBjb25maWdfZXJyb3IKKyAgIGZvciBzaWduYWxpbmcgcHJvYmxlbXMKKworMjAxMC0wMi0wOSAyMzo0NiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIG1vdmVkIGFyY2hpdGVjdHVyZSB0ZXN0cyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdXNpbmcgY29uZmlnX2Vycm9yCisgICBmb3Igc2lnbmFsaW5nIHByb2JsZW1zCisKKzIwMTAtMDItMDkgMjM6NDUgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oOgorCisgICBtb3ZlZCBhcmNoaXRlY3R1cmUgdGVzdHMgaW50byB0aGUgaGVhZGVyIGZpbGVzIHVzaW5nIGNvbmZpZ19lcnJvcgorICAgZm9yIHNpZ25hbGluZyBwcm9ibGVtcworCisyMDEwLTAyLTA5IDIzOjQzICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYjoKKworICAgY2hlY2sgZm9yIGFuZCByZXBvcnQgY29uZmlnX2Vycm9ycyBpbiB0cmFuc3BvcnQgaGVhZGVycworCisyMDEwLTAyLTA5IDIzOjQzICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBhbGxvdyBhIE5FVFNOTVBfUVVJQ0tfQ0hFQ0sgZW52IHZhcmlhYmxlIHRvIGJ5cGFzcyBoZWFkZXIgY2hlY2tzCisKKzIwMTAtMDItMDkgMjM6NDIgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliOgorCisgICBiZXR0ZXIgY29tbWVudHMKKworMjAxMC0wMi0wOSAyMzo0MiAgaGFyZGFrZXIKKworICAgKiBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWI6CisKKyAgIGNoZWNrIGZvciBjb25maWdfcmVxdWlyZSBtYWNyb3MgaW4gdHJhbnNwb3J0IGhlYWRlcnMgZm9yCisgICBmb3JjZS1pbmNsdWRpbmcgb2Ygb3RoZXIgdGhpbmdzCisKKzIwMTAtMDItMDkgMjM6NDEgIGhhcmRha2VyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCBwZXJsL2FnZW50L2FnZW50LnhzLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBUQ1BEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBkZWZpbmUgYSBzdGFuZGFyZGl6ZWQgaW5kZXhlZCBhZGRyX3BhaXIgaW5zdGVhZCBvZiB1c2luZyBvbmUKKyAgIGxhYmVsZWQgb25seSBmb3IgVURQIGV2ZXJ5d2hlcmUKKworMjAxMC0wMi0wOSAyMzo0MCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZml4IHRyYW5zcG9ydCBwcmVmaXggbGlzdCBmb3IgaW5jb21pbmcgbWVzc2FnZXMKKworMjAxMC0wMi0wOSAyMzo0MCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oLCBzbm1wbGliL3NubXB0c20uYzoKKworICAgcmVtb3ZlIHRoZSBzZWN1cml0eSBsZXZlbCBmcm9tIHRoZSBUU00gY2FjaGU7IHByZXZpb3VzIGV4aXN0ZW5jZQorICAgZnJvbSBmcm9tIGEgZHJhZnQgY29weSBvZiB0aGUgVFNNIFJGQyBhbmQgaXMgbm93IHN0b3JlZCBlbnRpcmVseQorICAgaW4gdGhlIHRtIHJlZmVyZW5jZQorCisyMDEwLTAyLTA5IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBpbXBsZW1lbnQgaW5jb21pbmcgVFNNIHByb2NlZHVyZXMgYWNjb3JkaW5nIHRvIFJGQyB0ZXh0CisKKzIwMTAtMDItMDkgMjM6MzkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIGltcGxlbWVudCBvdXRnb2luZyBUU00gcHJvY2VkdXJlcyBhY2NvcmRpbmcgdG8gUkZDIHRleHQKKworMjAxMC0wMi0wOSAyMzozOSAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaDoKKworICAgY3JlYXRlIGRlZmluZWQgc2l6ZWQgYXJyYXkgYW5kIGxlbmd0aCB2YXJpYWJsZQorCisyMDEwLTAyLTA1IDA5OjUyICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXhlZCBmaWxlZGVzY3JpcHRpb3IgbGVhayBpbiBFdGhlcmxpa2UtTUlCIGFuZAorICAgUk1PTi1NSUIKKworMjAxMC0wMi0wNCAxNTo1NyAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiByZXBvcnQgcmVhbCBpZlNwZWVkIG9mIG5ldHdvcmsgaW50ZXJmYWNlIGV2ZW4gaXQKKyAgIGlzIGRvd24uCisgICBTb21lIGludGVyZmFjZXMgY2FuIHJlcG9ydCB0aGVpciByZWFsIHNwZWVkLCBldmVuIHRoZXkgYXJlIGRvd24uCisgICBBbmQgaWYgdGhleSBjYW4ndCwgdGhlIGZhbGxiYWNrIHRvIDEwTWJwcyBpcyBzdGlsbCB0aGVyZS4KKworMjAxMC0wMi0wMSAxNDo0NyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmM6CisKKyAgIEZpeGVkIHRoZSBjb21waWxlciB3YXJuaW5ncyB0cmlnZ2VyZWQgYnkgdGhlIHNvdXJjZSBmaWxlCisgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMuCisKKzIwMTAtMDItMDEgMTQ6NDUgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyLCBzbm1wbGliL2tleXRvb2xzLmM6CisKKyAgIENIQU5HRVM6IFdpbjMyOiBidWlsZGluZzogc2ltcGxpZmllZCB0aGUgcHJvY2VkdXJlIGZvciBidWlsZGluZworICAgd2l0aCBTTk1QdjMgc3VwcG9ydCBlbmFibGVkIChPcGVuU1NMKS4KKworMjAxMC0wMi0wMSAxNDozNCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvb2xkX2FwaS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMsICAgCisgICAgICBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCBzbm1wbGliL21kNS5jLCBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgYWxsIGNhbGxzIHRvIGZyZWUoKSBhcmUgaW50ZXJjZXB0ZWQgd2hlbiBidWlsZGluZworICAgd2l0aCBkbWFsbG9jCisgICBzdXBwb3J0IGVuYWJsZWQuIEluY2x1ZGVkIDxkbWFsbG9jLmg+IGluIHRob3NlIHNvdXJjZSBmaWxlcyB3aGVyZQorICAgaXQgd2FzIG5vdAorICAgeWV0IGluY2x1ZGVkLCBhbmQgcHJvdmlkZWQgYSB3cmFwcGVyIGZ1bmN0aW9uIGZvciBmcmVlKCkgd2hlcmUKKyAgIHRoZSBhZGRyZXNzIG9mCisgICB0aGlzIGZ1bmN0aW9uIHdhcyB0YWtlbiAoRG1hbGxvYyBjYW4gb25seSBpbnRlcmNlcHQgZnJlZSgpIHdoZW4KKyAgIGl0IGlzIGNhbGxlZAorICAgZGlyZWN0bHkgYnV0IG5vdCB3aGVuIGl0IGlzIGNhbGxlZCB0aHJvdWdoIGEgZnVuY3Rpb24gcG9pbnRlcikuCisKKzIwMTAtMDItMDEgMTA6NDkgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBORVdTOiBidWlsZGluZzogQnVpbGRpbmcgTmV0LVNOTVAgd2l0aCBkbWFsbG9jIHN1cHBvcnQgZW5hYmxlZCBpcworICAgYWdhaW4gcG9zc2libGUuCisKKzIwMTAtMDItMDEgMDE6MDUgIHRhbmRlcnMKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDUzYWdlbnR2MXRyYXAsIHRlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1NWFnZW50djFtaW50cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU2YWdlbnR2MmNtaW50cmFwLCB0ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTE0YWdlbnR4YWdlbnR4dHJhcDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6ICdtYWtlIHRlc3QgVEVTVE9QVFM9Ii1QIHRjcCInIHdvcmtzIGZpbmUgbm93CisKKzIwMTAtMDEtMzEgMDg6MDIgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzI6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDg0OiBmaXhlZCBhbiBzaCBzeW50YXggZXJyb3IgaW4gdGhlIGNvbmZpZ3VyZQorICAgc2NyaXB0CisgICB0aGF0IHdhcyB0cmlnZ2VyZWQgb24gc3lzdGVtcyB3aXRob3V0IGxpYmNyeXB0byBhbmQgd2l0aG91dAorICAgbGliZWF5MzIuCisgICBUaGUgZm9sbG93aW5nIGVycm9yIHdhcyByZXBvcnRlZDoKKyAgIGNvbmZpZ3VyZVszMzEzNl06IHg6IHVua25vd24gdGVzdCBvcGVyYXRvcgorCisyMDEwLTAxLTI5IDIwOjA3ICBqc2FmcmFuZWsKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGU6CisKKyAgIEVsYWJvcmF0ZSBvbiByZXYuIDE4MDg5IGFuZCBhZGp1c3QgdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgdG8gdGhlCisgICAqICAgICpyZWFsbHkgd29ya2luZyBvbmUqLiAgMjAxMC0wMS0yOSAxOToxMSAganNhZnJhbmVrCisKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGU6CisKKyAgIEZpeCB0ZXN0IDM1IHdoZW4gY29uZmlndXJlIG9wdGlvbiAnLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuJyB3YXMKKyAgIHVzZWQgYW5kIHRoZSBkaXJlY3RvcnkgZm9yIHRlbXAuIGZpbGVzIGRvZXMgbm90IGV4aXN0IHlldC4KKworMjAxMC0wMS0yOSAxNTowNyAgYnZhc3NjaGUKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9jbG9zZWRpci5jLCAgIAorICAgICAgc25tcGxpYi9nZXR0aW1lb2ZkYXkuYywgc25tcGxpYi9vcGVuZGlyLmMsIHNubXBsaWIvcmVhZGRpci5jLCAgIAorICAgICAgc25tcGxpYi9zeXN0ZW0uYywgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgTW92ZWQgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBvcGVuZGlyKCksIHJlYWRkaXIoKSwgY2xvc2VkaXIoKSBhbmQKKyAgIGdldHRpbWVvZmRheSgpIHJlcGxhY2VtZW50cyBmb3IgTVNWQyBmcm9tIHNubXBsaWIvc3lzdGVtLmMgdG8KKyAgIHNlcGFyYXRlIHNvdXJjZSBmaWxlcyBpbiBzbm1wbGliLgorCisyMDEwLTAxLTI5IDA4OjU3ICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENvbmZpZ3VyZSBzY3JpcHQgY29uc2lzdGVuY3kgaW1wcm92ZW1lbnQ6IHJlbmFtZWQgdGhlIHZhcmlhYmxlCisgICAic2F2ZWRfTElCUyIgaW50byAibmV0c25tcF9zYXZlX0xJQlMiLgorCisyMDEwLTAxLTI5IDA2OjM5ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgQ0hBTkdFUzogdGVzdGluZzogQ2hlY2sgdGhlIHNpemUgb2Ygc3VuX3BhdGggYW5kIHVzZSB0aGF0IHRvCisgICBnZW5lcmF0ZSB0aGUgbWF4aW1hbCBzaXplIHN0cmluZ3MgZm9yIHN0cmVzc2luZyBjb20yc2VjdW5peC4KKworMjAxMC0wMS0yNyAxNToxNiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL2V2YWxfdG9vbHMuc2g6CisKKyAgIE5FV1M6IE1pbkdXOiBydW5uaW5nIHRoZSByZWdyZXNzaW9uIHRlc3Qgc3VpdGUgaXMgYWdhaW4gcG9zc2libGUKKyAgICgnbWFrZSB0ZXN0JykuCisKKzIwMTAtMDEtMjcgMTQ6NDMgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBDeWd3aW46IGJ1aWxkaW5nIHdpdGggYW5vdGhlciBPcGVuU1NMIHBhY2thZ2UgdGhhbiB0aGUKKyAgIEN5Z3dpbi1wcm92aWRlZCBwYWNrYWdlcyBvcGVuc3NsIGFuZCBvcGVuc3NsLWRldmVsIGlzIGFnYWluCisgICBwb3NzaWJsZS4KKyAgIE5FV1M6IE1pbkdXOiBidWlsZGluZyB3aXRoIE9wZW5TU0wgd29ya3MgYWdhaW4uCisKKzIwMTAtMDEtMjYgMjE6MjcgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogTWFrZSB0aGUgY29udGV4dCBhcmd1bWVudCBvZiBzZW5kX3YzdHJhcCwKKyAgIHNlbmRfdHJhcF92YXJzX3dpdGhfY29udGV4dCBhbmQgbmV0c25tcF9zZW5kX3RyYXBzIHJlZmVyIHRvIGEKKyAgIGNvbnN0IGNoYXIqLgorCisyMDEwLTAxLTI2IDIxOjI0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X3BrZ2luZm8uYzoKKworICAgQ29ycmVjdCBtaXNzcGVsbGluZyAtICNlbHNpZiB0byAjZWxpZgorCisyMDEwLTAxLTI2IDIxOjIxICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBBcHBhcmVudGx5IG5vdCBhbGwgc3lzdGVtcyBkZWZpbmUgSU5FVF9BRERSU1RSTEVOIHNvIGFkZCBpdCBpZiBpdAorICAgaXMgbWlzc2luZy4KKworMjAxMC0wMS0yNiAxNTo0NiAgYnZhc3NjaGUKKworICAgKiB0ZXN0aW5nL1RFU1RDT05GLnNoOgorCisgICBBZGRlZCBuZXRzdGF0IHBhdGggZm9yIE1pbkdXLgorCisyMDEwLTAxLTI2IDE1OjAwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBmaXggc3RhdCBuYW1lcworCisyMDEwLTAxLTI2IDE1OjAwICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oOgorCisgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuCisKKzIwMTAtMDEtMjYgMTQ6NTkgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIHVzZSBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4KKworMjAxMC0wMS0yNiAxNDo1OCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaDoKKworICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybgorCisyMDEwLTAxLTI2IDE0OjU4ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICB1cGRhdGUgY29tbWVudHMgdG8gcmVmbGVjdCBSRkM1NTkxIGFzIHRoZSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZQorICAgaW1wbGVtZW50YXRpb24KKworMjAxMC0wMS0yNiAxMTo0MyAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaDoKKworICAgTkVXUzogQ3lnd2luOiBCVUc6IDI5MzkxNjg6IGJ5dGUgb3JkZXIgb2YgdWRwTG9jYWxQb3J0IGlzIG5vdworICAgY29ycmVjdC4KKworMjAxMC0wMS0yNiAxMDo0NiAgYnZhc3NjaGUKKworICAgKiAgbmV0LXNubXAtY29uZmlnLmluLCB0ZXN0aW5nL1RFU1RDT05GLnNoLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybDoKKworICAgTkVXUzogQ3lnd2luOiBCVUc6IDI5MzkxNjg6IGZpeGVkIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgKCJtYWtlCisgICB0ZXN0IikuIFRoaXMgaGFzIGJlZW4gZml4ZWQgYnkgdXNpbmcgdGhlIHByb3BlciBlbnZpcm9ubWVudAorICAgc2VwYXJhdG9yIGNoYXJhY3RlciBhbmQgYnkgYWRkaW5nIHRoZSBwYXRoIG9mIHRoZSBuZXRzdGF0CisgICBleGVjdXRhYmxlIGZvciBDeWd3aW4gaW4gdGVzdGluZy9URVNUQ09ORi5zaC4KKworMjAxMC0wMS0yNiAwOToyNyAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeCByYXJlIHJhY2UgY29uZGl0aW9uIHdoZW4gcmVhZGluZyBSUE0KKyAgIGRhdGFiYXNlLgorICAgT2xkIHJwbSB2ZXJzaW9ucyByZXR1cm4gTlVMTCBpbnN0ZWFkIG9mIEhlYWRlciB3aGVuIGFub3RoZXIgUlBNCisgICBpbnN0YW5jZSBob2xkcworICAgZGF0YWJhc2UgbG9ja3MuIEkuZS4gc25tcGQgc29tZXRpbWVzIGNyYXNoZXMgd2hlbiByZWFkaW5nCisgICBocl9zd0luc3QgYW5kIHJwbSBpcworICAgaW5zdGFsbGluZy91cGRhdGluZy9yZW1vdmluZyBhbm90aGVyIHBhY2thZ2UuIEFzIGEgc29sdXRpb24sCisgICB3aG9sZSBSUE0gY2FjaGUKKyAgIGlzIHRocm93biBhd2F5IGFuZCByZS1yZWFkIHdoZW4gd2UgZ290IGFuIGVycm9yIGZyb20gbGlicnBtLiBUaGUKKyAgIHdob2xlIHByb2Nlc3MKKyAgIGlzIHJlc3RhcnRlZCBvbmx5IHRocmVlIHRpbWVzLCB0byBwcmV2ZW50IGVuZGxlc3MgbG9vcC4KKworMjAxMC0wMS0yNSAyMjoxNiAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYiwgc25tcGQ6IERvIG5vdCBjaGVjayBpZiB2YWx1ZXMgb2YgdHlwZSBzaXplX3QKKyAgIGFyZSBsZXNzIHRoYW4gMC4KKworMjAxMC0wMS0yNSAyMjoxMSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IENoZWNrIHRoZSByYW5nZSBvZiBvaWQgdmFsdWVzIHRvd2FyZHMgdGhlIG1heGltdW0KKyAgIG9pZCB2YWx1ZSwgbm90VUxPTkdfTUFYCisKKzIwMTAtMDEtMjUgMjA6MDEgIHJzdG9yeQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIG9ubHkgYmFpbCBvbiBtaXNzaW5nIGxpYmlwaGxwYXBpIGZvciB4d2luc29jazIKKworMjAxMC0wMS0yNSAxOTo1NyAgcnN0b3J5CisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgcmVuYW1lIE1BWF9TVEFUUyB0byBORVRTTk1QX1NUQVRfTUFYX1NUQVRTCisKKzIwMTAtMDEtMjUgMTk6NTMgIHJzdG9yeQorCisgICAqIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmM6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHBhdGggdG8gc25tcF9nZXRfc3RhdGlzdGljczsgY2hlY2sgZm9yIGluZGV4CisgICBvdmVyZmxvdworCisyMDEwLTAxLTI1IDE5OjQ0ICByc3RvcnkKKworICAgKiAgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81Lmg6CisKKyAgIHVwZGF0ZSBmb3IgbmV3IHBhdGggdG8gc25tcF9nZXRfc3RhdGlzdGljcworCisyMDEwLTAxLTI1IDE2OjAzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICB1c2UgKmN1cnJlbnQqIGNvcHkgb2YgdGhlIE1JQiB3aGVuIGdlbmVyYXRpbmcgc3RhdHMKKworMjAxMC0wMS0yNSAxNjowMSAgcnN0b3J5CisKKyAgICogIGFnZW50L2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvc25tcF9nZXRfc3RhdGlzdGljLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oOgorCisgICBtb3ZlIHNubXBfZ2V0X3N0YXRpc3RpYyBoZWxwZXIgdG8gaGVscGVycyBkaXI7IHVwZGF0ZSBhbGxfaGVscGVycworICAgaGVhZGVyCisKKzIwMTAtMDEtMjUgMTQ6MzQgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9hZ2VudHh0cmFwLmM6CisKKyAgIFJlcGxhY2VkIGV4cGxpY2l0IGRlY2xhcmF0aW9ucyBvZiBvcHRpbmQsIG9wdG9wdCBhbmQgb3B0YXJnIGJ5CisgICAjaW5jbHVkZSA8dW5pc3RkLmg+IGJlY2F1c2UgZXhwbGljaXRseSBkZWNsYXJpbmcgdGhlc2UgdmFyaWFibGVzCisgICBpcyBub3QgY29tcGF0aWJsZSB3aXRoIEN5Z3dpbi4KKworMjAxMC0wMS0yNSAxNDoyNSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgTkVXUzogQ3lnd2luOiBJUHY2IGlzIG9ubHkgc3VwcG9ydGVkIHVuZGVyIEN5Z3dpbiAxLjcgb3IgbGF0ZXIuCisgICBUaGUgb2xkIGltcGxlbWVudGF0aW9uIG9mIElQdjYgc3VwcG9ydCBpbiBOZXQtU05NUCB1bmRlciBDeWd3aW4KKyAgIGludm9sdmVkIGEgc3RyYW5nZSBtaXh0dXJlIG9mIEN5Z3dpbiBhbmQgV2luc29jazIgc29ja2V0IGNhbGxzLAorICAgd2hpY2ggd2FzIHRvbyBoYXJkIHRvIG1haW50YWluLgorICAgTkVXUzogQ3lnd2luOiBidWlsZHMgYWdhaW4gd2l0aCBJUHY2IHN1cHBvcnQgZW5hYmxlZAorICAgKC0tZW5hYmxlLWlwdjYpLiBBdCBsZWFzdCBOZXQtU05NUCA1LjUgZG9lc24ndCBidWlsZCB1bmRlciBDeWd3aW4KKyAgIHdpdGggSVB2NiBzdXBwb3J0IGVuYWJsZWQuIFRoZSBjb25maWd1cmUgc2NyaXB0IHJlcG9ydGVkCisgICAiY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlIC4uLiByZXN1bHQ6ICJ1bmtub3duLCBubyIgLi4uIGVycm9yOgorICAgSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkIi4KKworMjAxMC0wMS0yNSAxNDoxMyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL2luZXRfbnRvcC5jLCBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBBZGRlZCBtaXNzaW5nICNpbmNsdWRlIDxzdHJpbmcuaD4uCisKKzIwMTAtMDEtMjUgMTQ6MTAgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzOgorCisgICBBZGRlZCBjb25maWd1cmUgdGVzdCBmb3IgdGhlIElQdjYgc3RhY2sgaW5jbHVkZWQgaW4gQ3lnd2luCisgICB2ZXJzaW9uIDEuNy4KKyAgIElQdjYgc3VwcG9ydCBpcyBvbmUgb2YgdGhlIG5ldyBmZWF0dXJlcyBvZiBDeWd3aW4gMS43LiBGb3IgbW9yZQorICAgaW5mb3JtYXRpb24sCisgICBzZWUgYWxzbyBodHRwOi8vY3lnd2luLmNvbS9jeWd3aW4tdWctbmV0L292LW5ldzEuNy5odG1sLgorCisyMDEwLTAxLTI1IDEyOjQwICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IEN5Z3dpbjogdGhlIG1lc3NhZ2UgImNvbmZpZ3VyZTogV0FSTklORzogd2luc29jay5oOgorICAgcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiBkb2VzIG5vIGxvbmdlciBhcHBlYXIgd2hlbgorICAgcnVubmluZyB0aGUgY29uZmlndXJlIHNjcmlwdC4KKyAgIEZvbGxvdy11cCBmb3IgcjE4MDUwOiByZS1lbmFibGVkIGxpYmlwaGxwYXBpIGFuZCBpcGhscGFwaS5oIHRlc3RzCisgICBmb3Igbm9uLU1pbkdXIHBsYXRmb3JtcyBzaW5jZSB0aGUgQ3lnd2luIGJ1aWxkIG5lZWRzIHRoZXNlLgorCisyMDEwLTAxLTI1IDA3OjI4ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsIHNubXBsaWIvaW5ldF9udG9wLmMsICAKKyAgICAgICBzbm1wbGliL2luZXRfcHRvbi5jOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIGF1dG9jb25mIHRvIGRlY2lkZSBpZiBpbmV0X250b3AuYyBhbmQKKyAgIGluZXRfcHRvbi5jIGFyZSB0byBiZSBjb21waWxlZC4KKworMjAxMC0wMS0yNSAwNzowOSAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczoKKworICAgQ0hBTkdFUzogTWluR1c6IHN0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZCBjb25maWd1cmUgdGVzdAorICAgZG9lcyBub3cgd29yay4KKworMjAxMC0wMS0yNSAwNToxNCAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgVExTVE0gY291bnRlciBzdGF0cworCisyMDEwLTAxLTI1IDA1OjEzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBhZGQgaW4gVFNNIG5lZWRlZCBjb3VudGVyIGRlZmluaXRpb25zCisKKzIwMTAtMDEtMjUgMDU6MTIgIGhhcmRha2VyCisKKyAgICogbWlicy9TTk1QLVRTTS1NSUIudHh0LCBtaWJzL3JmY2xpc3Q6CisKKyAgIGFkZGVkIHRoZSBTTk1QLVRTTS1NSUIKKworMjAxMC0wMS0yNCAxNDo0MyAgbWFnZnIKKworICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5Lmg6CisKKyAgIE5FV1M6IHNubXBkOiBNYWRlIHN1YnRyZWVfY29udGV4dF9jYWNoZTo6Y29udGV4dF9uYW1lIGEgY29uc3QKKyAgIGNoYXIqLgorCisyMDEwLTAxLTI0IDE0OjI3ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQcmV2ZW50IGdjYyBwZWQtd2FybmluZyBmb3IKKyAgIE5FVFNOTVBfUkVNT1ZFX0NPTlNUCisKKzIwMTAtMDEtMjQgMTM6MjcgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdXNtLmM6CisKKyAgIENIQU5HRVM6IHNubXB1c206IFByZWZlciB0byB1c2UgYSB2YXJpYWJsZSBvZiB0aGUgcmlnaHQgdHlwZSBvdmVyCisgICBhbiB1Z2x5IGNhc3QuIExlc3NlbiB0aGUgc2NvcGUgb2YgdGhlIHZhcmlhYmxlIGFzIHdlbGwuCisKKzIwMTAtMDEtMjQgMTI6NTkgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogSW50cm9kdWNlZCB0aGUgdmFyaWFibGUgJ3dpdGhfc29ja2xpYicgaW4gdGhlCisgICBjb25maWd1cmUgc2NyaXB0LiBUaGlzIHZhcmlhYmxlIGlzIHNldCB0byAid2luc29jazIiIGZvciBNaW5HVworICAgYW5kIHRvICJkZWZhdWx0IiBmb3IgYWxsIG90aGVyIHN5c3RlbXMuIFdpbnNvY2syIHRlc3RzIGFyZSBvbmx5CisgICBydW4gaWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgdG8gIndpbnNvY2syIiAoTWluR1cpLgorCisyMDEwLTAxLTI0IDEyOjUzICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgUmVtb3ZlIHN1cGVyZmx1b3VzIGRlYnVnIGxvZ3MuCisKKzIwMTAtMDEtMjQgMTI6NDUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIFdpbmRvd3MsIGNvbXBpbGVyIHdhcm5pbmcgZml4ZXM6IGZpeGVkIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvCisgICB1bnNpZ25lZCBjaGFyICoKKyAgIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMjQgMTI6NDQgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIFdpbmRvd3MsIGNvbXBpbGVyIHdhcm5pbmcgZml4OiBtYWtlIGluZXRfbnRvcCgpIGFuZCBpbmV0X3B0b24oKQorICAgZGVjbGFyYXRpb25zCisgICBhdmFpbGFibGUgdG8gdGhlIGNvbXBpbGVyLgorCisyMDEwLTAxLTI0IDEyOjQ0ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIFdpbmRvd3MsIGNvbXBpbGVyIHdhcm5pbmcgZml4OiBtYWRlIHN1cmUgdGhhdCA8d3MydGNwaXAuaD4gd2lsbAorICAgYmUgaW5jbHVkZWQKKyAgIGZyb20gPG5ldC1zbm1wL3R5cGVzLmg+IHN1Y2ggdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBjb21wbGFpbgorICAgYWJvdXQgc3RydWN0CisgICBzb2NrYWRkcl9pbjYgYmVpbmcgdXNlZCBiZWZvcmUgYmVpbmcgZGVmaW5lZC4KKworMjAxMC0wMS0yNCAxMTo0MiAgYnZhc3NjaGUKKworICAgKiBtYW46CisKKyAgIFVwZGF0ZWQgU3VidmVyc2lvbiBpZ25vcmUgbGlzdC4KKworMjAxMC0wMS0yNCAxMTo0MSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfaW5kZXguYywgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgICAKKyAgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliX21vZHVsZXMuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMsIGFnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsIGFnZW50L21pYmdyb3VwL21pYmluY2wuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYWdlbnQvc25tcF92YXJzLmMsIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcGJ1bGtnZXQuYywgICAKKyAgICAgIGFwcHMvc25tcGJ1bGt3YWxrLmMsIGFwcHMvc25tcGRlbHRhLmMsIGFwcHMvc25tcGRmLmMsICAgCisgICAgICBhcHBzL3NubXBnZXQuYywgYXBwcy9zbm1wZ2V0bmV4dC5jLCBhcHBzL3NubXBzZXQuYywgICAKKyAgICAgIGFwcHMvc25tcHN0YXR1cy5jLCBhcHBzL3NubXB0YWJsZS5jLCBhcHBzL3NubXB0ZXN0LmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwLmMsIGFwcHMvc25tcHVzbS5jLCBhcHBzL3NubXB2YWNtLmMsICAgCisgICAgICBhcHBzL3NubXB3YWxrLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgsIHNubXBsaWIvbGNkX3RpbWUuYywgICAKKyAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zY2FwaS5jLCBzbm1wbGliL3NubXAtdGMuYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9hdXRoLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICAgCisgICAgICBzbm1wbGliL3NubXBrc20uYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdmFjbS5jOgorCisgICBDbGVhbnVwIChXaW5kb3dzKTogcmVtb3ZlZCBzdXBlcmZsdW91cyAjaW5jbHVkZSA8c3lzL3RpbWViLmg+CisgICBkaXJlY3RpdmVzLiBUaGlzIGhlYWRlciBmaWxlCisgICBoYXMgb25seSB0byBiZSBpbmNsdWRlZCBmcm9tIHNubXBsaWIvc3lzdGVtLmMgYmVjYXVzZSBvZiB0aGUKKyAgIF9mdGltZSgpIGNhbGwgaW4gdGhhdCBmaWxlLgorCisyMDEwLTAxLTI0IDEwOjQzICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jOgorCisgICBUaGUgbWFjcm8gJ0MoKScgbm93IGNhc3RzIGl0cyByZXN1bHQgZnJvbSB1bnNpZ25lZCBsb25nIHRvCisgICB1bnNpZ25lZCBpbnQuCisgICBUaGlzIGNoYW5nZSBmaXhlcyBhIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGZvcm1hdCBzcGVjaWZpY2F0aW9uCisgICBtaXNtYXRjaGVzCisgICBhbmQgZml4ZXMgYSBidWcgKGluY29ycmVjdCBzbm1wbmV0c3RhdCBvdXRwdXQpIG9uIGJpZyBlbmRpYW4KKyAgIHN5c3RlbXMuCisKKzIwMTAtMDEtMjQgMTA6MzMgIGJ2YXNzY2hlCisKKyAgICogbWFuL2NvbmZpZ19hcGkuMzoKKworICAgRm9sbG93LXVwIGZvciByMTc5NDY6IHJlbW92ZWQgZ2VuZXJhdGVkIG1hbiBwYWdlcyBmcm9tCisgICByZXBvc2l0b3J5LgorCisyMDEwLTAxLTI0IDEwOjMxICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmgsIHNubXBsaWIvd2luc2VydmljZS5jOgorCisgICBNb3ZlZCB0d28gZGVjbGFyYXRpb25zIG9mIHN0YXRpYyBmdW5jdGlvbnMgZnJvbSAuaCB0byAuYy4KKworMjAxMC0wMS0yNCAxMDoyMSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmM6CisKKyAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBjYXN0cy4KKworMjAxMC0wMS0yNCAxMDoxOSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGJ1aWxkcyBhZ2FpbiB3aGVuIEhBVkVfR0VUQUREUklORk8gaXMgbm90CisgICBkZWZpbmVkLgorCisyMDEwLTAxLTI0IDEwOjAzICBidmFzc2NoZQorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL2luZXRfbnRvcC5jLCAgIAorICAgICAgc25tcGxpYi9pbmV0X250b3AuaCwgc25tcGxpYi9pbmV0X3B0b24uYywgc25tcGxpYi9pbmV0X3B0b24uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENoYW5nZXM6CisgICAtIEFkZGVkIGNvbmZpZ3VyZSB0ZXN0cyBmb3IgaW5ldF9udG9wKCkgYW5kIGluZXRfcHRvbigpLgorICAgLSBBZGRlZCBoZWFkZXIgZmlsZXMgc25tcGxpYi9pbmV0X250b3AuaCBhbmQgc25tcGxpYi9pbmV0X3B0b24uaC4KKyAgIC0gUmVwbGFjZWQgImV4dGVybiBpbmV0X250b3AoLi4uKTsiIGFuZCAiZXh0ZXJuIGluZXRfcHRvbiguLi4pOyIKKyAgIGJ5ICNpbmNsdWRlICJpbmV0X250b3AvcHRvbi5oIi4KKyAgIC0gQ29udmVydGVkIHNubXBsaWIvaW5ldF9udG9wLmMgYW5kIHNubXBsaWIvaW5ldF9wdG9uLmMgZnJvbSBLJlIKKyAgIEMgdG8gQU5TSSBDLgorICAgLSBSZXBsYWNlZCB0aGUgaW5ldF9hdG9uKCkgY2FsbHMgdGhhdCB3ZXJlIGludHJvZHVjZWQgaW4gcjE4MDMzCisgICBpbiBzbm1wbGliL3NubXBVRFBEb21haW4uYyBieSBpbmV0X3B0b24oKSBjYWxscyBzdWNoIHRoYXQgaXQgaXMKKyAgIGFnYWluIHBvc3NpYmxlIHRvIGJ1aWxkIE5ldC1TTk1QIG9uIFdpbmRvd3MuCisKKzIwMTAtMDEtMjQgMDY6MDggIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFJlbW92ZSBkZWNsYXJhdGlvbnMgb2YgZnVuY3Rpb25zIHRoYXQgZG9uJ3QKKyAgIGV4aXN0IG9yIGFyZSBkZWNsYXJlZCBlbHNld2hlcmUuCisKKzIwMTAtMDEtMjQgMDU6NDggIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBORVdTOiBzbm1wbGliOiBSZW1vdmVkIHRoZSB1bnVzZWQgdmFyaWFibGVzIHdhcm1fc3RhcnRfb2lkLAorICAgbGlua19kb3duX29pZCwgbGlua191cF9vaWQsIGF1dGhfZmFpbF9vaWQgYW5kIGVncF94eHhfb2lkLgorCisyMDEwLTAxLTIzIDIyOjA2ICBtYWdmcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNzBjb20yc2VjLCB0ZXN0aW5nL3Rlc3RzL1QwNzFjb20yc2VjNiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBCZXR0ZXIgc2V0IG9mIFNLSVBJRi9TS0lQSUZOT1RTCisKKzIwMTAtMDEtMjMgMjA6MzEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsIHRlc3RpbmcvdGVzdHMvVDA3MmNvbTJzZWN1bml4OgorCisgICBCZSBjb3JyZWN0IGluIHdoYXQgaXQgaXMgdGhhdCBpcyB0ZXN0ZWQgaW4gdGhlIGhlYWRlci4KKworMjAxMC0wMS0yMyAyMDoyNyAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlZCB0aGUgY29tMnNlYyBkaXJlY3RpdmVzIHRvIGZhaWwgaWYgdGhlcmUKKyAgIGFyZSB0b28gZmV3IGFyZ3VtZW50cy4gQWRkaXRpb25hbGx5IGNoYW5nZWQgdGhlIHN0b3JhZ2Ugc3RydWN0dXJlCisgICB0byBub3QgYWxsb2NhdGUgbW9yZSBzcGFjZSB0aGFuIG5lY2Vzc2FyeS4KKworMjAxMC0wMS0yMyAyMDoyMiAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDcwY29tMnNlYywgdGVzdGluZy90ZXN0cy9UMDcxY29tMnNlYzYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNzJjb20yc2VjdW5peDoKKworICAgbmV3IHRlc3RzIGNoZWNraW5nIHRoZSBlcnJvciBoYW5kbGluZyBvZiB0aGUgY29tMnNlYyogZGlyZWN0aXZlcworCisyMDEwLTAxLTIzIDE5OjE3ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBGb2xsb3ctdXAgZm9yIHIxODAyNTogYnVpbGRzIGFnYWluIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uCisKKzIwMTAtMDEtMjMgMTc6NTEgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuYWM6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBPUyBoZWFkZXIgZGV0ZWN0aW9uIGNoZWNrIGlzIG5vdyBydW4gYmVmb3JlCisgICBJUHY2IHN0YWNrIGRldGVjdGlvbi4KKyAgIENIQU5HRVM6IFNvbGFyaXM6IHNvY2thZGRyX2luNi5zaW42X2FkZHIgY29uZmlndXJlIHRlc3QgZG9lcyBub3cKKyAgIHdvcmsuCisKKzIwMTAtMDEtMjMgMTc6NDIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9sYXJnZV9mZF9zZXQuYzoKKworICAgRml4ZWQgYSBTb2xhcmlzLXNwZWNpZmljIGNvbXBpbGVyIHdhcm5pbmcuCisKKzIwMTAtMDEtMjMgMTc6MDAgIGJ2YXNzY2hlCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oOgorCisgICBNaW5HVzogYWRkZWQgY29uZmlndXJlIHRlc3QgZm9yIDxzeXMvdGltZWIuaD4gYW5kIGFsc28gZm9yIHN0cnVjdAorICAgdGltZXpvbmUuCisKKzIwMTAtMDEtMjMgMTY6MzIgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIE1pbkdXOiBtYWRlIHN1cmUgdGhhdCB0aGUgSVB2Ni1yZWxhdGVkIGRhdGF0eXBlcyBhcmUgYXZhaWxhYmxlCisgICBiZWZvcmUgYmVpbmcgdXNlZC4KKworMjAxMC0wMS0yMyAxNjozMCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGRlZCAjdW5kZWYgSEFWRV9XSU5ET1dTX0guCisKKzIwMTAtMDEtMjMgMTY6MjggIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBNaW5HVzogbWFkZSBnZXR0aW1lb2ZkYXkoKSBkZWNsYXJhdGlvbiBhdmFpbGFibGUgZm9yIHRoZQorICAgY29tcGlsZXIuCisKKzIwMTAtMDEtMjMgMTY6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBNaW5HVzogbWFkZSBnZXR0aW1lb2ZkYXkoKSBkZWNsYXJhdGlvbiBhdmFpbGFibGUgZm9yIHRoZQorICAgY29tcGlsZXIuCisKKzIwMTAtMDEtMjMgMTY6MjYgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9pbmV0X3B0b24uYzoKKworICAgTWFkZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGNvbXBsYWluIGFib3V0IGEgbWlzc2luZworICAgcHJvdG90eXBlIGZvciBpc2RpZ2l0KCkuCisKKzIwMTAtMDEtMjMgMTY6MjQgIGJ2YXNzY2hlCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgTWluR1c6IGlwaGxwYXBpLmggY29uZmlndXJlIHRlc3QgZG9lcyBub3cgd29yay4KKworMjAxMC0wMS0yMyAxNToxMCAgYnZhc3NjaGUKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXM6CisKKyAgIFJlbmFtZWQgdGhlIFdpbnNvY2syIElQdjYgc3RhY2sgZnJvbSAnbWluZ3cnIGludG8gJ3dpbnNvY2syJy4KKworMjAxMC0wMS0yMyAxNTowNyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCBhZ2VudC9zbm1wZC5jLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9pbmV0LmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldDYuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5oLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgIAorICAgICAgIHNubXBsaWIvaW5ldF9udG9wLmMsIHNubXBsaWIvaW5ldF9wdG9uLmMsICAgCisgICAgICBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFNTSERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBJbXByb3ZlZCBwb3J0YWJpbGl0eSBiZXR3ZWVuIHRoZSBzdXBwb3J0ZWQgV2luMzIgY29tcGlsYXRpb24KKyAgIGVudmlyb25tZW50cyBhcyBmb2xsb3dzOgorICAgLSBNYWRlIHN1cmUgdGhhdCB0aGUgPHdpbnNvY2syLmg+IGFuZCA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGVzCisgICBhcmUgb25seSBpbmNsdWRlZCBmcm9tIDxuZXQtc25tcC90eXBlcy5oPi4KKyAgIC0gQWRkZWQgY29uZmlndXJlIGNoZWNrIGZvciA8aXBobHBhcGkuaD4uCisgICAtIFJlcGxhY2VkIHNldmVyYWwgV0lOMzIgLyBjeWd3aW4gdGVzdHMgYnkgYSBIQVZFX0lQSExQQVBJX0gKKyAgIHRlc3QuCisgICAtIERvY3VtZW50ZWQgdGhhdCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBpcyBvbmx5IHVzZWQKKyAgIGZvciB0aGUgTVNWQyBidWlsZC4KKworMjAxMC0wMS0yMiAxNjo0NiAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3Rvb2xzLmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTEwOiBidWlsZHMgYWdhaW4gd2l0aCBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbworICAgNi4KKworMjAxMC0wMS0yMiAxNjo0MSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgd2luMzIvTWdtdEFwaS13aW5FeHRETEwuaDoKKworICAgRm9sbG93IHVwIGZvciByMTgwMTY6IGJ1aWxkcyBhZ2FpbiB3aXRoIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLgorCisyMDEwLTAxLTIyIDE0OjEzICBidmFzc2NoZQorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE4MDE2OiBtYWRlIE1pbkdXIGxpYmlwaGxwYXBpIGNoZWNrIG1vcmUgcm9idXN0LgorCisyMDEwLTAxLTIyIDEzOjMyICBidmFzc2NoZQorCisgICAqICBSRUFETUUud2luMzIsIGFjbG9jYWwubTQsIGFnZW50L2FnZW50X2luZGV4LmMsICAgCisgICAgICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAorICAgICAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJfbW9kdWxlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYywgYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsIGFnZW50L21pYmdyb3VwL3N0cnVjdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmgsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIGFnZW50L3NubXBfdmFycy5jLCBhZ2VudC9zbm1wZC5jLCBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgICAKKyAgICAgIGFwcHMvc25tcGJ1bGtnZXQuYywgYXBwcy9zbm1wYnVsa3dhbGsuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcGRmLmMsIGFwcHMvc25tcGdldC5jLCBhcHBzL3NubXBnZXRuZXh0LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuYywgYXBwcy9zbm1wc2V0LmMsIGFwcHMvc25tcHN0YXR1cy5jLCAgIAorICAgICAgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdGVzdC5jLCBhcHBzL3NubXB0cmFuc2xhdGUuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfYXV0aC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfbG9nLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9zcWwuYywgYXBwcy9zbm1wdXNtLmMsIGFwcHMvc25tcHZhY20uYywgICAKKyAgICAgIGFwcHMvc25tcHdhbGsuYywgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfaXB2Nl90eXBlcywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL2FzbjEuYywgc25tcGxpYi9jYWxsYmFjay5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgICAKKyAgICAgIHNubXBsaWIvaW50NjQuYywgc25tcGxpYi9rZXl0b29scy5jLCBzbm1wbGliL2xhcmdlX2ZkX3NldC5jLCAgIAorICAgICAgc25tcGxpYi9sY2RfdGltZS5jLCBzbm1wbGliL21kNS5jLCBzbm1wbGliL21pYi5jLCAgIAorICAgICAgc25tcGxpYi9wYXJzZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsIHNubXBsaWIvc2NhcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcC5jLCBzbm1wbGliL3NubXBfYWxhcm0uYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2F1dGguYywgc25tcGxpYi9zbm1wX2NsaWVudC5jLCBzbm1wbGliL3NubXBfZGVidWcuYywgCisgICAgICAgIHNubXBsaWIvc25tcF9sb2dnaW5nLmMsIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMsICAgCisgICAgICBzbm1wbGliL3NubXBrc20uYywgc25tcGxpYi9zbm1wdXNtLmMsIHNubXBsaWIvc25tcHYzLmMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsIHNubXBsaWIvdmFjbS5jLCAgIAorICAgICAgc25tcGxpYi93aW5waXBlLmMsIHdpbjMyL1NubXAtd2luRXh0RExMLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBNaW5HVzogd2luRXh0RExMIGNvbXBpbGVzIG5vdyB1bmRlciBNaW5HVy4KKyAgIENIQU5HRVM6IE1pbkdXOiBidWlsZGluZyBOZXQtU05NUCB3b3JrcyBhZ2Fpbi4KKyAgIAorICAgRGV0YWlsZWQgb3ZlcnZpZXc6CisgICAqIENoYW5nZXMgaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQ6CisKKyAgIC0gc29ja2V0KCkgbGlicmFyeSBjaGVjayBwYXNzZXMgYWdhaW4gb24gTWluR1cuCisgICAtIEFkZGVkIGxpYnJhcnkgY2hlY2tzIGZvciBsaWJ3czJfMzIsIGxpYnJlZ2V4IGFuZCBsaWJzbm1wYXBpLgorICAgLSBBZGRlZCBjaGVjayBmb3IgdGhlIHdpbnNvY2syLmggYW5kIHdzMnRjcGlwLmggaGVhZGVyIGZpbGVzLgorICAgLSBBZGRlZCBjaGVjayBmb3IgdGhlIGNob3duKCkgYW5kIGxvY2FsdGltZV9yKCkgZnVuY3Rpb25zLgorICAgLSBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZCBjaGVjayBkb2VzIG5vdyB3b3JrIG9uIE1pbkdXLgorICAgLSBBZGRlZCBJUHY2IHN0YWNrIHR5cGUgY2FsbGVkICJtaW5ndyIuCisgICAqIFNvdXJjZSBjb2RlIGNoYW5nZXM6CisKKyAgIC0gSW5jbHVkZSA8d2luc29jazIuaD4gZnJvbSA8bmV0LXNubXAvdHlwZXMuaD4gaW5zdGVhZCBvZgorICAgPHdpbnNvY2suaD4KKyAgIHVuZGVyIE1pbkdXIHN1Y2ggdGhhdCBJUHY2IHN1cHBvcnQgaXMgYXZhaWxhYmxlLgorICAgLSBNb3ZlZCAjaW5jbHVkZSA8d2luc29jay5oPiBmcm9tIC5jIGZpbGVzIHRvIDxuZXQtc25tcC90eXBlcy5oPi4KKyAgIC0gQWRkZWQgYSBjb3B5IG9mIHRoZSBNaW5HVyBoZWFkZXIgZmlsZSA8c25tcC5oPiAod2hpY2ggaXMgbm90CisgICBjb3B5cmlnaHRlZCkKKyAgIGFzIHdpbjMyL1NubXAtd2luRXh0RExMLmguCisgICAtIGFnZW50OiBvbmx5IGNhbGwgY2hvd24oKSB3aGVuIGF2YWlsYWJsZSAoSEFWRV9DSE9XTikuCisgICAqIERvY3VtZW50YXRpb24gY2hhbmdlczogdXBkYXRlZCBSRUFETUUud2luMzIuCisKKworMjAxMC0wMS0yMiAwODozNCAgbWFnZnIKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCBjYXN0IGZyb20gY2hhciogdG8gY2hhcioKKworMjAxMC0wMS0yMiAwMDozOSAgaGFyZGFrZXIKKworICAgKiBDT1BZSU5HOgorCisgICBDb3B5cmlnaHQgZmlsZSB1cGRhdGUgZm9yIFNQQVJUQSwgSW5jLgorCisyMDEwLTAxLTIyIDAwOjIyICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcHRzbS5jOgorCisgICBhZGQgcHJvcGVyIHByZWZpeGVzIGluIFRTTSBmb3IgU1NILCBEVExTLCBldGMsIGJhc2VkIG9uIHRoZQorICAgZG9tYWluCisKKzIwMTAtMDEtMjIgMDA6MjAgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgYWRkZWQgNS41IGJyYW5jaAorCisyMDEwLTAxLTIyIDAwOjIwICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBtaW5vciBlY2hvIG91dHB1dCBjaGFuZ2UKKworMjAxMC0wMS0yMSAyMDo1MSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBtb3ZlIGNvbW1lbnQgbmV4dCB0byBjb2RlIGl0IGlzIHRhbGtpbmcgYWJvdXQ7IE5vIGNvZGUgY2hhbmdlCisKKzIwMTAtMDEtMjEgMTQ6NTUgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDI5MjYzNzQ6IGZyb20gRWQgU3dpZXJrOiBmaXhlZCByZWFkaW5nIG9mCisgICBpcEFkZHJlc3NUYWJsZSBmcm9tIC9wcm9jL25ldC9pZl9pbmV0NiBvbiBMaW51eAorICAgCisgICBUaGUga2VybmVsIG1pZ2h0IHByb3ZpZGUgbG9uZ2VyIGZpZWxkcywgZXNwZWNpYWxseSBvbiA2NC1iaXQKKyAgIHN5c3RlbXMuCisKKzIwMTAtMDEtMjAgMTI6NDIgIGJ2YXNzY2hlCisKKyAgICogUE9SVElORywgbG9jYWwvc25tcGNoZWNrLmRlZjoKKworICAgRml4ZWQgdHlwbzogcmVwbGFjZWQgJ25lY2lzc2FyeScgYnkgJ25lY2Vzc2FyeScuCisKKzIwMTAtMDEtMjAgMDg6NTMgIGpzYWZyYW5laworCisgICAqIG1hbi9zbm1wbmV0c3RhdC4xLmRlZjoKKworICAgRml4IG1pbm9yIHR5cG8gaW4gbWFuIHBhZ2UsIGl0J3Mgc25tcG5ldHN0YXQgLUNwLCBub3QgLUNQLgorCisyMDEwLTAxLTE0IDEyOjM0ICBqc2FmcmFuZWsKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IGZpeGVkIG1lbW9yeSBsZWFrIGluIFJNT04tTUlCIGFuZCBFVEhFUkxJS0UtTUlCIHdoZW4KKyAgIHRoZXJlIGFyZSBtdWx0aXBsZSBhbGlhc2VzIG9mIGFuIG5ldHdvcmsgaW50ZXJmYWNlCisgICBSYXRpb25hbGU6IHRoZSBhbGlhc2VkIGludGVyZmFjZXMgaGF2ZSB0aGUgc2FtZSBpZkluZGV4IC0+CisgICBDT05UQUlORVJfSU5TRVJUIGZhaWxzLCBidXQgdGhlIHJlamVjdGVkIGVudHJ5IHdhcyBub3QgZnJlZWQuCisKKzIwMTAtMDEtMTMgMTE6MjEgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IGZpeCBtZW1vcnkgbGVhayBpbiBpcEFkZHJlc3NQcmVmaXhUYWJsZQorICAgLSBuZXRfc25tcF9zZWFyY2hfdXBkYXRlX3ByZWZpeF9pbmZvIHJldHVybnMgZGlmZmVyZW50IGNvZGUsIHdoZW4KKyAgIHRoZSBlbnRyeSB3YXMgbm90IGluc2VydGVkIHRvIGxpc3QgYW5kIGNhbiBiZSBmcmVlZC4KKworMjAxMC0wMS0xMiAwMDo1MiAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBydW4gcnBtIGNvbmZpZ3VyZSBjaGVja3MgZm9yIGhyX3N3aW5zdCByZXdyaXRlCisgICAocnBtCisgICB2ZXJzaW9uIG9ubHkpCisKKzIwMTAtMDEtMTEgMjM6NTggIHRhbmRlcnMKKworICAgKiBhcHBzL01ha2VmaWxlLmluOgorCisgICBhZGQgUEVSTExET1BUU19GT1JfQVBQUyB0byBhZ2VudHh0cmFwIGxpbmsgbGluZSAoZml4ZXMKKyAgICJsaWJwZXJsLnNvIG5vdAorICAgZm91bmQiIGVycm9ycykKKworMjAxMC0wMS0xMSAwMDoxMSAgdGFuZGVycworCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCwgdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAsIHRlc3RpbmcvdGVzdHMvVDExM2FnZW50eHRyYXAsICAKKyAgICAgICB0ZXN0aW5nL3Rlc3RzL1QxMTRhZ2VudHhhZ2VudHh0cmFwOgorCisgICBnZXQgcmlkIG9mIHVzaW5nIGRlcHJlY2F0ZWQgc3ludGF4IGZvciB0cmFwL2luZm9ybSBzaW5rcworCisyMDEwLTAxLTA4IDA4OjQyICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IG9ic29sZXRlZCBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcuCisgICBGcm9tIG5vdyBvbiB1c2luZyBTSUdBTFJNIHRvIHRyaWdnZXIgTmV0LVNOTVAgYWxhcm0gaGFuZGxlcnMgaXMKKyAgIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisgICAKKyAgIE1vdGl2YXRpb246IGFzIGtub3duIGxpYm5ldHNubXAgc3VwcG9ydHMgdGltZS1iYXNlZCBhbGFybXMgdmlhCisgICB0aGUgZnVuY3Rpb25zCisgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKCksIHJ1bl9hbGFybXMoKSBhbmQgb3RoZXIgZnVuY3Rpb25zLiBUd28KKyAgIGRpZmZlcmVudCB3YXlzIHRvCisgICB0cmlnZ2VyIHRoZSBmdW5jdGlvbiBydW5fYWxhcm1zKCkgYXJlIHN1cHBvcnRlZCBpbnNpZGUKKyAgIGxpYm5ldHNubXA6CisgICAxLiBCeSBtYWtpbmcgc3VyZSB0aGF0IHRoZSB0aW1lb3V0IGFyZ3VtZW50IG9mIHNlbGVjdCgpIGlzIHNtYWxsCisgICBlbm91Z2ggc3VjaAorICAgdGhhdCBzZWxlY3QoKSByZXR1cm5zIGJlZm9yZSB0aGUgbmV4dCBhbGFybSBtdXN0IGJlIGhhbmRsZWQgKHdoZW4KKyAgIHRoZQorICAgdmFyaWFibGUgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGlzIHNldCB0byBvbmUsIHdoaWNoCisgICBpcyB0aGUKKyAgIGRlZmF1bHQpLgorICAgMi4gQnkgbWFraW5nIHN1cmUgdGhhdCB0aGUga2VybmVsIGZpcmVzIFNJR0FMUk0gYXQgdGhlIHRpbWUgd2hlbgorICAgcnVuX2FsYXJtcygpCisgICBzaG91bGQgYmUgY2FsbGVkICh3aGVuIHRoZSB2YXJpYWJsZQorICAgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHIGlzIHNldAorICAgdG8gemVybywgd2hpY2ggaGFzIHRvIGJlIGNvbmZpZ3VyZWQgZXhwbGljaXRseSkuCisgICAKKyAgIFRoZSBmb2xsb3dpbmcgaXNzdWVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHNlY29uZCBhcHByb2FjaDoKKyAgIDEuIEFsYXJtIGZ1bmN0aW9ucyBhcmUgdXNlZCBpbnNpZGUgTmV0LVNOTVAgdG8gZS5nLiByZWZyZXNoCisgICBjYWNoZWQgdGFibGUKKyAgIGNvbnRlbnRzLiBBcyBmYXIgYXMgSSBjYW4gc2VlIHRoZXJlIGlzIG5vdGhpbmcgaW4gdGhlIE5ldC1TTk1QCisgICBzb3VyY2UgY29kZQorICAgdGhhdCBwcmV2ZW50cyB0aGUgZm9sbG93aW5nIGZyb20gaGFwcGVuaW5nOiBhIHRhYmxlIHJlZnJlc2gKKyAgIHRyaWdnZXJlZCB2aWEKKyAgIFNJR0FMUk0gd2hpbGUgYSByb3cgaXMgYmVpbmcgcmVtb3ZlZCBmcm9tIGEgY2FjaGVkIHRhYmxlLiBUaGlzCisgICBjYW4gcmVzdWx0CisgICBpbiBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcyBhbmQgZXZlbiBhIGNyYXNoLgorICAgMi4gUE9TSVggcmVzdHJpY3RzIHNpZ25hbCBoYW5kbGVycyB0byBjYWxsaW5nIGZ1bmN0aW9ucyB0aGF0IGFyZQorICAgZWl0aGVyIHJlZW50cmFudAorICAgb3Igbm9uLWludGVycnVwdGlibGUKKyAgIChodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3hzaF9jaGFwMDJfMDQuaHRtbCN0YWdfMDJfMDQpLgorICAgU3RhbmRhcmQgSS9PIGZ1bmN0aW9ucyBsaWtlIHByaW50ZigpIGFuZCBmcHJpbnRmKCkgYXJlIG5laXRoZXIKKyAgIHJlZW50cmFudCBub3IKKyAgIG5vbi1pbnRlcnJ1cHRpYmxlLiBydW5fYWxhcm1zKCkgaXMgY2FsbGVkIGZyb20gaW5zaWRlIGEgc2lnbmFsCisgICBoYW5kbGVyLCB3aGljaAorICAgbWVhbnMgdGhhdCB0aGlzIHJlc3RyaWN0aW9uIGFwcGxpZXMgdG8gdGhlIGZ1bmN0aW9uIHJ1bl9hbGFybXMoKQorICAgaXRzZWxmIGFuZAorICAgYWxsIGZ1bmN0aW9ucyBjYWxsZWQgYnkgaXQgKHdoaWNoIGluY2x1ZGVzIHRoZSBhbGFybSBjYWxsYmFjaworICAgZnVuY3Rpb25zKS4KKyAgIE9yOiBlLmcuIHNubXBfbG9nKCkgYW5kIGl0cyBjYWxsZXJzIG11c3Qgbm90IGJlIGNhbGxlZCBmcm9tCisgICBpbnNpZGUgcnVuX2FsYXJtcygpCisgICB3aGVuIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCBmcm9tIGluc2lkZSBhIHNpZ25hbCBoYW5kbGVyLiBUaGlzCisgICBpcyBhIHNldmVyZQorICAgcmVzdHJpY3Rpb24sIGFuZCBvbmUgdGhhdCBpcyBoYXJkIHRvIHdvcmsgd2l0aC4KKyAgIDMuIE5vdCBhbGwgc29mdHdhcmUgZGV2ZWxvcGVycyBrbm93IGhvdyB0byBtYWtlIHN1cmUgdGhhdCBzaWduYWwKKyAgIGRlbGl2ZXJ5IHdvcmtzCisgICBjb3JyZWN0bHkgaW4gYSBtdWx0aXRocmVhZGVkIGNvbnRleHQuIFBPU0lYIGRvZXMgbm90IGd1YXJhbnRlZSB0bworICAgd2hpY2ggdGhyZWFkCisgICBhIHNpZ25hbCBsaWtlIFNJR0FMUk0gd2lsbCBiZSBkZWxpdmVyZWQsIHVubGVzcyB0aGF0IHNpZ25hbCBoYXMKKyAgIGJlZW4gYmxvY2tlZAorICAgYmVmb3JlIHRocmVhZCBjcmVhdGlvbiBhbmQgaXMgdW5ibG9ja2VkIGFmdGVyIHRocmVhZCBjcmVhdGlvbgorICAgKHNlZSBhbHNvCisgICBodHRwOi8vd3d3Lm9wZW5ncm91cC5vcmcvb25saW5lcHVicy8wMDk2OTUzOTkvZnVuY3Rpb25zL3B0aHJlYWRfc2lnbWFzay5odG1sKS4KKyAgIFRoaXMgaXMgcmVsZXZhbnQgZm9yIHRoZSBOZXQtU05NUCBwcm9qZWN0IG5vdCBvbmx5IGJlY2F1c2UgYQorICAgd29ya2VyIHRocmVhZCBpcworICAgY3JlYXRlZCBpbnNpZGUKKyAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYyBidXQgYWxzbworICAgYmVjYXVzZSBsaWJuZXRzbm1wIGlzIG9mdGVuIHVzZWQgaW5zaWRlIG11bHRpdGhyZWFkZWQgc29mdHdhcmUuCisgICBDdXJyZW50bHkgbm8KKyAgIGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHN1cmUgdGhhdCBTSUdBTFJNIGlzIHByb2Nlc3NlZCBieSB0aGUKKyAgIE5ldC1TTk1QIGV2ZW50CisgICBwcm9jZXNzaW5nIGxvb3AgdGhyZWFkLiBJZiBTSUdBTFJNIGlzIHByb2Nlc3NlZCBieSBhbm90aGVyCisgICB0aHJlYWQsIHRoaXMgd2lsbAorICAgcmVzdWx0IGluIG9uZSBvciBtb3JlIGRhdGEgcmFjZXMuCisgICAKKyAgIEJlY2F1c2UgYWxsIHRoZSBkaWZmaWN1bHRpZXMgYXNzb2NpYXRlZCB3aXRoIHByb2Nlc3NpbmcgYWxhcm1zCisgICBmcm9tIGluc2lkZSBhCisgICBzaWduYWwgaGFuZGxlciBmdW5jdGlvbiwgYW5kIGJlY2F1c2UgZml4aW5nIHRoZXNlIHdvdWxkIHJlcXVpcmUKKyAgIG1vcmUgZWZmb3J0IHRoYW4KKyAgIGl0IGlzIHdvcnRoLCBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgaGFzIGJlZW4KKyAgIGRlcHJlY2F0ZWQgYW5kIGZyb20gbm93CisgICBvbiBhcHByb2FjaCAoMSkgaXMgdGhlIG9ubHkgc3VwcG9ydGVkIGFwcHJvYWNoIHRvIHRyaWdnZXIgYWxhcm0KKyAgIGhhbmRsZXJzLgorCisyMDEwLTAxLTA3IDE5OjQyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmM6CisKKyAgIFBhdGNoIGZyb20gU3RlcGhlbiBIZW1taW5nZXIgdG8gZml4IGEgbWlub3IgbWVtbGVhayBpbiBjcHUKKyAgIHN5c2N0cmwgZmV0Y2hpbmcKKworMjAxMC0wMS0wNyAxNjoyMSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcHVzbS5jLCBzbm1wbGliL3ZhY20uYzoKKworICAgUmVtb3ZlZCByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLCBhbmQgbWFkZSBzdXJlIHRoYXQKKyAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgJ1wwJy10ZXJtaW5hdGVzIHRoZSBvdXRwdXQgYnVmZmVyCisgICBpbiBhbGwgY2FzZXMuCisgICBVcGRhdGVkIGRvY3VtZW50YXRpb24gYW5kIHVuaXQgdGVzdHMuCisKKzIwMTAtMDEtMDcgMTQ6NDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIFJlbW92ZWQgdGhyZWUgc3VwZXJmbHVvdXMgY2FzdHMgYmVjYXVzZSB0aGVzZSB0cmlnZ2VyZWQgYQorICAgY29tcGlsZXIgd2FybmluZworICAgd2hlbiBjb21waWxlZCB3aXRoIE1TVkMuCisKKzIwMTAtMDEtMDcgMTM6MjggIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBSZXZlcnRlZCB0aGUgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBjaGFuZ2VzIGZyb20gcjE3OTkyCisgICBiZWNhdXNlIHRoZXNlCisgICBjYXVzZWQgdGhlIGZvbGxvd2luZyBWYWxncmluZCBjb21wbGFpbnQgZHVyaW5nIHNubXBkIHN0YXJ0dXA6CisgICAKKyAgID09MjUyMDE9PSBDb25kaXRpb25hbCBqdW1wIG9yIG1vdmUgZGVwZW5kcyBvbiB1bmluaXRpYWxpc2VkCisgICB2YWx1ZShzKQorICAgPT0yNTIwMT09IGF0IDB4NDA0N0IxNDogbmV0c25tcF9zZW5kX3RyYXBzIChhZ2VudF90cmFwLmM6Nzk4KQorICAgPT0yNTIwMT09IGJ5IDB4NDA0ODEyODogc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycworICAgKGFnZW50X3RyYXAuYzo4NTMpCisgICA9PTI1MjAxPT0gYnkgMHg0MDQ4MTlEOiBzZW5kX3RyYXBfdmFycyAoYWdlbnRfdHJhcC5jOjk2MykKKyAgID09MjUyMDE9PSBieSAweDQwNDgyNUI6IHNlbmRfZWFzeV90cmFwIChhZ2VudF90cmFwLmM6MTAxMSkKKyAgID09MjUyMDE9PSBieSAweDgwNEI1RDI6IG1haW4gKHNubXBkLmM6Mzk0KQorCisyMDEwLTAxLTA3IDEyOjMwICBidmFzc2NoZQorCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgRml4ZWQgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBtaXNtYXRjaC4KKworMjAxMC0wMS0wNyAxMjoxOSAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaDoKKworICAgRGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LCBhc3NpZ25pbmcgYSBjaGFyICogcG9pbnRlciB0bworICAgc3lzT1JUYWJsZTo6T1JfZGVzY3IgZG9lcyBvciBkb2VzIG5vdCB0cmFuc2ZlcgorICAgb3duZXJzaGlwLiBTbyB3aGV0aGVyIE9SX2Rlc2NyIGlzIGRlY2xhcmVkIGFzIGNoYXIgKiBvciBhcyBjb25zdAorICAgY2hhciAqLCB0aGVyZSB3aWxsIGFsd2F5cyBiZSBhdAorICAgbGVhc3Qgb25lIHN0YXRlbWVudCBvbiB3aGljaCB0aGUgY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGEgY2hhcgorICAgKiAgLyBjb25zdCBjaGFyICogbWlzbWF0Y2guIFRoZSBvbmx5ICAgIHNvbHV0aW9uIGlzIHRvIGNhc3QgYXdheQorICAgICAgY29uc3Qgd2hlcmUgYXBwcm9wcmlhdGUgdG8gbWFrZSBzdXJlICAgIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90CisgICAgICBjb21wbGFpbiwgICAgYXMgaW1wbGVtZW50ZWQgaW4gdGhpcyBwYXRjaC4gIDIwMTAtMDEtMDcgMTE6NDYgCisgICAgICBidmFzc2NoZQorCisKKyAgICogc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIHVzbV9zYXZlX3VzZXIoKTogd2hlbiB3cml0aW5nIHVzZXItPm5hbWUgYW5kIHVzZXItPnNlY05hbWUsIG9ubHkKKyAgIHdyaXRlIHRoZSBBU0NJSSBkYXRhIGFuZCBub3QgdGhlCisgICB0ZXJtaW5hdGluZyAnXDAnLiBTaW5jZSBib3RoIGl0ZW1zIGFyZSByZWFkIGJ5IGNhbGxpbmcKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCksIHdyaXRpbmcKKyAgIHRoZSB0ZXJtaW5hdGluZyAnXDAnIGlzIG5vdCBuZWNlc3NhcnkgdG8gZ3VhcmFudGVlIHRoYXQgdGhlIGRhdGEKKyAgIHJlYWQgYmFjayBpcyB0ZXJtaW5hdGVkIHByb3Blcmx5LgorCisyMDEwLTAxLTA3IDA5OjEzICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQ2hhbmdlZCB0aGUgYmVoYXZpb3Igb2YgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKTogdW50aWwKKyAgIG5vdyB0aGlzCisgICBmdW5jdGlvbiB0ZXJtaW5hdGVkIHRoZSBvdXRwdXQgYnVmZmVyIGluIHNvbWUgY2FzZXMgd2l0aCAnXDAnCisgICAod2hlbiB0aGUKKyAgIGlucHV0IHdhcyBpbiB0aGUgZm9ybWF0IDB4Li4uIGFuZCBhIGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnJlZCBhbmQKKyAgIGFsc28KKyAgIHdoZW4gdGhlIGlucHV0IHdhcyBpbiBBU0NJSSBmb3JtYXQsIGJ1dCBub3Qgd2hlbiB0aGUgaW5wdXQgd2FzIGluCisgICBmb3JtYXQKKyAgIDB4Li4uIGFuZCBubyBidWZmZXIgb3ZlcmZsb3cgb2NjdXJyZWQpLiBDaGFuZ2VkIHRoaXMgc3VjaCB0aGF0CisgICB0aGlzCisgICBmdW5jdGlvbiBkb2VzIG5vIGxvbmdlciB0ZXJtaW5hdGUgdGhlIGlucHV0IGJ1ZmZlciB3aXRoICdcMCcuCisgICBUaGlzCisgICBjaGFuZ2Ugd2FzIHBvc3NpYmxlIGJlY2F1c2UgaW5zaWRlIHRoZSBOZXQtU05NUCBwcm9qZWN0IGFsbAorICAgY2FsbGVycyB0aGF0CisgICBuZWVkZWQgYSAnXDAnIHRlcm1pbmF0ZWQgc3RyaW5nIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gdXNlCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpIGluc3RlYWQuCisKKzIwMTAtMDEtMDYgMTc6NTIgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmM6CisKKyAgIFJldmVydGVkIHIxNzk2OCBhbmQgcjE3OTcyLgorCisyMDEwLTAxLTA2IDE1OjQwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jOgorCisgICBGaXhlZCBtb3JlIGNvbXBpbGVyIHdhcm5pbmdzIHJlbGF0ZWQgdG8gdGhlIHVzZSBvZiB0aGUgY29uc3QKKyAgIGtleXdvcmQuCisKKzIwMTAtMDEtMDYgMTU6MzggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgRml4ZWQgYSBmb3JtYXQgc3BlY2lmaWNhdGlvbiBtaXNtYXRjaC4KKworMjAxMC0wMS0wNiAxNTozNiAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oOgorCisgICBDaGFuZ2VkIGFyZ3VtZW50IHR5cGUgZnJvbSBjaGFyICogaW50byBjb25zdCBjaGFyICouIFNob3VsZCBoYXZlCisgICBiZWVuIGluY2x1ZGVkIGluIHIxNzk3NS4KKworMjAxMC0wMS0wNiAxNTozMyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvIHVfY2hhciAqCisgICBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTA2IDE1OjMxICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQWRkZWQgdGhlIGZ1bmN0aW9ucyByZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigpIGFuZAorICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoKSwgd2hpY2gKKyAgIGFjY2VwdCBhIHBhcnNlciBmdW5jdGlvbiB0aGF0IGRvZXMgbm90IG1vZGlmeSB0aGUgc3RyaW5nIHRoYXQgaXQKKyAgIHBhcnNlcy4gVXNpbmcgdGhlc2UgZnVuY3Rpb25zIHJlc3VsdHMKKyAgIGluIGVhc2llciB0byByZWFkIGNvZGUgdGhhbiB1c2luZyB0aGUgbm9uLWNvbnN0IGhhbmRsZXIKKyAgIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMgYW5kIGNhc3RpbmcgdGhlIHBhcnNlcgorICAgZnVuY3Rpb24gZXhwbGljaXRseSBmcm9tICh2b2lkKCopKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKikpIHRvCisgICAodm9pZCgqKShjb25zdCBjaGFyKiwgY2hhciopKS4KKworMjAxMC0wMS0wNiAxNToyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXB1c20uYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAxNDo0OCAgYnZhc3NjaGUKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaCwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBZGRlZCByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KCkuCisKKzIwMTAtMDEtMDYgMTQ6NDIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOgorCisgICBEdXBsaWNhdGVkIHRoZSBzZWNvbmQgYXJndW1lbnQgb2YgUkVHSVNURVJfU1lTT1JfVEFCTEUoKSAvCisgICBSRUdJU1RFUl9TWVNPUl9FTlRSWSgpCisgICBzaW5jZSB0aGF0IGFyZ3VtZW50IGlzIGZyZWVkIHdoaWxlIHVucmVnaXN0ZXJpbmcgc3VjaCBhbiBlbnRyeS4KKyAgIE5vdCBzdXJlIHdoZXRoZXIKKyAgIHRoaXMgY291bGQgYWN0dWFsbHkgdHJpZ2dlciBhIGNhbGwgb2YgZnJlZSgpIHdpdGggYSBjb25zdGFudAorICAgc3RyaW5nIGFzIGFyZ3VtZW50CisgICBhbmQgSSdtIG5laXRoZXIgc3VyZSBhYm91dCB3aGV0aGVyIG9yIG5vdCB0aGlzIGNvdWxkIGhhdmUKKyAgIHRyaWdnZXJlZCBhIGNyYXNoLgorCisyMDEwLTAxLTA2IDE0OjM0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgsIHNubXBsaWIvdmFjbS5jOgorCisgICBGb3IgdGhvc2UgVkFDTSBmdW5jdGlvbnMgdGhhdCBkbyBub3QgbW9kaWZ5IHRoZSBzdHJpbmdzIHBhc3NlZCBhcworICAgYXJndW1lbnRzLAorICAgY2hhbmdlZCB0aGUgYXJndW1lbnQgdHlwZSBmcm9tIGNoYXIgKiB0byBjb25zdCBjaGFyICouCisKKzIwMTAtMDEtMDYgMTQ6MjcgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgRml4ZWQgYSBjb21waWxlciB3YXJuaW5nIGFib3V0IGRpc2NhcmRpbmcgdGhlIGNvbnN0IHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAxNDoyNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYzoKKworICAgUmVtb3ZlZCBhbiB1bnVzZWQgdmFyaWFibGUuCisKKzIwMTAtMDEtMDYgMTQ6MTQgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmM6CisKKyAgIER1cGxpY2F0ZWQgdGhlIHNlY29uZCBhcmd1bWVudCBvZiBSRUdJU1RFUl9TWVNPUl9UQUJMRSgpIC8KKyAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKCkKKyAgIHNpbmNlIHRoYXQgYXJndW1lbnQgaXMgZnJlZWQgd2hpbGUgdW5yZWdpc3RlcmluZyBzdWNoIGFuIGVudHJ5LgorICAgTm90IHN1cmUgd2hldGhlcgorICAgdGhpcyBjb3VsZCBhY3R1YWxseSB0cmlnZ2VyIGEgY2FsbCBvZiBmcmVlKCkgd2l0aCBhIGNvbnN0YW50CisgICBzdHJpbmcgYXMgYXJndW1lbnQKKyAgIGFuZCBJJ20gbmVpdGhlciBzdXJlIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgY291bGQgaGF2ZQorICAgdHJpZ2dlcmVkIGEgY3Jhc2guCisKKzIwMTAtMDEtMDYgMTQ6MDggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmg6CisKKyAgIEZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgYWJvdXQgZGlzY2FyZGluZyB0aGUgY29uc3QKKyAgIHF1YWxpZmllci4KKworMjAxMC0wMS0wNiAxNDowNiAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jOgorCisgICBGaXhlZCBzZXZlcmFsIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvIHVfY2hhciAqCisgICBtaXNtYXRjaGVzLgorCisyMDEwLTAxLTA2IDE0OjA0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENoYW5nZXM6CisgICAtIEFkZGVkIG5ldyBmdW5jdGlvbnMgc2tpcF93aGl0ZV9jb25zdCgpLCBza2lwX25vdF93aGl0ZV9jb25zdCgpLAorICAgc2tpcF90b2tlbl9jb25zdCgpLCBjb3B5X253b3JkX2NvbnN0KCkgYW5kCisgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCgpLgorICAgLSBDaGFuZ2VkIHJldHVybiB0eXBlIG9mIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkgZnJvbQorICAgY2hhciAqIHRvCisgICBjb25zdCBjaGFyICouIE5vdGU6IHRoaXMgZG9lcyBub3QgYWZmZWN0IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5CisgICBzaW5jZSB0aGlzCisgICBmdW5jdGlvbiBoYXMgbm90IHlldCBiZWVuIGluY2x1ZGVkIGluIGFueSByZWxlYXNlLgorICAgLSBGaXhlZCBkb2N1bWVudGF0aW9uIG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgYW5kCisgICByZWFkX2NvbmZpZ19yZWFkX2FzY2lpX3N0cmluZygpLgorICAgLSBSZWR1Y2VkIG51bWJlciBvZiBjYXN0LWF3YXktY29uc3QgY29uc3RydWN0cyBpbiByZWFkX2NvbmZpZy5jLgorCisyMDEwLTAxLTA2IDEzOjM1ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oOgorCisgICBSZWZpbmVkIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgbWFjcm8gTkVUU05NUF9SRU1PVkVfQ09OU1QoKToKKyAgIHdoZW4gdXNpbmcKKyAgIHRoZSBnY2MgY29tcGlsZXIsIGl0IGlzIG5vdyB2ZXJpZmllZCB3aGV0aGVyIHRoZSB0eXBlcyAoY29uc3QgdCkKKyAgIGFuZCB0eXBlb2YoZSkKKyAgIGFyZSBjb21wYXRpYmxlLCB3aGVyZSB0IGlzIHRoZSBmaXJzdCBhcmd1bWVudCBhbmQgZSB0aGUgc2Vjb25kCisgICBhcmd1bWVudCBvZgorICAgdGhpcyBtYWNyby4KKworMjAxMC0wMS0wNiAxMzozMyAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuaDoKKworICAgQWRkIHN1cHBvcnQgb2YgbmV0d29yayBpbnRlcmZhY2VzIHdpdGggSFcgYWRkcmVzcyBiaWdnZXIgdGhhbiA2CisgICBieXRlcyB0byBhdFRhYmxlLiBTb21lIEhXLCBsaWtlIEluZmluaUJhbmQsIHVzZXMgSFcgYWRkcmVzc2VzCisgICB3aXRoIDkgYW5kIG1vcmUgYnl0ZXMuCisKKzIwMTAtMDEtMDYgMTI6NDUgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHUzogMjkyNDE0MDogRml4IHRlcm1pbmF0aW9uIG9mIENQVS9GUFUgdHlwZXMKKworMjAxMC0wMS0wNiAxMjozMyAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVR1M6IDI5MjIzOTA6IEZpeCB0ZXN0IGZvciBtaXNzaW5nIGNvbnRleHROYW1lCisgICBwYXJhbWV0ZXIKKworMjAxMC0wMS0wNiAxMTo1NyAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvc25tcF9wZXJsLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXIuYywgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYywgc25tcGxpYi9wYXJzZS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKKworICAgQ2hhbmdlczoKKyAgIC0gSW50cm9kdWNlZCBhIG5ldyBtYWNybyBORVRTTk1QX1JFTU9WRV9DT05TVCgpIHRoYXQgYWxsb3dzIHRvCisgICBjYXN0CisgICBhd2F5IGNvbnN0bmVzcyB3aXRob3V0IHRoYXQgZ2NjIC1XY2FzdC1xdWFsIHJlcG9ydHMgYSB3YXJuaW5nLgorICAgLSBNYWRlIGNhc3RpbmcgYXdheSBjb25zdG5lc3MgZXhwbGljaXQgYnkgaW50cm9kdWNpbmcgdGhlCisgICBORVRTTk1QX1JFTU9WRV9DT05TVCgpIG1hY3JvLiBUaGlzIHN1cHByZXNzZXMgdGhlIHdhcm5pbmcKKyAgIGdjYyAtV2Nhc3QtcXVhbCBwcmludGVkIGZvciB0aGVzZSBzdGF0ZW1lbnRzLgorCisyMDEwLTAxLTA2IDExOjQ2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYywgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBkaXNjYXJkaW5nIHRoZSBjb25zdCBxdWFsaWZpZXIuCisKKzIwMTAtMDEtMDYgMDk6MTQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgYXBwcy9hZ2VudHh0cmFwLmMsIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRG8gbm90IHVzZSAwIHdoZW4gcmVmZXJyaW5nIHRvIE5VTEwuCisKKzIwMTAtMDEtMDYgMDg6MjYgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBzbm1wbGliL3N5c3RlbS5jOgorCisgICBDaGFuZ2VkIGFyZ3VtZW50IHR5cGVzIG9mIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSBhbmQKKyAgIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoKQorICAgZnJvbSBzdHJ1Y3QgdGltZXZhbCAqIHRvIGNvbnN0IHN0cnVjdCB0aW1ldmFsICouIE5vdGU6IHRoaXMgZG9lcworICAgbm90IGFmZmVjdAorICAgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCisKKzIwMTAtMDEtMDYgMDg6MjMgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIENoYW5nZXMgKG5vIGZ1bmN0aW9uYWxpdHkgaGFzIGJlZW4gbW9kaWZpZWQpOgorICAgLSBSZW1vdmVkIGRpc2tpb19wYXJzZV9jb25maWcoKSBkZWNsYXJhdGlvbiBiZWNhdXNlIHRoYXQgZnVuY3Rpb24KKyAgIGlzIG5laXRoZXIgY2FsbGVkIG5vciBkZWZpbmVkIGluIHRoZSBzb3VyY2UgZmlsZSBkaXNraW8uYy4KKyAgIC0gQWRkZWQgZGVjbGFyYXRpb24gZm9yIGdldHN0YXRzKCkgc3VjaCB0aGF0IGdjYyBkb2VzIG5vdAorICAgY29tcGxhaW4gYWJvdXQgYSBtaXNzaW5nIGRlY2xhcmF0aW9uLgorICAgLSBMaW51eDogY2hhbmdlZCB2aXNpYmlsaXR5IG9mIGdldHN0YXRzKCkgZnJvbSBnbG9iYWwgdG8gc3RhdGljCisgICBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgQlNEIGFuZCBEYXJ3aW4gaW1wbGVtZW50YXRpb25zIG9mCisgICBnZXRzdGF0cygpLgorCisyMDEwLTAxLTA2IDA4OjAwICBidmFzc2NoZQorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmM6CisKKyAgIEZpeGVkIGNvbXBpbGVyIHdhcm5pbmdzIGFib3V0IGNoYXIgKiAvIHVfY2hhciAqIG1pc21hdGNoZXMuCisKKzIwMTAtMDEtMDYgMDI6MTggIG1hZ2ZyCisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBtYW4vTWFrZWZpbGUuaW4sIHRlc3RpbmcvdGVzdHMvVDExNGFnZW50eGFnZW50eHRyYXA6CisKKyAgIENIQU5HRVM6IGFwcHM6IE9ubHkgYnVpbGQgYWdlbnR4dHJhcCBpZiB0aGUgYWdlbnR4IGxpYnJhcmllcyBhcmUKKyAgIGJ1aWx0LiBBZGQgYSB0ZXN0IGNhc2UgZm9yIGFnZW50eHRyYXAuCisgICAKKyAgIFRoZSBlbmFibGVtZW50L2Rpc2FibGVtZW50IGlzIGluc3BpZXJlZCBieSBhdXRvbWFrZSBjb25kaXRpb25hbHMKKworMjAxMC0wMS0wNiAwMTo1OSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmM6CisKKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGUgc3RhcnR0aW1lLgorCisyMDEwLTAxLTA1IDIyOjU0ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaDoKKworICAgQ0hBTkdFUzogSGlkZSBtb3N0IGZ1bmN0aW9ucyBhbmQgdmFyaWFibGVzIGluIHRoZSBsb2dtYXRjaAorICAgbW9kdWxlLiBDbGVhbmVkIHVwIHRoZSBoZWFkZXIgYWNjb3JkaW5nbHkuIFJlbW92ZSB0aGUgbmVlZCBmb3IKKyAgIGZvcndhcmQgZGVjbGFyYXRpb25zIGJ5IHJlb3JkZXJpbmcgdGhlIGZ1bmN0aW9ucy4KKworMjAxMC0wMS0wNSAyMjozMyAgZHRzMTIKKworICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgorCisgICBDSEFOR0VTOiBweXRob246IEJVR1M6IDI5MTkzNzk6IEluaXRpYWxpc2UgU05NUCBzZXNzaW9ucyBwcm9wZXJseQorICAgUHJvdmlkZWQgYnkgRGllZ28gQmlsbGkKKworMjAxMC0wMS0wNSAyMjoyMCAgZHRzMTIKKworICAgKiBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUdTOiAyOTE5MzIwOiBBdm9pZCBhY2Nlc3NpbmcgZnJlZWQgbWVtb3J5CisgICBSZXBvcnRlZCBieSBUb21hc3ogTGlzCisKKzIwMTAtMDEtMDUgMTg6NTggIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHUzogMjkxNDQxMDogRml4IGNyYXNoIG9uIGVtcHR5IGNvbW1hbmQgbGluZXMKKworMjAxMC0wMS0wNSAxNTozMSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyOTEyNTg0OiBGaXggbnVsbCBPSUQgaGFuZGxpbmcgaW4gQWdlbnR4CisgICBvbiA2NGJpdAorICAgUGF0Y2ggc3VwcGxpZWQgYnkgTHV0eiBKYWVuaWNrZQorCisyMDEwLTAxLTA1IDEwOjExICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oOgorCisgICBDSEFOR0VTOiBocHV4OiBmaXggYnVpbGQgZXJyb3Igb24gSFAtVVggMTAuMjAKKworMjAxMC0wMS0wNSAwODo0MiAganNhZnJhbmVrCisKKyAgICogbWFuLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIFJlbW92ZSBnZW5lcmF0ZWQgbWFuIHBhZ2VzIGZyb20gcmVwb3NpdG9yeS4KKworMjAxMC0wMS0wNCAxNjo0NCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEZpeGVkIGEgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWQgdGhhdCBvY2N1cnJlZCB3aGVuIGFuIEFTQ0lJCisgICBzdHJpbmcgd2FzCisgICBwYXNzZWQgYXMgdGhlIGZpcnN0IGFyZ3VtZW50IG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgLworICAgcmVhZF9jb25maWdfcmVhZF9hc2NpaV9zdHJpbmcoKSBhbmQgdGhlIHRoaXJkIGFyZ3VtZW50ICgqbGVuKQorICAgZXF1YWxzIDAuCisKKzIwMTAtMDEtMDQgMTY6NDEgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGaXhlZCBjb21waWxlciB3YXJuaW5ncyBhYm91dCBjYXN0aW5nIGF3YXkgJ2NvbnN0Jy4KKworMjAxMC0wMS0wNCAxNjoyNyAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIEFkZGVkIHVuaXQgdGVzdCBmb3IgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBhbmQKKyAgIHJlYWRfY29uZmlnX3JlYWRfYXNjaWlfc3RyaW5nKCkuCisKKzIwMTAtMDEtMDQgMTA6NDUgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIFVzZSBjb3JyZWN0IG9pZCBsZW5ndGggaW4gdGFibGUgaW5kZXhlcy4KKworMjAxMC0wMS0wNCAwODoxMCAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgTWFkZSBzdXJlIHRoYXQgc25tcF9hbGFybS5jIGNhbiBiZSBjb21waWxlZCBhZ2FpbiB3aXRoIEM4OQorICAgY29tcGlsZXJzOiBmb3IgQzg5CisgICBpdCBpcyByZXF1aXJlZCB0aGF0IGluaXRpYWxpemVycyBhcmUgY29uc3RhbnQgZXhwcmVzc2lvbnMuCisKKzIwMTAtMDEtMDMgMTY6MjggIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyLmM6CisKKyAgIFJlbmFtZSBuZXRzbm1wX2FyY2hfdGNwY29ubl9kZWxldGUgdG8KKyAgIG5ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZSBpbiBvcmRlciB0byBiZSBjb25zaXN0ZW50IHdpdGgKKyAgIHRoZSBoZWFkZXIgZmlsZSBhbmQgYWxsIHRoZSBvdGhlciBmdW5jdGlvbnMgaW4gdGhlIG1vZHVsZS4KKworMjAxMC0wMS0wMyAxNjoyNiAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAgCisgICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg6CisKKyAgIEFkZCBtaXNzaW5nIGRlY2xhcmF0aW9ucy4KKworMjAwOS0xMi0zMCAxMjo0OSAgYnZhc3NjaGUKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaDoKKworICAgRm9sbG93LXVwIGZvciByMTc5MzM6IGZpeGVkIHRoZSBpc3N1ZSB0aGF0IGluY2x1ZGluZyB0aGUgaGVhZGVyCisgICBmaWxlCisgICA8bmV0LXNubXAvbGlicmFyeS90eXBlcy5oPiBmcm9tIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisgICB0cmlnZ2VycworICAgY29tcGlsZXIgZXJyb3JzIGR1cmluZyB0aGUgY29uZmlndXJlIHByb2Nlc3MgKGNvbXBsYWludHMgYWJvdXQKKyAgIDxuZXRzbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBub3QgYmVpbmcgaW5jbHVkZWQgYmVmb3JlCisgICA8bmV0LXNubXAvdHlwZXMuaD4pLgorICAgTm90ZTogdGhpcyBkb2VzIG5vdCBzb2x2ZSB0aGUgdW5kZXJseWluZyBwcm9ibGVtIHRoYXQgTUlCIGNvZGUKKyAgIG11c3Qgbm90CisgICBpbmNsdWRlIHRoZSBoZWFkZXIgZmlsZSA8bmV0LXNubXAvdHlwZXMuaD4gYmVjYXVzZSBkb2luZyBzbyB3b3VsZAorICAgdHJpZ2dlciBhCisgICBjaXJjdWxhciBkZXBlbmRlbmN5IGR1cmluZyB0aGUgY29uZmlndXJlIHN0ZXAgKE1JQiBjb2RlIGlzCisgICBjb21waWxlZCBkdXJpbmcKKyAgIHRoZSBjb25maWd1cmUgc3RlcCwgd2hpbGUgdGhlIGNvbmZpZ3VyZSBzdGVwIGdlbmVyYXRlcworICAgPG5ldHNubXAvbmV0LXNubXAtY29uZmlnLmg+IGFuZCA8bmV0LXNubXAvdHlwZXMuaD4gbmVlZHMKKyAgIDxuZXRzbm1wL25ldC1zbm1wLWNvbmZpZy5oPikuCisKKzIwMDktMTItMzAgMTE6NDggIGJ2YXNzY2hlCisKKyAgICogYXBwcywgbWFuOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkxOTogdXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0cy4KKworMjAwOS0xMi0yOCAxODowMyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9hZ2VudF9pbmRleC5jOgorCisgICBGaXhlZCBhIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkLiBGb3VuZCB0aGlzIGJ5IGFuYWx5emluZyBjb21waWxlcgorICAgd2FybmluZ3MuCisgICBOb3RlOiB0aGUgYWZmZWN0ZWQgZnVuY3Rpb24sIHJlZ2lzdGVyX3N0cmluZ19pbmRleCgpLCBpc24ndAorICAgY2FsbGVkIGZyb20KKyAgIGFueXdoZXJlIGluc2lkZSB0aGUgTmV0LVNOTVAgcHJvamVjdCBpdHNlbGYuCisKKzIwMDktMTItMjMgMDk6NDkgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CisKKyAgIEZpeCBpbnZhbGlkIHJlYWQgcmVwb3J0ZWQgYnkgdmFsZ3JpbmQ6CisgICBJbnZhbGlkIHJlYWQgb2Ygc2l6ZSAxCisgICBtZW1jcHkgKG1jX3JlcGxhY2Vfc3RybWVtLmM6NDAyKQorICAgX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkX3Y0CisgICAoaXBhZGRyZXNzX2lvY3RsLmM6MjQwKQorICAgbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jb250YWluZXJfbG9hZCAoaXBhZGRyZXNzX2xpbnV4LmM6MTU4KQorICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkIChpcGFkZHJlc3NfY29tbW9uLmM6MTEyKQorICAgCisgICBSZXR1cm5pbmcgc3RydWN0dXJlIHdpdGggcG9pbnRlcnMgaW5zaWRlIGlzIG5vdCB0aGUgYmVzdCB0aGluZyB0bworICAgZG8uCisKKzIwMDktMTItMjIgMTY6MDUgIGJ2YXNzY2hlCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi92YWNtLmM6CisKKyAgIEZpeGVkIHNldmVyYWwgcGFzdC1lbmQtb2YtYnVmZmVyIHJlYWRzLgorCisyMDA5LTEyLTIyIDEyOjAyICBidmFzc2NoZQorCisgICAqICBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCAKKyAgICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIFJldmVydGVkIHRoZSBiYWNrd2FyZHMtaW5jb21wYXRpYmxlIGNoYW5nZXMgb2YgcjE3OTEzOgorICAgLSBSZXN0b3JlZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgRElGRlRJTUVWQUwoKSBtYWNyby4KKyAgIC0gUmVzdG9yZWQgdGhlIGRlZmluaXRpb25zIG9mIHRoZSBmdW5jdGlvbnMKKyAgIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSwKKyAgIHVhdGltZV9yZWFkeSgpLCBtYXJrZXJfdHRpY2tzKCkgYW5kIHRpbWV2YWxfdHRpY2tzKCkuCisgICAtIHN0YXJ0dGltZSBpcyBhZ2FpbiBhIGdsb2JhbCB2YXJpYWJsZSBpbnN0ZWFkIG9mIGEgc3RhdGljIG9uZS4KKyAgIEFsc28gaW1wbGVtZW50ZWQgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgorICAgLSBNb3ZlZCB0aGUgbWFya2VyX3QgdHlwZWRlZiBmcm9tIG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaCB0bworICAgbmV0LXNubXAvbGlicmFyeS90eXBlcy5oLgorICAgLSBBZGRlZCBhIG5ldyB0eXBlZGVmLCBjb25zdF9tYXJrZXJfdC4KKyAgIC0gRm9yIHRob3NlIGF0aW1lXyooKSAvIHVhdGltZV8qKCkgLyAqX3R0aWNrcygpIGZ1bmN0aW9ucyB0aGF0IGRvCisgICBub3QgY2hhbmdlCisgICB0aGVpciBhcmd1bWVudHMsIGRlY2xhcmVkIHRoZXNlIGFyZ3VtZW50cyBjb25zdF9tYXJrZXJfdCBpbnN0ZWFkCisgICBvZiBtYXJrZXJfdC4KKyAgIC0gUmVuYW1lZCBuZXRzbm1wX2dldF9zdGFydHRpbWUoKSBhbmQgbmV0c25tcF9zZXRfc3RhcnR0aW1lKCkgdG8KKyAgIG5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSgpIGFuZCBuZXRzbm1wX3NldF9hZ2VudF9zdGFydHRpbWUoKQorICAgcmVzcGVjdGl2ZWx5LiBNb3ZlZCB0aGVzZSBmdW5jdGlvbnMgZnJvbSB0b29scy5jIHRvIHN5c3RlbS5jLgorICAgLSBSZW1vdmVkIHRoZSBmdW5jdGlvbiBhdGltZV9oc3VidHJhY3QoKSAod2FzIGludHJvZHVjZWQgaW4KKyAgIHIxNzkxMykgYW5kCisgICBpbnRyb2R1Y2VkIGEgbmV3IGZ1bmN0aW9uLCBuZXRzbm1wX3NldF9hZ2VudF91cHRpbWUoKS4KKworMjAwOS0xMi0yMiAwNzo1OSAgYnZhc3NjaGUKKworICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFJldmVydGVkIHIxNzkyNiwgd2hpY2ggbWFkZSB0aGUgc3RyaW5nIHJldHVybmVkIGJ5CisgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIHplcm8tdGVybWluYXRlZC4gQSBuZXcgcGF0Y2ggd2lsbAorICAgZm9sbG93CisgICB0aGF0IGZpeGVzIHRoZSBjYWxsZXJzIG9mIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCkgdGhhdAorICAgd2VyZQorICAgYXNzdW1pbmcgdGhhdCByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpIHplcm8tdGVybWluYXRlcyB0aGUKKyAgIHN0cmluZworICAgcmVhZCBieSB0aGlzIGZ1bmN0aW9uLgorCisyMDA5LTEyLTIxIDE0OjI5ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBmaXggY3Jhc2ggaW4gSUYtTUlCIGFuZCBJUC1NSUIgd2hlbiB0aGVyZSBhcmUKKyAgIHNvbWUgaW50ZXJmYWNlcyB3aXRoIGJyb2FkY2FzdCBJUCBhZGRyZXNzIGFuZCBzb21lIHdpdGhvdXQuCisgICAKKyAgIFJlc2V0IHRoZSBiY2FzdGVudHJ5IGluIHRoZSBsb29wLCBzbyBpdCBjYW5ub3QgYmUgaW5zZXJ0ZWQgdG8gdGhlCisgICBjb250YWluZXIKKyAgIHR3aWNlLgorICAgCisgICBXaXRob3V0IHRoaXMgcGF0Y2gsIHdoZW4gYW4gaW50ZXJmYWNlIHdpdGhvdXQgYnJvYWRjYXN0IGFkZHJlc3MKKyAgIGlzIHByb2Nlc3NlZCwKKyAgIHRoZSBiY2FzdGFkZHJlc3MgZnJvbSBwcmV2aW91cyBsb29wIGlzIGluc2VydGVkIGludG8gdGhlCisgICBjb250YWluZXIuIFRoaXMKKyAgIG9idmlvdXNseSBmYWlscyBhbmQgdGhlIGJjYXN0ZW50cnkgaXMgZnJlZWQsIGJ1dCB0aGUgY29udGFpbmVyCisgICBzdGlsbCBjb250YWlucworICAgcmVmZXJlbmNlIHRvIGl0IC0+IFNJR1NFR1YuCisKKzIwMDktMTItMjEgMTM6NTIgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkyODogd2hpbGUgcjE3OTI4IGZpeGVkIGEgZGFuZ2xpbmcgcG9pbnRlcgorICAgZGVyZWZlcmVuY2UKKyAgIGRldGVjdGVkIGJ5IHJ1bm5pbmcgdGhlIE5ldC1TTk1QIHNvZnR3YXJlIG9uIFdpbmRvd3MsIHRoYXQgcGF0Y2gKKyAgIGludHJvZHVjZWQKKyAgIGEgZGFuZ2xpbmcgcG9pbnRlciBkZXJlZmVyZW5jZSBhYm91dCB3aGljaCBvbmx5IFZhbGdyaW5kIG9uIExpbnV4CisgICBjb21wbGFpbmVkLgorICAgVGhpcyBmb2xsb3ctdXAgcGF0Y2ggZml4ZXMgYm90aCBkYW5nbGluZyBwb2ludGVyIGRlcmVmZXJlbmNlcworICAgdHJpZ2dlcmVkIGJ5CisgICBwYXJzaW5nIHRoZSBwZXJzaXN0ZW50RGlyIGtleXdvcmQuCisKKzIwMDktMTItMjEgMTM6MzIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmM6CisKKyAgIEFwcGxpZWQgYSBzbGlnaHRseSBtb2RpZmllZCB2ZXJzaW9uIG9mIHBhdGNoICMyOTAxMTIyLiBDaGFuZ2VzOgorICAgLSBOZXcgZmVhdHVyZTogc3BlY2lmeWluZyBBU04gdHlwZSBTTk1QX05PU1VDSElOU1RBTkNFIGFzIHRoZQorICAgdGhpcmQgYXJndW1lbnQKKyAgIG9mIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4oKSB3aWxsIGNhdXNlIGFuIFNOTVAgR2V0UmVxdWVzdCAvCisgICBHZXROZXh0UmVxdWVzdCB0bworICAgcmV0dXJuIHRoZSBlcnJvciBjb2RlIG5vU3VjaEluc3RhbmNlIChTTk1QdjIpIG9yIG5vU3VjaE5hbWUKKyAgIChTTk1QdjEpLiBUaGlzCisgICBtYWtlcyBpdCBwb3NzaWJsZSB0byBoYXZlIGEgY2FjaGVkIHRhYmxlIHdpdGggb25lIG9yIG1vcmUKKyAgICJob2xlcyIuCisgICAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG8gbm90IGZyZWUoKSAvIG1hbGxvYygpIHRoZSBtZW1vcnkKKyAgIGZvciBzdG9yaW5nCisgICB0aGUgY2FjaGVkIHZhbHVlIGlmIHRoZSB2YWx1ZSBoYXMgbm90IGJlZW4gbW9kaWZpZWQuCisgICAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogZG8gbm90IGZyZWUoKSAvIG1hbGxvYygpIHRoZSBtZW1vcnkKKyAgIGZvciBzdG9yaW5nCisgICB0aGUgY2FjaGVkIHZhbHVlIGlmIHRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIGhhcyBub3QgYmVlbgorICAgbW9kaWZpZWQuCisgICAtIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbjogaWYgdGhlIHNpemUgb2YgdGhlIGNhY2hlZCB2YWx1ZQorICAgc2hydW5rLCB1c2UKKyAgIHJlYWxsb2MoKSBpbnN0ZWFkIG9mIGZyZWUoKSBhbmQgbWFsbG9jKCkuCisKKzIwMDktMTItMjEgMTI6MjMgIGJ2YXNzY2hlCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBBcHBsaWVkIGEgc2xpZ2h0bHkgbW9kaWZpZWQgdmVyc2lvbiBvZiBwYXRjaCAjMjkxMjA1NTogbWFrZSBzdXJlCisgICB0aGF0CisgICBwYXJzaW5nIHRoZSAicGVyc2lzdGVudERpciIga2V5d29yZCBpbiBzbm1wLmNvbmYgZG9lcyBub3QgdHJpZ2dlcgorICAgYQorICAgZGFuZ2xpbmcgcG9pbnRlci4gVG8gbXkgc3VycHJpc2UgQm91bmRzQ2hlY2tlciBjb21wbGFpbmVkIGFib3V0CisgICB0aGlzCisgICAob24gV2luZG93cyksIGJ1dCBWYWxncmluZCBkaWQgbm90IHJlcG9ydCB0aGlzIGlzc3VlIChvbiBMaW51eCkuCisKKzIwMDktMTItMjEgMTI6MDggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jOgorCisgICBGb2xsb3ctdXAgZm9yIHIxNzkyNSAoZml4IG1lbW9yeSBsZWFrIGR1cmluZyBzdGFydHVwKTogd2hpbGUKKyAgIHIxNzkyNSBmaXhlZAorICAgb25seSB0aGUgbGVhayB0cmlnZ2VyZWQgZnJvbSBpbnNpZGUgdGhlIGZvci1sb29wLCB0aGlzIHBhdGNoIGRvZXMKKyAgIG5vdyBhbHNvCisgICBmaXggdGhlIGxlYWsgdHJpZ2dlcmVkIGJ5IHRoZSBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX3JvdygpCisgICBjYWxsIG5lYXIKKyAgIHRoZSBlbmQgb2YgbG9nX25vdGlmaWNhdGlvbigpLgorCisyMDA5LTEyLTIxIDEyOjAxICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgQXBwbGllZCBwYXRjaCAjMjkxMjA2MjogbWFrZSBzdXJlIHRoYXQgdGhlIHN0cmluZyByZXR1cm5lZCBieQorICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKSBpcyBwcm9wZXJseSB0ZXJtaW5hdGVkLCBzdWNoIHRoYXQKKyAgIHRoZQorICAgY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uIGRvIG5vdCB0cmlnZ2VyIHBhc3QtZW5kLW9mLWJ1ZmZlciByZWFkcy4KKyAgIEZvdW5kCisgICB0aGlzIGlzc3VlIHZpYSBCb3VuZHNDaGVja2VyLgorCisyMDA5LTEyLTIxIDExOjA2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYzoKKworICAgQXBwbGllZCBwYXRjaCAjMjkxMjA2OCwgd2hpY2ggZml4ZXMgYSBtZW1vcnkgbGVhayBkdXJpbmcgc3RhcnR1cC4KKyAgIFRoZQorICAgZnVuY3Rpb24gbG9nX25vdGlmaWNhdGlvbigpIGFkZHMgYSByb3cgdG8gdGhlIHRhYmxlCisgICBubG1Mb2dWYXJUYWJsZSwgYnV0CisgICB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgYmVmb3JlIHRoYXQgdGFibGUgaGFzIGJlZW4KKyAgIGluaXRpYWxpemVkLiBJZgorICAgdGhhdCBoYXBwZW5zLCBtZW1vcnkgaXMgYWxsb2NhdGVkIGZvciBhIHJvdyBidXQgdGhhdCBtZW1vcnkgaXMKKyAgIG5ldmVyCisgICBhZGRlZCB0byB0aGUgY2FjaGVkIHRhYmxlIGRhdGEuIFRoZSBCb3VuZHNDaGVja2VyIHRvb2wgcmVwb3J0ZWQKKyAgIHRoaXMgYXMKKyAgIGEgIm1lbW9yeSBsZWFrIGxlYXZpbmcgc2NvcGUiLgorCisyMDA5LTEyLTIxIDEwOjU0ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgQWRkZWQgdGhlIGZvbGxvd2luZyB0ZXh0IHRvIHRoZSAiTGltaXRhdGlvbnMiIHNlY3Rpb24gb2YKKyAgIFJFQURNRS53aW4zMjoKKyAgICJXaGVuIHVzaW5nIHdpbkV4dERMTCwgdGhlcmUgaXMgYW4gb2Zmc2V0IG9mIHVwIHRvIG9uZSBzZWNvbmQKKyAgIGJldHdlZW4gdGhlCisgICB2YWx1ZSBvZiB0aGUgc3lzVXBUaW1lIHZhcmJpbmQgaW5jbHVkZWQgaW4gdGhlIHRyYXBzIGdlbmVyYXRlZCBieQorICAgU05NUAorICAgZXh0ZW5zaW9uIERMTHMgKGUuZy4gbGlua1VwIGFuZCBsaW5rRG93bikgYW5kIHRoZSB2YWx1ZSBvZiB0aGUKKyAgIHN5c1VwVGltZQorICAgdmFyYmluZCBpbmNsdWRlZCBpbiB0cmFwcyBnZW5lcmF0ZWQgYnkgTmV0LVNOTVAgaXRzZWxmIChlLmcuCisgICBjb2xkU3RhcnQpLiIKKworMjAwOS0xMi0yMSAxMDowOSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsICAgCisgICAgICBzbm1wbGliL3NubXBfYWxhcm0uYzoKKworICAgU3BlbGxpbmcgZml4OiByZXBsYWNlZCBhbGwgb2NjdXJyZW5jZXMgb2YgJ3NwZWNpZmMnIGJ5CisgICAnc3BlY2lmaWMnLgorCisyMDA5LTEyLTIxIDEwOjA2ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9hbGFybS5jOgorCisgICBSZWZhY3RvcmluZzogZWxpbWluYXRlZCBkdXBsaWNhdGVkIGNvZGUgYnkgcmVpbXBsZW1lbnRpbmcKKyAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoKSB1c2luZyBzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyKCkuIE5laXRoZXIgdGhlCisgICBOZXQtU05NUCBBUEkgbm9yIHRoZSBiZWhhdmlvciBvZiBzbm1wX2FsYXJtX3JlZ2lzdGVyKCkgaGFzIGJlZW4KKyAgIGNoYW5nZWQuCisKKzIwMDktMTItMjAgMTE6MTAgIG1hZ2ZyCisKKyAgICogIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvYWdlbnR4dHJhcC5jLCBtYW4vTWFrZWZpbGUuaW4sICAgCisgICAgICBtYW4vYWdlbnR4dHJhcC4xLmRlZjoKKworICAgTkVXUzogYXBwczogQWRkIGNvbW1hbmQgdG8gc2VuZCBBZ2VudFggbm90aWZ5IHJlcXVlc3RzIHRvIGEKKyAgIG1hc3RlciBhZ2VudC4KKworMjAwOS0xMi0xNyAxNjo0NCAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTE3IC0tIGJ1aWxkcyBhZ2FpbiBvbiBXaW5kb3dzIHN5c3RlbXMuCisKKzIwMDktMTItMTcgMTY6MDMgIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3OTAzIC8gcGF0Y2ggMjkxMTMyMyAiRml4IGFnZW50IGxvY2t1cCB3aGVuCisgICBtb25pdG9yaW5nCisgICBBZ2VudFgtZGVsZWdhdGVkIGluZm9ybWF0aW9uIiAoc3VibWl0dGVkIGJ5IG15c2VsZikuIFRoYXQgcGF0Y2gKKyAgIGRpZCBub3Qgb25seQorICAgZml4IHRoZSBsb2NrdXAgYnV0IGFsc28gbWFkZSBzbm1wZCBwcmludCBhIHdhcm5pbmcgZHVyaW5nIHN0YXJ0dXAKKyAgIHdoZW4KKyAgIGlxdWVyeVNlY05hbWUgd2FzIG5vdCBjb25maWd1cmVkLiBUaGlzIHdhcm5pbmcgd2FzIHByaW50ZWQgZXZlbgorICAgd2hlbiBubworICAgaW50ZXJuYWwgcXVlcmllcyB3ZXJlIHBlcmZvcm1lZC4gVGhpcyB3YXJuaW5nIGlzIG5vdyBvbmx5IHByaW50ZWQKKyAgIGp1c3QgYmVmb3JlCisgICB0aGUgZmlyc3QgaW50ZXJuYWwgcXVlcnkgaXMgbWFkZSAoZHVyaW5nIHRoZSBmaXJzdCBjYWxsIG9mCisgICBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oKSBpbnN0ZWFkIG9mIGR1cmluZyBjcmVhdGlvbiBvZgorICAgdGhlIGludGVybmFsCisgICBzZXNzaW9uKS4KKworMjAwOS0xMi0xNyAxMzo1NSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jOgorCisgICBSTU9OIE1JQiBzb3VyY2UgY29kZSBjb21waWxlcyBhZ2FpbiAtLSBzaG91bGQgaGF2ZSBiZWVuIGluY2x1ZGVkCisgICBpbiByMTc5MTMuCisKKzIwMDktMTItMTcgMTM6MTggIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYywgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgTW9kaWZpZWQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoKSBhbmQKKyAgIEFHVVRJTF9zeXNfdXBfdGltZSgpIHN1Y2ggdGhhdCB0aGVzZSBmdW5jdGlvbnMgbm9ybWFsaXplIHRoZQorICAgdHZfdXNlYyBmaWVsZCBvZgorICAgc3RydWN0IHRpbWV2YWwgcHJvcGVybHkuIE5vdGU6IHRoaXMgc291cmNlIGNvZGUgbW9kaWZpY2F0aW9uIGRvZXMKKyAgIG5vdCBhZmZlY3QKKyAgIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGFmb3JlbWVudGlvbmVkIHR3byBmdW5jdGlvbnMuCisKKzIwMDktMTItMTcgMTM6MTEgIGJ2YXNzY2hlCisKKyAgICogbWFuL25ldHNubXBfdXRpbC4zOgorCisgICBSZW1vdmVkIGRvY3VtZW50YXRpb24gb2YgdGhlIERJRkZUSU1FVkFMKCkgbWFjcm8gLS0gc2hvdWxkIGhhdmUKKyAgIGJlZW4gaW5jbHVkZWQKKyAgIGluIHIxNzkxMy4KKworMjAwOS0xMi0xNyAxMzowNSAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCBhZ2VudC9zbm1wX2FnZW50LmMsICAgCisgICAgICBhZ2VudC9zbm1wX3ZhcnMuYywgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hbGFybS5jLCBzbm1wbGliL3N5c3RlbS5jLCBzbm1wbGliL3Rvb2xzLmMsICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIENvbnZlcnRlZCBzdGFydHRpbWUgZnJvbSBhIGdsb2JhbCB2YXJpYWJsZSBpbnRvIGEgc3RhdGljIHZhcmlhYmxlCisgICBhbmQgYXBwbGllZCB0aGUgZm9sbG93aW5nIGNoYW5nZXM6CisgICAtIEFkZGVkIHR3byBuZXcgbWFjcm9zOiBORVRTTk1QX1RJTUVSQUREKCkgYW5kCisgICBORVRTTk1QX1RJTUVSU1VCKCkuCisgICAtIEFkZGVkIHRocmVlIG5ldyBmdW5jdGlvbnM6IG5ldHNubXBfZ2V0X3N0YXJ0dGltZSgpLAorICAgbmV0c25tcF9zZXRfc3RhcnR0aW1lKCkgYW5kIGF0aW1lX2hzdWJ0cmFjdCgpLgorICAgLSBSZXBsYWNlZCBnZXR0aW1lb2ZkYXkoKSArIGNhbGN1bGF0ZV90aW1lX2RpZmYoKSBjYWxscyBieSBhIGNhbGwKKyAgIHRvIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpLgorICAgLSBSZW1vdmVkIHRoZSBtYWNybyBESUZGVElNRVZBTCgpIGJlY2F1c2UgaXQgd2FzIG5vdCB1c2VkIGluc2lkZQorICAgdGhlIE5ldC1TTk1QIHByb2plY3QgYW5kIGJlY2F1c2UgaXQgY29udGFpbmVkIGEgYnVnLgorICAgLSBSZW1vdmVkIHRoZSBmdW5jdGlvbnMgY2FsY3VsYXRlX3RpbWVfZGlmZigpLCB1YXRpbWVfcmVhZHkoKSwKKyAgIG1hcmtlcl90dGlja3MoKSBhbmQgdGltZXZhbF90dGlja3MoKS4KKworMjAwOS0xMi0xNyAxMjo0NCAgYnZhc3NjaGUKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgorCisgICBCdWcgZml4OiBhY2NvcmRpbmcgdG8gUkZDIDI1NzEgdGhlIHVuaXQgb2Ygc25tcEVuZ2luZVRpbWUgaXMgb25lCisgICBzZWNvbmQsCisgICBub3Qgb25lIGh1bmRyZWR0aCBvZiBhIHNlY29uZC4KKworMjAwOS0xMi0xNyAxMDowMyAgZHRzMTIKKworICAgKiBtYW4vc25tcHRlc3QuMS5kZWY6CisKKyAgIEZpeCB0eXBvLgorCisyMDA5LTEyLTE2IDEyOjMwICBidmFzc2NoZQorCisgICAqICBzbm1wbGliL3Rvb2xzLmMsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbmRvd3Mtb25seSBidWcgZml4ZXM6CisgICAtIEZpeGVkIHRoZSBzdHJhbmdlIGJ1aWxkIGVycm9ycyB0aGF0IG9jY3VycmVkIHdoZW4gY29tcGlsaW5nCisgICBsaWJuZXRzbm1wIGFzIGEgRExMIGFuZCB3aGVuIGVpdGhlciA8c3RkbGliLmg+IG9yIDxzdHJpbmcuaD4gd2FzCisgICBpbmNsdWRlZCBhZnRlciA8bmV0LXNubXAtY29uZmlnLmg+IGluc3RlYWQgb2YgYmVmb3JlLgorICAgLSBGb3IgZGVidWcgYnVpbGRzIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8sIGZpeGVkIHRoZQorICAgbWlzbWF0Y2hlcyBiZXR3ZWVuIHRoZSBfbWFsbG9jX2RiZygpIGNhbGwgaW52b2tlZCBieSBzdHJkdXAoKSBhbmQKKyAgIGZyZWUoKS1pbmcgc3RyZHVwKCktZWQgbWVtb3J5IGJ5IGluY2x1ZGluZyB0aGUgPGNydGRiZy5oPiBoZWFkZXIKKyAgIGluIHRvb2xzLmMgYW5kIGJ5IGRlZmluaW5nIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9sCisgICBfQ1JUREJHX01BUF9BTExPQy4gRGV0ZWN0ZWQgdmlhIHRoZSBtZW1vcnkgY2hlY2tlciBpbmNsdWRlZCBpbgorICAgSW50ZWwgUGFyYWxsZWwgU3R1ZGlvLgorCisyMDA5LTEyLTE0IDE3OjIzICB0YW5kZXJzCisKKyAgICogIHBlcmwvYWdlbnQvYWdlbnQueHMsIHNubXBsaWIvc25tcFRDUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIHN5bmMgZGVmaW5pdGlvbiBvZiBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgaW4gUGVybCB3aXRoIHRoZSBjaGFuZ2VzCisgICBpbgorICAgcjE3ODU1IGFuZCByMTc5MDgKKworMjAwOS0xMi0xNCAxMzo1NSAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wVENQRG9tYWluLmM6CisKKyAgIEZpeCBUQ1AgdHJhbnNwb3J0IGJyb2tlbiBieSByZXYuIDE3ODU1IC0gY29waWVzIG9mCisgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgaW4gc25tcFRDUERvbWFpbi5jIGFuZCBzbm1wVURQRG9tYWluLmMgbXVzdAorICAgYmUgdGhlIHNhbWUuCisKKzIwMDktMTItMTEgMTQ6NDMgIGhhcmRha2VyCisKKyAgICogYXBwcy9zbm1wdXNtLmMsIG1hbi9zbm1wdXNtLjEuZGVmOgorCisgICBDSEFOR0VTOiBzbm1wdXNtOiBwYXRjaCBmcm9tIE1hcnRpbiBCam9ya2x1bmQgdG8gYWRkIGEgLUN3IG9wdGlvbgorICAgdG8gdXNlIGNyZWF0ZUFuZFdhaXQgZm9yIGFnZW50cyB0aGF0IGFyZSBzdHJpY3QgYWJvdXQgbm90CisgICBhbGxvd2luZyBhIHJvdyB0byBiZSBzZXQgdG8gYWN0aXZlIHVudGlsIHRoZSBhdXRoZW50aWNhdGlvbgorICAgcGFzc3dvcmQgaGFzIGJlZW4gY2hhbmdlZDsgcGx1cyB3aGl0ZS1zcGFjZSBjbGVhbiB1cCwgbWFudWFsCisgICBhZGRpdGlvbnMgYW5kIGhlbHAgb3V0cHV0IG1vZGlmaWNhdGlvbnMgYnkgaGFyZGFrZXIKKworMjAwOS0xMi0xMSAxNDozNSAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZyBhYm91dCBhIGZvcm1hdCBzcGVjaWZpZXIgbWlzbWF0Y2guCisKKzIwMDktMTItMTEgMTQ6MDYgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgd2luRXh0RExMIGJ1Z3MgZml4ZWQ6CisgICAtIHN5c1VwVGltZS4wIGRvZXMgbm93IHJlcG9ydCB0aGUgY29ycmVjdCB2YWx1ZS4KKyAgIC0gYSBsaW5rVXAgb3IgbGlua0Rvd24gdHJhcCBpcyBub3cgc2VudCBhZnRlciB0aGUgc3RhdHVzIG9mIGEKKyAgIG5ldHdvcmsgaW50ZXJmYWNlCisgICBoYXMgY2hhbmdlZC4KKyAgIC0gdGhlIHZhbHVlIG9mIHRoZSBzeXNVcFRpbWUuMCB2YXJiaW5kIGluIGxpbmtVcCBhbmQgbGlua0Rvd24KKyAgIHRyYXBzIGlzIG5vdworICAgY29ycmVjdC4KKworMjAwOS0xMi0xMCAxNTo1MiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIRVM6IDI5MTE5NzA6IFByb3Blcmx5IHRlcm1pbmF0ZSBsaW5rZWQgbGlzdAorICAgb2YgcmVnaXN0cmF0aW9ucy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1pcmtvIERlY2tlcnQuCisKKzIwMDktMTItMTAgMTU6NDMgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDI5MTEzMjM6IEZpeCBhZ2VudCBsb2NrdXAgd2hlbgorICAgbW9uaXRvcmluZyBBZ2VudFgtZGVsZWdhdGVkIGluZm9ybWF0aW9uCisKKzIwMDktMTItMTAgMTM6NTkgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBDaGFuZ2VzOgorICAgLSBBZGRlZCBpbmZvcm1hdGlvbiBhYm91dCBNaWNyb3NvZnQncyBpbXBsZW1lbnRhdGlvbiBvZgorICAgaHJTeXN0ZW1VcHRpbWUuMC4KKyAgIC0gRml4ZWQgYSBmZXcgdHlwb3MuCisKKzIwMDktMTItMTAgMTM6MDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKKworICAgQWRkZWQgbWlzc2luZyBuZXdsaW5lIGluIGEgbG9nZ2luZyBzdGF0ZW1lbnQuCisKKzIwMDktMTItMTAgMTI6NTQgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIEZpeGVkIHRoZSBmb2xsb3dpbmcgd2luRXh0RExMIGJ1Z3M6CisgICAtIEZpeGVkIGJ1ZyBpbiB0cmFwIGZvcndhcmRpbmc6IGxpbmtEb3duIHRyYXBzIHdlcmUgc2VudCBhcworICAgd2FybVN0YXJ0IHRyYXBzCisgICBhbmQgbGlua1VwIHRyYXBzIHdlcmUgc2VudCBhcyBsaW5rRG93biB0cmFwcy4KKyAgIC0gRml4ZWQgYSBtZW1vcnkgbGVhayB0cmlnZ2VyZWQgYnkgZXh0ZW5zaW9uIERMTCBsb2FkaW5nLgorICAgLSBBIGRlYnVnIHRyYWNlIHN0YXRlbWVudCBpcyBub3cgaW52b2tlZCB3aGVuZXZlciBhIHNlcmlvdXMgZXJyb3IKKyAgIGhhcyBiZWVuCisgICBkZXRlY3RlZC4KKworMjAwOS0xMi0xMCAxMjozNyAgYnZhc3NjaGUKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgT0lEcyBpbiBkZWJ1ZyBtZXNzYWdlcyBnZW5lcmF0ZWQgYnkgdGhlIHdpbkV4dERMTCBtb2R1bGUgYXJlIG5vdworICAgcHJpbnRlZCBpbgorICAgc3ltYm9saWMgZm9ybSBpbnN0ZWFkIG9mIG51bWVyaWMgZm9ybS4KKworMjAwOS0xMi0xMCAwODo1NyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi93aW4zMnNkay5kc3c6CisKKyAgIFByb2plY3QgZGVwZW5kZW5jaWVzIHNob3VsZCBub3cgcmVhbGx5IGJlIGNvcnJlY3QuIFNob3VsZCBoYXZlCisgICBiZWVuIGluY2x1ZGVkCisgICBpbiByMTc4NzMuCisKKzIwMDktMTItMTAgMDg6NDEgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIENoYW5nZXMgKG9ubHkgc291cmNlIGNvZGUgY29tbWVudHMgaGF2ZSBiZWVuIGNoYW5nZWQpOgorICAgLSBSZW1vdmVkIGEgbm90ZSB0aGF0IGNvbnRyYWRpY3RlZCB0aGUgaW5zdHJ1Y3Rpb25zIGluCisgICBSRUFETUUud2luMzIuCisgICAtIFVwZGF0ZWQgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFmdGVyIHRoZSBhZGRpdGlvbiBvZiB0aGUgZmlsZQorICAgd2luMzIvU25tcC13aW5FeHRETEwuaCBpbiByMTc4MzAuCisKKzIwMDktMTItMTAgMDg6MTcgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wZGYuYywgYXBwcy9zbm1wc3RhdHVzLmM6CisKKyAgIE1hZGUgZmlsZSBoZWFkZXIgY29tbWVudHMgY29uc2lzdGVudCB3aXRoIHRoZSBkZXNjcmlwdGlvbnMgaW4gdGhlCisgICByZXNwZWN0aXZlIG1hbiBwYWdlcy4KKworMjAwOS0xMi0xMCAwMzowNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKKworICAgTWFkZSBzdXJlIHRoYXQgYWdlbnRfc3lzT1JfY2FsbGJhY2sgd29uJ3QgdHJpZ2dlciBhIHdhcm5pbmcgd2hlbgorICAgcmVnaXN0ZXJlZCBhcyBhIGNhbGxiYWNrLiBDaGFuZ2UgYWdlbnR4X3Jlb3Blbl9zeXNPUlRhYmxlIGluCisgICBvcmRlciB0byBhdm9pZCB3YXJuaW5ncyBvZiBjb25zdCByZW1vdmFsLgorCisyMDA5LTEyLTA5IDE1OjA1ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6CisKKyAgIC0gTW92ZWQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSB2YXJpYWJsZSAnbmV3bGluZScgaW5zaWRlIHRoZQorICAgZnVuY3Rpb24KKyAgIGxvZ19oYW5kbGVyX3N0ZG91dGVycigpIGJlY2F1c2UgdGhpcyB2YXJpYWJsZSBpcyBvbmx5IHVzZWQgYnkKKyAgIHRoYXQgZnVuY3Rpb24uCisgICAtIERvY3VtZW50ZWQgdGhlIHB1cnBvc2Ugb2YgdGhlIHZhcmlhYmxlICduZXdsaW5lJy4KKyAgIC0gQnVnIGZpeDogbWFkZSBzdXJlIHRoYXQgdGhlIGNhbGwgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCkgZG9lcworICAgbm90IHRyaWdnZXIgYW4KKyAgIGludmFsaWQgbWVtb3J5IGFjY2VzcyAoc3RyWy0xXSkgd2hlbiBhbiBlbXB0eSBzdHJpbmcgaXMgcGFzc2VkIHRvCisgICB0aGlzIGZ1bmN0aW9uLgorCisyMDA5LTEyLTA5IDE0OjM3ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBzdXBwb3J0IG9mIG5ldHdvcmsgaW50ZXJmYWNlcyB3aXRoIEhXIGFkZHJlc3MKKyAgIGJpZ2dlciB0aGFuIDYgYnl0ZXMgdG8gaXBOZXRUb01lZGlhVGFibGUgYW5kCisgICBpcE5ldFRvUGh5c2ljYWxUYWJsZS4KKyAgIFNvbWUgSFcsIGxpa2UgSW5maW5pQmFuZCwgdXNlcyBIVyBhZGRyZXNzZXMgd2l0aCA5IGFuZCBtb3JlCisgICBieXRlcy4gU25tcGQgb24gTGludXggd2FzIG5vdCBhYmxlIHRvIHBhcnNlIC9wcm9jL25ldC9hcnAgdGhlbgorICAgYW5kIHByb2R1Y2VkIHVnbHkgJ2lvY3RsIDM1MTIzIHJldHVybmVkIC0xJyB0byBsb2cuCisKKzIwMDktMTItMDkgMTI6MjcgIGJ2YXNzY2hlCisKKyAgICogUkVBRE1FLndpbjMyOgorCisgICBBZGRlZCBtaXNzaW5nIC1MbyBpbiBhIGNvbW1hbmQgbGluZSBleGFtcGxlLgorCisyMDA5LTEyLTA5IDEyOjE2ICBidmFzc2NoZQorCisgICAqIHdpbjMyL3NubXBkc2RrL3NubXBkLmRzcDoKKworICAgQWRkZWQgc25tcGFwaS5saWIgdG8gdGhlIGxpbmtlciBpbnB1dCBsaXN0IG9mIHNubXBkLmV4ZS4KKyAgIEFwcGFyZW50bHkgVmlzdWFsCisgICBTdHVkaW8gMjAwNSBhbmQgMjAwOCBuZWVkIHRoaXMgbGlicmFyeSBpbiB0aGUgbGlua2VyIGlucHV0IGxpc3QKKyAgIHdoZW4gbGlua2luZworICAgdGhlIGV4ZSwgd2hpbGUgZm9yIFZpc3VhbCBTdHVkaW8gNiBpdCBpcyBzdWZmaWNpZW50IHdoZW4gdGhpcworICAgbGlicmFyeSBpcworICAgcHJlc2VudCBpbiB0aGUgbGlua2VyIGlucHV0IGxpc3Qgb2YgbmV0c25tcG1pYnMubGliLgorCisyMDA5LTEyLTA5IDA4OjQ1ICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgVXBkYXRlZCBSRUFETUUud2luMzI6IGJlY2F1c2Ugb2YgcjE3ODg0IGFuZCByMTc4NzMsIHRoZSBidWlsZAorICAgcHJvY2VzcyBiZWNhbWUgc2ltcGxlci4KKworMjAwOS0xMi0wOSAwODoyMiAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgRXhwb3J0IHN0cnRvdWxsIC0tIHNob3VsZCBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gcjE3ODg2LgorCisyMDA5LTEyLTA5IDA4OjIxICBidmFzc2NoZQorCisgICAqIFJFQURNRS53aW4zMjoKKworICAgUmV2ZXJ0ZWQgcjE3NzAwIGZvciBSRUFETUUud2luMzI6IGJlY2F1c2Ugb2YgcjE3ODg2LCBtb2RpZnlpbmcKKyAgIHRoZQorICAgc3RydG91bGwgbGluZSBpbiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiBpcyBubyBsb25nZXIKKyAgIG5lY2Vzc2FyeS4KKworMjAwOS0xMi0wOSAwODoxMiAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgCisgICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbmRvd3M6IHN3aXRjaGVkIGZyb20gX3N0cnRvdWk2NCgpIHRvIHN0cnRvdWxsKCkgZm9yIE1pY3Jvc29mdAorICAgVmlzdWFsIFN0dWRpbworICAgMjAwMiBhbmQgbGF0ZXIgYmVjYXVzZSB0aGUgZm9ybWVyIGlzIG5vdCBmdWxseSBQT1NJWCBjb21wbGlhbnQuCisgICBUaGUgc3RydG91bGwoKQorICAgdW5pdCB0ZXN0IHByb2R1Y2VzIHRoZSBmb2xsb3dpbmcgb3V0cHV0IGZvciBfc3RydG91aTY0KCkgd2l0aAorICAgTVNWQyAyMDA4OgorICAgdGVzdCAxNCBmYWlsZWQgKGlucHV0ICIweCIpOiBleHBlY3RlZCBlbmQgMSwgZ290IGVuZCAwCisgICB0ZXN0IDE2IGZhaWxlZCAoaW5wdXQgIjB4Iik6IGV4cGVjdGVkIGVuZCAxLCBnb3QgZW5kIDAKKworMjAwOS0xMi0wOCAyMTo1NCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkOiBNYWtlIHN1cmUgdGhhdCBhIG1hc2sgaXMgZ2l2ZW4gdG8gb3BlbgorICAgd2hlbiBPX0NSRUFUIGlzIHNwZWNpZmllZAorCisyMDA5LTEyLTA4IDE2OjIwICBidmFzc2NoZQorCisgICAqIHdpbjMyL3dpbjMyLmRzdzoKKworICAgTWFkZSBkZXBlbmRlbmNpZXMgYmV0d2VlbiBleGUncyBhbmQgbGliJ3MgZXhwbGljaXQgc3VjaCB0aGF0CisgICBWaXN1YWwKKyAgIFN0dWRpbyBjYW4gZmlndXJlIG91dCB0aGUgcHJvcGVyIGJ1aWxkIG9yZGVyIGluc3RlYWQgb2YgdGhlIHVzZXIKKyAgIGhhdmluZworICAgdG8gZmlndXJlIHRoaXMgb3V0LgorCisyMDA5LTEyLTA4IDE1OjQ3ICBidmFzc2NoZQorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIEJ1aWxkcyBhZ2FpbiBvbiBVbml4IHN5c3RlbXMgKGZpeGVkIGEgdHlwbyBpbnRyb2R1Y2VkIGluIHIxNzg4MSkuCisKKzIwMDktMTItMDggMTU6MzcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwOgorCisgICBBZGRlZCBtaXNzaW5nICNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsuIFdpdGhvdXQgdGhpcworICAgZGVmaW5lIHRoZSBNaWNyb3NvZnQKKyAgIFZpc3VhbCBTdHVkaW8gY29tcGlsZXIgY29tcGxhaW5zIGFib3V0IGEgYmVuaWduIHJlZGVmaW5pdGlvbiBvZgorICAgdHlwZSBzb2NrbGVuX3QuCisKKzIwMDktMTItMDggMTU6MjggIGJ2YXNzY2hlCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdGFibGUuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKKworICAgQ2xlYW5lZCB1cCB0aGUgY29kZSBmb3Igc2V0dGluZyBsaW5lIGJ1ZmZlcmluZzoKKyAgIC0gSW5zdGVhZCBvZiBoYXZpbmcgY2FsbHMgdG8gc2V0dmJ1ZigpIGluIG11bHRpcGxlIGZpbGVzLCB0aGVyZQorICAgaXMgbm93IG9uZSBjYWxsCisgICB0byBzZXR2YnVmKCkgZnJvbSB0aGUgbmV3IGZ1bmN0aW9uIG5ldHNubXBfc2V0X2ZpbGVsb2cuIFRoZXNlCisgICBzb3VyY2UgZmlsZXMKKyAgIGFyZTogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgYWdlbnQvc25tcGQuYywgYXBwcy9zbm1wdHJhcGQuYywKKyAgIGFwcHMvc25tcHRhYmxlLmMKKyAgIGFuZCBhZ2VudFxtaWJncm91cFxkaXNtYW5cdHJhY2Vyb3V0ZVx0cmFjZVJvdXRlQ3RsVGFibGUuYy4KKyAgIC0gVXNpbmcgLUxvIC8gLUxlIGRvZXMgbm93IGVuYWJsZSBsaW5lIGJ1ZmZlcmluZyBmb3Igc3Rkb3V0IC8KKyAgIHN0ZGVyciByZXNwZWN0aXZlbHkuCisgICAtIFJlbW92ZWQgY29kZSBpbiBzbm1wZC5jIGFuZCBzbm1wdHJhcGQuYyBmb3Igc2V0dGluZyBsaW5lCisgICBidWZmZXJpbmcgb24gc3Rkb3V0CisgICBzaW5jZSBzZXR0aW5nIGxpbmUgYnVmZmVyaW5nIG9uIHN0ZG91dCBpcyBub3cgdHJpZ2dlcmVkIGJ5IHRoZQorICAgY29tbWFuZC1saW5lCisgICBvcHRpb24gLUxvLgorICAgQnVncyBmaXhlZDoKKyAgIC0gTGluZSBidWZmZXJpbmcgbW9kZSBpcyBub3cgYWxzbyBzZXQgZm9yIHN0ZGVyciB3aGVuIHRoZQorICAgY29tbWFuZC1saW5lIG9wdGlvbgorICAgLUxlIGhhcyBiZWVuIHNwZWNpZmllZC4KKyAgIC0gTGluZSBidWZmZXJpbmcgbW9kZSBpcyBub3cgc2V0IGNvcnJlY3RseSBmb3Igc3Rkb3V0IG9uIFdpbmRvd3MKKyAgIHN5c3RlbXMKKyAgIChjb21tYW5kLWxpbmUgb3B0aW9uIC1MbykuCisKKzIwMDktMTItMDggMTI6MzIgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBGaXhlZCBhIGNvbXBpbGVyIHdhcm5pbmcgYWJvdXQgbG9jYWwgdmFyaWFibGVzIHRoYXQgd2VyZSBkZWZpbmVkCisgICBidXQKKyAgIG5vdCB1c2VkIGJ5IG9ubHkgZW5hYmxpbmcgdGhlIGxvY2FsIHZhcmlhYmxlIGRlZmluaXRpb25zIG9uIHRoZQorICAgcGxhdGZvcm0gdGhhdCB1c2VzIHRoZXNlIHZhcmlhYmxlcyAoTGludXgpLgorCisyMDA5LTEyLTA4IDEyOjI2ICBidmFzc2NoZQorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKKworICAgQWRkZWQgI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIuIEZpeGVzIGEgY29tcGlsZXIgd2FybmluZy4KKworMjAwOS0xMi0wOCAxMjoyNSAgYnZhc3NjaGUKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L21haW4uYzoKKworICAgSW5jbHVkZSB0aGUgZ2V0aG9zdGVudCgpIC8gc2V0aG9zdGVudCgpIGRlY2xhcmF0aW9ucyBiZWZvcmUgdXNpbmcKKyAgIHRoZXNlCisgICBmdW5jdGlvbnMuIEZpeGVzIGEgY29tcGlsZXIgd2FybmluZyBvbiBXaW5kb3dzIHN5c3RlbXMuCisKKzIwMDktMTItMDggMTI6MTEgIGJ2YXNzY2hlCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgRml4ZWQgYW4gaW5jb25zaXN0ZW5jeSAod2hpY2ggaXMgYWxsb3dlZCBieSB0aGUgQU5TSSBDIHN0YW5kYXJkKQorICAgYmV0d2VlbgorICAgZnVuY3Rpb24gZGVjbGFyYXRpb24gYW5kIGZ1bmN0aW9uIGRlZmluaXRpb24gb2YKKyAgIG5ldHNubXBfYWRkX2dsb2JhbF90cmFwaGFuZGxlciBhbmQKKyAgIG5ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIgc3VjaAorICAgdGhhdCB0aGUgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gY29tcGlsZXIgZG9lcyBubyBsb25nZXIgY29tcGxhaW4KKyAgIGFib3V0CisgICB0aGlzLgorCisyMDA5LTEyLTA4IDEyOjA4ICBidmFzc2NoZQorCisgICAqIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6CisKKyAgIEZpeGVkIGEgY29tcGlsZXIgd2FybmluZzogbWFkZSBzdXJlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXMgbm90CisgICBjb21wbGFpbiBhYm91dCBpbXBsaWNpdGx5IGNhc3RpbmcgYXdheSBjb25zdG5lc3MuCisKKzIwMDktMTItMDggMTI6MDcgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIE9ubHkgY29tcGlsZSB0aGUgd2luRXh0RExMIHNvdXJjZSBjb2RlIGlmIHRoZSBwcmVwcm9jZXNzb3IgbWFjcm8KKyAgIFVTSU5HX1dJTkVYVERMTF9NT0RVTEUgaGFzIGJlZW4gZGVmaW5lZC4KKworMjAwOS0xMi0wOCAxMjowMyAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwOgorCisgICBBZGRlZCBtaXNzaW5nICNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsuCisKKzIwMDktMTItMDggMTI6MDEgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvd2luMzJzZGsuZHN3OgorCisgICBNYWRlIGRlcGVuZGVuY2llcyBiZXR3ZWVuIGV4ZSdzIGFuZCBsaWIncyBleHBsaWNpdCBzdWNoIHRoYXQKKyAgIFZpc3VhbAorICAgU3R1ZGlvIGNhbiBmaWd1cmUgb3V0IHRoZSBwcm9wZXIgYnVpbGQgb3JkZXIgaW5zdGVhZCBvZiB0aGUgdXNlcgorICAgaGF2aW5nCisgICB0byBmaWd1cmUgb3V0IHRoZSBidWlsZCBvcmRlci4KKworMjAwOS0xMi0wOCAwOTo0NiAgYnZhc3NjaGUKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luZG93cyAvIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvOiBkaXNhYmxlZCB0aGUgY29tcGlsZXIgd2FybmluZworICAgYWJvdXQKKyAgIHNpZ25lZC91bnNpZ25lZCBtaXNtYXRjaGVzICg0MDE4KSBiZWNhdXNlIHRoaXMgd2FybmluZyBkb2VzIG5vdAorICAgeWllbGQKKyAgIGFueSB1c2VmdWwgaW5mb3JtYXRpb24uCisKKzIwMDktMTItMDggMDk6MTcgIGJ2YXNzY2hlCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIEZvbGxvdy11cCBmb3IgcjE3NjM5IChwYXRjaCAyNzgwNDExIC0tIGZpeCBjb21waWxlciB3YXJuaW5ncyk6CisgICBhcHBsaWVkCisgICB0aGlzIHBhdGNoIHRvIG5ldC1zbm1wLWNvbmZpZy5oLmluIHRvbyBzdWNoIHRoYXQKKyAgIG5ldC1zbm1wLWNvbmZpZy5oIGFuZAorICAgbmV0LXNubXAtY29uZmlnLmguaW4gbWF0Y2ggYWdhaW4uCisKKzIwMDktMTItMDggMDg6MTYgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIE1hZGUgc3VyZSB0aGF0IGFnZW50eF9zeXNPUl9jYWxsYmFjaygpIGRvZXMgbm90IHRyaWdnZXIgYQorICAgY29tcGlsZXIKKyAgIHdhcm5pbmcgd2hlbiB0aGUgdGhpcmQgYXJndW1lbnQgcGFzc2VkIHRvIHRoaXMgZnVuY3Rpb24gaGFzIGJlZW4KKyAgIGRlY2xhcmVkIGNvbnN0LgorCisyMDA5LTEyLTA4IDA4OjE0ICBidmFzc2NoZQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaDoKKworICAgQ2hhbmdlZCB0aGUgcmV0dXJuIHR5cGUgb2Ygc3RydG91bGwoKSBmcm9tICd1bnNpZ25lZCBsb25nIGxvbmcnCisgICAod2hpY2gKKyAgIGlzIG5vdCB2YWxpZCBDODkpIHRvICd1aW50NjRfdCcgKGRlY2xhcmVkIGluCisgICA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+KS4KKyAgIFRoaXMgY2hhbmdlIG1ha2VzIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBjb21waWxlIGFnYWluIHdpdGgKKyAgIE1TVkMgNi4wLgorCisyMDA5LTEyLTA3IDEwOjQ2ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIFR3ZWFrIG1pc3Npbmcgc3ViaWRlbnRpZmllciBwcm9jZXNzaW5nIHRvIGJlIG1vcmUgdHlwZS1hd2FyZS4KKyAgIChBbiBpc3N1ZSB3aXRoIEFJWCwgYXQgbGVhc3QpCisKKzIwMDktMTItMDYgMTg6MzggIG1hZ2ZyCisKKyAgICogIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IE1ha2UgdGhlIGxpc3RzIG9mIGNvbTJTZWMqRW50cmllcyBzdGF0aWMKKworMjAwOS0xMi0wNiAxODozNCAgbWFnZnIKKworICAgKiAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgTWFrZSB0aGUgaXRlcmF0b3IgdmFyaWFibGUgaW4gbmV0c25tcF8qX2dldFNlY05hbWUgY29uc3QKKworMjAwOS0xMi0wNiAxODoyOSAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IENoYW5nZSB0aGUgdHlwZXMgb2YgdGhlIHJldHVybiB2YWx1ZXMgb2YKKyAgIG5ldHNubXBfKl9nZXRTZWNOYW1lIGZyb20gY2hhciogdG8gY29uc3QgY2hhciogc2luY2UgdGhleSBwb2ludAorICAgaW50byBpbnRlcm5hbCBzdHJ1Y3R1cmVzLgorCisyMDA5LTEyLTA1IDIwOjE5ICB0YW5kZXJzCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oOgorCisgICBmaXggZGVjbGFyYXRpb24gb2Ygc3RydG91bGwKKworMjAwOS0xMi0wNSAxNzo0MiAgdGFuZGVycworCisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBjYWxsIG5ldHNubXBfcmVhZF9tb2R1bGUgaW5zdGVhZCBvZiByZWFkX21vZHVsZSB0byBtYWtlIGl0CisgICBjb21waWxlIHdpdGgKKyAgIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCisKKzIwMDktMTItMDIgMTU6MzkgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBGaXhlZCBpbnZhbGlkIGFjY2VzcyB0byBtZW1vcnkgaW4gVENQLU1JQgorICAgVGhpcyBwYXJ0bHkgcmV2ZXJ0cyBwYXRjaCAxNzcxOSAtIHRoZSBlbnRyaWVzICphcmUqIHVzZWQgYWZ0ZXIKKyAgIHJhd19kYXRhIGNvbnRhaW5lciBpcyBmcmVlZC4gVGhlc2UgZW50cmllcyBzaG91bGQgYmUgZnJlZWQgd2hlbgorICAgYXNzb2NpYXRlZCByb3dyZXFfY3R4IGlzIGZyZWVkLgorCisyMDA5LTEyLTAyIDA4OjMwICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgdWRwVGFibGUgaW5kZXhlcyBvbiBiaWctZW5kaWFuIDY0Yml0IExpbnV4LgorICAgVGhlIGluZGV4IHdhcyBhbHdheXMgJzAuMC4wLjAnIGluc3RlYWQgb2YgcmVhbCBsb2NhbCBJUCBhZGRyZXNzLgorCisyMDA5LTEyLTAxIDEyOjM2ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgVXBkYXRlIGEgcmVkdW5kYW50IChhbmQgcHJvYmFibHkgaW5hY2N1cmF0ZSkgY29tbWVudC4KKworMjAwOS0xMi0wMSAxMjozMSAgZHRzMTIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODIyMzYwOiBGaXggbWVtb3J5IGxlYWsgd2hlbiBidWlsZGluZworICAgdGFibGUgT0lEcworCisyMDA5LTEyLTAxIDEyOjA4ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIENIQU5HRVM6IHNubXB0YWJsZTogQlVHUzogMjgzNzk5ODogSGFuZGxlIG1pc3NpbmcgaW5zdGFuY2UKKyAgIHN1YmlkZW50aWZpZXJzIGluIHJlc3VsdHMKKworMjAwOS0xMi0wMSAxMTo1NiAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODQxMDA4OiBQcm90ZWN0IGFnYWluc3QgY3Jhc2ggZm9sbG93aW5nCisgICBmYWlsZWQgQWdlbnRYIHJlc3BvbnNlCisKKzIwMDktMTItMDEgMDc6MzQgIGpzYWZyYW5laworCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCAgIAorICAgICAgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRml4IHJlc3BvbmRpbmcgdG8gYnJvYWRjYXN0IHJlcXVlc3RzLgorICAgVURQIHJlc3BvbnNlcyBhcmUgc2VudCB3aXRoIHNvdXJjZSBJUCBhZGRyZXNzIHdoaWNoIHdhcworICAgZGVzdGluYXRpb24gb2YKKyAgIGFwcHJvcHJpYXRlIHJlcXVlc3RzIChpbXBsZW1lbnRlZCBpbiBTVk4gcmV2LiAxNTIxNSkuIEJ1dCBpZiB0aGUKKyAgIGRlc3RpbmF0aW9uCisgICBvZiBhIHJlcXVlc3QgaXMgYnJvYWRjYXN0IElQIGFkZHJlc3MsIHRoZSByZXF1ZXN0IHdhcyBzZW50IHdpdGgKKyAgIHRoZSBicm9hZGNhc3QKKyAgIGFkZHJlc3MgYXMgc291cmNlLiBzZW5kbXNnKCkgb24gTGludXggZG9lcyBub3Qgc3VwcG9ydCB0aGlzIGFuZAorICAgcmV0dXJucyBlcnJvcgorICAgLT4gcmVzcG9uc2UgaXMgbm90IHNlbnQuIEluIG9yZGVyIHRvIHNlbmQgcmVzcG9uc2VzIGZyb20gdGhlIHNhbWUKKyAgIGludGVyZmFjZSwKKyAgIGludGVyZmFjZSBpbmRleCBvZiB0aGUgYXBwcm9wcmlhdGUgaW50ZXJmYWNlIG11c3QgYmUgdXNlZC4KKworMjAwOS0xMi0wMSAwMDoyOSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYWN0dWFsbHkgY29tcGlsZSBhZnRlciAxNzg1Mi4KKworMjAwOS0xMi0wMSAwMDoyNCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYWN0dWFsbHkgY29tcGlsZSBhZnRlciAxNzg0Mi4KKworMjAwOS0xMS0zMCAxNjo1NSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBCVUdTOiAyODczODU4OiBGaXggaGFuZGxpbmcgb2Ygc2NoZWRPd25lciBpbmRleC4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1heCBTY2h1YmVydC4KKworMjAwOS0xMS0zMCAxNjo0NiAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5vbGQtYXBpLmNvbmY6CisKKyAgIENIQU5HRVM6IG1pYjJjOiBCVUdTOiAyODg4NTY5OiBGaXggZ2VuZXJhdGlvbiBvZiB0YWJsZSBjb2x1bW5zCisgICBhcnJheQorCisyMDA5LTExLTMwIDE2OjMwICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IEJVR1M6IDI4OTQwNTk6IEhhbmRsZSBlcnJvcnMgd2hlbiBjb3VudGluZworICAgaW50ZXJmYWNlcworCisyMDA5LTExLTMwIDE2OjA3ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyODk3MDAwOiBTdXBwcmVzcyAzMi1iaXQgY291bnRlciB0cnVuY2F0aW9uCisgICB3YXJuaW5ncy4KKworMjAwOS0xMS0zMCAxNTozNCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjkwMzA5MjogRml4IGJyb2tlbiBoYW5kbGluZyBvZiBicm9hZGNhc3QKKyAgIGVudHJpZXMuCisKKzIwMDktMTEtMzAgMTU6MTkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjkwMTAyOTogRml4IGNvbXBpbGVyIHdhcm5pbmcgb24KKyAgIENsb3NlSGFuZGxlKCkKKyAgIEVuZGlhbiBwcm9ibGVtcyBhbHJlYWR5IGFkZHJlc3NlZCBieSBwYXRjaCAjMjgzNTU3NgorCisyMDA5LTExLTMwIDE1OjEzICBkdHMxMgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyODkwOTMxOiBCZXR0ZXIgaGFuZGxpbmcgb2YgQ291bnRlcjY0CisgICB2YWx1ZXMuCisgICBQYXRjaCBwcm92aWRlZCBieSBNYXggUm9tYW5vdi4KKworMjAwOS0xMS0zMCAxNTowNyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODg3ODE2OiBQcm90ZWN0IGFnYWluc3QgZGl2aXNpb24tYnktemVybworICAgY3Jhc2gKKworMjAwOS0xMS0zMCAxNTowMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg4MzIyMDogRml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdoZW4KKyAgIGlmWFRhYmxlIGlzIG5vdCBpbmNsdWRlZC4KKworMjAwOS0xMS0zMCAxNDo0OSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jOgorCisgICBDSEFOR0VTOiBhZ2VudDogUEFUQ0g6IDI4ODMxNTU6IEZpeCBtZW1vcnkgbGVhayBpbiBwcm94eQorICAgaGFuZGxpbmcuCisgICBQYXRjaCBzdXBwbGllZCBieSBHb3d0aGFtIFRob21tYW5kcmEuCisKKzIwMDktMTEtMzAgMTQ6MzIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODgzMDkyOiBTdXBwb3J0IG1vbml0b3JpbmcgcHJvY2Vzc2VzIHRoYXQKKyAgIHNob3VsZCBub3QgYmUgcnVubmluZy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IENocmlzdGlhbiAoY2c3NSkuCisgICAKKyAgIFFuOiBTaG91bGQgdGhpcyBmdW5jdGlvbmFsaXR5IGJlIGJhY2stcG9ydGVkIHRvIGVhcmxpZXIgbGluZXM/CisKKzIwMDktMTEtMzAgMTQ6MTIgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6CisKKyAgIENIQU5HRVM6IGFnZW50OiBQQVRDSDogMjg3NzUxODogRml4IGhhbmRsaW5nIG9mIHNjb3BlZCBBZ2VudFgKKyAgIHZhcmlhYmxlcworCisyMDA5LTExLTMwIDE0OjAxICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYzoKKworICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAyODM1NTc2OiBGaXggZW5kaWFubmVzcyBpc3N1ZXMgaW4KKyAgIHBhc3MvcGFzc19wZXJzaXN0CisKKzIwMDktMTEtMjcgMDg6NTQgIGpzYWZyYW5laworCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfcm93LmM6CisKKyAgIFJlbW92ZSBleGVjdXRhYmxlIGF0dHJpYnV0ZSBmcm9tIHNvdXJjZSBmaWxlcy4KKworMjAwOS0xMS0yNSAyMDozNSAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGxvY2FsL21pYjJjLm5vdGlmeS5jb25mOgorCisgICBDSEFOR0VTOiBzbm1wZDogTWFrZSBhbGwgdGhlIG9pZHMgYW5kIG9pZCBsZW5ndGhzIGluIGFnZW50X3RyYXAuYworICAgY29uc3QgYW5kIHVzZSB0aGVtIGZyb20gZXZlcnl3aGVyZS4KKworMjAwOS0xMS0yNSAyMDoyNyAgbWFnZnIKKworICAgKiBzbm1wbGliL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBJbnN0YWxsIGxpYnJhcnkvb2lkLmguIFRoYW5rcyB0byAiVG9tYXN6IExpcyIKKyAgIHdobyBzcG90dGVkIHRoZSBidWcuCisKKzIwMDktMTEtMjUgMDk6NDcgIGJ2YXNzY2hlCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oOgorCisgICBDb21tZW50LW9ubHkgY2hhbmdlOiBjaGFuZ2VkIHRoZSBuYW1lIGluIHRoZSBmaWxlIGhlYWRlciBmcm9tCisgICB0ZXN0aGFuZGxlci5oCisgICB0byBpbnN0YW5jZS5oIHN1Y2ggdGhhdCBpdCBub3cgbWF0Y2hlcyB0aGUgZmlsZW5hbWUuCisKKzIwMDktMTEtMjQgMDc6NDkgIG1hZ2ZyCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBSZW1vdmUgdW5uZWNlc3NhcnkgY2FzdAorCisyMDA5LTExLTIzIDA3OjA3ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X3RyYXAuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNYWtlIHRoZSBlbnRlcnByaXNlIGFyZ3VtZW50IG9mCisgICBuZXRzbm1wX3NlbmRfdHJhcHMgYW5kIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMgY29uc3QKKworMjAwOS0xMS0yMyAwNzowMiAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBNYWtlIHRoZSBuYW1lIGFyZ3VtZW50IHRvIGZpbmRfdmFyYmluZF9pbl9saXN0CisgICBjb25zdAorCisyMDA5LTExLTIyIDIzOjI1ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4Lmg6CisKKyAgIFJlbW92ZSBzb21lIGxvY2FsIHJlZGVjbGFyYXRpb25zIG9mIGZ1bmN0aW9ucworCisyMDA5LTExLTIyIDAxOjAzICBtYWdmcgorCisgICAqICB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZywgV2luMzI6IFJlbW92ZSBhIGZldyB1bnVzZWQgY29uZmlndXJlIHN5bWJvbHMKKworMjAwOS0xMS0yMSAwODowMSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9Tbm1wLXdpbkV4dERMTC5oLCB3aW4zMi9zbm1wLXdpbmV4dGRsbC5oOgorCisgICBSZXBsYWNlZCBhbiBhY2NpZGVudGFsbHkgY29tbWl0dGVkIGZpbGUgYnkgdGhlIHByb3BlciBjb250ZW50cy4KKworMjAwOS0xMS0yMCAxNjoyOSAgYnZhc3NjaGUKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgUmV2ZXJ0ZWQgYWNjaWRlbnRhbGx5IG1lcmdlZCBjaGFuZ2VzLgorCisyMDA5LTExLTIwIDE2OjI2ICBidmFzc2NoZQorCisgICAqICB3aW4zMi9saWIsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvc25tcC13aW5leHRkbGwuaDoKKworICAgVXBkYXRlZCBTdWJ2ZXJzaW9uIGlnbm9yZSBsaXN0LgorCisyMDA5LTExLTIwIDE2OjE4ICBidmFzc2NoZQorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5jLCAgCisgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjLCAgIAorICAgICAgbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiwgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBTcGVsbGluZyBmaXggaW4gQyBzb3VyY2UgY29kZSBjb21tZW50czogcmVwbGFjZWQgJ3JldHJpdmFsJyBieQorICAgJ3JldHJpZXZhbCcuCisKKzIwMDktMTEtMjAgMTY6MTUgIGJ2YXNzY2hlCisKKyAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CisKKyAgIEZpeGVkIGEgbmFtaW5nIGluY29uc2lzdGVuY3k6IHJlcGxhY2VkIHR3byBvY2N1cnJlbmNlcyB3aW5FeHREbGwKKyAgIGJ5IHdpbkV4dERMTCBpbiBzb3VyY2UgY29kZSBjb21tZW50cy4KKworMjAwOS0xMS0xOSAyMjo1MiAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAyOTAwMDc4OiBBZGQgc3VwcG9ydCBmb3IgT0lEIHZhcmlhYmxlcyB3aXRoCisgICBzaXplIGluIGVsZW1lbnRzIGluc3RlYWQgb2YgYnl0ZXMsIGNvcnJlY3Qgc3lzT2JqZWN0SUQgdG8gdXNlCisgICB0aGlzLgorCisyMDA5LTExLTEzIDEyOjU5ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEZpeGVkIGxvZ2dpbmcgb2YgJ3RydW5jYXRpbmcgaW50ZWdlciB2YWx1ZSA+IDMyCisgICBiaXRzJyBpbiBJUC1NSUIgYW5kIFRDUC1NSUIKKyAgIFRoZSBjb3VudGVycywgd2hpY2ggZ3JvdyBmYXN0IGFyZSBub3cgY3V0IHRvIDMyYml0cy4KKworMjAwOS0xMS0xMiAwODoyNiAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wZC5jOgorCisgICBVc2UgYmlnIHByaW50ZidzIGluc3RlYWQgb2YgbWFueSBzbWFsbCBvbmVzIHRvIHNhdmUgYSBmZXcgaHVuZHJlZAorICAgYnl0ZXMgb24gdGhlIGZpbmFsIGV4ZWN1dGFibGUgc2l6ZS4KKworMjAwOS0xMS0xMiAwMjoyNCAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvc3RybGNweS5jLCBzbm1wbGliL3N0cnRva19yLmMsIHNubXBsaWIvc3RydG9sLmMsICAgCisgICAgICBzbm1wbGliL3N0cnRvdWwuYywgc25tcGxpYi9zdHJ0b3VsbC5jOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIEFDX1JFUExBQ0VfRlVOQ1MgdG8gaGFuZGxlIGNvZGUgdGhhdCBpcworICAgbWlzc2luZyBvbiBzb21lIHBsYXRmb3Jtcy4KKworMjAwOS0xMS0xMSAwOTowMCAgZHRzMTIKKworICAgKiBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZjoKKworICAgRml4IGNhY2hlIGZyZWUgcm91dGluZSB0byBtYXRjaCBoZWFkZXIgZGVjbGFyYXRpb24uCisgICBSZXR1cm4gc3VjY2Vzcy9mYWlsdXJlIHZhbHVlcyBmcm9tIGNhY2hlIGxvYWQgcm91dGluZS4KKyAgIFByb2JsZW0gaWRlbnRpZmllZCBieSBYdWFuLgorCisyMDA5LTEwLTMwIDA5OjUxICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgsICAKKyAgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIE5FV1M6IHNubXBsaWI6IFJldmVydCAxNzgwOCwgaW5zdGVhZCBmYWN0b3Igb3V0IHRoZSBkZWNsYXJhdGlvbgorICAgb2Ygb2lkIHRvIGl0J3Mgb3duIGZpbGUgYW5kIGluY2x1ZGUgdGhhdCBmaWxlIGZyb20gYm90aCB0eXBlcy5oCisgICBhbmQgYXNuMS5oCisKKzIwMDktMTAtMzAgMDg6MjggIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvdGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaCwgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L2lmLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAKKyAgICAgICBzbm1wbGliL21pYi5jLCBzbm1wbGliL29pZF9zdGFzaC5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfZGVidWcuYywgc25tcGxpYi9zbm1wdXNtLmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wbGliLCBzbm1wZCwgc25tcG5ldHN0YXQ6IEFkZCBjb3JyZWN0IHNpemUgcHJlZml4ZXMKKyAgIHdoZW4gcHJpbnRpbmcgdmFyaWFibGVzIG9mIHR5cGUgb2lkLgorCisyMDA5LTEwLTMwIDA4OjA3ICBtYWdmcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ2hhbmdlIG9pZCB0byBiZSBhIDMyLWJpdCB0eXBlIG9uIElMUDY0IGFuZAorICAgTFA2NCBwbGF0Zm9ybXMuCisKKzIwMDktMTAtMzAgMDg6MDUgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaDoKKworICAgTkVXUzogc25tcGxpYjogUmVtb3ZlIHRoZSBvaWQgdHlwZWRlZiBmcm9tCisgICA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+LiBJdCBpcyBzdGlsbCBwcmVzZW50IGluCisgICA8bmV0LXNubXAvdHlwZXMuaD4sIHVzZSB0aGF0IGZpbGUuCisKKzIwMDktMTAtMjggMTY6NDggIGhhcmRha2VyCisKKyAgICogYWdlbnQvc25tcF92YXJzLmM6CisKKyAgIGRvbid0IHJlcXVpcmUgc3ViYWdlbnRfaW5pdCgpIGlmIG5vdCBvbmx5IGJ1aWxkaW5nIG1hc3RlciBhZ2VudAorICAgY29kZQorCisyMDA5LTEwLTI3IDA2OjQ0ICBtYWdmcgorCisgICAqICBsb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmksICAgCisgICAgICBsb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYsIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMucm93LmNvbmYsIGxvY2FsL21pYjJjLnNjYWxhci5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBDSEFOR0VTOiBtaWIyYzogUmVtb3ZlIHVubmVjZXNzYXJ5IGNhc3RzIHRvIHVfY2hhcioKKworMjAwOS0xMC0xNCAyMzoxMiAgbWFnZnIKKworICAgKiBhcHBzL2VuY29kZV9rZXljaGFuZ2UuYywgc25tcGxpYi9zY2FwaS5jOgorCisgICBDSEFOR0VTOiBhcHBzLCBzbm1wbGliOiBQQVRDSDogMjgzNTU3NzogaWRlbnRpZmllZCBieSAiQmFydCBWYW4KKyAgIEFzc2NoZSI6IFJlcGxhY2UgU05NUF9aRVJPIG9mIGFycmF5cyB3aXRoIGEgbWVtc2V0LgorCisyMDA5LTEwLTEyIDIwOjI4ICBtYWdmcgorCisgICAqIHNubXBsaWIvcGFyc2UuYzoKKworICAgTGVzc2VuIHRoZSBzY29wZSBvZiB0aGUgcnAgdmFyaWFibGUgdG8gdGhlIHNtYWxsZXN0IHBvc3NpYmxlIG9uZS4KKworMjAwOS0xMC0wOSAxMjozOCAganNhZnJhbmVrCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDoyODcxNzQ3OiBwbHVnIG1lbW9yeSBsZWFrIGluIE9JRAorICAgcHJvY2Vzc2luZy4KKyAgIFRoZSBtZW1vcnkgbGVha2VkIHdoZW4gc21hbGwgT0lELCB3aGljaCBjb3VsZCBmaXQgcHJlLWFsbG9jYXRlZAorICAgdnAtPm5hbWVfbG9jLCB3YXMgcGxhY2VkIGluIGRpZmZlcmVudCAoYWxsb2NhdGVkKSBvbmUuCisKKzIwMDktMTAtMDkgMDU6MzEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9taWIuYywgc25tcGxpYi9wYXJzZS5jOgorCisgICBDSEFOR0VTOiBCVUc6IDI4MzgyNDM6IENvcnJlY3QgdGhlIG91dHB1dCBvZiB1bnNpZ25lZCB2YWx1ZXMuCisgICBUaGFua3MgdG8gSmFjayBIdWFuZyBvZiBRdWFsY29tbSB3aG8gcG9pbnRlZCBvdXQgdGhpcyBidWcuCisKKzIwMDktMTAtMDkgMDU6MDAgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBDaGFuZ2UgdGhlIHBhcnNpbmcgb2YgcmFuZ2VzIHRvIGFjY2VwdCBhbGwKKyAgIHZhbGlkIHZhbHVlcy4KKworMjAwOS0xMC0wNyAyMjoyNCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IG1pc2M6IFBBVENIOiAyODM2MTEyOiBVc2UgdGhlIHJpZ2h0IG1vZGlmaWVyIHdoZW4KKyAgIHByaW50aW5nIHNpemVfdCBhbmQgc3NpemVfdCB2YXJpYWJsZXMuCisKKzIwMDktMTAtMDcgMTI6NTAgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogRml4ZWQgY3JlYXRpb24gb2Ygdmlld3MgdXNpbmcgc25tcHVzbSwgT0lEcyB3aXRoCisgICBpbmRleGVzID4gMjU1IGFyZSBhbGxvd2VkIG5vdy4KKyAgIFRoaXMgcmV2ZXJ0cyBTVk4gY29tbWl0ICM3NDkyLgorCisyMDA5LTEwLTA1IDE5OjE5ICBtYWdmcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RleHRfdXRpbHMuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogQ29ycmVjdCB0aGUgc3BlbGxpbmcgb2YgX19jcGx1c3BsdXMgd2hlbgorICAgY2hlY2tpbmcgaWYgdGhlIGZpbGUgc2hvdWxkIGJlIHdyYXBwZWQgaW4gZXh0ZXJuICJDIi4KKworMjAwOS0xMC0wNSAwNjoxMyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB3YWxrLmM6CisKKyAgIENIQU5HRVM6IHNubXB3YWxrOiBIYW5kbGUgdGhlIGNhc2Ugd2hlbiB0aGUgZW5kIG9pZCBpcyBsb25nZXIKKyAgIHRoYW4gdGhlIGN1cnJlbnQgb2lkIGNvcnJlY3RseQorCisyMDA5LTA5LTMwIDEwOjEyICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CisKKyAgIENIQU5HRVM6IFNvbGFyaXM6IFByb3RlY3QgYWdhaW5zdCBtaXNzaW5nIHBhY2thZ2UgdmVyc2lvbgorICAgaW5mb3JtYXRpb24gY3Jhc2hpbmcgdGhlIGFnZW50LgorICAgUHJvYmxlbSByZXBvcnRlZCBieSBJbnlhdmVuIFNha2FyYWkuCisKKzIwMDktMDktMjcgMTQ6NTkgIGFsZXhfYgorCisgICAqICB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsLCAgIAorICAgICAgd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sOgorCisgICBXaW4zMjogQmluYXJ5IGJ1aWxkIGluc3RydWN0aW9ucyBhbmQgc2NyaXB0IHVwZGF0ZXMuCisKKworCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNS5yYzMgLT4gVjUuNQorCisyMDA5LTA5LTIzIDIzOjQyICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA5LTIzIDIzOjQwICBoYXJkYWtlcgorCisgICAqIEZBUToKKworICAgcmVtb3ZlIFNWTiBicmFuY2ggd29yZGluZworCisyMDA5LTA5LTIzIDIzOjM2ICBoYXJkYWtlcgorCisgICAqIEZBUToKKworICAgcHJvcGVyIHByb2plY3QgY2FwaXRhbGl6YXRpb24KKworMjAwOS0wOS0yMyAyMzozNSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOS0yMyAyMzozMCAgaGFyZGFrZXIKKworICAgKiBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDktMjIgMjE6NTEgIHRhbmRlcnMKKworICAgKiBSRUFETUUuc29sYXJpczoKKworICAgZml4IHR5cG9zCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjUucmMyIC0+IFY1LjUucmMzCisJCisyMDA5LTA5LTE0IDIyOjM5ICBoYXJkYWtlcgorCisgICAqICBtYW4vbmV0c25tcF9hY2Nlc3NfbXVsdGlwbGV4ZXIuMywgbWFuL25ldHNubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X2hhbmRsZXIuaC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21vbml0b3JfY2FsbGJhY2tfaGVhZGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbnVsbF9jb250YWluZXIuMywgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9vbGRfYXBpLjMsIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywgbWFuL25ldHNubXBfcm93X21lcmdlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zY2FsYXIuMywgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLCBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX3Jvdy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdG9vbHMuaC4zLCBtYW4vbmV0c25tcF91dGlsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorCisgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorCisyMDA5LTA5LTE0IDIyOjM2ICBoYXJkYWtlcgorCisgICAqICBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuYWMsIGRpc3QvTWFrZWZpbGUsICAgCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMsIG1hbi9wZHVfYXBpLjMsIG1hbi9zZXNzaW9uX2FwaS4zLCAgIAorICAgICAgbWFuL3ZhcmJpbmRfYXBpLjM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCisyMDA5LTA5LTE0IDIyOjE4ICBoYXJkYWtlcgorCisgICAqIFJFQURNRS5haXgsIGFwcHMvc25tcG5ldHN0YXQvaWYuYywgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vYWl4Lmg6CisKKyAgIFBhdGNoIGZyb20gbWFnZnIgZm9yIDUuNSBzcGVjaWZpYyBhaXggYnVpbGQgZml4ZXMKKworMjAwOS0wOS0wMiAwNzoxMiAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYywgYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcmVuYW1lIE1JQiBtYWNybyB0byBORVRTTk1QX01JQjJfT0lELCBNSUIgaXMKKyAgIHRvbyBnZW5lcmljIGFuZCBtYXkgY29uZmxpY3Qgd2l0aCBhcHBsaWNhdGlvbnMuCisgICAKKyAgIFRoZSBvbGQgTUlCIG1hY3JvIGlzIGtlcHQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHksIHVubGVzcworICAgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMgaXMgZGVmaW5lZC4KKworMjAwOS0wOC0zMSAxOTozOCAgbmJhCisKKyAgICogbWlicy9yZmNsaXN0OgorCisgICBBZGRpdGlvbmFsIFJGQyBtaWJzCisKKzIwMDktMDgtMzEgMTk6MzcgIG5iYQorCisgICAqIG1pYnMvSUFOQWlmVHlwZS1NSUIudHh0OgorCisgICBJQU5BIGZpeGVkIGEgYnVnCisKKzIwMDktMDgtMjkgMDc6MjkgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBSZW1vdmUgdW5uZWVkZWQgY2FzdHMuCisKKzIwMDktMDgtMjkgMDc6MjggIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiByZXQgaXMgb25seSB1c2VkIGluIHNldHRhYmxlIHRhYmxlcyBzbyBvbmx5IGRlY2xhcmUgaXQKKyAgIHRoZW4uCisKKzIwMDktMDgtMjkgMDc6MjQgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBSZXBsYWNlIHRoZSBfb2lkX2xlbiB2YXJpYWJsZSB3aXRoIGFuIGV4cGxpY2l0IGNhbGwgb2YKKyAgIE9JRF9MRU5HVEguCisKKzIwMDktMDgtMjkgMDc6MjEgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBNYWtlIGV2ZXJ5IGZ1bmN0aW9uIHRoYXQgY2FuIGJlIHN0YXRpYyBzdGF0aWMuIFJlbW92ZSB0aGUKKyAgIGRlY2xhcmF0aW9ucyBvZiB0aGUgc3RhdGljIGZ1bmN0aW9ucyBhbmQgdGhlIHByaXZhdGUgZGVmaW5lcyBmcm9tCisgICB0aGUgaGVhZGVyLgorCisyMDA5LTA4LTI5IDA3OjE5ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogUmVvcmRlciB0aGUgZnVuY3Rpb25zIGluIG9yZGVyIHRvIGF2b2lkIHRoZSBuZWVkIGZvcgorICAgZm9yd2FyZCBkZWNsYXJhdGlvbnMuCisKKzIwMDktMDgtMjkgMDc6MTYgIG1hZ2ZyCisKKyAgICogbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmY6CisKKyAgIG1pYjJjOiBuZXRzbm1wX3RhYmxlX3JlZ2lzdGVyIHNob3VsZCBiZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlCisgICBhbmQgdGFrZSBvbmx5IHR3byBhcmdtZW50cy4KKworMjAwOS0wOC0yOSAwNzoxNCAgbWFnZnIKKworICAgKiBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgbWliMmM6IGJ1aWxkX29pZCBleHBlY3RzIGEgcG9pbnRlciB0byBhbGxvY2F0ZWQgb2lkLiBDaGFuZ2UgdG8KKyAgIHVzZSBidWlsZF9vaWRfbm9hbGxvYyBhbmQgcmVtb3ZlIG9uZSBjb3B5IG9mIHRoZSBpbmRpY2VzLgorCisyMDA5LTA4LTI5IDA3OjEwICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogVGhlcmUgaXMgbm8gaW5kZXhfb2lkX2xlbiBtZW1iZXIgaW4gc3RydWN0IGVudHJ5LiBVc2UgdGhlCisgICBpbnRlbmRlZCBsb2NhbCB2YXJpYWJsZSBpbmRleF9vaWRfbGVuLgorCisyMDA5LTA4LTI5IDA3OjA2ICBtYWdmcgorCisgICAqIGxvY2FsL21pYjJjLnJhdy10YWJsZS5jb25mOgorCisgICBtaWIyYzogQ29ycmVjdCB0aGUgcmV0dXJuIHR5cGUgb2YgJHtpfV9nZXQqZW50cnkgdG8gbWF0Y2ggdGhlCisgICByZXR1cm5lZCB0eXBlLgorCisyMDA5LTA4LTI2IDIyOjM3ICBoYXJkYWtlcgorCisgICAqIENoYW5nZUxvZzoKKworICAgd2h3b29wczsgYmxldyB0aGUgY2hhbmdlbG9nIGZvciByYzIKKworMjAwOS0wOC0yNiAxNzozOCAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOC0yNiAxNzoyOSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS41LnJjMSAtPiBWNS41LnJjMgorCQorMjAwOS0wOC0yNiAxNzozOCAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wOC0yNiAxNzoyOSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOC0yNiAxNzoyOCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgdXBkYXRlZCBiYXNlZCBvbiBuZXcgU0YgdXBsb2FkIG1ldGhvZHM7IG5vIGxvbmdlciBhcyBhdXRvbWF0YWJsZQorCisyMDA5LTA4LTI2IDE3OjI2ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaCBmcm9tIEphbiB0byBlbmRsZXNzIGxvb3AgaW4gZGVmYXVsdCByb3V0ZXMKKyAgIG9uIGxpbnV4CisKKzIwMDktMDgtMjYgMTc6MjUgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmg6CisKKyAgIGFwcGx5IHBhdGNoIGZyb20gSmFuIHRvIGZpeCBDKysgd3JhcHBlcgorCisyMDA5LTA4LTI2IDE0OjUzICBkdHMxMgorCisgICAqIGxvY2FsL01ha2VmaWxlLmluLCBsb2NhbC9taWIyYy5yYXctdGFibGUuY29uZjoKKworICAgSW5pdGlhbCBzdGFiIGF0IGEgbWluaW1hbC1oZWxwZXIgKHJhdykgdGFibGUgdGVtcGxhdGUsCisgICBsZWF2aW5nIG1vc3Qgb2YgdGhlIHdvcmsgdG8gdGhlIHVzZXItcHJvdmlkZWQgTUlCIGhhbmRsZXIuCisKKzIwMDktMDgtMjYgMTQ6NTAgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBQcm90ZWN0IGFnYWluc3QgYm9ndXMgZmFpbHVyZXMgKHJldHVybmluZyAwKSBhbmQgc3Vic2VxdWVudAorICAgZG91YmxlLWZyZWVzLAorICAgZHVlIHRvIDE1LS8zMS1iaXQgbWFza2luZyB3aGVuIHNlbGVjdGluZyByZXF1ZXN0IElEcy4gSWRlbnRpZmllZAorICAgYnkga3JvbWVza3kuCisKKzIwMDktMDgtMjAgMTM6MzAgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGx1ZyBsZWFrcyBpbiBpcElmU3RhdHNUYWJsZSwKKyAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlLCBpcFN5c3RlbVN0YXRzVGFibGUgYW5kCisgICBpcERlZmF1bHRSb3V0ZXJUYWJsZS4KKyAgIAorICAgSXQgc2VlbXMgdG8gbWUgdGhlIHRhYmxlcyB3ZXJlIHdyb25nbHkgZ2VuZXJhdGVkIHdpdGgKKyAgIG0yY19kYXRhX2FsbG9jYXRlIG9yCisgICBzb21lb25lIGZvcmdvdCB0byByZWxlYXNlIHRoZSB1c2VyIHByb3ZpZGVkIGRhdGEuCisKKzIwMDktMDgtMTIgMTU6MDAgIHRhbmRlcnMKKworICAgKiBORVdTOgorCisgICBmaXggbGlidG9vbCB2ZXJzaW9uIGluIE5FV1MKKworMjAwOS0wOC0xMSAwMDo0MiAgaGFyZGFrZXIKKworICAgKiBDSEFOR0VTLCBDaGFuZ2VMb2c6CisKKyAgIHdob29wczsgYWRkIHJlYWwgY2hhbmdlbG9nIGVudGVyaWVzIGZvciAucmMxCisKKzIwMDktMDgtMTAgMjM6MTAgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGZpeCB0eXBvIGluIHN2bjJjbCBsaW5lCisKKzIwMDktMDgtMTAgMjM6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMDktMDgtMTAgMjE6MzIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ2hhbmdlczogVjUuNS5wcmUzIC0+IFY1LjUucmMxCisKKzIwMDktMDgtMTAgMjM6MTAgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGZpeCB0eXBvIGluIHN2bjJjbCBsaW5lCisKKzIwMDktMDgtMTAgMjM6MDUgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6CisKKyAgIG1ha2UgZGVwZW5kCisKKzIwMDktMDgtMTAgMjE6MzIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDgtMTAgMjE6MjEgIGhhcmRha2VyCisKKyAgICogIGRpc3QvbWFrZXJlbGVhc2UueG1sLCBtYW4vcGR1X2FwaS4zLCBtYW4vc2Vzc2lvbl9hcGkuMywgICAKKyAgICAgIG1hbi92YXJiaW5kX2FwaS4zOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKworMjAwOS0wOC0wNyAxMDozMiAgZHRzMTIKKworICAgKiBDSEFOR0VTLCBORVdTOgorCisgICBDb3JyZWN0LCBjb25zb2xpZGF0ZSwgY2xhcmlmeSBhbmQgY2xlYW51cCB0aGUgY2F0YWxvZyBvZiBjdXJyZW50CisgICBjaGFuZ2VzLgorCisyMDA5LTA4LTA2IDA3OjU3ICBkdHMxMgorCisgICAqIEZBUToKKworICAgRXhwYW5kIG9uIGV4ZWMgdnMgZXh0ZW5kLgorCisyMDA5LTA4LTA1IDIwOjA3ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIAorICAgICAgc25tcGxpYi9maWxlX3V0aWxzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDI4MjIzNTU6IEZpeCBtZW1vcnkgbGVha3Mgb24KKyAgIHVkcEVuZHBvaW50VGFibGUgKGxpbnV4KQorICAgUGF0Y2ggc3VwcGxpZWQgYnkgRnJhbmsgTGljaHRlbmhlbGQKKworMjAwOS0wOC0wNSAxOTowNSAgZHRzMTIKKworICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMjgyMjMzNzogRml4IG1lbW9yeSBsZWFrIGluCisgICBpcEFkZHJlc3NQcmVmaXhUYWJsZQorCisyMDA5LTA4LTA1IDE1OjE2ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmM6CisKKyAgIEZpeCBtZW1vcnkgbGVhayBpbiBOZXRUb01lZGlhVGFibGUuCisgICBXaGVuIGRlbGV0aW5nIHJvdyBjb250ZXh0LCBkZWxldGUgYWxzbyBhc3NvY2lhdGVkIGRhdGEuCisKKzIwMDktMDgtMDUgMTU6MTUgIGpzYWZyYW5laworCisgICAqIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jOgorCisgICBGaXggbWVtb3J5IGxlYWsgaW4gTmV0VG9NZWRpYVRhYmxlLgorICAgVGhlIGNvbnRhaW5lciB1c2VkIHRvIHRyYWNrIGVudHJpZXMgdG8gZGVsZXRlIGZyb20gY2FjaGUgc2hvdWxkCisgICBiZSByZWxlYXNlZCB3aGVuIGl0J3Mgbm90IG5lZWRlZC4KKworMjAwOS0wOC0wNSAxNToxMiAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIEZpeCBtZW1vcnkgbGVhayBpbiBVRFAtIGFuZCBUQ1AtTUlCLgorICAgVGhlIGRhdGEgZnJvbSByYXdfZGF0YSBhcmUgY29waWVkIHRvIGNhY2hlLCBzbyBpdCBzaG91bGQgYmUKKyAgIGZyZWVkLgorCisyMDA5LTA4LTA1IDEwOjE2ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRhYmxlLmM6CisKKyAgIENIQU5HRVM6IGFwcHM6IEJVRzogMjgxMTU3NzogRml4IGJ1ZyBpbiBHZXRCdWxrIGhhbmRsaW5nLgorICAgRG9uJ3QgZ2V0IGNvbmZ1c2VkIGJ5IGluZGV4IHZhbHVlcyB0aGF0IGNvbnRhaW4gYSAnOicgY2hhcmFjdGVyLgorCisyMDA5LTA4LTA0IDIxOjU5ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLWNvbmYuZC9tZmQtYWNjZXNzLXVuc29ydGVkLWV4dGVybmFsLWRlZmluZXMubTJpOgorCisgICBDSEFOR0VTOiBtaWIyYzogQlVHOiAyODI3MjY5OiBTdXBwcmVzcyBub24tb3JkZXJlZCBUT0RPIGNvbW1lbnRzLgorCisyMDA5LTA4LTA0IDIxOjM1ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLm9sZC1hcGkuY29uZjoKKworICAgSGFuZGxlIGdlbmVyYXRpbmcgY29kZSBmb3IgYSBzaW5nbGUgdGFibGUsCisgICBhcyB3ZWxsIGFzIGEgbGFyZ2VyIGdyb3VwLgorICAgQWxzbyBhZGRyZXNzZXMgYnVnIDIxNTAyODUKKworMjAwOS0wOC0wNCAyMToxNiAgbWFnZnIKKworICAgKiBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIHNubXBsaWI6IGZyb20gIkJhcnQgdmFuIEFzc2NoZSAmIE1hZ251cyBGcm9tcmVpZGUiOiBNb3JlIHVwZGF0ZXMKKyAgIHRvIHN0cnRvdWxsLmMKKworMjAwOS0wOC0wNCAxMDo1NyAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogZnJvbSAiTWFyY3VzIFLniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLXniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy05p6La2VydCI6IGZpeCBwb3NzaWJsZSBjcmFzaCB3aGVuCisgICA2NC1iaXQgY291bnRlcnMgaW4gaXBTeXN0ZW1TdGF0c1RhYmxlIGdldCBiaWdnZXIgdGhhbiAyXjMyCisKKzIwMDktMDgtMDMgMTk6MjcgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N0cnRvdWxsLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyODI3NzIyOiBmcm9tICJCYXJ0IFZhbiBBc3NjaGUiOiBJbXByb3ZlCisgICBzdHJ0b3VsbCB0byBiZSBsZXNzIE1TVkMtc3BlY2lmaWMKKworMjAwOS0wOC0wMyAxODozOCAgbWFnZnIKKworICAgKiBtYW4vTWFrZWZpbGUuaW46CisKKyAgIHJlbW92ZSBhbiBvYnNvbGV0ZSBtYW51YWwgcGFnZSBmcm9tIHRoZSBzZXQgb2YgZmlsZXMgdGhhdCBzaG91bGQKKyAgIGJlIGluc3RhbGxlZAorCisyMDA5LTA3LTI3IDEyOjQxICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKKworICAgbWFrZSBkZXBlbmQKKworMjAwOS0wNy0yNyAxMjoxMSAgaGFyZGFrZXIKKworICAgKiBtYW4vbmV0c25tcF9Db250YWluZXJfaXRlcmF0b3IuMzoKKworICAgcmVtb3ZlIGFuIG9ic29sZXRlIG1hbnVhbCBwYWdlCisKKzIwMDktMDctMjcgMTI6MDMgIGhhcmRha2VyCisKKyAgICogcGVybC9TTk1QL3QvYnVsa3dhbGsudDoKKworICAgQ0hBTkdFUzogZnJlZWJzZDogcGF0Y2ggZnJvbSBDZXphcnkgTW9yZ2EgdG8gZml4IGEgbWFrZSB0ZXN0IG9uCisgICBmcmVlYnNkCisKKzIwMDktMDctMjcgMTI6MDIgIGhhcmRha2VyCisKKyAgICogIG1hbi9uZXRzbm1wX2FjY2Vzc19tdWx0aXBsZXhlci4zLCBtYW4vbmV0c25tcF9hZ2VudC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfYWdlbnRfaGFuZGxlci5oLjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDctMjcgMTE6NTIgIGhhcmRha2VyCisKKyAgICogIEZBUSwgTkVXUywgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbmV0LXNubXAuc3BlYzoKKworICAgVmVyc2lvbiBudW1iZXIgdXBkYXRlCisKKzIwMDktMDctMjcgMDg6MzkgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMzUwdW5peDoKKworICAgcmV2ZXJ0IGFjY2lkZW50aWFsbHkgYXBwbGllZCBwYXRjaAorCisyMDA5LTA3LTI3IDA4OjM3ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1QzNTB1bml4LCB0ZXN0aW5nL3Rlc3RzL1QzNjBkdGxzdWRwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LWxvY2FsaG9zdC5wcml2LCB0ZXN0aW5nL3Rlc3RzL3Rlc3QtdXNlci5jZXJ0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy90ZXN0LXVzZXIucHJpdjoKKworICAgYWRkZWQgYSB0ZXN0IGNhc2UgZm9yIHVkcC9kdGxzCisKKzIwMDktMDctMjcgMDg6MzYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBkb24ndCByZXF1aXJlIGEgc2Vzc2lvbiB0byBjYXJyeSBhIHNlY05hbWUKKworMjAwOS0wNy0yNiAyMTozNCAgYWxleF9iCisKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWY6CisKKyAgIFdpbjMyOiBNU1ZDIDYgY29tcGlsZSBmaXhlcyBmb3IgV29ya3NwYWNlIGJ1aWxkLgorCisyMDA5LTA3LTI2IDE4OjIwICBhbGV4X2IKKworICAgKiAgUkVBRE1FLndpbjMyLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N0cnRvdWxsLmMsICAgCisgICAgICB3aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQsIHdpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LnBsLCAgIAorICAgICAgd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpLCB3aW4zMi9saWJzbm1wL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIC1BZGRlZCBzdHJ0b3VsbCBmdW5jdGlvbiBhbmQgY29uZmlndXJlIGNoZWNrIGZvciBzeXN0ZW1zIHdpdGhvdXQKKyAgIGl0IHN1Y2ggYXMgV2luMzIgTVNWQyA2CisgICAtV2luMzI6IE1TVkMgNiBjb21waWxlIGZpeGVzIC0gcmVxdWlyZXMgbmV3IHN0cnRvdWxsLmMgZmlsZQorICAgLVdpbjMyOiBOZXcgYnVpbGQtYmluYXJ5IHNjcmlwdCB0byBzaW1wbGlmeSBidWlsZGluZyB0aGUgV2luZG93cworICAgYmluYXJ5IHBhY2thZ2UuCisKKzIwMDktMDctMjUgMDU6MzEgIG1hZ2ZyCisKKyAgICogdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQ6CisKKyAgIE1ha2Ugc3VyZSBhIG1lc3NhZ2UgaXMgd3JpdHRlbiBpZiB0aGUgcmVsZXZhbnQgdGFibGUgaXMgbWlzc2luZy4KKworMjAwOS0wNy0yMyAyMToyOSAgYWxleF9iCisKKyAgICogUkVBRE1FOgorCisgICBVcGRhdGUgZW1haWwgYWRkcmVzcyBpbiBSRUFETUUuCisKKzIwMDktMDctMjMgMDE6MDcgIGFsZXhfYgorCisgICAqICB3aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3A6CisKKyAgIFdpbjMyIE1TVkMgMjAwOCsgZml4ZXMuCisKKzIwMDktMDctMjMgMDA6NTUgIGFsZXhfYgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgsICAgCisgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcDoKKworICAgV2luMzIgTVNWQyAyMDA1KyBidWlsZCBmaXhlcy4gVGhhbmtzIHRvIEJhcnQgVmFuIEFzc2NoZS4KKworMjAwOS0wNy0yMSAxMjoyMiAgZHRzMTIKKworICAgKiAgbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGUuY29uZiwgICAKKyAgICAgIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsIGxvY2FsL21pYjJjLnJvdy5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBBZGQgc2ltcGxlIGRlYnVnIG91dHB1dCB0byBtaWIyYyB0ZW1wbGF0ZXMuCisKKzIwMDktMDctMjEgMTI6MTMgIGR0czEyCisKKyAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBGaXggbWlzc2luZyBzZW1pY29sb24gdHlwb3MuCisKKzIwMDktMDctMjEgMDk6MTUgIGR0czEyCisKKyAgICogRkFROgorCisgICBOZXcgc3VnZ2VzdGVkIGVudHJpZXMuCisKKzIwMDktMDctMjAgMTk6MjQgIGR0czEyCisKKyAgICogRkFROgorCisgICBVcGRhdGVzIHRvIENPRElORyBzZWN0aW9uLgorCisyMDA5LTA3LTIwIDExOjA5ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmg6CisKKyAgIEFkZCBtaXNzaW5nIGhlYWRlciBmaWxlIGZyb20gcGF0Y2ggIzIwNTMyNzMuCisKKzIwMDktMDctMTkgMTU6MDkgIGR0czEyCisKKyAgICogRkFROgorCisgICBVcGRhdGVzIHRvIENPTVBJTElORyBzZWN0aW9uLgorCisyMDA5LTA3LTE2IDEyOjM4ICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYzoKKworICAgQWRkIElQdjYgb2N0ZXQgY291bnRlcnMuCisgICBOZXcgTGludXgga2VybmVscyAoZS5nLiAyLjYuMzEtcmMyLCBtYXliZSBzb21lIGVhcmxpZXIpIHByb3ZpZGUKKyAgIGNvdW50ZXJzIGZvcgorICAgaW5jb21pbmcvb3V0Z29pbmcgSVB2NiB0cmFmZmljIGZvciBpcFN5c3RlbVN0YXRzVGFibGUgYW5kCisgICBpcElmU3RhdHNUYWJsZS4KKworMjAwOS0wNy0xNSAyMjo0NiAgdGFuZGVycworCisgICAqIHRlc3RpbmcvdGVzdHMvVDM1MHVuaXg6CisKKyAgIHB1dCB0ZW1wb3JhcnkgZGF0YSB0byB3aGVyZSB0aGV5IGJlbG9uZworCisyMDA5LTA3LTExIDIxOjUwICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlOgorCisgICByZWdlbmVyYXRlIGNvbmZpZ3VyZQorCisyMDA5LTA3LTExIDIxOjA0ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6CisKKyAgIGJ1aWxkIGZpeCAoZS5nLiBmb3IgRnJlZUJTRCk6IGFkanVzdCBrdm0gY29uZmlndXJlIHRlc3RzCisKKzIwMDktMDctMTAgMTI6MzUgIGpzYWZyYW5laworCisgICAqIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ2hlY2sgSVB2NiBwb3J0IHJhbmdlcyBpbiB0aGUgc2FtZSB3YXkgYXMgSVB2NCBwb3J0cyBhcmUgY2hlY2tlZC4KKworMjAwOS0wNy0xMCAwNzo0NiAganNhZnJhbmVrCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgICBsb2NhbC9taWIyYzoKKworICAgRml4IGFub3RoZXIgSVB2NCBhZGRyZXNzIHNpemUgLSBsb25nIGhhcyA4IGJ5dGVzIG9uIDY0Yml0IExpbnV4LgorICAgQWxzbyBmaXggdGhlIGRlZmF1bHQgdHlwZSBmb15DQVNOX0lQQUREUkVTUyBpbiBtaWIyYywgc28gdGhlCisgICBpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jIGNhbiBiZSBzYWZlbHkgcmVnZW5lcmF0ZWQuCisKKzIwMDktMDctMDkgMjM6NDIgIGhhcmRha2VyCisKKyAgICogIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgdGVzdGluZy90ZXN0cy9UMzEwdGNwLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsIHRlc3RpbmcvdGVzdHMvVDMzMHRjcHY2LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMzUwdW5peDoKKworICAgY2xlYW51cCBvZiB0ZXN0aW5nIGNhc2VzIHRvIHJlbW92ZSBkb3VibGUgaW5jbHVkZSBhbmQgZG91YmxlCisgICBleHBvcnRzCisKKzIwMDktMDctMDkgMjM6MDcgIHRhbmRlcnMKKworICAgKiB0ZXN0aW5nL3Rlc3RzL1QzMDB1ZHA6CisKKyAgIGJlIGNvbnNpc3RlbnQgd2l0aCB0aGUgVENQL0lQdjQgdGVzdAorCisyMDA5LTA3LTA5IDIyOjE4ICBoYXJkYWtlcgorCisgICAqICB0ZXN0aW5nL3Rlc3RzL1N0cmFuc3BvcnQsIHRlc3RpbmcvdGVzdHMvVDMwMHVkcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDMxMHRjcCwgdGVzdGluZy90ZXN0cy9UMzIwdWRwdjYsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QzMzB0Y3B2NiwgdGVzdGluZy90ZXN0cy9UMzUwdW5peCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDM5OWFsaWFzOgorCisgICBuZXcgdGVzdHMgZm9yIHRlc3RpbmcgZGVmaW5lZCB0cmFuc3BvcnRzCisKKzIwMDktMDctMDkgMjI6MTcgIGhhcmRha2VyCisKKyAgICogdGVzdGluZy9URVNUQ09ORi5zaCwgdGVzdGluZy9ldmFsX3Rvb2xzLnNoOgorCisgICBhIENPTkZJR0FQUCBtYWNybyBmb3IgYWRkaW5nIHN0dWZmIHRvIHNubXAuY29uZgorCisyMDA5LTA3LTA4IDE1OjEyICBqc2FmcmFuZWsKKworICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgRml4IGdldGhvc3RieWFkZHIgcGFyYW1ldGVyLCBuZXRzbm1wX3VkcF9mbXRhZGRyIG5ldmVyIHJldHVybmVkIGEKKyAgIGhvc3RuYW1lLgorCisyMDA5LTA3LTA3IDE1OjQ2ICBqc2FmcmFuZWsKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgorCisgICBGaXggSVAgYWRkcmVzcyBsZW5ndGggb24gNjQgYml0IHN5c3RlbXMgaW4gbWliSUksIHBhc3MgYW5kCisgICBwYXNzX3BlcnNpc3QgbW9kdWxlcy4KKworMjAwOS0wNy0wNyAxNToyNCAganNhZnJhbmVrCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYzoKKworICAgVXNlIGNvcnJlY3RseSBzaXplZCBJUCBhZGRyZXNzZXMgaW4gYWRkcmVzcyB0cmFuc2xhdGlvbiB0YWJsZQorICAgcHJvY2Vzc2luZyAtIHVfbG9uZyBjYW4gbWFrZSBwcm9ibGVtcyBvbiBiaW4gZW5kaWFuIDY0IGJpdAorICAgc3lzdGVtcworCisyMDA5LTA2LTI5IDEzOjUyICBoYXJkYWtlcgorCisgICAqIENIQU5HRVM6CisKKyAgIHJlbW92ZSBlbnRyeSBmb3IgYSBwYXRjaCB0aGF0IGdvdCByZXZlcnRlZAorCisyMDA5LTA2LTI1IDE1OjI0ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbjoKKworICAgTW92ZSBub24tY29yZSBkYXRhIHR5cGVzIGludG8gYSBzZXBhcmF0ZSAobGlicmFyeSBpbnRlcm5hbHMpCisgICBoZWFkZXIgZmlsZS4KKyAgIE1vdmUgdGhlIGxhcmdlX2ZkX3NldCBkYXRhIHN0cnVjdHVyZSBpbnRvIHRoaXMgaGVhZGVyIGZpbGUuCisKKzIwMDktMDYtMTggMjI6MjkgIHRhbmRlcnMKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IGFsbG93IGJ1aWxkaW5nIHdpdGggUGVybCB2ZXJzaW9ucyB0aGF0IGxhY2sKKyAgIFBFUkxfRVhJVF9ERVNUUlVDVF9FTkQKKworMjAwOS0wNi0xOCAyMjoxMyAgdGFuZGVycworCisgICAqIGFwcHMvc25tcG5ldHN0YXQvaWYuYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IGJ1aWxkIGZpeCBmb3IgVHJ1NjQgVW5peCBhbmQgSVJJWDogbW92ZSBfWE9QRU4qCisgICBkZWZpbml0aW9ucyB0byB3aGVyZSB0aGV5IGFyZSBpbiA1LjQueCBhbmQgZWFybGllcgorCisyMDA5LTA2LTE4IDA2OjAyICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDbGVhbiB1cCAtLXdpdGgtbmwgY29uZmlndXJhdGlvbgorICAgKiAgTW92ZSB0aGUgX0FSR19XSVRIIHRvIGNvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlICAyMDA5LTA2LTE2IDE1OjE3CisgICAgICAgcnN0b3J5CisKKworICAgKiBzbm1wbGliL2NvbnRhaW5lci5jOgorCisgICBjaGVjayBmb3IgbnVsbCBwb2ludGVyIGJlZm9yZSBkZXJlZgorCisyMDA5LTA2LTE1IDIzOjUyICByc3RvcnkKKworICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIGFkZCBjb21tZW50IGV4cGxhaW5pbmcgbm90IHF1aXRlIG9idmlvdXMgbGFjayBvZiBtZW1tb3ZlCisKKzIwMDktMDYtMTUgMTk6MzIgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgorCisgICBSZW1vdmUgI2lmIDAgY29tbWVudGVkIGNvZGUKKworMjAwOS0wNi0xNSAxNToyNSAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFVwZGF0ZXMgdG8gQUdFTlQgc2VjdGlvbi4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDaGFuZ2VzOiBWNS41LnByZTIgLT4gVjUuNS5wcmUzCisKKzIwMDktMDYtMTMgMDE6MTIgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNTY0NTUyOiBmcm9tIGFobWFrZTogcHJvdmlkZSBsaWJuZXRsaW5rCisgICBzdXBwb3J0IGZvciBsb2FkaW5nIHRoZSB0Y3AgdGFibGUKKworMjAwOS0wNi0xMiAxOTowMiAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTQwMDEwMTogcmVtb3ZlIGRlbGV0ZWQgaW50ZXJmYWNlcyBmcm9tCisgICBpZlRhYmxlCiAKIDIwMDktMDYtMTEgMjM6MDkgIGhhcmRha2VyCiAKQEAgLTM3NDQsMTkgKzYzODAwLDM2IEBACiAgICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oLCAgIAogICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgogCi0gICBDSEFOR0VTOiB3aW4zMjogUEFUQ0g6IDI2OTM3NDY6IGZyb20gYnZhc3NjaGU6IGltcHJvdmVkIHNvY2tldCBzdGFydHVwIHN1cHBvcnQKKyAgIENIQU5HRVM6IHdpbjMyOiBQQVRDSDogMjY5Mzc0NjogZnJvbSBidmFzc2NoZTogaW1wcm92ZWQgc29ja2V0CisgICBzdGFydHVwIHN1cHBvcnQKIAogMjAwOS0wNi0xMSAyMjo1NyAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjAxMjQwMjogZG9uJ3QgZmFpbCBvbiBmYWlsdXJlIHRvIGxvb2sgdXAgaW50ZXJmYWNlIGVycm9yIGNvdW50ZXJzLgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDEyNDAyOiBkb24ndCBmYWlsIG9uIGZhaWx1cmUgdG8gbG9vayB1cAorICAgaW50ZXJmYWNlIGVycm9yIGNvdW50ZXJzLgorCisyMDA5LTA2LTExIDIyOjAzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgcmV2ZXJ0IHByZXZpb3VzIGNvbW1pdCB0byBtYWtlIGNpcmN1bGFyIGRlcGVuZGVuY2llcyBiYWNrIHRvCisgICB0aGVpciByZWd1bGFyIGluc2FuZSBvcmRlcmluZzsgSSBkb24ndCBsaWtlIHRoaXMgc2l0dWF0aW9uIGF0IGFsbAorCisyMDA5LTA2LTExIDIxOjQyICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgaW5jbHVkZSBsYXJnZV9mZF9zZXQuaCBiZWZvcmUgdHlwZWRlZmluZyBzb21ldGhpbmcgYmFzZWQgb24gdGhlCisgICBzdHJ1Y3R1cmUKIAogMjAwOS0wNi0wMyAxMjozNSAgZHRzMTIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKIAotICAgQ0hBTkdFUzogcGVybDogUEFUQ0hFUzogMjc5Mzg1NzogUmVwb3J0IGZhaWxlZCBhc3luY2hyb25vdXMgcmVxdWVzdHMuCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSEVTOiAyNzkzODU3OiBSZXBvcnQgZmFpbGVkIGFzeW5jaHJvbm91cworICAgcmVxdWVzdHMuCiAKIDIwMDktMDYtMDMgMTE6NDYgIGR0czEyCiAKQEAgLTM3NjksNyArNjM4NDIsOCBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYzoKIAotICAgUEFUQ0g6IDIxODI1OTI6IENsZWFuIHVwIHZhY21Db250ZXh0VGFibGUgYWZ0ZXIgdW5yZWdpc3RyYXRpb25zCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIxODI1OTI6IENsZWFuIHVwIHZhY21Db250ZXh0VGFibGUgYWZ0ZXIKKyAgIHVucmVnaXN0cmF0aW9ucwogICAgUGF0Y2ggc3VwcGxpZWQgYnkgSm9obiBGb3JzeXRoCiAKIDIwMDktMDYtMDMgMTA6MTIgIGR0czEyCkBAIC0zNzgwLDE4ICs2Mzg1NCwyMSBAQAogICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAogICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXB2My5jOgogCi0gICBDSEFOR0VTOiBQQVRDSDogMjc5NzI1MTogU3VwcG9ydCBtdWx0aXBsZSBpbml0aWFsaXNhdGlvbiBhbmQgc2h1dGRvd24sIGZpeCBtZW1vcnkgbGVha3MKKyAgIENIQU5HRVM6IFBBVENIOiAyNzk3MjUxOiBTdXBwb3J0IG11bHRpcGxlIGluaXRpYWxpc2F0aW9uIGFuZAorICAgc2h1dGRvd24sIGZpeCBtZW1vcnkgbGVha3MKICAgIFBhdGNoIHN1cHBsaWVkIGJ5IEl2b3NoCiAKIDIwMDktMDYtMDEgMTU6NTMgIGR0czEyCiAKICAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CiAKLSAgIENIQU5HRVM6IGRvY3M6IFBBVENIRVM6IDI3ODgwNzI6IERvY3VtZW50ICdsb2dtYXRjaCcgZnVuY3Rpb25hbGl0eS4KKyAgIENIQU5FR1M6IGRvY3M6IFBBVENIRVM6IDI3ODgwNzI6IERvY3VtZW50ICdsb2dtYXRjaCcKKyAgIGZ1bmN0aW9uYWxpdHkuCiAKIDIwMDktMDYtMDEgMTU6NTAgIGR0czEyCiAKICAgICogIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgc25tcGxpYi9taWIuYywgICAKKyAgICAgIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfcGFyc2VfYXJncy5jLCAgIAogICAgICAgc25tcGxpYi9zeXN0ZW0uYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCiAgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIApAQCAtMzc5OSwxNyArNjM4NzYsMzIgQEAKIAogMjAwOS0wNi0wMSAxNTozNyAgZHRzMTIKIAotICAgKiAgYWNsb2NhbC5tNCwgY29uZmlndXJlLCBsb2NhbC9zbm1wY29uZi5kaXIvc25tcGQtZGF0YS9tb25pdG9yLCAgIAorICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJwc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYywgY29uZmlndXJlLCAgIAorICAgICAgbG9jYWwvc25tcGNvbmYuZGlyL3NubXBkLWRhdGEvbW9uaXRvciwgbTQvbGlidG9vbC5tNCwgICAKICAgICAgIG1hbi9zbm1wZC5jb25mLjUuZGVmLCBtYW4vc25tcGQuZXhhbXBsZXMuNS5kZWY6CiAKLSAgIENIQU5HRVM6IGRvY3M6IFBBVENIOiAyNzk1NzM5OiBGaXggaW5jb3JyZWN0IGRpc2svZmlsZSBzaXplIGRlc2NyaXB0aW9ucyAmIHVuaXQgc3BlY2lmaWVycworICAgQ0hBTkdFUzogZG9jczogUEFUQ0g6IDI3OTU3Mzk6IEZpeCBpbmNvcnJlY3QgZGlzay9maWxlIHNpemUKKyAgIGRlc2NyaXB0aW9ucyAmIHVuaXQgc3BlY2lmaWVycwogCiAyMDA5LTA2LTAxIDEzOjExICBkdHMxMgogCiAgICAqIEVYQU1QTEUuY29uZi5kZWY6CiAKICAgIFJld29yayBleGFtcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBtYXRjaCBjdXJyZW50IHNubXBkLmNvbmYoNSkKLSAgIHN0cnVjdHVyZSwgYW5kIG1vcmUgY2xlYXJseSBpbGx1c3RyYXRlIGN1cnJlbnQgYmVzdCBwcmFjdGlzZS4KKyAgIHN0cnVjdHVyZSwKKyAgIGFuZCBtb3JlIGNsZWFybHkgaWxsdXN0cmF0ZSBjdXJyZW50IGJlc3QgcHJhY3Rpc2UuCisKKzIwMDktMDUtMzAgMDY6NTggIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliX21vZHVsZXMuYzoKKworICAgUmVtb3ZlIHVudXNlZCBpbmNsdWRlLgogCiAyMDA5LTA1LTI5IDA5OjE0ICBkdHMxMgogCkBAIC0zODE5LDE4ICs2MzkxMSw0MiBAQAogCiAyMDA5LTA1LTI5IDA5OjA4ICBkdHMxMgogCi0gICAqIGxvY2FsL3Bhc3N0ZXN0LnBsLCBtaWJzL01ha2VmaWxlLmluLCBtaWJzL05FVC1TTk1QLVBBU1MtTUlCLnR4dDoKKyAgICogIGxvY2FsL3Bhc3N0ZXN0LCBsb2NhbC9wYXNzdGVzdC5wbCwgbWlicy9NYWtlZmlsZS5pbiwgICAKKyAgICAgIG1pYnMvTkVULVNOTVAtUEFTUy1NSUIudHh0OgogCiAgICBSZXdvcmsgInBhc3N0ZXN0IiBleGFtcGxlcyB0byBmdWxseSB2YWxpZGF0ZSBHRVRORVhUIHJlcXVlc3RzLAogICAgYW5kIHVzZSBhIGxlZ2l0aW1hdGUgTUlCIHN0cnVjdHVyZSBmb3Igb3V0cHV0LgogICAgQWRkIGFuIGV4YW1wbGUgTUlCIHRvIGRlZmluZSB0aGF0IHN0cnVjdHVyZS4KIAotMjAwOS0wNS0yOCAxMjo1NSAgZHRzMTIKKzIwMDktMDUtMjggMTI6NDEgIGR0czEyCiAKICAgICogRkFROgogCi0gICBTeW5jaHJvbmlzZSB3aXRoIGxhdGVzdCBGQVEKLSAgIChpbmNsdWRpbmcgNS41IHJldmlzaW9ucyB1cCB0byBNSUJzIHNlY3Rpb24pCisgICBVcGRhdGVzIHRvIE1JQnMgc2VjdGlvbgorCisyMDA5LTA1LTI4IDExOjU2ICBkdHMxMgorCisgICAqIEZBUToKKworICAgVHdlYWsgcGhyYXNpbmcgb2YgYW4gKG92ZXJsb25nKSBxdWVzdGlvbiBpbiB0aGUgUGVybCBzZWN0aW9uCisKKzIwMDktMDUtMjggMTE6MzEgIGR0czEyCisKKyAgICogRkFROgorCisgICBOZXcgZW50cnkgaW4gdGhlIEFwcGxpY2F0aW9ucyBzZWN0aW9uCisKKzIwMDktMDUtMjggMTA6NDEgIGR0czEyCisKKyAgICogRkFROgorCisgICBVcGRhdGVzIHRvIEFwcGxpY2F0aW9ucyBzZWN0aW9uCisKKzIwMDktMDUtMjcgMTU6MjYgIGR0czEyCisKKyAgICogRkFROgorCisgICBVcGRhdGVzIHRvIEdFTkVSQUwgc2VjdGlvbi4KIAogMjAwOS0wNS0xOSAxNzo1MCAgYWxleF9iCiAKQEAgLTM4NDksNyArNjM5NjUsOSBAQAogCiAgICAqIHNubXBsaWIvc2NhcGkuYzoKIAotICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMjc4MjcwMDogYnVpbGQgZmFpbHVyZSB3aGVuIHVzaW5nIC0td2l0aC1wa2NzIG9uIFNvbGFyaXMKKyAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDI3ODI3MDA6IGJ1aWxkIGZhaWx1cmUgd2hlbiB1c2luZworICAgLS13aXRoLXBrY3Mgb24KKyAgIFNvbGFyaXMKIAogMjAwOS0wNS0xNSAxNDo1OSAganNhZnJhbmVrCiAKQEAgLTM4NzEsMjkgKzYzOTg5LDUwIEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBBbGxvdyAibW9uaXRvciIgdG8gaGFuZGxlIG5lZ2F0aXZlIHRocmVzaG9sZCB2YWx1ZXMuCisgICBDSEFOR0VTOiBzbm1wZDogQWxsb3cgIm1vbml0b3IiIHRvIGhhbmRsZSBuZWdhdGl2ZSB0aHJlc2hvbGQKKyAgIHZhbHVlcy4KICAgIFJlcG9ydGVkIGJ5IFJpY2hhcmQgR2lwcHMuCiAKIDIwMDktMDUtMTMgMjI6MzIgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3ZhY20uYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNzkxNDE3OiBmaXggc25tcGQgc2VnZmF1bHQgd2hlbiBydW4gd2l0aCAtREFMTAorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNzkxNDE3OiBmaXggc25tcGQgc2VnZmF1bHQgd2hlbiBydW4gd2l0aAorICAgLURBTEwKICAgIFBhdGNoIHN1cHBsaWVkIGJ5IFJvbiBSb3NrZW5zLgogCiAyMDA5LTA1LTEzIDA4OjAyICBkdHMxMgogCiAgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgogCi0gICBCcmluZyBkb2N1bWVudGF0aW9uIG9mIG5vdGlmaWNhdGlvbkV2ZW50IHN5bnRheCBpbnRvIGxpbmUgd2l0aCByZWFsaXR5LgotICAgKFVzZXMgIi1tIiByYXRoZXIgdGhhbiAiLW4iIHRvIHJlZ2lzdGVyIHN0YW5kYXJkIE1JQiBwYXlsb2FkIG9iamVjdHMpCisgICBCcmluZyBkb2N1bWVudGF0aW9uIG9mIG5vdGlmaWNhdGlvbkV2ZW50IHN5bnRheCBpbnRvIGxpbmUgd2l0aAorICAgcmVhbGl0eS4KKyAgIChVc2VzICItbSIgcmF0aGVyIHRoYW4gIi1uIiB0byByZWdpc3RlciBzdGFuZGFyZCBNSUIgcGF5bG9hZAorICAgb2JqZWN0cykKICAgIEluY29uc2lzdGVuY3kgcmVwb3J0ZWQgYnkgUmljaGFyZCBHaXBwcy4KIAotMjAwOS0wNS0xMiAyMzoyNiAgYWxleF9iCisyMDA5LTA1LTEwIDIxOjEyICBhbGV4X2IKIAotICAgKiBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCBwZXJsL2FnZW50L2FnZW50LnhzOgorICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZHNkay9NYWtlZmlsZS5pbiwgd2luMzIvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW46CiAKLSAgIFdpbjMyOiBCdWlsZCBmaXhlcyAtIGNoYW5nZSB1bnNpZ25lZCBsb25nIGxvbmcgdG8gdWludDY0X3QuCisgICBXaW4zMjogQWRkZWQgYXV0b21hdGljIG1hbmlmZXN0IG1lcmdpbmcgd2l0aCBtdC5leGUgZm9yIE1TVkMgMjAwOAorICAgZXRjLgorCisyMDA5LTA1LTA4IDEzOjEyICBhbGV4X2IKKworICAgKiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYzoKKworICAgQ2hhbmdlczogV2luMzI6IEFkZCBzdXBwb3J0IGZvciBXaW5kb3dzIDcsIFZpc3RhIGFuZCAyMDA4IGZvcgorICAgd2luRXh0RExMLgorCisyMDA5LTA1LTA4IDAyOjA3ICBhbGV4X2IKKworICAgKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46CisKKyAgIFdpbjMyOiBCdWlsZCBmaXhlcyBmb3IgRExMLgogCiAyMDA5LTA1LTA3IDIzOjAwICB0YW5kZXJzCiAKQEAgLTM5MDEsMTcgKzY0MDQwLDMxNSBAQAogCiAgICBidWlsZCBmaXggZm9yIEhQLVVYOiBpbmNsdWRlIDxzeXMvcGFyYW0uaD4gZm9yIERFVl9CU0laRQogCisyMDA5LTA1LTA3IDA1OjExICBuYmEKKworICAgKiBhZ2VudC9zbm1wX3BlcmwuaDoKKworICAgVXBzLCBtaXNzZWQgYSBuZXcgcHJvdG90eXBlIGhlYWRlcgorCisyMDA5LTA1LTA2IDIyOjI2ICBuYmEKKworICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgQSBtYW4gbGluZSBjYW5ub3Qgc3RhcnQgd2l0aCBhICcKKworMjAwOS0wNS0wNiAyMjowNyAgbmJhCisKKyAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgorCisgICBJUHY2IGFkcmVzc2VzIGFyZSBhIGJpdCBtb3JlIGNvbXBsaWNhdGVkIHRoZW4gMzJiaXRzCisKKzIwMDktMDUtMDYgMjI6MDYgIG5iYQorCisgICAqICBhZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmMsIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaCwgc25tcGxpYi9vaWRfc3Rhc2guYzoKKworICAgU3ByaW5rbGUgc29tZSBjb25zdC1uZXNzIHdoZXJlIHJlbGV2YW50CisKKzIwMDktMDUtMDYgMjI6MDIgIG5iYQorCisgICAqIHNubXBsaWIvc2NhcGkuYywgc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIFRyaXZpYWwgd2FybmluZyBmaXhlcworCisyMDA5LTA1LTA2IDIyOjAwICBuYmEKKworICAgKiBtaWJzL3JmY21pYnMuZGlmZjoKKworICAgSG1tbSwgSUFOQSBmaXhlZCB0aGVpciBidWcgdG9vCisKKzIwMDktMDUtMDYgMjE6NTkgIG5iYQorCisgICAqIFJFQURNRToKKworICAgVXBkYXRlIGVtYWlsIHRvIGN1cnJlbnQKKworMjAwOS0wNS0wNiAyMTo1OSAgbmJhCisKKyAgICogIGFnZW50L2FnZW50X3RyYXAuYywgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYywgICAKKyAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgYWdlbnQvc25tcF9wZXJsLmMsIGFnZW50L3NubXBfdmFycy5jLCAgIAorICAgICAgYWdlbnQvc25tcGQuYywgcGVybC9TTk1QL1NOTVAueHMsICAgCisgICAgICBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMsIHNubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jLCAKKyAgICAgICAgc25tcGxpYi9zbm1wX3NlcnZpY2UuYzoKKworICAgVHJpdmlhbCB3YXJuaW5nIGZpeGVzCisKKzIwMDktMDUtMDYgMjE6NDkgIG5iYQorCisgICAqIGFwcHMvc25tcHRyYXBkX2xvZy5jOgorCisgICBjb250ZXh0RW5naW5lSUQgaXMgYSBoZXhzdHJpbmcsIG5vdCBhbiBvYmplY3QgaWRlbnRpZmllcgorCisyMDA5LTA1LTA2IDIxOjQ1ICBuYmEKKworICAgKiAgYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMsIGFwcHMvZW5jb2RlX2tleWNoYW5nZS5jLCAgIAorICAgICAgc25tcGxpYi9hc24xLmMsIHNubXBsaWIvZGlyX3V0aWxzLmMsIHNubXBsaWIvaW50NjQuYywgICAKKyAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgICAKKyAgICAgIHNubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMsIHNubXBsaWIvc25tcF9hbGFybS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfY2xpZW50LmMsIHNubXBsaWIvc25tcHVzbS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdjMuYzoKKworICAgRml4IGZvcm1hdCB3YXJuaW5ncyBmcm9tIGRlYnVnIG91dHB1dAorCisyMDA5LTA1LTA2IDIwOjQ1ICBuYmEKKworICAgKiBtaWJzL3NtaXN0cmlwOgorCisgICBQcm9wZXJseSByZWNvZ25pemUgbWVzc2FnZSBzeW50YXggbW9kdWxlcyAodG8gYmUgYWJsZSB0byBpZ25vcmUKKyAgIHRoZW0pCisKKzIwMDktMDUtMDYgMjA6MzYgIG5iYQorCisgICAqIG1pYnMvcmZjbGlzdDoKKworICAgUkZDIHVwZGF0ZXMKKworMjAwOS0wNS0wNiAyMDozNSAgbmJhCisKKyAgICogbWlicy9yZmNtaWJzLmRpZmY6CisKKyAgIFN5bnRheCBmaXggZm9yIGN1cnJlbnQgSUFOQS1QUklOVEVSLU1JQgorCisyMDA5LTA1LTA2IDIwOjM0ICBuYmEKKworICAgKiBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dDoKKworICAgVXBkYXRlIHRvIGN1cnJlbnQgSUFOQSB2ZXJzaW9uCisKKzIwMDktMDUtMDQgMTM6NDcgIGFsZXhfYgorCisgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKKworICAgV2luMzI6IEJ1aWxkIGZpeGVzIGZvciBETEwuCisKKzIwMDktMDUtMDEgMTU6NDMgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgc25tcGxpYi9zbm1wX2RlYnVnLmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IFN0b3AgdXNpbmcgYSBmaXhlZCBzdHJpbmcgZm9yIGluZGVudGF0aW9uLiBSZW1vdmUKKyAgIHRoZSBERUJVR0lOREVOVCgpIG1hY3JvICh0aGF0IGRpZCBub3RoaW5nKS4gQ2hhbmdlIHRoZSBtZWFuaW5nIG9mCisgICB0aGUgaW50ZXJuYWwgX19EQkdJTkRFTlQoKSBtYWNybyB0byByZXR1cm4gdGhlIG51bWJlciBvZiBzcGFjZXMKKyAgIHRvIGluZGVudCBpbnN0ZWFkIG9mIGEgc3RyaW5nIHRoYXQgcmVwcmVzZW50IHRoZSBpbmRlbnRhdGlvbgorICAgbGV2ZWwuIERlcHJlY2F0ZSB0aGUgZGVidWdfaW5kZW50IGZ1bmN0aW9uLgorCisyMDA5LTA0LTMwIDA2OjU3ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsIGxvY2FsL21pYjJjLmludF93YXRjaC5jb25mOgorCisgICBDSEFOR0VTOiBzbm1wZDogVXNlIHN0YXRpYyB3YXRjaGVyX2luZm8gZm9yIGFsbCB3YXRjaGVkIHZhcmlhYmxlcworICAgYW5kIGluIGludF93YXRjaC4KKworMjAwOS0wNC0zMCAwNjo0MSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFNlcGFyYXRlIGluaXRpYWxpemF0aW9uIGZyb20gYWxsb2NhdGlvbiBmb3IKKyAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN0cnVjdHVyZXMgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UKKyAgIHN0YXRpY2FsbHkgYWxsb2NhdGVkIGRhdGEuCisKKzIwMDktMDQtMzAgMDY6MzQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBBZGQgbWlzc2luZyByZXR1cm4gdmFsdWUuCisKKzIwMDktMDQtMzAgMDA6MTggIGhhcmRha2VyCisKKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIGRvY3VtZW50IHRoZSBEVExTIHN1cHBvcnQ7IHNlbWkgZG9jdW1lbnQgdGhlIFNTSCBzdXBwb3J0IGFuZAorICAgZG9jdW1lbnQgdGhlIC1zIHN3aXRjaCB0byBtYW55IFZBQ00gc2V0dGluZ3MKKworMjAwOS0wNC0yOSAyMzo1NCAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBEVExTVURQRG9tYWluLmM6CisKKyAgIHByb3RlY3QgYWdhaW5zdCBjb25uZWN0aW9uIG9wZW5pbmcgZXJyb3JzIGFuZCBmcmVlIG1lbW9yeSBvbgorICAgZmFpbHVyZXMKKworMjAwOS0wNC0yOSAxMjoxOSAgYWxleF9iCisKKyAgICogIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyOiBVcGRhdGUgZGVmaW5lcyBmb3IgX1dJTjMyX1dJTk5UIGFuZCBOVERESV9WRVJTSU9OIHRvCisgICBzdXBwb3J0IFdpbmRvd3MgMjAwMCBhbmQgaGlnaGVyIGFuZCBhZGQgSVBWNiBkZWZpbmUgdG8gYWxsb3cgSVBWNgorICAgY29kZSB0byBjb21waWxlLgorCisyMDA5LTA0LTI4IDA2OjM0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jOgorCisgICBzbm1wZCwgTGludXg6IFJlbW92ZSBzb21lIHVudXNlZCB2YXJpYWJsZXMuCisKKzIwMDktMDQtMjggMDY6MDcgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYzoKKworICAgc25tcGQ6IEFkZCBtaXNzaW5nIGFyZ3VtZW50IHRvIHByaW50Zi1saWtlIGNhbGwuCisKKzIwMDktMDQtMjggMDU6NTMgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBzbm1wZDogTWFyayBtb3JlIG9pZHMgYXMgY29uc3QuCisKKzIwMDktMDQtMjggMDU6NTEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgUmV0dXJuIGEgdmFsdWUgZnJvbSBzcHJpbnRfcmVhbGxvY192YWx1ZSBldmVuIGlmIG5vIHN1YnRyZWUgaXMKKyAgIGxvY2F0ZWQuCisKKzIwMDktMDQtMjggMDE6MTIgIGFsZXhfYgorCisgICAqICBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgV2luMzI6IE1TVkM6IE9ubHkgdXNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gV2luWFAgb3IKKyAgIGJlZm9yZSAoSVBWNikgb3IgMjAwMCBvciBiZWZvcmUgKG5vIElQVjYpLgorCisyMDA5LTA0LTI2IDIzOjMwICBhbGV4X2IKKworICAgKiAgd2luMzIvTWFrZWZpbGUtYXBwcy5pbiwgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcGRzZGsvTWFrZWZpbGUuaW4sICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBXaW4zMjogUmVtb3ZlIG1hY2hpbmUgdHlwZSBvZiBJMzg2IGZyb20gTElOSzMyX0ZMQUdTIHRvIGFsbG93CisgICBjb21waWxpbmcgd2l0aCBNU1ZDIDIwMDggYXMgZWl0aGVyIDMyIG9yIDY0LWJpdC4KKworMjAwOS0wNC0yNiAxNzozOCAgYWxleF9iCisKKyAgICogIHdpbjMyL01ha2VmaWxlLWFwcHMuaW4sIHdpbjMyL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBkL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcGRzZGsvTWFrZWZpbGUuaW4sIHdpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBXaW4zMjogQnVpbGQgZml4ZXMgZm9yIE1TVkMgMjAwOC4gQ29weSBhbmQgY2xlYW51cAorICAgbWFuaWZlc3QgZmlsZXMuCisKKzIwMDktMDQtMjYgMTU6MjEgIGFsZXhfYgorCisgICAqICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFdpbjMyOiBSZS1lbmFibGUgcGFzcyBhbmQgcGFzc19wZXJzaXN0IENvdW50ZXI2NCBmb3IgTVNWQy4KKworMjAwOS0wNC0yNiAxNDozNCAgYWxleF9iCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaCwgc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jLCB3aW4zMi9idWlsZC5wbCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IFdpbjMyOiBCdWlsZCBmaXhlcyBmb3IgTVNWQyAyMDA4LiBJRlRZUEUgaXMgZGVmaW5lZCBieQorICAgTVNWQyAyMDA4LCBzbyBpbnRlcmZhY2VzLmMgdmFyaWFibGVzIHdlcmUgY2hhbmdlZCB0byBORVRTTk1QXy4KKwogMjAwOS0wNC0yNiAxMzowNiAgYWxleF9iCiAKICAgICogYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmM6CiAKICAgIFdpbjMyOiBVcGRhdGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGluIGNvbW1lbnRzLgogCisyMDA5LTA0LTI0IDEzOjI4ICBoYXJkYWtlcgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIGZpeCB0aGUgQVNOX09QQVFVRSBwYXRjaCB0aGF0IHdhcyBjb21taXRlZCB3aXRob3V0IHByb3BlciBkaWZmCisgICBjb250ZXh0CisKIDIwMDktMDQtMjQgMDc6MzEgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQ6CiAKLSAgIENIQU5HRVM6IEhQLVVYOiBCVUc6IDI3Nzk0NzI6IEZpbGVzeXN0ZW1zIG1pc3NpbmcgaW4gaHJTdG9yYWdlIHRhYmxlIG9uIEhQLVVYIDExLjMxCisgICBDSEFOR0VTOiBIUC1VWDogQlVHOiAyNzc5NDcyOiBGaWxlc3lzdGVtcyBtaXNzaW5nIGluIGhyU3RvcmFnZQorICAgdGFibGUgb24gSFAtVVggMTEuMzEKICAgIChhbGxvdyBmb3IgbW50dGFiIHRoYXQgaXMgYSBjaGFyYWN0ZXIgc3BlY2lhbCBkZXZpY2UpCiAKIDIwMDktMDQtMjQgMDE6MzYgIGFsZXhfYgpAQCAtMzkyMSwxOCArNjQzNTgsNzggQEAKIAogICAgQ0hBTkdFUzogV2luMzI6IEJVRzogMjc3OTU0MSBGaXhlZCBoYW5kbGUgbGVhayBpbiBwYXNzX3BlcnNpc3QuCiAKLTIwMDktMDQtMjMgMjM6MTQgIHRhbmRlcnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKLQotICAgQ0hBTkdFUzogQUlYOiBCVUc6IDI3MTI2NzA6IEFnZW50IGNyYXNoZXMgb24gQUlYIHdpdGggaHJTdG9yYWdlCitDaGFuZ2VzOiBWNS41LnByZTEgLT4gVjUuNS5wcmUyCiAKIDIwMDktMDQtMjMgMjI6NTMgIGhhcmRha2VyCiAKLSAgICogc25tcGxpYi9zbm1wX2FsYXJtLmM6CisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaCwgc25tcGxpYi9zbm1wX2FsYXJtLmM6CiAKICAgIGZpeCBDKysgc3R5bGUgY29tbWVudHMKIAorMjAwOS0wNC0yMyAyMjoyNSAgaGFyZGFrZXIKKworICAgKiAgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsIG1hbi9uZXRzbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jb250YWluZXJfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9tb25pdG9yX2NhbGxiYWNrX2hlYWRlcl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX251bGxfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfb2xkX2FwaS4zLCBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2NhbGFyLjMsIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsIG1hbi9uZXRzbm1wX3RhYmxlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3cuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3Rvb2xzLmguMywgbWFuL25ldHNubXBfdXRpbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKworICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKworMjAwOS0wNC0yMyAyMjoyMyAgaGFyZGFrZXIKKworICAgKiAgbWFuL2NvbmZpZ19hcGkuMywgbWFuL3BkdV9hcGkuMywgbWFuL3Nlc3Npb25fYXBpLjMsICAgCisgICAgICBtYW4vdmFyYmluZF9hcGkuMzoKKworICAgaW5pdGlhbCBkb3h5Z2VuIGV4dHJhY3RzIGZvciB0aGUgbmV3IGhlYWRlcnMKKworMjAwOS0wNC0yMyAyMjoxOSAgaGFyZGFrZXIKKworICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCBkaXN0L01ha2VmaWxlLCAgIAorICAgICAgZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICBWZXJzaW9uIG51bWJlciB1cGRhdGUKKwogMjAwOS0wNC0yMyAyMjoxNiAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgpAQCAtMzk0MSwyOCArNjQ0MzgsOTEgQEAKIAogMjAwOS0wNC0yMyAyMjoxMCAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNDoKIAotICAgQ0hBTkdFUzogSFAtVVg6IEJVRzogMjc3OTQ3MjogRmlsZXN5c3RlbXMgbWlzc2luZyBpbiBoclN0b3JhZ2UgdGFibGUgb24gSFAtVVggMTEuMzEKKyAgIENIQU5HRVM6IEhQLVVYOiBCVUc6IDI3Nzk0NzI6IEZpbGVzeXN0ZW1zIG1pc3NpbmcgaW4gaHJTdG9yYWdlCisgICB0YWJsZSBvbgorICAgSFAtVVggMTEuMzEKIAogMjAwOS0wNC0yMyAyMTo0OCAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYzoKIAotICAgQ0hBTkdFUzogU29sYXJpczogUEFUQ0g6IDI3NTE1ODg6IEluY29uc2lzdGVudCBkYXRhIChlLmcuIFVEUC9UQ1AgTUlCIHNjYWxhciB2YWx1ZXMgb2YgemVybykgY2FuIGJlIHJlcG9ydGVkIG9uIFNvbGFyaXMgMTBVNCsKKyAgIENIQU5HRVM6IFNvbGFyaXM6IFBBVENIOiAyNzUxNTg4OiBJbmNvbnNpc3RlbnQgZGF0YSAoZS5nLiBVRFAvVENQCisgICBNSUIKKyAgIHNjYWxhciB2YWx1ZXMgb2YgemVybykgY2FuIGJlIHJlcG9ydGVkIG9uIFNvbGFyaXMgMTBVNCsKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEFuZGVycyBQZXJzc29uCiAKKzIwMDktMDQtMjMgMTc6MzAgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE5MDE3NjQ6IGZyb20ga3Jpc3p0b2Zvcm8gZm9yIHN1cHBvcnRpbmcKKyAgIGxvZ3dhdGNoIGZpbGVzIHRoYXQgYXJlIGRhdGUgYmFzZWQKKworMjAwOS0wNC0yMyAxNzoyMiAgaGFyZGFrZXIKKworICAgKiBwZXJsL1NOTVAvU05NUC5wbSwgcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIE5FV1M6IHBlcmw6IFBBVENIIDE5NTYxOTM6IGZyb20gY2Fjb3lsZTogYmV0YSB0aHJlYWRhYmxlIHBlcmwKKyAgIG1vZHVsZSBjb2RlIGZvciBTTk1QdjEvU05NUHYyYyB1c2FnZS4KKwogMjAwOS0wNC0yMyAxNjo1NyAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmM6CiAKLSAgIENIQU5HRVM6IHNvbGFyaXM6IFBBVENIOiAyMDEyNDA0OiBkZWFsIHdpdGggbW9yZSB0aGFuIDEwIGludGVyZmFjZXMuIE5ldyBoYXJkY29kZWQgbGltaXQgaXMgNTAuIEEgYmV0dGVyIHNjYWxpbmcgcGF0Y2ggd291bGQgYmUgYXBwcmVjaWF0ZWQgOi0pCisgICBDSEFOR0VTOiBzb2xhcmlzOiBQQVRDSDogMjAxMjQwNDogZGVhbCB3aXRoIG1vcmUgdGhhbiAxMAorICAgaW50ZXJmYWNlcy4gTmV3IGhhcmRjb2RlZCBsaW1pdCBpcyA1MC4gQSBiZXR0ZXIgc2NhbGluZyBwYXRjaAorICAgd291bGQgYmUgYXBwcmVjaWF0ZWQgOi0pCisKKzIwMDktMDQtMjMgMTY6NDcgIGhhcmRha2VyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgZG9jdW1lbnQgdGhhdCB0aGUgZXRoZXJsaWtlLW1pYiBoYXMgYW4gaW1wbGVtZW50YXRpb24KKworMjAwOS0wNC0yMyAxNjo0MCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYiwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2VudW1zLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfb2lkcy5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjA1MzI3MzogZnJvbSBuYXJlbmRyYV9rX2RlbGwgdG8gaW1scGVtZW50CisgICB0aGUgZXRoZXJsaWtlIG1pYiAoYXQgbGVhc3Qgb24gbGludXgpCiAKIDIwMDktMDQtMjMgMTY6MzUgIGhhcmRha2VyCiAKICAgICogbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtb2lkcy5tMmM6CiAKLSAgIENIQU5HRVM6IG1pYjJjOiBQQVRDSDogMjEzNjQzNzogbWFrZSBGTEFHIGRlZmluZXMgbW9yZSA2NGJpdCBmcmllbmRseSB3aGVuIGh1Z2UgdGFibGVzIGFyZSBlbmNvdW50ZXJlZAorICAgQ0hBTkdFUzogbWliMmM6IFBBVENIOiAyMTM2NDM3OiBtYWtlIEZMQUcgZGVmaW5lcyBtb3JlIDY0Yml0CisgICBmcmllbmRseSB3aGVuIGh1Z2UgdGFibGVzIGFyZSBlbmNvdW50ZXJlZAogCiAyMDA5LTA0LTIzIDE2OjI3ICBoYXJkYWtlcgogCkBAIC0zOTc1LDEzICs2NDUzNSwxNSBAQAogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudC5weToKIAotICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjA3NDgxNzogZnJvbSBmZW5uZXIgdG8gZml4IHJlZ2V4cCBlbmdpbmUgQ1BVIHBlcmZvcm1hbmNlIGlzc3VlcworICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjA3NDgxNzogZnJvbSBmZW5uZXIgdG8gZml4IHJlZ2V4cCBlbmdpbmUKKyAgIENQVSBwZXJmb3JtYW5jZSBpc3N1ZXMKIAogMjAwOS0wNC0yMyAxNjoxNCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMTYyNjUyOiBwYXRjaCB0byBmaXggc2ltcGxlIGhyZnMgY2hlY2tzIHdoZW4gTkZTIGlzIGluIHVzZS4KKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjE2MjY1MjogcGF0Y2ggdG8gZml4IHNpbXBsZSBocmZzIGNoZWNrcworICAgd2hlbiBORlMgaXMgaW4gdXNlLgogCiAyMDA5LTA0LTIzIDE2OjExICBoYXJkYWtlcgogCkBAIC00MDMzLDYgKzY0NTk1LDU4IEBACiAKICAgIEZpeCBtZW1vcnkgbGVhayBpbiBTQ1RQIGNvbnRhaW5lcnMuCiAKKzIwMDktMDQtMjMgMDg6MjkgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgaXMgcHJvYmFibHkgYmVzdCByZWdhcmRlZCBhcyBhbiAib3BhcXVlIgorICAgZGF0YQorICAgc3RydWN0dXJlLCBhbmQgaXNuJ3QgcmVhbGx5IGludGVuZGVkIGZvciBkaXJlY3QgbWFuaXB1bGF0aW9uLgorICAgTW92ZSBpdCBiYWNrIGludG8gdGhlIDxsaWJyYXJ5L2xhcmdlX2ZkX3NldC5oPiBoZWFkZXIgZmlsZS4KKyAgIChMaWtlIGl0IHdhcyBiZWZvcmUgRGF2ZSBzdHVjayBoaXMgb2FyIGluLi4uLikKKworMjAwOS0wNC0yMyAwODoxOSAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgRnVlcnRoZXIgaW1wcm92ZW1lbnRzIHRvIHRoZSBsYXJnZSBGRCBzZXQgc3VwcG9ydAorICAgKFNlZSBwYXRjaCAjMjc3Mjc4NykKKworMjAwOS0wNC0yMyAwNjo0NSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmg6CisKKyAgIGJ1aWxkaW5nOiBVc2UgY29uZmlnX2Vycm9yKC4uLikgaW5zdGVhZCBvZgorICAgY29uZmlnX3JlcXVpcmUobm9uLWV4aXN0aW5nKSB0byBnZXQgYmV0dGVyIGVycm9yIG1lc3NhZ2VzLgorCisyMDA5LTA0LTIzIDA2OjQxICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oOgorCisgICBzbm1wbGliLCBMaW51eDogTW92ZSBnZXRfcGlkX2Zyb21faW5vZGUgdG8gaXQncyBvd24gZmlsZSBhbmQgb25seQorICAgY29tcGlsZSBpdCBpZiBuZWVkZWQsIGFsc28gcmVuYW1lIGl0IHRvCisgICBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZS4KKworMjAwOS0wNC0yMyAwNDozMyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oLCBhZ2VudC9zbm1wZC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI0MzEzNTMgZnJvbSBobnJvc2UgdG8gbWFrZSBzb21lIEMrKworICAgY29tcGlsZXJzIGhhcHBpZXIKKwogMjAwOS0wNC0yMyAwMzoyNyAgaGFyZGFrZXIKIAogICAgKiBzbm1wbGliL3NubXBfYWxhcm0uYzoKQEAgLTQwNDAsMjcgKzY0NjU0LDI2NCBAQAogICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI1MDU0ODg6IGZyb20gZGFib2tleSB0byBmaXggYWxhcm1zIG5vdAogICAgYmVpbmcgdHJpZ2dlcmVkIGF0IHRoZSByaWdodCB0aW1lcyBkdWUgdG8gbGFyZ2UgY2xvY2sgc2tld3MuCiAKKzIwMDktMDQtMjMgMDA6MDEgIGhhcmRha2VyCisKKyAgICogIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oLCBtYW4vc25tcG5ldHN0YXQuMS5kZWY6CisKKyAgIE5FV1M6IHNubXBuZXRzdGF0OiBQQVRDSDogMjU2NDUzODogZnJvbSBhaG1ha2UgdG8gc3VwcG9ydCBHRVRCVUxLCisgICBpbiB2MmMrIHNubXAgdmVyc2lvbnMKKwogMjAwOS0wNC0yMiAyMzo0OSAgaGFyZGFrZXIKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCAgIAotICAgICAgYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAgIAotICAgICAgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaCwgc25tcGxpYi9zeXN0ZW0uYzoKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvcm91dGUuYywgc25tcGxpYi9zeXN0ZW0uYzoKIAogICAgQ0hBTkdFUzogcG9ydHM6IFBBVENIOiAyNjg4MzQyOiBmcm9tIGFobWFrZSB0byBmaXggdmFyaW91cwogICAgY29tcGlsZXIgd2FybmluZwogCisyMDA5LTA0LTIyIDIzOjIzICBoYXJkYWtlcgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyNzYzNzE6IGZyb20gZmhldyB0byBhbGxvdyBwZXJsIHRvIHVzZQorICAgT1BBUVVFcworCisyMDA5LTA0LTIyIDIzOjE3ICBoYXJkYWtlcgorCisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDI3NzU4MDA6IGZyb20gQWRhbSBSb21hbmVrIHRvIGFsbG93CisgICBweXRob24gdGhyZWFkaW5nIHRvIGNvbnRpbnVlIHdoZW4gYSByZXF1ZXN0IGlzIHNlbnQKKwogMjAwOS0wNC0yMiAyMjoxMSAgYWxleF9iCiAKICAgICogUkVBRE1FLCBSRUFETUUud2luMzI6CiAKICAgIFVwZGF0ZSBUSEFOS1Mgc2VjdGlvbi4KIAorMjAwOS0wNC0yMiAyMToyMSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIEZvbGQgdGhlIGZ1bmN0aW9uIGV4dHJhY3RfaW5vZGUuIHdpdGggb25seSBvbmUgdXNlciwgaW50byBpdCdzCisgICB1c2VyLgorICAgUmVtb3ZlIHRoZSAjZGVmaW5lIEZJTEVfRElTUCwgd2l0aCBvbmx5IG9uZSB1c2VyLCB3aXRoIHRoZSBhY3R1YWwKKyAgIHZhbHVlLgorCisyMDA5LTA0LTIyIDIxOjAzICBtYWdmcgorCisgICAqIGFnZW50L3NubXBkLmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgd2l0aCBTTVVYIGVuYWJsZWQuCisKKzIwMDktMDQtMjIgMTM6NDMgIGpzYWZyYW5laworCisgICAqIFJFQURNRS5hZ2VudC1taWJzOgorCisgICBBZGQgYSBub3RlIGhvdyB0aGUgbmV3IFJNT04tTUlCIGltcGxlbWVudGFpb24gd29ya3MKKworMjAwOS0wNC0yMiAxMzo0MSAgZHRzMTIKKworICAgKiBtYW4vdmFyYmluZF9hcGkuMy5kZWY6CisKKyAgIEZpbGwgb3V0IHRoZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBWYXJiaW5kLXJlbGF0ZWQgQVBJIGNhbGxzLgorCisyMDA5LTA0LTIyIDEzOjM3ICBqc2FmcmFuZWsKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL3Jtb24tbWliLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIuaCwgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZW51bXMuaCwgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX29pZHMuaCwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjEwMzQ5MjogaW1wbGVtZW50CisgICBSTU9OLU1JQjo6ZXRoZXJTdGF0c0phYmJlcnMKKyAgIFBhdGNoIGZyb20gTmFyZW5kcmEgSy4sIFNhbmRlZXAgSy4gU2hhbmRpbHlhIGFuZCBTaHlhbSBJeWVyCisKIDIwMDktMDQtMjIgMTA6MDggIGR0czEyCiAKICAgICogbWFuL21pYl9hcGkuMy5kZWY6CiAKICAgIENvcnJlY3QgYSBzZXJpb3VzbHkgbWlzbGVhZGluZyAoaS5lLiB3cm9uZykgZGVzY3JpcHRpb24gb2YgdGhlCi0gICBwdXJwb3NlIGFuZCBiZWhhdmlvdXIgb2YgdGhlIHByaW50X2Rlc2NyaXB0aW9uIGZhbWlseSBvZiBjYWxscy4KKyAgIHB1cnBvc2UKKyAgIGFuZCBiZWhhdmlvdXIgb2YgdGhlIHByaW50X2Rlc2NyaXB0aW9uIGZhbWlseSBvZiBjYWxscy4KKworMjAwOS0wNC0yMiAwOTozMiAgZHRzMTIKKworICAgKiBtYW4vbWliX2FwaS4zLmRlZjoKKworICAgRnVydGhlciBwb2xpc2hpbmcgb2YgdGhlIGRlc2NyaXB0aW9ucyBvZiBNSUItcmVsYXRlZCBBUEkgY2FsbHMuCisKKzIwMDktMDQtMjIgMDc6MzkgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBSZW1vdmUgdW5uZWNlc3NhcnkgcmFuZ2UgY2hlY2tzLgorICAgKFRoZXNlIGFyZSBoYW5kbGVkIHdpdGhpbiB0aGUgbGFyZ2VfZmRfc2V0IHJvdXRpbmVzIHRoZW1zZWx2ZXMpLgorCisyMDA5LTA0LTIxIDIzOjI3ICBhbGV4X2IKKworICAgKiAgd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiwgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgICAKKyAgICAgIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluLCAgIAorICAgICAgd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwOgorCisgICB3aW4zMjogRml4IFdpbmRvd3MgYnVpbGQgZW52aXJvbm1lbnQgdG8gc3VwcG9ydCBwYXRjaCAyNzcyNzg3LgorCisyMDA5LTA0LTIxIDE1OjMzICBkdHMxMgorCisgICAqICBhZ2VudC9zbm1wZC5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBzbm1wbGliL01ha2VmaWxlLmluLCBzbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYywgICAKKyAgICAgIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgUmV2aXNlZCB2ZXJzaW9uIG9mIHBhdGNoICMyNzcyNzg3CisKKzIwMDktMDQtMjEgMTU6MTUgIGR0czEyCisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaCwgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oLCAgIAorICAgICAgc25tcGxpYi9NYWtlZmlsZS5pbiwgc25tcGxpYi9sYXJnZV9mZF9zZXQuYywgc25tcGxpYi9zbm1wX2FwaS5jLCAgCisgICAgICAgd2luMzIvbGlic25tcC9saWJzbm1wLmRzcDoKKworICAgVW5kbyByZXZpc2lvbiAxNzUxNQorICAgKGJyb2tlbi9pbmNvbXBsZXRlIHBhdGNoKQorCisyMDA5LTA0LTIxIDE0OjM3ICBkdHMxMgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaCwgICAKKyAgICAgIHNubXBsaWIvTWFrZWZpbGUuaW4sIHNubXBsaWIvbGFyZ2VfZmRfc2V0LmMsIHNubXBsaWIvc25tcF9hcGkuYywgIAorICAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3A6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAyNzcyNzg3OiBDbGVhbmVyIGFwcHJvYWNoIHRvIGhhbmRsaW5nCisgICBsYXJnZSBmZF9zZXRzLgorICAgQmFzZWQgb24gcGF0Y2ggc3VwcGxpZWQgYnkgQmFydCBWYW4gQXNzY2hlLgorCisyMDA5LTA0LTIxIDE0OjM0ICBkdHMxMgorCisgICAqIG1hbi9NYWtlZmlsZS5pbjoKKworICAgUHJvcGVybHkgZ2VuZXJhdGUgbmV3IGNvcmUgQVBJIG1hbiBwYWdlcy4KKworMjAwOS0wNC0yMSAwOTozOCAgZHRzMTIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgsIGluY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oLCBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmg6CisKKyAgIEZpcnN0LWN1dCBhdCBpZGVudGlmeWluZyB0aGUgY29yZSBOZXQtU05NUCBBUEkgY2FsbHMuCisgICBNb3ZlIHRoZXNlIGludG8gdGhlIGFwcHJvcHJpYXRlIHRvcC1sZXZlbCBoZWFkZXIgZmlsZXMuCisKKzIwMDktMDQtMjEgMDk6MzYgIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL2NvbmZpZ19hcGkuMy5kZWYsIG1hbi9yZWFkX2NvbmZpZy4zLmRlZiwgICAKKyAgICAgIG1hbi9zZXNzaW9uX2FwaS4zLmRlZiwgbWFuL3NubXBfYXBpLjMuZGVmOgorCisgICBSZW5hbWUgY29uZmlnL3Nlc3Npb24gQVBJIG1hbiBwYWdlcywgaW4gbGluZSB3aXRoIG90aGVyIGNvcmUgQVBJCisgICBzdHJ1Y3R1cmUuCisKKzIwMDktMDQtMjEgMDk6MzIgIGR0czEyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL21pYl9hcGkuMy5kZWYsIG1hbi9wZHVfYXBpLjMuZGVmLCAgIAorICAgICAgbWFuL3JlYWRfY29uZmlnLjMuZGVmLCBtYW4vc25tcF9hcGkuMy5kZWYsIG1hbi92YXJiaW5kX2FwaS4zLmRlZjoKKworICAgRG9jdW1lbnQgKG9yIHJlc3RydWN0dXJlKSB0aGUgY29yZSBBUEkgZWxlbWVudHMuCisgICBBbGlnbiB0aGlzIG9yZ2FuaXNhdGlvbiB3aXRoIHRoZSBmaXJzdC1jdXQgcmVzdHJ1Y3R1cmluZworICAgb2YgdGhlIG1haW4gaGVhZGVyIGZpbGVzLgorCisyMDA5LTA0LTIwIDEwOjIzICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgU2tpcCBmaWxlIGhhbmRsZXMgdGhhdCBhcmUgdG9vIGxhcmdlIGZvciBmZF9zZXQgdG8gY29wZSB3aXRoLgorICAgQSBzaW1wbGUgZml4IGZvciB0aGUgaW1tZWRpYXRlIHByb2JsZW0gYWRkcmVzc2VkIGJ5IHBhdGNoCisgICAjMTYyNzA0OS4KKworMjAwOS0wNC0yMCAxMDoxOSAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBSZXZlcnQgcGF0Y2ggIzE2MjcwNDkgKGV4dGVuc2lvbiB0byBkZWFsIHdpdGggbGFyZ2UgZmlsZQorICAgaGFuZGxlcnMpLgorICAgU2VlIHRoZSBkaXNjdXNzaW9uIG9uIHRoYXQgdHJhY2tlciBlbnRyeSBmb3IgYmFja2dyb3VuZCBhcyB0bworICAgd2h5LgorCisyMDA5LTA0LTIwIDAwOjU5ICBhbGV4X2IKKworICAgKiAgUkVBRE1FLndpbjMyLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oLCBwZXJsL2FnZW50L2FnZW50LnhzLCAgIAorICAgICAgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9saWJhZ2VudC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4sICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnMvTWFrZWZpbGUuaW4sIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgCisgICAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluLCAgIAorICAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgorCisgICB3aW4zMjogQnVpbGQgZml4ZXMgZm9yIFdpbmRvd3MuIHBhc3MgYW5kIHBhc3NfcGVyc2lzdCBzdGlsbCBuZWVkCisgICB0byBiZSBmaXhlZCB0byBzdXBwb3J0IENvdW50ZXI2NCBvbiBXaW5kb3dzLgorCisyMDA5LTA0LTIwIDAwOjQ4ICBhbGV4X2IKKworICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgd2luMzI6IFN5bmMgbmV0LXNubXAtY29uZmlnLmguaW4gYW5kIG5ldC1zbm1wLWNvbmZpZy5oCisKKzIwMDktMDQtMTcgMjE6MjEgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCBsdG1haW4uc2gsIG00L2xpYnRvb2wubTQsIAorICAgICAgICBtNC9sdG9wdGlvbnMubTQsIG00L2x0c3VnYXIubTQsIG00L2x0dmVyc2lvbi5tNDoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFVwZ3JhZGUgbGlidG9vbCB2ZXJzaW9uIHRvIDIuMi42IGluIG9yZGVyIHRvIHdvcmsKKyAgIGFyb3VuZCBhIGJ1Z2xldCB0aGF0IG1hZGUgYXV0b3JlY29uZiAtdmlmIGVyYXNlIGNvbmZpZy5zdWIgYW5kCisgICBjb25maWcuZ3Vlc3MuCisKKzIwMDktMDQtMTQgMjE6NTkgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9wYXJzZS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE5NzY3NzI6IENoYW5nZWQgdGhlIG1pYiBwYXJzZXIgdG8gaGFuZGxlCisgICBsb25nIGJpbmFyeSBhbmQgaGV4IHN0cmluZ3MuCisKKzIwMDktMDQtMTEgMTI6NTIgIHJzdG9yeQorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBzdWdnZXN0IHRydW5jYXRpb24gb2YgQ2hhbmdlTG9nLnJlYWxseWFkZAogCiAyMDA5LTA0LTEwIDIzOjE4ICBhbGV4X2IKIApAQCAtNDA5NSw3ICs2NDk0Niw4IEBACiAKIDIwMDktMDQtMTAgMjE6NDUgIGFsZXhfYgogCi0gICAqIHdpbjMyL0NvbmZpZ3VyZToKKyAgICogIHdpbjMyL0NvbmZpZ3VyZSwgd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0LCAgIAorICAgICAgd2luMzIvZGlzdC9SRUFETUUudHh0OgogCiAgICBXaW4zMjogTWlub3IgYnVpbGQgYW5kIHJlYWRtZSB1cGRhdGVzLgogCkBAIC00MTA3LDI0ICs2NDk1OSwyNyBAQAogICAgTkVXUzogV2luMzI6IFBBVENIIDI2ODYyNDg6IEFwcGxpZWQgcGF0Y2ggYnkgQmFydCBWYW4gQXNzY2hlCiAgICB3aGljaCBmaXhlcyBzZXZlcmFsIHdpbkV4dERMTCBidWdzLgogCi0yMDA5LTA0LTEwIDIwOjE0ICByc3RvcnkKKzIwMDktMDQtMTAgMjA6MTcgIHJzdG9yeQogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgogCi0gICByZXN0b3JlIGFubm95aW5nIGxvZyBtZXNzYWdlLCBidXQgZml4IGNhdXNlIG9mIGl0IG9uICFmcmVlYnNkIHN5c3RlbXMKKyAgIHJlc3RvcmUgYW5ub3lpbmcgbG9nIG1lc3NhZ2UsIGJ1dCBmaXggY2F1c2Ugb2YgaXQgb24gIWZyZWVic2QKKyAgIHN5c3RlbXMKIAogMjAwOS0wNC0wOSAxMjoyOCAgZHRzMTIKIAogICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTU1MDczMDogUmVwb3J0IGVycm9ycyBmcm9tIGl0ZXJhdG9yLWJhc2VkIGhhbmRsZXJzLgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNTUwNzMwOiBSZXBvcnQgZXJyb3JzIGZyb20gaXRlcmF0b3ItYmFzZWQKKyAgIGhhbmRsZXJzLgogICAgQmFzZWQgb24gYSBwYXRjaCBwcm92aWRlZCBieSBXYXluZSBHbGFudHoKIAogMjAwOS0wNC0wOSAxMTo0MSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIxMjQyODg6IEZpeCBzZXR0aW5nIG9mIHVzbVVzZXJQcml2UHJvdG9jb2wgYXQgY3JlYXRpb24uCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIxMjQyODg6IEZpeCBzZXR0aW5nIG9mCisgICB1c21Vc2VyUHJpdlByb3RvY29sIGF0IGNyZWF0aW9uLgogICAgTG9naWMgYnVnLCByZXBvcnRlZCBieSBSYW1lc2ggS290YWJhZ2kKIAogMjAwOS0wNC0wOSAwOToxMiAgZHRzMTIKQEAgLTQxNDEsNDcgKzY0OTk2LDk4IEBACiAgICBDSEFOR0VTOiBweXRob246IFBBVENIOiAyMjYwODI4OiBGaXggcHl0aG9uIHNubXB3YWxrIG1lbW9yeSBsZWFrCiAgICBQYXRjaCBwcm92aWRlZCBieSBHYWJyaWVsZSBNZXNzaW5lbwogCisyMDA5LTA0LTA5IDA4OjU4ICBkdHMxMgorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDIyNzIzNDc6IEltcGxlbWVudCAiaW1wbGllZCIgaW4gTUlCIGhhc2gKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJpbGwgRmVubmVyCisKIDIwMDktMDQtMDkgMDg6NTQgIGR0czEyCiAKICAgICogbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZjoKIAotICAgQ0hBTkdFUzogbWliMmM6IFBBVENIOiAyMzE2MTI3OiBGaXggYnVnIGluIGl0ZXJhdGVfYWNjZXNzIGdlbmVyYXRlZCBjb2RlLgorICAgQ0hBTkdFUzogbWliMmM6IFBBVENIOiAyMzE2MTI3OiBGaXggYnVnIGluIGl0ZXJhdGVfYWNjZXNzCisgICBnZW5lcmF0ZWQgY29kZS4KKworMjAwOS0wNC0wOSAwODo0OCAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNDM1NjgxOiBFbmFibGUgaWYtbWliIHJld3JpdGUgKHdpdGgKKyAgIHN5c2N0bCBiYWNrZW5kKSBvbiBOZXRCU0QKIAogMjAwOS0wNC0wOSAwODo0NCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jOgogCi0gICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI0MzU3OTM6IFN1cHBvcnQgNjQtYml0IElGLU1JQiBjb3VudGVycyBvbiBzeXNjdGwgKCpCU0QpIHN5c3RlbXMuCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI0MzU3OTM6IFN1cHBvcnQgNjQtYml0IElGLU1JQiBjb3VudGVycyBvbgorICAgc3lzY3RsICgqQlNEKSBzeXN0ZW1zLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgSmFuIEFuZHJlcwogCisyMDA5LTA0LTA5IDA4OjAwICB0YW5kZXJzCisKKyAgICogcGVybC9hZ2VudC9hZ2VudC54czoKKworICAgZml4IGNvbXBpbGF0aW9uIHdhcm5pbmdzCisKKzIwMDktMDQtMDggMjM6MTcgIHRhbmRlcnMKKworICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgorCisgICBtb3ZlIGNvbW1lbnRzIHRvIGEgcGxhY2Ugd2hlcmUgdGhleSBhcmUgbGVnYWwKKworMjAwOS0wNC0wOCAyMzowMyAgdGFuZGVycworCisgICAqIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIC0gcmVuYW1lIG5ldyBnZXRSZXF1ZXN0b3JJcCB0byBnZXRTb3VyY2VJUCBhbmQgZ2V0VGFyZ2V0SXAgdG8KKyAgIGdldERlc3RJcAorICAgLSByZW1pbmQgdGhhdCB0aGlzIGlzIGZ1bGx5IHRyYW5zcG9ydC1zcGVjaWZpYywgaS5lLiBVRFAvSVB2NAorICAgb25seSEKKwogMjAwOS0wNC0wOCAxNjowMCAgZHRzMTIKIAogICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CiAKLSAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjM4NDc3OTogRml4IGhhbmRsaW5nIG9mIEdldEJ1bGsgd2l0aCBOPjAsTT09MAorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMzg0Nzc5OiBGaXggaGFuZGxpbmcgb2YgR2V0QnVsayB3aXRoCisgICBOPjAsTT09MAogICAgUGF0Y2ggcHJvdmlkZWQgYnkgQW5ndXMgU2Fsa2VsZAogCiAyMDA5LTA0LTA4IDE1OjUyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKIAotICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNDA2Mzc4OiBGaXggaHJTV1J1blBlcmZNZW0gb24gNjQtYml0IFNvbGFyaXMgc3lzdGVtcworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyNDA2Mzc4OiBGaXggaHJTV1J1blBlcmZNZW0gb24gNjQtYml0CisgICBTb2xhcmlzIHN5c3RlbXMKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IE5Ud29PCiAKIDIwMDktMDQtMDggMTU6NDggIGR0czEyCiAKICAgICogc25tcGxpYi9taWIuYzoKIAotICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI0Nzk3MDA6IEZpeCB6b25lZCBJUCBhZGRyZXNzIHVzZWQgYXMgdGFibGUgaW5kaWNlcworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI0Nzk3MDA6IEZpeCB6b25lZCBJUCBhZGRyZXNzIHVzZWQgYXMKKyAgIHRhYmxlIGluZGljZXMKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJyaWFuIFJldGZvcmQuCiAKIDIwMDktMDQtMDggMTU6MzMgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2xvZ2dpbmcuYzoKIAotICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDI0OTIzNzc6IEZpeCB0eXBvL2J1ZyBpbiBzbm1wX2VuYWJsZV9jYWxsYmFjaygpCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjQ5MjM3NzogRml4IHR5cG8vYnVnIGluCisgICBzbm1wX2VuYWJsZV9jYWxsYmFjaygpCiAgICBSZXBvcnRlZCBieSBqb3ljZWFubWFjaGluZQogCisyMDA5LTA0LTA4IDE1OjI5ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDI1MDcyNDk6IHNjdHAtbWliIHN1cHBvcnQgZm9yIEZyZWVCU0QuCisKIDIwMDktMDQtMDggMTU6MTYgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgpAQCAtNDE5NCw3ICs2NTEwMCw4IEBACiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKIAotICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjU4MDk3OTogRml4IHB5dGhvbiBzZXNzaW9uIHBvaW50ZXJzIG9uIDY0LWJpdCBzeXN0ZW1zLgorICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMjU4MDk3OTogRml4IHB5dGhvbiBzZXNzaW9uIHBvaW50ZXJzIG9uCisgICA2NC1iaXQgc3lzdGVtcy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEpvaG4gS2h2YXRvdi4KIAogMjAwOS0wNC0wOCAxNDo0OSAgZHRzMTIKQEAgLTQyMDgsOCArNjUxMTUsNyBAQAogMjAwOS0wNC0wOCAxNDozNCAgZHRzMTIKIAogICAgKiAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtLCAgIAotICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzLCBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC1jLmluYywgCi0gICAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LXhzLmluYzoKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54czoKIAogICAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMjcyNjMwMjogUGFzcyByZXN1bHRzIG9mIFBlcmwgdHJhcAogICAgaGFuZGxlcnMgdG8gdHJhcCBkYWVtb24KQEAgLTQyMjMsNiArNjUxMjksMTQgQEAKICAgIGhpZ2gtQVNDSUkgY2hhcnMKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEJhcnQgVmFuIEFzc2NoZQogCisyMDA5LTA0LTA4IDE0OjI0ICBkdHMxMgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQucG0sIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAyNzA5NzA1OiBSZXRyaWV2ZSBzcmMvdGFyZ2V0IElQIGFkZHJlc3MgaW4KKyAgIFBlcmwtYmFzZWQgYWdlbnRzCisgICBQYXRjaCBwcm92aWRlZCBieSBmaGV3CisKIDIwMDktMDQtMDggMTQ6MTYgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgpAQCAtNDI0OSw2ICs2NTE2MywyOCBAQAogICAgUW46IERvZXMgdGhpcyBldmVuIHF1YWxpZnkgYXMgYW4gZXJyb3I/IFdvdWxkbid0IGEgd2FybmluZyBiZQogICAgc3VmZmljaWVudD8KIAorMjAwOS0wNC0wNiAxOTozMyAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgc25tcGxpYi9wYXJzZS5jOgorCisgICBzbm1wbGliOiBNYWtlIHRoZSBub2RlIHN0cnVjdCBwcml2YXRlLiBIaWRlIHRoZSBvcmhhbl9ub2RlcworICAgdmFyaWFibGUuCisKKzIwMDktMDQtMDYgMTg6NDUgIG1hZ2ZyCisKKyAgICogYWdlbnQvc25tcF9wZXJsLmM6CisKKyAgIHNubXBkLHBlcmw6IElmIG15X3BlcmwgaXMgTlVMTCB3aGVuIHBhc3NlZCB0byBwZXJsX2Rlc3RydWN0IHRoZW4KKyAgIHRoYXQgZnVuY3Rpb24gY3Jhc2hlcyBmb3Igc29tZSBwZXJsIHZlcnNpb25zIHNvIGNoZWNrIHRoYXQgaXQgaXMKKyAgIG5vbi1udWxsIGJlZm9yZSBkZXN0cm95aW5nIGl0LgorCisyMDA5LTA0LTA2IDE4OjQyICBtYWdmcgorCisgICAqIHBlcmwvYWdlbnQvYWdlbnQueHM6CisKKyAgIHBlcmw6IEF2b2lkIHN1cnByaXNlcyBpZiB0aGUgcGVybCBzdHJpbmcgY29udGFpbnMgcHJpbnRmIGVzY2FwZQorICAgY2hhcmFjdGVycy4KKwogMjAwOS0wNC0wNiAxODoyMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CkBAIC00MjU3LDcgKzY1MTkzLDcgQEAKICAgIChBdm9pZHMgdHJ1bmNhdGVkIHdhbGsgb2YgaHJTV1J1blBhdGggb24gU3VTRSBzeXN0ZW1zKQogICAgUmVwb3J0ZWQgYnkgS2FtaWwgS2lzaWVsLgogCi0yMDA5LTA0LTA2IDEyOjA1ICB0YW5kZXJzCisyMDA5LTA0LTA2IDExOjU4ICB0YW5kZXJzCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC54cywgcGVybC9hZ2VudC90eXBlbWFwOgogCkBAIC00MjY2LDExICs2NTIwMiwxMDkgQEAKICAgIGdldFJvb3RPSUQgd29ya3MgcHJvcGVybHkuIE5vdyBwYXNzZXMgIm1ha2UgdGVzdCIgYW5kICJtYWtlCiAgICBwZXJsdGVzdCIuCiAKLTIwMDktMDQtMDYgMTI6MDIgIGR0czEyCisyMDA5LTA0LTA1IDEwOjA1ICBtYWdmcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYzoKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKIAotICAgRml4IHR5cG8KKyAgIFJlbW92ZSB1bnVzZWQgdmFyaWFibGVzLgorCisyMDA5LTA0LTA1IDA5OjUzICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mLCBsb2NhbC9taWIyYy5ub3RpZnkuY29uZjoKKworICAgTWFrZSBldmVuIG1vcmUgdmFyaWFibGVzIGFuZCB0ZW1wbGF0ZXMgY29uc3QuCisKKzIwMDktMDQtMDQgMjI6MTMgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgsIAorICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmg6CisKKyAgIHNubXBkOiBNYWtlIG1vcmUgbG9jYWwgdmFyaWFibGVzIGNvbnN0IGFuZCBsb2NhbC4KKworMjAwOS0wNC0wNCAxMDowNyAgbWFnZnIKKworICAgKiBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFwZC5jLCBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIE1hcmsgdGhlIHJlY29uZmlnIHZhcmlhYmxlIGFzIHN0YXRpYyBzaW5jZSBpdCBpcyBwcml2YXRlIHRvIHRoZQorICAgbW9kdWxlLgorCisyMDA5LTA0LTA0IDEwOjAzICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5jOgorCisgICBNYXJrIHRoZSBmaWxlIHNjb3BlIHByaXZhdGUgdmFyaWFibGUgbWluaW11bV9zd2FwIGFzIHN0YXRpYy4KKworMjAwOS0wNC0wNCAwOTo1OCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXQuYzoKKworICAgc25tcGxpYjogTWFrZSBtb3JlIHN5bWJvbHMgY29uc3QgaW4gb3JkZXIgdG8gbW92ZSB0aGVtIHRvCisgICByZWFkb25seSBtZW1vcnkuCiAKIDIwMDktMDQtMDIgMjE6MjQgIGhhcmRha2VyCiAKQEAgLTQyNzksNiArNjUzMTMsMTMxIEBACiAgICBDSEFOR0VTOiBCVUcgMTEyNjk0OiBQYXRjaCBmcm9tIEJpbGwgRmVubmVyOiBkb24ndCBvcGVuIChhbmQKICAgIGNsb2JiZXIpIGFuIGFnZW50eCBzb2NrZXQgaWYgdGhlIG90aGVyIHRyYW5zcG9ydHMgZmFpbCB0byBvcGVuCiAKKzIwMDktMDQtMDEgMjM6NDEgIGhhcmRha2VyCisKKyAgICogQ0hBTkdFUywgTkVXUzoKKworICAgdmVyc2lvbiB1cGRhdGUKKworMjAwOS0wNC0wMSAyMzoxOSAgaGFyZGFrZXIKKworICAgKiBDaGFuZ2VMb2c6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDktMDQtMDEgMjM6MDQgIGhhcmRha2VyCisKKyAgICogIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsICAgCisgICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgorCisgICBtYWtlIGRlcGVuZAorCisyMDA5LTA0LTAxIDIzOjAzICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jLCBzbm1wbGliL3NubXB0c20uYzoKKworICAgY29udmVydCBjb21tZW50cyB0byBBTlNJIGNvbW1lbnRzCisKKzIwMDktMDQtMDEgMjI6MjEgIGhhcmRha2VyCisKKyAgICogIG1hbi9NYWtlZmlsZS5pbiwgbWFuL25ldHNubXBfYWNjZXNzX211bHRpcGxleGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9oYW5kbGVyLmguMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9jYWxsYmFjay4zLCBtYW4vbmV0c25tcF9jb250YWluZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lcl9pdGVyYXRvci4zLCAgIAorICAgICAgbWFuL25ldHNubXBfY29udGFpbmVyX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbW9uaXRvcl9jYWxsYmFja19oZWFkZXJfcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCisgICAgICBtYW4vbmV0c25tcF9udWxsX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NjYWxhci4zLCBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsICAgCisgICAgICBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgbWFuL25ldHNubXBfc25tcF9wZHUuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF90YWJsZS4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCAgIAorICAgICAgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgbWFuL25ldHNubXBfdGFibGVfcm93LjMsICAgCisgICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsICAgCisgICAgICBtYW4vbmV0c25tcF90b29scy5oLjMsIG1hbi9uZXRzbm1wX3V0aWwuMywgICAKKyAgICAgIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsICAgCisgICAgICBtYW4vbmV0c25tcF93YXRjaGVyLjM6CisKKyAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisKKzIwMDktMDQtMDEgMjI6MDMgIGhhcmRha2VyCisKKyAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgZGlzdC9NYWtlZmlsZSwgICAKKyAgICAgIGRpc3QvbWFrZXJlbGVhc2UueG1sLCBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIFZlcnNpb24gbnVtYmVyIHVwZGF0ZQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NoYW5nZXM6IFY1LjQgLT4gVjUuNS5wcmUxCisKKzIwMDktMDQtMDEgMjE6NTggIGhhcmRha2VyCisKKyAgICogbWFuL3NubXAuY29uZi41LmRlZiwgbWFuL3NubXBkLjguZGVmOgorCisgICB1cGRhdGVzIGZvciBTU0gKKworMjAwOS0wNC0wMSAxOTozOSAgbWFnZnIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBNYWtlIHRoZSBzcmMgcG9pbnRlciBvZiBzbm1wX2Nsb25lX21lbSBhIHBvaW50ZXIgdG8gY29uc3RhbnQuCisKKzIwMDktMDQtMDEgMTg6MjMgIGhhcmRha2VyCisKKyAgICogYXBwczoKKworICAgaWdub3JlICdzc2h0b3NubXAnCisKKzIwMDktMDQtMDEgMTc6MzEgIGhhcmRha2VyCisKKyAgICogIGFwcHMvc3NodG9zbm1wLmMsIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgsICAgCisgICAgICBtYW4vc25tcGQuOC5kZWYsIHNubXBsaWIvc25tcFNTSERvbWFpbi5jOgorCisgICBNYWtlIHNzaCB0cmFuc3BvcnQgc3VwcG9ydCB1c2UgYSB1bml4IHNvY2tldCB3aXRoIHByb3BlcgorICAgY3JlZGVudGlhbCBwYXNzaW5nCisKKzIwMDktMDQtMDEgMTc6MjkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgorCisgICBtYWtlIHRoZSBleGVjIGNhY2hlIHJlYWRhYmxlIG9ubHkgYnkgdGhlIHVzZXIKKworMjAwOS0wNC0wMSAxNzoyOCAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaCwgc25tcGxpYi9zeXN0ZW0uYzoKKworICAgbW92ZSBzdHJpbmcgdG8gdWlkL2dpZCBmdW5jdGlvbmFsaXR5IHRvIHNubXBsaWIgZm9yIHJldXNlCisKIDIwMDktMDMtMzEgMTU6MTIgIGR0czEyCiAKICAgICogbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgpAQCAtNDMwMCw2ICs2NTQ1OSw5MyBAQAogCiAgICBDIGNvbW1lbnRzIHVzZSAvKiAuLi4gKi8sIG5vdCAjCiAKKzIwMDktMDMtMzEgMDg6MDUgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgRml4IGNvbXBpbGF0aW9uIHdpdGggZ2xpYmMgPCAyLjQsIElDTVB2NiBtZXNzYWdlIHR5cGVzIHN0YXJ0aW5nCisgICB3aXRoIE1MRF8qIGhhdmUgZGlmZmVyZW50IG5hbWUgdGhlcmUuCisKKzIwMDktMDMtMjQgMDY6MDQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX29wZW5zc2wuYzoKKworICAgRG8gbm90IGNvbXBpbGUgdGhlIHBhcnRzIHRoYXQgZGVwZW5kIG9uIGxpYnNzbCBpZiBsaWJzc2wgaXMKKyAgIG1pc3NpbmcuCisKKzIwMDktMDMtMjMgMDk6MjEgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oLCAKKyAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg6CisKKyAgIE5FV1M6IHNubXBkOiBpcE5ldFRvUGh5c2ljYWxMYXN0VXBkYXRlZCBPSUQgaW1wbGVtZW50ZWQKKyAgIAorICAgVGhlIHZhbHVlIGlzIGVzdGltYXRlZCB3aXRoIGV2ZXJ5IGNhY2hlIHJlbG9hZCwgd2hpY2ggaXMgb25jZSBpbgorICAgNjAgc2Vjb25kcyBieSBkZWZhdWx0LgorICAgVGhhdCBtZWFucyB0aGUgdmFsdWUgcmVwb3J0ZWQgYnkgc25tcGQgbWF5IGRpZmZlciBmcm9tIHJlYWxpdHkgYnkKKyAgIG9uZSBtaW51dGUuCisgICBJZiBhbnlib2R5IG5lZWRzIGJldHRlciBwcmVjaXNpb24sIHRoZSBjYWNoZSB0aW1lb3V0IGNhbiBiZQorICAgY29uZmlndXJlZCBieSBzZXR0aW5nCisgICBORVQtU05NUC1BR0VOVC1NSUI6Om5zQ2FjaGVUaW1lb3V0LjEuMy42LjEuMi4xLjQuMzUgdG8KKyAgIGFwcHJvcHJpYXRlIHZhbHVlIGJ5IHNubXBzZXQuCisKKzIwMDktMDMtMjAgMTk6MzggIGhhcmRha2VyCisKKyAgICogZGlzdC9leHRyYWN0bmV3czoKKworICAgZml4IGxhY2sgb2Ygd3JhcHBpbmcgbGluZXMgcHJvYmxlbQorCisyMDA5LTAzLTIwIDE4OjMxICBoYXJkYWtlcgorCisgICAqIE5FV1MsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIGNvbmZpZyBvcHRpb25zLCBldGMsIGZvciBTU0ggYW5kIERUTFMKKworMjAwOS0wMy0yMCAxODoyNCAgaGFyZGFrZXIKKworICAgKiBtYW4vc25tcGNtZC4xLmRlZiwgbWFuL3NubXBkLjguZGVmOgorCisgICBjdXJyZW50bHkgbWluaW1hbCBkb2N1bWVudGF0aW9uIG9uIGR0bHMgYW5kIHNzaAorCisyMDA5LTAzLTIwIDE2OjUwICBoYXJkYWtlcgorCisgICAqICBhcHBzL01ha2VmaWxlLmluLCBhcHBzL3NzaHRvc25tcC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3NubXBTU0hEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF90cmFuc3BvcnQuYzoKKworICAgQWRkZWQgYWxwaGEgc25tcCBvdmVyIHNzaCBzdXBwb3J0CisKKzIwMDktMDMtMjAgMTY6MTYgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wRFRMU1VEUERvbWFpbi5jOgorCisgICBjaGVjayB0aGUgc2VjIG5hbWUgbGVuZ3RoLCBub3QganVzdCB0aGUgY29udGVudHMKKworMjAwOS0wMy0yMCAxNjowMSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgc2VxdWVuY2UgcGFyc2luZyBmaXgKKworMjAwOS0wMy0yMCAxNTo1MyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaCwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBhZGRlZCBhIG5ldyBmbGFnIHRvIGFsbG93IGZvciBzaWduYWxsaW5nIG9mIGxlZ2FsIGVtcHR5IHBhY2tldHMKKyAgIGZyb20gYSB0cmFuc3BvcnQKKworMjAwOS0wMy0xOCAxOTo0MiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gY29tcGlsZSBhZ2Fpbi4KKwogMjAwOS0wMy0xOCAxMDo1MiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmM6CkBAIC00MzI5LDYgKzY1NTc1LDIwIEBACiAgICBGaXggdmFsZ3JpbmQgd2FybmluZy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFN0ZXBoZW4gSGVtbWluZ2VyCiAKKzIwMDktMDMtMTcgMjI6NTcgIG1hZ2ZyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaDoKKworICAgUEFUQ0g6IDI2ODgzNDI6IGZyb20gIkJhcnQgVmFuIEFzc2NoZSI6IFVzZSBwcm9wZXIgZnVuY3Rpb24KKyAgIHBvaW50ZXJzCisKKzIwMDktMDMtMTMgMjE6MjYgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CisKKyAgIFByb2Nlc3MgaHJNZW1vcnlTaXplIChzY2FsYXIpIHNlcGFyYXRlbHkgZnJvbSBoclN0b3JhZ2VUYWJsZS4KKyAgIFRoaXMgc2ltcGxpZmllcyB0aGUgaGFuZGxlciBjb2RlIHN0cnVjdHVyZS4KKwogMjAwOS0wMy0xMyAyMToyMyAgZHRzMTIKIAogICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jLCAgIApAQCAtNDM1Myw2ICs2NTYxMywyNyBAQAogICAgKEFuIGFsdGVybmF0aXZlIG1pZ2h0IGJlIHRvIGNyZWF0ZSBhIG5ldyBlbnRyeSBpbnN0ZWFkKS4KICAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgTmljayBIaW5kbGV5CiAKKzIwMDktMDMtMTAgMTU6MjUgIGpzYWZyYW5laworCisgICAqIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jOgorCisgICBORVdTOiBzbm1wZDogaXBBZGRyZXNzU3BpbkxvY2sgaW1wbGVtZW50ZWQKKworMjAwOS0wMy0wMiAxMToyMyAgZHRzMTIKKworICAgKiBDT1BZSU5HOgorCisgICBGaXggYXR0cmlidXRpb24gb2YgbGF0ZXN0IGNvcHlyaWdodCBub3RpY2UuCisKKzIwMDktMDItMjggMTg6MjEgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBNb3ZlIHRoZSAjZGVmaW5lIGNvbmZpZ18qKC4uLikgZnJvbSBhY2NvbmZpZy5oIHRvIHRoZSBjb25maWd1cmUKKyAgIHNjcmlwdCBzbyB0aGF0IHRoZXkgYXJlIG5leHQgdG8gdGhlIGNvZGUgdGhhdCBoYW5kbGUgdGhlCisgICBjb3JyZXNwb25kaW5nIGNvbmZpZ18qIHRva2VuLgorCiAyMDA5LTAyLTI3IDEzOjIwICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYzoKQEAgLTQzNjIsNiArNjU2NDMsMjAgQEAKICAgIEl0J3MgYmVpbmcgd3JpdHRlbiB0byBsb2cgZXZlcnl0aW1lIHNvbWVvbmUgcXVlcmllcwogICAgVUNELVNOTVAtRElTS0lPIE1JQi4KIAorMjAwOS0wMi0yNSAwNjo0MSAgbWFnZnIKKworICAgKiBhcHBzL3NubXBuZXRzdGF0L2lmLmM6CisKKyAgIFVzZSB0aGUgZmVhdHVyZSB0ZXN0IG1hY3JvcyB0byBzZXQgd2hhdCBpcyBuZWVkZWQuCisgICBEbyBub3QgdXNlIHRoZSBpbnRlcm5hbCBHTlUgbGliYyBtYWNyb3MgdGhhdCBhcmUgc2V0IGJ5IHNldHRpbmcKKyAgIHRoZSBmZWF0dXJlIHRlc3QgbWFjcm9zLgorCisyMDA5LTAyLTI1IDA2OjM4ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcFVuaXhEb21haW4uYzoKKworICAgQWRkIG1pc3NpbmcgaW5jbHVkZS4KKwogMjAwOS0wMi0yNCAwNzoyNiAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgpAQCAtNDM2OSwyNyArNjU2NjQsOTQgQEAKICAgIENIQU5HRVM6IE1ha2UgLUxOIHN0b3AgZHVtcGluZyBjb3JlLiBNYWtlIGJhZCBkZWJ1ZyBsZXZlbHMgcmVwb3J0CiAgICB0aGUgb2ZmZW5kaW5nIHN5bWJvbC4KIAotMjAwOS0wMi0xOCAxNToyNyAganNhZnJhbmVrCisyMDA5LTAyLTI0IDA2OjUwICBtYWdmcgogCi0gICAqICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jLCAgIAotICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMsICAgCi0gICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jLCAgIAorICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgsICAgCisgICAgICBzbm1wbGliL3NubXBVbml4RG9tYWluLmM6CisKKyAgIE1vdmUgdGhlIGRpcmVjdG9yeSBjcmVhdGlvbiBjb2RlIHRvIGhhcHBlbiBhZnRlciB0aGUgZG9tYWluCisgICBzZWxlY3Rpb24gY29kZSBzbyB0aGF0IHRoZSBkaXJlY3RvcnkgY3JlYXRpb24gY29kZSBrbm93cyB3aGF0CisgICBkaXJlY3RvcnkgdG8gY3JlYXRlLgorCisyMDA5LTAyLTI0IDA2OjQ3ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIENoYW5nZSB0aGUgZXJyb3IgY2hlY2tpbmcgb3B0aW9uIC0tZW5hYmxlLW15c3FsIHRvIHN1Z2dlc3QgdGhhdAorICAgdGhhdCAtLXdpdGgtbXlzcWwgaXMgdXNlZCByYXRoZXIgdGhhdCAtLXdpdGgtb3BlbnNzbC4KKworMjAwOS0wMi0yNCAwNjo0NCAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlZ2VuZXJhdGUgYXV0b2NvbmYgYXJ0aWZhY3RzLgorCisyMDA5LTAyLTIzIDE4OjQzICByc3RvcnkKKworICAgKiBhcHBzL3NubXB0cmFwZF9zcWwuYzoKKworICAgYWRkIGZvcmdvdHRlbiBmaWxlCisKKzIwMDktMDItMjAgMDQ6NDEgIGhhcmRha2VyCisKKyAgICogIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50LCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsIAorICAgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfbWFudWFsLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIGFkZGVkIGVtYWNzIGF1dG9jb25mIG1vZGUgc3BlY2lmaWVyCisKKzIwMDktMDItMTkgMTg6MzIgIHJzdG9yeQorCisgICAqIFJFQURNRS5zcWwsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZjoKKworICAgZG9jdW1lbnQgbmV3IHNxbCB0cmFwIGxvZ2dpbmcKKworMjAwOS0wMi0xOSAxODoyMCAgcnN0b3J5CisKKyAgICogIENPUFlJTkcsIE5FV1MsIGFwcHMvTWFrZWZpbGUuaW4sIGFwcHMvc25tcHRyYXBkLmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5oLCBjb25maWd1cmUsICAKKyAgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgZGlzdC9zY2hlbWEtc25tcHRyYXBkLnNxbCwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogc25tcHRyYXBkOiBhZGQgdHJhcCBoYW5kbGVyIGZvciBsb2dnaW5nIHRyYXBzIHRvIGEgbXlzcWwKKyAgIGRhdGFiYXNlCisKKzIwMDktMDItMTkgMTc6NTggIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9saXN0X3NzbGwuYzoKKworICAgTkVXUzogc25tcGxpYjogYWRkZWQgaXRlcmF0b3IgZm9yIHNpbmdseSBsaW5rZWQgbGlzdHM7IGFkZAorICAgY29udGFpbmVyIG5hbWUgaW4gbW9yZSBlcnJvciBtc2dzCisKKzIwMDktMDItMTggMTg6NTIgIHJzdG9yeQorCisgICAqIGFwcHMvc25tcHVzbS5jLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmg6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IGNoYW5nZSBNQVhfRU5HSU5FSURfTEVOR1RIIHRvIDMyLCBwZXIKKyAgIFNOTVAtRlJBTUVXT1JLLU1JQiBTbm1wRW5naW5lSUQgVEMKKworMjAwOS0wMi0xOCAxNDo0MSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsICAgCiAgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oLCAgIAogICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jOgogCi0gICBGaXggc2N0cC1taWIgY29tcGlsYXRpb24gcHJvYmxlbXMKLQotMjAwOS0wMi0xOCAxNToyNyAganNhZnJhbmVrCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmg6Ci0KLSAgIEJhY2twb3J0IGdldF9waWRfZnJvbV9pbm9kZSBmcm9tIHRydW5rLCBpdCdzIG5lZWRlZCBieSBzY3RwLW1pYgorICAgQ29uZmlndXJlIHNjcmlwdCBkb2VzIG5vdCBsaWtlIG5ldC1zbm1wLWNvbmZpZy5oIGJlaW5nIGluY2x1ZGVkCisgICBmcm9tIGhlYWRlcgorICAgZmlsZXMsIHdoaWNoIGFyZSBhZGRlZCBieSAtLXdpdGgtbWliLW1vZHVsZXM9LCBsZXQncyByZW1vdmUgaXQKKyAgIGZyb20gdGhlcmUuCiAKIDIwMDktMDItMTYgMjE6MjQgIGhhcmRha2VyCiAKQEAgLTQzOTgsNiArNjU3NjAsMTAxIEBACiAgICBDSEFOR0VTOiBwZXJsOiBCVUcgMTU1NDgxNzogUGF0Y2ggZnJvbSB4YW5jbzogZml4IHRoZSBjbGFzcwogICAgYXNzaWdtZW50IHNvIGdldFJvb3RPSUQgd29ya3MgcHJvcGVybHkuCiAKKzIwMDktMDItMTUgMDc6MjAgIG1hZ2ZyCisKKyAgICogYWNjb25maWcuaDoKKworICAgQ29ycmVjdCBjb3B5L3Bhc3RlIG1pc3Rha2UKKworMjAwOS0wMi0xMiAwMDoyNSAgaGFyZGFrZXIKKworICAgKiAgYWNjb25maWcuaCwgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBtaWJzL05FVC1TTk1QLVRDLnR4dCwgICAKKyAgICAgIHNubXBsaWIvc25tcERUTFNVRFBEb21haW4uYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wdHNtLmM6CisKKyAgIEFuIGVhcmx5IGV4cGVyaW1lbnRhbCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgRFRMUyBvdmVyIFVEUAorICAgdHJhbnNwb3J0IGZyb20gdGhlIElFVEYgSVNNUyB3b3JraW5nIGdyb3VwCisKKzIwMDktMDItMTEgMjM6MzAgIGhhcmRha2VyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgdXBkYXRlZCByZWxlYXNlIGluc3RydWN0aW9ucworCisyMDA5LTAyLTA2IDIxOjM2ICBtYWdmcgorCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCBhcyBDKysgYWdhaW4uCisKKzIwMDktMDItMDUgMjI6NTYgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uYywgY29uZmlndXJlLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1Lmg6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBBc3N1bWUgdGhhdCB0aGUgdGFyZ2V0IHBsYXRmb3JtIHN1cHBvcnRzIG1lbWNweSwKKyAgIG1lbW1vdmUsIG1lbXNldCwgc3RyY2hyIGFuZCBzdHJyY2hyLgorCisyMDA5LTAyLTA0IDA2OjU3ICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIHNubXBsaWIvc25tcF9kZWJ1Zy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2xvZ2dpbmcuYywgc25tcGxpYi9zbnByaW50Zi5jLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTkVXUzogUmVtb3ZlIHN1cHBvcnQgZm9yIHVzZSBvZiB2YXJhcmdzLmguIE5vdyBhc3N1bWVzIHRoYXQKKyAgIHN0ZGFyZy5oIGlzIGF2YWlsYWJsZS4KKworMjAwOS0wMi0wNCAwNjo0OSAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF90cmFwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsICAgCisgICAgICBzbm1wbGliL3NubXB2My5jOgorCisgICBORVdTOiBzbm1wbGliOiBJbnRyb2R1Y2UgcHJpbnRmLWxpa2UgdmVyc2lvbnMgb2YgY29uZmlnX3BlcnJvcgorICAgYW5kIGNvbmZpZ19wd2FybiAobmV0c25tcF9jb25maWdfZXJyb3IgYW5kIG5ldHNubXBfY29uZmlnX3dhcm4pLgorICAgUmVwbGFjZSBtYW55IGluc3RhbmNlcyBvZiB7IHRtcGJ1ZlsuLi5dOyBzcHJpbnRmKHRtcGJ1ZiwgLi4uKTsKKyAgIGNvbmZpZ19wKih0bXBidWYpOyB9IHdpdGggbmV0c25tcF9jb25maWdfKiguLi4pOworCisyMDA5LTAyLTAzIDE2OjE0ICBoYXJkYWtlcgorCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaDoKKworICAgYWRkIHRoZSByZWdpbmZvIGFuZCBhbmQgc2Vzc2lvbiBwb2ludGVyIHRvIHRoZSBSRUdJU1RFUl9PSUQKKyAgIGNhbGxiYWNrCisKKzIwMDktMDItMDMgMDA6MTggIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgZml4ZWQgLWxzc2wgY2hlY2sKKwogMjAwOS0wMS0yOSAwODozOCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CkBAIC00NDA5LDE0ICs2NTg2NiwxNCBAQAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKIAogICAgRml4IHNyYy9kc3QgY29uZnVzaW9uCi0gICBQYXRjaCBwcm92aWRlZCBieSBLcnp5c3p0b2YgT2y/ZHpraQorICAgUGF0Y2ggcHJvdmlkZWQgYnkgS3J6eXN6dG9mIE9s54it9YCRi++9pPWAj7HniK31gJGL772k9YCMtOeIrfWAkYvvvaT1gIy25ZuYemtpCiAKIDIwMDktMDEtMjggMDk6MjkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CiAKICAgIENIQU5HRVM6IEZpeCB0d28gYnVncyB3aXRoIHNtdXggcGFzc3dvcmQgc3VwcG9ydC4KLSAgIFBhdGNoIHN1cHBsaWVkIGJ5IEtyenlzenRvZiBPbL9kemtpCisgICBQYXRjaCBzdXBwbGllZCBieSBLcnp5c3p0b2YgT2zniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLblm5h6a2kKIAogMjAwOS0wMS0yMyAxNDo1MyAganNhZnJhbmVrCiAKQEAgLTQ0MjQsNiArNjU4ODEsNTEgQEAKIAogICAgRml4IHBhcnNpbmcgb2YgbGV2ZWwgcmFuZ2VzIGluICctTDxjYXBpdGFsPicuCiAKKzIwMDktMDEtMjAgMTQ6NTEgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzOgorCisgICBDaGVjayBmb3IgdGhlIGV4aXN0ZW5jZSBvZiA8cnBtL3JwbWZpbGV1dGlsLmg+IGJlZm9yZSBpbmNsdWRpbmcKKyAgIGl0LgorCisyMDA5LTAxLTE5IDIwOjUwICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYzoKKworICAgTWFrZSBpdCBwb3NzaWJsZSB0byBidWlsZCB3aXRob3V0IElQdjYgYWdhaW4uCisKKzIwMDktMDEtMTkgMTU6MDEgIGpzYWZyYW5laworCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmgsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE5Mjc3NTE6IGZyb20gTWl0c3VydSBDaGluZW46IGltcGxlbWVudAorICAgaWNtcE1zZ1N0YXRzVGFibGUgb24gTGludXgKKworMjAwOS0wMS0xOSAwOTo0MSAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oLCAgIAorICAgICAgbWlicy9VQ0QtU05NUC1NSUIudHh0OgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDI0NDkyMTA6IGFkZCA2NC1iaXQgZGlzayB1c2FnZSBzdGF0aXN0aWNzIHRvCisgICBVQ0QtU05NUC1NSUI6OmRza1RhYmxlCisKKzIwMDktMDEtMTggMDc6NDAgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgQ0hBTkdFUzogQlVHOiAyMTY4MTgwOiBDaGFuZ2VkIC0tZGlzYWJsZS1yZWVudHJhbnQgdG8gbm90CisgICBhY3RpdmF0ZSB0aGUgcmVlbnRyYW50IGNvZGUgYW5kIG1hZGUgLS1lbmFibGUtcmVlbnRyYW50IGFjY2VwdCBubworICAgdmFsdWVzIG90aGVyIHRoYW4geWVzIGFuZCBuby4gRGlkIHRoZSBzYW1lIGZvcgorICAgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja3MsIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcsCisgICAtLXdpdGgtZGVmYXVsdHMsIC0tZW5hYmxlLWRldmVsb3BlciBhbmQgLS1lbmFibGUtdGVzdGluZy1jb2RlIGFzCisgICB3ZWxsLgorCiAyMDA5LTAxLTEzIDA5OjE3ICBqc2FmcmFuZWsKIAogICAgKiBzbm1wbGliL2FzbjEuYzoKQEAgLTQ0MzQsNiArNjU5MzYsNjMgQEAKICAgIGVhY2ggc3ViaWRlbnRpZmllci4gVGhpcyBpcyBub3cgY2hlY2tlZCBhbmQgcGFyc2luZyBvZiBPSUQgZmFpbHMsCiAgICBpZiB0aGlzIGNvbmRpdGlvbiBpcyBub3QgbWV0LgogCisyMDA5LTAxLTExIDIxOjU0ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGU6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBDaGVjayB0aGF0IHRoZSB0ZW1wLWZpbGUtcGF0dGVybiBlbmRzIGluIDYgWCdzCisgICBhcyBta3N0ZW1wIGFuZCBta3RlbXAgcmVxdWlyZSB0aGF0LgorCisyMDA5LTAxLTExIDIxOjM4ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEJlIGEgbG90IG1vcmUgc3RyaWN0IG9uIHRoZSB2YWx1ZXMgdGhhdCBhcmUKKyAgIGFjY2VwdGFibGUgZm9yIC0td2l0aC1wZXJzaXN0ZW50LW1hc2sgKG9ubHkgYWxsb3cgdGhyZWUgb2N0YWwKKyAgIGRpZ2l0cykKKworMjAwOS0wMS0xMSAyMDo0MiAgbWFnZnIKKworICAgKiAgYWNsb2NhbC5tNCwgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZSwgICAKKyAgICAgIG00L25ldHNubXBfYXJnLm00OgorCisgICBDSEFOR0VTOiBidWlsZGluZzogV2UgYXJlIGN1cnJlbnRseSB1c2luZyB0aGUgcHJhY3RpY2Ugb2YgYWRkaW5nCisgICBhIG1pcnJvcmluZyBBQ19BUkdfV0lUSC9FTkFCTEUgdG8gZWFjaCBBQ19BUkdfRU5BQkxFL1dJVEguIFRoaXMKKyAgIHBhdGNoIGFkZHMgTkVUU05NUF9BUkdfV0lUSC9FTkFCTEUgbWFjcm9zIHRoYXQgYXV0b21hdGljYWxseSBhZGRzCisgICB0aGUgbWlycm9yIHZhcmlhYmxlIGFuZCB0aGVuIGNvbnZlcnRzIHRoZSBjb25maWd1cmUgbWFjaGluZXJ5IHRvCisgICB1c2UgdGhlbS4KKworMjAwOS0wMS0xMSAyMDozNiAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgorCisgICBNb3ZlIEFDX0RFRklORVMgaW4gY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUgdG8gYmUgbG9jYXRlZCBuZXh0CisgICB0byB0aGUgQUNfQVJHXy4uLiB0aGV5IGRlcGVuZCBvbi4KKworMjAwOS0wMS0xMSAyMDozNCAgbWFnZnIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgQ2hhbmdlIHRoZSBkZWZhdWx0IHZlcnNpb24gbnVtYmVyIGNoZWNraW5nIHRvIGJlIGVhc2llciB0byByZWFkCisKKzIwMDktMDEtMTEgMTk6MTkgIG1hZ2ZyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgTW92ZSB0aGUgbGFzdCBBQ19BUkdfLi4uJ3MgdG8gY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUuCisKKzIwMDktMDEtMTEgMTk6MDggIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IENoYW5nZSB0aGUgbWFjcm8gZm9yIC0td2l0aC1mZWF0dXJlcy1vZiBmcm9tCisgICBBQ19BUkdfRU5BQkxFIHRvIEFDX0FSR19XSVRIIGluIG9yZGVyIHRvIG1ha2UgdGhlIG9wdGlvbiBiZQorICAgLS13aXRoLWZlYXR1cmVzLW9mLgorCiAyMDA5LTAxLTA4IDEwOjQ1ICBqc2FmcmFuZWsKIAogICAgKiBzbm1wbGliL3NubXBfbG9nZ2luZy5jOgpAQCAtNDQ0OCwxMiArNjYwMDcsMjA5IEBACiAgICBpbiBzdGFibGUKICAgIGJyYW5jaGVzLiBXZSBub3cgc3VwcG9ydCBib3RoIG9mIHRoZW0uCiAKKzIwMDktMDEtMDggMDM6NTEgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUudG9wOgorCisgICBEbyBub3QgZGVwZW5kIG9uIHRoZSBleGlzdGFuY2Ugb2YgL2Jpbi9zaC4gQWxzbyBmb2xsb3cgdGhlIGFkdmljZQorICAgb2YgdGhlIGF1dG9jb25mIG1hbnVhbCBhbmQgZmluYWxseSBhbGxvdyBmb3IgbGlidG9vbCB0aGF0IGFkb3B0cworICAgdGhlIGdlbmVyYXRlZCBzY3JpcHQgYWZ0ZXIgdGhlIGNhcGFiaWxpdGllcyBvZiBTSEVMTC4KKworMjAwOS0wMS0wNyAxNjowMiAganNhZnJhbmVrCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVyczoKKworICAgUmVvcmRlciB0aGUgbmV0aW5ldC9pY21wX3Zhci5oIGFuZCBuZXRpbmV0L2lwX2ljbXAuaCwgdGhlIGxhdGVyCisgICBvbmUgbXVzdCBiZSBjaGVja2VkIGZpcnN0IG9uIEZyZWVCU0QgNworCiAyMDA5LTAxLTA2IDIyOjIzICBoYXJkYWtlcgogCiAgICAqIENPUFlJTkc6CiAKICAgIHVwZGF0ZSBTUEFSVEEgZm9yIDIwMDkKIAorMjAwOS0wMS0wMyAyMDoyMyAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIG00L2FjX3Byb21wdF91c2VyLm00OgorCisgICBVcGdyYWRlIHRoZSBBQ19QUk9NUFRfVVNFUiBtYWNyb3MgdG8gYXV0b2NvbmYgMi42MyB3aGVyZQorICAgQUNfRkRfTVNHIGlzIGRlcHJlY2F0ZWQgYW5kIEFTX01FU1NBR0VfRkQgaXMgcmVjb21tZW5kZWQuCisKKzIwMDktMDEtMDMgMTQ6MjAgIG1hZ2ZyCisKKyAgICogIGFjaW5jbHVkZS5tNCwgYWNsb2NhbC5tNCwgY29uZmlndXJlLCBtNC9hY19hZGRfc2VhcmNoX3BhdGgubTQsICAgCisgICAgICBtNC9hY19tc2dfY2FjaGUubTQsIG00L2FjX21zZ19tb2R1bGVfZGJnLm00LCAgIAorICAgICAgbTQvYWNfcHJvbXB0X3VzZXIubTQsIG00L25ldHNubXBfc2VhcmNoX2xpYnMubTQ6CisKKyAgIFNwbGl0IGFjaW5jbHVkZS5tNCBpbnRvIHNtYWxsZXIgcGFydHMgYnkgZnVuY3Rpb24uCisKKzIwMDktMDEtMDMgMTQ6MTUgIG1hZ2ZyCisKKyAgICogTWFrZWZpbGUuYW06CisKKyAgIE1ha2UgYXV0b3JlY29uZiB3b3JrIGFnYWluLgorCisyMDA5LTAxLTAzIDE0OjExICBtYWdmcgorCisgICAqICBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgaW5zdGFsbC1zaCwgbHRtYWluLnNoLCBtNCwgCisgICAgICAgIG00L2xpYnRvb2wubTQsIG00L2x0b3B0aW9ucy5tNCwgbTQvbHRzdWdhci5tNCwgbTQvbHR2ZXJzaW9uLm00LCAKKyAgICAgICAgbTQvbHR+b2Jzb2xldGUubTQ6CisKKyAgIFVwZGF0ZSB0byBsaWJ0b29sLTIuMi40CisKKzIwMDktMDEtMDMgMTM6MjggIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGliczoKKworICAgY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnM6IENoZWNrIGZvciBhIGZ1bmN0aW9uLCBub3QgYSBtYWNyby4KKyAgIGNvbmZpZ3VyZTogUmVnZW5lcmF0ZQorCisyMDA5LTAxLTAzIDAxOjAzICBoYXJkYWtlcgorCisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzOgorCisgICByZXF1aXJlIC1sc3NsOyB3aWxsIGJlIGNoYW5nZWQgbGF0ZXIgdG8gZG8gJ2lmIG5lZWRlZCcKKworMjAwOS0wMS0wMyAwMDoxOSAgbWFnZnIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL21pYklJLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oLCBhZ2VudC9taWJncm91cC90YXJnZXQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL3NubXBfZ2V0X3N0YXRpc3RpYy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogVW5pZnkgYWxsIHNubXBkIHN0YXRpc3RpYyB2YXJpYWJsZXMgYW5kIG1ha2UgdGhlCisgICBoYW5kbGVycyBpbnN0YW5jZXMgb2YgYSBjb21tb24gaGFuZGxlci4KKworMjAwOS0wMS0wMSAxNzoyNiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgY2xlYW4gdXAgYSBmZXcgY29tbWVudHMgYW5kIHJlbW92ZSB1bnVzZWQgZnVuY3Rpb24KKworMjAwOS0wMS0wMSAxNzoyNSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXB0c20uYzoKKworICAgZml4IHZhcmlvdXMgbWlub3IgbWVtb3J5IGxlYWsgaXNzdWVzCisKKzIwMDktMDEtMDEgMTQ6MjggIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X2hhbmRsZXIuYywgYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMsIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oLCBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXRvcC5tMmMsIAorICAgICAgICBsb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmYsIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZiwgbG9jYWwvbWliMmMuaW50X3dhdGNoLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsIGxvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy5yb3cuY29uZiwgbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYsICAgCisgICAgICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6CisKKyAgIE5FV1M6IHNubXBsaWI6IENoYW5nZSB0aGUgdHlwZSBvZiB0aGUgb2lkIGFyZ3VtZW50cyBmcm9tIG9pZCogdG8KKyAgIGNvbnN0IG9pZCouIFVwZGF0ZSBtaWIyYyB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgY2hhbmdlLgorCisyMDA5LTAxLTAxIDEzOjU2ICBtYWdmcgorCisgICAqIGFnZW50L2FnZW50X2hhbmRsZXIuYzoKKworICAgQ2hlY2sgcmV0dXJuIHZhbHVlcyBhbmQgZnJlZSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG9uIGVycm9yLgorCisyMDA5LTAxLTAxIDEyOjU0ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgRG8gbm90IGxlYWsgYWxpYXNfbGlzdCBvbiByZXR1cm4gZnJvbSBfbmV4dF9hbGlhcy4KKworMjAwOS0wMS0wMSAxMToyNiAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmM6CisKKyAgIE1ha2UgdmFyaWFibGUgY29uc3QgYXMgaXQgbmV2ZXIgaXMgY2hhbmdlZC4KKworMjAwOS0wMS0wMSAxMToyNSAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYzoKKworICAgUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZS4KKworMjAwOC0xMi0zMSAyMTo0MSAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBkb24ndCB1c2UgdGhlIGZ1bmN0aW9ucyBpZiB3ZSdyZSBub3QgbGlua2VkIHdpdGggb3BlbnNzbAorCisyMDA4LTEyLTMxIDIwOjU2ICBoYXJkYWtlcgorCisgICAqIHBlcmwvVHJhcFJlY2VpdmVyL2NvbnN0LWMuaW5jLCBwZXJsL1RyYXBSZWNlaXZlci9jb25zdC14cy5pbmM6CisKKyAgIG5ld2VyIHBlcmwgZ2VuZXJhdGVkIHVwZGF0ZXMKKworMjAwOC0xMi0zMSAxODowMiAgaGFyZGFrZXIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIGFkZGVkIGEgZmV3IG1vcmUgcmVjdi9zZW5kIGRlYnVnZ2luZyBzdGF0ZW1lbnRzCisKKzIwMDgtMTItMzEgMTg6MDIgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmM6CisKKyAgIEFsbG93IHF1b3RlZCBzZWN1cml0eSBuYW1lcyBmb3Igb25lcyBjb250YWluaW5nIHNwYWNlcworCisyMDA4LTEyLTMxIDE4OjAxICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgsIHNubXBsaWIvTWFrZWZpbGUuaW4sICAgCisgICAgICBzbm1wbGliL3NubXBfb3BlbnNzbC5jOgorCisgICBhbiBvcGVuc3NsIGluaXRpYWxpemF0aW9uIHdyYXBwZXIKKworMjAwOC0xMi0zMCAwMDowMyAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0ZXN0LmMsIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisKKyAgIFVzZSBzbm1wX2R1cGxpY2F0ZV9vYmppZCBpbnN0ZWFkIG9mIHZhcmlvdXMgbWFsbG9jK21lbWNweQorICAgdmFyaWFudHMgaW4gb3JkZXIgdG8gbWFrZSBjbGVhcmVyIGNvZGUuCisKKzIwMDgtMTItMjkgMjM6MzQgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaCwgc25tcGxpYi9hc24xLmM6CisKKyAgIFVzZSBmb3JtYXQgc3RyaW5ncyBmb3IgcHJpbnRmLWxpa2UgZnVuY3Rpb25zLgorICAgUHJlZmVyIHN0cmNweSBvdmVyIHNwcmludGYoZGVzdCwgIiVzIiwgc3JjKQorICAgUHJlZmVyIERFQlVHTVNHVEwoKGZvcm1hdCwgYXJncykpIG92ZXIgc3ByaW50Zihsb2NhbCwgZm9ybWF0LAorICAgYXJncyk7IERFQlVHTVNHVEwoKCIlcyIsIGxvY2FsKSkKKworMjAwOC0xMi0xOCAxNzowNCAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaCwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgorCisgICBleHBvcnQgb3V0IG9mIHRoZSBmaWxlIHNvbWUgaGVscGZ1bCBnZW5lcmljIHVkcCBmdW5jdGlvbnMKKworMjAwOC0xMi0xNiAwMDoxMyAgaGFyZGFrZXIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaDoKKworICAgY2hhbmdlIGxvY2Fsc20gc2VjdXJpdHkgbW9kZWwgdG8gdHNtIChhbmQgYWRkIDEpCisKIDIwMDgtMTItMTUgMjM6MjUgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jOgpAQCAtNDQ2MSwxMiArNjYyMTcsNjEgQEAKICAgIFBhdGNoIHRvIGNoYW5nZSBhIHR5cGVkZWYgbmFtZSBmcm9tIGxpbmsgdG8gbm9kZWxpbmsgdG8gYXZvaWQKICAgIG5hbWluZyBjb25mbGljdCBpc3N1ZXMuCiAKLTIwMDgtMTItMDkgMDE6MDEgIGhhcmRha2VyCisyMDA4LTEyLTA5IDAxOjQxICBoYXJkYWtlcgogCi0gICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wbG9jYWxzbS5oLCBzbm1wbGliL3NubXBsb2NhbHNtLmM6CisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmM6CiAKLSAgIEFzIGFncmVlZCBpbiB0aGUgYWRtaW4gbWVldGluZywgcmVtb3ZlIHRoZSBvbGRlciBzbm1wbG9jYWxzbQotICAgc2VjdXJpdHkgbW9kZWwKKyAgIHVzZSBpbnQzMl90IGluc3RlYWQgb2YgaW50XzMyIHdoaWNoIGRvZXNuJ3Qgd29yayBhdCBhbGwgb24gRjEwCisKKzIwMDgtMTItMDkgMDE6MDcgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgcmVtb3ZlIHRoZSBub3RlIHRoYXQgd2UgbW92ZWQgdG8gc3ZuLi4uIG9ic29sZXRlIGF0IHRoaXMgcG9pbnQsCisgICB0byBzYXkgdGhlIGxlYXN0CisKKzIwMDgtMTItMDkgMDE6MDUgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgbWVudGlvbiB0aGUgVFNNIGltcGxlbWVudGF0aW9uCisKKzIwMDgtMTItMDkgMDA6NTggIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGZsYWcgc29tZSBzdGVwcyBhbmQgbWFuZGF0b3J5CisKKzIwMDgtMTItMDkgMDA6NTcgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaDoKKworICAgcmVtb3ZlIGFjY2lkZW50aWFsIG5ldyBkZWZpbmVzIHRoYXQgYXJlbid0IG5lZWRlZCB5ZXQKKworMjAwOC0xMi0wOSAwMDo1NiAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBsb2NhbHNtLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oLCBzbm1wbGliL3NubXBsb2NhbHNtLmMsICAgCisgICAgICBzbm1wbGliL3NubXB0c20uYzoKKworICAgcmVtb3ZlIG9sZGVyIGxvY2Fsc20gc2VjdXJpdHkgbW9kZWwgYW5kIHJlcGxhY2Ugd2l0aCBhIG5ld2VyIFRTTQorICAgYmFzZWQgb24gdGhlIHVwY29taW5nIElFVEYgc3BlYworCisyMDA4LTEyLTA5IDAwOjUwICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgZml4IGlzc3VlIHdpdGggY29udGV4dCBwcm9iaW5nCisKKzIwMDgtMTItMDQgMTI6MzMgIGpzYWZyYW5laworCisgICAqIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIERhZW1vbml6ZSBhZnRlciB0cmFuc3BvcnRzIGFyZSBjcmVhdGVkIGFuZCBsaXN0ZW5pbmcgc29ja2V0cyBhcmUKKyAgIGJvdW5kIHRvIGFwcHJvcHJpYXRlIHBvcnRzLiBUaGlzIGFsbG93cyB0byBleGl0IHdpdGggbm96ZXJvIGV4aXQKKyAgIGNvZGUgd2hlbiB0aGUgYmluZGluZyBmYWlscy4KIAogMjAwOC0xMi0wNCAxMTo0NCAganNhZnJhbmVrCiAKQEAgLTQ0NzUsNiArNjYyODAsNDAgQEAKIAogICAgUHJpbnQgcG9ydHMgYXMgdW5zaWduZWQgbnVtYmVycy4KIAorMjAwOC0xMS0yNCAxOTowOSAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaDoKKworICAgX19FWFRFTlNJT05TX18gaXMgbm93IGhhbmRsZWQgYnkgY29uZmlndXJlCisKKzIwMDgtMTEtMjIgMTg6MzYgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudDoKKworICAgRG8gbm90IHRyeSB0byB1c2UgdGhlIG1vZHVsZSBsaXN0IGFzIGEgZmlsZSB0aGF0IHNob3VsZCBiZQorICAgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCB0aHVzIG1ha2luZyBpdCBwb3NzaWJsZSB0byBidWlsZCBvbgorICAgU29sYXJpcy4KKworMjAwOC0xMS0yMCAyMjozMCAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfaGFuZGxlci5jLCBhZ2VudC9hZ2VudF90cmFwLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYywgYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMsIAorICAgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBSZXBsYWNlIG1lbWR1cCgodV9jaGFyKiopJngsICh1X2NoYXIqKXksIHogKiBzaXplb2Yob2lkKSkgd2l0aCB4CisgICA9IHNubXBfZHVwbGljYXQKKyAgIGVfb2JqaWQoeSwgeikgc2luY2UgdGhlIGxhdGVyIGlzIGVhc2llciB0byByZWFkIGFuZCBleHByZXNzZXMgdGhlCisgICBpbnRlbnRpb24gb2YgdAorICAgaGUgY29kZSBjbGVhcmVyLgorCisyMDA4LTExLTIwIDIyOjAxICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgVXNlIG1lbWNweSBpbnN0ZWFkIG9mIG1lbW1vdmUgdG8gY29weSBvaWRzIGFzIGl0IGlzIGtub3duIHRoYXQKKyAgIHRoZSBhcmVhcyBhcmUgbm9ub3ZlcmxhcHBpbmcuCisKIDIwMDgtMTEtMjAgMjA6NTEgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wU1RERG9tYWluLmM6CkBAIC00NDg4LDYgKzY2MzI3LDM1IEBACiAgICBDSEFOR0VTOiBEbyBub3QgdXNlICVtIGluIHByaW50Zi1mb3JtYXR0ZWQgc3RyaW5ncyBzaW5jZSAlbSBpbgogICAgcHJpbnRmIGlzIGEgZ2xpYmMgZXh0ZW5zaW9uLgogCisyMDA4LTExLTE2IDIyOjAxICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZS5hYzoKKworICAgQnVtcCB0aGUgcmVxdWlyZWQgYXV0b2NvbmYgdmVyc2lvbiB0byAyLjYzIGFzIHBlciAxNzMwMS4KKworMjAwOC0xMS0xNiAyMTo1NSAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnM6CisKKyAgIFJlbW92ZSBhbiB1bnVzZWQgZnVuY3Rpb24gZnJvbSB0aGUgY29uZmlndXJlIHRlc3QgZm9yIF9fZnVuY19fLgorCisyMDA4LTExLTE2IDIxOjUxICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19mdW5jdGlvbnMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0LCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTTQgdXNlcyBkbmwsIG5vdCBcIGZvciBsaW5lIGNvbmNhdGVuYXRpb24uCisgICBcIGludHJvZHVjZWQgYSBzcHVyaW91cyBkZWZpbmUgaW4gbmV0LXNubXAtY29uZmlnLmguaW4sIHRodXMgdGhpcworICAgY2hhbmdlLgorICAgUmVyYW4gYXV0b2NvbmYgYW5kIGF1dG9oZWFkZXIuCisKKzIwMDgtMTEtMTMgMjI6MTQgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmU6CisKKyAgIE5FV1M6IGJ1aWxkOiB1cGRhdGUgdG8gYXV0b2NvbmYgMi42MworCiAyMDA4LTExLTEzIDAwOjMwICB0YW5kZXJzCiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKQEAgLTQ0OTcsMTEgKzY2MzY1LDE3IEBACiAKIDIwMDgtMTEtMTMgMDA6MjYgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUuaW46CisgICAqIGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2FnZW50OgogCiAgICBmaXggdHlwbwogCi0yMDA4LTExLTEzIDAwOjI0ICB0YW5kZXJzCisyMDA4LTExLTEzIDAwOjI2ICB0YW5kZXJzCisKKyAgICogY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQ6CisKKyAgIGZpeCB0eXBvCisKKzIwMDgtMTEtMTMgMDA6MTkgIHRhbmRlcnMKIAogICAgKiBkaXN0L2V4dHJhY3RuZXdzOgogCkBAIC00NTI3LDEyICs2NjQwMSwxMTcgQEAKICAgIE5FV1M6IHNubXBkOiBBcHBseWluZyBwYXRjaCBmcm9tIE1hZ251cyBGcm9tcmVpZGUgdG8gZml4IHRoZQogICAgZ2V0YnVsayBpc3N1ZSByZXBvcnRlZCBieSBPc2NhciBNaXJhLVNhbmNoZXoKIAorMjAwOC0xMC0zMCAyMjozNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlOgorCisgICByZW1vdmUgdGhlIG9sZGVyIChvYnNvbGV0ZSkgbWFrZXJlbGVhc2Ugc2NyaXB0CisKKzIwMDgtMTAtMjIgMTc6MjQgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jLCBzbm1wbGliL3NubXBfY2xpZW50LmM6CisKKyAgIE1ha2UgaXQgcG9zc2libGUgdG8gYnVpbGQgdGhlIGxpYiB1c2luZyBhIEMrKyBjb21waWxlciBvbmNlIG1vcmUuCisKIDIwMDgtMTAtMjIgMDc6MjkgIGR0czEyCiAKICAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgogCiAgICBEb24ndCBjbGVhciBzZXNzaW9uIGZsYWdzIHdoZW4gdGVzdGluZyBvbmUgYml0LgogCisyMDA4LTEwLTIxIDIxOjEwICBtYWdmcgorCisgICAqICBBR0VOVC50eHQsIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsIGFnZW50L21pYmdyb3VwL21pYklJL210YV9zZW5kbWFpbC5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaCwgbG9jYWwvbWliMmMub2xkLWFwaS5jb25mLCAgIAorICAgICAgd2luMzIvZGlzdC9odG1saGVscC9GQVEuaHRtbDoKKworICAgTkVXUzogbWlzYzogUEFUQ0g6IDE3Mzc3Mjc6IGZyb20gam95Y2Vhbm1hY2hpbmU6IEFkZCBhCisgICBORVRTTk1QX09MREFQSV8gcHJlZml4IHRvIHRoZSBhY2Nlc3MgbWFjcm9zIHRoYXQgYXJlIHVzZWQgaW4gdGhlCisgICBvbGQtYXBpIGhlbHBlci4KKyAgIEkgZGlkIGFkZCB0aGUgcHJlZml4IHRvIGFsbCB1c2VycyBpbiBvdXIgY29kZS4KKworMjAwOC0xMC0yMSAyMTowMCAgbWFnZnIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oLCBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaCwgCisgICAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYzoKKworICAgTkVXUzogbWlzYzogUEFUQ0g6IDE3Mzc3Mjc6IGZyb20gam95Y2Vhbm1hY2hpbmU6IFJlcGxhY2UgYWxsIHVzZXMKKyAgIG9mIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFIHdpdGggTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKwogMjAwOC0xMC0xNiAwOTo1NiAganNhZnJhbmVrCiAKICAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKQEAgLTQ1NDIsNiArNjY1MjEsNTEgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjA4MjcyNjogY29ycmVjdGx5IHJlcG9ydCBOSUMgc3BlZWRzCiAgICBoaWdoZXIgdGhhbiA0R2JpdC9zCiAKKzIwMDgtMTAtMTYgMDg6MDAgIGpzYWZyYW5laworCisgICAqIG1hbjoKKworICAgU2NyYXRjaCBwcmV2aW91cyBjb21taXQsIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEgdG8gYmUgaWdub3JlZC4KKworMjAwOC0xMC0xNiAwNzozNyAganNhZnJhbmVrCisKKyAgICogbWFuOgorCisgICBBZGQgY29tcGlsZWQgbmV0LXNubXAtY29uZmlnLjEgdG8gc3ZuOmlnbm9yZSBsaXN0CisKKzIwMDgtMTAtMTUgMTI6NTcgIGpzYWZyYW5laworCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvaXAtbWliLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgsCisgICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuYywKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2dldC5oLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmgsIAorICAgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIIDE3OTcxMTE6IGltcGxlbWVudCBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlCisKKzIwMDgtMTAtMTUgMDk6MjcgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIHBvcnRhYmlsaXR5IGZpeDogYXZvaWQgdmFyaWFibGUgZGVjbGFyYXRpb25zIGluIHRoZSBtaWRkbGUgb2YKKyAgIGNvZGUKKwogMjAwOC0xMC0xNCAxODo1NSAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKQEAgLTQ1NzAsNiArNjY1OTQsMjMgQEAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTk3NzQzOTogRml4IHBhc3MvX3BlcnNpc3QgYnVnIHdpdGggU0VUCiAgICBvaWQgdmFsdWUKIAorMjAwOC0xMC0xMiAxNzoyNCAgbWFnZnIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUmVpbXBsZW1lbnRhdGlvbiBvZiBzbm1wTVBEU3RhdHMuCisKKzIwMDgtMTAtMTAgMjE6MTMgIGR0czEyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQ6CisKKyAgIENvbnNvbGlkYXRlIGNoZWNrcyBvbiBnZW5lcmFsIE8vUyBjaGFyYWN0ZXJpc3RpY3MKKwogMjAwOC0xMC0wNyAwODo1MCAganNhZnJhbmVrCiAKICAgICogZGlzdC9maW5kLXJlcXVpcmVzOgpAQCAtNDU3NywxOCArNjY2MTgsNzggQEAKICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBCVUc6IDIwOTU5ODM6IGZpeCBzeW50YXggZXJyb3IgaW4KICAgIGZpbmQtcmVxdWlyZXMgaGVscGVyIHNjcmlwdCBhbmQgbWFrZSBpdCBleGVjdXRhYmxlCiAKKzIwMDgtMTAtMDYgMTk6MzEgIGhhcmRha2VyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg6CisKKyAgIGlmZGVmIHN5cy9wb2xsCisKKzIwMDgtMTAtMDMgMTQ6MTYgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuYWM6CisKKyAgIHBhdGNoIGZyb20gU2hhY2hhciBTY2hlbWVzaCB0byBmaXggYSBxdW90ZSBlc2NhcGluZworCisyMDA4LTA5LTMwIDIyOjE5ICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHRyYXBkLmM6CisKKyAgIGFkZGVkIGEgbmVlZGVkIHRyYWlsaW5nIG5ld2xpbmUKKwogMjAwOC0wOS0zMCAyMjoxMSAgZHRzMTIKIAogICAgKiBwZXJsL2FnZW50L2FnZW50LnhzOgogCiAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjAyMjk0ODogRml4IGZvciBDb3VudGVyNjQgaW4gcGVybCBzdWJhZ2VudAogCisyMDA4LTA5LTMwIDIxOjQwICBoYXJkYWtlcgorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgLSBORVdTOiBzbm1wbGliOiBJbXBsZW1lbnRlZCBSRkM1MzQzIGNvbnRleHRFbmdpbmVJRCBwcm9iaW5nLgorICAgVGhpcyBhbGxvd3MgZm9yIHByb2Jpbmcgb2YgdGhlIGNvbnRleHRFbmdpbmVJRCB3aXRob3V0IHJlcXVpcmluZworICAgdGhlIFVTTSBzZWN1cml0eSBtb2RlbC4KKyAgIC0gaW1wbGVtZW50ZWQgZW50aXJlbHkgd2l0aGluIHRoZSBsaWJyYXJ5IGZvciBib3RoIGNsaWVudHMgYW5kCisgICBzZXJ2ZXJzLgorCisyMDA4LTA5LTMwIDIxOjMzICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oOgorCisgICBBZGQgYSBsb2NhbCBkZWZpbml0aW9uIGZvciBoYXZpbmcgc2VjdXJpdHkgbW9kZWxzIGRlZmluZSB0aGVpcgorICAgb3duCisgICBjb250ZXh0RW5naW5lSUQgcHJvYmUKKworMjAwOC0wOS0zMCAyMTozMSAgaGFyZGFrZXIKKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBBZGQgYSBkZWZpbml0aW9uIGZvciB0aGUgU1NIIGRvbWFpbgorCiAyMDA4LTA5LTMwIDIxOjA4ICBkdHMxMgogCiAgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKIAogICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIOiAxMjU3MzQ3OiBOb24tZml4ZWQgc2l6ZSBjb25uZWN0aW9uIGJ1ZmZlcgogCisyMDA4LTA5LTMwIDA3OjMyICBqc2FmcmFuZWsKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgTkVXUzogYnVpbGRpbmc6IFBBVENIOiAyMDkxMTU2OiBjb3JyZWN0bHkgZGVjbGFyZSBkZXBlbmRlbmNpZXMgaW4KKyAgIE1ha2VmaWxlLgorICAgJ21ha2UgLWogPE4+JyBzaG91bGQgd29yayBub3cuCisKKzIwMDgtMDktMjQgMjA6NTggIGR0czEyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVyczoKKworICAgSWRlbnRpZnkgd2hlcmUgcGFydGljdWxhciBjaGVja3MgYXJlIGFjdHVhbGx5IHVzZWQKKyAgIChsaWJyYXJ5LCBhZ2VudCwgYXBwbGljYXRpb25zIG9yIG5vdCBhdCBhbGwpCisKIDIwMDgtMDktMjQgMTI6NTMgIGpzYWZyYW5lawogCiAgICAqICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jLCAgIApAQCAtNDU5Nyw3NyArNjY2OTgsMTMyIEBACiAgICBVc2UgdGhlIGxvbmdlc3QgaW50ZWdlciBmb3IgaW5vZGUgbnVtYmVycyBhbmQgKHBvc3NpYmx5IDY0IGJpdCkKICAgIGNvdW50ZXJzLgogCi0yMDA4LTA5LTA1IDA5OjI3ICBkdHMxMgorMjAwOC0wOS0yMCAwOTowMSAgbWFnZnIKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjIgKQorICAgTkVXUzogYnVpbGQ6IERvIG5vdCByZXF1aXJlIHVzZSBvZiAtLXdpdGgtZW5kaWFubmVzcyB3aGVuCisgICBjcm9zcy1jb21waWxpbmcuCiAKLTIwMDgtMDktMDUgMDk6MjcgIGR0czEyCisyMDA4LTA5LTE5IDE1OjE5ICBkdHMxMgogCi0gICAqIENIQU5HRVM6CisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBDb3JyZWN0IGxvY2F0aW9uIG9mIGRvY3VtZW50YXRpb24gZmlsZXMuCiAKLTIwMDgtMDktMDUgMDk6MjUgIGR0czEyCisyMDA4LTA5LTE5IDA1OjI4ICBtYWdmcgogCi0gICAqIENoYW5nZUxvZzoKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgdmVyc2lvbiB1cGRhdGUKKyAgIEFuZCBhZGQgdGhlIGNodW5rIHRoYXQgSSBsb3N0LgogCi0yMDA4LTA5LTA1IDA5OjIwICBkdHMxMgorMjAwOC0wOS0xOSAwNToyMyAgbWFnZnIKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmFjLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgogCi0gICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgTW92ZSBtb3JlIHRoaW5ncyBmcm9tIGFjY29uZmlnLmggdG8gdGhlIHRlbXBsYXRlcyBpbiB0aGUKKyAgIGNvbmZpZ3VyZSBpbnB1dCBmaWxlcy4KIAotMjAwOC0wOS0wNSAwOToxNiAgZHRzMTIKKzIwMDgtMDktMTcgMTM6MzEgIGpzYWZyYW5lawogCi0gICAqIGRveHlnZW4uY29uZjoKKyAgICogZGlzdC9maW5kLXJlcXVpcmVzOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjIgKQorICAgbWFrZSBmaW5kLXJlcXVpcmVzIGV4ZWN1dGFibGUgc28gaXQncyBhY3R1YWxseSB1c2FibGUgYnkgdGhlCisgICBuZXQtc25tcC5zcGVjCiAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzIwMDgtMDktMTcgMTI6MDggIGpzYWZyYW5lawogCi1DaGFuZ2VzOiBWNS40LjEgLT4gVjUuNC4yCisgICAqIG1hbi9NYWtlZmlsZS5pbiwgbWFuL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEuZGVmOgorCisgICBhZGQgbWFuIHBhZ2UgZm9yIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyCisKKzIwMDgtMDktMTYgMTg6MDIgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCwgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgRnVydGhlciBtaW5pbWl6YXRpb24gb2YgYWNjb25maWcuaAorCisyMDA4LTA5LTExIDIyOjI4ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE1vdmUgYSBmZXcgbW9yZSB2YXJpYWJsZXMgb3V0IG9mIGFjY29uZmlnLmgKKworMjAwOC0wOS0xMSAyMDozNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTczNzQzOTogZnJvbSBlbWl5OiBhdXRvbWF0aWMgbGluayB1cC9kb3duCisgICB0cmFwcyBvbiBhIHdhbGs7IHN0aWxsIG5lZWQgYSBiZXR0ZXIgaW50ZXJmYWNlIGZvciBtYW51YWxseSBkb2luZworICAgdGhpbmdzIG9uIGFuIG9jY2FzaW9uYWwgYmFzaXMKKworMjAwOC0wOS0xMSAyMDoyNSAgaGFyZGFrZXIKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBORVdTOiBzbm1wbGliOiBQQVRDSDogNzAwNjgxOiBsaW1pdGVkIHN1cHBvcnQgZm9yIFVEUHY0IGJyb2FkY2FzdAorICAgYWRkcmVzc2VzCisKKzIwMDgtMDktMTAgMDY6MzkgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogVXNlIEFDX0NIRUNLX1RZUEVTIGluc3RlYWQgb2YgYSBob21lZ3Jvd24KKyAgIGFsdGVybmF0aXZlIHRvIGNoZWNrIGZvciB0eXBlcworCisyMDA4LTA5LTA5IDIwOjI3ICBtYWdmcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICBBZGQgYWxsIHRoZSBwYXJ0cyBvZiBjb25maWd1cmUuYWMgdG8gdGhlIGRlcGVuZGVuY3kgbGlzdAorCisyMDA4LTA5LTA5IDE4OjEzICBoYXJkYWtlcgorCisgICAqIE1ha2VmaWxlLmluOgorCisgICB1cGRhdGUgdG8gcmVmbGVjdCBjb25maWd1cmUuaW4gLT4gY29uZmlndXJlLmFjIGNoYW5nZQorCisyMDA4LTA5LTA5IDE2OjE1ICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIGRlZmF1bHQgdG8gLXAwCisKKzIwMDgtMDktMDggMjM6NDEgIGhhcmRha2VyCisKKyAgICogc25tcGxpYi9zbm1wbG9jYWxzbS5jOgorCisgICBjaGVjayBmb3IgYSBzZXNzaW9uIHR1bm5lbGVkIGZsYWcgYmVmb3JlIHJldHVybmluZyBhbgorICAgYXV0aGVudGljYXRpb24gZmFpbHVyZQorCisyMDA4LTA5LTA4IDIzOjM5ICBoYXJkYWtlcgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgU2V0IHRoZSB0dW5uZWxlZCBmbGFnIHdoZW4gZGVhbGluZyB3aXRoIGEgdHVubmVsLWJhc2VkIHRyYW5zcG9ydDsKKyAgIGRvbid0IHJlcXVpcmUgYSBzZWN1cml0eUVuZ2luZUlEIGlmIHRoZSBzZWN1cml0eSBtb2RlbCBkb2Vzbid0CisgICBoYXZlIG9uZSAoanVzdCBVU00gbmVlZHMgaXQpCisKKzIwMDgtMDktMDggMjA6MjQgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCwgc25tcGxpYi9zbm1wLXRjLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMjA5OTk4NTogQWRkZWQgY29uc3QgcXVhbGlmaWVycyB0byB0aW1lCisgICBjb252ZXJzaW9uIHJvdXRpbnMKIAogMjAwOC0wOS0wNSAwNzo1MSAgZHRzMTIKIApAQCAtNDY4MCw3NiArNjY4MzYsNzUgQEAKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jOgogCi0gICBDSEFOR0VTOiBweXRob246IEJVRzogMTg2ODI3ODogUHl0aG9uIHNlZ2ZhdWx0IChpbnRyb2R1Y2VkIGJ5IHIxNjk2MikKKyAgIENIQU5HRVM6IHB5dGhvbjogQlVHOiAxODY4Mjc4OiBQeXRob24gc2VnZmF1bHQgKGludHJvZHVjZWQgYnkKKyAgIHIxNjk2MikKIAotMjAwOC0wOC0yOSAyMToxOSAgZHRzMTIKKzIwMDgtMDktMDMgMTM6NDMgIGR0czEyCiAKLSAgICogIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAotICAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnJjMyApCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDIwMDA4NzQ6IENsZWFudXAgdHJhbnNwb3J0IHNlbGVjdGlvbi4KIAotMjAwOC0wOC0yOSAyMToxOCAgZHRzMTIKKzIwMDgtMDktMDMgMTM6MjkgIGR0czEyCiAKLSAgICogQ0hBTkdFUywgTkVXUzoKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob246CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBUaWR5IHVwIHBlcmwvcHl0aG9uIGFuZCBPL1MgZGF0YSBzdHJ1Y3R1cmUgdGVzdHMuCiAKLTIwMDgtMDgtMjkgMjE6MTUgIGR0czEyCisyMDA4LTA4LTMxIDE4OjE0ICBkdHMxMgogCi0gICAqIENoYW5nZUxvZzoKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMSwgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfcHJvZ3MsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlOgogCi0gICB2ZXJzaW9uIHVwZGF0ZQorICAgVGlkeSB1cCAobW9zdCBvZikgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cyBvZiB0aGUgY29uZmlndXJlCisgICBmcmFtZXdvcmsuCisgICBUaGlzIGlzIG1vc3RseSByZS1pbmRlbnRhdGlvbiwgcmUtY29tbWVudGluZywgYW5kIGEgY2VydGFpbgorICAgYW1vdW50CisgICBvZiBqdWRpY2lvdXMgcmUtb3JkZXJpbmcgb2YgdGhlIHRlc3RzIHdpdGhpbiBpbmRpdmlkdWFsCisgICBzdWItc2NyaXB0LgogCi0yMDA4LTA4LTI5IDIxOjA4ICBkdHMxMgorMjAwOC0wOC0zMSAxNzozMCAgZHRzMTIKIAotICAgKiAgbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywgIAotICAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuYWM6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBBbm5vdGF0ZSBjb25maWd1cmUgdGVtcGxhdGUgd2l0aCBzdWdnZXN0ZWQgYmVzdCBwcmFjdGljZQorICAgc3RydWN0dXJlLgorICAgTm90ZSB0aGF0IG5vbmUgb2YgdGhlc2UgY2hhbmdlcyBoYXMgYWx0ZXJlZCB0aGUgY29kZSB3aXRoaW4KKyAgICdjb25maWd1cmUnIGl0c2VsZiAob3RoZXIgdGhhbiBhZmZlY3RpbmcgbGluZSBudW1iZXJzKQogCi0yMDA4LTA4LTI5IDIxOjA0ICBkdHMxMgorMjAwOC0wOC0zMSAxNzoyNiAgZHRzMTIKIAotICAgKiBkb3h5Z2VuLmNvbmY6CisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5hYywgY29uZmlndXJlLmQsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudCwgY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliLCAKKyAgICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucywgY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMsIAorICAgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbGlicywgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MxLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MyLCBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQsIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocywgICAKKyAgICAgIGNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uLCAgIAorICAgICAgY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMsICAgCisgICAgICBjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZToKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnJjMyApCisgICBORVdTOiBidWlsZDogc3BsaXQgY29uZmlndXJlIHRlbXBsYXRlIGludG8gc2VwYXJhdGUgcGllY2VzLgorICAgKE1vc3RseSkgc2VsZi1jb250YWluZWQsIGFuZCBzaWduaWZpY2FudGx5IGxlc3MgY29uZnVzaW5nIQogCisyMDA4LTA4LTMxIDE3OjIzICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZS5hYywgY29uZmlndXJlLmluOgorCisgICBSZW5hbWUgY29uZmlndXJlIHRlbXBsYXRlIGluIGxpbmUgd2l0aCBjdXJyZW50IGJlc3QgcHJhY3RpY2UuCiAKIDIwMDgtMDgtMjkgMTk6NTQgIGR0czEyCiAKQEAgLTQ3NTcsMTIgKzY2OTEyLDIwIEBACiAKICAgIFJldGFpbiBmaWxlbmFtZXMgd2hpY2ggZG9uJ3QgaW5jbHVkZSB0aGUgZXhwZWN0ZWQgcHJlZml4LgogCisyMDA4LTA4LTI3IDIxOjU1ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3M6CisKKyAgIGlnbm9yZSAubGlicyBkaXJlY3RvcmllcworCiAyMDA4LTA4LTI3IDEzOjM5ICBqc2FmcmFuZWsKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmM6CiAKICAgIFMvMzkwIHVzZXMgc2xpZ2h0bHkgZGlmZmVyZW50IGZvcm1hdCBvZiB0aGUgL3Byb2MvY3B1aW5mbyBmaWxlOgotICAgcHJvY2Vzc29yIDA6IHZlcnNpb24gPSBGRiwgaWRlbnRpZmljYXRpb24gPSAwNjBBRkUsIG1hY2hpbmUgPSAyMDk0CisgICBwcm9jZXNzb3IgMDogdmVyc2lvbiA9IEZGLCBpZGVudGlmaWNhdGlvbiA9IDA2MEFGRSwgbWFjaGluZSA9CisgICAyMDk0CiAKIDIwMDgtMDgtMjIgMjM6NDcgIHRhbmRlcnMKIApAQCAtNDc3NiwxNCArNjY5MzksMTggQEAKIAogICAgTkVXUzogYnVpbGQ6IEJVRzogMjAyMzgwMzogQ29tcGlsYXRpb24gcHJvYmxlbXMgb24gSFAtVVggMTEuMzEKICAgIENIQU5HRVM6IGJ1aWxkOiBMaW1pdCB0aGUgdXNlIG9mIF9LRVJORUwgZGVmaW5pdGlvbnMgaW4gY29uZmlndXJlCi0gICB0ZXN0cyB0byBtYXRjaCB0aGUgdXNlIG9mIF9LRVJORUwgaW4gb3VyIGNvZGViYXNlCisgICB0ZXN0cyB0byBtYXRjaCB0aGUgdXNlCisgICBvZiBfS0VSTkVMIGluIG91ciBjb2RlYmFzZQogCiAyMDA4LTA4LTIyIDAwOjE4ICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgogCi0gICBGaXggYnVpbGQgZmFpbHVyZSBvbiBIUC1VWCAxMS4zMTogdXNlIGdldHBhZ2VzaXplKCkgaW5zdGVhZCBvZiBQR1NISUZULgotICAgU3VjY2Vzc2Z1bGx5IHRlc3RlZCBvbiBIUC1VWCAxMC4yMCwgMTEuMDAsIDExLjExLCAxMS4yMyBhbmQgMTEuMzEuCisgICBGaXggYnVpbGQgZmFpbHVyZSBvbiBIUC1VWCAxMS4zMTogdXNlIGdldHBhZ2VzaXplKCkgaW5zdGVhZCBvZgorICAgUEdTSElGVC4KKyAgIFN1Y2Nlc3NmdWxseSB0ZXN0ZWQgb24gSFAtVVggMTAuMjAsIDExLjAwLCAxMS4xMSwgMTEuMjMgYW5kCisgICAxMS4zMS4KIAogMjAwOC0wOC0yMSAxMDowMyAganNhZnJhbmVrCiAKQEAgLTQ3OTEsMzU0NyArNjY5NTgsNTMyOCBAQAogCiAgICBhZGQgU0NUUC1NSUIKIAorMjAwOC0wOC0yMCAxNzozNyAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKKworICAgSGF2ZSBvbmx5IG9uZSB2YXJpYWJsZSBuYW1lZCBwYXNzd2QgaW4gc211eF9hdXRoX3BlZXIuCisKIDIwMDgtMDgtMTkgMjM6MjIgIHRhbmRlcnMKIAogICAgKiBSRUFETUUudHJ1NjQ6CiAKICAgIHVwZGF0ZSBSRUFETUUgZm9yIFRydTY0IGFmdGVyIHRoZSBzZW5kdG8vcmVjdmZyb20gZml4ZXMKIAotMjAwOC0wOC0xOSAyMDozNiAgZHRzMTIKKzIwMDgtMDgtMTkgMjA6MjcgIHRhbmRlcnMKIAotICAgKiAgRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsICAgCi0gICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaDoKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnJjMiApCisgICBmaXggc2lnbmlmaWNhbnQgdHlwbwogCi0yMDA4LTA4LTE5IDIwOjM2ICBkdHMxMgorMjAwOC0wOC0xOSAxMzoyNSAgZHRzMTIKIAotICAgKiBDSEFOR0VTLCBORVdTOgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmg6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBGb3JjZSB1c2Ugb2YgL3Byb2MvJWQvcHNpbmZvIGludGVyZmFjZSBvbiBTb2xhcmlzLgorICAgVGVtcG9yYXJ5IGhhY2sgd2hpbGUgd2UgaW52ZXN0aWdhdGUgdGhlIGlzc3VlcyB3aXRoCisgICB0aGUga3ZtX3Byb2MoKSBjb2RlLgorICAgCisgICBUaGUgJ2NvbmZpZ19yZXF1aXJlJyBwcm9jZXNzaW5nIGRvZXNuJ3QgY3VycmVudGx5CisgICBwaWNrIHVwIHRoZSBmdWxsICNpZmRlZiBlbnZpcm9ubWVudCwgc28gZGVmYXVsdHMKKyAgIHRvIHVzaW5nIGt2bV9wcm9jKCkuIEknbSBub3QgY29udmluY2VkIHRoaXMgd2FzCisgICB3b3JraW5nIGJlZm9yZSBhbnl3YXksCiAKLTIwMDgtMDgtMTkgMjA6MjYgIGR0czEyCisyMDA4LTA4LTE5IDEzOjE3ICBkdHMxMgogCi0gICAqIENoYW5nZUxvZzoKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfcHNpbmZvLmM6CiAKLSAgIHZlcnNpb24gdXBkYXRlCisgICBGaXggcHJvYmxlbXMgaW4gL3Byb2MvJWQvcHNpbmZvIGludGVyZmFjZSBwcm9jZXNzaW5nLgogCi0yMDA4LTA4LTE5IDIwOjA4ICBkdHMxMgorMjAwOC0wOC0xOSAwODo0NyAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQ6CisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMsIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3M6CiAKLSAgIG1ha2UgZGVwZW5kCisgICBJZ25vcmUgbGlicmFyeSBhbmQgb2JqZWN0IGZpbGVzCiAKLTIwMDgtMDgtMTkgMjA6MDMgIGR0czEyCisyMDA4LTA4LTE5IDA4OjM2ICBkdHMxMgogCi0gICAqICBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsICAgCi0gICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsICAgCi0gICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCAgCi0gICAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLCAgIAotICAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgICAKLSAgICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgorICAgKiAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmM6CiAKLSAgIGRvY3VtZW50YXRpb24gdXBkYXRlCisgICBBY3RpdmF0ZSBzdGF0aXN0aWNzIHRoYXQgYXJlIHN1cHBvcnRlZCBvbiBTb2xhcmlzIGFuZC9vciBMaW51eAorICAgSVB2NgogCi0yMDA4LTA4LTE5IDE5OjU1ICBkdHMxMgorMjAwOC0wOC0xOSAwODoxMSAgZHRzMTIKIAotICAgKiBkb3h5Z2VuLmNvbmY6CisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgogCi0gICAtIHZlcnNpb24gdGFnICggNS40LjIucmMyICkKLQorICAgSW1wcm92ZWQgdHJhY2luZyBvZiBTTVVYIGF1dGhlbnRpY2F0aW9uIHByb2JsZW1zLgogCiAyMDA4LTA4LTE5IDA4OjA4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmM6Ci0gICAgIEJldHRlciB0cmFjaW5nIG9mIERpc01hbiBvYmplY3QgcHJvY2Vzc2luZy4KKworICAgQmV0dGVyIHRyYWNpbmcgb2YgRGlzTWFuIG9iamVjdCBwcm9jZXNzaW5nLgogCiAyMDA4LTA4LTE4IDIyOjQzICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaDoKLSAgICAgcmVtb3ZlIGJvZ3VzIHdoaXRlIHNwYWNlCiAKLTIwMDgtMDgtMTggMjI6MzggIHRhbmRlcnMKLQotICAgKiBSRUFETUUuYWdlbnQtbWliczoKLSAgICAgZG9jdW1lbnQgU0NUUC1NSUIgYWRkaXRpb24KKyAgIHJlbW92ZSBib2d1cyB3aGl0ZSBzcGFjZQogCiAyMDA4LTA4LTE4IDIyOjAxICBkdHMxMgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMjAyMTQ0NDogU3VwcG9ydCBTTk1QdjJjIGluIGdldHRhYmxlIHByb2Nlc3NpbmcKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDIwMjE0NDQ6IFN1cHBvcnQgU05NUHYyYyBpbiBnZXR0YWJsZQorICAgcHJvY2Vzc2luZwogCiAyMDA4LTA4LTE4IDIxOjQ0ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcGtzbS5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMjAwMzQ1MDogRml4IGEgY291cGxlIG9mIDY0LWJpdCBwcm9ibGVtcy4KIAotMjAwOC0wOC0xOCAxOTowNSAgdGFuZGVycworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDIwMDM0NTA6IEZpeCBhIGNvdXBsZSBvZiA2NC1iaXQKKyAgIHByb2JsZW1zLgogCi0gICAqIG1pYnMvTWFrZWZpbGUuaW46Ci0gICAgIGZpeCBTQ1RQLU1JQiBpbnN0YWxsCisyMDA4LTA4LTE4IDE0OjMwICBoYXJkYWtlcgogCi0yMDA4LTA4LTE3IDIxOjI5ICBkdHMxMgorICAgKiBhcHBzL3NubXB1c20uYzoKIAotICAgKiBhZ2VudC9taWJncm91cC9zY3RwLW1pYiwgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oLAotICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmgsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jLCBtaWJzL01ha2VmaWxlLmluLAotICAgICBtaWJzL01ha2VmaWxlLm1pYiwgbWlicy9TQ1RQLU1JQi50eHQ6Ci0gICAgIE5FV1M6IHNubXBkOiBQQVRDSDogMjAyMzYzMzogYWRkIFNDVFAtTUlCIGltcGxlbWVudGF0aW9uIChMaW51eCBvbmx5KQorICAgcmV2ZXJ0IDE3MTU3IHNpbmNlIGl0IGJyb2tlIHNvbWV0aGluZworCisyMDA4LTA4LTE4IDA3OjA2ICBqc2FmcmFuZWsKKworICAgKiBSRUFETUUuYWdlbnQtbWliczoKKworICAgYWRkIFNDVFAtTUlCIGltcGxlbWVudGF0aW9uIChMaW51eCBvbmx5KQogCiAyMDA4LTA4LTE3IDIxOjA4ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDIwMjI5MzY6IEZpeCBBZ2VudFggQ291bnRlcjY0IGRlY29kaW5nIG9uCi0gICAgIDY0LWJpdCBhcmNoaXRlY3R1cmVzCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjAyMjkzNjogRml4IEFnZW50WCBDb3VudGVyNjQgZGVjb2Rpbmcgb24KKyAgIDY0LWJpdCBhcmNoaXRlY3R1cmVzCiAKIDIwMDgtMDgtMTcgMjA6NTAgIGR0czEyCiAKICAgICogYWdlbnQvc25tcGQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAyMDE0MjA0OiBTdXBwb3J0IC1nIHtncm91cG5hbWV9CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMjAxNDIwNDogU3VwcG9ydCAtZyB7Z3JvdXBuYW1lfQorCisyMDA4LTA4LTE1IDEzOjQ1ICBoYXJkYWtlcgorCisgICAqIGFwcHMvc25tcHVzbS5jOgorCisgICBORVdTOiBzbm1wdXNtOiBQQVRDSDogMTU5MTM1NTogZnJvbSBwcGFzc2VyYTogQWxsb3cgY2xvbmluZyB0bworICAgZW5naW5lSURzIHRoYXQgYXJlIGRpZmZlcmVudCBmcm9tIHRoZSBhZ2VudCdzIGVuZ2luZUlECisKKzIwMDgtMDgtMTQgMTU6NTQgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jOgorCisgICBTV1J1biBwcm9jZXNzaW5nIG5lZWRzIGFjY2VzcyB0byB0aGUgaW50ZXJuYWxzIG9mICdzdHJ1Y3QgdXNlcicKKyAgIChTb2xhcmlzKQogCiAyMDA4LTA4LTEzIDEzOjAyICBqc2FmcmFuZWsKIAotICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6Ci0gICAgIENvcnJlY3RseSBwYXJzZSBpbnRlcmZhY2UgaW5kZXhlcyBoaWdoZXIgdGhhbiAweGZmLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYzoKKworICAgQ29ycmVjdGx5IHBhcnNlIGludGVyZmFjZSBpbmRleGVzIGhpZ2hlciB0aGFuIDB4ZmYuCiAKIDIwMDgtMDgtMTIgMDg6MjcgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYzoKLSAgICAgQ2xvc2UgZmlsZSB3aGVuIHBhcnNpbmcgb2YgL3Byb2MvWFhYL3N0YXR1cyBmYWlscy4KKworICAgQ2xvc2UgZmlsZSB3aGVuIHBhcnNpbmcgb2YgL3Byb2MvWFhYL3N0YXR1cyBmYWlscy4KKworMjAwOC0wOC0xMiAwNzoyNyAganNhZnJhbmVrCisKKyAgICogIGFnZW50L21pYmdyb3VwL3NjdHAtbWliLCBhZ2VudC9taWJncm91cC9zY3RwLW1pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jLCBtaWJzL01ha2VmaWxlLmluLCAgIAorICAgICAgbWlicy9NYWtlZmlsZS5taWIsIG1pYnMvU0NUUC1NSUIudHh0OgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDIwMjM2MzM6IGFkZCBTQ1RQLU1JQiBpbXBsZW1lbnRhdGlvbiAoTGludXgKKyAgIG9ubHkpCisKKzIwMDgtMDgtMDcgMTA6MDMgIGpzYWZyYW5laworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgRml4IGluZXROZXRUb01lZGlhVGFibGUgdGFibGUgcHJvY2Vzc2luZyAtIGNvbnRpbnVlIHdpdGggbmV4dAorICAgZW50cnkgd2hlbiBmaWxsdXBfZW50cnlfaW5mbygpIGZhaWxzLgogCiAyMDA4LTA4LTA3IDA5OjAwICBqc2FmcmFuZWsKIAogICAgKiBtYW4vc25tcGQuY29uZi41LmRlZjoKLSAgICAgRml4IGRvY3VtZW50YXRpb24gb2YgZXhlYyBzdGF0YW1lbnQgLSBpdCBkb2VzIG5vdCBjYWNoZSByZXN1bHRzIGFueW1vcmUuCi0gICAgIFJlbGF0ZWQgdG8gYnVnIDg4MzEzNAogCi0yMDA4LTA3LTMxIDE2OjQ4ICBkdHMxMgorICAgRml4IGRvY3VtZW50YXRpb24gb2YgZXhlYyBzdGF0YW1lbnQgLSBpdCBkb2VzIG5vdCBjYWNoZSByZXN1bHRzCisgICBhbnltb3JlLiBSZWxhdGVkIHRvIGJ1ZyA4ODMxMzQKIAotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjIucmMxICkKKzIwMDgtMDctMzEgMjM6MzkgIGR0czEyCiAKLTIwMDgtMDctMzEgMTY6NDcgIGR0czEyCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYzoKIAotICAgKiBDSEFOR0VTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgRml4IGEgdHlwbywgYW5kIGEgYm9ndXMgZmllbGQgbmFtZSBpbiB0aGUgQUlYIHByb2NpbmZvIHN0cnVjdHVyZS4KIAotMjAwOC0wNy0zMSAxNjoxNCAgZHRzMTIKKzIwMDgtMDctMzEgMjM6MzUgIGR0czEyCiAKLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2t2bV9wcm9jLmM6CiAKLTIwMDgtMDctMzEgMTY6MDUgIGR0czEyCi0KLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwKLSAgICAgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCi0KLTIwMDgtMDctMzEgMTY6MDMgIGR0czEyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgSW5jbHVkZSBtaXNzaW5nIGhlYWRlcnMsIGFuZCBmaXggb25lIGJvZ3VzIGZpZWxkIG5hbWUgaW4gU29sYXJpcworICAgcHJvYyBzdHJ1Y3R1cmUuCiAKIDIwMDgtMDctMzAgMTc6NDAgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6Ci0gICAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDIwMDMxNDQ6IEluY3JlYXNlIHNpemUgb2YgQWdlbnRYIHBhY2tldCBidWlsZCBidWZmZXIKIAotMjAwOC0wNy0zMCAxNzoyOCAgZHRzMTIKLQotICAgKiBuZXQtc25tcC1jb25maWcuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTY4MTAzNTogZnJvbSBtYWdmcjogaW1wcm92ZSBuZXQtc25tcC1jb25maWcgL2Jpbi9zaCBjb21wYXRpYmlsaXR5Ci0gICAgIEJhY2stcG9ydCBvZiBTVk4gcmV2aXNpb24gMTU5NjEKLQotMjAwOC0wNy0zMCAwOTo1OCAgZHRzMTIKLQotICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKLSAgICAgQ0hBTkdFUzogYWdlbnQ6IEJVRzogMTU1NzM3MjogUmVhbGlnbiBockZTU3RvcmFnZUluZGV4IHdpdGggaHJTdG9yYWdlVGFibGUKKyAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDIwMDMxNDQ6IEluY3JlYXNlIHNpemUgb2YgQWdlbnRYIHBhY2tldAorICAgYnVpbGQgYnVmZmVyCiAKIDIwMDgtMDctMzAgMDc6NTcgIGR0czEyCiAKICAgICogc25tcGxpYi9taWIuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAyMDI3ODM0OiBFeHRlbmQgc3RyaW5nIHByaW50IGJ1ZmZlciBieSB0aGUgbWluaW11bSBuZWNlc3NhcnkuCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMjAyNzgzNDogRXh0ZW5kIHN0cmluZyBwcmludCBidWZmZXIgYnkgdGhlCisgICBtaW5pbXVtIG5lY2Vzc2FyeS4KKworMjAwOC0wNy0yOSAyMzozNCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jOgorCisgICBGaXggYXNzb3J0ZWQgc2lsbHkgdHlwb3MgLSB1bmJhbGFuY2VkIHBhcmVudGhlc2VzCisgICBhbmQgdGhlIHdyb25nIHR5cGUgZW51bWVyYXRpb24gdmFsdWUgbmFtZXMuCisKKzIwMDgtMDctMjkgMjM6MzEgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5jOgorCisgICBFbnN1cmUgc3dydW4gZGF0YSBpcyBhdmFpbGFibGUgZm9yIHRoZSBwclRhYmxlIGNhbGxzLAorICAgcmF0aGVyIHRoYW4gcmVseWluZyBvbiBoclNXUnVuVGFibGUgdG8gdHJpZ2dlciB0aGlzLgogCiAyMDA4LTA3LTI5IDE2OjE5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jOgotICAgICBhKSBGaXggdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBqdXN0IG9uZSBwbGFjZQotICAgICAobWFrZXMgaXQgZWFzaWVyIHRvIGNoYW5nZSBpZiBuZWNlc3NhcnkpCi0gICAgIGIpIEZpeCB2YXJpb3VzIHVuZm9ydHVuYXRlIGxpbmUtYnJlYWtzICh3aXRoaW4gInBkdS0+ZmxhZ3MiKQorCisgICBhKSBGaXggdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBpbiBqdXN0IG9uZSBwbGFjZQorICAgKG1ha2VzIGl0IGVhc2llciB0byBjaGFuZ2UgaWYgbmVjZXNzYXJ5KQorICAgYikgRml4IHZhcmlvdXMgdW5mb3J0dW5hdGUgbGluZS1icmVha3MgKHdpdGhpbiAicGR1LT5mbGFncyIpCisKKzIwMDgtMDctMjkgMTY6MDUgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaDoKKworICAgSWYgdGhlIHJlLXdyaXR0ZW4gU1dSdW4gbW9kdWxlIGlmIGF2YWlsYWJsZSwgdGhlbiB1c2UgaXQgZm9yCisgICB0aGUgVUNELXNwZWNpZmljIHByVGFibGUgYXMgd2VsbCBhcyB0aGUgaHJTV1J1blRhYmxlLgorICAgQ29uc2lzdGVuY3kgaXMgZ29vZC4uLi4KKworMjAwOC0wNy0yOSAxNToyMyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19zdGF0dXMuYzoKKworICAgU3VwcHJlc3MganVuayBpbiBoclNXUnVuTmFtZSAmIGhyU1dSdW5QYXJhbWV0ZXJzIHZhbHVlcworCisyMDA4LTA3LTI5IDEwOjI3ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmM6CisKKyAgIFRoZSBjYWNoZS9jb250YWluZXIgcmVsYXRlIHRvIHRoZSBkYXRhIGl0c2VsZiwgc28gc2hvdWxkCisgICBtb3JlIG5hdHVyYWxseSBiZSBoYW5kbGVkIGJ5IHRoZSBkYXRhX2FjY2VzcyBtb2R1bGUsCisgICByYXRoZXIgdGhhbiBhIHBhcnRpY3VsYXIgTUlCIHRhYmxlIG1vZHVsZS4KKworMjAwOC0wNy0yOCAyMToxOCAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmM6CisKKyAgICd1c2VkJyBhbmQgJ2ZyZWUnIGFyZSBub3QgdGhlIHNhbWUgdGhpbmcsIERhdmUuIFBheSBhdHRlbnRpb24gYXQKKyAgIHRoZSBiYWNrLi4uLgogCiAyMDA4LTA3LTI4IDE0OjM5ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgotICAgICBDSEFOR0VTOiBhZ2VudDogQlVHOiAyMDIzODAzOiBFbnN1cmUgY29tcGlsYXRpb24gaXMgbm90IGRlcGVuZGVudAotICAgICBvbiBhbiBpcnJlbGV2YW50IGNvbmZpZ3VyZSBjaGFyYWN0ZXJpc3RpYyBmb3IgSFAtVVggMTEKIAotMjAwOC0wNy0yOCAxMTo0MSAgZHRzMTIKLQotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgTkVXUzogYnVpbGRpbmc6IGFkZCAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm4gY29uZmlndXJlIG9wdGlvbgotICAgICBCYWNrcG9ydCBvZiBTVk4gcmV2aXNpb24gMTcxMjEKKyAgIENIQU5HRVM6IGFnZW50OiBCVUc6IDIwMjM4MDM6IEVuc3VyZSBjb21waWxhdGlvbiBpcyBub3QgZGVwZW5kZW50CisgICBvbiBhbiBpcnJlbGV2YW50IGNvbmZpZ3VyZSBjaGFyYWN0ZXJpc3RpYyBmb3IgSFAtVVggMTEKIAogMjAwOC0wNy0yOCAxMDo1NiAgZHRzMTIKIAogICAgKiBhcHBzL3NubXBzZXQuYzoKLSAgICAgQ0hBTkdFUzogYXBwczogQlVHOiAxOTY0MTM2OiBEcm9wIE5VTEwgdHlwZSBmcm9tIHNubXBzZXQgdXNhZ2UgbWVzc2FnZS4KKworICAgQ0hBTkdFUzogYXBwczogQlVHOiAxOTY0MTM2OiBEcm9wIE5VTEwgdHlwZSBmcm9tIHNubXBzZXQgdXNhZ2UKKyAgIG1lc3NhZ2UuCisKKzIwMDgtMDctMjUgMTQ6MTkgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC5oLCBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oOgorCisgICBVc2UgJy0tZW5hYmxlLW5ldy1mZWF0dXJlcycgbWVjaGFuaXNtIHRvIGluY2x1ZGUgaHJTVyogcmUtd3JpdGVzCisKKzIwMDgtMDctMjUgMTQ6MTMgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fY3lnd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2Rhcndpbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9raW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9ubGlzdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wc3RhdC5jOgorCisgICBQcmVsaW1pbmFyeSBPUy1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMgb2YgUnVubmluZyBhbmQgSW5zdGFsbGVkCisgICBTb2Z0d2FyZSBkYXRhIGFjY2Vzcy4KIAogMjAwOC0wNy0yNCAyMzoyMiAgdGFuZGVycwogCiAgICAqIG1hbi9zbm1wY21kLjEuZGVmOgotICAgICBDSEFOR0VTOiBkb2N1bWVudGF0aW9uOiBCVUc6IDIwMjcxMjk6IGZpeCB0eXBvIGluIHNubXBjbWQuMQorCisgICBDSEFOR0VTOiBkb2N1bWVudGF0aW9uOiBCVUc6IDIwMjcxMjk6IGZpeCB0eXBvIGluIHNubXBjbWQuMQorCisyMDA4LTA3LTI0IDEwOjAwICBqc2FmcmFuZWsKKworICAgKiBtYW4vc25tcC5jb25mLjUuZGVmLCBzZWRzY3JpcHQuaW46CisKKyAgIHJlZmxlY3QgZGVmYXVsdCB0ZW1wIGZpbGUgcGF0dGVybiBpbiBtYW4gcGFnZSBpZiBpdCdzIG1vZGlmaWVkIGJ5CisgICAuL2NvbmZpZ3VyZSBzY3JpcHQKKworMjAwOC0wNy0yNCAwODozNiAganNhZnJhbmVrCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIE5FV1M6IGJ1aWxkaW5nOiBhZGQgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIGNvbmZpZ3VyZSBvcHRpb24KIAogMjAwOC0wNy0yNCAwNjo1MyAganNhZnJhbmVrCiAKICAgICogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODIzODAwOiByZWxlYXNlIGFuZCByZWxvYWQgYWxsIHRyYXAgZGVzdGluYXRpb25zIG9uIFNJR0hVUAorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MjM4MDA6IHJlbGVhc2UgYW5kIHJlbG9hZCBhbGwgdHJhcAorICAgZGVzdGluYXRpb25zIG9uIFNJR0hVUAorCisyMDA4LTA3LTIyIDE0OjMzICBqc2FmcmFuZWsKKworICAgKiBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbjoKKworICAgZml4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIHRvIHJ1biB3aXRob3V0IGFyZ3VtZW50cworCisyMDA4LTA3LTIyIDE0OjIxICBqc2FmcmFuZWsKKworICAgKiAgLiwgTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBuZXQtc25tcC1jb25maWcuaW4sICAgCisgICAgICBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbjoKKworICAgTkVXUzogbWlzYzogc2VwYXJhdGUgdXNlciBtYW5hZ2VtZW50IGZyb20gbmV0LXNubXAtY29uZmlnIGludG8KKyAgIG5ldyBuZXQtc25tcC1jcmVhdGUtdjMtdXNlciBzY3JpcHQKIAogMjAwOC0wNy0yMSAxMzo0NCAgZHRzMTIKIAogICAgKiBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYzoKLSAgICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDE5NDQ1ODE6IFByb3RlY3QgYWdhaW5zdCBjb3JlIGR1bXBzIHdpdGggbG9uZyBzdHJpbmcgaW5kZXggdmFsdWVzLgogCi0yMDA4LTA3LTE3IDE1OjA3ICBkdHMxMgorICAgQ0hBTkdFUzogYWdlbnQ6IFBBVENIIDE5NDQ1ODE6IFByb3RlY3QgYWdhaW5zdCBjb3JlIGR1bXBzIHdpdGgKKyAgIGxvbmcgc3RyaW5nIGluZGV4IHZhbHVlcy4KIAotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQsIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQsIGFwcHMvTWFrZWZpbGUuZGVwZW5kLAotICAgICBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZCwgc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCisyMDA4LTA3LTE4IDE1OjE5ICBoYXJkYWtlcgogCi0yMDA4LTA3LTE3IDE0OjQyICBkdHMxMgorICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKIAotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMi5yYzEgKQorICAgbmV3IHNpZ25pbmcga2V5CiAKIDIwMDgtMDctMTcgMTA6MDUgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjAxODAzMTogRG9uJ3QgcHJvYmUgZW5naW5lSUQgaW4gaW50ZXJuYWwgbW9uaXRvciBzZXNzaW9ucy4KKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMjAxODAzMTogRG9uJ3QgcHJvYmUgZW5naW5lSUQgaW4gaW50ZXJuYWwKKyAgIG1vbml0b3Igc2Vzc2lvbnMuCisKKzIwMDgtMDctMTAgMTk6MzMgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGZpeCBhIHJlZ2V4cCBxdW90ZQorCisyMDA4LTA3LTEwIDE0OjEyICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzoKKworICAgYnVpbGQgZml4IGZvciBzeXN0ZW1zIHRoYXQgZG9uJ3QgaGF2ZSBnZXRhZGRyaW5mbyAoZS5nLiBIUC1VWAorICAgMTEuMCBhbmQgZWFybGllciwgU29sYXJpcyA3IGFuZCBlYXJsaWVyKQogCiAyMDA4LTA3LTEwIDEzOjUwICBhbGV4X2IKIAogICAgKiB3aW4zMi9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGRpbmc6IEJVRzogMjAxNDUyNjogV2luMzI6IHNubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oIG5vdCBpbnN0YWxsZWQKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEJVRzogMjAxNDUyNjogV2luMzI6CisgICBzbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCBub3QgaW5zdGFsbGVkCiAKIDIwMDgtMDctMDYgMTU6MDUgIGFsZXhfYgogCi0gICAqIFJFQURNRS53aW4zMiwgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9idWlsZC5wbCwKLSAgICAgd2luMzIvbmV0c25tcG1pYnNzZGsvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IGJ1bGRpbmc6IEFkZCBzdXBwb3J0IGZvciB3aW5FeHRETEwgdG8gYnVpbGQuYmF0ICh3aW4zMikKKyAgICogIFJFQURNRS53aW4zMiwgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9idWlsZC5wbCwgICAKKyAgICAgIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluOgorCisgICBDSEFOR0VTOiBidWxkaW5nOiBBZGQgc3VwcG9ydCBmb3Igd2luRXh0RExMIHRvIGJ1aWxkLmJhdCAod2luMzIpCiAKIDIwMDgtMDctMDYgMTI6MzggIGFsZXhfYgogCiAgICAqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKLSAgICAgV2luMzIgYnVpbGQgZml4ZXMgLSBhZGQgbWlzc2luZyBmdW5jdGlvbiBmb3IgRExMIGJ1aWxkLgorCisgICBXaW4zMiBidWlsZCBmaXhlcyAtIGFkZCBtaXNzaW5nIGZ1bmN0aW9uIGZvciBETEwgYnVpbGQuCiAKIDIwMDgtMDctMDIgMTI6MzkgIGpzYWZyYW5lawogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDIwMDY3ODY6IEludGVyZmFjZSBuYW1lIGNhbiBoYXZlIG1vcmUgdGhhbiA4IGNoYXJhY3RlcnMuCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDIwMDY3ODY6IEludGVyZmFjZSBuYW1lIGNhbiBoYXZlIG1vcmUgdGhhbiA4CisgICBjaGFyYWN0ZXJzLgorCisyMDA4LTA2LTI1IDE3OjM5ICB0YW5kZXJzCisKKyAgICogIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3RyYXAuYywgYXBwcy9zbm1wdHJhcC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oLCBtYW4vc25tcGQuY29uZi41LmRlZiwgICAKKyAgICAgIHBlcmwvU05NUC9TTk1QLnhzLCBweXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc3lzdGVtLmM6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTkxNjg0MDogbmV3IGNvbmZpZyBvcHRpb24gdG8gc2V0IFNOTVB2MSB0cmFwCisgICBhZ2VudCBhZGRyZXNzCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTkxNjg0MDogaW50cm9kdWNlCisgICBuZXRzbm1wX2dldGhvc3RieW5hbWVfdjQKIAogMjAwOC0wNi0yNSAxNToxNiAganNhZnJhbmVrCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6Ci0gICAgIGZpeCBhc3NlcnRpb24gd2hlbiB1c2VkIHdpdGggcGVybCA1LjEwCiAKLTIwMDgtMDYtMjQgMjI6MzYgIHRhbmRlcnMKKyAgIGZpeCBhc3NlcnRpb24gd2hlbiB1c2VkIHdpdGggcGVybCA1LjEwCiAKLSAgICogdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDIyMHNubXB2M2J1bGtnZXQ6Ci0gICAgIENIQU5HRVM6IGJ1aWxkaW5nOiBEaXNhYmxlIHRlc3RzIGlmIHRoZSBhZ2VudCBpcyBidWlsdCB3aXRob3V0IHRoZSBtaWIgbW9kdWxlIHRoZXkgZGVwZW5kIG9uLgotICAgICBCYWNrcG9ydCBvZiByMTcwODcuCisyMDA4LTA2LTI0IDA1OjAxICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCwgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWIsIHNubXBkOiBCVUc6IDIwMDExMjQ6IEFsbG93IGVtYmVkZGVkIE5VTAorICAgY2hhcmFjdGVycyBpbiB1c21Vc2VyUHVibGljCisKKzIwMDgtMDYtMjMgMTk6NTcgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBPbmx5IHJlc2VydmUgc3BhY2UgZm9yIHRoZSBleHRyYSBcMCBhZnRlciB0aGUgZGF0YSBmb3IgT0NURVQKKyAgIFNUUklORyB2YWx1ZWQgZW50aXRpZXMKKworMjAwOC0wNi0yMyAxOToxMyAgbWFnZnIKKworICAgKiAgdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LCB0ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyMXNubXB2M2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IERpc2FibGUgdGVzdHMgaWYgdGhlIGFnZW50IGlzIGJ1aWx0IHdpdGhvdXQKKyAgIHRoZSBtaWIgbW9kdWxlIHRoZXkgZGVwZW5kIG9uLgorCisyMDA4LTA2LTIxIDEyOjE0ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBSZW1vdmUgc3B1cmlvdXMgQUNfTVNHX1JFU1VMVCBpbnNpZGUgYW4gQUNfQ0FDSEVfQ0hFQ0sKKworMjAwOC0wNi0xOCAwNTowNyAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgSGFuZGxlIHNvbGFyaXMgYXdrIGFzIHdlbGwuCisKKzIwMDgtMDYtMTcgMTY6MDEgIHRhbmRlcnMKKworICAgKiBhZ2VudC9hdXRvX25saXN0LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTk5NTc1MzogZnJvbSB2b2xrb3ZfcGV0ZXI6IG1pbm9yIGNsZWFudXAKKyAgIGFnZW50L2F1dG9fbmxpc3QuYwogCiAyMDA4LTA2LTE3IDA4OjU3ICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYzoKLSAgICAgRml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gc3ByaW50ZiBmb3IgVENQL0lQdjYKLSAgICAgQ3Jvc3MtcG9ydCBvZiByZXZpc2lvbiAxNjY2OAorCisgICBGaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBzcHJpbnRmIGZvciBUQ1AvSVB2NgorICAgQ3Jvc3MtcG9ydCBvZiByZXZpc2lvbiAxNjY2OAogCiAyMDA4LTA2LTE2IDIzOjU1ICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxOTk1MTcyOiBmaXggLS13aXRob3V0LWVsZiBjb25maWd1cmUgdXNhZ2UgbWVzc2FnZQogCi0yMDA4LTA2LTE1IDIyOjE1ICBkdHMxMgorICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTk5NTE3MjogZml4IC0td2l0aG91dC1lbGYgY29uZmlndXJlIHVzYWdlCisgICBtZXNzYWdlCiAKLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnByZTIgKQotCi0yMDA4LTA2LTE1IDIyOjE0ICBkdHMxMgotCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDgtMDYtMTUgMjE6NTUgIGR0czEyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICBWZXJzaW9uIHVwZGF0ZQotICAgICAKLSAgICAgQWxzbyBmaXggYWxsIENoYW5nZUxvZyBlbnRyaWVzIHNpbmNlIHRoZSBDVlMtPlNWTiBtb3ZlLAotICAgICB3aGljaCBoYXZlIGJlZW4gb21pdHRpbmcgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBmaWxlcwotICAgICB3ZXJlIGFmZmVjdGVkIGJ5IGFueSBnaXZlbiBjaGFuZ2UuCi0KLTIwMDgtMDYtMTUgMjE6MzIgIGR0czEyCi0KLSAgICogYWdlbnQvTWFrZWZpbGUuZGVwZW5kLCBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kLCBhcHBzL01ha2VmaWxlLmRlcGVuZCwKLSAgICAgYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQsIHNubXBsaWIvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAotCi0yMDA4LTA2LTE1IDIxOjA2ICBkdHMxMgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnByZTIgKQogMjAwOC0wNi0xMyAyMjoxNiAgZHRzMTIKIAogICAgKiBkaXN0L2ZpbmQtcmVxdWlyZXMsIGRpc3QvbmV0LXNubXAuc3BlYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IEltcHJvdmVkIFJQTSBzcGVjIGZpbGVzLCBmb3IgYmV0dGVyIGNvbnNpc3RlbmN5IHdpdGggdmVuZG9yLXByb3ZpZGVkIHBhY2thZ2VzLgotICAgICBQcm92aWRlZCBieSBKYW4gU2FmcmFuZWsKIAotMjAwOC0wNi0xMyAyMTo1NCAgZHRzMTIKLQotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgUmVzdG9yZSBlbWJlZGRlZCBwZXJsIHRvIGRlZmF1bHQgTWFjIE9TL1ggYnVpbGQuCi0gICAgIChyZXZlcnNpbmcgcmV2aXNpb24gMTY5ODgpCisgICBDSEFOR0VTOiBidWlsZDogSW1wcm92ZWQgUlBNIHNwZWMgZmlsZXMsIGZvciBiZXR0ZXIgY29uc2lzdGVuY3kKKyAgIHdpdGggdmVuZG9yLXByb3ZpZGVkIHBhY2thZ2VzLgorICAgUHJvdmlkZWQgYnkgSmFuIFNhZnJhbmVrCiAKIDIwMDgtMDYtMTMgMjE6MDMgIGR0czEyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTg5OTc2MjogVHdlYWsgZW1iZWRkZWRfcGVybCBjb25maWd1cmUgY2hlY2tzLgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE4OTk3NjI6IFR3ZWFrIGVtYmVkZGVkX3BlcmwgY29uZmlndXJlCisgICBjaGVja3MuCisKKzIwMDgtMDYtMTMgMDU6NDMgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGFnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIAorICAgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBORVdTOiBidWlsZGluZzogUmV0aXJlIHRoZSBjb25maWdfb2xkL25ld19yZXF1aXJlIGZlYXR1cmUgYW5kCisgICByZXBsYWNlIGl0IHdpdGggY29uZmlnX3ZlcnNpb25fcmVxdWlyZSB0aGF0IGNvbXBhcmVzIHZlcnNpb24KKyAgIG51bWJlcnMgdG8gYWNoaWV2ZSBhIHNpbWlsYXIgdGhpbmcKIAogMjAwOC0wNi0xMiAxMjo1MCAgZHRzMTIKIAogICAgKiBkaXN0L21ha2VyZWxlYXNlOgotICAgICBPbmx5IGFkZCBub24tZGVmYXVsdCBNSUIgbW9kdWxlcyB0byB0aGUgdGVzdCBidWlsZHMuCi0gICAgIFNwZWNpZnlpbmcgdGhlIGhvc3QgbW9kdWxlIGlzIG5vdCBuZWVkZWQgb24gTGludXggc3lzdGVtcywKLSAgICAgYW5kIG1heSBicmVhayBvbiBvdGhlciBPL1NzLiBTcGVjaWZ5aW5nIHRoZSBkaXNtYW4vZXZlbnQKLSAgICAgTUlCIGlzIHVubmVjZXNzYXJ5IG9uIGFueSBzeXN0ZW0uCiAKLTIwMDgtMDYtMTIgMTI6NDUgIGR0czEyCi0KLSAgICogZGlzdC9tYWtlcmVsZWFzZToKLSAgICAgTWlzc2luZyBNRDUgc2lnbmF0dXJlIGZpbGUgZm9yIHppcCByZWxlYXNlCi0KLTIwMDgtMDYtMTIgMTI6NDQgIGR0czEyCi0KLSAgICogZGlzdC9tYWtlcmVsZWFzZToKLSAgICAgQmFzaWMgZG9jdW1lbnRhdGlvbiBhbmQgaGVscC91c2FnZSBtZXNzYWdlcy4KKyAgIE9ubHkgYWRkIG5vbi1kZWZhdWx0IE1JQiBtb2R1bGVzIHRvIHRoZSB0ZXN0IGJ1aWxkcy4KKyAgIFNwZWNpZnlpbmcgdGhlIGhvc3QgbW9kdWxlIGlzIG5vdCBuZWVkZWQgb24gTGludXggc3lzdGVtcywKKyAgIGFuZCBtYXkgYnJlYWsgb24gb3RoZXIgTy9Tcy4gU3BlY2lmeWluZyB0aGUgZGlzbWFuL2V2ZW50CisgICBNSUIgaXMgdW5uZWNlc3Nhcnkgb24gYW55IHN5c3RlbS4KIAogMjAwOC0wNi0xMSAxMDoxNiAgZHRzMTIKIAogICAgKiBkaXN0L21ha2VyZWxlYXNlOgotICAgICBPbmx5IGVuYWJsZSBJUFggdHJhbnNwb3J0IG9uIExpbnV4IHN5c3RlbXMKKworICAgT25seSBlbmFibGUgSVBYIHRyYW5zcG9ydCBvbiBMaW51eCBzeXN0ZW1zCiAKIDIwMDgtMDYtMTAgMTQ6MzcgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jLAotICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgotICAgICBzbm1wZDogUEFUQ0g6IDE5MTgzODM6IEZpeCBEaXNNYW4gbW9uaXRvcmluZyBvZiBBZ2VudFggc3ViYWdlbnRzCi0gICAgIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgYWN0dWFsbHkgdXNlIHRoZSBjb2RlIHN1Ym1pdHRlZCBpbiB0aGF0Ci0gICAgIHBhdGNoLgotICAgICBJbnN0ZWFkIGl0IGluc2VydHMgYSBjYWxsYmFjayBob29rIGludG8gdGhlCi0gICAgIHNubXBfc3luY2hfcmVzcG9uc2VfY2IKLSAgICAgcm91dGluZSAodXNpbmcgdGhlIG15dm9pZCBwb2ludGVyIGFuZCBhIG5ldyBzZXNzaW9uIGZsYWcpLCB3aGljaAotICAgICBoYXMKLSAgICAgdGhlIHNhbWUgZWZmZWN0IHdpdGhvdXQgbmVlZGluZyB0byBkdXBsaWNhdGUgYW55IGNvZGUuCisgICAqICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBzbm1wZDogUEFUQ0g6IDE5MTgzODM6IEZpeCBEaXNNYW4gbW9uaXRvcmluZyBvZiBBZ2VudFggc3ViYWdlbnRzCisgICBOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGFjdHVhbGx5IHVzZSB0aGUgY29kZSBzdWJtaXR0ZWQgaW4gdGhhdAorICAgcGF0Y2guCisgICBJbnN0ZWFkIGl0IGluc2VydHMgYSBjYWxsYmFjayBob29rIGludG8gdGhlCisgICBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiCisgICByb3V0aW5lICh1c2luZyB0aGUgbXl2b2lkIHBvaW50ZXIgYW5kIGEgbmV3IHNlc3Npb24gZmxhZyksIHdoaWNoCisgICBoYXMKKyAgIHRoZSBzYW1lIGVmZmVjdCB3aXRob3V0IG5lZWRpbmcgdG8gZHVwbGljYXRlIGFueSBjb2RlLgogCiAyMDA4LTA2LTEwIDEyOjUyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmM6Ci0gICAgIEZpeCBsb2dpYyBlcnJvcnMgaW4gaGFuZGxpbmcgb2Ygb2xkL2N1cnJlbnQgdmFyYmluZCBsaXN0cy4KLSAgICAgUmVwb3J0ZWQgYnkgRnJlZCBHYW8gaW4gcGF0Y2ggIzE5MTgzODMKIAotMjAwOC0wNi0xMCAxMDo1MSAgZHRzMTIKKyAgIEZpeCBsb2dpYyBlcnJvcnMgaW4gaGFuZGxpbmcgb2Ygb2xkL2N1cnJlbnQgdmFyYmluZCBsaXN0cy4KKyAgIFJlcG9ydGVkIGJ5IEZyZWQgR2FvIGluIHBhdGNoICMxOTE4MzgzCisKKzIwMDgtMDYtMDkgMTk6MDggIGhhcmRha2VyCiAKICAgICogc25tcGxpYi9zY2FwaS5jOgotICAgICB1cGRhdGUgdG8gbWF0Y2ggcHVibGlzaGVkIHJlbGVhc2UKKworICAgdXBkYXRlIHRvIG1hdGNoIHB1Ymxpc2hlZCByZWxlYXNlCisKKzIwMDgtMDYtMDkgMTY6NTggIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGFkZGVkIHNubXBfdmVyc2lvbi5jCiAKIDIwMDgtMDYtMDkgMDk6MDUgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB1c20uYzoKLSAgICAgQSBjb3VwbGUgbW9yZSBtaXNzaW5nIGVycm9yIGNoZWNrcy4KLSAgICAgQmFzZWQgb24gdGhvc2UgcmVwb3J0ZWQgYnkgQm95YSBTdW4KKworICAgQSBjb3VwbGUgbW9yZSBtaXNzaW5nIGVycm9yIGNoZWNrcy4KKyAgIEJhc2VkIG9uIHRob3NlIHJlcG9ydGVkIGJ5IEJveWEgU3VuCiAKIDIwMDgtMDYtMDYgMTI6MDIgIGR0czEyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIEJldHRlciBoYW5kbGluZyBvZiBlbWJlZGRlZCBwZXJsIG9uIE1hYyBPUy9YCi0gICAgIChuZWFybHkgd29ya2luZyBvbiBMZW9wYXJkIG5vdykKIAotMjAwOC0wNi0wNSAyMzowNyAgdGFuZGVycworICAgQmV0dGVyIGhhbmRsaW5nIG9mIGVtYmVkZGVkIHBlcmwgb24gTWFjIE9TL1gKKyAgIChuZWFybHkgd29ya2luZyBvbiBMZW9wYXJkIG5vdykKIAotICAgKiBkaXN0L25ldC1zbm1wLnNwZWM6Ci0gICAgIHN5bmMgd2l0aCB0cnVuaworMjAwOC0wNi0wMyAyMzoxNCAgdGFuZGVycwogCi0yMDA4LTA2LTA1IDIxOjEyICB0YW5kZXJzCisgICAqICBhY2NvbmZpZy5oLCBhZ2VudC9hdXRvX25saXN0LmMsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N5c3RlbS5jOgogCi0gICAqIGNvbmZpZ3VyZToKLSAgICAgcnVuIGF1dG9jb25mCisgICBORVdTOiBhaXg6IEFkZCBzdXBwb3J0IGZvciBBSVggNi54CiAKLTIwMDgtMDYtMDUgMjE6MTEgIHRhbmRlcnMKLQotICAgKiBhY2NvbmZpZy5oLCBhZ2VudC9hdXRvX25saXN0LmMsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oLAotICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLAotICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYywgY29uZmlndXJlLmluLAotICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCBzbm1wbGliL3N5c3RlbS5jOgotICAgICBORVdTOiBBSVg6IEFkZCBzdXBwb3J0IGZvciBBSVggNi54LgotICAgICBTdWNjZXNzZnVsbHkgdGVzdGVkIG9uIHRydW5rIChwYXNzZWQgZXh0ZW5zaXZlIHJlZ3Jlc3Npb24KLSAgICAgdGVzdGluZykuCi0KLTIwMDgtMDYtMDUgMjE6MDQgIHRhbmRlcnMKKzIwMDgtMDYtMDMgMjI6NDYgIHRhbmRlcnMKIAogICAgKiBhY2xvY2FsLm00LCBjb25maWcuZ3Vlc3MsIGNvbmZpZy5zdWIsIGNvbmZpZ3VyZSwgbHRtYWluLnNoOgotICAgICBORVdTOiBidWlsZDogVXBkYXRlIHRvIGxpYnRvb2wgMS41LjI2IChmcm9tIDEuNS4yNCksIGUuZy4gdG8KLSAgICAgYmV0dGVyIHN1cHBvcnQgQUlYIDYuMSBhbmQgTWFjIE9TIFggTGVvcGFyZC4KLSAgICAgU3VjY2Vzc2Z1bGx5IHRlc3RlZCBvbiB0cnVuayAocGFzc2VkIGV4dGVuc2l2ZSByZWdyZXNzaW9uCi0gICAgIHRlc3RpbmcpLgogCi0yMDA4LTA2LTAzIDA5OjM3ICBkdHMxMgorICAgTkVXUzogYnVpbGQ6IFVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNiAoZnJvbSAxLjUuMjQpLCBlLmcuIHRvCisgICBiZXR0ZXIgc3VwcG9ydCBBSVggNi4xIGFuZCBNYWMgT1MgWCBMZW9wYXJkCiAKLSAgICogUkVBRE1FLm9zWDoKLSAgICAgRG9jdW1lbnQgd2h5IGVtYmVkZGVkIHBlcmwgd2FzIGRpc2FibGVkLgorMjAwOC0wNi0wMyAyMjozOSAgdGFuZGVycwogCi0yMDA4LTA2LTAzIDA4OjU3ICBkdHMxMgorICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICB3aHkgYWRkIGxlZ2FjeSBkZWZpbml0aW9ucyBmb3IgbmV3IHN0dWZmPworCisyMDA4LTA2LTAzIDA5OjAzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYzoKLSAgICAgRW5zdXJlIHRoZSBkZWZhdWx0IGludGVybmFsIHF1ZXJ5IHNlc3Npb24gaGFzIGEgdmFsaWQgZW5naW5lSUQsCi0gICAgIHRvIGF2b2lkIGhhdmluZyB0byBwcm9iZSBmb3IgaXQgb24gdGhlIGZpcnN0IHVzZS4KIAotMjAwOC0wNi0wMiAxNToxOCAgZHRzMTIKKyAgIEVuc3VyZSB0aGUgZGVmYXVsdCBpbnRlcm5hbCBxdWVyeSBzZXNzaW9uIGhhcyBhIHZhbGlkIGVuZ2luZUlELAorICAgdG8gYXZvaWQgaGF2aW5nIHRvIHByb2JlIGZvciBpdCBvbiB0aGUgZmlyc3QgdXNlLgogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBEcm9wIGVtYmVkZGVkIHBlcmwgZnJvbSB0aGUgZGVmYXVsdCBidWlsZCBvbiBNYWMgT1MvWAotICAgICBUaCBkdWFsLWFyY2hpdGVjdHVyZSBuYXR1cmUgb2YgdGhlIGRlZmF1bHQgcGVybCBiaW5hcnkKLSAgICAgY29uZnVzZXMgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgc3VmZmljaWVudGx5IHRoYXQgdGhlCi0gICAgIGNvZGUgd29uJ3QgYWN0dWFsbHkgY29tcGlsZS4KKzIwMDgtMDYtMDIgMjI6MTcgIG1hZ2ZyCiAKLTIwMDgtMDYtMDIgMTM6MjcgIGR0czEyCisgICAqICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi90b29scy5jOgorCisgICBORVdTOiBzbm1wbGliOiBDb252ZXJ0IGdlbmVyaWMgc291cmNlIGFyZ3VtZW50cyBmcm9tIGNvbnN0CisgICB1X2NoYXIqIHRvIGNvbnN0IHZvaWQqIGZvciBzbm1wX3BkdV9hZGRfdmFyaWFibGUsCisgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlLCBzbm1wX3NldF92YXJfdmFsdWUsCisgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUgYW5kIG1lbWR1cC4KKworMjAwOC0wNi0wMiAxMzoyOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jOgotICAgICBFbnN1cmUgdGhhdCB0aGUgInRyaWdnZXIgYXJtZWQiIGZsYWcgaXMgY2xlYXJlZCB3aGVuZXZlciB0aGUKLSAgICAgbWF0Y2hpbmcKLSAgICAgZXhwcmVzc2lvbiBpcyBmb3VuZCB0byBob2xkIC0gZXZlbiBpZiB0aGUgdHJpZ2dlciBkb2Vzbid0Ci0gICAgIGFjdHVhbGx5IGZpcmUuCi0gICAgIFRoaXMgYWZmZWN0cyB0aGUgYmVoYXZpb3VyIG9mIGluaXRpYWxseS10cnVlIGV4cHJlc3Npb25zLCB3aGVuCi0gICAgIHRoaXMKLSAgICAgaW5pdGlhbCBmaXJpbmcgaXMgc3VwcHJlc3NlZCB1c2luZyB0aGUgbXRlVHJpZ2dlcipTdGFydHVwIG9iamVjdC4KLSAgICAgV2l0aG91dCB0aGlzIHR3ZWFrLCB0aGUgdHJpZ2dlciB3aWxsIGZpcmUgb24gdGhlIHNlY29uZCBzYW1wbGluZwotICAgICAoYXMgaWYgdGhlIGV4cHJlc3Npb24gaGFkIGV2YWx1YXRlZCBmYWxzZSBmaXJzdCB0aW1lIHJvdW5kKS4KKworICAgRW5zdXJlIHRoYXQgdGhlICJ0cmlnZ2VyIGFybWVkIiBmbGFnIGlzIGNsZWFyZWQgd2hlbmV2ZXIgdGhlCisgICBtYXRjaGluZworICAgZXhwcmVzc2lvbiBpcyBmb3VuZCB0byBob2xkIC0gZXZlbiBpZiB0aGUgdHJpZ2dlciBkb2Vzbid0CisgICBhY3R1YWxseSBmaXJlLgorICAgVGhpcyBhZmZlY3RzIHRoZSBiZWhhdmlvdXIgb2YgaW5pdGlhbGx5LXRydWUgZXhwcmVzc2lvbnMsIHdoZW4KKyAgIHRoaXMKKyAgIGluaXRpYWwgZmlyaW5nIGlzIHN1cHByZXNzZWQgdXNpbmcgdGhlIG10ZVRyaWdnZXIqU3RhcnR1cCBvYmplY3QuCisgICBXaXRob3V0IHRoaXMgdHdlYWssIHRoZSB0cmlnZ2VyIHdpbGwgZmlyZSBvbiB0aGUgc2Vjb25kIHNhbXBsaW5nCisgICAoYXMgaWYgdGhlIGV4cHJlc3Npb24gaGFkIGV2YWx1YXRlZCBmYWxzZSBmaXJzdCB0aW1lIHJvdW5kKS4KIAogMjAwOC0wNi0wMSAyMDowMiAgZHRzMTIKIAotICAgKiBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaDoKLSAgICAgSGFuZGxlIHZhcmJpbmQgcGF5bG9hZCBmb3IgaW50ZXJuYWwgbGlua1VwL0Rvd24gbm90aWZpY2F0aW9ucy4KKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmg6CisKKyAgIEhhbmRsZSB2YXJiaW5kIHBheWxvYWQgZm9yIGludGVybmFsIGxpbmtVcC9Eb3duIG5vdGlmaWNhdGlvbnMuCiAKIDIwMDgtMDYtMDEgMDY6NDUgIHRhbmRlcnMKIAogICAgKiBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHM6Ci0gICAgIE5FV1M6IHNubXB0cmFwZDogQlVHOiAxOTU1MjI3OiBNZW1vcnkgbGVhayBmb3IgZW1iZWRkZWQgUGVybCBvbgotICAgICB4ODZfNjQKIAotMjAwOC0wNS0yOSAxNjoxMSAgZHRzMTIKKyAgIE5FV1M6IHNubXB0cmFwZDogQlVHOiAxOTU1MjI3OiBNZW1vcnkgbGVhayBmb3IgZW1iZWRkZWQgUGVybCBvbgorICAgeDg2XzY0CiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jOgotICAgICBTaWxseSB0eXBvCisyMDA4LTA1LTMxIDEyOjA4ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBUaGUgc2NhbGFyIGhlbHBlciB0aGF0IHdhcyBjYWxsZWQgZnJvbSB0aGUKKyAgIHNjYWxhcl9ncm91cCBoZWxwZXIgZGlkIG5vdGhpbmcgc2F2ZSBhZGRpbmcgYSB0cmFpbGluZyAwIHRvIHRoZQorICAgYXJndW1lbnQuIFJlbW92ZSB0aGUgdXNlIG9mIHRoZSBzY2FsYXIgaGVscGVyIGZyb20gdGhlCisgICBzY2FsYXJfZ3JvdXAgYW5kIGFkZCB0aGUgdHJhaWxpbmcgMCBpbiB0aGUgc2NhbGFyX2dyb3VwIGhlbHBlci4KKworMjAwOC0wNS0zMCAxMzo1NiAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBUd2VhayBsaXN0IG9mIG9uLWxpbmUgc29mdHdhcmUgZGlyZWN0b3JpZXMgdG8gYmUgdXBkYXRlZC4KIAogMjAwOC0wNS0yOSAwOTo1OSAgZHRzMTIKIAotICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsIGFwcHMvc25tcHRlc3QuYywKLSAgICAgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB1c20uYywgc25tcGxpYi9zbm1wdXNtLmM6Ci0gICAgIFZhcmlvdXMgbWlzc2luZyBlcnJvciBjaGVja3MsIGV0Yy4KLSAgICAgUmVwb3J0ZWQgYnkgQm95YSBTdW4uCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYywgYXBwcy9zbm1wdGVzdC5jLCAgIAorICAgICAgYXBwcy9zbm1wdHJhcC5jLCBhcHBzL3NubXB1c20uYywgc25tcGxpYi9zbm1wdXNtLmM6CisKKyAgIFZhcmlvdXMgbWlzc2luZyBlcnJvciBjaGVja3MsIGV0Yy4KKyAgIFJlcG9ydGVkIGJ5IEJveWEgU3VuLgogCiAyMDA4LTA1LTI4IDExOjQ4ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jLAotICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYzoKLSAgICAgUmVwb3J0IGNhY2hlZCBtZW1vcnkgc2l6ZS91c2FnZSBwcm9wZXJseSAocGFydGljdWxhcmx5IG9uCi0gICAgIEZyZWVCU0QpLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYzoKKworICAgUmVwb3J0IGNhY2hlZCBtZW1vcnkgc2l6ZS91c2FnZSBwcm9wZXJseSAocGFydGljdWxhcmx5IG9uCisgICBGcmVlQlNEKS4KIAogMjAwOC0wNS0yOCAxMToyMSAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYzoKLSAgICAgQnJpbmcgbWVtQnVmZmVyIGNvZGUgaW50byBsaW5lIHdpdGggcmV2aXNpb24gMTY5NzUuCisKKyAgIEJyaW5nIG1lbUJ1ZmZlciBjb2RlIGludG8gbGluZSB3aXRoIHJldmlzaW9uIDE2OTc1LgogCiAyMDA4LTA1LTI4IDExOjEwICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYzoKLSAgICAgTGludXggMi42IGtlcm5lbCBkb2VzIG5vdCByZXBvcnQgc2hhcmVkIG1lbW9yeSBpbmZvcm1hdGlvbi4KKworICAgTGludXggMi42IGtlcm5lbCBkb2VzIG5vdCByZXBvcnQgc2hhcmVkIG1lbW9yeSBpbmZvcm1hdGlvbi4KIAogMjAwOC0wNS0yOCAwOToxOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE5MzEzOTE6IEZpeCByZXBvcnRpbmcgb2YgTWVtb3J5IGJ1ZmZlcnMgYW5kCi0gICAgIGNhY2hlZCBtZW1vcnkuCi0gICAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgZG9jb25laWxsLgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxOTMxMzkxOiBGaXggcmVwb3J0aW5nIG9mIE1lbW9yeSBidWZmZXJzIGFuZAorICAgY2FjaGVkIG1lbW9yeS4KKyAgIFByb2JsZW0gcmVwb3J0ZWQgYnkgZG9jb25laWxsLgorCisyMDA4LTA1LTI4IDA4OjMwICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jOgorCisgICBUd2VhayB0aGUgZml4IGZvciBidWcgIzE5MTI2NDcKIAogMjAwOC0wNS0yOCAwNjo1NiAgbWFnZnIKIAogICAgKiBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogRW5mb3JjZSB0aGUgbG93ZXIgbGltaXQgb24gc2NhbGFyX2dyb3VwcwotICAgICBUaGlzIGZpeGVzIHRoZSBjYXNlIG9mIGdldG5leHQgaWNtcC4wIHJldHVybmluZyBpY21wLjAuMCBpbnN0ZWFkCi0gICAgIG9mIHRoZQotICAgICBleHBlY3RlZCBpY21wSW5Nc2dzLjAKKworICAgQ0hBTkdFUzogc25tcGQ6IEVuZm9yY2UgdGhlIGxvd2VyIGxpbWl0IG9uIHNjYWxhcl9ncm91cHMKKyAgIFRoaXMgZml4ZXMgdGhlIGNhc2Ugb2YgZ2V0bmV4dCBpY21wLjAgcmV0dXJuaW5nIGljbXAuMC4wIGluc3RlYWQKKyAgIG9mIHRoZQorICAgZXhwZWN0ZWQgaWNtcEluTXNncy4wCiAKIDIwMDgtMDUtMjcgMjI6MDMgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTkxMjY0NzogRml4IG1lbW9yeSBsZWFrIGZvbGxvd2luZyBmYWlsZWQKLSAgICAgcmVxdWVzdHMuCi0gICAgIEZpeCBwcm92aWRlZCBieSBBbnRvbiBQYWsKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTkxMjY0NzogRml4IG1lbW9yeSBsZWFrIGZvbGxvd2luZyBmYWlsZWQKKyAgIHJlcXVlc3RzLgorICAgRml4IHByb3ZpZGVkIGJ5IEFudG9uIFBhawogCiAyMDA4LTA1LTI3IDIxOjIyICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxOTU4MDQxOiBFbnN1cmUgSURzIGFyZSBub3QgdHJ1bmNhdGVkLgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE5NTgwNDE6IEVuc3VyZSBJRHMgYXJlIG5vdCB0cnVuY2F0ZWQuCiAKIDIwMDgtMDUtMjcgMTQ6MTggIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmM6Ci0gICAgIE1vbml0b3IgbWVtb3J5IGJ1ZmZlcnMgb24gRnJlZUJTRCBzeXN0ZW1zLgotICAgICBBUEkgc3VnZ2VzdGVkIGJ5IENocmlzCisKKyAgIE1vbml0b3IgbWVtb3J5IGJ1ZmZlcnMgb24gRnJlZUJTRCBzeXN0ZW1zLgorICAgQVBJIHN1Z2dlc3RlZCBieSBDaHJpcwogCiAyMDA4LTA1LTI3IDEyOjQ3ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmM6Ci0gICAgIEZpeCBjYXJlbGVzcyB0eXBvIHdoZW4gYXBwbHlpbmcgTWF4aW0ncyBwYXRjaC4KKworICAgRml4IGNhcmVsZXNzIHR5cG8gd2hlbiBhcHBseWluZyBNYXhpbSdzIHBhdGNoLgorCisyMDA4LTA1LTI1IDIxOjM3ICBtYWdmcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBSZWltcGxlbWVudGF0aW9uIG9mIHVzbVN0YXRzLgogCiAyMDA4LTA1LTI1IDA3OjI0ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYzoKLSAgICAgUmVtb3ZlIGEgbG9jYWwgdmFyaWFibGUgb25seSB1c2VkIHRvIHRyYWNrIGEgbG9jYWwgc3RyaW5nCi0gICAgIGNvbnN0YW50IGFuZCByZXBsYWNlIHQgd2l0aCBhIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhlIHN0cmluZwotICAgICBjb25zdGFudC4KLSAgICAgTWFyayB0d28gbG9jYWwgZnVuY3Rpb25zIHN0YXRpYyBhcyB3ZWxsLgorCisgICBSZW1vdmUgYSBsb2NhbCB2YXJpYWJsZSBvbmx5IHVzZWQgdG8gdHJhY2sgYSBsb2NhbCBzdHJpbmcKKyAgIGNvbnN0YW50IGFuZCByZXBsYWNlIHQgd2l0aCBhIGRpcmVjdCByZWZlcmVuY2UgdG8gdGhlIHN0cmluZworICAgY29uc3RhbnQuCisgICBNYXJrIHR3byBsb2NhbCBmdW5jdGlvbnMgc3RhdGljIGFzIHdlbGwuCiAKIDIwMDgtMDUtMjUgMDc6MTcgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jOgotICAgICBSZW9yZGVyIHRvIGF2b2lkIG9uZSBzdHJsZW4gY2FsbC4KLSAgICAgQWRkIG1pc3NpbmcgY2FzdC4KKworICAgUmVvcmRlciB0byBhdm9pZCBvbmUgc3RybGVuIGNhbGwuCisgICBBZGQgbWlzc2luZyBjYXN0LgogCiAyMDA4LTA1LTI1IDA3OjE0ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmM6Ci0gICAgIE1ha2UgaXBmd19uYW1lIGEgc3RhdGljIGFycmF5IGluc3RlYWQgb2YgYSBwb2ludGVyIGFzIGl0IGlzCi0gICAgIHByaXZhdGUgdG8gdGhpcyBtb2R1bGUuCisKKyAgIE1ha2UgaXBmd19uYW1lIGEgc3RhdGljIGFycmF5IGluc3RlYWQgb2YgYSBwb2ludGVyIGFzIGl0IGlzCisgICBwcml2YXRlIHRvIHRoaXMgbW9kdWxlLgogCiAyMDA4LTA1LTI1IDA3OjA1ICBtYWdmcgogCiAgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzoKLSAgICAgV2hlbiBjYXN0aW5nLCBjYXN0IHRvIHRoZSByaWdodCB0eXBlLgorCisgICBXaGVuIGNhc3RpbmcsIGNhc3QgdG8gdGhlIHJpZ2h0IHR5cGUuCisKKzIwMDgtMDUtMjUgMDY6MDggIG1hZ2ZyCisKKyAgICogIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMsCisgICAgICAgICBhZ2VudC9zbm1wX2FnZW50LmMsIGFwcHMvc25tcHRlc3QuYywgc25tcGxpYi9yZWFkX2NvbmZpZy5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX2NsaWVudC5jOgorCisgICBSZW1vdmUgd2FybmluZ3MgYWJvdXQgdW5yZWFjaGFibGUgY29kZSBvbiBzb2xhcmlzLgogCiAyMDA4LTA1LTI0IDIwOjMwICBkdHMxMgogCiAgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6Ci0gICAgIENIQU5HRVM6IHB5dGhvbjogQlVHOiAxODI2MTc0OiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4KLSAgICAgcHJpbnRpbmcgdmFsdWVzLgotICAgICBBZGRyZXNzZXMgQ1ZFLTIwMDgtMjI5MgorCisgICBDSEFOR0VTOiBweXRob246IEJVRzogMTgyNjE3NDogQ2hlY2sgZm9yIGJ1ZmZlciBvdmVyZmxvdyB3aGVuCisgICBwcmludGluZyB2YWx1ZXMuCisgICBBZGRyZXNzZXMgQ1ZFLTIwMDgtMjI5MgorCisyMDA4LTA1LTI0IDEzOjExICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBPbiBBSVggbmV0aW5ldC9pbl9wY2IuaCBkZXBlbmRzIG9uIG5ldC9yb3V0ZS5oLiBBZGQgdGhlIGluY2x1ZGUKKyAgIGZvciBjb25maWd1cmUuCisKKzIwMDgtMDUtMjQgMDk6MDYgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgTWFrZSB0aGUgY2hlY2tzIGZvciBuZXRpbmV0L2luX3BjYi5oIGFuZCBzeXMvZGlza2xhYmVsLmggdXNlIHRoZQorICAgbm9ybWFsCisgICBtYWNoaW5lcnkuCisgICBBZGQgYSBuZXRzbm1wIHByZWZpeCB0byB0aGUgY2FjaGUgdmFyaWFibGUKKyAgIGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiB0bworICAgcGFjaWZ5IGFjbG9jYWwuCiAKIDIwMDgtMDUtMjMgMjA6MjcgIGR0czEyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsCi0gICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogRml4IGZvciBDUFUgc3RhdHMgb24gRnJlZUJTRAotICAgICBQcm92aWRlZCBieSBNYXhpbSBTb2JvbGV2CisgICAqICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogRml4IGZvciBDUFUgc3RhdHMgb24gRnJlZUJTRAorICAgUHJvdmlkZWQgYnkgTWF4aW0gU29ib2xldgogCiAyMDA4LTA1LTIzIDIwOjEyICBkdHMxMgogCiAgICAqIGRpc3Qvc25tcGQtaW5pdC5kLCBkaXN0L3NubXB0cmFwZC1pbml0LmQ6Ci0gICAgIENIQU5HRVM6IGluc3RhbGw6IFBBVENIOiAxOTY5NjI3OiBIYW5kbGUgZW1wdHkKLSAgICAgL2V0Yy9zeXNjb25maWcvbmV0d29yayBmaWxlCi0gICAgIEZpeCBwcm92aWRlZCBieSBKb3NoIFdpbG1lcworCisgICBDSEFOR0VTOiBpbnN0YWxsOiBQQVRDSDogMTk2OTYyNzogSGFuZGxlIGVtcHR5CisgICAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrIGZpbGUKKyAgIEZpeCBwcm92aWRlZCBieSBKb3NoIFdpbG1lcwogCiAyMDA4LTA1LTIzIDIwOjA3ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE5NjcxOTQ6IFJlY29nbmlzZSBORlM0IG1vdW50cwotICAgICBTdWJtaXR0ZWQgYnkgRmFicmljZSBCYWNjaGVsbGEKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxOTY3MTk0OiBSZWNvZ25pc2UgTkZTNCBtb3VudHMKKyAgIFN1Ym1pdHRlZCBieSBGYWJyaWNlIEJhY2NoZWxsYQogCiAyMDA4LTA1LTIyIDIwOjU1ICBkdHMxMgogCiAgICAqIHNubXBsaWIvYXNuMS5jOgotICAgICBEb24ndCBjaGFuZ2UgbGVuZ3RoIG9mIE9JRCBidWZmZXIgaWYgcGFyc2luZyB0aGUgT0lEIGZhaWxzLgotICAgICBSZXBvcnRlZCBieSBzYWlmdWxsYSBNb2hkIEFiZHVsLgorCisgICBEb24ndCBjaGFuZ2UgbGVuZ3RoIG9mIE9JRCBidWZmZXIgaWYgcGFyc2luZyB0aGUgT0lEIGZhaWxzLgorICAgUmVwb3J0ZWQgYnkgc2FpZnVsbGEgTW9oZCBBYmR1bC4KKworMjAwOC0wNS0yMiAxMzozNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgdXBkYXRlIHRoZSBhZHZlcnRpc2luZyBzZWN0aW9uIGFuZCBjaGFuZ2Ugbm90ZSBhYm91dCBob3cgdG8KKyAgIHVwbG9hZCBmaWxlcyAoYWRkaW5nIGFuIGF1dG9tYXR0ZWQgcnN5bmMgY29tbWFuZCkKKworMjAwOC0wNS0yMiAwNDowOCAgbWFnZnIKKworICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuYzoKKworICAgQWRkIG1pc3NpbmcgaW5jbHVkZS4KKworMjAwOC0wNS0yMSAyMDoyNyAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHRoZSBhbGlhcyBtb2R1bGUgd2l0aCBhIEMrKyBjb21waWxlci4KKworMjAwOC0wNS0yMSAxMzo0MCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgYWRkZWQgRlNGIGRpcmVjdG9yeSBpbmZvCisKKzIwMDgtMDUtMjEgMDk6MjEgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgQWRkIEZyZWUgU29mdHdhcmUgRGlyZWN0b3J5IHRvIHRoZSBsaXN0IG9mIHBsYWNlcyB0byBiZSB1cGRhdGVkLgorCisyMDA4LTA1LTIwIDIzOjAwICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYywgYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgsIGFnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jLCBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYywgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcywgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFRoZSBtYWpvcml0eSBvZiB0aGUgZGVwZW5kZW5jaWVzIG9uIHV0aWxfZnVuY3MgaXMKKyAgIGZvciB0aGUgaGVhZGVyXyogZnVuY3Rpb25zLiBGYWN0b3Igb3V0IHRoZSBoZWFkZXJfKiBmdW5jdGlvbnMgYW5kCisgICBhZGp1c3QgdGhlIHJlcXVpcmVtZW50cy4KKworMjAwOC0wNS0yMCAyMjo0MCAgbWFnZnIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYywgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5oLCBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmgsIGFnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmgsIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCwgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCAKKyAgICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jLAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5jLCBhZ2VudC9taWJncm91cC93aW5FeHRETEwuYywgIAorICAgICAgIGFnZW50L21pYmdyb3VwL3dpbkV4dERMTC5oLCBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIENIQU5HRVM6IERvIG5vdCBjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKSBpZiBub3RoaW5nIGZyb20KKyAgIHV0aWxfZnVuY3MgaXMgdXNlZAogCiAyMDA4LTA1LTE0IDEzOjM1ICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgotICAgICBmaXggYnVpbGQgZmFpbHVyZXMgd2l0aCBlYXJsaWVyIExpbnV4IGtlcm5lbHMgKGUuZy4gd2l0aCBSSDcuMSkKLSAgICAgaW50cm9kdWNlZCBieSByMTY5MDkKIAotMjAwOC0wNS0wOSAxOTowNCAgZHRzMTIKKyAgIGZpeCBidWlsZCBmYWlsdXJlcyB3aXRoIGVhcmxpZXIgTGludXgga2VybmVscyAoZS5nLiB3aXRoIFJINy4xKQorICAgaW50cm9kdWNlZCBieSByMTY5MDkKIAotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sCi0gICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sCi0gICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCBwZXJsL2FnZW50L2FnZW50LnBtLAotICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwKLSAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIHNlZHNjcmlwdC5pbiwKLSAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnByZTEgKQorMjAwOC0wNS0xMyAxODo1NiAgaGFyZGFrZXIKIAotMjAwOC0wNS0wOSAxOTowNCAgZHRzMTIKKyAgICogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorICAgZml4IGNvbW1lbnQgdHlwbwogCi0yMDA4LTA1LTA5IDE4OjQ3ICBkdHMxMgorMjAwOC0wNS0xMyAxNTo0NiAgaGFyZGFrZXIKIAotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICAqIE5FV1M6CiAKLTIwMDgtMDUtMDkgMTU6MjQgIGR0czEyCisgICBkb2N1bWVudCB0aGUgLXQgc3dpdGNoIGNoYW5nZQogCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKKzIwMDgtMDUtMTMgMTU6NDUgIGhhcmRha2VyCiAKLTIwMDgtMDUtMDkgMTU6MTQgIGR0czEyCisgICAqIG1hbi9zbm1wY21kLjEuZGVmOgogCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4yLnByZTEgKQorICAgZG9jdW1lbnQgdGhlIGFsaWFzIGtleXdvcmQKIAotMjAwOC0wNS0wOSAxNDo1MSAgZHRzMTIKKzIwMDgtMDUtMTMgMTU6NDEgIGhhcmRha2VyCiAKLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQorICAgKiBtYW4vc25tcGNtZC4xLmRlZiwgc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYzoKIAotMjAwOC0wNS0wOSAxNDo0NyAgZHRzMTIKKyAgIGFsbG93IGZsb2F0aW5nIHBvaW50IG51bWJlcnMgdG8gYmUgdXNlZCBmb3IgdGltZW91dCB2YWx1ZXMKIAotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMiApCisyMDA4LTA1LTEyIDIxOjExICBoYXJkYWtlcgogCi0yMDA4LTA1LTA5IDE0OjIzICBkdHMxMgorICAgKiBtaWJzL05FVC1TTk1QLVRDLnR4dCwgc25tcGxpYi9zbm1wQWxpYXNEb21haW4uYzoKIAotICAgKiBNYWtlZmlsZS50b3A6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICBBZGRlZCBhIHJlYWwgc25tcEFsaWFzRG9tYWluIE9JRCBkZWZpbml0aW9uCiAKLTIwMDgtMDUtMDkgMTM6NTggIGR0czEyCisyMDA4LTA1LTEyIDIxOjA3ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgotICAgICBEZWJ1Z2dpbmcgbWVzc2FnZXMuCisgICAqIE5FV1M6CisKKyAgIHVwZGF0ZWQgTkVXUyB3aXRoIG5ldyBhbGlhcyBibHVyYgorCisyMDA4LTA1LTEyIDIxOjA3ICBoYXJkYWtlcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sIG1hbi9zbm1wLmNvbmYuNS5kZWYsICAgCisgICAgICBzbm1wbGliL3NubXBBbGlhc0RvbWFpbi5jLCBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIE5FV1M6IHNubXBsaWI6IEFkZGVkIGEgYWxpYXMgdHJhbnNwb3J0IGZvciBtYXBwaW5nIGNvbXBsZXgKKyAgIHRyYW5zcG9ydCBzdHJpbmdzIHRvIHNpbXBsZSBuYW1lIGRlZmluaXRpb25zCisKKzIwMDgtMDUtMTIgMTk6MzggIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHN0cmlwIG9mZiB0cmFpbGluZyBtb2R1bGUgbmFtZQorCisyMDA4LTA1LTEyIDA2OjAzICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmM6CisKKyAgIE1ha2UgbWliSUkvc25tcCB3b3JrIGFnYWluLgorCisyMDA4LTA1LTEwIDIxOjQ3ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcy4KKworMjAwOC0wNS0xMCAwOTo1NSAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfaW5kZXguYywgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgc25tcGxpYi9hc24xLmM6CisKKyAgIENIQU5HRVM6IHNubXBkLCBzbm1wbGliOiBSZXBsYWNlIHRoZSBpbnZhbGlkICUwOHAgZm9ybWF0CisgICBzcGVjaWZpZXIgd2l0aCB0aGUgY29ycmVjdCAlOHAuCisKKzIwMDgtMDUtMTAgMDk6NTEgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2F0LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgCisgICAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYywgYXBwcy9zbm1wZGVsdGEuYywgICAKKyAgICAgIGFwcHMvc25tcG5ldHN0YXQvaW5ldC5jLCBhcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMsICAgCisgICAgICBhcHBzL3NubXBuZXRzdGF0L21haW4uYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkLCBzbm1wbmV0c3RhdCwgc25tcHRyYXBkLCBzbm1wZGVsdGE6IFVzZSBOVUxMCisgICBpbnN0ZWFkIG9mIDAgZm9yIE5VTEwgcG9pbnRlcnMuIFVzZSBjYXN0ZWQgMCdzIGluc3RlYWQgb2YgMCBmb3IKKyAgIE5VTEwgZnVuY3Rpb24gcG9pbnRlcnMuCisKKzIwMDgtMDUtMTAgMDk6NDAgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBBZGQgbWlzc2luZyBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisKKzIwMDgtMDUtMTAgMDk6MzkgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jLCBhZ2VudC9zbm1wX3ZhcnMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEFkZCBtaXNzaW5nIGluY2x1ZGUgZmlsZXMuCisKKzIwMDgtMDUtMTAgMDk6MzMgIG1hZ2ZyCisKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYywgIAorICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYywKKyAgICAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjLCAgIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgQ0hBTkdFUzogc25tcGQsIHNubXBsaWIsIG1pYjJjOiBNb3ZlIHRoZSBkZWZpbml0aW9uIG9mIGlubGluZQorICAgZnVuY3Rpb25zIHNvIHRoYXQgdGhlIGNvbXBpbGVyIHNlZXMgdGhlbSBiZWZvcmUgaXQgc2VlcyB1c2VzIG9mCisgICB0aGVtLgorCisyMDA4LTA1LTEwIDA5OjMwICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9oYW5kbGVyLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0Lmg6CisKKyAgIENIQU5HRVM6IHNubXBkLCBzbm1wbGliOiBSZW1vdmUgdGhlIGlubGluZSBkZWNsYXJhdGlvbnMgZm9yCisgICBmdW5jdGlvbnMgdGhhdCBsYWNrIGFuIGlubGluZSBkZWZpbml0aW9uLgorCisyMDA4LTA1LTA5IDIxOjM1ICBtYWdmcgorCisgICAqICBhZ2VudC9hZ2VudF9pbmRleC5jLCBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCBhZ2VudC9hZ2VudF90cmFwLmMsICAKKyAgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L21pYmdyb3VwL1Jtb24vcm93cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jLCBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYywgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYywgIAorICAgICAgIGFnZW50L3NubXBfYWdlbnQuYywgc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMsICAgCisgICAgICBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsIHNubXBsaWIvbGNkX3RpbWUuYywgc25tcGxpYi9tZDUuYywgICAKKyAgICAgIHNubXBsaWIvbWliLmMsIHNubXBsaWIvcGFyc2UuYywgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi9zbm1wX2FsYXJtLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9jbGllbnQuYywgc25tcGxpYi9zbm1wX2RlYnVnLmMsICAKKyAgICAgICBzbm1wbGliL3NubXBfbG9nZ2luZy5jLCBzbm1wbGliL3NubXB1c20uYywgc25tcGxpYi90b29scy5jOgorCisgICBDSEFOR0VTOiBzbm1wZCwgc25tcGxpYjogVXNlIE5VTEwgaW5zdGVhZCBvZiAwIGZvciBOVUxMIHBvaW50ZXJzLgorICAgVXNlIGNhc3RlZCAwJ3MgaW5zdGVhZCBvZiAwIGZvciBOVUxMIGZ1bmN0aW9uIHBvaW50ZXJzLgorCisyMDA4LTA1LTA5IDIxOjI3ICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L3NubXBfYWdlbnQuYywgICAKKyAgICAgIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCBzbm1wbGliL3BhcnNlLmMsIHNubXBsaWIvcmVhZF9jb25maWcuYywgIAorICAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisKKyAgIENIQU5HRVM6IHNubXBkLCBzbm1wbGliOiBmaXh1cHMgZm9yIHByb3RvdHlwZSBbKHZvaWQpIHJlcGxhY2luZworICAgKCldLgorCisyMDA4LTA1LTA5IDIxOjIzICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jOgorCisgICBSZW1vdmUgZGVhZCBjb2RlLgorCisyMDA4LTA1LTA5IDE5OjE2ICBkdHMxMgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CisKKyAgIE1pc3NpbmcgTUQ1IHNpZ25hdHVyZSBmaWxlIGZvciB6aXAgcmVsZWFzZQorCisyMDA4LTA1LTA5IDE5OjE1ICBkdHMxMgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2U6CisKKyAgIEJhc2ljIGRvY3VtZW50YXRpb24gYW5kIGhlbHAvdXNhZ2UgbWVzc2FnZXMuCiAKIDIwMDgtMDUtMDggMTQ6MDAgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jOgotICAgICBEcm9wIHN1cHBvcnQgZm9yIHRoZSBpbnRlcmltIFNJT0NERVZQUklWQVRFLWJhc2VkIGlvY3RsIGNhbGxzLgotICAgICBTSU9DR01JSVBIWS9TSU9DR01JSVJFRyBoYXZlIGJlZW4gZGVmaW5lZCBzaW5jZSBhdCBsZWFzdCBTZXB0Ci0gICAgIDIwMDEgKGtlcm5lbCAyLjQuMTApLAotICAgICBzbyB0aGUgcmlzayBvZiBjYWxsaW5nIGFuIGluYXBwcm9wcmlhdGUgcHJpdmF0ZSBpb2N0bCBpcyBwcm9iYWJseQotICAgICBncmVhdGVyIHRoYW4KLSAgICAgdGhhdCBvZiBtaXNzaW5nIGluZm9ybWF0aW9uIGZyb20gYW4gYW5jaWVudCBzeXN0ZW0uCisKKyAgIERyb3Agc3VwcG9ydCBmb3IgdGhlIGludGVyaW0gU0lPQ0RFVlBSSVZBVEUtYmFzZWQgaW9jdGwgY2FsbHMuCisgICBTSU9DR01JSVBIWS9TSU9DR01JSVJFRyBoYXZlIGJlZW4gZGVmaW5lZCBzaW5jZSBhdCBsZWFzdCBTZXB0CisgICAyMDAxIChrZXJuZWwgMi40LjEwKSwKKyAgIHNvIHRoZSByaXNrIG9mIGNhbGxpbmcgYW4gaW5hcHByb3ByaWF0ZSBwcml2YXRlIGlvY3RsIGlzIHByb2JhYmx5CisgICBncmVhdGVyIHRoYW4KKyAgIHRoYXQgb2YgbWlzc2luZyBpbmZvcm1hdGlvbiBmcm9tIGFuIGFuY2llbnQgc3lzdGVtLgogCiAyMDA4LTA1LTA4IDA5OjAyICBkdHMxMgogCiAgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgRG9uJ3QgdHJ5IHRvIGF1dG9tYXRpY2FsbHkgY3JlYXRlIGFub255bW91cyB1c2Vycy4KLSAgICAgKEFuIGludmFsaWQgdHJhcHNlc3MgZGlyZWN0aXZlIG1heSBjcmFzaCB0aGUgYWdlbnQpCisKKyAgIERvbid0IHRyeSB0byBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBhbm9ueW1vdXMgdXNlcnMuCisgICAoQW4gaW52YWxpZCB0cmFwc2VzcyBkaXJlY3RpdmUgbWF5IGNyYXNoIHRoZSBhZ2VudCkKKworMjAwOC0wNS0wNiAwODozOCAganNhZnJhbmVrCisKKyAgICogZGlzdC9uZXQtc25tcC5zcGVjOgorCisgICAtIHJlbW92ZSAle2xpYmN1cnJlbnR9CisgICAtIGFkZCBvcGVuc3NsLWRldmVsIHRvIGJ1aWxkIHJlcXVpcmVtZW50cworICAgLSBkb24ndCB1c2UgUHJvdmlkZXM6IHVubGVzcyBuZWNlc3NhcnksIGxldCBycG1idWlsZCBjb21wdXRlIHRoZQorICAgcHJvdmlkZWQgbGlicmFyaWVzCisgICAtIGRvbid0IHNwZWNpZnkgUFJFRklYIGZvciBwZXJsCisKKzIwMDgtMDUtMDYgMDg6MzggIGpzYWZyYW5laworCisgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgcmV2ZXJ0aW5nIGFjY2lkZW50YWx5IGNvbW1pdGVkIGZpbGVzCisKKzIwMDgtMDUtMDYgMDg6MzQgIGpzYWZyYW5laworCisgICAqIGFnZW50L2FnZW50X3JlYWRfY29uZmlnLmMsIGFnZW50L2FnZW50X3RyYXAuYzoKKworICAgLSByZW1vdmUgJXtsaWJjdXJyZW50fQorICAgLSBhZGQgb3BlbnNzbC1kZXZlbCB0byBidWlsZCByZXF1aXJlbWVudHMKKyAgIC0gZG9uJ3QgdXNlIFByb3ZpZGVzOiB1bmxlc3MgbmVjZXNzYXJ5LCBsZXQgcnBtYnVpbGQgY29tcHV0ZSB0aGUKKyAgIHByb3ZpZGVkIGxpYnJhcmllcworICAgLSBkb24ndCBzcGVjaWZ5IFBSRUZJWCBmb3IgcGVybAorCisyMDA4LTA1LTA1IDIxOjQzICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBNZWNoYW5pc20gdG8gc2VsZWN0IHVwY29taW5nIG1vZHVsZSByZS13cml0ZXMgYW5kL29yCisgICByZWNlbnRseS1kZXByZWNhdGVkIG1vZHVsZXMuCiAKIDIwMDgtMDUtMDIgMTA6MTkgIGR0czEyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgotICAgICBIYW5kbGUgdWRwVGFibGUgaW5kZXhpbmcgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLgorCisgICBIYW5kbGUgdWRwVGFibGUgaW5kZXhpbmcgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLgorCisyMDA4LTA0LTMwIDE5OjQ1ICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBSZW1vdmUgdGhlIHN1cHBvcnQgZm9yIGdlbmVyYXRpb24gb2Ygc3RhdGlzdGljcworICAgb2YgaG93IG9mdGVuIGEgY2VydGFpbiBkZWJ1ZyBsb2cgbGV2ZWwgaXMgdHJpZ2dlcmVkLgorCisyMDA4LTA0LTMwIDE5OjQxICBtYWdmcgorCisgICAqIHNubXBsaWIvc25tcF9kZWJ1Zy5jOgorCisgICBORVdTOiBzbm1wbGliOiBSZW1vdmUgdGhlIHZhcmlhYmxlIGRlYnVnX251bV9leGNsdWRlZC4KKyAgIFRoZXJlIGlzIG5vdGhpbmcgdGhhdCBzZXRzIGRlYnVnX251bV9leGNsdWRlZCBhbmQgdGhlcmUgaXMgbm8gd2F5CisgICB0byBmb3IgaXQKKyAgIHRvIGFmZmVjdCB0aGUgcmVzdWx0IG9mIGFueSBmdW5jdGlvbi4KIAogMjAwOC0wNC0zMCAwNToyOCAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBfZGVidWcuYzoKLSAgICAgUmVtb3ZlIHVubmNlc3NhcnkgcHJvdG90eXBlcworCisgICBSZW1vdmUgdW5uY2Vzc2FyeSBwcm90b3R5cGVzCisKKzIwMDgtMDQtMjMgMTY6MzkgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIGFjdHVhbGx5IHVzZSB0aGUgYnJhbmNoIHBhdGgsIGRvbid0IGp1c3Qgc2F5IHlvdSdyZSBnb2luZyB0bwogCiAyMDA4LTA0LTE5IDIyOjIwICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmM6Ci0gICAgIGRvbid0IGRlcGVuZCBvbiBPSUQgcmVzb2x1dGlvbiBmb3IgZGlzbWFuIGxpbmtVcERvd25Ob3RpZmljYXRpb25zCisKKyAgIGRvbid0IGRlcGVuZCBvbiBPSUQgcmVzb2x1dGlvbiBmb3IgZGlzbWFuIGxpbmtVcERvd25Ob3RpZmljYXRpb25zCisKKzIwMDgtMDQtMDggMjA6NDMgIG1hZ2ZyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg6CisKKyAgIEFjY2VwdCB0aGF0IHBlb3BsZSB3aWxsIHRyeSB0byBjb21waWxlIHRoaXMgY29kZSB3aXRoIHByZS1BTlNJCisgICBjb21waWxlcnMgYW5kIGNoYW5nZSBpdCB0byBoYW5kbGUgdGhhdCBjYXNlLgogCiAyMDA4LTA0LTA4IDIwOjM4ICBoYXJkYWtlcgogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IGZpeGVkIGFuIGV4dHJhIGJyYWNlIGluIHRoZSBkb2NzIHBvaW50ZWQgb3V0IGJ5Ci0gICAgIEphc29uIE1hcnRpbgorCisgICBDSEFOR0VTOiBwZXJsOiBmaXhlZCBhbiBleHRyYSBicmFjZSBpbiB0aGUgZG9jcyBwb2ludGVkIG91dCBieQorICAgSmFzb24gTWFydGluCisKKzIwMDgtMDQtMDggMjA6MzQgIGhhcmRha2VyCisKKyAgICogZGlzdC9tYWtlcmVsZWFzZS54bWw6CisKKyAgIHVwZGF0ZSBhbmQgcmVzdHJ1Y3R1cmUgYSBiaXQgdG8gZml4IGEgZmV3IHByb2JsZW1zCisKKzIwMDgtMDQtMDcgMjA6MDYgIG1hZ2ZyCisKKyAgICogYWdlbnQvaGVscGVycy9udWxsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBBcyB0aGUgbnVsbCBoYW5kbGVyIGlzIHBlcmZlY3RseSBjYXBhYmxlIG9mCisgICBoYW5kbGluZyBHRVRfQlVMSyByZXF1ZXN0cyBpdCBpcyBub3cgbWFya2VkIGFzIHN1Y2ggaW4gdGhlCisgICByZWdpc3RyYXRpb24uCiAKIDIwMDgtMDQtMDcgMTQ6MDAgIGR0czEyCiAKICAgICogc25tcGxpYi9wYXJzZS5jOgotICAgICBBbm90aGVyIG92ZXItc2hvcnQgREVTQ1JJUFRJT04gYnVmZmVyLgorCisgICBBbm90aGVyIG92ZXItc2hvcnQgREVTQ1JJUFRJT04gYnVmZmVyLgogCiAyMDA4LTA0LTA3IDEzOjU3ICBkdHMxMgogCiAgICAqIHNubXBsaWIvcGFyc2UuYzoKLSAgICAgSGFuZGxlIGxvbmdlciBERVNDUklQVElPTi9SRUZFUkVOQ0Ugc3RyaW5ncyBpbiBDYXBhYmlsaXRpZXMKLSAgICAgc3RhdGVtZW50cy4KLSAgICAgKENvbnNpc3RlbnQgcHJvY2Vzc2luZyB3aXRoIG90aGVyIE1JQiBkZWZpbml0aW9uIG1hY3JvcykuCi0gICAgIEZpeCBwcm92aWRlZCBieSBBbGVrc2FuZHIgTG9tYW5vdi4KKworICAgSGFuZGxlIGxvbmdlciBERVNDUklQVElPTi9SRUZFUkVOQ0Ugc3RyaW5ncyBpbiBDYXBhYmlsaXRpZXMKKyAgIHN0YXRlbWVudHMuCisgICAoQ29uc2lzdGVudCBwcm9jZXNzaW5nIHdpdGggb3RoZXIgTUlCIGRlZmluaXRpb24gbWFjcm9zKS4KKyAgIEZpeCBwcm92aWRlZCBieSBBbGVrc2FuZHIgTG9tYW5vdi4KKworMjAwOC0wNC0wMiAxOTozNSAgaGFyZGFrZXIKKworICAgKiBGQVE6CisKKyAgIG1lbnRpb24gbGliZWxmIHBhY2thZ2UgcmVuYW1lCisKKzIwMDgtMDMtMjkgMDk6MjkgIG1hZ2ZyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9NYWtlZmlsZS5pbiwgYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5jLCBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzLmMsIGFnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYywgCisgICAgICAgIGFnZW50L3NubXBfdmFycy5jLCBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oOgorCisgICBORVdTOiBzbm1wZDogRW5hYmxlIGF1dG9tYXRpYyByZXJlZ2lzdGVyaW5nIG9mIHN5c09SVGFibGUgZW50cmllcworICAgZnJvbSBBZ2VudFggc3ViYWdlbnRzLiBBZGQgdGhlIHN5c09SVGFibGUgaW50ZXJmYWNlIHRvIHRoZQorICAgaW5jbHVkZSBkaXJlY3RvcnkuIFJld3JpdGUgdGhlIHN5c09SVGFibGUgbW9kdWxlIHRvIHVzZSB0aGUKKyAgIHRhYmxlX2NvbnRhaW5lciBoYW5kbGVyLgorCisyMDA4LTAzLTI3IDAzOjIxICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UsIGRpc3QvbmV0LXNubXAuc3BlYywgZGlzdC9wYXRtZToKKworICAgdW5jb21taXQgMyBhY2NpZGVudGFsIG11bHRpcGxlIGZpbGUgY29tbWl0cworCisyMDA4LTAzLTI3IDAzOjE4ICBoYXJkYWtlcgorCisgICAqICBkaXN0L21ha2VyZWxlYXNlLCBkaXN0L21ha2VyZWxlYXNlLnhtbCwgZGlzdC9uZXQtc25tcC5zcGVjLCAgIAorICAgICAgZGlzdC9wYXRtZToKKworICAgdmFyaW91cyByZXdvcmRpbmcsIHJlc3RydWN0dXJpbmcgYW5kIHByb3BlciBmaWxlIHJlcGxhY2VtZW50CisgICBzY2hlbWUKIAogMjAwOC0wMy0yNiAwNzo1MiAgbWFnZnIKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0gICAgIE5FV1M6IHNubXBsaWI6IGZyb20gIkFsZWtzYW5kciBMb21hbm92IjogQ29ycmVjdGVkIHJlZ2lzdGVyaW5nIG9mCi0gICAgIG11bHRpcGxlIHByZW1pYiBjb25maWcgaGFuZGxlcnMgc28gdGhhdCBhbGwgb2YgdGhlbSBnZXQKLSAgICAgcmVnaXN0ZXJlZCBhcyBwcmVtaWIgaGFuZGxlcnMgYXMgb3Bwb3NlZCB0byB0aGUgZWFybGllciBiZWhhdmlvdXIKLSAgICAgd2hlcmUgdGhleSBhbHdheXMgZ290IHJlZ2lzdGVyZWQgYXMgbm9ybWFsIGNvbmZpZyBpdGVtcy4KKworICAgTkVXUzogc25tcGxpYjogZnJvbSAiQWxla3NhbmRyIExvbWFub3YiOiBDb3JyZWN0ZWQgcmVnaXN0ZXJpbmcgb2YKKyAgIG11bHRpcGxlIHByZW1pYiBjb25maWcgaGFuZGxlcnMgc28gdGhhdCBhbGwgb2YgdGhlbSBnZXQKKyAgIHJlZ2lzdGVyZWQgYXMgcHJlbWliIGhhbmRsZXJzIGFzIG9wcG9zZWQgdG8gdGhlIGVhcmxpZXIgYmVoYXZpb3VyCisgICB3aGVyZSB0aGV5IGFsd2F5cyBnb3QgcmVnaXN0ZXJlZCBhcyBub3JtYWwgY29uZmlnIGl0ZW1zLgorCisyMDA4LTAzLTI2IDA3OjE2ICBtYWdmcgorCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBHZXQgdGhlIHRhYmxlX2NvbnRhaW5lciBkYXRhIGZyb20gdGhlIHJpZ2h0CisgICBoYW5kbGVyIHdoZW4gdW5yZWdpc3RlcmluZyBhIHRhYmxlX2NvbnRhaW5lci4KIAogMjAwOC0wMy0yNSAwNjowNyAgbWFnZnIKIAogICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgotICAgICBSZW1vdmUgc3B1cmlvdXMgcHJpbnRmIGZyb20gdW5yZWdpc3Rlcl9taWJfY29udGV4dAorCisgICBSZW1vdmUgc3B1cmlvdXMgcHJpbnRmIGZyb20gdW5yZWdpc3Rlcl9taWJfY29udGV4dAogCiAyMDA4LTAzLTI0IDE3OjU0ICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjOgotICAgICBDSEFOR0VTOiBtaWIyYzogQlVHOiAxODc0MDU5LDE3MzcwNjg6IEhhbmRsZSBNSUIgb2JqZWN0cyB3aXRoCi0gICAgIGVtYmVkZGVkIGh5cGhlbnMKKworICAgQ0hBTkdFUzogbWliMmM6IEJVRzogMTg3NDA1OSwxNzM3MDY4OiBIYW5kbGUgTUlCIG9iamVjdHMgd2l0aAorICAgZW1iZWRkZWQgaHlwaGVucwogCiAyMDA4LTAzLTI0IDE3OjI5ICBkdHMxMgogCiAgICAqIHNubXBsaWIvYXNuMS5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE4NjY2NTU6IEhhbmRsZSBwYXJzaW5nIGludmFsaWQgT0lECi0gICAgIHN1YmlkZW50aWZpZXJzCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IEJVRzogMTg2NjY1NTogSGFuZGxlIHBhcnNpbmcgaW52YWxpZCBPSUQKKyAgIHN1YmlkZW50aWZpZXJzCiAKIDIwMDgtMDMtMjQgMTY6NTMgIGR0czEyCiAKICAgICogc25tcGxpYi9hc24xLmM6Ci0gICAgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIOiAxOTIxODYxOiBBdm9pZCBlbmRsZXNzIGxvb3AgYWZ0ZXIKLSAgICAgdHJ1bmNhdGluZyA2NGJpdCBpbnQKKworICAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0g6IDE5MjE4NjE6IEF2b2lkIGVuZGxlc3MgbG9vcCBhZnRlcgorICAgdHJ1bmNhdGluZyA2NGJpdCBpbnQKIAogMjAwOC0wMy0yNCAxNTowMCAgZHRzMTIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTgyMzM4MTogVmFsaWQgTUlCIGRpcmVjdG9yeSBzZWFyY2ggcGF0aCBvbgotICAgICBXaW5kb3dzCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4MjMzODE6IFZhbGlkIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIHBhdGggb24KKyAgIFdpbmRvd3MKKworMjAwOC0wMy0yMiAwODo0MiAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jOgorCisgICBNYWtlIGl0IHBvc3NpYmxlIHRvIGJ1aWxkIHNubXB0cmFwZCB3aXRob3V0IGVtYmVkZGVkIHBlcmwgYWdhaW4uCiAKIDIwMDgtMDMtMjEgMTc6NTUgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIHNubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYywKLSAgICAgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsCi0gICAgIHNubXBsaWIvc25tcFRDUElQdjZEb21haW4uYywgc25tcGxpYi9zbm1wVW5peERvbWFpbi5jLAotICAgICBzbm1wbGliL3dpbnBpcGUuYzoKLSAgICAgTkVXUzogbGlic25tcDogUEFUQ0g6IDE4OTU5Mjc6IGZyb20gamh1bTgxMTE6IGNoYW5nZSBvYnNvbGV0ZQotICAgICByZWN2L3NlbmQgdG8gcmVjdmZyb20vc2VuZHRvCisgICAqICBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYywgc25tcGxpYi9zbm1wQUFMNVBWQ0RvbWFpbi5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYywgc25tcGxpYi9zbm1wVENQRG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvd2lucGlwZS5jOgorCisgICBORVdTOiBsaWJzbm1wOiBQQVRDSDogMTg5NTkyNzogZnJvbSBqaHVtODExMTogY2hhbmdlIG9ic29sZXRlCisgICByZWN2L3NlbmQgdG8gcmVjdmZyb20vc2VuZHRvCiAKIDIwMDgtMDMtMjEgMTc6NDkgIGhhcmRha2VyCiAKICAgICogcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYzoKLSAgICAgQ0hBTkdFUzogcHl0aG9uOiBQQVRDSDogMTg2MjE3NzogZnJvbSB3YWZmbGVzb3VmZmxlOiBtYWRlIGNvZGUKLSAgICAgbW9yZSB3aW5kb3dzL2N5Z3dpbiBjb21waWxlciBmcmllbmRsCisKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDE4NjIxNzc6IGZyb20gd2FmZmxlc291ZmZsZTogbWFkZSBjb2RlCisgICBtb3JlIHdpbmRvd3MvY3lnd2luIGNvbXBpbGVyIGZyaWVuZGwKIAogMjAwOC0wMy0yMSAxNzo0NSAgaGFyZGFrZXIKIAogICAgKiBweXRob24vbmV0c25tcC9jbGllbnQucHk6Ci0gICAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDE4Nzc4NDA6IGZpeCBNSUIgbGFiZWwgYW5kIGluZGV4aW5nIGR1ZQotICAgICB0byBzbGlnaHRseSBicm9rZW4gcmVnZXhwCisKKyAgIENIQU5HRVM6IHB5dGhvbjogUEFUQ0g6IDE4Nzc4NDA6IGZpeCBNSUIgbGFiZWwgYW5kIGluZGV4aW5nIGR1ZQorICAgdG8gc2xpZ2h0bHkgYnJva2VuIHJlZ2V4cAogCiAyMDA4LTAzLTIxIDE3OjM5ICBoYXJkYWtlcgogCiAgICAqIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkyMDM5MDogZnJvbSB3aWxtZXNqOiBmaXggcmVnaXN0cmF0aW9uIG9mCi0gICAgIHRhYmxlcyB3aXRoIC4wIGFzIElJRHMKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MjAzOTA6IGZyb20gd2lsbWVzajogZml4IHJlZ2lzdHJhdGlvbiBvZgorICAgdGFibGVzIHdpdGggLjAgYXMgSUlEcwogCiAyMDA4LTAzLTIxIDE3OjMyICBoYXJkYWtlcgogCiAgICAqIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkxNDY0NTogZnJvbSB3aWxtZXNqOiBiZXR0ZXIgZW5kIG9mIG1pYgotICAgICBzdXBwb3J0CisKKyAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTE0NjQ1OiBmcm9tIHdpbG1lc2o6IGJldHRlciBlbmQgb2YgbWliCisgICBzdXBwb3J0CiAKIDIwMDgtMDMtMjEgMTc6MjggIGhhcmRha2VyCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC54czoKLSAgICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MTQ2NDM6IGZyb20gd2lsbWVzajogZml4IGlzc3VlcyB3aXRoCi0gICAgIGVtYmVkZGVkIHBlcmwgcmV0dXJuaW5nIDAgYmVpbmcgcmVjbGFzc2lmaWVkIGFzIGEgd3JvbmcgZGF0YSB0eXBlCi0gICAgIHdoZW4gYW4gaW50IHdvcmtzLgorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTkxNDY0MzogZnJvbSB3aWxtZXNqOiBmaXggaXNzdWVzIHdpdGgKKyAgIGVtYmVkZGVkIHBlcmwgcmV0dXJuaW5nIDAgYmVpbmcgcmVjbGFzc2lmaWVkIGFzIGEgd3JvbmcgZGF0YSB0eXBlCisgICB3aGVuIGFuIGludCB3b3Jrcy4KIAogMjAwOC0wMy0yMSAxNzoyMiAgaGFyZGFrZXIKIAogICAgKiBsb2NhbC9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogbWliMmM6IFBBVENIIDE5MTQzOTg6IGZyb20gd2lsbWVzajogaW5zdGFsbAotICAgICBtaWIyYy5wZXJsLmNvbmYKKworICAgQ0hBTkdFUzogbWliMmM6IFBBVENIIDE5MTQzOTg6IGZyb20gd2lsbWVzajogaW5zdGFsbAorICAgbWliMmMucGVybC5jb25mCiAKIDIwMDgtMDMtMjEgMTc6MDIgIGhhcmRha2VyCiAKICAgICogcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IFBBVENIOiAxOTE0MzkzOiBmcm9tIHdpbG1lc2o6IHJlZ2lzdGVyQWdlbnQgY2FuCi0gICAgIG5vdyBiZSBydW4gbXVsdGlwbGUgdGltZXMKKworICAgQ0hBTkdFUzogcGVybDogUEFUQ0g6IDE5MTQzOTM6IGZyb20gd2lsbWVzajogcmVnaXN0ZXJBZ2VudCBjYW4KKyAgIG5vdyBiZSBydW4gbXVsdGlwbGUgdGltZXMKIAogMjAwOC0wMy0yMSAxNjozNSAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmM6Ci0gICAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTkwOTgxMzogZml4IHRhYmxlX2l0ZXJhdG9yIGhpbnQgdG8gZ2V0X2ZpcnN0Ci0gICAgIHdoZW4gU09SVEVEIGZsYWcgaXMgc2V0CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTkwOTgxMzogZml4IHRhYmxlX2l0ZXJhdG9yIGhpbnQgdG8gZ2V0X2ZpcnN0CisgICB3aGVuIFNPUlRFRCBmbGFnIGlzIHNldAorCisyMDA4LTAzLTIxIDE2OjI0ICBoYXJkYWtlcgorCisgICAqIGFnZW50L3NubXBfcGVybC5jLCBhcHBzL3NubXB0cmFwZC5jOgorCisgICBORVdTOiBzbm1wdHJhcGQ6IFBBVENIOiAxOTA4Mjg4OiBmcm9tIGFuZWRlbDogSWYgc25tcHRyYXBkIC1mCisgICBpbnRlcnJ1cHRlZCB3aXRoIGN0cmwtQyBydW4gcGVybCBFTkQgYmxvY2sKKworMjAwOC0wMy0yMSAxNjoxNiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxOTAyMTEzOiBmcm9tIGpzYWZyYW5lazogZml4IGVycm9yIGxvZyBpbgorICAgaW5ldE5ldFRvTWVkaWF0YWJsZQorCisyMDA4LTAzLTIxIDE2OjEyICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxOTAyMTA1OiBmcm9tIGpzYWZyYW5lazogaGlkZSBhbmQgaW1wcm92ZSBkZWJ1ZworICAgbG9nIG1lc3NhZ2VzIGNyZWF0ZWQgYnkgcGF0Y2ggMTcwNTU5NAorCisyMDA4LTAzLTA3IDE1OjQyICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuaDoKKworICAgSEFMLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBockZTVGFibGUuCisKKzIwMDgtMDMtMDcgMTU6NDAgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMsIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvaHdfZnN5cy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tb3VudHMuaDoKKworICAgSW5pdGlhbCBIQUwgaW1wbGVtZW50YXRpb24gb2YgRmlsZVN5c3RlbSBpbmZvcm1hdGlvbgorCisyMDA4LTAzLTA3IDE1OjM1ICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDaGVjayBmb3IgZ2V0dmZzc3RhdCgpCisKKzIwMDgtMDMtMDcgMTU6MzQgIGR0czEyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4MjMzODE6IFVzZSBhIHNlbnNpYmxlIGRlZmF1bHQgTUlCRElSIHBhdGgKKyAgIG9uIEN5Z3dpbi9NaW5HVworICAgKFNob3VsZCB0aGlzIGJlIGFwcGxpZWQgdG8gb3RoZXIgYnJhbmNoZXM/IElmIHNvLCB3aGljaD8pCiAKIDIwMDgtMDItMjcgMjI6MTIgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKLSAgICAgRml4IEMrKyBzdHlsZSBjb21tZW50CisKKyAgIEZpeCBDKysgc3R5bGUgY29tbWVudAorCisyMDA4LTAyLTI3IDA3OjQ5ICBtYWdmcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgorCisgICBUaGUgTFZNIGRpc2sgcGF0Y2ggaW50cm9kdWNlZCBhIG1lbW9yeSBsZWFrLiBUaGlzIHJlbW92ZXMgdGhlCisgICBsZWFrLgorCisyMDA4LTAyLTI2IDIzOjI3ICBoYXJkYWtlcgorCisgICAqIGRpc3QvbWFrZXJlbGVhc2UueG1sOgorCisgICBtYWtlIHRoZSBzY3JpcHQgbW9yZSBoaWVyYXJjaGlhbC9zdHJ1Y3R1cmVkCisKKzIwMDgtMDItMjYgMjE6MzYgIG5iYQorCisgICAqIGFwcHMvc25tcHRyYW5zbGF0ZS5jOgorCisgICBDSEFOR0VTOiBJbml0YWxpemUgbG9nIHN1YnN5c3RlbQorCisyMDA4LTAyLTI2IDIxOjM0ICBuYmEKKworICAgKiBzbm1wbGliL3BhcnNlLmM6CisKKyAgIENIQU5HRVM6IEZpeCBmb3IgcmVmcyB0byBPQkpFQ1QtR1JPVVAgaW4gYW5vdGhlciBNSUIKKworMjAwOC0wMi0yNiAyMToyMyAgbmJhCisKKyAgICogIG1pYnMvRElTTUFOLUVWRU5ULU1JQi50eHQsIG1pYnMvRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvSVAtRk9SV0FSRC1NSUIudHh0LCBtaWJzL0lQLU1JQi50eHQsICAgCisgICAgICBtaWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0LCBtaWJzL05PVElGSUNBVElPTi1MT0ctTUlCLnR4dCwgICAKKyAgICAgIG1pYnMvU05NUC1VU00tQUVTLU1JQi50eHQsIG1pYnMvU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0LCAgIAorICAgICAgbWlicy9UUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0LCBtaWJzL1RVTk5FTC1NSUIudHh0OgorCisgICBVcGRhdGUgdG8gYXV0b2V4dHJhY3RlZCBtaWIgZmlsZXMgKGJsYW5rIGxpbmUgY2hhbm1nZXMpCisKKzIwMDgtMDItMjYgMjA6NDYgIG5iYQorCisgICAqIG1pYnMvTWFrZWZpbGUubWliLCBtaWJzL2lhbmFsaXN0LCBtaWJzL3JmY2xpc3Q6CisKKyAgIFVwZGF0ZSBmb3IgY3VycmVudGx5IHJlbGVhc2VkIFJGQyBNSUJTCisKKzIwMDgtMDItMjYgMjA6NDUgIG5iYQorCisgICAqICBtaWJzL0lBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0LCAgIAorICAgICAgbWlicy9JQU5BLUxBTkdVQUdFLU1JQi50eHQsIG1pYnMvSUFOQS1SVFBST1RPLU1JQi50eHQsICAgCisgICAgICBtaWJzL0lBTkFpZlR5cGUtTUlCLnR4dDoKKworICAgVXBkYXRlIElBTkEgTUlCUyB0byBjdXJyZW50IHZlcnNpb24KKworMjAwOC0wMi0yNSAyMjoyMSAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaDoKKworICAgYWRkIG1pc3NpbmcgI2luY2x1ZGU8cHRocmVhZC5oPiBmb3IgcHRocmVhZF9tdXRleF90CisKKzIwMDgtMDItMjUgMjI6MDYgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYzoKKworICAgYSBiZXR0ZXIgcG9ydGFiaWxpdHkgZml4CisKKzIwMDgtMDItMjMgMDA6NTkgIGhhcmRha2VyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTcwNTU5NDogZnJvbSBjX3ZhcnVuOiBGaXggdmFyaW91cyBhc3BlY3RzIG9mCisgICBsaW51eCBpcEFkZHJlc3NQcmVmaXhUYWJsZSByZXBvcnRpbmcuCiAKIDIwMDgtMDItMjIgMjM6NTIgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4OTYxMTg6IHBhdGNoIGZyb20ganNhZnJhbmVrOiBmaXggaWZUYWJsZQotICAgICAzMmJpdCBjb3VudGVycyBvbiBsaW51eAorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4OTYxMTg6IHBhdGNoIGZyb20ganNhZnJhbmVrOiBmaXggaWZUYWJsZQorICAgMzJiaXQgY291bnRlcnMgb24gbGludXgKKworMjAwOC0wMi0yMiAyMzo0OSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jOgorCisgICBwYXRjaCBmcm9tIGpzYWZyYW5lazogQ3JlYXRlIGlwdjZTY29wZVpvbmVFbnRyeSBvbmx5IGZvcgorICAgbGluay1sb2NhbCBhZGRyZXNzZXMgYW5kIG9ubHkgb25jZSBwZXIgaW50ZXJmYWNlLgogCiAyMDA4LTAyLTIyIDIzOjQ0ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvcGFyc2UuYzoKLSAgICAgQ0hBTkdFUzogbGlic25tcDogUEFUQ0g6IDE4OTgyMDQ6IGZyb20gTWlrZSBXZXNjb3R0OiBmaXggYnVnCi0gICAgIDE4OTgxOTggaW4gcGFyc2UuYyB0byBhdm9pZCBhIHNlZ2ZhdWx0IHdoZW4gcGFyc2luZyBicm9rZW4gbWlicy4KKworICAgQ0hBTkdFUzogbGlic25tcDogUEFUQ0g6IDE4OTgyMDQ6IGZyb20gTWlrZSBXZXNjb3R0OiBmaXggYnVnCisgICAxODk4MTk4IGluIHBhcnNlLmMgdG8gYXZvaWQgYSBzZWdmYXVsdCB3aGVuIHBhcnNpbmcgYnJva2VuIG1pYnMuCiAKIDIwMDgtMDItMTggMTI6MTEgIGR0czEyCiAKICAgICogbWFuL21pYl9hcGkuMy5kZWY6Ci0gICAgIENsYXJpZnkgdGhlIG5lZWQgdG8gcmVzZXQgYnVmZmVyIGxlbmd0aCB3aGVuIGNhbGxpbmcgJ3JlYWRfb2JqaWQnCi0gICAgIHJlcGVhdGVkbHkuCisKKyAgIENsYXJpZnkgdGhlIG5lZWQgdG8gcmVzZXQgYnVmZmVyIGxlbmd0aCB3aGVuIGNhbGxpbmcgJ3JlYWRfb2JqaWQnCisgICByZXBlYXRlZGx5LgorCisyMDA4LTAyLTE4IDEwOjMyICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmM6CisKKyAgIHBvcnRhYmlsaXR5IGZpeAorCisyMDA4LTAyLTE4IDA3OjM5ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybVRhYmxlLmM6CisKKyAgIG1ha2Ugc3VyZSB0aGF0IG5ldHNubXBfaXF1ZXJ5X3VzZXJfc2Vzc2lvbiBldCBhbC4gYXJlIHByb3Blcmx5CisgICBkZWNsYXJlZAogCiAyMDA4LTAyLTE3IDE4OjAxICB0YW5kZXJzCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6Ci0gICAgIGZpeCB0eXBvIGluIHZhcmlhYmxlIG5hbWUKKworICAgZml4IHR5cG8gaW4gdmFyaWFibGUgbmFtZQogCiAyMDA4LTAyLTE3IDA4OjM4ICB0YW5kZXJzCiAKICAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKLSAgICAgcG9ydGFiaWxpdHkgZml4CisKKyAgIHBvcnRhYmlsaXR5IGZpeAorCisyMDA4LTAyLTE1IDE3OjQ1ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgbG93ZXJlZCBmYWlsdXJlIG1lc3NhZ2UgdG8gaW5zZXJ0IHRvIGRlYnVnOyByZW1vdmVkIENWUyBJRCBmcm9tCisgICB0b3Agb2YgbGluZQorCisyMDA4LTAyLTE1IDE3OjM5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYzoKKworICAgZG9uJ3QgaW5zZXJ0IGVtcHR5IGVudHJpZXMKKworMjAwOC0wMi0xNSAxNzozMSAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmM6CisKKyAgIHBhdGNoIGZyb20ganNhZnJhbmUgb24gaXJjOiBtYWtlIGlwdjYgZW50cmllcyB3b3JrIG9uIDY0IGJpdAorICAgbWFjaGluZXMKKworMjAwOC0wMi0xNSAxNjoyNCAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlLnhtbDoKKworICAgcGFzcyAxIGF0IGEgbmV3IG1ha2VyZWxlYXNlIHNjcmlwdDsgY3VycmVudGx5IGp1c3QgY29udmVydGVkIGNvZGUKKyAgIG1vc3RseQorCisyMDA4LTAyLTE1IDE2OjIyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgorCisgICByZW1vdmUgbGludXggY2hlY2tzCisKKzIwMDgtMDItMTUgMTU6NDUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICByZW1vdmUgcmVmZXJlbmNlcyB0byBSREFfUlRBCisKKzIwMDgtMDItMTUgMTU6MzcgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBkb24ndCBjb21waWxlIGluIHRoZSBpcHY2IGNvZGUgaWYgTkRBX1JUQSBpc24ndCBkZWZpbmVkCiAKIDIwMDgtMDItMTUgMTM6MDAgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jOgotICAgICBwb3J0YWJpbGl0eSBmaXgKKworICAgcG9ydGFiaWxpdHkgZml4CisKKzIwMDgtMDItMTUgMDY6MTkgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jOgorCisgICBtaW5vciBidWcgdXBkYXRlIGZyb20gY192YXJ1bgorCisyMDA4LTAyLTE1IDA1OjEzICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMsCisgICAgICAgICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNzA0MTA1OiBmcm9tIGNfdmFydW46IEFkZCBJUHY2IHN1cHBvcnQgdG8KKyAgIHRoZSBpbmV0TmV0VG9NZWRpYVRhYmxlIGZvciBsaW51eAorCisyMDA4LTAyLTE1IDA1OjEyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi5oOgorCisgICByZXF1aXJlIG5ldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSB0YWJsZQorCisyMDA4LTAyLTE1IDA1OjAwICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRzLmgsCisgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE3MTU0MDU6IGZyb20gY192YXJ1bjogSW1wbGVtZW50IHRoZQorICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgb24gbGludXgKIAogMjAwOC0wMi0xNSAwNDozOSAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9zbm1wZC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MTY1NDg6IGZyb20gbXlhbWF0bzogRml4IGhlbHAgb3V0cHV0IHNvCi0gICAgIG5vIHNwYWNlIGlzIHByaW50ZWQgYmV0d2VlbiAtRCBhbmQgYXJndW1lbnRzLgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MTY1NDg6IGZyb20gbXlhbWF0bzogRml4IGhlbHAgb3V0cHV0IHNvCisgICBubyBzcGFjZSBpcyBwcmludGVkIGJldHdlZW4gLUQgYW5kIGFyZ3VtZW50cy4KKworMjAwOC0wMi0xNSAwNDoyNyAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvUm1vbi5oLCBhZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5oOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE3MjM2MTE6IGZyb20gRW1pIFlhbmFnaTogTmV3IGltcGxlbWVudGF0aW9uCisgICBvZiB0aGUgcm1vbiBhbGFybVRhYmxlCiAKIDIwMDgtMDItMTUgMDM6NDQgIGhhcmRha2VyCiAKICAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYzoKLSAgICAgTkVXUzogc25tcGQ6IFBBVENIOiAxODkzNDY4OiBmcm9tIGdrb2VuaWc6IGZpeGVkIHJlZ2lzdHJhdGlvbiBvZgotICAgICBPSURzIHdpdGggcmFuZ2VzCisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTg5MzQ2ODogZnJvbSBna29lbmlnOiBmaXhlZCByZWdpc3RyYXRpb24gb2YKKyAgIE9JRHMgd2l0aCByYW5nZXMKIAogMjAwOC0wMi0xNCAyMTo0MCAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgotICAgICBmaXggdHlwbyBpbiB2YXJpYWJsZSBkZWNsYXJhdGlvbiAodW5icmVha3MgdGhlIGJ1aWxkIG9uIGEgZmV3Ci0gICAgIHN5c3RlbXMpCisKKyAgIGZpeCB0eXBvIGluIHZhcmlhYmxlIGRlY2xhcmF0aW9uICh1bmJyZWFrcyB0aGUgYnVpbGQgb24gYSBmZXcKKyAgIHN5c3RlbXMpCiAKIDIwMDgtMDItMTQgMDA6MjkgIGhhcmRha2VyCiAKICAgICogQ09QWUlORzoKLSAgICAgeWVhciB1cGRhdGUgZm9yIHNwYXJ0YQorCisgICB5ZWFyIHVwZGF0ZSBmb3Igc3BhcnRhCiAKIDIwMDgtMDItMTMgMjM6MzcgIG1hZ2ZyCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oLCBzbm1wbGliL2NvbnRhaW5lci5jOgotICAgICBORVdTOiBzbm1wbGliOiBDaGFuZ2UgQ09OVEFJTkVSX0lOU0VSVCB0byBub3QgZG8gcGFydGlhbCBpbnNlcnRzCi0gICAgIGluIGNvbnRhaW5lcnMgd2l0aCBtdWx0aXBsZSBpbmRpY2VzIHdoZW4gb25lIGluc2VydCBmYWlscy4KKworICAgTkVXUzogc25tcGxpYjogQ2hhbmdlIENPTlRBSU5FUl9JTlNFUlQgdG8gbm90IGRvIHBhcnRpYWwgaW5zZXJ0cworICAgaW4gY29udGFpbmVycyB3aXRoIG11bHRpcGxlIGluZGljZXMgd2hlbiBvbmUgaW5zZXJ0IGZhaWxzLgogCiAyMDA4LTAyLTEzIDIzOjExICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvc25tcHVzbS5jOgotICAgICBGaXhlZCB0aGUgY3JlYXRlVXNlciBsaW5lIHRvIHNwZWNpZnkgdGhlIC1lIGZsYWcgKHJlc3BvbmRpbmcgdG8gYQotICAgICBjb21wbGFpbnQgYWJvdXQgaXQgYmUgbWlzc2luZykKKworICAgRml4ZWQgdGhlIGNyZWF0ZVVzZXIgbGluZSB0byBzcGVjaWZ5IHRoZSAtZSBmbGFnIChyZXNwb25kaW5nIHRvIGEKKyAgIGNvbXBsYWludCBhYm91dCBpdCBiZSBtaXNzaW5nKQorCisyMDA4LTAyLTEzIDE3OjQyICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE3Nzk1NTg6IGZyb20gYnJ1bWJzOiBJbXBsZW1lbnQgdGhlCisgICBkaXNrSU9MQTEsNSwxMCBvYmplY3Rpb25zIGluIHRoZSBkaXNraW8tbWliIHVuZGVyIGxpbnV4CiAKIDIwMDgtMDItMTMgMTc6MTUgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzgzNzMzOiBQdXQgdGhlIHBhY2thZ2UgdmVyc2lvbiBudW1iZXIKLSAgICAgaW50byB0aGUgaHJTV0luc3QgdGFibGUgZm9yIHNvbGFyaXMuCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc4MzczMzogUHV0IHRoZSBwYWNrYWdlIHZlcnNpb24gbnVtYmVyCisgICBpbnRvIHRoZSBoclNXSW5zdCB0YWJsZSBmb3Igc29sYXJpcy4KKworMjAwOC0wMi0xMyAxNjo1OCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc4MzQyMzogZnJvbSBqc2FmcmFuZWs6IHJldHVybiBhIGNvcnJlY3QKKyAgIGlwdjZJbnRlcmZhY2VJZGVudGlmaWVyIG9mIGxvb3BiYWNrIG9uIGxpbnV4CiAKIDIwMDgtMDItMTMgMTY6MTIgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3ODQ3NDc6IGZyb20ganNhZnJhbmVrOiBGaXggbG9uZyB1c2FnZQotICAgICBmb3IgaXAgYWRyZXNzZXMgb24gNjQgYml0IHN5c3RlbXMgaW4gdmFyaW91cyBNSUItSUkgdGFibGVzLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc4NDc0NzogZnJvbSBqc2FmcmFuZWs6IEZpeCBsb25nIHVzYWdlCisgICBmb3IgaXAgYWRyZXNzZXMgb24gNjQgYml0IHN5c3RlbXMgaW4gdmFyaW91cyBNSUItSUkgdGFibGVzLgorCisyMDA4LTAyLTEzIDE2OjA3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmg6CisKKyAgIE5FV1M6IHNubXBkOiBQQVRDSDogMTgwNjUwMTogZnJvbSBqbWFnZGVyOiBBZGQgYSBzbm1wX3YzdHJhcAorICAgZnVuY3Rpb24gZm9yIHNlbmRpbmcgdHJhcHMgd2l0aCBhIHNubXB2MyBjb250ZXh0CiAKIDIwMDgtMDItMTMgMTY6MDIgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLAotICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODI2MTAyOiBmcm9tIGpzYWZyYW5lazogc3VwcG9ydCBsb25nZXIKLSAgICAgaW50ZXJmYWNlIG5hbWVzIG9uIGxpbnV4CisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaDoKIAotMjAwOC0wMi0xMyAwOToyMiAgdGFuZGVycwotCi0gICAqIGNvbmZpZ3VyZToKLSAgICAgcmV2ZXJ0IHRvIGF1dG9jb25mIDIuNTkgcGVyIGV4aXN0aW5nIHBvbGljeQorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODI2MTAyOiBmcm9tIGpzYWZyYW5lazogc3VwcG9ydCBsb25nZXIKKyAgIGludGVyZmFjZSBuYW1lcyBvbiBsaW51eAogCiAyMDA4LTAyLTEyIDIzOjIzICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvbWliLmM6Ci0gICAgIENIQU5HRVM6IGxpYnNubXA6IFBBVENIOiAxODA3NDg5OiBmaXggaWdub3Jpbmcgb2YgZGlzcGxheSBoaW50cy4KKworICAgQ0hBTkdFUzogbGlic25tcDogUEFUQ0g6IDE4MDc0ODk6IGZpeCBpZ25vcmluZyBvZiBkaXNwbGF5IGhpbnRzLgorCisyMDA4LTAyLTEyIDIzOjE5ICBoYXJkYWtlcgorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYzoKKworICAgCisKKzIwMDgtMDItMTIgMjM6MTYgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2ggMTgyMzQ2NSBmcm9tIGpzYWZyYW5lazogZml4IGljbXAgY2FjaGUKKyAgIHJlZ2lzdHJhdGlvbgorCisyMDA4LTAyLTEyIDIyOjE2ICBoYXJkYWtlcgorCisgICAqICBSRUFETUUuYWdlbnQtbWlicywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jOgorCisgICBORVdTOiBzbm1wZDogUEFUQ0g6IDE4Mjg2MDI6IGZyb20gdGdvaGFkOiBTdXBwb3J0IGlwRGVmYXVsdFRUTAorICAgYW5kIGlwRm9yd2FyZGluZyBTRVRzIG9uIGxpbnV4CiAKIDIwMDgtMDItMTIgMjI6MDkgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg2NjgyMzogZnJvbSBqc2FmcmFuZWs6IHRydW5jYXRlIDMyIGJpdAotICAgICBjb3VudGVyIHZhbHVlcyBvbiA2NCBiaXQgbWFjaGluZXMgdG8gYXZvaWQgYm9ndXMgd2FybmluZ3MuCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg2NjgyMzogZnJvbSBqc2FmcmFuZWs6IHRydW5jYXRlIDMyIGJpdAorICAgY291bnRlciB2YWx1ZXMgb24gNjQgYml0IG1hY2hpbmVzIHRvIGF2b2lkIGJvZ3VzIHdhcm5pbmdzLgogCiAyMDA4LTAyLTEyIDE5OjA1ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4NDk5MDM6IGZyb20ganNhZnJhbmVrOiBkbyBub3Qgc3BhbSBsb2cKLSAgICAgd2l0aCBhc3NlcnRzIHdoZW4gWEVOIGlzIHVzZWQKKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODQ5OTAzOiBmcm9tIGpzYWZyYW5lazogZG8gbm90IHNwYW0gbG9nCisgICB3aXRoIGFzc2VydHMgd2hlbiBYRU4gaXMgdXNlZAogCiAyMDA4LTAyLTEyIDE4OjUwICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvY2FsbGJhY2suYzoKLSAgICAgQ0hBTkdFUzogbGlic25tcDogUEFUQ0g6IDE4NzUwMjI6IGZyb20gc2VtX3ByZzogaW1wcm92ZSBjYWxsYmFjawotICAgICBsb2NraW5nIG1lY2hhbmlzbXMKKworICAgQ0hBTkdFUzogbGlic25tcDogUEFUQ0g6IDE4NzUwMjI6IGZyb20gc2VtX3ByZzogaW1wcm92ZSBjYWxsYmFjaworICAgbG9ja2luZyBtZWNoYW5pc21zCiAKIDIwMDgtMDItMTIgMTc6NDAgIGhhcmRha2VyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTg3OTI2MTogZnJvbSBhbWVzYnVyeTogQWRkIGluIGluYWN0aXZlCi0gICAgIG1lbW9yeSB0byB0aGUgY2FjaGVkIHJlcG9ydCBmb3IgZnJlZWJzZAogCi0yMDA4LTAyLTEyIDE1OjIyICBoYXJkYWtlcgorICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODc5MjYxOiBmcm9tIGFtZXNidXJ5OiBBZGQgaW4gaW5hY3RpdmUKKyAgIG1lbW9yeSB0byB0aGUgY2FjaGVkIHJlcG9ydCBmb3IgZnJlZWJzZAorCisyMDA4LTAyLTEyIDE1OjMyICBoYXJkYWtlcgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaCwgc25tcGxpYi9zbm1wdjMuYzoKKworICAgTkVXUzogbGlic25tcDogUGF0Y2g6IDE4ODIwNjk6IGZyb20gbnNjaHJlbms6IEFkZCBhIGV4YWN0RW5naW5lSUQKKyAgIHRva2VuIGZvciBzcGVjaWZ5aW5nIGFuIGV4YWN0IFNOTVB2MyBlbmdpbmVJRCB0byB1c2UKKworMjAwOC0wMi0xMiAxNToxOCAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKLSAgICAgQ2hhbmdlIHNucHJpbnRmIHByaW50IGxlbmd0aHMgdG8gbGVuLTEgdG8gbGVhdmUgMCBpbiBmaW5hbAotICAgICBwb3NpdGlvbiBmb3IgcHJpbnRpbmcKKworICAgbWlub3IgY2xlYW51cHMgZnJvbSByZXZpZXdpbmcgcGFydHMgb2YgdGhlIGNvZGUKKworMjAwOC0wMi0xMiAxNToxNyAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxODgyNjIxOiBmcm9tIGpzYWZyYW5lazogQWRkIExWTSBzdXBwb3J0IHRvCisgICB0aGUgcGFydGl0aW9uIHRhYmxlCiAKIDIwMDgtMDItMTEgMjI6MjYgIGhhcmRha2VyCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIGZpeCBxdW90ZWQgc3RyaW5ncyBpbiBoZWxwIG91dHB1dAorCisgICBmaXggcXVvdGVkIHN0cmluZ3MgaW4gaGVscCBvdXRwdXQKIAogMjAwOC0wMS0zMCAxNzoyOSAgaGFyZGFrZXIKIAogICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgYWRkZWQgdmFjbV9jb25mIHRvIGV4aXN0aW5nIGNvbmZpZ3VyZSBmaWxlcyAoZm9yIHRyYXBkIHRvbykKKworICAgYWRkZWQgdmFjbV9jb25mIHRvIGV4aXN0aW5nIGNvbmZpZ3VyZSBmaWxlcyAoZm9yIHRyYXBkIHRvbykKIAogMjAwOC0wMS0yMCAwNzo1NSAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODcyMjY2OiBQRVJMQ0MgY2hlY2sgZmFpbHMgZm9yIENDIHdpdGgKLSAgICAgb3B0aW9ucworCisgICBDSEFOR0VTOiBidWlsZDogQlVHOiAxODcyMjY2OiBQRVJMQ0MgY2hlY2sgZmFpbHMgZm9yIENDIHdpdGgKKyAgIG9wdGlvbnMKIAogMjAwOC0wMS0xNyAwMToxMyAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9kZWZhdWx0X21vZHVsZXMuaDoKLSAgICAgZml4IGRlZmF1bHQgbWlicyB0byBpbmNsdWRlIHZhY21fY29uZiB0b28KKworICAgZml4IGRlZmF1bHQgbWlicyB0byBpbmNsdWRlIHZhY21fY29uZiB0b28KIAogMjAwOC0wMS0xNyAwMDowOSAgbWFnZnIKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTgyNjA4ODogZnJvbSBKYW4gU2FmcmFuZWs6IFVzZSB0aGUgcmlnaHQKLSAgICAgaW50ZXJmYWNlIHQgcmVhZCB0aGUgbmV0bWFzaworCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MjYwODg6IGZyb20gSmFuIFNhZnJhbmVrOiBVc2UgdGhlIHJpZ2h0CisgICBpbnRlcmZhY2UgdCByZWFkIHRoZSBuZXRtYXNrCiAKIDIwMDgtMDEtMTYgMjE6NTQgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotICAgICBDSEFOR0VTOiBIYW5kbGUgZGV2aWNlIG5hbWVzIHdpdGggZW1iZWRkZWQgc3BhY2VzIGluCi0gICAgIFVDRC1TTk1QLU1JQjo6ZHNrRGV2aWNlCisKKyAgIENIQU5HRVM6IEhhbmRsZSBkZXZpY2UgbmFtZXMgd2l0aCBlbWJlZGRlZCBzcGFjZXMgaW4KKyAgIFVDRC1TTk1QLU1JQjo6ZHNrRGV2aWNlCiAKIDIwMDgtMDEtMTYgMDA6NDcgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4Mjg4Mzk6IGZyb20ganNhZnJhbmVrIHRvIHByb3ZpZGUgYmV0dGVyCi0gICAgIGhhbmRsaW5nIG9mIGRpc2tzIG1vdW50ZWQgb24gcGF0aHMgd2l0aCBlbWJlZGRlZCBzcGFjZXMKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxODI4ODM5OiBmcm9tIGpzYWZyYW5layB0byBwcm92aWRlIGJldHRlcgorICAgaGFuZGxpbmcgb2YgZGlza3MgbW91bnRlZCBvbiBwYXRocyB3aXRoIGVtYmVkZGVkIHNwYWNlcwogCiAyMDA4LTAxLTE1IDE2OjQ3ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jOgotICAgICBjb3Zlcml0eSBidWcgMjA1OiBkb3VibGUgY2hlY2sgcG9pbnRlciB0aGF0IHNob3VsZCBuZXZlciBiZSBudWxsCisKKyAgIGNvdmVyaXR5IGJ1ZyAyMDU6IGRvdWJsZSBjaGVjayBwb2ludGVyIHRoYXQgc2hvdWxkIG5ldmVyIGJlIG51bGwKKworMjAwOC0wMS0xNCAyMzo1NSAgbWFnZnIKKworICAgKiAgUkVBRE1FLmFnZW50LW1pYnMsIGFnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdXBkYXRlcy5jLCBhZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmg6CisKKyAgIFVwZGF0ZSB0aGUgc25tcCBhbmQgc3lzdGVtIG1pYnMgdG8gYmUgaGFuZGxlciBiYXNlZAorCisyMDA4LTAxLTEzIDAwOjAwICBtYWdmcgorCisgICAqICBNYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMsICAKKyAgICAgICBkb3h5Z2VuLmNvbmYsIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGwsIHNlZHNjcmlwdC5pbiwgICAKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6CisKKyAgIExlc3NlbiB0aGUgbnVtYmVyIG9mIHBsYWNlcyB0aGF0IG5lZWQgdG8gYmUgY2hhbmdlZCBpbiBvcmRlciB0bworICAgZG8gYSByZWxlYXNlLgorICAgQ2hhbmdlIHRvIHVzZSB0aGUgY29uZmlndXJlIHZlcnNpb24gbnVtYmVyIGFzIHRoZSBwYWNrYWdlIHZlcnNpb24KKyAgIG51bWJlci4KIAogMjAwOC0wMS0wOSAyMTo1OCAgbWFnZnIKIAogICAgKiBzbm1wbGliL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYzoKLSAgICAgRGVsZXRlIHVudXNlZCBzdGF0aWMgZnVuY3Rpb25zCisKKyAgIERlbGV0ZSB1bnVzZWQgc3RhdGljIGZ1bmN0aW9ucwogCiAyMDA4LTAxLTA2IDEzOjAxICBtYWdmcgogCiAgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKLSAgICAgTWFrZSBlcnJvcl9zdHJpbmcgcHJpdmF0ZSBhbmQgcmVhZG9ubHkKKworICAgTWFrZSBlcnJvcl9zdHJpbmcgcHJpdmF0ZSBhbmQgcmVhZG9ubHkKIAogMjAwNy0xMi0yMiAxOToyMiAgZHRzMTIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKLSAgICAgQ0hBTkdFUzogcGVybDogQlVHOiAxODI2MTc0OiBDaGVjayBmb3IgYnVmZmVyIG92ZXJmbG93IHdoZW4KLSAgICAgcHJpbnRpbmcgdmFsdWVzLgorCisgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE4MjYxNzQ6IENoZWNrIGZvciBidWZmZXIgb3ZlcmZsb3cgd2hlbgorICAgcHJpbnRpbmcgdmFsdWVzLgogCiAyMDA3LTEyLTIxIDIzOjE5ICBkdHMxMgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnBtOgotICAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE3NDc3MzM6IE1vcmUgcm9idXN0IGhhbmRsaW5nIG9mIHVuZGVmaW5lZAotICAgICB2YWx1ZXMuCi0gICAgIFBhdGNoIHN1cHBsaWVkIGJ5IE1hdHRpIExpbm5hbnZ1b3JpCisKKyAgIENIQU5HRVM6IHBlcmw6IEJVRzogMTc0NzczMzogTW9yZSByb2J1c3QgaGFuZGxpbmcgb2YgdW5kZWZpbmVkCisgICB2YWx1ZXMuCisgICBQYXRjaCBzdXBwbGllZCBieSBNYXR0aSBMaW5uYW52dW9yaQogCiAyMDA3LTEyLTIxIDIxOjMzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NDgyMDY6IFByb3RlY3QgYWdhaW5zdCBmYWlsdXJlcyB0byBvcGVuCi0gICAgIC9ldGMvbXRhYiAob3IgZXF1aXYpCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NDgyMDY6IFByb3RlY3QgYWdhaW5zdCBmYWlsdXJlcyB0byBvcGVuCisgICAvZXRjL210YWIgKG9yIGVxdWl2KQogCiAyMDA3LTEyLTIxIDE4OjQyICBkdHMxMgogCiAgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKLSAgICAgQnJpbmcgb3JkZXIgb2YgYWdlbnQgbGlicmFyeSBsaW5raW5nIGludG8gbGluZSB3aXRoIGFnZW50Ci0gICAgIE1ha2VmaWxlLgotICAgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFN0ZXZlIE1jQ2FydGh5LgotICAgICBRbjogU2hvdWxkIDUuMi54IGFuZCA1LjMueCBhbHNvIHVzZSB0aGUgc2FtZSBvcmRlcj8KLSAgICAgKGZvciBib3RoIGFnZW50IE1ha2VmaWxlIGFuZCBuZXQtc25tcC1jb25maWcpCisKKyAgIEJyaW5nIG9yZGVyIG9mIGFnZW50IGxpYnJhcnkgbGlua2luZyBpbnRvIGxpbmUgd2l0aCBhZ2VudAorICAgTWFrZWZpbGUuCisgICBQcm9ibGVtIHJlcG9ydGVkIGJ5IFN0ZXZlIE1jQ2FydGh5LgorICAgUW46IFNob3VsZCA1LjIueCBhbmQgNS4zLnggYWxzbyB1c2UgdGhlIHNhbWUgb3JkZXI/CisgICAoZm9yIGJvdGggYWdlbnQgTWFrZWZpbGUgYW5kIG5ldC1zbm1wLWNvbmZpZykKIAogMjAwNy0xMi0yMSAxMzoxMSAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwZF9sb2cuYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTgwMjgzMzogRW5zdXJlIHNubXB0cmFwZCBidWlsZHMgd2l0aAotICAgICAtLWRpc2FibGUtc25tcHYxLzJjCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDE4MDI4MzM6IEVuc3VyZSBzbm1wdHJhcGQgYnVpbGRzIHdpdGgKKyAgIC0tZGlzYWJsZS1zbm1wdjEvMmMKIAogMjAwNy0xMi0yMCAxNjoyNiAgZHRzMTIKIAogICAgKiBwZXJsL1NOTVAvU05NUC54czoKLSAgICAgQ0hBTkdFUzogcGVybDogQlVHOiAxODM0NTM5OiBDb25zaXN0ZW50IGhhbmRsaW5nIG9mIE9JRCBwYXJzaW5nLgotICAgICBBcHBsaWVzIHBhdGNoICMxODM0OTgzLCBwcm92aWRlZCBieSBEbWl0cnkgS2FyYXNpaworCisgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE4MzQ1Mzk6IENvbnNpc3RlbnQgaGFuZGxpbmcgb2YgT0lEIHBhcnNpbmcuCisgICBBcHBsaWVzIHBhdGNoICMxODM0OTgzLCBwcm92aWRlZCBieSBEbWl0cnkgS2FyYXNpaworCisyMDA3LTEyLTIwIDE2OjA1ICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgTW9yZSBpbnRlcm5hbCBxdWVyeSBkZWJ1Z2dpbmcgb3V0cHV0LgogCiAyMDA3LTEyLTIwIDE0OjIwICBkdHMxMgogCiAgICAqIGFnZW50L2hlbHBlcnMvd2F0Y2hlci5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxODIyMzYwOiBGaXggc3BpbmxvY2sgaGVscGVyIGVycm9yIGhhbmRsaW5nLgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxODIyMzYwOiBGaXggc3BpbmxvY2sgaGVscGVyIGVycm9yIGhhbmRsaW5nLgogCiAyMDA3LTEyLTIwIDE0OjE4ICBkdHMxMgogCiAgICAqIHNubXBsaWIvYXNuMS5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE3OTU4NDA6IFNpZ25lZCAzMi1iaXQgdHJ1bmNhdGlvbiBsb2dnZWQKLSAgICAgYXMgZGVidWcgbWVzc2FnZSByYXRoZXIgdGhlbiBlcnJvci4KKworICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiAxNzk1ODQwOiBTaWduZWQgMzItYml0IHRydW5jYXRpb24gbG9nZ2VkCisgICBhcyBkZWJ1ZyBtZXNzYWdlIHJhdGhlciB0aGVuIGVycm9yLgogCiAyMDA3LTEyLTIwIDE0OjE0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzkyODkwOiBpbmNsdWRlIENJRlMgbW91bnRzIHdoZW4gc2tpcHBpbmcKLSAgICAgcmVtb3RlIGZpbGVzeXN0ZW1zCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3OTI4OTA6IGluY2x1ZGUgQ0lGUyBtb3VudHMgd2hlbiBza2lwcGluZworICAgcmVtb3RlIGZpbGVzeXN0ZW1zCiAKIDIwMDctMTItMjAgMTQ6MTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzcxMjIxOiBSZXRhaW4gaWZMYXN0Q2hhbmdlIGluZm9ybWF0aW9uIG9uCi0gICAgIGRhdGEgcmVsb2FkLgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzcxMjIxOiBSZXRhaW4gaWZMYXN0Q2hhbmdlIGluZm9ybWF0aW9uIG9uCisgICBkYXRhIHJlbG9hZC4KIAogMjAwNy0xMi0yMCAxNDowOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE3NTgyMTI6IEhhbmRsaW5nIG1pc3NpbmcgdmFyaWFibGUgdHlwZXMKLSAgICAgKElwQWRkcmVzcyxDb3VudGVyLE9wYXF1ZSkKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc1ODIxMjogSGFuZGxpbmcgbWlzc2luZyB2YXJpYWJsZSB0eXBlcworICAgKElwQWRkcmVzcyxDb3VudGVyLE9wYXF1ZSkKIAogMjAwNy0xMi0xOSAyMjozOSAgbWFnZnIKIAotICAgKiBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLAotICAgICBzbm1wbGliL2NvbnRhaW5lcl9udWxsLmMsIHNubXBsaWIvZGF0YV9saXN0LmMsCi0gICAgIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLSAgICAgQ29ycmVjdCBkb3h5Z2VuIHdhcm5pbmdzCisgICAqICBzbm1wbGliL2NvbnRhaW5lci5jLCBzbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jLCAgIAorICAgICAgc25tcGxpYi9jb250YWluZXJfbnVsbC5jLCBzbm1wbGliL2RhdGFfbGlzdC5jLCAgIAorICAgICAgc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDb3JyZWN0IGRveHlnZW4gd2FybmluZ3MKIAogMjAwNy0xMi0xOSAyMjozMSAgbWFnZnIKIAotICAgKiB0ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcsIHRlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxNjBzbm1wdjJjYnVsa2dldCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE2c25tcHYyY2dldGZhaWwsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDE4c25tcHYxdG92MmNnZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoLCB0ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUywKLSAgICAgdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwKLSAgICAgdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAsIHRlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0sCi0gICAgIHRlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwsIHRlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cCwgdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwsIHRlc3RpbmcvdGVzdHMvVDEzMHNubXB2MXZhY21nZXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0LAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbCwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdSwKLSAgICAgdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrLCB0ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcCwgdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQsCi0gICAgIHRlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsOgotICAgICBVc2UgTkVUU05NUF8tcHJlZml4ZWQgc3ltYm9scyB3aGVuIGRlY2lkaW5nIHdoYXQgdGVzdHMgdG8gcnVuIGFzCi0gICAgIHRoZSBjb21wYXQgc3ltYm9scyBhcmVuJ3QgZGVmaW5lZC4KKyAgICogIHRlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZywgdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldCwgdGVzdGluZy90ZXN0cy9UMDE1c25tcHYyY2dldG5leHQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gsIHRlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENSwgIAorICAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENUFFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyM3NubXB2M2dldE1ENURFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAyNXNubXB2M2dldFNIQURFUywgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDAzMHNubXB2M3VzZXJjcmVhdGlvbiwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1MXNubXB2MmN0cmFwLCB0ZXN0aW5nL3Rlc3RzL1QwNTJzbm1wdjJjaW5mb3JtLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDU4YWdlbnRhdXRodHJhcCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSwgdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsLCB0ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDEwMGFnZW50aHVwLCB0ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQsIHRlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTIycHJveHlzZXRmYWlsLCB0ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0LCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQsICAgCisgICAgICB0ZXN0aW5nL3Rlc3RzL1QxNDBzbm1wdjF2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbCwgICAKKyAgICAgIHRlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrLCB0ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lLCAgCisgICAgICAgdGVzdGluZy90ZXN0cy9UMTUzc29sYXJpc3N3YXAsIHRlc3RpbmcvdGVzdHMvVDE2MHNubXBuZXRzdGF0LCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGw6CisKKyAgIFVzZSBORVRTTk1QXy1wcmVmaXhlZCBzeW1ib2xzIHdoZW4gZGVjaWRpbmcgd2hhdCB0ZXN0cyB0byBydW4gYXMKKyAgIHRoZSBjb21wYXQgc3ltYm9scyBhcmVuJ3QgZGVmaW5lZC4KIAogMjAwNy0xMi0xOSAyMjowNiAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIEJVRyAxODMxNTY4OiBzdHJkdXAgbWlnaHQgZmFpbCBhbmQgcmV0dXJuIE5VTEwgLSB0YWtlIGNhcmUgb2YgaXQKLSAgICAgaW4gdGhpcyBjYXNlIGF0IGxlYXN0LgorCisgICBCVUcgMTgzMTU2ODogc3RyZHVwIG1pZ2h0IGZhaWwgYW5kIHJldHVybiBOVUxMIC0gdGFrZSBjYXJlIG9mIGl0CisgICBpbiB0aGlzIGNhc2UgYXQgbGVhc3QuCiAKIDIwMDctMTItMTkgMjE6NDkgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKLSAgICAgQlVHIDE4MjQ4ODM6IFJlbW92ZSBtZW1vcnkgbGVhaworCisgICBCVUcgMTgyNDg4MzogUmVtb3ZlIG1lbW9yeSBsZWFrCiAKIDIwMDctMTItMTkgMjA6NDYgIG1hZ2ZyCiAKICAgICogYWdlbnQvaGVscGVycy93YXRjaGVyLmM6Ci0gICAgIENIQU5HRVM6IEJVRzogMTg1MTA0NzogRG8gbm90IHRyeSB0byBkbyBtb3JlIGhhbmRsaW5nIG9mIGEgdmFsdWUKLSAgICAgb25jZSBpdCBpcyBmb3VuZCB0byBiZSBjb3JydXB0IGJ5IHRoZSB3YXRjaGVyIGhlbHBlciwgdGh1cwotICAgICBhdm9pZGluZyBjb2RlIHRoYXQgY291bnRzIG9uIGdldHRpbmcgdGhlIHJpZ2h0IHR5cGUuIFRoaXMgYnVnIHdhcwotICAgICBmb3VuZCBieSBDaGFybGllIE1pbGxlciwgSW5kZXBlbmRlbnQgU2VjdXJpdHkgRXZhbHVhdG9ycy4KKworICAgQ0hBTkdFUzogQlVHOiAxODUxMDQ3OiBEbyBub3QgdHJ5IHRvIGRvIG1vcmUgaGFuZGxpbmcgb2YgYSB2YWx1ZQorICAgb25jZSBpdCBpcyBmb3VuZCB0byBiZSBjb3JydXB0IGJ5IHRoZSB3YXRjaGVyIGhlbHBlciwgdGh1cworICAgYXZvaWRpbmcgY29kZSB0aGF0IGNvdW50cyBvbiBnZXR0aW5nIHRoZSByaWdodCB0eXBlLiBUaGlzIGJ1ZyB3YXMKKyAgIGZvdW5kIGJ5IENoYXJsaWUgTWlsbGVyLCBJbmRlcGVuZGVudCBTZWN1cml0eSBFdmFsdWF0b3JzLgogCiAyMDA3LTExLTI3IDA5OjU2ICBkdHMxMgogCiAgICAqIG1hbi9zbm1wdHJhcGQuOC5kZWY6Ci0gICAgIENsYXJpZnkgdXNlIG9mIHRoZSAtQSAobG9nIGFwcGVuZCkgb3B0aW9uLgorCisgICBDbGFyaWZ5IHVzZSBvZiB0aGUgLUEgKGxvZyBhcHBlbmQpIG9wdGlvbi4KIAogMjAwNy0xMS0yMiAxNTo0MiAgcnN0b3J5CiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jLCBhZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmM6Ci0gICAgIGNoZWNrIHJlcXVlc3QsIG5vdCByZXF1ZXN0cy4gcmVwb3J0ZWQgYnkgdWxpbSBvbiBpcmMKIAotMjAwNy0xMS0yMiAxNToxNiAgcnN0b3J5CisgICBjaGVjayByZXF1ZXN0LCBub3QgcmVxdWVzdHMuIHJlcG9ydGVkIGJ5IHVsaW0gb24gaXJjCisKKzIwMDctMTEtMjIgMTU6MTcgIHJzdG9yeQogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jOgotICAgICBjaGVjayByZXF1ZXN0LCBub3QgcmVxdWVzdHMuIHJlcG9ydGVkIGJ5IHVsaW0gb24gaXJjCisKKyAgIGNoZWNrIHJlcXVlc3QsIG5vdCByZXF1ZXN0cy4gcmVwb3J0ZWQgYnkgdWxpbSBvbiBpcmMKIAogMjAwNy0xMS0xOSAyMTozNCAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYzoKLSAgICAgQ0hBTkdFUzogU29sYXJpczogUEFUQ0g6IDE4MzQ2OTk6IGZyb20gYXBlcnNzb246IEZpeCAxODMzMjk0OgotICAgICBETFBJIHByb2JsZW1zIG9uIFNvbGFyaXMgMi42CisKKyAgIENIQU5HRVM6IFNvbGFyaXM6IFBBVENIOiAxODM0Njk5OiBmcm9tIGFwZXJzc29uOiBGaXggMTgzMzI5NDoKKyAgIERMUEkgcHJvYmxlbXMgb24gU29sYXJpcyAyLjYKKworMjAwNy0xMS0xNyAxNjoyNiAgbWFnZnIKKworICAgKiAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBkOiBVc2UgdGhlIHdvcmtlciBoZWxwZXJzIGZyb20gdGhlCisgICByZWdpc3Rlcl8qX2luc3RhbmNlIGhlbHBlcnMgYW5kIHNjaGVkdWxlIHRoZSBpbnN0YW5jZSBoZWxwZXJzIGZvcgorICAgcmVtb3ZhbCBpbiA1LjYKKworMjAwNy0xMS0xNCAxMjoyMSAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmg6CisKKyAgIFN1cHBvcnQgdjMgbG1zZW5zb3JzIEFQSS4KKworMjAwNy0xMS0xNCAxMjoxOSAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYzoKKworICAgRml4IG1pc2xlYWRpbmcgZGVidWcgb3V0cHV0IG1lc3NhZ2UuCisKKzIwMDctMTEtMTMgMTM6NTkgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvZHVtbXlfc2Vuc29ycy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjIuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgIAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oOgorCisgICBQcmVsaW1pbmFyeSByZS13b3JraW5nIG9mIHRoZSBMTS1TRU5TT1JTLU1JQiwgdG8gc2VwYXJhdGUgb3V0CisgICB0aGUgc2Vuc29yIGhhcmR3YXJlIHByb2Nlc3NpbmcgZnJvbSB0aGUgTUlCIHRhYmxlcyB0aGVtc2VsdmVzLgogCiAyMDA3LTExLTA4IDIzOjE3ICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLAotICAgICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOgotICAgICBDSEFOR0VTOiBTb2xhcmlzOiBQQVRDSDogMTgyNDE5Njoge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0KLSAgICAgcmVwb3J0ZWQgaW5jb3JyZWN0bHkKLSAgICAgUGF0Y2ggc3VwcGxpZWQgYnkgQW5kZXJzIFBlcnNzb24uIEZpeGVzIEJ1Z3MgMTgyMjI3NSBhbmQgMTgxOTE4OS4KKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYywgYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jOgorCisgICBDSEFOR0VTOiBTb2xhcmlzOiBQQVRDSDogMTgyNDE5Njoge2lmT3BlclN0YXR1cyxpcEFkRW50SWZJbmRleH0KKyAgIHJlcG9ydGVkIGluY29ycmVjdGx5CisgICBQYXRjaCBzdXBwbGllZCBieSBBbmRlcnMgUGVyc3Nvbi4gRml4ZXMgQnVncyAxODIyMjc1IGFuZCAxODE5MTg5LgorCisyMDA3LTEwLTI2IDIxOjIyICBtYWdmcgorCisgICAqICBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYywgYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmg6CisKKyAgIE5FV1M6IHNubXBkOiBBZGRlZCBzdXBwb3J0IGZvciBhIHVzZXIgcHJvdmlkZWQgbGVuZ3RoIHZhcmlhYmxlCisgICBhbmQgQyBzdHJpbmcgdmFsdWVzIHRvIHRoZSB3YXRjaGVyIGhlbHBlci4KKworMjAwNy0xMC0xNiAyMjozOSAgbWFnZnIKKworICAgKiAgYWdlbnQvYWdlbnRfdHJhcC5jLCBhZ2VudC9oZWxwZXJzL2RlYnVnX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYywgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCBzbm1wbGliL2RlZmF1bHRfc3RvcmUuYywgICAKKyAgICAgIHNubXBsaWIvc25tcFNURERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBEb21haW4uYywgICAKKyAgICAgIHNubXBsaWIvc25tcF9jbGllbnQuYzoKKworICAgVXNlICVwIHRvIHByaW50IHBvaW50ZXJzLiBEbyBub3QgdXNlICVwIHRvIHByaW50IG51bWJlcnMuCisKKzIwMDctMTAtMTYgMDc6MzEgIG1hZ2ZyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBNYWtlIHRoZSBsaWJyYXJ5IGJ1aWxkYWJsZSBhcyBDIGFnYWluLgogCiAyMDA3LTEwLTE2IDA3OjE3ICBtYWdmcgogCi0gICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy9zY2FsYXIuYywKLSAgICAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6Ci0gICAgIENIQU5HRVM6IG1pc2M6IGF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggdG9vIG1hbnkKLSAgICAgYXJndW1lbnRzLgorICAgKiAgYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jLCBhZ2VudC9oZWxwZXJzL3NjYWxhci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy93YXRjaGVyLmMsIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBDSEFOR0VTOiBtaXNjOiBhdm9pZCBjYWxsaW5nIGRlYnVnIG1hY3JvcyB3aXRoIHRvbyBtYW55CisgICBhcmd1bWVudHMuCiAKIDIwMDctMTAtMTYgMDY6MTggIG1hZ2ZyCiAKLSAgICogc25tcGxpYi9zbm1wX3NlcnZpY2UuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgotICAgICBNYWtlIHRoZSBsaWJyYXJ5IGJ1aWxkYWJsZSBhcyBDKysgYWdhaW4uCisgICAqICBzbm1wbGliL3NubXBfYXBpLmMsIHNubXBsaWIvc25tcF9zZXJ2aWNlLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfdHJhbnNwb3J0LmM6CisKKyAgIE1ha2UgdGhlIGxpYnJhcnkgYnVpbGRhYmxlIGFzIEMrKyBhZ2Fpbi4KKworMjAwNy0xMC0xNSAyMDo1MiAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgsICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBkZWNsYXJlIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0OyBpbmNsdWRlIGhlYWRlciBmb3IgaXQKKyAgIGFzIG5lZWRlZAogCiAyMDA3LTEwLTE1IDIwOjM5ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYzoKLSAgICAgQ29udmVydCBhbiBpbmZpbml0ZSBsb29wIHRvIGEgZmluaXRlIG9uZS4KLSAgICAgUmVtb3ZlIGFuIHVudXNlZCB2YXJpYWJsZS4KKworICAgQ29udmVydCBhbiBpbmZpbml0ZSBsb29wIHRvIGEgZmluaXRlIG9uZS4KKyAgIFJlbW92ZSBhbiB1bnVzZWQgdmFyaWFibGUuCiAKIDIwMDctMTAtMTQgMjI6MTAgIG1hZ2ZyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYzoKLSAgICAgQ0hBTkdFUzogbWlzYzogQXZvaWQgY2FsbGluZyBkZWJ1ZyBtYWNyb3Mgd2l0aCB0b28gZmV3IGFyZ3VtZW50cy4KKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmM6CisKKyAgIENIQU5HRVM6IG1pc2M6IEF2b2lkIGNhbGxpbmcgZGVidWcgbWFjcm9zIHdpdGggdG9vIGZldyBhcmd1bWVudHMuCiAKIDIwMDctMTAtMTQgMjA6NTEgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxODExNDY5OiByZWFkX2NvbmZpZ19maWxlc19pbl9wYXRoKCkKLSAgICAgcmVhZHMgcGFzdCBtYWxsb2MnZCBidWZmZXIKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE4MTE0Njk6IHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoKQorICAgcmVhZHMgcGFzdCBtYWxsb2MnZCBidWZmZXIKIAogMjAwNy0xMC0xNCAyMDo0MSAgdGFuZGVycwogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgotICAgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTgxMTQ2MzogcGVybCBhc3luYyBjYWxsYmFjayBjb3JlZHVtcAotICAgICBDSEFOR0VTOiBwZXJsOiBCVUc6IDE2MDYwNjI6IHBlcmwgYnVsa3dhbGsgKGFzeW5jKSBjb3JlZHVtcAorCisgICBDSEFOR0VTOiBwZXJsOiBQQVRDSDogMTgxMTQ2MzogcGVybCBhc3luYyBjYWxsYmFjayBjb3JlZHVtcAorICAgQ0hBTkdFUzogcGVybDogQlVHOiAxNjA2MDYyOiBwZXJsIGJ1bGt3YWxrIChhc3luYykgY29yZWR1bXAKIAogMjAwNy0xMC0xNCAxOTowNyAgdGFuZGVycwogCiAgICAqIHNubXBsaWIvc25tcF9sb2dnaW5nLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxODA2MzM2OiBmaXggLUxTIG9wdGlvbiBwYXJzaW5nCisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxODA2MzM2OiBmaXggLUxTIG9wdGlvbiBwYXJzaW5nCiAKIDIwMDctMTAtMTQgMTI6MTIgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jOgotICAgICBmaXggY29tbWVudAorCisgICBmaXggY29tbWVudAogCiAyMDA3LTEwLTEzIDIzOjI4ICB0YW5kZXJzCiAKICAgICogdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQ6Ci0gICAgIENIQU5HRVM6IHRlc3Q6IGVuaGFuY2Ugc25tcG5ldHN0YXQgdGVzdCB0byBjaGVjayB0Y3BUYWJsZSBpbiBUQ1AKLSAgICAgbW9kZQorCisgICBDSEFOR0VTOiB0ZXN0OiBlbmhhbmNlIHNubXBuZXRzdGF0IHRlc3QgdG8gY2hlY2sgdGNwVGFibGUgaW4gVENQCisgICBtb2RlCiAKIDIwMDctMTAtMTMgMjI6MjggIHRhbmRlcnMKIAotICAgKiBhZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jLAotICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmg6Ci0gICAgIENIQU5HRVM6IFNvbGFyaXM6IEJVRzogMTgxMDgxNDogdGNwVGFibGUgbWlzc2luZyBlbnRyaWVzIGFuZAotICAgICB3cm9uZyBwb3J0cworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaDoKKworICAgQ0hBTkdFUzogU29sYXJpczogQlVHOiAxODEwODE0OiB0Y3BUYWJsZSBtaXNzaW5nIGVudHJpZXMgYW5kCisgICB3cm9uZyBwb3J0cwogCiAyMDA3LTEwLTEyIDIxOjQ2ICB0YW5kZXJzCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oOgotICAgICBDSEFOR0VTOiBTb2xhcmlzOiAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UIHRvIHN1cHBvcnQgU29sYXJpcwotICAgICAxMFU0KworCisgICBDSEFOR0VTOiBTb2xhcmlzOiAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UIHRvIHN1cHBvcnQgU29sYXJpcworICAgMTBVNCsKIAogMjAwNy0xMC0xMSAyMDo0NiAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IGxlYWsgbWVtb3J5IHdoZW5ldmVyIGFuIHVkcCBhZGRyZXNzIGlzCi0gICAgIGZvcm1hdHRlZC4KKworICAgQ0hBTkdFUzogc25tcGxpYjogRG8gbm90IGxlYWsgbWVtb3J5IHdoZW5ldmVyIGFuIHVkcCBhZGRyZXNzIGlzCisgICBmb3JtYXR0ZWQuCisKKzIwMDctMTAtMDMgMDE6MDIgIGFsZXhfYgorCisgICAqICB3aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQsIHdpbjMyL2Rpc3QvUkVBRE1FLnR4dCwgICAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL0FkZDJQYXRoLm5zaSwgICAKKyAgICAgIHdpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaToKKworICAgLUZpeCBmb3IgYnVnIDE3Njg3OTcuIE5TSVMgSW5zdGFsbGVyIHNjcmlwdCBub3cgd2FybnMgdGhlIHVzZXIgaWYKKyAgIHRoZSBQQVRICisgICBpcyA+IDEwMjQgYXMgTlNJUyBjYW4gbm90IGhhbmRsZSB2YXJpYWJsZXMgbGFyZ2VyIHRoYW4gMTAyNC4KKyAgIC1VcGRhdGVzIHRvIGJ1aWxkIGluc3RydWN0aW9ucy4KIAogMjAwNy0wOS0zMCAyMDo1OSAgbWFnZnIKIAotICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jLAotICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgsIHNubXBsaWIvc25tcF9hcGkuYywKLSAgICAgc25tcGxpYi9zbm1wX3NlcnZpY2UuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgotICAgICBDSEFOR0VTOiBCVUc6IDE4MDE4MzU6IEFkZGVkIHRoZSBhYmlsaXR5IHRvIGhhdmUgbXVsdGlwbGUgZGVmYXVsdAotICAgICB0cmFuc3BvcnRzIGZvciBhbiBhcHBsaWNhdGlvbi4gT24gb3BlbiB0aGUgZGlmZmVyZW50IHRyYW5zcG9ydHMKLSAgICAgd2lsbCBiZSB0cmllZCBpbiBvcmRlci4gQXMgYSBjb25zZXF1ZW5jZSBzbm1wIGFuZCBzbm1wdHJhcCBub3cKLSAgICAgd2lsbCB0cnkgZmlyc3QgdWRwIGFuZCB0aGVuIHVkcDYgYW5kIGFnZW50eCB3aWwgdHJ5IGZpcnN0IHVuaXgKLSAgICAgYW5kIHRoZW4gdGNwLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaCwgc25tcGxpYi9zbm1wX2FwaS5jLCAgIAorICAgICAgc25tcGxpYi9zbm1wX3NlcnZpY2UuYywgc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jOgorCisgICBDSEFOR0VTOiBCVUc6IDE4MDE4MzU6IEFkZGVkIHRoZSBhYmlsaXR5IHRvIGhhdmUgbXVsdGlwbGUgZGVmYXVsdAorICAgdHJhbnNwb3J0cyBmb3IgYW4gYXBwbGljYXRpb24uIE9uIG9wZW4gdGhlIGRpZmZlcmVudCB0cmFuc3BvcnRzCisgICB3aWxsIGJlIHRyaWVkIGluIG9yZGVyLiBBcyBhIGNvbnNlcXVlbmNlIHNubXAgYW5kIHNubXB0cmFwIG5vdworICAgd2lsbCB0cnkgZmlyc3QgdWRwIGFuZCB0aGVuIHVkcDYgYW5kIGFnZW50eCB3aWwgdHJ5IGZpcnN0IHVuaXgKKyAgIGFuZCB0aGVuIHRjcC4KIAogMjAwNy0wOS0yOSAxMzoxMCAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IERvIG5vdCB0cnkgdG8gbG9vayB1cCBlbXB0eSBzdHJpbmdzIGFzCi0gICAgIGhvc3RuYW1lcyBmb3IgSVB2NgotICAgICBBZGRpdGluYWxseSwgcHJpbnQgd2hhdCBzdHJpbmcgZmlsZWQgdG8gcmVzb2x2ZSB1c2luZyBnZXRhZGRyaW5mbwotICAgICBmb3IgSVB2NgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBEbyBub3QgdHJ5IHRvIGxvb2sgdXAgZW1wdHkgc3RyaW5ncyBhcworICAgaG9zdG5hbWVzIGZvciBJUHY2CisgICBBZGRpdGluYWxseSwgcHJpbnQgd2hhdCBzdHJpbmcgZmlsZWQgdG8gcmVzb2x2ZSB1c2luZyBnZXRhZGRyaW5mbworICAgZm9yIElQdjYKKworMjAwNy0wOS0yOSAwNjoyNiAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE4MDQ0NDU6IGZyb20gYXBlcnNzb246IEhpZ2ggb3JkZXIgYml0cyBvZgorICAgSENJbk9jdGV0cyBub3Qgc2V0IG9uIFNvbGFyaXMKIAogMjAwNy0wOS0yNCAyMDo0MyAgaGFyZGFrZXIKIAogICAgKiBDT1BZSU5HOgotICAgICB5ZWFyIHVwZGF0ZQorCisgICB5ZWFyIHVwZGF0ZQorCisyMDA3LTA5LTIzIDA2OjAzICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9kaXJfdXRpbHMuYzoKKworICAgZml4ICNlbGlmCisKKzIwMDctMDktMjEgMjI6MDQgIHRhbmRlcnMKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBzbm1wbGliL2Rpcl91dGlscy5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBhdHRlbXB0IHRvIGZpeCBidWlsZCBmb3IgU29sYXJpcy9BSVgvSFAtVVgKKyAgIGJyb2tlbiBieSByMTY2ODQKIAogMjAwNy0wOS0yMCAyMTo1NSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzQ2ODMxOiBmcm9tIGN1bm5pamQ6IGZpeCBwcm9jZXNzCi0gICAgIGNoZWNraW5nIHJhY2UKLSAgICAgY29uZGl0aW9uIHVuZGVyIExpbnV4IGFuZCBwbGF0Zm9ybSAjaWZkZWZzCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc0NjgzMTogZnJvbSBjdW5uaWpkOiBmaXggcHJvY2VzcworICAgY2hlY2tpbmcgcmFjZQorICAgY29uZGl0aW9uIHVuZGVyIExpbnV4IGFuZCBwbGF0Zm9ybSAjaWZkZWZzCiAKIDIwMDctMDktMTkgMjE6MDkgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogQlVHOiBDb3Zlcml0eSAjMTgzOiBmaXggbWVtb3J5IGxlYWsgaWYKLSAgICAgSVBfUEtUSU5GTyBmYWlscworCisgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IENvdmVyaXR5ICMxODM6IGZpeCBtZW1vcnkgbGVhayBpZgorICAgSVBfUEtUSU5GTyBmYWlscworCisyMDA3LTA5LTE5IDE5OjU3ICBkdHMxMgorCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIEZpeCBtaXNudW1iZXJpbmdzIG9mIHN0ZXBzLgorICAgSXQgaXMgKnNvKiBkaWZmaWN1bHQgdG8gZmluZCBwcm9wZXJseSBudW1lcmF0ZSBzdGFmZiB0aGVzZQorICAgZGF5cy4uLi4KIAogMjAwNy0wOS0xNiAwOTo1MSAgbWFnZnIKIAogICAgKiBsb2NhbC9taWIyYy11cGRhdGU6Ci0gICAgIFJlbW92ZSBiYXNoaXNtcy4gVGhpcyBpcyBuZXRic2QgcGF0Y2gtZXQgZnJvbSBidWcgMTc0NTQwNC4KKworICAgUmVtb3ZlIGJhc2hpc21zLiBUaGlzIGlzIG5ldGJzZCBwYXRjaC1ldCBmcm9tIGJ1ZyAxNzQ1NDA0LgogCiAyMDA3LTA5LTE2IDA5OjQ1ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmM6Ci0gICAgIFVzZSBjb25zdCBjaGFyKiBmb3IgdGVtcG9yYXJ5IGNvbnN0YW50IHN0cmluZyB2YXJpYWJsZS4gVGhpcyBpcwotICAgICBuZXRic2QgcGF0Y2gtZWEgZnJvbSBidWcgMTc0NTQwNC4KKworICAgVXNlIGNvbnN0IGNoYXIqIGZvciB0ZW1wb3JhcnkgY29uc3RhbnQgc3RyaW5nIHZhcmlhYmxlLiBUaGlzIGlzCisgICBuZXRic2QgcGF0Y2gtZWEgZnJvbSBidWcgMTc0NTQwNC4KIAogMjAwNy0wOS0xNiAwOTo0MCAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIFVzZSB0aGUgbmF0dXJhbCB0eXBlIG9mIGluX2FkZHJfdCdzIGZvciBjb21wYXJpc2lvbnMuIFRoaXMgaXMKLSAgICAgbmV0YnNkIHBhdGNoLWVhIGZyb20gYnVnIDE3NDU0MDQuCisKKyAgIFVzZSB0aGUgbmF0dXJhbCB0eXBlIG9mIGluX2FkZHJfdCdzIGZvciBjb21wYXJpc2lvbnMuIFRoaXMgaXMKKyAgIG5ldGJzZCBwYXRjaC1lYSBmcm9tIGJ1ZyAxNzQ1NDA0LgogCiAyMDA3LTA5LTE2IDA3OjA2ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYzoKLSAgICAgQ0hBTkdFUzogQlVHOiAxNzkzNTQ1OiBUYWtlIHRoZSBuYW1lIGZyb20gdGhlIHNvY2thZGRyX3VuIGluCi0gICAgIG9yZGVyIHRvIGF2b2lkIHRyYW5zcG9ydCBzcGVjaWZpZXJzIGFuZCBvdGhlciBkZWNvcmF0aW9ucy4KIAotMjAwNy0wOS0xNCAxNDo0NCAgZHRzMTIKKyAgIENIQU5HRVM6IEJVRzogMTc5MzU0NTogVGFrZSB0aGUgbmFtZSBmcm9tIHRoZSBzb2NrYWRkcl91biBpbgorICAgb3JkZXIgdG8gYXZvaWQgdHJhbnNwb3J0IHNwZWNpZmllcnMgYW5kIG90aGVyIGRlY29yYXRpb25zLgorCisyMDA3LTA5LTE0IDEzOjE4ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gaGVhZGVyIGZvciBzd3J1biByZXdyaXRlCisKKzIwMDctMDktMTQgMTM6MTYgIHJzdG9yeQorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBhZGQgdXRpbGl0eSBtYWNybworICAgLSBhY3RpdmF0ZSBuZXcgaG9zdCByZXNvdXJjZSByZXdyaXRlcworCisyMDA3LTA5LTE0IDEzOjEzICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9ob3N0Lmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gY29uZmlnX3JlcXVpcmUgZm9yIG5ldyByZXdyaXRlcywgaWYgZW5hYmxlZAorCisyMDA3LTA5LTE0IDEzOjExICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmMsIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jLCAgCisgICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYzoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBhZGQvZml4IGRpc2svcGFydGl0aW9uIHRhYmxlcyBvbiBkYXJ3aW4KKworMjAwNy0wOS0xNCAxMzowOSAgcnN0b3J5CisKKyAgICogIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXSW5zdGFsbGVkVGFibGUuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gYWRkIGhyU1dJbnN0YWxsZWRUYWJsZSBmb3IgZGFyd2luCisKKzIwMDctMDktMTQgMDg6NDQgIGR0czEyCiAKICAgICogZGlzdC9tYWtlcmVsZWFzZToKLSAgICAgU3luY2ggd2l0aCBtYWluIHRydW5rIHJlbGVhc2Ugc2NyaXB0LgorCisgICBQcm90ZWN0IGFnYWluc3QgdW5leHBlY3RlZCBjb21tYW5kIGFyZ3VtZW50cy4KKworMjAwNy0wOS0xNCAwODowMCAgZHRzMTIKKworICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgorCisgICBEb2N1bWVudCB1c2Ugb2YgInN2biBleHBvcnQiIHJhdGhlciB0aGFuICJzdm4gY2hlY2tvdXQiLgorICAgQ292ZXIgZ2VuZXJhdGlvbiBvZiB0aGUgemlwIGFyY2hpdmUgYXMgd2VsbCBhcyB0aGUgdGFyYmFsbC4KIAogMjAwNy0wOS0xMyAyMToyNSAgdGFuZGVycwogCiAgICAqIFJFQURNRToKLSAgICAgZHJvcCBvYnNvbGV0ZSBtaXJyb3JzCisKKyAgIGRyb3Agb2Jzb2xldGUgbWlycm9ycworCisyMDA3LTA5LTEzIDE3OjI5ICByc3RvcnkKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2VzcywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmg6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gaG9zdCByZXNvdXJjZXMgU1dSdW4gYW5kIFNXUnVuUGVyZiBUYWJsZSBmb3IgZGFyd2luOQorCisyMDA3LTA5LTEzIDE3OjIyICByc3RvcnkKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaDoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBpbXByb3ZlIGVycm9yIGhhbmRsaW5nIGFuZCBjbGVhbnVwIGluIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbnMKKworMjAwNy0wOS0xMyAxNzoxOSAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzoKKworICAgQXBwbGUgcGF0Y2hlcworICAgLSBmb3IgZGFyd2luOSwgcmV4ZWMgYWZ0ZXIgZm9yayB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIHNvbWUgbWFjaAorICAgY2FsbHMKKworMjAwNy0wOS0xMiAxODo1MSAgcnN0b3J5CisKKyAgICogIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCwgc25tcGxpYi9NYWtlZmlsZS5pbiwgICAKKyAgICAgIHNubXBsaWIvZGlyX3V0aWxzLmM6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gbmV3IHV0aWxpdHkgZnVuY3Rpb24gdG8gcmVhZCBhIGRpcmVjdG9yeSBoaWVyYXJjeSBpbnRvIGEKKyAgIGNvbnRhaW5lcgorCisyMDA3LTA5LTEyIDE3OjU1ICByc3RvcnkKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgsIHNubXBsaWIvY29udGFpbmVyLmM6CisKKyAgIEFwcGxlIHBhdGNoZXMKKyAgIC0gbmV3IHN0cmluZyBjb21wYXJlIGNhbGxiYWNrCisKKzIwMDctMDktMTIgMTc6NTMgIHJzdG9yeQorCisgICAqICBhZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oOgorCisgICBBcHBsZSBwYXRjaGVzCisgICAtIG5ldyBuZXRzbm1wX2NhY2hlX2ZyZWUgZnVuY3Rpb24KKworMjAwNy0wOS0xMiAxNzo0NiAgcnN0b3J5CisKKyAgICogc25tcGxpYi9zbm1wVURQRG9tYWluLmM6CisKKyAgIGFkZCBtaXNzaW5nIG5ld2xpbmUgaW4gZGVidWcgbXNnCisKKzIwMDctMDktMTIgMTc6NDIgIHJzdG9yeQorCisgICAqIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mOgorCisgICBQYXRjaGVzIGZyb20gQXBwbGUKKyAgIC0gYWRkIG9wdGlvbmFsIGNhY2hlCisgICAtIGNoZWNrL2hhbmRsZSBlcnJvcnMgZm9yIGFsbCBmdW5jdGlvbnMgaW4gaW5pdCBmdW5jCisgICAtIHR5cGVkZWYgZ2VuZXJhdGVkIHN0cnVjdAorICAgLSBza2lwIHByb2Nlc3NlZCByZXF1ZXN0cworICAgLSBjaGVjayBmb3IgbnVsbCB3aGVuIGV4dHJhY3Rpbmcgcm93CisKKzIwMDctMDktMTIgMTc6MzUgIHJzdG9yeQorCisgICAqIENPUFlJTkc6CisKKyAgIGFkZCBuZXcgY29weXJpZ2h0L2NvbnRyaWJ1dG9yCisKKzIwMDctMDktMDUgMjA6MTIgIG1hZ2ZyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jOgorCisgICBDb21iaW5lIHN5c3RlbV9wYXJzZV9jb25maWdfc3lze2xvYyxjb24sbmFtZX0gaW50byBvbmUgZnVuY3Rpb24KKyAgIHNpbmNlIHRoZXkgYWxsIGRvIHRoZSBzYW1lIHRoaW5nCiAKIDIwMDctMDgtMjUgMTQ6MjQgIG1hZ2ZyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLAotICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmg6Ci0gICAgIE1ha2UgbW9zdCBvZiBub3RpZmljYXRpb25fbG9nIHN0YXRpYy4gTWluaW1pemUgdGhlIGhlYWRlciBmaWxlLgorICAgKiAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oOgorCisgICBNYWtlIG1vc3Qgb2Ygbm90aWZpY2F0aW9uX2xvZyBzdGF0aWMuIE1pbmltaXplIHRoZSBoZWFkZXIgZmlsZS4KIAogMjAwNy0wOC0yMiAyMTo1NiAgdGFuZGVycwogCiAgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6Ci0gICAgIE5FV1M6IGFnZW50OiBzdXBwcmVzcyBhbm5veWluZyAicmVnaXN0cmF0aW9uICE9IGR1cGxpY2F0ZSIKLSAgICAgd2FybmluZyBmb3Igcm9vdCBvaWRzCi0gICAgIChvdGhlcndpc2UsIHlvdSdsbCBnZXQgdGhpcyBtZXNzYWdlIG9uIGFsbW9zdCBldmVyeSBzdGFydHVwKQorCisgICBORVdTOiBhZ2VudDogc3VwcHJlc3MgYW5ub3lpbmcgInJlZ2lzdHJhdGlvbiAhPSBkdXBsaWNhdGUiCisgICB3YXJuaW5nIGZvciByb290IG9pZHMKKyAgIChvdGhlcndpc2UsIHlvdSdsbCBnZXQgdGhpcyBtZXNzYWdlIG9uIGFsbW9zdCBldmVyeSBzdGFydHVwKQogCiAyMDA3LTA4LTIwIDA4OjA2ICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgotICAgICBORVdTOiBzbm1wbGliOiBmaXggcG90ZW50aWFsIGJ1ZmZlciBvdmVyZmxvdyBpbiBzcHJpbnRmIGZvcgotICAgICBVRFAvSVB2NgogCi0yMDA3LTA4LTE3IDA5OjA4ICBkdHMxMgorICAgTkVXUzogc25tcGxpYjogZml4IHBvdGVudGlhbCBidWZmZXIgb3ZlcmZsb3cgaW4gc3ByaW50ZiBmb3IKKyAgIFVEUC9JUHY2CisKKzIwMDctMDgtMTcgMDk6MTAgIGR0czEyCiAKICAgICogRkFROgotICAgICBTeW5jaCB3aXRoIG1haW4gZGV2ZWxvcG1lbnQgKGFuZCBvbi1saW5lKSBGQVEgdGV4dC4KKworICAgU3VidmVyc2lvbiwgbm90IENWUy4KIAogMjAwNy0wOC0xNyAwODo1OSAgZHRzMTIKIAogICAgKiBGQVE6Ci0gICAgIENsYXJpZnkgaGFuZGxpbmcgb2YgdW5rbm93biBjb21tdW5pdGllcworCisgICBDbGFyaWZ5IGhhbmRsaW5nIG9mIHVua25vd24gY29tbXVuaXRpZXMKIAogMjAwNy0wOC0xNiAxNTozNiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKLSAgICAgRG9uJ3QganVzdCByZXBvcnQgdGhlIHByb2JsZW0gLSBpdCBtaWdodCBiZSBzZW5zaWJsZSB0byBhdm9pZAotICAgICBjcmFzaGluZyB0aGUgYWdlbnQgYXMgd2VsbCEKKworICAgRG9uJ3QganVzdCByZXBvcnQgdGhlIHByb2JsZW0gLSBpdCBtaWdodCBiZSBzZW5zaWJsZSB0byBhdm9pZAorICAgY3Jhc2hpbmcgdGhlIGFnZW50IGFzIHdlbGwhCiAKIDIwMDctMDgtMTYgMTU6MzUgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc0NDE1NzogUmVwb3J0IGR1cGxpY2F0ZSAiZXh0ZW5kL2V4ZWMiCi0gICAgIGlkZW50aWZpZXJzLgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NDQxNTc6IFJlcG9ydCBkdXBsaWNhdGUgImV4dGVuZC9leGVjIgorICAgaWRlbnRpZmllcnMuCiAKIDIwMDctMDgtMTYgMTU6MjQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMsIGFwcHMvc25tcHRyYXBkX2RzLmg6Ci0gICAgIENIQU5HRVM6IHNubXB0cmFwZDogUEFUQ0g6IDE3NDY5OTI6IEltcHJvdmUgc25tcHRyYXBkCi0gICAgIGFjY2Vzcy1jb250cm9sIGVycm9yIG1lc3NhZ2VzLgorCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAxNzQ2OTkyOiBJbXByb3ZlIHNubXB0cmFwZAorICAgYWNjZXNzLWNvbnRyb2wgZXJyb3IgbWVzc2FnZXMuCiAKIDIwMDctMDgtMTYgMTQ6MTIgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTI5MzQ6IEZpeCBvZmYtYnktb25lIHFzb3J0IGVycm9yIGluCi0gICAgIHRhYmxlIHV0aWxpdGllcy4KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUyOTM0OiBGaXggb2ZmLWJ5LW9uZSBxc29ydCBlcnJvciBpbgorICAgdGFibGUgdXRpbGl0aWVzLgogCiAyMDA3LTA4LTE2IDEzOjMxICBkdHMxMgogCiAgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUzNDM3OiBGaXggZXJyb3IgaW5kZXggb24gZmFpbGluZyBTRVQKLSAgICAgcmVxdWVzdHMKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUzNDM3OiBGaXggZXJyb3IgaW5kZXggb24gZmFpbGluZyBTRVQKKyAgIHJlcXVlc3RzCiAKIDIwMDctMDgtMTYgMTM6MjUgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3NTM0NDk6IEZpeCBBZ2VudFggZXJyb3IgcHJvcGFnYXRpb24KKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzUzNDQ5OiBGaXggQWdlbnRYIGVycm9yIHByb3BhZ2F0aW9uCiAKIDIwMDctMDgtMTYgMTI6MzQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MzQ2MzogRml4IEFnZW50WCBzdWJhZ2VudCBwaW5nIGFsYXJtCi0gICAgIGhhbmRsaW5nCisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc1MzQ2MzogRml4IEFnZW50WCBzdWJhZ2VudCBwaW5nIGFsYXJtCisgICBoYW5kbGluZwogCiAyMDA3LTA4LTE2IDEyOjEzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzU4MjA4OiBGaXggbWVtb3J5IGxlYWsKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzU4MjA4OiBGaXggbWVtb3J5IGxlYWsKIAogMjAwNy0wOC0xNiAxMjowMyAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTc3NDYxMjogTW9yZSByZXNpbGllbnQgcHJvY2VzcyBzdGF0dXMKLSAgICAgaGFuZGxpbmcKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzc0NjEyOiBNb3JlIHJlc2lsaWVudCBwcm9jZXNzIHN0YXR1cworICAgaGFuZGxpbmcKIAogMjAwNy0wOC0xNiAxMTo1OCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE3NzUxMjQ6IEZpeCBjbGllbnRhZGRyIGZ1bmN0aW9uYWxpdHkKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE3NzUxMjQ6IEZpeCBjbGllbnRhZGRyIGZ1bmN0aW9uYWxpdHkKIAogMjAwNy0wOC0xNiAwOTozOCAgZHRzMTIKIAogICAgKiBzbm1wbGliL3BhcnNlLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNzY4Mjg1OiBDb3VudCBNSUIgZmlsZXMgY29ycmVjdGx5IGluCi0gICAgIGFkZF9taWJkaXIoKQorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTc2ODI4NTogQ291bnQgTUlCIGZpbGVzIGNvcnJlY3RseSBpbgorICAgYWRkX21pYmRpcigpCiAKIDIwMDctMDgtMTYgMDk6MzUgIGR0czEyCiAKICAgICogYXBwcy9zbm1wdHJhcGQuYzoKLSAgICAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMTc2NzcyNTogQ2xvc2UgYWxsIG5vbiBzdGFuZGFyZCBmaWxlCi0gICAgIGhhbmRsZXMKKworICAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMTc2NzcyNTogQ2xvc2UgYWxsIG5vbiBzdGFuZGFyZCBmaWxlCisgICBoYW5kbGVzCiAKIDIwMDctMDgtMTYgMDk6MDAgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWUuYzoKLSAgICAgRGVjbGFyZSBpbml0aWFsaXNhdGlvbiByb3V0aW5lIGNvcnJlY3RseSwgYW5kIG9taXQgdW51c2VkCi0gICAgIHZhcmlhYmxlcy4KLSAgICAgUGF0Y2ggZnJvbSBNYWdudXMgRnJvbXJlaWRlLgorCisgICBEZWNsYXJlIGluaXRpYWxpc2F0aW9uIHJvdXRpbmUgY29ycmVjdGx5LCBhbmQgb21pdCB1bnVzZWQKKyAgIHZhcmlhYmxlcy4KKyAgIFBhdGNoIGZyb20gTWFnbnVzIEZyb21yZWlkZS4KIAogMjAwNy0wOC0xNiAwODo1NSAgZHRzMTIKIAogICAgKiBpbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg6Ci0gICAgIFJlYWQgaW4gYWdlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncyAqYmVmb3JlKiB0aGUgaGVhZGVyCi0gICAgIGZpbGVzIHRoYXQgbWlnaHQgcmVseSBvbiB0aGVtLgorCisgICBSZWFkIGluIGFnZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MgKmJlZm9yZSogdGhlIGhlYWRlcgorICAgZmlsZXMgdGhhdCBtaWdodCByZWx5IG9uIHRoZW0uCisKKzIwMDctMDgtMDUgMTY6MTYgIGFsZXhfYgorCisgICAqIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwgd2luMzIvZGlzdC9SRUFETUUudHh0OgorCisgICBDaGFuZ2Ugd2luMzIgYnVpbGQgcmVhZG1lIGZpbGVzIHRvIENSTEYuCisKKzIwMDctMDgtMDUgMTQ6MTYgIGFsZXhfYgorCisgICAqIHdpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dDoKKworICAgV2luMzI6IENoYW5nZSBidWlsZCBkb2NzIHRvIHVzZSBkeW5hbWljIChETEwpIGluc3RlYWQgb2Ygc3RhdGljLgogCiAyMDA3LTA4LTAyIDEzOjQ2ICBkdHMxMgogCiAgICAqIG1pYnMvTkVULVNOTVAtRVhBTVBMRVMtTUlCLnR4dDoKLSAgICAgSXQgbWlnaHQgYmUgc2xpZ2h0bHkgbGVzcyBjb25mdXNpbmcgaWYgdGhlIG5ldFNubXBFeGFtcGxlU3RyaW5nCi0gICAgIE1JQiBvYmplY3QgZGlkIGFjdHVhbGx5IHRha2Ugc3RyaW5nIHZhbHVlcy4gUGlja3ksIEkga25vdy4uLi4KIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgSXQgbWlnaHQgYmUgc2xpZ2h0bHkgbGVzcyBjb25mdXNpbmcgaWYgdGhlIG5ldFNubXBFeGFtcGxlU3RyaW5nCisgICBNSUIgb2JqZWN0IGRpZCBhY3R1YWxseSB0YWtlIHN0cmluZyB2YWx1ZXMuIFBpY2t5LCBJIGtub3cuLi4uCiAKLUNoYW5nZXM6IFY1LTQtcGF0Y2hlcyBicmFuY2ggY3JlYXRlZCAtPiBWNS40LjEKKzIwMDctMDctMjggMTM6MDIgIHJzdG9yeQogCi0yMDA3LTA3LTI3IDE3OjAyICBoYXJkYWtlcgorICAgKiBkaXN0L3N2bnVwOgogCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMSApCi0KLTIwMDctMDctMjcgMTc6MDEgIGhhcmRha2VyCi0KLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0yNyAxNjo1OCAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHJlbW92ZSBib2d1cyBlbXB0eSAqIGxpbmVzIGZyb20gdGhlIENoYW5nZUxvZwotCi0yMDA3LTA3LTI3IDE2OjU0ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgZml4IHZlcnNpb24gbnVtYmVycyBpbiBDaGFuZ2VMb2cKLQotMjAwNy0wNy0yNyAxNjo1NCAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMjcgMTY6MTUgIGhhcmRha2VyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA3LTI3IDE2OjEzICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xICkKKyAgIGZpeCB0YWcgZXh0cmFjdGlvbjsgY2hlY2sgZm9yIGVtcHR5IHRhZyBlYXJsaWVyCiAKIDIwMDctMDctMjUgMjI6NDEgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuYzoKLSAgICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTc2MDYzMzogZml4IHR5cG8gaW4gZGVidWcgbWVzc2FnZQogCi0yMDA3LTA3LTIyIDAwOjU1ICB0YW5kZXJzCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNzYwNjMzOiBmaXggdHlwbyBpbiBkZWJ1ZyBtZXNzYWdlCiAKLSAgICogTkVXUzoKLSAgICAgcmVtb3ZlIGR1cGxpY2F0ZSBlbnRyeQotCi0yMDA3LTA3LTIyIDAwOjUyICB0YW5kZXJzCi0KLSAgICogTkVXUzoKLSAgICAgaW1wcm92ZSBORVdTIHNlY3Rpb24gZm9yIDUuNC4xCi0KLTIwMDctMDctMjEgMTY6MTcgIGhhcmRha2VyCi0KLSAgICogRkFRLCBSRUFETUUsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBkaXN0L25ldC1zbm1wLnNwZWMsCi0gICAgIHNlZHNjcmlwdC5pbiwgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjNCApCi0KLTIwMDctMDctMjEgMTY6MTYgIGhhcmRha2VyCi0KLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0yMSAxNjoxMyAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDctMjEgMTU6MDcgIGhhcmRha2VyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA3LTIxIDE1OjA2ICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnJjNCApCi0KLTIwMDctMDctMjEgMTQ6NTEgIGhhcmRha2VyCisyMDA3LTA3LTIxIDIxOjM2ICB0YW5kZXJzCiAKICAgICogc25tcGxpYi9zbm1wX2FwaS5jOgotICAgICBwYXRjaCB0byBmaXggZm9yd2FyZGluZyBlbmNvZGluZworCisgICBDSEFOR0VTOiBzbm1wbGliOiBmaXggZm9yd2FyZGluZyBlbmNvZGluZwogCiAyMDA3LTA3LTIwIDA4OjIxICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKLSAgICAgVHdlYWsgd2FybmluZyBtZXNzYWdlIGZvciAob2xkLXN0eWxlLCBpbnZhbGlkIGZvcm1hdCkgImV4ZWMgT0lEIgotICAgICBkaXJlY3RpdmVzLgogCi0yMDA3LTA3LTE5IDIxOjE2ICB0YW5kZXJzCi0KLSAgICogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBjb25maWd1cmUsIGx0bWFpbi5zaDoKLSAgICAgTkVXUzogYnVpbGQ6IHVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNCAoZnJvbSAxLjUuMjIpCi0gICAgIENIQU5HRVM6IEhQLVVYOiBCVUc6IDE3NDIyNzg6IGNvbXBpbGUgZXJyb3Igb24gSFAtVVggMTEuMjMgKElBNjQpCi0KLTIwMDctMDctMTkgMjE6MDEgIGR0czEyCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jLCBhZ2VudC9zbm1wZC5jOgotICAgICBDaGVjayBmb3IgcHJlc2VuY2Ugb2YgJ2Nob3duJyBhbmQgJ2xvY2FsdGltZV9yJyByb3V0aW5lcyBiZWZvcmUKLSAgICAgdXNpbmcgdGhlbS4KLQotMjAwNy0wNy0xOSAyMTowMCAgZHRzMTIKLQotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBDb25maWd1cmUgY2hlY2tzIGZvciAnY2hvd24nIGFuZCAnbG9jYWx0aW1lX3InIGZ1bmN0aW9ucwotCi0yMDA3LTA3LTE3IDAwOjIwICBoYXJkYWtlcgotCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzMgKQotCi0yMDA3LTA3LTE3IDAwOjE5ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0xNyAwMDoxNyAgaGFyZGFrZXIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDctMTcgMDA6MTYgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmMzICkKKyAgIFR3ZWFrIHdhcm5pbmcgbWVzc2FnZSBmb3IgKG9sZC1zdHlsZSwgaW52YWxpZCBmb3JtYXQpICJleGVjIE9JRCIKKyAgIGRpcmVjdGl2ZXMuCiAKIDIwMDctMDctMTYgMjM6NTkgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLAotICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgotICAgICBBcHBseSAoY29ycmVjdCkgcGF0Y2ggZnJvbSBNYXJjdXMgUnVlY2tlcnQgdG8gcmVtb3ZlIGFzc2VydHMKLSAgICAgdXNpbmcgc29ydC1vLWlsbGVnYWwgQyBzdHJpbmcgY29tcGFyZXMKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBBcHBseSAoY29ycmVjdCkgcGF0Y2ggZnJvbSBNYXJjdXMgUnVlY2tlcnQgdG8gcmVtb3ZlIGFzc2VydHMKKyAgIHVzaW5nIHNvcnQtby1pbGxlZ2FsIEMgc3RyaW5nIGNvbXBhcmVzCiAKIDIwMDctMDctMTYgMjM6NTkgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvYWdlbnRfcmVnaXN0cnkuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywKLSAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLAotICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgotICAgICBSZW1vdmUgcHJldmlvdXMgcGF0Y2ggd2hpY2ggd2FzIHRoZSB3cm9uZyB2ZXJzaW9uCisgICAqICBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pcC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCAgIAorICAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKKworICAgUmVtb3ZlIHByZXZpb3VzIHBhdGNoIHdoaWNoIHdhcyB0aGUgd3JvbmcgdmVyc2lvbgogCiAyMDA3LTA3LTE2IDIzOjU3ICBoYXJkYWtlcgogCi0gICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsCi0gICAgIGFnZW50L21pYmdyb3VwL21pYklJL3RjcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS91ZHAuYywKLSAgICAgc25tcGxpYi9kYXRhX2xpc3QuYzoKLSAgICAgQXBwbHkgcGF0Y2ggZnJvbSBNYXJjdXMgUnVlY2tlcnQgdG8gcmVtb3ZlIGFzc2VydHMgdXNpbmcKLSAgICAgc29ydC1vLWlsbGVnYWwgQyBzdHJpbmcgY29tcGFyZXMKKyAgICogIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMsICAgCisgICAgICBzbm1wbGliL2RhdGFfbGlzdC5jOgorCisgICBBcHBseSBwYXRjaCBmcm9tIE1hcmN1cyBSdWVja2VydCB0byByZW1vdmUgYXNzZXJ0cyB1c2luZworICAgc29ydC1vLWlsbGVnYWwgQyBzdHJpbmcgY29tcGFyZXMKKworMjAwNy0wNy0xMyAxOToyNyAgaGFyZGFrZXIKKworICAgKiBkaXN0L21ha2VyZWxlYXNlOgorCisgICBnZW5lcmF0ZSB6aXAgZmlsZXMKIAogMjAwNy0wNy0xMiAyMTo1MSAgdGFuZGVycwogCiAgICAqIHBlcmwvYWdlbnQvYWdlbnQucG06Ci0gICAgIGZpeCBzdWJhZ2VudCBleGFtcGxlIChkb2N1bWVudGF0aW9uKQorCisgICBmaXggc3ViYWdlbnQgZXhhbXBsZSAoZG9jdW1lbnRhdGlvbikKIAogMjAwNy0wNy0xMiAyMToyNyAgdGFuZGVycwogCiAgICAqIG1hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmOgotICAgICBzbm1wX3Nlc3NfcmVhZCByZXR1cm5zIGludCwgbm90IHZvaWQKIAotMjAwNy0wNy0wNyAwMDoxNyAgaGFyZGFrZXIKLQotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmMyICkKLQotMjAwNy0wNy0wNyAwMDoxNyAgaGFyZGFrZXIKLQotICAgKiBDSEFOR0VTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA3LTA3IDAwOjEzICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNy0wNyAwMDoxMSAgaGFyZGFrZXIKLQotICAgKiBtYW4vbmV0c25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zLAotICAgICBtYW4vbmV0c25tcF9hZ2VudF90cmFwLjMsIG1hbi9uZXRzbm1wX2FzbjFfcGFja2V0X3BhcnNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMywgbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMywgbWFuL25ldHNubXBfY2FsbGJhY2suMywKLSAgICAgbWFuL25ldHNubXBfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX2RhdGFfbGlzdC4zLAotICAgICBtYW4vbmV0c25tcF9kZWJ1Zy4zLCBtYW4vbmV0c25tcF9kZWZhdWx0X3N0b3JlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2hhbmRsZXIuMywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKLSAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zLCBtYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMsCi0gICAgIG1hbi9uZXRzbm1wX211bHRpcGxleGVyLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9jb2x1bW5faW5mb190LjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfZGF0YV9saXN0X3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX29pZF9zdGFzaC4zLCBtYW4vbmV0c25tcF9vbGRfYXBpLjMsCi0gICAgIG1hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMsIG1hbi9uZXRzbm1wX3JlYWRfb25seS4zLAotICAgICBtYW4vbmV0c25tcF9yb3dfbWVyZ2UuMywgbWFuL25ldHNubXBfc2NhbGFyLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zLCBtYW4vbmV0c25tcF9zZXJpYWxpemUuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfbG9nZ2luZy4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX3BkdS4zLCBtYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMywKLSAgICAgbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMywgbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZS4zLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMsIG1hbi9uZXRzbm1wX3RhYmxlX2dlbmVyaWMuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zLCBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMsIG1hbi9uZXRzbm1wX3RhYmxlX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX3Jvd3MuMywgbWFuL25ldHNubXBfdGRhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdXRpbC4zLCBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywKLSAgICAgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zLCBtYW4vbmV0c25tcF93YXRjaGVyLjM6Ci0gICAgIGRvY3VtZW50YXRpb24gdXBkYXRlCi0KLTIwMDctMDctMDcgMDA6MTAgIGhhcmRha2VyCi0KLSAgICogZG94eWdlbi5jb25mOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucmMyICkKKyAgIHNubXBfc2Vzc19yZWFkIHJldHVybnMgaW50LCBub3Qgdm9pZAogCiAyMDA3LTA3LTA2IDIzOjM5ICBoYXJkYWtlcgogCiAgICAqIE1ha2VmaWxlLnJ1bGVzLCBNYWtlZmlsZS50b3A6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiB1c2UgbGlidG9vbCBjbGVhbiBmb3IgcmVtb3ZpbmcgZmlsZXMgdG8gZW5zdXJlIHdlCi0gICAgIGRlbGV0ZSBhbGwgbGlidG9vbCB0ZW1wb3JhcnkgZmlsZXMuCisKKyAgIENIQU5HRVM6IGJ1aWxkOiB1c2UgbGlidG9vbCBjbGVhbiBmb3IgcmVtb3ZpbmcgZmlsZXMgdG8gZW5zdXJlIHdlCisgICBkZWxldGUgYWxsIGxpYnRvb2wgdGVtcG9yYXJ5IGZpbGVzLgorCisyMDA3LTA3LTA2IDIzOjM0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIHVzZSBhIHJlY3Vyc2l2ZSByZXZlcnQgaW5zdGVhZCBvZiBybS91cGRhdGU7IHJlbW92ZSBkb3VibGUgLyBmcm9tCisgICBlZGl0aW5nIGNhbGxzCiAKIDIwMDctMDctMDYgMjE6MjIgIHJzdG9yeQogCiAgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLSAgICAgc3RvcCBzZWFyY2hpbmcgcGF0aHMgd2hlbiBkb25lCisKKyAgIHN0b3Agc2VhcmNoaW5nIHBhdGhzIHdoZW4gZG9uZQogCiAyMDA3LTA3LTA2IDIxOjE0ICByc3RvcnkKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6Ci0gICAgIGRvIG5vdCBmcmVlIGludGVyZmFjZSBlbnRyeSBqdXN0IGJlY2F1c2Ugd2UgY2FuIG5vdCBnZXQgc3RhdHMgZm9yCi0gICAgIGl0CisKKyAgIGRvIG5vdCBmcmVlIGludGVyZmFjZSBlbnRyeSBqdXN0IGJlY2F1c2Ugd2UgY2FuIG5vdCBnZXQgc3RhdHMgZm9yCisgICBpdAogCiAyMDA3LTA3LTA2IDE1OjMyICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgotICAgICBDSEFOR0VTOiBzbm1wZDogQlVHIDE3NDUxMTM6IEhhbmRsZSBzaW5nbGUtbGluZSAoYW5kIHplcm8tbGluZSkKLSAgICAgb3V0cHV0IGluIFVDRCBjb21wYXRhYmlsaXR5IG1vZGUuCisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUcgMTc0NTExMzogSGFuZGxlIHNpbmdsZS1saW5lIChhbmQgemVyby1saW5lKQorICAgb3V0cHV0IGluIFVDRCBjb21wYXRhYmlsaXR5IG1vZGUuCisKKzIwMDctMDctMDYgMDk6MDggIGR0czEyCisKKyAgICogIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBzbm1wbGliL3NubXBfY2xpZW50LmMsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBQQVRDSCAxNzI4MjQ3OiBmcm9tIE1pdHN1cnUgQ2hpbmVuOiBjbGVhbnMgdXAKKyAgIHRoZSBpbnQ2NCB0eXBlIGNoZWNraW5nIGFuZCB1c2FnZSBmb3IgYnVpbGRpbmcgcGFja2V0cyBlc3BlY2lhbGx5CisgICB1bmRlciBNU1ZDLgogCiAyMDA3LTA3LTA1IDE0OjQ1ICByc3RvcnkKIAogICAgKiAuLCBSRUFETUUub3NYOgotICAgICByMjAwNDRAZGhjcDIxMTogcnN0b3J5IHwgMjAwNy0wNy0wNSAxMDo0NDowMSAtMDQwMAotICAgICByZW1vdmUgZGlzYWJsZS1zdGF0aWMgZnJvbSByZWNvbW1lbmRlZCBvcHRpb25zCisKKyAgIHIyMDA0NEBkaGNwMjExOiByc3RvcnkgfCAyMDA3LTA3LTA1IDEwOjQ0OjAxIC0wNDAwCisgICByZW1vdmUgZGlzYWJsZS1zdGF0aWMgZnJvbSByZWNvbW1lbmRlZCBvcHRpb25zCiAKIDIwMDctMDctMDUgMTE6MDUgIHJzdG9yeQogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKLSAgICAgc2tpcCBzdGF0cyBwYXJzaW5nIG9uIGludGVyZmFjZXMgd2l0aCBubyBzdGF0aXN0aWNzCisKKyAgIHNraXAgc3RhdHMgcGFyc2luZyBvbiBpbnRlcmZhY2VzIHdpdGggbm8gc3RhdGlzdGljcworCisyMDA3LTA3LTA1IDExOjAxICByc3RvcnkKKworICAgKiBkaXN0L2NoZWNrLWFwaS1jaGFuZ2U6CisKKyAgIGNoZWNrIGZvciBkaXIgZXhpc3RlbmNlCiAKIDIwMDctMDctMDQgMjM6MjYgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogcGVybDogaW5zdGFsbCBlbWJlZGRlZCBwZXJsIGluaXQgZmlsZXMgZm9yCi0gICAgIHNubXBkL3NubXB0cmFwZCB3aXRoIG1vZGUgNjQ0IGluc3RlYWQgb2YgNzU1CisKKyAgIENIQU5HRVM6IHBlcmw6IGluc3RhbGwgZW1iZWRkZWQgcGVybCBpbml0IGZpbGVzIGZvcgorICAgc25tcGQvc25tcHRyYXBkIHdpdGggbW9kZSA2NDQgaW5zdGVhZCBvZiA3NTUKIAogMjAwNy0wNy0wNCAyMTo0MiAgdGFuZGVycwogCiAgICAqIFJFQURNRS5vc1g6Ci0gICAgIFBlcmwgcHJvYmxlbXMgKGJlbGlldmVkIHRvIGJlKSBmaXhlZAogCi0yMDA3LTA3LTAzIDIyOjM2ICBoYXJkYWtlcgotCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYywKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBDSEFOR0VTOiBsaWJyYXJ5OiBQYXRjaCBmcm9tICJNaXRzdXJ1IENoaW5lbiI6IGNsZWFucyB1cCB0aGUKLSAgICAgaW50NjQgdHlwZSBjaGVja2luZyBhbmQgdXNhZ2UgZm9yIGJ1aWxkaW5nIHBhY2tldHMgZXNwZWNpYWxseQotICAgICB1bmRlciBNU1ZDLgorICAgUGVybCBwcm9ibGVtcyAoYmVsaWV2ZWQgdG8gYmUpIGZpeGVkCiAKIDIwMDctMDctMDMgMTI6NTYgIHRhbmRlcnMKIAogICAgKiBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbToKLSAgICAgcmVtb3ZlIGV4ZWN1dGFibGUgZmxhZyBmcm9tIFNWTiBwcm9wZXJ0aWVzCisKKyAgIHJlbW92ZSBleGVjdXRhYmxlIGZsYWcgZnJvbSBTVk4gcHJvcGVydGllcworCisyMDA3LTA3LTAyIDA2OjUzICBtYWdmcgorCisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHZhY20uYzoKKworICAgUmVtb3ZlIHVudXNlZCBvaWQgZGVjbGFyYXRpb25zCiAKIDIwMDctMDctMDIgMDY6MDIgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmM6Ci0gICAgIEFkZCBtaXNzaW5nIHJldHVybiB2YWx1ZSB0byBfbXRlRXZlbnRfZmlyZV9ub3RpZnkuCisKKyAgIEFkZCBtaXNzaW5nIHJldHVybiB2YWx1ZSB0byBfbXRlRXZlbnRfZmlyZV9ub3RpZnkuCiAKIDIwMDctMDctMDIgMDU6MzEgIG1hZ2ZyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jOgotICAgICBSZW1vdmUgdGhlIGRlY2xhcmF0aW9uIG9mIGFuIHVuZGVmaW5lZCBzdGF0aWMgZnVuY3Rpb24uCiAKLTIwMDctMDctMDEgMTk6NTkgIHRhbmRlcnMKKyAgIFJlbW92ZSB0aGUgZGVjbGFyYXRpb24gb2YgYW4gdW5kZWZpbmVkIHN0YXRpYyBmdW5jdGlvbi4KIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLSAgICAgbWlub3IgaGVscCB0ZXh0IGZvcm1hdHRpbmcgZml4CisyMDA3LTA3LTAxIDIwOjMyICB0YW5kZXJzCiAKLTIwMDctMDYtMzAgMDU6MzQgIHRhbmRlcnMKKyAgICogZGlzdC9uc2ItbmlnaHRseSwgZGlzdC9uc2ItcGFja2FnZToKIAotICAgKiBkaXN0L25ldC1zbm1wLnNwZWM6Ci0gICAgIGFkZCAtLWVuYWJsZS1hcy1uZWVkZWQgaWYgYnVpbGRpbmcgd2l0aCBlbWJlZGRlZCBQZXJsIHN1cHBvcnQKKyAgIG1ha2UgZ2V0b3B0cyB3b3JrIG9uIFRydTY0IGJ5IHJlc3Bhd25pbmcgaW4gUG9zaXggbW9kZQogCi0yMDA3LTA2LTMwIDA0OjM3ICBoYXJkYWtlcgorMjAwNy0wNy0wMSAxOTo1NiAgdGFuZGVycwogCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzEgKQorICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgbmV0LXNubXAtY29uZmlnLmluOgogCi0yMDA3LTA2LTMwIDA0OjM3ICBoYXJkYWtlcgorICAgQ0hBTkdFUzogYnVpbGQ6IC0tZGlzYWJsZS1hcy1uZWVkZWQgbm93IGFsbG93cyB0byByZXZlcnQgdG8gdGhlCisgICBmb3JtZXIgZGVmYXVsdCBiZWhhdmlvdXIgb2YgbGlua2luZyBsaWJwZXJsIHRvIGFwcGxpY2F0aW9ucworICAgcmF0aGVyIHRoYW4gTmV0LVNOTVAgTGlicmFyaWVzIChpbiBjYXNlIG9mIGFueSBwcm9ibGVtcykKIAotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQorMjAwNy0wNi0zMCAwNjoxNyAgaGFyZGFrZXIKIAotMjAwNy0wNi0zMCAwNDozNiAgaGFyZGFrZXIKKyAgICogZGlzdC9tYWtlcmVsZWFzZToKIAotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICBhY3R1YWxseSBjYWxsIHJlbW92ZWZpbGVzCiAKLTIwMDctMDYtMzAgMDQ6MzQgIGhhcmRha2VyCisyMDA3LTA2LTI4IDIzOjUwICBtYWdmcgogCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaDoKIAotMjAwNy0wNi0zMCAwNDozMiAgaGFyZGFrZXIKKyAgIE5FV1M6IHNubXBsaWI6IEFkZGVkIEdDQyBmb3JtYXQgY2hlY2tpbmcgYXR0cmlidXRlcyB0byB0aGUgZGVidWcKKyAgIGZ1bmN0aW9ucy4KIAotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5yYzEgKQorMjAwNy0wNi0yOCAyMzozNyAgbWFnZnIKIAotMjAwNy0wNi0yOSAyMjoxOCAgdGFuZGVycworICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYywgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYzoKIAotICAgKiBSRUFETUUuYWl4LCBSRUFETUUuaXJpeCwgUkVBRE1FLnNvbGFyaXMsIGFnZW50L01ha2VmaWxlLmluLAotICAgICBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgbmV0LXNubXAtY29uZmlnLmluOgotICAgICBORVdTOiBwZXJsOiBCVUc6IDE2MTk4Mjc6IGxpbmsgbGlibmV0c25tcGFnZW50L2xpYm5ldHNubXB0cmFwZAotICAgICAocmF0aGVyIHRoYW4gc25tcGQvc25tcHRyYXBkKSBhZ2FpbnN0IGxpYnBlcmwgd2hlbiBjb25maWd1cmVkCi0gICAgIHdpdGggLS1lbmFibGUtYXMtbmVlZGVkCisgICBSZW1vdmUgY2FzdHMgb2YgdW51c2VkIHZhbHVlcworCisyMDA3LTA2LTI4IDIzOjM2ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgorCisgICBSZW1vdmUgdW51c2VkIHZhcmlhYmxlcwogCiAyMDA3LTA2LTI4IDIyOjA5ICB0YW5kZXJzCiAKICAgICogbmV0LXNubXAtY29uZmlnLmluOgotICAgICByZW5hbWUgbGFzdCBvY2N1cmVuY2Ugb2YgREVGQVVMVF9NSUJbRElSXVMgdG8KLSAgICAgTkVUU05NUF9ERUZBVUxUX01JQltESVJdUworCisgICByZW5hbWUgbGFzdCBvY2N1cmVuY2Ugb2YgREVGQVVMVF9NSUJbRElSXVMgdG8KKyAgIE5FVFNOTVBfREVGQVVMVF9NSUJbRElSXVMKKworMjAwNy0wNi0yOCAwODoxNSAgbWFnZnIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBEbyBub3QgdHJhbnNmb3JtIHRoZSBpZ25vcmVkIHJlc3VsdCBvZiByZWFsbG9jX2Zvcm1hdF90cmFwCiAKIDIwMDctMDYtMjYgMjI6MTIgIHRhbmRlcnMKIAogICAgKiBhcHBzL01ha2VmaWxlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogd29yayBhcm91bmQgbGlibmV0c25tcGFnZW50L2xpYm5ldHNubXBoZWxwZXJzCi0gICAgIGRlcGVuZGVuY3kgaXNzdWVzIHdoZW4gbGlua2luZyBzbm1wdHJhcGQKKworICAgQ0hBTkdFUzogYnVpbGQ6IHdvcmsgYXJvdW5kIGxpYm5ldHNubXBhZ2VudC9saWJuZXRzbm1waGVscGVycworICAgZGVwZW5kZW5jeSBpc3N1ZXMgd2hlbiBsaW5raW5nIHNubXB0cmFwZAogCiAyMDA3LTA2LTI2IDIxOjQ1ICB0YW5kZXJzCiAKICAgICogYWdlbnQvTWFrZWZpbGUuaW4sIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiB1c2UgTERGTEFHUyB3aGVuIGJ1aWxkaW5nIGFnZW50LCBoZWxwZXJzIGFuZCBtaWIKLSAgICAgbGliIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBsaWJuZXRubXAKKworICAgQ0hBTkdFUzogYnVpbGQ6IHVzZSBMREZMQUdTIHdoZW4gYnVpbGRpbmcgYWdlbnQsIGhlbHBlcnMgYW5kIG1pYgorICAgbGliIHRvIGJlIGNvbnNpc3RlbnQgd2l0aCBsaWJuZXRubXAKIAogMjAwNy0wNi0yNiAyMToyOCAgdGFuZGVycwogCiAgICAqIElOU1RBTEw6Ci0gICAgIG1pbm9yIHVwZGF0ZXMKKworICAgbWlub3IgdXBkYXRlcworCisyMDA3LTA2LTI2IDE1OjEwICByc3RvcnkKKworICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBkb24ndCBpbml0aWFsaXplIHZhciBpbiBleHRlcm4gZGVjbDsgaW5zdGVhZCwgaW5pdGlhbGl6ZSBhY3R1YWwKKyAgIHZhcgorCisyMDA3LTA2LTI1IDIxOjI5ICB0YW5kZXJzCisKKyAgICogYWNsb2NhbC5tNCwgY29uZmlnLmd1ZXNzLCBjb25maWcuc3ViLCBjb25maWd1cmUsIGx0bWFpbi5zaDoKKworICAgTkVXUzogYnVpbGQ6IHVwZGF0ZSB0byBsaWJ0b29sIDEuNS4yNCAoZnJvbSAxLjUuMjIpCiAKIDIwMDctMDYtMjQgMTI6NTcgIHRhbmRlcnMKIAotICAgKiBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKLSAgICAgSEFWRV9TU0laRV9UIGNsZWFudXAKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgSEFWRV9TU0laRV9UIGNsZWFudXAKIAogMjAwNy0wNi0yMyAyMjo1NiAgdGFuZGVycwogCiAgICAqIFJFQURNRS5ocHV4MTE6Ci0gICAgIGRvbid0IHN1Z2dlc3QgLS13aXRoLWxpYnM9LWxubQogCi0yMDA3LTA2LTIyIDE1OjA5ICBkdHMxMgorICAgZG9uJ3Qgc3VnZ2VzdCAtLXdpdGgtbGlicz0tbG5tCiAKLSAgICogd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwKLSAgICAgd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwLCB3aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwLAotICAgICB3aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCwgd2luMzIvbGlic2RsbC5kc3csCi0gICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwKLSAgICAgd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwLAotICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3AsCi0gICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwKLSAgICAgd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AsIHdpbjMyL3NubXBkL3NubXBkLmRzcCwKLSAgICAgd2luMzIvc25tcGRlbHRhL3NubXBkZWx0YS5kc3AsIHdpbjMyL3NubXBkZi9zbm1wZGYuZHNwLAotICAgICB3aW4zMi9zbm1wZHNkay9zbm1wZC5kc3AsIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsCi0gICAgIHdpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCwKLSAgICAgd2luMzIvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQuZHNwLCB3aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwLAotICAgICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwKLSAgICAgd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwLAotICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwLAotICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLAotICAgICB3aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwLCB3aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AsCi0gICAgIHdpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcCwgd2luMzIvd2luMzIuZHN3LCB3aW4zMi93aW4zMnNkay5kc3c6Ci0gICAgIEVuZm9yY2UgRE9TLXN0eWxlIGxpbmUgZW5kaW5ncywgdG8ga2VlcCBWaXN1YWwgU3R1ZGlvIGhhcHB5LgorMjAwNy0wNi0yMiAxNTowNSAgZHRzMTIKKworICAgKiAgd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcCwgd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcCwgICAKKyAgICAgIHdpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwLCB3aW4zMi9saWJzZGxsLmRzdywgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvbGlic25tcC5kc3AsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCwgICAKKyAgICAgIHdpbjMyL25ldHNubXBtaWJzc2RrL25ldHNubXBtaWJzc2RrLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXBidWxrd2Fsay9zbm1wYnVsa3dhbGsuZHNwLCB3aW4zMi9zbm1wZC9zbm1wZC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCwgd2luMzIvc25tcGRmL3NubXBkZi5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZHNkay9zbm1wZC5kc3AsIHdpbjMyL3NubXBnZXQvc25tcGdldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AsIHdpbjMyL3NubXBzZXQvc25tcHNldC5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwLCB3aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcCwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AsICAgCisgICAgICB3aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AsIHdpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwLCAgIAorICAgICAgd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcCwgd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwLCAgIAorICAgICAgd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwLCB3aW4zMi93aW4zMi5kc3csIHdpbjMyL3dpbjMyc2RrLmRzdzoKKworICAgRW5mb3JjZSBET1Mtc3R5bGUgbGluZSBlbmRpbmdzLCB0byBrZWVwIFZpc3VhbCBTdHVkaW8gaGFwcHkuCisKKzIwMDctMDYtMjEgMTQ6MDEgIHJzdG9yeQorCisgICAqICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmg6CisKKyAgIGRlZmF1bHQgdG8gdXNpbmcgaWZUYWJsZSByZXdyaXRlcwogCiAyMDA3LTA2LTIwIDIxOjM0ICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKLSAgICAgZml4IHR5cG8KKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfb3BlbmJzZC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKKworICAgZml4IHR5cG8KIAogMjAwNy0wNi0xOSAyMjoyMyAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBmaXggUGVybC1yZWxhdGVkIGF1dG9jb25mIG1lc3NhZ2VzCisKKyAgIGZpeCBQZXJsLXJlbGF0ZWQgYXV0b2NvbmYgbWVzc2FnZXMKIAogMjAwNy0wNi0xOSAxNTowOCAgdGFuZGVycwogCiAgICAqIGRpc3QvbmV0LXNubXAuc3BlYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IGFkZCAiQnVpbGRSZXF1aXJlczogcGVybC1FeHRVdGlscy1FbWJlZCIgdG8gdGhlCi0gICAgIHNwZWMgZmlsZSwgZS5nLiBmb3IgRmVkb3JhIDcKKworICAgQ0hBTkdFUzogYnVpbGQ6IGFkZCAiQnVpbGRSZXF1aXJlczogcGVybC1FeHRVdGlscy1FbWJlZCIgdG8gdGhlCisgICBzcGVjIGZpbGUsIGUuZy4gZm9yIEZlZG9yYSA3CiAKIDIwMDctMDYtMTggMjI6MjggIGhhcmRha2VyCiAKICAgICogcGVybC9TTk1QL1NOTVAueHM6Ci0gICAgIGZpeCBicm9rZW4gY29tbWVudC4KIAotMjAwNy0wNi0xOCAyMjowNCAgaGFyZGFrZXIKLQotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jOgotICAgICAtIHZlcnNpb24gdGFnICggNS40LjEucHJlMyApCi0KLTIwMDctMDYtMTggMjI6MDMgIGhhcmRha2VyCi0KLSAgICogQ0hBTkdFUywgTkVXUzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNi0xOCAyMTo1NyAgaGFyZGFrZXIKLQotICAgKiBDaGFuZ2VMb2c6Ci0gICAgIHZlcnNpb24gdXBkYXRlCisgICBmaXggYnJva2VuIGNvbW1lbnQuCiAKIDIwMDctMDYtMTggMjE6NTQgIGhhcmRha2VyCiAKICAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjoKLSAgICAgcmV2ZXJ0IGRvdWJsZSBsaW5raW5nIG9mIGxpYm5ldHNtbnAgcGFydCBvZiBwYXRjaCB0aGF0IHdhcwotICAgICBzdXBwb3NlZCB0byBiZSBwdWxsZWQgYm9mZXIgYXBwbHlpbmcgaW4gcjE2NTM4ICh0aGFua3MgdGFuZGVycwotICAgICBmb3IgY2F0Y2hpbmcgaXQpCiAKLTIwMDctMDYtMTggMjE6NDggIGhhcmRha2VyCi0KLSAgICogYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kOgotICAgICBtYWtlIGRlcGVuZAotCi0yMDA3LTA2LTE4IDIxOjQ3ICBoYXJkYWtlcgotCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNi0xOCAyMTo0NiAgaGFyZGFrZXIKLQotICAgKiBkb3h5Z2VuLmNvbmY6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5wcmUzICkKKyAgIHJldmVydCBkb3VibGUgbGlua2luZyBvZiBsaWJuZXRzbW5wIHBhcnQgb2YgcGF0Y2ggdGhhdCB3YXMKKyAgIHN1cHBvc2VkIHRvIGJlIHB1bGxlZCBib2ZlciBhcHBseWluZyBpbiByMTY1MzggKHRoYW5rcyB0YW5kZXJzCisgICBmb3IgY2F0Y2hpbmcgaXQpCiAKIDIwMDctMDYtMTggMjE6MzQgIGhhcmRha2VyCiAKICAgICogYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgc25tcGxpYi9NYWtlZmlsZS5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IHBhdGNoIGZyb20gYXBwbGUgdG8gc2ltcGxpZnkgbWFrZWZpbGUgdGFyZ2V0Ci0gICAgIHJlZmVyZW5jZXMgaW4gc29tZSBydWxlcy4KKworICAgQ0hBTkdFUzogYnVpbGQ6IHBhdGNoIGZyb20gYXBwbGUgdG8gc2ltcGxpZnkgbWFrZWZpbGUgdGFyZ2V0CisgICByZWZlcmVuY2VzIGluIHNvbWUgcnVsZXMuCiAKIDIwMDctMDYtMTggMjE6MTcgIGhhcmRha2VyCiAKICAgICogbWFuL3NubXBfY29uZmlnLjUuZGVmLCBtYW4vc25tcGdldC4xLmRlZjoKLSAgICAgQ0hBTkdFUzogcGF0Y2ggZnJvbSBhcHBsZSB0byBmaXggbWlub3IgZG9jdW1lbnRhdGlvbiBidWdzLgorCisgICBDSEFOR0VTOiBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBtaW5vciBkb2N1bWVudGF0aW9uIGJ1Z3MuCiAKIDIwMDctMDYtMTggMjE6MTMgIGhhcmRha2VyCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLAotICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45Lmg6Ci0gICAgIAorICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oOgorCisgICAKIAogMjAwNy0wNi0xOCAyMToxMiAgaGFyZGFrZXIKIAogICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2Rhcndpbi5jOgotICAgICBDSEFOR0VTOiBwYXRjaCBmcm9tIGFwcGxlIHRvIGltcHJvdmUgbWVtb3J5IHJlcG9ydGluZworCisgICBDSEFOR0VTOiBwYXRjaCBmcm9tIGFwcGxlIHRvIGltcHJvdmUgbWVtb3J5IHJlcG9ydGluZwogCiAyMDA3LTA2LTE4IDIxOjA5ICBoYXJkYWtlcgogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaDoKLSAgICAgQ0hBTkdFUzogcGF0Y2ggZnJvbSBhcHBsZSB0byBmaXggY3Jvc3MtY29tcGlsZSBidWlsZHMgaW4gYXBwbGVzCi0gICAgIGJ1aWxkIGVudmlyb25tZW50LgorCisgICBDSEFOR0VTOiBwYXRjaCBmcm9tIGFwcGxlIHRvIGZpeCBjcm9zcy1jb21waWxlIGJ1aWxkcyBpbiBhcHBsZXMKKyAgIGJ1aWxkIGVudmlyb25tZW50LgogCiAyMDA3LTA2LTE4IDIwOjU0ICBoYXJkYWtlcgogCiAgICAqIHNubXBsaWIvc25tcF9wYXJzZV9hcmdzLmM6Ci0gICAgIENIQU5HRVM6IHBhdGNoOiAxNzM3MDg1OiBmcm9tIGpzYWZyYW5lazogZml4IHRoZSAtTSBzd2l0Y2ggZm9yCi0gICAgIG1pYiBwYXJzaW5nIGJ5IGxvYWRpbmcgZGVmYXVsdHMgZmlyc3QgYmVmb3JlIHBlcmZvcm1pbmcgdGhlIHNldAotICAgICBzbyBpdCBkb2VzIG5vdCBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlZmF1bHRzIGxhdGVyLgorCisgICBDSEFOR0VTOiBwYXRjaDogMTczNzA4NTogZnJvbSBqc2FmcmFuZWs6IGZpeCB0aGUgLU0gc3dpdGNoIGZvcgorICAgbWliIHBhcnNpbmcgYnkgbG9hZGluZyBkZWZhdWx0cyBmaXJzdCBiZWZvcmUgcGVyZm9ybWluZyB0aGUgc2V0CisgICBzbyBpdCBkb2VzIG5vdCBnZXQgb3ZlcndyaXR0ZW4gYnkgdGhlIGRlZmF1bHRzIGxhdGVyLgogCiAyMDA3LTA2LTE4IDIwOjUwICBoYXJkYWtlcgogCiAgICAqIHBlcmwvU05NUC9TTk1QLnhzOgotICAgICBORVdTOiBwZXJsOiBwYXRjaDogMTcyNTA0OTogZml4IGJ1bGt3YWxrIGluIGNhc2VzIG9mIG5vbi1yZXBlYXRlcgotICAgICB1c2FnZS4KKworICAgTkVXUzogcGVybDogcGF0Y2g6IDE3MjUwNDk6IGZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIKKyAgIHVzYWdlLgogCiAyMDA3LTA2LTE4IDE0OjEwICB0YW5kZXJzCiAKICAgICogcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEw6Ci0gICAgIENIQU5HRVM6IHBlcmw6IGZpeCBwcmVyZXF1aXNpdGVzIGZvciBOZXRTTk1QOjpUcmFwUmVjZWl2ZXIKKworICAgQ0hBTkdFUzogcGVybDogZml4IHByZXJlcXVpc2l0ZXMgZm9yIE5ldFNOTVA6OlRyYXBSZWNlaXZlcgogCiAyMDA3LTA2LTE4IDEzOjM5ICB0YW5kZXJzCiAKICAgICogcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG06Ci0gICAgIENIQU5HRVM6IHBlcmw6IGZpeCBzeW50YXggZXJyb3IgaW4gTmV0U05NUDo6YWdlbnQ6OlN1cHBvcnQKKworICAgQ0hBTkdFUzogcGVybDogZml4IHN5bnRheCBlcnJvciBpbiBOZXRTTk1QOjphZ2VudDo6U3VwcG9ydAorCisyMDA3LTA2LTE2IDIzOjAxICB0YW5kZXJzCisKKyAgICogIGFnZW50L01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgTkVXUzogcGVybDogQlVHOiAxNjE5ODI3OiBsaW5rIGxpYm5ldHNubXBhZ2VudC9saWJuZXRzbm1wdHJhcGQKKyAgIChyYXRoZXIgdGhhbiBzbm1wZC9zbm1wdHJhcGQpIGFnYWluc3QgbGlicGVybC4KIAogMjAwNy0wNi0xNCAxNTo0MSAgcnN0b3J5CiAKICAgICogbG9jYWwvbWliMmMuY29uZjoKLSAgICAgZml4IHR5cG8gaW4gdXNlciBvdXRwdXQsIGFzIG5vdGVkIG9uIGNvZGVycworCisgICBmaXggdHlwbyBpbiB1c2VyIG91dHB1dCwgYXMgbm90ZWQgb24gY29kZXJzCisKKzIwMDctMDYtMTQgMTU6MzYgIHJzdG9yeQorCisgICAqIGRpc3QvY3Zzc2hvdzoKKworICAgdXNlICdzdm4gaW5mbycgdG8gcXVlcnkgZm9yIHVybAogCiAyMDA3LTA2LTE0IDA0OjM3ICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oOgotICAgICBBZGQgbWlzc2luZyBhcmd1bWVudCB0eXBlIGluIG9yZGVyIHRvIHNpbGVuY2UgYSBnY2Mgd2FybmluZworCisgICBBZGQgbWlzc2luZyBhcmd1bWVudCB0eXBlIGluIG9yZGVyIHRvIHNpbGVuY2UgYSBnY2Mgd2FybmluZworCisyMDA3LTA2LTEzIDA2OjM3ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBEbyBub3QgdHJ5IHRvIGJlIGNsZXZlciBpbiB0aGUgaGFuZGluZyBvZiAtbGt2bSBpbiBMQUdFTlRMSUJTLgorICAgSW5jbHVkZSBpdCBpZiBhbnkgc291Z2h0IGZ1bmN0aW9uIGlzIGluIGl0LgogCiAyMDA3LTA2LTExIDEwOjExICB0YW5kZXJzCiAKICAgICogUkVBRE1FLmFpeDoKLSAgICAgZG9jdW1lbnQgeGxjPC0+Y2NfciBjb21waWxlciBpc3N1ZXMgd2l0aCBQZXJsIG9uIEFJWCAoc2VlIGJ1ZwotICAgICAjMTYwMDA5OSkKKworICAgZG9jdW1lbnQgeGxjPC0+Y2NfciBjb21waWxlciBpc3N1ZXMgd2l0aCBQZXJsIG9uIEFJWCAoc2VlIGJ1ZworICAgIzE2MDAwOTkpCiAKIDIwMDctMDYtMTAgMjI6MjkgIHRhbmRlcnMKIAotICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oOgotICAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE3MjgyNDc6IGZyb20gbWl0c3VydV9jaGluZW46IEFkZCB0eXBlCi0gICAgIGNoZWNrIGZvciBpbnQ/P190IGFuZCB1aW50Pz9fdAorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3R5cGVzLmg6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODI0NzogZnJvbSBtaXRzdXJ1X2NoaW5lbjogQWRkIHR5cGUKKyAgIGNoZWNrIGZvciBpbnQ/P190IGFuZCB1aW50Pz9fdAogCiAyMDA3LTA2LTEwIDIyOjIyICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjQ0OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBBZGQKLSAgICAgY29uZmlndXJlIGNoZWNrIGZvciBzaW42X3Njb3BlX2lkCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjQ0OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBBZGQKKyAgIGNvbmZpZ3VyZSBjaGVjayBmb3Igc2luNl9zY29wZV9pZAogCiAyMDA3LTA2LTEwIDIyOjE1ICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jOgotICAgICBDSEFOR0VTOiBQQVRDSDogMTcyODI0MTogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkIGNvbmZpZ3VyZSBjaGVjawotICAgICBmb3IgPHN5cy91aW8uaD4gKG1ha2Ugc3VyZSBpb3Ygc3RydWN0dXJlIGlzIGRlY2xhcmVkKQorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE3MjgyNDE6IGZyb20gbWl0c3VydV9jaGluZW46IGFkZCBjb25maWd1cmUgY2hlY2sKKyAgIGZvciA8c3lzL3Vpby5oPiAobWFrZSBzdXJlIGlvdiBzdHJ1Y3R1cmUgaXMgZGVjbGFyZWQpCisKKzIwMDctMDYtMTAgMDY6MzMgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgVXNlIE5FVFNOTVBfU0VBUkNIX0xJQlMgdG8gc2ltcGxpZnkgc2VhcmNoaW5nIGZvciBzeXN0ZW0gc3BlY2lmaWMKKyAgIGxpYnJhcmllcworCisyMDA3LTA2LTEwIDA2OjI2ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBVc2UgTkVUU05NUF9TRUFSQ0hfTElCUyB0byBzaW1wbGlmeSBzZWFyY2hpbmcgZm9yIC1sc2Vuc29ycworCisyMDA3LTA2LTEwIDA2OjE4ICBtYWdmcgorCisgICAqICBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3IgLWxkZXZzdGF0CisKKzIwMDctMDYtMTAgMDY6MTMgIG1hZ2ZyCisKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3IgLWxkbAorCisyMDA3LTA2LTA5IDA4OjU4ICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3IgLWxrdm0KIAogMjAwNy0wNi0wOCAyMDozMiAgdGFuZGVycwogCi0gICAqIE1ha2VmaWxlLmluOgotICAgICBGaXggcmVncmVzc2lvbiBpbnRyb2R1Y2VkIGJ5IHIxNjQ3OTogJ21ha2UgdGVzdCBURVNUT1BUUz0iLVQKLSAgICAgdGNwIicgbm93Ci0gICAgIHdvcmtzIGFnYWluLiBtYWtlcmVsZWFzZSBub3cgdXNlcyB0aGUgcmlnaHQgb3B0aW9uLgorICAgKiBNYWtlZmlsZS5pbiwgZGlzdC9tYWtlcmVsZWFzZToKKworICAgRml4IHJlZ3Jlc3Npb24gaW50cm9kdWNlZCBieSByMTY0Nzk6ICdtYWtlIHRlc3QgVEVTVE9QVFM9Ii1UCisgICB0Y3AiJyBub3cKKyAgIHdvcmtzIGFnYWluLiBtYWtlcmVsZWFzZSBub3cgdXNlcyB0aGUgcmlnaHQgb3B0aW9uLgorCisyMDA3LTA2LTA4IDEwOjQ2ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogRkVBVFVSRTogNzQxMzc1OiBFeHRlbmQgLUYgZmxhZyB0byBjb3ZlcgorICAgc3lzbG9nL2V4ZWN1dGUgZm9ybWF0IHN0cmluZ3MuCiAKIDIwMDctMDYtMDggMTA6NDQgIGR0czEyCiAKLSAgICogYXBwcy9zbm1wdHJhcGQuYywgYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKLSAgICAgSW1wcm92ZSBtZW1vcnkgaGFuZGxpbmcgb2Ygc3R5bGUtc3BlY2lmaWMgZm9ybWF0IHN0cmluZ3MuCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIEltcHJvdmUgbWVtb3J5IGhhbmRsaW5nIG9mIHN0eWxlLXNwZWNpZmljIGZvcm1hdCBzdHJpbmdzLgogCiAyMDA3LTA2LTA4IDEwOjMzICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgotICAgICBEZWZhdWx0IHRvIHJlcG9ydGluZyBORlMgbW91bnRzIGFzIE5ldHdvcmtEaXNrLgorCisgICBEZWZhdWx0IHRvIHJlcG9ydGluZyBORlMgbW91bnRzIGFzIE5ldHdvcmtEaXNrLgorCisyMDA3LTA2LTA4IDA2OjAyICBtYWdmcgorCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3IgLWxycG0gYW5kCisgICB0aGluZ3MgaXQgZGVwZW5kcworICAgb24KKworMjAwNy0wNi0wOCAwNTo1OSAgbWFnZnIKKworICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgorCisgICBBZGQgbWlzc2luZyBcCisKKzIwMDctMDYtMDggMDU6MzEgIG1hZ2ZyCisKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIFVzZSBORVRTTk1QX1NFQVJDSF9MSUJTIHRvIHNpbXBsaWZ5IHNlYXJjaGluZyBmb3IgLWxrc3RhdAorCisyMDA3LTA2LTA4IDA1OjI4ICBtYWdmcgorCisgICAqIGFjaW5jbHVkZS5tNDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEFkZCBhIHZhcmlhdGlvbiBvZiBBQ19TRUFSQ0hfTElCUyB3aGVyZSB0aGUKKyAgIHJlc3VsdCB2YXJpYWJsZSBpcyBzZXR0YWJsZS4KIAogMjAwNy0wNi0wOCAwNToxNiAgbWFnZnIKIAotICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAotICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIFJlbW92ZSB0aGUgdW51c2VkIHVuZGVmIEhBVkVfUEVSTF9FVkFMX1BWLgotICAgICBUaGUgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBieSB0aGUKLSAgICAgSEFWRV9QRVJMX0VWQUxfUFZfW1VMXUMgZGVmaW5lcywKLSAgICAgdGhpcyBvbmUgaXMgbmV2ZXIgc2V0IGJ5IG91ciBjb25maWd1cmUgc2NyaXB0LgorICAgKiAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgUmVtb3ZlIHRoZSB1bnVzZWQgdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFYuCisgICBUaGUgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBhcmUgaGFuZGxlZCBieSB0aGUKKyAgIEhBVkVfUEVSTF9FVkFMX1BWX1tVTF1DIGRlZmluZXMsCisgICB0aGlzIG9uZSBpcyBuZXZlciBzZXQgYnkgb3VyIGNvbmZpZ3VyZSBzY3JpcHQuCiAKIDIwMDctMDYtMDcgMTY6MDIgIGR0czEyCiAKLSAgICogLmN2c2lnbm9yZSwgYWdlbnQvLmN2c2lnbm9yZSwgYWdlbnQvaGVscGVycy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC8uY3ZzaWdub3JlLCBhZ2VudC9taWJncm91cC9SbW9uLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2FnZW50Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9leGFtcGxlcy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2hvc3QvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvaXBmd2NoYWlucy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9taWJJSS8uY3ZzaWdub3JlLCBhZ2VudC9taWJncm91cC9taXNjLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC9zbXV4Ly5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhQYXJhbWV0ZXJzLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlLy5jdnNpZ25vcmUsCi0gICAgIGFnZW50L21pYmdyb3VwL3NubXB2My8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC90YXJnZXQvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLAotICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvLmN2c2lnbm9yZSwKLSAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzLy5jdnNpZ25vcmUsIGFwcHMvLmN2c2lnbm9yZSwKLSAgICAgYXBwcy9zbm1wbmV0c3RhdC8uY3ZzaWdub3JlLCBkaXN0Ly5jdnNpZ25vcmUsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvLmN2c2lnbm9yZSwgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8uY3ZzaWdub3JlLAotICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvLmN2c2lnbm9yZSwgaW5jbHVkZS91Y2Qtc25tcC8uY3ZzaWdub3JlLAotICAgICBsb2NhbC8uY3ZzaWdub3JlLCBtYW4vLmN2c2lnbm9yZSwgbWlicy8uY3ZzaWdub3JlLCBvdi8uY3ZzaWdub3JlLAotICAgICBwZXJsLy5jdnNpZ25vcmUsIHBlcmwvQVNOLy5jdnNpZ25vcmUsCi0gICAgIHBlcmwvQW55RGF0YV9TTk1QLy5jdnNpZ25vcmUsIHBlcmwvT0lELy5jdnNpZ25vcmUsCi0gICAgIHBlcmwvU05NUC8uY3ZzaWdub3JlLCBwZXJsL1NOTVAvdC8uY3ZzaWdub3JlLAotICAgICBwZXJsL1RyYXBSZWNlaXZlci8uY3ZzaWdub3JlLCBwZXJsL2FnZW50Ly5jdnNpZ25vcmUsCi0gICAgIHBlcmwvYWdlbnQvU3VwcG9ydC8uY3ZzaWdub3JlLAotICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvLmN2c2lnbm9yZSwKLSAgICAgcGVybC9kZWZhdWx0X3N0b3JlLy5jdnNpZ25vcmUsIHBlcmwvbWFuYWdlci8uY3ZzaWdub3JlLAotICAgICBzbm1wbGliLy5jdnNpZ25vcmUsIHRlc3RpbmcvLmN2c2lnbm9yZSwgd2luMzIvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvYmluLy5jdnNpZ25vcmUsIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbGliLy5jdnNpZ25vcmUsIHdpbjMyL2xpYmFnZW50Ly5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL2xpYmhlbHBlcnMvLmN2c2lnbm9yZSwgd2luMzIvbGlibmV0c25tcHRyYXBkLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL2xpYnNubXAvLmN2c2lnbm9yZSwgd2luMzIvbGlic25tcF9kbGwvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvbGlidWNkbWlicy8uY3ZzaWdub3JlLCB3aW4zMi9uZXQtc25tcC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9uZXQtc25tcC9hZ2VudC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9uZXQtc25tcC9saWJyYXJ5Ly5jdnNpZ25vcmUsIHdpbjMyL25ldHNubXBtaWJzLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL25ldHNubXBtaWJzc2RrLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBidWxrZ2V0Ly5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXBidWxrd2Fsay8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wZC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wZGVsdGEvLmN2c2lnbm9yZSwgd2luMzIvc25tcGRmLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXBkc2RrLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBnZXQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcGdldG5leHQvLmN2c2lnbm9yZSwgd2luMzIvc25tcG5ldHN0YXQvLmN2c2lnbm9yZSwKLSAgICAgd2luMzIvc25tcHNldC8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wc3RhdHVzLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXB0YWJsZS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wdGVzdC8uY3ZzaWdub3JlLAotICAgICB3aW4zMi9zbm1wdHJhbnNsYXRlLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB0cmFwLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXB0cmFwZC8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wdXNtLy5jdnNpZ25vcmUsCi0gICAgIHdpbjMyL3NubXB2YWNtLy5jdnNpZ25vcmUsIHdpbjMyL3NubXB3YWxrLy5jdnNpZ25vcmU6Ci0gICAgIFJlbW92ZSByZWR1bmRhbnQgQ1ZTLWFkbWluIGZpbGVzLgorICAgKiAgLmN2c2lnbm9yZSwgYWdlbnQvLmN2c2lnbm9yZSwgYWdlbnQvaGVscGVycy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvLmN2c2lnbm9yZSwgYWdlbnQvbWliZ3JvdXAvUm1vbi8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvYWdlbnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2FnZW50eC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9leHByLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2V4YW1wbGVzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvLmN2c2lnbm9yZSwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcGZ3Y2hhaW5zLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS8uY3ZzaWdub3JlLCBhZ2VudC9taWJncm91cC9taXNjLy5jdnNpZ25vcmUsICAKKyAgICAgICBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbXV4Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlLy5jdnNpZ25vcmUsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhQYXJhbWV0ZXJzLy5jdnNpZ25vcmUsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvLmN2c2lnbm9yZSwKKyAgICAgICAgIGFnZW50L21pYmdyb3VwL3NubXB2My8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGFyZ2V0Ly5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC91Y2Qtc25tcC8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlLy5jdnNpZ25vcmUsICAgCisgICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvLmN2c2lnbm9yZSwgYXBwcy8uY3ZzaWdub3JlLCAgIAorICAgICAgYXBwcy9zbm1wbmV0c3RhdC8uY3ZzaWdub3JlLCBkaXN0Ly5jdnNpZ25vcmUsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wLy5jdnNpZ25vcmUsIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvLmN2c2lnbm9yZSwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8uY3ZzaWdub3JlLCBpbmNsdWRlL3VjZC1zbm1wLy5jdnNpZ25vcmUsIAorICAgICAgICBsb2NhbC8uY3ZzaWdub3JlLCBtYW4vLmN2c2lnbm9yZSwgbWlicy8uY3ZzaWdub3JlLAorICAgICAgb3YvLmN2c2lnbm9yZSwgICAgcGVybC8uY3ZzaWdub3JlLCBwZXJsL0FTTi8uY3ZzaWdub3JlLCAgIAorICAgICAgcGVybC9BbnlEYXRhX1NOTVAvLmN2c2lnbm9yZSwgcGVybC9PSUQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHBlcmwvU05NUC8uY3ZzaWdub3JlLCBwZXJsL1NOTVAvdC8uY3ZzaWdub3JlLCAgIAorICAgICAgcGVybC9UcmFwUmVjZWl2ZXIvLmN2c2lnbm9yZSwgcGVybC9hZ2VudC8uY3ZzaWdub3JlLCAgIAorICAgICAgcGVybC9hZ2VudC9TdXBwb3J0Ly5jdnNpZ25vcmUsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvLmN2c2lnbm9yZSwgICAKKyAgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS8uY3ZzaWdub3JlLCBwZXJsL21hbmFnZXIvLmN2c2lnbm9yZSwgICAKKyAgICAgIHNubXBsaWIvLmN2c2lnbm9yZSwgdGVzdGluZy8uY3ZzaWdub3JlLCB3aW4zMi8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvYmluLy5jdnNpZ25vcmUsIHdpbjMyL2VuY29kZV9rZXljaGFuZ2UvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL2xpYi8uY3ZzaWdub3JlLCB3aW4zMi9saWJhZ2VudC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvbGliaGVscGVycy8uY3ZzaWdub3JlLCB3aW4zMi9saWJuZXRzbm1wdHJhcGQvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL2xpYnNubXAvLmN2c2lnbm9yZSwgd2luMzIvbGlic25tcF9kbGwvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL2xpYnVjZG1pYnMvLmN2c2lnbm9yZSwgd2luMzIvbmV0LXNubXAvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL2FnZW50Ly5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9saWJyYXJ5Ly5jdnNpZ25vcmUsIHdpbjMyL25ldHNubXBtaWJzLy5jdnNpZ25vcmUsICAKKyAgICAgICB3aW4zMi9uZXRzbm1wbWlic3Nkay8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wYnVsa2dldC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcGJ1bGt3YWxrLy5jdnNpZ25vcmUsIHdpbjMyL3NubXBkLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wZGVsdGEvLmN2c2lnbm9yZSwgd2luMzIvc25tcGRmLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wZHNkay8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wZ2V0Ly5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wZ2V0bmV4dC8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wbmV0c3RhdC8uY3ZzaWdub3JlLCAgIAorICAgICAgd2luMzIvc25tcHNldC8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wc3RhdHVzLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wdGFibGUvLmN2c2lnbm9yZSwgd2luMzIvc25tcHRlc3QvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFuc2xhdGUvLmN2c2lnbm9yZSwgd2luMzIvc25tcHRyYXAvLmN2c2lnbm9yZSwgICAKKyAgICAgIHdpbjMyL3NubXB0cmFwZC8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wdXNtLy5jdnNpZ25vcmUsICAgCisgICAgICB3aW4zMi9zbm1wdmFjbS8uY3ZzaWdub3JlLCB3aW4zMi9zbm1wd2Fsay8uY3ZzaWdub3JlOgorCisgICBSZW1vdmUgcmVkdW5kYW50IENWUy1hZG1pbiBmaWxlcy4KIAogMjAwNy0wNi0wNyAxMjo1NiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfc2VjbW9kLmM6Ci0gICAgIEhhbmRsZSB1bnJlZ2lzdGVyaW5nIHRoZSBmaXJzdCBTZWN1cml0eSBNb2RlbCBpbiB0aGUgbGlzdC4KLSAgICAgUmVwb3J0ZWQgYnkgQWxla3NhbmRyIExvbWFub3YuCisKKyAgIEhhbmRsZSB1bnJlZ2lzdGVyaW5nIHRoZSBmaXJzdCBTZWN1cml0eSBNb2RlbCBpbiB0aGUgbGlzdC4KKyAgIFJlcG9ydGVkIGJ5IEFsZWtzYW5kciBMb21hbm92LgogCiAyMDA3LTA2LTA3IDA5OjEzICBkdHMxMgogCiAgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46Ci0gICAgIEluc3RhbGwgaGVhZGVyIGZpbGVzIGZvciBzdGFzaF9jYWNoZSBhbmQgc3Rhc2hfdG9fbmV4dCBoZWxwZXJzLgorCisgICBJbnN0YWxsIGhlYWRlciBmaWxlcyBmb3Igc3Rhc2hfY2FjaGUgYW5kIHN0YXNoX3RvX25leHQgaGVscGVycy4KIAogMjAwNy0wNi0wNyAwOTowNyAgZHRzMTIKIAogICAgKiBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOgotICAgICBTZXBhcmF0ZSBvdXQgaGVhZGVyIGZpbGVzIHRoYXQgZG9uJ3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgQwotICAgICBzb3VyY2UgZmlsZS4KKworICAgU2VwYXJhdGUgb3V0IGhlYWRlciBmaWxlcyB0aGF0IGRvbid0IGhhdmUgYSBjb3JyZXNwb25kaW5nIEMKKyAgIHNvdXJjZSBmaWxlLgogCiAyMDA3LTA2LTA3IDA4OjU5ICBkdHMxMgogCiAgICAqIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46Ci0gICAgIFNvcnQgbGlzdHMgb2YgaGVscGVycyAoc291cmNlIGNvZGUsIG9iamVjdCBmaWxlcyBhbmQgaGVhZGVycykuCi0gICAgIFRoaXMgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgZmlsZXMgdGhhdCBoYXZlIGJlZW4gb21pdHRlZC4KKworICAgU29ydCBsaXN0cyBvZiBoZWxwZXJzIChzb3VyY2UgY29kZSwgb2JqZWN0IGZpbGVzIGFuZCBoZWFkZXJzKS4KKyAgIFRoaXMgc2hvdWxkIG1ha2UgaXQgZWFzaWVyIHRvIHNwb3QgZmlsZXMgdGhhdCBoYXZlIGJlZW4gb21pdHRlZC4KIAogMjAwNy0wNi0wNyAwODo0MiAgZHRzMTIKIAogICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6Ci0gICAgIFByb3RlY3QgYWdhaW5zdCBzeXN0ZW1zIHdpdGhvdXQgU19JU0RJUi4KKworICAgUHJvdGVjdCBhZ2FpbnN0IHN5c3RlbXMgd2l0aG91dCBTX0lTRElSLgorCisyMDA3LTA2LTA2IDIyOjM2ICBtYWdmcgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBXZSBhcmVuJ3QgdXNpbmcgbGlidG9vbHMgZGxvcGVuIHN1cHBvcnQsIHNvIHRoZXJlIGlzIG5vIG5lZWQgdG8KKyAgIGNvbmZpZ3VyZSBmb3IgaXQKIAogMjAwNy0wNi0wNiAxMjozNyAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBBSVg6IHVzZSAiLVdsLC1icnRsIiB3aGVuIGNvbXBpbGluZyB3aXRoIGdjYworCisgICBDSEFOR0VTOiBBSVg6IHVzZSAiLVdsLC1icnRsIiB3aGVuIGNvbXBpbGluZyB3aXRoIGdjYworCisyMDA3LTA2LTA2IDEwOjI2ICBtYWdmcgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlbW92ZSB0aGUgdW51c2VkIHVuZGVmIEhBVkVfUEVSTF9FVkFMX1BWLgorICAgVGhlIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgYXJlIGhhbmRsZWQgYnkgdGhlCisgICBIQVZFX1BFUkxfRVZBTF9QVl9bVUxdQyBkZWZpbmVzLAorICAgdGhpcyBvbmUgaXMgbmV2ZXIgc2V0IGJ5IG91ciBjb25maWd1cmUgc2NyaXB0LgogCiAyMDA3LTA2LTA2IDEwOjIwICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXBkLmM6Ci0gICAgIEVuc3VyZSBvdXRwdXQgaXMgcHJvcGVybHkgZGlyZWN0ZWQgdG8gc3lzbG9nLgotICAgICBPdGhlcndpc2UsIHByb2JsZW1zIGluIHRoZSBjb25maWcgZW52aXJvbm1lbnQgY2FuIHRyaWdnZXIKLSAgICAgZXJyb3JzIGJlaW5nIGRpcmVjdGVkIHRvIHN0ZGVyciwgYW5kIHN1YnNlcXVlbnQgbG9nZ2luZwotICAgICBvdXRwdXQgZ2V0cyBsb3N0LgorCisgICBFbnN1cmUgb3V0cHV0IGlzIHByb3Blcmx5IGRpcmVjdGVkIHRvIHN5c2xvZy4KKyAgIE90aGVyd2lzZSwgcHJvYmxlbXMgaW4gdGhlIGNvbmZpZyBlbnZpcm9ubWVudCBjYW4gdHJpZ2dlcgorICAgZXJyb3JzIGJlaW5nIGRpcmVjdGVkIHRvIHN0ZGVyciwgYW5kIHN1YnNlcXVlbnQgbG9nZ2luZworICAgb3V0cHV0IGdldHMgbG9zdC4KIAogMjAwNy0wNi0wNiAxMDoxMyAgZHRzMTIKIAogICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6Ci0gICAgIE1vcmUgaGVscGZ1bCBkZWJ1Z2dpbmcgb3V0cHV0LgorCisgICBNb3JlIGhlbHBmdWwgZGVidWdnaW5nIG91dHB1dC4KIAogMjAwNy0wNi0wNiAwNTo1MyAgbWFnZnIKIAotICAgKiBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLAotICAgICB0ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210OgotICAgICBDSEFOR0VTOiBtaXNjOiBEb24ndCB1c2UgdGhlIGxlZ2FjeSBzeW1ib2wKLSAgICAgU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCisgICAqICBhcHBzL3NubXB0cmFwZC5jLCBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jLCAgIAorICAgICAgdGVzdGluZy90ZXN0cy9UMDM1c25tcHYzdHJhcGR1c2VybWdtdDoKKworICAgQ0hBTkdFUzogbWlzYzogRG9uJ3QgdXNlIHRoZSBsZWdhY3kgc3ltYm9sCisgICBTTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKKworMjAwNy0wNi0wNSAxNzo0OSAgbWFnZnIKKworICAgKiBhY2NvbmZpZy5oLCBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIGV4cGxpY2l0IGRlZmluaXRpb25zIG9mIGl0ZW1zIHRoYXQKKyAgIGF1dG9oZWFkZXIgYWxzbyBkZWZpbmVzCiAKIDIwMDctMDYtMDUgMTU6NTkgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmM6Ci0gICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNzI5NjI5OiBGaXggbWVtb3J5IGxlYWsgaW4gZGlzbWFuCi0gICAgIGFnZW50LgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTcyOTYyOTogRml4IG1lbW9yeSBsZWFrIGluIGRpc21hbgorICAgYWdlbnQuCisKKzIwMDctMDYtMDUgMTQ6NTIgIGR0czEyCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgQ0hBTkdFUzogc25tcHRyYXBkOiBTdXBwb3J0IHBlci10cmFwIGZvcm1hdCBzcGVjaWZpY2F0aW9ucworCisyMDA3LTA2LTA1IDA2OjU3ICBtYWdmcgorCisgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgTkVXUzogbWlzYzogQWRkIGNvbmZpZyByZXJlYWRpbmcgc3VwcG9ydCB0byB0aGUgc3ViYWdlbnQKKyAgIGdlbmVyYXRlZCBieSBuZXQtc25tcC1jb25maWcgLS1jb21waWxlLXN1YmFnZW50CisKKzIwMDctMDYtMDQgMjI6MjkgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFNpbXBsaWZ5IHRoZSBkZXRlY3Rpb24gb2YgbGlicmFyaWVzIG5lZWRlZCBmb3IKKyAgIGdldGhvc3RieW5hbWUKIAogMjAwNy0wNi0wNCAyMjowNiAgbWFnZnIKIAogICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIE5FV1M6IHNubXBsaWI6IENoYW5nZSBzbm1wX3Nlc3NfYWRkX2V4IHRvIGNvbnNpc3RlbnRseSBjbG9zZSBhbmQKLSAgICAgZGVsZXRlIHRoZSB0cmFuc3BvcnQgYXJndW1lbnQgb24gZmFpbHVyZSwgZWFybGllciB0aGUgbGl2ZW5lc3Mgb2YKLSAgICAgdGhlIHRyYW5zcG9ydCBhcmd1bWVudCB3YXMgdW5kZWNpZGVkLgogCi0yMDA3LTA2LTA0IDE1OjUwICBoYXJkYWtlcgotCi0gICAqIEZBUSwgUkVBRE1FLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgZGlzdC9uZXQtc25tcC5zcGVjLAotICAgICBzZWRzY3JpcHQuaW4sIHNubXBsaWIvc25tcF92ZXJzaW9uLmM6Ci0gICAgIC0gdmVyc2lvbiB0YWcgKCA1LjQuMS5wcmUyICkKLQotMjAwNy0wNi0wNCAxNTo1MCAgaGFyZGFrZXIKLQotICAgKiBDSEFOR0VTLCBORVdTOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA2LTA0IDE1OjQ0ICBoYXJkYWtlcgotCi0gICAqIENoYW5nZUxvZzoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNi0wNCAxNTo0MiAgaGFyZGFrZXIKLQotICAgKiBhZ2VudC9NYWtlZmlsZS5kZXBlbmQ6Ci0gICAgIG1ha2UgZGVwZW5kCi0KLTIwMDctMDYtMDQgMTU6NDEgIGhhcmRha2VyCi0KLSAgICogbWFuL25ldHNubXBfYWdlbnQuMywgbWFuL25ldHNubXBfYWdlbnRfcmVnaXN0cnkuMywKLSAgICAgbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zLCBtYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zLAotICAgICBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLAotICAgICBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2NhbGxiYWNrLjMsCi0gICAgIG1hbi9uZXRzbm1wX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF9kYXRhX2xpc3QuMywKLSAgICAgbWFuL25ldHNubXBfZGVidWcuMywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLAotICAgICBtYW4vbmV0c25tcF9oYW5kbGVyLjMsIG1hbi9uZXRzbm1wX2luc3RhbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLCBtYW4vbmV0c25tcF9sZWFmLjMsCi0gICAgIG1hbi9uZXRzbm1wX2xpYnJhcnkuMywgbWFuL25ldHNubXBfbWliX21haW50ZW5hbmNlLjMsCi0gICAgIG1hbi9uZXRzbm1wX21pYl91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zLAotICAgICBtYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAotICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKLSAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAotICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfYWdlbnQuMywgbWFuL25ldHNubXBfc25tcF9hbGFybS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zLCBtYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9wZHUuMywgbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMsCi0gICAgIG1hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMsIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGUuMywgbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGEuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zLCBtYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2luZGV4ZXMuMywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLCBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMsIG1hbi9uZXRzbm1wX3RkYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3V0aWwuMywgbWFuL25ldHNubXBfdXRpbGl0aWVzLjMsCi0gICAgIG1hbi9uZXRzbm1wX3ZhcmlhYmxlX2xpc3QuMywgbWFuL25ldHNubXBfd2F0Y2hlci4zOgotICAgICBkb2N1bWVudGF0aW9uIHVwZGF0ZQotCi0yMDA3LTA2LTA0IDE1OjM5ICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnByZTIgKQorICAgTkVXUzogc25tcGxpYjogQ2hhbmdlIHNubXBfc2Vzc19hZGRfZXggdG8gY29uc2lzdGVudGx5IGNsb3NlIGFuZAorICAgZGVsZXRlIHRoZSB0cmFuc3BvcnQgYXJndW1lbnQgb24gZmFpbHVyZSwgZWFybGllciB0aGUgbGl2ZW5lc3Mgb2YKKyAgIHRoZSB0cmFuc3BvcnQgYXJndW1lbnQgd2FzIHVuZGVjaWRlZC4KIAogMjAwNy0wNi0wNCAxNDozNiAgaGFyZGFrZXIKIAotICAgKiBNYWtlZmlsZS5pbiwgdGVzdGluZy9SVU5URVNUUzoKLSAgICAgQ0hBTkdFUzogdGVzdDogc3VwcG9ydCBhIC1uIGZsYWcgdG8gUlVOVEVTVFMgdG8gcHJpbnQgdGhlIHRlc3QKLSAgICAgbnVtYmVyIGZvdW5kIGluIHRoZSB0ZXN0IGZpbGUgYXMgb3Bwb3NlZCB0byB0aGUgbnVtZXJpY2FsIGNvdW50CisgICAqIE1ha2VmaWxlLmluLCBkaXN0L21ha2VyZWxlYXNlLCB0ZXN0aW5nL1JVTlRFU1RTOgorCisgICBDSEFOR0VTOiB0ZXN0OiBzdXBwb3J0IGEgLW4gZmxhZyB0byBSVU5URVNUUyB0byBwcmludCB0aGUgdGVzdAorICAgbnVtYmVyIGZvdW5kIGluIHRoZSB0ZXN0IGZpbGUgYXMgb3Bwb3NlZCB0byB0aGUgbnVtZXJpY2FsIGNvdW50CiAKIDIwMDctMDYtMDQgMTM6MDkgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjM3OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBNb3ZlCi0gICAgIHZhcmlhYmxlIGRlY2xhcmF0aW9uIGF0IHRoZSB0b3Agb2YgbmV0c25tcF91ZHBfc2VuZHRvCisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIzNzogZnJvbSBtaXRzdXJ1X2NoaW5lbjogTW92ZQorICAgdmFyaWFibGUgZGVjbGFyYXRpb24gYXQgdGhlIHRvcCBvZiBuZXRzbm1wX3VkcF9zZW5kdG8KKworMjAwNy0wNi0wNCAxMjo1MiAgdGFuZGVycworCisgICAqICBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvdHlwZXMuaDoKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjMzOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBtYWtlIHN1cmUKKyAgIHR5cGUgbmZkc190IGlzIGRlZmluZWQKIAogMjAwNy0wNi0wNCAxMjoxMyAgdGFuZGVycwogCi0gICAqIGFnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5jLCBjb25maWd1cmUsCi0gICAgIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwKLSAgICAgc25tcGxpYi9zbm1wVURQRG9tYWluLmMsIHNubXBsaWIvc25tcFVEUElQdjZEb21haW4uYzoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjMwOiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBhZGQKLSAgICAgY29uZmlndXJlIGNoZWNrIGZvciBnYWlfc3RyZXJyb3IoKQorICAgKiAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMsIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIzMDogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkCisgICBjb25maWd1cmUgY2hlY2sgZm9yIGdhaV9zdHJlcnJvcigpCiAKIDIwMDctMDYtMDQgMTA6MzUgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIyNjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogbWFrZSBzdXJlCi0gICAgIElGX05BTUVTSVpFIGlzIGRlZmluZWQKKworICAgQ0hBTkdFUzogYnVpbGQ6IFBBVENIOiAxNzI4MjI2OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiBtYWtlIHN1cmUKKyAgIElGX05BTUVTSVpFIGlzIGRlZmluZWQKKworMjAwNy0wNi0wNCAxMDoyOCAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jLCBjb25maWd1cmUsICAgCisgICAgICBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTcyODIyMzogZnJvbSBtaXRzdXJ1X2NoaW5lbjogYWRkCisgICBjb25maWd1cmUgY2hlY2sgZm9yIG5ldGxpbmsgc29ja2V0CiAKIDIwMDctMDYtMDQgMDk6NDcgIHRhbmRlcnMKIAogICAgKiB0ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdDoKLSAgICAgYWxzbyBza2lwIHRoaXMgdGVzdCBvbiBJUklYNjQKKworICAgYWxzbyBza2lwIHRoaXMgdGVzdCBvbiBJUklYNjQKKworMjAwNy0wNi0wMiAxNjoxMyAgbWFnZnIKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IEZpeCBjb21waWxhdGlvbiBvbiBJUklYCiAKIDIwMDctMDYtMDIgMDg6MjQgIG1hZ2ZyCiAKLSAgICogYWNjb25maWcuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2R5bml4LmgsCi0gICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaCwgc25tcGxpYi9zbm1wX2FwaS5jLAotICAgICB3aW4zMi9jb25maWcuaC5ib3JsYW5kLCB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIENIQU5HRVM6IHNubXBhcGk6IERvIG5vdCB1c2UgZ2V0c2VydmJ5bmFtZSB0byBmaW5kIGRlZmF1bHQgcG9ydAotICAgICBudW1iZXJzLCBqdXN0IGhhcmRjb2RlIHRoZW0gYW5kIGxldCB0aGUgdXNlciBvdmVycmlkZSB0aGVtIGlmCi0gICAgIG5lZWRlZC4KKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2R5bml4LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgsIHNubXBsaWIvc25tcF9hcGkuYywgICAKKyAgICAgIHdpbjMyL2NvbmZpZy5oLmJvcmxhbmQsIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBhcGk6IERvIG5vdCB1c2UgZ2V0c2VydmJ5bmFtZSB0byBmaW5kIGRlZmF1bHQgcG9ydAorICAgbnVtYmVycywganVzdCBoYXJkY29kZSB0aGVtIGFuZCBsZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlbSBpZgorICAgbmVlZGVkLgogCiAyMDA3LTA2LTAxIDIyOjU1ICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0gICAgIENIQU5HRVM6IGJ1aWxkOiBMaW5rIGxpYmRsIGFnYWluc3QgbGlibmV0c25tcG1pYnMgaW5zdGVhZCBvZgotICAgICBzbm1wZC4KLSAgICAgRml4ZXMgdGhlIGJ1aWxkIG9uIChzb21lKSBTb2xhcmlzIHN5c3RlbXMuCiAKLTIwMDctMDYtMDEgMjE6MzYgIGR0czEyCisgICBDSEFOR0VTOiBidWlsZDogTGluayBsaWJkbCBhZ2FpbnN0IGxpYm5ldHNubXBtaWJzIGluc3RlYWQgb2YKKyAgIHNubXBkLgorICAgRml4ZXMgdGhlIGJ1aWxkIG9uIChzb21lKSBTb2xhcmlzIHN5c3RlbXMuCiAKLSAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBGRUFUVVJFUzogMTA0MTg4ODogQ2hlY2sgZGlyZWN0b3J5IHBhdGhzIGZvcgotICAgICBjb25maWcgZmlsZXMuCi0gICAgIEJhY2twb3J0IGZyb20gbWFpbiBkZXZlbG9wbWVudCB0cnVuayBvZiBidWcgZml4LgorMjAwNy0wNi0wMSAyMjozNCAgdGFuZGVycwogCi0yMDA3LTA2LTAxIDIxOjIzICBkdHMxMgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKIAotICAgKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IEZFQVRVUkVTOiA4NTE4ODc6IFJlcG9ydCByYW5nZSBpbmZvcm1hdGlvbiBmb3IKLSAgICAgaW52YWxpZCBTRVQgcmVxdWVzdHMuCi0gICAgIEJhY2twb3J0IGZyb20gbWFpbiB0cnVuayBvZiBidWcgZml4LgorICAgZml4IE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMIGNvbmZpZ3VyZSBjaGVjayBvbiBJUklYCisgICAocmVncmVzc2lvbiBmcm9tIHIxNjQ1MSkKKworMjAwNy0wNi0wMSAxNDozMyAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jOgorCisgICBORVdTOiBzbm1wdHJhcGQ6IFdpdGhkcmF3IGRlcHJlY2F0ZWQgb3B0aW9ucy4KKyAgIChUaHJlZSBhbmQgYSBoYWxmIHllYXJzJyB3YXJuaW5nIHNob3VsZCBiZSBlbm91Z2ggZm9yIGFueW9uZSEpCiAKIDIwMDctMDUtMzEgMjM6NTEgIHRhbmRlcnMKIAotICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sCi0gICAgIG5ldC1zbm1wLWNvbmZpZy5pbjoKLSAgICAgQ0hBTkdFUzogYnVpbGQ6IExpbmsgbGlia3ZtIGFuZCBsaWJ3cmFwIHRvIGxpYm5ldHNubXBhZ2VudAotICAgICBpbnN0ZWFkIG9mIHNubXBkLgotICAgICBGaXhlcyB0ZXN0ICM0NCAoUGVybCBzdWJhZ2VudCkgb24gc3lzdGVtcyB1c2luZyBvbmUgb2YgdGhvc2UKLSAgICAgbGlicmFyaWVzLgorICAgKiAgYWdlbnQvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgbmV0LXNubXAtY29uZmlnLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogTGluayBsaWJrdm0gYW5kIGxpYndyYXAgdG8gbGlibmV0c25tcGFnZW50CisgICBpbnN0ZWFkIG9mIHNubXBkLgorICAgRml4ZXMgdGVzdCAjNDQgKFBlcmwgc3ViYWdlbnQpIG9uIHN5c3RlbXMgdXNpbmcgb25lIG9mIHRob3NlCisgICBsaWJyYXJpZXMuCisKKzIwMDctMDUtMzEgMjM6NDIgIG1hZ2ZyCisKKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBNb3ZlIHN5c09STGFzdENoYW5nZSBmcm9tIG1pYklJL3N5c3RlbV9taWIgdG8KKyAgIG1pYklJL3N5c09SVGFibGUgaW4gb3JkZXIgdG8ga2VlcCB0aGUgZGF0YSBhbmQgdGhlIHVzZSB0b2dldGhlci4KIAogMjAwNy0wNS0zMSAxNDozOSAgZHRzMTIKIAogICAgKiBhcHBzL3NubXB0cmFwZF9sb2cuYzoKLSAgICAgRml4IGxvZ2dpbmcgb2YgYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24uCisKKyAgIEZpeCBsb2dnaW5nIG9mIGF1dGhlbnRpY2F0aW9uIGluZm9ybWF0aW9uLgogCiAyMDA3LTA1LTMxIDEwOjEwICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXBkX2xvZy5jOgotICAgICBSZW1vdmUgYm9ndXMgZGVidWcgb3V0cHV0LgorCisgICBSZW1vdmUgYm9ndXMgZGVidWcgb3V0cHV0LgorCisyMDA3LTA1LTMxIDA5OjQ4ICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIFJlbW92ZSByZWR1bmRhbnQgY29kZS4KKworMjAwNy0wNS0zMSAwOTo0MyAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jOgorCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IEZFQVRVUkU6IDExNTk5NDc6IEFsbG93IGNvbnRyb2wgb2YgdHJhcGhhbmRsZQorICAgZGF0YSBmb3JtYXQKIAogMjAwNy0wNS0zMCAyMjo1MyAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCBwZXJsL0FTTi9NYWtlZmlsZS5QTCwKLSAgICAgcGVybC9PSUQvTWFrZWZpbGUuUEwsIHBlcmwvU05NUC9NYWtlZmlsZS5QTCwKLSAgICAgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsCi0gICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKLSAgICAgQ0hBTkdFUzogQUlYOiBidWlsZCBmaXhlcyBmb3IgZW1iZWRkZWQgUGVybAorICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIHBlcmwvQVNOL01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9PSUQvTWFrZWZpbGUuUEwsIHBlcmwvU05NUC9NYWtlZmlsZS5QTCwgICAKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCAgIAorICAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMOgorCisgICBDSEFOR0VTOiBBSVg6IGJ1aWxkIGZpeGVzIGZvciBlbWJlZGRlZCBQZXJsCisKKzIwMDctMDUtMzAgMjI6MzQgIHRhbmRlcnMKKworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgSFAtVVggMTEueCBhbmQgSVJJWCA2LjUgYnVpbGQgZml4IChyZWdyZXNzaW9uIGludHJvZHVjZWQgYnkKKyAgIHIxNjQ1MSkKKworMjAwNy0wNS0yOSAyMzowNCAgdGFuZGVycworCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBDSEFOR0VTOiBidWlsZDogbWFrZSB1c2Ugb2YgQUNfUFJPR19TRUQvQUNfUFJPR19HUkVQIGFuZCAvIHRvCisgICBmdXJ0aGVyIG1pbmltaXplIHNlZC9ncmVwIHByb2JsZW1zCiAKIDIwMDctMDUtMjkgMjI6NDIgIG1hZ2ZyCiAKICAgICogc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jOgotICAgICBDSEFOR0VTOiBzbm1wbGliOiBVc2UgdGhlIGRlZmF1bHRfdGFyZ2V0IGFyZ3VtZW50IGlmIGl0IGlzCi0gICAgIG5vbi1OVUxMLCBub3QgaWYgaXQgaXMgTlVMTC4KKworICAgQ0hBTkdFUzogc25tcGxpYjogVXNlIHRoZSBkZWZhdWx0X3RhcmdldCBhcmd1bWVudCBpZiBpdCBpcworICAgbm9uLU5VTEwsIG5vdCBpZiBpdCBpcyBOVUxMLgorCisyMDA3LTA1LTI5IDEwOjMwICB0YW5kZXJzCisKKyAgICogd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBSZW1vdmUgbW9yZSBuZXQtc25tcCBzcGVjaWFscyBpbiB0aGUgY29uZmlndXJlCisgICBzY3JpcHRzIHRvIGVhc2UgbWFpbnRlbmFuY2UuCisgICBBbHNvIGNoYW5nZSByZWNlbnRseSBhZGRlZCBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfU1NfRkFNSUxZLgogCiAyMDA3LTA1LTI5IDEwOjI3ICB0YW5kZXJzCiAKICAgICogUkVBRE1FLmFnZW50LW1pYnM6Ci0gICAgIGFkZCByZWNlbnQgbWZkIHJld3JpdGVzCisKKyAgIGFkZCByZWNlbnQgbWZkIHJld3JpdGVzCisKKzIwMDctMDUtMjkgMTA6MjIgIHRhbmRlcnMKKworICAgKiB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaDoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFJlbW92ZSBtb3JlIG5ldC1zbm1wIHNwZWNpYWxzIGluIHRoZSBjb25maWd1cmUKKyAgIHNjcmlwdHMgdG8gZWFzZSBtYWludGVuYW5jZS4KKyAgIEFsc28gY2hhbmdlIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGZvciBjb25zaXN0ZW5jeS4KKworMjAwNy0wNS0yOCAyMzozMCAgbWFnZnIKKworICAgKiAgUE9SVElORywgYWNjb25maWcuaCwgYWNpbmNsdWRlLm00LCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYywgYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9hdC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvbWliSUlfY29tbW9uLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jLCBhZ2VudC9taWJncm91cC9taWJJSS90Y3AuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3VkcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwgIAorICAgICAgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaXJpeC5oLCBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1LmgsICAgCisgICAgICBzbm1wbGliL3NjYXBpLmMsIHNubXBsaWIvc25tcC10Yy5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAKKyAgICAgICBzbm1wbGliL3N5c3RlbS5jOgorCisgICBDSEFOR0VTOiBidWlsZGluZzogUmVtb3ZlIG1vcmUgbmV0LXNubXAgc3BlY2lhbHMgaW4gdGhlIGNvbmZpZ3VyZQorICAgc2NyaXB0cyB0byBlYXNlIG1haW50ZW5hbmNlLgorCisyMDA3LTA1LTI4IDE2OjMxICBkdHMxMgorCisgICAqIG1hbi9zbm1wLmNvbmYuNS5kZWYsIG1hbi9zbm1wY21kLjEuZGVmLCBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBGRUFUVVJFUzogMTQwNzQ3NjogUmVuYW1lICdzdHJpY3RDb21tZW50VGVybScKKyAgIHRvIHJlZmxlY3QgdGhlIGFjdHVhbCBiZWhhdmlvdXIuCisKKzIwMDctMDUtMjggMTU6MjUgIGR0czEyCisKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBsaWJyYXJ5OiBGRUFUVVJFUzogMTA0MTg4ODogQ2hlY2sgZGlyZWN0b3J5IHBhdGhzIGZvcgorICAgY29uZmlnIGZpbGVzLgorCisyMDA3LTA1LTI4IDEzOjEzICBkdHMxMgorCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogRkVBVFVSRVM6IDg1MTg4NzogUmVwb3J0IHJhbmdlIGluZm9ybWF0aW9uIGZvcgorICAgaW52YWxpZCBTRVQgcmVxdWVzdHMuCisKKzIwMDctMDUtMjggMTI6MDggIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmM6CisKKyAgIE5FV1M6IFNvbGFyaXM6IFBBVENIOiAxNzE5NzMwOiBmcm9tIGFwZXJzc29uOiBzdXBwb3J0IGZvcgorICAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcEFkZHJlc3NUYWJsZQorICAgUGFydCAyIChTb2xhcmlzLXNwZWNpZmljIG5ldyBmaWxlcykKKworMjAwNy0wNS0yOCAxMjowMiAgdGFuZGVycworCisgICAqIGluY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oOgorCisgICBORVdTOiBMaW51eDogUEFUQ0g6IDE3MjQ2MDI6IGZyb20gbWl0c3VydV9jaGluZW46IG1mZC1iYXNlZAorICAgaXBEZWZhdWx0Um91dGVyVGFibGUgaW1wbGVtZW50YXRpb24KKworMjAwNy0wNS0yOCAxMjowMCAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuYywKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaCwKKyAgICAgICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmMsCisgICAgICAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oLAorICAgICAgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmg6CisKKyAgIE5FV1M6IExpbnV4OiBQQVRDSDogMTcyNDYwMjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogbWZkLWJhc2VkCisgICBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbXBsZW1lbnRhdGlvbgorCisyMDA3LTA1LTI4IDExOjU5ICB0YW5kZXJzCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmMsIGFnZW50L21pYmdyb3VwL21pYklJL2lwLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oOgorCisgICBORVdTOiBMaW51eDogUEFUQ0g6IDE3MjQ2MDI6IGZyb20gbWl0c3VydV9jaGluZW46IG1mZC1iYXNlZAorICAgaXBEZWZhdWx0Um91dGVyVGFibGUgaW1wbGVtZW50YXRpb24KKworMjAwNy0wNS0yOCAxMDowOSAgZHRzMTIKKworICAgKiBhcHBzL3NubXB3YWxrLmMsIG1hbi9zbm1wd2Fsay4xLmRlZjoKKworICAgRG9jdW1lbnQgdGhlIC1DRSBvcHRpb24uCiAKIDIwMDctMDUtMjcgMjE6NDIgIHRhbmRlcnMKIAogICAgKiBwZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwgcGVybC9hZ2VudC9NYWtlZmlsZS5QTDoKLSAgICAgU29tZSBsYW1lIGxpbmtlcnMgKGUuZy4gb24gSFAtVVggMTEuMjMvSUE2NCkgbmVlZCBxdWl0ZSBhIGJpdCBvZgotICAgICBoZWxwIHRvIHN1Y2Nlc3NmdWxseSBsaW5rIHRoZSBQZXJsIG1vZHVsZXMuCisKKyAgIFNvbWUgbGFtZSBsaW5rZXJzIChlLmcuIG9uIEhQLVVYIDExLjIzL0lBNjQpIG5lZWQgcXVpdGUgYSBiaXQgb2YKKyAgIGhlbHAgdG8gc3VjY2Vzc2Z1bGx5IGxpbmsgdGhlIFBlcmwgbW9kdWxlcy4KKworMjAwNy0wNS0yNyAyMTozMyAgZHRzMTIKKworICAgKiBhcHBzL3NubXB3YWxrLmM6CisKKyAgIENIQU5HRVM6IHNubXB3YWxrOiBQQVRDSDogMTcyMzYyMDogU3BlY2lmeSBhbiBleHBsaWNpdCBlbmQtcG9pbnQKKyAgIGZvciB0aGUgd2Fsay4KKyAgIEFuIGFsdGVybmF0aXZlIChtb3JlIGZsZXhpYmxlKSBhcHByb2FjaCB0byB0aGUgcHJvcG9zZWQgcGF0Y2gsCisgICBidXQgb25lIHRoYXQKKyAgIHByb3ZpZGVzIGVxdWl2YWxlbnQgZnVuY3Rpb25hbGl0eS4gQWxzbyBhZGRyZXNzZXMgRmVhdHVyZSBSZXF1ZXN0CisgICAjNzIyNzg0LgogCiAyMDA3LTA1LTI3IDIwOjUyICB0YW5kZXJzCiAKICAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0gICAgIEFkZCBkZXNjcmlwdGlvbnMgdG8gQUNfREVGSU5FOyBkcm9wIG9ic29sZXRlIEFDX0NIRUNLX0xJQihtLAotICAgICBhc2luKS4KIAotMjAwNy0wNS0yNyAxOTo1NCAgZHRzMTIKKyAgIEFkZCBkZXNjcmlwdGlvbnMgdG8gQUNfREVGSU5FOyBkcm9wIG9ic29sZXRlIEFDX0NIRUNLX0xJQihtLAorICAgYXNpbikuCiAKLSAgICogc25tcGxpYi9wYXJzZS5jOgotICAgICBDSEFOR0VTOiBsaWJyYXJ5OiBGRUFUVVJFUzogNDU0MDI4OiBEZXRlY3QgYW5kIGhhbmRsZSBlbXB0eSBNSUIKLSAgICAgaW5kZXggZmlsZXMuCisyMDA3LTA1LTI3IDE5OjI4ICBkdHMxMgorCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IEZFQVRVUkVTOiA0NTQwMjg6IERldGVjdCBlbXB0eSBNSUIgaW5kZXggZmlsZXMuCisKKzIwMDctMDUtMjcgMTk6MDYgIGR0czEyCisKKyAgICogIGFnZW50L3NubXBkLmMsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogc25tcGQ6IEZFQVRVUkVTOiAxMDE5NDI5OiBTZXQgc3VwcGxlbWVudGFyeSBncm91cHMgdmlhCisgICBpbml0Z3JvdXBzKDMpCisKKzIwMDctMDUtMjcgMDY6MjcgIHRhbmRlcnMKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsIGFnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oOgorCisgICBORVdTOiBTb2xhcmlzOiBQQVRDSDogMTcxOTczMDogZnJvbSBhcGVyc3Nvbjogc3VwcG9ydCBmb3IKKyAgIGlwU3lzdGVtU3RhdHNUYWJsZSBhbmQgaXBBZGRyZXNzVGFibGUKIAogMjAwNy0wNS0yNyAwNjoyMCAgdGFuZGVycwogCiAgICAqIFJFQURNRS5haXg6Ci0gICAgIGdyYW1tYXIgZml4CisKKyAgIGdyYW1tYXIgZml4CiAKIDIwMDctMDUtMjYgMTY6NDEgIGFsZXhfYgogCi0gICAqIFJFQURNRS53aW4zMiwgd2luMzIvQ29uZmlndXJlLCB3aW4zMi9idWlsZC5wbCwKLSAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBXaW4zMiBJUHY2IGJ1aWxkIGZpeGVzLiBJUHY2IG5vdyByZXF1aXJlcyBQU0RLLgorICAgKiAgUkVBRE1FLndpbjMyLCB3aW4zMi9Db25maWd1cmUsIHdpbjMyL2J1aWxkLnBsLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKIAotMjAwNy0wNS0yNiAxNToxNCAgYWxleF9iCisgICBXaW4zMiBJUHY2IGJ1aWxkIGZpeGVzLiBJUHY2IG5vdyByZXF1aXJlcyBQU0RLLgogCi0gICAqIFJFQURNRS53aW4zMiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsCi0gICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgotICAgICBJUHY2IGJ1aWxkIGZpeGVzIGZvciBidWlsZC5iYXQsIENvbmZpZ3VyZSBhbmQgUkVBRE1FLndpbjMyLgorMjAwNy0wNS0yNiAxNToxNiAgYWxleF9iCisKKyAgICogIFJFQURNRS53aW4zMiwgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgSVB2NiBidWlsZCBmaXhlcyBmb3IgYnVpbGQuYmF0LCBDb25maWd1cmUgYW5kIFJFQURNRS53aW4zMi4KIAogMjAwNy0wNS0yNSAyMzowMyAgdGFuZGVycwogCiAgICAqIFJFQURNRS5haXgsIFJFQURNRS5zb2xhcmlzLCBSRUFETUUudHJ1NjQ6Ci0gICAgIERvY3VtZW50YXRpb24gdXBkYXRlIHcuci50LiByZWNlbnQgY2hhbmdlcyAobWliSUkvaXB2NiBhbmQgQUlYCi0gICAgIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nKS4KKworICAgRG9jdW1lbnRhdGlvbiB1cGRhdGUgdy5yLnQuIHJlY2VudCBjaGFuZ2VzIChtaWJJSS9pcHY2IGFuZCBBSVgKKyAgIHNoYXJlZCBsaWJyYXJ5IGJ1aWxkaW5nKS4KKworMjAwNy0wNS0yNSAxODo1NCAgcnN0b3J5CisKKyAgICogZGlzdC9jdnNzaG93OgorCisgICB1cGRhdGUgZm9yIG5ldyB1cmwgZm9ybWF0IGluIHN2biBlbnRyaWVzCiAKIDIwMDctMDUtMjUgMTU6MjggIHRhbmRlcnMKIAogICAgKiBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6Ci0gICAgIFNvbWUgc3lzdGVtcyAoZS5nLiBIUC1VWCAxMS4yMy9JQTY0KSBjdXJyZW50bHkgc3RpbGwgbmVlZAotICAgICAibmV0LXNubXAtY29uZmlnIC0tbGlicyIgKGluc3RlYWQgb2YganVzdCAtLW5ldHNubXAtbGlicykgZm9yCi0gICAgIGxpbmtpbmcKLSAgICAgbGlibmV0c25tcCB0byBhIFBlcmwgbW9kdWxlLgorCisgICBTb21lIHN5c3RlbXMgKGUuZy4gSFAtVVggMTEuMjMvSUE2NCkgY3VycmVudGx5IHN0aWxsIG5lZWQKKyAgICJuZXQtc25tcC1jb25maWcgLS1saWJzIiAoaW5zdGVhZCBvZiBqdXN0IC0tbmV0c25tcC1saWJzKSBmb3IKKyAgIGxpbmtpbmcKKyAgIGxpYm5ldHNubXAgdG8gYSBQZXJsIG1vZHVsZS4KIAogMjAwNy0wNS0yNCAyMzo1NSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZDogb25seSBlbmFibGUgbWliSUkvaXB2NiB0aHJvdWdoIC0tZW5hYmxlLWlwdjYgb24KLSAgICAgc3lzdGVtcyBpdCBidWlsZHMgcHJvcGVybHkgb24gKExpbnV4IGFuZCAqQlNEKQorCisgICBDSEFOR0VTOiBidWlsZDogb25seSBlbmFibGUgbWliSUkvaXB2NiB0aHJvdWdoIC0tZW5hYmxlLWlwdjYgb24KKyAgIHN5c3RlbXMgaXQgYnVpbGRzIHByb3Blcmx5IG9uIChMaW51eCBhbmQgKkJTRCkKIAogMjAwNy0wNS0yNCAyMzoxNSAgdGFuZGVycwogCiAgICAqIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKLSAgICAgU29tZSBzeXN0ZW1zIChlLmcuIEhQLVVYIDExLjIzL0lBNjQpIGN1cnJlbnRseSBzdGlsbCBuZWVkCi0gICAgICJuZXQtc25tcC1jb25maWcgLS1saWJzIiAoaW5zdGVhZCBvZiBqdXN0IC0tbmV0c25tcC1saWJzKSBmb3IKLSAgICAgbGlua2luZyBsaWJzbm1wYWdlbnQgdG8gYSBQZXJsIG1vZHVsZS4KKworICAgU29tZSBzeXN0ZW1zIChlLmcuIEhQLVVYIDExLjIzL0lBNjQpIGN1cnJlbnRseSBzdGlsbCBuZWVkCisgICAibmV0LXNubXAtY29uZmlnIC0tbGlicyIgKGluc3RlYWQgb2YganVzdCAtLW5ldHNubXAtbGlicykgZm9yCisgICBsaW5raW5nIGxpYnNubXBhZ2VudCB0byBhIFBlcmwgbW9kdWxlLgogCiAyMDA3LTA1LTI0IDIyOjAxICBtYWdmcgogCiAgICAqIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYzoKLSAgICAgQ29ycmVjdCBvYnZpb3VzbHkgYnJva2VuIHVzZSBvZiB0aGUgS0xPT0tVUCBtYWNybyB0byBiZQotICAgICBjb25zaXN0ZW50IGF0IGxlYXN0CisKKyAgIENvcnJlY3Qgb2J2aW91c2x5IGJyb2tlbiB1c2Ugb2YgdGhlIEtMT09LVVAgbWFjcm8gdG8gYmUKKyAgIGNvbnNpc3RlbnQgYXQgbGVhc3QKIAogMjAwNy0wNS0yNCAyMDo1MSAgdGFuZGVycwogCiAgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q3Lmg6Ci0gICAgIENIQU5HRVM6IEZyZWVCU0Q6IGFkZCBpbml0aWFsIHN1cHBvcnQgZm9yIHVwY29taW5nIEZyZWVCU0QgNworCisgICBDSEFOR0VTOiBGcmVlQlNEOiBhZGQgaW5pdGlhbCBzdXBwb3J0IGZvciB1cGNvbWluZyBGcmVlQlNEIDcKKworMjAwNy0wNS0yNCAxNDowNiAgcnN0b3J5CisKKyAgICogTWFrZWZpbGUudG9wOgorCisgICBidW1wIGxpYmN1cnJlbnQgdG8gMjAgdG8gbGVhdmUgc3BhY2UgZm9yIDUuNC54IHJlbGVhc2VzCiAKIDIwMDctMDUtMjQgMTI6NDggIHRhbmRlcnMKIAogICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgYXBwcy9NYWtlZmlsZS5pbjoKLSAgICAgZml4IGxpYnJhcnkgbGlua2luZyBvbiBIUC1VWCAxMS4yMy9JQTY0CiAKLTIwMDctMDUtMjQgMDg6MzYgIHRhbmRlcnMKLQotICAgKiBNYWtlZmlsZS50b3A6Ci0gICAgIENIQU5HRVM6IHNubXBsaWI6IGluY3JlbWVudCAiY3VycmVudCIgYW5kICJhZ2UiIGFjY29yZGluZyB0bwotICAgICBsaWJ0b29sCi0gICAgIHZlcnNpb25pbmcgcG9saWN5LCBzaW5jZSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSA1LjQuCi0gICAgIFdlIG5vdyBidWlsZCBsaWJuZXRzbm1wLnNvLjE1LjEuMC4KLSAgICAgNS40LjEucHJlMSB3YXMgYnJva2VuIGluIHRoaXMgcmVnYXJkLgorICAgZml4IGxpYnJhcnkgbGlua2luZyBvbiBIUC1VWCAxMS4yMy9JQTY0CiAKIDIwMDctMDUtMjMgMTk6MDUgIHRhbmRlcnMKIAotICAgKiBNYWtlZmlsZS5pbiwgTWFrZWZpbGUucnVsZXMsIGFnZW50L01ha2VmaWxlLmluLAotICAgICBhZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluLCBhcHBzL01ha2VmaWxlLmluLCBjb25maWd1cmUsCi0gICAgIGNvbmZpZ3VyZS5pbiwgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsCi0gICAgIHBlcmwvYWdlbnQvTWFrZWZpbGUuUEwsIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCwKLSAgICAgcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMLCBzbm1wbGliL01ha2VmaWxlLmluOgotICAgICBORVdTOiBzbm1wbGliOiBCVUc6IDE2MTk4Mjc6IGxpbmsgbmV0LXNubXAgbGlicmFyaWVzIGFuZCBiaW5hcmllcwotICAgICBhZ2FpbnN0IHRoZSBuZXQtc25tcCBsaWJyYXJpZXMgdGhleSByZWFsbHkgZGVwZW5kIG9uCi0gICAgIC0gcmVmbGVjdCBsaWJyYXJ5IGludGVyZGVwZW5kZW5jaWVzIGF0IGxpbmsgdGltZQotICAgICAtIGZpeCBkZXBlbmRlbmNpZXMgb24gbGliY3J5cHRvLCBsaWJwa2NzMTEgYW5kIGxpYmtzdGF0Ci0gICAgIC0gaW5zdGFsbCBsaWJyYXJpZXMgaW4gY29ycmVjdCBvcmRlciAoaW1wb3J0YW50IGZvciBsaWJ0b29sCi0gICAgIHJlbGlua2luZykKLSAgICAgTkVXUzogUGVybDogbGluayBQZXJsIG1vZHVsZXMgYWdhaW5zdCB0aGUgZXhhY3Qgc2V0IG9mIGxpYnJhcmllcwotICAgICB0aGV5IGRlcGVuZCBvbgorICAgKiAgTWFrZWZpbGUuaW4sIE1ha2VmaWxlLnJ1bGVzLCBhZ2VudC9NYWtlZmlsZS5pbiwgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4sIGFwcHMvTWFrZWZpbGUuaW4sIGNvbmZpZ3VyZSwgICAKKyAgICAgIGNvbmZpZ3VyZS5pbiwgcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2FnZW50L01ha2VmaWxlLlBMLCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsICAgCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsIHNubXBsaWIvTWFrZWZpbGUuaW46CiAKLTIwMDctMDUtMjIgMTQ6NDAgIGhhcmRha2VyCisgICBORVdTOiBzbm1wbGliOiBCVUc6IDE2MTk4Mjc6IGxpbmsgbmV0LXNubXAgbGlicmFyaWVzIGFuZCBiaW5hcmllcworICAgYWdhaW5zdCB0aGUgbmV0LXNubXAgbGlicmFyaWVzIHRoZXkgcmVhbGx5IGRlcGVuZCBvbgorICAgLSByZWZsZWN0IGxpYnJhcnkgaW50ZXJkZXBlbmRlbmNpZXMgYXQgbGluayB0aW1lCisgICAtIGZpeCBkZXBlbmRlbmNpZXMgb24gbGliY3J5cHRvLCBsaWJwa2NzMTEgYW5kIGxpYmtzdGF0CisgICAtIGluc3RhbGwgbGlicmFyaWVzIGluIGNvcnJlY3Qgb3JkZXIgKGltcG9ydGFudCBmb3IgbGlidG9vbAorICAgcmVsaW5raW5nKQorICAgTkVXUzogUGVybDogbGluayBQZXJsIG1vZHVsZXMgYWdhaW5zdCB0aGUgZXhhY3Qgc2V0IG9mIGxpYnJhcmllcworICAgdGhleSBkZXBlbmQgb24KIAotICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGRpc3QvbmV0LXNubXAuc3BlYywKLSAgICAgcGVybC9BU04vQVNOLnBtLCBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sCi0gICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0sCi0gICAgIHBlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtLCBwZXJsL2FnZW50L2FnZW50LnBtLAotICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbSwKLSAgICAgcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sIHNlZHNjcmlwdC5pbiwKLSAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYzoKLSAgICAgdmVyc2lvbiBzdGFtcCA1LjQuMS5wcmUxCisyMDA3LTA1LTIyIDE2OjI2ICBoYXJkYWtlcgogCi0yMDA3LTA1LTIyIDAwOjI0ICBoYXJkYWtlcgorICAgKiBkaXN0L21ha2VyZWxlYXNlOgogCi0gICAqIENIQU5HRVMsIE5FV1M6Ci0gICAgIHZlcnNpb24gdXBkYXRlCi0KLTIwMDctMDUtMjIgMDA6MTkgIGhhcmRha2VyCi0KLSAgICogQ2hhbmdlTG9nOgotICAgICB2ZXJzaW9uIHVwZGF0ZQotCi0yMDA3LTA1LTIyIDAwOjAxICBoYXJkYWtlcgotCi0gICAqIGFnZW50L01ha2VmaWxlLmRlcGVuZCwgYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCwgYXBwcy9NYWtlZmlsZS5kZXBlbmQsCi0gICAgIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kLCBzbm1wbGliL01ha2VmaWxlLmRlcGVuZDoKLSAgICAgbWFrZSBkZXBlbmQKKyAgIHVzZSBzdm4gZXhwb3J0IGluc3RlYWQgb2YgY2hlY2tvdXQKIAogMjAwNy0wNS0yMiAwMDowMCAgaGFyZGFrZXIKIAogICAgKiBNYWtlZmlsZS5pbjoKLSAgICAgaWdub3JlIHdpbkV4dERMTCBpbiBjb21tZW50IGNoZWNrCisKKyAgIGlnbm9yZSB3aW5FeHRETEwgaW4gY29tbWVudCBjaGVjawogCiAyMDA3LTA1LTIxIDIzOjU0ICBoYXJkYWtlcgogCiAgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5jOgotICAgICAvLyAtPiBDIGNvbW1lbnQKIAotMjAwNy0wNS0yMSAyMzo1MSAgaGFyZGFrZXIKKyAgIC8vIC0+IEMgY29tbWVudAogCi0gICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCi0gICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMywKLSAgICAgbWFuL25ldHNubXBfYmFieV9zdGVwcy4zLCBtYW4vbmV0c25tcF9idWxrX3RvX25leHQuMywKLSAgICAgbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9jYWxsYmFjay4zLAotICAgICBtYW4vbmV0c25tcF9jb250YWluZXIuMywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsCi0gICAgIG1hbi9uZXRzbm1wX2RlYnVnLjMsIG1hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMywKLSAgICAgbWFuL25ldHNubXBfaGFuZGxlci4zLCBtYW4vbmV0c25tcF9pbnN0YW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywgbWFuL25ldHNubXBfbGVhZi4zLAotICAgICBtYW4vbmV0c25tcF9saWJyYXJ5LjMsIG1hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zLAotICAgICBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywKLSAgICAgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zLAotICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHMuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMsCi0gICAgIG1hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMywKLSAgICAgbWFuL25ldHNubXBfb2lkX3N0YXNoLjMsIG1hbi9uZXRzbm1wX29sZF9hcGkuMywKLSAgICAgbWFuL25ldHNubXBfcmVhZF9jb25maWcuMywgbWFuL25ldHNubXBfcmVhZF9vbmx5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3Jvd19tZXJnZS4zLCBtYW4vbmV0c25tcF9zY2FsYXIuMywKLSAgICAgbWFuL25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMsIG1hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zLAotICAgICBtYW4vbmV0c25tcF9zbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX3NubXBfYWxhcm0uMywKLSAgICAgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsCi0gICAgIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLAotICAgICBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zLCBtYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2FycmF5LjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zLCBtYW4vbmV0c25tcF90YWJsZV9kYXRhLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLAotICAgICBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMsIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMsCi0gICAgIG1hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMywgbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMywKLSAgICAgbWFuL25ldHNubXBfdGFibGVfcm93cy4zLCBtYW4vbmV0c25tcF90ZGF0YS4zLAotICAgICBtYW4vbmV0c25tcF91dGlsLjMsIG1hbi9uZXRzbm1wX3V0aWxpdGllcy4zLAotICAgICBtYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMsIG1hbi9uZXRzbm1wX3dhdGNoZXIuMzoKLSAgICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKKzIwMDctMDUtMjEgMjM6MzMgIHRhbmRlcnMKKworICAgKiAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpczIuMTAuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjcuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjguaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMyLjkuaDoKKworICAgc3luYyB3aXRoIDUuNCwgdGhlc2UgYXJlIG9ic29sZXRlIG5vdwogCiAyMDA3LTA1LTIxIDIzOjExICBtYWdmcgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgotICAgICBDSEFOR0VTOiBidWlsZGluZzogRGlzYWJsZSBpbmxpbmluZyBvbiBzb2xhcmlzIGFzIHRoZXJlIGFyZSBzb21lCi0gICAgIGxpbmtpbmcgZXJyb3JzIHRoYXQgc2hvdyB1cCBpZiB0aGUgaW5saW5lIHN1cHBvcnQgaXMgbGVmdAotICAgICBlbmFibGVkLgotCi0yMDA3LTA1LTIxIDIyOjQ2ICBoYXJkYWtlcgotCi0gICAqIGRveHlnZW4uY29uZjoKLSAgICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnByZTEgKQotCi0yMDA3LTA1LTIxIDIyOjIyICBoYXJkYWtlcgotCi0gICAqIE1ha2VmaWxlLnRvcDoKLSAgICAgdmVyc2lvbiB1cGRhdGUKLQotMjAwNy0wNS0yMSAyMzo1MSAgaGFyZGFrZXIKLQotICAgZG9jdW1lbnRhdGlvbiB1cGRhdGUKLQotMjAwNy0wNS0yMSAyMzoxMSAgbWFnZnIKIAogICAgQ0hBTkdFUzogYnVpbGRpbmc6IERpc2FibGUgaW5saW5pbmcgb24gc29sYXJpcyBhcyB0aGVyZSBhcmUgc29tZQogICAgbGlua2luZyBlcnJvcnMgdGhhdCBzaG93IHVwIGlmIHRoZSBpbmxpbmUgc3VwcG9ydCBpcyBsZWZ0CiAgICBlbmFibGVkLgogCi0yMDA3LTA1LTIxIDIyOjQ2ICBoYXJkYWtlcgorMjAwNy0wNS0yMSAwNjowNSAgbWFnZnIKIAotICAgLSB2ZXJzaW9uIHRhZyAoIDUuNC4xLnByZTEgKQorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKIAotMjAwNy0wNS0yMSAyMjoyMiAgaGFyZGFrZXIKLQotICAgdmVyc2lvbiB1cGRhdGUKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBBdCBsZWFzdCBTdW4gQyA1LjcgZmFpbHMgaWYgb25lIHRyaWVzIHRvCisgICBhY2Nlc3MgX19mdW5jX18gaW4gYSBleHRlcm4gaW5saW5lIGZ1bmN0aW9uLCBzbyB0ZXN0IGZvciB0aGF0CisgICBjYXNlLgogCiAyMDA3LTA1LTIwIDIxOjM0ICB0YW5kZXJzCiAKLQkqIGFnZW50L01ha2VmaWxlLmluLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLQkgIE5FV1M6IHNubXBsaWI6IEJVRzogMTYxOTgyNzogbGluayBhZ2FpbnN0IG5lZWRlZCBleHRlcm5hbAotCSAgbGlicmFyaWVzIGF0IGxpYnJhcnkgbGluayB0aW1lICh3aGVyZSB0aGV5IGFyZSByZWZlcmVuY2VkKSwKLQkgIHJhdGhlciB0aGFuIGFwcGxpY2F0aW9uIGxpbmsgdGltZS4KLQkgIEFscmVhZHkgY292ZXJzIG1vc3Qgb2YgbGlibmV0c25tcG1pYnMnIGV4dGVybmFsIGRlcGVuZGVuY2llcy4KLQkgIEZpeGVzIGJ1aWxkIGlzc3VlcyBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBidWlsZGluZyB3aXRoIHNoYXJlZAotCSAgbGlicmFyaWVzIG9uIEFJWCkuIFRlc3RlZCBvbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgTGludXgsCi0JICBTb2xhcmlzLCBIUC1VWCwgQUlYIGFuZCBJUklYLgorICAgKiBhZ2VudC9NYWtlZmlsZS5pbiwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIE5FV1M6IHNubXBsaWI6IEJVRzogMTYxOTgyNzogbGluayBhZ2FpbnN0IG5lZWRlZCBleHRlcm5hbAorICAgbGlicmFyaWVzIGF0IGxpYnJhcnkgbGluayB0aW1lICh3aGVyZSB0aGV5IGFyZSByZWZlcmVuY2VkKSwKKyAgIHJhdGhlciB0aGFuIGFwcGxpY2F0aW9uIGxpbmsgdGltZS4KKyAgIEFscmVhZHkgY292ZXJzIG1vc3Qgb2YgbGlibmV0c25tcG1pYnMnIGV4dGVybmFsIGRlcGVuZGVuY2llcy4KKyAgIEZpeGVzIGJ1aWxkIGlzc3VlcyBvbiBzb21lIHBsYXRmb3JtcyAoZS5nLiBidWlsZGluZyB3aXRoIHNoYXJlZAorICAgbGlicmFyaWVzIG9uIEFJWCkuIFRlc3RlZCBvbiBkaWZmZXJlbnQgdmVyc2lvbnMgb2YgTGludXgsCisgICBTb2xhcmlzLCBIUC1VWCwgQUlYIGFuZCBJUklYLgogCiAyMDA3LTA1LTE5IDE1OjI3ICBtYWdmcgogCi0JKiBhY2NvbmZpZy5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbiwKLQkgIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46Ci0JICBDSEFOR0VTOiBidWlsZGluZzogQ2hlY2sgZm9yIHN1cHBvcnQgb2Ygc3RhdGljIGlubGluZSBmdW5jdGlvbnMKLQkgIGluc3RlYWQgb2YgbmVzdGVkIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdoZW4gZGV0ZXJtaW5pbmcgaWYKLQkgIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIHdvcmsKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IENoZWNrIGZvciBzdXBwb3J0IG9mIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zCisgICBpbnN0ZWFkIG9mIG5lc3RlZCBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB3aGVuIGRldGVybWluaW5nIGlmCisgICBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB3b3JrCisKKzIwMDctMDUtMTkgMDg6NDAgIG1hZ2ZyCisKKyAgICogIGFjY29uZmlnLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgd2luMzIvY29uZmlnLmguYm9ybGFuZCwgICAKKyAgICAgIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IE1ha2UgdXNlIG9mIHRoZSBDOTkgcHJlZGVmaW5lZCB2YXJpYWJsZQorICAgX19mdW5jX18gaW4gYWRkaXRpb24gdG8gdGhlIEdDQyBzeW1ib2wgX19GVU5DVElPTl9fIHRvIGdldCB0aGUKKyAgIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24KKworMjAwNy0wNS0xOCAxODoxMiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzIxMDk2OiBmcm9tIG1pdHN1cnVfY2hpbmVuOiByZW1vdmUKKyAgIHVudXNlZCB2YXJpYWJsZSBzdGF0cyBmcm9tIGtlcm5lbCBleHRyYWN0aW9uIGZvciBiZXR0ZXIKKyAgIHBvcnRhYmlsaXR5LgogCiAyMDA3LTA1LTE4IDE4OjA4ICBoYXJkYWtlcgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcxOTI1NDogZnJvbSAiQ2hyaXN0YW4gSnVuZyI6IHVwZGF0ZQotCSAgSFJGU19pZ25vcmUgbGlzdCB0byBjdXJyZW50IGxpbnV4IGxpa2VseWhvb2RzCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE3MTkyNTQ6IGZyb20gIkNocmlzdGFuIEp1bmciOiB1cGRhdGUKKyAgIEhSRlNfaWdub3JlIGxpc3QgdG8gY3VycmVudCBsaW51eCBsaWtlbHlob29kcwogCiAyMDA3LTA1LTE4IDE4OjAyICBoYXJkYWtlcgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKLQkgIE5FV1M6IHNubXBkOiBwYXRjaDogMTcxOTI1MzogZnJvbSAiQ2hyaXN0aWFuIEp1bmciOiBmaXgKLQkgIHNraXBORlNJbkhvc3RSZXNvdXJjZXMgc28gaXQgZG9lcyBub3QgYnJlYWsgb24gdGhlIHNlY29uZCB3YWxrIG9mCi0JICB0aGUgdGFibGUuCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgorCisgICBORVdTOiBzbm1wZDogcGF0Y2g6IDE3MTkyNTM6IGZyb20gIkNocmlzdGlhbiBKdW5nIjogZml4CisgICBza2lwTkZTSW5Ib3N0UmVzb3VyY2VzIHNvIGl0IGRvZXMgbm90IGJyZWFrIG9uIHRoZSBzZWNvbmQgd2FsayBvZgorICAgdGhlIHRhYmxlLgorCisyMDA3LTA1LTE4IDE3OjU1ICBtYWdmcgorCisgICAqIGFjY29uZmlnLmgsIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW46CisKKyAgIFJlcmFuIGF1dG9oZWFkZXIgYW5kIGFkanVzdGVkIGFjY29uZmlnLmggYWZ0ZXIgY2hhbmdlcyBpbiByMTYzODcKKworMjAwNy0wNS0xOCAxNzo1NCAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcxNTQwNjogZnJvbSBtaXRzdXJ1X2NoaW5lbjogcmVnaXN0cmF0aW9uCisgICBvcmRlcmluZyBmaXhlcyBmb3IgaWNtcFN0YXRzVGFibGUKKworMjAwNy0wNS0xOCAxNzo0NiAgaGFyZGFrZXIKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcxNTM5NTogZml4IGljbXAgdGFibGUgZXJyb3JzIGluIG5ldyBpY21wCisgICBjb2RlCisKKzIwMDctMDUtMTggMTc6NDUgIGhhcmRha2VyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICAKIAogMjAwNy0wNS0xOCAxNTowNSAgdGFuZGVycwogCi0JKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLQkgIE5FV1M6IEFJWDogZml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nCi0JICBzdGF0aWMKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIE5FV1M6IEFJWDogZml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nCisgICBzdGF0aWMKKworMjAwNy0wNS0xOCAxNDoxOCAgbWFnZnIKKworICAgKiAgYWNjb25maWcuaCwgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLCAgIAorICAgICAgd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgsICAgCisgICAgICB3aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgQ0hBTkdFUzogYnVpbGRpbmc6IFVzZSBBQ19DSEVDS19NRU1CRVJTIGluc3RlYWQgb2YKKyAgIEFDX0NIRUNLX1NUUlVDVF9GT1Igd2hlbiBjaGVja2luZyBmb3Igc3RydWN0IGlwc3RhdCBtZW1iZXJzIGluCisgICBvcmRlciB0byBtYWtlIGNvbmZpZ3VyZS5pbiBzbWFsbGVyCiAKIDIwMDctMDUtMTggMTA6MjIgIG1hZ2ZyCiAKLQkqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oOgotCSAgQ0hBTkdFUzogc25tcGQ6IENvcnJlY3QgdGhlIGRlcGVuZGVuY3kgaW5mb3JtYXRpb24gZm9yCi0JICBob3N0L2hyX3N0b3JhZ2UKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBDb3JyZWN0IHRoZSBkZXBlbmRlbmN5IGluZm9ybWF0aW9uIGZvcgorICAgaG9zdC9ocl9zdG9yYWdlCisKKzIwMDctMDUtMTggMDk6NTcgIG1hZ2ZyCisKKyAgICogdGVzdGluZy9SVU5URVNUUzoKKworICAgQ0hBTkdFUzogdGVzdGluZzogRG8gbm90IHRlcm1pbmF0ZSBvbiBTSUdDSExEIHNpbmNlIGRhc2ggYW5kCisgICBzb3VtZSBib3VybmUgc2hlbGxzIHdpbGwgZXhpdCB0aGUgbWFpbiBzaGVsbCB3aGVuIGEgc3Vic2hlbGwKKyAgIHRlcm1pbmF0ZXMgaW4gdGhhdCBjYXNlLgorCisyMDA3LTA1LTE4IDA5OjIyICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wdXNtLmM6CisKKyAgIFVuZG9pbmcgYWNjaWRlbnRhbCBjaGFuZ2UgY29tbWl0dGVkIGluIHIxNjM3My4KKworMjAwNy0wNS0xNyAyMzoyMSAgbWFnZnIKKworICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzM3OiBJbXBsZW1lbnQgX3Nlc3Nfb3BlbiBpbiB0ZXJtcworICAgb2Ygc25tcF9zZXNzX2FkZAogCiAyMDA3LTA1LTE3IDIyOjE2ICBtYWdmcgogCi0JKiBhZ2VudC9hZ2VudF90cmFwLmMsIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdHJhcGQuYywKLQkgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsCi0JICBzbm1wbGliL3NubXBfYXBpLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2MjA0MjQ6IEZpeCBub3RpZmljYXRpb24gc2VuZGluZyBzbyB0aGF0Ci0JICBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIHBvcnQgMTYyIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQotCSAgQ0hBTkdFUzogc25tcHRyYXBkOiBQQVRDSDogMTYyMDQyNDogRml4IG5vdGlmaWNhdGlvbiByZWNlcHRpb24gc28KLQkgIHRoYXQgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBwb3J0IDE2MiBzaG91bGQgYmUgdW5uZWNlc3NhcnkKLQkgIENIQU5HRVM6IGFwcHM6IFBBVENIOiAxNjIwNDI0OiBGaXggbm90aWZpY2F0aW9uIHNlbmRpbmcgc28gdGhhdAotCSAgZXhwbGljaXQgc3BlY2lmaWNhdGlvbiBvZiBwb3J0IDE2MiBzaG91bGQgYmUgdW5uZWNlc3NhcnkKLQkgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjIwNDI0OiBIb25vcgotCSAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUIG92ZXIgdGhlIGRlZmF1bHQgc3lzdGVtCisgICAqICBhZ2VudC9hZ2VudF90cmFwLmMsIGFwcHMvc25tcHRyYXAuYywgYXBwcy9zbm1wdHJhcGQuYywgICAKKyAgICAgIHNubXBsaWIvc25tcFVEUERvbWFpbi5jLCBzbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMsICAgCisgICAgICBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTYyMDQyNDogRml4IG5vdGlmaWNhdGlvbiBzZW5kaW5nIHNvIHRoYXQKKyAgIGV4cGxpY2l0IHNwZWNpZmljYXRpb24gb2YgcG9ydCAxNjIgc2hvdWxkIGJlIHVubmVjZXNzYXJ5CisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IFBBVENIOiAxNjIwNDI0OiBGaXggbm90aWZpY2F0aW9uIHJlY2VwdGlvbiBzbworICAgdGhhdCBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIHBvcnQgMTYyIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQorICAgQ0hBTkdFUzogYXBwczogUEFUQ0g6IDE2MjA0MjQ6IEZpeCBub3RpZmljYXRpb24gc2VuZGluZyBzbyB0aGF0CisgICBleHBsaWNpdCBzcGVjaWZpY2F0aW9uIG9mIHBvcnQgMTYyIHNob3VsZCBiZSB1bm5lY2Vzc2FyeQorICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2MjA0MjQ6IEhvbm9yCisgICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgb3ZlciB0aGUgZGVmYXVsdCBzeXN0ZW0KIAogMjAwNy0wNS0xNyAyMTo1MyAgaGFyZGFrZXIKIAotCSogYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYywKLQkgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYywKLQkgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywKLQkgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNzEwNjMyOiBmcm9tIG1hdmFybGV5OiBmaXggbWVtb3J5IGxlYWsgb24KLQkgIGJyb2tlbiBjb250YWluZXIgaW5zZXJ0aW9ucyBmb3IgdGhlIGlwQWRkcmVzc1RhYmxlCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBwYXRjaDogMTcxMDYzMjogZnJvbSBtYXZhcmxleTogZml4IG1lbW9yeSBsZWFrIG9uCisgICBicm9rZW4gY29udGFpbmVyIGluc2VydGlvbnMgZm9yIHRoZSBpcEFkZHJlc3NUYWJsZQogCiAyMDA3LTA1LTE3IDE4OjA2ICByc3RvcnkKIAotCSogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmM6Ci0JICBDSEFOR0VTOiBQQVRDSDogMTcxOTI0NDogZml4IG1mZCBnZW5lcmF0aW5nIG1hcCBmdW5jdGlvbgorICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyYWN0aXZlLXNldHVwLm0yYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE3MTkyNDQ6IGZpeCBtZmQgZ2VuZXJhdGluZyBtYXAgZnVuY3Rpb24KKworMjAwNy0wNS0xNyAxNzo0NiAgaGFyZGFrZXIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmg6CisKKyAgIE5FV1M6IHNubXBkOiBwYXRjaDogMTcwODI0MzogZnJvbSBuaG9ybWFuOiBpbXBsZW1lbnQgdGhlCisgICBpcERlZmF1bHRSb3V0ZVRhYmxlIG9uIGxpbnV4CiAKIDIwMDctMDUtMTcgMTY6MzEgIGhhcmRha2VyCiAKLQkqIGNvbmZpZ3VyZS5pbjoKLQkgIE5FV1M6IHBvcnRzOiBwYXRjaDogMTcwNjM0NDogZnJvbSBuYXlsb3I6IGZpeCBjb21waWxhdGlvbiB3aXRoCi0JICBjeWd3aW4KKyAgICogY29uZmlndXJlLmluOgorCisgICBORVdTOiBwb3J0czogcGF0Y2g6IDE3MDYzNDQ6IGZyb20gbmF5bG9yOiBmaXggY29tcGlsYXRpb24gd2l0aAorICAgY3lnd2luCiAKIDIwMDctMDUtMTcgMTY6MjIgIGhhcmRha2VyCiAKLQkqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKLQkgIE5FV1M6IHNubXBkOiBwYXRjaDogMTcwMDE1NzogZnJvbSBhZnJpa2E6IGZpeGVzIG9yZGVyaW5nIG9mIGV4ZWMKLQkgIHRva2VucyBpbiB0aGUgcmVzdWx0aW5nIG1pYiB0cmVlCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYzoKKworICAgTkVXUzogc25tcGQ6IHBhdGNoOiAxNzAwMTU3OiBmcm9tIGFmcmlrYTogZml4ZXMgb3JkZXJpbmcgb2YgZXhlYworICAgdG9rZW5zIGluIHRoZSByZXN1bHRpbmcgbWliIHRyZWUKIAogMjAwNy0wNS0xNyAxNTo1MyAgaGFyZGFrZXIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE2MTcyNTU6IGZpeCBsZW5ndGggb2YgdGhlIGhpc3RvcnkgYXJyYXkKLQkgIHRvIG1hdGNoIGNvZGUuCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE2MTcyNTU6IGZpeCBsZW5ndGggb2YgdGhlIGhpc3RvcnkgYXJyYXkKKyAgIHRvIG1hdGNoIGNvZGUuCiAKIDIwMDctMDUtMTcgMTM6NTMgIGhhcmRha2VyCiAKLQkqIGFnZW50L3NubXBkLmMsIGFwcHMvc25tcHRyYXBkLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDEyMjU0NDA6IEFwcGx5IGludGVudCBvZiBwYXRjaDogdG8gZGVsYXkKLQkgIHNpZ2h1cCB0aWxsIGl0IGlzIHNhZmUuCi0JICBDSEFOR0VTOiBzbm1wdHJhcGQ6IHBhdGNoOiAxMjI1NDQwOiBBcHBseSBpbnRlbnQgb2YgcGF0Y2g6IHRvCi0JICBkZWxheSBzaWdodXAgdGlsbCBpdCBpcyBzYWZlLgorICAgKiBhZ2VudC9zbm1wZC5jLCBhcHBzL3NubXB0cmFwZC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDEyMjU0NDA6IEFwcGx5IGludGVudCBvZiBwYXRjaDogdG8gZGVsYXkKKyAgIHNpZ2h1cCB0aWxsIGl0IGlzIHNhZmUuCisgICBDSEFOR0VTOiBzbm1wdHJhcGQ6IHBhdGNoOiAxMjI1NDQwOiBBcHBseSBpbnRlbnQgb2YgcGF0Y2g6IHRvCisgICBkZWxheSBzaWdodXAgdGlsbCBpdCBpcyBzYWZlLgorCisyMDA3LTA1LTE3IDEzOjM1ICBtYWdmcgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg6CisKKyAgIENIQU5HRVM6IGJ1aWxkaW5nOiBVc2UgY29uZmlnX2Vycm9yIGluc3RlYWQgb2YgY29uZmlnX3JlcXVpcmUgb2YKKyAgIGEgYm9ndXMgZmlsZS8jZXJyb3IgdG8gZ2VuZXJhdGUgZXJyb3IgbWVzc2FnZXMgYXQgY29uZmlndXJlIHRpbWUuCiAKIDIwMDctMDUtMTcgMDQ6MzkgIGhhcmRha2VyCiAKLQkqIHNubXBsaWIvYXNuMS5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2g6IDE2NDU2OTg6IGZpeCA2NC1iaXQgc2lnbmVkIGludGVnZXIKLQkgIGVuY29kaW5nCisgICAqIGFwcHMvc25tcHVzbS5jLCBzbm1wbGliL2FzbjEuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogcGF0Y2g6IDE2NDU2OTg6IGZpeCA2NC1iaXQgc2lnbmVkIGludGVnZXIKKyAgIGVuY29kaW5nCiAKIDIwMDctMDUtMTYgMjM6NTMgIHRhbmRlcnMKIAotCSogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oOgotCSAgQ0hBTkdFUzogSFAtVVg6IEhQLVVYIG5lZWRzIF9SRUVOVFJBTlQgZGVmaW5lZCB0byBwaWNrIHVwCi0JICBzdHJ0b2tfci4KLQkgIE90aGVyd2lzZSwgYXQgbGVhc3QgZm9yIDY0LWJpdCBjb2RlLCBzdHJ0b2tfciB3aWxsIG5vdCB3b3JrCi0JICBhbmQgd2lsbCBtYWtlIG5ldC1zbm1wIHNlZ2ZhdWx0LgorICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4Lmg6CisKKyAgIENIQU5HRVM6IEhQLVVYOiBIUC1VWCBuZWVkcyBfUkVFTlRSQU5UIGRlZmluZWQgdG8gcGljayB1cAorICAgc3RydG9rX3IuCisgICBPdGhlcndpc2UsIGF0IGxlYXN0IGZvciA2NC1iaXQgY29kZSwgc3RydG9rX3Igd2lsbCBub3Qgd29yaworICAgYW5kIHdpbGwgbWFrZSBuZXQtc25tcCBzZWdmYXVsdC4KKworMjAwNy0wNS0xNiAyMzozOSAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbjoKKworICAgZml4IHBhdGNoIDE2MjUwNjkgKHIxNjM2NSkgdG8gbm90IGJyZWFrIHRoZSBidWlsZCBvbiBTb2xhcmlzCisgICAyLjYvNworCisyMDA3LTA1LTE1IDE3OjMzICByc3RvcnkKKworICAgKiBkaXN0L3N2bnVwOgorCisgICAtIGFkZCB3YXJuaW5nIGlmIHN0YXIgbm90IGF2YWlsYWJsZQorICAgLSBmaXggcGF0dGVybiB0byBleGNsdWRlIC5zdm4gZGlycyBmcm9tIHRhcmJhbGxzCisKKzIwMDctMDUtMTUgMTU6NTUgIHJzdG9yeQorCisgICAqIGRpc3QvY3ZzdXA6CisKKyAgIHdhcm4gaWYgc3RhciBub3QgYXZhaWxhYmxlCiAKIDIwMDctMDUtMTUgMTQ6MzYgIHRhbmRlcnMKIAotCSogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmM6Ci0JICBmaXggdHlwbworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYzoKKworICAgZml4IHR5cG8KIAogMjAwNy0wNS0xNCAyMTo0OSAgdGFuZGVycwogCi0JKiBhcHBzL01ha2VmaWxlLmluOgotCSAgYWRkIG1pc3NpbmcgQ0ZMQUdTIHRvIGxpbmsgbGluZQorICAgKiBhcHBzL01ha2VmaWxlLmluOgorCisgICBhZGQgbWlzc2luZyBDRkxBR1MgdG8gbGluayBsaW5lCiAKIDIwMDctMDUtMTQgMjE6NDggIHRhbmRlcnMKIAotCSogYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjoKLQkgIGFkZCBtaXNzaW5nIENGTEFHUyB0byBsaW5rIGxpbmUKKyAgICogYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbjoKKworICAgYWRkIG1pc3NpbmcgQ0ZMQUdTIHRvIGxpbmsgbGluZQorCisyMDA3LTA1LTE0IDE1OjU3ICBoYXJkYWtlcgorCisgICAqICBhZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYywgY29uZmlndXJlLCBjb25maWd1cmUuaW4sICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOgorCisgICBDSEFOR0VTOiBzbm1wZDogcGF0Y2g6IDE2MjUwNjk6IHNwZWVkIGltcHJvdmVtZW50cyBmb3Igc29sYXJpcworICAgcm91dGluZyB0YWJsZSBhY2Nlc3MKIAogMjAwNy0wNS0xNCAxNDo1MCAgaGFyZGFrZXIKIAotCSogYWdlbnQvc25tcF9hZ2VudC5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNTk1NTY4OiBmcm9tIGN5cmlsX21hcmdhcmlhOiBmaXgKLQkgIGRlbGVnYXRlZCBTRVQgcmVxdWVzdHMgZnJvbSBhZ2VudHggc3ViYWdlbnRzCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IHBhdGNoOiAxNTk1NTY4OiBmcm9tIGN5cmlsX21hcmdhcmlhOiBmaXgKKyAgIGRlbGVnYXRlZCBTRVQgcmVxdWVzdHMgZnJvbSBhZ2VudHggc3ViYWdlbnRzCisKKzIwMDctMDUtMTQgMTQ6MDQgIGhhcmRha2VyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgdXBkYXRlIHRvIHBvaW50IHRvIHdpa2kgYW5kIGEgZmV3IG1vcmUgY3ZzIC0+IHN2biBjaGFuZ2VzCiAKIDIwMDctMDUtMTMgMTQ6MjcgIG1hZ2ZyCiAKLQkqIHNubXBsaWIvc25tcF9zZXJ2aWNlLmM6Ci0JICBDSEFOR0VTOiBzbm1wbGliOiBSZWFkIHRoZSBjb25maWcgcGFyYW1ldGVycyBkZWZUYXJnZXQgYW5kCi0JICBkZWZEb21haW4gZnJvbSBzbm1wLmNvbmYgYXMgd2VsbCBhcyBmcm9tIDxhcHBsaWNhdGlvbj4uY29uZgorICAgKiBzbm1wbGliL3NubXBfc2VydmljZS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBSZWFkIHRoZSBjb25maWcgcGFyYW1ldGVycyBkZWZUYXJnZXQgYW5kCisgICBkZWZEb21haW4gZnJvbSBzbm1wLmNvbmYgYXMgd2VsbCBhcyBmcm9tIDxhcHBsaWNhdGlvbj4uY29uZgorCisyMDA3LTA1LTEyIDExOjE3ICBtYWdmcgorCisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IERlYWxsb2NhdGUgdGhlIF9taWJpbmRleGVzIGNhY2hlIGluCisgICBzaHV0ZG93bl9taWIgdG8gbWFrZSBmb3IgYSBjbGVhbmVyIGV4aXQgb2YgdGhlIGxpYnJhcnkKIAogMjAwNy0wNS0xMiAxMToxNCAgbWFnZnIKIAotCSogc25tcGxpYi9taWIuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IERlYWxsb2NhdGUgdGhlIGNvbmZtaWJzIGFuZCBjb25mbWliZGlycwotCSAgdmFyaWFibGVzIGluIHNodXRkb3duX21pYiB0byBtYWtlIGZvciBhIGNsZWFuZXIgZXhpdCBvZiB0aGUKLQkgIGxpYnJhcnkKKyAgICogc25tcGxpYi9taWIuYzoKKworICAgQ0hBTkdFUzogc25tcGxpYjogRGVhbGxvY2F0ZSB0aGUgY29uZm1pYnMgYW5kIGNvbmZtaWJkaXJzCisgICB2YXJpYWJsZXMgaW4gc2h1dGRvd25fbWliIHRvIG1ha2UgZm9yIGEgY2xlYW5lciBleGl0IG9mIHRoZQorICAgbGlicmFyeQogCiAyMDA3LTA1LTExIDIxOjA2ICBtYWdmcgogCi0JKiBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjg3MzM2OiBTdGFydCB1c2luZyB0aGUgZW5oYW5jZWQKLQkgIHJlYWRfY29uZmlnIGludGVyZmFjZQorICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2ODczMzY6IFN0YXJ0IHVzaW5nIHRoZSBlbmhhbmNlZAorICAgcmVhZF9jb25maWcgaW50ZXJmYWNlCiAKIDIwMDctMDUtMTEgMjA6MzMgIG1hZ2ZyCiAKLQkqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKLQkgIFBBVENIIDE2ODczMjk6IEFwcGxpZWQgcGFydCAyIG9mIHRoZSBwYXRjaCAtIFdoZW4gcmVnaXN0ZXJpbmcKLQkgIG11bHRpcGxlIHByZW1pYiBoYW5kbGVycyBvbmx5IHRoZSBsYXN0IG9uZSB3YXMgcmVnaXN0ZXJlZCBwcmVtaWIsCi0JICB0aGUgb3RoZXJzIHdlcmUgcmVnaXN0ZXJkIGF0IHRoZSBub3JtYWwgdGltZS4gVGhpcyBwYXRjaCBwdXRzIGFsbAotCSAgcmVnaXN0cmF0aW9uIGluIG9uZSBmdW5jdGlvbiB0aGF0IHRha2VzIHRoZSBwcm9ibGVtYXRpYyB2YWx1ZSBhcwotCSAgYW4gYXJndW1lbnQgYW5kIG1ha2VzIHRoZSBvbGQgZnVuY3Rpb25zIHRoaW4gd3JhcHBlcnMgb2YgdGhlIG5ldwotCSAgb25lCisgICAqIHNubXBsaWIvcmVhZF9jb25maWcuYzoKKworICAgUEFUQ0ggMTY4NzMyOTogQXBwbGllZCBwYXJ0IDIgb2YgdGhlIHBhdGNoIC0gV2hlbiByZWdpc3RlcmluZworICAgbXVsdGlwbGUgcHJlbWliIGhhbmRsZXJzIG9ubHkgdGhlIGxhc3Qgb25lIHdhcyByZWdpc3RlcmVkIHByZW1pYiwKKyAgIHRoZSBvdGhlcnMgd2VyZSByZWdpc3RlcmQgYXQgdGhlIG5vcm1hbCB0aW1lLiBUaGlzIHBhdGNoIHB1dHMgYWxsCisgICByZWdpc3RyYXRpb24gaW4gb25lIGZ1bmN0aW9uIHRoYXQgdGFrZXMgdGhlIHByb2JsZW1hdGljIHZhbHVlIGFzCisgICBhbiBhcmd1bWVudCBhbmQgbWFrZXMgdGhlIG9sZCBmdW5jdGlvbnMgdGhpbiB3cmFwcGVycyBvZiB0aGUgbmV3CisgICBvbmUKIAogMjAwNy0wNS0xMSAyMDoyNCAgbWFnZnIKIAotCSogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotCSAgQ0hBTkdFOiBzbm1wbGliOiBQQVRDSCAxNjg3MzI5OiBBcHBsaWVkIHBhcnQgMyBvZiB0aGUgcGF0Y2ggLSB1c2UKLQkgIHRoZSBzYW1lIGFsZ29yaXRobSB0byBkZXRlcm1pbmUgd2hhdCB0byB1bnJlZ2lzdGVyIGFzIGlzIHVzZWQgdG8KLQkgIGRldGVybWluZSB3aGF0IHRvIHJlZ3N0ZXIKKyAgICogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgorCisgICBDSEFOR0U6IHNubXBsaWI6IFBBVENIIDE2ODczMjk6IEFwcGxpZWQgcGFydCAzIG9mIHRoZSBwYXRjaCAtIHVzZQorICAgdGhlIHNhbWUgYWxnb3JpdGhtIHRvIGRldGVybWluZSB3aGF0IHRvIHVucmVnaXN0ZXIgYXMgaXMgdXNlZCB0bworICAgZGV0ZXJtaW5lIHdoYXQgdG8gcmVnc3RlcgogCiAyMDA3LTA1LTExIDE2OjMyICBtYWdmcgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3Byb2MuYzoKLQkgIERvbid0IGxvZyBob3N0L2hyX3Byb2MgZXZlbnRzIGluIHRoZSBzbm1wZCBkb21haW4KKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmM6CisKKyAgIERvbid0IGxvZyBob3N0L2hyX3Byb2MgZXZlbnRzIGluIHRoZSBzbm1wZCBkb21haW4KIAogMjAwNy0wNS0xMSAxNjoyNyAgbWFnZnIKIAotCSogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6Ci0JICBEZWNvcmF0ZSBtb3JlIGRlYnVnIGxpbmVzIHdpdGggdGhlIHRhZyB0aGF0IGNvbnRyb2xzIHRoZSBsb2cKKyAgICogYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmM6CisKKyAgIERlY29yYXRlIG1vcmUgZGVidWcgbGluZXMgd2l0aCB0aGUgdGFnIHRoYXQgY29udHJvbHMgdGhlIGxvZwogCiAyMDA3LTA1LTExIDE1OjA3ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2Mjg2MTM6IFJlc3RvcmUgbWVtVG90YWxGcmVlLjAgb24gU29sYXJpcworICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTYyODYxMzogUmVzdG9yZSBtZW1Ub3RhbEZyZWUuMCBvbiBTb2xhcmlzCiAKIDIwMDctMDUtMTAgMjE6NTIgIHRhbmRlcnMKIAotCSogTWFrZWZpbGUuaW4sIHB5dGhvbi9zZXR1cC5weToKLQkgIE5FV1M6IHB5dGhvbjogUEFUQ0g6IDE3MTYxMTQ6IExldCBweXRob24gYnVpbGQgaW4gc291cmNlIHRyZWUKLQkgIFBhdGNoIHByb3ZpZGVkIGJ5IEpvY2hlbiBGcmllZHJpY2ggKERlYmlhbiBwYXRjaCAjMzgpLgorICAgKiBNYWtlZmlsZS5pbiwgcHl0aG9uL3NldHVwLnB5OgorCisgICBORVdTOiBweXRob246IFBBVENIOiAxNzE2MTE0OiBMZXQgcHl0aG9uIGJ1aWxkIGluIHNvdXJjZSB0cmVlCisgICBQYXRjaCBwcm92aWRlZCBieSBKb2NoZW4gRnJpZWRyaWNoIChEZWJpYW4gcGF0Y2ggIzM4KS4KIAogMjAwNy0wNS0xMCAwNToxOCAgbWFnZnIKIAotCSogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotCSAgUEFUQ0ggMTY4NzMyOTogQXBwbGllZCBwYXJ0IDEgb2YgdGhlIHBhdGNoIC0gbGVzc2VucyB0aGUgc2NvcGUgb2YKLQkgIHRoZSBsdG1wMiB2YXJpYWJsZQorICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIFBBVENIIDE2ODczMjk6IEFwcGxpZWQgcGFydCAxIG9mIHRoZSBwYXRjaCAtIGxlc3NlbnMgdGhlIHNjb3BlIG9mCisgICB0aGUgbHRtcDIgdmFyaWFibGUKIAogMjAwNy0wNS0wOSAyMzo1NyAgdGFuZGVycwogCi0JKiBSRUFETUUuaXJpeDoKLQkgIGRvY3VtZW50IG9wdGltaXplZCBJUklYIGNwdSBzdGF0cworICAgKiBSRUFETUUuaXJpeDoKKworICAgZG9jdW1lbnQgb3B0aW1pemVkIElSSVggY3B1IHN0YXRzCiAKIDIwMDctMDUtMDkgMjM6NDkgIHRhbmRlcnMKIAotCSogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsCi0JICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uYywKLQkgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5oOgotCSAgTkVXUzogaXJpeDogUEFUQ0g6IDE3MDk3NDg6IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cworICAgKiAgYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2luZm8uYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzaW5mby5oOgogCi0yMDA3LTA1LTA5IDIyOjE2ICB0YW5kZXJzCisgICBORVdTOiBpcml4OiBQQVRDSDogMTcwOTc0ODogT3B0aW1pemVkIElSSVggY3B1IHN0YXRzCiAKLQkqIGFnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5jOgotCSAgRml4IHByb2JsZW1zIHdpdGggc2luZ2xlLWxpbmUgZXh0ZW5kIHNjcmlwdHMuCi0JICAoZml4IHR5cG8gaW4gcjE2MzMyIGZvciA1LjQueCkKKzIwMDctMDUtMDkgMjE6MjMgIHJzdG9yeQogCi0yMDA3LTA1LTA5IDAxOjEwICBhbGV4X2IKKyAgICogZGlzdC9jdnNzaG93OgogCi0JKiB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiwgd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW46Ci0JICBXaW4zMiBidWlsZCBmaXhlcy4KKyAgIHVwZGF0ZSB0byBzaG93IHN2biByZXBvIHRvbworCisyMDA3LTA1LTA5IDE1OjM5ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBpY21wU3RhdHNUYWJsZSBpcyBvbmx5IGltcGxlbWVudGVkIGZvciBMaW51eAogCiAyMDA3LTA1LTA4IDE5OjQ4ICBtYWdmcgogCi0JKiBhZ2VudC9zbm1wX2FnZW50LmM6Ci0JICBSZXZlcnQgbWlzdGFrZW5seSBjb21taXR0ZWQgZXh0cmEgdHJhY2UgbG9ncworICAgKiBhZ2VudC9zbm1wX2FnZW50LmM6CisKKyAgIFJldmVydCBtaXN0YWtlbmx5IGNvbW1pdHRlZCBleHRyYSB0cmFjZSBsb2dzCiAKIDIwMDctMDUtMDcgMjA6NDYgIGhhcmRha2VyCiAKLQkqIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLAotCSAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHMsCi0JICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvdGVzdC5wbDoKLQkgIHVwZGF0ZSBhZ2VudDo6ZGVmYXVsdF9zdG9yZSBwZXJsIG1vZHVsZSBmb3IgbmV3IGRlZnMKKyAgICogIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCAgIAorICAgICAgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUueHMsICAgCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvdGVzdC5wbDoKKworICAgdXBkYXRlIGFnZW50OjpkZWZhdWx0X3N0b3JlIHBlcmwgbW9kdWxlIGZvciBuZXcgZGVmcworCisyMDA3LTA1LTA3IDIwOjI0ICBoYXJkYWtlcgorCisgICAqIGRpc3QvcGF0bWU6CisKKyAgIG1vcmUgc3ZuIGNvbnZlcnNpb24gZml4ZXMKIAogMjAwNy0wNS0wNyAyMDoyMyAgaGFyZGFrZXIKIAotCSogYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF9hZ2VudC5jLAotCSAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCBtYW4vc25tcGQuY29uZi41LmRlZjoKLQkgIE5FV1M6IHNubXBkOiBCVUc6IDE3MTI5ODg6IGRlZmF1bHQgYW5kIGNvbmZpZ3VyYWJsZSBtYXhpbXVtCi0JICBudW1iZXIgb2YgdmFyYmluZHMgcmV0dXJuYWJsZSB0byBhIEdFVEJVTEsgcmVxdWVzdAorICAgKiAgYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYywgYWdlbnQvc25tcF9hZ2VudC5jLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oLCBtYW4vc25tcGQuY29uZi41LmRlZjoKKworICAgTkVXUzogc25tcGQ6IEJVRzogMTcxMjk4ODogZGVmYXVsdCBhbmQgY29uZmlndXJhYmxlIG1heGltdW0KKyAgIG51bWJlciBvZiB2YXJiaW5kcyByZXR1cm5hYmxlIHRvIGEgR0VUQlVMSyByZXF1ZXN0CisKKzIwMDctMDUtMDcgMjA6MDUgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgcmVuYW1lIG9mIGJyYW5jaCBkaXJzCisKKzIwMDctMDUtMDcgMTY6MTQgIGhhcmRha2VyCisKKyAgICogZGlzdC9wYXRtZToKKworICAgYXR0ZW1wdGVkICh1bnRlc3RlZCkgdXBkYXRlCisKKzIwMDctMDUtMDcgMTM6NTUgIHJzdG9yeQorCisgICAqIGRpc3Qvc3ZudXA6CisKKyAgIGRvbid0IGRlbGV0ZSB0YXJiYWxsIGlmIHNjcCBmYWlscwogCiAyMDA3LTA1LTA0IDIwOjI3ICB0YW5kZXJzCiAKLQkqIHBlcmwvU05NUC9TTk1QLnhzOgotCSAgQ0hBTkdFUzogcGVybDogZml4IFNOTVAgU0VUIGZvciBJUCBhZGRyZXNzZXMgb24gNjQtYml0CisgICAqIHBlcmwvU05NUC9TTk1QLnhzOgorCisgICBDSEFOR0VTOiBwZXJsOiBmaXggU05NUCBTRVQgZm9yIElQIGFkZHJlc3NlcyBvbiA2NC1iaXQKIAogMjAwNy0wNS0wNCAxMDoyMiAgdGFuZGVycwogCi0JKiBNYWtlZmlsZS5pbjoKLQkgIGluc3RhbGwgZHJhZ29uZmx5LmgKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIGluc3RhbGwgZHJhZ29uZmx5LmgKIAogMjAwNy0wNS0wMyAyMzowMSAgdGFuZGVycwogCi0JKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kcmFnb25mbHkuaDoKLQkgIENIQU5HRVM6IEJVRzogMTcxMDkxMDogaW5pdGlhbCBzdXBwb3J0IGZvciBEcmFnb25GbHkgQlNECisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RyYWdvbmZseS5oOgorCisgICBDSEFOR0VTOiBCVUc6IDE3MTA5MTA6IGluaXRpYWwgc3VwcG9ydCBmb3IgRHJhZ29uRmx5IEJTRAogCiAyMDA3LTA1LTAzIDIyOjEwICB0YW5kZXJzCiAKLQkqIHBlcmwvU05NUC9TTk1QLnhzOgotCSAgQ0hBTkdFUzogcGVybDogZml4IFNOTVAgU0VUIGZvciBJUCBhZGRyZXNzZXMgb24gNjQtYml0Ci0JICBQYXRjaCBwcm9wb3NlZCBieSBKZWZmIExhbmdlLgorICAgKiBwZXJsL1NOTVAvU05NUC54czoKKworICAgQ0hBTkdFUzogcGVybDogZml4IFNOTVAgU0VUIGZvciBJUCBhZGRyZXNzZXMgb24gNjQtYml0CisgICBQYXRjaCBwcm9wb3NlZCBieSBKZWZmIExhbmdlLgorCisyMDA3LTA1LTAzIDE2OjAwICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jOgorCisgICBidWlsZCBmaXggKGUuZy4gZm9yIGVhcmx5IEFJWCk6IHVzZSB1aW50MzJfdCBpLnMuby4gX191aW50MzJfdAogCiAyMDA3LTA1LTAyIDEzOjEzICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKLQkgIEZpeCBwcm9ibGVtcyB3aXRoIHNpbmdsZS1saW5lIGV4dGVuZCBzY3JpcHRzLgorICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKKworICAgRml4IHByb2JsZW1zIHdpdGggc2luZ2xlLWxpbmUgZXh0ZW5kIHNjcmlwdHMuCisKKzIwMDctMDUtMDEgMTk6NTEgIHJzdG9yeQorCisgICAqIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgLSB0ZXN0IGZvciBJRkFfRl9URU1QT1JBUlkgYmVmb3JlIHVzaW5nCisgICAtIHJlbW92ZSByZWR1bmRhbnQgaWZkZWYKIAogMjAwNy0wNS0wMSAxMTozNCAgZHRzMTIKIAotCSogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKLQkgIENIQU5HRVM6IHNubXB0cmFwZDogU3VwcG9ydCBmb3IgZm9yd2FyZGluZyB0cmFwcyBieSBPSUQgc3VidHJlZS4KLQkgIChDb25zaXN0ZW50IHdpdGggc3VidHJlZS1iYXNlZCBzY3JpcHQgcHJvY2Vzc2luZykuCisgICAqIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmM6CisKKyAgIENIQU5HRVM6IHNubXB0cmFwZDogU3VwcG9ydCBmb3IgZm9yd2FyZGluZyB0cmFwcyBieSBPSUQgc3VidHJlZS4KKyAgIChDb25zaXN0ZW50IHdpdGggc3VidHJlZS1iYXNlZCBzY3JpcHQgcHJvY2Vzc2luZykuCisKKzIwMDctMDQtMzAgMTQ6NTEgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMzAwNDogQ29uc29saWRhdGUgc25tcDYgaGFuZGxpbmcuCisgICBQYXRjaCBzdXBwbGllZCBieSBOZWlsIEhvcm1hbiwgcGx1cyBzb21lIGV4dHJhIHRpZHlpbmcgdXAuCisKKzIwMDctMDQtMzAgMTQ6MzMgIGR0czEyCisKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jLCBhZ2VudC9taWJncm91cC9taWJJSS9pY21wLmg6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTcwMjM2NjogU3VwcG9ydCBmb3IgaWNtcFN0YXRzVGFibGUKKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IE5laWwgSG9ybWFuCisKKzIwMDctMDQtMzAgMTQ6MzEgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYywgYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMsIAorICAgICAgICBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAyMzYxOiBSZWFkIHN0YXRzIGZyb20gL3Byb2MvbmV0L3NubXA2CisKKzIwMDctMDQtMzAgMTQ6MTQgIGR0czEyCisKKyAgICogIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYzoKKworICAgRml4IGNvbXBpbGF0aW9uIHByb2JsZW1zIHdoZW4gSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkLgogCiAyMDA3LTA0LTMwIDEzOjI2ICBkdHMxMgogCi0JKiBSRUFETUUuYWdlbnQtbWlicywgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYywKLQkgIGFnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmg6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDA3Mzc6IFRpZHkgdXAgc2V0U2VyaWFsTm8KLQkgIGltcGxlbWVudGF0aW9ucy4KKyAgICogIFJFQURNRS5hZ2VudC1taWJzLCBhZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uaDoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAwNzM3OiBUaWR5IHVwIHNldFNlcmlhbE5vCisgICBpbXBsZW1lbnRhdGlvbnMuCiAKIDIwMDctMDQtMzAgMTM6MDYgIGR0czEyCiAKLQkqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAwNzMyOiBGaXggZGVidWcgb3V0cHV0IHN0YXRlbWVudHMuCisgICAqIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDA3MzI6IEZpeCBkZWJ1ZyBvdXRwdXQgc3RhdGVtZW50cy4KIAogMjAwNy0wNC0zMCAxMzowMiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNzAwNzMwOiBSZW1vdmUgdW51c2VkIGV4dGVybiBkZWNsYXJhdGlvbi4KKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE3MDA3MzA6IFJlbW92ZSB1bnVzZWQgZXh0ZXJuIGRlY2xhcmF0aW9uLgogCiAyMDA3LTA0LTMwIDExOjMyICBkdHMxMgogCi0JKiBhZ2VudC9oZWxwZXJzL2luc3RhbmNlLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2OTgxODQ6IFJlZ2lzdGVyIG5vbi1kZWZhdWx0IGNvbnRleHQKLQkgIGludGVnZXJzIGFzIHdyaXRhYmxlLgotCSAgUGF0Y2ggcHJvdmlkZWQgYnkgTWFyayBOYXlsb3IuCisgICAqIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjk4MTg0OiBSZWdpc3RlciBub24tZGVmYXVsdCBjb250ZXh0CisgICBpbnRlZ2VycyBhcyB3cml0YWJsZS4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IE1hcmsgTmF5bG9yLgorCisyMDA3LTA0LTMwIDExOjI2ICBkdHMxMgorCisgICAqICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjk4MTc6IEltcHJvdmVkIFJGQyA0MjkzIHN1cHBvcnQuCisgICBJbmNsdWRlcyBub24tdW5pY2FzdCBhbmQgcmFuZG9tbHkgY2hvc2VuIElQIGFkZHJlc3Nlcy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IFZhcnVuIENoYW5kcmFtb2hhbgogCiAyMDA3LTA0LTMwIDExOjA0ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjkyNzY4OiBGaXggY29weWluZyBvZiBub24tb2N0ZXQtYWxpZ25lZAotCSAgSVAgYWRkcmVzcyBwcmVmaXhlcy4KKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjkyNzY4OiBGaXggY29weWluZyBvZiBub24tb2N0ZXQtYWxpZ25lZAorICAgSVAgYWRkcmVzcyBwcmVmaXhlcy4KKworMjAwNy0wNC0zMCAxMDo1MCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2xpbnV4LmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgsICAgCisgICAgICBhZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jLAorICAgICAgICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jLCBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgsICAgCisgICAgICBpbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NzA1MTE6IEltcGxlbWVudCBuZXR3b3JrIGNvbm5lY3Rpb24KKyAgIHByb2Nlc3MgSUQgb2JqZWN0cy4KKyAgIFBhdGNoIHByb3ZpZGVkIGJ5IFZhcnVuIENoYW5kcmFtb2hhbgorCisyMDA3LTA0LTMwIDEwOjQ2ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgorCisgICBGaXggZGVjbGFyYXRpb24gb2Ygc25tcF9zZXNzX3JlYWRfZXh0ZCgpCiAKIDIwMDctMDQtMzAgMTA6MjUgIGR0czEyCiAKLQkqIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMjU6IEZpeCBwcm9ibGVtIHdpdGggb3BlcmF0b3IKLQkgIHByZWNlZGVuY2UuCisgICAqIHNubXBsaWIvZmRfZXZlbnRfbWFuYWdlci5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMyNTogRml4IHByb2JsZW0gd2l0aCBvcGVyYXRvcgorICAgcHJlY2VkZW5jZS4KKworMjAwNy0wNC0zMCAxMDoyMSAgZHRzMTIKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODczMTk6IERlY2xhcmUgc25tcF9zZXNzX3JlYWRfZXh0ZCgpCisKKzIwMDctMDQtMzAgMTA6MTQgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMxODogTWFrZSBfc2Vzc19zZWxwb2xfaW5mbyBzdGF0aWMuCisKKzIwMDctMDQtMzAgMTA6MDkgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMxNzogUmVtb3ZlIGFuIHVudXNlZCBsb2NhbCB2YXJpYWJsZQogCiAyMDA3LTA0LTMwIDEwOjA3ICBkdHMxMgogCi0JKiBzbm1wbGliL3NubXBVbml4RG9tYWluLmMsIHNubXBsaWIvc25tcF9hcGkuYzoKLQkgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjg3MzE2OiBEb24ndCBkcm9wIGNvbnN0IGZyb20gY2FzdHMuCisgICAqIHNubXBsaWIvc25tcFVuaXhEb21haW4uYywgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTY4NzMxNjogRG9uJ3QgZHJvcCBjb25zdCBmcm9tIGNhc3RzLgorCisyMDA3LTA0LTI3IDEwOjIxICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmM6CisKKyAgIEJyaW5nIGR5bmFtaWMgbW9kdWxlIHVubG9hZCBwcm9jZXNzaW5nIG1vcmUgaW50byBsaW5lIHdpdGgKKyAgICJub3JtYWwiIE1JQiBtb2R1bGVzLiBTdWdnZXN0ZWQgYnkgTWFnbnVzIEZyb21yZWlkZS4KKyAgIFNlZSBjb2RlcnMgdGhyZWFkICJzaHV0ZG93bl9mb28gb3IgZGVpbml0X2ZvbyIuCisKKzIwMDctMDQtMjcgMTA6MTcgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgVXBkYXRlIHBvc3QtcmVsZWFzZSBhbm5vdW5jZW1lbnQgaW5zdHJ1Y3Rpb25zLgogCiAyMDA3LTA0LTI0IDEyOjM1ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKLQkgIEZpeCBpbmNvbXBsZXRlIE9JRCBoYW5kbGluZyBvZiBzaW5nbGUtbGluZSBleHRlbmQgc2NyaXB0cy4KLQkgIFJlcG9ydGVkIGJ5IE1heCBvbiBjb2RlcnMgbGlzdCwgN3RoIEFwcmlsLiBTZWUgdGhyZWFkCi0JICAiLi4uIHNlZ2ZhdWx0IC4uIHdoZW4gYXR0ZW1wdGluZyBTTk1QIEdFVCBvbiBleHRlbmQgb3IgZXhlYyBpdGVtIgorICAgKiBhZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYzoKKworICAgRml4IGluY29tcGxldGUgT0lEIGhhbmRsaW5nIG9mIHNpbmdsZS1saW5lIGV4dGVuZCBzY3JpcHRzLgorICAgUmVwb3J0ZWQgYnkgTWF4IG9uIGNvZGVycyBsaXN0LCA3dGggQXByaWwuIFNlZSB0aHJlYWQKKyAgICIuLi4gc2VnZmF1bHQgLi4gd2hlbiBhdHRlbXB0aW5nIFNOTVAgR0VUIG9uIGV4dGVuZCBvciBleGVjIGl0ZW0iCiAKIDIwMDctMDQtMjAgMDg6MzAgIGR0czEyCiAKLQkqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgotCSAgRG9jdW1lbnQgdGhlIGJlaGF2aW91ciBvZiBhIGxvYWQgdGhyZXNob2xkIG9mIDAuCi0JICBSZXBvcnRlZCBieSBGb25nIFRzdWkuCisgICAqIG1hbi9zbm1wZC5jb25mLjUuZGVmOgorCisgICBEb2N1bWVudCB0aGUgYmVoYXZpb3VyIG9mIGEgbG9hZCB0aHJlc2hvbGQgb2YgMC4KKyAgIFJlcG9ydGVkIGJ5IEZvbmcgVHN1aS4KIAogMjAwNy0wNC0yMCAwODoyMSAgZHRzMTIKIAotCSogbWlicy9VQ0QtU05NUC1NSUIudHh0OgotCSAgTG9uZy10ZXJtIGxvYWQgYXZlcmFnZSBpcyBjYWxjdWxhdGVkIG92ZXIgMTUgbWludXRlcywgbm90IDEwLgotCSAgUmVwb3J0ZWQgYnkgRm9uZyBUc3VpCisgICAqIG1pYnMvVUNELVNOTVAtTUlCLnR4dDoKKworICAgTG9uZy10ZXJtIGxvYWQgYXZlcmFnZSBpcyBjYWxjdWxhdGVkIG92ZXIgMTUgbWludXRlcywgbm90IDEwLgorICAgUmVwb3J0ZWQgYnkgRm9uZyBUc3VpCisKKzIwMDctMDQtMTkgMTI6NTMgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgVHdlYWsgQ2hhbmdlTG9nIGluc3RydWN0aW9ucyBmb3IgU1ZOCiAKIDIwMDctMDQtMTAgMTQ6MTYgIGR0czEyCiAKLQkqIHBlcmwvU05NUC9TTk1QLnhzOgotCSAgRGV0ZWN0IE9JRCByZXRyYWNraW5nIChhcyB3ZWxsIGFzIHNpbXBsZSByZXBldGl0aW9ucykgd2hlbgotCSAgYnVsa3dhbGtpbmcgYW4gT0lEIHRyZWUuCi0JICBTZWUgdXNlcnMgdGhyZWFkICJtaXNzaW5nIGluZGljZXMgaW4gYnVsa3dhbGsgcmVzdWx0Ii4KKyAgICogcGVybC9TTk1QL1NOTVAueHM6CisKKyAgIERldGVjdCBPSUQgcmV0cmFja2luZyAoYXMgd2VsbCBhcyBzaW1wbGUgcmVwZXRpdGlvbnMpIHdoZW4KKyAgIGJ1bGt3YWxraW5nIGFuIE9JRCB0cmVlLgorICAgU2VlIHVzZXJzIHRocmVhZCAibWlzc2luZyBpbmRpY2VzIGluIGJ1bGt3YWxrIHJlc3VsdCIuCiAKIDIwMDctMDQtMTAgMTE6NDkgIGR0czEyCiAKLQkqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaDoKLQkgIENsYXJpZnkgY29weXJpZ2h0IHN0YXR1cyBvZiBXaW4zMiBBUEkgZGVmaW5pdGlvbnMuCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaDoKKworICAgQ2xhcmlmeSBjb3B5cmlnaHQgc3RhdHVzIG9mIFdpbjMyIEFQSSBkZWZpbml0aW9ucy4KIAogMjAwNy0wNC0xMCAxMToyNyAgZHRzMTIKIAotCSogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZHluaXguaDoKLQkgIENsYXJpZnkgY29weXJpZ2h0IHN0YXR1cyBvZiBCU0QtZGVyaXZlZCBUQ1BUViogZGVmaW5pdGlvbnMuCisgICAqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2R5bml4Lmg6CiAKLTIwMDctMDQtMDMgMDg6NTkgIHRhbmRlcnMKKyAgIENsYXJpZnkgY29weXJpZ2h0IHN0YXR1cyBvZiBCU0QtZGVyaXZlZCBUQ1BUViogZGVmaW5pdGlvbnMuCiAKLQkqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgotCSAgZml4IHN5bnRheCBlcnJvciBpbnRyb2R1Y2VkIGJ5IGxhc3QgcGF0Y2gKKzIwMDctMDQtMDkgMTQ6MDIgIHJzdG9yeQorCisgICAqIGRpc3Qvc3ZudXA6CisKKyAgIC0gcmVtb3ZlIGRlYnVnZ2luZworICAgLSBjaGVjayByYyBmb3IgdGFyLCBnemlwIGFuZCBzY3Agc3RlcHMKKworMjAwNy0wNC0wNiAxODozOCAgcnN0b3J5CisKKyAgICogZGlzdC9zdm51cDoKKworICAgc3ZuIGVxdWl2YWxlbnQgb2YgY3ZzdXAKIAogMjAwNy0wNC0wMyAwODo1NCAgZHRzMTIKIAotCSogbWFuL3NubXBkLmNvbmYuNS5kZWY6Ci0JICBFbXBoYXNpc2UgdGhlIHVzZSBvZiBTTk1QdjMgaW4gRGlzTWFuIG1vbml0b3JpbmcuCi0JICBGaXggdGhlIHN5bnRheCBvZiBub24tZXhpc3RhbmNlL3ZhbHVlLWNoYW5nZSB0ZXN0cy4KKyAgICogbWFuL3NubXBkLmNvbmYuNS5kZWY6CisKKyAgIEVtcGhhc2lzZSB0aGUgdXNlIG9mIFNOTVB2MyBpbiBEaXNNYW4gbW9uaXRvcmluZy4KKyAgIEZpeCB0aGUgc3ludGF4IG9mIG5vbi1leGlzdGFuY2UvdmFsdWUtY2hhbmdlIHRlc3RzLgogCiAyMDA3LTA0LTAyIDE0OjU1ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMDQ2MzI3OiBSZXNldCAiaW5jbHVkZUFsbERpc2tzIiBmbGFnIHdoZW4KLQkgIHJlbG9hZGluZy4KKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMDQ2MzI3OiBSZXNldCAiaW5jbHVkZUFsbERpc2tzIiBmbGFnIHdoZW4KKyAgIHJlbG9hZGluZy4KIAogMjAwNy0wNC0wMiAxNDo0NSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTYwMjI4NjogRG9uJ3QgbGV0IHRhYmxlIGhvbGVzIGJsb2NrIGxhdGVyCi0JICByb3dzLgorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2MDIyODY6IERvbid0IGxldCB0YWJsZSBob2xlcyBibG9jayBsYXRlcgorICAgcm93cy4KIAogMjAwNy0wNC0wMiAxMzo1MSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTA3Mzc4MjogUmVzdG9yZSBQZXJmU3RhdCB2YWx1ZXMgZm9yIEZyZWVCU0QKLQkgIDUueCBzeXN0ZW1zLgotCSAgSXQncyB1bmNsZWFyIHdoeSB0aGUgIm5ldyIgY2FsY3VsYXRpb24gd2FzIGEpIHByb3Bvc2VkLCBiKQotCSAgd2l0aGRyYXduLAotCSAgYW5kIGMpIHdoYXQgd2FzIHdyb25nIHdpdGggdGhlIHByZXZpb3VzIGNhbGN1bGF0aW9uICh3aGljaCBzZWVtcwotCSAgdG8KLQkgIG1hdGNoIHRoZSBvdXRwdXQgb2YgJ3BzJykKKyAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMDczNzgyOiBSZXN0b3JlIFBlcmZTdGF0IHZhbHVlcyBmb3IgRnJlZUJTRAorICAgNS54IHN5c3RlbXMuCisgICBJdCdzIHVuY2xlYXIgd2h5IHRoZSAibmV3IiBjYWxjdWxhdGlvbiB3YXMgYSkgcHJvcG9zZWQsIGIpCisgICB3aXRoZHJhd24sCisgICBhbmQgYykgd2hhdCB3YXMgd3Jvbmcgd2l0aCB0aGUgcHJldmlvdXMgY2FsY3VsYXRpb24gKHdoaWNoIHNlZW1zCisgICB0bworICAgbWF0Y2ggdGhlIG91dHB1dCBvZiAncHMnKQogCiAyMDA3LTA0LTAyIDEzOjA2ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDkwMjYxMDogRG9uJ3QgZGlzY2FyZCBwZW5kaW5nIGRhdGEgZm9sbG93aW5nCi0JICBhIFRSQVAuCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiA5MDI2MTA6IERvbid0IGRpc2NhcmQgcGVuZGluZyBkYXRhIGZvbGxvd2luZworICAgYSBUUkFQLgogCiAyMDA3LTA0LTAyIDEyOjU2ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDkwMjgwMTogRml4IG9yZGVyaW5nIG9mIFNNVVgtcmVnaXN0ZXJlZAotCSAgc3VidHJlZXMuCisgICAqIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiA5MDI4MDE6IEZpeCBvcmRlcmluZyBvZiBTTVVYLXJlZ2lzdGVyZWQKKyAgIHN1YnRyZWVzLgogCiAyMDA3LTA0LTAyIDEyOjM1ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2ODUwNjc6IE1vcmUgcHJlY2lzZSBoYW5kbGluZyBvZgotCSAgU05NUHYzLWFkbWluIE1JQiB0YWJsZXMuCi0JICBUaGlzIGFjdHVhbGx5IGZpeGVzIHRocmVlIHNlcGFyYXRlIHByb2JsZW1zOgotCSAgKiBBIEdFVCByZXF1ZXN0IGZvciAndmFjbUdyb3VwTmFtZS57Z3JvdXB9LjAue2FueXRoaW5nfScgd2lsbAotCSAgc3VjY2VlZAotCSAgKHNpbmNlIHRoZSAwIHN1YmlkIGFjdHMgYXMgYSBudWxsLXRlcm1pbmF0b3IgZm9yIHRoZSBncm91cCBuYW1lKS4KLQkgICogQSBHRVQgcmVxdWVzdCBmb3IgJ3ZhY21WaWV3VHJlZUZhbWlseVR5cGUuIl9ub25lIi4xJyB3aWxsCi0JICBzdWNjZWVkCi0JICAoaW1wbGljaXRseSBhZGRpbmcgdGhlIHN1YmlkIDAgdG8gdGhlIGluY29tcGxldGUgT0lEIGluZGV4IHZhbHVlKQotCSAgKiBBIEdFVCByZXF1ZXN0IGZvciAndmFjbUFjY2Vzc1N0YXR1cy4iZ3JvdXAiLiIiLjMuNCcgd2lsbAotCSAgc3VjY2VlZAotCSAgKHNpbmNlIFZBQ00gY2hlY2tzIGFjY2VwdCB0aGUgZ2l2ZW4gc2VjdXJpdHkgbGV2ZWwgKm9yKmhpZ2hlciopCisgICAqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jOgogCi0yMDA3LTA0LTAyIDEyOjI2ICBkdHMxMgorICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY4NTA2NzogTW9yZSBwcmVjaXNlIGhhbmRsaW5nIG9mCisgICBTTk1QdjMtYWRtaW4gTUlCIHRhYmxlcy4KKyAgIFRoaXMgYWN0dWFsbHkgZml4ZXMgdGhyZWUgc2VwYXJhdGUgcHJvYmxlbXM6CisgICAqICBBIEdFVCByZXF1ZXN0IGZvciAndmFjbUFjY2Vzc1N0YXR1cy4iZ3JvdXAiLiIiLjMuNCcgd2lsbCAgIAorICAgICAgc3VjY2VlZCAgICAoc2luY2UgVkFDTSBjaGVja3MgYWNjZXB0IHRoZSBnaXZlbiBzZWN1cml0eSBsZXZlbAorICAgICAgKm9yKmhpZ2hlciopICAyMDA3LTA0LTAyIDEyOjI2ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYzoKLQkgIENoZWNrIHRoYXQgR0VUIHJlcXVlc3RzIG1hdGNoIGEgdmFsaWQgT0lELgotCSAgKE90aGVyd2lzZSBhIHJlcXVlc3QgZm9yIGhyU3RvcmFnZXtDb2x1bW59LntpbmRleH0ue2FueXRoaW5nfQotCSAgd2lsbCBpZ25vcmUgdGhlIGV4dHJhIHN1YmlkcywgYW5kIHJldHVybiBzdWNjZXNzKQorCisgICAqIGFnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5jOgorCisgICBDaGVjayB0aGF0IEdFVCByZXF1ZXN0cyBtYXRjaCBhIHZhbGlkIE9JRC4KKyAgIChPdGhlcndpc2UgYSByZXF1ZXN0IGZvciBoclN0b3JhZ2V7Q29sdW1ufS57aW5kZXh9Lnthbnl0aGluZ30KKyAgIHdpbGwgaWdub3JlIHRoZSBleHRyYSBzdWJpZHMsIGFuZCByZXR1cm4gc3VjY2VzcykKIAogMjAwNy0wNC0wMiAxMjoyMSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jOgotCSAgUHJldmVudCBjcmFzaCB3aGVuIHdhbGtpbmcgKGludmFsaWQ/KSBFdmVudC1NSUIgT2JqZWN0cyBUYWJsZS4KKyAgICogYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jOgorCisgICBQcmV2ZW50IGNyYXNoIHdoZW4gd2Fsa2luZyAoaW52YWxpZD8pIEV2ZW50LU1JQiBPYmplY3RzIFRhYmxlLgogCiAyMDA3LTA0LTAyIDExOjMwICBkdHMxMgogCi0JKiBkaXN0L21ha2VyZWxlYXNlOgotCSAgRml4IGEgY291cGxlIG9mIHR5cG9zIGluIHRoZSByZS13b3JrZWQgbWFrZXJlbGVhc2Ugc2NyaXB0LgorICAgKiBkaXN0L21ha2VyZWxlYXNlOgorCisgICBGaXggYSBjb3VwbGUgb2YgdHlwb3MgaW4gdGhlIHJlLXdvcmtlZCBtYWtlcmVsZWFzZSBzY3JpcHQuCiAKIDIwMDctMDMtMjkgMTI6MTQgIHRhbmRlcnMKIAotCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0JICBmaXggc3ludGF4IGVycm9yICgiPT0iIGlzIGJhZCkKKyAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIGZpeCBzeW50YXggZXJyb3IgKCI9PSIgaXMgYmFkKQorCisyMDA3LTAzLTI3IDA4OjU1ICBkdHMxMgorCisgICAqIGFjaW5jbHVkZS5tNCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIFJlYWQgdXNlci1wcm9tcHRlZCB2YWx1ZXMgZnJvbSBvcmlnaW5hbCBzdGRpbiAobm90IC9kZXYvbnVsbCkKIAogMjAwNy0wMy0yNyAwODozOCAgZHRzMTIKIAotCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0JICBBY2NlcHQgJzJjJyBhcyBhIHZhbGlkIHJlc3BvbnNlIHdoZW4gY2hvb3NpbmcgdGhlIGRlZmF1bHQgdmVyc2lvbgorICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKKworICAgQWNjZXB0ICcyYycgYXMgYSB2YWxpZCByZXNwb25zZSB3aGVuIGNob29zaW5nIHRoZSBkZWZhdWx0IHZlcnNpb24KIAogMjAwNy0wMy0yNyAwODoyOSAgZHRzMTIKIAotCSogY29uZmlndXJlLCBjb25maWd1cmUuaW46Ci0JICBDSEFOR0VTOiBjb25maWd1cmU6IEJVRzogMTU2NzMyNDogQ2xhcmlmeSBwcm9tcHRpbmcgZm9yCi0JICB1c2VyLXN1cHBsaWVkIHZhbHVlcy4KLQkgIE5vdyBvbmx5IHJlbWVtYmVycyAoYW5kIHVzZXMpIHByZXZpb3VzIHZhbHVlcyB3aGVuIGV4cGxpY2l0bHkKLQkgIHRvbGQgdG8gZG8gc28sCi0JICBlLmcuIGNvbmZpZ3VyZSAtQworICAgKiBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKIAotMjAwNy0wMy0yNSAyMjozMiAgZHRzMTIKKyAgIENIQU5HRVM6IGNvbmZpZ3VyZTogQlVHOiAxNTY3MzI0OiBDbGFyaWZ5IHByb21wdGluZyBmb3IKKyAgIHVzZXItc3VwcGxpZWQgdmFsdWVzLgorICAgTm93IG9ubHkgcmVtZW1iZXJzIChhbmQgdXNlcykgcHJldmlvdXMgdmFsdWVzIHdoZW4gZXhwbGljaXRseQorICAgdG9sZCB0byBkbyBzbywKKyAgIGUuZy4gY29uZmlndXJlIC1DCiAKLQkqIGxvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mLCBsb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYsCi0JICBsb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmY6Ci0JICBWYXJpYWJsZS1sZW5ndGggc3RyaW5nIHZhbHVlcyBhcmUgbW9yZSBsaWtlbHkgdGhhbiBmaXhlZCBsZW5ndGguCisyMDA3LTAzLTI3IDA4OjIzICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorCisgICBGaXggaW5jb25zaXN0ZW5jeSBpbiBwYXRjaCAjMTYyNzA0OSAtIDxwb2xsLmg+IHZzIDxzeXMvcG9sbC5oPgorCisyMDA3LTAzLTI1IDIyOjMxICBkdHMxMgorCisgICAqICBsb2NhbC9taWIyYy5jb250YWluZXIuY29uZiwgbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mLCAgIAorICAgICAgbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mOgorCisgICBWYXJpYWJsZS1sZW5ndGggc3RyaW5nIHZhbHVlcyBhcmUgbW9yZSBsaWtlbHkgdGhhbiBmaXhlZCBsZW5ndGguCiAKIDIwMDctMDMtMjUgMjI6MjggIGR0czEyCiAKLQkqIGxvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZjoKLQkgIENIQU5HRVM6IG1pYjJjOiBCVUc6IDgzMzY3MzogTW9yZSBmb2N1c2VkIHNpemUgY2hlY2tzLgorICAgKiBsb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmY6CisKKyAgIENIQU5HRVM6IG1pYjJjOiBCVUc6IDgzMzY3MzogTW9yZSBmb2N1c2VkIHNpemUgY2hlY2tzLgogCiAyMDA3LTAzLTI1IDIxOjI1ICBkdHMxMgogCi0JKiBhZ2VudC9zbm1wX2FnZW50LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjc3MDYzOiBDaGVjayBmb3IgZmFpbGVkIG1hbGxvYyBjYWxscy4KKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxNjc3MDYzOiBDaGVjayBmb3IgZmFpbGVkIG1hbGxvYyBjYWxscy4KIAogMjAwNy0wMy0yNSAxOTowMyAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYzoKLQkgIENoZWNrIFNFVCByZXF1ZXN0cyBhZ2FpbnN0IHRoZSBjb3JyZWN0IHR5cGUgKElQIEFkZHJlc3MgIT0gT2N0ZXQKLQkgIFN0cikKKyAgICogYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYzoKIAotMjAwNy0wMy0yNSAxODo1OCAgZHRzMTIKKyAgIENoZWNrIFNFVCByZXF1ZXN0cyBhZ2FpbnN0IHRoZSBjb3JyZWN0IHR5cGUgKElQIEFkZHJlc3MgIT0gT2N0ZXQKKyAgIFN0cikKIAotCSogYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2ODUwODE6IENoZWNrIGZvciB2YWxpZCBPSUQgb24gRnJlZS9VbmRvCi0JICBwYXNzZXMuCisyMDA3LTAzLTI1IDE4OjU1ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2ODUwODE6IENoZWNrIGZvciB2YWxpZCBPSUQgb24gRnJlZS9VbmRvCisgICBwYXNzZXMuCiAKIDIwMDctMDMtMjMgMDk6NDQgIGR0czEyCiAKLQkqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oOgotCSAgQ0hBTkVHUzogc25tcGxpYjogQlVHOiAxNjg2Mzg0OiBEb2N1bWVudCBub24tdXNlIG9mICdyZW1vdGVfcG9ydCcKLQkgIGZpZWxkLgorICAgKiBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaDoKKworICAgQ0hBTkVHUzogc25tcGxpYjogQlVHOiAxNjg2Mzg0OiBEb2N1bWVudCBub24tdXNlIG9mICdyZW1vdGVfcG9ydCcKKyAgIGZpZWxkLgogCiAyMDA3LTAzLTIzIDA5OjE5ICBkdHMxMgogCi0JKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaToKLQkgIEFsbG93IHNwYWNlIGZvciBleHRlcm5hbCBpbmRleGVzIHdoZW4gc2F2aW5nIHRhYmxlIGVudHJpZXMuCi0JICAoU2VlIHBhdGNoICMxNjQyMjU1KQorICAgKiBsb2NhbC9taWIyYy1jb25mLmQvbWZkLXBlcnNpc3RlbmNlLm0yaToKIAotMjAwNy0wMy0yMyAwOToxNSAgZHRzMTIKKyAgIEFsbG93IHNwYWNlIGZvciBleHRlcm5hbCBpbmRleGVzIHdoZW4gc2F2aW5nIHRhYmxlIGVudHJpZXMuCisgICAoU2VlIHBhdGNoICMxNjQyMjU1KQogCi0JKiBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY0MjI1NTogSGFuZGxlIHNhdmluZyBsb25nCi0JICBzbm1wTm90aWZ5RmlsdGVyVGFibGUgZW50cmllcy4KKzIwMDctMDMtMjMgMDk6MTQgIGR0czEyCisKKyAgICogCisgICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjQyMjU1OiBIYW5kbGUgc2F2aW5nIGxvbmcKKyAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZSBlbnRyaWVzLgorCisyMDA3LTAzLTIzIDA5OjA5ICBkdHMxMgorCisgICAqICBhZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jLCBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuYywgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oLCBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjgxOTc3OiBBZGQgY2FsbGJhY2tzIHByaW9yIHRvIHJlYWRpbmcKKyAgIGNvbmZpZy4KIAogMjAwNy0wMy0yMyAwOTowNiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY3NjQ3ODogZml4IHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzcwotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTY3NjQ3NjogZml4IHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzcworICAgKiBhZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2NzY0Nzg6IGZpeCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3MKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE2NzY0NzY6IGZpeCB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3MKIAogMjAwNy0wMy0yMyAwOTowMSAgZHRzMTIKIAotCSogc25tcGxpYi9zbm1wX2FwaS5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2NTM2NzA6IENvbnNpc3RlbnQgU05NUHYzIGJlaGF2aW91cgotCSAgd2hlbiBvcGVuaW5nIHNlc3Npb25zLgorICAgKiBzbm1wbGliL3NubXBfYXBpLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjUzNjcwOiBDb25zaXN0ZW50IFNOTVB2MyBiZWhhdmlvdXIKKyAgIHdoZW4gb3BlbmluZyBzZXNzaW9ucy4KKworMjAwNy0wMy0yMyAwODo1NyAgZHRzMTIKKworICAgKiAgY29uZmlndXJlLCBjb25maWd1cmUuaW4sIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oLCAgIAorICAgICAgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiwgc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTYyNzA0OTogTmV3IEFQSSB0byBoYW5kbGUgbGFyZ2UgbnVtYmVycworICAgb2YgZmlsZSBkZXNjcmlwdG9ycy4KIAogMjAwNy0wMy0yMiAxOToxNCAgZHRzMTIKIAotCSogc25tcGxpYi9yZWFkX2NvbmZpZy5jOgotCSAgQ0hBTkdFUzogc25tcGxpYjogUEFUQ0g6IDE2ODEwMzA6IEJldHRlciBoYW5kbGluZyBvZiBlbXB0eQotCSAgYXBwdHlwZSBjb25maWdzLgorICAgKiBzbm1wbGliL3JlYWRfY29uZmlnLmM6CisKKyAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjgxMDMwOiBCZXR0ZXIgaGFuZGxpbmcgb2YgZW1wdHkKKyAgIGFwcHR5cGUgY29uZmlncy4KIAogMjAwNy0wMy0yMiAxOToxMiAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmMsIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5oLAotCSAgYWdlbnQvc25tcGQuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY3ODc4ODogQmV0dGVyIGhhbmRsaW5nIG9mIFNNVVggc29ja2V0Ci0JICBkZXNjcmlwdG9ycy4KKyAgICogIGFnZW50L21pYmdyb3VwL3NtdXgvc211eC5jLCBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguaCwgICAKKyAgICAgIGFnZW50L3NubXBkLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY3ODc4ODogQmV0dGVyIGhhbmRsaW5nIG9mIFNNVVggc29ja2V0CisgICBkZXNjcmlwdG9ycy4KIAogMjAwNy0wMy0yMiAxOTowOSAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY4MzA1NDogc2V0IHVkcEVuZHBvaW50SW5zdGFuY2UgdG8KLQkgIGlkZW50aWZ5IGRpZmZlcmVudCBwcm9jZXNzZXMuCisgICAqIGFnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY4MzA1NDogc2V0IHVkcEVuZHBvaW50SW5zdGFuY2UgdG8KKyAgIGlkZW50aWZ5IGRpZmZlcmVudCBwcm9jZXNzZXMuCiAKIDIwMDctMDMtMjEgMTI6MzUgIGR0czEyCiAKLQkqIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLCB3aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZi5pbjoKLQkgIERlY2xhcmUgT0lEIGNvbnN0YW50cyBhcyBzdWNoIChyYXRoZXIgdGhhbiBBUEkgY2FsbHMpLgotCSAgUHJvcG9zZWQgYnkgQWxleCBCdXJnZXIKKyAgICogd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYsIHdpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluOgogCi0yMDA3LTAzLTIwIDIwOjA4ICByc3RvcnkKKyAgIERlY2xhcmUgT0lEIGNvbnN0YW50cyBhcyBzdWNoIChyYXRoZXIgdGhhbiBBUEkgY2FsbHMpLgorICAgUHJvcG9zZWQgYnkgQWxleCBCdXJnZXIKIAotCSogYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmM6Ci0JICBORVdTOiBzbm1wZDogUEFUQ0g6IDE2NjY3Mzc6IGluY2x1ZGUgaXB2NiBjb3VudHMgaW4KLQkgIHVkcEluRGF0YWdyYW1zLCB1ZHBOb1BvcnRzLCB1ZHBJbkVycm9ycywgdWRwT3V0RGF0YWdyYW1zCisyMDA3LTAzLTIwIDIwOjA3ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYzoKKworICAgTkVXUzogc25tcGQ6IFBBVENIOiAxNjY2NzM3OiBpbmNsdWRlIGlwdjYgY291bnRzIGluCisgICB1ZHBJbkRhdGFncmFtcywgdWRwTm9Qb3J0cywgdWRwSW5FcnJvcnMsIHVkcE91dERhdGFncmFtcwogCiAyMDA3LTAzLTE5IDIyOjA5ICB0YW5kZXJzCiAKLQkqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmM6Ci0JICB1c2UgcG1GcmVlUmVzdWx0KCkgaW5zdGVhZCBvZiBmcmVlKCkKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wY3AuYzoKIAotMjAwNy0wMy0xNyAwMDoyNSAgdGFuZGVycworICAgdXNlIHBtRnJlZVJlc3VsdCgpIGluc3RlYWQgb2YgZnJlZSgpCiAKLQkqIGFnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oLAotCSAgYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oLAotCSAgYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oLCBjb25maWd1cmUsIGNvbmZpZ3VyZS5pbjoKLQkgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTY4MTA3MzogI2lmZGVmIGJhc2VkIGNvbmZpZ19lcnJvciBpbnN0ZWFkCi0JICBvZiBzcGVjaWFsIGNhc2VzIGluIGNvbmZpZ3VyZQotCSAgQmFja3BvcnQgZnJvbSBNQUlOLgorMjAwNy0wMy0xOSAwOTozOSAgdGFuZGVycworCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5jOgorCisgICBnZXQgcmlkIG9mIEMrKyBjb21tZW50cwogCiAyMDA3LTAzLTE2IDE0OjA0ICBkdHMxMgogCi0JKiBkaXN0L2NoYW5nZWxvZ2ZpeCwgZGlzdC9tYWtlcmVsZWFzZSwgbG9jYWwvVmVyc2lvbi1NdW5nZS5wbDoKLQkgIENvbnZlcnQgYnVpbGQgc3lzdGVtIHRvIFNWTiB2ZXJzaW9uLgorICAgKiAgZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUywgZGlzdC9jaGFuZ2Vsb2dmaXgsIGRpc3QvbWFrZXJlbGVhc2UsICAgCisgICAgICBsb2NhbC9WZXJzaW9uLU11bmdlLnBsOgorCisgICBDb252ZXJ0IGJ1aWxkIHN5c3RlbSB0byBTVk4gdmVyc2lvbi4KKworMjAwNy0wMy0xNSAxMDo1OSAgdGFuZGVycworCisgICAqICBhZ2VudC9taWJncm91cC9hZ2VudHgvc3ViYWdlbnQuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaCwgY29uZmlndXJlLCBjb25maWd1cmUuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTY4MTA3MzogI2lmZGVmIGJhc2VkIGNvbmZpZ19lcnJvciBpbnN0ZWFkCisgICBvZiBzcGVjaWFsIGNhc2VzIGluIGNvbmZpZ3VyZQorCisyMDA3LTAzLTE1IDEwOjQ3ICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jOgorCisgICBnZXQgcmlkIG9mIEMrKyBjb21tZW50cwogCiAyMDA3LTAzLTE0IDIzOjMxICB0YW5kZXJzCiAKLQkqIFJFQURNRS5pcml4LCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwKLQkgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmMsCi0JICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5oOgotCSAgTkVXUzogSVJJWDogUEFUQ0g6IDE2NzU4Njk6IGZyb20gYmJpY2U6IENQVSBzdGF0aXN0aWNzIGZvciBJUklYCi0JICBiYXNlZCBvbiBQQ1AKKyAgICogIFJFQURNRS5pcml4LCBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUuaCwgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGNwLmMsICAgCisgICAgICBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BjcC5oOgorCisgICBORVdTOiBJUklYOiBQQVRDSDogMTY3NTg2OTogZnJvbSBiYmljZTogQ1BVIHN0YXRpc3RpY3MgZm9yIElSSVgKKyAgIGJhc2VkIG9uIFBDUAorCisyMDA3LTAzLTE0IDIyOjA5ICB0YW5kZXJzCisKKyAgICogIGFnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYywgYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvY2FjaGVfaGFuZGxlci5jLCBhZ2VudC9oZWxwZXJzL2RlYnVnX2hhbmRsZXIuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvaW5zdGFuY2UuYywgYWdlbnQvaGVscGVycy9udWxsLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvcm93X21lcmdlLmMsIGFnZW50L2hlbHBlcnMvc2NhbGFyLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jLCBhZ2VudC9oZWxwZXJzL3NlcmlhbGl6ZS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jLCBhZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYywgICAKKyAgICAgIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsICAgCisgICAgICBhZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGFzZXQuYywgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCAgIAorICAgICAgYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjgxMDQzOiBmcm9tIG1hZ2ZyOiBjbGVhbiB1cCBoZWxwZXIKKyAgIGluY2x1ZGVzCisKKzIwMDctMDMtMTQgMjE6NTQgIHRhbmRlcnMKKworICAgKiBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjgxMDM1OiBmcm9tIG1hZ2ZyOiBpbXByb3ZlIG5ldC1zbm1wLWNvbmZpZworICAgL2Jpbi9zaCBjb21wYXRpYmlsaXR5CisKKzIwMDctMDMtMTQgMTg6MzEgIHRhbmRlcnMKKworICAgKiBuZXQtc25tcC1jb25maWcuaW46CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBQQVRDSDogMTY3ODMwMDogZnJvbSBtYWdmcjogY29tcGlsZS1zdWJhZ2VudAorICAgZG9lc24ndCBjYWxsIHNodXRkb3duXyBtZXRob2RzCiAKIDIwMDctMDMtMTQgMTY6MTIgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjQ0MjgwOiBEb24ndCBhdXRvbWF0aWNhbGx5IHByb2JlIGZvcgotCSAgdjMgRW5naW5lSURzLgorICAgKiBhZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjQ0MjgwOiBEb24ndCBhdXRvbWF0aWNhbGx5IHByb2JlIGZvcgorICAgdjMgRW5naW5lSURzLgogCiAyMDA3LTAzLTEzIDEwOjI2ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6Ci0JICBDaGVjayBmb3IgemVyby1zaXplIHBzZXVkby1maWxlc3lzdGVtcy4gUmVwb3J0IHRoZW0gYXMgZW1wdHkKLQkgIHJhdGhlciB0aGFuIGZ1bGwsIHNvIHRoZXkgd29uJ3QgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4KKyAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgogCi0yMDA3LTAzLTEzIDA5OjExICB0YW5kZXJzCi0KLQkqIHNubXBsaWIvbWliLmM6Ci0JICBCYWNrIG91dCBjaGFuZ2VzIHRvIGJyYW5jaGVzIGRvbmUgaW4gU1ZOIDE1OTUzIChwYXRjaCAxNjc4MzAyKQotCSAgYmVjYXVzZSB0aGV5IGFyZSBvbmx5IGFwcHJvcHJpYXRlIGZvciBNQUlOCisgICBDaGVjayBmb3IgemVyby1zaXplIHBzZXVkby1maWxlc3lzdGVtcy4gUmVwb3J0IHRoZW0gYXMgZW1wdHkKKyAgIHJhdGhlciB0aGFuIGZ1bGwsIHNvIHRoZXkgd29uJ3QgYmUgdHJlYXRlZCBhcyBhbiBlcnJvci4KIAogMjAwNy0wMy0xMyAwNTo1OSAgdGFuZGVycwogCi0JKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1Lmg6Ci0JICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwNTogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgY2FjaGUgaW4KLQkgIGhhcmR3YXJlL2NwdS9jcHUgb24gc2h1dGRvd24gKGhlYWRlciBwYXJ0KQorICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1Lmg6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc4MzA1OiBmcm9tIG1hZ2ZyOiBEZWFsbG9jYXRlIHRoZSBjYWNoZSBpbgorICAgaGFyZHdhcmUvY3B1L2NwdSBvbiBzaHV0ZG93biAoaGVhZGVyIHBhcnQpCiAKIDIwMDctMDMtMTIgMjM6MDkgIHRhbmRlcnMKIAotCSogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLAotCSAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDY6IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGxvZyBpbgotCSAgbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZworICAgKiAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwNjogZnJvbSBtYWdmcjogRGVhbGxvY2F0ZSB0aGUgbG9nIGluCisgICBub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nCiAKIDIwMDctMDMtMTIgMjM6MDQgIHRhbmRlcnMKIAotCSogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jOgotCSAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDU6IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGNhY2hlIGluCi0JICBoYXJkd2FyZS9jcHUvY3B1IG9uIHNodXRkb3duCisgICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDU6IGZyb20gbWFnZnI6IERlYWxsb2NhdGUgdGhlIGNhY2hlIGluCisgICBoYXJkd2FyZS9jcHUvY3B1IG9uIHNodXRkb3duCiAKIDIwMDctMDMtMTIgMjI6NTcgIHRhbmRlcnMKIAotCSogc25tcGxpYi9taWIuYzoKLQkgIENIQU5HRVM6IFBBVENIOiAxNjc4MzAyOiBmcm9tIG1hZ2ZyOiBuZXRzbm1wX21pYmluZGV4X2xvYWQgbGVha3MKLQkgIG1lbW9yeQorICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwMjogZnJvbSBtYWdmcjogbmV0c25tcF9taWJpbmRleF9sb2FkIGxlYWtzCisgICBtZW1vcnkKIAogMjAwNy0wMy0xMiAyMjo1MCAgdGFuZGVycwogCi0JKiBzbm1wbGliL3NubXBfYXBpLmM6Ci0JICBDSEFOR0VTOiBQQVRDSDogMTY3ODMwMTogZnJvbSBtYWdmcjogZGVhbGxvY2F0ZSBkb21haW4gcmVnaXN0cnkKLQkgIGF0IHNodXRkb3duCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgzMDE6IGZyb20gbWFnZnI6IGRlYWxsb2NhdGUgZG9tYWluIHJlZ2lzdHJ5CisgICBhdCBzaHV0ZG93bgogCiAyMDA3LTAzLTEyIDIyOjMxICB0YW5kZXJzCiAKLQkqIG5ldC1zbm1wLWNvbmZpZy5pbjoKLQkgIENIQU5HRVM6IFBBVENIOiAxNjc4Mjk4OiBmcm9tIG1hZ2ZyOiBjb21waWxlLXN1YmFnZW50IGNoZWNrcyBmb3IKLQkgIGJhZCBIQVZFX1NJR05BTF9ICisgICAqIG5ldC1zbm1wLWNvbmZpZy5pbjoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2NzgyOTg6IGZyb20gbWFnZnI6IGNvbXBpbGUtc3ViYWdlbnQgY2hlY2tzIGZvcgorICAgYmFkIEhBVkVfU0lHTkFMX0gKKworMjAwNy0wMy0xMiAyMTo0NyAgZHRzMTIKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY5MDQ4OiBBZGQgc3VwcG9ydCBmb3IKKyAgIGlwdjZJbnRlcmZhY2VJZGVudGlmaWVyCiAKIDIwMDctMDMtMTIgMjE6MzcgIGR0czEyCiAKLQkqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE0MTM3Mjg6IFJlZmVyZW5jZSBpbmRleCB2YWx1ZXMgaW4gZGVidWcKLQkgIG91dHB1dCBjb3JyZWN0bHkuCisgICAqIGFnZW50L2hlbHBlcnMvdGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTQxMzcyODogUmVmZXJlbmNlIGluZGV4IHZhbHVlcyBpbiBkZWJ1ZworICAgb3V0cHV0IGNvcnJlY3RseS4KIAogMjAwNy0wMy0xMiAyMTozNCAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IEJVRzogMTEwMjA1ODogU2tpcCBub24tbW91bnRlZCBkaXNrcyAoZS5nLiBzd2FwCi0JICBwYXJ0aXRpb25zKQorICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDExMDIwNTg6IFNraXAgbm9uLW1vdW50ZWQgZGlza3MgKGUuZy4gc3dhcAorICAgcGFydGl0aW9ucykKIAogMjAwNy0wMy0xMiAyMTozMCAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jLAotCSAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY4MTkzOiBVcGRhdGUgcmVnaXN0cmF0aW9uIG9mCi0JICBSZWFzbU1heFNpemUgc3VwcG9ydC4KKyAgICogIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYywgICAKKyAgICAgIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY4MTkzOiBVcGRhdGUgcmVnaXN0cmF0aW9uIG9mCisgICBSZWFzbU1heFNpemUgc3VwcG9ydC4KIAogMjAwNy0wMy0xMiAyMToyOCAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjY4MTkzOiBGaXggY2hlY2sgZm9yIHY2IFJlYXNtTWF4U2l6ZQotCSAgc3VwcG9ydC4KKyAgICogYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjgxOTM6IEZpeCBjaGVjayBmb3IgdjYgUmVhc21NYXhTaXplCisgICBzdXBwb3J0LgogCiAyMDA3LTAzLTEyIDE5OjU2ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2ODk1MjogSWdub3JlIHpvbWJpZSBwcm9jZXNzZXMuCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2Njg5NTI6IElnbm9yZSB6b21iaWUgcHJvY2Vzc2VzLgogCiAyMDA3LTAzLTEyIDE5OjU0ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NjU5ODU6IEltcGxlbWVudCBpcFJlYXNtVGltZW91dAotCSAgVGhvdWdoIHRoaXMgcmVnaXN0ZXJzIGFuIGluc3RhbmNlLCByYXRoZXIgdGhhbiB0aGUgZnVsbCBzY2FsYXIKLQkgIG9iamVjdAorICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2NTk4NTogSW1wbGVtZW50IGlwUmVhc21UaW1lb3V0CisgICBUaG91Z2ggdGhpcyByZWdpc3RlcnMgYW4gaW5zdGFuY2UsIHJhdGhlciB0aGFuIHRoZSBmdWxsIHNjYWxhcgorICAgb2JqZWN0CiAKIDIwMDctMDMtMTIgMTk6NTEgIGR0czEyCiAKLQkqIGFnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jLCBzbm1wbGliL3ZhY20uYzoKLQkgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIRVM6IDE2NjU1NDM6IEhhbmRsZSBWQUNNIGNoZWNrcyBjb3JyZWN0bHkuCi0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2NTU0OTogSGFuZGxlIGNyZWF0aW5nIFZBQ00gZW50cmllcwotCSAgY29ycmVjdGx5LgotCSAgW0JvdGggcGF0Y2hlcyBhcmUgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uXQorICAgKiBhZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYywgc25tcGxpYi92YWNtLmM6CisKKyAgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIRVM6IDE2NjU1NDM6IEhhbmRsZSBWQUNNIGNoZWNrcyBjb3JyZWN0bHkuCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY2NTU0OTogSGFuZGxlIGNyZWF0aW5nIFZBQ00gZW50cmllcworICAgY29ycmVjdGx5LgorICAgW0JvdGggcGF0Y2hlcyBhcmUgcmVxdWlyZWQgZm9yIGNvcnJlY3Qgb3BlcmF0aW9uXQogCiAyMDA3LTAzLTEyIDE5OjQ3ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC9zbXV4L3NtdXguYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjU5NjIzOiBIYW5kbGUgU01VWCBwZWVycyB3aXRoIGFuIGVtcHR5Ci0JICBwYXNzd29yZC4KKyAgICogYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjU5NjIzOiBIYW5kbGUgU01VWCBwZWVycyB3aXRoIGFuIGVtcHR5CisgICBwYXNzd29yZC4KKworMjAwNy0wMy0xMiAxOTo0NCAgZHRzMTIKKworICAgKiAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmM6CisKKyAgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjU3NzQxOiBIYW5kbGUgNjQtYml0IHR5cGVzIHZpYSBwYXNzCisgICBtZWNoYW5pc20uCiAKIDIwMDctMDMtMTIgMTk6NDAgIGR0czEyCiAKLQkqIGFnZW50L2FnZW50X3RyYXAuYzoKLQkgIENIQU5HRVM6IHNubXBkOiBQQVRDSEVTOiAxNjQ0MjgwOiBVc2UgdGhlIGNvcnJlY3QgZW5naW5lSUQgd2hlbgotCSAgc2VuZGluZyB2MyB0cmFwcy4KKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY0NDI4MDogVXNlIHRoZSBjb3JyZWN0IGVuZ2luZUlEIHdoZW4KKyAgIHNlbmRpbmcgdjMgdHJhcHMuCiAKIDIwMDctMDMtMTIgMTk6MzIgIGR0czEyCiAKLQkqIHNubXBsaWIvc25tcF9hcGkuYzoKLQkgIENIQU5HRVM6IGxpYnJhcnk6IFBBVENIRVM6IDE2NDIwNzE6IERvbid0IGZpZGRsZSB3aXRoIHRoZSBzdG9yYWdlCi0JICBvZiBwcmUtZXhpc3RpbmcgdXNlcnMuCisgICAqIHNubXBsaWIvc25tcF9hcGkuYzoKKworICAgQ0hBTkdFUzogbGlicmFyeTogUEFUQ0hFUzogMTY0MjA3MTogRG9uJ3QgZmlkZGxlIHdpdGggdGhlIHN0b3JhZ2UKKyAgIG9mIHByZS1leGlzdGluZyB1c2Vycy4KIAogMjAwNy0wMy0xMiAxOTozMCAgZHRzMTIKIAotCSogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOgotCSAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2NDE4NjU6IERvbid0IGRvdWJsZSBjaGVjayBzbm1wVHJhcE9JRAotCSAgaW4gdGhlIGZpbHRlciB0YWJsZS4KKyAgICogYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jOgorCisgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTY0MTg2NTogRG9uJ3QgZG91YmxlIGNoZWNrIHNubXBUcmFwT0lECisgICBpbiB0aGUgZmlsdGVyIHRhYmxlLgogCiAyMDA3LTAzLTEyIDE5OjI1ICBkdHMxMgogCi0JKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYywKLQkgIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogUEFUQ0hFUzogMTYzOTcyNjogUmVwb3J0IHBoeXNpY2FsIG1lbW9yeQotCSAgY29ycmVjdGx5IG9uICpCU0QKKyAgICogIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jLCAgIAorICAgICAgYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIRVM6IDE2Mzk3MjY6IFJlcG9ydCBwaHlzaWNhbCBtZW1vcnkKKyAgIGNvcnJlY3RseSBvbiAqQlNECisKKzIwMDctMDMtMDkgMjE6MzEgIHRhbmRlcnMKKworICAgKiBzbm1wbGliL21pYi5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3NDI5OTogZnJvbSBtYWdmcjogTGVzc2VuIHRoZSBzY29wZSBvZiB0aGUgem9uZQorICAgdmFyaWFibGUgaW4gZHVtcF9yZWFsbG9jX29pZF90b19pbmV0YWRkcmVzcworCisyMDA3LTAzLTA5IDIxOjI5ICB0YW5kZXJzCisKKyAgICogYWdlbnQvYWdlbnRfdHJhcC5jOgorCisgICBDSEFOR0VTOiBQQVRDSDogMTY3NDMwMjogZnJvbSBtYWdmcjogTGVzc2VuIHRoZSBzY29wZSBvZiB0aGUgbGVuCisgICB2YXJpYWJsZSBpbiBjb252ZXJ0X3YycGR1X3RvX3YxCiAKIDIwMDctMDMtMDggMTU6NTIgIGR0czEyCiAKLQkqIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oLAotCSAgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oOgotCSAgSW5jbHVkZSBIb3N0IFJlc291cmNlcyBNSUIgb24gTmV0QlNEIGFuZCBPcGVuQlNECisgICAqICBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaCwgICAKKyAgICAgIGluY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaDoKKworICAgSW5jbHVkZSBIb3N0IFJlc291cmNlcyBNSUIgb24gTmV0QlNEIGFuZCBPcGVuQlNECisKKzIwMDctMDMtMDcgMDk6NDMgIHRhbmRlcnMKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIENIQU5HRVM6IFBBVENIOiAxNjc0Mjk4OiBmcm9tIG1hZ2ZyOiBSZW1vdmUgdW51c2VkIHNpbmtwb3J0CisgICB2YXJpYWJsZQogCiAyMDA3LTAzLTA2IDEzOjUxICBkdHMxMgogCi0JKiBhZ2VudC9zbm1wX2FnZW50LmM6Ci0JICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMTU5OTA4OiBGaXggbWVtb3J5IGxlYWsKKyAgICogYWdlbnQvc25tcF9hZ2VudC5jOgogCi0yMDA3LTAzLTAyIDIyOjU4ICB0YW5kZXJzCisgICBDSEFOR0VTOiBzbm1wZDogQlVHOiAxMTU5OTA4OiBGaXggbWVtb3J5IGxlYWsKIAotCSogc25tcGxpYi9NU0cwMDAwMS5iaW46Ci0JICBkZS1tYW5nZSBiaW5hcnkgZmlsZQorMjAwNy0wMy0wMiAyMjo0MCAgdGFuZGVycworCisgICAqIHNubXBsaWIvTVNHMDAwMDEuYmluOgorCisgICBubyBlb2wtc3R5bGUgZm9yIGJpbmFyeSBmaWxlcworCisyMDA3LTAzLTAyIDIyOjI2ICB0YW5kZXJzCisKKyAgICogZG9jL3JmYy9zbWlWMi9yZmMyNTc5LmVycmF0YX46CisKKyAgIGRvbid0IHNoaXAgZWRpdG9yIGJhY2t1cCBjb3BpZXMKKworMjAwNy0wMy0wMiAxNjoyMCAgdGFuZGVycworCisgICAqIHNubXBsaWIvTVNHMDAwMDEuYmluOgorCisgICBmbGFnIGFzIGJpbmFyeQogCiAyMDA3LTAzLTAyIDEyOjQ0ICB0YW5kZXJzCiAKLQkqIENvZGluZ1N0eWxlOgotCSAgZml4IHR5cG8KKyAgICogQ29kaW5nU3R5bGU6CisKKyAgIGZpeCB0eXBvCisKKzIwMDctMDMtMDIgMDk6NTcgIGR0czEyCisKKyAgICogVE9ETzoKKworICAgTWlub3IgdHdlYWsgLSBwbGF5aW5nIHdpdGggU1ZOIGFzIG11Y2ggYXMgYW55dGhpbmcuLi4uCisKKzIwMDctMDMtMDEgMjM6NTcgIGhhcmRha2VyCisKKyAgICogTkVXUzoKKworICAgbWVudGlvbiB0aGF0IHdlIG1vdmVkIHRvIFNWTgogCiAyMDA3LTAyLTI4IDE1OjI3ICBkdHMxMgogCi0JKiBDSEFOR0VTLCBDaGFuZ2VMb2csIE5FV1M6Ci0JICBDaGVja3BvaW50IHN1bW1hcnkgb2YgQ1ZTIGNoYW5nZXMsIHByZXBhcmF0b3J5IGZvciB0aGUgU1ZOCi0JICBzd2l0Y2guCisgICAqIENIQU5HRVMsIENoYW5nZUxvZywgTkVXUzoKIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1DaGFuZ2VzOiBWNS40IC0+IFNWTiBjaGVja3BvaW50IChWNS00LXBhdGNoZXMgYnJhbmNoKQorICAgQ2hlY2twb2ludCBzdW1tYXJ5IG9mIENWUyBjaGFuZ2VzLCBwcmVwYXJhdG9yeSBmb3IgdGhlIFNWTgorICAgc3dpdGNoLgogCiAyMDA3LTAyLTI3IDEzOjM2ICByc3RvcnkKIApAQCAtODM1MSwxNyArNzIyOTksMTIgQEAKIAogICAgYWRkIGhlYWRlciBmb3IgZWFzaWVyIGNvbmZpZ3VyZSAtLXdpdGgtbWliLW1vZHVsZQogCi0yMDA3LTAyLTI3IDEyOjM0ICByc3RvcnkKLQotICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUuaDoKLQotICAgZmlsZSBpcEFkZHJlc3NQcmVmaXhUYWJsZS5oIHdhcyBhZGRlZCBvbiBicmFuY2ggVjUtNC1wYXRjaGVzIG9uIDIwMDctMDItMjcgMTI6MzQ6NTkgKzAwMDAKLQotMjAwNy0wMi0yNiAxNDo1NSAgZHRzMTIKKzIwMDctMDItMjYgMTQ6NTQgIGR0czEyCiAKICAgICogYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmM6CiAKICAgIFJlLWNvcnJlY3QgaW50ZXJwcmV0YXRpb24gb2YgIm51bGwgT0lEIiBpbiB0aGUgQWdlbnRYIHNwZWNzLgorICAgKGZvciB0aGUgbGFzdCB0aW1lLCBJIHRydXN0ISkKIAogMjAwNy0wMi0yNiAxNDozNyAgZHRzMTIKIApAQCAtODM3MywxNSArNzIzMTYsMTUgQEAKIAogICAgKiBwZXJsLzogQVNOL01ha2VmaWxlLlBMLCBPSUQvTWFrZWZpbGUuUEwsCiAgICAgIFNOTVAvTWFrZWZpbGUuUEwsIFRyYXBSZWNlaXZlci9NYWtlZmlsZS5QTCwKLSAgICAgYWdlbnQvTWFrZWZpbGUuUEwsIGFnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKLSwgZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTDoKKyAgICAgYWdlbnQvTWFrZWZpbGUuUEwsIGFnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwsCisgICAgIGRlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEw6CiAKICAgIFByb21wdGluZyBmb3IgYSBzaW5nbGUgZGlyZWN0b3J5LCBub3QgYW4gYXJyYXkuCiAKIDIwMDctMDItMjYgMTE6MzIgIGR0czEyCiAKLSAgICogbG9jYWwvOiBtaWIyYy5jb250YWluZXIuY29uZiwgbWliMmMuaXRlcmF0ZS5jb25mCi0sIG1pYjJjLnRhYmxlX2RhdGEuY29uZjoKKyAgICogbG9jYWwvOiBtaWIyYy5jb250YWluZXIuY29uZiwgbWliMmMuaXRlcmF0ZS5jb25mLAorICAgICBtaWIyYy50YWJsZV9kYXRhLmNvbmY6CiAKICAgIENIQU5HRVM6IG1pYjJjOiBCVUc6IDE0Mjk0NzI6IFByb3RlY3QgYWdhaW5zdCBtaXNzaW5nIGluc3RhbmNlcyAoYW5kIGludmFsaWQgb2JqZWN0cykKIApAQCAtODM5OSwxNSArNzIzNDIsMTUgQEAKIAogMjAwNy0wMi0yMyAyMTo1MyAgdGFuZGVycwogCi0gICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgorICAgKiBjb25maWd1cmUuaW4sIGNvbmZpZ3VyZToKIAogICAgYWRkIHF1b3RlcyB0byBmaXggc2hlbGwgc3ludGF4IGVycm9yIHdoZW4gZW1wdHkKIAotMjAwNy0wMi0yMiAyMjo0NyAgdGFuZGVycworMjAwNy0wMi0yMiAyMjozNSAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgogCi0gICBMYXN0IGNvbW1pdCBicm9rZSB0aGUgYnVpbGQuIE5vdyBlc2NhcGUgYmFja3NsYXNoZXMgcHJvcGVybHkuIFBsZWFzZSByZW1lbWJlciB0byB1c2UgYXV0b2NvbmYgMi41OSBmb3IgdGhlIHBhdGNoZXMgYnJhbmNoZXMhCisgICBMYXN0IGNvbW1pdCBicm9rZSB0aGUgYnVpbGQuIE5vdyBlc2NhcGUgYmFja3NsYXNoZXMgcHJvcGVybHkuCiAKIDIwMDctMDItMjIgMTU6MzggIGR0czEyCiAKQEAgLTg0NTIsMjAgKzcyMzk1LDE3IEBACiAKICAgIENIQU5HRVM6IGJ1aWxkOiBCVUc6IDEwOTYxNjY6IEhhbmRsZSAtLXdpdGhvdXQtbG9nZmlsZSBjb3JyZWN0bHkuCiAKLTIwMDctMDItMTkgMTY6MzYgIGR0czEyCi0KLSAgICogZGlzdC86IE1ha2VmaWxlLCBuc2ItY29uZmlnLCBuc2ItZnVuY3Rpb25zCi0sIG5zYi1uaWdodGx5LCBuc2ItcGFja2FnZSwKLSAgICAgbnNiLXBsYXRmb3JtLCBwYXRtZSwgUkVBRE1FLmJ1aWxkLXNjcmlwdHMKLToKLQotICAgcmVtb3ZlZCBkaXN0IGZpbGVzIG9ubHkgdG8gYmUgZGlzdHJpYnV0ZWQgaW4gdGhlIG1haW4gQ1ZTIGJyYW5jaAotCi0yMDA3LTAyLTE5IDE2OjMwICBkdHMxMgorMjAwNy0wMi0xOSAxNjozNCAgZHRzMTIKIAogICAgKiBkaXN0L1JFTEVBU0UtSU5TVFJVQ1RJT05TOgogCi0gICBSZWxlYXNlIEluc3RydWN0aW9ucyBvbmx5IHRvIGJlIGRpc3RyaWJ1dGVkIGluIHRoZSBtYWluIENWUyBicmFuY2gKKyAgIE1lbnRpb24gcmVtb3ZhbCBmcm9tIENWUyBvZiBkZWxldGVkIGZpbGVzCisKKzIwMDctMDItMTkgMTU6NTYgIGR0czEyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgUmV3b3JrIHJlbGVhc2UgaW5zdHJ1Y3Rpb25zIHRvIHRha2UgYWNjb3VudCBvZiAibWFrZXJlbGVhc2UiIHNjcmlwdAogCiAyMDA3LTAyLTE5IDEwOjQ5ICBkdHMxMgogCkBAIC04NDg0LDcgKzcyNDI0LDcgQEAKICAgICogTWFrZWZpbGUuaW46CiAKICAgIERvbid0IGludm9rZSAndmVyc2lvbnRhZycgZm9yIHRhZ2dpbmcgdGhlIENWUyB0cmVlLgotICAgSXQgZG9lc24ndCBoYW5kbGUgdGhpcyBhbnkgbW9yZS4gKFVzZSAnbWFrZXJlbGVhc2UnIGluc3RlYWQpCisgICBJdCBkb2Vzbid0IGhhbmRsZSB0aGlzIGFueSBtb3JlLiAgKFVzZSAnbWFrZXJlbGVhc2UnIGluc3RlYWQpCiAKIDIwMDctMDItMTkgMTA6MDIgIGR0czEyCiAKQEAgLTg1NDUsMTEgKzcyNDg1LDQ4IEBACiAKICAgIGFkZGVkIHRoZSBmbG93IGxhYmxlIG1pYiwgd2hpY2ggdGhlIHR1bm5lbC1taWIgcmVmZXJzIHRvCiAKLTIwMDctMDItMDcgMTc6MTcgIGhhcmRha2VyCisyMDA3LTAyLTA1IDIzOjAyICB0YW5kZXJzCiAKLSAgICogbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dDoKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zOgogCi0gICBmaWxlIElQVjYtRkxPVy1MQUJFTC1NSUIudHh0IHdhcyBhZGRlZCBvbiBicmFuY2ggVjUtNC1wYXRjaGVzIG9uIDIwMDctMDItMDcgMTc6MTk6MTAgKzAwMDAKKyAgIG1vcmUgcG9ydGFiaWxpdHkgZml4ZXMKKworMjAwNy0wMi0wNSAyMjo1MCAgdGFuZGVycworCisgICAqIGRpc3QvY2hlY2stYXBpLWNoYW5nZToKKworICAgdXNlIC9iaW4vc2ggdW5sZXNzIGJhc2ggZmVhdHVyZXMgYXJlIHJlYWxseSBuZWVkZWQKKworMjAwNy0wMi0wNSAyMTo1MiAgcnN0b3J5CisKKyAgICogTWFrZWZpbGUudG9wOgorCisgICBub3RlIHRoYXQgY3VycmVudCBzaG91bGQgYmUgYnVtcGVkIGJ5IDUgd2hlbiBidW1wZWQKKworMjAwNy0wMi0wNSAyMTo0OSAgcnN0b3J5CisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgLSBub3RlIHRoYXQgY3VycmVudCBzaG91bGQgYmUgYnVtcGVkIGJ5IDUgd2hlbiB1cGRhdGVkCisgICAtIGFkZCBwb2ludGVyIHRvIG5ldyBjaGVjay1hcGktY2hhbmdlcyBzY3JpcHQKKworMjAwNy0wMi0wNSAyMTo0NiAgcnN0b3J5CisKKyAgICogZGlzdC9jaGVjay1hcGktY2hhbmdlOgorCisgICBzaW1wbGlzdGljIG5ldyBzY3JpcHQgdG8gaGVscCBjaGVjayBmb3IgYXBpIGNoYW5nZXMgYmV0d2VlbiByZWxlYXNlcworCisyMDA3LTAyLTA1IDIxOjM4ICByc3RvcnkKKworICAgKiBhZ2VudC9taWJncm91cC9zdHJ1Y3QuaDoKKworICAgbWFrZSBuZXcgc3RydWN0IG1lbWJlciBjb25kaXRpb25hbCwgc2luY2UgdXNlIGlzIGNvbmRpdGlvbmFsCisKKzIwMDctMDItMDUgMjE6MjAgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmM6CisKKyAgIG1vdmUgZnVuY3Rpb24gY2FsbCBvdXQgb2YgYXNzZXJ0CiAKIDIwMDctMDItMDUgMTU6MTYgIGR0czEyCiAKQEAgLTg1NTgsMTYgKzcyNTM1LDkgQEAKICAgIENIQU5HRVM6IHNubXBsaWI6IFBBVENIOiAxNjQxODk1OiBFeHRlbmQgc2hvcnQgdmlldyBtYXNrcyAoYXMgcGVyIFJGQyBzcGVjcykKICAgIFBhdGNoIHN1cHBsaWVkIGJ5IE1pY2hhZWwgS2lya2hhbS4KIAotMjAwNy0wMi0wNSAxNToxMCAgcnN0b3J5CisyMDA3LTAyLTA1IDE0OjMxICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYzoKLQotICAgbW92ZSBmdW5jdGlvbiBjYWxsIG91dCBvZiBhc3NlcnQKLQotMjAwNy0wMi0wNSAxNDozOCAgZHRzMTIKLQotICAgKiBhZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jCi06CisgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmM6CiAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTYzOTM2MDogRml4IHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUgcm93IGNyZWF0aW9uLgogICAgUGF0Y2ggc3VwcGxpZWQgYnkgTWljaGFlbCBLaXJraGFtLgpAQCAtODU3OSwyNiArNzI1NDksODMgQEAKICAgIEZpeCBjb21waWxhdGlvbiBpZiBMT0NLX1BFUl9DQUxMQkFDS19TVUJJRCBub3QgZGVmaW5lZC4KICAgIFJlcG9ydGVkIGJ5IEVtaSBZYW5hZ2kKIAorMjAwNy0wMi0wNSAwOTo0OCAgZHRzMTIKKworICAgKiBGQVE6CisKKyAgIFNwZWxsaW5nIGNvcnJlY3Rpb246ICdzdXBlcmNlZGVkJyAtPiAnc3VwZXJzZWRlZCcKKyAgIChPaCwgdGhlIHNoYW1lIG9mIGl0ISkKKwogMjAwNy0wMS0zMSAxMzo1MSAgdGFuZGVycwogCiAgICAqIE1ha2VmaWxlLnRvcDoKIAogICAgQ0hBTkdFUzogYnVpbGQ6IEJVRzogMTY0Nzk3NjogQ3lnd2luL01pbkdXIFdpbmRvd3MgYnVpbGQgZmFpbHMgZHVlIHRvIGxpYnRvb2wgZXJyb3IKIAotMjAwNy0wMS0zMCAxMzo0MyAgdGFuZGVycworMjAwNy0wMS0zMCAxMzozOSAgdGFuZGVycwogCiAgICAqIGFnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYzoKIAogICAgQ0hBTkdFUzogYnVpbGQ6IHlldCBhbm90aGVyIGZpeCB0byBhZGRyZXNzIGJ1aWxkIGlzc3VlcyB3aXRoIGV0aHRvb2wgKG9uIFJIOSkuCiAgICBQYXRjaCBwcm92aWRlZCBieSBNYWdudXMgRnJvbXJlaWRlLgogCisyMDA3LTAxLTMwIDA5OjEwICBkdHMxMgorCisgICAqIEZBUToKKworICAgQ2xhcmlmeSB3aGVuIHN5bWxpbmsgZml4IGlzL2lzbid0IGFwcHJvcHJpYXRlLiAgU3luY2ggd2l0aCBXaWtpLgorCisyMDA3LTAxLTI5IDExOjEyICBkdHMxMgorCisgICAqIEZBUToKKworICAgQXV0aGVudGljYXRlZCBTTk1QdjMgcmVxdWVzdHMgc3RpbGwgbmVlZCBhIHVzZXJuYW1lLiAgKFN5bmNoIHdpdGggV2lraSkKKwogMjAwNy0wMS0yOSAxMTowMyAgdGFuZGVycwogCi0gICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmM6CisgICAqIHB5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMsIGFnZW50L2hlbHBlcnMvdGFibGUuYworOgogCiAgICBnZXQgcmlkIG9mIEMrKyBjb21tZW50cwogCi0yMDA3LTAxLTI1IDIyOjQ1ICB0YW5kZXJzCisyMDA3LTAxLTI4IDEzOjM2ICB0YW5kZXJzCisKKyAgICogZGlzdC9uc2ItZnVuY3Rpb25zOgorCisgICBmaXggYmFkIHRlc3QKKworMjAwNy0wMS0yOCAxMzowNiAgdGFuZGVycworCisgICAqIGRpc3QvbnNiLWZ1bmN0aW9uczoKKworICAgcmVuYW1lIHZhcmlhYmxlIHRvIHJlc29sdmUgbmFtZSBjbGFzaCBhbmQgdG8gdW5icmVhayBuaWdodGx5IGJ1aWxkcyBvbiBTb2xhcmlzCisKKzIwMDctMDEtMjggMTI6NTIgIHRhbmRlcnMKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmM6CisKKyAgIGdldCByaWQgb2YgQysrIGNvbW1lbnRzCisKKzIwMDctMDEtMjcgMTQ6NDAgIHRhbmRlcnMKKworICAgKiBkaXN0L25zYi1uaWdodGx5OgorCisgICBmaXggdHlwbworCisyMDA3LTAxLTI3IDE0OjIzICB0YW5kZXJzCisKKyAgICogYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmM6CisKKyAgIGdldCByaWQgb2YgQysrIGNvbW1lbnRzCisKKzIwMDctMDEtMjYgMTE6MTUgIHRhbmRlcnMKKworICAgKiBkaXN0LzogbnNiLWNvbmZpZywgbnNiLWZ1bmN0aW9ucywgbnNiLW5pZ2h0bHkKKywgbnNiLXBhY2thZ2U6CisKKyAgIG1vcmUgQm91cm5lIHNoZWxsIGNvbXBhdGliaWxpdHkgZml4ZXMKKworMjAwNy0wMS0yNSAyMjo0MSAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgogCkBAIC04NjEyLDYgKzcyNjM5LDcgQEAKIAogMjAwNy0wMS0yNSAyMjowNSAgdGFuZGVycwogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMKICwgbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYzoKIApAQCAtODYyOSwxMiArNzI2NTcsNzAgQEAKIAogICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjQ0NzE0OiBmcm9tICJMZWxhbmQgV2FsbGFjZSI6IHJlcGxhY2UgbGFzdCByZW1haW5pbmcgaW5zdGFuY2Ugb2YgZGVwcmVjYXRlZCBjb3B5X3dvcmQgYnkgY29weV9ud29yZAogCisyMDA3LTAxLTI1IDE1OjMwICB0YW5kZXJzCisKKyAgICogZGlzdC86IG5zYi1jb25maWcsIG5zYi1mdW5jdGlvbnMsIG5zYi1uaWdodGx5CissIG5zYi1wYWNrYWdlLCBuc2ItcGxhdGZvcm06CisKKyAgIG1hbnkgQm91cm5lIHNoZWxsIHBvcnRhYmlsaXR5IGZpeGVzCisKKzIwMDctMDEtMjQgMTY6MzkgIGR0czEyCisKKyAgICogZGlzdC86IG5zYi1jb25maWcsIG5zYi1mdW5jdGlvbnMsIG5zYi1uaWdodGx5CissIG5zYi1wYWNrYWdlLCBuc2ItcGxhdGZvcm06CisKKyAgIFByZS1Qb3NpeCBCb3VybmUgc2hlbGwgY29tcGF0YWJpbGl0eS4KKwogMjAwNy0wMS0yNCAxNDowMiAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CiAKICAgIFR3ZWFrIGRlYnVnIG91dHB1dAogCisyMDA3LTAxLTI0IDEzOjU4ICBkdHMxMgorCisgICAqIGxvY2FsL21pYjJjLXVwZGF0ZToKKworICAgU2hlbGxzY3JpcHQgcG9ydGFiaWxpdHkuICAoRXZlcnl0aGluZyBoYXMgL2Jpbi9zaCkKKworMjAwNy0wMS0yNCAxMzo0OSAgZHRzMTIKKworICAgKiBkaXN0LzogY3Zzc2hvdywgY3ZzdXAsIG5zYi1jb25maWcsCisgICAgIG5zYi1mdW5jdGlvbnMsIG5zYi1uaWdodGx5LCBuc2ItcGFja2FnZSwKKyAgICAgbnNiLXBsYXRmb3JtOgorCisgICBJbXByb3ZlIHNoZWxsLXNjcmlwdCBwb3J0YWJpbGl0eS4gKEV2ZXJ5dGhpbmcgaGFzIC9iaW4vc2ghKQorCisyMDA3LTAxLTI0IDEzOjQwICBkdHMxMgorCisgICAqIHNubXBsaWIvOiBzbm1wVURQRG9tYWluLmMsIHNubXBfY2xpZW50LmM6CisKKyAgIEV4dHJhIGRlYnVnZ2luZyBvdXRwdXQKKworMjAwNy0wMS0yNCAxMzozOCAgZHRzMTIKKworICAgKiBhZ2VudC9oZWxwZXJzL3RhYmxlLmMsIGFnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMKKywgYWdlbnQvaGVscGVycy90YWJsZV9kYXRhLmMsCisgICAgIGFnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYywgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCissIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgsCisgICAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaDoKKworICAgUHJlbGltaW5hcnkgdGFibGUgdW5yZWdpc3RyYXRpb24gQVBJLgorCisyMDA3LTAxLTI0IDEzOjExICBkdHMxMgorCisgICAqIGFwcHMvc25tcHRyYXBkX2xvZy5jOgorCisgICBNb3ZlIGhvc3RuYW1lIHRyYW5zbGF0aW9uIGludG8gdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBsaWJyYXJ5IHJvdXRpbmVzLgorICAgKFdoZXJlIGl0IGJlbG9uZ3MhKQorCisyMDA3LTAxLTI0IDEzOjA0ICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oLAorICAgICBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKKworICAgQmFzaWMgZnJhbWV3b3JrIGZvciB0cmFuc3BvcnQtc3BlY2lmaWMgdHJhbnNsYXRpb24gb2YgaG9zdG5hbWVzLgorCiAyMDA3LTAxLTI0IDEyOjI3ICBkdHMxMgogCiAgICAqIGFwcHMvc25tcHRyYXBkX2xvZy5jOgpAQCAtODY1MSw4ICs3MjczNyw3IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvOgogICAgICBpcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jCi0sIGlwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYwotLAorLCBpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMsCiAgICAgIGlwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKICwKICAgICAgaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCkBAIC04NzAyLDYgKzcyNzg3LDcgQEAKIAogICAgQ0hBTkdFUzogc25tcHRyYXBkOiBCVUc6IDE2MzgyMjU6IEZpeCBpbnRlcnByZXRhdGlvbiBvZiB0cmFuc3BvcnQgYWRkcmVzcyBkYXRhLgogICAgKEtlZXAgdGhpcyBjb25zaXN0ZW50IHdpdGggc25tcFVEUERvbWFpbi5jKQorICAgVGhpcyBkb2VzIG5vdCBmZWVsIHRoZSByaWdodCB3YXkgdG8gaGFuZGxlIHRoaXMhCiAKIDIwMDctMDEtMjMgMTQ6MTAgIGR0czEyCiAKQEAgLTg3MzAsOCArNzI4MTYsNyBAQAogCiAyMDA3LTAxLTIyIDE2OjE2ICBkdHMxMgogCi0gICAqIGFnZW50L21pYmdyb3VwL2FnZW50eC86IG1hc3Rlcl9hZG1pbi5jLCBtYXN0ZXIuYwotOgorICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvOiBtYXN0ZXIuYywgbWFzdGVyX2FkbWluLmM6CiAKICAgIENIQU5HRVM6IHNubXBkOiBQQVRDSDogMTY0MTY4NTogSGFuZGxlIHVucmVzcG9uc2l2ZSBBZ2VudFggc3ViYWdlbnRzIG1vcmUgcmVsaWFibHkuCiAgICBGaXggcHJvdmlkZWQgYnkgSm9zZWYgTW9lbGxlcnMKQEAgLTg3NTgsNyArNzI4NDMsMTQgQEAKICAgIENIQU5HRVM6IEZyZWVCU0Q6IEJVRzogMTYzMzQ4MzogU3VwcG9ydCBDUFUgSEFMIG9uIEZyZWVCU0Q0LngKICAgIChiZWZvcmUgQ1BVIGRlZmluaXRpb25zIHdlcmUgbW92ZWQgdG8gPHN5cy9yZXNvdXJjZS5oPikKIAotMjAwNy0wMS0xOSAxNDoyMiAgdGFuZGVycworMjAwNy0wMS0xOSAxNjoxNSAgZHRzMTIKKworICAgKiBhcHBzL3NubXB0cmFwZC5jOgorCisgICBsaWJyYXJ5IGxheWVyaW5nIGltcHJvdmVtZW50czogKm1vdmUqIChyYXRoZXIgdGhhbiBjb3B5KSBnbG9iYWwgdmFyaWFibGVzCisgICBmcm9tIHNubXB0cmFwZCB0byBsaWJuZXRzbm1wdHJhcGQKKworMjAwNy0wMS0xOSAxNDoxOCAgdGFuZGVycwogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluLAogICAgICBhZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmM6CkBAIC04NzY4LDEzICs3Mjg2MCwyNiBAQAogCiAyMDA3LTAxLTE5IDExOjI1ICB0YW5kZXJzCiAKLSAgICogY29uZmlndXJlLCBjb25maWd1cmUuaW4sCisgICAqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlLAogICAgICBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLAogICAgICBhZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYywKICAgICAgYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmM6CiAKICAgIENIQU5HRVM6IGJ1aWxkOiBhZGQgY29uZmlndXJlIGNoZWNrIGZvciBoYXNtbnRvcHQgdG8gZml4IHRoZSBidWlsZCBvbiBzeXN0ZW1zIHRoYXQgbGFjayBpdAogCisyMDA3LTAxLTE4IDEyOjUwICB0YW5kZXJzCisKKyAgICogYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYzoKKworICAgbGlicmFyeSBsYXllcmluZyBpbXByb3ZlbWVudHM6IG1vdmUgZ2xvYmFsIHZhcmlhYmxlcyBmcm9tIHNubXB0cmFwZCB0byBsaWJuZXRzbm1wdHJhcGQKKworMjAwNy0wMS0xOCAxMToxMyAgdGFuZGVycworCisgICAqIGFwcHMvc25tcHRyYXBkLmMsIGFwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMsCisgICAgIG1hbi9zbm1wdHJhcGQuOC5kZWYsIG1hbi9zbm1wdHJhcGQuY29uZi41LmRlZjoKKworICAgZHJvcCAiLWUiL3ByaW50RXZlbnROdW1iZXJzIHN1cHBvcnQgZm9yIHNubXB0cmFwZCAob2Jzb2xldGUsIGRlcHJlY2F0ZWQgYW5kIGJyZWFrcyBsaWJyYXJ5IGxheWVyaW5nKQorCiAyMDA3LTAxLTE2IDEwOjA0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYzoKQEAgLTg3OTUsNiArNzI5MDAsMTIgQEAKIAogICAgRG9uJ3QgaGFyZGNvZGUgdGhlIHNpemUgb2YgY291bnRlcjY0IHN0cnVjdHVyZSAobWF5IGJlIHdyb25nIG9uIDY0LWJpdCBib3hlcykKIAorMjAwNy0wMS0xNiAwOTowMCAgZHRzMTIKKworICAgKiBhZ2VudC9hZ2VudF90cmFwLmM6CisKKyAgIEV4dHJhIGRlYnVnZ2luZyBvdXRwdXQuCisKIDIwMDctMDEtMTEgMjI6MTMgIHRhbmRlcnMKIAogICAgKiBhZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMsCkBAIC04ODA0LDEwICs3MjkxNSwxNiBAQAogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBsaWJyYXJ5IGxheWVyaW5nIGltcHJvdmVtZW50czogaW50cm9kdWNlIG5ldHNubXBfbWt0ZW1wIHRvIHByZXZlbnQgbGlibmV0c25tcGFnZW50IGZyb20gZGVwZW5kaW5nIG9uIGxpYm5ldHNubXBtaWJzCiAKKzIwMDctMDEtMTEgMjE6MzUgIGhhcmRha2VyCisKKyAgICogY29uZmlndXJlLmluOgorCisgICBjaGFuZ2VkIGF1dG9jb25mIHJlcSB0byAyLjYxCisKIDIwMDctMDEtMTEgMjE6MjggIGhhcmRha2VyCiAKLSAgICogc25tcGxpYi86IHNubXBBQUw1UFZDRG9tYWluLmMsIHNubXBJUFhEb21haW4uYwotLCBzbm1wU1RERG9tYWluLmMsIHNubXBUQ1BEb21haW4uYywKKyAgICogc25tcGxpYi86IHNubXBBQUw1UFZDRG9tYWluLmMsIHNubXBJUFhEb21haW4uYywKKyAgICAgc25tcFNURERvbWFpbi5jLCBzbm1wVENQRG9tYWluLmMsCiAgICAgIHNubXBUQ1BJUHY2RG9tYWluLmMsIHNubXBVRFBEb21haW4uYywKICAgICAgc25tcFVEUElQdjZEb21haW4uYywgc25tcF9zZXJ2aWNlLmMsCiAgICAgIHNubXBfdHJhbnNwb3J0LmM6CkBAIC04ODMyLDYgKzcyOTQ5LDEyIEBACiAKICAgIENIQU5HRVM6IFNvbGFyaXM6IElGLU1JQiBmaXg6IGFkZCBtaXNzaW5nIHJldHVybiBhdCBlbmQgb2YgZ2V0X2lmX3N0YXRzCiAKKzIwMDctMDEtMDggMDg6MzAgIHRhbmRlcnMKKworICAgKiBhZ2VudC9NYWtlZmlsZS5pbjoKKworICAgQ0hBTkdFUzogYnVpbGQ6IGxpYnJhcnkgbGF5ZXJpbmcgaW1wcm92ZW1lbnRzOiBidWlsZCBsaWJyYXJpZXMgaW4gdGhlIGNvcnJlY3Qgb3JkZXIgKGxpYm5ldHNubXBhZ2VudCBiZWZvcmUgbGlibmV0c25tcGhlbHBlcnMgYmVmb3JlIGxpYm5ldHNubXBtaWJzKQorCiAyMDA3LTAxLTA3IDE5OjQ3ICB0YW5kZXJzCiAKICAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oOgpAQCAtODg0NSw3ICs3Mjk2OCw3IEBACiAgICBDSEFOR0VTOiBTb2xhcmlzOiBCVUc6IDE2MjYxNTM6IG5vIGhyU1dSdW4gaW5mb3JtYXRpb25zIG9uIFNvbGFyaXMgem9uZXMKICAgIFBhdGNoIHByb3ZpZGVkIGJ5IEtsYXVzIE11ZWhsZmVsZAogCi0yMDA3LTAxLTA2IDAwOjM0ICB0YW5kZXJzCisyMDA3LTAxLTA2IDAwOjMwICB0YW5kZXJzCiAKICAgICogcGVybC9hZ2VudC9hZ2VudC54czoKIApAQCAtODg1NywxMiArNzI5ODAsMTcgQEAKIAogICAgZ2V0IHJpZCBvZiBDKysgY29tbWVudHMKIAotMjAwNy0wMS0wMyAyMjoyMyAgdGFuZGVycworMjAwNy0wMS0wMiAyMzozMyAgdGFuZGVycwogCi0gICAqIHBlcmwvU05NUC86IFNOTVAueHMsIHQvY29uZi50OgorICAgKiBhZ2VudC9hZ2VudF9yZWdpc3RyeS5jOgogCi0gICBjbGVhbiB1cCBjb21waWxlIGFuZCBmaXggdGVzdHMuCi0gICBCYWNrcG9ydCBmcm9tIDUuNS5kZXYKKyAgIEJVRzogQ292ZXJpdHkgIzE3MzogcmVtb3ZlIHN1cGVyZmx1b3VzIE5VTEwgY2hlY2sgKGFscmVhZHkgZGVyZWZlcmVuY2VkIGVhcmxpZXIgYW55d2F5KQorCisyMDA3LTAxLTAyIDIzOjA4ICB0YW5kZXJzCisKKyAgICogc25tcGxpYi9zeXN0ZW0uYzoKKworICAgb25seSBsb2cgYSBtZXNzYWdlIHdoZW4gdGhlIG1pYl9pbmRleGVzIGRpcmVjdG9yeSBpcyAqcmVhbGx5KiBjcmVhdGVkCiAKIDIwMDctMDEtMDIgMjI6NTMgIHRhbmRlcnMKIApAQCAtODg3Niw2ICs3MzAwNCw2MiBAQAogCiAgICBCVUc6IENvdmVyaXR5ICMxOTM6IHByb3Blcmx5IGluaXRpYWxpemUgc2Vzc2lvbiBwb2ludGVyIGJlZm9yZSB1c2UKIAorMjAwNy0wMS0wMiAyMDoxMyAgdGFuZGVycworCisgICAqIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmM6CisKKyAgIGJhY2sgb3V0IHByZXZpb3VzIGJhZCBjaGFuZ2UgdG8gYWdlbnQgcmVnaXN0cnkKKworMjAwNy0wMS0wMiAxOTo1MiAgdGFuZGVycworCisgICAqIGFnZW50L3NubXBfYWdlbnQuYzoKKworICAgQ0hBTkdFUzogc25tcGQ6IFBBVENIOiAxNjAxNDUzOiBmcm9tICJSb2JlcnQgV2lsY294IjogRHluYW1pYyBNZW1vcnkgZmFpbHVyZSBoYW5kbGluZyBpbXByb3ZlbWVudHMKKworMjAwNy0wMS0wMiAxOTo1MiAgdGFuZGVycworCisgICAqIHNubXBsaWIvZGVmYXVsdF9zdG9yZS5jLCBzbm1wbGliL3JlYWRfY29uZmlnLmMsCisgICAgIGFnZW50L2FnZW50X3JlZ2lzdHJ5LmMsIGFnZW50L2hlbHBlcnMvbnVsbC5jLAorICAgICBhZ2VudC9oZWxwZXJzL29sZF9hcGkuYywgYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jCissIGFnZW50L2hlbHBlcnMvdGFibGUuYywgYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jCissIGFnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jLAorICAgICBzbm1wbGliL3NubXBDYWxsYmFja0RvbWFpbi5jLCBzbm1wbGliL3NubXB1c20uYywKKyAgICAgYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jLCBhZ2VudC9oZWxwZXJzL3dhdGNoZXIuYworLCBhZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jLAorICAgICBhZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jLAorICAgICBhZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMsCisgICAgIGFnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYywKKyAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYywKKyAgICAgYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jLAorICAgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYzoKKworICAgQ0hBTkdFUzogUEFUQ0g6IDE2MDE0NTM6IGZyb20gIlJvYmVydCBXaWxjb3giOiBEeW5hbWljIE1lbW9yeSBmYWlsdXJlIGhhbmRsaW5nIGltcHJvdmVtZW50cworCisyMDA3LTAxLTAyIDE3OjU2ICB0YW5kZXJzCisKKyAgICogTWFrZWZpbGUuaW46CisKKyAgIHJlbW92ZSBMRF9SVU5fUEFUSCBjb21tZW50IGZvciBweXRob24KKworMjAwNy0wMS0wMiAxNzozOCAgdGFuZGVycworCisgICAqIE1ha2VmaWxlLnRvcCwgY29uZmlndXJlLCBuZXQtc25tcC1jb25maWcuaW4KKzoKKworICAgQ0hBTkdFUzogYnVpbGQ6IHVwZGF0ZSB0byBhdXRvY29uZiAyLjYxCisKKzIwMDctMDEtMDIgMTc6MjMgIHRhbmRlcnMKKworICAgKiBNYWtlZmlsZS5pbiwgaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0va2ZyZWVic2QuaDoKKworICAgTkVXUzogUG9ydHM6IFBBVENIOiAxNjIzODc0OiBmcm9tICJQZXRyIFNhbGluZ2VyIjogYWRkIEdOVS9rRnJlZUJTRCBzdXBwb3J0CisKKzIwMDctMDEtMDIgMTc6MTcgIHRhbmRlcnMKKworICAgKiBhZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmM6CisKKyAgIENIQU5HRVM6IGJ1aWxkOiBhZGQgd29ya2Fyb3VuZCBmb3IgQUNfRlVOQ19HRVRNTlRFTlQoKSBidWcgaW4gYXV0b2NvbmYgMi42MGIgYW5kIDIuNjEgKHNlZSBEZWJpYW4gYnVncyAjNDAzMjQzLCAjNDAzMDc5KQorCiAyMDA3LTAxLTAyIDE2OjQ4ICBkdHMxMgogCiAgICAqIGxvY2FsL21pYjJjOgpAQCAtODg4NSw4ICs3MzA2OSw4IEBACiAKIDIwMDctMDEtMDIgMTY6MDAgIGR0czEyCiAKLSAgICogc25tcGxpYi86IHNubXBVRFBEb21haW4uYywgc25tcFVEUElQdjZEb21haW4uYwotLCBzbm1wVW5peERvbWFpbi5jOgorICAgKiBzbm1wbGliLzogc25tcFVEUERvbWFpbi5jLCBzbm1wVURQSVB2NkRvbWFpbi5jLAorICAgICBzbm1wVW5peERvbWFpbi5jOgogCiAgICBDSEFOR0VTOiBzbm1wbGliOiBCVUc6IDE2MDAxNzE6IFN1cHBvcnQgbG9uZ2VyIGNvbW11bml0eSBzdHJpbmdzIGluIFZBQ00gY29uZmlnLgogICAgUGF0Y2ggcHJvdmlkZWQgYnkgUm9iZXJ0IFdpbGNveApAQCAtODg5OCwyMCArNzMwODIsMjcgQEAKICAgIENIQU5HRVM6IHNubXBkOiBCVUc6IDE1NDY4MTc6IEZpeCBzbm1wRW50ZXJwcmlzZSB2YXJiaW5kIHdoZW4gZm9yd2FyZGluZyB2MSB0cmFwcy4KICAgIFBhdGNoIHByb3ZpZGVkIGJ5IFBhYmxvIFBhc3NlcmEuCiAKLTIwMDctMDEtMDIgMTA6MzggIGR0czEyCisyMDA3LTAxLTAyIDEwOjM0ICBkdHMxMgogCiAgICAqIGNvbmZpZ3VyZSwgY29uZmlndXJlLmluOgogCiAgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE2MjUxMzU6IGNvbmZpZ3VyZSBsb2NhdGlvbiBvZiBweXRob24gaW50ZXJwcmV0ZXIKICAgIFByb3ZpZGVkIGJ5IEFuZHJldyBMYW5nbWVhZAogCi0yMDA3LTAxLTAyIDEwOjM4ICBkdHMxMgorMjAwNy0wMS0wMiAxMDozNCAgZHRzMTIKIAogICAgKiBNYWtlZmlsZS5pbiwgTWFrZWZpbGUudG9wOgogCiAgICBORVdTOiBjb25maWd1cmU6IFBBVENIIDE2MjUxMzU6IGNvbmZpZ3VyZSBsb2NhdGlvbiBvZiBweXRob24gaW50ZXJwcmV0ZXIKICAgIFByb3ZpZGVkIGJ5IEFuZHJldyBMYW5nbWVhZAogCisyMDA3LTAxLTAyIDEwOjIyICBkdHMxMgorCisgICAqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOgorCisgICBDSEFOR0VTOiBidWlsZDogUEFUQ0g6IDE2MjQ0MDY6IG9wdGlvbiB0byBoYXJkY29kZSBsb2NhdGlvbiBvZiBtb3VudCB0YWJsZQorICAgU3VibWl0dGVkIGJ5IEpvY2hlbgorCiAyMDA3LTAxLTAxIDE3OjQ0ICBkdHMxMgogCiAgICAqIGFnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYzoKQEAgLTg5MTksMTIgKzczMTEwLDMzIEBACiAgICBDSEFOR0VTOiBzbm1wZDogUEFUQ0g6IDE2MDExODgsIEJVRzogMTYwMDQzMjogSGFuZGxlIHNpZ25hbHMgcHJvcGVybHkgd2hlbiByZXN0YXJ0aW5nIHRoZSBhZ2VudC4KICAgIEZpeCBwcm92aWRlZCBieSBMb2ljIERvbWFpZ25lLgogCi0yMDA3LTAxLTAxIDE2OjEyICBkdHMxMgorMjAwNy0wMS0wMSAxNzozNSAgZHRzMTIKIAotICAgKiBzbm1wbGliL3NubXBfY2xpZW50LmM6CisgICAqIHNubXBsaWIvbWliLmM6CisKKyAgIEhhbmRsZSBub24td3JpdGFibGUgTUlCIGluZGV4ZXMgKGUuZy4gcnVuIGFzIG5vbi1wcml2aWxlZ2VkIHVzZXIpCisKKzIwMDctMDEtMDEgMTY6MDkgIGR0czEyCisKKyAgICogaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgsIHNubXBsaWIvc25tcF9jbGllbnQuYworOgogCiAgICBORVdTOiBzbm1wbGliOiBQQVRDSEVTIDE1OTI3MDY6IEZpeCBtZW1vcnkgbGVhayB3aGVuIGNsb25pbmcgdmFyYmluZHMuCi0gICBQYXRjaCBieSBTdGV2ZW4gRG9yaWdvdHRpLgorICAgQmFzZWQgb24gYSBzdWdnZXN0aW9uIGJ5IFN0ZXZlbiBEb3JpZ290dGkuCisKKzIwMDctMDEtMDEgMTY6MDkgIGR0czEyCisKKyAgICogc25tcGxpYi9zbm1wX2FwaS5jOgorCisgICBDSEFOR0VTOiBzbm1wbGliOiBQQVRDSDogMTU5MjcwNjogRml4IG1lbW9yeSBsZWFrIHdoZW4gY2xvbmluZyB2YXJiaW5kcy4KKyAgIEJhc2VkIG9uIGEgc3VnZ2VzdGlvbiBieSBTdGV2ZW4gRG9yaWdvdHRpLgorCisyMDA3LTAxLTAxIDE1OjQ4ICBkdHMxMgorCisgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wLzogcGFzcy5jLCBwYXNzX3BlcnNpc3QuYzoKKworICAgTkVXUzogYWdlbnQ6IFBBVENIIDE1ODUxNDY6IEV4dGVuZCByYW5nZSBvZiBhdmFpbGFibGUgZXJyb3IgY29kZXMKKyAgIFN1Ym1pdHRlZCBieSBBbnRob255IE5vdmF0c2lzLgogCiAyMDA3LTAxLTAxIDE1OjI5ICBkdHMxMgogCkBAIC04OTM1LDggKzczMTQ3LDggQEAKIAogMjAwNy0wMS0wMSAxNToxNiAgZHRzMTIKIAotICAgKiBhcHBzLzogc25tcGRmLmMsIHNubXBnZXQuYywgc25tcGdldG5leHQuYwotLCBzbm1wc2V0LmM6CisgICAqIGFwcHMvOiBzbm1wZGYuYywgc25tcGdldC5jLCBzbm1wZ2V0bmV4dC5jLAorICAgICBzbm1wc2V0LmM6CiAKICAgIE1vdmUgZ2xvYmFsICdmYWlsdXJlcycgdmFyaWFibGUgY2xvc2VyIHRvIHdoZXJlIGl0IGlzIHVzZWQuCiAgICBDSEFOR0VTOiBhcHBzOiBQQVRDSDogMTUyOTUyMzogQ2xvc2UgU05NUCBzZXNzaW9uIG9uIGZhaWx1cmUuCkBAIC04OTQ4LDYgKzczMTYwLDE2IEBACiAgICBQcm90ZWN0IGFnYWluc3QgcG90ZW50aWFsIGRvdWJsZSBkZWxldGUuCiAgICBQYXRjaCBwcm92aWRlZCBieSBNYWdudXMgRnJvbXJlaWRlLgogCisyMDA3LTAxLTAxIDE0OjIyICBkdHMxMgorCisgICAqIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCwgc25tcGxpYi9taWIuYywKKyAgICAgc25tcGxpYi9wYXJzZS5jOgorCisgICBNYWludGFpbiBNSUIgZGlyZWN0b3J5IGluZGV4IGZpbGVzIHVuZGVyIC92YXIvbmV0LXNubXAKKyAgIChpbiBsaW5lIHdpdGggRmlsZSBIaWVyYXJjaHkgU3RhbmRhcmQgc3BlY2lmaWNhdGlvbnMpCisgICBTZWUgaHR0cDovL2J1Z3MuZGViaWFuLm9yZy9jZ2ktYmluL2J1Z3JlcG9ydC5jZ2k/YnVnPTM4OTQzNAorICAgYW5kIGRpc2N1c3Npb24gIk1JQnMgaW4gbmV0LXNubXAiIG9uIGNvZGVycyBsaXN0IChPY3QgMjAwNikKKwogMjAwNy0wMS0wMSAxMToyOCAgZHRzMTIKIAogICAgKiBhZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmM6CkBAIC04OTU1LDYgKzczMTc3LDEyIEBACiAgICBFbnN1cmUgc3lzT1JEZXNjcmlwdGlvbnMgYXJlIG51bGwtdGVybWluYXRlZCwgc28gdGhleSBjYW4gYmUKICAgIHNhZmVseSBwYXNzZWQgdG8gJ3N0cmR1cCgpJy4gIFJlcG9ydGVkIGJ5IFdvbGZnYW5nIFBlZG90LgogCisyMDA2LTEyLTI5IDE3OjI1ICBkdHMxMgorCisgICAqIEZBUToKKworICAgU3luY2hyb25pc2Ugd2l0aCBXaWtpIHZlcnNpb24uCisKIDIwMDYtMTItMjggMjM6MjkgIHRhbmRlcnMKIAogICAgKiBzbm1wbGliL3NubXBVRFBEb21haW4uYzoKQEAgLTg5ODQsMTAgKzczMjEyLDkgQEAKIAogMjAwNi0xMi0xNyAxODowMSAgYWxleF9iCiAKLSAgICogd2luMzIvOiBNYWtlZmlsZS1hcHBzLmluLCBsaWJzbm1wX2RsbC9NYWtlZmlsZS5pbgotLCBzbm1wZC9NYWtlZmlsZS5pbiwgc25tcGRzZGsvTWFrZWZpbGUuaW4KLSwgc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4sCi0gICAgIHNubXB0cmFwZC9NYWtlZmlsZS5pbjoKKyAgICogd2luMzIvOiBNYWtlZmlsZS1hcHBzLmluLCBsaWJzbm1wX2RsbC9NYWtlZmlsZS5pbiwKKyAgICAgc25tcGQvTWFrZWZpbGUuaW4sIHNubXBkc2RrL01ha2VmaWxlLmluLAorICAgICBzbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiwgc25tcHRyYXBkL01ha2VmaWxlLmluOgogCiAgICBBZGQgZ2RpMzIubGliIHRvIGZpeCBsaW5raW5nIHByb2JsZW0gd2hlbiB1c2luZyB0aGUgc3RhdGljIHZlcnNpb24gb2YgdGhlCiAgICBTU0wgbGlicmFyaWVzLiAgVGhhbmtzIHRvIFNpbW9uIEVkd2FyZHMgZm9yIHRoZSBmaXguCkBAIC05MDAwLDE1ICs3MzIyNywxNSBAQAogCiAyMDA2LTEyLTEyIDIzOjUzICB0YW5kZXJzCiAKLSAgICogYWdlbnQvbWliZ3JvdXAvaG9zdC86IGhyX2ZpbGVzeXMuYywgaHJfc3RvcmFnZS5jCi0sIGhyX3N3aW5zdC5jOgorICAgKiBhZ2VudC9taWJncm91cC9ob3N0LzogaHJfZmlsZXN5cy5jLCBocl9zdG9yYWdlLmMsCisgICAgIGhyX3N3aW5zdC5jOgogCiAgICBDSEFOR0VTOiBMaW51eDogUEFUQ0g6IDE1ODEyOTQ6IGZyb20gIk1pY2hhZWwgVGF0YXJpbm92IjogaG9zdC1yZXNvdXJjZXMgaW1wcm92ZW1lbnRzCiAKIDIwMDYtMTItMTIgMjE6MjcgIHRhbmRlcnMKIAotICAgKiB3aW4zMi9uZXQtc25tcC86IG5ldC1zbm1wLWNvbmZpZy5oLAotICAgICBuZXQtc25tcC1jb25maWcuaC5pbjoKKyAgICogd2luMzIvbmV0LXNubXAvOiBuZXQtc25tcC1jb25maWcuaCwgbmV0LXNubXAtY29uZmlnLmguaW4KKzoKIAogICAgcmUtYWRkIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUgogCkBAIC05MDI0LDcgKzczMjUxLDcgQEAKIAogICAgQ0hBTkdFUzogV2luMzI6IGZpeCB3aW4zMi9Db25maWd1cmUgLS13aXRoLWlwdjYKIAotMjAwNi0xMi0xMiAxODoyMSAgdGFuZGVycworMjAwNi0xMi0xMiAxODoxMCAgdGFuZGVycwogCiAgICAqIHdpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oOgogCkBAIC05MDM2LDEzICs3MzI2Myw4OCBAQAogCiAgICBBZGQgdmVyc2lvbiB0byBGQVEuaHRtbC4KIAotMjAwNi0xMi0wOSAwMDoxNiAgdGFuZGVycworMjAwNi0xMi0wOSAxNzoxMSAgYWxleF9iCiAKLSAgICogaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vOiBkYXJ3aW44LmgsIGRhcndpbjkuaAorICAgKiBtYW4vOiBNYWtlZmlsZS5pbiwgbWFrZV9pbmRleC5wbCwgbWFuX3NlY3Rpb25zLnR4dAogOgogCisgICAtQ3JlYXRlIGh0bWwgcGFnZXMgZm9yIEFMTCBtYW4gcGFnZXMuCisgICAtSW1wcm92ZSBlcnJvciBtZXNzYWdlIHdoZW4gY3JlYXRpbmcgdGhlIGluZGV4Lmh0bWwgZmlsZS4KKworMjAwNi0xMi0wOSAxNzowNiAgYWxleF9iCisKKyAgICogbG9jYWwvOiBodG1sLWFkZC1oZWFkZXItZm9vdGVyLnBsLCBodG1sLXRleHRmaWxlLWZpeC5wbAorOgorCisgICBBZGQgdGlkeSBjb21tYW5kIGxpbmUgb3B0aW9uIGFuZCBhZGQgbWlzc2luZyBSRUFETUUgZmlsZXMuCisKKzIwMDYtMTItMDkgMDA6MTYgIHRhbmRlcnMKKworICAgKiBpbmNsdWRlL25ldC1zbm1wL3N5c3RlbS86IGRhcndpbjguaCwgZGFyd2luOS5oOgorCiAgICBDSEFOR0VTOiBNYWNPU1g6IFBBVENIOiAxNjAwNDUzOiBmcm9tICJDaHJpcyBKYWxiZXJ0IjogT1MgWCBjb21waWxlLXRpbWUgZW5kaWFuIGRldGVybWluYXRpb24KIAorMjAwNi0xMi0wOCAyMjo0NyAgdGFuZGVycworCisgICAqIGRpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlM6CisKKyAgIGRvY3VtZW50IHNvbWUgbW9yZSBwb3N0LXJlbGVhc2UgdGFza3MKKworMjAwNi0xMi0wOCAyMjoyNiAgdGFuZGVycworCisgICAqIG1hbi9uZXRzbm1wX2FnZW50LjMsIG1hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMsCisgICAgIG1hbi9uZXRzbm1wX2FnZW50X3RyYXAuMywgbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMworLCBtYW4vbmV0c25tcF9iYWJ5X3N0ZXBzLjMsCisgICAgIG1hbi9uZXRzbm1wX2J1bGtfdG9fbmV4dC4zLCBtYW4vbmV0c25tcF9jYWNoZV9oYW5kbGVyLjMKKywgbWFuL25ldHNubXBfY2FsbGJhY2suMywgbWFuL25ldHNubXBfY29udGFpbmVyLjMKKywgbWFuL25ldHNubXBfZGF0YV9saXN0LjMsIG1hbi9uZXRzbm1wX2RlYnVnLjMKKywgbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zLCBtYW4vbmV0c25tcF9oYW5kbGVyLjMKKywgbWFuL25ldHNubXBfaW5zdGFuY2UuMywKKyAgICAgbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMsIG1hbi9uZXRzbm1wX2xlYWYuMywKKyAgICAgbWFuL25ldHNubXBfbGlicmFyeS4zLCBtYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMworLCBtYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMsCisgICAgIG1hbi9uZXRzbm1wX21vZGVfZW5kX2NhbGwuMywgbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMworLCBtYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX2FjY2Vzc19tZXRob2RzLjMsCisgICAgIG1hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zLAorICAgICBtYW4vbmV0c25tcF9uZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3MuMywKKyAgICAgbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zLAorICAgICBtYW4vbmV0c25tcF9vaWRfc3Rhc2guMywgbWFuL25ldHNubXBfb2xkX2FwaS4zLAorICAgICBtYW4vbmV0c25tcF9yZWFkX2NvbmZpZy4zLCBtYW4vbmV0c25tcF9yZWFkX29ubHkuMywKKyAgICAgbWFuL25ldHNubXBfcm93X21lcmdlLjMsIG1hbi9uZXRzbm1wX3NjYWxhci4zLAorICAgICBtYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMywgbWFuL25ldHNubXBfc2VyaWFsaXplLjMKKywgbWFuL25ldHNubXBfc25tcF9hZ2VudC4zLCBtYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMKKywgbWFuL25ldHNubXBfc25tcF9jbGllbnQuMywKKyAgICAgbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMsIG1hbi9uZXRzbm1wX3NubXBfcGR1LjMsCisgICAgIG1hbi9uZXRzbm1wX3NubXBfc2Vzc2lvbi4zLCBtYW4vbmV0c25tcF9zdGFzaF9jYWNoZS4zCissIG1hbi9uZXRzbm1wX3N0YXNoX3RvX25leHQuMywgbWFuL25ldHNubXBfdGFibGUuMworLCBtYW4vbmV0c25tcF90YWJsZV9hcnJheS4zLAorICAgICBtYW4vbmV0c25tcF90YWJsZV9jb250YWluZXIuMywgbWFuL25ldHNubXBfdGFibGVfZGF0YS4zCissIG1hbi9uZXRzbm1wX3RhYmxlX2RhdGFzZXQuMywKKyAgICAgbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zLCBtYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMKKywgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuMywKKyAgICAgbWFuL25ldHNubXBfdGFibGVfaXRlcmF0b3IuaC4zLAorICAgICBtYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zLCBtYW4vbmV0c25tcF90YWJsZV9yb3dzLjMKKywgbWFuL25ldHNubXBfdGRhdGEuMywgbWFuL25ldHNubXBfdXRpbC4zLAorICAgICBtYW4vbmV0c25tcF91dGlsaXRpZXMuMywgbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zCissIG1hbi9uZXRzbm1wX3dhdGNoZXIuMywgcGVybC9BU04vQVNOLnBtLAorICAgICBwZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtLCBwZXJsL09JRC9PSUQucG0sCisgICAgIHBlcmwvU05NUC9TTk1QLnBtLCBwZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0KKywgcGVybC9hZ2VudC9hZ2VudC5wbSwgcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0KKywgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0sCisgICAgIHBlcmwvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtLCBjb25maWd1cmUsCisgICAgIGNvbmZpZ3VyZS5pbiwgZG94eWdlbi5jb25mLCBzZWRzY3JpcHQuaW4sCisgICAgIGRpc3QvTWFrZWZpbGUsIGRpc3QvbmV0LXNubXAuc3BlYywKKyAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYywgRkFRLCBSRUFETUU6CisKKyAgIC0gdmVyc2lvbiB0YWcgKCA1LjUuZGV2ICkKKwogMjAwNi0xMi0wOCAyMjoyMCAgdGFuZGVycwogCiAgICAqIGxvY2FsL1ZlcnNpb24tTXVuZ2UucGw6CkBAIC05MDU1LDMxICs3MzM1Nyw0NCBAQAogCiAgICBORVdTOiBCVUc6IDE2MTE1MjQ6IGZpeCB0Y3AgY29ubmVjdGlvbiB0YWJsZSBmZCBsZWFrCiAKLTIwMDYtMTItMDcgMTU6NTYgIHRhbmRlcnMKKzIwMDYtMTItMDggMTM6MTcgIG1hcnoKIAotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS86IGNwdS5oLCBjcHUvY3B1X21hY2guYwotLCBjcHUvY3B1X21hY2guaDoKKyAgICogcGVybC9TTk1QLzogTWFrZWZpbGUuUEwsIFNOTVAucG06CisKKyAgIHJldmVydCB1bmluZm9ybWVkIHZlcnNpb24gY2hhbmdlCisKKzIwMDYtMTItMDcgMjE6NTAgIHVpZDM5MDM5CisKKyAgICogcGVybC9TTk1QLzogTWFrZWZpbGUuUEwsIFNOTVAucG0sIFNOTVAueHMsCisgICAgIHQvY29uZi50OgorCisgICBjbGVhbiB1cCBjb21waWxlIGFuZCBmaXggdGVzdHMKKworMjAwNi0xMi0wNyAxNjo0OCAgbWFyegorCisgICAqIHBlcmwvU05NUC9TTk1QLnBtOgorCisgICBjb21tZW50IGZpeAorCisyMDA2LTEyLTA3IDE1OjUyICB0YW5kZXJzCisKKyAgICogYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvOiBjcHUuaCwgY3B1L2NwdV9tYWNoLmMsCisgICAgIGNwdS9jcHVfbWFjaC5oOgogCiAgICBORVdTOiBNYWNPU1g6IFBBVENIOiAxNjAwNTIyOiBmcm9tICJCaWxsIEZlbm5lciI6IENQVSBIQUwgaW1wbGVtZW50YXRpb24gZm9yIG1hY2gvZGFyd2luCiAKLTIwMDYtMTItMDcgMTU6NTQgIHRhbmRlcnMKLQotICAgKiBhZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYzoKLQotICAgZmlsZSBjcHVfbWFjaC5jIHdhcyBhZGRlZCBvbiBicmFuY2ggVjUtNC1wYXRjaGVzIG9uIDIwMDYtMTItMDcgMTU6NTY6MzggKzAwMDAKLQotMjAwNi0xMi0wNyAxNTo1NCAgdGFuZGVycwotCi0gICAqIGFnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbWFjaC5oOgotCi0gICBmaWxlIGNwdV9tYWNoLmggd2FzIGFkZGVkIG9uIGJyYW5jaCBWNS00LXBhdGNoZXMgb24gMjAwNi0xMi0wNyAxNTo1NjozOCArMDAwMAotCiAyMDA2LTEyLTA3IDEzOjEwICB0YW5kZXJzCiAKICAgICogcGVybC9TTk1QL1NOTVAucG06CiAKICAgIENIQU5HRVM6IGRvY3VtZW50YXRpb246IFBBVENIOiAxNjA0NTgwOiBTTk1QKDMpIG1hbnVhbCBwYWdlIGNvcnJlY3Rpb25zIChzcG90dGVkIGJ5IHRlay1vcHMpCiAKKzIwMDYtMTItMDYgMjA6MzAgIGhhcmRha2VyCisKKyAgICogZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUzoKKworICAgZG9jdW1lbnQgdmFyaW91cyBhc3BlY3RzIG9mIHBvc3QtcmVsZWFzZSB0aGluZ3MgdG8gZG8KKwogMjAwNi0xMi0wNiAxNTozNCAgcnN0b3J5CiAKICAgICogYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jOgpAQCAtOTExOCw2ICs3MzQzMywzOSBAQAogCiAgICBDSEFOR0VTOiBCVUc6IDE2MDAwOTM6IGF1dG9jb25mIDIuNjAgYnJlYWtzIHRoZSBidWlsZAogCisyMDA2LTEyLTA0IDE3OjQ5ICBoYXJkYWtlcgorCisgICAqIENPUFlJTkc6CisKKyAgIGNoYW5nZSB0b3AgdGV4dCB0byByZW1vdmUgaGlzdG9yeSBzZWN0aW9uIHdoaWNoIHdhcyBvdXQgb2YgZGF0ZQorCisyMDA2LTEyLTAzIDIzOjIwICBhbGV4X2IKKworICAgKiB3aW4zMi86IGRpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCwKKyAgICAgbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwOgorCisgICBXaW4zMjogIFdvcmtzcGFjZSBjb21waWxlIGZpeCwgYnVpbGQgaW5zdHJ1Y3Rpb25zIHVwZGF0ZS4KKworMjAwNi0xMS0yNCAxNzo1MyAgaGFyZGFrZXIKKworICAgKiBGQVEsIFJFQURNRSwgY29uZmlndXJlLCBjb25maWd1cmUuaW4KKywgc2Vkc2NyaXB0LmluLCBzbm1wbGliL3NubXBfdmVyc2lvbi5jLAorICAgICBkaXN0L25ldC1zbm1wLnNwZWM6CisKKyAgIC0gdmVyc2lvbiB0YWcgKCA1LjQgKQorCisyMDA2LTExLTI0IDE3OjUyICBoYXJkYWtlcgorCisgICAqIENIQU5HRVMsIE5FV1M6CisKKyAgIHZlcnNpb24gdXBkYXRlCisKKzIwMDYtMTEtMjQgMTc6NDggIGhhcmRha2VyCisKKyAgICogQ2hhbmdlTG9nOgorCisgICB2ZXJzaW9uIHVwZGF0ZQorCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKIENoYW5nZXM6IFY1LjQucmMzIC0+IFY1LjQKQEAgLTEyOTQzLDYgKzc3MjkxLDcgQEAKIAogMjAwNi0wOC0xNyAwNzo1MCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYwogLCBsb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmM6CiAKQEAgLTEzOTQ1LDYgKzc4Mjk0LDcgQEAKIAogMjAwNi0wNi0xMiAxMzowNSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCiA6CiAKQEAgLTE1NDM2LDcgKzc5Nzg2LDcgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmM6CiAKLSAgIEhhbmRsZSBmdWxsLWxlbmd0aCBJUHY2IGFkZHJlc3Nlcy4gIEZpeCBzdXBwbGllZCBieSBSYWRlayBWb2vDoWwKKyAgIEhhbmRsZSBmdWxsLWxlbmd0aCBJUHY2IGFkZHJlc3Nlcy4gIEZpeCBzdXBwbGllZCBieSBSYWRlayBWb2vniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLXniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy044CVCiAKIDIwMDYtMDEtMzAgMDE6NTIgIGR0czEyCiAKQEAgLTE1NDgzLDcgKzc5ODMzLDcgQEAKICwgc25tcGxpYi9zbm1wX2FwaS5jLCBwZXJsL1NOTVAvU05NUC5wbToKIAogICAgSGFuZGxlIG5vbi1pbmNyZWFzaW5nIE9JRHMgZHVyaW5nIGEgKHBlcmwpIGJ1bGt3YWxrLgotICAgUGF0Y2ggIzEzNjQ2NTAgZnJvbSBPbGUgQmrDuHJuIEhlc3NlbgorICAgUGF0Y2ggIzEzNjQ2NTAgZnJvbSBPbGUgQmrniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy054it9YCRi++9pPWAjLXniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy05Ze3biBIZXNzZW4KIAogMjAwNi0wMS0yNyAwMzowNyAgZHRzMTIKIApAQCAtMTU5MzcsNiArODAyODcsNyBAQAogCiAyMDA2LTAxLTEwIDAzOjA3ICB0YW5kZXJzCiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0xNTk0NCw2ICs4MDI5NSw3IEBACiAKIDIwMDYtMDEtMDkgMTc6NDEgIHRhbmRlcnMKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTE2OTU1LDYgKzgxMzA3LDcgQEAKIAogMjAwNS0xMi0wOSAyMDo1OCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0xNjk3Nyw2ICs4MTMzMCw3IEBACiAKIDIwMDUtMTItMDkgMjA6NTcgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTE4MjU3LDYgKzgyNjExLDcgQEAKIAogMjAwNS0xMS0xNiAxNToxOCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0xODM5Niw2ICs4Mjc1MSw3IEBACiAKIDIwMDUtMTEtMTUgMjE6MTQgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTE4NDA5LDYgKzgyNzY1LDcgQEAKIAogMjAwNS0xMS0xNSAyMTowOCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCiA6CiAKQEAgLTE4NDM4LDYgKzgyNzk1LDcgQEAKIAogMjAwNS0xMS0xNSAxOToyNCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTE4NTU0LDYgKzgyOTEyLDcgQEAKIAogMjAwNS0xMS0xNCAxNzoyOCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMTk4MzUsNiArODQxOTQsNyBAQAogCiAyMDA1LTEwLTI4IDIzOjI3ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuaAogOgogCkBAIC0xOTg0Miw2ICs4NDIwMiw3IEBACiAKIDIwMDUtMTAtMjggMjM6MjYgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTIxOTEwLDYgKzg2MjcxLDcgQEAKIAogMjAwNS0wOS0yNyAxOToyNSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCiA6CiAKQEAgLTIyNjIyLDYgKzg2OTg0LDcgQEAKIAogMjAwNS0wOS0wNiAxOToxNyAgdGFuZGVycwogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvLmN2c2lnbm9yZQogOgogCkBAIC0yMjczNCw2ICs4NzA5Nyw3IEBACiAKIDIwMDUtMDgtMzAgMDg6MDYgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnN0YW50cy5oCiA6CiAKQEAgLTI1NTcwLDYgKzg5OTM0LDcgQEAKIAogMjAwNS0wMy0yOCAxNDoyOSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTI1NTk5LDcgKzg5OTY0LDcgQEAKICAgICogbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjOgogCiAgICAtIHBhc3MgTlVMTCB0byBjb25maWcgaGFuZGxlciByZWcsIHRvIHVzZSBjdXJyZW50IGFwcHR5cGUKLSAgIC0gYWRkIHNlcGVyYXRvcnMgYW5kIGhlYWRlcnMgd2hlbiBzYXZpbmcgcGVyc2lzdGVudCBkYXRhCisgICAtIGFkZCBzZXBhcmF0b3JzIGFuZCBoZWFkZXJzIHdoZW4gc2F2aW5nIHBlcnNpc3RlbnQgZGF0YQogICAgLSByZW1vdmUgZXh0cmFuZW91cyBuZXdsaW5lIGluIHBlcnNpc3RlbnQgZGF0YQogCiAyMDA1LTAzLTI0IDIyOjA2ICByc3RvcnkKQEAgLTI1NjEwLDYgKzg5OTc1LDcgQEAKIAogMjAwNS0wMy0yNCAxNjo0OCAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0yNjM0Nyw2ICs5MDcxMyw3IEBACiAKIDIwMDUtMDEtMjcgMjI6NTIgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMjgxMDIsNiArOTI0NjksNyBAQAogCiAyMDA0LTEwLTE3IDIwOjU2ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKIDoKIApAQCAtMjg1MjIsNiArOTI4OTAsNyBAQAogCiAyMDA0LTEwLTE0IDE4OjE1ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgKIDoKIApAQCAtMjg4NzAsNiArOTMyMzksNyBAQAogCiAyMDA0LTEwLTA4IDE5OjI3ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYwogOgogCkBAIC0yODg3Nyw2ICs5MzI0Nyw3IEBACiAKIDIwMDQtMTAtMDggMTk6MjUgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTI5OTMwLDYgKzk0MzAxLDcgQEAKIAogMjAwNC0wOS0yNCAwOToxNSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0yOTk4OSw2ICs5NDM2MSw3IEBACiAKIDIwMDQtMDktMjMgMTM6MjQgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMKIDoKIApAQCAtMzAxNjUsNiArOTQ1MzgsNyBAQAogCiAyMDA0LTA5LTIxIDA2OjQzICBoYXJkYWtlcgogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmMKIDoKIApAQCAtMzExOTgsNyArOTU1NzIsNyBAQAogCiAgICAqIGFnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYzoKIAotICAgZml4IGZsb2F0IGNhbGMgaW4gdmFyX2V4dGVuc2libGVfZGlzayBwZXIgSGFyYWxkIFN0cmHfYmVyZ2VyIDxoc0BzeXNsb2cuYXQ+CisgICBmaXggZmxvYXQgY2FsYyBpbiB2YXJfZXh0ZW5zaWJsZV9kaXNrIHBlciBIYXJhbGQgU3RyYeeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXjg4NlcmdlciA8aHNAc3lzbG9nLmF0PgogCiAyMDA0LTA4LTMxIDE0OjAyICBoYXJkYWtlcgogCkBAIC0zMTM1Nyw2ICs5NTczMSw3IEBACiAKIDIwMDQtMDgtMjcgMjM6MjIgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwogOgogCkBAIC0zMjIxNyw2ICs5NjU5Miw3IEBACiAKIDIwMDQtMDctMTAgMTk6NTEgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jCiA6CiAKQEAgLTMyMzAxLDYgKzk2Njc3LDcgQEAKIAogMjAwNC0wNy0wOSAyMjo1OCAgaGFyZGFrZXIKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jCiA6CiAKQEAgLTMyMzc5LDYgKzk2NzU2LDcgQEAKIAogMjAwNC0wNy0wOSAwOTo1NyAgaGFyZGFrZXIKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS8uY3ZzaWdub3JlCiA6CiAKQEAgLTMyNTIyLDYgKzk2OTAwLDcgQEAKIAogMjAwNC0wNy0wNyAxMzo0MSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTMzMzQ5LDYgKzk3NzI4LDcgQEAKIAogMjAwNC0wNi0yOCAxNToxMSAgcnN0b3J5CiAKKyAgICoKICAgICAgYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9jb25zdGFudHMuaAogOgogCkBAIC0zMzc3OSw3ICs5ODE1OSw3IEBACiAgICAqIGNvbmZpZ3VyZS5pbiwgY29uZmlndXJlOgogCiAgICBGaXggaGFuZGxpbmcgb2YgLS1lbmFibGUtbG9jYWwtc211eCBvcHRpb24KLSAgIChQYXRjaCAjOTQ5ODA4IGZyb20gRXJpayDEbmdn5XJkKQorICAgKFBhdGNoICM5NDk4MDggZnJvbSBFcmlrIOeIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLTniK31gJGL772k9YCMtm5nZ+eIrfWAkYvvvaT1gI+x54it9YCRi++9pPWAjLXohJpkKQogCiAyMDA0LTA2LTE4IDA2OjQ2ICBkdHMxMgogCkBAIC0zNjAxOSw2ICsxMDAzOTksNyBAQAogCiAyMDA0LTA0LTEzIDExOjQ0ICByc3RvcnkKIAorICAgKgogICAgICBhZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCiA6CiAKQEAgLTM2MDI2LDYgKzEwMDQwNyw3IEBACiAKIDIwMDQtMDQtMTMgMTE6NDMgIHJzdG9yeQogCisgICAqCiAgICAgIGFnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwogOgogCkBAIC02NDc0Myw3ICsxMjkxMjUsNyBAQAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0LzogaHJfc3dydW4uYyAoVjQtMi1wYXRjaGVzLjUpLCBocl9zd3J1bi5jCiA6CiAKLSAgIEZpeCBMaW51eCBmaWxlIGRlc2NyaXB0b3IgbGVhayAocmVwb3J0ZWQgYnkgT2xpdmVyIEbkbmdlcikKKyAgIEZpeCBMaW51eCBmaWxlIGRlc2NyaXB0b3IgbGVhayAocmVwb3J0ZWQgYnkgT2xpdmVyIEbniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy156mrZ2VyKQogICAgCiAyMDAxLTAzLTE0IDA1OjIyICBqYnBuCiAKQEAgLTY5MjY4LDcgKzEzMzY1MCw3IEBACiAKICAgICogYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmM6CiAKLSAgIC0gKG1lbW9yeS5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2r4cnN0YWQ6CisgICAtIChtZW1vcnkuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQ6CiAgICAgIC0gZml4ZWQgbGludXggcHJvYmxlbTogd3JvbmcgcGFyYW1zIGdldHRpbmcgcmV0dXJuZWQuCiAgICAKIDIwMDAtMDUtMjUgMDU6MzggIG1zbGlmY2FrCkBAIC03MTA0OCw3ICsxMzU0MzAsNyBAQAogCiAgICAtIChjb25maWd1cmUqIHVjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jKToKICAgICAgLSBQcm92aWRlIG1pc3NpbmcgJ2dldHBhZ2VzaXplJyByb3V0aW5lIGZvciBTb2xhcmlzIDIuNAotICAgICAgIChUaGFua3MgdG8gUmFnbmFyIEtq+HJzdGFkKQorICAgICAgIChUaGFua3MgdG8gUmFnbmFyIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQpCiAgICAKIDIwMDAtMDItMTYgMjA6MTcgIG1zbGlmY2FrCiAKQEAgLTc4Mzc2LDcgKzE0Mjc1OCw3IEBACiAgICAgIGxvYWRhdmUuYywgbWVtb3J5X3NvbGFyaXMyLmMsIHBhc3MuYywgcGFzc19wZXJzaXN0LmMsIHByb2MuYywKICAgICAgdmVyc2lvbmluZm8uYywgYWxhcm0uYywgZXZlbnQuYywgTWFrZWZpbGUuaW4sIHBhcnNlLmMsIHNubXAuYywKICAgICAgc25tcF9kZWJ1Zy5jLCBzbm1wX2xvZ2dpbmcuYywgc25tcF9sb2dnaW5nLmgpOiBQYXRjaCBmcm9tIFJhZ25hcgotICAgICBLavhyc3RhZDoKKyAgICAgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZDoKICAgICAgLSBkbyBmaWxlLCBzdGRlcnIsIGFuZCBzeXNsb2cgc3VwcG9ydC4KICAgIAogMTk5OS0wNy0xNSAwODo0NSAgaGFyZGFrZXIKQEAgLTc4NTE5LDcgKzE0MjkwMSw3IEBACiAKICAgICogYWdlbnQvc25tcGQuYzoKIAotICAgLSAoc25tcGQuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq+HJzdGFkOgorICAgLSAoc25tcGQuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQ6CiAgICAgIC0gQWRkIG9wdGlvbnMgZm9yIHN3aXRjaGluZyB0byBhIGdpdmVuIHVpZCBhbmQgZ2lkLgogICAgCiAxOTk5LTA3LTA4IDE1OjE2ICBoYXJkYWtlcgpAQCAtOTUyODgsNyArMTU5NjcwLDcgQEAKIAogICAgKiBzbm1wbGliL21pYi5jOgogCi0gICBGaXggYSBDIHByZWNlZGVuY2UgYm90Y2gtdXAsIHRoYW5rcyB0byBGYWJy7WNpbyBMYXMgQ2FzYXMgPEZhYnJpY2lvQGF0YW4uY29tLmJyPgorICAgRml4IGEgQyBwcmVjZWRlbmNlIGJvdGNoLXVwLCB0aGFua3MgdG8gRmFicueIrfWAkYvvvaT1gJGL772k5q274oCyY2lvIExhcyBDYXNhcyA8RmFicmljaW9AYXRhbi5jb20uYnI+CiAgICAKIDIwMDMtMDItMjYgMTQ6MTQgIG5iYQogCkBAIC0xMTIwNzEsNyArMTc2NDUzLDcgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0LzogaHJfc3dydW4uYyAoVjQtMi1wYXRjaGVzLjUpLCBocl9zd3J1bi5jOgogCi0gICBGaXggTGludXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgKHJlcG9ydGVkIGJ5IE9saXZlciBG5G5nZXIpCisgICBGaXggTGludXggZmlsZSBkZXNjcmlwdG9yIGxlYWsgKHJlcG9ydGVkIGJ5IE9saXZlciBG54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteepq2dlcikKICAgIAogMjAwMS0wMy0xNCAwNToyMiAgamJwbgogCkBAIC0xMTYzMTYsNyArMTgwNjk4LDcgQEAKIAogICAgKiBhZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmM6CiAKLSAgIEZpeCBMaW51eCBmaWxlIGRlc2NyaXB0b3IgbGVhayAocmVwb3J0ZWQgYnkgT2xpdmVyIEbkbmdlcikKKyAgIEZpeCBMaW51eCBmaWxlIGRlc2NyaXB0b3IgbGVhayAocmVwb3J0ZWQgYnkgT2xpdmVyIEbniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy156mrZ2VyKQogICAgCiAyMDAxLTAzLTEzIDEzOjIwICBoYXJkYWtlcgogCkBAIC0xMTk1NjIsNyArMTgzOTQ0LDcgQEAKIAkKIDIwMDAtMDUtMjUgMTA6MDcgIGhhcmRha2VyCiAKLQktIChtZW1vcnkuYyk6IFBhdGNoIGZyb20gUmFnbmFyIEtq+HJzdGFkOgorCS0gKG1lbW9yeS5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZDoKIAkgIC0gZml4ZWQgbGludXggcHJvYmxlbTogd3JvbmcgcGFyYW1zIGdldHRpbmcgcmV0dXJuZWQuCiAJCiAyMDAwLTA1LTI1IDA1OjM4ICBtc2xpZmNhawpAQCAtMTIwNzUxLDcgKzE4NTEzMyw3IEBACiAKIAktIChjb25maWd1cmUqIHVjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jKToKIAkgIC0gUHJvdmlkZSBtaXNzaW5nICdnZXRwYWdlc2l6ZScgcm91dGluZSBmb3IgU29sYXJpcyAyLjQKLQkgICAgKFRoYW5rcyB0byBSYWduYXIgS2r4cnN0YWQpCisJICAgIChUaGFua3MgdG8gUmFnbmFyIEtq54it9YCRi++9pPWAj7HniK31gJGL772k9YCMteeIrfWAkYvvvaT1gIy/cnN0YWQpCiAJCiAyMDAwLTAyLTE2IDIwOjE3ICBtc2xpZmNhawogCkBAIC0xMjYwODUsNyArMTkwNDY3LDcgQEAKICAgICAtIChzbm1wZGVsdGEuYywgaW50NjQuYywgaW50NjQuaCk6IG1pbmltYWwgYzY0IHN1cHBvcnQgZm9yIHNubXBkZWx0YS4gVW50ZXN0ZWQuCiAKIGhhcmRha2VyICA4IEp1bCA5OSAxNjowMjo1OAotICAgIC0gKHNubXBkLmMpOiBQYXRjaCBmcm9tIFJhZ25hciBLavhyc3RhZDoKKyAgICAtIChzbm1wZC5jKTogUGF0Y2ggZnJvbSBSYWduYXIgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZDoKICAgICAgIC0gQWRkIG9wdGlvbnMgZm9yIHN3aXRjaGluZyB0byBhIGdpdmVuIHVpZCBhbmQgZ2lkLgogCiBkYXZlcyAgOSBKdWwgOTkgMDE6NDk6NDkKQEAgLTEyNjEzMiw3ICsxOTA1MTQsNyBAQAogICAgICAgbG9hZGF2ZS5jLCBtZW1vcnlfc29sYXJpczIuYywgcGFzcy5jLCBwYXNzX3BlcnNpc3QuYywgcHJvYy5jLAogICAgICAgdmVyc2lvbmluZm8uYywgYWxhcm0uYywgZXZlbnQuYywgTWFrZWZpbGUuaW4sIHBhcnNlLmMsIHNubXAuYywKICAgICAgIHNubXBfZGVidWcuYywgc25tcF9sb2dnaW5nLmMsIHNubXBfbG9nZ2luZy5oKTogUGF0Y2ggZnJvbSBSYWduYXIKLSAgICAgIEtq+HJzdGFkOgorICAgICAgS2rniK31gJGL772k9YCPseeIrfWAkYvvvaT1gIy154it9YCRi++9pPWAjL9yc3RhZDoKICAgICAgIC0gZG8gZmlsZSwgc3RkZXJyLCBhbmQgc3lzbG9nIHN1cHBvcnQuCiAKIGhhcmRha2VyIDIwIEp1bCA5OSAxNzowNjo1MwpkaWZmIC0tZ2l0IGEvRkFRIGIvRkFRCmluZGV4IGY0Zjc3NTUuLjRmY2NlYTIgMTAwNjQ0Ci0tLSBhL0ZBUQorKysgYi9GQVEKQEAgLTEsNyArMSw3IEBACiAgICAgICBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyAoRkFRKSBmb3IgdGhlIFVDRC9OZXQtU05NUCBwYWNrYWdlCiAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAJCSAgICAgICBGQVEgQXV0aG9yOiBEYXZlIFNoaWVsZAotCSAgICAgICAgTmV0LVNOTVAgVmVyc2lvbjogNS40LjQgU1ZOIGJyYW5jaAorCQkJTmV0LVNOTVAgVmVyc2lvbjogNS43LjMucmMxCiAJICAgIE5ldC1TTk1QL1VDRC1TTk1QIFByb2plY3QgTGVhZGVyOiBXZXMgSGFyZGFrZXIKIAkgICAgIEVtYWlsOiBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0CiAKQEAgLTEzMTQsNyArMTMxNCw3IEBACiAgIGNvdmVyZWQgaW4gdGhlIEFHRU5UIGFuZCBDT0RJTkcgc2VjdGlvbnMuCiAKICAgWW91IHNob3VsZCBhbHNvIHJlYWQgdGhlIHNubXB0cmFwIHR1dG9yaWFsIGF0Ci0JaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS9jb21tYW5kcy9zbm1wdHJhcC5odG1sCisgICAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1RVVDpzbm1wdHJhcAogICB3aGljaCB3aWxsIGhlbHAgeW91IHVuZGVyc3RhbmQgZXZlcnl0aGluZyB5b3UgbmVlZCB0byBrbm93IGFib3V0IHRyYXBzLgogCiAKQEAgLTEzNTEsNyArMTM1MSw3IEBACiAgICAgICAgIGZvcndhcmQgZGVmYXVsdCAgICAgICAgICAgICAgICAgIDEwLjAuMC4yCiAKICAgVGhlcmUncyBhIHR1dG9yaWFsIHdpdGggbW9yZSBkZXRhaWxzIG9uIHRoZSB3ZWIgc2l0ZSBhdAotCWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYXAuaHRtbAorICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9UVVQ6c25tcHRyYXAKIAogCiAKQEAgLTIxNTgsNiArMjE1OCwxNSBAQAogICBvdXRwdXQgaXMgcmV0dXJuZWQgaW4gYSBmaXhlZCBmb3JtYXQsIGFuZCBpdCBpcyB1cCB0byB0aGUgcmVjZWl2aW5nCiAgIGFwcGxpY2F0aW9uIHRvIGludGVycHJldCB0aGlzIGFwcHJvcHJpYXRlbHkuCiAKKyAgTm90ZSB0aGF0IHRoZSAicmVsb2NhdGFibGUiIGZvcm0gb2YgdGhlICdleGVjJyBkaXJlY3RpdmUgKCdleGVjIE9JRCAuLi4uJykKKyAgcHJvZHVjZXMgTUlCIG91dHB1dCB0aGF0IGlzIG5vdCBzdHJpY3RseSB2YWxpZC4gRm9yIHRoaXMgcmVhc29uLCBzdXBwb3J0CisgIGZvciB0aGlzIGhhcyBiZWVuIGRlcHJlY2F0ZWQgaW4gZmF2b3VyIG9mICdleHRlbmQgT0lEIC4uLicsIHdoaWNoIHByb2R1Y2VzCisgIHdlbGwtZm9ybWVkIE1JQiByZXN1bHRzIChhcyB3ZWxsIGFzIHByb3ZpZGluZyBmdWxsZXIgZnVuY3Rpb25hbGl0eSkuCisgIFRoZSBtb3N0IHJlY2VudCByZWxlYXNlcyBvZiB0aGUgYWdlbnQgZG9uJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciAicmVsb2NhdGFibGUKKyAgZXhlYyIgYnkgZGVmYXVsdC4gVGhpcyBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIHdoZW4gdGhlIGFnZW50IGlzCisgIGZpcnN0IGNvbXBpbGVkLCBieSBpbmNsdWRpbmcgdGhlIG1vZHVsZSAndWNkLXNubXAvZXh0ZW5zaWJsZScgaW5zdGVhZCBvZgorICAnYWdlbnQvZXh0ZW5kJy4KKwogCiAgICdwYXNzJyBpcyBhIG1vcmUgZ2VuZXJhbCBtZWNoYW5pc20gZm9yIGltcGxlbWVudGluZyBhcmJpdHJhcnkgTUlCCiAgIG9iamVjdHMuICBUaGUgc3BlY2lmaWVkIGNvbW1hbmQgd2lsbCBiZSBpbnZva2VkIGZvciBhbnkgcmVxdWVzdCB3aXRoaW4KQEAgLTI1OTQsNyArMjYwMyw3IEBACiAKIAogV2h5IGRvZXMgdGhlIGFnZW50IGNvbXBsYWluIGFib3V0ICdubyBhY2Nlc3MgY29udHJvbCBpbmZvcm1hdGlvbic/Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICAgQWx0aG91Z2ggYW4gU05NUCBhZ2VudCBtYXkgc3VwcG9ydCBhIHdpZGUgcmFuZ2Ugb2YgbWFuYWdlbWVudAogICBpbmZvcm1hdGlvbiwgaXQgaXMgbm90IG5lY2Vzc2FyaWx5IGFwcHJvcHJpYXRlIHRvIHJlcG9ydCB0aGUgd2hvbGUKZGlmZiAtLWdpdCBhL01ha2VmaWxlLmFtIGIvTWFrZWZpbGUuYW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2Q4YzFmYQotLS0gL2Rldi9udWxsCisrKyBiL01ha2VmaWxlLmFtCkBAIC0wLDAgKzEgQEAKK0FDTE9DQUxfQU1GTEFHUyA9IC1JIG00CmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IDBlYTQxYWEuLmNmY2RmNzMgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0xLDMgKzEsNCBAQAorCiAjCiAjIE1ha2VmaWxlLmluIChhdCB0aGUgcm9vdCBvZiBuZXQtc25tcCkKICMKQEAgLTYsNiArNyw3IEBACiBWUEFUSAkJPSBAc3JjZGlyQAogCiBTVUJESVJTCQk9IHNubXBsaWIgQE1BSU5TVUJTQAorRlRTVUJESVJTCT0gQEZUTUFJTlNVQlNAIHNubXBsaWIKIFRFU1RESVJTCT0gdGVzdGluZwogCiBDUFAJCT0gQENQUEAgCQkJCQkgICAgICAgIFwKQEAgLTEzLDIyICsxNSwyMyBAQAogCQktRERPTlRfSU5DX1NUUlVDVFMgLURCSU5ESVI9JChiaW5kaXIpIAkJICAgICAgICBcCiAJCSQoRVhUUkFDUFBGTEFHUykKIAotSU5TVEFMTEhFQURFUlM9dmVyc2lvbi5oCitJTlNUQUxMSEVBREVSUz12ZXJzaW9uLmggbmV0LXNubXAtZmVhdHVyZXMuaAogSU5DTFVERVNVQkRJUj1zeXN0ZW0KIElOQ0xVREVTVUJESVJIRUFERVJTPSBhaXguaCBic2QuaCBic2RpMy5oIGJzZGk0LmggYnNkaS5oIGN5Z3dpbi5oIFwKLQlkYXJ3aW4uaCBkYXJ3aW43LmggZGFyd2luOC5oIGRhcndpbjkuaCBkeW5peC5oIFwKKwlkYXJ3aW4uaCBkYXJ3aW43LmggZGFyd2luOC5oIGRhcndpbjkuaCBkYXJ3aW4xMC5oIGRyYWdvbmZseS5oIGR5bml4LmggXAogCWZyZWVic2QyLmggZnJlZWJzZDMuaCBmcmVlYnNkNC5oIGZyZWVic2Q1LmggZnJlZWJzZDYuaCBcCiAJZnJlZWJzZDcuaCBmcmVlYnNkOC5oIGZyZWVic2Q5LmggZnJlZWJzZDEwLmggZnJlZWJzZDExLmggXAogCWZyZWVic2QxMi5oIGZyZWVic2QuaCBcCi0gICAgICAgIGdlbmVyaWMuaCBocHV4LmggXAotCWlyaXguaCBsaW51eC5oIG1pbmd3MzIuaCBtaXBzLmggbmV0YnNkLmggb3NmNS5oIFwKKyAgICAgICAgZ2VuZXJpYy5oIFwKKwlocHV4LmggaXJpeC5oIGxpbnV4LmggbWluZ3czMi5oIG1pcHMuaCBuZXRic2QuaCBvc2Y1LmggXAogCW9wZW5ic2QuaCBvcGVuYnNkNS5oIG9wZW5ic2Q0LmggXAogCXNvbGFyaXMyLjMuaCBzb2xhcmlzMi40Lmggc29sYXJpczIuNS5oIHNvbGFyaXMyLjYuaCBcCi0Jc29sYXJpcy5oIHN1bm9zLmggc3ZyNS5oIHN5c3YuaCB1bHRyaXg0LmggZHJhZ29uZmx5LmgKKwlzb2xhcmlzLmggc3Vub3MuaCBzdnI1Lmggc3lzdi5oIHVsdHJpeDQuaAogSU5DTFVERVNVQkRJUjI9bWFjaGluZQogSU5DTFVERVNVQkRJUkhFQURFUlMyPWdlbmVyaWMuaAogSU5TVEFMTEJVSUxUSEVBREVSUz1pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi1JTlNUQUxMQklOU0NSSVBUUz1uZXQtc25tcC1jb25maWcKK0lOU1RBTExCVUlMVElOQ0xVREVIRUFERVJTPUBGRUFUVVJFSEVBREVSU0AKK0lOU1RBTExCSU5TQ1JJUFRTPW5ldC1zbm1wLWNvbmZpZyBuZXQtc25tcC1jcmVhdGUtdjMtdXNlcgogSU5TVEFMTFVDREhFQURFUlM9dWNkLXNubXAtY29uZmlnLmggdmVyc2lvbi5oIG1pYl9tb2R1bGVfY29uZmlnLmgKIAogIwpAQCAtNDQsMTMgKzQ3LDIwIEBACiAjIHBlcmwgc3BlY2lmaWMKICMKICMgeWVzLCBvcmRlciBtYXR0ZXJzIGhlcmUuICBkZWZhdWx0X3N0b3JlIG11c3Qgb2NjdXIgYmVmb3JlIGFueXRoaW5nIGVsc2UKLVBFUkxNT0RVTEVTPWRlZmF1bHRfc3RvcmUgU05NUCBBU04gT0lEIGFnZW50CitQRVJMTU9EVUxFUz1kZWZhdWx0X3N0b3JlIFNOTVAgQVNOIE9JRCBhZ2VudCBUcmFwUmVjZWl2ZXIKK1BFUkxNT0RVTEVGVFM9cGVybC9kZWZhdWx0X3N0b3JlL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdCBcCisJcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5mdCBcCisJcGVybC9BU04vbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0IFwKKwlwZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuZnQgXAorCXBlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0IFwKKwlwZXJsL1RyYXBSZWNlaXZlci9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuZnQKIFBFUkxBUkdTPUBQRVJMQVJHU0AKIAogIwogIyBweXRob24gc3BlY2lmaWMKICMKIFBZVEhPTkFSR1M9QFBZVEhPTkFSR1NACitQWVRIT05NT0RVTEVGVFM9cHl0aG9uL25ldHNubXAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmZ0CiAKICMKICMgbGlidG9vbApAQCAtNTgsOSArNjgsMTQgQEAKIExJQlRPT0xfREVQUyA9IEBMSUJUT09MX0RFUFNACiAKICMKKyMgZmVhdHVyZSBjaGVja3MgZm9yIG9wdGlvbmFsIGNvbXBvbmVudHMKKyMKK0ZUT1RIRVJUQVJHUz1AUEVSTEZFQVRVUkVTQCBAUFlUSE9ORkVBVFVSRVNACisKKyMKICMgdGFyZ2V0cwogIwotYWxsOiAgICBzZWRzY3JpcHQgRVhBTVBMRS5jb25mIHN0YW5kYXJkYWxsIG5ldC1zbm1wLWNvbmZpZy14IEBQRVJMVEFSR1NAIEBQWVRIT05UQVJHU0AKK2FsbDogICAgc2Vkc2NyaXB0IEVYQU1QTEUuY29uZiAgQEZFQVRVUkVUQVJHU0Agc3RhbmRhcmRhbGwgbmV0LXNubXAtY29uZmlnLXggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgQFBFUkxUQVJHU0AgQFBZVEhPTlRBUkdTQAogCiBzdGFydC1mbGFnOgogCUB0b3VjaCBidWlsZC1pbi1wcm9ncmVzcy1mbGFnCkBAIC03MiwyMyArODcsMjMgQEAKIAkkKFNIRUxMKSAuL2NvbmZpZy5zdGF0dXMgLS1yZWNoZWNrCiAKIAotc25tcGxpYjoKK3NubXBsaWI6IEBGRUFUVVJFVEFSR1NACiAJQChjZCBzbm1wbGliOyAkKE1BS0UpICkKIAotYWdlbnQ6CithZ2VudDogQEZFQVRVUkVUQVJHU0AKIAlAKGNkIHNubXBsaWI7ICQoTUFLRSkgKQogCUAoY2QgYWdlbnQ7ICQoTUFLRSkgKQogCi1hcHBzOgorYXBwczogQEZFQVRVUkVUQVJHU0AKIAlAKGNkIHNubXBsaWI7ICQoTUFLRSkgKQogCUAoY2QgYWdlbnQ7ICQoTUFLRSkgbGlicykKIAlAKGNkIGFwcHM7ICQoTUFLRSkgKQogCi1zbm1wZ2V0IHNubXBidWxrZ2V0IHNubXB3YWxrIHNubXBidWxrd2FsayBzbm1wdHJhbnNsYXRlIHNubXBzdGF0dXMgc25tcGRlbHRhIHNubXB0YWJsZSBzbm1wdGVzdCBzbm1wc2V0IHNubXB1c20gc25tcHZhY20gc25tcGdldG5leHQgZW5jb2RlX2tleWNoYW5nZSBzbm1wZGYgc25tcHRyYXA6Citzbm1wZ2V0IHNubXBidWxrZ2V0IHNubXB3YWxrIHNubXBidWxrd2FsayBzbm1wdHJhbnNsYXRlIHNubXBzdGF0dXMgc25tcGRlbHRhIHNubXB0YWJsZSBzbm1wdGVzdCBzbm1wc2V0IHNubXB1c20gc25tcHZhY20gc25tcGdldG5leHQgZW5jb2RlX2tleWNoYW5nZSBzbm1wZGYgc25tcHRyYXAgc25tcHRsczogQEZFQVRVUkVUQVJHU0AKIAlAKGNkIHNubXBsaWI7ICQoTUFLRSkgKQogCUAoY2QgYXBwczsgJChNQUtFKSAkQCApCiAKLXNubXB0cmFwZDoKK2FnZW50eHRyYXAgc25tcHRyYXBkOiBARkVBVFVSRVRBUkdTQAogCUAoY2Qgc25tcGxpYjsgJChNQUtFKSApCiAJQChjZCBhZ2VudDsgJChNQUtFKSBsaWJzKQogCUAoY2QgYXBwczsgJChNQUtFKSAkQCApCkBAIC05OCw2ICsxMTMsNyBAQAogIwogc2Vkc2NyaXB0OiBzZWRzY3JpcHQuaW4gaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkKHNyY2RpcikvYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oCiAJJChDUFApICQoc3JjZGlyKS9zZWRzY3JpcHQuaW4gfCBlZ3JlcCAnXnNbLyNdJyB8IHNlZCAncy9SRU1PVkVNRS8vZztzIyAqLyMvI2c7cy8gKiMvIy9nO3MjLyAqIy8jZztzLyMgZy8jZy87JyA+IHNlZHNjcmlwdAorCWVjaG8gJ3MvVkVSU0lPTklORk8vJChWRVJTSU9OKS9nJyA+PiBzZWRzY3JpcHQKIAllY2hvICdzI0RBVEFESVIjJChkYXRhZGlyKSNnJyA+PiBzZWRzY3JpcHQKIAllY2hvICdzI0xJQkRJUiMkKGxpYmRpcikjZycgPj4gc2Vkc2NyaXB0CiAJZWNobyAncyNCSU5ESVIjJChiaW5kaXIpI2cnID4+IHNlZHNjcmlwdApAQCAtMTA3LDI0ICsxMjMsMjEgQEAKIEVYQU1QTEUuY29uZjogc2Vkc2NyaXB0IEVYQU1QTEUuY29uZi5kZWYKIAkkKFNFRCkgLWYgc2Vkc2NyaXB0ICQoc3JjZGlyKS9FWEFNUExFLmNvbmYuZGVmID4gRVhBTVBMRS5jb25mCiAKLWRvY3M6IGRvY3NkaXIgbWFuY3AKK2RvY3M6IGRvY3NkaXIgCiAKIGRvY3NkaXI6IGRvY3Nkb3gKIAogZG9jc2RveDogZG94eWdlbi5jb25mCi0Jc3JjZGlyPSQoc3JjZGlyKSBkb3h5Z2VuICQoc3JjZGlyKS9kb3h5Z2VuLmNvbmYKLQktcm0gZG9jcy9tYW4vbWFuMy90b2RvLjMKLQktcm0gZG9jcy9tYW4vbWFuMy9kZXByZWNhdGVkLjMKLQotbWFuY3A6Ci0JQGZvciBpIGluIGRvY3MvbWFuL21hbjMvKiA7IGRvIFwKLQkgICAgIGNwICQkaSBtYW4vbmV0c25tcF9gYmFzZW5hbWUgJCRpYCA7IFwKLQlkb25lCisJc3JjZGlyPSQoc3JjZGlyKSBWRVJTSU9OPSQoVkVSU0lPTikgZG94eWdlbiAkKHNyY2RpcikvZG94eWdlbi5jb25mCiAKIG5ldC1zbm1wLWNvbmZpZy14OiBuZXQtc25tcC1jb25maWcKIAljaG1vZCBhK3ggbmV0LXNubXAtY29uZmlnCiAJdG91Y2ggbmV0LXNubXAtY29uZmlnLXgKIAorbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIteDogbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIKKwljaG1vZCBhK3ggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIKKwl0b3VjaCBuZXQtc25tcC1jcmVhdGUtdjMtdXNlci14CisKICMKICMgZXh0cmEgaW5zdGFsbCBydWxlcwogIwpAQCAtMTM3LDExICsxNTAsOCBAQAogIwogIyB0ZXN0IHRhcmdldHMKICMKLXRlc3Q6IGFsbCB0ZXN0ZGlycwotCSggY2QgdGVzdGluZzsgJChNQUtFKSB0ZXN0ICkKLQotdGVzdC1taWJzOiBhbGwgdGVzdGRpcnMKLQkoIGNkIHRlc3Rpbmc7ICQoTUFLRSkgdGVzdC1taWJzICkKK3Rlc3QgdGVzdC1taWJzIHRlc3RhbGwgdGVzdGZhaWxlZCB0ZXN0c2ltcGxlOiBhbGwgdGVzdGRpcnMKKwkoIGNkIHRlc3Rpbmc7ICQoTUFLRSkgJEAgKQogCiB0ZXN0ZGlyczoKIAlmb3IgaSBpbiAkKFRFU1RESVJTKSA7IGRvCVwKQEAgLTE1NCw3ICsxNjQsNyBAQAogZGlzdGFsbDogJHtzcmNkaXJ9L2NvbmZpZ3VyZSAke3NyY2Rpcn0vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAKIAogT1RIRVJDTEVBTlRBUkdFVFM9RVhBTVBMRS5jb25mIHNlZHNjcmlwdAotT1RIRVJDTEVBTlRPRE9TPXBlcmxjbGVhbiBAUFlUSE9OQ0xFQU5UQVJHU0AKK09USEVSQ0xFQU5UT0RPUz1wZXJsY2xlYW4gQFBZVEhPTkNMRUFOVEFSR1NAIGNsZWFuZmVhdHVyZXMgcGVybGNsZWFuZmVhdHVyZXMgcHl0aG9uY2xlYW5mZWF0dXJlcwogCiAjCiAjIHBlcmwgc3BlY2lmaWMgYnVpbGQgcnVsZXMKQEAgLTE5NSwxMyArMjA1LDIxIEBACiAJQGlmIHRlc3QgLWYgcGVybC9NYWtlZmlsZTsgdGhlbiBcCiAJICAgKCBjZCBwZXJsIDsgJChNQUtFKSBjbGVhbiApIDsgXAogCWZpCisKIHBlcmxyZWFsY2xlYW46CiAJQGlmIHRlc3QgLWYgcGVybC9NYWtlZmlsZTsgdGhlbiBcCiAJICAgKCBjZCBwZXJsIDsgJChNQUtFKSByZWFsY2xlYW4gKSA7IFwKIAlmaQogCisuaC5mdDoKKwkkKEZFQVRVUkVDSEVDSykgLS1mZWF0dXJlLWdsb2JhbCAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaCBgZGlybmFtZSAkPGAgJDwgJEAgJChDQykgLUkgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUgLUkgJCh0b3Bfc3JjZGlyKS9pbmNsdWRlIC1FICQoQ1BQRkxBR1MpICQoQ0ZMQUdTKSAtYwogCi0jCitwZXJsZmVhdHVyZXM6ICQoUEVSTE1PRFVMRUZUUykKKworcGVybGNsZWFuZmVhdHVyZXM6CisJJChSTSkgJChQRVJMTU9EVUxFRlRTKQorCisKICMgcHl0aG9uIHNwZWNpZmljIGJ1aWxkIHJ1bGVzCiAjCiBQWU1BS0U9JChQWVRIT04pIHNldHVwLnB5ICQoUFlUSE9OQVJHUykKQEAgLTIyOSw2ICsyNDcsMTAgQEAKIHB5dGhvbmNsZWFuOgogCUAoZGlyPWBwd2RgOyBjZCBweXRob247ICQoUFlNQUtFKSBjbGVhbiAtLWJhc2VkaXI9JCRkaXIpCiAKK3B5dGhvbmZlYXR1cmVzOiAkKFBZVEhPTk1PRFVMRUZUUykKKworcHl0aG9uY2xlYW5mZWF0dXJlczoKKwkkKFJNKSAkKFBZVEhPTk1PRFVMRUZUUykKIAogIwogIyBtYWtlIGRpc3RjbGVhbiBjb21wbGV0ZWx5IHJlbW92ZXMgYWxsIHRyYWNlcyBvZiBidWlsZGluZyBpbmNsdWRpbmcKQEAgLTI0NywxMiArMjY5LDE1IEBACiBjb25maWdjbGVhbjogbWFrZWZpbGVjbGVhbgogCXJtIC1mIGNvbmZpZy5jYWNoZSBjb25maWcuc3RhdHVzIGNvbmZpZy5sb2cgXAogCQlsaWJ0b29sIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggXAotCQluZXQtc25tcC1jb25maWcgbmV0LXNubXAtY29uZmlnLXggY29uZmlndXJlLXN1bW1hcnkKKwkJbmV0LXNubXAtY29uZmlnIG5ldC1zbm1wLWNvbmZpZy14IGNvbmZpZ3VyZS1zdW1tYXJ5IFwKKwkJbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIteAogCXJtIC1mIG1pYnMvLmluZGV4CiAJcm0gLWYgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCQlcCiAJCWluY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCQlcCiAJCWluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCBcCi0JCXNubXBsaWIvc25tcHNtX2luaXQuaCAgICAgICAgICAgICAgICAgICBcCisJCWluY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggICAgICAgICAgICAgICAgICBcCisJCXNubXBsaWIvc25tcHNtX2luaXQuaCBzbm1wbGliL3NubXBzbV9zaHV0ZG93bi5oICAgICBcCisgICAgICAgICAgICAgICAgc25tcGxpYi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmggICAgICAgICAgIFwKIAkJYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmggCVwKIAkJYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luaXRzLmggCVwKIAkJYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX3NodXRkb3duLmggCVwKQEAgLTI2MCw3ICsyODUsOCBAQAogCQlhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmggCVwKIAkJYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbml0cy5oIAlcCiAJCWFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfc2h1dGRvd24uaCAJXAotCQlhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2RvdF9jb25mLmgKKwkJYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9kb3RfY29uZi5oICAgIFwKKwkJbG9jYWwvc25tcGNvbmYKIAlybSAtcmYgbWsKIAlybSAtZiAqLmNvcmUKIApAQCAtMjgxLDggKzMwNywyOCBAQAogCSAgICBlY2hvICJXQVJOSU5HOiBub3QgcnVubmluZyBjb25maWcuc3RhdHVzIjsgXAogCWZpCiAKK2NvbmZpZ3VyZV9hYyA9IGNvbmZpZ3VyZS5hYyBcCisJY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX2xpYiBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucyBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX2hlYWRlcnMgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMSBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyIFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMiBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzIFwKKwljb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzQgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncyBcCisJY29uZmlndXJlLmQvY29uZmlnX29zX3N0cnVjdF9tZW1iZXJzIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzIFwKKwljb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wZXJsX3B5dGhvbiBcCisJY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfdHlwZXMgXAorCWNvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3dpdGhfZW5hYmxlCisKICQoc3JjZGlyKS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluOiBzdGFtcC1oLmluCi0kKHNyY2Rpcikvc3RhbXAtaC5pbjogY29uZmlndXJlLmluIGFjY29uZmlnLmgKKyQoc3JjZGlyKS9zdGFtcC1oLmluOiAkKGNvbmZpZ3VyZV9hYykgYWNjb25maWcuaAogCUBpZiB0ZXN0ICJ4JChOT0FVVE9ERVBTKSIgPSAieCIgLWEgIngkKEFVVE9IRUFERVIpIiAhPSAieDoiOyB0aGVuIFwKIAkgICAgY2QgJHtzcmNkaXJ9ICYmIExDX0NPTExBVEU9QyAkKEFVVE9IRUFERVIpOyBcCiAJICAgIGVjaG8gdGltZXN0YW1wID4gJHtzcmNkaXJ9L3N0YW1wLWguaW47IFwKQEAgLTMwMSw3ICszNDcsNyBAQAogCSAgICBlY2hvICJXQVJOSU5HOiBub3QgcnVubmluZyBjb25maWcuc3RhdHVzIjsgXAogCWZpCiAKLSQoc3JjZGlyKS9jb25maWd1cmU6IGNvbmZpZ3VyZS5pbiBhY2xvY2FsLm00CiskKHNyY2RpcikvY29uZmlndXJlOiAkKGNvbmZpZ3VyZV9hYykgYWNsb2NhbC5tNAogCUBpZiB0ZXN0ICJ4JChOT0FVVE9ERVBTKSIgPSAieCIgLWEgIngkKEFVVE9DT05GKSIgIT0gIng6IjsgdGhlbiBcCiAJICAgIGNkICR7c3JjZGlyfSAmJiAkKEFVVE9DT05GKTsgXAogCSAgICBlY2hvICJQbGVhc2UgcnVuIGNvbmZpZ3VyZSBub3cuIjsgXApAQCAtMzEwLDYgKzM1NiwzMCBAQAogCSAgICBlY2hvICJXQVJOSU5HOiBub3QgcnVubmluZyBhdXRvY29uZiI7IFwKIAlmaQogCitnZW5kaXI9ZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMKK2dlbmVyYXRpb24tc2NyaXB0czogZ2VuZXJhdGlvbi1zY3JpcHRzLWRpcnMgJChnZW5kaXIpL2dlbi10cmFuc3BvcnQtaGVhZGVycyAkKGdlbmRpcikvZ2VuLXNlY3VyaXR5LWhlYWRlcnMKKworJChnZW5kaXIpL2dlbi12YXJpYWJsZXM6ICQoZ2VuZGlyKS9nZW4tdmFyaWFibGVzLmluCisJLi9jb25maWcuc3RhdHVzCisKK2dlbmVyYXRpb24tc2NyaXB0cy1kaXJzOgorCUBpZiBbICEgLWQgZGlzdCBdIDsgdGhlbiBcCisJICAgIG1rZGlyIGRpc3QgOyAgICAgICAgXAorCWZpCisJQGlmIFsgISAtZCBkaXN0L2dlbmVyYXRpb24tc2NyaXB0cyBdIDsgdGhlbiBcCisJICAgIG1rZGlyIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzIDsgICAgICAgIFwKKwlmaQorCiskKGdlbmRpcikvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzOiAkKGdlbmRpcikvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluICQoZ2VuZGlyKS9nZW4tdmFyaWFibGVzCisJcm0gLWYgJEAKKwlhdXRvY29uZiAtbyAkQCAkPAorCWNobW9kIGEreCAkQAorCiskKGdlbmRpcikvZ2VuLXNlY3VyaXR5LWhlYWRlcnM6ICQoZ2VuZGlyKS9nZW4tc2VjdXJpdHktaGVhZGVycy5pbiAkKGdlbmRpcikvZ2VuLXZhcmlhYmxlcworCXJtIC1mICRACisJYXV0b2NvbmYgLW8gJEAgJDwKKwljaG1vZCBhK3ggJEAKKwogY29uZmlnLnN0YXR1czogY29uZmlndXJlCiAJQGlmIHRlc3QgIngkKE5PQVVUT0RFUFMpIiA9ICJ4IjsgdGhlbiBcCiAJICAgIGVjaG8gInJ1bm5pbmcgY29uZmlnLnN0YXR1cyBiZWNhdXNlICQ/IGNoYW5nZWQiOyBcCkBAIC0zNDcsMjUgKzQxNywzNSBAQAogCWZpCiAKIGNoZWNrczoKLQkkKE1BS0UpIC1rIG1ha2VmaWxlY2hlY2sgY29tbWVudGNoZWNrIHdhcm5pbmdjaGVjayBkZXBlbmRjaGVjaworCSQoTUFLRSkgLWsgbWFrZWZpbGVjaGVjayBjb21tZW50Y2hlY2sgd2FybmluZ2NoZWNrIGRlcGVuZGNoZWNrIFwKKwlhc3NlcnRjaGVjayBwZXJsY2FsbG9jY2hlY2sKIAogZGVwZW5kY2hlY2s6CiAJQGVjaG8gIkNoZWNraW5nIGZvciBmdWxsIHBhdGhzIGluIGRlcGVuZGVuY3kgZmlsZXMuLi4iCi0JQGdyZXAgLW4gLUUgIl4vIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIE1ha2VmaWxlLmRlcGVuZGAgJiYgZXhpdCAxCisJQGlmIGdyZXAgLW4gLUUgIl4vIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIE1ha2VmaWxlLmRlcGVuZGA7IHRoZW4gZmFsc2U7IGZpCiAKIHdhcm5pbmdjaGVjazoKIAlAZWNobyAiQ2hlY2tpbmcgZm9yIGNwcCB3YXJuaW5ncy4uLiIKLQlAZ3JlcCAtbiAtRSAiI3dhcm5pbmciIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLW5hbWUgXCouXFtjaFxdYCAmJiBleGl0IDEKKwlAaWYgZ3JlcCAtbiAiI3dhcm5pbmciIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLW5hbWUgXCouXFtjaFxdYDsgdGhlbiBmYWxzZTsgZmkKKworYXNzZXJ0Y2hlY2s6CisJQGVjaG8gIkNoZWNraW5nIGZvciBub24tc25tcCBhc3NlcnRzLi4uIgorCUBpZiBncmVwIC1uIC13ICJhc3NlcnQiIGAkKEZJTkQpICQodG9wX3NyY2RpcikgLW5hbWUgXCouXFtjaFxdIHwgZ3JlcCAtdiBzbm1wX2Fzc2VydC5oIHwgZWdyZXAgLXYgJ3BlcmwvLipjJyB8IGdyZXAgLXYgb3BlbnNzbGA7IHRoZW4gZmFsc2U7IGZpCiAKIGNvbW1lbnRjaGVjazoKIAlAZWNobyAiQ2hlY2tpbmcgZm9yIEMrKyBzdHlsZSBjb21tZW50cy4uLiIKLQlAZ3JlcCAtbiAtRSAiKFteOiluXXxeKS8vIiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1wYXRoICcuL3dpbjMyJyAtcHJ1bmUgLW8gLW5hbWUgXCouXFtjaFxdIHwgZ3JlcCAtdiBhZ2VudC9taWJncm91cC93aW5FeHRETEwuY2AgJiYgZXhpdCAxCisJQGlmIGdyZXAgLW4gLUUgIihbXjopbl18XikvLyIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtcGF0aCAnLi93aW4zMicgLXBydW5lIC1vIC1uYW1lIFwqLlxbY2hcXSB8IGdyZXAgLXYgYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmNgOyB0aGVuIGZhbHNlOyBmaQogCi0jIGFsd2F5cyBleGl0IDEsIHNpbmNlIEkgY2FuJ3QgZmlndXJlIG91dCBob3cgdG8gaW52ZXJ0IGdyZXAgcmMKIG1ha2VmaWxlY2hlY2s6CiAJQGVjaG8gIkNoZWNraW5nIGZvciBub24tcG9ydGFibGUgTWFrZWZpbGUgY29uc3RydWN0cy4uLiIKLQlAZ3JlcCAtbiAiXC5jPSIgYCQoRklORCkgJCh0b3Bfc3JjZGlyKSAtbmFtZSAiTWFrZWZpbGUuKiJgCi0JQGV4aXQgMQorCUBpZiBncmVwIC1uICJcLmM9IiBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lIC5zdm4gLXBydW5lIC1vIC1wYXRoIC4vTWFrZWZpbGUuaW4gLXBydW5lIC1vIC1uYW1lICJNYWtlZmlsZS4qIiAtcHJpbnRgOyB0aGVuIGZhbHNlOyBmaQorCisjIEludm9raW5nIGNhbGxvYygpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZnJvbSBhIFBlcmwgWFNVQiBhbmQgZnJlZWluZyB0aGF0CisjIG1lbW9yeSBieSBjYWxsaW5nIGZyZWUoKSBmcm9tIHRoZSBYU1VCIGlzIGEgc3VyZSB3YXkgdG8gdHJpZ2dlciAiRnJlZSB0bworIyB3cm9uZyBwb29sIiBlcnJvcnMgb24gV2luZG93cy4KK3BlcmxjYWxsb2NjaGVjazoKKwlAZWNobyAiQ2hlY2tpbmcgZm9yIGNhbGxvYygpIGluIFBlcmwncyBleHRlcm5hbCBzdWJyb3V0aW5lcyAuLi4iCisJQGlmIGdyZXAgLW53RSAnY2FsbG9jfFNOTVBfTUFMTE9DX1NUUlVDVHxTTk1QX01BTExPQ19UWVBFREVGJyBgJChGSU5EKSAkKHRvcF9zcmNkaXIpIC1uYW1lICcqLnhzJ2A7IHRoZW4gZmFsc2U7IGZpCiAKIGRpc3Q6IHRhcgogCkBAIC0zNzgsMyArNDU4LDQgQEAKIAlzbm1wZ2V0IHNubXBidWxrZ2V0IHNubXB3YWxrIHNubXBidWxrd2FsayBzbm1wdHJhbnNsYXRlIHNubXBzdGF0dXMgXAogCXNubXBkZWx0YSBzbm1wdGFibGUgc25tcHRlc3Qgc25tcHNldCBzbm1wdXNtIHNubXB2YWNtIHNubXBnZXRuZXh0IFwKIAllbmNvZGVfa2V5Y2hhbmdlIHNubXBkZiBzbm1wdHJhcCBzbm1wdHJhcGQKKy5QSE9OWTogcGVybGZlYXR1cmVzIHB5dGhvbmZlYXR1cmVzCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5ydWxlcyBiL01ha2VmaWxlLnJ1bGVzCmluZGV4IDY1Njg3ZWYuLjllOWU5MDAgMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLnJ1bGVzCisrKyBiL01ha2VmaWxlLnJ1bGVzCkBAIC0xNCw2ICsxNCw2MiBAQAogCiBvYmpzOiAke09CSlN9ICR7TE9CSlN9CiAKKyMgZmVhdHVyZXMgcmVxdWlyZSB0aGF0IHN1YmRpcnMgYmUgbWFkZSAqZmlyc3QqIHRvIGdldCBkZXBlbmRlbmN5CisjIGNvbGxlY3Rpb24gcHJvY2Vzc2VkIGluIHRoZSByaWdodCBvcmRlcgorLlBIT05ZOiBmZWF0dXJlcyBmdG9ianMgZnRzdWJkaXJzCitmZWF0dXJlczogJChGVE9USEVSVEFSR1MpIGZ0c3ViZGlycyBmdG9ianMgJChGRUFUVVJFRklMRSkKK2Z0b2JqczogJChGVE9CSlMpCiskKEZFQVRVUkVGSUxFKTogJChGVE9CSlMpICQodG9wX2J1aWxkZGlyKS9pbmNsdWRlL25ldC1zbm1wL2ZlYXR1cmUtZGV0YWlscy5oCisJY2F0ICQoRlRPQkpTKSA+ICQoRkVBVFVSRUZJTEUpLmluCisJJChGRUFUVVJFUFJPQ0VTUykgJChGRUFUVVJFRklMRSkgJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggQEZFQVRVUkVfUkVNT1ZFX0ZMQUdTQCBARkVBVFVSRV9BRERfRkxBR1NACitmdHN1YmRpcnM6CisJQGlmIHRlc3QgIiQoRlRTVUJESVJTKSIgIT0gIiI7IHRoZW4gXAorCSAgICBTVUJESVJTPSIkKEZUU1VCRElSUykiIDsgICAgICAgIFwKKyAgICAgICAgZWxzZSAJCQkgCSAgICBcCisgICAgICAgICAgICBTVUJESVJTPSIkKFNVQkRJUlMpIiA7ICAgICAgICAgIFwKKyAgICAgICAgZmkgOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCWlmIHRlc3QgIiQkU1VCRElSUyIgIT0gIiI7IHRoZW4gXAorCQlpdD0iJCRTVUJESVJTIiA7IFwKKwkJZm9yIGkgaW4gJCRpdCA7IGRvIFwKKwkJCWVjaG8gIm1ha2luZyBmZWF0dXJlcyBpbiBgcHdkYC8kJGkiOyBcCisJCQkoIGNkICQkaSA7ICQoTUFLRSkgZmVhdHVyZXMgKSA7IFwKKwkJCWlmIHRlc3QgJCQ/ICE9IDAgOyB0aGVuIFwKKwkJCQlleGl0IDEgOyBcCisJCQlmaSAgXAorCQlkb25lIFwKKwlmaQorCisuUEhPTlk6IGNsZWFuZmVhdHVyZXMgY2xlYW5mZWF0dXJlc3N1YmRpcnMKK2NsZWFuZmVhdHVyZXM6IGNsZWFuZmVhdHVyZXNzdWJkaXJzCisJICAgICAgIHJtIC1mICQoRlRPQkpTKQorCSAgICAgICBybSAtZiAkKEZFQVRVUkVGSUxFKQorCSAgICAgICBybSAtZiAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaAorCitjbGVhbmZlYXR1cmVzc3ViZGlyczoKKwlAaWYgdGVzdCAiJChGVFNVQkRJUlMpIiAhPSAiIjsgdGhlbiBcCisJICAgIFNVQkRJUlM9IiQoRlRTVUJESVJTKSIgOyAgICAgICAgXAorICAgICAgICBlbHNlIAkJCSAJICAgIFwKKyAgICAgICAgICAgIFNVQkRJUlM9IiQoU1VCRElSUykiIDsgICAgICAgICAgXAorICAgICAgICBmaSA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJaWYgdGVzdCAiJCRTVUJESVJTIiAhPSAiIjsgdGhlbiBcCisJCWl0PSIkJFNVQkRJUlMiIDsgXAorCQlmb3IgaSBpbiAkJGl0IDsgZG8gXAorCQkJZWNobyAibWFraW5nIGNsZWFuZmVhdHVyZXMgaW4gYHB3ZGAvJCRpIjsgXAorCQkJKCBjZCAkJGkgOyAkKE1BS0UpIGNsZWFuZmVhdHVyZXMgKSA7IFwKKwkJCWlmIHRlc3QgJCQ/ICE9IDAgOyB0aGVuIFwKKwkJCQlleGl0IDEgOyBcCisJCQlmaSAgXAorCQlkb25lIFwKKwlmaQorCisjIGZlYXR1cmUtY2hlY2sgZGVmaW5pdGlvbnMKKy5TVUZGSVhFUzogLmZ0CisuYy5mdDoKKwlAdGVzdCAtZiAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaCB8fCBcCisJICAgIGVjaG8gIi8qIEdlbmVyYXRlZCBieSBtYWtlLiBEbyBub3QgbW9kaWZ5IGRpcmVjdGx5ICovIiBcCisJCT4gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmgKKwkkKEZFQVRVUkVDSEVDSykgLS1mZWF0dXJlLWdsb2JhbCAkKHRvcF9idWlsZGRpcikvaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaCAkKG15c3ViZGlyKSAkPCAkQCAkKENDKSAtRSAkKENQUEZMQUdTKSAkKENGTEFHUykgLWMKKwogc3ViZGlyczoKIAlAaWYgdGVzdCAiJChTVUJESVJTKSIgIT0gIiI7IHRoZW4gXAogCQlpdD0iJChTVUJESVJTKSIgOyBcCkBAIC00Miw2ICs5OCw3IEBACiAjIGhlYWRlcnMKICMKICMgc2V0IElOU1RBTExIRUFERVJTIHRvIGEgbGlzdCBvZiB0aGluZ3MgdG8gaW5zdGFsbCBpbiBlYWNoIG1ha2VmaWxlLgorIyBzZXQgSU5TVEFMTEJVSUxUSU5DTFVERUhFQURFUlMgYSBsaXN0IGJ1aWx0IGFuZCBwbGFjZWQgaW50byBpbmNsdWRlL25ldC1zbm1wLwogIyBzZXQgSU5TVEFMTEJVSUxUSEVBREVSUyB0byBhIGxpc3Qgb2YgdGhpbmdzIHRvIGluc3RhbGwgZnJvbSBidWlsZGRpcgogIyBzZXQgSU5TVEFMTFNVQkRJUkhFQURFUlMgYW5kIElOU1RBTExTVUJESVIgdG8gc3ViZGlyZWN0b3J5IGhlYWRlcnMKICMgc2V0IElOU1RBTExTVUJESVJIRUFERVJTMiBhbmQgSU5TVEFMTFNVQkRJUjIgdG8gbW9yZSBzdWJkaXJlY3RvcnkgaGVhZGVycwpAQCAtNTAsNiArMTA3LDE2IEBACiBpbnN0YWxsaGVhZGVyczogaW5zdGFsbGxvY2FsaGVhZGVycyBAaW5zdGFsbHVjZGhlYWRlcnNAIGluc3RhbGxzdWJkaXJoZWFkZXJzCiAKIGluc3RhbGxsb2NhbGhlYWRlcnM6CisJQGlmIHRlc3QgIiQoSU5TVEFMTEJVSUxUSU5DTFVERUhFQURFUlMpIiAhPSAiIiA7IHRoZW4gXAorCQllY2hvIGNyZWF0aW5nIGRpcmVjdG9yeSAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikgOyBcCisJCWl0PSIkKElOU1RBTExCVUlMVElOQ0xVREVIRUFERVJTKSIgOyBcCisJCSQoU0hFTEwpICQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvbGlicmFyeSA7IFwKKwkJJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS9hZ2VudCA7IFwKKwkJZm9yIGkgaW4gJCRpdCA7IGRvIFwKKwkJCSQoSU5TVEFMTF9EQVRBKSBpbmNsdWRlL25ldC1zbm1wLyQkaSAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvJCRpIDsgXAorCQkJZWNobyAiaW5zdGFsbGluZyAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKGluY2x1ZGVkaXIpLyQkaSIgOyBcCisJCWRvbmUgXAorCWZpCiAJQGlmIHRlc3QgIiQoSU5TVEFMTEhFQURFUlMpIiAhPSAiIiA7IHRoZW4gXAogCQllY2hvIGNyZWF0aW5nIGRpcmVjdG9yeSAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikgOyBcCiAJCWl0PSIkKElOU1RBTExIRUFERVJTKSIgOyBcCkBAIC0zMjcsNyArMzk0LDcgQEAKICMgY2xlYW5pbmcgdGFyZ2V0cwogIwogY2xlYW46IGNsZWFuc3ViZGlycyAkKE9USEVSQ0xFQU5UT0RPUykKLQkkKExJQlRPT0xDTEVBTikgJHtPQkpTfSAke0xPQkpTfSBjb3JlICQoU1RBTkRBUkRDTEVBTlRBUkdFVFMpICQoT1RIRVJDTEVBTlRBUkdFVFMpCisJJChMSUJUT09MQ0xFQU4pICR7T0JKU30gJHtMT0JKU30gICR7RlRPQkpTfSBjb3JlICQoU1RBTkRBUkRDTEVBTlRBUkdFVFMpICQoT1RIRVJDTEVBTlRBUkdFVFMpCiAKIGNsZWFuc3ViZGlyczoKIAlAaWYgdGVzdCAiJChTVUJESVJTKSIgIT0gIiI7IHRoZW4gXApAQCAtNDA0LDUgKzQ3MSw1IEBACiAuUEhPTlk6IGNsZWFuIGNsZWFuc3ViZGlycyBsaW50IFwKIAlpbnN0YWxsIGluc3RhbGxwcm9ncyBpbnN0YWxsaGVhZGVycyBpbnN0YWxsbGlicyBcCiAJaW5zdGFsbGJpbiBpbnN0YWxsc2JpbiBpbnN0YWxsc3ViZGlycyBcCi0JYWxsIHN1YmRpcnMgc3RhbmRhcmRhbGwgb2JqcyBcCisJYWxsIHN1YmRpcnMgc3RhbmRhcmRhbGwgb2JqcyBmZWF0dXJlcyBcCiAJZGVwZW5kIG5vc3lzZGVwZW5kIGRpc3RkZXBlbmQgZGVwZW5kZGlycyBub3N5c2RlcGVuZGRpcnMgZGlzdGRlcGVuZGRpcnMKZGlmZiAtLWdpdCBhL01ha2VmaWxlLnRvcCBiL01ha2VmaWxlLnRvcAppbmRleCBjNGM0NGVlLi41MDNmNjFlIDEwMDY0NAotLS0gYS9NYWtlZmlsZS50b3AKKysrIGIvTWFrZWZpbGUudG9wCkBAIC0xLDcgKzEsNyBAQAogIwogIyBNaW5pbXVtIGVudmlyb25tZW50IGFuZCB2aXJ0dWFsIHBhdGggc2V0dXAKICMKLVNIRUxMCQk9IC9iaW4vc2gKK1NIRUxMCQk9IEBTSEVMTEAKIHNyY2RpcgkJPSBAc3JjZGlyQAogdG9wX3NyY2Rpcgk9IEB0b3Bfc3JjZGlyQAogVkVSU0lPTgkJPSBAVkVSU0lPTkAKQEAgLTE1LDYgKzE1LDcgQEAKIGJpbmRpcgkJPSBAYmluZGlyQAogc2JpbmRpcgkJPSBAc2JpbmRpckAKIGxpYmRpcgkJPSBAbGliZGlyQAorZGF0YXJvb3RkaXIJPSBAZGF0YXJvb3RkaXJACiBkYXRhZGlyCQk9IEBkYXRhZGlyQAogaW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQC9uZXQtc25tcAogdWNkaW5jbHVkZWRpcgk9IEBpbmNsdWRlZGlyQC91Y2Qtc25tcApAQCAtMzUsNiArMzYsOCBAQAogSU5TVEFMTAkJPSAkKExJQlRPT0wpIC0tbW9kZT1pbnN0YWxsIEBJTlNUQUxMQAogVU5JTlNUQUxMCT0gJChMSUJUT09MKSAtLW1vZGU9dW5pbnN0YWxsIHJtIC1mCiBMSUJUT09MQ0xFQU4JPSAkKExJQlRPT0wpIC0tbW9kZT1jbGVhbiBybSAtZgorRkVBVFVSRUNIRUNLCT0gJCh0b3Bfc3JjZGlyKS9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtY2hlY2sKK0ZFQVRVUkVQUk9DRVNTCT0gJCh0b3Bfc3JjZGlyKS9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlCiBJTlNUQUxMX0RBVEEgICAgPSBASU5TVEFMTF9EQVRBQAogU0VECQk9IEBTRURACiBMTl9TCQk9IEBMTl9TQApAQCAtNDMsNiArNDYsNyBAQAogUEVSTCAgICAgICAgICAgID0gQFBFUkxQUk9HQAogUFlUSE9OICAgICAgICAgID0gQFBZVEhPTlBST0dACiBGSU5EICAgICAgICAgICAgPSBARklOREAKK0VHUkVQICAgICAgICAgICA9IEBFR1JFUEAKIAogIwogIyBDb21waWxlciBhcmd1bWVudHMKQEAgLTYxLDcgKzY1LDcgQEAKICMgVGhlIChzbGlnaHRseSBjbGFyaWZpZWQpIHJ1bGVzOgogIwogIyAtIElmIGFueSBpbnRlcmZhY2VzL3N0cnVjdHVyZXMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgY2hhbmdlZCBzaW5jZSB0aGUKLSMgICBsYXN0IHVwZGF0ZSwgaW5jcmVtZW50IGN1cnJlbnQsIGFuZCBzZXQgYWdlIGFuZCByZXZpc2lvbiB0byAwLiBTdG9wLgorIyAgIGxhc3QgdXBkYXRlLCBpbmNyZW1lbnQgY3VycmVudCAoKzUpLCBhbmQgc2V0IGFnZSBhbmQgcmV2aXNpb24gdG8gMC4gU3RvcC4KICMKICMgLSBJZiBhbnkgaW50ZXJmYWNlcyBoYXZlIGJlZW4gYWRkZWQgc2luY2UgdGhlIGxhc3QgcHVibGljIHJlbGVhc2UsIHRoZW4KICMgICBpbmNyZW1lbnQgY3VycmVudCBhbmQgYWdlLCBhbmQgc2V0IHJldmlzaW9uIHRvIDAuIFN0b3AuCkBAIC03NSwxNSArNzksMTUgQEAKICMgcG9saWN5OiB3ZSBpbmNyZW1lbnQgbWFqb3IgcmVsZWFzZXMgb2YgTElCQ1VSUkVOVCBieSA1IHN0YXJ0aW5nIGF0CiAjIDUuMyB3YXMgYXQgMTAsIDUuNCBpcyBhdCAxNSwgLi4uICBUaGlzIGxlYXZlcyBzb21lIHJvb20gZm9yIG5lZWRlZAogIyBjaGFuZ2VzIGZvciBwYXN0IHJlbGVhc2VzIGlmIGFic29sdXRlbHkgbmVjZXNzYXJ5LgotIyAKLUxJQkNVUlJFTlQgID0gMTYKLUxJQkFHRSAgICAgID0gMQorIworTElCQ1VSUkVOVCAgPSAzMAorTElCQUdFICAgICAgPSAwCiBMSUJSRVZJU0lPTiA9IDMKIAogTElCX0xEX0NNRCAgICAgID0gJChMSUJUT09MKSAtLW1vZGU9bGluayAkKExJTktDQykgJChDRkxBR1MpIC1ycGF0aCAkKGxpYmRpcikgLXZlcnNpb24taW5mbyAkKExJQkNVUlJFTlQpOiQoTElCUkVWSVNJT04pOiQoTElCQUdFKSAtbwogTElCX0VYVEVOU0lPTiAgID0gbGEKIExJQl9WRVJTSU9OICAgICA9Ci1MSUJfTERDT05GSUdfQ01EID0gJChMSUJUT09MKSAtLW1vZGU9ZmluaXNoICQobGliZGlyKQorTElCX0xEQ09ORklHX0NNRCA9ICQoTElCVE9PTCkgLS1tb2RlPWZpbmlzaCAkKElOU1RBTExfUFJFRklYKSQobGliZGlyKQogTElOSwkJPSAkKExJQlRPT0wpIC0tbW9kZT1saW5rICQoTElOS0NDKQogIyBSQU5MSUIgCT0gQFJBTkxJQkAKIFJBTkxJQgkJPSA6CkBAIC0xMTMsNSArMTE3LDUgQEAKIFNOTVBMSUJfSU5DTFVERVMgICAgICAgID0gJChAU05NUExJQl9JTkNMVURFU0ApCiBBR0VOVF9JTkNMVURFUyAgICAgICAgICA9ICQoQEFHRU5UX0lOQ0xVREVTQCkKIEhFTFBFUl9JTkNMVURFUyAgICAgICAgID0gJChASEVMUEVSX0lOQ0xVREVTQCkKLU1JQkdST1VQX0lOQ0xVREVTICAgICAgID0gJChATUlCR1JPVVBfSU5DTFVERVNAKQorTUlCR1JPVVBfSU5DTFVERVMgICAgICAgPSAkKEBNSUJHUk9VUF9JTkNMVURFU0ApIEBFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFU0AKIApkaWZmIC0tZ2l0IGEvTkVXUyBiL05FV1MKaW5kZXggMzhiNjJjZi4uOTM5NmFlZSAxMDA2NDQKLS0tIGEvTkVXUworKysgYi9ORVdTCkBAIC0zLDEwNiArMywzMzQgQEAKIHRoYXQgaGF2ZSBiZWVuIGZpeGVkL2FwcGxpZWQsIGFuZCB0aGUgQ2hhbmdlTG9nIGZpbGUgZm9yIGEgY29tcHJlaGVuc2l2ZQogbGlzdGluZyBvZiBhbGwgY2hhbmdlcyBtYWRlIHRvIHRoZSBjb2RlLgogCi0qNS40LjQqCisqNS43LjMqCisgICAgTWFueSBtYW55IGJ1ZyBmaXhlcyBhbmQgbWlub3IgaW1wcm92ZW1lbnRzCiAKLSAgICBzbm1wbGliOgotICAgICAgLSBbQlVHIDMxNzE4NzhdOiBVc2luZyBTTk1QdjMgY29udGV4dCBkb2VzIG5vdCB3b3JrCi0KLSAgICBzbm1wZDoKLSAgICAgIC0gVmFyaW91cyA2NC1iaXQgZml4ZXMKLQotICAgIEZyZWVCU0QsTmV0QlNELE9wZW5CU0Q6Ci0gICAgICAgIEluY29ycG9yYXRlIGZpeGVzIGZyb20gdGhlc2UgTy9TIHBhdGNoIGFyY2hpdmVzCi0KLQotKjUuNC4zKgotCi0gICAgc25tcGQ6Ci0gICAgICAtIENoYW5nZSBkZWZhdWx0IEFnZW50WCB0YXJnZXQgZnJvbSAwLjAuMC4wOjcwNSB0byBsb2NhbGhvc3Q6NzA1Ci0gICAgICAtIEZpeCBDVkUtMjAwOC00MzA5IChHRVRCVUxLIGlzc3VlIHJlcG9ydGVkIGJ5IE9zY2FyIE1pcmEtU2FuY2hleikKLSAgICAgIC0gRml4IGhhbmRsaW5nIG9mIG11bHRpcGxlIG1hdGNoaW5nIFZBQ00gZW50cmllcwotICAgICAgICAoVXNlIHRoZSAiYmVzdCIgbWF0Y2gsIHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUpLgotICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgY291bGQgcG90ZW50aWFsbHkgYWZmZWN0IHRoZSBiZWhhdmlvdXIgb2YKLSAgICAgICAgICAgIGV4aXN0aW5nIGFjY2VzcyBjb250cm9sIGNvbmZpZ3VyYXRpb25zLgotICAgICAgLSBMYXRjaCBsYXJnZS1kaXNrIHN0YXRpc3RpY3MgYXQgMlRiIChyYXRoZXIgdGhhbiB3cmFwcGluZykKLQotICAgIExpbnV4OgotICAgICAgLSBGaXggYnVpbGQgb24gbW9kZXJuIGRpc3RyaWJ1dGlvbnMgKHVzaW5nIHJwbS00LjYpCi0KLSAgICBXaW5kb3dzOgotICAgICAgLSBGaXggdmFyaW91cyBidWlsZHMgKHJlY2VudCBNU1ZDLCBNaW5HVywgSVB2Niwgd2luRXh0RExMKQotCi0KLSo1LjQuMioKLQotICAgIHNubXBsaWI6Ci0gICAgICAtIFtQQVRDSCAxOTIxODYxXTogQXZvaWQgZW5kbGVzcyBsb29wIGFmdGVyIHRydW5jYXRpbmcgNjRiaXQgaW50Ci0gICAgICAtIEJldHRlciBoYW5kbGluZyBvZiBDT05UQUlORVJfSU5TRVJUIGZhaWx1cmVzIHdpdGggbXVsdGlwbGUgaW5kaWNlcwotCi0gICAgc25tcGQ6Ci0gICAgICAtIFtQQVRDSCAyMDIzNjMzXTogYWRkIFNDVFAtTUlCIGltcGxlbWVudGF0aW9uIChMaW51eCBvbmx5KQotICAgICAgLSBzdXBwcmVzcyBhbm5veWluZyAicmVnaXN0cmF0aW9uICE9IGR1cGxpY2F0ZSIgd2FybmluZyBmb3Igcm9vdCBvaWRzCi0KLSAgICBidWlsZDoKLSAgICAgIC0gW0JVRyAyMDIzODAzXTogQ29tcGlsYXRpb24gcHJvYmxlbXMgb24gSFAtVVggMTEuMzEKLSAgICAgIC0gVXBkYXRlIHRvIGxpYnRvb2wgMS41LjI2Ci0KLSAgICBBSVg6Ci0gICAgICAtIEFkZCBzdXBwb3J0IGZvciBBSVggNi54LgotCi0KLSo1LjQuMSoKLQotICAgIHNubXBsaWI6Ci0gICAgICAtIFtCVUcgMTYxOTgyN106IGxpbmsgbGlicmFyaWVzIGFnYWluc3QgbmVlZGVkIGV4dGVybmFsIGxpYnJhcmllcwotICAgICAgLSBbUEFUQ0ggMTYxNjkxMl06IGZpeCBtZW1vcnkgbGVhayBpbiBVRFAgdHJhbnNwb3J0IGNvZGUKLSAgICAgIC0gW1BBVENIIDE1OTI3MDZdOiBmaXggbWVtb3J5IGxlYWsgd2hlbiBjbG9uaW5nIHZhcmJpbmRzCi0gICAgICAtIENoYW5nZSBzbm1wX3Nlc3NfYWRkX2V4IHRvIGNvbnNpc3RlbnRseSBjbG9zZSBhbmQgZGVsZXRlIHRoZQotICAgICAgICB0cmFuc3BvcnQgYXJndW1lbnQgb24gZmFpbHVyZSwgZWFybGllciB0aGUgbGl2ZW5lc3Mgb2YgdGhlCi0gICAgICAgIHRyYW5zcG9ydCBhcmd1bWVudCB3YXMgdW5kZWNpZGVkLgotCi0gICAgc25tcGQ6Ci0gICAgICAtIFtCVUcgMTU1ODgyM106IGZpeCBpcEFkZHJlc3NUYWJsZSBtZW1vcnkgbGVhawotICAgICAgLSBbQlVHIDE1OTY2MzhdOiBmaXggbWVtb3J5IGxlYWsgaW4gaXBDaWRyUm91dGVUYWJsZSwgaW5ldENpZHJSb3V0ZVRhYmxlCi0gICAgICAtIFtCVUcgMTYxMTUyNF06IGZpeCB0Y3AgY29ubmVjdGlvbiB0YWJsZSBmaWxlIGRlc2NyaXB0b3IgbGVhawotICAgICAgLSBoYW5kbGUgcm93IGRlbGV0aW9uIGlzc3VlcyBpbiBkYXRhc2V0IHRhYmxlcwotICAgICAgLSBbQlVHIDE3MTI5ODhdOiBkZWZhdWx0IGFuZCBjb25maWd1cmFibGUgbWF4aW11bSBudW1iZXIgb2YKLSAgICAgICAgdmFyYmluZHMgcmV0dXJuYWJsZSB0byBhIEdFVEJVTEsgcmVxdWVzdC4KLSAgICAgIC0gW1BBVENIIDE2NjY3MzddOiBpbmNsdWRlIGlwdjYgY291bnRzIGluCi0JdWRwSW5EYXRhZ3JhbXMsIHVkcE5vUG9ydHMsIHVkcEluRXJyb3JzLCB1ZHBPdXREYXRhZ3JhbXMKLSAgICAgIC0gW1BBVENIIDE3MDAxNTddOiBmaXhlcyBvcmRlcmluZyBvZiBleGVjIHRva2VucyBpbiB0aGUgcmVzdWx0aW5nIG1pYiB0cmVlCi0gICAgICAtIFtQQVRDSCAxNzE5MjUzXTogZml4IHNraXBORlNJbkhvc3RSZXNvdXJjZXMgc28gaXQgZG9lcyBub3QgYnJlYWsgb24gdGhlCi0Jc2Vjb25kIHdhbGsgb2YgdGhlIHRhYmxlLgorICAgIHNubXBkLCBzbm1wdHJhcGQgYW5kIGFwcHM6CisgICAgICAtIFBhdGNoIDI1MjU6IGZyb20gUnlhbiBTdGVpbm1ldHo6IEZpeCBhcmd1bWVudCBsZW5ndGggcGFyc2luZyBvZiB0aGUKKwlob3N0IHJlc291cmNlcyBtaWIKKyAgICAgIC0gTWFrZSBFTlZfU0VQQVJBVE9SX0NIQVIgY29uZmlndXJhYmxlCisgICAgICAtIFNFQ1VSSVRZOiBhIGRlbmlhbCBvZiBzZXJ2aWNlIGF0dGFjayB2ZWN0b3Igd2FzIGRpc2NvdmVyZWQgb24KKyAgICAgICAgdGhlIGxpbnV4IGltcGxlbWVudGF0aW9uIG9mIHRoZSBJQ01QLU1JQi4gIFRoaXMgcmVsZWFzZSBmaXhlcworICAgICAgICB0aGlzIGJ1ZyBhbmQgYWxsIHVzZXJzIGFyZSBlbmNvdXJhZ2VkIHRvIHVwZGF0ZSB0aGVpciBTTk1QCisgICAgICAgIGFnZW50IGlmIHRoZXkgbWFrZSB1c2Ugb2YgdGhlIElDTVAtTUlCIHRhYmxlIG9iamVjdHMuCiAKICAgICBwZXJsOgotICAgICAgLSBsaW5rIFBlcmwgbW9kdWxlcyBhZ2FpbnN0IHRoZSBleGFjdCBzZXQgb2YgbGlicmFyaWVzIG5lZWRlZAotICAgICAgLSBbQlVHIDE2MTk4MjddOiBwcm9wZXJseSBsaW5rIGFnYWluc3QgbGlicGVybCB3aGVuIGNvbmZpZ3VyZWQgd2l0aAotCS0tZW5hYmxlLWFzLW5lZWRlZAotICAgICAgLSBbUEFUQ0ggMTcyNTA0OV06IGZpeCBidWxrd2FsayBpbiBjYXNlcyBvZiBub24tcmVwZWF0ZXIKKyAgICAgIC0gQlVHOiAyNDAyOiBBZGQgc3VwcG9ydCBmb3IgU05NUHYzIHRyYXBzCiAKLSAgICBidWlsZDoKLSAgICAgIC0gdXBkYXRlIHRvIGxpYnRvb2wgMS41LjI0IChmcm9tIDEuNS4yMikKKyAgICBXaW5kb3dzOgorICAgICAgLSBQb3J0IGJhdGNoIGJ1aWxkIGluZnJhc3RydWN0dXJlIHRvIFZpc3VhbCBTdHVkaW8gMjAxMCBhbmQgbGF0ZXIKKwlGcm9tIFZpc3VhbCBTdHVkaW8gMjAxMCBvbiBpdCBpcyBubyBsb25nZXIgcG9zc2libGUgdG8gc3BlY2lmeQorCWluY2x1ZGUgb3IgbGlicmFyeSBkaXJlY3RvcmllcyBnbG9iYWxseSAtIHRoZXNlIGhhdmUgdG8gYmUKKwlzcGVjaWZpZWQgcGVyIHByb2plY3QuIEhlbmNlIHR3byBhZGRpdGlvbmFsIG1lbnUgZW50cmllcyBpbgorCWJ1aWxkLmJhdCB0aGF0IGFsbG93IHRvIHNwZWNpZnkgdGhlc2UgZGlyZWN0b3JpZXMuCisKKyo1LjcuMioKKyAgICBzbm1wOgorICAgICAgLSBCVUc6IDM1MjY1NDk6IENWRS0yMDEyLTIxNDEgQXJyYXkgaW5kZXggZXJyb3IgbGVhZGluZyB0byBjcmFzaAorCisgICAgc25tcGQ6CisgICAgICAtIEJVRzogMzUzMjA5MDogRml4IGhpZ2ggaWZJbmRleCB2YWx1ZXMgY3Jhc2hpbmcgaHJEZXZpY2VEZXNjcgorCisgICAgYnVpbGRpbmc6CisgICAgICAtIFBBVENIOiAyMDkxMTU2OiBjb3JyZWN0bHkgZGVjbGFyZSBkZXBlbmRlbmNpZXMgaW4gTWFrZWZpbGUuICdtYWtlCisgICAgICAgIC1qIDxOPicgc2hvdWxkIHdvcmsgbm93LiBCYWNrcG9ydCB0aGlzIHRvIFY1LTQgYXMgaXQgaXMgbmVlZGVkIGZvcgorICAgICAgICBjb3JyZWN0IG9wZXJhdGlvbiBpbiB0aGUgc2luZ2xlIHRocmVhZGVkIGNhc2Ugb2YgbWFrZSBtaWJsaWIgYXMKKyAgICAgICAgd2VsbC4KKworICAgIE1hbnkgb3RoZXIgbWlzY2VsbGFuZW91cyBtaW5vciBidWcgZml4ZXMKKworKjUuNy4xKgorCisgIGxpYm5ldHNubXA6CisgICAgICAtIEZpeGVkIHRoZSBtaWItcGFyc2luZy1idWcgaW50cm9kdWNlZCBzaG9ydGx5IGJlZm9yZSA1LjcKKworICBhZ2VudDoKKyAgICAgIC0gZml4ZWQgcm91bmRpbmcgZXJyb3JzIGZvciBkaXNrIHBlcmNlbnRhZ2UgY2FsY3VsYXRpb25zCisKKyAgb3BlbmJzZDoKKyAgICAgIC0gYmV0dGVyIHN1cHBvcnQgZm9yIHJlY2VudCBvcGVuYnNkIHJlbGVhc2VzCisKKyAgZmVhdHVyZXM6CisgICAgICAtIGJ1ZyBmaXhlcyB3aXRoIG1pbmltYWxpc3Qgc3VwcG9ydCBhZnRlciBhZGRpdGlvbmFsIHVzZXIgZmVlZGJhY2sKKworICBNYW55IG90aGVyIG1pc2NlbGxhbmVvdXMgbWlub3IgYnVnIGZpeGVzCisKKyo1LjcqCisKKyAgc25tcGQ6CisgICAgICAtIERlbGl2ZXJ5IG9mIGRhdGEgdmlhIHJlZ3VsYXJpbHkgc2NoZWR1bGVkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIChzZWUgIkRhdGEgRGVsaXZlcnkgdmlhIE5vdGZpY2F0aW9ucyIgaW4gc25tcGQuY29uZikKKyAgICAgIC0gTWFueSB0aW1lLWJhc2VkIGNvbmZpZyBvcHRpb25zIGNhbiB0YWtlIChtKWlucywgKGgpb3VycywgLi4uIGFyZ3VtZW50cworICAgICAgICAoc2VlIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlKQorICAgICAgLSBUaGUgUElORyBhbmQgVFJBQ0VST1VURSBNSUJzIG5vdyBjb21waWxlIGFuZCB3b3JrLWlzaCBvbiBsaW51eAorICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9ESVNNQU4KKyAgICAgIC0gTWliIGhhbmRsZXJzIGNhbiBub3cgaW1wbGVtZW50IGEgZGF0YV9jbG9uZSBmdW5jdGlvbiBmb3IKKyAgICAgICAgY2xvbmluZyB0aGUgbXl2b2lkIHN0cnVjdHVyZSB2YXJpYWJsZSB0byBhdm9pZCBkYW5nbGluZyBwb2ludGVycworICAgICAgLSBGaXhlZCBwZXJzaXN0ZW50IHN0b3JhZ2Ugb2YgVkFDTSBNSUIgY29uZmlndXJhdGlvbgorICAgICAgLSBNdWx0aS1ob21lZCBhZ2VudHMgc2VuZCBVRFAgcmVzcG9uc2VzIGZyb20gdGhlIHByb3BlciBJUCBhZGRyZXNzCisgICAgICAtIFRoZSBoclN0b3JhZ2VUYWJsZSBpbXBsZW1lbnRhdGlvbiBub3cgc3VwcG9ydHMgbGFyZ2UgZmlsZXN5c3RlbXMgYmV0dGVyCisgICAgICAtIG9wdGltaXphdGlvbnMgZm9yIGxhcmdlIHJvdXRlIHRhYmxlcworICAgICAgLSBBZGRlZCBhIGRlbGl2ZXJ5QnlOb3RpZnkgY29uZmlnIHRva2VuIGZvciByZWd1bGFyIGRhdGEgZGVsaXZlcnkKKyAgICAgICAgKHNlZSB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZSBhbmQgdGhlIE5FVC1TTk1QLVBFUklPRElDLU5PVElGWS1NSUIpCisgICAgICAtIFtQQVRDSCAzMTQxNDYyXTogZml4IGFnZW50eCBzdWJhZ2VudCBpc3N1ZXMgd2l0aCBtdWx0aXBsZS1vYmplY3QgcmVxdWVzdHMKKyAgICAgIC0gW1BBVENIIDMwNTcwOTNdOiBsaW51eCB1c2VzIGxpYnBjaSBmb3IgY3JlYXRpbmcgdXNlZnVsIGlmRGVzY3Igc3RyaW5ncworICAgICAgLSBbUEFUQ0ggMzEzMTM5N106IGh1Z2Ugc3BlZWR1cHMgb2YgdGhlIFRDUC9VRFAgVGFibGVzCisKKyAgbGlibmV0c25tcDoKKyAgICAgIC0gUmVtb3ZlZCB0aGUgb2xkZXIgQ01VIGNvbXBhdGliaWxpdHkgc3VwcG9ydAorICAgICAgLSBUaGUgU1NIIHRyYW5zcG9ydCBpcyBub3cgY29uZmlndXJhYmxlCisKKyAgVExTL0RUTFMgc3VwcG9ydDoKKyAgICAgIC0gVGhlIFNOTVAgb3ZlciBEVExTIHRyYW5zcG9ydCBub3cgcHJvcGVybHkgc3VwcG9ydHMgSVB2NgorICAgICAgLSBJbnRyb2R1Y2VkIG5ldyBjb25maWd1cmF0aW9uIHRva2VuczogbG9jYWxDZXJ0L3BlZXJDZXJ0CisgICAgICAgIChkZXByZWNhdGluZyBzZXJ2ZXJDZXJ0LCBjbGllbnRDZXJ0LCBkZWZYNTA5U2VydmVyUHViLCBkZWZYNTA5Q2xpZW50UHViKQorICAgICAgLSBWYXJpb3VzIGZpeGVzIGZvciB0aGUgVExTL0RUTFMgdHJhbnNwb3J0cworCisgIGFwcHM6CisgICAgICAtIEFkZGVkIGEgcGVyLXZhcmlhYmxlIHRpbWVkIG91dHB1dCBzdXBwb3J0IHRvIHNubXB3YWxrIHVzaW5nIC1DVAorICAgICAgLSBzbm1waW5mb3JtIG5vdyBjb3JyZWN0bHkgdXNlcyB0aGUgbG9jYWwgZW5naW5lSUQgZm9yIGluZm9ybXMKKyAgICAgIC0gQSBudW1iZXIgb2YgbWliMmMgYnVnIGZpeGVzCisgICAgICAtIE5ldyBzbm1wLmNvbmYgdG9rZW5zIGZvciB0aW1lb3V0cyBhbmQgcmV0cmllcworCisgIGJ1aWxkaW5nOgorICAgICAgLSBOZXcgZmxhZ3MgdG8gcmVkdWNlIHRoZSBhbW91bnQgb2YgY29tcGlsZWQgY29kZSB0byBiYXJlIG1pbmltdW1zLgorICAgICAgICBUaGlzIGlzIHByb3ZpZGVkIGJ5IGEgbmV3IGdlbmVyaWMgZmVhdHVyZSBtYXJraW5nL3NlbGVjdGlvbiBtZWNoYW5pc20uCisgICAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3dpa2kvaW5kZXgucGhwL0ZlYXR1cmVfTWFya2luZ19hbmRfU2VsZWN0aW9uCisgICAgICAtIEl0J3Mgbm93IHBvc3NpYmxlIHRvIGJ1aWxkIHdpdGhvdXQgU05NUHYzL1VTTQorICAgICAgICAoZS5nLiwgaWYgeW91IG9ubHkgd2FudCBUTFMvRFRMUyB3aXRoIFNOTVB2My9UU00pCisgICAgICAtIEl0J3MgcG9zc2libGUgdG8gYnVpbGQgdGhlIHN1aXRlIHdpdGggbm8gU0VUIHN1cHBvcnQKKyAgICAgICAgY29uZmlndXJlIHVzaW5nIC0tZW5hYmxlLXJlYWQtb25seQorICAgICAgLSBJdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIHRoZSBhZ2VudCBhcyBhIG5vdGlmeS1vbmx5IGFnZW50CisgICAgICAgIGNvbmZpZ3VyZSB1c2luZyAtLWVuYWJsZS1ub3RpZnktb25seQorICAgICAgLSBBZGRlZCBhIHNjcmlwdCB0byB0ZXN0IG1lbW9yeSB1c2FnZSB3aXRoIHZhcmlvdXMgY29uZmlnIG9wdGlvbnMKKyAgICAgICAgKHNlZSB0aGUgbG9jYWwvbWluaW1hbGlzdC9zaXpldGVzdHMgc2NyaXB0KQorICAgICAgLSBOZXQtU05NUCBjYW4gbm93IGJlIGJ1aWx0IHRvIHBlcmZvcm0gbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24KKyAgICAgICAgKGluc3RhbGwgRE5TU0VDLVRvb2xzJyBsaWJ2YWwgYW5kIHVzZSAtLXdpdGgtbG9jYWwtZG5zc2VjLXZhbGlkYXRpb24pCisKKyAgdGVzdGluZzoKKyAgICAgIC0gYSBudW1iZXIgb2YgbmV3IEFQSSB1bml0LXRlc3RzIGhhdmUgYmVlbiBhZGRlZCB0byB0aGUgc3VpdGUKKyAgICAgICAgKHRvIHJ1biB0aGUgdGVzdHM6IGNkIHRlc3RpbmcgJiYgLi9SVU5GVUxMVEVTVFMgLWcgdW5pdC10ZXN0cykKKyAgICAgIC0gVGhlIHVuaXQgdGVzdHMgY2FuIGJlIG1vcmUgZWFzaWx5IHJ1biB1bmRlciB2YWxncmluZAorICAgICAgICAoU2VlIGh0dHA6Ly9iaXQubHkvanNnUm52IGZvciBkZXRhaWxzKQorCisgIG9wZW5ic2Q6CisgICAgICAtIFN1cHBvcnQgZm9yIHVwZGF0aW5nIHRoZSByb3V0aW5nIHRhYmxlIHZpYSBTTk1QCisKKyAgd2luMzI6CisgICAgICAtIFRoZSB0ZXN0aW5nIHN1aXRlIHdvcmtzIGJldHRlciB1bmRlciB3aW4zMiBlbnZpcm9ubWVudHMKKyAgICAgIC0gTWFueSBidWlsZGluZyBmaXhlcyBmb3IgdGhlIHdpbjMyIGVudmlyb25tZW50KHMpCisKKyAgc29sYXJpczoKKyAgICAgIC0gTmV0LVNOTVAgbm93IHN1cHBvcnRzIHRoZSBTQ1RQLU1JQgorCisgIERyYWdvbkZseUJTRCwgRnJlZUJTRDg6CisgICAgICAtIE5ldC1TTk1QIHNob3VsZCBub3cgd29yayBvbiBEcmFnb25GbHlCU0QgYW5kIEZyZWVCU0Q4CisKKyAgQW5kIG9mIGNvdXJzZToKKyAgICAgIC0gTWFueSBvdGhlciBidWcgZml4ZXMuICBTZWUgdGhlIENIQU5HRVMgYW5kIENoYW5nZUxvZyBmb3IgZGV0YWlscy4KKworKjUuNioKKworICAgIGFsbDoKKyAgICAgIC0gSW1wbGVtZW50ZWQgdGhlIFNOTVAgb3ZlciBUTFMgYW5kIFNOTVAgb3ZlciBEVExTIHByb3RvY29scyBbUkZDLXRvLWJlXQorICAgICAgICBTZWUgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOlVzaW5nX1RMUworICAgICAgLSBJbXBsZW1lbnRlZCB0aGUgIlRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCIgW1JGQzU1OTFdCisgICAgICAtIEdlbmVyaWMgaG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIC5jb25mIGZpbGVzIGFyZSBub3cgcmVhZC4KKwlTZWUgdGhlIEhPU1QtU1BFQ0lGSUMgRklMRVMgc2VjdGlvbiBvZiB0aGUgc25tcC5jb25mIG1hbnVhbCBwYWdlCisgICAgICAgIGFuZCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9Db25maWd1cmF0aW9uCisgICAgICAtIEluY2x1ZGUgc3RhdGVtZW50cyBjYW4gbm93IGJlIHVzZWQgaW4gLmNvbmYgZmlsZXMuCisgICAgICAgIFNlZSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9Db25maWd1cmF0aW9uCisKKyAgICBzbm1wZDoKKyAgICAgIC0gRml4IGhhbmRsaW5nIG9mIG11bHRpcGxlIG1hdGNoaW5nIFZBQ00gZW50cmllcy4gKFVzZSB0aGUgImJlc3QiCisJbWF0Y2gsIHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUpLiBSZXBvcnRlZCBieSBBZGFtIExld2lzLiBOb3RlCisJdGhhdCB0aGlzIGNvdWxkIHBvdGVudGlhbGx5IGFmZmVjdCB0aGUgYmVoYXZpb3VyIG9mIGV4aXN0aW5nIGFjY2VzcworCWNvbnRyb2wgY29uZmlndXJhdGlvbnMuCisgICAgICAtIEFnZW50IHdpbGwgbm8gbG9uZ2VyIGNhbGwgdGFibGUgaGFuZGxlcnMgaWYgYSBzZXQgcmVxdWVzdCBmb3IgdGhlCisJaGFuZGxlciBoYXMgaW52YWxpZCBpbmRleGVzCisgICAgICAtIHRhYmxlX2RhdGEvdGRhdGEgbmV4dCBoYW5kbGVyIHdpbGwgbm90IGJlIGNhbGxlZCBkdXJpbmcgZ2V0CisJcHJvY2Vzc2luZyBpZiBubyB2YWxpZCByb3dzIGFyZSBmb3VuZCBmb3IgdGhlIGhhbmRsZXIKKyAgICAgIC0gW1BBVENIIDI5NTI3MDhdOiBBZGRlZCBQZXJsIGltcGxlbWVudGF0aW9uIG9mIEJSSURHRS1NSUIKKyAgICAgIC0gbW92ZWQgYWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGxpYm5ldHNubXBoZWxwZXJzIHRvCisJbGlibmV0c25tcGFnZW50LiBsaWJuZXRzbm1waGVscGVycyBpcyBub3cgYW4gZW1wdHkgbGlicmFyeS4KKyAgICAgIC0gSW1wbGVtZW50ZWQgdGhlIFRTTS1NSUIgYW5kIHRoZSBUTFNUTS1NSUIKKyAgICAgIC0gbmV3IEFQSSBmb3IgaW5kaWNhdGluZyB0aGF0IHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMgdG8gYmUgc2F2ZWQKKwlhZnRlciB0aGUgY3VycmVudCByZXF1ZXN0IGZpbmlzaGVzIHByb2Nlc3NpbmcKKyAgICAgIC0gW1BBVENIIDI5MzE0NDZdOiBtYWtlIHRoZSBsb2FkIGF2ZXJhZ2VzIHdyaXRhYmxlLgorCisgICAgYXBwczoKKyAgICAgIC0gQSBuZXcgdG9vbCAnbmV0LXNubXAtY2VydCcgdGhhdCBlYXNpbHkgY3JlYXRlcyBhbmQgbWFuYWdlcworICAgICAgICBYLjUwOSBjZXJ0aWZpY2F0ZXMgZm9yIHVzZSB3aXRoIHRoZSBTTk1QIG92ZXIgKEQpVExTIHByb3RvY29scy4KKyAgICAgIC0gQWRkZWQgYW4gJ2FnZW50eHRyYXAnIGNvbW1hbmQgdG8gc2VuZCBub3RpZmljYXRpb25zIHZpYSBBZ2VudFgKKyAgICAgICAgKFNlZSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy93aWtpL2luZGV4LnBocC9UVVQ6YWdlbnR4dHJhcCBmb3IgZGV0YWlscykKKyAgICAgIC0gLVQgY29tbWFuZCBsaW5lIGZsYWcgY2FuIGJlIHVzZWQgdG8gcGFzcyBjb25maWd1cmF0aW9uCisgICAgICAgIGRpcmVjdGx5IHRvIHRyYW5zcG9ydHMgdGhhdCBjYW4gYWNjZXB0IGNvbmZpZ3VyYXRpb24gdG9rZW5zCisgICAgICAtIEEgbmV3ICdzbm1wdGxzJyBjb21tYW5kIGZvciBtYW5pcHVsYXRpbmcgdGhlIGFnZW50J3MgVExTIGNvbmZpZ3VyYXRpb24KKworICAgIHNubXBsaWI6CisgICAgICAtIEEgbW9yZSBtb2R1bGFyIHRyYW5zcG9ydCBzdWJzeXN0ZW0gdGhhdCBhbGxvd3MgdGhpcmQgcGFydHkKKyAgICAgICAgZXh0ZW5zaW9ucyBhbmQgZGVwZW5kZW5jaWVzIGZvciBjb2RlIHJldXNlLgorICAgICAgLSBOZXcgdHJhbnNwb3J0IGZ1bmN0aW9uczogZl9jb25maWcsIGZfb3BlbiwgZl9jb3B5IGFuZCBmX3NldHVwX3Nlc3Npb24KKyAgICAgIC0gVHJhbnNwb3J0cyBjYW4gbm93IHNwZWNpZnkgc2Vzc2lvbiBkZWZhdWx0cworICAgICAgICAtIEUuRy4gZHRsc3VkcDogYXV0by1zZXRzIHRoZSBTTk1QIHZlcnNpb24gYW5kIHRoZSBzZWN1cml0eSBtb2RlbC4KKyAgICAgIC0gW1BBVENIIDI5NDI5NDBdOiBBZGQgYSBuZXcgZnVuY3Rpb24sIG5ldHNubXBfcGFyc2VfYXJncywgdGhhdCBpcworCWxpa2Ugc25tcF9wYXJzZV9hcmdzIGJ1dCB0YWtlcyBhbiBhZGRpdGlvbmFsIGJpdG1hc2ssIGZsYWdzLCB0bworCWFmZmVjdCB0aGUgYmVoYXZpb3VyLiBBbHNvIHJlbW92ZSB0aGUgbWFnaWMgaGFuZGxpbmcgb2Ygc29tZQorCWFwcGxpY2F0aW9uIG5hbWVzLgorICAgICAgLSBBIG5ldyBYLjUwOSBjZXJ0aWZpY2F0ZSBBUEkgZm9yIGluZGV4aW5nIGFuZCByZWFkaW5nIGNlcnRpZmljYXRlcworICAgICAgLSBuZXcgZXhwZXJpbWVudGFsIHJvdyBjcmVhdGlvbiBBUEkgd2hpY2ggdXNlcyBhIHN0YXRlIG1hY2hpbmUKKyAgICAgICAgdG8gdHJ5IHJlYWxseSBoYXJkIHRvIGNyZWF0ZSBhIHJvdyBmcm9tIGEgZ2l2ZW4gdmFyYmluZCBsaXN0CisgICAgICAtIG5ldHNubXBfY29udGFpbmVyIGVuaGFuY2VtZW50czoKKyAgICAgICAgLSBhZGRlZCBhIGZyZWVfaXRlbSBmdW5jdGlvbgorICAgICAgICAtIGFkZGVkIGEgQ09OVEFJTkVSX0ZSRUVfQUxMIG1hY3JvL2Z1bmN0aW9uCisgICAgICAgIC0gYWRkZWQgYW4gaW50ZXJmYWNlIGZvciBkdXBsaWNhdGluZyBhIGNvbnRhaW5lciAoQ09OVEFJTkVSX0RVUCkKKyAgICAgICAgLSBhZGRlZCBhIHJlbW92ZSBmdW5jdGlvbiB0byBjb250YWluZXJfaXRlcmF0b3JzCisJLSBhZGRlZCBhbiBhYmlsaXR5IHRvIHNldCBvcHRpb25zIG9uIGJpbmFyeV9hcnJheSBjb250YWluZXJzCisgICAgICAtIG5ldyBzbm1wIHRva2VuIGxvZ09wdGlvbiBhbGxvd3Mgc3BlY2lmeWluZyBsb2cgZGVzdGluYXRpb25zCisgICAgICAgIHZpYSBjb25maWd1cmF0aW9uIGNvbmYgZmlsZXMKKyAgICAgIC0gQSB2ZXJ5IHNpZ25pZmljYW50IHJlZHVjdGlvbiBpbiBjb21waWxlciB3YXJuaW5nIG91dHB1dAorICAgICAgLSBuZXcgZXhwZXJpbWVudGFsIHNpbXBsZSBzdGF0ZSBtYWNoaW5lIGhhbmRsaW5nIEFQSQorCisgICAgYnVpbGRpbmc6CisgICAgICAtIFN1cHBvcnQgZm9yIGEgc3RyZWFtLWxpbmUgc3RyaXBwZWQgZG93biB2ZXJzaW9uIG9mIGludGVybmFsCisgICAgICAgIE9wZW5TU0wgc3VwcG9ydCB1c2luZyAtLXdpdGgtb3BlbnNzbD1pbnRlcm5hbC4KKyAgICAgIC0gRG8gbm90IHJlcXVpcmUgdGhhdCB0aGUgVURQIHRyYW5zcG9ydCBpcyBpbmNsdWRlZC4KKyAgICAgIC0gQnVpbGRpbmcgTmV0LVNOTVAgd2l0aCBkbWFsbG9jIHN1cHBvcnQgZW5hYmxlZCBpcyBhZ2FpbiBwb3NzaWJsZS4KKworICAgIG1pYjJjOgorICAgICAgLSBtaWIyYyBjYW4gbm93IG9wdGlvbmFsbHkgcnVuIHNlZCBvbiBnZW5lcmF0ZWQgY29kZQorCisgICAgdGVzdGluZzoKKyAgICAgIC0gQSBicmFuZCBuZXcgdGVzdCBpbmZyYXN0cnVjdHVyZSBzdXBwb3J0aW5nIG11bHRpcGxlIHRlc3Qgc3VpdGVzCisgICAgICAgIFNlZSBwZXJsZG9jIHRlc3RpbmcvUlVORlVMTFRFU1RTIGZvciBkZXRhaWxzCiAKICAgICBweXRob246Ci0gICAgICAtIFtQQVRDSCAxNzE2MTE0XTogTGV0IHB5dGhvbiBidWlsZCBpbiB0aGUgTmV0LVNOTVAgc291cmNlIHRyZWUKKyAgICAgIC0gd2Fsa2luZyBicm9rZW4gYWdlbnRzIHdvbid0IGNhdXNlIGFuIGluZmluaXRlIGxvb3AKIAotICAgIE1hY09TWDoKLSAgICAgIC0gW1BBVENIIDE2MDA1MjJdOiBDUFUgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIgKEhBTCkKLSAgICAgICAgaW1wbGVtZW50YXRpb24gZm9yIG1hY2gvZGFyd2luCi0gICAgICAtIElGLU1JQiByZXdyaXRlIG5vdyBlbmFibGVkIGJ5IGRlZmF1bHQKKyAgICB3aW4zMjoKKyAgICAgIC0gSVB2NiBpcyBvbmx5IHN1cHBvcnRlZCB1bmRlciBDeWd3aW4gMS43IG9yIGxhdGVyLgorICAgICAgLSBbQlVHIDI5MzkxNjhdOiBieXRlIG9yZGVyIG9mIHVkcExvY2FsUG9ydCBpcyBub3cgY29ycmVjdC4KKyAgICAgIC0gW0JVRyAyOTM5MTY4XTogZml4ZWQgdGVzdCBpbmZyYXN0cnVjdHVyZSAoIm1ha2UgdGVzdCIpLiBUaGlzIGhhcworCWJlZW4gZml4ZWQgYnkgdXNpbmcgdGhlIHByb3BlciBlbnZpcm9ubWVudCBzZXBhcmF0b3IgY2hhcmFjdGVyIGFuZAorCWJ5IGFkZGluZyB0aGUgcGF0aCBvZiB0aGUgbmV0c3RhdCBleGVjdXRhYmxlIGZvciBDeWd3aW4gaW4KKwl0ZXN0aW5nL1RFU1RDT05GLnNoLgorICAgICAgLSBidWlsZGluZyB3aXRoIGFub3RoZXIgT3BlblNTTCBwYWNrYWdlIHRoYW4gdGhlIEN5Z3dpbi1wcm92aWRlZAorCXBhY2thZ2VzIG9wZW5zc2wgYW5kIG9wZW5zc2wtZGV2ZWwgaXMgYWdhaW4gcG9zc2libGUuCisgICAgICAtIHJ1bm5pbmcgdGhlIHJlZ3Jlc3Npb24gdGVzdCBzdWl0ZSBpcyBhZ2FpbiBwb3NzaWJsZSAoJ21ha2UgdGVzdCcpLgorICAgICAgLSB3aW5FeHRETEwgY29tcGlsZXMgbm93IHVuZGVyIE1pbkdXLgorICAgICAgLSB0aGUgc25tcGQuY29uZiBrZXl3b3JkICdleHRlbmQnIGlzIG5vdyBzdXBwb3J0ZWQgdW5kZXIgTWluR1cKKyAgICAgIC0gdGhlIHNubXB0cmFwZC5jb25mIGtleXdvcmQgdHJhcGhhbmRsZSBpcyBub3cgc3VwcG9ydGVkIHVuZGVyIE1pbkdXCiAKLSAgICBXaW4zMjoKLSAgICAgIC0gZml4IEFFUyBzdXBwb3J0Ci0gICAgICAtIFtQQVRDSCAxNzA2MzQ0XTogZml4IGNvbXBpbGF0aW9uIHdpdGggY3lnd2luCisgICAgcW54NjoKKyAgICAgIC0gW1BBVENIIDI4MzY4OTVdOiBzdXBwb3J0IGZvciBRTlg2CiAKLSAgICBJUklYOgotICAgICAgLSBbUEFUQ0ggMTcwOTc0OF06IE9wdGltaXplZCBJUklYIGNwdSBzdGF0cworKjUuNSoKKworICAgIEFsbCBhcHBsaWNhdGlvbnM6CisgICAgICAtIEFkZGVkIHRoZSBhYmlsaXR5IHRvICJhbGlhcyIgdHJhbnNwb3J0cyB0byBhIG1vcmUgc2ltcGxlIG5hbWUKKyAgICAgICAgIChzZWUgdGhlICJhbGlhcyIga2V5d29yZCBpbiB0aGUgc25tcC5jb25mIG1hbnVhbCBwYWdlKQorICAgICAgLSBUaGUgLXQgKHRpbWVvdXQpIHN3aXRjaCB3aWxsIGFjY2VwdCBmbG9hdGluZyBwb2ludCBudW1iZXJzIChlZzogLjEpCisKKyAgICBzbm1wZDoKKyAgICAgIC0gW0JVRyAxNzEyOTg4XTogZGVmYXVsdC9jb25maWd1cmFibGUgbWF4ICMgdmFyYmluZHMgcmV0dXJuZWQgYnkgR0VUQlVMSworICAgICAgLSBbUEFUQ0ggMTU4NTE0Nl06IEV4dGVuZCByYW5nZSBvZiBhdmFpbGFibGUgZXJyb3IgY29kZXMKKyAgICAgIC0gW1BBVENIIDE2NTQ0MjRdOiBIYW5kbGUgcm93IGRlbGV0aW9uIGlzc3VlcyBpbiBkYXRhc2V0IHRhYmxlcworICAgICAgLSBbUEFUQ0ggMTY2NjczN106IEluY2x1ZGUgSVB2NiB0cmFmZmljIGluIHZhcmlvdXMgVURQIGNvdW50ZXJzCisgICAgICAtIFtQQVRDSCAxNzAwMTU3XTogRml4IG9yZGVyaW5nIG9mIGV4ZWMgdG9rZW5zIGluIE1JQiBvdXRwdXQKKyAgICAgIC0gW1BBVENIIDE3MTkyNTNdOiBmaXggc2tpcE5GU0luSG9zdFJlc291cmNlcyBmb3IgbXVsdGlwbGUgd2Fsa3MKKyAgICAgIC0gW1BBVENIIDE3MjM2MTFdOiBOZXcgaW1wbGVtZW50YXRpb24gb2YgdGhlIFJNT04gYWxhcm1UYWJsZQorICAgICAgLSBbUEFUQ0ggMTczNzQzOV06IGF1dG9tYXRpYyBsaW5rIHVwL2Rvd24gdHJhcHMgb24gYSB3YWxrCisgICAgICAtIFtQQVRDSCAxODA2NTAxXTogQWRkIEFQSSBmb3Igc2VuZGluZyB0cmFwcyB3aXRoIGEgc25tcHYzIGNvbnRleHQKKyAgICAgIC0gW1BBVENIIDE4ODI2MjFdOiBBZGQgTFZNIHN1cHBvcnQgdG8gdGhlIHBhcnRpdGlvbiB0YWJsZQorICAgICAgLSBbUEFUQ0ggMTg5MzQ2OF06IGZpeGVkIHJlZ2lzdHJhdGlvbiBvZiBPSURzIHdpdGggcmFuZ2VzCisgICAgICAtIFtQQVRDSCAxOTAxNzY0XTogU3VwcG9ydCBkYXRlLWJhc2VkIGxvZ3dhdGNoIGZpbGVzCisgICAgICAtIFtQQVRDSCAxOTA5ODEzXTogZml4IHRhYmxlX2l0ZXJhdG9yIGhhbmRsaW5nIG9mIFNPUlRFRCBoaW50CisgICAgICAtIFtQQVRDSCAxOTE2ODQwXTogbmV3IGNvbmZpZyBvcHRpb24gdG8gc2V0IFNOTVB2MSB0cmFwIGFnZW50IGFkZHJlc3MKKyAgICAgIC0gW1BBVENIIDIxMDM0OTJdOiBpbXBsZW1lbnQgUk1PTi1NSUI6OmV0aGVyU3RhdHNKYWJiZXJzCisgICAgICAtIFtQQVRDSCAyNDQ5MjEwXTogYWRkIDY0LWJpdCB1c2FnZSBzdGF0aXN0aWNzIHRvIFVDRC1TTk1QLU1JQjo6ZHNrVGFibGUKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIGEgdXNlciBwcm92aWRlZCBsZW5ndGggdmFyaWFibGUKKwkgICBhbmQgQyBzdHJpbmcgdmFsdWVzIHRvIHRoZSB3YXRjaGVyIGhlbHBlci4KKyAgICAgIC0gQXV0b21hdGljYWxseSByZXJlZ2lzdGVyIHN5c09SVGFibGUgZW50cmllcyBmcm9tIEFnZW50WCBzdWJhZ2VudHMuCisgICAgICAtIEZpeCB2YXJpb3VzIG1lbW9yeSBsZWFrcworICAgICAgLSBJbXBsZW1lbnQgaXBBZGRyZXNzU3BpbkxvY2sKKyAgICAgIC0gSW1wbGVtZW50IGlwTmV0VG9QaHlzaWNhbExhc3RVcGRhdGVkCisgICAgICAtIFN1cHByZXNzIGFubm95aW5nICJyZWdpc3RyYXRpb24gIT0gZHVwbGljYXRlIiB3YXJuaW5nIGZvciByb290IG9pZHMKKworICAgIHNubXB0cmFwZDoKKyAgICAgIC0gW1BBVENIIDE5MDgyODhdOiBSdW4gcGVybCBFTkQgYmxvY2sgb24gdGVybWluYXRpb24KKyAgICAgIC0gQWRkIHRyYXAgaGFuZGxlciBmb3IgbG9nZ2luZyB0cmFwcyB0byBhIG15c3FsIGRhdGFiYXNlCisgICAgICAtIFdpdGhkcmF3IGRlcHJlY2F0ZWQgb3B0aW9ucy4KKworICAgIHNubXBuZXRzdGF0OgorICAgICAgLSBbUEFUQ0ggMjU2NDUzOF06IFN1cHBvcnQgR0VUQlVMSyBpbiB2MmMrIHNubXAgdmVyc2lvbnMKKworICAgIHNubXB1c206CisgICAgICAtIFtQQVRDSCAxNTkxMzU1XTogQWxsb3cgY2xvbmluZyB0byBhcmJpdHJhcnkgZW5naW5lSURzCisKKyAgICBzbm1wbGliOgorICAgICAgLSBbQlVHIDE2MTk4MjddOiBJbXByb3ZlIGhhbmRsaW5nIG9mIGxpbmsgZGVwZW5kZW5jaWVzCisgICAgICAtIFtQQVRDSCAgNzAwNjgxXTogbGltaXRlZCBzdXBwb3J0IGZvciBVRFB2NCBicm9hZGNhc3QgYWRkcmVzc2VzCisgICAgICAtIFtQQVRDSCAxODgyMDY5XTogQWRkIHRva2VuIGZvciBzcGVjaWZ5aW5nIGFuIGV4YWN0IFNOTVB2MyBlbmdpbmVJRAorICAgICAgLSBGaXggYXNzb3J0ZWQgbWVtb3J5IGxlYWtzCisgICAgICAtIEltcGxlbWVudGVkIFJGQzUzNDMgY29udGV4dEVuZ2luZUlEIHByb2JpbmcuCisgICAgICAtIFN1cHBvcnQgZm9yIHRoZSBUU00gc2VjdXJpdHkgbW9kZWwgZm9yIHVzZSB3aXRoIHR1bm5lbGluZworCisgICAgbWlzYzoKKyAgICAgIC0gQWRkIGNvbmZpZyByZXJlYWQgc3VwcG9ydCB0byAibmV0LXNubXAtY29uZmlnIC0tY29tcGlsZS1zdWJhZ2VudCIgY29kZQorICAgICAgLSBQcmVsaW1pbmFyeSAoYWxwaGEpIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBTU0ggYW5kIERUTFMvVURQLgorICAgICAgLSBQcmVsaW1pbmFyeSAoYWxwaGEpIHN1cHBvcnQgZm9yIHRoZSBUU00gc2VjdXJpdHkgbW9kZWwKKyAgICAgIC0gU2VwYXJhdGUgdXNlciBtYW5hZ2VtZW50IGludG8gbmV3IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIHNjcmlwdAorCisgICAgYnVpbGRpbmc6CisgICAgICAtIEltcHJvdmVkIGNyb3NzLWNvbXBpbGF0aW9uIHN1cHBvcnQKKyAgICAgIC0gSW1wcm92ZWQgbGlicmFyeSBsYXllcmluZyAmIGRlcGVuZGVuY3kgaGFuZGxpbmcgd2hlbiBsaW5raW5nIGFwcHMKKyAgICAgIC0gSW1wcm92ZWQgUlBNIHNwZWMgZmlsZXMsIGZvciBjb25zaXN0ZW5jeSB3aXRoIHZlbmRvci1wcm92aWRlZCBwYWNrYWdlcy4KKyAgICAgIC0gTWVjaGFuaXNtIGZvciBzZWxlY3RpbmcgYnVpbGQgZW52aXJvbm1lbnQgYmFzZWQgb24gdmVyc2lvbgorICAgICAgLSBOZXcgdGVzdCBzY3JpcHRzIHRvIHRlc3QgTmV0LVNOTVAgdHJhbnNwb3J0IGZ1bmN0aW9uYWxpdHkKKyAgICAgIC0gUmVzdHJ1Y3R1cmUgY29uZmlndXJlIHRlbXBsYXRlCisgICAgICAtIFVwZGF0ZSB0byBhdXRvY29uZiAyLjYzICYgbGlidG9vbCAyLjIuNgorCisgICAgcGVybDoKKyAgICAgIC0gW0JVRyAxNjE5ODI3XTogaW1wcm92ZSBoYW5kbGluZyBvZiBsaW5rIGRlcGVuZGVuY2llcworICAgICAgLSBbUEFUQ0ggMTk1NjE5M106IGJldGEgdGhyZWFkYWJsZSBwZXJsIG1vZHVsZSBjb2RlIGZvciBTTk1QdjEvMmMgdXNhZ2UuCisKKyAgICBweXRob246CisgICAgICAtIFtQQVRDSCAxNzE2MTE0XTogTGV0IHB5dGhvbiBidWlsZCBpbiBzb3VyY2UgdHJlZSAoRGViaWFuIHBhdGNoICMzOCkKKworICAgIExpbnV4OgorICAgICAgLSBbUEFUQ0ggMTcwNDEwNV06IEFkZCBJUHY2IHN1cHBvcnQgdG8gdGhlIGluZXROZXRUb01lZGlhVGFibGUKKyAgICAgIC0gW1BBVENIIDE3MDU1OTRdOiBWYXJpb3VzIGZpeGVzIHRvIGlwQWRkcmVzc1ByZWZpeFRhYmxlIHJlcG9ydGluZworICAgICAgLSBbUEFUQ0ggMTcwODI0M106IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZVRhYmxlCisgICAgICAtIFtQQVRDSCAxNzE1NDA1XTogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgICAgICAtIFtQQVRDSCAxNzI0NjAyXTogTWZELWJhc2VkIGlwRGVmYXVsdFJvdXRlclRhYmxlIGltcGxlbWVudGF0aW9uCisgICAgICAtIFtQQVRDSCAxODI4NjAyXTogU3VwcG9ydCBpcERlZmF1bHRUVEwgYW5kIGlwRm9yd2FyZGluZyBTRVRzCisgICAgICAtIFtQQVRDSCAxOTI3NzUxXTogSW1wbGVtZW50IGljbXBNc2dTdGF0c1RhYmxlCisgICAgICAtIFtQQVRDSCAyMDIzNjMzXTogSW1wbGVtZW50IFNDVFAtTUlCCisgICAgICAtIFtQQVRDSCAyMDUzMjczXTogSW1wbGVtZW50IEV0aGVyTGlrZSBNSUIKIAogICAgIEFJWDoKLSAgICAgIC0gRml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nIHN0YXRpYyB1c2UKKyAgICAgIC0gQWRkIHN1cHBvcnQgZm9yIEFJWCA2LngKKyAgICAgIC0gRml4IGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgYnVpbGRpbmcgaW5zdGVhZCBvZiBmb3JjaW5nIHN0YXRpYwogCiAgICAgRnJlZUJTRDoKICAgICAgIC0gW0JVRyAxNjMzNDgzXTogU3VwcG9ydCBDUFUgSEFMIG9uIEZyZWVCU0Q0LngKKyAgICAgIC0gW1BBVENIIDE2MjM4NzRdOiBhZGQgR05VL2tGcmVlQlNEIHN1cHBvcnQKKworICAgIElSSVg6CisgICAgICAtIFtQQVRDSCAxNzA5NzQ4XTogT3B0aW1pemVkIElSSVggY3B1IHN0YXRzCisgICAgICAtIFtQQVRDSCAxNjc1ODY5XTogQ1BVIHN0YXRpc3RpY3MgZm9yIElSSVggYmFzZWQgb24gUENQCisKKyAgICBNYWNPU1g6CisgICAgICAtIFtQQVRDSCAxNjAwNTIyXTogQ1BVIEhBTCBpbXBsZW1lbnRhdGlvbiBmb3IgbWFjaC9kYXJ3aW4KKworICAgIFNvbGFyaXM6CisgICAgICAtIFtQQVRDSCAxNzE5NzMwXTogc3VwcG9ydCBmb3IgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcEFkZHJlc3NUYWJsZQorCisgICAgV2luMzI6CisgICAgICAtIFtQQVRDSCAyNjg2MjQ4XTogRml4IHNldmVyYWwgd2luRXh0RExMIGJ1Z3MuCisgICAgICAtIFtQQVRDSCAxNzA2MzQ0XTogRml4IGNvbXBpbGF0aW9uIHdpdGggY3lnd2luCisgICAgICAtIEZpeCBBRVMgc3VwcG9ydAogCiAKICo1LjQqCkBAIC00MjksNyArNjU3LDcgQEAKICAgICAgICAtIEVuYWJsZSB0aGVzZSB0YWxibGVzIGJ5IHNwZWNpZnlpbmcgLS1lbmFibGUtbWZkLXJld3JpdGVzIHRvIGNvbmZpZ3VyZS4KICAgICAgICAtIE1vc3Qgb2YgdGhlc2UgdGFibGVzIGhhdmUgSVB2NiBzdXBwb3J0IGFzIHdlbGwuCiAgICAgIC0gaWZJbmRleCBubyBsb25nZXIgY2hhbmdlcyB3aGVuIGludGVyZmFjZXMgYXJlIGFkZGVkL3JlbW92ZWQsIGFuZCBhbGwKLSAgICAgICAgIHRhYmxlcy9vYmplY3Qgd2lpbCBub3cgdXNlIHRoZSBzYW1lIGlmSW5kZXggZm9yIHRoZSBzYW1lIGludGVyZmFjZS4KKyAgICAgICAgIHRhYmxlcy9vYmplY3Qgd2lsbCBub3cgdXNlIHRoZSBzYW1lIGlmSW5kZXggZm9yIHRoZSBzYW1lIGludGVyZmFjZS4KIAogICAgU29sYXJpczoKICAgICAgLSBuZXcgZXhwZXJpbWVudGFsIHN1cHBvcnQgZm9yIHVjZC1zbm1wL2xtU2Vuc29ycyBNSUIgbW9kdWxlCkBAIC00NjMsNyArNjkxLDcgQEAKIAogIFBvcnRzOgogICAgLSBMaW51eCAyLjYgaW1wcm92ZW1lbnRzCi0gICAtIFdpbjMyIFN1cG9ydCBmb3IgVENQIGFuZCBVRFAgb3ZlciBJUHY2IHZpYSBXaW5zb2NrIHZlcnNpb24gMgorICAgLSBXaW4zMiBzdXBwb3J0IGZvciBUQ1AgYW5kIFVEUCBvdmVyIElQdjYgdmlhIFdpbnNvY2sgdmVyc2lvbiAyCiAgICAtIFdpbjMyIGZpeGVzIGluIG1hbnkgcGxhY2VzLgogICAgLSBXaW4zMiBzZXJ2aWNlIHN1cHBvcnQgZm9yIHNubXB0cmFwZAogICAgLSBXaW4zMiBzdXBwb3J0IGZvciBzbm1wY29uZgpAQCAtNjU2LDcgKzg4NCw3IEBACiAqNS4wLjQqCiAKICAgIER1cmluZyB0aGUgdGVzdGluZyBmb3IgcmVsZWFzZSA1LjAuNCwgYSByZWxlYXNlIGNhbmRpZGF0ZSB3YXMgdXBsb2FkZWQKLSAgIHRvIFNvdXJjZWZvcmdlIGFuZCBtYXJrZWQgYXMgaGlkZGVuLiBGb3IgdmFyaW91c2UgcmVhc29ucywgdGhlIHJlbGVhc2UKKyAgIHRvIFNvdXJjZWZvcmdlIGFuZCBtYXJrZWQgYXMgaGlkZGVuLiBGb3IgdmFyaW91cyByZWFzb25zLCB0aGUgcmVsZWFzZQogICAgd2FzIGRlbGF5ZWQgYW5kIGZ1cnRoZXIgY2hhbmdlcyBhbmQgZml4ZXMgd2VyZSBtYWRlLiAgSG93ZXZlciwgdGhlIAogICAgcmVsZWFzZSBjYW5kaWRhdGUgZmlsZXMgc3RpbGwgYXBwZWFyZWQgb24gdGhlIHB1YmxpYyBGVFAgc2VydmVyIGFuZCBvdXIKICAgIG1pcnJvcnMuIFRvIGF2b2lkIHRoZSBjb25mdXNpb24gdGhhdCBjb3VsZCBvY2N1ciB0byB1c2VycyB3aG8gbWF5IGhhdmUKQEAgLTkyNiw3ICsxMTU0LDcgQEAKICAgICAgIChzZWUgdGhlIHRyYXBzZXNzIHNlY3Rpb24gb2YgdGhlIHNubXBkLmNvbmYgbWFudWFsIHBhZ2UpCiAgICAgLSBpbmRleCBtYXRjaGluZyBpbiBvaWRzIGhhcyBiZWVuIGltcHJvdmVkCiAgICAgICAoc2VlIHRoZSBzbm1wY21kIG1hbnVhbCBwYWdlIG9uIC1PeCwgLU9FLCBhbmQgLU9iKS4KLSAgICAtIHNubXB0cmFwZCBoYXMgbmV3IGZvcm1hdGluZyBkaXJlY3RpdmVzLgorICAgIC0gc25tcHRyYXBkIGhhcyBuZXcgZm9ybWF0dGluZyBkaXJlY3RpdmVzLgogICAgICAgKHNlZSB0aGUgc25tcHRyYXBkIG1hbnVhbCBwYWdlIG9uIGZvcm1hdDEgYW5kIGZvcm1hdDIpLgogICAgIC0gdGhlIGFnZW50IGNhbiBsaXN0ZW4gdG8gbXVsdGlwbGUgcG9ydHMuCiAgICAgLSB0aGUgYWdlbnQgY2FuIGJlIHJlc3RyaWN0ZWQgdG8gbGlzdGVuaW5nIG9uIG9ubHkgY2VydGFpbiBpbnRlcmZhY2VzLgpAQCAtMTEwMyw3ICsxMzMxLDcgQEAKICAgICAtIG1hbnkgbWlzYyBidWcgZml4ZXMsIGFzIGFsd2F5cy4KIAogICBQb3J0czoKLSAgICAtIHNubXBuZXRzdGF0IGhhcyBiZWVuIHBvcnRlZCB0byB0aGUgd2luMzIgZW52aW9ybm1lbnQuCisgICAgLSBzbm1wbmV0c3RhdCBoYXMgYmVlbiBwb3J0ZWQgdG8gdGhlIHdpbjMyIGVudmlyb25tZW50LgogCiAqMy41LjMqCiAgICAgLSBCdWcgZml4ZXMsIGluY2x1ZGluZyByb3cgY3JlYXRpb24gc2V0cyB0byBtaWIgbW9kdWxlcyBzaG91bGQgd29yayBhZ2Fpbi4KQEAgLTEyNTksNyArMTQ4Nyw3IEBACiAgICAgLSBGQVEgZmlsZSEKICAgICAtIGJ1Zy1yZXBvcnQgc2NyaXB0IQogICAgIC0gQWdlbnQgY2FuIHJlYWQgLmNvbmYgZmlsZXMgZnJvbSBtb3JlIHBsYWNlczoKLSAgICAgIC0gU05NUENPTkZQQVRIIGVudmlvcm5tZW50IHZhcmlhYmxlLgorICAgICAgLSBTTk1QQ09ORlBBVEggZW52aXJvbm1lbnQgdmFyaWFibGUuCiAgICAgICAtIGNvbW1hbmQgbGluZSBvcHRpb25zOiAgLWMgRklMRSBhbmQgLUMuCiAgICAgLSBBZ2VudCBjYW4gc2VuZCBjb2xkc3RhcnQgYW5kIGF1dGhlbnRpY2F0aW9uIHRyYXBzLgogICAgIC0gQWxsIHJlcXVlc3RzL3BhdGNoZXMvcXVlc3Rpb25zIHNob3VsZCBnbyB0byAKZGlmZiAtLWdpdCBhL1BPUlRJTkcgYi9QT1JUSU5HCmluZGV4IGRhY2IxNWEuLjJkNDUzZjYgMTAwNjQ0Ci0tLSBhL1BPUlRJTkcKKysrIGIvUE9SVElORwpAQCAtMjUsNyArMjUsNyBAQAogdGhlIHBhY2thZ2UgdG8gbmV3IGFyY2hpdGVjdHVyZXMgcmFyZWx5IHRha2UgYWR2YW50YWdlIG9mIHRoaXMgc2V0dXAKIGFuZCBzZW5kIG1lIHBhdGNoZXMgd2l0aCBsb3RzIG9mICcjaWZkZWYgQVJDSCcgdHlwZSBDIGNvZGUgaW4gaXQuICBMZXQKIG1lIHNheSB1cCBmcm9udCwgSSAqaGF0ZSogdGhpcyB0eXBlIG9mIGNvZGluZyBub3cgKGV2ZW4gdGhvdWdoIEkgdXNlZAotdG8gdXNlIGl0IGEgbG90KS4gIFdoYXQgaXMgYmV0dGVyIGlzIHRvIGNoZWNrIGZvciB0aGUgbmVjaXNzYXJ5Cit0byB1c2UgaXQgYSBsb3QpLiAgV2hhdCBpcyBiZXR0ZXIgaXMgdG8gY2hlY2sgZm9yIHRoZSBuZWNlc3NhcnkKIGZ1bmN0aW9uYWxpdHkgdXNpbmcgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYW5kIHRoZW4gdXNlIHRoZSByZXN1bHRzIG9mCiB0aG9zZSB0ZXN0cy4KIApAQCAtNzUsMTcgKzc1LDEzIEBACiAtLS0gU1RSVUNUVVJFIE1FTUJFUiBDSEVDS1MKIAogSW4gY29uZmlndXJlLmluOgotICBBQ19DSEVDS19TVFJVQ1RfRk9SKFsKKyAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IFNUUlVDVFVSRS5NRU1CRVJdLCwsW1sKICNpbmNsdWRlIGxpbmVzCi1dLCBTVFJVQ1RVUkUsIE1FTUJFUikKLSAgIF5eXl5eXl5eXiAgXl5eXl5eICAoY2hhbmdlKQotCi1JbiBhY2NvbmZpZy5oOgotICAjdW5kZWYgU1RSVUNUX1NUUlVDVFVSRV9IQVNfTUVNQkVSCi0gICAgICAgICAgICAgICAgXl5eXl5eXl5eICAgICBeXl5eXl4gIChjaGFuZ2UpCitdXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl5eXiBeXl5eXl4gIChjaGFuZ2UpCiAKIEluIHNvdXJjZSBjb2RlOgotICAjaWZkZWYgU1RSVUNUX1NUUlVDVFVSRV9IQVNfTUVNQkVSCisgICNpZmRlZiBIQVZFX1NUUlVDVF9TVFJVQ1RVUkVfTUVNQkVSCiAgICAgLyogdXNlIGl0ICovCiAgICNlbmRpZgogCmRpZmYgLS1naXQgYS9SRUFETUUgYi9SRUFETUUKaW5kZXggNjI5YWYzMS4uOTY5OTgzNiAxMDA2NDQKLS0tIGEvUkVBRE1FCisrKyBiL1JFQURNRQpAQCAtMSw0ICsxLDQgQEAKLQkgICAgICAgUkVBRE1FIGZpbGUgZm9yIG5ldC1zbm1wIFZlcnNpb246IDUuNC40CisJICAgICAgIFJFQURNRSBmaWxlIGZvciBuZXQtc25tcCBWZXJzaW9uOiA1LjcuMy5yYzEKIAogRElTQ0xBSU1FUgogCkBAIC0yNTYsNyArMjU2LDcgQEAKICAgICBEYW4gQS4gRGlja2V5IDxkZGlja2V5QHRyYW5zaXRpb24uY29tPgogICAgIERhdmUgU2hpZWxkIDxELlQuU2hpZWxkQGNzYy5saXYuYWMudWs+CiAgICAgR2lvdmFubmkgUy4gTWFyem90IDxnbWFyem90QG5vcnRlbG5ldHdvcmtzLmNvbT4KLSAgICBOaWVscyBCYWdnZXNlbiA8cmVjbmJhQG1lZGlhdG9yLnVuaS1jLmRrPgorICAgIE5pZWxzIEJhZ2dlc2VuIDxuYmFAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgIFNpbW9uIExlaW5lbiA8c2ltb25AbGltbWF0LnN3aXRjaC5jaD4KICAgICBEYXZpZCBULiBQZXJraW5zIDxkcGVya2luc0Bkc3BlcmtpbnMuY29tPgogICAgIE1pa2UgUGVyaWsgPG1pa2VwQGNydC5jb20+CkBAIC0zNDksNyArMzQ5LDEyIEBACiAgICAgUGV0ZXIgTWFydGluIDxwbm1hcnRpbkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICAgVGhvbWFzIExhY2tleSA8dGVsYWNrZXlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogICAgIEpvZSBCdWVobGVyIDxqYnVlaGxlckBzcGlyZW50Y29tLmNvbT4KKyAgICBBbmRlcnMgUGVyc3NvbiA8YXBlcnNzb25AdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIFJvamVyIDxyb2plckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+CiAgICAgQmFydCBWYW4gQXNzY2hlIDxiYXJ0LnZhbmFzc2NoZUBnbWFpbC5jb20+CisgICAgUGFibG8gQ2FyYm9uaSA8cGNhcmJvbmlAdXNlcnMuc291cmNlZm9yZ2UubmV0PgorICAgIEJpbGwgRmVubmVyIDxmZW5uZXJAZ21haWwuY29tPgorICAgIEJyaWFuIFNpcG9zIDxic2lwb3Nya2ZAdXNlcnMuc291cmNlZm9yZ2UubmV0PgogCiAgIFdlJ3ZlIHByb2JhYmx5IGZvcmdvdHRlbiBwZW9wbGUgb24gdGhpcyBsaXN0LiAgTGV0IHVzIGtub3cgaWYgeW91J3ZlCiAgIGNvbnRyaWJ1dGVkIGNvZGUgYW5kIHdlJ3ZlIGxlZnQgeW91IG91dC4KZGlmZiAtLWdpdCBhL1JFQURNRS5hZ2VudC1taWJzIGIvUkVBRE1FLmFnZW50LW1pYnMKaW5kZXggODcxNmY4ZC4uNTNmMWNhYSAxMDA2NDQKLS0tIGEvUkVBRE1FLmFnZW50LW1pYnMKKysrIGIvUkVBRE1FLmFnZW50LW1pYnMKQEAgLTQwLDYgKzQwLDcgQEAKICAgRyAgc2NhbGFyIGdyb3VwIGhlbHBlcgogICBXICB3YXRjaGVkIHNjYWxhciAKICAgTSAgbWZkCisgIEMgIGNvbnRhaW5lciB0YWJsZQogCiBQbGF0Zm9ybSBLZXlzCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTYzLDkgKzY0LDEwIEBACiAgdGFibGUvb2JqZWN0IGdyb3VwICAgICAgICAgICBPUyAgICAgICBSZWwgICBTdHlsIEZpbGUKID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogU05NUHYyLU1JQgotIHN5c3RlbS4qLjAgICAgICAgICAgICAgICAgICAgQSAgICAgICAgIDMuMiAgICAgTyBtaWJJSS9zeXN0ZW1fbWliLmMKLSBzeXNPUlRhYmxlICAgICAgICAgICAgICAgICAgIEEgICAgICAgICAzLjQgICAgIE8gbWliSUkvc3lzT1JUYWJsZS5jCi0gc25tcC4qLjAgICAgICAgICAgICAgICAgICAgICBBICAgICAgICAgMy4yICAgICBPIG1pYklJL3NubXBfbWliLmMKKyBzeXN0ZW0uPy4wICAgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIFcgbWliSUkvc3lzdGVtX21pYi5jCisgLnN5c09STGFzdENoYW5nZS4wICAgICAgICAgICBBICAgICAgICAgNS41ICAgICBXIG1pYklJL3N5c09SVGFibGUuYworIHN5c09SVGFibGUgICAgICAgICAgICAgICAgICAgQSAgICAgICAgIDUuNSAgICAgQyBtaWJJSS9zeXNPUlRhYmxlLmMKKyBzbm1wLiouMCAgICAgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIEcgbWliSUkvc25tcF9taWJfNV81LmMKICBzZXRTZXJpYWxOby4wICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjAgICAgIFcgbWliSUkvc2V0U2VyaWFsTm8uYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTc0LDE1ICs3NiwxNSBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNOTVAtTVBELU1JQgotIHNubXBNUERTdGF0cy4qLjAgICAgICAgICAgICAgQSAgICAgICAgIH40LjA/ICAgTyBzbm1wdjMvc25tcE1QRFN0YXRzLmMKKyBzbm1wTVBEU3RhdHMuKi4wICAgICAgICAgICAgIEEgICAgICAgICB+NC4wPyAgIEcgc25tcHYzL3NubXBNUERTdGF0c181XzUuYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIFNOTVAtVEFSR0VULU1JQgogIHNubXBUYXJnZXRTcGluTG9jay4wICAgICAgICAgQSAgICAgICAgIDMuNiAgICAgTyB0YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jCiAgc25tcFRhcmdldEFkZHJUYWJsZSAgICAgICAgICBBICAgICAgICAgMy42ICAgICBPIHRhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMKICBzbm1wVGFyZ2V0UGFyYW1zVGFibGUgICAgICAgIEEgICAgICAgICAzLjYgICAgIE8gdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jCi0gc25tcFVuYXZhaWxhYmxlQ29udGV4dHMuMCAgICBBICAgICAgICAgNS4wICAgICBPIHRhcmdldC90YXJnZXRfY291bnRlcnMuYwotIHNubXBVbmtub3duQ29udGV4dHMuMCAgICAgICAgQSAgICAgICAgIDUuMCAgICAgTyB0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMKKyBzbm1wVW5hdmFpbGFibGVDb250ZXh0cy4wICAgIEEgICAgICAgICA1LjUgICAgIEcgdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYworIHNubXBVbmtub3duQ29udGV4dHMuMCAgICAgICAgQSAgICAgICAgIDUuNSAgICAgRyB0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5jCiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU05NUC1OT1RJRklDQVRJT04tTUlCCkBAIC0xMDMsNiArMTA1LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU05NUC1VU0VSLUJBU0VELVNNLU1JQgogIHVzbVN0YXRzLiouMCAgICAgICAgICAgICAgICAgQSAgICAgICAgIH40LjAgICAgTyBzbm1wdjMvdXNtU3RhdHMuYworIHVzbVN0YXRzLiouMCAgICAgICAgICAgICAgICAgQSAgICAgICAgIDUuNSAgICAgRyBzbm1wdjMvdXNtU3RhdHNfNV81LmMKICB1c21Vc2VyVGFibGUgICAgICAgICAgICAgICAgIEEgICAgICAgICB+NC4wPyAgIE8gc25tcHYzL3VzbVVzZXIuYwogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTE1MSwxOSArMTU0LDIxIEBACiAgaWNtcC4qLjAgICAgICAgICAgICAgICAgICAgICBVICQyICAgICAgfjMuMiAgICBHIG1pYklJL2ljbXAuYwogCiAgaXBTeXN0ZW1TdGF0c1RhYmxlICAgICAgICAgICBMICAgICAgICAgNS4yICAgICBNIGlwLW1pYi89LyoKKyBpcFN5c3RlbVN0YXRzVGFibGUgICAgICAgICAgICBTICAgICAgICA1LjUgICAgIE0gaXAtbWliLz0vKgogIGlwSWZTdGF0c1RhYmxlTGFzdENoYW5nZS4wICAgLS0tCi0gaXBJZlN0YXRzVGFibGUgICAgICAgICAgICAgICAtLS0KKyBpcElmU3RhdHNUYWJsZSAgICAgICAgICAgICAgIEwtLSAgICAgICA1LjUgICAgIE0gaXAtbWliLz0vKgogCiAgaXBBZGRyVGFibGUgKEQpICAgICAgICAgICAgICBVICQyICAgICAgNC4yICAgICBPIG1pYklJL2lwQWRkci5jCi0gaXBBZGRyZXNzU3BpbkxvY2suMCAgICAgICAgICAtLS0KKyBpcEFkZHJlc3NTcGluTG9jay4wICAgICAgICAgIEEgICAgICAgICA1LjUgICAgIE8gbWliSUkvaXBBZGRyLmMKICBpcEFkZHJlc3NUYWJsZSAgICAgICAgICAgICAgIEwgICAgICAgICA1LjIgICAgIE0gaXAtbWliLz0vKgorIGlwQWRkcmVzc1RhYmxlICAgICAgICAgICAgICAgIFMgICAgICAgIDUuNSAgICAgTSBpcC1taWIvPS8qCiAgaXBBZGRyZXNzUHJlZml4VGFibGUgICAgICAgICBMICAgICAgICAgNS4zICAgICBNIGlwLW1pYi89LyoKIAogIGlwUm91dGVUYWJsZSAoRCkgICAgICAgICAgICAgVSAkMiAgICAgIH4zLjUgICAgTyBtaWJJSS8qcm91dGUqLmMKICBpcE5ldFRvTWVkaWFUYWJsZSAoRCkgICAgICAgIFUgJDIgICAgICB+My41ICAgIE8gbWliSUkvYXQuYwogIGlwTmV0VG9QaHlzaWNhbFRhYmxlICAgICAgICAgKGltcGxlbWVudGVkIGFzIGluZXROZXRUb01lZGlhVGFibGUpCiAgaW5ldE5ldFRvTWVkaWFUYWJsZSAgICAgICAgICBMICAgICAgICAgNS4yICAgICBNIGlwLW1pYi89LyoKLSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAgICAgICAgIC0tLQorIGlwRGVmYXVsdFJvdXRlclRhYmxlICAgICAgICAgTCAgICAgICAgIDUuNSAgICAgTSBpcC1taWIvPS8qCiAKICBpY21wU3RhdHNUYWJsZSAgICAgICAgICAgICAgIC0tLQogIGljbXBNc2dTdGF0c1RhYmxlICAgICAgICAgICAgLS0tCkBAIC0xNzksNiArMTg0LDkgQEAKICBpcHY2Um91dGVyQWR2ZXJ0U3BpbkxvY2suMCAgIC0tLQogIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlICAgICAgLS0tCiAKKyBpcEZvcndhcmRpbmcuMCAgICAgICAgICAgICAgIEwgICAgICAgICAgNS40ICAgIFMgaXAtbWliL2lwX3NjYWxhcnMuYworIGlwRGVmYXVsdFRUTC4wICAgICAgICAgICAgICAgTCAgICAgICAgICA1LjQgICAgUyBpcC1taWIvaXBfc2NhbGFycy5jCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogSVBWNi1NSUIKICBpcHY2TUlCT2JqZWN0cy4/LjAgICAgICAgICAgIFUgICAgICAgICA0LjEgICAgIE8gbWliSUkvaXB2Ni5jCkBAIC0yMzYsNiArMjQ0LDcgQEAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogUk1PTi1NSUIKICBldGhlclN0YXRzVGFibGUgICAgICAgICAgICAgIFUgICAgICAgICA1LjAgICAgIE8gUm1vbi9zdGF0aXN0aWNzLmMKKyAuZXRoZXJTdGF0c0phYmJlcnMgICAgICAgICAgIEwzICAgICAgICA1LjUgICAgIE0gcm1vbi1taWIvPS8qCiAgZXRoZXJIaXN0b3J5Q29udHJvbFRhYmxlICAgICBVICAgICAgICAgNS4wICAgICBPIFJtb24vaGlzdG9yeS5jCiAgZXRoZXJIaXN0b3J5VGFibGUgICAgICAgICAgICBVICAgICAgICAgNS4wICAgICBPIFJtb24vaGlzdG9yeS5jCiAgYWxhcm1UYWJsZSAgICAgICAgICAgICAgICAgICBVICAgICAgICAgMy4yICAgICBPIFJtb24vYWxhcm0uYwpAQCAtMzIzLDcgKzMzMiw3IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogRXRoZXJMaWtlLU1JQgotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tCisgZG90M1N0YXRzVGFibGUgICAgICAgICAgICAgICBMICAgICAgICA1LjUgICAgICBNIGV0aGVybGlrZS1taWIvPQogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIEFHRU5UWC1NSUIKQEAgLTQwOCwxNiArNDE3LDI5IEBACiAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogU0NUUC1NSUIKLSBzY3RwU3RhdHMgICAgICAgICAgICAgICAgICAgIEwgICAgICAgICA1LjQuMiAgIFMgc2N0cC1taWIvc2N0cFNjYWxhcnMqCi0gc2N0cFBhcmFtZXRlcnMgICAgICAgICAgICAgICBMICAgICAgICAgNS40LjIgICBTIHNjdHAtbWliL3NjdHBTY2FsYXJzKgotIHNjdHBBc3NvY1RhYmxlICAgICAgICAgICAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KLSBzY3RwQXNzb2NSZW1BZGRyVGFibGUgICAgICAgIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSAgICAgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cExvb2t1cFJlbVBvcnRUYWJsZSAgICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KLSBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSAgIEwgICAgICAgICA1LjQuMiAgIEMgc2N0cC1taWIvPQotIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgTCAgICAgICAgIDUuNC4yICAgQyBzY3RwLW1pYi89Ci0gc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlICAgICBMICAgICAgICAgNS40LjIgICBDIHNjdHAtbWliLz0KKyBzY3RwU3RhdHMgICAgICAgICAgICAgICAgICAgIEwgICAgICAgICA1LjUgICAgIFMgc2N0cC1taWIvc2N0cFNjYWxhcnMqCisgc2N0cFBhcmFtZXRlcnMgICAgICAgICAgICAgICBMICAgICAgICAgNS41ICAgICBTIHNjdHAtbWliL3NjdHBTY2FsYXJzKgorIHNjdHBBc3NvY1RhYmxlICAgICAgICAgICAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cEFzc29jTG9jYWxBZGRyVGFibGUgICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKyBzY3RwQXNzb2NSZW1BZGRyVGFibGUgICAgICAgIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSAgICAgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cExvb2t1cFJlbVBvcnRUYWJsZSAgICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKyBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSAgIEwgICAgICAgICA1LjUgICAgIEMgc2N0cC1taWIvPQorIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUgTCAgICAgICAgIDUuNSAgICAgQyBzY3RwLW1pYi89Cisgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlICAgICBMICAgICAgICAgNS41ICAgICBDIHNjdHAtbWliLz0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTTk1QLVRTTS1NSUIKKyBzbm1wVHNtU3RhdHMgICAgICAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIEQgdHNtLW1pYi9zbm1wVHNtU3RhdHMvPQorIHNubXBDb25maWd1cmF0aW9uICAgICAgICAgICAgQSAgICAgICAgIDUuNiAgICAgVyB0c20tbWliLz0KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUTFNUTS1NSUIKKyBzbm1wVGxzdG1TZXNzaW9uICAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIFcgdGxzdG0tbWliLz0vKgorIHRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nLiogICAgQSAgICAgICAgIDUuNiAgICAgdyB0bHN0bS1taWIvPQorIHRsc3RtQ2VydFRvVFNOVGFibGUgICAgICAgICAgQSAgICAgICAgIDUuNiAgICAgRCB0bHN0bS1taWIvPS8qCisgdGxzdG1QYXJhbXNUYWJsZSAgICAgICAgICAgICBBICAgICAgICAgNS42ICAgICBEIHRsc3RtLW1pYi89LyoKKyB0bHN0bUFkZHJUYWJsZSAgICAgICAgICAgICAgIEEgICAgICAgICA1LjYgICAgIEQgdGxzdG0tbWliLz0vKgogCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApAQCAtNDI1LDYgKzQ0Nyw3IEBACiAtLS0tLS0tLS0tCiAgMTogYXZhaWxhYmxlIGZvciBzeXN0ZW1zIHVzaW5nIEtBTUUgaXB2NgogIDI6IHdpdGggcGxhdGZvcm0gU0RLLiBTZWUgUkVBRE1FLndpbjMyCisgMzogd29ya3Mgb25seSB3aXRoIEludGVsIGFuZCBCcm9hZGNvbSBuZXR3b3JrIGNhcmRzIGFuZCBtdXN0IHJ1biBhcyByb290IG9ubHkKIAogT3RoZXIgZmVhdHVyZSBpbmZvCiAtLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQzNSwzICs0NTgsNSBAQAogIHByb3BlciBjb250ZXh0IHN1cHBvcnQgICAgICAgICAgICAgICAgICAgNS4yCiAgRElTTUFOLUVWRU5ULU1JQiBpbXBsZW1lbnRhdGlvbiByZXdyaXRlICA1LjMKICBBZ2VudFgsIGhvc3QsIGRpc21hbi9ldmVudCBieSBkZWZhdWx0ICAgIDUuMworIFNTSCBUcmFuc3BvcnQgbW9kdWxlICAgICAgICAgICAgICAgICAgICAgNS41CisgKEQpVExTIFRyYW5zcG9ydCBtb2R1bGUgICAgICAgICAgICAgICAgICA1LjYKZGlmZiAtLWdpdCBhL1JFQURNRS5haXggYi9SRUFETUUuYWl4CmluZGV4IDE2ZjcyNWUuLmUyNWU5YjYgMTAwNjQ0Ci0tLSBhL1JFQURNRS5haXgKKysrIGIvUkVBRE1FLmFpeApAQCAtNiw3ICs2LDYgQEAKIAogVGhlcmUgYXJlIHRoZSBmb2xsb3dpbmcga25vd24gcHJvYmxlbXMgb24gQUlYOgogCi0KIDEpIFNoYXJlZCBsaWJyYXJpZXMgLyBlbWJlZGRlZCBwZXJsCiAKIFVwIHRvIChhbmQgaW5jbHVkaW5nKSBuZXQtc25tcCA1LjQsIGNvbmZpZ3VyZSBmb3JjZWQgYSBzdGF0aWMgYnVpbGQKQEAgLTE0LDExICsxMywxMCBAQAogCiBTdGFydGluZyB3aXRoIG5ldC1zbm1wIDUuNC4xLCB3ZSBidWlsZCBzaGFyZWQgbGlicmFyaWVzIGJ5IGRlZmF1bHQgb24gQUlYCiAobGlrZSBvbiBhbnkgb3RoZXIgcGxhdGZvcm0pIHVzaW5nIHJ1bi10aW1lIGxpbmtpbmcuIGNvbmZpZ3VyZSBmb3JjZXMgdGhlCi11c2Ugb2YgdGhlIHJlcXVpcmVkICItYnJ0bCIgbGlua2VyIGZsYWcuIFdlIGFsc28gcmVjb21tZW5kCit1c2Ugb2YgdGhlIHJlcXVpcmVkICItYnJ0bCIgbGlua2VyIGZsYWcuCiAKLSAgIC4vY29uZmlndXJlIC0tZW5hYmxlLWFzLW5lZWRlZCAuLi4KLQotZm9yIHByb3BlciBsaWJwZXJsIGxpbmtpbmcuCitXaXRoIG5ldC1zbm1wIDUuNSB0aGUgc2hhcmVkIGxpYnJhcnkgYnVpbGQgaXMgYnJva2VuIGFnYWluIGJ1dCB0aGUgdGhlcmUgaXMKK25vIGZvcmNlZCBzdGF0aWMgYnVpbGQgLSB1c2UgLS1kaXNhYmxlLXNoYXJlZCB3aGVuIGJ1aWxkaW5nLgogCiAyKSAiZ3JlcDogY2FwYWNpdHkgZXhjZWVkZWQiIG9yICJzZWQ6IENvbW1hbmQgbGluZSBpcyB0b28gbG9uZyIgZHVyaW5nIGNvbmZpZ3VyZQogCmRpZmYgLS1naXQgYS9SRUFETUUuaXJpeCBiL1JFQURNRS5pcml4CmluZGV4IDc5YmY3ZWMuLmM3OTc3ZTkgMTAwNjQ0Ci0tLSBhL1JFQURNRS5pcml4CisrKyBiL1JFQURNRS5pcml4CkBAIC0zNCwxNyArMzQsNyBAQAogICBodHRwOi8vc2YubmV0L3N1cHBvcnQvdHJhY2tlci5waHA/YWlkPTE2NzU4NjkKIAogCi0zLiBQZXJsCi0tLS0tLS0tCi0KLVdoZW4gY29tcGlsaW5nIHdpdGggUGVybCBzdXBwb3J0LCBpdCdzIHJlY29tbWVuZGVkIHRvIHNwZWNpZnkKLQotICAuL2NvbmZpZ3VyZSAtLWVuYWJsZS1hcy1uZWVkZWQKLQotZm9yIHByb3BlciBsaWJwZXJsIGxpbmtpbmcuCi0KLQotNC4gS25vd24gSXNzdWVzCiszLiBLbm93biBJc3N1ZXMKIC0tLS0tLS0tLS0tLS0tLQogCiBBY2Nlc3NpbmcgY2VydGFpbiBNSUIgb2JqZWN0cyBvbiBJUklYNjQgbWFjaGluZXMgKGkuZS4gd2hlbiBydW5uaW5nIGEgNjQtYml0IApAQCAtNTYsNyArNDYsNyBAQAogICAgLi9jb25maWd1cmUgLS13aXRob3V0LWttZW0tdXNhZ2UgLi4uCiAKIAotNS4gRmVlZGJhY2sKKzMuIEZlZWRiYWNrCiAtLS0tLS0tLS0tLQogCiBQbGVhc2UgYWxzbyBzZWUgUkVBRE1FIGFuZCBQT1JUSU5HLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLm9zWCBiL1JFQURNRS5vc1gKaW5kZXggYjE1YWZhNy4uNDliNThlNyAxMDA2NDQKLS0tIGEvUkVBRE1FLm9zWAorKysgYi9SRUFETUUub3NYCkBAIC03LDEwICs3LDYgQEAKIAogICAtIEFMTAogCi0gICAgLSBUZXN0IDQ0IChQZXJsIEFnZW50WCBTdWJhZ2VudCkgZmFpbHMuCi0KLSAgICAgICAtIGNvbmZpZ3VyZSB3aXRoIC0tZW5hYmxlLWFzLW5lZWRlZCBmb3IgcHJvcGVyIGxpYnBlcmwgbGlua2luZwotCiAgICAgLSBubGlzdCBkb2Vzbid0IHN1cHBvcnQgaWNtcHN0YXQKIAogICAgICAgIC0gZGlzYWJsZSB0aGUgaWNtcCBtb2R1bGUgZHVyaW5nIGNvbmZpZ3VyZSBieSBzcGVjaWZ5aW5nCkBAIC0xOSw3ICsxNSw3IEBACiAKIAogICAtIDEwLjQuNyAoVW5pdmVyc2FsKSBhbmQgTGVvcGFyZCB3aXRoIDUuNCBzb3VyY2VzOgotICAgICAgICBbU3VwcGxpZWQgYnkgQ2hyaXMgSmFsYmVydCwgc2xpZ2h0bHkgdXBkYXRlZF0KKyAgICAgICAgW1N1cHBsaWVkIGJ5IENocmlzIEphbGJlcnRdCiAKICAgICAgICAtIGJ1aWxkIHVzaW5nIGdjYyA0LjAgKHNlZSBiZWxvdykgYW5kIGNvbmZpZ3VyZSB1c2luZzoKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0vdmFyL2RiL25ldC1zbm1wIFwKQEAgLTI3LDcgKzIzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIC0td2l0aG91dC1ycG0gXAogICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLW1pYi1tb2R1bGVzPSJob3N0IHVjZC1zbm1wL2Rpc2tpbyIgXAogICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRoLW91dC1taWItbW9kdWxlcz0ibWliSUkvaWNtcCBob3N0L2hyX3N3cnVuIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1hcy1uZWVkZWQgXAogICAgICAgICAgICAgICAgICAgICAgICAgLS13aXRob3V0LWttZW0tdXNhZ2UKIAogICAgICAgIFRoZSBmaXJzdCBsaW5lIHNldHMgdXAgcGVyc2lzdGVudCBzdG9yYWdlIGluIHRoZSBPUyBYIHN0YW5kYXJkIGxvY2F0aW9uLgpAQCAtNjQsMjAgKzU5LDMgQEAKICAgICAgICAgICAgICAgICAgICAtLXByZWZpeD0vdXNyIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0vdmFyL2RiL3VjZC1zbm1wCiAgICAgICAgICAgICAgICAgICAgLS13aXRoLW1pYi1tb2R1bGVzPWhvc3QKIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1XaXRoIE1hYyBPUyBYIDEwLjUuMiwgYW5kIE5ldC1TTk1QIDUuNC4yLCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uCi1zZWVtcyB0byBidWlsZCBhbmQgcnVuIHN1Y2Nlc3NmdWxseS4gICBUaGUgbWFpbiB0d2VhayBuZWVkZWQgdG8gZ2V0Ci10aGluZ3Mgd29ya2luZyB3YXMgdG8gZGlzYWJsZSAiZW1iZWRkZWQgcGVybCIgKHdoaWNoIGlzIGFjdGl2ZSBieQotZGVmYXVsdCBpbiA1LjQgYW5kIGFib3ZlKS4KLQotICBUaGUgaXNzdWUgaGVyZSBpcyB0aGF0IGVuYWJsaW5nIGVtYmVkZGVkIHBlcmwgd2lsbCB0cnkgdG8gdXNlIHRoZQotc2FtZSBDRkxBR1MgdXNlZCBmb3IgY29tcGlsaW5nIHBlcmwsIHdoZW4gY29tcGlsaW5nIHRoZSBOZXQtU05NUCBjb2RlCi0od2hpY2ggaXMgcHJvYmFibHkgcmVhc29uYWJsZSkuICBVbmZvcnR1bmF0ZWx5LCB0aGUgZGVmYXVsdCBwZXJsIGJpbmFyeQotdGhhdCBjb21lcyB3aXRoIE1hYyBPUy9YIDEwLjUgKGF0IGxlYXN0KSBpcyBhICJ1bml2ZXJzYWwgYmluYXJ5IiwKLXNvIHRoZSBDRkxBR1MgdGhhdCBpdCB1c2VzIGluY2x1ZGUgIi1hcmNoIGkzODYgLWFyY2ggcHBjIi4gIFRoaXMKLWR1YWwtYXJjaGl0ZWN0dXJlIG9wdGlvbiBjb25mdXNlcyB0aGUgY29uZmlndXJlIHNjcmlwdCwgYW5kIG1lYW5zCi10aGF0IGl0IGNhbm5vdCBkZXRlY3QgdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgaG9zdCBzeXN0ZW0gY29ycmVjdGx5LgotCi1EYXZlCi1KdW5lIDIwMDgKZGlmZiAtLWdpdCBhL1JFQURNRS5zbm1wdjMgYi9SRUFETUUuc25tcHYzCmluZGV4IDI2M2M5NTUuLjk5ZTQyMzggMTAwNjQ0Ci0tLSBhL1JFQURNRS5zbm1wdjMKKysrIGIvUkVBRE1FLnNubXB2MwpAQCAtNSw3ICs1LDkgQEAKIGRvZXNuJ3QgOy0pIC0tV2VzOgogCiBOb3RlOiBTSEEgYXV0aGVudGljYXRpb24gYW5kIERFUy9BRVMgZW5jcnlwdGlvbiBzdXBwb3J0IGlzIG9ubHkgYXZhaWxhYmxlCi1pZiB5b3UgaGF2ZSBPcGVuU1NMIGluc3RhbGxlZC4KK2lmIHlvdSBoYXZlIE9wZW5TU0wgaW5zdGFsbGVkIG9yIGlmIHlvdSd2ZSBjb21waWxlZCB1c2luZworLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwuICBJZiB5b3UgdXNlIC0td2l0aC1vcGVuc3NsPWludGVybmFsIHBsZWFzZQorcmVhZCB0aGUgZG9jdW1lbnRhdGlvbiBpbiBzbm1wbGliL29wZW5zc2wvUkVBRE1FIGZvciBpbXBvcnRhbnQgZGV0YWlscy4KIAogTm90ZTogZW5jcnlwdGlvbiBzdXBwb3J0IG5vdyAqaXMqIGVuYWJsZWQgaW4gdGhlIGJpbmFyeSByZWxlYXNlcyBkb3dubG9hZGFibGUKIGZyb20gdGhlIG5ldC1zbm1wIHdlYiBzaXRlLgpkaWZmIC0tZ2l0IGEvUkVBRE1FLnNvbGFyaXMgYi9SRUFETUUuc29sYXJpcwppbmRleCBhZWJjZTZmLi42MjVhYWUyIDEwMDY0NAotLS0gYS9SRUFETUUuc29sYXJpcworKysgYi9SRUFETUUuc29sYXJpcwpAQCAtOTk0LDEwICs5OTQsOCBAQAogCiAgICAuL2NvbmZpZ3VyZSAtZW5hYmxlLWVtYmVkZGVkLXBlcmwgLi4uCiAKLUl0J3MgcmVjb21tZW5kZWQgdG8gYWRkIC0tZW5hYmxlLWFzLW5lZWRlZCBmb3IgcHJvcGVyIGxpYnBlcmwgbGlua2luZy4KLQotRW5hYmxpbmcgUGVybCBzdXBwb3J0IHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgeW91IGFyZSBzdXJlIHlvdSByZWFsbHkgCi1uZWVkIFBlcmwsIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CitUaGlzIHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgeW91IGFyZSBzdXJlIHlvdSByZWFsbHkgbmVlZCBQZXJsLCAKK2ZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CiAKIFNvbGFyaXMgOCBhbmQgbGF0ZXIgc2hpcCB3aXRoIGEgdmVyc2lvbiBvZiBQZXJsIGNvbXBpbGVkIHVzaW5nIFN1bidzIGNjLiAKIApkaWZmIC0tZ2l0IGEvUkVBRE1FLnNxbCBiL1JFQURNRS5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJmNzAzOAotLS0gL2Rldi9udWxsCisrKyBiL1JFQURNRS5zcWwKQEAgLTAsMCArMSwyOSBAQAorc25tcHRyYXBkIE15U1FMIExvZ2dpbmcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgdHJhcCBoYW5kbGVyIGZvciBsb2dnaW5nIHRyYXBzIHRvIGEgTXlTUUwgZGF0YWJhc2Ugd2FzIGFkZGVkCitpbiByZWxlYXNlIDUuNS4wLgorCitUaGUgTXlTUUwgZGF0YWJhc2UgbG9jYXRpb24gYW5kIHBhc3N3b3JkIG11c3QgYmUgY29uZmlndXJlZCBpbgorL3Jvb3QvLm15LmNuZjoKKworCVtzbm1wdHJhcGRdCisJaG9zdD1sb2NhbGhvc3QKKwlwYXNzd29yZD1zcWwKKworVXNlciBtYXkgYWxzbyBiZSBjb25maWd1cmVkLCBpZiB1c2luZyBhIE15U1FMIHVzZXIgYmVzaWRlcyByb290LgorCitzbm1wdHJhcGQuY29uZiBtdXN0IGJlIGNvbmZpZ3VyZWQgdG8gZm9yIHRoZSBxdWV1ZSBzaXplIGFuZAorcGVyaW9kaWMgZmx1c2ggaW50ZXJ2YWw6CisKKwkjIG1heGltdW0gbnVtYmVyIG9mIHRyYXBzIHRvIHF1ZXVlIGJlZm9yZSBmb3JjZWQgZmx1c2gKKwlzcWxNYXhRdWV1ZSAxNDAKKworCSMgc2Vjb25kcyBiZXR3ZWVuIHBlcmlvZGljIHF1ZXVlIGZsdXNoZXMKKwlzcWxTYXZlSW50ZXJ2YWwgOQorCitBIHZhbHVlIG9mIDAgZm9yIHNxbFNhdmVJbnRlcnZhbCB3aWxsIGNvbXBsZXRlbHkgZGlzYWJsZSBNeVNRTAorbG9nZ2luZyBvZiB0cmFwcy4KKworVGhlIHNjaGVtYSBtdXN0IGJlIGxvYWRlZCBpbnRvIE15U1FMIGJlZm9yZSBydW5uaW5nIHNubXB0cmFwZC4KK1RoZSBzY2hlbWEgY2FuIGJlIGZvdW5kIGluIGRpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwKZGlmZiAtLWdpdCBhL1JFQURNRS53aW4zMiBiL1JFQURNRS53aW4zMgppbmRleCBkOTQyYjhhLi5lNDkyNDNiIDEwMDY0NAotLS0gYS9SRUFETUUud2luMzIKKysrIGIvUkVBRE1FLndpbjMyCkBAIC00LDE0ICs0LDEzIEBACiAqCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotVGhpcyBndWlkZSBkZXNjcmliZXMgYnVpbGRpbmcgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAgYW5kIGhpZ2hlciwgd2l0aAotdGhlIGdjYyBjb21waWxlciBmcm9tIE1pbkdXIC8gTVNZUywgYW5kIHdpdGggdGhlIGdjYyBjb21waWxlciBmcm9tIEN5Z3dpbi4KLUFzIGRldmVsb3BlcnMgYnVpbGQgd2l0aCBvdGhlciBXaW4zMiBlbnZpcm9ubWVudHMsIHRoZWlyIG5vdGVzIHdpbGwgYmUgCi1pbmNsdWRlZCBoZXJlLgorVGhpcyBndWlkZSBkZXNjcmliZXMgaG93IHRvIGJ1aWxkIE5ldC1TTk1QIHdpdGggTWljcm9zb2Z0IFZpc3VhbCBDKyssIHRoZQorTWluR1cgZ2NjIGNvbXBpbGVyIG9yIHRoZSBDeWd3aW4gZ2NjIGNvbXBpbGVyLiAgQXMgZGV2ZWxvcGVycyBidWlsZCB3aXRoIG90aGVyCitXaW4zMiBlbnZpcm9ubWVudHMsIHRoZWlyIG5vdGVzIHdpbGwgYmUgaW5jbHVkZWQgaGVyZS4KIAotVGhlIHJlbWFpbmRlciBvZiB0aGlzIGd1aWRlIGhhcyB0aGUgZm9sbG93aW5nIHNlY3Rpb25zIDoKK1RoZSBzZWN0aW9ucyBpbiB0aGlzIGd1aWRlIGFyZToKIAotU3RhdHVzIGFzIG9mIDE0LU9jdC0yMDA2IGZvciBXaW4zMiBwbGF0Zm9ybXMKK0N1cnJlbnQgU3RhdHVzIGZvciBXaW4zMiBwbGF0Zm9ybXMKIEludGVyYWN0aW9ucyB3aXRoIE90aGVyIFZlbmRvcidzIFByb2R1Y3RzCiBSdW5uaW5nIE5ldC1TTk1QIGFzIGEgcmVwbGFjZW1lbnQgZm9yIHRoZSBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlCiBDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcwpAQCAtMzksMzIgKzM4LDMyIEBACiAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgotKiBTdGF0dXMgYXMgb2YgMTQtT2N0LTIwMDYgZm9yIFdpbjMyIHBsYXRmb3JtcworKiBOZXQtU05NUCBzdGF0dXMgZm9yIFdpbjMyIHBsYXRmb3JtcwogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKIEFsbCBhcHBsaWNhdGlvbnMgYnVpbGQgd2l0aCBNaWNyb3NvZnQgVmlzdWFsIEMrKyA2LjAsIE1pY3Jvc29mdCBEZXZlbG9wbWVudAotRW52aXJvbm1lbnQgMjAwMyAoTVNWQyA3LjAvNy4xKSwgZ2NjIHVuZGVyIEN5Z3dpbiwgYW5kIGdjYyB1bmRlciBNaW5HVy4gIAorRW52aXJvbm1lbnQgMjAwMyAoTVNWQyA3LjAvNy4xKSwgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gMjAwNSwgTWljcm9zb2Z0CitWaXN1YWwgU3R1ZGlvIDIwMDgsIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIDIwMTAsIGdjYyB1bmRlciBDeWd3aW4gYW5kIGdjYwordW5kZXIgTWluR1cuCiAKLSAgLSAgQWxsIG9mIHRoZSBhcHBsaWNhdGlvbnMgd29yawotICAgICAoc25tcHdhbGssIHNubXBnZXQsIHNubXBzZXQsIHNubXB0cmFwLCBldGMuLi4pLgotICAtICBUaGUgc3lzdGVtLCBzbm1wLCBpcCwgdGNwLCB1ZHAsIGljbXAgbWliZ3JvdXBzIGZ1bmN0aW9uCi0gICAgICAgICAod2hlbiBhZ2VudCBpcyBidWlsdCB1c2luZyB0aGUgc25tcGRzZGsgcHJvamVjdCkuCisgIC0gIEFsbCBvZiB0aGUgYXBwbGljYXRpb25zIHdvcmsgKHNubXB3YWxrLCBzbm1wZ2V0LCBzbm1wc2V0LCBzbm1wdHJhcCwgLi4uKS4KKyAgLSAgVGhlIHN5c3RlbSwgc25tcCwgaXAsIHRjcCwgdWRwIGFuZCBpY21wIE1JQi1ncm91cHMgd29yayAocmVxdWlyZXMgdGhlCisgICAgIFBsYXRmb3JtIFNESykuCiAgIC0gIFRoZSBOZXQtU05NUCBhZ2VudCBydW5zIGFzIGFuIEFnZW50WCBtYXN0ZXIgYWdlbnQgb3IgYXMgc3ViYWdlbnQuCiAgIC0gIHNtdXggaXMgd29ya2luZy4KICAgLSAgVGhlIHRhcmdldCwgbm90aWZpY2F0aW9uLCBkaXNtYW4vbXRlIGdyb3VwcyBjb21waWxlIGJ1dCBhcmUgbm90IHRlc3RlZC4KICAgLSAgVGhlIFRDUC9JUHY2IGFuZCBVRFAvSVB2NiB0cmFuc3BvcnRzIGNvbXBpbGUgYnV0IGFyZSBub3QgdGVzdGVkLgotICAgICAgICAgCiAgIC0gIEV4dGVuZGluZyB0aGUgYWdlbnQgdG8gc3VwcG9ydCBlbnRlcnByaXNlLXNwZWNpZmljIE1JQnMgd29ya3MuCiAgIC0gIFJ1bm5pbmcgdGhlIGFnZW50IG9uIGEgbm9uLXN0YW5kYXJkIFVEUCBvciBUQ1AgcG9ydCB3b3Jrcy4KLSAgLSAgU25tcGQgY2FuIGJlIHJlZ2lzdGVyZWQgYXMgYSBXaW5kb3dzIE5ULzIwMDAvWFAgc2VydmljZS4KLSAgLSAgU25tcHRyYXBkIGNhbiBiZSByZWdpc3RlcmVkIGFzIGEgV2luZG93cyBOVC8yMDAwL1hQIHNlcnZpY2UuCisgIC0gIFNubXBkIGNhbiBiZSByZWdpc3RlcmVkIGFzIGEgV2luZG93cyBzZXJ2aWNlLgorICAtICBTbm1wdHJhcGQgY2FuIGJlIHJlZ2lzdGVyZWQgYXMgYSBXaW5kb3dzIHNlcnZpY2UuCiAgIC0gIFNvbWUgYnVpbGQgZW52aXJvbm1lbnRzIGFsbG93IGxvbmcgcGF0aG5hbWVzIHRoYXQgY29udGFpbgogICAgICBlbWJlZGRlZCBzcGFjZXMuICBBcyB0aGlzIGlzIG5vdCB0cnVlIGZvciBDeWd3aW4gImNvbmZpZ3VyZSIsCiAgICAgIHRoZSBkb2N1bWVudGVkIGV4YW1wbGUgc2NyaXB0cyB3aWxsIHJlZmVyIHRvICJjOi91c3IiCiAgICAgIGFzIHRoZSBiYXNlIGRpcmVjdG9yeSBmb3IgaW5zdGFsbGVkIE5ldC1TTk1QIHNvZnR3YXJlLgogICAtICBXaGVuIHVzaW5nIHRoZSB3aW5FeHRETEwgZXh0ZW5zaW9uIGFnZW50LCB0aGUgTmV0LVNOTVAgYWdlbnQgd2lsbAotICAgICBsb2FkIHRoZSBXaW5kb3dzIFNOTVAgU2VydmljZSBleHRlbnNpb24gRExMcworICAgICBsb2FkIHRoZSBXaW5kb3dzIFNOTVAgU2VydmljZSBleHRlbnNpb24gRExMcy4KIAogVGhlIG5leHQgc3Vic2VjdGlvbiByZWxhdGVzIHRvIGl0ZW1zIHRoYXQgYXJlIGJ1aWx0IHVzaW5nIFZpc3VhbCBTdHVkaW8KIApAQCAtNzgsOCArNzcsMTMgQEAKICAgLSAgQWxsIERlYnVnIGFuZCBSZWxlYXNlIHRhcmdldHMgbGlua2VkIHdpdGggbGlic25tcCBwcm9qZWN0IHRhcmdldHMKICAgICAgYnVpbGQgd2l0aG91dCBlcnJvcnMsIGFuZCBhcmUgZnVsbHkgZnVuY3Rpb25hbC4KIAotICAtICBCb3RoIHRoZSBXb3Jrc3BhY2UgZ3JhcGhpY2FsIGVudmlyb25tZW50IGFuZCBjb21tYW5kIGxpbmUgbm1ha2UgaXMgCi0gICAgIHN1cHBvcnRlZCBmb3IgYnVpbGRpbmcgdW5kZXIgTVNWQy4KKyAgLSAgQm90aCBidWlsZGluZyB2aWEgdGhlIGludGVyYWN0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50IGFuZCB2aWEgdGhlCisgICAgIGNvbW1hbmQgbGluZSAobm1ha2UpIGlzIHN1cHBvcnRlZC4KKworICAtICBXaXRoIFZpc3VhbCBTdHVkaW8gMjAwNSBhbmQgbGF0ZXIsIHRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBjYW4gYmUKKyAgICAgY29tcGlsZWQgaW50byBlaXRoZXIgMzItYml0IG9yIDY0LWJpdCBleGVjdXRhYmxlcyAodGhlIGFtZDY0L3g2NAorICAgICBhcmNoaXRlY3R1cmUpLiBQcmV2aW91cyBWaXN1YWwgU3R1ZGlvIHZlcnNpb25zIHN1cHBvcnQgMzItYml0IGV4ZWN1dGFibGVzCisgICAgIG9ubHkuCiAKIAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMDEsOSArMTA1LDkgQEAKICAgICAgQ2hlY2sgdGhlIFNlcnZpY2VzIHBhbmVsIHRvIGJlIHN1cmUgbm8gb3RoZXIgU05NUCBwcm9ncmFtIGNvbmZsaWN0cy4gU2VlCiAgICAgIHRoZSBzZWN0aW9uIHRpdGxlZCAnQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMnIGJlbG93LgogCi0gIC0gIFJ1bm5pbmcgdGhlIE5ldC1TTk1QIGFnZW50IGluc3RlYWQgb2YgdGhlIE1TIHN1cHBsaWVkIG9uZSB3b3JrcwotICAgICAoYXQgdGhlIGxvc3Mgb2YgbW9zdCBvZiB0aGUgZnVuY3Rpb25hbGl0eSkuICAgU2VlIHRoZSBzZWN0aW9uIHRpdGxlZCAKLSAgICAgJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBiZWxvdy4KKyAgLSAgVGhlIE5ldC1TTk1QIGFnZW50IGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgdGhlIE1TIHN1cHBsaWVkIG9uZSB3aGlsZQorICAgICByZXRhaW5pbmcgYWxsIGZ1bmN0aW9uYWxpdHkgYW5kIHdpdGggc2xpZ2h0bHkgYmV0dGVyIFNOTVAgY29uZm9ybWFuY2UuCisgICAgIFNlZSB0aGUgc2VjdGlvbiB0aXRsZWQgJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBiZWxvdy4KIAogICAtICBUaGUgTmV0LVNOTVAgYWdlbnQgZG9lcyBub3QgdXNlIHRoZSBNUyBTTk1QLmRsbCwgdGhlcmVmb3JlIGl0IGNhbm5vdCAKICAgICAgcnVuIGFzIGFuIGV4dGVuc2libGUgcGFydCBvZiB0aGUgTVMgYWdlbnQuICBJdCBpcyBwb3NzaWJsZSB0byB1c2UgYSB0aGlyZApAQCAtMTYzLDkgKzE2Nyw5IEBACiB0aGUgZGVmYXVsdCBXaW5kb3dzICgyMDAzKSBleHRlbnNpb25zIGluY2x1ZGVkIHdpdGggV2luZG93cy4gIE90aGVyIE5ldC1TTk1QIAogbW9kdWxlcyB0YWtlIHByZWNlZGVuY2Ugb3ZlciB0aGUgbW9kdWxlcyBsb2FkZWQgYnkgd2luRXh0RExMLgogCi1UaGUgYmluYXJ5IGluc3RhbGwgb2YgTmV0LVNOTVAgaW5jbHVkZXMgc2hvcnRjdXRzIGluIHRoZSBTdGFydCBtZW51IGZvciByZWdpc3RlcmluZyAKLWFuZCB1bnJlZ2lzdGVyaW5nIHNubXBkIGFuZCBzbm1wdHJhcGQgYXMgYSBzZXJ2aWNlIHdpdGggdGhlIGNvcnJlY3QgY29tbWFuZCBsaW5lIAotb3B0aW9ucy4KK1RoZSBiaW5hcnkgaW5zdGFsbCBvZiBOZXQtU05NUCBpbmNsdWRlcyBzaG9ydGN1dHMgaW4gdGhlIFN0YXJ0IG1lbnUgZm9yCityZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBzbm1wZCBhbmQgc25tcHRyYXBkIGFzIGEgc2VydmljZSB3aXRoIHRoZQorY29ycmVjdCBjb21tYW5kIGxpbmUgb3B0aW9ucy4KIAogQSBzaW1wbGUgdGVzdCB0byBzZWUgaWYgd2luRXh0RExMIGlzIHdvcmtpbmcgaXMgdG8gZ2V0IHRoZSBzeXNEZXNjciBzdHJpbmcuCiAKQEAgLTIzNSw3ICsyMzksMTAgQEAKIENvbXBpbGluZyBOZXQtU05NUCB3aXRoIHRoZSB3aW5FeHRETEwgZXh0ZW5zaW9uIChNU1ZDKQogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVdoZW4gYnVpbGRpbmcgd2l0aCBNU1ZDIDYsIHRoZSBNaWNyb3NvZnQgUGxhdGZvcm0gU0RLIGlzIHJlcXVpcmVkLgorV2hlbiBidWlsZGluZyB3aXRoIE1TVkMgNiwgdGhlIE1pY3Jvc29mdCBQbGF0Zm9ybSBTREsgaXMgcmVxdWlyZWQuIE5vdGU6IHRoZQorbW9zdCByZWNlbnQgUGxhdGZvcm0gU0RLIHZlcnNpb24gdGhhdCBpcyBzdGlsbCBjb21wYXRpYmxlIHdpdGggTVNWQyA2IGlzIHRoZQorRmVicnVhcnkgMjAwMyBlZGl0aW9uLiBUaGlzIGVkaXRpb24gaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSBvbmxpbmUgYnV0IGNhbiBiZQorb3JkZXJlZCB2aWEgaHR0cDovL21zc2RrLm9yZGVycG9ydC5uZXQvMjIyMjE4NDgvc2hvd2FsbC5hc3AuCiAKIENvbmZpZ3VyZSAvIG5tYWtlOgogCkBAIC00MDUsMzMgKzQxMiwxOCBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUlmIHlvdSBhcmUgY29tcGlsaW5nIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgQysrIDYuMCwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdAoteW91IGluc3RhbGwgdGhlIENvcmUgUGxhdGZvcm0gU0RLIChQU0RLKS4gIFdpdGhvdXQgdGhlIFBTREssIHNvbWUgZnVuY3Rpb25hbGl0eQotd2lsbCBiZSBkaXNhYmxlZCBzdWNoIGFzIHRoZSBjb3JlIGVsZW1lbnRzIG9mIHRoZSBtaWJJSSBncm91cCBvZiB0aGUgYWdlbnQgCi13aGljaCB1c2UgdGhlICJJUCBIZWxwZXIgQVBJIiAoSVBITFBBUEkpLgorSWYgeW91IGFyZSB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA2LjAsIHlvdSB3aWxsIGhhdmUgdG8gaW5zdGFsbCB0aGUKK1BsYXRmb3JtIFNESyAoUFNESykgZmlyc3QuCiAKLVRvIGRldGVybWluZSB3aGF0IGNvZGUgaXMgZGlzYWJsZWQgd2hlbiB0aGUgUFNESyBpcyBub3QgdXNlZCwgc2VhcmNoIHRoZQotc291cmNlIGNvZGUgZm9yIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLLgorT25jZSB0aGUgUFNESyBoYXMgYmVlbiBpbnN0YWxsZWQsIHNlbGVjdCB0aGUgZm9sbG93aW5nIGFjdGlvbiBmcm9tIHRoZSBTdGFydAorTWVudTogUHJvZ3JhbXMgLyBNaWNyb3NvZnQgV2luZG93cyBTREsgLyBWaXN1YWwgU3R1ZGlvIFJlZ2lzdHJhdGlvbiAvIFdpbmRvd3MKK1NESyBDb25maWd1cmF0aW9uIFRvb2wuCiAKLVRoZSBQU0RLIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gdGhlIE1TRE4gc2l0ZS4gIEdvIHRvIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20gCi1hbmQgZG8gYSBzZWFyY2ggZm9yICdwc2RrIGRvd25sb2FkJyAod2l0aG91dCB0aGUgcXVvdGVzKS4gIFlvdSBzaG91bGQgZmluZCBib3RoCi1hIHdlYiBpbnN0YWxsIGFuZCBhIGZ1bGwgaW5zdGFsbC4gIAotCi1XaGVuIGluc3RhbGxpbmcgdGhlIFNESywgYWxsIHRoYXQgaXMgcmVxdWlyZWQgaXMgdGhlICdDb3JlJy4KLQotT25jZSB0aGlzIHBhY2thZ2UgaGFzIGluc3RhbGxlZCwgZnJvbSB0aGUgU3RhcnQgTWVudSBydW4gCi0gICJQcm9ncmFtcyAtPk1pY3Jvc29mdCBQbGF0Zm9ybSBTREsuLi4gLT4gCi0gICBWaXN1YWwgU3R1ZGlvIFJlZ2lzdHJhdGlvbiAtPgotICAgUmVnaXN0ZXIgUFNESyBEaXJlY3RvcmllcyB3aXRoIFZpc3VhbCBTdHVkaW8iCi0KLUlmIHlvdSBhcmUgY29tcGlsaW5nIHVzaW5nIGFueSBvZiB0aGUgZm9sbG93aW5nIHN5c3RlbXMsIHRoZSBQU0RLIGRvd25sb2FkCi1pcyBub3QgbmVjZXNzYXJ5LCBhcyB0aGUgcmVxdWlyZWQgcGFydHMgb2YgdGhlIFBTREsgYXJlIGluY2x1ZGVkIHdpdGggdGhlIAotaW5zdGFsbGF0aW9uIG9mIHRoZSBjb21waWxlcjoKLQotICAgIC0gTWljcm9zb2Z0IERldmVsb3BtZW50IEVudmlyb25tZW50IDIwMDIgKE1TVkMgNy4wKQotICAgIC0gTWljcm9zb2Z0IERldmVsb3BtZW50IEVudmlyb25tZW50IDIwMDMgKE1TVkMgNy4xKQotICAgIC0gQ3lnd2luIChnY2MpCi0gICAgLSBNaW5HVyAoZ2NjKQorSWYgeW91IGFyZSB1c2luZyBhbnkgb2YgdGhlIGZvbGxvd2luZyBlbnZpcm9ubWVudHMsIHRoZSBQU0RLIGRvd25sb2FkIGlzIG5vdAorbmVjZXNzYXJ5IGFzIHRoZSByZXF1aXJlZCBwYXJ0cyBvZiB0aGUgUFNESyBhcmUgaW5jbHVkZWQ6CisgICAgLSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDAyIG9yIGxhdGVyLgorICAgIC0gQ3lnd2luLgorICAgIC0gTWluR1cuCiAKIEluIG9yZGVyIGZvciB0aGUgcHJvY2VzcyBwYXJ0IG9mIHRoZSBob3N0IHJlc291cmNlcyBNSUIgdG8gd29yayB1bmRlciBXaW5kb3dzCiBOVCB5b3Ugd2lsbCBuZWVkIHRvIG9idGFpbiBQU0FQSS5ETEwuIFRoaXMgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBkb3dubG9hZCAKQEAgLTQ1MSwxMiArNDQzLDEzIEBACiAKIFRoZXJlIGFyZSB0d28gd2F5cyB0byBidWlsZCBOZXQtU05NUCB1c2luZyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4gIFRoZSBmaXJzdAogYW5kIGVhc2llc3QgbWV0aG9kIGlzIHVzaW5nIENvbmZpZ3VyZSBhbmQgbm1ha2Ugb24gdGhlIGNvbW1hbmQgbGluZSwgYW5kIHRoZSAKLXNlY29uZCBpcyB1c2luZyB0aGUgV29ya3NwYWNlIGZpbGVzIHdpdGggdGhlIGdyYXBoaWNhbCBpbnRlcmZhY2UuCitzZWNvbmQgaXMgdXNpbmcgdGhlIFdvcmtzcGFjZSBmaWxlcyBpbnNpZGUgdGhlIGludGVyYWN0aXZlIGRldmVsb3BtZW50CitlbnZpcm9ubWVudC4KIAogVG8gdXNlIG5tYWtlIG9uIHRoZSBjb21tYW5kIGxpbmUsIHRoZSBDb25maWd1cmUgc2NyaXB0IGlzIHJ1biBmaXJzdCB0byBjcmVhdGUKLXRoZSB2YXJpb3VzIG1ha2UgZmlsZXMuICBPbmNlIHRoZXkgYXJlIGNyZWF0ZWQsIG5tYWtlIGlzIHVzZWQgdG8gYnVpbGQgdGhlIAotYXBwbGljYXRpb25zLiAgUGVybCBpcyByZXF1aXJlZCB0byB1c2UgdGhpcyBtZXRob2QsIGFzIHRoZSBDb25maWd1cmUgc2NyaXB0Ci1pcyB3cml0dGVuIGluIFBlcmwuICBBY3RpdmVTdGF0ZSBBY3RpdmVQZXJsIGlzIGF2YWlsYWJsZSBhdDoKK3RoZSB2YXJpb3VzIG1ha2VmaWxlcy4gIE9uY2UgdGhlc2UgaGF2ZSBiZWVuIGNyZWF0ZWQsIG5tYWtlIGlzIHVzZWQgdG8gYnVpbGQKK3RoZSBhcHBsaWNhdGlvbnMuICBQZXJsIGlzIHJlcXVpcmVkIHRvIHVzZSB0aGlzIG1ldGhvZCwgYXMgdGhlIENvbmZpZ3VyZQorc2NyaXB0IGlzIHdyaXR0ZW4gaW4gUGVybC4gIEFjdGl2ZVN0YXRlIEFjdGl2ZVBlcmwgaXMgYXZhaWxhYmxlIGF0OgogCiAgICAgICAgIGh0dHA6Ly93d3cuYWN0aXZlc3RhdGUuY29tL1Byb2R1Y3RzL0FjdGl2ZVBlcmwvCiAKQEAgLTQ2NSw1MiArNDU4LDQxIEBACiByZWNvbW1lbmRlZCB0aGF0IHlvdSByZWFkIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgd29ya3NwYWNlcyBhcmUgY29uZmlndXJlZAogZXZlbiBpZiB5b3Ugd2lsbCBvbmx5IGJlIHVzaW5nIHRoZSBjb21tYW5kIGxpbmUgQ29uZmlndXJlIC8gbm1ha2Ugc3lzdGVtLgogCi1Gb3IgdGhlIGdyYXBoaWNhbCBpbnRlcmZhY2UsIHRoZXJlIGFyZSB0d28gbWFpbiBXaW4zMiB3b3Jrc3BhY2VzIAotKCd3aW4zMi5kc3cnIGFuZCAnd2luMzJzZGsuZHN3JyksIGNvbnRhaW5pbmcgbW9yZSBvciBsZXNzIHRoZSBzYW1lIHNldCAKLW9mIHByb2plY3RzLCBwbHVzICdsaWJkbGwuZHN3JyB3aGljaCBjb250YWlucyBhIG1pbmltYWwgc2V0IG9mIHByb2plY3RzIAotZm9yIHVzZSB3aXRoIHRoZSBQZXJsIG1vZHVsZSBvbmx5LiAgCi0KLVdpbjMyLmRzdyBpcyBmb3IgZGV2ZWxvcGVycyB3aG8gaGF2ZSBub3QgaW5zdGFsbGVkIHRoZSBQbGF0Zm9ybSBTREsgZnJvbSAKLU1pY3Jvc29mdCdzIE1TRE4gU0RLIFVwZGF0ZSBzaXRlIHdoZW4gdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gNi4wLgotV2luMzJzZGsuZHN3IGlzIGZvciB0aG9zZSB3aG8gaGF2ZSBvciB3aG8gYXJlIHVzaW5nIHRoZSBNaWNyb3NvZnQgRGV2ZWxvcG1lbnQgCi1FbnZpcm9ubWVudCAyMDAyLzIwMDMgKE1TVkMgNy4wLzcuMSksIEN5Z3dpbiAoZ2NjKSBvciBNaW5HVyAoZ2NjKS4KLQotTGliZGxsLmRzdyBjb21waWxlcyBhIERMTCB2ZXJzaW9uIG9mIHNubXBsaWIgKG5ldHNubXAuZGxsKS4KK0ZvciBidWlsZGluZyB2aWEgdGhlIGludGVyYWN0aXZlIGRldmVsb3BtZW50IGVudmlyb25tZW50LCB0aGVyZSBhcmUgdGhlIFdpbjMyCit3b3Jrc3BhY2VzIHdpbjMyLmRzdyBhbmQgbGliZGxsLmRzdy4gVGhlIGxhc3Qgd29ya3NwYWNlIGFsbG93cyB0byBidWlsZCBhIERMTAordmVyc2lvbiBvZiBzbm1wbGliIChuZXRzbm1wLmRsbCkuCiAKIFRoZXJlIGlzIG9uZSBjb3JlIGRldmVsb3BtZW50IGxpYnJhcnkgKCdsaWJzbm1wJyksIHRvZ2V0aGVyIHdpdGggYSBudW1iZXIgCiBvZiB1dGlsaXR5IHByb2plY3RzIGZvciB0aGUgaW5kaXZpZHVhbCBleGVjdXRhYmxlIGNvbW1hbmRzICgnc25tcGdldCcsIAogJ3NubXB3YWxrJywgZXRjLi4uKS4gIEFsbCBvZiB0aGVzZSBwcm9qZWN0cyByZXF1aXJlIHRoZSAubGliIGNyZWF0ZWQgYnkgCiB0aGUgbGlic25tcCBwcm9qZWN0LgogCi1UaGUgYWdlbnQgcmVxdWlyZXMgdGhlIGNvcmUgbGlicmFyeSBwbHVzIHRoZSBvdGhlciB0aHJlZSBsaWJyYXJ5IHByb2plY3RzIAotKCdsaWJhZ2VudCcsIGxpYmhlbHBlcnMnIGFuZCBlaXRoZXIgJ25ldHNubXBtaWJzJyBvciAnbmV0c25tcG1pYnNzZGsnIAotZGVwZW5kaW5nIG9uIHdoaWNoIHdvcmtzcGFjZSBpcyBiZWluZyB1c2VkKSB0b2dldGhlciB3aXRoIHRoZSBtYWluIGFnZW50IAotcHJvamVjdCAoZWl0aGVyICdzbm1wZCcgb3IgJ3NubXBkc2RrJykuCitUaGUgYWdlbnQgcmVxdWlyZXMgdGhlIGNvcmUgbGlicmFyeSBwbHVzIHRoZSBvdGhlciB0d28gbGlicmFyeSBwcm9qZWN0cworKCdsaWJhZ2VudCcgYW5kICduZXRzbm1wbWlicycpIHRvZ2V0aGVyIHdpdGggdGhlIG1haW4gYWdlbnQgcHJvamVjdCAoJ3NubXBkJykuCiAKIFRoZSBmaW5hbCBhcHBsaWNhdGlvbiBwcm9qZWN0IGlzIHRoZSB0cmFwIGhhbmRsZXIgJ3NubXB0cmFwZCcuICBUaGlzIGFsc28KLXJlcXVpcmVzIHRoZSBhZ2VudCBsaWJyYXJpZXMgKCdsaWJhZ2VudCcsICdsaWJoZWxwZXJzJyBhbmQgJ25ldHNubXBtaWJzJykKLWFzIHdlbGwgYXMgdGhlIGNvcmUgZGV2ZWxvcG1lbnQgbGlicmFyeS4KK3JlcXVpcmVzIHRoZSBhZ2VudCBsaWJyYXJpZXMgKCdsaWJhZ2VudCcgYW5kICduZXRzbm1wbWlicycpIGFzIHdlbGwgYXMgdGhlCitjb3JlIGRldmVsb3BtZW50IGxpYnJhcnkuCiAKLVRoZXJlIGlzIGEgRGVidWcgdmVyc2lvbiBhbmQgUmVsZWFzZSB2ZXJzaW9uIGZvciBlYWNoIHN1YnByb2plY3QuCi1UaGlzIGlzIHNvIHRoZSBEZWJ1ZyBhbmQgUmVsZWFzZSB2ZXJzaW9ucyBvZiBhbiBhcHBsaWNhdGlvbiBjYW4gYmUgYnVpbHQgYW5kIAotdGVzdGVkIHNlcGFyYXRlbHkuCitUaGVyZSBpcyBhIERlYnVnIHZlcnNpb24gYW5kIFJlbGVhc2UgdmVyc2lvbiBmb3IgZWFjaCBzdWJwcm9qZWN0LiAgVGhpcyBpcyBzbwordGhlIERlYnVnIGFuZCBSZWxlYXNlIHZlcnNpb25zIG9mIGFuIGFwcGxpY2F0aW9uIGNhbiBiZSBidWlsdCBhbmQgdGVzdGVkCitzZXBhcmF0ZWx5LgogCi1Cb3RoIFZDKysgNi4wIGFuZCA3LjEgaGF2ZSBiZWVuIHRlc3RlZC4gIEJ1aWxkaW5nIHdpdGggZWFybGllciBNaWNyb3NvZnQKLWNvbXBpbGVyIHZlcnNpb25zIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCitWQysrIDYuMCwgNy4xLCA4LjAgKDIwMDUpLCA5LjAgKDIwMDgpIGFuZCAxMC4wICgyMDEwKSBoYXZlIGJlZW4gdGVzdGVkLgorQnVpbGRpbmcgd2l0aCBlYXJsaWVyIE1pY3Jvc29mdCBjb21waWxlciB2ZXJzaW9ucyBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgogCi1Ob3RlOiAgQ29tcGlsaW5nIE5ldC1TTk1QIHVzaW5nIE1TVkMgMjAwMyAuTkVUIChNU1ZDIDcuMSkgd2lsbCBhZGQgYSAKLSAgICAgICBkZXBlbmRlbmN5IG9mIE1TVkNSNzEuRExMIGZvciBORVRTTk1QLkRMTCBhbmQgYWxsIGFwcGxpY2F0aW9ucy4KLSAgICAgICBTZWFyY2ggbXNkbi5taWNyb3NvZnQuY29tIGZvciBtc3ZjcjcxLmRsbCBmb3IgbW9yZSBpbmZvcm1hdGlvbgotICAgICAgIG9uIGRpc3RyaWJ1dGluZyBhcHBsaWNhdGlvbnMgY29tcGlsZWQgd2l0aCBNU1ZDIDIwMDMgLk5ldC4KK05vdGU6IGlmIHlvdSB3YW50IHRvIGRpc3RyaWJ1dGUgdGhlIGdlbmVyYXRlZCBleGVjdXRhYmxlLCB5b3Ugd2lsbCBhbHNvIG5lZWQKK3RvIGRpc3RyaWJ1dGUgdGhlIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIFJlZGlzdHJpYnV0YWJsZSBQYWNrYWdlLiBDaGVjayB0aGUKK0VVTEEgaW5jbHVkZWQgd2l0aCB0aGF0IHBhY2thZ2UgYmVmb3JlIHJlZGlzdHJpYnV0aW5nIGl0LgogCiBPcGVuU1NMIGlzIHJlcXVpcmVkIHRvIHN1cHBvcnQgdGhlIGVuY3J5cHRpb24gY2FwYWJpbGl0aWVzIGluIFNOTVB2MywKIG9yIFNIQSBhdXRoZW50aWNhdGlvbi4KIAogU2luY2UgdGhlIE1TVkMgYnVpbGQgZW52aXJvbm1lbnQgZG9lcyBub3QgbmF0aXZlbHkgdXNlICJjb25maWd1cmUiIG5vciAibWFrZSIKIHRvIGdlbmVyYXRlIHRoZSB2YXJpb3VzIHBhdGhuYW1lcyB0aGF0IHRoZSBwcm9ncmFtcyByZXF1aXJlLCB0aGUgaGVhZGVyIGZpbGVzIAotbmVlZCB0byBiZSBtYW51YWxseSBtb2RpZmllZCB3aGVuIHVzaW5nIHRoZSBncmFwaGljYWwgYnVpbGQgc3lzdGVtLCBhbmQgYW4gCi1pbnN0YWxsIHNjcmlwdCBpcyBwcm92aWRlZC4gIFdoZW4gdXNpbmcgdGhlIFBlcmwgQ29uZmlndXJlIC8gbm1ha2Ugc3lzdGVtLCAKLXRoZSBoZWFkZXIgZmlsZXMgYXJlIGF1dG9tYXRpY2FsbHkgbW9kaWZpZWQgYW5kIHJlcXVpcmUgbm8gbWFudWFsIGVkaXRpbmcuCituZWVkIHRvIGJlIG1hbnVhbGx5IG1vZGlmaWVkIHdoZW4gdXNpbmcgdGhlIElERSwgYW5kIGFuIGluc3RhbGwgc2NyaXB0IGlzCitwcm92aWRlZC4gIFdoZW4gdXNpbmcgdGhlIFBlcmwgQ29uZmlndXJlIC8gbm1ha2Ugc3lzdGVtLCB0aGUgaGVhZGVyIGZpbGVzIGFyZQorYXV0b21hdGljYWxseSBtb2RpZmllZCBhbmQgcmVxdWlyZSBubyBtYW51YWwgZWRpdGluZy4KIAogVGhlIHByb2plY3RzIGFyZSBhcnJhbmdlZCBzbyB0aGF0IEFMTCBvZiB0aGUgdXNhYmxlIHByb2R1Y3RzLCB0aGUgLmV4ZSBmaWxlcywKIGFyZSB3cml0dGVuIHRvIHRoZSB3aW4zMlxiaW4gZGlyZWN0b3J5LiAgVGhlIHdpbjMyXGxpYiBkaXJlY3RvcnkgaXMgdXNlZCBvbmx5IApAQCAtNTU1LDEyICs1MzcsMjIgQEAKIAogMS4gIE9wZW4gYSBjb21tYW5kIHByb21wdAogCi0yLiAgSW5pdGlhbGl6ZSB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZCBlbnZpcm9ubWVudCBieSBydW5uaW5nIFZDVkFSUzMyLmJhdAorMi4gIFdoZW4gYnVpbGRpbmcgd2l0aCBPcGVuU1NMLCBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcyBJTkNMVURFIGFuZCBMSUIKKyAgICBzdWNoIHRoYXQgdGhlc2UgcG9pbnQgYXQgdGhlIHByb3BlciBPcGVuU1NMIGRpcmVjdG9yaWVzLiBBbiBleGFtcGxlOgorCisgICAgc2V0IElOQ0xVREU9QzpcT3BlblNTTC1XaW4zMlxpbmNsdWRlCisgICAgc2V0IExJQj1DOlxPcGVuU1NMLVdpbjMyXGxpYlxWQ1xzdGF0aWMKKworMy4gIEluaXRpYWxpemUgdGhlIFZpc3VhbCBTdHVkaW8gYnVpbGQgZW52aXJvbm1lbnQgYnkgcnVubmluZyB2Y3ZhcnNhbGwuYmF0CiAgICAgd2hpY2ggY2FuIGJlIGZvdW5kIGluIHRoZSBiaW4gZm9sZGVyIG9mIHlvdXIgVmlzdWFsIFN0dWRpbyBpbnN0YWxsIGZvbGRlci4KKyAgICBJZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSA2NC1iaXQgYmluYXJpZXMgaW5zdGVhZCBvZiAzMi1iaXQgYmluYXJpZXMsIHJ1bgorICAgIHZjdmFyc2FsbC5iYXQgd2l0aCB0aGUgYW1kNjQgYXJndW1lbnQuIFNlZSBhbHNvICJIb3cgdG86IEVuYWJsZSBhIDY0LUJpdAorICAgIFZpc3VhbCBDKysgVG9vbHNldCBhdCB0aGUgQ29tbWFuZCBMaW5lIiBmb3IgbW9yZSBpbmZvcm1hdGlvbgorICAgIChodHRwOi8vbXNkbi5taWNyb3NvZnQuY29tL2VuLXVzL2xpYnJhcnkveDRkMmMwOXMlMjh2PXZzLjgwJTI5LmFzcHgpLgogCi0zLiAgUnVuIHdpbjMyXGJ1aWxkLmJhdAorNC4gIFJ1biB3aW4zMlxidWlsZC5iYXQKIAotNC4gIFRoZSBmb2xsb3dpbmcgc2NyZWVuIHdpbGwgYXBwZWFyOgorNS4gIFRoZSBmb2xsb3dpbmcgc2NyZWVuIHdpbGwgYXBwZWFyOgogCiAgICAgTmV0LVNOTVAgYnVpbGQgYW5kIGluc3RhbGwgb3B0aW9ucwogICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTU4OSw3ICs1ODEsNyBAQAogCiAgICAgU2VsZWN0IG9wdGlvbiB0byBzZXQgLyB0b2dnbGU6ICAKIAotNS4gIFRvZ2dsZSB0aGUgb3B0aW9ucyBvbiBhbmQgb2ZmIGFzIGRlc2lyZWQgYnkgdHlwaW5nIHRoZSBsaW5lIG51bWJlciAKKzYuICBUb2dnbGUgdGhlIG9wdGlvbnMgb24gYW5kIG9mZiBhcyBkZXNpcmVkIGJ5IHR5cGluZyB0aGUgbGluZSBudW1iZXIgCiAgICAgZm9sbG93ZWQgYnkgPGVudGVyPi4gIAogCiAgICAgVG8gY29tcGlsZSB3aXRoIE9wZW5TU0wsIHRoZSBPcGVuU1NMIGxpYnJhcnkgYW5kIGhlYWRlciBmaWxlcyBtdXN0IApAQCAtNTk5LDcgKzU5MSw3IEBACiAgICAgVG8gY29tcGlsZSB3aXRoIHRoZSBQbGF0Zm9ybSBTREssIHRoZSBQbGF0Zm9ybSBTREsgbXVzdCBhbHJlYWR5IGJlIAogICAgIGluc3RhbGxlZC4gIFNlZSB0aGUgc2VjdGlvbiAnSW5zdGFsbGluZyBQbGF0Zm9ybSBTREsnIGZvciBkZXRhaWxzLgogCi0gICAgVG8gdXNlIHRoZSBJUHY2IHRyYW5zcG9ydHMsIHlvdSBtdXN0IGJlIHVzaW5nIFdpbmRvd3MgOTggb3IgbGF0ZXIuCisgICAgVG8gdXNlIHRoZSBJUHY2IHRyYW5zcG9ydHMsIFdpbmRvd3MgOTggb3IgbGF0ZXIgaXMgcmVxdWlyZWQuCiAKICAgICBTZWUgdGhlIHNlY3Rpb24gJ1J1bm5pbmcgTmV0LVNOTVAgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIE1pY3Jvc29mdCAKICAgICBTTk1QIHNlcnZpY2UnIGZvciBpbXBvcnRhbnQgaW5mb3JtYXRpb24gb24gdXNpbmcgdGhlIHdpbkV4dERMTCBhZ2VudC4KQEAgLTYwOSw3ICs2MDEsNyBAQAogCiAgICAgV2hlbiB5b3UgYXJlIHJlYWR5IHRvIGJ1aWxkLCB0eXBlIGYgPGVudGVyPgogCi02LiAgQnVpbGRpbmcgd2lsbCBiZWdpbi4gIEZvbGxvd2luZyBpcyBhIHNhbXBsZSBzY3JlZW4gc2hvdCBvZiBhIHF1aWV0IGJ1aWxkOgorNy4gIEJ1aWxkaW5nIHdpbGwgYmVnaW4uICBGb2xsb3dpbmcgaXMgYSBzYW1wbGUgc2NyZWVuIHNob3Qgb2YgYSBxdWlldCBidWlsZDoKIAogICAgIEJ1aWxkaW5nLi4uCiAgICAgCkBAIC02MzEsNyArNjIzLDcgQEAKICAgICAKICAgICBEb25lIQogCi03LiAgSWYgdGhlIGZvbGRlciB0aGF0IE5ldC1TTk1QIHdhcyBpbnN0YWxsZWQgdG8gaXMgZXZlciBjaGFuZ2VkLCBtb2RpZnkgdGhlIAorOC4gIElmIHRoZSBmb2xkZXIgdGhhdCBOZXQtU05NUCB3YXMgaW5zdGFsbGVkIHRvIGlzIGV2ZXIgY2hhbmdlZCwgbW9kaWZ5IHRoZSAKICAgICBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHJlZ2lzdHJ5IGtleXMgYXMgZXhwbGFpbmVkIGluIHRoZSAKICAgICAnQ29uZmlndXJhdGlvbl9PdmVydmlldy5odG1sJyBmaWxlIGxvY2F0ZWQgaW4gd2luMzIvZGlzdC9odG1saGVscC4KIApAQCAtNzE1LDE5ICs3MDcsMTkgQEAKICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogCi1UaGUgd2luMzJzZGsuZHN3IHdvcmtzcGFjZSB3aWxsIGJ1aWxkIHRoZSBhZ2VudCB0aGF0IHByb3ZpZGVzIG1pYi1JSSBvYmplY3RzCi1mb3IgbmV0d29yayBpbnRlcmZhY2UgbGF5ZXJzLCBhbmQgdGhlIElQLCBJQ01QLCBUQ1AgYW5kIFVEUCB0YWJsZXMuICBUaGlzCi13b3Jrc3BhY2UgcmVxdWlyZXMgdGhlIFBsYXRmb3JtIFNESyB0byBiZSBpbnN0YWxsZWQuICBVc2UgdGhlIHdpbjMyLmRzdyAKLXdvcmtzcGFjZSBpZiB5b3UgZG9uJ3QgaGF2ZSBvciBkb24ndCBuZWVkIHRoZXNlIGZlYXR1cmVzLiAgTm90ZTogIE90aGVyIAotZmVhdHVyZXMgbWF5IGJlIGRpc2FibGVkIGlmIHRoZSBQbGF0Zm9ybSBTREsgaXMgbm90IHVzZWQuICBTZWUgdGhlIHNlY3Rpb24KLSdJbnN0YWxsaW5nIFBsYXRmb3JtIFNESycgZm9yIG1vcmUgaW5mb3JtYXRpb24uCitUaGUgd2luMzIuZHN3IGFuZCB3aW4zMmRsbC5kc3cgd29ya3NwYWNlcyBhbGxvdyB0byBidWlsZCB0aGUgYWdlbnQgYW5kIHRoZQorYXBwbGljYXRpb25zLiBQcm9jZWVkIGFzIGZvbGxvd3M6CiAKLTEuIElmIFNOTVB2MyBlbmNyeXB0aW9uIGNhcGFiaWxpdGllcyBvciBTSEEgYXV0aGVudGljYXRpb24gaXMgcmVxdWlyZWQsCisxLiBVcGRhdGUgdGhlIHZlcnNpb24gc3RhbXAgaW4gd2luMzJcbmV0LXNubXBcbmV0LXNubXAtY29uZmlnLmguICBUaGUgY3VycmVudAorICAgdmVyc2lvbiBjYW4gYmUgZm91bmQgaW4gdGhlIFVuaXggY29uZmlndXJlIHNjcmlwdCAodG9wIGxldmVsIGZvbGRlcikgYnkgCisgICBsb29raW5nIGZvciB0aGUgUEFDS0FHRV9WRVJTSU9OIHZhcmlhYmxlLgorCisyLiBJZiBTTk1QdjMgZW5jcnlwdGlvbiBjYXBhYmlsaXRpZXMgb3IgU0hBIGF1dGhlbnRpY2F0aW9uIGlzIHJlcXVpcmVkLAogICAgaW5zdGFsbCB0aGUgT3BlblNTTCBETEwgYW5kIGxpYnJhcnkgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gCiAgICAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyB3aXRoIE9wZW5TU0wiIGFuZCB0aGVuIGNvbnRpbnVlIHdpdGggCiAgICBzdGVwIDIuCiAKLTIuIFRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBwYXRoIGlzIGM6XHVzci4gIFRoaXMgZm9sZGVyIHdpbGwgY29udGFpbiBhbGwKKzMuIFRoZSBkZWZhdWx0IGluc3RhbGxhdGlvbiBwYXRoIGlzIGM6XHVzci4gIFRoaXMgZm9sZGVyIHdpbGwgY29udGFpbiBhbGwKICAgIHRoZSBiaW5hcmllcywgTUlCIGZpbGVzLCBjb25maWd1cmF0aW9uIGZpbGVzIGV0Yy4gIFRvIGNoYW5nZSB0aGUgbG9jYXRpb24sCiAgICB0aGUgd2luMzJcbmV0LXNubXBcbmV0LXNubXAtY29uZmlnLmggZmlsZSBuZWVkcyB0byBiZSBtb2RpZmllZCBieSBjaGFuZ2luZwogICAgdGhlIElOU1RBTExfQkFTRSB2YXJpYWJsZS4gCkBAIC03MzksMTE4ICs3MzEsOCBAQAogCiAgICAgIEZvciBleGFtcGxlOiAjZGVmaW5lIElOU1RBTExfQkFTRSAiYzovdXNyIi4gIAogCi0zLiBJZiB5b3UgYXJlIHVzaW5nIHdpbjMyc2RrLCB0aGUgUGxhdGZvcm0gU0RLIG11c3QgYmUgZW5hYmxlZC4gIEVkaXQgdGhlIAotICAgdGhlIHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgYW5kICpjaGFuZ2UqOgotCi0gICAgICAgIC8qICN1bmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAqLwotCi0gICB0bzoKLQotICAgICAgICAjZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIDEKLQotNC4gQnVpbGQgdGhlIGFwcGxpY2F0aW9ucwotCi0gICBTdGF0aWMgYnVpbGQgKGRvZXMgbm90IHVzZSBOZXRTTk1QLkRMTCkKLSAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0gICBNUyBWQysrIDYuMDoKLSAgIC0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LgotICAgYi4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgIAotICAgYy4gU2V0IFJlbGVhc2UgYW5kL29yIERlYnVnIGluICdQcm9qZWN0IGNvbmZpZ3VyYXRpb25zJyB0byBzdWl0LgotICAgZC4gQ2xpY2sgIlJlQnVpbGQgQWxsIi4KLSAgIGUuIFdoZW4gYnVpbGRpbmcgaXMgZG9uZSwgVmlldyB0aGUgT3V0cHV0IHdpbmRvdywgY2xpcCBhbmQKLSAgICAgIHNhdmUgdG8gYSB0ZXh0IGZpbGUgaWYgdGhlcmUgaXMgc29tZSBpbmZvcm1hdGlvbiB0byBzaGFyZS4KLSAgIGYuIENsaWNrICJGaWxlLT5DbG9zZSBXb3Jrc3BhY2UiLgotCi0gICBNUyBWQysrIDcuMCs6Ci0gICAtLS0tLS0tLS0tLS0tCi0gICBhLiAgT3BlbiB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LgotICAgYi4gIENsaWNrICJZZXMgdG8gQWxsIiB0byBjb252ZXJ0IHRoZSB3b3Jrc3BhY2UKLSAgIGMuICBDbGljayAiQnVpbGQtPkNvbmZpZ3VyYXRpb24gTWFuYWdlciIgYW5kIHNlbGVjdCBlaXRoZXIgUmVsZWFzZSBvciBEZWJ1ZyBmb3IgCi0gICAgICAgJ0FjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uJyBhbmQgY2xpY2sgIkNsb3NlIgotICAgZC4gIFJpZ2h0LWNsaWNrIHRoZSAibGliYWdlbnQiIHByb2plY3QsIGFuZCBzZWxlY3QgIlJlYnVpbGQiCi0gICBlLiAgUmlnaHQtY2xpY2sgdGhlICJsaWJoZWxwZXJzIiBwcm9qZWN0LCBhbmQgc2VsZWN0ICJSZWJ1aWxkIgotICAgZi4gIFJpZ2h0LWNsaWNrIHRoZSAibGlibmV0c25tcHRyYXBkIiBwcm9qZWN0LCBhbmQgc2VsZWN0ICJSZWJ1aWxkIgotICAgZy4gIFJpZ2h0LWNsaWNrIHRoZSAic25tcGxpYiIgcHJvamVjdCwgYW5kIHNlbGVjdCAiUmVidWlsZCIKLSAgIGguICBSaWdodC1jbGljayB0aGUgIm5ldHNubXBtaWJzKHNkaykiIHByb2plY3QsIGFuZCBzZWxlY3QgIlJlYnVpbGQiCi0gICBpLiAgQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBqLiAgU2V0IFJlbGVhc2UgYW5kL29yIERlYnVnIGluICdQcm9qZWN0IGNvbmZpZ3VyYXRpb25zJyB0byBzdWl0IG1ha2luZwotICAgICAgIHN1cmUgbGliYWdlbnQsIGxpYmhlbHBlcnMsIGxpYm5ldHNubXB0cmFwZCwgc25tcGxpYiBhbmQgbmV0c25tcG1pYnMgYXJlIAotICAgICAgIE5PVCBzZWxlY3RlZC4KLSAgIGsuICBDbGljayAiUmVidWlsZCIuCi0gICBsLiAgV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAotICAgICAgIHNhdmUgdG8gYSB0ZXh0IGZpbGUgaWYgdGhlcmUgaXMgc29tZSBpbmZvcm1hdGlvbiB0byBzaGFyZS4KLSAgIG0uICBDbGljayAiRmlsZS0+Q2xvc2UgU29sdXRpb24iLgotCi0gICBEeW5hbWljIGJ1aWxkICh1c2VzIE5ldFNOTVAuRExMKQotICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotICAgQ29tcGxldGUgdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gV29ya3NwYWNlIC0gQnVpbGRpbmcgdGhlIERMTCcuCi0gICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBOZXQtU05NUCBsaWJyYXJ5IERMTCB3aGljaCBpcyBuZWVkZWQgYnkgdGhlIAotICAgYXBwbGljYXRpb25zIGFuZCB3aWxsIGVuYWJsZSBETEwgc3VwcG9ydCBpbiBuZXQtc25tcC1jb25maWcuaC4KLQotICAgTVMgVkMrKyA2LjA6Ci0gICAtLS0tLS0tLS0tLS0KLSAgIGEuIE9wZW4gd2luMzIuZHN3IG9yIHdpbjMyc2RrLmRzdy4KLSAgIGIuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iICAKLSAgIGMuIFNldCBSZWxlYXNlIGFuZC9vciBEZWJ1ZyBpbiAnUHJvamVjdCBjb25maWd1cmF0aW9ucycgdG8gc3VpdCBmb3IgdGhlIAotICAgICAgYXBwbGljYXRpb25zLiAgTWFrZSBzdXJlIHRoZSBmb2xsb3dpbmcgYXJlIE5PVCBzZWxlY3RlZDoKLQotICAgICAgbGliYWdlbnQKLSAgICAgIGxpYmhlbHBlcnMKLSAgICAgIGxpYnNubXAKLSAgICAgIG5ldHNubXBtaWIoc2RrKQotICAgICAgbGlibmV0c25tcHRyYXBkCi0KLSAgIGQuIENsaWNrICJSZUJ1aWxkIEFsbCIuCi0gICBlLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBmLiBDbGljayAiRmlsZS0+Q2xvc2UgV29ya3NwYWNlIi4KLQotICAgTVMgVkMrKyA3LjArOgotICAgLS0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiB3aW4zMi5kc3cgb3Igd2luMzJzZGsuZHN3LgotICAgYi4gQ2xpY2sgIlllcyB0byBBbGwiIHRvIGNvbnZlcnQgdGhlIHdvcmtzcGFjZQotICAgYy4gQ2xpY2sgIkJ1aWxkLT5Db25maWd1cmF0aW9uIE1hbmFnZXIiIGFuZCBzZWxlY3QgZWl0aGVyIFJlbGVhc2Ugb3IgRGVidWcgZm9yIAotICAgICAgJ0FjdGl2ZSBTb2x1dGlvbiBDb25maWd1cmF0aW9uJyBhbmQgY2xpY2sgIkNsb3NlIgotICAgZC4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBlLiBTZXQgUmVsZWFzZSBhbmQvb3IgRGVidWcgaW4gJ1Byb2plY3QgY29uZmlndXJhdGlvbnMnIHRvIHN1aXQgZm9yIHRoZSAKLSAgICAgIGFwcGxpY2F0aW9ucy4gIE1ha2Ugc3VyZSB0aGUgZm9sbG93aW5nIGFyZSBOT1Qgc2VsZWN0ZWQ6Ci0KLSAgICAgIGxpYmFnZW50Ci0gICAgICBsaWJoZWxwZXJzCi0gICAgICBsaWJzbm1wCi0gICAgICBuZXRzbm1wbWliKHNkaykKLSAgICAgIGxpYm5ldHNubXB0cmFwZAotCi0gICBmLiBDbGljayAiUmVidWlsZCIuCi0gICBnLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBoLiBDbGljayAiRmlsZS0+Q2xvc2UgU29sdXRpb24iLgotICAKLTUuICBJZiB0aGUgUGVybCBtb2R1bGVzIGFyZSByZXF1aXJlZCwgY29udGludWUgd2l0aCB0aGUgbmV4dCBzZWN0aW9uOgotICAgICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIHRoZSBQZXJsIFNOTVAgbW9kdWxlcycuCi0KLSAgICBPdGhlcndpc2UsIGNvbnRpbnVlIHdpdGggdGhlIHNlY3Rpb246IAotICAgICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCi0KLQotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qCi0qIE1pY3Jvc29mdCBWaXN1YWwgQysrIC0gV29ya3NwYWNlIC0gQnVpbGRpbmcgdGhlIERMTAotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLTEuICBPcHRpb25hbDogTWFrZSBhIGJhY2t1cCBvZiB0aGUgZXhpc3RpbmcgbmV0LXNubXAtY29uZmlnLmggd2hpY2ggY29udGFpbnMgCi0gICAgc2V0dGluZ3MgZm9yIGEgc3RhdGljIGJ1aWxkIG9mIE5ldC1TTk1QOgotCi0gICAgQ29weSB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCB0byAKLSAgICB3aW4zMlxuZXQtc25tcFxzdGF0aWMtY29uZmlnLmguCi0KLTIuICBPcGVuIHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIHVzaW5nIGEgdGV4dCBlZGl0b3IuCi0KLTMuICAqQ2hhbmdlKiB0aGUgZm9sbG93aW5nIGxpbmUgd2hpY2ggaXMgbG9jYXRlZCBuZWFyIHRoZSB0b3Agb2YgdGhlIGZpbGU6Cis0LiAgV2hlbiBidWlsZGluZyBETExzIGluc3RlYWQgb2Ygc3RhdGljIGxpYnJhcmllcywgKmNoYW5nZSogdGhlIGZvbGxvd2luZworICAgIGxpbmUgd2hpY2ggaXMgbG9jYXRlZCBuZWFyIHRoZSB0b3Agb2YgdGhlIGZpbGU6CiAKICAgICAgICAgLyogI3VuZGVmIE5FVFNOTVBfVVNFX0RMTCAqLwogCkBAIC04NTgsMzggKzc0MCwyMiBAQAogCiAgICAgICAgICNkZWZpbmUgTkVUU05NUF9VU0VfRExMIDEKIAotNC4gIE9wdGlvbmFsOiBNYWtlIGEgYmFja3VwIG9mIHRoZSBuZXcgbmV0LXNubXAtY29uZmlnLmggd2hpY2ggY29udGFpbnMgCi0gICAgc2V0dGluZ3MgZm9yIGEgRExMIGJ1aWxkIG9mIE5ldC1TTk1QOgorNS4gQnVpbGQgdGhlIGFnZW50IGFuZCB0aGUgYXBwbGljYXRpb25zCiAKLSAgICBDb3B5IHdpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oIHRvIAotICAgIHdpbjMyXG5ldC1zbm1wXGRsbC1jb25maWcuaC4KLQotNS4gQnVpbGQgdGhlIERMTAotCi0gICBNUyBWQysrIDYuMDoKLSAgIC0tLS0tLS0tLS0tLQotICAgYS4gT3BlbiBsaWJzZGxsLmRzdy4KLSAgIGIuIENsaWNrICJCdWlsZC0+QmF0Y2ggQnVpbGQuLi4iICAKLSAgIGMuIFNldCBSZWxlYXNlIGFuZC9vciBEZWJ1ZyBpbiAnUHJvamVjdCBjb25maWd1cmF0aW9ucycgdG8gc3VpdC4KLSAgIGQuIENsaWNrICJDbGVhbiIuICAqKiBEbyBOT1Qgc2tpcCB0aGlzIHN0ZXAuICoqCi0gICBlLiBDbGljayAiQnVpbGQtPkJhdGNoIEJ1aWxkLi4uIiAgCi0gICBmLiBDbGljayAiUmVCdWlsZCBBbGwiLgotICAgZy4gV2hlbiBidWlsZGluZyBpcyBkb25lLCBWaWV3IHRoZSBPdXRwdXQgd2luZG93LCBjbGlwIGFuZAorICAgYS4gT3BlbiB3aW4zMi5kc3cgKHN0YXRpYyBidWlsZCkgb3Igd2luMzJkbGwuZHN3IChkeW5hbWljIGJ1aWxkKS4KKyAgIGIuIElmIHlvdSB3YW50IHRvIGdlbmVyYXRlIDY0LWJpdCBiaW5hcmllcyBpbnN0ZWFkIG9mIDMyLWJpdCBiaW5hcmllcywKKyAgICAgIHNlbGVjdCAiQnVpbGQvQ29uZmlndXJhdGlvbiBNYW5hZ2VyIiBhbmQgYWRkIHRoZSAieDY0IiBwbGF0Zm9ybS4KKyAgIGMuIFNlbGVjdCAiQnVpbGQvQmF0Y2ggQnVpbGQuLi4iICAKKyAgIGQuIFNlbGVjdCB0aGUgcHJvamVjdHMgYW5kIGNvbmZpZ3VyYXRpb25zIHlvdSB3YW50IHRvIGJ1aWxkLgorICAgZS4gQ2xpY2sgIlJlQnVpbGQgQWxsIi4KKyAgIGYuIFdoZW4gYnVpbGRpbmcgaXMgZG9uZSwgVmlldyB0aGUgT3V0cHV0IHdpbmRvdywgY2xpcCBhbmQKICAgICAgIHNhdmUgdG8gYSB0ZXh0IGZpbGUgaWYgdGhlcmUgaXMgc29tZSBpbmZvcm1hdGlvbiB0byBzaGFyZS4KLSAgIGguIENsaWNrICJGaWxlLT5DbG9zZSBXb3Jrc3BhY2UiLgogCi0gICBNUyBWQysrIDcuMCs6Ci0gICAtLS0tLS0tLS0tLS0tCi0gICBhLiBPcGVuIGxpYnNkbGwuZHN3LgotICAgYi4gQ2xpY2sgIlllcyB0byBBbGwiIHRvIGNvbnZlcnQgdGhlIHdvcmtzcGFjZQotICAgYy4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBkLiBTZXQgUmVsZWFzZSBhbmQvb3IgRGVidWcgaW4gJ1Byb2plY3QgY29uZmlndXJhdGlvbnMnIHRvIHN1aXQuCi0gICBlLiBDbGljayAiQ2xlYW4iLiAgKiogRG8gTk9UIHNraXAgdGhpcyBzdGVwLiAqKgotICAgZi4gQ2xpY2sgIkJ1aWxkLT5CYXRjaCBCdWlsZC4uLiIgCi0gICBnLiBDbGljayAiUmVidWlsZCIuCi0gICBoLiBXaGVuIGJ1aWxkaW5nIGlzIGRvbmUsIFZpZXcgdGhlIE91dHB1dCB3aW5kb3csIGNsaXAgYW5kCi0gICAgICBzYXZlIHRvIGEgdGV4dCBmaWxlIGlmIHRoZXJlIGlzIHNvbWUgaW5mb3JtYXRpb24gdG8gc2hhcmUuCi0gICBpLiBDbGljayAiRmlsZS0+Q2xvc2UgU29sdXRpb24iLgorNi4gIElmIHRoZSBQZXJsIG1vZHVsZXMgYXJlIHJlcXVpcmVkLCBjb250aW51ZSB3aXRoIHRoZSBuZXh0IHNlY3Rpb246CisgICAgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcgdGhlIFBlcmwgU05NUCBtb2R1bGVzJy4KKworICAgIE90aGVyd2lzZSwgY29udGludWUgd2l0aCB0aGUgc2VjdGlvbjogCisgICAgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gSW5zdGFsbGluZycKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTkwMywyMSArNzY5LDE2IEBACiBsb2FkIGl0J3Mgb3duIGNvcHkgb2YgdGhlIE1JQiwgYW5kIHNoYXJpbmcgZGF0YSBiZXR3ZWVuIG1vZHVsZXMgd2lsbAogbm90IGJlIHBvc3NpYmxlLiAgRm9yIGV4YW1wbGUsIHRoZSBjb25mIG1vZHVsZSB0ZXN0cyB3aWxsIGZhaWwuCiAKLTEuICBDb21wbGV0ZSB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZycuICBUaGlzIHdpbGwgYnVpbGQKLSAgICB0aGUgYXBwbGljYXRpb25zLiAgCisxLiAgQ29tcGxldGUgdGhlIHNlY3Rpb24gJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcnIGFuZCBjaG9vc2UgZm9yCisgICAgdGhlIGR5bmFtaWMgYnVpbGQuICBUaGlzIHdpbGwgYnVpbGQgdGhlIGxpYnJhcmllcywgYWdlbnQgYW5kIGFwcGxpY2F0aW9ucy4KIAogICAgIE5vdGU6ICBTTk1QRC5FWEUgYW5kIFNOTVBUUkFQRC5FWEUgYXJlIHJlcXVpcmVkIGZvciBydW5uaW5nIHRoZSB0ZXN0cyAKICAgICAgICAgICAgYWdhaW5zdCB0aGUgU05NUCBQZXJsIG1vZHVsZS4KIAotMi4gIENvbXBsZXRlIHRoZSBzZWN0aW9uICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIFdvcmtzcGFjZSAtIEJ1aWxkaW5nIHRoZSBETEwnLgotICAgIFRoaXMgd2lsbCBjcmVhdGUgdGhlIE5ldC1TTk1QIGxpYnJhcnkgRExMIHdoaWNoIGlzIG5lZWRlZCBmb3IgdGhlIFBlcmwgCi0gICAgbW9kdWxlcy4gIE5vdGU6ICBUaGlzIHN0ZXAgY2FuIGJlIHNraXBwZWQgaWYgdGhlIERMTCB3YXMgYWxyZWFkeSBjcmVhdGVkCi0gICAgaW4gc3RlcCAxLgotCi0zLiAgSW5zdGFsbCBOZXQtU05NUCBhcyBkZXNjcmliZWQgaW4gdGhlICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCisyLiAgSW5zdGFsbCBOZXQtU05NUCBhcyBkZXNjcmliZWQgaW4gdGhlICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEluc3RhbGxpbmcnCiAgICAgc2VjdGlvbiB0byBpbnN0YWxsIHRoZSBhcHBsaWNhdGlvbnMsIHRoZSBETEwgYW5kIHRoZSAubGliIGZpbGVzLgogCi00LiAgQ29udGludWUgd2l0aCB0aGUgV2luMzIgc2VjdGlvbiBvZiB0aGUgUGVybCBSRUFETUUgZmlsZSBsb2NhdGVkIGluIAorMy4gIENvbnRpbnVlIHdpdGggdGhlIFdpbjMyIHNlY3Rpb24gb2YgdGhlIFBlcmwgUkVBRE1FIGZpbGUgbG9jYXRlZCBpbiAKICAgICBwZXJsXFNOTVBcUkVBRE1FLgogCiAKQEAgLTEwMzgsMjYgKzg5OSw5IEBACiAJZnRwOi8vZnRwLm9wZW5zc2wub3JnL3NvdXJjZS8KIAogCi0gMy4gT25jZSB0aGUgT3BlblNTTCBsaWJyYXJpZXMgYXJlIGJ1aWx0LCB5b3UgbXVzdCBjb3B5IHRoZW0gdG8gdGhlIHRoZSBNU1ZDIAotICAgIGRpcmVjdG9yeToKKyAzLiBPbmNlIHRoZSBPcGVuU1NMIGxpYnJhcmllcyBhcmUgYnVpbHQsIGNvcHkgdGhlIGZvbGRlciBpbmMzMlxvcGVuc3NsIHRvCisgICAgQzpcT3BlblNTTFxJbmNsdWRlXG9wZW5zc2wgYW5kIHRoZSBmb2xkZXIgb3V0MzJkbGwgdG8gQzpcT3BlblNTTFxMaWJcVkMuCiAKLSAgICBhLiAgQ29weSBmb2xkZXIgaW5jMzJcb3BlbnNzbCB0byB0aGUgaW5jbHVkZSBmb2xkZXIgb2YgTVNWQysrCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXAotICAgICAgICAgICAgICAgICAgVmM3XGluY2x1ZGVcb3BlbnNzbFwqLmgiCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXAotICAgICAgICAgICAgICAgICAgVkM5OFxpbmNsdWRlXG9wZW5zc2xcKi5oIgotCi0gICAgYi4gIENvcHkgZmlsZSBvdXQzMmRsbFxsaWJlYXkzMi5saWIgdG8gdGhlIGxpYiBmb2xkZXIgb2YgTVNWQysrCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXAotICAgICAgICAgICAgICAgICAgVmM3XGxpYlxsaWJlYXkzMi5saWIiCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXAotICAgICAgICAgICAgICAgICAgVkM5OFxsaWJcbGliZWF5MzIubGliIgotCi0gICAgYy4gIENvcHkgZmlsZSBvdXQzMmRsbFxsaWJlYXkzMi5kbGwgdG8geW91ciAld2luZGlyJVxzeXN0ZW0zMiBmb2xkZXIKLQotICAgICAgICBFeGFtcGxlOiAiQzpcd2lubnRcc3lzdGVtMzJcbGliZWF5MzIuZGxsIgogCiBVc2luZyBhIHByZS1jb21waWxlZCB2ZXJzaW9uCiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CkBAIC0xMDY4LDIzICs5MTIsNiBAQAogCiAgMi4gSW5zdGFsbCB0aGUgcGFja2FnZSB0byBjOlxPcGVuU1NMLgogCi0gMy4gQ29weSB0aGUgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIHRvIHRoZSB0aGUgTVNWQyBkaXJlY3Rvcnk6Ci0KLSAgICBhLiAgQ29weSBmb2xkZXIgYzpcT3BlblNTTFxpbmNsdWRlXG9wZW5zc2wgdG8gdGhlIGluY2x1ZGUgZm9sZGVyIG9mIAotICAgICAgICBNU1ZDKysuCi0KLSAgICAgICAgRXhhbXBsZTogIkM6XFByb2dyYW0gRmlsZXNcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gLk5FVCAyMDAzXAotICAgICAgICAgICAgICAgICAgVmM3XGluY2x1ZGVcb3BlbnNzbFwqLmgiCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvXAotICAgICAgICAgICAgICAgICAgVkM5OFxpbmNsdWRlXG9wZW5zc2xcKi5oIgotCi0gICAgYi4gIENvcHkgZmlsZSBjOlxPcGVuU1NMXGxpYlxWQ1xsaWJlYXkzMi5saWIgdG8gdGhlIGxpYiBmb2xkZXIgb2YgTVNWQysrLgotCi0gICAgICAgIEV4YW1wbGU6ICJDOlxQcm9ncmFtIEZpbGVzXE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIC5ORVQgMjAwM1wKLSAgICAgICAgICAgICAgICAgIFZjN1xsaWJcbGliZWF5MzIubGliIgotICAgICAgICBFeGFtcGxlOiAiQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpb1wKLSAgICAgICAgICAgICAgICAgIFZDOThcbGliXGxpYmVheTMyLmxpYiIKLQogCiBQcm9qZWN0IGNoYW5nZXMKID09PT09PT09PT09PT09PQpAQCAtMTA5MywzOCArOTIwLDEwIEBACiAKIAkjZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMQogCi0gMi4gT3BlbiBWaXN1YWwgU3R1ZGlvLCBhZGQgdGhlIGxpbmsgbGluZSB0byB0aGUgUHJvamVjdCBTZXR0aW5ncwotICAgIGZvciBhbGwgdGhlIGFwcGxpY2F0aW9ucywgYW5kIGVzcGVjaWFsbHkgZm9yIHRoZSBsaWJzbm1wX2RsbCBwcm9qZWN0LAotICAgIGZvciBhcyB5b3Uga25vdywgYSAuRExMIGlzIGFuIGFwcGxpY2F0aW9uLgotICAgIFlvdSBNVVNUIGRvIHRoaXMgZm9yIGxpYnNkbGwuZHN3LCBhbmQgZWl0aGVyIHdpbjMyLmRzdyBvciB3aW4zMnNkay5kc3csCi0gICAgd2hpY2hldmVyIHlvdSB1c2UuCi0KLSAgIE1TIFZDKysgNi4wOgotICAgLS0tLS0tLS0tLS0tCi0gICBhLiAgQ2xpY2sgUHJvamVjdC0+U2V0dGluZ3MuICAKLSAgIGIuICBIaWdobGlnaHQgdGhlIG5hbWVzIG9mIGFsbCBwcm9qZWN0cyBleGNlcHQgbGlic25tcCwgbGliYWdlbnQsIGxpYmhlbHBlcnMsCi0gICAgICAgbGlibmV0c25tcHRyYXBkLCBuZXRzbm1wbWlicywgbmV0c25tcG1pYnNzZGsuCi0gICBjLiAgU2VsZWN0IHRoZSBMaW5rIHNlY3Rpb24uCi0gICBkLiAgQWRkIHRoZSBuZXh0IGxpbmUgdG8gdGhlICdPYmplY3QvTGlicmFyeSBNb2R1bGVzJyBsaXN0IGZvciBEZWJ1ZyBhbmQgCi0gICAgICAgUmVsZWFzZSB2ZXJzaW9uczoKLQotICAgICAgICAgbGliZWF5MzIubGliIAotCi0gICBNUyBWQysrIDcuMCs6Ci0gICAtLS0tLS0tLS0tLS0tCi0gICBhLiAgRm9yIGVhY2ggcHJvamVjdCAoZXhjZXB0IGxpYnNubXAsIGxpYmFnZW50LCBsaWJoZWxwZXJzLCBsaWJuZXRzbm1wdHJhcGQsCi0gICAgICAgbmV0c25tcG1pYnMsIG5ldHNubXBtaWJzc2RrKSwgY2xpY2sgUHJvamVjdC0+UHJvcGVydGllcy4gCi0gICBiLiAgRm9yIENvbmZpZ3VyYXRpb24sIHNlbGVjdCAnUmVsZWFzZScKLSAgIGMuICBDbGljayBMaW5rZXIgYW5kIHRoZW4gSW5wdXQKLSAgIGQuICBBZGQgdG8gdGhlICdBZGRpdGlvbmFsIERlcGVuZGVuY2llcycgc2VjdGlvbjoKLQotICAgICAgICAgbGliZWF5MzIubGliIAotCi0gICBlLiAgRm9yIENvbmZpZ3VyYXRpb24sIHNlbGVjdCAnRGVidWcnCi0gICBmLiAgQ2xpY2sgTGlua2VyIGFuZCB0aGVuIElucHV0Ci0gICBnLiAgQWRkIHRvIHRoZSAnQWRkaXRpb25hbCBEZXBlbmRlbmNpZXMnIHNlY3Rpb246Ci0KLSAgICAgICAgIGxpYmVheTMyLmxpYiAKKyAyLiBPcGVuIFZpc3VhbCBTdHVkaW8sIG9wZW4gdGhlIFRvb2xzIG1lbnUgYW5kIHNlbGVjdCBPcHRpb25zLiBHbyB0bworICAgIFByb2plY3RzIGFuZCBTb2x1dGlvbnMgYW5kIHNlbGVjdCBWQysrIERpcmVjdG9yaWVzLiBBZGQKKyAgICBDOlxPcGVuU1NMXEluY2x1ZGUgdG8gdGhlIGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcyBhbmQKKyAgICBDOlxPcGVuU1NMXExpYlxWQyB0byB0aGUgbGlzdCBvZiBsaWJyYXJ5IGRpcmVjdG9yaWVzLgogCiAgMy4gQ29udGludWUgd2l0aCB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyIKIApAQCAtMTEzNiwxNiArOTM1LDEwIEBACiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAogVGhlIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbiBzdXBwb3J0cyBTTk1QIG92ZXIgSVB2NC1iYXNlZCB0cmFuc3BvcnRzLgotSG93ZXZlciwgV2luZG93cyBYUCBhbmQgV2luZG93cyAyMDAwIGluY2x1ZGUgYW4gSVB2Ni1jYXBhYmxlIHN0YWNrLCB3aGljaAorSG93ZXZlciBXaW5kb3dzIDIwMDAgYW5kIGxhdGVyIGluY2x1ZGUgYW4gSVB2Ni1jYXBhYmxlIHN0YWNrIHdoaWNoCiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIFNOTVAgb3ZlciBJUHY2LiAgVG8gZW5hYmxlIElQdjYsIHRoZSBNaWNyb3NvZnQgUFNESyAKLWlzIHJlcXVpcmVkIGFuZCB0aGUgZm9sbG93aW5nIGNoYW5nZXMgdG8gdGhlIE5ldC1TTk1QIHdpbjMyIFZpc3VhbCBDKysgCi1jb25maWd1cmF0aW9uIGFyZSBuZWVkZWQ6Ci0KLVByb2plY3QgY2hhbmdlcwotPT09PT09PT09PT09PT09Ci0KLSAxLiBFZGl0IHRoZSB3aW4zMlxuZXQtc25tcFxuZXQtc25tcC1jb25maWcuaCBoZWFkZXIgZmlsZS4gIENoYW5nZQotICAgIHRoZSBzaW5nbGUgSU5FVDYgbGluZSBmcm9tOgoraXMgcmVxdWlyZWQgYW5kIE5FVFNOTVBfRU5BQkxFX0lQVjYgaGFzIHRvIGJlIGVuYWJsZWQgaW4KK3dpbjMyXG5ldC1zbm1wXG5ldC1zbm1wLWNvbmZpZy5oLiBDaGFuZ2UgdGhlIGZvbGxvd2luZyBzaW5nbGUgbGluZSBmcm9tOgogCiAgICAgICAgIC8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCiAKQEAgLTExNTMsMjAgKzk0Niw3IEBACiAKICAgICAgICAJI2RlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IDEKIAotIDIuIEVkaXQgdGhlIHdpbjMyXGxpYnNubXBfZGxsXGxpYnNubXAuZGVmIGZpbGUuICBBbGwgdGhlIElQdjYgZnVuY3Rpb25zIHdpbGwKLSAgICBiZSBjb21tZW50ZWQgb3V0IGFuZCB3aWxsIG5lZWQgdG8gYmUgZW5hYmxlZCBieSByZW1vdmluZyAnO0lQdjYnIGZyb20gdGhlCi0gICAgYmVnaW5uaW5nIG9mIGVhY2ggbGluZS4gIAotCi0gICAgRm9yIGV4YW1wbGUsIGNoYW5nZToKLQotCi0gICAgICAgIDtJUHY2ICAgICAgICBuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkKLQotICAgIHRvOgotCi0gICAgICAgICAgICAgICAgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5Ci0KLSAzLiBDb250aW51ZSB3aXRoIHRoZSBzZWN0aW9uICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIgorTmV4dCwgY29udGludWUgd2l0aCB0aGUgc2VjdGlvbiAnTWljcm9zb2Z0IFZpc3VhbCBDKysgLSBCdWlsZGluZyIKIAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTEyNDUsOSArMTAyNSw3IEBACiBmb3IgV2luZG93cyBiYXNlZCBzeXN0ZW1zLiBUaGUgY3lnd2luMS5kbGwgcHJvdmlkZXMgYSBQT1NJWCBlbXVsYXRpb24gbGF5ZXIgCiB0aGF0IHNpbXBsaWZpZXMgcG9ydGluZyBVbml4IC8gTGludXggYXBwbGljYXRpb25zIHRvIFdpbmRvd3MuIFRoZSBDeWd3aW4gZGxscwogYXJlIHJlcXVpcmVkIGlmIGFuIGFwcGxpY2F0aW9uIGlzIHRvIGJlIGRpc3RyaWJ1dGVkLiBUaGUgZGVwZW5kZW5jeSBvbiB0aGUgCi1DeWd3aW4gZGxscyBjYW4gYmUgZWxpbWluYXRlZCB3aXRoIHRoZSAtLW1uby1jeWd3aW4gY29tcGlsZXIgZmxhZywgd2hpY2ggdXNlcwotTWluR1cgdG8gY29tcGlsZSBhIG5hdGl2ZSBXaW5kb3dzIGJpbmFyeSwgYnV0IHRoZSBiZW5lZml0IG9mIHRoZSBQT1NJWCBlbXVsYXRpb24KLWlzIGxvc3QuIFRoZSBDeWd3aW4gdG9vbCBjaGFpbiBhbmQgZG9jdW1lbnRhdGlvbiBjYW4gYmUgZm91bmQgYXQ6CitUaGUgQ3lnd2luIHRvb2wgY2hhaW4gYW5kIGRvY3VtZW50YXRpb24gY2FuIGJlIGZvdW5kIGF0OgogCiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2N5Z3dpbi8KIApAQCAtMTI2OSw0MSArMTA0NywzMyBAQAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAKLUFuIGFsdGVybmF0ZSB3YXkgdG8gYnVpbGQgTmV0LVNOTVAgZm9yIHdpbjMyIGlzIHRvIHVzZSBDeWdudXMncyBjeWd3aW4zMgotZW52aXJvbm1lbnQuICBJbmZvcm1hdGlvbiBvbiB0aGUgQ3lnbnVzIGN5Z3dpbjMyIGVudmlyb25tZW50IGlzIGF2YWlsYWJsZQorQW4gYWx0ZXJuYXRlIHdheSB0byBidWlsZCBhbmQgcnVuIE5ldC1TTk1QIG9uIFdpbjMyIGlzIHRvIHVzZSB0aGUgQ3lnd2luCitlbnZpcm9ubWVudC4gIERldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDeWd3aW4gZW52aXJvbm1lbnQgaXMgYXZhaWxhYmxlCiBvbiB0aGUgd2ViIGF0OiBodHRwOi8vc291cmNlcy5yZWRoYXQuY29tL2N5Z3dpbi8uCiAKIEN5Z3dpbiBhbGxvd3MgeW91IHRvIGNvbXBpbGUgYWxtb3N0IHRoZSBjb21wbGV0ZSBhZ2VudCBhbmQgYXBwbGljYXRpb25zLgotVGhlIGZvbGxvd2luZyBjb25maWd1cmUgb3B0aW9ucyBjcmVhdGVzIGEgd29ya2luZyBzZXQgb2YgcHJvZ3JhbXM6CitBcyBhbiBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyZSBvcHRpb25zIGNyZWF0ZSBhIHdvcmtpbmcgc2V0IG9mCitwcm9ncmFtczoKIAorRU5WX1NFUEFSQVRPUj0iOiIgXAogLi9jb25maWd1cmUgXAogCS0td2l0aC1taWItbW9kdWxlcz0iaG9zdCBhZ2VudHggZGlzbWFuL2V2ZW50LW1pYiBleGFtcGxlcy9leGFtcGxlIiBcCiAJLS13aXRoLW91dC1taWItbW9kdWxlcz1ob3N0L2hyX25ldHdvcmsgXAotICAgICAgICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIFwKIAotSWYgeW91IHdhbnQgdG8gdXNlIFNOTVB2MyBhdXRoIGFuZCBwcml2YWN5IGZlYXR1cmVzLCBhZGQ6Ci0JLS13aXRoLW9wZW5zc2w9Ii91c3IiIFwKK0lmIHlvdSB3YW50IHRvIGRpc2FibGUgU05NUHYzIGF1dGggYW5kIHByaXZhY3kgZmVhdHVyZXMsIGFkZDoKKwktLXdpdGhvdXQtb3BlbnNzbCBcCiAKIElmIHlvdSB3YW50IHRvIHVzZSBJUHY2IHRyYW5zcG9ydHMsIGFkZDoKLQktLWVuYWJsZS1pcHY2IC0td2l0aC10cmFuc3BvcnRzPSJUQ1BJUHY2IFVEUElQdjYiCisJLS1lbmFibGUtaXB2NgogCi1Ob3RlOiAgVGhlIHNvdXJjZSBjb2RlIHNob3VsZCAqbm90KiBiZSBpbiBhIGZvbGRlciB0aGF0IGNvbnRhaW5zIGEgc3BhY2UuICBGb3IKLSAgICAgICBleGFtcGxlLCBjb21waWxpbmcgaW4geW91ciAnTXkgRG9jdW1lbnRzJyBvciB5b3VyIERlc2t0b3AgKHVzdWFsbHkKLSAgICAgICBjOlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXHh4eHhcRGVza3RvcCkgaXMgbm90IHN1cHBvcnRlZC4KLSAgICAgICAgCi1UaGlzIGhhcyBiZWVuIHRlc3RlZCBmb3IgV2luZG93cyA5OCBhbmQgV2luZG93cyBOVCA0LjAuICBJbiBvcmRlciBmb3IKLXRoZSBwcm9jZXNzIHBhcnQgb2YgdGhlIGhvc3QgcmVzb3VyY2VzIE1JQiB0byB3b3JrIHVuZGVyIE5UIHlvdSB3aWxsIG5lZWQKLXRvIGdldCBob2xkIG9mIHRoZSBQU0FQSS5ETEwuIFRoaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBkb3dubG9hZCBzZWN0aW9uCi1vZiB3d3cubWljcm9zb2Z0LmNvbS4gIFRoZSBETEwgaXMgaW5jbHVkZWQgd2l0aCBXaW5kb3dzIDIwMDAgYW5kIFhQLAotYW5kIGlzIGFsc28gcGFydCBvZiB0aGUgVkMrKyBkaXN0cmlidXRpb24uICBUaGUgSVBITFBBUEkgbGlicmFyeSBpcwotcGFydCBvZiB0aGUgIk1pY3Jvc29mdCBQbGF0Zm9ybSBTREsiLCB3aGljaCBpcyBhbHNvIGF2YWlsYWJsZSBmcm9tCi13d3cubWljcm9zb2Z0LmNvbS4gIFNlZSB0aGUgc2VjdGlvbiAiSW5zdGFsbGluZyBQbGF0Zm9ybSBTREsiIGZvciBkZXRhaWxzLgorTm90ZTogdGhlIHNvdXJjZSBjb2RlIHNob3VsZCAqbm90KiBiZSBpbiBhIGZvbGRlciB0aGF0IGNvbnRhaW5zIGEgc3BhY2UuCitGb3IgZXhhbXBsZSwgY29tcGlsaW5nIGluIHlvdXIgJ015IERvY3VtZW50cycgZm9sZGVyIG9yIHlvdXIgRGVza3RvcCBmb2xkZXIKKyh1c3VhbGx5IGM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NceHh4eFxEZXNrdG9wKSBpcyBub3Qgc3VwcG9ydGVkLgogCi1FYXJsaWVyIHJlbGVhc2VzIG9mIEN5Z3dpbiBtYXkgbmVlZCB0byB1c2UgdGhlIGNvbmZpZ3VyZSBmbGFnCi0JLS13aXRoLWxpYnM9Ii1scmVnZXggLWxpYnBobHBhcGkiCi1idXQgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBoYXMgc2luY2UgYmVlbiBpbmNvcnBvcmF0ZWQKLWludG8gdGhlIG1haW4gQ3lnd2luIHBhY2thZ2UsIGFuZCBpdCBpcyBubyBsb25nZXIgbmVjZXNzYXJ5IHRvCi1pbmNsdWRlIGl0IHNlcGFyYXRlbHkuCitBIG5vdGUgZm9yIFdpbmRvd3MgTlQgdXNlcnM6IGluIG9yZGVyIGZvciB0aGUgcHJvY2VzcyBwYXJ0IG9mIHRoZSBob3N0CityZXNvdXJjZXMgTUlCIChocl9zd3J1bikgdG8gd29yayB1bmRlciBXaW5kb3dzIE5UIHlvdSB3aWxsIG5lZWQgdG8gZ2V0IGhvbGQKK29mIFBTQVBJLkRMTC4gVGhpcyBETEwgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBkb3dubG9hZCBzZWN0aW9uIG9mCit3d3cubWljcm9zb2Z0LmNvbSwgYW5kIGlzIGFsc28gaW5jbHVkZWQgaW4gdGhlIFZDKysgZGlzdHJpYnV0aW9uLgogCiBJZiB0aGUgZm9sZGVyIHRoYXQgTmV0LVNOTVAgd2FzIGluc3RhbGxlZCB0byBpcyBldmVyIGNoYW5nZWQsIG1vZGlmeSB0aGUgCiBzeXN0ZW0gZW52aXJvbm1lbnQgdmFyaWFibGVzIG9yIHJlZ2lzdHJ5IGtleXMgYXMgZXhwbGFpbmVkIGluIHRoZSAKQEAgLTEzMjAsMTcgKzEwOTAsMTYgQEAKIE1pbkdXIHRvb2xzIHdpdGggdGhlIE1TeVMgZW52aXJvbm1lbnQuIE1pbkdXLCBNU3lTIGFuZCB0aGUgYXNzb2NpYXRlZAogZG9jdW1lbnRhdGlvbiBjYW4gYmUgZG93bmxvYWRlZCBmcm9tOiBodHRwOi8vd3d3Lm1pbmd3Lm9yZy4KIAotQ29tcGlsaW5nIG5ldC1zbm1wIHdpdGggTWluR1cgcmVxdWlyZXMgR05VIHJlZ2V4LiBBIEdOVSByZWdleCBwYWNrYWdlIHRoYXQKLWJ1aWxkcyB1bmRlciBNaW5HVyB3aXRoIE1TeVMgaXMgYXZhaWxhYmxlIGF0OiAKK0NvbXBpbGluZyBuZXQtc25tcCB3aXRoIE1pbkdXIHJlcXVpcmVzIEdOVSByZWdleCBhbmQgbGliaW50bC4gQmluYXJpZXMgYW5kCitkZXZlbG9wZXIgaGVhZGVyIGZpbGVzIGZvciB0aGVzZSBsaWJyYXJpZXMgYXJlIGF2YWlsYWJsZSBhdDogCiAKLSAgICAgICAgaHR0cDovL3d3dy5ib2Vkb2cuY29tL25ldC1zbm1wL2dudV9yZWdleC9yZWdleC0wLTEyLW1pbmd3LXIyLnRhci5negorICAgICAgICBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL3JlZ2V4Lmh0bQorICAgICAgICBodHRwOi8vZ251d2luMzIuc291cmNlZm9yZ2UubmV0L3BhY2thZ2VzL2xpYmludGwuaHRtCiAKLU5vdGU6ICBUaGUgc291cmNlIGNvZGUgc2hvdWxkICpub3QqIGJlIGluIGEgZm9sZGVyIHRoYXQgY29udGFpbnMgYSBzcGFjZS4gIEZvcgotICAgICAgIGV4YW1wbGUsIGNvbXBpbGluZyBpbiB5b3VyICdNeSBEb2N1bWVudHMnIG9yIHlvdXIgRGVza3RvcCAodXN1YWxseQotICAgICAgIGM6XERvY3VtZW50cyBhbmQgU2V0dGluZ3NceHh4eFxEZXNrdG9wKSBpcyBub3Qgc3VwcG9ydGVkLgotICAgICAgIAotMS4gIEJ1aWxkIGFuZCBpbnN0YWxsIEdOVSByZWdleCBmb2xsb3dpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgCi0gICAgcmVnZXgtMC0xMi1taW5ndy1yMiBSRUFETUUuCitQcm9jZWVkIGFzIGZvbGxvd3MgdG8gYnVpbGQgTmV0LVNOTVA6CisKKzEuICBJbnN0YWxsIEdOVSByZWdleCBhbmQgR05VIGxpYmludGwgYmluYXJpZXMgYW5kIGRldmVsb3BlciBmaWxlcyBpbiB0aGUKKyAgICBNaW5HVyB0cmVlLgogCiAyLiAgSWYgU05NUHYzIGVuY3J5cHRpb24gY2FwYWJpbGl0aWVzIG9yIFNIQSBhdXRoZW50aWNhdGlvbiBpcyByZXF1aXJlZCwKICAgICBpbnN0YWxsIHRoZSBPcGVuU1NMIERMTCBhbmQgbGlicmFyeSBmaWxlIGFzIGRlc2NyaWJlZCBpbiB0aGUgc2VjdGlvbiAKQEAgLTEzNTcsNyArMTEyNiw3IEBACiAKIAkuL2NvbmZpZ3VyZSAtLXByZWZpeD0iJEJBU0VESVIiIFwKIAkJLS13aXRoLW1pYmRpcnM9IiRCQVNFRElSL3NoYXJlL3NubXAvbWlicyIgXAotCS0td2l0aC1taWItbW9kdWxlcz0iYWdlbnR4IGRpc21hbi9ldmVudC1taWIgZXhhbXBsZXMvZXhhbXBsZSIgXAorCS0td2l0aC1taWItbW9kdWxlcz0iYWdlbnR4IGRpc21hbi9ldmVudC1taWIgd2luRXh0RExMIGV4YW1wbGVzL2V4YW1wbGUiXAogICAgICAgICAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCAtLXdpdGhvdXQtcGVybC1tb2R1bGVzIFwKIAogICAgIE5vdGU6IHdoaWxlIHRoZSBOZXQtU05NUCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgaG9zdCByZXNvdXJjZXMgTUlCIGlzIG5vdApkaWZmIC0tZ2l0IGEvVE9ETyBiL1RPRE8KaW5kZXggMjIxMGI2ZS4uNDlkOTEzZSAxMDA2NDQKLS0tIGEvVE9ETworKysgYi9UT0RPCkBAIC0yNCw4ICsyNCw4IEBACiAgIFR1bm5lbAogICBXV1ctTUlCCiAgIEhhcmR3YXJlIEFic3RyYWN0aW9uIExheWVyOgotICAgIEhvc3RSZXMJKGNvbnZlcnQgdG8gdXNlIEhBTCBhbmQgY2xlYW4gdXApCi0gICAgVUNEYXZpcwkoY29udmVydCB0byB1c2UgSEFMIGFuZCB1cGRhdGUgc3RydWN0dXJlcykKKyAgICBIb3N0UmVzCShjb252ZXJ0IHRvIHVzZSBIQUwgYW5kIGNsZWFuIHVwIC0gaW4gcHJvZ3Jlc3MpCisgICAgVUNEYXZpcwkoY29udmVydCB0byB1c2UgSEFMIGFuZCB1cGRhdGUgc3RydWN0dXJlcyAtIGluIHByb2dyZXNzKQogCiBFeHRlbnNpYmlsaXR5OgogICBBZ2VudFgJKHJlYXNvbmFibHkgc3RhYmxlIG5vdykKZGlmZiAtLWdpdCBhL2FjY29uZmlnLmggYi9hY2NvbmZpZy5oCmluZGV4IDBlZDA2YjkuLjEyZjg1YzYgMTAwNjQ0Ci0tLSBhL2FjY29uZmlnLmgKKysrIGIvYWNjb25maWcuaApAQCAtMSw1ICsxLDkgQEAKIC8qIAogICogbmV0LXNubXAgY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIE5PVEU6IERPIE5PVCBFRElUIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYXMgeW91ciBjaGFuZ2VzCisgKiAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuLiBUaGlzIGNvbnRlbnQgaXMgaW4gYWNjb25maWcuaCBhbmQgbWVyZ2VkCisgKiAgICAgICBpbnRvIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYnkgYXV0b2hlYWRlci4KICAqLwogLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwpAQCAtMjMsMjk0ICsyNywxNSBAQAogICovCiAjaWZuZGVmIE5FVFNOTVBfTk9fQVVUT0NPTkZfREVGSU5JVElPTlMKIAotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50MzJfdCAqLwotI3VuZGVmIEhBVkVfSU5UMzJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50MzJfdCAqLwotI3VuZGVmIEhBVkVfVUlOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdV9pbnQzMl90ICovCi0jdW5kZWYgSEFWRV9VX0lOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50NjRfdCAqLwotI3VuZGVmIEhBVkVfSU5UNjRfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50NjRfdCAqLwotI3VuZGVmIEhBVkVfVUlOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdV9pbnQ2NF90ICovCi0jdW5kZWYgSEFWRV9VX0lOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50cHRyX3QgKi8KLSN1bmRlZiBIQVZFX0lOVFBUUl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVpbnRwdHJfdCAqLwotI3VuZGVmIEhBVkVfVUlOVFBUUl9UCi0KLS8qIGdvdCBzb2NrbGVuX3Q/ICovCi0jdW5kZWYgSEFWRV9TT0NLTEVOX1QKLQotLyogZ290IGluX2FkZHJfdD8gKi8KLSN1bmRlZiBIQVZFX0lOX0FERFJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ2V0ZGV2cygpICovCi0jdW5kZWYgSEFWRV9HRVRERVZTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBkZXZzdGF0X2dldGRldnMoKSAqLwotI3VuZGVmIEhBVkVfREVWU1RBVF9HRVRERVZTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSA8bmV0aW5ldC9pbl9wY2IuaD4gKi8KLSN1bmRlZiBIQVZFX05FVElORVRfSU5fUENCX0gKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIDxzeXMvZGlza2xhYmVsLmg+ICovCi0jdW5kZWYgSEFWRV9TWVNfRElTS0xBQkVMX0gKLQotLyogZGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgKHByb2Nlc3NvcikgZGVmaW5lcyBfX0ZVTkNUSU9OX18gZm9yIHlvdSAqLwotI3VuZGVmIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQKLQotLyogb24gYWl4LCBpZiB5b3UgaGF2ZSBwZXJmc3RhdCAqLwotI3VuZGVmIEhBVkVfUEVSRlNUQVQKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGxpYmRiLCBsaWJubSBvciBsaWJycG0sIHJlc3BlY3RpdmVseSAqLwotI3VuZGVmIEhBVkVfTElCREIKLSN1bmRlZiBIQVZFX0xJQk5NCi0jdW5kZWYgSEFWRV9MSUJSUE0KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHBrZ2luZm8gKi8KLSN1bmRlZiBIQVZFX1BLR0lORk8KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldGhvc3RieW5hbWUgKi8KLSN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwZXJsX2V2YWxfcHYoKSBmdW5jdGlvbiAqLwotI3VuZGVmIEhBVkVfUEVSTF9FVkFMX1BWX0xDCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgUGVybF9ldmFsX3B2KCkgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9VQwotCi0vKiBwcmludGluZyBzeXN0ZW0gKi8KLSN1bmRlZiBIQVZFX0xQU1RBVAotI3VuZGVmIExQU1RBVF9QQVRICi0jdW5kZWYgSEFWRV9QUklOVENBUAotLyogVXNlIGRtYWxsb2MgdG8gZG8gbWFsbG9jIGRlYnVnZ2luZz8gKi8KLSN1bmRlZiBIQVZFX0RNQUxMT0NfSAotCi0vKiBsb2NhdGlvbiBvZiBVTklYIGtlcm5lbCAqLwotI2RlZmluZSBLRVJORUxfTE9DICIvdm11bml4IgotCi0vKiBsb2NhdGlvbiBvZiBtb3VudCB0YWJsZSBsaXN0ICovCi0jZGVmaW5lIEVUQ19NTlRUQUIgIi9ldGMvbW50dGFiIgotCi0vKiBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSAob2sgaWYgbm90IGZvdW5kKSAqLwotI3VuZGVmIERNRU1fTE9DCi0KLS8qIENvbW1hbmQgdG8gZ2VuZXJhdGUgcHMgb3V0cHV0LCB0aGUgZmluYWwgY29sdW1uIG11c3QgYmUgdGhlIHByb2Nlc3MKLSAgIG5hbWUgd2l0aE9VVCBhcmd1bWVudHMgKi8KLSNkZWZpbmUgUFNDTUQgIi9iaW4vcHMiCi0KLS8qIFdoZXJlIGlzIHRoZSB1bmFtZSBjb21tYW5kICovCi0jZGVmaW5lIFVOQU1FUFJPRyAiL2Jpbi91bmFtZSIKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgbGludXggYW5kIC9wcm9jL25ldC9kZXYgaGFzIHRoZSBjb21wcmVzc2VkCi0gICBmaWVsZCwgd2hpY2ggZXhpc3RzIGluIGxpbnV4IGtlcm5lbHMgMi4yIGFuZCBncmVhdGVyLiAqLwotI3VuZGVmIFBST0NfTkVUX0RFVl9IQVNfQ09NUFJFU1NFRAotCi0vKiBkZWZpbmUgcnRlbnRyeSB0byBvcnRlbnRyeSBvbiBTWVNWIG1hY2hpbmVzIChhbHBoYXMpICovCi0jdW5kZWYgUlRFTlRSWQotCi0vKiBVc2UgQlNEIDQuNCByb3V0aW5nIHRhYmxlIGVudHJpZXM/ICovCi0jdW5kZWYgUlRFTlRSWV80XzQKLQotLyogRG9lcyBzdHJ1Y3Qgc2lnYWN0aW9uIGhhdmUgYSBzYV9zaWdhY3Rpb24gZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NJR0FDVElPTl9IQVNfU0FfU0lHQUNUSU9OCi0KLS8qIERvZXMgc3RydWN0IHRtIGhhdmUgYSB0bV9nbXRvZmYgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1RNX0hBU19UTV9HTVRPRkZGCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9sZW4gZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9MRU4KLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2ZhbWlseTIgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBoYXZlIGEgc3NfZmFtaWx5IGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBoYXZlIGEgX19zc19mYW1pbHkgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX19fU1NfRkFNSUxZCi0KLS8qIERvZXMgc3RydWN0IGluNl9hZGRyIGhhdmUgYSBzNl91bi5zYTZfbGFkZCBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfSU42X0FERFJfSEFTX1M2X1VOX1NBNl9MQUREUgotCi0vKiBydGVudHJ5IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFJURU5UUllfUlRfTkVYVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VU0UKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfUkVGQ05UCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0gKLQotLyogaWZuZXQgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9TUEVFRAotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSVFEUk9QUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfTlNFQwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTk9QUk9UTwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09CWVRFUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSUJZVEVTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVAotCi0vKiB0Y3BzdGF0LnRjcHNfcmN2bWVtZHJvcCAqLwotI3VuZGVmIFNUUlVDVF9UQ1BTVEFUX0hBU19UQ1BTX1JDVk1FTURST1AKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19ESVNDQVJECi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUQkNBU1QKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19GVUxMU09DSwotCi0vKiBhcnBoZC5hdF9uZXh0ICovCi0jdW5kZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCi0KLS8qIGlmYWRkci5pZmFfbmV4dCAqLwotI3VuZGVmIFNUUlVDVF9JRkFERFJfSEFTX0lGQV9ORVhUCi0KLS8qIGlmbmV0LmlmX210dSAqLwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTVRVCi0KLS8qIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQgKi8KLSN1bmRlZiBTVFJVQ1RfU1dERVZUX0hBU19TV19OQkxLU0VOQUJMRUQKLQotLyogbmxpc3Qubl92YWx1ZSAqLwotI3VuZGVmIFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRQotCi0vKiBubGlzdDY0Lm5fdmFsdWUgKi8KLSN1bmRlZiBTVFJVQ1RfTkxJU1Q2NF9IQVNfTl9WQUxVRQotCi0vKiBpcHN0YXQgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGT1JXQVJECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGUkFHCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0RFTElWRVJFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHRFJPUFBFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHVElNRU9VVAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19MT0NBTE9VVAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1BST1RPCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUk9VVEUKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0RST1BQRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0ZSQUdNRU5UUwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19SRUFTU0VNQkxFRAotCi0vKiB2ZnNzdGF0LmZfZnJzaXplICovCi0jdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCi0KLS8qIHZmc3N0YXQuZl9maWxlcyAqLwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTCi0KLS8qIHN0YXRmcyBpbm9kZSBzdHJ1Y3R1cmUgdGVzdHMqLwotI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMKLSN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZGUkVFCi0jdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GQVZBSUwKLQotLyogZGVzX2tzX3N0cnVjdC53ZWFrX2tleSAqLwotI3VuZGVmIFNUUlVDVF9ERVNfS1NfU1RSVUNUX0hBU19XRUFLX0tFWQotCi0vKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZCAqLwotI3VuZGVmIElGTkVUX05FRURTX0tFUk5FTAotCi0vKiBzeXNjdGwgd29ya3MgdG8gZ2V0IGJvb3R0aW1lLCBldGMuLi4gKi8KLSN1bmRlZiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMCi0KLS8qIGRlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmggKi8KLSN1bmRlZiBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIKLQotLyogRGVmaW5lIGlmIHN0YXRmcyB0YWtlcyAyIGFyZ3MgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzCi0gICB0eXBlIHN0cnVjdCBmc19kYXRhLiBbVWx0cml4XSAqLwotI3VuZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKLQotLyogRGVmaW5lIGlmIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGluIDxuZXRpbmV0L3RjcF90aW1lci5oPgotICAgZGVwZW5kIG9uIHRoZSBpbnRlZ2VyIHZhcmlhYmxlIGBoeicuICBbRnJlZUJTRCA0LnhdICovCi0jdW5kZWYgVENQVFZfTkVFRFNfSFoKLQotLyogTm90LXRvLWJlLWNvbXBpbGVkIG1hY3JvcyBmb3IgdXNlIGJ5IGNvbmZpZ3VyZSBvbmx5ICovCi0jZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpCi0jZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpCi0jZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KQotI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseikKLSNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCkKLSNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCkKLSNkZWZpbmUgY29uZmlnX2Vycm9yKHgpCi0jZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpCi0gIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChtaW5ndzMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjsiCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOycKLSNlbHNlCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjoiCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOicKLSNlbmRpZgotCiAvKiBkZWZpbml0aW9ucyBhZGRlZCBieSBjb25maWd1cmUgb24tdGhlLWZseSAqLwogQFRPUEAKIEBCT1RUT01ACiAKIC8qIGVuZCBvZiBkZWZpbml0aW9ucyBhZGRlZCBieSBjb25maWd1cmUgb24tdGhlLWZseSAqLwogCi0jaWZuZGVmIEhBVkVfU1RSQ0hSCi0jaWZkZWYgSEFWRV9JTkRFWAotIyBkZWZpbmUgc3RyY2hyIGluZGV4Ci0jIGRlZmluZSBzdHJyY2hyIHJpbmRleAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOREVYCi0jaWZkZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBtaW5ndzMyCi0jIGRlZmluZSBpbmRleChhLGIpIHN0cmNocihhLGIpCi0jIGRlZmluZSByaW5kZXgoYSxiKSBzdHJyY2hyKGEsYikKLSNlbHNlCi0jIGRlZmluZSBpbmRleCBzdHJjaHIKLSMgZGVmaW5lIHJpbmRleCBzdHJyY2hyCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1DUFkKLSNpZmRlZiBIQVZFX0JDT1BZCi0jIGRlZmluZSBtZW1jcHkoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1tb3ZlKGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtY21wIGJjbXAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1NT1ZFCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIG1lbW1vdmUgbWVtY3B5Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfQkNPUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgYmNvcHkocywgZCwgbikgbWVtY3B5ICgoZCksIChzKSwgKG4pKQotIyBkZWZpbmUgYnplcm8ocCxuKSBtZW1zZXQoKHApLCgwKSwobikpCi0jIGRlZmluZSBiY21wIG1lbWNtcAotI2VuZGlmCi0jZW5kaWYKLQogLyogSWYgeW91IGhhdmUgb3BlbnNzbCAwLjkuNyBvciBhYm92ZSwgeW91IGxpa2VseSBoYXZlIEFFUyBzdXBwb3J0LiAqLwogI3VuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0FFU19IKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKQorI2lmIChkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9PUEVOU1NMX0FFU19IKSAmJiBkZWZpbmVkKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUKSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiAjZGVmaW5lIEhBVkVfQUVTIDEKICNlbmRpZgogCkBAIC0zNjQsMjcgKzg5LDYgQEAKIC8qIGRlZmF1bHQgbGlzdCBvZiBtaWJzIHRvIGxvYWQgKi8KICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQlMgIklQLU1JQjpJRi1NSUI6VENQLU1JQjpVRFAtTUlCOlNOTVB2Mi1NSUI6UkZDMTIxMy1NSUIiCiAKLS8qIGRlZmF1bHQgbG9jYXRpb24gdG8gbG9vayBmb3IgbWlicyB0byBsb2FkIHVzaW5nIHRoZSBhYm92ZSB0b2tlbnMKLSAgIGFuZC9vciB0aG9zZSBpbiB0aGUgTUlCUyBlbnZyaW9ubWVudCB2YXJpYWJsZSovCi0jdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMKLQotLyogZGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZCwgc3BlY2lmaWVkIGJ5IHBhdGguICovCi0jdW5kZWYgTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTCi0KLS8qIHNob3VsZCB3ZSBjb21waWxlIHRvIHVzZSBzcGVjaWFsIG9wYXF1ZSB0eXBlczogZmxvYXQsIGRvdWJsZSwKLSAgIGNvdW50ZXI2NCwgaTY0LCB1aTY0LCB1bmlvbj8gKi8KLSN1bmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKLQotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgYm90aCBhdXRoZW50aWNhdGlvbiBhbmQKLSAgIHByaXZhY3kgc3VwcG9ydC4gKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgotCi0vKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgTUQ1IGNvZGUgLi4uKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIGNvZGVTMTEgbGlicmFyeSAuLi4qLwotI3VuZGVmIE5FVFNOTVBfVVNFX1BLQ1MxMQotCiAvKiBkZWJ1Z2dpbmcgc3R1ZmYgKi8KIC8qIGlmIGRlZmluZWQsIHdlIG9wdGltaXplIHRoZSBjb2RlIHRvIGV4Y2x1ZGUgYWxsIGRlYnVnZ2luZyBjYWxscy4gKi8KICN1bmRlZiBORVRTTk1QX05PX0RFQlVHR0lORwpAQCAtNDAwLDkgKzEwNCw2IEBACiAgICBsaW5lczogUEVSU0lTVEVOVF9ESVJFQ1RPUlkvTkFNRS5wZXJzaXN0ZW50LmNvbmYgKi8KICNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAiL3Zhci9zbm1wIgogCi0vKiBQRVJTSVNURU5UX01BU0s6IHRoZSB1bWFzayBwZXJtaXNzaW9ucyB0byBzZXQgdXAgcGVyc2lzdGVudCBmaWxlcyB3aXRoICovCi0jZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9NQVNLIDA3NwotCiAvKiBBR0VOVF9ESVJFQ1RPUllfTU9ERTogdGhlIG1vZGUgdGhlIGFnZW50cyBzaG91bGQgdXNlIHRvIGNyZWF0ZQogICAgZGlyZWN0b3JpZXMgd2l0aC4gU2luY2UgdGhlIGRhdGEgc3RvcmVkIGhlcmUgaXMgcHJvYmFibHkgc2Vuc2l0aXZlLCBpdAogICAgcHJvYmFibHkgc2hvdWxkIGJlIHJlYWQtb25seSBieSByb290L2FkbWluaXN0cmF0b3IuICovCkBAIC00NDcsMTkgKzE0OCw2IEBACiAvKiBVc2UgbGlid3JhcCB0byBoYW5kbGUgYWxsb3cvZGVueSBob3N0cz8gKi8KICN1bmRlZiBORVRTTk1QX1VTRV9MSUJXUkFQCiAKLS8qIHRlc3RpbmcgY29kZSBzZWN0aW9ucy4gKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgCi0KLS8qIElmIHlvdSBkb24ndCBoYXZlIHJvb3QgYWNjZXNzIGRvbid0IGV4aXQgdXBvbiBrbWVtIGVycm9ycyAqLwotI3VuZGVmIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MKLQotLyogSWYgd2UgZG9uJ3Qgd2FudCB0byB1c2Uga21lbS4gKi8KLSN1bmRlZiBORVRTTk1QX05PX0tNRU1fVVNBR0UKLQotLyogSWYgeW91IGRvbid0IHdhbnQgdGhlIGFnZW50IHRvIHJlcG9ydCBvbiB2YXJpYWJsZXMgaXQgZG9lc24ndCBoYXZlIGRhdGEgZm9yICovCi0jdW5kZWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKLQotCiAvKiBNaWItMiB0cmVlIEluZm8gKi8KIC8qIFRoZXNlIGFyZSB0aGUgc3lzdGVtIGluZm9ybWF0aW9uIHZhcmlhYmxlcy4gKi8KIApAQCAtNTYzLDcgKzI1MSw3IEBACiAjaWZkZWYgV0lOMzIKICNkZWZpbmUgTkVUU05NUF9PU1RZUEUgTkVUU05NUF9XSU4zMklECiAjZW5kaWYKLSNpZiBkZWZpbmVkKGFpeDMpIHx8IGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXgzKSB8fCBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAjZGVmaW5lIE5FVFNOTVBfT1NUWVBFIE5FVFNOTVBfQUlYSUQKICNlbmRpZgogI2lmIGRlZmluZWQoZGFyd2luKSAmJiAoZGFyd2luID49IDgpCkBAIC02NTQsOSArMzQyLDYgQEAKIC8qIGludGVybmFsIGRlZmluZSAqLwogI2RlZmluZSBORVRTTk1QX0xBU1RGSUVMRCAtMQogCi0vKiBjb25maWd1cmUgb3B0aW9ucyBzcGVjaWZpZWQgKi8KLSNkZWZpbmUgTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUyAiIgotCiAvKiAgUGx1Z2dhYmxlIHRyYW5zcG9ydHMuICAqLwogCiAvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBVRFAvSVAgdHJhbnNwb3J0IGRvbWFpbiBpcwpAQCAtNjkxLDEzICszNzYsMzIgQEAKICAgICBhdmFpbGFibGUuICAqLwogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCiAKLS8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFVEUC9JUCB0cmFuc3BvcnQgZG9tYWluIGlzCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMgdHJhbnNwb3J0IGRvbWFpbiBpcwogICAgIGF2YWlsYWJsZS4gICAqLwotI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU19ET01BSU4KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNCQVNFX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBBbGlhcyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFNTSCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBEVExTL1VEUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTL1RDUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgogCiAvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHN0ZGluL291dCB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLwogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4KIAorLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgSVB2NEJhc2UgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9JUFY0QkFTRV9ET01BSU4KKwogLyogZGVmaW5lIHRoaXMgaWYgdGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjdW5kZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAKQEAgLTcwNywxOCArNDExLDkgQEAKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBsb2NhbCBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjdW5kZWYgTkVUU05NUF9TRUNNT0RfTE9DQUxTTQogCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgd2l0aCByZWVudHJhbnQvdGhyZWFkZWQgY29kZSAoaW5jb21wbGV0ZSkqLwotI3VuZGVmIE5FVFNOTVBfUkVFTlRSQU5UCi0KIC8qIGRlZmluZSBpZiBjb25maWd1cmVkIGFzIGEgIm1pbmktYWdlbnQiICovCiAjdW5kZWYgTkVUU05NUF9NSU5JX0FHRU5UCiAKLS8qIGRlZmluZSBpZiB5b3UgYXJlIGVtYmVkZGluZyBwZXJsIGluIHRoZSBtYWluIGFnZW50ICovCi0jdW5kZWYgTkVUU05NUF9FTUJFRERFRF9QRVJMCi0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCBNRkQgbW9kdWxlIHJld3JpdGVzKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKLQogLyogdGhpcyBpcyB0aGUgbG9jYXRpb24gb2YgdGhlIG5ldC1zbm1wIG1pYiB0cmVlLiAgSXQgc2hvdWxkbid0IGJlCiAgICBjaGFuZ2VkLCBhcyB0aGUgcGxhY2VzIGl0IGlzIHVzZWQgYXJlIGV4cGVjdGVkIHRvIGJlIGNvbnN0YW50CiAgICB2YWx1ZXMgb3IgYXJlIGRpcmVjdGx5IHRpZWQgdG8gdGhlIFVDRC1TTk1QLU1JQi4gKi8KQEAgLTc4NiwzMyArNDgxLDEyIEBACiAjICBkZWZpbmUgTkVUU05NUF9JTVBPUlQgZXh0ZXJuCiAjZW5kaWYKIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2Ci0KLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byByZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCBieSBkZWZhdWx0ICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWAotCi0vKiBkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seSAqLwotI3VuZGVmIE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkKLQotLyogZGVmaW5lIGlmIHlvdSBkbyBub3Qgd2FudCBzbm1wdHJhcGQgdG8gcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50ICovCi0jdW5kZWYgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKLQotLyogZGVmaW5lIHRoaXMgaWYgd2UncmUgdXNpbmcgdGhlIG5ldyBNSVQgY3J5cHRvIEFQSSAqLwotI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX01JVAotCi0vKiBkZWZpbmUgdGhpcyBpZiB5b3UncmUgdXNpbmcgSGVpbWRhbCBLZXJiZXJvcyAqLwotI3VuZGVmIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwKLQogLyogY29tbWVudCB0aGUgbmV4dCBsaW5lIGlmIHlvdSBhcmUgY29tcGlsaW5nIHdpdGggbGlic25tcC5oIAogICAgYW5kIGFyZSBub3QgdXNpbmcgdGhlIFVDLURhdmlzIFNOTVAgbGlicmFyeS4gKi8KICNkZWZpbmUgVUNEX1NOTVBfTElCUkFSWSAxCiAKLS8qIGFkZCBpbiByZWNlbnQgQ01VIGxpYnJhcnkgZXh0ZW5zaW9ucyAobm90IGNvbXBsZXRlKSAqLwotI3VuZGVmIENNVV9DT01QQVRJQkxFCi0KIC8qIGZpbmFsIGNvbmNsdXNpb24gb24gbmxpc3QgdXNhZ2UgKi8KLSNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFKSAmJiAhZGVmaW5lZChORVRTTk1QX0RPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCisjaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUpICYmICFkZWZpbmVkKE5FVFNOTVBfRE9OVF9VU0VfTkxJU1QpICYmIGRlZmluZWQoSEFWRV9LTUVNKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCiAjZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9OTElTVAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2FjaW5jbHVkZS5tNCBiL2FjaW5jbHVkZS5tNApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWMxMjk4MC4uMDAwMDAwMAotLS0gYS9hY2luY2x1ZGUubTQKKysrIC9kZXYvbnVsbApAQCAtMSwyMDAgKzAsMCBAQAotZG5sIEBzeW5vcHNpcyBBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoVkFSSUFCTEVOQU1FLFFVRVNUSU9OLFtERUZBVUxUXSkKLWRubAotZG5sIEFza3MgYSBRVUVTVElPTiBhbmQgcHV0cyB0aGUgcmVzdWx0cyBpbiBWQVJJQUJMRU5BTUUgd2l0aCBhbiBvcHRpb25hbAotZG5sIERFRkFVTFQgdmFsdWUgaWYgdGhlIHVzZXIgbWVyZWx5IGhpdHMgcmV0dXJuLgotZG5sCi1kbmwgQHZlcnNpb24gMS4xNQotZG5sIEBhdXRob3IgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1kbmwKLUFDX0RFRlVOKFtBQ19QUk9NUFRfVVNFUl9OT19ERUZJTkVdLAotZG5sIGNoYW5nZXF1b3RlKDw8LCA+PikgZG5sCi1kbmwgPDwKLVsKLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiJDIgKCQzKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJDMiICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIkMyIKLWZpCi1ldmFsICQxPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIkMyIKLWV2YWwgJDE9XCIkdG1waW5wdXRcIgotZmkKLV0KLWRubCA+PgotZG5sIGNoYW5nZXF1b3RlKFssIF0pCi0pIGRubCBkb25lIEFDX1BST01QVF9VU0VSCi0KLWRubCBAc3lub3BzaXMgQUNfUFJPTVBUX1VTRVIoVkFSSUFCTEVOQU1FLFFVRVNUSU9OLFtERUZBVUxUXSxRVU9URUQpCi1kbmwKLWRubCBBc2tzIGEgUVVFU1RJT04gYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW4gVkFSSUFCTEVOQU1FIHdpdGggYW4gb3B0aW9uYWwKLWRubCBERUZBVUxUIHZhbHVlIGlmIHRoZSB1c2VyIG1lcmVseSBoaXRzIHJldHVybi4gIEFsc28gY2FsbHMgCi1kbmwgQUNfREVGSU5FX1VOUVVPVEVEKCkgb24gdGhlIFZBUklBQkxFTkFNRSBmb3IgVkFSSUFCTEVOQU1FcyB0aGF0IHNob3VsZAotZG5sIGJlIGVudGVyZWQgaW50byB0aGUgY29uZmlnLmggZmlsZSBhcyB3ZWxsLiAgSWYgUVVPVEVEIGlzICJxdW90ZWQiIHRoZW4KLWRubCB0aGUgcmVzdWx0IHdpbGwgYmUgZGVmaW5lZCB3aXRoaW4gcXVvdGVzLgotZG5sCi1kbmwgQHZlcnNpb24gMS4xNQotZG5sIEBhdXRob3IgV2VzIEhhcmRha2VyIDxoYXJkYWtlckB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci1kbmwKLUFDX0RFRlVOKFtBQ19QUk9NUFRfVVNFUl0sCi1bCi1NU0dfQ0hFQ0s9YGVjaG8gIiQyIiB8IHRhaWwgLTFgCi1BQ19DQUNIRV9DSEVDSygkTVNHX0NIRUNLLCBhY19jdl91c2VyX3Byb21wdF8kMSwKLVtlY2hvICIiID4mQUNfRkRfTVNHCi1BQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoJDEsWyQyXSwkMykKLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfJDE9XCQkMQotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mQUNfRkRfTVNHCi1dKQotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0XyQxIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieCQ0IiA9ICJ4cXVvdGVkIiAtbyAieCQ0IiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIEFDX0RFRklORV9VTlFVT1RFRCgkMSwiJGFjX2N2X3VzZXJfcHJvbXB0XyQxIikKLSAgZWxzZQotICAgIEFDX0RFRklORV9VTlFVT1RFRCgkMSwkYWNfY3ZfdXNlcl9wcm9tcHRfJDEpCi0gIGZpCi1maQotXSkgZG5sCi0KLWRubCBAc3lub3BzaXMgQUNfQ0hFQ0tfU1RSVUNUX0ZPUihJTkNMVURFUyxTVFJVQ1QsTUVNQkVSLERFRklORSxbbm9dKQotZG5sCi1kbmwgQ2hlY2tzIFNUUlVDVCBmb3IgTUVNQkVSIGFuZCBkZWZpbmVzIERFRklORSBpZiBmb3VuZC4KLWRubAotZG5sIEB2ZXJzaW9uIDEuMTUKLWRubCBAYXV0aG9yIFdlcyBIYXJkYWtlciA8aGFyZGFrZXJAdXNlcnMuc291cmNlZm9yZ2UubmV0PgotZG5sCi1BQ19ERUZVTihbQUNfQ0hFQ0tfU1RSVUNUX0ZPUl0sWwotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiJDIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIiQzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotY2hhbmdlcXVvdGUoLCApZG5sCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLWNoYW5nZXF1b3RlKFssIF0pZG5sCi0KLUFDX01TR19DSEVDS0lORyhbZm9yICQyLiQzXSkKLUFDX0NBQ0hFX1ZBTCgkYWNfc2FmZV9hbGwsCi1bCi1pZiB0ZXN0ICJ4JDQiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngkNCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iJDQiCi1maQotQUNfVFJZX0NPTVBJTEUoWwotJDEKLV0sWwotc3RydWN0ICQyIHRlc3RpdDsgCi10ZXN0aXQuJDMgJGRlZmluZWl0OwotXSwgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIiwgZXZhbCAiJHthY19zYWZlX2FsbH09bm8iICkKLV0pCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIEFDX01TR19SRVNVTFQoeWVzKQotICBBQ19ERUZJTkVfVU5RVU9URUQoJGFjX3VjX2RlZmluZSkKLWVsc2UKLSAgQUNfTVNHX1JFU1VMVChubykKLWZpCi0KLV0pCi0KLWRubCBBQ19DSEVDS19JRk5FVF9GT1IoU1VCU1RSVUNULFtub10pCi1BQ19ERUZVTihbQUNfQ0hFQ0tfSUZORVRfRk9SXSxbCi1kbmwgY2hlY2sgZm9yICQxIGluIHN0cnVjdCBpZm5ldAotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotXSwgaWZuZXQsICQxLCAkMikKLV0pCi0KLWRubAotZG5sIEFkZCBhIHNlYXJjaCBwYXRoIHRvIHRoZSBMSUJTIGFuZCBDRkxBR1MgdmFyaWFibGVzCi1kbmwKLUFDX0RFRlVOKFtBQ19BRERfU0VBUkNIX1BBVEhdLFsKLSAgaWYgdGVzdCAieCQxIiAhPSB4IC1hIC1kICQxOyB0aGVuCi0gICAgIGlmIHRlc3QgLWQgJDEvbGliOyB0aGVuCi0gICAgICAgTERGTEFHUz0iLUwkMS9saWIgJExERkxBR1MiCi0gICAgIGZpCi0gICAgIGlmIHRlc3QgLWQgJDEvaW5jbHVkZTsgdGhlbgotCUNQUEZMQUdTPSItSSQxL2luY2x1ZGUgJENQUEZMQUdTIgotICAgICBmaQotICBmaQotXSkKLQotZG5sCi1kbmwgU3RvcmUgaW5mb3JtYXRpb24gZm9yIGRpc3BsYXlpbmcgbGF0ZXIuCi1kbmwKLUFDX0RFRlVOKFtBQ19NU0dfQ0FDSEVfSU5JVF0sWwotICBybSAtZiBjb25maWd1cmUtc3VtbWFyeQotXSkKLQotQUNfREVGVU4oW0FDX01TR19DQUNIRV9BRERdLFsKLSAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgotICAkMQotRU9GCi1dKQotCi1BQ19ERUZVTihbQUNfTVNHX0NBQ0hFX0RJU1BMQVldLFsKLSAgZWNobyAiIgotICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIGVjaG8gIiAgICAgICAgICAgIE5ldC1TTk1QIGNvbmZpZ3VyYXRpb24gc3VtbWFyeToiCi0gIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKLSAgZWNobyAiIgotICBjYXQgY29uZmlndXJlLXN1bW1hcnkKLSAgZWNobyAiIgotICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCi0gIGVjaG8gIiIKLV0pCi0KLUFDX0RFRlVOKFtBQ19NU0dfTU9EVUxFX0RCR10sCi1bCi0gIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KLSAgICBlY2hvICQxICQyICQzICQ0Ci0gIGZpCi1dCi0pCmRpZmYgLS1naXQgYS9hY2xvY2FsLm00IGIvYWNsb2NhbC5tNAppbmRleCA0NDFjNzUyLi5jZDgwYzc0IDEwMDY0NAotLS0gYS9hY2xvY2FsLm00CisrKyBiL2FjbG9jYWwubTQKQEAgLTEsNyArMSw3IEBACi0jIGdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGFjbG9jYWwgMS4xMC4xIC0qLSBBdXRvY29uZiAtKi0KKyMgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgYWNsb2NhbCAxLjExIC0qLSBBdXRvY29uZiAtKi0KIAogIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsCi0jIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KICMgVGhpcyBmaWxlIGlzIGZyZWUgc29mdHdhcmU7IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KICMgZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSBhbmQvb3IgZGlzdHJpYnV0ZSBpdCwKICMgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbnMsIGFzIGxvbmcgYXMgdGhpcyBub3RpY2UgaXMgcHJlc2VydmVkLgpAQCAtMTEsNjY0MCArMTEsMTQgQEAKICMgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQQogIyBQQVJUSUNVTEFSIFBVUlBPU0UuCiAKLSMgbGlidG9vbC5tNCAtIENvbmZpZ3VyZSBsaWJ0b29sIGZvciB0aGUgaG9zdCBzeXN0ZW0uIC0qLUF1dG9jb25mLSotCi0KLSMgc2VyaWFsIDUyIEFDX1BST0dfTElCVE9PTAotCi0KLSMgQUNfUFJPVklERV9JRkVMU0UoTUFDUk8tTkFNRSwgSUYtUFJPVklERUQsIElGLU5PVC1QUk9WSURFRCkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgSWYgdGhpcyBtYWNybyBpcyBub3QgZGVmaW5lZCBieSBBdXRvY29uZiwgZGVmaW5lIGl0IGhlcmUuCi1tNF9pZmRlZihbQUNfUFJPVklERV9JRkVMU0VdLAotICAgICAgICAgW10sCi0gICAgICAgICBbbTRfZGVmaW5lKFtBQ19QUk9WSURFX0lGRUxTRV0sCi0JICAgICAgICAgW200X2lmZGVmKFtBQ19QUk9WSURFXyQxXSwKLQkJICAgICAgICAgICBbJDJdLCBbJDNdKV0pXSkKLQotCi0jIEFDX1BST0dfTElCVE9PTAotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLAotW0FDX1JFUVVJUkUoW19BQ19QUk9HX0xJQlRPT0xdKWRubAotZG5sIElmIEFDX1BST0dfQ1hYIGhhcyBhbHJlYWR5IGJlZW4gZXhwYW5kZWQsIHJ1biBBQ19MSUJUT09MX0NYWAotZG5sIGltbWVkaWF0ZWx5LCBvdGhlcndpc2UsIGhvb2sgaXQgaW4gYXQgdGhlIGVuZCBvZiBBQ19QUk9HX0NYWC4KLSAgQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKLSAgICBbQUNfTElCVE9PTF9DWFhdLAotICAgIFtkZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtBQ19MSUJUT09MX0NYWAotICBdKV0pCi1kbmwgQW5kIGEgc2ltaWxhciBzZXR1cCBmb3IgRm9ydHJhbiA3NyBzdXBwb3J0Ci0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCi0gICAgW0FDX0xJQlRPT0xfRjc3XSwKLSAgICBbZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbQUNfTElCVE9PTF9GNzcKLV0pXSkKLQotZG5sIFF1b3RlIEFdW01fUFJPR19HQ0ogc28gdGhhdCBhY2xvY2FsIGRvZXNuJ3QgYnJpbmcgaXQgaW4gbmVlZGxlc3NseS4KLWRubCBJZiBlaXRoZXIgQUNfUFJPR19HQ0ogb3IgQV1bTV9QUk9HX0dDSiBoYXZlIGFscmVhZHkgYmVlbiBleHBhbmRlZCwgcnVuCi1kbmwgQUNfTElCVE9PTF9HQ0ogaW1tZWRpYXRlbHksIG90aGVyd2lzZSwgaG9vayBpdCBpbiBhdCB0aGUgZW5kIG9mIGJvdGguCi0gIEFDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0dDSl0sCi0gICAgW0FDX0xJQlRPT0xfR0NKXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0FdW01fUFJPR19HQ0pdLAotICAgICAgW0FDX0xJQlRPT0xfR0NKXSwKLSAgICAgIFtBQ19QUk9WSURFX0lGRUxTRShbTFRfQUNfUFJPR19HQ0pdLAotCVtBQ19MSUJUT09MX0dDSl0sCi0gICAgICBbaWZkZWYoW0FDX1BST0dfR0NKXSwKLQkgICAgIFtkZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtBQ19MSUJUT09MX0dDSl0pXSkKLSAgICAgICBpZmRlZihbQV1bTV9QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtBXVtNX1BST0dfR0NKXSwgZGVmbihbQV1bTV9QUk9HX0dDSl0pW0FDX0xJQlRPT0xfR0NKXSldKQotICAgICAgIGlmZGVmKFtMVF9BQ19QUk9HX0dDSl0sCi0JICAgICBbZGVmaW5lKFtMVF9BQ19QUk9HX0dDSl0sCi0JCWRlZm4oW0xUX0FDX1BST0dfR0NKXSlbQUNfTElCVE9PTF9HQ0pdKV0pXSldKQotXSldKSMgQUNfUFJPR19MSUJUT09MCi0KLQotIyBfQUNfUFJPR19MSUJUT09MCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfQUNfUFJPR19MSUJUT09MXSwKLVtBQ19SRVFVSVJFKFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX0NYWF0pZG5sCi1BQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9GNzddKWRubAotQUNfQkVGT1JFKFskMF0sW0FDX0xJQlRPT0xfR0NKXSlkbmwKLQotIyBUaGlzIGNhbiBiZSB1c2VkIHRvIHJlYnVpbGQgbGlidG9vbCB3aGVuIG5lZWRlZAotTElCVE9PTF9ERVBTPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi0KLSMgQWx3YXlzIHVzZSBvdXIgb3duIGxpYnRvb2wuCi1MSUJUT09MPSckKFNIRUxMKSAkKHRvcF9idWlsZGRpcikvbGlidG9vbCcKLUFDX1NVQlNUKExJQlRPT0wpZG5sCi0KLSMgUHJldmVudCBtdWx0aXBsZSBleHBhbnNpb24KLWRlZmluZShbQUNfUFJPR19MSUJUT09MXSwgW10pCi1dKSMgX0FDX1BST0dfTElCVE9PTAotCi0KLSMgQUNfTElCVE9PTF9TRVRVUAotIyAtLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TRVRVUF0sCi1bQUNfUFJFUkVRKDIuNTApZG5sCi1BQ19SRVFVSVJFKFtBQ19FTkFCTEVfU0hBUkVEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX0VOQUJMRV9TVEFUSUNdKWRubAotQUNfUkVRVUlSRShbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0xEXSlkbmwKLUFDX1JFUVVJUkUoW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pZG5sCi0KLUFDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCi1BQ19SRVFVSVJFKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0pZG5sCi0jIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKWRubAotQUNfUkVRVUlSRShbQUNfRVhFRVhUXSlkbmwKLWRubAotQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLUFDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRQotQUNfTElCVE9PTF9PQkpESVIKLQotQUNfUkVRVUlSRShbX0xUX0FDX1NZU19DT01QSUxFUl0pZG5sCi1fTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0gICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcwotICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi0gIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICAgIENPTExFQ1RfTkFNRVM9Ci0gICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLSAgZmkKLSAgOzsKLWVzYWMKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9J3NlZCAtZSAxcy9eWC8vJwotW3NlZF9xdW90ZV9zdWJzdD0ncy9cKFtcXCJcXGAkXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KLVtkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnXQotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQotIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgotZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKLQotIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGF2b2lkIGFjY2lkZW50YWwgZ2xvYmJpbmcgaW4gZXZhbGVkIGV4cHJlc3Npb25zCi1ub19nbG9iX3N1YnN0PSdzL1wqL1xcXCovZycKLQotIyBDb25zdGFudHM6Ci1ybT0icm0gLWYiCi0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLWRlZmF1bHRfb2ZpbGU9bGlidG9vbAotY2FuX2J1aWxkX3NoYXJlZD15ZXMKLQotIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCi0jIHdoaWNoIG5lZWRzICcubGliJykuCi1saWJleHQ9YQotbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCi1vZmlsZT0iJGRlZmF1bHRfb2ZpbGUiCi13aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgotCi1BQ19DSEVDS19UT09MKEFSLCBhciwgZmFsc2UpCi1BQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQotQUNfQ0hFQ0tfVE9PTChTVFJJUCwgc3RyaXAsIDopCi0KLW9sZF9DQz0iJENDIgotb2xkX0NGTEFHUz0iJENGTEFHUyIKLQotIyBTZXQgc2FuZSBkZWZhdWx0cyBmb3IgdmFyaW91cyB2YXJpYWJsZXMKLXRlc3QgLXogIiRBUiIgJiYgQVI9YXIKLXRlc3QgLXogIiRBUl9GTEFHUyIgJiYgQVJfRkxBR1M9Y3J1Ci10ZXN0IC16ICIkQVMiICYmIEFTPWFzCi10ZXN0IC16ICIkQ0MiICYmIENDPWNjCi10ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKLXRlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwotdGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAotdGVzdCAteiAiJExEIiAmJiBMRD1sZAotdGVzdCAteiAiJExOX1MiICYmIExOX1M9ImxuIC1zIgotdGVzdCAteiAiJE1BR0lDX0NNRCIgJiYgTUFHSUNfQ01EPWZpbGUKLXRlc3QgLXogIiROTSIgJiYgTk09bm0KLXRlc3QgLXogIiRTRUQiICYmIFNFRD1zZWQKLXRlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKLXRlc3QgLXogIiRSQU5MSUIiICYmIFJBTkxJQj06Ci10ZXN0IC16ICIkU1RSSVAiICYmIFNUUklQPToKLXRlc3QgLXogIiRhY19vYmpleHQiICYmIGFjX29iamV4dD1vCi0KLSMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgotb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCi1vbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCi1vbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQotCi1pZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBjYXNlICRob3N0X29zIGluCi0gIG9wZW5ic2QqKQotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCi0gICAgOzsKLSAgKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotICAgIDs7Ci0gIGVzYWMKLSAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCi1maQotCi1fTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCi0KLSMgT25seSBwZXJmb3JtIHRoZSBjaGVjayBmb3IgZmlsZSwgaWYgdGhlIGNoZWNrIG1ldGhvZCByZXF1aXJlcyBpdAotY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLWZpbGVfbWFnaWMqKQotICBpZiB0ZXN0ICIkZmlsZV9tYWdpY19jbWQiID0gJyRNQUdJQ19DTUQnOyB0aGVuCi0gICAgQUNfUEFUSF9NQUdJQwotICBmaQotICA7OwotZXNhYwotCi1fTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLUwotCi1BQ19QUk9WSURFX0lGRUxTRShbQUNfTElCVE9PTF9ETE9QRU5dLCBlbmFibGVfZGxvcGVuPXllcywgZW5hYmxlX2Rsb3Blbj1ubykKLUFDX1BST1ZJREVfSUZFTFNFKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1lbmFibGVfd2luMzJfZGxsPXllcywgZW5hYmxlX3dpbjMyX2RsbD1ubykKLQotQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotQUNfQVJHX1dJVEgoW3BpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtcGljXSwKLQlbdHJ5IHRvIHVzZSBvbmx5IFBJQy9ub24tUElDIG9iamVjdHMgQDw6QGRlZmF1bHQ9dXNlIGJvdGhAOj5AXSldLAotICAgIFtwaWNfbW9kZT0iJHdpdGh2YWwiXSwKLSAgICBbcGljX21vZGU9ZGVmYXVsdF0pCi10ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKLQotIyBVc2UgQyBmb3IgdGhlIGRlZmF1bHQgY29uZmlndXJhdGlvbiBpbiB0aGUgbGlidG9vbCBzY3JpcHQKLXRhZ25hbWU9Ci1BQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLV9MVF9BQ19UQUdDT05GSUcKLV0pIyBBQ19MSUJUT09MX1NFVFVQCi0KLQotIyBfTFRfQUNfU1lTX0NPTVBJTEVSCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSwKLVtBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwotXSkjIF9MVF9BQ19TWVNfQ09NUElMRVIKLQotCi0jIF9MVF9DQ19CQVNFTkFNRShDQykKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDYWxjdWxhdGUgY2NfYmFzZW5hbWUuICBTa2lwIGtub3duIGNvbXBpbGVyIHdyYXBwZXJzIGFuZCBjcm9zcy1wcmVmaXguCi1BQ19ERUZVTihbX0xUX0NDX0JBU0VOQU1FXSwKLVtmb3IgY2NfdGVtcCBpbiAkMSIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbW1xcL11dY29tcGlsZSB8IGNjYWNoZSB8ICpbW1xcL11dY2NhY2hlICkgOzsKLSAgICBkaXN0Y2MgfCAqW1tcXC9dXWRpc3RjYyB8IHB1cmlmeSB8ICpbW1xcL11dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLV0pCi0KLQotIyBfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBjb21waWxlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAotIyB0aGUgc2ltcGxlIGNvbXBpbGVyIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfQ09NUElMRVJfQk9JTEVSUExBVEVdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgotXSkjIF9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotCi0KLSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBsaW5rZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKLSMgdGhlIHNpbXBsZSBsaW5rIHRlc3QgY29kZS4KLUFDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCi1dKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGZvciBzb21lIHRoaW5ncyBvbiBkYXJ3aW4KLUFDX0RFRlVOKFtfTFRfUkVRVUlSRURfREFSV0lOX0NIRUNLU10sWwotICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqIHwgZGFyd2luKikKLSAgICBBQ19DSEVDS19UT09MKFtEU1lNVVRJTF0sIFtkc3ltdXRpbF0sIFs6XSkKLSAgICBBQ19DSEVDS19UT09MKFtOTUVESVRdLCBbbm1lZGl0XSwgWzpdKQotCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtc2luZ2xlX21vZHVsZSBsaW5rZXIgZmxhZ10sW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2RdLAotICAgICAgW2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9bm8KLSAgICAgIGlmIHRlc3QgLXogIiR7TFRfTVVMVElfTU9EVUxFfSI7IHRoZW4KLSAgICMgQnkgZGVmYXVsdCB3ZSB3aWxsIGFkZCB0aGUgLXNpbmdsZV9tb2R1bGUgZmxhZy4gWW91IGNhbiBvdmVycmlkZQotICAgIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCi0gICAjIG5vbi1lbXB0eSBhdCBjb25maWd1cmUgdGltZSwgb3IgYnkgYWRkaW5nIC1tdWx0aV9tb2R1bGUgdG8gdGhlCi0gICAjIGxpbmsgZmxhZ3MuCi0gICBlY2hvICJpbnQgZm9vKHZvaWQpe3JldHVybiAxO30iID4gY29uZnRlc3QuYwotICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGxpYmNvbmZ0ZXN0LmR5bGliIFwKLSAgICAgLWR5bmFtaWNsaWIgJHt3bH0tc2luZ2xlX21vZHVsZSBjb25mdGVzdC5jCi0gICBpZiB0ZXN0IC1mIGxpYmNvbmZ0ZXN0LmR5bGliOyB0aGVuCi0gICAgIGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Q9eWVzCi0gICAgIHJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKLSAgIGZpCi0gICBybSBjb25mdGVzdC5jCi0gICAgICBmaV0pCi0gICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKLSAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAotICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubwotICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCi0gICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KLSAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKLSAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKLSAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzXSwKLSAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm9dKQotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLSAgICBdKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyM11dKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbjEuKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopCi0gICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCi0gICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAotICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/Ci0gICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCi0gICAxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbltbOTFdXSopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLSAgIDEwLltbMDEyXV0qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7Ci0gICAxMC4qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX3NpbmdsZV9tb2Q9JyRzaW5nbGVfbW9kdWxlJwotICAgIGZpCi0gICAgaWYgdGVzdCAiJGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPSAieWVzIjsgdGhlbgotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0nICR7d2x9LWV4cG9ydGVkX3N5bWJvbHNfbGlzdCwkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltJwotICAgIGVsc2UKLSAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9In4kTk1FRElUIC1zIFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSBcJHtsaWJ9IgotICAgIGZpCi0gICAgaWYgdGVzdCAiJERTWU1VVElMIiAhPSAiOiI7IHRoZW4KLSAgICAgIF9sdF9kc3ltdXRpbD0ifiREU1lNVVRJTCBcJGxpYiB8fCA6IgotICAgIGVsc2UKLSAgICAgIF9sdF9kc3ltdXRpbD0KLSAgICBmaQotICAgIDs7Ci0gIGVzYWMKLV0pCi0KLSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKLSMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAotIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCi0jIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KLSMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKLSMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCi1BQ19ERUZVTihbX0xUX0FDX1NZU19MSUJQQVRIX0FJWF0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTElOS19JRkVMU0UoQUNfTEFOR19QUk9HUkFNLFsKLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmldLFtdKQotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi1dKSMgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotCi0KLSMgX0xUX0FDX1NIRUxMX0lOSVQoQVJHKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi1BQ19ERUZVTihbX0xUX0FDX1NIRUxMX0lOSVRdLAotW2lmZGVmKFtBQ19ESVZFUlNJT05fTk9USUNFXSwKLQkgICAgIFtBQ19ESVZFUlRfUFVTSChBQ19ESVZFUlNJT05fTk9USUNFKV0sCi0JIFtBQ19ESVZFUlRfUFVTSChOT1RJQ0UpXSkKLSQxCi1BQ19ESVZFUlRfUE9QCi1dKSMgX0xUX0FDX1NIRUxMX0lOSVQKLQotCi0jIF9MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNICi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEFkZCBzb21lIGNvZGUgdG8gdGhlIHN0YXJ0IG9mIHRoZSBnZW5lcmF0ZWQgY29uZmlndXJlIHNjcmlwdCB3aGljaAotIyB3aWxsIGZpbmQgYW4gZWNobyBjb21tYW5kIHdoaWNoIGRvZXNuJ3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSwKLVtfTFRfQUNfU0hFTExfSU5JVChbCi0jIENoZWNrIHRoYXQgd2UgYXJlIHJ1bm5pbmcgdW5kZXIgdGhlIGNvcnJlY3Qgc2hlbGwuCi1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi1jYXNlIFgkRUNITyBpbgotWCotLWZhbGxiYWNrLWVjaG8pCi0gICMgUmVtb3ZlIG9uZSBsZXZlbCBvZiBxdW90YXRpb24gKHdoaWNoIHdhcyByZXF1aXJlZCBmb3IgTWFrZSkuCi0gIEVDSE89YGVjaG8gIiRFQ0hPIiB8IHNlZCAncyxcXFxcXFskXVxcWyRdMCwnWyRdMCcsJ2AKLSAgOzsKLWVzYWMKLQotZWNobz0ke0VDSE8tZWNob30KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWFskXTEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIEF2b2lkIGlubGluZSBkb2N1bWVudCBoZXJlLCBpdCBtYXkgYmUgbGVmdCBvdmVyCi0gIDoKLWVsaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnIDsgdGhlbgotICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCi0gIDoKLWVsc2UKLSAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLgotICBleGVjICRTSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLWZpCi0KLWlmIHRlc3QgIlhbJF0xIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyB1c2VkIGFzIGZhbGxiYWNrIGVjaG8KLSAgc2hpZnQKLSAgY2F0IDw8RU9GCi1bJF0qCi1FT0YKLSAgZXhpdCAwCi1maQotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1pZiB0ZXN0IC16ICIkRUNITyI7IHRoZW4KLWlmIHRlc3QgIlgke2VjaG9fdGVzdF9zdHJpbmcrc2V0fSIgIT0gWHNldDsgdGhlbgotIyBmaW5kIGEgc3RyaW5nIGFzIGxhcmdlIGFzIHBvc3NpYmxlLCBhcyBsb25nIGFzIHRoZSBzaGVsbCBjYW4gY29wZSB3aXRoIGl0Ci0gIGZvciBjbWQgaW4gJ3NlZCA1MHEgIlskXTAiJyAnc2VkIDIwcSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAycSAiWyRdMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAya0IsIDFrQiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQotCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiWyRdMCIgLS1uby1yZWV4ZWMgJHsxKyJbJF1AIn0KLSAgICBlbHNlCi0gICAgICAjIFRyeSB1c2luZyBwcmludGYuCi0gICAgICBlY2hvPSdwcmludGYgJXNcbicKLSAgICAgIGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotCSBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJGVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCSMgQ29vbCwgcHJpbnRmIHdvcmtzCi0JOgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJE9SSUdJTkFMX0NPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICJbJF0wIiAtLWZhbGxiYWNrLWVjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0JICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JQ09ORklHX1NIRUxMPSRPUklHSU5BTF9DT05GSUdfU0hFTEwKLQlleHBvcnQgQ09ORklHX1NIRUxMCi0JU0hFTEw9IiRDT05GSUdfU0hFTEwiCi0JZXhwb3J0IFNIRUxMCi0JZWNobz0iJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsaWYgZWNob190ZXN0aW5nX3N0cmluZz1gKCRDT05GSUdfU0hFTEwgIlskXTAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiWyRdMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCWVjaG89IiRDT05GSUdfU0hFTEwgWyRdMCAtLWZhbGxiYWNrLWVjaG8iCi0gICAgICBlbHNlCi0JIyBtYXliZSB3aXRoIGEgc21hbGxlciBzdHJpbmcuLi4KLQlwcmV2PToKLQotCWZvciBjbWQgaW4gJ2VjaG8gdGVzdCcgJ3NlZCAycSAiWyRdMCInICdzZWQgMTBxICJbJF0wIicgJ3NlZCAyMHEgIlskXTAiJyAnc2VkIDUwcSAiWyRdMCInOyBkbwotCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgYnJlYWsKLQkgIGZpCi0JICBwcmV2PSIkY21kIgotCWRvbmUKLQotCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiWyRdMCInOyB0aGVuCi0JICBlY2hvX3Rlc3Rfc3RyaW5nPWBldmFsICRwcmV2YAotCSAgZXhwb3J0IGVjaG9fdGVzdF9zdHJpbmcKLQkgIGV4ZWMgJHtPUklHSU5BTF9DT05GSUdfU0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19ICJbJF0wIiAkezErIlskXUAifQotCWVsc2UKLQkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCi0JICBlY2hvPWVjaG8KLQlmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotZmkKLWZpCi0KLSMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgotRUNITz0kZWNobwotaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyI7IHRoZW4KLSAgIEVDSE89IiRDT05GSUdfU0hFTEwgXFxcJFxbJF0wIC0tZmFsbGJhY2stZWNobyIKLWZpCi0KLUFDX1NVQlNUKEVDSE8pCi1dKV0pIyBfTFRfQUNfUFJPR19FQ0hPX0JBQ0tTTEFTSAotCi0KLSMgX0xUX0FDX0xPQ0sKLSMgLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTE9DS10sCi1bQUNfQVJHX0VOQUJMRShbbGlidG9vbC1sb2NrXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAotCVthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCi0jIGxpYnRvb2wgc3VwcG9ydC4KLWNhc2UgJGhvc3QgaW4KLWlhNjQtKi1ocHV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqRUxGLTMyKikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKLSAgICAgIDs7Ci0gICAgKkVMRi02NCopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdbI11saW5lIF9fb2xpbmVfXyAiY29uZmlndXJlIicgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotICAgICAgOzsKLSAgICBlc2FjCi0gICBlbHNlCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC0zMiIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gICBmaQotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqMzItYml0KikKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgeDg2XzY0LSprZnJlZWJzZCotZ251KQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4Nl9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfaTM4NiIKLSAgICAgICAgICA7OwotICAgICAgICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGYzMnBwY2xpbnV4IgotICAgICAgICAgIDs7Ci0gICAgICAgIHMzOTB4LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgotICAgICAgICAgIDs7Ci0gICAgICAgIHg4Nl82NC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgotICAgICAgICAgIDs7Ci0gICAgICAgIHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkwKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgotICAgICAgICAgIDs7Ci0gICAgICAgIHNwYXJjKi0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotKi0qLXNjbzMuMnY1KikKLSAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgotICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKLSAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgotICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCi0gICAgW0FDX0xBTkdfUFVTSChDKQotICAgICBBQ19UUllfTElOSyhbXSxbXSxbbHRfY3ZfY2NfbmVlZHNfYmVsZj15ZXNdLFtsdF9jdl9jY19uZWVkc19iZWxmPW5vXSkKLSAgICAgQUNfTEFOR19QT1BdKQotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgotICBmaQotICA7Owotc3BhcmMqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3Qub2AgaW4KLSAgICAqNjQtYml0KikKLSAgICAgIGNhc2UgJGx0X2N2X3Byb2dfZ251X2xkIGluCi0gICAgICB5ZXMqKSBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiIDs7Ci0gICAgICAqKQotICAgICAgICBpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgIExEPSIke0xELWxkfSAtNjQiCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCoKLSAgOzsKLQotQUNfUFJPVklERV9JRkVMU0UoW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwKLVsqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiopCi0gIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCi0gIEFDX0NIRUNLX1RPT0woQVMsIGFzLCBmYWxzZSkKLSAgQUNfQ0hFQ0tfVE9PTChPQkpEVU1QLCBvYmpkdW1wLCBmYWxzZSkKLSAgOzsKLSAgXSkKLWVzYWMKLQotbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLV0pIyBfTFRfQUNfTE9DSwotCi0KLSMgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oTUVTU0FHRSwgVkFSSUFCTEUtTkFNRSwgRkxBR1MsCi0jCQlbT1VUUFVULUZJTEVdLCBbQUNUSU9OLVNVQ0NFU1NdLCBbQUNUSU9OLUZBSUxVUkVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pCi1BQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAotICBbJDI9bm8KLSAgaWZlbHNlKFskNF0sICwgW2FjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dF0sIFthY19vdXRmaWxlPSQ0XSkKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJDMiCi0gICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgotICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KLSAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKLSAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCi0gICAjIFRoZSBvcHRpb24gaXMgcmVmZXJlbmNlZCB2aWEgYSB2YXJpYWJsZSB0byBhdm9pZCBjb25mdXNpbmcgc2VkLgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW1teIF1dKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6X19vbGluZV9fOiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICQyPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKLV0pCi0KLWlmIHRlc3QgeCJbJF0kMiIgPSB4eWVzOyB0aGVuCi0gICAgaWZlbHNlKFskNV0sICwgOiwgWyQ1XSkKLWVsc2UKLSAgICBpZmVsc2UoWyQ2XSwgLCA6LCBbJDZdKQotZmkKLV0pIyBBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAotIyAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDVElPTi1TVUNDRVNTXSwgW0FDVElPTi1GQUlMVVJFXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGNvbXBpbGVyIG9wdGlvbiB3b3JrcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKLSAgWyQyPW5vCi0gICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgotICAgTERGTEFHUz0iJExERkxBR1MgJDMiCi0gICBlY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgIGlmIChldmFsICRhY19saW5rIDI+Y29uZnRlc3QuZXJyKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dDsgdGhlbgotICAgICAjIFRoZSBsaW5rZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIyBBcHBlbmQgYW55IGVycm9ycyB0byB0aGUgY29uZmlnLmxvZy4KLSAgICAgICBjYXQgY29uZnRlc3QuZXJyIDE+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgICQyPXllcwotICAgICAgIGZpCi0gICAgIGVsc2UKLSAgICAgICAkMj15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gLXIgY29uZnRlc3QqCi0gICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgotXSkKLQotaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KLSAgICBpZmVsc2UoWyQ0XSwgLCA6LCBbJDRdKQotZWxzZQotICAgIGlmZWxzZShbJDVdLCAsIDosIFskNV0pCi1maQotXSkjIEFDX0xJQlRPT0xfTElOS0VSX09QVElPTgotCi0KLSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19NQVhfQ01EX0xFTl0sCi1bIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCi1BQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKLUFDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAotICBpPTAKLSAgdGVzdHN0cmluZz0iQUJDRCIKLQotICBjYXNlICRidWlsZF9vcyBpbgotICBtc2Rvc2RqZ3BwKikKLSAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCi0gICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgotICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCi0gICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAotICAgIDs7Ci0KLSAgZ251KikKLSAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKLSAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KLSAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKLSAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgotICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCi0gICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQotICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KLSAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKLSAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwotICAgIDs7Ci0KLSAgYW1pZ2FvcyopCi0gICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgotICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7Ci0gICAgOzsKLQotICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQotICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgotICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKLSAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAotICAgIGVsc2UKLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcwotICAgIGZpCi0gICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCi0gICAgOzsKLQotICBpbnRlcml4KikKLSAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4Ci0gICAgOzsKLQotICBvc2YqKQotICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQotICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90Ci0gICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KLSAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KLSAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKLSAgICAjCi0gICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KLSAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCi0gICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICA7OwotICBzY28zLjJ2NSopCi0gICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAotICAgIDs7Ci0gIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKLSAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCi0gICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWyAJXV0vLydgCi0gICAgZWxzZQotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4Ci0gICAgZmkKLSAgICA7OwotICAqKQotICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAotICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCi0gICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKLSAgICBlbHNlCi0gICAgICBTSEVMTD0ke1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fQotICAgICAgd2hpbGUgKHRlc3QgIlgiYCRTSEVMTCBbJF0wIC0tZmFsbGJhY2stZWNobyAiWCR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAotCSAgICAgICA9ICJYWCR0ZXN0c3RyaW5nIikgPi9kZXYvbnVsbCAyPiYxICYmCi0JICAgICAgbmV3X3Jlc3VsdD1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAgJiYKLQkgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49JG5ld19yZXN1bHQgJiYKLQkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKLSAgICAgIGRvCi0gICAgICAgIGk9YGV4cHIgJGkgKyAxYAotICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKLSAgICAgIGRvbmUKLSAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KLSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi1dKQotaWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgotICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm9uZSkKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU4KLQotCi0jIF9MVF9BQ19DSEVDS19ETEZDTgotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfQ0hFQ0tfRExGQ05dLAotW0FDX0NIRUNLX0hFQURFUlMoZGxmY24uaClkbmwKLV0pIyBfTFRfQUNfQ0hFQ0tfRExGQ04KLQotCi0jIF9MVF9BQ19UUllfRExPUEVOX1NFTEYgKEFDVElPTi1JRi1UUlVFLCBBQ1RJT04tSUYtVFJVRS1XLVVTQ09SRSwKLSMgICAgICAgICAgICAgICAgICAgICAgICAgICBBQ1RJT04tSUYtRkFMU0UsIEFDVElPTi1JRi1DUk9TUy1DT01QSUxJTkcpCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19UUllfRExPUEVOX1NFTEZdLAotW0FDX1JFUVVJUkUoW19MVF9BQ19DSEVDS19ETEZDTl0pZG5sCi1pZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIFskNF0KLWVsc2UKLSAgbHRfZGx1bmtub3duPTA7IGx0X2Rsbm9fdXNjb3JlPTE7IGx0X2RsbmVlZF91c2NvcmU9MgotICBsdF9zdGF0dXM9JGx0X2RsdW5rbm93bgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1bI2xpbmUgX19vbGluZV9fICJjb25maWd1cmUiCi0jaW5jbHVkZSAiY29uZmRlZnMuaCIKLQotI2lmIEhBVkVfRExGQ05fSAotI2luY2x1ZGUgPGRsZmNuLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0KLSNpZmRlZiBSVExEX0dMT0JBTAotIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAotI2Vsc2UKLSMgIGlmZGVmIERMX0dMT0JBTAotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAotIyAgZWxzZQotIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKLSMgIGVuZGlmCi0jZW5kaWYKLQotLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQotICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLwotI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCi0jICBpZmRlZiBSVExEX0xBWlkKLSMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQotIyAgZWxzZQotIyAgICBpZmRlZiBETF9MQVpZCi0jICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKLSMgICAgZWxzZQotIyAgICAgIGlmZGVmIFJUTERfTk9XCi0jICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVwotIyAgICAgIGVsc2UKLSMgICAgICAgIGlmZGVmIERMX05PVwotIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKLSMgICAgICAgIGVsc2UKLSMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAotIyAgICAgICAgZW5kaWYKLSMgICAgICBlbmRpZgotIyAgICBlbmRpZgotIyAgZW5kaWYKLSNlbmRpZgotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOwotI2VuZGlmCi0KLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KLWludCBtYWluICgpCi17Ci0gIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwotICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKLQotICBpZiAoc2VsZikKLSAgICB7Ci0gICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKLSAgICAgIGVsc2UgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7Ci0gICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KLSAgICB9Ci0gIGVsc2UKLSAgICBwdXRzIChkbGVycm9yICgpKTsKLQotICAgIGV4aXQgKHN0YXR1cyk7Ci19XQotRU9GCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KLSAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCi0gICAgbHRfc3RhdHVzPSQ/Ci0gICAgY2FzZSB4JGx0X3N0YXR1cyBpbgotICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKLSAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKLSAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OwotICAgIGVzYWMKLSAgZWxzZSA6Ci0gICAgIyBjb21waWxhdGlvbiBmYWlsZWQKLSAgICAkMwotICBmaQotZmkKLXJtIC1mciBjb25mdGVzdCoKLV0pIyBfTFRfQUNfVFJZX0RMT1BFTl9TRUxGCi0KLQotIyBBQ19MSUJUT09MX0RMT1BFTl9TRUxGCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfQ0hFQ0tfRExGQ05dKWRubAotaWYgdGVzdCAieCRlbmFibGVfZGxvcGVuIiAhPSB4eWVzOyB0aGVuCi0gIGVuYWJsZV9kbG9wZW49dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGY9dW5rbm93bgotICBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPXVua25vd24KLWVsc2UKLSAgbHRfY3ZfZGxvcGVuPW5vCi0gIGx0X2N2X2Rsb3Blbl9saWJzPQotCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgYmVvcyopCi0gICAgbHRfY3ZfZGxvcGVuPSJsb2FkX2FkZF9vbiIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICA7OwotCi0gIG1pbmd3KiB8IHB3MzIqKQotICAgIGx0X2N2X2Rsb3Blbj0iTG9hZExpYnJhcnkiCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGN5Z3dpbiopCi0gICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iCi0gICAgbHRfY3ZfZGxvcGVuX2xpYnM9Ci0gICA7OwotCi0gIGRhcndpbiopCi0gICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWwotICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKLSAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKLSAgICBdKQotICAgOzsKLQotICAqKQotICAgIEFDX0NIRUNLX0ZVTkMoW3NobF9sb2FkXSwKLQkgIFtsdF9jdl9kbG9wZW49InNobF9sb2FkIl0sCi0gICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbc2hsX2xvYWRdLAotCSAgICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIl0sCi0JW0FDX0NIRUNLX0ZVTkMoW2Rsb3Blbl0sCi0JICAgICAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIl0sCi0JICBbQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAotCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sCi0JICAgIFtBQ19DSEVDS19MSUIoW3N2bGRdLCBbZGxvcGVuXSwKLQkJICBbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiXSwKLQkgICAgICBbQUNfQ0hFQ0tfTElCKFtkbGRdLCBbZGxkX2xpbmtdLAotCQkgICAgW2x0X2N2X2Rsb3Blbj0iZGxkX2xpbmsiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdKQotCSAgICAgIF0pCi0JICAgIF0pCi0JICBdKQotCV0pCi0gICAgICBdKQotICAgIDs7Ci0gIGVzYWMKLQotICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3BlbiIgIT0geG5vOyB0aGVuCi0gICAgZW5hYmxlX2Rsb3Blbj15ZXMKLSAgZWxzZQotICAgIGVuYWJsZV9kbG9wZW49bm8KLSAgZmkKLQotICBjYXNlICRsdF9jdl9kbG9wZW4gaW4KLSAgZGxvcGVuKQotICAgIHNhdmVfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLSAgICB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXMgJiYgQ1BQRkxBR1M9IiRDUFBGTEFHUyAtREhBVkVfRExGQ05fSCIKLQotICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRleHBvcnRfZHluYW1pY19mbGFnX3NwZWNcIgotCi0gICAgc2F2ZV9MSUJTPSIkTElCUyIKLSAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCi0KLSAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAotCSAgbHRfY3ZfZGxvcGVuX3NlbGYsIFtkbmwKLQkgIF9MVF9BQ19UUllfRExPUEVOX1NFTEYoCi0JICAgIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzLAotCSAgICBsdF9jdl9kbG9wZW5fc2VsZj1ubywgbHRfY3ZfZGxvcGVuX3NlbGY9Y3Jvc3MpCi0gICAgXSkKLQotICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgotICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGZdLAotICAgIAkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAotCSAgX0xUX0FDX1RSWV9ETE9QRU5fU0VMRigKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKLQkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQotICAgICAgXSkKLSAgICBmaQotCi0gICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgotICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0gICAgTElCUz0iJHNhdmVfTElCUyIKLSAgICA7OwotICBlc2FjCi0KLSAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7Ci0gICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7Ci0gIGVzYWMKLQotICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KLSAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKLSAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7Ci0gIGVzYWMKLWZpCi1dKSMgQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0NDX0NfTyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBDaGVjayB0byBzZWUgaWYgb3B0aW9ucyAtYyBhbmQgLW8gYXJlIHNpbXVsdGFuZW91c2x5IHN1cHBvcnRlZCBieSBjb21waWxlcgotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DQ19DX09dLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfU0VEXSlkbmwKLUFDX1JFUVVJUkUoW19MVF9BQ19TWVNfQ09NUElMRVJdKWRubAotQUNfQ0FDSEVfQ0hFQ0soW2lmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHRdLAotICBbX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpXSwKLSAgW19MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKT1ubwotICAgJHJtIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCi0gICBta2RpciBjb25mdGVzdAotICAgY2QgY29uZnRlc3QKLSAgIG1rZGlyIG91dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOl9fb2xpbmVfXzogJGx0X2NvbXBpbGVcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5vdXQvY29uZnRlc3QuZXJyKQotICAgYWNfc3RhdHVzPSQ/Ci0gICBjYXQgb3V0L2NvbmZ0ZXN0LmVyciA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBlY2hvICIkYXNfbWU6X19vbGluZV9fOiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAotICAgdGhlbgotICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAotICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCi0gICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBvdXQvY29uZnRlc3QuZXJyID5vdXQvY29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBvdXQvY29uZnRlc3QuZXIyIHx8IGRpZmYgb3V0L2NvbmZ0ZXN0LmV4cCBvdXQvY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCi0gICAgIGZpCi0gICBmaQotICAgY2htb2QgdSt3IC4gMj4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi1dKQotXSkjIEFDX0xJQlRPT0xfUFJPR19DQ19DX08KLQotCi0jIEFDX0xJQlRPT0xfU1lTX0hBUkRfTElOS19MT0NLUyhbVEFHTkFNRV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHRvIHNlZSBpZiB3ZSBjYW4gZG8gaGFyZCBsaW5rcyB0byBsb2NrIHNvbWUgZmlsZXMgaWYgbmVlZGVkCi1BQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfTE9DS10pZG5sCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rc10pCi0gIGhhcmRfbGlua3M9eWVzCi0gICRybSBjb25mdGVzdCoKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+L2Rldi9udWxsICYmIGhhcmRfbGlua3M9bm8KLSAgdG91Y2ggY29uZnRlc3QuYQotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4mNSB8fCBoYXJkX2xpbmtzPW5vCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIEFDX01TR19SRVNVTFQoWyRoYXJkX2xpbmtzXSkKLSAgaWYgdGVzdCAiJGhhcmRfbGlua3MiID0gbm87IHRoZW4KLSAgICBBQ19NU0dfV0FSTihbYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBgLWMgLW8nLCBzbyBgbWFrZSAtaicgbWF5IGJlIHVuc2FmZV0pCi0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTCi0KLQotIyBBQ19MSUJUT09MX09CSkRJUgotIyAtLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfT0JKRElSXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIG9iamRpcl0sIFtsdF9jdl9vYmpkaXJdLAotW3JtIC1mIC5saWJzIDI+L2Rldi9udWxsCi1ta2RpciAubGlicyAyPi9kZXYvbnVsbAotaWYgdGVzdCAtZCAubGliczsgdGhlbgotICBsdF9jdl9vYmpkaXI9LmxpYnMKLWVsc2UKLSAgIyBNUy1ET1MgZG9lcyBub3QgYWxsb3cgZmlsZW5hbWVzIHRoYXQgYmVnaW4gd2l0aCBhIGRvdC4KLSAgbHRfY3Zfb2JqZGlyPV9saWJzCi1maQotcm1kaXIgLmxpYnMgMj4vZGV2L251bGxdKQotb2JqZGlyPSRsdF9jdl9vYmpkaXIKLV0pIyBBQ19MSUJUT09MX09CSkRJUgotCi0KLSMgQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIGhhcmRjb2RpbmcgYXR0cmlidXRlcy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9Ci1pZiB0ZXN0IC1uICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8IFwKLSAgIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKHJ1bnBhdGhfdmFyLCAkMSkiIHx8IFwKLSAgIHRlc3QgIlgkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSIgPSAiWHllcyIgOyB0aGVuCi0KLSAgIyBXZSBjYW4gaGFyZGNvZGUgbm9uLWV4aXN0YW50IGRpcmVjdG9yaWVzLgotICBpZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKSIgIT0gbm8gJiYKLSAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQotICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5Ci0gICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpPXVuc3VwcG9ydGVkCi1maQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSldKQotCi1pZiB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKSIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi1dKSMgQUNfTElCVE9PTF9QUk9HX0xEX0hBUkRDT0RFX0xJQlBBVEgKLQotCi0jIEFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdLAotW3N0cmlwbGliPQotb2xkX3N0cmlwbGliPQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGVdKQotaWYgdGVzdCAtbiAiJFNUUklQIiAmJiAkU1RSSVAgLVYgMj4mMSB8IGdyZXAgIkdOVSBzdHJpcCIgPi9kZXYvbnVsbDsgdGhlbgotICB0ZXN0IC16ICIkb2xkX3N0cmlwbGliIiAmJiBvbGRfc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLWRlYnVnIgotICB0ZXN0IC16ICIkc3RyaXBsaWIiICYmIHN0cmlwbGliPSIkU1RSSVAgLS1zdHJpcC11bm5lZWRlZCIKLSAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLWVsc2UKLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAotICBjYXNlICRob3N0X29zIGluCi0gICBkYXJ3aW4qKQotICAgICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCi0gICAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgotICAgICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCi0gICAgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotICAgICAgIGVsc2UKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotZmkKLSAgICAgICA7OwotICAgKikKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotICAgIDs7Ci0gIGVzYWMKLWZpCi1dKSMgQUNfTElCVE9PTF9TWVNfTElCX1NUUklQCi0KLQotIyBBQ19MSUJUT09MX1NZU19EWU5BTUlDX0xJTktFUgotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19NU0dfQ0hFQ0tJTkcoW2R5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljc10pCi1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKLW00X2lmKCQxLFtdLFsKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7Ci0gICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKLSAgZXNhYwotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICBpZiBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgotICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKLSAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKLSAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKLSAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgZWxzZQotICAgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICBmaQotICAjIE9rLCBub3cgd2UgaGF2ZSB0aGUgcGF0aCwgc2VwYXJhdGVkIGJ5IHNwYWNlcywgd2UgY2FuIHN0ZXAgdGhyb3VnaCBpdAotICAjIGFuZCBhZGQgbXVsdGlsaWIgZGlyIGlmIG5lY2Vzc2FyeS4KLSAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9Ci0gIGx0X211bHRpX29zX2Rpcj1gJENDICRDUFBGTEFHUyAkQ0ZMQUdTICRMREZMQUdTIC1wcmludC1tdWx0aS1vcy1kaXJlY3RvcnkgMj4vZGV2L251bGxgCi0gIGZvciBsdF9zeXNfcGF0aCBpbiAkbHRfc2VhcmNoX3BhdGhfc3BlYzsgZG8KLSAgICBpZiB0ZXN0IC1kICIkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciI7IHRoZW4KLSAgICAgIGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoLyRsdF9tdWx0aV9vc19kaXIiCi0gICAgZWxzZQotICAgICAgdGVzdCAtZCAiJGx0X3N5c19wYXRoIiAmJiBcCi0JbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgiCi0gICAgZmkKLSAgZG9uZQotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyB8IGF3ayAnCi1CRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7Ci0gIGx0X2Zvbz0iIjsKLSAgbHRfY291bnQ9MDsKLSAgZm9yIChsdF9pID0gTkY7IGx0X2kgPiAwOyBsdF9pLS0pIHsKLSAgICBpZiAoJGx0X2kgIT0gIiIgJiYgJGx0X2kgIT0gIi4iKSB7Ci0gICAgICBpZiAoJGx0X2kgPT0gIi4uIikgewotICAgICAgICBsdF9jb3VudCsrOwotICAgICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKGx0X2NvdW50ID09IDApIHsKLSAgICAgICAgICBsdF9mb289Ii8iICRsdF9pIGx0X2ZvbzsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBsdF9jb3VudC0tOwotICAgICAgICB9Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtbbHRfZm9vXV0rKzsgfQotICBpZiAobHRfZnJlcVtbbHRfZm9vXV0gPT0gMSkgeyBwcmludCBsdF9mb287IH0KLX0nYAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gJGx0X3NlYXJjaF9wYXRoX3NwZWNgCi1lbHNlCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLWZpXSkKLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4W1s0LTldXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgICAjIEFJWCA1IHN1cHBvcnRzIElBNjQKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBlbHNlCi0gICAgIyBXaXRoIEdDQyB1cCB0byAyLjk1LngsIGNvbGxlY3QyIHdvdWxkIGNyZWF0ZSBhbiBpbXBvcnQgZmlsZQotICAgICMgZm9yIGRlcGVuZGVuY2UgbGlicmFyaWVzLiAgVGhlIGltcG9ydCBmaWxlIHdvdWxkIHN0YXJ0IHdpdGgKLSAgICAjIHRoZSBsaW5lIGAjISAuJy4gIFRoaXMgd291bGQgY2F1c2UgdGhlIGdlbmVyYXRlZCBsaWJyYXJ5IHRvCi0gICAgIyBkZXBlbmQgb24gYC4nLCBhbHdheXMgYW4gaW52YWxpZCBsaWJyYXJ5LiAgVGhpcyB3YXMgZml4ZWQgaW4KLSAgICAjIGRldmVsb3BtZW50IHNuYXBzaG90cyBvZiBHQ0MgcHJpb3IgdG8gMy4wLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeDQgfCBhaXg0LltbMDFdXSB8IGFpeDQuW1swMV1dLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRybSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKLSAgOzsKLQotYmVvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLSAgc2hsaWJwYXRoX3Zhcj1MSUJSQVJZX1BBVEgKLSAgOzsKLQotYnNkaVtbNDVdXSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGxdOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKLSAgICA7OwotICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCi0gICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgotICBzaGxpYnBhdGhfdmFyPVBBVEgKLSAgOzsKLQotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJwotICBtNF9pZihbJDFdLCBbXSxbCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xvY2FsL2xpYiJdKSAKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCi0gIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZHluYW1pY19saW5rZXI9J0ludGVyaXggMy54IGxkLnNvLjEgKFBFLCBsaWtlIEVMRiknCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLWlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBub25zdG9wdXgqKSB2ZXJzaW9uX3R5cGU9bm9uc3RvcHV4IDs7Ci0gICAgKikKLQlpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0JCXZlcnNpb25fdHlwZT1saW51eAotCWVsc2UKLQkJdmVyc2lvbl90eXBlPWlyaXgKLQlmaSA7OwotICBlc2FjCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBjYXNlICRob3N0X29zIGluCi0gIGlyaXg1KiB8IG5vbnN0b3B1eCopCi0gICAgbGlic3VmZj0gc2hsaWJzdWZmPQotICAgIDs7Ci0gICopCi0gICAgY2FzZSAkTEQgaW4gIyBsaWJ0b29sLm00IHdpbGwgYWRkIG9uZSBvZiB0aGVzZSBzd2l0Y2hlcyB0byBMRAotICAgICotMzJ8KiItMzIgInwqLW1lbGYzMmJzbWlwfCoiLW1lbGYzMmJzbWlwICIpCi0gICAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICAgKi1uMzJ8KiItbjMyICJ8Ki1tZWxmMzJibWlwbjMyfCoiLW1lbGYzMmJtaXBuMzIgIikKLSAgICAgIGxpYnN1ZmY9MzIgc2hsaWJzdWZmPU4zMiBsaWJtYWdpYz1OMzI7OwotICAgICotNjR8KiItNjQgInwqLW1lbGY2NGJtaXB8KiItbWVsZjY0Ym1pcCAiKQotICAgICAgbGlic3VmZj02NCBzaGxpYnN1ZmY9NjQgbGlibWFnaWM9NjQtYml0OzsKLSAgICAqKSBsaWJzdWZmPSBzaGxpYnN1ZmY9IGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUlkke3NobGlic3VmZn1fUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0gL3Vzci9sb2NhbC9saWIke2xpYnN1ZmZ9IgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLSMgTm8gc2hhcmVkIGxpYiBzdXBwb3J0IGZvciBMaW51eCBvbGRsZCwgYW91dCwgb3IgY29mZi4KLWxpbnV4Km9sZGxkKiB8IGxpbnV4KmFvdXQqIHwgbGludXgqY29mZiopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLSMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCi0gICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAotICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0KLSAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKLSAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZHluYW1pY19saW5rZXJdKQotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNdLAotW2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyJdKQotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sCi1bbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyJdKQotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotXSkjIEFDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSCi0KLQotIyBfTFRfQUNfVEFHQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfVEFHQ09ORklHXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1BQ19BUkdfV0lUSChbdGFnc10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtdGFnc0A8OkA9VEFHU0A6PkBdLAotICAgICAgICBbaW5jbHVkZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIEA8OkBhdXRvbWF0aWNAOj5AXSldLAotICAgIFt0YWduYW1lcz0iJHdpdGh2YWwiXSkKLQotaWYgdGVzdCAtZiAiJGx0bWFpbiIgJiYgdGVzdCAtbiAiJHRhZ25hbWVzIjsgdGhlbgotICBpZiB0ZXN0ICEgLWYgIiR7b2ZpbGV9IjsgdGhlbgotICAgIEFDX01TR19XQVJOKFtvdXRwdXQgZmlsZSBgJG9maWxlJyBkb2VzIG5vdCBleGlzdF0pCi0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgQUNfTVNHX1dBUk4oW291dHB1dCBmaWxlIGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0XSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfV0FSTihbdXNpbmcgYExUQ0M9JExUQ0MnLCBleHRyYWN0ZWQgZnJvbSBgJG9maWxlJ10pCi0gICAgZmkKLSAgZmkKLSAgaWYgdGVzdCAteiAiJExUQ0ZMQUdTIjsgdGhlbgotICAgIGV2YWwgImAkU0hFTEwgJHtvZmlsZX0gLS1jb25maWcgfCBncmVwICdeTFRDRkxBR1M9J2AiCi0gIGZpCi0KLSAgIyBFeHRyYWN0IGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBpbiAkb2ZpbGUuCi0gICMgTm90ZSB0aGF0IHRoaXMgYXNzdW1lcyB0aGUgZW50aXJlIGxpc3QgaXMgb24gb25lIGxpbmUuCi0gIGF2YWlsYWJsZV90YWdzPWBncmVwICJeYXZhaWxhYmxlX3RhZ3M9IiAiJHtvZmlsZX0iIHwgJFNFRCAtZSAncy9hdmFpbGFibGVfdGFncz1cKC4qJFwpL1wxLycgLWUgJ3MvXCIvL2cnYAotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICBmb3IgdGFnbmFtZSBpbiAkdGFnbmFtZXM7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgIyBDaGVjayB3aGV0aGVyIHRhZ25hbWUgY29udGFpbnMgb25seSB2YWxpZCBjaGFyYWN0ZXJzCi0gICAgY2FzZSBgJGVjaG8gIlgkdGFnbmFtZSIgfCAkWHNlZCAtZSAnczpbWy1fQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejEyMzQ1Njc4OTAsL11dOjpnJ2AgaW4KLSAgICAiIikgOzsKLSAgICAqKSAgQUNfTVNHX0VSUk9SKFtpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCi0JOzsKLSAgICBlc2FjCi0KLSAgICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiR7b2ZpbGV9IiA+IC9kZXYvbnVsbAotICAgIHRoZW4KLSAgICAgIEFDX01TR19FUlJPUihbdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzXSkKLSAgICBmaQotCi0gICAgIyBVcGRhdGUgdGhlIGxpc3Qgb2YgYXZhaWxhYmxlIHRhZ3MuCi0gICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiOyB0aGVuCi0gICAgICBlY2hvIGFwcGVuZGluZyBjb25maWd1cmF0aW9uIHRhZyBcIiR0YWduYW1lXCIgdG8gJG9maWxlCi0KLSAgICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgIENYWCkKLQlpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotCSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLQkgICAgKHRlc3QgIlgkQ1hYIiAhPSAiWGcrKyIpKSkgOyB0aGVuCi0JICBBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJRwotCWVsc2UKLQkgIHRhZ25hbWU9IiIKLQlmaQotCTs7Ci0KLSAgICAgIEY3NykKLQlpZiB0ZXN0IC1uICIkRjc3IiAmJiB0ZXN0ICJYJEY3NyIgIT0gIlhubyI7IHRoZW4KLQkgIEFDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgR0NKKQotCWlmIHRlc3QgLW4gIiRHQ0oiICYmIHRlc3QgIlgkR0NKIiAhPSAiWG5vIjsgdGhlbgotCSAgQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUcKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBSQykKLQlBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0JOzsKLQotICAgICAgKikKLQlBQ19NU0dfRVJST1IoW1Vuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZV0pCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBcHBlbmQgdGhlIG5ldyB0YWcgbmFtZSB0byB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICAgIGlmIHRlc3QgLW4gIiR0YWduYW1lIiA7IHRoZW4KLSAgICAgIGF2YWlsYWJsZV90YWdzPSIkYXZhaWxhYmxlX3RhZ3MgJHRhZ25hbWUiCi0gICAgZmkKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotCi0gICMgTm93IHN1YnN0aXR1dGUgdGhlIHVwZGF0ZWQgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgaWYgZXZhbCAic2VkIC1lICdzL15hdmFpbGFibGVfdGFncz0uKlwkL2F2YWlsYWJsZV90YWdzPVwiJGF2YWlsYWJsZV90YWdzXCIvJyBcIiRvZmlsZVwiID4gXCIke29maWxlfVRcIiI7IHRoZW4KLSAgICBtdiAiJHtvZmlsZX1UIiAiJG9maWxlIgotICAgIGNobW9kICt4ICIkb2ZpbGUiCi0gIGVsc2UKLSAgICBybSAtZiAiJHtvZmlsZX1UIgotICAgIEFDX01TR19FUlJPUihbdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuXSkKLSAgZmkKLWZpCi1dKSMgX0xUX0FDX1RBR0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9ETE9QRU4KLSMgLS0tLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIGNoZWNrcyBmb3IgZGxvcGVuIHN1cHBvcnQKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl0sCi0gW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSkKLV0pIyBBQ19MSUJUT09MX0RMT1BFTgotCi0KLSMgQUNfTElCVE9PTF9XSU4zMl9ETEwKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgZGVjbGFyZSBwYWNrYWdlIHN1cHBvcnQgZm9yIGJ1aWxkaW5nIHdpbjMyIERMTHMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX1dJTjMyX0RMTF0sCi1bQUNfQkVGT1JFKFskMF0sIFtBQ19MSUJUT09MX1NFVFVQXSkKLV0pIyBBQ19MSUJUT09MX1dJTjMyX0RMTAotCi0KLSMgQUNfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBpbXBsZW1lbnQgdGhlIC0tZW5hYmxlLXNoYXJlZCBmbGFnCi0jIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KLUFDX0RFRlVOKFtBQ19FTkFCTEVfU0hBUkVEXSwKLVtkZWZpbmUoW0FDX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIGlmZWxzZSgkMSwgbm8sIG5vLCB5ZXMpKWRubAotQUNfQVJHX0VOQUJMRShbc2hhcmVkXSwKLSAgICBbQUNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXNoYXJlZEA8OkA9UEtHU0A6PkBdLAotCVtidWlsZCBzaGFyZWQgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfU0hBUkVEX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX3NoYXJlZD1dQUNfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9TSEFSRUQKLQotCi0jIEFDX0RJU0FCTEVfU0hBUkVECi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCBzaGFyZWQgZmxhZyB0byAtLWRpc2FibGUtc2hhcmVkCi1BQ19ERUZVTihbQUNfRElTQUJMRV9TSEFSRURdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9TSEFSRUQobm8pCi1dKSMgQUNfRElTQUJMRV9TSEFSRUQKLQotCi0jIEFDX0VOQUJMRV9TVEFUSUMoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX1NUQVRJQ10sCi1bZGVmaW5lKFtBQ19FTkFCTEVfU1RBVElDX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW3N0YXRpY10sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zdGF0aWNAPDpAPVBLR1NAOj5AXSwKLQlbYnVpbGQgc3RhdGljIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCi0gICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OwotICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7Ci0gICAgKikKLSAgICAgZW5hYmxlX3N0YXRpYz1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zdGF0aWM9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX3N0YXRpYz1dQUNfRU5BQkxFX1NUQVRJQ19ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9TVEFUSUMKLQotCi0jIEFDX0RJU0FCTEVfU1RBVElDCi0jIC0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCBzdGF0aWMgZmxhZyB0byAtLWRpc2FibGUtc3RhdGljCi1BQ19ERUZVTihbQUNfRElTQUJMRV9TVEFUSUNdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9TVEFUSUMobm8pCi1dKSMgQUNfRElTQUJMRV9TVEFUSUMKLQotCi0jIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwoW0RFRkFVTFRdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZwotIyBERUZBVUxUIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYHllcycuCi1BQ19ERUZVTihbQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCi1bZGVmaW5lKFtBQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRdLCBpZmVsc2UoJDEsIG5vLCBubywgeWVzKSlkbmwKLUFDX0FSR19FTkFCTEUoW2Zhc3QtaW5zdGFsbF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1mYXN0LWluc3RhbGxAPDpAPVBLR1NAOj5AXSwKLSAgICBbb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uIEA8OkBkZWZhdWx0PV1BQ19FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKLSAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjXSwKLSAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dQUNfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUKQotXSkjIEFDX0VOQUJMRV9GQVNUX0lOU1RBTEwKLQotCi0jIEFDX0RJU0FCTEVfRkFTVF9JTlNUQUxMCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldCB0aGUgZGVmYXVsdCB0byAtLWRpc2FibGUtZmFzdC1pbnN0YWxsCi1BQ19ERUZVTihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLUFDX0VOQUJMRV9GQVNUX0lOU1RBTEwobm8pCi1dKSMgQUNfRElTQUJMRV9GQVNUX0lOU1RBTEwKLQotCi0jIEFDX0xJQlRPT0xfUElDTU9ERShbTU9ERV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnCi0jIE1PREUgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgYm90aCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QSUNNT0RFXSwKLVtBQ19CRUZPUkUoWyQwXSxbQUNfTElCVE9PTF9TRVRVUF0pZG5sCi1waWNfbW9kZT1pZmVsc2UoJCMsMSwkMSxkZWZhdWx0KQotXSkjIEFDX0xJQlRPT0xfUElDTU9ERQotCi0KLSMgQUNfUFJPR19FR1JFUAotIyAtLS0tLS0tLS0tLS0tCi0jIFRoaXMgaXMgcHJlZGVmaW5lZCBzdGFydGluZyB3aXRoIEF1dG9jb25mIDIuNTQsIHNvIHRoaXMgY29uZGl0aW9uYWwKLSMgZGVmaW5pdGlvbiBjYW4gYmUgcmVtb3ZlZCBvbmNlIHdlIHJlcXVpcmUgQXV0b2NvbmYgMi41NCBvciBsYXRlci4KLW00X2lmbmRlZihbQUNfUFJPR19FR1JFUF0sIFtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0sCi1bQUNfQ0FDSEVfQ0hFQ0soW2ZvciBlZ3JlcF0sIFthY19jdl9wcm9nX2VncmVwXSwKLSAgIFtpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi0gICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKLSAgICBmaV0pCi0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKLSBBQ19TVUJTVChbRUdSRVBdKQotXSldKQotCi0KLSMgQUNfUEFUSF9UT09MX1BSRUZJWAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQotQUNfREVGVU4oW0FDX1BBVEhfVE9PTF9QUkVGSVhdLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRUdSRVBdKWRubAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJDFdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTUFHSUNfQ01ELAotW2Nhc2UgJE1BR0lDX0NNRCBpbgotW1tcXC8qXSB8ICA/OltcXC9dKl0pCi0gIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSopCi0gIGx0X3NhdmVfTUFHSUNfQ01EPSIkTUFHSUNfQ01EIgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWRubCAkYWNfZHVtbXkgZm9yY2VzIHNwbGl0dGluZyBvbiBjb25zdGFudCB1c2VyLXN1cHBsaWVkIHBhdGhzLgotZG5sIFBPU0lYLjIgd29yZCBzcGxpdHRpbmcgaXMgZG9uZSBvbmx5IG9uIHRoZSBvdXRwdXQgb2Ygd29yZCBleHBhbnNpb25zLAotZG5sIG5vdCBldmVyeSB3b3JkLiAgVGhpcyBjbG9zZXMgYSBsb25nc3RhbmRpbmcgc2ggc2VjdXJpdHkgaG9sZS4KLSAgYWNfZHVtbXk9ImlmZWxzZShbJDJdLCAsICRQQVRILCBbJDJdKSIKLSAgZm9yIGFjX2RpciBpbiAkYWNfZHVtbXk7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICRhY19kaXIvJDE7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTUFHSUNfQ01EPSIkYWNfZGlyLyQxIgotICAgICAgaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfdGVzdF9maWxlIjsgdGhlbgotCWNhc2UgJGRlcGxpYnNfY2hlY2tfbWV0aG9kIGluCi0JImZpbGVfbWFnaWMgIiopCi0JICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogImZpbGVfbWFnaWMgXCguKlwpImAKLQkgIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotCSAgaWYgZXZhbCAkZmlsZV9tYWdpY19jbWQgXCRmaWxlX21hZ2ljX3Rlc3RfZmlsZSAyPiAvZGV2L251bGwgfAotCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGNhdCA8PEVPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiB0aGUgY29tbWFuZCBsaWJ0b29sIHVzZXMgdG8gZGV0ZWN0IHNoYXJlZCBsaWJyYXJpZXMsCi0qKiogJGZpbGVfbWFnaWNfY21kLCBwcm9kdWNlcyBvdXRwdXQgdGhhdCBsaWJ0b29sIGNhbm5vdCByZWNvZ25pemUuCi0qKiogVGhlIHJlc3VsdCBpcyB0aGF0IGxpYnRvb2wgbWF5IGZhaWwgdG8gcmVjb2duaXplIHNoYXJlZCBsaWJyYXJpZXMKLSoqKiBhcyBzdWNoLiAgVGhpcyB3aWxsIGFmZmVjdCB0aGUgY3JlYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMgdGhhdAotKioqIGRlcGVuZCBvbiBzaGFyZWQgbGlicmFyaWVzLCBidXQgcHJvZ3JhbXMgbGlua2VkIHdpdGggc3VjaCBsaWJ0b29sCi0qKiogbGlicmFyaWVzIHdpbGwgd29yayByZWdhcmRsZXNzIG9mIHRoaXMgcHJvYmxlbS4gIE5ldmVydGhlbGVzcywgeW91Ci0qKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCi0qKiogYnVnLWxpYnRvb2xAZ251Lm9yZwotCi1FT0YKLQkgIGZpIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGJyZWFrCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCi0gIDs7Ci1lc2FjXSkKLU1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgotaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLV0pIyBBQ19QQVRIX1RPT0xfUFJFRklYCi0KLQotIyBBQ19QQVRIX01BR0lDCi0jIC0tLS0tLS0tLS0tLS0KLSMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKLUFDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSwKLVtBQ19QQVRIX1RPT0xfUFJFRklYKCR7YWNfdG9vbF9wcmVmaXh9ZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLWlmIHRlc3QgLXogIiRsdF9jdl9wYXRoX01BR0lDX0NNRCI7IHRoZW4KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAgIEFDX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKLSAgZWxzZQotICAgIE1BR0lDX0NNRD06Ci0gIGZpCi1maQotXSkjIEFDX1BBVEhfTUFHSUMKLQotCi0jIEFDX1BST0dfTEQKLSMgLS0tLS0tLS0tLQotIyBmaW5kIHRoZSBwYXRobmFtZSB0byB0aGUgR05VIG9yIG5vbi1HTlUgbGlua2VyCi1BQ19ERUZVTihbQUNfUFJPR19MRF0sCi1bQUNfQVJHX1dJVEgoW2dudS1sZF0sCi0gICAgW0FDX0hFTFBfU1RSSU5HKFstLXdpdGgtZ251LWxkXSwKLQlbYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIEA8OkBkZWZhdWx0PW5vQDo+QF0pXSwKLSAgICBbdGVzdCAiJHdpdGh2YWwiID0gbm8gfHwgd2l0aF9nbnVfbGQ9eWVzXSwKLSAgICBbd2l0aF9nbnVfbGQ9bm9dKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfUkVRVUlSRShbQUNfUFJPR19DQ10pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCi1BQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfQlVJTERdKWRubAotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKLSAgY2FzZSAkaG9zdCBpbgotICAqLSotbWluZ3cqKQotICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKLSAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7Ci0gICopCi0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OwotICBlc2FjCi0gIGNhc2UgJGFjX3Byb2cgaW4KLSAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KLSAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJwotICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCi0gICAgICBkb25lCi0gICAgICB0ZXN0IC16ICIkTEQiICYmIExEPSIkYWNfcHJvZyIKLSAgICAgIDs7Ci0gICIiKQotICAgICMgSWYgaXQgZmFpbHMsIHRoZW4gcHJldGVuZCB3ZSBhcmVuJ3QgdXNpbmcgR0NDLgotICAgIGFjX3Byb2c9bGQKLSAgICA7OwotICAqKQotICAgICMgSWYgaXQgaXMgcmVsYXRpdmUsIHRoZW4gc2VhcmNoIGZvciB0aGUgZmlyc3QgbGQgaW4gUEFUSC4KLSAgICB3aXRoX2dudV9sZD11bmtub3duCi0gICAgOzsKLSAgZXNhYwotZWxpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIEdOVSBsZF0pCi1lbHNlCi0gIEFDX01TR19DSEVDS0lORyhbZm9yIG5vbi1HTlUgbGRdKQotZmkKLUFDX0NBQ0hFX1ZBTChsdF9jdl9wYXRoX0xELAotW2lmIHRlc3QgLXogIiRMRCI7IHRoZW4KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gIGZvciBhY19kaXIgaW4gJFBBVEg7IGRvCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgdGVzdCAteiAiJGFjX2RpciIgJiYgYWNfZGlyPS4KLSAgICBpZiB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nIiB8fCB0ZXN0IC1mICIkYWNfZGlyLyRhY19wcm9nJGFjX2V4ZWV4dCI7IHRoZW4KLSAgICAgIGx0X2N2X3BhdGhfTEQ9IiRhY19kaXIvJGFjX3Byb2ciCi0gICAgICAjIENoZWNrIHRvIHNlZSBpZiB0aGUgcHJvZ3JhbSBpcyBHTlUgbGQuICBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24sCi0gICAgICAjIGJ1dCBhcHBhcmVudGx5IHNvbWUgdmFyaWFudHMgb2YgR05VIGxkIG9ubHkgYWNjZXB0IC12LgotICAgICAgIyBCcmVhayBvbmx5IGlmIGl0IHdhcyB0aGUgR05VL25vbi1HTlUgbGQgdGhhdCB3ZSBwcmVmZXIuCi0gICAgICBjYXNlIGAiJGx0X2N2X3BhdGhfTEQiIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSAgICAgICpHTlUqIHwgKid3aXRoIEJGRCcqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0gbm8gJiYgYnJlYWsKLQk7OwotICAgICAgKikKLQl0ZXN0ICIkd2l0aF9nbnVfbGQiICE9IHllcyAmJiBicmVhawotCTs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgZG9uZQotICBJRlM9IiRsdF9zYXZlX2lmcyIKLWVsc2UKLSAgbHRfY3ZfcGF0aF9MRD0iJExEIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLWZpXSkKLUxEPSIkbHRfY3ZfcGF0aF9MRCIKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVCgkTEQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQobm8pCi1maQotdGVzdCAteiAiJExEIiAmJiBBQ19NU0dfRVJST1IoW25vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIXSkKLUFDX1BST0dfTERfR05VCi1dKSMgQUNfUFJPR19MRAotCi0KLSMgQUNfUFJPR19MRF9HTlUKLSMgLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19QUk9HX0xEX0dOVV0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCi1BQ19DQUNIRV9DSEVDSyhbaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGRdLCBsdF9jdl9wcm9nX2dudV9sZCwKLVsjIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiBoZXJlLCBidXQgYXBwYXJlbnRseSBzb21lIEdOVSBsZHMgb25seSBhY2NlcHQgLXYuCi1jYXNlIGAkTEQgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotKkdOVSogfCAqJ3dpdGggQkZEJyopCi0gIGx0X2N2X3Byb2dfZ251X2xkPXllcwotICA7OwotKikKLSAgbHRfY3ZfcHJvZ19nbnVfbGQ9bm8KLSAgOzsKLWVzYWNdKQotd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCi1dKSMgQUNfUFJPR19MRF9HTlUKLQotCi0jIEFDX1BST0dfTERfUkVMT0FEX0ZMQUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBmaW5kIHJlbG9hZCBmbGFnIGZvciBsaW5rZXIKLSMgICAtLSBQT1JUTUUgU29tZSBsaW5rZXJzIG1heSBuZWVkIGEgZGlmZmVyZW50IHJlbG9hZCBmbGFnLgotQUNfREVGVU4oW0FDX1BST0dfTERfUkVMT0FEX0ZMQUddLAotW0FDX0NBQ0hFX0NIRUNLKFtmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzXSwKLSAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWcsCi0gIFtsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInXSkKLXJlbG9hZF9mbGFnPSRsdF9jdl9sZF9yZWxvYWRfZmxhZwotY2FzZSAkcmVsb2FkX2ZsYWcgaW4KLSIiIHwgIiAiKikgOzsKLSopIHJlbG9hZF9mbGFnPSIgJHJlbG9hZF9mbGFnIiA7OwotZXNhYwotcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotY2FzZSAkaG9zdF9vcyBpbgotICBkYXJ3aW4qKQotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCi0gICAgZWxzZQotICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGZpCi0gICAgOzsKLWVzYWMKLV0pIyBBQ19QUk9HX0xEX1JFTE9BRF9GTEFHCi0KLQotIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCi0jICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCi1BQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdLAotW0FDX0NBQ0hFX0NIRUNLKFtob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXNdLAotbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QsCi1bbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRNQUdJQ19DTUQnCi1sdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0KLWx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSd1bmtub3duJwotIyBOZWVkIHRvIHNldCB0aGUgcHJlY2VkaW5nIHZhcmlhYmxlIG9uIGFsbCBwbGF0Zm9ybXMgdGhhdCBzdXBwb3J0Ci0jIGludGVybGlicmFyeSBkZXBlbmRlbmNpZXMuCi0jICdub25lJyAtLSBkZXBlbmRlbmNpZXMgbm90IHN1cHBvcnRlZC4KLSMgYHVua25vd24nIC0tIHNhbWUgYXMgbm9uZSwgYnV0IGRvY3VtZW50cyB0aGF0IHdlIHJlYWxseSBkb24ndCBrbm93LgotIyAncGFzc19hbGwnIC0tIGFsbCBkZXBlbmRlbmNpZXMgcGFzc2VkIHdpdGggbm8gY2hlY2tzLgotIyAndGVzdF9jb21waWxlJyAtLSBjaGVjayBieSBtYWtpbmcgdGVzdCBwcm9ncmFtLgotIyAnZmlsZV9tYWdpYyBbW3JlZ2V4XV0nIC0tIGNoZWNrIGJ5IGxvb2tpbmcgZm9yIGZpbGVzIGluIGxpYnJhcnkgcGF0aAotIyB3aGljaCByZXNwb25kcyB0byB0aGUgJGZpbGVfbWFnaWNfY21kIHdpdGggYSBnaXZlbiBleHRlbmRlZCByZWdleC4KLSMgSWYgeW91IGhhdmUgYGZpbGUnIG9yIGVxdWl2YWxlbnQgb24geW91ciBzeXN0ZW0gYW5kIHlvdSdyZSBub3Qgc3VyZQotIyB3aGV0aGVyIGBwYXNzX2FsbCcgd2lsbCAqYWx3YXlzKiB3b3JrLCB5b3UgcHJvYmFibHkgd2FudCB0aGlzIG9uZS4KLQotY2FzZSAkaG9zdF9vcyBpbgotYWl4W1s0LTldXSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJlb3MqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ic2RpW1s0NV1dKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KLSAgOzsKLQotY3lnd2luKikKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIDs7Ci0KLW1pbmd3KiB8IHB3MzIqKQotICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5Ci0gICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAotICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCBwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpPycKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCi0gIGZpCi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KLSAgICBjYXNlICRob3N0X2NwdSBpbgotICAgIGkqODYgKQotICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KLSAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCi0gICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgZmkKLSAgOzsKLQotZ251KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotaHB1eDEwLjIwKiB8IGhwdXgxMSopCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbWzAtOV1dW1swLTldXVtbMC05XV18RUxGLVtbMC05XV1bWzAtOV1dKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBJQTY0JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2hwdXgzMi9saWJjLnNvCi0gICAgOzsKLSAgaHBwYSo2NCopCi0gICAgW2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJ10KLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKLSAgICA7OwotICAqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dLltbMC05XV0pIHNoYXJlZCBsaWJyYXJ5JwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWludGVyaXhbWzMtOV1dKikKLSAgIyBQSUMgY29kZSBpcyBicm9rZW4gb24gSW50ZXJpeCAzLngsIHRoYXQncyB3aHkgfFwuYSBub3QgfF9waWNcLmEgaGVyZQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbW14vXV0rKFwuc29cLltbMC05XV0rXC5bWzAtOV1dK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotbmV3b3M2KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tNTF1dU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbwotICA7OwotCi1udG8tcW54KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotICA7OwotCi1vcGVuYnNkKikKLSAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfFwuc298X3BpY1wuYSkkJwotICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb1wuW1swLTldXStcLltbMC05XV0rfF9waWNcLmEpJCcKLSAgZmkKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1yZG9zKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotc29sYXJpcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gIG1vdG9yb2xhKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKLSAgICA7OwotICBuY3IpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBzZXF1ZW50KQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKLSAgICA7OwotICBzbmkpCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KLSAgICA7OwotICBzaWVtZW5zKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgcGMpCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotZXNhYwotXSkKLWZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi10ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLV0pIyBBQ19ERVBMSUJTX0NIRUNLX01FVEhPRAotCi0KLSMgQUNfUFJPR19OTQotIyAtLS0tLS0tLS0tCi0jIGZpbmQgdGhlIHBhdGhuYW1lIHRvIGEgQlNELWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKLUFDX0RFRlVOKFtBQ19QUk9HX05NXSwKLVtBQ19DQUNIRV9DSEVDSyhbZm9yIEJTRC1jb21wYXRpYmxlIG5tXSwgbHRfY3ZfcGF0aF9OTSwKLVtpZiB0ZXN0IC1uICIkTk0iOyB0aGVuCi0gICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotICBsdF9jdl9wYXRoX05NPSIkTk0iCi1lbHNlCi0gIGx0X25tX3RvX2NoZWNrPSIke2FjX3Rvb2xfcHJlZml4fW5tIgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiICYmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCi0gICAgbHRfbm1fdG9fY2hlY2s9IiRsdF9ubV90b19jaGVjayBubSIKLSAgZmkKLSAgZm9yIGx0X3RtcF9ubSBpbiAkbHRfbm1fdG9fY2hlY2s7IGRvCi0gICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi0gICAgZm9yIGFjX2RpciBpbiAkUEFUSCAvdXNyL2Njcy9iaW4vZWxmIC91c3IvY2NzL2JpbiAvdXNyL3VjYiAvYmluOyBkbwotICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gICAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgICAgdG1wX25tPSIkYWNfZGlyLyRsdF90bXBfbm0iCi0gICAgICBpZiB0ZXN0IC1mICIkdG1wX25tIiB8fCB0ZXN0IC1mICIkdG1wX25tJGFjX2V4ZWV4dCIgOyB0aGVuCi0JIyBDaGVjayB0byBzZWUgaWYgdGhlIG5tIGFjY2VwdHMgYSBCU0QtY29tcGF0IGZsYWcuCi0JIyBBZGRpbmcgdGhlIGBzZWQgMXEnIHByZXZlbnRzIGZhbHNlIHBvc2l0aXZlcyBvbiBIUC1VWCwgd2hpY2ggc2F5czoKLQkjICAgbm06IHVua25vd24gb3B0aW9uICJCIiBpZ25vcmVkCi0JIyBUcnU2NCdzIG5tIGNvbXBsYWlucyB0aGF0IC9kZXYvbnVsbCBpcyBhbiBpbnZhbGlkIG9iamVjdCBmaWxlCi0JY2FzZSBgIiR0bXBfbm0iIC1CIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCi0JKi9kZXYvbnVsbCogfCAqJ0ludmFsaWQgZmlsZSBvciBvYmplY3QgdHlwZScqKQotCSAgbHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSAtQiIKLQkgIGJyZWFrCi0JICA7OwotCSopCi0JICBjYXNlIGAiJHRtcF9ubSIgLXAgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KLQkgICovZGV2L251bGwqKQotCSAgICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1wIgotCSAgICBicmVhawotCSAgICA7OwotCSAgKikKLQkgICAgbHRfY3ZfcGF0aF9OTT0ke2x0X2N2X3BhdGhfTk09IiR0bXBfbm0ifSAjIGtlZXAgdGhlIGZpcnN0IG1hdGNoLCBidXQKLQkgICAgY29udGludWUgIyBzbyB0aGF0IHdlIGNhbiB0cnkgdG8gZmluZCBvbmUgdGhhdCBzdXBwb3J0cyBCU0QgZmxhZ3MKLQkgICAgOzsKLQkgIGVzYWMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICBkb25lCi0gICAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0gIGRvbmUKLSAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KLWZpXSkKLU5NPSIkbHRfY3ZfcGF0aF9OTSIKLV0pIyBBQ19QUk9HX05NCi0KLQotIyBBQ19DSEVDS19MSUJNCi0jIC0tLS0tLS0tLS0tLS0KLSMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQotQUNfREVGVU4oW0FDX0NIRUNLX0xJQk1dLAotW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKLUxJQk09Ci1jYXNlICRob3N0IGluCi0qLSotYmVvcyogfCAqLSotY3lnd2luKiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQotICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKLSAgOzsKLSotbmNyLXN5c3Y0LjMqKQotICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKLSAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKLSAgOzsKLSopCi0gIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCi0gIDs7Ci1lc2FjCi1dKSMgQUNfQ0hFQ0tfTElCTQotCi0KLSMgQUNfTElCTFRETF9DT05WRU5JRU5DRShbRElSRUNUT1JZXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgc2V0cyBMSUJMVERMIHRvIHRoZSBsaW5rIGZsYWdzIGZvciB0aGUgbGlibHRkbCBjb252ZW5pZW5jZSBsaWJyYXJ5IGFuZAotIyBMVERMSU5DTCB0byB0aGUgaW5jbHVkZSBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaGVhZGVyIGFuZCBhZGRzCi0jIC0tZW5hYmxlLWx0ZGwtY29udmVuaWVuY2UgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuICBMSUJMVERMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aAotIyAnJHt0b3BfYnVpbGRkaXJ9LycgYW5kIExURExJTkNMIHdpbGwgYmUgcHJlZml4ZWQgd2l0aCAnJHt0b3Bfc3JjZGlyfS8nCi0jIChub3RlIHRoZSBzaW5nbGUgcXVvdGVzISkuICBJZiB5b3VyIHBhY2thZ2UgaXMgbm90IGZsYXQgYW5kIHlvdSdyZSBub3QKLSMgdXNpbmcgYXV0b21ha2UsIGRlZmluZSB0b3BfYnVpbGRkaXIgYW5kIHRvcF9zcmNkaXIgYXBwcm9wcmlhdGVseSBpbgotIyB0aGUgTWFrZWZpbGVzLgotQUNfREVGVU4oW0FDX0xJQkxURExfQ09OVkVOSUVOQ0VdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgY2FzZSAkZW5hYmxlX2x0ZGxfY29udmVuaWVuY2UgaW4KLSAgbm8pIEFDX01TR19FUlJPUihbdGhpcyBwYWNrYWdlIG5lZWRzIGEgY29udmVuaWVuY2UgbGlibHRkbF0pIDs7Ci0gICIiKSBlbmFibGVfbHRkbF9jb252ZW5pZW5jZT15ZXMKLSAgICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1jb252ZW5pZW5jZSIgOzsKLSAgZXNhYwotICBMSUJMVERMPScke3RvcF9idWlsZGRpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pL2xpYmx0ZGxjLmxhCi0gIExURExJTkNMPSctSSR7dG9wX3NyY2Rpcn0vJ2lmZWxzZSgkIywxLFskMV0sWydsaWJsdGRsJ10pCi0gICMgRm9yIGJhY2t3YXJkcyBub24tZ2V0dGV4dCBjb25zaXN0ZW50IGNvbXBhdGliaWxpdHkuLi4KLSAgSU5DTFRETD0iJExURExJTkNMIgotXSkjIEFDX0xJQkxURExfQ09OVkVOSUVOQ0UKLQotCi0jIEFDX0xJQkxURExfSU5TVEFMTEFCTEUoW0RJUkVDVE9SWV0pCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIHNldHMgTElCTFRETCB0byB0aGUgbGluayBmbGFncyBmb3IgdGhlIGxpYmx0ZGwgaW5zdGFsbGFibGUgbGlicmFyeSBhbmQKLSMgTFRETElOQ0wgdG8gdGhlIGluY2x1ZGUgZmxhZ3MgZm9yIHRoZSBsaWJsdGRsIGhlYWRlciBhbmQgYWRkcwotIyAtLWVuYWJsZS1sdGRsLWluc3RhbGwgdG8gdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMuICBOb3RlIHRoYXQKLSMgQUNfQ09ORklHX1NVQkRJUlMgaXMgbm90IGNhbGxlZCBoZXJlLiAgSWYgRElSRUNUT1JZIGlzIG5vdCBwcm92aWRlZCwKLSMgYW5kIGFuIGluc3RhbGxlZCBsaWJsdGRsIGlzIG5vdCBmb3VuZCwgaXQgaXMgYXNzdW1lZCB0byBiZSBgbGlibHRkbCcuCi0jIExJQkxUREwgd2lsbCBiZSBwcmVmaXhlZCB3aXRoICcke3RvcF9idWlsZGRpcn0vJyMgYW5kIExURExJTkNMIHdpdGgKLSMgJyR7dG9wX3NyY2Rpcn0vJyAobm90ZSB0aGUgc2luZ2xlIHF1b3RlcyEpLiAgSWYgeW91ciBwYWNrYWdlIGlzIG5vdAotIyBmbGF0IGFuZCB5b3UncmUgbm90IHVzaW5nIGF1dG9tYWtlLCBkZWZpbmUgdG9wX2J1aWxkZGlyIGFuZCB0b3Bfc3JjZGlyCi0jIGFwcHJvcHJpYXRlbHkgaW4gdGhlIE1ha2VmaWxlcy4KLSMgSW4gdGhlIGZ1dHVyZSwgdGhpcyBtYWNybyBtYXkgaGF2ZSB0byBiZSBjYWxsZWQgYWZ0ZXIgQUNfUFJPR19MSUJUT09MLgotQUNfREVGVU4oW0FDX0xJQkxURExfSU5TVEFMTEFCTEVdLAotW0FDX0JFRk9SRShbJDBdLFtBQ19MSUJUT09MX1NFVFVQXSlkbmwKLSAgQUNfQ0hFQ0tfTElCKGx0ZGwsIGx0X2RsaW5pdCwKLSAgW3Rlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgIT0geHllcyAmJiBlbmFibGVfbHRkbF9pbnN0YWxsPW5vXSwKLSAgW2lmIHRlc3QgeCIkZW5hYmxlX2x0ZGxfaW5zdGFsbCIgPSB4bm87IHRoZW4KLSAgICAgQUNfTVNHX1dBUk4oW2xpYmx0ZGwgbm90IGluc3RhbGxlZCwgYnV0IGluc3RhbGxhdGlvbiBkaXNhYmxlZF0pCi0gICBlbHNlCi0gICAgIGVuYWJsZV9sdGRsX2luc3RhbGw9eWVzCi0gICBmaQotICBdKQotICBpZiB0ZXN0IHgiJGVuYWJsZV9sdGRsX2luc3RhbGwiID0geCJ5ZXMiOyB0aGVuCi0gICAgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAtLWVuYWJsZS1sdGRsLWluc3RhbGwiCi0gICAgTElCTFRETD0nJHt0b3BfYnVpbGRkaXJ9LydpZmVsc2UoJCMsMSxbJDFdLFsnbGlibHRkbCddKS9saWJsdGRsLmxhCi0gICAgTFRETElOQ0w9Jy1JJHt0b3Bfc3JjZGlyfS8naWZlbHNlKCQjLDEsWyQxXSxbJ2xpYmx0ZGwnXSkKLSAgZWxzZQotICAgIGFjX2NvbmZpZ3VyZV9hcmdzPSIkYWNfY29uZmlndXJlX2FyZ3MgLS1lbmFibGUtbHRkbC1pbnN0YWxsPW5vIgotICAgIExJQkxUREw9Ii1sbHRkbCIKLSAgICBMVERMSU5DTD0KLSAgZmkKLSAgIyBGb3IgYmFja3dhcmRzIG5vbi1nZXR0ZXh0IGNvbnNpc3RlbnQgY29tcGF0aWJpbGl0eS4uLgotICBJTkNMVERMPSIkTFRETElOQ0wiCi1dKSMgQUNfTElCTFRETF9JTlNUQUxMQUJMRQotCi0KLSMgQUNfTElCVE9PTF9DWFgKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEMrKyBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfQ1hYXSkKLV0pIyBBQ19MSUJUT09MX0NYWAotCi0KLSMgX0xUX0FDX0xBTkdfQ1hYCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF0sCi1bQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotQUNfUkVRVUlSRShbX0xUX0FDX1BST0dfQ1hYQ1BQXSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1DWFhdKQotXSkjIF9MVF9BQ19MQU5HX0NYWAotCi0jIF9MVF9BQ19QUk9HX0NYWENQUAotIyAtLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdLAotWwotQUNfUkVRVUlSRShbQUNfUFJPR19DWFhdKQotaWYgdGVzdCAtbiAiJENYWCIgJiYgKCB0ZXN0ICJYJENYWCIgIT0gIlhubyIgJiYKLSAgICAoICh0ZXN0ICJYJENYWCIgPSAiWGcrKyIgJiYgYGcrKyAtdiA+L2Rldi9udWxsIDI+JjFgICkgfHwKLSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLSAgQUNfUFJPR19DWFhDUFAKLWZpCi1dKSMgX0xUX0FDX1BST0dfQ1hYQ1BQCi0KLSMgQUNfTElCVE9PTF9GNzcKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEZvcnRyYW4gNzcgbGlicmFyaWVzCi1BQ19ERUZVTihbQUNfTElCVE9PTF9GNzddLAotW0FDX1JFUVVJUkUoW19MVF9BQ19MQU5HX0Y3N10pCi1dKSMgQUNfTElCVE9PTF9GNzcKLQotCi0jIF9MVF9BQ19MQU5HX0Y3NwotIyAtLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19GNzddLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKLV9MVF9BQ19TSEVMTF9JTklUKFt0YWduYW1lcz0ke3RhZ25hbWVzKyR7dGFnbmFtZXN9LH1GNzddKQotXSkjIF9MVF9BQ19MQU5HX0Y3NwotCi0KLSMgQUNfTElCVE9PTF9HQ0oKLSMgLS0tLS0tLS0tLS0tLS0KLSMgZW5hYmxlIHN1cHBvcnQgZm9yIEdDSiBsaWJyYXJpZXMKLUFDX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sCi1bQUNfUkVRVUlSRShbX0xUX0FDX0xBTkdfR0NKXSkKLV0pIyBBQ19MSUJUT09MX0dDSgotCi0KLSMgX0xUX0FDX0xBTkdfR0NKCi0jIC0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0dDSl0sCi1bQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSxbXSwKLSAgW0FDX1BST1ZJREVfSUZFTFNFKFtBXVtNX1BST0dfR0NKXSxbXSwKLSAgICBbQUNfUFJPVklERV9JRkVMU0UoW0xUX0FDX1BST0dfR0NKXSxbXSwKLSAgICAgIFtpZmRlZihbQUNfUFJPR19HQ0pdLFtBQ19SRVFVSVJFKFtBQ19QUk9HX0dDSl0pXSwKLQkgW2lmZGVmKFtBXVtNX1BST0dfR0NKXSxbQUNfUkVRVUlSRShbQV1bTV9QUk9HX0dDSl0pXSwKLQkgICBbQUNfUkVRVUlSRShbQV1bQ19QUk9HX0dDSl9PUl9BXVtNX1BST0dfR0NKXSldKV0pXSldKV0pCi1fTFRfQUNfU0hFTExfSU5JVChbdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9R0NKXSkKLV0pIyBfTFRfQUNfTEFOR19HQ0oKLQotCi0jIEFDX0xJQlRPT0xfUkMKLSMgLS0tLS0tLS0tLS0tLQotIyBlbmFibGUgc3VwcG9ydCBmb3IgV2luZG93cyByZXNvdXJjZSBmaWxlcwotQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLAotW0FDX1JFUVVJUkUoW0xUX0FDX1BST0dfUkNdKQotX0xUX0FDX1NIRUxMX0lOSVQoW3RhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfVJDXSkKLV0pIyBBQ19MSUJUT09MX1JDCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfQ19DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NfQ09ORklHXSwgW19MVF9BQ19MQU5HX0NfQ09ORklHXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19DX0NPTkZJR10sCi1bbHRfc2F2ZV9DQz0iJENDIgotQUNfTEFOR19QVVNIKEMpCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jCi0KLSMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKLQotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLUFDX0xJQlRPT0xfU1lTX0xJQl9TVFJJUAotQUNfTElCVE9PTF9ETE9QRU5fU0VMRgotCi0jIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLUFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKLUFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKLQotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXNdKQotdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCi0KLSMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAotIyBhcmUgYWxsIGJ1aWx0IGZyb20gUElDLgotY2FzZSAkaG9zdF9vcyBpbgotYWl4MyopCi0gIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgotICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKLSAgZmkKLSAgOzsKLQotYWl4W1s0LTldXSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICAgIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLUFDX0xJQlRPT0xfQ09ORklHKCQxKQotCi1BQ19MQU5HX1BPUAotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19DX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sIFtfTFRfQUNfTEFOR19DWFhfQ09ORklHKENYWCldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAotW0FDX0xBTkdfUFVTSChDKyspCi1BQ19SRVFVSVJFKFtBQ19QUk9HX0NYWF0pCi1BQ19SRVFVSVJFKFtfTFRfQUNfUFJPR19DWFhDUFBdKQotCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KLV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi1fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgotX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQotX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KLV9MVF9BQ19UQUdWQVIocHJlZGVwcywgJDEpPQotX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQotX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KLV9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzLCAkMSk9Ci0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBDKysgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWNwcAotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgQysrIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oaW50LCBjaGFyICpbW11dKSB7IHJldHVybigwKTsgfScKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSRDQwotbHRfc2F2ZV9MRD0kTEQKLWx0X3NhdmVfR0NDPSRHQ0MKLUdDQz0kR1hYCi1sdF9zYXZlX3dpdGhfZ251X2xkPSR3aXRoX2dudV9sZAotbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECi1pZiB0ZXN0IC1uICIke2x0X2N2X3Byb2dfZ251X2xkY3h4K3NldH0iOyB0aGVuCi0gIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZGN4eAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcHJvZ19nbnVfbGQKLWZpCi1pZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KLSAgbHRfY3ZfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRENYWAotZWxzZQotICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAotZmkKLXRlc3QgLXogIiR7TERDWFgrc2V0fSIgfHwgTEQ9JExEQ1hYCi1DQz0ke0NYWC0iYysrIn0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi0jIFdlIGRvbid0IHdhbnQgLWZuby1leGNlcHRpb24gd2VuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQotIyBub19idWlsdGluX2ZsYWcgc2VwYXJhdGVseQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJwotZWxzZQotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9Ci1maQotCi1pZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAjIFNldCB1cCBkZWZhdWx0IEdOVSBDKysgY29uZmlndXJhdGlvbgotCi0gIEFDX1BST0dfTEQKLQotICAjIENoZWNrIGlmIEdOVSBDKysgdXNlcyBHTlUgbGQgYXMgdGhlIHVuZGVybHlpbmcgbGlua2VyLCBzaW5jZSB0aGUKLSAgIyBhcmNoaXZpbmcgY29tbWFuZHMgYmVsb3cgYXNzdW1lIHRoYXQgR05VIGxkIGlzIGJlaW5nIHVzZWQuCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgIyBYWFggSSB0aGluayB3bGFyYyBjYW4gYmUgZWxpbWluYXRlZCBpbiBsdGNmLWN4eCwgYnV0IEkgbmVlZCB0bwotICAgICMgICAgIGludmVzdGlnYXRlIGl0IGEgbGl0dGxlIGJpdCBtb3JlLiAoTU0pCi0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmIGV2YWwgImAkQ0MgLXByaW50LXByb2ctbmFtZT1sZGAgLS1oZWxwIDI+JjEiIHwgXAotCWdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICAgIGZpCi0gIGVsc2UKLSAgICB3aXRoX2dudV9sZD1ubwotICAgIHdsYXJjPQotCi0gICAgIyBBIGdlbmVyaWMgYW5kIHZlcnkgc2ltcGxlIGRlZmF1bHQgc2hhcmVkIGxpYnJhcnkgY3JlYXRpb24KLSAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQotICAgICMgbGlua2VyLCBpbnN0ZWFkIG9mIEdOVSBsZC4gIElmIHBvc3NpYmxlLCB0aGlzIHNldHRpbmcgc2hvdWxkCi0gICAgIyBvdmVycmlkZGVuIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZSBuYXRpdmUgbGlua2VyIGZlYXR1cmVzIG9uCi0gICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gIGZpCi0KLSAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgIlwtTCInCi0KLWVsc2UKLSAgR1hYPW5vCi0gIHdpdGhfZ251X2xkPW5vCi0gIHdsYXJjPQotZmkKLQotIyBQT1JUTUU6IGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIEMrKyBsaW5rIGNoYXJhY3RlcmlzdGljcwotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgYWl4MyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIGFpeFtbNC05XV0qKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bWzIzXV18YWl4NC5bWzIzXV0uKnxhaXhbWzUtOV1dKikKLQlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGNhc2UgJGxkX2ZsYWcgaW4KLQkgICotYnJ0bCopCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgZmkKLQotICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKLSAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKLSAgICAgICMgV2Ugb25seSB3YW50IHRvIGRvIHRoaXMgb24gQUlYIDQuMiBhbmQgbG93ZXIsIHRoZSBjaGVjawotICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCi0JY29sbGVjdDJuYW1lPWAke0NDfSAtcHJpbnQtcHJvZy1uYW1lPWNvbGxlY3QyYAotCWlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLQkgICBzdHJpbmdzICIkY29sbGVjdDJuYW1lIiB8IGdyZXAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCi0JdGhlbgotCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0JICA6Ci0JZWxzZQotCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAotCSAgIyBJdCBmYWlscyB0byBmaW5kIHVuaW5zdGFsbGVkIGxpYnJhcmllcyB3aGVuIHRoZSB1bmluc3RhbGxlZAotCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLQkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9Ci0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgc2hhcmVkX2ZsYWc9Jy1zaGFyZWQnCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQlzaGFyZWRfZmxhZz0iJHNoYXJlZF9mbGFnICInJHt3bH0tRycKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBub3QgdXNpbmcgZ2NjCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0JIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKLQlzaGFyZWRfZmxhZz0nLUcnCi0gICAgICBlbHNlCi0JaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQllbHNlCi0JICBzaGFyZWRfZmxhZz0nJHt3bH0tYk06U1JFJwotCWZpCi0gICAgICBmaQotICAgIGZpCi0KLSAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKLSAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLSAgICAgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJwotICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCV9MVF9BQ19TWVNfTElCUEFUSF9BSVgKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJub3RvaycKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKLQkjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyRjb252ZW5pZW5jZScKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCi0JIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotICAgICAgZmkKLSAgICBmaQotICAgIDs7Ci0KLSAgYmVvcyopCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKLSAgICAgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgZmkKLSAgICA7OwotCi0gIGNob3J1cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0KLSAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKLQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ2F1dG8taW1wb3J0JyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotICAgICAgIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCWNwICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLSAgICAgIGVsc2UKLQllY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQljYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZml+Ci0gICAgICAkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWYgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gIDs7Ci0gICAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKLSAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzIDsgdGhlbgotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9IlwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgZmkKLSAgICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJHt3bH0tc2luZ2xlX21vZHVsZSAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgZmkKLSAgICAgICAgOzsKLQotICBkZ3V4KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgZWMrKyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBnaGN4KikKLQkjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgZnJlZWJzZFtbMTJdXSopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZSBzd2l0Y2ggdG8gRUxGCi0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIGZyZWVic2QtZWxmKikKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICA7OwotICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKLSAgICAjIGNvbnZlbnRpb25zCi0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgICA7OwotICBnbnUqKQotICAgIDs7Ci0gIGhwdXg5KikKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCSMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgQ0MqKQotICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotICAgIGFDQyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAjCi0gICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiW1stXV1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotICAgICAgOzsKLSAgICAqKQotICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0gICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaHB1eDEwKnxocHV4MTEqKQotICAgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKSA7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBocHBhKjY0KnxpYTY0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkJCQkJICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKLQkJCQkJICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGFDQyopCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCBncmVwICJcLUwiYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLQkgIGlmIHRlc3QgJHdpdGhfZ251X2xkID0gbm87IHRoZW4KLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGlhNjQqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICAqKQotCSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgIGZpCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBpbnRlcml4W1szLTldXSopCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQotICAgICMgZGVmYXVsdCkgYW5kIHJlbG9jYXRlZCBpZiB0aGV5IGNvbmZsaWN0LCB3aGljaCBpcyBhIHNsb3cgdmVyeSBtZW1vcnkKLSAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluawotICAgICMgdGltZS4gIE1vdmluZyB1cCBmcm9tIDB4MTAwMDAwMDAgYWxzbyBhbGxvd3MgbW9yZSBzYnJrKDIpIHNwYWNlLgotICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgOzsKLSAgaXJpeDUqIHwgaXJpeDYqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTR0kgQysrCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLWFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgSVJJWCBDKysgY29tcGlsZXIuICBUaGlzIGlzCi0JIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JIyBpbiB0aGUgYXJjaGl2ZS4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1hciAtV1IsLXUgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotCSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JICBlbHNlCi0JICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgIC1vICRsaWInCi0JICBmaQotCWZpCi0JX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0JOzsKLSAgICBlc2FjCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgOzsKLSAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8IGdyZXAgImxkImA7IHJtIC1mIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQ7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIGljcGMqKQotCSMgSW50ZWwgQysrCi0Jd2l0aF9nbnVfbGQ9eWVzCi0JIyB2ZXJzaW9uIDguMCBhbmQgYWJvdmUgb2YgaWNwYyBjaG9rZSBvbiBtdWx0aXBseSBkZWZpbmVkIHN5bWJvbHMKLQkjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAotCSMgZWFybGllciBkbyBub3QgYWRkIHRoZSBvYmplY3RzIHRoZW1zZWx2ZXMuCi0JY2FzZSBgJENDIC1WIDI+JjFgIGluCi0JKiJWZXJzaW9uIDcuIiopCi0gIAkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAJICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCSopICAjIFZlcnNpb24gOC4wIG9yIG5ld2VyCi0JICB0bXBfaWR5bj0KLQkgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGlhNjQqKSB0bXBfaWR5bj0nIC1pX2R5bmFtaWMnOzsKLQkgIGVzYWMKLSAgCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQnIiR0bXBfaWR5biInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIDs7Ci0JZXNhYwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCTs7Ci0gICAgICBwZ0NDKiB8IHBnY3BwKikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgLW8gJGxpYicKLSAgCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgICA7OwotICAgICAgY3h4KikKLQkjIENvbXBhcSBDKysKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICAtbyAkbGliICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzJwotCi0JcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkIC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KLQkqU3VuXCBDKikKLQkgICMgU3VuIEMrKyA1LjkKLQkgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16ZGVmcycKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCi0JICAjIE5vdCBzdXJlIHdoZXRoZXIgc29tZXRoaW5nIGJhc2VkIG9uCi0JICAjICRDQyAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgLW8gbGliY29uZnRlc3Qkc2hhcmVkX2V4dCAyPiYxCi0JICAjIHdvdWxkIGJlIGJldHRlci4KLQkgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotCi0JICAjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcwotCSAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCi0JICAjIGluIHRoZSBhcmNoaXZlLgotCSAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JICA7OwotCWVzYWMKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBseW54b3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBtODhrKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgbXZzKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgY3h4KikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIG5ldGJzZCopCi0gICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRsaW5rZXJfZmxhZ3MnCi0gICAgICB3bGFyYz0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBmaQotICAgICMgV29ya2Fyb3VuZCBzb21lIGJyb2tlbiBwcmUtMS41IHRvb2xjaGFpbnMKLSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwIGNvbmZ0ZXN0LiRvYmpleHQgfCAkU0VEIC1lICJzOi1sZ2NjIC1sYyAtbGdjYzo6IicKLSAgICA7OwotICBvcGVuYnNkMiopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyBhcmUgZmFpcmx5IGJyb2tlbgotICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICA7OwotICBvcGVuYnNkKikKLSAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLQlfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBmaQotICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgZWxzZQotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIGZpCi0gICAgOzsKLSAgb3NmMyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIEtDQyopCi0JIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgotCi0JIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQotCSMgZW5kcyB3aXRoICIuc28iIChvciAiLnNsIiBmb3IgSFAtVVgpLCBzbyByZW5hbWUgdGhlIGxpYnJhcnkKLQkjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAkbGliIHwgJFNFRCAtZSAicy9cJHt0ZW1wZXh0fVwuLiovLnNvLyJgOyAkQ0MgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC0tc29uYW1lICRzb25hbWUgLW8gXCR0ZW1wbGliOyBtdiBcJHRlbXBsaWIgJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLQotCSMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZwotCSMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1Cc3RhdGljIC1vICRvbGRsaWIgJG9sZG9ianMnCi0KLQk7OwotICAgICAgUkNDKikKLQkjIFJhdGlvbmFsIEMrKyAyLjQuMQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgICAgY3h4KikKLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSMKLQkjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0JIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KLQkjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5Ci0JIyBkZXBlbmRlbmNpZXMuCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgImxkIiB8IGdyZXAgLXYgImxkOiJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZC4qJFwpL1wxLyJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQk7OwotICAgICAgKikKLQlpZiB0ZXN0ICIkR1hYIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgb3NmNCogfCBvc2Y1KikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgS0NDKikKLQkjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCi0KLQkjIEtDQyB3aWxsIG9ubHkgY3JlYXRlIGEgc2hhcmVkIGxpYnJhcnkgaWYgdGhlIG91dHB1dCBmaWxlCi0JIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQotCSMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0ndGVtcGV4dD1gZWNobyAkc2hhcmVkX2V4dCB8ICRTRUQgLWUgJ1wnJ3MvXChbW14oKTAtOUEtWmEtent9XV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+Ci0JICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAtV2wsLWlucHV0IC1XbCwkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uCSR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KLQkgICRybSAkbGliLmV4cCcKLQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgcHNvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgIDs7Ci0gIHN1bm9zNCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC54Ci0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICBsY2MqKQotCSMgTHVjaWQKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHNvbGFyaXMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKLQlfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gIC1oJHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCWNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JICAqKQotCSAgICAjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSAgICAjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgotCSAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JZXNhYwotCV9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkjIGluIHRoZSBhcmNoaXZlLgotCV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBnY3gqKQotCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCi0JX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICAqKQotCSMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS16ICR7d2x9ZGVmcycKLQkgIGlmICRDQyAtLXZlcnNpb24gfCBncmVwIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGVsc2UKLQkgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcwotCSAgICAjIHBsYXRmb3JtLgotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZmkKLQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJHdsJGxpYmRpcicKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0JICAqKQotCSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQkgICAgOzsKLQkgIGVzYWMKLQlmaQotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LltbMDFdXS5bWzEwXV0qIHwgdW5peHdhcmU3KiB8IHNjbzMuMnY1LjAuW1swMjRdXSopCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKLSAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKLSAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgIyBhcyAteiBkZWZzLgotICAgICMgRm9yIHNlY3VyaXR5IHJlYXNvbnMsIGl0IGlzIGhpZ2hseSByZWNvbW1lbmRlZCB0aGF0IHlvdSBhbHdheXMKLSAgICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQotICAgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCi0gICAgIyByZXF1aXJlcyB0aGF0IHlvdSBjb21waWxlIGV2ZXJ5dGhpbmcgdHdpY2UsIHdoaWNoIGlzIGEgcGFpbi4KLSAgICAjIFNvIHRoYXQgYmVoYXZpb3VyIGlzIG9ubHkgZW5hYmxlZCBpZiBTQ09BQlNQQVRIIGlzIHNldCB0byBhCi0gICAgIyBub24tZW1wdHkgdmFsdWUgaW4gdGhlIGVudmlyb25tZW50LiAgTW9zdCBsaWtlbHkgb25seSB1c2VmdWwgZm9yCi0gICAgIyBjcmVhdGluZyBvZmZpY2lhbCBkaXN0cmlidXRpb25zIG9mIHBhY2thZ2VzLgotICAgICMgVGhpcyBpcyBhIGhhY2sgdW50aWwgbGlidG9vbCBvZmZpY2lhbGx5IHN1cHBvcnRzIGFic29sdXRlIHBhdGgKLSAgICAjIG5hbWVzIGZvciBzaGFyZWQgbGlicmFyaWVzLgotICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teixub2RlZnMnCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tQmV4cG9ydCcKLSAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0KLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgQ0MqKQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHRhbmRlbSopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIE5DQyopCi0JIyBOb25TdG9wLVVYIE5DQyAzLjIwCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICB2eHdvcmtzKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLSAgKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgOzsKLWVzYWMKLUFDX01TR19SRVNVTFQoWyRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpXSkKLXRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotX0xUX0FDX1RBR1ZBUihHQ0MsICQxKT0iJEdYWCIKLV9MVF9BQ19UQUdWQVIoTEQsICQxKT0iJExEIgotCi1BQ19MSUJUT09MX1BPU1RERVBfUFJFREVQKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0kbHRfc2F2ZV9DQwotTERDWFg9JExECi1MRD0kbHRfc2F2ZV9MRAotR0NDPSRsdF9zYXZlX0dDQwotd2l0aF9nbnVfbGRjeHg9JHdpdGhfZ251X2xkCi13aXRoX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAotbHRfY3ZfcGF0aF9MRD0kbHRfc2F2ZV9wYXRoX0xECi1sdF9jdl9wcm9nX2dudV9sZGN4eD0kbHRfY3ZfcHJvZ19nbnVfbGQKLWx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCi1dKSMgQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUcKLQotIyBBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEZpZ3VyZSBvdXQgImhpZGRlbiIgbGlicmFyeSBkZXBlbmRlbmNpZXMgZnJvbSB2ZXJib3NlCi0jIGNvbXBpbGVyIG91dHB1dCB3aGVuIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLSMgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci0jIG9iamVjdHMsIGxpYnJhcmllcyBhbmQgbGlicmFyeSBmbGFncy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQXSwKLVtBQ19SRVFVSVJFKFtMVF9BQ19QUk9HX1NFRF0pZG5sCi1kbmwgd2UgY2FuJ3QgdXNlIHRoZSBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUgaGVyZSwKLWRubCBiZWNhdXNlIGl0IGNvbnRhaW5zIGNvZGUgaW50ZW5kZWQgZm9yIGFuIGV4ZWN1dGFibGUsCi1kbmwgbm90IGEgbGlicmFyeS4gIEl0J3MgcG9zc2libGUgd2Ugc2hvdWxkIGxldCBlYWNoCi1kbmwgdGFnIGRlZmluZSBhIG5ldyBsdF8/Pz8/X2xpbmtfdGVzdF9jb2RlIHZhcmlhYmxlLAotZG5sIGJ1dCBpdCdzIG9ubHkgdXNlZCBoZXJlLi4uCi1pZmVsc2UoWyQxXSxbXSxbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotaW50IGE7Ci12b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQotRU9GCi1dLFskMV0sW0NYWF0sW2NhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWNsYXNzIEZvbwotewotcHVibGljOgotICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KLXByaXZhdGU6Ci0gIGludCBhOwotfTsKLUVPRgotXSxbJDFdLFtGNzddLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0gICAgICBzdWJyb3V0aW5lIGZvbwotICAgICAgaW1wbGljaXQgbm9uZQotICAgICAgaW50ZWdlcio0IGEKLSAgICAgIGE9MAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLUVPRgotXSxbJDFdLFtHQ0pdLFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi1wdWJsaWMgY2xhc3MgZm9vIHsKLSAgcHJpdmF0ZSBpbnQgYTsKLSAgcHVibGljIHZvaWQgYmFyICh2b2lkKSB7Ci0gICAgYSA9IDA7Ci0gIH0KLX07Ci1FT0YKLV0pCi1kbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Ci1kbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgotaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KLSAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi0KLSAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQotICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KLSAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwotCi0gICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgotICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCi0gICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKLQotICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbwotICAgIGNhc2UgJHAgaW4KLQotICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCi0JICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZWxzZQotCSBwcmV2PQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBjYXNlICRwIGluCi0JIC1MKiB8IC1SKikKLQkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLQkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLQkgICBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSI7IHRoZW4KLQkgICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7cHJldn0ke3B9IgotCSAgIGVsc2UKLQkgICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSk9IiR7X0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKX0gJHtwcmV2fSR7cH0iCi0JICAgZmkKLQkgICA7OwotCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwotCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KLQkgZXNhYwotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSI7IHRoZW4KLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSk9IiR7cHJldn0ke3B9IgotCSBlbHNlCi0JICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke19MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKX0gJHtwcmV2fSR7cH0iCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKi4kb2JqZXh0KQotICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAotICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgotCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcwotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgotCSAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCi0JIGVsc2UKLQkgICBfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfQUNfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KLQkgICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKLQkgZWxzZQotCSAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgotCi0gICAgZXNhYwotICBkb25lCi0KLSAgIyBDbGVhbiB1cC4KLSAgcm0gLWYgYS5vdXQgYS5leGUKLWVsc2UKLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKLWZpCi0KLSRybSAtZiBjb25mZXN0LiRvYmpleHQKLQotX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKT0KLWlmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpIjsgdGhlbgotICBfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCi1maQotCi0jIFBPUlRNRTogb3ZlcnJpZGUgYWJvdmUgdGVzdCBvbiBzeXN0ZW1zIHdoZXJlIGl0IGlzIGJyb2tlbgotaWZlbHNlKFskMV0sW0NYWF0sCi1bY2FzZSAkaG9zdF9vcyBpbgotaW50ZXJpeFtbMy05XV0qKQotICAjIEludGVyaXggMy41IGluc3RhbGxzIGNvbXBsZXRlbHkgaG9zZWQgLmxhIGZpbGVzIGZvciBDKyssIHNvIHJhdGhlciB0aGFuCi0gICMgaGFjayBhbGwgYXJvdW5kIGl0LCBsZXQncyBqdXN0IHRydXN0ICJnKysiIHRvIERUUlQuCi0gIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsJDEpPQotICBfTFRfQUNfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywkMSk9Ci0gIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPQotICA7OwotCi1saW51eCopCi0gIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotICAqU3VuXCBDKikKLSAgICAjIFN1biBDKysgNS45Ci0gICAgIwotICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcwotICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZwotICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKLSAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCi0gICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KLSAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKLSAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBDQyopCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCi0gICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAotICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsJDEpPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci1lc2FjCi1dKQotY2FzZSAiICRfTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgotKiIgLWxjICIqKSBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8gOzsKLWVzYWMKLV0pIyBBQ19MSUJUT09MX1BPU1RERVBfUFJFREVQCi0KLSMgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIEMgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10sIFtfTFRfQUNfTEFOR19GNzdfQ09ORklHKEY3NyldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N19DT05GSUddLAotW0FDX1JFUVVJUkUoW0FDX1BST0dfRjc3XSkKLUFDX0xBTkdfUFVTSChGb3J0cmFuIDc3KQotCi1fTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCi1fTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci1fTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpPQotX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9dW5rbm93bgotX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKLV9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0KLV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLV9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPW5vCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBmNzcgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWYKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIGY3NyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotX0xUX0FDX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKLSAgICAgIHN1YnJvdXRpbmUgdAotICAgICAgcmV0dXJuCi0gICAgICBlbmQKLSIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iXAotICAgICAgcHJvZ3JhbSB0Ci0gICAgICBlbmQKLSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke0Y3Ny0iZjc3In0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCi1BQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci1haXhbWzQtOV1dKikKLSAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgotICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCi0gIGZpCi0gIDs7Ci1lc2FjCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCi0KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKLSMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgotdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCi1BQ19NU0dfUkVTVUxUKFskZW5hYmxlX3N0YXRpY10pCi0KLV9MVF9BQ19UQUdWQVIoR0NDLCAkMSk9IiRHNzciCi1fTFRfQUNfVEFHVkFSKExELCAkMSk9IiRMRCIKLQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUE9QCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX0Y3N19DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcnMgZm9yIHRoZSBDIGNvbXBpbGVyIGFyZQotIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhvc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieQotIyBBQ19MSUJUT09MX0NPTkZJRyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLCBbX0xUX0FDX0xBTkdfR0NKX0NPTkZJRyhHQ0opXSkKLUFDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwKLVtBQ19MQU5HX1NBVkUKLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEphdmEgdGVzdCBzb3VyY2VzLgotYWNfZXh0PWphdmEKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEphdmEgdGVzdCBzb3VyY2VzLgotb2JqZXh0PW8KLV9MVF9BQ19UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJjbGFzcyBmb28ge30iCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J3B1YmxpYyBjbGFzcyBjb25mdGVzdCB7IHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tbXV0gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLV9MVF9BQ19TWVNfQ09NUElMRVIKLQotIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKLV9MVF9DT01QSUxFUl9CT0lMRVJQTEFURQotX0xUX0xJTktFUl9CT0lMRVJQTEFURQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtHQ0otImdjaiJ9Ci1jb21waWxlcj0kQ0MKLV9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKLV9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLQotIyBHQ0ogZGlkIG5vdCBleGlzdCBhdCB0aGUgdGltZSBHQ0MgZGlkbid0IGltcGxpY2l0bHkgbGluayBsaWJjIGluLgotX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0KLV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCi0KLUFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKCQxKQotQUNfTElCVE9PTF9QUk9HX0NPTVBJTEVSX1BJQygkMSkKLUFDX0xJQlRPT0xfUFJPR19DQ19DX08oJDEpCi1BQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1MoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKCQxKQotQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVIoJDEpCi1BQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSCgkMSkKLQotQUNfTElCVE9PTF9DT05GSUcoJDEpCi0KLUFDX0xBTkdfUkVTVE9SRQotQ0M9IiRsdF9zYXZlX0NDIgotXSkjIEFDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHCi0KLQotIyBBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFycyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIgYXJlCi0jIHN1aXRhYmx5IGRlZmluZWQuICBUaG9zZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5Ci0jIEFDX0xJQlRPT0xfQ09ORklHIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwgW19MVF9BQ19MQU5HX1JDX0NPTkZJRyhSQyldKQotQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10sCi1bQUNfTEFOR19TQVZFCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9cmMKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1fTFRfQUNfVEFHVkFSKG9iamV4dCwgJDEpPSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0nc2FtcGxlIE1FTlUgeyBNRU5VSVRFTSAiJlNvdXAiLCAxMDAsIENIRUNLRUQgfScKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0iJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIKLQotIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgotX0xUX0FDX1NZU19DT01QSUxFUgotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCi1fTFRfTElOS0VSX0JPSUxFUlBMQVRFCi0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke1JDLSJ3aW5kcmVzIn0KLWNvbXBpbGVyPSRDQwotX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQwotX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQotX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcwotCi1BQ19MSUJUT09MX0NPTkZJRygkMSkKLQotQUNfTEFOR19SRVNUT1JFCi1DQz0iJGx0X3NhdmVfQ0MiCi1dKSMgQUNfTElCVE9PTF9MQU5HX1JDX0NPTkZJRwotCi0KLSMgQUNfTElCVE9PTF9DT05GSUcoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIElmIFRBR05BTUUgaXMgbm90IHBhc3NlZCwgdGhlbiBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdAotIyB3aXRoIGEgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlCi0jIGFkZCBjb2RlIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieQotIyBUQUdOQU1FIGZyb20gdGhlIG1hdGNoaW5nIHRhZ2dlZCBjb25maWcgdmFycy4KLUFDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10sCi1bIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIF9MVF9BQ19UQUdWQVIoY29tcGlsZXIsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihDQywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKExELCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihwcmVkZXBzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGRlcHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX2RpcnMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIocG9zdGluc3RhbGxfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKHBvc3R1bmluc3RhbGxfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKSBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9leHBzeW1fY21kcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSkgXAotICAgIF9MVF9BQ19UQUdWQVIoZml4X3NyY2ZpbGVfcGF0aCwgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpIFwKLSAgICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKSB8IFwKLSAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzLCAkMSkgfCBcCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkgfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1xbJF0wIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXFskXTAgLS1mYWxsYmFjay1lY2hvIlskXS9bJF0wIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWlmZWxzZShbJDFdLCBbXSwKLSAgW2NmZ2ZpbGU9IiR7b2ZpbGV9VCIKLSAgdHJhcCAiJHJtIFwiJGNmZ2ZpbGVcIjsgZXhpdCAxIiAxIDIgMTUKLSAgJHJtIC1mICIkY2ZnZmlsZSIKLSAgQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJG9maWxlXSldLAotICBbY2ZnZmlsZT0iJG9maWxlIl0pCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi1pZmVsc2UoWyQxXSwgW10sCi1bIyEgJFNIRUxMCi0KLSMgYCRlY2hvICIkY2ZnZmlsZSIgfCBzZWQgJ3MlXi4qLyUlJ2AgLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSAkVkVSU0lPTiRUSU1FU1RBTVApCi0jIE5PVEU6IENoYW5nZXMgbWFkZSB0byB0aGlzIGZpbGUgd2lsbCBiZSBsb3N0OiBsb29rIGF0IGx0bWFpbi5zaC4KLSMKLSMgQ29weXJpZ2h0IChDKSAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4Ci0jIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIwotIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbDoKLSMgT3JpZ2luYWxseSBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSMgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSMgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSMgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSMKLSMgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAotIyBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0jIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0jIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSMKLSMgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSMgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSMgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0jCi0jIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBpZiB5b3UKLSMgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gdGhhdCBjb250YWlucyBhCi0jIGNvbmZpZ3VyYXRpb24gc2NyaXB0IGdlbmVyYXRlZCBieSBBdXRvY29uZiwgeW91IG1heSBpbmNsdWRlIGl0IHVuZGVyCi0jIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KLQotIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgotU0VEPSRsdF9TRUQKLQotIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KLVhzZWQ9IiRTRUQgLWUgMXMvXlgvLyIKLQotIyBUaGUgSFAtVVgga3NoIGFuZCBQT1NJWCBzaGVsbCBwcmludCB0aGUgdGFyZ2V0IGRpcmVjdG9yeSB0byBzdGRvdXQKLSMgaWYgQ0RQQVRIIGlzIHNldC4KLSh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKLQotIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCi1hdmFpbGFibGVfdGFncz0KLQotIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUddLAotWyMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWVdKQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JF9MVF9BQ19UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpCi0KLSMgV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uLgotZmFzdF9pbnN0YWxsPSRlbmFibGVfZmFzdF9pbnN0YWxsCi0KLSMgVGhlIGhvc3Qgc3lzdGVtLgotaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotaG9zdD0kaG9zdAotaG9zdF9vcz0kaG9zdF9vcwotCi0jIFRoZSBidWlsZCBzeXN0ZW0uCi1idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLWJ1aWxkPSRidWlsZAotYnVpbGRfb3M9JGJ1aWxkX29zCi0KLSMgQW4gZWNobyBwcm9ncmFtIHRoYXQgZG9lcyBub3QgaW50ZXJwcmV0IGJhY2tzbGFzaGVzLgotZWNobz0kbHRfZWNobwotCi0jIFRoZSBhcmNoaXZlci4KLUFSPSRsdF9BUgotQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCi0KLSMgQSBDIGNvbXBpbGVyLgotTFRDQz0kbHRfTFRDQwotCi0jIExUQ0MgY29tcGlsZXIgZmxhZ3MuCi1MVENGTEFHUz0kbHRfTFRDRkxBR1MKLQotIyBBIGxhbmd1YWdlLXNwZWNpZmljIGNvbXBpbGVyLgotQ0M9JGx0X1tdX0xUX0FDX1RBR1ZBUihjb21waWxlciwgJDEpCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRfTFRfQUNfVEFHVkFSKEdDQywgJDEpCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X1tdX0xUX0FDX1RBR1ZBUihMRCwgJDEpCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X1tdX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9bXV9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfW11fTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSkKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKQotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSkKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcywgJDEpCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9bXV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSkKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKQotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9bXV9MVF9BQ19UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHByZWRlcHMsICQxKQotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfW11fTFRfQUNfVEFHVkFSKHBvc3RkZXBzLCAkMSkKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfW11fTFRfQUNfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9bXV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKQotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfW11fTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSkKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKQotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X1tdX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQsICQxKQotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfW11fTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKQotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSkKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKQotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRfTFRfQUNfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X1tdX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSkKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfW11fTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9bXV9MVF9BQ19UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSkKLQotaWZlbHNlKFskMV0sW10sCi1bIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHXSwKLVsjICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZV0pCi0KLV9fRU9GX18KLQotaWZlbHNlKFskMV0sW10sIFsKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICBjYXQgPDxcRU9GID4+ICIkY2ZnZmlsZSIKLQotIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCi0jIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKLSMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KLWlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgotICBDT0xMRUNUX05BTUVTPQotICBleHBvcnQgQ09MTEVDVF9OQU1FUwotZmkKLUVPRgotICAgIDs7Ci0gIGVzYWMKLQotICAjIFdlIHVzZSBzZWQgaW5zdGVhZCBvZiBjYXQgYmVjYXVzZSBiYXNoIG9uIERKR1BQIGdldHMgY29uZnVzZWQgaWYKLSAgIyBpZiBmaW5kcyBtaXhlZCBDUi9MRiBhbmQgTEYtb25seSBsaW5lcy4gIFNpbmNlIHNlZCBvcGVyYXRlcyBpbgotICAjIHRleHQgbW9kZSwgaXQgcHJvcGVybHkgY29udmVydHMgbGluZXMgdG8gQ1IvTEYuICBUaGlzIGJhc2ggcHJvYmxlbQotICAjIGlzIHJlcG9ydGVkbHkgZml4ZWQsIGJ1dCB3aHkgbm90IHJ1biBvbiBvbGQgdmVyc2lvbnMgdG9vPwotICBzZWQgJyRxJyAiJGx0bWFpbiIgPj4gIiRjZmdmaWxlIiB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQotCi0gIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwgXAotICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCi0gIGNobW9kICt4ICIkb2ZpbGUiCi1dKQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi1dKSMgQUNfTElCVE9PTF9DT05GSUcKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwKLVtBQ19SRVFVSVJFKFtfTFRfQUNfU1lTX0NPTVBJTEVSXSlkbmwKLQotX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPQotCi1pZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9JyAtZm5vLWJ1aWx0aW4nCi0KLSAgQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKLSAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQotZmkKLV0pIyBBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSQotCi0KLSMgQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0dMT0JBTF9TWU1CT0xfUElQRV0sCi1bQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKQotQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKQotQUNfUkVRVUlSRShbQUNfUFJPR19OTV0pCi1BQ19SRVFVSVJFKFtBQ19PQkpFWFRdKQotIyBDaGVjayBmb3IgY29tbWFuZCB0byBncmFiIHRoZSByYXcgc3ltYm9sIG5hbWUgZm9sbG93ZWQgYnkgQyBzeW1ib2wgZnJvbSBubS4KLUFDX01TR19DSEVDS0lORyhbY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdF0pCi1BQ19DQUNIRV9WQUwoW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGVdLAotWwotIyBUaGVzZSBhcmUgc2FuZSBkZWZhdWx0cyB0aGF0IHdvcmsgb24gYXQgbGVhc3QgYSBmZXcgb2xkIHN5c3RlbXMuCi0jIFtUaGV5IGNvbWUgZnJvbSBVbHRyaXguICBXaGF0IGNvdWxkIGJlIG9sZGVyIHRoYW4gVWx0cml4PyEhIDspXQotCi0jIENoYXJhY3RlciBjbGFzcyBkZXNjcmliaW5nIE5NIGdsb2JhbCBzeW1ib2wgY29kZXMuCi1zeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0KLSMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgotc3ltcGF0PSdcKFtbX0EtWmEtel1dW1tfQS1aYS16MC05XV0qXCknCi0KLSMgVHJhbnNmb3JtIGFuIGV4dHJhY3RlZCBzeW1ib2wgbGluZSBpbnRvIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXi4gLiogXCguKlwpJC9leHRlcm4gaW50IFwxOy9wJyIKLQotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCi1sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0KLSMgRGVmaW5lIHN5c3RlbS1zcGVjaWZpYyB2YXJpYWJsZXMuCi1jYXNlICRob3N0X29zIGluCi1haXgqKQotICBzeW1jb2RlPSdbW0JDRFRdXScKLSAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgc3ltY29kZT0nW1tBQkNER0lTVFddXScKLSAgOzsKLWhwdXgqKSAjIEl0cyBsaW5rZXIgZGlzdGluZ3Vpc2hlcyBkYXRhIGZyb20gY29kZSBzeW1ib2xzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNERUdSU1RdXScKLSAgZmkKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9InNlZCAtbiAtZSAncy9eOiBcKFtbXiBdXSpcKSAkLyAge1xcXCJcMVxcXCIsIChsdF9wdHIpIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLSAgOzsKLWxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgc3ltY29kZT0nW1tBQkNER0lSU1RXXV0nCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbW14gXV0qXCkgXChbW14gXV0qXCkkLyAge1wiXDJcIiwgKGx0X3B0cikgXCZcMn0sL3AnIgotICBmaQotICA7OwotaXJpeCogfCBub25zdG9wdXgqKQotICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCi0gIDs7Ci1vc2YqKQotICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJwotICA7Owotc29sYXJpcyopCi0gIHN5bWNvZGU9J1tbQkRSVF1dJwotICA7Owotc2NvMy4ydjUqKQotICBzeW1jb2RlPSdbW0RUXV0nCi0gIDs7Ci1zeXN2NC4ydXcyKikKLSAgc3ltY29kZT0nW1tEVF1dJwotICA7Owotc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKLSAgc3ltY29kZT0nW1tBQkRUXV0nCi0gIDs7Ci1zeXN2NCkKLSAgc3ltY29kZT0nW1tERk5TVFVdXScKLSAgOzsKLWVzYWMKLQotIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCi1vcHRfY3I9Ci1jYXNlICRidWlsZF9vcyBpbgotbWluZ3cqKQotICBvcHRfY3I9YGVjaG8gJ3hcezAsMVx9JyB8IHRyIHggJ1wwMTUnYCAjIG9wdGlvbiBjciBpbiByZWdleHAKLSAgOzsKLWVzYWMKLQotIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCi1jYXNlIGAkTk0gLVYgMj4mMWAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKLWVzYWMKLQotIyBUcnkgd2l0aG91dCBhIHByZWZpeCB1bmRlcmNvcmUsIHRoZW4gd2l0aCBpdC4KLWZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KLQotICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgotICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgotCi0gICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKltbIAldXVwoJHN5bWNvZGUkc3ltY29kZSpcKVtbIAldXVtbIAldXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKLQotICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KLSAgcGlwZV93b3Jrcz1ubwotCi0gIHJtIC1mIGNvbmZ0ZXN0KgotICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8RU9GCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgewotI2VuZGlmCi1jaGFyIG5tX3Rlc3RfdmFyOwotdm9pZCBubV90ZXN0X2Z1bmMoKXt9Ci0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotaW50IG1haW4oKXtubV90ZXN0X3Zhcj0nYSc7bm1fdGVzdF9mdW5jKCk7cmV0dXJuKDApO30KLUVPRgotCi0gIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCi0gICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCi0gICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiBBQ19UUllfRVZBTChOTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgJiYgdGVzdCAtcyAiJG5saXN0IjsgdGhlbgotICAgICAgIyBUcnkgc29ydGluZyBhbmQgdW5pcXVpZnlpbmcgdGhlIG91dHB1dC4KLSAgICAgIGlmIHNvcnQgIiRubGlzdCIgfCB1bmlxID4gIiRubGlzdCJUOyB0aGVuCi0JbXYgLWYgIiRubGlzdCJUICIkbmxpc3QiCi0gICAgICBlbHNlCi0Jcm0gLWYgIiRubGlzdCJUCi0gICAgICBmaQotCi0gICAgICAjIE1ha2Ugc3VyZSB0aGF0IHdlIHNuYWdnZWQgYWxsIHRoZSBzeW1ib2xzIHdlIG5lZWQuCi0gICAgICBpZiBncmVwICcgbm1fdGVzdF92YXIkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JaWYgZ3JlcCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KLQkgIGNhdCA8PEVPRiA+IGNvbmZ0ZXN0LiRhY19leHQKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB7Ci0jZW5kaWYKLQotRU9GCi0JICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCi0KLQkgIGNhdCA8PEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0jaWYgZGVmaW5lZCAoX19TVERDX18pICYmIF9fU1REQ19fCi0jIGRlZmluZSBsdF9wdHJfdCB2b2lkICoKLSNlbHNlCi0jIGRlZmluZSBsdF9wdHJfdCBjaGFyICoKLSMgZGVmaW5lIGNvbnN0Ci0jZW5kaWYKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCi1jb25zdCBzdHJ1Y3QgewotICBjb25zdCBjaGFyICpuYW1lOwotICBsdF9wdHJfdCBhZGRyZXNzOwotfQotbHRfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KLXsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9Ci19OwotCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotRU9GCi0JICAjIE5vdyB0cnkgbGlua2luZyB0aGUgdHdvIGZpbGVzLgotCSAgbXYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdHN0bS4kYWNfb2JqZXh0Ci0JICBsdF9zYXZlX0xJQlM9IiRMSUJTIgotCSAgbHRfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JICBMSUJTPSJjb25mdHN0bS4kYWNfb2JqZXh0IgotCSAgQ0ZMQUdTPSIkQ0ZMQUdTJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKSIKLQkgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KLQkgICAgcGlwZV93b3Jrcz15ZXMKLQkgIGZpCi0JICBMSUJTPSIkbHRfc2F2ZV9MSUJTIgotCSAgQ0ZMQUdTPSIkbHRfc2F2ZV9DRkxBR1MiCi0JZWxzZQotCSAgZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF9mdW5jIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAotCWZpCi0gICAgICBlbHNlCi0JZWNobyAiY2Fubm90IGZpbmQgbm1fdGVzdF92YXIgaW4gJG5saXN0IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIGVjaG8gImNhbm5vdCBydW4gJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiID4mQVNfTUVTU0FHRV9MT0dfRkQKLSAgICBmaQotICBlbHNlCi0gICAgZWNobyAiJHByb2duYW1lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JkFTX01FU1NBR0VfTE9HX0ZECi0gICAgY2F0IGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0gIGZpCi0gIHJtIC1yZiBjb25mdGVzdCogY29uZnRzdCoKLQotICAjIERvIG5vdCB1c2UgdGhlIGdsb2JhbF9zeW1ib2xfcGlwZSB1bmxlc3MgaXQgd29ya3MuCi0gIGlmIHRlc3QgIiRwaXBlX3dvcmtzIiA9IHllczsgdGhlbgotICAgIGJyZWFrCi0gIGVsc2UKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPQotICBmaQotZG9uZQotXSkKLWlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0KLWZpCi1pZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChmYWlsZWQpCi1lbHNlCi0gIEFDX01TR19SRVNVTFQob2spCi1maQotXSkgIyBBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEUKLQotCi0jIEFDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUMoW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfUElDXSwKLVtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0KLV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KLV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0KLQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQ10pCi0gaWZlbHNlKFskMV0sW0NYWF0sWwotICAjIEMrKyBzcGVjaWZpYyBjYXNlcyBmb3IgcGljLCBzdGF0aWMsIHdsLCBldGMuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotICAgIGJlb3MqIHwgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KiB8IG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciB0aGVzZSBPU2VzLgotICAgICAgOzsKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgb3MyKiB8IHB3MzIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICA7OwotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLSAgICAqZGpncHAqKQotICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgICA7OwotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLSAgICBocHV4KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCTs7Ci0gICAgICAqKQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0gICAgICA7OwotICAgIGVzYWMKLSAgZWxzZQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeFtbNC05XV0qKQotCSMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCi0JZmkKLQk7OwotICAgICAgY2hvcnVzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCWN4Y2g2OCopCi0JICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgIyBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyogfCBwZ2NwcCopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZCwgJDEpPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi1dLAotWwotICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIGFpeCopCi0gICAgICAjIEFsbCBBSVggY29kZSBpcyBQSUMuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0gICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCi0JW19MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFtbMy05XV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFub2NvbW1vbicKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAotCVtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotCV9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLQkgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0JICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCi0gICAgICBfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCi0JX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJwotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi1dKQotQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKV0pCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCi0gIEFDX0xJQlRPT0xfQ09NUElMRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgUElDIGZsYWcgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSB3b3Jrc10sCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpLAotICAgIFskX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpaWZlbHNlKFskMV0sW10sWyAtRFBJQ10sW2lmZWxzZShbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCi0gICAgW2Nhc2UgJF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgotICAgICAiIiB8ICIgIiopIDs7Ci0gICAgICopIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7Ci0gICAgIGVzYWNdLAotICAgIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Ci0gICAgIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQotICAgIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSIkX0xUX0FDX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpaWZlbHNlKFskMV0sW10sWyAtRFBJQ10sW2lmZWxzZShbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKSBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSlcIgotQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OKFtpZiAkY29tcGlsZXIgc3RhdGljIGZsYWcgJGx0X3RtcF9zdGF0aWNfZmxhZyB3b3Jrc10sCi0gIF9MVF9BQ19UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MsICQxKSwKLSAgJGx0X3RtcF9zdGF0aWNfZmxhZywKLSAgW10sCi0gIFtfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9XSkKLV0pCi0KLQotIyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTKFtUQUdOQU1FXSkKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1BQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0xEX1NITElCU10sCi1bQUNfUkVRVUlSRShbTFRfQUNfUFJPR19TRURdKWRubAotQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQotaWZlbHNlKFskMV0sW0NYWF0sWwotICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotICBjYXNlICRob3N0X29zIGluCi0gIGFpeFtbNC05XV0qKQotICAgICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotICAgICMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLSAgICBpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLSAgICBlbHNlCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGZpCi0gICAgOzsKLSAgcHczMiopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9IiRsdGRsbF9jbWRzIgotICA7OwotICBjeWd3aW4qIHwgbWluZ3cqKQotICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvOy9eLipbWyBdXV9fbm1fXy9zL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKltbIF1dLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotICBfTFRfQUNfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KLV0sWwotICBydW5wYXRoX3Zhcj0KLSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKHRocmVhZF9zYWZlX2ZsYWdfc3BlYywgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQotICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCi0gIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KLSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubwotICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9Ci0gIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KLSAgX0xUX0FDX1RBR1ZBUihleHBvcnRfc3ltYm9sc19jbWRzLCAkMSk9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgIyBpbmNsdWRlX2V4cHN5bXMgc2hvdWxkIGJlIGEgbGlzdCBvZiBzcGFjZS1zZXBhcmF0ZWQgc3ltYm9scyB0byBiZSAqYWx3YXlzKgotICAjIGluY2x1ZGVkIGluIHRoZSBzeW1ib2wgbGlzdAotICBfTFRfQUNfVEFHVkFSKGluY2x1ZGVfZXhwc3ltcywgJDEpPQotICAjIGV4Y2x1ZGVfZXhwc3ltcyBjYW4gYmUgYW4gZXh0ZW5kZWQgcmVnZXhwIG9mIHN5bWJvbHMgdG8gZXhjbHVkZQotICAjIGl0IHdpbGwgYmUgd3JhcHBlZCBieSBgICgnIGFuZCBgKSQnLCBzbyBvbmUgbXVzdCBub3QgbWF0Y2ggYmVnaW5uaW5nIG9yCi0gICMgZW5kIG9mIGxpbmUuICBFeGFtcGxlOiBgYXxiY3wuKmQuKicgd2lsbCBleGNsdWRlIHRoZSBzeW1ib2xzIGBhJyBhbmQgYGJjJywKLSAgIyBhcyB3ZWxsIGFzIGFueSBzeW1ib2wgdGhhdCBjb250YWlucyBgZCcuCi0gIF9MVF9BQ19UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionXQotICAjIEFsdGhvdWdoIF9HTE9CQUxfT0ZGU0VUX1RBQkxFXyBpcyBhIHZhbGlkIHN5bWJvbCBDIG5hbWUsIG1vc3QgYS5vdXQKLSAgIyBwbGF0Zm9ybXMgKGFiKXVzZSBpdCBpbiBQSUMgY29kZSwgYnV0IHRoZWlyIGxpbmtlcnMgZ2V0IGNvbmZ1c2VkIGlmCi0gICMgdGhlIHN5bWJvbCBpcyBleHBsaWNpdGx5IHJlZmVyZW5jZWQuICBTaW5jZSBwb3J0YWJsZSBjb2RlIGNhbm5vdAotICAjIHJlbHkgb24gdGhpcyBzeW1ib2wgbmFtZSwgaXQncyBwcm9iYWJseSBmaW5lIHRvIG5ldmVyIGluY2x1ZGUgaXQgaW4KLSAgIyBwcmVsb2FkZWQgc3ltYm9sIHRhYmxlcy4KLSAgIyBFeGNsdWRlIHNoYXJlZCBsaWJyYXJ5IGluaXRpYWxpemF0aW9uL2ZpbmFsaXphdGlvbiBzeW1ib2xzLgotZG5sIE5vdGUgYWxzbyBhZGp1c3QgZXhjbHVkZV9leHBzeW1zIGZvciBDKysgYWJvdmUuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIF9MVF9DQ19CQVNFTkFNRShbJGNvbXBpbGVyXSkKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCV9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFtbMDFdXS4qIHwgKlwgMi5bWzAtOV1dLiogfCAqXCAyLjEwLiopIDs7ICMgY2F0Y2ggdmVyc2lvbnMgPCAyLjExCi0gICAgICAqXCAyLjExLjkzLjAuMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIFJINy4zIC4uLgotICAgICAgKlwgMi4xMS45Mi4wLjEyXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgTWFuZHJha2UgOC4yIC4uLgotICAgICAgKlwgMi4xMS4qKSA7OyAjIG90aGVyIDIuMTEgdmVyc2lvbnMKLSAgICAgICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKLSAgICBlc2FjCi0KLSAgICAjIFNlZSBpZiBHTlUgbGQgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgYWl4W1szLTldXSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCi0gICAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotCSMgSWYgdGhlIGV4cG9ydC1zeW1ib2xzIGZpbGUgYWxyZWFkeSBpcyBhIC5kZWYgZmlsZSAoMXN0IGxpbmUKLQkjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgotCSAgY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWVsc2UKLQkgIGVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCSAgY2F0ICRleHBvcnRfc3ltYm9scyA+PiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKLQlmaX4KLQkkQ0MgLXNoYXJlZCAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGludGVyaXhbWzMtOV1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKLQlfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KLSAgICAgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgX0xUX0FDX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeFtbNC05XV0qKQotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0JIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCWV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0iIgotICAgICAgZWxzZQotCSMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHdlIGRvbid0IHdhbnQgdGhlICItQyIgb3B0aW9uLgotCSMgLUMgbWVhbnMgZGVtYW5nbGUgdG8gQUlYIG5tLCBidXQgbWVhbnMgZG9uJ3QgZGVtYW5nbGUgd2l0aCBHTlUgbm0KLQlpZiAkTk0gLVYgMj4mMSB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXFskXTIgPT0gIlQiKSB8fCAoXFskXTIgPT0gIkQiKSB8fCAoXFskXTIgPT0gIkIiKSkgJiYgKFtzdWJzdHJdKFxbJF0zLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcWyRdMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQllbHNlCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcWyRdMiA9PSAiVCIpIHx8IChcWyRdMiA9PSAiRCIpIHx8IChcWyRdMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXFskXTMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFxbJF0zIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotCWZpCi0JYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0JIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCi0JIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCi0JIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLQljYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCi0JICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcwotICAJICAgIGJyZWFrCi0gIAkgIGZpCi0JICBkb25lCi0JICA7OwotCWVzYWMKLQotCWV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0Jbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JwotICAgICAgZmkKLQotICAgICAgIyBXaGVuIGxhcmdlIGV4ZWN1dGFibGVzIG9yIHNoYXJlZCBvYmplY3RzIGFyZSBidWlsdCwgQUlYIGxkIGNhbgotICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5Ci0gICAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICAgIyBDWFhGTEFHUy9DRkxBR1MgZm9yIGcrKy9nY2MuICBJbiB0aGUgY2FzZXMgd2hlcmUgdGhhdCBpcyBub3QKLSAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgotCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPScnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCi0gICAgICBfTFRfQUNfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQljYXNlICRob3N0X29zIGluIGFpeDQuW1swMTJdXXxhaXg0LltbMDEyXV0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAJICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIF9MVF9BQ19UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgX0xUX0FDX1NZU19MSUJQQVRIX0FJWAotICAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPSIteiBub2RlZnMiCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKLQllbHNlCi0JICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCSBfTFRfQUNfU1lTX0xJQlBBVEhfQUlYCi0JIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgotCSAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkgICMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KLQkgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJwotCSAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVyb2snCi0JICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKLQkgIF9MVF9BQ19UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJwotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotCSAgIyBUaGlzIGlzIHNpbWlsYXIgdG8gaG93IEFJWCB0cmFkaXRpb25hbGx5IGJ1aWxkcyBpdHMgc2hhcmVkIGxpYnJhcmllcy4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCi0JZmkKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgYW1pZ2FvcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBkaWZmZXJlbnQgc2VtYW50aWNzIG9uIHRoZSBHTlUgbGQgc2VjdGlvbgotICAgICAgX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgOzsKLQotICAgIGJzZGlbWzQ1XV0qKQotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0tcmR5bmFtaWMKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nICcKLSAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSAgICAgIGxpYmV4dD1saWIKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0ndHJ1ZScKLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotICAgICAgX0xUX0FDX1RBR1ZBUihmaXhfc3JjZmlsZV9wYXRoLCAkMSk9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotICAgICAgX0xUX0FDX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bWzAxMl1dKQotICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bWzAxMl1dKQotICAgICAgICAgICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgMTAuKikKLSAgICAgICAgICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICBlc2FjCi0gICAgICAgICBmaQotICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JycKLSAgICAgIF9MVF9BQ19UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcwotICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIDsgdGhlbgotICAgIAlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIF9MVF9BQ19UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9YGVjaG8gJHJwYXRoLyRzb25hbWVgICR4bGN2ZXJzdHJpbmcnCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKG1vZHVsZV9jbWRzLCAkMSk9JyRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgICAgICMgRG9uJ3QgZml4IHRoaXMgYnkgdXNpbmcgdGhlIGxkIC1leHBvcnRlZF9zeW1ib2xzX2xpc3QgZmxhZywgaXQgZG9lc24ndCBleGlzdCBpbiBvbGRlciBkYXJ3aW4gbGRzCi0gICAgICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgX0xUX0FDX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnICAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3N+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIDs7Ci0gICAgICAgKikKLSAgICAgICAgIF9MVF9BQ19UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KLSAgICAgICAgICA7OwotICAgICAgZXNhYwotICAgIGZpCi0gICAgICA7OwotCi0gICAgZGd1eCopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBmcmVlYnNkMSopCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDIuMi5bMDEyXSBhbGxvd3MgdXMgdG8gaW5jbHVkZSBjKytydDAubyB0byBnZXQgQysrIGNvbnN0cnVjdG9yCi0gICAgIyBzdXBwb3J0LiAgRnV0dXJlIHZlcnNpb25zIGRvIHRoaXMgYXV0b21hdGljYWxseSwgYnV0IGFuIGV4cGxpY2l0IGMrK3J0MC5vCi0gICAgIyBkb2VzIG5vdCBicmVhayBhbnl0aGluZywgYW5kIGhlbHBzIHNpZ25pZmljYW50bHkgKGF0IHRoZSBjb3N0IG9mIGEgbGl0dGxlCi0gICAgIyBleHRyYSBzcGFjZSkuCi0gICAgZnJlZWJzZDIuMiopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC91c3IvbGliL2MrK3J0MC5vJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICMgVW5mb3J0dW5hdGVseSwgb2xkZXIgdmVyc2lvbnMgb2YgRnJlZUJTRCAyIGRvIG5vdCBoYXZlIHRoaXMgZmVhdHVyZS4KLSAgICBmcmVlYnNkMiopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMyBhbmQgZ3JlYXRlciB1c2VzIGdjYyAtc2hhcmVkIHRvIGRvIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgaHB1eDkqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCi0KLSAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0gICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKLSAgICAgIDs7Ci0KLSAgICBocHV4MTAqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotCi0JX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQlfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCi0JIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eDExKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBlbHNlCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCSopCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0KLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqfGlhNjQqKQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCSAgOzsKLQkqKQotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLQkgIF9MVF9BQ19UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCi0KLQkgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQkgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIG9wZW5ic2QqKQotICAgICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0JaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fYCIgfHwgdGVzdCAiJGhvc3Rfb3MtJGhvc3RfY3B1IiA9ICJvcGVuYnNkMi44LXBvd2VycGMiOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUsJGV4cG9ydF9zeW1ib2xzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJwotCWVsc2UKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgICBvcGVuYnNkW1swMV1dLiogfCBvcGVuYnNkMi5bWzAtN11dIHwgb3BlbmJzZDIuW1swLTddXS4qKQotCSAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCi0JICAgICA7OwotCSAgICopCi0JICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgICAgIDs7Ci0JICBlc2FjCi0gICAgICAgIGZpCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBvczIqKQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckZWNobyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiIFNJTkdMRSBOT05TSEFSRUQiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICBfTFRfQUNfVEFHVkFSKG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHMsICQxKT0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgOzsKLQotICAgIG9zZjMqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBmaQotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKLSAgICAgIDs7Ci0KLSAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWlucHV0ICRsaWIuZXhwICRsaW5rZXJfZmxhZ3MgJGxpYm9ianMgJGRlcGxpYnMgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWJ+JHJtICRsaWIuZXhwJwotCi0JIyBCb3RoIGMgYW5kIGN4eCBjb21waWxlciBzdXBwb3J0IC1ycGF0aCBkaXJlY3RseQotCV9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctcnBhdGggJGxpYmRpcicKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06Ci0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBfTFRfQUNfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAteiB0ZXh0JwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQl3bGFyYz0nJHt3bH0nCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQgJHt3bH0tTSAke3dsfSRsaWIuZXhwICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGVsc2UKLQl3bGFyYz0nJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKLSAgICAgIGZpCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICBfTFRfQUNfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBfTFRfQUNfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKLSAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgICAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlfTFRfQUNfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIF9MVF9BQ19UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JwotICAgICAgX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LG5vZGVmcycKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubwotICAgICAgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JwotICAgICAgX0xUX0FDX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCi0gICAgICBfTFRfQUNfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCV9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCi0gICAgICBfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBfTFRfQUNfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLV0pCi1BQ19NU0dfUkVTVUxUKFskX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKV0pCi10ZXN0ICIkX0xUX0FDX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLSMKLSMgRG8gd2UgbmVlZCB0byBleHBsaWNpdGx5IGxpbmsgbGliYz8KLSMKLWNhc2UgIngkX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpIiBpbgoteHx4eWVzKQotICAjIEFzc3VtZSAtbGMgc2hvdWxkIGJlIGFkZGVkCi0gIF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKLQotICBpZiB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBjYXNlICRfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIGluCi0gICAgKid+JyopCi0gICAgICAjIEZJWE1FOiB3ZSBtYXkgaGF2ZSB0byBkZWFsIHdpdGggbXVsdGktY29tbWFuZCBzZXF1ZW5jZXMuCi0gICAgICA7OwotICAgICckQ0MgJyopCi0gICAgICAjIFRlc3Qgd2hldGhlciB0aGUgY29tcGlsZXIgaW1wbGljaXRseSBsaW5rcyB3aXRoIC1sYyBzaW5jZSBvbiBzb21lCi0gICAgICAjIHN5c3RlbXMsIC1sZ2NjIGhhcyB0byBjb21lIGJlZm9yZSAtbGMuIElmIGdjYyBhbHJlYWR5IHBhc3NlcyAtbGMKLSAgICAgICMgdG8gbGQsIGRvbid0IGFkZCAtbGMgYmVmb3JlIC1sZ2NjLgotICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW5dKQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKQotCXBpY19mbGFnPSRfTFRfQUNfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX0FDX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCi0gICAgICAgIF9MVF9BQ19UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KLSAgICAgICAgaWYgQUNfVFJZX0VWQUwoX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKSAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQotICAgICAgICB0aGVuCi0JICBfTFRfQUNfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KLSAgICAgICAgZWxzZQotCSAgX0xUX0FDX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcwotICAgICAgICBmaQotICAgICAgICBfTFRfQUNfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9BQ19UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKV0pCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLV0pIyBBQ19MSUJUT09MX1BST0dfTERfU0hMSUJTCi0KLQotIyBfTFRfQUNfRklMRV9MVERMTF9DCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgQmUgY2FyZWZ1bCB0aGF0IHRoZSBzdGFydCBtYXJrZXIgYWx3YXlzIGZvbGxvd3MgYSBuZXdsaW5lLgotQUNfREVGVU4oW19MVF9BQ19GSUxFX0xURExMX0NdLCBbCi0jIC8qIGx0ZGxsLmMgc3RhcnRzIGhlcmUgKi8KLSMgI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jICNpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jICN1bmRlZiBXSU4zMl9MRUFOX0FORF9NRUFOCi0jICNpbmNsdWRlIDxzdGRpby5oPgotIwotIyAjaWZuZGVmIF9fQ1lHV0lOX18KLSMgIyAgaWZkZWYgX19DWUdXSU4zMl9fCi0jICMgICAgZGVmaW5lIF9fQ1lHV0lOX18gX19DWUdXSU4zMl9fCi0jICMgIGVuZGlmCi0jICNlbmRpZgotIwotIyAjaWZkZWYgX19jcGx1c3BsdXMKLSMgZXh0ZXJuICJDIiB7Ci0jICNlbmRpZgotIyBCT09MIEFQSUVOVFJZIERsbE1haW4gKEhJTlNUQU5DRSBoSW5zdCwgRFdPUkQgcmVhc29uLCBMUFZPSUQgcmVzZXJ2ZWQpOwotIyAjaWZkZWYgX19jcGx1c3BsdXMKLSMgfQotIyAjZW5kaWYKLSMKLSMgI2lmZGVmIF9fQ1lHV0lOX18KLSMgI2luY2x1ZGUgPGN5Z3dpbi9jeWd3aW5fZGxsLmg+Ci0jIERFQ0xBUkVfQ1lHV0lOX0RMTCggRGxsTWFpbiApOwotIyAjZW5kaWYKLSMgSElOU1RBTkNFIF9faERsbEluc3RhbmNlX2Jhc2U7Ci0jCi0jIEJPT0wgQVBJRU5UUlkKLSMgRGxsTWFpbiAoSElOU1RBTkNFIGhJbnN0LCBEV09SRCByZWFzb24sIExQVk9JRCByZXNlcnZlZCkKLSMgewotIyAgIF9faERsbEluc3RhbmNlX2Jhc2UgPSBoSW5zdDsKLSMgICByZXR1cm4gVFJVRTsKLSMgfQotIyAvKiBsdGRsbC5jIGVuZHMgaGVyZSAqLwotXSkjIF9MVF9BQ19GSUxFX0xURExMX0MKLQotCi0jIF9MVF9BQ19UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQotIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLUFDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSwgW2lmZWxzZShbJDJdLCBbXSwgWyQxXSwgWyQxXyQyXSldKQotCi0KLSMgb2xkIG5hbWVzCi1BQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgICBbQUNfUFJPR19MSUJUT09MXSkKLUFDX0RFRlVOKFtBTV9FTkFCTEVfU0hBUkVEXSwgIFtBQ19FTkFCTEVfU0hBUkVEKCRAKV0pCi1BQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sICBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQotQUNfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCi1BQ19ERUZVTihbQU1fRElTQUJMRV9TVEFUSUNdLCBbQUNfRElTQUJMRV9TVEFUSUMoJEApXSkKLUFDX0RFRlVOKFtBTV9QUk9HX0xEXSwgICAgICAgIFtBQ19QUk9HX0xEXSkKLUFDX0RFRlVOKFtBTV9QUk9HX05NXSwgICAgICAgIFtBQ19QUk9HX05NXSkKLQotIyBUaGlzIGlzIGp1c3QgdG8gc2lsZW5jZSBhY2xvY2FsIGFib3V0IHRoZSBtYWNybyBub3QgYmVpbmcgdXNlZAotaWZlbHNlKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0pCi0KLUFDX0RFRlVOKFtMVF9BQ19QUk9HX0dDSl0sCi1bQUNfQ0hFQ0tfVE9PTChHQ0osIGdjaiwgbm8pCi0gIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgotICBBQ19TVUJTVChHQ0pGTEFHUykKLV0pCi0KLUFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwKLVtBQ19DSEVDS19UT09MKFJDLCB3aW5kcmVzLCBubykKLV0pCi0KLQotIyBDaGVhcCBiYWNrcG9ydCBvZiBBU19FWEVDVVRBQkxFX1AgYW5kIHJlcXVpcmVkIG1hY3JvcwotIyBmcm9tIEF1dG9jb25mIDIuNTk7IHdlIHNob3VsZCBub3QgdXNlICRhc19leGVjdXRhYmxlX3AgZGlyZWN0bHkuCi0KLSMgX0FTX1RFU1RfUFJFUEFSRQotIyAtLS0tLS0tLS0tLS0tLS0tCi1tNF9pZm5kZWYoW19BU19URVNUX1BSRVBBUkVdLAotW200X2RlZnVuKFtfQVNfVEVTVF9QUkVQQVJFXSwKLVtpZiB0ZXN0IC14IC8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFzX2V4ZWN1dGFibGVfcD0ndGVzdCAteCcKLWVsc2UKLSAgYXNfZXhlY3V0YWJsZV9wPSd0ZXN0IC1mJwotZmkKLV0pXSkjIF9BU19URVNUX1BSRVBBUkUKLQotIyBBU19FWEVDVVRBQkxFX1AKLSMgLS0tLS0tLS0tLS0tLS0tCi0jIENoZWNrIHdoZXRoZXIgYSBmaWxlIGlzIGV4ZWN1dGFibGUuCi1tNF9pZm5kZWYoW0FTX0VYRUNVVEFCTEVfUF0sCi1bbTRfZGVmdW4oW0FTX0VYRUNVVEFCTEVfUF0sCi1bQVNfUkVRVUlSRShbX0FTX1RFU1RfUFJFUEFSRV0pZG5sCi0kYXNfZXhlY3V0YWJsZV9wICQxW11kbmwKLV0pXSkjIEFTX0VYRUNVVEFCTEVfUAotCi0jIE5PVEU6IFRoaXMgbWFjcm8gaGFzIGJlZW4gc3VibWl0dGVkIGZvciBpbmNsdXNpb24gaW50byAgICMKLSMgIEdOVSBBdXRvY29uZiBhcyBBQ19QUk9HX1NFRC4gIFdoZW4gaXQgaXMgYXZhaWxhYmxlIGluICAgIwotIyAgYSByZWxlYXNlZCB2ZXJzaW9uIG9mIEF1dG9jb25mIHdlIHNob3VsZCByZW1vdmUgdGhpcyAgICAjCi0jICBtYWNybyBhbmQgdXNlIGl0IGluc3RlYWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKLSMgTFRfQUNfUFJPR19TRUQKLSMgLS0tLS0tLS0tLS0tLS0KLSMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKLSMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KLUFDX0RFRlVOKFtMVF9BQ19QUk9HX1NFRF0sCi1bQUNfTVNHX0NIRUNLSU5HKFtmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQotQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfU0VELAotWyMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3Igc2VkIGFuZCBnc2VkLgotIyBUaGVuIHVzZSB0aGF0IGxpc3Qgb2Ygc2VkJ3MgYXMgb25lcyB0byB0ZXN0IGZvciB0cnVuY2F0aW9uLgotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KLSAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGlmIEFTX0VYRUNVVEFCTEVfUChbIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiXSk7IHRoZW4KLSAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgotICAgICAgZmkKLSAgICBkb25lCi0gIGRvbmUKLWRvbmUKLUlGUz0kYXNfc2F2ZV9JRlMKLWx0X2FjX21heD0wCi1sdF9hY19jb3VudD0wCi0jIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcwotIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KLWZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbwotICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQotICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KLSAgbHRfYWNfY291bnQ9MAotICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KLSAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgotICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGJyZWFrCi0gIGZpCi0gIHdoaWxlIHRydWU7IGRvCi0gICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKLSAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KLSAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAotICAgIGVjaG8gPj5jb25mdGVzdC5ubAotICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCi0gICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhawotICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAotICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhawotICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCi0gICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KLSAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKLSAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKLSAgICBmaQotICBkb25lCi1kb25lCi1dKQotU0VEPSRsdF9jdl9wYXRoX1NFRAotQUNfU1VCU1QoW1NFRF0pCi1BQ19NU0dfUkVTVUxUKFskU0VEXSkKLV0pCi0KLW00X2luY2x1ZGUoW2FjaW5jbHVkZS5tNF0pCittNF9pbmNsdWRlKFttNC9hY19hZGRfc2VhcmNoX3BhdGgubTRdKQorbTRfaW5jbHVkZShbbTQvYWNfbXNnX2NhY2hlLm00XSkKK200X2luY2x1ZGUoW200L2FjX21zZ19tb2R1bGVfZGJnLm00XSkKK200X2luY2x1ZGUoW200L2FjX3Byb21wdF91c2VyLm00XSkKK200X2luY2x1ZGUoW200L2xpYnRvb2wubTRdKQorbTRfaW5jbHVkZShbbTQvbHRvcHRpb25zLm00XSkKK200X2luY2x1ZGUoW200L2x0c3VnYXIubTRdKQorbTRfaW5jbHVkZShbbTQvbHR2ZXJzaW9uLm00XSkKK200X2luY2x1ZGUoW200L2x0fm9ic29sZXRlLm00XSkKK200X2luY2x1ZGUoW200L25ldHNubXBfYXJnLm00XSkKK200X2luY2x1ZGUoW200L25ldHNubXBfc2VhcmNoX2xpYnMubTRdKQpkaWZmIC0tZ2l0IGEvYWdlbnQvTWFrZWZpbGUuZGVwZW5kIGIvYWdlbnQvTWFrZWZpbGUuZGVwZW5kCmluZGV4IGVkNjEyNWMuLmI1MjNmYTMgMTAwNjQ0Ci0tLSBhL2FnZW50L01ha2VmaWxlLmRlcGVuZAorKysgYi9hZ2VudC9NYWtlZmlsZS5kZXBlbmQKQEAgLTUsNTggKzUsNjQgQEAKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NSw2ICs3MSw3IEBACiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAyLDYyICsxMDksNjUgQEAKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnRfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE2Niw2ICsxNzYsNyBAQAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMDMsNjcgKzIxNCw2OSBAQAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudF9pbmRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL2FnZW50X2luZGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4Lmggc25tcGQuaAogLi9hZ2VudF9pbmRleC5sbzogbWliZ3JvdXAvc3RydWN0LmggLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgKIC4vYWdlbnRfaW5kZXgubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjcyLDYgKzI4NSw3IEBACiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMwOCwyOCArMzIyLDY0IEBACiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtaWJncm91cC9zdHJ1Y3QuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogc25tcGQuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zdHJ1Y3QuaCBzbm1wZC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfaW5jbHVkZXMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS92YWNtX2NvbmYuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtQ29uZi5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBtaWJncm91cC90ZXN0aGFuZGxlci5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIG1pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX2RldmljZS5oIG1pYmdyb3VwL2hvc3QvaHJfb3RoZXIuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmggbWliZ3JvdXAvaG9zdC9ocl9uZXR3b3JrLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCBtaWJncm91cC9ob3N0L2hyX2Rpc2suaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmggbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX3N3aW5zdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggbWliZ3JvdXAvUm1vbi9ldmVudC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL1Jtb24vaGlzdG9yeS5oIG1pYmdyb3VwL1Jtb24vZXZlbnQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocmhfc3RvcmFnZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmggbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5oIG1pYmdyb3VwL2hvc3QvaHJfcHJvYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyX25ldHdvcmsuaCBtaWJncm91cC9ob3N0L2hyX3ByaW50LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hvc3QvaHJfZGlzay5oIG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmggbWliZ3JvdXAvbWliSUkvYXQuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvaXAuaCBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaCBtaWJncm91cC9taWJJSS9hdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS90Y3AuaCBtaWJncm91cC9taWJJSS9pY21wLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3VkcC5oIG1pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oIG1pYmdyb3VwL21pYklJL2lwdjYuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmggbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmggbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmggbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kbG1vZC5oIG1pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL21lbW9yeS5oIG1pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc0RlYnVnLmggbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVNjYWxhcnMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oCkBAIC0zNDcsNDUgKzM5NywxOCBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCBtaWJncm91cC9taWJJSS9hdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9pcC5oIG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5oIG1pYmdyb3VwL21pYklJL2F0LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3NubXBfbWliLmggbWliZ3JvdXAvbWliSUkvdGNwLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL2ljbXAuaCBtaWJncm91cC9taWJJSS91ZHAuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmggbWliZ3JvdXAvbWliSUkvaXB2Ni5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wcm9jLmggLi4vYWdlbnQvbWliZ3JvdXAvbWliZGVmcy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kaXNrLmggbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9hZ2VudC9leHRlbmQuaCBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91Y2Qtc25tcC9maWxlLmggbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmggbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oIG1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuaAotLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCi0uL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmgKLS4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaCBtaWJncm91cC9taWJJSS90Y3BUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS91ZHBUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuaApAQCAtMzk1LDYgKzQxOCwxMCBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgKQEAgLTQxMyw2ICs0NDAsMTkgQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfZGF0YV9hY2Nlc3MuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZW51bXMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3RhbnRzLmgKQEAgLTQyNiw2ICs0NjYsMjAgQEAKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCiAuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAorLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKKy4vYWdlbnRfcmVhZF9jb25maWcubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL2FnZW50X3JlYWRfY29uZmlnLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCkBAIC00NTgsNjIgKzUxMiw2MyBAQAogLi9hZ2VudF9yZWFkX2NvbmZpZy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2RvdF9jb25mLmgKIC4vYWdlbnRfcmVhZF9jb25maWcubG86IC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfZG90X2NvbmYuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTIyLDYgKzU3Nyw3IEBACiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTU1OSwzNCArNjE1LDE2MSBAQAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudF9yZWdpc3RyeS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oIHNubXBkLmgKIC4vYWdlbnRfcmVnaXN0cnkubG86IG1pYmdyb3VwL3N0cnVjdC5oIC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oCiAuL2FnZW50X3JlZ2lzdHJ5LmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF9zeXNPUlRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50X3N5c09SVGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vYWdlbnRfc3lzT1JUYWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaApAQCAtNTk0LDI5ICs3NzcsMTMgQEAKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTYyNSw4MSArNzkyLDEwOCBAQAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9hZ2VudF90cmFwLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vYWdlbnRfdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudF90cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50X3RyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2F1dG9fbmxpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYXV0b19ubGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9hdXRvX25saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi9rZXJuZWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4va2VybmVsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2tlcm5lbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcwOCw2ICs5MDIsNyBAQAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKQEAgLTc0MywyMyArOTM4LDU0IEBACiAuL21pYl9tb2R1bGVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtMm0uaAotLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaCBtMm0uaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc3RydWN0LmggLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oCiAuL21pYl9tb2R1bGVzLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBtaWJncm91cC90ZXN0aGFuZGxlci5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIG1pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9SbW9uL3Jvd3MuaCBtaWJncm91cC9SbW9uL2FndXRpbC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9SbW9uL3N0YXRpc3RpY3MuaCBtaWJncm91cC9SbW9uL2FsYXJtVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggbWliZ3JvdXAvUm1vbi9ldmVudC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmggbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaCBtaWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmggbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuaCBtaWJncm91cC9ob3N0L2hyX290aGVyLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfcHJvYy5oIG1pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2hyX3ByaW50LmggbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmggbWliZ3JvdXAvaG9zdC9ocl9maWxlc3lzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfc3dydW4uaCBtaWJncm91cC9ob3N0L2hyX3N3aW5zdC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmggbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmggbWliZ3JvdXAvUm1vbi9yb3dzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL1Jtb24vYWd1dGlsLmggbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL1Jtb24vYWxhcm0uaCBtaWJncm91cC9SbW9uL2hpc3RvcnkuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvUm1vbi9ldmVudC5oIG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oIG1pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My91c21Vc2VyLmggbWliZ3JvdXAvbWliSUkvc25tcF9taWJfNV81LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvaXAuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvYXQuaCBtaWJncm91cC9taWJJSS90Y3AuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvaWNtcC5oIG1pYmdyb3VwL21pYklJL3VkcC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9pcHY2LmggbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oCisuL21pYl9tb2R1bGVzLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmggbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oIG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaCBtaWJncm91cC9hZ2VudC9leHRlbmQuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJncm91cC91Y2Qtc25tcC9maWxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmggbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaCBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmggbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9hZ2VudC9uc0NhY2hlLmggbWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmgKQEAgLTc3Niw0MSArMTAwMiwxOCBAQAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaCBtaWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3NubXB2My91c21TdGF0cy5oIG1pYmdyb3VwL3NubXB2My91c21Vc2VyLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaCBtaWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvaXAuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmggbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbWliSUkvYXQuaCBtaWJncm91cC9taWJJSS9zbm1wX21pYi5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS90Y3AuaCBtaWJncm91cC9taWJJSS9pY21wLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3VkcC5oIG1pYmdyb3VwL21pYklJL3ZhY21fdmFycy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oIG1pYmdyb3VwL21pYklJL2lwdjYuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oIC4uL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaCBtaWJncm91cC91Y2Qtc25tcC9wYXNzLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oIG1pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmdyb3VwL2FnZW50L2V4dGVuZC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaCBtaWJncm91cC91Y2Qtc25tcC9wcm94eS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuaCBtaWJncm91cC9hZ2VudC9uc0RlYnVnLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2FnZW50L25zQ2FjaGUuaCBtaWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5oCi0uL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmgKLS4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi9zbm1wVGxzdG1TZXNzaW9uLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIG1pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL21pYklJL3VkcFRhYmxlLmggbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmgKQEAgLTgxOSw3ICsxMDIyLDEyIEBACiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCkBAIC04MzYsNiArMTA0NCwxOSBAQAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9jb25zdGFudHMuaApAQCAtODQ5LDYgKzEwNzAsMjAgQEAKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCiAuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zY29wZXpvbmUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX29pZHMuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaAorLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmgKKy4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCisuL21pYl9tb2R1bGVzLmxvOiBtaWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaAogLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaAogLi9taWJfbW9kdWxlcy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCkBAIC04NzgsNjYgKzExMTMsNjYgQEAKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmgKIC4vbWliX21vZHVsZXMubG86IG1pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAotLi9taWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgKIC4vbWliX21vZHVsZXMubG86IC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfc2h1dGRvd24uaAogLi9taWJfbW9kdWxlcy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9pbml0cy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NDYsNiArMTE4MSw3IEBACiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vb2JqZWN0X21vbml0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk4Myw2MyArMTIxOSw2NiBAQAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9vYmplY3RfbW9uaXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL29iamVjdF9tb25pdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29iamVjdF9tb25pdG9yLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwNDgsNiArMTI4Nyw3IEBACiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA4NCw2NyArMTMyNCwxNzEgQEAKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXBfYWdlbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc25tcGQuaCBtaWJncm91cC9zdHJ1Y3QuaAotLi9zbm1wX2FnZW50LmxvOiBtaWJncm91cC91dGlsX2Z1bmNzLmggbWliZ3JvdXAvc3RydWN0LmgKKy4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wX2FnZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNubXBkLmgKIC4vc25tcF9hZ2VudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oCi0uL3NubXBfYWdlbnQubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oCi0uL3NubXBfYWdlbnQubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaAogLi9zbm1wX2FnZW50LmxvOiAuLi9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaCBtMm0uaCBzbm1wZC5oCisuL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmggbWliZ3JvdXAvc211eC9zbXV4LmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE1Myw2ICsxNDk3LDcgQEAKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExODksNjMgKzE1MzQsNjYgQEAKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXBfcGVybC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbm1wX3BlcmwuaAorLi9zbm1wX3BlcmwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcF9wZXJsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIHNubXBfcGVybC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI1NCw2ICsxNjAyLDcgQEAKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyOTEsMzAwICsxNjQwLDc0IEBACiAuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zbm1wX3ZhcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmgga2VybmVsLmgKKy4vc25tcF92YXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oCisuL3NubXBfdmFycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgga2VybmVsLmgKIC4vc25tcF92YXJzLmxvOiBtaWJncm91cC9zdHJ1Y3QuaCBzbm1wZC5oCiAuL3NubXBfdmFycy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuaAogLi9zbm1wX3ZhcnMubG86IC4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5oCiAuL3NubXBfdmFycy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luY2x1ZGVzLmgKLS4vc25tcF92YXJzLmxvOiBtaWJncm91cC9zbXV4L3NtdXguaCBtaWJncm91cC9zbm1wdjMvdXNtQ29uZi5oCi0uL3NubXBfdmFycy5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oCisuL3NubXBfdmFycy5sbzogbWliZ3JvdXAvc211eC9zbXV4LmggbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oCisuL3NubXBfdmFycy5sbzogbWliZ3JvdXAvc25tcHYzL3VzbUNvbmYuaCBtaWJncm91cC9taWJJSS92YWNtX2NvbmYuaAogLi9zbm1wX3ZhcnMubG86IHNubXBfcGVybC5oIC4uL2FnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbml0cy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG0ybS5oIHNubXBkLmggbWliZ3JvdXAvc3RydWN0LmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaCBtaWJncm91cC91dGlsX2Z1bmNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3N0cnVjdC5oIC4uL2FnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5jbHVkZXMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oIG1pYmdyb3VwL3Rlc3RoYW5kbGVyLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmggbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmggbWliZ3JvdXAvaG9zdC9ocl9vdGhlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3Byb2MuaCBtaWJncm91cC9ob3N0L2hyX25ldHdvcmsuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oIG1pYmdyb3VwL2hvc3QvaHJfZGlzay5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5oIG1pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ob3N0L2hyX3N3cnVuLmggbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5oIG1pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaCBtaWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL1Jtb24vcm93cy5oIG1pYmdyb3VwL1Jtb24vYWd1dGlsLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oIG1pYmdyb3VwL1Jtb24vYWxhcm0uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmggbWliZ3JvdXAvUm1vbi9ldmVudC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlU2NhbGFycy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmggbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCBtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmggbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9hdC5oIG1pYmdyb3VwL21pYklJL2lwLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIG1pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL21pYklJL2F0LmggbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbWliSUkvdGNwLmggbWliZ3JvdXAvbWliSUkvaWNtcC5oIG1pYmdyb3VwL21pYklJL3VkcC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS92YWNtX3ZhcnMuaCBtaWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS9pcHY2LmggbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJkZWZzLmggbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5oIG1pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91Y2Qtc25tcC9kaXNrLmggbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9hZ2VudC9leHRlbmQuaCBtaWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91Y2Qtc25tcC9maWxlLmggbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuaCBtaWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91Y2Qtc25tcC9tZW1vcnkuaCBtaWJncm91cC91Y2Qtc25tcC92bXN0YXQuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5oIG1pYmdyb3VwL2FnZW50L25zRGVidWcuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5oIG1pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmggbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmggbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS92YXJfcm91dGUuaCBtaWJncm91cC9taWJJSS90Y3BUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9taWJJSS91ZHBUYWJsZS5oIG1pYmdyb3VwL21pYklJL3ZhY21fY29udGV4dC5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaAotLi9zbm1wZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKLS4vc25tcGQubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKLS4vc25tcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhbnRzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oCi0uL3NubXBkLmxvOiBtaWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9jb25zdGFudHMuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKLS4vc25tcGQubG86IG1pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oCi0uL3NubXBkLmxvOiBtaWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuaAotLi9zbm1wZC5sbzogbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIG1pYmdyb3VwL3NtdXgvc211eC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNTkzLDYgKzE3MTYsNyBAQAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE2MzAsNjMgKzE3NTQsNjYgQEAKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9hbGxfaGVscGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2FsbF9oZWxwZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hlbHBlcnMvYWxsX2hlbHBlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTY5NSw2ICsxODIyLDcgQEAKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE3MzIsNjMgKzE4NjAsNjUgQEAKIC4vaGVscGVycy9iYWJ5X3N0ZXBzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvYmFieV9zdGVwcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2JhYnlfc3RlcHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE3OTcsNiArMTkyNyw3IEBACiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvYnVsa190b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE4MzQsNjMgKzE5NjUsNjUgQEAKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9idWxrX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2J1bGtfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTg5OSw2ICsyMDMyLDcgQEAKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE5MzYsNjMgKzIwNzAsNjUgQEAKIC4vaGVscGVycy9jYWNoZV9oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvY2FjaGVfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2NhY2hlX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIwMDEsNiArMjEzNyw3IEBACiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMDM4LDYzICsyMTc1LDY1IEBACiAuL2hlbHBlcnMvZGVidWdfaGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL2RlYnVnX2hhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9kZWJ1Z19oYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMTAzLDYgKzIyNDIsNyBAQAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvaW5zdGFuY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTIxNDAsNjMgKzIyODAsNjUgQEAKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9pbnN0YW5jZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL2luc3RhbmNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMjA1LDYgKzIzNDcsNyBAQAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjI0Miw2MyArMjM4NSw2NSBAQAogLi9oZWxwZXJzL21vZGVfZW5kX2NhbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvbW9kZV9lbmRfY2FsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjMwNyw2ICsyNDUyLDcgQEAKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL211bHRpcGxleGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMzQ0LDYzICsyNDkwLDY1IEBACiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvbXVsdGlwbGV4ZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9tdWx0aXBsZXhlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjQwOSw2ICsyNTU3LDcgQEAKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI0NDYsNjMgKzI1OTUsNjUgQEAKIC4vaGVscGVycy9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI1MTEsNiArMjY2Miw3IEBACiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNTQ4LDY0ICsyNzAwLDY2IEBACiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL29sZF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9vbGRfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvb2xkX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjYxNCw2ICsyNzY4LDcgQEAKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9yZWFkX29ubHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjY1MSw2MyArMjgwNiw2NSBAQAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3JlYWRfb25seS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvcmVhZF9vbmx5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNzE2LDYgKzI4NzMsNyBAQAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3Jvd19tZXJnZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNzUzLDYzICsyOTExLDY1IEBACiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvcm93X21lcmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy9yb3dfbWVyZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI4MTgsNiArMjk3OCw3IEBACiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc2NhbGFyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI4NTUsNjMgKzMwMTYsNjUgQEAKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9zY2FsYXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3NjYWxhci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjkyMCw2ICszMDgzLDcgQEAKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9zY2FsYXJfZ3JvdXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjk1Nyw2MyArMzEyMSw2NSBAQAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3NjYWxhcl9ncm91cC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvc2NhbGFyX2dyb3VwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMDIyLDYgKzMxODgsNyBAQAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy9zZXJpYWxpemUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMDU5LDYzICszMjI2LDE3MCBAQAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3NlcmlhbGl6ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvc2VyaWFsaXplLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2hlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzEyNCw2ICszMzk4LDcgQEAKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3N0YXNoX2NhY2hlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMTYxLDY1ICszNDM2LDY3IEBACiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisuL2hlbHBlcnMvc3Rhc2hfY2FjaGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgKKy4vaGVscGVycy9zdGFzaF9jYWNoZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMjI4LDYgKzM1MDUsNyBAQAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzI2NSwxNjcgKzM1NDMsNjcgQEAKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvc3Rhc2hfdG9fbmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy9zdGFzaF90b19uZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX3RvX25leHQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3N0YXNoX3RvX25leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzQzNCw2ICszNjEyLDcgQEAKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNDcxLDYzICszNjUwLDE3MCBAQAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2hlbHBlcnMvdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaGVscGVycy90YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3RhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNTM2LDYgKzM4MjIsNyBAQAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNTczLDYzICszODYwLDY1IEBACiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM2MzgsNiArMzkyNyw3IEBACiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNjc1LDYzICszOTY1LDY1IEBACiAuL2hlbHBlcnMvdGFibGVfZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9kYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zNzQwLDYgKzQwMzIsNyBAQAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzc3Nyw2MyArNDA3MCw2NSBAQAogLi9oZWxwZXJzL3RhYmxlX2RhdGFzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9kYXRhc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hlbHBlcnMvdGFibGVfZGF0YXNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzg0Miw2ICs0MTM3LDcgQEAKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zODc5LDY0ICs0MTc1LDY2IEBACiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM5NDUsNiArNDI0Myw3IEBACiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hlbHBlcnMvdGFibGVfcm93LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTM5ODIsNjMgKzQyODEsNjUgQEAKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV9yb3cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3RhYmxlX3Jvdy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDA0Nyw2ICs0MzQ4LDcgQEAKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9oZWxwZXJzL3RhYmxlX3RkYXRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00MDg0LDYzICs0Mzg2LDY1IEBACiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvdGFibGVfdGRhdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaGVscGVycy90YWJsZV90ZGF0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDE0OSw2ICs0NDUzLDcgQEAKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQxODYsNjMgKzQ0OTEsNjUgQEAKIC4vaGVscGVycy93YXRjaGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2hlbHBlcnMvd2F0Y2hlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWxwZXJzL3dhdGNoZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQyNTEsNiArNDU1OCw3IEBACiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQyODgsNjkgKzQ1OTYsNjcgQEAKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5sbzogLi9taWJncm91cC9oZWFkZXJfY29tcGxleC5oCiAuL21pYmdyb3VwL2tlcm5lbF9zdW5vczUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAva2VybmVsX3N1bm9zNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJncm91cC9rZXJuZWxfc3Vub3M1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliZ3JvdXAva2VybmVsX3N1bm9zNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL2tlcm5lbF9zdW5vczUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQzNTksNiArNDY2NSw3IEBACiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYmdyb3VwL3Rlc3RoYW5kbGVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQzOTYsNjQgKzQ3MDMsNjYgQEAKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdGVzdGhhbmRsZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJncm91cC90ZXN0aGFuZGxlci5sbzogLi9taWJncm91cC90ZXN0aGFuZGxlci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NDYyLDYgKzQ3NzEsNyBAQAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQ0OTgsMTQgKzQ4MDgsMTUgQEAKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZ3JvdXAvc3RydWN0LmgKLS4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4vbWliZ3JvdXAvc3RydWN0LmggLi9taWJncm91cC91dGlsX2Z1bmNzLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuL21pYmdyb3VwL3V0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi9taWJncm91cC91dGlsX2Z1bmNzLmxvOiAuL21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKIC4vbWliZ3JvdXAvdXRpbF9mdW5jcy5sbzogLi9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCiAuL21pYmdyb3VwL3V0aWxfZnVuY3MubG86IC4uL2FnZW50L21pYmdyb3VwL21pYmRlZnMuaAogLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliZ3JvdXAvd2luRXh0RExMLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYmdyb3VwL3dpbkV4dERMTC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJncm91cC93aW5FeHRETEwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApkaWZmIC0tZ2l0IGEvYWdlbnQvTWFrZWZpbGUuaW4gYi9hZ2VudC9NYWtlZmlsZS5pbgppbmRleCBhNjQ0OGY4Li43NDhiMDFjIDEwMDY0NAotLS0gYS9hZ2VudC9NYWtlZmlsZS5pbgorKysgYi9hZ2VudC9NYWtlZmlsZS5pbgpAQCAtMyw2ICszLDcgQEAKICMKIAogdG9wX2J1aWxkZGlyCT0gLi4KK215c3ViZGlyPWFnZW50CiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwogIyBWUEFUSCB3aWxsIHBpY2sgdXAgb2JqZWN0cyB0b28sIHdoaWNoIGlzIGJhZCBpZiB5b3UgYXJlIHNoYXJpbmcgYQpAQCAtMTYsMTUgKzE3LDE4IEBACiAjIHdoYXQgdG8gaW5zdGFsbAogIwogU1VCRElSUz1oZWxwZXJzIG1pYmdyb3VwCitGVFNVQkRJUlM9bWliZ3JvdXAgaGVscGVycwogCiBJTlNUQUxMU0JJTlBST0dTPSBAU05NUERACiBJTlNUQUxMTElCUwk9IGxpYm5ldHNubXBhZ2VudC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKIElOU1RBTExQT1NUTElCUwk9IGxpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogCiBJTkNMVURFU1VCRElSPWFnZW50Ci1JTkNMVURFU1VCRElSSEVBREVSUz1hZ2VudF9yZWFkX2NvbmZpZy5oIFwKK0hFQURFUlM9XAorCWFnZW50X3JlYWRfY29uZmlnLmggXAogCWFnZW50X3JlZ2lzdHJ5LmggXAogCWFnZW50X2luZGV4LmggXAorCWFnZW50X3N5c09SVGFibGUuaCBcCiAJYWdlbnRfdHJhcC5oIFwKIAlhdXRvX25saXN0LmggXAogCWRzX2FnZW50LmggXApAQCAtMzQsNyArMzgsMzggQEAKIAlhZ2VudF9oYW5kbGVyLmggXAogCW5ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmggXAogCW1pYl9tb2R1bGVzLmggXAotCWFnZW50X2NhbGxiYWNrcy5oCisJYWdlbnRfY2FsbGJhY2tzLmggXAorCXN5c09SVGFibGUuaCBcCisJYWxsX2hlbHBlcnMuaCBcCisJYmFieV9zdGVwcy5oIFwKKwlidWxrX3RvX25leHQuaCBcCisJY2FjaGVfaGFuZGxlci5oIFwKKwlkZWJ1Z19oYW5kbGVyLmggXAorCWluc3RhbmNlLmggXAorCW1vZGVfZW5kX2NhbGwuaCBcCisJbXVsdGlwbGV4ZXIuaCBcCisJbnVsbC5oIFwKKwlvbGRfYXBpLmggXAorCXJlYWRfb25seS5oIFwKKwlyb3dfbWVyZ2UuaCBcCisJc2NhbGFyLmggXAorCXNjYWxhcl9ncm91cC5oIFwKKwlzZXJpYWxpemUuaCBcCisJc25tcF9nZXRfc3RhdGlzdGljLmggXAorCXN0YXNoX2NhY2hlLmggXAorCXN0YXNoX3RvX25leHQuaCBcCisJdGFibGVfYXJyYXkuaCBcCisJdGFibGVfY29udGFpbmVyLmggXAorCXRhYmxlLmggXAorCXRhYmxlX2RhdGEuaCBcCisJdGFibGVfZGF0YXNldC5oIFwKKwl0YWJsZV90ZGF0YS5oIFwKKwl0YWJsZV9pdGVyYXRvci5oIFwKKwl3YXRjaGVyLmgKKworSEVBREVSU09OTFk9bWZkLmggc2V0X2hlbHBlci5oCisKK0lOQ0xVREVTVUJESVJIRUFERVJTPSQoSEVBREVSUykgJChIRUFERVJTT05MWSkKIAogSU5TVEFMTEJVSUxUU1VCRElSSEVBREVSUz0uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggXAogCQkJICAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCBcCkBAIC00Miw3ICs3Nyw4IEBACiBJTlNUQUxMQlVJTFRTVUJESVI9YWdlbnQKIAogSU5DTFVERU1JQkdST1VQRElSPWFnZW50L21pYmdyb3VwCi1JTkNMVURFTUlCR1JPVVBESVJIRUFERVJTPXV0aWxfZnVuY3MuaAorSU5DTFVERU1JQkdST1VQRElSSEVBREVSUz1zdHJ1Y3QuaCB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIFwKKwl1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKIAogT1RIRVJJTlNUQUxMPWluc3RhbGxtaWJncm91cGhlYWRlcnMgQEVNQkVEUEVSTElOU1RBTExACiBPVEhFUlVOSU5TVEFMTD1ARU1CRURQRVJMVU5JTlNUQUxMQApAQCAtNjAsNiArOTYsNyBAQAogCWFnZW50X2luZGV4LmgJXAogCWFnZW50X3JlYWRfY29uZmlnLmggXAogCWFnZW50X3JlZ2lzdHJ5LmggXAorCWFnZW50X3N5c09SVGFibGUuaCBcCiAJYWdlbnRfdHJhcC5oCVwKIAlhdXRvX25saXN0LmgJXAogCWRzX2FnZW50LmgJXApAQCAtNzUsMTYgKzExMiwxNiBAQAogIyBob3cgdG8gYnVpbGQgaXQgaW5mbwogIwogVVNFTElCUwkJPSAuLi9zbm1wbGliL2xpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1IRUxQRVJMSUIJPSBoZWxwZXJzL2xpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogQUdFTlRMSUIJPSBsaWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiBNSUJMSUIJCT0gbGlibmV0c25tcG1pYnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiAKIExBR0VOVExJQlMJPSBATEFHRU5UTElCU0AKIExNSUJMSUJTCT0gQExNSUJMSUJTQAorVkFMX0xJQlMJPSBAVkFMX0xJQlNACiBQRVJMTERPUFRTX0ZPUl9BUFBTID0gQFBFUkxMRE9QVFNfRk9SX0FQUFNACiBQRVJMTERPUFRTX0ZPUl9MSUJTID0gQFBFUkxMRE9QVFNfRk9SX0xJQlNACi1MSUJTCQk9ICQoVVNFTElCUykgQEFHRU5UTElCU0AgJChQRVJMTERPUFRTX0ZPUl9BUFBTKQotT1VSX0FHRU5UX0xJQlMJPSAkKEFHRU5UTElCKSAkKEhFTFBFUkxJQikgJChNSUJMSUIpICQoTElCUykgQERMTElCU0AKK0xJQlMJCT0gJChVU0VMSUJTKSBAQUdFTlRMSUJTQCAkKFBFUkxMRE9QVFNfRk9SX0FQUFMpICQoVkFMX0xJQlMpCitPVVJfQUdFTlRfTElCUwk9ICQoQUdFTlRMSUIpICQoTUlCTElCKSAkKExJQlMpIEBETExJQlNACiBDUFBGTEFHUwk9ICQoVE9QX0lOQ0xVREVTKSAtSS4gJChBR0VOVF9JTkNMVURFUykgJChNSUJHUk9VUF9JTkNMVURFUykgXAogCQkgICQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQCAKIApAQCAtOTUsMzAgKzEzMiwxNDkgQEAKIAogIyBsaWJuZXRzbm1wbWlicyBvYmplY3RzLgogQG1pYmdyb3VwX2xpc3RfbG9ACitAbWliZ3JvdXBfbGlzdF9mdEAKIEBtaWJncm91cF9saXN0X29ACiBAYWdlbnRncm91cF9saXN0X2xvQAorQGFnZW50Z3JvdXBfbGlzdF9mdEAKIEBhZ2VudGdyb3VwX2xpc3Rfb0AKK0ZUTUlCT0JKUwk9ICQobWliZ3JvdXBfbGlzdF9mdCkgbWliX21vZHVsZXMuZnQgYXV0b19ubGlzdC5mdAogTE1JQk9CSlMJPSAkKG1pYmdyb3VwX2xpc3RfbG8pIG1pYl9tb2R1bGVzLmxvIGF1dG9fbmxpc3QubG8KIE1JQk9CSlMJCT0gJChtaWJncm91cF9saXN0X28pIG1pYl9tb2R1bGVzLm8gYXV0b19ubGlzdC5vCiAKICMgbGlibmV0c25tcGFnZW50IG9iamVjdHMKLUxJQkFHRU5UT0JKUz1zbm1wX2FnZW50Lm8gc25tcF92YXJzLm8gYWdlbnRfcmVhZF9jb25maWcubyBcCi0JYWdlbnRfcmVnaXN0cnkubyBhZ2VudF9pbmRleC5vIGFnZW50X3RyYXAubyBrZXJuZWwubyBcCi0JIGFnZW50X2hhbmRsZXIubyAkKGFnZW50Z3JvdXBfbGlzdF9vKSBAT1RIRVJBR0VOVExJQk9CSlNACi1MTElCQUdFTlRPQkpTPXNubXBfYWdlbnQubG8gc25tcF92YXJzLmxvIGFnZW50X3JlYWRfY29uZmlnLmxvIFwKLQlhZ2VudF9yZWdpc3RyeS5sbyBhZ2VudF9pbmRleC5sbyBhZ2VudF90cmFwLmxvIGtlcm5lbC5sbyBcCi0JYWdlbnRfaGFuZGxlci5sbyAkKGFnZW50Z3JvdXBfbGlzdF9sbykgQE9USEVSQUdFTlRMSUJMT0JKU0AKK0xJQkFHRU5UT0JKUz0gXAorCWhlbHBlcnMvYWxsX2hlbHBlcnMubyBcCisJaGVscGVycy9iYWJ5X3N0ZXBzLm8gXAorCWhlbHBlcnMvYnVsa190b19uZXh0Lm8gXAorCWhlbHBlcnMvY2FjaGVfaGFuZGxlci5vIFwKKwloZWxwZXJzL2RlYnVnX2hhbmRsZXIubyBcCisJaGVscGVycy9pbnN0YW5jZS5vIFwKKwloZWxwZXJzL21vZGVfZW5kX2NhbGwubyBcCisJaGVscGVycy9tdWx0aXBsZXhlci5vIFwKKwloZWxwZXJzL251bGwubyBcCisJaGVscGVycy9vbGRfYXBpLm8gXAorCWhlbHBlcnMvcmVhZF9vbmx5Lm8gXAorCWhlbHBlcnMvcm93X21lcmdlLm8gXAorCWhlbHBlcnMvc2NhbGFyLm8gXAorCWhlbHBlcnMvc2NhbGFyX2dyb3VwLm8gXAorCWhlbHBlcnMvc2VyaWFsaXplLm8gXAorCWhlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLm8gXAorCWhlbHBlcnMvc3Rhc2hfY2FjaGUubyBcCisJaGVscGVycy9zdGFzaF90b19uZXh0Lm8gXAorCWhlbHBlcnMvdGFibGUubyBcCisJaGVscGVycy90YWJsZV9hcnJheS5vIFwKKwloZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5vIFwKKwloZWxwZXJzL3RhYmxlX2RhdGEubyBcCisJaGVscGVycy90YWJsZV9kYXRhc2V0Lm8gXAorCWhlbHBlcnMvdGFibGVfaXRlcmF0b3IubyBcCisJaGVscGVycy90YWJsZV9yb3cubyBcCisJaGVscGVycy90YWJsZV90ZGF0YS5vIFwKKwloZWxwZXJzL3dhdGNoZXIubyBcCisJYWdlbnRfaGFuZGxlci5vIFwKKwlhZ2VudF9pbmRleC5vIFwKKwlhZ2VudF9yZWFkX2NvbmZpZy5vIFwKKwlhZ2VudF9yZWdpc3RyeS5vIFwKKwlhZ2VudF9zeXNPUlRhYmxlLm8gXAorCWFnZW50X3RyYXAubyBcCisJa2VybmVsLm8gXAorCXNubXBfYWdlbnQubyBcCisJc25tcF92YXJzLm8gXAorCSQoYWdlbnRncm91cF9saXN0X28pIFwKKwlAT1RIRVJBR0VOVExJQk9CSlNACisKK0xMSUJBR0VOVE9CSlM9IFwKKwloZWxwZXJzL2FsbF9oZWxwZXJzLmxvIFwKKwloZWxwZXJzL2JhYnlfc3RlcHMubG8gXAorCWhlbHBlcnMvYnVsa190b19uZXh0LmxvIFwKKwloZWxwZXJzL2NhY2hlX2hhbmRsZXIubG8gXAorCWhlbHBlcnMvZGVidWdfaGFuZGxlci5sbyBcCisJaGVscGVycy9pbnN0YW5jZS5sbyBcCisJaGVscGVycy9tb2RlX2VuZF9jYWxsLmxvIFwKKwloZWxwZXJzL211bHRpcGxleGVyLmxvIFwKKwloZWxwZXJzL251bGwubG8gXAorCWhlbHBlcnMvb2xkX2FwaS5sbyBcCisJaGVscGVycy9yZWFkX29ubHkubG8gXAorCWhlbHBlcnMvcm93X21lcmdlLmxvIFwKKwloZWxwZXJzL3NjYWxhci5sbyBcCisJaGVscGVycy9zY2FsYXJfZ3JvdXAubG8gXAorCWhlbHBlcnMvc2VyaWFsaXplLmxvIFwKKwloZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5sbyBcCisJaGVscGVycy9zdGFzaF9jYWNoZS5sbyBcCisJaGVscGVycy9zdGFzaF90b19uZXh0LmxvIFwKKwloZWxwZXJzL3RhYmxlLmxvIFwKKwloZWxwZXJzL3RhYmxlX2FycmF5LmxvIFwKKwloZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5sbyBcCisJaGVscGVycy90YWJsZV9kYXRhLmxvIFwKKwloZWxwZXJzL3RhYmxlX2RhdGFzZXQubG8gXAorCWhlbHBlcnMvdGFibGVfaXRlcmF0b3IubG8gXAorCWhlbHBlcnMvdGFibGVfcm93LmxvIFwKKwloZWxwZXJzL3RhYmxlX3RkYXRhLmxvIFwKKwloZWxwZXJzL3dhdGNoZXIubG8gXAorCWFnZW50X2hhbmRsZXIubG8gXAorCWFnZW50X2luZGV4LmxvIFwKKwlhZ2VudF9yZWFkX2NvbmZpZy5sbyBcCisJYWdlbnRfcmVnaXN0cnkubG8gXAorCWFnZW50X3N5c09SVGFibGUubG8gXAorCWFnZW50X3RyYXAubG8gXAorCWtlcm5lbC5sbyBcCisJc25tcF9hZ2VudC5sbyBcCisJc25tcF92YXJzLmxvIFwKKwkkKGFnZW50Z3JvdXBfbGlzdF9sbykgXAorCUBPVEhFUkFHRU5UTElCTE9CSlNACisKK0xMSUJBR0VOVEZUUz0gXAorCWhlbHBlcnMvYWxsX2hlbHBlcnMuZnQgXAorCWhlbHBlcnMvYmFieV9zdGVwcy5mdCBcCisJaGVscGVycy9idWxrX3RvX25leHQuZnQgXAorCWhlbHBlcnMvY2FjaGVfaGFuZGxlci5mdCBcCisJaGVscGVycy9kZWJ1Z19oYW5kbGVyLmZ0IFwKKwloZWxwZXJzL2luc3RhbmNlLmZ0IFwKKwloZWxwZXJzL21vZGVfZW5kX2NhbGwuZnQgXAorCWhlbHBlcnMvbXVsdGlwbGV4ZXIuZnQgXAorCWhlbHBlcnMvbnVsbC5mdCBcCisJaGVscGVycy9vbGRfYXBpLmZ0IFwKKwloZWxwZXJzL3JlYWRfb25seS5mdCBcCisJaGVscGVycy9yb3dfbWVyZ2UuZnQgXAorCWhlbHBlcnMvc2NhbGFyLmZ0IFwKKwloZWxwZXJzL3NjYWxhcl9ncm91cC5mdCBcCisJaGVscGVycy9zZXJpYWxpemUuZnQgXAorCWhlbHBlcnMvc25tcF9nZXRfc3RhdGlzdGljLmZ0IFwKKwloZWxwZXJzL3N0YXNoX2NhY2hlLmZ0IFwKKwloZWxwZXJzL3N0YXNoX3RvX25leHQuZnQgXAorCWhlbHBlcnMvdGFibGUuZnQgXAorCWhlbHBlcnMvdGFibGVfYXJyYXkuZnQgXAorCWhlbHBlcnMvdGFibGVfY29udGFpbmVyLmZ0IFwKKwloZWxwZXJzL3RhYmxlX2RhdGEuZnQgXAorCWhlbHBlcnMvdGFibGVfZGF0YXNldC5mdCBcCisJaGVscGVycy90YWJsZV9pdGVyYXRvci5mdCBcCisJaGVscGVycy90YWJsZV9yb3cuZnQgXAorCWhlbHBlcnMvdGFibGVfdGRhdGEuZnQgXAorCWhlbHBlcnMvd2F0Y2hlci5mdCBcCisJYWdlbnRfaGFuZGxlci5mdCBcCisJYWdlbnRfaW5kZXguZnQgXAorCWFnZW50X3JlYWRfY29uZmlnLmZ0IFwKKwlhZ2VudF9yZWdpc3RyeS5mdCBcCisJYWdlbnRfc3lzT1JUYWJsZS5mdCBcCisJYWdlbnRfdHJhcC5mdCBcCisJa2VybmVsLmZ0IFwKKwlzbm1wX2FnZW50LmZ0IFwKKwlzbm1wX3ZhcnMuZnQgXAorCSQoYWdlbnRncm91cF9saXN0X2Z0KSBcCisJQE9USEVSQUdFTlRMSUJMRlRTQAogCiAjIFRoZSBhZ2VudCBvYmplY3RzLgogQUdFTlRPQkpTPXNubXBkLm8gQG90aGVyX2FnZW50b2Jqc0AKIExBR0VOVE9CSlM9c25tcGQubG8gQG90aGVyX2xhZ2VudG9ianNACitGVEFHRU5UT0JKUz1zbm1wZC5mdCBAb3RoZXJfZnRhZ2VudG9ianNACiAKICMKICMgRGVmaW5lIE9CSlMgYW5kIExPQkpTIGZvciBjbGVhbiB0YXJnZXQgKGp1c3QgdGhpcyBkaXJlY3RvcnkpCiAjCiBPQkpTCQk9ICQoTElCQUdFTlRPQkpTKSAgJChBR0VOVE9CSlMpICBtaWJfbW9kdWxlcy5vICBhdXRvX25saXN0Lm8KIExPQkpTCQk9ICQoTExJQkFHRU5UT0JKUykgJChMQUdFTlRPQkpTKSBtaWJfbW9kdWxlcy5sbyBhdXRvX25saXN0LmxvCitGVE9CSlMJCT0gJChMTElCQUdFTlRGVFMpICQoRlRBR0VOVE9CSlMpIG1pYl9tb2R1bGVzLmZ0IGF1dG9fbmxpc3QuZnQKIAorRkVBVFVSRUZJTEUgICAgID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZmVhdHVyZXMuaAogCiBhbGw6IGFnZW50bGliIHN1YmRpcnMgbWlibGliICQoSU5TVEFMTEJJTlBST0dTKSAkKElOU1RBTExTQklOUFJPR1MpCiAKQEAgLTE0MCwxMyArMjk2LDEyIEBACiBzbm1wZCQoRVhFRVhUKToJJHtMQUdFTlRPQkpTfSAkKFVTRUxJQlMpICQoQUdFTlRMSUIpICQoSEVMUEVSTElCKSAkKE1JQkxJQikgJChMSUJUQVJHKSAKIAkkKExJTkspICQoQ0ZMQUdTKSAtbyAkQCAke0xBR0VOVE9CSlN9ICR7TERGTEFHU30gJHtPVVJfQUdFTlRfTElCU30KIAotCiBsaWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pOiAgICAke0xMSUJBR0VOVE9CSlN9ICQoVVNFTElCUykKLQkkKExJQl9MRF9DTUQpICQoQUdFTlRMSUIpICR7TExJQkFHRU5UT0JKU30gJChVU0VMSUJTKSAke0xBR0VOVExJQlN9ICQoTERGTEFHUykgJChQRVJMTERPUFRTX0ZPUl9MSUJTKSAkKExJQl9MRF9MSUJTKQorCSQoTElCX0xEX0NNRCkgJChBR0VOVExJQikgJHtMTElCQUdFTlRPQkpTfSAkKFVTRUxJQlMpICR7TEFHRU5UTElCU30gQExEX05PX1VOREVGSU5FREAgJChMREZMQUdTKSAkKFBFUkxMRE9QVFNfRk9SX0xJQlMpICQoTElCX0xEX0xJQlMpIEBBR0VOVExJQlNACiAJJChSQU5MSUIpICQoQUdFTlRMSUIpCiAKLWxpYm5ldHNubXBtaWJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogJHtMTUlCT0JKU30gJChIRUxQRVJMSUIpICQoQUdFTlRMSUIpICQoVVNFTElCUykKLQkkKExJQl9MRF9DTUQpICQoTUlCTElCKSAke0xNSUJPQkpTfSAkKEhFTFBFUkxJQikgJChBR0VOVExJQikgJChVU0VMSUJTKSAke0xNSUJMSUJTfSAkKExERkxBR1MpICQoTElCX0xEX0xJQlMpCitsaWJuZXRzbm1wbWlicy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTik6ICR7TE1JQk9CSlN9ICQoQUdFTlRMSUIpICQoVVNFTElCUykKKwkkKExJQl9MRF9DTUQpICQoTUlCTElCKSAke0xNSUJPQkpTfSAkKEFHRU5UTElCKSAkKFVTRUxJQlMpIEBMRF9OT19VTkRFRklORURAICQoTERGTEFHUykgJHtMTUlCTElCU30gJChQRVJMTERPUFRTX0ZPUl9MSUJTKSAkKExJQl9MRF9MSUJTKSBAQUdFTlRMSUJTQAogCSQoUkFOTElCKSAkKE1JQkxJQikKIAogYWdlbnRsaWI6ICQoQUdFTlRMSUIpCkBAIC0xNjUsMTUgKzMyMCwxNiBAQAogCSAgQGVjaG8gInJlbW92ZWQgc25tcF9wZXJsLnBsIGZyb20gJChJTlNUQUxMX1BSRUZJWCkkKHNubXBsaWJkaXIpIgogCiBpbnN0YWxsbWliZ3JvdXBoZWFkZXJzOgotCUBpZiB0ZXN0ICIkKElOQ0xVREVNSUJHUk9VUERJUkhFQURFUlMpIiAhPSAiIiA7IHRoZW4gXAotICAgICAgICAgICAgICAgIGVjaG8gY3JlYXRpbmcgZGlyZWN0b3J5ICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS9hZ2VudCA7IFwKLSAgICAgICAgICAgICAgICBpdD0iJChJTkNMVURFTUlCR1JPVVBESVJIRUFERVJTKSIgOyBcCi0gICAgICAgICAgICAgICAgJChTSEVMTCkgJCh0b3Bfc3JjZGlyKS9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9QUkVGSVgpJChpbmNsdWRlZGlyKS9hZ2VudCA7IFwKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiAkJGl0IDsgZG8gXAotICAgICAgICAgICAgICAgICAgICAgICAgJChJTlNUQUxMX0RBVEEpICQodG9wX3NyY2RpcikvJChJTkNMVURFTUlCR1JPVVBESVIpLyQkaSAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQgOyBcCi0gICAgICAgICAgICAgICAgICAgICAgICBlY2hvICJpbnN0YWxsaW5nICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQiIDsgXAotICAgICAgICAgICAgICAgIGRvbmUgXAotICAgICAgICBmaQorCUBmb3IgaXQgaW4gJChJTkNMVURFTUlCR1JPVVBESVJIRUFERVJTKSA7IGRvIFwKKwkJaXRkPWBkaXJuYW1lICIkKElOU1RBTExfUFJFRklYKSQoaW5jbHVkZWRpcikvYWdlbnQvJCRpdCJgIDsgXAorCQlpZiBbICEgLWQgIiQkaXRkIiBdIDsgdGhlbiBcCisJCQllY2hvICJjcmVhdGluZyBkaXJlY3RvcnkgJCRpdGQiIDsgXAorCQkJJChTSEVMTCkgIiQodG9wX3NyY2RpcikvbWtpbnN0YWxsZGlycyIgIiQkaXRkIiA7IFwKKwkJZmkgOyBcCisJCSQoSU5TVEFMTF9EQVRBKSAiJCh0b3Bfc3JjZGlyKS8kKElOQ0xVREVNSUJHUk9VUERJUikvJCRpdCIgXAorCQkJIiQkaXRkIiA7IFwKKwkJZWNobyAiaW5zdGFsbGluZyAkJGl0IGluICQkaXRkIiA7IFwKKwlkb25lCiAKIEBtb2R1bGVfbGlzdF9kZXBzQAogQGFnZW50X21vZHVsZV9saXN0X2RlcHNACkBAIC0xODQsMTAgKzM0MCw2IEBACiAjIGRlcGVuZGVuY3kgZm9yIHNubXBsaWIgb2JqZWN0LiBpdCdzIGhlcmUgYmVjYXVzZSB0aGUgaGVhZGVycyBsaXN0ZWQKICMgYXJlIHJlbGF0aXZlIHRvIHRoZSBhZ2VudCBkaXJlY3RvcnkuCiAKLSQoSEVMUEVSTElCKTogc3ViZGlycwotIyB0aGUgYWJvdmUgaXMgbmVlZGVkIHdoZW4gYnVpbGRpbmcgd2l0aCAnLWonIGFyZ3VtZW50IC0gZXZlcnl0aGluZyB3aGF0IG5lZWRzIAotIyBoZWxwZXIgbGliIG11c3Qgd2FpdCB1bnRpbCAnc3ViZGlycycgdGFyZ2V0IGlzIGZpbmlzaGVkCi0KIHN1YmRpcnM6IGFnZW50bGliCiAjIHdhaXQgZm9yIGFnZW50bGliIGJlZm9yZSBidWlsZGluZyAnc3ViZGlycycgdGFyZ2V0CiAKZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X2hhbmRsZXIuYyBiL2FnZW50L2FnZW50X2hhbmRsZXIuYwppbmRleCBmY2JjNmRkLi41OWU5NjEzIDEwMDY0NAotLS0gYS9hZ2VudC9hZ2VudF9oYW5kbGVyLmMKKysrIGIvYWdlbnQvYWdlbnRfaGFuZGxlci5jCkBAIC05LDYgKzksNyBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIApAQCAtMjEsNiArMjIsOSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9oYW5kbGVyLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkLCBhZ2VudF9oYW5kbGVyKQogCiBzdGF0aWMgbmV0c25tcF9taWJfaGFuZGxlciAqX2Nsb25lX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaXQpOwogCkBAIC04NCw5ICs4OCwxMSBAQAogICogQHsKICAqLwogCi0vKiogY3JlYXRlcyBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0dXJlIGdpdmVuIGEgbmFtZSBhbmQgYSBhY2Nlc3MgbWV0aG9kLgorLyoqIENyZWF0ZXMgYSBNSUIgaGFuZGxlciBzdHJ1Y3R1cmUuCisgKiAgVGhlIG5ldyBzdHJ1Y3R1cmUgaXMgYWxsb2NhdGVkIGFuZCBmaWxsZWQgdXNpbmcgdGhlIGdpdmVuIG5hbWUKKyAqICBhbmQgYWNjZXNzIG1ldGhvZC4KICAqICBUaGUgcmV0dXJuZWQgaGFuZGxlciBzaG91bGQgdGhlbiBiZSBAbGluayBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKQotICogIHJlZ2lzdGVyZWQuQGVuZGxpbmsKKyAqICByZWdpc3RlcmVkIEBlbmRsaW5rLgogICoKICAqICBAcGFyYW0gbmFtZSBpcyB0aGUgaGFuZGxlciBuYW1lIGFuZCBpcyBjb3BpZWQgdGhlbiBhc3NpZ25lZCB0bwogICogICAgICAgICAgICAgIG5ldHNubXBfbWliX2hhbmRsZXItPmhhbmRsZXJfbmFtZQpAQCAtMTE3LDggKzEyMyw5IEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAotLyoqIGNyZWF0ZXMgYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUgZ2l2ZW4gYSBuYW1lLCBhCi0gKiAgYWNjZXNzX21ldGhvZCBmdW5jdGlvbiwgYSByZWdpc3RyYXRpb24gbG9jYXRpb24gb2lkIGFuZCB0aGUgbW9kZXMKKy8qKiBDcmVhdGVzIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLgorICogIFRoZSBuZXcgc3RydWN0dXJlIGlzIGFsbG9jYXRlZCBhbmQgZmlsbGVkIHVzaW5nIHRoZSBnaXZlbiBuYW1lLAorICogIGFjY2VzcyBmdW5jdGlvbiwgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIE9JRCBhbmQgbGlzdCBvZiBtb2RlcyB0aGF0CiAgKiAgdGhlIGhhbmRsZXIgc3VwcG9ydHMuIElmIG1vZGVzID09IDAsIHRoZW4gbW9kZXMgd2lsbCBhdXRvbWF0aWNhbGx5CiAgKiAgYmUgc2V0IHRvIHRoZSBkZWZhdWx0IHZhbHVlIG9mIG9ubHkgSEFORExFUl9DQU5fREVGQVVMVCwgd2hpY2ggaXMKICAqICBieSBkZWZhdWx0IHJlYWQtb25seSBHRVQgYW5kIEdFVE5FWFQgcmVxdWVzdHMuIEEgaGFuZGVyIHdoaWNoIHN1cHBvcnRzCkBAIC0xMzMsNyArMTQwLDcgQEAKICAqCiAgKiAgQHBhcmFtIHJlZ19vaWQgaXMgdGhlIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBvaWQuCiAgKgotICogIEBwYXJhbSByZWdfb2lkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHJlZ19vaWQsIGNhbiB1c2UgdGhlIG1hY3JvLAorICogIEBwYXJhbSByZWdfb2lkX2xlbiBpcyB0aGUgbGVuZ3RoIG9mIHJlZ19vaWQ7IGNhbiB1c2UgdGhlIG1hY3JvLAogICogICAgICAgICBPSURfTEVOR1RICiAgKgogICogIEBwYXJhbSBtb2RlcyBpcyB1c2VkIHRvIGNvbmZpZ3VyZSByZWFkL3dyaXRlIGFjY2Vzcy4gIElmIG1vZGVzID09IDAsIApAQCAtMTYyLDcgKzE2OSw3IEBACiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICoKIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGVzKQogewogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnRoZV9yZWc7CkBAIC0xNzksMjQgKzE4Niw2OCBAQAogICAgIHRoZV9yZWctPnByaW9yaXR5ID0gREVGQVVMVF9NSUJfUFJJT1JJVFk7CiAgICAgaWYgKG5hbWUpCiAgICAgICAgIHRoZV9yZWctPmhhbmRsZXJOYW1lID0gc3RyZHVwKG5hbWUpOwotICAgIHRoZV9yZWctPnJvb3RvaWQgPSBuZXRzbm1wX21lbWR1cChyZWdfb2lkLCByZWdfb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICB0aGVfcmVnLT5yb290b2lkID0gc25tcF9kdXBsaWNhdGVfb2JqaWQocmVnX29pZCwgcmVnX29pZF9sZW4pOwogICAgIHRoZV9yZWctPnJvb3RvaWRfbGVuID0gcmVnX29pZF9sZW47CiAgICAgcmV0dXJuIHRoZV9yZWc7CiB9CiAKKy8qKiBDcmVhdGVzIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIHdpdGggYSBuZXcgTUlCIGhhbmRsZXIuCisgKiAgVGhpcyBmdW5jdGlvbiBmaXJzdCBAbGluayBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCkgY3JlYXRlcyBAZW5kbGluaworICogIGEgTUlCIGhhbmRsZXIsIHRoZW4gQGxpbmsgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoKQorICogIG1ha2VzIHJlZ2lzdGF0aW9uIHN0cnVjdHVyZSBAZW5kbGluayBmb3IgaXQuCisgKgorICogIEBwYXJhbSBuYW1lIGlzIHRoZSBoYW5kbGVyIG5hbWUgZm9yIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoKQorICoKKyAqICBAcGFyYW0gaGFuZGxlcl9hY2Nlc3NfbWV0aG9kIGlzIGEgZnVuY3Rpb24gcG9pbnRlciB1c2VkIGFzIHRoZSBhY2Nlc3MKKyAqICAgICBtZXRob2QgZm9yIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoKQorICoKKyAqICBAcGFyYW0gcmVnX29pZCBpcyB0aGUgcmVnaXN0cmF0aW9uIGxvY2F0aW9uIG9pZC4KKyAqCisgKiAgQHBhcmFtIHJlZ19vaWRfbGVuIGlzIHRoZSBsZW5ndGggb2YgcmVnX29pZDsgY2FuIHVzZSB0aGUgbWFjcm8sCisgKiAgICAgICAgIE9JRF9MRU5HVEgKKyAqCisgKiAgQHBhcmFtIG1vZGVzIGlzIHVzZWQgdG8gY29uZmlndXJlIHJlYWQvd3JpdGUgYWNjZXNzLCBhcyBpbgorICogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgpCisgKgorICogIEByZXR1cm4gUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdC4KKyAqICAgICAgICAgIElmIHRoZSBzdHJ1Y3R1cmVzIGNyZWF0aW9uIGZhaWxlZCwgTlVMTCBpcyByZXR1cm5lZC4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCkKKyAqICBAc2VlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCkKKyAqLwogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbihjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLCBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgbW9kZXMpCiB7Ci0gICAgcmV0dXJuCi0gICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sIG1vZGVzKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpydiA9IE5VTEw7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIobmFtZSwgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKTsKKyAgICBpZiAoaGFuZGxlcikgeworICAgICAgICBydiA9IG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKAorICAgICAgICAgICAgbmFtZSwgaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIG1vZGVzKTsKKyAgICAgICAgaWYgKCFydikKKyAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOworICAgIH0KKyAgICByZXR1cm4gcnY7CiB9CiAKLS8qKiByZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gKi8KKy8qKiBSZWdpc3RlcnMgYSBNSUIgaGFuZGxlciBpbnNpZGUgdGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3R1cmUuCisgKiAgQ2hlY2tzIGdpdmVuIHJlZ2lzdGF0aW9uIGhhbmRsZXIgZm9yIHNhbml0eSwgdGhlbgorICogIEBsaW5rIG5ldHNubXBfcmVnaXN0ZXJfbWliKCkgcGVyZm9ybXMgcmVnaXN0cmF0aW9uIEBlbmRsaW5rCisgKiAgaW4gdGhlIE1JQiB0cmVlLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgKiAgcG9pbnRlci4gT24gc3VjY2VzcywgU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiBpcyBjYWxsZWQuCisgKiAgVGhlIHJlZ2lzdHJhdGlvbiBzdHJ1Y3QgbWF5IGJlIGNyZWF0ZWQgYnkgY2FsbCBvZgorICogIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkuCisgKgorICogIEBwYXJhbSByZWdpbmZvIFBvaW50ZXIgdG8gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHN0cnVjdC4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QX0VSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oKQorICogIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl9taWIoKQorICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMjYxLDcgKzMxMiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdpbmZvLCAxKTsKIH0KIAotLyoqIHVucmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuICovCisvKiogVW5yZWdpc3RlcnMgYSBNSUIgaGFuZGxlciBkZXNjcmliZWQgaW5zaWRlIHRoZSByZWdpc3RyYXRpb24gc3RydWN0dXJlLgorICogIFJlbW92ZXMgYSByZWdpc3RyYXRpb24sIHBlcmZvcm1lZCBlYXJsaWVyIGJ5CisgKiAgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCksIGZyb20gdGhlIE1JQiB0cmVlLgorICogIFVzZXMgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpIHRvIGRvIHRoZSB0YXNrLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBQb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqLwogaW50CiBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMjcxLDcgKzMzMywyMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPmNvbnRleHROYW1lKTsKIH0KIAotLyoqIHJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAqLworLyoqIFJlZ2lzdGVycyBhIE1JQiBoYW5kbGVyIGluc2lkZSB0aGUgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZS4KKyAqICBDaGVja3MgZ2l2ZW4gcmVnaXN0YXRpb24gaGFuZGxlciBmb3Igc2FuaXR5LCB0aGVuCisgKiAgQGxpbmsgbmV0c25tcF9yZWdpc3Rlcl9taWIoKSBwZXJmb3JtcyByZWdpc3RyYXRpb24gQGVuZGxpbmsKKyAqICBpbiB0aGUgTUlCIHRyZWUsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAqICBwb2ludGVyLiBOZXZlciBjYWxscyBTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLgorICogIFRoZSByZWdpc3RyYXRpb24gc3RydWN0IG1heSBiZSBjcmVhdGVkIGJ5IGNhbGwgb2YKKyAqICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigpLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBQb2ludGVyIHRvIGEgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfbm9jYWxsYmFjayhuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQogewpAQCAtMzE5LDExICszOTUsMTYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mbywgMCk7CiB9CiAKLS8qKiBpbmplY3QgYSBuZXcgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVycwotICAgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAgVGhlIG5ldwotICAgaGFuZGxlciBpcyBpbmplY3RlZCBhZnRlciB0aGUgYmVmb3JlX3doYXQgaGFuZGxlciwgb3IgaWYgTlVMTCBhdAotICAgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIgdG8gYmUgY2FsbGVkCi0gICBmaXJzdC4qLworLyoqIEluamVjdHMgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIGhhbmRsZXJzLgorICogIFRoZSBnaXZlbiBNSUIgaGFuZGxlciBpcyBpbnNlcnRlZCBhZnRlciB0aGUgaGFuZGxlciBuYW1lZCBiZWZvcmVfd2hhdC4KKyAqICBJZiBiZWZvcmVfd2hhdCBpcyBOVUxMLCB0aGUgaGFuZGxlciBpcyBwdXQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCwKKyAqICBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIoKQorICovCiBpbnQKIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtMzc3LDEwICs0NTgsMTUgQEAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCi0vKiogaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMKLSAgIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gIFRoZSBuZXcgaGFuZGxlciBpcwotICAgaW5qZWN0ZWQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIKLSAgIHRvIGJlIGNhbGxlZCBmaXJzdC4qLworLyoqIEluamVjdHMgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIGhhbmRsZXJzLgorICogIFRoZSBnaXZlbiBNSUIgaGFuZGxlciBpcyBwdXQgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCwKKyAqICBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkKKyAqICBAc2VlIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCkKKyAqLwogaW50CiBuZXRzbm1wX2luamVjdF9oYW5kbGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpCkBAIC0zODgsNyArNDc0LDEzIEBACiAgICAgcmV0dXJuIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKHJlZ2luZm8sIGhhbmRsZXIsIE5VTEwpOwogfQogCi0vKiogY2FsbHMgYSBoYW5kbGVyIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nIG9mIGFyZ3VtZW50cywgZXRjLiAqLworLyoqIENhbGxzIGEgTUlCIGhhbmRsZXJzIGNoYWluLCBzdGFydGluZyB3aXRoIHNwZWNpZmljIGhhbmRsZXIuCisgKiAgVGhlIGdpdmVuIGFyZ3VtZW50cyBhbmQgTUlCIGhhbmRsZXIgYXJlIGNoZWNrZWQKKyAqICBmb3Igc2FuaXR5LCB0aGVuIHRoZSBoYW5kbGVycyBhcmUgY2FsbGVkLCBvbmUgYnkgb25lLAorICogIHVudGlsIG5leHQgaGFuZGxlciBpcyBOVUxMLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KKyAqLwogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NhbGxfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpuZXh0X2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNDA5LDUzICs1MDEsNTUgQEAKICAgICB9CiAKICAgICBkbyB7Ci0gICAgbmggPSBuZXh0X2hhbmRsZXItPmFjY2Vzc19tZXRob2Q7Ci0gICAgaWYgKCFuaCkgewotICAgICAgICBpZiAobmV4dF9oYW5kbGVyLT5uZXh0KSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gYWNjZXNzIG1ldGhvZCBzcGVjaWZpZWQgaW4gaGFuZGxlciAlcy4iLAotICAgICAgICAgICAgICAgICAgICAgbmV4dF9oYW5kbGVyLT5oYW5kbGVyX25hbWUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgbmggPSBuZXh0X2hhbmRsZXItPmFjY2Vzc19tZXRob2Q7CisgICAgICAgIGlmICghbmgpIHsKKyAgICAgICAgICAgIGlmIChuZXh0X2hhbmRsZXItPm5leHQpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gYWNjZXNzIG1ldGhvZCBzcGVjaWZpZWQgaW4gaGFuZGxlciAlcy4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFRoZSBmaW5hbCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBpbiB0aGUgY2hhaW4gbWF5IHdlbGwgbm90IG5lZWQKKyAgICAgICAgICAgICAqIHRvIGluY2x1ZGUgYSBoYW5kbGVyIHJvdXRpbmUsIGlmIHRoZSBwcm9jZXNzaW5nIG9mIHRoaXMgb2JqZWN0CisgICAgICAgICAgICAgKiBpcyBoYW5kbGVkIGNvbXBsZXRlbHkgYnkgdGhlIGFnZW50IHRvb2xraXQgaGVscGVycy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpjYWxsaW5nIiwgImNhbGxpbmcgaGFuZGxlciAlcyBmb3IgbW9kZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgbmV4dF9oYW5kbGVyLT5oYW5kbGVyX25hbWUsCisgICAgICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSkpOworCiAgICAgICAgIC8qCi0gICAgICAgICAqIFRoZSBmaW5hbCBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBpbiB0aGUgY2hhaW4gbWF5IHdlbGwgbm90IG5lZWQKLSAgICAgICAgICogdG8gaW5jbHVkZSBhIGhhbmRsZXIgcm91dGluZSwgaWYgdGhlIHByb2Nlc3Npbmcgb2YgdGhpcyBvYmplY3QKLSAgICAgICAgICogaXMgaGFuZGxlZCBjb21wbGV0ZWx5IGJ5IHRoZSBhZ2VudCB0b29sa2l0IGhlbHBlcnMuCisgICAgICAgICAqIFhYWDogZGVmaW5lIGFjY2VwdGFibGUgcmV0dXJuIHN0YXR1c2VzCiAgICAgICAgICAqLwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICB9CisgICAgICAgIHJldCA9ICgqbmgpIChuZXh0X2hhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sIHJlcXVlc3RzKTsKIAotICAgIERFQlVHTVNHVEwoKCJoYW5kbGVyOmNhbGxpbmciLCAiY2FsbGluZyBoYW5kbGVyICVzIGZvciBtb2RlICVzXG4iLAotICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lLAotICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpyZXR1cm5lZCIsICJoYW5kbGVyICVzIHJldHVybmVkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBuZXh0X2hhbmRsZXItPmhhbmRsZXJfbmFtZSwgcmV0KSk7CiAKLSAgICAvKgotICAgICAqIFhYWDogZGVmaW5lIGFjY2VwdGFibGUgcmV0dXJuIHN0YXR1c2VzIAotICAgICAqLwotICAgIHJldCA9ICgqbmgpIChuZXh0X2hhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sIHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKCEgKG5leHRfaGFuZGxlci0+ZmxhZ3MgJiBNSUJfSEFORExFUl9BVVRPX05FWFQpKQorICAgICAgICAgICAgYnJlYWs7CiAKLSAgICBERUJVR01TR1RMKCgiaGFuZGxlcjpyZXR1cm5lZCIsICJoYW5kbGVyICVzIHJldHVybmVkICVkXG4iLAotICAgICAgICAgICAgICAgIG5leHRfaGFuZGxlci0+aGFuZGxlcl9uYW1lLCByZXQpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogZGlkIGhhbmRsZXIgc2lnbmFsIHRoYXQgaXQgZGlkbid0IHdhbnQgYXV0byBuZXh0IHRoaXMgdGltZSBhcm91bmQ/CisgICAgICAgICAqLworICAgICAgICBpZihuZXh0X2hhbmRsZXItPmZsYWdzICYgTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0UpIHsKKyAgICAgICAgICAgIG5leHRfaGFuZGxlci0+ZmxhZ3MgJj0gfk1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KIAotICAgIGlmICghIChuZXh0X2hhbmRsZXItPmZsYWdzICYgTUlCX0hBTkRMRVJfQVVUT19ORVhUKSkKLSAgICAgICAgYnJlYWs7Ci0KLSAgICAvKgotICAgICAqIGRpZCBoYW5kbGVyIHNpZ25hbCB0aGF0IGl0IGRpZG4ndCB3YW50IGF1dG8gbmV4dCB0aGlzIHRpbWUgYXJvdW5kPwotICAgICAqLwotICAgIGlmKG5leHRfaGFuZGxlci0+ZmxhZ3MgJiBNSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRSkgewotICAgICAgICBuZXh0X2hhbmRsZXItPmZsYWdzICY9IH5NSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgbmV4dF9oYW5kbGVyID0gbmV4dF9oYW5kbGVyLT5uZXh0OworICAgICAgICBuZXh0X2hhbmRsZXIgPSBuZXh0X2hhbmRsZXItPm5leHQ7CiAKICAgICB9IHdoaWxlKG5leHRfaGFuZGxlcik7CiAKICAgICByZXR1cm4gcmV0OwogfQogCi0vKiogQGludGVybmFsCi0gKiAgY2FsbHMgYWxsIHRoZSBoYW5kbGVycyBmb3IgYSBnaXZlbiBtb2RlLgorLyoqIEBwcml2YXRlCisgKiAgQ2FsbHMgYWxsIHRoZSBNSUIgSGFuZGxlcnMgaW4gcmVnaXN0cmF0aW9uIHN0cnVjdCBmb3IgYSBnaXZlbiBtb2RlLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBfRVJSXyogZXJyb3IgY29kZS4KICAqLwogaW50CiBuZXRzbm1wX2NhbGxfaGFuZGxlcnMobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTQ4Niw2ICs1ODAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7ICAgIC8qIGxlZ2FsICovCiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTUwMCw2ICs1OTUsNyBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBtb2RlIGluIG5ldHNubXBfY2FsbF9oYW5kbGVycyEgYnVnIVxuIik7CkBAIC01MTcsOCArNjEzLDEzIEBACiAgICAgcmV0dXJuIHN0YXR1czsKIH0KIAotLyoqIGNhbGxzIHRoZSBuZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB3aXRoCi0gICB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcsIGV0Yy4gKi8KKy8qKiBAcHJpdmF0ZQorICogIENhbGxzIHRoZSBuZXh0IE1JQiBoYW5kbGVyIGluIHRoZSBjaGFpbiwgYWZ0ZXIgdGhlIGN1cnJlbnQgb25lLgorICogIFRoZSBnaXZlbiBhcmd1bWVudHMgYW5kIE1JQiBoYW5kbGVyIGFyZSBjaGVja2VkCisgKiAgZm9yIHNhbml0eSwgdGhlbiB0aGUgbmV4dCBoYW5kbGVyIGlzIGNhbGxlZC4KKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QX0VSUl8qIGVycm9yIGNvZGUuCisgKi8KIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpjdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNTM5LDggKzY0MCwxNSBAQAogICAgIHJldHVybiBuZXRzbm1wX2NhbGxfaGFuZGxlcihjdXJyZW50LT5uZXh0LCByZWdpbmZvLCByZXFpbmZvLCByZXF1ZXN0cyk7CiB9CiAKLS8qKiBjYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aAotICAgd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuICovCisvKiogQHByaXZhdGUKKyAqICBDYWxscyB0aGUgbmV4dCBNSUIgaGFuZGxlciBpbiB0aGUgY2hhaW4sIGFmdGVyIHRoZSBjdXJyZW50IG9uZS4KKyAqICBUaGUgZ2l2ZW4gYXJndW1lbnRzIGFuZCBNSUIgaGFuZGxlciBhcmUgbm90IHZhbGlkYXRlZCBiZWZvcmUKKyAqICB0aGUgY2FsbCwgb25seSByZXF1ZXN0IGlzIGNoZWNrZWQuCisgKgorICogIEByZXR1cm4gUmV0dXJucyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUF9FUlJfKiBlcnJvciBjb2RlLgorICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9jYWxsX25leHRfaGFuZGxlcl9vbmVfcmVxdWVzdCxuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NBTExfTkVYVF9IQU5ETEVSX09ORV9SRVFVRVNUCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXJfb25lX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTU2Miw4ICs2NzAsMTUgQEAKICAgICByZXF1ZXN0cy0+bmV4dCA9IHJlcXVlc3Q7CiAgICAgcmV0dXJuIHJldDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQ0FMTF9ORVhUX0hBTkRMRVJfT05FX1JFUVVFU1QgKi8KIAotLyoqIGZyZWVzIHRoZSByZXNvdXJjZXMgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gaGFuZGxlciAqLworLyoqIERlYWxsb2NhdGVzIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBoYW5kbGVyLgorICogIFRoZSBoYW5kbGVyIGlzIHJlbW92ZWQgZnJvbSBjaGFpbiBhbmQgdGhlbiBmcmVlZC4KKyAqICBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIHRoZSBoYW5kbGVyIHBvaW50ZXIgaXMgaW52YWxpZAorICogIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKgorICogIEBwYXJhbSBoYW5kbGVyIGlzIHRoZSBNSUIgSGFuZGxlciB0byBiZSBmcmVlZAorICovCiB2b2lkCiBuZXRzbm1wX2hhbmRsZXJfZnJlZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQogewpAQCAtNTgzLDM5ICs2OTgsNjYgQEAKICAgICB9CiB9CiAKLS8qKiBkdXBsaWNhdGVzIGEgaGFuZGxlciBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMKLSAqIHNlZSBhbHNvIF9jbG9uZV9oYW5kbGVyCisvKiogRHVwbGljYXRlcyBhIE1JQiBoYW5kbGVyIGFuZCBhbGwgc3Vic2VxdWVudCBoYW5kbGVycy4KKyAqICBDcmVhdGVzIGEgY29weSBvZiBhbGwgZGF0YSBpbiBnaXZlbiBoYW5kbGVycyBjaGFpbi4KKyAqCisgKiAgQHBhcmFtIGhhbmRsZXIgaXMgdGhlIE1JQiBIYW5kbGVyIHRvIGJlIGR1cGxpY2F0ZWQKKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY29tcGxldGUgY29weSwKKyAqICAgICAgICAgb3IgTlVMTCBpZiBhbnkgcHJvYmxlbSBvY2N1cmVkLgorICoKKyAqIEBzZWUgX2Nsb25lX2hhbmRsZXIoKQogICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfaGFuZGxlcl9kdXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKIHsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoID0gTlVMTDsKIAotICAgIGlmIChoYW5kbGVyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQorICAgIGlmICghaGFuZGxlcikKKyAgICAgICAgZ290byBlcnI7CiAKICAgICBoID0gX2Nsb25lX2hhbmRsZXIoaGFuZGxlcik7CisgICAgaWYgKCFoKQorICAgICAgICBnb3RvIGVycjsKIAotICAgIGlmIChoICE9IE5VTEwpIHsKKyAgICAvKgorICAgICAqIFByb3ZpZGluZyBhIGNsb25lIGZ1bmN0aW9uIHdpdGhvdXQgYSBmcmVlIGZ1bmN0aW9uIGlzIGFza2luZyBmb3IKKyAgICAgKiBtZW1vcnkgbGVha3MsIGFuZCBwcm92aWRpbmcgYSBmcmVlIGZ1bmN0aW9uIHdpdGhvdXQgY2xvbmUgZnVuY3Rpb24KKyAgICAgKiBpcyBhc2tpbmcgZm9yIG1lbW9yeSBjb3JydXB0aW9uLiBIZW5jZSB0aGUgbG9nIHN0YXRlbWVudCBiZWxvdy4KKyAgICAgKi8KKyAgICBpZiAoISFoYW5kbGVyLT5kYXRhX2Nsb25lICE9ICEhaGFuZGxlci0+ZGF0YV9mcmVlKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZGF0YV9jbG9uZSAvIGRhdGFfZnJlZSBpbmNvbnNpc3RlbnQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgaGFuZGxlci0+aGFuZGxlcl9uYW1lKTsKKyAgICBpZiAoaGFuZGxlci0+bXl2b2lkICYmIGhhbmRsZXItPmRhdGFfY2xvbmUpIHsKKyAgICAgICAgaC0+bXl2b2lkID0gaGFuZGxlci0+ZGF0YV9jbG9uZShoYW5kbGVyLT5teXZvaWQpOworICAgICAgICBpZiAoIWgtPm15dm9pZCkKKyAgICAgICAgICAgIGdvdG8gZXJyOworICAgIH0gZWxzZQogICAgICAgICBoLT5teXZvaWQgPSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgICAgIGgtPmRhdGFfZnJlZSA9IGhhbmRsZXItPmRhdGFfZnJlZTsKKyAgICBoLT5kYXRhX2Nsb25lID0gaGFuZGxlci0+ZGF0YV9jbG9uZTsKKyAgICBoLT5kYXRhX2ZyZWUgPSBoYW5kbGVyLT5kYXRhX2ZyZWU7CiAKLSAgICAgICAgaWYgKGhhbmRsZXItPm5leHQgIT0gTlVMTCkgewotICAgICAgICAgICAgaC0+bmV4dCA9IG5ldHNubXBfaGFuZGxlcl9kdXAoaGFuZGxlci0+bmV4dCk7Ci0gICAgICAgICAgICBpZiAoaC0+bmV4dCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBoLT5uZXh0LT5wcmV2ID0gaDsKLSAgICAgICAgfQotICAgICAgICBoLT5wcmV2ID0gTlVMTDsKLSAgICAgICAgcmV0dXJuIGg7CisgICAgaWYgKGhhbmRsZXItPm5leHQgIT0gTlVMTCkgeworICAgICAgICBoLT5uZXh0ID0gbmV0c25tcF9oYW5kbGVyX2R1cChoYW5kbGVyLT5uZXh0KTsKKyAgICAgICAgaWYgKCFoLT5uZXh0KQorICAgICAgICAgICAgZ290byBlcnI7CisgICAgICAgIGgtPm5leHQtPnByZXYgPSBoOwogICAgIH0KKyAgICBoLT5wcmV2ID0gTlVMTDsKKyAgICByZXR1cm4gaDsKKworZXJyOgorICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGgpOwogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogZnJlZSB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCAqLworLyoqIEZyZWUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdC4KKyAqICBUaGUgcmVnaXN0cmF0aW9uIG9iamVjdCBhbmQgYWxsIE1JQiBIYW5kbGVycyBpbiB0aGUgY2hhaW4gYXJlCisgKiAgZnJlZWQuIFdoZW4gdGhlIGZ1bmN0aW9uIGVuZHMsIGdpdmVuIHBvaW50ZXIgaXMgbm8gbG9uZ2VyIHZhbGlkCisgKiAgYW5kIHNob3VsZCBiZSBzZXQgdG8gTlVMTC4KKyAqCisgKiAgQHBhcmFtIHJlZ2luZm8gaXMgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCB0byBiZSBmcmVlZAorICovCiB2b2lkCiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTYyOSw3ICs3NzEsMTYgQEAKICAgICB9CiB9CiAKLS8qKiBkdXBsaWNhdGVzIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgKi8KKy8qKiBEdXBsaWNhdGVzIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMuCisgKiAgQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCBhbmQgYWxsIGl0cyBkYXRhLgorICoKKyAqICBAcGFyYW0gcmVnaW5mbyBpcyB0aGUgaGFuZGxlciByZWdpc3RyYXRpb24gb2JqZWN0IHRvIGJlIGR1cGxpY2F0ZWQKKyAqCisgKiAgQHJldHVybiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY29tcGxldGUgY29weSwKKyAqICAgICAgICAgb3IgTlVMTCBpZiBhbnkgcHJvYmxlbSBvY2N1cmVkLgorICoKKyAqIEBzZWUgbmV0c25tcF9oYW5kbGVyX2R1cCgpCisgKi8KIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKgogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9kdXAobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKIHsKQEAgLTY2OSw4ICs4MjAsOCBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKHJlZ2luZm8tPnJvb3RvaWQgIT0gTlVMTCkgewotICAgICAgICAgICAgci0+cm9vdG9pZCA9IG5ldHNubXBfbWVtZHVwKHJlZ2luZm8tPnJvb3RvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICByLT5yb290b2lkID0KKyAgICAgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChyZWdpbmZvLT5yb290b2lkLCByZWdpbmZvLT5yb290b2lkX2xlbik7CiAgICAgICAgICAgICBpZiAoci0+cm9vdG9pZCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHIpOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtNjg4LDkgKzgzOSwxNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogY3JlYXRlcyBhIGNhY2hlIG9mIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBzYXZlZCBmb3IgZnV0dXJlCi0gICByZWZlcmVuY2UuICBVc2UgbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKCkgbGF0ZXIgdG8gbWFrZSBzdXJlIGl0J3Mgc3RpbGwKLSAgIHZhbGlkIGJlZm9yZSByZWZlcmVuY2luZyBpdCBpbiB0aGUgZnV0dXJlLiAqLworLyoqIENyZWF0ZXMgYSBjYWNoZSBvZiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgc2F2ZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgKiAgVGhlIGNhY2hlIGlzIGZpbGxlZCB3aXRoIHBvaW50ZXJzIGZyb20gcGFyYW1ldGVycy4gTm90ZSB0aGF0CisgKiAgdGhlIGlucHV0IHN0cnVjdHVyZXMgYXJlIG5vdCBkdXBsaWNhdGVkLCBidXQgcHV0IGRpcmVjdGx5IGludG8KKyAqICB0aGUgbmV3IGNhY2hlIHN0cnVjdC4KKyAqICBVc2UgbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKCkgbGF0ZXIgdG8gbWFrZSBzdXJlIGl0J3Mgc3RpbGwKKyAqICB2YWxpZCBiZWZvcmUgcmVmZXJlbmNpbmcgaXQgaW4gdGhlIGZ1dHVyZS4KKyAqCisgKiBAc2VlIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGUoKQorICovCiBORVRTTk1QX0lOTElORSBuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZSAqCiBuZXRzbm1wX2NyZWF0ZV9kZWxlZ2F0ZWRfY2FjaGUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNzEyLDkgKzg3MCwxNyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLS8qKiBjaGVjaydzIGEgZ2l2ZW4gY2FjaGUgYW5kIHJldHVybnMgaXQgaWYgaXQgaXMgc3RpbGwgdmFsaWQgKGllLCB0aGUKLSAgIGFnZW50IHN0aWxsIGNvbnNpZGVycyBpdCB0byBiZSBhbiBvdXRzdGFuZGluZyByZXF1ZXN0LiAgUmV0dXJucwotICAgTlVMTCBpZiBpdCdzIG5vIGxvbmdlciB2YWxpZC4gKi8KKy8qKiBDaGVjayBpZiBhIGdpdmVuIGRlbGVnYXRlZCBjYWNoZSBpcyBzdGlsbCB2YWxpZC4KKyAqICBUaGUgY2FjaGUgaXMgdmFsaWQgaWYgaXQncyBhIHBhcnQgb2YgdHJhbnNhY3Rpb24KKyAqICAoaWUsIHRoZSBhZ2VudCBzdGlsbCBjb25zaWRlcnMgaXQgdG8gYmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCkuCisgKgorICogIEBwYXJhbSBkY2FjaGUgaXMgdGhlIGRlbGVnYXRlZCBjYWNoZSB0byBiZSBjaGVja2VkLgorICoKKyAqICBAcmV0dXJuIFJldHVybnMgdGhlIGNhY2hlIHBvaW50ZXIgaWYgaXQgaXMgc3RpbGwgdmFsaWQsIE5VTEwgb3RoZXJ3aXNlLgorICoKKyAqIEBzZWUgbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKCkKKyAqIEBzZWUgbmV0c25tcF9mcmVlX2RlbGVnYXRlZF9jYWNoZSgpCisgKi8KIE5FVFNOTVBfSU5MSU5FIG5ldHNubXBfZGVsZWdhdGVkX2NhY2hlICoKIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZShuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZSAqZGNhY2hlKQogewpAQCAtNzI4LDcgKzg5NCwxNiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0vKiogZnJlZXMgYSBjYWNoZSBvbmNlIHlvdSdyZSBmaW5pc2hlZCB1c2luZyBpdCAqLworLyoqIEZyZWUgYSBjYWNoZSBvbmNlIGl0J3Mgbm8gbG9uZ2VyIHVzZWQuCisgKiAgRGVsZXRlcyB0aGUgZGF0YSBhbGxvY2F0ZWQgYnkgbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKCkuCisgKiAgU3RydWN0dXJlcyB3aGljaCB3ZXJlIG5vdCBhbGxvY2F0ZWQgYnkgbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKCkKKyAqICBhcmUgbm90IGZyZWVkIChwb2ludGVycyBhcmUgZHJvcHBlZCkuCisgKgorICogIEBwYXJhbSBkY2FjaGUgaXMgdGhlIGRlbGVnYXRlZCBjYWNoZSB0byBiZSBmcmVlZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfY3JlYXRlX2RlbGVnYXRlZF9jYWNoZSgpCisgKiBAc2VlIG5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpCisgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGUobmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGUgKmRjYWNoZSkKIHsKQEAgLTc0Miw3ICs5MTcsMTQgQEAKIH0KIAogCi0vKiogbWFya3MgYSBsaXN0IG9mIHJlcXVlc3RzIGFzIGRlbGVnYXRlZCAob3Igbm90IGlmIGlzZGVsZWdhZGVkID0gMCkgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQU5ETEVSX01BUktfUkVRVUVTVFNfQVNfREVMRUdBVEVECisvKiogU2V0cyBhIGxpc3Qgb2YgcmVxdWVzdHMgYXMgZGVsZWdhdGVkIG9yIG5vdCBkZWxlZ2F0ZWQuCisgKiAgU3dlZXBzIHRocm91Z2ggZ2l2ZW4gY2hhaW4gb2YgcmVxdWVzdHMgYW5kIHNldHMgJ2RlbGVnYXRlZCcKKyAqICBmbGFnIGFjY29yZGluZ2x5IHRvIHRoZSBpc2RlbGVnYWRlZCBwYXJhbWV0ZXIuCisgKgorICogIEBwYXJhbSByZXF1ZXN0cyBSZXF1ZXN0IGxpc3QuCisgKiAgQHBhcmFtIGlzZGVsZWdhdGVkIE5ldyB2YWx1ZSBvZiB0aGUgJ2RlbGVnYXRlZCcgZmxhZy4KKyAqLwogdm9pZAogbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNkZWxlZ2F0ZWQpCkBAIC03NTIsMTYgKzkzNCwxOCBAQAogICAgICAgICByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0OwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBTkRMRVJfTUFSS19SRVFVRVNUU19BU19ERUxFR0FURUQgKi8KIAotLyoqIGFkZCBkYXRhIHRvIGEgcmVxdWVzdCB0aGF0IGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgYnkgc3VibW9kdWxlcworLyoqIEFkZHMgZGF0YSBmcm9tIG5vZGUgbGlzdCB0byB0aGUgcmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCisgKiAgRGF0YSBpbiB0aGUgcmVxdWVzdCBjYW4gYmUgbGF0ZXIgZXh0cmFjdGVkIGFuZCB1c2VkIGJ5IHN1Ym1vZHVsZXMuCiAgKgotICogQHBhcmFtIHJlcXVlc3QgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZQorICogQHBhcmFtIHJlcXVlc3QgRGVzdGluYXRpb24gcmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUuCiAgKgotICogQHBhcmFtIG5vZGUgdGhpcyBpcyB0aGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QKLSAqICAgICAgICAgICAgIHJlcXVlc3QtPnBhcmVudF9kYXRhCisgKiBAcGFyYW0gbm9kZSBUaGUgZGF0YSB0byBiZSBhZGRlZCB0byB0aGUgbGlua2VkIGxpc3QKKyAqICAgICAgICAgICAgIHJlcXVlc3QtPnBhcmVudF9kYXRhLgogICoKLSAqIEByZXR1cm4gdm9pZAotICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YSgpCiAgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtNzc1LDcgKzk1OSw3IEBACiAgICAgfQogfQogCi0vKiogcmVtb3ZlIGRhdGEgZnJvbSBhIHJlcXVlc3QKKy8qKiBSZW1vdmVzIGFsbCBkYXRhIGZyb20gYSByZXF1ZXN0LgogICoKICAqIEBwYXJhbSByZXF1ZXN0IHRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUKICAqCkBAIC03ODMsNiArOTY3LDggQEAKICAqCiAgKiBAcmV0dXJuIDAgb24gc3VjY2Vzc2Z1bCBmaW5kLWFuZC1kZWxldGUsIDEgb3RoZXJ3aXNlLgogICoKKyAqIEBzZWUgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEoKQorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YSgpCiAgKi8KIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCkBAIC03OTQsMTYgKzk4MCwyMCBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUoJnJlcXVlc3QtPnBhcmVudF9kYXRhLCBuYW1lKTsKIH0KIAotLyoqIGV4dHJhY3QgZGF0YSBmcm9tIGEgcmVxdWVzdCB0aGF0IHdhcyBhZGRlZCBwcmV2aW91c2x5IGJ5IGEgcGFyZW50IG1vZHVsZQorLyoqIEV4dHJhY3RzIGRhdGEgZnJvbSBhIHJlcXVlc3QuCisgKiAgUmV0cmlldmVzIGRhdGEgdGhhdCB3YXMgcHJldmlvdXNseSBhZGRlZCB0byB0aGUgcmVxdWVzdCwKKyAqICB1c3VhbGx5IGJ5IGEgcGFyZW50IG1vZHVsZS4KICAqCi0gKiBAcGFyYW0gcmVxdWVzdCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gZnVuY3Rpb24KKyAqIEBwYXJhbSByZXF1ZXN0IFNvdXJjZSByZXF1ZXN0IGluZm9ybWF0aW9uIHN0cnVjdHVyZS4KICAqCi0gKiBAcGFyYW0gbmFtZSB1c2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdC0+cGFyZW50X2RhdGEtPm5hbWUgdmFsdWUsCi0gKiAgICAgICAgICAgICBpZiBhIG1hdGNoIGlzIGZvdW5kIHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhIGlzIHJldHVybmVkCisgKiBAcGFyYW0gbmFtZSBVc2VkIHRvIGNvbXBhcmUgYWdhaW5zdCB0aGUgcmVxdWVzdC0+cGFyZW50X2RhdGEtPm5hbWUgdmFsdWU7CisgKiAgICAgICAgICAgICBpZiBhIG1hdGNoIGlzIGZvdW5kLCByZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSBpcyByZXR1cm5lZC4KICAqCi0gKiBAcmV0dXJuIGEgdm9pZCBwb2ludGVyKHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhKSwgb3RoZXJ3aXNlIE5VTEwgaXMKLSAqICAgICAgICAgcmV0dXJuZWQgaWYgcmVxdWVzdCBpcyBOVUxMIG9yIHJlcXVlc3QtPnBhcmVudF9kYXRhIGlzIE5VTEwgb3IKLSAqICAgICAgICAgcmVxdWVzdC0+cGFyZW50X2RhdGEgb2JqZWN0IGlzIG5vdCBmb3VuZC4KKyAqIEByZXR1cm4gR2l2ZXMgYSB2b2lkIHBvaW50ZXIocmVxdWVzdC0+cGFyZW50X2RhdGEtPmRhdGEpOyBOVUxMIGlzCisgKiAgICAgICAgIHJldHVybmVkIGlmIHNvdXJjZSBkYXRhIGlzIE5VTEwgb3IgdGhlIG9iamVjdCBpcyBub3QgZm91bmQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKiBAc2VlIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKCkKICAqLwogdm9pZCAgICAqCiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKQEAgLTgxNCw3ICsxMDA0LDE1IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKLS8qKiBGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIHJlcXVlc3QgKi8KKy8qKiBGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIHJlcXVlc3QuCisgKiAgRGVsZXRlcyB0aGUgZGF0YSBpbiBnaXZlbiByZXF1ZXN0IG9ubHkuIE90aGVyIGNoYWluIGl0ZW1zCisgKiAgYXJlIHVuYWZmZWN0ZWQuCisgKgorICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9saXN0X2RhdGEoKQorICovCiBORVRTTk1QX0lOTElORSB2b2lkCiBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKQEAgLTgyMiw3ICsxMDIwLDE0IEBACiAgICAgICAgIG5ldHNubXBfZnJlZV9saXN0X2RhdGEocmVxdWVzdC0+cGFyZW50X2RhdGEpOwogfQogCi0vKiogRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSBidW5jaCBvZiByZXF1ZXN0cyAoYWxsIGRhdGEgaW4gdGhlIGNoYWluKSAqLworLyoqIEZyZWUgdGhlIGV4dHJhIGRhdGEgc3RvcmVkIGluIGEgYnVuY2ggb2YgcmVxdWVzdHMuCisgKiAgRGVsZXRlcyBhbGwgZGF0YSBpbiB0aGUgY2hhaW4gaW5zaWRlIHJlcXVlc3QuCisgKgorICogQHBhcmFtIHJlcXVlc3QgUmVxdWVzdCBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgdG8gYmUgbW9kaWZpZWQuCisgKgorICogQHNlZSBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YSgpCisgKiBAc2VlIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0KCkKKyAqLwogTkVUU05NUF9JTkxJTkUgdm9pZAogbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewpAQCAtODMyLDcgKzEwMzcsMTcgQEAKICAgICB9CiB9CiAKLS8qKiBSZXR1cm5zIGEgaGFuZGxlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUgKi8KKy8qKiBSZXR1cm5zIGEgTUlCIGhhbmRsZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLgorICoKKyAqIEBwYXJhbSByZWdpbmZvIEhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdCB3aGljaCBjb250YWlucyB0aGUgY2hhaW4uCisgKgorICogQHBhcmFtIG5hbWUgVGFyZ2V0IE1JQiBIYW5kbGVyIG5hbWUgc3RyaW5nLiBUaGUgbmFtZSBpcyBjYXNlCisgKiAgICAgICAgc2Vuc2l0aXZlLgorICoKKyAqIEByZXR1cm4gVGhlIE1JQiBIYW5kbGVyIGlzIHJldHVybmVkLCBvciBOVUxMIGlmIG5vdCBmb3VuZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKCkKKyAqLwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9ieV9uYW1lKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpCkBAIC04NDgsMTAgKzEwNjMsMjIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIFJldHVybnMgYSBoYW5kbGVyJ3Mgdm9pZCAqIHBvaW50ZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLgotIFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIHVzZWQgYnkgdGhlIGdlbmVyYWwgcHVibGljIGFzIHRoZSB2b2lkICoKLSBkYXRhIG1heSBjaGFuZ2UgYXMgYSBoYW5kbGVyIGV2b2x2ZXMuICBIYW5kbGVycyBzaG91bGQgcmVhbGx5Ci0gYWR2ZXJ0aXNlIHNvbWUgZnVuY3Rpb24gZm9yIHlvdSB0byB1c2UgaW5zdGVhZC4gKi8KKy8qKiBSZXR1cm5zIGEgaGFuZGxlcidzIHZvaWQgcG9pbnRlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUuCisgKgorICogQHdhcm5pbmcgVGhlIHZvaWQgcG9pbnRlciBkYXRhIG1heSBjaGFuZ2UgYXMgYSBoYW5kbGVyIGV2b2x2ZXMuCisgKiAgICAgICAgSGFuZGxlcnMgc2hvdWxkIHJlYWxseSBhZHZlcnRpc2Ugc29tZSBmdW5jdGlvbiBmb3IgeW91CisgKiAgICAgICAgdG8gdXNlIGluc3RlYWQuCisgKgorICogQHBhcmFtIHJlZ2luZm8gSGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBjaGFpbi4KKyAqCisgKiBAcGFyYW0gbmFtZSBUYXJnZXQgTUlCIEhhbmRsZXIgbmFtZSBzdHJpbmcuIFRoZSBuYW1lIGlzIGNhc2UKKyAqICAgICAgICBzZW5zaXRpdmUuCisgKgorICogQHJldHVybiBUaGUgTUlCIEhhbmRsZXIncyB2b2lkICogcG9pbnRlciBpcyByZXR1cm5lZCwKKyAqICAgICAgICBvciBOVUxMIGlmIHRoZSBoYW5kbGVyIGlzIG5vdCBmb3VuZC4KKyAqCisgKiBAc2VlIG5ldHNubXBfZmluZF9oYW5kbGVyX2J5X25hbWUoKQorICovCiB2b2lkICAgICAgICAgICAqCiBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9kYXRhX2J5X25hbWUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lKQpAQCAtODYyLDggKzEwODksMTIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAotLyoqIGNsb25lcyBhIG1pYiBoYW5kbGVyIChuYW1lLCBmbGFncyBhbmQgYWNjZXNzIG1ldGhvZHMgb25seTsgbm90IG15dm9pZCkKLSAqIHNlZSBhbHNvIG5ldHNubXBfaGFuZGxlcl9kdXAKKy8qKiBAcHJpdmF0ZQorICogIENsb25lcyBhIE1JQiBIYW5kbGVyIHdpdGggaXRzIGJhc2ljIHByb3BlcnRpZXMuCisgKiAgQ3JlYXRlcyBhIGNvcHkgb2YgdGhlIGdpdmVuIE1JQiBIYW5kbGVyLiBDb3BpZXMgbmFtZSwgZmxhZ3MgYW5kCisgKiAgYWNjZXNzIG1ldGhvZHMgb25seTsgbm90IG15dm9pZC4KKyAqCisgKiAgQHNlZSBuZXRzbm1wX2hhbmRsZXJfZHVwKCkKICAqLwogc3RhdGljIG5ldHNubXBfbWliX2hhbmRsZXIgKgogX2Nsb25lX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaXQpCkBAIC04ODgsNyArMTExOSwxNSBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKChuZXRzbm1wX21pYl9oYW5kbGVyICopaGFuZGxlcik7CiB9CiAKLS8qKiByZWdpc3RlcnMgYSBnaXZlbiBoYW5kbGVyIGJ5IG5hbWUgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZWFzaWx5IGxhdGVyLgorLyoqIFJlZ2lzdGVycyBhIGdpdmVuIGhhbmRsZXIgYnkgbmFtZSwgc28gdGhhdCBpdCBjYW4gYmUgZm91bmQgZWFzaWx5IGxhdGVyLgorICogIFBvaW50ZXIgdG8gdGhlIGhhbmRsZXIgaXMgcHV0IGludG8gYSBsaXN0IHdoZXJlIGl0IGNhbiBiZSBlYXNpbHkgbG9jYXRlZAorICogIGF0IGFueSB0aW1lLgorICoKKyAqIEBwYXJhbSBuYW1lIE5hbWUgc3RyaW5nIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgaGFuZGxlci4KKyAqCisgKiBAcGFyYW0gaGFuZGxlciBQb2ludGVyIHRoZSBNSUIgSGFuZGxlci4KKyAqCisgKiBAc2VlIG5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0KCkKICAqLwogdm9pZAogbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWUoY29uc3QgY2hhciAqbmFtZSwKQEAgLTkwMCw3ICsxMTM5LDEzIEBACiAgICAgREVCVUdNU0dUTCgoImhhbmRsZXJfcmVnaXN0cnkiLCAicmVnaXN0ZXJpbmcgaGVscGVyICVzXG4iLCBuYW1lKSk7CiB9CiAKLS8qKiBjbGVhcnMgdGhlIGVudGlyZSBoYW5kbGVyLXJlZ2lzdHJhdGlvbiBsaXN0CisvKiogQ2xlYXJzIHRoZSBlbnRpcmUgTUlCIEhhbmRsZXJzIHJlZ2lzdHJhdGlvbiBsaXN0LgorICogIE1JQiBIYW5kbGVycyByZWdpc3RyYXRpb24gbGlzdCBpcyB1c2VkIHRvIGFjY2VzcyBhbnkgTUlCIEhhbmRsZXIgYnkKKyAqICBpdHMgbmFtZS4gVGhlIGZ1bmN0aW9uIGZyZWVzIHRoZSBsaXN0IG1lbW9yeSBhbmQgc2V0cyBwb2ludGVyIHRvIE5VTEwuCisgKiAgSW5zdGVhZCBvZiBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gZGlyZWN0bHksIHVzZSBzaHV0ZG93bl9hZ2VudCgpLgorICoKKyAqICBAc2VlIHNodXRkb3duX2FnZW50KCkKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lKCkKICAqLwogdm9pZAogbmV0c25tcF9jbGVhcl9oYW5kbGVyX2xpc3Qodm9pZCkKQEAgLTkxMCw4ICsxMTU1LDggQEAKICAgICBoYW5kbGVyX3JlZyA9IE5VTEw7CiB9CiAKLS8qKiBAaW50ZXJuYWwKLSAqICBpbmplY3RzIGEgaGFuZGxlciBpbnRvIGEgc3VidHJlZSwgcGVlcnMgYW5kIGNoaWxkcmVuIHdoZW4gYSBnaXZlbgorLyoqIEBwcml2YXRlCisgKiAgSW5qZWN0cyBhIGhhbmRsZXIgaW50byBhIHN1YnRyZWUsIHBlZXJzIGFuZCBjaGlsZHJlbiB3aGVuIGEgZ2l2ZW4KICAqICBzdWJ0cmVlcyBuYW1lIG1hdGNoZXMgYSBwYXNzZWQgaW4gbmFtZS4KICAqLwogdm9pZApAQCAtOTU4LDggKzEyMDMsOCBAQAogfQogCiBzdGF0aWMgaW50ICAgICAgZG9uZWl0ID0gMDsKLS8qKiBAaW50ZXJuYWwKLSAqICBwYXJzZXMgdGhlICJpbmplY3RIYW5kbGVyIiB0b2tlbiBsaW5lLgorLyoqIEBwcml2YXRlCisgKiAgUGFyc2VzIHRoZSAiaW5qZWN0SGFuZGxlciIgdG9rZW4gbGluZS4KICAqLwogdm9pZAogcGFyc2VfaW5qZWN0SGFuZGxlcl9jb25mKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQpAQCAtOTc1LDkgKzEyMjAsMTAgQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgaGFuZGxlcl90b19pbnNlcnQsIHNpemVvZihoYW5kbGVyX3RvX2luc2VydCkpOwotICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9saXN0X2RhdGEoaGFuZGxlcl9yZWcsIGhhbmRsZXJfdG9faW5zZXJ0KTsKKyAgICBoYW5kbGVyID0gKG5ldHNubXBfbWliX2hhbmRsZXIqKW5ldHNubXBfZ2V0X2xpc3RfZGF0YShoYW5kbGVyX3JlZywgaGFuZGxlcl90b19pbnNlcnQpOwogICAgIGlmICghaGFuZGxlcikgewotICAgICAgICBjb25maWdfcGVycm9yKCJubyBzdWNoIFwiJXNcIiBoYW5kbGVyIHJlZ2lzdGVyZWQuIik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoIm5vIFwiJXNcIiBoYW5kbGVyIHJlZ2lzdGVyZWQuIiwKKwkJCSAgICAgaGFuZGxlcl90b19pbnNlcnQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC05OTUsOCArMTI0MSw4IEBACiAgICAgfQogfQogCi0vKiogQGludGVybmFsCi0gKiAgY2FsbGJhY2sgdG8gZW5zdXJlIGluamVjdEhhbmRsZXIgcGFyc2VyIGRvZXNuJ3QgZG8gdGhpbmdzIHR3aWNlCisvKiogQHByaXZhdGUKKyAqICBDYWxsYmFjayB0byBlbnN1cmUgaW5qZWN0SGFuZGxlciBwYXJzZXIgZG9lc24ndCBkbyB0aGluZ3MgdHdpY2UuCiAgKiAgQHRvZG8gcmVwbGFjZSB0aGlzIHdpdGggYSBtZXRob2QgdG8gY2hlY2sgdGhlIGhhbmRsZXIgY2hhaW4gaW5zdGVhZC4KICAqLwogc3RhdGljIGludApAQCAtMTAwNyw4ICsxMjUzLDExIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLS8qKiBAaW50ZXJuYWwKKy8qKiBAcHJpdmF0ZQogICogIFJlZ2lzdGVycyB0aGUgaW5qZWN0SGFuZGxlIHBhcnNlciB0b2tlbi4KKyAqICBVc2VkIGluIGluaXRfYWdlbnRfcmVhZF9jb25maWcoKS4KKyAqCisgKiAgQHNlZSBpbml0X2FnZW50X3JlYWRfY29uZmlnKCkKICAqLwogdm9pZAogbmV0c25tcF9pbml0X2hhbmRsZXJfY29uZih2b2lkKQpAQCAtMTAyMyw2ICsxMjcyLDcgQEAKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYWdlbnRfbW9kZSIsIHN0cmR1cCgiR0VUIiksIE1PREVfR0VUKTsKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYWdlbnRfbW9kZSIsIHN0cmR1cCgiR0VUTkVYVCIpLCBNT0RFX0dFVE5FWFQpOwogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJhZ2VudF9tb2RlIiwgc3RyZHVwKCJHRVRCVUxLIiksIE1PREVfR0VUQlVMSyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJhZ2VudF9tb2RlIiwgc3RyZHVwKCJTRVRfQkVHSU4iKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBNT0RFX1NFVF9CRUdJTik7CiAgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImFnZW50X21vZGUiLCBzdHJkdXAoIlNFVF9SRVNFUlZFMSIpLApAQCAtMTA2Myw2ICsxMzEzLDcgQEAKICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiYmFieXN0ZXBfbW9kZSIsIHN0cmR1cCgicG9zdF9yZXF1ZXN0IiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1QpOwogICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJiYWJ5c3RlcF9tb2RlIiwgc3RyZHVwKCJvcmlnaW5hbCIpLCAweGZmZmYpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgLyoKICAgICAgKiB4eHgtcmtzOiBobW1tLi4gd2lsbCB0aGlzIHdvcmsgZm9yIG1vZGVzIHdoaWNoIGFyZSBvcidkIHRvZ2V0aGVyPwpkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfaW5kZXguYyBiL2FnZW50L2FnZW50X2luZGV4LmMKaW5kZXggZWQ5YmExNC4uMDEyOTIxNyAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfaW5kZXguYworKysgYi9hZ2VudC9hZ2VudF9pbmRleC5jCkBAIC04LDYgKzgsNyBAQAogCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTE4LDE1ICsxOSw4IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxmY250bC5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01NCw2ICs0OCwxMCBAQAogI2luY2x1ZGUgImFnZW50eC9jbGllbnQuaCIKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfaW5kZXhfYWxsLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZW1vdmVfaW5kZXgsIGFnZW50X2luZGV4X2FsbCkKKwogICAgICAgICAvKgogICAgICAgICAgKiBJbml0aWFsIHN1cHBvcnQgZm9yIGluZGV4IGFsbG9jYXRpb24KICAgICAgICAgICovCkBAIC05Miw3ICs5MCwxMSBAQAogICAgIGlmIChyZXMgPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9IGVsc2UgewotICAgICAgICBjaGFyICAgICAgICAgICAqcnYgPSBzdHJkdXAocmVzLT52YWwuc3RyaW5nKTsKKyAgICAgICAgY2hhciAqcnYgPSAoY2hhciAqKW1hbGxvYyhyZXMtPnZhbF9sZW4gKyAxKTsKKyAgICAgICAgaWYgKHJ2KSB7CisgICAgICAgICAgICBtZW1jcHkocnYsIHJlcy0+dmFsLnN0cmluZywgcmVzLT52YWxfbGVuKTsKKyAgICAgICAgICAgIHJ2W3Jlcy0+dmFsX2xlbl0gPSAwOworICAgICAgICB9CiAgICAgICAgIGZyZWUocmVzKTsKICAgICAgICAgcmV0dXJuIHJ2OwogICAgIH0KQEAgLTE2Myw3ICsxNjUsNyBAQAogCiAgICAgREVCVUdNU0dUTCgoInJlZ2lzdGVyX2luZGV4IiwgInJlZ2lzdGVyICIpKTsKICAgICBERUJVR01TR1ZBUigoInJlZ2lzdGVyX2luZGV4IiwgdmFyYmluZCkpOwotICAgIERFQlVHTVNHKCgicmVnaXN0ZXJfaW5kZXgiLCAiZm9yIHNlc3Npb24gJTA4cFxuIiwgc3MpKTsKKyAgICBERUJVR01TRygoInJlZ2lzdGVyX2luZGV4IiwgImZvciBzZXNzaW9uICU4cFxuIiwgc3MpKTsKIAogI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkgJiYgIWRlZmluZWQoVEVTVElORykKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTMwMSwxMiArMzAzLDEyIEBACiAgICAgaWYgKG5ld19pbmRleCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgwID09IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5ld19pbmRleC0+dmFyYmluZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT5uYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT52YWwuc3RyaW5nLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+dmFsX2xlbikpIHsKKyAgICBpZiAoTlVMTCA9PSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZuZXdfaW5kZXgtPnZhcmJpbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJiaW5kLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyYmluZC0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmJpbmQtPnZhbF9sZW4pKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGlmIChzbm1wX2Nsb25lX3ZhciggdmFyYmluZCwgbmV3X2luZGV4LT52YXJiaW5kICkgIT0gMCApIAogICAgICAgICAgKi8KQEAgLTQ1MywxMiArNDU1LDE2IEBACiAgICAgICAgICAqIFJlbGVhc2UgYW4gYWxsb2NhdGVkIGluZGV4LAogICAgICAgICAgKiAgIHRvIGFsbG93IGl0IHRvIGJlIHVzZWQgZWxzZXdoZXJlCiAgICAgICAgICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlbGVhc2VfaW5kZXgsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVMRUFTRV9JTkRFWAogaW50CiByZWxlYXNlX2luZGV4KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmJpbmQpCiB7CiAgICAgcmV0dXJuICh1bnJlZ2lzdGVyX2luZGV4KHZhcmJpbmQsIFRSVUUsIE5VTEwpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTEVBU0VfSU5ERVggKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTU9WRV9JTkRFWAogICAgICAgICAvKgogICAgICAgICAgKiBDb21wbGV0ZWx5IHJlbW92ZSBhbiBhbGxvY2F0ZWQgaW5kZXgsCiAgICAgICAgICAqICAgZHVlIHRvIGVycm9ycyBpbiB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MuCkBAIC00NjgsNiArNDc0LDcgQEAKIHsKICAgICByZXR1cm4gKHVucmVnaXN0ZXJfaW5kZXgodmFyYmluZCwgRkFMU0UsIHNzKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRU1PVkVfSU5ERVggKi8KIAogdm9pZAogdW5yZWdpc3Rlcl9pbmRleF9ieV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNzKQpAQCAtNTkxLDYgKzU5OCw4IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bnJlZ2lzdGVyX2luZGV4ZXMsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9JTkRFWEVTCiBpbnQKIHVucmVnaXN0ZXJfc3RyaW5nX2luZGV4KG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbiwgY2hhciAqY3ApCiB7CkBAIC02MzAsNiArNjM5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfbGVuICogc2l6ZW9mKG9pZCkpOwogICAgIHJldHVybiAodW5yZWdpc3Rlcl9pbmRleCgmdmFyYmluZCwgRkFMU0UsIG1haW5fc2Vzc2lvbikpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9JTkRFWEVTICovCiAKIHZvaWQKIGR1bXBfaWR4X3JlZ2lzdHJ5KHZvaWQpCkBAIC02OTUsNiArNzA1LDggQEAKICAgICB9CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb3VudF9pbmRleGVzLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlVTRUQKIHVuc2lnbmVkIGxvbmcKIGNvdW50X2luZGV4ZXMob2lkICogbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGludCBpbmNsdWRlX3VuYWxsb2NhdGVkKQogewpAQCAtNzE0LDcgKzcyNiw3IEBACiAgICAgfQogICAgIHJldHVybiBuOwogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlVTRUQgKi8KIAogI2lmZGVmIFRFU1RJTkcKIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJiaW5kOwpkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYyBiL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmMKaW5kZXggNTMzMDQyYS4uZjllZjFhZiAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuYworKysgYi9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgpAQCAtMjIsMTEgKzIzLDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02MSw4ICs1OCw2IEBACiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjZW5kaWYKICNlbmRpZgotI2VsaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19TVFJFQU1fSAogIyAgIGlmZGVmIHN5c3Y1VW5peFdhcmU3CkBAIC0xMTIsMTcgKzEwNywxOCBAQAogI2luY2x1ZGUgImFnZW50X21vZHVsZV9pbmNsdWRlcy5oIgogI2luY2x1ZGUgIm1pYl9tb2R1bGVfaW5jbHVkZXMuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X3JlYWRfY29uZmlnX2FsbCwgbGlibmV0c25tcGFnZW50KQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwgYWdlbnRfcmVhZF9jb25maWdfYWxsKQorCiAjaWZkZWYgSEFWRV9VTklTVERfSAogdm9pZAogc25tcGRfc2V0X2FnZW50X3VzZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0jaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCi0gICAgc3RydWN0IHBhc3N3ZCAgKmluZm87Ci0jZW5kaWYKLQogICAgIGlmIChjcHRyWzBdID09ICcjJykgewogICAgICAgICBjaGFyICAgICAgICAgICAqZWNwOwogICAgICAgICBpbnQgICAgICAgICAgICAgdWlkOworCiAgICAgICAgIHVpZCA9IHN0cnRvdWwoY3B0ciArIDEsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCplY3AgIT0gMCkgewogICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiQmFkIG51bWJlciIpOwpAQCAtMTMwLDQ3ICsxMjYsNTEgQEAKIAkgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklELCB1aWQpOwogCX0KLSAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dFVFBXTkFNKSAmJiBkZWZpbmVkKEhBVkVfUFdEX0gpCi0gICAgZWxzZSBpZiAoKGluZm8gPSBnZXRwd25hbShjcHRyKSkgIT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgaW5mby0+cHdfdWlkKTsKICAgICB9IGVsc2UgewotICAgICAgICBjb25maWdfcGVycm9yKCJVc2VyIG5vdCBmb3VuZCBpbiBwYXNzd2QgZGF0YWJhc2UiKTsKLSAgICB9Ci0gICAgZW5kcHdlbnQoKTsKKyAgICAgICAgc3RydWN0IHBhc3N3ZCAgKmluZm87CisKKyAgICAgICAgaW5mbyA9IGdldHB3bmFtKGNwdHIpOworICAgICAgICBpZiAoaW5mbykKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgaW5mby0+cHdfdWlkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiVXNlciBub3QgZm91bmQgaW4gcGFzc3dkIGRhdGFiYXNlIik7CisgICAgICAgIGVuZHB3ZW50KCk7CiAjZW5kaWYKKyAgICB9CiB9CiAKIHZvaWQKIHNubXBkX3NldF9hZ2VudF9ncm91cChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSNpZiBkZWZpbmVkKEhBVkVfR0VUR1JOQU0pICYmIGRlZmluZWQoSEFWRV9HUlBfSCkKLSAgICBzdHJ1Y3QgZ3JvdXAgICAqaW5mbzsKLSNlbmRpZgotCiAgICAgaWYgKGNwdHJbMF0gPT0gJyMnKSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICplY3A7CiAgICAgICAgIGludCAgICAgICAgICAgICBnaWQgPSBzdHJ0b3VsKGNwdHIgKyAxLCAmZWNwLCAxMCk7CisKICAgICAgICAgaWYgKCplY3AgIT0gMCkgewogICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiQmFkIG51bWJlciIpOwogCX0gZWxzZSB7CiAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkgICAgICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBnaWQpOwogCX0KLSAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dFVEdSTkFNKSAmJiBkZWZpbmVkKEhBVkVfR1JQX0gpCi0gICAgZWxzZSBpZiAoKGluZm8gPSBnZXRncm5hbShjcHRyKSkgIT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkgICBORVRTTk1QX0RTX0FHRU5UX0dST1VQSUQsIGluZm8tPmdyX2dpZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiR3JvdXAgbm90IGZvdW5kIGluIGdyb3VwIGRhdGFiYXNlIik7Ci0gICAgfQotICAgIGVuZHB3ZW50KCk7CisgICAgICAgIHN0cnVjdCBncm91cCAgICppbmZvOworCisgICAgICAgIGluZm8gPSBnZXRncm5hbShjcHRyKTsKKyAgICAgICAgaWYgKGluZm8pCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBpbmZvLT5ncl9naWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJHcm91cCBub3QgZm91bmQgaW4gZ3JvdXAgZGF0YWJhc2UiKTsKKyAgICAgICAgZW5kZ3JlbnQoKTsKICNlbmRpZgorICAgIH0KIH0KICNlbmRpZgogCisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKIHZvaWQKIHNubXBkX3NldF9hZ2VudF9hZGRyZXNzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewpAQCAtMTk3LDYgKzE5Nyw3IEBACiAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJICBORVRTTk1QX0RTX0FHRU5UX1BPUlRTLCBidWYpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KIAogdm9pZAogaW5pdF9hZ2VudF9yZWFkX2NvbmZpZyhjb25zdCBjaGFyICphcHApCkBAIC0yNDUsMTUgKzI0NiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wZF9mcmVlX3RyYXBjb21tdW5pdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb21tdW5pdHktc3RyaW5nIik7CiAjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCBhcHAsICJ2MXRyYXBhZGRyZXNzIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9UUkFQX0FERFIpOwogI2lmZGVmIEhBVkVfVU5JU1REX0gKICAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImFnZW50dXNlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3NldF9hZ2VudF91c2VyLCBOVUxMLCAidXNlcmlkIik7CiAgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJhZ2VudGdyb3VwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfc2V0X2FnZW50X2dyb3VwLCBOVUxMLCAiZ3JvdXBpZCIpOwogI2VuZGlmCisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKICAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImFnZW50YWRkcmVzcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3NldF9hZ2VudF9hZGRyZXNzLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUCBiaW5kIGFkZHJlc3MiKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcCwgInF1aXQiLCAKIAkJCSAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUVVJVF9JTU1FRElBVEVMWSk7CkBAIC0yODQsOSArMjkwLDYgQEAKICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19QUkVfVVBEQVRFX0NPTkZJRywgTlVMTCk7CiAgICAgZnJlZV9jb25maWcoKTsKLSNpZmRlZiBVU0lOR19NSUJJSV9WQUNNX0NPTkZfTU9EVUxFCi0gICAgdmFjbV9zdGFuZGFyZF92aWV3cygwLDAsTlVMTCxOVUxMKTsKLSNlbmRpZgogICAgIHJlYWRfY29uZmlncygpOwogfQogCkBAIC0zMDIsMTAgKzMwNSwyNyBAQAogfQogCiB2b2lkCitzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkKK3sKKyAgICBERUJVR01TR1RMKCgic25tcGRfcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAicmVnaXN0ZXJpbmcgLmNvbmYgdG9rZW4gZm9yIFwiJXNcIlxuIiwgdG9rZW4pKTsKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIodG9rZW4sICh2b2lkKCopKGNvbnN0IGNoYXIgKiwgY2hhciAqKSlwYXJzZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VyLCBoZWxwKTsKK30KKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBEX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIKK3ZvaWQKIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4pCiB7CiAgICAgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIodG9rZW4pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUERfVU5SRUdJU1RFUl9DT05GSUdfSEFORExFUiAqLwogCiAvKgogICogdGhpcyBmdW5jdGlvbiBpcyBpbnRlbmRlZCBmb3IgdXNlIGJ5IG1pYi1tb2R1bGVzIHRvIHN0b3JlIHBlcm1lbmFudApkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfcmVnaXN0cnkuYyBiL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmMKaW5kZXggZDBkMzViNy4uMGRkNmM0MiAxMDA2NDQKLS0tIGEvYWdlbnQvYWdlbnRfcmVnaXN0cnkuYworKysgYi9hZ2VudC9hZ2VudF9yZWdpc3RyeS5jCkBAIC0xMSw3ICsxMSw5IEBACiAgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCi0vKiogQGRlZmdyb3VwIGFnZW50X3JlZ2lzdHJ5IE1haW50YWluIGEgcmVnaXN0cnkgb2YgTUlCIHN1YnRyZWVzLCB0b2dldGhlciB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG1pYm1vZHVsZSwgc2Vzc2lvbnMsIGV0YworLyoqIEBkZWZncm91cCBhZ2VudF9yZWdpc3RyeSBSZWdpc3RyeSBvZiBNSUIgc3VidHJlZXMsIG1vZHVsZXMsIHNlc3Npb25zLCBldGMKKyAqICAgICBNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIE1JQiBzdWJ0cmVlcywgdG9nZXRoZXIgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uCisgKiAgICAgcmVnYXJkaW5nIE1JQiBtb2R1bGVzLCBzZXNzaW9ucywgZXRjCiAgKiAgIEBpbmdyb3VwIGFnZW50CiAgKgogICogQHsKQEAgLTIwLDYgKzIyLDggQEAKICNkZWZpbmUgSU5fU05NUF9WQVJTX0MKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKICNpbmNsdWRlIDxzaWduYWwuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0zMCwxNSArMzQsOCBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8ZmNudGwuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTIsNiArNDksNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogCkBAIC02OCwxMyArNjYsMzk1IEBACiAjaW5jbHVkZSAiYWdlbnR4L2NsaWVudC5oIgogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIHJlZ2lzdGVyX21pYl9kZXRhY2hfbm9kZShuZXRzbm1wX3N1YnRyZWUgKnMpOwotTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgaW52YWxpZGF0ZV9sb29rdXBfY2FjaGUoY29uc3QgY2hhciAqY29udGV4dCk7Ci12b2lkIG5ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplKGludCBuZXdzaXplKTsKLWludCBuZXRzbm1wX2dldF9sb29rdXBfY2FjaGVfc2l6ZSh2b2lkKTsKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudF9yZWdpc3RyeV9hbGwsIGxpYm5ldHNubXBhZ2VudCkKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVucmVnaXN0ZXJfbWliX3RhYmxlX3JvdywgYWdlbnRfcmVnaXN0cnlfYWxsKQorCisvKiogQGRlZmdyb3VwIGFnZW50X2xvb2t1cF9jYWNoZSBMb29rdXAgY2FjaGUsIHN0b3JpbmcgdGhlIHJlZ2lzdGVyZWQgT0lEcy4KKyAqICAgICBNYWludGFpbiB0aGUgY2FjaGUgdXNlZCBmb3IgbG9jYXRpbmcgc3ViLXRyZWVzIGFuZCBPSURzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKworLyoqICBMb29rdXAgY2FjaGUgLSBkZWZhdWx0IHNpemUuKi8KKyNkZWZpbmUgU1VCVFJFRV9ERUZBVUxUX0NBQ0hFX1NJWkUgOAorLyoqICBMb29rdXAgY2FjaGUgLSBtYXggYWNjZXB0YWJsZSBzaXplLiovCisjZGVmaW5lIFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkUgICAgIDMyCitpbnQgbG9va3VwX2NhY2hlX3NpemUgPSAwOyAvKmVuYWJsZWQgbGF0ZXIgYWZ0ZXIgcmVnaXN0cmF0aW9ucyBhcmUgbG9hZGVkICovCisKK3R5cGVkZWYgc3RydWN0IGxvb2t1cF9jYWNoZV9zIHsKKyAgIG5ldHNubXBfc3VidHJlZSAqbmV4dDsKKyAgIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXM7Cit9IGxvb2t1cF9jYWNoZTsKKwordHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2NhY2hlX2NvbnRleHRfcyB7CisgICBjaGFyICpjb250ZXh0OworICAgc3RydWN0IGxvb2t1cF9jYWNoZV9jb250ZXh0X3MgKm5leHQ7CisgICBpbnQgdGhlY2FjaGVjb3VudDsKKyAgIGludCBjdXJyZW50cG9zOworICAgbG9va3VwX2NhY2hlIGNhY2hlW1NVQlRSRUVfTUFYX0NBQ0hFX1NJWkVdOworfSBsb29rdXBfY2FjaGVfY29udGV4dDsKKworc3RhdGljIGxvb2t1cF9jYWNoZV9jb250ZXh0ICp0aGVjb250ZXh0Y2FjaGUgPSBOVUxMOworCisvKiogU2V0IHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBmb3Igb3B0aW1pemVkIGFnZW50IHJlZ2lzdHJhdGlvbiBwZXJmb3JtYW5jZS4KKyAqIE5vdGUgdGhhdCBpdCBpcyBvbmx5IHVzZWQgYnkgbWFzdGVyIGFnZW50IC0gc3ViLWFnZW50IGRvZXNuJ3QgbmVlZCB0aGUgY2FjaGUuCisgKiBUaGUgcm91Z2ggZ3VpZGUgaXMgdGhhdCB0aGUgY2FjaGUgc2l6ZSBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG1heGltdW0KKyAqIG51bWJlciBvZiBzaW11bHRhbmVvdXMgbWFuYWdlcnMgeW91IGV4cGVjdCB0byB0YWxrIHRvIHRoZSBhZ2VudCAoTSkgdGltZXMgODAlCisgKiAob3Igc28sIGhlIHNheXMgcmFuZG9tbHkpIHRoZSBhdmVyYWdlIG51bWJlciAoTikgb2YgdmFyYmluZHMgeW91CisgKiBleHBlY3QgdG8gcmVjZWl2ZSBpbiBhIGdpdmVuIHJlcXVlc3QgZm9yIGEgbWFuYWdlci4gIGllLCBNIHRpbWVzIE4uCisgKiBCaWdnZXIgZG9lcyBOT1QgbmVjZXNzYXJpbHkgbWVhbiBiZXR0ZXIuICBDZXJ0YWlubHkgMTYgc2hvdWxkIGJlIGFuCisgKiB1cHBlciBsaW1pdC4gIDMyIGlzIHRoZSBoYXJkIGNvZGVkIGxpbWl0LgorICoKKyAqIEBwYXJhbSBuZXdzaXplIHNldCB0byB0aGUgbWF4aW11bSBzaXplIG9mIGEgY2FjaGUgZm9yIGEgZ2l2ZW4KKyAqIGNvbnRleHQuICBTZXQgdG8gMCB0byBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgb3IgdG8gLTEgdG8gc2V0CisgKiB0byB0aGUgZGVmYXVsdCBjYWNoZSBzaXplICg4KSwgb3IgdG8gYSBudW1iZXIgb2YgeW91ciBjaG9zaW5nLiAgVGhlCisgKi8KK3ZvaWQKK25ldHNubXBfc2V0X2xvb2t1cF9jYWNoZV9zaXplKGludCBuZXdzaXplKSB7CisgICAgaWYgKG5ld3NpemUgPCAwKQorICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IFNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFOworICAgIGVsc2UgaWYgKG5ld3NpemUgPCBTVUJUUkVFX01BWF9DQUNIRV9TSVpFKQorICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IG5ld3NpemU7CisgICAgZWxzZQorICAgICAgICBsb29rdXBfY2FjaGVfc2l6ZSA9IFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkU7Cit9CisKKy8qKiBSZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvb2t1cCBjYWNoZSBzaXplCisgKiAgU2hvdWxkIGJlIGNhbGxlZCBmcm9tIG1hc3RlciBhZ2VudCBvbmx5IC0gc3ViLWFnZW50IGRvZXNuJ3QgbmVlZCB0aGUgY2FjaGUuCisgKgorICogIEByZXR1cm4gdGhlIGN1cnJlbnQgbG9va3VwIGNhY2hlIHNpemUKKyAqLworaW50CituZXRzbm1wX2dldF9sb29rdXBfY2FjaGVfc2l6ZSh2b2lkKSB7CisgICAgcmV0dXJuIGxvb2t1cF9jYWNoZV9zaXplOworfQorCisvKiogUmV0dXJucyBsb29rdXAgY2FjaGUgZW50cnkgZm9yIHRoZSBjb250ZXh0IG9mIGdpdmVuIG5hbWUuCisgKgorICogIEBwYXJhbSBjb250ZXh0IE5hbWUgb2YgdGhlIGNvbnRleHQuIE5hbWUgaXMgY2FzZSBzZW5zaXRpdmUuCisgKgorICogIEByZXR1cm4gdGhlIGxvb2t1cCBjYWNoZSBjb250ZXh0CisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBsb29rdXBfY2FjaGVfY29udGV4dCAqCitnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29uc3QgY2hhciAqY29udGV4dCkgeworICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpwdHI7CisgICAgaWYgKCFjb250ZXh0KQorICAgICAgICBjb250ZXh0ID0gIiI7CisKKyAgICBmb3IocHRyID0gdGhlY29udGV4dGNhY2hlOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgeworICAgICAgICBpZiAoc3RyY21wKHB0ci0+Y29udGV4dCwgY29udGV4dCkgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAoIXB0cikgeworICAgICAgICBpZiAobmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dCkpIHsKKyAgICAgICAgICAgIHB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYobG9va3VwX2NhY2hlX2NvbnRleHQpOworICAgICAgICAgICAgcHRyLT5uZXh0ID0gdGhlY29udGV4dGNhY2hlOworICAgICAgICAgICAgcHRyLT5jb250ZXh0ID0gc3RyZHVwKGNvbnRleHQpOworICAgICAgICAgICAgdGhlY29udGV4dGNhY2hlID0gcHRyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHB0cjsKK30KKworLyoqIEFkZHMgYW4gZW50cnkgdG8gdGhlIExvb2t1cCBDYWNoZSB1bmRlciBzcGVjaWZpZWQgY29udGV4dCBuYW1lLgorICoKKyAqICBAcGFyYW0gY29udGV4dCAgTmFtZSBvZiB0aGUgY29udGV4dC4gTmFtZSBpcyBjYXNlIHNlbnNpdGl2ZS4KKyAqCisgKiAgQHBhcmFtIG5leHQgICAgIE5leHQgc3VidHJlZSBpdGVtLgorICoKKyAqICBAcGFyYW0gcHJldmlvdXMgUHJldmlvdXMgc3VidHJlZSBpdGVtLgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAorbG9va3VwX2NhY2hlX2FkZChjb25zdCBjaGFyICpjb250ZXh0LAorICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKm5leHQsIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXMpIHsKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKKworICAgIGlmICgoY3B0ciA9IGdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb250ZXh0KSkgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKGNwdHItPnRoZWNhY2hlY291bnQgPCBsb29rdXBfY2FjaGVfc2l6ZSkKKyAgICAgICAgY3B0ci0+dGhlY2FjaGVjb3VudCsrOworCisgICAgY3B0ci0+Y2FjaGVbY3B0ci0+Y3VycmVudHBvc10ubmV4dCA9IG5leHQ7CisgICAgY3B0ci0+Y2FjaGVbY3B0ci0+Y3VycmVudHBvc10ucHJldmlvdXMgPSBwcmV2aW91czsKKworICAgIGlmICgrK2NwdHItPmN1cnJlbnRwb3MgPj0gbG9va3VwX2NhY2hlX3NpemUpCisgICAgICAgIGNwdHItPmN1cnJlbnRwb3MgPSAwOworfQorCisvKiogQHByaXZhdGUKKyAqICBSZXBsYWNlcyBuZXh0IGFuZCBwcmV2aW91cyBwb2ludGVyIGluIGdpdmVuIExvb2t1cCBDYWNoZS4KKyAqCisgKiAgQHBhcmFtIHB0ciAgICAgIExvb2t1cCBDYWNoZSBwb2ludGVyLgorICoKKyAqICBAcGFyYW0gbmV4dCAgICAgTmV4dCBzdWJ0cmVlIGl0ZW0uCisgKgorICogIEBwYXJhbSBwcmV2aW91cyBQcmV2aW91cyBzdWJ0cmVlIGl0ZW0uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCitsb29rdXBfY2FjaGVfcmVwbGFjZShsb29rdXBfY2FjaGUgKnB0ciwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZSAqbmV4dCwgbmV0c25tcF9zdWJ0cmVlICpwcmV2aW91cykgeworCisgICAgcHRyLT5uZXh0ID0gbmV4dDsKKyAgICBwdHItPnByZXZpb3VzID0gcHJldmlvdXM7Cit9CisKKy8qKiBGaW5kcyBhbiBlbnRyeSBpbiB0aGUgTG9va3VwIENhY2hlLgorICoKKyAqICBAcGFyYW0gY29udGV4dCAgQ2FzZSBzZW5zaXRpdmUgbmFtZSBvZiB0aGUgY29udGV4dC4KKyAqCisgKiAgQHBhcmFtIG5hbWUgICAgIFRoZSBPSUQgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAqCisgKiAgQHBhcmFtIG5hbWVfbGVuIE51bWJlciBvZiBzdWItaWRzIChzaW5nbGUgaW50ZWdlcnMpIGluIHRoZSBPSUQuCisgKgorICogIEBwYXJhbSByZXRjbXAgICBWYWx1ZSBzZXQgdG8gc25tcF9vaWRfY29tcGFyZSgpIGNhbGwgcmVzdWx0LgorICogICAgICAgICAgICAgICAgICBUaGUgdmFsdWUsIGlmIHNldCwgaXMgYWx3YXlzIG5vbm5lZ2F0aXZlLgorICoKKyAqICBAcmV0dXJuIGdpdmVzIExvb2t1cCBDYWNoZSBlbnRyeSwgb3IgTlVMTCBpZiBub3QgZm91bmQuCisgKgorICogIEBzZWUgc25tcF9vaWRfY29tcGFyZSgpCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBsb29rdXBfY2FjaGUgKgorbG9va3VwX2NhY2hlX2ZpbmQoY29uc3QgY2hhciAqY29udGV4dCwgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICBpbnQgKnJldGNtcCkgeworICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpjcHRyOworICAgIGxvb2t1cF9jYWNoZSAqcmV0ID0gTlVMTDsKKyAgICBpbnQgY21wOworICAgIGludCBpOworCisgICAgaWYgKChjcHRyID0gZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnRleHQpKSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZvcihpID0gMDsgaSA8IGNwdHItPnRoZWNhY2hlY291bnQgJiYgaSA8IGxvb2t1cF9jYWNoZV9zaXplOyBpKyspIHsKKyAgICAgICAgaWYgKGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9hKQorICAgICAgICAgICAgY21wID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCBuYW1lX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHItPmNhY2hlW2ldLnByZXZpb3VzLT5zdGFydF9sZW4pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjbXAgPSAxOworICAgICAgICBpZiAoY21wID49IDApIHsKKyAgICAgICAgICAgICpyZXRjbXAgPSBjbXA7CisgICAgICAgICAgICByZXQgPSAmKGNwdHItPmNhY2hlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisvKiogQHByaXZhdGUKKyAqICBDbGVhcnMgY2FjaGUgY291bnQgYW5kIHBvc2l0aW9uIGluIExvb2t1cCBDYWNoZS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKK2ludmFsaWRhdGVfbG9va3VwX2NhY2hlKGNvbnN0IGNoYXIgKmNvbnRleHQpIHsKKyAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKKyAgICBpZiAoKGNwdHIgPSBnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29udGV4dCkpICE9IE5VTEwpIHsKKyAgICAgICAgY3B0ci0+dGhlY2FjaGVjb3VudCA9IDA7CisgICAgICAgIGNwdHItPmN1cnJlbnRwb3MgPSAwOworICAgIH0KK30KKwordm9pZAorY2xlYXJfbG9va3VwX2NhY2hlKHZvaWQpIHsKKworICAgIGxvb2t1cF9jYWNoZV9jb250ZXh0ICpwdHIgPSBOVUxMLCAqbmV4dCA9IE5VTEw7CisKKyAgICBwdHIgPSB0aGVjb250ZXh0Y2FjaGU7CisgICAgd2hpbGUgKHB0cikgeworCW5leHQgPSBwdHItPm5leHQ7CisJU05NUF9GUkVFKHB0ci0+Y29udGV4dCk7CisJU05NUF9GUkVFKHB0cik7CisJcHRyID0gbmV4dDsKKyAgICB9CisgICAgdGhlY29udGV4dGNhY2hlID0gTlVMTDsgLyogISEhICovCit9CisKKy8qKiAgQH0gKi8KKy8qIEVuZCBvZiBMb29rdXAgY2FjaGUgY29kZSAqLworCisvKiogQGRlZmdyb3VwIGFnZW50X2NvbnRleHRfY2FjaGUgQ29udGV4dCBjYWNoZSwgc3RvcmluZyB0aGUgT0lEcyB1bmRlciB0aGVpciBjb250ZXh0cy4KKyAqICAgICBNYWludGFpbiB0aGUgY2FjaGUgdXNlZCBmb3IgbG9jYXRpbmcgc3ViLXRyZWVzIHJlZ2lzdGVyZWQgdW5kZXIgZGlmZmVyZW50IGNvbnRleHRzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqY29udGV4dF9zdWJ0cmVlcyA9IE5VTEw7CiAKKy8qKiBSZXR1cm5zIHRoZSB0b3AgZWxlbWVudCBvZiBjb250ZXh0IHN1YnRyZWVzIGNhY2hlLgorICogIFVzZSBpdCBpZiB5b3Ugd2lzaCB0byBzd2VlcCB0aHJvdWdoIHRoZSBjYWNoZSBlbGVtZW50cy4KKyAqICBOb3RlIHRoYXQgdGhlIHJldHVybiBtYXkgYmUgTlVMTCAoY2FjaGUgbWF5IGJlIGVtcHR5KS4KKyAqCisgKiAgQHJldHVybiBwb2ludGVyIHRvIHRvcG1vc3QgY29udGV4dCBzdWJ0cmVlIGNhY2hlIGVsZW1lbnQuCisgKi8KK3N1YnRyZWVfY29udGV4dF9jYWNoZSAqCitnZXRfdG9wX2NvbnRleHRfY2FjaGUodm9pZCkKK3sKKyAgICByZXR1cm4gY29udGV4dF9zdWJ0cmVlczsKK30KKworLyoqIEZpbmRzIHRoZSBmaXJzdCBzdWJ0cmVlIHJlZ2lzdGVyZWQgdW5kZXIgZ2l2ZW4gY29udGV4dC4KKyAqCisgKiAgQHBhcmFtIGNvbnRleHRfbmFtZSBUZXh0IG5hbWUgb2YgdGhlIGNvbnRleHQgd2UncmUgc2VhcmNoaW5nIGZvci4KKyAqCisgKiAgQHJldHVybiBwb2ludGVyIHRvIHRoZSBmaXJzdCBzdWJ0cmVlIGVsZW1lbnQsIG9yIE5VTEwgaWYgbm90IGZvdW5kLgorICovCituZXRzbm1wX3N1YnRyZWUgKgorbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQoreworICAgIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqcHRyOworCisgICAgaWYgKCFjb250ZXh0X25hbWUpIHsKKyAgICAgICAgY29udGV4dF9uYW1lID0gIiI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAibG9va2luZyBmb3Igc3VidHJlZSBmb3IgY29udGV4dDogXCIlc1wiXG4iLCAKKwkJY29udGV4dF9uYW1lKSk7CisgICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgICAgIGlmIChwdHItPmNvbnRleHRfbmFtZSAhPSBOVUxMICYmIAorCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZm91bmQgb25lIGZvcjogXCIlc1wiXG4iLCBjb250ZXh0X25hbWUpKTsKKyAgICAgICAgICAgIHJldHVybiBwdHItPmZpcnN0X3N1YnRyZWU7CisgICAgICAgIH0KKyAgICB9CisgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZGlkbid0IGZpbmQgYSBzdWJ0cmVlIGZvciBjb250ZXh0OiBcIiVzXCJcbiIsIAorCQljb250ZXh0X25hbWUpKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoqIEFkZHMgdGhlIHN1YnRyZWUgdG8gQ29udGV4dCBDYWNoZSB1bmRlciBnaXZlbiBjb250ZXh0IG5hbWUuCisgKgorICogIEBwYXJhbSBjb250ZXh0X25hbWUgVGV4dCBuYW1lIG9mIHRoZSBjb250ZXh0IHdlJ3JlIGFkZGluZy4KKyAqCisgKiAgQHBhcmFtIG5ld190cmVlIFRoZSBzdWJ0cmVlIHRvIGJlIGFkZGVkLgorICoKKyAqICBAcmV0dXJuIGNvcHkgb2YgdGhlIG5ld190cmVlIHBvaW50ZXIsIG9yIE5VTEwgaWYgY2Fubm90IGFkZC4KKyAqLworbmV0c25tcF9zdWJ0cmVlICoKK2FkZF9zdWJ0cmVlKG5ldHNubXBfc3VidHJlZSAqbmV3X3RyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3VidHJlZV9jb250ZXh0X2NhY2hlKTsKKyAgICAKKyAgICBpZiAoIWNvbnRleHRfbmFtZSkgeworICAgICAgICBjb250ZXh0X25hbWUgPSAiIjsKKyAgICB9CisKKyAgICBpZiAoIXB0cikgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiYWRkaW5nIHN1YnRyZWUgZm9yIGNvbnRleHQ6IFwiJXNcIlxuIiwJCisJCWNvbnRleHRfbmFtZSkpOworCisgICAgcHRyLT5uZXh0ID0gY29udGV4dF9zdWJ0cmVlczsKKyAgICBwdHItPmZpcnN0X3N1YnRyZWUgPSBuZXdfdHJlZTsKKyAgICBwdHItPmNvbnRleHRfbmFtZSA9IHN0cmR1cChjb250ZXh0X25hbWUpOworICAgIGNvbnRleHRfc3VidHJlZXMgPSBwdHI7CisKKyAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOworfQorCit2b2lkCituZXRzbm1wX3JlbW92ZV9zdWJ0cmVlKG5ldHNubXBfc3VidHJlZSAqdHJlZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0cjsKKworICAgIGlmICghdHJlZS0+cHJldikgeworICAgICAgICBmb3IgKHB0ciA9IGNvbnRleHRfc3VidHJlZXM7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQorICAgICAgICAgICAgaWYgKHB0ci0+Zmlyc3Rfc3VidHJlZSA9PSB0cmVlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBuZXRzbm1wX2Fzc2VydChwdHIpOworICAgICAgICBpZiAocHRyKQorICAgICAgICAgICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gdHJlZS0+bmV4dDsKKyAgICB9IGVsc2UKKyAgICAgICAgdHJlZS0+cHJldi0+bmV4dCA9IHRyZWUtPm5leHQ7CisKKyAgICBpZiAodHJlZS0+bmV4dCkKKyAgICAgICAgdHJlZS0+bmV4dC0+cHJldiA9IHRyZWUtPnByZXY7Cit9CisKKy8qKiBSZXBsYWNlcyBmaXJzdCBzdWJ0cmVlIHJlZ2lzdGVyZWQgdW5kZXIgZ2l2ZW4gY29udGV4dCBuYW1lLgorICogIE92ZXJ3cml0ZXMgYSBzdWJ0cmVlIHBvaW50ZXIgaW4gQ29udGV4dCBDYWNoZSBmb3IgdGhlIGNvbnRleHQgbmFtZS4KKyAqICBUaGUgcHJldmlvdXMgc3VidHJlZSBwb2ludGVyIGlzIGxvc3QuIElmIHRoZXJlJ3Mgbm8gc3VidHJlZQorICogIHVuZGVyIHRoZSBzdXBwbGllZCBuYW1lLCB0aGVuIGEgbmV3IGNhY2hlIGl0ZW0gaXMgY3JlYXRlZC4KKyAqCisgKiAgQHBhcmFtIG5ld190cmVlICAgICBUaGUgbmV3IHN1YnRyZWUgdG8gYmUgc2V0LgorICoKKyAqICBAcGFyYW0gY29udGV4dF9uYW1lIFRleHQgbmFtZSBvZiB0aGUgY29udGV4dCB3ZSdyZSByZXBsYWNpbmcuCisgKiAgICAgICAgICAgICAgICAgICAgICBJdCBpcyBjYXNlIHNlbnNpdGl2ZS4KKyAqCisgKiBAcmV0dXJuIGNvcHkgb2YgdGhlIG5ld190cmVlIHBvaW50ZXIsIG9yIE5VTEwgb24gZXJyb3IuCisgKi8KK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfcmVwbGFjZV9maXJzdChuZXRzbm1wX3N1YnRyZWUgKm5ld190cmVlLCAKKwkJCSAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0cjsKKyAgICBpZiAoIWNvbnRleHRfbmFtZSkgeworICAgICAgICBjb250ZXh0X25hbWUgPSAiIjsKKyAgICB9CisgICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7CisgICAgICAgIGlmIChwdHItPmNvbnRleHRfbmFtZSAhPSBOVUxMICYmCisJICAgIHN0cmNtcChwdHItPmNvbnRleHRfbmFtZSwgY29udGV4dF9uYW1lKSA9PSAwKSB7CisgICAgICAgICAgICBwdHItPmZpcnN0X3N1YnRyZWUgPSBuZXdfdHJlZTsKKyAgICAgICAgICAgIHJldHVybiBwdHItPmZpcnN0X3N1YnRyZWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGFkZF9zdWJ0cmVlKG5ld190cmVlLCBjb250ZXh0X25hbWUpOworfQorCisKK3ZvaWQgY2xlYXJfc3VidHJlZSAobmV0c25tcF9zdWJ0cmVlICpzdWIpOworCisvKiogQ29tcGxldGVseSBjbGVhcnMgYm90aCB0aGUgQ29udGV4dCBjYWNoZSBhbmQgdGhlIExvb2t1cCBjYWNoZS4KKyAqLwordm9pZAorY2xlYXJfY29udGV4dCh2b2lkKSB7CisKKyAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IE5VTEwsICpuZXh0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3N1YnRyZWUgKnQsICp1OworCisgICAgREVCVUdNU0dUTCgoImFnZW50X3JlZ2lzdHJ5IiwgImNsZWFyIGNvbnRleHRcbiIpKTsKKworICAgIHB0ciA9IGdldF90b3BfY29udGV4dF9jYWNoZSgpOyAKKyAgICB3aGlsZSAocHRyKSB7CisJbmV4dCA9IHB0ci0+bmV4dDsKKworCWZvciAodCA9IHB0ci0+Zmlyc3Rfc3VidHJlZTsgdDsgdCA9IHUpIHsKKyAgICAgICAgICAgIHUgPSB0LT5uZXh0OworCSAgICBjbGVhcl9zdWJ0cmVlKHQpOworCX0KKworICAgICAgICBmcmVlKE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIqLCBwdHItPmNvbnRleHRfbmFtZSkpOworICAgICAgICBTTk1QX0ZSRUUocHRyKTsKKworCXB0ciA9IG5leHQ7CisgICAgfQorICAgIGNvbnRleHRfc3VidHJlZXMgPSBOVUxMOyAvKiAhISEgKi8KKyAgICBjbGVhcl9sb29rdXBfY2FjaGUoKTsKK30KKworLyoqICBAfSAqLworLyogRW5kIG9mIENvbnRleHQgY2FjaGUgY29kZSAqLworCisvKiogQGRlZmdyb3VwIGFnZW50X21pYl9zdWJ0cmVlIE1haW50YWluaW5nIE1JQiBzdWJ0cmVlcy4KKyAqICAgICBNYWludGFpbmluZyBNSUIgbm9kZXMgYW5kIHN1YnRyZWVzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKworc3RhdGljIHZvaWQgcmVnaXN0ZXJfbWliX2RldGFjaF9ub2RlKG5ldHNubXBfc3VidHJlZSAqcyk7CisKKy8qKiBGcmVlcyBzaW5nbGUgc3VidHJlZSBpdGVtLgorICogIERlYWxsb2NhdGVkIG1lbW9yeSBmb3IgZ2l2ZW4gbmV0c25tcF9zdWJ0cmVlIGl0ZW0sIGluY2x1ZGluZworICogIEhhbmRsZSBSZWdpc3RyYXRpb24gc3RydWN0dXJlIHN0b3JlZCBpbnNpZGUgdGhpcyBpdGVtLgorICogIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgdGhlIHBvaW50ZXIgaXMgaW52YWxpZAorICogIGFuZCBzaG91bGQgYmUgc2V0IHRvIE5VTEwuCisgKgorICogIEBwYXJhbSBhIFRoZSBzdWJ0cmVlIGl0ZW0gdG8gZGlzcG9zZS4KKyAqLwogdm9pZAogbmV0c25tcF9zdWJ0cmVlX2ZyZWUobmV0c25tcF9zdWJ0cmVlICphKQogewpAQCAtOTYsNiArNDc2LDE0IEBACiAgIH0KIH0KIAorLyoqIENyZWF0ZXMgZGVlcCBjb3B5IG9mIGEgc3VidHJlZSBpdGVtLgorICogIER1cGxpY2F0ZXMgYWxsIHByb3BlcnRpZXMgc3RvcmVkIGluIHRoZSBzdHJ1Y3R1cmUsIGluY2x1ZGluZworICogIEhhbmRsZSBSZWdpc3RyYXRpb24gc3RydWN0dXJlIHN0b3JlZCBpbnNpZGUgdGhlIGl0ZW0uCisgKgorICogIEBwYXJhbSBhIFRoZSBzdWJ0cmVlIGl0ZW0gdG8gY29weS4KKyAqCisgKiAgQHJldHVybiBkZWVwIGNvcHkgb2YgdGhlIHN1YnRyZWUgaXRlbSwgb3IgTlVMTCBvbiBlcnJvci4KKyAqLwogbmV0c25tcF9zdWJ0cmVlICoKIG5ldHNubXBfc3VidHJlZV9kZWVwY29weShuZXRzbm1wX3N1YnRyZWUgKmEpCiB7CkBAIC0xMzYsNzggKzUyNCwxMCBAQAogICByZXR1cm4gYjsKIH0KIAotc3VidHJlZV9jb250ZXh0X2NhY2hlICoKLWdldF90b3BfY29udGV4dF9jYWNoZSh2b2lkKQotewotICAgIHJldHVybiBjb250ZXh0X3N1YnRyZWVzOwotfQotCi1uZXRzbm1wX3N1YnRyZWUgKgotbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQotewotICAgIHN1YnRyZWVfY29udGV4dF9jYWNoZSAqcHRyOwotCi0gICAgaWYgKCFjb250ZXh0X25hbWUpIHsKLSAgICAgICAgY29udGV4dF9uYW1lID0gIiI7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAibG9va2luZyBmb3Igc3VidHJlZSBmb3IgY29udGV4dDogXCIlc1wiXG4iLCAKLQkJY29udGV4dF9uYW1lKSk7Ci0gICAgZm9yIChwdHIgPSBjb250ZXh0X3N1YnRyZWVzOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwdHItPmNvbnRleHRfbmFtZSAhPSBOVUxMICYmIAotCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZm91bmQgb25lIGZvcjogXCIlc1wiXG4iLCBjb250ZXh0X25hbWUpKTsKLSAgICAgICAgICAgIHJldHVybiBwdHItPmZpcnN0X3N1YnRyZWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiZGlkbid0IGZpbmQgYSBzdWJ0cmVlIGZvciBjb250ZXh0OiBcIiVzXCJcbiIsIAotCQljb250ZXh0X25hbWUpKTsKLSAgICByZXR1cm4gTlVMTDsKLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLWFkZF9zdWJ0cmVlKG5ldHNubXBfc3VidHJlZSAqbmV3X3RyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKLXsKLSAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3VidHJlZV9jb250ZXh0X2NhY2hlKTsKLSAgICAKLSAgICBpZiAoIWNvbnRleHRfbmFtZSkgewotICAgICAgICBjb250ZXh0X25hbWUgPSAiIjsKLSAgICB9Ci0KLSAgICBpZiAoIXB0cikgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoInN1YnRyZWUiLCAiYWRkaW5nIHN1YnRyZWUgZm9yIGNvbnRleHQ6IFwiJXNcIlxuIiwJCi0JCWNvbnRleHRfbmFtZSkpOwotCi0gICAgcHRyLT5uZXh0ID0gY29udGV4dF9zdWJ0cmVlczsKLSAgICBwdHItPmZpcnN0X3N1YnRyZWUgPSBuZXdfdHJlZTsKLSAgICBwdHItPmNvbnRleHRfbmFtZSA9IHN0cmR1cChjb250ZXh0X25hbWUpOwotICAgIGNvbnRleHRfc3VidHJlZXMgPSBwdHI7Ci0KLSAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOwotfQotCi1uZXRzbm1wX3N1YnRyZWUgKgotbmV0c25tcF9zdWJ0cmVlX3JlcGxhY2VfZmlyc3QobmV0c25tcF9zdWJ0cmVlICpuZXdfdHJlZSwgCi0JCQkgICAgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgc3VidHJlZV9jb250ZXh0X2NhY2hlICpwdHI7Ci0gICAgaWYgKCFjb250ZXh0X25hbWUpIHsKLSAgICAgICAgY29udGV4dF9uYW1lID0gIiI7Ci0gICAgfQotICAgIGZvciAocHRyID0gY29udGV4dF9zdWJ0cmVlczsgcHRyICE9IE5VTEw7IHB0ciA9IHB0ci0+bmV4dCkgewotICAgICAgICBpZiAocHRyLT5jb250ZXh0X25hbWUgIT0gTlVMTCAmJgotCSAgICBzdHJjbXAocHRyLT5jb250ZXh0X25hbWUsIGNvbnRleHRfbmFtZSkgPT0gMCkgewotICAgICAgICAgICAgcHRyLT5maXJzdF9zdWJ0cmVlID0gbmV3X3RyZWU7Ci0gICAgICAgICAgICByZXR1cm4gcHRyLT5maXJzdF9zdWJ0cmVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBhZGRfc3VidHJlZShuZXdfdHJlZSwgY29udGV4dF9uYW1lKTsKLX0KLQotTkVUU05NUF9JTkxJTkUgdm9pZAorLyoqIEBwcml2YXRlCisgKiAgUmVwbGFjZXMgbmV4dCBzdWJ0cmVlIHBvaW50ZXIgaW4gZ2l2ZW4gc3VidHJlZS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKIG5ldHNubXBfc3VidHJlZV9jaGFuZ2VfbmV4dChuZXRzbm1wX3N1YnRyZWUgKnB0ciwgbmV0c25tcF9zdWJ0cmVlICp0aGVuZXh0KQogewogICAgIHB0ci0+bmV4dCA9IHRoZW5leHQ7CkBAIC0yMTksNyArNTM5LDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRoZW5leHQtPm9pZF9vZmYpOwogfQogCi1ORVRTTk1QX0lOTElORSB2b2lkCisvKiogQHByaXZhdGUKKyAqICBSZXBsYWNlcyBwcmV2aW91cyBzdWJ0cmVlIHBvaW50ZXIgaW4gZ2l2ZW4gc3VidHJlZS4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKIG5ldHNubXBfc3VidHJlZV9jaGFuZ2VfcHJldihuZXRzbm1wX3N1YnRyZWUgKnB0ciwgbmV0c25tcF9zdWJ0cmVlICp0aGVwcmV2KQogewogICAgIHB0ci0+cHJldiA9IHRoZXByZXY7CkBAIC0yMzEsMTIgKzU1NCwyOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwdHItPm9pZF9vZmYpOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9zdWJ0cmVlX2NvbXBhcmUsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9TVUJUUkVFX0NPTVBBUkUKKy8qKiBDb21wYXJlcyBPSURzIG9mIGdpdmVuIHN1YnRyZWVzLgorICoKKyAqICBAcGFyYW0gYXAsYnAgUG9pbnRlcnMgdG8gdGhlIHN1YnRyZWVzIHRvIGJlIGNvbXBhcmVkLgorICoKKyAqICBAcmV0dXJuIE9JRHMgbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmlzb24gcmVzdWx0LgorICoKKyAqICBAc2VlIHNubXBfb2lkX2NvbXBhcmUoKQorICovCiBpbnQKIG5ldHNubXBfc3VidHJlZV9jb21wYXJlKGNvbnN0IG5ldHNubXBfc3VidHJlZSAqYXAsIGNvbnN0IG5ldHNubXBfc3VidHJlZSAqYnApCiB7CiAgICAgcmV0dXJuIHNubXBfb2lkX2NvbXBhcmUoYXAtPm5hbWVfYSwgYXAtPm5hbWVsZW4sIGJwLT5uYW1lX2EsIGJwLT5uYW1lbGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfU1VCVFJFRV9DT01QQVJFICovCiAKKy8qKiBKb2lucyB0aGUgZ2l2ZW4gc3VidHJlZSB3aXRoIHRoZSBjdXJyZW50IHRyZWUuCisgKiAgVHJlZXMgYXJlIGpvaW5lZCBhbmQgdGhlIG9uZSBzdXBwbGllZCBhcyBwYXJhbWV0ZXIgaXMgZnJlZWQuCisgKgorICogIEBwYXJhbSByb290IFRoZSBzdWJ0cmVlIHRvIGJlIG1lcmdlZCB3aXRoIGN1cnJlbnQgc3VidHJlZS4KKyAqICAgICAgICAgICAgICBEbyBub3QgdXNlIHRoZSBwb2ludGVyIGFmdGVyIGpvaW5pbmcgLSBpdCBtYXkgYmUgaW52YWxpZC4KKyAqLwogdm9pZAogbmV0c25tcF9zdWJ0cmVlX2pvaW4obmV0c25tcF9zdWJ0cmVlICpyb290KQogewpAQCAtMjgzLDEwICs2MjMsMTggQEAKIH0KIAogCi0gICAgICAgIC8qCi0gICAgICAgICAqICBTcGxpdCB0aGUgc3VidHJlZSBpbnRvIHR3byBhdCB0aGUgc3BlY2lmaWVkIHBvaW50LAotICAgICAgICAgKiAgICByZXR1cm5pbmcgdGhlIG5ldyAoc2Vjb25kKSBzdWJ0cmVlCi0gICAgICAgICAqLworLyoqIFNwbGl0IHRoZSBzdWJ0cmVlIGludG8gdHdvIGF0IHRoZSBzcGVjaWZpZWQgcG9pbnQuCisgKiAgU3VidHJlZXMgb2YgdGhlIGdpdmVuIE9JRCBhbmQgc2VwYXJhdGVkIGFuZCBmb3JtZWQgaW50byB0aGUKKyAqICByZXR1cm5lZCBzdWJ0cmVlLgorICoKKyAqICBAcGFyYW0gY3VycmVudCBUaGUgZWxlbWVudCBhdCB3aGljaCBzcGxpdHRpbmcgaXMgc3RhcnRlZC4KKyAqCisgKiAgQHBhcmFtIG5hbWUgVGhlIE9JRCB3ZSdkIGxpa2UgdG8gc3BsaXQuCisgKgorICogIEBwYXJhbSBuYW1lX2xlbiBMZW5ndGggb2YgdGhlIE9JRC4KKyAqCisgKiAgQHJldHVybiBoZWFkIG9mIHRoZSBuZXcgKHNlY29uZCkgc3VidHJlZS4KKyAqLwogbmV0c25tcF9zdWJ0cmVlICoKIG5ldHNubXBfc3VidHJlZV9zcGxpdChuZXRzbm1wX3N1YnRyZWUgKmN1cnJlbnQsIG9pZCBuYW1lW10sIGludCBuYW1lX2xlbikKIHsKQEAgLTMyMCw5ICs2NjgsNyBAQAogCXJldHVybiBOVUxMOwogICAgIH0KIAotICAgIGlmIChjdXJyZW50LT5lbmRfYSAhPSBOVUxMKSB7Ci0JU05NUF9GUkVFKGN1cnJlbnQtPmVuZF9hKTsKLSAgICB9CisgICAgU05NUF9GUkVFKGN1cnJlbnQtPmVuZF9hKTsKICAgICBjdXJyZW50LT5lbmRfYSA9IHRtcF9hOwogICAgIGN1cnJlbnQtPmVuZF9sZW4gPSBuYW1lX2xlbjsKICAgICBpZiAobmV3X3N1Yi0+c3RhcnRfYSAhPSBOVUxMKSB7CkBAIC0zOTMsMTIgKzczOSwxOSBAQAogICAgIHJldHVybiBuZXdfc3ViOwogfQogCisvKiogTG9hZHMgdGhlIHN1YnRyZWUgdW5kZXIgZ2l2ZW4gY29udGV4dCBuYW1lLgorICoKKyAqICBAcGFyYW0gbmV3X3N1YiBUaGUgc3VidHJlZSB0byBiZSBsb2FkZWQgaW50byBjdXJyZW50IHN1YnRyZWUuCisgKgorICogIEBwYXJhbSBjb250ZXh0X25hbWUgVGV4dCBuYW1lIG9mIHRoZSBjb250ZXh0IHdlJ3JlIHNlYXJjaGluZyBmb3IuCisgKgorICogIEByZXR1cm4gZ2l2ZXMgTUlCX1JFR0lTVEVSRURfT0sgb24gc3VjY2VzcywgZXJyb3IgY29kZSBvdGhlcndpc2UuCisgKi8KIGludAogbmV0c25tcF9zdWJ0cmVlX2xvYWQobmV0c25tcF9zdWJ0cmVlICpuZXdfc3ViLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCiB7Ci0gICAgbmV0c25tcF9zdWJ0cmVlICp0cmVlMSwgKnRyZWUyLCAqbmV3MjsKKyAgICBuZXRzbm1wX3N1YnRyZWUgKnRyZWUxLCAqdHJlZTI7CiAgICAgbmV0c25tcF9zdWJ0cmVlICpwcmV2LCAqbmV4dDsKLSAgICBpbnQgICAgICAgICAgICAgcmVzLCByYyA9IDA7CiAKICAgICBpZiAobmV3X3N1YiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBNSUJfUkVHSVNURVJFRF9PSzsgICAgICAgLyogRGVnZW5lcmF0ZSBjYXNlICovCkBAIC00NDAsNyArNzkzLDcgQEAKICAgICAvKiAgSGFuZGxlIG5ldyBzdWJ0cmVlcyB0aGF0IHN0YXJ0IGluIHZpcmdpbiB0ZXJyaXRvcnkuICAqLwogCiAgICAgaWYgKHRyZWUxID09IE5VTEwpIHsKLQluZXcyID0gTlVMTDsKKyAgICAgICAgbmV0c25tcF9zdWJ0cmVlICpuZXcyID0gTlVMTDsKIAkvKiAgSXMgdGhlcmUgYW55IG92ZXJsYXAgd2l0aCBsYXRlciBzdWJ0cmVlcz8gICovCiAJaWYgKHRyZWUyICYmIHNubXBfb2lkX2NvbXBhcmUobmV3X3N1Yi0+ZW5kX2EsIG5ld19zdWItPmVuZF9sZW4sCiAJCQkJICAgICAgdHJlZTItPnN0YXJ0X2EsIHRyZWUyLT5zdGFydF9sZW4pID4gMCkgewpAQCAtNDk5LDEwICs4NTIsOCBAQAogCSAgICBJZiB0aGUgbmV3IHN1YnRyZWUgZXh0ZW5kcyBiZXlvbmQgdGhpcyBleGlzdGluZyByZWdpb24sCiAJICAgICAgICAgICAgc3BsaXQgaXQsIGFuZCByZWN1cnNlIHRvIG1lcmdlIHRoZSB0d28gcGFydHMuICAqLwogCi0JcmMgPSBzbm1wX29pZF9jb21wYXJlKG5ld19zdWItPmVuZF9hLCBuZXdfc3ViLT5lbmRfbGVuLCAKLQkJCSAgICAgIHRyZWUxLT5lbmRfYSwgdHJlZTEtPmVuZF9sZW4pOwotCi0gICAgICAgIHN3aXRjaCAocmMpIHsKKwlzd2l0Y2ggKHNubXBfb2lkX2NvbXBhcmUobmV3X3N1Yi0+ZW5kX2EsIG5ld19zdWItPmVuZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmVlMS0+ZW5kX2EsIHRyZWUxLT5lbmRfbGVuKSkgewogCiAJY2FzZSAtMToKIAkgICAgLyogIEV4aXN0aW5nIHN1YnRyZWUgY29udGFpbnMgbmV3IG9uZS4gICovCkBAIC01MzEsOCArODgyLDIzIEBACiAJCiAJICAgIGlmIChuZXh0ICYmIChuZXh0LT5uYW1lbGVuICA9PSBuZXdfc3ViLT5uYW1lbGVuKSAmJgogCQkobmV4dC0+cHJpb3JpdHkgPT0gbmV3X3N1Yi0+cHJpb3JpdHkpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG5ld19zdWItPm5hbWVsZW4gIT0gMSkgLyogaWdub3JlIHJvb3QgT0lEIGR1cHMgKi8KLSAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR1cGxpY2F0ZSByZWdpc3RyYXRpb24gKCVzLCAlcykiLCBuZXh0LT5sYWJlbF9hLCBuZXdfc3ViLT5sYWJlbF9hKTsKKyAgICAgICAgICAgICAgICBpZiAobmV3X3N1Yi0+bmFtZWxlbiAhPSAxKSB7ICAgIC8qIGlnbm9yZSByb290IE9JRCBkdXBzICovCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBvdXRfbGVuID0gMDsKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSAwOworICAgICAgICAgICAgICAgICAgICBjaGFyICAgICAgICAgICAqYnVmID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGJ1Zl9vdmVyZmxvdyA9IDA7CisKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZCgodV9jaGFyICoqKSAmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgJmJ1Zl9vdmVyZmxvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdfc3ViLT5zdGFydF9hLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19zdWItPnN0YXJ0X2xlbik7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkdXBsaWNhdGUgcmVnaXN0cmF0aW9uOiBNSUIgbW9kdWxlcyAlcyBhbmQgJXMgKG9pZCAlcyVzKS5cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5leHQtPmxhYmVsX2EsIG5ld19zdWItPmxhYmVsX2EsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiA/IGJ1ZiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWZfb3ZlcmZsb3cgPyAiIFtUUlVOQ0FURURdIiA6ICIiKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShidWYpOworICAgICAgICAgICAgICAgIH0KIAkJcmV0dXJuIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OOwogCSAgICB9CiAKQEAgLTU1OCwyMCArOTI0LDE4OCBAQAogCiAJY2FzZSAgMToKIAkgICAgLyogIE5ldyBzdWJ0cmVlIGNvbnRhaW5zIHRoZSBleGlzdGluZyBvbmUuICAqLwotCSAgICBuZXcyID0gbmV0c25tcF9zdWJ0cmVlX3NwbGl0KG5ld19zdWIsIHRyZWUxLT5lbmRfYSx0cmVlMS0+ZW5kX2xlbik7Ci0JICAgIHJlcyA9IG5ldHNubXBfc3VidHJlZV9sb2FkKG5ld19zdWIsIGNvbnRleHRfbmFtZSk7Ci0JICAgIGlmIChyZXMgIT0gTUlCX1JFR0lTVEVSRURfT0spIHsKLQkJbmV0c25tcF9zdWJ0cmVlX2ZyZWUobmV3Mik7Ci0JCXJldHVybiByZXM7Ci0JICAgIH0KLQkgICAgcmV0dXJuIG5ldHNubXBfc3VidHJlZV9sb2FkKG5ldzIsIGNvbnRleHRfbmFtZSk7Ci0JfQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZSAqbmV3MiA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3VidHJlZV9zcGxpdChuZXdfc3ViLCB0cmVlMS0+ZW5kX2EsdHJlZTEtPmVuZF9sZW4pOworICAgICAgICAgICAgICAgIGludCByZXMgPSBuZXRzbm1wX3N1YnRyZWVfbG9hZChuZXdfc3ViLCBjb250ZXh0X25hbWUpOworICAgICAgICAgICAgICAgIGlmIChyZXMgIT0gTUlCX1JFR0lTVEVSRURfT0spIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfc3VidHJlZShuZXcyKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlX2ZyZWUobmV3Mik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX3N1YnRyZWVfbG9hZChuZXcyLCBjb250ZXh0X25hbWUpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiAwOwogfQogCi0vKgotICogTm90ZTogcmVnaW5mbyB3aWxsIGJlIGZyZWVkIG9uIGZhaWx1cmVzCisvKiogRnJlZSB0aGUgZ2l2ZW4gc3VidHJlZSBhbmQgYWxsIGl0cyBjaGlsZHJlbi4KKyAqCisgKiAgQHBhcmFtIHN1YiBTdWJ0cmVlIGJyYW5jaCB0byBiZSBjbGVhcmVkIGFuZCBmcmVlZC4KKyAqICAgICAgICAgICAgIEFmdGVyIHRoZSBjYWxsLCB0aGlzIHBvaW50ZXIgaXMgaW52YWxpZAorICogICAgICAgICAgICAgYW5kIHNob3VsZCBiZSBzZXQgdG8gTlVMTC4KKyAqLwordm9pZAorY2xlYXJfc3VidHJlZSAobmV0c25tcF9zdWJ0cmVlICpzdWIpIHsKKworICAgIG5ldHNubXBfc3VidHJlZSAqYzsKKyAgICAKKyAgICBpZiAoc3ViID09IE5VTEwpCisJcmV0dXJuOworCisgICAgZm9yKGMgPSBzdWI7IGM7KSB7CisgICAgICAgIHN1YiA9IGM7CisgICAgICAgIGMgPSBjLT5jaGlsZHJlbjsKKyAgICAgICAgbmV0c25tcF9zdWJ0cmVlX2ZyZWUoc3ViKTsKKyAgICB9CisKK30KKworbmV0c25tcF9zdWJ0cmVlICoKK25ldHNubXBfc3VidHJlZV9maW5kX3ByZXYoY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbGVuLCBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsCisJCQkgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKK3sKKyAgICBsb29rdXBfY2FjaGUgKmxvb2t1cF9jYWNoZSA9IE5VTEw7CisgICAgbmV0c25tcF9zdWJ0cmVlICpteXB0ciA9IE5VTEwsICpwcmV2aW91cyA9IE5VTEw7CisgICAgaW50IGNtcCA9IDE7CisgICAgc2l6ZV90IGxsX29mZiA9IDA7CisKKyAgICBpZiAoc3VidHJlZSkgeworICAgICAgICBteXB0ciA9IHN1YnRyZWU7CisgICAgfSBlbHNlIHsKKwkvKiBsb29rIHRocm91Z2ggZXZlcnl0aGluZyAqLworICAgICAgICBpZiAobG9va3VwX2NhY2hlX3NpemUpIHsKKyAgICAgICAgICAgIGxvb2t1cF9jYWNoZSA9IGxvb2t1cF9jYWNoZV9maW5kKGNvbnRleHRfbmFtZSwgbmFtZSwgbGVuLCAmY21wKTsKKyAgICAgICAgICAgIGlmIChsb29rdXBfY2FjaGUpIHsKKyAgICAgICAgICAgICAgICBteXB0ciA9IGxvb2t1cF9jYWNoZS0+bmV4dDsKKyAgICAgICAgICAgICAgICBwcmV2aW91cyA9IGxvb2t1cF9jYWNoZS0+cHJldmlvdXM7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIW15cHRyKQorICAgICAgICAgICAgICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dF9uYW1lKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfZmlyc3QoY29udGV4dF9uYW1lKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogdGhpcyBvcHRpbWl6YXRpb24gY2F1c2VzIGEgc2VnZmF1bHQgb24gc2YgY2YgYWxwaGEtbGludXgxLgorICAgICAqIGlmZGVmIG91dCB1bnRpbCBzb21lb25lIGZpZ3VyZXMgb3V0IHdoeSBhbmQgZml4ZXMgaXQuIHh4eC1ya3MgMjAwNTExMTcKKyAgICAgKi8KKyNpZm5kZWYgX19hbHBoYQorI2RlZmluZSBXVEVTVF9PUFRJTUlaQVRJT04gMQorI2VuZGlmCisjaWZkZWYgV1RFU1RfT1BUSU1JWkFUSU9OCisgICAgREVCVUdNU0dUTCgoInd0ZXN0Iiwib2lkIGluOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJ3dGVzdCIsIG5hbWUsIGxlbikpOworICAgIERFQlVHTVNHKCgid3Rlc3QiLCJcbiIpKTsKKyNlbmRpZgorICAgIGZvciAoOyBteXB0ciAhPSBOVUxMOyBwcmV2aW91cyA9IG15cHRyLCBteXB0ciA9IG15cHRyLT5uZXh0KSB7CisjaWZkZWYgV1RFU1RfT1BUSU1JWkFUSU9OCisgICAgICAgIC8qIENvbXBhcmUgdGhlIGluY29taW5nIG9pZCB3aXRoIHRoZSBsaW5rZWQgbGlzdC4gIElmIHdlIGhhdmUKKyAgICAgICAgICAgcmVzdWx0cyBvZiBwcmV2aW91cyBjb21wYXJlcywgaXRzIGZhc3RlciB0byBtYWtlIHN1cmUgdGhlCisgICAgICAgICAgIGxlbmd0aCB3ZSBkaWZmZXJlZCBpbiB0aGUgbGFzdCBjaGVjayBpcyBncmVhdGVyIHRoYW4gdGhlCisgICAgICAgICAgIGxlbmd0aCBiZXR3ZWVuIHRoaXMgcG9pbnRlciBhbmQgdGhlIGxhc3QgdGhlbiB3ZSBkb24ndCBuZWVkCisgICAgICAgICAgIHRvIGFjdHVhbGx5IHBlcmZvcm0gYSBjb21wYXJpc29uICovCisgICAgICAgIERFQlVHTVNHVEwoKCJ3dGVzdCIsIm9pZCBjbXA6ICIpKTsKKyAgICAgICAgREVCVUdNU0dPSUQoKCJ3dGVzdCIsIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuKSk7CisgICAgICAgIERFQlVHTVNHKCgid3Rlc3QiLCIgIC0tLSBvZmYgPSAlbHUsIGluIG9mZiA9ICVsdSB0ZXN0ID0gJWRcbiIsCisgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylteXB0ci0+b2lkX29mZiwgKHVuc2lnbmVkIGxvbmcpbGxfb2ZmLAorICAgICAgICAgICAgICAgICAgIShsbF9vZmYgJiYgbXlwdHItPm9pZF9vZmYgJiYKKyAgICAgICAgICAgICAgICAgICAgbXlwdHItPm9pZF9vZmYgPiBsbF9vZmYpKSk7CisgICAgICAgIGlmICghKGxsX29mZiAmJiBteXB0ci0+b2lkX29mZiAmJiBteXB0ci0+b2lkX29mZiA+IGxsX29mZikgJiYKKyAgICAgICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwobmFtZSwgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxsX29mZikgPCAwKSB7CisjZWxzZQorICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuKSA8IDApIHsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKGxvb2t1cF9jYWNoZV9zaXplICYmIHByZXZpb3VzICYmIGNtcCkgeworICAgICAgICAgICAgICAgIGlmIChsb29rdXBfY2FjaGUpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9va3VwX2NhY2hlX3JlcGxhY2UobG9va3VwX2NhY2hlLCBteXB0ciwgcHJldmlvdXMpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvb2t1cF9jYWNoZV9hZGQoY29udGV4dF9uYW1lLCBteXB0ciwgcHJldmlvdXMpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBwcmV2aW91czsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcHJldmlvdXM7Cit9CisKK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfZmluZF9uZXh0KGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwKKwkJCSAgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCit7CisgICAgbmV0c25tcF9zdWJ0cmVlICpteXB0ciA9IE5VTEw7CisKKyAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYobmFtZSwgbGVuLCBzdWJ0cmVlLCBjb250ZXh0X25hbWUpOworCisgICAgaWYgKG15cHRyICE9IE5VTEwpIHsKKyAgICAgICAgbXlwdHIgPSBteXB0ci0+bmV4dDsKKyAgICAgICAgd2hpbGUgKG15cHRyICE9IE5VTEwgJiYgKG15cHRyLT52YXJpYWJsZXMgPT0gTlVMTCB8fCAKKwkJCQkgbXlwdHItPnZhcmlhYmxlc19sZW4gPT0gMCkpIHsKKyAgICAgICAgICAgIG15cHRyID0gbXlwdHItPm5leHQ7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIG15cHRyOworICAgIH0gZWxzZSBpZiAoc3VidHJlZSAhPSBOVUxMICYmIHNubXBfb2lkX2NvbXBhcmUobmFtZSwgbGVuLCAKKwkJCQkgICBzdWJ0cmVlLT5zdGFydF9hLCBzdWJ0cmVlLT5zdGFydF9sZW4pIDwgMCkgeworICAgICAgICByZXR1cm4gc3VidHJlZTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKK25ldHNubXBfc3VidHJlZSAqCituZXRzbm1wX3N1YnRyZWVfZmluZChjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4sIG5ldHNubXBfc3VidHJlZSAqc3VidHJlZSwgCisJCSAgICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQoreworICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHI7CisKKyAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX3ByZXYobmFtZSwgbGVuLCBzdWJ0cmVlLCBjb250ZXh0X25hbWUpOworICAgIGlmIChteXB0ciAmJiBteXB0ci0+ZW5kX2EgJiYKKyAgICAgICAgc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIG15cHRyLT5lbmRfYSwgbXlwdHItPmVuZF9sZW4pPDApIHsKKyAgICAgICAgcmV0dXJuIG15cHRyOworICAgIH0KKworICAgIHJldHVybiBOVUxMOworfQorCisvKiogIEB9ICovCisvKiBFbmQgb2YgU3VidHJlZXMgbWFpbnRhaW5pbmcgY29kZSAqLworCisvKiogQGRlZmdyb3VwIGFnZW50X21pYl9yZWdpc3RlcmluZyBSZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyBNSUIgc3VidHJlZXMuCisgKiAgICAgQWRkaW5nIGFuZCByZW1vdmluZyBNSUIgbm9kZXMgdG8gdGhlIGRhdGFiYXNlIHVuZGVyIHRoZWlyIGNvbnRleHRzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKworCisvKiogUmVnaXN0ZXJzIGEgTUlCIGhhbmRsZXIuCisgKgorICogIEBwYXJhbSBtb2R1bGVOYW1lCisgKiAgQHBhcmFtIHZhcgorICogIEBwYXJhbSB2YXJzaXplCisgKiAgQHBhcmFtIG51bXZhcnMKKyAqICBAcGFyYW0gIG1pYmxvYworICogIEBwYXJhbSBtaWJsb2NsZW4KKyAqICBAcGFyYW0gcHJpb3JpdHkKKyAqICBAcGFyYW0gcmFuZ2Vfc3ViaWQKKyAqICBAcGFyYW0gcmFuZ2VfdWJvdW5kCisgKiAgQHBhcmFtICBzcworICogIEBwYXJhbSBjb250ZXh0CisgKiAgQHBhcmFtIHRpbWVvdXQKKyAqICBAcGFyYW0gZmxhZ3MKKyAqICBAcGFyYW0gcmVnaW5mbyBSZWdpc3RyYXRpb24gaGFuZGxlciBzdHJ1Y3R1cmUuCisgKiAgICAgICAgICAgICAgICAgSW4gYSBjYXNlIG9mIGZhaWx1cmUsIGl0IHdpbGwgYmUgZnJlZWQuCisgKiAgQHBhcmFtIHBlcmZvcm1fY2FsbGJhY2sKKyAqCisgKiAgQHJldHVybiBnaXZlcyBNSUJfUkVHSVNURVJFRF9PSyBvciBNSUJfKiBlcnJvciBjb2RlLgorICoKKyAqICBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpCisgKiAgQHNlZSByZWdpc3Rlcl9hZ2VudHhfbGlzdCgpCisgKiAgQHNlZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUoKQogICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbWliKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCkBAIC01OTEsNyArMTEyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICBpbnQgcGVyZm9ybV9jYWxsYmFjaykKIHsKICAgICBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsICpzdWIyOwotICAgIGludCAgICAgICAgICAgICByZXMsIGk7CisgICAgaW50ICAgICAgICAgICAgIHJlczsKICAgICBzdHJ1Y3QgcmVnaXN0ZXJfcGFyYW1ldGVycyByZWdfcGFybXM7CiAgICAgaW50IG9sZF9sb29rdXBfY2FjaGVfdmFsID0gbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUoKTsKIApAQCAtNjcyLDYgKzEyMDYsNyBAQAogCXJlc3Qgb2YgdGhlIHJhbmdlLiAgKi8KIAogICAgIGlmIChyZXMgPT0gTUlCX1JFR0lTVEVSRURfT0sgJiYgcmFuZ2Vfc3ViaWQgIT0gMCkgeworICAgICAgICBpbnQgaTsKIAlmb3IgKGkgPSBtaWJsb2NbcmFuZ2Vfc3ViaWQgLSAxXSArIDE7IGkgPD0gKGludClyYW5nZV91Ym91bmQ7IGkrKykgewogCSAgICBzdWIyID0gbmV0c25tcF9zdWJ0cmVlX2RlZXBjb3B5KHN1YnRyZWUpOwogCkBAIC02OTgsNiArMTIzMyw3IEBACiAgICAgICAgICAgICBpZiAocmVzICE9IE1JQl9SRUdJU1RFUkVEX09LKSB7CiAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl9taWJfY29udGV4dChtaWJsb2MsIG1pYmxvY2xlbiwgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9zdWJpZCwgcmFuZ2VfdWJvdW5kLCBjb250ZXh0KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV9zdWJ0cmVlKHN1YjIpOwogCQluZXRzbm1wX3N1YnRyZWVfZnJlZShzdWIyKTsKICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZShvbGRfbG9va3VwX2NhY2hlX3ZhbCk7CiAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZV9sb29rdXBfY2FjaGUoY29udGV4dCk7CkBAIC03MzMsNiArMTI2OSw5IEBACiAgICAgICAgIHJlZ19wYXJtcy50aW1lb3V0ID0gdGltZW91dDsKICAgICAgICAgcmVnX3Bhcm1zLmZsYWdzID0gKHVfY2hhcikgZmxhZ3M7CiAgICAgICAgIHJlZ19wYXJtcy5jb250ZXh0TmFtZSA9IGNvbnRleHQ7CisgICAgICAgIHJlZ19wYXJtcy5zZXNzaW9uID0gc3M7CisgICAgICAgIHJlZ19wYXJtcy5yZWdpbmZvID0gcmVnaW5mbzsKKyAgICAgICAgcmVnX3Bhcm1zLmNvbnRleHROYW1lID0gY29udGV4dDsKICAgICAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX09JRCwgJnJlZ19wYXJtcyk7CiAgICAgfQpAQCAtNzQyLDEwICsxMjgxLDkgQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0vKgotICogUmVhdHRhY2ggYSBwYXJ0aWN1bGFyIG5vZGUuICAKKy8qKiBAcHJpdmF0ZQorICogIFJlYXR0YWNoIGEgcGFydGljdWxhciBub2RlLiAgCiAgKi8KLQogc3RhdGljIHZvaWQKIHJlZ2lzdGVyX21pYl9yZWF0dGFjaF9ub2RlKG5ldHNubXBfc3VidHJlZSAqcykKIHsKQEAgLTc2Niw2ICsxMzA0LDkgQEAKICAgICAgICAgcmVnX3Bhcm1zLnJhbmdlX3Vib3VuZCA9IHMtPnJhbmdlX3Vib3VuZDsKICAgICAgICAgcmVnX3Bhcm1zLnRpbWVvdXQgPSBzLT50aW1lb3V0OwogICAgICAgICByZWdfcGFybXMuZmxhZ3MgPSBzLT5mbGFnczsKKyAgICAgICAgcmVnX3Bhcm1zLnNlc3Npb24gPSBzLT5zZXNzaW9uOworICAgICAgICByZWdfcGFybXMucmVnaW5mbyA9IHMtPnJlZ2luZm87CisgICAgICAgIC8qIFhYWDogbWlzc2luZyBpbiBzdWJ0cmVlOiByZWdfcGFybXMuY29udGV4dE5hbWUgPSBzLT5jb250ZXh0OyAqLwogICAgICAgICBpZiAoKE5VTEwgIT0gcy0+cmVnaW5mbykgJiYgKE5VTEwgIT0gcy0+cmVnaW5mby0+Y29udGV4dE5hbWUpKQogICAgICAgICAgICAgcmVnX3Bhcm1zLmNvbnRleHROYW1lID0gcy0+cmVnaW5mby0+Y29udGV4dE5hbWU7CiAgICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKQEAgLTc3NCwxMCArMTMxNSw4IEBACiAgICAgfQogfQogCi0vKgotICogQ2FsbCBjYWxsYmFja3MgdG8gcmVhdHRhY2ggYWxsIG91ciBub2Rlcy4gIAorLyoqIENhbGwgY2FsbGJhY2tzIHRvIHJlYXR0YWNoIGFsbCBvdXIgbm9kZXMuICAKICAqLwotCiB2b2lkCiByZWdpc3Rlcl9taWJfcmVhdHRhY2godm9pZCkKIHsKQEAgLTc5NCwxMCArMTMzMywxMSBAQAogICAgIH0KIH0KIAotLyoKLSAqIE1hcmsgYSBub2RlIGFzIGRldGFjaGVkLiAgCisvKiogQHByaXZhdGUKKyAqICBNYXJrIGEgbm9kZSBhcyBkZXRhY2hlZC4KKyAqCisgKiAgQHBhcmFtIHMgVGhlIG5vdGUgdG8gYmUgbWFya2VkCiAgKi8KLQogc3RhdGljIHZvaWQKIHJlZ2lzdGVyX21pYl9kZXRhY2hfbm9kZShuZXRzbm1wX3N1YnRyZWUgKnMpCiB7CkBAIC04MDYsMTIgKzEzNDYsMTAgQEAKICAgICB9CiB9CiAKLS8qCi0gKiBNYXJrIGFsbCBvdXIgcmVnaXN0ZXJlZCBPSURzIGFzIGRldGFjaGVkLiAgVGhpcyBpcyBvbmx5IHJlYWxseQotICogdXNlZnVsIGZvciBzdWJhZ2VudCBwcm90b2NvbHMsIHdoZW4gYSBjb25uZWN0aW9uIGlzIGxvc3Qgb3IKLSAqIHNvbWV0aGluZy4gIAorLyoqIE1hcmsgYWxsIG91ciByZWdpc3RlcmVkIE9JRHMgYXMgZGV0YWNoZWQuCisgKiAgVGhpcyBpcyBvbmx5IHJlYWxseSB1c2VmdWwgZm9yIHN1YmFnZW50IHByb3RvY29scywgd2hlbgorICogIGEgY29ubmVjdGlvbiBpcyBsb3N0IG9yIHRoZSBzdWJhZ2VudCBpcyBiZWluZyBzaHV0IGRvd24uICAKICAqLwotCiB2b2lkCiByZWdpc3Rlcl9taWJfZGV0YWNoKHZvaWQpCiB7CkBAIC04MjcsMTIgKzEzNjUsNjAgQEAKICAgICB9CiB9CiAKKy8qKiBSZWdpc3RlciBhIG5ldyBtb2R1bGUgaW50byB0aGUgTUlCIGRhdGFiYXNlLCB3aXRoIGFsbCBwb3NzaWJsZSBjdXN0b20gb3B0aW9ucworICoKKyAqICBAcGFyYW0gIG1vZHVsZU5hbWUgVGV4dCBuYW1lIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBuYW1lIHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlCisgKiAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgYWdlbnQuCisgKgorICogIEBwYXJhbSAgdmFyICAgICAgICBBcnJheSBvZiB2YXJpYWJsZXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbW9kdWxlLgorICoKKyAqICBAcGFyYW0gIHZhcnNpemUgICAgU2l6ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSBpbiB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIGlzIG5vcm1hbGx5IGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUpLAorICogICAgICAgICAgICAgICAgICAgICBidXQgaWYgd2Ugd2lzaCB0byB1c2Ugc2hvcnRlciAob3IgbG9uZ2VyKSBPSURzLCB0aGVuIHdlCisgKiAgICAgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgdmFyaWFibGUgc3RydWN0dXJlLgorICoKKyAqICBAcGFyYW0gIG51bXZhcnMgICAgTnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVnaXN0ZXIuCisgKgorICogIEBwYXJhbSAgbWlibG9jICAgICBCYXNlIE9JRCBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBBbGwgT0lEcyBpbiB2YXIgYXJyYXkgc2hvdWxkIGJlIHN1Yi1vaWRzIG9mIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2NsZW4gIExlbmd0aCBvZiB0aGUgYmFzZSBPSUQuCisgKiAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnRlZ2VycyBtYWtpbmcgdXAgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIHByaW9yaXR5ICAgUmVnaXN0cmF0aW9uIHByaW9yaXR5LgorICogICAgICAgICAgICAgICAgICAgICBVc2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQKKyAqICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMuCisgKiAgICAgICAgICAgICAgICAgICAgIFByaW1hcmlseSB1c2VkIHdpdGggQWdlbnRYIHN1YmFnZW50IHJlZ2lzdHJhdGlvbnMuCisgKgorICogIEBwYXJhbSByYW5nZV9zdWJpZCBJZiBub24temVybywgdGhlIG1vZHVsZSBpcyByZWdpc3RlcmVkIGFnYWluc3QgYSByYW5nZQorICogICAgICAgICAgICAgICAgICAgICBvZiBPSURzLCB3aXRoIHRoaXMgcGFyYW1ldGVyIGlkZW50aWZ5aW5nIHRoZSByZWxldmFudAorICogICAgICAgICAgICAgICAgICAgICBzdWJpZGVudGlmaWVyIC0gc2VlIFJGQyAyNzQxIGZvciBkZXRhaWxzLgorICogICAgICAgICAgICAgICAgICAgICBUeXBpY2FsbHkgdXNlZCB0byByZWdpc3RlciBhIHNpbmdsZSByb3cgb2YgYSB0YWJsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgSWYgemVybywgdGhlbiByZWdpc3RlciB0aGUgbW9kdWxlIGFnYWluc3QgdGhlIGZ1bGwgT0lEIHN1YnRyZWUuCisgKgorICogIEBwYXJhbSByYW5nZV91Ym91bmQgVGhlIGVuZCBvZiB0aGUgcmFuZ2UgYmVpbmcgcmVnaXN0ZXJlZCAoc2VlIFJGQyAyNzQxKQorICogICAgICAgICAgICAgICAgICAgICBJZiByYW5nZV9zdWJpZCBpcyB6ZXJvLCB0aGVuIHRoaXMgcGFyYW1ldGVyIGlzIGlnbm9yZWQuCisgKgorICogIEBwYXJhbSBzcyAKKyAqICBAcGFyYW0gY29udGV4dAorICogIEBwYXJhbSB0aW1lb3V0IAorICogIEBwYXJhbSBmbGFncyAKKyAqCisgKiAgQHJldHVybiBnaXZlcyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgcmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfcmFuZ2UoKQorICogIEBzZWUgdW5yZWdpc3Rlcl9taWIoKQorICovCiBpbnQKIHJlZ2lzdGVyX21pYl9jb250ZXh0KGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywKLSAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaWJsb2NsZW4sCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcHJpb3JpdHksCiAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2Vfc3ViaWQsCkBAIC04NDYsMTIgKzE0MzIsNTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQsIGZsYWdzKTsKIH0KIAorLyoqIFJlZ2lzdGVyIGEgbmV3IG1vZHVsZSBpbnRvIHRoZSBNSUIgZGF0YWJhc2UsIGFzIGJlaW5nIHJlc3BvbnNpYmxlCisgKiAgIGZvciBhIHJhbmdlIG9mIE9JRHMgKHR5cGljYWxseSBhIHNpbmdsZSByb3cgb2YgYSB0YWJsZSkuCisgKgorICogIEBwYXJhbSAgbW9kdWxlTmFtZSBUZXh0IG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIG5hbWUgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBhZ2VudC4KKyAqCisgKiAgQHBhcmFtICB2YXIgICAgICAgIEFycmF5IG9mIHZhcmlhYmxlcyB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgdmFyc2l6ZSAgICBTaXplIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGluIHZhciBhcnJheS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNpemUgaXMgbm9ybWFsbHkgZXF1YWwgdG8gc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZSksCisgKiAgICAgICAgICAgICAgICAgICAgIGJ1dCBpZiB3ZSB3aXNoIHRvIHVzZSBzaG9ydGVyIChvciBsb25nZXIpIE9JRHMsIHRoZW4gd2UKKyAqICAgICAgICAgICAgICAgICAgICAgY291bGQgdXNlIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSB2YXJpYWJsZSBzdHJ1Y3R1cmUuCisgKgorICogIEBwYXJhbSAgbnVtdmFycyAgICBOdW1iZXIgb2YgdmFyaWFibGVzIGluIHRoZSB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaG93IG1hbnkgdmFyaWFibGVzIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byByZWdpc3Rlci4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2MgICAgIEJhc2UgT0lEIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIEFsbCBPSURzIGluIHZhciBhcnJheSBzaG91bGQgYmUgc3ViLW9pZHMgb2YgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIG1pYmxvY2xlbiAgTGVuZ3RoIG9mIHRoZSBiYXNlIE9JRC4KKyAqICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGludGVnZXJzIG1ha2luZyB1cCB0aGUgYmFzZSBPSUQuCisgKgorICogIEBwYXJhbSAgcHJpb3JpdHkgICBSZWdpc3RyYXRpb24gcHJpb3JpdHkuCisgKiAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgY29uZmlndXJhdGlvbiB3aGVuIGRpZmZlcmVudAorICogICAgICAgICAgICAgICAgICAgICBzZXNzaW9ucyByZWdpc3RlciBpZGVudGljYWwgb3Igb3ZlcmxhcHBpbmcgcmVnaW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgUHJpbWFyaWx5IHVzZWQgd2l0aCBBZ2VudFggc3ViYWdlbnQgcmVnaXN0cmF0aW9ucy4KKyAqCisgKiAgQHBhcmFtIHJhbmdlX3N1YmlkIElmIG5vbi16ZXJvLCB0aGUgbW9kdWxlIGlzIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIHJhbmdlCisgKiAgICAgICAgICAgICAgICAgICAgIG9mIE9JRHMsIHdpdGggdGhpcyBwYXJhbWV0ZXIgaWRlbnRpZnlpbmcgdGhlIHJlbGV2YW50CisgKiAgICAgICAgICAgICAgICAgICAgIHN1YmlkZW50aWZpZXIgLSBzZWUgUkZDIDI3NDEgZm9yIGRldGFpbHMuCisgKiAgICAgICAgICAgICAgICAgICAgIFR5cGljYWxseSB1c2VkIHRvIHJlZ2lzdGVyIGEgc2luZ2xlIHJvdyBvZiBhIHRhYmxlLgorICogICAgICAgICAgICAgICAgICAgICBJZiB6ZXJvLCB0aGVuIHJlZ2lzdGVyIHRoZSBtb2R1bGUgYWdhaW5zdCB0aGUgZnVsbCBPSUQgc3VidHJlZS4KKyAqCisgKiAgQHBhcmFtIHJhbmdlX3Vib3VuZCBUaGUgZW5kIG9mIHRoZSByYW5nZSBiZWluZyByZWdpc3RlcmVkIChzZWUgUkZDIDI3NDEpCisgKiAgICAgICAgICAgICAgICAgICAgIElmIHJhbmdlX3N1YmlkIGlzIHplcm8sIHRoZW4gdGhpcyBwYXJhbWV0ZXIgaXMgaWdub3JlZC4KKyAqCisgKiAgQHBhcmFtIHNzIAorICoKKyAqICBAcmV0dXJuIGdpdmVzIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSByZWdpc3Rlcl9taWIoKQorICogIEBzZWUgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiByZWdpc3Rlcl9taWJfcmFuZ2UoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyc2l6ZSwKICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywKLSAgICAgICAgICAgICAgICAgICBvaWQgKiBtaWJsb2MsCisgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbWlibG9jLAogICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaWJsb2NsZW4sCiAgICAgICAgICAgICAgICAgICAgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgbmV0c25tcF9zZXNzaW9uICogc3MpCkBAIC04NjEsMjcgKzE0OTMsMTAxIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3N1YmlkLCByYW5nZV91Ym91bmQsIHNzLCAiIiwgLTEsIDApOwogfQogCisvKiogUmVnaXN0ZXIgYSBuZXcgbW9kdWxlIGludG8gdGhlIE1JQiBkYXRhYmFzZSwgd2l0aCBhIG5vbi1kZWZhdWx0IHByaW9yaXR5CisgKgorICogIEBwYXJhbSAgbW9kdWxlTmFtZSBUZXh0IG5hbWUgb2YgdGhlIG1vZHVsZS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIGdpdmVuIG5hbWUgd2lsbCBiZSB1c2VkIHRvIGlkZW50aWZ5IHRoZSBtb2R1bGUKKyAqICAgICAgICAgICAgICAgICAgICAgaW5zaWRlIHRoZSBhZ2VudC4KKyAqCisgKiAgQHBhcmFtICB2YXIgICAgICAgIEFycmF5IG9mIHZhcmlhYmxlcyB0byBiZSByZWdpc3RlcmVkIGluIHRoZSBtb2R1bGUuCisgKgorICogIEBwYXJhbSAgdmFyc2l6ZSAgICBTaXplIG9mIGEgc2luZ2xlIHZhcmlhYmxlIGluIHZhciBhcnJheS4KKyAqICAgICAgICAgICAgICAgICAgICAgVGhlIHNpemUgaXMgbm9ybWFsbHkgZXF1YWwgdG8gc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZSksCisgKiAgICAgICAgICAgICAgICAgICAgIGJ1dCBpZiB3ZSB3aXNoIHRvIHVzZSBzaG9ydGVyIChvciBsb25nZXIpIE9JRHMsIHRoZW4gd2UKKyAqICAgICAgICAgICAgICAgICAgICAgY291bGQgdXNlIGRpZmZlcmVudCB2YXJpYW50IG9mIHRoZSB2YXJpYWJsZSBzdHJ1Y3R1cmUuCisgKgorICogIEBwYXJhbSAgbnVtdmFycyAgICBOdW1iZXIgb2YgdmFyaWFibGVzIGluIHRoZSB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoaXMgaXMgaG93IG1hbnkgdmFyaWFibGVzIHRoZSBmdW5jdGlvbiB3aWxsIHRyeSB0byByZWdpc3Rlci4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2MgICAgIEJhc2UgT0lEIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIEFsbCBPSURzIGluIHZhciBhcnJheSBzaG91bGQgYmUgc3ViLW9pZHMgb2YgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcGFyYW0gIG1pYmxvY2xlbiAgTGVuZ3RoIG9mIHRoZSBiYXNlIE9JRC4KKyAqICAgICAgICAgICAgICAgICAgICAgTnVtYmVyIG9mIGludGVnZXJzIG1ha2luZyB1cCB0aGUgYmFzZSBPSUQuCisgKgorICogIEBwYXJhbSAgcHJpb3JpdHkgICBSZWdpc3RyYXRpb24gcHJpb3JpdHkuCisgKiAgICAgICAgICAgICAgICAgICAgIFVzZWQgdG8gYWNoaWV2ZSBhIGRlc2lyZWQgY29uZmlndXJhdGlvbiB3aGVuIGRpZmZlcmVudAorICogICAgICAgICAgICAgICAgICAgICBzZXNzaW9ucyByZWdpc3RlciBpZGVudGljYWwgb3Igb3ZlcmxhcHBpbmcgcmVnaW9ucy4KKyAqICAgICAgICAgICAgICAgICAgICAgUHJpbWFyaWx5IHVzZWQgd2l0aCBBZ2VudFggc3ViYWdlbnQgcmVnaXN0cmF0aW9ucy4KKyAqCisgKiAgQHJldHVybiBnaXZlcyBTTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl8qIGVycm9yIGNvZGUuCisgKgorICogIEBzZWUgcmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKiAgQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKi8KIGludAogcmVnaXN0ZXJfbWliX3ByaW9yaXR5KGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHkpCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHkpCiB7CiAgICAgcmV0dXJuIHJlZ2lzdGVyX21pYl9yYW5nZShtb2R1bGVOYW1lLCB2YXIsIHZhcnNpemUsIG51bXZhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJsb2MsIG1pYmxvY2xlbiwgcHJpb3JpdHksIDAsIDAsIE5VTEwpOwogfQogCisvKiogUmVnaXN0ZXIgYSBuZXcgbW9kdWxlIGludG8gdGhlIE1JQiBkYXRhYmFzZSwgdXNpbmcgZGVmYXVsdCBwcmlvcml0eSBhbmQgY29udGV4dAorICoKKyAqICBAcGFyYW0gIG1vZHVsZU5hbWUgVGV4dCBuYW1lIG9mIHRoZSBtb2R1bGUuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBnaXZlbiBuYW1lIHdpbGwgYmUgdXNlZCB0byBpZGVudGlmeSB0aGUgbW9kdWxlCisgKiAgICAgICAgICAgICAgICAgICAgIGluc2lkZSB0aGUgYWdlbnQuCisgKgorICogIEBwYXJhbSAgdmFyICAgICAgICBBcnJheSBvZiB2YXJpYWJsZXMgdG8gYmUgcmVnaXN0ZXJlZCBpbiB0aGUgbW9kdWxlLgorICoKKyAqICBAcGFyYW0gIHZhcnNpemUgICAgU2l6ZSBvZiBhIHNpbmdsZSB2YXJpYWJsZSBpbiB2YXIgYXJyYXkuCisgKiAgICAgICAgICAgICAgICAgICAgIFRoZSBzaXplIGlzIG5vcm1hbGx5IGVxdWFsIHRvIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUpLAorICogICAgICAgICAgICAgICAgICAgICBidXQgaWYgd2Ugd2lzaCB0byB1c2Ugc2hvcnRlciAob3IgbG9uZ2VyKSBPSURzLCB0aGVuIHdlCisgKiAgICAgICAgICAgICAgICAgICAgIGNvdWxkIHVzZSBkaWZmZXJlbnQgdmFyaWFudCBvZiB0aGUgdmFyaWFibGUgc3RydWN0dXJlLgorICoKKyAqICBAcGFyYW0gIG51bXZhcnMgICAgTnVtYmVyIG9mIHZhcmlhYmxlcyBpbiB0aGUgdmFyIGFycmF5LgorICogICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIGhvdyBtYW55IHZhcmlhYmxlcyB0aGUgZnVuY3Rpb24gd2lsbCB0cnkgdG8gcmVnaXN0ZXIuCisgKgorICogIEBwYXJhbSAgbWlibG9jICAgICBCYXNlIE9JRCBvZiB0aGUgbW9kdWxlLgorICogICAgICAgICAgICAgICAgICAgICBBbGwgT0lEcyBpbiB2YXIgYXJyYXkgc2hvdWxkIGJlIHN1Yi1vaWRzIG9mIHRoZSBiYXNlIE9JRC4KKyAqCisgKiAgQHBhcmFtICBtaWJsb2NsZW4gIExlbmd0aCBvZiB0aGUgYmFzZSBPSUQuCisgKiAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBpbnRlZ2VycyBtYWtpbmcgdXAgdGhlIGJhc2UgT0lELgorICoKKyAqICBAcmV0dXJuIGdpdmVzIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSXyogZXJyb3IgY29kZS4KKyAqCisgKiAgQHNlZSByZWdpc3Rlcl9taWJfcHJpb3JpdHkoKQorICogIEBzZWUgcmVnaXN0ZXJfbWliX3JhbmdlKCkKKyAqICBAc2VlIHJlZ2lzdGVyX21pYl9jb250ZXh0KCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqLwogaW50CiByZWdpc3Rlcl9taWIoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwKLSAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKICAgICAgICAgICAgICBzaXplX3QgdmFyc2l6ZSwKLSAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywgb2lkICogbWlibG9jLCBzaXplX3QgbWlibG9jbGVuKQorICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLCBjb25zdCBvaWQgKiBtaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4pCiB7CiAgICAgcmV0dXJuIHJlZ2lzdGVyX21pYl9wcmlvcml0eShtb2R1bGVOYW1lLCB2YXIsIHZhcnNpemUsIG51bXZhcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJsb2MsIG1pYmxvY2xlbiwgREVGQVVMVF9NSUJfUFJJT1JJVFkpOwogfQogCisvKiogQHByaXZhdGUKKyAqICBVbmxvYWRzIGEgc3VidHJlZSBmcm9tIE1JQiB0cmVlLgorICoKKyAqICBAcGFyYW0gIHN1YiAgICAgVGhlIHN1Yi10cmVlIHdoaWNoIGlzIGJlaW5nIHJlbW92ZWQuCisgKgorICogIEBwYXJhbSAgcHJldiAgICBQcmV2aW91cyBlbnRyeSwgYmVmb3JlIHRoZSB1bmxvYWRlZCBvbmUuCisgKgorICogIEBwYXJhbSAgY29udGV4dCBOYW1lIG9mIHRoZSBjb250ZXh0IHdoaWNoIGlzIGJlaW5nIHJlbW92ZWQuCisgKgorICogIEBzZWUgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKi8KIHZvaWQKIG5ldHNubXBfc3VidHJlZV91bmxvYWQobmV0c25tcF9zdWJ0cmVlICpzdWIsIG5ldHNubXBfc3VidHJlZSAqcHJldiwgY29uc3QgY2hhciAqY29udGV4dCkKIHsKQEAgLTkzNywxMCArMTY0MywxMCBAQAogfQogCiAvKioKLSAqIFVucmVnaXN0ZXJzIGFuIE9JRCB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIGNvbnRleHQgbmFtZSB2YWx1ZS4gCi0gKiBUeXBpY2FsbHkgdXNlZCB3aGVuIGEgbW9kdWxlIGhhcyBtdWx0aXBsZSBjb250ZXh0cyBkZWZpbmVkLiAgVGhlIHBhcmFtZXRlcnMKLSAqIHByaW9yaXR5LCByYW5nZV9zdWJpZCwgYW5kIHJhbmdlX3Vib3VuZCBzaG91bGQgYmUgdXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoCi0gKiBhZ2VudHgsIHNlZSBSRkMgMjc0MSwgb3RoZXJ3aXNlIHRoZXNlIHZhbHVlcyBzaG91bGQgYWx3YXlzIGJlIDAuCisgKiBVbnJlZ2lzdGVycyBhIG1vZHVsZSByZWdpc3RlcmVkIGFnYWluc3QgYSBnaXZlbiBPSUQgKG9yIHJhbmdlKSBpbiBhIHNwZWNpZmllZCBjb250ZXh0LiAKKyAqIFR5cGljYWxseSB1c2VkIHdoZW4gYSBtb2R1bGUgaGFzIG11bHRpcGxlIGNvbnRleHRzIGRlZmluZWQuCisgKiBUaGUgcGFyYW1ldGVycyBwcmlvcml0eSwgcmFuZ2Vfc3ViaWQsIHJhbmdlX3Vib3VuZCBhbmQgY29udGV4dAorICogc2hvdWxkIG1hdGNoIHRob3NlIHVzZWQgdG8gcmVnaXN0ZXIgdGhlIG1vZHVsZSBvcmlnaW5hbGx5LgogICoKICAqIEBwYXJhbSBuYW1lICB0aGUgc3BlY2lmaWMgT0lEIHRvIHVucmVnaXN0ZXIgaWYgaXQgY29uYXRpbnMgdGhlIGFzc29jaWF0ZWQKICAqICAgICAgICAgICAgICBjb250ZXh0LgpAQCAtOTYyLDggKzE2NjgsMTEgQEAKICAqCiAgKiBAcGFyYW0gY29udGV4dCAgYSBjb250ZXh0IG5hbWUgdGhhdCBoYXMgYmVlbiBjcmVhdGVkCiAgKgotICogQHJldHVybiAKKyAqIEByZXR1cm4gZ2l2ZXMgTUlCX1VOUkVHSVNURVJFRF9PSyBvciBNSUJfKiBlcnJvciBjb2RlLgogICogCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfcHJpb3JpdHkoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9yYW5nZSgpCiAgKi8KIGludAogdW5yZWdpc3Rlcl9taWJfY29udGV4dChvaWQgKiBuYW1lLCBzaXplX3QgbGVuLCBpbnQgcHJpb3JpdHksCkBAIC05NzksNyArMTY4OCw3IEBACiAKICAgICBuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZSgwKTsKIAotICAgIGlmICgocmFuZ2Vfc3ViaWQgIT0gMCkgJiYgIChyYW5nZV9zdWJpZCA8PSBsZW4pKQorICAgIGlmICgocmFuZ2Vfc3ViaWQgPiAwKSAmJiAgKChzaXplX3QpcmFuZ2Vfc3ViaWQgPD0gbGVuKSkKICAgICAgICAgb3JpZ19zdWJpZF92YWwgPSBuYW1lW3JhbmdlX3N1YmlkLTFdOwogCiAgICAgd2hpbGUodW5yZWdpc3RlcmluZyl7CkBAIC0xMDY0LDYgKzE3NzMsNyBAQAogICAgIHJldHVybiBNSUJfVU5SRUdJU1RFUkVEX09LOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9NSUJfVEFCTEVfUk9XCiBpbnQKIG5ldHNubXBfdW5yZWdpc3Rlcl9taWJfdGFibGVfcm93KG9pZCAqIG5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YXJfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsCkBAIC0xMTQyLDcgKzE4NTIsMzggQEAKIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVU5SRUdJU1RFUl9NSUJfVEFCTEVfUk9XICovCiAKKy8qKgorICogVW5yZWdpc3RlcnMgYSBtb2R1bGUgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgZ2l2ZW4gT0lEIChvciByYW5nZSkgaW4gdGhlIGRlZmF1bHQgY29udGV4dC4gCisgKiBUeXBpY2FsbHkgdXNlZCB3aGVuIGEgbW9kdWxlIGhhcyBtdWx0aXBsZSBjb250ZXh0cyBkZWZpbmVkLgorICogVGhlIHBhcmFtZXRlcnMgcHJpb3JpdHksIHJhbmdlX3N1YmlkLCBhbmQgcmFuZ2VfdWJvdW5kIHNob3VsZAorICogbWF0Y2ggdGhvc2UgdXNlZCB0byByZWdpc3RlciB0aGUgbW9kdWxlIG9yaWdpbmFsbHkuCisgKgorICogQHBhcmFtIG5hbWUgIHRoZSBzcGVjaWZpYyBPSUQgdG8gdW5yZWdpc3RlciBpZiBpdCBjb25hdGlucyB0aGUgYXNzb2NpYXRlZAorICogICAgICAgICAgICAgIGNvbnRleHQuCisgKgorICogQHBhcmFtIGxlbiAgIHRoZSBsZW5ndGggb2YgdGhlIE9JRCwgdXNlICBPSURfTEVOR1RIIG1hY3JvLgorICoKKyAqIEBwYXJhbSBwcmlvcml0eSAgYSB2YWx1ZSBiZXR3ZWVuIDEgYW5kIDI1NSwgdXNlZCB0byBhY2hpZXZlIGEgZGVzaXJlZAorICogICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIHdoZW4gZGlmZmVyZW50IHNlc3Npb25zIHJlZ2lzdGVyIGlkZW50aWNhbCBvcgorICogICAgICAgICAgICAgICAgICBvdmVybGFwcGluZyByZWdpb25zLiAgU3ViYWdlbnRzIHdpdGggbm8gcGFydGljdWxhcgorICogICAgICAgICAgICAgICAgICBrbm93bGVkZ2Ugb2YgcHJpb3JpdHkgc2hvdWxkIHJlZ2lzdGVyIHdpdGggdGhlIGRlZmF1bHQKKyAqICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgMTI3LgorICoKKyAqIEBwYXJhbSByYW5nZV9zdWJpZCAgcGVybWl0cyBzcGVjaWZ5aW5nIGEgcmFuZ2UgaW4gcGxhY2Ugb2Ygb25lIG9mIGEgc3VidHJlZQorICogICAgICAgICAgICAgICAgICAgICBzdWItaWRlbnRpZmllcnMuICBXaGVuIHRoaXMgdmFsdWUgaXMgemVybywgbm8gcmFuZ2UgaXMKKyAqICAgICAgICAgICAgICAgICAgICAgYmVpbmcgc3BlY2lmaWVkLgorICoKKyAqIEBwYXJhbSByYW5nZV91Ym91bmQgIHRoZSB1cHBlciBib3VuZCBvZiBhIHN1Yi1pZGVudGlmaWVyJ3MgcmFuZ2UuCisgKiAgICAgICAgICAgICAgICAgICAgICBUaGlzIGZpZWxkIGlzIHByZXNlbnQgb25seSBpZiByYW5nZV9zdWJpZCBpcyBub3QgMC4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIE1JQl9VTlJFR0lTVEVSRURfT0sgb3IgTUlCXyogZXJyb3IgY29kZS4KKyAqIAorICogQHNlZSB1bnJlZ2lzdGVyX21pYigpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KCkKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpCisgKi8KIGludAogdW5yZWdpc3Rlcl9taWJfcmFuZ2Uob2lkICogbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5LAogICAgICAgICAgICAgICAgICAgICAgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kKQpAQCAtMTE1MSwxOCArMTg5Miw2MSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJhbmdlX3Vib3VuZCwgIiIpOwogfQogCisvKioKKyAqIFVucmVnaXN0ZXJzIGEgbW9kdWxlIHJlZ2lzdGVyZWQgYWdhaW5zdCBhIGdpdmVuIE9JRCBhdCB0aGUgc3BlY2lmaWVkIHByaW9yaXR5LgorICogVGhlIHByaW9yaXR5IHBhcmFtZXRlciBzaG91bGQgbWF0Y2ggdGhhdCB1c2VkIHRvIHJlZ2lzdGVyIHRoZSBtb2R1bGUgb3JpZ2luYWxseS4KKyAqCisgKiBAcGFyYW0gbmFtZSAgdGhlIHNwZWNpZmljIE9JRCB0byB1bnJlZ2lzdGVyIGlmIGl0IGNvbmF0aW5zIHRoZSBhc3NvY2lhdGVkCisgKiAgICAgICAgICAgICAgY29udGV4dC4KKyAqCisgKiBAcGFyYW0gbGVuICAgdGhlIGxlbmd0aCBvZiB0aGUgT0lELCB1c2UgIE9JRF9MRU5HVEggbWFjcm8uCisgKgorICogQHBhcmFtIHByaW9yaXR5ICBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMjU1LCB1c2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkCisgKiAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yCisgKiAgICAgICAgICAgICAgICAgIG92ZXJsYXBwaW5nIHJlZ2lvbnMuICBTdWJhZ2VudHMgd2l0aCBubyBwYXJ0aWN1bGFyCisgKiAgICAgICAgICAgICAgICAgIGtub3dsZWRnZSBvZiBwcmlvcml0eSBzaG91bGQgcmVnaXN0ZXIgd2l0aCB0aGUgZGVmYXVsdAorICogICAgICAgICAgICAgICAgICB2YWx1ZSBvZiAxMjcuCisgKgorICogQHJldHVybiBnaXZlcyBNSUJfVU5SRUdJU1RFUkVEX09LIG9yIE1JQl8qIGVycm9yIGNvZGUuCisgKiAKKyAqIEBzZWUgdW5yZWdpc3Rlcl9taWIoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICovCiBpbnQKIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KG9pZCAqIG5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSkKIHsKICAgICByZXR1cm4gdW5yZWdpc3Rlcl9taWJfcmFuZ2UobmFtZSwgbGVuLCBwcmlvcml0eSwgMCwgMCk7CiB9CiAKKy8qKgorICogVW5yZWdpc3RlcnMgYSBtb2R1bGUgcmVnaXN0ZXJlZCBhZ2FpbnN0IGEgZ2l2ZW4gT0lEIGF0IHRoZSBkZWZhdWx0IHByaW9yaXR5LgorICoKKyAqIEBwYXJhbSBuYW1lICB0aGUgc3BlY2lmaWMgT0lEIHRvIHVucmVnaXN0ZXIgaWYgaXQgY29uYXRpbnMgdGhlIGFzc29jaWF0ZWQKKyAqICAgICAgICAgICAgICBjb250ZXh0LgorICoKKyAqIEBwYXJhbSBsZW4gICB0aGUgbGVuZ3RoIG9mIHRoZSBPSUQsIHVzZSAgT0lEX0xFTkdUSCBtYWNyby4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIE1JQl9VTlJFR0lTVEVSRURfT0sgb3IgTUlCXyogZXJyb3IgY29kZS4KKyAqIAorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfbWliX2NvbnRleHQoKQorICogQHNlZSB1bnJlZ2lzdGVyX21pYl9yYW5nZSgpCisgKiBAc2VlIHVucmVnaXN0ZXJfYWdlbnR4X2xpc3QoKQorICovCiBpbnQKIHVucmVnaXN0ZXJfbWliKG9pZCAqIG5hbWUsIHNpemVfdCBsZW4pCiB7CiAgICAgcmV0dXJuIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KG5hbWUsIGxlbiwgREVGQVVMVF9NSUJfUFJJT1JJVFkpOwogfQogCisvKiogVW5yZWdpc3RlcnMgc3VidHJlZSBvZiBPSURzIGJvdW5kZWQgdG8gZ2l2ZW4gc2Vzc2lvbi4KKyAqCisgKiAgQHBhcmFtIHNzIFNlc3Npb24gd2hpY2ggT0lEcyB3aWxsIGJlIHJlbW92ZWQgZnJvbSB0cmVlLgorICoKKyAqICBAc2VlIHVucmVnaXN0ZXJfbWliKCkKKyAqICBAc2VlIHVucmVnaXN0ZXJfYWdlbnR4X2xpc3QoKQorICovCiB2b2lkCiB1bnJlZ2lzdGVyX21pYnNfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKIHsKQEAgLTEyMjQsMTUgKzIwMDgsMjEgQEAKICAgICB9CiB9CiAKLS8qCi0gKiBpbl9hX3ZpZXc6IGRldGVybWluZXMgaWYgYSBnaXZlbiBzbm1wX3BkdSBpcyBhbGxvd2VkIHRvIHNlZSBhCi0gKiBnaXZlbiBuYW1lL25hbWVsZW4gT0lEIHBvaW50ZXIKLSAqIG5hbWUgICAgICAgICBJTiAtIG5hbWUgb2YgdmFyLCBPVVQgLSBuYW1lIG1hdGNoZWQKLSAqIG5hbWVMZW4gICAgICBJTiAtbnVtYmVyIG9mIHN1Yi1pZHMgaW4gbmFtZSwgT1VUIC0gc3ViaWQtaXMgaW4gbWF0Y2hlZCBuYW1lCi0gKiBwaSAgICAgICAgICAgSU4gLSByZWxldmFudCBhdXRoIGluZm8gcmUgUERVIAotICogY3ZwICAgICAgICAgIElOIC0gcmVsZXZhbnQgYXV0aCBpbmZvIHJlIG1pYiBtb2R1bGUKKy8qKiBEZXRlcm1pbmVzIGlmIGdpdmVuIFBEVSBpcyBhbGxvd2VkIHRvIHNlZSAob3IgdXBkYXRlKSBhIGdpdmVuIE9JRC4KKyAqCisgKiBAcGFyYW0gbmFtZSAgICBUaGUgT0lEIHRvIGNoZWNrIGFjY2VzcyBmb3IuCisgKiAgICAgICAgICAgICAgICBPbiByZXR1cm4sIHRoaXMgcGFyYW1ldGVyIGhvbGRzIHRoZSBPSUQgYWN0dWFsbHkgbWF0Y2hlZAorICoKKyAqIEBwYXJhbSBuYW1lbGVuIE51bWJlciBvZiBzdWItaWRlbnRpZmllcnMgaW4gdGhlIE9JRC4KKyAqICAgICAgICAgICAgICAgIE9uIHJldHVybiwgdGhpcyBwYXJhbWV0ZXIgaG9sZHMgdGhlIGxlbmd0aCBvZiB0aGUgbWF0Y2hlZCBPSUQKKyAqCisgKiBAcGFyYW0gcGR1ICAgICBQRFUgcmVxdWVzdGluZyBhY2Nlc3MgdG8gdGhlIE9JRC4KKyAqCisgKiBAcGFyYW0gdHlwZSAgICBBTlMuMSB0eXBlIG9mIHRoZSB2YWx1ZSBhdCBnaXZlbiBPSUQuCisgKiAgICAgICAgICAgICAgICAoVXNlZCBmb3IgY2F0Y2hpbmcgU05NUHYxIHJlcXVlc3RzIGZvciBTTUl2Mi1vbmx5IG9iamVjdHMpCisgKgorICogQHJldHVybiBnaXZlcyBWQUNNX1NVQ0NFU1MgaWYgdGhlIE9JRCBpcyBpbiB0aGUgUERVLCBvdGhlcndpc2UgZXJyb3IgY29kZS4KICAqLwotCiBpbnQKIGluX2FfdmlldyhvaWQgKm5hbWUsIHNpemVfdCAqbmFtZWxlbiwgbmV0c25tcF9wZHUgKnBkdSwgaW50IHR5cGUpCiB7CkBAIC0xMjc3LDE3ICsyMDY3LDIyIEBACiAgICAgcmV0dXJuIFZBQ01fTk9TRUNOQU1FOwogfQogCi0vKgotICogY2hlY2tfYWNjZXM6IGRldGVybWluZXMgaWYgYSBnaXZlbiBzbm1wX3BkdSBpcyBldmVyIGdvaW5nIHRvIGJlCi0gKiBhbGxvd2VkIHRvIGRvIGFueW50aGluZyBvciBpZiBpdCdzIG5vdCBnb2luZyB0byBldmVyIGJlCi0gKiBhdXRoZW50aWNhdGVkLgorLyoqIERldGVybWluZXMgaWYgdGhlIGdpdmVuIFBEVSByZXF1ZXN0IGNvdWxkIHBvdGVudGlhbGx5IHN1Y2NlZWQuCisgKiAgKFByZWxpbWluYXJ5LCBPSUQtaW5kZXBlbmRlbnQgdmFsaWRhdGlvbikKKyAqCisgKiBAcGFyYW0gcGR1ICAgICBQRFUgcmVxdWVzdGluZyBhY2Nlc3MKKyAqCisgKiBAcmV0dXJuIGdpdmVzIFZBQ01fU1VDQ0VTUyAgIGlmIHRoZSBlbnRpcmUgTUlCIHRyZWUgaXMgYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBWQUNNX05PVElOVklFVyBpZiB0aGUgZW50aXJlIE1JQiB0cmVlIGlzIGluYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBWQUNNX1NVQlRSRUVfVU5LTk9XTiBpZiBzb21lIHBvcnRpb25zIGFyZSBhY2Nlc3NpYmxlCisgKiAgICAgICAgICAgICAgIG90aGVyIGNvZGVzIG1heSByZXR1cm5lZCBvbiBlcnJvcgogICovCiBpbnQKIGNoZWNrX2FjY2VzcyhuZXRzbm1wX3BkdSAqcGR1KQogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTiAtIHBkdSBiZWluZyBjaGVja2VkICovCiAgICAgc3RydWN0IHZpZXdfcGFyYW1ldGVycyB2aWV3X3Bhcm1zOwogICAgIHZpZXdfcGFybXMucGR1ID0gcGR1OwotICAgIHZpZXdfcGFybXMubmFtZSA9IDA7CisgICAgdmlld19wYXJtcy5uYW1lID0gTlVMTDsKICAgICB2aWV3X3Bhcm1zLm5hbWVsZW4gPSAwOwogICAgIHZpZXdfcGFybXMuZXJyb3Jjb2RlID0gMDsKICAgICB2aWV3X3Bhcm1zLmNoZWNrX3N1YnRyZWUgPSAwOwpAQCAtMTMxMiwxMiArMjEwNywxOSBAQAogICAgIHJldHVybiAxOwogfQogCi0vKiogY2hlY2tzIHRvIHNlZSBpZiBldmVyeXRoaW5nIHdpdGhpbiBhCi0gKiAgZ2l2ZW4gc3VidHJlZSBpcyBlaXRoZXI6IGluIHZpZXcsIG5vdCBpbiB2aWV3LCBvciBwb3NzaWJseSBib3RoLgotICogIElmIHRoZSBlbnRpcmUgc3VidHJlZSBpcyBub3QtaW4tdmlldyB3ZSBjYW4gdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8KLSAqICBza2lwIGNhbGxpbmcgdGhlIHN1Yi1oYW5kbGVycyBlbnRpcmVseS4KLSAqICBAcmV0dXJucyAwIGlmIGVudGlyZSBzdWJ0cmVlIGlzIGFjY2Vzc2libGUsIDUgaWYgbm90IGFuZCA3IGlmCi0gKiAgcG9ydGlvbnMgYXJlIGJvdGguICAxIG9uIGVycm9yIChpbGxlZ2FsIHBkdSB2ZXJzaW9uKS4KKy8qKiBEZXRlcm1pbmVzIGlmIHRoZSBnaXZlbiBQRFUgcmVxdWVzdCBjb3VsZCBwb3RlbnRpYWxseSBhY2Nlc3MKKyAqICAgdGhlIHNwZWNpZmllZCBNSUIgc3VidHJlZQorICoKKyAqIEBwYXJhbSBwZHUgICAgIFBEVSByZXF1ZXN0aW5nIGFjY2VzcworICoKKyAqIEBwYXJhbSBuYW1lICAgIFRoZSBPSUQgdG8gY2hlY2sgYWNjZXNzIGZvci4KKyAqCisgKiBAcGFyYW0gbmFtZWxlbiBOdW1iZXIgb2Ygc3ViLWlkZW50aWZpZXJzIGluIHRoZSBPSUQuCisgKgorICogQHJldHVybiBnaXZlcyBWQUNNX1NVQ0NFU1MgICBpZiB0aGUgZW50aXJlIE1JQiB0cmVlIGlzIGFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgVkFDTV9OT1RJTlZJRVcgaWYgdGhlIGVudGlyZSBNSUIgdHJlZSBpcyBpbmFjY2Vzc2libGUKKyAqICAgICAgICAgICAgICAgVkFDTV9TVUJUUkVFX1VOS05PV04gaWYgc29tZSBwb3J0aW9ucyBhcmUgYWNjZXNzaWJsZQorICogICAgICAgICAgICAgICBvdGhlciBjb2RlcyBtYXkgcmV0dXJuZWQgb24gZXJyb3IKICAqLwogaW50CiBuZXRzbm1wX2FjbV9jaGVja19zdWJ0cmVlKG5ldHNubXBfcGR1ICpwZHUsIG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVsZW4pCkBAIC0xMzQ5LDI0OSArMjE1MSwxMCBAQAogICAgIHJldHVybiAxOwogfQogCi0jZGVmaW5lIFNVQlRSRUVfREVGQVVMVF9DQUNIRV9TSVpFIDgKLSNkZWZpbmUgU1VCVFJFRV9NQVhfQ0FDSEVfU0laRSAgICAgMzIKLWludCBsb29rdXBfY2FjaGVfc2l6ZSA9IDA7IC8qZW5hYmxlZCBsYXRlciBhZnRlciByZWdpc3RyYXRpb25zIGFyZSBsb2FkZWQgKi8KLQotdHlwZWRlZiBzdHJ1Y3QgbG9va3VwX2NhY2hlX3MgewotICAgbmV0c25tcF9zdWJ0cmVlICpuZXh0OwotICAgbmV0c25tcF9zdWJ0cmVlICpwcmV2aW91czsKLX0gbG9va3VwX2NhY2hlOwotCi10eXBlZGVmIHN0cnVjdCBsb29rdXBfY2FjaGVfY29udGV4dF9zIHsKLSAgIGNoYXIgKmNvbnRleHQ7Ci0gICBzdHJ1Y3QgbG9va3VwX2NhY2hlX2NvbnRleHRfcyAqbmV4dDsKLSAgIGludCB0aGVjYWNoZWNvdW50OwotICAgaW50IGN1cnJlbnRwb3M7Ci0gICBsb29rdXBfY2FjaGUgY2FjaGVbU1VCVFJFRV9NQVhfQ0FDSEVfU0laRV07Ci19IGxvb2t1cF9jYWNoZV9jb250ZXh0OwotCi1zdGF0aWMgbG9va3VwX2NhY2hlX2NvbnRleHQgKnRoZWNvbnRleHRjYWNoZSA9IE5VTEw7Ci0KLS8qKiBzZXQgdGhlIGxvb2t1cCBjYWNoZSBzaXplIGZvciBvcHRpbWl6ZWQgYWdlbnQgcmVnaXN0cmF0aW9uIHBlcmZvcm1hbmNlLgotICogQHBhcmFtIG5ld3NpemUgc2V0IHRvIHRoZSBtYXhpbXVtIHNpemUgb2YgYSBjYWNoZSBmb3IgYSBnaXZlbgotICogY29udGV4dC4gIFNldCB0byAwIHRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBvciB0byAtMSB0byBzZXQKLSAqIHRvIHRoZSBkZWZhdWx0IGNhY2hlIHNpemUgKDgpLCBvciB0byBhIG51bWJlciBvZiB5b3VyIGNob3NpbmcuICBUaGUKLSAqIHJvdWdoIGd1aWRlIGlzIHRoYXQgaXQgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZgotICogc2ltdWx0YW5pb3VzIG1hbmFnZXJzIHlvdSBleHBlY3QgdG8gdGFsayB0byB0aGUgYWdlbnQgKE0pIHRpbWVzIDgwJQotICogKG9yIHNvLCBoZSBzYXlzIHJhbmRvbWx5KSB0aGUgYXZlcmFnZSBudW1iZXIgKE4pIG9mIHZhcmJpbmRzIHlvdQotICogZXhwZWN0IHRvIHJlY2VpdmUgaW4gYSBnaXZlbiByZXF1ZXN0IGZvciBhIG1hbmFnZXIuICBpZSwgTSB0aW1lcyBOLgotICogQmlnZ2VyIGRvZXMgTk9UIG5lY2Vzc2FyaWx5IG1lYW4gYmV0dGVyLiAgQ2VydGFpbmx5IDE2IHNob3VsZCBiZSBhbgotICogdXBwZXIgbGltaXQuICAzMiBpcyB0aGUgaGFyZCBjb2RlZCBsaW1pdC4KLSAqLwotdm9pZAotbmV0c25tcF9zZXRfbG9va3VwX2NhY2hlX3NpemUoaW50IG5ld3NpemUpIHsKLSAgICBpZiAobmV3c2l6ZSA8IDApCi0gICAgICAgIGxvb2t1cF9jYWNoZV9zaXplID0gU1VCVFJFRV9ERUZBVUxUX0NBQ0hFX1NJWkU7Ci0gICAgZWxzZSBpZiAobmV3c2l6ZSA8IFNVQlRSRUVfTUFYX0NBQ0hFX1NJWkUpCi0gICAgICAgIGxvb2t1cF9jYWNoZV9zaXplID0gbmV3c2l6ZTsKLSAgICBlbHNlCi0gICAgICAgIGxvb2t1cF9jYWNoZV9zaXplID0gU1VCVFJFRV9NQVhfQ0FDSEVfU0laRTsKLX0KLQotLyoqIHJldHJpZXZlcyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgbG9va3VwIGNhY2hlIHNpemUKLSAqICBAcmV0dXJuIHRoZSBjdXJyZW50IGxvb2t1cCBjYWNoZSBzaXplCi0gKi8KLWludAotbmV0c25tcF9nZXRfbG9va3VwX2NhY2hlX3NpemUodm9pZCkgewotICAgIHJldHVybiBsb29rdXBfY2FjaGVfc2l6ZTsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGxvb2t1cF9jYWNoZV9jb250ZXh0ICoKLWdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb25zdCBjaGFyICpjb250ZXh0KSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKnB0cjsKLSAgICBpZiAoIWNvbnRleHQpCi0gICAgICAgIGNvbnRleHQgPSAiIjsKLQotICAgIGZvcihwdHIgPSB0aGVjb250ZXh0Y2FjaGU7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIGlmIChzdHJjbXAocHRyLT5jb250ZXh0LCBjb250ZXh0KSA9PSAwKQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmICghcHRyKSB7Ci0gICAgICAgIGlmIChuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb250ZXh0KSkgewotICAgICAgICAgICAgcHRyID0gU05NUF9NQUxMT0NfVFlQRURFRihsb29rdXBfY2FjaGVfY29udGV4dCk7Ci0gICAgICAgICAgICBwdHItPm5leHQgPSB0aGVjb250ZXh0Y2FjaGU7Ci0gICAgICAgICAgICBwdHItPmNvbnRleHQgPSBzdHJkdXAoY29udGV4dCk7Ci0gICAgICAgICAgICB0aGVjb250ZXh0Y2FjaGUgPSBwdHI7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcHRyOwotfQotCi1ORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAotbG9va3VwX2NhY2hlX2FkZChjb25zdCBjaGFyICpjb250ZXh0LAotICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKm5leHQsIG5ldHNubXBfc3VidHJlZSAqcHJldmlvdXMpIHsKLSAgICBsb29rdXBfY2FjaGVfY29udGV4dCAqY3B0cjsKLQotICAgIGlmICgoY3B0ciA9IGdldF9jb250ZXh0X2xvb2t1cF9jYWNoZShjb250ZXh0KSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGlmIChjcHRyLT50aGVjYWNoZWNvdW50IDwgbG9va3VwX2NhY2hlX3NpemUpCi0gICAgICAgIGNwdHItPnRoZWNhY2hlY291bnQrKzsKLQotICAgIGNwdHItPmNhY2hlW2NwdHItPmN1cnJlbnRwb3NdLm5leHQgPSBuZXh0OwotICAgIGNwdHItPmNhY2hlW2NwdHItPmN1cnJlbnRwb3NdLnByZXZpb3VzID0gcHJldmlvdXM7Ci0KLSAgICBpZiAoKytjcHRyLT5jdXJyZW50cG9zID49IGxvb2t1cF9jYWNoZV9zaXplKQotICAgICAgICBjcHRyLT5jdXJyZW50cG9zID0gMDsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQKLWxvb2t1cF9jYWNoZV9yZXBsYWNlKGxvb2t1cF9jYWNoZSAqcHRyLAotICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdWJ0cmVlICpuZXh0LCBuZXRzbm1wX3N1YnRyZWUgKnByZXZpb3VzKSB7Ci0KLSAgICBwdHItPm5leHQgPSBuZXh0OwotICAgIHB0ci0+cHJldmlvdXMgPSBwcmV2aW91czsKLX0KLQotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGxvb2t1cF9jYWNoZSAqCi1sb29rdXBfY2FjaGVfZmluZChjb25zdCBjaGFyICpjb250ZXh0LCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgIGludCAqcmV0Y21wKSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7Ci0gICAgbG9va3VwX2NhY2hlICpyZXQgPSBOVUxMOwotICAgIGludCBjbXA7Ci0gICAgaW50IGk7Ci0KLSAgICBpZiAoKGNwdHIgPSBnZXRfY29udGV4dF9sb29rdXBfY2FjaGUoY29udGV4dCkpID09IE5VTEwpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yKGkgPSAwOyBpIDwgY3B0ci0+dGhlY2FjaGVjb3VudCAmJiBpIDwgbG9va3VwX2NhY2hlX3NpemU7IGkrKykgewotICAgICAgICBpZiAoY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2EpCi0gICAgICAgICAgICBjbXAgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsIG5hbWVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHRyLT5jYWNoZVtpXS5wcmV2aW91cy0+c3RhcnRfYSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B0ci0+Y2FjaGVbaV0ucHJldmlvdXMtPnN0YXJ0X2xlbik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNtcCA9IDE7Ci0gICAgICAgIGlmIChjbXAgPj0gMCkgewotICAgICAgICAgICAgKnJldGNtcCA9IGNtcDsKLSAgICAgICAgICAgIHJldCA9ICYoY3B0ci0+Y2FjaGVbaV0pOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiByZXQ7Ci19Ci0KLU5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkCi1pbnZhbGlkYXRlX2xvb2t1cF9jYWNoZShjb25zdCBjaGFyICpjb250ZXh0KSB7Ci0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKmNwdHI7Ci0gICAgaWYgKChjcHRyID0gZ2V0X2NvbnRleHRfbG9va3VwX2NhY2hlKGNvbnRleHQpKSAhPSBOVUxMKSB7Ci0gICAgICAgIGNwdHItPnRoZWNhY2hlY291bnQgPSAwOwotICAgICAgICBjcHRyLT5jdXJyZW50cG9zID0gMDsKLSAgICB9Ci19Ci0KLW5ldHNubXBfc3VidHJlZSAqCi1uZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLAotCQkJICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgbG9va3VwX2NhY2hlICpsb29rdXBfY2FjaGUgPSBOVUxMOwotICAgIG5ldHNubXBfc3VidHJlZSAqbXlwdHIgPSBOVUxMLCAqcHJldmlvdXMgPSBOVUxMOwotICAgIGludCBjbXAgPSAxOwotICAgIHNpemVfdCBsbF9vZmYgPSAwOwotCi0gICAgaWYgKHN1YnRyZWUpIHsKLSAgICAgICAgbXlwdHIgPSBzdWJ0cmVlOwotICAgIH0gZWxzZSB7Ci0JLyogbG9vayB0aHJvdWdoIGV2ZXJ5dGhpbmcgKi8KLSAgICAgICAgaWYgKGxvb2t1cF9jYWNoZV9zaXplKSB7Ci0gICAgICAgICAgICBsb29rdXBfY2FjaGUgPSBsb29rdXBfY2FjaGVfZmluZChjb250ZXh0X25hbWUsIG5hbWUsIGxlbiwgJmNtcCk7Ci0gICAgICAgICAgICBpZiAobG9va3VwX2NhY2hlKSB7Ci0gICAgICAgICAgICAgICAgbXlwdHIgPSBsb29rdXBfY2FjaGUtPm5leHQ7Ci0gICAgICAgICAgICAgICAgcHJldmlvdXMgPSBsb29rdXBfY2FjaGUtPnByZXZpb3VzOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKCFteXB0cikKLSAgICAgICAgICAgICAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHRfbmFtZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBteXB0ciA9IG5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHRfbmFtZSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIHRoaXMgb3B0aW1pemF0aW9uIGNhdXNlcyBhIHNlZ2ZhdWx0IG9uIHNmIGNmIGFscGhhLWxpbnV4MS4KLSAgICAgKiBpZmRlZiBvdXQgdW50aWwgc29tZW9uZSBmaWd1cmVzIG91dCB3aHkgYW5kIGZpeGVzIGl0LiB4eHgtcmtzIDIwMDUxMTE3Ci0gICAgICovCi0jaWZuZGVmIF9fYWxwaGEKLSNkZWZpbmUgV1RFU1RfT1BUSU1JWkFUSU9OIDEKLSNlbmRpZgotI2lmZGVmIFdURVNUX09QVElNSVpBVElPTgotICAgIERFQlVHTVNHVEwoKCJ3dGVzdCIsIm9pZCBpbjogIikpOwotICAgIERFQlVHTVNHT0lEKCgid3Rlc3QiLCBuYW1lLCBsZW4pKTsKLSAgICBERUJVR01TRygoInd0ZXN0IiwiXG4iKSk7Ci0jZW5kaWYKLSAgICBmb3IgKDsgbXlwdHIgIT0gTlVMTDsgcHJldmlvdXMgPSBteXB0ciwgbXlwdHIgPSBteXB0ci0+bmV4dCkgewotI2lmZGVmIFdURVNUX09QVElNSVpBVElPTgotICAgICAgICAvKiBDb21wYXJlIHRoZSBpbmNvbWluZyBvaWQgd2l0aCB0aGUgbGlua2VkIGxpc3QuICBJZiB3ZSBoYXZlCi0gICAgICAgICAgIHJlc3VsdHMgb2YgcHJldmlvdXMgY29tcGFyZXMsIGl0cyBmYXN0ZXIgdG8gbWFrZSBzdXJlIHRoZQotICAgICAgICAgICBsZW5ndGggd2UgZGlmZmVyZWQgaW4gdGhlIGxhc3QgY2hlY2sgaXMgZ3JlYXRlciB0aGFuIHRoZQotICAgICAgICAgICBsZW5ndGggYmV0d2VlbiB0aGlzIHBvaW50ZXIgYW5kIHRoZSBsYXN0IHRoZW4gd2UgZG9uJ3QgbmVlZAotICAgICAgICAgICB0byBhY3R1YWxseSBwZXJmb3JtIGEgY29tcGFyaXNvbiAqLwotICAgICAgICBERUJVR01TR1RMKCgid3Rlc3QiLCJvaWQgY21wOiAiKSk7Ci0gICAgICAgIERFQlVHTVNHT0lEKCgid3Rlc3QiLCBteXB0ci0+c3RhcnRfYSwgbXlwdHItPnN0YXJ0X2xlbikpOwotICAgICAgICBERUJVR01TRygoInd0ZXN0IiwiICAtLS0gb2ZmID0gJWQsIGluIG9mZiA9ICVkIHRlc3QgPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgIG15cHRyLT5vaWRfb2ZmLCBsbF9vZmYsCi0gICAgICAgICAgICAgICAgICAhKGxsX29mZiAmJiBteXB0ci0+b2lkX29mZiAmJgotICAgICAgICAgICAgICAgICAgICBteXB0ci0+b2lkX29mZiA+IGxsX29mZikpKTsKLSAgICAgICAgaWYgKCEobGxfb2ZmICYmIG15cHRyLT5vaWRfb2ZmICYmIG15cHRyLT5vaWRfb2ZmID4gbGxfb2ZmKSAmJgotICAgICAgICAgICAgbmV0c25tcF9vaWRfY29tcGFyZV9sbChuYW1lLCBsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15cHRyLT5zdGFydF9hLCBteXB0ci0+c3RhcnRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbGxfb2ZmKSA8IDApIHsKLSNlbHNlCi0gICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKG5hbWUsIGxlbiwgbXlwdHItPnN0YXJ0X2EsIG15cHRyLT5zdGFydF9sZW4pIDwgMCkgewotI2VuZGlmCi0gICAgICAgICAgICBpZiAobG9va3VwX2NhY2hlX3NpemUgJiYgcHJldmlvdXMgJiYgY21wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGxvb2t1cF9jYWNoZSkgewotICAgICAgICAgICAgICAgICAgICBsb29rdXBfY2FjaGVfcmVwbGFjZShsb29rdXBfY2FjaGUsIG15cHRyLCBwcmV2aW91cyk7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgbG9va3VwX2NhY2hlX2FkZChjb250ZXh0X25hbWUsIG15cHRyLCBwcmV2aW91cyk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHByZXZpb3VzOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBwcmV2aW91czsKLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLW5ldHNubXBfc3VidHJlZV9maW5kX25leHQob2lkICpuYW1lLCBzaXplX3QgbGVuLAotCQkJICBuZXRzbm1wX3N1YnRyZWUgKnN1YnRyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKLXsKLSAgICBuZXRzbm1wX3N1YnRyZWUgKm15cHRyID0gTlVMTDsKLQotICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihuYW1lLCBsZW4sIHN1YnRyZWUsIGNvbnRleHRfbmFtZSk7Ci0KLSAgICBpZiAobXlwdHIgIT0gTlVMTCkgewotICAgICAgICBteXB0ciA9IG15cHRyLT5uZXh0OwotICAgICAgICB3aGlsZSAobXlwdHIgIT0gTlVMTCAmJiAobXlwdHItPnZhcmlhYmxlcyA9PSBOVUxMIHx8IAotCQkJCSBteXB0ci0+dmFyaWFibGVzX2xlbiA9PSAwKSkgewotICAgICAgICAgICAgbXlwdHIgPSBteXB0ci0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gbXlwdHI7Ci0gICAgfSBlbHNlIGlmIChzdWJ0cmVlICE9IE5VTEwgJiYgc25tcF9vaWRfY29tcGFyZShuYW1lLCBsZW4sIAotCQkJCSAgIHN1YnRyZWUtPnN0YXJ0X2EsIHN1YnRyZWUtPnN0YXJ0X2xlbikgPCAwKSB7Ci0gICAgICAgIHJldHVybiBzdWJ0cmVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotbmV0c25tcF9zdWJ0cmVlICoKLW5ldHNubXBfc3VidHJlZV9maW5kKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgbmV0c25tcF9zdWJ0cmVlICpzdWJ0cmVlLCAKLQkJICAgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpCi17Ci0gICAgbmV0c25tcF9zdWJ0cmVlICpteXB0cjsKLQotICAgIG15cHRyID0gbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihuYW1lLCBsZW4sIHN1YnRyZWUsIGNvbnRleHRfbmFtZSk7Ci0gICAgaWYgKG15cHRyICYmIG15cHRyLT5lbmRfYSAmJgotICAgICAgICBzbm1wX29pZF9jb21wYXJlKG5hbWUsIGxlbiwgbXlwdHItPmVuZF9hLCBteXB0ci0+ZW5kX2xlbik8MCkgewotICAgICAgICByZXR1cm4gbXlwdHI7Ci0gICAgfQotCi0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihnZXRfc2Vzc2lvbl9mb3Jfb2lkLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9TRVNTSU9OX0ZPUl9PSUQKIG5ldHNubXBfc2Vzc2lvbiAqCi1nZXRfc2Vzc2lvbl9mb3Jfb2lkKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKQorZ2V0X3Nlc3Npb25fZm9yX29pZChjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkKIHsKICAgICBuZXRzbm1wX3N1YnRyZWUgKm15cHRyOwogCkBAIC0xNjA5LDYgKzIxNzIsNyBAQAogICAgICAgICByZXR1cm4gbXlwdHItPnNlc3Npb247CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX1NFU1NJT05fRk9SX09JRCAqLwogCiB2b2lkCiBzZXR1cF90cmVlKHZvaWQpCkBAIC0xNjY4LDYzICsyMjMyLDYgQEAKIAogfQogCi12b2lkCi1jbGVhcl9zdWJ0cmVlIChuZXRzbm1wX3N1YnRyZWUgKnN1YikgewotCi0gICAgbmV0c25tcF9zdWJ0cmVlICpjOwotICAgIAotICAgIGlmIChzdWIgPT0gTlVMTCkKLQlyZXR1cm47Ci0KLSAgICBmb3IoYyA9IHN1YjsgYzspIHsKLSAgICAgICAgc3ViID0gYzsKLSAgICAgICAgYyA9IGMtPmNoaWxkcmVuOwotICAgICAgICBuZXRzbm1wX3N1YnRyZWVfZnJlZShzdWIpOwotICAgIH0KLQotfQotCi12b2lkCi1jbGVhcl9sb29rdXBfY2FjaGUodm9pZCkgewotCi0gICAgbG9va3VwX2NhY2hlX2NvbnRleHQgKnB0ciA9IE5VTEwsICpuZXh0ID0gTlVMTDsKLQotICAgIHB0ciA9IHRoZWNvbnRleHRjYWNoZTsKLSAgICB3aGlsZSAocHRyKSB7Ci0JbmV4dCA9IHB0ci0+bmV4dDsKLQlTTk1QX0ZSRUUocHRyLT5jb250ZXh0KTsKLQlTTk1QX0ZSRUUocHRyKTsKLQlwdHIgPSBuZXh0OwotICAgIH0KLSAgICB0aGVjb250ZXh0Y2FjaGUgPSBOVUxMOyAvKiAhISEgKi8KLX0KLQotdm9pZAotY2xlYXJfY29udGV4dCh2b2lkKSB7Ci0KLSAgICBzdWJ0cmVlX2NvbnRleHRfY2FjaGUgKnB0ciA9IE5VTEwsICpuZXh0ID0gTlVMTDsKLSAgICBuZXRzbm1wX3N1YnRyZWUgKnQsICp1OwotCi0gICAgREVCVUdNU0dUTCgoImFnZW50X3JlZ2lzdHJ5IiwgImNsZWFyIGNvbnRleHRcbiIpKTsKLQotICAgIHB0ciA9IGdldF90b3BfY29udGV4dF9jYWNoZSgpOyAKLSAgICB3aGlsZSAocHRyKSB7Ci0JbmV4dCA9IHB0ci0+bmV4dDsKLQotCWZvciAodCA9IHB0ci0+Zmlyc3Rfc3VidHJlZTsgdDsgdCA9IHUpIHsKLSAgICAgICAgICAgIHUgPSB0LT5uZXh0OwotCSAgICBjbGVhcl9zdWJ0cmVlKHQpOwotCX0KLQotCVNOTVBfRlJFRShwdHItPmNvbnRleHRfbmFtZSk7Ci0gICAgICAgIFNOTVBfRlJFRShwdHIpOwotCi0JcHRyID0gbmV4dDsKLSAgICB9Ci0gICAgY29udGV4dF9zdWJ0cmVlcyA9IE5VTEw7IC8qICEhISAqLwotICAgIGNsZWFyX2xvb2t1cF9jYWNoZSgpOwotfQotCiBleHRlcm4gdm9pZCAgICAgZHVtcF9pZHhfcmVnaXN0cnkodm9pZCk7CiB2b2lkCiBkdW1wX3JlZ2lzdHJ5KHZvaWQpCkBAIC0xNzc5LDcgKzIyODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBpZiAobXlwdHIyLT5sYWJlbF9hICYmIG15cHRyMi0+bGFiZWxfYVswXSkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChteXB0cjItPmxhYmVsX2EsICJvbGRfYXBpIikgPT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdnAgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteXB0cjItPnJlZ2luZm8tPmhhbmRsZXItPm15dm9pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB2YXJpYWJsZSopbXlwdHIyLT5yZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQ7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXNwcmludF9yZWFsbG9jX29iamlkKCZzLCAmc2wsICZzbF9vLCAxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT5uYW1lLCB2cC0+bmFtZWxlbikpIHsKQEAgLTE4MDEsMTkgKzIzMDgsMjcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChzICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHMpOwotICAgIH0KLSAgICBpZiAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRShlKTsKLSAgICB9Ci0gICAgaWYgKHYgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodik7Ci0gICAgfQorICAgIFNOTVBfRlJFRShzKTsKKyAgICBTTk1QX0ZSRUUoZSk7CisgICAgU05NUF9GUkVFKHYpOwogCiAgICAgZHVtcF9pZHhfcmVnaXN0cnkoKTsKIH0KIAorLyoqICBAfSAqLworLyogRW5kIG9mIE1JQiByZWdpc3RyYXRpb24gY29kZSAqLworCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9zaWduYWwsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NJR05BTAorCisvKiogQGRlZmdyb3VwIGFnZW50X3NpZ25hbHMgUE9TSVggc2lnbmFscyBzdXBwb3J0IGZvciBhZ2VudHMuCisgKiAgICAgUmVnaXN0ZXJpbmcgYW5kIHVucmVnaXN0ZXJpbmcgc2lnbmFsIGhhbmRsZXJzLgorICogICBAaW5ncm91cCBhZ2VudF9yZWdpc3RyeQorICoKKyAqIEB7CisgKi8KKwogaW50ICAgICAgICAgICAgIGV4dGVybmFsX3NpZ25hbF9zY2hlZHVsZWRbTlVNX0VYVEVSTkFMX1NJR1NdOwogdm9pZCAgICAgICAgICAgICgqZXh0ZXJuYWxfc2lnbmFsX2hhbmRsZXJbTlVNX0VYVEVSTkFMX1NJR1NdKSAoaW50KTsKIApAQCAtMTgzOCw2ICsyMzUzLDIwIEBACiAjZW5kaWYKIH0KIAorLyoqIFJlZ2lzdGVycyBhIFBPU0lYIFNpZ25hbCBoYW5kbGVyLgorICogIEltcGxlbWVudHMgdGhlIHNpZ25hbCByZWdpc3RlcmluZyBwcm9jZXNzIGZvciBQT1NJWCBhbmQgbm9uLVBPU0lYCisgKiAgc3lzdGVtcy4gQWxzbywgdW5pZmllcyB0aGUgd2F5IHNpZ25hbHMgd29yay4KKyAqICBOb3RlIHRoYXQgdGhlIHNpZ25hbCBoYW5kbGVyIHNob3VsZCByZWdpc3RlciBpdHNlbGYgYWdhaW4gd2l0aAorICogIHNpZ25hbCgpIGNhbGwgYmVmb3JlIGVuZCBvZiBleGVjdXRpb24gdG8gcHJldmVudCBwb3NzaWJsZSBwcm9ibGVtcy4KKyAqCisgKiAgQHBhcmFtIHNpZyBQT1NJWCBTaWduYWwgSUQgbnVtYmVyLCBhcyBkZWZpbmVkIGluIHNpZ25hbC5oLgorICoKKyAqICBAcGFyYW0gZnVuYyBOZXcgc2lnbmFsIGhhbmRsZXIgZnVuY3Rpb24uCisgKgorICogIEByZXR1cm4gdmFsdWUgaXMgU0lHX1JFR0lTVEVSRURfT0sgZm9yIHN1Y2Nlc3MgYW5kCisgKiAgICAgICAgU0lHX1JFR0lTVFJBVElPTl9GQUlMRUQgaWYgdGhlIHJlZ2lzdHJhdGlvbiBjYW4ndAorICogICAgICAgIGJlIGhhbmRsZWQuCisgKi8KIGludAogcmVnaXN0ZXJfc2lnbmFsKGludCBzaWcsIHZvaWQgKCpmdW5jKSAoaW50KSkKIHsKQEAgLTE4NzEsNiArMjQwMCwxMiBAQAogICAgIHJldHVybiBTSUdfUkVHSVNURVJFRF9PSzsKIH0KIAorLyoqIFVucmVnaXN0ZXJzIGEgUE9TSVggU2lnbmFsIGhhbmRsZXIuCisgKgorICogIEBwYXJhbSBzaWcgUE9TSVggU2lnbmFsIElEIG51bWJlciwgYXMgZGVmaW5lZCBpbiBzaWduYWwuaC4KKyAqCisgKiAgQHJldHVybiB2YWx1ZSBpcyBTSUdfVU5SRUdJU1RFUkVEX09LIGZvciBzdWNjZXNzLCBvciBlcnJvciBjb2RlLgorICovCiBpbnQKIHVucmVnaXN0ZXJfc2lnbmFsKGludCBzaWcpCiB7CkBAIC0xODgyLDMgKzI0MTcsOSBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhV0lOMzIgKi8KIAogLyoqICBAfSAqLworLyogRW5kIG9mIHNpZ25hbHMgc3VwcG9ydCBjb2RlICovCisKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NJR05BTCAqLworCisvKiogIEB9ICovCisKZGlmZiAtLWdpdCBhL2FnZW50L2FnZW50X3N5c09SVGFibGUuYyBiL2FnZW50L2FnZW50X3N5c09SVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjI4MDYwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvYWdlbnRfc3lzT1JUYWJsZS5jCkBAIC0wLDAgKzEsMjM2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgorCit0eXBlZGVmIHN0cnVjdCBkYXRhX25vZGVfcyB7CisgICAgc3RydWN0IHN5c09SVGFibGUgZGF0YTsKKyAgICBzdHJ1Y3QgZGF0YV9ub2RlX3MqIG5leHQ7CisgICAgc3RydWN0IGRhdGFfbm9kZV9zKiBwcmV2OworfSogZGF0YV9ub2RlOworCitzdGF0aWMgZGF0YV9ub2RlIHRhYmxlID0gTlVMTDsKKworc3RhdGljIHZvaWQKK2VyYXNlKGRhdGFfbm9kZSBlbnRyeSkKK3sKKyAgICBlbnRyeS0+ZGF0YS5PUl91cHRpbWUgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJVTlJFR19TWVNPUiAlcFxuIiwgJmVudHJ5LT5kYXRhKSk7CisgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLCBTTk1QRF9DQUxMQkFDS19VTlJFR19TWVNPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICZlbnRyeS0+ZGF0YSk7CisgICAgZnJlZShlbnRyeS0+ZGF0YS5PUl9vaWQpOworICAgIGZyZWUoZW50cnktPmRhdGEuT1JfZGVzY3IpOworICAgIGlmIChlbnRyeS0+bmV4dCA9PSBlbnRyeSkKKyAgICAgICAgdGFibGUgPSBOVUxMOworICAgIGVsc2UgeworICAgICAgICBlbnRyeS0+bmV4dC0+cHJldiA9IGVudHJ5LT5wcmV2OworICAgICAgICBlbnRyeS0+cHJldi0+bmV4dCA9IGVudHJ5LT5uZXh0OworICAgICAgICBpZiAoZW50cnkgPT0gdGFibGUpCisgICAgICAgICAgICB0YWJsZSA9IGVudHJ5LT5uZXh0OworICAgIH0KKyAgICBmcmVlKGVudHJ5KTsKK30KKwordm9pZAorbmV0c25tcF9zeXNPUlRhYmxlX2ZvcmVhY2godm9pZCAoKmYpKGNvbnN0IHN0cnVjdCBzeXNPUlRhYmxlKiwgdm9pZCopLCB2b2lkKiBjKQoreworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgImZvcmVhY2goJXAsICVwKVxuIiwgZiwgYykpOworICAgIGlmKHRhYmxlKSB7CisgICAgICAgIGRhdGFfbm9kZSBydW4gPSB0YWJsZTsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZGF0YV9ub2RlIHRtcCA9IHJ1bjsKKyAgICAgICAgICAgIHJ1biA9IHJ1bi0+bmV4dDsKKyAgICAgICAgICAgIGYoJnRtcC0+ZGF0YSwgYyk7CisgICAgICAgIH0gd2hpbGUodGFibGUgJiYgcnVuICE9IHRhYmxlKTsKKyAgICB9Cit9CisKK2ludAorcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqIG9pZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVzY3IsIG5ldHNubXBfc2Vzc2lvbiAqIHNzKQoreworICAgIGRhdGFfbm9kZSBlbnRyeTsKKworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInJlZ2lzdGVyaW5nOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJhZ2VudC9zeXNPUlRhYmxlIiwgb2lkaW4sIG9pZGxlbikpOworICAgIERFQlVHTVNHKCgiYWdlbnQvc3lzT1JUYWJsZSIsICIsIHNlc3Npb24gJXBcbiIsIHNzKSk7CisKKyAgICBlbnRyeSA9IChkYXRhX25vZGUpY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgZGF0YV9ub2RlX3MpKTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IGVudHJ5XG4iKSk7CisgICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIH0KKworICAgIGVudHJ5LT5kYXRhLk9SX2Rlc2NyID0gc3RyZHVwKGRlc2NyKTsKKyAgICBpZiAoZW50cnktPmRhdGEuT1JfZGVzY3IgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJGYWlsZWQgdG8gYWxsb2NhdGUgbmV3IHN5c09SRGVzY3JcbiIpKTsKKyAgICAgICAgZnJlZShlbnRyeSk7CisgICAgICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIH0KKworICAgIGVudHJ5LT5kYXRhLk9SX29pZCA9IChvaWQgKikgbWFsbG9jKHNpemVvZihvaWQpICogb2lkbGVuKTsKKyAgICBpZiAoZW50cnktPmRhdGEuT1Jfb2lkID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldyBzeXNPUklEXG4iKSk7CisgICAgICAgIGZyZWUoZW50cnktPmRhdGEuT1JfZGVzY3IpOworICAgICAgICBmcmVlKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQ7CisgICAgfQorCisgICAgbWVtY3B5KGVudHJ5LT5kYXRhLk9SX29pZCwgb2lkaW4sIHNpemVvZihvaWQpICogb2lkbGVuKTsKKyAgICBlbnRyeS0+ZGF0YS5PUl9vaWRsZW4gPSBvaWRsZW47CisgICAgZW50cnktPmRhdGEuT1Jfc2VzcyA9IHNzOworCisgICAgaWYodGFibGUpIHsKKyAgICAgICAgZW50cnktPm5leHQgPSB0YWJsZTsKKyAgICAgICAgZW50cnktPnByZXYgPSB0YWJsZS0+cHJldjsKKyAgICAgICAgdGFibGUtPnByZXYtPm5leHQgPSBlbnRyeTsKKyAgICAgICAgdGFibGUtPnByZXYgPSBlbnRyeTsKKyAgICB9IGVsc2UKKyAgICAgICAgdGFibGUgPSBlbnRyeS0+bmV4dCA9IGVudHJ5LT5wcmV2ID0gZW50cnk7CisKKyAgICBlbnRyeS0+ZGF0YS5PUl91cHRpbWUgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKworICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwgJmVudHJ5LT5kYXRhKTsKKworICAgIHJldHVybiBTWVNfT1JUQUJMRV9SRUdJU1RFUkVEX09LOworfQorCitpbnQKK3JlZ2lzdGVyX3N5c09SVGFibGUob2lkICogb2lkaW4sIHNpemVfdCBvaWRsZW4sIGNvbnN0IGNoYXIgKmRlc2NyKQoreworICAgIHJldHVybiByZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkaW4sIG9pZGxlbiwgZGVzY3IsIE5VTEwpOworfQorCitpbnQKK3VucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqIG9pZGluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9pZGxlbiwgbmV0c25tcF9zZXNzaW9uICogc3MpCit7CisgICAgaW50IGFueV91bnJlZ2lzdGVyZWQgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAic3lzT1JUYWJsZSB1bnJlZ2lzdGVyaW5nOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJhZ2VudC9zeXNPUlRhYmxlIiwgb2lkaW4sIG9pZGxlbikpOworICAgIERFQlVHTVNHKCgiYWdlbnQvc3lzT1JUYWJsZSIsICIsIHNlc3Npb24gJXBcbiIsIHNzKSk7CisKKyAgICBpZih0YWJsZSkgeworICAgICAgICBkYXRhX25vZGUgcnVuID0gdGFibGU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGRhdGFfbm9kZSB0bXAgPSBydW47CisgICAgICAgICAgICBydW4gPSBydW4tPm5leHQ7CisgICAgICAgICAgICBpZiAodG1wLT5kYXRhLk9SX3Nlc3MgPT0gc3MgJiYKKyAgICAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKG9pZGluLCBvaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAtPmRhdGEuT1Jfb2lkLCB0bXAtPmRhdGEuT1Jfb2lkbGVuKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgZXJhc2UodG1wKTsKKyAgICAgICAgICAgICAgICBhbnlfdW5yZWdpc3RlcmVkID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSh0YWJsZSAmJiBydW4gIT0gdGFibGUpOworICAgIH0KKworICAgIGlmIChhbnlfdW5yZWdpc3RlcmVkKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInVucmVnaXN0ZXJpbmcgc3VjY2Vzc2Z1bGxcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1VOUkVHSVNURVJFRF9PSzsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsICJ1bnJlZ2lzdGVyaW5nIGZhaWxlZFxuIikpOworICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfTk9fU1VDSF9SRUdJU1RSQVRJT047CisgICAgfQorfQorCisKK2ludAordW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqIG9pZGluLCBzaXplX3Qgb2lkbGVuKQoreworICAgIHJldHVybiB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhvaWRpbiwgb2lkbGVuLCBOVUxMKTsKK30KKworCit2b2lkCit1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKK3sKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsCisgICAgICAgICAgICAgICAgInN5c09SVGFibGUgdW5yZWdpc3RlcmluZyBzZXNzaW9uICVwXG4iLCBzcykpOworCisgICBpZih0YWJsZSkgeworICAgICAgICBkYXRhX25vZGUgcnVuID0gdGFibGU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGRhdGFfbm9kZSB0bXAgPSBydW47CisgICAgICAgICAgICBydW4gPSBydW4tPm5leHQ7CisgICAgICAgICAgICBpZiAoKChzcy0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NVQlNFU1NJT04pICYmCisgICAgICAgICAgICAgICAgIHRtcC0+ZGF0YS5PUl9zZXNzID09IHNzKSB8fAorICAgICAgICAgICAgICAgICghKHNzLT5mbGFncyAmIFNOTVBfRkxBR1NfU1VCU0VTU0lPTikgJiYgdG1wLT5kYXRhLk9SX3Nlc3MgJiYKKyAgICAgICAgICAgICAgICAgdG1wLT5kYXRhLk9SX3Nlc3MtPnN1YnNlc3Npb24gPT0gc3MpKQorICAgICAgICAgICAgICAgIGVyYXNlKHRtcCk7CisgICAgICAgIH0gd2hpbGUodGFibGUgJiYgcnVuICE9IHRhYmxlKTsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiYWdlbnQvc3lzT1JUYWJsZSIsCisgICAgICAgICAgICAgICAgInN5c09SVGFibGUgdW5yZWdpc3RlcmluZyBzZXNzaW9uICVwIGRvbmVcbiIsIHNzKSk7Cit9CisKK3N0YXRpYyBpbnQKK3JlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKQoreworICAgIHN0cnVjdCBzeXNPUlRhYmxlICpwYXJtcyA9IChzdHJ1Y3Qgc3lzT1JUYWJsZSAqKSBzZXJ2ZXJhcmc7CisKKyAgICByZXR1cm4gcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBhcm1zLT5PUl9vaWQsIHBhcm1zLT5PUl9vaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1JfZGVzY3IsIHBhcm1zLT5PUl9zZXNzKTsKK30KKworc3RhdGljIGludAordW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24gPSAobmV0c25tcF9zZXNzaW9uICopIHNlcnZlcmFyZzsKKworICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKHNlc3Npb24pOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK3VucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKK3sKKyAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcGFybXMgPSAoc3RydWN0IHN5c09SVGFibGUgKikgc2VydmVyYXJnOworCisgICAgcmV0dXJuIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBhcm1zLT5PUl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9vaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcm1zLT5PUl9zZXNzKTsKK30KKwordm9pZAoraW5pdF9hZ2VudF9zeXNPUlRhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoImFnZW50L3N5c09SVGFibGUiLCAiaW5pdF9hZ2VudF9zeXNPUlRhYmxlXG4iKSk7CisKKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfUkVHX1NZU09SLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2ssIE5VTEwpOworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVucmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2ssIE5VTEwpOworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUl9TRVNTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrLCBOVUxMKTsKK30KKwordm9pZAorc2h1dGRvd25fYWdlbnRfc3lzT1JUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJhZ2VudC9zeXNPUlRhYmxlIiwgInNodXRkb3duX3N5c09SVGFibGVcbiIpKTsKKyAgICB3aGlsZSh0YWJsZSkKKyAgICAgICAgZXJhc2UodGFibGUpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvYWdlbnRfdHJhcC5jIGIvYWdlbnQvYWdlbnRfdHJhcC5jCmluZGV4IDEzNTljOTAuLjA4MGI4YmYgMTAwNjQ0Ci0tLSBhL2FnZW50L2FnZW50X3RyYXAuYworKysgYi9hZ2VudC9hZ2VudF90cmFwLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTM0LDExICszNSw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00OSw4ICs0Niw2IEBACiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbGlmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgogI2VuZGlmCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC01OCw2ICs1Myw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KQEAgLTY5LDYgKzY1LDE0IEBACiAjaW5jbHVkZSAiYWdlbnR4L3Byb3RvY29sLmgiCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X3RyYXBfYWxsLCBsaWJuZXRzbm1wYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0cmFwX3ZhcnNfd2l0aF9jb250ZXh0LCBhZ2VudF90cmFwX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZW1vdmVfdHJhcF9zZXNzaW9uLCBhZ2VudF90cmFwX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNlbmRfdjN0cmFwLG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNlbmRfdHJhcF9wZHUsbmV0c25tcF91bnVzZWQpCisKIHN0cnVjdCB0cmFwX3NpbmsgewogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2VzcDsKICAgICBzdHJ1Y3QgdHJhcF9zaW5rICpuZXh0OwpAQCAtNzgsMzYgKzgyLDI4IEBACiAKIHN0cnVjdCB0cmFwX3NpbmsgKnNpbmtzID0gTlVMTDsKIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKLQotb2lkICAgICAgICAgICAgIG9iamlkX2VudGVycHJpc2V0cmFwW10gPSB7IE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiB9Owotb2lkICAgICAgICAgICAgIHRyYXBfdmVyc2lvbl9pZFtdID0geyBORVRTTk1QX1NZU1RFTV9NSUIgfTsKLWludCAgICAgICAgICAgICBlbnRlcnByaXNldHJhcF9sZW47Ci1pbnQgICAgICAgICAgICAgdHJhcF92ZXJzaW9uX2lkX2xlbjsKK2NvbnN0IG9pZCAgICAgICBvYmppZF9lbnRlcnByaXNldHJhcFtdID0geyBORVRTTk1QX05PVElGSUNBVElPTl9NSUIgfTsKK2NvbnN0IG9pZCAgICAgICB0cmFwX3ZlcnNpb25faWRbXSA9IHsgTkVUU05NUF9TWVNURU1fTUlCIH07Citjb25zdCBpbnQgICAgICAgZW50ZXJwcmlzZXRyYXBfbGVuID0gT0lEX0xFTkdUSChvYmppZF9lbnRlcnByaXNldHJhcCk7Citjb25zdCBpbnQgICAgICAgdHJhcF92ZXJzaW9uX2lkX2xlbiA9IE9JRF9MRU5HVEgodHJhcF92ZXJzaW9uX2lkKTsKIAogI2RlZmluZSBTTk1QVjJfVFJBUFNfUFJFRklYCVNOTVBfT0lEX1NOTVBNT0RVTEVTLDEsMSw1Ci1vaWQgICAgICAgICAgICAgdHJhcF9wcmVmaXhbXSAgICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCB9Owotb2lkICAgICAgICAgICAgIGNvbGRfc3RhcnRfb2lkW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDEgfTsgIC8qIFNOTVB2Mi1NSUIgKi8KLW9pZCAgICAgICAgICAgICB3YXJtX3N0YXJ0X29pZFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAyIH07ICAvKiBTTk1QdjItTUlCICovCi1vaWQgICAgICAgICAgICAgbGlua19kb3duX29pZFtdICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgMyB9OyAgLyogSUYtTUlCICovCi1vaWQgICAgICAgICAgICAgbGlua191cF9vaWRbXSAgICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgNCB9OyAgLyogSUYtTUlCICovCi1vaWQgICAgICAgICAgICAgYXV0aF9mYWlsX29pZFtdICA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgNSB9OyAgLyogU05NUHYyLU1JQiAqLwotb2lkICAgICAgICAgICAgIGVncF94eHhfb2lkW10gICAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDk5IH07IC8qID8/PyAqLworY29uc3Qgb2lkICAgICAgIHRyYXBfcHJlZml4W10gICAgPSB7IFNOTVBWMl9UUkFQU19QUkVGSVggfTsKK2NvbnN0IG9pZCAgICAgICBjb2xkX3N0YXJ0X29pZFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAxIH07ICAvKiBTTk1QdjItTUlCICovCiAKICNkZWZpbmUgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgJU05NUF9PSURfU05NUE1PRFVMRVMsMSwxLDQKLW9pZCAgICAgICAgICAgICBzbm1wdHJhcF9vaWRbXSA9IHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDEsIDAgfTsKLW9pZCAgICAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkW10gPQotICAgIHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDMsIDAgfTsKLW9pZCAgICAgICAgICAgICBzeXN1cHRpbWVfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDEsIDMsIDAgfTsKLXNpemVfdCAgICAgICAgICBzbm1wdHJhcF9vaWRfbGVuOwotc2l6ZV90ICAgICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuOwotc2l6ZV90ICAgICAgICAgIHN5c3VwdGltZV9vaWRfbGVuOworY29uc3Qgb2lkICAgICAgIHNubXB0cmFwX29pZFtdID0geyBTTk1QVjJfVFJBUF9PQkpTX1BSRUZJWCwgMSwgMCB9OworY29uc3Qgb2lkICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRbXSA9IHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDMsIDAgfTsKK2NvbnN0IG9pZCAgICAgICBzeXN1cHRpbWVfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDEsIDMsIDAgfTsKK2NvbnN0IHNpemVfdCAgICBzbm1wdHJhcF9vaWRfbGVuID0gT0lEX0xFTkdUSChzbm1wdHJhcF9vaWQpOworY29uc3Qgc2l6ZV90ICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuID0gT0lEX0xFTkdUSChzbm1wdHJhcGVudGVycHJpc2Vfb2lkKTsKK2NvbnN0IHNpemVfdCAgICBzeXN1cHRpbWVfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc3lzdXB0aW1lX29pZCk7CiAKICNkZWZpbmUgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgJU05NUF9PSURfU05NUE1PRFVMRVMsMTgsMQotb2lkICAgICAgICAgICAgIGFnZW50YWRkcl9vaWRbXSA9IHsgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgsIDMsIDAgfTsKLXNpemVfdCAgICAgICAgICBhZ2VudGFkZHJfb2lkX2xlbjsKLW9pZCAgICAgICAgICAgICBjb21tdW5pdHlfb2lkW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCA0LCAwIH07Ci1zaXplX3QgICAgICAgICAgY29tbXVuaXR5X29pZF9sZW47Citjb25zdCBvaWQgICAgICAgYWdlbnRhZGRyX29pZFtdID0geyBTTk1QVjJfQ09NTV9PQkpTX1BSRUZJWCwgMywgMCB9OworY29uc3Qgc2l6ZV90ICAgIGFnZW50YWRkcl9vaWRfbGVuID0gT0lEX0xFTkdUSChhZ2VudGFkZHJfb2lkKTsKK2NvbnN0IG9pZCAgICAgICBjb21tdW5pdHlfb2lkW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCA0LCAwIH07Citjb25zdCBzaXplX3QgICAgY29tbXVuaXR5X29pZF9sZW4gPSBPSURfTEVOR1RIKGNvbW11bml0eV9vaWQpOwogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQogY2hhciAgICAgICAgICAgKnNubXBfdHJhcGNvbW11bml0eSA9IE5VTEw7CiAjZW5kaWYKQEAgLTE0MSwxOCArMTM3LDEyIEBACiB2b2lkCiBpbml0X3RyYXBzKHZvaWQpCiB7Ci0gICAgZW50ZXJwcmlzZXRyYXBfbGVuICA9IE9JRF9MRU5HVEgob2JqaWRfZW50ZXJwcmlzZXRyYXApOwotICAgIHRyYXBfdmVyc2lvbl9pZF9sZW4gPSBPSURfTEVOR1RIKHRyYXBfdmVyc2lvbl9pZCk7Ci0gICAgc25tcHRyYXBfb2lkX2xlbiAgICA9IE9JRF9MRU5HVEgoc25tcHRyYXBfb2lkKTsKLSAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc25tcHRyYXBlbnRlcnByaXNlX29pZCk7Ci0gICAgc3lzdXB0aW1lX29pZF9sZW4gICA9IE9JRF9MRU5HVEgoc3lzdXB0aW1lX29pZCk7Ci0gICAgYWdlbnRhZGRyX29pZF9sZW4gICA9IE9JRF9MRU5HVEgoYWdlbnRhZGRyX29pZCk7Ci0gICAgY29tbXVuaXR5X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoY29tbXVuaXR5X29pZCk7CiB9CiAKIHN0YXRpYyB2b2lkCiBmcmVlX3RyYXBfc2Vzc2lvbihzdHJ1Y3QgdHJhcF9zaW5rICpzcCkKIHsKKyAgICBERUJVR01TR1RMKCgidHJhcCIsICJmcmVlaW5nIGNhbGxiYWNrIHRyYXAgc2Vzc2lvbiAoJXAsICVwKVxuIiwgc3AsIHNwLT5zZXNwKSk7CiAgICAgc25tcF9jbG9zZShzcC0+c2VzcCk7CiAgICAgZnJlZShzcCk7CiB9CkBAIC0xNjgsNyArMTU4LDcgQEAKICAgICAgICAgICogc29tZXRoaW5nIGVsc2Ugd2FudHMgdG8gaGFuZGxlIG5vdGlmaWNhdGlvbiByZWdpc3RyYXRpb25zIAogICAgICAgICAgKi8KICAgICAgICAgc3RydWN0IGFnZW50X2FkZF90cmFwX2FyZ3MgYXJnczsKLSAgICAgICAgREVCVUdNU0dUTCgoInRyYXAiLCAiYWRkaW5nIGNhbGxiYWNrIHRyYXAgc2lua1xuIikpOworICAgICAgICBERUJVR01TR1RMKCgidHJhcCIsICJhZGRpbmcgY2FsbGJhY2sgdHJhcCBzaW5rICglcClcbiIsIHNzKSk7CiAgICAgICAgIGFyZ3Muc3MgPSBzczsKICAgICAgICAgYXJncy5jb25maXJtID0gY29uZmlybTsKICAgICAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLApAQCAtMTk0LDExICsxODQsMTMgQEAKICAgICByZXR1cm4gMTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTU9WRV9UUkFQX1NFU1NJT04KIGludAogcmVtb3ZlX3RyYXBfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKIHsKLSAgICBzdHJ1Y3QgdHJhcF9zaW5rICpzcCA9IHNpbmtzLCAqcHJldiA9IDA7CisgICAgc3RydWN0IHRyYXBfc2luayAqc3AgPSBzaW5rcywgKnByZXYgPSBOVUxMOwogCisgICAgREVCVUdNU0dUTCgoInRyYXAiLCAicmVtb3ZpbmcgdHJhcCBzZXNzaW9uc1xuIikpOwogICAgIHdoaWxlIChzcCkgewogICAgICAgICBpZiAoc3AtPnNlc3AgPT0gc3MpIHsKICAgICAgICAgICAgIGlmIChwcmV2KSB7CkBAIC0yMTYsNiArMjA4LDcgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBmcmVlX3RyYXBfc2Vzc2lvbihzcCk7ICAKICAgICAgICAgICAgICAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRyYXAiLCAicmVtb3ZpbmcgdHJhcCBzZXNzaW9uICglcCwgJXApXG4iLCBzcCwgc3AtPnNlc3ApKTsKICAgICAgICAgICAgIGZyZWUoc3ApOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KQEAgLTIyNCw2ICsyMTcsNyBAQAogICAgIH0KICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFTU9WRV9UUkFQX1NFU1NJT04gKi8KIAogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQogc3RhdGljIGludApAQCAtMzE4LDYgKzMxMiw3IEBACiBzbm1wZF9mcmVlX3RyYXBzaW5rcyh2b2lkKQogewogICAgIHN0cnVjdCB0cmFwX3NpbmsgKnNwID0gc2lua3M7CisgICAgREVCVUdNU0dUTCgoInRyYXAiLCAiZnJlZWluZyB0cmFwIHNlc3Npb25zXG4iKSk7CiAgICAgd2hpbGUgKHNwKSB7CiAgICAgICAgIHNpbmtzID0gc2lua3MtPm5leHQ7CiAgICAgICAgIGZyZWVfdHJhcF9zZXNzaW9uKHNwKTsKQEAgLTMzOCw3ICszMzMsNiBAQAogICAgIG5ldHNubXBfcGR1ICAgICAgICAgICAqdGVtcGxhdGVfdjFwZHU7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpmaXJzdF92YiwgKnZibGlzdDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcjsKLSAgICBzaXplX3QgICAgICAgICAgICAgICAgIGxlbjsKIAogICAgIC8qCiAgICAgICogTWFrZSBhIGNvcHkgb2YgdGhlIHYyIFRyYXAgUERVCkBAIC00MTgsOSArNDEyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuKTsKICAgICAgICAgaWYgKHZhcikgewotICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UgPQotICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKHZhci0+dmFsLm9iamlkLCB2YXItPnZhbF9sZW4pOwogICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2VfbGVuZ3RoID0gdmFyLT52YWxfbGVuL3NpemVvZihvaWQpOworICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UgPQorICAgICAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHZhci0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBsYXRlX3YxcGR1LT5lbnRlcnByaXNlX2xlbmd0aCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZSAgICAgICAgPSBOVUxMOwogICAgICAgICAgICAgdGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2VfbGVuZ3RoID0gMDsJCS8qIFhYWCA/Pz8gKi8KQEAgLTQzMCw3ICs0MjUsNyBAQAogICAgICAgICAgKiBGb3IgZW50ZXJwcmlzZS1zcGVjaWZpYyB0cmFwcywgc3BsaXQgdGhlIHNubXBUcmFwT0lEIHZhbHVlCiAgICAgICAgICAqICAgaW50byBlbnRlcnByaXNlIGFuZCBzcGVjaWZpYyB0cmFwCiAgICAgICAgICAqLwotICAgICAgICBsZW4gPSB2Ymxpc3QtPnZhbF9sZW4gLyBzaXplb2Yob2lkKTsKKyAgICAgICAgc2l6ZV90IGxlbiA9IHZibGlzdC0+dmFsX2xlbiAvIHNpemVvZihvaWQpOwogICAgICAgICBpZiAoIGxlbiA8PSAyICkgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCiAgICAgICAgICAgICAgICAgICAgICAic2VuZF90cmFwOiB2MiB0cmFwT0lEIHRvbyBzaG9ydCAoJWQpXG4iLCAoaW50KWxlbik7CkBAIC00NDQsNyArNDM5LDcgQEAKICAgICAgICAgICAgIGxlbi0tOwogICAgICAgICBTTk1QX0ZSRUUodGVtcGxhdGVfdjFwZHUtPmVudGVycHJpc2UpOwogICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZSA9Ci0gICAgICAgICAgICBuZXRzbm1wX21lbWR1cCh2Ymxpc3QtPnZhbC5vYmppZCwgbGVuKnNpemVvZihvaWQpKTsKKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHZibGlzdC0+dmFsLm9iamlkLCBsZW4pOwogICAgICAgICB0ZW1wbGF0ZV92MXBkdS0+ZW50ZXJwcmlzZV9sZW5ndGggPSBsZW47CiAgICAgfQogICAgIHZhciA9IGZpbmRfdmFyYmluZF9pbl9saXN0KCB2Ymxpc3QsIGFnZW50YWRkcl9vaWQsCkBAIC02MjUsOSArNjIwLDkgQEAKICAqLwogaW50CiBuZXRzbm1wX3NlbmRfdHJhcHMoaW50IHRyYXAsIGludCBzcGVjaWZpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBlbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpCiB7CiAgICAgbmV0c25tcF9wZHUgICAgICAgICAgICp0ZW1wbGF0ZV92MXBkdTsKICAgICBuZXRzbm1wX3BkdSAgICAgICAgICAgKnRlbXBsYXRlX3YycGR1OwpAQCAtNjM3LDYgKzYzMiw4IEBACiAgICAgaW5fYWRkcl90ICAgICAgICAgICAgICpwZHVfaW5fYWRkcl90OwogICAgIHVfbG9uZyAgICAgICAgICAgICAgICAgdXB0aW1lOwogICAgIHN0cnVjdCB0cmFwX3NpbmsgKnNpbms7CisgICAgY29uc3QgY2hhciAgICAgICAgICAgICp2MXRyYXBhZGRyZXNzOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmVzID0gMDsKIAogICAgIERFQlVHTVNHVEwoKCAidHJhcCIsICJzZW5kX3RyYXAgJWQgJWQgIiwgdHJhcCwgc3BlY2lmaWMpKTsKICAgICBERUJVR01TR09JRCgoInRyYXAiLCBlbnRlcnByaXNlLCBlbnRlcnByaXNlX2xlbmd0aCkpOwpAQCAtNzE4LDcgKzcxNSw3IEBACiAgICAgICAgICAgICAgICAgIXNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICYodGVtcGxhdGVfdjJwZHUtPnZhcmlhYmxlcyksCiAgICAgICAgICAgICAgICAgICAgICBzbm1wdHJhcGVudGVycHJpc2Vfb2lkLCBzbm1wdHJhcGVudGVycHJpc2Vfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQkpFQ1RfSUQsCi0gICAgICAgICAgICAgICAgICAgICAoY2hhciopZW50ZXJwcmlzZSwgZW50ZXJwcmlzZV9sZW5ndGgqc2l6ZW9mKG9pZCkpKSB7CisgICAgICAgICAgICAgICAgICAgICBlbnRlcnByaXNlLCBlbnRlcnByaXNlX2xlbmd0aCpzaXplb2Yob2lkKSkpIHsKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKICAgICAgICAgICAgICAgICAgICAgICJzZW5kX3RyYXA6IGZhaWxlZCB0byBhZGQgc25tcEVudGVycHJpc2UgdG8gdjIgdHJhcFxuIik7CiAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdSh0ZW1wbGF0ZV92MnBkdSk7CkBAIC03OTAsOSArNzg3LDI5IEBACiAgICAgICogRW5zdXJlIHRoYXQgdGhlIHYxIHRyYXAgUERVIGluY2x1ZGVzIHRoZSBsb2NhbCBJUCBhZGRyZXNzCiAgICAgICovCiAgICAgICAgcGR1X2luX2FkZHJfdCA9IChpbl9hZGRyX3QgKikgdGVtcGxhdGVfdjFwZHUtPmFnZW50X2FkZHI7Ci0gICAgICAqcGR1X2luX2FkZHJfdCA9IGdldF9teWFkZHIoKTsKKyAgICAgICB2MXRyYXBhZGRyZXNzID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1RSQVBfQUREUik7CisgICAgICAgaWYgKHYxdHJhcGFkZHJlc3MgIT0gTlVMTCkgeworICAgICAgICAgICAvKiAidjF0cmFwYWRkcmVzcyIgd2FzIHNwZWNpZmllZCBpbiBjb25maWcsIHRyeSB0byByZXNvbHZlIGl0ICovCisgICAgICAgICAgIHJlcyA9IG5ldHNubXBfZ2V0aG9zdGJ5bmFtZV92NCh2MXRyYXBhZGRyZXNzLCBwZHVfaW5fYWRkcl90KTsKKyAgICAgICB9CisgICAgICAgaWYgKHYxdHJhcGFkZHJlc3MgPT0gTlVMTCB8fCByZXMgPCAwKSB7CisgICAgICAgICAgIC8qICJ2MXRyYXBhZGRyZXNzIiB3YXMgbm90IHNwZWNpZmllZCBpbiBjb25maWcgb3IgdGhlIHJlc29sdXRpb24gZmFpbGVkLAorICAgICAgICAgICAgKiB0cnkgYW55IGxvY2FsIGFkZHJlc3MgKi8KKyAgICAgICAgICAgKnBkdV9pbl9hZGRyX3QgPSBnZXRfbXlhZGRyKCk7CisgICAgICAgfQorCiAgICAgfQogCisgICAgaWYgKHRlbXBsYXRlX3YycGR1KSB7CisJLyogQSBjb250ZXh0IG5hbWUgd2FzIHByb3ZpZGVkLCBzbyBjb3B5IGl0IGFuZCBpdHMgbGVuZ3RoIHRvIHRoZSB2MiBwZHUKKwkgKiB0ZW1wbGF0ZS4gKi8KKwlpZiAoY29udGV4dCAhPSBOVUxMKQorCXsKKwkJdGVtcGxhdGVfdjJwZHUtPmNvbnRleHROYW1lICAgID0gc3RyZHVwKGNvbnRleHQpOworCQl0ZW1wbGF0ZV92MnBkdS0+Y29udGV4dE5hbWVMZW4gPSBzdHJsZW4oY29udGV4dCk7CisJfQorICAgIH0KIAogICAgIC8qCiAgICAgICogIE5vdyBsb29wIHRocm91Z2ggdGhlIGxpc3Qgb2YgdHJhcCBzaW5rcwpAQCAtODMwLDcgKzg0Nyw3IEBACiB2b2lkCiBzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzKGludCB0cmFwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3BlY2lmaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzKQogewogICAgIG5ldHNubXBfc2VuZF90cmFwcyh0cmFwLCBzcGVjaWZpYywKQEAgLTg4Nyw5ICs5MDQsNiBAQAogewogICAgIG5ldHNubXBfcGR1ICAgICpwZHU7CiAgICAgaW50ICAgICAgICAgICAgcmVzdWx0OwotICAgIGNoYXIgICAgICAgICAgIHRtcFtTUFJJTlRfTUFYX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgbGVuOwotCiAKICAgICBpZiAoIXNlc3MgfHwgIXRlbXBsYXRlX3BkdSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTIxLDcgKzkzNSw5IEBACiAgICAgICAgIGlmICgoc2Vzcy0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMykgJiYKICAgICAgICAgICAgICAgICAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1RSQVAyKSAmJgogICAgICAgICAgICAgICAgIChzZXNzLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApKSB7Ci0gICAgICAgICAgICBsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKHRtcCwgc2l6ZW9mKHRtcCkpOworICAgICAgICAgICAgdV9jaGFyICAgICAgICAgIHRtcFtTUFJJTlRfTUFYX0xFTl07CisKKyAgICAgICAgICAgIGludCBsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKHRtcCwgc2l6ZW9mKHRtcCkpOwogICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAodG1wLCBsZW4pOwogICAgICAgICAgICAgcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuID0gbGVuOwogICAgICAgICB9CkBAIC05NDksNiArOTY1LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh0cmFwX3ZlcnNpb25faWQpLCB2YXJzKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RSQVBfVkFSU19XSVRIX0NPTlRFWFQKKy8qIFNlbmQgYSB0cmFwIHVuZGVyIGEgY29udGV4dCAqLwordm9pZCBzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQoaW50IHRyYXAsIGludCBzcGVjaWZpYywgCisgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgY29uc3QgY2hhciAqY29udGV4dCkKK3sKKyAgICBpZiAodHJhcCA9PSBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDKQorICAgICAgICBuZXRzbm1wX3NlbmRfdHJhcHModHJhcCwgc3BlY2lmaWMsIG9iamlkX2VudGVycHJpc2V0cmFwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgob2JqaWRfZW50ZXJwcmlzZXRyYXApLCB2YXJzLAorCQkJCQkJCQkgIGNvbnRleHQsIDApOworICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF9zZW5kX3RyYXBzKHRyYXAsIHNwZWNpZmljLCB0cmFwX3ZlcnNpb25faWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh0cmFwX3ZlcnNpb25faWQpLCB2YXJzLCAKKwkJCQkJCQkJICBjb250ZXh0LCAwKTsKKyAgICAJCit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UUkFQX1ZBUlNfV0lUSF9DT05URVhUICovCisKIC8qKgogICogU2VuZHMgYW4gU05NUHYxIHRyYXAgKG9yIHRoZSBTTk1QdjIgZXF1aXZhbGVudCkgdG8gdGhlIGxpc3Qgb2YgIAogICogY29uZmlndXJlZCB0cmFwIGRlc3RpbmF0aW9ucyAob3IgInNpbmtzIiksIHVzaW5nIHRoZSBwcm92aWRlZCAKQEAgLTEwMDcsMTEgKzEwNDAsMzQgQEAKICAgICBzZW5kX3RyYXBfdmFycygtMSwgLTEsIHZhcnMpOwogfQogCisvKioKKyAqIFNpbWlsYXIgdG8gc2VuZF92MnRyYXAoKSwgd2l0aCB0aGUgYWRkZWQgYWJpbGl0eSB0byBzcGVjaWZ5IGEgY29udGV4dC4gIElmCisgKiB0aGUgbGFzdCBwYXJhbWV0ZXIgaXMgTlVMTCwgdGhlbiB0aGlzIGNhbGwgaXMgZXF1aXZhbGVudCB0byBzZW5kX3YydHJhcCgpLgorICoKKyAqIEBwYXJhbSB2YXJzIGlzIHVzZWQgdG8gc3VwcGx5IHRoZSBsaXN0IG9mIHZhcmlhYmxlIGJpbmRpbmdzIGZvciB0aGUgdHJhcC4KKyAqIAorICogQHBhcmFtIGNvbnRleHQgaXMgdXNlZCB0byBzcGVjaWZ5IHRoZSBjb250ZXh0IG9mIHRoZSB0cmFwLgorICoKKyAqIEByZXR1cm4gdm9pZAorICoKKyAqIEBzZWUgc2VuZF92MnRyYXAKKyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVjNUUkFQCit2b2lkIHNlbmRfdjN0cmFwKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgY29uc3QgY2hhciAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX3NlbmRfdHJhcHMoLTEsIC0xLCAKKyAgICAgICAgICAgICAgICAgICAgICAgdHJhcF92ZXJzaW9uX2lkLCBPSURfTEVOR1RIKHRyYXBfdmVyc2lvbl9pZCksCisgICAgICAgICAgICAgICAgICAgICAgIHZhcnMsIGNvbnRleHQsIDApOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0VORF9WM1RSQVAgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVFJBUF9QRFUKIHZvaWQKIHNlbmRfdHJhcF9wZHUobmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBzZW5kX3RyYXBfdmFycygtMSwgLTEsIHBkdS0+dmFyaWFibGVzKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFTkRfVFJBUF9QRFUgKi8KIAogCiAKQEAgLTEwNzMsNyArMTEyOSw2IEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNpbmsoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKICAgICBjaGFyICAgICAgICAgICAqc3AsICpjcCwgKnBwID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAgKnN0OwogCkBAIC0xMDg2LDkgKzExNDEsNyBAQAogICAgIGlmIChwcCkKIAljb25maWdfcHdhcm4oIlRoZSBzZXBhcmF0ZSBwb3J0IGFyZ3VtZW50IHRvIHRyYXBzaW5rIGlzIGRlcHJlY2F0ZWQiKTsKICAgICBpZiAoY3JlYXRlX3YxX3RyYXBfc2Vzc2lvbihzcCwgcHAsIGNwID8gY3AgOiBzbm1wX3RyYXBjb21tdW5pdHkpID09IDApIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgImNhbm5vdCBjcmVhdGUgdHJhcHNpbms6ICVzIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiY2Fubm90IGNyZWF0ZSB0cmFwc2luazogJXMiLCBjcHRyKTsKICAgICB9CiB9CiAjZW5kaWYKQEAgLTEwOTcsOSArMTE1MCw3IEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdHJhcDJzaW5rKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKLSAgICBjaGFyICAgICAgICAgICAqc3AsICpjcCwgKnBwID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAgKnN0OworICAgIGNoYXIgICAgICAgICAgICpzdCwgKnNwLCAqY3AsICpwcCA9IE5VTEw7CiAKICAgICBpZiAoIXNubXBfdHJhcGNvbW11bml0eSkKICAgICAgICAgc25tcF90cmFwY29tbXVuaXR5ID0gc3RyZHVwKCJwdWJsaWMiKTsKQEAgLTExMTAsMTggKzExNjEsMTQgQEAKICAgICBpZiAocHApCiAJY29uZmlnX3B3YXJuKCJUaGUgc2VwYXJhdGUgcG9ydCBhcmd1bWVudCB0byB0cmFwc2luazIgaXMgZGVwcmVjYXRlZCIpOwogICAgIGlmIChjcmVhdGVfdjJfdHJhcF9zZXNzaW9uKHNwLCBwcCwgY3AgPyBjcCA6IHNubXBfdHJhcGNvbW11bml0eSkgPT0gMCkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiY2Fubm90IGNyZWF0ZSB0cmFwMnNpbms6ICVzIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiY2Fubm90IGNyZWF0ZSB0cmFwMnNpbms6ICVzIiwgY3B0cik7CiAgICAgfQogfQogCiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfaW5mb3Jtc2luayhjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0gICAgY2hhciAgICAgICAgICAgKnNwLCAqY3AsICpwcCA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgICpzdDsKKyAgICBjaGFyICAgICAgICAgICAqc3QsICpzcCwgKmNwLCAqcHAgPSBOVUxMOwogCiAgICAgaWYgKCFzbm1wX3RyYXBjb21tdW5pdHkpCiAgICAgICAgIHNubXBfdHJhcGNvbW11bml0eSA9IHN0cmR1cCgicHVibGljIik7CkBAIC0xMTMyLDkgKzExNzksNyBAQAogICAgIGlmIChwcCkKIAljb25maWdfcHdhcm4oIlRoZSBzZXBhcmF0ZSBwb3J0IGFyZ3VtZW50IHRvIGluZm9ybXNpbmsgaXMgZGVwcmVjYXRlZCIpOwogICAgIGlmIChjcmVhdGVfdjJfaW5mb3JtX3Nlc3Npb24oc3AsIHBwLCBjcCA/IGNwIDogc25tcF90cmFwY29tbXVuaXR5KSA9PSAwKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJjYW5ub3QgY3JlYXRlIGluZm9ybXNpbms6ICVzIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKS0xXSA9ICdcMCc7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiY2Fubm90IGNyZWF0ZSBpbmZvcm1zaW5rOiAlcyIsIGNwdHIpOwogICAgIH0KIH0KICNlbmRpZgpAQCAtMTE2OSw5ICsxMjE0LDEwIEBACiB2b2lkCiBzbm1wZF9wYXJzZV9jb25maWdfdHJhcHNlc3MoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAqYXJndltNQVhfQVJHU10sICpjcCA9IGNwdHIsIHRtcFtTUFJJTlRfTUFYX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgIGFyZ247CisgICAgY2hhciAgICAgICAgICAgKmFyZ3ZbTUFYX0FSR1NdLCAqY3AgPSBjcHRyOworICAgIGludCAgICAgICAgICAgICBhcmduLCByYzsKICAgICBuZXRzbm1wX3Nlc3Npb24gc2Vzc2lvbiwgKnNzOworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQ7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKIAogICAgIC8qCkBAIC0xMTg0LDE1ICsxMjMwLDI4IEBACiAgICAgICovCiAgICAgYXJndlswXSA9IHN0cmR1cCgic25tcGQtdHJhcHNlc3MiKTsgLyogYm9ndXMgZW50cnkgZm9yIGdldG9wdCgpICovCiAgICAgZm9yIChhcmduID0gMTsgY3AgJiYgYXJnbiA8IE1BWF9BUkdTOyBhcmduKyspIHsKKyAgICAgICAgY2hhciAgICAgICAgICAgIHRtcFtTUFJJTlRfTUFYX0xFTl07CisKICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCB0bXAsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgYXJndlthcmduXSA9IHN0cmR1cCh0bXApOwogICAgIH0KIAotICAgIHNubXBfcGFyc2VfYXJncyhhcmduLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgdHJhcE9wdFByb2MpOworICAgIG5ldHNubXBfcGFyc2VfYXJncyhhcmduLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgdHJhcE9wdFByb2MsCisgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUEFSU0VfQVJHU19OT0xPR0dJTkcgfAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BBUlNFX0FSR1NfTk9aRVJPKTsKIAotICAgIHNzID0gc25tcF9hZGQoJnNlc3Npb24sCi0JCSAgbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQoInNubXB0cmFwIiwgc2Vzc2lvbi5wZWVybmFtZSksCi0JCSAgTlVMTCwgTlVMTCk7CisgICAgdHJhbnNwb3J0ID0gbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQoInNubXB0cmFwIiwgc2Vzc2lvbi5wZWVybmFtZSk7CisgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInNubXBkOiBmYWlsZWQgdG8gcGFyc2UgdGhpcyBsaW5lLiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICgocmMgPSBuZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydCgmc2Vzc2lvbiwgdHJhbnNwb3J0KSkKKyAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIHNlc3Npb24uc19zbm1wX2Vycm5vID0gcmM7CisgICAgICAgIHNlc3Npb24uc19lcnJubyA9IDA7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgc3MgPSBzbm1wX2FkZCgmc2Vzc2lvbiwgdHJhbnNwb3J0LCBOVUxMLCBOVUxMKTsKICAgICBmb3IgKDsgYXJnbiA+IDA7IGFyZ24tLSkgewogICAgICAgICBmcmVlKGFyZ3ZbYXJnbiAtIDFdKTsKICAgICB9CkBAIC0xMjExLDIxICsxMjcwLDE4IEBACiAgICAgaWYgKHNzLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8zICYmCiAgICAgICAgIHRyYXB0eXBlICE9IFNOTVBfTVNHX0lORk9STSAgICYmCiAgICAgICAgIHNzLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApIHsKKyAgICAgICAgICAgIHVfY2hhciAgICAgICAgICB0bXBbU1BSSU5UX01BWF9MRU5dOworCiAgICAgICAgICAgICBsZW4gPSBzbm1wdjNfZ2V0X2VuZ2luZUlEKCB0bXAsIHNpemVvZih0bXApKTsKICAgICAgICAgICAgIHNzLT5zZWN1cml0eUVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAodG1wLCBsZW4pOwogICAgICAgICAgICAgc3MtPnNlY3VyaXR5RW5naW5lSURMZW4gPSBsZW47CiAgICAgfQogCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKLSAgICBpZiAoc3MtPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzEpIHsKLSAgICAgICAgYWRkX3RyYXBfc2Vzc2lvbihzcywgU05NUF9NU0dfVFJBUCwgMCwgU05NUF9WRVJTSU9OXzEpOwotICAgIH0gZWxzZSB7CisgICAgaWYgKHNzLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xKQorICAgICAgICB0cmFwdHlwZSA9IFNOTVBfTVNHX1RSQVA7CiAjZW5kaWYKLSAgICAgICAgYWRkX3RyYXBfc2Vzc2lvbihzcywgdHJhcHR5cGUsICh0cmFwdHlwZSA9PSBTTk1QX01TR19JTkZPUk0pLAotICAgICAgICAgICAgICAgICAgICAgICAgIHNzLT52ZXJzaW9uKTsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotICAgIH0KLSNlbmRpZgorICAgIGFkZF90cmFwX3Nlc3Npb24oc3MsIHRyYXB0eXBlLCAodHJhcHR5cGUgPT0gU05NUF9NU0dfSU5GT1JNKSwgc3MtPnZlcnNpb24pOwogfQogCiAjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCmRpZmYgLS1naXQgYS9hZ2VudC9hdXRvX25saXN0LmMgYi9hZ2VudC9hdXRvX25saXN0LmMKaW5kZXggZGZmMWYyYi4uZWNkYWYyNCAxMDA2NDQKLS0tIGEvYWdlbnQvYXV0b19ubGlzdC5jCisrKyBiL2FnZW50L2F1dG9fbmxpc3QuYwpAQCAtNjYsNyArNjYsNyBAQAogICAgICAgICAgKiBhbGxvY2F0ZSBhbiBleHRyYSBieXRlIGZvciBpbmNsdXNpb24gb2YgYSBwcmVjZWRpbmcgJ18nIGxhdGVyIAogICAgICAgICAgKi8KICAgICAgICAgaXQtPm5sWzBdLm5fbmFtZSA9IChjaGFyICopIG1hbGxvYyhzdHJsZW4oc3RyaW5nKSArIDIpOwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBzdHJjcHkoaXQtPm5sWzBdLm5fbmFtZSwgc3RyaW5nKTsKICAgICAgICAgaXQtPm5sWzBdLm5fbmFtZVtzdHJsZW4oc3RyaW5nKSsxXSA9ICdcMCc7CiAjZWxpZiBkZWZpbmVkKGZyZWVic2Q5KQpAQCAtMTQ5LDcgKzE0OSw2IEBACiBzdGF0aWMgdm9pZAogaW5pdF9ubGlzdChzdHJ1Y3Qgbmxpc3QgbmxbXSkKIHsKLSNpZmRlZiBORVRTTk1QX0NBTl9VU0VfTkxJU1QKICAgICBpbnQgICAgICAgICAgICAgcmV0OwogI2lmIEhBVkVfS1ZNX09QRU5GSUxFUwogICAgIGt2bV90ICAgICAgICAgICprZXJuZWw7CkBAIC0xNzcsNyArMTc2LDcgQEAKICAgICB9CiAgICAga3ZtX2Nsb3NlKGtlcm5lbCk7CiAjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICEgSEFWRV9LVk1fT1BFTkZJTEVTICovCi0jaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKSAmJiBkZWZpbmVkKEhBVkVfS05MSVNUKQorI2lmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiBkZWZpbmVkKEhBVkVfS05MSVNUKQogICAgIGlmIChrbmxpc3QobmwsIDEsIHNpemVvZihzdHJ1Y3Qgbmxpc3QpKSA9PSAtMSkgewogICAgICAgICBERUJVR01TR1RMKCgiYXV0b19ubGlzdDppbml0X25saXN0IiwgImtubGlzdCBmYWlsZWQgb24gc3ltYm9sOiAgJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIG5sWzBdLm5fbmFtZSkpOwpAQCAtMjA3LDcgKzIwNiw3IEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qYWl4NCAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhIEhBVkVfS1ZNX09QRU5GSUxFUyAqLwogICAgIGZvciAocmV0ID0gMDsgbmxbcmV0XS5uX25hbWUgIT0gTlVMTDsgcmV0KyspIHsKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgaWYgKG5sW3JldF0ubl90eXBlID09IDAgJiYgbmxbcmV0XS5uX3ZhbHVlICE9IDApCiAgICAgICAgICAgICBubFtyZXRdLm5fdHlwZSA9IDE7CiAjZW5kaWYKQEAgLTIyMiw3ICsyMjEsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgbmxbcmV0XS5uX3ZhbHVlKSk7CiAgICAgICAgIH0KICAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfQ0FOX1VTRV9OTElTVCAqLwogfQogCiBpbnQKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kIGIvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQKaW5kZXggODNmZTU0ZS4uZDIwZTEyNSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQKKysrIGIvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQKQEAgLTUsNTggKzUsNjcgQEAKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY1LDYgKzc0LDcgQEAKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FsbF9oZWxwZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAyLDYzICsxMTIsNjkgQEAKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWxsX2hlbHBlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hbGxfaGVscGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjcsNiArMTgzLDcgQEAKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYmFieV9zdGVwcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMDQsNjMgKzIyMSw2OCBAQAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9iYWJ5X3N0ZXBzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2JhYnlfc3RlcHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2OSw2ICsyOTEsNyBAQAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzA2LDYzICszMjksNjggQEAKIC4vYnVsa190b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2J1bGtfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9idWxrX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM3MSw2ICszOTksNyBAQAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9jYWNoZV9oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTQwOCw2MyArNDM3LDY4IEBACiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2NhY2hlX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vY2FjaGVfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDczLDYgKzUwNyw3IEBACiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2RlYnVnX2hhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTEwLDYzICs1NDUsNjggQEAKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGVidWdfaGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kZWJ1Z19oYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01NzUsNiArNjE1LDcgQEAKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjEyLDYzICs2NTMsNjggQEAKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjc3LDYgKzcyMyw3IEBACiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21vZGVfZW5kX2NhbGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzE0LDYzICs3NjEsNjggQEAKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbW9kZV9lbmRfY2FsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9tb2RlX2VuZF9jYWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NzksNiArODMxLDcgQEAKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL211bHRpcGxleGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtODE2LDYyICs4NjksNjggQEAKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbXVsdGlwbGV4ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9tdWx0aXBsZXhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODgwLDYgKzkzOSw3IEBACiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL251bGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTE3LDYzICs5NzcsNjggQEAKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbnVsbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9udWxsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05ODIsNiArMTA0Nyw3IEBACiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAxOSw2NCArMTA4NSw2OSBAQAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9vbGRfYXBpLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL29sZF9hcGkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vb2xkX2FwaS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA4NSw2ICsxMTU2LDcgQEAKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMjIsNjMgKzExOTQsNjggQEAKIC4vcmVhZF9vbmx5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3JlYWRfb25seS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9yZWFkX29ubHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExODcsNiArMTI2NCw3IEBACiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjI0LDYzICsxMzAyLDY4IEBACiAuL3Jvd19tZXJnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9yb3dfbWVyZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vcm93X21lcmdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjg5LDYgKzEzNzIsNyBAQAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTMyNiw2MyArMTQxMCw2OCBAQAogLi9zY2FsYXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2NhbGFyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjYWxhci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM5MSw2ICsxNDgwLDcgQEAKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0MjgsNjMgKzE1MTgsNjggQEAKIC4vc2NhbGFyX2dyb3VwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjYWxhcl9ncm91cC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY2FsYXJfZ3JvdXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0OTMsNiArMTU4OCw3IEBACiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNTMwLDYzICsxNjI2LDE3NiBAQAogLi9zZXJpYWxpemUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2VyaWFsaXplLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NlcmlhbGl6ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc25tcF9nZXRfc3RhdGlzdGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXBfZ2V0X3N0YXRpc3RpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wX2dldF9zdGF0aXN0aWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE1OTUsNiArMTgwNCw3IEBACiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE2MzIsNjUgKzE4NDIsNzAgQEAKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc3Rhc2hfY2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3N0YXNoX2NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX3RvX25leHQuaAorLi9zdGFzaF9jYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjk5LDYgKzE5MTQsNyBAQAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE3MzYsMTY2ICsxOTUyLDcwIEBACiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCisuL3N0YXNoX3RvX25leHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc3Rhc2hfdG9fbmV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zdGFzaF90b19uZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE5MDQsNiArMjAyNCw3IEBACiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9hcnJheS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE5NDEsNjMgKzIwNjIsMTc2IEBACiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX2FycmF5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfYXJyYXkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMDA2LDYgKzIyNDAsNyBAQAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA0Myw2MyArMjI3OCw2OCBAQAogLi90YWJsZV9jb250YWluZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfY29udGFpbmVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2NvbnRhaW5lci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjEwOCw2ICsyMzQ4LDcgQEAKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9kYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMTQ1LDYzICsyMzg2LDY4IEBACiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2RhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjIxMCw2ICsyNDU2LDcgQEAKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90YWJsZV9kYXRhc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMjQ3LDYzICsyNDk0LDY4IEBACiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2RhdGFzZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfZGF0YXNldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjMxMiw2ICsyNTY0LDcgQEAKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGFibGVfaXRlcmF0b3IubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjM0OSw2NCArMjYwMiw2OSBAQAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YWJsZV9pdGVyYXRvci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhYmxlX2l0ZXJhdG9yLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI0MTUsNiArMjY3Myw3IEBACiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNDUyLDYzICsyNzExLDY4IEBACiAuL3RhYmxlX3Jvdy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YWJsZV9yb3cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfcm93LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNTE3LDYgKzI3ODEsNyBAQAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YWJsZV90ZGF0YS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yNTU0LDYzICsyODE5LDY4IEBACiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3RhYmxlX3RkYXRhLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFibGVfdGRhdGEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2MTksNiArMjg4OSw3IEBACiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3dhdGNoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjY1NiwzICsyOTI3LDQgQEAKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vd2F0Y2hlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi93YXRjaGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluIGIvYWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbgppbmRleCBiODNhZjg5Li41MTc4Yjc5IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluCisrKyBiL2FnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW4KQEAgLTEsMyArMSw3IEBACisjCisjIE1ha2VmaWxlIGZvciBsaWJuZXRzbm1waGVscGVycworIworCiB0b3BfYnVpbGRkaXI9Li4vLi4KIAogIyB1c2UgR05VIHZwYXRoLCBpZiBhdmFpbGFibGUsIHRvIG9ubHkgc2V0IGEgcGF0aCBmb3Igc291cmNlIGFuZCBoZWFkZXJzCkBAIC0xNCwxMzEgKzE4LDIxIEBACiAKIElOU1RBTExMSUJTPWxpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogSU5DTFVERVNVQkRJUj1hZ2VudAotSEVBREVSUz1hbGxfaGVscGVycy5oIFwKLQliYWJ5X3N0ZXBzLmggXAotCWJ1bGtfdG9fbmV4dC5oIFwKLQljYWNoZV9oYW5kbGVyLmggXAotICAgICAgICBkZWJ1Z19oYW5kbGVyLmggXAotCWluc3RhbmNlLmggXAotCW1vZGVfZW5kX2NhbGwuaCBcCi0gICAgICAgIG11bHRpcGxleGVyLmggXAotICAgICAgICBudWxsLmggXAotICAgICAgICBvbGRfYXBpLmggXAotICAgICAgICByZWFkX29ubHkuaCBcCi0gICAgICAgIHJvd19tZXJnZS5oIFwKLQlzY2FsYXIuaCBcCi0Jc2NhbGFyX2dyb3VwLmggXAotICAgICAgICBzZXJpYWxpemUuaCBcCi0Jc3Rhc2hfY2FjaGUuaCBcCi0Jc3Rhc2hfdG9fbmV4dC5oIFwKLSAgICAgICAgdGFibGUuaCBcCi0JdGFibGVfYXJyYXkuaCBcCi0JdGFibGVfY29udGFpbmVyLmggXAotICAgICAgICB0YWJsZV9kYXRhLmggXAotICAgICAgICB0YWJsZV9kYXRhc2V0LmggXAotICAgICAgICB0YWJsZV9pdGVyYXRvci5oIFwKLSAgICAgICAgdGFibGVfdGRhdGEuaCBcCi0Jd2F0Y2hlci5oCi0KLSMgTm8gaGVhZGVyICd0YWJsZV9yb3cuaCcKLQotSEVBREVSU09OTFk9bWZkLmggc2V0X2hlbHBlci5oCi1JTkNMVURFU1VCRElSSEVBREVSUz0kKEhFQURFUlMpICQoSEVBREVSU09OTFkpCiAKICMKICMgQnVpbGQgaW5mbwogIwotTkVUU05NUExJQiAgICAgID0gLi4vLi4vc25tcGxpYi9saWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogSEVMUEVSTElCICAgICAgID0gbGlibmV0c25tcGhlbHBlcnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1BR0VOVExJQiAgICAgICAgPSAuLi9saWJuZXRzbm1wYWdlbnQuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1NSUJMSUIgICAgICAgICAgPSAuLi9saWJuZXRzbm1wbWlicy4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikKICMgLUkuIC1JLi4gLUkuLi8uLgogQ1BQRkxBR1M9ICQoVE9QX0lOQ0xVREVTKSAtSS4gJChBR0VOVF9JTkNMVURFUykgJChNSUJHUk9VUF9JTkNMVURFUykgXAogCSQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQAogCi1TUkNTID0gIGFsbF9oZWxwZXJzLmMgXAotCWJhYnlfc3RlcHMuYyBcCi0JYnVsa190b19uZXh0LmMgXAotCWNhY2hlX2hhbmRsZXIuYyBcCi0JZGVidWdfaGFuZGxlci5jIFwKLQlpbnN0YW5jZS5jIFwKLQltb2RlX2VuZF9jYWxsLmMgXAotCW11bHRpcGxleGVyLmMgXAotCW51bGwuYyBcCi0Jb2xkX2FwaS5jIFwKLQlyZWFkX29ubHkuYyBcCi0Jcm93X21lcmdlLmMgXAotCXNjYWxhci5jIFwKLQlzY2FsYXJfZ3JvdXAuYyBcCi0Jc2VyaWFsaXplLmMgXAotCXN0YXNoX2NhY2hlLmMgXAotCXN0YXNoX3RvX25leHQuYyBcCi0JdGFibGUuYyBcCi0JdGFibGVfYXJyYXkuYyBcCi0JdGFibGVfY29udGFpbmVyLmMgXAotCXRhYmxlX2RhdGEuYyBcCi0JdGFibGVfZGF0YXNldC5jIFwKLQl0YWJsZV9pdGVyYXRvci5jIFwKLQl0YWJsZV9yb3cuYyBcCi0JdGFibGVfdGRhdGEuYyBcCi0Jd2F0Y2hlci5jCitPQkpTID0gZHVtbXkubwogCi1PQkpTID0gIGFsbF9oZWxwZXJzLm8gXAotCWJhYnlfc3RlcHMubyBcCi0JYnVsa190b19uZXh0Lm8gXAotCWNhY2hlX2hhbmRsZXIubyBcCi0JZGVidWdfaGFuZGxlci5vIFwKLQlpbnN0YW5jZS5vIFwKLQltb2RlX2VuZF9jYWxsLm8gXAotCW11bHRpcGxleGVyLm8gXAotCW51bGwubyBcCi0Jb2xkX2FwaS5vIFwKLQlyZWFkX29ubHkubyBcCi0Jcm93X21lcmdlLm8gXAotCXNjYWxhci5vIFwKLQlzY2FsYXJfZ3JvdXAubyBcCi0Jc2VyaWFsaXplLm8gXAotCXN0YXNoX2NhY2hlLm8gXAotCXN0YXNoX3RvX25leHQubyBcCi0JdGFibGUubyBcCi0JdGFibGVfYXJyYXkubyBcCi0JdGFibGVfY29udGFpbmVyLm8gXAotCXRhYmxlX2RhdGEubyBcCi0JdGFibGVfZGF0YXNldC5vIFwKLQl0YWJsZV9pdGVyYXRvci5vIFwKLQl0YWJsZV9yb3cubyBcCi0JdGFibGVfdGRhdGEubyBcCi0Jd2F0Y2hlci5vCi0KLUxPQkpTID0gYWxsX2hlbHBlcnMubG8gXAotCWJhYnlfc3RlcHMubG8gXAotCWJ1bGtfdG9fbmV4dC5sbyBcCi0JY2FjaGVfaGFuZGxlci5sbyBcCi0JZGVidWdfaGFuZGxlci5sbyBcCi0JaW5zdGFuY2UubG8gXAotCW1vZGVfZW5kX2NhbGwubG8gXAotCW11bHRpcGxleGVyLmxvIFwKLQludWxsLmxvIFwKLQlvbGRfYXBpLmxvIFwKLQlyZWFkX29ubHkubG8gXAotCXJvd19tZXJnZS5sbyBcCi0Jc2NhbGFyLmxvIFwKLQlzY2FsYXJfZ3JvdXAubG8gXAotCXNlcmlhbGl6ZS5sbyBcCi0Jc3Rhc2hfY2FjaGUubG8gXAotCXN0YXNoX3RvX25leHQubG8gXAotCXRhYmxlLmxvIFwKLQl0YWJsZV9hcnJheS5sbyBcCi0JdGFibGVfY29udGFpbmVyLmxvIFwKLQl0YWJsZV9kYXRhLmxvIFwKLQl0YWJsZV9kYXRhc2V0LmxvIFwKLQl0YWJsZV9pdGVyYXRvci5sbyBcCi0JdGFibGVfcm93LmxvIFwKLQl0YWJsZV90ZGF0YS5sbyBcCi0Jd2F0Y2hlci5sbworTE9CSlMgPSBkdW1teS5sbwogCiBhbGw6IHN0YW5kYXJkYWxsCiAKIGxpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKTogICAgJChMT0JKUykKLQkkKExJQl9MRF9DTUQpICRAICQoTE9CSlMpICQoQUdFTlRMSUIpICQoTkVUU05NUExJQikgJChMREZMQUdTKSAkKExJQl9MRF9MSUJTKQorCSQoTElCX0xEX0NNRCkgJEAgJChMT0JKUykgQExEX05PX1VOREVGSU5FREAgJChMREZMQUdTKSAkKExJQl9MRF9MSUJTKQogCSQoUkFOTElCKSAkQApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jIGIvYWdlbnQvaGVscGVycy9hbGxfaGVscGVycy5jCmluZGV4IDAyYmM4YWYuLmUxZTFiNzggMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvYWxsX2hlbHBlcnMuYworKysgYi9hZ2VudC9oZWxwZXJzL2FsbF9oZWxwZXJzLmMKQEAgLTIsMTggKzIsMTAgQEAKICAqICBAeyAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpZmRlZiBTVElMTF9UT19ETwotICAgICAgICAvKgotICAgICAgICAgKiBJdCBvdWdodCB0byBiZSBwb3NzaWJsZSB0byBqdXN0ICNpbmNsdWRlIHRoZXNlIGZpbGVzLAotICAgICAgICAgKiAgIGJ1dCB0aGV5IHJlbHkgb24gdmFyaW91cyBvdGhlciB0eXBlcyBiZWluZyBkZWZpbmVkIGZpcnN0LgotICAgICAgICAgKgotICAgICAgICAgKiBJIHJlYWxseSBjYW4ndCBmYWNlIHRyYWNraW5nIGRvd24gdGhlIGRlcGVuZGVuY3kgY2hhaW4KLSAgICAgICAgICogICBqdXN0IGF0IHRoZSBtb21lbnQuCi0gICAgICAgICAqIFNvIHdlJ2xsIGp1c3QgaGF2ZSB0byBsaXZlIHdpdGggdGhlIHdhcm5pbmdzLi4uLgotICAgICAgICAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5Lmg+CkBAIC0yMSwxNSArMTMsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgogCi0jZWxzZQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9oZWxwZXJzLCBsaWJuZXRzbm1wYWdlbnQpCiAKLXZvaWQgIG5ldHNubXBfaW5pdF9kZWJ1Z19oZWxwZXIodm9pZCk7Ci12b2lkICBuZXRzbm1wX2luaXRfc2VyaWFsaXplKHZvaWQpOwotdm9pZCAgbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXIodm9pZCk7Ci12b2lkICBuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlcih2b2lkKTsKLXZvaWQgIG5ldHNubXBfaW5pdF90YWJsZV9kYXRhc2V0KHZvaWQpOwotdm9pZCAgbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlcih2b2lkKTsKLSNlbmRpZgogCiAvKiogY2FsbCB0aGUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UgZm9yIGFsbCBoYW5kbGVycyB3aXRoIGluaXRfIHJvdXRpbmVzLiAqLwogdm9pZApAQCAtMzksOCArMjQsMTYgQEAKICAgICBuZXRzbm1wX2luaXRfc2VyaWFsaXplKCk7CiAgICAgbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXIoKTsKICAgICBuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlcigpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVQKICAgICBuZXRzbm1wX2luaXRfdGFibGVfZGF0YXNldCgpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFCisgICAgbmV0c25tcF9pbml0X3Jvd19tZXJnZSgpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICBuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyKCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwogfQogCiAvKiogQGRlZmdyb3VwIHV0aWxpdGllcyB1dGlsaXR5X2hhbmRsZXJzCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2JhYnlfc3RlcHMuYyBiL2FnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jCmluZGV4IDY0YmJhODkuLmQ3OWFjYmMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jCisrKyBiL2FnZW50L2hlbHBlcnMvYmFieV9zdGVwcy5jCkBAIC0zLDkgKzMsMTkgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGJhYnlfc3RlcHMsIG1pYl9oZWxwZXJzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQkFCWV9TVEVQUworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfcmVxdWVzdHNfZXJyb3IpCisjZW5kaWYKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0JBQllfU1RFUFMKKwogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaD4KIAogI2RlZmluZSBCQUJZX1NURVBTX1BFUl9NT0RFX01BWCAgICAgNApAQCAtMTQsNiArMjQsNyBAQAogc3RhdGljIHVfc2hvcnQgZ2V0X21vZGVfbWFwW0JBQllfU1RFUFNfUEVSX01PREVfTUFYXSA9IHsKICAgICBNT0RFX0JTVEVQX1BSRV9SRVFVRVNULCBNT0RFX0JTVEVQX09CSkVDVF9MT09LVVAsIEJTVEVQX1VTRV9PUklHSU5BTCwgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1QgfTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0YXRpYyB1X3Nob3J0IHNldF9tb2RlX21hcFtTTk1QX01TR19JTlRFUk5BTF9TRVRfTUFYXVtCQUJZX1NURVBTX1BFUl9NT0RFX01BWF0gPSB7CiAgICAgLypSMSovCiAgICAgeyBNT0RFX0JTVEVQX1BSRV9SRVFVRVNULCBNT0RFX0JTVEVQX09CSkVDVF9MT09LVVAsIE1PREVfQlNURVBfUk9XX0NSRUFURSwKQEAgLTMzLDYgKzQ0LDcgQEAKICAgICB7IE1PREVfQlNURVBfVU5ET19DT01NSVQsIE1PREVfQlNURVBfVU5ET19TRVQsIE1PREVfQlNURVBfVU5ET19DTEVBTlVQLAogICAgICAgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1R9CiB9OworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBzdGF0aWMgaW50CiBfYmFieV9zdGVwc19oZWxwZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTUxLDYgKzYzLDIwIEBACiAgKiAgQHsKICAqLwogCitzdGF0aWMgbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzICoKK25ldHNubXBfYmFieV9zdGVwc19tb2Rlc19yZWYobmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzICptZCkKK3sKKyAgICBtZC0+cmVmY250Kys7CisgICAgcmV0dXJuIG1kOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX2RlcmVmKG5ldHNubXBfYmFieV9zdGVwc19tb2RlcyAqbWQpCit7CisgICAgaWYgKC0tbWQtPnJlZmNudCA9PSAwKQorCWZyZWUobWQpOworfQorCiAvKiogcmV0dXJucyBhIGJhYnlfc3RlcHMgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4KICAqICBoYW5kbGVyIGNoYWluLgogICovCkBAIC03MSw3ICs5NywxMCBAQAogICAgICAgICBtaCA9IE5VTEw7CiAgICAgfQogICAgIGVsc2UgeworCW1kLT5yZWZjbnQgPSAxOwogICAgICAgICBtaC0+bXl2b2lkID0gbWQ7CisJbWgtPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX3JlZjsKKwltaC0+ZGF0YV9mcmVlID0gKHZvaWQgKCopKHZvaWQgKikpbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX2RlcmVmOwogICAgICAgICBpZiAoMCA9PSBtb2RlcykKICAgICAgICAgICAgIG1vZGVzID0gQkFCWV9TVEVQX0FMTDsKICAgICAgICAgbWQtPnJlZ2lzdGVyZWQgPSBtb2RlczsKQEAgLTk5LDExICsxMjgsMTIgQEAKICAgICBERUJVR01TR1RMKCgiYmFieV9zdGVwcyIsICJHb3QgcmVxdWVzdCwgbW9kZSAlc1xuIiwKICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIixyZXFpbmZvLT5tb2RlKSkpOwogCi0gICAgYnNfbW9kZXMgPSBoYW5kbGVyLT5teXZvaWQ7CisgICAgYnNfbW9kZXMgPSAobmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzKiloYW5kbGVyLT5teXZvaWQ7CiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBic19tb2Rlcyk7CiAKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgICAgICAvKgogICAgICAgICAgKiBjbGVhciBjb21wbGV0ZWQgbW9kZXMKQEAgLTEyMSw2ICsxNTEsNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICAgICAgbW9kZV9tYXBfcHRyID0gc2V0X21vZGVfbWFwW3JlcWluZm8tPm1vZGVdOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIC8qCkBAIC0yMjIsNiArMjUzLDcgQEAKICAgICAgICAgaWYgKEJTVEVQX1VTRV9PUklHSU5BTCAhPSBtb2RlX21hcF9wdHJbaV0pIHsKICAgICAgICAgICAgIHVfaW50ICAgIG1vZGVfZmxhZzsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBza2lwIHVuZG8gY29tbWl0IGlmIGNvbW1pdCB3YXNuJ3QgaGl0LCBhbmQKICAgICAgICAgICAgICAqIHVuZG9fY2xlYW51cCBpZiB1bmRvX3NldHVwIHdhc24ndCBoaXQuCkBAIC0yNDAsNiArMjcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICAgc2tpcHBpbmcgdW5kbyBjbGVhbnVwIChubyB1bmRvIHNldHVwKVxuIikpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID0gbW9kZV9tYXBfcHRyW2ldOwogICAgICAgICAgICAgbW9kZV9mbGFnID0gbmV0c25tcF9iYWJ5X3N0ZXBfbW9kZTJmbGFnKCBtb2RlX21hcF9wdHJbaV0gKTsKQEAgLTI5Myw3ICszMjYsMTAgQEAKICAgICAgICAgICogaW4gY29tbWl0LCBmcmVlIG9yIHVuZG8uKQogICAgICAgICAgKi8KICAgICAgICAgaWYgKE1PREVfSVNfR0VUKHNhdmVfbW9kZSkKLSAgICAgICAgICAgIHx8IChzYXZlX21vZGUgPCBTTk1QX01TR19JTlRFUk5BTF9TRVRfQ09NTUlUKSkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgIHx8IChzYXZlX21vZGUgPCBTTk1QX01TR19JTlRFUk5BTF9TRVRfQ09NTUlUKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfcmVxdWVzdHNfZXJyb3IocmVxdWVzdHMpOwogICAgICAgICAgICAgaWYocmMpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYmFieV9zdGVwcyIsICIgICBFUlJPUjpyZXF1ZXN0IGVycm9yXG4iKSk7CkBAIC0zMTUsMTIgKzM1MSwxNSBAQAogICogIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZQogICogIHVzZS4KICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2luaXQsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9CQUJZX1NURVBTX0hBTkRMRVJfSU5JVAogdm9pZAogbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfaW5pdCh2b2lkKQogewogICAgIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcl9ieV9uYW1lKCJiYWJ5X3N0ZXBzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQoQkFCWV9TVEVQX0FMTCkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9CQUJZX1NURVBTX0hBTkRMRVJfSU5JVCAqLwogCiAvKiogQH0gKi8KIApAQCAtMzkxLDYgKzQzMCw3IEBACiAgICAgICAgICAgICBtZXRob2QgPSBhY2Nlc3NfbWV0aG9kcy0+Z2V0X3ZhbHVlczsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfQlNURVBfQ0hFQ0tfVkFMVUU6CiAgICAgICAgIGlmKCBhY2Nlc3NfbWV0aG9kcy0+b2JqZWN0X3N5bnRheF9jaGVja3MgKQogICAgICAgICAgICAgbWV0aG9kID0gYWNjZXNzX21ldGhvZHMtPm9iamVjdF9zeW50YXhfY2hlY2tzOwpAQCAtNDQwLDYgKzQ4MCw3IEBACiAgICAgICAgIGlmKCBhY2Nlc3NfbWV0aG9kcy0+dW5kb19jbGVhbnVwICkKICAgICAgICAgICAgIG1ldGhvZCA9IGFjY2Vzc19tZXRob2RzLT51bmRvX2NsZWFudXA7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAKICAgICBjYXNlIE1PREVfQlNURVBfUE9TVF9SRVFVRVNUOgogICAgICAgICBpZiggYWNjZXNzX21ldGhvZHMtPnBvc3RfcmVxdWVzdCApCkBAIC00ODQsNiArNTI1LDcgQEAKICAgICBzd2l0Y2goIG1vZGUgKSB7CiAgICAgICAgIGNhc2UgTU9ERV9CU1RFUF9PQkpFQ1RfTE9PS1VQOgogICAgICAgICAgICAgcmV0dXJuIEJBQllfU1RFUF9PQkpFQ1RfTE9PS1VQOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX0JTVEVQX1NFVF9WQUxVRToKICAgICAgICAgICAgIHJldHVybiBCQUJZX1NURVBfU0VUX1ZBTFVFOwogICAgICAgICBjYXNlIE1PREVfQlNURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDoKQEAgLTUwOCw2ICs1NTAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIEJBQllfU1RFUF9DT01NSVQ7CiAgICAgICAgIGNhc2UgTU9ERV9CU1RFUF9VTkRPX0NPTU1JVDoKICAgICAgICAgICAgIHJldHVybiBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCgidW5rbm93biBmbGFnIik7CiAgICAgICAgICAgICBicmVhazsKQEAgLTUxNiwzICs1NTksNyBAQAogfQogLyoqICBAfSAqLwogCisjZWxzZSAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9CQUJZX1NURVBTICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGJhYnlfc3RlcHMpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQkFCWV9TVEVQUyAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jIGIvYWdlbnQvaGVscGVycy9idWxrX3RvX25leHQuYwppbmRleCA0ZGQxOTE0Li5lNjA3ZWRhIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL2J1bGtfdG9fbmV4dC5jCisrKyBiL2FnZW50L2hlbHBlcnMvYnVsa190b19uZXh0LmMKQEAgLTEsMTEgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9jYWNoZV9oYW5kbGVyLmMgYi9hZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYwppbmRleCA1MjBkNDYzLi41MjBhNGNmIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYworKysgYi9hZ2VudC9oZWxwZXJzL2NhY2hlX2hhbmRsZXIuYwpAQCAtMSw0ICsxLDE1IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTEsNiArMjIsMTEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhY2hlX2hhbmRsZXIsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FjaGVfZmluZF9ieV9vaWQsIGNhY2hlX2hhbmRsZXIpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FjaGVfZ2V0X2hlYWQsIGNhY2hlX2hhbmRsZXIpCisKIHN0YXRpYyBuZXRzbm1wX2NhY2hlICAqY2FjaGVfaGVhZCA9IE5VTEw7CiBzdGF0aWMgaW50ICAgICAgICAgICAgIGNhY2hlX291dHN0YW5kaW5nX3ZhbGlkID0gMDsKIHN0YXRpYyBpbnQgICAgICAgICAgICAgX2NhY2hlX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlICk7CkBAIC02OSw2ICs4NSwxNCBAQAogICogIHRoZSBjYWNoZSB3aGVuIGl0IGV4cGlyZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBrZWVwaW5nIHRoZSBjYWNoZSBmcmVzaCwKICAqICBldmVuIGluIHRoZSBhYnNlbmNlIG9mIGluY29taW5nIHNubXAgcmVxdWVzdHMuCiAgKgorICogIElmIE5FVFNOTVBfQ0FDSEVfUkVTRVRfVElNRVJfT05fVVNFIGlzIHNldCwgdGhlIGV4cGlyeSB0aW1lciB3aWxsIGJlCisgKiAgcmVzZXQgb24gZWFjaCBjYWNoZSBhY2Nlc3MuIEluIHByYWN0aWNlIHRoZSAndGltZW91dCcgYmVjb21lcyBhIHRpbWVyCisgKiAgd2hpY2ggdHJpZ2dlcnMgd2hlbiB0aGUgY2FjaGUgaXMgbm8gbG9uZ2VyIG5lZWRlZC4gVGhpcyBpcyB1c2VmdWwKKyAqICBpZiB0aGUgY2FjaGUgaXMgYXV0b21hdGljYWxseSBrZXB0IHN5bmNocm9uaXplZDogZS5nLiBieSByZWNlaXZpbmcKKyAqICBjaGFuZ2Ugbm90aWZpY2F0aW9ucyBmcm9tIE5ldGxpbmssIGlub3RpZnkgb3Igc2ltaWxhci4gVGhpcyBzaG91bGQKKyAqICBub3QgYmUgdXNlZCBpZiBjYWNoZSBpcyBub3Qgc3luY2hyb25pemVkIGF1dG9tYXRpY2FsbHkgYXMgaXQgd291bGQKKyAqICByZXN1bHQgaW4gc3RhbGUgY2FjaGUgaW5mb3JtYXRpb24gd2hlbiBpZiBwb2xsaW5nIGhhcHBlbnMgdG9vIGZhc3QuCisgKgogICoKICAqICBIZXJlIGFyZSBzb21lIHN1Z2dlc3Rpb25zIGZvciBzb21lIGNvbW1vbiBzaXR1YXRpb25zLgogICoKQEAgLTEwMCw5ICsxMjQsMjAgQEAKICAqICAgICAgICAgIE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UKICAqICAgICAgICAgIE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQKICAqCisgKiAgRHluYW1pY2FsbHkgdXBkYXRlZCwgdW5sb2FkZWQgYWZ0ZXIgdGltZW91dDoKKyAqICAgICAgSWYgdGhlIGNhY2hlIGlzIGtlcHQgdXAgdG8gZGF0ZSBkeW5hbWljYWxseSBieSBsaXN0ZW5pbmcgZm9yCisgKiAgICAgIGNoYW5nZSBub3RpZmljYXRpb25zIHNvbWVob3csIGJ1dCBpdCBzaG91bGQgbm90IGJlIGluIG1lbW9yeQorICogICAgICBpZiBpdCdzIG5vdCBuZWVkZWQuIFNldCB0aGUgZm9sbG93aW5nIGZsYWc6CisgKgorICogICAgICAgICAgTkVUU05NUF9DQUNIRV9SRVNFVF9USU1FUl9PTl9VU0UKKyAqCiAgKiAgQHsKICAqLwogCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlICk7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUNIRV9HRVRfSEVBRAogLyoqIGdldCBjYWNoZSBoZWFkCiAgKiBAaW50ZXJuYWwKICAqIHVuYWR2ZXJ0aXNlZCBmdW5jdGlvbiB0byBnZXQgY2FjaGUgaGVhZC4gWW91IHJlYWxseSBzaG91bGQgbm90CkBAIC0xMTMsMTEgKzE0OCwxMyBAQAogewogICAgIHJldHVybiBjYWNoZV9oZWFkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FDSEVfR0VUX0hFQUQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBQ0hFX0ZJTkRfQllfT0lECiAvKiogZmluZCBleGlzdGluZyBjYWNoZQogICovCiBuZXRzbm1wX2NhY2hlICoKLW5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQob2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKQorbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZChjb25zdCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pCiB7CiAgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlOwogCkBAIC0xMjksMTMgKzE2NiwxNCBAQAogICAgIAogICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FDSEVfRklORF9CWV9PSUQgKi8KIAogLyoqIHJldHVybnMgYSBjYWNoZQogICovCiBuZXRzbm1wX2NhY2hlICoKIG5ldHNubXBfY2FjaGVfY3JlYXRlKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICogbG9hZF9ob29rLAogICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywKLSAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikKIHsKICAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGUgPSBOVUxMOwogCkBAIC0xNzMsNiArMjExLDk1IEBACiAgICAgcmV0dXJuIGNhY2hlOwogfQogCitzdGF0aWMgbmV0c25tcF9jYWNoZSAqCituZXRzbm1wX2NhY2hlX3JlZihuZXRzbm1wX2NhY2hlICpjYWNoZSkKK3sKKyAgICBjYWNoZS0+cmVmY250Kys7CisgICAgcmV0dXJuIGNhY2hlOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9jYWNoZV9kZXJlZihuZXRzbm1wX2NhY2hlICpjYWNoZSkKK3sKKyAgICBpZiAoLS1jYWNoZS0+cmVmY250ID09IDApIHsKKyAgICAgICAgbmV0c25tcF9jYWNoZV9yZW1vdmUoY2FjaGUpOworICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworICAgIH0KK30KKworLyoqIGZyZWVzIGEgY2FjaGUKKyAqLworaW50CituZXRzbm1wX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUpCit7CisgICAgbmV0c25tcF9jYWNoZSAgKnBvczsKKworICAgIGlmIChOVUxMID09IGNhY2hlKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgZm9yIChwb3MgPSBjYWNoZV9oZWFkOyBwb3M7IHBvcyA9IHBvcy0+bmV4dCkgeworICAgICAgICBpZiAocG9zID09IGNhY2hlKSB7CisgICAgICAgICAgICBzaXplX3QgICAgICAgICAgb3V0X2xlbiA9IDA7CisgICAgICAgICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IDA7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAqYnVmID0gTlVMTDsKKworICAgICAgICAgICAgc3ByaW50X3JlYWxsb2Nfb2JqaWQoKHVfY2hhciAqKikgJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgcG9zLT5yb290b2lkLCBwb3MtPnJvb3RvaWRfbGVuKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIm5vdCBmcmVlaW5nIGNhY2hlIHdpdGggcm9vdCBPSUQgJXMgKHN0aWxsIGluIGxpc3QpXG4iLAorICAgICAgICAgICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgIGZyZWUoYnVmKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZigwICE9IGNhY2hlLT50aW1lcl9pZCkKKyAgICAgICAgbmV0c25tcF9jYWNoZV90aW1lcl9zdG9wKGNhY2hlKTsKKworICAgIGlmIChjYWNoZS0+dmFsaWQpCisgICAgICAgIF9jYWNoZV9mcmVlKGNhY2hlKTsKKworICAgIGlmIChjYWNoZS0+dGltZXN0YW1wTSkKKwlmcmVlKGNhY2hlLT50aW1lc3RhbXBNKTsKKworICAgIGlmIChjYWNoZS0+cm9vdG9pZCkKKyAgICAgICAgZnJlZShjYWNoZS0+cm9vdG9pZCk7CisKKyAgICBmcmVlKGNhY2hlKTsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qKiByZW1vdmVzIGEgY2FjaGUKKyAqLworaW50CituZXRzbm1wX2NhY2hlX3JlbW92ZShuZXRzbm1wX2NhY2hlICpjYWNoZSkKK3sKKyAgICBuZXRzbm1wX2NhY2hlICAqY3VyLCpwcmV2OworCisgICAgaWYgKCFjYWNoZSB8fCAhY2FjaGVfaGVhZCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGNhY2hlID09IGNhY2hlX2hlYWQpIHsKKyAgICAgICAgY2FjaGVfaGVhZCA9IGNhY2hlX2hlYWQtPm5leHQ7CisgICAgICAgIGlmIChjYWNoZV9oZWFkKQorICAgICAgICAgICAgY2FjaGVfaGVhZC0+cHJldiA9IE5VTEw7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHByZXYgPSBjYWNoZV9oZWFkOworICAgIGN1ciA9IGNhY2hlX2hlYWQtPm5leHQ7CisgICAgZm9yICg7IGN1cjsgcHJldiA9IGN1ciwgY3VyID0gY3VyLT5uZXh0KSB7CisgICAgICAgIGlmIChjYWNoZSA9PSBjdXIpIHsKKyAgICAgICAgICAgIHByZXYtPm5leHQgPSBjdXItPm5leHQ7CisgICAgICAgICAgICBpZiAoY3VyLT5uZXh0KQorICAgICAgICAgICAgICAgIGN1ci0+bmV4dC0+cHJldiA9IGN1ci0+cHJldjsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMTsKK30KKwogLyoqIGNhbGxiYWNrIGZ1bmN0aW9uIHRvIGNhbGwgY2FjaGUgbG9hZCBmdW5jdGlvbiAqLwogc3RhdGljIHZvaWQKIF90aW1lcl9yZWxvYWQodW5zaWduZWQgaW50IHJlZ05vLCB2b2lkICpjbGllbnRhcmdzKQpAQCAtMjE3LDcgKzM0NCw3IEBACiAKICAgICBjYWNoZS0+ZmxhZ3MgJj0gfk5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQ7CiAgICAgREVCVUdNU0dUKCgiY2FjaGVfdGltZXI6c3RhcnQiLAotICAgICAgICAgICAgICAgInN0YXJ0aW5nIHRpbWVyICVkIGZvciBjYWNoZSAlcFxuIiwgY2FjaGUtPnRpbWVyX2lkLCBjYWNoZSkpOworICAgICAgICAgICAgICAgInN0YXJ0aW5nIHRpbWVyICVsdSBmb3IgY2FjaGUgJXBcbiIsIGNhY2hlLT50aW1lcl9pZCwgY2FjaGUpKTsKICAgICByZXR1cm4gY2FjaGUtPnRpbWVyX2lkOwogfQogCkBAIC0yMzQsNyArMzYxLDcgQEAKICAgICB9CiAKICAgICBERUJVR01TR1QoKCJjYWNoZV90aW1lcjpzdG9wIiwKLSAgICAgICAgICAgICAgICJzdG9wcGluZyB0aW1lciAlZCBmb3IgY2FjaGUgJXBcbiIsIGNhY2hlLT50aW1lcl9pZCwgY2FjaGUpKTsKKyAgICAgICAgICAgICAgICJzdG9wcGluZyB0aW1lciAlbHUgZm9yIGNhY2hlICVwXG4iLCBjYWNoZS0+dGltZXJfaWQsIGNhY2hlKSk7CiAKICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoY2FjaGUtPnRpbWVyX2lkKTsKICAgICBjYWNoZS0+ZmxhZ3MgfD0gTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRDsKQEAgLTI3MCwxMiArMzk3LDIzIEBACiAgICAgcmV0dXJuIHJldDsKIH0KIAorLyoqIE1ha2VzIHN1cmUgdGhhdCBtZW1vcnkgYWxsb2NhdGVkIGZvciB0aGUgY2FjaGUgaXMgZnJlZWQgd2hlbiB0aGUgaGFuZGxlcgorICogIGlzIHVucmVnaXN0ZXJlZC4KKyAqLwordm9pZCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQoreworICAgIG5ldHNubXBfYXNzZXJ0KGhhbmRsZXItPm15dm9pZCk7CisgICAgKChuZXRzbm1wX2NhY2hlICopaGFuZGxlci0+bXl2b2lkKS0+cmVmY250Kys7CisgICAgaGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2NhY2hlX3JlZjsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUgPSAodm9pZCgqKSh2b2lkKikpbmV0c25tcF9jYWNoZV9kZXJlZjsKK30KKwogLyoqIHJldHVybnMgYSBjYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAgCiAgKi8KIG5ldHNubXBfbWliX2hhbmRsZXIgKgogbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcihpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pCiB7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqcmV0ID0gTlVMTDsKICAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGUgPSBOVUxMOwpAQCAtMjg1LDEyICs0MjMsMTUgQEAKICAgICAgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSh0aW1lb3V0LCBsb2FkX2hvb2ssIGZyZWVfaG9vaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb290b2lkLCByb290b2lkX2xlbik7CiAgICAgICAgIHJldC0+bXl2b2lkID0gKHZvaWQgKikgY2FjaGU7CisgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKHJldCk7CiAgICAgfQogICAgIHJldHVybiByZXQ7CiB9CiAKIC8qKiBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKSBidXQgYWxzbwogICogaW5qZWN0cyBhIGNhY2hlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfY2FjaGVfaGFuZGxlcl9yZWdpc3RlcixuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NBQ0hFX0hBTkRMRVJfUkVHSVNURVIKIGludAogbmV0c25tcF9jYWNoZV9oYW5kbGVyX3JlZ2lzdGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKiByZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUqIGNhY2hlKQpAQCAtMzAxLDkgKzQ0MiwxMiBAQAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQ0FDSEVfSEFORExFUl9SRUdJU1RFUiAqLwogCiAvKiogZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKCkgYnV0IGFsc28KICAqIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX3JlZ2lzdGVyX2NhY2hlX2hhbmRsZXIsbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9SRUdJU1RFUl9DQUNIRV9IQU5ETEVSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfY2FjaGVfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICogcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywKQEAgLTMxNywxMSArNDYxLDEyIEBACiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKHJlZ2luZm8pOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9SRUdJU1RFUl9DQUNIRV9IQU5ETEVSICovCiAKLU5FVFNOTVBfU1RBVElDX0lOTElORSBjaGFyICoKK3N0YXRpYyBjaGFyICoKIF9idWlsZF9jYWNoZV9uYW1lKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgY2hhciAqZHVwID0gbWFsbG9jKHN0cmxlbihuYW1lKSArIHN0cmxlbihDQUNIRV9OQU1FKSArIDIpOworICAgIGNoYXIgKmR1cCA9IChjaGFyKiltYWxsb2Moc3RybGVuKG5hbWUpICsgc3RybGVuKENBQ0hFX05BTUUpICsgMik7CiAgICAgaWYgKE5VTEwgPT0gZHVwKQogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBzcHJpbnRmKGR1cCwgIiVzOiVzIiwgQ0FDSEVfTkFNRSwgbmFtZSk7CkBAIC0zNTIsMTcgKzQ5NywyMCBAQAogewogICAgIG5ldHNubXBfY2FjaGUgICpyZXN1bHQ7CiAgICAgY2hhciAqY2FjaGVfbmFtZSA9IF9idWlsZF9jYWNoZV9uYW1lKG5hbWUpOwotICAgIHJlc3VsdCA9IG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBjYWNoZV9uYW1lKTsKKyAgICByZXN1bHQgPSAobmV0c25tcF9jYWNoZSopbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIGNhY2hlX25hbWUpOwogICAgIFNOTVBfRlJFRShjYWNoZV9uYW1lKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCiAvKiogRXh0cmFjdCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKSAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfZXh0cmFjdF9jYWNoZV9pbmZvLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfRVhUUkFDVF9DQUNIRV9JTkZPCiBuZXRzbm1wX2NhY2hlICAqCiBuZXRzbm1wX2V4dHJhY3RfY2FjaGVfaW5mbyhuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqIHJlcWluZm8pCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfY2FjaGVfcmVxaW5mb19leHRyYWN0KHJlcWluZm8sIENBQ0hFX05BTUUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTkVUU05NUF9FWFRSQUNUX0NBQ0hFX0lORk8gKi8KIAogCiAvKiogQ2hlY2sgaWYgdGhlIGNhY2hlIHRpbWVvdXQgaGFzIHBhc3NlZC4gU2V0cyBhbmQgcmV0dXJuIHRoZSBleHBpcmVkIGZsYWcuICovCkBAIC0zNzEsMTEgKzUxOSwxMyBAQAogewogICAgIGlmKE5VTEwgPT0gY2FjaGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIAotICAgIGlmKCFjYWNoZS0+dmFsaWQgfHwgKE5VTEwgPT0gY2FjaGUtPnRpbWVzdGFtcCkgfHwgKC0xID09IGNhY2hlLT50aW1lb3V0KSkKKyAgICBpZiAoY2FjaGUtPmV4cGlyZWQpCisgICAgICAgIHJldHVybiAxOworICAgIGlmKCFjYWNoZS0+dmFsaWQgfHwgKE5VTEwgPT0gY2FjaGUtPnRpbWVzdGFtcE0pIHx8ICgtMSA9PSBjYWNoZS0+dGltZW91dCkpCiAgICAgICAgIGNhY2hlLT5leHBpcmVkID0gMTsKICAgICBlbHNlCi0gICAgICAgIGNhY2hlLT5leHBpcmVkID0gYXRpbWVfcmVhZHkoY2FjaGUtPnRpbWVzdGFtcCwgMTAwMCAqIGNhY2hlLT50aW1lb3V0KTsKKyAgICAgICAgY2FjaGUtPmV4cGlyZWQgPSBuZXRzbm1wX3JlYWR5X21vbm90b25pYyhjYWNoZS0+dGltZXN0YW1wTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwICogY2FjaGUtPnRpbWVvdXQpOwogICAgIAogICAgIHJldHVybiBjYWNoZS0+ZXhwaXJlZDsKIH0KQEAgLTQwOSwxMSArNTU5LDE0IEBACiAvKiogSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBhIGdpdmVuIHJlcXVlc3Q/CiAgKiBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuIG5ldHNubXBfY2FjaGVfaXNfdmFsaWQoKSBpcyBwcmVmZXJyZWQuCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihuZXRzbm1wX2lzX2NhY2hlX3ZhbGlkLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfSVNfQ0FDSEVfVkFMSUQKIGludAogbmV0c25tcF9pc19jYWNoZV92YWxpZChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqIHJlcWluZm8pCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfY2FjaGVfaXNfdmFsaWQocmVxaW5mbywgQ0FDSEVfTkFNRSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0lTX0NBQ0hFX1ZBTElEICovCiAKIC8qKiBJbXBsZW1lbnRzIHRoZSBjYWNoZSBoYW5kbGVyICovCiBpbnQKQEAgLTQ0Myw3ICs1OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICJjYWNoZSBub3QgZm91bmQsIGRpc2FibGVkIG9yIGhhZCBubyBsb2FkIG1ldGhvZFxuIikpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICB9Ci0gICAgc25wcmludGYoYWRkcnN0cixzaXplb2YoYWRkcnN0ciksICIlcCIsIGNhY2hlKTsKKyAgICBzbnByaW50ZihhZGRyc3RyLHNpemVvZihhZGRyc3RyKSwgIiVsZCIsIChsb25nIGludCljYWNoZSk7CiAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpjYWNoZV9oYW5kbGVyIiwgInVzaW5nIGNhY2hlICVzOiAiLCBhZGRyc3RyKSk7CiAgICAgREVCVUdNU0dPSUQoKCJoZWxwZXI6Y2FjaGVfaGFuZGxlciIsIGNhY2hlLT5yb290b2lkLCBjYWNoZS0+cm9vdG9pZF9sZW4pKTsKICAgICBERUJVR01TRygoImhlbHBlcjpjYWNoZV9oYW5kbGVyIiwgIlxuIikpOwpAQCAtNDYzLDcgKzYxNiw5IEBACiAgICAgY2FzZSBNT0RFX0dFVDoKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICBjYXNlIE1PREVfR0VUQlVMSzoKLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOiB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIG9ubHkgdG91Y2ggY2FjaGUgb25jZSBwZXIgcGR1IHJlcXVlc3QsIHRvIHByZXZlbnQgYSBjYWNoZQpAQCAtNDc0LDcgKzYyOSw3IEBACiAgICAgICAgICAqIG1heWJlIHVzZSBhIHJlZmVyZW5jZSBjb3VudGVyPwogICAgICAgICAgKi8KICAgICAgICAgaWYgKG5ldHNubXBfY2FjaGVfaXNfdmFsaWQocmVxaW5mbywgYWRkcnN0cikpCi0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNhbGwgdGhlIGxvYWQgaG9vaywgYW5kIHVwZGF0ZSB0aGUgY2FjaGUgdGltZXN0YW1wLgpAQCAtNDgzLDE2ICs2MzgsMTYgQEAKICAgICAgICAgbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKGNhY2hlKTsKICAgICAgICAgbmV0c25tcF9jYWNoZV9yZXFpbmZvX2luc2VydChjYWNoZSwgcmVxaW5mbywgYWRkcnN0cik7CiAgICAgICAgIC8qKiBuZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAqLwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgIG5ldHNubXBfYXNzZXJ0KG5ldHNubXBfY2FjaGVfaXNfdmFsaWQocmVxaW5mbywgYWRkcnN0cikpOwogICAgICAgICAvKiogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEEgKHN1Y2Nlc3NmdWwpIFNFVCByZXF1ZXN0IHdvdWxkbid0IHR5cGljYWxseSB0cmlnZ2VyIGEgcmVsb2FkIG9mCkBAIC01MDYsNyArNjYxLDggQEAKICAgICAgICAgICAgIGNhY2hlLT52YWxpZCA9IDA7CiAgICAgICAgIH0KICAgICAgICAgLyoqIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCi0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiY2FjaGVfaGFuZGxlcjogVW5yZWNvZ25pc2VkIG1vZGUgKCVkKVxuIiwKQEAgLTUxNCw4ICs2NzAsOSBAQAogICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9FUlJfR0VORVJSKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9Ci0gICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7Ci0gICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsgICAgIC8qIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworICAgIGlmIChjYWNoZS0+ZmxhZ3MgJiBORVRTTk1QX0NBQ0hFX1JFU0VUX1RJTUVSX09OX1VTRSkKKyAgICAgICAgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigmY2FjaGUtPnRpbWVzdGFtcE0pOworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCiBzdGF0aWMgdm9pZApAQCAtNTU5LDEwICs3MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHJlbGVhc2VfY2FjaGVkX3Jlc291cmNlcywgTlVMTCk7CiAgICAgICAgIGNhY2hlX291dHN0YW5kaW5nX3ZhbGlkID0gMTsKICAgICB9Ci0gICAgaWYgKGNhY2hlLT50aW1lc3RhbXApCi0gICAgICAgIGF0aW1lX3NldE1hcmtlcihjYWNoZS0+dGltZXN0YW1wKTsKLSAgICBlbHNlCi0gICAgICAgIGNhY2hlLT50aW1lc3RhbXAgPSBhdGltZV9uZXdNYXJrZXIoKTsKKyAgICBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCZjYWNoZS0+dGltZXN0YW1wTSk7CiAgICAgREVCVUdNU0dUKCgiaGVscGVyOmNhY2hlX2hhbmRsZXIiLCAiIGxvYWRlZCAoJWQpXG4iLCBjYWNoZS0+dGltZW91dCkpOwogCiAgICAgcmV0dXJuIHJldDsKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvZGVidWdfaGFuZGxlci5jIGIvYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMKaW5kZXggNGUzNTY5NS4uZTRhODQzOCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMKKysrIGIvYWdlbnQvaGVscGVycy9kZWJ1Z19oYW5kbGVyLmMKQEAgLTksMTMgKzksNiBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNTMsOCArNDYsMTQgQEAKICAgICByZXR1cm4gbmV0c25tcF9jcmVhdGVfaGFuZGxlcigiZGVidWciLCBuZXRzbm1wX2RlYnVnX2hlbHBlcik7CiB9CiAKKyNpZmRlZiBORVRTTk1QX05PX0RFQlVHR0lORworCisjZGVmaW5lIGRlYnVnX3ByaW50X3JlcXVlc3RzKHgpCisKKyNlbHNlIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCisKIC8qKiBAaW50ZXJuYWwgZGVidWcgcHJpbnQgdmFyaWFibGVzIGluIGEgY2hhaW4gKi8KLXZvaWQKK3N0YXRpYyB2b2lkCiBkZWJ1Z19wcmludF9yZXF1ZXN0cyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CkBAIC04Miw2ICs4MSw3IEBACiAgICAgfQogfQogCisjZW5kaWYgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KIAogLyoqIEBpbnRlcm5hbCBJbXBsZW1lbnRzIHRoZSBkZWJ1ZyBoYW5kbGVyICovCiBpbnQKQEAgLTkwLDYwICs5MCw2NyBAQAogICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCiAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CisgICAgaW50IHJldDsKIAotICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhwdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGksIHJldCwgY291bnQ7Ci0gICAgY2hhciAgICAgICAgICAgKmNwOworICAgIERFQlVHSUYoImhlbHBlcjpkZWJ1ZyIpIHsKKyAgICAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaHB0cjsKKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICAqY3A7CisgICAgICAgIGludCAgICAgICAgICAgICAgICAgIGksIGNvdW50OwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICJFbnRlcmluZyBEZWJ1Z2dpbmcgSGVscGVyOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBIYW5kbGVyIFJlZ2lzdHJhdGlvbiBJbmZvOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE5hbWU6ICAgICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSkpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIENvbnRleHQ6ICAgICAlc1xuIiwKLSAgICAgICAgICAgICAgICBTTk1QX1NUUk9STlVMTChyZWdpbmZvLT5jb250ZXh0TmFtZSkpKTsKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBCYXNlIE9JRDogICAgIikpOwotICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOmRlYnVnIiwgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4pKTsKLSAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICJFbnRlcmluZyBEZWJ1Z2dpbmcgSGVscGVyOlxuIikpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgSGFuZGxlciBSZWdpc3RyYXRpb24gSW5mbzpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgTmFtZTogICAgICAgICVzXG4iLAorICAgICAgICAgICAgICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBDb250ZXh0OiAgICAgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIFNOTVBfU1RST1JOVUxMKHJlZ2luZm8tPmNvbnRleHROYW1lKSkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBCYXNlIE9JRDogICAgIikpOworICAgICAgICBERUJVR01TR09JRCgoImhlbHBlcjpkZWJ1ZyIsIHJlZ2luZm8tPnJvb3RvaWQsIHJlZ2luZm8tPnJvb3RvaWRfbGVuKSk7CisgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIlxuIikpOwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgTW9kZXM6ICAgICAgIDB4JXggPSAiLAotICAgICAgICAgICAgICAgIHJlZ2luZm8tPm1vZGVzKSk7Ci0gICAgZm9yIChjb3VudCA9IDAsIGkgPSByZWdpbmZvLT5tb2RlczsgaTsgaSA9IGkgPj4gMSwgY291bnQrKykgewotICAgICAgICBpZiAoaSAmIDB4MDEpIHsKLSAgICAgICAgICAgIGNwID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiaGFuZGxlcl9jYW5fbW9kZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAxIDw8IGNvdW50KTsKLSAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOmRlYnVnIiwgIiVzIHwgIiwgU05NUF9TVFJPUk5VTEwoY3ApKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE1vZGVzOiAgICAgICAweCV4ID0gIiwKKyAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+bW9kZXMpKTsKKyAgICAgICAgZm9yIChjb3VudCA9IDAsIGkgPSByZWdpbmZvLT5tb2RlczsgaTsgaSA9IGkgPj4gMSwgY291bnQrKykgeworICAgICAgICAgICAgaWYgKGkgJiAweDAxKSB7CisgICAgICAgICAgICAgICAgY3AgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJoYW5kbGVyX2Nhbl9tb2RlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMSA8PCBjb3VudCk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiJXMgfCAiLCBTTk1QX1NUUk9STlVMTChjcCkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQorICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKKworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBQcmlvcml0eTogICAgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnByaW9yaXR5KSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIEhhbmRsZXIgQ2FsbGluZyBDaGFpbjpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAiKSk7CisgICAgICAgIGZvciAoaHB0ciA9IHJlZ2luZm8tPmhhbmRsZXI7IGhwdHI7IGhwdHIgPSBocHRyLT5uZXh0KSB7CisgICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICIgLT4gJXMiLCBocHRyLT5oYW5kbGVyX25hbWUpKTsKKyAgICAgICAgICAgIGlmIChocHRyLT5teXZvaWQpCisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiIFtteXZvaWQgPSAlcF0iLCBocHRyLT5teXZvaWQpKTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKKworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgUmVxdWVzdCBpbmZvcm1hdGlvbjpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgTW9kZTogICAgICAgICVzICglZCA9IDB4JXgpXG4iLAorICAgICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCisgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUsIHJlcWluZm8tPm1vZGUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmVxdWVzdCBWYXJpYWJsZXM6XG4iKSk7CisgICAgICAgIGRlYnVnX3ByaW50X3JlcXVlc3RzKHJlcXVlc3RzKTsKKworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgLS0tIGNhbGxpbmcgbmV4dCBoYW5kbGVyIC0tLSBcbiIpKTsKICAgICB9Ci0gICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiXG4iKSk7CiAKLSAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBQcmlvcml0eTogICAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVnaW5mby0+cHJpb3JpdHkpKTsKLQotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBIYW5kbGVyIENhbGxpbmcgQ2hhaW46XG4iKSk7Ci0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAiKSk7Ci0gICAgZm9yIChocHRyID0gcmVnaW5mby0+aGFuZGxlcjsgaHB0cjsgaHB0ciA9IGhwdHItPm5leHQpIHsKLSAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6ZGVidWciLCAiIC0+ICVzIiwgaHB0ci0+aGFuZGxlcl9uYW1lKSk7Ci0gICAgICAgIGlmIChocHRyLT5teXZvaWQpCi0gICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICIgW215dm9pZCA9ICV4XSIsIGhwdHItPm15dm9pZCkpOwotICAgIH0KLSAgICBERUJVR01TRygoImhlbHBlcjpkZWJ1ZyIsICJcbiIpKTsKLQotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICBSZXF1ZXN0IGluZm9ybWF0aW9uOlxuIikpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIE1vZGU6ICAgICAgICAlcyAoJWQgPSAweCV4KVxuIiwKLSAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSksCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSwgcmVxaW5mby0+bW9kZSkpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJlcXVlc3QgVmFyaWFibGVzOlxuIikpOwotICAgIGRlYnVnX3ByaW50X3JlcXVlc3RzKHJlcXVlc3RzKTsKLQotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAtLS0gY2FsbGluZyBuZXh0IGhhbmRsZXIgLS0tIFxuIikpOwogICAgIHJldCA9IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywgcmVxdWVzdHMpOwogCi0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgIFJlc3VsdHM6XG4iKSk7Ci0gICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmV0dXJuZWQgY29kZTogJWRcbiIsIHJldCkpOwotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiICAgIFJldHVybmVkIFZhcmlhYmxlczpcbiIpKTsKLSAgICBkZWJ1Z19wcmludF9yZXF1ZXN0cyhyZXF1ZXN0cyk7CisgICAgREVCVUdJRigiaGVscGVyOmRlYnVnIikgeworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgUmVzdWx0czpcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpkZWJ1ZyIsICIgICAgUmV0dXJuZWQgY29kZTogJWRcbiIsIHJldCkpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIiAgICBSZXR1cm5lZCBWYXJpYWJsZXM6XG4iKSk7CisgICAgICAgIGRlYnVnX3ByaW50X3JlcXVlc3RzKHJlcXVlc3RzKTsKIAotICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6ZGVidWciLCAiRXhpdGluZyBEZWJ1Z2dpbmcgSGVscGVyOlxuIikpOworICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOmRlYnVnIiwgIkV4aXRpbmcgRGVidWdnaW5nIEhlbHBlcjpcbiIpKTsKKyAgICB9CisKICAgICByZXR1cm4gcmV0OwogfQogCkBAIC0xNTcsNCArMTY0LDMgQEAKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJfYnlfbmFtZSgiZGVidWciLCBuZXRzbm1wX2dldF9kZWJ1Z19oYW5kbGVyKCkpOwogfQogLyoqICBAfSAqLwotCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2R1bW15LmMgYi9hZ2VudC9oZWxwZXJzL2R1bW15LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk3OWFlNAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L2hlbHBlcnMvZHVtbXkuYwpAQCAtMCwwICsxIEBACitjaGFyIGNvbnN0IG5ldHNubXBfaGVscGVyc19kdW1teV90ZXh0W10gPSAiZHVtbXkgc3ltYm9sIHRvIG1ha2Ugc3VyZSB0aGF0IGxpbmtpbmcgbmV0c25tcGhlbHBlcnMgZG9lcyBub3QgZmFpbCBvbiBzeXN0ZW1zIHRoYXQgZG8gbm90IHN1cHBvcnQgZW1wdHkgbGlicmFyaWVzLiI7CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMgYi9hZ2VudC9oZWxwZXJzL2luc3RhbmNlLmMKaW5kZXggNWM5ZTE2ZC4uYTVlZTg0MSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9pbnN0YW5jZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvaW5zdGFuY2UuYwpAQCAtOSw2ICs5LDEyIEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZiBIQVZFX1NUUklOR19ICkBAIC0xOCwxNiArMjQsMTcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KIAorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoaW5zdGFuY2UpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5zdGFuY2UsIG1pYl9oZWxwZXJzKQorCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX251bV9maWxlX2luc3RhbmNlX3MgeworICAgIGludCAgIHJlZmNudDsKICAgICBjaGFyICpmaWxlX25hbWU7CiAgICAgRklMRSAqZmlsZXA7Ci0gICAgaW50ICAgdHlwZTsKKyAgICB1X2NoYXIgdHlwZTsKICAgICBpbnQgICBmbGFnczsKIH0gbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZTsKIApAQCAtMzcsNiArNDQsMjIgQEAKICAqICBAewogICovCiAKK3N0YXRpYyBuZXRzbm1wX251bV9maWxlX2luc3RhbmNlICoKK25ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfcmVmKG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2UgKm5maSkKK3sKKyAgICBuZmktPnJlZmNudCsrOworICAgIHJldHVybiBuZmk7Cit9CisKK3N0YXRpYyB2b2lkCituZXRzbm1wX251bV9maWxlX2luc3RhbmNlX2RlcmVmKG5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2UgKm5maSkKK3sKKyAgICBpZiAoLS1uZmktPnJlZmNudCA9PSAwKSB7CisJZnJlZShuZmktPmZpbGVfbmFtZSk7CisJZnJlZShuZmkpOworICAgIH0KK30KKwogLyoqCiAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLCBjYWxscyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyLCB3aGljaAogICogdGhlbiBjb3VsZCBiZSByZWdpc3RlcmVkLCB1c2luZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKS4KQEAgLTEwOCw4ICsxMzEsOCBAQAogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiBnZXRfcmVnKGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgIGNvbnN0IGNoYXIgKm91cm5hbWUsCi0gICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKLSAgICAgICAgdm9pZCAqaXQsCisgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZSAqaXQsCiAgICAgICAgIGludCBtb2RlcywKICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzY2FsYXJoLCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQpAQCAtMTI0LDcgKzE0Nyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVzKTsKICAgICAgICAgbXloYW5kbGVyID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcihvdXJuYW1lLCBzY2FsYXJoKTsKLSAgICAgICAgbXloYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKSBpdDsKKyAgICAgICAgbXloYW5kbGVyLT5teXZvaWQgPSBpdDsKKwlteWhhbmRsZXItPmRhdGFfY2xvbmUgPSAodm9pZCooKikodm9pZCopKW5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfcmVmOworCW15aGFuZGxlci0+ZGF0YV9mcmVlID0gKHZvaWQoKikodm9pZCopKW5ldHNubXBfbnVtX2ZpbGVfaW5zdGFuY2VfZGVyZWY7CiAgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIobXlyZWcsIG15aGFuZGxlcik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbXlyZWcgPQpAQCAtMTMyLDcgKzE1NywxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NhbGFyaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kZXMpOwotICAgICAgICBteXJlZy0+aGFuZGxlci0+bXl2b2lkID0gKHZvaWQgKikgaXQ7CisgICAgICAgIG15cmVnLT5oYW5kbGVyLT5teXZvaWQgPSBpdDsKKwlteXJlZy0+aGFuZGxlci0+ZGF0YV9jbG9uZQorCSAgICA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX251bV9maWxlX2luc3RhbmNlX3JlZjsKKwlteXJlZy0+aGFuZGxlci0+ZGF0YV9mcmVlCisJICAgID0gKHZvaWQgKCopKHZvaWQgKikpbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9kZXJlZjsKICAgICB9CiAgICAgaWYgKGNvbnRleHROYW1lKQogICAgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOwpAQCAtMTQwLDI1NSArMTY5LDMxOCBAQAogfQogCiAvKiBXYXRjaGVkICdsb25nJyBpbnN0YW5jZXMgYXJlIHdyaXRhYmxlIG9uIGJvdGggMzItYml0IGFuZCA2NC1iaXQgc3lzdGVtcyAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfdWxvbmdfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX1VMT05HX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwKKyAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX1VMT05HX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bG9uZ19pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTE9OR19JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VMT05HX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9DT1VOVEVSMzJfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAiY291bnRlcjMyX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX2NvdW50ZXIzMl9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwKKyAgICAgICAgICAgICAgICAgICBBU05fQ09VTlRFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfQ09VTlRFUjMyX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfbG9uZ19pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfTE9OR19JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJsb25nX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGxvbmcpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfTE9OR19JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9uZ19pbnN0YW5jZSxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT05HX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUldSSVRFKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YobG9uZyksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPTkdfSU5TVEFOQ0UgKi8KIAogLyogV2F0Y2hlZCAnaW50JyBpbnN0YW5jZXMgYXJlIG9ubHkgd3JpdGFibGUgb24gMzItYml0IHN5c3RlbXMgICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X3VpbnRfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX1VJTlRfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1aW50X2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVuc2lnbmVkIGludCksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9VSU5UX0lOU1RBTkNFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1aW50X2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VJTlRfSU5TVEFOQ0UKIGludAogbmV0c25tcF9yZWdpc3Rlcl91aW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgInVpbnRfaGFuZGxlciIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBpdCwKLSAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCBuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgTlVMTCk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSksCisgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVuc2lnbmVkIGludCksCisgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VJTlRfSU5TVEFOQ0UgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfb25seV9pbnRfaW5zdGFuY2UsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAiaW50X2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCBuZXRzbm1wX2luc3RhbmNlX2ludF9oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBOVUxMKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoaW50KSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRSAqLwogCiAgIC8qCiAgICAqIENvbXBhdGliaWxpdHkgd2l0aCBlYXJsaWVyIChpbmNvbnNpc3RlbnRseSBuYW1lZCkgcm91dGluZQogICAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlLG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9JTlRfSU5TVEFOQ0UKIGludAogcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewogICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlKG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdCwgc3ViaGFuZGxlcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfSU5UX0lOU1RBTkNFICovCiAKIC8qCiAgKiBDb250ZXh0IHJlZ2lzdHJhdGlvbnMKICAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX1VMT05HX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKQogewotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnOwotCi0gICAgbXlyZWcgPSBnZXRfcmVnKG5hbWUsICJ1bG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlKG15cmVnKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZyA9CisgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICBuYW1lLCBzdWJoYW5kbGVyLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9VTE9OR19JTlNUQU5DRV9DT05URVhUICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1VMT05HX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgInVsb25nX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgaXQsCi0gICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YodV9sb25nKSwgQVNOX1VOU0lHTkVELCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1VMT05HX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfQ09VTlRFUjMyX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImNvdW50ZXIzMl9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9jb3VudGVyMzJfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKHVfbG9uZyksIEFTTl9DT1VOVEVSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9DT1VOVEVSMzJfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dCxpbnN0YW5jZSkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9SRUFEX09OTFlfTE9OR19JTlNUQU5DRV9DT05URVhUCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKG15cmVnICYmIGNvbnRleHROYW1lKQorICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgbXlyZWcsIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihsb25nKSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUkVBRF9PTkxZX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfbG9uZ19pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKIHsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKLQotICAgIG15cmVnID0gZ2V0X3JlZyhuYW1lLCAibG9uZ19oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLCBjb250ZXh0TmFtZSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobXlyZWcpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15cmVnID0KKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworICAgIGlmIChteXJlZyAmJiBjb250ZXh0TmFtZSkKKyAgICAgIG15cmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZTIoCisgICAgICAgIG15cmVnLCBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YobG9uZyksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0xPTkdfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfaW50X2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfSU5UX0lOU1RBTkNFX0NPTlRFWFQKIGludAogbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JXUklURSk7CisgICAgaWYgKG15cmVnICYmIGNvbnRleHROYW1lKQorICAgICAgbXlyZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgbXlyZWcsIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKKyAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihpbnQpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9JTlRfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0LGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9JTlRfSU5TVEFOQ0VfQ09OVEVYVAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgbmV0c25tcF9pbnN0YW5jZV9pbnRfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwgY29udGV4dE5hbWUpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShteXJlZyk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWcgPQorICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwgcmVnX29pZCwgcmVnX29pZF9sZW4sIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAobXlyZWcgJiYgY29udGV4dE5hbWUpCisgICAgICBteXJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKAorICAgICAgICBteXJlZywgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKGludCksIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9JTlRfSU5TVEFOQ0VfQ09OVEVYVCAqLwogCiAvKgogICogQ29tcGF0aWJpbGl0eSB3aXRoIGVhcmxpZXIgKGluY29uc2lzdGVudGx5IG5hbWVkKSByb3V0aW5lCiAgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWFkX29ubHlfaW50X2luc3RhbmNlX2NvbnRleHQsaW5zdGFuY2UpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9PTkxZX0lOVF9JTlNUQU5DRV9DT05URVhUCiBpbnQKIHJlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICppdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpCkBAIC0zOTgsNyArNDkwLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0LCBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfSU5UX0lOU1RBTkNFX0NPTlRFWFQgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX05VTV9GSUxFX0lOU1RBTkNFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbnVtX2ZpbGVfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLApAQCAtNDIzLDExICs1MTgsMTIgQEAKICAgICAgICAgcmV0dXJuIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVEOwogICAgIH0KIAorICAgIG5maS0+cmVmY250ID0gMTsKICAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImZpbGVfbnVtX2hhbmRsZXIiLCByZWdfb2lkLCByZWdfb2lkX2xlbiwgbmZpLAogICAgICAgICAgICAgICAgICAgICBtb2RlLCBuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIGNvbnRleHROYW1lKTsKICAgICBpZiAoTlVMTCA9PSBteXJlZykgewotICAgICAgICBmcmVlKG5maSk7IC8qIFNOTVBfRlJFRSBvdmVya2lsbCBvbiBsb2NhbCB2YXIgKi8KKyAgICAgICAgbmV0c25tcF9udW1fZmlsZV9pbnN0YW5jZV9kZXJlZihuZmkpOwogICAgICAgICByZXR1cm4gTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQ7CiAgICAgfQogCkBAIC00MzgsNyArNTM0LDEwIEBACiAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShteXJlZyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9OVU1fRklMRV9JTlNUQU5DRSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfaW50X2luc3RhbmNlLGluc3RhbmNlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX0lOVF9JTlNUQU5DRQogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbiBpbnQgaGVscGVyIGhhbmRsZXIgdG8gYSBzcGVjaWZpZWQgT0lELgogICoKQEAgLTQ1OSwyODQgKzU1OCwyNSBAQAogICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlyZWc7Ci0KLSAgICBteXJlZyA9IGdldF9yZWcobmFtZSwgImludF9oYW5kbGVyIiwgcmVnX29pZCwgcmVnX29pZF9sZW4sIGl0LAotICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIG5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsIE5VTEwpOwotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG15cmVnKTsKKyAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlMigKKyAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpLAorICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZihpbnQpLCBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9JTlRfSU5TVEFOQ0UgKi8KIAotaW50Ci1uZXRzbm1wX2luc3RhbmNlX3Vsb25nX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKKyNpZmRlZiBIQVZFX0RNQUxMT0NfSAorc3RhdGljIHZvaWQgZnJlZV93cmFwcGVyKHZvaWQgKiBwKQogewotCi0gICAgdV9sb25nICAgICAgICAgKml0ID0gKHVfbG9uZyAqKSBoYW5kbGVyLT5teXZvaWQ7Ci0gICAgdV9sb25nICAgICAgICAgKml0X3NhdmU7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyIiwgIkdvdCByZXF1ZXN0OiAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOwotCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGRhdGEgcmVxdWVzdHMgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9HRVQ6Ci0gICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fVU5TSUdORUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGl0LCBzaXplb2YoKml0KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgotICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSAhPSBBU05fVU5TSUdORUQpCi0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR1RZUEUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAotICAgICAgICAgKi8KLSAgICAgICAgaXRfc2F2ZSA9IG5ldHNubXBfbWVtZHVwKGl0LCBzaXplb2YodV9sb25nKSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIHVfbG9uZyAlbHUgLT4gJWx1XG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9ICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IQU5ETEVSX05BTUUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQotICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7Ci0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBmcmVlKHApOwogfQotCi1pbnQKLW5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIHVfbG9uZyAgICAgICAgICppdCA9ICh1X2xvbmcgKikgaGFuZGxlci0+bXl2b2lkOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXIiLAotICAgICAgICAgICAgICAgICJHb3QgcmVxdWVzdDogICVkXG4iLCByZXFpbmZvLT5tb2RlKSk7Ci0KLSAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZGF0YSByZXF1ZXN0cyAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX0dFVDoKLSAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBpdCwgc2l6ZW9mKCppdCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgZGVmYXVsdDoKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgIm5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXI6IGlsbGVnYWwgbW9kZVxuIik7Ci0gICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotICAgIH0KLSAgICBpZiAoaGFuZGxlci0+bmV4dCAmJiBoYW5kbGVyLT5uZXh0LT5hY2Nlc3NfbWV0aG9kKQotICAgICAgICByZXR1cm4gbmV0c25tcF9jYWxsX25leHRfaGFuZGxlcihoYW5kbGVyLCByZWdpbmZvLCByZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7Ci0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Ci0KLWludAotbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIGxvbmcgICAgICAgICAgICppdCA9IChsb25nICopIGhhbmRsZXItPm15dm9pZDsKLSAgICBsb25nICAgICAgICAgICAqaXRfc2F2ZTsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlciIsICJHb3QgcmVxdWVzdDogICVkXG4iLAotICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKLQotICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewotICAgICAgICAvKgotICAgICAgICAgKiBkYXRhIHJlcXVlc3RzIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfR0VUOgotICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGl0LCBzaXplb2YoKml0KSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAotICAgICAgICAgKi8KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgotICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSAhPSBBU05fSU5URUdFUikKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HVFlQRSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKLSAgICAgICAgLyoKLSAgICAgICAgICogc3RvcmUgb2xkIGluZm8gZm9yIHVuZG8gbGF0ZXIgCi0gICAgICAgICAqLwotICAgICAgICBpdF9zYXZlID0gbmV0c25tcF9tZW1kdXAoaXQsIHNpemVvZihsb25nKSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIHVfbG9uZyAlbHUgLT4gJWx1XG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9ICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IQU5ETEVSX05BTUUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi1pbnQKLW5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIGludCAqaXQgPSAoaW50ICopIGhhbmRsZXItPm15dm9pZDsKLSAgICBpbnQgKml0X3NhdmU7Ci0gICAgbG9uZyB0bXBfaXQ7Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXIiLCAiR290IHJlcXVlc3Q6ICAlZFxuIiwKLSAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKSk7Ci0KLSAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogZGF0YSByZXF1ZXN0cyAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX0dFVDoKLQkvKgotCSAqIFVzZSBhIGxvbmcgaGVyZSwgb3RoZXJ3aXNlIG9uIDY0IGJpdCB1c2Ugb2YgYW4gaW50IHdvdWxkIGZhaWwKLQkgKi8KLQl0bXBfaXQgPSAqaXQ7Ci0gICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJnRtcF9pdCwgc2l6ZW9mKHRtcF9pdCkpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX0lOVEVHRVIpCi0gICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9XUk9OR1RZUEUpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAotICAgICAgICAgKi8KLSAgICAgICAgaXRfc2F2ZSA9IG5ldHNubXBfbWVtZHVwKGl0LCBzaXplb2YoaW50KSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIGludCAlZCAtPiAlbGRcbiIsICppdCwKLSAgICAgICAgICAgICAgICAgICAgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikpKTsKLSAgICAgICAgKml0ID0gKGludCkgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9VTkRPOgotICAgICAgICAqaXQgPQotICAgICAgICAgICAgKigodV9pbnQgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJTlNUQU5DRV9IQU5ETEVSX05BTUUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG5vdGhpbmcgdG8gZG8gCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgaWYgKGhhbmRsZXItPm5leHQgJiYgaGFuZGxlci0+bmV4dC0+YWNjZXNzX21ldGhvZCkKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorI2Vsc2UKKyNkZWZpbmUgZnJlZV93cmFwcGVyIGZyZWUKKyNlbmRpZgogCiBpbnQKIG5ldHNubXBfaW5zdGFuY2VfbnVtX2ZpbGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLApAQCAtNzQ1LDcgKzU4NSwxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBuZXRzbm1wX251bV9maWxlX2luc3RhbmNlICpuZmk7Ci0gICAgdV9sb25nIGl0LCAqaXRfc2F2ZTsKKyAgICB1X2xvbmcgaXQ7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgIHVfbG9uZyAqaXRfc2F2ZTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBpbnQgcmM7CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGhhbmRsZXIpOwpAQCAtNzg3LDYgKzYzMCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCA9PSBuZmktPmZpbGVwKTsKICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gbmZpLT50eXBlKQpAQCAtODIxLDcgKzY2NSw3IEBACiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKElOU1RBTkNFX0hBTkRMRVJfTkFNRSwgaXRfc2F2ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmVlX3dyYXBwZXIpKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTg1OSw2ICs3MDMsMTIgQEAKICAgICAgICAgICAgIG5maS0+ZmlsZXAgPSBOVUxMOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXI6IGlsbGVnYWwgbW9kZVxuIik7CisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgIH0KIAogICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCkBAIC04NjgsODYgKzcxOCw2IEBACiB9CiAKIGludAotbmV0c25tcF9pbnN0YW5jZV91aW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKLXsKLQotICAgIHVuc2lnbmVkIGludCAqaXQgPSAodW5zaWduZWQgaW50ICopIGhhbmRsZXItPm15dm9pZDsKLSAgICB1bnNpZ25lZCBpbnQgKml0X3NhdmU7Ci0gICAgdW5zaWduZWQgbG9uZyB0bXBfaXQ7Ci0gICAgCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaW5zdGFuY2VfdWludF9oYW5kbGVyIiwgIkdvdCByZXF1ZXN0OiAgJWRcbiIsCi0gICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSkpOwotCi0gICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGRhdGEgcmVxdWVzdHMgCi0gICAgICAgICAqLwotICAgIGNhc2UgTU9ERV9HRVQ6Ci0JLyoKLQkgKiBVc2UgYSBsb25nIGhlcmUsIG90aGVyd2lzZSBvbiA2NCBiaXQgdXNlIG9mIGFuIGludCB3b3VsZCBmYWlsCi0JICovCi0JdG1wX2l0ID0gKml0OwotICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX1VOU0lHTkVELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmdG1wX2l0LCBzaXplb2YodW5zaWduZWQgbG9uZykpOwotICAgICAgICBicmVhazsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTRVQgcmVxdWVzdHMuICBTaG91bGQgb25seSBnZXQgaGVyZSBpZiByZWdpc3RlcmVkIFJXUklURSAKLSAgICAgICAgICovCi0gICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKLSAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX1VOU0lHTkVEKQotICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfV1JPTkdUWVBFKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgotICAgICAgICAvKgotICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlciAKLSAgICAgICAgICovCi0gICAgICAgIGl0X3NhdmUgPSBuZXRzbm1wX21lbWR1cChpdCwgc2l6ZW9mKHVfaW50KSk7Ci0gICAgICAgIGlmIChpdF9zYXZlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci0gICAgICAgIH0KLSAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoSU5TVEFOQ0VfSEFORExFUl9OQU1FLCBpdF9zYXZlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgotICAgICAgICAvKgotICAgICAgICAgKiB1cGRhdGUgY3VycmVudCAKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIHVpbnQgJWQgLT4gJWxkXG4iLCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpKSk7Ci0gICAgICAgICppdCA9ICh1bnNpZ25lZCBpbnQpICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKLSAgICAgICAgKml0ID0KLSAgICAgICAgICAgICooKHVfaW50ICopIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5TVEFOQ0VfSEFORExFUl9OQU1FKSk7Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6Ci0gICAgY2FzZSBNT0RFX1NFVF9GUkVFOgotICAgICAgICAvKgotICAgICAgICAgKiBub3RoaW5nIHRvIGRvIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCi0gICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotaW50CiBuZXRzbm1wX2luc3RhbmNlX2hlbHBlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLApAQCAtOTc5LDYgKzc0OSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtOTk0LDYgKzc2NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKICAgICAgICAgaWYgKGNtcCA8IDAgfHwgKGNtcCA9PSAwICYmIHJlcXVlc3RzLT5pbmNsdXNpdmUpKSB7CkBAIC0xMDE5LDYgKzc5MSwxMSBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgIm5ldHNubXBfaW5zdGFuY2VfaGVscGVyX2hhbmRsZXI6IGlsbGVnYWwgbW9kZVxuIik7CisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgIH0KICAgICAvKgogICAgICAqIGdvdCBoZXJlIG9ubHkgaWYgaWxsZWdhbCBtb2RlIGZvdW5kIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9tb2RlX2VuZF9jYWxsLmMgYi9hZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYwppbmRleCA5MTJmNThjLi4wYmZjYzY5IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYworKysgYi9hZ2VudC9oZWxwZXJzL21vZGVfZW5kX2NhbGwuYwpAQCAtOSwxMiArOSwxNyBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKG1vZGVfZW5kX2NhbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobW9kZV9lbmRfY2FsbCwgbWliX2hlbHBlcnMpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NT0RFX0VORF9DQUxMCiAvKiogQGRlZmdyb3VwIG1vZGVfZW5kX2NhbGwgbW9kZV9lbmRfY2FsbAogICogIEF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGNhbGwgYW5vdGhlciBoYW5kbGVyIGhvb2suCiAgKiAgSGFuZGxlcnMgdGhhdCB3YW50IHRvIGxvb3AgdGhyb3VnaCBhIHNlcmllcyBvZiByZXF1ZXN0cyBhbmQgdGhlbgpAQCAtMTAxLDcgKzEwNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cyk7CiAKICAgICAvKiB0aGVuIGNhbGwgdGhlIGNhbGxiYWNrIGhhbmRsZXJzICovCi0gICAgZm9yKHB0ciA9IGhhbmRsZXItPm15dm9pZDsgcHRyOyBwdHIgPSBwdHItPm5leHQpIHsKKyAgICBmb3IgKHB0ciA9IChuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0KiloYW5kbGVyLT5teXZvaWQ7IHB0cjsgcHRyID0gcHRyLT5uZXh0KSB7CiAgICAgICAgIGlmIChwdHItPm1vZGUgPT0gTkVUU05NUF9NT0RFX0VORF9BTExfTU9ERVMgfHwKICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUgPT0gcHRyLT5tb2RlKSB7CiAgICAgICAgICAgICByZXQyID0gbmV0c25tcF9jYWxsX2hhbmRsZXIocHRyLT5jYWxsYmFja19oYW5kbGVyLCByZWdpbmZvLApAQCAtMTEzLDUgKzExOCwxMCBAQAogICAgIAogICAgIHJldHVybiByZXQyOwogfQorI2Vsc2UKK25ldHNubXBfZmVhdHVyZV91bnVzZWQobW9kZV9lbmRfY2FsbCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NT0RFX0VORF9DQUxMICovCisKKwogLyoqICBAfSAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMgYi9hZ2VudC9oZWxwZXJzL211bHRpcGxleGVyLmMKaW5kZXggZTU0M2Y1Ny4uMmE3YTY2NCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy9tdWx0aXBsZXhlci5jCisrKyBiL2FnZW50L2hlbHBlcnMvbXVsdGlwbGV4ZXIuYwpAQCAtODQsNiArODQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTEwMCw2ICsxMDEsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IHByb2Nlc3MgU0VUcyBzcGVjaWFsbHksIGFuZCBwb3NzaWJseSBvdGhlcnMgCiAgICAgICAgICAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bnN1cHBvcnRlZCBtb2RlIGZvciBtdWx0aXBsZXhlcjogJWRcbiIsCiAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9udWxsLmMgYi9hZ2VudC9oZWxwZXJzL251bGwuYwppbmRleCBkMTEwZWI4Li45N2RmYzkyIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL251bGwuYworKysgYi9hZ2VudC9oZWxwZXJzL251bGwuYwpAQCAtMSwxNiArMSwxNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbnVsbC5oPgorCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L251bGwuaD4KLQogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX251bGwob2lkICogbG9jLCBzaXplX3QgbG9jX2xlbikKIHsKQEAgLTIzLDE0ICsyMywxNiBAQAogewogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CiAgICAgcmVnaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbik7Ci0gICAgcmVnaW5mby0+aGFuZGxlck5hbWUgPSBzdHJkdXAoIiIpOwotICAgIHJlZ2luZm8tPnJvb3RvaWQgPSBsb2M7Ci0gICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gPSBsb2NfbGVuOwotICAgIHJlZ2luZm8tPmhhbmRsZXIgPQotICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJudWxsIiwgbmV0c25tcF9udWxsX2hhbmRsZXIpOwotICAgIGlmIChjb250ZXh0TmFtZSkKLSAgICAgICAgcmVnaW5mby0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOwotICAgIHJlZ2luZm8tPm1vZGVzID0gSEFORExFUl9DQU5fREVGQVVMVDsKKyAgICBpZiAocmVnaW5mbyAhPSBOVUxMKSB7CisgICAgICAgIHJlZ2luZm8tPmhhbmRsZXJOYW1lID0gc3RyZHVwKCIiKTsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IGxvYzsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gPSBsb2NfbGVuOworICAgICAgICByZWdpbmZvLT5oYW5kbGVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoIm51bGwiLCBuZXRzbm1wX251bGxfaGFuZGxlcik7CisgICAgICAgIGlmIChjb250ZXh0TmFtZSkKKyAgICAgICAgICAgIHJlZ2luZm8tPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKyAgICAgICAgcmVnaW5mby0+bW9kZXMgPSBIQU5ETEVSX0NBTl9ERUZBVUxUIHwgSEFORExFUl9DQU5fR0VUQlVMSzsKKyAgICB9CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9vbGRfYXBpLmMgYi9hZ2VudC9oZWxwZXJzL29sZF9hcGkuYwppbmRleCA2ZTM2Nzc2Li5kMmI5OWQ5IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL29sZF9hcGkuYworKysgYi9hZ2VudC9oZWxwZXJzL29sZF9hcGkuYwpAQCAtMSwxOSArMSwzMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oPgorCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L29sZF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaD4KIAorI2luY2x1ZGUgPHN0ZGRlZi5oPgorCiAjZGVmaW5lIE1JQl9DTElFTlRTX0FSRV9FVklMIDEKIAorI2lmZGVmIEhBVkVfRE1BTExPQ19ICitzdGF0aWMgdm9pZCBmcmVlX3dyYXBwZXIodm9pZCAqIHApCit7CisgICAgZnJlZShwKTsKK30KKyNlbHNlCisjZGVmaW5lIGZyZWVfd3JhcHBlciBmcmVlCisjZW5kaWYKKwogLyoKICAqIGRvbid0IHVzZSB0aGVzZSEgCiAgKi8KQEAgLTM5LDYgKzUxLDE5IEBACiAgICAgcmV0dXJuIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoIm9sZF9hcGkiLCBuZXRzbm1wX29sZF9hcGlfaGVscGVyKTsKIH0KIAorc3RydWN0IHZhcmlhYmxlICoKK25ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyKQoreworICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyMiA9IE5VTEw7CisgICAgCisgICAgaWYgKHZhcikgeworICAgICAgICBjb25zdCBpbnQgdmFyc2l6ZSA9IG9mZnNldG9mKHN0cnVjdCB2YXJpYWJsZSwgbmFtZSkgKyB2YXItPm5hbWVsZW4gKiBzaXplb2YodmFyLT5uYW1lWzBdKTsKKyAgICAgICAgdmFyMiA9IG1hbGxvYyh2YXJzaXplKTsKKyAgICAgICAgaWYgKHZhcjIpCisgICAgICAgICAgICBtZW1jcHkodmFyMiwgdmFyLCB2YXJzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHZhcjI7Cit9CiAKIC8qKiBSZWdpc3RlcnMgYW4gb2xkIEFQSSBzZXQgaW50byB0aGUgbWliIHRyZWUuICBGdW5jdGlvbmFsbHkgdGhpcwogICogbWltaWNzIHRoZSBvbGQgcmVnaXN0ZXJfbWliX2NvbnRleHQoKSBmdW5jdGlvbiAoYW5kIGluIGZhY3QgdGhlIG5ldwpAQCAtNDYsMTAgKzcxLDEwIEBACiAgKi8KIGludAogbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHZhcnNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG51bXZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbWlibG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG1pYmxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWlibG9jbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmFuZ2Vfc3ViaWQsCkBAIC02NywyMSArOTIsMzEgQEAKICAgICAgICAgc3RydWN0IHZhcmlhYmxlICp2cDsKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbyA9CiAgICAgICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24pOworICAgICAgICBpZiAocmVnaW5mbyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKIAotICAgICAgICB2cCA9IG5ldHNubXBfbWVtZHVwKChjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKGNvbnN0IGNoYXIgKikgdmFyICsgdmFyc2l6ZSAqIGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNpemUpOworCXZwID0gbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUoKGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqKQorCQkJCQkoKGNvbnN0IGNoYXIgKikgdmFyICsgdmFyc2l6ZSAqIGkpKTsKIAogICAgICAgICByZWdpbmZvLT5oYW5kbGVyID0gZ2V0X29sZF9hcGlfaGFuZGxlcigpOwogICAgICAgICByZWdpbmZvLT5oYW5kbGVyTmFtZSA9IHN0cmR1cChtb2R1bGVOYW1lKTsKICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gPSAobWlibG9jbGVuICsgdnAtPm5hbWVsZW4pOwogICAgICAgICByZWdpbmZvLT5yb290b2lkID0KICAgICAgICAgICAgIChvaWQgKikgbWFsbG9jKHJlZ2luZm8tPnJvb3RvaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBpZiAocmVnaW5mby0+cm9vdG9pZCA9PSBOVUxMKSB7CisgICAgICAgICAgICBTTk1QX0ZSRUUodnApOworICAgICAgICAgICAgU05NUF9GUkVFKHJlZ2luZm8tPmhhbmRsZXJOYW1lKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyZWdpbmZvKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIH0KIAogICAgICAgICBtZW1jcHkocmVnaW5mby0+cm9vdG9pZCwgbWlibG9jLCBtaWJsb2NsZW4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgIG1lbWNweShyZWdpbmZvLT5yb290b2lkICsgbWlibG9jbGVuLCB2cC0+bmFtZSwgdnAtPm5hbWVsZW4KICAgICAgICAgICAgICAgICogc2l6ZW9mKG9pZCkpOwogICAgICAgICByZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKSB2cDsKKyAgICAgICAgcmVnaW5mby0+aGFuZGxlci0+ZGF0YV9jbG9uZQorCSAgICA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2R1cGxpY2F0ZV92YXJpYWJsZTsKKyAgICAgICAgcmVnaW5mby0+aGFuZGxlci0+ZGF0YV9mcmVlID0gZnJlZTsKIAogICAgICAgICByZWdpbmZvLT5wcmlvcml0eSA9IHByaW9yaXR5OwogICAgICAgICByZWdpbmZvLT5yYW5nZV9zdWJpZCA9IHJhbmdlX3N1YmlkOwpAQCAtODksMTQgKzEyNCwxNSBAQAogICAgICAgICByZWdpbmZvLT5yYW5nZV91Ym91bmQgPSByYW5nZV91Ym91bmQ7CiAgICAgICAgIHJlZ2luZm8tPnRpbWVvdXQgPSB0aW1lb3V0OwogICAgICAgICByZWdpbmZvLT5jb250ZXh0TmFtZSA9IChjb250ZXh0KSA/IHN0cmR1cChjb250ZXh0KSA6IE5VTEw7Ci0gICAgICAgIHJlZ2luZm8tPm1vZGVzID0gSEFORExFUl9DQU5fUldSSVRFOworICAgICAgICByZWdpbmZvLT5tb2RlcyA9IHZwLT5hY2wgPT0gTkVUU05NUF9PTERBUElfUk9OTFkgPyBIQU5ETEVSX0NBTl9ST05MWSA6CisgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyBpbiB0aGUgbWliIHRyZWUgCiAgICAgICAgICAqLwogICAgICAgICBpZiAobmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKHJlZ2luZm8pICE9IE1JQl9SRUdJU1RFUkVEX09LKSB7CiAgICAgICAgICAgICAvKiogbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZ2luZm8pOyBhbHJlYWR5IGZyZWVkICovCi0gICAgICAgICAgICBTTk1QX0ZSRUUodnApOworICAgICAgICAgICAgLyogU05NUF9GUkVFKHZwKTsgYWxyZWFkeSBmcmVlZCAqLwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CkBAIC0xMDUsNyArMTQxLDcgQEAKIC8qKiByZWdpc3RlcnMgYSByb3cgd2l0aGluIGEgbWliIHRhYmxlICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3Jvdyhjb25zdCBjaGFyICptb2R1bGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdmFyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBudW12YXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG1pYmxvYywKQEAgLTExOSw4ICsxNTUsOCBAQAogICAgIG9pZCAgICAgICAgICAgICB1Ym91bmQgPSAwOwogCiAgICAgZm9yIChpID0gMDsgaSA8IG51bXZhcnM7IGkrKykgewotICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZyID0KLSAgICAgICAgICAgIChzdHJ1Y3QgdmFyaWFibGUgKikgKChjaGFyICopIHZhciArIChpICogdmFyc2l6ZSkpOworICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKnZyID0KKyAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKikgKChjb25zdCBjaGFyICopIHZhciArIChpICogdmFyc2l6ZSkpOwogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyOwogICAgICAgICBpZiAoIHZhcl9zdWJpZCA+IChpbnQpbWlibG9jbGVuICkgewogICAgICAgICAgICAgYnJlYWs7ICAgIC8qIGRvZXNuJ3QgbWFrZSBzZW5zZSAqLwpAQCAtMTYxLDE0ICsxOTcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgIHItPnJvb3RvaWRfbGVuKSk7CiAgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93IiwgIiglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAodmFyX3N1YmlkIC0gdnItPm5hbWVsZW4pKSk7Ci0gICAgICAgIHItPmhhbmRsZXItPm15dm9pZCA9ICh2b2lkICopIG1hbGxvYyh2YXJzaXplKTsKKyAgICAgICAgci0+aGFuZGxlci0+bXl2b2lkID0gbmV0c25tcF9kdXBsaWNhdGVfdmFyaWFibGUodnIpOworICAgICAgICByLT5oYW5kbGVyLT5kYXRhX2Nsb25lID0gKHZvaWQgKigqKSh2b2lkICopKW5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlOworICAgICAgICByLT5oYW5kbGVyLT5kYXRhX2ZyZWUgPSBmcmVlOwogCiAgICAgICAgIGlmIChyLT5oYW5kbGVyLT5teXZvaWQgPT0gTlVMTCkgewogICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHIpOwogICAgICAgICAgICAgcmMgPSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIG1lbWNweSgoY2hhciAqKSByLT5oYW5kbGVyLT5teXZvaWQsIHZyLCB2YXJzaXplKTsKIAogICAgICAgICByLT5jb250ZXh0TmFtZSA9IChjb250ZXh0KSA/IHN0cmR1cChjb250ZXh0KSA6IE5VTEw7CiAKQEAgLTIzOCwxMyArMjc1LDEzIEBACiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKIAogICAgIHN0cnVjdCB2YXJpYWJsZSAqdnA7Ci0gICAgV3JpdGVNZXRob2QgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7Ci0gICAgc2l6ZV90ICAgICAgICAgIGxlbjsKLSAgICB1X2NoYXIgICAgICAgICAqYWNjZXNzID0gTlVMTDsKICAgICBuZXRzbm1wX29sZF9hcGlfY2FjaGUgKmNhY2hlcHRyOwogICAgIG5ldHNubXBfYWdlbnRfc2Vzc2lvbiAqb2xkYXNwID0gTlVMTDsKLSAgICBvaWQgICAgICAgICAgICAgdG1wX25hbWVbTUFYX09JRF9MRU5dOworICAgIHVfY2hhciAgICAgICAgICphY2Nlc3MgPSBOVUxMOworICAgIFdyaXRlTWV0aG9kICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOworICAgIHNpemVfdCAgICAgICAgICBsZW47CiAgICAgc2l6ZV90ICAgICAgICAgIHRtcF9sZW47CisgICAgb2lkICAgICAgICAgICAgIHRtcF9uYW1lW01BWF9PSURfTEVOXTsKIAogICAgIHZwID0gKHN0cnVjdCB2YXJpYWJsZSAqKSBoYW5kbGVyLT5teXZvaWQ7CiAKQEAgLTI3NSw3ICszMTIsOSBAQAogICAgICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBBY3R1YWxseSBjYWxsIHRoZSBvbGQgbWliLW1vZHVsZSBmdW5jdGlvbiAKICAgICAgICAgICAgICAqLwpAQCAtMzA2LDcgKzM0NSw5IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiByZXN1bHQgcmV0dXJuZWQgCiAgICAgICAgICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlICE9IE1PREVfU0VUX1JFU0VSVkUxKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdnAtPnR5cGUsIGFjY2VzcywgbGVuKTsKICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC0zMzEsNyArMzcyLDkgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBBQUE6IGZhbGwgdGhyb3VnaCBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGEgc2V0IChzZWUgQkJCKSAKICAgICAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlICE9IE1PREVfU0VUX1JFU0VSVkUxKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FjaGVwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2xkX2FwaV9jYWNoZSk7CkBAIC0zNDMsNyArMzg2LDggQEAKICAgICAgICAgICAgIHdyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE9MRF9BUElfTkFNRSwgY2FjaGVwdHIsIGZyZWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChPTERfQVBJX05BTUUsIGNhY2hlcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmVlX3dyYXBwZXIpKTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBCQkI6IGZhbGwgdGhyb3VnaCBmb3IgZXZlcnl0aGluZyB0aGF0IGlzIGEgc2V0IChzZWUgQUFBKSAKICAgICAgICAgICAgICAqLwpAQCAtNDAzLDcgKzQ0Nyw3IEBACiAgKi8KIHN0YXRpYyBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmN1cnJlbnRfYWdlbnRfc2Vzc2lvbiA9IE5VTEw7CiBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKgotbmV0c25tcF9nZXRfY3VycmVudF9hZ2VudF9zZXNzaW9uKCkKK25ldHNubXBfZ2V0X2N1cnJlbnRfYWdlbnRfc2Vzc2lvbih2b2lkKQogewogICAgIHJldHVybiBjdXJyZW50X2FnZW50X3Nlc3Npb247CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jIGIvYWdlbnQvaGVscGVycy9yZWFkX29ubHkuYwppbmRleCA1MTJmOTRiLi4wYjA2ZDRmIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3JlYWRfb25seS5jCisrKyBiL2FnZW50L2hlbHBlcnMvcmVhZF9vbmx5LmMKQEAgLTEsMTEgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNTAsNiArNDQsNyBAQAogCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgpAQCAtNTgsMTkgKzUzLDE3IEBACiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgogICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9FUlJfTk9UV1JJVEFCTEUpOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBjYXNlIE1PREVfR0VUOgogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgogICAgICAgICAvKiBuZXh0IGhhbmRsZXIgY2FsbGVkIGF1dG9tYXRpY2FsbHkgLSAnQVVUT19ORVhUJyAqLwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KKwogICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX0VSUl9HRU5FUlIpOwotICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7ICAgICAvKiBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUgKi8KKyAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogfQogCiAvKiogaW5pdGlhbGl6ZXMgdGhlIHJlYWRfb25seSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByZWFkX29ubHkKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvcm93X21lcmdlLmMgYi9hZ2VudC9oZWxwZXJzL3Jvd19tZXJnZS5jCmluZGV4IDZiNjQ0MzAuLjRhOGU0NzYgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvcm93X21lcmdlLmMKKysrIGIvYWdlbnQvaGVscGVycy9yb3dfbWVyZ2UuYwpAQCAtMSw0ICsxLDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNiwxMSArMTIsMTIgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyb3dfbWVyZ2UsIHJvd19tZXJnZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yocm93X21lcmdlX2FsbCwgbWliX2hlbHBlcnMpCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaD4KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19NRVJHRQogLyoqIEBkZWZncm91cCByb3dfbWVyZ2Ugcm93X21lcmdlCiAgKiAgQ2FsbHMgc3ViIGhhbmRsZXJzIHdpdGggcmVxdWVzdCBmb3Igb25lIHJvdyBhdCBhIHRpbWUuCiAgKiAgQGluZ3JvdXAgdXRpbGl0aWVzCkBAIC0zOCw2ICs0NSw4IEBACiAKIC8qKiBmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKSBidXQgYWxzbwogICogaW5qZWN0cyBhIHJvd19tZXJnZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3Rlcl9yb3dfbWVyZ2UsIHJvd19tZXJnZV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNURVJfUk9XX01FUkdFCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcm93X21lcmdlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCiB7CkBAIC00NSw2ICs1NCw3IEBACiAJCSAgICBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbisxKSk7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JPV19NRVJHRSAqLwogCiBzdGF0aWMgdm9pZAogX3JtX3N0YXR1c19mcmVlKHZvaWQgKm1lbSkKQEAgLTc2LDE0ICs4NiwxNCBAQAogICAgICAqIHNlZSBpZiB3ZSd2ZSBhbHJlYWR5IGJlZW4gaGVyZQogICAgICAqLwogICAgIHJjID0gc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgInJvd19tZXJnZTolcCIsIHJlZ2luZm8pOwotICAgIGlmICgoLTEgPT0gcmMpIHx8IChyYyA+PSBzaXplb2YoYnVmKSkpIHsKKyAgICBpZiAoKC0xID09IHJjKSB8fCAoKHNpemVfdClyYyA+PSBzaXplb2YoYnVmKSkpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcga2V5XG4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIAotICAgIHJtX3N0YXR1cyA9IG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBidWYpOworICAgIHJtX3N0YXR1cyA9IChuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXMqKW5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBidWYpOwogICAgIGlmICgoTlVMTCA9PSBybV9zdGF0dXMpICYmIGNyZWF0ZV9taXNzaW5nKSB7Ci0gICAgICAgIHZvaWQgKmRhdGFfbGlzdDsKKyAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKmRhdGFfbGlzdDsKICAgICAgICAgCiAgICAgICAgIHJtX3N0YXR1cyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzKTsKICAgICAgICAgaWYgKE5VTEwgPT0gcm1fc3RhdHVzKSB7CkBAIC0zNjIsNSArMzcyLDEwIEBACiAgICAgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWUoInJvd19tZXJnZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRfcm93X21lcmdlX2hhbmRsZXIoLTEpKTsKIH0KKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUk9XX01FUkdFICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHJvd19tZXJnZSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ST1dfTUVSR0UgKi8KKworCiAvKiogIEB9ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc2NhbGFyLmMgYi9hZ2VudC9oZWxwZXJzL3NjYWxhci5jCmluZGV4IDQyYzY2YjQuLjdhNGM5ZTAgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvc2NhbGFyLmMKKysrIGIvYWdlbnQvaGVscGVycy9zY2FsYXIuYwpAQCAtMTAsNiArMTAsMTEgQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CisKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xNywxMCArMjIsNiBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KQEAgLTc3LDggKzc4LDggQEAKICAgICAgKiBFeHRlbmQgdGhlIHJlZ2lzdGVyZWQgT0lEIHdpdGggc3BhY2UgZm9yIHRoZSBpbnN0YW5jZSBzdWJpZAogICAgICAqIChidXQgZG9uJ3QgZXh0ZW5kIHRoZSBsZW5ndGgganVzdCB5ZXQhKQogICAgICAqLwotICAgIHJlZ2luZm8tPnJvb3RvaWQgPSByZWFsbG9jKHJlZ2luZm8tPnJvb3RvaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4rMSkgKiBzaXplb2Yob2lkKSApOworICAgIHJlZ2luZm8tPnJvb3RvaWQgPSAob2lkKilyZWFsbG9jKHJlZ2luZm8tPnJvb3RvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4rMSkgKiBzaXplb2Yob2lkKSApOwogICAgIHJlZ2luZm8tPnJvb3RvaWRbIHJlZ2luZm8tPnJvb3RvaWRfbGVuIF0gPSAwOwogCiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyKCkpOwpAQCAtMTEyLDggKzExMyw4IEBACiAgICAgICogRXh0ZW5kIHRoZSByZWdpc3RlcmVkIE9JRCB3aXRoIHNwYWNlIGZvciB0aGUgaW5zdGFuY2Ugc3ViaWQKICAgICAgKiAoYnV0IGRvbid0IGV4dGVuZCB0aGUgbGVuZ3RoIGp1c3QgeWV0ISkKICAgICAgKi8KLSAgICByZWdpbmZvLT5yb290b2lkID0gcmVhbGxvYyhyZWdpbmZvLT5yb290b2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuKzEpICogc2l6ZW9mKG9pZCkgKTsKKyAgICByZWdpbmZvLT5yb290b2lkID0gKG9pZCopcmVhbGxvYyhyZWdpbmZvLT5yb290b2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuKzEpICogc2l6ZW9mKG9pZCkgKTsKICAgICByZWdpbmZvLT5yb290b2lkWyByZWdpbmZvLT5yb290b2lkX2xlbiBdID0gMDsKIAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlcigpKTsKQEAgLTE2MSw2ICsxNjIsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTE3OSw2ICsxODEsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICByZWdpbmZvLT5yb290b2lkW3JlZ2luZm8tPnJvb3RvaWRfbGVuKytdID0gMDsKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMgYi9hZ2VudC9oZWxwZXJzL3NjYWxhcl9ncm91cC5jCmluZGV4IGE1ZDExOWUuLjZiN2YwOTggMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvc2NhbGFyX2dyb3VwLmMKKysrIGIvYWdlbnQvaGVscGVycy9zY2FsYXJfZ3JvdXAuYwpAQCAtMSw1ICsxLDEwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaD4KKwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTcsMTMgKzEyLDE5IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zY2FsYXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oPgorCitzdGF0aWMgbmV0c25tcF9zY2FsYXJfZ3JvdXAqCitjbG9uZV9zY2FsYXJfZ3JvdXAobmV0c25tcF9zY2FsYXJfZ3JvdXAqIHNyYykKK3sKKyAgbmV0c25tcF9zY2FsYXJfZ3JvdXAgKnQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc2NhbGFyX2dyb3VwKTsKKyAgaWYodCAhPSBOVUxMKSB7CisgICAgdC0+bGJvdW5kID0gc3JjLT5sYm91bmQ7CisgICAgdC0+dWJvdW5kID0gc3JjLT51Ym91bmQ7CisgIH0KKyAgcmV0dXJuIHQ7Cit9CiAKIC8qKiBAZGVmZ3JvdXAgc2NhbGFyX2dyb3VwX2dyb3VwIHNjYWxhcl9ncm91cAogICogIFByb2Nlc3MgZ3JvdXBzIG9mIHNjYWxhcnMuCkBAIC0zOCw2ICs0OSw4IEBACiAJICAgIHNncm91cC0+bGJvdW5kID0gZmlyc3Q7CiAJICAgIHNncm91cC0+dWJvdW5kID0gbGFzdDsKICAgICAgICAgICAgIHJldC0+bXl2b2lkID0gKHZvaWQgKilzZ3JvdXA7CisgICAgICAgICAgICByZXQtPmRhdGFfZnJlZSA9IGZyZWU7CisgICAgICAgICAgICByZXQtPmRhdGFfY2xvbmUgPSAodm9pZCAqKCopKHZvaWQgKikpY2xvbmVfc2NhbGFyX2dyb3VwOwogCX0KICAgICB9CiAgICAgcmV0dXJuIHJldDsKQEAgLTQ4LDcgKzYxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCBmaXJzdCwgb2lkIGxhc3QpCiB7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyKCkpOwotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXIoKSk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9zY2FsYXJfZ3JvdXBfaGFuZGxlcihmaXJzdCwgbGFzdCkpOwogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3NlcmlhbGl6ZShyZWdpbmZvKTsKIH0KQEAgLTk3LDEyICsxMDksMTQgQEAKICAgICAgICAgcmV0ID0gU05NUF9OT1NVQ0hPQkpFQ1Q7CiAgICAgICAgIC8qIEZhbGx0aHJvdWdoICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgogICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGlmIChjbXAgIT0gMCB8fAogICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggPD0gcmVnaW5mby0+cm9vdG9pZF9sZW4pIHsKIAkgICAgLyoKQEAgLTEyOCwxMiArMTQyLDEzIEBACiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmV0KTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIAkgICAgfQotICAgICAgICAgICAgcm9vdF90bXBbcmVnaW5mby0+cm9vdG9pZF9sZW4rK10gPSBzdWJpZDsKKyAgICAgICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuXSA9IHN1YmlkOworICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gKz0gMjsKICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWQgPSByb290X3RtcDsKICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwogICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IHJvb3Rfc2F2ZTsKLSAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuLS07CisgICAgICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbiAtPSAyOwogICAgICAgICAgICAgcmV0dXJuIHJldDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTE2Miw3ICsxNzcsOCBAQAogCWVsc2UgaWYgKHN1YmlkID4gc2dyb3VwLT51Ym91bmQpCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgCi0gICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuKytdID0gc3ViaWQ7CisgICAgICAgIHJvb3RfdG1wW3JlZ2luZm8tPnJvb3RvaWRfbGVuXSA9IHN1YmlkOworICAgICAgICByZWdpbmZvLT5yb290b2lkX2xlbiArPSAyOwogICAgICAgICByZWdpbmZvLT5yb290b2lkID0gcm9vdF90bXA7CiAgICAgICAgIHJldCA9IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwpAQCAtMTc1LDEyICsxOTEsMTIgQEAKICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUIHx8CiAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSkgewogICAgICAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKHJlcXVlc3RzLT5yZXF1ZXN0dmIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4pOwotICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVtyZWdpbmZvLT5yb290b2lkX2xlbi0xXSA9ICsrc3ViaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCwgcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAxKTsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAyXSA9ICsrc3ViaWQ7CiAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlID0gQVNOX1BSSVZfUkVUUlk7CiAgICAgICAgIH0KICAgICAgICAgcmVnaW5mby0+cm9vdG9pZCA9IHJvb3Rfc2F2ZTsKLSAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4tLTsKKyAgICAgICAgcmVnaW5mby0+cm9vdG9pZF9sZW4gLT0gMjsKICAgICAgICAgcmV0dXJuIHJldDsKICAgICB9CiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMgYi9hZ2VudC9oZWxwZXJzL3NlcmlhbGl6ZS5jCmluZGV4IDg5MmY5YjMuLmVlYzY2YjQgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvc2VyaWFsaXplLmMKKysrIGIvYWdlbnQvaGVscGVycy9zZXJpYWxpemUuYwpAQCAtMSwxMSArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3NubXBfZ2V0X3N0YXRpc3RpYy5jIGIvYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmFjMmFjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvaGVscGVycy9zbm1wX2dldF9zdGF0aXN0aWMuYwpAQCAtMCwwICsxLDYxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KKworbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoaGVscGVyX3N0YXRpc3RpY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGVscGVyX3N0YXRpc3RpY3MsIG1pYl9oZWxwZXJzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSEVMUEVSX1NUQVRJU1RJQ1MKKy8qIGlmIHdlJ3JlIG5vdCBuZWVkZWQsIHRoZW4gbmVpdGhlciBpcyB0aGlzICovCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdGF0aXN0aWNzKQorI2VuZGlmCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUxQRVJfU1RBVElTVElDUworc3RhdGljIGludAorbmV0c25tcF9nZXRfc3RhdGlzdGljX2hlbHBlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpIHsKKyAgICAgICAgY29uc3Qgb2lkIGlkeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAyXSArCisgICAgICAgICAgICAob2lkKSh1aW50cHRyX3QpaGFuZGxlci0+bXl2b2lkOworICAgICAgICB1aW50MzJfdCB2YWx1ZTsKKworICAgICAgICBpZiAoaWR4ID4gTkVUU05NUF9TVEFUX01BWF9TVEFUUykKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgIHZhbHVlID0gc25tcF9nZXRfc3RhdGlzdGljKGlkeCk7CisgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworfQorCitzdGF0aWMgbmV0c25tcF9taWJfaGFuZGxlciAqCituZXRzbm1wX2dldF9zdGF0aXN0aWNfaGFuZGxlcihpbnQgb2Zmc2V0KQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKnJldCA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoImdldF9zdGF0aXN0aWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X3N0YXRpc3RpY19oZWxwZXJfaGFuZGxlcik7CisgICAgaWYgKHJldCkgeworICAgICAgICByZXQtPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVDsKKyAgICAgICAgcmV0LT5teXZvaWQgPSAodm9pZCopKHVpbnRwdHJfdClvZmZzZXQ7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CisKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9zdGF0aXN0aWNfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgc3RhcnQsIGludCBiZWdpbiwgaW50IGVuZCkKK3sKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9zdGF0aXN0aWNfaGFuZGxlcihiZWdpbiAtIHN0YXJ0KSk7CisgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm8sIHN0YXJ0LCBzdGFydCArIChlbmQgLSBiZWdpbikpOworfQorI2Vsc2UgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVMUEVSX0dFVF9TVEFUSVNUSUNTICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGhlbHBlcl9zdGF0aXN0aWNzKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUxQRVJfR0VUX1NUQVRJU1RJQ1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYyBiL2FnZW50L2hlbHBlcnMvc3Rhc2hfY2FjaGUuYwppbmRleCBlZmIxZWI0Li41ZGExNzk2IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3N0YXNoX2NhY2hlLmMKKysrIGIvYWdlbnQvaGVscGVycy9zdGFzaF9jYWNoZS5jCkBAIC0xLDE3ICsxLDIyIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgorbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUoc3Rhc2hfY2FjaGUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3Rhc2hfY2FjaGUsIG1pYl9oZWxwZXJzKQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NUQVNIX0NBQ0hFCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfaXRlcmF0ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaF9nZXRfZGF0YSkKKyNlbmRpZgorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0Lmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgorCiBleHRlcm4gTmV0c25tcENhY2hlTG9hZCBfbmV0c25tcF9zdGFzaF9jYWNoZV9sb2FkOwogZXh0ZXJuIE5ldHNubXBDYWNoZUZyZWUgX25ldHNubXBfc3Rhc2hfY2FjaGVfZnJlZTsKICAKQEAgLTMyLDcgKzM3LDggQEAKICAgICBuZXRzbm1wX3N0YXNoX2NhY2hlX2luZm8gKmNpbmZvOwogCiAgICAgY2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3Rhc2hfY2FjaGVfaW5mbyk7Ci0gICAgY2luZm8tPmNhY2hlX2xlbmd0aCA9IDMwOworICAgIGlmIChjaW5mbyAhPSBOVUxMKQorICAgICAgICBjaW5mby0+Y2FjaGVfbGVuZ3RoID0gMzA7CiAgICAgcmV0dXJuIGNpbmZvOwogfQogCkBAIC02Niw3ICs3Miw3IEBACiAgICAgfQogCiAgICAgaGFuZGxlci0+bXl2b2lkID0gY2luZm87Ci0gICAgaGFuZGxlci0+ZGF0YV9mcmVlID0gZnJlZTsKKyAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShoYW5kbGVyKTsKIAogICAgIHJldHVybiBoYW5kbGVyOwogfQpAQCAtMTEyLDcgKzExOCw3IEBACiBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICAqKgogbmV0c25tcF9leHRyYWN0X3N0YXNoX2NhY2hlKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvKQogewotICAgIHJldHVybiBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgU1RBU0hfQ0FDSEVfTkFNRSk7CisgICAgcmV0dXJuIChuZXRzbm1wX29pZF9zdGFzaF9ub2RlKiopbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIFNUQVNIX0NBQ0hFX05BTUUpOwogfQogCiAKQEAgLTE0Myw3ICsxNDksNyBAQAogICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6c3Rhc2hfY2FjaGUiLCAiUHJvY2Vzc2luZyBHRVQgcmVxdWVzdFxuIikpOwogICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgY2RhdGEgPQorICAgICAgICAgICAgY2RhdGEgPSAobmV0c25tcF92YXJpYWJsZV9saXN0KikKICAgICAgICAgICAgICAgICBuZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YShjaW5mby0+Y2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCk7CkBAIC0xNTUsNyArMTYxLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RhdGEtPnZhbC5zdHJpbmcsIGNkYXRhLT52YWxfbGVuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfR0VUTkVYVDoKQEAgLTE2Niw3ICsxNzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAoY25vZGUgJiYgY25vZGUtPnRoZWRhdGEpIHsKLSAgICAgICAgICAgICAgICBjZGF0YSA9IGNub2RlLT50aGVkYXRhOworICAgICAgICAgICAgICAgIGNkYXRhID0gIChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QqKWNub2RlLT50aGVkYXRhOwogICAgICAgICAgICAgICAgIGlmIChjZGF0YS0+dmFsLnN0cmluZyAmJiBjZGF0YS0+bmFtZSAmJiBjZGF0YS0+bmFtZV9sZW5ndGgpIHsKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjpzdGFzaF9jYWNoZSIsICJGb3VuZCBjYWNoZWQgR0VUTkVYVCB2YXJiaW5kXG4iKSk7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOnN0YXNoX2NhY2hlIiwgY2RhdGEtPm5hbWUsIGNkYXRhLT5uYW1lX2xlbmd0aCkpOwpAQCAtMTc4LDcgKzE4Myw2IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC0xODYsNyArMTkwLDggQEAKICAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMpOwogICAgIH0KLSAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOyAgICAgLyogc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAogLyoqIHVwZGF0ZXMgYSBnaXZlbiBjYWNoZSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBuZWVkcyB0byBvciBub3QuCkBAIC0yNDIsMyArMjQ3LDYgQEAKIH0KIC8qKiAgQH0gKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChzdGFzaF9jYWNoZSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy9zdGFzaF90b19uZXh0LmMgYi9hZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYwppbmRleCBhYWJhYWE4Li5kN2JhZmZkIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYworKysgYi9hZ2VudC9oZWxwZXJzL3N0YXNoX3RvX25leHQuYwpAQCAtMSwxNyArMSwyMiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKHN0YXNoX3RvX25leHQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3Rhc2hfdG9fbmV4dCwgbWliX2hlbHBlcnMpCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9TVEFTSF9UT19ORVhUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfYWRkX2RhdGEpCisjZW5kaWYKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX1RPX05FWFQKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF90b19uZXh0Lmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oPgorCiAvKiogQGRlZmdyb3VwIHN0YXNoX3RvX25leHQgc3Rhc2hfdG9fbmV4dAogICogIENvbnZlcnQgR0VUX1NUQVNIIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuCiAgKiAgVGhlIHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIGNvbnZlcnQgYSBHRVRfU1RBU0ggYXV0by1jYWNoZSByZXF1ZXN0CkBAIC0xMTksMyArMTI0LDYgQEAKIH0KIC8qKiAgQH0gKi8KIAorI2Vsc2UgIC8qICEgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9UT19ORVhUICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHN0YXNoX3RvX25leHQpOworI2VuZGlmIC8qICEgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9UT19ORVhUICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlLmMKaW5kZXggMzJhMDgwMy4uODgyZTg0YyAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZS5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGUuYwpAQCAtMTIsMjIgKzEyLDQwIEBACiAgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2gpCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYnVpbGRfcmVzdWx0LCB0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gsIHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyZWdpc3RyYXRpb25fb3duc190YWJsZV9pbmZvLCB0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfc3BhcnNlLCB0YWJsZV9hbGwpCisKIHN0YXRpYyB2b2lkICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3RhdHVzKTsKQEAgLTk5LDYgKzExNywzMSBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKKy8qKiBDb25maWd1cmVzIGEgaGFuZGxlciBzdWNoIHRoYXQgdGFibGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGlzIGZyZWVkIGJ5CisgKiAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoKS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIGhhbmRsZXItPm15dm9pZCBwb2ludHMgdG8KKyAqICBhbiBvYmplY3Qgb2YgdHlwZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvLgorICovCit2b2lkIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcikKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyKTsKKyAgICBuZXRzbm1wX2Fzc2VydChoYW5kbGVyLT5teXZvaWQpOworICAgIGhhbmRsZXItPmRhdGFfY2xvbmUKKwk9ICh2b2lkICooKikodm9pZCAqKSkgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZTsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUKKwk9ICh2b2lkICgqKSh2b2lkICopKSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWU7Cit9CisKKy8qKiBDb25maWd1cmVzIGEgaGFuZGxlciBzdWNoIHRoYXQgdGFibGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIGlzIGZyZWVkIGJ5CisgKiAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoKS4gU2hvdWxkIG9ubHkgYmUgY2FsbGVkIGlmIHJlZy0+aGFuZGxlci0+bXl2b2lkCisgKiAgcG9pbnRzIHRvIGFuIG9iamVjdCBvZiB0eXBlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8uCisgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RSQVRJT05fT1dOU19UQUJMRV9JTkZPCit2b2lkIG5ldHNubXBfcmVnaXN0cmF0aW9uX293bnNfdGFibGVfaW5mbyhuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcpCit7CisgICAgaWYgKHJlZykKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXIpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVHSVNUUkFUSU9OX09XTlNfVEFCTEVfSU5GTyAqLwogCiAvKiogY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIgZ2l2ZW4gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LAogICogIGluc2VydHMgaXQgaW50byB0aGUgcmVxdWVzdCBjaGFpbiBhbmQgdGhlbiBjYWxscwpAQCAtMTA4LDEwICsxNTEsMjEgQEAKIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVxKQogewotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcih0YWJyZXEpKTsKKyAgICBpbnQgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIodGFicmVxKSk7CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgcmV0dXJuIHJjOworCiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KIAoraW50CituZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKK3sKKyAgICAvKiBMb2NhdGUgInRoaXMiIHJlZ2luZm8gKi8KKyAgICAvKiBTTk1QX0ZSRUUocmVnaW5mby0+bXl2b2lkKTsgKi8KKyAgICByZXR1cm4gbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIocmVnaW5mbyk7Cit9CisKIC8qKiBFeHRyYWN0cyB0aGUgcHJvY2Vzc2VkIHRhYmxlIGluZm9ybWF0aW9uIGZyb20gYSBnaXZlbiByZXF1ZXN0LgogICogIENhbGwgdGhpcyBmcm9tIHN1YmhhbmRsZXJzIG9uIGEgcmVxdWVzdCB0byBleHRyYWN0IHRoZSBwcm9jZXNzZWQKICAqICBuZXRzbm1wX3JlcXVlc3RfaW5mbyBpbmZvcm1hdGlvbi4gIFRoZSByZXN1bHRpbmcgaW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlCkBAIC0xNTAsOCArMjA0LDggQEAKICAgICBpbnQgICAgICAgICAgICAgb2lkX2luZGV4X3BvczsKICAgICB1bnNpZ25lZCBpbnQgICAgb2lkX2NvbHVtbl9wb3M7CiAgICAgdW5zaWduZWQgaW50ICAgIHRtcF9pZHg7Ci0gICAgc2l6ZV90CSAgICB0bXBfbGVuOwotICAgIGludCAgICAgICAgICAgICBpbmNvbXBsZXRlLCBvdXRfb2ZfcmFuZ2UsIGNsZWFuZWRfdXAgPSAwOworICAgIHNzaXplX3QgCSAgICB0bXBfbGVuOworICAgIGludCAgICAgICAgICAgICBpbmNvbXBsZXRlLCBvdXRfb2ZfcmFuZ2U7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1cyA9IFNOTVBfRVJSX05PRVJST1IsIG5lZWRfcHJvY2Vzc2luZyA9IDA7CiAgICAgb2lkICAgICAgICAgICAgKnRtcF9uYW1lOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YmxfcmVxX2luZm87CkBAIC0xNzcsOCArMjMxLDkgQEAKIAogICAgIERFQlVHSUYoImhlbHBlcjp0YWJsZTpyZXEiKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6cmVxIiwKLSAgICAgICAgICAgICAgICAgICAgIkdvdCByZXF1ZXN0IGZvciBoYW5kbGVyICVzOiBiYXNlIG9pZDoiLAotICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLT5oYW5kbGVyX25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgIkdvdCAlcyAoJWQpIG1vZGUgcmVxdWVzdCBmb3IgaGFuZGxlciAlczogYmFzZSBvaWQ6IiwKKyAgICAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAorICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlLCBoYW5kbGVyLT5oYW5kbGVyX25hbWUpKTsKICAgICAgICAgREVCVUdNU0dPSUQoKCJoZWxwZXI6dGFibGU6cmVxIiwgcmVnaW5mby0+cm9vdG9pZCwKICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuKSk7CiAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOnRhYmxlOnJlcSIsICJcbiIpKTsKQEAgLTE5MywxNSArMjQ4LDIwIEBACiAgICAgICogaW4gdGhlIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvLiAKICAgICAgKi8KICAgICBpZiAobmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKHJlcWluZm8sIGhhbmRsZXItPm5leHQtPmhhbmRsZXJfbmFtZSkpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmIChNT0RFX0lTX1NFVChyZXFpbmZvLT5tb2RlKSkgewogICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywgcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKICAgICAgICAgfSBlbHNlIHsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIC8qKiBYWFgtcmtzOiBtZW1vcnkgbGVhay4gYWRkIGNsZWFudXAgaGFuZGxlcj8gKi8KICAgICAgICAgICAgIG5ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldHMocmVxaW5mbyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGlmICggTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkgJiYKICAgICAgICAgIChyZXFpbmZvLT5tb2RlICE9IE1PREVfU0VUX1JFU0VSVkUxKSkgewogICAgICAgICAvKgpAQCAtMjExLDE1ICsyNzEsMTYgQEAKICAgICAgICAgICogYSB2YWxpZCB0YWJsZSBpbmZvIHBvaW50ZXIpLgogICAgICAgICAgKi8KICAgICAgICAgaWYoTlVMTCA9PSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cykpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZTpoZWxwZXIiLCJubyB0YWJsZSBpbmZvIGZvciBzZXQgLSBza2lwcGluZ1xuIikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsIm5vIHRhYmxlIGluZm8gZm9yIHNldCAtIHNraXBwaW5nXG4iKSk7CiAgICAgICAgIH0KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbmVlZF9wcm9jZXNzaW5nID0gMTsKICAgICB9CiAgICAgZWxzZSB7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIGZvciBSRVNFUlZFMSBhbmQgR0VUUywgb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGF0IGxlYXN0Ci0gICAgICAgICAqIG9uZSB2YWxpZCByZXF1ZXN0LgorICAgICAgICAgKiBmb3IgR0VUUywgb25seSBjb250aW51ZSBpZiB3ZSBoYXZlIGF0IGxlYXN0IG9uZSB2YWxpZCByZXF1ZXN0LgorICAgICAgICAgKiBmb3IgUkVTRVJWRTEsIG9ubHkgY29udGludWUgaWYgd2UgaGF2ZSBpbmRleGVzIGZvciBhbGwgcmVxdWVzdHMuCiAgICAgICAgICAqLwogICAgICAgICAgICAKICAgICAvKgpAQCAtMjUyLDYgKzMxMyw3IEBACiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgewogICAgICAgICAgICAgREVCVUdJRigiaGVscGVyOnRhYmxlOnNldCIpIHsKICAgICAgICAgICAgICAgICB1X2NoYXIgICAgICAgICAqYnVmID0gTlVMTDsKQEAgLTI2MCw3ICszMjIsNyBAQAogICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiaGVscGVyOnRhYmxlOnNldCIsIHZhci0+bmFtZSwgdmFyLT5uYW1lX2xlbmd0aCkpOwogICAgICAgICAgICAgICAgIG91dF9sZW4gPSAwOwogICAgICAgICAgICAgICAgIGlmIChzcHJpbnRfcmVhbGxvY19ieV90eXBlKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIsIDAsIDAsIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBOVUxMLCBOVUxMLCBOVUxMKSkgewogICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoImhlbHBlcjp0YWJsZTpzZXQiLCIgdHlwZT0lZCglMDJ4KSwgdmFsdWU9JXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnR5cGUsIHZhci0+dHlwZSwgYnVmKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTI3OSw2ICszNDEsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIHRvIG1ha2Ugc3VyZSBpdHMgaW4gdGFibGUgcmFuZ2UgCkBAIC0zMzQsMTAgKzM5NywxMyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqICBSZWplY3QgcmVxdWVzdHMgb2YgdGhlIGZvcm0gJ215VGFibGUuTicgICAoTiAhPSAxKQogICAgICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpCiAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUKQorICAgICAgICAgICAgZWxzZQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpCiAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTM1Miw2ICs0MTgsMTEgQEAKICAgICAgICAgdGJsX3JlcV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CiAgICAgICAgIGlmIChOVUxMID09IHRibF9yZXFfaW5mbykgewogICAgICAgICAgICAgdGJsX3JlcV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyk7CisgICAgICAgICAgICBpZiAodGJsX3JlcV9pbmZvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPnJlZ19pbmZvID0gdGJsX2luZm87CiAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPmluZGV4ZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQodGJsX2luZm8tPmluZGV4ZXMpOwogICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5udW1iZXJfaW5kZXhlcyA9IDA7ICAgICAgIC8qIG5vbmUgeWV0ICovCkBAIC0zNzEsNyArNDQyLDggQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBvaWQgaXMgbG9uZyBlbm91Z2ggdG8gY29udGFpbiBDT0xVTU4gaW5mbwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOmNvbCIsICIgIGhhdmUgYXQgbGVhc3QgYSBjb2x1bW4gKCVkKVxuIiwKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGU6Y29sIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgIGhhdmUgYXQgbGVhc3QgYSBjb2x1bW4gKCUiIE5FVFNOTVBfUFJJbyAiZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVbb2lkX2NvbHVtbl9wb3NdKSk7CiAgICAgICAgICAgICBpZiAodmFyLT5uYW1lW29pZF9jb2x1bW5fcG9zXSA8IHRibF9pbmZvLT5taW5fY29sdW1uKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpjb2wiLApAQCAtNDAzLDEwICs0NzUsMTIgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqICBSZWplY3QgcmVxdWVzdHMgb2YgdGhlIGZvcm0gJ215RW50cnkuTicgICAoaW52YWxpZCBOKQogICAgICAgICAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkKICAgICAgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUpOwogICAgICAgICAgICAgICAgIGVsc2UgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNUKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQyNyw4ICs1MDEsOSBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICBpZiAodGJsX3JlcV9pbmZvLT5jb2xudW0gIT0gdmFyLT5uYW1lW29pZF9jb2x1bW5fcG9zXSkgewogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOmNvbCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgd2hpY2ggZG9lc24ndCBtYXRjaCByZXEgJWQgLSB0cnVuY2F0aW5nIGluZGV4IGluZm9cbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZVtvaWRfY29sdW1uX3Bvc10pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICB3aGljaCBkb2Vzbid0IG1hdGNoIHJlcSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSW8gImQgLSB0cnVuY2F0aW5nIGluZGV4IGluZm9cbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZVtvaWRfY29sdW1uX3Bvc10pKTsKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogZGlmZmVyZW50IGNvbHVtbiEgdHJ1bmNhdGUgdXNlbGVzcyBpbmRleCBpbmZvIAogICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ0Nyw4ICs1MjIsOCBAQAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHRibF9yZXFfaW5mby0+aW5kZXhfb2lkX2xlbiA9CiAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZV9sZW5ndGggLSBvaWRfaW5kZXhfcG9zOwotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLCAiICAgIGhhdmUgJWQgYnl0ZXMgb2YgaW5kZXhcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsICIgICAgaGF2ZSAlbHUgYnl0ZXMgb2YgaW5kZXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpdGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuKSk7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQodGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuIDwgTUFYX09JRF9MRU4pOwogICAgICAgICAgICAgICAgIG1lbWNweSh0YmxfcmVxX2luZm8tPmluZGV4X29pZCwgJnZhci0+bmFtZVtvaWRfaW5kZXhfcG9zXSwKICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5pbmRleF9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOwpAQCAtNDczLDggKzU0OCwxMCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVCApIHsKICAgICAgICAgICAgICAgICB0YWJsZV9oZWxwZXJfY2xlYW51cChyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSE9CSkVDVCk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgfSBlbHNlIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxICkgewogICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC01MDAsNiArNTc3LDggQEAKICAgICAgICAgZm9yICh0bXBfaWR4ID0gMCwgdmIgPSB0YmxfcmVxX2luZm8tPmluZGV4ZXM7CiAgICAgICAgICAgICAgdG1wX2lkeCA8IHRibF9pbmZvLT5udW1iZXJfaW5kZXhlczsKICAgICAgICAgICAgICArK3RtcF9pZHgsIHZiID0gdmItPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgICAgIHNpemVfdCBwYXJzZWRfb2lkX2xlbjsKKwogICAgICAgICAgICAgaWYgKGluY29tcGxldGUgJiYgdG1wX2xlbikgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogaW5jb21wbGV0ZS9pbGxlZ2FsIE9JRCwgc2V0IHVwIGR1bW15IDAgdG8gcGFyc2UgCkBAIC01MTQsMjkgKzU5MywyNyBAQAogICAgICAgICAgICAgICAgICAqCiAgICAgICAgICAgICAgICAgICogUmVqZWN0IHJlcXVlc3RzIG9mIHRoZSBmb3JtICdteU9iamVjdCcgICAobm8gaW5zdGFuY2UpCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKHJlcWluZm8tPm1vZGUgIT0gTU9ERV9HRVRORVhUKSB7Ci0gICAgICAgICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKLSAgICAgICAgICAgICAgICAgICAgY2xlYW5lZF91cCA9IDE7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRtcF9sZW4gPSAwOwotICAgICAgICAgICAgICAgIHRtcF9uYW1lID0gKG9pZCAqKSAmIHRtcF9sZW47CisgICAgICAgICAgICAgICAgdG1wX25hbWUgPSBOVUxMOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHRyeSBhbmQgcGFyc2UgY3VycmVudCBpbmRleCAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKHBhcnNlX29uZV9vaWRfaW5kZXgoJnRtcF9uYW1lLCAmdG1wX2xlbiwKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHRtcF9sZW4gPj0gMCk7CisgICAgICAgICAgICBwYXJzZWRfb2lkX2xlbiA9IHRtcF9sZW47CisgICAgICAgICAgICBpZiAocGFyc2Vfb25lX29pZF9pbmRleCgmdG1wX25hbWUsICZwYXJzZWRfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLCAxKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKICAgICAgICAgICAgICAgICBpbmNvbXBsZXRlID0gMTsKICAgICAgICAgICAgICAgICB0bXBfbGVuID0gLTE7ICAgLyogaXMgdGhpcyBuZWNlc3Nhcnk/IEJldHRlciBzYWZlIHRoYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc29ycnkgKi8KICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdG1wX2xlbiA9IHBhcnNlZF9vaWRfbGVuOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWxwZXI6dGFibGUiLCAiICBnb3QgMSAoaW5jb21wbGV0ZT0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jb21wbGV0ZSkpOwogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogZG8gbm90IGNvdW50IGluY29tcGxldGUgaW5kZXhlcyAKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlIiwgIiAgZ290IDEgKGluY29tcGxldGU9JWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluY29tcGxldGUpKTsKICAgICAgICAgICAgICAgICBpZiAoaW5jb21wbGV0ZSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgKyt0YmxfcmVxX2luZm8tPm51bWJlcl9pbmRleGVzOyAvKiogZ290IG9uZSBvayAqLwpAQCAtNTQ5LDEyICs2MjYsMTEgQEAKICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyoqIGZvciBsb29wICovCiAKICAgICAgICAgREVCVUdJRigiaGVscGVyOnRhYmxlOnJlc3VsdHMiKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiaGVscGVyOnRhYmxlOnJlc3VsdHMiLCAiICBmb3VuZCAlZCBpbmRleGVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5udW1iZXJfaW5kZXhlcykpOwotICAgICAgICAgICAgaWYgKCFjbGVhbmVkX3VwKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgIGNvdW50OwogICAgICAgICAgICAgICAgIHVfY2hhciAgICAgICAgICpidWYgPSBOVUxMOwogICAgICAgICAgICAgICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gMCwgb3V0X2xlbiA9IDA7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpyZXN1bHRzIiwgIiAgZm91bmQgJWQgaW5kZXhlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfcmVxX2luZm8tPm51bWJlcl9pbmRleGVzKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZTpyZXN1bHRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBjb2x1bW46ICVkLCBpbmRleGVzOiAlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX3JlcV9pbmZvLT5jb2xudW0sCkBAIC01NjQsNyArNjQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgIGNvdW50KyssIHZiID0gdmItPm5leHRfdmFyaWFibGUpIHsKICAgICAgICAgICAgICAgICAgICAgb3V0X2xlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgIGlmIChzcHJpbnRfcmVhbGxvY19ieV90eXBlKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmIsIDAsIDAsIDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLCBOVUxMLCBOVUxMLCBOVUxMKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJoZWxwZXI6dGFibGU6cmVzdWx0cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgIGluZGV4OiB0eXBlPSVkKCUwMngpLCB2YWx1ZT0lcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmItPnR5cGUsIHZiLT50eXBlLCBidWYpKTsKQEAgLTU4NCw3ICs2NjAsNiBAQAogICAgICAgICAgICAgICAgICAgICBmcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIERFQlVHTVNHKCgiaGVscGVyOnRhYmxlOnJlc3VsdHMiLCAiXG4iKSk7Ci0gICAgICAgICAgICB9CiAgICAgICAgIH0KIAogCkBAIC01OTUsOCArNjcwLDI0IEBACiAgICAgICAgIGlmICgocmVxaW5mby0+bW9kZSAhPSBNT0RFX0dFVE5FWFQpICYmCiAgICAgICAgICAgICAoKHRibF9yZXFfaW5mby0+bnVtYmVyX2luZGV4ZXMgIT0gdGJsX2luZm8tPm51bWJlcl9pbmRleGVzKSB8fAogICAgICAgICAgICAgICh0bXBfbGVuICE9IC0xKSkpIHsKKwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImhlbHBlcjp0YWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiaW52YWxpZCBpbmRleChlcykgZm9yIHRhYmxlIC0gc2tpcHBpbmdcbiIpKTsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgIGlmICggTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkgKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBubyBwb2ludCBpbiBjb250aW51aW5nIHdpdGhvdXQgaW5kZXhlcyBmb3Igc2V0LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEpOworICAgICAgICAgICAgICAgIC8qKiBjbGVhciBmaXJzdCByZXF1ZXN0IHNvIHdlIHdvbnQgdHJ5IHRvIHJ1biBGUkVFIG1vZGUgKi8KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldHMocmVxdWVzdHMpOworICAgICAgICAgICAgICAgIC8qKiBzZXQgYWN0dWFsIGVycm9yICovCisgICAgICAgICAgICAgICAgdGFibGVfaGVscGVyX2NsZWFudXAocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfTk9DUkVBVElPTik7CisgICAgICAgICAgICAgICAgbmVlZF9wcm9jZXNzaW5nID0gMDsgLyogZG9uJ3QgY2FsbCBuZXh0IGhhbmRsZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIHRhYmxlX2hlbHBlcl9jbGVhbnVwKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNISU5TVEFOQ0UpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTYwNSw3ICs2OTYsOSBAQAogICAgICAgICArK25lZWRfcHJvY2Vzc2luZzsKIAogICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgZWFjaCByZXF1ZXN0ICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogYmFpbCBpZiB0aGVyZSBpcyBub3RoaW5nIGZvciBvdXIgY2hpbGQgaGFuZGxlcnMKQEAgLTcxOCw2ICs4MTEsNyBAQAogCiAvKiogY3JlYXRlIHNwYXJzZSB0YWJsZSBoYW5kbGVyCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TUEFSU0UKIG5ldHNubXBfbWliX2hhbmRsZXIgKgogbmV0c25tcF9zcGFyc2VfdGFibGVfaGFuZGxlcl9nZXQodm9pZCkKIHsKQEAgLTczMywxNCArODI3LDQxIEBACiBuZXRzbm1wX3NwYXJzZV90YWJsZV9yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJyZXEpCiB7Ci0gICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLAotICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKFNQQVJTRV9UQUJMRV9IQU5ETEVSX05BTUUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhcnNlX3RhYmxlX2hlbHBlcl9oYW5kbGVyKSk7Ci0gICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKHRhYnJlcSkpOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIxLCAqaGFuZGxlcjI7CisgICAgaW50IHJjOworCisgICAgaGFuZGxlcjEgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKFNQQVJTRV9UQUJMRV9IQU5ETEVSX05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BhcnNlX3RhYmxlX2hlbHBlcl9oYW5kbGVyKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyMSkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGhhbmRsZXIyID0gbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlcih0YWJyZXEpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIyICkgeworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyMSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIxKTsKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIxKTsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcjIpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIyKTsKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qKiBoYW5kbGVyMSBpcyBpbiByZWdpbmZvLi4uIHJlbW92ZSBhbmQgZnJlZT8/ICovCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIyKTsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKworICAgIC8qKiBib3RoIGhhbmRsZXJzIG5vdyBpbiByZWdpbmZvLCBzbyBub3RoaW5nIHRvIGRvIG9uIGVycm9yICovCiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcihyZWdpbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1NQQVJTRSAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9CVUlMRF9SRVNVTFQKIC8qKiBCdWlsZHMgdGhlIHJlc3VsdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYWdlbnQgZ2l2ZW4gdGhlIHRhYmxlIGluZm9ybWF0aW9uLgogICogIFVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJldHVybiByZXN1bHRzIGZyb20gbG93ZWwgbGV2ZWwgaGFuZGxlcnMgdG8KICAqICB0aGUgYWdlbnQuICBJdCB0YWtlcyBjYXJlIG9mIGJ1aWxkaW5nIHRoZSBwcm9wZXIgcmVzdWx0aW5nIG9pZApAQCAtNzc0LDcgKzg5NSw2IEBACiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAotCiAvKiogZ2l2ZW4gYSByZWdpc3RyYXRpb24gaW5mbyBvYmplY3QsIGEgcmVxdWVzdCBvYmplY3QgYW5kIHRoZSB0YWJsZQogICogIGluZm8gb2JqZWN0IGl0IGJ1aWxkcyB0aGUgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lIG9pZCBmcm9tIHRoZQogICogIGluZGV4IHZhbHVlcyBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB0YWJsZV9pbmZvCkBAIC04MTEsNiArOTMxLDcgQEAKIAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9CVUlMRF9SRVNVTFQgKi8KIAogLyoqIGdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUKICAqICBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUKQEAgLTkyOSw2ICsxMDUwLDQyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKgorbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19jbG9uZShuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0cmkpCit7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqY29weTsKKyAgICBjb3B5ID0gbWFsbG9jKHNpemVvZigqY29weSkpOworICAgIGlmIChjb3B5KSB7CisgICAgICAgICpjb3B5ID0gKnRyaTsKKyAgICAgICAgY29weS0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZCh0cmktPmluZGV4ZXMpOworICAgICAgICBpZiAoIWNvcHktPmluZGV4ZXMpIHsKKyAgICAgICAgICAgIGZyZWUoY29weSk7CisgICAgICAgICAgICBjb3B5ID0gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY29weTsKK30KKwordm9pZAorbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRyaSkKK3sKKyAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChOVUxMICE9IHRyaS0+aW5kZXhlcykKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodHJpLT5pbmRleGVzKTsKKworI2lmIDAKKyAgICAvKgorICAgICAqIHNpZ2guLi4gZXhhbXBsZSB1c2Ugb2YgdmFsaWRfY29sdW1ucyBwb2ludHMgdG8gc3RhdGljIG1lbW9yeSwKKyAgICAgKiBzbyBmcmVlaW5nIGl0IHdvdWxkIGJlIGJhZC4uLiB3ZSdsbCBqdXN0IGhhdmUgdG8gbGl2ZSB3aXRoIGFueQorICAgICAqIGxlYWtzLCBmb3Igbm93Li4uCisgICAgICovCisjZW5kaWYKKworICAgIGZyZWUodHJpKTsKK30KKwogLyoqIEB9ICovCiAKIC8qCkBAIC0xMDU0LDMzICsxMjExLDIwIEBACiAgKgogICovCiB2b2lkCi0jaWYgSEFWRV9TVERBUkdfSAogbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXMobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGluZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pCi0jZWxzZQotbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKICAgICBpbnQgICAgICAgICAgICAgdHlwZTsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIHRpbmZvKTsKLSNlbHNlCi0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGluZm87Ci0KLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MpOwotICAgIHRpbmZvID0gdmFfYXJnKGRlYnVnYXJncywgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqKTsKLSNlbmRpZgotCiAgICAgd2hpbGUgKCh0eXBlID0gdmFfYXJnKGRlYnVnYXJncywgaW50KSkgIT0gMCkgewogICAgICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXgodGluZm8sIHR5cGUpOwogICAgIH0KLQogICAgIHZhX2VuZChkZWJ1Z2FyZ3MpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RhdGljIHZvaWQKIF9yb3dfc3Rhc2hfZGF0YV9saXN0X2ZyZWUodm9pZCAqcHRyKSB7CiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnRtcCA9IChuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqKXB0cjsKQEAgLTEwODgsNiArMTIzMiw3IEBACiAgICAgZnJlZShwdHIpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfR0VUX09SX0NSRUFURV9ST1dfU1RBU0gKIC8qKiByZXR1cm5zIGEgcm93LXdpZGUgcGxhY2UgdG8gc3RvcmUgZGF0YSBpbi4KICAgICBAdG9kbyBUaGlzIGZ1bmN0aW9uIHdpbGwgbGlrZWx5IGNoYW5nZSB0byBhZGQgZnJlZSBwb2ludGVyIGZ1bmN0aW9ucy4gKi8KIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKioKQEAgLTEwOTYsNyArMTI0MSw3IEBACiB7CiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnN0YXNocCA9IE5VTEw7CiAgICAgc3Rhc2hwID0gKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKiopCi0gICAgICAgIG5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YShyZXFpbmZvLCBzdG9yYWdlX25hbWUpOworICAgICAgICBuZXRzbm1wX2FnZW50X2dldF9saXN0X2RhdGEocmVxaW5mbywgKGNvbnN0IGNoYXIgKikgc3RvcmFnZV9uYW1lKTsKIAogICAgIGlmICghc3Rhc2hwKSB7CiAgICAgICAgIC8qCkBAIC0xMTA4LDEyICsxMjUzLDE0IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgIC8qIGFjay4gb3V0IG9mIG1lbSAqLwogCiAgICAgICAgIG5ldHNubXBfYWdlbnRfYWRkX2xpc3RfZGF0YShyZXFpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KHN0b3JhZ2VfbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCgoY29uc3QgY2hhciAqKSBzdG9yYWdlX25hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rhc2hwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9yb3dfc3Rhc2hfZGF0YV9saXN0X2ZyZWUpKTsKICAgICB9CiAgICAgcmV0dXJuIHN0YXNocDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0dFVF9PUl9DUkVBVEVfUk9XX1NUQVNIICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBhZHZhbmNlIHRoZSB0YWJsZSBpbmZvIGNvbG51bSB0byB0aGUgbmV4dCBjb2x1bW4sIG9yIDAgaWYgdGhlcmUgYXJlIG5vIG1vcmUKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfYXJyYXkuYwppbmRleCAxOWI5YzVjLi43Yzk4YWFlIDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2FycmF5LmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9hcnJheS5jCkBAIC00LDYgKzQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5Lmg+CiAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC0xMSwxNCArMTcsMTkgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2FycmF5X2FsbCwgbWliX2hlbHBlcnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hcnJheV9yZWdpc3Rlcix0YWJsZV9hcnJheV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfYXJyYXlfZmluZF90YWJsZV9hcnJheV9oYW5kbGVyLHRhYmxlX2FycmF5X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9hcnJheV9leHRyYWN0X2FycmF5X2NvbnRleHQsdGFibGVfYXJyYXlfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2FycmF5X2NoZWNrX3Jvd19zdGF0dXMsdGFibGVfYXJyYXlfYWxsKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSCisKIC8qCiAgKiBzbm1wLmg6I2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQkVHSU4gICAgICAgIC0xIAogICogc25tcC5oOiNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxICAgICAwIApAQCAtMTkzLDYgKzIwNCw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGFicmVnKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX1JFR0lTVEVSCiBpbnQKIG5ldHNubXBfdGFibGVfYXJyYXlfcmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFicmVnLApAQCAtMjA2LDggKzIxOCwxMCBAQAogICAgIHJldHVybiBuZXRzbm1wX3RhYmxlX2NvbnRhaW5lcl9yZWdpc3RlcihyZWdpbmZvLCB0YWJyZWcsIGNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsIGdyb3VwX3Jvd3MpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfUkVHSVNURVIgKi8KIAogLyoqIGZpbmQgdGhlIGhhbmRsZXIgZm9yIHRoZSB0YWJsZV9hcnJheSBoZWxwZXIuICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfRklORF9UQUJMRV9BUlJBWV9IQU5ETEVSCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfZmluZF90YWJsZV9hcnJheV9oYW5kbGVyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8pCiB7CkBAIC0yMjMsMTUgKzIzNywxOSBAQAogCiAgICAgcmV0dXJuIG1oOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfRklORF9UQUJMRV9BUlJBWV9IQU5ETEVSICovCiAKIC8qKiBmaW5kIHRoZSBjb250ZXh0IGRhdGEgdXNlZCBieSB0aGUgdGFibGVfYXJyYXkgaGVscGVyICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQVJSQVlfRVhUUkFDVF9BUlJBWV9DT05URVhUCiBuZXRzbm1wX2NvbnRhaW5lciAgICAgICoKIG5ldHNubXBfZXh0cmFjdF9hcnJheV9jb250ZXh0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewotICAgIHJldHVybiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9BUlJBWV9OQU1FKTsKKyAgICByZXR1cm4gKG5ldHNubXBfY29udGFpbmVyKiluZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUQUJMRV9BUlJBWV9OQU1FKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0VYVFJBQ1RfQVJSQVlfQ09OVEVYVCAqLwogCiAvKiogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdmFsaWRhdGUgUm93U3RhdHVzIHRyYW5zaXRpb25zLiAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0NIRUNLX1JPV19TVEFUVVMKIGludAogbmV0c25tcF90YWJsZV9hcnJheV9jaGVja19yb3dfc3RhdHVzKG5ldHNubXBfdGFibGVfYXJyYXlfY2FsbGJhY2tzICpjYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ3JvdXAgKmFnLApAQCAtMzEwLDYgKzMyOCw3IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0FSUkFZX0NIRUNLX1JPV19TVEFUVVMgKi8KIAogLyoqIEB9ICovCiAKQEAgLTM0NCwzNyArMzYzLDEzIEBACiAvKgogICogY29udGV4dCBpbmZvIGZvciBTRVQgcmVxdWVzdHMKICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHR5cGVkZWYgc3RydWN0IHNldF9jb250ZXh0X3MgewogICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbzsKICAgICB0YWJsZV9jb250YWluZXJfZGF0YSAqdGFkOwogICAgIGludCAgICAgICAgICAgICBzdGF0dXM7CiB9IHNldF9jb250ZXh0OwotCi1zdGF0aWMgdm9pZAotcmVsZWFzZV9uZXRzbm1wX3JlcXVlc3RfZ3JvdXAobmV0c25tcF9pbmRleCAqZywgdm9pZCAqdikKLXsKLSAgICBuZXRzbm1wX3JlcXVlc3RfZ3JvdXBfaXRlbSAqdG1wOwotICAgIG5ldHNubXBfcmVxdWVzdF9ncm91cCAqZ3JvdXAgPSAobmV0c25tcF9yZXF1ZXN0X2dyb3VwICopIGc7Ci0KLSAgICBpZiAoIWcpCi0gICAgICAgIHJldHVybjsKLSAgICB3aGlsZSAoZ3JvdXAtPmxpc3QpIHsKLSAgICAgICAgdG1wID0gZ3JvdXAtPmxpc3Q7Ci0gICAgICAgIGdyb3VwLT5saXN0ID0gdG1wLT5uZXh0OwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotCi0gICAgZnJlZShncm91cCk7Ci19Ci0KLXN0YXRpYyB2b2lkCi1yZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cHModm9pZCAqdnApCi17Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmMgPSAobmV0c25tcF9jb250YWluZXIqKXZwOwotICAgIENPTlRBSU5FUl9GT1JfRUFDSChjLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKQotICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cCwgTlVMTCk7Ci0gICAgQ09OVEFJTkVSX0ZSRUUoYyk7Ci19CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHZvaWQKIGJ1aWxkX25ld19vaWQobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKQEAgLTQ4OCw3ICs0ODMsNyBAQAogICAgICAgICAgICAgaW5kZXgub2lkcyA9IHRibHJlcV9pbmZvLT5pbmRleF9vaWQ7CiAgICAgICAgICAgICBpbmRleC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKIAotICAgICAgICAgICAgcm93ID0gQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwgJmluZGV4KTsKKyAgICAgICAgICAgIHJvdyA9IChuZXRzbm1wX2luZGV4KilDT05UQUlORVJfRklORCh0YWQtPnRhYmxlLCAmaW5kZXgpOwogICAgICAgICAgICAgaWYgKCFyb3cpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFibGVfYXJyYXk6Z2V0IiwgIm5vIHJvdyBmb3VuZFxuIikpOwogICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoYWd0cmVxX2luZm8sIGN1cnJlbnQsCkBAIC01NTUsNyArNTUwLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGluZGV4Lm9pZHMgPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkOwogICAgICAgICBpbmRleC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKLSAgICAgICAgdG1wID0gQ09OVEFJTkVSX0ZJTkQocmVxdWVzdF9ncm91cCwgJmluZGV4KTsKKyAgICAgICAgdG1wID0gKG5ldHNubXBfaW5kZXgqKUNPTlRBSU5FUl9GSU5EKHJlcXVlc3RfZ3JvdXAsICZpbmRleCk7CiAgICAgICAgIGlmICh0bXApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZV9hcnJheTpncm91cCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiICAgIGV4aXN0aW5nIGdyb3VwOiIpKTsKQEAgLTU2NCw2ICs1NTksOCBAQAogICAgICAgICAgICAgREVCVUdNU0coKCJ0YWJsZV9hcnJheTpncm91cCIsICJcbiIpKTsKICAgICAgICAgICAgIGcgPSAobmV0c25tcF9yZXF1ZXN0X2dyb3VwICopIHRtcDsKICAgICAgICAgICAgIGkgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfcmVxdWVzdF9ncm91cF9pdGVtKTsKKyAgICAgICAgICAgIGlmIChpID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgaS0+cmkgPSBjdXJyZW50OwogICAgICAgICAgICAgaS0+dHJpID0gdGJscmVxX2luZm87CiAgICAgICAgICAgICBpLT5uZXh0ID0gZy0+bGlzdDsKQEAgLTU3OSw2ICs1NzYsMTEgQEAKICAgICAgICAgREVCVUdNU0coKCJ0YWJsZV9hcnJheTpncm91cCIsICJcbiIpKTsKICAgICAgICAgZyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yZXF1ZXN0X2dyb3VwKTsKICAgICAgICAgaSA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yZXF1ZXN0X2dyb3VwX2l0ZW0pOworICAgICAgICBpZiAoaSA9PSBOVUxMIHx8IGcgPT0gTlVMTCkgeworICAgICAgICAgICAgU05NUF9GUkVFKGkpOworICAgICAgICAgICAgU05NUF9GUkVFKGcpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CiAgICAgICAgIGctPmxpc3QgPSBpOwogICAgICAgICBnLT50YWJsZSA9IHRhZC0+dGFibGU7CiAgICAgICAgIGktPnJpID0gY3VycmVudDsKQEAgLTU4OSwxMyArNTkxLDE1IEBACiAgICAgICAgICAqIHNlYXJjaCBmb3Igcm93LiBhbGwgY2hhbmdlcyBhcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgcm93LAogICAgICAgICAgKiBsYXRlciwgd2UnbGwgbWFrZSBhIGNvcHkgaW4gdW5kb19pbmZvIGJlZm9yZSB3ZSBzdGFydCBwcm9jZXNzaW5nLgogICAgICAgICAgKi8KLSAgICAgICAgcm93ID0gZy0+ZXhpc3Rpbmdfcm93ID0gQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwgJmluZGV4KTsKKyAgICAgICAgcm93ID0gZy0+ZXhpc3Rpbmdfcm93ID0gKG5ldHNubXBfaW5kZXgqKUNPTlRBSU5FUl9GSU5EKHRhZC0+dGFibGUsICZpbmRleCk7CiAgICAgICAgIGlmICghZy0+ZXhpc3Rpbmdfcm93KSB7CiAgICAgICAgICAgICBpZiAoIXRhZC0+Y2ItPmNyZWF0ZV9yb3cpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAgICAgaWYoTU9ERV9JU19TRVQoYWd0cmVxX2luZm8tPm1vZGUpKQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCBjdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKICAgICAgICAgICAgICAgICBlbHNlCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoYWd0cmVxX2luZm8sIGN1cnJlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CiAgICAgICAgICAgICAgICAgZnJlZShnKTsKQEAgLTYyNCw2ICs2MjgsMzMgQEAKICAgICB9IC8qKiBmb3IoIGN1cnJlbnQgLi4uICkgKi8KIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK3N0YXRpYyB2b2lkCityZWxlYXNlX25ldHNubXBfcmVxdWVzdF9ncm91cChuZXRzbm1wX2luZGV4ICpnLCB2b2lkICp2KQoreworICAgIG5ldHNubXBfcmVxdWVzdF9ncm91cF9pdGVtICp0bXA7CisgICAgbmV0c25tcF9yZXF1ZXN0X2dyb3VwICpncm91cCA9IChuZXRzbm1wX3JlcXVlc3RfZ3JvdXAgKikgZzsKKworICAgIGlmICghZykKKyAgICAgICAgcmV0dXJuOworICAgIHdoaWxlIChncm91cC0+bGlzdCkgeworICAgICAgICB0bXAgPSBncm91cC0+bGlzdDsKKyAgICAgICAgZ3JvdXAtPmxpc3QgPSB0bXAtPm5leHQ7CisgICAgICAgIGZyZWUodG1wKTsKKyAgICB9CisKKyAgICBmcmVlKGdyb3VwKTsKK30KKworc3RhdGljIHZvaWQKK3JlbGVhc2VfbmV0c25tcF9yZXF1ZXN0X2dyb3Vwcyh2b2lkICp2cCkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyA9IChuZXRzbm1wX2NvbnRhaW5lciopdnA7CisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGMsIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopCisgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfbmV0c25tcF9yZXF1ZXN0X2dyb3VwLCBOVUxMKTsKKyAgICBDT05UQUlORVJfRlJFRShjKTsKK30KKwogc3RhdGljIHZvaWQKIHByb2Nlc3Nfc2V0X2dyb3VwKG5ldHNubXBfaW5kZXggKm8sIHZvaWQgKmMpCiB7CkBAIC04MTcsNiArODQ4LDcgQEAKIAogICAgIHJldHVybiBjb250ZXh0LnN0YXR1czsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtODUyLDYgKzg4NCw3IEBACiAgICAgICAgICAgICAgICAgICAgIG1vZGVfbmFtZVthZ3RyZXFfaW5mby0+bW9kZV0pKTsKICAgICB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKE1PREVfSVNfU0VUKGFndHJlcV9pbmZvLT5tb2RlKSkgewogICAgICAgICAvKgogICAgICAgICAgKiBuZXRzbm1wX211dGV4X2xvY2soJnRhZC0+bG9jayk7CkBAIC04NjIsNiArODk1LDcgQEAKICAgICAgICAgICogbmV0c25tcF9tdXRleF91bmxvY2soJnRhZC0+bG9jayk7CiAgICAgICAgICAqLwogICAgIH0gZWxzZQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByYyA9IHByb2Nlc3NfZ2V0X3JlcXVlc3RzKHJlZ2luZm8sIGFndHJlcV9pbmZvLCByZXF1ZXN0cywgdGFkKTsKIAogICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CkBAIC04ODEsNCArOTE1LDUgQEAKICAgICAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVIgKi8KIC8qKiBAZW5kY29uZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfY29udGFpbmVyLmMKaW5kZXggZDA4YmZmMi4uMDhlOTc0MSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9jb250YWluZXIuYworKysgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2NvbnRhaW5lci5jCkBAIC00LDYgKzQsMTIgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMTEsMTQgKzE3LDIxIEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZSh0YWJsZV9jb250YWluZXIpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfY29udGFpbmVyLCB0YWJsZV9jb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2NvbnRhaW5lcl9yZXBsYWNlX3JvdywgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfZXh0cmFjdCwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfbWFuYWdlbWVudCwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfcm93X3JlbW92ZSwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfcm93X2luc2VydCwgdGFibGVfY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9jb250YWluZXJfYWxsLCBtaWJfaGVscGVycykKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUgorCiAvKgogICogc25tcC5oOiNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfU0VUX0JFR0lOICAgICAgICAtMSAKICAqIHNubXAuaDojZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMSAgICAgMCAKQEAgLTM0LDYgKzQ3LDkgQEAKICAqLwogdHlwZWRlZiBzdHJ1Y3QgY29udGFpbmVyX3RhYmxlX2RhdGFfcyB7CiAKKyAgICAvKiogTnVtYmVyIG9mIGhhbmRsZXJzIHdob3NlIG15dm9pZCBwb2ludGVyIHBvaW50cyB0byB0aGlzIHN0cnVjdHVyZS4gKi8KKyAgICBpbnQgcmVmY250OworCiAgICAvKiogcmVnaXN0cmF0aW9uIGluZm8gZm9yIHRoZSB0YWJsZSAqLwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRibHJlZ19pbmZvOwogCkBAIC0xNTksNiArMTc1LDcgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfTUFOQUdFTUVOVAogY29udGFpbmVyX3RhYmxlX2RhdGEgKgogbmV0c25tcF90Y29udGFpbmVyX2NyZWF0ZV90YWJsZSggY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGxvbmcgZmxhZ3MgKQpAQCAtMTc5LDcgKzE5Niw3IEBACiAgICAgfQogCiAgICAgaWYgKGZsYWdzKQotICAgICAgICB0YWJsZS0+a2V5X3R5cGUgPSBmbGFncyAmIDB4MDM7ICAvKiBVc2UgbG93ZXN0IHR3byBiaXRzICovCisgICAgICAgIHRhYmxlLT5rZXlfdHlwZSA9IChjaGFyKShmbGFncyAmIDB4MDMpOyAgLyogVXNlIGxvd2VzdCB0d28gYml0cyAqLwogICAgIGVsc2UKICAgICAgICAgdGFibGUtPmtleV90eXBlID0gVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYOwogCkBAIC0yMDMsNiArMjIwLDcgQEAKICAgICBTTk1QX0ZSRUUodGFibGUpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9NQU5BR0VNRU5UICovCiAKICAgICAvKgogICAgICAqIFRoZSB2YXJpb3VzIHN0YW5kYWxvbmUgcm93IG9wZXJhdGlvbiByb3V0aW5lcwpAQCAtMjI5LDYgKzI0Nyw3IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUkVQTEFDRV9ST1cKIGludAogbmV0c25tcF90Y29udGFpbmVyX3JlcGxhY2Vfcm93KCBjb250YWluZXJfdGFibGVfZGF0YSAqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaW5kZXggKm9sZF9yb3csIG5ldHNubXBfaW5kZXggKm5ld19yb3cgKQpAQCAtMjM5LDYgKzI1OCw3IEBACiAgICAgbmV0c25tcF90Y29udGFpbmVyX2FkZF9yb3coICAgIHRhYmxlLCBuZXdfcm93ICk7CiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUkVQTEFDRV9ST1cgKi8KIAogICAgIC8qIG5ldHNubXBfdGNvbnRhaW5lcl9yZW1vdmVfZGVsZXRlX3JvdygpIHdpbGwgYmUgdGFibGUtc3BlY2lmaWMgdG9vICovCiAKQEAgLTI0OSw2ICsyNjksMjAgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKK3N0YXRpYyBjb250YWluZXJfdGFibGVfZGF0YSAqCituZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9kYXRhX2Nsb25lKGNvbnRhaW5lcl90YWJsZV9kYXRhICp0YWQpCit7CisgICAgKyt0YWQtPnJlZmNudDsKKyAgICByZXR1cm4gdGFkOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9jb250YWluZXJfdGFibGVfZGF0YV9mcmVlKGNvbnRhaW5lcl90YWJsZV9kYXRhICp0YWQpCit7CisgICAgaWYgKC0tdGFkLT5yZWZjbnQgPT0gMCkKKwlmcmVlKHRhZCk7Cit9CisKIC8qKiByZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9jb250YWluZXIgaGVscGVyICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYnJlZywKQEAgLTI3Myw2ICszMDcsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICB0YWQtPnJlZmNudCA9IDE7CiAgICAgdGFkLT50YmxyZWdfaW5mbyA9IHRhYnJlZzsgIC8qIHdlIG5lZWQgaXQgdG9vLCBidXQgaXQgcmVhbGx5IGlzIG5vdCBvdXJzICovCiAgICAgaWYoa2V5X3R5cGUpCiAgICAgICAgIHRhZC0+a2V5X3R5cGUgPSBrZXlfdHlwZTsKQEAgLTI4OSw2ICszMjQsOCBAQAogICAgICAgICBjb250YWluZXItPm5jb21wYXJlID0gbmV0c25tcF9uY29tcGFyZV9uZXRzbm1wX2luZGV4OwogICAgIAogICAgIGhhbmRsZXItPm15dm9pZCA9ICh2b2lkKil0YWQ7CisgICAgaGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9kYXRhX2Nsb25lOworICAgIGhhbmRsZXItPmRhdGFfZnJlZSA9ICh2b2lkICgqKSh2b2lkICopKW5ldHNubXBfY29udGFpbmVyX3RhYmxlX2RhdGFfZnJlZTsKICAgICBoYW5kbGVyLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFQ7CiAgICAgCiAgICAgcmV0dXJuIGhhbmRsZXI7CkBAIC0zMTUsMTMgKzM1MiwzNSBAQAogICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRhYnJlZyk7CiB9CiAKK2ludAorbmV0c25tcF9jb250YWluZXJfdGFibGVfdW5yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKQoreworICAgIGNvbnRhaW5lcl90YWJsZV9kYXRhICp0YWQ7CisKKyAgICBpZiAoIXJlZ2luZm8pCisgICAgICAgIHJldHVybiBNSUJfVU5SRUdJU1RSQVRJT05fRkFJTEVEOworICAgIHRhZCA9IChjb250YWluZXJfdGFibGVfZGF0YSAqKQorICAgICAgICBuZXRzbm1wX2ZpbmRfaGFuZGxlcl9kYXRhX2J5X25hbWUocmVnaW5mbywgInRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmICh0YWQpIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUoIHRhZC0+dGFibGUgKTsKKyAgICAgICAgdGFkLT50YWJsZSA9IE5VTEw7CisJLyoKKwkgKiBOb3RlOiBkb24ndCBmcmVlIHRoZSBtZW1vcnkgdGFkIHBvaW50cyBhdCBoZXJlIC0gdGhhdCBpcyBkb25lCisJICogYnkgbmV0c25tcF9jb250YWluZXJfdGFibGVfZGF0YV9mcmVlKCkuCisJICovCisgICAgfQorICAgIHJldHVybiBuZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUoIHJlZ2luZm8gKTsKK30KKwogLyoqIHJldHJpZXZlIHRoZSBjb250YWluZXIgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9FWFRSQUNUCiBuZXRzbm1wX2NvbnRhaW5lcioKIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2NvbnRhaW5lcl9leHRyYWN0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0KQogewogICAgIHJldHVybiAobmV0c25tcF9jb250YWluZXIgKikKICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX0NPTlRBSU5FUl9DT05UQUlORVIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX0VYVFJBQ1QgKi8KIAogI2lmbmRlZiBORVRTTk1QX1VTRV9JTkxJTkUKIC8qKiBmaW5kIHRoZSBjb250ZXh0IGRhdGEgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAqLwpAQCAtMzQ2LDYgKzQwNSw3IEBACiB9CiAjZW5kaWYgLyogaW5saW5lICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUk9XX0lOU0VSVAogLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2NvbnRhaW5lciBlbnRyeSBpbnRvIGEgcmVxdWVzdCBsaXN0ICovCiB2b2lkCiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtNDEzLDYgKzQ3Myw3NiBAQAogICAgICAgICB9CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSX1JPV19JTlNFUlQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUl9ST1dfUkVNT1ZFCisvKiogcmVtb3ZlcyBhIHRhYmxlX2NvbnRhaW5lciBlbnRyeSBmcm9tIGEgcmVxdWVzdCBsaXN0ICovCit2b2lkCituZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfcmVtb3ZlKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2luZGV4ICAgICAgICAqcm93KQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICpyZXE7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAgICAgICp0aGlzX2luZGV4ID0gTlVMTDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICAgICAqdGhhdF9pbmRleCA9IE5VTEw7CisgICAgb2lkICAgICAgYmFzZV9vaWRbXSA9IHswLCAwfTsJLyogTWFrZSBzdXJlIGluZGV4IE9JRHMgYXJlIGxlZ2FsISAqLworICAgIG9pZCAgICAgIHRoaXNfb2lkW01BWF9PSURfTEVOXTsKKyAgICBvaWQgICAgICB0aGF0X29pZFtNQVhfT0lEX0xFTl07CisgICAgc2l6ZV90ICAgdGhpc19vaWRfbGVuLCB0aGF0X29pZF9sZW47CisKKyAgICBpZiAoIXJlcXVlc3QpCisgICAgICAgIHJldHVybjsKKworICAgIC8qCisgICAgICogV2UnbGwgYWRkIHRoZSBuZXcgcm93IGluZm9ybWF0aW9uIHRvIGFueSByZXF1ZXN0CisgICAgICogc3RydWN0dXJlIHdpdGggdGhlIHNhbWUgaW5kZXggdmFsdWVzIGFzIHRoZSByZXF1ZXN0CisgICAgICogcGFzc2VkIGluICh3aGljaCBpbmNsdWRlcyB0aGF0IG9uZSEpLgorICAgICAqCisgICAgICogU28gY29uc3RydWN0IGFuIE9JRCBiYXNlZCBvbiB0aGVzZSBpbmRleCB2YWx1ZXMuCisgICAgICovCisKKyAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgdGhpc19pbmRleCA9IHRhYmxlX2luZm8tPmluZGV4ZXM7CisgICAgYnVpbGRfb2lkX25vYWxsb2ModGhpc19vaWQsIE1BWF9PSURfTEVOLCAmdGhpc19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIGJhc2Vfb2lkLCAyLCB0aGlzX2luZGV4KTsKKworICAgIC8qCisgICAgICogV2UgbmVlZCB0byBsb29rIHRocm91Z2ggdGhlIHdob2xlIG9mIHRoZSByZXF1ZXN0IGxpc3QKKyAgICAgKiAoYXMgcmVjZWl2ZWQgYnkgdGhlIGN1cnJlbnQgaGFuZGxlciksIGFzIHRoZXJlJ3Mgbm8KKyAgICAgKiBndWFyYW50ZWUgdGhhdCB0aGlzIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgYnkgdGhlIGZpcnN0CisgICAgICogdmFyYmluZCB0aGF0IHJlZmVycyB0byB0aGlzIHJvdy4KKyAgICAgKiAgIEluIHBhcnRpY3VsYXIsIGEgUm93U3RhdHVzIGNvbnRyb2xsZWQgcm93IGNyZWF0aW9uCisgICAgICogbWF5IGVhc2lseSBvY2N1ciBsYXRlciBpbiB0aGUgdmFyaWFibGUgbGlzdC4KKyAgICAgKgorICAgICAqIFNvIGZpcnN0LCB3ZSByZXdpbmQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QuLi4uCisgICAgICovCisgICAgZm9yIChyZXE9cmVxdWVzdDsgcmVxLT5wcmV2OyByZXE9cmVxLT5wcmV2KQorICAgICAgICA7CisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgdGhlbiBzdGFydCBsb29raW5nIGZvciBtYXRjaGluZyBpbmRleGVzCisgICAgICogKGJ5IGNvbnN0cnVjdGluZyBPSURzIGZyb20gdGhlc2UgaW5kZXggdmFsdWVzKQorICAgICAqLworICAgIGZvciAoOyByZXE7IHJlcT1yZXEtPm5leHQpIHsKKyAgICAgICAgaWYgKHJlcS0+cHJvY2Vzc2VkKSAKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAKKyAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcSk7CisgICAgICAgIHRoYXRfaW5kZXggPSB0YWJsZV9pbmZvLT5pbmRleGVzOworICAgICAgICBidWlsZF9vaWRfbm9hbGxvYyh0aGF0X29pZCwgTUFYX09JRF9MRU4sICZ0aGF0X29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2Vfb2lkLCAyLCB0aGF0X2luZGV4KTsKKyAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIHJlcXVlc3QgaGFzIHRoZSBzYW1lIGluZGV4IHZhbHVlcywKKyAgICAgICAgICogc28gYWRkIHRoZSBuZXdseS1jcmVhdGVkIHJvdyBpbmZvcm1hdGlvbi4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKHRoaXNfb2lkLCB0aGlzX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYXRfb2lkLCB0aGF0X29pZF9sZW4pID09IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKHJlcSwgVEFCTEVfQ09OVEFJTkVSX1JPVyk7CisgICAgICAgIH0KKyAgICB9Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9DT05UQUlORVJfUk9XX1JFTU9WRSAqLwogCiAvKiogQGNvbmQgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00ODIsNyArNjEyLDcgQEAKICAgICAgICAgICogY29sdW1uLCBpZiBuZWNlc3NhcnkuCiAgICAgICAgICAqLwogICAgICAgICBfc2V0X2tleSggdGFkLCByZXF1ZXN0LCB0YmxyZXFfaW5mbywgJmtleSwgJmluZGV4ICk7Ci0gICAgICAgIHJvdyA9IF9maW5kX25leHRfcm93KHRhZC0+dGFibGUsIHRibHJlcV9pbmZvLCBrZXkpOworICAgICAgICByb3cgPSAobmV0c25tcF9pbmRleCopX2ZpbmRfbmV4dF9yb3codGFkLT50YWJsZSwgdGJscmVxX2luZm8sIGtleSk7CiAgICAgICAgIGlmIChyb3cpIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiB1cGRhdGUgaW5kZXhlcyBpbiB0YmxyZXFfaW5mbyAoaW5kZXggJiB2YXJiaW5kKSwKQEAgLTUxOCwxNyArNjQ4LDIxIEBACiAgICAgZWxzZSB7CiAKICAgICAgICAgX3NldF9rZXkoIHRhZCwgcmVxdWVzdCwgdGJscmVxX2luZm8sICZrZXksICZpbmRleCApOwotICAgICAgICByb3cgPSBDT05UQUlORVJfRklORCh0YWQtPnRhYmxlLCBrZXkpOworICAgICAgICByb3cgPSAobmV0c25tcF9pbmRleCopQ09OVEFJTkVSX0ZJTkQodGFkLT50YWJsZSwga2V5KTsKICAgICAgICAgaWYgKE5VTEwgPT0gcm93KSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogbm90IHJlc3VsdHMgZm91bmQuIEZvciBhIGdldCwgdGhhdCBpcyBhbiBlcnJvcgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFibGVfY29udGFpbmVyIiwgIm5vIHJvdyBmb3VuZFxuIikpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGlmKChhZ3RyZXFfaW5mby0+bW9kZSAhPSBNT0RFX1NFVF9SRVNFUlZFMSkgfHwgLyogZ2V0ICovCiAgICAgICAgICAgICAgICAocmVnaW5mby0+bW9kZXMgJiBIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFKSkgeyAvKiBubyBjcmVhdGUgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCByZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICB9CiAgICAgfSAvKiogR0VUL1NFVCAqLwogICAgIApAQCAtNTkwLDcgKzcyNCwxMSBAQAogICAgICAqIHJlZ2lzdHJhdGlvbi4KICAgICAgKi8KICAgICBvbGRtb2RlID0gYWd0cmVxX2luZm8tPm1vZGU7Ci0gICAgaWYoTU9ERV9JU19HRVQob2xkbW9kZSkgfHwgKE1PREVfU0VUX1JFU0VSVkUxID09IG9sZG1vZGUpKSB7CisgICAgaWYoTU9ERV9JU19HRVQob2xkbW9kZSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgfHwgKE1PREVfU0VUX1JFU0VSVkUxID09IG9sZG1vZGUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICkgewogICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqY3Vycl9yZXF1ZXN0OwogICAgICAgICAvKgogICAgICAgICAgKiBMb29wIHRocm91Z2ggZWFjaCBvZiB0aGUgcmVxdWVzdHMsIGFuZApAQCAtNzIxLDcgKzg1OSw3IEBACiBuZXRzbm1wX3RhYmxlX2luZGV4X2ZpbmRfbmV4dF9yb3cobmV0c25tcF9jb250YWluZXIgKmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRibHJlcSkKIHsKLSAgICByZXR1cm4gX2ZpbmRfbmV4dF9yb3coYywgdGJscmVxLCBOVUxMICk7CisgICAgcmV0dXJuIChuZXRzbm1wX2luZGV4KilfZmluZF9uZXh0X3JvdyhjLCB0YmxyZXEsIE5VTEwgKTsKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNzMwLDQgKzg2OCw5IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0NPTlRBSU5FUiAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZCh0YWJsZV9jb250YWluZXIpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfQ09OVEFJTkVSICovCiAvKiogQH0gKi8KKworCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2RhdGEuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jCmluZGV4IDMxNzMzMWEuLjY1OWQ5MDMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YS5jCkBAIC0xLDQgKzEsMTAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtNiwxMyArMTIsMzAgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YV9hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YSwgdGFibGVfZGF0YV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfcmVhZF9vbmx5X3RhYmxlX2RhdGEsIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGV4dHJhY3RfdGFibGVfcm93X2RhdGEsIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluc2VydF90YWJsZV9yb3csIHRhYmxlX2RhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfZGVsZXRlX3RhYmxlLCB0YWJsZV9kYXRhX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfZXh0cmFzLCB0YWJsZV9kYXRhX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfY3JlYXRlX3RhYmxlLCB0YWJsZV9kYXRhX2V4dHJhcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX2NyZWF0ZV9yb3csIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfY29weV9yb3csIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcmVtb3ZlX2RlbGV0ZV9yb3csIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfdW5yZWdpc3RlciwgdGFibGVfZGF0YV9leHRyYXMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YV9yb3dfY291bnQsIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcm93X29wZXJhdGlvbnMsIHRhYmxlX2RhdGFfZXh0cmFzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFfcm93X2ZpcnN0LCB0YWJsZV9kYXRhX2V4dHJhcykKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEEKKwogLyoqIEBkZWZncm91cCB0YWJsZV9kYXRhIHRhYmxlX2RhdGEKICAqICBIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuCiAgKiAgQGluZ3JvdXAgdGFibGUKQEAgLTgwLDE2ICsxMDMsMTcgQEAKICAgICBpZiAocm93LT5pbmRleGVzKSB7CiAgICAgICAgIG5ld3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZChuZXdyb3ctPmluZGV4ZXMpOwogICAgICAgICBpZiAoIW5ld3Jvdy0+aW5kZXhlcykgewotICAgICAgICAgICAgZnJlZSAobmV3cm93KTsKKyAgICAgICAgICAgIGZyZWUobmV3cm93KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKHJvdy0+aW5kZXhfb2lkKSB7Ci0gICAgICAgIG5ld3Jvdy0+aW5kZXhfb2lkID0gbmV0c25tcF9tZW1kdXAocm93LT5pbmRleF9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleF9vaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBuZXdyb3ctPmluZGV4X29pZCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChyb3ctPmluZGV4X29pZCwgcm93LT5pbmRleF9vaWRfbGVuKTsKICAgICAgICAgaWYgKCFuZXdyb3ctPmluZGV4X29pZCkgewotICAgICAgICAgICAgZnJlZSAobmV3cm93KTsKKyAgICAgICAgICAgIGZyZWUobmV3cm93LT5pbmRleGVzKTsKKyAgICAgICAgICAgIGZyZWUobmV3cm93KTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAgICAgfQpAQCAtMjI3LDcgKzI1MSw3IEBACiB9CiAKIC8qKiBzd2FwcyBvdXQgb3JpZ3JvdyB3aXRoIG5ld3Jvdy4gIFRoaXMgZG9lcyAqbm90KiBkZWxldGUvZnJlZSBhbnl0aGluZyEgKi8KLU5FVFNOTVBfSU5MSU5FIHZvaWQKK3ZvaWQKIG5ldHNubXBfdGFibGVfZGF0YV9yZXBsYWNlX3JvdyhuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpvcmlncm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpuZXdyb3cpCkBAIC0yODYsMTIgKzMxMCwxNSBAQAogICAgICAqIEdlbmVyaWMgQVBJIC0gbW9zdGx5IHJlbmFtZWQgd3JhcHBlcnMKICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NSRUFURV9UQUJMRQogbmV0c25tcF90YWJsZV9kYXRhICoKIG5ldHNubXBfdGFibGVfZGF0YV9jcmVhdGVfdGFibGUoY29uc3QgY2hhciAqbmFtZSwgbG9uZyBmbGFncykKIHsKICAgICByZXR1cm4gbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YSggbmFtZSApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9DUkVBVEVfVEFCTEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfREVMRVRFX1RBQkxFCiB2b2lkCiBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlKCBuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlICkKIHsKQEAgLTMxMSwxNCArMzM4LDEzIEBACiAgICAgfQogICAgIHRhYmxlLT5maXJzdF9yb3cgPSBOVUxMOwogCi0gICAgaWYgKHRhYmxlLT5uYW1lKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh0YWJsZS0+bmFtZSk7Ci0gICAgICAgIHRhYmxlLT5uYW1lID0gTlVMTDsKLSAgICB9CisgICAgU05NUF9GUkVFKHRhYmxlLT5uYW1lKTsKICAgICBTTk1QX0ZSRUUodGFibGUpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfREVMRVRFX1RBQkxFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NSRUFURV9ST1cKIG5ldHNubXBfdGFibGVfcm93ICoKIG5ldHNubXBfdGFibGVfZGF0YV9jcmVhdGVfcm93KCB2b2lkKiBlbnRyeSApCiB7CkBAIC0zMjcsOSArMzUzLDExIEBACiAgICAgICAgIHJvdy0+ZGF0YSA9IGVudHJ5OwogICAgIHJldHVybiByb3c7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NSRUFURV9ST1cgKi8KIAogICAgIC8qIG5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3coKSBkZWZpbmVkIGFib3ZlICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NPUFlfUk9XCiBpbnQKIG5ldHNubXBfdGFibGVfZGF0YV9jb3B5X3JvdyggbmV0c25tcF90YWJsZV9yb3cgICpvbGRfcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAgKm5ld19yb3cgKQpAQCAtMzQyLDExICszNzAsMTIgQEAKICAgICBpZiAob2xkX3Jvdy0+aW5kZXhlcykKICAgICAgICAgbmV3X3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZChvbGRfcm93LT5pbmRleGVzKTsKICAgICBpZiAob2xkX3Jvdy0+aW5kZXhfb2lkKQotICAgICAgICBuZXdfcm93LT5pbmRleF9vaWQgPSBuZXRzbm1wX21lbWR1cChvbGRfcm93LT5pbmRleF9vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZF9yb3ctPmluZGV4X29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgIG5ld19yb3ctPmluZGV4X29pZCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChvbGRfcm93LT5pbmRleF9vaWQsIG9sZF9yb3ctPmluZGV4X29pZF9sZW4pOwogICAgIC8qIFhYWCAtIERvZXNuJ3QgY29weSB0YWJsZS1zcGVjaWZpYyByb3cgc3RydWN0dXJlICovCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX0NPUFlfUk9XICovCiAKICAgICAvKgogICAgICAqIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfcm93KCkKQEAgLTM1NiwxMiArMzg1LDE0IEBACiAgICAgICogICAgIGFsbCBkZWZpbmVkIGFib3ZlCiAgICAgICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JFTU9WRV9ERUxFVEVfUk9XCiB2b2lkICoKIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfZGVsZXRlX3JvdyhuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcm93ICpyb3cpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3codGFibGUsIHJvdyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1JFTU9WRV9ERUxFVEVfUk9XICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDAzLDYgKzQzNCw4IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGFibGVfaW5mbyk7CiB9CiAKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9UQUJMRV9EQVRBCiAvKiogcmVnaXN0ZXJzIGEgaGFuZGxlciBhcyBhIHJlYWQtb25seSBkYXRhIHRhYmxlCiAgKiAgSWYgdGFibGVfaW5mbyAhPSBOVUxMLCBpdCByZWdpc3RlcnMgaXQgYXMgYSBub3JtYWwgdGFibGUgdG9vLiAqLwogaW50CkBAIC00MTMsNiArNDQ2LDE2IEBACiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBuZXRzbm1wX2dldF9yZWFkX29ubHlfaGFuZGxlcigpKTsKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhKHJlZ2luZm8sIHRhYmxlLCB0YWJsZV9pbmZvKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1JFQURfT05MWV9UQUJMRV9EQVRBICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1VOUkVHSVNURVIKK2ludAorbmV0c25tcF91bnJlZ2lzdGVyX3RhYmxlX2RhdGEobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbykKK3sKKyAgICAvKiBmcmVlIHRhYmxlOyAqLworICAgIHJldHVybiBuZXRzbm1wX3VucmVnaXN0ZXJfdGFibGUocmVnaW5mbyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBX1VOUkVHSVNURVIgKi8KIAogLyoKICAqIFRoZSBoZWxwZXIgaGFuZGxlciB0aGF0IHRha2VzIGNhcmUgb2YgcGFzc2luZyBhIHNwZWNpZmljIHJvdyBvZgpAQCAtNDQ1LDcgKzQ4OCw5IEBACiAgICAgICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBjYXNlIE1PREVfR0VUTkVYVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9EQVRBX1RBQkxFLCB0YWJsZSwgTlVMTCkpOwpAQCAtNTE5LDkgKzU2NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICogZXF1YWwgbWF0Y2gsIHJldHVybiB0aGUgbmV4dCByb3cgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyb3cpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSByb3ctPm5leHQ7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICByb3cgPSByb3ctPm5leHQ7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvKgpAQCAtNTk4LDYgKzY0MSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgICAgIHZhbGlkX3JlcXVlc3QgPSAxOwogICAgICAgICAgICAgaWYgKE5VTEwgIT0KQEAgLTYyMiw2ICs2NjYsNyBAQAogICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiAgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKICAgICAgICAgICAgIHZhbGlkX3JlcXVlc3QgPSAxOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIH0KICAgICB9CkBAIC02NjQsNiArNzA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0RBVEFfUk9XKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0VYVFJBQ1RfVEFCTEVfUk9XX0RBVEEKIC8qKiBleHRyYWN0cyB0aGUgZGF0YSBmcm9tIHRoZSByb3cgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlCiAgKiB0YWJsZV9kYXRhIGhlbHBlciAqLwogdm9pZCAgICAgICAgICAgKgpAQCAtNjc2LDkgKzcyMiwxMSBAQAogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9FWFRSQUNUX1RBQkxFX1JPV19EQVRBICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlNFUlRfVEFCTEVfUk9XCiAvKiogaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGFibGVfZGF0YSByb3cgaW50byBhIHJlcXVlc3QgKi8KLU5FVFNOTVBfSU5MSU5FIHZvaWQKK3ZvaWQKIG5ldHNubXBfaW5zZXJ0X3RhYmxlX3JvdyhuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93KQogewpAQCAtNzQxLDYgKzc4OSw3IEBACiAgICAgICAgIH0KICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlNFUlRfVEFCTEVfUk9XICovCiAKIC8qIGJ1aWxkcyBhIHJlc3VsdCBnaXZlbiBhIHJvdywgYSB2YXJiaW5kIHRvIHNldCBhbmQgdGhlIGRhdGEgKi8KIGludApAQCAtODUyLDExICs5MDEsMTMgQEAKICAgICAgKiBHZW5lcmljIEFQSSAtIG1vc3RseSByZW5hbWVkIHdyYXBwZXJzCiAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9ST1dfRklSU1QKIG5ldHNubXBfdGFibGVfcm93ICoKIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfZmlyc3QobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSkKIHsKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9kYXRhX2dldF9maXJzdF9yb3codGFibGUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9ST1dfRklSU1QgKi8KIAogbmV0c25tcF90YWJsZV9yb3cgKgogbmV0c25tcF90YWJsZV9kYXRhX3Jvd19nZXQoICBuZXRzbm1wX3RhYmxlX2RhdGEgKnRhYmxlLApAQCAtOTIxLDExICs5NzIsMTMgQEAKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0X2J5b2lkKHRhYmxlLCBpbnN0YW5jZSwgbGVuKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX0NPVU5UCiBpbnQKIG5ldHNubXBfdGFibGVfZGF0YV9yb3dfY291bnQobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSkKIHsKICAgICByZXR1cm4gbmV0c25tcF90YWJsZV9kYXRhX251bV9yb3dzKHRhYmxlKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX0NPVU5UICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtOTM1LDYgKzk4OCw3IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9ST1dfT1BFUkFUSU9OUwogdm9pZCAqCiBuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfZmlyc3QobmV0c25tcF90YWJsZV9kYXRhICp0YWJsZSkKIHsKQEAgLTk5NCw2ICsxMDQ4LDcgQEAKICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3Jvd19uZXh0X2J5b2lkKHRhYmxlLCBpbnN0YW5jZSwgbGVuKTsKICAgICByZXR1cm4gKHJvdyA/IHJvdy0+ZGF0YSA6IE5VTEwgKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFfUk9XX09QRVJBVElPTlMgKi8KIAogICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgKiBHZW5lcmljIEFQSSAtIG1vc3RseSByZW5hbWVkIHdyYXBwZXJzCkBAIC0xMDA1LDUgKzEwNjAsOSBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHRhYmxlX2RhdGEpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQSAqLworCiAvKiogQH0gCiAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfZGF0YXNldC5jIGIvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMKaW5kZXggZjkyZTNlMS4uOTMxYzI3YSAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9kYXRhc2V0LmMKQEAgLTEsNCArMSwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTYsOCArMTMsMzMgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhc2V0X2FsbCwgbWliX2hlbHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YXNldCwgdGFibGVfZGF0YXNldF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfZGF0YXNldF9yZW1vdmVfcm93LCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9kYXRhX3NldF9jb2x1bW4sIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFzZXRfZ2V0X25ld3JvdywgdGFibGVfZGF0YXNldF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfc2V0X2FkZF9pbmRleGVzLCB0YWJsZV9kYXRhc2V0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkZWxldGVfdGFibGVfZGF0YV9zZXQsIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3csIHRhYmxlX2RhdGFzZXRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2RhdGFzZXRfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUsIHRhYmxlX2RhdGFzZXRfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfREFUQVNFVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfZ2V0X2RhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfYWRkX2RhdGEpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfREFUQVNFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVAorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG1pYl90b19hc25fdHlwZSkKKyNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KIAogc3RhdGljIG5ldHNubXBfZGF0YV9saXN0ICphdXRvX3RhYmxlczsKIApAQCAtNzIsODIgKzEwNCwxMCBAQAogICoKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAotLyoqIENyZWF0ZSBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgc3RydWN0dXJlIGdpdmVuIGEgdGFibGVfZGF0YSBkZWZpbml0aW9uICovCi1uZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICoKLW5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfc2V0KGNvbnN0IGNoYXIgKnRhYmxlX25hbWUpCi17Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0ID0KLSAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX2RhdGFfc2V0KTsKLSAgICBpZiAoIXRhYmxlX3NldCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgdGFibGVfc2V0LT50YWJsZSA9IG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGEodGFibGVfbmFtZSk7Ci0gICAgcmV0dXJuIHRhYmxlX3NldDsKLX0KLQotdm9pZCBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQpCi17Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICpwdHIsICpuZXh0OwotICAgIG5ldHNubXBfdGFibGVfcm93ICpwcm93LCAqcG5leHRyb3c7Ci0KLSAgICBmb3IgKHB0ciA9IHRhYmxlX3NldC0+ZGVmYXVsdF9yb3c7IHB0cjsgcHRyID0gbmV4dCkgewotICAgICAgICBuZXh0ID0gcHRyLT5uZXh0OwotICAgICAgICBmcmVlKHB0cik7Ci0gICAgfQotICAgIHRhYmxlX3NldC0+ZGVmYXVsdF9yb3cgPSBOVUxMOwotICAgIGZvciAocHJvdyA9IHRhYmxlX3NldC0+dGFibGUtPmZpcnN0X3JvdzsgcHJvdzsgcHJvdyA9IHBuZXh0cm93KSB7Ci0gICAgICAgIHBuZXh0cm93ID0gcHJvdy0+bmV4dDsKLSAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZV9zZXQsIHByb3cpOwotICAgIH0KLSAgICB0YWJsZV9zZXQtPnRhYmxlLT5maXJzdF9yb3cgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfdGFibGUodGFibGVfc2V0LT50YWJsZSk7Ci0gICAgZnJlZSh0YWJsZV9zZXQpOwotfQotCi0vKiogY2xvbmVzIGEgZGF0YXNldCByb3csIGluY2x1ZGluZyBhbGwgZGF0YS4gKi8KLW5ldHNubXBfdGFibGVfcm93ICoKLW5ldHNubXBfdGFibGVfZGF0YV9zZXRfY2xvbmVfcm93KG5ldHNubXBfdGFibGVfcm93ICpyb3cpCi17Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICpkYXRhLCAqKm5ld3Jvd2RhdGE7Ci0gICAgbmV0c25tcF90YWJsZV9yb3cgKm5ld3JvdzsKLQotICAgIGlmICghcm93KQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3cocm93KTsKLSAgICBpZiAoIW5ld3JvdykKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBkYXRhID0gKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqKSByb3ctPmRhdGE7Ci0KLSAgICBpZiAoZGF0YSkgewotICAgICAgICBmb3IgKG5ld3Jvd2RhdGEgPQotICAgICAgICAgICAgIChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKiopICYobmV3cm93LT5kYXRhKTsgZGF0YTsKLSAgICAgICAgICAgICBuZXdyb3dkYXRhID0gJigoKm5ld3Jvd2RhdGEpLT5uZXh0KSwgZGF0YSA9IGRhdGEtPm5leHQpIHsKLQotICAgICAgICAgICAgKm5ld3Jvd2RhdGEgPSBuZXRzbm1wX21lbWR1cChkYXRhLAotICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UpKTsKLSAgICAgICAgICAgIGlmICghKm5ld3Jvd2RhdGEpIHsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3JvdyhuZXdyb3cpOwotICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoZGF0YS0+ZGF0YS52b2lkcCkgewotICAgICAgICAgICAgICAgICgqbmV3cm93ZGF0YSktPmRhdGEudm9pZHAgPSBuZXRzbm1wX21lbWR1cChkYXRhLT5kYXRhLnZvaWRwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT5kYXRhX2xlbik7Ci0gICAgICAgICAgICAgICAgaWYgKCEoKm5ld3Jvd2RhdGEpLT5kYXRhLnZvaWRwKSB7Ci0gICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfcm93KG5ld3Jvdyk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gbmV3cm93OwotfQotCiAvKiogZGVsZXRlcyBhIHNpbmdsZSBkYXRhc2V0IHRhYmxlIGRhdGEuCiAgKiAgcmV0dXJucyB0aGUgKHBvc3NpYmx5IHN0aWxsIGdvb2QpIG5leHQgcG9pbnRlciBvZiB0aGUgZGVsZXRlZCBkYXRhIG9iamVjdC4KICAqLwotTkVUU05NUF9JTkxJTkUgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoKK05FVFNOTVBfU1RBVElDX0lOTElORSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKgogbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9kYXRhKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSkKIHsKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKm5leHRQdHIgPSBOVUxMOwpAQCAtMTc4LDcgKzEzOCw3IEBACiAgICAgaWYgKCFyb3cpCiAgICAgICAgIHJldHVybjsKIAotICAgIGRhdGEgPSBuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3Jvdyhyb3cpOworICAgIGRhdGEgPSAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKiluZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3Jvdyhyb3cpOwogICAgIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfYWxsX2RhdGEoZGF0YSk7CiB9CiAKQEAgLTIwNCw2ICsxNjQsNyBAQAogfQogCiAvKiogcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZSwgYnV0IGRvZXNuJ3QgZGVsZXRlL2ZyZWUgdGhlIGNvbHVtbiB2YWx1ZXMgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX1JFTU9WRV9ST1cKIE5FVFNOTVBfSU5MSU5FIHZvaWQKIG5ldHNubXBfdGFibGVfZGF0YXNldF9yZW1vdmVfcm93KG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yb3cgKnJvdykKQEAgLTIxMyw2ICsxNzQsNyBAQAogCiAgICAgbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZS0+dGFibGUsIHJvdyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX1JFTU9WRV9ST1cgKi8KIAogLyoqIHJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUgYW5kIHRoZW4gZGVsZXRlcyBpdCAoYW5kIGFsbCBpdHMgZGF0YSkgKi8KIE5FVFNOTVBfSU5MSU5FIHZvaWQKQEAgLTIzMCw2ICsxOTIsODAgQEAKICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2FsbF9kYXRhKGRhdGEpOwogfQogCisvKiogQ3JlYXRlIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBzdHJ1Y3R1cmUgZ2l2ZW4gYSB0YWJsZV9kYXRhIGRlZmluaXRpb24gKi8KK25ldHNubXBfdGFibGVfZGF0YV9zZXQgKgorbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9zZXQoY29uc3QgY2hhciAqdGFibGVfbmFtZSkKK3sKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfZGF0YV9zZXQpOworICAgIGlmICghdGFibGVfc2V0KQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB0YWJsZV9zZXQtPnRhYmxlID0gbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YSh0YWJsZV9uYW1lKTsKKyAgICByZXR1cm4gdGFibGVfc2V0OworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1RBQkxFX0RBVEFfU0VUCit2b2lkIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCkKK3sKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKnB0ciwgKm5leHQ7CisgICAgbmV0c25tcF90YWJsZV9yb3cgKnByb3csICpwbmV4dHJvdzsKKworICAgIGZvciAocHRyID0gdGFibGVfc2V0LT5kZWZhdWx0X3JvdzsgcHRyOyBwdHIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBwdHItPm5leHQ7CisgICAgICAgIGZyZWUocHRyKTsKKyAgICB9CisgICAgdGFibGVfc2V0LT5kZWZhdWx0X3JvdyA9IE5VTEw7CisgICAgZm9yIChwcm93ID0gdGFibGVfc2V0LT50YWJsZS0+Zmlyc3Rfcm93OyBwcm93OyBwcm93ID0gcG5leHRyb3cpIHsKKyAgICAgICAgcG5leHRyb3cgPSBwcm93LT5uZXh0OworICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX2FuZF9kZWxldGVfcm93KHRhYmxlX3NldCwgcHJvdyk7CisgICAgfQorICAgIHRhYmxlX3NldC0+dGFibGUtPmZpcnN0X3JvdyA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZSh0YWJsZV9zZXQtPnRhYmxlKTsKKyAgICBmcmVlKHRhYmxlX3NldCk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUxFVEVfVEFCTEVfREFUQV9TRVQgKi8KKworLyoqIGNsb25lcyBhIGRhdGFzZXQgcm93LCBpbmNsdWRpbmcgYWxsIGRhdGEuICovCituZXRzbm1wX3RhYmxlX3JvdyAqCituZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2Nsb25lX3JvdyhuZXRzbm1wX3RhYmxlX3JvdyAqcm93KQoreworICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSwgKipuZXdyb3dkYXRhOworICAgIG5ldHNubXBfdGFibGVfcm93ICpuZXdyb3c7CisKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuZXdyb3cgPSBuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93KHJvdyk7CisgICAgaWYgKCFuZXdyb3cpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZGF0YSA9IChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKikgcm93LT5kYXRhOworCisgICAgaWYgKGRhdGEpIHsKKyAgICAgICAgZm9yIChuZXdyb3dkYXRhID0KKyAgICAgICAgICAgICAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlICoqKSAmKG5ld3Jvdy0+ZGF0YSk7IGRhdGE7CisgICAgICAgICAgICAgbmV3cm93ZGF0YSA9ICYoKCpuZXdyb3dkYXRhKS0+bmV4dCksIGRhdGEgPSBkYXRhLT5uZXh0KSB7CisKKyAgICAgICAgICAgICpuZXdyb3dkYXRhID0gbmV0c25tcF9tZW1kdXAoZGF0YSwKKyAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKSk7CisgICAgICAgICAgICBpZiAoISpuZXdyb3dkYXRhKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9yb3cobmV3cm93KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGRhdGEtPmRhdGEudm9pZHApIHsKKyAgICAgICAgICAgICAgICAoKm5ld3Jvd2RhdGEpLT5kYXRhLnZvaWRwID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tZW1kdXAoZGF0YS0+ZGF0YS52b2lkcCwgZGF0YS0+ZGF0YV9sZW4pOworICAgICAgICAgICAgICAgIGlmICghKCpuZXdyb3dkYXRhKS0+ZGF0YS52b2lkcCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3JvdyhuZXdyb3cpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG5ld3JvdzsKK30KKwogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICoKICAqIERhdGEgU2V0IEFQSTogRGVmYXVsdCByb3cgb3BlcmF0aW9ucwpAQCAtMjQ4LDkgKzI4NCwxMCBAQAogICAgIGZvciAoOyBkZWZyb3c7IGRlZnJvdyA9IGRlZnJvdy0+bmV4dCkgewogICAgICAgICBuZXRzbm1wX3NldF9yb3dfY29sdW1uKHJvdywgZGVmcm93LT5jb2x1bW4sIGRlZnJvdy0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZyb3ctPmRhdGEudm9pZHAsIGRlZnJvdy0+ZGF0YV9sZW4pOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKGRlZnJvdy0+d3JpdGFibGUpCiAgICAgICAgICAgICBuZXRzbm1wX21hcmtfcm93X2NvbHVtbl93cml0YWJsZShyb3csIGRlZnJvdy0+Y29sdW1uLCAxKTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIHJvdzsKIH0KQEAgLTI4OCw2ICszMjUsOCBAQAogICAgIH0KIAogICAgIG5ld19jb2wgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSk7CisgICAgaWYgKG5ld19jb2wgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIG5ld19jb2wtPnR5cGUgPSB0eXBlOwogICAgIG5ld19jb2wtPndyaXRhYmxlID0gd3JpdGFibGU7CiAgICAgbmV3X2NvbC0+Y29sdW1uID0gY29sdW1uOwpAQCAtMzIzLDE0ICszNjIsOSBAQAogICogIHRoaXMgaXMgYSB3cmFwcGVyIGFyb3VuZCBjYWxsaW5nIG5ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3JvdwogICogIHJlcGVhdGVkbHkgZm9yIHlvdS4KICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1NFVF9NVUxUSV9BRERfREVGQVVMVF9ST1cKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBuZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldCwgLi4uKQotI2Vsc2UKLW5ldHNubXBfdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3Jvdyh2YV9kY2wKLSAgICApCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKICAgICB1bnNpZ25lZCBpbnQgICAgY29sdW1uOwpAQCAtMzM4LDE0ICszNzIsNyBAQAogICAgIHZvaWQgICAgICAgICAgICpkYXRhOwogICAgIHNpemVfdCAgICAgICAgICBkYXRhX2xlbjsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIHRzZXQpOwotI2Vsc2UKLSAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0c2V0OwotCi0gICAgdmFfc3RhcnQoZGVidWdhcmdzKTsKLSAgICB0c2V0ID0gdmFfYXJnKGRlYnVnYXJncywgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqKTsKLSNlbmRpZgogCiAgICAgd2hpbGUgKChjb2x1bW4gPSB2YV9hcmcoZGVidWdhcmdzLCB1bnNpZ25lZCBpbnQpKSAhPSAwKSB7CiAgICAgICAgIHR5cGUgPSB2YV9hcmcoZGVidWdhcmdzLCBpbnQpOwpAQCAtMzU4LDcgKzM4NSw3IEBACiAKICAgICB2YV9lbmQoZGVidWdhcmdzKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfU0VUX01VTFRJX0FERF9ERUZBVUxUX1JPVyAqLwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgpAQCAtMzk4LDExICs0MjUsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YV9zZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8pCiB7CisgICAgaW50IHJldDsKKwogICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKICAgICAgICAgLyoKICAgICAgICAgICogYWxsb2NhdGUgdGhlIHRhYmxlIGlmIG9uZSB3YXNuJ3QgYWxsb2NhdGVkIAogICAgICAgICAgKi8KICAgICAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgICAgIGlmICh0YWJsZV9pbmZvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KIAogICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8tPmluZGV4ZXMgJiYgZGF0YV9zZXQtPnRhYmxlLT5pbmRleGVzX3RlbXBsYXRlKSB7CkBAIC00MzMsOCArNDY0LDExIEBACiAKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF90YWJsZV9kYXRhX3NldF9oYW5kbGVyKGRhdGFfc2V0KSk7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YShyZWdpbmZvLCBkYXRhX3NldC0+dGFibGUsCisgICAgcmV0ID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhKHJlZ2luZm8sIGRhdGFfc2V0LT50YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8pOworICAgIGlmIChyZXQgPT0gU05NUEVSUl9TVUNDRVNTICYmIHJlZ2luZm8tPmhhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnaW5mby0+aGFuZGxlci0+bmV4dCk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogbmV3cm93X3N0YXNoICAgKgpAQCAtNDQ2LDExICs0ODAsMTQgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqbmV3cm93ICAgPSBOVUxMOwogCiAgICAgbmV3cm93c3Rhc2ggPSBTTk1QX01BTExPQ19UWVBFREVGKG5ld3Jvd19zdGFzaCk7Ci0gICAgbmV3cm93c3Rhc2gtPmNyZWF0ZWQgPSAxOwotICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX3Jvd19mcm9tX2RlZmF1bHRzCi0gICAgICAgICAgICAgICAgICAgICAgICAoZGF0YXRhYmxlLT5kZWZhdWx0X3Jvdyk7Ci0gICAgbmV3cm93LT5pbmRleGVzID0gc25tcF9jbG9uZV92YXJiaW5kKHRhYmxlX2luZm8tPmluZGV4ZXMpOwotICAgIG5ld3Jvd3N0YXNoLT5uZXdyb3cgPSBuZXdyb3c7CisKKyAgICBpZiAobmV3cm93c3Rhc2ggIT0gTlVMTCkgeworICAgICAgICBuZXdyb3dzdGFzaC0+Y3JlYXRlZCA9IDE7CisgICAgICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY3JlYXRlX3Jvd19mcm9tX2RlZmF1bHRzCisgICAgICAgICAgICAoZGF0YXRhYmxlLT5kZWZhdWx0X3Jvdyk7CisgICAgICAgIG5ld3Jvdy0+aW5kZXhlcyA9IHNubXBfY2xvbmVfdmFyYmluZCh0YWJsZV9pbmZvLT5pbmRleGVzKTsKKyAgICAgICAgbmV3cm93c3Rhc2gtPm5ld3JvdyA9IG5ld3JvdzsKKyAgICB9CiAKICAgICByZXR1cm4gbmV3cm93c3Rhc2g7CiB9CkBAIC00NjksOCArNTA2LDYgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93LCAqbmV3cm93ID0gTlVMTDsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKLSAgICBvaWQgICAgICAgICAgICAqc3VmZml4OwotICAgIHNpemVfdCAgICAgICAgICBzdWZmaXhfbGVuOwogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipzdGFzaHAgPSBOVUxMOwogCiAgICAgaWYgKCFoYW5kbGVyKQpAQCAtNDgwLDYgKzUxNSwxMSBAQAogICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewogICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICpkYXRhdGFibGUgPQogICAgICAgICAgICAgKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKikgaGFuZGxlci0+bXl2b2lkOworICAgICAgICBjb25zdCBvaWQgKiBjb25zdCBzdWZmaXggPQorICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMjsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN1ZmZpeF9sZW4gPQorICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLSAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyKTsKKwogICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgY29udGludWU7CiAKQEAgLTQ4OCwxNiArNTI4LDEwIEBACiAgICAgICAgICAqLwogICAgICAgICByb3cgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93KHJlcXVlc3QpOwogICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7Ci0gICAgICAgIHN1ZmZpeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDI7Ci0gICAgICAgIHN1ZmZpeF9sZW4gPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtCi0gICAgICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAyKTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKE1PREVfSVNfU0VUKHJlcWluZm8tPm1vZGUpKSB7CiAKLSAgICAgICAgICAgIGNoYXIgYnVmWzI1Nl07IC8qIGlzIHRoaXMgcmVhc29uYWJsZSBzaXplPz8gKi8KLSAgICAgICAgICAgIGludCAgcmM7Ci0gICAgICAgICAgICBzaXplX3QgbGVuOwotCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogdXNlIGEgY2FjaGVkIGNvcHkgb2YgdGhlIHJvdyBmb3IgbW9kaWZpY2F0aW9uIAogICAgICAgICAgICAgICovCkBAIC01MDYsMzAgKzU0MCwxNiBAQAogICAgICAgICAgICAgICogY2FjaGUgbG9jYXRpb246IG1heSBoYXZlIGJlZW4gY3JlYXRlZCBhbHJlYWR5IGJ5IG90aGVyCiAgICAgICAgICAgICAgKiBTRVQgcmVxdWVzdHMgaW4gdGhlIHNhbWUgbWFzdGVyIHJlcXVlc3QuIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICByYyA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkYXRhc2V0X3Jvd19zdGFzaDolczoiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhdGFibGUtPnRhYmxlLT5uYW1lKTsKLSAgICAgICAgICAgIGlmICgoLTEgPT0gcmMpIHx8IChyYyA+PSBzaXplb2YoYnVmKSkpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCIlcyBoYW5kbGVyIG5hbWUgdG9vIGxvbmdcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgIHN0YXNocCA9IG5ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfb3JfY3JlYXRlX3N0YXNoKHJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHN0YXNocCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGxlbiA9IHNpemVvZihidWYpIC0gcmM7Ci0gICAgICAgICAgICByYyA9IHNucHJpbnRfb2JqaWQoJmJ1ZltyY10sIGxlbiwgdGFibGVfaW5mby0+aW5kZXhfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4X29pZF9sZW4pOwotICAgICAgICAgICAgaWYgKC0xID09IHJjKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiJXMgb2lkIG9yIG5hbWUgdG9vIGxvbmdcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHN0YXNocCA9IChuZXRzbm1wX29pZF9zdGFzaF9ub2RlICoqKQotICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gocmVxaW5mbywgYnVmKTsKIAogICAgICAgICAgICAgbmV3cm93c3Rhc2gKLSAgICAgICAgICAgICAgICA9IG5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhKCpzdGFzaHAsIHN1ZmZpeCwgc3VmZml4X2xlbik7CisgICAgICAgICAgICAgICAgPSAobmV3cm93X3N0YXNoKiluZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YSgqc3Rhc2hwLCBzdWZmaXgsIHN1ZmZpeF9sZW4pOwogCiAgICAgICAgICAgICBpZiAoIW5ld3Jvd3N0YXNoKSB7CiAgICAgICAgICAgICAgICAgaWYgKCFyb3cpIHsKQEAgLTU1Nyw2ICs1NzcsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICogZXhpc3Rpbmcgcm93IHRoYXQgbmVlZHMgdG8gYmUgbW9kaWZpZWQgCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBuZXdyb3dzdGFzaCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV3cm93X3N0YXNoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ld3Jvd3N0YXNoID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG5ld3JvdyA9IG5ldHNubXBfdGFibGVfZGF0YV9zZXRfY2xvbmVfcm93KHJvdyk7CiAgICAgICAgICAgICAgICAgICAgIG5ld3Jvd3N0YXNoLT5uZXdyb3cgPSBuZXdyb3c7CiAgICAgICAgICAgICAgICAgfQpAQCAtNTczLDEyICs1OTgsMTcgQEAKICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUyKQogICAgICAgICAgICAgICAgIHJvdyA9IG5ld3JvdzsKICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIGlmIChyb3cpCiAgICAgICAgICAgICBkYXRhID0gKG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqKSByb3ctPmRhdGE7CiAKICAgICAgICAgaWYgKCFyb3cgfHwgIXRhYmxlX2luZm8gfHwgIWRhdGEpIHsKLSAgICAgICAgICAgIGlmICghTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkgfHwgIXRhYmxlX2luZm8pIHsKKyAgICAgICAgICAgIGlmICghdGFibGVfaW5mbworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgICAgICAgICB8fCAhTU9ERV9JU19TRVQocmVxaW5mby0+bW9kZSkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICAgICAgICAgKSB7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CiAgICAgICAgICAgICAgICAgY29udGludWU7CkBAIC01OTIsOSArNjIyLDEwIEBACiAgICAgICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICBjYXNlIE1PREVfR0VUQlVMSzogICAgIC8qIFhYWFdXVyAqLwotICAgICAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGEtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfTk9TVUNISU5TVEFOQ0UpOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCFkYXRhIHx8IGRhdGEtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIE5vdGU6IGRhdGEtPmRhdGEudm9pZHAgY2FuIGJlIE5VTEwsIGUuZy4gd2hlbiBhIHplcm8tbGVuZ3RoCiAgICAgICAgICAgICAgICAgICogb2N0ZXQgc3RyaW5nIGhhcyBiZWVuIHN0b3JlZCBpbiB0aGUgdGFibGUgY2FjaGUuCkBAIC02MDMsMTAgKzYzNCwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+Y29sbnVtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+dHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRhdGEudm9pZHAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKilkYXRhLT5kYXRhLnZvaWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZGF0YV9sZW4pOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgICAgICBpZiAoZGF0YSkgewogICAgICAgICAgICAgICAgIC8qCkBAIC03OTcsOSArODMwLDkgQEAKICAgICAJCSAgICBmb3IgKHJlcSA9IHJlcXVlc3RzOyByZXE7IHJlcT1yZXEtPm5leHQpIHsKICAgICAgICAgCiAJCSAgICAJLyoKLSAgICAgICAgIAkJCSogRm9yIHJlcXVlc3RzIHRoYXQgaGF2ZSB0aGUgb2xkIHJvdyB2YWx1ZXMsCi0gICAgICAgICAJCQkqIHNvIGFkZCB0aGUgbmV3bHktY3JlYXRlZCByb3cgaW5mb3JtYXRpb24uCi0gICAgICAgICAJICAgIAkqLworICAgICAgICAgICAgICAgICAgICAgICAgICogRm9yIHJlcXVlc3RzIHRoYXQgaGF2ZSB0aGUgb2xkIHJvdyB2YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBzbyBhZGQgdGhlIG5ld2x5LWNyZWF0ZWQgcm93IGluZm9ybWF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgIAkgICAgCWlmICgobmV0c25tcF90YWJsZV9yb3cgKikgbmV0c25tcF9leHRyYWN0X3RhYmxlX3JvdyhyZXEpID09IHJvdykgewogCSAgICAJCQluZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YShyZXEsIFRBQkxFX0RBVEFfUk9XKTsKICAgICAgICAgICAgIAkJCW5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcSwKQEAgLTgyMyw2ICs4NTYsMTIgQEAKIAkJbmV3cm93ID0gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2RhdGFzZXQ6IHVua25vd24gbW9kZSBwYXNzZWQgaW50byB0aGUgaGFuZGxlclxuIik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICB9CiAgICAgfQogCkBAIC04NDMsMTggKzg4MiwxOSBAQAogLyoqCiAgKiBleHRyYWN0cyBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgcG9pbnRlciBmcm9tIGEgZ2l2ZW4gcmVxdWVzdAogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9TRVRfQ09MVU1OCiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKgogbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0X2NvbHVtbihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY29sdW1uKQogewogICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZGF0YSA9Ci0gICAgICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3dfZGF0YSggcmVxdWVzdCApOworICAgICAgICAobmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlKiluZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93X2RhdGEoIHJlcXVlc3QgKTsKICAgICBpZiAoZGF0YSkgewogICAgICAgICBkYXRhID0gbmV0c25tcF90YWJsZV9kYXRhX3NldF9maW5kX2NvbHVtbihkYXRhLCBjb2x1bW4pOwogICAgIH0KICAgICByZXR1cm4gZGF0YTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQV9TRVRfQ09MVU1OICovCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCkBAIC04ODIsOSArOTIyLDIzIEBACiAgICAgaWYgKCFyZWdpc3RyYXRpb25fbmFtZSkgewogICAgICAgICByZWdpc3RyYXRpb25fbmFtZSA9IHRhYmxlX3NldC0+dGFibGUtPm5hbWU7CiAgICAgfQotICAgIG5ldHNubXBfYWRkX2xpc3RfZGF0YSgmYXV0b190YWJsZXMsIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdChyZWdpc3RyYXRpb25fbmFtZSwgdGFibGVzLCBOVUxMKSk7ICAgICAvKiBYWFggKi8KKyAgICBuZXRzbm1wX2FkZF9saXN0X2RhdGEoJmF1dG9fdGFibGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QocmVnaXN0cmF0aW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZXMsIGZyZWUpKTsgICAgIC8qIFhYWCAqLwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVF9VTlJFR0lTVEVSX0FVVE9fREFUQV9UQUJMRQorLyoqIFVuZG8gdGhlIGVmZmVjdCBvZiBuZXRzbm1wX3JlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSgpLgorICovCit2b2lkCituZXRzbm1wX3VucmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCwKKwkJCQkgICBjaGFyICpyZWdpc3RyYXRpb25fbmFtZSkKK3sKKyAgICBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUoJmF1dG9fdGFibGVzLCByZWdpc3RyYXRpb25fbmFtZQorCQkJICAgICA/IHJlZ2lzdHJhdGlvbl9uYW1lIDogdGFibGVfc2V0LT50YWJsZS0+bmFtZSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX1VOUkVHSVNURVJfQVVUT19EQVRBX1RBQkxFICovCisKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCiBzdGF0aWMgdm9pZAogX3RhYmxlX3NldF9hZGRfaW5kZXhlcyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQsIHN0cnVjdCB0cmVlICp0cCkKQEAgLTEwMTIsNyArMTA2Niw3IEBACiAgICAgICAgIHN0cnVjdCB0cmVlICAgICp0cDI7CiAgICAgCiAgICAgICAgIGlmICghc25tcF9wYXJzZV9vaWQodHAtPmF1Z21lbnRzLCBuYW1lLCAmbmFtZV9sZW5ndGgpKSB7Ci0gICAgICAgICAgICBjb25maWdfcHdhcm4oIkkgY2FuJ3QgcGFyc2UgdGhlIGF1Z21lbnQgdGFiZWwgbmFtZSIpOworICAgICAgICAgICAgY29uZmlnX3B3YXJuKCJJIGNhbid0IHBhcnNlIHRoZSBhdWdtZW50IHRhYmxlIG5hbWUiKTsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiICBjYW4ndCBwYXJzZSAlc1xuIiwgdHAtPmF1Z21lbnRzKTsKICAgICAgICAgICAgIFNOTVBfRlJFRSAodGFibGVfc2V0KTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNDQsNyArMTA5OCw3IEBACiAgICAgICAgIH0KIAogICAgICAgICBERUJVR01TR1RMKCgidGFibGVfc2V0X2FkZF90YWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICJhZGRpbmcgY29sdW1uICVzKCVkKSBvZiB0eXBlICVkIChhY2Nlc3MgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGNvbHVtbiAlcyglbGQpIG9mIHR5cGUgJWQgKGFjY2VzcyAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgIHRwLT5sYWJlbCwgdHAtPnN1YmlkLCB0eXBlLCB0cC0+YWNjZXNzKSk7CiAKICAgICAgICAgc3dpdGNoICh0cC0+YWNjZXNzKSB7CkBAIC0xMDU3LDcgKzExMTEsNyBAQAogICAgICAgICAgICAgLyogZmFsbHRocm91Z2ggKi8KICAgICAgICAgY2FzZSBNSUJfQUNDRVNTX1JFQURPTkxZOgogICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlX3NldF9hZGRfdGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgImFkZGluZyBjb2x1bW4gJWQgb2YgdHlwZSAlZFxuIiwgdHAtPnN1YmlkLCB0eXBlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGNvbHVtbiAlbGQgb2YgdHlwZSAlZFxuIiwgdHAtPnN1YmlkLCB0eXBlKSk7CiAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3codGFibGVfc2V0LCB0cC0+c3ViaWQsIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2Fud3JpdGUsIE5VTEwsIDApOwogICAgICAgICAgICAgbWluY29sID0gU05NUF9NSU4obWluY29sLCB0cC0+c3ViaWQpOwpAQCAtMTEwMCw3ICsxMTU0LDcgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JvdyAqcm93OwogICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZSAqZHI7CiAKLSAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0bmFtZSwgU05NUF9NQVhCVUZfTUVESVVNKTsKKyAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0bmFtZSwgc2l6ZW9mKHRuYW1lKSk7CiAKICAgICB0YWJsZXMgPSAoZGF0YV9zZXRfdGFibGVzICopIG5ldHNubXBfZ2V0X2xpc3RfZGF0YShhdXRvX3RhYmxlcywgdG5hbWUpOwogICAgIGlmICghdGFibGVzKSB7CkBAIC0xMTIzLDcgKzExNzcsNyBAQAogCiAgICAgICAgIERFQlVHTVNHVEwoKCJ0YWJsZV9zZXRfYWRkX3JvdyIsICJhZGRpbmcgaW5kZXggb2YgdHlwZSAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgdmItPnR5cGUpKTsKLSAgICAgICAgYnVmX3NpemUgPSBTTk1QX01BWEJVRl9NRURJVU07CisgICAgICAgIGJ1Zl9zaXplID0gc2l6ZW9mKGJ1Zik7CiAgICAgICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX21lbW9yeSh2Yi0+dHlwZSwgbGluZSwgYnVmLCAmYnVmX3NpemUpOwogICAgICAgICBuZXRzbm1wX3RhYmxlX3Jvd19hZGRfaW5kZXgocm93LCB2Yi0+dHlwZSwgYnVmLCBidWZfc2l6ZSk7CiAgICAgfQpAQCAtMTE0MSwxNCArMTE5NSwxNiBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgYnVmX3NpemUgPSBTTk1QX01BWEJVRl9NRURJVU07CisgICAgICAgIGJ1Zl9zaXplID0gc2l6ZW9mKGJ1Zik7CiAgICAgICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX21lbW9yeShkci0+dHlwZSwgbGluZSwgYnVmLCAmYnVmX3NpemUpOwogICAgICAgICBERUJVR01TR1RMKCgidGFibGVfc2V0X2FkZF9yb3ciLAogICAgICAgICAgICAgICAgICAgICAiYWRkaW5nIGRhdGEgYXQgY29sdW1uICVkIG9mIHR5cGUgJWRcbiIsIGRyLT5jb2x1bW4sCiAgICAgICAgICAgICAgICAgICAgIGRyLT50eXBlKSk7CiAgICAgICAgIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4ocm93LCBkci0+Y29sdW1uLCBkci0+dHlwZSwgYnVmLCBidWZfc2l6ZSk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAoZHItPndyaXRhYmxlKQogICAgICAgICAgICAgbmV0c25tcF9tYXJrX3Jvd19jb2x1bW5fd3JpdGFibGUocm93LCBkci0+Y29sdW1uLCAxKTsgICAgICAgLyogbWFrZSB3cml0YWJsZSAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmMgPSBuZXRzbm1wX3RhYmxlX2RhdGFfYWRkX3Jvdyh0YWJsZXMtPnRhYmxlX3NldC0+dGFibGUsIHJvdyk7CiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgewpAQCAtMTE2MSw2ICsxMjE3LDY0IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfb2lkX3N0YXNoX25vZGUgKioKK25ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfb3JfY3JlYXRlX3N0YXNoKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqZGF0YXRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm8pCit7CisgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnN0YXNocCA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAgIGJ1ZlsyNTZdOyAvKiBpcyB0aGlzIHJlYXNvbmFibGUgc2l6ZT8/ICovCisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgIGxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgcmM7CisKKyAgICByYyA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkYXRhc2V0X3Jvd19zdGFzaDolczoiLAorICAgICAgICAgICAgICAgICAgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7CisgICAgaWYgKCgtMSA9PSByYykgfHwgKChzaXplX3QpcmMgPj0gc2l6ZW9mKGJ1ZikpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiVzIGhhbmRsZXIgbmFtZSB0b28gbG9uZ1xuIiwgZGF0YXRhYmxlLT50YWJsZS0+bmFtZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGxlbiA9IHNpemVvZihidWYpIC0gcmM7CisgICAgcmMgPSBzbnByaW50X29iamlkKCZidWZbcmNdLCBsZW4sIHRhYmxlX2luZm8tPmluZGV4X29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mby0+aW5kZXhfb2lkX2xlbik7CisgICAgaWYgKC0xID09IHJjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIiVzIG9pZCBvciBuYW1lIHRvbyBsb25nXG4iLCBkYXRhdGFibGUtPnRhYmxlLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc3Rhc2hwID0gKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKiopCisgICAgICAgIG5ldHNubXBfdGFibGVfZ2V0X29yX2NyZWF0ZV9yb3dfc3Rhc2gocmVxaW5mbywgKHVfY2hhciAqKSBidWYpOworICAgIHJldHVybiBzdGFzaHA7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUX0dFVF9ORVdST1cKK25ldHNubXBfdGFibGVfcm93ICoKK25ldHNubXBfdGFibGVfZGF0YXNldF9nZXRfbmV3cm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcm9vdG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICpkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbykKK3sKKyAgICBvaWQgKiBjb25zdCBzdWZmaXggPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgKyByb290b2lkX2xlbiArIDI7CisgICAgc2l6ZV90IHN1ZmZpeF9sZW4gPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0gKHJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnN0YXNocDsKKyAgICBuZXdyb3dfc3Rhc2ggICAqbmV3cm93c3Rhc2g7CisKKyAgICBzdGFzaHAgPSBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X29yX2NyZWF0ZV9zdGFzaChyZXFpbmZvLCBkYXRhdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfaW5mbyk7CisgICAgaWYgKE5VTEwgPT0gc3Rhc2hwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG5ld3Jvd3N0YXNoID0gKG5ld3Jvd19zdGFzaCopbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEoKnN0YXNocCwgc3VmZml4LCBzdWZmaXhfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBuZXdyb3dzdGFzaCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gbmV3cm93c3Rhc2gtPm5ld3JvdzsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0RBVEFTRVRfR0VUX05FV1JPVyAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgogICogRGF0YSBTZXQgQVBJOiBSb3cgb3BlcmF0aW9ucwpAQCAtMTIwOCw2ICsxMzIyLDcgQEAKICAgICByZXR1cm4gc3RhcnQ7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAvKioKICAqIG1hcmtzIGEgZ2l2ZW4gY29sdW1uIGluIGEgcm93IGFzIHdyaXRhYmxlIG9yIG5vdC4KICAqLwpAQCAtMTIzNCwxNyArMTM0OSwzNCBAQAogICAgICAgICB9CiAgICAgICAgIGRhdGEtPmNvbHVtbiA9IGNvbHVtbjsKICAgICAgICAgZGF0YS0+d3JpdGFibGUgPSB3cml0YWJsZTsKLSAgICAgICAgZGF0YS0+bmV4dCA9IHJvdy0+ZGF0YTsKKyAgICAgICAgZGF0YS0+bmV4dCA9IChzdHJ1Y3QgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlX3MqKXJvdy0+ZGF0YTsKICAgICAgICAgcm93LT5kYXRhID0gZGF0YTsKICAgICB9IGVsc2UgewogICAgICAgICBkYXRhLT53cml0YWJsZSA9IHdyaXRhYmxlOwogICAgIH0KICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKioKLSAqIHNldHMgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgd2l0aCBkYXRhIGdpdmVuIGEgdHlwZSwgdmFsdWUsIGFuZAotICogbGVuZ3RoLiAgRGF0YSBpcyBtZW1kdXAnZWQgYnkgdGhlIGZ1bmN0aW9uLgorICogU2V0cyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyB3aXRoIGRhdGEgZ2l2ZW4gYSB0eXBlLCB2YWx1ZSwKKyAqIGFuZCBsZW5ndGguIERhdGEgaXMgbWVtZHVwJ2VkIGJ5IHRoZSBmdW5jdGlvbiwgYXQgbGVhc3QgaWYKKyAqIHR5cGUgIT0gU05NUF9OT1NVQ0hJTlNUQU5DRSBhbmQgaWYgdmFsdWVfbGVuID4gMC4KKyAqCisgKiBAcGFyYW1baW5dIHJvdyAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgdG8gYmUgbW9kaWZpZWQuCisgKiBAcGFyYW1baW5dIGNvbHVtbiAgICBJbmRleCBvZiB0aGUgY29sdW1uIHRvIGJlIG1vZGlmaWVkLgorICogQHBhcmFtW2luXSB0eXBlICAgICAgRWl0aGVyIHRoZSBBU04gdHlwZSBvZiB0aGUgdmFsdWUgdG8gYmUgc2V0IG9yCisgKiAgIFNOTVBfTk9TVUNISU5TVEFOQ0UuCisgKiBAcGFyYW1baW5dIHZhbHVlICAgICBJZiB0eXBlICE9IFNOTVBfTk9TVUNISU5TVEFOQ0UsIHBvaW50ZXIgdG8gdGhlCisgKiAgIG5ldyB2YWx1ZS4gTWF5IGJlIE5VTEwgaWYgdmFsdWVfbGVuID09IDAsIGUuZy4gd2hlbiBzdG9yaW5nIGEKKyAqICAgemVyby1sZW5ndGggb2N0ZXQgc3RyaW5nLiBJZ25vcmVkIHdoZW4gdHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFLgorICogQHBhcmFtW2luXSB2YWx1ZV9sZW4gSWYgdHlwZSAhPSBTTk1QX05PU1VDSElOU1RBTkNFLCBudW1iZXIgb2YgYnl0ZXMKKyAqICAgb2NjdXBpZWQgYnkgKnZhbHVlLiBJZ25vcmVkIHdoZW4gdHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFLgorICoKKyAqIEByZXR1cm4gU05NUEVSUl9TVUNDRVNTIHVwb24gc3VjY2VzczsgU05NUEVSUl9NQUxMT0Mgd2hlbiBvdXQgb2YgbWVtb3J5OworICogICBvciBTTk1QRVJSX0dFTkVSUiB3aGVuIHJvdyA9PSAwIG9yIHdoZW4gdHlwZSBkb2VzIG5vdCBtYXRjaCB0aGUgZGF0YXR5cGUKKyAqICAgb2YgdGhlIGRhdGEgc3RvcmVkIGluICpyb3cuIAorICoKICAqLwogaW50CiBuZXRzbm1wX3NldF9yb3dfY29sdW1uKG5ldHNubXBfdGFibGVfcm93ICpyb3csIHVuc2lnbmVkIGludCBjb2x1bW4sCkBAIC0xMjcwLDI5ICsxNDAyLDM2IEBACiAKICAgICAgICAgZGF0YS0+Y29sdW1uID0gY29sdW1uOwogICAgICAgICBkYXRhLT50eXBlID0gdHlwZTsKLSAgICAgICAgZGF0YS0+bmV4dCA9IHJvdy0+ZGF0YTsKKyAgICAgICAgZGF0YS0+bmV4dCA9IChzdHJ1Y3QgbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlX3MqKXJvdy0+ZGF0YTsKICAgICAgICAgcm93LT5kYXRhID0gZGF0YTsKICAgICB9CiAKLSAgICBpZiAodmFsdWUpIHsKLSAgICAgICAgaWYgKGRhdGEtPnR5cGUgIT0gdHlwZSkKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAvKiBUcmFuc2l0aW9ucyBmcm9tIC8gdG8gU05NUF9OT1NVQ0hJTlNUQU5DRSBhcmUgYWxsb3dlZCwgYnV0IG5vIG90aGVyIHRyYW5zaXRpb25zLiAqLworICAgIGlmIChkYXRhLT50eXBlICE9IHR5cGUgJiYgZGF0YS0+dHlwZSAhPSBTTk1QX05PU1VDSElOU1RBTkNFCisgICAgICAgICYmIHR5cGUgIT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogCi0gICAgICAgIFNOTVBfRlJFRShkYXRhLT5kYXRhLnZvaWRwKTsKLSAgICAgICAgaWYgKHZhbHVlX2xlbikgewotICAgICAgICAgICAgZGF0YS0+ZGF0YS5zdHJpbmcgPSBuZXRzbm1wX21lbWR1cCh2YWx1ZSwgKHZhbHVlX2xlbikpOwotICAgICAgICAgICAgaWYgKCFkYXRhLT5kYXRhLnN0cmluZykgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19DUklULCAibm8gbWVtb3J5IGluIG5ldHNubXBfc2V0X3Jvd19jb2x1bW4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkYXRhLT5kYXRhLnN0cmluZyA9IG1hbGxvYygxKTsKLSAgICAgICAgfQotICAgICAgICBkYXRhLT5kYXRhX2xlbiA9IHZhbHVlX2xlbjsKKyAgICAvKiBSZXR1cm4gbm93IGlmIG5laXRoZXIgdGhlIHR5cGUgbm9yIHRoZSBkYXRhIGl0c2VsZiBoYXMgYmVlbiBtb2RpZmllZC4gKi8KKyAgICBpZiAoZGF0YS0+dHlwZSA9PSB0eXBlICYmIGRhdGEtPmRhdGFfbGVuID09IHZhbHVlX2xlbgorICAgICAgICAmJiAodmFsdWUgPT0gTlVMTCB8fCBtZW1jbXAoJmRhdGEtPmRhdGEuc3RyaW5nLCB2YWx1ZSwgdmFsdWVfbGVuKSA9PSAwKSkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICAvKiBSZWFsbG9jYXRlIG1lbW9yeSBhbmQgc3RvcmUgdGhlIG5ldyB2YWx1ZS4gKi8KKyAgICBkYXRhLT5kYXRhLnZvaWRwID0gcmVhbGxvYyhkYXRhLT5kYXRhLnZvaWRwLCB2YWx1ZSA/IHZhbHVlX2xlbiA6IDApOworICAgIGlmICh2YWx1ZSAmJiB2YWx1ZV9sZW4gJiYgIWRhdGEtPmRhdGEudm9pZHApIHsKKyAgICAgICAgZGF0YS0+ZGF0YV9sZW4gPSAwOworICAgICAgICBkYXRhLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgc25tcF9sb2coTE9HX0NSSVQsICJubyBtZW1vcnkgaW4gbmV0c25tcF9zZXRfcm93X2NvbHVtbiIpOworICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7CiAgICAgfQorICAgIGlmICh2YWx1ZSAmJiB2YWx1ZV9sZW4pCisgICAgICAgIG1lbWNweShkYXRhLT5kYXRhLnN0cmluZywgdmFsdWUsIHZhbHVlX2xlbik7CisgICAgZGF0YS0+dHlwZSA9IHR5cGU7CisgICAgZGF0YS0+ZGF0YV9sZW4gPSB2YWx1ZV9sZW47CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKgogICogRGF0YSBTZXQgQVBJOiBJbmRleCBvcGVyYXRpb25zCkBAIC0xMzEwLDMzICsxNDQ5LDI2IEBACiAKIC8qKiBhZGRzIG11bHRpcGxlIGluZGV4ZXMgdG8gYSB0YWJsZV9kYXRhc2V0IGhlbHBlciBvYmplY3QuCiAgKiAgVG8gZW5kIHRoZSBsaXN0LCB1c2UgYSAwIGFmdGVyIHRoZSBsaXN0IG9mIEFTTiBpbmRleCB0eXBlcy4gKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TRVRfQUREX0lOREVYRVMKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBuZXRzbm1wX3RhYmxlX3NldF9hZGRfaW5kZXhlcyhuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0c2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKQotI2Vsc2UKLW5ldHNubXBfdGFibGVfc2V0X2FkZF9pbmRleGVzKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBkZWJ1Z2FyZ3M7CiAgICAgaW50ICAgICAgICAgICAgIHR5cGU7CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoZGVidWdhcmdzLCB0c2V0KTsKLSNlbHNlCi0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldDsKLQotICAgIHZhX3N0YXJ0KGRlYnVnYXJncyk7Ci0gICAgdHNldCA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKik7Ci0jZW5kaWYKIAogICAgIGlmICh0c2V0KQogICAgICAgICB3aGlsZSAoKHR5cGUgPSB2YV9hcmcoZGVidWdhcmdzLCBpbnQpKSAhPSAwKQotICAgICAgICAgICAgbmV0c25tcF90YWJsZV9kYXRhX2FkZF9pbmRleCh0c2V0LT50YWJsZSwgdHlwZSk7CisgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFfYWRkX2luZGV4KHRzZXQtPnRhYmxlLCAodV9jaGFyKXR5cGUpOwogCiAgICAgdmFfZW5kKGRlYnVnYXJncyk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9TRVRfQUREX0lOREVYRVMgKi8KIAorI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9EQVRBU0VUICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHRhYmxlX2RhdGFzZXQpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfREFUQVNFVCAqLwogLyoqIEB9IAogICovCmRpZmYgLS1naXQgYS9hZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX2l0ZXJhdG9yLmMKaW5kZXggZTc3NDJlZC4uOGVkNWNkMCAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy90YWJsZV9pdGVyYXRvci5jCisrKyBiL2FnZW50L2hlbHBlcnMvdGFibGVfaXRlcmF0b3IuYwpAQCAtODQsMjAgKzg0LDM0IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaD4KKwogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX2FsbCwgbWliX2hlbHBlcnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV9pdGVyYXRvcl9pbnNlcnRfY29udGV4dCwgdGFibGVfaXRlcmF0b3JfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX2NyZWF0ZV90YWJsZSwgdGFibGVfaXRlcmF0b3JfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX3Jvd19maXJzdCwgdGFibGVfaXRlcmF0b3JfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX2l0ZXJhdG9yX3Jvd19jb3VudCwgdGFibGVfaXRlcmF0b3JfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfU1RBU0hfQ0FDSEUKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGFfbGlzdF9nZXRfbGlzdF9ub2RlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1NUQVNIX0NBQ0hFICovCisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCiAgKiBJdGVyYXRvciBBUEk6IFRhYmxlIG1haW50ZW5hbmNlCkBAIC0xMTYsNiArMTMwLDcgQEAKICAgICAgKgogICAgICAqIFRpbWUgd2lsbCBzaG93IHdoZXRoZXIgdGhpcyBpcyBhIHNlbnNpYmxlIGFwcHJvYWNoIG9yIG5vdC4KICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9DUkVBVEVfVEFCTEUKIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqCiBuZXRzbm1wX2l0ZXJhdG9yX2NyZWF0ZV90YWJsZSggTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICpmaXJzdERQLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTmV4dF9EYXRhX1BvaW50ICAqbmV4dERQLApAQCAtMTM2LDcgKzE1MSw5IEBACiAKICAgICByZXR1cm4gaWluZm87CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9DUkVBVEVfVEFCTEUgKi8KIAorLyoqIEZyZWUgdGhlIG1lbW9yeSB0aGF0IHdhcyBhbGxvY2F0ZWQgZm9yIGEgdGFibGUgaXRlcmF0b3IuICovCiB2b2lkCiBuZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZSggbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyApCiB7CkBAIC0xNDcsNiArMTY0LDcgQEAKICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIGlpbmZvLT5pbmRleGVzICk7CiAgICAgICAgIGlpbmZvLT5pbmRleGVzID0gTlVMTDsKICAgICB9CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKGlpbmZvLT50YWJsZV9yZWdpbmZvKTsKICAgICBTTk1QX0ZSRUUoIGlpbmZvICk7CiB9CiAKQEAgLTE2NCw3ICsxODIsMzcgQEAKICAqCiAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKLS8qKiByZXR1cm5zIGEgbmV0c25tcF9taWJfaGFuZGxlciBvYmplY3QgZm9yIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgKi8KK3N0YXRpYyBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKgorbmV0c25tcF9pdGVyYXRvcl9yZWYobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbykKK3sKKyAgICBpaW5mby0+cmVmY250Kys7CisgICAgcmV0dXJuIGlpbmZvOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9pdGVyYXRvcl9kZXJlZihuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKQoreworICAgIGlmICgtLWlpbmZvLT5yZWZjbnQgPT0gMCkKKyAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGUoaWluZm8pOworfQorCit2b2lkIG5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8obmV0c25tcF9taWJfaGFuZGxlciAqaCkKK3sKKyAgICBuZXRzbm1wX2Fzc2VydChoKTsKKyAgICBuZXRzbm1wX2Fzc2VydChoLT5teXZvaWQpOworICAgICgobmV0c25tcF9pdGVyYXRvcl9pbmZvICopKGgtPm15dm9pZCkpLT5yZWZjbnQrKzsKKyAgICBoLT5kYXRhX2Nsb25lID0gKHZvaWQgKigqKSh2b2lkICopKW5ldHNubXBfaXRlcmF0b3JfcmVmOworICAgIGgtPmRhdGFfZnJlZSAgPSAodm9pZCgqKSh2b2lkICopKW5ldHNubXBfaXRlcmF0b3JfZGVyZWY7Cit9CisKKy8qKgorICogUmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyLgorICoKKyAqIFRoZSBjYWxsZXIgcmVtYWlucyB0aGUgb3duZXIgb2YgdGhlIGl0ZXJhdG9yIGluZm9ybWF0aW9uIG9iamVjdCBpZgorICogdGhlIGZsYWcgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaGFzIG5vdCBiZWVuIHNldCwgYW5kIHRoZSBjcmVhdGVkCisgKiBoYW5kbGVyIGJlY29tZXMgdGhlIG93bmVyIG9mIHRoZSBpdGVyYXRvciBpbmZvcm1hdGlvbiBpZiB0aGUgZmxhZworICogTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaGFzIGJlZW4gc2V0LgorICovCiBuZXRzbm1wX21pYl9oYW5kbGVyICoKIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbykKIHsKQEAgLTE4MSw2ICsyMjksOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIG1lLT5teXZvaWQgPSBpaW5mbzsKKyAgICBpZiAoaWluZm8tPmZsYWdzICYgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8pCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX2l0ZXJhdG9yX2luZm8obWUpOwogICAgIHJldHVybiBtZTsKIH0KIApAQCAtMTk0LDcgKzI0NCwxMSBAQAogICoKICAqIEBwYXJhbSByZWdpbmZvIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0CiAgKgotICogQHBhcmFtIGlpbmZvIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaXRlcmF0b3JfaW5mbyBzdHJ1Y3QKKyAqIEBwYXJhbSBpaW5mbyBBIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gc3RydWN0LiBJZiB0aGUgZmxhZworICogTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaXMgbm90IHNldCBpbiBpaW5mby0+ZmxhZ3MsIHRoZSBjYWxsZXIgcmVtYWlucworICogdGhlIG93bmVyIG9mIHRoaXMgc3RydWN0dXJlLiBBbmQgaWYgdGhlIGZsYWcgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8gaXMKKyAqIHNldCBpbiBpaW5mby0+ZmxhZ3MsIG93bmVyc2hpcCBvZiB0aGlzIGRhdGEgc3RydWN0dXJlIGlzIHBhc3NlZCB0byB0aGUKKyAqIGhhbmRsZXIuCiAgKgogICogQHJldHVybiBNSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuCiAgKglGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMRUQsIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLgpAQCAtMjA1LDcgKzI1OSw5IEBACiBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pCiB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICByZWdpbmZvLT5tb2RlcyB8PSBIQU5ETEVSX0NBTl9TVEFTSDsKKyNlbmRpZiAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXIoaWluZm8pKTsKICAgICBpZiAoIWlpbmZvKQpAQCAtMjM2LDYgKzI5Miw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX0lURVJBVE9SX05BTUUpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfSU5TRVJUX0NPTlRFWFQKIC8qKiBpbnNlcnRzIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZm9yIGEgbmV3bHkKICAqICBjcmVhdGVkIHJvdyBpbnRvIGEgcmVxdWVzdCAqLwogTkVUU05NUF9JTkxJTkUgdm9pZApAQCAtMzAwLDYgKzM1Nyw3IEBACiAgICAgICAgIH0KICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9JTlNFUlRfQ09OVEVYVCAqLwogCiAjZGVmaW5lIFRJX1JFUVVFU1RfQ0FDSEUgInRpX2NhY2hlIgogCkBAIC0zMTQsNyArMzcyLDcgQEAKIAogc3RhdGljIHZvaWQKIG5ldHNubXBfZnJlZV90aV9jYWNoZSh2b2lkICppdCkgewotICAgIHRpX2NhY2hlX2luZm8gKmJlZXIgPSBpdDsKKyAgICB0aV9jYWNoZV9pbmZvICpiZWVyID0gKHRpX2NhY2hlX2luZm8qKWl0OwogICAgIGlmICghaXQpIHJldHVybjsKICAgICBpZiAoYmVlci0+ZGF0YV9jb250ZXh0ICYmIGJlZXItPmZyZWVfY29udGV4dCkgewogICAgICAgICAgICAgKGJlZXItPmZyZWVfY29udGV4dCkoYmVlci0+ZGF0YV9jb250ZXh0LCBiZWVyLT5paW5mbyk7CkBAIC0zNDAsMTEgKzM5OCwxMyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qIGV4dHJhY3QgZXhpc3RpbmcgY2FjaGVkIHN0YXRlICovCi0gICAgdGlfaW5mbyA9IG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRJX1JFUVVFU1RfQ0FDSEUpOworICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVElfUkVRVUVTVF9DQUNIRSk7CiAKICAgICAvKiBubyBleGlzdGluZyBjYWNoZWQgc3RhdGUuICBtYWtlIGEgbmV3IG9uZS4gKi8KICAgICBpZiAoIXRpX2luZm8pIHsKICAgICAgICAgdGlfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYodGlfY2FjaGVfaW5mbyk7CisgICAgICAgIGlmICh0aV9pbmZvID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUSV9SRVFVRVNUX0NBQ0hFLApAQCAtNDAwLDE1ICs0NjAsMTcgQEAKICAgICB2b2lkICAgICAgICAgICAqY2FsbGJhY2tfZGF0YV9jb250ZXh0ID0gTlVMTDsKICAgICB0aV9jYWNoZV9pbmZvICAqdGlfaW5mbyA9IE5VTEw7CiAgICAgaW50ICAgICAgICAgICAgIHJlcXVlc3RfY291bnQgPSAwOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVNIX0NBQ0hFCiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKmNpbmZvID0gTlVMTDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKm9sZF9pbmRleGVzID0gTlVMTCwgKnZiOwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX3JlZ19pbmZvID0gTlVMTDsKICAgICBpbnQgaTsKICAgICBuZXRzbm1wX2RhdGFfbGlzdCAgICAqbGRhdGEgPSBOVUxMOwotICAgIAorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KKwogICAgIGlpbmZvID0gKG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqKSBoYW5kbGVyLT5teXZvaWQ7CiAgICAgaWYgKCFpaW5mbyB8fCAhcmVnaW5mbyB8fCAhcmVxaW5mbykKLSAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogCiAgICAgdGJsX2luZm8gPSBpaW5mby0+dGFibGVfcmVnaW5mbzsKIApAQCAtNDMxLDEyICs0OTMsMTUgQEAKIAogICAgIC8qIHByZWxpbWluYXJ5IGFuYWx5c2lzICovCiAgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICBjYXNlIE1PREVfR0VUX1NUQVNIOgogICAgICAgICBjaW5mbyA9IG5ldHNubXBfZXh0cmFjdF9zdGFzaF9jYWNoZShyZXFpbmZvKTsKICAgICAgICAgdGFibGVfcmVnX2luZm8gPSBuZXRzbm1wX2ZpbmRfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8ocmVnaW5mbyk7CiAKICAgICAgICAgLyogWFhYOiBtb3ZlIHRoaXMgbWFsbG9jIHRvIHN0YXNoX2NhY2hlIGhhbmRsZXI/ICovCiAgICAgICAgIHJlcXRtcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9yZXF1ZXN0X2luZm8pOworICAgICAgICBpZiAocmVxdG1wID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICByZXF0bXAtPnN1YnRyZWUgPSByZXF1ZXN0cy0+c3VidHJlZTsKICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdG1wLApAQCAtNDQ3LDEyICs1MTIsMjEgQEAKICAgICAgICAgLyogcmVtZW1iZXIgdGhlIGluZGV4ZXMgdGhhdCB3ZXJlIG9yaWdpbmFsbHkgcGFyc2VkLiAqLwogICAgICAgICBvbGRfaW5kZXhlcyA9IHRhYmxlX2luZm8tPmluZGV4ZXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzIDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAodGFibGVfaW5mbyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBDbGVhbnVwIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQogICAgICAgICAgICAgaWYgKHRhYmxlX2luZm8tPmNvbG51bSA8IHRibF9pbmZvLT5taW5fY29sdW1uIC0gMSkgewogICAgICAgICAgICAgICAgIC8qIFhYWDogb3B0aW1pemUgYmV0dGVyIHRoYW4gdGhpcyAqLwogICAgICAgICAgICAgICAgIC8qIGZvciBub3csIGp1c3QgaW5jcmVhc2UgdG8gY29sbnVtLTEgKi8KQEAgLTQ2MywxMCArNTM3LDE4IEBACiAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cHJvY2Vzc2VkID0gVEFCTEVfSVRFUkFUT1JfTk9UQUdBSU47CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIHRpX2luZm8gPQorICAgICAgICAgICAgdGlfaW5mbyA9ICh0aV9jYWNoZV9pbmZvKikKICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUSV9SRVFVRVNUX0NBQ0hFKTsKICAgICAgICAgICAgIGlmICghdGlfaW5mbykgewogICAgICAgICAgICAgICAgIHRpX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKHRpX2NhY2hlX2luZm8pOworICAgICAgICAgICAgICAgIGlmICh0aV9pbmZvID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogQ2xlYW51cCAKKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoZnJlZV90aGlzX2luZGV4X3NlYXJjaCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRJX1JFUVVFU1RfQ0FDSEUsCkBAIC00ODQsOCArNTY2LDExIEBACiAgICAgICovCiAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQgfHwKICAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQgfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVF9TVEFTSCB8fAotICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxKSB7CisgICAgICAgIHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRfU1RBU0gKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIHx8IHJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfUkVTRVJWRTEKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIENvdW50IHRoZSBudW1iZXIgb2YgcmVxdWVzdCBpbiB0aGUgbGlzdCwKICAgICAgICAgICogICBzbyB0aGF0IHdlJ2xsIGtub3cgd2hlbiB3ZSdyZSBmaW5pc2hlZApAQCAtNTU1LDI3ICs2NDAsNTMgQEAKICAgICAgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICAgICAgICAgIC8qIFhYWDogc3RvcmUgaW4gYW4gYXJyYXkgZm9yIGZhc3RlciByZXRyaXZhbCAqLworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IHN0b3JlIGluIGFuIGFycmF5IGZvciBmYXN0ZXIgcmV0cmlldmFsICovCiAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2luZm8gPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIENsZWFudXAgCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUocmVxdG1wKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgY29sb2lkW3JlZ2luZm8tPnJvb3RvaWRfbGVuICsgMV0gPSB0YWJsZV9pbmZvLT5jb2xudW07CiAKLSAgICAgICAgICAgICAgICAgICAgdGlfaW5mbyA9CisgICAgICAgICAgICAgICAgICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LCBUSV9SRVFVRVNUX0NBQ0hFKTsKIAogICAgICAgICAgICAgICAgICAgICBzd2l0Y2gocmVxaW5mby0+bW9kZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfR0VUOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGxvb2tpbmcgZm9yIGV4YWN0IG1hdGNoZXMgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGJ1aWxkX29pZF9ub2FsbG9jKG15bmFtZSwgTUFYX09JRF9MRU4sICZteW5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sb2lkLCBjb2xvaWRfbGVuLCBpbmRleF9zZWFyY2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUobXluYW1lLCBteW5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCkgPT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGtlZXAgdGhpcyAqLwotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfcmVtZW1iZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwgbXluYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2RhdGFfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwgaWluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGtlZXAgdGhpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2l0ZXJhdG9yX3JlbWVtYmVyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXluYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15bmFtZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpaW5mbykgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBDbGVhbnVwIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXRtcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShyZXF0bXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0X2NvdW50LS07ICAgLyogT25lIGxlc3MgdG8gbG9vayBmb3IgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlpbmZvLT5mcmVlX2RhdGFfY29udGV4dCAmJiBjYWxsYmFja19kYXRhX2NvbnRleHQpIHsKQEAgLTU4NSw2ICs2OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRQogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfR0VUX1NUQVNIOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogY29sbGVjdCBkYXRhIGZvciBlYWNoIGNvbHVtbiBmb3IgZXZlcnkgcm93ICovCiAgICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9vaWRfbm9hbGxvYyhteW5hbWUsIE1BWF9PSURfTEVOLCAmbXluYW1lX2xlbiwKQEAgLTYxMiw2ICs3MjQsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5jb2xudW0gPSBpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiID0gcmVxdG1wLT5yZXF1ZXN0dmIgPQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdmFyaWFibGVfbGlzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZiID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogQ2xlYW51cCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChmcmVlX3RoaXNfaW5kZXhfc2VhcmNoKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiLT50eXBlID0gQVNOX05VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKHZiLCBteW5hbWUsIG15bmFtZV9sZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXIoaGFuZGxlciwgcmVnaW5mbywKQEAgLTYyNywxNyArNzQ4LDMwIEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlID0gTU9ERV9HRVRfU1RBU0g7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFTSF9DQUNIRSAqLwogCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogbG9va2luZyBmb3IgIm5leHQiIG1hdGNoZXMgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2NoZWNrX2dldG5leHRfcmVwbHkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWVzdCwgY29sb2lkLCBjb2xvaWRfbGVuLCBpbmRleF9zZWFyY2gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0aV9pbmZvLT5yZXN1bHRzKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfcmVtZW1iZXIocmVxdWVzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpX2luZm8tPnJlc3VsdHMtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aV9pbmZvLT5yZXN1bHRzLT5uYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2RhdGFfY29udGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX2xvb3BfY29udGV4dCwgaWluZm8pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXRzbm1wX2l0ZXJhdG9yX3JlbWVtYmVyKHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGlfaW5mby0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0cy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aV9pbmZvLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHRzLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFja19kYXRhX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfbG9vcF9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlpbmZvKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIENsZWFudXAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZnJlZV90aGlzX2luZGV4X3NlYXJjaCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyZWVfdGhpc19pbmRleF9zZWFyY2gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICBJZiB3ZSd2ZSBiZWVuIHRvbGQgdGhhdCB0aGUgcm93cyBhcmUgc29ydGVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdGhlbiB0aGUgZmlyc3QgdmFsaWQgb25lIHdlIGZpbmQKQEAgLTY1NCwxMiArNzg4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgICAgICAgICAgICAgICAgICAgICAgLyogbmVlZGVkIHByb2Nlc3NpbmcgYWxyZWFkeSBkb25lIGluIFJFU0VSVkUxICovCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKQEAgLTY5Nyw3ICs4MzMsNyBAQAogICAgICAgICAgICAgICAgIGZvcihyZXF1ZXN0ID0gcmVxdWVzdHMgOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgICAgIHRpX2luZm8gPQorICAgICAgICAgICAgICAgICAgICB0aV9pbmZvID0gKHRpX2NhY2hlX2luZm8qKQogICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRJX1JFUVVFU1RfQ0FDSEUpOwogICAgICAgICAgICAgICAgICAgICBpZiAoIXRpX2luZm8tPnJlc3VsdHMpIHsKQEAgLTcyMiwxMyArODU4LDE2IEBACiAgICAgfQogCiAgICAgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQgfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX0dFVE5FWFQgfHwKLSAgICAgICAgcmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgeworICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfR0VUTkVYVAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgfHwgcmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICApIHsKICAgICAgICAgLyogcGVyIHJlcXVlc3QgbGFzdCBtaW51dGUgcHJvY2Vzc2luZyAqLwogICAgICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzIDsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCiAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICB0aV9pbmZvID0KKyAgICAgICAgICAgIHRpX2luZm8gPSAodGlfY2FjaGVfaW5mbyopCiAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdCwgVElfUkVRVUVTVF9DQUNIRSk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvID0KICAgICAgICAgICAgICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKQEAgLTc1OSw3ICs4OTgsOSBAQAogICAgICAgICAgICAgICAgIC8qIEZBTEwgVEhST1VHSCAqLwogCiAgICAgICAgICAgICBjYXNlIE1PREVfR0VUOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICAgICAgaWYgKHRpX2luZm8tPmRhdGFfY29udGV4dCkKICAgICAgICAgICAgICAgICAgICAgLyogd2UgZG9uJ3QgYWRkIGEgZnJlZSBwb2ludGVyLCBzaW5jZSBpdCdzIGluIHRoZQogICAgICAgICAgICAgICAgICAgICAgICBUSV9SRVFVRVNUX0NBQ0hFIGluc3RlYWQgKi8KQEAgLTc4MiwxMCArOTIzLDEyIEBACiAgICAgICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUTkVYVCkgewogICAgICAgICAgICAgcmVxaW5mby0+bW9kZSA9IE1PREVfR0VUOwogICAgICAgICB9CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUKICAgICB9IGVsc2UgaWYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRfU1RBU0gpIHsKICAgICAgICAgbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRzKHJlcXRtcCk7CiAgICAgICAgIFNOTVBfRlJFRShyZXF0bXApOwogICAgICAgICB0YWJsZV9pbmZvLT5pbmRleGVzID0gb2xkX2luZGV4ZXM7CisjZW5kaWYgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBU0hfQ0FDSEUgKi8KICAgICB9CiAKIApAQCAtODE2LDYgKzk1OSw3IEBACiAgKgogICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfSVRFUkFUT1JfUk9XX0ZJUlNUCiB2b2lkICoKIG5ldHNubXBfaXRlcmF0b3Jfcm93X2ZpcnN0KCBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvICkgewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdnAxLCAqdnAyOwpAQCAtODM0LDYgKzk3OCw3IEBACiAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIHZwMSApOwogICAgIHJldHVybiBjdHgyOyAgLyogb3IgKmN0eDIgPz8gKi8KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0lURVJBVE9SX1JPV19GSVJTVCAqLwogCiB2b2lkICoKIG5ldHNubXBfaXRlcmF0b3Jfcm93X2dldCggbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbywgdm9pZCAqcm93ICkKQEAgLTk0NSw3ICsxMDkwLDcgQEAKIAogICAgIHZwMSA9IHNubXBfY2xvbmVfdmFyYmluZChpaW5mby0+aW5kZXhlcyk7CiAgICAgdnAyID0gaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMSwgaWluZm8gKTsKLSAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAleCAleCAleFxuIiwKKyAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogCiAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KQEAgLTk2NCw3ICsxMTA5LDcgQEAKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgdnAyID0gaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQoICZjdHgxLCAmY3R4MiwgdnAyLCBpaW5mbyApOwotICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgIm5leHQgRFA6ICV4ICV4ICV4XG4iLAorICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgIm5leHQgRFA6ICVwICVwICVwXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogICAgICAgICAvKiBYWFggLSBmcmVlIGNvbnRleHQgPyAqLwogICAgIH0KQEAgLTk5NCw3ICsxMTM5LDcgQEAKIAogICAgIHZwMSA9IHNubXBfY2xvbmVfdmFyYmluZChpaW5mby0+aW5kZXhlcyk7CiAgICAgdnAyID0gaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMSwgaWluZm8gKTsKLSAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAleCAleCAleFxuIiwKKyAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Z2V0IiwgImZpcnN0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eDEsIGN0eDIsIHZwMikpOwogCiAgICAgaWYgKCAhaW5zdGFuY2UgfHwgIWxlbiApIHsKQEAgLTEwMzEsNyArMTE3Niw3IEBACiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHZwMiA9IGlpbmZvLT5nZXRfbmV4dF9kYXRhX3BvaW50KCAmY3R4MSwgJmN0eDIsIHZwMiwgaWluZm8gKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJuZXh0IERQOiAleCAleCAleFxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmdldCIsICJuZXh0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIpKTsKICAgICAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KICAgICB9CkBAIC0xMDQyLDYgKzExODcsNyBAQAogICAgIHJldHVybiAoIHZwMiA/IGN0eDIgOiBOVUxMICk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9JVEVSQVRPUl9ST1dfQ09VTlQKIGludAogbmV0c25tcF9pdGVyYXRvcl9yb3dfY291bnQoIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8gKQogewpAQCAtMTA2MCw3ICsxMjA2LDcgQEAKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIAotICAgIERFQlVHTVNHVEwoKCJ0YWJsZTppdGVyYXRvcjpjb3VudCIsICJmaXJzdCBEUDogJXggJXggJXhcbiIsCisgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmNvdW50IiwgImZpcnN0IERQOiAlcCAlcCAlcFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4MSwgY3R4MiwgdnAyKSk7CiAKICAgICAvKiBYWFggLSBmcmVlIGNvbnRleHQgPyAqLwpAQCAtMTA2OCw3ICsxMjE0LDcgQEAKICAgICB3aGlsZSAodnAyKSB7CiAgICAgICAgIGkrKzsKICAgICAgICAgdnAyID0gaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQoICZjdHgxLCAmY3R4MiwgdnAyLCBpaW5mbyApOwotICAgICAgICBERUJVR01TR1RMKCgidGFibGU6aXRlcmF0b3I6Y291bnQiLCAibmV4dCBEUDogJXggJXggJXggKCVkKVxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInRhYmxlOml0ZXJhdG9yOmNvdW50IiwgIm5leHQgRFA6ICVwICVwICVwICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgxLCBjdHgyLCB2cDIsIGkpKTsKICAgICAgICAgLyogWFhYIC0gZnJlZSBjb250ZXh0ID8gKi8KICAgICB9CkBAIC0xMDc3LDYgKzEyMjMsNyBAQAogICAgIHNubXBfZnJlZV92YXJiaW5kKCB2cDEgKTsKICAgICByZXR1cm4gaTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX0lURVJBVE9SX1JPV19DT1VOVCAqLwogCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfcm93LmMgYi9hZ2VudC9oZWxwZXJzL3RhYmxlX3Jvdy5jCmluZGV4IDdjOGE0YzQuLjJhMzNmMjMgMTAwNjQ0Ci0tLSBhL2FnZW50L2hlbHBlcnMvdGFibGVfcm93LmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV9yb3cuYwpAQCAtOCw2ICs4LDcgQEAKICNkZWZpbmUgVEFCTEVfUk9XX0RBVEEgICJ0YWJsZV9yb3ciCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgpAQCAtMjMsNiArMjQsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3Jvd19hbGwsIG1pYl9oZWxwZXJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfcm93X2V4dHJhY3QsIHRhYmxlX3Jvd19hbGwpCisKKwogLyoKICAqIHNubXAuaDojZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9CRUdJTiAgICAgICAgLTEgCiAgKiBzbm1wLmg6I2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTEgICAgIDAgCkBAIC0xMzYsNyArMTQyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICBNQVhfT0lEX0xFTi1yb3dfb2lkX2xlbiwgJmxlbiwgTlVMTCwgMCwgaW5kZXgpOwogICAgIHJvd19vaWRfbGVuICs9IGxlbjsKICAgICBmcmVlKHJlZ2luZm8tPnJvb3RvaWQpOwotICAgIHJlZ2luZm8tPnJvb3RvaWQgPSBuZXRzbm1wX21lbWR1cChyb3dfb2lkLCByb3dfb2lkX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICByZWdpbmZvLT5yb290b2lkID0gc25tcF9kdXBsaWNhdGVfb2JqaWQocm93X29pZCwgcm93X29pZF9sZW4pOwogICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuID0gcm93X29pZF9sZW47CiAKICAgICAgCkBAIC0xNTQsMTEgKzE2MCwxMyBAQAogCiAKIC8qKiByZXR1cm4gdGhlIHJvdyBkYXRhIHN0cnVjdHVyZSBzdXBwbGllZCB0byB0aGUgdGFibGVfcm93IGhlbHBlciAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1JPV19FWFRSQUNUCiB2b2lkICoKIG5ldHNubXBfdGFibGVfcm93X2V4dHJhY3QobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QpCiB7CiAgICAgcmV0dXJuIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX1JPV19EQVRBKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1JPV19FWFRSQUNUICovCiAvKiogQGNvbmQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYyBiL2FnZW50L2hlbHBlcnMvdGFibGVfdGRhdGEuYwppbmRleCA0NmQzZTE4Li44ODY1MDg0IDEwMDY0NAotLS0gYS9hZ2VudC9oZWxwZXJzL3RhYmxlX3RkYXRhLmMKKysrIGIvYWdlbnQvaGVscGVycy90YWJsZV90ZGF0YS5jCkBAIC0xLDQgKzEsMTAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaD4KIAogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KQEAgLTYsMTEgKzEyLDcgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaD4KIApAQCAtMTgsNiArMjAsMjIgQEAKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3RkYXRhX2FsbCwgbWliX2hlbHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfdGRhdGEsIHRhYmxlX3RkYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV90ZGF0YV9kZWxldGVfdGFibGUsIHRhYmxlX3RkYXRhX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0YWJsZV90ZGF0YV9leHRyYWN0X3RhYmxlLCB0YWJsZV90ZGF0YV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGFibGVfdGRhdGFfcmVtb3ZlX3JvdywgdGFibGVfdGRhdGFfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRhYmxlX3RkYXRhX2luc2VydF9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RBQkxFX1REQVRBCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9UQUJMRV9UREFUQV9SRU1PVkVfUk9XCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X3JlbW92ZSkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9UQUJMRV9UREFUQV9SRU1PVkVfUk9XICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEFCTEVfVERBVEEgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBCisKIC8qKiBAZGVmZ3JvdXAgdGRhdGEgdGRhdGEKICAqICBJbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4KICAqICBAaW5ncm91cCB0YWJsZQpAQCAtNTcsMTIgKzc1LDIxIEBACiAgICAgaWYgKCAhdGFibGUgKQogICAgICAgICByZXR1cm4gTlVMTDsKIAorICAgIHRhYmxlLT5mbGFncyA9IGZsYWdzOwogICAgIGlmIChuYW1lKQogICAgICAgICB0YWJsZS0+bmFtZSA9IHN0cmR1cChuYW1lKTsKLSAgICB0YWJsZS0+Y29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCggInRhYmxlX2NvbnRhaW5lciIgKTsKKworICAgIGlmICghKHRhYmxlLT5mbGFncyAmIFREQVRBX0ZMQUdfTk9fQ09OVEFJTkVSKSkgeworICAgICAgICB0YWJsZS0+Y29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCggbmFtZSApOworICAgICAgICBpZiAoIXRhYmxlLT5jb250YWluZXIpCisgICAgICAgICAgICB0YWJsZS0+Y29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCggInRhYmxlX2NvbnRhaW5lciIgKTsKKyAgICAgICAgaWYgKHRhYmxlLT5jb250YWluZXIpCisgICAgICAgICAgICB0YWJsZS0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cChuYW1lKTsKKyAgICB9CiAgICAgcmV0dXJuIHRhYmxlOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfREVMRVRFX1RBQkxFCiAvKiogY3JlYXRlcyBhbmQgcmV0dXJucyBhICd0ZGF0YScgdGFibGUgZGF0YSBzdHJ1Y3R1cmUgKi8KIHZvaWQKIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKG5ldHNubXBfdGRhdGEgKnRhYmxlKQpAQCAtNzgsNiArMTA1LDcgQEAKICAgICBTTk1QX0ZSRUUodGFibGUpOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RBQkxFX1REQVRBX0RFTEVURV9UQUJMRSAqLwogCiAvKiogY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IHJvdyBkYXRhIHN0cnVjdHVyZSAqLwogbmV0c25tcF90ZGF0YV9yb3cgKgpAQCAtODgsNiArMTE2LDggQEAKIH0KIAogLyoqIGNsb25lcyBhICd0ZGF0YScgcm93LiBET0VTIE5PVCBDTE9ORSBUSEUgVEFCTEUtU1BFQ0lGSUMgRU5UUlkgREFUQS4gKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZGF0YV9jbG9uZV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9DTE9ORV9ST1cKIG5ldHNubXBfdGRhdGFfcm93ICoKIG5ldHNubXBfdGRhdGFfY2xvbmVfcm93KG5ldHNubXBfdGRhdGFfcm93ICpyb3cpCiB7CkBAIC0xMDgsOCArMTM4LDggQEAKICAgICB9CiAKICAgICBpZiAocm93LT5vaWRfaW5kZXgub2lkcykgewotICAgICAgICBuZXdyb3ctPm9pZF9pbmRleC5vaWRzID0gbmV0c25tcF9tZW1kdXAocm93LT5vaWRfaW5kZXgub2lkcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPm9pZF9pbmRleC5sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgIG5ld3Jvdy0+b2lkX2luZGV4Lm9pZHMgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQocm93LT5vaWRfaW5kZXgub2lkcywgcm93LT5vaWRfaW5kZXgubGVuKTsKICAgICAgICAgaWYgKCFuZXdyb3ctPm9pZF9pbmRleC5vaWRzKSB7CiAgICAgICAgICAgICBpZiAobmV3cm93LT5pbmRleGVzKQogICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKG5ld3Jvdy0+aW5kZXhlcyk7CkBAIC0xMjAsOSArMTUwLDEyIEBACiAKICAgICByZXR1cm4gbmV3cm93OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfQ0xPTkVfUk9XICovCiAKIC8qKiBjb3B5IHRoZSBjb250ZW50cyBvZiBhICd0ZGF0YScgcm93LgogICAgIERPRVMgTk9UIENPUFkgVEhFIFRBQkxFLVNQRUNJRklDIEVOVFJZIERBVEEuICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfY29weV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9DT1BZX1JPVwogaW50CiBuZXRzbm1wX3RkYXRhX2NvcHlfcm93KG5ldHNubXBfdGRhdGFfcm93ICpkc3Rfcm93LCBuZXRzbm1wX3RkYXRhX3JvdyAqc3JjX3JvdykKIHsKQEAgLTEzOCwxNCArMTcxLDE1IEBACiAgICAgfQogCiAgICAgaWYgKHNyY19yb3ctPm9pZF9pbmRleC5vaWRzKSB7Ci0gICAgICAgIGRzdF9yb3ctPm9pZF9pbmRleC5vaWRzID0gbmV0c25tcF9tZW1kdXAoc3JjX3Jvdy0+b2lkX2luZGV4Lm9pZHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNfcm93LT5vaWRfaW5kZXgubGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICBkc3Rfcm93LT5vaWRfaW5kZXgub2lkcyA9IHNubXBfZHVwbGljYXRlX29iamlkKHNyY19yb3ctPm9pZF9pbmRleC5vaWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNyY19yb3ctPm9pZF9pbmRleC5sZW4pOwogICAgICAgICBpZiAoIWRzdF9yb3ctPm9pZF9pbmRleC5vaWRzKQogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfQ09QWV9ST1cgKi8KIAogLyoqIGRlbGV0ZXMgdGhlIG1lbW9yeSB1c2VkIGJ5IHRoZSBzcGVjaWZpZWQgcm93CiAgKiAgcmV0dXJucyB0aGUgdGFibGUtc3BlY2lmaWMgZW50cnkgZGF0YQpAQCAtMjEzLDEzICsyNDcsMTcgQEAKICAgICAvKgogICAgICAqIGFkZCB0aGlzIHJvdyB0byB0aGUgc3RvcmVkIHRhYmxlCiAgICAgICovCi0gICAgQ09OVEFJTkVSX0lOU0VSVCggdGFibGUtPmNvbnRhaW5lciwgcm93ICk7Ci0gICAgREVCVUdNU0dUTCgoInRkYXRhX2FkZF9yb3ciLCAiYWRkZWQgcm93ICgleClcbiIsIHJvdykpOworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKCB0YWJsZS0+Y29udGFpbmVyLCByb3cgKSAhPSAwKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICBERUJVR01TR1RMKCgidGRhdGFfYWRkX3JvdyIsICJhZGRlZCByb3cgKCVwKVxuIiwgcm93KSk7CiAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCiAvKiogc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuICBUaGlzIGRvZXMgKm5vdCogZGVsZXRlL2ZyZWUgYW55dGhpbmchICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfcmVwbGFjZV9yb3csIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9SRVBMQUNFX1JPVwogdm9pZAogbmV0c25tcF90ZGF0YV9yZXBsYWNlX3JvdyhuZXRzbm1wX3RkYXRhICp0YWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqb3JpZ3JvdywKQEAgLTIyOCw2ICsyNjYsNyBAQAogICAgIG5ldHNubXBfdGRhdGFfcmVtb3ZlX3Jvdyh0YWJsZSwgb3JpZ3Jvdyk7CiAgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlLCBuZXdyb3cpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUkVQTEFDRV9ST1cgKi8KIAogLyoqCiAgKiByZW1vdmVzIGEgcm93IGZyb20gdGhlIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIGl0IChubyBmcmVlJ3MgY2FsbGVkKQpAQCAtMzE1LDIwICszNTQsMzQgQEAKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxdWVzdDsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgICAgICAqcm93OworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3Byb2Nlc3NpbmcgPSAxOwogCiAgICAgc3dpdGNoICggcmVxaW5mby0+bW9kZSApIHsKICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBuZWVkX3Byb2Nlc3NpbmcgPSAwOyAvKiBvbmx5IG5lZWQgcHJvY2Vzc2luZyBpZiBzb21lIHZhcnMgZm91bmQgKi8KKyAgICAgICAgLyoqIEZhbGwgdGhyb3VnaCAqLworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgIAogICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOwotICAgICAgICAgICAgaWYgKCF0YWJsZV9pbmZvKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAgICAgLyogYWNrICovCi0gICAgICAgICAgICByb3cgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdCggcmVxdWVzdCApOwotCisgICAgICAgICAgICBpZiAoIXRhYmxlX2luZm8pIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCh0YWJsZV9pbmZvKTsgLyogeWVzLCB0aGlzIHdpbGwgYWx3YXlzIGhpdCAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8qIGVlayAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgcm93ID0gKG5ldHNubXBfdGRhdGFfcm93KiluZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdCggcmVxdWVzdCApOworICAgICAgICAgICAgaWYgKCFyb3cgJiYgKHJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVQpKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQocm93KTsgLyogeWVzLCB0aGlzIHdpbGwgYWx3YXlzIGhpdCAqLworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9FUlJfR0VORVJSKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8qIGVlayAqLworICAgICAgICAgICAgfQorICAgICAgICAgICAgKytuZWVkX3Byb2Nlc3Npbmc7CiAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9UQUJMRSwgdGFibGUsIE5VTEwpKTsKQEAgLTMzNiw2ICszODksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9ST1csICAgcm93LCAgIE5VTEwpKTsKICAgICAgICAgfQorICAgICAgICAvKiogc2tpcCBuZXh0IGhhbmRsZXIgaWYgcHJvY2Vzc2luZyBub3QgbmVlZGVkICovCisgICAgICAgIGlmICghbmVlZF9wcm9jZXNzaW5nKQorICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CiAgICAgfQogCiAgICAgLyogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KQEAgLTM1NCw2ICs0MTAsMTcgQEAKICAgICAgICAgICAgICAgICAgIHRhYmxlLT5jb250YWluZXIsIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZGF0YV91bnJlZ2lzdGVyLCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfVU5SRUdJU1RFUgoraW50CituZXRzbm1wX3RkYXRhX3VucmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbykKK3sKKyAgICAvKiBmcmVlIHRhYmxlOyAqLworICAgIHJldHVybiBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV91bnJlZ2lzdGVyKHJlZ2luZm8pOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfVU5SRUdJU1RFUiAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfRVhUUkFDVF9UQUJMRQogLyoqIGV4dHJhY3RzIHRoZSB0ZGF0YSB0YWJsZSBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAqLwogbmV0c25tcF90ZGF0YSAqCiBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QpCkBAIC0zNjEsMTUgKzQyOCwxOSBAQAogICAgIHJldHVybiAobmV0c25tcF90ZGF0YSAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9UQUJMRSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9UREFUQV9FWFRSQUNUX1RBQkxFICovCiAKIC8qKiBleHRyYWN0cyB0aGUgdGRhdGEgY29udGFpbmVyIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfZXh0cmFjdF9jb250YWluZXIsIHRhYmxlX3RkYXRhX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9FWFRSQUNUX0NPTlRBSU5FUgogbmV0c25tcF9jb250YWluZXIgKgogbmV0c25tcF90ZGF0YV9leHRyYWN0X2NvbnRhaW5lcihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCkKIHsKLSAgICBuZXRzbm1wX3RkYXRhICp0ZGF0YSA9IG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9UQUJMRSk7CisgICAgbmV0c25tcF90ZGF0YSAqdGRhdGEgPSAobmV0c25tcF90ZGF0YSopCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3QsIFRBQkxFX1REQVRBX1RBQkxFKTsKICAgICByZXR1cm4gKCB0ZGF0YSA/IHRkYXRhLT5jb250YWluZXIgOiBOVUxMICk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UREFUQV9FWFRSQUNUX0NPTlRBSU5FUiAqLwogCiAvKiogZXh0cmFjdHMgdGhlIHRkYXRhIHJvdyBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAqLwogbmV0c25tcF90ZGF0YV9yb3cgKgpAQCAtMzkxLDYgKzQ2Miw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfSU5TRVJUX1JPVwogLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRkYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCAqLwogTkVUU05NUF9JTkxJTkUgdm9pZAogbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApAQCAtMzk4LDYgKzQ3MCwxNyBAQAogewogICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQocmVxdWVzdCwgKG5ldHNubXBfaW5kZXggKilyb3cpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfSU5TRVJUX1JPVyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEFfUkVNT1ZFX1JPVworLyoqIGluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRkYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCAqLworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3cpCit7CisgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X3JlbW92ZShyZXF1ZXN0LCAobmV0c25tcF9pbmRleCAqKXJvdyk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQUJMRV9UREFUQV9SRU1PVkVfUk9XICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtNDI4LDcgKzUxMSw3IEBACiBuZXRzbm1wX3RkYXRhX3Jvd19nZXQoICBuZXRzbm1wX3RkYXRhICAgICAqdGFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93KQogewotICAgIHJldHVybiBDT05UQUlORVJfRklORCggdGFibGUtPmNvbnRhaW5lciwgcm93ICk7CisgICAgcmV0dXJuIChuZXRzbm1wX3RkYXRhX3JvdyopQ09OVEFJTkVSX0ZJTkQoIHRhYmxlLT5jb250YWluZXIsIHJvdyApOwogfQogCiAvKiogcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlICovCkBAIC00NjMsNyArNTQ2LDcgQEAKIAogICAgIGluZGV4Lm9pZHMgPSBzZWFyY2hmb3I7CiAgICAgaW5kZXgubGVuICA9IHNlYXJjaGZvcl9sZW47Ci0gICAgcmV0dXJuIENPTlRBSU5FUl9GSU5EKCB0YWJsZS0+Y29udGFpbmVyLCAmaW5kZXggKTsKKyAgICByZXR1cm4gKG5ldHNubXBfdGRhdGFfcm93KilDT05UQUlORVJfRklORCggdGFibGUtPmNvbnRhaW5lciwgJmluZGV4ICk7CiB9CiAKIC8qKiBmaW5kcyB0aGUgbGV4aWNhbGx5IG5leHQgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlCkBAIC00OTIsOSArNTc1LDExIEBACiAKICAgICBpbmRleC5vaWRzID0gc2VhcmNoZm9yOwogICAgIGluZGV4LmxlbiAgPSBzZWFyY2hmb3JfbGVuOwotICAgIHJldHVybiBDT05UQUlORVJfTkVYVCggdGFibGUtPmNvbnRhaW5lciwgJmluZGV4ICk7CisgICAgcmV0dXJuIChuZXRzbm1wX3RkYXRhX3JvdyopQ09OVEFJTkVSX05FWFQoIHRhYmxlLT5jb250YWluZXIsICZpbmRleCApOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRhdGFfcm93X2NvdW50LCB0YWJsZV90ZGF0YV9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUk9XX0NPVU5UCiBpbnQKIG5ldHNubXBfdGRhdGFfcm93X2NvdW50KG5ldHNubXBfdGRhdGEgKnRhYmxlKQogewpAQCAtNTAyLDYgKzU4Nyw3IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIHJldHVybiBDT05UQUlORVJfU0laRSggdGFibGUtPmNvbnRhaW5lciApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERBVEFfUk9XX0NPVU5UICovCiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAqCkBAIC01MTEsNiArNTk3LDggQEAKIAogCiAvKiogY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCB2YWx1ZXMgKi8KK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZGF0YV9jb21wYXJlX2lkeCwgdGFibGVfdGRhdGFfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX0NPTVBBUkVfSURYCiBpbnQKIG5ldHNubXBfdGRhdGFfY29tcGFyZV9pZHgobmV0c25tcF90ZGF0YV9yb3cgICAgICpyb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXhlcykKQEAgLTUyMiw2ICs2MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgIGluZGV4ZXMpOwogICAgIHJldHVybiBuZXRzbm1wX3RkYXRhX2NvbXBhcmVfb2lkKHJvdywgc2VhcmNoZm9yLCBzZWFyY2hmb3JfbGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1REQVRBX0NPTVBBUkVfSURYICovCiAKIC8qKiBjb21wYXJlIGEgcm93IHdpdGggdGhlIGdpdmVuIGluZGV4IE9JRCAqLwogaW50CkBAIC01NTMsNiArNjQyLDEwIEBACiAgICAgcmV0dXJuIHNubXBfb2lkdHJlZV9jb21wYXJlKCBpbmRleC0+b2lkcywgaW5kZXgtPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmV0bywgICBjb21wYXJldG9fbGVuKTsKIH0KKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEEgKi8KK25ldHNubXBfZmVhdHVyZV91bnVzZWQodGFibGVfdGRhdGEpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEFCTEVfVERBVEEgKi8KKwogCiAvKiogQH0gCiAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2hlbHBlcnMvd2F0Y2hlci5jIGIvYWdlbnQvaGVscGVycy93YXRjaGVyLmMKaW5kZXggOWNiYjRkMy4uOWIzOTMzYiAxMDA2NDQKLS0tIGEvYWdlbnQvaGVscGVycy93YXRjaGVyLmMKKysrIGIvYWdlbnQvaGVscGVycy93YXRjaGVyLmMKQEAgLTEsMTkgKzEsMzggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3dhdGNoZXIuaD4KKwogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc2NhbGFyLmg+CiAKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIEhBVkVfRE1BTExPQ19ICitzdGF0aWMgdm9pZCBmcmVlX3dyYXBwZXIodm9pZCAqIHApCit7CisgICAgZnJlZShwKTsKK30KKyNlbHNlCisjZGVmaW5lIGZyZWVfd3JhcHBlciBmcmVlCisjZW5kaWYKKworbmV0c25tcF9mZWF0dXJlX3Byb3ZpZGUod2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9hbGwsIG1pYl9oZWxwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfY3JlYXRlX2luZm82LCB3YXRjaGVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih3YXRjaGVyX3JlZ2lzdGVyX3RpbWVzdGFtcCwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl91bG9uZ19zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfcmVhZF9vbmx5X3Vsb25nX3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9yZWFkX29ubHlfaW50X3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9sb25nX3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yod2F0Y2hlcl9yZWFkX29ubHlfbG9uZ19zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfaW50X3NjYWxhciwgd2F0Y2hlcl9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9vbmx5X2NvdW50ZXIzMl9zY2FsYXIsIHdhdGNoZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHdhdGNoZXJfc3BpbmxvY2ssIHdhdGNoZXJfYWxsKQorCiAvKiogQGRlZmdyb3VwIHdhdGNoZXIgd2F0Y2hlcgogICogIFdhdGNoIGEgc3BlY2lmaWVkIHZhcmlhYmxlIGFuZCBwcm9jZXNzIGl0IGFzIGFuIGluc3RhbmNlIG9yIHNjYWxhciBvYmplY3QKICAqICBAaW5ncm91cCBsZWFmCkBAIC0zMywyMiArNTIsNTcgQEAKIH0KIAogbmV0c25tcF93YXRjaGVyX2luZm8gKgotbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwgaW50IGZsYWdzKQorbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYobmV0c25tcF93YXRjaGVyX2luZm8gKndpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBzaXplX3QgbWF4X3NpemUsIHNpemVfdCogc2l6ZV9wKQogewotICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF93YXRjaGVyX2luZm8pOwotCi0gICAgd2luZm8tPmRhdGEgICAgICA9IGRhdGE7CisgICAgd2luZm8tPmRhdGEgPSBkYXRhOwogICAgIHdpbmZvLT5kYXRhX3NpemUgPSBzaXplOwotICAgIHdpbmZvLT5tYXhfc2l6ZSAgPSBzaXplOwkvKiBQcm9iYWJseSB3cm9uZyBmb3Igbm9uLWZpeGVkIHNpemUgZGF0YSAqLwotICAgIHdpbmZvLT50eXBlICAgICAgPSB0eXBlOwotICAgIGlmIChmbGFncykKLSAgICAgICAgd2luZm8tPmZsYWdzID0gZmxhZ3M7Ci0gICAgZWxzZQotICAgICAgICB3aW5mby0+ZmxhZ3MgPSBXQVRDSEVSX0ZJWEVEX1NJWkU7Ci0KKyAgICB3aW5mby0+bWF4X3NpemUgPSBtYXhfc2l6ZTsKKyAgICB3aW5mby0+dHlwZSA9IHR5cGU7CisgICAgd2luZm8tPmZsYWdzID0gZmxhZ3M7CisgICAgd2luZm8tPmRhdGFfc2l6ZV9wID0gc2l6ZV9wOwogICAgIHJldHVybiB3aW5mbzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfQ1JFQVRFX0lORk82CituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm82KHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzLCBzaXplX3QgbWF4X3NpemUsIHNpemVfdCogc2l6ZV9wKQoreworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF93YXRjaGVyX2luZm8pOworICAgIGlmICh3aW5mbykKKyAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYod2luZm8sIGRhdGEsIHNpemUsIHR5cGUsIGZsYWdzLCBtYXhfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV9wKTsKKyAgICByZXR1cm4gd2luZm87Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0NSRUFURV9JTkZPNiAqLworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLCBpbnQgZmxhZ3MpCit7CisgIHJldHVybiBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvNih3aW5mbywgZGF0YSwgc2l6ZSwKKwkJCQkgICAgdHlwZSwgKGZsYWdzID8gZmxhZ3MgOiBXQVRDSEVSX0ZJWEVEX1NJWkUpLAorCQkJCSAgICBzaXplLCAgLyogUHJvYmFibHkgd3JvbmcgZm9yIG5vbi1maXhlZAorCQkJCQkgICAgKiBzaXplIGRhdGEgKi8KKwkJCQkgICAgTlVMTCk7Cit9CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyh2b2lkICpkYXRhLCBzaXplX3Qgc2l6ZSwgdV9jaGFyIHR5cGUsIGludCBmbGFncykKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfd2F0Y2hlcl9pbmZvKTsKKyAgICBpZiAod2luZm8pCisgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8od2luZm8sIGRhdGEsIHNpemUsIHR5cGUsIGZsYWdzKTsKKyAgICByZXR1cm4gd2luZm87Cit9CisKKy8qKgorICogUmVnaXN0ZXIgYSB3YXRjaGVkIHNjYWxhci4gVGhlIGNhbGxlciByZW1haW5zIHRoZSBvd25lciBvZiB3YXRjaGluZm8uCisgKgorICogQHNlZSBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKCkKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3YXRjaGluZm8pCkBAIC02Miw2ICsxMTYsMzAgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9pbnN0YW5jZShyZWdpbmZvKTsKIH0KIAorLyoqCisgKiBSZWdpc3RlciBhIHdhdGNoZWQgc2NhbGFyLiBPd25lcnNoaXAgb2Ygd2F0Y2hpbmZvIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBoYW5kbGVyLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlKCkKKyAqLworaW50CituZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisJCQkJICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2F0Y2hpbmZvKQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKndoYW5kbGVyOworCisgICAgd2hhbmRsZXIgICAgICAgICA9IG5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlcigpOworICAgIHdoYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKXdhdGNoaW5mbzsKKyAgICBuZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKHdoYW5kbGVyKTsKKworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKHJlZ2luZm8pOworfQorCisvKioKKyAqIFJlZ2lzdGVyIGEgd2F0Y2hlZCBzY2FsYXIuIFRoZSBjYWxsZXIgcmVtYWlucyB0aGUgb3duZXIgb2Ygd2F0Y2hpbmZvLgorICoKKyAqIEBzZWUgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIoKQorICovCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3YXRjaGluZm8pCkBAIC03NSw3ICsxNTMsODcgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7CiB9CiAKKy8qKgorICogUmVnaXN0ZXIgYSB3YXRjaGVkIHNjYWxhci4gT3duZXJzaGlwIG9mIHdhdGNoaW5mbyBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgaGFuZGxlci4KKyAqCisgKiBAc2VlIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoKQorICovCitpbnQKK25ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2F0Y2hpbmZvKQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKndoYW5kbGVyOwogCisgICAgd2hhbmRsZXIgICAgICAgICA9IG5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlcigpOworICAgIHdoYW5kbGVyLT5teXZvaWQgPSAodm9pZCAqKXdhdGNoaW5mbzsKKyAgICBuZXRzbm1wX293bnNfd2F0Y2hlcl9pbmZvKHdoYW5kbGVyKTsKKworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihyZWdpbmZvKTsKK30KKwordm9pZAorbmV0c25tcF9vd25zX3dhdGNoZXJfaW5mbyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKQoreworICAgIG5ldHNubXBfYXNzZXJ0KGhhbmRsZXIpOworICAgIG5ldHNubXBfYXNzZXJ0KGhhbmRsZXItPm15dm9pZCk7CisgICAgaGFuZGxlci0+ZGF0YV9jbG9uZSA9ICh2b2lkICooKikodm9pZCAqKSluZXRzbm1wX2Nsb25lX3dhdGNoZXJfaW5mbzsKKyAgICBoYW5kbGVyLT5kYXRhX2ZyZWUgPSBmcmVlOworfQorCisvKiogQGNvbmQgKi8KKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIHNpemVfdAorZ2V0X2RhdGFfc2l6ZShjb25zdCBuZXRzbm1wX3dhdGNoZXJfaW5mbyogd2luZm8pCit7CisgICAgaWYgKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9TVFJMRU4pCisgICAgICAgIHJldHVybiBzdHJsZW4oKGNvbnN0IGNoYXIqKXdpbmZvLT5kYXRhKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2l6ZV90IHJlczsKKyAgICAgICAgaWYgKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9JU19QVFIpCisgICAgICAgICAgICByZXMgPSAqd2luZm8tPmRhdGFfc2l6ZV9wOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXMgPSB3aW5mby0+ZGF0YV9zaXplOworICAgICAgICBpZiAod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9TSVpFX1VOSVRfT0lEUykKKyAgICAgICAgICByZXMgKj0gc2l6ZW9mKG9pZCk7CisgICAgICAgIHJldHVybiByZXM7CisgICAgfQorfQorCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZAorc2V0X2RhdGEobmV0c25tcF93YXRjaGVyX2luZm8qIHdpbmZvLCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBtZW1jcHkod2luZm8tPmRhdGEsIGRhdGEsIHNpemUpOworICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfU1RSTEVOKQorICAgICAgICAoKGNoYXIqKXdpbmZvLT5kYXRhKVtzaXplXSA9ICdcMCc7CisgICAgZWxzZSB7CisgICAgICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfVU5JVF9PSURTKQorICAgICAgICAgIHNpemUgLz0gc2l6ZW9mKG9pZCk7CisgICAgICAgIGlmICh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX1NJWkVfSVNfUFRSKQorICAgICAgICAgICAgKndpbmZvLT5kYXRhX3NpemVfcCA9IHNpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHdpbmZvLT5kYXRhX3NpemUgPSBzaXplOworICAgIH0KK30KKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHNpemVfdCBzaXplOworICAgIGNoYXIgZGF0YVsxXTsKK30gbmV0c25tcF93YXRjaGVyX2NhY2hlOworCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgbmV0c25tcF93YXRjaGVyX2NhY2hlKgorbmV0c25tcF93YXRjaGVyX2NhY2hlX2NyZWF0ZShjb25zdCB2b2lkKiBkYXRhLCBzaXplX3Qgc2l6ZSkKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfY2FjaGUgKnJlcyA9IChuZXRzbm1wX3dhdGNoZXJfY2FjaGUqKQorICAgICAgICBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfd2F0Y2hlcl9jYWNoZSkgKyBzaXplIC0gMSk7CisgICAgaWYgKHJlcykgeworICAgICAgICByZXMtPnNpemUgPSBzaXplOworICAgICAgICBtZW1jcHkocmVzLT5kYXRhLCBkYXRhLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHJlczsKK30KKworLyoqIEBlbmRjb25kICovCiAKIGludAogbmV0c25tcF93YXRjaGVyX2hlbHBlcl9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC04Myw4ICsyNDEsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8gPSAobmV0c25tcF93YXRjaGVyX2luZm8gKikgaGFuZGxlci0+bXl2b2lkOwotICAgIHVfY2hhciAgICAgICAgICAgICAgKm9sZF9kYXRhOworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAqd2luZm8gPSAobmV0c25tcF93YXRjaGVyX2luZm8gKikgaGFuZGxlci0+bXl2b2lkOworICAgIG5ldHNubXBfd2F0Y2hlcl9jYWNoZSAqb2xkX2RhdGE7CiAKICAgICBERUJVR01TR1RMKCgiaGVscGVyOndhdGNoZXIiLCAiR290IHJlcXVlc3Q6ICAlZFxuIiwgcmVxaW5mby0+bW9kZSkpOwogICAgIERFQlVHTVNHVEwoKCAiaGVscGVyOndhdGNoZXIiLCAiICBvaWQ6IikpOwpAQCAtMTAwLDI2ICsyNTgsMjggQEAKICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5mby0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpbmZvLT5kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZm8tPmRhdGFfc2l6ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfZGF0YV9zaXplKHdpbmZvKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIFNFVCByZXF1ZXN0cy4gIFNob3VsZCBvbmx5IGdldCBoZXJlIGlmIHJlZ2lzdGVyZWQgUldSSVRFIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gd2luZm8tPnR5cGUpIHsKLSAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HVFlQRSk7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9XUk9OR1RZUEUpOwogICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoKCh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX01BWF9TSVpFKSAmJgotICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA+ICB3aW5mby0+bWF4X3NpemUpIHx8CisgICAgICAgIH0gZWxzZSBpZiAoKCh3aW5mby0+ZmxhZ3MgJiBXQVRDSEVSX01BWF9TSVpFKSAmJgorICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA+IHdpbmZvLT5tYXhfc2l6ZSkgfHwKICAgICAgICAgICAgICgod2luZm8tPmZsYWdzICYgV0FUQ0hFUl9GSVhFRF9TSVpFKSAmJgotICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPSB3aW5mby0+ZGF0YV9zaXplKSkgewotICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1dST05HTEVOR1RIKTsKLSAgICAgICAgICAgICBoYW5kbGVyLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRTsKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuICE9IGdldF9kYXRhX3NpemUod2luZm8pKSkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfV1JPTkdMRU5HVEgpOworICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CisgICAgICAgIH0gZWxzZSBpZiAoKHdpbmZvLT5mbGFncyAmIFdBVENIRVJfU0laRV9TVFJMRU4pICYmCisgICAgICAgICAgICAobWVtY2hyKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsICdcMCcsCisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbikgIT0gTlVMTCkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1dST05HVkFMVUUpOworICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKQEAgLTEyNywxNiArMjg3LDE2IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyIAogICAgICAgICAgKi8KLSAgICAgICAgb2xkX2RhdGEgPSBuZXRzbm1wX21lbWR1cCh3aW5mby0+ZGF0YSwgd2luZm8tPmRhdGFfc2l6ZSk7CisgICAgICAgIG9sZF9kYXRhID0KKyAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9jYWNoZV9jcmVhdGUod2luZm8tPmRhdGEsIGdldF9kYXRhX3NpemUod2luZm8pKTsKICAgICAgICAgaWYgKG9sZF9kYXRhID09IE5VTEwpIHsKICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOwogICAgICAgICAgICAgaGFuZGxlci0+ZmxhZ3MgfD0gTUlCX0hBTkRMRVJfQVVUT19ORVhUX09WRVJSSURFX09OQ0U7Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICAgICAgfQotICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgid2F0Y2hlciIsIG9sZF9kYXRhLCBmcmVlKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgid2F0Y2hlciIsIG9sZF9kYXRhLCAmZnJlZV93cmFwcGVyKSk7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgpAQCAtMTQ5LDE5ICszMDksMjMgQEAKICAgICAgICAgLyoKICAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgCiAgICAgICAgICAqLwotICAgICAgICBtZW1jcHkod2luZm8tPmRhdGEsICh2b2lkICopcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICBzZXRfZGF0YSh3aW5mbywgKHZvaWQgKilyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIE1PREVfU0VUX1VORE86Ci0gICAgICAgIG1lbWNweSh3aW5mby0+ZGF0YSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9nZXRfbGlzdF9kYXRhKHJlcXVlc3RzLCAid2F0Y2hlciIpLAotICAgICAgICAgICAgICAgd2luZm8tPmRhdGFfc2l6ZSk7CisgICAgICAgIG9sZF9kYXRhID0gKG5ldHNubXBfd2F0Y2hlcl9jYWNoZSopbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsICJ3YXRjaGVyIik7CisgICAgICAgIHNldF9kYXRhKHdpbmZvLCBvbGRfZGF0YS0+ZGF0YSwgb2xkX2RhdGEtPnNpemUpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgotICAgICAgICB3aW5mby0+ZGF0YV9zaXplID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbjsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAid2F0Y2hlciBoYW5kbGVyIGNhbGxlZCB3aXRoIGFuIHVua25vd24gbW9kZTogJWRcbiIsCisgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogCiAgICAgfQogCkBAIC0yMDAsNiArMzY0LDcgQEAKICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7ICAgLyogWFhYIC0gb3IgaW5zdGFuY2U/ICovCiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFR0lTVEVSX1RJTUVTVEFNUAogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfdGltZXN0YW1wKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtlcl90IHRpbWVzdGFtcCkKQEAgLTIxMCw2ICszNzUsNyBAQAogCiAgICAgcmV0dXJuIG5ldHNubXBfd2F0Y2hlZF90aW1lc3RhbXBfcmVnaXN0ZXIod2hhbmRsZXIsIHJlZ2luZm8sIHRpbWVzdGFtcCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFR0lTVEVSX1RJTUVTVEFNUCAqLwogCiAKIGludApAQCAtMjQ3LDExICs0MTMsMTMgQEAKICAgICAgICAgICogVGltZXN0YW1wcyBhcmUgaW5oZXJlbnRseSBSZWFkLU9ubHksCiAgICAgICAgICAqICBzbyBkb24ndCBuZWVkIHRvIHN1cHBvcnQgU0VUIHJlcXVlc3RzLgogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT1RXUklUQUJMRSk7CiAgICAgICAgIGhhbmRsZXItPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVF9PVkVSUklERV9PTkNFOwogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgLyogbmV4dCBoYW5kbGVyIGNhbGxlZCBhdXRvbWF0aWNhbGx5IC0gJ0FVVE9fTkVYVCcgKi8KQEAgLTI2NSw2ICs0MzMsOCBAQAogICAgICAqCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfU1BJTkxPQ0sKKwogbmV0c25tcF9taWJfaGFuZGxlciAqCiBuZXRzbm1wX2dldF93YXRjaGVkX3NwaW5sb2NrX2hhbmRsZXIodm9pZCkKIHsKQEAgLTI5MCw3ICs0NjAsNyBAQAogICAgIHdpbmZvICAgICAgICAgICAgPSBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oKHZvaWQgKilzcGlubG9jaywKIAkJICAgICAgICAgICBzaXplb2YoaW50KSwgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCB3aGFuZGxlcik7Ci0gICAgcmV0dXJuIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIocmVnaW5mbywgd2luZm8pOworICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihyZWdpbmZvLCB3aW5mbyk7CiB9CiAKIApAQCAtMzE0LDYgKzQ4NCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEVuc3VyZSB0aGUgYXNzaWduZWQgdmFsdWUgbWF0Y2hlcyB0aGUgY3VycmVudCBvbmUKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQpAQCAtMzM0LDExICs1MDUsMTMgQEAKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKIAkoKnNwaW5sb2NrKSsrOwogCWJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIC8qIG5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnICovCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1NQSU5MT0NLICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTM0NywxMTggKzUyMCwxNDIgQEAKICAgICAgKgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY2xvbmVfd2F0Y2hlcl9pbmZvKG5ldHNubXBfd2F0Y2hlcl9pbmZvICp3aW5mbykKK3sKKyAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqY29weSA9IG1hbGxvYyhzaXplb2YoKmNvcHkpKTsKKyAgICBpZiAoY29weSkKKwkqY29weSA9ICp3aW5mbzsKKyAgICByZXR1cm4gY29weTsKK30KKworc3RhdGljIGludAorcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgc2l6ZV90IHNpemUsIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLCBpbnQgbW9kZSkKK3sKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvID0gTlVMTDsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICp3aGFuZGxlciA9IE5VTEw7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8qIHdhdGNoaW5mbyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyhkYXRhLCBzaXplLCB0eXBlLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOworICAgIGlmICh3YXRjaGluZm8pCisgICAgICAgIHdoYW5kbGVyID0gbmV0c25tcF9nZXRfd2F0Y2hlcl9oYW5kbGVyKCk7CisgICAgaWYgKHdhdGNoaW5mbyAmJiB3aGFuZGxlcikgeworICAgICAgICB3aGFuZGxlci0+bXl2b2lkID0gd2F0Y2hpbmZvOworCW5ldHNubXBfb3duc193YXRjaGVyX2luZm8od2hhbmRsZXIpOworICAgICAgICByZWdpbmZvID0KKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLCBtb2RlKTsKKyAgICB9CisgICAgaWYgKHdhdGNoaW5mbyAmJiB3aGFuZGxlciAmJiByZWdpbmZvKSB7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgd2hhbmRsZXIpOworICAgICAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnaW5mbyk7CisgICAgfQorICAgIGlmICh3aGFuZGxlcikKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUod2hhbmRsZXIpOworICAgIGVsc2UgaWYgKHdhdGNoaW5mbykKKyAgICAgICAgZnJlZSh3YXRjaGluZm8pOworICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9VTE9OR19TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggdV9sb25nICksCisgICAgICAgIEFTTl9VTlNJR05FRCwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUldSSVRFKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1dBVENIRVJfVUxPTkdfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9VTE9OR19TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggdV9sb25nICksCisgICAgICAgIEFTTl9VTlNJR05FRCwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUk9OTFkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfVUxPTkdfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0xPTkdfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBsb25nICksCi0gICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGxvbmcgKSwKKyAgICAgICAgQVNOX0lOVEVHRVIsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JXUklURSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0xPTkdfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9MT05HX1NDQUxBUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSApLAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUgKSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKAorICAgICAgICBuYW1lLCByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBsb25nICksCisgICAgICAgIEFTTl9JTlRFR0VSLCBzdWJoYW5kbGVyLCBIQU5ETEVSX0NBTl9ST05MWSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9MT05HX1NDQUxBUiAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX0lOVF9TQ0FMQVIKIGludAogbmV0c25tcF9yZWdpc3Rlcl9pbnRfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFICksCi0gICAgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm8oCi0gICAgICAgICAgICAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCBpbnQgKSwKLSAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFICkpOworICAgIHJldHVybiByZWdpc3Rlcl9zY2FsYXJfd2F0Y2hlcigKKyAgICAgICAgbmFtZSwgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggaW50ICksCisgICAgICAgIEFTTl9JTlRFR0VSLCBzdWJoYW5kbGVyLCBIQU5ETEVSX0NBTl9SV1JJVEUpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9JTlRfU0NBTEFSICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9XQVRDSEVSX1JFQURfT05MWV9JTlRfU0NBTEFSCiBpbnQKIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKQogewotICAgIHJldHVybiBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCi0gICAgICAgICAgICAgICAgICAgbmFtZSwgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSApLAotICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAotICAgICAgICAgICAgICAgICAgICh2b2lkICopaXQsIHNpemVvZiggaW50ICksCi0gICAgICAgICAgICAgICAgICAgQVNOX0lOVEVHRVIsIFdBVENIRVJfRklYRURfU0laRSApKTsKKyAgICByZXR1cm4gcmVnaXN0ZXJfc2NhbGFyX3dhdGNoZXIoCisgICAgICAgIG5hbWUsIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIGludCApLAorICAgICAgICBBU05fSU5URUdFUiwgc3ViaGFuZGxlciwgSEFORExFUl9DQU5fUk9OTFkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfV0FUQ0hFUl9SRUFEX09OTFlfSU5UX1NDQUxBUiAqLwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX09OTFlfQ09VTlRFUjMyX1NDQUxBUgogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcikKIHsKLSAgICByZXR1cm4gbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAotICAgICAgICAgICAgICAgICAgIG5hbWUsIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkgKSwKLSAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAgICAodm9pZCAqKWl0LCBzaXplb2YoIHVfbG9uZyApLAotICAgICAgICAgICAgICAgICAgIEFTTl9DT1VOVEVSLCBXQVRDSEVSX0ZJWEVEX1NJWkUgKSk7CisgICAgcmV0dXJuIHJlZ2lzdGVyX3NjYWxhcl93YXRjaGVyKAorICAgICAgICBuYW1lLCByZWdfb2lkLCByZWdfb2lkX2xlbiwKKyAgICAgICAgKHZvaWQgKilpdCwgc2l6ZW9mKCB1X2xvbmcgKSwKKyAgICAgICAgQVNOX0NPVU5URVIsIHN1YmhhbmRsZXIsIEhBTkRMRVJfQ0FOX1JPTkxZKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFQURfT05MWV9DT1VOVEVSMzJfU0NBTEFSICovCiAvKiogIEB9ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L2tlcm5lbC5jIGIvYWdlbnQva2VybmVsLmMKaW5kZXggYmM0NzZkYS4uMDBmZGU3NyAxMDA2NDQKLS0tIGEvYWdlbnQva2VybmVsLmMKKysrIGIvYWdlbnQva2VybmVsLmMKQEAgLTEsNyArMSwxOSBAQAotCi0vKgotICogIDEzIEp1biA5MSAgd3NhayAod2sweEBhbmRyZXcpIGFkZGVkIG1pcHMgc3VwcG9ydAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBOZXQtU05NUCAtIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgYWdlbnQgbGlicmFyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZmlsZSBrZXJuZWwuYworICogICAgIE5ldC1TTk1QIEtlcm5lbCBEYXRhIEFjY2VzcyBMaWJyYXJ5LgorICogICAgIFByb3ZpZGVzIGFjY2VzcyB0byBrZXJuZWwgdmlydHVhbCBtZW1vcnkgZm9yIHN5c3RlbXMgdGhhdAorICogICAgIHN1cHBvcnQgaXQuCisgKiBAYXV0aG9yICAgU2VlIFJFQURNRSBmaWxlIGZvciBhIGxpc3Qgb2YgY29udHJpYnV0b3JzCiAgKi8KKy8qIENvcHlyaWdodHM6CisgKiAgICAgQ29weXJpZ2h0IGhvbGRlcnMgYXJlIGxpc3RlZCBpbiBSRUFETUUgZmlsZS4KKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQuIExpY2Vuc2UgdGVybXMgYXJlIHNwZWNpZmllZAorICogICAgIGluIENPUFlJTkcgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIApAQCAtNDAsNyArNTIsNyBAQAogCiAKICNpZiBIQVZFX0tWTV9ICi1rdm1fdCAgICAgICAgICAqa2Q7Citrdm1fdCAqa2QgPSBOVUxMOwogCiAvKioKICAqIEluaXRpYWxpemUgdGhlIHN1cHBvcnQgZm9yIGFjY2Vzc2luZyBrZXJuZWwgdmlydHVhbCBtZW1vcnkuCkBAIC01Niw2ICs2OCwxMiBAQAogICAgIGNoYXIgICAgICAgICAgICBlcnJbNDA5Nl07CiAKICAgICBrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgTlVMTCwgTlVMTCwgT19SRE9OTFksIGVycik7CisgICAgaWYgKCFrZCkKKyNpZmRlZiBLVk1fTk9fRklMRVMKKwlrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgTlVMTCwgTlVMTCwgS1ZNX05PX0ZJTEVTLCBlcnIpOworI2Vsc2UKKwlrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgIi9kZXYvbnVsbCIsIE5VTEwsIE9fUkRPTkxZLCBlcnIpOworI2VuZGlmCiAgICAgaWYgKCFrZCAmJiAhbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MpKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19DUklULCAiaW5pdF9rbWVtOiBrdm1fb3BlbmZpbGVzIGZhaWxlZDogJXNcbiIsIGVycik7CkBAIC03MywxOCArOTEsMTggQEAKICAgICByZXR1cm4gcmVzOwogfQogCi0KLS8qCi0gKiAga2xvb2t1cDoKKy8qKiBSZWFkcyBrZXJuZWwgbWVtb3J5LgorICogIFNlZWtzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gaW4ga21lbSwgdGhlbgorICogIGRvZXMgYSByZWFkIG9mIGdpdmVuIGFtb3VudCBvYiBieXRlcyBpbnRvIHRhcmdldCBidWZmZXIuCiAgKgotICogIEl0IHNlZWtzIHRvIHRoZSBsb2NhdGlvbiAgb2ZmICBpbiBrbWVtCi0gKiAgSXQgZG9lcyBhIHJlYWQgaW50byAgdGFyZ2V0ICBvZiAgc2l6ICBieXRlcy4KKyAqIEBwYXJhbSBvZmYgVGhlIGxvY2F0aW9uIHRvIHNlZWsuCiAgKgotICogIFJldHVybiAwIG9uIGZhaWx1cmUgYW5kIDEgb24gc3VjZXNzLgorICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJ1ZmZlciB0byByZWFkIGludG8uCiAgKgorICogQHBhcmFtIHNpeiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgogICovCi0KLQogaW50CiBrbG9va3VwKHVuc2lnbmVkIGxvbmcgb2ZmLCB2b2lkICp0YXJnZXQsIHNpemVfdCBzaXopCiB7CkBAIC0xMDcsNiArMTI1LDE4IEBACiAgICAgcmV0dXJuIDE7CiB9CiAKKy8qKiBDbG9zZXMgdGhlIGtlcm5lbCBtZW1vcnkgc3VwcG9ydC4KKyAqLwordm9pZAorZnJlZV9rbWVtKHZvaWQpCit7CisgICAgaWYgKGtkICE9IE5VTEwpCisgICAgeworICAgICAga3ZtX2Nsb3NlKGtkKTsKKyAgICAgIGtkID0gTlVMTDsKKyAgICB9Cit9CisKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9LVk1fSCAqLwogCiBzdGF0aWMgb2ZmX3QgICAga2xzZWVrKG9mZl90KTsKQEAgLTE1MSwxOSArMTgxLDE3IEBACiAgICAgcmV0dXJuIHJlczsKIH0KIAotCi0vKgorLyoqIEBwcml2YXRlCiAgKiAgU2VlayBpbnRvIHRoZSBrZXJuZWwgZm9yIGEgdmFsdWUuCiAgKi8KLXN0YXRpYyAgICAgICAgICBvZmZfdAorc3RhdGljIG9mZl90CiBrbHNlZWsob2ZmX3QgYmFzZSkKIHsKICAgICByZXR1cm4gKGxzZWVrKGttZW0sIChvZmZfdCkgYmFzZSwgU0VFS19TRVQpKTsKIH0KIAotCi0vKgotICogIFJlYWQgZnJvbSB0aGUga2VybmVsIAorLyoqIEBwcml2YXRlCisgKiAgUmVhZCBmcm9tIHRoZSBrZXJuZWwuCiAgKi8KIHN0YXRpYyBpbnQKIGtscmVhZChjaGFyICpidWYsIGludCBidWZsZW4pCkBAIC0xNzEsMTggKzE5OSwxOCBAQAogICAgIHJldHVybiAocmVhZChrbWVtLCBidWYsIGJ1ZmxlbikpOwogfQogCi0KLS8qCi0gKiAga2xvb2t1cDoKKy8qKiBSZWFkcyBrZXJuZWwgbWVtb3J5LgorICogIFNlZWtzIHRvIHRoZSBzcGVjaWZpZWQgbG9jYXRpb24gaW4ga21lbSwgdGhlbgorICogIGRvZXMgYSByZWFkIG9mIGdpdmVuIGFtb3VudCBvYiBieXRlcyBpbnRvIHRhcmdldCBidWZmZXIuCiAgKgotICogIEl0IHNlZWtzIHRvIHRoZSBsb2NhdGlvbiAgb2ZmICBpbiBrbWVtCi0gKiAgSXQgZG9lcyBhIHJlYWQgaW50byAgdGFyZ2V0ICBvZiAgc2l6ICBieXRlcy4KKyAqIEBwYXJhbSBvZmYgVGhlIGxvY2F0aW9uIHRvIHNlZWsuCiAgKgotICogIFJldHVybiAwIG9uIGZhaWx1cmUgYW5kIDEgb24gc3VjZXNzLgorICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IGJ1ZmZlciB0byByZWFkIGludG8uCiAgKgorICogQHBhcmFtIHNpeiBOdW1iZXIgb2YgYnl0ZXMgdG8gcmVhZC4KKyAqCisgKiBAcmV0dXJuIGdpdmVzIDEgb24gc3VjY2VzcyBhbmQgMCBvbiBmYWlsdXJlLgogICovCi0KLQogaW50CiBrbG9va3VwKHVuc2lnbmVkIGxvbmcgb2ZmLCB2b2lkICp0YXJnZXQsIHNpemVfdCBzaXopCiB7CkBAIC0yMTIsNiArMjQwLDI3IEBACiAgICAgcmV0dXJuICgxKTsKIH0KIAorLyoqIENsb3NlcyB0aGUga2VybmVsIG1lbW9yeSBzdXBwb3J0LgorICovCit2b2lkCitmcmVlX2ttZW0odm9pZCkKK3sKKyAgICBpZiAoc3dhcCA+PSAwKSB7CisgICAgICAgIGNsb3NlKHN3YXApOworICAgICAgICBzd2FwID0gLTE7CisgICAgfQorICAgIGlmIChtZW0gPj0gMCkgeworICAgICAgICBjbG9zZShtZW0pOworICAgICAgICBtZW0gPSAtMTsKKyAgICB9CisgICAgaWYgKGttZW0gPj0gMCkgeworICAgICAgICBjbG9zZShrbWVtKTsKKyAgICAgICAga21lbSA9IC0xOworICAgIH0KK30KKwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX0tWTV9IICovCiAKKyNlbHNlCitpbnQgdW51c2VkOwkvKiBTdXBwcmVzcyAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZyAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0NBTl9VU0VfTkxJU1QgKi8KZGlmZiAtLWdpdCBhL2FnZW50L2tlcm5lbC5oIGIvYWdlbnQva2VybmVsLmgKaW5kZXggZWI2YTc0Yy4uMTMxNjg3YSAxMDA2NDQKLS0tIGEvYWdlbnQva2VybmVsLmgKKysrIGIvYWdlbnQva2VybmVsLmgKQEAgLTEsNyArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICBOZXQtU05NUCAtIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgYWdlbnQgbGlicmFyeS4KKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBAZmlsZSBrZXJuZWwuaAorICogICAgIE5ldC1TTk1QIEtlcm5lbCBEYXRhIEFjY2VzcyBMaWJyYXJ5IC0gaGVhZGVyLgorICogICAgIFByb3ZpZGVzIGFjY2VzcyB0byBrZXJuZWwgdmlydHVhbCBtZW1vcnkgZm9yIHN5c3RlbXMgdGhhdAorICogICAgIHN1cHBvcnQgaXQuCisgKiBAYXV0aG9yICAgU2VlIFJFQURNRSBmaWxlIGZvciBhIGxpc3Qgb2YgY29udHJpYnV0b3JzCisgKi8KKy8qIENvcHlyaWdodHM6CisgKiAgICAgQ29weXJpZ2h0IGhvbGRlcnMgYXJlIGxpc3RlZCBpbiBSRUFETUUgZmlsZS4KKyAqICAgICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yCisgKiAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQuIExpY2Vuc2UgdGVybXMgYXJlIHNwZWNpZmllZAorICogICAgIGluIENPUFlJTkcgZmlsZSBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpZmRlZiBORVRTTk1QX0NBTl9VU0VfTkxJU1QKIGV4dGVybiBpbnQgICAgICBpbml0X2ttZW0oY29uc3QgY2hhciAqKTsKIGV4dGVybiBpbnQgICAgICBrbG9va3VwKHVuc2lnbmVkIGxvbmcsIHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkICAgICBmcmVlX2ttZW0odm9pZCk7CiAjZGVmaW5lIE5FVFNOTVBfS0xPT0tVUCh4LHkseikga2xvb2t1cCgodW5zaWduZWQgbG9uZykgeCx5LHopCiAjZWxzZQogI2RlZmluZSBORVRTTk1QX0tMT09LVVAoeCx5LHopICgwKQpAQCAtMTEsMyArMjgsNCBAQAogI2luY2x1ZGUgPGt2bS5oPgogZXh0ZXJuIGt2bV90ICAgKmtkOwogI2VuZGlmCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJfbW9kdWxlcy5jIGIvYWdlbnQvbWliX21vZHVsZXMuYwppbmRleCA5NWU0Njk1Li5jZGUzMTdlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJfbW9kdWxlcy5jCisrKyBiL2FnZW50L21pYl9tb2R1bGVzLmMKQEAgLTE3LDExICsxNyw3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTMzLDkgKzI5LDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC00OSw5ICs0Miw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oPgogI2luY2x1ZGUgIm1pYl9tb2R1bGVfaW5jbHVkZXMuaCIKLSNpZmRlZiBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi0jaW5jbHVkZSAibWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmgiCi0jZW5kaWYKIAogc3RhdGljIGludCBuZWVkX3NodXRkb3duID0gMDsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kCmluZGV4IGRlYWJmMDIuLmE0ZTk3MTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZAorKysgYi9hZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQKQEAgLTgsNTUgKzgsNjQgQEAKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjUsNiArNzQsNyBAQAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDEsNjkgKzExMSw3MSBAQAogLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2hlYWRlcl9jb21wbGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vaGVhZGVyX2NvbXBsZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggaGVhZGVyX2NvbXBsZXguaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9oZWFkZXJfY29tcGxleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9oZWFkZXJfY29tcGxleC5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9rZXJuZWxfc3Vub3M1LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2tlcm5lbF9zdW5vczUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4va2VybmVsX3N1bm9zNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2tlcm5lbF9zdW5vczUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9rZXJuZWxfc3Vub3M1LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNzIsNiArMTg0LDcgQEAKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA4LDY0ICsyMjEsNzAgQEAKIC4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90ZXN0aGFuZGxlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3Rlc3RoYW5kbGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHRlc3RoYW5kbGVyLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGVzdGhhbmRsZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGVzdGhhbmRsZXIubG86IHRlc3RoYW5kbGVyLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI3NCw2ICsyOTMsNyBAQAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMxMCw2OTEgKzMzMCw3NiBAQAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdXRpbF9mdW5jcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKLS4vdXRpbF9mdW5jcy5sbzogdXRpbGl0aWVzL2V4ZWN1dGUuaAorLi91dGlsX2Z1bmNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3V0aWxfZnVuY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc3RydWN0LmgKKy4vdXRpbF9mdW5jcy5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91dGlsX2Z1bmNzLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi91dGlsX2Z1bmNzLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggdXRpbGl0aWVzL2V4ZWN1dGUuaAogLi91dGlsX2Z1bmNzLmxvOiB1Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmRlZnMuaAogLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vd2luRXh0RExMLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3dpbkV4dERMTC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi93aW5FeHRETEwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9hZ3V0aWwubG86IC4vUm1vbi9hZ3V0aWwuaCAuL1Jtb24vYWd1dGlsX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi9SbW9uL2FsYXJtLmxvOiAuL1Jtb24vYWxhcm0uaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL1Jtb24vZXZlbnQubG86IC4vUm1vbi9ldmVudC5oIC4vUm1vbi9hZ3V0aWxfYXBpLmggLi9SbW9uL3Jvd19hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9oaXN0b3J5LmxvOiAuL1Jtb24vaGlzdG9yeS5oIC4vUm1vbi9hZ3V0aWxfYXBpLmggLi9SbW9uL3Jvd19hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vUm1vbi9yb3dzLmxvOiAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dzLmggLi9SbW9uL3Jvd19hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiBzdHJ1Y3QuaCAuL1Jtb24vc3RhdGlzdGljcy5oIC4vUm1vbi9hZ3V0aWxfYXBpLmgKLS4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuL1Jtb24vcm93X2FwaS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDAzLDYgKzQwOCw3IEBACiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDQwLDY2ICs0NDYsNzEgQEAKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2FnZW50L2V4dGVuZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9leHRlbmQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnQvZXh0ZW5kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL2FnZW50L2V4dGVuZC5sbzogYWdlbnQvZXh0ZW5kLmggdXRpbGl0aWVzL2V4ZWN1dGUuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKLS4vYWdlbnQvZXh0ZW5kLmxvOiBtaWJkZWZzLmgKKy4vYWdlbnQvZXh0ZW5kLmxvOiBhZ2VudC9leHRlbmQuaCB1dGlsaXRpZXMvZXhlY3V0ZS5oIHN0cnVjdC5oCisuL2FnZW50L2V4dGVuZC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggbWliZGVmcy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTA4LDYgKzUxOSw3IEBACiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE0NCw2NSArNTU2LDcwIEBACiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zQ2FjaGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIGFnZW50L25zQ2FjaGUuaAotLi9hZ2VudC9uc0NhY2hlLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmgKKy4vYWdlbnQvbnNDYWNoZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc0NhY2hlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50L25zQ2FjaGUubG86IGFnZW50L25zQ2FjaGUuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTIxMSw2ICs2MjgsNyBAQAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyNDcsNjUgKzY2NSw3MCBAQAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudC9uc0RlYnVnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBhZ2VudC9uc0RlYnVnLmgKLS4vYWdlbnQvbnNEZWJ1Zy5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL2FnZW50L25zRGVidWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnQvbnNEZWJ1Zy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudC9uc0RlYnVnLmxvOiBhZ2VudC9uc0RlYnVnLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzMTQsNiArNzM3LDcgQEAKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzNTAsNjUgKzc3NCw3MCBAQAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnQvbnNMb2dnaW5nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIGFnZW50L25zTG9nZ2luZy5oCi0uL2FnZW50L25zTG9nZ2luZy5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL2FnZW50L25zTG9nZ2luZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc0xvZ2dpbmcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vYWdlbnQvbnNMb2dnaW5nLmxvOiBhZ2VudC9uc0xvZ2dpbmcuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQxNyw2ICs4NDYsNyBAQAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0NTQsNjQgKzg4NCw2OSBAQAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50L25zTW9kdWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnQvbnNNb2R1bGVUYWJsZS5sbzogLi9hZ2VudC9uc01vZHVsZVRhYmxlLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE1MjAsNiArOTU1LDcgQEAKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE1NTcsNjQgKzk5Myw2OSBAQAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50L25zVHJhbnNhY3Rpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUubG86IC4vYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE2MjMsNiArMTA2NCw3IEBACiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE2NjAsNjQgKzExMDIsNjkgQEAKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5sbzogLi9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNzI2LDYgKzExNzMsNyBAQAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNzYzLDY1ICsxMjExLDcwIEBACiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2FnZW50eC9hZ2VudHhfY29uZmlnLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vYWdlbnR4L2FnZW50eF9jb25maWcubG86IC4uLy4uL2FnZW50L3NubXBkLmggYWdlbnR4L2FnZW50eF9jb25maWcuaAogLi9hZ2VudHgvYWdlbnR4X2NvbmZpZy5sbzogYWdlbnR4L3Byb3RvY29sLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE4MzAsNiArMTI4Myw3IEBACiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTg2NywxNjggKzEzMjEsNzAgQEAKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnR4L2NsaWVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvY2xpZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50eC9jbGllbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaW5kZXguaAogLi9hZ2VudHgvY2xpZW50LmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvY2xpZW50LmggYWdlbnR4L3N1YmFnZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggLi4vLi4vYWdlbnQvc25tcGQuaAotLi9hZ2VudHgvbWFzdGVyLmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvbWFzdGVyX2FkbWluLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIwMzcsNiArMTM5Myw3IEBACiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjA3NCw2NyArMTQzMSwxODMgQEAKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2FnZW50eC9tYXN0ZXJfYWRtaW4ubG86IGFnZW50eC9wcm90b2NvbC5oIGFnZW50eC9jbGllbnQuaAogLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4LmgKIC4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9hZ2VudHgvbWFzdGVyX2FkbWluLmxvOiBtaWJJSS9zeXNPUlRhYmxlLmggLi9hZ2VudHgvbWFzdGVyLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vYWdlbnR4L21hc3Rlcl9hZG1pbi5sbzogLi9hZ2VudHgvbWFzdGVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vYWdlbnR4L21hc3Rlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9hZ2VudHgvbWFzdGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2FnZW50eC9tYXN0ZXIubG86IC4uLy4uL2FnZW50L3NubXBkLmggYWdlbnR4L3Byb3RvY29sLmgKKy4vYWdlbnR4L21hc3Rlci5sbzogYWdlbnR4L21hc3Rlcl9hZG1pbi5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMTQzLDY1ICsxNjE2LDcwIEBACiAuL2FnZW50eC9wcm90b2NvbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvcHJvdG9jb2wubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnR4L3Byb3RvY29sLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9wcm90b2NvbC5sbzogYWdlbnR4L3Byb3RvY29sLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIyMTAsNiArMTY4OCw3IEBACiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMjQ2LDY4ICsxNzI1LDE4NCBAQAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4uLy4uL2FnZW50L3NubXBkLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiBhZ2VudHgvcHJvdG9jb2wuaCBhZ2VudHgvY2xpZW50LmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2FnZW50L3NubXBkLmggYWdlbnR4L3Byb3RvY29sLmggYWdlbnR4L2NsaWVudC5oCiAuL2FnZW50eC9zdWJhZ2VudC5sbzogYWdlbnR4L2FnZW50eF9jb25maWcuaAogLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vYWdlbnR4L3N1YmFnZW50LmxvOiBtaWJJSS9zeXNPUlRhYmxlLmggLi9hZ2VudHgvc3ViYWdlbnQuaAorLi9hZ2VudHgvc3ViYWdlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL2FnZW50eC9zdWJhZ2VudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKKy4vYWdlbnR4L3N1YmFnZW50LmxvOiAuL2FnZW50eC9zdWJhZ2VudC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5sbzogLi9kZWxpdmVyL2RlbGl2ZXJCeU5vdGlmeS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yMzE2LDYgKzE5MTEsNyBAQAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0yMzUzLDY0ICsxOTQ5LDY5IEBACiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUubG86IC4vZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjQxOSw2ICsyMDIwLDcgQEAKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjQ1Niw2NyArMjA1OCw3MiBAQAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5sbzogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5oCiAuL2Rpc21hbi9tdGVFdmVudFRhYmxlLmxvOiAuL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgKIC4vZGlzbWFuL210ZUV2ZW50VGFibGUubG86IC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNTI1LDYgKzIxMzIsNyBAQAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI1NjIsNjUgKzIxNzAsNzAgQEAKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVPYmplY3RzVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmggLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5sbzogLi9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI2MjksNiArMjI0Miw3IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI2NjYsNjYgKzIyODAsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmxvOiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjczNCw2ICsyMzUzLDcgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI3NzEsNjYgKzIzOTEsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmxvOiBoZWFkZXJfY29tcGxleC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yODM5LDYgKzI0NjQsNyBAQAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTI4NzYsNjYgKzI1MDIsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTI5NDQsNiArMjU3NSw3IEBACiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMjk4MSw2ICsyNjEzLDcgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmggLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4vZGlzbWFuL210ZVRyaWdnZXJEZWx0YVRhYmxlLmgKQEAgLTI5ODksNjIgKzI2MjIsNjYgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5sbzogLi9kaXNtYW4vbXRlRXZlbnRUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUubG86IC4vZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMDUzLDYgKzI2OTAsNyBAQAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMwOTAsNjYgKzI3MjgsNzEgQEAKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKIC4vZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5sbzogLi9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMxNTgsNiArMjgwMSw3IEBACiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL2RhdGFfc2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTMxOTUsNjMgKzI4MzksNjggQEAKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGF0YV9zZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy9kYXRhX3NldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzI2MCw2ICsyOTA5LDcgQEAKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMjk3LDY0ICsyOTQ3LDY5IEBACiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmxvOiAuL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzM2Myw2ICszMDE4LDcgQEAKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zMzk5LDE3MiArMzA1NSw3MCBAQAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9leGFtcGxlcy9leGFtcGxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vZXhhbXBsZXMvZXhhbXBsZS5sbzogc3RydWN0LmggLi9leGFtcGxlcy9leGFtcGxlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jb2x1bW5zLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfZW51bXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5oCisuL2V4YW1wbGVzL2V4YW1wbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvZXhhbXBsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9leGFtcGxlcy9leGFtcGxlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi9leGFtcGxlcy9leGFtcGxlLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM1NzMsNiArMzEyNyw3IEBACiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0zNjEwLDY1ICszMTY1LDE4MyBAQAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfYWNjZXNzLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY29sdW1ucy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzY3Nyw2NyArMzM1MCw3MiBAQAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5sbzogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2VudW1zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM3NDYsNjYgKzM0MjQsNzEgQEAKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zuc19sb2NhbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zX2xvY2FsLmxvOiAuL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgKIC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwubG86IC4vZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfZW51bXMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzgxNCw2ICszNDk3LDcgQEAKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTM4NTAsNjQgKzM1MzQsNzAgQEAKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBub3RpZmljYXRpb24uaAorLi9leGFtcGxlcy9ub3RpZmljYXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvbm90aWZpY2F0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2V4YW1wbGVzL25vdGlmaWNhdGlvbi5sbzogbm90aWZpY2F0aW9uLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM5MTYsNiArMzYwNiw3IEBACiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvc2NhbGFyX2ludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMzk1Myw2MyArMzY0NCw2OCBAQAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9leGFtcGxlcy9zY2FsYXJfaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2V4YW1wbGVzL3NjYWxhcl9pbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQwMTgsNiArMzcxNCw3IEBACiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDA1NCw2NSArMzc1MSw3MSBAQAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogc3RydWN0LmggLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmgKKy4vZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9leGFtcGxlcy91Y2REZW1vUHVibGljLmxvOiAuL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDEyMSw2ICszODI0LDcgQEAKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9leGFtcGxlcy93YXRjaGVkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00MTU4LDY0ICszODYyLDY5IEBACiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL2V4YW1wbGVzL3dhdGNoZWQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vZXhhbXBsZXMvd2F0Y2hlZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDIyNCw2ICszOTMzLDcgQEAKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfZGV2aWNlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQyMzIsNjMgKzM5NDIsNjcgQEAKIC4vaG9zdC9ocl9kZXZpY2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAogLi9ob3N0L2hyX2RldmljZS5sbzogLi9ob3N0L2hyX2RldmljZS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oIGhvc3RfcmVzLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQyOTcsNiArNDAxMSw3IEBACiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDMwNyw2MiArNDAyMiw2NiBAQAogLi9ob3N0L2hyX2Rpc2subG86IC4vaG9zdC9ocl9kaXNrLmgKIC4vaG9zdC9ocl9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQzNzEsNiArNDA5MCw3IEBACiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00NDA4LDY2ICs0MTI4LDI5NSBAQAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5LmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiBob3N0X3Jlcy5oIC4vaG9zdC9ocl9maWxlc3lzLmgKLS4vaG9zdC9ocl9maWxlc3lzLmxvOiAuL2hvc3QvaHJfc3RvcmFnZS5oCisuL2hvc3QvaHJfZmlsZXN5cy5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfZmlsZXN5cy5oIC4vaG9zdC9ocl9zdG9yYWdlLmgKKy4vaG9zdC9ocl9maWxlc3lzLmxvOiAuL2hvc3QvaHJfZGlzay5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ob3N0L2hyaF9maWxlc3lzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oCisuL2hvc3QvaHJoX2ZpbGVzeXMubG86IGhvc3RfcmVzLmggLi9ob3N0L2hyaF9maWxlc3lzLmggLi9ob3N0L2hyaF9zdG9yYWdlLmgKKy4vaG9zdC9ocmhfZmlsZXN5cy5sbzogLi9ob3N0L2hyX2Rpc2suaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaG9zdC9ocmhfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaAorLi9ob3N0L2hyaF9zdG9yYWdlLmxvOiBob3N0X3Jlcy5oIC4vaG9zdC9ocmhfZmlsZXN5cy5oIC4vaG9zdC9ocmhfc3RvcmFnZS5oCisuL2hvc3QvaHJoX3N0b3JhZ2UubG86IC4vaG9zdC9ocl9kaXNrLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ0NzYsNiArNDQyNSw3IEBACiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00NTEzLDY2ICs0NDYzLDcxIEBACiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaG9zdC9ocl9uZXR3b3JrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9ob3N0L2hyX25ldHdvcmsubG86IGhvc3RfcmVzLmggbWliSUkvaW50ZXJmYWNlcy5oCiAuL2hvc3QvaHJfbmV0d29yay5sbzogLi9ob3N0L2hyX25ldHdvcmsuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oIGhvc3RfcmVzLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCBob3N0X3Jlcy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDU4MSw2ICs0NTM2LDcgQEAKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJfb3RoZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9vdGhlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDU5MCw2MyArNDU0Niw2NyBAQAogLi9ob3N0L2hyX290aGVyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCiAuL2hvc3QvaHJfb3RoZXIubG86IC4vaG9zdC9ocl9vdGhlci5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogaG9zdF9yZXMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NjU1LDYgKzQ2MTUsNyBAQAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCiAuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDY2Miw2NiArNDYyMyw3MCBAQAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKIC4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi9ob3N0L2hyX3BhcnRpdGlvbi5sbzogLi9ob3N0L2hyX3BhcnRpdGlvbi5oCi0uL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuL2hvc3QvaHJfZmlsZXN5cy5oIC4vaG9zdC9ocl9kaXNrLmgKKy4vaG9zdC9ocl9wYXJ0aXRpb24ubG86IC4vaG9zdC9ocl9wYXJ0aXRpb24uaCAuL2hvc3QvaHJfZmlsZXN5cy5oCisuL2hvc3QvaHJfcGFydGl0aW9uLmxvOiAuL2hvc3QvaHJfZGlzay5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaG9zdC9ocl9wcmludC5sbzogaG9zdF9yZXMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ3MzAsNiArNDY5NSw3IEBACiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3ByaW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTQ3MzcsNjUgKzQ3MDMsNzEgQEAKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKIC4vaG9zdC9ocl9wcmludC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCiAuL2hvc3QvaHJfcHJpbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vaG9zdC9ocl9wcmludC5sbzogLi9ob3N0L2hyX3ByaW50Lmggc3RydWN0LmgKLS4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy5oCisuL2hvc3QvaHJfcHJpbnQubG86IC4vaG9zdC9ocl9wcmludC5oIHN0cnVjdC5oIHV0aWxfZnVuY3MuaAorLi9ob3N0L2hyX3ByaW50LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vaG9zdC9ocl9wcmludC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00ODA0LDYgKzQ3NzYsNyBAQAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNDg0MSw2OCArNDgxNCw3MyBAQAogLi9ob3N0L2hyX3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL2hvc3QvaHJfcHJvYy5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfcHJvYy5oCi0uL2hvc3QvaHJfcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hvc3QvaHJfcHJvYy5sbzogaG9zdF9yZXMuaAorLi9ob3N0L2hyX3Byb2MubG86IC4vaG9zdC9ocl9wcm9jLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKIC4vaG9zdC9ocl9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCiAuL2hvc3QvaHJfcHJvYy5sbzogdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmRlZnMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTQ5MTEsNiArNDg4OSw3IEBACiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaApAQCAtNDkxOCw4ICs0ODk3LDcgQEAKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuL2hvc3QvaHJfc3RvcmFnZS5oCi0uL2hvc3QvaHJfc3RvcmFnZS5sbzogLi9ob3N0L2hyX2ZpbGVzeXMuaAorLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4vaG9zdC9ocl9zdG9yYWdlLmggLi9ob3N0L2hyX2ZpbGVzeXMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC00OTUxLDY1ICs0OTI5LDE4MCBAQAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaG9zdC9ocl9zdG9yYWdlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfc3RvcmFnZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9ob3N0L2hyX3N0b3JhZ2UubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vaG9zdC9oclNXSW5zdGFsbGVkVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oCisuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmxvOiAuL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IGhvc3RfcmVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTUwMTgsNiArNTExMSw3IEBACiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ob3N0L2hyX3N3aW5zdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9zd2luc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCkBAIC01MDI3LDMyICs1MTIxLDUyIEBACiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCiAuL2hvc3QvaHJfc3dpbnN0LmxvOiAuL2hvc3QvaHJfc3dpbnN0LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogaG9zdF9yZXMuaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTUwNjIsMjIgKzUxNzYsNiBAQAogLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTUwOTIsNiArNTE5MCw3IEBACiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9ob3N0L2hyX3N3cnVuLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKIC4vaG9zdC9ocl9zd3J1bi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKQEAgLTUxMDIsNjMgKzUyMDEsMjg4IEBACiAuL2hvc3QvaHJfc3dydW4ubG86IC4vaG9zdC9ocl9zd3J1bi5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2hvc3QvaHJfc3dydW4ubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9ob3N0L2hyU1dSdW5QZXJmVGFibGUubG86IC4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgKKy4vaG9zdC9oclNXUnVuUGVyZlRhYmxlLmxvOiAuL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL2hvc3QvaHJTV1J1blRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vaG9zdC9oclNXUnVuVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaAorLi9ob3N0L2hyU1dSdW5UYWJsZS5sbzogLi9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmggLi9ob3N0L2hyU1dSdW5UYWJsZS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MTY3LDYgKzU0OTEsNyBAQAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01MjAzLDY2ICs1NTI4LDcxIEBACiAuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBob3N0LmggaG9zdF9yZXMuaAotLi9ob3N0L2hyX3N5c3RlbS5sbzogLi9ob3N0L2hyX3N5c3RlbS5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL2hvc3QvaHJfc3lzdGVtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIGhvc3QuaAorLi9ob3N0L2hyX3N5c3RlbS5sbzogaG9zdF9yZXMuaCAuL2hvc3QvaHJfc3lzdGVtLmgKIC4vaG9zdC9ocl9zeXN0ZW0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MjcxLDYgKzU2MDEsNyBAQAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9pcC1taWIvaXBfc2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01MzA4LDY3ICs1NjM5LDcyIEBACiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vaXAtbWliL2lwX3NjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oCiAuL2lwLW1pYi9pcF9zY2FsYXJzLmxvOiAuL2lwLW1pYi9pcF9zY2FsYXJzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL2F0LmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01Mzc3LDYgKzU3MTMsNyBAQAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9hdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01NDE0LDY4ICs1NzUxLDczIEBACiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2F0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIC4vbWliSUkvYXQuaAogLi9taWJJSS9hdC5sbzogLi9taWJJSS9pbnRlcmZhY2VzLmgKIC4vbWliSUkvYXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9pY21wLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTQ4NCw2ICs1ODI2LDcgQEAKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9pY21wLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC01NTIxLDY2ICs1ODY0LDczIEBACiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggdXRpbF9mdW5jcy5oCi0uL21pYklJL2ljbXAubG86IHN0cnVjdC5oIC4vbWliSUkvaWNtcC5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL2ljbXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvaWNtcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS9pY21wLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggLi9taWJJSS9pY21wLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTU1ODksNiArNTkzOSw3IEBACiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNTYyNiwxNzYgKzU5NzcsNzcgQEAKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJJSS9pbnRlcmZhY2VzLmxvOiAuL21pYklJL2ludGVyZmFjZXMuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvaW50ZXJmYWNlcy5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL21pYklJL2lwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvaXAubG86IHN0cnVjdC5oIC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oCi0uL21pYklJL2lwLmxvOiAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oIC4vbWliSUkvaXBBZGRyLmgKLS4vbWliSUkvaXAubG86IC4vbWliSUkvaW50ZXJmYWNlcy5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL2ludGVyZmFjZXMubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi9taWJJSS9pbnRlcmZhY2VzLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNTgwNCw2ICs2MDU2LDcgQEAKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTU4NDEsMTc3ICs2MDk0LDE4OSBAQAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaXBBZGRyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9pcEFkZHIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL21pYklJL2lwQWRkci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJJSS9pcEFkZHIubG86IC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oIC4vbWliSUkvcm91dGVfd3JpdGUuaAotLi9taWJJSS9pcEFkZHIubG86IC4vbWliSUkvYXQuaCAuL21pYklJL2ludGVyZmFjZXMuaCAuL21pYklJL3N5c09SVGFibGUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvcm91dGVfaGVhZGVycy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGUuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY29sdW1ucy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9lbnVtcy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL3Zhcl9yb3V0ZS5oCisuL21pYklJL2lwQWRkci5sbzogLi9taWJJSS9hdC5oIC4vbWliSUkvaW50ZXJmYWNlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL2lwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvaXAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL2lwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS9pcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS9pcC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIC4vbWliSUkvaXAuaAorLi9taWJJSS9pcC5sbzogLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oCisuL21pYklJL2lwLmxvOiAuL21pYklJL2lwQWRkci5oIC4vbWliSUkvaW50ZXJmYWNlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjAyMCw2ICs2Mjg1LDcgQEAKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjA1Nyw2NSArNjMyMywxODUgQEAKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9hY2Nlc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2FjY2Vzcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL3JvdXRlX2hlYWRlcnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NvbHVtbnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfZW51bXMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmxvOiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfYWNjZXNzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZS5sbzogLi9taWJJSS92YXJfcm91dGUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjEyNCw2NiArNjUxMCw3MSBAQAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrZm5zLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9jaGVja2Zucy5oCiAuL21pYklJL2lwQ2lkclJvdXRlVGFibGVfY2hlY2tmbnMubG86IC4vbWliSUkvaXBDaWRyUm91dGVUYWJsZV9lbnVtcy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02MTkyLDYgKzY1ODMsNyBAQAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTYyMjksNjcgKzY2MjEsNzEgQEAKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvaXB2Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9pcHY2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL2lwdjYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL21pYklJL2lwdjYubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL21pYklJL2lwdjYuaAotLi9taWJJSS9pcHY2LmxvOiAuL21pYklJL3Zhcl9yb3V0ZS5oIC4vbWliSUkvcm91dGVfd3JpdGUuaCAuL21pYklJL2F0LmgKLS4vbWliSUkvaXB2Ni5sbzogLi9taWJJSS9pbnRlcmZhY2VzLmgKKy4vbWliSUkvaXB2Ni5sbzogLi4vLi4vYWdlbnQva2VybmVsLmggLi9taWJJSS9pcHY2LmggLi9taWJJSS92YXJfcm91dGUuaAorLi9taWJJSS9pcHY2LmxvOiAuL21pYklJL3JvdXRlX3dyaXRlLmggLi9taWJJSS9hdC5oIC4vbWliSUkvaW50ZXJmYWNlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02Mjk4LDYgKzY2OTQsNyBAQAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjMzNCw2NiArNjczMSw3MCBAQAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS9rZXJuZWxfbGludXgubG86IHN0cnVjdC5oCi0uL21pYklJL2tlcm5lbF9saW51eC5sbzogLi9taWJJSS9rZXJuZWxfbGludXguaAorLi9taWJJSS9rZXJuZWxfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkva2VybmVsX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2tlcm5lbF9saW51eC5sbzogLi9taWJJSS9rZXJuZWxfbGludXguaCAuL21pYklJL2tlcm5lbF9taWIuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjQwMiw2ICs2ODAzLDcgQEAKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02NDM5LDY0ICs2ODQxLDE3OCBAQAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL2tlcm5lbF9uZXRic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkva2VybmVsX25ldGJzZC5sbzogLi9taWJJSS9rZXJuZWxfbmV0YnNkLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vbWliSUkva2VybmVsX3N5c2N0bC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9rZXJuZWxfc3lzY3RsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL2tlcm5lbF9zeXNjdGwubG86IC4vbWliSUkva2VybmVsX3N5c2N0bC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02NTA1LDYgKzcwMjEsNyBAQAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNjU0Miw2NCArNzA1OSw2OSBAQAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvbXRhX3NlbmRtYWlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL210YV9zZW5kbWFpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS9tdGFfc2VuZG1haWwubG86IC4vbWliSUkvbXRhX3NlbmRtYWlsLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY2MDgsNiArNzEzMCw3IEBACiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTY2NDQsNjYgKzcxNjcsNzEgQEAKIC4vbWliSUkvcm91dGVfd3JpdGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pYklJL3JvdXRlX3dyaXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4vbWliSUkvaXAuaAotLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi9taWJJSS92YXJfcm91dGUuaCAuL21pYklJL3JvdXRlX3dyaXRlLmgKLS4vbWliSUkvcm91dGVfd3JpdGUubG86IC4vbWliSUkvYXQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9yb3V0ZV93cml0ZS5sbzogLi9taWJJSS9pcC5oIC4vbWliSUkvdmFyX3JvdXRlLmgKKy4vbWliSUkvcm91dGVfd3JpdGUubG86IC4vbWliSUkvcm91dGVfd3JpdGUuaCAuL21pYklJL2F0LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY3MTIsNiArNzI0MCw3IEBACiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9zZXRTZXJpYWxOby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTY3NDksNjQgKzcyNzgsMTgwIEBACiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3NldFNlcmlhbE5vLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvc2V0U2VyaWFsTm8ubG86IC4vbWliSUkvc2V0U2VyaWFsTm8uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL21pYklJL3NubXBfbWliXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS9zbm1wX21pYl81XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvc25tcF9taWJfNV81LmxvOiAuL21pYklJL3NubXBfbWliXzVfNS5oIC4vbWliSUkvdXBkYXRlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02ODE1LDYgKzc0NjAsNyBAQAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02ODUxLDY1ICs3NDk3LDcyIEBACiAuL21pYklJL3NubXBfbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vbWliSUkvc25tcF9taWIubG86IC4vbWliSUkvc25tcF9taWIuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9zbm1wX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvc25tcF9taWIubG86IC4vbWliSUkvc25tcF9taWIuaCAuL21pYklJL3VwZGF0ZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjkxOCw2ICs3NTcxLDcgQEAKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC02OTU1LDY2ICs3NjA5LDcyIEBACiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3N5c09SVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvc3lzT1JUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAogLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL21pYklJL3N5c09SVGFibGUubG86IHN0cnVjdC5oIHV0aWxfZnVuY3MuaCAuL21pYklJL3N5c09SVGFibGUuaAotLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuLi8uLi9hZ2VudC9zbm1wZC5oIGFnZW50eC9zdWJhZ2VudC5oIGFnZW50eC9jbGllbnQuaAorLi9taWJJSS9zeXNPUlRhYmxlLmxvOiAuL21pYklJL3N5c09SVGFibGUuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzAyMyw2ICs3NjgzLDcgQEAKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03MDU5LDY3ICs3NzIwLDc3IEBACiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS9zeXN0ZW1fbWliLmxvOiBzdHJ1Y3QuaCAuL21pYklJL3N5c3RlbV9taWIuaCAuL21pYklJL3N5c09SVGFibGUuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvc3lzdGVtX21pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL21pYklJL3N5c3RlbV9taWIubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIHN0cnVjdC5oCisuL21pYklJL3N5c3RlbV9taWIubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAorLi9taWJJSS9zeXN0ZW1fbWliLmxvOiAuL21pYklJL3N5c3RlbV9taWIuaCAuL21pYklJL3VwZGF0ZXMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS90Y3AubG86IC4vbWliSUkvbWliSUlfY29tbW9uLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzEyOCw2ICs3Nzk5LDcgQEAKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTcxNjUsNjggKzc4MzcsNzUgQEAKIC4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oIHV0aWxfZnVuY3MuaAotLi9taWJJSS90Y3AubG86IHN0cnVjdC5oIC4vbWliSUkvdGNwLmggLi9taWJJSS90Y3BUYWJsZS5oCi0uL21pYklJL3RjcC5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL21pYklJL3RjcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKKy4vbWliSUkvdGNwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9taWJJSS90Y3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKKy4vbWliSUkvdGNwLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmggLi9taWJJSS90Y3AuaAorLi9taWJJSS90Y3AubG86IC4vbWliSUkvdGNwVGFibGUuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi9taWJJSS9taWJJSV9jb21tb24uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcyMzUsNiArNzkxNCw3IEBACiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3RjcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTcyNzIsNjcgKzc5NTIsNzIgQEAKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdGNwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS90Y3BUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmggLi9taWJJSS90Y3AuaAotLi9taWJJSS90Y3BUYWJsZS5sbzogLi9taWJJSS90Y3BUYWJsZS5oIC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3RjcFRhYmxlLmxvOiAuL21pYklJL3RjcFRhYmxlLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvdWRwLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vYWdlbnQva2VybmVsLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTczNDEsNiArODAyNiw3IEBACiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03Mzc4LDY4ICs4MDY0LDc1IEBACiAuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCB1dGlsX2Z1bmNzLmgKLS4vbWliSUkvdWRwLmxvOiBzdHJ1Y3QuaCAuL21pYklJL3VkcC5oIC4vbWliSUkvdWRwVGFibGUuaAotLi9taWJJSS91ZHAubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9taWJJSS91ZHAubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCisuL21pYklJL3VkcC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdWRwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL21pYklJL3VkcC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIC4vbWliSUkvdWRwLmgKKy4vbWliSUkvdWRwLmxvOiAuL21pYklJL3VkcFRhYmxlLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuL21pYklJL21pYklJX2NvbW1vbi5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NDQ4LDYgKzgxNDEsNyBAQAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdWRwVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03NDg1LDY1ICs4MTc5LDE3OCBAQAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS91ZHBUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3VkcFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCAuL21pYklJL3VkcC5oCi0uL21pYklJL3VkcFRhYmxlLmxvOiAuL21pYklJL3VkcFRhYmxlLmggLi9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdWRwVGFibGUubG86IC4vbWliSUkvdWRwVGFibGUuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vbWliSUkvdXBkYXRlcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9taWJJSS91cGRhdGVzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3VwZGF0ZXMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTc1NTIsNiArODM1OSw3IEBACiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC03NTg5LDY2ICs4Mzk3LDcwIEBACiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9taWJJSS92YWNtX2NvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbWliSUkvdmFjbV9jb25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL21pYklJL3ZhY21fY29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAotLi9taWJJSS92YWNtX2NvbmYubG86IC4vbWliSUkvdmFjbV9jb25mLmggdXRpbF9mdW5jcy5oIHN0cnVjdC5oCi0uL21pYklJL3ZhY21fY29uZi5sbzogLi9taWJJSS9zeXNPUlRhYmxlLmggLi4vLi4vYWdlbnQvc25tcGQuaAorLi9taWJJSS92YWNtX2NvbmYubG86IC4vbWliSUkvdmFjbV9jb25mLmggLi4vLi4vYWdlbnQvc25tcGQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzY1Nyw2ICs4NDY5LDcgQEAKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTc2OTQsNjQgKzg1MDcsNjkgQEAKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL21pYklJL3ZhY21fY29udGV4dC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taWJJSS92YWNtX2NvbnRleHQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbWliSUkvdmFjbV9jb250ZXh0LmxvOiAuL21pYklJL3ZhY21fY29udGV4dC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03NzYwLDYgKzg1NzgsNyBAQAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzc5Nyw2NyArODYxNiw3MiBAQAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdmFjbV92YXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS92YWNtX3ZhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKLS4vbWliSUkvdmFjbV92YXJzLmxvOiAuL21pYklJL3ZhY21fdmFycy5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi9taWJJSS92YWNtX3ZhcnMubG86IC4vbWliSUkvc3lzT1JUYWJsZS5oCisuL21pYklJL3ZhY21fdmFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vbWliSUkvdmFjbV92YXJzLmxvOiAuL21pYklJL3ZhY21fdmFycy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4vbWliSUkvcm91dGVfaGVhZGVycy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03ODY2LDYgKzg2OTAsNyBAQAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtNzkwMyw2OCArODcyOCw3NSBAQAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbWliSUkvdmFyX3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL21pYklJL3Zhcl9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4vbWliSUkvaXAuaCAuL21pYklJL3Zhcl9yb3V0ZS5oIC4vbWliSUkvcm91dGVfd3JpdGUuaAogLi9taWJJSS92YXJfcm91dGUubG86IC4vbWliSUkvYXQuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaCAuL21pYklJL2ludGVyZmFjZXMuaAotLi9taWJJSS92YXJfcm91dGUubG86IHN0cnVjdC5oIHV0aWxfZnVuY3MuaAorLi9taWJJSS92YXJfcm91dGUubG86IHN0cnVjdC5oIHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vbWliSUkvdmFyX3JvdXRlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi9taWJJSS92YXJfcm91dGUubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNzk3Myw2ICs4ODA1LDcgQEAKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTgwMDksNjUgKzg4NDIsNzAgQEAKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vbWlzYy9pcGZ3YWNjLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vbWlzYy9pcGZ3YWNjLmxvOiAuL21pc2MvaXBmd2FjYy5oCisuL21pc2MvaXBmd2FjYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9taXNjL2lwZndhY2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vbWlzYy9pcGZ3YWNjLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuL21pc2MvaXBmd2FjYy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04MDc2LDYgKzg5MTQsNyBAQAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTgxMTMsNjUgKzg5NTIsNzEgQEAKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKKy4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCiAuL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cubG86IC4vbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04MTgwLDYgKzkwMjUsNyBAQAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04MjE3LDY1ICs5MDYzLDcwIEBACiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IGhlYWRlcl9jb21wbGV4LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUubG86IC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODI4NCw2ICs5MTM1LDcgQEAKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC04MzIxLDYgKzkxNzMsNyBAQAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogaGVhZGVyX2NvbXBsZXguaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKQEAgLTgzMzMsNjUgKzkxODYsODMzIEBACiAuL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IHNubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKIC4vbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5sbzogc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCi0uL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaAorLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAogLi9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmxvOiBub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vUm1vbi9hZ3V0aWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL2FndXRpbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vYWd1dGlsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vYWd1dGlsLmxvOiAuL1Jtb24vYWd1dGlsLmggLi9SbW9uL2FndXRpbF9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vUm1vbi9hbGFybS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL2FsYXJtLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vYWxhcm0ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vUm1vbi9hbGFybS5sbzogLi9SbW9uL2FsYXJtLmggLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93X2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vUm1vbi9hbGFybVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL1Jtb24vYWxhcm1UYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL2FsYXJtVGFibGUubG86IHV0aWxpdGllcy9pcXVlcnkuaCAuL1Jtb24vYWxhcm1UYWJsZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9SbW9uL2V2ZW50LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL1Jtb24vZXZlbnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9ldmVudC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9SbW9uL2V2ZW50LmxvOiAuL1Jtb24vZXZlbnQuaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL2hpc3RvcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9oaXN0b3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vaGlzdG9yeS5sbzogLi9SbW9uL2hpc3RvcnkuaCAuL1Jtb24vYWd1dGlsX2FwaS5oIC4vUm1vbi9yb3dfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vcm93cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL3Jvd3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9yb3dzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vcm93cy5sbzogLi9SbW9uL2FndXRpbF9hcGkuaCAuL1Jtb24vcm93cy5oIC4vUm1vbi9yb3dfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi9SbW9uL3N0YXRpc3RpY3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vUm1vbi9zdGF0aXN0aWNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi9SbW9uL3N0YXRpc3RpY3MuaCAuL1Jtb24vYWd1dGlsX2FwaS5oCisuL1Jtb24vc3RhdGlzdGljcy5sbzogLi9SbW9uL3Jvd19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODQwMCw2ICsxMDAyMSw3IEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg0MzcsNjUgKzEwMDU5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04NTA0LDYgKzEwMTMxLDcgQEAKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg1NDEsNjUgKzEwMTY5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODYwOCw2ICsxMDI0MSw3IEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg2NDUsNjUgKzEwMjc5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUubG86IC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04NzEyLDYgKzEwMzUxLDcgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg3NDksNjUgKzEwMzg5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODgxNiw2ICsxMDQ2MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg4NTMsNjUgKzEwNDk5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04OTIwLDYgKzEwNTcxLDcgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTg5NTcsNjUgKzEwNjA5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTAyNCw2ICsxMDY4MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTA2MSw2NSArMTA3MTksNzAgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTEyOCw2ICsxMDc5MSw3IEBACiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTE2NSw2NSArMTA4MjksNzAgQEAKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUubG86IC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTIzMiw2ICsxMDkwMSw3IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTkyNjksNjUgKzEwOTM5LDcwIEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnMubG86IC4vc2N0cC1taWIvc2N0cFNjYWxhcnMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFycy5sbzogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTMzNiw2ICsxMTAxMSw3IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05MzczLDY0ICsxMTA0OSwxNzggQEAKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NDM5LDYgKzExMjI5LDcgQEAKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTQ3Niw2NCArMTEyNjcsMTc5IEBACiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiAuL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5oCisuL3NjdHAtbWliL3NjdHBTY2FsYXJzX3NvbGFyaXMyLmxvOiBrZXJuZWxfc3Vub3M1LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTk1NDIsNiArMTE0NDgsNyBAQAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05NTc5LDYgKzExNDg2LDcgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24ubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKQEAgLTk1ODgsNjMgKzExNDk2LDE4MiBAQAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmxvOiAuL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5sbzogLi9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19mcmVlYnNkLmxvOiAuL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIHN0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NjUzLDYgKzExNjgwLDcgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC05NjkwLDY4ICsxMTcxOCwxODkgQEAKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAogLi9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKIC4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKLS4vc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXgubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4vc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiAuL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogLi9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCisuL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIubG86IC4vc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBzdHJ1Y3QuaAorLi9zY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKKy4vc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5sbzoga2VybmVsX3N1bm9zNS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05NzYwLDYgKzExOTA5LDcgQEAKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbXV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk3OTYsNjUgKzExOTQ2LDcwIEBACiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc211eC5oIHV0aWxfZnVuY3MuaAotLi9zbXV4L3NtdXgubG86IHN0cnVjdC5oIG1pYmRlZnMuaCAuLi8uLi9hZ2VudC9zbm1wZC5oCisuL3NtdXgvc211eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbXV4L3NtdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCisuL3NtdXgvc211eC5sbzogbWliZGVmcy5oIC4uLy4uL2FnZW50L3NubXBkLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTk4NjMsNiArMTIwMTgsNyBAQAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc211eC9zbm1wX2JncC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTk4OTksNjUgKzEyMDU1LDcwIEBACiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHNtdXguaAorLi9zbXV4L3NubXBfYmdwLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NtdXgvc25tcF9iZ3AubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCiAuL3NtdXgvc25tcF9iZ3AubG86IC4vc211eC9zbm1wX2JncC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC05OTY2LDYgKzEyMTI3LDcgQEAKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAwMDIsNjUgKzEyMTY0LDcwIEBACiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NubXBfb3NwZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbXV4LmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc211eC9zbm1wX29zcGYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCiAuL3NtdXgvc25tcF9vc3BmLmxvOiAuL3NtdXgvc25tcF9vc3BmLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMDY5LDYgKzEyMjM2LDcgQEAKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAxMDUsNjUgKzEyMjczLDcwIEBACiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbXV4L3NubXBfcmlwMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzbXV4LmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc211eC9zbm1wX3JpcDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmggc211eC5oCiAuL3NtdXgvc25tcF9yaXAyLmxvOiAuL3NtdXgvc25tcF9yaXAyLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMTcyLDYgKzEyMzQ1LDcgQEAKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTAyMDgsNjUgKzEyMzgyLDE4MyBAQAogLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vc25tcHYzL3NubXBFbmdpbmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3NubXB2My9zbm1wRW5naW5lLmxvOiBzdHJ1Y3QuaCBtaWJJSS9zeXNPUlRhYmxlLmggLi9zbm1wdjMvc25tcEVuZ2luZS5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My9zbm1wRW5naW5lLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvc25tcEVuZ2luZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vc25tcHYzL3NubXBFbmdpbmUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcHYzL3NubXBNUERTdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmxvOiAuL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMjc1LDYgKzEyNTY3LDcgQEAKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDMxMiw2NSArMTI2MDUsNzEgQEAKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiBtaWJJSS9zeXNPUlRhYmxlLmggLi9zbm1wdjMvc25tcE1QRFN0YXRzLmgKLS4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oCisuL3NubXB2My9zbm1wTVBEU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vc25tcHYzL3NubXBNUERTdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi9zbm1wdjMvc25tcE1QRFN0YXRzLmxvOiAuL3NubXB2My9zbm1wTVBEU3RhdHMuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwMzc5LDYgKzEyNjc4LDcgQEAKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbUNvbmYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA0MTYsNjMgKzEyNzE2LDE3OSBAQAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtQ29uZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB2My91c21Db25mLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3VzbVN0YXRzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaAorLi9zbm1wdjMvdXNtU3RhdHNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL3NubXB2My91c21TdGF0c181XzUubG86IC4vc25tcHYzL3VzbVN0YXRzXzVfNS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDQ4MSw2ICsxMjg5Nyw3IEBACiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDUxNyw2NSArMTI5MzQsNzIgQEAKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmgKLS4vc25tcHYzL3VzbVN0YXRzLmxvOiBzdHJ1Y3QuaCBtaWJJSS9zeXNPUlRhYmxlLmggLi9zbm1wdjMvdXNtU3RhdHMuaAorLi9zbm1wdjMvdXNtU3RhdHMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB2My91c21TdGF0cy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKKy4vc25tcHYzL3VzbVN0YXRzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oCisuL3NubXB2My91c21TdGF0cy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vc25tcHYzL3VzbVN0YXRzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEwNTg0LDYgKzEzMDA4LDcgQEAKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA2MjAsNjUgKzEzMDQ1LDcwIEBACiAuL3NubXB2My91c21Vc2VyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHYzL3VzbVVzZXIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vc25tcHYzL3VzbVVzZXIubG86IC4vc25tcHYzL3VzbVVzZXIuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi9zbm1wdjMvdXNtVXNlci5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vc25tcHYzL3VzbVVzZXIuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA2ODcsNiArMTMxMTcsNyBAQAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMDcyNCw2NSArMTMxNTUsNzAgQEAKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oIHV0aWxfZnVuY3MuaAotLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogc3RydWN0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkubG86IC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAorLi90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDc5MSw2ICsxMzIyNyw3IEBACiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA4MjgsNjQgKzEzMjY1LDY5IEBACiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmxvOiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA4OTQsNiArMTMzMzYsNyBAQAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhcmdldC90YXJnZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEwOTMxLDY1ICsxMzM3NCwxNzkgQEAKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YXJnZXQvdGFyZ2V0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhcmdldC90YXJnZXQubG86IC4vdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAogLi90YXJnZXQvdGFyZ2V0LmxvOiAuL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCB0YXJnZXQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUubG86IC4vdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTA5OTgsNiArMTM1NTUsNyBAQAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMDM1LDY0ICsxMzU5MywxNzggQEAKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3RhcmdldC90YXJnZXRfY291bnRlcnMubG86IC4vdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmxvOiAuL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTExMDEsNiArMTM3NzMsNyBAQAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTExMTM3LDggKzEzODEwLDExIEBACiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaAotLi90dW5uZWwvdHVubmVsLmxvOiB0dW5uZWwuaCBpZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi90dW5uZWwvdHVubmVsLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCisuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmggdHVubmVsLmgKKy4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCiAuL3R1bm5lbC90dW5uZWwubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKIC4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaAogLi90dW5uZWwvdHVubmVsLmxvOiBpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5oCkBAIC0xMTE0Niw2MiArMTM4MjIsNjYgQEAKIC4vdHVubmVsL3R1bm5lbC5sbzogaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oCiAuL3R1bm5lbC90dW5uZWwubG86IGlmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGVmcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTIxMCw2ICsxMzg5MCw3IEBACiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTEyNDcsNjYgKzEzOTI4LDE4MiBAQAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9kaXNrLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2Rpc2subG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvZGlzay5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmggc3RydWN0LmgKLS4vdWNkLXNubXAvZGlzay5sbzogLi91Y2Qtc25tcC9kaXNrLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC9kaXNrLmxvOiAuL3VjZC1zbm1wL2Vycm9ybWliLmgKKy4vdWNkLXNubXAvZGlzay5sbzogLi91Y2Qtc25tcC9kaXNrLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2Rpc2subG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIC4vdWNkLXNubXAvZXJyb3JtaWIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAorLi91Y2Qtc25tcC9kaXNrX2h3LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmggc3RydWN0LmgKKy4vdWNkLXNubXAvZGlza19ody5sbzogLi91Y2Qtc25tcC9kaXNrLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2Rpc2tfaHcubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIC4vdWNkLXNubXAvZXJyb3JtaWIuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTEzMTUsNiArMTQxMTIsNyBAQAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTEzNTEsNjUgKzE0MTQ5LDcxIEBACiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3VjZC1zbm1wL2Rpc2tpby5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9kaXNraW8uaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvZGlza2lvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL2Rpc2tpby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9jYWxsYmFja3MuaAorLi91Y2Qtc25tcC9kaXNraW8ubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIC4vdWNkLXNubXAvZGlza2lvLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNDE4LDYgKzE0MjIyLDcgQEAKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE0NTQsNjUgKzE0MjU5LDcwIEBACiAuL3VjZC1zbm1wL2RsbW9kLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9kbG1vZC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaCB1dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvZGxtb2QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvZGxtb2QubG86IC4vdWNkLXNubXAvZGxtb2QuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTE1MjEsNiArMTQzMzEsNyBAQAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTU1OCw2NSArMTQzNjksNzEgQEAKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9lcnJvcm1pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmggc3RydWN0LmgKLS4vdWNkLXNubXAvZXJyb3JtaWIubG86IC4vdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJkZWZzLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiAuL3VjZC1zbm1wL2Vycm9ybWliLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2Vycm9ybWliLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNjI1LDYgKzE0NDQyLDcgQEAKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTY2Miw2NyArMTQ0ODAsNzYgQEAKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmgKIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9leHRlbnNpYmxlLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHV0aWxpdGllcy9leGVjdXRlLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9leHRlbnNpYmxlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdWNkLXNubXAvZXh0ZW5zaWJsZS5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCisuL3VjZC1zbm1wL2V4dGVuc2libGUubG86IHV0aWxpdGllcy9leGVjdXRlLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTExNzMxLDYgKzE0NTU4LDcgQEAKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTc2Nyw2NSArMTQ1OTUsNzEgQEAKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvZmlsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc3RydWN0LmgKLS4vdWNkLXNubXAvZmlsZS5sbzogLi91Y2Qtc25tcC9maWxlLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9maWxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2ZpbGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvZmlsZS5sbzogc3RydWN0LmggLi91Y2Qtc25tcC9maWxlLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL2ZpbGUubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTgzNCw2ICsxNDY2OCw3IEBACiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTE4NzAsNjUgKzE0NzA1LDcwIEBACiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4vdWNkLXNubXAvaHB1eC5oCi0uL3VjZC1zbm1wL2hwdXgubG86IG1pYmRlZnMuaAorLi91Y2Qtc25tcC9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvaHB1eC5sbzogLi91Y2Qtc25tcC9ocHV4LmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTkzNyw2ICsxNDc3Nyw3IEBACiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMTk3Myw2NiArMTQ4MTQsMTgyIEBACiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggdXRpbF9mdW5jcy5oCi0uL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogc3RydWN0LmgKKy4vdWNkLXNubXAvbG1TZW5zb3JzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9sbVNlbnNvcnMubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCiAuL3VjZC1zbm1wL2xtU2Vuc29ycy5sbzogLi91Y2Qtc25tcC9sbVNlbnNvcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvbG1zZW5zb3JzTWliLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaAorLi91Y2Qtc25tcC9sbXNlbnNvcnNNaWIubG86IGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oCisuL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5sbzogdWNkLXNubXAvbG1zZW5zb3JzTWliLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyMDQxLDYgKzE0OTk4LDcgQEAKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjA3OCwyNzMgKzE1MDM2LDczIEBACiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbG9hZGF2ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiAuL3VjZC1zbm1wL2xvYWRhdmUuaCBtaWJkZWZzLmggdXRpbF9mdW5jcy5oCi0uL3VjZC1zbm1wL2xvYWRhdmUubG86IC4uLy4uL2FnZW50L2tlcm5lbC5oCisuL3VjZC1zbm1wL2xvYWRhdmUubG86IC4vdWNkLXNubXAvbG9hZGF2ZS5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9sb2FkYXZlLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3VjZC1zbm1wL2xvZ21hdGNoLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKLS4vdWNkLXNubXAvbG9nbWF0Y2gubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBzdHJ1Y3QuaAotLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogdXRpbF9mdW5jcy5oIC4vdWNkLXNubXAvbG9nbWF0Y2guaCBtaWJkZWZzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXJfZ3JvdXAuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvd2F0Y2hlci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9udWxsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RlYnVnX2hhbmRsZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3JlYWRfb25seS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2VyaWFsaXplLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2J1bGtfdG9fbmV4dC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGEuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKLS4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeS5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9sb2dtYXRjaC5sbzogLi91Y2Qtc25tcC9sb2dtYXRjaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjM1Myw2ICsxNTExMSw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyMzkwLDY2ICsxNTE0OSwxODEgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2FpeDQubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9haXg0LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5sbzogLi91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvbWVtb3J5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeS5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI0NTgsNiArMTUzMzIsNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMjQ5NSw2NiArMTUzNzAsNzEgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2RhcndpbjcubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5sbzogLi91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI1NjMsNiArMTU0NDMsNyBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTI2MDAsNjYgKzE1NDgxLDcxIEBACiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2R5bml4LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC9tZW1vcnkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZHluaXgubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3VjZC1zbm1wL21lbW9yeS5oCiAuL3VjZC1zbm1wL21lbW9yeV9keW5peC5sbzogLi91Y2Qtc25tcC9tZW1vcnlfZHluaXguaCBtaWJkZWZzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNjY4LDYgKzE1NTU0LDcgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyNzA1LDY2ICsxNTU5Miw3NCBAQAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvbWVtb3J5LmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmggc3RydWN0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKKy4vdWNkLXNubXAvbWVtb3J5X2ZyZWVic2QyLmxvOiAuL3VjZC1zbm1wL21lbW9yeS5oCiAuL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5sbzogLi91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuaCBtaWJkZWZzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyNzczLDYgKzE1NjY4LDcgQEAKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTI4MTAsNjYgKzE1NzA2LDcxIEBACiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9ocHV4LmxvOiAuL3VjZC1zbm1wL21lbW9yeS5oIC4vdWNkLXNubXAvbWVtb3J5X2hwdXguaAogLi91Y2Qtc25tcC9tZW1vcnlfaHB1eC5sbzogbWliZGVmcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjg3OCw2ICsxNTc3OSw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEyOTE1LDY2ICsxNTgxNyw3MSBAQAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvbWVtb3J5LmgKKy4vdWNkLXNubXAvbWVtb3J5X25ldGJzZDEubG86IHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCAuL3VjZC1zbm1wL21lbW9yeS5oCiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmxvOiAuL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjk4Myw2ICsxNTg5MCw3IEBACiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzAyMCw2NiArMTU5MjgsNzIgQEAKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL21lbW9yeS5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5sbzogLi91Y2Qtc25tcC9tZW1vcnkuaAogLi91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIubG86IC4vdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzA4OCw2ICsxNjAwMiw3IEBACiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTMxMjQsNjYgKzE2MDM5LDc0IEBACiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9wYXNzLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3Bhc3MubG86IC4vdWNkLXNubXAvcGFzcy5oIG1pYmRlZnMuaCAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKLS4vdWNkLXNubXAvcGFzcy5sbzogLi91Y2Qtc25tcC9leHRlbnNpYmxlLmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Bhc3MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wYXNzLmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Bhc3MuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5oCisuL3VjZC1zbm1wL3Bhc3MubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdWNkLXNubXAvcGFzcy5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzE5Miw2ICsxNjExNSw3IEBACiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzMjI5LDY1ICsxNjE1Myw3MyBAQAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuLi8uLi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmggc3RydWN0LmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvcGFzc19jb21tb24ubG86IC4uLy4uL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCBzdHJ1Y3QuaAorLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmxvOiAuL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzMjk2LDYgKzE2MjI4LDcgQEAKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzMzMyLDY3ICsxNjI2NSw3NCBAQAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHN0cnVjdC5oIC4vdWNkLXNubXAvcGFzc19wZXJzaXN0LmggbWliZGVmcy5oCiAuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogLi91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oIC4vdWNkLXNubXAvZXh0ZW5zaWJsZS5oCi0uL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogdXRpbF9mdW5jcy5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAorLi91Y2Qtc25tcC9wYXNzX3BlcnNpc3QubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3VjZC1zbm1wL3Bhc3NfcGVyc2lzdC5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzQwMSw2ICsxNjM0MSw3IEBACiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTM0MzcsNjYgKzE2Mzc4LDc1IEBACiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC9wcm9jLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3Byb2MubG86IC4vdWNkLXNubXAvcHJvYy5oIG1pYmRlZnMuaCAuL3VjZC1zbm1wL2Vycm9ybWliLmgKLS4vdWNkLXNubXAvcHJvYy5sbzogdXRpbF9mdW5jcy5oIC4uLy4uL2FnZW50L2tlcm5lbC5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wcm9jLmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Byb2MuaCBtaWJkZWZzLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oCisuL3VjZC1zbm1wL3Byb2MubG86IC4vdWNkLXNubXAvZXJyb3JtaWIuaCB1dGlsX2Z1bmNzLmgKKy4vdWNkLXNubXAvcHJvYy5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Byb2MubG86IHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCisuL3VjZC1zbm1wL3Byb2MubG86IHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCAuLi8uLi9hZ2VudC9rZXJuZWwuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM1MDUsNiArMTY0NTUsNyBAQAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xMzU0MSw2NCArMTY0OTIsNzAgQEAKIC4vdWNkLXNubXAvcHJveHkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Byb3h5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIC4vdWNkLXNubXAvcHJveHkuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91Y2Qtc25tcC9wcm94eS5sbzogLi91Y2Qtc25tcC9wcm94eS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzYwNyw2ICsxNjU2NCw3IEBACiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzNjQzLDE3MCArMTY2MDEsNzMgQEAKIC4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHN0cnVjdC5oCi0uL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmggbWliZGVmcy5oIHV0aWxfZnVuY3MuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKLS4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaAotLi91Y2Qtc25tcC92bXN0YXQubG86IC4vdWNkLXNubXAvdm1zdGF0LmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmggbWliZGVmcy5oCisuL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggdXRpbF9mdW5jcy9yZXN0YXJ0LmgKKy4vdWNkLXNubXAvdmVyc2lvbmluZm8ubG86IHV0aWxfZnVuY3MuaCB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaAorLi91Y2Qtc25tcC92ZXJzaW9uaW5mby5sbzogdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzgxNSw2ICsxNjY3Niw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTEzODUxLDY2ICsxNjcxMyw3MSBAQAogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2FpeDQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAotLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5sbzogLi91Y2Qtc25tcC92bXN0YXRfYWl4NC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIC4vdWNkLXNubXAvdm1zdGF0X2FpeDQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTM5MTksNiArMTY3ODYsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTM5NTYsNjYgKzE2ODI0LDE4MiBAQAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvdm1zdGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2JzZGk0LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC92bXN0YXQuaAogLi91Y2Qtc25tcC92bXN0YXRfYnNkaTQubG86IG1pYmRlZnMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9hZ2VudC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC92YXJfc3RydWN0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L211bHRpcGxleGVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L251bGwuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Jvd19tZXJnZS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zZXJpYWxpemUuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21vZGVfZW5kX2NhbGwuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCisuL3VjZC1zbm1wL3Ztc3RhdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAorLi91Y2Qtc25tcC92bXN0YXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKKy4vdWNkLXNubXAvdm1zdGF0LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIG1pYmRlZnMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQwMjQsNiArMTcwMDgsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDA2MSw2NiArMTcwNDYsNzEgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hdXRvX25saXN0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmggLi91Y2Qtc25tcC92bXN0YXQuaAogLi91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5sbzogbWliZGVmcy5oIC4vdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQxMjksNiArMTcxMTksNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQxNjUsNjYgKzE3MTU2LDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggbWliZGVmcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogdXRpbF9mdW5jcy5oIHN0cnVjdC5oIC4vdWNkLXNubXAvdm1zdGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfZHluaXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2R5bml4LmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5sbzogLi91Y2Qtc25tcC92bXN0YXQuaCAuL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDIzMyw2ICsxNzIyOSw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDI3MCw2NiArMTcyNjcsNzIgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5sbzogbWliZGVmcy5oIC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmxvOiAuL3VjZC1zbm1wL3Ztc3RhdC5oIG1pYmRlZnMuaAorLi91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIubG86IC4vdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0MzM4LDYgKzE3MzQxLDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQzNzQsNjYgKzE3Mzc4LDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCBtaWJkZWZzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmxvOiAuL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IG1pYmRlZnMuaCB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKKy4vdWNkLXNubXAvdm1zdGF0X2hwdXgubG86IC4vdWNkLXNubXAvdm1zdGF0LmggLi91Y2Qtc25tcC92bXN0YXRfaHB1eC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDQ0Miw2ICsxNzQ1MSw3IEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCkBAIC0xNDQ3OSw2NyArMTc0ODksNzIgQEAKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKLS4vdWNkLXNubXAvdm1zdGF0X2xpbnV4LmxvOiBtaWJkZWZzLmggc3RydWN0LmggdXRpbF9mdW5jcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5sbzogbWliZGVmcy5oIHN0cnVjdC5oIHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfbGludXgubG86IC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE0NTQ4LDYgKzE3NTYzLDcgQEAKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ1ODUsNjYgKzE3NjAxLDcxIEBACiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmxvOiB1dGlsX2Z1bmNzLmggc3RydWN0LmggLi91Y2Qtc25tcC92bXN0YXQuaAorLi91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5sbzogdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIC4vdWNkLXNubXAvdm1zdGF0LmgKIC4vdWNkLXNubXAvdm1zdGF0X25ldGJzZDEubG86IG1pYmRlZnMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ2NTMsNiArMTc2NzQsNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ2ODksNjYgKzE3NzExLDQzNyBAQAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIG1pYmRlZnMuaAotLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IHV0aWxfZnVuY3MuaCBzdHJ1Y3QuaCAuL3VjZC1zbm1wL3Ztc3RhdC5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKKy4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmxvOiBtaWJkZWZzLmggdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5sbzogLi91Y2Qtc25tcC92bXN0YXQuaAogLi91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIubG86IC4vdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdXRpbF9mdW5jcy9FeGl0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3V0aWxfZnVuY3MvRXhpdC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzL0V4aXQubG86IC4vdXRpbF9mdW5jcy9FeGl0LmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMubG86IC4vdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9oYW5kbGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3Zhcl9zdHJ1Y3QuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYmFieV9zdGVwcy5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zY2FsYXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbXVsdGlwbGV4ZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kZWJ1Z19oYW5kbGVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yZWFkX29ubHkuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcm93X21lcmdlLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9idWxrX3RvX25leHQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbW9kZV9lbmRfY2FsbC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUubG86IC4vdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3V0aWxfZnVuY3MvcmVzdGFydC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91dGlsX2Z1bmNzL3Jlc3RhcnQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vdXRpbF9mdW5jcy9yZXN0YXJ0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNDc1Nyw2ICsxODE1MCw3IEBACiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0Nzk0LDY1ICsxODE4OCw3MCBAQAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9hcnJheS5oCiAuL3V0aWxpdGllcy9leGVjdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCi0uL3V0aWxpdGllcy9leGVjdXRlLmxvOiB1Y2Qtc25tcC9lcnJvcm1pYi5oIG1pYmRlZnMuaCB1dGlsX2Z1bmNzLmggc3RydWN0LmgKLS4vdXRpbGl0aWVzL2V4ZWN1dGUubG86IC4vdXRpbGl0aWVzL2V4ZWN1dGUuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAorLi91dGlsaXRpZXMvZXhlY3V0ZS5sbzogdWNkLXNubXAvZXJyb3JtaWIuaCBtaWJkZWZzLmggLi91dGlsaXRpZXMvZXhlY3V0ZS5oCisuL3V0aWxpdGllcy9leGVjdXRlLmxvOiBzdHJ1Y3QuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ4NjEsNiArMTgyNjAsNyBAQAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3V0aWxpdGllcy9pcXVlcnkubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKQEAgLTE0ODk3LDY0ICsxODI5Nyw3MCBAQAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaCB1dGlsaXRpZXMvaXF1ZXJ5LmgKKy4vdXRpbGl0aWVzL2lxdWVyeS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsaXRpZXMvaXF1ZXJ5LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3V0aWxpdGllcy9pcXVlcnkubG86IHV0aWxpdGllcy9pcXVlcnkuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQ5NjMsNiArMTgzNjksNyBAQAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTQ5OTksNSArMTg0MDYsNSBAQAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaAogLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKLS4vdXRpbGl0aWVzL292ZXJyaWRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oIHV0aWxfZnVuY3MuaAotLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IHN0cnVjdC5oCisuL3V0aWxpdGllcy9vdmVycmlkZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi91dGlsaXRpZXMvb3ZlcnJpZGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmgKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL01ha2VmaWxlLmluIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4KaW5kZXggZjY0MWFiNy4uMjM0MWFiNCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4KKysrIGIvYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW4KQEAgLTEsNCArMSw2IEBACiB0b3BfYnVpbGRkaXI9Li4vLi4KK215c3ViZGlyPWFnZW50L21pYmdyb3VwCisKICMgY3VycmVudGx5IGFzc3VtZXMgZ2NjOiAgICAoWFhYOiBmaXggdmlhIGNvbmZpZ3VyZSB0ZXN0cykKIERMRkxBR1M9LWZQSUMgLXNoYXJlZAogCkBAIC0xNiw2ICsxOCw4IEBACiAKIE9USEVSQ0xFQU5UQVJHRVRTPUBkbGxjbGVhbnNACiAKK0ZFQVRVUkVGSUxFPS4uLy4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZmVhdHVyZXMtbWliZ3JvdXBzLmgKKwogIyBOZWVkIGEgc3BlY2lhbCAuYyAtPiAubyBkZWZpbml0aW9uIGhlcmUgdG8gbWFrZSBzdXJlIHdlIHBsYWNlIHRoZQogIyBvYmplY3QgZmlsZXMgaW4gdGhlIHN1YiBkaXJlY3RvcnkuCiAKQEAgLTI1LDEwICsyOSwxMiBAQAogQG1pYl9tb2R1bGVfbGlzdF9vQAogQG1pYl9tb2R1bGVfbGlzdF9sb0AKIEBtaWJfbW9kdWxlX2xpc3RfY0AKK0BtaWJfbW9kdWxlX2xpc3RfZnRACiAKLU9CSlMgID0gJChtaWJfbW9kdWxlX2xpc3RfbykKLUxPQkpTID0gJChtaWJfbW9kdWxlX2xpc3RfbG8pCi1TUkNTICA9ICQobWliX21vZHVsZV9saXN0X2MpCitPQkpTICAgPSAkKG1pYl9tb2R1bGVfbGlzdF9vKQorTE9CSlMgID0gJChtaWJfbW9kdWxlX2xpc3RfbG8pCitTUkNTICAgPSAkKG1pYl9tb2R1bGVfbGlzdF9jKQorRlRPQkpTID0gJChtaWJfbW9kdWxlX2xpc3RfZnQpCiAKIGFsbDogc3RhbmRhcmRhbGwgJChMT0JKUykKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi5oCmluZGV4IDg0N2VhYTkuLjNhN2QzYTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24uaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uLmgKQEAgLTQ3LDcgKzQ3LDkgQEAKIGNvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKIGNvbmZpZ19yZXF1aXJlKFJtb24vYWd1dGlsKQogY29uZmlnX3JlcXVpcmUoUm1vbi9zdGF0aXN0aWNzKQotY29uZmlnX3JlcXVpcmUoUm1vbi9hbGFybSkKKy8qIG9sZGVyIGltcGxlbWVudGF0aW9uOiAqLworLyogY29uZmlnX3JlcXVpcmUoUm1vbi9hbGFybSkgKi8KK2NvbmZpZ19yZXF1aXJlKFJtb24vYWxhcm1UYWJsZSkKIGNvbmZpZ19yZXF1aXJlKFJtb24vaGlzdG9yeSkKIGNvbmZpZ19yZXF1aXJlKFJtb24vZXZlbnQpCiBjb25maWdfYWRkX21pYihSTU9OLU1JQikKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2FndXRpbC5jCmluZGV4IDNiMGM4N2EuLjEyYzYzNDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWd1dGlsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hZ3V0aWwuYwpAQCAtMjIsOCArMjIsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImFndXRpbC5oIgogI2luY2x1ZGUgImFndXRpbF9hcGkuaCIKIApAQCAtMjAyLDIwICsyMDAsNyBAQAogdV9sb25nCiBBR1VUSUxfc3lzX3VwX3RpbWUodm9pZCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgY3VycmVudCwgZGVsdGE7Ci0gICAgZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKLQotICAgIGdldHRpbWVvZmRheSgmY3VycmVudCwgTlVMTCk7Ci0gICAgY3VycmVudC50dl9zZWMtLTsKLSAgICBjdXJyZW50LnR2X3VzZWMgKz0gMTAwMDAwMEw7Ci0gICAgZGVsdGEudHZfc2VjID0gY3VycmVudC50dl9zZWMgLSBzdGFydHRpbWUudHZfc2VjOwotICAgIGRlbHRhLnR2X3VzZWMgPSBjdXJyZW50LnR2X3VzZWMgLSBzdGFydHRpbWUudHZfdXNlYzsKLSAgICBpZiAoZGVsdGEudHZfdXNlYyA+IDEwMDAwMDBMKSB7Ci0gICAgICAgIGRlbHRhLnR2X3VzZWMgLT0gMTAwMDAwMEw7Ci0gICAgICAgIGRlbHRhLnR2X3NlYysrOwotICAgIH0KLQotICAgIHJldHVybiBkZWx0YS50dl9zZWMgKiAxMDAgKyBkZWx0YS50dl91c2VjIC8gMTAwMDA7CisgICAgcmV0dXJuIG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uYwppbmRleCBhMDRkNDE1Li45NWNiMDE3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5jCkBAIC0yNywxMSArMjcsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00Myw3ICszOSw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgImFsYXJtLmgiCiAgICAgLyoKICAgICAgKiBJbXBsZW1lbnRhdGlvbiBoZWFkZXJzIApAQCAtNjg0LDIzICs2NzksMzAgQEAKIG9pZCAgICAgICAgICAgICBvaWRhbGFybVZhcmlhYmxlc09pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxNiwgMyB9OwogCiBzdHJ1Y3QgdmFyaWFibGU3IG9pZGFsYXJtVmFyaWFibGVzW10gPSB7Ci0gICAge0lEYWxhcm1JbmRleCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDF9fSwKLSAgICB7SURhbGFybUludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDJ9fSwKLSAgICB7SURhbGFybVZhcmlhYmxlLCBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgM319LAotICAgIHtJRGFsYXJtU2FtcGxlVHlwZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA0fX0sCi0gICAge0lEYWxhcm1WYWx1ZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDV9fSwKLSAgICB7SURhbGFybVN0YXJ0dXBBbGFybSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsCi0gICAgIHsxLCAxLCA2fX0sCi0gICAge0lEYWxhcm1SaXNpbmdUaHJlc2hvbGQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLAotICAgICB7MSwgMSwgN319LAotICAgIHtJRGFsYXJtRmFsbGluZ1RocmVzaG9sZCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2FsYXJtRW50cnksIDMsCi0gICAgIHsxLCAxLCA4fX0sCi0gICAge0lEYWxhcm1SaXNpbmdFdmVudEluZGV4LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywKLSAgICAgezEsIDEsIDl9fSwKLSAgICB7SURhbGFybUZhbGxpbmdFdmVudEluZGV4LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywKLSAgICAgezEsIDEsIDEwfX0sCi0gICAge0lEYWxhcm1Pd25lciwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDExfX0sCi0gICAge0lEYWxhcm1TdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgMTJ9fQorICAgIHtJRGFsYXJtSW5kZXgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAge0lEYWxhcm1JbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAyfX0sCisgICAge0lEYWxhcm1WYXJpYWJsZSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDN9fSwKKyAgICB7SURhbGFybVNhbXBsZVR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgNH19LAorICAgIHtJRGFsYXJtVmFsdWUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA1fX0sCisgICAge0lEYWxhcm1TdGFydHVwQWxhcm0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgNn19LAorICAgIHtJRGFsYXJtUmlzaW5nVGhyZXNob2xkLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDd9fSwKKyAgICB7SURhbGFybUZhbGxpbmdUaHJlc2hvbGQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hbGFybUVudHJ5LCAzLCB7MSwgMSwgOH19LAorICAgIHtJRGFsYXJtUmlzaW5nRXZlbnRJbmRleCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCA5fX0sCisgICAge0lEYWxhcm1GYWxsaW5nRXZlbnRJbmRleCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxMH19LAorICAgIHtJRGFsYXJtT3duZXIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2FsYXJtRW50cnksIDMsIHsxLCAxLCAxMX19LAorICAgIHtJRGFsYXJtU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYWxhcm1FbnRyeSwgMywgezEsIDEsIDEyfX0KIH07CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm0uaAppbmRleCBhZTQ4YzJkLi4wNWYyMTUyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9hbGFybS5oCkBAIC0yMSw4ICsyMSw2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9BTEFSTV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9BTEFSTV9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCi0KICAgICAvKgogICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMgCiAgICAgICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxODE2MjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuYwpAQCAtMCwwICsxLDg0MiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKK3wgRWRpdGlvbiBIaXN0b3J5OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICMgICBEYXRlICAgICBDb21tZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCeSAgfAorfCAtLS0gLS0tLS0tLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0tIHwKK3wgICAxIDA3LzA1LzE4IENyZWF0ZWQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVtaSB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy50YWJsZV9kYXRhLmNvbmYsdiAxLjExLjIuMSAyMDA2LzAxLzExIDE1OjE3OjQ3IGR0czEyIEV4cCAkCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKKyNpbmNsdWRlICJhbGFybVRhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHF1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKiogSW5pdGlhbGl6ZXMgdGhlIGFsYXJtVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X2FsYXJtVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nIAorICAgICAqLworICAgIGluaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSgpOworfQorCisvKiogSW5pdGlhbGl6ZSB0aGUgYWxhcm1UYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgICAgICBhbGFybVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxNiwgMywgMSB9OworICAgIHNpemVfdCAgICAgICAgICBhbGFybVRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKGFsYXJtVGFibGVfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWc7CisgICAgbmV0c25tcF90ZGF0YSAgKnRhYmxlX2RhdGE7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImluaXRpYWxpemVfdGFibGVfYWxhcm1UYWJsZSBjYWxsZWQuXG4iKSk7CisgICAgcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImFsYXJtVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisKKyAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUoImFsYXJtVGFibGUiLCAwKTsKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgICAvKiBpbmRleDogYWxhcm1JbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9BTEFSTUlOREVYOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fQUxBUk1TVEFUVVM7CisKKyAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlIAorICAgICAqLworfQorCitleHRlcm4gaW50CitldmVudF9hcGlfc2VuZF9hbGFybSh1X2NoYXIgaXNfcmlzaW5nLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGFsYXJtX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV2ZW50X2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgb2lkICogYWxhcm1lZF92YXIsCisgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYWxhcm1lZF92YXJfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHNhbXBsZV90eXBlLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHRoZV90aHJlc2hvbGQsIGNvbnN0IGNoYXIgKmFsYXJtX2Rlc2NyKTsKKworI2RlZmluZSBBTEFSTV9TVFIxX0xFTgkzMgordHlwZWRlZiBlbnVtIHsKKyAgICBSTU9OMV9FTlRSWV9WQUxJRCA9IDEsCisgICAgUk1PTjFfRU5UUllfQ1JFQVRFX1JFUVVFU1QsCisgICAgUk1PTjFfRU5UUllfVU5ERVJfQ1JFQVRJT04sCisgICAgUk1PTjFfRU5UUllfSU5WQUxJRAorfSBSTU9OMV9FTlRSWV9TVEFUVVNfVDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBTQU1QTEVfVFlQRV9BQlNPTFVURSA9CisgICAgMSwKKyAgICBTQU1QTEVfVFlQRV9ERUxURQorfSBTQU1QTEVfVFlQRV9UOworCit0eXBlZGVmIGVudW0geworICAgIEFMQVJNX05PVEhJTkcgPQorICAgIDAsCisgICAgQUxBUk1fUklTSU5HLAorICAgIEFMQVJNX0ZBTExJTkcsCisgICAgQUxBUk1fQk9USAorfSBBTEFSTV9UWVBFX1Q7CisgICAgLyoKKyAgICAgKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAKKyAgICAgKi8KK3N0cnVjdCBhbGFybVRhYmxlX2VudHJ5IHsKKyAgICAvKgorICAgICAqIEluZGV4IHZhbHVlcyAKKyAgICAgKi8KKyAgICBsb25nICAgICAgICAgICAgYWxhcm1JbmRleDsKKworICAgIC8qCisgICAgICogQ29sdW1uIHZhbHVlcyAKKyAgICAgKi8KKyAgICBsb25nICAgICAgICAgICAgYWxhcm1JbnRlcnZhbDsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtSW50ZXJ2YWw7CisgICAgb2lkICAgICAgICAgICAgIGFsYXJtVmFyaWFibGVbQUxBUk1fU1RSMV9MRU5dOworICAgIHNpemVfdCAgICAgICAgICBhbGFybVZhcmlhYmxlX2xlbjsKKyAgICBvaWQgICAgICAgICAgICAgb2xkX2FsYXJtVmFyaWFibGVbQUxBUk1fU1RSMV9MRU5dOworICAgIHNpemVfdCAgICAgICAgICBvbGRfYWxhcm1WYXJpYWJsZV9sZW47CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtU2FtcGxlVHlwZTsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtU2FtcGxlVHlwZTsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1WYWx1ZTsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1TdGFydHVwQWxhcm07CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVN0YXJ0dXBBbGFybTsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1SaXNpbmdUaHJlc2hvbGQ7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVJpc2luZ1RocmVzaG9sZDsKKyAgICBsb25nICAgICAgICAgICAgYWxhcm1GYWxsaW5nVGhyZXNob2xkOworICAgIGxvbmcgICAgICAgICAgICBvbGRfYWxhcm1GYWxsaW5nVGhyZXNob2xkOworICAgIGxvbmcgICAgICAgICAgICBhbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgbG9uZyAgICAgICAgICAgIGFsYXJtRmFsbGluZ0V2ZW50SW5kZXg7CisgICAgbG9uZyAgICAgICAgICAgIG9sZF9hbGFybUZhbGxpbmdFdmVudEluZGV4OworICAgIGNoYXIgICAgICAgICAgICBhbGFybU93bmVyW0FMQVJNX1NUUjFfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgYWxhcm1Pd25lcl9sZW47CisgICAgY2hhciAgICAgICAgICAgIG9sZF9hbGFybU93bmVyW0FMQVJNX1NUUjFfTEVOXTsKKyAgICBzaXplX3QgICAgICAgICAgb2xkX2FsYXJtT3duZXJfbGVuOworICAgIGxvbmcgICAgICAgICAgICBhbGFybVN0YXR1czsKKyAgICBsb25nICAgICAgICAgICAgb2xkX2FsYXJtU3RhdHVzOworCisgICAgaW50ICAgICAgICAgICAgIHZhbGlkOworICAgIHVuc2lnbmVkIGludCAgICBhbGFybV9yZWc7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOworICAgIHVfbG9uZyAgICAgICAgICBsYXN0X2Fic192YWx1ZTsKKyAgICBBTEFSTV9UWVBFX1QgICAgcHJldl9hbGFybTsgICAgICAgIC8qIE5PVEhJTkcgfCBSSVNJTkcgfCBGQUxMSU5HICovCit9OworCisKK3ZvaWQKK2FsYXJtVGFibGVfcnVuKCB1bnNpZ25lZCBpbnQgcmVnLCB2b2lkICpjbGllbnRhcmcpCit7CisgICAgc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKmVudHJ5ID0gKHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICopY2xpZW50YXJnOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOworICAgIHVfbG9uZyBuZXdfdmFsdWU7CisgICAgaW50IHJjOworCisgICAgaWYgKCFlbnRyeSkgeworICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoIHJlZyApOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qCisgICAgICogUmV0cmlldmUgdGhlIHJlcXVlc3RlZCBNSUIgdmFsdWUocykuLi4KKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX3J1biBjYWxsZWRcbiIpKTsKKyAgICB2YXIgPSAobmV0c25tcF92YXJpYWJsZV9saXN0ICopU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF92YXJpYWJsZV9saXN0ICk7CisgICAgaWYgKCF2YXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZmFpbGVkIHRvIGNyZWF0ZSBhbGFybVRhYmxlIHF1ZXJ5IHZhcmJpbmQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzbm1wX3NldF92YXJfb2JqaWQoIHZhciwgZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiApOworICAgIAorICAgIHJjID0gbmV0c25tcF9xdWVyeV9nZXQoICB2YXIsIGVudHJ5LT5zZXNzaW9uICk7CisgICAgaWYgKCByYyAhPSBTTk1QX0VSUl9OT0VSUk9SICkgeworICAgICAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVZhcmlhYmxlIHF1ZXJ5IGZhaWxlZCAoJWQpXG4iLCByYykpOworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisJc3dpdGNoICh2YXItPnR5cGUpIHsKKyAgICBjYXNlIEFTTl9JTlRFR0VSOgorICAgIGNhc2UgQVNOX0NPVU5URVI6CisgICAgY2FzZSBBU05fVElNRVRJQ0tTOgorICAgIGNhc2UgQVNOX0dBVUdFOgorICAgIGNhc2UgQVNOX0NPVU5URVI2NDoKKyAgICAgICAgbmV3X3ZhbHVlID0gKnZhci0+dmFsLmludGVnZXI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAiaW52YWxpZCB0eXBlICglZClcbiIsIHZhci0+dHlwZSkpOworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworICAgICAgICByZXR1cm4gOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1JbmRleC4lbGQgbGFzdCB2YWx1ZSAoJWxkKVxuIiwgZW50cnktPmFsYXJtSW5kZXgsIGVudHJ5LT5sYXN0X2Fic192YWx1ZSkpOworICAgIERFQlVHTVNHVEwoKCJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1JbmRleC4lbGQgbmV3X3ZhbHVlICglbGQpXG4iLCBlbnRyeS0+YWxhcm1JbmRleCwgbmV3X3ZhbHVlKSk7CisKKyAgICBlbnRyeS0+YWxhcm1WYWx1ZSA9IChTQU1QTEVfVFlQRV9BQlNPTFVURSA9PSBlbnRyeS0+YWxhcm1TYW1wbGVUeXBlKSA/CisgICAgICAgIG5ld192YWx1ZSA6IG5ld192YWx1ZSAtIGVudHJ5LT5sYXN0X2Fic192YWx1ZTsKKyAgICBlbnRyeS0+bGFzdF9hYnNfdmFsdWUgPSBuZXdfdmFsdWU7CisKKyAgICBpZiAoQUxBUk1fUklTSU5HICE9IGVudHJ5LT5wcmV2X2FsYXJtICYmCisgICAgICAgIGVudHJ5LT5hbGFybVZhbHVlID49IGVudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZCkgeworICAgICAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiA9PSBldmVudF9hcGlfc2VuZF9hbGFybSgxLCBlbnRyeS0+YWxhcm1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1SaXNpbmdFdmVudEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1TYW1wbGVUeXBlLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlJpc2luZyIpKQorICAgICAgICAgICAgZW50cnktPnByZXZfYWxhcm0gPSBBTEFSTV9SSVNJTkc7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJmYWlsZWQgdG8gc2VuZCByaXNpbmcgYWxhcm1cbiIpOworICAgIH0KKyAgICBlbHNlIGlmIChBTEFSTV9GQUxMSU5HICE9IGVudHJ5LT5wcmV2X2FsYXJtICYmCisgICAgICAgICAgICAgZW50cnktPmFsYXJtVmFsdWUgPD0gZW50cnktPmFsYXJtRmFsbGluZ1RocmVzaG9sZCkgeworICAgICAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiA9PSBldmVudF9hcGlfc2VuZF9hbGFybSgwLCBlbnRyeS0+YWxhcm1JbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YWxhcm1WYXJpYWJsZV9sZW4sIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtU2FtcGxlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hbGFybVZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtRmFsbGluZ1RocmVzaG9sZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWxsaW5nIikpCisgICAgICAgICAgICBlbnRyeS0+cHJldl9hbGFybSA9IEFMQVJNX0ZBTExJTkc7CisgICAgICAgIGVsc2UgCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJmYWlsZWQgdG8gc2VuZCBmYWxsaW5nIGFsYXJtXG4iKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBERUJVR01TR1RMKCgicm1vbjphbGFybVRhYmxlIiwgIm5vIGFsYXJtIHNlbnRcbiIpKTsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcik7Cit9CisKK3ZvaWQKK2FsYXJtVGFibGVfZW5hYmxlKCBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnkgKQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfZW5hYmxlIGNhbGxlZC5cbiIpKTsKKyAgICBpZiAoZW50cnktPmFsYXJtX3JlZykgeworICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoIGVudHJ5LT5hbGFybV9yZWcgKTsKKyAgICAgICAgZW50cnktPmFsYXJtX3JlZyA9IDA7CisgICAgfQorCisgICAgaWYgKGVudHJ5LT5hbGFybUludGVydmFsKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHJlZ2lzdGVyIG9uY2UgdG8gcnVuIEFTQVAsIGFuZCBhbm90aGVyIHRvIHJ1bgorICAgICAgICAgKiBhdCB0aGUgdHJpZ2dlciBmcmVxdWVuY3kKKyAgICAgICAgICovCisgICAgICAgIHNubXBfYWxhcm1fcmVnaXN0ZXIoMCwgMCwgYWxhcm1UYWJsZV9ydW4sIGVudHJ5ICk7CisgICAgICAgIGVudHJ5LT5hbGFybV9yZWcgPSBzbm1wX2FsYXJtX3JlZ2lzdGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmFsYXJtSW50ZXJ2YWwsIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcnVuLCBlbnRyeSApOworICAgIH0KK30KKwordm9pZAorYWxhcm1UYWJsZV9kaXNhYmxlKCBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnkgKQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfZGlzYWJsZSBjYWxsZWQuXG4iKSk7CisgICAgaWYgKGVudHJ5LT5hbGFybV9yZWcpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKCBlbnRyeS0+YWxhcm1fcmVnICk7CisgICAgICAgIGVudHJ5LT5hbGFybV9yZWcgPSAwOworICAgICAgICAvKiBYWFggLSBwZXJoYXBzIHJlbGVhc2UgYW55IHByZXZpb3VzIHJlc3VsdHMgKi8KKyAgICB9Cit9CisKKy8qCisgKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAKKyAqLworbmV0c25tcF90ZGF0YV9yb3cgKgorYWxhcm1UYWJsZV9jcmVhdGVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwgbG9uZyBhbGFybUluZGV4KQoreworICAgIHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICplbnRyeTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworCisgICAgREVCVUdNU0dUTCgoICJybW9uOmFsYXJtVGFibGUiLCAiYWxhcm1UYWJsZV9jcmVhdGVFbnRyeSBjYWxsZWQuXG4iKSk7CisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3JvdygpOworICAgIGlmICghcm93KSB7CisgICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByb3ctPmRhdGEgPSBlbnRyeTsKKyAgICBlbnRyeS0+YWxhcm1JbmRleCA9IGFsYXJtSW5kZXg7CisgICAgZW50cnktPmFsYXJtSW50ZXJ2YWwgPSAxOworICAgIGVudHJ5LT5hbGFybVNhbXBsZVR5cGUgPSBTQU1QTEVfVFlQRV9BQlNPTFVURTsKKyAgICBlbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0gPSBBTEFSTV9CT1RIOworICAgIGVudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZCA9IDEwOworICAgIGVudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQgPSA1OworICAgIGVudHJ5LT5hbGFybVJpc2luZ0V2ZW50SW5kZXggPSBhbGFybUluZGV4OworICAgIGVudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4ID0gYWxhcm1JbmRleDsKKyAgICBlbnRyeS0+cHJldl9hbGFybSA9IEFMQVJNX05PVEhJTkc7CisgICAgbmV0c25tcF90ZGF0YV9yb3dfYWRkX2luZGV4KHJvdywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoZW50cnktPmFsYXJtSW5kZXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmFsYXJtSW5kZXgpKTsKKyAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGVfZGF0YSwgcm93KTsKKyAgICByZXR1cm4gcm93OworfQorCisvKgorICogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlIAorICovCit2b2lkCithbGFybVRhYmxlX3JlbW92ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZV9kYXRhLCBuZXRzbm1wX3RkYXRhX3JvdyAqIHJvdykKK3sKKyAgICBzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBERUJVR01TR1RMKCggInJtb246YWxhcm1UYWJsZSIsICJhbGFybVRhYmxlX3JlbW92ZUVudHJ5IGNhbGxlZC5cbiIpKTsKKyAgICBpZiAoIXJvdykKKyAgICAgICAgcmV0dXJuOyAgICAgICAgICAgICAgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKyAgICBlbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZV9kYXRhLCByb3cpOworICAgIGlmIChlbnRyeSkgeworICAgICAgICBhbGFybVRhYmxlX2Rpc2FibGUoZW50cnkpOworICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOyAgICAgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KKyAgICB9Cit9CisKKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBhbGFybVRhYmxlIHRhYmxlICovCitpbnQKK2FsYXJtVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfdGRhdGEgICp0YWJsZV9kYXRhOworICAgIG5ldHNubXBfdGRhdGFfcm93ICp0YWJsZV9yb3c7CisgICAgc3RydWN0IGFsYXJtVGFibGVfZW50cnkgKnRhYmxlX2VudHJ5OworICAgIGludCAgICAgICAgICAgICByZXQ7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAqc2VjTmFtZTsKKworICAgIERFQlVHTVNHVEwoKCAicm1vbjphbGFybVRhYmxlIiwgImFsYXJtVGFibGVfaGFuZGxlciBjYWxsZWQuXG4iKSk7CisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1JbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWwpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtVmFyaWFibGVfbGVuICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBTFVFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtVmFsdWUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1SaXNpbmdUaHJlc2hvbGQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1GQUxMSU5HVEhSRVNIT0xEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtRmFsbGluZ1RocmVzaG9sZCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1SaXNpbmdFdmVudEluZGV4KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxhcm1GYWxsaW5nRXZlbnRJbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1Pd25lcl9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9pbnQocmVxdWVzdC0+cmVxdWVzdHZiKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBvciBwb3NzaWJseSAnbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UnIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgcmV0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlJyAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUpOworICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBUklBQkxFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0KKyAgICAgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfY3JlYXRlRW50cnkodGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcik7CisgICAgICAgICAgICAgICAgICAgIGlmICh0YWJsZV9yb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaW5zZXJ0X3RkYXRhX3JvdyhyZXF1ZXN0LCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCBhbGFybVRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUlOVEVSVkFMOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1WQVJJQUJMRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBVFVTOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUludGVydmFsID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWw7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWwgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtVmFyaWFibGVfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuIC8gc2l6ZW9mKG9pZCk7CisgICAgICAgICAgICAgICAgbWVtc2V0KHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtVmFyaWFibGUpKTsKKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPmFsYXJtVmFyaWFibGUsCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1TYW1wbGVUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TYW1wbGVUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTToKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU3RhcnR1cEFsYXJtID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU3RhcnR1cEFsYXJtOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVN0YXJ0dXBBbGFybSA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVJpc2luZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZDsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQ7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtRmFsbGluZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1SaXNpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtUmlzaW5nRXZlbnRJbmRleDsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1SaXNpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4OworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdFdmVudEluZGV4ID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXIsCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtT3duZXIpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXJfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuOworICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+YWxhcm1Pd25lciwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybU93bmVyKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT5hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbik7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuID0gcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXR1cyA9IHRhYmxlX2VudHJ5LT5hbGFybVN0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1JTlRFUlZBTDoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtSW50ZXJ2YWwgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUludGVydmFsOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtSW50ZXJ2YWwgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNVkFSSUFCTEU6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1WYXJpYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+YWxhcm1WYXJpYWJsZSkpOworICAgICAgICAgICAgICAgICAgICBtZW1zZXQodGFibGVfZW50cnktPm9sZF9hbGFybVZhcmlhYmxlLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVZhcmlhYmxlX2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtVmFyaWFibGVfbGVuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU0FNUExFVFlQRToKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtU2FtcGxlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU2FtcGxlVHlwZTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVNhbXBsZVR5cGUgPSAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNU1RBUlRVUEFMQVJNOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1TdGFydHVwQWxhcm0gPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXJ0dXBBbGFybTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVN0YXJ0dXBBbGFybSA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ1RocmVzaG9sZCA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtUmlzaW5nVGhyZXNob2xkOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtUmlzaW5nVGhyZXNob2xkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdUSFJFU0hPTEQ6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybUZhbGxpbmdUaHJlc2hvbGQgPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybUZhbGxpbmdUaHJlc2hvbGQ7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nVGhyZXNob2xkID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR0VWRU5USU5ERVg6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVJpc2luZ0V2ZW50SW5kZXggPQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybVJpc2luZ0V2ZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1SaXNpbmdFdmVudEluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+YWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtRmFsbGluZ0V2ZW50SW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1GYWxsaW5nRXZlbnRJbmRleCA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1PV05FUjoKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT5hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF9hbGFybU93bmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5hbGFybU93bmVyKSk7CisgICAgICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+b2xkX2FsYXJtT3duZXIsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPmFsYXJtT3duZXIpKTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmFsYXJtT3duZXJfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfYWxhcm1Pd25lcl9sZW47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5hbGFybVN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU3RhdHVzOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2FsYXJtU3RhdHVzID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgYWxhcm1UYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNSU5URVJWQUw6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVZBUklBQkxFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFOgorICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFSVFVQQUxBUk06CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTVJJU0lOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNUklTSU5HRVZFTlRJTkRFWDoKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0FMQVJNRkFMTElOR0VWRU5USU5ERVg6CisgICAgICAgICAgICBjYXNlIENPTFVNTl9BTEFSTU9XTkVSOgorICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeSAmJiAhdGFibGVfZW50cnktPnZhbGlkKSB7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT52YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fQUxBUk1TVEFUVVM6CisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUk1PTjFfRU5UUllfVkFMSUQ6CisgICAgICAgICAgICAgICAgICAgIGFsYXJtVGFibGVfZW5hYmxlKCB0YWJsZV9lbnRyeSApOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFJNT04xX0VOVFJZX1VOREVSX0NSRUFUSU9OOgorICAgICAgICAgICAgICAgICAgICBhbGFybVRhYmxlX2Rpc2FibGUoIHRhYmxlX2VudHJ5ICk7CisjaWYgMAorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c2Vzc2lvbiA9IChuZXRzbm1wX3Nlc3Npb24gKikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXF1ZXJ5X3BkdV9zZXNzaW9uKHJlcWluZm8tPmFzcC0+cGR1KTsKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgIHNlY05hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ05BTUUpOworICAgICAgICAgICAgICAgICAgICBpZiAoc2VjTmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgc2VzcyAgID0gbmV0c25tcF9pcXVlcnlfdXNlcl9zZXNzaW9uKHNlY05hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKHNlc3MpOworICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJtb246YWxhcm1UYWJsZSIsICJ1c2VyIG5hbWUgJXNcbiIsIHNlY05hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgCisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidXNlciBuYW1lICVzIG5vdCBmb3VuZFxuIiwgc2VjTmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIHVzZXIgbmFtZVxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzID0gbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIllvdSBtdXN0IHNwZWNpZnkgYSBkZWZhdWx0IHVzZXIgbmFtZSB1c2luZyB0aGUgYWdlbnRTZWNOYW1lIHRva2VuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgUk1PTjFfRU5UUllfSU5WQUxJRDoKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICAgICAgYWxhcm1UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vYWxhcm1UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMDcwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2FsYXJtVGFibGUuaApAQCAtMCwwICsxLDQxIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworfCBFZGl0aW9uIEhpc3Rvcnk6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKK3wgIyAgIERhdGUgICAgIENvbW1lbnRzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5ICB8Cit8IC0tLSAtLS0tLS0tLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLS0gfAorfCAgIDEgMDcvMDUvMTggQ3JlYXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1pIHwKKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLnRhYmxlX2RhdGEuY29uZix2IDEuMTEuMi4xIDIwMDYvMDEvMTEgMTU6MTc6NDcgZHRzMTIgRXhwICQKKyAqLworI2lmbmRlZiBBTEFSTVRBQkxFX0gKKyNkZWZpbmUgQUxBUk1UQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKHV0aWxpdGllcy9pcXVlcnkpCitjb25maWdfcmVxdWlyZShSbW9uL2FndXRpbCkKK2NvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKK2NvbmZpZ19yZXF1aXJlKFJtb24vZXZlbnQpCisKKy8qCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCisgKi8KK3ZvaWQgICAgICAgICAgICBpbml0X2FsYXJtVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9hbGFybVRhYmxlKHZvaWQpOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgYWxhcm1UYWJsZV9oYW5kbGVyOworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgYWxhcm1UYWJsZSAKKyAqLworI2RlZmluZSBDT0xVTU5fQUxBUk1JTkRFWAkJMQorI2RlZmluZSBDT0xVTU5fQUxBUk1JTlRFUlZBTAkJMgorI2RlZmluZSBDT0xVTU5fQUxBUk1WQVJJQUJMRQkJMworI2RlZmluZSBDT0xVTU5fQUxBUk1TQU1QTEVUWVBFCQk0CisjZGVmaW5lIENPTFVNTl9BTEFSTVZBTFVFCQk1CisjZGVmaW5lIENPTFVNTl9BTEFSTVNUQVJUVVBBTEFSTQkJNgorI2RlZmluZSBDT0xVTU5fQUxBUk1SSVNJTkdUSFJFU0hPTEQJCTcKKyNkZWZpbmUgQ09MVU1OX0FMQVJNRkFMTElOR1RIUkVTSE9MRAkJOAorI2RlZmluZSBDT0xVTU5fQUxBUk1SSVNJTkdFVkVOVElOREVYCQk5CisjZGVmaW5lIENPTFVNTl9BTEFSTUZBTExJTkdFVkVOVElOREVYCQkxMAorI2RlZmluZSBDT0xVTU5fQUxBUk1PV05FUgkJMTEKKyNkZWZpbmUgQ09MVU1OX0FMQVJNU1RBVFVTCQkxMgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBBTEFSTVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuYwppbmRleCBjYWIxZDhiLi5iYjg3YmZlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5jCkBAIC0xOSwxNiArMTksMTMgQEAKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00NSw4ICs0Miw2IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotCiAjaW5jbHVkZSAiZXZlbnQuaCIKIAogLyoKQEAgLTU1LDYgKzUwLDggQEAKICNpbmNsdWRlICJhZ3V0aWxfYXBpLmgiCiAjaW5jbHVkZSAicm93X2FwaS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X29iamlkKQorCiAvKgogICogRmlsZSBzY29wZSBkZWZpbml0aW9ucyBzZWN0aW9uIAogICovCkBAIC03NzIsMjMgKzc2OSwzNCBAQAogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgICAgICAgICAgIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7RVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7RVZFTlRERVNDUklQVElPTiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7RVZFTlRUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7RVZFTlRDT01NVU5JVFksIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0VWRU5UTEFTVFRJTUVTRU5ULCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V2ZW50VGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0VWRU5UU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDd9fQorICAgIHtFVkVOVElOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgMX19LAorICAgIHtFVkVOVERFU0NSSVBUSU9OLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFVkVOVFRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtFVkVOVENPTU1VTklUWSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7RVZFTlRMQVNUVElNRVNFTlQsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7RVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXZlbnRUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7RVZFTlRTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ldmVudFRhYmxlLCAyLCB7MSwgN319CiB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIGxvZ1RhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgICAgICAgICAgIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7TE9HRVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nVGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0xPR0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7TE9HVElNRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9sb2dUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7TE9HREVTQ1JJUFRJT04sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9nVGFibGUsIDIsIHsxLCA0fX0KKyAgICB7TE9HRVZFTlRJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9nVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0xPR0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb2dUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7TE9HVElNRSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb2dUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7TE9HREVTQ1JJUFRJT04sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9nVGFibGUsIDIsIHsxLCA0fX0KIAogfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9ldmVudC5oCmluZGV4IGRmY2FjZTcuLmIwM2UxNjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vZXZlbnQuaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2V2ZW50LmgKQEAgLTIxLDE0ICsyMSwxMyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfRVZFTlRfSAogI2RlZmluZSBfTUlCR1JPVVBfRVZFTlRfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotCi1jb25maWdfcmVxdWlyZShSbW9uL2FndXRpbCkKLWNvbmZpZ19yZXF1aXJlKFJtb24vcm93cykKLQogICAgIC8qCiAgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcyAKICAgICAgKi8KICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfZXZlbnQodm9pZCk7CiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCisKK2NvbmZpZ19yZXF1aXJlKFJtb24vYWd1dGlsKQorY29uZmlnX3JlcXVpcmUoUm1vbi9yb3dzKQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfRVZFTlRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9oaXN0b3J5LmMgYi9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYwppbmRleCA5YzY4NTZmLi5jOGU5YzI1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYworKysgYi9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuYwpAQCAtMjQsMTEgKzI0LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDQsOCArNDAsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImhpc3RvcnkuaCIKIAogLyoKQEAgLTY1NiwxOCArNjUwLDIwIEBACiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCAgICAgICAgICAgTCwgb2lkc3VmZml4IAogICAgICAqLwotICAgIHtDVFJMX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLCB7MSwgMX19LAotICAgIHtDVFJMX0RBVEFTT1VSQ0UsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsCi0gICAgIHsxLCAyfX0sCi0gICAge0NUUkxfQlVDS0VUU1JFUVVFU1RFRCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsCi0gICAgIDIsIHsxLCAzfX0sCi0gICAge0NUUkxfQlVDS0VUU0dSQU5URUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsCi0gICAgIHsxLCA0fX0sCi0gICAge0NUUkxfSU5URVJWQUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLAotICAgICB7MSwgNX19LAotICAgIHtDVFJMX09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9oaXN0b3J5Q29udHJvbFRhYmxlLCAyLAotICAgICB7MSwgNn19LAotICAgIHtDVFJMX1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NUUkxfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0NUUkxfREFUQVNPVVJDRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7Q1RSTF9CVUNLRVRTUkVRVUVTVEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7Q1RSTF9CVUNLRVRTR1JBTlRFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q1RSTF9JTlRFUlZBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NUUkxfT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2hpc3RvcnlDb250cm9sVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NUUkxfU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaGlzdG9yeUNvbnRyb2xUYWJsZSwgMiwgezEsIDd9fSwKIAogfTsKIApAQCAtNjc4LDMyICs2NzQsMzYgQEAKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCAgICAgICAgTCwgb2lkc3VmZml4IAogICAgICAqLwotICAgIHtEQVRBX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7REFUQV9TQU1QTEVJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAyfX0sCi0gICAge0RBVEFfSU5URVJWQUxTVEFSVCwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDN9fSwKLSAgICB7REFUQV9EUk9QRVZFTlRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDR9fSwKLSAgICB7REFUQV9PQ1RFVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtEQVRBX1BLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNn19LAotICAgIHtEQVRBX0JST0FEQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgN319LAotICAgIHtEQVRBX01VTFRJQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgOH19LAotICAgIHtEQVRBX0NSQ0FMSUdORVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDl9fSwKLSAgICB7REFUQV9VTkRFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDEwfX0sCi0gICAge0RBVEFfT1ZFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDExfX0sCi0gICAge0RBVEFfRlJBR01FTlRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwKLSAgICAgezEsIDEyfX0sCi0gICAge0RBVEFfSkFCQkVSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxM319LAotICAgIHtEQVRBX0NPTExJU0lPTlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLAotICAgICB7MSwgMTR9fSwKLSAgICB7REFUQV9VVElMSVpBVElPTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsCi0gICAgIHsxLCAxNX19LAorICAgIHtEQVRBX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDF9fSwKKyAgICB7REFUQV9TQU1QTEVJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAyfX0sCisgICAge0RBVEFfSU5URVJWQUxTVEFSVCwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7REFUQV9EUk9QRVZFTlRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7REFUQV9PQ1RFVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtEQVRBX1BLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtEQVRBX0JST0FEQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgN319LAorICAgIHtEQVRBX01VTFRJQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgOH19LAorICAgIHtEQVRBX0NSQ0FMSUdORVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDl9fSwKKyAgICB7REFUQV9VTkRFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDEwfX0sCisgICAge0RBVEFfT1ZFUlNJWkVQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDExfX0sCisgICAge0RBVEFfRlJBR01FTlRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlckhpc3RvcnlUYWJsZSwgMiwgezEsIDEyfX0sCisgICAge0RBVEFfSkFCQkVSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxM319LAorICAgIHtEQVRBX0NPTExJU0lPTlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVySGlzdG9yeVRhYmxlLCAyLCB7MSwgMTR9fSwKKyAgICB7REFUQV9VVElMSVpBVElPTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJIaXN0b3J5VGFibGUsIDIsIHsxLCAxNX19LAogCiB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL2hpc3RvcnkuaCBiL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oCmluZGV4IDA5NGJlZTQuLmQyYzQwMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vaGlzdG9yeS5oCkBAIC0yMSw4ICsyMSw2IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9ISVNUT1JZX0gKICNkZWZpbmUgX01JQkdST1VQX0hJU1RPUllfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQotCiAgICAgLyoKICAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzIAogICAgICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dfYXBpLmggYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaAppbmRleCAyZDNjODMyLi45ZjU3NmJlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaAorKysgYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd19hcGkuaApAQCAtNzksNyArNzksNyBAQAogICogQXBpIHByb3RvdHlwZXMgCiAgKi8KIHZvaWQgICAgICAgICAgICBST1dBUElfaW5pdF90YWJsZShUQUJMRV9ERUZJTlRJT05fVCAqIHRhYmxlX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIG1heF9udW1iZXJfb2ZfZW50cmllcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRSWV9DQUxMQkFDS19UICogQ2xia0NyZWF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFTlRSWV9DQUxMQkFDS19UICogQ2xia0Nsb25lLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9yb3dzLmMgYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYwppbmRleCBkOGMzY2MxLi5hYzI2ZTMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYworKysgYi9hZ2VudC9taWJncm91cC9SbW9uL3Jvd3MuYwpAQCAtMjYsOCArMjYsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2luY2x1ZGUgImFndXRpbF9hcGkuaCIKICNpbmNsdWRlICJyb3dzLmgiCiAjaW5jbHVkZSAicm93X2FwaS5oIgpAQCAtMjU3LDcgKzI1NSw3IEBACiAKIHZvaWQKIFJPV0FQSV9pbml0X3RhYmxlKFRBQkxFX0RFRklOVElPTl9UICogdGFibGVfcHRyLAotICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUsCiAgICAgICAgICAgICAgICAgICB1X2xvbmcgbWF4X251bWJlcl9vZl9lbnRyaWVzLAogICAgICAgICAgICAgICAgICAgRU5UUllfQ0FMTEJBQ0tfVCAqIENsYmtDcmVhdGUsCiAgICAgICAgICAgICAgICAgICBFTlRSWV9DQUxMQkFDS19UICogQ2xia0Nsb25lLApAQCAtMjY5LDcgKzI2Nyw3IEBACiB7CiAgICAgdGFibGVfcHRyLT5uYW1lID0gbmFtZTsKICAgICBpZiAoIXRhYmxlX3B0ci0+bmFtZSkKLSAgICAgICAgdGFibGVfcHRyLT5uYW1lID0gIlVua25vd24iOworICAgICAgICB0YWJsZV9wdHItPm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKiwiVW5rbm93biIpOwogCiAgICAgdGFibGVfcHRyLT5tYXhfbnVtYmVyX29mX2VudHJpZXMgPSBtYXhfbnVtYmVyX29mX2VudHJpZXM7CiAgICAgdGFibGVfcHRyLT5DbGJrQ3JlYXRlID0gQ2xia0NyZWF0ZTsKQEAgLTc1Niw3ICs3NTQsNyBAQAogICAgICAgICBzY3Jsci0+Zmlyc3RfZGF0YV9wdHIgPSBicHRyLT5uZXh0OwogICAgICAgICBzY3Jsci0+bGFzdF9kYXRhX3B0ci0+bmV4dCA9IGJwdHI7CiAgICAgICAgIHNjcmxyLT5sYXN0X2RhdGFfcHRyID0gKE5FWFRFRF9QVFJfVCAqKSBicHRyOwotICAgICAgICBicHRyLT5uZXh0ID0gMDsKKyAgICAgICAgYnB0ci0+bmV4dCA9IE5VTEw7CiAgICAgfSBlbHNlIHsKICAgICAgICAgYnB0ciA9IHNjcmxyLT5jdXJyZW50X2RhdGFfcHRyOwogICAgICAgICBzY3Jsci0+Y3VycmVudF9kYXRhX3B0ciA9IGJwdHItPm5leHQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9SbW9uL3N0YXRpc3RpY3MuYyBiL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jCmluZGV4IGZiNGY1ZjUuLjNlZDRhY2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5jCkBAIC0yNCwxMSArMjQsNyBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00Myw3ICszOSw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInN0YXRpc3RpY3MuaCIKICAgICAgICAgLyoKICAgICAgICAgICogSW1wbGVtZW50YXRpb24gaGVhZGVycyAKQEAgLTQ2OCw1MiArNDYzLDUyIEBACiBvaWQgICAgICAgICAgICAgb2lkc3RhdGlzdGljc1ZhcmlhYmxlc09pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxNiwgMSB9OwogCiBzdHJ1Y3QgdmFyaWFibGU3IG9pZHN0YXRpc3RpY3NWYXJpYWJsZXNbXSA9IHsKLSAgICB7SURldGhlclN0YXRzSW5kZXgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDF9fSwKLSAgICB7SURldGhlclN0YXRzRGF0YVNvdXJjZSwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMn19LAotICAgIHtJRGV0aGVyU3RhdHNEcm9wRXZlbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAzfX0sCi0gICAge0lEZXRoZXJTdGF0c09jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgNH19LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCA1fX0sCi0gICAge0lEZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDZ9fSwKLSAgICB7SURldGhlclN0YXRzTXVsdGljYXN0UGt0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgN319LAotICAgIHtJRGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LAotICAgICAzLCB7MSwgMSwgOH19LAotICAgIHtJRGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCA5fX0sCi0gICAge0lEZXRoZXJTdGF0c092ZXJzaXplUGt0cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLAotICAgICB7MSwgMSwgMTB9fSwKLSAgICB7SURldGhlclN0YXRzRnJhZ21lbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxMX19LAotICAgIHtJRGV0aGVyU3RhdHNKYWJiZXJzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxMn19LAotICAgIHtJRGV0aGVyU3RhdHNDb2xsaXNpb25zLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ldGhlclN0YXRzRW50cnksIDMsCi0gICAgIHsxLCAxLCAxM319LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzNjRPY3RldHMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDE0fX0sCi0gICAge0lEZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksCisgICAge0lEZXRoZXJTdGF0c0luZGV4LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxfX0sCisgICAge0lEZXRoZXJTdGF0c0RhdGFTb3VyY2UsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDJ9fSwKKyAgICB7SURldGhlclN0YXRzRHJvcEV2ZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgM319LAorICAgIHtJRGV0aGVyU3RhdHNPY3RldHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDR9fSwKKyAgICB7SURldGhlclN0YXRzUGt0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgNX19LAorICAgIHtJRGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCA2fX0sCisgICAge0lEZXRoZXJTdGF0c011bHRpY2FzdFBrdHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDd9fSwKKyAgICB7SURldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDh9fSwKKyAgICB7SURldGhlclN0YXRzVW5kZXJzaXplUGt0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgOX19LAorICAgIHtJRGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDEwfX0sCisgICAge0lEZXRoZXJTdGF0c0ZyYWdtZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTF9fSwKKyAgICB7SURldGhlclN0YXRzSmFiYmVycywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTJ9fSwKKyAgICB7SURldGhlclN0YXRzQ29sbGlzaW9ucywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTN9fSwKKyAgICB7SURldGhlclN0YXRzUGt0czY0T2N0ZXRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxNH19LAorICAgIHtJRGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTV9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksCisgICAge0lEZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTZ9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzLCBBU05fQ09VTlRFUiwgUk9OTFksCisgICAge0lEZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTd9fSwKLSAgICB7SURldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCiAgICAgIHZhcl9ldGhlclN0YXRzRW50cnksIDMsIHsxLCAxLCAxOH19LAotICAgIHtJRGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cywgQVNOX0NPVU5URVIsIFJPTkxZLAorICAgIHtJRGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAogICAgICB2YXJfZXRoZXJTdGF0c0VudHJ5LCAzLCB7MSwgMSwgMTl9fSwKLSAgICB7SURldGhlclN0YXRzT3duZXIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDIwfX0sCi0gICAge0lEZXRoZXJTdGF0c1N0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywKLSAgICAgezEsIDEsIDIxfX0sCi0gICAge0lEZXRoZXJTdGF0c0Ryb3BwZWRGcmFtZXMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V0aGVyU3RhdHMyRW50cnksCi0gICAgIDMsIHs0LCAxLCAxfX0sCi0gICAge0lEZXRoZXJTdGF0c0NyZWF0ZVRpbWUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfZXRoZXJTdGF0czJFbnRyeSwgMywKLSAgICAgezQsIDEsIDJ9fSwKKyAgICB7SURldGhlclN0YXRzT3duZXIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDIwfX0sCisgICAge0lEZXRoZXJTdGF0c1N0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V0aGVyU3RhdHNFbnRyeSwgMywgezEsIDEsIDIxfX0sCisgICAge0lEZXRoZXJTdGF0c0Ryb3BwZWRGcmFtZXMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V0aGVyU3RhdHMyRW50cnksIDMsIHs0LCAxLCAxfX0sCisgICAge0lEZXRoZXJTdGF0c0NyZWF0ZVRpbWUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXRoZXJTdGF0czJFbnRyeSwgMywgezQsIDEsIDJ9fSwKIH07CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL1Jtb24vc3RhdGlzdGljcy5oIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKaW5kZXggOGM2ZDkxZC4uOWI2MjJhNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvUm1vbi9zdGF0aXN0aWNzLmgKQEAgLTIxLDcgKzIxLDYgQEAKICNpZm5kZWYgX3N0YXRpc3RpY3NfaF9pbmNsdWRlZF9fCiAjZGVmaW5lIF9zdGF0aXN0aWNzX2hfaW5jbHVkZWRfXwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zdGF0aXN0aWNzKHZvaWQpOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9zdGF0aXN0aWNzX2hfaW5jbHVkZWRfXyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvZXh0ZW5kLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYwppbmRleCAxZjg1ODZhLi40ODM3OWEyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuYwpAQCAtMSw1ICsxLDYgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3dhdGNoZXIuaD4KQEAgLTEwLDExICsxMSwxNyBAQAogI2luY2x1ZGUgInN0cnVjdC5oIgogCiAjaWZuZGVmIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogI2luY2x1ZGUgIm1pYmRlZnMuaCIKICNkZWZpbmUgU0hFTExDT01NQU5EIDMKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShleHRyYWN0X3RhYmxlX3Jvd19kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YV9kZWxldGVfdGFibGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW5zZXJ0X3RhYmxlX3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogb2lkICBuc19leHRlbmRfb2lkW10gICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDMsIDIgfTsKIG9pZCAgZXh0ZW5kX2NvdW50X29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAzLCAyLCAxIH07CiBvaWQgIGV4dGVuZF9jb25maWdfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDMsIDIsIDIgfTsKQEAgLTI3LDcgKzM0LDcgQEAKICAgICBzaXplX3QgICAgICAgICAgICAgIG9pZF9sZW47CiAgICAgbG9uZyAgICAgICAgICAgICAgICBudW1fZW50cmllczsKICAgICBuZXRzbm1wX2V4dGVuZCAgICAgKmVoZWFkOwotICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgICAgKnJlZ1szXTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICAgICpyZWdbNF07CiAgICAgc3RydWN0IGV4dGVuZF9yZWdpc3RyYXRpb25fYmxvY2tfcyAqbmV4dDsKIH0gZXh0ZW5kX3JlZ2lzdHJhdGlvbl9ibG9jazsKIGV4dGVuZF9yZWdpc3RyYXRpb25fYmxvY2sgKmVyZWdfaGVhZCA9IE5VTEw7CkBAIC00NCwxOCArNTEsNDcgQEAKIHVuc2lnbmVkIGludCAgICAgICAgICAgICBtYXhfY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gNTA7CiBuZXRzbm1wX29sZF9leHRlbmQgKmNvbXBhdGFiaWxpdHlfZW50cmllczsKIAorY2hhciAgICAgICAgICAgKmNtZGxpbmVidWY7CitzaXplX3QgICAgICAgICAgY21kbGluZXNpemU7CisKIFdyaXRlTWV0aG9kIGZpeEV4ZWMyRXJyb3I7CiBGaW5kVmFyTWV0aG9kIHZhcl9leHRlbnNpYmxlX29sZDsKIG9pZCAgb2xkX2V4dGVuc2libGVfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCBORVRTTk1QX1NIRUxMTUlCTlVNLCAxIH07CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBvbGRfZXh0ZW5zaWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7TUlCSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7TUlCSU5ERVh9fSwKLSAgICB7RVJST1JOQU1FLCAgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JOQU1FfX0sCi0gICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge1NIRUxMQ09NTUFORH19LAotICAgIHtFUlJPUkZMQUcsICAgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZMQUd9fSwKLSAgICB7RVJST1JNU0csICAgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JNU0d9fSwKLSAgICB7RVJST1JGSVgsICAgICBBU05fSU5URUdFUiwgIFJXUklURSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVh9fSwKLSAgICB7RVJST1JGSVhDTUQsICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JGSVhDTUR9fQorICAgIHtNSUJJTkRFWCwgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtNSUJJTkRFWH19LAorICAgIHtFUlJPUk5BTUUsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICB7U0hFTExDT01NQU5ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7U0hFTExDT01NQU5EfX0sCisgICAge0VSUk9SRkxBRywgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge0VSUk9SRkxBR319LAorICAgIHtFUlJPUk1TRywgICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUk1TR319LAorICAgIHtFUlJPUkZJWCwgICAgIEFTTl9JTlRFR0VSLCAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWH19LAorICAgIHtFUlJPUkZJWENNRCwgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWENNRH19CiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBvbGRfZXh0ZW5zaWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICB7TUlCSU5ERVgsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7TUlCSU5ERVh9fSwKKyAgICB7RVJST1JOQU1FLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JOQU1FfX0sCisgICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHRlbnNpYmxlX29sZCwgMSwge1NIRUxMQ09NTUFORH19LAorICAgIHtFUlJPUkZMQUcsICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICB7RVJST1JNU0csICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfb2xkLCAxLCB7RVJST1JNU0d9fSwKKyAgICB7RVJST1JGSVgsICAgICBBU05fSU5URUdFUiwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWH19LAorICAgIHtFUlJPUkZJWENNRCwgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9vbGQsIDEsIHtFUlJPUkZJWENNRH19Cit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNlbmRpZgogCiAKQEAgLTg3LDcgKzEyMyw4IEBACiAgICAgbmV0c25tcF90YWJsZV9kYXRhICAgICAgICAgICAgICAgICpkaW5mbzsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICAgKnRpbmZvOwogICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgICAgICAqd2luZm87Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWc7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWcgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmM7CiAKICAgICBmb3IgKCBlcHRyPWVyZWdfaGVhZDsgZXB0cjsgZXB0cj1lcHRyLT5uZXh0ICkgewogICAgICAgICBpZiAoIXNubXBfb2lkX2NvbXBhcmUoIGJhc2UsIGxlbiwgZXB0ci0+cm9vdF9vaWQsIGVwdHItPm9pZF9sZW4pKQpAQCAtOTUsNiArMTMyLDggQEAKICAgICB9CiAgICAgaWYgKCFlcHRyKSB7CiAgICAgICAgIGVwdHIgPSBTTk1QX01BTExPQ19UWVBFREVGKCBleHRlbmRfcmVnaXN0cmF0aW9uX2Jsb2NrICk7CisgICAgICAgIGlmICghZXB0cikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBlcHRyLT5yb290X29pZCA9IHNubXBfZHVwbGljYXRlX29iamlkKCBiYXNlLCBsZW4gKTsKICAgICAgICAgZXB0ci0+b2lkX2xlbiAgPSBsZW47CiAgICAgICAgIGVwdHItPm51bV9lbnRyaWVzID0gMDsKQEAgLTExNSwxMCArMTU0LDIwIEBACiAgICAgdGluZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fRVhUQ0ZHX0ZJUlNUX0NPTFVNTjsKICAgICB0aW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9FWFRDRkdfTEFTVF9DT0xVTU47CiAgICAgb2lkX2J1ZltsZW5dID0gMjsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnICAgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICAgICAibnNFeHRlbmRDb25maWdUYWJsZSIsIGhhbmRsZV9uc0V4dGVuZENvbmZpZ1RhYmxlLCAKICAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUldSSVRFKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGEoIHJlZywgZGluZm8sIHRpbmZvICk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnICAgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibnNFeHRlbmRDb25maWdUYWJsZSIsIGhhbmRsZV9uc0V4dGVuZENvbmZpZ1RhYmxlLCAKKyAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSggcmVnLCBkaW5mbywgdGluZm8gKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXItPm5leHQpOwogICAgIGVwdHItPnJlZ1swXSA9IHJlZzsKIAogICAgICAgICAvKgpAQCAtMTM1LDcgKzE4NCwxMCBAQAogICAgIHJlZyAgID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICAgIm5zRXh0ZW5kT3V0MVRhYmxlIiwgaGFuZGxlX25zRXh0ZW5kT3V0cHV0MVRhYmxlLCAKICAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSggcmVnLCBkaW5mbywgdGluZm8gKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSggcmVnLCBkaW5mbywgdGluZm8gKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXItPm5leHQpOwogICAgIGVwdHItPnJlZ1sxXSA9IHJlZzsKIAogICAgICAgICAvKgpAQCAtMTU0LDcgKzIwNiwxMCBAQAogICAgIHJlZyAgID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICAgIm5zRXh0ZW5kT3V0MlRhYmxlIiwgaGFuZGxlX25zRXh0ZW5kT3V0cHV0MlRhYmxlLCAKICAgICAgICAgICAgICAgICBvaWRfYnVmLCBsZW4rMSwgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUoIHJlZywgdGluZm8gKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUoIHJlZywgdGluZm8gKTsKKyAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbmV0c25tcF9oYW5kbGVyX293bnNfdGFibGVfaW5mbyhyZWctPmhhbmRsZXItPm5leHQpOwogICAgIGVwdHItPnJlZ1syXSA9IHJlZzsKIAogICAgICAgICAvKgpAQCAtMTY3LDkgKzIyMiw0NCBAQAogICAgIHdpbmZvID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKAogICAgICAgICAgICAgICAgICYoZXB0ci0+bnVtX2VudHJpZXMpLCBzaXplb2YoZXB0ci0+bnVtX2VudHJpZXMpLAogICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCBXQVRDSEVSX0ZJWEVEX1NJWkUpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoIHJlZywgd2luZm8gKTsKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKCByZWcsIHdpbmZvICk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgZ290byBiYWlsOworICAgIGVwdHItPnJlZ1szXSA9IHJlZzsKIAogICAgIHJldHVybiBlcHRyOworCitiYWlsOgorICAgIGlmIChlcHRyLT5yZWdbM10pCisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKGVwdHItPnJlZ1szXSk7CisgICAgaWYgKGVwdHItPnJlZ1syXSkKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoZXB0ci0+cmVnWzJdKTsKKyAgICBpZiAoZXB0ci0+cmVnWzFdKQorICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihlcHRyLT5yZWdbMV0pOworICAgIGlmIChlcHRyLT5yZWdbMF0pCisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKGVwdHItPnJlZ1swXSk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkCitfdW5yZWdpc3Rlcl9leHRlbmQoZXh0ZW5kX3JlZ2lzdHJhdGlvbl9ibG9jayAqZXB0cikKK3sKKyAgICBleHRlbmRfcmVnaXN0cmF0aW9uX2Jsb2NrICpwcmV2OworCisgICAgbmV0c25tcF9hc3NlcnQoZXB0cik7CisgICAgZm9yIChwcmV2ID0gZXJlZ19oZWFkOyBwcmV2ICYmIHByZXYtPm5leHQgIT0gZXB0cjsgcHJldiA9IHByZXYtPm5leHQpCisJOworICAgIGlmIChwcmV2KSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVwdHIgPT0gcHJldi0+bmV4dCk7CisJcHJldi0+bmV4dCA9IGVwdHItPm5leHQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoZXB0ciA9PSBlcmVnX2hlYWQpOworCWVyZWdfaGVhZCA9IGVwdHItPm5leHQ7CisgICAgfQorCisgICAgbmV0c25tcF90YWJsZV9kYXRhX2RlbGV0ZV90YWJsZShlcHRyLT5kaW5mbyk7CisgICAgZnJlZShlcHRyLT5yb290X29pZCk7CisgICAgZnJlZShlcHRyKTsKIH0KIAogaW50CkBAIC0xODMsNiArMjczLDcgQEAKICAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoIGVwdHItPnJlZ1swXSApOwogICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlciggZXB0ci0+cmVnWzFdICk7CiAgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKCBlcHRyLT5yZWdbMl0gKTsKKyAgICAgICAgbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXIoIGVwdHItPnJlZ1szXSApOwogICAgICAgICBTTk1QX0ZSRUUoZXB0cik7CiAgICAgfQogICAgIGVyZWdfaGVhZCA9IE5VTEw7CkBAIC0yMDMsOCArMjk0LDggQEAKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZXhlYyIsIGV4dGVuZF9wYXJzZV9jb25maWcsIE5VTEwsIE5VTEwpOwogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzaCIsICAgZXh0ZW5kX3BhcnNlX2NvbmZpZywgTlVMTCwgTlVMTCk7CiAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImV4ZWNGaXgiLCBleHRlbmRfcGFyc2VfY29uZmlnLCBOVUxMLCBOVUxMKTsKLSAgICBjb21wYXRhYmlsaXR5X2VudHJpZXMgPSBjYWxsb2MoIG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF9vbGRfZXh0ZW5kKSk7CisgICAgY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gKG5ldHNubXBfb2xkX2V4dGVuZCAqKQorICAgICAgICBjYWxsb2MoIG1heF9jb21wYXRhYmlsaXR5X2VudHJpZXMsIHNpemVvZihuZXRzbm1wX29sZF9leHRlbmQpKTsKICAgICBSRUdJU1RFUl9NSUIoInVjZC1leHRlbnNpYmxlIiwgb2xkX2V4dGVuc2libGVfdmFyaWFibGVzLAogICAgICAgICAgICAgICAgICB2YXJpYWJsZTIsIG9sZF9leHRlbnNpYmxlX3ZhcmlhYmxlc19vaWQpOwogI2VuZGlmCkBAIC0yMTQsNiArMzA1LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlbmRfY2xlYXJfY2FsbGJhY2ssIE5VTEwpOwogfQogCit2b2lkCitzaHV0ZG93bl9leHRlbmQodm9pZCkKK3sKKyNpZm5kZWYgVVNJTkdfVUNEX1NOTVBfRVhURU5TSUJMRV9NT0RVTEUKKyAgICBmcmVlKGNvbXBhdGFiaWxpdHlfZW50cmllcyk7CisgICAgY29tcGF0YWJpbGl0eV9lbnRyaWVzID0gTlVMTDsKKyNlbmRpZgorICAgIHdoaWxlIChlcmVnX2hlYWQpCisJX3VucmVnaXN0ZXJfZXh0ZW5kKGVyZWdfaGVhZCk7Cit9CisKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgICAgICoKICAgICAgICAgICogIENhY2hlZC1kYXRhIGhvb2tzCkBAIC0yMjQsNiArMzI2LDEwIEBACiBpbnQKIGV4dGVuZF9sb2FkX2NhY2hlKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICptYWdpYykKIHsKKyNpZm5kZWYgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfV0FSTklORywic3VwcG9ydCBmb3IgcnVuX2V4ZWNfY29tbWFuZCBub3QgYXZhaWxhYmxlXG4iKSk7CisgICAgcmV0dXJuIC0xOworI2Vsc2UKICAgICBpbnQgIG91dF9sZW4gPSAxMDI0KjEwMDsKICAgICBjaGFyIG91dF9idWZbIDEwMjQqMTAwIF07CiAgICAgaW50ICBjbWRfbGVuID0gMjU1KjIgKyAyOwkvKiAyICogRGlzcGxheVN0cmluZ3MgKi8KQEAgLTI2Myw3ICszNjksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICggZXh0ZW5zaW9uLT5udW1saW5lcyA+IDEgKSB7Ci0gICAgICAgICAgICBleHRlbnNpb24tPmxpbmVzID0gY2FsbG9jKCBzaXplb2YoY2hhciAqKSwgZXh0ZW5zaW9uLT5udW1saW5lcyApOworICAgICAgICAgICAgZXh0ZW5zaW9uLT5saW5lcyA9IChjaGFyKiopY2FsbG9jKCBzaXplb2YoY2hhciAqKSwgZXh0ZW5zaW9uLT5udW1saW5lcyApOwogICAgICAgICAgICAgbWVtY3B5KCBleHRlbnNpb24tPmxpbmVzLCBsaW5lX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFyICopICogZXh0ZW5zaW9uLT5udW1saW5lcyApOwogICAgICAgICB9IGVsc2UgewpAQCAtMjcyLDYgKzM3OCw3IEBACiAgICAgfQogICAgIGV4dGVuc2lvbi0+cmVzdWx0ID0gcmV0OwogICAgIHJldHVybiByZXQ7CisjZW5kaWYgLyogIWRlZmluZWQoVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFKSAqLwogfQogCiB2b2lkCkBAIC00NTAsNiArNTU3LDEwIEBACiAgICAgfQogCiAgICAgZXB0ciAgICAgID0gX3JlZ2lzdGVyX2V4dGVuZCggb2lkX2J1Ziwgb2lkX2xlbiApOworICAgIGlmICghZXB0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIHJlZ2lzdGVyIGV4dGVuZCBlbnRyeSAnJXMnIC0gcG9zc2libHkgZHVwbGljYXRlIG5hbWUuXG4iLCBleGVjX25hbWUgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBleHRlbnNpb24gPSBfbmV3X2V4dGVuc2lvbiggZXhlY19uYW1lLCBmbGFncywgZXB0ciApOwogICAgIGlmIChleHRlbnNpb24pIHsKICAgICAgICAgZXh0ZW5zaW9uLT5jb21tYW5kICA9IHN0cmR1cCggZXhlY19jb21tYW5kICk7CkBAIC00NzgsMTAgKzU4OSwyMSBAQAogICAgICAgICAgICAgCiAgICAgfSBlbHNlIGlmICghc3RyY21wKCB0b2tlbiwgInNoIiAgICkgfHwKICAgICAgICAgICAgICAgICFzdHJjbXAoIHRva2VuLCAiZXhlYyIgKSkgewotICAgICAgICBpZiAoIG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMgPT0gbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyApCisgICAgICAgIGlmICggbnVtX2NvbXBhdGFiaWxpdHlfZW50cmllcyA9PSBtYXhfY29tcGF0YWJpbGl0eV9lbnRyaWVzICkgewogICAgICAgICAgICAgLyogWFhYIC0gc2hvdWxkIHJlYWxseSB1c2UgZHluYW1pYyBhbGxvY2F0aW9uICovCi0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJObyBmdXJ0aGVyIFVDRC1jb21wYXRpYmxlIGVudHJpZXMiICk7Ci0gICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ldHNubXBfb2xkX2V4dGVuZCAqbmV3X2NvbXBhdGFiaWxpdHlfZW50cmllczsKKyAgICAgICAgICAgIG5ld19jb21wYXRhYmlsaXR5X2VudHJpZXMgPSByZWFsbG9jKGNvbXBhdGFiaWxpdHlfZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyoyKnNpemVvZihuZXRzbm1wX29sZF9leHRlbmQpKTsKKyAgICAgICAgICAgIGlmICghbmV3X2NvbXBhdGFiaWxpdHlfZW50cmllcykKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJObyBmdXJ0aGVyIFVDRC1jb21wYXRpYmxlIGVudHJpZXMiICk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBtZW1zZXQobmV3X2NvbXBhdGFiaWxpdHlfZW50cmllcytudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfb2xkX2V4dGVuZCkqbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyk7CisgICAgICAgICAgICAgICAgbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcyAqPSAyOworICAgICAgICAgICAgICAgIGNvbXBhdGFiaWxpdHlfZW50cmllcyA9IG5ld19jb21wYXRhYmlsaXR5X2VudHJpZXM7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMgIT0gbWF4X2NvbXBhdGFiaWxpdHlfZW50cmllcykKICAgICAgICAgICAgIGNvbXBhdGFiaWxpdHlfZW50cmllc1sKICAgICAgICAgICAgICAgICBudW1fY29tcGF0YWJpbGl0eV9lbnRyaWVzKysgXS5leGVjX2VudHJ5ID0gZXh0ZW5zaW9uOwogICAgIH0KQEAgLTYwMSw2ICs3MjMsNyBAQAogICAgICAgICAgKgogICAgICAgICAgKioqKioqKioqKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBWYWxpZGF0ZSB0aGUgbmV3IGFzc2lnbm1lbnRzCkBAIC05MjYsNiArMTA0OSw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKIAogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX0VSUl9HRU5FUlIpOwpAQCAtOTMzLDYgKzEwNTcsNyBAQAogICAgICAgICB9CiAgICAgfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIC8qCiAgICAgICogSWYgd2UncmUgbWFya2luZyBhIGdpdmVuIHJvdyBhcyBhY3RpdmUsCiAgICAgICogIHRoZW4gd2UgbmVlZCB0byBjaGVjayB0aGF0IGl0J3MgcmVhZHkuCkBAIC05NTcsNyArMTA4Miw4IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKQEAgLTEwOTAsOCArMTIxNiw4IEBACiAgICAgb2lkIG9pZF9idWZbTUFYX09JRF9MRU5dOwogICAgIGludCBvaWRfbGVuOwogICAgIGludCBpOwotICAgIGNoYXIgKnRva2VuOwotICAgIGludCAgIHRva2VuX2xlbjsKKyAgICBjaGFyICAqdG9rZW47CisgICAgc2l6ZV90IHRva2VuX2xlbjsKIAogICAgIGlmICghcmVxdWVzdCB8fCAhdGFibGVfaW5mbyB8fCAhdGFibGVfaW5mby0+aW5kZXhlcwogICAgICAgICAgICAgICAgICB8fCAhdGFibGVfaW5mby0+aW5kZXhlcy0+bmV4dF92YXJpYWJsZSkgewpAQCAtMTEwNiw3ICsxMjMyLDcgQEAKICAgICAgKiAgR0VUIGhhbmRsaW5nIC0gZmluZCB0aGUgZXhhY3QgZW50cnkgYmVpbmcgcmVxdWVzdGVkCiAgICAgICoqKi8KICAgICBpZiAoIG1vZGUgPT0gTU9ERV9HRVQgKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCAibnNFeHRlbmRUYWJsZTpvdXRwdXQyIiwgIkdFVDogJXMgLyAlZFxuICIsCisgICAgICAgIERFQlVHTVNHVEwoKCAibnNFeHRlbmRUYWJsZTpvdXRwdXQyIiwgIkdFVDogJXMgLyAlbGRcbiAiLAogICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAqdGFibGVfaW5mby0+aW5kZXhlcy0+bmV4dF92YXJpYWJsZS0+dmFsLmludGVnZXIpKTsKICAgICAgICAgZm9yICggZXB0ciA9IGVyZWctPmVoZWFkOyBlcHRyOyBlcHRyID0gZXB0ci0+bmV4dCApIHsKQEAgLTExMjksNyArMTI1NSw2IEBACiAgICAgICAgICAgICBpZiAobGluZV9pZHggPCAxIHx8IGxpbmVfaWR4ID4gZXB0ci0+bnVtbGluZXMpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVwdHI7CiAgICAgfQogCiAgICAgICAgIC8qKioKQEAgLTEyNDYsOSArMTM3MSw4IEBACiAgICAgICAgICAgICBzbm1wX3NldF92YXJfdmFsdWUoIHRhYmxlX2luZm8tPmluZGV4ZXMtPm5leHRfdmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSZsaW5lX2lkeCwgc2l6ZW9mKGxpbmVfaWR4KSk7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGVwdHI7ICAvKiBGaW5hbGx5LCBzaWduYWwgc3VjY2VzcyAqLwogICAgIH0KLSAgICByZXR1cm4gTlVMTDsKKyAgICByZXR1cm4gZXB0cjsgIC8qIEZpbmFsbHksIHNpZ25hbCBzdWNjZXNzICovCiB9CiAKIC8qCkBAIC0xMzM4LDYgKzE0NjIsMzIgQEAKICAgICAgICAgICoKICAgICAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKiovCiAKK2NoYXIgKiBfZ2V0X2NtZGxpbmUobmV0c25tcF9leHRlbmQgKmV4dGVuZCkKK3sKKyAgICBzaXplX3QgICAgICAgICAgc2l6ZTsKKyAgICBjaGFyICAgICAgICAgICAqbmV3YnVmOworICAgIGNvbnN0IGNoYXIgICAgICphcmdzID0gZXh0ZW5kLT5hcmdzOworCisgICAgaWYgKGFyZ3MgPT0gTlVMTCkKKyAgICAgICAgLyogVXNlIGVtcHR5IHN0cmluZyBmb3IgcHJvY2Vzc2VzIHdpdGhvdXQgYXJndW1lbnRzLiAqLworICAgICAgICBhcmdzID0gIiI7CisKKyAgICBzaXplID0gc3RybGVuKGV4dGVuZC0+Y29tbWFuZCkgKyBzdHJsZW4oYXJncykgKyAyOworICAgIGlmIChzaXplID4gY21kbGluZXNpemUpIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhjbWRsaW5lYnVmLCBzaXplKTsKKyAgICAgICAgaWYgKCFuZXdidWYpIHsKKyAgICAgICAgICAgIGZyZWUoY21kbGluZWJ1Zik7CisgICAgICAgICAgICBjbWRsaW5lYnVmID0gTlVMTDsKKyAgICAgICAgICAgIGNtZGxpbmVzaXplID0gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGNtZGxpbmVidWYgPSBuZXdidWY7CisgICAgICAgIGNtZGxpbmVzaXplID0gc2l6ZTsKKyAgICB9CisgICAgc3ByaW50ZihjbWRsaW5lYnVmLCAiJXMgJXMiLCBleHRlbmQtPmNvbW1hbmQsIGFyZ3MpOworICAgIHJldHVybiBjbWRsaW5lYnVmOworfQorCiB1X2NoYXIgKgogdmFyX2V4dGVuc2libGVfb2xkKHN0cnVjdCB2YXJpYWJsZSAqIHZwLAogICAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKQEAgLTEzNDgsNiArMTQ5OCw3IEBACiAgICAgbmV0c25tcF9vbGRfZXh0ZW5kICpleHRlbiA9IE5VTEw7CiAgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OwogICAgIHVuc2lnbmVkIGludCBpZHg7CisgICAgY2hhciAgICAgICAgICpjbWRsaW5lOwogCiAgICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKICAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG51bV9jb21wYXRhYmlsaXR5X2VudHJpZXMpKQpAQCAtMTM2Niw4ICsxNTE3LDEwIEBACiAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihleHRlbi0+ZXhlY19lbnRyeS0+dG9rZW4pOwogICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIChleHRlbi0+ZXhlY19lbnRyeS0+dG9rZW4pKTsKICAgICAgICAgY2FzZSBTSEVMTENPTU1BTkQ6Ci0gICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihleHRlbi0+ZXhlY19lbnRyeS0+Y29tbWFuZCk7Ci0gICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKGV4dGVuLT5leGVjX2VudHJ5LT5jb21tYW5kKSk7CisgICAgICAgICAgICBjbWRsaW5lID0gX2dldF9jbWRsaW5lKGV4dGVuLT5leGVjX2VudHJ5KTsKKyAgICAgICAgICAgIGlmIChjbWRsaW5lKQorICAgICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGNtZGxpbmUpOworICAgICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGNtZGxpbmUpOwogICAgICAgICBjYXNlIEVSUk9SRkxBRzogICAgICAgIC8qIHJldHVybiBjb2RlIGZyb20gdGhlIHByb2Nlc3MgKi8KICAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggZXh0ZW4tPmV4ZWNfZW50cnktPmNhY2hlICk7CiAgICAgICAgICAgICBsb25nX3JldCA9IGV4dGVuLT5leGVjX2VudHJ5LT5yZXN1bHQ7CkBAIC0xMzkwLDggKzE1NDMsMTAgQEAKIAogICAgICAgICBjYXNlIEVSUk9SRklYQ01EOgogICAgICAgICAgICAgaWYgKGV4dGVuLT5lZml4X2VudHJ5KSB7Ci0gICAgICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXh0ZW4tPmVmaXhfZW50cnktPmNvbW1hbmQpOwotICAgICAgICAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSBleHRlbi0+ZWZpeF9lbnRyeS0+Y29tbWFuZCk7CisgICAgICAgICAgICAgICAgY21kbGluZSA9IF9nZXRfY21kbGluZShleHRlbi0+ZWZpeF9lbnRyeSk7CisJCWlmIChjbWRsaW5lKQorICAgICAgICAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihjbWRsaW5lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgY21kbGluZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICp2YXJfbGVuID0gMDsKICAgICAgICAgICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgJmxvbmdfcmV0dXJuKTsgIC8qIEp1c3QgbmVlZHMgdG8gYmUgbm9uLW51bGwhICovCkBAIC0xNDE2LDYgKzE1NzEsNyBAQAogICAgIGlkeCA9IG5hbWVbbmFtZV9sZW4tMV0gLTE7CiAgICAgZXh0ZW4gPSAmY29tcGF0YWJpbGl0eV9lbnRyaWVzWyBpZHggXTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBzd2l0Y2ggKGFjdGlvbikgewogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX0lOVEVHRVIpIHsKQEAgLTE0MzYsNiArMTU5Miw3IEBACiAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CiAgICAgICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggZXh0ZW4tPmVmaXhfZW50cnktPmNhY2hlICk7CiAgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9leHRlbmQuaCBiL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oCmluZGV4IDhmMTlkYjMuLjhiNzZjZDQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L2V4dGVuZC5oCkBAIC0xLDcgKzEsNyBAQAogI2lmbmRlZiBORVRTTk1QX0VYVEVORF9ICiAjZGVmaW5lIE5FVFNOTVBfRVhURU5EX0gKIAotY29uZmlnX3JlcXVpcmUoIHV0aWxfZnVuY3MgKQorY29uZmlnX3JlcXVpcmUoIHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSApCiBjb25maWdfcmVxdWlyZSggdXRpbGl0aWVzL2V4ZWN1dGUgKQogY29uZmlnX2FkZF9taWIoTkVULVNOTVAtRVhURU5ELU1JQikKIApAQCAtMjgsNiArMjgsNyBAQAogfSBuZXRzbm1wX2V4dGVuZDsKIAogdm9pZCAgICAgICAgICAgICAgICAgaW5pdF9leHRlbmQodm9pZCk7Cit2b2lkICAgICAgICAgICAgICAgICBzaHV0ZG93bl9leHRlbmQodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfbnNFeHRlbmRDb25maWdUYWJsZTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIGhhbmRsZV9uc0V4dGVuZE91dHB1dDFUYWJsZTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIGhhbmRsZV9uc0V4dGVuZE91dHB1dDJUYWJsZTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zQ2FjaGUuYwppbmRleCBmOGU3M2YwLi5kMzIyNjNiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0NhY2hlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNDYWNoZS5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgpAQCAtMTEsNyArMTIsOCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgogI2luY2x1ZGUgImFnZW50L25zQ2FjaGUuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNhY2hlX2dldF9oZWFkKQogCiAKIC8qCkBAIC0yMSw2ICsyMyw4IEBACiBleHRlcm4gbmV0c25tcF9jYWNoZSAqbmV0c25tcF9jYWNoZV9nZXRfaGVhZCh2b2lkKTsKIAogCisjZGVmaW5lIG5zQ2FjaGUgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNQorCiAvKgogICogT0lEcyBmb3IgdGhlIGNhY2hlZ2luZyBjb250cm9sIHNjYWxhciBvYmplY3RzCiAgKgpAQCAtMjgsOCArMzIsNiBAQAogICogIHRoYW4gdGhlIChzb2xlKSB2YWxpZCBpbnN0YW5jZSBpbiBlYWNoIGNhc2UsIGluIG9yZGVyCiAgKiAgdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBpbnZhbGlkIGluc3RhbmNlcyBwcm9wZXJseS4KICAqLwotb2lkIG5zQ2FjaGVUaW1lb3V0X29pZFtdICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA1LCAxfTsKLW9pZCBuc0NhY2hlRW5hYmxlZF9vaWRbXSAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNSwgMn07CiAKIC8qCiAgKiAuLi4gYW5kIGZvciB0aGUgY2FjaGUgdGFibGUuCkBAIC00NCwxNSArNDYsMTcgQEAKICNkZWZpbmUgTlNDQUNIRV9TVEFUVVNfQUNUSVZFICAgNAogI2RlZmluZSBOU0NBQ0hFX1NUQVRVU19FWFBJUkVEICA1CiAKLW9pZCBuc0NhY2hlVGFibGVfb2lkW10gICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNSwgM307Ci0KLWV4dGVybiBzdHJ1Y3Qgc25tcF9hbGFybSAqCitORVRTTk1QX0lNUE9SVCBzdHJ1Y3Qgc25tcF9hbGFybSAqCiBzYV9maW5kX3NwZWNpZmljKHVuc2lnbmVkIGludCBjbGllbnRyZWcpOwogCiAKIHZvaWQKIGluaXRfbnNDYWNoZSh2b2lkKQogeworICAgIGNvbnN0IG9pZCBuc0NhY2hlVGltZW91dF9vaWRbXSAgICA9IHsgbnNDYWNoZSwgMSB9OworICAgIGNvbnN0IG9pZCBuc0NhY2hlRW5hYmxlZF9vaWRbXSAgICA9IHsgbnNDYWNoZSwgMiB9OworICAgIGNvbnN0IG9pZCBuc0NhY2hlVGFibGVfb2lkW10gICAgICA9IHsgbnNDYWNoZSwgMyB9OworCiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKIApAQCAtMTAyLDcgKzEwNiw3IEBACiAgICAgLyoKICAgICAgKiAuLi4uIGFuZCByZWdpc3RlciB0aGUgdGFibGUgd2l0aCB0aGUgYWdlbnQuCiAgICAgICovCi0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAidHpDYWNoZVRhYmxlIiwgaGFuZGxlX25zQ2FjaGVUYWJsZSwKICAgICAgICAgICAgIG5zQ2FjaGVUYWJsZV9vaWQsIE9JRF9MRU5HVEgobnNDYWNoZVRhYmxlX29pZCksCkBAIC0xMzcsNiArMTQxLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAJZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKCByZXF1ZXN0LT5zdGF0dXMgIT0gMCApIHsKQEAgLTE1OCw2ICsxNjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9DQUNIRV9USU1FT1VULAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTg3LDYgKzE5Myw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmICggcmVxdWVzdC0+c3RhdHVzICE9IDAgKSB7CkBAIC0yMTEsNiArMjE4LDcgQEAKIAluZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9OT19DQUNISU5HLCBlbmFibGVkKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjk1LDkgKzMwMywxMCBAQAogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKIAkJfQogCQlzdGF0dXMgPSAoY2FjaGVfZW50cnktPmVuYWJsZWQgPwotCSAgICAgICAgICAgICAgICAgICAoY2FjaGVfZW50cnktPnRpbWVzdGFtcCA/Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICghYXRpbWVfcmVhZHkoY2FjaGVfZW50cnktPnRpbWVzdGFtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDAqY2FjaGVfZW50cnktPnRpbWVvdXQpID8KKwkgICAgICAgICAgICAgICAgICAgKGNhY2hlX2VudHJ5LT50aW1lc3RhbXBNID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNhY2hlX2VudHJ5LT50aW1lb3V0ID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICFuZXRzbm1wX3JlYWR5X21vbm90b25pYyhjYWNoZV9lbnRyeS0+dGltZXN0YW1wTSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKmNhY2hlX2VudHJ5LT50aW1lb3V0KSA/CiAJICAgICAgICAgICAgICAgICAgICAgICAgTlNDQUNIRV9TVEFUVVNfQUNUSVZFOgogCSAgICAgICAgICAgICAgICAgICAgICAgIE5TQ0FDSEVfU1RBVFVTX0VYUElSRUQpIDoKIAkgICAgICAgICAgICAgICAgICAgICAgTlNDQUNIRV9TVEFUVVNfRU1QVFkpIDoKQEAgLTMxNCw2ICszMjMsNyBAQAogCWJyZWFrOwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTM2MSw3ICszNzEsNiBAQAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsIFNOTVBfRVJSX05PQ1JFQVRJT04pOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwkvKiBYWFggLSBpcyB0aGlzIHJpZ2h0ID8gKi8KLSAgICAgICAgICAgICAgICBjb250aW51ZTsKIAkgICAgfQogCX0KIAlicmVhazsKQEAgLTQwNSwxNCArNDE0LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJICAgIGNhc2UgTlNDQUNIRV9TVEFUVVNfRU1QVFk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9lbnRyeS0+ZnJlZV9jYWNoZShjYWNoZV9lbnRyeSwgY2FjaGVfZW50cnktPm1hZ2ljKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoY2FjaGVfZW50cnktPnRpbWVzdGFtcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjYWNoZV9lbnRyeS0+dGltZXN0YW1wID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUoY2FjaGVfZW50cnktPnRpbWVzdGFtcE0pOworICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGVfZW50cnktPnRpbWVzdGFtcE0gPSBOVUxMOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAJCX0KIAkgICAgICAgIGJyZWFrOwogCSAgICB9CiAJfQogCWJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zRGVidWcuYwppbmRleCA0MGQ1NWQ0Li44OWE5MGIwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0RlYnVnLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNEZWJ1Zy5jCkBAIC0xMCwzNCArMTAsMzIgQEAKICNlbmRpZgogCiAjaW5jbHVkZSAiYWdlbnQvbnNEZWJ1Zy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAotCi0KLS8qCi0gKiBPSURzIGZvciB0aGUgZGVidWdnaW5nIGNvbnRyb2wgc2NhbGFyIG9iamVjdHMKLSAqCi0gKiBOb3RlIHRoYXQgdGhlc2Ugd2UncmUgcmVnaXN0ZXJpbmcgdGhlIGZ1bGwgb2JqZWN0IHJhdGhlcgotICogIHRoYW4gdGhlIChzb2xlKSB2YWxpZCBpbnN0YW5jZSBpbiBlYWNoIGNhc2UsIGluIG9yZGVyCi0gKiAgdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBpbnZhbGlkIGluc3RhbmNlcyBwcm9wZXJseS4KLSAqLwotb2lkIG5zRGVidWdFbmFibGVkX29pZFtdICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAxLCAxfTsKLW9pZCBuc0RlYnVnT3V0cHV0QWxsX29pZFtdICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNywgMSwgMn07Ci1vaWQgbnNEZWJ1Z0R1bXBQZHVfb2lkW10gICAgPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDEsIDN9OwotCi0vKgotICogLi4uIGFuZCBmb3IgdGhlIHRva2VuIHRhYmxlLgotICovCi0KLSNkZWZpbmUgIERCR1RPS0VOX1BSRUZJWAkyCi0jZGVmaW5lICBEQkdUT0tFTl9FTkFCTEVECTMKLSNkZWZpbmUgIERCR1RPS0VOX1NUQVRVUwk0Ci1vaWQgbnNEZWJ1Z1Rva2VuVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDEsIDR9OwotCisjZGVmaW5lIG5zQ29uZmlnRGVidWcgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgNywgMQogCiB2b2lkCiBpbml0X25zRGVidWcodm9pZCkKIHsKKyAgICAvKgorICAgICAqIE9JRHMgZm9yIHRoZSBkZWJ1Z2dpbmcgY29udHJvbCBzY2FsYXIgb2JqZWN0cworICAgICAqCisgICAgICogTm90ZSB0aGF0IHRoZXNlIHdlJ3JlIHJlZ2lzdGVyaW5nIHRoZSBmdWxsIG9iamVjdCByYXRoZXIKKyAgICAgKiAgdGhhbiB0aGUgKHNvbGUpIHZhbGlkIGluc3RhbmNlIGluIGVhY2ggY2FzZSwgaW4gb3JkZXIKKyAgICAgKiAgdG8gaGFuZGxlIHJlcXVlc3RzIGZvciBpbnZhbGlkIGluc3RhbmNlcyBwcm9wZXJseS4KKyAgICAgKi8KKyAgICBjb25zdCBvaWQgbnNEZWJ1Z0VuYWJsZWRfb2lkW10gICAgPSB7IG5zQ29uZmlnRGVidWcsIDF9OworICAgIGNvbnN0IG9pZCBuc0RlYnVnT3V0cHV0QWxsX29pZFtdICA9IHsgbnNDb25maWdEZWJ1ZywgMn07CisgICAgY29uc3Qgb2lkIG5zRGVidWdEdW1wUGR1X29pZFtdICAgID0geyBuc0NvbmZpZ0RlYnVnLCAzfTsKKworICAgIC8qCisgICAgICogLi4uIGFuZCBmb3IgdGhlIHRva2VuIHRhYmxlLgorICAgICAqLworCisjZGVmaW5lICBEQkdUT0tFTl9QUkVGSVgJMgorI2RlZmluZSAgREJHVE9LRU5fRU5BQkxFRAkzCisjZGVmaW5lICBEQkdUT0tFTl9TVEFUVVMJNAorICAgIGNvbnN0IG9pZCBuc0RlYnVnVG9rZW5UYWJsZV9vaWRbXSA9IHsgbnNDb25maWdEZWJ1ZywgNH07CisKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAgICAgICAgICAgKmlpbmZvOwogCkBAIC05Myw3ICs5MSw3IEBACiAgICAgLyoKICAgICAgKiAuLi4uIGFuZCByZWdpc3RlciB0aGUgdGFibGUgd2l0aCB0aGUgYWdlbnQuCiAgICAgICovCi0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcigKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMigKICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAidHpEZWJ1Z1RhYmxlIiwgaGFuZGxlX25zRGVidWdUYWJsZSwKICAgICAgICAgICAgIG5zRGVidWdUb2tlblRhYmxlX29pZCwgT0lEX0xFTkdUSChuc0RlYnVnVG9rZW5UYWJsZV9vaWQpLApAQCAtMTI2LDYgKzEyNCw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTE1MSw2ICsxNTAsNyBAQAogCSAgICBlbmFibGVkID0gMDsKIAlzbm1wX3NldF9kb19kZWJ1Z2dpbmcoIGVuYWJsZWQgKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTgxLDYgKzE4MSw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTIwNiw2ICsyMDcsNyBAQAogCSAgICBlbmFibGVkID0gMDsKIAlzbm1wX3NldF9kb19kZWJ1Z2dpbmcoIGVuYWJsZWQgKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjM3LDYgKzIzOSw3IEBACiAJYnJlYWs7CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCWZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTI2Myw2ICsyNjYsNyBAQAogCW5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAogCSAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQsIGVuYWJsZWQpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNDcsNiArMzUxLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAJZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewogICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCAhPSAwKQpAQCAtNDUzLDYgKzQ1OCw3IEBACiAJICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc0xvZ2dpbmcuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jCmluZGV4IDNlNWIwMmYuLjdmMjBiZGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zTG9nZ2luZy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhci5oPgpAQCAtMTEsOSArMTIsMTEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CiAjaW5jbHVkZSAiYWdlbnQvbnNMb2dnaW5nLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogCi0KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGxvZ2dpbmdfZXh0ZXJuYWwpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfaXRlcmF0b3JfaW5zZXJ0X2NvbnRleHQpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBPSUQgYW5kIGNvbHVtbnMgZm9yIHRoZSBsb2dnaW5nIHRhYmxlLgpAQCAtMjMsMTUgKzI2LDE0IEBACiAjZGVmaW5lICBOU0xPR0dJTkdfTUFYTEVWRUwJNAogI2RlZmluZSAgTlNMT0dHSU5HX1NUQVRVUwk1CiAKLW9pZCBuc0xvZ2dpbmdUYWJsZV9vaWRbXSAgICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCA3LCAyLCAxfTsKLQotCiB2b2lkCiBpbml0X25zTG9nZ2luZyh2b2lkKQogewogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICAgICAgICAgICAqaWluZm87CiAKKyAgICBjb25zdCBvaWQgbnNMb2dnaW5nVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDcsIDIsIDF9OworCiAgICAgLyoKICAgICAgKiBSZWdpc3RlciB0aGUgdGFibGUuCiAgICAgICogV2UgbmVlZCB0byBkZWZpbmUgdGhlIGNvbHVtbiBzdHJ1Y3R1cmUgYW5kIGluZGV4aW5nLi4uLgpAQCAtNjIsNyArNjQsNyBAQAogICAgIC8qCiAgICAgICogLi4uLiBhbmQgcmVnaXN0ZXIgdGhlIHRhYmxlIHdpdGggdGhlIGFnZW50LgogICAgICAqLwotICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgInR6TG9nZ2luZ1RhYmxlIiwgaGFuZGxlX25zTG9nZ2luZ1RhYmxlLAogICAgICAgICAgICAgbnNMb2dnaW5nVGFibGVfb2lkLCBPSURfTEVOR1RIKG5zTG9nZ2luZ1RhYmxlX29pZCksCkBAIC0xOTAsNiArMTkyLDcgQEAKIAlicmVhazsKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CiAgICAgICAgICAgICBpZiAoIHJlcXVlc3QtPnN0YXR1cyAhPSAwICkgewpAQCAtMzA4LDcgKzMxMSw2IEBACiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX05PU1VDSE9CSkVDVDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKIAkgICAgfQogCX0KIAlicmVhazsKQEAgLTQ0OSwxMSArNDUxLDExIEBACiAgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6Ci0gICAgICAgICAgICAgICAgICAgICAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJICAgIGNhc2UgUlNfREVTVFJPWToKIAkJICAgICAgICBuZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyKCBsb2doICk7CkBAIC00NjMsNiArNDY1LDcgQEAKIAkgICAgfQogCX0KIAlicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc01vZHVsZVRhYmxlLmMKaW5kZXggNGY0ZWEwMC4uODRiZDhmYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNNb2R1bGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50L25zTW9kdWxlVGFibGUuYwpAQCAtNCwxMCArNCwxMyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJuc01vZHVsZVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKIHZvaWQKIG5zTW9kdWxlVGFibGVfZnJlZSh2b2lkICpjb250ZXh0LCBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmRvbnRfY2FyZSkKIHsKQEAgLTE4LDggKzIxLDcgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfbnNNb2R1bGVUYWJsZSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgICAgICBuc01vZHVsZVRhYmxlX29pZFtdID0KLSAgICAgICAgeyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAxLCAyLCAxIH07CisgICAgY29uc3Qgb2lkIG5zTW9kdWxlVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDIsIDEgfTsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15X2hhbmRsZXI7CiAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbzsKQEAgLTczLDEwICs3NSwxMCBAQAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJpbml0aWFsaXplX3RhYmxlX25zTW9kdWxlVGFibGUiLAogICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyB0YWJsZSBuc01vZHVsZVRhYmxlIGFzIGEgdGFibGUgaXRlcmF0b3JcbiIpKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG15X2hhbmRsZXIsIGlpbmZvKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihteV9oYW5kbGVyLCBpaW5mbyk7CiB9CiAKLS8qKiBJbml0aWFsemllcyB0aGUgbnNNb2R1bGVUYWJsZSBtb2R1bGUgKi8KKy8qKiBJbml0aWFsaXplcyB0aGUgbnNNb2R1bGVUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfbnNNb2R1bGVUYWJsZSh2b2lkKQogewpAQCAtMTM3LDE4ICsxMzksMTggQEAKICAgICAqbXlfZGF0YV9jb250ZXh0ID0gY3RyZWUtPnRyZWU7CiAKICAgICB2cHRyID0gcHV0X2luZGV4X2RhdGE7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUpKTsKIAogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwogICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLAotICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopY3RyZWUtPmNvbnRleHRfcHRyLT5maXJzdF9zdWJ0cmVlLT5uYW1lX2EsCisgICAgICAgICAgICAgICAgICAgICAgIGN0cmVlLT5jb250ZXh0X3B0ci0+Zmlyc3Rfc3VidHJlZS0+bmFtZV9hLAogICAgICAgICAgICAgICAgICAgICAgICBjdHJlZS0+Y29udGV4dF9wdHItPmZpcnN0X3N1YnRyZWUtPm5hbWVsZW4gKgogICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSk7CiAKICAgICB1bHRtcCA9IGN0cmVlLT5jb250ZXh0X3B0ci0+Zmlyc3Rfc3VidHJlZS0+cHJpb3JpdHk7CiAgICAgdnB0ciA9IHZwdHItPm5leHRfdmFyaWFibGU7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgJiB1bHRtcCwgc2l6ZW9mKHVsdG1wKSk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICYgdWx0bXAsIHNpemVvZih1bHRtcCkpOwogCiAgICAgcmV0dXJuIHB1dF9pbmRleF9kYXRhOwogfQpAQCAtMTg1LDE2ICsxODcsMTYgQEAKICAgICAqbXlfZGF0YV9jb250ZXh0ID0gY3RyZWUtPnRyZWU7CiAKICAgICB2cHRyID0gcHV0X2luZGV4X2RhdGE7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIGN0cmVlLT5jb250ZXh0X3B0ci0+Y29udGV4dF9uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY3RyZWUtPmNvbnRleHRfcHRyLT5jb250ZXh0X25hbWUpKTsKIAogICAgIHZwdHIgPSB2cHRyLT5uZXh0X3ZhcmlhYmxlOwotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopIGN0cmVlLT50cmVlLT5uYW1lX2EsCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIGN0cmVlLT50cmVlLT5uYW1lX2EsCiAgICAgICAgICAgICAgICAgICAgICAgIGN0cmVlLT50cmVlLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOwogCiAgICAgdWx0bXAgPSBjdHJlZS0+dHJlZS0+cHJpb3JpdHk7CiAgICAgdnB0ciA9IHZwdHItPm5leHRfdmFyaWFibGU7Ci0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgJiB1bHRtcCwgc2l6ZW9mKHVsdG1wKSk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICYgdWx0bXAsIHNpemVvZih1bHRtcCkpOwogCiAgICAgcmV0dXJuIHB1dF9pbmRleF9kYXRhOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNUcmFuc2FjdGlvblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYwppbmRleCAzMWI5ZmU1Li5kN2QzY2U5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc1RyYW5zYWN0aW9uVGFibGUuYwpAQCAtMyw2ICszLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTEwLDE1ICsxMSwxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmg+CiAjaW5jbHVkZSAibnNUcmFuc2FjdGlvblRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKIC8qKiBJbml0aWFsaXplIHRoZSBuc1RyYW5zYWN0aW9uVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXQncyBjb250ZW50cwogICAgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KIHZvaWQKIGluaXRpYWxpemVfdGFibGVfbnNUcmFuc2FjdGlvblRhYmxlKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAgICAgIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWRbXSA9Ci0gICAgICAgIHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgOCwgMSB9OwotICAgIHNpemVfdCAgICAgICAgICBuc1RyYW5zYWN0aW9uVGFibGVfb2lkX2xlbiA9Ci0gICAgICAgIE9JRF9MRU5HVEgobnNUcmFuc2FjdGlvblRhYmxlX29pZCk7CisgICAgY29uc3Qgb2lkIG5zVHJhbnNhY3Rpb25UYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgOCwgMSB9OwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqbXlfaGFuZGxlcjsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvOwpAQCAtMzMsMTEgKzMzLDEwIEBACiAgICAgICogaWYgeW91ciB0YWJsZSBpcyByZWFkIG9ubHksIGl0J3MgZWFzaWVzdCB0byBjaGFuZ2UgdGhlCiAgICAgICogSEFORExFUl9DQU5fUldSSVRFIGRlZmluaXRpb24gYmVsb3cgdG8gSEFORExFUl9DQU5fUk9OTFkgCiAgICAgICovCi0gICAgbXlfaGFuZGxlciA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJuc1RyYW5zYWN0aW9uVGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1RyYW5zYWN0aW9uVGFibGVfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBteV9oYW5kbGVyID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJuc1RyYW5zYWN0aW9uVGFibGUiLCBuc1RyYW5zYWN0aW9uVGFibGVfaGFuZGxlciwKKyAgICAgICAgbnNUcmFuc2FjdGlvblRhYmxlX29pZCwgT0lEX0xFTkdUSChuc1RyYW5zYWN0aW9uVGFibGVfb2lkKSwKKyAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOwogCiAgICAgaWYgKCFteV9oYW5kbGVyIHx8ICF0YWJsZV9pbmZvIHx8ICFpaW5mbykgewogICAgICAgICBpZiAobXlfaGFuZGxlcikKQEAgLTY1LDEwICs2NCwxMCBAQAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJpbml0aWFsaXplX3RhYmxlX25zVHJhbnNhY3Rpb25UYWJsZSIsCiAgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIHRhYmxlIG5zVHJhbnNhY3Rpb25UYWJsZSBhcyBhIHRhYmxlIGl0ZXJhdG9yXG4iKSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCi0vKiogSW5pdGlhbHppZXMgdGhlIG5zVHJhbnNhY3Rpb25UYWJsZSBtb2R1bGUgKi8KKy8qKiBJbml0aWFsaXplcyB0aGUgbnNUcmFuc2FjdGlvblRhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9uc1RyYW5zYWN0aW9uVGFibGUodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudC9uc1ZhY21BY2Nlc3NUYWJsZS5jCmluZGV4IGQyY2VlMzUuLjc5ZmE5N2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50L25zVmFjbUFjY2Vzc1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUuYwpAQCAtNCwxMSArNCwxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJuc1ZhY21BY2Nlc3NUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9zdG9yYWdldHlwZSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2l0ZXJhdG9yX2luc2VydF9jb250ZXh0KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG5zVmFjbUFjY2Vzc1RhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9yZWdpc3Rlcl9uc1ZhY21fY29udGV4dChjb25zdCBjaGFyICpjb250ZXh0KQpAQCAtMTcsMTcgKzI0LDIyIEBACiAgICAgICogSW5pdGlhbGl6ZSB0aGUgbnNWYWNtQWNjZXNzVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzCiAgICAgICogICBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZAogICAgICAqLwotICAgIHN0YXRpYyBvaWQgbnNWYWNtQWNjZXNzVGFibGVfb2lkW10gICA9IHsgMSwzLDYsMSw0LDEsODA3MiwxLDksMSB9OwotICAgIHNpemVfdCAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobnNWYWNtQWNjZXNzVGFibGVfb2lkKTsKKyAgICBjb25zdCBvaWQgbnNWYWNtQWNjZXNzVGFibGVfb2lkW10gICA9IHsgMSwzLDYsMSw0LDEsODA3MiwxLDksMSB9OwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCi0gICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm5zVmFjbUFjY2Vzc1RhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc1ZhY21BY2Nlc3NUYWJsZV9vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgIm5zVmFjbUFjY2Vzc1RhYmxlIiwgbnNWYWNtQWNjZXNzVGFibGVfaGFuZGxlciwKKyAgICAgICAgbnNWYWNtQWNjZXNzVGFibGVfb2lkLCBPSURfTEVOR1RIKG5zVmFjbUFjY2Vzc1RhYmxlX29pZCksCisgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICJuc1ZhY21BY2Nlc3NUYWJsZSIsIG5zVmFjbUFjY2Vzc1RhYmxlX2hhbmRsZXIsCisgICAgICAgIG5zVmFjbUFjY2Vzc1RhYmxlX29pZCwgT0lEX0xFTkdUSChuc1ZhY21BY2Nlc3NUYWJsZV9vaWQpLAorICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ4LDcgKzYwLDcgQEAKICAgICBpZiAoIGNvbnRleHQgJiYgY29udGV4dFswXSApCiAgICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dCk7CiAKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKHJlZywgaWluZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKHJlZywgaWluZm8pOwogfQogCiB2b2lkCkBAIC0xOTEsNiArMjAzLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTMzNiw2ICszNDksNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmggYi9hZ2VudC9taWJncm91cC9hZ2VudF9taWJzLmgKaW5kZXggOGMwZGUxYy4uNTBkZDE1OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnRfbWlicy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50X21pYnMuaApAQCAtMSw2ICsxLDggQEAKIGNvbmZpZ19yZXF1aXJlKGFnZW50L25zVHJhbnNhY3Rpb25UYWJsZSkKIGNvbmZpZ19yZXF1aXJlKGFnZW50L25zTW9kdWxlVGFibGUpCisjaWZuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCiBjb25maWdfcmVxdWlyZShhZ2VudC9uc0RlYnVnKQorI2VuZGlmCiBjb25maWdfcmVxdWlyZShhZ2VudC9uc0NhY2hlKQogY29uZmlnX3JlcXVpcmUoYWdlbnQvbnNMb2dnaW5nKQogY29uZmlnX3JlcXVpcmUoYWdlbnQvbnNWYWNtQWNjZXNzVGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuYwppbmRleCBkMTU2ZDQ3Li5iNTkwYzdhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvYWdlbnR4X2NvbmZpZy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmMKQEAgLTIsNiArMiw3IEBACiAgKiAgQWdlbnRYIENvbmZpZ3VyYXRpb24KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgpAQCAtMTQsMTkgKzE1LDE1IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1BXRF9ICi0jaW5jbHVkZSA8cHdkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0dSUF9ICi0jaW5jbHVkZSA8Z3JwLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJzbm1wZC5oIgogI2luY2x1ZGUgImFnZW50eC9hZ2VudHhfY29uZmlnLmgiCiAjaW5jbHVkZSAiYWdlbnR4L3Byb3RvY29sLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHVzZXJfaW5mb3JtYXRpb24pCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfdGltZV90b19zZWNzKQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBDb21tb24gbWFzdGVyIGFuZCBzdWItYWdlbnQKQEAgLTQ3LDcgKzQ0LDYgQEAKIGFnZW50eF9wYXJzZV9tYXN0ZXIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAgICAgaW50ICAgICAgICAgICAgIGkgPSAtMTsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW0JVRlNJWl07CiAKICAgICBpZiAoIXN0cmNtcChjcHRyLCAiYWdlbnR4IikgfHwKICAgICAgICAgIXN0cmNtcChjcHRyLCAiYWxsIikgfHwKQEAgLTYwLDggKzU2LDcgQEAKICAgICAgICAgaSA9IGF0b2koY3B0cik7CiAKICAgICBpZiAoaSA8IDAgfHwgaSA+IDEpIHsKLSAgICAgICAgc3ByaW50ZihidWYsICJtYXN0ZXIgJyVzJyB1bnJlY29nbmlzZWQiLCBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcihidWYpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJtYXN0ZXIgJyVzJyB1bnJlY29nbmlzZWQiLCBjcHRyKTsKICAgICB9IGVsc2UKICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9NQVNURVIsIGkpOwogfQpAQCAtNzUsMTIgKzcwLDYgQEAKICAgICBpbnQgc19wZXJtID0gLTE7CiAgICAgaW50IGRfcGVybSA9IC0xOwogICAgIGNoYXIgKnN0OwotI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAotICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKLSNlbmRpZgotI2lmIEhBVkVfR0VUR1JOQU0gJiYgSEFWRV9HUlBfSAotICAgIHN0cnVjdCBncm91cCAgKmdycDsKLSNlbmRpZgogCiAgICAgREVCVUdNU0dUTCgoImFnZW50eC9jb25maWciLCAicG9ydCBwZXJtaXNzaW9uczogJXNcbiIsIGNwdHIpKTsKICAgICBzb2NrZXRfcGVybSA9IHN0cnRva19yKGNwdHIsICIgXHQiLCAmc3QpOwpAQCAtMTA3LDE2ICs5Niw3IEBACiAgICAgICogVHJ5IHRvIGhhbmRsZSBudW1lcmljIFVJRHMgb3IgdXNlciBuYW1lcyBmb3IgdGhlIHNvY2tldCBvd25lcgogICAgICAqLwogICAgIGlmIChzb2NrZXRfdXNlcikgewotICAgICAgICB1aWQgPSBhdG9pKHNvY2tldF91c2VyKTsKLSAgICAgICAgaWYgKCB1aWQgPT0gMCApIHsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKLSAgICAgICAgICAgIHB3ZCA9IGdldHB3bmFtKCBzb2NrZXRfdXNlciApOwotICAgICAgICAgICAgaWYgKHB3ZCkKLSAgICAgICAgICAgICAgICB1aWQgPSBwd2QtPnB3X3VpZDsKLSAgICAgICAgICAgIGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiQ2FuJ3QgaWRlbnRpZnkgQWdlbnRYIHNvY2tldCB1c2VyICglcykuXG4iLCBzb2NrZXRfdXNlcik7Ci0gICAgICAgIH0KKyAgICAgICAgdWlkID0gbmV0c25tcF9zdHJfdG9fdWlkKHNvY2tldF91c2VyKTsKICAgICAgICAgaWYgKCB1aWQgIT0gMCApCiAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19VU0VSLCB1aWQpOwpAQCAtMTI4LDE2ICsxMDgsNyBAQAogICAgICAqIGFuZCBzaW1pbGFybHkgZm9yIHRoZSBzb2NrZXQgZ3JvdXAgb3duZXJzaGlwCiAgICAgICovCiAgICAgaWYgKHNvY2tldF9ncm91cCkgewotICAgICAgICBnaWQgPSBhdG9pKHNvY2tldF9ncm91cCk7Ci0gICAgICAgIGlmICggZ2lkID09IDAgKSB7Ci0jaWYgSEFWRV9HRVRHUk5BTSAmJiBIQVZFX0dSUF9ICi0gICAgICAgICAgICBncnAgPSBnZXRncm5hbSggc29ja2V0X2dyb3VwICk7Ci0gICAgICAgICAgICBpZiAoZ3JwKQotICAgICAgICAgICAgICAgIGdpZCA9IGdycC0+Z3JfZ2lkOwotICAgICAgICAgICAgZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJDYW4ndCBpZGVudGlmeSBBZ2VudFggc29ja2V0IGdyb3VwICglcykuXG4iLCBzb2NrZXRfZ3JvdXApOwotICAgICAgICB9CisgICAgICAgIGdpZCA9IG5ldHNubXBfc3RyX3RvX2dpZChzb2NrZXRfZ3JvdXApOwogICAgICAgICBpZiAoIGdpZCAhPSAwICkKICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX0dST1VQLCBnaWQpOwpAQCAtMTQ5LDggKzEyMCwxMiBAQAogdm9pZAogYWdlbnR4X3BhcnNlX2FnZW50eF90aW1lb3V0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGludCB4ID0gYXRvaShjcHRyKTsKKyAgICBpbnQgeCA9IG5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcyhjcHRyKTsKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L2NvbmZpZy90aW1lb3V0IiwgIiVzXG4iLCBjcHRyKSk7CisgICAgaWYgKHggPT0gLTEpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiSW52YWxpZCB0aW1lb3V0IHZhbHVlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1RJTUVPVVQsIHggKiBPTkVfU0VDKTsKIH0KQEAgLTE4NSwxMSArMTYwLDE0IEBACiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoIjphZ2VudHgiLCB0b2tlbiwgcGFyc2VyLCByZWxlYXNlciwgaGVscCk7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZ2VudHhfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRYX1VOUkVHSVNURVJfQ09ORklHX0hBTkRMRVIKIHZvaWQKIGFnZW50eF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnRva2VuKQogewogICAgIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoIjphZ2VudHgiLCB0b2tlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVFhfVU5SRUdJU1RFUl9DT05GSUdfSEFORExFUiAqLwogCiB2b2lkCiBhZ2VudHhfY29uZmlnX2luaXQodm9pZCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9jbGllbnQuYwppbmRleCAxZGJkZDJiLi5kMzZmZTJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2NsaWVudC5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtMTksMTEgKzIwLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMzYsOSArMzMsNiBAQAogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTQ4LDcgKzQyLDcgQEAKICNpbmNsdWRlICJhZ2VudHgvY2xpZW50LmgiCiAjaW5jbHVkZSAiYWdlbnR4L3N1YmFnZW50LmgiCiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzZXRfYWdlbnRfdXB0aW1lKQogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEFnZW50WCBoYW5kbGluZyB1dGlsaXR5IHJvdXRpbmVzCkBAIC02Myw3ICs1Nyw2IEBACiAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICptYWdpYykKIHsKICAgICBzdHJ1Y3Qgc3luY2hfc3RhdGUgKnN0YXRlID0gKHN0cnVjdCBzeW5jaF9zdGF0ZSAqKSBtYWdpYzsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93LCBkaWZmOwogCiAgICAgaWYgKCFzdGF0ZSB8fCByZXFpZCAhPSBzdGF0ZS0+cmVxaWQpIHsKICAgICAgICAgcmV0dXJuIGhhbmRsZV9hZ2VudHhfcGFja2V0KG9wLCBzZXNzaW9uLCByZXFpZCwgcGR1LCBtYWdpYyk7CkBAIC04MCwxNyArNzMsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFN5bmNocm9uaXNlIHN5c1VwVGltZSB3aXRoIHRoZSBtYXN0ZXIgYWdlbnQKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotICAgICAgICAgICAgbm93LnR2X3NlYy0tOwotICAgICAgICAgICAgbm93LnR2X3VzZWMgKz0gMTAwMDAwMEw7Ci0gICAgICAgICAgICBkaWZmLnR2X3NlYyA9IHBkdS0+dGltZSAvIDEwMDsKLSAgICAgICAgICAgIGRpZmYudHZfdXNlYyA9IChwZHUtPnRpbWUgLSAoZGlmZi50dl9zZWMgKiAxMDApKSAqIDEwMDAwOwotICAgICAgICAgICAgc3RhcnR0aW1lLnR2X3NlYyA9IG5vdy50dl9zZWMgLSBkaWZmLnR2X3NlYzsKLSAgICAgICAgICAgIHN0YXJ0dGltZS50dl91c2VjID0gbm93LnR2X3VzZWMgLSBkaWZmLnR2X3VzZWM7Ci0gICAgICAgICAgICBpZiAoc3RhcnR0aW1lLnR2X3VzZWMgPiAxMDAwMDAwTCkgewotICAgICAgICAgICAgICAgIHN0YXJ0dGltZS50dl91c2VjIC09IDEwMDAwMDBMOwotICAgICAgICAgICAgICAgIHN0YXJ0dGltZS50dl9zZWMrKzsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHNubXBfc2V0X2FnZW50X3VwdGltZShwZHUtPnRpbWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChvcCA9PSBORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVCkgewogICAgICAgICBzdGF0ZS0+cGR1ID0gTlVMTDsKQEAgLTIxMiw3ICsxOTUsNyBAQAogICAgIHBkdS0+cmFuZ2Vfc3ViaWQgPSByYW5nZV9zdWJpZDsKICAgICBpZiAoY29udGV4dE5hbWUpIHsKICAgICAgICAgcGR1LT5mbGFncyB8PSBBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVDsKLSAgICAgICAgcGR1LT5jb21tdW5pdHkgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgICAgICBwZHUtPmNvbW11bml0eSA9ICh1X2NoYXIgKikgc3RyZHVwKGNvbnRleHROYW1lKTsKICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gc3RybGVuKGNvbnRleHROYW1lKTsKICAgICB9CiAKQEAgLTI2OSw3ICsyNTIsNyBAQAogICAgIHBkdS0+cmFuZ2Vfc3ViaWQgPSByYW5nZV9zdWJpZDsKICAgICBpZiAoY29udGV4dE5hbWUpIHsKICAgICAgICAgcGR1LT5mbGFncyB8PSBBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVDsKLSAgICAgICAgcGR1LT5jb21tdW5pdHkgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgICAgICBwZHUtPmNvbW11bml0eSA9ICh1X2NoYXIgKikgc3RyZHVwKGNvbnRleHROYW1lKTsKICAgICAgICAgcGR1LT5jb21tdW5pdHlfbGVuID0gc3RybGVuKGNvbnRleHROYW1lKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuYwppbmRleCA2YjBmNjVlLi5jNDJhNDJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5jCkBAIC0xNCw2ICsxNCw3IEBACiAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9JT19ICiAjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgpAQCAtMzEsOSArMzIsNiBAQAogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgpAQCAtNTMsNiArNTEsMTAgQEAKICNpbmNsdWRlICJhZ2VudHgvcHJvdG9jb2wuaCIKICNpbmNsdWRlICJhZ2VudHgvbWFzdGVyX2FkbWluLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1bml4X3NvY2tldF9wYXRocykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZyZWVfYWdlbnRfc25tcF9zZXNzaW9uX2J5X3Nlc3Npb24pCisKIHZvaWQKIHJlYWxfaW5pdF9tYXN0ZXIodm9pZCkKIHsKQEAgLTYwLDEzICs2Miw2IEBACiAgICAgY2hhciAqYWdlbnR4X3NvY2tldHM7CiAgICAgY2hhciAqY3AxOwogCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KLSAgICBpbnQgYWdlbnR4X2Rpcl9wZXJtOwotICAgIGludCBhZ2VudHhfc29ja19wZXJtOwotICAgIGludCBhZ2VudHhfc29ja191c2VyOwotICAgIGludCBhZ2VudHhfc29ja19ncm91cDsKLSNlbmRpZgotCiAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9ST0xFKSAhPSBNQVNURVJfQUdFTlQpCiAgICAgICAgIHJldHVybjsKIApAQCAtOTgsNiArOTMsMTggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfVElNRU9VVCk7CiAgICAgc2Vzcy5yZXRyaWVzID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1JFVFJJRVMpOworCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KKyAgICB7CisJaW50IGFnZW50eF9kaXJfcGVybSA9CisJICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9ESVJfUEVSTSk7CisJaWYgKGFnZW50eF9kaXJfcGVybSA9PSAwKQorCSAgICBhZ2VudHhfZGlyX3Blcm0gPSBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFOworCW5ldHNubXBfdW5peF9jcmVhdGVfcGF0aF93aXRoX21vZGUoYWdlbnR4X2Rpcl9wZXJtKTsKKyAgICB9CisjZW5kaWYKKwogICAgIGNwMSA9IGFnZW50eF9zb2NrZXRzOwogICAgIHdoaWxlIChjcDEpIHsKICAgICAgICAgbmV0c25tcF90cmFuc3BvcnQgKnQ7CkBAIC0xMTEsNDQgKzExOCwxNSBAQAogICAgICAgICBpZiAoY3AxICE9IE5VTEwpIHsKICAgICAgICAgICAgICpjcDErKyA9ICdcMCc7CiAJfQotICAgIAotICAgICAgICBpZiAoc2Vzcy5wZWVybmFtZVswXSA9PSAnLycpIHsKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqICBJZiB0aGlzIGlzIGEgVW5peCBwYXRobmFtZSwKLSAgICAgICAgICAgICAqICB0cnkgYW5kIGNyZWF0ZSB0aGUgZGlyZWN0b3J5IGZpcnN0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBhZ2VudHhfZGlyX3Blcm0gPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX0RJUl9QRVJNKTsKLSAgICAgICAgICAgIGlmIChhZ2VudHhfZGlyX3Blcm0gPT0gMCkKLSAgICAgICAgICAgICAgICBhZ2VudHhfZGlyX3Blcm0gPSBORVRTTk1QX0FHRU5UX0RJUkVDVE9SWV9NT0RFOwotICAgICAgICAgICAgaWYgKG1rZGlyaGllcihzZXNzLnBlZXJuYW1lLCAobW9kZV90KWFnZW50eF9kaXJfcGVybSwgMSkpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gY3JlYXRlIHRoZSBkaXJlY3RvcnkgZm9yIHRoZSBhZ2VudFggc29ja2V0OiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzLnBlZXJuYW1lKTsKLSAgICAgICAgICAgIH0KLSNlbHNlCi0gICAgICAgICAgICBuZXRzbm1wX3Nlc3NfbG9nX2Vycm9yKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5peCBkb21haW4gc3VwcG9ydCBub3QgYXZhaWxhYmxlXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzcyk7Ci0jZW5kaWYKLSAgICAgICAgfQotICAgIAorCiAgICAgICAgIC8qCi0gICAgICAgICAqICBPdGhlcndpc2UsIGxldCAnc25tcF9vcGVuJyBpbnRlcnByZXQgdGhlIHN0cmluZy4KKyAgICAgICAgICogIExldCAnc25tcF9vcGVuJyBpbnRlcnByZXQgdGhlIGRlc2NyaXB0b3IuCiAgICAgICAgICAqLwogICAgICAgICBzZXNzLmxvY2FsX3BvcnQgPSBBR0VOVFhfUE9SVDsgICAgICAvKiBJbmRpY2F0ZSBzZXJ2ZXIgJiBzZXQgZGVmYXVsdCBwb3J0ICovCiAgICAgICAgIHNlc3MucmVtb3RlX3BvcnQgPSAwOwogICAgICAgICBzZXNzLmNhbGxiYWNrID0gaGFuZGxlX21hc3Rlcl9hZ2VudHhfcGFja2V0OwogICAgICAgICBlcnJubyA9IDA7CiAgICAgICAgIHQgPSBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX3NlcnZlcigiYWdlbnR4Iiwgc2Vzcy5wZWVybmFtZSk7Ci0gICAgICAgIGlmICh0ID09IE5VTEwgJiYgZXJybm8gPT0gRUFERFJJTlVTRSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENvdWxkIGJlIGEgbGVmdC1vdmVyIHNvY2tldCAobm93IGRlbGV0ZWQpCi0gICAgICAgICAgICAgKiBUcnkgYWdhaW4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgdCA9IG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyKCJhZ2VudHgiLCBzZXNzLnBlZXJuYW1lKTsKLSAgICAgICAgfQogICAgICAgICBpZiAodCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogZGlhZ25vc2Ugc25tcF9vcGVuIGVycm9ycyB3aXRoIHRoZSBpbnB1dCBuZXRzbm1wX3Nlc3Npb24KQEAgLTE3MSwyMyArMTQ5LDI0IEBACiAgICAgICAgIH0gZWxzZSB7CiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KICAgICAgICAgICAgIGlmICh0LT5kb21haW4gPT0gbmV0c25tcF9Vbml4RG9tYWluICYmIHQtPmxvY2FsICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjaGFyIG5hbWVbc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgKyAxXTsKLSAgICAgICAgICAgICAgICBtZW1jcHkobmFtZSwgdC0+bG9jYWwsIHQtPmxvY2FsX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgbmFtZVt0LT5sb2NhbF9sZW5ndGhdID0gJ1wwJzsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIEFwcGx5IGFueSBzZXR0aW5ncyB0byB0aGUgb3duZXJzaGlwL3Blcm1pc3Npb25zIG9mIHRoZQogICAgICAgICAgICAgICAgICAqIEFnZW50WCBzb2NrZXQKICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBhZ2VudHhfc29ja19wZXJtID0KKyAgICAgICAgICAgICAgICBpbnQgYWdlbnR4X3NvY2tfcGVybSA9CiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tfUEVSTSk7Ci0gICAgICAgICAgICAgICAgYWdlbnR4X3NvY2tfdXNlciA9CisgICAgICAgICAgICAgICAgaW50IGFnZW50eF9zb2NrX3VzZXIgPQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX1VTRVIpOwotICAgICAgICAgICAgICAgIGFnZW50eF9zb2NrX2dyb3VwID0KKyAgICAgICAgICAgICAgICBpbnQgYWdlbnR4X3NvY2tfZ3JvdXAgPQogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX0dST1VQKTsKIAorICAgICAgICAgICAgICAgIGNoYXIgbmFtZVtzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSArIDFdOworICAgICAgICAgICAgICAgIG1lbWNweShuYW1lLCB0LT5sb2NhbCwgdC0+bG9jYWxfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBuYW1lW3QtPmxvY2FsX2xlbmd0aF0gPSAnXDAnOworCiAgICAgICAgICAgICAgICAgaWYgKGFnZW50eF9zb2NrX3Blcm0gIT0gMCkKICAgICAgICAgICAgICAgICAgICAgY2htb2QobmFtZSwgYWdlbnR4X3NvY2tfcGVybSk7CiAKQEAgLTIxMyw2ICsxOTIsMTAgQEAKICAgICAgICAgfQogICAgIH0KIAorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCisgICAgbmV0c25tcF91bml4X2RvbnRfY3JlYXRlX3BhdGgoKTsKKyNlbmRpZgorCiAgICAgU05NUF9GUkVFKGFnZW50eF9zb2NrZXRzKTsKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJpbml0aWFsaXppbmcuLi4gICBET05FXG4iKSk7CiB9CkBAIC0yMzQsNyArMjE3LDcgQEAKIAogICAgIGNhY2hlID0gbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlKGNhY2hlKTsKICAgICBpZiAoIWNhY2hlKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInJlc3BvbnNlIHRvbyBsYXRlIG9uIHNlc3Npb24gJTA4cFxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAicmVzcG9uc2UgdG9vIGxhdGUgb24gc2Vzc2lvbiAlOHBcbiIsCiAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24pKTsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpAQCAtMjQzLDggKzIyNiw4IEBACiAgICAgc3dpdGNoIChvcGVyYXRpb24pIHsKICAgICBjYXNlIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfVElNRURfT1VUOnsKICAgICAgICAgICAgIHZvaWQgICAgICAgICAgICpzID0gc25tcF9zZXNzX3BvaW50ZXIoc2Vzc2lvbik7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJ0aW1lb3V0IG9uIHNlc3Npb24gJTA4cFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInRpbWVvdXQgb24gc2Vzc2lvbiAlOHAgcmVxPTB4JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLCAodW5zaWduZWQpcmVxaWQpKTsKIAogICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEKTsKQEAgLTI4MSwxMCArMjY0LDEwIEBACiAgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX0RJU0NPTk5FQ1Q6CiAgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX1NFTkRfRkFJTEVEOgogICAgICAgICBpZiAob3BlcmF0aW9uID09IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfRElTQ09OTkVDVCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiZGlzY29ubmVjdCBvbiBzZXNzaW9uICUwOHBcbiIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJkaXNjb25uZWN0IG9uIHNlc3Npb24gJThwXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbikpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZCBmYWlsZWQgb24gc2Vzc2lvbiAlMDhwXG4iLAorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZCBmYWlsZWQgb24gc2Vzc2lvbiAlOHBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uKSk7CiAgICAgICAgIH0KICAgICAgICAgY2xvc2VfYWdlbnR4X3Nlc3Npb24oc2Vzc2lvbiwgLTEpOwpAQCAtMzA4LDkgKzI5MSwxMCBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJnb3QgcmVzcG9uc2UgZXJyc3RhdD0lZCwgKHJlcT0weCV4LHRyYW5zPSIKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJnb3QgcmVzcG9uc2UgZXJyc3RhdD0lbGQsIChyZXE9MHgleCx0cmFucz0iCiAgICAgICAgICAgICAgICAgIjB4JXgsc2Vzcz0weCV4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmVycnN0YXQscGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgICAgICAgICAgICAgcGR1LT5lcnJzdGF0LCAodW5zaWduZWQpcGR1LT5yZXFpZCwgKHVuc2lnbmVkKXBkdS0+dHJhbnNpZCwKKwkJKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAKICAgICBpZiAocGR1LT5lcnJzdGF0ICE9IEFHRU5UWF9FUlJfTk9FUlJPUikgewogICAgICAgICAvKiBbUkZDIDI0NzEgLSA3LjIuNS4yLl0KQEAgLTM4Nyw5ICszNzEsOSBAQAogICAgICAgICAgICAgREVCVUdNU0dPSUQoKCJhZ2VudHgvbWFzdGVyIiwgdmFyLT5uYW1lLCB2YXItPm5hbWVfbGVuZ3RoKSk7CiAgICAgICAgICAgICBERUJVR01TRygoImFnZW50eC9tYXN0ZXIiLCAiXG4iKSk7CiAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX1ZFUkJPU0UpKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiICAgID4+ICIpKTsKLSAgICAgICAgICAgICAgICBERUJVR01TR1ZBUigoInNubXBfYWdlbnQiLCB2YXIpKTsKLSAgICAgICAgICAgICAgICBERUJVR01TRygoInNubXBfYWdlbnQiLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiICAgID4+ICIpKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1ZBUigoImFnZW50eC9tYXN0ZXIiLCB2YXIpKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoImFnZW50eC9tYXN0ZXIiLCAiXG4iKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIC8qCkBAIC00ODEsNiArNDY1LDcgQEAKICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKEFHRU5UWF9NU0dfR0VUTkVYVCk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShBR0VOVFhfTVNHX1RFU1RTRVQpOwogICAgICAgICBicmVhazsKQEAgLTUwNCw2ICs0ODksNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKEFHRU5UWF9NU0dfQ0xFQU5VUFNFVCk7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLApAQCAtNjE1LDEyICs2MDEsMTEgQEAKICAgICAvKgogICAgICAqIHNlbmQgdGhlIHJlcXVlc3RzIG91dC4KICAgICAgKi8KLSAgICBERUJVR01TR1RMKCgiYWdlbnR4IiwgInNlbmRpbmcgcGR1IChyZXE9MHgleCx0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgcGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZGluZyBwZHUgKHJlcT0weCV4LHRyYW5zPTB4JXgsc2Vzcz0weCV4KVxuIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQpcGR1LT5yZXFpZCwgKHVuc2lnbmVkKXBkdS0+dHJhbnNpZCwgKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAgICAgcmVzdWx0ID0gc25tcF9hc3luY19zZW5kKGF4X3Nlc3Npb24sIHBkdSwgYWdlbnR4X2dvdF9yZXNwb25zZSwgY2JfZGF0YSk7Ci0KLSAgICBpZiAocmVzdWx0ID09IDAgKSB7Ci0gICAgICAgIHNubXBfZnJlZV9wZHUoIHBkdSApOworICAgIGlmIChyZXN1bHQgPT0gMCkgeworICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmggYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyLmgKaW5kZXggYjZhN2Y2Yi4uYTVkYmZhZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlci5oCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXIuaApAQCAtNyw3ICs3LDYgQEAKIGNvbmZpZ19yZXF1aXJlKGFnZW50eC9jbGllbnQpCiBjb25maWdfcmVxdWlyZShhZ2VudHgvbWFzdGVyX2FkbWluKQogY29uZmlnX3JlcXVpcmUoYWdlbnR4L2FnZW50eF9jb25maWcpCi1jb25maWdfcmVxdWlyZShtaWJJSS9zeXNPUlRhYmxlKQogCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X21hc3Rlcih2b2lkKTsKICAgICAgdm9pZCAgICAgICAgICAgIHJlYWxfaW5pdF9tYXN0ZXIodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMgYi9hZ2VudC9taWJncm91cC9hZ2VudHgvbWFzdGVyX2FkbWluLmMKaW5kZXggMTJkZGI1ZC4uNGVhZWFiNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L21hc3Rlcl9hZG1pbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9tYXN0ZXJfYWRtaW4uYwpAQCAtMiw2ICsyLDcgQEAKICAqICBBZ2VudFggQWRtaW5pc3RyYXRpdmUgcmVxdWVzdCBoYW5kbGluZwogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmZGVmIEhBVkVfU1RSSU5HX0gKQEAgLTEzLDExICsxNCw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTI5LDkgKzI2LDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTQ1LDEyICszOSwxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2luZGV4Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CiAjaW5jbHVkZSAibWFzdGVyLmgiCiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7Ci0KLQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodW5yZWdpc3Rlcl9taWJfdGFibGVfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodHJhcF92YXJzX3dpdGhfY29udGV4dCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShhbGxvY2F0ZV9nbG9iYWxjYWNoZWlkKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVtb3ZlX2luZGV4KQogCiBuZXRzbm1wX3Nlc3Npb24gKgogZmluZF9hZ2VudHhfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBpbnQgc2Vzc2lkKQpAQCAtNjgsOSArNjQsOCBAQAogb3Blbl9hZ2VudHhfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1KQogewogICAgIG5ldHNubXBfc2Vzc2lvbiAqc3A7Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKIAotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW4gJTA4cFxuIiwgc2Vzc2lvbikpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW4gJThwXG4iLCBzZXNzaW9uKSk7CiAgICAgc3AgPSAobmV0c25tcF9zZXNzaW9uICopIG1hbGxvYyhzaXplb2YobmV0c25tcF9zZXNzaW9uKSk7CiAgICAgaWYgKHNwID09IE5VTEwpIHsKICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gQUdFTlRYX0VSUl9PUEVOX0ZBSUxFRDsKQEAgLTEwOCw4ICsxMDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuZ3RoKTsKICAgICBzcC0+c2VjdXJpdHlBdXRoUHJvdG9MZW4gPSBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGg7CiAgICAgc3AtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgoY2hhciAqKSBwZHUtPnZhcmlhYmxlcy0+dmFsLnN0cmluZyk7Ci0gICAgZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOwotICAgIHNwLT5lbmdpbmVUaW1lID0gY2FsY3VsYXRlX3RpbWVfZGlmZigmbm93LCAmc3RhcnR0aW1lKTsKKyAgICBzcC0+ZW5naW5lVGltZSA9ICh1aW50MzJfdCkoKG5ldHNubXBfZ2V0X2FnZW50X3J1bnRpbWUoKSArIDUwKSAvIDEwMCkgJiAweDdmZmZmZmZmTDsKIAogICAgIHNwLT5zdWJzZXNzaW9uID0gc2Vzc2lvbjsgICAvKiBsaW5rIGJhY2sgdG8gaGVhZCAqLwogICAgIHNwLT5mbGFncyB8PSBTTk1QX0ZMQUdTX1NVQlNFU1NJT047CkBAIC0xMTcsNyArMTExLDcgQEAKICAgICBzcC0+ZmxhZ3MgfD0gKHBkdS0+ZmxhZ3MgJiBBR0VOVFhfTVNHX0ZMQUdfTkVUV09SS19CWVRFX09SREVSKTsKICAgICBzcC0+bmV4dCA9IHNlc3Npb24tPnN1YnNlc3Npb247CiAgICAgc2Vzc2lvbi0+c3Vic2Vzc2lvbiA9IHNwOwotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgIm9wZW5lZCAlMDhwID0gJWQgd2l0aCBmbGFncyA9ICUwMnhcbiIsCisgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAib3BlbmVkICU4cCA9ICVsZCB3aXRoIGZsYWdzID0gJTAybHhcbiIsCiAgICAgICAgICAgICAgICAgc3AsIHNwLT5zZXNzaWQsIHNwLT5mbGFncyAmIEFHRU5UWF9NU0dfRkxBR1NfTUFTSykpOwogCiAgICAgcmV0dXJuIHNwLT5zZXNzaWQ7CkBAIC0xMzEsNyArMTI1LDcgQEAKICAgICBpZiAoIXNlc3Npb24pCiAgICAgICAgIHJldHVybiBBR0VOVFhfRVJSX05PVF9PUEVOOwogCi0gICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiY2xvc2UgJTA4cCwgJWRcbiIsIHNlc3Npb24sIHNlc3NpZCkpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImNsb3NlICU4cCwgJWRcbiIsIHNlc3Npb24sIHNlc3NpZCkpOwogICAgIGlmIChzZXNzaWQgPT0gLTEpIHsKICAgICAgICAgLyoKICAgICAgICAgICogVGhlIGZvbGxvd2luZyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQgbG9ja2luZyB1cCB0aGUgYWdlbnQgd2hlbgpAQCAtMTQ5LDkgKzE0Myw3IEBACiAgICAgICAgICAgICAgICAgCiAgICAgICAgIHVucmVnaXN0ZXJfbWlic19ieV9zZXNzaW9uKHNlc3Npb24pOwogICAgICAgICB1bnJlZ2lzdGVyX2luZGV4X2J5X3Nlc3Npb24oc2Vzc2lvbik7Ci0gICAgICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1JfU0VTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopc2Vzc2lvbik7CisgICAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKHNlc3Npb24pOwogCVNOTVBfRlJFRShzZXNzaW9uLT5teXZvaWQpOwogICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT0VSUk9SOwogICAgIH0KQEAgLTE2Myw5ICsxNTUsNyBAQAogICAgICAgICBpZiAoc3AtPnNlc3NpZCA9PSBzZXNzaWQpIHsKICAgICAgICAgICAgIHVucmVnaXN0ZXJfbWlic19ieV9zZXNzaW9uKHNwKTsKICAgICAgICAgICAgIHVucmVnaXN0ZXJfaW5kZXhfYnlfc2Vzc2lvbihzcCk7Ci0gICAgICAgICAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUl9TRVNTLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopc3ApOworICAgICAgICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX2J5X3Nlc3Npb24oc3ApOwogCiAgICAgICAgICAgICAqcHJldk5leHQgPSBzcC0+bmV4dDsKIApAQCAtMTc4LDcgKzE2OCw3IEBACiAgICAgICAgICAgICBmcmVlKHNwKTsKICAgICAgICAgICAgIHNwID0gTlVMTDsKIAotICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAiY2xvc2VkICUwOHAsICVkIG9rYXlcbiIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJjbG9zZWQgJThwLCAlZCBva2F5XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbiwgc2Vzc2lkKSk7CiAgICAgICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT0VSUk9SOwogICAgICAgICB9CkBAIC0yMzMsNyArMjIzLDcgQEAKICAgICByZWctPmhhbmRsZXItPm15dm9pZCA9IHNlc3Npb247CiAgICAgcmVnLT5nbG9iYWxfY2FjaGVpZCA9IGNhY2hlaWQ7CiAgICAgaWYgKE5VTEwgIT0gcGR1LT5jb21tdW5pdHkpCi0gICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAocGR1LT5jb21tdW5pdHkpOworICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKChjaGFyICopcGR1LT5jb21tdW5pdHkpOwogCiAgICAgLyoKICAgICAgKiByZWdpc3RlciBtaWIuIE5vdGUgdGhhdCBmb3IgZmFpbHVyZSBjYXNlcywgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvCkBAIC0zODAsMjAgKzM3MCwxNyBAQAogYWRkX2FnZW50X2NhcHNfbGlzdChuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBuZXRzbm1wX3BkdSAqcGR1KQogewogICAgIG5ldHNubXBfc2Vzc2lvbiAqc3A7Ci0gICAgc3RydWN0IHN5c09SVGFibGUgcGFybXM7CisgICAgY2hhciogZGVzY3JpcHRpb247CiAKICAgICBzcCA9IGZpbmRfYWdlbnR4X3Nlc3Npb24oc2Vzc2lvbiwgcGR1LT5zZXNzaWQpOwogICAgIGlmIChzcCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gQUdFTlRYX0VSUl9OT1RfT1BFTjsKIAotICAgIHBhcm1zLk9SX29pZCA9IHBkdS0+dmFyaWFibGVzLT5uYW1lOwotICAgIHBhcm1zLk9SX29pZGxlbiA9IHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aDsKLSAgICBwYXJtcy5PUl9kZXNjciAgPSBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbChwZHUtPnZhcmlhYmxlcy0+dmFsLnN0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+dmFsX2xlbik7Ci0gICAgcGFybXMuT1Jfc2VzcyA9IHNwOwotICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9SRUdfU1lTT1IsICh2b2lkKikmcGFybXMpOwotICAgIGZyZWUocGFybXMuT1JfZGVzY3IpOworICAgIGRlc2NyaXB0aW9uID0gbmV0c25tcF9zdHJkdXBfYW5kX251bGwocGR1LT52YXJpYWJsZXMtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+dmFsX2xlbik7CisgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKHBkdS0+dmFyaWFibGVzLT5uYW1lLCBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0aW9uLCBzcCk7CisgICAgZnJlZShkZXNjcmlwdGlvbik7CiAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9FUlJPUjsKIH0KIApAQCAtNDAxLDMyICszODgsMjggQEAKIHJlbW92ZV9hZ2VudF9jYXBzX2xpc3QobmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgbmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNwOwotICAgIHN0cnVjdCBzeXNPUlRhYmxlIHBhcm1zOworICAgIGludCByYzsKIAogICAgIHNwID0gZmluZF9hZ2VudHhfc2Vzc2lvbihzZXNzaW9uLCBwZHUtPnNlc3NpZCk7CiAgICAgaWYgKHNwID09IE5VTEwpCiAgICAgICAgIHJldHVybiBBR0VOVFhfRVJSX05PVF9PUEVOOwogCi0gICAgcGFybXMuT1Jfb2lkID0gcGR1LT52YXJpYWJsZXMtPm5hbWU7Ci0gICAgcGFybXMuT1Jfb2lkbGVuID0gcGR1LT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoOwotICAgIHBhcm1zLk9SX3Nlc3MgPSBzcDsKLSAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1IsICh2b2lkKikmcGFybXMpOwotICAgIC8qCi0gICAgICogbm8gZWFzeSB3YXkgdG8gZ2V0IGFuIGVycm9yIGNvZGUuLi4KLSAgICAgKiBpZiAocmMgPCAwKQotICAgICAqICAgcmV0dXJuIEFHRU5UWF9FUlJfVU5LTk9XTl9BR0VOVENBUFM7Ci0gICAgICovCisgICAgcmMgPSB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwZHUtPnZhcmlhYmxlcy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCwgc3ApOworCisgICAgaWYgKHJjIDwgMCkKKyAgICAgIHJldHVybiBBR0VOVFhfRVJSX1VOS05PV05fQUdFTlRDQVBTOworCiAgICAgcmV0dXJuIEFHRU5UWF9FUlJfTk9FUlJPUjsKIH0KIAogaW50CiBhZ2VudHhfbm90aWZ5KG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUpCiB7Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzcDsKKyAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgKnNwOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOwotICAgIGV4dGVybiBvaWQgICAgICBzeXN1cHRpbWVfb2lkW10sIHNubXB0cmFwX29pZFtdOwotICAgIGV4dGVybiBzaXplX3QgICBzeXN1cHRpbWVfb2lkX2xlbiwgc25tcHRyYXBfb2lkX2xlbjsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgIHN5c3VwdGltZV9vaWRbXSwgc25tcHRyYXBfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IHNpemVfdCAgICBzeXN1cHRpbWVfb2lkX2xlbiwgc25tcHRyYXBfb2lkX2xlbjsKIAogICAgIHNwID0gZmluZF9hZ2VudHhfc2Vzc2lvbihzZXNzaW9uLCBwZHUtPnNlc3NpZCk7CiAgICAgaWYgKHNwID09IE5VTEwpCkBAIC00NTQsNyArNDM3LDE4IEBACiAgICAgICogICAgIGFzIHRoaXMgaXMgdmFsaWQgQWdlbnRYIHN5bnRheC4KICAgICAgKi8KIAotICAgIHNlbmRfdHJhcF92YXJzKC0xLCAtMSwgcGR1LT52YXJpYWJsZXMpOworCS8qIElmIGEgY29udGV4dCBuYW1lIHdhcyBzcGVjaWZpZWQsIHNlbmQgdGhlIHRyYXAgdXNpbmcgdGhhdCBjb250ZXh0LgorCSAqIE90aGVyd2lzZSwgc2VuZCB0aGUgdHJhcCB3aXRob3V0IHRoZSBjb250ZXh0IHVzaW5nIHRoZSBvbGQgbWV0aG9kICovCisJaWYgKHBkdS0+Y29udGV4dE5hbWUgIT0gTlVMTCkKKwl7CisgICAgICAgIHNlbmRfdHJhcF92YXJzX3dpdGhfY29udGV4dCgtMSwgLTEsIHBkdS0+dmFyaWFibGVzLCAKKyAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5jb250ZXh0TmFtZSk7CisJfQorCWVsc2UKKwl7CisgICAgICAgIHNlbmRfdHJhcF92YXJzKC0xLCAtMSwgcGR1LT52YXJpYWJsZXMpOworCX0KKwogICAgIHJldHVybiBBR0VOVFhfRVJSX05PRVJST1I7CiB9CiAKQEAgLTQ3NywxNiArNDcxLDE5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICptYWdpYykKIHsKICAgICBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwogCiAgICAgaWYgKG9wZXJhdGlvbiA9PSBORVRTTk1QX0NBTExCQUNLX09QX0RJU0NPTk5FQ1QpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLAotICAgICAgICAgICAgICAgICAgICAidHJhbnNwb3J0IGRpc2Nvbm5lY3Qgb24gc2Vzc2lvbiAlMDhwXG4iLCBzZXNzaW9uKSk7CisgICAgICAgICAgICAgICAgICAgICJ0cmFuc3BvcnQgZGlzY29ubmVjdCBvbiBzZXNzaW9uICU4cFxuIiwgc2Vzc2lvbikpOwogICAgICAgICAvKgogICAgICAgICAgKiBTaHV0IHRoaXMgc2Vzc2lvbiBkb3duIGdyYWNlZnVsbHkuICAKICAgICAgICAgICovCiAgICAgICAgIGNsb3NlX2FnZW50eF9zZXNzaW9uKHNlc3Npb24sIC0xKTsKICAgICAgICAgcmV0dXJuIDE7CisgICAgfSBlbHNlIGlmIChvcGVyYXRpb24gPT0gTkVUU05NUF9DQUxMQkFDS19PUF9DT05ORUNUKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwKKyAgICAgICAgICAgICAgICAgICAgInRyYW5zcG9ydCBjb25uZWN0IG9uIHNlc3Npb24gJThwXG4iLCBzZXNzaW9uKSk7CisgICAgICAgIHJldHVybiAxOwogICAgIH0gZWxzZSBpZiAob3BlcmF0aW9uICE9IE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJ1bmV4cGVjdGVkIGNhbGxiYWNrIG9wICVkXG4iLAogICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb24pKTsKQEAgLTUwMyw4ICs1MDAsOSBAQAogICAgICAgICBhc3AgPSBpbml0X2FnZW50X3NubXBfc2Vzc2lvbihzZXNzaW9uLCBwZHUpOwogICAgIH0KIAotICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgImhhbmRsZSBwZHUgKHJlcT0weCV4LHRyYW5zPTB4JXgsc2Vzcz0weCV4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPnJlcWlkLHBkdS0+dHJhbnNpZCwgcGR1LT5zZXNzaWQpKTsKKyAgICBERUJVR01TR1RMKCgiYWdlbnR4L21hc3RlciIsICJoYW5kbGUgcGR1IChyZXE9MHglbHgsdHJhbnM9MHglbHgsc2Vzcz0weCVseClcbiIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpcGR1LT5yZXFpZCwgKHVuc2lnbmVkIGxvbmcpcGR1LT50cmFuc2lkLAorCQkodW5zaWduZWQgbG9uZylwZHUtPnNlc3NpZCkpOwogICAgIAogICAgIHN3aXRjaCAocGR1LT5jb21tYW5kKSB7CiAgICAgY2FzZSBBR0VOVFhfTVNHX09QRU46CkBAIC01NzUsMTMgKzU3MywxMyBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0gICAgYXNwLT5wZHUtPnRpbWUgPSBjYWxjdWxhdGVfdGltZV9kaWZmKCZub3csICZzdGFydHRpbWUpOworICAgIGFzcC0+cGR1LT50aW1lID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CiAgICAgYXNwLT5wZHUtPmNvbW1hbmQgPSBBR0VOVFhfTVNHX1JFU1BPTlNFOwogICAgIGFzcC0+cGR1LT5lcnJzdGF0ID0gYXNwLT5zdGF0dXM7Ci0gICAgREVCVUdNU0dUTCgoImFnZW50eC9tYXN0ZXIiLCAic2VuZCByZXNwb25zZSwgc3RhdCAlZCAocmVxPTB4JXgsdHJhbnM9IgotICAgICAgICAgICAgICAgICIweCV4LHNlc3M9MHgleClcbiIsCi0gICAgICAgICAgICAgICAgYXNwLT5zdGF0dXMsIHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvbWFzdGVyIiwgInNlbmQgcmVzcG9uc2UsIHN0YXQgJWQgKHJlcT0weCVseCx0cmFucz0iCisgICAgICAgICAgICAgICAgIjB4JWx4LHNlc3M9MHglbHgpXG4iLAorICAgICAgICAgICAgICAgIGFzcC0+c3RhdHVzLCAodW5zaWduZWQgbG9uZylwZHUtPnJlcWlkLAorCQkodW5zaWduZWQgbG9uZylwZHUtPnRyYW5zaWQsICh1bnNpZ25lZCBsb25nKXBkdS0+c2Vzc2lkKSk7CiAgICAgaWYgKCFzbm1wX3NlbmQoYXNwLT5zZXNzaW9uLCBhc3AtPnBkdSkpIHsKICAgICAgICAgY2hhciAgICAgICAgICAgKmViID0gTlVMTDsKICAgICAgICAgaW50ICAgICAgICAgICAgIHBlLCBwc2U7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuYyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jCmluZGV4IGE0ODI3NzAuLjA4NDVjZjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5jCkBAIC0yNiwxMSArMjYsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC00NiwxMCArNDIsNiBAQAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgImFnZW50eC9wcm90b2NvbC5oIgpAQCAtMTM1LDcgKzEyNyw3IEBACiAjZW5kaWYKICAgICB9CiAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArIGlsZW4pLCA0KTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWx1ICgweCUuMmxYKVxuIiwgaXZhbHVlLAorICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIEludGVnZXI6XHQldSAoMHglLjJYKVxuIiwgaXZhbHVlLAogICAgICAgICAgICAgICBpdmFsdWUpKTsKICAgICByZXR1cm4gMTsKIH0KQEAgLTE2OCw3ICsxNjAsNyBAQAogI2VuZGlmCiAgICAgfQogICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgb3JpZ19idWZwLCA0KTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCBvcmlnX3ZhbCwKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JXUgKDB4JS4yWClcbiIsIG9yaWdfdmFsLAogICAgICAgICAgICAgICBvcmlnX3ZhbCkpOwogfQogCkBAIC0yNjQsOCArMjU2LDggQEAKIAogICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJPSUQgSGVhZGVyIik7CiAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArIGlsZW4pLCA0KTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICAjIHN1YmlkczpcdCVkICgweCUuMlgpXG4iLCBuYW1lX2xlbiwKLSAgICAgICAgICAgICAgbmFtZV9sZW4pKTsKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICAjIHN1YmlkczpcdCVkICgweCUuMlgpXG4iLCAoaW50KW5hbWVfbGVuLAorICAgICAgICAgICAgICAodW5zaWduZWQgaW50KW5hbWVfbGVuKSk7CiAgICAgREVCVUdQUklOVElOREVOVCgiZHVtcHZfc2VuZCIpOwogICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIHByZWZpeDpcdCVkICgweCUuMlgpXG4iLCBwcmVmaXgsIHByZWZpeCkpOwogICAgIERFQlVHUFJJTlRJTkRFTlQoImR1bXB2X3NlbmQiKTsKQEAgLTQ0OSw2ICs0NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT5uYW1lLCB2cC0+bmFtZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0d29ya19vcmRlcikpIHsKICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CisgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAgICAgREVCVUdJTkRFTlRMRVNTKCk7CkBAIC00ODgsNyArNDgxLDcgQEAKICAgICBjYXNlIEFTTl9PUEFRVUVfRE9VQkxFOgogICAgICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiQnVpbGQgT3BhcXVlIERvdWJsZSIpOwogICAgICAgICBERUJVR1BSSU5USU5ERU5UKCJkdW1wdl9zZW5kIik7Ci0gICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIERvdWJsZTpcdCVsZlxuIiwgKih2cC0+dmFsLmRvdWJsZVZhbCkpKTsKKyAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgRG91YmxlOlx0JWZcbiIsICoodnAtPnZhbC5kb3VibGVWYWwpKSk7CiAgICAgICAgIGlmICghYWdlbnR4X3JlYWxsb2NfYnVpbGRfZG91YmxlCiAgICAgICAgICAgICAoYnVmLCBidWZfbGVuLCBvdXRfbGVuLCBhbGxvd19yZWFsbG9jLCAqKHZwLT52YWwuZG91YmxlVmFsKSwKICAgICAgICAgICAgICBuZXR3b3JrX29yZGVyKSkgewpAQCAtNTQ4LDYgKzU0MSw3IEBACiAgICAgICAgICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJCdWlsZCBDb3VudGVyNjQgKGxvdywgaGlnaCkiKTsKICAgICAgICAgICAgIGlmICghYWdlbnR4X3JlYWxsb2NfYnVpbGRfaW50CkBAIC01NjIsNiArNTU2LDcgQEAKICAgICAgICAgICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC02OTksNiArNjk0LDE3IEBACiAgICAgICAgIHBkdS0+ZmxhZ3MgJj0gfihBR0VOVFhfTVNHX0ZMQUdfTk9OX0RFRkFVTFRfQ09OVEVYVCk7CiAgICAgfQogCisJLyogV2UndmUgcmVjZWl2ZWQgYSBQRFUgdGhhdCBoYXMgc3BlY2lmaWVkIGEgY29udGV4dC4gIE5ldFNOTVAgaG93ZXZlciwgdXNlcworCSAqIHRoZSBwZHUtPmNvbW11bml0eSBmaWVsZCB0byBzcGVjaWZ5IGNvbnRleHQgd2hlbiB1c2luZyB0aGUgQWdlbnRYCisJICogcHJvdG9jb2wuICBUaGVyZWZvcmUgd2UgbmVlZCB0byBjb3B5IHRoZSBjb250ZXh0IG5hbWUgYW5kIGxlbmd0aCBpbnRvIHRoZQorCSAqIHBkdS0+Y29tbXVuaXR5IGFuZCBwZHUtPmNvbW11bml0eV9sZW4gZmllbGRzLCByZXNwZWN0aXZlbHkuICovCisJaWYgKHBkdS0+Y29udGV4dE5hbWUgIT0gTlVMTCAmJiBwZHUtPmNvbW11bml0eSA9PSBOVUxMKQorCXsJCisJCXBkdS0+Y29tbXVuaXR5ICAgICA9ICh1X2NoYXIgKikgc3RyZHVwKHBkdS0+Y29udGV4dE5hbWUpOworCQlwZHUtPmNvbW11bml0eV9sZW4gPSBwZHUtPmNvbnRleHROYW1lTGVuOworCQlwZHUtPmZsYWdzIHw9IEFHRU5UWF9NU0dfRkxBR19OT05fREVGQVVMVF9DT05URVhUOworCX0KKwogICAgIC8qCiAgICAgICogQnVpbGQgdGhlIGhlYWRlciAoYW5kIGNvbnRleHQgaWYgYXBwcm9wcmlhdGUpLiAgCiAgICAgICovCkBAIC05MDIsNyArOTA4LDcgQEAKICAgICAgICAgfQogICAgICAgICBERUJVR0RVTVBIRUFERVIoInNlbmQiLCAiUmVzcG9uc2UiKTsKICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArICpvdXRfbGVuIC0gNCksIDQpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBzeXNVcFRpbWU6XHQlZFxuIiwgcGR1LT50aW1lKSk7CisgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIHN5c1VwVGltZTpcdCVsdVxuIiwgcGR1LT50aW1lKSk7CiAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogCiAgICAgICAgIGlmICghYWdlbnR4X3JlYWxsb2NfYnVpbGRfc2hvcnQKQEAgLTkxOCw5ICs5MjQsOSBAQAogICAgICAgICB9CiAgICAgICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJSZXNwb25zZSBlcnJvcnMiKTsKICAgICAgICAgREVCVUdEVU1QU0VUVVAoInNlbmQiLCAoKmJ1ZiArICpvdXRfbGVuIC0gNCksIDQpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJzdGF0Olx0JWRcbiIsIHBkdS0+ZXJyc3RhdCkpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJzdGF0Olx0JWxkXG4iLCBwZHUtPmVycnN0YXQpKTsKICAgICAgICAgREVCVUdQUklOVElOREVOVCgiZHVtcHZfc2VuZCIpOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBlcnJpbmRleDpcdCVkXG4iLCBwZHUtPmVycmluZGV4KSk7CisgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIGVycmluZGV4Olx0JWxkXG4iLCBwZHUtPmVycmluZGV4KSk7CiAgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogCiAgICAgICAgIC8qCkBAIC0xMDYzLDcgKzEwNjksNyBAQAogICAgICAgICB2YWx1ZSArPSBkYXRhWzBdOwogI2VuZGlmCiAgICAgfQotICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIEludGVnZXI6XHQldSAoMHglLjJYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CiAKICAgICByZXR1cm4gdmFsdWU7CiB9CkBAIC0xMDk0LDcgKzExMDAsNyBAQAogICAgIH0KIAogICAgIERFQlVHRFVNUFNFVFVQKCJyZWN2IiwgZGF0YSwgMik7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIiAgU2hvcnQ6XHQlbGQgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIFNob3J0Olx0JWh1ICgweCUuMlgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKQEAgLTExNDAsNyArMTE0Niw3IEBACiAgICAgKmxlbmd0aCAtPSA0OwogCiAgICAgREVCVUdNU0coKCJkanAiLCAiICBwYXJzZV9vaWRcbiIpKTsKLSAgICBERUJVR01TRygoImRqcCIsICIgIHNpemVvZihvaWQpID0gJWRcbiIsIHNpemVvZihvaWQpKSk7CisgICAgREVCVUdNU0coKCJkanAiLCAiICBzaXplb2Yob2lkKSA9ICVkXG4iLCAoaW50KXNpemVvZihvaWQpKSk7CiAgICAgaWYgKG5fc3ViaWQgPT0gMCAmJiBwcmVmaXggPT0gMCkgewogICAgICAgICAvKgogICAgICAgICAgKiBOdWxsIE9JRCAKQEAgLTExNTgsNyArMTE2NCw5IEBACiAgICAgICovCiAgICAgdG1wX29pZF9sZW4gPSAocHJlZml4ID8gbl9zdWJpZCArIDUgOiBuX3N1YmlkKTsKICAgICBpZiAoKm9pZF9sZW4gPCB0bXBfb2lkX2xlbikgewotICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4IiwgIk92ZXJzaXplZCBPYmplY3QgSURcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJPdmVyc2l6ZWQgT2JqZWN0IElEIChidWY9JSIgTkVUU05NUF9QUkl6ICJkIgorCQkgICAgIiBwZHU9JWQpXG4iLCAqb2lkX2xlbiwgdG1wX29pZF9sZW4pKTsKKyAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIApAQCAtMTE2OSw2ICsxMTc3LDcgQEAKICNlbmRpZgogICAgIGlmICgqbGVuZ3RoIDwgNCAqIG5fc3ViaWQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJJbmNvbXBsZXRlIE9iamVjdCBJRFxuIikpOworICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCkBAIC0xMjI3LDE0ICsxMjM2LDE0IEBACiAKICAgICBpZiAoKmxlbmd0aCA8IDQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJJbmNvbXBsZXRlIHN0cmluZyAodG9vIHNob3J0OiAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICpsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCkqbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIGxlbiA9IGFnZW50eF9wYXJzZV9pbnQoZGF0YSwgbmV0d29ya19ieXRlX29yZGVyKTsKICAgICBpZiAoKmxlbmd0aCA8IGxlbiArIDQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eCIsICJJbmNvbXBsZXRlIHN0cmluZyAoc3RpbGwgdG9vIHNob3J0OiAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICpsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCkqbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBpZiAobGVuID4gKnN0cl9sZW4pIHsKQEAgLTEzMjIsNyArMTMzMSw3IEBACiAgICAgICAgICpvcGFxdWVfbGVuID0gc2l6ZW9mKGRvdWJsZSk7CiAgICAgICAgIG1lbWNweShvcGFxdWVfYnVmLCAmZnUuY1swXSwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICAqdHlwZSA9IEFTTl9PUEFRVUVfRE9VQkxFOwotICAgICAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiRG91YmxlOiAlbGZcbiIsIGZ1LmRvdWJsZVZhbCkpOworICAgICAgICBERUJVR01TRygoImR1bXB2X3JlY3YiLCAiRG91YmxlOiAlZlxuIiwgZnUuZG91YmxlVmFsKSk7CiAgICAgICAgIHJldHVybiBjcDsKIAogICAgIGNhc2UgQVNOX09QQVFVRV9JNjQ6CkBAIC0xMzQ1LDggKzEzNTQsNiBAQAogewogICAgIHVfY2hhciAgICAgICAgICpidWZwID0gZGF0YTsKICAgICB1X2ludCAgICAgICAgICAgaW50X3ZhbDsKLSAgICBpbnQgICAgICAgICAgICBpbnRfb2Zmc2V0OwotICAgIHVfaW50ICAgICAgICAgICppbnRfcHRyID0gKHVfaW50ICopIGRhdGFfYnVmOwogICAgIHN0cnVjdCBjb3VudGVyNjQgdG1wNjQ7CiAKICAgICBERUJVR0RVTVBIRUFERVIoInJlY3YiLCAiVmFyQmluZDoiKTsKQEAgLTE0MDEsMTYgKzE0MDgsMTYgQEAKIAogICAgIGNhc2UgQVNOX0NPVU5URVI2NDoKICAgICAgICAgbWVtc2V0KCZ0bXA2NCwgMCwgc2l6ZW9mKHRtcDY0KSk7Ci0gICAgICAgIGlmIChuZXR3b3JrX2J5dGVfb3JkZXIpIHsKLSAgICAgICAgICAgIHRtcDY0LmhpZ2ggPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnAsICAgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgICAgIHRtcDY0LmxvdyAgPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnArNCwgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHRtcDY0LmhpZ2ggPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnArNCwgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgICAgIHRtcDY0LmxvdyAgPSBhZ2VudHhfcGFyc2VfaW50KGJ1ZnAsICAgbmV0d29ya19ieXRlX29yZGVyKTsKLSAgICAgICAgfQorCWlmIChuZXR3b3JrX2J5dGVfb3JkZXIpIHsKKwkgICAgdG1wNjQuaGlnaCA9IGFnZW50eF9wYXJzZV9pbnQoYnVmcCwgICBuZXR3b3JrX2J5dGVfb3JkZXIpOworCSAgICB0bXA2NC5sb3cgID0gYWdlbnR4X3BhcnNlX2ludChidWZwKzQsIG5ldHdvcmtfYnl0ZV9vcmRlcik7CisJfSBlbHNlIHsKKwkgICAgdG1wNjQuaGlnaCA9IGFnZW50eF9wYXJzZV9pbnQoYnVmcCs0LCBuZXR3b3JrX2J5dGVfb3JkZXIpOworCSAgICB0bXA2NC5sb3cgID0gYWdlbnR4X3BhcnNlX2ludChidWZwLCAgIG5ldHdvcmtfYnl0ZV9vcmRlcik7CisJfQogCiAgICAgICAgIG1lbWNweShkYXRhX2J1ZiwgJnRtcDY0LCBzaXplb2YodG1wNjQpKTsKLSAgICAgICAgKmRhdGFfbGVuID0gc2l6ZW9mKHRtcDY0KTsKKwkqZGF0YV9sZW4gPSBzaXplb2YodG1wNjQpOwogCWJ1ZnAgICAgKz0gODsKIAkqbGVuZ3RoIC09IDg7CiAgICAgICAgIGJyZWFrOwpAQCAtMTUyOSw2ICsxNTM2LDcgQEAKICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICBidWZwICs9IDQ7CiAKKyAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAqbGVuZ3RoIC09IDIwOwogICAgIGlmICgqbGVuZ3RoICE9IHBheWxvYWQpIHsgICAvKiBTaG9ydCBwYXlsb2FkICovCiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTYwNCwxMSArMTYxMiwyMSBAQAogICAgICAgICBwZHUtPmNvbW11bml0eV9sZW4gPSBidWZfbGVuOwogICAgICAgICBzbm1wX2Nsb25lX21lbSgodm9pZCAqKikgJnBkdS0+Y29tbXVuaXR5LAogICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAqKSBidWZmZXIsICh1bnNpZ25lZCkgYnVmX2xlbik7CisJCQorCQkvKiBUaGUgTmV0U05NUCBBUEkgc3R1ZmZzIHRoZSBjb250ZXh0IGludG8gdGhlIFBEVSdzIGNvbW11bml0eSBzdHJpbmcKKwkJICogZmllbGQsIHdoZW4gdXNpbmcgdGhlIEFnZW50WCBQcm90b2NvbC4gIFRoZSByZXN0IG9mIHRoZSBjb2RlIGhvd2V2ZXIsCisJCSAqIGV4cGVjdHMgdG8gZmluZCB0aGUgY29udGV4dCBpbiB0aGUgUERVJ3MgY29udGV4dCBmaWVsZC4gIFRoZXJlZm9yZSB3ZQorCQkgKiBuZWVkIHRvIGNvcHkgdGhlIGNvbnRleHQgaW50byB0aGUgUERVJ3MgY29udGV4dCBmaWVsZHMuICAqLworCQlpZiAocGR1LT5jb21tdW5pdHlfbGVuID4gMCAmJiBwZHUtPmNvbnRleHROYW1lID09IE5VTEwpCisJCXsKKwkJCXBkdS0+Y29udGV4dE5hbWUgICAgPSBzdHJkdXAoKGNoYXIgKikgcGR1LT5jb21tdW5pdHkpOworCQkJcGR1LT5jb250ZXh0TmFtZUxlbiA9IHBkdS0+Y29tbXVuaXR5X2xlbjsKKwkJfQorCiAgICAgICAgIGJ1Zl9sZW4gPSBzaXplb2YoYnVmZmVyKTsKICAgICB9CiAKICAgICBERUJVR0RVTVBIRUFERVIoInJlY3YiLCAiUERVIik7Ci0gICAgREVCVUdJTkRFTlRNT1JFKCk7CiAgICAgc3dpdGNoIChwZHUtPmNvbW1hbmQpIHsKICAgICBjYXNlIEFHRU5UWF9NU0dfT1BFTjoKICAgICAgICAgcGR1LT50aW1lID0gKmJ1ZnA7ICAgICAgLyogVGltZW91dCAqLwpAQCAtMTYyMSw3ICsxNjM5LDggQEAKICAgICAgICAgREVCVUdEVU1QSEVBREVSKCJyZWN2IiwgIlN1YmFnZW50IE9JRCIpOwogICAgICAgICBidWZwID0gYWdlbnR4X3BhcnNlX29pZChidWZwLCBsZW5ndGgsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9idWZmZXIsICZvaWRfYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5mbGFncyAmIEFHRU5UWF9GTEFHU19ORVRXT1JLX0JZVEVfT1JERVIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmIEFHRU5UWF9GTEFHU19ORVRXT1JLX0JZVEVfT1JERVIpOwogICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgaWYgKGJ1ZnAgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7CkBAIC0xNjI5LDcgKzE2NDgsOCBAQAogICAgICAgICB9CiAgICAgICAgIERFQlVHRFVNUEhFQURFUigicmVjdiIsICJTdWJhZ2VudCBEZXNjcmlwdGlvbiIpOwogICAgICAgICBidWZwID0gYWdlbnR4X3BhcnNlX3N0cmluZyhidWZwLCBsZW5ndGgsIGJ1ZmZlciwgJmJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+ZmxhZ3MgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbGFncyAmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFHRU5UWF9GTEFHU19ORVRXT1JLX0JZVEVfT1JERVIpOwogICAgICAgICBERUJVR0lOREVOVExFU1MoKTsKICAgICAgICAgaWYgKGJ1ZnAgPT0gTlVMTCkgewpAQCAtMTg3MiwxNCArMTg5MiwxMSBAQAogCiAgICAgZGVmYXVsdDoKICAgICAgICAgREVCVUdJTkRFTlRMRVNTKCk7Ci0gICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICBERUJVR01TR1RMKCgiYWdlbnR4IiwgIlVucmVjb2duaXNlZCBQRFUgdHlwZTogJWRcbiIsCiAgICAgICAgICAgICAgICAgICAgIHBkdS0+Y29tbWFuZCkpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9VTktOT1dOX1BEVTsKICAgICB9CiAgICAgREVCVUdJTkRFTlRMRVNTKCk7Ci0gICAgREVCVUdJTkRFTlRMRVNTKCk7Ci0gICAgREVCVUdJTkRFTlRMRVNTKCk7CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2FnZW50eC9zdWJhZ2VudC5jIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMKaW5kZXggMzEyZDhkYS4uMWY5ZDMxYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmMKQEAgLTIsMTcgKzIsMTQgQEAKICAqICBBZ2VudFggc3ViLWFnZW50CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0yMSw5ICsxOCw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC00NiwxMiArNDAsMTYgQEAKICNpbmNsdWRlICJhZ2VudHgvYWdlbnR4X2NvbmZpZy5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKLSNlbmRpZgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CiAKICNpbmNsdWRlICJzdWJhZ2VudC5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnR4X3N1YmFnZW50LCBhZ2VudHhfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50eF9lbmFibGVfc3ViYWdlbnQsIGFnZW50eF9zdWJhZ2VudCkKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVtb3ZlX3RyYXBfc2Vzc2lvbikKKwogI2lmZGVmIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKIAogc3RhdGljIFNOTVBDYWxsYmFjayBzdWJhZ2VudF9yZWdpc3Rlcl9waW5nX2FsYXJtOwpAQCAtNjEsMTAgKzU5LDEyIEBACiBpbnQgICAgICAgICAgICAgaGFuZGxlX3N1YmFnZW50X3Jlc3BvbnNlKGludCBvcCwgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlcWlkLCBuZXRzbm1wX3BkdSAqcGR1LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptYWdpYyk7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50ICAgICAgICAgICAgIGhhbmRsZV9zdWJhZ2VudF9zZXRfcmVzcG9uc2UoaW50IG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXFpZCwgbmV0c25tcF9wZHUgKnBkdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1hZ2ljKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiB2b2lkICAgICAgICAgICAgc3ViYWdlbnRfc3RhcnR1cF9jYWxsYmFjayh1bnNpZ25lZCBpbnQgY2xpZW50cmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKIGludCAgICAgICAgICAgICBzdWJhZ2VudF9vcGVuX21hc3Rlcl9zZXNzaW9uKHZvaWQpOwpAQCAtMTY0LDE4ICsxNjQsMTkgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVFhfRU5BQkxFX1NVQkFHRU5UCiB2b2lkCiBuZXRzbm1wX2VuYWJsZV9zdWJhZ2VudCh2b2lkKSB7CiAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX1JPTEUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUJfQUdFTlQpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRYX0VOQUJMRV9TVUJBR0VOVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IGFnZW50X25ldHNubXBfc2V0X2luZm8gKgogc2F2ZV9zZXRfdmFycyhuZXRzbm1wX3Nlc3Npb24gKiBzcywgbmV0c25tcF9wZHUgKnBkdSkKIHsKICAgICBzdHJ1Y3QgYWdlbnRfbmV0c25tcF9zZXRfaW5mbyAqcHRyOwotICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0gICAgZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKIAogICAgIHB0ciA9IChzdHJ1Y3QgYWdlbnRfbmV0c25tcF9zZXRfaW5mbyAqKQogICAgICAgICBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZ2VudF9uZXRzbm1wX3NldF9pbmZvKSk7CkBAIC0xODgsOCArMTg5LDcgQEAKICAgICBwdHItPnRyYW5zSUQgPSBwZHUtPnRyYW5zaWQ7CiAgICAgcHRyLT5zZXNzID0gc3M7CiAgICAgcHRyLT5tb2RlID0gU05NUF9NU0dfSU5URVJOQUxfU0VUX1JFU0VSVkUxOwotICAgIGdldHRpbWVvZmRheSgmbm93LCBOVUxMKTsKLSAgICBwdHItPnVwdGltZSA9IGNhbGN1bGF0ZV90aW1lX2RpZmYoJm5vdywgJnN0YXJ0dGltZSk7CisgICAgcHRyLT51cHRpbWUgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKIAogICAgIHB0ci0+dmFyX2xpc3QgPSBzbm1wX2Nsb25lX3ZhcmJpbmQocGR1LT52YXJpYWJsZXMpOwogICAgIGlmIChwdHItPnZhcl9saXN0ID09IE5VTEwpIHsKQEAgLTI0MSw2ICsyNDEsNyBAQAogICAgICAgICBwcmV2ID0gcHRyOwogICAgIH0KIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIHN0YXRpYyB2b2lkCiBzZW5kX2FnZW50eF9lcnJvcihuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUsIGludCBlcnJzdGF0LCBpbnQgZXJyaW5kZXgpCkBAIC0zMzEsOCArMzMyLDkgQEAKICAgICAgKiBvaywgd2UgaGF2ZSBhIHBkdSBmcm9tIHRoZSBuZXQuIE1vZGlmeSBhcyBuZWVkZWQgCiAgICAgICovCiAKLSAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgImhhbmRsaW5nIGFnZW50eCByZXF1ZXN0IChyZXE9MHgleCx0cmFucz0iCi0gICAgICAgICAgICAgICAgIjB4JXgsc2Vzcz0weCV4KVxuIiwgcGR1LT5yZXFpZCxwZHUtPnRyYW5zaWQsIHBkdS0+c2Vzc2lkKSk7CisgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICJoYW5kbGluZyBBZ2VudFggcmVxdWVzdCAocmVxPTB4JXgsdHJhbnM9IgorICAgICAgICAgICAgICAgICIweCV4LHNlc3M9MHgleClcbiIsICh1bnNpZ25lZClwZHUtPnJlcWlkLAorCQkodW5zaWduZWQpcGR1LT50cmFuc2lkLCAodW5zaWduZWQpcGR1LT5zZXNzaWQpKTsKICAgICBwZHUtPnZlcnNpb24gPSBBR0VOVFhfVkVSU0lPTl8xOwogICAgIHBkdS0+ZmxhZ3MgfD0gVUNEX01TR19GTEFHX0FMV0FZU19JTl9WSUVXOwogCkBAIC00MDMsNiArNDA1LDcgQEAKICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsICIgIC0+IHJlc3BvbnNlXG4iKSk7CiAgICAgICAgIHJldHVybiAxOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgQUdFTlRYX01TR19URVNUU0VUOgogICAgICAgICAvKgogICAgICAgICAgKiBYWFhXV1cgd2UgaGF2ZSB0byBtYXAgdGhpcyB0d2ljZSB0byBib3RoIFJFU0VSVkUxIGFuZCBSRVNFUlZFMiAKQEAgLTQ4MCw2ICs0ODMsNyBAQAogICAgICAgICBteWNhbGxiYWNrID0gaGFuZGxlX3N1YmFnZW50X3NldF9yZXNwb25zZTsKICAgICAgICAgcmV0bWFnaWMgPSBhc2k7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAKICAgICBkZWZhdWx0OgogICAgICAgICBTTk1QX0ZSRUUoc21hZ2ljKTsKQEAgLTQ5OSwxNCArNTAzLDE0IEBACiAgICAgICovCiAKICAgICBpbnRlcm5hbF9wZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwotICAgIGludGVybmFsX3BkdS0+Y29udGV4dE5hbWUgPSBpbnRlcm5hbF9wZHUtPmNvbW11bml0eTsKKyAgICBpbnRlcm5hbF9wZHUtPmNvbnRleHROYW1lID0gKGNoYXIgKikgaW50ZXJuYWxfcGR1LT5jb21tdW5pdHk7CiAgICAgaW50ZXJuYWxfcGR1LT5jb250ZXh0TmFtZUxlbiA9IGludGVybmFsX3BkdS0+Y29tbXVuaXR5X2xlbjsKICAgICBpbnRlcm5hbF9wZHUtPmNvbW11bml0eSA9IE5VTEw7CiAgICAgaW50ZXJuYWxfcGR1LT5jb21tdW5pdHlfbGVuID0gMDsKICAgICByZXN1bHQgPSBzbm1wX2FzeW5jX3NlbmQoYWdlbnR4X2NhbGxiYWNrX3Nlc3MsIGludGVybmFsX3BkdSwgbXljYWxsYmFjaywKICAgICAgICAgICAgICAgICAgICAgcmV0bWFnaWMpOwogICAgIGlmIChyZXN1bHQgPT0gMCkgewotICAgICAgICBzbm1wX2ZyZWVfcGR1KGludGVybmFsX3BkdSk7CisgICAgICAgIHNubXBfZnJlZV9wZHUoIGludGVybmFsX3BkdSApOwogICAgIH0KICAgICByZXR1cm4gMTsKIH0KQEAgLTU0NSwxNCArNTQ5LDE5IEBACiAKICAgICBwZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAotICAgICAgICAgICAgICAgICJoYW5kbGluZyBBZ2VudFggcmVzcG9uc2UgKGNtZCAweCUwMnggb3JpZ19jbWQgMHglMDJ4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmNvbW1hbmQsIHNtYWdpYy0+b3JpZ2luYWxfY29tbWFuZCkpOworICAgICAgICAgICAgICAgICJoYW5kbGluZyBBZ2VudFggcmVzcG9uc2UgKGNtZCAweCUwMnggb3JpZ19jbWQgMHglMDJ4KSIKKyAgICAgICAgICAgICAgICAiIChyZXE9MHgleCx0cmFucz0weCV4LHNlc3M9MHgleClcbiIsCisgICAgICAgICAgICAgICAgcGR1LT5jb21tYW5kLCBzbWFnaWMtPm9yaWdpbmFsX2NvbW1hbmQsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXBkdS0+cmVxaWQsICh1bnNpZ25lZClwZHUtPnRyYW5zaWQsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkKXBkdS0+c2Vzc2lkKSk7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19JTlRFUk5BTF9TRVRfRlJFRSB8fAogICAgICAgICBwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfSU5URVJOQUxfU0VUX1VORE8gfHwKICAgICAgICAgcGR1LT5jb21tYW5kID09IFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9DT01NSVQpIHsKICAgICAgICAgZnJlZV9zZXRfdmFycyhzbWFnaWMtPnNlc3Npb24sIHBkdSk7CiAgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGlmIChzbWFnaWMtPm9yaWdpbmFsX2NvbW1hbmQgPT0gQUdFTlRYX01TR19HRVRORVhUKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLApAQCAtNTg0LDcgKzU5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqIHNldCB0byBgZW5kT2ZNaWJWaWV3JyIuICAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl9vYmppZCh2LCB1LT5uYW1lLCB1LT5uYW1lX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSh2LCBTTk1QX0VORE9GTUlCVklFVywgMCwgMCk7CisgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSh2LCBTTk1QX0VORE9GTUlCVklFVywgTlVMTCwgMCk7CiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2NvcGUgdmlvbGF0aW9uIC0tIHJldHVybiBlbmRPZk1pYlZpZXdcbiIpKTsKICAgICAgICAgICAgICAgICB9CkBAIC02MTQsMTMgKzYyMywxNCBAQAogICAgIHJldHVybiAxOwogfQogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiBoYW5kbGVfc3ViYWdlbnRfc2V0X3Jlc3BvbnNlKGludCBvcCwgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgaW50IHJlcWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICptYWdpYykKIHsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnJldHNlc3M7CiAgICAgc3RydWN0IGFnZW50X25ldHNubXBfc2V0X2luZm8gKmFzaTsKLSAgICBpbnQgICAgcmVzdWx0OworICAgIGludCByZXN1bHQ7CiAKICAgICBpZiAob3AgIT0gTkVUU05NUF9DQUxMQkFDS19PUF9SRUNFSVZFRF9NRVNTQUdFIHx8IG1hZ2ljID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIDE7CkBAIC02MjksNyArNjM5LDggQEAKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKICAgICAgICAgICAgICAgICAiaGFuZGxpbmcgYWdlbnR4IHN1YmFnZW50IHNldCByZXNwb25zZSAobW9kZT0lZCxyZXE9MHgleCwiCiAgICAgICAgICAgICAgICAgInRyYW5zPTB4JXgsc2Vzcz0weCV4KVxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmNvbW1hbmQsIHBkdS0+cmVxaWQscGR1LT50cmFuc2lkLCBwZHUtPnNlc3NpZCkpOworICAgICAgICAgICAgICAgICh1bnNpZ25lZClwZHUtPmNvbW1hbmQsICh1bnNpZ25lZClwZHUtPnJlcWlkLAorCQkodW5zaWduZWQpcGR1LT50cmFuc2lkLCAodW5zaWduZWQpcGR1LT5zZXNzaWQpKTsKICAgICBwZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwogCiAgICAgYXNpID0gKHN0cnVjdCBhZ2VudF9uZXRzbm1wX3NldF9pbmZvICopIG1hZ2ljOwpAQCAtNjQ4LDcgKzY1OSw3IEBACiAgICAgICAgICAgICByZXN1bHQgPSBzbm1wX2FzeW5jX3NlbmQoYWdlbnR4X2NhbGxiYWNrX3Nlc3MsIHBkdSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVfc3ViYWdlbnRfc2V0X3Jlc3BvbnNlLCBhc2kpOwogICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOworICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoIHBkdSApOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFnZW50eC9zdWJhZ2VudCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiICBnb2luZyBmcm9tIFJFU0VSVkUxIC0+IFJFU0VSVkUyXG4iKSk7CkBAIC02NzQsNyArNjg1LDcgQEAKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgIiAgRklOSVNIRURcbiIpKTsKICAgICByZXR1cm4gMTsKIH0KLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiBpbnQKQEAgLTY4Myw3ICs2OTQsNyBAQAogewogICAgIHN0cnVjdCByZWdpc3Rlcl9wYXJhbWV0ZXJzICpyZWdfcGFybXMgPQogICAgICAgICAoc3RydWN0IHJlZ2lzdGVyX3BhcmFtZXRlcnMgKikgc2VydmVyYXJnOwotICAgIG5ldHNubXBfc2Vzc2lvbiAqYWdlbnR4X3NzID0gKG5ldHNubXBfc2Vzc2lvbiAqKSBjbGllbnRhcmc7CisgICAgbmV0c25tcF9zZXNzaW9uICphZ2VudHhfc3MgPSAqKG5ldHNubXBfc2Vzc2lvbiAqKiljbGllbnRhcmc7CiAKICAgICBpZiAobWlub3JJRCA9PSBTTk1QRF9DQUxMQkFDS19SRUdJU1RFUl9PSUQpCiAgICAgICAgIHJldHVybiBhZ2VudHhfcmVnaXN0ZXIoYWdlbnR4X3NzLApAQCAtNzAzLDE0ICs3MTQsMTMgQEAKIH0KIAogCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLWludAorc3RhdGljIGludAogYWdlbnR4X3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKIHsKLSAgICBzdHJ1Y3QgcmVnaXN0ZXJfc3lzT1JfcGFyYW1ldGVycyAqcmVnX3Bhcm1zID0KLSAgICAgICAgKHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzICopIHNlcnZlcmFyZzsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKmFnZW50eF9zcyA9IChuZXRzbm1wX3Nlc3Npb24gKikgY2xpZW50YXJnOworICAgIGNvbnN0IHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzICpyZWdfcGFybXMgPQorICAgICAgICAoY29uc3Qgc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgKikgc2VydmVyYXJnOworICAgIG5ldHNubXBfc2Vzc2lvbiAqYWdlbnR4X3NzID0gKihuZXRzbm1wX3Nlc3Npb24gKiopY2xpZW50YXJnOwogCiAgICAgaWYgKG1pbm9ySUQgPT0gU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SKQogICAgICAgICByZXR1cm4gYWdlbnR4X2FkZF9hZ2VudGNhcHMoYWdlbnR4X3NzLApAQCAtNzIxLDEzICs3MzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19wYXJtcy0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19wYXJtcy0+bmFtZWxlbik7CiB9Ci0jZW5kaWYKIAogCiBzdGF0aWMgaW50CiBzdWJhZ2VudF9zaHV0ZG93bihpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewotICAgIG5ldHNubXBfc2Vzc2lvbiAqdGhlc2Vzc2lvbiA9IChuZXRzbm1wX3Nlc3Npb24gKiljbGllbnRhcmc7CisgICAgbmV0c25tcF9zZXNzaW9uICp0aGVzZXNzaW9uID0gKihuZXRzbm1wX3Nlc3Npb24gKiopY2xpZW50YXJnOwogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLCAic2h1dHRpbmcgZG93biBzZXNzaW9uLi4uLlxuIikpOwogICAgIGlmICh0aGVzZXNzaW9uID09IE5VTEwpIHsKIAlERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwgIkVtcHR5IHNlc3Npb24gdG8gc2h1dGRvd25cbiIpKTsKQEAgLTc1NSwyNCArNzY0LDI5IEBACiB2b2lkCiBhZ2VudHhfcmVnaXN0ZXJfY2FsbGJhY2tzKG5ldHNubXBfc2Vzc2lvbiAqIHMpCiB7CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzX3A7CisKICAgICBERUJVR01TR1RMKCgiYWdlbnR4L3N1YmFnZW50IiwKICAgICAgICAgICAgICAgICAicmVnaXN0ZXJpbmcgY2FsbGJhY2tzIGZvciBzZXNzaW9uICVwXG4iLCBzKSk7CisgICAgc2Vzc19wID0gbmV0c25tcF9tZW1kdXAoJnMsIHNpemVvZihzKSk7CisgICAgbmV0c25tcF9hc3NlcnQoc2Vzc19wKTsKKyAgICBzLT5teXZvaWQgPSBzZXNzX3A7CisgICAgaWYgKCFzZXNzX3ApCisgICAgICAgIHJldHVybjsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFnZW50X3NodXRkb3duLCBzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmFnZW50X3NodXRkb3duLCBzZXNzX3ApOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc2Vzc19wKTsKICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19VTlJFR0lTVEVSX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHMpOwotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzZXNzX3ApOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9zeXNPUl9jYWxsYmFjaywgcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNlc3NfcCk7CiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHMpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNlc3NfcCk7CiB9CiAKIC8qCkBAIC03ODUsMjIgKzc5OSwyMCBAQAogICAgIERFQlVHTVNHVEwoKCJhZ2VudHgvc3ViYWdlbnQiLAogICAgICAgICAgICAgICAgICJ1bnJlZ2lzdGVyaW5nIGNhbGxiYWNrcyBmb3Igc2Vzc2lvbiAlcFxuIiwgc3MpKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NIVVRET1dOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJhZ2VudF9zaHV0ZG93biwgc3MsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJhZ2VudF9zaHV0ZG93biwgc3MtPm15dm9pZCwgMSk7CiAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR0lTVEVSX09JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3JlZ2lzdHJhdGlvbl9jYWxsYmFjaywgc3MsIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdJU1RFUl9PSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWdpc3RyYXRpb25fY2FsbGJhY2ssIHNzLCAxKTsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfcmVnaXN0cmF0aW9uX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZ2VudHhfc3lzT1JfY2FsbGJhY2ssIHNzLCAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKICAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFnZW50eF9zeXNPUl9jYWxsYmFjaywgc3MsIDEpOwotI2VuZGlmCi0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWdlbnR4X3N5c09SX2NhbGxiYWNrLCBzcy0+bXl2b2lkLCAxKTsKKyAgICBTTk1QX0ZSRUUoc3MtPm15dm9pZCk7CiB9CiAKIC8qCkBAIC05MTQsNiArOTI2LDE0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyB2b2lkCithZ2VudHhfcmVvcGVuX3N5c09SVGFibGUoY29uc3Qgc3RydWN0IHN5c09SVGFibGUqIGRhdGEsIHZvaWQqIHYpCit7CisgICAgbmV0c25tcF9zZXNzaW9uICphZ2VudHhfc3MgPSAobmV0c25tcF9zZXNzaW9uICopIHY7CisgIAorICAgIGFnZW50eF9hZGRfYWdlbnRjYXBzKGFnZW50eF9zcywgZGF0YS0+T1Jfb2lkLCBkYXRhLT5PUl9vaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YS0+T1JfZGVzY3IpOworfQogCiAvKgogICogQWxhcm0gY2FsbGJhY2sgZnVuY3Rpb24gdG8gb3BlbiBhIHNlc3Npb24gdG8gdGhlIG1hc3RlciBhZ2VudC4gIElmIGEKQEAgLTk0MiwxNSArOTYyLDIwIEBACiAgICAgICAgIHJlZ2lzdGVyX21pYl9yZWF0dGFjaCgpOwogCiAgICAgICAgIC8qCisgICAgICAgICAqIFJlcmVnaXN0ZXIgYWxsIG91ciBzeXNPUkVudHJpZXMKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc3lzT1JUYWJsZV9mb3JlYWNoKCZhZ2VudHhfcmVvcGVuX3N5c09SVGFibGUsIG1haW5fc2Vzc2lvbik7CisKKyAgICAgICAgLyoKICAgICAgICAgICogUmVnaXN0ZXIgYSBwaW5nIGFsYXJtIChpZiBuZWVkIGJlKS4gIAogICAgICAgICAgKi8KLSAgICAgICAgc3ViYWdlbnRfcmVnaXN0ZXJfcGluZ19hbGFybSgwLCAwLCAwLCBtYWluX3Nlc3Npb24pOworICAgICAgICBzdWJhZ2VudF9yZWdpc3Rlcl9waW5nX2FsYXJtKDAsIDAsIE5VTEwsIG1haW5fc2Vzc2lvbik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGNsaWVudHJlZyA9PSAwKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogUmVnaXN0ZXIgYSByZWF0dGFjaCBhbGFybSBmb3IgbGF0ZXIgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHN1YmFnZW50X3JlZ2lzdGVyX3BpbmdfYWxhcm0oMCwgMCwgMCwgbWFpbl9zZXNzaW9uKTsKKyAgICAgICAgICAgIHN1YmFnZW50X3JlZ2lzdGVyX3BpbmdfYWxhcm0oMCwgMCwgTlVMTCwgbWFpbl9zZXNzaW9uKTsKICAgICAgICAgfQogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2RlZmF1bHRfbW9kdWxlcy5oIGIvYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgKaW5kZXggN2Y5NTNkMy4uZmM1ZjI2YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGVmYXVsdF9tb2R1bGVzLmgKQEAgLTUsNiArNSwxMyBAQAogLyogdGhlc2UgZ28gaW50byBib3RoIHRoZSBtaW5pIGFnZW50IGFuZCB0aGUgZnVsbCBhZ2VudCAqLwogY29uZmlnX3JlcXVpcmUoc25tcHYzbWlicykKIAorLyogdmVyeSBmZXcgZGVmYXVsdCBtaWJzICovCitjb25maWdfYWRkX21pYihTTk1QdjItTUlCKQorY29uZmlnX2FkZF9taWIoSUYtTUlCKQorY29uZmlnX2FkZF9taWIoSVAtTUlCKQorY29uZmlnX2FkZF9taWIoVENQLU1JQikKK2NvbmZpZ19hZGRfbWliKFVEUC1NSUIpCisKICNpZmRlZiBORVRTTk1QX01JTklfQUdFTlQKIAogLyogbGltaXQgdGhlIG1pYklJIG1vZHVsZXMgdG8gdGhlIGJhcmUgbWluaW11bSAqLwpAQCAtMTMsMTQgKzIwLDYgQEAKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3N5c09SVGFibGUpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX3ZhcnMpCiBjb25maWdfcmVxdWlyZShtaWJJSS92YWNtX2NvbmYpCi1jb25maWdfcmVxdWlyZSh1dGlsaXRpZXMvZXhlY3V0ZSkKLQotLyogdmVyeSBmZXcgZGVmYXVsdCBtaWJzICovCi1jb25maWdfYWRkX21pYihTTk1QdjItTUlCKQotY29uZmlnX2FkZF9taWIoSUYtTUlCKQotY29uZmlnX2FkZF9taWIoSVAtTUlCKQotY29uZmlnX2FkZF9taWIoVENQLU1JQikKLWNvbmZpZ19hZGRfbWliKFVEUC1NSUIpCiAKICNlbHNlIC8qICFORVRTTk1QX01JTklfQUdFTlQgPT0gdGhlIGZ1bGwgc2hhYmFuZyAqLwogCkBAIC0zMiwyMiArMzEsMjEgQEAKIGNvbmZpZ19yZXF1aXJlKGFnZW50X21pYnMpCiBjb25maWdfcmVxdWlyZShhZ2VudHgpCiBjb25maWdfcmVxdWlyZShkaXNtYW4vZXZlbnQpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogY29uZmlnX3JlcXVpcmUoZGlzbWFuL3NjaGVkdWxlKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIGNvbmZpZ19yZXF1aXJlKHV0aWxpdGllcykKIAogLyogZGVmYXVsdCBNSUJzIHRvIGF1dG8taW5jbHVkZSBmb3IgcGFyc2luZyAqLwogLyogTk9URTogd2UgY29uc2lkZXIgdGhlc2UgTUlCcyB1c2VycyB3aWxsIGxpa2VseSB3YW50IHRvIGxvYWQgYnkKICAgIGRlZmF1bHQsIGV2ZW4gaWYgdGhleSdyZSBub3Qgc3VwcG9ydGluZyBpdCBpbiB0aGUgYWdlbnQgKGllLCB0aGUKICAgIGNvbW1hbmQgbGluZSB0b29scyBuZWVkIHRvIGxvYWQgdGhlbSBhbnl3YXkpICovCi1jb25maWdfYWRkX21pYihTTk1QdjItTUlCKQotY29uZmlnX2FkZF9taWIoSUYtTUlCKQotY29uZmlnX2FkZF9taWIoSVAtTUlCKQotY29uZmlnX2FkZF9taWIoVENQLU1JQikKLWNvbmZpZ19hZGRfbWliKFVEUC1NSUIpCiBjb25maWdfYWRkX21pYihIT1NULVJFU09VUkNFUy1NSUIpCiBjb25maWdfYWRkX21pYihOT1RJRklDQVRJT04tTE9HLU1JQikKIGNvbmZpZ19hZGRfbWliKERJU01BTi1FVkVOVC1NSUIpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogY29uZmlnX2FkZF9taWIoRElTTUFOLVNDSEVEVUxFLU1JQikKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBleHRyYSBtb2R1bGVzICovCiAvKiB0aGVzZSBzeW1ib2xzIGFyZSBzZXQgaW4gdGhlIGhvc3Qgc3BlY2lmaWMgbmV0LXNubXAvc3lzdGVtLzxvcz4uaCBmaWxlcyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuYyBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg5ODc5YQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmMKQEAgLTAsMCArMSw0NzUgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZmlmbykKKworI2luY2x1ZGUgImRlbGl2ZXJCeU5vdGlmeS5oIgorCisvKiB3ZSBzaG91bGQgbmV2ZXIgc3BsaXQgYmV5b25kIHRoaXMgKi8KKyNkZWZpbmUgTUFYX01FU1NBR0VfQ09VTlQgMTI4CisjZGVmaW5lIEJBU0VfUEFDS0VUX1NJWkUgMTAwIC8qIHNob3VsZCBiZSBlbm91Z2ggdG8gc3RvcmUgU05NUHYzIG1zZyBoZWFkZXJzICovCisKKy8qIGlmIHYgaXMgIU5VTEwsIHRoZW4gZXN0aW1hdGUgaXQncyBsaWtlbHkgc2l6ZSAqLworI2RlZmluZSBFU1RJTUFURV9WQVJfU0laRSh2KSAodj8odi0+bmFtZV9sZW5ndGggKyB2LT52YWxfbGVuICsgOCk6MCkKKwordm9pZCBwYXJzZV9kZWxpdmVyX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIHBhcnNlX2RlbGl2ZXJfbWF4c2l6ZV9jb25maWcoY29uc3QgY2hhciAqLCBjaGFyICopOwordm9pZCBwYXJzZV9kYXRhX25vdGlmaWNhdGlvbl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgcGFyc2VfcGVyaW9kaWNfdGltZV9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgcGFyc2VfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIHBhcnNlX21heF9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK3ZvaWQgZnJlZV9kZWxpdmVyX2NvbmZpZyh2b2lkKTsKKworc3RhdGljIHZvaWQgX3NjaGVkdWxlX25leHRfZXhlY3V0ZV90aW1lKHZvaWQpOworCitvaWQgICAgZGF0YV9ub3RpZmljYXRpb25fb2lkW01BWF9PSURfTEVOXQorICAgICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAzLCAxLCA1LCA0LCAwLCAxIH07CitzaXplX3QgZGF0YV9ub3RpZmljYXRpb25fb2lkX2xlbiA9IDEzOworCitvaWQgICAgbmV0c25tcF9wZXJpb2RpY190aW1lX29pZFtNQVhfT0lEX0xFTl0KKyAgICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMywgMSwgNSwgMywgMSwgMCB9Oworc2l6ZV90IG5ldHNubXBfcGVyaW9kaWNfdGltZV9vaWRfbGVuID0gMTM7CisKK29pZCAgICBuZXRzbm1wX21lc3NhZ2VfbnVtYmVyX29pZFtNQVhfT0lEX0xFTl0KKyAgICAgICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMywgMSwgNSwgMywgMiwgMCB9Oworc2l6ZV90IG5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiA9IDEzOworCitvaWQgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkW01BWF9PSURfTEVOXQorICAgICAgID0geyAxLCAzLCA2LCAxLCA0LCAxLCA4MDcyLCAzLCAxLCA1LCAzLCAzLCAwIH07CitzaXplX3QgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiA9IDEzOworCitvaWQgb2JqaWRfc25tcHRyYXBbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNCwgMSwgMCB9OworCisjZGVmaW5lIERFRkFVTFRfTUFYX0RFTElWRVJfU0laRSAtMTsKK3N0YXRpYyBpbnQgZGVmYXVsdF9tYXhfc2l6ZTsKK3Vuc2lnbmVkIGludCBhbGFybV9yZWc7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKmRlbGl2ZXJfY29udGFpbmVyOworCitzdGF0aWMgaW50CitfZGVsaXZlcl9jb21wYXJlKGRlbGl2ZXJfYnlfbm90aWZ5ICpsaHMsIGRlbGl2ZXJfYnlfbm90aWZ5ICpyaHMpIHsKKyAgICAvKiBzb3J0IGJ5IHRoZSBuZXh0X3J1biB0aW1lICovCisgICAgaWYgKGxocy0+bmV4dF9ydW4gPCByaHMtPm5leHRfcnVuKQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gMTsKK30KKworLyoqIEluaXRpYWxpemVzIHRoZSBtdGVUcmlnZ2VyIG1vZHVsZSAqLwordm9pZAoraW5pdF9kZWxpdmVyQnlOb3RpZnkodm9pZCkKK3sKKyAgICAvKiByZWdpc3RlciB0aGUgY29uZmlnIHRva2VucyAqLworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWxpdmVyQnlOb3RpZnkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9kZWxpdmVyX2NvbmZpZywgJmZyZWVfZGVsaXZlcl9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlstcF0gWy1tXSBbLXMgbWF4c2l6ZV0gRlJFUVVFTkNZIE9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU1heFBhY2tldFNpemUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9kZWxpdmVyX21heHNpemVfY29uZmlnLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzaXplSW5CeXRlcyIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlX2RhdGFfbm90aWZpY2F0aW9uX29pZF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogWFhYOiByZXNldCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeUZyZXF1ZW5jeU9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlX3BlcmlvZGljX3RpbWVfb2lkX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBYWFg6IHJlc2V0IHRvIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0lEIik7CisKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiZGVsaXZlckJ5Tm90aWZ5TWVzc2FnZU51bWJlck9pZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhcnNlX21lc3NhZ2VfbnVtYmVyX29pZF9jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgLyogWFhYOiByZXNldCB0byBkZWZhdWx0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRlbGl2ZXJCeU5vdGlmeU1heE1lc3NhZ2VOdW1iZXJPaWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXJzZV9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAvKiBYWFg6IHJlc2V0IHRvIGRlZmF1bHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiT0lEIik7CisKKyAgICAvKiBjcmVhdGUgdGhlIGNvbnRhaW5lciB0byBzdG9yZSB0aGUgY29uZmlnIG9iamVjdHMqLworICAgIGRlbGl2ZXJfY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZGVsaXZlckJ5Tm90aWZ5OmZpZm8iKTsKKyAgICBpZiAoTlVMTCA9PSBkZWxpdmVyX2NvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZGVsaXZlckJ5Tm90aWZ5OiBmYWlsZWQgdG8gaW5pdGlhbGl6ZSBvdXIgZGF0YSBjb250YWluZXJcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGRlbGl2ZXJfY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiZGVsaXZlckJ5Tm90aWZ5Iik7CisgICAgZGVsaXZlcl9jb250YWluZXItPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSAqKSBfZGVsaXZlcl9jb21wYXJlOworCisgICAgLyogc2V0IHRoZSBkZWZhdWx0cyAqLworICAgIGRlZmF1bHRfbWF4X3NpemUgPSBERUZBVUxUX01BWF9ERUxJVkVSX1NJWkU7CisKKyAgICBhbGFybV9yZWcgPSAwOworfQorCit2b2lkCitfcGFyc2VfY29uZmlnX29pZChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSwKKyAgICAgICAgICAgICAgICAgIG9pZCAqb2lkX3N0b3JlLCBzaXplX3QgKm9pZF9zdG9yZV9sZW4pIHsKKyAgICBzaXplX3QgdG1wX2xlbiA9IE1BWF9PSURfTEVOOworICAgIC8qIHBhcnNlIHRoZSBPSUQgZ2l2ZW4gKi8KKworICAgIGlmICghc25tcF9wYXJzZV9vaWQobGluZSwgb2lkX3N0b3JlLCAmdG1wX2xlbikpIHsKKyAgICAgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworICAgICAgICBzbnByaW50ZihidWYsIFNQUklOVF9NQVhfTEVOLTEsICJ1bmtub3duICVzIE9JRDogJXMiLCB0b2tlbiwgbGluZSk7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgICpvaWRfc3RvcmVfbGVuID0gdG1wX2xlbjsKK30KKwordm9pZAorcGFyc2VfZGF0YV9ub3RpZmljYXRpb25fb2lkX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkgeworICAgIF9wYXJzZV9jb25maWdfb2lkKHRva2VuLCBsaW5lLAorICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbm90aWZpY2F0aW9uX29pZCwgJmRhdGFfbm90aWZpY2F0aW9uX29pZF9sZW4pOworfQorCit2b2lkCitwYXJzZV9wZXJpb2RpY190aW1lX29pZF9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBfcGFyc2VfY29uZmlnX29pZCh0b2tlbiwgbGluZSwKKyAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BlcmlvZGljX3RpbWVfb2lkLCAmbmV0c25tcF9wZXJpb2RpY190aW1lX29pZF9sZW4pOworfQorCit2b2lkCitwYXJzZV9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgX3BhcnNlX2NvbmZpZ19vaWQodG9rZW4sIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tZXNzYWdlX251bWJlcl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgJm5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkX2xlbik7Cit9CisKK3ZvaWQKK3BhcnNlX21heF9tZXNzYWdlX251bWJlcl9vaWRfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSB7CisgICAgX3BhcnNlX2NvbmZpZ19vaWQodG9rZW4sIGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICZuZXRzbm1wX21heF9tZXNzYWdlX251bWJlcl9vaWRfbGVuKTsKK30KKwordm9pZAorcGFyc2VfZGVsaXZlcl9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBjb25zdCBjaGFyICpjcCA9IGxpbmU7CisgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworICAgIHNpemVfdCBidWZfbGVuID0gU1BSSU5UX01BWF9MRU47CisgICAgaW50IG1heF9zaXplID0gREVGQVVMVF9NQVhfREVMSVZFUl9TSVpFOworICAgIGludCBmcmVxdWVuY3k7CisgICAgb2lkIHRhcmdldF9vaWRbTUFYX09JRF9MRU5dOworICAgIHNpemVfdCB0YXJnZXRfb2lkX2xlbiA9IE1BWF9PSURfTEVOOworICAgIGRlbGl2ZXJfYnlfbm90aWZ5ICpuZXdfbm90aWZ5ID0gTlVMTDsKKyAgICBpbnQgZmxhZ3MgPSAwOworCisgICAgd2hpbGUoY3AgJiYgKmNwID09ICctJykgeworICAgICAgICBzd2l0Y2ggKCooY3ArMSkpIHsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBjcCA9IHNraXBfdG9rZW5fY29uc3QoY3ApOworICAgICAgICAgICAgaWYgKCFjcCkgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIGFyZ3VtZW50IGdpdmVuIHRvIC1zIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWF4X3NpemUgPSBhdG9pKGNwKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgJ3AnOgorICAgICAgICAgICAgZmxhZ3MgPSBmbGFncyB8IE5FVFNOTVBfREVMSVZFUl9OT19QRVJJT0RfT0lEOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICBmbGFncyA9IGZsYWdzIHwgTkVUU05NUF9ERUxJVkVSX05PX01TR19DT1VOVFM7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgY29uZmlnX3BlcnJvcigidW5rbm93biBmbGFnIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKKyAgICB9CisKKyAgICBpZiAoIWNwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIGZyZXF1ZW5jeSBnaXZlbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvcHlfbndvcmQoY3AsIGJ1ZiwgYnVmX2xlbik7CisgICAgZnJlcXVlbmN5ID0gbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKGJ1Zik7CisgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKKworICAgIGlmIChmcmVxdWVuY3kgPD0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbGxlZ2FsIGZyZXF1ZW5jeSBnaXZlbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFjcCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJubyBPSUQgZ2l2ZW4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIHBhcnNlIHRoZSBPSUQgZ2l2ZW4gKi8KKyAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGNwLCB0YXJnZXRfb2lkLCAmdGFyZ2V0X29pZF9sZW4pKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInVua25vd24gZGVsaXZlckJ5Tm90aWZ5IE9JRCIpOworICAgICAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIlRoZSBPSUQgd2l0aCB0aGUgcHJvYmxlbTogJXNcbiIsIGNwKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBzZXQgdXAgdGhlIG9iamVjdCB0byBzdG9yZSBhbGwgdGhlIGRhdGEgKi8KKyAgICBuZXdfbm90aWZ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihkZWxpdmVyX2J5X25vdGlmeSk7CisgICAgbmV3X25vdGlmeS0+ZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworICAgIG5ld19ub3RpZnktPm1heF9wYWNrZXRfc2l6ZSA9IG1heF9zaXplOworICAgIG5ld19ub3RpZnktPmxhc3RfcnVuID0gdGltZShOVUxMKTsKKyAgICBuZXdfbm90aWZ5LT5uZXh0X3J1biA9IG5ld19ub3RpZnktPmxhc3RfcnVuICsgZnJlcXVlbmN5OworICAgIG5ld19ub3RpZnktPmZsYWdzID0gZmxhZ3M7CisKKyAgICBuZXdfbm90aWZ5LT50YXJnZXQgPSBtYWxsb2ModGFyZ2V0X29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgbmV3X25vdGlmeS0+dGFyZ2V0X2xlbiA9IHRhcmdldF9vaWRfbGVuOworICAgIG1lbWNweShuZXdfbm90aWZ5LT50YXJnZXQsIHRhcmdldF9vaWQsIHRhcmdldF9vaWRfbGVuKnNpemVvZihvaWQpKTsKKworICAgIC8qIFhYWDogbmVlZCB0byBkbyB0aGUgd2hvbGUgY29udGFpbmVyICovCisgICAgc25tcF9hbGFybV9yZWdpc3RlcihjYWxjdWxhdGVfdGltZV91bnRpbF9uZXh0X3J1bihuZXdfbm90aWZ5LCBOVUxMKSwgMCwgCisgICAgICAgICAgICAgICAgICAgICAgICAmZGVsaXZlcl9leGVjdXRlLCBOVUxMKTsKKworICAgIC8qIGFkZCBpdCB0byB0aGUgY29udGFpbmVyICovCisgICAgQ09OVEFJTkVSX0lOU0VSVChkZWxpdmVyX2NvbnRhaW5lciwgbmV3X25vdGlmeSk7CisgICAgX3NjaGVkdWxlX25leHRfZXhlY3V0ZV90aW1lKCk7Cit9CisKK3ZvaWQKK3BhcnNlX2RlbGl2ZXJfbWF4c2l6ZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBkZWZhdWx0X21heF9zaXplID0gYXRvaShsaW5lKTsKK30KKworc3RhdGljIHZvaWQKK19mcmVlX2RlbGl2ZXJfb2JqKGRlbGl2ZXJfYnlfbm90aWZ5ICpvYmosIHZvaWQgKmNvbnRleHQpIHsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4ob2JqICE9IE5VTEwsICk7CisgICAgU05NUF9GUkVFKG9iai0+dGFyZ2V0KTsKKyAgICBTTk1QX0ZSRUUob2JqKTsKK30KKwordm9pZAorZnJlZV9kZWxpdmVyX2NvbmZpZyh2b2lkKSB7CisgICAgZGVmYXVsdF9tYXhfc2l6ZSA9IERFRkFVTFRfTUFYX0RFTElWRVJfU0laRTsKKyAgICBDT05UQUlORVJfQ0xFQVIoZGVsaXZlcl9jb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfZnJlZV9kZWxpdmVyX29iaiwgTlVMTCk7CisgICAgaWYgKGFsYXJtX3JlZykgeworICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoYWxhcm1fcmVnKTsKKyAgICAgICAgYWxhcm1fcmVnID0gMDsKKyAgICB9Cit9CisKK3ZvaWQKK2RlbGl2ZXJfZXhlY3V0ZSh1bnNpZ25lZCBpbnQgY2xpZW50cmVnLCB2b2lkICpjbGllbnRhcmcpIHsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsICp3YWxrZXIsICpkZWxpdmVyX25vdGlmaWNhdGlvbiwgKnZhcnRtcDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlYWR5X2Zvcl9kZWxpdmVyeVtNQVhfTUVTU0FHRV9DT1VOVF07CisgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzOworICAgIGludCByYywgaTsKKyAgICBkZWxpdmVyX2J5X25vdGlmeSAqb2JqOworICAgIG5ldHNubXBfaXRlcmF0b3IgKml0ZXJhdG9yOworICAgIHRpbWVfdCAgICAgICAgICAgIG5vdyA9IHRpbWUoTlVMTCk7CisgICAgdV9sb25nICAgICAgICAgICAgbWVzc2FnZV9jb3VudCwgbWF4X21lc3NhZ2VfY291bnQsIHRtcF9sb25nOworICAgIHVfbG9uZyAgICAgICAgICAgKm1heF9tZXNzYWdlX2NvdW50X3B0cnNbTUFYX01FU1NBR0VfQ09VTlRdOworICAgIHNpemVfdCAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZTsKKworICAgIERFQlVHTVNHVEwoKCJkZWxpdmVyQnlOb3RpZnkiLCAiU3RhcnRpbmcgdGhlIGV4ZWN1dGUgcm91dGluZVxuIikpOworCisgICAgLyogWFhYOiBuZWVkIHRvIGRvIHRoZSB3aG9sZSBjb250YWluZXIgKi8KKyAgICBpdGVyYXRvciA9IENPTlRBSU5FUl9JVEVSQVRPUihkZWxpdmVyX2NvbnRhaW5lcik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKGl0ZXJhdG9yICE9IE5VTEwsKTsKKworICAgIHNlc3MgPSBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oKTsKKworICAgIGZvcihvYmogPSBJVEVSQVRPUl9GSVJTVChpdGVyYXRvcik7IG9iajsKKyAgICAgICAgb2JqID0gSVRFUkFUT1JfTkVYVChpdGVyYXRvcikpIHsKKworICAgICAgICAvKiBjaGVjayBpZiB3ZSBuZWVkIHRvIHJ1biB0aGlzIG9uZSB5ZXQgKi8KKyAgICAgICAgaWYgKG9iai0+bmV4dF9ydW4gPiBub3cpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtYXhfbWVzc2FnZV9jb3VudCA9IDE7CisgICAgICAgIG1lc3NhZ2VfY291bnQgPSAwOworCisgICAgICAgIC8qIGZpbGwgdGhlIHZhcmJpbmQgbGlzdCB3aXRoIHRoZSB0YXJnZXQgb2JqZWN0ICovCisgICAgICAgIHZhcnMgPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKTsKKyAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKCB2YXJzLCBvYmotPnRhcmdldCwgb2JqLT50YXJnZXRfbGVuICk7CisgICAgICAgIHZhcnMtPnR5cGUgPSBBU05fTlVMTDsKKworICAgICAgICAvKiB3YWxrIHRoZSBPSUQgdHJlZSBmb3IgdGhlIGRhdGEgKi8KKyAgICAgICAgcmMgPSBuZXRzbm1wX3F1ZXJ5X3dhbGsodmFycywgc2Vzcyk7CisgICAgICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICAvKiBYWFg6IGRpc2FibGU/IGFuZCByZXNldCB0aGUgbmV4dCBxdWVyeSB0aW1lIHBvaW50ISAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImRlbGl2ZXJCeU5vdGlmeTogZmFpbGVkIHRvIGlzc3VlIHRoZSBxdWVyeSIpOworICAgICAgICAgICAgSVRFUkFUT1JfUkVMRUFTRShpdGVyYXRvcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICB3YWxrZXIgPSB2YXJzOworCisgICAgICAgIHdoaWxlICh3YWxrZXIpIHsKKworICAgICAgICAgICAgLyogU2V0IHVwIHRoZSBub3RpZmljYXRpb24gaXRzZWxmICovCisgICAgICAgICAgICBkZWxpdmVyX25vdGlmaWNhdGlvbiA9IE5VTEw7CisgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgPSBCQVNFX1BBQ0tFVF9TSVpFOworCisgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIG5vdGlmaWNhdGlvbiB0eXBlICovCisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqaWRfc25tcHRyYXAsIE9JRF9MRU5HVEgob2JqaWRfc25tcHRyYXApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX25vdGlmaWNhdGlvbl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfbm90aWZpY2F0aW9uX29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUoZGVsaXZlcl9ub3RpZmljYXRpb24pOworCisgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIGN1cnJlbnQgbWVzc2FnZSBudW1iZXIgaW4gdGhpcyBzZXF1ZW5jZSAqLworICAgICAgICAgICAgaWYgKCEob2JqLT5mbGFncyAmIE5FVFNOTVBfREVMSVZFUl9OT19QRVJJT0RfT0lEKSkgeworICAgICAgICAgICAgICAgIHRtcF9sb25nID0gb2JqLT5mcmVxdWVuY3k7CisgICAgICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmZGVsaXZlcl9ub3RpZmljYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BlcmlvZGljX3RpbWVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZXJpb2RpY190aW1lX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgdm9pZCAqKSAmdG1wX2xvbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodG1wX2xvbmcpKTsKKyAgICAgICAgICAgICAgICBlc3RpbWF0ZWRfcGt0X3NpemUgKz0gRVNUSU1BVEVfVkFSX1NJWkUoZGVsaXZlcl9ub3RpZmljYXRpb24pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIGN1cnJlbnQgbWVzc2FnZSBudW1iZXIgaW4gdGhpcyBzZXF1ZW5jZSAqLworICAgICAgICAgICAgbWVzc2FnZV9jb3VudCsrOworICAgICAgICAgICAgaWYgKG1lc3NhZ2VfY291bnQgPiBNQVhfTUVTU0FHRV9DT1VOVCkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkZWxpdmVyeSBjb25zdHJ1Y3QgZ3JldyB0b28gbGFyZ2UuLi4gIGdpdmluZyB1cFxuIik7CisgICAgICAgICAgICAgICAgLyogWFhYOiBkaXNhYmxlIGl0ICovCisgICAgICAgICAgICAgICAgLyogWFhYOiBzZW5kIGEgbm90aWZpY2F0aW9uIGFib3V0IGl0PyAqLworICAgICAgICAgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXRlcmF0b3IpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc3RvcmUgdGhpcyBmb3IgbGF0ZXIgdXBkYXRpbmcgYW5kIHNlbmRpbmcgKi8KKyAgICAgICAgICAgIHJlYWR5X2Zvcl9kZWxpdmVyeVttZXNzYWdlX2NvdW50LTFdID0gZGVsaXZlcl9ub3RpZmljYXRpb247CisKKyAgICAgICAgICAgIGlmICghKG9iai0+ZmxhZ3MgJiBORVRTTk1QX0RFTElWRVJfTk9fTVNHX0NPVU5UUykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tZXNzYWdlX251bWJlcl9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHZvaWQgKikgJm1lc3NhZ2VfY291bnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWVzc2FnZV9jb3VudCkpOworICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArPSBFU1RJTUFURV9WQVJfU0laRShkZWxpdmVyX25vdGlmaWNhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvKiBhZGQgaW4gdGhlIG1heCBtZXNzYWdlIG51bWJlciBjb3VudCBmb3IgdGhpcyBzZXF1ZW5jZSAqLworICAgICAgICAgICAgICAgIHZhcnRtcCA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJmRlbGl2ZXJfbm90aWZpY2F0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9tYXhfbWVzc2FnZV9udW1iZXJfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopICZtYXhfbWVzc2FnZV9jb3VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtYXhfbWVzc2FnZV9jb3VudCkpOworICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArPSBFU1RJTUFURV9WQVJfU0laRShkZWxpdmVyX25vdGlmaWNhdGlvbik7CisKKyAgICAgICAgICAgICAgICAvKiB3ZSdsbCBuZWVkIHRvIHVwZGF0ZSB0aGlzIGNvdW50ZXIgbGF0ZXIgKi8KKyAgICAgICAgICAgICAgICBtYXhfbWVzc2FnZV9jb3VudF9wdHJzW21lc3NhZ2VfY291bnQtMV0gPQorICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhcnRtcC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIGp1c3QgdG8gYmUgc3VyZSAqLworICAgICAgICAgICAgICAgIG1heF9tZXNzYWdlX2NvdW50X3B0cnNbbWVzc2FnZV9jb3VudC0xXSA9IE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIGNvcHkgaW4gdGhlIGNvbGxlY3RlZCBkYXRhICovCisgICAgICAgICAgICB3aGlsZSh3YWxrZXIpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZkZWxpdmVyX25vdGlmaWNhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlci0+bmFtZSwgd2Fsa2VyLT5uYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlci0+dHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhbGtlci0+dmFsLnN0cmluZywgd2Fsa2VyLT52YWxfbGVuKTsKKworICAgICAgICAgICAgICAgIC8qIDggYnl0ZSBwYWRkaW5nIGZvciBBU04gZW5jb2RpbmdzIGFuIGEgZmV3IGV4dHJhIE9JRCBieXRlcyAqLworICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArPSBFU1RJTUFURV9WQVJfU0laRSh3YWxrZXIpOworCisgICAgICAgICAgICAgICAgd2Fsa2VyID0gd2Fsa2VyLT5uZXh0X3ZhcmlhYmxlOworCisgICAgICAgICAgICAgICAgLyogaWYgdGhlIGN1cnJlbnQgc2l6ZSBQTFVTIHRoZSBuZXh0IG9uZSAod2hpY2ggaXMgbm93CisgICAgICAgICAgICAgICAgICAgaW4gJ3dhbGtlcicpIGlzIGdyZWF0ZXIgdGhhbiB0aGUgbGltZXQgdGhlbiB3ZSBzdG9wIGhlcmUgKi8KKyAgICAgICAgICAgICAgICBpZiAob2JqLT5tYXhfcGFja2V0X3NpemUgPiAwICYmCisgICAgICAgICAgICAgICAgICAgIGVzdGltYXRlZF9wa3Rfc2l6ZSArCisgICAgICAgICAgICAgICAgICAgIEVTVElNQVRFX1ZBUl9TSVpFKHdhbGtlcikgPj0KKyAgICAgICAgICAgICAgICAgICAgb2JqLT5tYXhfcGFja2V0X3NpemUpIHsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBzZW5kIG91dCB0aGUgbm90aWZpY2F0aW9uICovCisgICAgICAgICAgICBzZW5kX3YydHJhcChkZWxpdmVyX25vdGlmaWNhdGlvbik7CisgICAgICAgIH0KKworICAgICAgICBmb3IoaSA9IDA7IGkgPCBtZXNzYWdlX2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIC8qIHVwZGF0ZSB0aGUgbWF4IGNvdW50IHBvaW50ZXIgKi8KKyAgICAgICAgICAgIGlmIChtYXhfbWVzc2FnZV9jb3VudF9wdHJzW2ldKQorICAgICAgICAgICAgICAgICoobWF4X21lc3NhZ2VfY291bnRfcHRyc1tpXSkgPSBtZXNzYWdlX2NvdW50OworICAgICAgICAgICAgCisgICAgICAgICAgICBzZW5kX3YydHJhcChyZWFkeV9mb3JfZGVsaXZlcnlbaV0pOworICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQocmVhZHlfZm9yX2RlbGl2ZXJ5W2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworCisgICAgICAgIC8qIHJlY29yZCB0aGlzIGFzIHRoZSB0aW1lIHByb2Nlc3NlZCAqLworICAgICAgICAvKiBYWFg6IHRoaXMgbWF5IGNyZWVwIGJ5IGEgZmV3IHNlY29uZHMgd2hlbiBwcm9jZXNzaW5nIGFuZCBtYXliZSB3ZSB3YW50CisgICAgICAgICAgIHRvIGRvIHRoZSB0aW1lIHN0YW1wIGF0IHRoZSBiZWdpbm5pbmc/ICovCisgICAgICAgIG9iai0+bGFzdF9ydW4gPSB0aW1lKE5VTEwpOworICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0ZXJhdG9yKTsKKworICAgIC8qIGNhbGN1bGF0ZSB0aGUgbmV4dCB0aW1lIHRvIHNsZWVwIGZvciAqLworICAgIF9zY2hlZHVsZV9uZXh0X2V4ZWN1dGVfdGltZSgpOworfQorCitpbnQKK2NhbGN1bGF0ZV90aW1lX3VudGlsX25leHRfcnVuKGRlbGl2ZXJfYnlfbm90aWZ5ICppdCwgdGltZV90ICpub3cpIHsKKyAgICB0aW1lX3QgICAgICAgICAgbG9jYWxfbm93OworCisgICAgLyogaWYgd2Ugd2VyZW4ndCBwYXNzZWQgYSB2YWxpZCB0aW1lLCBmYWtlIGl0ICovCisgICAgaWYgKE5VTEwgPT0gbm93KSB7CisgICAgICAgIG5vdyA9ICZsb2NhbF9ub3c7CisgICAgICAgIHRpbWUoJmxvY2FsX25vdyk7CisgICAgfQorCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKGl0LT5sYXN0X3J1biAhPSAwLCAtMSk7CisKKyAgICAvKiBzZXQgdGhlIHRpbWVzdGFtcCBmb3IgdGhlIG5leHQgcnVuICovCisgICAgaXQtPm5leHRfcnVuID0gaXQtPmxhc3RfcnVuICsgaXQtPmZyZXF1ZW5jeTsKKworICAgIC8qIGhvdyBsb25nIHVudGlsIHRoZSBuZXh0IHJ1bj8gKi8KKyAgICByZXR1cm4gaXQtPm5leHRfcnVuIC0gKm5vdzsKK30KKworc3RhdGljIHZvaWQKK19zY2hlZHVsZV9uZXh0X2V4ZWN1dGVfdGltZSh2b2lkKSB7CisgICAgdGltZV90ICAgICAgICAgICAgIGxvY2FsX25vdyA9IHRpbWUoTlVMTCk7CisgICAgaW50ICAgICAgICAgICAgICAgIHNsZWVwX2ZvciA9IElOVF9NQVg7CisgICAgaW50ICAgICAgICAgICAgICAgIG5leHRfdGltZTsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXRlcmF0b3I7CisgICAgZGVsaXZlcl9ieV9ub3RpZnkgKm9iajsKKworICAgIERFQlVHTVNHVEwoKCJkZWxpdmVyQnlOb3RpZnkiLCAiQ2FsY3VsYXRpbmcgc2NoZWR1bGluZyBuZWVkZWRcbiIpKTsKKworICAgIGlmIChhbGFybV9yZWcpIHsKKyAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKGFsYXJtX3JlZyk7CisgICAgICAgIGFsYXJtX3JlZyA9IDA7CisgICAgfQorCisgICAgaXRlcmF0b3IgPSBDT05UQUlORVJfSVRFUkFUT1IoZGVsaXZlcl9jb250YWluZXIpOworICAgIGlmIChOVUxMID09IGl0ZXJhdG9yKQorICAgICAgICByZXR1cm47CisKKyAgICBmb3Iob2JqID0gSVRFUkFUT1JfRklSU1QoaXRlcmF0b3IpOyBvYmo7CisgICAgICAgIG9iaiA9IElURVJBVE9SX05FWFQoaXRlcmF0b3IpKSB7CisgICAgICAgIG5leHRfdGltZSA9IGNhbGN1bGF0ZV90aW1lX3VudGlsX25leHRfcnVuKG9iaiwgJmxvY2FsX25vdyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJkZWxpdmVyQnlOb3RpZnkiLCAiICBvYmo6ICVkIChsYXN0PSVkLCBuZXh0X3J1bj0lZClcbiIsIG5leHRfdGltZSwgb2JqLT5sYXN0X3J1biwgb2JqLT5uZXh0X3J1bikpOworICAgICAgICBpZiAobmV4dF90aW1lIDwgc2xlZXBfZm9yKQorICAgICAgICAgICAgc2xlZXBfZm9yID0gbmV4dF90aW1lOworICAgIH0KKworICAgIGlmIChzbGVlcF9mb3IgIT0gSU5UX01BWCkgeworICAgICAgICBpZiAoc2xlZXBfZm9yIDwgMSkKKyAgICAgICAgICAgIHNsZWVwX2ZvciA9IDE7IC8qIGdpdmUgYXQgbGVhc3QgYSBzbWFsbCBwYXVzZSAqLworICAgICAgICBERUJVR01TR1RMKCgiZGVsaXZlckJ5Tm90aWZ5IiwgIk5leHQgZXhlY3V0aW9uIGluICVkIChtYXggPSAlZCkgc2Vjb25kc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgc2xlZXBfZm9yLCBJTlRfTUFYKSk7CisgICAgICAgIGFsYXJtX3JlZyA9IHNubXBfYWxhcm1fcmVnaXN0ZXIoc2xlZXBfZm9yLCAwLCAmZGVsaXZlcl9leGVjdXRlLCBOVUxMKTsKKyAgICB9CisKKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0ZXJhdG9yKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGVsaXZlci9kZWxpdmVyQnlOb3RpZnkuaCBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjkyYzM2NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2RlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5LmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBERUxJVkVSQllOT1RJRllfSAorI2RlZmluZSBERUxJVkVSQllOT1RJRllfSCAxCisKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworY29uZmlnX2FkZF9taWIoTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQikKKwordm9pZCBpbml0X2RlbGl2ZXJCeU5vdGlmeSh2b2lkKTsKKwordm9pZCBwYXJzZV9kZWxpdmVyX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkIGZyZWVfZGVsaXZlcl9jb25maWcodm9pZCk7CisKK1NOTVBBbGFybUNhbGxiYWNrIGRlbGl2ZXJfZXhlY3V0ZTsKKworI2RlZmluZSBORVRTTk1QX0RFTElWRVJfTk9fUEVSSU9EX09JRCAgIDB4MDEKKyNkZWZpbmUgTkVUU05NUF9ERUxJVkVSX05PX01TR19DT1VOVFMgICAweDAyCisKKy8qIGltcGxlbWVudGF0aW9uIGRldGFpbHMgKi8KK3R5cGVkZWYgc3RydWN0IGRlbGl2ZXJfYnlfbm90aWZ5X3MgeworICAgaW50ICAgICBmcmVxdWVuY3k7CisgICBpbnQgICAgIGxhc3RfcnVuOworICAgaW50ICAgICBuZXh0X3J1bjsKKyAgIG9pZCAgICAqdGFyZ2V0OworICAgc2l6ZV90ICB0YXJnZXRfbGVuOworICAgaW50ICAgICBtYXhfcGFja2V0X3NpemU7CisgICBpbnQgICAgIGZsYWdzOworfSBkZWxpdmVyX2J5X25vdGlmeTsKKworaW50IGNhbGN1bGF0ZV90aW1lX3VudGlsX25leHRfcnVuKGRlbGl2ZXJfYnlfbm90aWZ5ICppdCwgdGltZV90ICpub3cpOworCisjZW5kaWYgLyogZGVsaXZlckJ5Tm90aWZ5X2ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgKaW5kZXggODBmM2UxZi4uNmI3Y2RkNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuLmgKQEAgLTMsNyArMywxMCBAQAogICovCiBjb25maWdfcmVxdWlyZShkaXNtYW4vZXZlbnQtbWliKQogY29uZmlnX3JlcXVpcmUoZGlzbWFuL2V4cHJlc3Npb24tbWliKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKy8qIHRoZSBzY2hlZHVsZSBtaWIgaXMgYWxsIGFib3V0IHdyaXRpbmcgKFNFVHMpICovIAogY29uZmlnX3JlcXVpcmUoZGlzbWFuL3NjaGVkdWxlKQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIC8qIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9uc2xvb2t1cC1taWIpICAgKi8KIC8qIGNvbmZpZ19yZXF1aXJlKGRpc21hbi9waW5nLW1pYikgICAgICAgKi8KIC8qIGNvbmZpZ19yZXF1aXJlKGRpc21hbi90cmFjZXJvdXRlLW1pYikgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMKaW5kZXggMzI3ZjhiYS4uYmM0ZmYwYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmMKQEAgLTQsMTIgKzQsMTcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGlzbWFuX2RlYnVnZ2luZywgbGlibmV0c25tcG1pYnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobXRlZXZlbnQsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG10ZWV2ZW50X3JlbW92ZWVudHJ5LCBtdGVldmVudCkKKwogbmV0c25tcF90ZGF0YSAqZXZlbnRfdGFibGVfZGF0YTsKIAogICAgIC8qCkBAIC0yMyw3ICsyOCw3IEBACiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgImluaXQgZXZlbnQgY29udGFpbmVyXG4iKSk7CiAgICAgaWYgKCFldmVudF90YWJsZV9kYXRhKSB7CiAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSgibXRlRXZlbnRUYWJsZSIsIDApOwotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiY3JlYXRlIGV2ZW50IGNvbnRhaW5lciAoJXgpXG4iLAorICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiY3JlYXRlIGV2ZW50IGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmVudF90YWJsZV9kYXRhKSk7CiAgICAgfQogfQpAQCAtNDMsMTIgKzQ4LDEyIEBACiAKICAgICAvKgogICAgICAqIEluc2VydCBmaXhlZCBldmVudHMgZm9yIHRoZSBkZWZhdWx0IHRyaWdnZXIgbm90aWZpY2F0aW9ucwotICAgICAqCisgICAgICogCiAgICAgICogTkI6IGludGVybmFsIGV2ZW50cyAod2l0aCBhbiBvd25lciBvZiAiX3NubXBkIikgd2lsbCBub3QgaW4KICAgICAgKiBmYWN0IHJlZmVyIHRvIHRoZSBtdGVPYmplY3RzVGFibGUgZm9yIHRoZSBwYXlsb2FkIHZhcmJpbmRzLgotICAgICAqIFRoZSByb3V0aW5lIG10ZU9iamVjdHNfaW50ZXJuYWxfdmJsaXN0KCkgaGFyZGNvZGVzIHRoZQorICAgICAqIFRoZSByb3V0aW5lIG10ZU9iamVjdHNfaW50ZXJuYWxfdmJsaXN0KCkgaGFyZGNvZGVzIHRoZSAKICAgICAgKiBhcHByb3ByaWF0ZSB2YXJiaW5kcyBmb3IgdGhlc2UgaW50ZXJuYWwgZXZlbnRzLgotICAgICAqICAgVGhpcyByb3V0aW5lIHdpbGwgbmVlZCB0byBiZSB1cGRhdGVkIHdoZW5ldmVyIGEgbmV3CisgICAgICogICBUaGlzIHJvdXRpbmUgd2lsbCBuZWVkIHRvIGJlIHVwZGF0ZWQgd2hlbmV2ZXIgYSBuZXcgCiAgICAgICogaW50ZXJuYWwgZXZlbnQgaXMgYWRkZWQuCiAgICAgICovCiAgICAgaWYgKCBfZGVmYXVsdHNfaW5pdCkKQEAgLTExOSw2ICsxMjQsNyBAQAogICAgICAqCiAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ESVNNQU5fREVCVUdHSU5HCiB2b2lkCiBfbXRlRXZlbnRfZHVtcCh2b2lkKQogewpAQCAtMTM1LDEyICsxNDEsMTIgQEAKICAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICIoJXMsICVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT52YWwuc3RyaW5nKSk7Ci0gICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmR1bXAiLCAiOiAleCwgJXhcbiIsIHJvdywgZW50cnkpKTsKKyAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICI6ICVwLCAlcFxuIiwgcm93LCBlbnRyeSkpOwogICAgICAgICBpKys7CiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICJFdmVudFRhYmxlICVkIGVudHJpZXNcbiIsIGkpKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRElTTUFOX0RFQlVHR0lORyAqLwogCiAvKgogICogQ3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgZXZlbnQgdGFibGUgCkBAIC0xOTYsNiArMjAyLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFRVZFTlRfUkVNT1ZFRU5UUlkKIC8qCiAgKiBSZW1vdmUgYSByb3cgZnJvbSB0aGUgZXZlbnQgdGFibGUgCiAgKi8KQEAgLTIwOCw5ICsyMTUsOSBAQAogICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLwogICAgIGVudHJ5ID0gKHN0cnVjdCBtdGVFdmVudCAqKQogICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyhldmVudF90YWJsZV9kYXRhLCByb3cpOwotICAgIGlmIChlbnRyeSkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFRVZFTlRfUkVNT1ZFRU5UUlkgKi8KIAogICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAqCkBAIC0yMjIsMTAgKzIyOSwxMiBAQAogX210ZUV2ZW50X2ZpcmVfbm90aWZ5KCBzdHJ1Y3QgbXRlRXZlbnQgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRlVHJpZ2dlciAgKnRyaWdnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqc3VmZml4LCBzaXplX3Qgc2Z4X2xlbiApOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogX210ZUV2ZW50X2ZpcmVfc2V0KCAgICBzdHJ1Y3QgbXRlRXZlbnQgICAgKmV2ZW50LAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXRlVHJpZ2dlciAgKnRyaWdnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqc3VmZml4LCBzaXplX3Qgc2Z4X2xlbiApOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBpbnQKIG10ZUV2ZW50X2ZpcmUoIGNoYXIgKm93bmVyLCBjaGFyICpldmVudCwgICAgICAvKiBFdmVudCB0byBpbnZva2UgICAgKi8KQEAgLTI2MSwxMSArMjcwLDEzIEBACiAgICAgICAgIF9tdGVFdmVudF9maXJlX25vdGlmeSggZW50cnksIHRyaWdnZXIsIHN1ZmZpeCwgc19sZW4gKTsKICAgICAgICAgZmlyZWQgPSAxOwogICAgIH0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgaWYgKGVudHJ5LT5tdGVFdmVudEFjdGlvbnMgJiBNVEVfRVZFTlRfU0VUKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZmlyZSIsICJGaXJpbmcgc2V0IGV2ZW50XG4iKSk7CiAgICAgICAgIF9tdGVFdmVudF9maXJlX3NldCggZW50cnksIHRyaWdnZXIsIHN1ZmZpeCwgc19sZW4gKTsKICAgICAgICAgZmlyZWQgPSAxOwogICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGlmICghZmlyZWQpCiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6ZmlyZSIsICJNYXRjaGVkIGV2ZW50IGlzIGVtcHR5XG4iKSk7CkBAIC0zMzAsNyArMzQxLDcgQEAKICAgICB2cC0+bmV4dF92YXJpYWJsZSAgICAgPSB2Ymxpc3QtPm5leHRfdmFyaWFibGU7CiAgICAgdmJsaXN0LT5uZXh0X3ZhcmlhYmxlID0gdmFyOwogfQotI2VuZGlmCisjZW5kaWYgLyogX19OT1RfTkVFREVEICovCiAKIGludAogX210ZUV2ZW50X2ZpcmVfbm90aWZ5KCBzdHJ1Y3QgbXRlRXZlbnQgICAqZW50cnksICAgICAvKiBUaGUgZXZlbnQgdG8gZmlyZSAgKi8KQEAgLTMzOCw5ICszNDksOSBAQAogICAgICAgICAgICAgICAgICAgICAgICBvaWQgKnN1ZmZpeCwgc2l6ZV90IHNmeF9sZW4gKSAvKiBNYXRjaGluZyBpbnN0YW5jZSAgKi8KIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnYyOwotICAgIG9pZCAgICBzbm1wdHJhcF9vaWRbXSAgID0geyAxLDMsNiwxLDYsMywxLDEsNCwxLDAgfTsKLSAgICBzaXplX3Qgc25tcHRyYXBfb2lkX2xlbiA9IE9JRF9MRU5HVEgoc25tcHRyYXBfb2lkKTsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnM7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgICBzbm1wdHJhcF9vaWRbXTsKKyAgICBleHRlcm4gY29uc3Qgc2l6ZV90ICAgIHNubXB0cmFwX29pZF9sZW47CisgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzOwogCiAgICAgICAgICAvKgogICAgICAgICAgICogVGhlIEV2ZW50LU1JQiBzcGVjaWZpY2F0aW9uIHNheXMgdGhhdCBvYmplY3RzIGZyb20gdGhlCkBAIC00MjEsNyArNDMyLDcgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAodjIgPSB2YXI7IHYyICYmIHYyLT5uZXh0X3ZhcmlhYmxlOyB2Mj12Mi0+bmV4dF92YXJpYWJsZSkKICAgICAgICAgICAgICAgICA7Ci0gICAgICAgICAgICBtdGVPYmplY3RzX2ludGVybmFsX3ZibGlzdCh2MiwgIGVudHJ5LT5tdGVOb3RpZnlPYmplY3RzLCB0cmlnZ2VyLCBzKTsKKyAgICAgICAgICAgIG10ZU9iamVjdHNfaW50ZXJuYWxfdmJsaXN0KHYyLCBlbnRyeS0+bXRlTm90aWZ5T2JqZWN0cywgdHJpZ2dlciwgcyk7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTQzNCw2ICs0NDUsNyBAQAogfQogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIF9tdGVFdmVudF9maXJlX3NldCggc3RydWN0IG10ZUV2ZW50ICAgKmVudHJ5LCAgICAgIC8qIFRoZSBldmVudCB0byBmaXJlICovCiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBtdGVUcmlnZ2VyICp0cmlnZ2VyLCAgICAvKiBUcmlnZ2VyIHRoYXQgZmlyZWQgKi8KQEAgLTQ3Nyw0ICs0ODksNCBAQAogCiAgICAgLyogWFhYIC0gTmVlZCB0byBjaGVjayByZXN1bHQgKi8KIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50LmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaAppbmRleCBiMzU4NTE5Li4zYmU1YzZlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnQuaApAQCAtNDYsNyArNDYsNyBAQAogICAgICAqIENvbHVtbiB2YWx1ZXMgZm9yIHRoZSBtYWluIG10ZUV2ZW50VGFibGUKICAgICAgKi8KICAgICBjaGFyICAgICAgICAgICAgbXRlRXZlbnRDb21tZW50W01URV9TVFIyX0xFTisxXTsKLSAgICBjaGFyICAgICAgICAgICAgbXRlRXZlbnRBY3Rpb25zOworICAgIHVfY2hhciAgICAgICAgICBtdGVFdmVudEFjdGlvbnM7CiAKICAgICAvKgogICAgICAqIENvbHVtbiB2YWx1ZXMgZm9yIE5vdGlmaWNhdGlvbiBldmVudHMgKG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRDb25mLmMKaW5kZXggMWI5ZGU3OC4uMjQxOTJhNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudENvbmYuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CkBAIC0xMSw2ICsxMiw3IEBACiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlRXZlbnRzQ29uZiBtb2R1bGUgKi8KIHZvaWQKQEAgLTQ2OSw3ICs0NzEsNyBAQAogc3RvcmVfbXRlRVRhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CkBAIC00OTksMTIgKzUwMSwxMiBAQAogICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVFVGFibGUgIik7CiAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVFTmFtZTsgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZUV2ZW50Q29tbWVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVFTmFtZTsgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZUV2ZW50Q29tbWVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIC8qIC4uLiAoYnV0IHNraXAgdGhlIG10ZUV2ZW50QWN0aW9uIGZpZWxkKS4uLiAqLwogICAgICAgICB0aW50ID0gZW50cnktPmZsYWdzICYgKE1URV9FVkVOVF9GTEFHX0VOQUJMRUR8TVRFX0VWRU5UX0ZMQUdfQUNUSVZFKTsgCiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwpAQCAtNTIwLDE3ICs1MjIsMTcgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZUVOb3RUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogICAgIAotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZUVOYW1lOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlRU5hbWU7ICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlTm90aWZpY2F0aW9uOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVOb3RpZmljYXRpb25fbGVuKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZU5vdGlmeU93bmVyOyAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVOb3RpZnlPYmplY3RzOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlTm90aWZ5T3duZXI7ICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZU5vdGlmeU9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CiAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CiAgICAgICAgIH0KIApAQCAtNTM5LDE5ICs1NDEsMTkgQEAKICAgICAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZUVTZXRUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogICAgIAotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwID0gZW50cnktPm10ZUVOYW1lOyAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOworICAgICAgICAgICAgY3AgPSBlbnRyeS0+bXRlRU5hbWU7ICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlU2V0T0lEOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVTZXRPSURfbGVuKTsKICAgICAgICAgICAgIHRpbnQgPSBlbnRyeS0+bXRlU2V0VmFsdWU7CiAgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgICBjcHRyLCAmdGludCwgTlVMTCk7Ci0gICAgICAgICAgICB2cCA9IGVudHJ5LT5tdGVTZXRUYXJnZXQ7ICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAmdGludCApOwotICAgICAgICAgICAgdnAgPSBlbnRyeS0+bXRlU2V0Q29udGV4dDsgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwID0gZW50cnktPm10ZVNldFRhcmdldDsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICZ0aW50ICk7CisgICAgICAgICAgICBjcCA9IGVudHJ5LT5tdGVTZXRDb250ZXh0OyAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAmdGludCApOwogICAgICAgICAgICAgdGludCA9IGVudHJ5LT5mbGFncyAmIChNVEVfU0VUX0ZMQUdfT0JKV0lMRHxNVEVfU0VUX0ZMQUdfQ1RYV0lMRCk7IAogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwpOwogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKaW5kZXggNTg5MmZiNy4uN2QyYzk0YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCkBAIC03LDExICs3LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfb2lkKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMCw3ICsyOCw2IEBACiAgICAgc3RhdGljIG9pZCAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgNCwgMyB9OwogICAgIHNpemVfdCAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzAsMTEgKzM3LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNDgsMTAgKzYzLDE4IEBACiAKICAgICAvKiBSZWdpc3RlciB0aGlzIHVzaW5nIHRoZSAoY29tbW9uKSBldmVudF90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBldmVudF90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgTm90aWZ5IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBOb3RpZnkgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KIAogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgdGFibGUgKi8KQEAgLTEwOSw2ICsxMzIsOCBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0yMzUsNiArMjYwLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgKaW5kZXggYmUyYmNjNi4uYWJkNjExMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oCkBAIC05LDYgKzksNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuYwppbmRleCAzNjQ2MTQ0Li5lZTY5NmYxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmMKQEAgLTcsMTEgKzcsMjAgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50U2V0VGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMCw3ICsyOSw2IEBACiAgICAgc3RhdGljIG9pZCAgbXRlRXZlbnRTZXRUYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgNCwgNCB9OwogICAgIHNpemVfdCAgICAgIG10ZUV2ZW50U2V0VGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlRXZlbnRTZXRUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzAsMTEgKzM4LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZUV2ZW50U2V0VGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50U2V0VGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0VGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZUV2ZW50U2V0VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50U2V0VGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNDgsMTAgKzY0LDE5IEBACiAKICAgICAvKiBSZWdpc3RlciB0aGlzIHVzaW5nIHRoZSAoY29tbW9uKSBldmVudF90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBldmVudF90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiRXZlbnQgU2V0IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBTZXQgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2ZW50X3RhYmxlX2RhdGEpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlRXZlbnRTZXRUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KKwogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIG10ZUV2ZW50U2V0VGFibGUgdGFibGUgKi8KIGludApAQCAtMTIzLDYgKzE0OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0yNzgsNiArMzA0LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFNldFRhYmxlLmgKaW5kZXggYjhjYjEyNC4uNzFlYzA5YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRTZXRUYWJsZS5oCkBAIC05LDYgKzksNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9tdGVFdmVudFNldFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZUV2ZW50U2V0VGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVFdmVudFNldFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuYwppbmRleCAxOWZlMGExLi5jNWI1MzRlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmMKQEAgLTcsMTIgKzcsMjQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAidXRpbGl0aWVzL2lxdWVyeS5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudC5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeV9wZHVfc2Vzc2lvbikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobXRlZXZlbnRfcmVtb3ZlZW50cnkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qIEluaXRpYWxpemVzIHRoZSBtdGVFdmVudFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjEsNyArMzMsNiBAQAogICAgIHN0YXRpYyBvaWQgIG10ZUV2ZW50VGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDQsIDIgfTsKICAgICBzaXplX3QgICAgICBtdGVFdmVudFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZUV2ZW50VGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMxLDExICs0MiwxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVFdmVudFRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVFdmVudFRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnRUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ5LDEwICs2OCwxOCBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgZXZlbnRfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXZlbnRfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgIkV2ZW50IFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJFdmVudCBUYWJsZSBjb250YWluZXIgKCVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZlbnRfdGFibGVfZGF0YSkpOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVFdmVudFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIG10ZUV2ZW50VGFibGUgdGFibGUgKi8KIGludApAQCAtMTExLDYgKzEzOCw4IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTMzOCw2ICszNjcsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgIH0KICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50Om1pYiIsICJUYWJsZSBoYW5kbGVyLCBkb25lXG4iKSk7CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUuaAppbmRleCBhN2Q3NTYwLi5hZGMxYzMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudFRhYmxlLmgKQEAgLTksNiArOSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZUV2ZW50VGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fbXRlRXZlbnRUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZUV2ZW50VGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0cy5jCmluZGV4IDEyM2FmN2YuLmNmOTUwYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuYwpAQCAtMjM2LDggKzIzNiw3IEBACiAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCiAgICAgZW50cnkgPSAoc3RydWN0IG10ZU9iamVjdCAqKQogICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyhvYmplY3RzX3RhYmxlX2RhdGEsIHJvdyk7Ci0gICAgaWYgKGVudHJ5KQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYwppbmRleCAzZjkyOTNjLi43Njc5ODY1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYuYwpAQCAtNjIsNyArNjIsNyBAQAogICAgIGxpbmUgID0gcmVhZF9jb25maWdfcmVhZF9kYXRhKEFTTl9PQ1RFVF9TVFIsIGxpbmUsICZ2cCwgICAgJmxlbik7CiAgICAgbGluZSAgPSByZWFkX2NvbmZpZ19yZWFkX2RhdGEoQVNOX1VOU0lHTkVELCAgbGluZSwgJmluZGV4LCAmbGVuKTsKIAotICAgIERFQlVHTVNHKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiKCVzLCAlcywgJWQpICIsIG93bmVyLCBvbmFtZSwgaW5kZXgpKTsKKyAgICBERUJVR01TRygoImRpc21hbjpldmVudDpjb25mIiwgIiglcywgJXMsICVsdSkgIiwgb3duZXIsIG9uYW1lLCBpbmRleCkpOwogCiAgICAgcm93ICAgPSBtdGVPYmplY3RzX2NyZWF0ZUVudHJ5KCBvd25lciwgb25hbWUsIGluZGV4LCAwICk7CiAgICAgLyogZW50cnkgPSAoc3RydWN0IG10ZU9iamVjdCAqKW5ldHNubXBfdGRhdGFfcm93X2VudHJ5KCByb3cgKTsgKi8KQEAgLTExMSw3ICsxMTEsNyBAQAogc3RvcmVfbXRlT1RhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CkBAIC0xMzEsMTYgKzEzMSwxNiBAQAogICAgICAgICBpZiAoIGVudHJ5LT5mbGFncyAmIE1URV9PQkpFQ1RfRkxBR19GSVhFRCApCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiICBTdG9yaW5nICglcyAlcyAlZClcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIgIFN0b3JpbmcgKCVzICVzICVsZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPm10ZU93bmVyLCBlbnRyeS0+bXRlT05hbWUsIGVudHJ5LT5tdGVPSW5kZXgpKTsKICAgICAgICAgbWVtc2V0KGxpbmUsIDAsIHNpemVvZihsaW5lKSk7CiAgICAgICAgIHN0cmNhdChsaW5lLCAiX210ZU9UYWJsZSAiKTsKICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgdnAgPSBlbnRyeS0+bXRlT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKLSAgICAgICAgdnAgPSBlbnRyeS0+bXRlT05hbWU7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgJnRpbnQgKTsKKyAgICAgICAgY3AgPSBlbnRyeS0+bXRlT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKKyAgICAgICAgY3AgPSBlbnRyeS0+bXRlT05hbWU7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgJnRpbnQgKTsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCAgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVPSW5kZXgsIE5VTEwpOwogICAgICAgICB2cCAgID0gZW50cnktPm10ZU9iamVjdElEOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5jCmluZGV4IDk2NDgyZTUuLmY3ZjZlMDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmMKQEAgLTcsMTEgKzcsMjEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZU9iamVjdHMuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX29pZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKwogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVPYmplY3RzVGFibGUgbW9kdWxlICovCiB2b2lkCiBpbml0X210ZU9iamVjdHNUYWJsZSh2b2lkKQpAQCAtMjAsNyArMzAsNiBAQAogICAgIHN0YXRpYyBvaWQgbXRlT2JqZWN0c1RhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA4OCwgMSwgMywgMSB9OwogICAgIHNpemVfdCAgICAgbXRlT2JqZWN0c1RhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZU9iamVjdHNUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIG9iamVjdCB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzksMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGlzIHRhYmxlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVPYmplY3RzVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlT2JqZWN0c1RhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZU9iamVjdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZU9iamVjdHNUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVPYmplY3RzVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC01MCw2ICs2NywxNSBAQAogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBvYmplY3RzX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVPYmplY3RzVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVPYmplY3RzVGFibGUgdGFibGUgKi8KIGludApAQCAtMTA1LDYgKzEzMSw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0zMDksNyArMzM2LDEyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlT2JqZWN0c1RhYmxlLmgKaW5kZXggMTRiZmIyNi4uZjVjZDdiYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlT2JqZWN0c1RhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZU9iamVjdHNUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZU9iamVjdHNUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmMKaW5kZXggMTFjYjViNy4uNWEwZGNiYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5jCkBAIC00LDExICs0LDE2IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZUV2ZW50LmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkaXNtYW5fZGVidWdnaW5nLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtdGV0cmlnZ2VyLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtdGV0cmlnZ2VyX3JlbW92ZWVudHJ5LCBtdGV0cmlnZ2VyKQorCiBuZXRzbm1wX3RkYXRhICp0cmlnZ2VyX3RhYmxlX2RhdGE7CiAKIG9pZCAgICBfc3lzVXBUaW1lX2luc3RhbmNlW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDMsIDAgfTsKQEAgLTMxLDcgKzM2LDcgQEAKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIG10ZVRyaWdnZXJUYWJsZSIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJjcmVhdGUgdHJpZ2dlciBjb250YWluZXIgKCV4KVxuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDppbml0IiwgImNyZWF0ZSB0cmlnZ2VyIGNvbnRhaW5lciAoJXApXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcl90YWJsZV9kYXRhKSk7CiAgICAgfQogICAgIG10ZVRyaWdnZXJGYWlsdXJlcyA9IDA7CkBAIC01Myw2ICs1OCw3IEBACiAgICAgICoKICAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RJU01BTl9ERUJVR0dJTkcKIHZvaWQKIF9tdGVUcmlnZ2VyX2R1bXAodm9pZCkKIHsKQEAgLTY5LDEyICs3NSwxMiBAQAogICAgICAgICBERUJVR01TRygoImRpc21hbjpldmVudDpkdW1wIiwgIiglcywgJXMpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPmluZGV4ZXMtPm5leHRfdmFyaWFibGUtPnZhbC5zdHJpbmcpKTsKLSAgICAgICAgREVCVUdNU0coKCJkaXNtYW46ZXZlbnQ6ZHVtcCIsICI6ICV4LCAleFxuIiwgcm93LCBlbnRyeSkpOworICAgICAgICBERUJVR01TRygoImRpc21hbjpldmVudDpkdW1wIiwgIjogJXAsICVwXG4iLCByb3csIGVudHJ5KSk7CiAgICAgICAgIGkrKzsKICAgICB9CiAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpkdW1wIiwgIlRyaWdnZXJUYWJsZSAlZCBlbnRyaWVzXG4iLCBpKSk7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RJU01BTl9ERUJVR0dJTkcgKi8KIAogLyoKICAqIENyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRyaWdnZXIgdGFibGUgCkBAIC0xNDIsNiArMTQ4LDcgQEAKICAgICByZXR1cm4gcm93OwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTVRFVFJJR0dFUl9SRU1PVkVFTlRSWQogLyoKICAqIFJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0cmlnZ2VyIHRhYmxlIAogICovCkBAIC0xNTksNiArMTY2LDcgQEAKICAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NVEVUUklHR0VSX1JFTU9WRUVOVFJZICovCiAKICAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgKaW5kZXggMmIzZWI0OC4uMTk2MjZiMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oCkBAIC0xMjIsOCArMTIyLDggQEAKICAgICAvKgogICAgICAqIENvbHVtbiB2YWx1ZXMgZm9yIEV4aXN0ZW5jZSB0ZXN0cyAobXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlKQogICAgICAqLwotICAgIGNoYXIgICAgICAgICAgICBtdGVURXhUZXN0OwotICAgIGNoYXIgICAgICAgICAgICBtdGVURXhTdGFydHVwOworICAgIHVfY2hhciAgICAgICAgICBtdGVURXhUZXN0OworICAgIHVfY2hhciAgICAgICAgICBtdGVURXhTdGFydHVwOwogICAgIGNoYXIgICAgICAgICAgICBtdGVURXhPYmpPd25lcltNVEVfU1RSMV9MRU4rMV07CiAgICAgY2hhciAgICAgICAgICAgIG10ZVRFeE9iamVjdHNbIE1URV9TVFIxX0xFTisxXTsKICAgICBjaGFyICAgICAgICAgICAgbXRlVEV4RXZPd25lclsgTVRFX1NUUjFfTEVOKzFdOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKaW5kZXggYWQ0NjlkNy4uZWQxZWMzMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCkBAIC03LDExICs3LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjgsNiBAQAogICAgIHN0YXRpYyBvaWQgbXRlVEJvb2xUYWJsZV9vaWRbXSAgICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDIsIDUgfTsKICAgICBzaXplX3QgICAgIG10ZVRCb29sVGFibGVfb2lkX2xlbiAgPSBPSURfTEVOR1RIKG10ZVRCb29sVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUQm9vbFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEJvb2xUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUQm9vbFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVEJvb2xUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC01MSw2ICs2NiwxNCBAQAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJUcmlnZ2VyIEJvb2wgVGFibGVcbiIpKTsKIH0KIAordm9pZAorc2h1dGRvd25fbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KK30KIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTEyOCw2ICsxNTEsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAvKgogICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CiAgICAgICAgICAqLwpAQCAtMjg1LDYgKzMwOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCmluZGV4IGQyZDJkY2IuLmYyZGRkNzcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYwppbmRleCBjMDE1ZTI0Li5lN2JiNjliIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuYwpAQCAtNCw2ICs0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CkBAIC0xNCw2ICsxNSw3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcXVlcnkpCiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckNvbmYgbW9kdWxlICovCiB2b2lkCkBAIC0yNCwxMyArMjYsMTYgQEAKICAgICAvKgogICAgICAqIFJlZ2lzdGVyIGNvbmZpZyBoYW5kbGVyIGZvciB1c2VyLWxldmVsIChmaXhlZCkgdHJpZ2dlcnMgLi4uCiAgICAgICovCi0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoIm1vbml0b3IiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9tdGVNb25pdG9yLCAgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJpZ2dlcm5hbWUgWy1JXSBbLWkgT0lEIHwgLW8gT0lEXSogWy1lIGV2ZW50XSBleHByZXNzaW9uICIpOwotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJkZWZhdWx0TW9uaXRvcnMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzLCBOVUxMLCAieWVzfG5vIik7Ci0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfbGlua1VwRG93bl90cmFwcywgICAgTlVMTCwgInllc3xubyIpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCJtb25pdG9yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9tdGVNb25pdG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyaWdnZXJuYW1lIFstSV0gWy1pIE9JRCB8IC1vIE9JRF0qIFstZSBldmVudF0gZXhwcmVzc2lvbiAiKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigiZGVmYXVsdE1vbml0b3JzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICJ5ZXN8bm8iKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigibGlua1VwRG93bk5vdGlmaWNhdGlvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2xpbmtVcERvd25fdHJhcHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgInllc3xubyIpOwogCiAgICAgLyoKICAgICAgKiAuLi4gZm9yIHBlcnNpc3RlbnQgc3RvcmFnZSBvZiB2YXJpb3VzIGV2ZW50IHRhYmxlIGVudHJpZXMgLi4uCkBAIC0xNDAsMTEgKzE0NSwxMSBAQAogCiAKIHZvaWQKLXBhcnNlX210ZU1vbml0b3IoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCitwYXJzZV9tdGVNb25pdG9yKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpsaW5lKQogewogICAgIGNoYXIgICBidWZbICBTUFJJTlRfTUFYX0xFTl07CiAgICAgY2hhciAgIHRuYW1lW01URV9TVFIxX0xFTisxXTsKLSAgICBjaGFyICAqY3A7CisgICAgY29uc3QgY2hhciAgKmNwOwogICAgIGxvbmcgICB0ZXN0ID0gMDsKIAogICAgIGNoYXIgICBlbmFtZVtNVEVfU1RSMV9MRU4rMV07CkBAIC0xNjMsNyArMTY4LDcgQEAKICAgICBjaGFyICAgb2lkX25hbWVfYnVmW1NQUklOVF9NQVhfTEVOXTsKICAgICBvaWQgICAgbmFtZV9idWZbTUFYX09JRF9MRU5dOwogICAgIHNpemVfdCBuYW1lX2J1Zl9sZW47Ci0gICAgbG9uZyAgIG9wICAgID0gMDsKKyAgICB1X2NoYXIgb3AgICAgPSAwOwogICAgIGxvbmcgICB2YWx1ZSA9IDA7CiAKICAgICBzdHJ1Y3QgbXRlT2JqZWN0ICAqb2JqZWN0OwpAQCAtMTgzLDkgKzE4OCw5IEBACiAgICAgbWVtc2V0KCBidWYsICAgMCwgc2l6ZW9mKGJ1ZikpOwogICAgIG1lbXNldCggdG5hbWUsIDAsIHNpemVvZih0bmFtZSkpOwogICAgIG1lbXNldCggZW5hbWUsIDAsIHNpemVvZihlbmFtZSkpOwotICAgIGZvciAoY3AgPSBjb3B5X253b3JkKGxpbmUsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgIGZvciAoY3AgPSBjb3B5X253b3JkX2NvbnN0KGxpbmUsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgOwotICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCAgIGJ1ZiwgU1BSSU5UX01BWF9MRU4pKSB7CisgICAgICAgICBjcCA9IGNvcHlfbndvcmRfY29uc3QoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTikpIHsKIAogICAgICAgICBpZiAoIGJ1ZlswXSA9PSAnLScgKSB7CiAgICAgICAgICAgICBzd2l0Y2ggKGJ1ZlsxXSkgewpAQCAtMTk4LDcgKzIwMyw3IEBACiAgICAgICAgICAgICBjYXNlICdyJzoKICAgICAgICAgICAgIGNhc2UgJ3UnOgogICAgICAgICAgICAgICAgIC8qIHNraXAgb3B0aW9uIHBhcmFtZXRlciAqLwotICAgICAgICAgICAgICAgIGNwID0gc2tpcF90b2tlbiggY3AgKTsKKyAgICAgICAgICAgICAgICBjcCA9IHNraXBfdG9rZW5fY29uc3QoIGNwICk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdEJzoKICAgICAgICAgICAgIGNhc2UgJ0knOgpAQCAtMjEyLDcgKzIxNyw3IEBACiAgICAgICAgICAgICAgICAgICogICAgICBIYW5kbGUgZWl0aGVyIGNhc2UuCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgaWYgKGNwICYmICpjcCAhPSAnLScpCi0gICAgICAgICAgICAgICAgICAgIGNwID0gc2tpcF90b2tlbiggY3AgKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KCBjcCApOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSAnMCc6CiAgICAgICAgICAgICBjYXNlICcxJzoKQEAgLTI3Niw3ICsyODEsNyBAQAogICAgICAgICAqIE90aGVyd2lzZSB0aGUgZmlyc3QgdG9rZW4gaXMgdGhlIE9JRCB0byBiZSBtb25pdG9yZWQuCiAgICAgICAgICogICBTa2lwIGl0IGFuZCBsb29rIGF0IHRoZSBuZXh0IHRva2VuIChpZiBhbnkpLgogICAgICAgICAqLwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgIGNwID0gY29weV9ud29yZF9jb25zdChjcCwgICBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgaWYgKGNwKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhIG51bWVyaWMgdmFsdWUsIHRoZW4gaXQnbGwgYmUgdGhlIE1JTgpAQCAtMjg0LDcgKzI4OSw3IEBACiAgICAgICAgICAgICAgKiBPdGhlcndpc2UgaXQnbGwgYmUgdGhlIG9wZXJhdGlvbiBmaWVsZCBvZiBhCiAgICAgICAgICAgICAgKiAgIGJvb2xlYW4gdGVzdCAodGhlIHRoaXJkIGZvcm0pCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmICggaXNkaWdpdChidWZbMF0pIHx8IGJ1ZlswXSA9PSAnLScgKQorICAgICAgICAgICAgaWYgKCBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKShidWZbMF0pKSB8fCBidWZbMF0gPT0gJy0nICkKICAgICAgICAgICAgICAgICB0ZXN0ID0gTVRFX1RSSUdHRVJfVEhSRVNIT0xEOwogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIHRlc3QgPSBNVEVfVFJJR0dFUl9CT09MRUFOOwpAQCAtMzE1LDkgKzMyMCw5IEBACiAgICAgICogTm93IHN0YXJ0IHBhcnNpbmcgYWdhaW4gYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZGlyZWN0aXZlLAogICAgICAqICAgZXh0cmFjdGluZyB0aGUgdmFyaW91cyBvcHRpb25zLi4uCiAgICAgICovCi0gICAgZm9yIChjcCA9IGNvcHlfbndvcmQobGluZSwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgZm9yIChjcCA9IGNvcHlfbndvcmRfY29uc3QobGluZSwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICA7Ci0gICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsICAgYnVmLCBTUFJJTlRfTUFYX0xFTikpIHsKKyAgICAgICAgIGNwID0gY29weV9ud29yZF9jb25zdChjcCwgICBidWYsIFNQUklOVF9NQVhfTEVOKSkgewogCiAgICAgICAgIGlmIChidWZbMF0gPT0gJy0nICkgewogICAgICAgICAgICAgc3dpdGNoIChidWZbMV0pIHsKQEAgLTMzMiw3ICszMzcsNyBAQAogICAgICAgICAgICAgICAgIG1lbXNldCggb2lkX25hbWVfYnVmLCAwLCBzaXplb2Yob2lkX25hbWVfYnVmKSk7CiAgICAgICAgICAgICAgICAgbWVtc2V0KCAgICAgbmFtZV9idWYsIDAsIHNpemVvZiggICAgbmFtZV9idWYpKTsKICAgICAgICAgICAgICAgICBuYW1lX2J1Zl9sZW4gPSBNQVhfT0lEX0xFTjsKLSAgICAgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIG9pZF9uYW1lX2J1ZiwgTVRFX1NUUjFfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmRfY29uc3QoY3AsIG9pZF9uYW1lX2J1ZiwgTVRFX1NUUjFfTEVOKTsKICAgICAgICAgICAgICAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKG9pZF9uYW1lX2J1ZiwgbmFtZV9idWYsICZuYW1lX2J1Zl9sZW4pKSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkaXNjb250aW51aXR5IE9JRDogJXNcbiIsIG9pZF9uYW1lX2J1Zik7CiAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoInVua25vd24gZGlzY29udGludWl0eSBPSUQiKTsKQEAgLTM0Niw3ICszNTEsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIAogICAgICAgICAgICAgY2FzZSAnZSc6ICAgLyogIGV2ZW50ICovCi0gICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZChjcCwgZW5hbWUsIE1URV9TVFIxX0xFTik7CisgICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZF9jb25zdChjcCwgZW5hbWUsIE1URV9TVFIxX0xFTik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCiAgICAgICAgICAgICBjYXNlICdJJzogICAvKiB2YWx1ZSBpbnN0YW5jZSAqLwpAQCAtMzY3LDcgKzM3Miw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZHgrKzsKLSAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICBvYmplY3QgPSBtdGVPYmplY3RzX2FkZE9JRCggInNubXBkLmNvbmYiLCB0bmFtZSwgaWR4LCBidWYsIDAgKTsKICAgICAgICAgICAgICAgICBpZiAoIW9iamVjdCkgewogICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVW5rbm93biBwYXlsb2FkIE9JRDogJXNcbiIsIGJ1Zik7CkBAIC0zNzksNyArMzg0LDcgQEAKICAgICAKICAgICAgICAgICAgIGNhc2UgJ28nOiAgIC8qICBvYmplY3QgICovCiAgICAgICAgICAgICAgICAgaWR4Kys7Ci0gICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgY3AgICAgID0gY29weV9ud29yZF9jb25zdChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CiAgICAgICAgICAgICAgICAgb2JqZWN0ID0gbXRlT2JqZWN0c19hZGRPSUQoICJzbm1wZC5jb25mIiwgdG5hbWUsIGlkeCwgYnVmLCAxICk7CiAgICAgICAgICAgICAgICAgaWYgKCFvYmplY3QpIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlVua25vd24gcGF5bG9hZCBPSUQ6ICVzXG4iLCBidWYpOwpAQCAtMzkwLDcgKzM5NSw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCiAgICAgICAgICAgICBjYXNlICdyJzogICAvKiAgcmVwZWF0IGZyZXF1ZW5jeSAqLwotICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmQoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOworICAgICAgICAgICAgICAgIGNwICAgICA9IGNvcHlfbndvcmRfY29uc3QoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgIHJlcGVhdCA9IHN0cnRvdWwoYnVmLCBOVUxMLCAwKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAKQEAgLTQwNiw3ICs0MTEsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIAogICAgICAgICAgICAgY2FzZSAndSc6ICAgLyogIHVzZXIgKi8KLSAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICBjcCAgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICBzZXNzICAgPSBuZXRzbm1wX2lxdWVyeV91c2VyX3Nlc3Npb24oYnVmKTsKICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBzZXNzKSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1c2VyIG5hbWUgJXMgbm90IGZvdW5kXG4iLCBidWYpOwpAQCAtNDQ3LDcgKzQ1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcCA9IE1URV9FWElTVF9BQlNFTlQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgKiAuLi4gdGhlbiBleHRyYWN0IHRoZSBtb25pdG9yZWQgT0lELgpAQCAtNDU1LDcgKzQ2MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBtZW1jcHkob2lkX25hbWVfYnVmLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgY3AgPSBOVUxMOyAgLyogVG8gdGVybWluYXRlIHRoZSBwcm9jZXNzaW5nIGxvb3AgKi8KLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIiVzOiBFeGlzdCAoJXMsICVsZClcbiIsCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6Y29uZiIsICIlczogRXhpc3QgKCVzLCAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRuYW1lLCBvaWRfbmFtZV9idWYsIG9wKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgIApAQCAtNDY1LDcgKzQ3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAqICAgaWRlbnRpZnkgdGhlIGJvb2xlYW4gb3BlcmF0b3IgLi4uCiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBtZW1jcHkob2lkX25hbWVfYnVmLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKGJ1ZlswXSA9PSAnIScpIHsKICAgICAgICAgICAgICAgICAgICAgICAgb3AgPSBNVEVfQk9PTF9VTkVRVUFMOwogICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGJ1ZlswXSA9PSAnPScpIHsKQEAgLTQ4NywxMCArNDkyLDEwIEBACiAgICAgICAgICAgICAgICAgICAgICAqIC4uLiB0aGVuIGV4dHJhY3QgdGhlIGNvbXBhcmlzb24gdmFsdWUuCiAgICAgICAgICAgICAgICAgICAgICAqICAgICAoaWdub3JpbmcgYW55dGhpbmcgdGhhdCByZW1haW5zKQogICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgY3AgICAgPSBjb3B5X253b3JkKGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgICAgPSBjb3B5X253b3JkX2NvbnN0KGNwLCBidWYsIFNQUklOVF9NQVhfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsKICAgICAgICAgICAgICAgICAgICAgY3AgPSBOVUxMOyAgLyogVG8gdGVybWluYXRlIHRoZSBwcm9jZXNzaW5nIGxvb3AgKi8KLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIiVzOiBCb29sICglcywgJWxkLCAlbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmNvbmYiLCAiJXM6IEJvb2wgKCVzLCAlZCwgJWxkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bmFtZSwgb2lkX25hbWVfYnVmLCBvcCwgdmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgCkBAIC01MDEsNyArNTA2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIG1lbWNweShvaWRfbmFtZV9idWYsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgICAgICBtZW1zZXQoICAgICAgICAgYnVmLCAgIDAsIFNQUklOVF9NQVhfTEVOKTsKLSAgICAgICAgICAgICAgICAgICAgY3AgID0gY29weV9ud29yZChjcCwgYnVmLCBTUFJJTlRfTUFYX0xFTik7CisgICAgICAgICAgICAgICAgICAgIGNwICA9IGNvcHlfbndvcmRfY29uc3QoY3AsIGJ1ZiwgU1BSSU5UX01BWF9MRU4pOwogICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsKICAgICAKICAgICAgICAgICAgICAgICAgICAgLyoKQEAgLTY4OSw3ICs2OTQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b2woY3AsIE5VTEwsIDApOwogICAgICAgICAgICAgZW50cnktPm10ZVRUaERGYWxsVmFsdWUgID0gdmFsdWU7Ci0gICAgICAgICAgICBjcCA9IHNraXBfdG9rZW4oY3ApOworICAgICAgICAgICAgY3AgPSBza2lwX3Rva2VuX2NvbnN0KGNwKTsKICAgICAgICAgICAgIHZhbHVlID0gc3RydG9sKGNwLCBOVUxMLCAwKTsKICAgICAgICAgICAgIGVudHJ5LT5tdGVUVGhEUmlzZVZhbHVlICA9IHZhbHVlOwogICAgICAgICAgICAgLyoKQEAgLTcyOSw3ICs3MzQsNyBAQAogfQogCiB2b2lkCi1wYXJzZV9saW5rVXBEb3duX3RyYXBzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQorcGFyc2VfbGlua1VwRG93bl90cmFwcyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICAvKgogICAgICAqIFhYWCAtIFRoaXMgaXNuJ3Qgc3RyaWN0bHkgY29ycmVjdCBhY2NvcmRpbmcgdG8gdGhlCkBAIC03NDgsNyArNzUzLDcgQEAKIAogCiB2b2lkCi1wYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQorcGFyc2VfZGVmYXVsdF9tdGVNb25pdG9ycyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBpZiAoc3RybmNtcCggbGluZSwgInllcyIsIDMpID09IDApIHsKICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpldmVudDpjb25mIiwgIlJlZ2lzdGVyaW5nIGRlZmF1bHQgbW9uaXRvcnNcbiIpKTsKQEAgLTEyNjgsNyArMTI3Myw3IEBACiBzdG9yZV9tdGVUVGFibGUoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKIHsKICAgICBjaGFyICAgICAgICAgICAgbGluZVtTTk1QX01BWEJVRl07Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHI7CisgICAgY2hhciAgICAgICAgICAgKmNwdHIsICpjcDsKICAgICB2b2lkICAgICAgICAgICAqdnA7CiAgICAgc2l6ZV90ICAgICAgICAgIHRpbnQ7CiAgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKQEAgLTEyOTgsMTIgKzEzMDMsMTIgQEAKICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVFRhYmxlICIpOwogICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJDb21tZW50OyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVRyaWdnZXJDb21tZW50OyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICAvKgogICAgICAgICAgKiAuLi4gKGJ1dCBza2lwIHRoZSBtdGVUcmlnZ2VyVGVzdCBhbmQKICAgICAgICAgICogICAgICBhc3NvcnRlZCBib29sZWFuIGZsYWcgZmllbGRzKS4uLgpAQCAtMTMxMSwxNiArMTMxNiwxNiBAQAogICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJWYWx1ZUlEOwogICAgICAgICB0aW50ID0gZW50cnktPm10ZVRyaWdnZXJWYWx1ZUlEX2xlbjsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyVGFyZ2V0OyAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUcmlnZ2VyQ29udGV4dDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyVGFyZ2V0OyAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUcmlnZ2VyQ29udGV4dDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgdGludCA9IGVudHJ5LT5tdGVUcmlnZ2VyRnJlcXVlbmN5OwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJPT3duZXI7ICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPm10ZVRyaWdnZXJPYmplY3RzOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVRyaWdnZXJPT3duZXI7ICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPm10ZVRyaWdnZXJPYmplY3RzOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB0aW50ID0gZW50cnktPmZsYWdzICYKICAgICAgICAgICAgICAgICAgIChNVEVfVFJJR0dFUl9GTEFHX1ZXSUxEICB8TVRFX1RSSUdHRVJfRkxBR19DV0lMRHwKICAgICAgICAgICAgICAgICAgICBNVEVfVFJJR0dFUl9GTEFHX0VOQUJMRUR8TVRFX1RSSUdHRVJfRkxBR19BQ1RJVkUpOwpAQCAtMTMzNywxMCArMTM0MiwxMCBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVERUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVEZWx0YURpc2NvbnRJRDsKICAgICAgICAgICAgIHRpbnQgPSBlbnRyeS0+bXRlRGVsdGFEaXNjb250SURfbGVuOwpAQCAtMTM2MiwyNCArMTM2NywyNCBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJfbXRlVEV4VGFibGUgIik7CiAgICAgICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUTmFtZTsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKICAgICAgICAgICAgIHRpbnQgPSAoZW50cnktPm10ZVRFeFRlc3QgICAgJiAweGZmKSA8PCA4OwogICAgICAgICAgICAgdGludHw9IChlbnRyeS0+bXRlVEV4U3RhcnR1cCAmIDB4ZmYpOwogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX1VOU0lHTkVELCAgY3B0ciwgJnRpbnQsIE5VTEwgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVURXhPYmpPd25lcjsgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEV4T2JqZWN0czsgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRFeE9iak93bmVyOyAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVURXhPYmplY3RzOyAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVURXhFdk93bmVyOyAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEV4RXZlbnQ7ICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRFeEV2T3duZXI7ICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVURXhFdmVudDsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CkBAIC0xMzg4LDEwICsxMzkzLDEwIEBACiAgICAgICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVUQmxUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgdGludCA9ICBlbnRyeS0+bXRlVEJvb2xDb21wYXJpc29uOwogICAgICAgICAgICAgdGludCB8PSAoZW50cnktPmZsYWdzICYgTVRFX1RSSUdHRVJfRkxBR19CU1RBUlQpOwpAQCAtMTM5OSwxNSArMTQwNCwxNSBAQAogICAgICAgICAgICAgdGludCA9ICBlbnRyeS0+bXRlVEJvb2xWYWx1ZTsKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9JTlRFR0VSLCAgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEJvb2xPYmpPd25lcjsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUQm9vbE9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVEJvb2xPYmpPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUQm9vbE9iamVjdHM7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUQm9vbEV2T3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVEJvb2xFdmVudDsgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRCb29sRXZPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUQm9vbEV2ZW50OyAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgc25tcGRfc3RvcmVfY29uZmlnKGxpbmUpOwogICAgICAgICB9CkBAIC0xNDE2LDEwICsxNDIxLDEwIEBACiAgICAgICAgICAgICBzdHJjYXQobGluZSwgIl9tdGVUVGhUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZU93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVE5hbWU7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVPd25lcjsgICAgICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVROYW1lOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoICAgQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKIAogICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX1VOU0lHTkVELCBjcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZW50cnktPm10ZVRUaFN0YXJ0dXAsICAgIE5VTEwgKTsKQEAgLTE0MzIsMjggKzE0MzcsMjggQEAKICAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9JTlRFR0VSLCAgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5tdGVUVGhERmFsbFZhbHVlLCBOVUxMICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoT2JqT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoT2JqZWN0czsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhPYmpPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhPYmplY3RzOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoUmlzZU93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaFJpc2VFdmVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhGYWxsT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoRmFsbEV2ZW50OyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaFJpc2VPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhSaXNlRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoRmFsbE93bmVyOyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaEZhbGxFdmVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCi0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaERSaXNlT3duZXI7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgICAgIHZwICAgPSBlbnRyeS0+bXRlVFRoRFJpc2VFdmVudDsgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICAgICAgdnAgICA9IGVudHJ5LT5tdGVUVGhERmFsbE93bmVyOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgICAgICB2cCAgID0gZW50cnktPm10ZVRUaERGYWxsRXZlbnQ7IHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoRFJpc2VPd25lcjsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICAgICAgY3AgICA9IGVudHJ5LT5tdGVUVGhEUmlzZUV2ZW50OyB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgICAgICBjcCAgID0gZW50cnktPm10ZVRUaERGYWxsT3duZXI7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgICAgIGNwICAgPSBlbnRyeS0+bXRlVFRoREZhbGxFdmVudDsgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCiAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyQ29uZi5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKaW5kZXggNTYwYzNlYS4uYmZiY2ZjYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mLmgKQEAgLTcsOSArNyw5IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJDb25mKHZvaWQpOwotdm9pZCAgICAgICAgICAgIHBhcnNlX210ZU1vbml0b3IoIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLXZvaWQgICAgICAgICAgICBwYXJzZV9kZWZhdWx0X210ZU1vbml0b3JzKCBjb25zdCBjaGFyICosIGNoYXIgKik7Ci12b2lkICAgICAgICAgICAgcGFyc2VfbGlua1VwRG93bl90cmFwcyhjb25zdCBjaGFyICosIGNoYXIgKik7Cit2b2lkICAgICAgICAgICAgcGFyc2VfbXRlTW9uaXRvciggY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwordm9pZCAgICAgICAgICAgIHBhcnNlX2RlZmF1bHRfbXRlTW9uaXRvcnMoIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK3ZvaWQgICAgICAgICAgICBwYXJzZV9saW5rVXBEb3duX3RyYXBzKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKIAogdm9pZCAgICAgICAgICAgIHBhcnNlX210ZVRUYWJsZSggIGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIHZvaWQgICAgICAgICAgICBwYXJzZV9tdGVURFRhYmxlKCBjb25zdCBjaGFyICosIGNoYXIgKik7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCmluZGV4IGUwOTI5ODIuLmMyYzJlOGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCkBAIC03LDExICs3LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX29pZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckRlbHRhVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMSw2ICsyNyw3IEBACiAgICAgc2l6ZV90ICAgICAgbXRlVERlbHRhVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlVERlbHRhVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKyAgICBpbnQgICAgICAgICByYzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyRGVsdGFUYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlckRlbHRhVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURGVsdGFUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVREZWx0YVRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJEZWx0YVRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckRlbHRhVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVERlbHRhVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURGVsdGFUYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKQEAgLTQ3LDcgKzYyLDEwIEBACiAgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9NVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFOwogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgdHJpZ2dlcl90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwotICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCB0cmlnZ2VyX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworICAgIHJjID0gbmV0c25tcF90ZGF0YV9yZWdpc3RlcihyZWcsIHRyaWdnZXJfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOworICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBEZWx0YSBUYWJsZVxuIikpOwogfQogCkBAIC0xMDksNiArMTI3LDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTI0OCw2ICsyNjcsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKaW5kZXggMjUwMjZlZS4uMjJiNjgzZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwpAQCAtNywxMSArNywxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjcsNyBAQAogICAgIHN0YXRpYyBvaWQgbXRlVEV4aXN0VGFibGVfb2lkW10gICA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODgsIDEsIDIsIDQgfTsKICAgICBzaXplX3QgICAgIG10ZVRFeGlzdFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZVRFeGlzdFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgaW50ICAgICAgICByYzsKIAogICAgIC8qCiAgICAgICogRW5zdXJlIHRoZSAoY29tYmluZWQpIHRhYmxlIGNvbnRhaW5lciBpcyBhdmFpbGFibGUuLi4KQEAgLTMwLDExICszNywxOSBAQAogICAgIC8qCiAgICAgICogLi4uIHRoZW4gc2V0IHVwIHRoZSBNSUIgaW50ZXJmYWNlIHRvIHRoZSBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUgc2xpY2UKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZV9oYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURXhpc3RUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRFeGlzdFRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVURXhpc3RUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRFeGlzdFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNDcsNyArNjIsMTEgQEAKICAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVDsKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIHRyaWdnZXJfdGFibGVfZGF0YSBjb250YWluZXIgKi8KLSAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgdHJpZ2dlcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKKyAgICByYyA9IG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCB0cmlnZ2VyX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKworICAgIG5ldHNubXBfaGFuZGxlcl9vd25zX3RhYmxlX2luZm8ocmVnLT5oYW5kbGVyLT5uZXh0KTsKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBFeGlzdCBUYWJsZVxuIikpOwogfQogCkBAIC0xMjMsNiArMTQyLDcgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUtc3VwcG9ydAogICAgICAgICAgKi8KQEAgLTI2NCw2ICsyODQsNyBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmMKaW5kZXggNjIzOTYxMi4uODhjMmY4YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuYwpAQCAtNywxMiArNywyNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlci5oIgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl91aW50KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobXRldHJpZ2dlcl9yZW1vdmVlbnRyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3RydXRodmFsdWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBtdGVUcmlnZ2VyVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yMSw3ICszNiw2IEBACiAgICAgc3RhdGljIG9pZCAgbXRlVHJpZ2dlclRhYmxlX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCAyLCAyIH07CiAgICAgc2l6ZV90ICAgICAgbXRlVHJpZ2dlclRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKG10ZVRyaWdnZXJUYWJsZV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAgICAgLyoKICAgICAgKiBFbnN1cmUgdGhlIChjb21iaW5lZCkgdGFibGUgY29udGFpbmVyIGlzIGF2YWlsYWJsZS4uLgpAQCAtMzEsMTEgKzQ1LDE5IEBACiAgICAgLyoKICAgICAgKiAuLi4gdGhlbiBzZXQgdXAgdGhlIE1JQiBpbnRlcmZhY2UgdG8gdGhlIG10ZVRyaWdnZXJUYWJsZSBzbGljZQogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigibXRlVHJpZ2dlclRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpOworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLApAQCAtNTIsNiArNzQsMTUgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV2ZW50OmluaXQiLCAiVHJpZ2dlciBUYWJsZVxuIikpOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVUcmlnZ2VyVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVUcmlnZ2VyVGFibGUgdGFibGUgKi8KIGludApAQCAtMTUyLDYgKzE4Myw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC00NjMsNyArNDk1LDE0IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKworICAgICAgICAvKiogc2V0IHVwIHRvIHNhdmUgcGVyc2lzdGVudCBzdG9yZSAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKKwogICAgICAgICBicmVhazsKKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGFibGUuaAppbmRleCBlMzgyNjEyLi5jNWMzOTNhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUYWJsZS5oCkBAIC0xMSw2ICsxMSw3IEBACiAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCiAgKi8KIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9tdGVUcmlnZ2VyVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBtdGVUcmlnZ2VyVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYwppbmRleCAxZjY2NDllLi41YWVkMGM4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCkBAIC03LDExICs3LDE4IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9ldmVudC9tdGVUcmlnZ2VyLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjAsNyArMjcsNiBAQAogICAgIHN0YXRpYyBvaWQgbXRlVFRocmVzaFRhYmxlX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDg4LCAxLCAyLCA2IH07CiAgICAgc2l6ZV90ICAgICBtdGVUVGhyZXNoVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgobXRlVFRocmVzaFRhYmxlX29pZCk7CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKICAgICAvKgogICAgICAqIEVuc3VyZSB0aGUgKGNvbWJpbmVkKSB0YWJsZSBjb250YWluZXIgaXMgYXZhaWxhYmxlLi4uCkBAIC0zMCwxMSArMzYsMTkgQEAKICAgICAvKgogICAgICAqIC4uLiB0aGVuIHNldCB1cCB0aGUgTUlCIGludGVyZmFjZSB0byB0aGUgbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIHNsaWNlCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVFRocmVzaFRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlVFRocmVzaFRhYmxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oIm10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUVGhyZXNoVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVUVGhyZXNoVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOwogICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sCkBAIC01MSw2ICs2NSwxNSBAQAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXZlbnQ6aW5pdCIsICJUcmlnZ2VyIFRocmVzaG9sZCBUYWJsZVxuIikpOwogfQogCit2b2lkCitzaHV0ZG93bl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUgdGFibGUgKi8KIGludApAQCAtMTY1LDYgKzE4OCw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFdyaXRlLXN1cHBvcnQKICAgICAgICAgICovCkBAIC0zNTgsNiArMzgyLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKaW5kZXggMjgyY2M2Ny4uODBmNWYyYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaApAQCAtOSw2ICs5LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXJyb3JUYWJsZS5jCmluZGV4IDQxYmJlMjkuLmE3NTllMmQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEVycm9yVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFcnJvclRhYmxlLmMKQEAgLTcsMTEgKzcsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5oIgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cEVycm9yVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisKIC8qIEluaXRpYWxpemVzIHRoZSBleHBFeHByZXNzaW9uRXJyb3JUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfZXhwRXJyb3JUYWJsZSh2b2lkKQpAQCAtNDgsNyArNTEsNyBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgKGNvbW1vbikgZXhwcl90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBleHByX3RhYmxlX2RhdGEsIHRhYmxlX2luZm8pOwotICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gRXJyb3IgVGFibGUgY29udGFpbmVyICgleClcbiIsCisgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBFcnJvciBUYWJsZSBjb250YWluZXIgKCVwKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3RhYmxlX2RhdGEpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbi5jCmluZGV4IDFjMjRiNzguLmM5MjQxNDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb24uYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmMKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJpbml0IGV4cHJlc3Npb24gY29udGFpbmVyXG4iKSk7CiAgICAgaWYgKCFleHByX3RhYmxlX2RhdGEpIHsKICAgICAgICAgIGV4cHJfdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJleHBFeHByZXNzaW9uVGFibGUiLCAwKTsKLSAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgImNyZWF0ZSBleHByZXNzaW9uIGNvbnRhaW5lciAoJXgpXG4iLAorICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiY3JlYXRlIGV4cHJlc3Npb24gY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHByX3RhYmxlX2RhdGEpKTsKICAgICB9CiB9CkBAIC01Nyw3ICs1Nyw3IEBACiAgICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV4cHI6ZHVtcCIsICIoJXMsICVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdy0+aW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93LT5pbmRleGVzLT5uZXh0X3ZhcmlhYmxlLT52YWwuc3RyaW5nKSk7Ci0gICAgICAgIERFQlVHTVNHKCgiZGlzbWFuOmV4cHI6ZHVtcCIsICI6ICV4LCAleFxuIiwgcm93LCBlbnRyeSkpOworICAgICAgICBERUJVR01TRygoImRpc21hbjpleHByOmR1bXAiLCAiOiAlcCwgJXBcbiIsIHJvdywgZW50cnkpKTsKICAgICAgICAgaSsrOwogICAgIH0KICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6ZHVtcCIsICJFeHByZXNzaW9uVGFibGUgJWQgZW50cmllc1xuIiwgaSkpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25Db25mLmMKaW5kZXggNjE3NDRlMS4uODI2ZDY3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBFeHByZXNzaW9uQ29uZi5jCkBAIC00LDEzICs0LDE5IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKwogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBFeHByZXNzaW9uLmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmgiCiAjaW5jbHVkZSAiZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvbkNvbmYuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorCiAvKiBJbml0aWFsaXplcyB0aGUgZXhwRXhwcmVzc2lvbkNvbmYgbW9kdWxlICovCiB2b2lkCiBpbml0X2V4cEV4cHJlc3Npb25Db25mKHZvaWQpCkBAIC0yMjYsNyArMjMyLDcgQEAKIHN0b3JlX2V4cEVUYWJsZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewogICAgIGNoYXIgICAgICAgICAgICAgICAgICBsaW5lW1NOTVBfTUFYQlVGXTsKLSAgICBjaGFyICAgICAgICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIHZvaWQgICAgICAgICAgICAgICAgICp2cDsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAqcm93OwpAQCAtMjU2LDE3ICsyNjIsMTcgQEAKICAgICAgICAgc3RyY2F0KGxpbmUsICJfZXhwRVRhYmxlICIpOwogICAgICAgICBjcHRyID0gbGluZSArIHN0cmxlbihsaW5lKTsKIAotICAgICAgICB2cCAgID0gZW50cnktPmV4cE93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOwotICAgICAgICB2cCAgID0gZW50cnktPmV4cE5hbWU7ICAgICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cE93bmVyOyAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cE5hbWU7ICAgICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+ZXhwRXhwcmVzc2lvbjsgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+ZXhwRXhwcmVzc2lvbjsgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+ZXhwVmFsdWVUeXBlOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwotICAgICAgICB2cCAgID0gZW50cnktPmV4cENvbW1lbnQ7ICAgICAgICB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPmV4cENvbW1lbnQ7ICAgICAgICB0aW50ID0gc3RybGVuKCBjcCApOworICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YSggICBBU05fT0NURVRfU1RSLCBjcHRyLCAmY3AsICAmdGludCApOwogICAgICAgICB0aW50ID0gZW50cnktPmV4cERlbHRhSW50ZXJ2YWw7CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9VTlNJR05FRCwgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cEV4cHJlc3Npb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMKaW5kZXggYzA3ZTVmYy4uNzlhYTcxNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwRXhwcmVzc2lvblRhYmxlLmMKQEAgLTcsMTIgKzcsMjEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAidXRpbGl0aWVzL2lxdWVyeS5oIgogI2luY2x1ZGUgImRpc21hbi9leHByL2V4cEV4cHJlc3Npb24uaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBFeHByZXNzaW9uVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKiBJbml0aWFsaXplcyB0aGUgZXhwRXhwcmVzc2lvblRhYmxlIG1vZHVsZSAqLwogdm9pZAogaW5pdF9leHBFeHByZXNzaW9uVGFibGUodm9pZCkKQEAgLTQ5LDcgKzU4LDcgQEAKIAogICAgIC8qIFJlZ2lzdGVyIHRoaXMgdXNpbmcgdGhlIChjb21tb24pIGV4cHJfdGFibGVfZGF0YSBjb250YWluZXIgKi8KICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgZXhwcl90YWJsZV9kYXRhLCB0YWJsZV9pbmZvKTsKLSAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJFeHByZXNzaW9uIFRhYmxlIGNvbnRhaW5lciAoJXgpXG4iLAorICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgIkV4cHJlc3Npb24gVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwcl90YWJsZV9kYXRhKSk7CiB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdC5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMKaW5kZXggZGZmZTRlNC4uYzI3NDM3YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0LmMKQEAgLTIxLDcgKzIxLDcgQEAKICAgICBERUJVR01TR1RMKCgiZGlzbWFuOmV4cHI6aW5pdCIsICJpbml0IGV4cE9iamVjdCBjb250YWluZXJcbiIpKTsKICAgICBpZiAoIWV4cE9iamVjdF90YWJsZV9kYXRhKSB7CiAgICAgICAgICBleHBPYmplY3RfdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJleHBPYmplY3RUYWJsZSIsIDApOwotICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiY3JlYXRlIGV4cE9iamVjdCBjb250YWluZXIgKCV4KVxuIiwKKyAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46ZXhwcjppbml0IiwgImNyZWF0ZSBleHBPYmplY3QgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHBPYmplY3RfdGFibGVfZGF0YSkpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdENvbmYuYwppbmRleCA2ZTE4YzIyLi42NDA2OWQ5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0Q29uZi5jCkBAIC00LDEyICs0LDE1IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3QuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3RDb25mLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKKwogLyogSW5pdGlhbGl6ZXMgdGhlIGV4cE9iamVjdENvbmYgbW9kdWxlICovCiB2b2lkCiBpbml0X2V4cE9iamVjdENvbmYodm9pZCkKQEAgLTExNSw3ICsxMTgsNyBAQAogc3RvcmVfZXhwT1RhYmxlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCiB7CiAgICAgY2hhciAgICAgICAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICAgICAgICpjcHRyOworICAgIGNoYXIgICAgICAgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgICAgICAgKnZwOwogICAgIHNpemVfdCAgICAgICAgICAgICAgICB0aW50OwogICAgIG5ldHNubXBfdGRhdGFfcm93ICAgICpyb3c7CkBAIC0xNDUsMTAgKzE0OCwxMCBAQAogICAgICAgICBzdHJjYXQobGluZSwgIl9leHBPVGFibGUgIik7CiAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0gICAgICAgIHZwICAgPSBlbnRyeS0+ZXhwT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7Ci0gICAgICAgIHZwICAgPSBlbnRyeS0+ZXhwTmFtZTsgICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIHZwICk7Ci0gICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZ2cCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+ZXhwT3duZXI7ICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CisgICAgICAgIGNwICAgPSBlbnRyeS0+ZXhwTmFtZTsgICAgICAgICAgIHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHRpbnQgPSBlbnRyeS0+ZXhwT2JqZWN0SW5kZXg7CiAgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKCAgIEFTTl9VTlNJR05FRCwgIGNwdHIsICZ0aW50LCBOVUxMICk7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5jCmluZGV4IDZlNjBiODEuLmFkZGE0MzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cE9iamVjdFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwT2JqZWN0VGFibGUuYwpAQCAtNywxMSArNywxOCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3QuaCIKICNpbmNsdWRlICJkaXNtYW4vZXhwci9leHBPYmplY3RUYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyogSW5pdGlhbGl6ZXMgdGhlIGV4cE9iamVjdFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtNTEsNyArNTgsNyBAQAogCiAgICAgLyogUmVnaXN0ZXIgdGhpcyB1c2luZyB0aGUgY29tbW9uIGV4cE9iamVjdF90YWJsZV9kYXRhIGNvbnRhaW5lciAqLwogICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBleHBPYmplY3RfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7Ci0gICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBPYmplY3QgVGFibGUgY29udGFpbmVyICgleClcbiIsCisgICAgREVCVUdNU0dUTCgoImRpc21hbjpleHByOmluaXQiLCAiRXhwcmVzc2lvbiBPYmplY3QgVGFibGUgY29udGFpbmVyICglcClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhwT2JqZWN0X3RhYmxlX2RhdGEpKTsKIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHIvZXhwVmFsdWVUYWJsZS5jCmluZGV4IDk3YmNiYWIuLmQ3NGRiZDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByL2V4cFZhbHVlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwci9leHBWYWx1ZVRhYmxlLmMKQEAgLTU5LDcgKzU5LDcgQEAKICAgICBpZiAoIWluZGV4ZXMgfHwgIWluZGV4ZXMtPm5leHRfdmFyaWFibGUgfHwKICAgICAgICAgIWluZGV4ZXMtPm5leHRfdmFyaWFibGUtPm5leHRfdmFyaWFibGUgKSB7CiAgICAgICAgIC8qIFhYWCAtIFNob3VsZG4ndCBoYXBwZW4hICovCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJnZXQgKCVkKSBlbnRyeSAoJXMsICVzLCAiLCBtb2RlLApAQCAtNzgsNyArNzgsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKG1vZGUgPT0gTU9ERV9HRVRORVhUIHx8IG1vZGUgPT0gTU9ERV9HRVRCVUxLKSB7CiAgICAgICAgICAgICBleHAgPSBleHBFeHByZXNzaW9uX2dldEZpcnN0RW50cnkoKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgImZpcnN0IGVudHJ5ICgleClcbiIsIGV4cCApKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgImZpcnN0IGVudHJ5ICglcClcbiIsIGV4cCApKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgImluY29tcGxldGUgcmVxdWVzdFxuIiApKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgLyogTm8gbWF0Y2ggKi8KQEAgLTg2LDcgKzg2LDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBleHAgPSBleHBFeHByZXNzaW9uX2dldEVudHJ5KCAoY2hhciopaW5kZXhlcy0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIqKWluZGV4ZXMtPm5leHRfdmFyaWFibGUtPnZhbC5zdHJpbmcpOwotICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ1c2luZyBlbnRyeSAoJXgpXG4iLCBleHAgKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInVzaW5nIGVudHJ5ICglcClcbiIsIGV4cCApKTsKICAgICB9CiAKICAgICAvKgpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgIH0KIE5FWFRfRVhQOgogICAgICAgICBleHAgPSBleHBFeHByZXNzaW9uX2dldE5leHRFbnRyeSggZXhwLT5leHBPd25lciwgZXhwLT5leHBOYW1lICk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInVzaW5nIG5leHQgZW50cnkgKCV4KVxuIiwgZXhwICkpOworICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ1c2luZyBuZXh0IGVudHJ5ICglcClcbiIsIGV4cCApKTsKICAgICB9CiAgICAgaWYgKCFleHApIHsKICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAibm8gbW9yZSBlbnRyaWVzXG4iKSk7CkBAIC0xMjQsNyArMTI0LDcgQEAKICAgICAgICAgfQogICAgICAgICBpZiAoIHZwLT52YWwub2JqaWRbMF0gIT0gMCApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gaW5zdGFuY2UgKCVkKVxuIiwgdnAtPnZhbC5vYmppZFswXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICJub24temVybyBpbnN0YW5jZSAoJSIgTkVUU05NUF9QUklvICJkKVxuIiwgdnAtPnZhbC5vYmppZFswXSkpOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAvKiBJbnZhbGlkIGluc3RhbmNlICovCiAgICAgICAgIH0KIApAQCAtMTQwLDcgKzE0MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXMgPSBleHBWYWx1ZV9ldmFsdWF0ZUV4cHJlc3Npb24oIGV4cCwgTlVMTCwgMCApOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAic2NhbGFyIGdldCByZXR1cm5lZCAoJXgpXG4iLCByZXMpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgInNjYWxhciBnZXQgcmV0dXJuZWQgKCVwKVxuIiwgcmVzKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogT3RoZXJ3aXNlLCBza2lwIHRoZSBsZWFkaW5nICcuMCcgYW5kIHVzZQpAQCAtMTQ4LDcgKzE0OCw3IEBACiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJlcyA9IGV4cFZhbHVlX2V2YWx1YXRlRXhwcmVzc2lvbiggZXhwLCB2cC0+dmFsLm9iamlkKzEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnAtPnZhbF9sZW4vc2l6ZW9mKG9pZCktMSk7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJ3L2NhcmQgZ2V0IHJldHVybmVkICgleClcbiIsIHJlcykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidy9jYXJkIGdldCByZXR1cm5lZCAoJXApXG4iLCByZXMpKTsKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCkBAIC0xNTgsNyArMTU4LDcgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmICggdnAtPnZhbF9sZW4gPiAwICYmIHZwLT52YWwub2JqaWRbMF0gIT0gMCApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAibm9uLXplcm8gbmV4dCBpbnN0YW5jZSAoJWQpXG4iLCB2cC0+dmFsLm9iamlkWzBdKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbi16ZXJvIG5leHQgaW5zdGFuY2UgKCUiIE5FVFNOTVBfUFJJbyAiZClcbiIsIHZwLT52YWwub2JqaWRbMF0pKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgLyogQWxsIHZhbGlkIGluc3RhbmNlcyBzdGFydCB3aXRoIC4wICovCiAgICAgICAgIH0KICAgICAgICAgcGxlbiA9IGV4cC0+ZXhwUHJlZml4X2xlbjsKQEAgLTE4Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCB2cCwgQVNOX1BSSVZfSU1QTElFRF9PQkpFQ1RfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKW51bGxJbnN0YW5jZSwgMypzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICByZXMgPSBleHBWYWx1ZV9ldmFsdWF0ZUV4cHJlc3Npb24oIGV4cCwgTlVMTCwgMCApOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAic2NhbGFyIG5leHQgcmV0dXJuZWQgKCV4KVxuIiwgcmVzKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCggImRpc21hbjpleHByOnZhbCIsICJzY2FsYXIgbmV4dCByZXR1cm5lZCAoJXApXG4iLCByZXMpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBOb3cgY29tZXMgdGhlIGludGVyZXN0aW5nIGNhc2UgLSBmaW5kaW5nIHRoZQpAQCAtMjM1LDcgKzIzNSw3IEBACiAgICAgICAgICAgICAgICAgbGVuID0gMTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJlcyA9IGV4cFZhbHVlX2V2YWx1YXRlRXhwcmVzc2lvbiggZXhwLCB2cC0+dmFsLm9iamlkKzEsIGxlbi0xKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOmV4cHI6dmFsIiwgIncvY2FyZCBuZXh0IHJldHVybmVkICgleClcbiIsIHJlcykpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoICJkaXNtYW46ZXhwcjp2YWwiLCAidy9jYXJkIG5leHQgcmV0dXJuZWQgKCVwKVxuIiwgcmVzKSk7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIHJlczsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cEVycm9yVGFibGUuYwppbmRleCBiN2IyNTdlLi4xZmViM2VlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFcnJvclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXJyb3JUYWJsZS5jCkBAIC02NiwxMyArNjYsMTcgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZQlFWFBFUlJPUlRJTUUgIDEKLSAgICB7RVhQRVJST1JUSU1FLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0VYUEVSUk9SVElNRSwgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZQlFWFBFUlJPUklOREVYIDIKLSAgICB7RVhQRVJST1JJTkRFWCwgQVNOX0lOVEVHRVIsICBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0VYUEVSUk9SSU5ERVgsIEFTTl9JTlRFR0VSLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZQlFWFBFUlJPUkNPREUgMwotICAgIHtFWFBFUlJPUkNPREUsICBBU05fSU5URUdFUiwgIFJPTkxZLCB2YXJfZXhwRXJyb3JUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVhQRVJST1JDT0RFLCAgQVNOX0lOVEVHRVIsICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lCUVYUEVSUk9SSU5TVEFOQ0UgNAotICAgIHtFWFBFUlJPUklOU1RBTkNFLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2V4cEVycm9yVGFibGUsIDIsIHsxLCA0fX0KKyAgICB7RVhQRVJST1JJTlNUQU5DRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFcnJvclRhYmxlLCAyLCB7MSwgNH19CiB9OwogCiBleHRlcm4gc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpleHBFeHByZXNzaW9uVGFibGVTdG9yYWdlOwpAQCAtMTM1LDQgKzEzOSw2IEBACiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+ZXhwRXJyb3JJbnN0YW5jZUxlbiAqIHNpemVvZihvaWQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5leHBFcnJvckluc3RhbmNlOwogICAgIH0KKworICAgIHJldHVybiBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwRXhwcmVzc2lvblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYwppbmRleCBkYTBlMTlhLi4yMTI5NTJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBFeHByZXNzaW9uVGFibGUuYwpAQCAtMjEsNiArMjEsNyBAQAogICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGluY2x1ZGVkIGZpcnN0IGJlZm9yZSBhbnl0aGluZyBlbHNlIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTQ1LDYgKzQ2LDEwIEBACiAjaW5jbHVkZSAiZXhwT2JqZWN0VGFibGUuaCIKICNpbmNsdWRlICJleHBWYWx1ZVRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRkb21haW5fc3VwcG9ydCkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKgogICogZXhwRXhwcmVzc2lvblRhYmxlX3ZhcmlhYmxlc19vaWQ6CkBAIC02NSwxOSArNzAsMjYgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZQlFWFBFWFBSRVNTSU9OICAzCi0gICAge0VYUEVYUFJFU1NJT04sICAgICAgICAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7RVhQRVhQUkVTU0lPTiwgICAgICAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZQlFWFBFWFBSRVNTSU9OVkFMVUVUWVBFIDQKLSAgICB7RVhQRVhQUkVTU0lPTlZBTFVFVFlQRSwgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtFWFBFWFBSRVNTSU9OVkFMVUVUWVBFLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05DT01NRU5UIDUKLSAgICB7RVhQRVhQUkVTU0lPTkNPTU1FTlQsICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtFWFBFWFBSRVNTSU9OQ09NTUVOVCwgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05ERUxUQUxOVEVSVkFMIDYKLSAgICB7RVhQRVhQUkVTU0lPTkRFTFRBTE5URVJWQUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0VYUEVYUFJFU1NJT05ERUxUQUxOVEVSVkFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZQlFWFBFWFBSRVNTSU9OUFJFRklYIDcKLSAgICB7RVhQRVhQUkVTU0lPTlBSRUZJWCwgICAgQVNOX09CSkVDVF9JRCwgUk9OTFksICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgN319LAorICAgIHtFWFBFWFBSRVNTSU9OUFJFRklYLCAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDd9fSwKICNkZWZpbmUJRVhQRVhQUkVTU0lPTkVSUk9SUyA4Ci0gICAge0VYUEVYUFJFU1NJT05FUlJPUlMsICAgIEFTTl9VTlNJR05FRCwgIFJPTkxZLCAgdmFyX2V4cEV4cHJlc3Npb25UYWJsZSwgMiwgezEsIDh9fSwKKyAgICB7RVhQRVhQUkVTU0lPTkVSUk9SUywgICAgQVNOX1VOU0lHTkVELCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lCUVYUEVYUFJFU1NJT05FTlRSWVNUQVRVUyAgOQotICAgIHtFWFBFWFBSRVNTSU9ORU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBFeHByZXNzaW9uVGFibGUsIDIsIHsxLCA5fX0KKyAgICB7RVhQRVhQUkVTU0lPTkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwRXhwcmVzc2lvblRhYmxlLCAyLCB7MSwgOX19CiB9OwogCiAvKgpAQCAtMzExLDkgKzMyMyw3IEBACiAgICAgY2hhciAgICAgICAgICAgKmNwdHI7CiAgICAgc2l6ZV90ICAgICAgICAgIHRtcGludDsKICAgICBzdHJ1Y3QgZXhwRXhwcmVzc2lvblRhYmxlX2RhdGEgKlN0b3JhZ2VUbXA7Ci0gICAgc3RydWN0IGV4cE9iamVjdFRhYmxlX2RhdGEgKk9iamVjdFN0b3JhZ2VUbXA7Ci0gICAgc3RydWN0IGV4cFZhbHVlVGFibGVfZGF0YSAqVmFsdWVTdG9yYWdlVG1wOwotICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleCwgKmhjX29iamVjdCwgKmhjX3ZhbHVlOworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleDsKIAogICAgIERFQlVHTVNHVEwoKCJleHBFeHByZXNzaW9uVGFibGUiLCAic3RvcmluZyBkYXRhLi4uICAiKSk7CiAKQEAgLTU3NCw2ICs1ODQsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNjU4LDYgKzY2OSw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC03NDYsNiArNzU4LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTgzMCw2ICs4NDMsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTE1NCw2ICsxMTY4LDcgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5oYXZlX2NvcGllZF9hdXRoX2luZm8gPSAxOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwT2JqZWN0VGFibGUuYwppbmRleCA4ZDE4NTVkLi5lMDU3ZjU2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBPYmplY3RUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cE9iamVjdFRhYmxlLmMKQEAgLTIyLDYgKzIyLDcgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0zNCw2ICszNSw5IEBACiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKQEAgLTY2LDIzICs3MCwzMiBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lCUVYUE9CSkVDVElEICAyCi0gICAge0VYUE9CSkVDVElELCAgICAgICAgIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFWFBPQkpFQ1RJRCwgICAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUJRVhQT0JKRUNUSURXSUxEQ0FSRCAzCi0gICAge0VYUE9CSkVDVElEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtFWFBPQkpFQ1RJRFdJTERDQVJELCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDN9fSwKICNkZWZpbmUJRVhQT0JKRUNUU0FNUExFVFlQRSA0Ci0gICAge0VYUE9CSkVDVFNBTVBMRVRZUEUsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtFWFBPQkpFQ1RTQU1QTEVUWVBFLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUJRVhQT0JKRUNUREVMVEFESVNDT05USU5VSVRZSUQgNQotICAgIHtFWFBPQkpFQ1RERUxUQURJU0NPTlRJTlVJVFlJRCwgIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNX19LAorICAgIHtFWFBPQkpFQ1RERUxUQURJU0NPTlRJTlVJVFlJRCwgIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgNX19LAogI2RlZmluZQlFWFBPQkpFQ1RESVNDT05USU5VSVRZSURXSUxEQ0FSRCA2Ci0gICAge0VYUE9CSkVDVERJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA2fX0sCisgICAge0VYUE9CSkVDVERJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA2fX0sCiAjZGVmaW5lCUVYUE9CSkVDVERJU0NPTlRJTlVJVFlJRFRZUEUgNwotICAgIHtFWFBPQkpFQ1RESVNDT05USU5VSVRZSURUWVBFLCAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtFWFBPQkpFQ1RESVNDT05USU5VSVRZSURUWVBFLCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgN319LAogI2RlZmluZQlFWFBPQkpFQ1RDT05ESVRJT05BTCAgOAotICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTCwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfZXhwT2JqZWN0VGFibGUsIDIsIHsxLCA4fX0sCisgICAge0VYUE9CSkVDVENPTkRJVElPTkFMLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDh9fSwKICNkZWZpbmUJRVhQT0JKRUNUQ09ORElUSU9OQUxXSUxEQ0FSRCAgOQotICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTFdJTERDQVJELCAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgOX19LAorICAgIHtFWFBPQkpFQ1RDT05ESVRJT05BTFdJTERDQVJELCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4cE9iamVjdFRhYmxlLCAyLCB7MSwgOX19LAogI2RlZmluZQlFWFBPQkpFQ1RFTlRSWVNUQVRVUyAgMTAKLSAgICB7RVhQT0JKRUNURU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDEwfX0KKyAgICB7RVhQT0JKRUNURU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leHBPYmplY3RUYWJsZSwgMiwgezEsIDEwfX0KIH07CiAKIApAQCAtMjA3LDcgKzIyMCw2IEBACiBwYXJzZV9leHBPYmplY3RUYWJsZShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKICAgICBzaXplX3QgICAgICAgICAgdG1waW50OwotICAgIG9pZCAgICAgICAgICAgICp0bXBvaWQgPSBOVUxMOwogICAgIHN0cnVjdCBleHBPYmplY3RUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0KICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGV4cE9iamVjdFRhYmxlX2RhdGEpOwogCkBAIC0zOTQsNiArNDA2LDcgQEAKICAgICAgICAgfQogICAgIH0KICAgICBERUJVR01TR1RMKCgiZXhwT2JqZWN0VGFibGUiLCAic3RvcmFnZSBkb25lXG4iKSk7CisgICAgcmV0dXJuIDA7CiB9CiAKIApAQCAtNTY0LDYgKzU3Nyw3IEBACiAgICAgICAgICAqIHByZXZpb3VzIHZhbHVlcywgYXMgdGhlc2UgYXJlIGZyb20gYSBkaWZmZXJlbnQgb2JqZWN0PyAgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTY0NCw2ICs2NTgsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNzI1LDcgKzc0MCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTgyMiw2ICs4MzcsNyBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC05MDUsNyArOTIxLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtOTg5LDcgKzEwMDUsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xMDgzLDYgKzEwOTksNyBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xMTY3LDcgKzExODQsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNDM4LDYgKzE0NTUsNyBAQAogICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPmV4cE9iamVjdEVudHJ5U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vZXhwcmVzc2lvbi9leHBWYWx1ZVRhYmxlLmMKaW5kZXggMGY1ZTBiNi4uNmIzMTVjNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL2V4cHJlc3Npb24vZXhwVmFsdWVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9leHByZXNzaW9uL2V4cFZhbHVlVGFibGUuYwpAQCAtNzYsMjEgKzc2LDI5IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUJRVhQVkFMVUVDT1VOVEVSMzJWQUwgMgotICAgIHtFWFBWQUxVRUNPVU5URVIzMlZBTCwgIEFTTl9DT1VOVEVSLCAgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtFWFBWQUxVRUNPVU5URVIzMlZBTCwgIEFTTl9DT1VOVEVSLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZQlFWFBWQUxVRVVOU0lHTkVEMzJWQUwgMwotICAgIHtFWFBWQUxVRVVOU0lHTkVEMzJWQUwsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgM319LAorICAgIHtFWFBWQUxVRVVOU0lHTkVEMzJWQUwsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZQlFWFBWQUxVRVRJTUVUSUNLU1ZBTCA0Ci0gICAge0VYUFZBTFVFVElNRVRJQ0tTVkFMLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0VYUFZBTFVFVElNRVRJQ0tTVkFMLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lCUVYUFZBTFVFSU5URUdFUjMyVkFMIDUKLSAgICB7RVhQVkFMVUVJTlRFR0VSMzJWQUwsICBBU05fSU5URUdFUiwgIFJPTkxZLCB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7RVhQVkFMVUVJTlRFR0VSMzJWQUwsICBBU05fSU5URUdFUiwgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUJRVhQVkFMVUVJUEFERFJFU1NWQUwgNgotICAgIHtFWFBWQUxVRUlQQUREUkVTU1ZBTCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtFWFBWQUxVRUlQQUREUkVTU1ZBTCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZQlFWFBWQUxVRU9DVEVUU1RSSU5HVkFMIDcKLSAgICB7RVhQVkFMVUVPQ1RFVFNUUklOR1ZBTCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHBWYWx1ZVRhYmxlLCAyLCB7MSwgN319LAorICAgIHtFWFBWQUxVRU9DVEVUU1RSSU5HVkFMLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lCUVYUFZBTFVFT0lEVkFMICA4Ci0gICAge0VYUFZBTFVFT0lEVkFMLCAgICAgICBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0VYUFZBTFVFT0lEVkFMLCAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lCUVYUFZBTFVFQ09VTlRFUjY0VkFMICA5Ci0gICAge0VYUFZBTFVFQ09VTlRFUjY0VkFMLCBBU05fSU5URUdFUiwgICBST05MWSwgdmFyX2V4cFZhbHVlVGFibGUsIDIsIHsxLCA5fX0KKyAgICB7RVhQVkFMVUVDT1VOVEVSNjRWQUwsIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhwVmFsdWVUYWJsZSwgMiwgezEsIDl9fQogfTsKIAogCkBAIC0yMzcsNyArMjQ1LDYgQEAKICAgICBjaGFyICAgICAgICAgICAqcmVzdWx0LCAqcmVzdWx0YmFrOwogICAgIGNoYXIgICAgICAgICAgICp0ZW1wLCAqdGVtcGJhazsKICAgICBjaGFyICAgICAgICAgICAgaW50Y2hhclsxMF07Ci0gICAgaW50ICAgICAgICAgICAgIGRvbGxhcjEsIGRvbGxhcjI7CiAgICAgaW50ICAgICAgICAgICAgIGkgPSAwLCBqLCBrLCBsOwogICAgIGxvbmcgICAgICAgICAgICB2YWx1ZTsKICAgICB1bnNpZ25lZCBsb25nICAgcmVzdWx0X3VfbG9uZzsKQEAgLTMxNCw3ICszMjEsNiBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RydWN0IHZhcmlhYmxlX2xpc3QgKnZhcnM7CiAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwotICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMTsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEluaXRpYWxpemUgdGhlIFNOTVAgbGlicmFyeQpAQCAtMzYxLDcgKzM2Nyw3IEBACiAKICAgICAgICAgICAgICAgICB2YXJzID0gcmVzcG9uc2UtPnZhcmlhYmxlczsKICAgICAgICAgICAgICAgICB2YWx1ZSA9ICoodmFycy0+dmFsLmludGVnZXIpOwotICAgICAgICAgICAgICAgIHNwcmludGYoaW50Y2hhciwgIiV1IiwgdmFsdWUpOworICAgICAgICAgICAgICAgIHNwcmludGYoaW50Y2hhciwgIiVsdSIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICBmb3IgKGsgPSAxOyBrIDw9IHN0cmxlbihpbnRjaGFyKTsgaysrKSB7CiAgICAgICAgICAgICAgICAgICAgICpyZXN1bHQgPSBpbnRjaGFyW2sgLSAxXTsKICAgICAgICAgICAgICAgICAgICAgcmVzdWx0Kys7CkBAIC00MjUsMTUgKzQzMSwxMSBAQAogCiAKIHZvaWQKLWJ1aWxkX3ZhbHVldGFibGUoKQorYnVpbGRfdmFsdWV0YWJsZSh2b2lkKQogewogICAgIHN0cnVjdCBleHBFeHByZXNzaW9uVGFibGVfZGF0YSAqZXhwc3RvcmFnZTsKICAgICBzdHJ1Y3QgZXhwT2JqZWN0VGFibGVfZGF0YSAqb2Jqc3RvcmFnZSwgKm9iamZvdW5kID0gTlVMTDsKICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaW5kZXgsICpvYmplY3RfaGNpbmRleDsKLSAgICBjaGFyICAgICAgICAgICAqb3duZXI7Ci0gICAgc2l6ZV90ICAgICAgICAgIG93bmVyX2xlbjsKLSAgICBjaGFyICAgICAgICAgICAqbmFtZTsKLSAgICBzaXplX3QgICAgICAgICAgbmFtZV9sZW47CiAgICAgY2hhciAgICAgICAgICAgKmV4cHJlc3Npb247CiAgICAgb2lkICAgICAgICAgICAgKmluZGV4OwogICAgIGludCAgICAgICAgICAgICBpID0gMCwgaiwgbDsKQEAgLTUxNyw5ICs1MTksNyBAQAogICAgICAgICAgICAgb2lkICAgICAgICAgICAgKm5leHRfT0lEOwogICAgICAgICAgICAgc2l6ZV90ICAgICAgICAgIG5leHRfT0lEX2xlbjsKICAgICAgICAgICAgIHRhZ2dldE9JRF9sZW4gPSBvYmpmb3VuZC0+ZXhwT2JqZWN0SURMZW47Ci0gICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqdmFyczsKICAgICAgICAgICAgIGludCAgICAgICAgICAgICBzdGF0dXM7Ci0gICAgICAgICAgICBpbnQgICAgICAgICAgICAgY291bnQgPSAxOwogICAgICAgICAgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc3M7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogSW5pdGlhbGl6ZSB0aGUgU05NUCBsaWJyYXJ5CkBAIC02MzEsMTIgKzYzMSw3IEBACiAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQogewogCi0gICAgc3RhdGljIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyczsKLSAgICBzaXplX3QgICAgICAgICAgbmV3bGVuID0KLSAgICAgICAgKmxlbmd0aCAtIChzaXplb2YoZXhwVmFsdWVUYWJsZV92YXJpYWJsZXNfb2lkKSAvIHNpemVvZihvaWQpICsKLSAgICAgICAgICAgICAgICAgICAzIC0gMSk7CiAgICAgc3RydWN0IGV4cFZhbHVlVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7Ci0gICAgdW5zaWduZWQgaW50ICAgIGNvdW50ZXIzMjsKIAogCiAKQEAgLTcxMSw2ICs3MDYsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICBkZWZhdWx0OgogICAgICAgICBFUlJPUl9NU0coIiIpOworCXJldHVybiBOVUxMOwogICAgIH0KIH0KIApAQCAtNzgwLDYgKzc3Niw3IEBACiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmV0dXJuIChhIC8gYik7CiAgICAgfQorICAgIHJldHVybiAwOwogfQogCiB1bnNpZ25lZCBsb25nCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYwppbmRleCAzZTA3ODZmLi40OGFkZDY4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKQEAgLTQsMTAgKzQsMTQgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAibXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdykKKwogbmV0c25tcF90YWJsZV9kYXRhX3NldCAqbXRlRXZlbnROb3RpZl90YWJsZV9zZXQ7CiAKIApAQCAtNjEsMTIgKzY1LDIxIEBACiAgICAgICogbm90ZTogaWYgeW91IGRvbid0IG5lZWQgYSBzdWJoYW5kbGVyIHRvIGRlYWwgd2l0aCBhbnkgYXNwZWN0cwogICAgICAqIG9mIHRoZSByZXF1ZXN0LCBjaGFuZ2UgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9oYW5kbGVyIHRvICJOVUxMIiAKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldChuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZV9vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSksIG10ZUV2ZW50Tm90aWZfdGFibGVfc2V0LCBOVUxMKTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFfc2V0KG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLCBtdGVFdmVudE5vdGlmX3RhYmxlX3NldCwgTlVMTCk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogfQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgbW9kdWxlICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50VGFibGUuYwppbmRleCBiNGJkN2ExLi4yMmJhZDczIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlRXZlbnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm10ZVRyaWdnZXJUYWJsZS5oIgpAQCAtMTEsNiArMTIsOSBAQAogI2luY2x1ZGUgIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCIKICNpbmNsdWRlICJtdGVPYmplY3RzVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YXNldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cpCisKIHN0YXRpYyBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQgPSBOVUxMOwogCiAvKiogSW5pdGlhbGl6ZSB0aGUgbXRlRXZlbnRUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuYwppbmRleCA0ZjdlOTVmLi4wOWNlYjJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5jCkBAIC04LDYgKzgsNyBAQAogICogVGhpcyBzaG91bGQgYWx3YXlzIGJlIGluY2x1ZGVkIGZpcnN0IGJlZm9yZSBhbnl0aGluZyBlbHNlIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTE3LDYgKzE4LDkgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBtaW5pbWFsIGluY2x1ZGUgZGlyZWN0aXZlcyAKQEAgLTQ4LDIwICs1Miw0MCBAQAogICovCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbXRlT2JqZWN0c1RhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBNVEVPQkpFQ1RTSUQgICAgICAgICAgNQotICAgIHtNVEVPQkpFQ1RTSUQsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7TVRFT0JKRUNUU0lELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFT0JKRUNUU0lEV0lMRENBUkQgIDYKLSAgICB7TVRFT0JKRUNUU0lEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsCi0gICAgIHsxLCA0fX0sCisgICAge01URU9CSkVDVFNJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIE1URU9CSkVDVFNFTlRSWVNUQVRVUyAgNwotICAgIHtNVEVPQkpFQ1RTRU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsCi0gICAgIHsxLCA1fX0sCisgICAge01URU9CSkVDVFNFTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZU9iamVjdHNUYWJsZSwgMiwgezEsIDV9fSwKIAogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgbXRlT2JqZWN0c1RhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVPQkpFQ1RTSUQgICAgICAgICAgNQorICAgIHtNVEVPQkpFQ1RTSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URU9CSkVDVFNJRFdJTERDQVJEICA2CisgICAge01URU9CSkVDVFNJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVPYmplY3RzVGFibGUsIDIsIHsxLCA0fX0sCisjZGVmaW5lICAgTVRFT0JKRUNUU0VOVFJZU1RBVFVTICA3CisgICAge01URU9CSkVDVFNFTlRSWVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlT2JqZWN0c1RhYmxlLCAyLCB7MSwgNX19LAorCit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoKICAqIChMID0gbGVuZ3RoIG9mIHRoZSBvaWRzdWZmaXgpIAogICovCkBAIC0zMDEsNiArMzI1LDEwIEBACiAKICAgICBERUJVR01TR1RMKCgibXRlT2JqZWN0c1RhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZU9iamVjdHNUYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisJLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMzE5LDE3ICszNDcsMjMgQEAKIAogCiAgICAgY2FzZSBNVEVPQkpFQ1RTSUQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlT2JqZWN0c0lEOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSAoU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0lETGVuKSAqIHNpemVvZihvaWQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVPYmplY3RzSUQ7CiAKICAgICBjYXNlIE1URU9CSkVDVFNJRFdJTERDQVJEOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZU9iamVjdHNJRFdpbGRjYXJkOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0lEV2lsZGNhcmQpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZU9iamVjdHNJRFdpbGRjYXJkOwogCiAgICAgY2FzZSBNVEVPQkpFQ1RTRU5UUllTVEFUVVM6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlT2JqZWN0c0VudHJ5U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlT2JqZWN0c0VudHJ5U3RhdHVzKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVPYmplY3RzRW50cnlTdGF0dXM7CiAKQEAgLTM0Miw2ICszNzYsNyBAQAogCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIAogaW50CiB3cml0ZV9tdGVPYmplY3RzSUQoaW50IGFjdGlvbiwKQEAgLTQyMyw2ICs0NTgsOSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTUwNyw2ICs1NDUsOCBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNjQxLDYgKzY4MSw4IEBACiAKIAogICAgICAgICAgICAgU3RvcmFnZU5ldyA9IFNOTVBfTUFMTE9DX1NUUlVDVChtdGVPYmplY3RzVGFibGVfZGF0YSk7CisgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldyA9PSBOVUxMKQorICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVPd25lciA9IG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKHZwLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+dmFsX2xlbik7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVPd25lckxlbiA9IHZwLT52YWxfbGVuOwpAQCAtNzczLDExICs4MTUsMTYgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVPYmplY3RzRW50cnlTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIHZvaWQKIG10ZV9hZGRfb2JqZWN0cyhuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzLAogICAgICAgICAgICAgICAgIHN0cnVjdCBtdGVUcmlnZ2VyVGFibGVfZGF0YSAqaXRlbSwgY29uc3QgY2hhciAqb3duZXIsCkBAIC04ODgsNiArOTM1LDggQEAKICAgICAgKiBtYWxsb2MgaW5pdGlhbCBzdHJ1Y3QgCiAgICAgICovCiAgICAgU3RvcmFnZU5ldyA9IFNOTVBfTUFMTE9DX1NUUlVDVChtdGVPYmplY3RzVGFibGVfZGF0YSk7CisgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICBTdG9yYWdlTmV3LT5tdGVPd25lciA9IG5ldHNubXBfc3RyZHVwX2FuZF9udWxsKG93bmVyLCBzdHJsZW4ob3duZXIpKTsKICAgICBTdG9yYWdlTmV3LT5tdGVPd25lckxlbiA9IHN0cmxlbihvd25lcik7CiAgICAgU3RvcmFnZU5ldy0+bXRlT2JqZWN0c05hbWUgPSBuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbChvYmpuYW1lLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oCmluZGV4IGQzYzNjNTAuLjRkNDRjODcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVPYmplY3RzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlT2JqZWN0c1RhYmxlLmgKQEAgLTU5LDExICs1OSwxMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogb2lkbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvaWRuYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc3dpbGQpOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlT2JqZWN0c0lEOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlT2JqZWN0c0lEV2lsZGNhcmQ7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVPYmplY3RzRW50cnlTdGF0dXM7Ci0KLSAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZU9iamVjdHNFbnRyeVN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuYwppbmRleCA0OWNlYjVmLi41YjE3OTI3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKQEAgLTQ4LDMzICs0OCw2MiBAQAogICovCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbXRlVHJpZ2dlckJvb2xlYW5UYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5DT01QQVJJU09OICAzCi0gICAge01URVRSSUdHRVJCT09MRUFOQ09NUEFSSVNPTiwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5DT01QQVJJU09OLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTlZBTFVFICA0Ci0gICAge01URVRSSUdHRVJCT09MRUFOVkFMVUUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFOVkFMVUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgMn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOU1RBUlRVUCAgNQotICAgIHtNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFOU1RBUlRVUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIgIDYKLSAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTICA3Ci0gICAge01URVRSSUdHRVJCT09MRUFOT0JKRUNUUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTk9CSkVDVFMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVE9XTkVSICA4Ci0gICAge01URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA2fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVCAgOQotICAgIHtNVEVUUklHR0VSQk9PTEVBTkVWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJCT09MRUFORVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA3fX0sCi0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJCb29sZWFuVGFibGVfdmFyaWFibGVzW10gPSB7CisgICAgLyoKKyAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqLworI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOQ09NUEFSSVNPTiAgMworICAgIHtNVEVUUklHR0VSQk9PTEVBTkNPTVBBUklTT04sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAxfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5WQUxVRSAgNAorICAgIHtNVEVUUklHR0VSQk9PTEVBTlZBTFVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgMn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFOU1RBUlRVUCAgNQorICAgIHtNVEVUUklHR0VSQk9PTEVBTlNUQVJUVVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCAzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIgIDYKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSQk9PTEVBTk9CSkVDVFMgIDcKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkJPT0xFQU5FVkVOVE9XTkVSICA4CisgICAge01URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgNn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJCT09MRUFORVZFTlQgIDkKKyAgICB7TVRFVFJJR0dFUkJPT0xFQU5FVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLCAyLCB7MSwgN319LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMTI2LDYgKzE1NSwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJCb29sZWFuVGFibGUiLAogICAgICAgICAgICAgICAgICJ2YXJfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisJLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMTQ0LDM3ICsxNzcsNTEgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTkNPTVBBUklTT046CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb247CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFOVkFMVUU6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5WYWx1ZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuVmFsdWUpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuVmFsdWU7CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFOU1RBUlRVUDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXA7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhblN0YXJ0dXApOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuU3RhcnR1cDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzT3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuT2JqZWN0c093bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHNPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkJPT0xFQU5PQkpFQ1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuT2JqZWN0czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHM7CiAKICAgICBjYXNlIE1URVRSSUdHRVJCT09MRUFORVZFTlRPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkV2ZW50T3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckJvb2xlYW5FdmVudE93bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQk9PTEVBTkVWRU5UOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJCb29sZWFuRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJCb29sZWFuRXZlbnQ7CiAKQEAgLTE4Nyw2ICsyMzQsNyBAQAogCiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIAogaW50CiB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb24oaW50IGFjdGlvbiwKQEAgLTgwMCwzICs4NDgsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5oCmluZGV4IGY2ODU1ODYuLjY0MTNkYTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaApAQCAtMzEsNiArMzEsNyBAQAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyQm9vbGVhblRhYmxlKHZvaWQpOwogICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX210ZVRyaWdnZXJCb29sZWFuVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhbkNvbXBhcmlzb247CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyQm9vbGVhblZhbHVlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5TdGFydHVwOwpAQCAtMzgsNiArMzksNyBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5PYmplY3RzOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5FdmVudE93bmVyOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckJvb2xlYW5FdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCmluZGV4IDNlZGI5MzUuLmM4MjllNmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5jCkBAIC00OCwyMSArNDgsMzggQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJEZWx0YVRhYmxlX3ZhcmlhYmxlc1tdID0gewogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSUQgIDMKLSAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlELCBBU05fT0JKRUNUX0lELCBSV1JJVEUsCisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAxfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEV0lMRENBUkQgIDQKLSAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRSAgNQotICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckRlbHRhVGFibGUsIDIsIHsxLCAzfX0sCi0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJEZWx0YVRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSUQgIDMKKyAgICB7TVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlELCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgMX19LAorI2RlZmluZSAgIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJEICA0CisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURUWVBFICA1CisgICAge01URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRFRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlLCAyLCB7MSwgM319LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMTE0LDYgKzEzMSwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJEZWx0YVRhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZVRyaWdnZXJEZWx0YVRhYmxlOiBFbnRlcmluZy4uLiAgXG4iKSk7CisKKyAgICAvKiBzZXQgZGVmYXVsdCB2YWx1ZSAqLworCSp3cml0ZV9tZXRob2QgPSBOVUxMOworCiAgICAgLyoKICAgICAgKiB0aGlzIGFzc3VtZXMgeW91IGhhdmUgcmVnaXN0ZXJlZCBhbGwgeW91ciBkYXRhIHByb3Blcmx5CiAgICAgICovCkBAIC0xMjksMjQgKzE1MCwyOSBAQAogCiAKICAgICBjYXNlIE1URVRSSUdHRVJERUxUQURJU0NPTlRJTlVJVFlJRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SUQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9CiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURMZW4gKiBzaXplb2Yob2lkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEOwogCiAgICAgY2FzZSBNVEVUUklHR0VSREVMVEFESVNDT05USU5VSVRZSURXSUxEQ0FSRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0KICAgICAgICAgICAgIHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkRFTFRBRElTQ09OVElOVUlUWUlEVFlQRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURUeXBlOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZTsKIAotCiAgICAgZGVmYXVsdDoKICAgICAgICAgRVJST1JfTVNHKCIiKTsKICAgICB9CkBAIC0xNTUsNyArMTgxLDcgQEAKIAogCiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludAogd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTQxNCwzICs0NDAsNCBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCmluZGV4IDBlOGExN2UuLmZhNDg3MmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRGVsdGFUYWJsZS5oCkBAIC0zMCw4ICszMCwxMCBAQAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9tdGVUcmlnZ2VyRGVsdGFUYWJsZSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9tdGVUcmlnZ2VyRGVsdGFUYWJsZTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRFdpbGRjYXJkOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX01URVRSSUdHRVJERUxUQVRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwppbmRleCAxYWQwYTc0Li40ZTZiNjRiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jCkBAIC00OCwzMCArNDgsNTYgQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRVRFU1QgIDMKLSAgICB7TVRFVFJJR0dFUkVYSVNURU5DRVRFU1QsIEFTTl9CSVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VURVNULCBBU05fQklUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VTVEFSVFVQICA0Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VTVEFSVFVQLCBBU05fQklUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFU1RBUlRVUCwgQVNOX0JJVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSICA1Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRU9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTICA2Ci0gICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA0fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIgIDcKLSAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlQgIDgKLSAgICB7TVRFVFJJR0dFUkVYSVNURU5DRUVWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgNn19LAotCiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGVfdmFyaWFibGVzW10gPSB7CisgICAgLyoKKyAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqLworI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VURVNUICAzCisgICAge01URVRSSUdHRVJFWElTVEVOQ0VURVNULCBBU05fQklUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCAxfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRVNUQVJUVVAgIDQKKyAgICB7TVRFVFJJR0dFUkVYSVNURU5DRVNUQVJUVVAsIEFTTl9CSVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSICA1CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTICA2CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlRPV05FUiAgNworICAgIHtNVEVUUklHR0VSRVhJU1RFTkNFRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVYSVNURU5DRUVWRU5UICA4CisgICAge01URVRSSUdHRVJFWElTVEVOQ0VFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUsIDIsIHsxLCA2fX0sCit9OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoKICAqIChMID0gbGVuZ3RoIG9mIHRoZSBvaWRzdWZmaXgpIAogICovCkBAIC0xMzEsNiArMTU3LDEwIEBACiAKICAgICBERUJVR01TR1RMKCgibXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlIiwKICAgICAgICAgICAgICAgICAidmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZTogRW50ZXJpbmcuLi4gIFxuIikpOworCisJLyogc2V0IGRlZmF1bHQgdmFsdWUgKi8KKwkqd3JpdGVfbWV0aG9kID0gTlVMTDsKKwogICAgIC8qCiAgICAgICogdGhpcyBhc3N1bWVzIHlvdSBoYXZlIHJlZ2lzdGVyZWQgYWxsIHlvdXIgZGF0YSBwcm9wZXJseQogICAgICAqLwpAQCAtMTQ5LDMyICsxNzksNDQgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFVEVTVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlVGVzdDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZVRlc3RMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VUZXN0OwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFU1RBUlRVUDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlU3RhcnR1cDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZVN0YXJ0dXBMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VTdGFydHVwOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRVhJU1RFTkNFT0JKRUNUU09XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzT3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzT3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzT3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFWElTVEVOQ0VPQkpFQ1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c0xlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHM7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFWElTVEVOQ0VFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJFWElTVEVOQ0VFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFeGlzdGVuY2VFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50OwogCkBAIC0xODcsNiArMjI5LDcgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKIGludAogd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZVRlc3QoaW50IGFjdGlvbiwKQEAgLTczNSwzICs3NzgsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuaAppbmRleCA0MGRiZDRlLi43NWM2NDI3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5oCkBAIC0yOSwxMSArMjksMTMgQEAKICAgICAgdm9pZCAgICAgICAgICAgIGluaXRfbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlKHZvaWQpOwogICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VUZXN0OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZVN0YXJ0dXA7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0c093bmVyOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckV4aXN0ZW5jZU9iamVjdHM7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRPd25lcjsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFeGlzdGVuY2VFdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX01URVRSSUdHRVJFWElTVEVOQ0VUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmMKaW5kZXggNGE0NDA4Yy4uODBhNDVhMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuYwpAQCAtOCw2ICs4LDcgQEAKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0yMCw2ICsyMSwxMyBAQAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG1pYl9zbnByaW50X3ZhcmlhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGRvbWFpbl9zdXBwb3J0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdWludCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ190aW1lX3RvX3NlY3MpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIG1pbmltYWwgaW5jbHVkZSBkaXJlY3RpdmVzIApAQCAtNzgsNTAgKzg2LDk4IEBACiAgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogc3RydWN0IHZhcmlhYmxlMiBtdGVUcmlnZ2VyVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIE1URVRSSUdHRVJDT01NRU5UICAgICA1Ci0gICAge01URVRSSUdHRVJDT01NRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCAzfX0sCisgICAge01URVRSSUdHRVJDT01NRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRFU1QgICAgICAgIDYKLSAgICB7TVRFVFJJR0dFUlRFU1QsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7TVRFVFJJR0dFUlRFU1QsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDR9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSU0FNUExFVFlQRSAgNwotICAgIHtNVEVUUklHR0VSU0FNUExFVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDV9fSwKKyAgICB7TVRFVFJJR0dFUlNBTVBMRVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA1fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlZBTFVFSUQgICAgIDgKLSAgICB7TVRFVFJJR0dFUlZBTFVFSUQsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDZ9fSwKKyAgICB7TVRFVFJJR0dFUlZBTFVFSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDZ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJEICA5Ci0gICAge01URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsCi0gICAgIDIsIHsxLCA3fX0sCisgICAge01URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRBUkdFVFRBRyAgIDEwCi0gICAge01URVRSSUdHRVJUQVJHRVRUQUcsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDh9fSwKKyAgICB7TVRFVFJJR0dFUlRBUkdFVFRBRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgOH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJDT05URVhUTkFNRSAgMTEKLSAgICB7TVRFVFJJR0dFUkNPTlRFWFROQU1FLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCA5fX0sCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgOX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJDT05URVhUTkFNRVdJTERDQVJEICAxMgotICAgIHtNVEVUUklHR0VSQ09OVEVYVE5BTUVXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUkNPTlRFWFROQU1FV0lMRENBUkQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJGUkVRVUVOQ1kgICAxMwotICAgIHtNVEVUUklHR0VSRlJFUVVFTkNZLCBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwKLSAgICAgezEsIDExfX0sCisgICAge01URVRSSUdHRVJGUkVRVUVOQ1ksIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VST0JKRUNUU09XTkVSICAxNAotICAgIHtNVEVUUklHR0VST0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsCi0gICAgIHsxLCAxMn19LAorICAgIHtNVEVUUklHR0VST0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJPQkpFQ1RTICAgICAxNQotICAgIHtNVEVUUklHR0VST0JKRUNUUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTN9fSwKKyAgICB7TVRFVFJJR0dFUk9CSkVDVFMsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDEzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUkVOQUJMRUQgICAgIDE2Ci0gICAge01URVRSSUdHRVJFTkFCTEVELCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTR9fSwKKyAgICB7TVRFVFJJR0dFUkVOQUJMRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJFTlRSWVNUQVRVUyAgMTcKLSAgICB7TVRFVFJJR0dFUkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLAotICAgICB7MSwgMTV9fSwKLQorICAgIHtNVEVUUklHR0VSRU5UUllTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNX19LAogfTsKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KK3N0cnVjdCB2YXJpYWJsZTIgbXRlVHJpZ2dlclRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKKyAgICAgKi8KKyNkZWZpbmUgICBNVEVUUklHR0VSQ09NTUVOVCAgICAgNQorICAgIHtNVEVUUklHR0VSQ09NTUVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRFU1QgICAgICAgIDYKKyAgICB7TVRFVFJJR0dFUlRFU1QsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgNH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJTQU1QTEVUWVBFICA3CisgICAge01URVRSSUdHRVJTQU1QTEVUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA1fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlZBTFVFSUQgICAgIDgKKyAgICB7TVRFVFJJR0dFUlZBTFVFSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgNn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJWQUxVRUlEV0lMRENBUkQgIDkKKyAgICB7TVRFVFJJR0dFUlZBTFVFSURXSUxEQ0FSRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgN319LAorI2RlZmluZSAgIE1URVRSSUdHRVJUQVJHRVRUQUcgICAxMAorICAgIHtNVEVUUklHR0VSVEFSR0VUVEFHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDh9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSQ09OVEVYVE5BTUUgIDExCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCA5fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkNPTlRFWFROQU1FV0lMRENBUkQgIDEyCisgICAge01URVRSSUdHRVJDT05URVhUTkFNRVdJTERDQVJELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxMH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJGUkVRVUVOQ1kgICAxMworICAgIHtNVEVUUklHR0VSRlJFUVVFTkNZLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRhYmxlLCAyLCB7MSwgMTF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VST0JKRUNUU09XTkVSICAxNAorICAgIHtNVEVUUklHR0VST0JKRUNUU09XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDEyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUk9CSkVDVFMgICAgIDE1CisgICAge01URVRSSUdHRVJPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUYWJsZSwgMiwgezEsIDEzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUkVOQUJMRUQgICAgIDE2CisgICAge01URVRSSUdHRVJFTkFCTEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJFTlRSWVNUQVRVUyAgMTcKKyAgICB7TVRFVFJJR0dFUkVOVFJZU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGFibGUsIDIsIHsxLCAxNX19LAorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwpAQCAtMzU2LDggKzQxMiw3IEBACiB2b2lkCiBwYXJzZV9zaW1wbGVfbW9uaXRvcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXSwgKmNwLCBlYnVmW1NQUklOVF9NQVhfTEVOXSwKLSAgICAgICAgICAgICAgICAgICAgZXZlbnRuYW1lWzY0XTsKKyAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXSwgKmNwLCBldmVudG5hbWVbNjRdOwogICAgIG9pZCAgICAgICAgICAgICBvYnVmW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgb2J1ZkxlbjsKICAgICBzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEgKlN0b3JhZ2VOZXc7CkBAIC00MDMsOCArNDU4LDE3IEBACiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICdyJzoKICAgICAgICAgICAgIGlmIChjcCkgeworICAgICAgICAgICAgICAgIGludCBmcmVxOwogICAgICAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZU5ldy0+bXRlVHJpZ2dlckZyZXF1ZW5jeSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBmcmVxID0gbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKGJ1Zik7CisgICAgICAgICAgICAgICAgaWYgKGZyZXEgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiSW52YWxpZCAtciB2YWx1ZVxuIik7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIFhYWDogZnJlZSBTdG9yYWdlTmV3IAorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVUcmlnZ2VyRnJlcXVlbmN5ID0gKHVuc2lnZW5kIGxvbmcpIGZyZXE7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIk5vIHBhcmFtZXRlciBhZnRlciAtciBnaXZlblxuIik7CiAgICAgICAgICAgICAgICAgLyoKQEAgLTQ0NCw4ICs1MDgsNyBAQAogICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKICAgICAgICAgICAgIG9idWZMZW4gPSBNQVhfT0lEX0xFTjsKICAgICAgICAgICAgIGlmICghc25tcF9wYXJzZV9vaWQoYnVmLCBvYnVmLCAmb2J1ZkxlbikpIHsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGVidWYsICJ1bmFibGUgdG8gcGFyc2Ugb2lkOiAlcyIsIGJ1Zik7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcihlYnVmKTsKKwkJbmV0c25tcF9jb25maWdfZXJyb3IoInVuYWJsZSB0byBwYXJzZSBvaWQ6ICVzIiwgYnVmKTsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIFhYWDogZnJlZSBTdG9yYWdlTmV3IAogICAgICAgICAgICAgICAgICAqLwpAQCAtNTA2LDggKzU2OSw3IEBACiAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKICAgICBvYnVmTGVuID0gTUFYX09JRF9MRU47CiAgICAgaWYgKCFzbm1wX3BhcnNlX29pZChidWYsIG9idWYsICZvYnVmTGVuKSkgewotICAgICAgICBzcHJpbnRmKGVidWYsICJ1bmFibGUgdG8gcGFyc2Ugb2lkOiAlcyIsIGJ1Zik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoZWJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoInVuYWJsZSB0byBwYXJzZSBvaWQ6ICVzIiwgYnVmKTsKICAgICAgICAgLyoKICAgICAgICAgICogWFhYOiBmcmVlIFN0b3JhZ2VOZXcgCiAgICAgICAgICAqLwpAQCAtNTk1LDcgKzY1Nyw3IEBACiAKICAgICBERUJVR01TR1RMKCgibXRlVHJpZ2dlclRhYmxlIiwgImFkZGVkIHNpbXBsZSBtb25pdG9yOiAlc1xuIiwKICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3LT5tdGVUcmlnZ2VyTmFtZSkpOwotfQorfSAvKiBwYXJzZV9zaW1wbGVfbW9uaXRvciAqLwogCiAKIC8qCkBAIC0xMDc4LDkgKzExNDAsNyBAQAogICAgICAgICBtdGVfZW5hYmxlX3RyaWdnZXIoU3RvcmFnZVRtcCk7CiAKICAgICBERUJVR01TR1RMKCgibXRlVHJpZ2dlclRhYmxlIiwgImRvbmUuXG4iKSk7Ci19Ci0KLQorfSAvKiBwYXJzZV9tdGVUcmlnZ2VyVGFibGUgKi8KIAogCiAvKgpAQCAtMTQzMSwxNCArMTQ5MSwyMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVUcmlnZ2VyVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KICAgICBpZiAoKFN0b3JhZ2VUbXAgPQogICAgICAgICAgaGVhZGVyX2NvbXBsZXgobXRlVHJpZ2dlclRhYmxlU3RvcmFnZSwgdnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfbGVuLCB3cml0ZV9tZXRob2QpKSA9PSBOVUxMKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBpZiAodnAtPm1hZ2ljID09IE1URVRSSUdHRVJFTlRSWVNUQVRVUykKICAgICAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRW50cnlTdGF0dXM7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKQEAgLTE0NTAsNjcgKzE1MTYsOTMgQEAKIAogCiAgICAgY2FzZSBNVEVUUklHR0VSQ09NTUVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQ29tbWVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckNvbW1lbnRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb21tZW50OwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEVTVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGVzdDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRlc3RMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUZXN0OwogCiAgICAgY2FzZSBNVEVUUklHR0VSU0FNUExFVFlQRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyU2FtcGxlVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJTYW1wbGVUeXBlKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyU2FtcGxlVHlwZTsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlZBTFVFSUQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclZhbHVlSUQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJWYWx1ZUlETGVuICogc2l6ZW9mKG9pZCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJWYWx1ZUlEOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVkFMVUVJRFdJTERDQVJEOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJWYWx1ZUlEV2lsZGNhcmQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEFSR0VUVEFHOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUYXJnZXRUYWc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUYXJnZXRUYWdMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUYXJnZXRUYWc7CiAKICAgICBjYXNlIE1URVRSSUdHRVJDT05URVhUTkFNRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQ29udGV4dE5hbWU7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb250ZXh0TmFtZUxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckNvbnRleHROYW1lOwogCiAgICAgY2FzZSBNVEVUUklHR0VSQ09OVEVYVE5BTUVXSUxEQ0FSRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyQ29udGV4dE5hbWVXaWxkY2FyZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJDb250ZXh0TmFtZVdpbGRjYXJkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyQ29udGV4dE5hbWVXaWxkY2FyZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkZSRVFVRU5DWToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRnJlcXVlbmN5OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckZyZXF1ZW5jeSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckZyZXF1ZW5jeTsKIAogICAgIGNhc2UgTVRFVFJJR0dFUk9CSkVDVFNPV05FUjoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyT2JqZWN0c093bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyT2JqZWN0c093bmVyTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyT2JqZWN0c093bmVyOwogCiAgICAgY2FzZSBNVEVUUklHR0VST0JKRUNUUzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyT2JqZWN0czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlck9iamVjdHNMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJPYmplY3RzOwogCiAgICAgY2FzZSBNVEVUUklHR0VSRU5BQkxFRDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyRW5hYmxlZDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbmFibGVkKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW5hYmxlZDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUkVOVFJZU1RBVFVTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJFbnRyeVN0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJFbnRyeVN0YXR1cyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVudHJ5U3RhdHVzOwogCkBAIC0xNTIzLDcgKzE2MTUsNyBAQAogCiAKIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiB3cml0ZV9tdGVUcmlnZ2VyQ29tbWVudChpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTE2MDYsMTAgKzE2OTgsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlckNvbW1lbnQgKi8KIAogCiAKQEAgLTE2OTIsMTAgKzE3ODUsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlclRlc3QgKi8KIAogCiAKQEAgLTE3NzQsMTEgKzE4NjgsMTEgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyU2FtcGxlVHlwZSAqLwogCiAKIApAQCAtMTg2OCwxMCArMTk2MiwxMSBAQAogICAgICAgICAgKiBwcmV2aW91cyB2YWx1ZXMsIGFzIHRoZXNlIGFyZSBmcm9tIGEgZGlmZmVyZW50IG9iamVjdD8gIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJWYWx1ZUlEICovCiAKIAogCkBAIC0xOTUxLDExICsyMDQ2LDExIEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlclZhbHVlSURXaWxkY2FyZCAqLwogCiAKIApAQCAtMjA0MCwxMCArMjEzNSwxMSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyVGFyZ2V0VGFnICovCiAKIAogCkBAIC0yMTI5LDEwICsyMjI1LDExIEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJDb250ZXh0TmFtZSAqLwogCiAKIApAQCAtMjIxMiwxMSArMjMwOSwxMSBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwotCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJDb250ZXh0TmFtZVdpbGRjYXJkICovCiAKIAogCkBAIC0yMjk5LDEwICsyMzk2LDExIEBACiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW50cnlTdGF0dXMgPT0gUlNfQUNUSVZFKQogICAgICAgICAgICAgbXRlX2VuYWJsZV90cmlnZ2VyKFN0b3JhZ2VUbXApOwogCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Cit9IC8qIHdyaXRlX210ZVRyaWdnZXJGcmVxdWVuY3kgKi8KIAogCiAKQEAgLTIzODgsMTAgKzI0ODYsMTEgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlck9iamVjdHNPd25lciAqLwogCiAKIApAQCAtMjQ3NiwxMCArMjU3NSwxMSBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyT2JqZWN0cyAqLwogCiAKIApAQCAtMjU2NCwxNCArMjY2NCwxMSBAQAogICAgICAgICBlbHNlIGlmIChTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyRW5hYmxlZCA9PSBNVEVUUklHR0VSRU5BQkxFRF9GQUxTRSkKICAgICAgICAgICAgIG10ZV9kaXNhYmxlX3RyaWdnZXIoU3RvcmFnZVRtcCk7CiAKLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi0KLQorfSAvKiB3cml0ZV9tdGVUcmlnZ2VyRW5hYmxlZCAqLwogCiAKIApAQCAtMjg5NSwxMCArMjk5MiwxNSBAQAogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVuYWJsZWQgPT0gTVRFVFJJR0dFUkVOQUJMRURfVFJVRSAmJgogICAgICAgICAgICAgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlckVudHJ5U3RhdHVzID09IFJTX0FDVElWRSkKICAgICAgICAgICAgIG10ZV9lbmFibGVfdHJpZ2dlcihTdG9yYWdlVG1wKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KK30gLyogd3JpdGVfbXRlVHJpZ2dlckVudHJ5U3RhdHVzICovCisKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKwogCiAvKgogICogc2VuZCB0cmFwIApAQCAtMjk5Myw3ICszMDk1LDggQEAKIAogICAgIHNlbmRfdjJ0cmFwKHZhcl9saXN0KTsKICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJfbGlzdCk7Ci19Cit9IC8qIHNlbmRfbXRlX3RyYXAgKi8KKwogCiB2b2lkCiBsYXN0X3N0YXRlX2NsZWFuKHZvaWQgKmRhdGEpCkBAIC0zMDAzLDYgKzMxMDYsNyBAQAogICAgIFNOTVBfRlJFRShjbGVhbm1lKTsKIH0KIAorCiAvKgogICogcmV0cmlldmVzIHJlcXVlc3RlZCBpbmZvIGluIHBkdSBmcm9tIHRoZSBjdXJyZW50IHRhcmdldCAKICAqLwpAQCAtMzA5NCw3ICszMTk4LDcgQEAKICAgICBidWZbc2l6ZW9mKGJ1ZikgLSAxXSA9ICdcMCc7CiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUYWJsZSIsICJnb3QgYSB2YXJpYWJsZXM6ICVzXG4iLCBidWYpKTsKICAgICByZXR1cm4gcmVzcG9uc2U7Ci19Cit9IC8qIG10ZV9nZXRfcmVzcG9uc2UgKi8KIAogCiAvKgpAQCAtMzEyNSw3ICszMjI5LDYgQEAKIH0KIAogCi0KIC8qCiAgKiBSZXR1cm4gMCBpZiB0aGUgZGlzY29udGludWl0eSBvYmplY3Qgd2FzIGNoZWNrZWQgYW5kIG5vIGRpc2NvbnRpbnVpdHkgaGFzCiAgKiBvY2N1cnJlZCwgMSBpZiB0aGUgZGlzY29udGludWl0eSBvYmplY3Qgd2FzIGNoZWNrZWQgYW5kIGEgZGlzY29udGludWl0eQpAQCAtMzI1Niw3ICszMzU5LDcgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgibXRlX2Rpc2NvIiwgIm5vIGRpc2NvbnRpbnVpdHlcbiIpKTsKICAgICByZXR1cm4gMDsKLX0KK30gLyogbXRlX2Rpc2NvbnRpbnVpdHlfb2NjdXJyZWQgKi8KIAogCiB2b2lkCkBAIC0zNjYzLDcgKzM3NjYsOCBAQAogICAgIH0KIAogICAgIGl0ZW0tPnN0YXJ0ZWQgPSBNVEVfU1RBUlRFRDsKLX0KK30gLyogbXRlX3J1bl90cmlnZ2VyICovCisKIAogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUYWJsZS5oCmluZGV4IDE4OTE0ZGQuLmM0Mjc2MDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRhYmxlLmgKQEAgLTIyOSw3ICsyMjksNyBAQAogICAgICBuZXRzbm1wX3BkdSAgICAqbXRlX2dldF9yZXNwb25zZShzdHJ1Y3QgbXRlVHJpZ2dlclRhYmxlX2RhdGEgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKik7CiAKLQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJDb21tZW50OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRlc3Q7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyU2FtcGxlVHlwZTsKQEAgLTI0Myw4ICsyNDMsNyBAQAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlck9iamVjdHM7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyRW5hYmxlZDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJFbnRyeVN0YXR1czsKLQotICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlckVudHJ5U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICB2b2lkICAgICAgICAgICAgbXRlX2VuYWJsZV90cmlnZ2VyKHN0cnVjdCBtdGVUcmlnZ2VyVGFibGVfZGF0YSAqaXRlbSk7CiAgICAgIHZvaWQgICAgICAgICAgICBtdGVfZGlzYWJsZV90cmlnZ2VyKHN0cnVjdCBtdGVUcmlnZ2VyVGFibGVfZGF0YQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCmluZGV4IDAzOGEyZmIuLmJlOTYzYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMKQEAgLTQ4LDYyICs0OCwxMTUgQEAKICAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV92YXJpYWJsZXNbXSA9IHsKICAgICAvKgogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAgIDMKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkcgIDQKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORyAgNQotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HICA2Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkcgIDcKLSAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElORywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDV9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSICA4Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRE9CSkVDVFNPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgNn19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTICA5Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA3fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UT1dORVIgIDEwCi0gICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA4fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UICAxMQotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCA5fX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSICAxMgotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxMH19LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQgIDEzCi0gICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTF9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSICAxNAotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDEyfX0sCiAjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlQgIDE1Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxM319LAogI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVE9XTkVSICAxNgotICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTR9fSwKICNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQgIDE3Ci0gICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVCwgQVNOX09DVEVUX1NUUiwgUldSSVRFLAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDE1fX0sCi0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZV92YXJpYWJsZXNbXSA9IHsKKyAgICAvKgorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCisgICAgICovCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAgIDMKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFNUQVJUVVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HICA0CisgICAge01URVRSSUdHRVJUSFJFU0hPTERSSVNJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDJ9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORyAgNQorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgM319LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lORyAgNgorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDR9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HICA3CisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDV9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSICA4CisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgNn19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTICA5CisgICAge01URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDd9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HRVZFTlRPV05FUiAgMTAKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5UT1dORVIsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgOH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVCAgMTEKKyAgICB7TVRFVFJJR0dFUlRIUkVTSE9MRFJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDl9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVIgIDEyCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlRPV05FUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUsIDIsIHsxLCAxMH19LAorI2RlZmluZSAgIE1URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQgIDEzCisgICAge01URVRSSUdHRVJUSFJFU0hPTERGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTF9fSwKKyNkZWZpbmUgICBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSICAxNAorICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDEyfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlQgIDE1CisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQVJJU0lOR0VWRU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDEzfX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UT1dORVIgIDE2CisgICAge01URVRSSUdHRVJUSFJFU0hPTERERUxUQUZBTExJTkdFVkVOVE9XTkVSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSwgMiwgezEsIDE0fX0sCisjZGVmaW5lICAgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UICAxNworICAgIHtNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HRVZFTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLCAyLCB7MSwgMTV9fSwKK307CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKIC8qCiAgKiAoTCA9IGxlbmd0aCBvZiB0aGUgb2lkc3VmZml4KSAKICAqLwogCi0KIC8qCiAgKiBnbG9iYWwgc3RvcmFnZSBvZiBvdXIgZGF0YSwgc2F2ZWQgaW4gYW5kIGNvbmZpZ3VyZWQgYnkgaGVhZGVyX2NvbXBsZXgoKSAKICAqLwpAQCAtMTUxLDYgKzIwNCwxMCBAQAogCiAgICAgREVCVUdNU0dUTCgoIm10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSIsCiAgICAgICAgICAgICAgICAgInZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGU6IEVudGVyaW5nLi4uICBcbiIpKTsKKworCS8qIHNldCBkZWZhdWx0IHZhbHVlICovCisJKndyaXRlX21ldGhvZCA9IE5VTEw7CisKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKICAgICAgKi8KQEAgLTE3MCw4MCArMjI3LDExMCBAQAogCiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERTVEFSVFVQOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXApOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRTdGFydHVwOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEUklTSU5HOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElORzoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZzsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZzsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZzsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZyk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFGQUxMSU5HOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmc7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nOwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xET0JKRUNUU09XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzT3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERPQkpFQ1RTOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0c0xlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZE9iamVjdHM7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50T3duZXI7CiAKICAgICBjYXNlIE1URVRSSUdHRVJUSFJFU0hPTERSSVNJTkdFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmdFdmVudExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZ0V2ZW50OwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xERkFMTElOR0VWRU5UT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudE93bmVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MREZBTExJTkdFVkVOVDoKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50OwogCiAgICAgY2FzZSBNVEVUUklHR0VSVEhSRVNIT0xEREVMVEFSSVNJTkdFVkVOVE9XTkVSOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50T3duZXJMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBUklTSU5HRVZFTlQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPm10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudDsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UT1dORVI6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50T3duZXI7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAqdmFyX2xlbiA9CiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnRPd25lckxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgU3RvcmFnZVRtcC0+CiAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnRPd25lcjsKIAogICAgIGNhc2UgTVRFVFJJR0dFUlRIUkVTSE9MRERFTFRBRkFMTElOR0VWRU5UOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmdFdmVudDsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gU3RvcmFnZVRtcC0+bXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50TGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBTdG9yYWdlVG1wLT5tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnQ7CiAKQEAgLTI1Niw3ICszNDMsNyBAQAogCiAKIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKIGludAogd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZFN0YXJ0dXAoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC0xNjA3LDMgKzE2OTQsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuaAppbmRleCA3YWE2Y2VjLi44ZjMzMDExIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oCkBAIC0yNyw2ICsyNyw3IEBACiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9tdGVUcmlnZ2VyVGhyZXNob2xkVGFibGU7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkU3RhcnR1cDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGRSaXNpbmc7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZzsKQEAgLTQyLDUgKzQzLDYgQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX210ZVRyaWdnZXJUaHJlc2hvbGREZWx0YVJpc2luZ0V2ZW50OwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhRmFsbGluZ0V2ZW50T3duZXI7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9tdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFGYWxsaW5nRXZlbnQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9NVEVUUklHR0VSVEhSRVNIT0xEVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYwppbmRleCBiY2VkZDA3Li4wZjcxZGE2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwQ3RsVGFibGUuYwpAQCAtNiw3ICs2LDYgQEAKICAqRmlsZSBOYW1lOmxvb2t1cEN0bFRhYmxlLmMKICAqRmlsZSBEZXNjcmlwdGlvbjpSb3dzIG9mIHRoZSBsb29rdXBDdGxUYWJsZSBNSUIgYWRkICwgZGVsZXRlIGFuZCByZWFkLlJvd3Mgb2YgbG9va3VwUmVzdWx0c1RhYmxlCiAgKiAgICAgICAgICAgICAgTUlCIGFkZCBhbmQgZGVsZXRlLgotIAogICoKICAqQ3VycmVudCBWZXJzaW9uOjEuMAogICpBdXRob3I6Q2hlbkppbmcKQEAgLTE2LDMzICsxNSwzNCBAQAogLyoKICAqIFRoaXMgc2hvdWxkIGFsd2F5cyBiZSBpbmNsdWRlZCBmaXJzdCBiZWZvcmUgYW55dGhpbmcgZWxzZSAKICAqLwotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9MSU1JVFNfSAotI2luY2x1ZGUgPGxpbWl0cy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisKICNpbmNsdWRlICJsb29rdXBDdGxUYWJsZS5oIgogI2luY2x1ZGUgImxvb2t1cFJlc3VsdHNUYWJsZS5oIgogI2luY2x1ZGUgImhlYWRlcl9jb21wbGV4LmgiCiAKKyNpZm5kZWYgSU5FVEFERFJFU1NUWVBFX0VOVU1TCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9FTlVNUworCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9VTktOT1dOICAwCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY0ICAgICAxCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2ICAgICAyCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY0WiAgICAzCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2WiAgICA0CisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9ETlMgICAgIDE2CisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSU5FVEFERFJFU1NUWVBFX0VOVU1TICovCisKIC8qCiAgKkZvciBkaXNjb250aW51aXR5IGNoZWNraW5nLgogICovCkBAIC01MSwyNCArNTEsNDkgQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgyLCAxLCAzIH07CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0cnVjdCB2YXJpYWJsZTIgbG9va3VwQ3RsVGFibGVfdmFyaWFibGVzW10gPSB7CiAgICAgLyoKLSAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAorICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXgKICAgICAgKi8KLSAgICB7Q09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9MT09LVVBDVExUSU1FLCAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDZ9fSwKLSAgICB7Q09MVU1OX0xPT0tVUENUTFJDLCAgICAgICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgN319LAotICAgIHtDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA4fX0KKyAgICB7Q09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9MT09LVVBDVExUSU1FLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFJDLCAgICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA4fX0KIH07CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitzdHJ1Y3QgdmFyaWFibGUyIGxvb2t1cEN0bFRhYmxlX3ZhcmlhYmxlc1tdID0geworICAgIC8qCisgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeAorICAgICAqLworICAgIHtDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9MT09LVVBDVExUSU1FLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX0xPT0tVUENUTFJDLCAgICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xvb2t1cEN0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fTE9PS1VQQ1RMUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBDdGxUYWJsZSwgMiwgezEsIDh9fQorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogLyoKICAqIGdsb2JhbCBzdG9yYWdlIG9mIG91ciBkYXRhLCBzYXZlZCBpbiBhbmQgY29uZmlndXJlZCBieSBoZWFkZXJfY29tcGxleCgpIAogICovCiAKLQogc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpsb29rdXBDdGxUYWJsZVN0b3JhZ2UgPSBOVUxMOwogc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpsb29rdXBSZXN1bHRzVGFibGVTdG9yYWdlID0gTlVMTDsKIApAQCAtNzYsNyArMTAxLDYgQEAKIGludCBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqdGhlZGF0YSwgbG9uZyB2YWwpOwogaW50IG1vZGlmeV9sb29rdXBDdGxSYyhzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqdGhlZGF0YSwgbG9uZyB2YWwpOwogCi0KIHZvaWQKIGluaXRfbG9va3VwQ3RsVGFibGUodm9pZCkKIHsKQEAgLTEwOSwxMSArMTMzLDEyIEBACiAgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VOZXcgPSBOVUxMOwogICAgIFN0b3JhZ2VOZXcgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwVGFibGVfZGF0YSk7CiAgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiT3V0IGluIG1lbW9yeSBpbiBuc2xvb2t1cC1taWIvY3JlYXRlX2xvb2t1cFRhYmxlX2RhdGVcbiIpOwogICAgICAgICBleGl0KDEpOwogICAgIH0KICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzID0gc3RyZHVwKCIiKTsKICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzTGVuID0gMDsKLSAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxPcGVyU3RhdHVzID0gMmw7CisgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsT3BlclN0YXR1cyA9IDJMOwogICAgIFN0b3JhZ2VOZXctPmxvb2t1cEN0bFRpbWUgPSAwOwogICAgIFN0b3JhZ2VOZXctPnN0b3JhZ2V0eXBlID0gU1RfTk9OVk9MQVRJTEU7CiAgICAgcmV0dXJuIFN0b3JhZ2VOZXc7CkBAIC0xMjcsMTYgKzE1MiwxNyBAQAogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAKLQogICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwogICAgIC8qCiAgICAgICogYWRkIHRoZSBpbmRleCB2YXJpYWJsZXMgdG8gdGhlIHZhcmJpbmQgbGlzdCwgd2hpY2ggaXMgCiAgICAgICogdXNlZCBieSBoZWFkZXJfY29tcGxleCB0byBpbmRleCB0aGUgZGF0YSAKICAgICAgKi8KLQotCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisgICAgICAgIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOwogCiAKICAgICBpZiAoaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJmxvb2t1cEN0bFRhYmxlU3RvcmFnZSwgdmFycywgdGhlZGF0YSkgPT0KQEAgLTE1OCwxMCArMTg0LDE1IEBACiAgICAgcCA9IHRoZWRhdGEtPlJlc3VsdHNUYWJsZTsKICAgICBpZiAodGhlZGF0YS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpCiAgICAgICAgIGRvIHsKLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgcC0+bG9va3VwQ3RsT3duZXJJbmRleCwgcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJnAtPmxvb2t1cFJlc3VsdHNJbmRleCwgc2l6ZW9mKHAtPmxvb2t1cFJlc3VsdHNJbmRleCkpOyAgICAgICAvKiBsb29rdXBSZXN1bHRzSW5kZXggKi8KLQorICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgIChjaGFyICopIHAtPmxvb2t1cEN0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgKGNoYXIgKikgcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgICAgICAgICBwLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsKKyAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgIChjaGFyICopICZwLT5sb29rdXBSZXN1bHRzSW5kZXgsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHAtPmxvb2t1cFJlc3VsdHNJbmRleCkpOwogCiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwUmVzdWx0c1RhYmxlIiwgImFkZGluZyBkYXRhLi4uICAiKSk7CiAgICAgICAgICAgICAvKgpAQCAtMTc5LDcgKzIxMCw2IEBACiAgICAgICAgICAgICBwID0gcC0+bmV4dDsKICAgICAgICAgfSB3aGlsZSAocCAhPSBOVUxMKTsKIAotCiAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsICJkb25lLlxuIikpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CkBAIC0yMTYsOCArMjQ2LDcgQEAKIHBhcnNlX2xvb2t1cEN0bFRhYmxlKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQogewogICAgIHNpemVfdCAgICAgICAgICB0bXBpbnQ7Ci0gICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPQotICAgICAgICBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwVGFibGVfZGF0YSk7CisgICAgc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwVGFibGVfZGF0YSk7CiAKICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLCAicGFyc2luZyBjb25maWcuLi4gICIpKTsKIApAQCAtMzAwLDEwICszMjksOCBAQAogICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlVG1wOwogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleDsKIAotCiAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgInN0b3JpbmcgZGF0YS4uLiAgIikpOwogCi0KICAgICBmb3IgKGhjaW5kZXggPSBsb29rdXBDdGxUYWJsZVN0b3JhZ2U7IGhjaW5kZXggIT0gTlVMTDsKICAgICAgICAgIGhjaW5kZXggPSBoY2luZGV4LT5uZXh0KSB7CiAgICAgICAgIFN0b3JhZ2VUbXAgPSAoc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgKikgaGNpbmRleC0+ZGF0YTsKQEAgLTMxMyw3ICszNDAsNiBAQAogICAgICAgICAgICAgc3RyY2F0KGxpbmUsICJsb29rdXBDdGxUYWJsZSAiKTsKICAgICAgICAgICAgIGNwdHIgPSBsaW5lICsgc3RybGVuKGxpbmUpOwogCi0KICAgICAgICAgICAgIGNwdHIgPQogICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT5sb29rdXBDdGxPd25lckluZGV4LApAQCAtMzUwLDkgKzM3Niw2IEBACiAgICAgICAgICAgICAgICAgcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fSU5URUdFUiwgY3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT5sb29rdXBDdGxSb3dTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1waW50KTsKLQotCi0KICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKICAgICAgICAgfQogICAgIH0KQEAgLTM3NCw5ICszOTcsOCBAQAogICAgICAgICAgICAgICAgICAgIHNpemVfdCAqbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICp2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCiB7Ci0KLQogICAgIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlVG1wID0gTlVMTDsKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAKICAgICAvKgogICAgICAqIHRoaXMgYXNzdW1lcyB5b3UgaGF2ZSByZWdpc3RlcmVkIGFsbCB5b3VyIGRhdGEgcHJvcGVybHkKQEAgLTM5MywzOCArNDE1LDM3IEBACiAgICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4KICAgICAgKi8KICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotCi0KICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTVFlQRToKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZTsKIAogICAgIGNhc2UgQ09MVU1OX0xPT0tVUENUTFRBUkdFVEFERFJFU1M6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbG9va3VwQ3RsVGFyZ2V0QWRkcmVzczsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICp2YXJfbGVuID0gKFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NMZW4pOwotCiAgICAgICAgIHJldHVybiAodV9jaGFyICopIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3M7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExPUEVSU1RBVFVTOgogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5sb29rdXBDdGxPcGVyU3RhdHVzKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bE9wZXJTdGF0dXM7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExUSU1FOgogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihTdG9yYWdlVG1wLT5sb29rdXBDdGxUaW1lKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRpbWU7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExSQzoKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bG9va3VwQ3RsUmMpOwotCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgU3RvcmFnZVRtcC0+bG9va3VwQ3RsUmM7CiAKICAgICBjYXNlIENPTFVNTl9MT09LVVBDVExST1dTVEFUVVM6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YoU3RvcmFnZVRtcC0+bG9va3VwQ3RsUm93U3RhdHVzKTsKLQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFJvd1N0YXR1czsKIAogICAgIGRlZmF1bHQ6CkBAIC00MzQsMjggKzQ1NSw2NyBAQAogfQogCiAKK3N0YXRpYyBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgKgorYWRkX3Jlc3VsdChzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqaXRlbSwgaW50IGluZGV4LAorICAgICAgICBpbnQgaWF0eXBlLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgZGF0YV9sZW4pCit7CisgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICp0ZW1wOworICAgIHRlbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOworICAgIGlmICh0ZW1wID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk91dCBvZiBtZW1vcnkgaW4gbnNsb29rdXAtbWliL3J1bl9sb29rdXBcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdGVtcC0+bG9va3VwUmVzdWx0c0luZGV4ID0gaW5kZXg7CisgICAgdGVtcC0+bmV4dCA9IE5VTEw7CisKKyAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0gbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKKyAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi9ydW5fbG9va3VwXG4iKTsKKyAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7CisgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9ICdcMCc7CisgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9IGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47CisKKyAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0gbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKKyAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi9ydW5fbG9va3VwXG4iKTsKKyAgICAgICAgZnJlZSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4KTsKKyAgICAgICAgZnJlZSh0ZW1wKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAorICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7CisgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9ICdcMCc7CisgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9IGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47CisKKyAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSBpYXR5cGU7CisgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPSBtYWxsb2MoZGF0YV9sZW4gKyAxKTsKKyAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsIGRhdGEsIGRhdGFfbGVuKTsKKyAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tkYXRhX2xlbl0gPSAnXDAnOworICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0gZGF0YV9sZW47CisgICAgaWYgKCFpdGVtLT5SZXN1bHRzVGFibGUpCisgICAgICAgIGl0ZW0tPlJlc3VsdHNUYWJsZSA9IHRlbXA7CisKKyAgICByZXR1cm4gdGVtcDsKK30KKwogdm9pZAogcnVuX2xvb2t1cChzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqaXRlbSkKIHsKLQogICAgIGxvbmcgICAgICAgICAgICBhZGRyZXNzVHlwZTsKICAgICBjaGFyICAgICAgICAgICAqYWRkcmVzcyA9IE5VTEw7CiAgICAgc2l6ZV90ICAgICAgICAgIGFkZHJlc3NsZW47CiAgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICpjdXJyZW50ID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgKnRlbXAgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBpID0gMCwgbiA9IDEsIHQgPSAwOwotCi0gICAgLyogZm9yIGlwdjQsaXB2NiAqLwotICAgIHVuc2lnbmVkIGludCAgICBhZGRyX2luLCBhZGRyX2luNjsKLSAgICBzdHJ1Y3QgaG9zdGVudCAqbG9va3VwID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgaSA9IDAsIG4gPSAxOwogCiAgICAgc3RydWN0IHRpbWV2YWwgIHRwc3RhcnQsIHRwZW5kOwotICAgIHVuc2lnbmVkIGxvbmcgICB0aW1ldXNlLCB0aW1ldXNlNCwgdGltZXVzZTY7Ci0KLSAgICAvKiBmb3IgZG5zICovCi0KLSAgICBzdHJ1Y3QgaW5fYWRkciAgYTsKLSAgICBzdHJ1Y3QgaW42X2FkZHIgYTY7CisgICAgdW5zaWduZWQgbG9uZyAgIHRpbWV1c2UsIHRpbWV1c2U0ID0gMCwgdGltZXVzZTYgPSAwOwogCiAgICAgaWYgKGl0ZW0gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwpAQCAtNDY2LDQ1NCArNTI2LDI3NSBAQAogICAgIG1lbWNweShhZGRyZXNzLCBpdGVtLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzLCBhZGRyZXNzbGVuICsgMSk7CiAgICAgYWRkcmVzc1thZGRyZXNzbGVuXSA9ICdcMCc7CiAKLSAgICBpZiAoYWRkcmVzc1R5cGUgPT0gMSkgewotICAgICAgICBhZGRyX2luID0gaW5ldF9hZGRyKGFkZHJlc3MpOwotICAgICAgICBpZiAoYWRkcl9pbiA9PSAweGZmZmZmZmZmCi0gICAgICAgICAgICAmJiBzdHJjbXAoYWRkcmVzcywgIjI1NS4yNTUuMjU1LjI1NSIpICE9IDApIHsKKyAgICBpZiAoYWRkcmVzc1R5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjQpIHsKKyAgICAgICAgc3RydWN0IGluX2FkZHIgYWRkcl9pbjsKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKmxvb2t1cDsKKworICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIGFkZHJlc3MsICZhZGRyX2luKSAhPSAxKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwUmVzdWx0c1RhYmxlIiwgIkludmFsaWQgYXJndW1lbnQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDk5KTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHBzdGFydCwgTlVMTCk7Ci0gICAgICAgIGxvb2t1cCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikgJmFkZHJfaW4sIDQsIEFGX0lORVQpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKCZhZGRyX2luLCBzaXplb2YoYWRkcl9pbiksIEFGX0lORVQpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKICAgICAgICAgdGltZXVzZSA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKICAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7CiAgICAgICAgIHRpbWV1c2UgLz0gMTAwMDsKICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFRpbWUoaXRlbSwgdGltZXVzZSk7Ci0gICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNsKTsKKyAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoaXRlbSwgM0wpOwogCiAgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYSBuZXR3b3JrIGhvc3QgZW50cnkgZm9yIGlwdjQgYWRkcmVzczogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzKSk7Ci0gICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMWwpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIGhfZXJybm8pOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDBsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwTCk7CiAgICAgICAgICAgICBpZiAobG9va3VwLT5oX25hbWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wID0KLSAgICAgICAgICAgICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzVHlwZSA9IDE2OwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHN0cmxlbihsb29rdXAtPmhfbmFtZSkgKyAxKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MsIGxvb2t1cC0+aF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4obG9va3VwLT5oX25hbWUpICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3Nbc3RybGVuKGxvb2t1cC0+aF9uYW1lKV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0gc3RybGVuKGxvb2t1cC0+aF9uYW1lKTsKLSAgICAgICAgICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wID0gYWRkX3Jlc3VsdChpdGVtLCBuLCBJTkVUQUREUkVTU1RZUEVfRE5TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC0+aF9uYW1lLCBzdHJsZW4obG9va3VwLT5oX25hbWUpKTsKICAgICAgICAgICAgICAgICBuID0gbiArIDE7Ci0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAgICB3aGlsZSAobG9va3VwLT5oX2FsaWFzZXNbaV0pIHsKLSAgICAgICAgICAgICAgICB0ZW1wID0gU05NUF9NQUxMT0NfU1RSVUNUKGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2MoaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXgsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4W2l0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4TGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2MoaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lW2l0ZW0tPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0luZGV4ID0gbjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSAxNjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pICsgMSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzLCBsb29rdXAtPmhfYWxpYXNlc1tpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSldID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9Ci0gICAgICAgICAgICAgICAgICAgIHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSk7CisgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0ROUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAtPmhfYWxpYXNlc1tpXSwgc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSk7CiAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgaSA9IGkgKyAxOwogICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSBOVUxMOwotCiAgICAgICAgIH0KIAotCiAgICAgICAgIGlmIChpdGVtLT5SZXN1bHRzVGFibGUgIT0gTlVMTCkKICAgICAgICAgICAgIGlmIChsb29rdXBSZXN1bHRzVGFibGVfYWRkKGl0ZW0pICE9IFNOTVBFUlJfU1VDQ0VTUykKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwUmVzdWx0c1RhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCBhbiBlbnRyeSBlcnJvclxuIikpOwotCiAgICAgICAgIFNOTVBfRlJFRShhZGRyZXNzKTsKLSAgICAgICAgYWRkcmVzcyA9IE5VTEw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSAxNikgeworICAgIGVsc2UgaWYgKGFkZHJlc3NUeXBlID09IElORVRBRERSRVNTVFlQRV9ETlMpIHsKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKmxvb2t1cDsKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgICAgIGludCAgICAgICAgICAgICByZXM7CisgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqYWlzOworICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludHMgPSB7IDAsIEFGX0lORVQ2LCBTT0NLX0RHUkFNIH07CisjZW5kaWYKIAotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwc3RhcnQsIE5VTEwpOwotICAgICAgICBsb29rdXAgPSBnZXRob3N0YnluYW1lKGFkZHJlc3MpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gbmV0c25tcF9nZXRob3N0YnluYW1lKGFkZHJlc3MpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKICAgICAgICAgdGltZXVzZTQgPSAxMDAwMDAwICogKHRwZW5kLnR2X3NlYyAtIHRwc3RhcnQudHZfc2VjKSArCiAgICAgICAgICAgICB0cGVuZC50dl91c2VjIC0gdHBzdGFydC50dl91c2VjOwotICAgICAgICB0aW1ldXNlNCAvPSAxMDAwOwogICAgICAgICBpZiAobG9va3VwID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IGEgbmV0d29yayBob3N0IGVudHJ5IGZvciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlICgqbG9va3VwLT5oX2FkZHJfbGlzdCkgewotICAgICAgICAgICAgICAgIGJjb3B5KCpsb29rdXAtPmhfYWRkcl9saXN0KyssIChjaGFyICopICZhLCBzaXplb2YoYSkpOworICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hZGRyX2xpc3RbaV0pIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICAgICAgICAgICAgaW50IGJ1ZmxlbjsKIAotICAgICAgICAgICAgICAgIHRlbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QobG9va3VwUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICBpbmV0X250b3AobG9va3VwLT5oX2FkZHJ0eXBlLCBsb29rdXAtPmhfYWRkcl9saXN0W2ldLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvb2t1cC0+aF9hZGRydHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjQsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjYsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5zbG9va3VwLW1pYi9ydW5fbG9va3VwOiBVbmtub3duIGFkZHJlc3MgdHlwZSAlZFxuIiwgbG9va3VwLT5oX2FkZHJ0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX1VOS05PV04sICIiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgIkFkZGluZyAlZCAlc1xuIiwgbiwgYnVmKSk7CiAKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lW2l0ZW0tPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gMTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4oaW5ldF9udG9hKGEpKSArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywgaW5ldF9udG9hKGEpLAotICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oaW5ldF9udG9hKGEpKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihpbmV0X250b2EoYSkpXSA9ICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NMZW4gPSBzdHJsZW4oaW5ldF9udG9hKGEpKTsKICAgICAgICAgICAgICAgICBpZiAobiA9PSAxKQogICAgICAgICAgICAgICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCisgICAgICAgICAgICAgICAgaSA9IGkgKyAxOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IE5VTEw7Ci0gICAgICAgICAgICB0ID0gbjsKLQogICAgICAgICB9CiAKLSAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhwOwotICAgICAgICBjaGFyICAgICAgICAgICAgcGFbNjRdOwotICAgICAgICBjaGFyICAgICAgICAgICAqaG9zdG5hbWUgPSBOVUxMOwotCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHBzdGFydCwgTlVMTCk7Ci0gICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZTIoYWRkcmVzcywgQUZfSU5FVDYpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBzdGFydCk7CisgICAgICAgIHJlcyA9IG5ldHNubXBfZ2V0YWRkcmluZm8oYWRkcmVzcywgTlVMTCwgJmhpbnRzLCAmYWlzKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cGVuZCk7CiAgICAgICAgIHRpbWV1c2U2ID0gMTAwMDAwMCAqICh0cGVuZC50dl9zZWMgLSB0cHN0YXJ0LnR2X3NlYykgKwogICAgICAgICAgICAgdHBlbmQudHZfdXNlYyAtIHRwc3RhcnQudHZfdXNlYzsKLSAgICAgICAgdGltZXVzZTYgLz0gMTAwMDsKIAotICAgICAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICBpZiAocmVzICE9IDApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiQ2FuJ3QgZ2V0IGEgaXB2NiBuZXR3b3JrIGhvc3QgZW50cnkgZm9yICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOworICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIHJlcyk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICB3aGlsZSAoKmhwLT5oX2FkZHJfbGlzdCkgewotICAgICAgICAgICAgICAgIG1lbW1vdmUoKGNhZGRyX3QpICYgYTYsICpocC0+aF9hZGRyX2xpc3QrKywgMTYpOwotICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gKGNoYXIgKikgaHAtPmhfbmFtZTsKKyAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqYWlwID0gYWlzOworICAgICAgICAgICAgd2hpbGUgKGFpcCkgeworICAgICAgICAgICAgICAgIGNoYXIgYnVmWzY0XTsKKyAgICAgICAgICAgICAgICBpbnQgYnVmbGVuOwogCi0gICAgICAgICAgICAgICAgdGVtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIHN3aXRjaCAoYWlwLT5haV9mYW1pbHkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChhaXAtPmFpX2ZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKilhaXAtPmFpX2FkZHIpLT5zaW5fYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgICAgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjQsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKGFpcC0+YWlfZmFtaWx5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhaXAtPmFpX2FkZHIpLT5zaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICAgICAgYnVmbGVuID0gc3RybGVuKGJ1Zik7CisgICAgICAgICAgICAgICAgICAgIHRlbXAgPSBhZGRfcmVzdWx0KGl0ZW0sIG4sIElORVRBRERSRVNTVFlQRV9JUFY2LCBidWYsIGJ1Zmxlbik7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuc2xvb2t1cC1taWIvcnVuX2xvb2t1cDogVW5rbm93biBhZGRyZXNzIHR5cGUgJWRcbiIsIGFpcC0+YWlfZmFtaWx5KTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX1VOS05PV04sICIiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgIkFkZGluZyAlZCAlc1xuIiwgbiwgYnVmKSk7CiAKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzVHlwZSA9IDI7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKQotICAgICAgICAgICAgICAgICAgICBtYWxsb2Moc3RybGVuKGluZXRfbnRvcChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpKSArIDEpOwotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywKLSAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYTYsIHBhLCA2NCksCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihpbmV0X250b3AoQUZfSU5FVDYsICZhNiwgcGEsIDY0KSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT4KLSAgICAgICAgICAgICAgICAgICAgbG9va3VwUmVzdWx0c0FkZHJlc3Nbc3RybGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbmV0X250b3AKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpKV0gPSAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzTGVuID0KLSAgICAgICAgICAgICAgICAgICAgc3RybGVuKGluZXRfbnRvcChBRl9JTkVUNiwgJmE2LCBwYSwgNjQpKTsKICAgICAgICAgICAgICAgICBpZiAobiA9PSAxKQogICAgICAgICAgICAgICAgICAgICBpdGVtLT5SZXN1bHRzVGFibGUgPSB0ZW1wOwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgY3VycmVudCA9IHRlbXA7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCisgICAgICAgICAgICAgICAgYWlwID0gYWlwLT5haV9uZXh0OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3VycmVudC0+bmV4dCA9IE5VTEw7CisgICAgICAgICAgICBmcmVlYWRkcmluZm8oYWlzKTsKICAgICAgICAgfQorI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FMgorICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwc3RhcnQpOworICAgICAgICBsb29rdXAgPSBnZXRob3N0YnluYW1lMihhZGRyZXNzLCBBRl9JTkVUNik7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHBlbmQpOworICAgICAgICB0aW1ldXNlNiA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKKyAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7CisKKyAgICAgICAgaWYgKGxvb2t1cCA9PSBOVUxMKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkNhbid0IGdldCBhIGlwdjYgbmV0d29yayBob3N0IGVudHJ5IGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJlc3MpKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGkgPSAwOworICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hZGRyX2xpc3RbaV0pIHsKKyAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07CisgICAgICAgICAgICAgICAgaW50IGJ1ZmxlbjsKKworICAgICAgICAgICAgICAgIGluZXRfbnRvcChsb29rdXAtPmhfYWRkcnR5cGUsIGxvb2t1cC0+aF9hZGRyX2xpc3RbaV0sCisgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgICAgICBidWZsZW4gPSBzdHJsZW4oYnVmKTsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGxvb2t1cC0+aF9hZGRydHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjQsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0lQVjYsIGJ1ZiwgYnVmbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5zbG9va3VwLW1pYi9ydW5fbG9va3VwOiBVbmtub3duIGFkZHJlc3MgdHlwZSAlZFxuIiwgbG9va3VwLT5oX2FkZHJ0eXBlKTsKKyAgICAgICAgICAgICAgICAgICAgdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX1VOS05PV04sICIiLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJBZGRpbmcgJWQgJXNcbiIsIG4sIGJ1ZikpOworCisgICAgICAgICAgICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGN1cnJlbnQtPm5leHQgPSB0ZW1wOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wOworICAgICAgICAgICAgICAgIG4gPSBuICsgMTsKKyAgICAgICAgICAgICAgICBpID0gaSArIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCiAgICAgICAgIHRpbWV1c2UgPSB0aW1ldXNlNCArIHRpbWV1c2U2OworICAgICAgICB0aW1ldXNlIC89IDEwMDA7CiAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxUaW1lKGl0ZW0sIHRpbWV1c2UpOwotICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhpdGVtLCAzbCk7CisgICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNMKTsKIAogICAgICAgICBpZiAoaXRlbS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpIHsKLQotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDBsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwTCk7CiAgICAgICAgICAgICBpZiAobG9va3VwUmVzdWx0c1RhYmxlX2FkZChpdGVtKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAxbCk7CiAgICAgICAgIH0KICAgICAgICAgU05NUF9GUkVFKGFkZHJlc3MpOwotICAgICAgICBhZGRyZXNzID0gTlVMTDsKLQogICAgICAgICByZXR1cm47Ci0KICAgICB9CiAKKyAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNikgeworICAgICAgICBzdHJ1Y3QgaW42X2FkZHIgYWRkcl9pbjY7CisgICAgICAgIHN0cnVjdCBob3N0ZW50ICpsb29rdXA7CiAKLSAgICBlbHNlIGlmIChhZGRyZXNzVHlwZSA9PSAyKSB7CiAgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIGFkZHJlc3MsICZhZGRyX2luNikgPT0gMSkKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJsb29rdXBDdGxUYWJsZSIsICJzdWNjZXNzISBcbiIpKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwgImVycm9yISBcbiIpKTsKIAotCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHBzdGFydCwgTlVMTCk7Ci0gICAgICAgIGxvb2t1cCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikgJmFkZHJfaW42LCAxNiwgQUZfSU5FVDYpOwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRwZW5kLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0cHN0YXJ0KTsKKyAgICAgICAgbG9va3VwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKCZhZGRyX2luNiwgc2l6ZW9mKGFkZHJfaW42KSwgQUZfSU5FVDYpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRwZW5kKTsKICAgICAgICAgdGltZXVzZSA9IDEwMDAwMDAgKiAodHBlbmQudHZfc2VjIC0gdHBzdGFydC50dl9zZWMpICsKICAgICAgICAgICAgIHRwZW5kLnR2X3VzZWMgLSB0cHN0YXJ0LnR2X3VzZWM7CiAgICAgICAgIHRpbWV1c2UgLz0gMTAwMDsKICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFRpbWUoaXRlbSwgdGltZXVzZSk7Ci0gICAgICAgIG1vZGlmeV9sb29rdXBDdGxPcGVyU3RhdHVzKGl0ZW0sIDNsKTsKKyAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bE9wZXJTdGF0dXMoaXRlbSwgM0wpOwogCiAgICAgICAgIGlmIChsb29rdXAgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJDYW4ndCBnZXQgYSBuZXR3b3JrIGhvc3QgZW50cnkgZm9yICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcmVzcykpOwotICAgICAgICAgICAgbW9kaWZ5X2xvb2t1cEN0bFJjKGl0ZW0sIDFsKTsKKyAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCBoX2Vycm5vKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1vZGlmeV9sb29rdXBDdGxSYyhpdGVtLCAwbCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsUmMoaXRlbSwgMEwpOwogICAgICAgICAgICAgaWYgKGxvb2t1cC0+aF9uYW1lICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzSW5kZXggPSBuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXggPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleCwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhbaXRlbS0+bG9va3VwQ3RsT3duZXJJbmRleExlbl0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gPQotICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuOwotCi0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBtZW1jcHkodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVbaXRlbS0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1R5cGUgPSAxNjsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9Ci0gICAgICAgICAgICAgICAgICAgIChjaGFyICopIG1hbGxvYyhzdHJsZW4obG9va3VwLT5oX25hbWUpICsgMSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzLCBsb29rdXAtPmhfbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKGxvb2t1cC0+aF9uYW1lKSArIDEpOwotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNBZGRyZXNzW3N0cmxlbihsb29rdXAtPmhfbmFtZSldID0gJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc0xlbiA9IHN0cmxlbihsb29rdXAtPmhfbmFtZSk7Ci0gICAgICAgICAgICAgICAgaXRlbS0+UmVzdWx0c1RhYmxlID0gdGVtcDsKKyAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcCA9IGFkZF9yZXN1bHQoaXRlbSwgbiwgSU5FVEFERFJFU1NUWVBFX0ROUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb29rdXAtPmhfbmFtZSwgc3RybGVuKGxvb2t1cC0+aF9uYW1lKSk7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGkgPSAwOwogICAgICAgICAgICAgd2hpbGUgKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSB7Ci0gICAgICAgICAgICAgICAgdGVtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChsb29rdXBSZXN1bHRzVGFibGVfZGF0YSk7Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXAgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4ID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleFtpdGVtLT5sb29rdXBDdGxPd25lckluZGV4TGVuXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3duZXJJbmRleExlbiA9Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPmxvb2t1cEN0bE93bmVySW5kZXhMZW47Ci0KLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKGl0ZW0tPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4gKyAxKTsKLSAgICAgICAgICAgICAgICBpZiAodGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLAotICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuICsgMSk7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZVtpdGVtLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW5dID0KLSAgICAgICAgICAgICAgICAgICAgJ1wwJzsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuID0KLSAgICAgICAgICAgICAgICAgICAgaXRlbS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbjsKLQotICAgICAgICAgICAgICAgIHRlbXAtPmxvb2t1cFJlc3VsdHNJbmRleCA9IG47Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NUeXBlID0gMTY7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3MgPQotICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGxvb2t1cC0+aF9hbGlhc2VzW2ldKSArIDEpOwotICAgICAgICAgICAgICAgIGlmICh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbWNweSh0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzcywgbG9va3VwLT5oX2FsaWFzZXNbaV0sCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihsb29rdXAtPmhfYWxpYXNlc1tpXSkgKyAxKTsKLSAgICAgICAgICAgICAgICB0ZW1wLT5sb29rdXBSZXN1bHRzQWRkcmVzc1tzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pXSA9Ci0gICAgICAgICAgICAgICAgICAgICdcMCc7Ci0gICAgICAgICAgICAgICAgdGVtcC0+bG9va3VwUmVzdWx0c0FkZHJlc3NMZW4gPQotICAgICAgICAgICAgICAgICAgICBzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pOworICAgICAgICAgICAgICAgIGN1cnJlbnQgPSB0ZW1wID0gYWRkX3Jlc3VsdChpdGVtLCBuLCBJTkVUQUREUkVTU1RZUEVfRE5TLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvb2t1cC0+aF9hbGlhc2VzW2ldLCBzdHJsZW4obG9va3VwLT5oX2FsaWFzZXNbaV0pKTsKICAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gdGVtcDsKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gdGVtcDsKICAgICAgICAgICAgICAgICBpID0gaSArIDE7CiAgICAgICAgICAgICAgICAgbiA9IG4gKyAxOwotCiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGlmIChpdGVtLT5SZXN1bHRzVGFibGUgIT0gTlVMTCkKICAgICAgICAgICAgICAgICBjdXJyZW50LT5uZXh0ID0gTlVMTDsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBjdXJyZW50ID0gTlVMTDsKLQogICAgICAgICB9CiAKLQogICAgICAgICBpZiAoaXRlbS0+UmVzdWx0c1RhYmxlICE9IE5VTEwpCiAgICAgICAgICAgICBpZiAobG9va3VwUmVzdWx0c1RhYmxlX2FkZChpdGVtKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cFJlc3VsdHNUYWJsZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKICAgICAgICAgU05NUF9GUkVFKGFkZHJlc3MpOwotICAgICAgICBhZGRyZXNzID0gTlVMTDsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CiAgICAgICAgIFNOTVBfRlJFRShhZGRyZXNzKTsKLSAgICAgICAgYWRkcmVzcyA9IE5VTEw7CiAgICAgICAgIHJldHVybjsKICAgICB9CiB9CkBAIC05MjUsOCArODA2LDExIEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CiAKIAogICAgIGlmICgoU3RvcmFnZVRtcCA9CkBAIC05NTAsOCArODM0LDExIEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CiAKIAogICAgIGlmICgoU3RvcmFnZVRtcCA9CkBAIC05NzUsOCArODYyLDExIEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7ICAgICAvKiBsb29rdXBDdGxPcGVyYXRpb25OYW1lICovCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CiAKIAogICAgIGlmICgoU3RvcmFnZVRtcCA9CkBAIC0xMDAzLDkgKzg5MywxMiBAQAogICAgIG9pZCAgICAgICAgICAgICBuZXdvaWRbTUFYX09JRF9MRU5dOwogICAgIHNpemVfdCAgICAgICAgICBuZXdvaWRfbGVuOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7ICAgLyogbG9va3VwQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOyAgICAgLyogbG9va3VwQ3RsT3BlcmF0aW9uTmFtZSAqLwotICAgIGJ6ZXJvKG5ld29pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+bG9va3VwQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgKGNoYXIgKikgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSwKKyAgICAgICAgdGhlZGF0YS0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZUxlbik7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCiAKQEAgLTEwMzIsNiArOTI1LDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiB3cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTEwNjksMzIgKzk2MywyOCBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFJFU0VSVkUyOgogICAgICAgICAvKgogICAgICAgICAgKiBtZW1vcnkgcmVzZXZlcmF0aW9uLCBmaW5hbCBwcmVwYXJhdGlvbi4uLiAKICAgICAgICAgICovCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIEZSRUU6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJlbGVhc2UgYW55IHJlc291cmNlcyB0aGF0IGhhdmUgYmVlbiBhbGxvY2F0ZWQgCiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBBQ1RJT046CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZSB2YXJpYWJsZSBoYXMgYmVlbiBzdG9yZWQgaW4gb2JqaWQgZm9yCiAgICAgICAgICAqIHlvdSB0byB1c2UsIGFuZCB5b3UgaGF2ZSBqdXN0IGJlZW4gYXNrZWQgdG8gZG8gc29tZXRoaW5nIHdpdGgKLSAgICAgICAgICogaXQuICBOb3RlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIG11c3QgYmUgcmV2ZXJzYWJsZSBpbiB0aGUgVU5ETyBjYXNlIAorICAgICAgICAgKiBpdC4gIE5vdGUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgbXVzdCBiZSByZXZlcnNhYmxlIGluIHRoZSBVTkRPIGNhc2UKICAgICAgICAgICovCiAgICAgICAgIHRtcHZhciA9IFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlOwogICAgICAgICBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZSA9ICooKGxvbmcgKikgdmFyX3ZhbCk7CiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFVORE86CiAgICAgICAgIC8qCiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIApAQCAtMTEwMiwxMiArOTkyLDE1IEBACiAgICAgICAgIFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlID0gdG1wdmFyOwogICAgICAgICBicmVhazsKIAotCiAgICAgY2FzZSBDT01NSVQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTE1MCwzNyArMTA0MywzMiBAQAogICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIGxvb2t1cEN0bFRhcmdldEFkZHJlc3Mgbm90IEFTTl9PQ1RFVF9TVFJcbiIpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQotCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIFJFU0VSVkUyOgogICAgICAgICAvKgogICAgICAgICAgKiBtZW1vcnkgcmVzZXZlcmF0aW9uLCBmaW5hbCBwcmVwYXJhdGlvbi4uLiAKICAgICAgICAgICovCi0KICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgRlJFRToKICAgICAgICAgLyoKICAgICAgICAgICogUmVsZWFzZSBhbnkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCAKICAgICAgICAgICovCi0KICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgQUNUSU9OOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgdmFyaWFibGUgaGFzIGJlZW4gc3RvcmVkIGluIGxvbmdfcmV0IGZvcgogICAgICAgICAgKiB5b3UgdG8gdXNlLCBhbmQgeW91IGhhdmUganVzdCBiZWVuIGFza2VkIHRvIGRvIHNvbWV0aGluZyB3aXRoCi0gICAgICAgICAqIGl0LiAgTm90ZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBtdXN0IGJlIHJldmVyc2FibGUgaW4gdGhlIFVORE8gY2FzZSAKKyAgICAgICAgICogaXQuICBOb3RlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIG11c3QgYmUgcmV2ZXJzYWJsZSBpbiB0aGUgVU5ETyBjYXNlCiAgICAgICAgICAqLwogICAgICAgICB0bXB2YXIgPSBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzOwogICAgICAgICB0bXBsZW4gPSBTdG9yYWdlVG1wLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzTGVuOwogCiAgICAgICAgIGlmICgoU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzcyA9CiAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHZhcl92YWxfbGVuICsgMSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJPdXQgb2YgbWVtb3J5IGluIG5zbG9va3VwLW1pYi93cml0ZV9sb29rdXBDdGxUYXJnZXRBZGRyZXNzXG4iKTsKICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgIH0KICAgICAgICAgbWVtY3B5KFN0b3JhZ2VUbXAtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3MsIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKQEAgLTExODksNyArMTA3Nyw2IEBACiAKICAgICAgICAgYnJlYWs7CiAKLQogICAgIGNhc2UgVU5ETzoKICAgICAgICAgLyoKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCkBAIC0xMjAxLDcgKzEwODgsNiBAQAogCiAgICAgICAgIGJyZWFrOwogCi0KICAgICBjYXNlIENPTU1JVDoKICAgICAgICAgLyoKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCkBAIC0xMjExLDYgKzEwOTcsOSBAQAogICAgICAgICBmcmVlKHRtcHZhcik7CiAgICAgICAgIHRtcHZhciA9IE5VTEw7CiAKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTIxOCw5ICsxMTA3LDYgQEAKIAogCiAKLQotCi0KIGludAogd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTEyMjksNyArMTExNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKICAgICBzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7Ci0gICAgc3RhdGljIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlTmV3LCAqU3RvcmFnZURlbCA9IE5VTEw7CisgICAgc3RhdGljIHN0cnVjdCBsb29rdXBUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTCwgKlN0b3JhZ2VEZWwgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICBuZXdsZW4gPQogICAgICAgICBuYW1lX2xlbiAtIChzaXplb2YobG9va3VwQ3RsVGFibGVfdmFyaWFibGVzX29pZCkgLyBzaXplb2Yob2lkKSArCiAgICAgICAgICAgICAgICAgICAgIDMgLSAxKTsKQEAgLTEyNzYsNyArMTE2Miw2IEBACiAgICAgICAgICAgICAgKiBkaXRjaCBpbGxlZ2FsIHZhbHVlcyBub3cgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmIChzZXRfdmFsdWUgPT0gUlNfQUNUSVZFIHx8IHNldF92YWx1ZSA9PSBSU19OT1RJTlNFUlZJQ0UpIHsKLQogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKICAgICAgICAgICAgIH0KIApAQCAtMTM3OCw3ICsxMjYzLDcgQEAKICAgICAgICAgICAgICAqIFhYWDogZmlsbCBpbiBkZWZhdWx0IHJvdyB2YWx1ZXMgaGVyZSBpbnRvIFN0b3JhZ2VOZXcgCiAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgU3RvcmFnZU5ldy0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPSAxOyAvKiBpcHY0ICovCisgICAgICAgICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OwogCiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5sb29rdXBDdGxSb3dTdGF0dXMgPSBzZXRfdmFsdWU7CiAKQEAgLTEzODksMTMgKzEyNzQsOCBAQAogICAgICAgICAgICAgICogWFhYOiBmcmVlLCB6ZXJvIHZhcnMsIG5vIGxvbmdlciBuZWVkZWQ/IAogICAgICAgICAgICAgICovCiAgICAgICAgIH0KLQotCiAgICAgICAgIGJyZWFrOwogCi0KLQotCiAgICAgY2FzZSBGUkVFOgogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IGZyZWUsIHplcm8gdmFycyAKQEAgLTE0MDUsOSArMTI4NSw2IEBACiAgICAgICAgICAqLwogICAgICAgICBicmVhazsKIAotCi0KLQogICAgIGNhc2UgQUNUSU9OOgogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgdmFyaWFibGUgaGFzIGJlZW4gc3RvcmVkIGluIHNldF92YWx1ZSBmb3IgeW91IHRvCkBAIC0xNDE1LDggKzEyOTIsNiBAQAogICAgICAgICAgKiBpdC4gIE5vdGUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgbXVzdCBiZSByZXZlcnNhYmxlIGluCiAgICAgICAgICAqIHRoZSBVTkRPIGNhc2UgCiAgICAgICAgICAqLwotCi0KICAgICAgICAgaWYgKFN0b3JhZ2VUbXAgPT0gTlVMTCkgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHJvdyBjcmVhdGlvbiwgc28gYWRkIGl0IApAQCAtMTQyNSwxMSArMTMwMCw5IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldyAhPSBOVUxMKQotI2lmIDEKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibG9va3VwQ3RsVGFibGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZV9sb29rdXBDdGxSb3dTdGF0dXMgZW50ZXJpbmcgbmV3PSVkLi4uICBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0aW9uKSk7Ci0jZW5kaWYKICAgICAgICAgICAgIGxvb2t1cEN0bFRhYmxlX2FkZChTdG9yYWdlTmV3KTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBYWFg6IGFjaywgYW5kIGlmIGl0IGlzIE5VTEw/IApAQCAtMTQ2MSw5ICsxMzM0LDYgQEAKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotCi0KLQogICAgIGNhc2UgVU5ETzoKICAgICAgICAgLyoKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCkBAIC0xNDk1LDkgKzEzNjUsNiBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0KLQotCiAgICAgY2FzZSBDT01NSVQ6CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQpAQCAtMTUxMSwxNSArMTM3OCw5IEBACiAKICAgICAgICAgaWYgKFN0b3JhZ2VEZWwgIT0gTlVMTCkgewogICAgICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VEZWwtPmxvb2t1cEN0bE93bmVySW5kZXgpOwotICAgICAgICAgICAgU3RvcmFnZURlbC0+bG9va3VwQ3RsT3duZXJJbmRleCA9IE5VTEw7CiAgICAgICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+bG9va3VwQ3RsT3BlcmF0aW9uTmFtZSk7Ci0gICAgICAgICAgICBTdG9yYWdlRGVsLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lID0gTlVMTDsKICAgICAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5sb29rdXBDdGxUYXJnZXRBZGRyZXNzKTsKLSAgICAgICAgICAgIFN0b3JhZ2VEZWwtPmxvb2t1cEN0bFRhcmdldEFkZHJlc3MgPSBOVUxMOwogICAgICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VEZWwpOwotICAgICAgICAgICAgU3RvcmFnZURlbCA9IE5VTEw7Ci0KLSAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSAwOwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFhYWDogZnJlZSBpdCwgaXRzIGRlYWQgCiAgICAgICAgICAgICAgKi8KQEAgLTE1MzUsMTggKzEzOTYsMjAgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAoU3RvcmFnZVRtcCAmJiBTdG9yYWdlVG1wLT5sb29rdXBDdGxSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB7Ci0jaWYgMQogICAgICAgICAgICAgREVCVUdNU0dUTCgoImxvb2t1cEN0bFRhYmxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZV9sb29rdXBDdGxSb3dTdGF0dXMgZW50ZXJpbmcgcnVuYmVmb3JlPSVsZC4uLiAgXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+bG9va3VwQ3RsVGFyZ2V0QWRkcmVzc1R5cGUpKTsKIAotI2VuZGlmCi0gICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhTdG9yYWdlVG1wLCAybCk7CisgICAgICAgICAgICBtb2RpZnlfbG9va3VwQ3RsT3BlclN0YXR1cyhTdG9yYWdlVG1wLCAyTCk7CiAgICAgICAgICAgICBydW5fbG9va3VwKChzdHJ1Y3QgbG9va3VwVGFibGVfZGF0YSAqKSBTdG9yYWdlVG1wKTsKIAogICAgICAgICB9CiAKKyAgICAgICAgLyoqIHNldCB1cCB0byBzYXZlIHBlcnNpc3RlbnQgc3RvcmUgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CisKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBDdGxUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgKaW5kZXggZjczYjA2Mi4uMDg1YjI1YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cEN0bFRhYmxlLmgKQEAgLTI0LDkgKzI0LDggQEAKICAgICAvKgogICAgICAqIG91ciBzdG9yYWdlIHN0cnVjdHVyZShzKSAKICAgICAgKi8KKwogc3RydWN0IGxvb2t1cFRhYmxlX2RhdGEgewotCi0KICAgICBjaGFyICAgICAgICAgICAqbG9va3VwQ3RsT3duZXJJbmRleDsgICAgICAgIC8qIHN0cmluZyAqLwogICAgIHNpemVfdCAgICAgICAgICBsb29rdXBDdGxPd25lckluZGV4TGVuOwogICAgIGNoYXIgICAgICAgICAgICpsb29rdXBDdGxPcGVyYXRpb25OYW1lOyAgICAgLyogc3RyaW5nICovCkBAIC00MSwxMCArNDAsMTAgQEAKICAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZXR5cGU7CiAKICAgICBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgKlJlc3VsdHNUYWJsZTsKLQotCiB9OwotdHlwZWRlZiBzdHJ1Y3QgbG9va3VwUmVzdWx0c1RhYmxlX2RhdGEgeworCisKK3N0cnVjdCBsb29rdXBSZXN1bHRzVGFibGVfZGF0YSB7CiAgICAgc3RydWN0IGxvb2t1cFJlc3VsdHNUYWJsZV9kYXRhICpuZXh0OwogICAgIGNoYXIgICAgICAgICAgICpsb29rdXBDdGxPd25lckluZGV4OyAgICAgICAgLyogc3RyaW5nICovCiAgICAgc2l6ZV90ICAgICAgICAgIGxvb2t1cEN0bE93bmVySW5kZXhMZW47CkBAIC01NSw3ICs1NCw3IEBACiAgICAgY2hhciAgICAgICAgICAgKmxvb2t1cFJlc3VsdHNBZGRyZXNzOwogICAgIHNpemVfdCAgICAgICAgICBsb29rdXBSZXN1bHRzQWRkcmVzc0xlbjsKICAgICBpbnQgICAgICAgICAgICAgc3RvcmFnZXR5cGU7Ci19IHJlc3VsdHNJbnM7Cit9OwogCiAvKgogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIApAQCAtNjUsMjMgKzY0LDI0IEBACiB2b2lkICAgICAgICAgICAgcGFyc2VfbG9va3VwQ3RsVGFibGUoY29uc3QgY2hhciAqLCBjaGFyICopOwogU05NUENhbGxiYWNrICAgIHN0b3JlX2xvb2t1cEN0bFRhYmxlOwogCi0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogV3JpdGVNZXRob2QgICAgIHdyaXRlX2xvb2t1cEN0bFRhcmdldEFkZHJlc3NUeXBlOwogV3JpdGVNZXRob2QgICAgIHdyaXRlX2xvb2t1cEN0bFRhcmdldEFkZHJlc3M7CiBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzOwogCiBXcml0ZU1ldGhvZCAgICAgd3JpdGVfbG9va3VwQ3RsUm93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGxvb2t1cEN0bFRhYmxlIAogICovCiAjZGVmaW5lIENPTFVNTl9MT09LVVBDVExPV05FUklOREVYCQkxCiAjZGVmaW5lIENPTFVNTl9MT09LVVBDVExPUEVSQVRJT05OQU1FCQkyCi0jZGVmaW5lIENPTFVNTl9MT09LVVBDVExUQVJHRVRBRERSRVNTVFlQRQkJMworI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTU1RZUEUJMwogI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVEFSR0VUQUREUkVTUwkJNAogI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMT1BFUlNUQVRVUwkJNQotI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMVElNRQkJNgotI2RlZmluZSBDT0xVTU5fTE9PS1VQQ1RMUkMJCTcKKyNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFRJTUUJCQk2CisjZGVmaW5lIENPTFVNTl9MT09LVVBDVExSQwkJCTcKICNkZWZpbmUgQ09MVU1OX0xPT0tVUENUTFJPV1NUQVRVUwkJOAogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExPT0tVUE1JQl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vbnNsb29rdXAvbG9va3VwUmVzdWx0c1RhYmxlLmMKaW5kZXggYzVmZDJiNy4uZDZhOTM3YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL25zbG9va3VwL2xvb2t1cFJlc3VsdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9uc2xvb2t1cC9sb29rdXBSZXN1bHRzVGFibGUuYwpAQCAtMTQsMjAgKzE0LDYgQEAKIC8qCiAgKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgZmlyc3QgYmVmb3JlIGFueXRoaW5nIGVsc2UgCiAgKi8KLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTElNSVRTX0gKLSNpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbmRpZgotCi0KLQogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KQEAgLTQyLDggKzI4LDEwIEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MiwgMSwgNCB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIGxvb2t1cFJlc3VsdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX0xPT0tVUFJFU1VMVFNBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9va3VwUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAotICAgIHtDT0xVTU5fTE9PS1VQUkVTVUxUU0FERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sb29rdXBSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0KKyAgICB7Q09MVU1OX0xPT0tVUFJFU1VMVFNBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG9va3VwUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAorICAgIHtDT0xVTU5fTE9PS1VQUkVTVUxUU0FERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sb29rdXBSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0KIH07CiAKIC8qCkBAIC0yMzcsOSArMjI1LDE1IEBACiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzX2xpc3QgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4LCB0aGVkYXRhLT5sb29rdXBDdGxPd25lckluZGV4TGVuKTsgICAgICAvKiBsb29rdXBDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lLCB0aGVkYXRhLT5sb29rdXBDdGxPcGVyYXRpb25OYW1lTGVuKTsgICAgICAgIC8qIGxvb2t1cEN0bE9wZXJhdGlvbk5hbWUgKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJnRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCwgc2l6ZW9mKHRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCkpOyAgIC8qIGxvb2t1cFJlc3VsdHNJbmRleCAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAJCShjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXgsCisJCXRoZWRhdGEtPmxvb2t1cEN0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAJCShjaGFyICopIHRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWUsCisJCXRoZWRhdGEtPmxvb2t1cEN0bE9wZXJhdGlvbk5hbWVMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELAorICAgIAkJKGNoYXIgKikgJnRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCwKKwkJc2l6ZW9mKHRoZWRhdGEtPmxvb2t1cFJlc3VsdHNJbmRleCkpOwogCiAgICAgLyoKICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ0N0bFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYwppbmRleCAxZTEwMmEwLi44N2IwOWVmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuYwpAQCAtNTUsNiArNTUsNyBAQAogc3RhdGljIF9faW5saW5lX18gaW50IGlwdjZfYWRkcl9hbnkoc3RydWN0IGluNl9hZGRyICopOwogc3RhdGljIGNoYXIgICAgKnByX2FkZHIoc3RydWN0IGluNl9hZGRyICosIGludCk7CiBzdGF0aWMgY2hhciAgICAqcHJfYWRkcl9uKHN0cnVjdCBpbjZfYWRkciAqKTsKK3ZvaWQgcGluZ0N0bFRhYmxlX2NsZWFuZXIoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICp0aGVzdHVmZik7CiAKIC8qCiAgKnBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkOgpAQCAtNjQsNiArNjUsNyBAQAogCiBvaWQgICAgICAgICAgICAgcGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWRbXSA9CiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MCwgMSwgMiB9Oworc3RhdGljIGNvbnN0IGludCBwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZF9sZW4gPSBzaXplb2YocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWQpL3NpemVvZihwaW5nQ3RsVGFibGVfdmFyaWFibGVzX29pZFswXSk7CiAKIC8qIHRyYXAgKi8KIG9pZCAgICAgICAgICAgICBwaW5nUHJvYmVGYWlsZWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgODAsIDAsIDEgfTsKQEAgLTc1LDI3ICs3Nyw0OCBAQAogICAgIC8qCiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KLSAgICB7Q09MVU1OX1BJTkdDVExUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUQVJHRVRBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDR9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExEQVRBU0laRSwgICAgICAgICBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fUElOR0NUTFRJTUVPVVQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMUFJPQkVDT1VOVCwgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDd9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExBRE1JTlNUQVRVUywgICAgICAgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDh9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExEQVRBRklMTCwgICAgICAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDl9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExGUkVRVUVOQ1ksICAgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEwfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMTUFYUk9XUywgICAgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxMX19LAotICAgIHtDT0xVTU5fUElOR0NUTFNUT1JBR0VUWVBFLCAgICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTJ9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUUkFQR0VORVJBVElPTiwgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEzfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMVFJBUFBST0JFRkFJTFVSRUZJTFRFUiwgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxNH19LAotICAgIHtDT0xVTU5fUElOR0NUTFRSQVBURVNURkFJTFVSRUZJTFRFUiwgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTV9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExUWVBFLCAgICAgICAgICAgIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE2fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMREVTQ1IsICAgICAgICAgICBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxN319LAotICAgIHtDT0xVTU5fUElOR0NUTFNPVVJDRUFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTh9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExTT1VSQ0VBRERSRVNTLCAgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE5fX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMSUZJTkRFWCwgICAgICAgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyMH19LAotICAgIHtDT0xVTU5fUElOR0NUTEJZUEFTU1JPVVRFVEFCTEUsICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjF9fSwKLSAgICB7Q09MVU1OX1BJTkdDVExEU0ZJRUxELCAgICAgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIyfX0sCi0gICAge0NPTFVNTl9QSU5HQ1RMUk9XU1RBVFVTLCAgICAgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyM319CisgICAge0NPTFVNTl9QSU5HQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMREFUQVNJWkUsICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExUSU1FT1VULCAgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDT0xVTU5fUElOR0NUTFBST0JFQ09VTlQsICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMQURNSU5TVEFUVVMsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMREFUQUZJTEwsICAgICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCA5fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMRlJFUVVFTkNZLCAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxMH19LAorICAgIHtDT0xVTU5fUElOR0NUTE1BWFJPV1MsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTF9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExTVE9SQUdFVFlQRSwgICAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDEyfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVFJBUEdFTkVSQVRJT04sICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxM319LAorICAgIHtDT0xVTU5fUElOR0NUTFRSQVBQUk9CRUZBSUxVUkVGSUxURVIsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTR9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExUUkFQVEVTVEZBSUxVUkVGSUxURVIsICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE1fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMVFlQRSwgICAgICAgICAgICBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxNn19LAorICAgIHtDT0xVTU5fUElOR0NUTERFU0NSLCAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMTd9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExTT1VSQ0VBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDE4fX0sCisgICAge0NPTFVNTl9QSU5HQ1RMU09VUkNFQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAxOX19LAorICAgIHtDT0xVTU5fUElOR0NUTElGSU5ERVgsICAgICAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjB9fSwKKyAgICB7Q09MVU1OX1BJTkdDVExCWVBBU1NST1VURVRBQkxFLCAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3BpbmdDdGxUYWJsZSwgMiwgezEsIDIxfX0sCisgICAge0NPTFVNTl9QSU5HQ1RMRFNGSUVMRCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9waW5nQ3RsVGFibGUsIDIsIHsxLCAyMn19LAorICAgIHtDT0xVTU5fUElOR0NUTFJPV1NUQVRVUywgICAgICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcGluZ0N0bFRhYmxlLCAyLCB7MSwgMjN9fQogfTsKIAogCkBAIC0xMzYsMTQgKzE1OSwyNCBAQAogICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiZG9uZS5cbiIpKTsKIH0KIAordm9pZCBzaHV0ZG93bl9waW5nQ3RsVGFibGUodm9pZCkKK3sKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX3BpbmdDdGxUYWJsZSwgTlVMTCwgMSk7CisgICAgc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigicGluZ0N0bFRhYmxlIik7CisgICAgdW5yZWdpc3Rlcl9taWIocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWQsIHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkX2xlbik7CisgICAgcGluZ0N0bFRhYmxlX2NsZWFuZXIocGluZ0N0bFRhYmxlU3RvcmFnZSk7CisgICAgcGluZ0N0bFRhYmxlU3RvcmFnZSA9IE5VTEw7Cit9CisKIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqCiBjcmVhdGVfcGluZ0N0bFRhYmxlX2RhdGEodm9pZCkKIHsKICAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VOZXcgPSBOVUxMOworCiAgICAgU3RvcmFnZU5ldyA9IFNOTVBfTUFMTE9DX1NUUlVDVChwaW5nQ3RsVGFibGVfZGF0YSk7Ci0gICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkgewotICAgICAgICBleGl0KDEpOwotICAgIH0KKyAgICBpZiAoU3RvcmFnZU5ldyA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPSAxOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUYXJnZXRBZGRyZXNzID0gc3RyZHVwKCIiKTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVGFyZ2V0QWRkcmVzc0xlbiA9IDA7CkBAIC0xNTEsMTkgKzE4NCwxNyBAQAogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUaW1lT3V0ID0gMzsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsUHJvYmVDb3VudCA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bEFkbWluU3RhdHVzID0gMjsKLSAgICBTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKCIwMCIpICsgMSk7CisgICAgU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsID0gc3RyZHVwKCIwMCIpOwogICAgIGlmIChTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwgPT0gTlVMTCkgewotICAgICAgICBleGl0KDEpOworICAgICAgICBmcmVlKFN0b3JhZ2VOZXcpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgbWVtY3B5KFN0b3JhZ2VOZXctPnBpbmdDdGxEYXRhRmlsbCwgIjAwIiwgc3RybGVuKCIwMCIpICsgMSk7Ci0gICAgU3RvcmFnZU5ldy0+cGluZ0N0bERhdGFGaWxsW3N0cmxlbigiMDAiKV0gPSAnXDAnOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxEYXRhRmlsbExlbiA9IHN0cmxlbihTdG9yYWdlTmV3LT5waW5nQ3RsRGF0YUZpbGwpOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxGcmVxdWVuY3kgPSAwOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxNYXhSb3dzID0gNTA7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFN0b3JhZ2VUeXBlID0gMTsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVHJhcEdlbmVyYXRpb24gPSBzdHJkdXAoIiIpOwogICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxUcmFwR2VuZXJhdGlvbkxlbiA9IDA7Ci0gICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRyYXBHZW5lcmF0aW9uTGVuID0gMDsKICAgICBTdG9yYWdlTmV3LT5waW5nQ3RsVHJhcFByb2JlRmFpbHVyZUZpbHRlciA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFRyYXBUZXN0RmFpbHVyZUZpbHRlciA9IDE7CiAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFR5cGUgPSBjYWxsb2MoMSwgc2l6ZW9mKG9pZCkgKiBzaXplb2YoMikpOyAgICAgICAvKiAwLjAgKi8KQEAgLTE4NCw2ICsyMTUsMjAgQEAKICAgICByZXR1cm4gU3RvcmFnZU5ldzsKIH0KIAorc3RhdGljIHZvaWQgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VEZWwpCit7CisgICAgbmV0c25tcF9hc3NlcnQoU3RvcmFnZURlbCk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsT3duZXJJbmRleCk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsVGVzdE5hbWUpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bFRhcmdldEFkZHJlc3MpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bERhdGFGaWxsKTsKKyAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxUcmFwR2VuZXJhdGlvbik7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsVHlwZSk7CisgICAgZnJlZShTdG9yYWdlRGVsLT5waW5nQ3RsRGVzY3IpOworICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bFNvdXJjZUFkZHJlc3MpOworICAgIGZyZWUoU3RvcmFnZURlbCk7Cit9CisKIC8qCiAgKiBwaW5nQ3RsVGFibGVfYWRkKCk6IGFkZHMgYSBzdHJ1Y3R1cmUgbm9kZSB0byBvdXIgZGF0YSBzZXQgCiAgKi8KQEAgLTIwMCwxNSArMjQ1LDE2IEBACiAgICAgICovCiAKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLCB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0KLQorICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmcGluZ0N0bFRhYmxlU3RvcmFnZSwgdmFycywgdGhlZGF0YSk7CiAKICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgInJlZ2lzdGVyZWQgYW4gZW50cnlcbiIpKTsKLSAgICB2YXJzID0gTlVMTDsKLSAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImRvbmUuXG4iKSk7CisKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCkBAIC0yMTYsMTIgKzI2MiwxNiBAQAogcGluZ1Jlc3VsdHNUYWJsZV9hZGQoc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICp0aGVkYXRhKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyc19saXN0ID0gTlVMTDsKLSAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpwID0gTlVMTDsKKyAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpwOworCiAgICAgcCA9IHRoZWRhdGEtPnBpbmdSZXN1bHRzOwogICAgIGlmICh0aGVkYXRhLT5waW5nUmVzdWx0cyAhPSBOVUxMKSB7CiAKLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsT3duZXJJbmRleCwgcC0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsVGVzdE5hbWUsIHAtPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgICAgLyogcGluZ0N0bE9wZXJhdGlvbk5hbWUgKi8KKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxUZXN0TmFtZSwgcC0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IApAQCAtMjQxLDggKzI5MSw2IEBACiAKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgicGluZ1Jlc3VsdHNUYWJsZSIsICJkb25lLlxuIikpOwotICAgIHZhcnNfbGlzdCA9IE5VTEw7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIApAQCAtMjUxLDExICsyOTksMTggQEAKIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9hZGQoc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICp0aGVkYXRhKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyc19saXN0OworCiAgICAgdmFyc19saXN0ID0gTlVMTDsKICAgICBpZiAodGhlZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgIC8qIHBpbmdDdGxUZXN0TmFtZSAqLwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwgKGNoYXIgKikgJnRoZWRhdGEtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCwgc2l6ZW9mKHRoZWRhdGEtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCkpOyAvKiBwaW5nUHJvYmVIaXN0b3J5SW5kZXggKi8KKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9VTlNJR05FRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdGhlZGF0YS0+cGluZ1Byb2JlSGlzdG9yeUluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0aGVkYXRhLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgpKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBYWFg6IGZpbGwgaW4gZGVmYXVsdCByb3cgdmFsdWVzIGhlcmUgaW50byBTdG9yYWdlTmV3IApAQCAtMjc0LDU2ICszMjksNDMgQEAKICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJvdXQgZmluaXNoZWRcbiIpKTsKICAgICB9CiAgICAgCi0gICAgdmFyc19saXN0ID0gTlVMTDsKLSAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImRvbmUuXG4iKSk7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAogaW50CiBwaW5nUHJvYmVIaXN0b3J5VGFibGVfYWRkYWxsKHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnNfbGlzdCA9IE5VTEw7Ci0gICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICpwID0gTlVMTDsKLSAgICBwID0gdGhlZGF0YS0+cGluZ1Byb2JlSGlzOwotICAgIGlmICh0aGVkYXRhLT5waW5nUHJvYmVIaXMgIT0gTlVMTCkKLSAgICAgICAgZG8gewotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBwLT5waW5nQ3RsT3duZXJJbmRleCwgcC0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHAtPnBpbmdDdGxUZXN0TmFtZSwgcC0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgIC8qIHBpbmdDdGxUZXN0TmFtZSAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyc19saXN0LCBOVUxMLCAwLCBBU05fVU5TSUdORUQsIChjaGFyICopICZwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgsIHNpemVvZihwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgpKTsgLyogcGluZ1Byb2JlSGlzdG9yeUluZGV4ICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzX2xpc3Q7CisgICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICpwOwogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogWFhYOiBmaWxsIGluIGRlZmF1bHQgcm93IHZhbHVlcyBoZXJlIGludG8gU3RvcmFnZU5ldyAKLSAgICAgICAgICAgICAqIAotICAgICAgICAgICAgICovCisgICAgZm9yIChwID0gdGhlZGF0YS0+cGluZ1Byb2JlSGlzOyBwOyBwID0gcC0+bmV4dCkgeworICAgICAgICB2YXJzX2xpc3QgPSBOVUxMOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzX2xpc3QsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcC0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHAtPnBpbmdDdGxUZXN0TmFtZUxlbik7CisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnNfbGlzdCwgTlVMTCwgMCwgQVNOX1VOU0lHTkVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwLT5waW5nUHJvYmVIaXN0b3J5SW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHAtPnBpbmdQcm9iZUhpc3RvcnlJbmRleCkpOworICAgICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZSwgdmFyc19saXN0LCBwKTsKKyAgICB9CiAKLQotICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGFkZCB0aGUgaW5kZXggdmFyaWFibGVzIHRvIHRoZSB2YXJiaW5kIGxpc3QsIHdoaWNoIGlzIAotICAgICAgICAgICAgICogdXNlZCBieSBoZWFkZXJfY29tcGxleCB0byBpbmRleCB0aGUgZGF0YSAKLSAgICAgICAgICAgICAqLwotCi0gICAgICAgICAgICBoZWFkZXJfY29tcGxleF9hZGRfZGF0YSgmcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnNfbGlzdCwgcCk7Ci0KLQotICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsICJvdXQgZmluaXNoZWRcbiIpKTsKLSAgICAgICAgICAgIHZhcnNfbGlzdCA9IE5VTEw7Ci0gICAgICAgICAgICBwID0gcC0+bmV4dDsKLSAgICAgICAgfSB3aGlsZSAocCAhPSBOVUxMKTsKLQotICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLCAiZG9uZS5cbiIpKTsKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfQogCiB2b2lkCiBwaW5nQ3RsVGFibGVfY2xlYW5lcihzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKnRoZXN0dWZmKQogewotICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyOworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyLCAqbmV4dDsKKyAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VEZWw7CiAKICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImNsZWFuZXJvdXQgICIpKTsKLSAgICBmb3IgKGhjaXB0ciA9IHRoZXN0dWZmOyBoY2lwdHIgIT0gTlVMTDsgaGNpcHRyID0gaGNpcHRyLT5uZXh0KSB7Ci0gICAgICAgIGhlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkoJnBpbmdDdGxUYWJsZVN0b3JhZ2UsIGhjaXB0cik7CisgICAgZm9yIChoY2lwdHIgPSB0aGVzdHVmZjsgaGNpcHRyOyBoY2lwdHIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBoY2lwdHItPm5leHQ7CisgICAgICAgIFN0b3JhZ2VEZWwgPSBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZwaW5nQ3RsVGFibGVTdG9yYWdlLCBoY2lwdHIpOworICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VEZWwpOwogICAgICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwgImNsZWFuZXIgICIpKTsKICAgICB9CiB9CkBAIC04MjEsMTAgKzg2MywxNSBAQAogICAgIHNpemVfdCAgICAgICAgICBuZXdvaWRfbGVuOwogICAgIHVuc2lnbmVkIGxvbmcgICBjb3VudCA9IDA7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKIAogICAgIGZvciAoaGNpcHRyMiA9IHBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKICAgICAgICAgIGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CkBAIC04NDIsMTcgKzg4OSwyMSBAQAogewogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyMiA9IE5VTEw7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lsYXN0ID0gTlVMTDsKLSAgICBzdHJ1Y3QgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOworICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqU3RvcmFnZVRtcCwgKlN0b3JhZ2VEZWw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKICAgICB0aW1lX3QgICAgICAgICAgbGFzdF90aW1lID0gMjE0NzQ4MzY0NzsKICAgICB0aW1lX3QgICAgICAgICAgdHA7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsT3BlcmF0aW9uTmFtZSAqLwotCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKIAogICAgIGZvciAoaGNpbGFzdCA9IGhjaXB0cjIgPSBwaW5nUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOyBoY2lwdHIyICE9IE5VTEw7CiAgICAgICAgICBoY2lwdHIyID0gaGNpcHRyMi0+bmV4dCkgewpAQCAtODcyLDcgKzkyMywyNSBAQAogCiAgICAgICAgIH0KICAgICB9Ci0gICAgaGVhZGVyX2NvbXBsZXhfZXh0cmFjdF9lbnRyeSgmcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZSwgaGNpbGFzdCk7CisgICAgU3RvcmFnZURlbCA9CisgICAgICAgIGhlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkoJnBpbmdQcm9iZUhpc3RvcnlUYWJsZVN0b3JhZ2UsIGhjaWxhc3QpOworICAgIGZvciAoaGNpcHRyMiA9IHBpbmdDdGxUYWJsZVN0b3JhZ2U7IGhjaXB0cjI7IGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CisgICAgICAgIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdG1wOworCisgICAgICAgIHRtcCA9IGhjaXB0cjItPmRhdGE7CisgICAgICAgIGlmICh0bXAtPnBpbmdQcm9iZUhpcyA9PSBTdG9yYWdlRGVsKSB7CisgICAgICAgICAgICB0bXAtPnBpbmdQcm9iZUhpcyA9IHRtcC0+cGluZ1Byb2JlSGlzLT5uZXh0OworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdQcm9iZUhpc3RvcnlUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZGVsZXRpbmcgdGhlIGxhc3Qgb25lIHN1Y2NlZWRlZCFcbiIpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIAl9CisgICAgfQorICAgIGlmIChTdG9yYWdlRGVsKSB7CisgICAgICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ1Byb2JlSGlzdG9yeVRpbWUpOworICAgICAgICBmcmVlKFN0b3JhZ2VEZWwtPnBpbmdDdGxUZXN0TmFtZSk7CisgICAgICAgIGZyZWUoU3RvcmFnZURlbC0+cGluZ0N0bE93bmVySW5kZXgpOworICAgICAgICBmcmVlKFN0b3JhZ2VEZWwpOworICAgIH0KICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwKICAgICAgICAgICAgICAgICAiZGVsZXRlIHRoZSBsYXN0IG9uZSBzdWNjZXNzIVxuIikpOwogfQpAQCAtOTQ4LDggKzEwMTcsMTAgQEAKIHsKICAgICBjaGFyICAgICAgICAgICAqcHRyOwogCi0gICAgaWYgKChwdHIgPSBzb2NrX250b3BfaG9zdChzYSwgc2FsZW4pKSA9PSBOVUxMKQotICAgICAgICBwcmludGYoInNvY2tfbnRvcF9ob3N0IGVycm9yIik7IC8qIGluZXRfbnRvcCgpIHNldHMgZXJybm8gKi8KKyAgICBpZiAoKHB0ciA9IHNvY2tfbnRvcF9ob3N0KHNhLCBzYWxlbikpID09IE5VTEwpIHsKKyAgICAgICAgLyogaW5ldF9udG9wKCkgc2V0cyBlcnJubyAqLworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInBpbmdDdGxUYWJsZTogc29ja19udG9wX2hvc3QoKSIpOworICAgIH0KICAgICByZXR1cm4gKHB0cik7CiB9CiAKQEAgLTEwMDIsNyArMTA3Myw3IEBACiAgICAgaGludHMuYWlfZmFtaWx5ID0gZmFtaWx5OyAgIC8qIEFGX1VOU1BFQywgQUZfSU5FVCwgQUZfSU5FVDYsIGV0Yy4gKi8KICAgICBoaW50cy5haV9zb2NrdHlwZSA9IHNvY2t0eXBlOyAgICAgICAvKiAwLCBTT0NLX1NUUkVBTSwgU09DS19ER1JBTSwgZXRjLiAqLwogCi0gICAgaWYgKChuID0gZ2V0YWRkcmluZm8oaG9zdCwgc2VydiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkKKyAgICBpZiAoKG4gPSBuZXRzbm1wX2dldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50cywgJnJlcykpICE9IDApCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAKICAgICByZXR1cm4gKHJlcyk7ICAgICAgICAgICAgICAgLyogcmV0dXJuIHBvaW50ZXIgdG8gZmlyc3Qgb24gbGlua2VkIGxpc3QgKi8KQEAgLTEwMzAsMTcgKzExMDEsMTggQEAKICAgICBoaW50cy5haV9mYW1pbHkgPSBmYW1pbHk7ICAgLyogMCwgQUZfSU5FVCwgQUZfSU5FVDYsIGV0Yy4gKi8KICAgICBoaW50cy5haV9zb2NrdHlwZSA9IHNvY2t0eXBlOyAgICAgICAvKiAwLCBTT0NLX1NUUkVBTSwgU09DS19ER1JBTSwgZXRjLiAqLwogCi0gICAgaWYgKChuID0gZ2V0YWRkcmluZm8oaG9zdCwgc2VydiwgJmhpbnRzLCAmcmVzKSkgIT0gMCkKKyAgICBpZiAoKG4gPSBuZXRzbm1wX2dldGFkZHJpbmZvKGhvc3QsIHNlcnYsICZoaW50cywgJnJlcykpICE9IDApIHsKICNpZiBIQVZFX0dBSV9TVFJFUlJPUgotICAgICAgICBwcmludGYoImhvc3Rfc2VydiBlcnJvciBmb3IgJXMsICVzOiAlcyIsCi0gICAgICAgICAgICAgICAoaG9zdCA9PSBOVUxMKSA/ICIobm8gaG9zdG5hbWUpIiA6IGhvc3QsCi0gICAgICAgICAgICAgICAoc2VydiA9PSBOVUxMKSA/ICIobm8gc2VydmljZSBuYW1lKSIgOiBzZXJ2LAotICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yKG4pKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImhvc3Rfc2VydiBlcnJvciBmb3IgJXMsICVzOiAlcyIsCisgICAgICAgICAgICAgICAgIChob3N0ID09IE5VTEwpID8gIihubyBob3N0bmFtZSkiIDogaG9zdCwKKyAgICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2VydiwKKyAgICAgICAgICAgICAgICAgZ2FpX3N0cmVycm9yKG4pKTsKICNlbHNlCi0gICAgICAgIHByaW50ZigiaG9zdF9zZXJ2IGVycm9yIGZvciAlcywgJXMiLAotICAgICAgICAgICAgICAgKGhvc3QgPT0gTlVMTCkgPyAiKG5vIGhvc3RuYW1lKSIgOiBob3N0LAotICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2Vydik7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJob3N0X3NlcnYgZXJyb3IgZm9yICVzLCAlcyIsCisgICAgICAgICAgICAgICAgIChob3N0ID09IE5VTEwpID8gIihubyBob3N0bmFtZSkiIDogaG9zdCwKKyAgICAgICAgICAgICAgICAgKHNlcnYgPT0gTlVMTCkgPyAiKG5vIHNlcnZpY2UgbmFtZSkiIDogc2Vydik7CiAjZW5kaWYKKyAgICB9CiAKICAgICByZXR1cm4gKHJlcyk7ICAgICAgICAgICAgICAgLyogcmV0dXJuIHBvaW50ZXIgdG8gZmlyc3Qgb24gbGlua2VkIGxpc3QgKi8KIH0KQEAgLTEwODQsMTMgKzExNTYsMTYgQEAKICAgICBvaWQgICAgICAgICAgICAgcGluZ1Jlc3VsdHNTZW5kUHJvYmVzW10gPQogICAgICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgwLCAxLCAzLCAxLCA4IH07CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogcGluZ0N0bE93bmVySW5kZXggKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0gICAgU3RvcmFnZVRtcCA9IFNOTVBfTUFMTE9DX1NUUlVDVChwaW5nUmVzdWx0c1RhYmxlX2RhdGEpOwotICAgIGlmICgoU3RvcmFnZVRtcCA9Ci0gICAgICAgICAoc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqKQotICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKSkgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIDsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CisgICAgU3RvcmFnZVRtcCA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgaWYgKCFTdG9yYWdlVG1wKQorICAgICAgICByZXR1cm47CiAKICAgICAvKgogICAgICAqIHNubXBUcmFwIG9pZCAKQEAgLTEyMTYsMTQgKzEyOTEsMTYgQEAKICAgICAvKiBzdHJ1Y3QgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RhdGEgKiBjdXJyZW50PU5VTEw7ICovCiAgICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhIGN1cnJlbnRfdmFyOwogICAgIGludCAgICAgICAgICAgICBzb2NrZmQ7CisgICAgaW50ICAgICAgICAgICAgIHNlbGVjdF9yZXN1bHQ7CiAgICAgaW50ICAgICAgICAgICAgIGN1cnJlbnRfcHJvYmVfdGVtcDsKICAgICBpbnQgICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGZhaWxfcHJvYmUgPSAwOwogICAgIGludCAgICAgICAgICAgICBmbGFnOwotICAgIHVuc2lnbmVkIGxvbmcgICpzdW1ydHQ7CisgICAgdW5zaWduZWQgbG9uZyAgIHN1bXJ0dDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7CiAKLSAgICBzdW1ydHQgPSAodW5zaWduZWQgbG9uZyAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKTsKKyAgICBtZW1zZXQoc2VuZGJ1ZiwgMCwgc2l6ZW9mKHNlbmRidWYpKTsKKwogICAgIHNvY2tmZCA9IHNvY2tldChwci0+c2FzZW5kLT5zYV9mYW1pbHksIFNPQ0tfUkFXLCBwci0+aWNtcHByb3RvKTsKICAgICBpZiAoc29ja2ZkIDwgMCkgewogCXNubXBfbG9nX3BlcnJvcigicGluZ0N0bFRhYmxlOiBmYWlsZWQgdG8gY3JlYXRlIHNvY2tldCIpOwpAQCAtMTI0MiwyOSArMTMxOSwyOSBAQAogICAgICAgICAoKnByLT5mc2VuZCkgKGRhdGFsZW4sIHBpZCwgbnNlbnQsIHNvY2tmZCwgc2VuZGJ1Zik7CiAgICAgICAgIG5zZW50Kys7CiAgICAgICAgIGxlbiA9IHByLT5zYWxlbjsKLSAgICAgICAgaWYgKHJlYWRhYmxlX3RpbWVvKHNvY2tmZCwgaXRlbS0+cGluZ0N0bFRpbWVPdXQpID09IDApIHsKLSAgICAgICAgICAgIC8qIHByaW50Zigic29ja2V0IHRpbWVvdXQhXG4iKTsgKi8KLSAgICAgICAgICAgIG4gPSAtMTsKLSAgICAgICAgICAgIGZhaWxfcHJvYmUgPSBmYWlsX3Byb2JlICsgMTsKLSAgICAgICAgICAgIGZsYWcgPSAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbiA9IHJlY3Zmcm9tKHNvY2tmZCwgcmVjdmJ1Ziwgc2l6ZW9mKHJlY3ZidWYpLCAwLCBwci0+c2FyZWN2LAotICAgICAgICAgICAgICAgICAgICAgICAgICZsZW4pOwotICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSA9IHN1Y2Nlc3NfcHJvYmUgKyAxOwotICAgICAgICAgICAgZmxhZyA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgc2VsZWN0X3Jlc3VsdCA9IHJlYWRhYmxlX3RpbWVvKHNvY2tmZCwgaXRlbS0+cGluZ0N0bFRpbWVPdXQpOworICAgICAgICBkbyB7CisgICAgICAgICAgICBpZiAoc2VsZWN0X3Jlc3VsdCA9PSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJzb2NrZXQgdGltZW91dFxuIikpOworICAgICAgICAgICAgICAgIG4gPSAtMTsKKyAgICAgICAgICAgICAgICBmYWlsX3Byb2JlID0gZmFpbF9wcm9iZSArIDE7CisgICAgICAgICAgICAgICAgZmxhZyA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG4gPSByZWN2ZnJvbShzb2NrZmQsIHJlY3ZidWYsIHNpemVvZihyZWN2YnVmKSwgMCwgcHItPnNhcmVjdiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSA9IHN1Y2Nlc3NfcHJvYmUgKyAxOworICAgICAgICAgICAgICAgIGZsYWcgPSAwOworICAgICAgICAgICAgfQogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHZhbCwgTlVMTCk7CisgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2YWwpOwogCi0gICAgICAgIHRpbWUoJnRpbWVwKTsKKyAgICAgICAgICAgIHRpbWUoJnRpbWVwKTsKIAotICAgICAgICAoKnByLT5mcHJvYykgKHJlY3ZidWYsIG4sICZ0dmFsLCB0aW1lcCwgaXRlbSwgYWksIGRhdGFsZW4sIG1pbnJ0dCwKLSAgICAgICAgICAgICAgICAgICAgICBtYXhydHQsIHN1bXJ0dCwgYXZlcmFnZXJ0dCwgY3VycmVudF9wcm9iZV90ZW1wLAotICAgICAgICAgICAgICAgICAgICAgIHN1Y2Nlc3NfcHJvYmUsIGZhaWxfcHJvYmUsIGZsYWcsICZjdXJyZW50X3ZhciwgcGlkKTsKLSAgICAgICAgaWYgKGN1cnJlbnRfcHJvYmVfdGVtcCA+PSBpdGVtLT5waW5nQ3RsUHJvYmVDb3VudCkgewotICAgICAgICAgICAgU05NUF9GUkVFKHN1bXJ0dCk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICAgICAgICAgICgqcHItPmZwcm9jKSAocmVjdmJ1ZiwgbiwgJnR2YWwsIHRpbWVwLCBpdGVtLCBhaSwgZGF0YWxlbiwgbWlucnR0LAorICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhydHQsICZzdW1ydHQsIGF2ZXJhZ2VydHQsIGN1cnJlbnRfcHJvYmVfdGVtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2Vzc19wcm9iZSwgZmFpbF9wcm9iZSwgZmxhZywgJmN1cnJlbnRfdmFyLCBwaWQpOworICAgICAgICAgICAgc2VsZWN0X3Jlc3VsdCA9IHJlYWRhYmxlX3RpbWVvKHNvY2tmZCwgMCk7CisgICAgICAgIH0gd2hpbGUgKHNlbGVjdF9yZXN1bHQgPiAwKTsKICAgICB9CiAgICAgY2xvc2Uoc29ja2ZkKTsKIH0KQEAgLTEyOTksOSArMTM3NiwxMSBAQAogICAgIHN0YXRpYyBpbnQgICAgICBwcm9iZUZhaWxlZCA9IDA7CiAgICAgc3RhdGljIGludCAgICAgIHRlc3RGYWlsZWQgPSAwOwogICAgIHN0YXRpYyBpbnQgICAgICBzZXJpZXMgPSAwOwotCiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAicHJvY192NChmbGFnID0gJWQpXG4iLCBmbGFnKSk7CisKICAgICBpZiAoZmxhZyA9PSAwKSB7CiAgICAgICAgIHNlcmllcyA9IDA7CiAgICAgICAgIGlwID0gKHN0cnVjdCBpcCAqKSBwdHI7IC8qIHN0YXJ0IG9mIElQIGhlYWRlciAqLwpAQCAtMTMwOSwxNCArMTM4OCwyMCBAQAogCiAgICAgICAgIGljbXAgPSAoc3RydWN0IGljbXAgKikgKHB0ciArIGhsZW4xKTsgICAvKiBzdGFydCBvZiBJQ01QIGhlYWRlciAqLwogICAgICAgICBpZiAoKGljbXBsZW4gPSBsZW4gLSBobGVuMSkgPCA4KQotICAgICAgICAgICAgcHJpbnRmKCJpY21wbGVuICglZCkgPCA4IiwgaWNtcGxlbik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImljbXBsZW4gKCVkKSA8IDgiLCBpY21wbGVuKSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJJQ01QIHR5cGUgPSAlZCAoJXNhIHJlcGx5KVxuIiwKKyAgICAgICAgICAgICAgICAgICAgaWNtcC0+aWNtcF90eXBlLAorICAgICAgICAgICAgICAgICAgICBpY21wLT5pY21wX3R5cGUgPT0gSUNNUF9FQ0hPUkVQTFkgPyAiIiA6ICJub3QgYSAiKSk7CiAKICAgICAgICAgaWYgKGljbXAtPmljbXBfdHlwZSA9PSBJQ01QX0VDSE9SRVBMWSkgewotICAgICAgICAgICAgaWYgKGljbXAtPmljbXBfaWQgIT0gcGlkKQotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOyAgICAgICAgIC8qIG5vdCBhIHJlc3BvbnNlIHRvIG91ciBFQ0hPX1JFUVVFU1QgKi8KLSAgICAgICAgICAgIGlmIChpY21wbGVuIDwgMTYpCi0gICAgICAgICAgICAgICAgcHJpbnRmKCJpY21wbGVuICglZCkgPCAxNiIsIGljbXBsZW4pOworICAgICAgICAgICAgaWYgKGljbXAtPmljbXBfaWQgIT0gcGlkKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJub3QgYSByZXNwb25zZSB0byBvdXIgRUNIT19SRVFVRVNUXG4iKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICB9CiAKKyAgICAgICAgICAgIGlmIChpY21wbGVuIDwgMTYpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJpY21wbGVuICglZCkgPCAxNiIsIGljbXBsZW4pKTsKIAogICAgICAgICAgICAgdHZzZW5kID0gKHN0cnVjdCB0aW1ldmFsICopIGljbXAtPmljbXBfZGF0YTsKIApAQCAtMTMyNCwxNCArMTQwOSwxOSBAQAogICAgICAgICAgICAgICAgIHJvdW5kX2RvdWJsZSgoMTAwMDAwMCAqICh0dnJlY3YtPnR2X3NlYyAtIHR2c2VuZC0+dHZfc2VjKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dnJlY3YtPnR2X3VzZWMgLSB0dnNlbmQtPnR2X3VzZWMpIC8gMTAwMCk7CiAKLSAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KKyAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgICAgICAgICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycykpID09IE5VTEwpCisgICAgICAgICAgICBTdG9yYWdlTmV3ID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKTsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgICAgICAgICAgaWYgKCFTdG9yYWdlTmV3KSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJTdG9yYWdlTmV3ID09IE5VTExcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9TVUNITkFNRTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGN1cnJlbnRfcHJvYmUgPT0gMSkgewogICAgICAgICAgICAgICAgICphdmVyYWdlcnR0ID0gcnR0OwpAQCAtMTMzOSw3ICsxNDI5LDYgQEAKICAgICAgICAgICAgICAgICAqbWF4cnR0ID0gcnR0OwogICAgICAgICAgICAgICAgICpzdW1ydHQgPSBydHQ7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiZWxzZVxuIik7CiAgICAgICAgICAgICAgICAgaWYgKHJ0dCA8ICptaW5ydHQpCiAgICAgICAgICAgICAgICAgICAgICptaW5ydHQgPSBydHQ7CiAgICAgICAgICAgICAgICAgaWYgKHJ0dCA+ICptYXhydHQpCkBAIC0xMzYzLDYgKzE0NTIsNyBAQAogICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzUnR0U3VtT2ZTcXVhcmVzICsgcnR0ICogcnR0OwogCiAJICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZV90aW1lID0gdGltZXA7CisgICAgICAgICAgICBmcmVlKFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZSk7CiAgICAgICAgICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c0xhc3RHb29kUHJvYmUgPQogICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKGRhdGVfbl90aW1lKCZ0aW1lcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZUxlbiksCkBAIC0xNDA3LDUyICsxNDk3LDM5IEBACiAKICAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPT0gMSkKICAgICAgICAgICAgICAgICBpdGVtLT5waW5nUHJvYmVIaXMgPSB0ZW1wOwotICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgKGN1cnJlbnRfdGVtcCktPm5leHQgPSB0ZW1wOwotICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBjdXJyZW50X3RlbXAgPSB0ZW1wOwogCi0gICAgICAgICAgICBpZiAoU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNTZW5kUHJvYmVzID49Ci0gICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFByb2JlQ291bnQpIHsKKyAgICAgICAgICAgIGlmIChTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPj0gaXRlbS0+cGluZ0N0bFByb2JlQ291bnQpCiAgICAgICAgICAgICAgICAgY3VycmVudF90ZW1wLT5uZXh0ID0gTlVMTDsKLSAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGl0ZW0tPnBpbmdQcm9iZUhpcyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgaWYgKHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9jb3VudChpdGVtKSA8Ci0gICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxNYXhSb3dzKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwaW5nUHJvYmVIaXN0b3J5VGFibGVfYWRkKGN1cnJlbnRfdGVtcCkgIT0KLSAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfU1VDQ0VTUykKLSAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlZ2lzdGVyZWQgYW4gZW50cnkgZXJyb3JcbiIpKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChwaW5nUHJvYmVIaXN0b3J5VGFibGVfY291bnQoaXRlbSkgPj0gaXRlbS0+cGluZ0N0bE1heFJvd3MpCiAgICAgICAgICAgICAgICAgICAgIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kZWxMYXN0KGl0ZW0pOwotICAgICAgICAgICAgICAgICAgICBpZiAocGluZ1Byb2JlSGlzdG9yeVRhYmxlX2FkZChjdXJyZW50X3RlbXApICE9Ci0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX1NVQ0NFU1MpCi0gICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ1Byb2JlSGlzdG9yeVRhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFuIGVudHJ5IGVycm9yXG4iKSk7Ci0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9hZGQoY3VycmVudF90ZW1wKSAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nUHJvYmVIaXN0b3J5VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGFkZCBhIHJvd1xuIikpOwogCSAgICB9CiAgICAgICAgIH0KLSAgICB9Ci0KLSAgICBlbHNlIGlmIChmbGFnID09IDEpCi0gICAgewotCi0KKyAgICB9IGVsc2UgaWYgKGZsYWcgPT0gMSkgewogICAgICAgICBpZiAoc2VyaWVzID09IDApCiAgICAgICAgICAgICBwcm9iZUZhaWxlZCA9IDE7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHByb2JlRmFpbGVkID0gcHJvYmVGYWlsZWQgKyAxOwogICAgICAgICBzZXJpZXMgPSAxOwogICAgICAgICB0ZXN0RmFpbGVkID0gdGVzdEZhaWxlZCArIDE7Ci0gICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7IC8qICBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7ICAgICAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KKyAgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgICAgICBpZiAoKFN0b3JhZ2VOZXcgPQotICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCisgICAgICAgIFN0b3JhZ2VOZXcgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CiAKICAgICAgICAgaWYgKGN1cnJlbnRfcHJvYmUgPT0gMSkgewpAQCAtMTU4Miw3ICsxNjU5LDcgQEAKICAgICBpY21wLT5pY21wX2NvZGUgPSAwOwogICAgIGljbXAtPmljbXBfaWQgPSBwaWQ7CiAgICAgaWNtcC0+aWNtcF9zZXEgPSBuc2VudDsKLSAgICBnZXR0aW1lb2ZkYXkoKHN0cnVjdCB0aW1ldmFsICopIGljbXAtPmljbXBfZGF0YSwgTlVMTCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKChzdHJ1Y3QgdGltZXZhbCAqKSBpY21wLT5pY21wX2RhdGEpOwogCiAgICAgbGVuID0gOCArIGRhdGFsZW47ICAgICAgICAgIC8qIGNoZWNrc3VtIElDTVAgaGVhZGVyIGFuZCBkYXRhICovCiAgICAgaWNtcC0+aWNtcF9ja3N1bSA9IDA7CkBAIC0xNjAwLDEyICsxNjc3LDE1IEBACiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBzdHJ1Y3QgcGluZ1Jlc3VsdHNUYWJsZV9kYXRhICpTdG9yYWdlTmV3ID0gTlVMTDsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAgKi8KLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qIHBpbmdDdGxUZXN0TmFtZSAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAotCi0gICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCisgICAgU3RvcmFnZU5ldyA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICByZXR1cm47CiAKICAgICBTdG9yYWdlTmV3LT5waW5nUmVzdWx0c1NlbmRQcm9iZXMgPSAwOwpAQCAtMTYzMywzNCArMTcxMyw0MSBAQAogCiAgICAgICAgIGFpID0gaG9zdF9zZXJ2KGhvc3QsIE5VTEwsIDAsIDApOwogCi0gICAgICAgIHByaW50ZigiUElORyAlcyAoJXMpOiAlZCBkYXRhIGJ5dGVzXG4iLCBhaS0+YWlfY2Fub25uYW1lLAotICAgICAgICAgICAgICAgc29ja19udG9wX2hvc3QoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSwgZGF0YWxlbik7CisgICAgICAgIGlmIChhaSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJQSU5HICVzICglcyk6ICVkIGRhdGEgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfY2Fub25uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgc29ja19udG9wX2hvc3QoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKSwgZGF0YWxlbikpOwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIDRpbml0aWFsaXplIGFjY29yZGluZyB0byBwcm90b2NvbCAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQpIHsKLSAgICAgICAgICAgIHByID0gJnByb3RvX3Y0OworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIDRpbml0aWFsaXplIGFjY29yZGluZyB0byBwcm90b2NvbCAKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGFpLT5haV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICAgICAgICAgIHByID0gJnByb3RvX3Y0OwogI2lmZGVmCUlQVjYKLSAgICAgICAgfSBlbHNlIGlmIChhaS0+YWlfZmFtaWx5ID09IEFGX0lORVQ2KSB7Ci0gICAgICAgICAgICBwciA9ICZwcm90b192NjsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoYWktPmFpX2ZhbWlseSA9PSBBRl9JTkVUNikgeworICAgICAgICAgICAgICAgIHByID0gJnByb3RvX3Y2OwogCi0gICAgICAgICAgICBpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJigoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfYWRkciktPnNpbjZfYWRkcikpKQotICAgICAgICAgICAgICAgIHByaW50ZigiY2Fubm90IHBpbmcgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzIik7CisgICAgICAgICAgICAgICAgaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCYoKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpLT5haV9hZGRyKS0+c2luNl9hZGRyKSkpCisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3QgcGluZyBJUHY0LW1hcHBlZCBJUHY2IGFkZHJlc3MiKTsKICNlbmRpZgotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByaW50ZigidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFpLT5haV9mYW1pbHkpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBhZGRyZXNzIGZhbWlseSAlZCIsIGFpLT5haV9mYW1pbHkpOworICAgICAgICAgICAgfQogCi0gICAgICAgIHByLT5zYXNlbmQgPSBhaS0+YWlfYWRkcjsKLSAgICAgICAgcHItPnNhcmVjdiA9IGNhbGxvYygxLCBhaS0+YWlfYWRkcmxlbik7Ci0gICAgICAgIHByLT5zYWxlbiA9IGFpLT5haV9hZGRybGVuOwotICAgICAgICByZWFkbG9vcChpdGVtLCBhaSwgZGF0YWxlbiwgbWlucnR0LCBtYXhydHQsIGF2ZXJhZ2VydHQsIHBpZCk7CisgICAgICAgICAgICBwci0+c2FzZW5kID0gYWktPmFpX2FkZHI7CisgICAgICAgICAgICBwci0+c2FyZWN2ID0gY2FsbG9jKDEsIGFpLT5haV9hZGRybGVuKTsKKyAgICAgICAgICAgIHByLT5zYWxlbiA9IGFpLT5haV9hZGRybGVuOworICAgICAgICAgICAgcmVhZGxvb3AoaXRlbSwgYWksIGRhdGFsZW4sIG1pbnJ0dCwgbWF4cnR0LCBhdmVyYWdlcnR0LCBwaWQpOworICAgICAgICAgICAgZnJlZShwci0+c2FyZWN2KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJQSU5HOiBuYW1lIHJlc29sdXRpb24gZm9yICVzIGZhaWxlZC5cbiIsIGhvc3QpOworICAgICAgICB9CiAKICAgICAgICAgU05NUF9GUkVFKG1pbnJ0dCk7CiAgICAgICAgIFNOTVBfRlJFRShtYXhydHQpOwogICAgICAgICBTTk1QX0ZSRUUoYXZlcmFnZXJ0dCk7Ci0gICAgICAgIFNOTVBfRlJFRShhaSk7CisgICAgICAgIGZyZWVhZGRyaW5mbyhhaSk7CiAgICAgfQogCiAgICAgZWxzZSBpZiAoaXRlbS0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID09IDIpIHsKQEAgLTE3MzYsMTMgKzE4MjMsMTEgQEAKICAgICAgICAgaG9zdG5hbWUgPSB0YXJnZXQ7CiAKICAgICAgICAgaWYgKGlwdjZfYWRkcl9hbnkoJnNvdXJjZS5zaW42X2FkZHIpKSB7Ci0KICAgICAgICAgICAgIHNvY2tsZW5fdCAgICAgICBhbGVuOwogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHByb2JlX2ZkID0gc29ja2V0KEFGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKIAogICAgICAgICAgICAgaWYgKHByb2JlX2ZkIDwgMCkgewotICAgICAgICAgICAgICAgIHByaW50ZigiZXJyb3IhXG4iKTsKLSAgICAgICAgICAgICAgICBwZXJyb3IoInNvY2tldCIpOworICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigicGluZ0N0bFRhYmxlOiBJUHY2IGRhdGFncmFtIHNvY2tldCBjcmVhdGlvbiIpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChkZXZpY2UpIHsKQEAgLTE3NjEsNiArMTg0Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW9jdGwocHJvYmVfZmQsIFNJT0NHSUZJTkRFWCwgJmlmcikgPCAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJwaW5nOiB1bmtub3duIGlmYWNlICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2aWNlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9zZShwcm9iZV9mZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3Rob3Auc2luNl9zY29wZV9pZCA9IGlmci5pZnJfaWZpbmRleDsKQEAgLTE3NzMsMTIgKzE4NTksMTQgQEAKICAgICAgICAgICAgICAgICAocHJvYmVfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmZpcnN0aG9wLAogICAgICAgICAgICAgICAgICBzaXplb2YoZmlyc3Rob3ApKSA9PSAtMSkgewogICAgICAgICAgICAgICAgIHBlcnJvcigiY29ubmVjdCIpOworICAgICAgICAgICAgICAgIGNsb3NlKHByb2JlX2ZkKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBhbGVuID0gc2l6ZW9mKHNvdXJjZSk7CiAgICAgICAgICAgICBpZiAoZ2V0c29ja25hbWUocHJvYmVfZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNvdXJjZSwgJmFsZW4pCiAgICAgICAgICAgICAgICAgPT0gLTEpIHsKICAgICAgICAgICAgICAgICBwZXJyb3IoImdldHNvY2tuYW1lIik7CisgICAgICAgICAgICAgICAgY2xvc2UocHJvYmVfZmQpOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNvdXJjZS5zaW42X3BvcnQgPSAwOwpAQCAtMTg5MSwxNSArMTk3OSwxNiBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAKLSAgICAgICAgcHJpbnRmKCJQSU5HICVzKCVzKSAiLCBob3N0bmFtZSwKLSAgICAgICAgICAgICAgIHByX2FkZHIoJndoZXJldG8uc2luNl9hZGRyLCBvcHRpb25zKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiUElORyAlcyglcykgIiwgaG9zdG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHByX2FkZHIoJndoZXJldG8uc2luNl9hZGRyLCBvcHRpb25zKSkpOwogICAgICAgICBpZiAoZmxvd2xhYmVsKQotICAgICAgICAgICAgcHJpbnRmKCIsIGZsb3cgMHglMDV4LCAiLCAodW5zaWduZWQpIG50b2hsKGZsb3dsYWJlbCkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsIGZsb3cgMHglMDV4LCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkKSBudG9obChmbG93bGFiZWwpKSk7CiAgICAgICAgIGlmIChkZXZpY2UgfHwgKG9wdGlvbnMgJiBGX05VTUVSSUMpKSB7Ci0gICAgICAgICAgICBwcmludGYoImZyb20gJXMgJXM6ICIsCi0gICAgICAgICAgICAgICAgICAgcHJfYWRkcl9uKCZzb3VyY2Uuc2luNl9hZGRyKSwgZGV2aWNlID8gOiAiIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgImZyb20gJXMgJXM6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcl9hZGRyX24oJnNvdXJjZS5zaW42X2FkZHIpLCBkZXZpY2UgPyA6ICIiKSk7CiAgICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCIlZCBkYXRhIGJ5dGVzXG4iLCBkYXRhbGVuKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIlZCBkYXRhIGJ5dGVzXG4iLCBkYXRhbGVuKSk7CiAKICAgICAgICAgc2V0dXAoaWNtcF9zb2NrLCBvcHRpb25zLCB1aWQsIHRpbWVvdXQsIHByZWxvYWQsIGludGVydmFsLCBkYXRhbGVuLAogICAgICAgICAgICAgICAoY2hhciAqKSBvdXRwYWNrLCAmaWRlbnQsICZzdGFydF90aW1lLCAmc2NyZWVuX3dpZHRoLApAQCAtMTkyNSwxOCArMjAxNCwyMCBAQAogICAgIGNoYXIgICAgICAgICAgICpob3N0ID0gTlVMTDsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMgPSBOVUxMOwogCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgLyogcGluZ0N0bFRlc3ROYW1lICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICBpZiAoKFN0b3JhZ2VOZXcgPQotICAgICAgICAgaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLCB2YXJzKSkgIT0gTlVMTCkgeworICAgIFN0b3JhZ2VOZXcgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmIChTdG9yYWdlTmV3KSB7CiAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzU2VuZFByb2JlcyA9IDA7CiAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzUHJvYmVSZXNwb25zZXMgPSAwOwogICAgICAgICByZXR1cm47Ci0KICAgICB9Ci0gICAgYWkgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBhZGRyaW5mbykpOworCiAgICAgaG9zdCA9IGl0ZW0tPnBpbmdDdGxUYXJnZXRBZGRyZXNzOwogICAgIGFpID0gaG9zdF9zZXJ2KGhvc3QsIE5VTEwsIDAsIDApOwogICAgIFN0b3JhZ2VUbXAgPSBTTk1QX01BTExPQ19TVFJVQ1QocGluZ1Jlc3VsdHNUYWJsZV9kYXRhKTsKQEAgLTE5NTksMjYgKzIwNTAsMTQgQEAKIAogICAgIGlmIChpdGVtLT5waW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPT0gMQogICAgICAgICB8fCBpdGVtLT5waW5nQ3RsVGFyZ2V0QWRkcmVzc1R5cGUgPT0gMTYpIHsKLSAgICAgICAgaWYgKGFpID09IE5VTEwpIHsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzVHlwZSA9IDA7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cCgiIik7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9IDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSAxOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPQotICAgICAgICAgICAgICAgIChjaGFyICopCi0gICAgICAgICAgICAgICAgbWFsbG9jKHN0cmxlbihzb2NrX250b3BfaG9zdChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pKQotICAgICAgICAgICAgICAgICAgICAgICArIDEpOwotICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3MgPQotICAgICAgICAgICAgICAgIHN0cmR1cChzb2NrX250b3BfaG9zdChhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pKTsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPgotICAgICAgICAgICAgICAgIHBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzW3N0cmxlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzb2NrX250b3BfaG9zdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYWktPmFpX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaS0+YWlfYWRkcmxlbikpXSA9ICdcMCc7Ci0gICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9Ci0gICAgICAgICAgICAgICAgc3RybGVuKHNvY2tfbnRvcF9ob3N0KGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikpOwotICAgICAgICB9CisgICAgICAgIGNvbnN0IGNoYXIqIHN0cjsKKworICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSBhaSA/IDEgOiAwOworICAgICAgICBzdHIgPSBhaSA/IHNvY2tfbnRvcF9ob3N0KGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbikgOiBOVUxMOworICAgICAgICBpZiAoIXN0cikKKyAgICAgICAgICAgIHN0ciA9ICIiOworICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cChzdHIpOworICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9IHN0cmxlbihzdHIpOwogICAgIH0KICAgICBpZiAoaXRlbS0+cGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlID09IDIpIHsKIApAQCAtMTk5MywxMCArMjA3Miw3IEBACiAKICAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgaG9zdCwgJnRvLT5zaW42X2FkZHIpID4gMCkgewogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NUeXBlID0gMjsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAoY2hhciAqKSBtYWxsb2Moc3RybGVuKGhvc3QpICsgMSk7CiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cChob3N0KTsKLSAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzW3N0cmxlbihob3N0KV0gPSAnXDAnOwogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3NMZW4gPSBzdHJsZW4oaG9zdCk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBocCA9IGdldGhvc3RieW5hbWUyKGhvc3QsIEFGX0lORVQ2KTsKQEAgLTIwMDUsMTMgKzIwODEsOCBAQAogICAgICAgICAgICAgICAgIG1lbW1vdmUoKGNhZGRyX3QpICYgdG8tPnNpbjZfYWRkciwgaHAtPmhfYWRkciwgMTYpOwogICAgICAgICAgICAgICAgIGhvc3RuYW1lID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmdG8tPnNpbjZfYWRkciwgcGEsIDY0KTsKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc1R5cGUgPSAyOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzID0KLSAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgbWFsbG9jKHN0cmxlbihob3N0bmFtZSkgKyAxKTsKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzcyA9IHN0cmR1cChob3N0bmFtZSk7Ci0gICAgICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNJcFRhcmdldEFkZHJlc3Nbc3RybGVuKGhvc3RuYW1lKV0gPQotICAgICAgICAgICAgICAgICAgICAnXDAnOwotICAgICAgICAgICAgICAgIFN0b3JhZ2VUbXAtPnBpbmdSZXN1bHRzSXBUYXJnZXRBZGRyZXNzTGVuID0KLSAgICAgICAgICAgICAgICAgICAgc3RybGVuKGhvc3RuYW1lKTsKKyAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5waW5nUmVzdWx0c0lwVGFyZ2V0QWRkcmVzc0xlbiA9IHN0cmxlbihob3N0bmFtZSk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICh2b2lkKSBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidHJhY2Vyb3V0ZTogdW5rbm93biBob3N0ICVzXG4iLCBob3N0KTsKQEAgLTIwNDAsOCArMjExMSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgU05NUF9GUkVFKGFpKTsKLQorICAgIGZyZWVhZGRyaW5mbyhhaSk7CiB9CiAKIApAQCAtMjA1MSwxMiArMjEyMSwxNiBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycyA9IE5VTEw7CiAgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqU3RvcmFnZVRtcCA9IE5VTEw7CiAKLSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgICAvKiBwaW5nQ3RsT3duZXJJbmRleCAqLwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsgICAvKiBwaW5nQ3RsVGVzdE5hbWUgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAKLQotICAgIGlmICgoU3RvcmFnZVRtcCA9Ci0gICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpKSA9PSBOVUxMKQorICAgIFN0b3JhZ2VUbXAgPSBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgIGlmICghU3RvcmFnZVRtcCkKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CiAgICAgU3RvcmFnZVRtcC0+cGluZ1Jlc3VsdHNPcGVyU3RhdHVzID0gdmFsOwogCkBAIC0yMDY4LDE5ICsyMTQyLDIzIEBACiBpbnQKIHBpbmdSZXN1bHRzVGFibGVfZGVsKHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKLSAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjIgPSBOVUxMOworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRyMiwgKm5leHQ7CiAgICAgc3RydWN0IHBpbmdSZXN1bHRzVGFibGVfZGF0YSAqU3RvcmFnZURlbCA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLCB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogCi0gICAgZm9yIChoY2lwdHIyID0gcGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKLSAgICAgICAgIGhjaXB0cjIgPSBoY2lwdHIyLT5uZXh0KSB7CisgICAgZm9yIChoY2lwdHIyID0gcGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2U7IGhjaXB0cjI7IGhjaXB0cjIgPSBuZXh0KSB7CisgICAgICAgIG5leHQgPSBoY2lwdHIyLT5uZXh0OwogICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShuZXdvaWQsIG5ld29pZF9sZW4sIGhjaXB0cjItPm5hbWUsIG5ld29pZF9sZW4pCiAgICAgICAgICAgICA9PSAwKSB7CiAgICAgICAgICAgICBTdG9yYWdlRGVsID0KQEAgLTIxMDQsMTkgKzIxODIsMjMgQEAKIGludAogcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2RlbChzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKnRoZWRhdGEpCiB7Ci0gICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHIyID0gTlVMTDsKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cjIsICpuZXh0OwogICAgIHN0cnVjdCBwaW5nUHJvYmVIaXN0b3J5VGFibGVfZGF0YSAqU3RvcmFnZURlbCA9IE5VTEw7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKICAgICBvaWQgICAgICAgICAgICAgbmV3b2lkW01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgbmV3b2lkX2xlbjsKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnBpbmdDdGxPd25lckluZGV4LCB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAgIC8qIHBpbmdDdGxPd25lckluZGV4ICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+cGluZ0N0bFRlc3ROYW1lLCB0aGVkYXRhLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAgIC8qIHBpbmdDdGxPcGVyYXRpb25OYW1lICovCi0KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhLT5waW5nQ3RsT3duZXJJbmRleExlbik7CisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnBpbmdDdGxUZXN0TmFtZUxlbik7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogCi0gICAgZm9yIChoY2lwdHIyID0gcGluZ1Byb2JlSGlzdG9yeVRhYmxlU3RvcmFnZTsgaGNpcHRyMiAhPSBOVUxMOwotICAgICAgICAgaGNpcHRyMiA9IGhjaXB0cjItPm5leHQpIHsKKyAgICBmb3IgKGhjaXB0cjIgPSBwaW5nUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOyBoY2lwdHIyOyBoY2lwdHIyID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gaGNpcHRyMi0+bmV4dDsKICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUobmV3b2lkLCBuZXdvaWRfbGVuLCBoY2lwdHIyLT5uYW1lLCBuZXdvaWRfbGVuKQogICAgICAgICAgICAgPT0gMCkgewogICAgICAgICAgICAgU3RvcmFnZURlbCA9CkBAIC0yMjE2LDYgKzIyOTgsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjMxMyw2ICsyMzk2LDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI0MDIsNiArMjQ4Niw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNDkyLDYgKzI1NzcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjU4NCw2ICsyNjcwLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI2ODYsNiArMjc3Myw3IEBACiAgICAgICAgICAgICBtb2RpZnlfUmVzdWx0c09wZXIoU3RvcmFnZVRtcCwgMik7CiAgICAgICAgIH0KIAorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjc4Miw2ICsyODcwLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI4NjcsNiArMjk1Niw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yOTUyLDYgKzMwNDIsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzAzOSw2ICszMTMwLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMxMzcsNiArMzIyOSw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMjI4LDYgKzMzMjEsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzMxOSw2ICszNDEzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM0MTYsNiArMzUxMSw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNTEyLDYgKzM2MDgsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzU5OCw2ICszNjk1LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM2OTYsNiArMzc5NCw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNzgxLDYgKzM4ODAsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzg2OSw2ICszOTY5LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM5NTcsNiArNDA1OCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zOTcwLDE0ICs0MDcyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKIHsKLSAgICBzdHJ1Y3QgcGluZ0N0bFRhYmxlX2RhdGEgKlN0b3JhZ2VUbXAgPSBOVUxMOworICAgIHN0cnVjdCBwaW5nQ3RsVGFibGVfZGF0YSAqU3RvcmFnZVRtcDsKICAgICBzdGF0aWMgc3RydWN0IHBpbmdDdGxUYWJsZV9kYXRhICpTdG9yYWdlTmV3LCAqU3RvcmFnZURlbDsKICAgICBzaXplX3QgICAgICAgICAgbmV3bGVuID0KICAgICAgICAgbmFtZV9sZW4gLSAoc2l6ZW9mKHBpbmdDdGxUYWJsZV92YXJpYWJsZXNfb2lkKSAvIHNpemVvZihvaWQpICsKICAgICAgICAgICAgICAgICAgICAgMyAtIDEpOwogICAgIHN0YXRpYyBpbnQgICAgICBvbGRfdmFsdWU7CiAgICAgaW50ICAgICAgICAgICAgIHNldF92YWx1ZTsKLSAgICBzdGF0aWMgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqdnA7CiAgICAgc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoY2lwdHIgPSBOVUxMOwogCiAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsCkBAIC00MDc2LDYgKzQxNzcsOCBAQAogICAgICAgICAgKiBtZW1vcnkgcmVzZXZlcmF0aW9uLCBmaW5hbCBwcmVwYXJhdGlvbi4uLiAKICAgICAgICAgICovCiAgICAgICAgIGlmIChTdG9yYWdlVG1wID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnZwOworCiAgICAgICAgICAgICBpZiAoc2V0X3ZhbHVlID09IFJTX0RFU1RST1kpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgICAgIH0KQEAgLTQwOTUsMTUgKzQxOTgsMTQgQEAKICAgICAgICAgICAgICAgICAgKG5hbWUKICAgICAgICAgICAgICAgICAgIFtzaXplb2YocGluZ0N0bFRhYmxlX3ZhcmlhYmxlc19vaWQpIC8gc2l6ZW9mKG9pZCkgKwogICAgICAgICAgICAgICAgICAgIDJdKSwgbmV3bGVuLCB2YXJzKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIFhYWDogZnJlZSwgemVybyB2YXJzIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIC8qIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOyAqLworICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdnAgPSB2YXJzOwogCiAgICAgICAgICAgICBTdG9yYWdlTmV3ID0gY3JlYXRlX3BpbmdDdGxUYWJsZV9kYXRhKCk7CisgICAgICAgICAgICBpZiAoIVN0b3JhZ2VOZXcpCisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICAgICAgICAgIGlmICh2cC0+dmFsX2xlbiA8PSAzMikgewogICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdDdGxPd25lckluZGV4ID0gbWFsbG9jKHZwLT52YWxfbGVuICsgMSk7CiAgICAgICAgICAgICAgICAgbWVtY3B5KFN0b3JhZ2VOZXctPnBpbmdDdGxPd25lckluZGV4LCB2cC0+dmFsLnN0cmluZywKQEAgLTQxNDAsMTAgKzQyNDIsNyBAQAogICAgICAgICAgICAgU3RvcmFnZU5ldy0+cGluZ0N0bFJvd1N0YXR1cyA9IHNldF92YWx1ZTsKIAogCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogWFhYOiBmcmVlLCB6ZXJvIHZhcnMsIG5vIGxvbmdlciBuZWVkZWQ/IAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICAvKiBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsgKi8KKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOwogICAgICAgICB9CiAKIApAQCAtNDE1NCwxMiArNDI1MywxNyBAQAogCiAgICAgY2FzZSBGUkVFOgogICAgICAgICAvKgotICAgICAgICAgKiBYWFg6IGZyZWUsIHplcm8gdmFycyAKLSAgICAgICAgICovCi0KLSAgICAgICAgLyoKICAgICAgICAgICogUmVsZWFzZSBhbnkgcmVzb3VyY2VzIHRoYXQgaGF2ZSBiZWVuIGFsbG9jYXRlZCAKICAgICAgICAgICovCisKKyAgICAgICAgaWYgKHNldF92YWx1ZSA9PSBSU19ERVNUUk9ZICYmIFN0b3JhZ2VOZXcpCisgICAgICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VOZXcpOworICAgICAgICBTdG9yYWdlTmV3ID0gTlVMTDsKKworICAgICAgICBpZiAoU3RvcmFnZURlbCkgeworICAgICAgICAgICAgZnJlZV9waW5nQ3RsVGFibGVfZGF0YShTdG9yYWdlRGVsKTsKKyAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSBOVUxMOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAKQEAgLTQyMzAsMTAgKzQzMzQsOCBAQAogICAgICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkocGluZ0N0bFRhYmxlU3RvcmFnZSwgU3RvcmFnZU5ldyk7CiAgICAgICAgICAgICBTdG9yYWdlRGVsID0KICAgICAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5KCZwaW5nQ3RsVGFibGVTdG9yYWdlLCBoY2lwdHIpOwotCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogWFhYOiBmcmVlIGl0IAotICAgICAgICAgICAgICovCisgICAgICAgICAgICBmcmVlX3BpbmdDdGxUYWJsZV9kYXRhKFN0b3JhZ2VEZWwpOworICAgICAgICAgICAgU3RvcmFnZURlbCA9IE5VTEw7CiAgICAgICAgIH0gZWxzZSBpZiAoU3RvcmFnZURlbCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogcm93IGRlbGV0aW9uLCBzbyBhZGQgaXQgYWdhaW4gCkBAIC00MjQxLDYgKzQzNDMsNyBAQAogICAgICAgICAgICAgcGluZ0N0bFRhYmxlX2FkZChTdG9yYWdlRGVsKTsKICAgICAgICAgICAgIHBpbmdSZXN1bHRzVGFibGVfYWRkKFN0b3JhZ2VEZWwpOwogICAgICAgICAgICAgcGluZ1Byb2JlSGlzdG9yeVRhYmxlX2FkZGFsbChTdG9yYWdlRGVsKTsKKyAgICAgICAgICAgIFN0b3JhZ2VEZWwgPSBOVUxMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgU3RvcmFnZVRtcC0+cGluZ0N0bFJvd1N0YXR1cyA9IG9sZF92YWx1ZTsKICAgICAgICAgfQpAQCAtNDI2MiwzNyArNDM2NSw4IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAoU3RvcmFnZURlbCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogaWYoc3RybGVuKFN0b3JhZ2VEZWwtPnBpbmdDdGxPd25lckluZGV4KSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsT3duZXJJbmRleCk7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDEgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsVGVzdE5hbWUpIT0wKQotICAgICAgICAgICAgICogU05NUF9GUkVFKFN0b3JhZ2VEZWwtPnBpbmdDdGxUZXN0TmFtZSk7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDIgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsVGFyZ2V0QWRkcmVzcykhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bFRhcmdldEFkZHJlc3MpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQzIFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bERhdGFGaWxsKSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsRGF0YUZpbGwpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ0IFxuIik7Ci0gICAgICAgICAgICAgKiBpZihzdHJsZW4oU3RvcmFnZURlbC0+cGluZ0N0bFRyYXBHZW5lcmF0aW9uKSE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsVHJhcEdlbmVyYXRpb24pOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ1IFxuIik7Ci0gICAgICAgICAgICAgKiBpZihTdG9yYWdlRGVsLT5waW5nQ3RsVHlwZUxlbiE9MCkKLSAgICAgICAgICAgICAqIFNOTVBfRlJFRShTdG9yYWdlRGVsLT5waW5nQ3RsVHlwZSk7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDYgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsRGVzY3IpIT0wKQotICAgICAgICAgICAgICogU05NUF9GUkVFKFN0b3JhZ2VEZWwtPnBpbmdDdGxEZXNjcik7Ci0gICAgICAgICAgICAgKiBwcmludGYoIkNPTU1JVDcgXG4iKTsKLSAgICAgICAgICAgICAqIGlmKHN0cmxlbihTdG9yYWdlRGVsLT5waW5nQ3RsU291cmNlQWRkcmVzcykhPTApCi0gICAgICAgICAgICAgKiBTTk1QX0ZSRUUoU3RvcmFnZURlbC0+cGluZ0N0bFNvdXJjZUFkZHJlc3MpOwotICAgICAgICAgICAgICogcHJpbnRmKCJDT01NSVQ4IFxuIik7Ci0gICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZyZWVfcGluZ0N0bFRhYmxlX2RhdGEoU3RvcmFnZURlbCk7CiAgICAgICAgICAgICBTdG9yYWdlRGVsID0gTlVMTDsKLSAgICAgICAgICAgIC8qIFN0b3JhZ2VEZWwgPSAwOyAqLwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFhYWDogZnJlZSBpdCwgaXRzIGRlYWQgCi0gICAgICAgICAgICAgKi8KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGlmIChTdG9yYWdlVG1wCiAgICAgICAgICAgICAgICAgJiYgU3RvcmFnZVRtcC0+cGluZ0N0bFJvd1N0YXR1cyA9PSBSU19DUkVBVEVBTkRHTykgewpAQCAtNDMyNyw2ICs0NDAxLDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogCiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ0NjQsMTQgKzQ1MzksMTMgQEAKICAgICAgKiBDaGVjayB0aGF0IHBhY2tldHMgPCByYXRlKnRpbWUgKyBwcmVsb2FkIAogICAgICAqLwogICAgIGlmICgoKmN1cl90aW1lKS50dl9zZWMgPT0gMCkgewotCi0gICAgICAgIGdldHRpbWVvZmRheShjdXJfdGltZSwgTlVMTCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jayhjdXJfdGltZSk7CiAgICAgICAgIHRva2VucyA9IGludGVydmFsICogKHByZWxvYWQgLSAxKTsKICAgICB9IGVsc2UgewogICAgICAgICBsb25nICAgICAgICAgICAgbnRva2VuczsKICAgICAgICAgc3RydWN0IHRpbWV2YWwgIHR2OwogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHYsIE5VTEwpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2KTsKICAgICAgICAgbnRva2VucyA9ICh0di50dl9zZWMgLSAoKmN1cl90aW1lKS50dl9zZWMpICogMTAwMCArCiAgICAgICAgICAgICAodHYudHZfdXNlYyAtICgqY3VyX3RpbWUpLnR2X3VzZWMpIC8gMTAwMDsKICAgICAgICAgaWYgKCFpbnRlcnZhbCkgewpAQCAtNDY5Niw3ICs0NzcwLDcgQEAKIAogICAgICppZGVudCA9IGdldHBpZCgpICYgMHhGRkZGOwogCi0gICAgZ2V0dGltZW9mZGF5KHN0YXJ0X3RpbWUsIE5VTEwpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jayhzdGFydF90aW1lKTsKIAogI2lmIDAKICAgICBpZiAoKmRlYWRsaW5lKSB7CkBAIC00NzgwLDExICs0ODU0LDExIEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBpZiAobnBhY2tldHMgJiYgbnJlY2VpdmVkID49IG5wYWNrZXRzKSB7Ci0gICAgICAgICAgICBwcmludGYoIm5wYWNrZXRzLG5yZWNlaXZlZD0lbGRcbiIsIG5yZWNlaXZlZCk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIm5wYWNrZXRzLG5yZWNlaXZlZD0lbGRcbiIsIG5yZWNlaXZlZCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgaWYgKGRlYWRsaW5lICYmIG5lcnJvcnMpIHsKLSAgICAgICAgICAgIHByaW50ZigiZGVhZGxpbmVcbiIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJkZWFkbGluZVxuIikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtNDc5OSw3ICs0ODczLDcgQEAKICAgICAgICAgICogU2VuZCBwcm9iZXMgc2NoZWR1bGVkIHRvIHRoaXMgdGltZS4gCiAgICAgICAgICAqLwogICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwcmludGYoInBpbmdlclxuIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgInBpbmdlclxuIikpOwogICAgICAgICAgICAgbmV4dCA9CiAgICAgICAgICAgICAgICAgcGluZ2VyKGljbXBfc29jaywgcHJlbG9hZCwgY21zZ2xlbiwgY21zZ2J1Ziwgd2hlcmV0bywKICAgICAgICAgICAgICAgICAgICAgICAgJnJ0dF9hZGRlbmQsIHVpZCwgb3B0aW9ucywgaW50ZXJ2YWwsIGRhdGFsZW4sCkBAIC00ODA3LDExICs0ODgxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGRlYWRsaW5lLCAmYWNrZWQsICZucGFja2V0cywgJm5yZWNlaXZlZCwKICAgICAgICAgICAgICAgICAgICAgICAgJm50cmFuc21pdHRlZCwgJm5lcnJvcnMsICZjb25maXJtX2ZsYWcsICZjb25maXJtLAogICAgICAgICAgICAgICAgICAgICAgICAmcGlwZXNpemUsICZjdXJfdGltZSk7Ci0gICAgICAgICAgICBwcmludGYoIjE6bmV4dD0lZFxuIiwgbmV4dCk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIjE6bmV4dD0lZFxuIiwgbmV4dCkpOwogICAgICAgICAgICAgbmV4dCA9CiAgICAgICAgICAgICAgICAgc2NoZWR1bGVfZXhpdChuZXh0LCBkZWFkbGluZSwgJm5wYWNrZXRzLCAmbnJlY2VpdmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm50cmFuc21pdHRlZCwgJnRtYXgpOwotICAgICAgICAgICAgcHJpbnRmKCIyOm5leHQ9JWRcbiIsIG5leHQpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIyOm5leHQ9JWRcbiIsIG5leHQpKTsKICAgICAgICAgfSB3aGlsZSAobmV4dCA8PSAwKTsKIAogICAgICAgICAvKgpAQCAtNDkwMCw4ICs0OTc0LDYgQEAKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBpbmdQcm9iZUhpc3RvcnlUYWJsZV9kYXRhICp0ZW1wID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKIAotCi0KICAgICAgICAgICAgICAgICAgICAgaWYgKHNlcmllcyA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmVGYWlsZWQgPSAxOwogICAgICAgICAgICAgICAgICAgICBlbHNlCkBAIC00OTA5LDEzICs0OTgxLDE3IEBACiAgICAgICAgICAgICAgICAgICAgIHNlcmllcyA9IDE7CiAgICAgICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQgPSB0ZXN0RmFpbGVkICsgMTsKIAotICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOyAgICAgLyogIHBpbmdDdGxPd25lckluZGV4ICAqLwotICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSBpdGVtLT5waW5nQ3RsVGVzdE5hbWUsIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZUxlbik7IC8qICBwaW5nQ3RsVGVzdE5hbWUgICovCisgICAgICAgICAgICAgICAgICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bE93bmVySW5kZXhMZW4pOworICAgICAgICAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxUZXN0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOwogCi0KLSAgICAgICAgICAgICAgICAgICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZXQocGluZ1Jlc3VsdHNUYWJsZVN0b3JhZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpKSA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBTdG9yYWdlTmV3ID0gaGVhZGVyX2NvbXBsZXhfZ2V0KHBpbmdSZXN1bHRzVGFibGVTdG9yYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMpOworICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAgICAgICAgICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzU2VuZFByb2JlcyA9CkBAIC01MDEwLDcgKzUwODYsNyBAQAogICAgICAgICAgICAgICAgICAgICBub3Rfb3VycyA9IDE7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoImNjPj0wLGVsc2VcbiIpOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiY2M+PTAsZWxzZVxuIikpOwogI2lmZGVmIFNPX1RJTUVTVEFNUAogICAgICAgICAgICAgICAgIGZvciAoYyA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGM7IGMgPSBDTVNHX05YVEhEUigmbXNnLCBjKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoYy0+Y21zZ19sZXZlbCAhPSBTT0xfU09DS0VUIHx8CkBAIC01MDI1LDcgKzUxMDEsNyBAQAogICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucyAmIEZfTEFURU5DWSkgfHwgcmVjdl90aW1lcCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICgob3B0aW9ucyAmIEZfTEFURU5DWSkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgIGlvY3RsKGljbXBfc29jaywgU0lPQ0dTVEFNUCwgJnJlY3ZfdGltZSkpCi0gICAgICAgICAgICAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkoJnJlY3ZfdGltZSwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnJlY3ZfdGltZSk7CiAgICAgICAgICAgICAgICAgICAgIHJlY3ZfdGltZXAgPSAmcmVjdl90aW1lOwogICAgICAgICAgICAgICAgIH0KIApAQCAtNTEyNSwxOSArNTIwMSwxNCBAQAogICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdG1wX3R2OwogICAgICAgICBtZW1jcHkoJnRtcF90diwgcHRyLCBzaXplb2YodG1wX3R2KSk7CiAKLSAgICAgIHJlc3RhbXA6CiAgICAgICAgIHR2c3ViKHR2LCAmdG1wX3R2KTsKICAgICAgICAgdHJpcHRpbWUgPSB0di0+dHZfc2VjICogMTAwMDAwMCArIHR2LT50dl91c2VjOwogICAgICAgICBpZiAodHJpcHRpbWUgPCAwKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IHRpbWUgb2YgZGF5IGdvZXMgYmFjayAoJWxkdXMpLCB0YWtpbmcgY291bnRlcm1lYXN1cmVzLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgdHJpcHRpbWUpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogaW52YWxpZCB0aW1lc3RhbXAgaW4gSUNNUCByZXNwb25zZS5cbiIpOwogICAgICAgICAgICAgdHJpcHRpbWUgPSAwOwotICAgICAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZfTEFURU5DWSkpIHsKLSAgICAgICAgICAgICAgICBnZXR0aW1lb2ZkYXkodHYsIE5VTEwpOworICAgICAgICAgICAgaWYgKCEob3B0aW9ucyAmIEZfTEFURU5DWSkpCiAgICAgICAgICAgICAgICAgb3B0aW9ucyB8PSBGX0xBVEVOQ1k7Ci0gICAgICAgICAgICAgICAgZ290byByZXN0YW1wOwotICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghY3NmYWlsZWQpIHsKICAgICAgICAgICAgICgqdHN1bSkgKz0gdHJpcHRpbWU7CkBAIC01MTc5LDMyICs1MjUwLDM0IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgaW50ICAgICAgICAgICAgIGk7CiAgICAgICAgIF9fdTggICAgICAgICAgICpjcCwgKmRwOwotICAgICAgICBwcmludGYoIiVkIGJ5dGVzIGZyb20gJXM6IGljbXBfc2VxPSV1IiwgY2MsIGZyb20sIHNlcSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIlZCBieXRlcyBmcm9tICVzOiBpY21wX3NlcT0ldSIsIGNjLCBmcm9tLAorICAgICAgICAgICAgICAgICAgICBzZXEpKTsKIAogICAgICAgICBpZiAoaG9wcyA+PSAwKQotICAgICAgICAgICAgcHJpbnRmKCIgdHRsPSVkIiwgaG9wcyk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0dGw9JWQiLCBob3BzKSk7CiAKICAgICAgICAgaWYgKGNjIDwgZGF0YWxlbiArIDgpIHsKLSAgICAgICAgICAgIHByaW50ZigiICh0cnVuY2F0ZWQpXG4iKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiICh0cnVuY2F0ZWQpXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQogICAgICAgICBpZiAodGltaW5nKSB7CiAgICAgICAgICAgICBpZiAodHJpcHRpbWUgPj0gMTAwMDAwKQotICAgICAgICAgICAgICAgIHByaW50ZigiIHRpbWU9JWxkIG1zIiwgdHJpcHRpbWUgLyAxMDAwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0aW1lPSVsZCBtcyIsIHRyaXB0aW1lIC8gMTAwMCkpOwogICAgICAgICAgICAgZWxzZSBpZiAodHJpcHRpbWUgPj0gMTAwMDApCi0gICAgICAgICAgICAgICAgcHJpbnRmKCIgdGltZT0lbGQuJTAxbGQgbXMiLCB0cmlwdGltZSAvIDEwMDAsCi0gICAgICAgICAgICAgICAgICAgICAgICh0cmlwdGltZSAlIDEwMDApIC8gMTAwKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiB0aW1lPSVsZC4lMDFsZCBtcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpcHRpbWUgLyAxMDAwLCAodHJpcHRpbWUgJSAxMDAwKSAvIDEwMCkpOwogICAgICAgICAgICAgZWxzZSBpZiAodHJpcHRpbWUgPj0gMTAwMCkKLSAgICAgICAgICAgICAgICBwcmludGYoIiB0aW1lPSVsZC4lMDJsZCBtcyIsIHRyaXB0aW1lIC8gMTAwMCwKLSAgICAgICAgICAgICAgICAgICAgICAgKHRyaXB0aW1lICUgMTAwMCkgLyAxMCk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgdGltZT0lbGQuJTAybGQgbXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaXB0aW1lIC8gMTAwMCwgKHRyaXB0aW1lICUgMTAwMCkgLyAxMCkpOwogICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHByaW50ZigiIHRpbWU9JWxkLiUwM2xkIG1zIiwgdHJpcHRpbWUgLyAxMDAwLAotICAgICAgICAgICAgICAgICAgICAgICB0cmlwdGltZSAlIDEwMDApOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiIHRpbWU9JWxkLiUwM2xkIG1zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmlwdGltZSAvIDEwMDAsIHRyaXB0aW1lICUgMTAwMCkpOwogICAgICAgICB9CiAgICAgICAgIGlmIChkdXBmbGFnKQotICAgICAgICAgICAgcHJpbnRmKCIgKERVUCEpIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiAoRFVQISkiKSk7CiAgICAgICAgIGlmIChjc2ZhaWxlZCkKLSAgICAgICAgICAgIHByaW50ZigiIChCQUQgQ0hFQ0tTVU0hKSIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIgKEJBRCBDSEVDS1NVTSEpIikpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIHRoZSBkYXRhIApAQCAtNTIxMywxMyArNTI4NiwxNCBAQAogICAgICAgICBkcCA9ICh1X2NoYXIgKikmb3V0cGFja1s4ICsgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKV07CiAgICAgICAgIGZvciAoaSA9IHNpemVvZihzdHJ1Y3QgdGltZXZhbCk7IGkgPCBkYXRhbGVuOyArK2ksICsrY3AsICsrZHApIHsKICAgICAgICAgICAgIGlmICgqY3AgIT0gKmRwKSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJcbndyb25nIGRhdGEgYnl0ZSAjJWQgc2hvdWxkIGJlIDB4JXggYnV0IHdhcyAweCV4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgaSwgKmRwLCAqY3ApOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcbndyb25nIGRhdGEgYnl0ZSAjJWQgc2hvdWxkIGJlIDB4JXggYnV0IHdhcyAweCV4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCAqZHAsICpjcCkpOwogICAgICAgICAgICAgICAgIGNwID0gKHVfY2hhciAqKSBwdHIgKyBzaXplb2Yoc3RydWN0IHRpbWV2YWwpOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IHNpemVvZihzdHJ1Y3QgdGltZXZhbCk7IGkgPCBkYXRhbGVuOyArK2ksICsrY3ApIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKChpICUgMzIpID09IHNpemVvZihzdHJ1Y3QgdGltZXZhbCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlxuIyVkXHQiLCBpKTsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIleCAiLCAqY3ApOworICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICJcbiMlZFx0IiwgaSkpOworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiV4ICIsICpjcCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTUyMjcsMTIgKzUzMDEsMTYgQEAKICAgICB9CiAKIAotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4LCBpdGVtLT5waW5nQ3RsT3duZXJJbmRleExlbik7ICAgICAvKiAgcGluZ0N0bE93bmVySW5kZXggICovCi0gICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLCBpdGVtLT5waW5nQ3RsVGVzdE5hbWVMZW4pOyAvKiAgcGluZ0N0bFRlc3ROYW1lICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpdGVtLT5waW5nQ3RsT3duZXJJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZW0tPnBpbmdDdGxPd25lckluZGV4TGVuKTsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXRlbS0+cGluZ0N0bFRlc3ROYW1lTGVuKTsKIAotCi0gICAgaWYgKChTdG9yYWdlTmV3ID0KLSAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycykpID09IE5VTEwpCisgICAgU3RvcmFnZU5ldyA9IGhlYWRlcl9jb21wbGV4X2dldChwaW5nUmVzdWx0c1RhYmxlU3RvcmFnZSwgdmFycyk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgaWYgKCFTdG9yYWdlTmV3KQogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9TVUNITkFNRTsKIAogCkBAIC01MjQ3LDYgKzUzMjUsNyBAQAogICAgIFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzUnR0U3VtT2ZTcXVhcmVzID0gKnRzdW0yOwogCiAgICAgU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlX3RpbWUgPSB0aW1lcDsKKyAgICBmcmVlKFN0b3JhZ2VOZXctPnBpbmdSZXN1bHRzTGFzdEdvb2RQcm9iZSk7CiAgICAgU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlID0KICAgICAgICAgbmV0c25tcF9tZW1kdXAoZGF0ZV9uX3RpbWUoJnRpbWVwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmU3RvcmFnZU5ldy0+cGluZ1Jlc3VsdHNMYXN0R29vZFByb2JlTGVuKSwKQEAgLTUzNTcsMjAgKzU0MzYsMjEgQEAKIAogICAgIHB1dGNoYXIoJ1xuJyk7CiAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgcHJpbnRmKCItLS0gJXMgcGluZyBzdGF0aXN0aWNzIC0tLVxuIiwgaG9zdG5hbWUpOworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLS0tICVzIHBpbmcgc3RhdGlzdGljcyAtLS1cbiIsIGhvc3RuYW1lKSk7CiAKICAgICBpZiAoKm5yZXBlYXRzKQotICAgICAgICBwcmludGYoIiwgKyVsZCBkdXBsaWNhdGVzIiwgKm5yZXBlYXRzKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsICslbGQgZHVwbGljYXRlcyIsICpucmVwZWF0cykpOwogICAgIGlmICgqbmNoZWNrc3VtKQotICAgICAgICBwcmludGYoIiwgKyVsZCBjb3JydXB0ZWQiLCAqbmNoZWNrc3VtKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsICslbGQgY29ycnVwdGVkIiwgKm5jaGVja3N1bSkpOwogICAgIGlmICgqbmVycm9ycykKLSAgICAgICAgcHJpbnRmKCIsICslbGQgZXJyb3JzIiwgKm5lcnJvcnMpOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgKyVsZCBlcnJvcnMiLCAqbmVycm9ycykpOwogICAgIGlmICgqbnRyYW5zbWl0dGVkKSB7Ci0gICAgICAgIHByaW50ZigiLCAlZCUlIGxvc3MiLAotICAgICAgICAgICAgICAgKGludCkgKCgoKGxvbmcgbG9uZykgKCgqbnRyYW5zbWl0dGVkKSAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpucmVjZWl2ZWQpKSkgKiAxMDApIC8KLSAgICAgICAgICAgICAgICAgICAgICAoKm50cmFuc21pdHRlZCkpKTsKLSAgICAgICAgcHJpbnRmKCIsIHRpbWUgJWxkbXMiLCAxMDAwICogdHYudHZfc2VjICsgdHYudHZfdXNlYyAvIDEwMDApOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgJWQlJSBsb3NzIiwKKyAgICAgICAgICAgICAgICAgICAgKGludCkgKCgoKGxvbmcgbG9uZykgKCgqbnRyYW5zbWl0dGVkKSAtCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKm5yZWNlaXZlZCkpKSAqIDEwMCkgLworICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpudHJhbnNtaXR0ZWQpKSkpOworICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIiwgdGltZSAlbGRtcyIsCisgICAgICAgICAgICAgICAgICAgIDEwMDAgKiB0di50dl9zZWMgKyB0di50dl91c2VjIC8gMTAwMCkpOwogICAgIH0KICAgICBwdXRjaGFyKCdcbicpOwogCkBAIC01MzgxLDIxICs1NDYxLDIzIEBACiAgICAgICAgICgqdHN1bTIpIC89ICgqbnJlY2VpdmVkKSArICgqbnJlcGVhdHMpOwogICAgICAgICB0bWRldiA9IGxsc3FydCgoKnRzdW0yKSAtICgqdHN1bSkgKiAoKnRzdW0pKTsKIAotICAgICAgICBwcmludGYKLSAgICAgICAgICAgICgicnR0IG1pbi9hdmcvbWF4L21kZXYgPSAlbGQuJTAzbGQvJWx1LiUwM2xkLyVsZC4lMDNsZC8lbGQuJTAzbGQgbXMiLAotICAgICAgICAgICAgICgqdG1pbikgLyAxMDAwLCAoKnRtaW4pICUgMTAwMCwKLSAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKCgqdHN1bSkgLyAxMDAwKSwgKGxvbmcpICgoKnRzdW0pICUgMTAwMCksCi0gICAgICAgICAgICAgKCp0bWF4KSAvIDEwMDAsICgqdG1heCkgJSAxMDAwLCB0bWRldiAvIDEwMDAsIHRtZGV2ICUgMTAwMCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAicnR0IG1pbi9hdmcvbWF4L21kZXYgPSAlbGQuJTAzbGQvJWx1LiUwM2xkIgorICAgICAgICAgICAgICAgICAgICAiLyVsZC4lMDNsZC8lbGQuJTAzbGQgbXMiLAorICAgICAgICAgICAgICAgICAgICAoKnRtaW4pIC8gMTAwMCwgKCp0bWluKSAlIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoKCp0c3VtKSAvIDEwMDApLCAobG9uZykgKCgqdHN1bSkgJSAxMDAwKSwKKyAgICAgICAgICAgICAgICAgICAgKCp0bWF4KSAvIDEwMDAsICgqdG1heCkgJSAxMDAwLCB0bWRldiAvIDEwMDAsCisgICAgICAgICAgICAgICAgICAgIHRtZGV2ICUgMTAwMCkpOwogICAgIH0KICAgICBpZiAoKCpwaXBlc2l6ZSkgPiAxKQotICAgICAgICBwcmludGYoIiwgcGlwZSAlZCIsICpwaXBlc2l6ZSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCBwaXBlICVkIiwgKnBpcGVzaXplKSk7CiAgICAgaWYgKCgqbnRyYW5zbWl0dGVkKSA+IDEKICAgICAgICAgJiYgKCFpbnRlcnZhbCB8fCAob3B0aW9ucyAmIChGX0ZMT09EIHwgRl9BREFQVElWRSkpKSkgewogICAgICAgICBpbnQgICAgICAgICAgICAgaXBnID0KICAgICAgICAgICAgICgxMDAwMDAwICogKGxvbmcgbG9uZykgdHYudHZfc2VjICsKICAgICAgICAgICAgICB0di50dl91c2VjKSAvICgoKm50cmFuc21pdHRlZCkgLSAxKTsKLSAgICAgICAgcHJpbnRmKCIsIGlwZy9ld21hICVkLiUwM2QvJWQuJTAzZCBtcyIsIGlwZyAvIDEwMDAsIGlwZyAlIDEwMDAsCi0gICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInBpbmdDdGxUYWJsZSIsICIsIGlwZy9ld21hICVkLiUwM2QvJWQuJTAzZCBtcyIsCisgICAgICAgICAgICAgICAgICAgIGlwZyAvIDEwMDAsIGlwZyAlIDEwMDAsCisgICAgICAgICAgICAgICAgICAgICgqcnR0KSAvIDgwMDAsICgoKnJ0dCkgLyA4KSAlIDEwMDApKTsKICAgICB9CiAgICAgcHV0Y2hhcignXG4nKTsKICAgICByZXR1cm47CkBAIC01NDE4LDE5ICs1NTAwLDE5IEBACiAgICAgICAgICAgICAoKChsb25nIGxvbmcpICgoKm50cmFuc21pdHRlZCkgLQogICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpucmVjZWl2ZWQpKSkgKiAxMDApIC8gKCpudHJhbnNtaXR0ZWQpOwogCi0gICAgZnByaW50ZihzdGRlcnIsICJcciVsZC8lbGQgcGFja2V0cywgJWQlJSBsb3NzIiwgKm50cmFuc21pdHRlZCwKLSAgICAgICAgICAgICpucmVjZWl2ZWQsIGxvc3MpOworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiXG4lbGQvJWxkIHBhY2tldHMsICVkJSUgbG9zcyIsICpudHJhbnNtaXR0ZWQsCisgICAgICAgICAgICAgICAgKm5yZWNlaXZlZCwgbG9zcykpOwogCiAgICAgaWYgKCgqbnJlY2VpdmVkKSAmJiB0aW1pbmcpIHsKICAgICAgICAgdGF2ZyA9ICgqdHN1bSkgLyAoKCpucmVjZWl2ZWQpICsgKCpucmVwZWF0cykpOwogCi0gICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICIsIG1pbi9hdmcvZXdtYS9tYXggPSAlbGQuJTAzbGQvJWx1LiUwM2xkLyVkLiUwM2QvJWxkLiUwM2xkIG1zIiwKLSAgICAgICAgICAgICAgICAoKnRtaW4pIC8gMTAwMCwgKCp0bWluKSAlIDEwMDAsIHRhdmcgLyAxMDAwLCB0YXZnICUgMTAwMCwKLSAgICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwLCAoKnRtYXgpIC8gMTAwMCwKLSAgICAgICAgICAgICAgICAoKnRtYXgpICUgMTAwMCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiLCBtaW4vYXZnL2V3bWEvbWF4ID0gJWxkLiUwM2xkLyVsdS4lMDNsZCIKKyAgICAgICAgICAgICAgICAgICAgIi8lZC4lMDNkLyVsZC4lMDNsZCBtcyIsCisgICAgICAgICAgICAgICAgICAgICgqdG1pbikgLyAxMDAwLCAoKnRtaW4pICUgMTAwMCwgdGF2ZyAvIDEwMDAsIHRhdmcgJSAxMDAwLAorICAgICAgICAgICAgICAgICAgICAoKnJ0dCkgLyA4MDAwLCAoKCpydHQpIC8gOCkgJSAxMDAwLCAoKnRtYXgpIC8gMTAwMCwKKyAgICAgICAgICAgICAgICAgICAgKCp0bWF4KSAlIDEwMDApKTsKICAgICB9Ci0gICAgZnByaW50ZihzdGRlcnIsICJcbiIpOworICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiXG4iKSk7CiB9CiAKIApAQCAtNTQ4OCwxMiArNTU3MCwxMCBAQAogICAgICAgICBpZiAob3B0aW9ucyAmIEZfRkxPT0QpCiAgICAgICAgICAgICB3cml0ZShTVERPVVRfRklMRU5PLCAiRSIsIDEpOwogICAgICAgICBlbHNlIGlmIChlLT5lZV9lcnJubyAhPSBFTVNHU0laRSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGluZzogbG9jYWwgZXJyb3I6ICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlLT5lZV9lcnJubykpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInBpbmc6IGxvY2FsIGVycm9yOiAlc1xuIiwgc3RyZXJyb3IoZS0+ZWVfZXJybm8pKTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJwaW5nOiBsb2NhbCBlcnJvcjogTWVzc2FnZSB0b28gbG9uZywgbXR1PSV1XG4iLAotICAgICAgICAgICAgICAgICAgICBlLT5lZV9pbmZvKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJwaW5nOiBsb2NhbCBlcnJvcjogTWVzc2FnZSB0b28gbG9uZywgbXR1PSV1XG4iLAorICAgICAgICAgICAgICAgICAgICAgZS0+ZWVfaW5mbyk7CiAgICAgICAgICgqbmVycm9ycykrKzsKICAgICB9IGVsc2UgaWYgKGUtPmVlX29yaWdpbiA9PSBTT19FRV9PUklHSU5fSUNNUDYpIHsKICAgICAgICAgaWYgKHJlcyA8IHNpemVvZihpY21waCkgfHwKQEAgLTU2MTUsNyArNTY5NSw3IEBACiAgICAgaWNtcGggPSAoc3RydWN0IGljbXA2X2hkciAqKSBidWY7CiAgICAgaWYgKGNjIDwgOCkgewogICAgICAgICBpZiAob3B0aW9ucyAmIEZfVkVSQk9TRSkKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicGluZzogcGFja2V0IHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLCBjYyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGluZzogcGFja2V0IHRvbyBzaG9ydCAoJWQgYnl0ZXMpXG4iLCBjYyk7CiAgICAgICAgIHJldHVybiAxOwogICAgIH0KICAgICBpZiAoaWNtcGgtPmljbXA2X3R5cGUgPT0gSUNNUDZfRUNIT19SRVBMWSkgewpAQCAtNTY2OCwxNiArNTc0OCwxNyBAQAogICAgICAgICAgICAgICAgIHdyaXRlKFNURE9VVF9GSUxFTk8sICJcYkUiLCAyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHByaW50ZigiRnJvbSAlczogaWNtcF9zZXE9JXUgIiwKLSAgICAgICAgICAgICAgICAgICBwcl9hZGRyKCZmcm9tLT5zaW42X2FkZHIsIG9wdGlvbnMpLAotICAgICAgICAgICAgICAgICAgIGljbXBoMS0+aWNtcDZfc2VxKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwaW5nQ3RsVGFibGUiLCAiRnJvbSAlczogaWNtcF9zZXE9JXUgIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByX2FkZHIoJmZyb20tPnNpbjZfYWRkciwgb3B0aW9ucyksCisgICAgICAgICAgICAgICAgICAgICAgICBpY21waDEtPmljbXA2X3NlcSkpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFdlJ3ZlIGdvdCBzb21ldGhpbmcgb3RoZXIgdGhhbiBhbiBFQ0hPUkVQTFkgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICghKG9wdGlvbnMgJiBGX1ZFUkJPU0UpIHx8IHVpZCkKICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIHByaW50ZigiRnJvbSAlczogIiwgcHJfYWRkcigmZnJvbS0+c2luNl9hZGRyLCBvcHRpb25zKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicGluZ0N0bFRhYmxlIiwgIkZyb20gJXM6ICIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcl9hZGRyKCZmcm9tLT5zaW42X2FkZHIsIG9wdGlvbnMpKSk7CiAgICAgICAgIH0KICAgICAgICAgLyogcHJfaWNtcGgoaWNtcGgtPmljbXA2X3R5cGUsIGljbXBoLT5pY21wNl9jb2RlLCBudG9obChpY21waC0+aWNtcDZfbXR1KSk7ICovCiAgICAgfQpAQCAtNTc0Miw4ICs1ODIzLDggQEAKICAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOwogCiAgICAgaWYgKCEob3B0aW9ucyAmIEZfTlVNRVJJQykpCi0gICAgICAgIGhwID0gZ2V0aG9zdGJ5YWRkcigoX191OCAqKSBhZGRyLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0lORVQ2KTsKKyAgICAgICAgaHAgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKF9fdTggKikgYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFGX0lORVQ2KTsKIAogICAgIHJldHVybiBocCA/IGhwLT5oX25hbWUgOiBwcl9hZGRyX24oYWRkcik7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nQ3RsVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oCmluZGV4IGVhOGRhMzEuLmNhNjlkMTMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdDdGxUYWJsZS5oCkBAIC0yMDYsNiArMjA2LDcgQEAKICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKICAqLwogdm9pZCAgICAgICAgICAgIGluaXRfcGluZ0N0bFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3BpbmdDdGxUYWJsZSh2b2lkKTsKIEZpbmRWYXJNZXRob2QgICB2YXJfcGluZ0N0bFRhYmxlOwogdm9pZCAgICAgICAgICAgIHBhcnNlX3BpbmdDdGxUYWJsZShjb25zdCBjaGFyICosIGNoYXIgKik7CiBTTk1QQ2FsbGJhY2sgICAgc3RvcmVfcGluZ0N0bFRhYmxlOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Byb2JlSGlzdG9yeVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYwppbmRleCAzMWZhMGI4Li43OGM3NWJlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUHJvYmVIaXN0b3J5VGFibGUuYwpAQCAtNTAsMTAgKzUwLDE0IEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MCwgMSwgNCB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIHBpbmdQcm9iZUhpc3RvcnlUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllSRVNQT05TRSwgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllTVEFUVVMsICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllMQVNUUkMsICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKLSAgICB7Q09MVU1OX1BJTkdQUk9CRUhJU1RPUllUSU1FLCAgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3BpbmdQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fQorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWVJFU1BPTlNFLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgMn19LAorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWVNUQVRVUywgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWUxBU1RSQywgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fUElOR1BST0JFSElTVE9SWVRJTUUsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcGluZ1Byb2JlSGlzdG9yeVRhYmxlLCAyLCB7MSwgNX19CiB9OwogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9waW5nL3BpbmdSZXN1bHRzVGFibGUuYwppbmRleCAxZjcxZmQ1Li4xNDQ1ZDg2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vcGluZy9waW5nUmVzdWx0c1RhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3BpbmcvcGluZ1Jlc3VsdHNUYWJsZS5jCkBAIC00OSwxNiArNDksMjYgQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgwLCAxLCAzIH07CiAKIHN0cnVjdCB2YXJpYWJsZTIgcGluZ1Jlc3VsdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX1BJTkdSRVNVTFRTT1BFUlNUQVRVUywgICAgICAgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDF9fSwKLSAgICB7Q09MVU1OX1BJTkdSRVNVTFRTSVBUQVJHRVRBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfcGluZ1Jlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKLSAgICB7Q09MVU1OX1BJTkdSRVNVTFRTSVBUQVJHRVRBRERSRVNTLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU01JTlJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU01BWFJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU0FWRVJBR0VSVFQsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU1BST0JFUkVTUE9OU0VTLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU1NFTlRQUk9CRVMsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU1JUVFNVTU9GU1FVQVJFUywgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9QSU5HUkVTVUxUU0xBU1RHT09EUFJPQkUsICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAxMH19CisgICAge0NPTFVNTl9QSU5HUkVTVUxUU09QRVJTVEFUVVMsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAxfX0sCisgICAge0NPTFVNTl9QSU5HUkVTVUxUU0lQVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3BpbmdSZXN1bHRzVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0NPTFVNTl9QSU5HUkVTVUxUU0lQVEFSR0VUQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgM319LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNNSU5SVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNNQVhSVFQsICAgICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNX19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNBVkVSQUdFUlRULCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgNn19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNQUk9CRVJFU1BPTlNFUywgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNTRU5UUFJPQkVTLCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgOH19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNSVFRTVU1PRlNRVUFSRVMsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgOX19LAorICAgIHtDT0xVTU5fUElOR1JFU1VMVFNMQVNUR09PRFBST0JFLCAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9waW5nUmVzdWx0c1RhYmxlLCAyLCB7MSwgMTB9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmMKaW5kZXggMmU2N2I3My4uMGNiZGJjNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29uZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvbmYuYwpAQCAtNCwxMiArNCwxNiBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgImRpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaCIKICNpbmNsdWRlICJkaXNtYW4vc2NoZWR1bGUvc2NoZWRDb25mLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ190aW1lX3RvX3NlY3MpCisKIHN0YXRpYyBpbnQgc2NoZWRFbnRyaWVzOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjaGVkQ29uZiBtb2R1bGUgKi8KQEAgLTUxLDcgKzU1LDcgQEAKIHsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgICAqcm93OwogICAgIHN0cnVjdCBzY2hlZFRhYmxlX2VudHJ5ICplbnRyeTsKLSAgICBjaGFyICAgYnVmWzI0XTsKKyAgICBjaGFyICAgYnVmWzI0XSwgdG1wYnVmW1NQUklOVF9NQVhfTEVOXTsKICAgICBsb25nICAgZnJlcXVlbmN5OwogICAgIGxvbmcgICB2YWx1ZTsKICAgICBzaXplX3QgdG1waW50OwpAQCAtNjUsNyArNjksMTMgQEAKICAgICAvKgogICAgICAqICBQYXJzZSB0aGUgY29uZmlndXJlIGRpcmVjdGl2ZSBsaW5lCiAgICAgICovCi0gICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fSU5URUdFUiwgICBsaW5lLCAmZnJlcXVlbmN5LCAmdG1waW50KTsKKyAgICBsaW5lID0gY29weV9ud29yZChsaW5lLCB0bXBidWYsIHNpemVvZih0bXBidWYpKTsKKyAgICBmcmVxdWVuY3kgPSBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3ModG1wYnVmKTsKKyAgICBpZiAoZnJlcXVlbmN5ID09IC0xKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIklsbGVnYWwgZnJlcXVlbmN5IHNwZWNpZmllZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCiAgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fT0JKRUNUX0lELCBsaW5lLCAmdmFyX3B0ciwgICAmdmFyX2xlbik7CiAgICAgaWYgKHZhcl9sZW4gPT0gMCkgewogICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIHNwZWNpZmljYXRpb24gZm9yIHNjaGVkVmFyaWFibGUiKTsKQEAgLTc0LDExICs4NCwxMSBAQAogICAgIC8qCiAgICAgICogU2tpcCBvdmVyIG9wdGlvbmFsIGFzc2lnbm1lbnQgaW4gInZhciA9IHZhbHVlIgogICAgICAqLwotICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKmxpbmUpKQorICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpsaW5lKSkpCiAgICAgICAgIGxpbmUrKzsKICAgICBpZiAobGluZSAmJiAqbGluZSA9PSAnPScgKSB7CiAgICAgICAgIGxpbmUrKzsKLSAgICAgICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgqbGluZSkpIHsKKyAgICAgICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmxpbmUpKSkgewogICAgICAgICAgICAgbGluZSsrOwogICAgICAgICB9CiAgICAgfQpAQCAtMTE5LDcgKzEyOSw3IEBACiBfc2NoZWRfY29udmVydF9iaXRzKCBjaGFyICpjcm9uX3NwZWMsIGNoYXIgKmJpdF9idWYsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgIGJpdF9idWZfbGVuLCBpbnQgbWF4X3ZhbCwgaW50IHN0YXJ0QXQxICkgewogICAgIGNoYXIgKmNwID0gY3Jvbl9zcGVjOwotICAgIGNoYXIgYltdID0gezB4ODAsIDB4NDAsIDB4MjAsIDB4MTAsIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDF9OworICAgIHVfY2hhciBiW10gPSB7MHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwgMHgwOCwgMHgwNCwgMHgwMiwgMHgwMX07CiAgICAgaW50IHZhbCwgbWFqb3IsIG1pbm9yOwogICAgIGludCBvdmVyc2hvb3Q7CiAKQEAgLTIxOSwxMSArMjI5LDExIEBACiAgICAgLyoKICAgICAgKiBTa2lwIG92ZXIgb3B0aW9uYWwgYXNzaWdubWVudCBpbiAidmFyID0gdmFsdWUiCiAgICAgICovCi0gICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgqbGluZSkpCisgICAgd2hpbGUgKGxpbmUgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKmxpbmUpKSkKICAgICAgICAgbGluZSsrOwogICAgIGlmICggKmxpbmUgPT0gJz0nICkgewogICAgICAgICBsaW5lKys7Ci0gICAgICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKmxpbmUpKSB7CisgICAgICAgIHdoaWxlIChsaW5lICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpsaW5lKSkpIHsKICAgICAgICAgICAgIGxpbmUrKzsKICAgICAgICAgfQogICAgIH0KQEAgLTM1Nyw3ICszNjcsNyBAQAogewogICAgIGNoYXIgICAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZdOwogICAgIGNoYXIgICAgICAgICAgICAgIHRpbWVfYml0c1syMl07ICAvKiBzY2hlZFdlZWtEYXkuLnNjaGVkTWludXRlICovCi0gICAgY2hhciAgICAgICAgICAgICAqY3B0cjsKKyAgICBjaGFyICAgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgdm9pZCAgICAgICAgICAgICAqdnA7CiAgICAgc2l6ZV90ICAgICAgICAgICAgdGludDsKICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OwpAQCAtMzg3LDEyICszOTcsMTIgQEAKICAgICAgICAgc3RyY3B5KGxpbmUsICJfc2NoZWRUYWJsZSAiKTsKICAgICAgICAgY3B0ciA9IGxpbmUgKyBzdHJsZW4obGluZSk7CiAKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZE93bmVyOyAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZE5hbWU7ICAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZERlc2NyOyAgICAgdGludCA9IHN0cmxlbiggdnAgKTsKLSAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZE93bmVyOyAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZE5hbWU7ICAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKKyAgICAgICAgY3AgICA9IGVudHJ5LT5zY2hlZERlc2NyOyAgICAgdGludCA9IHN0cmxlbiggY3AgKTsKKyAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09DVEVUX1NUUiwgY3B0ciwgJmNwLCAgJnRpbnQgKTsKICAgICAgICAgdGludCA9IGVudHJ5LT5zY2hlZEludGVydmFsOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fVU5TSUdORUQsICBjcHRyLCAmdGludCwgTlVMTCApOwogCkBAIC00MDgsOCArNDE4LDggQEAKICAgICAgICAgdnAgICA9IHRpbWVfYml0czsgICAgdGludCA9IDIyOwogICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICZ0aW50ICk7CiAKLSAgICAgICAgdnAgICA9IGVudHJ5LT5zY2hlZENvbnRleHROYW1lOyB0aW50ID0gc3RybGVuKCB2cCApOwotICAgICAgICBjcHRyID0gcmVhZF9jb25maWdfc3RvcmVfZGF0YShBU05fT0NURVRfU1RSLCBjcHRyLCAmdnAsICAmdGludCApOworICAgICAgICBjcCAgID0gZW50cnktPnNjaGVkQ29udGV4dE5hbWU7IHRpbnQgPSBzdHJsZW4oIGNwICk7CisgICAgICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9PQ1RFVF9TVFIsIGNwdHIsICZjcCwgICZ0aW50ICk7CiAgICAgICAgIHZwICAgPSBlbnRyeS0+c2NoZWRWYXJpYWJsZTsKICAgICAgICAgdGludCA9IGVudHJ5LT5zY2hlZFZhcmlhYmxlX2xlbjsKICAgICAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3N0b3JlX2RhdGEoQVNOX09CSkVDVF9JRCwgY3B0ciwgJnZwLCAgJnRpbnQgKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuYwppbmRleCA0MDU1ZDQ2Li5jM2RiMzRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkQ29yZS5jCkBAIC00LDEzICs0LDM3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgImRpc21hbi9zY2hlZHVsZS9zY2hlZENvcmUuaCIKICNpbmNsdWRlICJ1dGlsaXRpZXMvaXF1ZXJ5LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlxdWVyeSkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNjaGVkX25leHRyb3d0aW1lLCBuZXRzbm1wX3VudXNlZCkKKwogbmV0c25tcF90ZGF0YSAqc2NoZWR1bGVfdGFibGU7CiAKKworI2lmICFkZWZpbmVkKEhBVkVfTE9DQUxUSU1FX1IpICYmICFkZWZpbmVkKGxvY2FsdGltZV9yKQorLyoKKyAqIGxvY2FsdGltZV9yKCkgcmVwbGFjZW1lbnQgZm9yIG9sZGVyIE1pbkdXIHZlcnNpb25zLgorICogTm90ZTogdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdGhyZWFkLXNhZmUsIHdoaWxlIGl0IHNob3VsZC4KKyAqLworc3RydWN0IHRtICAgICAgKgorbG9jYWx0aW1lX3IoY29uc3QgdGltZV90ICogdGltZXIsIHN0cnVjdCB0bSAqcmVzdWx0KQoreworICAgIHN0cnVjdCB0bSAgICAgICpyZXN1bHRfcDsKKworICAgIHJlc3VsdF9wID0gbG9jYWx0aW1lKHRpbWVyKTsKKyAgICBpZiAocmVzdWx0ICYmIHJlc3VsdF9wKQorICAgICAgICAqcmVzdWx0ID0gKnJlc3VsdF9wOworICAgIHJldHVybiByZXN1bHRfcDsKK30KKyNlbmRpZgorCisKICAgICAvKgogICAgICAqIEluaXRpYWxpemUgdGhlIGNvbnRhaW5lciBmb3IgdGhlIHNjaGVkdWxlIHRhYmxlLAogICAgICAqIHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggaW5pdGlhbGlzYXRpb24gcm91dGluZSBpcyBjYWxsZWQgZmlyc3QuCkBAIC0yMiw3ICs0Niw3IEBACiAgICAgaWYgKCFzY2hlZHVsZV90YWJsZSkgewogICAgICAgICBzY2hlZHVsZV90YWJsZSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJzY2hlZFRhYmxlIiwgMCk7CiAgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6aW5pdCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIHNjaGVkdWxlIGNvbnRhaW5lcigleClcbiIsIHNjaGVkdWxlX3RhYmxlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiY3JlYXRlIHNjaGVkdWxlIGNvbnRhaW5lciglcClcbiIsIHNjaGVkdWxlX3RhYmxlKSk7CiAgICAgfQogfQogCkBAIC01MywxMyArNzcsMTMgQEAKICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICJtaXNzaW5nIGVudHJ5XG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgZW50cnktPnNjaGVkTGFzdFJ1biA9IHRpbWUoMCk7CisgICAgZW50cnktPnNjaGVkTGFzdFJ1biA9IHRpbWUoTlVMTCk7CiAgICAgZW50cnktPnNjaGVkVHJpZ2dlcnMrKzsKIAogICAgIERFQlVHTVNHVEwoKCAiZGlzbWFuOnNjaGVkdWxlOmNhbGxiYWNrIiwgImFzc2lnbm1lbnQgIikpOwogICAgIERFQlVHTVNHT0lEKCgiZGlzbWFuOnNjaGVkdWxlOmNhbGxiYWNrIiwgZW50cnktPnNjaGVkVmFyaWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2NoZWRWYXJpYWJsZV9sZW4pKTsKLSAgICBERUJVR01TRygoICAgImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICIgPSAlZFxuIiwgZW50cnktPnNjaGVkVmFsdWUpKTsKKyAgICBERUJVR01TRygoICAgImRpc21hbjpzY2hlZHVsZTpjYWxsYmFjayIsICIgPSAlbGRcbiIsIGVudHJ5LT5zY2hlZFZhbHVlKSk7CiAKICAgICBtZW1zZXQoJmFzc2lnbiwgMCwgc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOwogICAgIHNubXBfc2V0X3Zhcl9vYmppZCgmYXNzaWduLCBlbnRyeS0+c2NoZWRWYXJpYWJsZSwgZW50cnktPnNjaGVkVmFyaWFibGVfbGVuKTsKQEAgLTg0LDEwICsxMDgsMTAgQEAKICAgICAgKiBJbnRlcm5hbCB1dGlsaXR5IHJvdXRpbmVzIHRvIGhlbHAgaW50ZXJwcmV0CiAgICAgICogIGNhbGVuZGFyLWJhc2VkIHNjaGVkdWxlIGJpdCBzdHJpbmdzCiAgICAgICovCi1zdGF0aWMgY2hhciBfbWFza3NbXSA9IHsgLyogMHhmZiwgKi8gMHg3ZiwgMHgzZiwgMHgxZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAweDBmLCAweDA3LCAweDAzLCAweDAxLCAweDAwIH07Ci1zdGF0aWMgY2hhciBfYml0c1tdICA9IHsgMHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAweDA4LCAweDA0LCAweDAyLCAweDAxIH07CitzdGF0aWMgdV9jaGFyIF9tYXNrc1tdID0geyAvKiAweGZmLCAqLyAweDdmLCAweDNmLCAweDFmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwZiwgMHgwNywgMHgwMywgMHgwMSwgMHgwMCB9Oworc3RhdGljIHVfY2hhciBfYml0c1tdICA9IHsgMHg4MCwgMHg0MCwgMHgyMCwgMHgxMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDgsIDB4MDQsIDB4MDIsIDB4MDEgfTsKIAogLyoKICAqIEFyZSBhbnkgb2YgdGhlIGJpdHMgc2V0PwpAQCAtMTQ2LDcgKzE3MCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIExvb2sgZm9yIHRoZSBmaXJzdCBiaXQgdGhhdCdzIHNldAogICAgICAgICAgKi8KLSAgICBmb3IgKCBpPTA7IGk8bGVuOyBpKysgKSB7CisgICAgZm9yICggaT0wOyBpPChpbnQpbGVuOyBpKysgKSB7CiAgICAgICAgIGlmICggYnVmW2ldICE9IDAgKSB7CiAgICAgICAgICAgICBtYWpvciA9IGkqODsKICAgICAgICAgICAgIGZvciAoIGo9MDsgajw4OyBqKysgKSB7CkBAIC0xNjQsOSArMTg4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMSwgMzAsIDMxLCAzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzMCwgMzEsIDMwLCAzMSwgMjkgfTsKIAotc3RhdGljIGNoYXIgX3RydW5jYXRlW10gPSB7IDB4ZmUsIDB4ZjAsIDB4ZmUsIDB4ZmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhmYywgMHhmZSwgMHhmZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGZjLCAweGZlLCAweGZjLCAweGZlLCAweGY4IH07CitzdGF0aWMgdV9jaGFyIF90cnVuY2F0ZVtdID0geyAweGZlLCAweGYwLCAweGZlLCAweGZjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhmZSwgMHhmYywgMHhmZSwgMHhmZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZmMsIDB4ZmUsIDB4ZmMsIDB4ZmUsIDB4ZjggfTsKIAogLyoKICAqIFdoYXQgaXMgdGhlIG5leHQgZGF5IHdpdGggYSByZWxldmFudCBiaXQgc2V0PwpAQCAtMjM5LDIwICsyNjMsNiBAQAogfQogCiAKLSNpZm5kZWYgSEFWRV9MT0NBTFRJTUVfUgotc3RydWN0IHRtICoKLWxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KSB7Ci0gICAgc3RydWN0IHRtICp0bXA7Ci0KLSAgICB0bXAgPSBsb2NhbHRpbWUoIHRpbWVwICk7Ci0gICAgaWYgKCB0bXAgJiYgcmVzdWx0ICkgewotICAgICAgICBtZW1jcHkoIHJlc3VsdCwgdG1wLCBzaXplb2Yoc3RydWN0IHRtKSk7Ci0gICAgfQotCi0gICAgcmV0dXJuICh0bXAgPyByZXN1bHQgOiBOVUxMICk7Ci19Ci0jZW5kaWYKLQogLyoKICAqIGRldGVybWluZSB0aGUgdGltZSBmb3IgdGhlIG5leHQgc2NoZWR1bGVkIGFjdGlvbiBvZiBhIGdpdmVuIGVudHJ5CiAgKi8KQEAgLTI5MSwxNiArMzAxLDE1IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biA9IG5vdyArIGVudHJ5LT5zY2hlZEludGVydmFsOwogICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJwZXJpb2RpYzogKCVkKSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOworICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAicGVyaW9kaWM6ICglbGQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5LT5zY2hlZE5leHRSdW4sIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgU0NIRURfVFlQRV9PTkVTSE9UOgogICAgICAgICBpZiAoIGVudHJ5LT5zY2hlZExhc3RSdW4gKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAib25lLXNob3Q6IGV4cGlyZWQgKCVkKSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpc21hbjpzY2hlZHVsZTp0aW1lIiwgIm9uZS1zaG90OiBleHBpcmVkICglbGQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBlbnRyeS0+c2NoZWROZXh0UnVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY3RpbWUoJmVudHJ5LT5zY2hlZE5leHRSdW4pKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KQEAgLTMzNyw4ICszNDYsOCBAQAogICAgICAgICAgKiAgICB0aGUgZmlyc3Qgc3BlY2lmaWVkIGRheSAoaW4gdGhhdCBtb250aCkKICAgICAgICAgICovCiAKLSAgICAgICAgbG9jYWx0aW1lX3IoICZub3csICZub3dfdG0gKTsKLSAgICAgICAgbG9jYWx0aW1lX3IoICZub3csICZuZXh0X3RtICk7CisgICAgICAgICh2b2lkKSBsb2NhbHRpbWVfciggJm5vdywgJm5vd190bSApOworICAgICAgICAodm9pZCkgbG9jYWx0aW1lX3IoICZub3csICZuZXh0X3RtICk7CiAKICAgICAgICAgbmV4dF90bS50bV9tb249LTE7CiAgICAgICAgIG5leHRfdG0udG1fbWRheT0tMTsKQEAgLTQxNCwxMyArNDIzLDEyIEBACiAgICAgICAgICAqICduZXh0X3RtJyBub3cgY29udGFpbnMgdGhlIHRpbWUgZm9yIHRoZSBuZXh0IHNjaGVkdWxlZCBydW4KICAgICAgICAgICovCiAgICAgICAgIGVudHJ5LT5zY2hlZE5leHRSdW4gPSBta3RpbWUoICZuZXh0X3RtICk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJjYWxlbmRhcjogKCVkKSAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNjaGVkTmV4dFJ1biwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOworICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAiY2FsZW5kYXI6ICglbGQpICVzIiwKKyAgICAgICAgICAgICAgICAgICAgKGxvbmcpIGVudHJ5LT5zY2hlZE5leHRSdW4sIGN0aW1lKCZlbnRyeS0+c2NoZWROZXh0UnVuKSkpOwogICAgICAgICByZXR1cm47CiAKICAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgiZGlzbWFuOnNjaGVkdWxlOnRpbWUiLCAidW5rbm93biB0eXBlICglZClcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6dGltZSIsICJ1bmtub3duIHR5cGUgKCVsZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c2NoZWRUeXBlKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC00MzAsMTEgKzQzOCwxMyBAQAogICAgIHJldHVybjsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NDSEVEX05FWFRST1dUSU1FCiB2b2lkCiBzY2hlZF9uZXh0Um93VGltZSggbmV0c25tcF90ZGF0YV9yb3cgKnJvdyApCiB7CiAgICAgc2NoZWRfbmV4dFRpbWUoKHN0cnVjdCBzY2hlZFRhYmxlX2VudHJ5ICopIHJvdy0+ZGF0YSApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0NIRURfTkVYVFJPV1RJTUUgKi8KIAogLyoKICAqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmMKaW5kZXggYjhlMzZkNy4uYmJhNDhmZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5jCkBAIC03LDEyICs3LDI3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKICNpbmNsdWRlICJkaXNtYW4vc2NoZWR1bGUvc2NoZWRDb3JlLmgiCiAjaW5jbHVkZSAiZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXF1ZXJ5X3BkdV9zZXNzaW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3VpbnQpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKIC8qKiBJbml0aWFsaXplcyB0aGUgc2NoZWRUYWJsZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfc2NoZWRUYWJsZSh2b2lkKQpAQCAtMjAsNyArMzUsNiBAQAogICAgIHN0YXRpYyBvaWQgICAgICBzY2hlZFRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA2MywgMSwgMiB9OwogICAgIHNpemVfdCAgICAgICAgICBzY2hlZFRhYmxlX29pZF9sZW4gPSBPSURfTEVOR1RIKHNjaGVkVGFibGVfb2lkKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogICAgIERFQlVHTVNHVEwoKCJkaXNtYW46c2NoZWR1bGU6aW5pdCIsICJJbml0aWFsaXppbmcgdGFibGVcbiIpKTsKICAgICAvKgpAQCAtNDgsNiArNjIsMTQgQEAKICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgc2NoZWR1bGVfdGFibGUsIHRhYmxlX2luZm8pOwogfQogCit2b2lkCitzaHV0ZG93bl9zY2hlZFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQogCiAvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHNjaGVkVGFibGUgdGFibGUgKi8KIGludApAQCAtMTY1LDcgKzE4Nyw3IEBACiAgICAgICAgICAgICAgICAgICogQ29udmVydCAnc2NoZWRMYXN0RmFpbGVkJyB0aW1lc3RhbXAKICAgICAgICAgICAgICAgICAgKiAgIGludG8gRGF0ZUFuZFRpbWUgc3RyaW5nCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY3AgPSBkYXRlX25fdGltZSggJmVudHJ5LT5zY2hlZExhc3RGYWlsZWQsICZsZW4gKTsKKyAgICAgICAgICAgICAgICBjcCA9IChjaGFyICopIGRhdGVfbl90aW1lKCAmZW50cnktPnNjaGVkTGFzdEZhaWxlZCwgJmxlbiApOwogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwLCBsZW4pOwogICAgICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi9zY2hlZHVsZS9zY2hlZFRhYmxlLmgKaW5kZXggZWZkMWYyZS4uNTIwMzNiYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3NjaGVkdWxlL3NjaGVkVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vc2NoZWR1bGUvc2NoZWRUYWJsZS5oCkBAIC04LDYgKzgsNyBAQAogICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAogICovCiB2b2lkICAgICAgICAgICAgaW5pdF9zY2hlZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjaGVkVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY2hlZFRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jCmluZGV4IDQyZjI0ZGMuLmI5MjVjNWUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVDdGxUYWJsZS5jCkBAIC0xOCwxMCArMTgsMTUgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPHB0aHJlYWQuaD4KICNpbmNsdWRlIDxtYXRoLmg+CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWFkZXJfY29tcGxleF9maW5kX2VudHJ5KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAjaW5jbHVkZSAidHJhY2VSb3V0ZUN0bFRhYmxlLmgiCiAjaW5jbHVkZSAidHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5oIgogI2luY2x1ZGUgInRyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5oIgpAQCAtNDEsMzEgKzQ2LDU2IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KIAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRBUkdFVEFERFJFU1NUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgM319LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRBUkdFVEFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEJZUEFTU1JPVVRFVEFCTEUsICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERBVEFTSVpFLCAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVElNRU9VVCwgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDd9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExQUk9CRVNQRVJIT1AsIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgOH19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFBPUlQsICAgICAgICAgQVNOX1VOU0lHTkVELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMTUFYVFRMLCAgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDEwfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMRFNGSUVMRCwgICAgICBBU05fVU5TSUdORUQsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDExfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMU09VUkNFQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxMn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFNPVVJDRUFERFJFU1MsICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExJRklOREVYLCAgICAgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTR9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNSVNDT1BUSU9OUywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTV9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhGQUlMVVJFUywgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTZ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExET05URlJBR01FTlQsICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTd9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExJTklUSUFMVFRMLCAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTh9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExGUkVRVUVOQ1ksICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTl9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExTVE9SQUdFVFlQRSwgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjB9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExBRE1JTlNUQVRVUywgICBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjF9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExERVNDUiwgICAgICAgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjJ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhST1dTLCAgICAgIEFTTl9VTlNJR05FRCwgUldSSVRFLCB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUUkFQR0VORVJBVElPTiwgIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMQ1JFQVRFSE9QU0VOVFJJRVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRZUEUsICAgICAgICBBU05fT0JKRUNUX0lELCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyNn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFJPV1NUQVRVUywgICAgIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyN319CisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVEFSR0VUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVEFSR0VUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMQllQQVNTUk9VVEVUQUJMRSwgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMREFUQVNJWkUsICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExUSU1FT1VULCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFBST0JFU1BFUkhPUCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMUE9SVCwgICAgICAgICBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDl9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExNQVhUVEwsICAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTB9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExEU0ZJRUxELCAgICAgIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMTF9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExTT1VSQ0VBRERSRVNTVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDEyfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMU09VUkNFQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTElGSU5ERVgsICAgICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxNH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1JU0NPUFRJT05TLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxNX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1BWEZBSUxVUkVTLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxNn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERPTlRGUkFHTUVOVCwgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTElOSVRJQUxUVEwsICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxOH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEZSRVFVRU5DWSwgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAxOX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFNUT1JBR0VUWVBFLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyMH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTEFETUlOU1RBVFVTLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyMX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTERFU0NSLCAgICAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyMn19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTE1BWFJPV1MsICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl90cmFjZVJvdXRlQ3RsVGFibGUsIDIsIHsxLCAyM319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURUNUTFRSQVBHRU5FUkFUSU9OLCAgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHJhY2VSb3V0ZUN0bFRhYmxlLCAyLCB7MSwgMjR9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVDVExDUkVBVEVIT1BTRU5UUklFUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMVFlQRSwgICAgICAgIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFQ1RMUk9XU1RBVFVTLCAgICAgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3RyYWNlUm91dGVDdGxUYWJsZSwgMiwgezEsIDI3fX0KIAogfTsKIApAQCAtMTI2LDcgKzE1Niw4IEBACiAgICAgICAgIGV4aXQoMSk7CiAgICAgfQogCi0gICAgYnplcm8oaG9zdCwgc2l6ZW9mKGNoYXIpICogKGl0ZW0tPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzTGVuICsgMSkpOworICAgIG1lbXNldChob3N0LCAnXDAnLAorCSAgIHNpemVvZihjaGFyKSAqIChpdGVtLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzc0xlbiArIDEpKTsKICAgICBzdHJjcHkoaG9zdCwgaXRlbS0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MpOwogICAgIGhvc3RbaXRlbS0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3NMZW5dID0gJ1wwJzsKIApAQCAtMjE5LDcgKzI1MCw3IEBACiAgICAgICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CiAgICAgICAgIC8qIHN0cnVjdCBob3N0ZW52IGhwOyAqLwogICAgICAgICBjaGFyICAgICAgICAgICAgcGFbNjRdOwotICAgICAgICBiemVybyhwYSwgNjQpOworICAgICAgICBtZW1zZXQocGEsICdcMCcsIDY0KTsKIAogICAgICAgICB0by0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKICAgICAgICAgdG8tPnNpbjZfcG9ydCA9IGh0b25zKDMzNDM0KTsKQEAgLTIzNCw3ICsyNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwogICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBiemVybyhTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwKKyAgICAgICAgICAgIG1lbXNldChTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwgJ1wwJywKICAgICAgICAgICAgICAgICAgIHNpemVvZihjaGFyKSAqIChzdHJsZW4oaG9zdCkgKyAxKSk7CiAgICAgICAgICAgICBtZW1jcHkoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZVJlc3VsdHNJcFRndEFkZHIsIGhvc3QsCiAgICAgICAgICAgICAgICAgICAgc3RybGVuKGhvc3QpICsgMSk7CkBAIC0yNTUsNyArMjg2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CiAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJ6ZXJvKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVSZXN1bHRzSXBUZ3RBZGRyLAorICAgICAgICAgICAgICAgIG1lbXNldChTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwgJ1wwJywKICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhcikgKiAoc3RybGVuKGhvc3QpICsgMSkpOwogICAgICAgICAgICAgICAgIG1lbWNweShTdG9yYWdlVG1wLT50cmFjZVJvdXRlUmVzdWx0c0lwVGd0QWRkciwgaG9zdG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihob3N0bmFtZSkgKyAxKTsKQEAgLTY5Miw3ICs3MjMsNyBAQAogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4LCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleExlbik7ICAgLyogdHJhY2VSb3V0ZUN0bE93bmVySW5kZXggKi8KICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWUsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZUxlbik7ICAgICAgIC8qIHRyYWNlUm91dGVDdGxPcGVyYXRpb25OYW1lICovCiAKLSAgICBiemVybyhuZXdvaWQsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOwogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXJzKTsKIAogICAgIGZvciAoaGNpbGFzdCA9IGhjaXB0cjIgPSB0cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGVTdG9yYWdlOwpAQCAtMTMyNiw3ICsxMzU3LDcgQEAKICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJzLCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCAoY2hhciAqKSB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsT3duZXJJbmRleCwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXhMZW4pOyAgIC8qIHRyYWNlUm91dGVDdGxPd25lckluZGV4ICovCiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lLCB0aGVkYXRhLT50cmFjZVJvdXRlQ3RsVGVzdE5hbWVMZW4pOyAgICAgICAvKiB0cmFjZVJvdXRlQ3RsVGVzdE5hbWUgKi8KIAotICAgIGJ6ZXJvKG5ld29pZCwgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCiAgICAgZm9yIChoY2lwdHIyID0gdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZVN0b3JhZ2U7IGhjaXB0cjIgIT0gTlVMTDsKQEAgLTEzNTcsNyArMTM4OCw3IEBACiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXgsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4TGVuKTsgICAvKiB0cmFjZVJvdXRlQ3RsT3duZXJJbmRleCAqLwogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZSwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lTGVuKTsgICAgICAgLyogdHJhY2VSb3V0ZUN0bE9wZXJhdGlvbk5hbWUgKi8KIAotICAgIGJ6ZXJvKG5ld29pZCwgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CisgICAgbWVtc2V0KG5ld29pZCwgJ1wwJywgc2l6ZW9mKG9pZCkgKiBNQVhfT0lEX0xFTik7CiAKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwgTlVMTCwgMCwgdmFycyk7CiAKQEAgLTEzODgsNyArMTQxOSw3IEBACiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFycywgTlVMTCwgMCwgQVNOX09DVEVUX1NUUiwgKGNoYXIgKikgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bE93bmVySW5kZXgsIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxPd25lckluZGV4TGVuKTsgICAvKiB0cmFjZVJvdXRlQ3RsT3duZXJJbmRleCAqLwogICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZhcnMsIE5VTEwsIDAsIEFTTl9PQ1RFVF9TVFIsIChjaGFyICopIHRoZWRhdGEtPnRyYWNlUm91dGVDdGxUZXN0TmFtZSwgdGhlZGF0YS0+dHJhY2VSb3V0ZUN0bFRlc3ROYW1lTGVuKTsgICAgICAgLyogdHJhY2VSb3V0ZUN0bFRlc3ROYW1lICovCiAKLSAgICBiemVybyhuZXdvaWQsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOworICAgIG1lbXNldChuZXdvaWQsICdcMCcsIHNpemVvZihvaWQpICogTUFYX09JRF9MRU4pOwogCiAgICAgaGVhZGVyX2NvbXBsZXhfZ2VuZXJhdGVfb2lkKG5ld29pZCwgJm5ld29pZF9sZW4sIE5VTEwsIDAsIHZhcnMpOwogCkBAIC0xNDQ3LDcgKzE0NzgsNyBAQAogICAgIC8qCiAgICAgICogdHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MgCiAgICAgICovCi0gICAgYnplcm8obmV3b2lkLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKKyAgICBtZW1zZXQobmV3b2lkLCAnXDAnLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQobmV3b2lkLCAmbmV3b2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzcykgLwpAQCAtMTQ2MSw3ICsxNDkyLDcgQEAKIAogICAgIGZvciAoaGNpcHRyID0gdHJhY2VSb3V0ZUhvcHNUYWJsZVN0b3JhZ2U7IGhjaXB0ciAhPSBOVUxMOwogICAgICAgICAgaGNpcHRyID0gaGNpcHRyLT5uZXh0KSB7Ci0gICAgICAgIGJ6ZXJvKGluZGV4b2lkLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKKwltZW1zZXQoaW5kZXhvaWQsICdcMCcsIE1BWF9PSURfTEVOICogc2l6ZW9mKG9pZCkpOwogICAgICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQoaW5kZXhvaWQsICZpbmRleG9pZF9sZW4sIE5VTEwsIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzKTsKICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUKQEAgLTE0NzAsMTMgKzE1MDEsMTMgQEAKICAgICAgICAgICAgICAgICAoc3RydWN0IHRyYWNlUm91dGVIb3BzVGFibGVfZGF0YSAqKQogICAgICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dldF9mcm9tX29pZCh0cmFjZVJvdXRlSG9wc1RhYmxlU3RvcmFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGNpcHRyLT5uYW1lLCBoY2lwdHItPm5hbWVsZW4pOwotICAgICAgICAgICAgYnplcm8odGVtcG9pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBtZW1zZXQodGVtcG9pZCwgJ1wwJywgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQodGVtcG9pZCwgJnRlbXBvaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWNlUm91dGVIb3BzSXBUZ0FkZHJlc3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRyYWNlUm91dGVIb3BzSXBUZ0FkZHJlc3MpIC8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSwgdmFycyk7CiAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJfaG9wcywgTlVMTCwgMCwgQVNOX1VOU0lHTkVELCAoY2hhciAqKSAmU3RvcmFnZUhvcHMtPnRyYWNlUm91dGVIb3BzSG9wSW5kZXgsIHNpemVvZihTdG9yYWdlSG9wcy0+dHJhY2VSb3V0ZUhvcHNIb3BJbmRleCkpOyAgICAvKiB0cmFjZVJvdXRlQ3RsVGVzdE5hbWUgKi8KLSAgICAgICAgICAgIGJ6ZXJvKG5ld29pZCwgTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBtZW1zZXQobmV3b2lkLCAnXDAnLCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCB0ZW1wb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBvaWRfbGVuLCB2YXJfaG9wcyk7CiAgICAgICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2YXJfbGlzdCwgbmV3b2lkLCBuZXdvaWRfbGVuLApAQCAtMTU4MCw2ICsxNjExLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE2NjgsOCArMTcwMCw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFRhcmdldEFkZHJlc3MgPSBOVUxMOwotCiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUYXJnZXRBZGRyZXNzID0gdG1wdmFyOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVGFyZ2V0QWRkcmVzc0xlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0xNjgxLDcgKzE3MTEsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTc2Myw2ICsxNzkzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE4NDcsNiArMTg3OCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xOTM0LDYgKzE5NjYsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjAyMyw2ICsyMDU2LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIxMDIsNyArMjEzNiw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCi0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTIxODksNiArMjIyMyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yMjcwLDYgKzIzMDUsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjM1MSw2ICsyMzg3LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI0MzUsNyArMjQ3Miw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxTb3VyY2VBZGRyZXNzKTsKLSAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFNvdXJjZUFkZHJlc3MgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsU291cmNlQWRkcmVzcyA9IHRtcHZhcjsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFNvdXJjZUFkZHJlc3NMZW4gPSB0bXBsZW47CiAgICAgICAgIGJyZWFrOwpAQCAtMjQ0Nyw3ICsyNDgzLDcgQEAKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUodG1wdmFyKTsKLSAgICAgICAgdG1wdmFyID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI1MzEsNiArMjU2Nyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yNjE2LDcgKzI2NTMsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnMpOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnMgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsTWlzY09wdGlvbnMgPSB0bXB2YXI7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxNaXNjT3B0aW9uc0xlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0yNjI4LDcgKzI2NjQsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjcxMiw2ICsyNzQ4LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTI3OTcsNiArMjgzNCw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0yODgzLDYgKzI5MjEsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjk2NCw2ICszMDAzLDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTMwNTcsNiArMzA5Nyw3IEBACiAgICAgICAgICAqIFRoaW5ncyBhcmUgd29ya2luZyB3ZWxsLCBzbyBpdCdzIG5vdyBzYWZlIHRvIG1ha2UgdGhlIGNoYW5nZQogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMTczLDYgKzMyMTQsNyBAQAogICAgICAgICAgICAgICAgIG1vZGlmeV90clJlc3VsdHNPcGVyKFN0b3JhZ2VUbXAsIDIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zMjYwLDcgKzMzMDIsNiBAQAogICAgICAgICAgKiBCYWNrIG91dCBhbnkgY2hhbmdlcyBtYWRlIGluIHRoZSBBQ1RJT04gY2FzZSAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3IpOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3IgPSBOVUxMOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsRGVzY3IgPSB0bXB2YXI7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxEZXNjckxlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0zMjcyLDcgKzMzMTMsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzM1Nyw2ICszMzk4LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTM0NDIsNyArMzQ4NCw2IEBACiAgICAgICAgICAqIEJhY2sgb3V0IGFueSBjaGFuZ2VzIG1hZGUgaW4gdGhlIEFDVElPTiBjYXNlIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbik7Ci0gICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbiA9IE5VTEw7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUcmFwR2VuZXJhdGlvbiA9IHRtcHZhcjsKICAgICAgICAgU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFRyYXBHZW5lcmF0aW9uTGVuID0gdG1wbGVuOwogICAgICAgICBicmVhazsKQEAgLTM0NTQsNyArMzQ5NSw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7Ci0gICAgICAgIHRtcHZhciA9IE5VTEw7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0zNTM2LDYgKzM1NzcsNyBAQAogICAgICAgICAgKiBUaGluZ3MgYXJlIHdvcmtpbmcgd2VsbCwgc28gaXQncyBub3cgc2FmZSB0byBtYWtlIHRoZSBjaGFuZ2UKICAgICAgICAgICogcGVybWFuZW50bHkuICBNYWtlIHN1cmUgdGhhdCBhbnl0aGluZyBkb25lIGhlcmUgY2FuJ3QgZmFpbCEgCiAgICAgICAgICAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzYxNyw3ICszNjU5LDYgQEAKICAgICAgICAgICogQmFjayBvdXQgYW55IGNoYW5nZXMgbWFkZSBpbiB0aGUgQUNUSU9OIGNhc2UgCiAgICAgICAgICAqLwogICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+dHJhY2VSb3V0ZUN0bFR5cGUpOwotICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHlwZSA9IE5VTEw7CiAgICAgICAgIFN0b3JhZ2VUbXAtPnRyYWNlUm91dGVDdGxUeXBlID0gdG1wdmFyOwogICAgICAgICBTdG9yYWdlVG1wLT50cmFjZVJvdXRlQ3RsVHlwZUxlbiA9IHRtcGxlbjsKICAgICAgICAgYnJlYWs7CkBAIC0zNjI5LDcgKzM2NzAsNyBAQAogICAgICAgICAgKiBwZXJtYW5lbnRseS4gIE1ha2Ugc3VyZSB0aGF0IGFueXRoaW5nIGRvbmUgaGVyZSBjYW4ndCBmYWlsISAKICAgICAgICAgICovCiAgICAgICAgIFNOTVBfRlJFRSh0bXB2YXIpOwotICAgICAgICB0bXB2YXIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMzk5NCw2ICs0MDM1LDcgQEAKICAgICAgICAgICAgIH0KIAogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC00MDkzLDExICs0MTM1LDcgQEAKICAgICAgICAgZnJlZWhvc3RpbmZvKGhpKTsKIAogCi0jaWZkZWYgSEFWRV9TRVRMSU5FQlVGCi0gICAgICAgIHNldGxpbmVidWYoc3Rkb3V0KTsKLSNlbHNlCi0gICAgICAgIHNldHZidWYoc3Rkb3V0LCBOVUxMLCBfSU9MQkYsIDApOwotI2VuZGlmCisgICAgICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKHN0ZG91dCk7CiAKICAgICAgICAgb3V0aXAgPSAoc3RydWN0IGlwICopIG1hbGxvYyhwYWNrbGVuKTsKICAgICAgICAgaWYgKG91dGlwID09IE5VTEwpIHsKQEAgLTQ5MzksNyArNDk3Nyw3IEBACiAKICAgICAgICAgc2V0bGluZWJ1ZihzdGRvdXQpOwogCi0gICAgICAgICh2b2lkKSBiemVybygoY2hhciAqKSAmd2hlcmV0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgbWVtc2V0KCZ3aGVyZXRvLCAnXDAnLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwogCiAgICAgICAgIHRvLT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OwogICAgICAgICB0by0+c2luNl9wb3J0ID0gaHRvbnMocG9ydCk7CkBAIC01MDM2LDcgKzUwNzQsNyBAQAogICAgICAgICAgICAgc2FkZHIuc2luNl9wb3J0ID0gMDsKICAgICAgICAgICAgIGNsb3NlKHByb2JlX2ZkKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICh2b2lkKSBiemVybygoY2hhciAqKSAmc2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgICAgICBtZW1zZXQoJnNhZGRyLCAnXDAnLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwogICAgICAgICAgICAgc2FkZHIuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKICAgICAgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHNvdXJjZSwgJnNhZGRyLnNpbjZfYWRkcikgPCAwKSB7CiAgICAgICAgICAgICAgICAgUHJpbnRmKCJ0cmFjZXJvdXRlOiB1bmtub3duIGFkZHIgJXNcbiIsIHNvdXJjZSk7CkBAIC01OTQxLDcgKzU5NzksNyBAQAogICAgICAgICByZXR1cm4gKGhpKTsKICAgICB9CiAKLSAgICBocCA9IGdldGhvc3RieW5hbWUoaG9zdG5hbWUpOworICAgIGhwID0gbmV0c25tcF9nZXRob3N0YnluYW1lKGhvc3RuYW1lKTsKICAgICBpZiAoaHAgPT0gTlVMTCkgewogICAgICAgICBGcHJpbnRmKHN0ZGVyciwgIiVzOiB1bmtub3duIGhvc3QgJXNcbiIsICJ0cmFjZXJvdXRlIiwgaG9zdG5hbWUpOwogICAgICAgICBwcmludGYoImhwPU5VTExcbiIpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUN0bFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaAppbmRleCAwYmU4ZGM0Li4wNzExOTc4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlQ3RsVGFibGUuaApAQCAtNTI1LDcgKzUyNSw3IEBACiAjZGVmaW5lIEZEX1NFVChuLCBwKSAgICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gfD0gKDEgPDwgKChuKSAlIE5GREJJVFMpKSkKICNkZWZpbmUgRkRfQ0xSKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmPSB+KDEgPDwgKChuKSAlIE5GREJJVFMpKSkKICNkZWZpbmUgRkRfSVNTRVQobiwgcCkgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmICgxIDw8ICgobikgJSBORkRCSVRTKSkpCi0jZGVmaW5lIEZEX1pFUk8ocCkgICAgICBiemVybygoY2hhciAqKShwKSwgc2l6ZW9mKCoocCkpKQorI2RlZmluZSBGRF9aRVJPKHApICAgICAgbWVtc2V0KChwKSwgJ1wwJywgc2l6ZW9mKCoocCkpKQogI2VuZGlmCiAKICNkZWZpbmUgRnByaW50ZiAodm9pZClmcHJpbnRmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlSG9wc1RhYmxlLmMKaW5kZXggMjk2ZGQ1My4uNzYzNzU3ZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZUhvcHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVIb3BzVGFibGUuYwpAQCAtNDAsMTUgKzQwLDI0IEBACiAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCA4MSwgMSwgNSB9OwogCiBzdHJ1Y3QgdmFyaWFibGUyIHRyYWNlUm91dGVIb3BzVGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAyfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAzfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01JTlJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01BWFJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0FWRVJBR0VSVFQsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1JUVFNVTU9GU1FVQVJFUywgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1NFTlRQUk9CRVMsICAgICAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1BST0JFUkVTUE9OU0VTLCAgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA5fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0xBU1RHT09EUFJPQkUsICBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAxMH19CisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTU1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAyfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0lQVEdUQUREUkVTUywgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01JTlJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA0fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU01BWFJUVCwgICAgICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA1fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0FWRVJBR0VSVFQsICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1JUVFNVTU9GU1FVQVJFUywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA3fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1NFTlRQUk9CRVMsICAgICAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA4fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU1BST0JFUkVTUE9OU0VTLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCA5fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFSE9QU0xBU1RHT09EUFJPQkUsICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVIb3BzVGFibGUsIDIsIHsxLCAxMH19CiB9OwogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMKaW5kZXggZjNiN2NlNi4uMGI0MTBjNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVByb2JlSGlzdG9yeVRhYmxlLmMKQEAgLTM5LDEyICszOSwxOCBAQAogICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgODEsIDEsIDQgfTsKIAogc3RydWN0IHZhcmlhYmxlMiB0cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZSEFERFJUWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZSEFERFIsICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA1fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZUkVTUE9OU0UsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA2fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZU1RBVFVTLCAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZTEFTVFJDLCAgICBBU05fSU5URUdFUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA4fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUFJPQkVISVNUT1JZVElNRSwgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUHJvYmVIaXN0b3J5VGFibGUsIDIsIHsxLCA5fX0KKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllIQUREUlRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDR9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllIQUREUiwgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllSRVNQT05TRSwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDZ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllTVEFUVVMsICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDd9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllMQVNUUkMsICAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDh9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVQUk9CRUhJU1RPUllUSU1FLCAgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVQcm9iZUhpc3RvcnlUYWJsZSwgMiwgezEsIDl9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9kaXNtYW4vdHJhY2Vyb3V0ZS90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLmMKaW5kZXggZDU2MmFkYy4uYWJhNmNmMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZGlzbWFuL3RyYWNlcm91dGUvdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2Rpc21hbi90cmFjZXJvdXRlL3RyYWNlUm91dGVSZXN1bHRzVGFibGUuYwpAQCAtMTgsNiArMTgsOCBAQAogCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC00MCw2ICs0Miw4IEBACiAjaW5jbHVkZSAidHJhY2VSb3V0ZUhvcHNUYWJsZS5oIgogI2luY2x1ZGUgImhlYWRlcl9jb21wbGV4LmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKIC8qCiAgKnRyYWNlUm91dGVSZXN1bHRzVGFibGVfdmFyaWFibGVzX29pZDoKICAqCkBAIC00OCwxNCArNTIsMjIgQEAKICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDgxLCAxLCAzIH07CiAKIHN0cnVjdCB2YXJpYWJsZTIgdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTT1BFUlNUQVRVUywgICAgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCAxfX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0NVUkhPUENPVU5ULCAgICAgIEFTTl9HQVVHRSwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgMn19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNDVVJQUk9CRUNPVU5ULCAgICBBU05fR0FVR0UsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDN9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTSVBUR1RBRERSVFlQRSwgIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA0fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0lQVEdUQUREUiwgICAgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgNX19LAotICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNURVNUQVRURU1QVFMsICBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDZ9fSwKLSAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTVEVTVFNVQ0NFU1NFUywgQVNOX1VOU0lHTkVELCBST05MWSwgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA3fX0sCi0gICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0xBU1RHT09EUEFUSCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgOH19CisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU09QRVJTVEFUVVMsICAgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgMX19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNDVVJIT1BDT1VOVCwgICAgICBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDJ9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTQ1VSUFJPQkVDT1VOVCwgICAgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCAzfX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU0lQVEdUQUREUlRZUEUsICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgNH19LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNJUFRHVEFERFIsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDV9fSwKKyAgICB7Q09MVU1OX1RSQUNFUk9VVEVSRVNVTFRTVEVTVEFUVEVNUFRTLCAgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3RyYWNlUm91dGVSZXN1bHRzVGFibGUsIDIsIHsxLCA2fX0sCisgICAge0NPTFVNTl9UUkFDRVJPVVRFUkVTVUxUU1RFU1RTVUNDRVNTRVMsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90cmFjZVJvdXRlUmVzdWx0c1RhYmxlLCAyLCB7MSwgN319LAorICAgIHtDT0xVTU5fVFJBQ0VST1VURVJFU1VMVFNMQVNUR09PRFBBVEgsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHJhY2VSb3V0ZVJlc3VsdHNUYWJsZSwgMiwgezEsIDh9fQogfTsKIAogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI0ZTI1NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUpCitjb25maWdfYWRkX21pYihFdGhlckxpa2UtTUlCKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDJiNDRmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHMuaApAQCAtMCwwICsxLDcgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kYXRhX2FjY2Vzcy9kb3Qzc3RhdHNfbGludXgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlYjY5ZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RhdGFfYWNjZXNzL2RvdDNzdGF0c19saW51eC5jCkBAIC0wLDAgKzEsOTMwIEBACisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmgiCisjaW5jbHVkZSAiZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oIgorCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGdldGlmYWRkcnMgZmFpbGVkIAorICogQHJldHZhbCAtMiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworCitzdHJ1Y3QgaWZuYW1lICoKK2RvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2dldCAoc3RydWN0IGlmbmFtZSAqbGlzdF9oZWFkLCBpbnQgKnJldHZhbCkKK3sKKyAgICBzdHJ1Y3QgaWZhZGRycyAqYWRkcnMgPSBOVUxMLCAqcCA9IE5VTEw7CisgICAgc3RydWN0IGlmbmFtZSAqbmFtZXB0cjE9TlVMTCwgKm5hbWVwdHIyID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoZ2V0aWZhZGRycygmYWRkcnMpKSA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2dldCIsCisgICAgICAgICAgICAgICAgICAgICJnZXRpZmFkZHJzIGZhaWxlZFxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgZ2V0aWZhZGRycyBmYWlsZWRcbiIpOworICAgICAgICAqcmV0dmFsID0gLTE7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGZvciAocCA9IGFkZHJzOyBwOyBwID0gcC0+aWZhX25leHQpIHsKKworICAgICAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICAgICAgbGlzdF9oZWFkID0gbWFsbG9jKHNpemVvZihzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgICAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBmcmVlaWZhZGRycyhhZGRycyk7CisgICAgICAgICAgICAgICAgKnJldHZhbCA9IC0yOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtc2V0KGxpc3RfaGVhZCwgMCwgc2l6ZW9mIChzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgICAgICBzdHJsY3B5KGxpc3RfaGVhZC0+bmFtZSwgcC0+aWZhX25hbWUsIElGX05BTUVTSVpFKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgIGZvciAobmFtZXB0cjEgPSBsaXN0X2hlYWQ7IG5hbWVwdHIxOyBuYW1lcHRyMiA9IG5hbWVwdHIxLCBuYW1lcHRyMSA9IG5hbWVwdHIxLT5pZm5fbmV4dCkKKyAgICAgICAgICAgIGlmICghc3RybmNtcChwLT5pZmFfbmFtZSwgbmFtZXB0cjEtPm5hbWUsIElGX05BTUVTSVpFKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobmFtZXB0cjEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBuYW1lcHRyMi0+aWZuX25leHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZm5hbWUpKTsKKyAgICAgICAgaWYgKCFuYW1lcHRyMi0+aWZuX25leHQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIikpOworICAgICAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisgICAgICAgICAgICBkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChsaXN0X2hlYWQpOworICAgICAgICAgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgICAgICAgICAgKnJldHZhbCA9IC0yOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbmFtZXB0cjIgPSBuYW1lcHRyMi0+aWZuX25leHQ7CisgICAgICAgIG1lbXNldChuYW1lcHRyMiwgMCwgc2l6ZW9mIChzdHJ1Y3QgaWZuYW1lKSk7CisgICAgICAgIHN0cmxjcHkobmFtZXB0cjItPm5hbWUsIHAtPmlmYV9uYW1lLCBJRl9OQU1FU0laRSk7CisgICAgICAgIGNvbnRpbnVlOworCisgICAgfQorCisgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgIHJldHVybiBsaXN0X2hlYWQ7Cit9CisKKy8qCisgKiBAcmV0dmFsIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBpbnZhbGlkIHBvaW50ZXIKKyAqLworCitpbnQKK2RvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCkKK3sKKyAgICBzdHJ1Y3QgaWZuYW1lICpuYW1lcHRyMSA9IE5VTEwsICpuYW1lcHRyMiA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlOiBpbnZhbGlkIHBvaW50ZXIgbGlzdF9oZWFkIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIiwKKyAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcG9pbnRlciBsaXN0X2hlYWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAobmFtZXB0cjEgPSBsaXN0X2hlYWQ7IG5hbWVwdHIxOyBuYW1lcHRyMSA9IG5hbWVwdHIyKSB7CisgICAgICAgICAgICBuYW1lcHRyMiA9IG5hbWVwdHIxLT5pZm5fbmV4dDsKKyAgICAgICAgICAgIGZyZWUgKG5hbWVwdHIxKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEByZXR2YWwgIDAgOiBub3QgZm91bmQKKyAqIEByZXR2YWwgITAgOiBpZkluZGV4CisgKi8KKworaW50IAorZG90M3N0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCAoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKSB7CisjaWZuZGVmIFNJT0NHSUZJTkRFWAorICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBzdHJ1Y3QgaWZyZXEgICAgaWZycTsKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQiLCAiY2FsbGVkXG4iKSk7CisgICAgICAgICAgICAgICAgIAorICAgIHJjID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NHSUZJTkRFWCwgJmlmcnEsIG5hbWUpOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3Igb24gaW50ZXJmYWNlICclcydcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0LCBlcnJvciBvbiBpbnRlcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAwOworCisgICAgfQorCisgICAgcmV0dXJuIGlmcnEuaWZyX2lmaW5kZXg7CisjZW5kaWYgLyogU0lPQ0dJRklOREVYICovCit9CisKKyMgaWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSCAvKiB7IE5FVExJTksgKi8KKy8qCisgKiBUaGUgZm9sbG93aW5nIGNvZGUgaXMgYmFzZWQgdXBvbiBjb2RlIEkgZ290IGZyb20gU3RlcGhlbiBIZW1taW5nZXIKKyAqLworI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK3N0cnVjdCBydG5sX2hhbmRsZSB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmQ7CisgICAgc3RydWN0IHNvY2thZGRyX25sICAgICAgbG9jYWw7CisgICAgc3RydWN0IHNvY2thZGRyX25sICAgICAgcGVlcjsKKyAgICBfX3UzMiAgICAgICAgICAgICAgICAgICBzZXE7CisgICAgX191MzIgICAgICAgICAgICAgICAgICAgZHVtcDsKK307CisKK3N0cnVjdCBpZnN0YXRfZW50IHsKKyAgICBzdHJ1Y3QgaWZzdGF0X2VudCAqbmV4dDsKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIGludCBpZmluZGV4OworICAgIHN0cnVjdCBydG5sX2xpbmtfc3RhdHMgc3RhdHM7Cit9OworCit0eXBlZGVmIGludCAoKnJ0bmxfZmlsdGVyX3QpKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCAqLCBzdHJ1Y3Qgbmxtc2doZHIgKm4sIHZvaWQgKik7CisKK3N0cnVjdCBydG5sX2R1bXBfZmlsdGVyX2FyZworeworICAgIHJ0bmxfZmlsdGVyX3QgZmlsdGVyOworICAgIHZvaWQgKmFyZzE7CisgICAgcnRubF9maWx0ZXJfdCBqdW5rOworICAgIHZvaWQgKmFyZzI7Cit9OworCitzdGF0aWMgc3RydWN0IGlmc3RhdF9lbnQgKmtlcm5fZGI7CitzdGF0aWMgY29uc3QgaW50IHJjdmJ1Zl9zaXplID0gMTAyNCAqIDEwMjQ7CisKK3N0YXRpYyBpbnQKK3J0bmxfb3Blbl9ieXByb3RvKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoLCB1bnNpZ25lZCBzdWJzY3JpcHRpb25zLCBpbnQgcHJvdG9jb2wpCit7CisgICAgc29ja2xlbl90IGFkZHJfbGVuOworICAgIGludCBzbmRidWYgPSAzMjc2ODsKKworICAgIG1lbXNldChydGgsIDAsIHNpemVvZigqcnRoKSk7CisKKyAgICBydGgtPmZkID0gc29ja2V0KEFGX05FVExJTkssIFNPQ0tfUkFXLCBwcm90b2NvbCk7CisgICAgaWYgKHJ0aC0+ZmQgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW5ub3Qgb3BlbiBuZXRsaW5rIHNvY2tldCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQocnRoLT5mZCxTT0xfU09DS0VULFNPX1NOREJVRiwmc25kYnVmLHNpemVvZihzbmRidWYpKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNPX1NOREJVRiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQocnRoLT5mZCxTT0xfU09DS0VULFNPX1JDVkJVRiwmcmN2YnVmX3NpemUsc2l6ZW9mKHJjdmJ1Zl9zaXplKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTT19SQ1ZCVUYiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNldCgmcnRoLT5sb2NhbCwgMCwgc2l6ZW9mKHJ0aC0+bG9jYWwpKTsKKyAgICBydGgtPmxvY2FsLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisgICAgcnRoLT5sb2NhbC5ubF9ncm91cHMgPSBzdWJzY3JpcHRpb25zOworCisgICAgaWYgKGJpbmQocnRoLT5mZCwgKHN0cnVjdCBzb2NrYWRkciopJnJ0aC0+bG9jYWwsIHNpemVvZihydGgtPmxvY2FsKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW5ub3QgYmluZCBuZXRsaW5rIHNvY2tldCIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGFkZHJfbGVuID0gc2l6ZW9mKHJ0aC0+bG9jYWwpOworICAgIGlmIChnZXRzb2NrbmFtZShydGgtPmZkLCAoc3RydWN0IHNvY2thZGRyKikmcnRoLT5sb2NhbCwgJmFkZHJfbGVuKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNhbm5vdCBnZXRzb2NrbmFtZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGlmIChhZGRyX2xlbiAhPSBzaXplb2YocnRoLT5sb2NhbCkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIldyb25nIGFkZHJlc3MgbGVuZ3RoICVkXG4iLCBhZGRyX2xlbik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHJ0aC0+bG9jYWwubmxfZmFtaWx5ICE9IEFGX05FVExJTkspIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIldyb25nIGFkZHJlc3MgZmFtaWx5ICVkXG4iLCBydGgtPmxvY2FsLm5sX2ZhbWlseSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcnRoLT5zZXEgPSB0aW1lKE5VTEwpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitydG5sX29wZW4oc3RydWN0IHJ0bmxfaGFuZGxlICpydGgsIHVuc2lnbmVkIHN1YnNjcmlwdGlvbnMpCit7CisgICAgcmV0dXJuIHJ0bmxfb3Blbl9ieXByb3RvKHJ0aCwgc3Vic2NyaXB0aW9ucywgTkVUTElOS19ST1VURSk7Cit9CisKK3N0YXRpYyB2b2lkCitydG5sX2Nsb3NlKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoKQoreworICAgIGlmIChydGgtPmZkICE9IC0xKQorICAgICAgICBjbG9zZShydGgtPmZkKTsKKyAgICBydGgtPmZkID0gLTE7CisKKyAgICByZXR1cm47Cit9CisKK3N0YXRpYyBpbnQKK3J0bmxfd2lsZGR1bXBfcmVxdWVzdChzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCwgaW50IGZhbWlseSwgaW50IHR5cGUpCit7CisgICAgc3RydWN0IHsKKyAgICAgICAgc3RydWN0IG5sbXNnaGRyIG5saDsKKyAgICAgICAgc3RydWN0IHJ0Z2VubXNnIGc7CisgICAgfSByZXE7CisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIHJlcS5ubGgubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSk7CisgICAgcmVxLm5saC5ubG1zZ190eXBlID0gdHlwZTsKKyAgICByZXEubmxoLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUk9PVHxOTE1fRl9NQVRDSHxOTE1fRl9SRVFVRVNUOworICAgIHJlcS5ubGgubmxtc2dfcGlkID0gMDsKKyAgICByZXEubmxoLm5sbXNnX3NlcSA9IHJ0aC0+ZHVtcCA9ICsrcnRoLT5zZXE7CisgICAgcmVxLmcucnRnZW5fZmFtaWx5ID0gZmFtaWx5OworCisgICAgcmV0dXJuIHNlbmQocnRoLT5mZCwgKHZvaWQqKSZyZXEsIHNpemVvZihyZXEpLCAwKTsKK30KKworc3RhdGljIGludAorcGFyc2VfcnRhdHRyKHN0cnVjdCBydGF0dHIgKnRiW10sIGludCBtYXgsIHN0cnVjdCBydGF0dHIgKnJ0YSwgaW50IGxlbikKK3sKKyAgICBtZW1zZXQodGIsIDAsIHNpemVvZihzdHJ1Y3QgcnRhdHRyICopICogKG1heCArIDEpKTsKKyAgICB3aGlsZSAoUlRBX09LKHJ0YSwgbGVuKSkKKyAgICB7CisgICAgICAgIGlmIChydGEtPnJ0YV90eXBlIDw9IG1heCkKKyAgICAgICAgICAgIHRiW3J0YS0+cnRhX3R5cGVdID0gcnRhOworICAgICAgICBydGEgPSBSVEFfTkVYVChydGEsbGVuKTsKKyAgICB9CisKKyAgICBpZiAobGVuKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGFyc2VfcnRhdHRyOiAhISFEZWZpY2l0ICVkLCBydGFfbGVuPSVkXG4iLCBsZW4sIHJ0YS0+cnRhX2xlbik7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorZ2V0X25sbXNnKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCAqd2hvLCBzdHJ1Y3Qgbmxtc2doZHIgKm0sIHZvaWQgKmFyZykKK3sKKyAgICBzdHJ1Y3QgaWZpbmZvbXNnICppZmkgPSBOTE1TR19EQVRBKG0pOworICAgIHN0cnVjdCBydGF0dHIgKiB0YltJRkxBX01BWCsxXTsKKyAgICBpbnQgbGVuID0gbS0+bmxtc2dfbGVuOworICAgIHN0cnVjdCBpZnN0YXRfZW50ICpuOworCisgICAgaWYgKG0tPm5sbXNnX3R5cGUgIT0gUlRNX05FV0xJTkspCisgICAgICAgIHJldHVybiAwOworCisgICAgbGVuIC09IE5MTVNHX0xFTkdUSChzaXplb2YoKmlmaSkpOworICAgIGlmIChsZW4gPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBwYXJzZV9ydGF0dHIodGIsIElGTEFfTUFYLCBJRkxBX1JUQShpZmkpLCBsZW4pOworICAgIGlmICh0YltJRkxBX0lGTkFNRV0gPT0gTlVMTCB8fCB0YltJRkxBX1NUQVRTXSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG4gPSBtYWxsb2Moc2l6ZW9mKCpuKSk7CisgICAgbWVtc2V0KG4sIDAsIHNpemVvZigqbikpOworCisgICAgbi0+aWZpbmRleCA9IGlmaS0+aWZpX2luZGV4OworICAgIG4tPm5hbWUgPSBzdHJkdXAoUlRBX0RBVEEodGJbSUZMQV9JRk5BTUVdKSk7CisgICAgbWVtY3B5KCZuLT5zdGF0cywgUlRBX0RBVEEodGJbSUZMQV9TVEFUU10pLCBzaXplb2Yobi0+c3RhdHMpKTsKKyAgICBuLT5uZXh0ID0ga2Vybl9kYjsKKyAgICBrZXJuX2RiID0gbjsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcnRubF9kdW1wX2ZpbHRlcl9sKHN0cnVjdCBydG5sX2hhbmRsZSAqcnRoLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBydG5sX2R1bXBfZmlsdGVyX2FyZyAqYXJnKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9ubCBubGFkZHI7CisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBzdHJ1Y3QgbXNnaGRyIG1zZyA9IHsKKyAgICAgICAgLm1zZ19uYW1lID0gJm5sYWRkciwKKyAgICAgICAgLm1zZ19uYW1lbGVuID0gc2l6ZW9mKG5sYWRkciksCisgICAgICAgIC5tc2dfaW92ID0gJmlvdiwKKyAgICAgICAgLm1zZ19pb3ZsZW4gPSAxLAorICAgIH07CisgICAgY2hhciBidWZbMTYzODRdOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIHdoaWxlICgxKSB7CisgICAgICAgIGludCBzdGF0dXM7CisgICAgICAgIGNvbnN0IHN0cnVjdCBydG5sX2R1bXBfZmlsdGVyX2FyZyAqYTsKKworICAgICAgICBpb3YuaW92X2xlbiA9IHNpemVvZihidWYpOworICAgICAgICBzdGF0dXMgPSByZWN2bXNnKHJ0aC0+ZmQsICZtc2csIDApOworCisgICAgICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIgfHwgZXJybm8gPT0gRUFHQUlOKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJuZXRsaW5rIHJlY2VpdmUgZXJyb3IgJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzdGF0dXMgPT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFT0Ygb24gbmV0bGlua1xuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBmb3IgKGEgPSBhcmc7IGEtPmZpbHRlcjsgYSsrKSB7CisgICAgICAgICAgICBzdHJ1Y3Qgbmxtc2doZHIgKmggPSAoc3RydWN0IG5sbXNnaGRyKilidWY7CisKKyAgICAgICAgICAgIHdoaWxlIChOTE1TR19PSyhoLCBzdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgaW50IGVycjsKKworICAgICAgICAgICAgICAgIGlmIChubGFkZHIubmxfcGlkICE9IDAgfHwKKyAgICAgICAgICAgICAgICAgICAgIGgtPm5sbXNnX3BpZCAhPSBydGgtPmxvY2FsLm5sX3BpZCB8fAorICAgICAgICAgICAgICAgICAgICAgaC0+bmxtc2dfc2VxICE9IHJ0aC0+ZHVtcCkgeworICAgICAgICAgICAgICAgICAgICBpZiAoYS0+anVuaykgeworICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gYS0+anVuaygmbmxhZGRyLCBoLCBhLT5hcmcyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZ290byBza2lwX2l0OworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0RPTkUpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIGlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0VSUk9SKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBubG1zZ2VyciAqZXJyID0gKHN0cnVjdCBubG1zZ2VyciopTkxNU0dfREFUQShoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGgtPm5sbXNnX2xlbiA8IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IG5sbXNnZXJyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRVJST1IgdHJ1bmNhdGVkXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vID0gLWVyci0+ZXJyb3I7CisgICAgICAgICAgICAgICAgICAgICAgICBwZXJyb3IoIlJUTkVUTElOSyBhbnN3ZXJzIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlcnIgPSBhLT5maWx0ZXIoJm5sYWRkciwgaCwgYS0+YXJnMSk7CisgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisKK3NraXBfaXQ6CisgICAgICAgICAgICAgICAgaCA9IE5MTVNHX05FWFQoaCwgc3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSB3aGlsZSAoMCk7CisgICAgICAgIGlmIChtc2cubXNnX2ZsYWdzICYgTVNHX1RSVU5DKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk1lc3NhZ2UgdHJ1bmNhdGVkXG4iKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChzdGF0dXMpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiISEhUmVtbmFudCBvZiBzaXplICVkXG4iLCBzdGF0dXMpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludAorcnRubF9kdW1wX2ZpbHRlcihzdHJ1Y3QgcnRubF9oYW5kbGUgKnJ0aCwKKyAgICAgICAgICAgICAgICAgcnRubF9maWx0ZXJfdCBmaWx0ZXIsCisgICAgICAgICAgICAgICAgIHZvaWQgKmFyZzEsCisgICAgICAgICAgICAgICAgIHJ0bmxfZmlsdGVyX3QganVuaywKKyAgICAgICAgICAgICAgICAgdm9pZCAqYXJnMikKK3sKKyAgICBjb25zdCBzdHJ1Y3QgcnRubF9kdW1wX2ZpbHRlcl9hcmcgYVsyXSA9IHsKKyAgICAgICAgeyAuZmlsdGVyID0gZmlsdGVyLCAuYXJnMSA9IGFyZzEsIC5qdW5rID0ganVuaywgLmFyZzIgPSBhcmcyIH0sCisgICAgICAgIHsgLmZpbHRlciA9IE5VTEwsICAgLmFyZzEgPSBOVUxMLCAuanVuayA9IE5VTEwsIC5hcmcyID0gTlVMTCB9CisgICAgfTsKKworICAgIHJldHVybiBydG5sX2R1bXBfZmlsdGVyX2wocnRoLCBhKTsKK30KKworaW50CitfZG90M1N0YXRzX25ldGxpbmtfZ2V0X2Vycm9yY250cnMoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBzdHJ1Y3QgcnRubF9oYW5kbGUgcnRoOworICAgIHN0cnVjdCBpZnN0YXRfZW50ICprZTsKKyAgICBpbnQgZG9uZTsKKworICAgIGlmIChydG5sX29wZW4oJnJ0aCwgMCkgPCAwKQorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRyczogcnRubF9vcGVuKCkgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKHJ0bmxfd2lsZGR1bXBfcmVxdWVzdCgmcnRoLCBBRl9JTkVULCBSVE1fR0VUTElOSykgPCAwKQorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRyczogQ2Fubm90IHNlbmQgZHVtcCByZXF1ZXN0Iik7CisgICAgICAgIHJ0bmxfY2xvc2UoJnJ0aCk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChydG5sX2R1bXBfZmlsdGVyKCZydGgsIGdldF9ubG1zZywgTlVMTCwgTlVMTCwgTlVMTCkgPCAwKQorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRyczogRHVtcCB0ZXJtaW5hdGVkXG4iKTsKKyAgICAgICAgcnRubF9jbG9zZSgmcnRoKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgcnRubF9jbG9zZSgmcnRoKTsKKworICAgIC8qCisgICAgICogTm93IHNjYW4ga2Vybl9kYiBmb3IgdGhpcyBpZidzIGRhdGEKKyAgICAgKiBXaGlsZSBkb2luZyBzbywgd2UnbGwgdGhyb3cgYXdheSB0aGUga2VybiBkYi4KKyAgICAgKi8KKyAgICBkb25lID0gMDsKKworICAgIHdoaWxlICgoa2UgPSBrZXJuX2RiKSAhPSBOVUxMKQorICAgIHsKKyAgICAgICAgaWYgKHN0cmNtcChrZS0+bmFtZSwgbmFtZSkgPT0gMCkKKyAgICAgICAgeworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlIiwgIklGTEFfU1RBVFMgZm9yICVzXG4iLCBuYW1lKSk7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZDU0Vycm9ycyA9IGtlLT5zdGF0cy5yeF9jcmNfZXJyb3JzOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyA9IGtlLT5zdGF0cy50eF9kcm9wcGVkOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgPSBrZS0+c3RhdHMudHhfZmlmb19lcnJvcnM7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTX0ZMQUc7CisKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IGtlLT5zdGF0cy50eF9jYXJyaWVyX2Vycm9yczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHOworCisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNGcmFtZVRvb0xvbmdzID0ga2UtPnN0YXRzLnJ4X2ZyYW1lX2Vycm9yczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRzsKKworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzID0ga2UtPnN0YXRzLnJ4X2ZpZm9fZXJyb3JzOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUc7CisKKyAgICAgICAgICAgIGRvbmUgPSAxOworICAgICAgICB9CisgICAgICAgIGtlcm5fZGIgPSBrZS0+bmV4dDsKKyAgICAgICAgZnJlZShrZSk7CisgICAgfQorCisgICAgcmV0dXJuICFkb25lOworfQorIyBlbHNlIC8qIH17ICovCitpbnQKK19kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRycyhkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHJldHVybiAxOworfQorIyBlbmRpZiAvKiB9ICovCisKKworLyoKKyAqIE5BTUU6IGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcworICogUFVSUE9TRTogVG8gZ2V0IGEgc2luZ2xlIHN0YXRpc3RpY3MgdmFsdWUgZnJvbSAvc3lzL2NsYXNzL25ldC88aWZuYW1lPi9zdGF0aXN0aWNzLzxjdHJuYW1lPgorICogQVJHVU1FTlRTOiBpZm5hbWU6IGludGVyZmFjZSBuYW1lCisgKiAgICAgIGN0cm5hbWU6IGNvdW50ZXIgbmFtZQorICogICAgICB2YWx1ZXA6IHdoZXJlIHRvIHN0b3JlIHZhbHVlCisgKiBSRVRVUk5TOiAwIGlmIHZhbHVlIG5vdCBhdmFpbGFibGUKKyAqICAgICAgbm9uLTAgaWYgdmFsdWUgYXZhaWxhYmxlCisgKi8KK3N0YXRpYyBpbnQKK2dldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhjb25zdCBjaGFyICppZm5hbWUsIGNvbnN0IGNoYXIgKmN0cm5hbWUsIHVfbG9uZyAqdmFsdWVwKQoreworICAgIGNoYXIgcGF0aFsyNTZdOworICAgIEZJTEUgKmZwOworICAgIGludCBydjsKKworICAgIGlmIChpZm5hbWUgPT0gTlVMTCB8fCBjdHJuYW1lID09IE5VTEwgfHwgdmFsdWVwID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgc25wcmludGYocGF0aCwgc2l6ZW9mKHBhdGgpLCAiL3N5cy9jbGFzcy9uZXQvJXMvc3RhdGlzdGljcy8lcyIsIGlmbmFtZSwgY3RybmFtZSk7CisgICAgZnAgPSBmb3BlbihwYXRoLCAicnQiKTsKKyAgICBpZiAoZnAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBydiA9IDE7CisgICAgaWYgKGZzY2FuZihmcCwgIiVsdSIsIHZhbHVlcCkgIT0gMSkKKyAgICAgICAgcnYgPSAwOworCisgICAgZmNsb3NlKGZwKTsKKworICAgIHJldHVybiBydjsKK30KKworLyoKKyAqIE5BTUU6IGludGVyZmFjZV9kb3Qzc3RhdHNfZ2V0X2Vycm9yY291bnRlcnMKKyAqIFBVUlBPU0U6IFRvIGdldCBldGhlcm5ldCBlcnJvciBzdGF0aXN0aWNzCisgKiBBUkdVTUVOVFM6IHJvd3JlcV9jdHg6IHdoZXJlIHRvIHN0b3JlIHRoZSB2YWx1ZShzKQorICogICAgICBuYW1lOiBpbnRlcmZhY2UgbmFtZQorICogUkVUVVJOUzogbm90aGluZy4gZmllbGRzIG5vdCBzZXQgaWYgZGF0YSBub3QgYXZhaWxhYmxlCisgKi8KK3ZvaWQKK2ludGVyZmFjZV9kb3Qzc3RhdHNfZ2V0X2Vycm9yY291bnRlcnMgKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgdV9sb25nIHZhbHVlOworICAgIGRvdDNTdGF0c1RhYmxlX2RhdGEgKmRhdGEgPSAmcm93cmVxX2N0eC0+ZGF0YTsKKyAgICBGSUxFICpkZXY7CisgICAgY29uc3QgY2hhciBORVRERVZfRklMRVtdID0gIi9wcm9jL25ldC9kZXYiOworCisgICAgaWYgKF9kb3QzU3RhdHNfbmV0bGlua19nZXRfZXJyb3JjbnRycyhyb3dyZXFfY3R4LCBuYW1lKSA9PSAwKQorICAgIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJpbnRlcmZhY2VfZG90M3N0YXRzX2dldF9lcnJvcmNvdW50ZXJzOiBnb3QgZGF0YSBmcm9tIElGTEFfU1RBVFNcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICgoZGV2ID0gZm9wZW4oTkVUREVWX0ZJTEUsICJyIikpICE9IE5VTEwpCisgICAgeworICAgICAgICBjaGFyIGxpbmVbMjU2XSwgKmxwLCAqbmV4dDsKKyAgICAgICAgc2l6ZV90IG5hbWVsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWx1ZTsKKyAgICAgICAgdW5zaWduZWQgaW50IGNvbHVtbjsKKworICAgICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBkZXYpICE9IE5VTEwpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qICAgIGJyMDo2ODM5NTYzNSAxMDM4MjE0ICAgIDAgICAgMCAgICAwICAgICAwICAgICAgICAgIDAgICAgOTM5NDExIDI1NjI2NjA2ICAgOTA3MDggICAgMCAgICAwICAgIDAgICAgIDAgICAgICAgMCAgICAgICAgICAwICovCisgICAgICAgICAgICBscCA9IGxpbmU7CisgICAgICAgICAgICB3aGlsZSAoKmxwID09ICcgJyB8fCAqbHAgPT0gJ1x0JykKKyAgICAgICAgICAgICAgICBscCsrOworICAgICAgICAgICAgaWYgKHN0cm5jbXAobHAsIG5hbWUsIG5hbWVsZW4pICE9IDAgfHwgbHBbbmFtZWxlbl0gIT0gJzonKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgbHAgKz0gbmFtZWxlbiArIDE7ICAgICAgICAgLyogU2tpcCBuYW1lIGFuZCBjb2xvbiAqLworCisgICAgICAgICAgICBjb2x1bW4gPSAxOworICAgICAgICAgICAgd2hpbGUgKDEpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBzdHJ0b3VsKGxwLCAmbmV4dCwgMTApOworICAgICAgICAgICAgICAgIGlmIChuZXh0ID09IGxwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgLyogbm8gbW9yZSBkYXRhICovCisgICAgICAgICAgICAgICAgc3dpdGNoIChjb2x1bW4pCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNhc2UgMzogCisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZDU0Vycm9ycyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxMjoKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDEzOgorICAgICAgICAgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNToKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDY6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIDU6CisgICAgICAgICAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyA9IHZhbHVlOworICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRzsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAxNDoKKyAgICAgICAgICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzID0gdmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FU19GTEFHOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY29sdW1uKys7CisgICAgICAgICAgICAgICAgbHAgPSBuZXh0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBmY2xvc2UoZGV2KTsKKyAgICB9CisKKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZXJyb3JzIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNGQ1NFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmICghKHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgJiBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUcpICYmCisgICAgICAgICAgZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJ0eF9kcm9wcGVkIiwgJnZhbHVlKSkgeworICAgICAgICBkYXRhLT5kb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUc7CisgICAgfQorICAgIGlmICghKHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgJiBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAidHhfZmlmb19lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAidHhfY2Fycmllcl9lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IHZhbHVlOworICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRzsKKyAgICB9CisgICAgaWYgKCEocm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyAmIENPTFVNTl9ET1QzU1RBVFNGUkFNRVRPT0xPTkdTX0ZMQUcpICYmCisgICAgICAgICAgZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJyeF9mcmFtZV9lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgPSB2YWx1ZTsKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHOworICAgIH0KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzICYgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SU19GTEFHKSAmJgorICAgICAgICAgIGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZmlmb19lcnJvcnMiLCAmdmFsdWUpKSB7CisgICAgICAgIGRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycyA9IHZhbHVlOworICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRzsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKKy8qCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgY2Fubm90IGdldCBFVEhUT09MX0RSVklORk8gZmFpbGVkIAorICogQHJldHZhbCAtMiBuc3RhdHMgemVybyAtIG5vIHN0YXRpc3RjcyBhdmFpbGFibGUKKyAqIEByZXR2YWwgLTMgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGhvbGRpbmcgdGhlIHN0YXRpc3RpY3MgZmFpbGVkCisgKiBAcmV0dmFsIC00IGNhbm5vdCBnZXQgRVRIVE9PTF9HU1RSSU5HUyBpbmZvcm1hdGlvbgorICogQHJldHZhbCAtNSBjYW5ub3QgZ2V0IEVUSFRPT0xfR1NUQVRTIGluZm9ybWF0aW9uCisgKiBAcmV0dmFsIC02IGZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgaWYgSEFWRV9MSU5VWF9FVEhUT09MX0ggbm90IGRlZmluZWQKKyAqLworCisKK2ludCAKK2ludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZ2V0IChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIgKm5hbWUpIHsKKworI2lmZGVmIEhBVkVfTElOVVhfRVRIVE9PTF9ICisgICAgZG90M1N0YXRzVGFibGVfZGF0YSAqZGF0YSA9ICZyb3dyZXFfY3R4LT5kYXRhOworICAgIHN0cnVjdCBldGh0b29sX2RydmluZm8gZHJpdmVyX2luZm87CisgICAgc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MgKmV0aF9zdHJpbmdzOworICAgIHN0cnVjdCBldGh0b29sX3N0YXRzICpldGhfc3RhdHM7CisgICAgc3RydWN0IGlmcmVxIGlmcjsgCisgICAgdW5zaWduZWQgaW50IG5zdGF0cywgc2l6ZV9zdHIsIGk7CisgICAgaW50IGVycjsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG1lbXNldCgmaWZyLCAwLCBzaXplb2YoaWZyKSk7CisgICAgc3RybGNweShpZnIuaWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpKTsKKworICAgIG1lbXNldCgmZHJpdmVyX2luZm8sIDAsIHNpemVvZiAoZHJpdmVyX2luZm8pKTsKKyAgICBkcml2ZXJfaW5mby5jbWQgPSBFVEhUT09MX0dEUlZJTkZPOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopJmRyaXZlcl9pbmZvOworCisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIkVUSFRPT0xfR0VURFJWSU5GTyBmYWlsZWQgZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbnN0YXRzID0gZHJpdmVyX2luZm8ubl9zdGF0czsKKyAgICBpZiAobnN0YXRzIDwgMSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIHN0YXRzIGF2YWlsYWJsZSBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICBzaXplX3N0ciA9IG5zdGF0cyAqIEVUSF9HU1RSSU5HX0xFTjsKKworICAgIGV0aF9zdHJpbmdzID0gbWFsbG9jKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9nc3RyaW5ncykpOworICAgIGlmICghZXRoX3N0cmluZ3MpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgIG1lbXNldCAoZXRoX3N0cmluZ3MsIDAsIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MpKSk7CisKKyAgICBldGhfc3RhdHMgPSBtYWxsb2MgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9zdGF0cykpOworICAgIGlmICghZXRoX3N0YXRzKSB7CisgICAgICAgIGZyZWUgKGV0aF9zdHJpbmdzKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJubyBtZW1vcnkgYXZhaWxhYmxlXG4iKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgICBtZW1zZXQgKGV0aF9zdGF0cywgMCwgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9zdGF0cykpKTsKKworICAgIGV0aF9zdHJpbmdzLT5jbWQgPSBFVEhUT09MX0dTVFJJTkdTOworICAgIGV0aF9zdHJpbmdzLT5zdHJpbmdfc2V0ID0gRVRIX1NTX1NUQVRTOworICAgIGV0aF9zdHJpbmdzLT5sZW4gPSBuc3RhdHM7CisgICAgaWZyLmlmcl9kYXRhID0gKGNoYXIgKikgZXRoX3N0cmluZ3M7CisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgc3RhdHMgc3RyaW5ncyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9kb3QzU3RhdHNfZ2V0LCBjYW5ub3QgZ2V0IHN0YXRzIHN0cmluZ3MgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSk7CisKKyAgICAgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgICAgIGZyZWUoZXRoX3N0YXRzKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIGV0aF9zdGF0cy0+Y21kID0gRVRIVE9PTF9HU1RBVFM7CisgICAgZXRoX3N0YXRzLT5uX3N0YXRzID0gbnN0YXRzOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopIGV0aF9zdGF0czsKKyAgICBlcnIgPSBfZG90M1N0YXRzX2lvY3RsX2dldChmZCwgU0lPQ0VUSFRPT0wsICZpZnIsIG5hbWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBzdGF0cyBzdHJpbmdzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsaW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19nZXQsIGNhbm5vdCBnZXQgc3RhdHMgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSk7CisKKyAgICAgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgICAgIGZyZWUoZXRoX3N0YXRzKTsKKyAgICAgICAgcmV0dXJuIC01OworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBuc3RhdHM7IGkrKykgeworICAgICAgICBjaGFyIHNbRVRIX0dTVFJJTkdfTEVOXTsKKworICAgICAgICBzdHJsY3B5KHMsIChjb25zdCBjaGFyICopICZldGhfc3RyaW5ncy0+ZGF0YVtpICogRVRIX0dTVFJJTkdfTEVOXSwKKyAgICAgICAgICAgICAgICBzaXplb2YocykpOworICAgIAorICAgICAgICBpZiAoRE9UM1NUQVRTQUxJR05NRU5URVJST1JTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0FMSUdOTUVOVEVSUk9SU19GTEFHOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyA9ICh1X2xvbmcpZXRoX3N0YXRzLT5kYXRhW2ldOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVNfRkxBRzsKKyAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgIGlmIChET1QzU1RBVFNMQVRFQ09MTElTSU9OUyhzKSkgeworICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0xBVEVDT0xMSVNJT05TX0ZMQUc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FU19GTEFHOworICAgICAgICB9CisKKyAgICAgICAgaWYgKERPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlMocykpIHsKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMgPSAodV9sb25nKWV0aF9zdGF0cy0+ZGF0YVtpXTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlNfRkxBRzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgIGZyZWUoZXRoX3N0YXRzKTsKKworICAgIHJldHVybiAwOworI2Vsc2UKKyAgICByZXR1cm4gLTY7CisjZW5kaWYKK30KKworCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIEVUSFRPT0xfR1NFVCBmYWlsZWQKKyAqIEByZXR2YWwgLTIgZnVuY3Rpb24gbm90IHN1cHBvcnRlZCBpZiBIQVZFX0xJTlVYX0VUSFRPT0xfSCBub3QgZGVmaW5lZAorICovCisKK2ludAoraW50ZXJmYWNlX2lvY3RsX2RvdDNzdGF0c19kdXBsZXhfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsIGludCBmZCwgY29uc3QgY2hhciogbmFtZSkgeworCisjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKKyAgICBkb3QzU3RhdHNUYWJsZV9kYXRhICpkYXRhID0gJnJvd3JlcV9jdHgtPmRhdGE7CisgICAgc3RydWN0IGV0aHRvb2xfY21kIGVkYXRhOworICAgIHN0cnVjdCBpZnJlcSBpZnI7CisgICAgaW50IGVycjsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19kdXBsZXhfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBtZW1zZXQoJmVkYXRhLCAwLCBzaXplb2YgKGVkYXRhKSk7CisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZiAoaWZyKSk7CisgICAgZWRhdGEuY21kID0gRVRIVE9PTF9HU0VUOworICAgIGlmci5pZnJfZGF0YSA9IChjaGFyICopJmVkYXRhOworCisgICAgZXJyID0gX2RvdDNTdGF0c19pb2N0bF9nZXQgKGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZG90M1N0YXRzX2R1cGxleF9nZXQiLAorICAgICAgICAgICAgICAgICAgICAiRVRIVE9PTF9HU0VUIGZhaWxlZFxuIikpOworCisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgaWYgKGVyciA9PSAwKSB7CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0RVUExFWFNUQVRVU19GTEFHOworICAgICAgICBzd2l0Y2ggKGVkYXRhLmR1cGxleCkgeworICAgICAgICBjYXNlIERVUExFWF9IQUxGOgorICAgICAgICAgICAgZGF0YS0+ZG90M1N0YXRzRHVwbGV4U3RhdHVzID0gKHVfbG9uZykgRE9UM1NUQVRTRFVQTEVYU1RBVFVTX0hBTEZEVVBMRVg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEVVBMRVhfRlVMTDoKKyAgICAgICAgICAgIGRhdGEtPmRvdDNTdGF0c0R1cGxleFN0YXR1cyA9ICh1X2xvbmcpIERPVDNTVEFUU0RVUExFWFNUQVRVU19GVUxMRFVQTEVYOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBkYXRhLT5kb3QzU3RhdHNEdXBsZXhTdGF0dXMgPSAodV9sb25nKSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfVU5LTk9XTjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9OworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2RvdDNTdGF0c19kdXBsZXhfZ2V0IiwKKyAgICAgICAgICAgICAgICAiRVRIVE9PTF9HU0VUIHByb2Nlc3NlZFxuIikpOworICAgIHJldHVybiBlcnI7CisjZWxzZQorICAgIHJldHVybiAtMjsKKyNlbmRpZgorfQorCisKKy8qCisgKiBOQU1FOiBpbnRlcmZhY2Vfc3lzY2xhc3NuZXRfZG90M3N0YXRzX2dldAorICogUFVSUE9TRTogVG8gZ2V0IGV0aGVybmV0IHN0YXRpc3RpY3MgZnJvbSAvc3lzL2NsYXNzL25ldC8uLi4KKyAqIEFSR1VNRU5UUzogcm93cmVxX2N0eDogd2hlcmUgdG8gc3RvcmUgdGhlIHZhbHVlKHMpCisgKgluYW1lOiBpbnRlcmZhY2UgbmFtZQorICogUkVUVVJOUzogbm90aGluZy4gZmllbGRzIG5vdCBzZXQgaWYgZGF0YSBub3QgYXZhaWxhYmxlCisgKi8KK3ZvaWQKK2ludGVyZmFjZV9zeXNjbGFzc25ldF9kb3Qzc3RhdHNfZ2V0IChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKQoreworICAgIHVfbG9uZyB2YWx1ZTsKKyAgICBkb3QzU3RhdHNUYWJsZV9kYXRhICpkYXRhID0gJnJvd3JlcV9jdHgtPmRhdGE7CisKKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJyeF9lcnJvcnMiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzRkNTRXJyb3JzID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2Ryb3BwZWQiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2ZpZm9fZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgPSB2YWx1ZTsKKwlyb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9IENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1RSQU5TTUlURVJST1JTX0ZMQUc7CisgICAgfQorICAgIGlmIChnZXR1bG9uZ2Zyb21zeXNjbGFzc25ldHN0YXRpc3RpY3MobmFtZSwgInR4X2NhcnJpZXJfZXJyb3JzIiwgJnZhbHVlKSkgeworCWRhdGEtPmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHOworICAgIH0KKyAgICBpZiAoZ2V0dWxvbmdmcm9tc3lzY2xhc3NuZXRzdGF0aXN0aWNzKG5hbWUsICJyeF9mcmFtZV9lcnJvcnMiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzRnJhbWVUb29Mb25ncyA9IHZhbHVlOworCXJvd3JlcV9jdHgtPmNvbHVtbl9leGlzdHNfZmxhZ3MgfD0gQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRzsKKyAgICB9CisgICAgaWYgKGdldHVsb25nZnJvbXN5c2NsYXNzbmV0c3RhdGlzdGljcyhuYW1lLCAicnhfZmlmb19lcnJvcnMiLCAmdmFsdWUpKSB7CisJZGF0YS0+ZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzID0gdmFsdWU7CisJcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTX0ZMQUc7CisgICAgfQorCisgICAgcmV0dXJuOworfQorCisKKworLyogaW9jdGwgd3JhcHBlcgorICoKKyAqIEBwYXJhbSAgICAgIGZkIDogc29ja2V0IGZkIHRvIHVzZSB3L2lvY3RsLCBvciAtMSB0byBvcGVuL2Nsb3NlIG9uZQorICogQHBhcmFtICB3aGljaAorICogQHBhcmFtIGlmcnEKKyAqIHBhcmFtIGlmZW50cnkgOiBpZmVudHJ5IHRvIHVwZGF0ZQorICogQHBhcmFtIG5hbWUKKyAqCisgKiBAcmV0dmFsICAwIDogc3VjY2VzcworICogQHJldHZhbCAtMSA6IGludmFsaWQgcGFyYW1ldGVycworICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBjYWxsIGZhaWxlZAorICovCitpbnQKK19kb3QzU3RhdHNfaW9jdGxfZ2V0KGludCBmZCwgaW50IHdoaWNoLCBzdHJ1Y3QgaWZyZXEgKmlmcnEsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IG91cmZkID0gLTEsIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwiLCAiX2RvdDNTdGF0c19pb2N0bF9nZXRcbiIpKTsKKworICAgIC8qCisgICAgICogc2FuaXR5IGNoZWNrcworICAgICAqLworICAgIGlmKE5VTEwgPT0gbmFtZSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsIiwKKyAgICAgICAgICAgICAgICAgICAgIl9kb3QzU3RhdHNfaW9jdGxfZ2V0IGludmFsaWQgaWZuYW1lICclcydcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwsIF9kb3QzU3RhdHNfaW9jdGxfZ2V0IGVycm9yIG9uIGludGVyZmFjZSAnJXMnXG4iLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogY3JlYXRlIHNvY2tldCBmb3IgaW9jdGxzCisgICAgICovCisgICAgaWYoZmQgPCAwKSB7CisgICAgICAgIGZkID0gb3VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgICAgIGlmKG91cmZkIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZTppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzX2lvY3RsX2dldCBjb3VsZG4ndCBjcmVhdGUgYSBzb2NrZXRcbiIpKTsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmRvdDNTdGF0c1RhYmxlOmlvY3RsLCBfZG90M1N0YXRzX2lvY3RsX2dldCBlcnJvciBvbiBpbnRlcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisKKyAgICAgICAgICAgIHJldHVybiAtMjsKKyAgICAgICAgfQorICAgIH0KKworICAgIHN0cmxjcHkoaWZycS0+aWZyX25hbWUsIG5hbWUsIHNpemVvZihpZnJxLT5pZnJfbmFtZSkpOworICAgIHJjID0gaW9jdGwoZmQsIHdoaWNoLCBpZnJxKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGU6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzX2lvY3RsX2dldCBpb2N0bCAlZCByZXR1cm5lZCAlZFxuIiwgd2hpY2gsIHJjKSk7CisgICAgICAgIHJjID0gLTM7CisgICAgfQorCisgICAgaWYob3VyZmQgPj0gMCkKKyAgICAgICAgY2xvc2Uob3VyZmQpOworCisgICAgcmV0dXJuIHJjOworfQorCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMDRmN2JmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qCisgKiBtb2R1bGUgdG8gaW5jbHVkZSB0aGUgbW9kdWxlcworICovCisKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZGF0YV9hY2Nlc3MvZG90M3N0YXRzKQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZSkKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQpCitjb25maWdfcmVxdWlyZShldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0KQorY29uZmlnX3JlcXVpcmUoZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2VzcykKK2NvbmZpZ19yZXF1aXJlKGV0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlKQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg2MzgwYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGUuYwpAQCAtMCwwICsxLDIxNSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qKiBccGFnZSBNRkQgaGVscGVyIGZvciBkb3QzU3RhdHNUYWJsZQorICoKKyAqIFxzZWN0aW9uIGludHJvIEludHJvZHVjdGlvbgorICogSW50cm9kdWN0b3J5IHRleHQuCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworb2lkICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX29pZFtdID0geyBET1QzU1RBVFNUQUJMRV9PSUQgfTsKK2ludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoZG90M1N0YXRzVGFibGVfb2lkKTsKKworZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uIGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dDsKK3N0YXRpYyBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wOworCit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKKworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBkb3QzU3RhdHNUYWJsZSBtb2R1bGUKKyAqLwordm9pZAoraW5pdF9kb3QzU3RhdHNUYWJsZSh2b2lkKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmluaXRfZG90M1N0YXRzVGFibGUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAwOm86IFBlcmZvcm0gZG90M1N0YXRzVGFibGUgb25lLXRpbWUgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZworICAgICAqLworICAgIGlmIChzaG91bGRfaW5pdCgiZG90M1N0YXRzVGFibGUiKSkKKyAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSgpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfZG90M1N0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGRvdDNTdGF0c1RhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25fZG90M1N0YXRzVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImRvdDNTdGF0c1RhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2RvdDNTdGF0c1RhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2RvdDNTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMTpvOiBQZXJmb3JtIGRvdDNTdGF0c1RhYmxlIG9uZS10aW1lIHRhYmxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMjpvOiB8LT5Jbml0aWFsaXplIGRvdDNTdGF0c1RhYmxlIHVzZXIgY29udGV4dAorICAgICAqIGlmIHlvdSdkIGxpa2UgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gc29tZSBkYXRhIGZvciB0aGlzCisgICAgICogdGFibGUsIGFsbG9jYXRlIG9yIHNldCBpdCB1cCBoZXJlLgorICAgICAqLworICAgIC8qCisgICAgICogYSBuZXRzbm1wX2RhdGFfbGlzdCBpcyBhIHNpbXBsZSB3YXkgdG8gc3RvcmUgdm9pZCBwb2ludGVycy4gQSBzaW1wbGUKKyAgICAgKiBzdHJpbmcgdG9rZW4gaXMgdXNlZCB0byBhZGQsIGZpbmQgb3IgcmVtb3ZlIHBvaW50ZXJzLgorICAgICAqLworICAgIGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wCisJPSBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImRvdDNTdGF0c1RhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfZG90M1N0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UoZG90M1N0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9kb3QzU3RhdHNUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfZG90M1N0YXRzVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfZG90M1N0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShkb3QzU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgZG90M1N0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjEwOm86IHwtPiBQZXJmb3JtIGV4dHJhIGRvdDNTdGF0c1RhYmxlIHJvd3JlcSBpbml0aWFsaXphdGlvbi4gKGVnIERFRlZBTFMpCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAorZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgZG90M1N0YXRzVGFibGUgcm93cmVxIGNsZWFudXAuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCAqLworCisvKioKKyAqIHByZS1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTA6bzogUGVyZm9ybSBkb3QzU3RhdHNUYWJsZSBwcmUtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIHBvc3QtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqIE5vdGU6CisgKiAgIE5ldyByb3dzIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIsIGFuZAorICogICBkZWxldGVkIHJvd3MgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyIGFuZAorICogICByZWxlYXNlZC4KKyAqCisgKiBAcGFyYW0gdXNlcl9jb250ZXh0CisgKiBAcGFyYW0gcmMgOiBNRkRfU1VDQ0VTUyBpZiBhbGwgcmVxdWVzdHMgc3VjY2VlZGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogb3RoZXIgZXJyb3IgKGlnbm9yZWQpCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTExOm86IFBlcmZvcm0gZG90M1N0YXRzVGFibGUgcG9zdC1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NzEzZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlLmgKQEAgLTAsMCArMSwyNzEgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGRvdDNTdGF0c1RhYmxlIAorICAgICAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2RvdDNTdGF0c1RhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9kb3QzU3RhdHNUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogV2hlbiB5b3UgcmVnaXN0ZXIgeW91ciBtaWIsIHlvdSBnZXQgdG8gcHJvdmlkZSBhIGdlbmVyaWMKKyAgICAgKiBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB5b3UgZm9yIG1vc3Qgb2YgdGhlCisgICAgICogZnVuY3Rpb25zIGNhbGxzLgorICAgICAqCisgICAgICogVE9ETzoxMDA6cjogUmV2aWV3IGFsbCBjb250ZXh0IHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRPRE86MTAxOm86IHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgcmVnaXN0cmF0aW9uIGNvbnRleHQuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RhdGFfbGlzdCBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb247CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogVE9ETzoxMTA6cjogfC0+IFJldmlldyBkb3QzU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgc3RydWN0dXJlLgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBkYXRhIGZvciBkb3QzU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIHN0b3JhZ2UgZm9yIGFsbCB0aGUgY29sdW1ucyBkZWZpbmVkIGluIHRoZQorICAgICAqIGRvdDNTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX2RhdGFfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzKDIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRkNTRXJyb3JzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNGQ1NFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMoNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKDcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycygxMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNFdGhlckNoaXBTZXQoMTcpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIG9pZCAgICAgICAgICAgICBkb3QzU3RhdHNFdGhlckNoaXBTZXRbMTI4XTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW47ICAgICAgLyogIyBvZiBvaWQgZWxlbWVudHMsIG5vdCBieXRlcyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1N5bWJvbEVycm9ycygxOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGRvdDNTdGF0c1N5bWJvbEVycm9yczsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMoMTkpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzRHVwbGV4U3RhdHVzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSgyMCkvVHJ1dGhWYWx1ZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS93L0Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMoMjEpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXM7CisKKyAgICB9IGRvdDNTdGF0c1RhYmxlX2RhdGE7CisKKworICAgIC8qCisgICAgICogVE9ETzoxMjA6cjogfC0+IFJldmlldyBkb3QzU3RhdHNUYWJsZSBtaWIgaW5kZXguCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGluZGV4IGZvciBkb3QzU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXhfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGRvdDNTdGF0c0luZGV4OworCisKKyAgICB9IGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleDsKKworICAgIC8qCisgICAgICogVE9ETzoxMjE6cjogfCAgIHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgbWF4IGluZGV4IGxlbmd0aC4KKyAgICAgKiBJZiB5b3UgS05PVyB0aGF0IHlvdXIgaW5kZXhlcyB3aWxsIG5ldmVyIGV4Y2VlZCBhIGNlcnRhaW4KKyAgICAgKiBsZW5ndGgsIHVwZGF0ZSB0aGlzIG1hY3JvIHRvIHRoYXQgbGVuZ3RoLgorICAgICAqLworI2RlZmluZSBNQVhfZG90M1N0YXRzVGFibGVfSURYX0xFTiAgICAgMjU1CisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTMwOm86IHwtPiBSZXZpZXcgZG90M1N0YXRzVGFibGUgUm93IHJlcXVlc3QgKHJvd3JlcSkgY29udGV4dC4KKyAgICAgKiBXaGVuIHlvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHlvdSB3aWxsIGJlIHBhc3NlZCBhCisgICAgICogZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCBwb2ludGVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfcyB7CisKKyAgICAvKiogdGhpcyBtdXN0IGJlIGZpcnN0IGZvciBjb250YWluZXIgY29tcGFyZSB0byB3b3JrICovCisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgICAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfZG90M1N0YXRzVGFibGVfSURYX0xFTl07CisKKyAgICAgICAgZG90M1N0YXRzVGFibGVfbWliX2luZGV4IHRibF9pZHg7CisKKyAgICAgICAgZG90M1N0YXRzVGFibGVfZGF0YSBkYXRhOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgY29sdW1uX2V4aXN0c19mbGFnczsgICAgLyogZmxhZ3MgZm9yIGV4aXN0ZW5jZSAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGZsYWdzIHBlciByb3cuIEN1cnJlbnRseSwgdGhlIGZpcnN0IChsb3dlcikgOCBiaXRzIGFyZSByZXNlcnZlZAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIuIFNlZSBtZmQuaCBmb3Igb3RoZXIgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgICAgcm93cmVxX2ZsYWdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MTMxOm86IHwgICB8LT4gQWRkIHVzZWZ1bCBkYXRhIHRvIGRvdDNTdGF0c1RhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAgICAgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBzdG9yYWdlIGZvciBmdXR1cmUgZXhwYW5zaW9uCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqZG90M1N0YXRzVGFibGVfZGF0YV9saXN0OworCisgICAgfSBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgZG90M1N0YXRzVGFibGVfcmVmX3Jvd3JlcV9jdHhfcyB7CisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgfSBkb3QzU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eDsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcHJlX3JlcXVlc3QoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jb250ZXh0KTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2NvbnRleHQsIGludCByYyk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdm9pZCAqdXNlcl9pbml0X2N0eCk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICpkb3QzU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KTsKKworICAgIGV4dGVybiBvaWQgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gaW50ICAgICAgZG90M1N0YXRzVGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaCIKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5oIgorCisgICAgLyoKKyAgICAgKiBEVU1NWSBtYXJrZXJzLCBpZ25vcmUKKyAgICAgKgorICAgICAqIFRPRE86MDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjE5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoyOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mzk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjQ5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZjMzYmYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTAsMCArMSw0MTggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZS5oIgorI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorI2luY2x1ZGUgImlvY3RsX2ltcF9jb21tb24uaCIKKyNlbmRpZgorCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlCisgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBsb2NhdGUgdGhlIGRhdGEgdXNlZCB0byBzYXRpc2Z5CisgKiByZXF1ZXN0cy4KKyAqIAorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLCBsZW5ndGg6IDkKKyAqLworCisvKioKKyAqIGluaXRpYWxpemF0aW9uIGZvciBkb3QzU3RhdHNUYWJsZSBkYXRhIGFjY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwIHRvIGFsbG93IHlvdSB0bworICogYWxsb2NhdGUgYW55IHJlc291cmNlcyB5b3UgbmVlZCBmb3IgdGhlIGRhdGEgdGFibGUuCisgKgorICogQHBhcmFtIGRvdDNTdGF0c1RhYmxlX3JlZworICogICAgICAgIFBvaW50ZXIgdG8gZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogdW5yZWNvdmVyYWJsZSBlcnJvci4KKyAqLworaW50Citkb3QzU3RhdHNUYWJsZV9pbml0X2RhdGEoZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogZG90M1N0YXRzVGFibGVfcmVnKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMzpvOiBJbml0aWFsaXplIGRvdDNTdGF0c1RhYmxlIGRhdGEuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YSAqLworCisvKioKKyAqIGNvbnRhaW5lciBvdmVydmlldworICoKKyAqLworCisvKioKKyAqIGNvbnRhaW5lciBpbml0aWFsaXphdGlvbgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyX3B0ciBBIHBvaW50ZXIgdG8gYSBjb250YWluZXIgcG9pbnRlci4gSWYgeW91CisgKiAgICAgICAgY3JlYXRlIGEgY3VzdG9tIGNvbnRhaW5lciwgdXNlIHRoaXMgcGFyYW1ldGVyIHRvIHJldHVybiBpdAorICogICAgICAgIHRvIHRoZSBNRkQgaGVscGVyLiBJZiBzZXQgdG8gTlVMTCwgdGhlIE1GRCBoZWxwZXIgd2lsbAorICogICAgICAgIGFsbG9jYXRlIGEgY29udGFpbmVyIGZvciB5b3UuCisgKiBAcGFyYW0gIGNhY2hlIEEgcG9pbnRlciB0byBhIGNhY2hlIHN0cnVjdHVyZS4gWW91IGNhbiBzZXQgdGhlIHRpbWVvdXQKKyAqICAgICAgICAgYW5kIG90aGVyIGNhY2hlIGZsYWdzIHVzaW5nIHRoaXMgcG9pbnRlci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuIElmIG5vIGN1c3RvbQorICogIGNvbnRhaW5lciBpcyBhbGxvY2F0ZWQsIHRoZSBNRkQgY29kZSB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdXIuCisgKgorICogIFRoaXMgaXMgYWxzbyB0aGUgcGxhY2UgdG8gc2V0IHVwIGNhY2hlIGJlaGF2aW9yLiBUaGUgZGVmYXVsdCwgdG8KKyAqICBzaW1wbHkgc2V0IHRoZSBjYWNoZSB0aW1lb3V0LCB3aWxsIHdvcmsgd2VsbCB3aXRoIHRoZSBkZWZhdWx0CisgKiAgY29udGFpbmVyLiBJZiB5b3UgYXJlIHVzaW5nIGEgY3VzdG9tIGNvbnRhaW5lciwgeW91IG1heSB3YW50IHRvCisgKiAgbG9vayBhdCB0aGUgY2FjaGUgaGVscGVyIGRvY3VtZW50YXRpb24gdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkKKyAqICBmbGFncyB5b3Ugd2FudCB0byBzZXQuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGluaXRpYWxpemF0aW9uIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBvcGVuaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHdpbGwgc3VwcGx5IHRoZSBkYXRhLCBvcGVuaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKiogY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICogY2FjaGUpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY29udGFpbmVyIHBhcmFtIHRvIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQorICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCisgICAgICovCisgICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgZG90M1N0YXRzVGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IERPVDNTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7ICAgICAgLyogc2Vjb25kcyAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIGNvbnRhaW5lciBzaHV0ZG93bgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyIEEgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzaHV0ZG93biB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSgpLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBjbGVhbnVwIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBjbG9zaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHN1cHBsaWVkIHRoZSBkYXRhLCBjbG9zaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyX3B0cikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworLyoqCisgKiBsb2FkIGluaXRpYWwgZGF0YQorICoKKyAqIFRPRE86MzUwOk06IEltcGxlbWVudCBkb3QzU3RhdHNUYWJsZSBkYXRhIGxvYWQKKyAqIFRoaXMgZnVuY3Rpb24gd2lsbCBhbHNvIGJlIGNhbGxlZCBieSB0aGUgY2FjaGUgaGVscGVyIHRvIGxvYWQKKyAqIHRoZSBjb250YWluZXIgYWdhaW4gKGFmdGVyIHRoZSBjb250YWluZXIgZnJlZSBmdW5jdGlvbiBoYXMgYmVlbgorICogY2FsbGVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIGNvbnRlbnRzKS4KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5lciB0byB3aGljaCBpdGVtcyBzaG91bGQgYmUgaW5zZXJ0ZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRSA6IENhbid0IGFjY2VzcyBkYXRhIHNvdXJjZQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9hZCB0aGUgaW5kZXgoZXMpIChhbmQgZGF0YSwgb3B0aW9uYWxseSkKKyAqICBmb3IgdGhlIGV2ZXJ5IHJvdyBpbiB0aGUgZGF0YSBzZXQuCisgKgorICogQHJlbWFyaworICogIFdoaWxlIGxvYWRpbmcgdGhlIGRhdGEsIHRoZSBvbmx5IGltcG9ydGFudCB0aGluZyBpcyB0aGUgaW5kZXhlcy4KKyAqICBJZiBhY2Nlc3MgdG8geW91ciBkYXRhIGlzIGNoZWFwL2Zhc3QgKGUuZy4geW91IGhhdmUgYSBwb2ludGVyIHRvIGEKKyAqICBzdHJ1Y3R1cmUgaW4gbWVtb3J5KSwgaXQgd291bGQgbWFrZSBzZW5zZSB0byB1cGRhdGUgdGhlIGRhdGEgaGVyZS4KKyAqICBJZiwgaG93ZXZlciwgdGhlIGFjY2Vzc2luZyB0aGUgZGF0YSBpbnZvdmxlcyBtb3JlIHdvcmsgKGUuZy4gcGFyc2luZworICogIHNvbWUgb3RoZXIgZXhpc3RpbmcgZGF0YSwgb3IgcGVmb3JtaW5nIGNhbGN1bGF0aW9ucyB0byBkZXJpdmUgdGhlIGRhdGEpLAorICogIHRoZW4geW91IGNhbiBsaW1pdCB5b3Vyc2VsZiB0byBzZXR0aW5nIHRoZSBpbmRleGVzIGFuZCBzYXZpbmcgYW55CisgKiAgaW5mb3JtYXRpb24geW91IHdpbGwgbmVlZCBsYXRlci4gVGhlbiB1c2UgdGhlIHNhdmVkIGluZm9ybWF0aW9uIGluCisgKiAgZG90M1N0YXRzVGFibGVfcm93X3ByZXAoKSBmb3IgcG9wdWxhdGluZyBkYXRhLgorICoKKyAqIEBub3RlCisgKiAgSWYgeW91IG5lZWQgY29uc2lzdGVuY3kgYmV0d2VlbiByb3dzIChsaWtlIHlvdSB3YW50IHN0YXRpc3RpY3MKKyAqICBmb3IgZWFjaCByb3cgdG8gYmUgZnJvbSB0aGUgc2FtZSB0aW1lIGZyYW1lKSwgeW91IHNob3VsZCBzZXQgYWxsCisgKiAgZGF0YSBoZXJlLgorICoKKyAqLworCisvKgorICoKKyAqIEByZXR2YWwgIE1GRF9TVUNDRVNTIHN1Y2Nlc3MKKyAqIEByZXR2YWwgIE1GRF9FUlJPUiBjb3VsZCBub3QgZ2V0IHRoZSBpbnRlcmZhY2UgbmFtZXMgCisgKiBAcmV0dmFsICBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgZmFpbGVkIHRvIGFsbG9jYXRlIG1lbW9yeQorICogQHJldHZhbCAgLTIgY291bGQgbm90IG9wZW4gYSBzb2NrZXQKKyAqLworCisKK2ludAorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgc2l6ZV90ICAgICAgICAgIGNvdW50ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgZmQ7CisjaWYgZGVmaW5lZChsaW51eCkKKyAgICBsb25nICAgICAgICAgICAgZG90M1N0YXRzSW5kZXg7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gMCwgcmV0dmFsID0gMDsKKyAgICBzdHJ1Y3QgaWZuYW1lICpsaXN0X2hlYWQgPSBOVUxMLCAqcCA9IE5VTEw7CisjZW5kaWYKKyAgICAKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworICAgICAgCisgICAgLyoKKyAgICAgKiBUT0RPOjM1MjpNOiB8ICAgfC0+IHNldCBpbmRleGVzIGluIG5ldyBkb3QzU3RhdHNUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgKiBkYXRhIGNvbnRleHQgd2lsbCBiZSBzZXQgZnJvbSB0aGUgcGFyYW0gKHVubGVzcyBOVUxMLAorICAgICAqIGluIHdoaWNoIGNhc2UgYSBuZXcgZGF0YSBjb250ZXh0IHdpbGwgYmUgYWxsb2NhdGVkKQorICAgICAqLworICAgIAorICAgIC8qCisgICAgICogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGluZGV4IHZhbHVlcworICAgICAqLworCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9ICisgICAgICovCisKKworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgc29ja2V0IGZvciBpb2N0bHMKKyAgICAgKi8KKyAgICAKKyAgICBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZihmZCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgc29ja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qCisgICAgICogZ2V0IHRoZSBpbnRlcmZhY2UgbmFtZXMgb2YgdGhlIGRldmljZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtLCBpbiBjYXNlIG9mIGZhaWx1cmUgcmV0dmFsIHN1Z2dlc3RzIHRoZSByZXNvbiBmb3IgZmFpbHVyZQorICAgICAqIGFuZCBsaXN0X2hlYWQgY29udGFpbnMgbnVsbAorICAgICAqLworCisjaWYgZGVmaW5lZChsaW51eCkKKyAgICBsaXN0X2hlYWQgPSBkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKGxpc3RfaGVhZCwgJnJldHZhbCk7CisKKyAgICBpZiAoIWxpc3RfaGVhZCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2Vzczpkb3QzU3RhdHNUYWJsZSwgZXJyb3IgZ2V0dGluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbVxuIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgZ2V0dGluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbSIpKTsKKyAgICAgICAgY2xvc2UoZmQpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIFdhbGsgb3ZlciB0aGUgbGlzdCBvZiBpbnRlcmZhY2UgbmFtZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGFuZCByZXRyZWl2ZSB0aGUgc3RhdGlzdGljcyAKKyAgICAgKi8KKworICAgIGZvciAocCA9IGxpc3RfaGVhZDsgcDsgcCA9IHAtPmlmbl9uZXh0KSB7CisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJwcm9jZXNzaW5nICclcydcbiIsIHAtPm5hbWUpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgaW5kZXggdmlhIGlvY3RsLgorICAgICAgICAgKi8KKworICAgICAgICBkb3QzU3RhdHNJbmRleCA9IChsb25nKSBkb3Qzc3RhdHNfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0KC0xLCBwLT5uYW1lKTsKKworICAgICAgICAvKiAKKyAgICAgICAgICogICAgZ2V0IHRoZSBkb3Qzc3RhdHMgY29udGVudHMgcG9wdWxhdGVkLCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBhbiBldGhlcm5ldCBkZXZpY2UKKyAgICAgICAgICogICAgdGhlIG9wZXJhdGlvbiB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgYW5kIGFuIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBsb2dnZWQKKyAgICAgICAgICovCisgICAgICAgIAorICAgICAgICByb3dyZXFfY3R4ID0gZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChOVUxMKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1lbW9yeSBhbGxvY2F0aW9uIGZvciBkb3QzU3RhdHNUYWJsZSBmYWlsZWRcbiIpOworICAgICAgICAgICAgY2xvc2UoZmQpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LCBkb3QzU3RhdHNJbmRleCkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJkb3QzU3RhdHNUYWJsZSBkYXRhLlxuIik7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MzUyOnI6IHwgICB8LT4gcG9wdWxhdGUgZG90M1N0YXRzVGFibGUgZGF0YSBjb250ZXh0LgorICAgICAgICAgKiBQb3B1bGF0ZSBkYXRhIGNvbnRleHQgaGVyZS4gKG9wdGlvbmFsbHksIGRlbGF5IHVudGlsIHJvdyBwcmVwKQorICAgICAgICAgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogbm9uLVRSQU5TSUVOVCBkYXRhOiBubyBuZWVkIHRvIGNvcHkuIHNldCBwb2ludGVyIHRvIGRhdGEgCisgICAgICAgICAqLworCisgICAgICAgIG1lbXNldCAoJnJvd3JlcV9jdHgtPmRhdGEsIDAsIHNpemVvZiAocm93cmVxX2N0eC0+ZGF0YSkpOworICAgICAgICByYyA9IGludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZ2V0IChyb3dyZXFfY3R4LCBmZCwgcC0+bmFtZSk7CisKKyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJlcnJvciBnZXR0aW5nIHRoZSBzdGF0aXN0aWNzIGZvciBpbnRlcmZhY2UgfCVzfCAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZG90M1N0YXRzVGFibGUgZGF0YSwgb3BlcmF0aW9uIG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWRcbiIsIHAtPm5hbWUpKTsKKyAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgcmMgPSBpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2R1cGxleF9nZXQocm93cmVxX2N0eCwgZmQsIHAtPm5hbWUpOworICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRvdDNTdGF0c1RhYmxlIiwgImVycm9yIGdldHRpbmcgdGhlIGR1cGxleCBzdGF0dXMgZm9yIHwlc3wgIgorICAgICAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlIGRhdGEsIG9wZXJhdGlvbiBtaWdodCBub3QgYmUgc3VwcG9ydGVkXG4iLCBwLT5uYW1lKSk7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisJaW50ZXJmYWNlX3N5c2NsYXNzbmV0X2RvdDNzdGF0c19nZXQocm93cmVxX2N0eCwgcC0+bmFtZSk7CisKKwlpbnRlcmZhY2VfZG90M3N0YXRzX2dldF9lcnJvcmNvdW50ZXJzKHJvd3JlcV9jdHgsIHAtPm5hbWUpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGluc2VydCBpbnRvIHRhYmxlIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZG90M1N0YXRzVGFibGUiLCAiZXJyb3IgaW5zZXJ0aW5nIHwlc3wiLCBwLT5uYW1lKSk7CisgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgICsrY291bnQ7CisgICAgfQorCisgICAgY2xvc2UoZmQpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBpbnRlcmZhY2UgbmFtZXMgbGlzdCAKKyAgICAgKi8KKworICAgIGlmICggKGRvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUobGlzdF9oZWFkKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJhY2Nlc3M6ZG90M1N0YXRzVGFibGUsIGVycm9yIGZyZWVpbmcgdGhlIGludGVyZmFjZSBuYW1lIGxpc3QgXG4iKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpkb3QzU3RhdHNUYWJsZSIsICJlcnJvciBmcmVlaW5nIHRoZSBpbnRlcmZhY2UgbmFtZSBsaXN0XG4iKSk7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorI2VuZGlmCisKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICJpbnNlcnRlZCAlIiBORVRTTk1QX1BSSXogImQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2xvYWQgKi8KKworLyoqCisgKiBjb250YWluZXIgY2xlYW4gdXAKKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGNvbnRhaW5lciB3aXRoIGFsbCBjdXJyZW50IGl0ZW1zCisgKgorICogIFRoaXMgb3B0aW9uYWwgY2FsbGJhY2sgaXMgY2FsbGVkIHByaW9yIHRvIGFsbAorICogIGl0ZW0ncyBiZWluZyByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lci4gSWYgeW91CisgKiAgbmVlZCB0byBkbyBhbnkgcHJvY2Vzc2luZyBiZWZvcmUgdGhhdCwgZG8gaXQgaGVyZS4KKyAqCisgKiBAbm90ZQorICogIFRoZSBNRkQgaGVscGVyIHdpbGwgdGFrZSBjYXJlIG9mIHJlbGVhc2luZyBhbGwgdGhlIHJvdyBjb250ZXh0cy4KKyAqCisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzgwOk06IEZyZWUgZG90M1N0YXRzVGFibGUgY29udGFpbmVyIGRhdGEuCisgICAgICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogcHJlcGFyZSByb3cgZm9yIHByb2Nlc3NpbmcuCisgKgorICogIFdoZW4gdGhlIGFnZW50IGhhcyBsb2NhdGVkIHRoZSByb3cgZm9yIGEgcmVxdWVzdCwgdGhpcyBmdW5jdGlvbiBpcworICogIGNhbGxlZCB0byBwcmVwYXJlIHRoZSByb3cgZm9yIHByb2Nlc3NpbmcuIElmIHlvdSBmdWxseSBwb3B1bGF0ZWQKKyAqICB0aGUgZGF0YSBjb250ZXh0IGR1cmluZyB0aGUgaW5kZXggc2V0dXAgcGhhc2UsIHlvdSBtYXkgbm90IG5lZWQgdG8KKyAqICBkbyBhbnl0aGluZy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCBwb2ludGVyIHRvIGEgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX3Jvd19wcmVwKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX3Jvd19wcmVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM5MDpvOiBQcmVwYXJlIHJvdyBmb3IgcmVxdWVzdC4KKyAgICAgKiBJZiBwb3B1bGF0aW5nIHJvdyBkYXRhIHdhcyBkZWxheWVkLCB0aGlzIGlzIHRoZSBwbGFjZSB0bworICAgICAqIGZpbGwgaW4gdGhlIHJvdyBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcCAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGIzOWE5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRE9UM1NUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9EQVRBX0FDQ0VTU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzVGFibGUgaXMgc3ViaWQgMiBvZiBkb3QzLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICAgICAqLworCisKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfaW5pdF9kYXRhKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWcpOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTgwOm86IFJldmlldyBkb3QzU3RhdHNUYWJsZSBjYWNoZSB0aW1lb3V0LgorICAgICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGNhY2hlIHRpbWVzIG91dAorICAgICAqLworI2RlZmluZSBET1QzU1RBVFNUQUJMRV9DQUNIRV9USU1FT1VUICAgNjAKKworICAgIHZvaWQgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKTsKKyAgICB2b2lkICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHIpOworCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NhY2hlX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NhY2hlX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyNkZWZpbmUgTUFYX0xJTkVfU0laRSAyNTYKKworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9yb3dfcHJlcChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICB2b2lkICAgICAgICAgICAgaW50ZXJmYWNlX3N5c2NsYXNzbmV0X2RvdDNzdGF0c19nZXQKKyAgICAgICAgKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCBjb25zdCBjaGFyICpuYW1lKTsKKyAgICB2b2lkICAgICAgICAgICAgaW50ZXJmYWNlX2RvdDNzdGF0c19nZXRfZXJyb3Jjb3VudGVycworICAgICAgICAoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsIGNvbnN0IGNoYXIgKm5hbWUpOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5jIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNjQ2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwxNDUwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX2dldCBkYXRhX2dldDogUm91dGluZXMgdG8gZ2V0IGRhdGEKKyAqCisgKiBUT0RPOjIzMDpNOiBJbXBsZW1lbnQgZG90M1N0YXRzVGFibGUgZ2V0IHJvdXRpbmVzLgorICogVE9ETzoyNDA6TTogSW1wbGVtZW50IGRvdDNTdGF0c1RhYmxlIG1hcHBpbmcgcm91dGluZXMgKGlmIGFueSkuCisgKgorICogVGhlc2Ugcm91dGluZSBhcmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHdoZXJlIHRoZQorICogdmFsdWUgc2hvdWxkIGJlIGNvcGllZC4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZG90M1N0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIsIGxlbmd0aDogOQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGRvdDNTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKworCisvKioKKyAqIHNldCBtaWIgaW5kZXgoZXMpCisgKgorICogQHBhcmFtIHRibF9pZHggbWliIGluZGV4IHN0cnVjdHVyZQorICogQHBhcmFtIGRvdDNTdGF0c0luZGV4X3ZhbAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24gaXMgdXNlZnVsIGZvciBzZXR0aW5nIGFsbCB0aGUgTUlCIGluZGV4CisgKiAgY29tcG9uZW50cyB3aXRoIGEgc2luZ2xlIGZ1bmN0aW9uIGNhbGwuIEl0IGlzIGFzc3VtZSB0aGF0IHRoZSBDIHZhbHVlcworICogIGhhdmUgYWxyZWFkeSBiZWVuIG1hcHBlZCBmcm9tIHRoZWlyIG5hdGl2ZS9yYXdmb3JtYXQgdG8gdGhlIE1JQiBmb3JtYXQuCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdDNTdGF0c0luZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9IIAorICAgICAqLworICAgIHRibF9pZHgtPmRvdDNTdGF0c0luZGV4ID0gZG90M1N0YXRzSW5kZXhfdmFsOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNldCByb3cgY29udGV4dCBpbmRleGVzCisgKgorICogQHBhcmFtIHJlcXJlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtaWIgaW5kZXhzLCB0aGVuIHVwZGF0ZXMgdGhlIG9pZCBpbmRleHMKKyAqICBmcm9tIHRoZSBtaWIgaW5kZXguCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGRvdDNTdGF0c0luZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgIGRvdDNTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoJnJvd3JlcV9jdHgtPnRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzCisgKiBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgaXMgc3ViaWQgMiBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4yCisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBhcmUgbm90IGFuIGludGVncmFsIG51bWJlciBvZgorICAgICAgICAgICAgICAgICAgICBvY3RldHMgaW4gbGVuZ3RoIGFuZCBkbyBub3QgcGFzcyB0aGUgRkNTIGNoZWNrLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBhbGlnbm1lbnRFcnJvcgorICAgICAgICAgICAgICAgICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgYnkgdGhlIE1BQyBzZXJ2aWNlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBMTEMgKG9yIG90aGVyIE1BQyB1c2VyKS4gUmVjZWl2ZWQgZnJhbWVzIGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCBtdWx0aXBsZSBlcnJvciBjb25kaXRpb25zIHBlcnRhaW4gYXJlLAorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIG9mIElFRUUgODAyLjMKKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIgTWFuYWdlbWVudCwgY291bnRlZCBleGNsdXNpdmVseSBhY2NvcmRpbmcKKworICAgICAgICAgICAgICAgICAgICB0byB0aGUgZXJyb3Igc3RhdHVzIHByZXNlbnRlZCB0byB0aGUgTExDLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgZm9yIGdyb3VwCisgICAgICAgICAgICAgICAgICAgIGVuY29kaW5nIHNjaGVtZXMgZ3JlYXRlciB0aGFuIDQgYml0cyBwZXIgZ3JvdXAuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzQWxpZ25tZW50RXJyb3JzIG9iamVjdCBmb3IgMTAgR2IvcworICAgICAgICAgICAgICAgICAgICBvciBmYXN0ZXIgaW50ZXJmYWNlcy4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0FsaWdubWVudEVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0FsaWdubWVudEVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0FsaWdubWVudEVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRkNTRXJyb3JzCisgKiBkb3QzU3RhdHNGQ1NFcnJvcnMgaXMgc3ViaWQgMyBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4zCisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBhcmUgYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cworICAgICAgICAgICAgICAgICAgICBpbiBsZW5ndGggYnV0IGRvIG5vdCBwYXNzIHRoZSBGQ1MgY2hlY2suICBUaGlzCisgICAgICAgICAgICAgICAgICAgIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgZnJhbWVzIHJlY2VpdmVkIHdpdGgKKyAgICAgICAgICAgICAgICAgICAgZnJhbWUtdG9vLWxvbmcgb3IgZnJhbWUtdG9vLXNob3J0IGVycm9yLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCB3aGVuIHRoZSBmcmFtZUNoZWNrRXJyb3IKKyAgICAgICAgICAgICAgICAgICAgc3RhdHVzIGlzIHJldHVybmVkIGJ5IHRoZSBNQUMgc2VydmljZSB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgTExDIChvciBvdGhlciBNQUMgdXNlcikuIFJlY2VpdmVkIGZyYW1lcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggbXVsdGlwbGUgZXJyb3IgY29uZGl0aW9ucyBwZXJ0YWluIGFyZSwKKyAgICAgICAgICAgICAgICAgICAgYWNjb3JkaW5nIHRvIHRoZSBjb252ZW50aW9ucyBvZiBJRUVFIDgwMi4zCisgICAgICAgICAgICAgICAgICAgIExheWVyIE1hbmFnZW1lbnQsIGNvdW50ZWQgZXhjbHVzaXZlbHkgYWNjb3JkaW5nCisgICAgICAgICAgICAgICAgICAgIHRvIHRoZSBlcnJvciBzdGF0dXMgcHJlc2VudGVkIHRvIHRoZSBMTEMuCisKKyAgICAgICAgICAgICAgICAgICAgTm90ZTogIENvZGluZyBlcnJvcnMgZGV0ZWN0ZWQgYnkgdGhlIHBoeXNpY2FsCisgICAgICAgICAgICAgICAgICAgIGxheWVyIGZvciBzcGVlZHMgYWJvdmUgMTAgTWIvcyB3aWxsIGNhdXNlIHRoZQorICAgICAgICAgICAgICAgICAgICBmcmFtZSB0byBmYWlsIHRoZSBGQ1MgY2hlY2suCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKworICAgICAgICAgICAgICAgICAgICBpdCBpcyBpbmNyZW1lbnRpbmcgYXQgaXRzIG1heGltdW0gcmF0ZS4gIFNpbmNlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYW1vdW50IG9mIHRpbWUgY291bGQgYmUgbGVzcyB0aGFuIGEKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9uJ3MgcG9sbCBjeWNsZSB0aW1lLCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBhIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGEgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIGlzIGFkdmlzZWQgdG8gcG9sbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M0hDU3RhdHNGQ1NFcnJvcnMgb2JqZWN0IGZvciAxMCBHYi9zIG9yCisgICAgICAgICAgICAgICAgICAgIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRkNTRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRkNTRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNGQ1NFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNGQ1NFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0ZDU0Vycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzRkNTRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ZDU0Vycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRkNTRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0ZDU0Vycm9yc192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRkNTRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNGQ1NFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMKKyAqIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyBpcyBzdWJpZCA0IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjQKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gYSBzaW5nbGUKKyAgICAgICAgICAgICAgICAgICAgY29sbGlzaW9uLCBhbmQgYXJlIHN1YnNlcXVlbnRseSB0cmFuc21pdHRlZAorICAgICAgICAgICAgICAgICAgICBzdWNjZXNzZnVsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgQSBmcmFtZSB0aGF0IGlzIGNvdW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgYWxzbyBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIGVpdGhlciB0aGUgaWZPdXRVY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgIGlmT3V0TXVsdGljYXN0UGt0cywgb3IgaWZPdXRCcm9hZGNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IGNvdW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdC4KKworICAgICAgICAgICAgICAgICAgICBUaGlzIGNvdW50ZXIgZG9lcyBub3QgaW5jcmVtZW50IHdoZW4gdGhlCisgICAgICAgICAgICAgICAgICAgIGludGVyZmFjZSBpcyBvcGVyYXRpbmcgaW4gZnVsbC1kdXBsZXggbW9kZS4KKworICAgICAgICAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4KKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzCisgKiBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyBpcyBzdWJpZCA1IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjUKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gbW9yZQorCisgICAgICAgICAgICAgICAgICAgIHRoYW4gb25lIGNvbGxpc2lvbiBhbmQgYXJlIHN1YnNlcXVlbnRseQorICAgICAgICAgICAgICAgICAgICB0cmFuc21pdHRlZCBzdWNjZXNzZnVsbHkuCisKKyAgICAgICAgICAgICAgICAgICAgQSBmcmFtZSB0aGF0IGlzIGNvdW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgaXMgYWxzbyBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlIG9mIGVpdGhlciB0aGUgaWZPdXRVY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgIGlmT3V0TXVsdGljYXN0UGt0cywgb3IgaWZPdXRCcm9hZGNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICBhbmQgaXMgbm90IGNvdW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2Ugb2YgdGhlIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lcworICAgICAgICAgICAgICAgICAgICBvYmplY3QuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzU1FFVGVzdEVycm9ycworICogZG90M1N0YXRzU1FFVGVzdEVycm9ycyBpcyBzdWJpZCA2IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjYKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiB0aW1lcyB0aGF0IHRoZSBTUUUgVEVTVCBFUlJPUgorICAgICAgICAgICAgICAgICAgICBpcyByZWNlaXZlZCBvbiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLiBUaGUKKyAgICAgICAgICAgICAgICAgICAgU1FFIFRFU1QgRVJST1IgaXMgc2V0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgcnVsZXMgZm9yIHZlcmlmaWNhdGlvbiBvZiB0aGUgU1FFIGRldGVjdGlvbgorICAgICAgICAgICAgICAgICAgICBtZWNoYW5pc20gaW4gdGhlIFBMUyBDYXJyaWVyIFNlbnNlIEZ1bmN0aW9uIGFzCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaWJlZCBpbiBJRUVFIFN0ZC4gODAyLjMsIDIwMDAgRWRpdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgc2VjdGlvbiA3LjIuNC42LgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgb24gaW50ZXJmYWNlcworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpbmcgYXQgc3BlZWRzIGdyZWF0ZXIgdGhhbiAxMCBNYi9zLCBvciBvbgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2VzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU1FFVGVzdEVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzU1FFVGVzdEVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzU1FFVGVzdEVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzU1FFVGVzdEVycm9yc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNTUUVUZXN0RXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c1NRRVRlc3RFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMKKyAqIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyBpcyBzdWJpZCA3IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjcKKyAqIERlc2NyaXB0aW9uOgorQSBjb3VudCBvZiBmcmFtZXMgZm9yIHdoaWNoIHRoZSBmaXJzdAorICAgICAgICAgICAgICAgICAgICB0cmFuc21pc3Npb24gYXR0ZW1wdCBvbiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgIGlzIGRlbGF5ZWQgYmVjYXVzZSB0aGUgbWVkaXVtIGlzIGJ1c3kuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGRvZXMgbm90IGluY2x1ZGUgZnJhbWVzIGludm9sdmVkIGluCisgICAgICAgICAgICAgICAgICAgIGNvbGxpc2lvbnMuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9ucyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNMYXRlQ29sbGlzaW9ucworICogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgaXMgc3ViaWQgOCBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS44CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgdGltZXMgdGhhdCBhIGNvbGxpc2lvbiBpcworICAgICAgICAgICAgICAgICAgICBkZXRlY3RlZCBvbiBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlIGxhdGVyIHRoYW4KKyAgICAgICAgICAgICAgICAgICAgb25lIHNsb3RUaW1lIGludG8gdGhlIHRyYW5zbWlzc2lvbiBvZiBhIHBhY2tldC4KKworICAgICAgICAgICAgICAgICAgICBBIChsYXRlKSBjb2xsaXNpb24gaW5jbHVkZWQgaW4gYSBjb3VudAorICAgICAgICAgICAgICAgICAgICByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpcworICAgICAgICAgICAgICAgICAgICBhbHNvIGNvbnNpZGVyZWQgYXMgYSAoZ2VuZXJpYykgY29sbGlzaW9uIGZvcgorICAgICAgICAgICAgICAgICAgICBwdXJwb3NlcyBvZiBvdGhlciBjb2xsaXNpb24tcmVsYXRlZAorICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0xhdGVDb2xsaXNpb25zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNMYXRlQ29sbGlzaW9uczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zCisgKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zIGlzIHN1YmlkIDkgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuOQorICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyBmb3Igd2hpY2ggdHJhbnNtaXNzaW9uIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBpbnRlcmZhY2UgZmFpbHMgZHVlIHRvIGV4Y2Vzc2l2ZQorICAgICAgICAgICAgICAgICAgICBjb2xsaXNpb25zLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycworICogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyBpcyBzdWJpZCAxMCBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4xMAorICogRGVzY3JpcHRpb246CitBIGNvdW50IG9mIGZyYW1lcyBmb3Igd2hpY2ggdHJhbnNtaXNzaW9uIG9uIGEKKyAgICAgICAgICAgICAgICAgICAgcGFydGljdWxhciBpbnRlcmZhY2UgZmFpbHMgZHVlIHRvIGFuIGludGVybmFsCisgICAgICAgICAgICAgICAgICAgIE1BQyBzdWJsYXllciB0cmFuc21pdCBlcnJvci4gQSBmcmFtZSBpcyBvbmx5CisgICAgICAgICAgICAgICAgICAgIGNvdW50ZWQgYnkgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgaWYgaXQgaXMKKyAgICAgICAgICAgICAgICAgICAgbm90IGNvdW50ZWQgYnkgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICAgICAgZWl0aGVyIHRoZSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9ucyBvYmplY3QsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zIG9iamVjdCwgb3IgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyBvYmplY3QuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIHByZWNpc2UgbWVhbmluZyBvZiB0aGUgY291bnQgcmVwcmVzZW50ZWQgYnkKKyAgICAgICAgICAgICAgICAgICAgYW4gaW5zdGFuY2Ugb2YgdGhpcyBvYmplY3QgaXMgaW1wbGVtZW50YXRpb24tCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZmljLiAgSW4gcGFydGljdWxhciwgYW4gaW5zdGFuY2Ugb2YgdGhpcworICAgICAgICAgICAgICAgICAgICBvYmplY3QgbWF5IHJlcHJlc2VudCBhIGNvdW50IG9mIHRyYW5zbWlzc2lvbgorICAgICAgICAgICAgICAgICAgICBlcnJvcnMgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGNvdW50ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyBvYmplY3QgZm9yCisgICAgICAgICAgICAgICAgICAgIDEwIEdiL3Mgb3IgZmFzdGVyIGludGVyZmFjZXMuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisKKyAgICAgICAgICAgICAgICAgICAgb2NjdXIgYXQgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3lzdGVtLCBhbmQgYXQgb3RoZXIgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZQorICAgICAgICAgICAgICAgICAgICB2YWx1ZSBvZiBpZkNvdW50ZXJEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzCisgKiBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnMgaXMgc3ViaWQgMTEgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTEKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiB0aW1lcyB0aGF0IHRoZSBjYXJyaWVyIHNlbnNlCisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiB3YXMgbG9zdCBvciBuZXZlciBhc3NlcnRlZCB3aGVuCisgICAgICAgICAgICAgICAgICAgIGF0dGVtcHRpbmcgdG8gdHJhbnNtaXQgYSBmcmFtZSBvbiBhIHBhcnRpY3VsYXIKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlLgorCisgICAgICAgICAgICAgICAgICAgIFRoZSBjb3VudCByZXByZXNlbnRlZCBieSBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBpbmNyZW1lbnRlZCBhdCBtb3N0IG9uY2UgcGVyCisgICAgICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbiBhdHRlbXB0LCBldmVuIGlmIHRoZSBjYXJyaWVyIHNlbnNlCisgICAgICAgICAgICAgICAgICAgIGNvbmRpdGlvbiBmbHVjdHVhdGVzIGR1cmluZyBhIHRyYW5zbWlzc2lvbgorICAgICAgICAgICAgICAgICAgICBhdHRlbXB0LgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgY291bnRlciBkb2VzIG5vdCBpbmNyZW1lbnQgd2hlbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlIGlzIG9wZXJhdGluZyBpbiBmdWxsLWR1cGxleCBtb2RlLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNGcmFtZVRvb0xvbmdzCisgKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzIGlzIHN1YmlkIDEzIG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjEzCisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIHJlY2VpdmVkIG9uIGEgcGFydGljdWxhcgorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgdGhhdCBleGNlZWQgdGhlIG1heGltdW0gcGVybWl0dGVkCisgICAgICAgICAgICAgICAgICAgIGZyYW1lIHNpemUuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGluY3JlbWVudGVkIHdoZW4gdGhlIGZyYW1lVG9vTG9uZworICAgICAgICAgICAgICAgICAgICBzdGF0dXMgaXMgcmV0dXJuZWQgYnkgdGhlIE1BQyBzZXJ2aWNlIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICBMTEMgKG9yIG90aGVyIE1BQyB1c2VyKS4gUmVjZWl2ZWQgZnJhbWVzIGZvcgorICAgICAgICAgICAgICAgICAgICB3aGljaCBtdWx0aXBsZSBlcnJvciBjb25kaXRpb25zIHBlcnRhaW4gYXJlLAorICAgICAgICAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIGNvbnZlbnRpb25zIG9mIElFRUUgODAyLjMKKyAgICAgICAgICAgICAgICAgICAgTGF5ZXIgTWFuYWdlbWVudCwgY291bnRlZCBleGNsdXNpdmVseSBhY2NvcmRpbmcKKyAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGVycm9yIHN0YXR1cyBwcmVzZW50ZWQgdG8gdGhlIExMQy4KKworICAgICAgICAgICAgICAgICAgICBGb3IgaW50ZXJmYWNlcyBvcGVyYXRpbmcgYXQgMTAgR2IvcywgdGhpcworICAgICAgICAgICAgICAgICAgICBjb3VudGVyIGNhbiByb2xsIG92ZXIgaW4gbGVzcyB0aGFuIDgwIG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisgICAgICAgICAgICAgICAgICAgIG1hbmFnZW1lbnQgc3RhdGlvbidzIHBvbGwgY3ljbGUgdGltZSwgaW4gb3JkZXIKKyAgICAgICAgICAgICAgICAgICAgdG8gYXZvaWQgYSBsb3NzIG9mIGluZm9ybWF0aW9uLCBhIG1hbmFnZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgc3RhdGlvbiBpcyBhZHZpc2VkIHRvIHBvbGwgdGhlCisgICAgICAgICAgICAgICAgICAgIGRvdDNIQ1N0YXRzRnJhbWVUb29Mb25ncyBvYmplY3QgZm9yIDEwIEdiL3MKKyAgICAgICAgICAgICAgICAgICAgb3IgZmFzdGVyIGludGVyZmFjZXMuCisKKyAgICAgICAgICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuCisgICAgICAgICAgICAgICAgICAgIG9jY3VyIGF0IHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICAgICAgICAgICAgIHN5c3RlbSwgYW5kIGF0IG90aGVyIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUgb2YgaWZDb3VudGVyRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzRnJhbWVUb29Mb25nc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRnJhbWVUb29Mb25nczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycworICogZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzIGlzIHN1YmlkIDE2IG9mIGRvdDNTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMi4xLjE2CisgKiBEZXNjcmlwdGlvbjoKK0EgY291bnQgb2YgZnJhbWVzIGZvciB3aGljaCByZWNlcHRpb24gb24gYQorICAgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIGludGVyZmFjZSBmYWlscyBkdWUgdG8gYW4gaW50ZXJuYWwKKyAgICAgICAgICAgICAgICAgICAgTUFDIHN1YmxheWVyIHJlY2VpdmUgZXJyb3IuIEEgZnJhbWUgaXMgb25seQorICAgICAgICAgICAgICAgICAgICBjb3VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMgb2JqZWN0IGlmIGl0IGlzCisgICAgICAgICAgICAgICAgICAgIG5vdCBjb3VudGVkIGJ5IHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgICAgIGVpdGhlciB0aGUgZG90M1N0YXRzRnJhbWVUb29Mb25ncyBvYmplY3QsIHRoZQorICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMgb2JqZWN0LCBvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzRkNTRXJyb3JzIG9iamVjdC4KKworICAgICAgICAgICAgICAgICAgICBUaGUgcHJlY2lzZSBtZWFuaW5nIG9mIHRoZSBjb3VudCByZXByZXNlbnRlZCBieQorICAgICAgICAgICAgICAgICAgICBhbiBpbnN0YW5jZSBvZiB0aGlzIG9iamVjdCBpcyBpbXBsZW1lbnRhdGlvbi0KKyAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWMuICBJbiBwYXJ0aWN1bGFyLCBhbiBpbnN0YW5jZSBvZiB0aGlzCisgICAgICAgICAgICAgICAgICAgIG9iamVjdCBtYXkgcmVwcmVzZW50IGEgY291bnQgb2YgcmVjZWl2ZSBlcnJvcnMKKyAgICAgICAgICAgICAgICAgICAgb24gYSBwYXJ0aWN1bGFyIGludGVyZmFjZSB0aGF0IGFyZSBub3QKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGNvdW50ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKworICAgICAgICAgICAgICAgICAgICBpdCBpcyBpbmNyZW1lbnRpbmcgYXQgaXRzIG1heGltdW0gcmF0ZS4gIFNpbmNlCisgICAgICAgICAgICAgICAgICAgIHRoYXQgYW1vdW50IG9mIHRpbWUgY291bGQgYmUgbGVzcyB0aGFuIGEKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9uJ3MgcG9sbCBjeWNsZSB0aW1lLCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBhIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGEgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIGlzIGFkdmlzZWQgdG8gcG9sbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M0hDU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMgb2JqZWN0IGZvcgorICAgICAgICAgICAgICAgICAgICAxMCBHYi9zIG9yIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzRXRoZXJDaGlwU2V0CisgKiBkb3QzU3RhdHNFdGhlckNoaXBTZXQgaXMgc3ViaWQgMTcgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIERlcHJlY2F0ZWQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTcKKyAqIERlc2NyaXB0aW9uOgorKioqKioqKiogVEhJUyBPQkpFQ1QgSVMgREVQUkVDQVRFRCAqKioqKioqKgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGNvbnRhaW5zIGFuIE9CSkVDVCBJREVOVElGSUVSCisgICAgICAgICAgICAgICAgICAgIHdoaWNoIGlkZW50aWZpZXMgdGhlIGNoaXBzZXQgdXNlZCB0bworICAgICAgICAgICAgICAgICAgICByZWFsaXplIHRoZSBpbnRlcmZhY2UuIEV0aGVybmV0LWxpa2UKKyAgICAgICAgICAgICAgICAgICAgaW50ZXJmYWNlcyBhcmUgdHlwaWNhbGx5IGJ1aWx0IG91dCBvZgorICAgICAgICAgICAgICAgICAgICBzZXZlcmFsIGRpZmZlcmVudCBjaGlwcy4gVGhlIE1JQiBpbXBsZW1lbnRvcgorICAgICAgICAgICAgICAgICAgICBpcyBwcmVzZW50ZWQgd2l0aCBhIGRlY2lzaW9uIG9mIHdoaWNoIGNoaXAKKyAgICAgICAgICAgICAgICAgICAgdG8gaWRlbnRpZnkgdmlhIHRoaXMgb2JqZWN0LiBUaGUgaW1wbGVtZW50b3IKKyAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGlkZW50aWZ5IHRoZSBjaGlwIHdoaWNoIGlzIHVzdWFsbHkKKyAgICAgICAgICAgICAgICAgICAgY2FsbGVkIHRoZSBNZWRpdW0gQWNjZXNzIENvbnRyb2wgY2hpcC4KKyAgICAgICAgICAgICAgICAgICAgSWYgbm8gc3VjaCBjaGlwIGlzIGVhc2lseSBpZGVudGlmaWFibGUsCisgICAgICAgICAgICAgICAgICAgIHRoZSBpbXBsZW1lbnRvciBzaG91bGQgaWRlbnRpZnkgdGhlIGNoaXAKKyAgICAgICAgICAgICAgICAgICAgd2hpY2ggYWN0dWFsbHkgZ2F0aGVycyB0aGUgdHJhbnNtaXQKKyAgICAgICAgICAgICAgICAgICAgYW5kIHJlY2VpdmUgc3RhdGlzdGljcyBhbmQgZXJyb3IKKyAgICAgICAgICAgICAgICAgICAgaW5kaWNhdGlvbnMuIFRoaXMgd291bGQgYWxsb3cgYQorICAgICAgICAgICAgICAgICAgICBtYW5hZ2VyIHN0YXRpb24gdG8gY29ycmVsYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICBzdGF0aXN0aWNzIGFuZCB0aGUgY2hpcCBnZW5lcmF0aW5nCisgICAgICAgICAgICAgICAgICAgIHRoZW0sIGdpdmluZyBpdCB0aGUgYWJpbGl0eSB0byB0YWtlCisgICAgICAgICAgICAgICAgICAgIGludG8gYWNjb3VudCBhbnkga25vd24gYW5vbWFsaWVzCisgICAgICAgICAgICAgICAgICAgIGluIHRoZSBjaGlwLgorCisgICAgICAgICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQuICBJbXBsZW1lbnRhdGlvbgorICAgICAgICAgICAgICAgICAgICBmZWVkYmFjayBpbmRpY2F0ZXMgdGhhdCBpdCBpcyBvZiBsaW1pdGVkIHVzZSBmb3IKKyAgICAgICAgICAgICAgICAgICAgZGVidWdnaW5nIG5ldHdvcmsgcHJvYmxlbXMgaW4gdGhlIGZpZWxkLCBhbmQKKyAgICAgICAgICAgICAgICAgICAgdGhlIGFkbWluaXN0cmF0aXZlIG92ZXJoZWFkIGludm9sdmVkIGluCisgICAgICAgICAgICAgICAgICAgIG1haW50YWluaW5nIGEgcmVnaXN0cnkgb2YgY2hpcHNldCBPSURzIGlzIG5vdAorICAgICAgICAgICAgICAgICAgICBqdXN0aWZpZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBPQkpFQ1RJRCAoYmFzZWQgb24gcGVybHR5cGUgT0JKRUNUSUQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fT0JKRUNUX0lELiBUaGUgQyB0eXBlIGRlY2wgaXMgb2lkIChvaWQpCisgKiBUaGlzIGRhdGEgdHlwZSByZXF1aXJlcyBhIGxlbmd0aC4KKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNFdGhlckNoaXBTZXQgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgb2lkIHZhcmlhYmxlCisgKiBAcGFyYW0gZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gYSBzaXplX3QuIE9uIGVudHJ5LCBpdCB3aWxsIGNvbnRhaW4gdGhlIHNpemUgKGluIGJ5dGVzKQorICogICAgICAgIHBvaW50ZWQgdG8gYnkgZG90M1N0YXRzRXRoZXJDaGlwU2V0LgorICogICAgICAgIE9uIGV4aXQsIHRoaXMgdmFsdWUgc2hvdWxkIGNvbnRhaW4gdGhlIGRhdGEgc2l6ZSAoaW4gYnl0ZXMpLgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisqCisgKiBAbm90ZSBJZiB5b3UgbmVlZCBtb3JlIHRoYW4gKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyKSBieXRlcyBvZiBtZW1vcnksCisgKiAgICAgICBhbGxvY2F0ZSBpdCB1c2luZyBtYWxsb2MoKSBhbmQgdXBkYXRlIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0ci4KKyAqICAgICAgIDxiPkRPIE5PVDwvYj4gZnJlZSB0aGUgcHJldmlvdXMgcG9pbnRlci4KKyAqICAgICAgIFRoZSBNRkQgaGVscGVyIHdpbGwgcmVsZWFzZSB0aGUgbWVtb3J5IHlvdSBhbGxvY2F0ZS4KKyAqCisgKiBAcmVtYXJrIElmIHlvdSBjYWxsIHRoaXMgZnVuY3Rpb24geW91cnNlbGYsIHlvdSBhcmUgcmVzcG9uc2libGUKKyAqICAgICAgICAgZm9yIGNoZWNraW5nIGlmIHRoZSBwb2ludGVyIGNoYW5nZWQsIGFuZCBmcmVlaW5nIGFueQorICogICAgICAgICBwcmV2aW91c2x5IGFsbG9jYXRlZCBtZW1vcnkuIChOb3QgbmVjZXNzYXJ5IGlmIHlvdSBwYXNzCisgKiAgICAgICAgIGluIGEgcG9pbnRlciB0byBzdGF0aWMgbWVtb3J5LCBvYnZpb3VzbHkuKQorICovCitpbnQKK2RvdDNTdGF0c0V0aGVyQ2hpcFNldF9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqKiBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCisgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyKQorICAgICAgICAgICAgICAgICAgICYmIChOVUxMICE9ICpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNFdGhlckNoaXBTZXRfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRXRoZXJDaGlwU2V0IGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIgKSBkYXRhIGFuZCAoKiBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9sZW5fcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBkb3QzU3RhdHNFdGhlckNoaXBTZXQgZGF0YQorICAgICAqLworICAgIGlmICgoTlVMTCA9PSAoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0cikpIHx8CisgICAgICAgICgoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpIDwKKyAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW4gKgorICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldFswXSkpKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgZG90M1N0YXRzRXRoZXJDaGlwU2V0IGRhdGEKKyAgICAgICAgICovCisgICAgICAgICgqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfcHRyKSA9CisgICAgICAgICAgICBtYWxsb2Mocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRfbGVuICoKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gKCpkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CisgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgICAgICB9CisgICAgfQorICAgICgqZG90M1N0YXRzRXRoZXJDaGlwU2V0X3ZhbF9wdHJfbGVuX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW4gKgorICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pOworICAgIG1lbWNweSgoKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX3B0ciksCisgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzRXRoZXJDaGlwU2V0LAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0V0aGVyQ2hpcFNldF9sZW4gKgorICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNFdGhlckNoaXBTZXRbMF0pKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRXRoZXJDaGlwU2V0X2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzU3ltYm9sRXJyb3JzCisgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnMgaXMgc3ViaWQgMTggb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMTgKKyAqIERlc2NyaXB0aW9uOgorRm9yIGFuIGludGVyZmFjZSBvcGVyYXRpbmcgYXQgMTAwIE1iL3MsIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGltZXMgdGhlcmUgd2FzIGFuIGludmFsaWQgZGF0YSBzeW1ib2wKKyAgICAgICAgICAgICAgICAgICAgd2hlbiBhIHZhbGlkIGNhcnJpZXIgd2FzIHByZXNlbnQuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGFuIGludGVyZmFjZSBvcGVyYXRpbmcgaW4gaGFsZi1kdXBsZXggbW9kZQorICAgICAgICAgICAgICAgICAgICBhdCAxMDAwIE1iL3MsIHRoZSBudW1iZXIgb2YgdGltZXMgdGhlIHJlY2VpdmluZworICAgICAgICAgICAgICAgICAgICBtZWRpYSBpcyBub24taWRsZSAoYSBjYXJyaWVyIGV2ZW50KSBmb3IgYSBwZXJpb2QKKyAgICAgICAgICAgICAgICAgICAgb2YgdGltZSBlcXVhbCB0byBvciBncmVhdGVyIHRoYW4gc2xvdFRpbWUsIGFuZAorICAgICAgICAgICAgICAgICAgICBkdXJpbmcgd2hpY2ggdGhlcmUgd2FzIGF0IGxlYXN0IG9uZSBvY2N1cnJlbmNlCisgICAgICAgICAgICAgICAgICAgIG9mIGFuIGV2ZW50IHRoYXQgY2F1c2VzIHRoZSBQSFkgdG8gaW5kaWNhdGUKKyAgICAgICAgICAgICAgICAgICAgJ0RhdGEgcmVjZXB0aW9uIGVycm9yJyBvciAnY2FycmllciBleHRlbmQgZXJyb3InCisgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBHTUlJLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbnRlcmZhY2Ugb3BlcmF0aW5nIGluIGZ1bGwtZHVwbGV4IG1vZGUKKyAgICAgICAgICAgICAgICAgICAgYXQgMTAwMCBNYi9zLCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSByZWNlaXZpbmcKKyAgICAgICAgICAgICAgICAgICAgbWVkaWEgaXMgbm9uLWlkbGUgKGEgY2FycmllciBldmVudCkgZm9yIGEgcGVyaW9kCisgICAgICAgICAgICAgICAgICAgIG9mIHRpbWUgZXF1YWwgdG8gb3IgZ3JlYXRlciB0aGFuIG1pbkZyYW1lU2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgYW5kIGR1cmluZyB3aGljaCB0aGVyZSB3YXMgYXQgbGVhc3Qgb25lCisgICAgICAgICAgICAgICAgICAgIG9jY3VycmVuY2Ugb2YgYW4gZXZlbnQgdGhhdCBjYXVzZXMgdGhlIFBIWSB0bworICAgICAgICAgICAgICAgICAgICBpbmRpY2F0ZSAnRGF0YSByZWNlcHRpb24gZXJyb3InIG9uIHRoZSBHTUlJLgorCisgICAgICAgICAgICAgICAgICAgIEZvciBhbiBpbnRlcmZhY2Ugb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoZQorICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGltZXMgdGhlIHJlY2VpdmluZyBtZWRpYSBpcyBub24taWRsZQorICAgICAgICAgICAgICAgICAgICAoYSBjYXJyaWVyIGV2ZW50KSBmb3IgYSBwZXJpb2Qgb2YgdGltZSBlcXVhbCB0bworICAgICAgICAgICAgICAgICAgICBvciBncmVhdGVyIHRoYW4gbWluRnJhbWVTaXplLCBhbmQgZHVyaW5nIHdoaWNoCisgICAgICAgICAgICAgICAgICAgIHRoZXJlIHdhcyBhdCBsZWFzdCBvbmUgb2NjdXJyZW5jZSBvZiBhbiBldmVudAorICAgICAgICAgICAgICAgICAgICB0aGF0IGNhdXNlcyB0aGUgUEhZIHRvIGluZGljYXRlICdSZWNlaXZlIEVycm9yJworICAgICAgICAgICAgICAgICAgICBvbiB0aGUgWEdNSUkuCisKKyAgICAgICAgICAgICAgICAgICAgVGhlIGNvdW50IHJlcHJlc2VudGVkIGJ5IGFuIGluc3RhbmNlIG9mIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0IGlzIGluY3JlbWVudGVkIGF0IG1vc3Qgb25jZSBwZXIgY2FycmllcgorICAgICAgICAgICAgICAgICAgICBldmVudCwgZXZlbiBpZiBtdWx0aXBsZSBzeW1ib2wgZXJyb3JzIG9jY3VyCisgICAgICAgICAgICAgICAgICAgIGR1cmluZyB0aGUgY2FycmllciBldmVudC4gIFRoaXMgY291bnQgZG9lcworICAgICAgICAgICAgICAgICAgICBub3QgaW5jcmVtZW50IGlmIGEgY29sbGlzaW9uIGlzIHByZXNlbnQuCisKKyAgICAgICAgICAgICAgICAgICAgVGhpcyBjb3VudGVyIGRvZXMgbm90IGluY3JlbWVudCB3aGVuIHRoZQorICAgICAgICAgICAgICAgICAgICBpbnRlcmZhY2UgaXMgb3BlcmF0aW5nIGF0IDEwIE1iL3MuCisKKyAgICAgICAgICAgICAgICAgICAgRm9yIGludGVyZmFjZXMgb3BlcmF0aW5nIGF0IDEwIEdiL3MsIHRoaXMKKyAgICAgICAgICAgICAgICAgICAgY291bnRlciBjYW4gcm9sbCBvdmVyIGluIGxlc3MgdGhhbiA1IG1pbnV0ZXMgaWYKKyAgICAgICAgICAgICAgICAgICAgaXQgaXMgaW5jcmVtZW50aW5nIGF0IGl0cyBtYXhpbXVtIHJhdGUuICBTaW5jZQorICAgICAgICAgICAgICAgICAgICB0aGF0IGFtb3VudCBvZiB0aW1lIGNvdWxkIGJlIGxlc3MgdGhhbiBhCisKKyAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9uJ3MgcG9sbCBjeWNsZSB0aW1lLCBpbiBvcmRlcgorICAgICAgICAgICAgICAgICAgICB0byBhdm9pZCBhIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGEgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzdGF0aW9uIGlzIGFkdmlzZWQgdG8gcG9sbCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZG90M0hDU3RhdHNTeW1ib2xFcnJvcnMgb2JqZWN0IGZvciAxMCBHYi9zCisgICAgICAgICAgICAgICAgICAgIG9yIGZhc3RlciBpbnRlcmZhY2VzLgorCisgICAgICAgICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbgorICAgICAgICAgICAgICAgICAgICBvY2N1ciBhdCByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudAorICAgICAgICAgICAgICAgICAgICBzeXN0ZW0sIGFuZCBhdCBvdGhlciB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlCisgICAgICAgICAgICAgICAgICAgIHZhbHVlIG9mIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzU3ltYm9sRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzU3ltYm9sRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50Citkb3QzU3RhdHNTeW1ib2xFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRvdDNTdGF0c1N5bWJvbEVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1N5bWJvbEVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZG90M1N0YXRzU3ltYm9sRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1N5bWJvbEVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZG90M1N0YXRzU3ltYm9sRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNFbnRyeS5kb3QzU3RhdHNEdXBsZXhTdGF0dXMKKyAqIGRvdDNTdGF0c0R1cGxleFN0YXR1cyBpcyBzdWJpZCAxOSBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4xOQorICogRGVzY3JpcHRpb246CitUaGUgY3VycmVudCBtb2RlIG9mIG9wZXJhdGlvbiBvZiB0aGUgTUFDCisgICAgICAgICAgICAgICAgICAgIGVudGl0eS4gICd1bmtub3duJyBpbmRpY2F0ZXMgdGhhdCB0aGUgY3VycmVudAorICAgICAgICAgICAgICAgICAgICBkdXBsZXggbW9kZSBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZC4KKworICAgICAgICAgICAgICAgICAgICBNYW5hZ2VtZW50IGNvbnRyb2wgb2YgdGhlIGR1cGxleCBtb2RlIGlzCisgICAgICAgICAgICAgICAgICAgIGFjY29tcGxpc2hlZCB0aHJvdWdoIHRoZSBNQVUgTUlCLiAgV2hlbgorICAgICAgICAgICAgICAgICAgICBhbiBpbnRlcmZhY2UgZG9lcyBub3Qgc3VwcG9ydCBhdXRvbmVnb3RpYXRpb24sCisgICAgICAgICAgICAgICAgICAgIG9yIHdoZW4gYXV0b25lZ290aWF0aW9uIGlzIG5vdCBlbmFibGVkLCB0aGUKKyAgICAgICAgICAgICAgICAgICAgZHVwbGV4IG1vZGUgaXMgY29udHJvbGxlZCB1c2luZworICAgICAgICAgICAgICAgICAgICBpZk1hdURlZmF1bHRUeXBlLiAgV2hlbiBhdXRvbmVnb3RpYXRpb24gaXMKKyAgICAgICAgICAgICAgICAgICAgc3VwcG9ydGVkIGFuZCBlbmFibGVkLCBkdXBsZXggbW9kZSBpcyBjb250cm9sbGVkCisgICAgICAgICAgICAgICAgICAgIHVzaW5nIGlmTWF1QXV0b05lZ0FkdmVydGlzZWRCaXRzLiAgSW4gZWl0aGVyCisgICAgICAgICAgICAgICAgICAgIGNhc2UsIHRoZSBjdXJyZW50bHkgb3BlcmF0aW5nIGR1cGxleCBtb2RlIGlzCisgICAgICAgICAgICAgICAgICAgIHJlZmxlY3RlZCBib3RoIGluIHRoaXMgb2JqZWN0IGFuZCBpbiBpZk1hdVR5cGUuCisKKyAgICAgICAgICAgICAgICAgICAgTm90ZSB0aGF0IHRoaXMgb2JqZWN0IHByb3ZpZGVzIHJlZHVuZGFudAorICAgICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiB3aXRoIGlmTWF1VHlwZS4gIE5vcm1hbGx5LCByZWR1bmRhbnQKKyAgICAgICAgICAgICAgICAgICAgb2JqZWN0cyBhcmUgZGlzY291cmFnZWQuICBIb3dldmVyLCBpbiB0aGlzCisgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlLCBpdCBhbGxvd3MgYSBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uIHRvCisgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSB0aGUgZHVwbGV4IHN0YXR1cyBvZiBhbiBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICAgd2l0aG91dCBoYXZpbmcgdG8ga25vdyBldmVyeSBwb3NzaWJsZSB2YWx1ZSBvZgorICAgICAgICAgICAgICAgICAgICBpZk1hdVR5cGUuICBUaGlzIHdhcyBmZWx0IHRvIGJlIHN1ZmZpY2llbnRseQorICAgICAgICAgICAgICAgICAgICB2YWx1YWJsZSB0byBqdXN0aWZ5IHRoZSByZWR1bmRhbmN5LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogRW51bSByYW5nZTogMy84LiBWYWx1ZXM6ICB1bmtub3duKDEpLCBoYWxmRHVwbGV4KDIpLCBmdWxsRHVwbGV4KDMpCisgKgorICogSXRzIHN5bnRheCBpcyBJTlRFR0VSIChiYXNlZCBvbiBwZXJsdHlwZSBJTlRFR0VSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0lOVEVHRVIuIFRoZSBDIHR5cGUgZGVjbCBpcyBsb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzRHVwbGV4U3RhdHVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZG90M1N0YXRzRHVwbGV4U3RhdHVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzRHVwbGV4U3RhdHVzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZG90M1N0YXRzRHVwbGV4U3RhdHVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNEdXBsZXhTdGF0dXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNEdXBsZXhTdGF0dXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c0R1cGxleFN0YXR1c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpkb3QzU3RhdHNEdXBsZXhTdGF0dXNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmRvdDNTdGF0c0R1cGxleFN0YXR1czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzRHVwbGV4U3RhdHVzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogRXRoZXJMaWtlLU1JQjo6ZG90M1N0YXRzRW50cnkuZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5CisgKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHkgaXMgc3ViaWQgMjAgb2YgZG90M1N0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTAuNy4yLjEuMjAKKyAqIERlc2NyaXB0aW9uOgorJ3RydWUnIGZvciBpbnRlcmZhY2VzIG9wZXJhdGluZyBhdCBzcGVlZHMgYWJvdmUKKyAgICAgICAgICAgICAgICAgICAgMTAwMCBNYi9zIHRoYXQgc3VwcG9ydCBSYXRlIENvbnRyb2wgdGhyb3VnaAorICAgICAgICAgICAgICAgICAgICBsb3dlcmluZyB0aGUgYXZlcmFnZSBkYXRhIHJhdGUgb2YgdGhlIE1BQworICAgICAgICAgICAgICAgICAgICBzdWJsYXllciwgd2l0aCBmcmFtZSBncmFudWxhcml0eSwgYW5kICdmYWxzZScKKyAgICAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogRW51bSByYW5nZTogMi84LiBWYWx1ZXM6ICB0cnVlKDEpLCBmYWxzZSgyKQorICoKKyAqIEl0cyBzeW50YXggaXMgVHJ1dGhWYWx1ZSAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGxvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5IGRhdGEuCisgICAgICogY29weSAoKiBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c0VudHJ5LmRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzCisgKiBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cyBpcyBzdWJpZCAyMSBvZiBkb3QzU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xMC43LjIuMS4yMQorICogRGVzY3JpcHRpb246CitUaGUgY3VycmVudCBSYXRlIENvbnRyb2wgbW9kZSBvZiBvcGVyYXRpb24gb2YKKyAgICAgICAgICAgICAgICAgICAgdGhlIE1BQyBzdWJsYXllciBvZiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqIEVudW0gcmFuZ2U6IDMvOC4gVmFsdWVzOiAgcmF0ZUNvbnRyb2xPZmYoMSksIHJhdGVDb250cm9sT24oMiksIHVua25vd24oMykKKyAqCisgKiBJdHMgc3ludGF4IGlzIElOVEVHRVIgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5kb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXNfZ2V0ICovCisKKworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9nZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTQzY2QzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX2dldC5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqIEBmaWxlIGRvdDNTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKKyAqCisgKiBAYWRkdG9ncm91cCBnZXQKKyAqCisgKiBQcm90b3R5cGVzIGZvciBnZXQgZnVuY3Rpb25zCisgKgorICogQHsKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9EQVRBX0dFVF9ICisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBFdGhlckxpa2UtTUlCOjpkb3QzU3RhdHNUYWJsZSBpcyBzdWJpZCAyIG9mIGRvdDMuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKiBpbmRleGVzCisgICAgICovCisKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzQWxpZ25tZW50RXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNGQ1NFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNGQ1NFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1NpbmdsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzU1FFVGVzdEVycm9yc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0RlZmVycmVkVHJhbnNtaXNzaW9uc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0V4Y2Vzc2l2ZUNvbGxpc2lvbnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1RyYW5zbWl0RXJyb3JzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3NfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNGcmFtZVRvb0xvbmdzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0V0aGVyQ2hpcFNldF9nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNFdGhlckNoaXBTZXRfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmRvdDNTdGF0c0V0aGVyQ2hpcFNldF92YWxfcHRyX2xlbl9wdHIpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfZ2V0KGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNTeW1ib2xFcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c0R1cGxleFN0YXR1c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5X3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c19nZXQoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzX3ZhbF9wdHIpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZG90M1N0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3QzU3RhdHNJbmRleF92YWwpOworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleGVzX3NldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBkb3QzU3RhdHNJbmRleF92YWwpOworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBET1QzU1RBVFNUQUJMRV9EQVRBX0dFVF9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuYyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGMyZGEyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9kYXRhX3NldC5jCkBAIC0wLDAgKzEsMjggQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDc3ICQgb2YgJAorICoKKyAqICRJZDokCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZG90M1N0YXRzVGFibGUuaCIKKworCisvKiogQGRlZmdyb3VwIGRhdGFfc2V0IGRhdGFfc2V0OiBSb3V0aW5lcyB0byBzZXQgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIHNldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggdGhlIG5ldyB2YWx1ZS4KKyAqIAorICogQHsKKyAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2RhdGFfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmEwMzM1NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZGF0YV9zZXQuaApAQCAtMCwwICsxLDI4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA3NyAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9EQVRBX1NFVF9ICisjZGVmaW5lIERPVDNTVEFUU1RBQkxFX0RBVEFfU0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX0RBVEFfU0VUX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaCBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OGE3MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsODkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIERPVDNTVEFUU1RBQkxFX0VOVU1TX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGRvdDNTdGF0c1RhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIERPVDNTVEFUU0RVUExFWFNUQVRVU19FTlVNUworI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRU5VTVMKKworI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfVU5LTk9XTiAgMQorI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfSEFMRkRVUExFWCAgMgorI2RlZmluZSBET1QzU1RBVFNEVVBMRVhTVEFUVVNfRlVMTERVUExFWCAgMworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU0RVUExFWFNUQVRVU19FTlVNUyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGRvdDNTdGF0c1JhdGVDb250cm9sQWJpbGl0eSAoVHJ1dGhWYWx1ZSAvIEFTTl9JTlRFR0VSKQorICoKKyAqIHNpbmNlIGEgVGV4dHVhbCBDb252ZW50aW9uIG1heSBiZSByZWZlcmVuY2VkIG1vcmUgdGhhbiBvbmNlIGluIGEKKyAqIE1JQiwgcHJvdGVjdCBhZ2FpbnQgcmVkZWZpbml0aW9ucyBvZiB0aGUgZW51bSB2YWx1ZXMuCisgKi8KKyNpZm5kZWYgVFJVVEhWQUxVRV9FTlVNUworI2RlZmluZSBUUlVUSFZBTFVFX0VOVU1TCisKKyNkZWZpbmUgVFJVVEhWQUxVRV9UUlVFICAxCisjZGVmaW5lIFRSVVRIVkFMVUVfRkFMU0UgIDIKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBUUlVUSFZBTFVFX0VOVU1TICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogZG90M1N0YXRzUmF0ZUNvbnRyb2xTdGF0dXMgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0VOVU1TCisjZGVmaW5lIERPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0VOVU1TCisKKyNkZWZpbmUgRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfUkFURUNPTlRST0xPRkYgIDEKKyNkZWZpbmUgRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfUkFURUNPTlRST0xPTiAgMgorI2RlZmluZSBET1QzU1RBVFNSQVRFQ09OVFJPTFNUQVRVU19VTktOT1dOICAzCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfRU5VTVMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTA3NDFmMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwxMTg3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisKKyNpbmNsdWRlICJkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBkb3QzU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEV0aGVyTGlrZS1NSUI6OmRvdDNTdGF0c1RhYmxlIGlzIHN1YmlkIDIgb2YgZG90My4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjEwLjcuMiwgbGVuZ3RoOiA5CisgKi8KK3R5cGVkZWYgc3RydWN0IGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworfSBkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4OworCitzdGF0aWMgZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCBkb3QzU3RhdHNUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgICBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQoZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CisKKworbmV0c25tcF9jb250YWluZXIgKgorZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBkb3QzU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorCitkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQoreworICAgIHJldHVybiBkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7Cit9CisKK2RvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCitkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9IGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBkb3QzU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50Citkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiBDT05UQUlORVJfU0laRShkb3QzU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKK30KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2RvdDNTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGRvdDNTdGF0c1RhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19kb3QzU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBmbGFncykKK3sKKyAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX21ldGhvZHMgKmFjY2Vzc19tdWx0aXBsZXhlciA9CisgICAgICAgICZkb3QzU3RhdHNUYWJsZV9pZl9jdHguYWNjZXNzX211bHRpcGxleGVyOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRibF9pbmZvID0KKyAgICAgICAgJmRvdDNTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mbzsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXI7CisgICAgaW50ICAgICAgICAgICAgIG1mZF9tb2RlcyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X2RvdDNTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlIiwgImNhbGxlZFxuIikpOworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogc2F2ZSBpbnRlcmZhY2UgY29udGV4dCBmb3IgZG90M1N0YXRzVGFibGUKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFNldHRpbmcgdXAgdGhlIHRhYmxlJ3MgZGVmaW5pdGlvbgorICAgICAqLworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRibF9pbmZvLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGluZGV4OiBkb3QzU3RhdHNJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcworICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAorICAgICAqLworICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gRE9UM1NUQVRTVEFCTEVfTUlOX0NPTDsKKyAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IERPVDNTVEFUU1RBQkxFX01BWF9DT0w7CisKKyAgICAvKgorICAgICAqIHNhdmUgdXNlcnMgY29udGV4dAorICAgICAqLworICAgIGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IHJlZ19wdHI7CisKKyAgICAvKgorICAgICAqIGNhbGwgZGF0YSBhY2Nlc3MgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIGRvdDNTdGF0c1RhYmxlX2luaXRfZGF0YShyZWdfcHRyKTsKKworICAgIC8qCisgICAgICogc2V0IHVwIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQoJmRvdDNTdGF0c1RhYmxlX2lmX2N0eCk7CisgICAgaWYgKE5VTEwgPT0gZG90M1N0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGluaXRpYWxpemUgY29udGFpbmVyIGZvciBkb3QzU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFjY2Vzc19tdWx0aXBsZXhlcjogUkVRVUlSRUQgd3JhcHBlciBmb3IgZ2V0IHJlcXVlc3QgaGFuZGxpbmcKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXAgPSBfbWZkX2RvdDNTdGF0c1RhYmxlX29iamVjdF9sb29rdXA7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5nZXRfdmFsdWVzID0gX21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzOworCisgICAgLyoKKyAgICAgKiBubyB3cmFwcGVycyB5ZXQKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0ID0gX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0OworCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogQ3JlYXRlIGEgcmVnaXN0cmF0aW9uLCBzYXZlIG91ciByZWcgZGF0YSwgcmVnaXN0ZXIgdGFibGUuCisgICAgICovCisgICAgREVCVUdNU0dUTCgoImRvdDNTdGF0c1RhYmxlOmluaXRfZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyBkb3QzU3RhdHNUYWJsZSBhcyBhIG1pYnMtZm9yLWR1bW1pZXMgdGFibGUuXG4iKSk7CisgICAgaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbXVsdGlwbGV4ZXJfZ2V0KGFjY2Vzc19tdWx0aXBsZXhlcik7CisgICAgcmVnaW5mbyA9CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCJkb3QzU3RhdHNUYWJsZSIsIGhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfb2lkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWdpbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBkb3QzU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcmVnaW5mby0+bXlfcmVnX3ZvaWQgPSAmZG90M1N0YXRzVGFibGVfaWZfY3R4OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNldCB1cCBiYWJ5IHN0ZXBzIGhhbmRsZXIsIGNyZWF0ZSBpdCBhbmQgaW5qZWN0IGl0CisgICAgICovCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9PQkpFQ1RfTE9PS1VQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUFJFX1JFUVVFU1Q7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0dXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NsZWFudXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DTEVBTlVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0cykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFM7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5yb3dfY3JlYXRpb24pCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUk9XX0NSRUFURTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfQ09OU0lTVEVOQ1k7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCByb3dfbWVyZ2UgaGVscGVyIHdpdGggcHJlZml4IHJvb3RvaWRfbGVuICsgMiAoZW50cnkuY29sKQorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGJsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVgpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGRvdDNTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChkb3QzU3RhdHNUYWJsZV9pZl9jdHguY2FjaGUpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGFibGUKKyAgICAgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRibF9pbmZvKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBkb3QzU3RhdHNUYWJsZQorICovCit2b2lkCitfZG90M1N0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHJlZ19wdHIpCit7CisgICAgLyoKKyAgICAgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2RvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmZG90M1N0YXRzVGFibGVfaWZfY3R4KTsKK30KKwordm9pZAorZG90M1N0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCit7CisgICAgZG90M1N0YXRzVGFibGVfaWZfY3R4LnRibF9pbmZvLnZhbGlkX2NvbHVtbnMgPSB2YzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbnZlcnQgdGhlIGluZGV4IGNvbXBvbmVudCBzdG9yZWQgaW4gdGhlIGNvbnRleHQgdG8gYW4gb2lkCisgKi8KK2ludAorZG90M1N0YXRzVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9kb3QzU3RhdHNJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfZG90M1N0YXRzSW5kZXgsIDB4MDAsIHNpemVvZih2YXJfZG90M1N0YXRzSW5kZXgpKTsKKyAgICB2YXJfZG90M1N0YXRzSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2RvdDNTdGF0c0luZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZG90M1N0YXRzSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvSCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9kb3QzU3RhdHNJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmRvdDNTdGF0c0luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+ZG90M1N0YXRzSW5kZXgpKTsKKworCisgICAgZXJyID0gYnVpbGRfb2lkX25vYWxsb2Mob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLCAmb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsICZ2YXJfZG90M1N0YXRzSW5kZXgpOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9kb3QzU3RhdHNJbmRleCk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQgKi8KKworLyoqCisgKiBleHRyYWN0IGRvdDNTdGF0c1RhYmxlIGluZGV4ZXMgZnJvbSBhIG5ldHNubXBfaW5kZXgKKyAqCisgKiBAcmV0dmFsIFNOTVBfRVJSX05PRVJST1IgIDogbm8gZXJyb3IKKyAqIEByZXR2YWwgU05NUF9FUlJfR0VORVJSICAgOiBlcnJvcgorICovCitpbnQKK2RvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGRvdDNTdGF0c0luZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2RvdDNTdGF0c0luZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9kb3QzU3RhdHNJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9kb3QzU3RhdHNJbmRleCkpOworICAgIHZhcl9kb3QzU3RhdHNJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfZG90M1N0YXRzSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRvdDNTdGF0c1RhYmxlOmRvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHBhcnNlIHRoZSBvaWQgaW50byB0aGUgaW5kaXZpZHVhbCBpbmRleCBjb21wb25lbnRzCisgICAgICovCisgICAgZXJyID0gcGFyc2Vfb2lkX2luZGV4ZXMob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXJfZG90M1N0YXRzSW5kZXgpOworICAgIGlmIChlcnIgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IG91dCB2YWx1ZXMKKyAgICAgICAgICovCisgICAgICAgIG1pYl9pZHgtPmRvdDNTdGF0c0luZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2RvdDNTdGF0c0luZGV4LnZhbC5zdHJpbmcpOworCisKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfZG90M1N0YXRzSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eAorICovCitkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKK2RvdDNTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgodm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpkb3QzU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzID0gcm93cmVxX2N0eC0+b2lkX3RtcDsKKworICAgIHJvd3JlcV9jdHgtPmRvdDNTdGF0c1RhYmxlX2RhdGFfbGlzdCA9IE5VTEw7CisKKyAgICAvKgorICAgICAqIGlmIHdlIGFsbG9jYXRlZCBkYXRhLCBjYWxsIGluaXQgcm91dGluZQorICAgICAqLworICAgIGlmICghKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREFUQV9GUk9NX1VTRVIpKSB7CisgICAgICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0KKyAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdChyb3dyZXFfY3R4LCB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2RvdDNTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6ZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogZnJlZSBpbmRleCBvaWQgcG9pbnRlcgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgIT0gcm93cmVxX2N0eC0+b2lkX3RtcCkKKyAgICAgICAgZnJlZShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMpOworCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAic2tpcHBpbmcgYWRkaXRpb25hbCBwcmVfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICByYyA9IGRvdDNTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGRvdDNTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJkb3QzU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2RvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfcG9zdF9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHJlbGVhc2Ugcm93IGNvbnRleHQsIGlmIGRlbGV0ZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eCAmJiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSkKKyAgICAgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiB3YWl0IGZvciBsYXN0IGNhbGwgYmVmb3JlIGNhbGxpbmcgdXNlcgorICAgICAqLworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAid2FpdGluZyBmb3IgbGFzdCBwb3N0X3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcGFja2V0X3JjID0gbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3IoYWd0cmVxX2luZm8tPmFzcCwgMCk7CisgICAgcmMgPSBkb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoZG90M1N0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9yYyk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJkb3QzU3RhdHNUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdFxuIiwgcmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgIH0KKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIHJjKTsKKyAgICBlbHNlCisgICAgICAgIGRvdDNTdGF0c1RhYmxlX3Jvd19wcmVwKHJvd3JlcV9jdHgpOworCisgICAgcmV0dXJuIFNOTVBfVkFMSURBVEVfRVJSKHJjKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmUgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogKElOREVYKSBkb3QzU3RhdHNJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNJTkRFWDoKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihsb25nKTsKKyAgICAgICAgKCp2YXItPnZhbC5pbnRlZ2VyKSA9IHJvd3JlcV9jdHgtPnRibF9pZHguZG90M1N0YXRzSW5kZXg7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0FsaWdubWVudEVycm9ycygyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNBTElHTk1FTlRFUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0FMSUdOTUVOVEVSUk9SU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNBbGlnbm1lbnRFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c0FsaWdubWVudEVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRkNTRXJyb3JzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0ZDU0VSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTRkNTRVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0ZDU0Vycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRkNTRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXMoNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNTSU5HTEVDT0xMSVNJT05GUkFNRVNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzU2luZ2xlQ29sbGlzaW9uRnJhbWVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNTaW5nbGVDb2xsaXNpb25GcmFtZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTXVsdGlwbGVDb2xsaXNpb25GcmFtZXMoNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c011bHRpcGxlQ29sbGlzaW9uRnJhbWVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNNdWx0aXBsZUNvbGxpc2lvbkZyYW1lc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzU1FFVGVzdEVycm9ycyg2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNTUUVURVNURVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNTUUVURVNURVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1NRRVRlc3RFcnJvcnMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGRvdDNTdGF0c1NRRVRlc3RFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnMoNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTREVGRVJSRURUUkFOU01JU1NJT05TOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNERUZFUlJFRFRSQU5TTUlTU0lPTlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRGVmZXJyZWRUcmFuc21pc3Npb25zKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNEZWZlcnJlZFRyYW5zbWlzc2lvbnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzTGF0ZUNvbGxpc2lvbnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTTEFURUNPTExJU0lPTlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0xBVEVDT0xMSVNJT05TX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c0xhdGVDb2xsaXNpb25zKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNMYXRlQ29sbGlzaW9uc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNFeGNlc3NpdmVDb2xsaXNpb25zKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9ucykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRXhjZXNzaXZlQ29sbGlzaW9uc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjVHJhbnNtaXRFcnJvcnMoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzSW50ZXJuYWxNYWNUcmFuc21pdEVycm9yc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0NhcnJpZXJTZW5zZUVycm9ycygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTQ0FSUklFUlNFTlNFRVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNDQVJSSUVSU0VOU0VFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzQ2FycmllclNlbnNlRXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNDYXJyaWVyU2Vuc2VFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ZyYW1lVG9vTG9uZ3MoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1M6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1NfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzRnJhbWVUb29Mb25ncykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzRnJhbWVUb29Mb25nc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c0ludGVybmFsTWFjUmVjZWl2ZUVycm9ycygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNSRUNFSVZFRVJST1JTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzSW50ZXJuYWxNYWNSZWNlaXZlRXJyb3JzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNJbnRlcm5hbE1hY1JlY2VpdmVFcnJvcnNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzRXRoZXJDaGlwU2V0KDE3KS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNFVEhFUkNISVBTRVQ6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0VUSEVSQ0hJUFNFVF9GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNFdGhlckNoaXBTZXQpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX09CSkVDVF9JRDsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNFdGhlckNoaXBTZXRfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2lkICoqKSAmIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNTeW1ib2xFcnJvcnMoMTgpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0RPVDNTVEFUU1NZTUJPTEVSUk9SUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRE9UM1NUQVRTU1lNQk9MRVJST1JTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1N5bWJvbEVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZG90M1N0YXRzU3ltYm9sRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBkb3QzU3RhdHNEdXBsZXhTdGF0dXMoMTkpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU0RVUExFWFNUQVRVU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChkb3QzU3RhdHNEdXBsZXhTdGF0dXMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9JTlRFR0VSOworICAgICAgICByYyA9IGRvdDNTdGF0c0R1cGxleFN0YXR1c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5KDIwKS9UcnV0aFZhbHVlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xBQklMSVRZOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9ET1QzU1RBVFNSQVRFQ09OVFJPTEFCSUxJVFlfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZG90M1N0YXRzUmF0ZUNvbnRyb2xBYmlsaXR5KSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNSYXRlQ29udHJvbEFiaWxpdHlfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzKDIxKS9JTlRFR0VSL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL3cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9tZmRfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGRvdDNTdGF0c1JhdGVDb250cm9sU3RhdHVzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICAgICAgcmMgPSBkb3QzU3RhdHNSYXRlQ29udHJvbFN0YXR1c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChET1QzU1RBVFNUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IERPVDNTVEFUU1RBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfbWZkX2RvdDNTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfZG90M1N0YXRzVGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CisgICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAodm9pZCAqKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgREVCVUdNU0dUTCgoIjk6ZG90M1N0YXRzVGFibGU6X21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiZXhpc3RzICV1XG4iLCByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzKSk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9kb3QzU3RhdHNUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9kb3QzU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTRVQgUFJPQ0VTU0lORyBOT1QgQVBQTElDQUJMRSAocGVyIE1JQiBvciB1c2VyIHNldHRpbmcpCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgICAgIF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBmb3IgZG90M1N0YXRzVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY2FjaGVfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBkb3QzU3RhdHNUYWJsZV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfaXRlbV9mcmVlKGRvdDNTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZG90M1N0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGluIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4gaW5lZmZpY2llbnQsIGJ1dCBlYXN5LgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY29udGFpbmVyX2l0ZW1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChkb3QzU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpkb3QzU3RhdHNUYWJsZTpfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGlmX2N0eC0+Y2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG90M1N0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9vaWRfc2l6ZSk7CisKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgZG90M1N0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJkb3QzU3RhdHNUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChOVUxMICE9IGlmX2N0eC0+Y2FjaGUpCisgICAgICAgIGlmX2N0eC0+Y2FjaGUtPm1hZ2ljID0gKHZvaWQgKikgaWZfY3R4LT5jb250YWluZXI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2h1dGRvd24gdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGRvdDNTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmRvdDNTdGF0c1RhYmxlOl9kb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBkb3QzU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZfY3R4LT5jb250YWluZXIpOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGlmX2N0eC0+Y29udGFpbmVyKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZG90M1N0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKworZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCitkb3QzU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoZG90M1N0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGRvdDNTdGF0c1RhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChkb3QzU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V0aGVybGlrZS1taWIvZG90M1N0YXRzVGFibGUvZG90M1N0YXRzVGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMmI1YTYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImRvdDNTdGF0c1RhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2RvdDNTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2RvdDNTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4KTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKTsKKworICAgIGRvdDNTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqZG90M1N0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChkb3QzU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqZG90M1N0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCh2b2lkICopOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBkb3QzU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoZG90M1N0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGRvdDNTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBkb3QzU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp2Yyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRE9UM1NUQVRTVEFCTEVfSU5URVJGQUNFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2RvdDNTdGF0c1RhYmxlX29pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWIxNmNlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9kb3QzU3RhdHNUYWJsZV9vaWRzLmgKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBET1QzU1RBVFNUQUJMRV9PSURTX0gKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfT0lEU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBkb3QzU3RhdHNUYWJsZSAKKyAgICAgKi8KKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfT0lEICAgICAgICAgICAgICAxLDMsNiwxLDIsMSwxMCw3LDIKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTSU5ERVggICAgICAgICAxCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNJTkRFWF9GTEFHICAgICgweDEgPDwgMCkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTQUxJR05NRU5URVJST1JTICAgICAgICAgMgorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTQUxJR05NRU5URVJST1JTX0ZMQUcgICAgKDB4MSA8PCAxKQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlMgICAgICAgICAzCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNGQ1NFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDIpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FUyAgICAgICAgIDQKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NJTkdMRUNPTExJU0lPTkZSQU1FU19GTEFHICAgICgweDEgPDwgMykKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTTVVMVElQTEVDT0xMSVNJT05GUkFNRVMgICAgICAgICA1CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNNVUxUSVBMRUNPTExJU0lPTkZSQU1FU19GTEFHICAgICgweDEgPDwgNCkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTU1FFVEVTVEVSUk9SUyAgICAgICAgIDYKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NRRVRFU1RFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDUpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OUyAgICAgICAgIDcKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0RFRkVSUkVEVFJBTlNNSVNTSU9OU19GTEFHICAgICgweDEgPDwgNikKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTTEFURUNPTExJU0lPTlMgICAgICAgICA4CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNMQVRFQ09MTElTSU9OU19GTEFHICAgICgweDEgPDwgNykKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRVhDRVNTSVZFQ09MTElTSU9OUyAgICAgICAgIDkKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0VYQ0VTU0lWRUNPTExJU0lPTlNfRkxBRyAgICAoMHgxIDw8IDgpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDVFJBTlNNSVRFUlJPUlMgICAgICAgICAxMAorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTSU5URVJOQUxNQUNUUkFOU01JVEVSUk9SU19GTEFHICAgICgweDEgPDwgOSkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTQ0FSUklFUlNFTlNFRVJST1JTICAgICAgICAgMTEKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0NBUlJJRVJTRU5TRUVSUk9SU19GTEFHICAgICgweDEgPDwgMTApCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0ZSQU1FVE9PTE9OR1MgICAgICAgICAxMworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRlJBTUVUT09MT05HU19GTEFHICAgICgweDEgPDwgMTIpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0lOVEVSTkFMTUFDUkVDRUlWRUVSUk9SUyAgICAgICAgIDE2CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNJTlRFUk5BTE1BQ1JFQ0VJVkVFUlJPUlNfRkxBRyAgICAoMHgxIDw8IDE1KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNFVEhFUkNISVBTRVQgICAgICAgICAxNworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTRVRIRVJDSElQU0VUX0ZMQUcgICAgKDB4MSA8PCAxNikKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTU1lNQk9MRVJST1JTICAgICAgICAgMTgKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU1NZTUJPTEVSUk9SU19GTEFHICAgICgweDEgPDwgMTcpCisKKyNkZWZpbmUgQ09MVU1OX0RPVDNTVEFUU0RVUExFWFNUQVRVUyAgICAgICAgIDE5CisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNEVVBMRVhTVEFUVVNfRkxBRyAgICAoMHgxIDw8IDE4KQorCisjZGVmaW5lIENPTFVNTl9ET1QzU1RBVFNSQVRFQ09OVFJPTEFCSUxJVFkgICAgICAgICAyMAorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xBQklMSVRZX0ZMQUcgICAgKDB4MSA8PCAxOSkKKworI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVMgICAgICAgICAyMQorI2RlZmluZSBDT0xVTU5fRE9UM1NUQVRTUkFURUNPTlRST0xTVEFUVVNfRkxBRyAgICAoMHgxIDw8IDIwKQorCisKKyNkZWZpbmUgRE9UM1NUQVRTVEFCTEVfTUlOX0NPTCAgIENPTFVNTl9ET1QzU1RBVFNJTkRFWAorI2RlZmluZSBET1QzU1RBVFNUQUJMRV9NQVhfQ09MICAgQ09MVU1OX0RPVDNTVEFUU1JBVEVDT05UUk9MU1RBVFVTCisKKwkKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIERPVDNTVEFUU1RBQkxFX09JRFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC9ldGhlcmxpa2UtbWliL2RvdDNTdGF0c1RhYmxlL2lvY3RsX2ltcF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZjkyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXRoZXJsaWtlLW1pYi9kb3QzU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmgKQEAgLTAsMCArMSw2NSBAQAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8aWZhZGRycy5oPgorCisvKiB1c2Uga2VybmVsJ3MgZXRodG9vbC5oICAqLworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgX191NjQgdTY0OwordHlwZWRlZiBfX3UzMiB1MzI7Cit0eXBlZGVmIF9fdTE2IHUxNjsKK3R5cGVkZWYgX191OCB1ODsKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisKKy8qIHN0cnVjdHVyZSBmb3Igc3RvcmluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIGluIHRoZSBzeXN0ZW0gKi8KKworc3RydWN0IGlmbmFtZSB7CisgICAgc3RydWN0IGlmbmFtZSAqaWZuX25leHQ7CisgICAgY2hhciBuYW1lIFtJRl9OQU1FU0laRV07Cit9OworCitzdHJ1Y3QgaWZuYW1lICpkb3Qzc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKHN0cnVjdCBpZm5hbWUgKiwgaW50ICopOworaW50IGRvdDNzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCk7CitpbnQgZG90M3N0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCAoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKTsKK2ludCBfZG90M1N0YXRzX2lvY3RsX2dldChpbnQgZmQsIGludCB3aGljaCwgc3RydWN0IGlmcmVxICppZnJxLCBjb25zdCBjaGFyKiBuYW1lKTsKK2ludCBpbnRlcmZhY2VfaW9jdGxfZG90M3N0YXRzX2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIqIG5hbWUpOworaW50IGludGVyZmFjZV9pb2N0bF9kb3Qzc3RhdHNfZHVwbGV4X2dldChkb3QzU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LCBpbnQgZmQsIGNvbnN0IGNoYXIqIG5hbWUpOworCisKKy8qIGZvciBtYWludGFpbmFiaWxpdHkgKi8KKworI2RlZmluZSBJTlRFTF9SRUNFSVZFX0FMSUdOX0VSUk9SUyAgICAgICAgICAgICAgICAgICAgICAicnhfYWxpZ25fZXJyb3JzIgorI2RlZmluZSBCUk9BRENPTV9SRUNFSVZFX0FMSUdOX0VSUk9SUyAgICAgICAgICAgICAgICAgICBJTlRFTF9SRUNFSVZFX0FMSUdOX0VSUk9SUworCisjZGVmaW5lIElOVEVMX1RSQU5TTUlUX01VTFRJUExFX0NPTExJU0lPTlMgICAgICAgICAgICAgICJ0eF9tdWx0aV9jb2xsX29rIgorI2RlZmluZSBCUk9BRENPTV9UUkFOU01JVF9NVUxUSVBMRV9DT0xMSVNJT05TX0JOWDIgICAgICAidHhfbXVsdGlfY29sbGlzaW9ucyIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OU19URzMgICAgICAgInR4X211bHRfY29sbGlzaW9ucyIKKworI2RlZmluZSBJTlRFTF9UUkFOU01JVF9MQVRFX0NPTExJU0lPTlMgICAgICAgICAgICAgICAgICAidHhfYWJvcnRfbGF0ZV9jb2xsIgorI2RlZmluZSBCUk9BRENPTV9UUkFOU01JVF9MQVRFX0NPTExJU0lPTlMgICAgICAgICAgICAgICAidHhfbGF0ZV9jb2xsaXNpb25zIgorCisjZGVmaW5lIElOVEVMX1RSQU5TTUlUX1NJTkdMRV9DT0xMSVNJT05TICAgICAgICAgICAgICAgICJ0eF9zaW5nbGVfY29sbF9vayIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfU0lOR0xFX0NPTExJU0lPTlMgICAgICAgICAgICAgInR4X3NpbmdsZV9jb2xsaXNpb25zIgorCisjZGVmaW5lIEJST0FEQ09NX1RSQU5TTUlUX0VYQ0VTU19DT0xMSVNJT05TX0JOWDIgICAgICAgICJ0eF9leGNlc3NfY29sbGlzaW9ucyIKKyNkZWZpbmUgQlJPQURDT01fVFJBTlNNSVRfRVhDRVNTX0NPTExJU0lPTlNfVEczICAgICAgICAgInR4X2V4Y2Vzc2l2ZV9jb2xsaXNpb25zIgorCisKKyNkZWZpbmUgRE9UM1NUQVRTQUxJR05NRU5URVJST1JTKHgpICAgICAgICAgICAgc3Ryc3RyKHgsIElOVEVMX1JFQ0VJVkVfQUxJR05fRVJST1JTKQorCisjZGVmaW5lIERPVDNTVEFUU01VTFRJUExFQ09MTElTSU9ORlJBTUVTKHgpICAgIChzdHJzdHIoeCwgSU5URUxfVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OUykpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9NVUxUSVBMRV9DT0xMSVNJT05TX0JOWDIpKSB8fCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJzdHIoeCwgQlJPQURDT01fVFJBTlNNSVRfTVVMVElQTEVfQ09MTElTSU9OU19URzMpKQorCisjZGVmaW5lIERPVDNTVEFUU0xBVEVDT0xMSVNJT05TKHgpICAgICAgICAgICAgIChzdHJzdHIoeCwgSU5URUxfVFJBTlNNSVRfTEFURV9DT0xMSVNJT05TKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ryc3RyKHgsIEJST0FEQ09NX1RSQU5TTUlUX0xBVEVfQ09MTElTSU9OUykpCisKKyNkZWZpbmUgRE9UM1NUQVRTU0lOR0xFQ09MTElTSU9ORlJBTUVTKHgpICAgICAgKHN0cnN0cih4LCBJTlRFTF9UUkFOU01JVF9TSU5HTEVfQ09MTElTSU9OUykpIHx8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9TSU5HTEVfQ09MTElTSU9OUykpCisKKyNkZWZpbmUgRE9UM1NUQVRTRVhDRVNTSVZFQ09MTElTSU9OUyh4KSAgICAgICAgKHN0cnN0cih4LCBCUk9BRENPTV9UUkFOU01JVF9FWENFU1NfQ09MTElTSU9OU19CTlgyKSkgfHwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3Ryc3RyKHgsIEJST0FEQ09NX1RSQU5TTUlUX0VYQ0VTU19DT0xMSVNJT05TX1RHMykpCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5jCmluZGV4IGRhZWQ4ZjMuLmNjNmEwNGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuYwpAQCAtNjUsOCArNjUsMTggQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9zZXRfbXVsdGlfYWRkX2RlZmF1bHRfcm93KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkZWxldGVfdGFibGVfZGF0YV9zZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9kYXRhc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3JvdykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXRfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUpCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0ICp0YWJsZV9zZXQ7CisKIC8qCiAgKiBvdXIgaW5pdGlhbGl6YXRpb24gcm91dGluZSwgYXV0b21hdGljYWxseSBjYWxsZWQgYnkgdGhlIGFnZW50IAogICovCkBAIC03Niw3ICs4Niw2IEBACiB2b2lkCiBpbml0X2RhdGFfc2V0KHZvaWQpCiB7Ci0gICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0OwogICAgIG5ldHNubXBfdGFibGVfcm93ICpyb3c7CiAKICAgICAvKgpAQCAtMjA0LDMgKzIxMywxMSBAQAogCiAgICAgREVCVUdNU0dUTCgoImV4YW1wbGVfZGF0YV9zZXQiLCAiRG9uZSBpbml0aWFsaXppbmcuXG4iKSk7CiB9CisKK3ZvaWQKK3NodXRkb3duX2RhdGFfc2V0KHZvaWQpCit7CisgICAgbmV0c25tcF91bnJlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSh0YWJsZV9zZXQsIE5VTEwpOworICAgIG5ldHNubXBfZGVsZXRlX3RhYmxlX2RhdGFfc2V0KHRhYmxlX3NldCk7CisgICAgdGFibGVfc2V0ID0gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmggYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kYXRhX3NldC5oCmluZGV4IGU1NmY2MDAuLmM5Y2Y4YjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RhdGFfc2V0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGF0YV9zZXQuaApAQCAtNiw2ICs2LDcgQEAKICNlbmRpZgogCiB2b2lkICAgICAgICAgICAgaW5pdF9kYXRhX3NldCh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl9kYXRhX3NldCh2b2lkKTsKIAogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2RlbGF5ZWRfaW5zdGFuY2UuYwppbmRleCA0ODk1MzkwLi41ZDU0NTY5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9kZWxheWVkX2luc3RhbmNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZGVsYXllZF9pbnN0YW5jZS5jCkBAIC0xNzIsNiArMTcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkZWxheV90aW1lKSk7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIHR5cGUgCkBAIC0yMjMsNyArMjI0LDcgQEAKICAgICAgICAgICogdXBkYXRlIGN1cnJlbnQgdmFsdWUgCiAgICAgICAgICAqLwogICAgICAgICBkZWxheV90aW1lID0gKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIGRlbGF5X3RpbWUgLT4gJWRcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJ0ZXN0aGFuZGxlciIsICJ1cGRhdGVkIGRlbGF5X3RpbWUgLT4gJWxkXG4iLAogICAgICAgICAgICAgICAgICAgICBkZWxheV90aW1lKSk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0yNDYsNiArMjQ3LDcgQEAKICAgICAgICAgICogd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBhY3R1YWxseSBkbyBoZXJlIAogICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuYwppbmRleCAwY2U4MTdiLi5kZDk3ZGFmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5jCkBAIC0xNiwzOCArMTYsMTMgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAotLyoKLSAqIG5lZWRlZCBieSB1dGlsX2Z1bmNzLmggCi0gKi8KLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAvKgogICogaGVhZGVyX2dlbmVyaWMoKSBjb21lcyBmcm9tIGhlcmUgCiAgKi8KLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAvKgogICogaW5jbHVkZSBvdXIgLmggZmlsZSAKQEAgLTEwNiw3ICs4MSw3IEBACiAgICAgICogICAgICAyOiBBU05fT0NURVRfU1RSOgogICAgICAqICAgICAgICAgIFRoZSB0eXBlIG9mIHRoZSBvYmplY3QuCiAgICAgICogICAgICAgICAgVmFsaWQgdHlwZXMgYXJlIGxpc3RlZCBpbiA8c25tcF9pbXBsLmg+Ci0gICAgICogICAgICAzOiBST05MWSAob3IgUldSSVRFKToKKyAgICAgKiAgICAgIDM6IE5FVFNOTVBfT0xEQVBJX1JPTkxZIChvciBORVRTTk1QX09MREFQSV9SV1JJVEUpOgogICAgICAqICAgICAgICAgIFdoZXRoZXIgdGhpcyBvYmplY3QgY2FuIGJlIFNFVCBvciBub3QuCiAgICAgICogICAgICA0OiB2YXJfZXhhbXBsZToKICAgICAgKiAgICAgICAgICBUaGUgY2FsbGJhY2sgcm91dGluZSwgdXNlZCB3aGVuIHRoZSBvYmplY3QgaXMgcXVlcmllZC4KQEAgLTEyMiwxNSArOTcsMjQgQEAKICAgICAgKiAgICAgICAgICAgIHRvIG9idGFpbiB0aGUgZnVsbCBPSUQgb2YgZWFjaCBlbnRyeS4KICAgICAgKi8KIHN0cnVjdCB2YXJpYWJsZTIgZXhhbXBsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7RVhBTVBMRVNUUklORywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leGFtcGxlLCAxLCB7MX19LAotICAgIHtFWEFNUExFSU5URUdFUiwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4YW1wbGUsIDIsIHsyLCAxfX0sCi0gICAge0VYQU1QTEVPQkpFQ1RJRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9leGFtcGxlLCAyLCB7MiwgMn19LAotICAgIHtFWEFNUExFVElNRVRJQ0tTLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHszfX0sCi0gICAge0VYQU1QTEVJUEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfZXhhbXBsZSwgMSwgezR9fSwKLSAgICB7RVhBTVBMRUNPVU5URVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHs1fX0sCi0gICAge0VYQU1QTEVHQVVHRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2V4YW1wbGUsIDEsIHs2fX0sCi0gICAge0VYQU1QTEVUUklHR0VSVFJBUCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4YW1wbGUsIDEsIHs3fX0sCi0gICAge0VYQU1QTEVUUklHR0VSVFJBUDIsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leGFtcGxlLCAxLCB7OH19CisgICAge0VYQU1QTEVTVFJJTkcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezF9fSwKKyAgICB7RVhBTVBMRUlOVEVHRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leGFtcGxlLCAyLCB7MiwgMX19LAorICAgIHtFWEFNUExFT0JKRUNUSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXhhbXBsZSwgMiwgezIsIDJ9fSwKKyAgICB7RVhBTVBMRVRJTUVUSUNLUywgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7M319LAorICAgIHtFWEFNUExFSVBBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4YW1wbGUsIDEsIHs0fX0sCisgICAge0VYQU1QTEVDT1VOVEVSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7NX19LAorICAgIHtFWEFNUExFR0FVR0UsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9leGFtcGxlLCAxLCB7Nn19LAorICAgIHtFWEFNUExFVFJJR0dFUlRSQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9leGFtcGxlLCAxLCB7N319LAorICAgIHtFWEFNUExFVFJJR0dFUlRSQVAyLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXhhbXBsZSwgMSwgezh9fQogfTsKIAogICAgIC8qCkBAIC0zMzksNyArMzIzLDcgQEAKICAgICAgKi8KICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgRVhBTVBMRVNUUklORzoKLSAgICAgICAgc3ByaW50ZihzdHJpbmcsIGV4YW1wbGVfc3RyKTsKKyAgICAgICAgc3RyY3B5KHN0cmluZywgZXhhbXBsZV9zdHIpOwogICAgICAgICAvKgogICAgICAgICAgKiBOb3RlIHRoYXQgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgYW5zd2VyIHdpbGwgYmUgYW4KICAgICAgICAgICogIGludGVnZXIgZG9lcyBub3QgaG9sZCB0cnVlIGluIHRoaXMgY2FzZSwgc28gdGhlIGxlbmd0aApAQCAtNDY4LDEzICs0NTIsMTQgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gc2l6ZW9mKGxvbmcpKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyBsZW5ndGggJXgiLCB2YXJfdmFsX2xlbikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgbGVuZ3RoICUiIE5FVFNOTVBfUFJJeiAidSIsCisgICAgICAgICAgICAgICAgICAgICAgICB2YXJfdmFsX2xlbikpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwogICAgICAgICB9CiAKICAgICAgICAgaW50dmFsID0gKigobG9uZyAqKSB2YXJfdmFsKTsKICAgICAgICAgaWYgKGludHZhbCA+IE1BWF9FWEFNUExFX0lOVCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgdmFsdWUgJXgiLCBpbnR2YWwpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICVseCIsIGludHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC01NTMsMTMgKzUzOCwxNCBAQAogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVFlQRTsKICAgICAgICAgfQogICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiBzaXplb2YobG9uZykpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIGxlbmd0aCAleCIsIHZhcl92YWxfbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyBsZW5ndGggJSIgTkVUU05NUF9QUkl6ICJ1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZhcl92YWxfbGVuKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CiAgICAgICAgIH0KIAogICAgICAgICBpbnR2YWwgPSAqKChsb25nICopIHZhcl92YWwpOwogICAgICAgICBpZiAoaW50dmFsICE9IDEpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICV4IiwgaW50dmFsKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXhhbXBsZSIsICJ3cm9uZyB2YWx1ZSAlbHgiLCBpbnR2YWwpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpAQCAtNjIwLDEwICs2MDYsMTAgQEAKICAqIHNlY29uZCBzaW5jZSB0aGUgbmV0d29rIG1hbmFnZW1lbnQgcG9ydGlvbiBvZiBzeXN0ZW0gd2FzIGxhc3QKICAqIHJlaW5pdGlhbGl6ZWQuICAtIHNubXBUcmFwT0lELjAgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhcCBncm91cCBTTk1QdjIKICAqIE1JQiB3aG9zZSB2YWx1ZSBpcyB0aGUgb2JqZWN0LWlkIG9mIHRoZSBzcGVjaWZpYyB0cmFwIHlvdSBoYXZlIGRlZmluZWQKLSAqIGluIHlvdXIgb3duIE1JQi4gIE90aGVyIHZhcmlhYmxlcyBjYW4gYmUgYWRkZWQgdG8gY2FyYWN0ZXJpemUgdGhlCisgKiBpbiB5b3VyIG93biBNSUIuICBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFkZGVkIHRvIGNoYXJhY3Rlcml6ZSB0aGUKICAqIHRyYXAuCiAgKiAKLSAqIFRoZSBmdW5jdGlvbiBzZW5kX3YydHJhcCBhZGRzIGF1dG9tYXRpY2FsbHlzIHRoZSB0d28gb2JqZWN0cyBidXQgdGhlCisgKiBUaGUgZnVuY3Rpb24gc2VuZF92MnRyYXAgYWRkcyBhdXRvbWF0aWNhbGx5IHRoZSB0d28gb2JqZWN0cyBidXQgdGhlCiAgKiB2YWx1ZSBvZiBzbm1wVHJhcE9JRC4wIGlzIDAuMCBieSBkZWZhdWx0LiBJZiB5b3Ugd2FudCB0byBhZGQgeW91ciB0cmFwCiAgKiBuYW1lLCB5b3UgaGF2ZSB0byByZWNvbnN0cnVjdCB0aGlzIG9iamVjdCBhbmQgdG8gYWRkIHlvdXIgb3duCiAgKiB2YXJpYWJsZS4KQEAgLTY2MywxMyArNjQ5LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IHNpemVvZihsb25nKSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgbGVuZ3RoICV4IiwgdmFyX3ZhbF9sZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIGxlbmd0aCAlIiBORVRTTk1QX1BSSXogInUiLAorICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3ZhbF9sZW4pKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKICAgICAgICAgfQogCiAgICAgICAgIGludHZhbCA9ICooKGxvbmcgKikgdmFyX3ZhbCk7CiAgICAgICAgIGlmIChpbnR2YWwgIT0gMSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JvbmcgdmFsdWUgJXgiLCBpbnR2YWwpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJleGFtcGxlIiwgIndyb25nIHZhbHVlICVseCIsIGludHZhbCkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC03MzIsNyArNzE5LDcgQEAKICAgICAgICAgdmFyX29iai5uYW1lID0gZXhhbXBsZV9zdHJpbmdfb2lkOwogICAgICAgICB2YXJfb2JqLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKGV4YW1wbGVfc3RyaW5nX29pZCkgLyBzaXplb2Yob2lkKTsgLyogbnVtYmVyIG9mIHN1Yi1pZHMgKi8KICAgICAgICAgdmFyX29iai50eXBlID0gQVNOX09DVEVUX1NUUjsgICAvKiB0eXBlIG9mIHZhcmlhYmxlICovCi0gICAgICAgIHZhcl9vYmoudmFsLnN0cmluZyA9IGV4YW1wbGVfc3RyOyAgICAgICAvKiB2YWx1ZSAqLworICAgICAgICB2YXJfb2JqLnZhbC5zdHJpbmcgPSAodW5zaWduZWQgY2hhciAqKSBleGFtcGxlX3N0cjsgICAgICAgLyogdmFsdWUgKi8KICAgICAgICAgdmFyX29iai52YWxfbGVuID0gc3RybGVuKGV4YW1wbGVfc3RyKTsKICAgICAgICAgREVCVUdNU0dUTCgoImV4YW1wbGUiLCAid3JpdGVfZXhhbXBsZXRyYXAyIHNlbmRpbmcgdGhlIHYyIHRyYXBcbiIpKTsKICAgICAgICAgc2VuZF92MnRyYXAoJnZhcl90cmFwKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaCBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL2V4YW1wbGUuaAppbmRleCA5ZGU1NzQ4Li4wNGI3M2UwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9leGFtcGxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvZXhhbXBsZS5oCkBAIC0xNCwxMCArMTQsMTAgQEAKICNlbmRpZgogCiAgICAgLyoKLSAgICAgKiBXZSB1c2UgJ2hlYWRlcl9nZW5lcmljJyBmcm9tIHRoZSB1dGlsX2Z1bmNzIG1vZHVsZSwKKyAgICAgKiBXZSB1c2UgJ2hlYWRlcl9nZW5lcmljJyBmcm9tIHRoZSB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljIG1vZHVsZSwKICAgICAgKiAgc28gbWFrZSBzdXJlIHRoaXMgbW9kdWxlIGlzIGluY2x1ZGVkIGluIHRoZSBhZ2VudC4KICAgICAgKi8KLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQogCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlLmMKaW5kZXggMzZhYjdlMy4uOGVhMmQwMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZS5jCkBAIC00LDEyICs0LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm5ldFNubXBIb3N0c1RhYmxlLmgiCiAjaW5jbHVkZSAibmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuaCIKICNpbmNsdWRlICJuZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2dldF9kYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUob2lkX3N0YXNoX2FkZF9kYXRhKQorCiBzdGF0aWMgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqdW5kb1N0b3JhZ2UgPSBOVUxMOwogc3RhdGljIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKmNvbW1pdFN0b3JhZ2UgPSBOVUxMOwogCkBAIC03MSw3ICs3Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAKICAgICAvKiogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgICAgb3B0aW1pemVzIHJldHJpdmFsLiAqLworICAgICAgICBvcHRpbWl6ZXMgcmV0cmlldmFsLiAqLwogICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSAyOwogICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSA1OwogCkBAIC05Miw3ICs5Nyw3IEBACiAgICAgICovCiAgICAgREVCVUdNU0dUTCgoImluaXRpYWxpemVfdGFibGVfbmV0U25tcEhvc3RzVGFibGUiLAogICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyB0YWJsZSBuZXRTbm1wSG9zdHNUYWJsZSBhcyBhIHRhYmxlIGl0ZXJhdG9yXG4iKSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihteV9oYW5kbGVyLCBpaW5mbyk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIobXlfaGFuZGxlciwgaWluZm8pOwogfQogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG5ldFNubXBIb3N0c1RhYmxlIG1vZHVsZSAqLwpAQCAtMTE0LDE5ICsxMTksMTUgQEAKIAogICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOwotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyOwogICAgIHN0cnVjdCBjb21taXRJbmZvICpjaSA9IE5VTEw7CiAKICAgICB2b2lkICAgICAgICAgICAqZGF0YV9jb250ZXh0ID0gTlVMTDsKIAotICAgIG9pZCAgICAgICAgICAgICpzdWZmaXg7Ci0gICAgc2l6ZV90ICAgICAgICAgIHN1ZmZpeF9sZW47Ci0KICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKICAgICAgICAgLyogY29sdW1uIGFuZCByb3cgaW5kZXggZW5jb2RlZCBwb3J0aW9uICovCi0gICAgICAgIHZhciA9IHJlcXVlc3QtPnJlcXVlc3R2YjsKLSAgICAgICAgc3VmZml4ICAgICA9IHZhci0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKLSAgICAgICAgc3VmZml4X2xlbiA9IHZhci0+bmFtZV9sZW5ndGggLSAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxKTsKKyAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7CisgICAgICAgIGNvbnN0IG9pZCAqIGNvbnN0IHN1ZmZpeCA9IHZhci0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKKyAgICAgICAgY29uc3Qgc2l6ZV90IHN1ZmZpeF9sZW4gPSB2YXItPm5hbWVfbGVuZ3RoIC0gKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMSk7CiAKICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCAhPSAwKQogICAgICAgICAgICAgY29udGludWU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jCmluZGV4IGU1NmNkMWQuLjNkMmU1ZmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2FjY2Vzcy5jCkBAIC0xNjcsNyArMTY3LDcgQEAKIAogLyoqIENyZWF0ZSBhIGRhdGFfY29udGV4dCBmb3Igbm9uLWV4aXN0ZW50IHJvd3MgdGhhdCBTRVRzIGFyZSBwZXJmb3JtZWQgb24uCiAgKiAgcmV0dXJuIGEgdm9pZCAqIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gc3Vic2VxdWVudCBnZXRfWFhYCi0gKiAgYW5kIHNldF9YWFggZnVuY3Rpb25zIGZvciBkYXRhIHJldHJpdmFsIGFuZCBtb2RpZmljYXRpb24gZHVyaW5nCisgKiAgYW5kIHNldF9YWFggZnVuY3Rpb25zIGZvciBkYXRhIHJldHJpZXZhbCBhbmQgbW9kaWZpY2F0aW9uIGR1cmluZwogICogIHRoaXMgU0VUIHJlcXVlc3QuCiAgKgogICogIFRoZSBpbmRleHMgYXJlIGVuY29kZWQgKGluIG9yZGVyKSBpbnRvIHRoZSBpbmRleF9kYXRhIHBvaW50ZXIgaWYgaXQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9uZXRTbm1wSG9zdHNUYWJsZV9jaGVja2Zucy5jCmluZGV4IDRjYjkzMzkuLjI1YTczMzAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL25ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnMuYwpAQCAtMTQsMTEgKzE0LDE0IEBACiAgKiBzdGFuZGFyZCBoZWFkZXJzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm5ldFNubXBIb3N0c1RhYmxlX2NoZWNrZm5zLmgiCiAjaW5jbHVkZSAibmV0U25tcEhvc3RzVGFibGVfY2hlY2tmbnNfbG9jYWwuaCIKICNpbmNsdWRlICJuZXRTbm1wSG9zdHNUYWJsZV9lbnVtcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19zdG9yYWdlX3RyYW5zaXRpb24pCisKIC8qKiBEZWNpZGVzIGlmIGFuIGluY29taW5nIHZhbHVlIGZvciB0aGUgbmV0U25tcEhvc3RBZGRyZXNzVHlwZSBtaWIgbm9kZSBpcyBsZWdhbC4KICAqICBAcGFyYW0gdHlwZSAgICBUaGUgaW5jb21pbmcgZGF0YSB0eXBlLgogICogIEBwYXJhbSB2YWwgICAgIFRoZSB2YWx1ZSB0byBiZSBjaGVja2VkLgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvc2NhbGFyX2ludC5jCmluZGV4IDUwM2JkZDQuLmRiNGQyOTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3NjYWxhcl9pbnQuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy9zY2FsYXJfaW50LmMKQEAgLTIzLDEwICsyMywxNyBAQAogICogc3RhcnQgYmUgaW5jbHVkaW5nIHRoZSBhcHByb3ByaWF0ZSBoZWFkZXIgZmlsZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogLyoKKyAqIGlmIC0tZW5hYmxlLW1pbmltYWxpc3QgaGFzIGJlZW4gdHVybmVkIG9uLCB3ZSBuZWVkIHRvIHJlZ2lzdGVyCisgKiB0aGUgc3VwcG9ydCB3ZSBuZWVkIHNvIHRoZSBuZWVkZWQgZnVuY3Rpb25zIGFyZW4ndCByZW1vdmVkIGF0IGNvbXBpbGUgdGltZQorICovCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShsb25nX2luc3RhbmNlKQorCisvKgogICogVGhlbiwgd2UgZGVjbGFyZSB0aGUgdmFyaWFibGVzIHdlIHdhbnQgdG8gYmUgYWNjZXNzZWQgCiAgKi8KIHN0YXRpYyBsb25nICAgICBleGFtcGxlMSA9IDQyOyAgLyogZGVmYXVsdCB2YWx1ZSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5jCmluZGV4IDk3YThmNDcuLjhlOWU2NmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuYworKysgYi9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmMKQEAgLTEzLDExICsxMyw3IEBACiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMjcsMTUgKzIzLDExIEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ1Y2REZW1vUHVibGljLmgiCiAKICNkZWZpbmUgTVlNQVggMTAyNApAQCAtNzMsMTEgKzY1LDE0IEBACiAgKi8KIAogc3RydWN0IHZhcmlhYmxlMiB1Y2REZW1vUHVibGljX3ZhcmlhYmxlc1tdID0gewotICAgIHtVQ0RERU1PUkVTRVRLRVlTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezF9fSwKLSAgICB7VUNEREVNT1BVQkxJQ1NUUklORywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwKLSAgICAgezJ9fSwKLSAgICB7VUNEREVNT1VTRVJMSVNULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91Y2REZW1vUHVibGljLCAxLCB7M319LAotICAgIHtVQ0RERU1PUEFTU1BIUkFTRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezR9fSwKKyAgICB7VUNEREVNT1JFU0VUS0VZUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHsxfX0sCisgICAge1VDRERFTU9QVUJMSUNTVFJJTkcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHsyfX0sCisgICAge1VDRERFTU9VU0VSTElTVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdWNkRGVtb1B1YmxpYywgMSwgezN9fSwKKyAgICB7VUNEREVNT1BBU1NQSFJBU0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VjZERlbW9QdWJsaWMsIDEsIHs0fX0sCiAKIH07CiAKQEAgLTEzMCw3ICsxMjUsNyBAQAogCiAgICAgY2FzZSBVQ0RERU1PUFVCTElDU1RSSU5HOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdWNkRGVtb1B1YmxpY1N0cmluZzsKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4ocHVibGljU3RyaW5nKTsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIqKXB1YmxpY1N0cmluZyk7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBwdWJsaWNTdHJpbmc7CiAKICAgICBjYXNlIFVDRERFTU9VU0VSTElTVDoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaCBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3VjZERlbW9QdWJsaWMuaAppbmRleCBmZDlmMTJmLi4yNTNmNGZmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy91Y2REZW1vUHVibGljLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvdWNkRGVtb1B1YmxpYy5oCkBAIC02LDEwICs2LDEwIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9VQ0RERU1PUFVCTElDX0gKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYyBiL2FnZW50L21pYmdyb3VwL2V4YW1wbGVzL3dhdGNoZWQuYwppbmRleCA1ODEyMmM0Li5iNDg2YmFjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9leGFtcGxlcy93YXRjaGVkLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvZXhhbXBsZXMvd2F0Y2hlZC5jCkBAIC00NSw3ICs0NSw3IEBACiAgICAgICogdmFyaWFibGVzIG5lZWRlZCBmb3IgcmVnaXN0cmF0aW9uCiAgICAgICovCiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKLSAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2F0Y2hlcl9pbmZvOworICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyB3YXRjaGVyX2luZm87CiAgICAgaW50IHdhdGNoZXJfZmxhZ3M7CiAKICAgICAvKgpAQCAtNTcsOCArNTcsNiBAQAogICAgICAgICAgICAgICAgIG15X3N0cmluZykpOwogCiAgICAgLyoKLSAgICAgKiBjcmVhdGUgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvIGZvciBvdXIgc3RyaW5nLiBJZiB5b3Ugd2FudCB0bwotICAgICAqCiAgICAgICogSWYgd2Ugd2FudGVkIGEgY2FsbGJhY2sgd2hlbiB0aGUgdmFsdWUgd2FzIHJldHJpZXZlZCBvciBzZXQKICAgICAgKiAoZXZlbiB0aG91Z2ggdGhlIGRldGFpbHMgb2YgZG9pbmcgdGhpcyBhcmUgaGFuZGxlZCBmb3IgeW91KSwKICAgICAgKiB5b3UgY291bGQgY2hhbmdlIHRoZSBOVUxMIHBvaW50ZXIgYmVsb3cgdG8gYSB2YWxpZCBoYW5kbGVyCkBAIC03MiwzMiArNzAsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgLyoKLSAgICAgKiB0aGUgdHdvIG9wdGlvbnMgZm9yIGEgc3RyaW5nIHdhdGNoZXIgYXJlOgorICAgICAqIHRoZSB0aHJlZSBvcHRpb25zIGZvciBhIHN0cmluZyB3YXRjaGVyIGFyZToKICAgICAgKiAgIGZpeGVkIHNpemUgc3RyaW5nIChsZW5ndGggbmV2ZXIgY2hhbmdlcykKICAgICAgKiAgIHZhcmlhYmxlIHNpemUgKGxlbmd0aCBjYW4gYmUgMCAtIE1BWCwgZm9yIHNvbWUgTUFYKQorICAgICAqICAgYyBzdHJpbmcgKGxlbmd0aCBjYW4gYmUgMCAtIE1BWC0xIGZvciBzb21lIG1heCwgXDAgaXMgbm90IGEgdmFsaWQKKyAgICAgKiAgICAgY2hhcmFjdGVyIGluIHRoZSBzdHJpbmcsIHRoZSBsZW5ndGggaXMgcHJvdmlkZWQgYnkgc3RybGVuKQogICAgICAqCiAgICAgICogd2UnbGwgdXNlIGEgdmFyaWFibGUgbGVuZ3RoIHN0cmluZy4KICAgICAgKi8KICAgICB3YXRjaGVyX2ZsYWdzID0gV0FUQ0hFUl9NQVhfU0laRTsKIAogICAgIC8qCi0gICAgICogY3JlYXRlIHRoZSB3YXRjaGVyIGluZm8gZm9yIG91ciBzdHJpbmcsIGFuZCBzZXQgdGhlIG1heCBzaXplLgorICAgICAqIGNyZWF0ZSB0aGUgd2F0Y2hlciBpbmZvIGZvciBvdXIgc3RyaW5nLgogICAgICAqLwotICAgIHdhdGNoZXJfaW5mbyA9Ci0gICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbyhteV9zdHJpbmcsIHN0cmxlbihteV9zdHJpbmcpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgd2F0Y2hlcl9mbGFncyk7Ci0gICAgd2F0Y2hlcl9pbmZvLT5tYXhfc2l6ZSA9IHNpemVvZihteV9zdHJpbmcpOworICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm82KCZ3YXRjaGVyX2luZm8sIG15X3N0cmluZywgc3RybGVuKG15X3N0cmluZyksCisJCQkgICAgICAgQVNOX09DVEVUX1NUUiwgd2F0Y2hlcl9mbGFncywKKwkJCSAgICAgICBzaXplb2YobXlfc3RyaW5nKSwgTlVMTCk7CiAKICAgICAvKgogICAgICAqIHRoZSBsaW5lIGJlbG93IHJlZ2lzdGVycyBvdXIgIm15X3N0cmluZyIgdmFyaWFibGUgYWJvdmUgYXMKICAgICAgKiBhY2Nlc3NpYmxlIGFuZCBtYWtlcyBpdCB3cml0YWJsZS4gCi0gICAgICogCi0gICAgICogSWYgd2Ugd2FudGVkIGEgY2FsbGJhY2sgd2hlbiB0aGUgdmFsdWUgd2FzIHJldHJpZXZlZCBvciBzZXQKLSAgICAgKiAoZXZlbiB0aG91Z2ggdGhlIGRldGFpbHMgb2YgZG9pbmcgdGhpcyBhcmUgaGFuZGxlZCBmb3IgeW91KSwKLSAgICAgKiB5b3UgY291bGQgY2hhbmdlIHRoZSBOVUxMIHBvaW50ZXIgYmVsb3cgdG8gYSB2YWxpZCBoYW5kbGVyCi0gICAgICogZnVuY3Rpb24uIAogICAgICAqLwotICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZShyZWdpbmZvLCB3YXRjaGVyX2luZm8pOworICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZShyZWdpbmZvLCAmd2F0Y2hlcl9pbmZvKTsKIAogICAgIERFQlVHTVNHVEwoKCJleGFtcGxlX3N0cmluZ19pbnN0YW5jZSIsCiAgICAgICAgICAgICAgICAgIkRvbmUgaW5pdGFsaXppbmcgZXhhbXBsZSBzdHJpbmcgaW5zdGFuY2VcbiIpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgKaW5kZXggZWRkMzM4Ny4uMzk1NjY3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1LmgKQEAgLTE1LDEzICsxNSwxMyBAQAogI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9jcHUvY3B1X2tpbmZvKQogCi0jZWxpZiAoZGVmaW5lZChuZXRic2QpIHx8IGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChuZXRic2RlbGYpIHx8IGRlZmluZWQobmV0YnNkZWxmMil8fCBkZWZpbmVkKG5ldGJzZGVsZjMpIHx8IGRlZmluZWQob3BlbmJzZCkgfHwgZGVmaW5lZChmcmVlYnNkNCkgIHx8IGRlZmluZWQoZnJlZWJzZDUpIHx8IGRlZmluZWQoZnJlZWJzZDYpKQorI2VsaWYgKGRlZmluZWQobmV0YnNkKSB8fCBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQobmV0YnNkZWxmKSB8fCBkZWZpbmVkKG5ldGJzZGVsZjIpfHwgZGVmaW5lZChuZXRic2RlbGYzKSB8fCBkZWZpbmVkKG9wZW5ic2QpIHx8IGRlZmluZWQoZnJlZWJzZDQpIHx8IGRlZmluZWQoZnJlZWJzZDUpIHx8IGRlZmluZWQoZnJlZWJzZDYpKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwpCiAKICNlbGlmIChkZWZpbmVkKGZyZWVic2QyKSB8fCBkZWZpbmVkKGZyZWVic2QzKSkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2NwdS9jcHVfbmxpc3QpCiAKLSNlbGlmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkKKyNlbGlmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdCkKIAogI2VsaWYgKGRlZmluZWQoc29sYXJpczIpKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdS5jCmluZGV4IDRiMjlkYmMuLjI3NzIwMDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHUuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1LmMKQEAgLTEsOCArMSwxNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1LCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX2NwdV9jb3B5X3N0YXRzLCBoYXJkd2FyZV9jcHUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1X2xvYWQsIGhhcmR3YXJlX2NwdSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoYXJkd2FyZV9jcHVfZ2V0X2NhY2hlLCBoYXJkd2FyZV9jcHUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaGFyZHdhcmVfY3B1X2dldF9ieU5hbWUsIGhhcmR3YXJlX2NwdSkKKwogZXh0ZXJuIE5ldHNubXBDYWNoZUxvYWQgbmV0c25tcF9jcHVfYXJjaF9sb2FkOwogc3RhdGljIHZvaWQgX2NwdV91cGRhdGVfc3RhdHMoIHVuc2lnbmVkIGludCwgdm9pZCogKTsKIApAQCAtODQsOCArOTIsOCBAQAogICAgICAgICAgKi8KICAgICBjcHUgPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX2NwdV9pbmZvICk7CiAgICAgaWYgKCFjcHUpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIERFQlVHTVNHKCgiY3B1IiwgIihmYWlsZWQpXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBERUJVR01TRygoImNwdSIsICIoY3JlYXRlZClcbiIpKTsKICAgICBjcHUtPmlkeCA9IGlkeDsKQEAgLTEwNywxNCArMTE1LDE0IEBACiAgICAgICAgICAgICByZXR1cm4gY3B1OwogICAgICAgICB9CiAgICAgfQotICAgIGlmIChjcHUpCi0gICAgICAgIFNOTVBfRlJFRShjcHUpOyAvKiBqdXN0IGluIGNhc2UgKi8KKyAgICBTTk1QX0ZSRUUoY3B1KTsgLyoganVzdCBpbiBjYXNlICovCiAgICAgcmV0dXJuIE5VTEw7ICAvKiBTaG91bGRuJ3QgaGFwcGVuISAqLwogfQogCiAgICAgLyoKICAgICAgKiBXb3JrIHdpdGggYSBsaXN0IG9mIENQVSBlbnRyaWVzLCBpbmRleGVkIGJ5IG5hbWUKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfR0VUX0JZTkFNRQogbmV0c25tcF9jcHVfaW5mbyAqbmV0c25tcF9jcHVfZ2V0X2J5TmFtZSggY2hhciAqbmFtZSwgaW50IGNyZWF0ZSApIHsKICAgICBuZXRzbm1wX2NwdV9pbmZvICpjcHU7CiAKQEAgLTE1MiwxMSArMTYwLDE1IEBACiAgICAgfQogICAgIHJldHVybiBjcHU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfR0VUX0JZTkFNRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0dFVF9DQUNIRQogbmV0c25tcF9jYWNoZSAqbmV0c25tcF9jcHVfZ2V0X2NhY2hlKCB2b2lkICkgewogICAgIHJldHVybiBfY3B1X2NhY2hlOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0dFVF9DQUNIRSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0xPQUQKIGludCBuZXRzbm1wX2NwdV9sb2FkKCB2b2lkICkgewogICAgICAgICAvKgogICAgICAgICAgKiBJZiB3ZSdyZSBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIHRoZSBzdGF0cyByZWd1bGFybHksCkBAIC0xNjUsNiArMTc3LDcgQEAKICAgICByZXR1cm4gKCBfY3B1QXV0b1VwZGF0ZSA/IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggX2NwdV9jYWNoZSApKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hBUkRXQVJFX0NQVV9MT0FEICovCiAKICAgICAvKgogICAgICAqIENhbGwgdGhlIHN5c3RlbS1zcGVjaWZpYyBsb2FkIHJvdXRpbmUgcmVndWxhcmx5LApAQCAtMTgxLDcgKzE5NCw3IEBACiAgICAgICAgICAgICAgKiBGaXJzdCB0aW1lIHRocm91Z2gsIHdlIG5lZWQgdG8gY3JlYXRlIGJ1ZmZlcnMKICAgICAgICAgICAgICAqIGZvciB0aGUgaGlzdG9yaWNhbCBzdGF0cwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjcHUtPmhpc3RvcnkgID0gY2FsbG9jKCBfY3B1SGlzdG9yeUxlbiwgc2l6ZW9mKHN0cnVjdCBuZXRzbm1wX2NwdV9oaXN0b3J5KSk7CisgICAgICAgICAgICBjcHUtPmhpc3RvcnkgID0gKHN0cnVjdCBuZXRzbm1wX2NwdV9oaXN0b3J5ICopY2FsbG9jKCBfY3B1SGlzdG9yeUxlbiwgc2l6ZW9mKHN0cnVjdCBuZXRzbm1wX2NwdV9oaXN0b3J5KSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogT3RoZXJ3aXNlLCByb3RhdGUgdGhlc2UgdmFsdWVzIC0gaW4gZGVzY2VuZGluZyBvcmRlcgpAQCAtMjIwLDEwICsyMzMsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+d2FpdF90aWNrcyArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmtlcm5fdGlja3MgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5pbnRycHRfdGlja3MgKwotICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzOworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdS0+c3RlYWxfdGlja3MgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgY3B1LT5ndWVzdF90aWNrcyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjcHUtPmd1ZXN0bmljZV90aWNrczsKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IQVJEV0FSRV9DUFVfQ09QWV9TVEFUUwogdm9pZCBfY3B1X2NvcHlfc3RhdHMoIG5ldHNubXBfY3B1X2luZm8gKmNwdSApCiB7CiAgICAgbmV0c25tcF9jcHVfaW5mbyAqY3B1MjsKQEAgLTI0Myw2ICsyNjAsOSBAQAogICAgIGNwdTItPmtlcm5fdGlja3MgPSBjcHUtPmtlcm5fdGlja3M7CiAgICAgY3B1Mi0+aW50cnB0X3RpY2tzID0gY3B1LT5pbnRycHRfdGlja3M7CiAgICAgY3B1Mi0+c2lycV90aWNrcyA9IGNwdS0+c2lycV90aWNrczsKKyAgICBjcHUyLT5zdGVhbF90aWNrcyA9IGNwdS0+c3RlYWxfdGlja3M7CisgICAgY3B1Mi0+Z3Vlc3RfdGlja3MgPSBjcHUtPmd1ZXN0X3RpY2tzOworICAgIGNwdTItPmd1ZXN0bmljZV90aWNrcyA9IGNwdS0+Z3Vlc3RuaWNlX3RpY2tzOwogCiAgICAgY3B1Mi0+bkludGVycnVwdHMgID0gY3B1LT5uSW50ZXJydXB0czsKICAgICBjcHUyLT5uQ3R4U3dpdGNoZXMgPSBjcHUtPm5DdHhTd2l0Y2hlczsKQEAgLTI1MSwzICsyNzEsNCBAQAogICAgIGNwdTItPnBhZ2VJbiAgICAgPSBjcHUtPnBhZ2VJbjsKICAgICBjcHUyLT5wYWdlT3V0ICAgID0gY3B1LT5wYWdlT3V0OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEFSRFdBUkVfQ1BVX0NPUFlfU1RBVFMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa2luZm8uYwppbmRleCBmYWNiYzdiLi4zN2NmODQ3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tpbmZvLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9raW5mby5jCkBAIC0yLDYgKzIsNyBAQAogICogIERyYWdvbkZseSBraW5mbyBpbnRlcmZhY2UKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oPgpAQCAtMTMsNiArMTQsNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFyZHdhcmVfY3B1X2NvcHlfc3RhdHMpCiB2b2lkIF9jcHVfY29weV9zdGF0cyggbmV0c25tcF9jcHVfaW5mbyAqY3B1ICk7CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9rc3RhdC5jCmluZGV4IGUxNmFmYjcuLjMzZjE4OGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfa3N0YXQuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2tzdGF0LmMKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAgKiAgIChpbmNsdWRpbmcgZGVzY3JpcHRpb25zKQogICAgICAqLwogdm9pZCBpbml0X2NwdV9rc3RhdCggdm9pZCApIHsKLSAgICBpbnQgICAgICAgICAgICAgICBpLCBuPTAsIGNsb2NrLCBzdGF0ZV9iZWdpbjsKKyAgICBpbnQgICAgICAgICAgICAgICBpID0gMCwgbiA9IDAsIGNsb2NrLCBzdGF0ZV9iZWdpbjsKICAgICBjaGFyICAgICAgICAgICAgICBjdHlwZVsxNV0sIGZ0eXBlWzE1XSwgc3RhdGVbMTBdOwogICAgIGtzdGF0X3QgICAgICAgICAgKmtzcDsKICAgICBrc3RhdF9uYW1lZF90ICAgICprc19kYXRhOwpAQCAtMTAxLDcgKzEwMSw3IEBACiAgICAgICAgICAgICBpICAgID0ga3NwLT5rc19pbnN0YW5jZTsKICAgICAgICAgICAgIGNwdTIgPSBuZXRzbm1wX2NwdV9nZXRfYnlJZHgoIGksIDAgKTsKICAgICAgICAgICAgIGlmICggIWNwdTIgKSAgCi0gICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogb3IgY29udGludWUgPyAqLyAgICAvKiBTa2lwIG5ldyBDUFVzICovCisgICAgICAgICAgICAgICAgYnJlYWs7ICAgLyogb3IgY29udGludWUgPyAqLyAgLyogU2tpcCBuZXcgQ1BVcyAqLwogICAgICAgICAgICAgaWYgKChrc3AtPmtzX3R5cGUgIT0gS1NUQVRfVFlQRV9SQVcpIHx8CiAgICAgICAgICAgICAgICAgKGtzcC0+a3NfZGF0YV9zaXplICE9IHNpemVvZihjcykpfHwKICAgICAgICAgICAgICAgICAoa3N0YXRfcmVhZChrc3RhdF9mZCwga3NwLCAmY3MpID09IC0xKSkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9saW51eC5jCmluZGV4IGUyN2UxMmUuLmIxZGMzMDggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X2xpbnV4LmMKQEAgLTU3LDcgKzU3LDcgQEAKICNlbmRpZgogICAgICAgICB9CiAjaWYgZGVmaW5lZChfX3MzOTBfXykgfHwgZGVmaW5lZChfX3MzOTB4X18pCi0JLyogczM5MCBtYXkgZGlmZmVyZW50IGZvcm1hdCBvZiBDUFVfRklMRSAqLworCS8qIHMzOTAgbWF5IGhhdmUgZGlmZmVyZW50IGZvcm1hdCBvZiBDUFVfRklMRSAqLwogICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIGlmIChzc2NhbmYoIGJ1ZiwgInByb2Nlc3NvciAlZDoiLCAmaSApID09IDEpICB7CiAgICAgICAgICAgICAgICAgbisrOwpAQCAtOTksMTEgKzk5LDEyIEBACiAgICAgc3RhdGljIGNoYXIgKmJ1ZmYgID0gTlVMTDsKICAgICBzdGF0aWMgaW50ICAgYnNpemUgPSAwOwogICAgIHN0YXRpYyBpbnQgICBmaXJzdCA9IDE7Ci0gICAgc3RhdGljIGludCAgIGhhc19jcHVfMjYgPSAxOworICAgIHN0YXRpYyBpbnQgICBudW1fY3B1bGluZV9lbGVtID0gMDsKICAgICBpbnQgICAgICAgICAgYnl0ZXNfcmVhZCwgc3RhdGZkLCBpOwogICAgIGNoYXIgICAgICAgICpiMSwgKmIyOwogICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBjdXNlbGwgPSAwLCBjaWNlbGwgPSAwLCBjc3lzbGwgPSAwLCBjaWRlbGwgPSAwLAotICAgICAgICAgICAgICAgICAgICAgICBjaW93bGwgPSAwLCBjaXJxbGwgPSAwLCBjc29mdGxsID0gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgY2lvd2xsID0gMCwgY2lycWxsID0gMCwgY3NvZnRsbCA9IDAsIGNzdGVhbGxsID0gMCwKKyAgICAgICAgICAgICAgICAgICAgICAgY2d1ZXN0bGwgPSAwLCBjZ3Vlc3RfbmljZWxsID0gMDsKICAgICBuZXRzbm1wX2NwdV9pbmZvKiBjcHU7CiAKICAgICBpZiAoKHN0YXRmZCA9IG9wZW4oU1RBVF9GSUxFLCBPX1JET05MWSwgMCkpID09IC0xKSB7CkBAIC0xMTIsMTEgKzExMywxMSBAQAogICAgIH0KICAgICBpZiAoYnNpemUgPT0gMCkgewogICAgICAgICBic2l6ZSA9IGdldHBhZ2VzaXplKCktMTsKLSAgICAgICAgYnVmZiA9IG1hbGxvYyhic2l6ZSsxKTsKKyAgICAgICAgYnVmZiA9IChjaGFyKiltYWxsb2MoYnNpemUrMSk7CiAgICAgfQogICAgIHdoaWxlICgoYnl0ZXNfcmVhZCA9IHJlYWQoc3RhdGZkLCBidWZmLCBic2l6ZSkpID09IGJzaXplKSB7CiAgICAgICAgIGJzaXplICs9IEJVRlNJWjsKLSAgICAgICAgYnVmZiA9IHJlYWxsb2MoYnVmZiwgYnNpemUrMSk7CisgICAgICAgIGJ1ZmYgPSAoY2hhciopcmVhbGxvYyhidWZmLCBic2l6ZSsxKTsKICAgICAgICAgREVCVUdNU0dUTCgoImNwdSIsICIvcHJvYy9zdGF0IGJ1ZmZlciBpbmNyZWFzZWQgdG8gJWRcbiIsIGJzaXplKSk7CiAgICAgICAgIGNsb3NlKHN0YXRmZCk7CiAgICAgICAgIHN0YXRmZCA9IG9wZW4oU1RBVF9GSUxFLCBPX1JET05MWSwgMCk7CkBAIC0xNTgsMjIgKzE1OSwzMyBAQAogICAgICAgICAgICAgYjErKzsKICAgICAgICAgfQogCi0JaWYgKCFoYXNfY3B1XzI2IHx8Ci0gICAgICAgICAgICBzc2NhbmYoYjEsICIlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1IiwgJmN1c2VsbCwKLSAgICAgICAgICAgICAgICAgICAmY2ljZWxsLCAmY3N5c2xsLCAmY2lkZWxsLCAmY2lvd2xsLCAmY2lycWxsLCAmY3NvZnRsbCkgIT0gNykgewotCSAgICBoYXNfY3B1XzI2ID0gMDsKLQkgICAgc3NjYW5mKGIxLCAiJWxsdSAlbGx1ICVsbHUgJWxsdSIsICZjdXNlbGwsICZjaWNlbGwsICZjc3lzbGwsCi0gICAgICAgICAgICAgICAgICAgJmNpZGVsbCk7CisgICAgICAgIG51bV9jcHVsaW5lX2VsZW0gPSBzc2NhbmYoYjEsICIlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1IiwKKyAgICAgICAgICZjdXNlbGwsICZjaWNlbGwsICZjc3lzbGwsICZjaWRlbGwsICZjaW93bGwsICZjaXJxbGwsICZjc29mdGxsLCAmY3N0ZWFsbGwsICZjZ3Vlc3RsbCwgJmNndWVzdF9uaWNlbGwpOworICAgICAgICBERUJVR01TR1RMKCgiY3B1IiwgIi9wcm9jL3N0YXQgY3B1IGxpbmUgbnVtYmVyIG9mIGVsZW1lbnRzOiAlaVxuIiwgbnVtX2NwdWxpbmVfZWxlbSkpOwogCi0JfSBlbHNlIHsKLSAgICAgICAgICAgIGNwdS0+d2FpdF90aWNrcyAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljaW93bGw7Ci0gICAgICAgICAgICBjcHUtPmludHJwdF90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2lycWxsOwotICAgICAgICAgICAgY3B1LT5zaXJxX3RpY2tzICAgPSAodW5zaWduZWQgbG9uZyBsb25nKWNzb2Z0bGw7Ci0gCX0KLSAgICAgICAgY3B1LT51c2VyX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljdXNlbGw7Ci0gICAgICAgIGNwdS0+bmljZV90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY2ljZWxsOwotICAgICAgICBjcHUtPnN5c190aWNrcyAgPSAodW5zaWduZWQgbG9uZyBsb25nKWNzeXNsbDsKLSAgICAgICAgY3B1LT5pZGxlX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljaWRlbGw7CisgICAgICAgIC8qIGtlcm5lbCAyLjYuMzMgYW5kIGFib3ZlICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID09IDEwKSB7CisgICAgICAgICAgICBjcHUtPmd1ZXN0bmljZV90aWNrcyA9IGNndWVzdF9uaWNlbGw7CisgICAgICAgIH0KKyAgICAgICAgLyoga2VybmVsIDIuNi4yNCBhbmQgYWJvdmUgKi8KKyAgICAgICAgaWYgKG51bV9jcHVsaW5lX2VsZW0gPj0gOSkgeworICAgICAgICAgICAgY3B1LT5ndWVzdF90aWNrcyA9IGNndWVzdGxsOworICAgICAgICB9CisgICAgICAgIC8qIGtlcm5lbCAyLjYuMTEgYW5kIGFib3ZlICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID49IDgpIHsKKyAgICAgICAgICAgIGNwdS0+c3RlYWxfdGlja3MgPSBjc3RlYWxsbDsKKyAgICAgICAgfQorICAgICAgICAvKiBrZXJuZWwgMi42ICovCisgICAgICAgIGlmIChudW1fY3B1bGluZV9lbGVtID49IDUpIHsKKyAgICAgICAgICAgIGNwdS0+d2FpdF90aWNrcyAgID0gY2lvd2xsOworICAgICAgICAgICAgY3B1LT5pbnRycHRfdGlja3MgPSBjaXJxbGw7CisgICAgICAgICAgICBjcHUtPnNpcnFfdGlja3MgICA9IGNzb2Z0bGw7CisgICAgICAgIH0KKyAgICAgICAgLyogcmVzdCAqLworICAgICAgICBjcHUtPnVzZXJfdGlja3MgPSBjdXNlbGw7CisgICAgICAgIGNwdS0+bmljZV90aWNrcyA9IGNpY2VsbDsKKyAgICAgICAgY3B1LT5zeXNfdGlja3MgID0gY3N5c2xsOworICAgICAgICBjcHUtPmlkbGVfdGlja3MgPSBjaWRlbGw7CiAgICAgfQogICAgIGlmICggYjEgPT0gYnVmZiApIHsKIAlpZiAoZmlyc3QpCkBAIC0yMTksMTEgKzIzMSwxMSBAQAogICAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHZtYnNpemUgPT0gMCkgewogCSAgICB2bWJzaXplID0gZ2V0cGFnZXNpemUoKS0xOwotCSAgICB2bWJ1ZmYgPSBtYWxsb2Modm1ic2l6ZSsxKTsKKwkgICAgdm1idWZmID0gKGNoYXIqKW1hbGxvYyh2bWJzaXplKzEpOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlICgoYnl0ZXNfcmVhZCA9IHJlYWQodm1zdGF0ZmQsIHZtYnVmZiwgdm1ic2l6ZSkpID09IHZtYnNpemUpIHsKIAkgICAgdm1ic2l6ZSArPSBCVUZTSVo7Ci0JICAgIHZtYnVmZiA9IHJlYWxsb2Modm1idWZmLCB2bWJzaXplKzEpOworCSAgICB2bWJ1ZmYgPSAoY2hhciopcmVhbGxvYyh2bWJ1ZmYsIHZtYnNpemUrMSk7CiAJICAgIGNsb3NlKHZtc3RhdGZkKTsKIAkgICAgdm1zdGF0ZmQgPSBvcGVuKFZNU1RBVF9GSUxFLCBPX1JET05MWSwgMCk7CiAJICAgIGlmICh2bXN0YXRmZCA9PSAtMSkgewpAQCAtMjMyLDcgKzI0NCw2IEBACiAJICAgIH0KICAgICAgICAgfQogICAgICAgICBjbG9zZSh2bXN0YXRmZCk7Ci0KICAgICAgICAgaWYgKCBieXRlc19yZWFkIDwgMCApIHsKICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihWTVNUQVRfRklMRSAicmVhZCBlcnJvciIpOwogICAgICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9tYWNoLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYwppbmRleCBkNTI3YjNkLi43ZjA5MGM5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X21hY2guYwpAQCAtMTA4LDYgKzEwOCw3IEBACiAgICAgY3B1MC0+cGFnZUluID0gdm1zdGF0LnBhZ2VpbnM7CiAgICAgY3B1MC0+cGFnZU91dCA9IHZtc3RhdC5wYWdlb3V0czsKIAkvKiBub3QgaW1wbGVtZW50ZWQ6IHN3YXBJbiwgc3dhcE91dCwgbkludGVycnVwdHMsIG5DdHhTd2l0Y2hlcyAqLworICAgIHJldHVybiAxOwogfQogCiAgCSAgCSAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfbmxpc3QuYwppbmRleCBhOWViMWUyLi45NzQwMjhhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X25saXN0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9ubGlzdC5jCkBAIC0zLDYgKzMsNyBAQAogICogICAgIGUuZy4gRnJlZUJTRAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1Lmg+CkBAIC0zMSw2ICszMiw3IEBACiAjZGVmaW5lIENQVV9TWU1CT0wgICJjcF90aW1lIgogI2RlZmluZSBNRU1fU1lNQk9MICAiY250IgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfY29weV9zdGF0cykKIHZvaWQgX2NwdV9jb3B5X3N0YXRzKCBuZXRzbm1wX2NwdV9pbmZvICpjcHUgKTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3BlcmZzdGF0LmMKaW5kZXggZjQ0ZjI5NS4uNWZkZDUzMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9wZXJmc3RhdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfcGVyZnN0YXQuYwpAQCAtMyw2ICszLDcgQEAKICAqICAgICBlLmcuIEFJWAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1Lmg+CkBAIC0xMSw4ICsxMiwxMCBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfY29weV9zdGF0cykKIHZvaWQgX2NwdV9jb3B5X3N0YXRzKCBuZXRzbm1wX2NwdV9pbmZvICpjcHUgKTsKIAogICAgIC8qCkBAIC0yNyw3ICszMCw3IEBACiAgICAgc3RyY3B5KGNwdS0+bmFtZSwgIk92ZXJhbGwgQ1BVIHN0YXRpc3RpY3MiKTsKIAogICAgIGNwdV9udW0gPSBwZXJmc3RhdF9jcHUoIE5VTEwsIE5VTEwsIHNpemVvZihwZXJmc3RhdF9jcHVfdCksIDAgKTsKLSAgICBjczIgPSBtYWxsb2MoIGNwdV9udW0qc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSk7CisgICAgY3MyID0gKHBlcmZzdGF0X2NwdV90KiltYWxsb2MoIGNwdV9udW0qc2l6ZW9mKHBlcmZzdGF0X2NwdV90KSk7CiAgCiAgICAgc3RyY3B5KCBuYW1lLm5hbWUsICIiKTsKICAgICBpZiAocGVyZnN0YXRfY3B1KCZuYW1lLCBjczIsIHNpemVvZihwZXJmc3RhdF9jcHVfdCksIGNwdV9udW0pID4gMCkgewpAQCAtODMsNyArODYsNyBAQAogICAgICAqIFBlci1DUFUgc3RhdGlzdGljcwogICAgICAqLwogICAgIG4gICA9IGNzLm5jcHVzOyAgIC8qIFhYWCAtIENvbXBhcmUgYWdhaW5zdCBjcHVfbnVtICovCi0gICAgY3MyID0gbWFsbG9jKCBuKnNpemVvZihwZXJmc3RhdF9jcHVfdCkpOworICAgIGNzMiA9IChwZXJmc3RhdF9jcHVfdCopbWFsbG9jKCBuKnNpemVvZihwZXJmc3RhdF9jcHVfdCkpOwogICAgIHN0cmNweSggbmFtZS5uYW1lLCAiIik7CiAgICAgaWYgKHBlcmZzdGF0X2NwdSgmbmFtZSwgY3MyLCBzaXplb2YocGVyZnN0YXRfY3B1X3QpLCBuKSA+IDApIHsKICAgICAgICAgZm9yICggaSA9IDA7IGkgPCBuOyBpKysgKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvY3B1L2NwdV9zeXNjdGwuYwppbmRleCBjNjEwMjY5Li41ZWNiNjhlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9jcHUvY3B1X3N5c2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2NwdS9jcHVfc3lzY3RsLmMKQEAgLTMsNiArMyw3IEBACiAgKiAgICAgZS5nLiBCU0QvT1MsIE5ldEJTRCwgT3BlbkJTRCwgbGF0ZXIgRGFyd2luIHJlbGVhc2VzCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaD4KQEAgLTMwLDYgKzMxLDggQEAKICNpbmNsdWRlIDx2bS92bV9leHRlcm4uaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoYXJkd2FyZV9jcHVfY29weV9zdGF0cykKKwogdm9pZCBfY3B1X2NvcHlfc3RhdHMoIG5ldHNubXBfY3B1X2luZm8gKmNwdSApOwogCiAgICAgLyoKQEAgLTc1LDEzICs3OCwyMCBAQAogCiAjaWYgZGVmaW5lZChfX05ldEJTRF9fKQogI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQX1RJTUUKKyNkZWZpbmUgTkVUU05NUF9LRVJOX01DUFUKKyNkZWZpbmUgTkVUU05NUF9LRVJOX01DUFVfVFlQRSBORVRTTk1QX0NQVV9TVEFUUwogI2VsaWYgZGVmaW5lZChLRVJOX0NQVVNUQVRTKSAgICAgICAgICAgICAgLyogQlNEaSAqLwogI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQVVNUQVRTCisjZWxpZiBkZWZpbmVkKEtFUk5fQ1BUSU1FMikgICAgICAgICAgICAgICAgLyogT3BlbkJTRCAqLworI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQVElNRQorI2RlZmluZSBORVRTTk1QX0tFUk5fTUNQVQorI2RlZmluZSBORVRTTk1QX0tFUk5fTUNQVV9UWVBFIHVfaW50NjRfdAogI2VsaWYgZGVmaW5lZChLRVJOX0NQVElNRSkgICAgICAgICAgICAgICAgLyogT3BlbkJTRCAqLwogI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICBLRVJOX0NQVElNRQogCiAjZWxpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKQotI2RlZmluZSBORVRTTk1QX0tFUk5fQ1BVICAwICAgIC8qIGR1bW15IHZhbHVlIC0gc3lzY3RsbmFtZXRvbWliKDIpIHNob3VsZCBiZSB1c2VkICovCisjZGVmaW5lIE5FVFNOTVBfS0VSTl9NQ1BVIDEgICAgLyogRW5hYmxlIHN1cHBvcnQgZm9yIG11bHRpLWNwdSBzdGF0cy4gVmFsaWQgZm9yIEZyZWVCU0QgPj02LjQsID49Ny4xLCA+PTguMCBhbmQgYmV5b25kICovCisjZGVmaW5lIE5FVFNOTVBfS0VSTl9NQ1BVX1RZUEUgTkVUU05NUF9DUFVfU1RBVFMKIAogI2Vsc2UKICNlcnJvciAiTm8gQ1BVIHN0YXRpc3RpY3Mgc3lzY3RsIHRva2VuIgpAQCAtMTAzLDggKzExMywxMyBAQAogICAgICNkZWZpbmUgTlNfVk1fU1dUQ0gJCXN3dGNoCiAgICAgI2RlZmluZSBOU19WTV9QQUdFSU4JcGFnZWlucwogICAgICNkZWZpbmUgTlNfVk1fUEFHRU9VVAlwZHBhZ2VvdXRzCisjaWZkZWYgSEFWRV9TVFJVQ1RfVVZNRVhQX1BHU1dBUElOCisgICAgI2RlZmluZSBOU19WTV9TV0FQSU4JcGdzd2FwaW4KKyAgICAjZGVmaW5lIE5TX1ZNX1NXQVBPVVQJcGdzd2Fwb3V0CisjZWxzZQogICAgICNkZWZpbmUgTlNfVk1fU1dBUElOCXN3YXBpbnMKICAgICAjZGVmaW5lIE5TX1ZNX1NXQVBPVVQJc3dhcG91dHMKKyNlbmRpZgogCiAjaWYgZGVmaW5lZChWTV9VVk1FWFAyKSAgICAgICAgICAgICAgICAgICAvKiBOZXRCU0QgMS42KyAqLwogI2RlZmluZSBORVRTTk1QX1ZNX1NUQVRTICAgICAgIFZNX1VWTUVYUDIKQEAgLTE0NCw3ICsxNTksNiBAQAogICAgICAqIExvYWQgdGhlIGxhdGVzdCBDUFUgdXNhZ2Ugc3RhdGlzdGljcwogICAgICAqLwogaW50IG5ldHNubXBfY3B1X2FyY2hfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKm1hZ2ljICkgewotICAgIGludCAgICAgICAgICAgICAgICAgICAgIGk7CiAKICAgICAvKgogICAgICAqIFN0cmljdGx5IHNwZWFraW5nLCBCU0RpIG91Z2h0IHRvIHVzZQpAQCAtMTU0LDExICsxNjgsMjAgQEAKICAgICAgKiBEb24ndCBmaWdodCBpdCwgRGF2ZSAtIGdvIHdpdGggdGhlIGZsb3cuLi4uCiAgICAgICovCiAgICAgTkVUU05NUF9DUFVfU1RBVFMgY3B1X3N0YXRzW0NQVVNUQVRFU107Ci0gICAgaW50ICAgICAgICAgICAgY3B1X21pYltdID0geyBDVExfS0VSTiwgTkVUU05NUF9LRVJOX0NQVSB9OwogICAgIHNpemVfdCAgICAgICAgIGNwdV9zaXplICA9IHNpemVvZihjcHVfc3RhdHMpOworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX05ldEJTRF9fKQorICAgIGludCAgICAgICAgICAgIGNwdV9taWJbXSA9IHsgQ1RMX0tFUk4sIE5FVFNOTVBfS0VSTl9DUFUgfTsKKyNlbmRpZgorI2lmZGVmIF9fRnJlZUJTRF9fCisgICAgc3RhdGljIGludCAgICAgY3BfdGltZXMgPSAtMTsKKyNlbmRpZgorI2lmZGVmIEtFUk5fQ1BUSU1FMgorICAgIGludCAgICAgICAgICAgIG1jcHVfbWliW10gPSB7IENUTF9LRVJOLCBLRVJOX0NQVElNRTIsIDAgfTsKKyNlbmRpZgogI2lmZGVmIE5FVFNOTVBfS0VSTl9NQ1BVIAorICAgIGludCAgICAgICAgICAgIGk7CisgICAgaW50ICAgICAgICAgICAgYWN0X2NwdSA9IGNwdV9udW07CiAgICAgTkVUU05NUF9LRVJOX01DUFVfVFlQRSAqbWNwdV9zdGF0czsKLSAgICBpbnQgICAgICAgICAgICBtY3B1X21pYltdID0geyBDVExfS0VSTiwgTkVUU05NUF9LRVJOX01DUFUgfTsKICAgICBzaXplX3QgICAgICAgICBtY3B1X3NpemU7CiAjZW5kaWYKICAgICBORVRTTk1QX1ZNX1NUQVRTX1RZUEUgbWVtX3N0YXRzOwpAQCAtMTY2LDE3ICsxODksMTcgQEAKICAgICBzaXplX3QgICAgICAgICBtZW1fc2l6ZSAgPSBzaXplb2YoTkVUU05NUF9WTV9TVEFUU19UWVBFKTsKICAgICBuZXRzbm1wX2NwdV9pbmZvICpjcHUgPSBuZXRzbm1wX2NwdV9nZXRfYnlJZHgoIC0xLCAwICk7CiAKLSNpZiAoZGVmaW5lZChfX0ZyZWVCU0RfXykgfHwgZGVmaW5lZChfX05ldEJTRF9fKSkKKyNpZiBkZWZpbmVkKF9fRnJlZUJTRF9fKSB8fCBkZWZpbmVkKF9fTmV0QlNEX18pCiAgICAgc3lzY3RsYnluYW1lKCJrZXJuLmNwX3RpbWUiLCBjcHVfc3RhdHMsICZjcHVfc2l6ZSwgTlVMTCwgMCk7CiAjZWxzZQogICAgIHN5c2N0bChjcHVfbWliLCAyLCAgY3B1X3N0YXRzLCAmY3B1X3NpemUsIE5VTEwsIDApOwogI2VuZGlmCi0gICAgY3B1LT51c2VyX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfVVNFUl07Ci0gICAgY3B1LT5uaWNlX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfTklDRV07Ci0gICAgY3B1LT5zeXMyX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfU1lTXStjcHVfc3RhdHNbQ1BfSU5UUl07Ci0gICAgY3B1LT5rZXJuX3RpY2tzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyljcHVfc3RhdHNbQ1BfU1lTXTsKLSAgICBjcHUtPmlkbGVfdGlja3MgPSAodW5zaWduZWQgbG9uZyBsb25nKWNwdV9zdGF0c1tDUF9JRExFXTsKLSAgICBjcHUtPmludHJwdF90aWNrcyA9ICh1bnNpZ25lZCBsb25nIGxvbmcpY3B1X3N0YXRzW0NQX0lOVFJdOworICAgIGNwdS0+dXNlcl90aWNrcyA9IGNwdV9zdGF0c1tDUF9VU0VSXTsKKyAgICBjcHUtPm5pY2VfdGlja3MgPSBjcHVfc3RhdHNbQ1BfTklDRV07CisgICAgY3B1LT5zeXMyX3RpY2tzID0gY3B1X3N0YXRzW0NQX1NZU10rY3B1X3N0YXRzW0NQX0lOVFJdOworICAgIGNwdS0+a2Vybl90aWNrcyA9IGNwdV9zdGF0c1tDUF9TWVNdOworICAgIGNwdS0+aWRsZV90aWNrcyA9IGNwdV9zdGF0c1tDUF9JRExFXTsKKyAgICBjcHUtPmludHJwdF90aWNrcyA9IGNwdV9zdGF0c1tDUF9JTlRSXTsKICAgICAgICAgLyogd2FpdF90aWNrcywgc2lycV90aWNrcyB1bnVzZWQgKi8KICAgICAKICAgICAgICAgLyoKQEAgLTE4NCwzMCArMjA3LDgzIEBACiAgICAgICAgICAqICAgWFhYIC0gRG8gdGhlc2UgcmVhbGx5IGJlbG9uZyBoZXJlID8KICAgICAgICAgICovCiAgICAgc3lzY3RsKG1lbV9taWIsIDIsICZtZW1fc3RhdHMsICZtZW1fc2l6ZSwgTlVMTCwgMCk7Ci0gICAgY3B1LT5uSW50ZXJydXB0cyAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9JTlRSOwotICAgIGNwdS0+bkN0eFN3aXRjaGVzID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fU1dUQ0g7Ci0gICAgY3B1LT5zd2FwSW4gICAgICAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9TV0FQSU47Ci0gICAgY3B1LT5zd2FwT3V0ICAgICAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9TV0FQT1VUOworICAgIGNwdS0+bkludGVycnVwdHMgID0gbWVtX3N0YXRzLk5TX1ZNX0lOVFI7CisgICAgY3B1LT5uQ3R4U3dpdGNoZXMgPSBtZW1fc3RhdHMuTlNfVk1fU1dUQ0g7CisgICAgY3B1LT5zd2FwSW4gICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fU1dBUElOOworICAgIGNwdS0+c3dhcE91dCAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1NXQVBPVVQ7CiAjaWZkZWYgTlNfVk1fUEFHRUlOCi0gICAgY3B1LT5wYWdlSW4gICAgICAgPSAodW5zaWduZWQgbG9uZyBsb25nKW1lbV9zdGF0cy5OU19WTV9QQUdFSU47CisgICAgY3B1LT5wYWdlSW4gICAgICAgPSBtZW1fc3RhdHMuTlNfVk1fUEFHRUlOOwogI2VuZGlmCiAjaWZkZWYgTlNfVk1fUEFHRU9VVAotICAgIGNwdS0+cGFnZU91dCAgICAgID0gKHVuc2lnbmVkIGxvbmcgbG9uZyltZW1fc3RhdHMuTlNfVk1fUEFHRU9VVDsKKyAgICBjcHUtPnBhZ2VPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9QQUdFT1VUOwogI2VuZGlmCiAKICNpZmRlZiBORVRTTk1QX0tFUk5fTUNQVQotICAgIG1jcHVfc2l6ZSAgPSBjcHVfbnVtKnNpemVvZihORVRTTk1QX0tFUk5fTUNQVV9UWVBFKTsKKyNpZiBkZWZpbmVkKEtFUk5fQ1BUSU1FMikKKyAgICBtY3B1X3NpemUgID0gY3B1X251bSpzaXplb2YoY3B1X3N0YXRzKTsKICAgICBtY3B1X3N0YXRzID0gbWFsbG9jKG1jcHVfc2l6ZSk7Ci0gICAgc3lzY3RsKG1jcHVfbWliLCAyLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKLSAgICBmb3IgKCBpID0gMDsgaSA8IGNwdV9udW07IGkrKyApIHsKKyNlbGlmIGRlZmluZWQoX19OZXRCU0RfXykKKyAgICBtY3B1X3NpemUgID0gY3B1X251bSpzaXplb2YoY3B1X3N0YXRzKTsKKyAgICBtY3B1X3N0YXRzID0gbWFsbG9jKG1jcHVfc2l6ZSk7CisgICAgc3lzY3RsYnluYW1lKCJrZXJuLmNwX3RpbWUiLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKyNlbGlmIGRlZmluZWQoX19GcmVlQlNEX18pCisgICAgaWYgKGNwX3RpbWVzID09IC0xKSB7CisJaW50IHJldCA9IHN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lcyIsIE5VTEwsICZtY3B1X3NpemUsIE5VTEwsIDApOworCWNwX3RpbWVzID0gcmV0ID09IC0xID8gMCA6IDE7CisgICAgfQorICAgIGlmIChjcF90aW1lcykgeworCXN5c2N0bGJ5bmFtZSgia2Vybi5jcF90aW1lcyIsIE5VTEwsICZtY3B1X3NpemUsIE5VTEwsIDApOworCW1jcHVfc3RhdHMgPSBtYWxsb2MobWNwdV9zaXplKTsKKwlzeXNjdGxieW5hbWUoImtlcm4uY3BfdGltZXMiLCBtY3B1X3N0YXRzLCAmbWNwdV9zaXplLCBOVUxMLCAwKTsKKyAgICB9CisgICAgZWxzZSB7CisJbWNwdV9zaXplICA9IHNpemVvZihjcHVfc3RhdHMpOworCW1jcHVfc3RhdHMgPSBtYWxsb2MobWNwdV9zaXplKTsKKwlzeXNjdGxieW5hbWUoImtlcm4uY3BfdGltZSIsIG1jcHVfc3RhdHMsICZtY3B1X3NpemUsIE5VTEwsIDApOworCWFjdF9jcHUgPSAxOworICAgIH0KKyNlbmRpZgorICAgIGZvciAoIGkgPSAwOyBpIDwgYWN0X2NwdTsgaSsrICkgewogICAgICAgICBjcHUgPSBuZXRzbm1wX2NwdV9nZXRfYnlJZHgoIGksIDAgKTsKICAgICAgICAgLyogWFhYIC0gcGVyLUNQVSBzdGF0aXN0aWNzIC0gbWNwdV9taWJbaV0uPz8/ICovCisjaWZkZWYgS0VSTl9DUFRJTUUyCisJbWNwdV9taWJbMl0gPSBpOworCXN5c2N0bChtY3B1X21pYiwgMywgbWNwdV9zdGF0cytpKkNQVVNUQVRFUywgJm1jcHVfc2l6ZSwgTlVMTCwgMCk7CisjZW5kaWYKKwkvKiBBbG1vc3QgY29weSAmIHBhc3RlIG9mIHByZXZpb3VzIGNwdSBzdGF0cyBzdHVmZiA6KSAqLworCWNwdS0+dXNlcl90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9VU0VSXTsKKwljcHUtPm5pY2VfdGlja3MgPSBtY3B1X3N0YXRzWyhpKkNQVVNUQVRFUykrQ1BfTklDRV07CisJY3B1LT5zeXMyX3RpY2tzID0gbWNwdV9zdGF0c1soaSpDUFVTVEFURVMpK0NQX1NZU10rbWNwdV9zdGF0c1soaSpDUFVTVEFURVMpK0NQX0lOVFJdOworCWNwdS0+a2Vybl90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9TWVNdOworCWNwdS0+aWRsZV90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9JRExFXTsKKwljcHUtPmludHJwdF90aWNrcyA9IG1jcHVfc3RhdHNbKGkqQ1BVU1RBVEVTKStDUF9JTlRSXTsKKwkgICAgLyogd2FpdF90aWNrcywgc2lycV90aWNrcyB1bnVzZWQgKi8KKworCSAgICAvKgorCSAgICAgKiBJbnRlcnJ1cHQvQ29udGV4dCBTd2l0Y2ggc3RhdGlzdGljcworCSAgICAgKiAgIFhYWCAtIERvIHRoZXNlIHJlYWxseSBiZWxvbmcgaGVyZSA/CisJICAgICAqLworCisJLyogVGhlcmUncyBubyByZWFsIG5lZWQgdG8gZXhlY3V0ZSBhbm90aGVyIHN5c2N0bCgpCisJICoKKwkgKiBzeXNjdGwobWVtX21pYiwgMiwgJm1lbV9zdGF0cywgJm1lbV9zaXplLCBOVUxMLCAwKTsKKwkgKi8KKwljcHUtPm5JbnRlcnJ1cHRzICA9IG1lbV9zdGF0cy5OU19WTV9JTlRSOworCWNwdS0+bkN0eFN3aXRjaGVzID0gbWVtX3N0YXRzLk5TX1ZNX1NXVENIOworCWNwdS0+c3dhcEluICAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1NXQVBJTjsKKwljcHUtPnN3YXBPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9TV0FQT1VUOworI2lmZGVmIE5TX1ZNX1BBR0VJTgorCWNwdS0+cGFnZUluICAgICAgID0gbWVtX3N0YXRzLk5TX1ZNX1BBR0VJTjsKKyNlbmRpZgorI2lmZGVmIE5TX1ZNX1BBR0VPVVQKKwljcHUtPnBhZ2VPdXQgICAgICA9IG1lbV9zdGF0cy5OU19WTV9QQUdFT1VUOworI2VuZGlmCiAgICAgfQogICAgIGZyZWUobWNwdV9zdGF0cyk7Ci0jZWxzZQorI2Vsc2UJLyogTkVUU05NUF9LRVJOX01DUFUgKi8KICAgICAgICAgLyogQ29weSAib3ZlcmFsbCIgZmlndXJlcyB0byBjcHUwIGVudHJ5ICovCiAgICAgX2NwdV9jb3B5X3N0YXRzKCBjcHUgKTsKLSNlbmRpZgorI2VuZGlmICAvKiBORVRTTk1QX0tFUk5fTUNQVSAqLwogCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGNiZjQzOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMuaApAQCAtMCwwICsxLDEwIEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9mc3lzL2h3X2ZzeXMpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bCkKKyNlbGlmIGRlZmluZWQoSEFWRV9HRVRWRlNTVEFUKSB8fCBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9mc3lzX2dldGZzc3RhdHMpCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VUTU5URU5UKSAmJiAhZGVmaW5lZChpcml4NikKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2ZzeXMvZnN5c19tbnRlbnQpCisjZWxzZQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cy9mc3lzX3ZvaWQpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c19nZXRmc3N0YXRzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MDI3ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfZ2V0ZnNzdGF0cy5jCkBAIC0wLDAgKzEsMTY4IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKyNpbmNsdWRlICJoYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaCIKKworI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBIYW5kbGUgbWlub3IgbmFtaW5nIGRpZmZlcmVuY2VzIGJldHdlZW4gc3RhdGZzL3N0YXR2ZnMKKyAgICAgKi8KKyNpZiBkZWZpbmVkKF9WRlNfTkFNRUxFTikKKyNkZWZpbmUgTlNGU19OQU1FTEVOICBfVkZTX05BTUVMRU4KKyNlbHNlCisjZGVmaW5lIE5TRlNfTkFNRUxFTiAgTU5BTUVMRU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0dFVFZGU1NUQVQpICYmIGRlZmluZWQoX19OZXRCU0RfXykKKyNkZWZpbmUgTlNGU19HRVRGU1NUQVQgIGdldHZmc3N0YXQKKyNkZWZpbmUgTlNGU19TVEFURlMgICAgIHN0YXR2ZnMKKyNkZWZpbmUgTlNGU19GTEFHUyAgICAgIGZfZmxhZworI2Vsc2UKKyNkZWZpbmUgTlNGU19HRVRGU1NUQVQgIGdldGZzc3RhdAorI2RlZmluZSBOU0ZTX1NUQVRGUyAgICAgc3RhdGZzCisjZGVmaW5lIE5TRlNfRkxBR1MgICAgICBmX2ZsYWdzCisjZW5kaWYKKworaW50CitfZnNfdHlwZSggY2hhciAqdHlwZW5hbWUgKQoreworICAgIERFQlVHTVNHVEwoKCJmc3lzOnR5cGUiLCAiQ2xhc3NpZnlpbmcgJXNcbiIsIHR5cGVuYW1lKSk7CisKKyAgICBpZiAoICF0eXBlbmFtZSB8fCAqdHlwZW5hbWU9PSdcMCcgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfVU5LTk9XTjsKKworI2luY2x1ZGUgIm1vdW50cy5oIgorCisgICAgICAgLyoKKyAgICAgICAgKiBMaXN0IG9mIG1vdW50IHR5cGVzIGZyb20gPHN5cy9tb3VudC5oPgorICAgICAgICAqLworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9GRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX1VGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfQkVSS0VMRVk7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX05GUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9NRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX01GUzsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfTVNET1MpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX01TRE9TRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0ZBVDsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfQUZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9BRlM7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1PVU5UX0NEOTY2MCkgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSVNPOTY2MDsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU9VTlRfRVhUMkZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9FWFQyOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9OVEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9OVEZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9aRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX09USEVSOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNT1VOVF9BQ0ZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9PVEhFUjsKKworICAgICAgIC8qCisgICAgICAgICogTmV0QlNEIGFsc28gcmVjb2duaXNlcyB0aGUgZm9sbG93aW5nIGZpbGVzeXN0ZW0gdHlwZXM6CisgICAgICAgICogICAgIE1PVU5UX05VTEwKKyAgICAgICAgKiAgICAgTU9VTlRfT1ZFUkxBWQorICAgICAgICAqICAgICBNT1VOVF9VTUFQCisgICAgICAgICogICAgIE1PVU5UX1VOSU9OCisgICAgICAgICogICAgIE1PVU5UX0NGUy9DT0RBCisgICAgICAgICogICAgIE1PVU5UX0ZJTEVDT1JFCisgICAgICAgICogICAgIE1PVU5UX1NNQkZTCisgICAgICAgICogICAgIE1PVU5UX1BUWUZTCisgICAgICAgICogT3BlbkJTRCBhbHNvIHJlY29nbmlzZXMgdGhlIGZvbGxvd2luZyBmaWxlc3lzdGVtIHR5cGVzOgorICAgICAgICAqICAgICBNT1VOVF9MT0ZTCisgICAgICAgICogICAgIE1PVU5UX05DUEZTCisgICAgICAgICogICAgIE1PVU5UX1hGUworICAgICAgICAqICAgICBNT1VOVF9VREYKKyAgICAgICAgKiBCb3RoIG9mIHRoZW0gcmVjb2duaXNlIHRoZSBmb2xsb3dpbmcgZmlsZXN5c3RlbSB0eXBlczoKKyAgICAgICAgKiAgICAgTU9VTlRfTEZTCisgICAgICAgICogICAgIE1PVU5UX0ZERVNDCisgICAgICAgICogICAgIE1PVU5UX1BPUlRBTAorICAgICAgICAqICAgICBNT1VOVF9LRVJORlMKKyAgICAgICAgKiAgICAgTU9VTlRfUFJPQ0ZTCisgICAgICAgICogICAgIE1PVU5UX0FET1NGUworICAgICAgICAqCisgICAgICAgICogQWxsIG9mIHRoZXNlIGZpbGVzeXN0ZW1zIGFyZSBtYXBwZWQgdG8gTkVUU05NUF9GU19UWVBFX09USEVSCisgICAgICAgICogICBzbyB3aWxsIGJlIHBpY2tlZCB1cCBieSB0aGUgZm9sbG93aW5nIGRlZmF1bHQgYnJhbmNoLgorICAgICAgICAqLworICAgIGVsc2UKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX09USEVSOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2xvYWQoIHZvaWQgKQoreworICAgIGludCBuLCBpOworICAgIHN0cnVjdCBOU0ZTX1NUQVRGUyAqc3RhdHM7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3VycmVudGx5IG1vdW50ZWQgZmlsZXN5c3RlbXMuLi4KKyAgICAgKi8KKyAgICBuID0gTlNGU19HRVRGU1NUQVQoIE5VTEwsIDAsIDAgKTsKKyAgICBpZiAoIG49PTAgKQorICAgICAgICByZXR1cm47CisgICAgc3RhdHMgPSAoc3RydWN0IE5TRlNfU1RBVEZTICopbWFsbG9jKCBuICogc2l6ZW9mKCBzdHJ1Y3QgTlNGU19TVEFURlMgKSk7CisgICAgbiA9IE5TRlNfR0VURlNTVEFUKCBzdGF0cywgbiAqIHNpemVvZiggc3RydWN0IE5TRlNfU1RBVEZTICksIE1OVF9OT1dBSVQgKTsKKworICAgIC8qCisgICAgICogLi4uIGFuZCBpbnNlcnQgdGhpcyBpbnRvIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICBmb3IgKCBpPTA7IGk8bjsgaSsrICkgeworICAgICAgICBlbnRyeSA9IG5ldHNubXBfZnN5c19ieV9wYXRoKCBzdGF0c1tpXS5mX21udG9ubmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GU19GSU5EX0NSRUFURSApOworICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgc3RybGNweSggZW50cnktPnBhdGgsICAgc3RhdHNbaV0uZl9tbnRvbm5hbWUsICAgc2l6ZW9mKGVudHJ5LT5wYXRoKSk7CisgICAgICAgIGVudHJ5LT5wYXRoW3NpemVvZihlbnRyeS0+cGF0aCktMV0gPSAnXDAnOworICAgICAgICBzdHJsY3B5KCBlbnRyeS0+ZGV2aWNlLCBzdGF0c1tpXS5mX21udGZyb21uYW1lLCBzaXplb2YoZW50cnktPmRldmljZSkpOworICAgICAgICBlbnRyeS0+ZGV2aWNlW3NpemVvZihlbnRyeS0+ZGV2aWNlKS0xXSA9ICdcMCc7CisgICAgICAgIGVudHJ5LT51bml0cyA9IHN0YXRzW2ldLmZfYnNpemU7ICAgIC8qIG9yIGZfZnJzaXplICovCisgICAgICAgIGVudHJ5LT5zaXplICA9IHN0YXRzW2ldLmZfYmxvY2tzOworICAgICAgICBlbnRyeS0+dXNlZCAgPSAoc3RhdHNbaV0uZl9ibG9ja3MgLSBzdGF0c1tpXS5mX2JmcmVlKTsKKyAgICAgICAgLyogZW50cnktPmF2YWlsIGlzIGN1cnJlbnRseSB1bnNpZ25lZCwgc28gcHJvdGVjdCBhZ2FpbnN0IG5lZ2F0aXZlCisgICAgICAgICAqIHZhbHVlcyEKKyAgICAgICAgICogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHNpZ25lZCBmaWVsZC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzdGF0c1tpXS5mX2JhdmFpbCA8IDApCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSBzdGF0c1tpXS5mX2JhdmFpbDsKKyAgICAgICAgZW50cnktPmludW1zX3RvdGFsID0gc3RhdHNbaV0uZl9maWxlczsKKyAgICAgICAgZW50cnktPmludW1zX2F2YWlsID0gc3RhdHNbaV0uZl9mZnJlZTsKKworICAgICAgICBlbnRyeS0+dHlwZSA9IF9mc190eXBlKCBzdGF0c1tpXS5mX2ZzdHlwZW5hbWUgKTsKKyAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19BQ1RJVkU7CisKKyAgICAgICAgaWYgKCEgKHN0YXRzW2ldLk5TRlNfRkxBR1MgJiBNTlRfTE9DQUwgKSkgeworICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19SRU1PVEU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCAgc3RhdHNbaV0uTlNGU19GTEFHUyAmIE1OVF9SRE9OTFkgKSB7CisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JPTkxZOworICAgICAgICB9CisgICAgICAgIGlmICggIHN0YXRzW2ldLk5TRlNfRkxBR1MgJiBNTlRfUk9PVEZTICkgeworICAgICAgICAgICAgZW50cnktPmZsYWdzIHw9IE5FVFNOTVBfRlNfRkxBR19CT09UQUJMRTsKKyAgICAgICAgfQorICAgICAgICBuZXRzbm1wX2ZzeXNfY2FsY3VsYXRlMzIoZW50cnkpOworICAgIH0KKworICAgIGZyZWUoc3RhdHMpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGN0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmYmIwNjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50Y3RsLmMKQEAgLTAsMCArMSwxODIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NZU19NTlRDVExfSAorI2luY2x1ZGUgPHN5cy9tbnRjdGwuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1ZNT1VOVF9ICisjaW5jbHVkZSA8c3lzL3Ztb3VudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKworaW50CitfZnN5c19yZW1vdGUoIGNoYXIgKmRldmljZSwgaW50IHR5cGUsIGNoYXIgKmhvc3QgKQoreworICAgIGlmICgoIHR5cGUgPT0gTkVUU05NUF9GU19UWVBFX05GUykgfHwKKyAgICAgICAgKCB0eXBlID09IE5FVFNOTVBfRlNfVFlQRV9BRlMpKQorICAgICAgICByZXR1cm4gMTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAwOworfQorCitpbnQKK19mc3lzX3R5cGUoIGludCB0eXBlKQoreworICAgIERFQlVHTVNHVEwoKCJmc3lzOnR5cGUiLCAiQ2xhc3NpZnlpbmcgJWRcbiIsIHR5cGUpKTsKKworICAgIHN3aXRjaCAoIHR5cGUgKSB7CisgICAgICAgIGNhc2UgIE1OVF9BSVg6CisgICAgICAgIGNhc2UgIE1OVF9KRlM6CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0JFUktFTEVZOworCisgICAgICAgIGNhc2UgIE1OVF9DRFJPTToKKyAgICAgICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSVNPOTY2MDsKKworICAgICAgICBjYXNlICBNTlRfTkZTOgorICAgICAgICBjYXNlICBNTlRfTkZTMzoKKyAgICAgICAgY2FzZSAgTU5UX0FVVE9GUzoKKyAgICAgICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkZTOworCisgICAgLyoKKyAgICAgKiAgVGhlIGZvbGxvd2luZyBjb2RlIGNvdmVycyBzZWxlY3RlZCBmaWxlc3lzdGVtcworICAgICAqICAgIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSB0aGUgSFItVFlQRVMgZW51bWVyYXRpb25zLAorICAgICAqICAgIGJ1dCBzaG91bGQgc3RpbGwgYmUgbW9uaXRvcmVkLgorICAgICAqICBUaGVzZSBhcmUgYWxsIG1hcHBlZCBpbnRvIHR5cGUgIm90aGVyIgorICAgICAqCisgICAgICovICAgIAorI2lmZGVmIE1OVF9OQU1FRlMKKyAgICAgICAgY2FzZSBNTlRfTkFNRUZTOgorI2VuZGlmCisjaWZkZWYgTU5UX1BST0NGUworICAgICAgICBjYXNlIE1OVF9QUk9DRlM6CisjZW5kaWYKKyNpZmRlZiBNTlRfQUNGUworICAgICAgICBjYXNlIE1OVF9BQ0ZTOgorI2VuZGlmCisgICAgICAgIGNhc2UgTU5UX1NGUzoKKyAgICAgICAgY2FzZSBNTlRfQ0FDSEVGUzoKKyAgICAgICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfT1RIRVI7CisKKyAgICAvKiAgICAKKyAgICAgKiAgQWxsIG90aGVyIHR5cGVzIGFyZSBzaWxlbnRseSBza2lwcGVkCisgICAgICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0lHTk9SRTsKKyAgICB9CisgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9JR05PUkU7ICAvKiBOb3QgcmVhY2hlZCAqLworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2xvYWQoIHZvaWQgKQoreworICAgIGludCAgcmV0ICA9IDAsIGkgPSAwOworICAgIHVpbnQgc2l6ZSA9IDA7CisKKyAgICBzdHJ1Y3Qgdm1vdW50ICphaXhtbnQsICphaXhjdXJyOworICAgIGNoYXIgICAgICAgICAgKnBhdGg7CisgICAgc3RydWN0IHN0YXRmcyAgc3RhdF9idWY7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworICAgIGNoYXIgICAgICAgICAgICAgICB0bXBidWZbMTAyNF07CisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbW91bnRlZCBmaWxlc3lzdGVtcy4uLgorICAgICAqLworICAgIHJldCA9IG1udGN0bChNQ1RMX1FVRVJZLCBzaXplb2YodWludCksICh2b2lkICopICZzaXplKTsKKyAgICBpZiAoIHJldCAhPSAwIHx8IHNpemU8PTAgKSB7CisgICAgICAgIHNubXBfbG9nX3BlcnJvciggImluaXRpYWwgbW50Y3RsIGZhaWxlZCIgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGFpeG1udCA9IChzdHJ1Y3Qgdm1vdW50ICopbWFsbG9jKCBzaXplICk7CisgICAgaWYgKCBhaXhtbnQgPT0gTlVMTCApIHsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCAiY2Fubm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbW50Y3RsIGRhdGEiICk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZXQgPSBtbnRjdGwoTUNUTF9RVUVSWSwgc2l6ZSwgKHZvaWQgKikgYWl4bW50KTsKKyAgICBpZiAoIHJldCA8PSAwICkgeworICAgICAgICBmcmVlKGFpeG1udCk7CisgICAgICAgIHNubXBfbG9nX3BlcnJvciggIm1haW4gbW50Y3RsIGZhaWxlZCIgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBhaXhjdXJyID0gYWl4bW50OworCisKKyAgICAvKgorICAgICAqIC4uLiBhbmQgaW5zZXJ0IHRoaXMgaW50byB0aGUgZmlsZXN5c3RlbSBjb250YWluZXIuCisgICAgICovCisKKyAgICBmb3IgKGkgPSAwOworICAgICAgICAgaSA8IHJldDsKKyAgICAgICAgIGkrKywgYWl4Y3VyciA9IChzdHJ1Y3Qgdm1vdW50ICopICgoY2hhciopYWl4Y3VyciArIGFpeGN1cnItPnZtdF9sZW5ndGgpICkgeworCisgICAgICAgIHBhdGggPSB2bXQyZGF0YXB0ciggYWl4Y3VyciwgVk1UX1NUVUIgKTsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2ZzeXNfYnlfcGF0aCggcGF0aCwgTkVUU05NUF9GU19GSU5EX0NSRUFURSApOworICAgICAgICBpZiAoIWVudHJ5KSB7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmxjcHkoZW50cnktPnBhdGgsIHBhdGgsIHNpemVvZihlbnRyeS0+cGF0aCkpOworICAgICAgICBzdHJsY3B5KGVudHJ5LT5kZXZpY2UsIHZtdDJkYXRhcHRyKGFpeGN1cnIsIFZNVF9PQkpFQ1QpLAorICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+ZGV2aWNlKSk7CisgICAgICAgIGVudHJ5LT50eXBlICAgPSBfZnN5c190eXBlKCBhaXhjdXJyLT52bXRfZ2ZzdHlwZSApOworCisgICAgICAgIGlmICghKGVudHJ5LT50eXBlICYgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVCkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0FDVElWRTsKKworICAgICAgICBpZiAoIF9mc3lzX3JlbW90ZSggZW50cnktPmRldmljZSwgZW50cnktPnR5cGUsIHZtdDJkYXRhcHRyKCBhaXhjdXJyLCBWTVRfSE9TVCkgKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFOworICAgICAgICBpZiAoIGFpeGN1cnItPnZtdF9mbGFncyAmIE1OVF9SRUFET05MWSApCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX1JPTkxZOworICAgICAgICAvKgorICAgICAgICAgKiAgVGhlIHJvb3QgZGV2aWNlIGlzIHByZXN1bWFibHkgYm9vdGFibGUuCisgICAgICAgICAqICBPdGhlciBwYXJ0aXRpb25zIHByb2JhYmx5IGFyZW4ndCEKKyAgICAgICAgICovCisgICAgICAgIGlmICgoZW50cnktPnBhdGhbMF0gPT0gJy8nKSAmJiAoZW50cnktPnBhdGhbMV0gPT0gJ1wwJykpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0JPT1RBQkxFOworCisgICAgICAgIC8qCisgICAgICAgICAqICBYWFggLSBpZGVudGlmeSByZW1vdmVhYmxlIGRpc2tzCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqICBPcHRpb25hbGx5IHNraXAgcmV0cmlldmluZyBzdGF0aXN0aWNzIGZvciByZW1vdGUgbW91bnRzCisgICAgICAgICAqLworICAgICAgICBpZiAoIChlbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFKSAmJgorICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCBzdGF0ZnMoIGVudHJ5LT5wYXRoLCAmc3RhdF9idWYgKSA8IDAgKSB7CisgICAgICAgICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbm5vdCBzdGF0ZnMgJXMiLCBlbnRyeS0+cGF0aCApOworICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCB0bXBidWYgKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGVudHJ5LT51bml0cyA9ICBzdGF0X2J1Zi5mX2JzaXplOworICAgICAgICBlbnRyeS0+c2l6ZSAgPSAgc3RhdF9idWYuZl9ibG9ja3M7CisgICAgICAgIGVudHJ5LT51c2VkICA9IChzdGF0X2J1Zi5mX2Jsb2NrcyAtIHN0YXRfYnVmLmZfYmZyZWUpOworICAgICAgICBlbnRyeS0+YXZhaWwgPSAgc3RhdF9idWYuZl9iYXZhaWw7CisgICAgICAgIGVudHJ5LT5pbnVtc190b3RhbCA9IHN0YXRfYnVmLmZfZmlsZXM7CisgICAgICAgIGVudHJ5LT5pbnVtc19hdmFpbCA9IHN0YXRfYnVmLmZfZmZyZWU7CisgICAgICAgIG5ldHNubXBfZnN5c19jYWxjdWxhdGUzMihlbnRyeSk7CisgICAgfQorICAgIGZyZWUoYWl4bW50KTsKKyAgICBhaXhtbnQgID0gTlVMTDsKKyAgICBhaXhjdXJyID0gTlVMTDsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX21udGVudC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0ZDIzZGIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2ZzeXNfbW50ZW50LmMKQEAgLTAsMCArMSwyNjIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX01OVEVOVF9ICisjaW5jbHVkZSA8bW50ZW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NTlRUQUJfSAorI2luY2x1ZGUgPHN5cy9tbnR0YWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1ZGU19ICisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKyNpZmRlZiBzb2xhcmlzMgorI2RlZmluZSBfTkVUU05NUF9HRVRNTlRFTlRfVFdPX0FSR1MgMQorI2Vsc2UKKyN1bmRlZiAgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTIAorI2VuZGlmCisKKyAgICAvKgorICAgICAqIEhhbmRsZSBuYW1pbmcgZGlmZmVyZW5jZXMgYmV0d2VlbiBnZXRtbnRlbnQoKSBBUElzCisgICAgICovCisjaWZkZWYgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTCisgICAgLyogVHdvLWFyZ3VtZW50IGZvcm0gKFNvbGFyaXMpICovCisjZGVmaW5lIE5TRlNfTU5URU5UICAgc3RydWN0IG1udHRhYgorI2RlZmluZSBOU0ZTX1BBVEggICAgIG1udF9tb3VudHAKKyNkZWZpbmUgTlNGU19ERVYgICAgICBtbnRfc3BlY2lhbAorI2RlZmluZSBOU0ZTX1RZUEUgICAgIG1udF9mc3R5cGUKKworI2RlZmluZSBOU0ZTX1NUQVRGUyAgIHN0YXR2ZnMKKyNkZWZpbmUgTlNGU19TSVpFICAgICBmX2Zyc2l6ZQorCisjZWxzZQorICAgIC8qIE9uZS1hcmd1bWVudCBmb3JtIChldmVyeXRoaW5nIGVsc2U/KSAqLworI2RlZmluZSBOU0ZTX01OVEVOVCAgIHN0cnVjdCBtbnRlbnQKKyNkZWZpbmUgTlNGU19QQVRIICAgICBtbnRfZGlyCisjZGVmaW5lIE5TRlNfREVWICAgICAgbW50X2ZzbmFtZQorI2RlZmluZSBOU0ZTX1RZUEUgICAgIG1udF90eXBlCisKKyNkZWZpbmUgTlNGU19TVEFURlMgICBzdGF0ZnMKKyNkZWZpbmUgTlNGU19TSVpFICAgICBmX2JzaXplCisKKyNlbmRpZgorCitpbnQKK19mc3lzX3JlbW90ZSggY2hhciAqZGV2aWNlLCBpbnQgdHlwZSApCit7CisgICAgaWYgKCggdHlwZSA9PSBORVRTTk1QX0ZTX1RZUEVfTkZTKSB8fAorICAgICAgICAoIHR5cGUgPT0gTkVUU05NUF9GU19UWVBFX0FGUykpCisgICAgICAgIHJldHVybiAxOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7Cit9CisKK2ludAorX2ZzeXNfdHlwZSggY2hhciAqdHlwZW5hbWUgKQoreworICAgIERFQlVHTVNHVEwoKCJmc3lzOnR5cGUiLCAiQ2xhc3NpZnlpbmcgJXNcbiIsIHR5cGVuYW1lKSk7CisKKyAgICBpZiAoICF0eXBlbmFtZSB8fCAqdHlwZW5hbWU9PSdcMCcgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfVU5LTk9XTjsKKworI2luY2x1ZGUgIm1udHR5cGVzLmgiCisKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9GRlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0JFUktFTEVZOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1VGUykgKQorICAgICAgIHJldHVybiBfTkVUU05NUF9GU19UWVBFX1VGUzsgICAvKiBlaXRoZXIgTl9GU19UWVBFX0JFUktFTEVZIG9yIE5fRlNfVFlQRV9TWVNWICovCisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfU1lTVikgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfU1lTVjsKKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9QQykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9NU0RPUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfRkFUOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0hGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfSEZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX01GUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTUZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05URlMpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX05URlM7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfSVNPOTY2MCkgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9DRDk2NjApICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0lTTzk2NjA7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQ0RGUykgKQorICAgICAgIHJldHVybiBfTkVUU05NUF9GU19UWVBFX0NERlM7ICAgLyogZWl0aGVyIE5fRlNfVFlQRV9JU085NjYwIG9yIE5fRlNfVFlQRV9ST0NLUklER0UgKi8KKyAgICBlbHNlIGlmICggIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9IU0ZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9ST0NLUklER0U7CisgICAgZWxzZSBpZiAoICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfTkZTKSAgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9ORlMzKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05GUzQpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQ0lGUykgfHwgIC8qIGkuZS4gU01CIC0gPz8gKi8KKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9TTUJGUykgICAgLyogPz8gKi8gKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfTkZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX05DUEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9ORVRXQVJFOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0FGUykgKQorICAgICAgIHJldHVybiBORVRTTk1QX0ZTX1RZUEVfQUZTOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0VYVDIpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRVhUMykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9FWFQ0KSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0VYVDJGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9FWFQzRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfRVhUNEZTKSApCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9FWFQyOworICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0ZBVDMyKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1ZGQVQpICkKKyAgICAgICByZXR1cm4gTkVUU05NUF9GU19UWVBFX0ZBVDMyOworCisgICAgLyoKKyAgICAgKiAgVGhlIGZvbGxvd2luZyBjb2RlIGNvdmVycyBzZWxlY3RlZCBmaWxlc3lzdGVtcworICAgICAqICAgIHdoaWNoIGFyZSBub3QgY292ZXJlZCBieSB0aGUgSFItVFlQRVMgZW51bWVyYXRpb25zLAorICAgICAqICAgIGJ1dCBzaG91bGQgc3RpbGwgYmUgbW9uaXRvcmVkLgorICAgICAqICBUaGVzZSBhcmUgYWxsIG1hcHBlZCBpbnRvIHR5cGUgIm90aGVyIgorICAgICAqCisgICAgICogICAgKFRoZSBzeXN0ZW1zIGxpc3RlZCBhcmUgbm90IGZpeGVkIGluIHN0b25lLAorICAgICAqICAgICBidXQgYXJlIHNpbXBseSBoZXJlIHRvIGlsbHVzdHJhdGUgdGhlIHByaW5jaXBsZSEpCisgICAgICovICAgIAorICAgIGVsc2UgaWYgKCAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX01WRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfVE1QRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfR0ZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0dGUzIpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfWEZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0pGUykgfHwKKyAgICAgICAgICAgICAgIXN0cmNtcCh0eXBlbmFtZSwgTU5UVFlQRV9WWEZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX1JFSVNFUkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX09DRlMyKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0NWRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfU0lNRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfQlRSRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfWkZTKSB8fAorICAgICAgICAgICAgICAhc3RyY21wKHR5cGVuYW1lLCBNTlRUWVBFX0FDRlMpIHx8CisgICAgICAgICAgICAgICFzdHJjbXAodHlwZW5hbWUsIE1OVFRZUEVfTE9GUykpCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9PVEhFUjsKKworICAgIC8qICAgIAorICAgICAqICBBbGwgb3RoZXIgdHlwZXMgYXJlIHNpbGVudGx5IHNraXBwZWQKKyAgICAgKi8KKyAgICBlbHNlCisgICAgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9JR05PUkU7Cit9CisKK3ZvaWQKK25ldHNubXBfZnN5c19hcmNoX2luaXQoIHZvaWQgKQoreworICAgIHJldHVybjsKK30KKwordm9pZAorbmV0c25tcF9mc3lzX2FyY2hfbG9hZCggdm9pZCApCit7CisgICAgRklMRSAgICAgICAgICAgICAgKmZwPU5VTEw7CisjaWZkZWYgX05FVFNOTVBfR0VUTU5URU5UX1RXT19BUkdTCisgICAgc3RydWN0IG1udHRhYiAgICAgIG10bXA7CisgICAgc3RydWN0IG1udHRhYiAgICAgKm0gPSAmbXRtcDsKKyNlbHNlCisgICAgc3RydWN0IG1udGVudCAgICAgKm07CisjZW5kaWYKKyAgICBzdHJ1Y3QgTlNGU19TVEFURlMgc3RhdF9idWY7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworICAgIGNoYXIgICAgICAgICAgICAgICB0bXBidWZbMTAyNF07CisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50bHkgbW91bnRlZCBmaWxlc3lzdGVtcy4uLgorICAgICAqLworICAgIGZwID0gZm9wZW4oIEVUQ19NTlRUQUIsICJyIiApOyAgIC8qIE9SIHNldG1udGVudCgpPz8gKi8KKyAgICBpZiAoICFmcCApIHsKKyAgICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW5ub3Qgb3BlbiAlcyIsIEVUQ19NTlRUQUIgKTsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCB0bXBidWYgKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogLi4uIGFuZCBpbnNlcnQgdGhpcyBpbnRvIHRoZSBmaWxlc3lzdGVtIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICB3aGlsZSAKKyNpZmRlZiBfTkVUU05NUF9HRVRNTlRFTlRfVFdPX0FSR1MKKyAgICAgICAgICAoKGdldG1udGVudChmcCwgbSkpID09IDAgKQorI2Vsc2UKKyAgICAgICAgICAoKG0gPSBnZXRtbnRlbnQoZnApKSAhPSBOVUxMICkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2ZzeXNfYnlfcGF0aCggbS0+TlNGU19QQVRILCBORVRTTk1QX0ZTX0ZJTkRfQ1JFQVRFICk7CisgICAgICAgIGlmICghZW50cnkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgc3RybGNweShlbnRyeS0+cGF0aCwgbS0+TlNGU19QQVRILCBzaXplb2YoZW50cnktPnBhdGgpKTsKKyAgICAgICAgc3RybGNweShlbnRyeS0+ZGV2aWNlLCBtLT5OU0ZTX0RFViwgc2l6ZW9mKGVudHJ5LT5kZXZpY2UpKTsKKyAgICAgICAgZW50cnktPnR5cGUgPSBfZnN5c190eXBlKG0tPk5TRlNfVFlQRSk7CisgICAgICAgIGlmICghKGVudHJ5LT50eXBlICYgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVCkpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgfD0gTkVUU05NUF9GU19GTEFHX0FDVElWRTsKKworICAgICAgICBpZiAoIF9mc3lzX3JlbW90ZSggZW50cnktPmRldmljZSwgZW50cnktPnR5cGUgKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFOworI2lmIEhBVkVfSEFTTU5UT1BUCisgICAgICAgIGlmIChoYXNtbnRvcHQoIG0sICJybyIgKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfUk9OTFk7CisjZW5kaWYKKyAgICAgICAgLyoKKyAgICAgICAgICogIFRoZSByb290IGRldmljZSBpcyBwcmVzdW1hYmx5IGJvb3RhYmxlLgorICAgICAgICAgKiAgT3RoZXIgcGFydGl0aW9ucyBwcm9iYWJseSBhcmVuJ3QhCisgICAgICAgICAqCisgICAgICAgICAqICBYWFggLSB3aGF0IGFib3V0IC9ib290ID8/CisgICAgICAgICAqLworICAgICAgICBpZiAoKGVudHJ5LT5wYXRoWzBdID09ICcvJykgJiYKKyAgICAgICAgICAgIChlbnRyeS0+cGF0aFsxXSA9PSAnXDAnKSkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0ZTX0ZMQUdfQk9PVEFCTEU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIFhYWCAtIGlkZW50aWZ5IHJlbW92ZWFibGUgZGlza3MKKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogIE9wdGlvbmFsbHkgc2tpcCByZXRyaWV2aW5nIHN0YXRpc3RpY3MgZm9yIHJlbW90ZSBtb3VudHMKKyAgICAgICAgICovCisgICAgICAgIGlmICggKGVudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUpICYmCisgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUykpCisgICAgICAgICAgICBjb250aW51ZTsKKworI2lmZGVmIGlyaXg2CisgICAgICAgIGlmICggTlNGU19TVEFURlMoIGVudHJ5LT5wYXRoLCAmc3RhdF9idWYsIHNpemVvZihzdHJ1Y3Qgc3RhdGZzKSwgMCkgPCAwICkKKyNlbHNlCisgICAgICAgIGlmICggTlNGU19TVEFURlMoIGVudHJ5LT5wYXRoLCAmc3RhdF9idWYgKSA8IDAgKQorI2VuZGlmCisgICAgICAgIHsKKyAgICAgICAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiQ2Fubm90IHN0YXRmcyAlcyIsIGVudHJ5LT5wYXRoICk7CisgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIHRtcGJ1ZiApOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPnVuaXRzID0gIHN0YXRfYnVmLk5TRlNfU0laRTsKKyAgICAgICAgZW50cnktPnNpemUgID0gIHN0YXRfYnVmLmZfYmxvY2tzOworICAgICAgICBlbnRyeS0+dXNlZCAgPSAoc3RhdF9idWYuZl9ibG9ja3MgLSBzdGF0X2J1Zi5mX2JmcmVlKTsKKyAgICAgICAgLyogZW50cnktPmF2YWlsIGlzIGN1cnJlbnRseSB1bnNpZ25lZCwgc28gcHJvdGVjdCBhZ2FpbnN0IG5lZ2F0aXZlCisgICAgICAgICAqIHZhbHVlcyEKKyAgICAgICAgICogVGhpcyBzaG91bGQgYmUgY2hhbmdlZCB0byBhIHNpZ25lZCBmaWVsZC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChzdGF0X2J1Zi5mX2JhdmFpbCA8IDApCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSAwOworICAgICAgICBlbHNlCisgICAgICAgICAgICBlbnRyeS0+YXZhaWwgPSAgc3RhdF9idWYuZl9iYXZhaWw7CisgICAgICAgIGVudHJ5LT5pbnVtc190b3RhbCA9IHN0YXRfYnVmLmZfZmlsZXM7CisgICAgICAgIGVudHJ5LT5pbnVtc19hdmFpbCA9IHN0YXRfYnVmLmZfZmZyZWU7CisgICAgICAgIG5ldHNubXBfZnN5c19jYWxjdWxhdGUzMihlbnRyeSk7CisgICAgfQorICAgIGZjbG9zZSggZnAgKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9mc3lzX3ZvaWQuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c192b2lkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2VkYzM0NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvZnN5c192b2lkLmMKQEAgLTAsMCArMSwyNCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisKK2ludAorX2ZzeXNfcmVtb3RlKCBjaGFyICpkZXZpY2UsIGludCB0eXBlICkKK3sKKyAgICByZXR1cm4gMDsKK30KKworaW50CitfZnN5c190eXBlKCBjaGFyICp0eXBlbmFtZSApCit7CisgICAgcmV0dXJuIE5FVFNOTVBfRlNfVFlQRV9VTktOT1dOOworfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9pbml0KCB2b2lkICkKK3sgfQorCit2b2lkCituZXRzbm1wX2ZzeXNfYXJjaF9sb2FkKCB2b2lkICkKK3sgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmNkOTRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmMKQEAgLTAsMCArMSwzNDkgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisjaWZkZWYgSEFWRV9JTlRUWVBFU19ICisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNlbmRpZgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaHdfZnN5c19nZXRfY29udGFpbmVyLCBuZXRzbm1wX3VudXNlZCkKKworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgbmV0c25tcF9mc3lzX2FyY2hfbG9hZCggdm9pZCApOworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggdm9pZCApOworc3RhdGljIGludCAgX2ZzeXNfbG9hZCggdm9pZCApOworc3RhdGljIHZvaWQgX2ZzeXNfZnJlZSggdm9pZCApOworCitzdGF0aWMgaW50IF9mc3lzQXV0b1VwZGF0ZSA9IDA7ICAgLyogMCBtZWFucyBvbi1kZW1hbmQgY2FjaGluZyAqLworc3RhdGljIHZvaWQgX2ZzeXNfdXBkYXRlX3N0YXRzKCB1bnNpZ25lZCBpbnQsIHZvaWQqICk7CisKK25ldHNubXBfY2FjaGUgICAgICpfZnN5c19jYWNoZSAgICAgPSBOVUxMOworbmV0c25tcF9jb250YWluZXIgKl9mc3lzX2NvbnRhaW5lciA9IE5VTEw7CitzdGF0aWMgaW50ICAgICAgICAgX2ZzeXNfaWR4ICAgICAgID0gMDsKK3N0YXRpYyBuZXRzbm1wX2ZzeXNfaW5mbyAqIF9mc3lzX2NyZWF0ZV9lbnRyeSggdm9pZCApOworCit2b2lkIGluaXRfaHdfZnN5cyggdm9pZCApIHsKKworICAgIGlmICggX2ZzeXNfY29udGFpbmVyICkKKyAgICAgICAgcmV0dXJuOyAgIC8qIEFscmVhZHkgaW5pdGlhbGlzZWQgKi8KKworICAgIERFQlVHTVNHVEwoKCJmc3lzIiwgIkluaXRpYWxpc2UgSGFyZHdhcmUgRmlsZVN5c3RlbSBtb2R1bGVcbiIpKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIGEgY29udGFpbmVyIHRvIGhvbGQgdGhlIGxpc3Qgb2YgZmlsZXN5c3RlbXMKKyAgICAgKi8KKyAgICBfZnN5c19jb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJmc3lzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKCBOVUxMID09IF9mc3lzX2NvbnRhaW5lciApIHsKKyAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIGNvbnRhaW5lciBmb3IgZnN5c1RhYmxlIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV0c25tcF9mc3lzX2FyY2hfaW5pdCggKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgc2FtcGxpbmcgdGhlIGZpbGUgc3lzdGVtIGluZm9ybWF0aW9uIGF1dG9tYXRpY2FsbHksCisgICAgICogICB0aGVuIGFycmFuZ2UgZm9yIHRoaXMgdG8gYmUgdHJpZ2dlcmVkIHJlZ3VsYXJseS4KKyAgICAgKgorICAgICAqIElmIHdlJ3JlIG5vdCBzYW1wbGluZyB0aGVzZSB2YWx1ZXMgcmVndWxhcmx5LAorICAgICAqICAgY3JlYXRlIGEgc3VpdGFibGUgY2FjaGUgaGFuZGxlciBpbnN0ZWFkLgorICAgICAqLworICAgIGlmICggX2ZzeXNBdXRvVXBkYXRlICkgeworICAgICAgICBERUJVR01TR1RMKCgiZnN5cyIsICJSZWxvYWRpbmcgSGFyZHdhcmUgRmlsZVN5c3RlbXMgYXV0b21hdGljYWxseSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mc3lzQXV0b1VwZGF0ZSkpOworICAgICAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKCBfZnN5c0F1dG9VcGRhdGUsIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2ZzeXNfdXBkYXRlX3N0YXRzLCBOVUxMICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBfZnN5c19jYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKCA1LCBuZXRzbm1wX2ZzeXNfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mc3lzX2ZyZWUsIE5VTEwsIDAgKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImZzeXMiLCAiUmVsb2FkaW5nIEhhcmR3YXJlIEZpbGVTeXN0ZW1zIG9uLWRlbWFuZCAoJXApXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9mc3lzX2NhY2hlKSk7CisgICAgfQorfQorCit2b2lkIHNodXRkb3duX2h3X2ZzeXMoIHZvaWQgKSB7CisgICAgX2ZzeXNfZnJlZSgpOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSFdfRlNZU19HRVRfQ09OVEFJTkVSCisvKgorICogIFJldHVybiB0aGUgbWFpbiBmc3lzIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9mc3lzX2dldF9jb250YWluZXIoIHZvaWQgKSB7IHJldHVybiBfZnN5c19jb250YWluZXI7IH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hXX0ZTWVNfR0VUX0NPTlRBSU5FUiAqLworCisvKgorICogIFJldHVybiB0aGUgbWFpbiBmc3lzIGNhY2hlIGNvbnRyb2wgc3RydWN0dXJlIChpZiBkZWZpbmVkKQorICovCituZXRzbm1wX2NhY2hlICpuZXRzbm1wX2ZzeXNfZ2V0X2NhY2hlKCB2b2lkICkgeyByZXR1cm4gX2ZzeXNfY2FjaGU7IH0KKworCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciBhdXRvbWF0aWNhbGx5IHVwZGF0aW5nIGZzeXMgaW5mb3JtYXRpb24KKyAqLwordm9pZAorX2ZzeXNfdXBkYXRlX3N0YXRzKCB1bnNpZ25lZCBpbnQgY2xpZW50cmVnLCB2b2lkICpkYXRhICkKK3sKKyAgICBfZnN5c19mcmVlKCk7CisgICAgX2ZzeXNfbG9hZCgpOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciByZS1sb2FkaW5nIGZpbGVzeXN0ZW0gc3RhdGlzdGljcyBvbiBkZW1hbmQKKyAqLworaW50CituZXRzbm1wX2ZzeXNfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKQoreworICAgIC8qIFhYWCAtIGNoZWNrIGNhY2hlIHRpbWVsaW5lc3MgKi8KKyAgICByZXR1cm4gX2ZzeXNfbG9hZCgpOworfQorCisvKgorICogV3JhcHBlciByb3V0aW5lIGZvciByZWxlYXNpbmcgZXhwaXJlZCBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKKyAqLwordm9pZAorbmV0c25tcF9mc3lzX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICkKK3sKKyAgICBfZnN5c19mcmVlKCk7Cit9CisKKworLyoKKyAqIEFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBwcm9jZXNzaW5nIG9mIGxvYWRpbmcgZmlsZXN5c3RlbSBzdGF0aXN0aWNzCisgKi8KK3N0YXRpYyBpbnQKK19mc3lzX2xvYWQoIHZvaWQgKQoreworICAgIG5ldHNubXBfZnN5c19hcmNoX2xvYWQoKTsKKyAgICAvKiBYWFggLSB1cGRhdGUgY2FjaGUgdGltZXN0YW1wICovCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcmVsZWFzZSBvZiBmaWxlc3lzdGVtIHN0YXRpc3RpY3MKKyAqLworc3RhdGljIHZvaWQKK19mc3lzX2ZyZWUoIHZvaWQgKQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpzcDsKKworICAgIGZvciAoc3AgPSBDT05UQUlORVJfRklSU1QoIF9mc3lzX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX2ZzeXNfY29udGFpbmVyLCBzcCApKSB7CisKKyAgICAgICAgIHNwLT5mbGFncyAmPSB+TkVUU05NUF9GU19GTEFHX0FDVElWRTsKKyAgICB9Cit9CisKKworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfZmlyc3QoIHZvaWQgKSB7CisgICAgcmV0dXJuIENPTlRBSU5FUl9GSVJTVCggX2ZzeXNfY29udGFpbmVyICk7Cit9CituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2dldF9uZXh0KCBuZXRzbm1wX2ZzeXNfaW5mbyAqdGhpc19wdHIgKSB7CisgICAgcmV0dXJuIENPTlRBSU5FUl9ORVhUKCBfZnN5c19jb250YWluZXIsIHRoaXNfcHRyICk7Cit9CisKKy8qCisgKiBSZXRyaWV2ZSBhIGZpbGVzeXN0ZW0gZW50cnkgYmFzZWQgb24gdGhlIHBhdGggd2hlcmUgaXQgaXMgbW91bnRlZCwKKyAqICBvciAob3B0aW9uYWxseSkgaW5zZXJ0IGEgbmV3IG9uZSBpbnRvIHRoZSBjb250YWluZXIKKyAqLworbmV0c25tcF9mc3lzX2luZm8gKgorbmV0c25tcF9mc3lzX2J5X3BhdGgoIGNoYXIgKnBhdGgsIGludCBjcmVhdGVfdHlwZSApCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKnNwOworCisgICAgREVCVUdNU0dUTCgoImZzeXM6cGF0aCIsICJHZXQgZmlsZXN5c3RlbSBlbnRyeSAoJXMpXG4iLCBwYXRoKSk7CisKKyAgICAvKgorICAgICAqICBMb29rIHRocm91Z2ggdGhlIGxpc3QgZm9yIGEgbWF0Y2hpbmcgZW50cnkKKyAgICAgKi8KKyAgICAgICAgLyogLi4gb3IgdXNlIGEgc2Vjb25kYXJ5IGluZGV4IGNvbnRhaW5lciA/PyAqLworICAgIGZvciAoc3AgPSBDT05UQUlORVJfRklSU1QoIF9mc3lzX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX2ZzeXNfY29udGFpbmVyLCBzcCApKSB7CisKKyAgICAgICAgaWYgKCAhc3RyY21wKCBwYXRoLCBzcC0+cGF0aCApKQorICAgICAgICAgICAgcmV0dXJuIHNwOworICAgIH0KKworICAgIC8qCisgICAgICogTm90IGZvdW5kLi4uCisgICAgICovCisgICAgaWYgKCBjcmVhdGVfdHlwZSA9PSBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJmc3lzOnBhdGgiLCAiTm8gc3VjaCBmaWxlc3lzdGVtIGVudHJ5XG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogLi4uIHNvIGxldCdzIGNyZWF0ZSBhIG5ldyBvbmUKKyAgICAgKi8KKyAgICBzcCA9IF9mc3lzX2NyZWF0ZV9lbnRyeSgpOworICAgIGlmIChzcCkKKyAgICAgICAgc3RybGNweShzcC0+cGF0aCwgcGF0aCwgc2l6ZW9mKHNwLT5wYXRoKSk7CisgICAgcmV0dXJuIHNwOworfQorCisKKy8qCisgKiBSZXRyaWV2ZSBhIGZpbGVzeXN0ZW0gZW50cnkgYmFzZWQgb24gdGhlIGhhcmR3YXJlIGRldmljZSwKKyAqICAgKG9yIGV4cG9ydGVkIHBhdGggZm9yIHJlbW90ZSBtb3VudHMpLgorICogKE9wdGlvbmFsbHkpIGluc2VydCBhIG5ldyBvbmUgaW50byB0aGUgY29udGFpbmVyLgorICovCituZXRzbm1wX2ZzeXNfaW5mbyAqCituZXRzbm1wX2ZzeXNfYnlfZGV2aWNlKCBjaGFyICpkZXZpY2UsIGludCBjcmVhdGVfdHlwZSApCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKnNwOworCisgICAgREVCVUdNU0dUTCgoImZzeXM6ZGV2aWNlIiwgIkdldCBmaWxlc3lzdGVtIGVudHJ5ICglcylcbiIsIGRldmljZSkpOworCisgICAgLyoKKyAgICAgKiAgTG9vayB0aHJvdWdoIHRoZSBsaXN0IGZvciBhIG1hdGNoaW5nIGVudHJ5CisgICAgICovCisgICAgICAgIC8qIC4uIG9yIHVzZSBhIHNlY29uZGFyeSBpbmRleCBjb250YWluZXIgPz8gKi8KKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfZnN5c19jb250YWluZXIgKTsKKyAgICAgICAgIHNwOworICAgICAgICAgc3AgPSBDT05UQUlORVJfTkVYVCggIF9mc3lzX2NvbnRhaW5lciwgc3AgKSkgeworCisgICAgICAgIGlmICggIXN0cmNtcCggZGV2aWNlLCBzcC0+ZGV2aWNlICkpCisgICAgICAgICAgICByZXR1cm4gc3A7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3QgZm91bmQuLi4KKyAgICAgKi8KKyAgICBpZiAoIGNyZWF0ZV90eXBlID09IE5FVFNOTVBfRlNfRklORF9FWElTVCApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImZzeXM6ZGV2aWNlIiwgIk5vIHN1Y2ggZmlsZXN5c3RlbSBlbnRyeVxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIC4uLiBzbyBsZXQncyBjcmVhdGUgYSBuZXcgb25lCisgICAgICovCisgICAgc3AgPSBfZnN5c19jcmVhdGVfZW50cnkoKTsKKyAgICBpZiAoc3ApCisgICAgICAgIHN0cmxjcHkoc3AtPmRldmljZSwgZGV2aWNlLCBzaXplb2Yoc3AtPmRldmljZSkpOworICAgIHJldHVybiBzcDsKK30KKworCituZXRzbm1wX2ZzeXNfaW5mbyAqCitfZnN5c19jcmVhdGVfZW50cnkoIHZvaWQgKQoreworICAgIG5ldHNubXBfZnN5c19pbmZvICpzcDsKKworICAgIHNwID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF9mc3lzX2luZm8gKTsKKyAgICBpZiAoIHNwICkgeworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdXAgdGhlIGluZGV4IHZhbHVlLgorICAgICAgICAgKiAgCisgICAgICAgICAqIEFsbCB0aGlzIHRyb3VibGUsIGp1c3QgZm9yIGEgc2ltcGxlIGludGVnZXIuCisgICAgICAgICAqIFN1cmVseSB0aGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheT8KKyAgICAgICAgICovCisgICAgICAgIHNwLT5pZHgubGVuICA9IDE7CisgICAgICAgIHNwLT5pZHgub2lkcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG9pZCApOworICAgICAgICBzcC0+aWR4Lm9pZHNbMF0gPSArK19mc3lzX2lkeDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiZnN5czpuZXciLCAiQ3JlYXRlIGZpbGVzeXN0ZW0gZW50cnkgKGluZGV4ID0gJWQpXG4iLCBfZnN5c19pZHgpKTsKKyAgICBDT05UQUlORVJfSU5TRVJUKCBfZnN5c19jb250YWluZXIsIHNwICk7CisgICAgcmV0dXJuIHNwOworfQorCisKKy8qCisgKiAgQ29udmVydCBmc3lzIHNpemUgaW5mb3JtYXRpb24gdG8gMUsgdW5pdHMKKyAqICAgIChhdHRlbXB0aW5nIHRvIGF2b2lkIDMyLWJpdCBvdmVyZmxvdyEpCisgKi8KK3Vuc2lnbmVkIGxvbmcgbG9uZworX2ZzeXNfdG9fSyggdW5zaWduZWQgbG9uZyBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyB1bml0cyApCit7CisgICAgaW50IGZhY3RvciA9IDE7CisKKyAgICBpZiAoIHVuaXRzID09IDAgKSB7CisgICAgICAgIHJldHVybiAwOyAgICAvKiBYWFggKi8KKyAgICB9IGVsc2UgaWYgKCB1bml0cyA9PSAxMDI0ICkgeworICAgICAgICByZXR1cm4gc2l6ZTsKKyAgICB9IGVsc2UgaWYgKCB1bml0cyA9PSA1MTIgKSB7ICAgICAgLyogVG8gYXZvaWQgdW5uZWNlc3NhcnkgZGl2aXNpb24gKi8KKyAgICAgICAgcmV0dXJuIHNpemUvMjsKKyAgICB9IGVsc2UgaWYgKCB1bml0cyA8IDEwMjQgKSB7CisgICAgICAgIGZhY3RvciA9IDEwMjQgLyB1bml0czsgICAvKiBBc3N1bWluZyBwb3dlciBvZiB0d28gKi8KKyAgICAgICAgcmV0dXJuIChzaXplIC8gZmFjdG9yKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWN0b3IgPSB1bml0cyAvIDEwMjQ7ICAgLyogQXNzdW1pbmcgbXVsdGlwbGUgb2YgMUsgKi8KKyAgICAgICAgcmV0dXJuIChzaXplICogZmFjdG9yKTsKKyAgICB9Cit9CisKK3Vuc2lnbmVkIGxvbmcgbG9uZworbmV0c25tcF9mc3lzX3NpemVfdWxsKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIGlmICggIWYgKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gX2ZzeXNfdG9fSyggZi0+c2l6ZSwgZi0+dW5pdHMgKTsKK30KKwordW5zaWduZWQgbG9uZyBsb25nCituZXRzbm1wX2ZzeXNfdXNlZF91bGwoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgaWYgKCAhZiApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBfZnN5c190b19LKCBmLT51c2VkLCBmLT51bml0cyApOworfQorCit1bnNpZ25lZCBsb25nIGxvbmcKK25ldHNubXBfZnN5c19hdmFpbF91bGwoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgaWYgKCAhZiApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBfZnN5c190b19LKCBmLT5hdmFpbCwgZi0+dW5pdHMgKTsKK30KKworCitpbnQKK25ldHNubXBfZnN5c19zaXplKCBuZXRzbm1wX2ZzeXNfaW5mbyAqZikgeworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2ID0gbmV0c25tcF9mc3lzX3NpemVfdWxsKGYpOworICAgIHJldHVybiAoaW50KXY7Cit9CisKK2ludAorbmV0c25tcF9mc3lzX3VzZWQoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHYgPSBuZXRzbm1wX2ZzeXNfdXNlZF91bGwoZik7CisgICAgcmV0dXJuIChpbnQpdjsKK30KKworaW50CituZXRzbm1wX2ZzeXNfYXZhaWwoIG5ldHNubXBfZnN5c19pbmZvICpmKSB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHYgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGYpOworICAgIHJldHVybiAoaW50KXY7Cit9CisKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAweDdmZmZmZmZmCisjZW5kaWYKKworI2lmbmRlZiBQUkl1NjQKKyNkZWZpbmUgUFJJdTY0ICJsbHUiCisjZW5kaWYKKworLyogcmVjYWxjdWxhdGUgZi0+c2l6ZV8zMiwgdXNlZF8zMiwgYXZhaWxfMzIgYW5kIHVuaXRzXzMyIGZyb20gZi0+c2l6ZSAmIGNvbXAuKi8KK3ZvaWQKK25ldHNubXBfZnN5c19jYWxjdWxhdGUzMihuZXRzbm1wX2ZzeXNfaW5mbyAqZikKK3sKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgcyA9IGYtPnNpemU7CisgICAgdW5zaWduZWQgc2hpZnQgPSAwOworCisgICAgd2hpbGUgKHMgPiBJTlQzMl9NQVgpIHsKKyAgICAgICAgcyA9IHMgPj4gMTsKKyAgICAgICAgc2hpZnQrKzsKKyAgICB9CisKKyAgICBmLT5zaXplXzMyID0gczsKKyAgICBmLT51bml0c18zMiA9IGYtPnVuaXRzIDw8IHNoaWZ0OworICAgIGYtPmF2YWlsXzMyID0gZi0+YXZhaWwgPj4gc2hpZnQ7CisgICAgZi0+dXNlZF8zMiA9IGYtPnVzZWQgPj4gc2hpZnQ7CisKKyAgICBERUJVR01TR1RMKCgiZnN5cyIsICJSZXN1bHRzIG9mIDMyLWJpdCBjb252ZXJzaW9uOiBzaXplICUiIFBSSXU2NCAiIC0+ICVsdTsiCisJCSIgdW5pdHMgJSIgUFJJdTY0ICIgLT4gJWx1OyBhdmFpbCAlIiBQUkl1NjQgIiAtPiAlbHU7IgorICAgICAgICAgICAgICAgICIgdXNlZCAlIiBQUkl1NjQgIiAtPiAlbHVcbiIsCisJCSh1aW50NjRfdClmLT5zaXplLCBmLT5zaXplXzMyLCAodWludDY0X3QpZi0+dW5pdHMsIGYtPnVuaXRzXzMyLAorCQkodWludDY0X3QpZi0+YXZhaWwsIGYtPmF2YWlsXzMyLCAodWludDY0X3QpZi0+dXNlZCwgZi0+dXNlZF8zMikpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL2h3X2ZzeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWY5MGVmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9od19mc3lzLmgKQEAgLTAsMCArMSwyIEBACit2b2lkIGluaXRfaHdfZnN5cyh2b2lkKTsKK3ZvaWQgc2h1dGRvd25faHdfZnN5cyggdm9pZCApOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tbnR0eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZWQ0ZmIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9mc3lzL21udHR5cGVzLmgKQEAgLTAsMCArMSwxODcgQEAKKyNpZm5kZWYgX05FVFNOTVBfRlNZU19NTlRUWVBFU19ICisjZGVmaW5lIF9ORVRTTk1QX0ZTWVNfTU5UVFlQRVNfSAorLyoKKyAqICBTb21lIG1vdW50cyBjYW4gbWFwIHRvIG9uZSBvZiB0d28gaHJGUyB0eXBlcworICogICAgKGRlcGVuZGluZyBvbiBvdGhlciBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhlIHN5c3RlbSkKKyAqICBOb3RlIHdoaWNoIHNob3VsZCBiZSB1c2VkICpiZWZvcmUqIGRlZmluaW5nIGFueQorICogICAgdHlwZSB0b2tlbnMgd2hpY2ggbWF5IGJlIG1pc3NpbmcuCisgKi8KKworI2lmIChkZWZpbmVkKEJlcmtlbHlGUykgJiYgIWRlZmluZWQoTU5UVFlQRV9IRlMpKSB8fCBkZWZpbmVkKHNvbGFyaXMyKQorI2RlZmluZSAgX05FVFNOTVBfRlNfVFlQRV9VRlMgIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfVUZTICBORVRTTk1QX0ZTX1RZUEVfU1lTVgorI2VuZGlmCisKKyNpZmRlZiBSb2NrUmlkZ2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX1JPQ0tSSURHRQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX0lTTzk2NjAKKyNlbmRpZgorCisKKy8qCisgKiAgRW5zdXJlIGFsbCByZWNvZ25pc2VkIGZpbGVzeXN0ZW0gbW91bnQgdHlwZSB0b2tlbnMgYXJlCisgKiAgICBhdmFpbGFibGUgKGV2ZW4gb24gc3lzdGVtcyB3aGVyZSB0aGV5J3JlIG5vdCB1c2VkKQorICovCisjaWZuZGVmIE1OVFRZUEVfQUZTCisjZGVmaW5lIE1OVFRZUEVfQUZTICAgICAgImFmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NERlMKKyNkZWZpbmUgTU5UVFlQRV9DREZTICAgICAiY2RmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NEOTY2MAorI2RlZmluZSBNTlRUWVBFX0NEOTY2MCAgICJjZDk2NjAiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQyCisjZGVmaW5lIE1OVFRZUEVfRVhUMiAgICAgImV4dDIiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQzCisjZGVmaW5lIE1OVFRZUEVfRVhUMyAgICAgImV4dDMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQ0CisjZGVmaW5lIE1OVFRZUEVfRVhUNCAgICAgImV4dDQiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9FWFQyRlMKKyNkZWZpbmUgTU5UVFlQRV9FWFQyRlMgICAiZXh0MmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUM0ZTCisjZGVmaW5lIE1OVFRZUEVfRVhUM0ZTICAgImV4dDNmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDRGUworI2RlZmluZSBNTlRUWVBFX0VYVDRGUyAgICJleHQ0ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9GQVQzMgorI2RlZmluZSBNTlRUWVBFX0ZBVDMyICAgICJmYXQzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0ZGUworI2RlZmluZSBNTlRUWVBFX0ZGUyAgICAgICJmZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9IRlMKKyNkZWZpbmUgTU5UVFlQRV9IRlMgICAgICAiaGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSFNGUworI2RlZmluZSBNTlRUWVBFX0hTRlMgICAgICJoc2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSVNPOTY2MAorI2RlZmluZSBNTlRUWVBFX0lTTzk2NjAgICJpc285NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTUZTCisjZGVmaW5lIE1OVFRZUEVfTUZTICAgICAgIm1mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX01TRE9TCisjZGVmaW5lIE1OVFRZUEVfTVNET1MgICAgIm1zZG9zIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkNQRlMKKyNkZWZpbmUgTU5UVFlQRV9OQ1BGUyAgICAibmNwZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9ORlMKKyNkZWZpbmUgTU5UVFlQRV9ORlMgICAgICAibmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTMworI2RlZmluZSBNTlRUWVBFX05GUzMgICAgICJuZnMzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTNAorI2RlZmluZSBNTlRUWVBFX05GUzQgICAgICJuZnM0IgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTlRGUworI2RlZmluZSBNTlRUWVBFX05URlMgICAgICJudGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUEMKKyNkZWZpbmUgTU5UVFlQRV9QQyAgICAgICAicGMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9TTUJGUworI2RlZmluZSBNTlRUWVBFX1NNQkZTICAgICJzbWJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NJRlMKKyNkZWZpbmUgTU5UVFlQRV9DSUZTICAgICAiY2lmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NZU1YKKyNkZWZpbmUgTU5UVFlQRV9TWVNWICAgICAic3lzdiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1VGUworI2RlZmluZSBNTlRUWVBFX1VGUyAgICAgICJ1ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9WRkFUCisjZGVmaW5lIE1OVFRZUEVfVkZBVCAgICAgInZmYXQiCisjZW5kaWYKKworLyoKKyAqICBGaWxlIHN5c3RlbXMgdG8gbW9uaXRvciwgYnV0IG5vdCBjb3ZlcmVkIGJ5IEhSLVRZUEVTIGVudW1lcmF0aW9ucworICovCisjaWZuZGVmIE1OVFRZUEVfTVZGUworI2RlZmluZSBNTlRUWVBFX01WRlMgICAgICJtdmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVE1QRlMKKyNkZWZpbmUgTU5UVFlQRV9UTVBGUyAgICAidG1wZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9HRlMKKyNkZWZpbmUgTU5UVFlQRV9HRlMgICAgICAiZ2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfR0ZTMgorI2RlZmluZSBNTlRUWVBFX0dGUzIgICAgICJnZnMyIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfWEZTCisjZGVmaW5lIE1OVFRZUEVfWEZTICAgICAgInhmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0pGUworI2RlZmluZSBNTlRUWVBFX0pGUyAgICAgICJqZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9WWEZTCisjZGVmaW5lIE1OVFRZUEVfVlhGUyAgICAgICJ2eGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUkVJU0VSRlMKKyNkZWZpbmUgTU5UVFlQRV9SRUlTRVJGUyAicmVpc2VyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9MT0ZTCisjZGVmaW5lIE1OVFRZUEVfTE9GUyAgICAgImxvZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9PQ0ZTMgorI2RlZmluZSBNTlRUWVBFX09DRlMyICAgICJvY2ZzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0NWRlMKKyNkZWZpbmUgTU5UVFlQRV9DVkZTICAgICAiY3ZmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NJTUZTCisjZGVmaW5lIE1OVFRZUEVfU0lNRlMgICAgICJzaW1mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0JUUkZTCisjZGVmaW5lIE1OVFRZUEVfQlRSRlMgICAgICJidHJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1pGUworI2RlZmluZSBNTlRUWVBFX1pGUyAgICAgICAiemZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfQUNGUworI2RlZmluZSBNTlRUWVBFX0FDRlMgICAgICAiYWNmcyIKKyNlbmRpZgorCisvKgorICogIEZpbGUgc3lzdGVtcyB0byBza2lwCisgKiAgICAoUHJvYmFibHkgbm90IHN0cmljdGx5IG5lZWRlZCkKKyAqLworI2lmbmRlZiBNTlRUWVBFX0FQUAorI2RlZmluZSBNTlRUWVBFX0FQUCAgICAgICJhcHAiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9ERVZQVFMKKyNkZWZpbmUgTU5UVFlQRV9ERVZQVFMgICAiZGV2cHRzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSUdOT1JFCisjZGVmaW5lIE1OVFRZUEVfSUdOT1JFICAgImlnbm9yZSIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1BST0MKKyNkZWZpbmUgTU5UVFlQRV9QUk9DICAgICAicHJvYyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NZU0ZTCisjZGVmaW5lIE1OVFRZUEVfU1lTRlMgICAgInN5c2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVVNCRlMKKyNkZWZpbmUgTU5UVFlQRV9VU0JGUyAgICAidXNiZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9CSU5GTVQKKyNkZWZpbmUgTU5UVFlQRV9CSU5GTVQgICAiYmluZm10X21pc2MiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9SUENQSVBFCisjZGVmaW5lIE1OVFRZUEVfUlBDUElQRSAgInJwY19waXBlZnMiCisjZW5kaWYKKworI2VuZGlmIC8qIF9ORVRTTk1QX0ZTWVNfTU5UVFlQRVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvZnN5cy9tb3VudHMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWFiNjVkYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL2ZzeXMvbW91bnRzLmgKQEAgLTAsMCArMSwxNjUgQEAKKyNpZm5kZWYgX05FVFNOTVBfRlNZU19NT1VOVFNfSAorI2RlZmluZSBfTkVUU05NUF9GU1lTX01PVU5UU19ICisvKgorICogIFNvbWUgbW91bnRzIGNhbiBtYXAgdG8gb25lIG9mIHR3byBockZTIHR5cGVzCisgKiAgICAoZGVwZW5kaW5nIG9uIG90aGVyIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgc3lzdGVtKQorICogIE5vdGUgd2hpY2ggc2hvdWxkIGJlIHVzZWQgKmJlZm9yZSogZGVmaW5pbmcgYW55CisgKiAgICB0eXBlIHRva2VucyB3aGljaCBtYXkgYmUgbWlzc2luZy4KKyAqLworCisvKgorI2lmIChkZWZpbmVkKEJlcmtlbHlGUykgJiYgIWRlZmluZWQoTU5UVFlQRV9IRlMpKSB8fCBkZWZpbmVkKHNvbGFyaXMyKQorI2RlZmluZSAgX05FVFNOTVBfRlNfVFlQRV9VRlMgIE5FVFNOTVBfRlNfVFlQRV9CRVJLRUxFWQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfVUZTICBORVRTTk1QX0ZTX1RZUEVfU1lTVgorI2VuZGlmCisKKyNpZmRlZiBSb2NrUmlkZ2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX1JPQ0tSSURHRQorI2Vsc2UKKyNkZWZpbmUgIF9ORVRTTk1QX0ZTX1RZUEVfQ0RGUyAgTkVUU05NUF9GU19UWVBFX0lTTzk2NjAKKyNlbmRpZgorICovCisKKworLyoKKyAqICBFbnN1cmUgYWxsIHJlY29nbmlzZWQgZmlsZXN5c3RlbSBtb3VudCB0eXBlIHRva2VucyBhcmUKKyAqICAgIGF2YWlsYWJsZSAoZXZlbiBvbiBzeXN0ZW1zIHdoZXJlIHRoZXkncmUgbm90IHVzZWQpCisgKi8KKyNpZm5kZWYgTU9VTlRfRkZTCisjZGVmaW5lIE1PVU5UX0ZGUyAgICAiZmZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX05GUworI2RlZmluZSBNT1VOVF9ORlMgICAgIm5mcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9NRlMKKyNkZWZpbmUgTU9VTlRfTUZTICAgICJtZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfTVNET1MKKyNkZWZpbmUgTU9VTlRfTVNET1MgICJtc2RvcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9NU0RPU0ZTCisjZGVmaW5lIE1PVU5UX01TRE9TRlMgIm1zZG9zZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfQUZTCisjZGVmaW5lIE1PVU5UX0FGUyAgICAiYWZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX0NEOTY2MAorI2RlZmluZSBNT1VOVF9DRDk2NjAgImNkOTY2MCIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9FWFQyRlMKKyNkZWZpbmUgTU9VTlRfRVhUMkZTICJleHQyZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfTlRGUworI2RlZmluZSBNT1VOVF9OVEZTICAgIm50ZnMiCisjZW5kaWYKKyNpZm5kZWYgTU9VTlRfVUZTCisjZGVmaW5lIE1PVU5UX1VGUyAgICAidWZzIgorI2VuZGlmCisjaWZuZGVmIE1PVU5UX1pGUworI2RlZmluZSBNT1VOVF9aRlMgICAgInpmcyIKKyNlbmRpZgorI2lmbmRlZiBNT1VOVF9BQ0ZTCisjZGVmaW5lIE1PVU5UX0FDRlMgICAiYWNmcyIKKyNlbmRpZgorCisvKgorI2lmbmRlZiBNTlRUWVBFX0FGUworI2RlZmluZSBNTlRUWVBFX0FGUyAgICAgICJhZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DREZTCisjZGVmaW5lIE1OVFRZUEVfQ0RGUyAgICAgImNkZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9DRDk2NjAKKyNkZWZpbmUgTU5UVFlQRV9DRDk2NjAgICAiY2Q5NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMgorI2RlZmluZSBNTlRUWVBFX0VYVDIgICAgICJleHQyIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMworI2RlZmluZSBNTlRUWVBFX0VYVDMgICAgICJleHQzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfRVhUMkZTCisjZGVmaW5lIE1OVFRZUEVfRVhUMkZTICAgImV4dDJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0VYVDNGUworI2RlZmluZSBNTlRUWVBFX0VYVDNGUyAgICJleHQzZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9GQVQzMgorI2RlZmluZSBNTlRUWVBFX0ZBVDMyICAgICJmYXQzMiIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX0ZGUworI2RlZmluZSBNTlRUWVBFX0ZGUyAgICAgICJmZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9IRlMKKyNkZWZpbmUgTU5UVFlQRV9IRlMgICAgICAiaGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSFNGUworI2RlZmluZSBNTlRUWVBFX0hTRlMgICAgICJoc2ZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfSVNPOTY2MAorI2RlZmluZSBNTlRUWVBFX0lTTzk2NjAgICJpc285NjYwIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTUZTCisjZGVmaW5lIE1OVFRZUEVfTUZTICAgICAgIm1mcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX01TRE9TCisjZGVmaW5lIE1OVFRZUEVfTVNET1MgICAgIm1zZG9zIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkNQRlMKKyNkZWZpbmUgTU5UVFlQRV9OQ1BGUyAgICAibmNwZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9ORlMKKyNkZWZpbmUgTU5UVFlQRV9ORlMgICAgICAibmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTkZTMworI2RlZmluZSBNTlRUWVBFX05GUzMgICAgICJuZnMzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfTlRGUworI2RlZmluZSBNTlRUWVBFX05URlMgICAgICJudGZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUEMKKyNkZWZpbmUgTU5UVFlQRV9QQyAgICAgICAicGMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9SRUlTRVJGUworI2RlZmluZSBNTlRUWVBFX1JFSVNFUkZTICJyZWlzZXJmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1NNQkZTCisjZGVmaW5lIE1OVFRZUEVfU01CRlMgICAgInNtYmZzIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfU1lTVgorI2RlZmluZSBNTlRUWVBFX1NZU1YgICAgICJzeXN2IgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfVUZTCisjZGVmaW5lIE1OVFRZUEVfVUZTICAgICAgInVmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1ZGQVQKKyNkZWZpbmUgTU5UVFlQRV9WRkFUICAgICAidmZhdCIKKyNlbmRpZgorKi8KKworLyoKKyAqICBGaWxlIHN5c3RlbXMgdG8gc2tpcAorICovCisvKgorI2lmbmRlZiBNTlRUWVBFX0RFVlBUUworI2RlZmluZSBNTlRUWVBFX0RFVlBUUyAgICJkZXZwdHMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9JR05PUkUKKyNkZWZpbmUgTU5UVFlQRV9JR05PUkUgICAiaWdub3JlIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfUFJPQworI2RlZmluZSBNTlRUWVBFX1BST0MgICAgICJwcm9jIgorI2VuZGlmCisjaWZuZGVmIE1OVFRZUEVfU1lTRlMKKyNkZWZpbmUgTU5UVFlQRV9TWVNGUyAgICAic3lzZnMiCisjZW5kaWYKKyNpZm5kZWYgTU5UVFlQRV9UTVBGUworI2RlZmluZSBNTlRUWVBFX1RNUEZTICAgICJ0bXBmcyIKKyNlbmRpZgorI2lmbmRlZiBNTlRUWVBFX1VTQkZTCisjZGVmaW5lIE1OVFRZUEVfVVNCRlMgICAgInVzYmZzIgorI2VuZGlmCisqLworCisjZW5kaWYgLyogX05FVFNOTVBfRlNZU19NT1VOVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5LmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaAppbmRleCBjMDY3MGU0Li43ZTRlODhlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkuaApAQCAtMyw3ICszLDcgQEAKICNpZiBkZWZpbmVkKGxpbnV4KQogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eCkKIAotI2VsaWYgKGRlZmluZWQoZGFyd2luNykgfHwgZGVmaW5lZChkYXJ3aW44KSB8fCBkZWZpbmVkKGRhcndpbjkpKQorI2VsaWYgKGRlZmluZWQoZGFyd2luKSkKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luKQogCiAjZWxpZiAoZGVmaW5lZChmcmVlYnNkMikgfHwgZGVmaW5lZChmcmVlYnNkMykgfHwgZGVmaW5lZChmcmVlYnNkNCkgIHx8IGRlZmluZWQoZnJlZWJzZDUpfHwgZGVmaW5lZChmcmVlYnNkNikpCkBAIC0xMiw3ICsxMiw3IEBACiAjZWxpZiAoZGVmaW5lZChuZXRic2QpIHx8IGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChuZXRic2RlbGYpIHx8IGRlZmluZWQobmV0YnNkZWxmMil8fCBkZWZpbmVkKG5ldGJzZGVsZjMpIHx8IGRlZmluZWQob3BlbmJzZCkpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9tZW1vcnkvbWVtb3J5X25ldGJzZCkKIAotI2VsaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKQorI2VsaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiBjb25maWdfcmVxdWlyZShoYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeCkKIAogI2VsaWYgKGRlZmluZWQoc29sYXJpczIpKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L2h3X21lbS5jCmluZGV4IGIxOGE5YjguLjFmNDQ3NGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9od19tZW0uYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvaHdfbWVtLmMKQEAgLTMsMTQgKzMsMjcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhhcmR3YXJlX21lbW9yeSwgbmV0c25tcF91bnVzZWQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtZW1vcnlfZ2V0X2NhY2hlLCBoYXJkd2FyZV9tZW1vcnkpCisKIGV4dGVybiBOZXRzbm1wQ2FjaGVMb2FkIG5ldHNubXBfbWVtX2FyY2hfbG9hZDsKIAogbmV0c25tcF9tZW1vcnlfaW5mbyAqX21lbV9oZWFkICA9IE5VTEw7CiBuZXRzbm1wX2NhY2hlICAgICAgICpfbWVtX2NhY2hlID0gTlVMTDsKIAorI2lmZGVmIGRhcndpbgorLyogdGhlIGNvZGUgaW4gbWVtb3J5X2Rhcndpbi5jIGlzICp2ZXJ5KiBleHBlbnNpdmUgKi8KKyNkZWZpbmUJTUVNT1JZX0NBQ0hFX1NFQ09ORFMJMzAwCisjZWxzZQorI2RlZmluZQlNRU1PUllfQ0FDSEVfU0VDT05EUwk1CisjZW5kaWYKKwogdm9pZCBpbml0X2h3X21lbSggdm9pZCApIHsKICAgICBvaWQgbnNNZW1vcnlbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgODA3MiwgMSwgMzEgfTsKLSAgICBfbWVtX2NhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoIDUsIG5ldHNubXBfbWVtX2FyY2hfbG9hZCwgTlVMTCwKKyAgICBfbWVtX2NhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoIE1FTU9SWV9DQUNIRV9TRUNPTkRTLCBuZXRzbm1wX21lbV9hcmNoX2xvYWQsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc01lbW9yeSwgT0lEX0xFTkdUSChuc01lbW9yeSkpOwogfQogCkBAIC04Nyw5ICsxMDAsMTEgQEAKIAogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfR0VUX0NBQ0hFCiBuZXRzbm1wX2NhY2hlICpuZXRzbm1wX21lbW9yeV9nZXRfY2FjaGUoIHZvaWQgKSB7CiAgICAgcmV0dXJuIF9tZW1fY2FjaGU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfR0VUX0NBQ0hFICovCiAKIGludCBuZXRzbm1wX21lbW9yeV9sb2FkKCB2b2lkICkgewogICAgICByZXR1cm4gbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKCBfbWVtX2NhY2hlICk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9haXguYwppbmRleCAyNTE5ZGQ5Li5hZDI0NTI2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2FpeC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfYWl4LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvbWVtb3J5Lmg+CiAKICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgogI2luY2x1ZGUgPGxpYnBlcmZzdGF0Lmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZGFyd2luLmMKaW5kZXggNDkxNGYwYy4uNDQ2MmM0NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9kYXJ3aW4uYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2Rhcndpbi5jCkBAIC01LDEwICs1LDE0IEBACiAKICNpbmNsdWRlIDxkaXJlbnQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxtYWNoL21hY2hfaG9zdC5oPgorCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CiAKKyNpbmNsdWRlIDxtYWNoL21hY2guaD4KKyNpbmNsdWRlIDxtYWNoL21hY2hfdGltZS5oPgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8SU9LaXQvcHMvSU9Qb3dlclNvdXJjZXMuaD4KIAogLyoKICAqIFJldGFpbmVkIGZyb20gVUNEIGltcGxlbWVudGF0aW9uCkBAIC00NCw4ICs0OCw3IEBACiAgICAgIG1hY2hfcG9ydCA9IG1hY2hfaG9zdF9zZWxmKCk7CiAgICAgIGVycm9yID0gaG9zdF9wcm9jZXNzb3Jfc2V0cyhtYWNoX3BvcnQsICZwc2V0cywgJnBjbnQpOwogICAgICBpZiAoZXJyb3IgIT0gS0VSTl9TVUNDRVNTKSB7Ci0gICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksICJFcnJvciBpbiBob3N0X3Byb2Nlc3Nvcl9zZXRzKCk6ICVzXG4iLCBtYWNoX2Vycm9yX3N0cmluZyhlcnJvcikpOwotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoZXJybXNnKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkVycm9yIGluIGhvc3RfcHJvY2Vzc29yX3NldHMoKTogJXNcbiIsIG1hY2hfZXJyb3Jfc3RyaW5nKGVycm9yKSk7CiAgICAgICAgIHJldHVybigwKTsKICAgICAgfQogCkBAIC03NSw3ICs3OCwxMSBAQAogICAgICAgICAgICAgZm9yIChhZGRyZXNzID0gMDs7IGFkZHJlc3MgKz0gc2l6ZSkgewogICAgICAgICAgICAgICAgIC8qIEdldCBtZW1vcnkgcmVnaW9uLiAqLwogICAgICAgICAgICAgICAgIGNvdW50ID0gVk1fUkVHSU9OX0VYVEVOREVEX0lORk9fQ09VTlQ7IAotICAgICAgICAgICAgICAgIGlmICh2bV9yZWdpb24odGFza3Nbal0sICZhZGRyZXNzLCAmc2l6ZSwgVk1fUkVHSU9OX0VYVEVOREVEX0lORk8sICh2bV9yZWdpb25fZXh0ZW5kZWRfaW5mb190KSZpbmZvLCAmY291bnQsICZvYmplY3RfbmFtZSkgIT0gS0VSTl9TVUNDRVNTKSB7CisjaWYgZGVmaW5lZChfX3BwYzY0X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyAgICAgICAgICAgICAgICBpZiAodm1fcmVnaW9uXzY0KHRhc2tzW2pdLCAmYWRkcmVzcywgJnNpemUsIFZNX1JFR0lPTl9FWFRFTkRFRF9JTkZPLCAmaW5mbywgJmNvdW50LCAmb2JqZWN0X25hbWUpICE9IEtFUk5fU1VDQ0VTUykgeworI2Vsc2UKKyAgICAgICAgICAgICAgICBpZiAodm1fcmVnaW9uKHRhc2tzW2pdLCAmYWRkcmVzcywgJnNpemUsIFZNX1JFR0lPTl9FWFRFTkRFRF9JTkZPLCAmaW5mbywgJmNvdW50LCAmb2JqZWN0X25hbWUpICE9IEtFUk5fU1VDQ0VTUykgeworI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgbWVtb3J5IHJlZ2lvbnMuICovCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfZnJlZWJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMKaW5kZXggMDJlOGJlMi4uOGQxODY5OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9mcmVlYnNkLmMKQEAgLTI0LDcgKzI0LDcgQEAKIHF1YWRfdCAgICBzd2FwVXNlZDsKIHF1YWRfdCAgICBzd2FwRnJlZTsKIAotaW50IHN3YXBtb2RlKGxvbmcpOworc3RhdGljIGludCBzd2FwbW9kZShsb25nKTsKIAogCiAgICAgLyoKQEAgLTM2LDEwICszNiwxNSBAQAogICAgIGxvbmcgICAgICAgICAgIHBhZ2VzaXplOwogICAgIGludCAgICAgICAgICAgIG5zd2FwOwogCi0gICAgc3RydWN0IHZtbWV0ZXIgdm1lbTsKKyNpZiAhZGVmaW5lZChWTV9UT1RBTCkKKyAgICB1bnNpZ25lZCBpbnQgICBmcmVlX21lbTsKKyAgICBzaXplX3QgICAgICAgICBmcmVlX3NpemUgPSBzaXplb2YoZnJlZV9tZW0pOworICAgIHVuc2lnbmVkIGludCAgIG1lbV9wYWdlczsKKyNlbHNlCiAgICAgc3RydWN0IHZtdG90YWwgdG90YWw7CiAgICAgc2l6ZV90ICAgICAgICAgdG90YWxfc2l6ZSAgPSBzaXplb2YodG90YWwpOwotICAgIGludCAgICAgICAgICAgIHRvdGFsX21pYltdID0geyBDVExfVk0sIFZNX01FVEVSIH07CisgICAgaW50ICAgICAgICAgICAgdG90YWxfbWliW10gPSB7IENUTF9WTSwgVk1fVE9UQUwgfTsKKyNlbmRpZgogCiAgICAgdV9sb25nICAgICAgICAgcGh5c19tZW07CiAgICAgdV9sb25nICAgICAgICAgdXNlcl9tZW07CkBAIC01OCw3ICs2MywxMiBAQAogICAgIC8qCiAgICAgICogUmV0cmlldmUgdGhlIG1lbW9yeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSB1bmRlcmx5aW5nIE8vUy4uLgogICAgICAqLworI2lmICFkZWZpbmVkKFZNX1RPVEFMKQorICAgIHN5c2N0bGJ5bmFtZSgidm0uc3RhdHMudm0udl9mcmVlX2NvdW50IiwgJmZyZWVfbWVtLCAgICAmZnJlZV9zaXplLCAgICBOVUxMLCAwKTsKKyAgICBzeXNjdGxieW5hbWUoInZtLnN0YXRzLnZtLnZfcGFnZV9jb3VudCIsICZtZW1fcGFnZXMsICAgICZmcmVlX3NpemUsICAgIE5VTEwsIDApOworI2Vsc2UKICAgICBzeXNjdGwodG90YWxfbWliLCAgICAyLCAmdG90YWwsICAgICZ0b3RhbF9zaXplLCAgICBOVUxMLCAwKTsKKyNlbmRpZgogICAgIHN5c2N0bChwaHlzX21lbV9taWIsIDIsICZwaHlzX21lbSwgJm1lbV9zaXplLCAgICAgIE5VTEwsIDApOwogICAgIHN5c2N0bCh1c2VyX21lbV9taWIsIDIsICZ1c2VyX21lbSwgJm1lbV9zaXplLCAgICAgIE5VTEwsIDApOwogICAgIHN5c2N0bGJ5bmFtZSgidm0uc3RhdHMudm0udl9jYWNoZV9jb3VudCIsICAgICZjYWNoZV9jb3VudCwgJmNhY2hlX3NpemUsIE5VTEwsIDApOwpAQCAtODMsNyArOTMsMTEgQEAKICAgICAgICAgICAgICBtZW0tPmRlc2NyID0gc3RyZHVwKCJQaHlzaWNhbCBtZW1vcnkiKTsKICAgICAgICAgbWVtLT51bml0cyA9IHBhZ2VzaXplOwogICAgICAgICBtZW0tPnNpemUgID0gcGh5c19tZW0vcGFnZXNpemU7CisjaWYgIWRlZmluZWQoVk1fVE9UQUwpCisJbWVtLT5mcmVlICA9IGZyZWVfbWVtOworI2Vsc2UKICAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfZnJlZTsKKyNlbmRpZgogICAgIH0KIAogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9VU0VSTUVNLCAxICk7CkBAIC05Myw4ICsxMDcsMTMgQEAKICAgICAgICAgaWYgKCFtZW0tPmRlc2NyKQogICAgICAgICAgICAgIG1lbS0+ZGVzY3IgPSBzdHJkdXAoIlJlYWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKKyNpZiAhZGVmaW5lZChWTV9UT1RBTCkKKwltZW0tPnNpemUgID0gdXNlcl9tZW0vcGFnZXNpemU7CisJbWVtLT5mcmVlICA9IGZyZWVfbWVtOworI2Vsc2UKICAgICAgICAgbWVtLT5zaXplICA9IHRvdGFsLnRfcm07Ci0gICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2FybTsKKyAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfcm0gLSB0b3RhbC50X2FybTsKKyNlbmRpZgogICAgIH0KIAogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9WSVJUTUVNLCAxICk7CkBAIC0xMDQsMTAgKzEyMywxNiBAQAogICAgICAgICBpZiAoIW1lbS0+ZGVzY3IpCiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiVmlydHVhbCBtZW1vcnkiKTsKICAgICAgICAgbWVtLT51bml0cyA9IHBhZ2VzaXplOworI2lmICFkZWZpbmVkKFZNX1RPVEFMKQorCW1lbS0+c2l6ZSAgPSBtZW1fcGFnZXMrc3dhcFRvdGFsOworCW1lbS0+ZnJlZSAgPSBmcmVlX21lbStzd2FwRnJlZTsKKyNlbHNlCiAgICAgICAgIG1lbS0+c2l6ZSAgPSB0b3RhbC50X3ZtOwotICAgICAgICBtZW0tPmZyZWUgID0gdG90YWwudF9hdm07CisgICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X3ZtIC0gdG90YWwudF9hdm07CisjZW5kaWYKICAgICB9CiAKKyNpZiBkZWZpbmVkKFZNX1RPVEFMKQogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9TSEFSRUQsIDEgKTsKICAgICBpZiAoIW1lbSkgewogICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIk5vIFNoYXJlZCBNZW1vcnkgaW5mbyBlbnRyeSIpOwpAQCAtMTE2LDcgKzE0MSw3IEBACiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiU2hhcmVkIHZpcnR1YWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKICAgICAgICAgbWVtLT5zaXplICA9IHRvdGFsLnRfdm1zaHI7Ci0gICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2F2bXNocjsKKyAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfdm1zaHIgLSB0b3RhbC50X2F2bXNocjsKICAgICB9CiAKICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfU0hBUkVEMiwgMSApOwpAQCAtMTI3LDggKzE1Miw5IEBACiAgICAgICAgICAgICAgbWVtLT5kZXNjciA9IHN0cmR1cCgiU2hhcmVkIHJlYWwgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKICAgICAgICAgbWVtLT5zaXplICA9IHRvdGFsLnRfcm1zaHI7Ci0gICAgICAgIG1lbS0+ZnJlZSAgPSB0b3RhbC50X2FybXNocjsKKyAgICAgICAgbWVtLT5mcmVlICA9IHRvdGFsLnRfcm1zaHIgLSB0b3RhbC50X2FybXNocjsKICAgICB9CisjZW5kaWYKIAogICAgIG1lbSA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9DQUNIRUQsIDEgKTsKICAgICBpZiAoIW1lbSkgewpAQCAtMTM3LDggKzE2Myw4IEBACiAgICAgICAgIGlmICghbWVtLT5kZXNjcikKICAgICAgICAgICAgICBtZW0tPmRlc2NyID0gc3RyZHVwKCJDYWNoZWQgbWVtb3J5Iik7CiAgICAgICAgIG1lbS0+dW5pdHMgPSBwYWdlc2l6ZTsKLSAgICAgICAgbWVtLT5zaXplICA9IGNhY2hlX21heCArIGluYWN0X2NvdW50OwotICAgICAgICBtZW0tPmZyZWUgID0gY2FjaGVfbWF4IC0gY2FjaGVfY291bnQ7CisgICAgICAgIG1lbS0+c2l6ZSAgPSBjYWNoZV9jb3VudDsKKyAgICAgICAgbWVtLT5mcmVlICA9IDA7CiAgICAgfQogCiAgICAgbnN3YXAgPSBzd2FwbW9kZShwYWdlc2l6ZSk7CkBAIC0xODEsNyArMjA3LDcgQEAKICAqIFRoaXMgaXMganVzdCB3YXkgdG9vIHVnbHkgOykgCiAgKi8KIAotaW50CitzdGF0aWMgaW50CiBzd2FwbW9kZShsb25nIHBhZ2VzaXplKQogewogICAgIHN0cnVjdCBleHRlbnNpYmxlIGV4dDsKQEAgLTIxMiwyMiArMjM4LDIxIEBACiAKICNpbmNsdWRlIDxzeXMvY29uZi5oPgogCi1pbnQKK2V4dGVybiBrdm1fdCAqa2Q7CisKK3N0YXRpYyBpbnQKIHN3YXBtb2RlKGxvbmcgcGFnZXNpemUpCiB7CiAgICAgaW50ICAgICAgICAgICAgIGksIG47Ci0gICAgc3RhdGljIGt2bV90ICAgKmtkID0gTlVMTDsKICAgICBzdHJ1Y3Qga3ZtX3N3YXAga3N3YXBbMTZdOwogICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbTsKICAgICBjaGFyIGJ1ZlsxMDI0XTsKIAotICAgIGlmIChrZCA9PSBOVUxMKQotICAgICAgICBrZCA9IGt2bV9vcGVuZmlsZXMoTlVMTCwgTlVMTCwgTlVMTCwgT19SRE9OTFksIE5VTEwpOwogICAgIG4gPSBrdm1fZ2V0c3dhcGluZm8oa2QsIGtzd2FwLCBzaXplb2Yoa3N3YXApIC8gc2l6ZW9mKGtzd2FwWzBdKSwgMCk7CiAKICAgICBzd2FwVXNlZCA9IHN3YXBUb3RhbCA9IHN3YXBGcmVlID0gMDsKIAotICAgIGlmICggbiA+IDEgKSB7CisgICAgaWYgKCBuID4gMCApIHsKICAgICAgICAgLyoKICAgICAgICAgICogSWYgdGhlcmUgYXJlIG11bHRpcGxlIHN3YXAgZGV2aWNlcywgdGhlbiByZWNvcmQKICAgICAgICAgICogICB0aGUgc3RhdGlzdGljcyBmb3IgZWFjaCBvbmUgc2VwYXJhdGVseS4uLgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9saW51eC5jCmluZGV4IDM2ZDQzMWUuLjhjMTg5YzUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL21lbW9yeS9tZW1vcnlfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X2xpbnV4LmMKQEAgLTQzLDcgKzQzLDcgQEAKICAgICB9CiAgICAgaWYgKGJzaXplID09IDApIHsKICAgICAgICAgYnNpemUgPSBNRU1JTkZPX0lOSVRfU0laRTsKLSAgICAgICAgYnVmZiA9IG1hbGxvYyhic2l6ZSsxKTsKKyAgICAgICAgYnVmZiA9IChjaGFyKiltYWxsb2MoYnNpemUrMSk7CiAgICAgICAgIGlmIChOVUxMID09IGJ1ZmYpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtYWxsb2MgZmFpbGVkXG4iKTsKICAgICAgICAgICAgIGNsb3NlKHN0YXRmZCk7CkBAIC01MSw3ICs1MSw3IEBACiAgICAgICAgIH0KICAgICB9CiAgICAgd2hpbGUgKChieXRlc19yZWFkID0gcmVhZChzdGF0ZmQsIGJ1ZmYsIGJzaXplKSkgPT0gYnNpemUpIHsKLSAgICAgICAgYiA9IHJlYWxsb2MoYnVmZiwgYnNpemUgKyBNRU1JTkZPX1NURVBfU0laRSArIDEpOworICAgICAgICBiID0gKGNoYXIqKXJlYWxsb2MoYnVmZiwgYnNpemUgKyBNRU1JTkZPX1NURVBfU0laRSArIDEpOwogICAgICAgICBpZiAoTlVMTCA9PSBiKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWFsbG9jIGZhaWxlZFxuIik7CiAgICAgICAgICAgICBjbG9zZShzdGF0ZmQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvbWVtb3J5L21lbW9yeV9zb2xhcmlzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYwppbmRleCAzZGZmZjhiLi40MmYyMDNlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYworKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9tZW1vcnkvbWVtb3J5X3NvbGFyaXMuYwpAQCAtMTI5LDcgKzEyOSw3IEBACiAgICAgY2hhciBidWZbMTAyNF07CiAKICAgICBudW0gPSBzd2FwY3RsKFNDX0dFVE5TV1AsIDApOwotICAgIHMgPSBtYWxsb2MobnVtICogc2l6ZW9mKHN3YXBlbnRfdCkgKyBzaXplb2Yoc3RydWN0IHN3YXB0YWJsZSkpOworICAgIHMgPSAoc3dhcHRibF90KiltYWxsb2MobnVtICogc2l6ZW9mKHN3YXBlbnRfdCkgKyBzaXplb2Yoc3RydWN0IHN3YXB0YWJsZSkpOwogICAgIGlmICghcykKICAgICAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4ZDkxNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMuaApAQCAtMCwwICsxLDE3IEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMpCisKKyNpZiBkZWZpbmVkKHNvbGFyaXMyKQorIyBpZiBkZWZpbmVkKEhBVkVfUElDTF9IKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzKQorIyBlbHNlCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2tzdGF0X3NlbnNvcnMpCisjIGVuZGlmCisjZWxzZQorIyAgaWYgZGVmaW5lZChORVRTTk1QX1VTRV9TRU5TT1JTX1YzKQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMpCisjICBlbHNlCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192MikKKyMgIGVuZGlmCisjZW5kaWYKKworLyogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzKSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDI1NTVkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmMKQEAgLTAsMCArMSw2MCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisKKwordm9pZCBuZXRzbm1wX3NlbnNvcl9hcmNoX2luaXQoIHZvaWQgKSB7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBEdW1teSBTZW5zb3JzIG1vZHVsZVxuIikpOworfQorCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICB0aW1lX3Qgbm93OworICAgIHN0cnVjdCB0bSAgICAgICAgICAgICAgICAgICp0bTsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisKKyAgICB0aW1lKCZub3cpOworICAgIHRtID0gbG9jYWx0aW1lKCZub3cpOworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJSZWxvYWQgRHVtbXkgU2Vuc29ycyBtb2R1bGVcbiIpKTsKKworICAgIC8qIEZpcnN0IHBzZXVkby1zZW5zb3IgLSBzbG93bHktcmlzaW5nIHRlbXBlcmF0dXJlICovCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIm1pbnV0ZSIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUgKTsKKyAgICBzcC0+dmFsdWUgPSB0bS0+dG1fbWluOworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIk1pbnV0ZS1iYXNlZCBwc2V1ZG8tc2Vuc29yIC0gc2xvd2x5LXJpc2luZyB0ZW1wZXJhdHVyZSIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIC8qIFNlY29uZCBwc2V1ZG8tc2Vuc29yIC0gcXVpY2tseS1yaXNpbmcgdGVtcGVyYXR1cmUgKi8KKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAic2Vjb25kIiwgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV9zZWM7CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiU2Vjb25kLWJhc2VkIHBzZXVkby1zZW5zb3IgLSBxdWlja2x5LXJpc2luZyB0ZW1wZXJhdHVyZSIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIC8qIFRoaXJkIHBzZXVkby1zZW5zb3IgLSBhbm51YWwgZmFuIHNwZWVkICovCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggInllYXIiLCBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV95ZWFyICsgMTkwMDsKKyAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTYsICJSUE0gcHNldWRvLXNlbnNvciAtIGFubnVhbCBmYW4gc3BlZWQiICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICAvKiBGb3VydGggcHNldWRvLXNlbnNvciAtIGRhaWx5IHZvbHRhZ2UgKi8KKyAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAiZGF5IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICk7CisgICAgc3AtPnZhbHVlID0gdG0tPnRtX21kYXktMjA7CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiRGF5LWJhc2VkIHBzZXVkby1zZW5zb3IgLSBwb3NpdGl2ZSBvciBuZWdhdGl2ZSB2b2x0YWdlIiApOworICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworCisgICAgLyogRmlmdGggcHNldWRvLXNlbnNvciAtIG1vbnRobHkgdm9sdGFnZSAqLworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJtb250aCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV9tb247CisgICAgc25wcmludGYoIHNwLT5kZXNjciwgMjU2LCAiTW9udGgtYmFzZWQgcHNldWRvLXNlbnNvciAtIHBvc2l0aXZlIHZvbHRhZ2UiICk7CisgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisKKyAgICAvKiBTaXh0aCBwc2V1ZG8tc2Vuc29yIC0gYW5udWFsIGRhaWx5IHNvbWV0aGluZyAqLworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJ5ZGF5IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUiApOworICAgIHNwLT52YWx1ZSA9IHRtLT50bV95ZGF5OworICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NiwgIkRheS1iYXNlZCBwc2V1ZG8tc2Vuc29yIC0gYW5udWFsIHNvbWV0aGluZyIgKTsKKyAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2R1bW15X3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9kdW1teV9zZW5zb3JzLmgKQEAgLTAsMCArMSBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTAxNjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzLmMKQEAgLTAsMCArMSwxODkgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorCisKK2V4dGVybiBOZXRzbm1wQ2FjaGVMb2FkIG5ldHNubXBfc2Vuc29yX2FyY2hfbG9hZDsKK2V4dGVybiB2b2lkICAgICAgICAgICAgIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApOworc3RhdGljIGludCAgX3NlbnNvcl9sb2FkKCB2b2lkICk7CitzdGF0aWMgdm9pZCBfc2Vuc29yX2ZyZWUoIHZvaWQgKTsKKworc3RhdGljIGludCBfc2Vuc29yQXV0b1VwZGF0ZSA9IDA7ICAgLyogMCBtZWFucyBvbi1kZW1hbmQgY2FjaGluZyAqLworc3RhdGljIHZvaWQgX3NlbnNvcl91cGRhdGVfc3RhdHMoIHVuc2lnbmVkIGludCwgdm9pZCogKTsKKworbmV0c25tcF9jYWNoZSAgICAgKl9zZW5zb3JfY2FjaGUgICAgID0gTlVMTDsKK25ldHNubXBfY29udGFpbmVyICpfc2Vuc29yX2NvbnRhaW5lciA9IE5VTEw7CitzdGF0aWMgaW50ICAgICAgICAgX3NlbnNvcl9pZHggICAgICAgPSAwOworCit2b2lkIGluaXRfaHdfc2Vuc29ycyggdm9pZCApIHsKKworICAgIGlmICggX3NlbnNvcl9jb250YWluZXIgKQorICAgICAgICByZXR1cm47ICAgLyogQWxyZWFkeSBpbml0aWFsaXNlZCAqLworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnMiLCAiSW5pdGlhbGlzZSBIYXJkd2FyZSBTZW5zb3JzIG1vZHVsZVxuIikpOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgYSBjb250YWluZXIgdG8gaG9sZCB0aGUgYmFzaWMgbGlzdCBvZiBzZW5zb3JzCisgICAgICogVGhlIGZvdXIgTE0tU0VOU09SLU1JQiBjb250YWluZXJzIHdpbGwgYmUgY3JlYXRlZCBpbgorICAgICAqICB0aGUgcmVsZXZhbnQgaW5pdGlhbGlzYXRpb24gcm91dGluZShzKQorICAgICAqLworICAgIF9zZW5zb3JfY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgic2Vuc29yVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKCBOVUxMID09IF9zZW5zb3JfY29udGFpbmVyICkgeworICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgImZhaWxlZCB0byBjcmVhdGUgY29udGFpbmVyIGZvciBzZW5zb3JUYWJsZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggKTsKKworICAgIC8qCisgICAgICogSWYgd2UncmUgc2FtcGxpbmcgdGhlIHNlbnNvciBpbmZvcm1hdGlvbiBhdXRvbWF0aWNhbGx5LAorICAgICAqICAgdGhlbiBhcnJhbmdlIGZvciB0aGlzIHRvIGJlIHRyaWdnZXJlZCByZWd1bGFybHkuCisgICAgICoKKyAgICAgKiBJZiB3ZSdyZSBub3Qgc2FtcGxpbmcgdGhlc2UgdmFsdWVzIHJlZ3VsYXJseSwKKyAgICAgKiAgIGNyZWF0ZSBhIHN1aXRhYmxlIGNhY2hlIGhhbmRsZXIgaW5zdGVhZC4KKyAgICAgKi8KKyAgICBpZiAoIF9zZW5zb3JBdXRvVXBkYXRlICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29ycyIsICJSZWxvYWRpbmcgSGFyZHdhcmUgU2Vuc29ycyBhdXRvbWF0aWNhbGx5ICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvckF1dG9VcGRhdGUpKTsKKyAgICAgICAgc25tcF9hbGFybV9yZWdpc3RlciggX3NlbnNvckF1dG9VcGRhdGUsIFNBX1JFUEVBVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvcl91cGRhdGVfc3RhdHMsIE5VTEwgKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIF9zZW5zb3JfY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSggNSwgbmV0c25tcF9zZW5zb3JfbG9hZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NlbnNvcl9mcmVlLCBOVUxMLCAwICk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzIiwgIlJlbG9hZGluZyBIYXJkd2FyZSBTZW5zb3JzIG9uLWRlbWFuZCAoJXApXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfY2FjaGUpKTsKKyAgICB9Cit9CisKK3ZvaWQgc2h1dGRvd25faHdfc2Vuc29ycyggdm9pZCApIHsKKyAgICBfc2Vuc29yX2ZyZWUoKTsKK30KKworLyoKKyAqICBSZXR1cm4gdGhlIG1haW4gc2Vuc29yIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lciAqZ2V0X3NlbnNvcl9jb250YWluZXIoIHZvaWQgKSB7IHJldHVybiBfc2Vuc29yX2NvbnRhaW5lcjsgfQorCisvKgorICogIFJldHVybiB0aGUgbWFpbiBzZW5zb3IgY2FjaGUgY29udHJvbCBzdHJ1Y3R1cmUgKGlmIGRlZmluZWQpCisgKi8KK25ldHNubXBfY2FjaGUgKmdldF9zZW5zb3JfY2FjaGUoIHZvaWQgKSB7IHJldHVybiBfc2Vuc29yX2NhY2hlOyB9CisKKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgYXV0b21hdGljYWxseSB1cGRhdGluZyBzZW5zb3Igc3RhdGlzdGljcworICovCit2b2lkCitfc2Vuc29yX3VwZGF0ZV9zdGF0cyggdW5zaWduZWQgaW50IGNsaWVudHJlZywgdm9pZCAqZGF0YSApCit7CisgICAgX3NlbnNvcl9mcmVlKCk7CisgICAgX3NlbnNvcl9sb2FkKCk7Cit9CisKKy8qCisgKiBXcmFwcGVyIHJvdXRpbmUgZm9yIHJlLWxvYWRpbmcgc2Vuc29yIHN0YXRpc3RpY3Mgb24gZGVtYW5kCisgKi8KK2ludAorbmV0c25tcF9zZW5zb3JfbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKQoreworICAgIHJldHVybiBfc2Vuc29yX2xvYWQoKTsKK30KKworLyoKKyAqIFdyYXBwZXIgcm91dGluZSBmb3IgcmVsZWFzaW5nIGV4cGlyZWQgc2Vuc29yIHN0YXRpc3RpY3MKKyAqLwordm9pZAorbmV0c25tcF9zZW5zb3JfZnJlZSggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKmRhdGEgKQoreworICAgIF9zZW5zb3JfZnJlZSgpOworfQorCisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcHJvY2Vzc2luZyBvZiBsb2FkaW5nIHNlbnNvciBzdGF0aXN0aWNzCisgKi8KK3N0YXRpYyBpbnQKK19zZW5zb3JfbG9hZCggdm9pZCApCit7CisgICAgbmV0c25tcF9zZW5zb3JfYXJjaF9sb2FkKCBOVUxMLCBOVUxMICk7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBBcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgcmVsZWFzZSBvZiBzZW5zb3Igc3RhdGlzdGljcworICovCitzdGF0aWMgdm9pZAorX3NlbnNvcl9mcmVlKCB2b2lkICkKK3sKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICpzcDsKKworICAgIGZvciAoc3AgPSBDT05UQUlORVJfRklSU1QoIF9zZW5zb3JfY29udGFpbmVyICk7CisgICAgICAgICBzcDsKKyAgICAgICAgIHNwID0gQ09OVEFJTkVSX05FWFQoICBfc2Vuc29yX2NvbnRhaW5lciwgc3AgKSkgeworCisgICAgICAgICBzcC0+ZmxhZ3MgJj0gfiBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICB9Cit9CisKKworLyoKKyAqIFJldHJpZXZlIGEgc2Vuc29yIGVudHJ5IGJ5IG5hbWUsCisgKiAgb3IgKG9wdGlvbmFsbHkpIGluc2VydCBhIG5ldyBvbmUgaW50byB0aGUgY29udGFpbmVyCisgKi8KK25ldHNubXBfc2Vuc29yX2luZm8gKgorc2Vuc29yX2J5X25hbWUoIGNvbnN0IGNoYXIgKm5hbWUsIGludCBjcmVhdGVfdHlwZSApCit7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3A7CisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczpuYW1lIiwgIkdldCBzZW5zb3IgZW50cnkgKCVzKVxuIiwgbmFtZSkpOworCisgICAgLyoKKyAgICAgKiAgTG9vayB0aHJvdWdoIHRoZSBsaXN0IGZvciBhIG1hdGNoaW5nIGVudHJ5CisgICAgICovCisgICAgICAgIC8qIC4uIG9yIHVzZSBhIHNlY29uZGFyeSBpbmRleCBjb250YWluZXIgPz8gKi8KKyAgICBmb3IgKHNwID0gQ09OVEFJTkVSX0ZJUlNUKCBfc2Vuc29yX2NvbnRhaW5lciApOworICAgICAgICAgc3A7CisgICAgICAgICBzcCA9IENPTlRBSU5FUl9ORVhUKCAgX3NlbnNvcl9jb250YWluZXIsIHNwICkpIHsKKworICAgICAgICBpZiAoICFzdHJjbXAoIG5hbWUsIHNwLT5uYW1lICkpCisgICAgICAgICAgICByZXR1cm4gc3A7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBOb3QgZm91bmQuLi4KKyAgICAgKi8KKyAgICBpZiAoIGNyZWF0ZV90eXBlID09IE5FVFNOTVBfU0VOU09SX0ZJTkRfRVhJU1QgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOm5hbWUiLCAiTm8gc3VjaCBzZW5zb3IgZW50cnlcbiIpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAuLi4gc28gbGV0J3MgY3JlYXRlIGEgbmV3IG9uZSwgdXNpbmcgdGhlIHR5cGUgc3VwcGxpZWQKKyAgICAgKi8KKyAgICBzcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfc2Vuc29yX2luZm8gKTsKKyAgICBpZiAoIHNwICkgeworICAgICAgICBpZiAoc3RybGVuKG5hbWUpID49IHNpemVvZihzcC0+bmFtZSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTZW5zb3IgbmFtZSBpcyB0b28gbGFyZ2U6ICVzXG4iLCBuYW1lKTsKKyAgICAgICAgICAgIGZyZWUoc3ApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgc3RyY3B5KCBzcC0+bmFtZSwgbmFtZSApOworICAgICAgICBzcC0+dHlwZSA9IGNyZWF0ZV90eXBlOworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgdXAgdGhlIGluZGV4IHZhbHVlLgorICAgICAgICAgKiAgCisgICAgICAgICAqIEFsbCB0aGlzIHRyb3VibGUsIGp1c3QgZm9yIGEgc2ltcGxlIGludGVnZXIuCisgICAgICAgICAqIFN1cmVseSB0aGVyZSBtdXN0IGJlIGEgYmV0dGVyIHdheT8KKyAgICAgICAgICovCisgICAgICAgIHNwLT5pZHgubGVuICA9IDE7CisgICAgICAgIHNwLT5pZHgub2lkcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG9pZCApOworICAgICAgICBzcC0+aWR4Lm9pZHNbMF0gPSArK19zZW5zb3JfaWR4OworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOm5hbWUiLCAiQ3JlYXRlIHNlbnNvciBlbnRyeSAodHlwZSA9ICVkLCBpbmRleCA9ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRlX3R5cGUsIF9zZW5zb3JfaWR4KSk7CisgICAgQ09OVEFJTkVSX0lOU0VSVCggX3NlbnNvcl9jb250YWluZXIsIHNwICk7CisgICAgcmV0dXJuIHNwOworfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaCBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZWNjZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaApAQCAtMCwwICsxLDIgQEAKK3ZvaWQgaW5pdF9od19zZW5zb3JzKCB2b2lkICk7Cit2b2lkIHNodXRkb3duX2h3X3NlbnNvcnMoIHZvaWQgKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJiYmIxMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5jCkBAIC0wLDAgKzEsMTYxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKworI2luY2x1ZGUgPGtzdGF0Lmg+CisjaW5jbHVkZSA8L3Vzci9wbGF0Zm9ybS9zdW40dS9pbmNsdWRlL3N5cy9lbnZjdHJsLmg+CisKK3ZvaWQgbmV0c25tcF9zZW5zb3JfYXJjaF9pbml0KCB2b2lkICkgeworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBLU3RhdCBTZW5zb3JzIG1vZHVsZVxuIikpOworfQorCisKK2ludAorbmV0c25tcF9zZW5zb3JfYXJjaF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2cCkgeworICAgIG5ldHNubXBfc2Vuc29yX2luZm8gICAgICAgICpzcDsKKworICAgIGludCAgICAgICAgIGk7CisgICAgY29uc3QgY2hhciAqZmFudHlwZXNbXT17IkNQVSIsIlBXUiIsIkFGQiJ9OworICAgIGNoYXIgICAgICAgIG5hbWVbIDI1NiBdOworCisgICAga3N0YXRfY3RsX3QgICAgKmtjOworICAgIGtzdGF0X3QgICAgICAgICprcDsKKyAgICBlbnZjdHJsX2Zhbl90ICAqZmFuX2luZm87CisgICAgZW52Y3RybF9wc190ICAgKnBvd2VyX2luZm87CisgICAgZW52Y3RybF9lbmNsX3QgKmVuY19pbmZvOworCisKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIlJlbG9hZCBLU3RhdCBTZW5zb3JzIG1vZHVsZVxuIikpOworCisgICAga2MgPSBrc3RhdF9vcGVuKCk7CisgICAgaWYgKCBrYyA9PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiQ291bGRuJ3Qgb3BlbiBrc3RhdFxuIikpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgCisKKyAgICAvKgorICAgICAqIFJldHJpZXZlIGZhbiBpbmZvcm1hdGlvbgorICAgICAqLworICAgIGtwID0ga3N0YXRfbG9va3VwKCBrYywgRU5WQ1RSTF9NT0RVTEVfTkFNRSwgMCwgRU5WQ1RSTF9LU1RBVF9GQU5TVEFUKTsKKyAgICBpZiAoKCBrcCA9PSAwICkgfHwgKGtzdGF0X3JlYWQoIGtjLCBrcCwgMCApID09IC0xICkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJObyBmYW4gaW5mb3JtYXRpb25cbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmYW5faW5mbyA9IChlbnZjdHJsX2Zhbl90ICopa3AtPmtzX2RhdGE7ICAgICAgICAKKyAgICAgICAgZm9yIChpPTA7IGk8a3AtPmtzX25kYXRhOyBpKyspIHsKKyAgICAgICAgICAgIG1lbXNldCggbmFtZSwgMCwgMjU2ICk7CisgICAgICAgICAgICBzbnByaW50ZiggbmFtZSwgMjU1LCAiJXMlZCIsIGZhbnR5cGVzW2Zhbl9pbmZvLT50eXBlXSwgZmFuX2luZm8tPmluc3RhbmNlICk7CisKKyAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICk7CisgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGZhbl9pbmZvLT5mYW5zcGVlZDsKKyAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTUsICJmYW4gdHlwZSAlcyBudW1iZXIgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmYW50eXBlc1tmYW5faW5mby0+dHlwZV0sIGZhbl9pbmZvLT5pbnN0YW5jZSApOworICAgICAgICAgICAgfQorICAgIAorICAgICAgICAgICAgZmFuX2luZm8rKzsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgLyoKKyAgICAgKiBSZXRyaWV2ZSBQb3dlciBTdXBwbHkgaW5mb3JtYXRpb24KKyAgICAgKi8KKyAgICBrcCA9IGtzdGF0X2xvb2t1cCgga2MsIEVOVkNUUkxfTU9EVUxFX05BTUUsIDAsIEVOVkNUUkxfS1NUQVRfUFNOQU1FKTsKKyAgICBpZiAoKCBrcCA9PSAwICkgfHwgKGtzdGF0X3JlYWQoIGtjLCBrcCwgMCApID09IC0xICkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJObyBQU1UgaW5mb3JtYXRpb25cbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBwb3dlcl9pbmZvID0gKGVudmN0cmxfcHNfdCAqKWtwLT5rc19kYXRhOyAgICAgICAgCisgICAgICAgIGZvciAoaT0wOyBpPGtwLT5rc19uZGF0YTsgaSsrKSB7CisgICAgICAgICAgICBtZW1zZXQoIG5hbWUsIDAsIDI1NiApOworICAgICAgICAgICAgc25wcmludGYoIG5hbWUsIDI1NSwgIlBTVSVkIiwgcG93ZXJfaW5mby0+aW5zdGFuY2UgKTsKKworICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggbmFtZSwgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSk7CisgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IHBvd2VyX2luZm8tPnBzX3RlbXByOworICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIHNucHJpbnRmKCBzcC0+ZGVzY3IsIDI1NSwgInBvd2VyIHN1cHBseSAlZCIsIHBvd2VyX2luZm8tPmluc3RhbmNlICk7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBwb3dlcl9pbmZvKys7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIC8qCisgICAgICogUmV0cmlldmUgRW5jbG9zdXJlIGluZm9ybWF0aW9uCisgICAgICovCisgICAga3AgPSBrc3RhdF9sb29rdXAoIGtjLCBFTlZDVFJMX01PRFVMRV9OQU1FLCAwLCBFTlZDVFJMX0tTVEFUX0VOQ0wpOworICAgIGlmICgoIGtwID09IDAgKSB8fCAoa3N0YXRfcmVhZCgga2MsIGtwLCAwICkgPT0gLTEgKSkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoIiwgIk5vIGVuY2xvc3VyZSBpbmZvcm1hdGlvblxuIikpOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY19pbmZvID0gKGVudmN0cmxfZW5jbF90ICopa3AtPmtzX2RhdGE7ICAgICAgICAKKyAgICAgICAgZm9yIChpPTA7IGk8a3AtPmtzX25kYXRhOyBpKyspIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGUgZW5jbG9zdXJlIGluZm9ybWF0aW9uIGNvdmVycyBzZXZlcmFsIGRpZmZlcmVudCB0eXBlcyBvZiBzZW5zb3IKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgc3dpdGNoICggZW5jX2luZm8tPnR5cGUgKSB7CisgICAgICAgICAgICBjYXNlIEVOVkNUUkxfRU5DTF9GU1A6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW5jbG9zdXJlIEZyb250IFBhbmVsXG4iKSk7CisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIkZTUCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIpOworICAgICAgICAgICAgICAgIGlmICggc3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGVuY19pbmZvLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfQU1CVEVNUFI6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRW5jbG9zdXJlIEFtYmllbnQgVGVtcGVyYXR1cmVcbiIpKTsKKyAgICAgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCAiQW1iaWVudCIsIE5FVFNOTVBfU0VOU09SX1RZUEVfVEVNUEVSQVRVUkUpOworICAgICAgICAgICAgICAgIGlmICggc3AgKSB7CisgICAgICAgICAgICAgICAgICAgIHNwLT52YWx1ZSA9IGVuY19pbmZvLT52YWx1ZTsKKyAgICAgICAgICAgICAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIEVOVkNUUkxfRU5DTF9DUFVURU1QUjoKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbmNsb3N1cmUgQ1BVIFRlbXBlcmF0dXJlXG4iKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KCBuYW1lLCAwLCAyNTYgKTsKKyAgICAgICAgICAgICAgICBzbnByaW50ZiggbmFtZSwgMjU1LCAiQ1BVJWQiLCBlbmNfaW5mby0+aW5zdGFuY2UgKTsKKyAgICAgICAgICAgICAgICBzcCA9IHNlbnNvcl9ieV9uYW1lKCBuYW1lLCBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBlbmNfaW5mby0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgICAgICBzbnByaW50Ziggc3AtPmRlc2NyLCAyNTUsICJDUFUlZCB0ZW1wZXJhdHVyZSIsIGVuY19pbmZvLT5pbnN0YW5jZSApOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBFTlZDVFJMX0VOQ0xfQkFDS1BMQU5FNDoKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbmNsb3N1cmUgQmFja3BsYW5lNFxuIikpOworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoICJCYWNrcGxhbmU0IiwgTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUik7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gZW5jX2luZm8tPnZhbHVlOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEVOVkNUUkxfRU5DTF9CQUNLUExBTkU4OgorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkVuY2xvc3VyZSBCYWNrcGxhbmU0XG4iKSk7CisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggIkJhY2twbGFuZTQiLCBORVRTTk1QX1NFTlNPUl9UWVBFX09USEVSKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSBlbmNfaW5mby0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDogICAgCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiVW5yZWNvZ25pc2VkIEVuY2xvc3VyZSBlbnRyeSAoJWQpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jX2luZm8tPnR5cGUpKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZW5jX2luZm8rKzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGtzdGF0X2Nsb3NlKGtjKTsKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9rc3RhdF9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmZmI0ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMva3N0YXRfc2Vuc29ycy5oCkBAIC0wLDAgKzEgQEAKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2M2YxNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5jCkBAIC0wLDAgKzEsNzQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oPgorCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPgorCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApIHsKKyAgICBGSUxFICpmcCA9IGZvcGVuKCIvZXRjL3NlbnNvcnMuY29uZiIsICJyIik7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJJbml0aWFsaXNlIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgc2Vuc29yc19pbml0KCBmcCApOworfQorCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisgICAgY29uc3Qgc2Vuc29yc19jaGlwX25hbWUgICAgKmNoaXA7CisgICAgY29uc3Qgc2Vuc29yc19mZWF0dXJlX2RhdGEgKmRhdGE7CisgICAgaW50ICAgICAgICAgICAgIGNoaXBfbnIgPSAwOworCisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJSZWxvYWQgTE0gU2Vuc29ycyBtb2R1bGVcbiIpKTsKKyAgICB3aGlsZSAoKGNoaXAgPSBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcygmY2hpcF9ucikpKSB7CisJaW50ICAgICAgICAgICAgIGEgPSAwOworCWludCAgICAgICAgICAgICBiID0gMDsKKworICAgICAgICB3aGlsZSAoKGRhdGEgPSBzZW5zb3JzX2dldF9hbGxfZmVhdHVyZXMoKmNoaXAsICZhLCAmYikpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJnZXRfYWxsX2ZlYXR1cmVzICglZCwgJWQpXG4iLCBhLCBiKSk7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAqbGFiZWwgPSBOVUxMOworICAgICAgICAgICAgZG91YmxlICAgICAgICAgIHZhbDsKKyAgICAgICAgICAgIGludCAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUjsKKworICAgICAgICAgICAgaWYgKChkYXRhLT5tb2RlICYgU0VOU09SU19NT0RFX1IpICYmCisgICAgICAgICAgICAgICAgKGRhdGEtPm1hcHBpbmcgPT0gU0VOU09SU19OT19NQVBQSU5HKSAmJgorICAgICAgICAgICAgICAgICFzZW5zb3JzX2dldF9sYWJlbCgqY2hpcCwgZGF0YS0+bnVtYmVyLCAmbGFiZWwpICYmCisgICAgICAgICAgICAgICAgIXNlbnNvcnNfZ2V0X2ZlYXR1cmUoKmNoaXAsIGRhdGEtPm51bWJlciwgJnZhbCkpIHsKKworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIiVzID0gJWZcbiIsIGxhYmVsLCB2YWwpKTsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIERldGVybWluZSB0aGUgdHlwZSBvZiBzZW5zb3IgZnJvbSB0aGUgZGVzY3JpcHRpb24uCisgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgKiBJZiB0aGUgdGV4dCBiZWluZyBsb29rZWQgZm9yIGJlbG93IGlzIG5vdCBpbiB0aGUgbGFiZWwgb2YgYQorICAgICAgICAgICAgICAgICAqIGdpdmVuIHNlbnNvciAoZS5nLiwgdGhlIHRlbXAxIHNlbnNvciBoYXMgYmVlbiBsYWJlbGVkICdDUFUnCisgICAgICAgICAgICAgICAgICogcmF0aGVyIHRoYW4gJ0NQVSB0ZW1wJykgaXQgd2lsbCBiZSBjYXRlZ29yaXNlZCBhcyBPVEhFUi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoc3Ryc3RyKGxhYmVsLCAiViIpKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREM7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJzdHIobGFiZWwsICJmYW4iKSB8fCBzdHJzdHIobGFiZWwsICJGYW4iKSkgeworICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9SUE07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmIChzdHJzdHIobGFiZWwsICJ0ZW1wIikgfHwgc3Ryc3RyKGxhYmVsLCAiVGVtcCIpKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogVXNlIHRoaXMgdHlwZSB0byBjcmVhdGUgYSBuZXcgc2Vuc29yIGVudHJ5CisgICAgICAgICAgICAgICAgICogIChpbnNlcnRpbmcgaXQgaW4gdGhlIGFwcHJvcHJpYXRlIHN1Yi1jb250YWluZXJzKQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIGxhYmVsLCB0eXBlICk7CisgICAgICAgICAgICAgICAgaWYgKCBzcCApIHsKKyAgICAgICAgICAgICAgICAgICAgc3AtPnZhbHVlID0gdmFsOworICAgICAgICAgICAgICAgICAgICBzcC0+ZmxhZ3N8PSBORVRTTk1QX1NFTlNPUl9GTEFHX0FDVElWRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisJICAgIGlmIChsYWJlbCkgeworCQlmcmVlKGxhYmVsKTsKKwkJbGFiZWwgPSBOVUxMOworCSAgICB9CisgICAgICAgIH0gLyogZW5kIHdoaWxlIGRhdGEgKi8KKyAgICB9IC8qIGVuZCB3aGlsZSBjaGlwICovCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YyLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZmZiNGQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192Mi5oCkBAIC0wLDAgKzEgQEAKK2NvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL3NlbnNvcnMvaHdfc2Vuc29ycykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvbG1zZW5zb3JzX3YzLmMgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNGRhMTkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5jCkBAIC0wLDAgKzEsMTAyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KKworCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfaW5pdCggdm9pZCApIHsKKyAgICBGSUxFICpmcCA9IGZvcGVuKCIvZXRjL3NlbnNvcnMuY29uZiIsICJyIik7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJJbml0aWFsaXNlIHYzIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgc2Vuc29yc19pbml0KCBmcCApOworfQorCitpbnQKK25ldHNubXBfc2Vuc29yX2FyY2hfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdnApIHsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisgICAgY29uc3Qgc2Vuc29yc19jaGlwX25hbWUgICAgKmNoaXA7CisgICAgY29uc3Qgc2Vuc29yc19mZWF0dXJlICAgICAgKmRhdGE7CisgICAgY29uc3Qgc2Vuc29yc19zdWJmZWF0dXJlICAgKmRhdGEyOworICAgIGludCAgICAgICAgICAgICBjaGlwX25yID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiUmVsb2FkIHYzIExNIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisgICAgd2hpbGUgKChjaGlwID0gc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMoIE5VTEwsICZjaGlwX25yKSkpIHsKKwlpbnQgICAgICAgICAgICAgYSA9IDA7CisKKyAgICAgICAgd2hpbGUgKChkYXRhID0gc2Vuc29yc19nZXRfZmVhdHVyZXMoIGNoaXAsICZhKSkpIHsKKwkgICAgaW50ICAgICAgICAgICAgIGIgPSAwOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJnZXRfZmVhdHVyZXMgKCVzLCAlZClcbiIsIGRhdGEtPm5hbWUsIGRhdGEtPm51bWJlcikpOworCisgICAgICAgICAgICB3aGlsZSAoKGRhdGEyID0gc2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzKCBjaGlwLCBkYXRhLCAmYikpKSB7CisgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmxhYmVsID0gTlVMTDsKKyAgICAgICAgICAgICAgICBkb3VibGUgICAgICAgICAgdmFsID0gMDsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVI7CisKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICIgIGdldF9zdWJmZWF0dXJlcyAoJXMsICVkKVxuIiwgZGF0YTItPm5hbWUsIGRhdGEyLT5udW1iZXIpKTsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIENoZWNrIHRoZSB0eXBlIG9mIHRoaXMgc3ViZmVhdHVyZSwKKyAgICAgICAgICAgICAgICAgKiAgIGNvbmNlbnRyYXRpbmcgb24gdGhlIG1haW4gImlucHV0IiBtZWFzdXJlbWVudHMuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3dpdGNoICggZGF0YTItPnR5cGUgKSB7CisgICAgICAgICAgICAgICAgY2FzZSBTRU5TT1JTX1NVQkZFQVRVUkVfSU5fSU5QVVQ6CisgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgU0VOU09SU19TVUJGRUFUVVJFX0ZBTl9JTlBVVDoKKyAgICAgICAgICAgICAgICAgICAgdHlwZSA9IE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFNFTlNPUlNfU1VCRkVBVFVSRV9URU1QX0lOUFVUOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBTRU5TT1JTX1NVQkZFQVRVUkVfVklEOgorICAgICAgICAgICAgICAgICAgICB0eXBlID0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvKiBTa2lwIGV2ZXJ5dGhpbmcgb3RoZXIgdGhhbiB0aGVzZSBiYXNpYyBzZW5zb3IgZmVhdHVyZXMgLSA/Pz8gKi8KKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBTa2lwIHR5cGUgJXhcbiIsIGRhdGEyLT50eXBlKSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogR2V0IHRoZSBuYW1lIGFuZCB2YWx1ZSBvZiB0aGlzIHN1YmZlYXR1cmUKKyAgICAgICAgICAgICAgICAgKi8KKy8qCisgICAgICAgICAgICAgICAgaWYgKCEobGFiZWwgPSBzZW5zb3JzX2dldF9sYWJlbChjaGlwLCBkYXRhKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBDYW4ndCBnZXQgbmFtZSAoJXMpXG4iLCBsYWJlbCkpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHNlbnNvcnNfZ2V0X3ZhbHVlKGNoaXAsIGRhdGEyLT5udW1iZXIsICZ2YWwpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICIgIENhbid0IGdldCB2YWx1ZSAoJWYpXG4iLCB2YWwpKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorKi8KKyAgICAgICAgICAgICAgICBpZiAoIShsYWJlbCA9IHNlbnNvcnNfZ2V0X2xhYmVsKGNoaXAsIGRhdGEpKSB8fAorICAgICAgICAgICAgICAgICAgICAgKHNlbnNvcnNfZ2V0X3ZhbHVlKGNoaXAsIGRhdGEyLT5udW1iZXIsICZ2YWwpIDwgMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiICBDYW4ndCBnZXQgbmFtZS92YWx1ZSAoJXMsICVmKVxuIiwgbGFiZWwsIHZhbCkpOworICAgICAgICAgICAgICAgICAgICBmcmVlKGxhYmVsKTsKKyAgICAgICAgICAgICAgICAgICAgbGFiZWwgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiJXMgPSAlZlxuIiwgbGFiZWwsIHZhbCkpOworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBVc2UgdGhpcyB0eXBlIHRvIGNyZWF0ZSBhIG5ldyBzZW5zb3IgZW50cnkKKyAgICAgICAgICAgICAgICAgKiAgKGluc2VydGluZyBpdCBpbiB0aGUgYXBwcm9wcmlhdGUgc3ViLWNvbnRhaW5lcnMpCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggbGFiZWwsIHR5cGUgKTsKKyAgICAgICAgICAgICAgICBpZiAoIHNwICkgeworICAgICAgICAgICAgICAgICAgICBzcC0+dmFsdWUgPSB2YWw7CisgICAgICAgICAgICAgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgICAgICAgICAgICAgIH0KKwkgICAgICAgIGlmIChsYWJlbCkgeworCQkgICAgZnJlZShsYWJlbCk7CisJCSAgICBsYWJlbCA9IE5VTEw7CisJICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGVuZCB3aGlsZSBkYXRhMiAqLworICAgICAgICB9IC8qIGVuZCB3aGlsZSBkYXRhICovCisgICAgfSAvKiBlbmQgd2hpbGUgY2hpcCAqLworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL2xtc2Vuc29yc192My5oIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9sbXNlbnNvcnNfdjMuaApAQCAtMCwwICsxIEBACitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYyBiL2FnZW50L21pYmdyb3VwL2hhcmR3YXJlL3NlbnNvcnMvcGljbGRfc2Vuc29ycy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0NjE3YjIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuYwpAQCAtMCwwICsxLDMzNCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmg+CisKKyNpbmNsdWRlIDx0aW1lLmg+CisKKyNpbmNsdWRlIDxwaWNsLmg+CisKK3ZvaWQgbmV0c25tcF9zZW5zb3JfYXJjaF9pbml0KCB2b2lkICkgeworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiSW5pdGlhbGlzZSBQSUNMZCBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHBpY2xfaW5pdGlhbGl6ZSgpOworfQorCisKKy8qCisgKiBIYW5kbGUgYSBudW1lcmljLXZhbHVlZCBzZW5zb3IKKyAqLworc3RhdGljIGludAorcmVhZF9udW1fc2Vuc29yKCBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3B2YWwsIGZsb2F0ICp2YWx1ZSApCit7CisgICAgcGljbF9ub2RlaGRsX3QgIHNlbnNvcmg7CisgICAgcGljbF9wcm9waW5mb190IHNlbnNvcl9pbmZvOworICAgIHBpY2xfZXJybm9fdCAgICBlcnJvcl9jb2RlOworCisgICAgdW5pb24gdmFsdSB7CisgICAgICAgIGNoYXIgYnVmW1BJQ0xfUFJPUFNJWkVfTUFYXTsKKyAgICAgICAgdWludDMyX3QgdXM0OworICAgICAgICB1aW50MTZfdCB1czI7CisgICAgICAgIGludDMyX3QgaXM0OworICAgICAgICBpbnQxNl90IGlzMjsKKyAgICAgICAgZmxvYXQgZjsKKyAgICB9IHZhbDsKKworICAgIC8qCisgICAgICogIFJldHJpZXZlIHRoZSBzcGVjaWZpZWQgc2Vuc29yIGluZm9ybWF0aW9uIGFuZCB2YWx1ZQorICAgICAqLworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9waW5mb19ieV9uYW1lKGNoaWxkaCwgcHJvcHZhbCwgJnNlbnNvcl9pbmZvLCAmc2Vuc29yaCk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2Vuc29yIGluZm8gbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsKHNlbnNvcmgsICZ2YWwuYnVmLCBzZW5zb3JfaW5mby5zaXplKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJzZW5zb3IgdmFsdWUgbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIC8qCisgICAgICogIENoZWNrIHRoZSB2YWxpZGl0eSAodHlwZSBhbmQgc2l6ZSkgb2YgdGhpcyB2YWx1ZQorICAgICAqLworICAgIGlmICggc2Vuc29yX2luZm8udHlwZSA9PSBQSUNMX1BUWVBFX0ZMT0FUICkgeworICAgICAgICAqdmFsdWUgPSB2YWwuZjsKKyAgICB9IGVsc2UgaWYgKCBzZW5zb3JfaW5mby50eXBlID09IFBJQ0xfUFRZUEVfVU5TSUdORURfSU5UICkgeworICAgICAgICAvKiAxNi1iaXQgb3IgMzItYml0IHVuc2lnbmVkIGludGVnZXJzICovCisgICAgICAgIGlmICggc2Vuc29yX2luZm8uc2l6ZSA9PSAyICkgeworICAgICAgICAgICAgKnZhbHVlID0gdmFsLnVzMjsKKyAgICAgICAgfSBlbHNlIGlmICggc2Vuc29yX2luZm8uc2l6ZSA9PSA0ICkgeyAKKyAgICAgICAgICAgICp2YWx1ZSA9IHZhbC51czQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJ1bnNpZ25lZCBpbnRlZ2VyICglZCBiaXQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vuc29yX2luZm8uc2l6ZSAqIDgpKTsKKyAgICAgICAgICAgIHJldHVybiBQSUNMX0ZBSUxVUkU7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKCBzZW5zb3JfaW5mby50eXBlID09IFBJQ0xfUFRZUEVfSU5UICkgeworICAgICAgICAvKiAxNi1iaXQgb3IgMzItYml0IHNpZ25lZCBpbnRlZ2VycyAqLworICAgICAgICBpZiAoIHNlbnNvcl9pbmZvLnNpemUgPT0gMiApIHsKKyAgICAgICAgICAgICp2YWx1ZSA9IHZhbC5pczI7CisgICAgICAgIH0gZWxzZSBpZiAoIHNlbnNvcl9pbmZvLnNpemUgPT0gNCApIHsgCisgICAgICAgICAgICAqdmFsdWUgPSB2YWwuaXM0OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2lnbmVkIGludGVnZXIgKCVkIGJpdClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JfaW5mby5zaXplICogOCkpOworICAgICAgICAgICAgcmV0dXJuIFBJQ0xfRkFJTFVSRTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgInVucmVjb2duaXNlZCB0eXBlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbnNvcl9pbmZvLnR5cGUpKTsKKyAgICAgICAgcmV0dXJuIFBJQ0xfRkFJTFVSRTsKKyAgICB9CisKKyAgICByZXR1cm4gZXJyb3JfY29kZTsKK30KKworc3RhdGljIGludAorcHJvY2Vzc19udW1fc2Vuc29yKCBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3BuYW1lLCBjb25zdCBjaGFyICpwcm9wdmFsLCBpbnQgdHlwICkKK3sKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc3A7CisgICAgZmxvYXQgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlOworICAgIHBpY2xfZXJybm9fdCAgICBlcnJvcl9jb2RlOworCisgICAgc3AgPSBzZW5zb3JfYnlfbmFtZSggcHJvcG5hbWUsIHR5cCApOworICAgIGlmICggIXNwICkgeworICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSByZWFkX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcHZhbCwgJnZhbHVlICk7CisgICAgaWYgKCBlcnJvcl9jb2RlID09IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgc3AtPnZhbHVlID0gdmFsdWU7CisgICAgICAgIHNwLT5mbGFnc3w9IE5FVFNOTVBfU0VOU09SX0ZMQUdfQUNUSVZFOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkZhaWxlZCB0byByZWFkICVzIHNlbnNvciB2YWx1ZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wbmFtZSwgZXJyb3JfY29kZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKKworLyoKKyAqICAgIEhhbmRsZSBhbiBlbnVtZXJhdGlvbi12YWx1ZWQgc2Vuc29yCisgKi8KK2NvbnN0IGNoYXIgKnN3aXRjaF9zZXR0aW5nc1tdID0geyAiT0ZGIiwiT04iLCJOT1JNQUwiLCJMT0NLRUQiLAorCQkJCSAgIlVOS05PV04iLCJESUFHIiwiU0VDVVJFIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMIH07Citjb25zdCBjaGFyICpsZWRfc2V0dGluZ3NbXSAgICA9IHsgIk9GRiIsIk9OIiwiQkxJTksiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgfTsKK2NvbnN0IGNoYXIgKmkyY19zZXR0aW5nc1tdICAgID0geyAiT0siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgfTsKKworc3RhdGljIGludAorcmVhZF9lbnVtX3NlbnNvciggcGljbF9ub2RlaGRsX3QgY2hpbGRoLCBmbG9hdCAqdmFsdWUsIGNvbnN0IGNoYXIgKipvcHRpb25zICkKK3sKKyAgICBwaWNsX25vZGVoZGxfdCAgc2Vuc29yaDsKKyAgICBwaWNsX3Byb3BpbmZvX3Qgc2Vuc29yX2luZm87CisgICAgcGljbF9lcnJub190ICAgIGVycm9yX2NvZGU7CisgICAgY2hhciAgICAgICAgICAgIHN0YXRlW1BJQ0xfUFJPUFNJWkVfTUFYXTsKKyAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgIC8qCisgICAgICogIFJldHJpZXZlIHRoZSBzcGVjaWZpZWQgc2Vuc29yIGluZm9ybWF0aW9uIGFuZCB2YWx1ZQorICAgICAqLworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9waW5mb19ieV9uYW1lKGNoaWxkaCwgIlN0YXRlIiwgJnNlbnNvcl9pbmZvLCAmc2Vuc29yaCk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAic2Vuc29yIGluZm8gbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsKHNlbnNvcmgsIHN0YXRlLCBzZW5zb3JfaW5mby5zaXplKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgIT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJzZW5zb3IgdmFsdWUgbG9va3VwIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIC8qCisgICAgICogVHJ5IHRvIGZpbmQgYSBtYXRjaGluZyBlbnRyeSBpbiB0aGUgbGlzdCBvZiBvcHRpb25zLgorICAgICAqIE5vdGUgdGhhdCBzb21lIHBsYXRmb3JtcyBtYXkgdXNlIHVwcGVyIG9yIGxvd2VyIGNhc2UKKyAgICAgKiAgIHZlcnNpb25zIG9mIHRoZXNlIGVudW1lcmF0aW9uIHZhbHVlcworICAgICAqICAoc28gdGhlIGNoZWNrcyBhcmUgY2FzZSBpbnNlbnNpdGl2ZSkKKyAgICAgKi8KKyAgICAqdmFsdWUgPSA5OTsgICAgLyogRHVtbXkgdmFsdWUgKi8KKyAgICBmb3IgKCBpPTA7ICBvcHRpb25zW2ldICE9IE5VTEw7IGkrKyApIHsKKyAgICAgICAgaWYgKHN0cm5jYXNlY21wKHN0YXRlLCBvcHRpb25zW2ldLCBzdHJsZW4ob3B0aW9uc1tpXSkpID09IDApIHsKKyAgICAgICAgICAgICp2YWx1ZSA9IGk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICAKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJFbnVtZXJhdGlvbiBzdGF0ZSAlcyBub3QgbWF0Y2hlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSkpOworICAgIHJldHVybiAwOyAgLyogT3IgYW4gZXJyb3IgPyAqLworfQorCitzdGF0aWMgaW50Citwcm9jZXNzX2VudW1fc2Vuc29yKCBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3BuYW1lLCBpbnQgdHlwLCBjb25zdCBjaGFyICoqb3B0aW9ucyApCit7CisgICAgbmV0c25tcF9zZW5zb3JfaW5mbyAgICAgICAgKnNwOworICAgIGZsb2F0ICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZTsKKyAgICBwaWNsX2Vycm5vX3QgICAgZXJyb3JfY29kZTsKKworICAgIHNwID0gc2Vuc29yX2J5X25hbWUoIHByb3BuYW1lLCB0eXAgKTsKKyAgICBpZiAoICFzcCApIHsKKyAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBlcnJvcl9jb2RlID0gcmVhZF9lbnVtX3NlbnNvciggY2hpbGRoLCAmdmFsdWUsIG9wdGlvbnMgKTsKKyAgICBpZiAoIGVycm9yX2NvZGUgPT0gUElDTF9TVUNDRVNTICkgeworICAgICAgICBzcC0+dmFsdWUgPSB2YWx1ZTsKKyAgICAgICAgc3AtPmZsYWdzfD0gTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiRmFpbGVkIHRvIHJlYWQgJXMgc2Vuc29yIHZhbHVlICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BuYW1lLCBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworCisvKgorICogIFJlY3Vyc2l2ZWx5IHdhbGsgdGhyb3VnaCB0aGUgdHJlZSBvZiBzZW5zb3JzCisgKi8KK3N0YXRpYyBpbnQKK3Byb2Nlc3Nfc2Vuc29ycyggaW50IGxldmVsLCBwaWNsX25vZGVoZGxfdCBub2RlaCApIHsKKyAgICBwaWNsX25vZGVoZGxfdCBjaGlsZGgsIG5leHRoOworICAgIGNoYXIgICAgICAgICAgIHByb3BuYW1lWyAgUElDTF9QUk9QTkFNRUxFTl9NQVggIF07CisgICAgY2hhciAgICAgICAgICAgcHJvcGNsYXNzWyBQSUNMX0NMQVNTTkFNRUxFTl9NQVggXTsKKyAgICBwaWNsX2Vycm5vX3QgICBlcnJvcl9jb2RlOworCisgICAgbGV2ZWwrKzsKKyAgICBERUJVR01TR1RMKCgic2Vuc29yczphcmNoOmRldGFpbCIsICJwcm9jZXNzX3NlbnNvcnMgLSBsZXZlbCAlZFxuIiwgbGV2ZWwpKTsKKworICAgIC8qIExvb2sgdXAgdGhlIGZpcnN0IGNoaWxkIG5vZGUgYXQgdGhpcyBsZXZlbCAqLworICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsX2J5X25hbWUoIG5vZGVoLCBQSUNMX1BST1BfQ0hJTEQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNoaWxkaCwgc2l6ZW9mKGNoaWxkaCkpOworICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgIkZhaWxlZCB0byBnZXQgZmlyc3QgY2hpbGQgbm9kZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl9jb2RlKSk7CisgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgIH0KKworICAgIC8qIFN0ZXAgdGhyb3VnaCB0aGUgY2hpbGQgbm9kZXMsIHJldHJpZXZpbmcgdGhlIG5hbWUgYW5kIGNsYXNzIG9mIGVhY2ggb25lICovCisgICAgd2hpbGUgKCBlcnJvcl9jb2RlID09IFBJQ0xfU1VDQ0VTUyApIHsKKyAgICAgICAgZXJyb3JfY29kZSA9IHBpY2xfZ2V0X3Byb3B2YWxfYnlfbmFtZSggY2hpbGRoLCBQSUNMX1BST1BfTkFNRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvcG5hbWUsIHNpemVvZihwcm9wbmFtZSktMSk7CisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgICAgICAvKiBUaGUgTm9kZSBXaXRoIE5vIE5hbWUgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgImdldCBwcm9wZXJ0eSBuYW1lIGZhaWxlZCAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfY29kZSkpOworICAgICAgICAgICAgcmV0dXJuKCBlcnJvcl9jb2RlICk7CisgICAgICAgIH0KKworICAgICAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcHJvcHZhbF9ieV9uYW1lKCBjaGlsZGgsIFBJQ0xfUFJPUF9DTEFTU05BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb3BjbGFzcywgc2l6ZW9mKHByb3BjbGFzcyktMSk7CisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgICAgICAvKiBUaGUgQ2xhc3NsZXNzIFNvY2lldHkgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2g6ZGV0YWlsIiwgImdldCBwcm9wZXJ0eSBjbGFzcyBmYWlsZWQgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yX2NvZGUpKTsKKyAgICAgICAgICAgIHJldHVybiggZXJyb3JfY29kZSApOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiTmFtZTogJXMsIENsYXNzICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wbmFtZSwgcHJvcGNsYXNzICkpOworCisKKyAgICAgICAgLyoKKyAgICAgICAgICogIFRocmVlIGNsYXNzZXMgcmVwcmVzZW50IGZ1cnRoZXIgZ3JvdXBzIG9mIHNlbnNvcnMsIGV0Yy4KKyAgICAgICAgICogIENhbGwgJ3Byb2Nlc3Nfc2Vuc29ycycgcmVjdXJzaXZlbHkgdG8gaGFuZGxlIHRoaXMgbmV4dCBsZXZlbAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCggc3Ryc3RyKCBwcm9wY2xhc3MsICJwaWNsIiAgICApKSB8fAorICAgICAgICAgICAgKCBzdHJzdHIoIHByb3BjbGFzcywgImZydXRyZWUiICkpIHx8CisgICAgICAgICAgICAoIHN0cnN0ciggcHJvcGNsYXNzLCAib2JwIiAgICAgKSkpIHsKKyAgICAgICAgICAgIHByb2Nlc3Nfc2Vuc29ycyggbGV2ZWwsIGNoaWxkaCApOworICAgICAgICB9CisgICAgICAgIC8qCisgICAgICAgICAqICBPdGhlcndpc2UgcmV0cmlldmUgdGhlIHZhbHVlIGFwcHJvcHJpYXRlbHkgYmFzZWQgb24gdGhlCisgICAgICAgICAqICAgICBjbGFzcyBvZiB0aGUgc2Vuc29yLgorICAgICAgICAgKgorICAgICAgICAgKiAgV2UgbmVlZCB0byBzcGVjaWZ5IHRoZSBuYW1lIG9mIHRoZSBQSUNMIHByb3BlcnR5IHRvIHJldHJpZXZlCisgICAgICAgICAqICAgICBmb3IgdGhpcyBjbGFzcyBvZiBzZW5zb3IsIGFuZCB0aGUgTmV0LVNOTVAgc2Vuc29yIHR5cGUuCisgICAgICAgICAqLworICAgICAgICBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJmYW4tdGFjaG9tZXRlciIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiQXRvRFNlbnNvclZhbHVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VOU09SX1RZUEVfUlBNICk7CisgICAgICAgIH0gZWxzZSBpZiAoIHN0cnN0ciggcHJvcGNsYXNzLCAiZmFuIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsICJTcGVlZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgInRlbXBlcmF0dXJlLXNlbnNvciIgKSkgeworICAgICAgICAgICAgcHJvY2Vzc19udW1fc2Vuc29yKCBjaGlsZGgsIHByb3BuYW1lLCAiVGVtcGVyYXR1cmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgInZvbHRhZ2Utc2Vuc29yIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsICJWb2x0YWdlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qID8/ICovIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApOworICAgICAgICB9IGVsc2UgaWYgKCBzdHJzdHIoIHByb3BjbGFzcywgImRpZ2l0YWwtc2Vuc29yIiApKSB7CisgICAgICAgICAgICBwcm9jZXNzX251bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsICJBdG9EU2Vuc29yVmFsdWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogPz8gKi8gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0RDICk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRW51bWVyYXRpb24tdmFsdWVkIHNlbnNvcnMgdXNlIGEgZml4ZWQgUElDTCBwcm9wZXJ0eSAoIlN0YXRlIiksCisgICAgICAgICAgICAgKiAgIGJ1dCB0YWtlIGEgbGlzdCBvZiB0aGUgdmFsdWVzIGFwcHJvcHJpYXRlIGZvciB0aGF0IHNlbnNvciwKKyAgICAgICAgICAgICAqICAgYXMgd2VsbCBhcyB0aGUgTmV0LVNOTVAgc2Vuc29yIHR5cGUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJzd2l0Y2giICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfZW51bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2hfc2V0dGluZ3MgKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJsZWQiICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfZW51bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfT1RIRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZWRfc2V0dGluZ3MgKTsKKyAgICAgICAgfSBlbHNlIGlmICggc3Ryc3RyKCBwcm9wY2xhc3MsICJpMmMiICkpIHsKKyAgICAgICAgICAgIHByb2Nlc3NfZW51bV9zZW5zb3IoIGNoaWxkaCwgcHJvcG5hbWUsIE5FVFNOTVBfU0VOU09SX1RZUEVfQk9PTEVBTiwgLyogPz8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGkyY19zZXR0aW5ncyApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogU2tpcCBvdGhlciBjbGFzc2VzIG9mIHNlbnNvciAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaDpkZXRhaWwiLCAiU2tpcHBpbmcgY2xhc3MgJXNcbiIsIHByb3BjbGFzcyApKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqICBNb3ZlIG9uIHRvIHRoZSBuZXh0IGNoaWxkIG5vZGUgYXQgdGhlIGN1cnJlbnQgbGV2ZWwgKGlmIGFueSkKKyAgICAgICAgICovCisgICAgICAgIGVycm9yX2NvZGUgPSBwaWNsX2dldF9wcm9wdmFsX2J5X25hbWUoIGNoaWxkaCwgUElDTF9QUk9QX1BFRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXh0aCwgc2l6ZW9mKG5leHRoKSk7CisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MgKSB7CisgICAgICAgICAgICAvKiBUaGF0J3MgQWxsIEZvbGtzISAqLworICAgICAgICAgICAgcmV0dXJuICgoIGVycm9yX2NvZGUgPT0gUElDTF9QUk9QTk9URk9VTkQgKQorICAgICAgICAgICAgICAgICAgICAgICAgICA/IFBJQ0xfU1VDQ0VTUyA6IGVycm9yX2NvZGUgKTsKKyAgICAgICAgfQorICAgICAgICBjaGlsZGggPSBuZXh0aDsKKyAgICB9CisgICAgCisgICAgcmV0dXJuIGVycm9yX2NvZGU7Cit9CisKKworaW50CituZXRzbm1wX3NlbnNvcl9hcmNoX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZwKSB7CisgICAgaW50ICAgICAgICAgICAgICAgZXJyb3JfY29kZTsKKyAgICBwaWNsX25vZGVoZGxfdCAgICByb290aDsKKworICAgIERFQlVHTVNHVEwoKCJzZW5zb3JzOmFyY2giLCAiUmVsb2FkIFBJQ0xkIFNlbnNvcnMgbW9kdWxlXG4iKSk7CisKKyAgICBlcnJvcl9jb2RlID0gcGljbF9nZXRfcm9vdCgmcm9vdGgpOworICAgIGlmICggZXJyb3JfY29kZSAhPSBQSUNMX1NVQ0NFU1MpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJDb3VsZG4ndCBnZXQgcm9vdCBub2RlIChlcnJvciAlZClcbiIsIGVycm9yX2NvZGUpKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorCisgICAgZXJyb3JfY29kZSA9IHByb2Nlc3Nfc2Vuc29ycygwLCByb290aCk7CisgICAgaWYgKCBlcnJvcl9jb2RlICE9IDI1NSApCisgICAgICAgIGlmICggZXJyb3JfY29kZSAhPSA3ICkgIC8qIGlnbm9yZSBQSUNMX1BST1BOT1RGT1VORCBlcnJvciAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJJbnRlcm5hbCBQSUNMZCBwcm9ibGVtIChlcnJvciAlZClcbiIsIGVycm9yX2NvZGUpKTsKKworICAgIHJldHVybiAwOworfQorCit2b2lkIG5ldHNubXBfc2Vuc29yX2FyY2hfc2h1dGRvd24oIHZvaWQgKSB7CisgICAgREVCVUdNU0dUTCgoInNlbnNvcnM6YXJjaCIsICJTaHV0ZG93biBQaWNMRCBTZW5zb3JzIG1vZHVsZVxuIikpOworICAgIHBpY2xfc2h1dGRvd24oKTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmggYi9hZ2VudC9taWJncm91cC9oYXJkd2FyZS9zZW5zb3JzL3BpY2xkX3NlbnNvcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWZmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaGFyZHdhcmUvc2Vuc29ycy9waWNsZF9zZW5zb3JzLmgKQEAgLTAsMCArMSBAQAorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvc2Vuc29ycy9od19zZW5zb3JzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYyBiL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmMKaW5kZXggYzM4NWVkZS4uZDM0ZDkwNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguYworKysgYi9hZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5jCkBAIC01LDkgKzUsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTIxLDYgKzE4LDEzIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJoZWFkZXJfY29tcGxleC5oIgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhlYWRlcl9jb21wbGV4X2FsbCwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihoZWFkZXJfY29tcGxleF9mcmVlX2FsbCwgaGVhZGVyX2NvbXBsZXhfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnksIGhlYWRlcl9jb21wbGV4X2FsbCkKKwogaW50CiBoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV92YXJvaWQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKQogewpAQCAtOTQsNyArOTgsNyBAQAogICAgIGlmICh2YXItPm5hbWVfbGVuZ3RoID4gTUFYX09JRF9MRU4pIHsKICAgICAgICAgREVCVUdNU0dUTCgoImhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX3Zhcm9pZCIsCiAgICAgICAgICAgICAgICAgICAgICJTb21ldGhpbmcgdGVycmlibHkgd3JvbmcsIG5hbWVsZW4gPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lX2xlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAoaW50KXZhci0+bmFtZV9sZW5ndGgpKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KIApAQCAtMTMwLDcgKzEzNCw3IEBACiAgICAgICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YobG9uZyk7CiAgICAgICAgICAgICBvaWRMZW4tLTsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJoZWFkZXJfY29tcGxleF9wYXJzZV9vaWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnNlZCBpbnQoJWQpOiAlZFxuIiwgdmFyLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnNlZCBpbnQoJWQpOiAlbGRcbiIsIHZhci0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICp2YXItPnZhbC5pbnRlZ2VyKSk7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzQwLDggKzM0NCw5IEBACiB9CiAKIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCi1oZWFkZXJfY29tcGxleF9hZGRfZGF0YShzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKip0aGVkYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCB2b2lkICpkYXRhKQoraGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGEoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb250X2FsbG93X2R1cGxpY2F0ZXMpCiB7CiAgICAgb2lkICAgICAgICAgICAgIG5ld29pZFtNQVhfT0lEX0xFTl07CiAgICAgc2l6ZV90ICAgICAgICAgIG5ld29pZF9sZW47CkBAIC0zNTIsNyArMzU3LDggQEAKIAogICAgIGhlYWRlcl9jb21wbGV4X2dlbmVyYXRlX29pZChuZXdvaWQsICZuZXdvaWRfbGVuLCBOVUxMLCAwLCB2YXIpOwogICAgIHJldCA9Ci0gICAgICAgIGhlYWRlcl9jb21wbGV4X2FkZF9kYXRhX2J5X29pZCh0aGVkYXRhLCBuZXdvaWQsIG5ld29pZF9sZW4sIGRhdGEpOworICAgICAgICBoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YV9ieV9vaWQodGhlZGF0YSwgbmV3b2lkLCBuZXdvaWRfbGVuLCBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9udF9hbGxvd19kdXBsaWNhdGVzKTsKICAgICAvKgogICAgICAqIGZyZWUgdGhlIHZhcmlhYmxlIGxpc3QsIGJ1dCBub3QgdGhlIGVuY2xvc2VkIGRhdGEhICBpdCdzIG5vdCBvdXJzISAKICAgICAgKi8KQEAgLTM2MSwzNCArMzY3LDIxIEBACiB9CiAKIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCi1oZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBuZXdvaWQsIHNpemVfdCBuZXdvaWRfbGVuLCB2b2lkICpkYXRhKQoraGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgdm9pZCAqZGF0YSkKIHsKLSAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cm4sICpoY2lwdHJwLCAqb3Vyc2VsZjsKLSAgICBpbnQgcmM7CisgICAgcmV0dXJuCisgICAgICAgIGhlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKHRoZWRhdGEsIHZhciwgZGF0YSwgMCk7Cit9CiAKLSAgICBpZiAodGhlZGF0YSA9PSBOVUxMIHx8IG5ld29pZCA9PSBOVUxMIHx8IGRhdGEgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBmb3IgKGhjaXB0cm4gPSAqdGhlZGF0YSwgaGNpcHRycCA9IE5VTEw7Ci0gICAgICAgICBoY2lwdHJuICE9IE5VTEw7IGhjaXB0cnAgPSBoY2lwdHJuLCBoY2lwdHJuID0gaGNpcHRybi0+bmV4dCkgewotICAgICAgICAvKgotICAgICAgICAgKiBYWFg6IGNoZWNrIGZvciA9PSBhbmQgZXJyb3IgKG92ZXJsYXBwaW5nIHRhYmxlIGVudHJpZXMpIAotICAgICAgICAgKiA4LzIwMDUgcmtzIE9rLCBJIGFkZGVkIGR1cGxpY2F0ZSBlbnRyeSBjaGVjaywgYnV0IG9ubHkgbG9nCi0gICAgICAgICAqICAgICAgICAgICAgd2FybmluZyBhbmQgY29udGludWUsIGJlY2F1c2UgaXQgc2VlbXMgdGhhdCBub2JvZHkKLSAgICAgICAgICogICAgICAgICAgICB0aGF0IGNhbGxzIHRoaXMgZnVjbnRpb24gZG9lcyBlcnJvciBjaGVja2luZyEuCi0gICAgICAgICAqLwotICAgICAgICByYyA9IHNubXBfb2lkX2NvbXBhcmUoaGNpcHRybi0+bmFtZSwgaGNpcHRybi0+bmFtZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld29pZCwgbmV3b2lkX2xlbik7Ci0gICAgICAgIGlmIChyYyA+IDApCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZWxzZSBpZiAoMCA9PSByYykgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJoZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQgd2l0aCAiCi0gICAgICAgICAgICAgICAgICAgICAiZHVwbGljYXRlIGluZGV4LlxuIik7Ci0gICAgICAgICAgICAvKiogdW5jb21tZW50IG51bGwgcmV0dXJuIHdoZW4gY2FsbGVycyBkbyBlcnJvciBjaGVja2luZyAqLwotICAgICAgICAgICAgLyoqIHJldHVybiBOVUxMOyAqLwotICAgICAgICB9Ci0gICAgfQorc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoKK19oZWFkZXJfY29tcGxleF9hZGRfYmV0d2VlbihzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKip0aGVkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRycCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhjaXB0cm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmV3b2lkLCBzaXplX3QgbmV3b2lkX2xlbiwgdm9pZCAqZGF0YSkKK3sKKyAgICBzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKm91cnNlbGY7CiAKICAgICAvKgogICAgICAqIG5wdHIgc2hvdWxkIG5vdyBwb2ludCB0byB0aGUgc3BvdCB0aGF0IHdlIG5lZWQgdG8gYWRkIG91cnNlbHZlcwpAQCAtNDAwLDYgKzM5Myw4IEBACiAgICAgICovCiAgICAgb3Vyc2VsZiA9IChzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKikKICAgICAgICAgU05NUF9NQUxMT0NfU1RSVUNUKGhlYWRlcl9jb21wbGV4X2luZGV4KTsKKyAgICBpZiAob3Vyc2VsZiA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCiAgICAgICogY2hhbmdlIG91ciBwb2ludGVycyAKQEAgLTQzMCw2ICs0MjUsNTAgQEAKICAgICByZXR1cm4gaGNpcHRycDsKIH0KIAorCitzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKgoraGVhZGVyX2NvbXBsZXhfbWF5YmVfYWRkX2RhdGFfYnlfb2lkKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmV3b2lkLCBzaXplX3QgbmV3b2lkX2xlbiwgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZG9udF9hbGxvd19kdXBsaWNhdGVzKQoreworICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpcHRybiwgKmhjaXB0cnA7CisgICAgaW50IHJjOworCisgICAgaWYgKHRoZWRhdGEgPT0gTlVMTCB8fCBuZXdvaWQgPT0gTlVMTCB8fCBkYXRhID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm9yIChoY2lwdHJuID0gKnRoZWRhdGEsIGhjaXB0cnAgPSBOVUxMOworICAgICAgICAgaGNpcHRybiAhPSBOVUxMOyBoY2lwdHJwID0gaGNpcHRybiwgaGNpcHRybiA9IGhjaXB0cm4tPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBjaGVjayBmb3IgPT0gYW5kIGVycm9yIChvdmVybGFwcGluZyB0YWJsZSBlbnRyaWVzKSAKKyAgICAgICAgICogOC8yMDA1IHJrcyBPaywgSSBhZGRlZCBkdXBsaWNhdGUgZW50cnkgY2hlY2ssIGJ1dCBvbmx5IGxvZworICAgICAgICAgKiAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLCBiZWNhdXNlIGl0IHNlZW1zIHRoYXQgbm9ib2R5CisgICAgICAgICAqICAgICAgICAgICAgdGhhdCBjYWxscyB0aGlzIGZ1Y250aW9uIGRvZXMgZXJyb3IgY2hlY2tpbmchLgorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBzbm1wX29pZF9jb21wYXJlKGhjaXB0cm4tPm5hbWUsIGhjaXB0cm4tPm5hbWVsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdvaWQsIG5ld29pZF9sZW4pOworICAgICAgICBpZiAocmMgPiAwKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGVsc2UgaWYgKDAgPT0gcmMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGFfYnlfb2lkIHdpdGggIgorICAgICAgICAgICAgICAgICAgICAgImR1cGxpY2F0ZSBpbmRleC5cbiIpOworICAgICAgICAgICAgaWYgKGRvbnRfYWxsb3dfZHVwbGljYXRlcykKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBfaGVhZGVyX2NvbXBsZXhfYWRkX2JldHdlZW4odGhlZGF0YSwgaGNpcHRycCwgaGNpcHRybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld29pZCwgbmV3b2lkX2xlbiwgZGF0YSk7Cit9CisKK3N0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqCitoZWFkZXJfY29tcGxleF9hZGRfZGF0YV9ieV9vaWQoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBuZXdvaWQsIHNpemVfdCBuZXdvaWRfbGVuLCB2b2lkICpkYXRhKQoreworICAgIHJldHVybiBoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YV9ieV9vaWQodGhlZGF0YSwgbmV3b2lkLCBuZXdvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgMCk7Cit9CisKIC8qCiAgKiBleHRyYWN0cyBhbiBlbnRyeSBmcm9tIHRoZSBzdG9yYWdlIHNwYWNlIChyZW1vdmluZyBpdCBmcm9tIGZ1dHVyZQogICogYWNjZXNzZXMpIGFuZCByZXR1cm5zIHRoZSBkYXRhIHN0b3JlZCB0aGVyZQpAQCAtNDg2LDYgKzUyNSw3IEBACiAvKgogICogY29tcGxldGVseSB3aXBlIG91dCBhbGwgZW50cmllcyBpbiBvdXIgZGF0YSBzdG9yZSAKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hFQURFUl9DT01QTEVYX0ZSRUVfQUxMCiB2b2lkCiBoZWFkZXJfY29tcGxleF9mcmVlX2FsbChzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKnRoZXN0dWZmLAogICAgICAgICAgICAgICAgICAgICAgICAgSGVhZGVyQ29tcGxleENsZWFuZXIgKiBjbGVhbmVyKQpAQCAtNDk3LDcgKzUzNyw5IEBACiAgICAgICAgIGhlYWRlcl9jb21wbGV4X2ZyZWVfZW50cnkoaGNpcHRyLCBjbGVhbmVyKTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9IRUFERVJfQ09NUExFWF9GUkVFX0FMTCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSEVBREVSX0NPTVBMRVhfRklORF9FTlRSWQogc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoKIGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICp0aGVzdHVmZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdGhlZW50cnkpCkBAIC01MDgsNiArNTUwLDcgQEAKICAgICAgICAgIGhjaXB0ciA9IGhjaXB0ci0+bmV4dCk7CiAgICAgcmV0dXJuIGhjaXB0cjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0hFQURFUl9DT01QTEVYX0ZJTkRfRU5UUlkgKi8KIAogI2lmZGVmIFRFU1RJTkcKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaCBiL2FnZW50L21pYmdyb3VwL2hlYWRlcl9jb21wbGV4LmgKaW5kZXggMjAyOGNlZS4uMmExNzI4YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaGVhZGVyX2NvbXBsZXguaAorKysgYi9hZ2VudC9taWJncm91cC9oZWFkZXJfY29tcGxleC5oCkBAIC01Nyw2ICs1NywxMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnRoZWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhciwgdm9pZCAqZGF0YSk7CitzdHJ1Y3QgaGVhZGVyX2NvbXBsZXhfaW5kZXggKmhlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqKnRoZWRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGRvbnRfYWxsb3dfZHVwbGljYXRlcyk7CiAKIC8qCiAgKiBOb3RlOiBuZXdvaWQgaXMgY29waWVkL2Nsb25lZCBmb3IgeW91IApAQCAtNjgsNSArNzIsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3b2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEpOworc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICpoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YV9ieV9vaWQoc3RydWN0IGhlYWRlcl9jb21wbGV4X2luZGV4ICoqdGhlZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5ld29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb250X2FsbG93X2R1cGxpY2F0ZXMpOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9IRUFERVJfQ09NUExFWF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0LmggYi9hZ2VudC9taWJncm91cC9ob3N0LmgKaW5kZXggNGI3ODcwNi4uZThlNjU1OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QuaApAQCAtMiw5ICsyLDE4IEBACiAgKiAgSG9zdCBSZXNvdXJjZXMgJ3dyYXBwZXInIGludGVyZmFjZQogICoJY2FsbHMgdGhlIHBlci1ncm91cCBpbnRlcmZhY2VzIGZyb20gJ2hyXyouaCcKICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKIAljb25maWdfcmVxdWlyZShob3N0L2hyX3N5c3RlbSkKLQljb25maWdfcmVxdWlyZShob3N0L2hyX3N0b3JhZ2UpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9kZXZpY2UpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9vdGhlcikKIAljb25maWdfcmVxdWlyZShob3N0L2hyX3Byb2MpCkBAIC0xMiw5ICsyMSwxMiBAQAogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfcHJpbnQpCiAJY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9kaXNrKQogCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfcGFydGl0aW9uKQotCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZmlsZXN5cykKLQljb25maWdfcmVxdWlyZShob3N0L2hyX3N3cnVuKQotCWNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfc3dpbnN0KQorCisJY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoaG9zdC9ocl9zdG9yYWdlLCA1LjcsIGhvc3QvaHJoX3N0b3JhZ2UpKQorCWNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGhvc3QvaHJfZmlsZXN5cywgNS43LCBob3N0L2hyaF9maWxlc3lzKSkKKworCWNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGhvc3QvaHJfc3dpbnN0LCAgNS42LCBob3N0L2hyU1dJbnN0YWxsZWRUYWJsZSkpCisJY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoaG9zdC9ocl9zd3J1biwgICA1LjYsIGhvc3QvaHJTV1J1blRhYmxlKSkKIAogLyogYWRkIHRoZSBob3N0IHJlc291cmNlcyBtaWIgdG8gdGhlIGRlZmF1bHQgbWlicyB0byBsb2FkICovCiBjb25maWdfYWRkX21pYihIT1NULVJFU09VUkNFUy1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWYwNWU5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuYwpAQCAtMCwwICsxLDIyNCBAQAorLyoKKyAqIHN3aW5zdC5jIDogaHJTV0luc3RhbGxlZFRhYmxlIGRhdGEgYWNjZXNzCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc29mdHdhcmVfaW5zdGFsbGVkLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN3aW5zdF9lbnRyeV9yZW1vdmUsIG5ldHNubXBfdW51c2VkKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCitzdGF0aWMgdm9pZCBuZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlX2NiKG5ldHNubXBfc3dpbnN0X2VudHJ5ICosIHZvaWQgKik7CisKK2V4dGVybiB2b2lkIG5ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCh2b2lkKTsKK2V4dGVybiB2b2lkIG5ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24odm9pZCk7CitleHRlcm4gaW50IG5ldHNubXBfc3dpbnN0X2FyY2hfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqLCB1X2ludCk7CisKK3ZvaWQgaW5pdF9zd2luc3QoIHZvaWQgKQoreworICAgIHN0YXRpYyBpbnQgaW5pdGlhbGl6ZWQgPSAwOworCisgICAgREVCVUdNU0dUTCgoInN3aW5zdCIsICJpbml0IGNhbGxlZFxuIikpOworCisgICAgaWYgKGluaXRpYWxpemVkKQorICAgICAgICByZXR1cm47IC8qIGFscmVhZHkgaW5pdGlhbGl6ZWQgKi8KKworCisgICAgLyoKKyAgICAgKiBjYWxsIGFyY2ggaW5pdCBjb2RlCisgICAgICovCisgICAgbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KCk7Cit9CisKK3ZvaWQgc2h1dGRvd25fc3dpbnN0KCB2b2lkICkKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0IiwgInNodXRkb3duIGNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93bigpOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogbG9hZCBhIGNvbnRhaW5lciB3aXRoIGluc3RhbGxlZCBzb2Z0d2FyZS4gSWYgdXNlcl9jb250YWluZXIgaXMgTlVMTCwKKyAqIGEgbmV3IGNvbnRhaW5lciB3aWxsIGJlIGFsbG9jYXRlZCBhbmQgcmV0dXJuZWQsIGFuZCB0aGUgY2FsbGVyCisgKiBpcyByZXNwb25zaWJsZSBmb3IgcmVsZWFzaW5nIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHdoZW4gZG9uZS4KKyAqCisgKiBpZiBmbGFncyBjb250YWlucyBORVRTTk1QX1NXSU5TVF9BTExfT1JfTk9ORSBhbmQgYW55IGVycm9yIG9jY3VycywKKyAqIHRoZSBjb250YWluZXIgd2lsbCBiZSBjb21wbGV0ZWx5IGNsZWFyZWQuCisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqdXNlcl9jb250YWluZXIsIGludCBmbGFncyApCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IHVzZXJfY29udGFpbmVyOworICAgIGludCBhcmNoX3JjOworCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpjb250YWluZXIiLCAibG9hZFxuIikpOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lciwgaWYgbmVlZGVkCisgICAgICovCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInN3aW5zdDp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGlmIChOVUxMID09IGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUpCisgICAgICAgIGNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInN3aW5zdCBjb250YWluZXIiKTsKKworICAgIC8qCisgICAgICogY2FsbCB0aGUgYXJjaCBzcGVjaWZpYyBjb2RlIHRvIGxvYWQgdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIGFyY2hfcmMgPSBuZXRzbm1wX3N3aW5zdF9hcmNoX2xvYWQoIGNvbnRhaW5lciwgZmxhZ3MgKTsKKyAgICBpZiAoYXJjaF9yYyAmJiAoZmxhZ3MgJiBORVRTTk1QX1NXSU5TVF9BTExfT1JfTk9ORSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY2FsbGVyIGRvZXMgbm90IHdhbnQgYSBwYXJ0aWFsIGxvYWQsIHNvIGVtcHR5IHRoZSBjb250YWluZXIuCisgICAgICAgICAqIGlmIHdlIGNyZWF0ZWQgdGhlIGNvbnRhaW5lciwgZGVzdHJveSBpdC4KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisgICAgICAgIGlmIChjb250YWluZXIgIT0gdXNlcl9jb250YWluZXIpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgZmxhZ3MpOworICAgICAgICB9CisgICAgfQorICAgIAorICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZyZWVfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpjb250YWluZXIiLCAiZnJlZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBmb3IgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfU1dJTlNUX0RPTlRfRlJFRV9JVEVNUykpCisgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisKKyAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOworfQorCisvKgorICogZnJlZSBhIHN3aW5zdCBjb250YWluZXIKKyAqLwordm9pZCBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcyhuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6Y29udGFpbmVyIiwgImZyZWVfaXRlbXNcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKiluZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlX2NiLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgCisgKi8KK25ldHNubXBfc3dpbnN0X2VudHJ5ICoKK25ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZShpbnQzMl90IHN3SW5kZXgpCit7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3dpbnN0X2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT5zd0luZGV4ID0gc3dJbmRleDsKKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gJmVudHJ5LT5zd0luZGV4OworCisgICAgZW50cnktPnN3VHlwZSA9IEhSU1dJTlNUQUxMRURUWVBFX0FQUExJQ0FUSU9OOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKgorICogZnJlZSBhIHJvdworICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9lbnRyeV9mcmVlKG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmVudHJ5OmZyZWUiLCAiaW5kZXggJSIgTkVUU05NUF9QUklvICJ1XG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zd0luZGV4KSk7CisKKyAgICBmcmVlKGVudHJ5KTsKK30KKworLyoKKyAqIGZyZWUgYSByb3cKKyAqLworc3RhdGljIHZvaWQKK25ldHNubXBfc3dpbnN0X2VudHJ5X2ZyZWVfY2IobmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5LCB2b2lkICpjb250ZXh0KQoreworICAgIGZyZWUoZW50cnkpOworfQorCisvKgorICogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlIAorICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1dJTlNUX0VOVFJZX1JFTU9WRQordm9pZAorbmV0c25tcF9zd2luc3RfZW50cnlfcmVtb3ZlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICplbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmNvbnRhaW5lciIsICJyZW1vdmVcbiIpKTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworICAgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCBlbnRyeSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV0lOU1RfRU5UUllfUkVNT1ZFICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZmRlZiBURVNUCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICAgIGNvbnN0IGNoYXIgKnRva2VucyA9IGdldGVudigiU05NUF9ERUJVRyIpOworCisgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisKKyAgICAvKiogc3dpbnN0LHZlcmJvc2U6c3dpbnN0ICovCisgICAgaWYgKHRva2VucykKKyAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKHRva2Vucyk7CisgICAgZWxzZQorICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoInN3aW5zdCIpOworICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKKworICAgIGluaXRfc3dpbnN0KCk7CisgICAgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisgICAgc2h1dGRvd25fc3dpbnN0KCk7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3QuaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRhM2U0NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIHN3aW5zdCBkYXRhIGFjY2VzcyBoZWFkZXIKKyAqCisgKiAkSWQ6IHN3aW5zdC5oIDE1MzQ2IDIwMDYtMDktMjYgMjM6MzQ6NTBaIHJzdG9yeSAkCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfU1dJTlNUX0NPTkZJR19ICisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NXSU5TVF9DT05GSUdfSAorCisvKgorICogYWxsIHBsYXRmb3JtcyB1c2UgdGhpcyBnZW5lcmljIGNvZGUKKyAqLworY29uZmlnX2V4Y2x1ZGUoaG9zdC9ocl9zd2luc3QpCisKKy8qCisgKiBzZWxlY3QgdGhlIGFwcHJvcHJpYXRlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBpbnRlcmZhY2UgY29kZQorICovCisjaWYgICBkZWZpbmVkKCBkYXJ3aW4gKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2RhcndpbikKKyNlbGlmIGRlZmluZWQoIEhBVkVfRFBLR19RVUVSWSApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfYXB0KQorI2VsaWYgZGVmaW5lZCggSEFWRV9MSUJSUE0gKSAmJiBkZWZpbmVkKCBsaW51eCApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtKQorI2VsaWYgZGVmaW5lZCggSEFWRV9QS0dMT0NTX0ggKSB8fCBkZWZpbmVkKCBocHV4OSApIHx8IGRlZmluZWQoIGhwdXgxMCApIHx8IGRlZmluZWQoIGhwdXgxMSApIHx8IGRlZmluZWQoIGZyZWVic2QyICkgfHwgZGVmaW5lZCggbGludXggKSB8fCBkZWZpbmVkKCBvcGVuYnNkICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvKQorI2Vsc2UKKyAgICBjb25maWdfd2FybmluZyhUaGlzIHBsYXRmb3JtIGRvZXMgbm90IHlldCBzdXBwb3J0IGhyU1dJbnN0YWxsZWRUYWJsZSByZXdyaXRlcykKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9udWxsKQorI2VuZGlmCisKK3ZvaWQgaW5pdF9zd2luc3QoIHZvaWQgKTsKK3ZvaWQgc2h1dGRvd25fc3dpbnN0KCB2b2lkICk7CisKKyNlbmRpZiAvKiBORVRTTk1QX0FDQ0VTU19TV0lOU1RfQ09ORklHX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfYXB0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2MDZkMgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2FwdC5jCkBAIC0wLDAgKzEsMTAxIEBACisvKgorICogc3dpbnN0X3JwbS5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorCitjaGFyIHBrZ19kaXJlY3RvcnlbU05NUF9NQVhCVUZdOworc3RhdGljIGNoYXIgYXB0X2ZtdFtTTk1QX01BWEJVRl07CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX2luaXQodm9pZCkKK3sKKyAgICBzdHJsY3B5KHBrZ19kaXJlY3RvcnksICIvdmFyL2xpYi9kcGtnL2luZm8iLCBzaXplb2YocGtnX2RpcmVjdG9yeSkpOworICAgIHNucHJpbnRmKGFwdF9mbXQsIFNOTVBfTUFYQlVGLCAiJSUlZFteI10jJSUlZFteI10jJSUlZFteI10jJSUlZFteI10jJSUlZFteI10jJSUlZHMiLAorCVNOTVBfTUFYQlVGLTEsIFNOTVBfTUFYQlVGLTEsIFNOTVBfTUFYQlVGLTEsCisJU05NUF9NQVhCVUYtMSwgU05NUF9NQVhCVUYtMSwgU05NUF9NQVhCVUYtMSk7Cit9CisKK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfc2h1dGRvd24odm9pZCkKK3sKKyAgICAgLyogTm90aGluZyB0byBkbyAqLworICAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfc3dpbnN0X2FyY2hfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgRklMRSAqcCA9IHBvcGVuKCJkcGtnLXF1ZXJ5IC0tc2hvdyAtLXNob3dmb3JtYXQgJyR7UGFja2FnZX0jJHtWZXJzaW9ufSMke1NlY3Rpb259IyR7UHJpb3JpdHl9IyR7RXNzZW50aWFsfSMke1N0YXR1c31cbiciLCAiciIpOworICAgIGNoYXIgcGFja2FnZVtTTk1QX01BWEJVRl07CisgICAgY2hhciB2ZXJzaW9uW1NOTVBfTUFYQlVGXTsKKyAgICBjaGFyIHNlY3Rpb25bU05NUF9NQVhCVUZdOworICAgIGNoYXIgcHJpb3JpdHlbU05NUF9NQVhCVUZdOworICAgIGNoYXIgZXNzZW50aWFsW1NOTVBfTUFYQlVGXTsKKyAgICBjaGFyIHN0YXR1c1tTTk1QX01BWEJVRl07CisgICAgY2hhciBidWZbQlVGU0laXTsKKyAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnk7CisgICAgaW50IGkgPSAwOworCisgICAgaWYgKHAgPT0gTlVMTCkgeworCXNubXBfcGVycm9yKCJkcGtnLWxpc3QiKTsKKwlyZXR1cm4gMTsKKyAgICB9CisKKyAgICB3aGlsZSAoZmdldHMoYnVmLCBCVUZTSVosIHApKSB7CisJREVCVUdNU0coKCJzd2luc3RfYXB0IiwgImVudHJ5OiAlc1xuIiwgYnVmKSk7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd2luc3RfZW50cnlfY3JlYXRlKCBpKysgKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisJc3NjYW5mKGJ1ZiwgYXB0X2ZtdCwgcGFja2FnZSwgdmVyc2lvbiwgc2VjdGlvbiwgcHJpb3JpdHksIGVzc2VudGlhbCwgc3RhdHVzKTsKKwlpZiAoc3Ryc3RyKHN0YXR1cywgIm5vdC1pbnN0YWxsZWQiKSkKKwkgICAgY29udGludWU7CisKKyAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzbnByaW50ZiggZW50cnktPnN3TmFtZSwgc2l6ZW9mKGVudHJ5LT5zd05hbWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMtJXMiLCBwYWNrYWdlLCB2ZXJzaW9uKTsKKwlpZiAoZW50cnktPnN3TmFtZV9sZW4gPj0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorCSAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKS0xOworICAgICAgICBlbnRyeS0+c3dUeXBlID0gKHN0cmNtcChlc3NlbnRpYWwsICJ5ZXMiKSA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICA6IDQ7ICAgICAvKiAgYXBwbGljYXRpb24gICAgKi8KKworICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IDg7CisJbWVtY3B5KGVudHJ5LT5zd0RhdGUsICJcMFwwXDFcMVwwXDBcMFwwIiwgOCk7CisgICAgfQorICAgIHBjbG9zZShwKTsKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KSBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E0NzM3MgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X2Rhcndpbi5jCkBAIC0wLDAgKzEsMzk5IEBACisvKgorICogc3dpbnN0LmMgOiBoclNXSW5zdGFsbGVkVGFibGUgZGF0YSBhY2Nlc3MKKyAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKKyNkZWZpbmUgX19BUFBMRV9BUElfRVZPTFZJTkcgMQorI2luY2x1ZGUgPHN5cy9hY2wuaD4gLyogb3IgZWxzZSBDb3JlRm91bmRhdGlvbi5oIGJhcmZzICovCisjdW5kZWYgX19BUFBMRV9BUElfRVZPTFZJTkcgCisKKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgorI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2aWNlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZGlyZWN0b3J5KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGF0ZV9uX3RpbWUpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitzdGF0aWMgaW50IF9hZGRfYXBwbGljYXRpb25zX2luX2RpcihuZXRzbm1wX2NvbnRhaW5lciAqLCBjb25zdCBjaGFyKiBwYXRoKTsKK3N0YXRpYyBpbnQzMl90IF9pbmRleDsKK3N0YXRpYyBpbnQgX2NoZWNrX2J1bmRsZWRfYXBwKENGVVJMUmVmIGN1cnJlbnRVUkwsIENGU3RyaW5nUmVmICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgKmluZm8sIGNvbnN0IGNoYXIqIHBhdGgpOworc3RhdGljIGludCBfY2hlY2tfY2xhc3NpY19hcHAoQ0ZVUkxSZWYgY3VycmVudFVSTCwgQ0ZTdHJpbmdSZWYgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ1JlZiAqaW5mbywgY29uc3QgY2hhciogcGF0aCk7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKmRpcnMgPSBOVUxMOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KCB2b2lkICkKK3sKKyAgICBzdHJ1Y3Qgc3RhdCBzdGF0X2J1ZjsKKyAgICBjb25zdCBjaGFyICpkZWZhdWx0X2RpcnNbXSA9IHsKKyAgICAgICAgIi9BcHBsaWNhdGlvbnMiLAorICAgICAgICAiL0FwcGxpY2F0aW9ucyAoTWFjIE9TIDkpIiwKKyAgICAgICAgIi9TeXN0ZW0vTGlicmFyeS9Db3JlU2VydmljZXMiLAorICAgICAgICAiL1N5c3RlbS9MaWJyYXJ5L0V4dGVuc2lvbnMiLAorICAgICAgICAiL1N5c3RlbS9MaWJyYXJ5L1NlcnZpY2VzIgorI2lmZGVmIFRFU1QKKyAgICAgICAgLCAiL0RldmVsb3Blci9BcHBsaWNhdGlvbnMiCisgICAgICAgICwgIi9Wb2x1bWVzL2F1ZFgvQXBwbGljYXRpb25zIChNYWMgT1MgOSkiCisjZW5kaWYKKyAgICB9OworICAgIGludCBpLCBjb3VudCA9IHNpemVvZihkZWZhdWx0X2RpcnMpL3NpemVvZihkZWZhdWx0X2RpcnNbMF0pOworCisgICAgLyoKKyAgICAgKiBjcmVhdGUgdGhlIGNvbnRhaW5lciwgaWYgbmVlZGVkCisgICAgICovCisgICAgaWYgKE5VTEwgPT0gZGlycykgeworICAgICAgICBkaXJzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZGlyZWN0b3J5X2NvbnRhaW5lcjpjc3RyaW5nIik7CisgICAgICAgIGlmIChOVUxMID09IGRpcnMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBhbGxvY2F0ZSBjb250YWluZXIgZm9yIGRpciBsaXN0XG4iKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkaXJzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiZGlyZWN0b3J5IHNlYXJjaCBsaXN0Iik7CisgICAgICAgIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KGRpcnMsIDEsIENPTlRBSU5FUl9LRVlfVU5TT1JURUQpOworICAgIH0KKworICAgIC8qCisgICAgICogYWRkIGRpcnMKKyAgICAgKi8KKyAgICBmb3IoaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIGNoYXIgKiAgICAgIHRtcDsKKyAgICAgICAgLyoqIHh4eDogZ2V0L3NhdmUgdGhlIGxhc3QgbW9kIGRhdGU/ICovCisgICAgICAgIGlmKC0xID09IHN0YXQoZGVmYXVsdF9kaXJzW2ldLCAmc3RhdF9idWYpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgInNraXBwaW5nIGRpciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZGlyc1tpXSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJhZGRpbmcgZGlyICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdF9kaXJzW2ldKSk7CisgICAgICAgIHRtcCA9IHN0cmR1cChkZWZhdWx0X2RpcnNbaV0pOworICAgICAgICBpZiAoTlVMTCA9PSB0bXApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsInN0cmR1cCBmYWlsZWRcbiIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChkaXJzLCB0bXApOworICAgIH0KK30KKwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93biggdm9pZCApCit7CisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoZGlycyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyApCit7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICppdDsKKyAgICBjb25zdCBjaGFyICAgICAgICAgKmRpcjsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBkaXJzKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAibm8gZGlycyB0byBzY2FuIVxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgX2luZGV4ID0gMDsKKyAgICAKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihkaXJzKTsKKyAgICBmb3IgKGRpciA9IElURVJBVE9SX0ZJUlNUKGl0KTsgZGlyOyBkaXIgPSBJVEVSQVRPUl9ORVhUKGl0KSkgeworICAgICAgICByYyA9IF9hZGRfYXBwbGljYXRpb25zX2luX2Rpcihjb250YWluZXIsIGRpcik7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAibG9hZGVkICVkIGFwcHNcbiIsX2luZGV4KSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK19kdW1wX2ZsYWdzKHVfbG9uZyBmbGFncykKK3sKKyAgICBzdGF0aWMgc3RydWN0IHsKKyAgICAgICAgY29uc3QgY2hhcipuYW1lOworICAgICAgICB1X2xvbmcgYml0czsKKyAgICB9IG5hbWVzW10gPSB7CisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNQbGFpbkZpbGUiLCAweDAwMDAwMDAxIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNQYWNrYWdlIiwgMHgwMDAwMDAwMiB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzQXBwbGljYXRpb24iLCAweDAwMDAwMDA0IH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNDb250YWluZXIiLCAweDAwMDAwMDA4IH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNBbGlhc0ZpbGUiLCAweDAwMDAwMDEwIH0sCisgICAgICAgIHsgImtMU0l0ZW1JbmZvSXNTeW1saW5rIiwgMHgwMDAwMDAyMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzSW52aXNpYmxlIiwgMHgwMDAwMDA0MCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzTmF0aXZlQXBwIiwgMHgwMDAwMDA4MCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0lzQ2xhc3NpY0FwcCIsIDB4MDAwMDAxMDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9BcHBQcmVmZXJzTmF0aXZlIiwgMHgwMDAwMDIwMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0FwcFByZWZlcnNDbGFzc2ljIiwgMHgwMDAwMDQwMCB9LAorICAgICAgICB7ICJrTFNJdGVtSW5mb0FwcElzU2NyaXB0YWJsZSIsIDB4MDAwMDA4MDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9Jc1ZvbHVtZSIsIDB4MDAwMDEwMDAgfSwKKyAgICAgICAgeyAia0xTSXRlbUluZm9FeHRlbnNpb25Jc0hpZGRlbiIsIDB4MDAxMDAwMDAgfQorICAgIH07CisgICAgaW50IGksIGNvdW50ID0gc2l6ZW9mKG5hbWVzKS9zaXplb2YobmFtZXNbMF0pOworCisgICAgZm9yKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBpZiAoZmxhZ3MgJiBuYW1lc1tpXS5iaXRzKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luOmZsYWdzIiwgIlx0JXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG5hbWVzW2ldLm5hbWUpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludAorX2FkZF9hcHBsaWNhdGlvbnNfaW5fZGlyKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGNvbnN0IGNoYXIqIHBhdGgpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgICpmaWxlczsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgKml0OworICAgIGNvbnN0IGNoYXIgICAgICAgICAqZmlsZTsKKyAgICBuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIHN0cnVjdCBzdGF0CSAgICAgICAgc3RhdF9idWY7CisgICAgc2l6ZV90ICAgICAgICAgICAgICBkYXRlX2xlbjsKKyAgICB1X2NoYXIgICAgICAgICAgICAgKmRhdGVfYnVmOworICAgIGludCAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgQ0ZTdHJpbmdSZWYgICAgICAgICBjdXJyZW50UGF0aCA9IE5VTEw7CisgICAgQ0ZVUkxSZWYgICAgICAgICAgICBjdXJyZW50VVJMID0gTlVMTDsKKyAgICBMU0l0ZW1JbmZvUmVjb3JkICAgIGl0ZW1JbmZvUmVjb3JkOworICAgIENGU3RyaW5nUmVmICAgICAgICAgcHJvZE5hbWUgPSBOVUxMOworICAgIENGU3RyaW5nUmVmICAgICAgICAgdmVyc2lvbiA9IE5VTEw7CisgICAgCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsICIgYWRkaW5nIGZpbGVzIGZyb20gJXNcbiIsIHBhdGgpKTsKKyAgICBmaWxlcyA9IG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKE5VTEwsIHBhdGgsIDApOworICAgIGlmIChOVUxMID09IGZpbGVzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzd2luc3Q6IGNvdWxkIG5vdCByZWFkIGRpcmVjdG9yeSAlc1xuIiwgcGF0aCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihmaWxlcyk7CisgICAgaWYgKE5VTEwgPT0gaXQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3JcbiIpOworICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShmaWxlcyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZm9yIChmaWxlID0gSVRFUkFUT1JfRklSU1QoaXQpOworICAgICAgICAgZmlsZTsKKyAgICAgICAgIGZpbGUgPSBJVEVSQVRPUl9ORVhUKGl0KSwKKyAgICAgICAgICAgICBDRlJlbGVhc2UoY3VycmVudFBhdGgpLAorICAgICAgICAgICAgIENGUmVsZWFzZShjdXJyZW50VVJMKSkgeworCisgICAgICAgIGludCAgICAgICAgICAgICAgICAgcmMyID0gMDsKKyAgICAgICAgCisgICAgICAgIGN1cnJlbnRQYXRoID0KKyAgICAgICAgICAgIENGU3RyaW5nQ3JlYXRlV2l0aENTdHJpbmdOb0NvcHkoa0NGQWxsb2NhdG9yRGVmYXVsdCwgZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NGU3RyaW5nRW5jb2RpbmdVVEY4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0ZBbGxvY2F0b3JOdWxsKTsKKyAgICAgICAgY3VycmVudFVSTCA9CisgICAgICAgICAgICBDRlVSTENyZWF0ZVdpdGhGaWxlU3lzdGVtUGF0aChrQ0ZBbGxvY2F0b3JEZWZhdWx0LCBjdXJyZW50UGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDRlVSTFBPU0lYUGF0aFN0eWxlLCB0cnVlKTsgCisgICAgICAgIExTQ29weUl0ZW1JbmZvRm9yVVJMKGN1cnJlbnRVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtMU1JlcXVlc3RCYXNpY0ZsYWdzT25seXxrTFNSZXF1ZXN0QXBwVHlwZUZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaXRlbUluZm9SZWNvcmQpOyAKKyAgICAgICAgaWYoKDAgPT0gaXRlbUluZm9SZWNvcmQuZmxhZ3MpIHx8CisgICAgICAgICAgIChrTFNJdGVtSW5mb0lzUGxhaW5GaWxlID09IGl0ZW1JbmZvUmVjb3JkLmZsYWdzKSB8fAorICAgICAgICAgICAoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzSW52aXNpYmxlKSB8fAorICAgICAgICAgICAoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzQWxpYXNGaWxlKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyoqIHJlY3Vyc2Ugb24gbm9uLWFwcGxpY2F0aW9uIGNvbnRhaW5lcnMgKGkuZS4gZGlyZWN0b3J5KSAqLworICAgICAgICBpZiAoKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0NvbnRhaW5lcikgJiYKKyAgICAgICAgICAgICghKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0FwcGxpY2F0aW9uKSkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKGZpbGVzLCBmaWxlLCAwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgIH0KKworICAgICAgICAvKiogc2tpcCBhbnkgb3RoZXIgbm9uLWFwcGxpY2F0aW9uIGZpbGVzICovCisgICAgICAgIGlmICghKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0FwcGxpY2F0aW9uKSkgeworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgfQorCisgICAgICAgIGlmICgoaXRlbUluZm9SZWNvcmQuZmxhZ3MgJiBrTFNJdGVtSW5mb0lzUGFja2FnZSkgfHwgICAgICAgICAgIAorICAgICAgICAgICAgKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0NvbnRhaW5lcikpIHsKKyAgICAgICAgICAgIHJjMiA9IF9jaGVja19idW5kbGVkX2FwcChjdXJyZW50VVJMLCAmcHJvZE5hbWUsICZ2ZXJzaW9uLCBmaWxlKTsKKyAgICAgICAgfSAKKyAgICAgICAgZWxzZSBpZiAoKGl0ZW1JbmZvUmVjb3JkLmZsYWdzICYga0xTSXRlbUluZm9Jc0NsYXNzaWNBcHApIHx8CisgICAgICAgICAgICAgICAgIChpdGVtSW5mb1JlY29yZC5mbGFncyAmIGtMU0l0ZW1JbmZvSXNQbGFpbkZpbGUpKSB7CisgICAgICAgICAgICByYzIgPSBfY2hlY2tfY2xhc3NpY19hcHAoY3VycmVudFVSTCwgJnByb2ROYW1lLCAmdmVyc2lvbiwgZmlsZSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJzd2luc3Qgc2hvdWxkbid0IGdldCBoZXJlOiAlc1xuIiwgZmlsZSk7CisgICAgICAgICAgICBfZHVtcF9mbGFncyhpdGVtSW5mb1JlY29yZC5mbGFncyk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMyKSB7IC8qIG5vdCBhbiBhcHAuIGlmIGRpcmVjdG9yeSwgcmVjdXJzZTsgZWxzZSBjb250aW51ZSAqLworICAgICAgICAgICAgX2R1bXBfZmxhZ3MoaXRlbUluZm9SZWNvcmQuZmxhZ3MpOworICAgICAgICAgICAgaWYgKDEgPT0gcmMyKQorICAgICAgICAgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkKGZpbGVzLCBmaWxlLCAwKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBhbGxvY2F0ZSBlbnRyeQorICAgICAgICAgKi8KKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3aW5zdF9lbnRyeV9jcmVhdGUoKytfaW5kZXgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIHN3aW5zdCBlbnRyeVxuIik7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgU05NUF9DRlJlbGVhc2UocHJvZE5hbWUpOworICAgICAgICAgICAgU05NUF9DRlJlbGVhc2UodmVyc2lvbik7CisgICAgICAgICAgICBDRlJlbGVhc2UoY3VycmVudFBhdGgpOworICAgICAgICAgICAgQ0ZSZWxlYXNlKGN1cnJlbnRVUkwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9CisgICAgICAgICAgICBzbnByaW50ZihlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisgICAgICAgICAgICAgICAgICAgICAiJXMgJXMiLCBDRlN0cmluZ0dldENTdHJpbmdQdHIocHJvZE5hbWUsMCksCisgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0dldENTdHJpbmdQdHIodmVyc2lvbiwwKSk7CisJaWYgKGVudHJ5LT5zd05hbWVfbGVuID49IHNpemVvZihlbnRyeS0+c3dOYW1lKSkKKwkgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSktMTsKKworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIlx0JXMgJXNcbiIsIGZpbGUsIGVudHJ5LT5zd05hbWUpKTsKKworICAgICAgICAvKiogZ2V0IHRoZSBsYXN0IG1vZCBkYXRlICovCisgICAgICAgIGlmKHN0YXQoZmlsZSwgJnN0YXRfYnVmKSAhPSAtMSkgeworICAgICAgICAgICAgZGF0ZV9idWYgPSBkYXRlX25fdGltZSgmc3RhdF9idWYuc3RfbXRpbWUsICZkYXRlX2xlbik7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5zd0RhdGUsIGRhdGVfYnVmLCBlbnRyeS0+c3dEYXRlX2xlbik7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgICAgIGVudHJ5ID0gTlVMTDsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UocHJvZE5hbWUpOworICAgICAgICBTTk1QX0NGUmVsZWFzZSh2ZXJzaW9uKTsKKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdCk7CisgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoZmlsZXMpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CitfY2hlY2tfYnVuZGxlZF9hcHAoQ0ZVUkxSZWYgY3VycmVudFVSTCwgQ0ZTdHJpbmdSZWYgKnByb2ROYW1lLAorICAgICAgICAgICAgICAgICAgIENGU3RyaW5nUmVmICp2ZXJzaW9uLCBjb25zdCBjaGFyKiBmaWxlKQoreworICAgIENGQnVuZGxlUmVmICAgICAgICAgdGhlQnVuZGxlID0gTlVMTDsKKyAgICBDRkRpY3Rpb25hcnlSZWYgICAgIGluZm9EaWN0ID0gTlVMTDsKKyAgICAgICAgICAgIAorICAgIGlmICgoTlVMTCA9PSBwcm9kTmFtZSkgfHwgKE5VTEwgPT0gdmVyc2lvbikpCisgICAgICAgcmV0dXJuIC0xOworCisgICAgdGhlQnVuZGxlID0gQ0ZCdW5kbGVDcmVhdGUgKGtDRkFsbG9jYXRvckRlZmF1bHQsIGN1cnJlbnRVUkwpOworICAgIGlmKHRoZUJ1bmRsZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gLTE7IC8qIG5vdCBhIGJ1bmRsZSAqLworCisgICAgaW5mb0RpY3QgPSBDRkJ1bmRsZUdldEluZm9EaWN0aW9uYXJ5KHRoZUJ1bmRsZSk7CisgICAgaWYoMCA9PSBDRkRpY3Rpb25hcnlHZXRDb3VudChpbmZvRGljdCkpIHsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UodGhlQnVuZGxlKTsKKyAgICAgICAgcmV0dXJuIDE7IC8qIGRpcmVjdG9yeSAqLworICAgIH0KKworICAgICpwcm9kTmFtZSA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LCBDRlNUUigiQ0ZCdW5kbGVOYW1lIikpOworICAgIGlmIChOVUxMID09ICpwcm9kTmFtZSkgeworICAgICAgICAqcHJvZE5hbWUgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZSAoaW5mb0RpY3QsIENGU1RSKCJDRkJ1bmRsZURpc3BsYXlOYW1lIikpOworICAgICAgICBpZiAoTlVMTCA9PSAqcHJvZE5hbWUpIHsKKyAgICAgICAgICAgICpwcm9kTmFtZSA9IChDRlN0cmluZ1JlZikgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDRlNUUigiQ0ZCdW5kbGVFeGVjdXRhYmxlIikpOworICAgICAgICB9CisgICAgfQorICAgIGlmKE5VTEwgPT0gKnByb2ROYW1lKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6YXJjaDpkYXJ3aW4iLCAiXHRtaXNzaW5nIG5hbWU6ICVzXG4iLGZpbGUpKTsKKyAgICAgICAgLypDRlNob3coaW5mb0RpY3QpOyovCisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKHRoZUJ1bmRsZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqdmVyc2lvbiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUgKGluZm9EaWN0LCBDRlNUUigiQ0ZCdW5kbGVTaG9ydFZlcnNpb25TdHJpbmciKSk7CisgICAgaWYoTlVMTCA9PSAqdmVyc2lvbikgeworICAgICAgICAqdmVyc2lvbiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwgQ0ZTVFIoIkNGQnVuZGxlVmVyc2lvbiIpKTsKKyAgICAgICAgaWYgKCp2ZXJzaW9uID09IE5VTEwpIAorICAgICAgICAgICAgKnZlcnNpb24gPSAoQ0ZTdHJpbmdSZWYpIENGRGljdGlvbmFyeUdldFZhbHVlIChpbmZvRGljdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0ZTVFIoIkNGQnVuZGxlR2V0SW5mb1N0cmluZyIpKTsKKyAgICB9CisgICAgaWYoTlVMTCA9PSAqdmVyc2lvbikgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIlx0bWlzc2luZyB2ZXJzaW9uOiAlc1xuIixmaWxlKSk7CisgICAgICAgIC8qQ0ZTaG93KGluZm9EaWN0KTsqLworICAgICAgICBTTk1QX0NGUmVsZWFzZSh0aGVCdW5kbGUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIGlmKHRoZUJ1bmRsZSAhPSBOVUxMKSB7CisgICAgICAgIENGUmV0YWluKCpwcm9kTmFtZSk7CisgICAgICAgIENGUmV0YWluKCp2ZXJzaW9uKTsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UodGhlQnVuZGxlKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19jaGVja19jbGFzc2ljX2FwcChDRlVSTFJlZiBjdXJyZW50VVJMLCBDRlN0cmluZ1JlZiAqcHJvZE5hbWUsCisgICAgICAgICAgICAgICAgICAgQ0ZTdHJpbmdSZWYgKnZlcnNpb24sIGNvbnN0IGNoYXIqIGZpbGUpCit7CisgICAgLyoKKyAgICAgKiBnZXQgaW5mbyBmb3IgY2xhc3NpYyBvciBzaW5nbGUtZmlsZSBhcHBzCisgICAgICovCisgICAgRlNSZWYgdGhlRlNSZWY7CisgICAgaW50IHRoZVJlc0ZpbGU7CisKKyAgICBpZiAoKE5VTEwgPT0gcHJvZE5hbWUpIHx8IChOVUxMID09IHZlcnNpb24pKQorICAgICAgIHJldHVybiAtMTsKKworICAgICpwcm9kTmFtZSA9IENGVVJMQ29weUxhc3RQYXRoQ29tcG9uZW50KGN1cnJlbnRVUkwpOworICAgIGlmICghIENGVVJMR2V0RlNSZWYoY3VycmVudFVSTCwgJnRoZUZTUmVmKSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIkdldEZTUmVmIGZhaWxlZDogJXNcbiIsIGZpbGUpKTsKKyAgICAgICAgU05NUF9DRlJlbGVhc2UoKnByb2ROYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB0aGVSZXNGaWxlID0gRlNPcGVuUmVzRmlsZSgmdGhlRlNSZWYsIGZzUmRQZXJtKTsKKyAgICBpZiAoUmVzRXJyb3IoKSAhPSBub0VycikgeworICAgICAgICBERUJVR01TR1RMKCgic3dpbnN0OmFyY2g6ZGFyd2luIiwgIkZTT3BlblJlc0ZpbGUgZmFpbGVkOiAlc1xuIiwgZmlsZSkpOworICAgICAgICBTTk1QX0NGUmVsZWFzZSgqcHJvZE5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIFZlcnNSZWNIbmRsIHZlcnNIYW5kbGUgPSAoVmVyc1JlY0huZGwpR2V0MUluZFJlc291cmNlKCd2ZXJzJywgMSk7CisgICAgaWYgKHZlcnNIYW5kbGUgIT0gTlVMTCkgeworICAgICAgICAqdmVyc2lvbiA9IENGU3RyaW5nQ3JlYXRlV2l0aFBhc2NhbFN0cmluZyhrQ0ZBbGxvY2F0b3JEZWZhdWx0LAorICAgICAgICAgICAgICAgICAgICAgICAoKip2ZXJzSGFuZGxlKS5zaG9ydFZlcnNpb24sIGtDRlN0cmluZ0VuY29kaW5nTWFjUm9tYW4pOworICAgICAgICBpZiAoKnZlcnNpb24gPT0gTlVMTCkgeworICAgICAgICAgICAgU3RyaW5nUHRyIGxvbmdWZXJzaW9uUHRyID0gKCoqdmVyc0hhbmRsZSkuc2hvcnRWZXJzaW9uOworICAgICAgICAgICAgbG9uZ1ZlcnNpb25QdHIgPSAoU3RyaW5nUHRyKSgoKFB0cikgbG9uZ1ZlcnNpb25QdHIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEgKyAoKHVuc2lnbmVkIGNoYXIpICpsb25nVmVyc2lvblB0cikpOworICAgICAgICAgICAgKnZlcnNpb24gPSBDRlN0cmluZ0NyZWF0ZVdpdGhQYXNjYWxTdHJpbmcoa0NGQWxsb2NhdG9yRGVmYXVsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ1ZlcnNpb25QdHIsICBrQ0ZTdHJpbmdFbmNvZGluZ01hY1JvbWFuKTsKKyAgICAgICAgfQorICAgICAgICBSZWxlYXNlUmVzb3VyY2UoKEhhbmRsZSl2ZXJzSGFuZGxlKTsKKyAgICB9CisgICAgQ2xvc2VSZXNGaWxlKHRoZVJlc0ZpbGUpOworICAgIGlmKCp2ZXJzaW9uID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3aW5zdDphcmNoOmRhcndpbiIsCisgICAgICAgICAgICAgICAgICAgICJcdG1pc3NpbmcgY2xhc3NpYy9maWxlIHZlcnNpb246ICVzXG4iLCBmaWxlKSk7CisgICAgICAgIFNOTVBfQ0ZSZWxlYXNlKCpwcm9kTmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0X251bGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGY5MTU4Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfbnVsbC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiBzd2luc3RfbnVsbC5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBkdW1teSBpbnRlcmZhY2UgZm9yIG5vbi1zdXBwb3J0ZWQgc3lzdGVtcworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX3NodXRkb3duKHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDpsb2FkOmFyY2giLCIgbG9hZGVkICUiIE5FVFNOTVBfUFJJeiAiZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcGtnaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMjJjYjEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9wa2dpbmZvLmMKQEAgLTAsMCArMSwyMTkgQEAKKy8qCisgKiBzd2luc3RfcGtnaW5mby5jOgorICogICAgIGhyU1dJbnN0YWxsZWRUYWJsZSBkYXRhIGFjY2VzczoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEtHTE9DU19ICisjaW5jbHVkZSA8cGtnbG9jcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9QS0dJTkZPX0gKKyNpbmNsdWRlIDxwa2dpbmZvLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUEtHX0gKKyNkZWZpbmUgcmVzdHJpY3QKKyNpbmNsdWRlIDxwa2cuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGVfbl90aW1lKQorCisgICAvKgorICAgICogTG9jYXRpb24gb2YgcGFja2FnZSBkaXJlY3RvcnkuCisgICAgKiBVc2VkIGZvcjoKKyAgICAqICAgIC0gcmVwb3J0aW5nIGhyU1dJbnN0YWxsZWRMYXN0KiBvYmplY3RzCisgICAgKiAgICAtIGRldGVjdGluZyB3aGVuIHRoZSBjYWNoZWQgY29udGVudHMgYXJlIG91dCBvZiBkYXRlLgorICAgICovCitjaGFyIHBrZ19kaXJlY3RvcnlbU05NUF9NQVhQQVRIXTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfc3dpbnN0X2FyY2hfaW5pdCh2b2lkKQoreworI2lmIGRlZmluZWQoUEtHTE9DKQorICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIlcyIsIFBLR0xPQyApOworI2VsaWYgZGVmaW5lZChocHV4OSkKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiL3N5c3RlbSIgKTsKKyNlbGlmIGRlZmluZWQoaHB1eDEwKSB8fCAgZGVmaW5lZChocHV4MTEpIAorICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIvdmFyL2FkbS9zdy9wcm9kdWN0cyIgKTsKKyNlbGlmIGRlZmluZWQoZnJlZWJzZDIpIHx8IGRlZmluZWQob3BlbmJzZCkKKyAgICBzbnByaW50ZiggcGtnX2RpcmVjdG9yeSwgU05NUF9NQVhQQVRILCAiL3Zhci9kYi9wa2ciICk7CisjZWxpZiBkZWZpbmVkKGxpbnV4KQorICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIvdmFyL2NhY2hlL2hybWliIiApOworI2Vsc2UKKyAgICBwa2dfZGlyZWN0b3J5WzBdID0gJ1wwJzsKKyAgICBzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogTm8gcGFja2FnZSBkaXJlY3RvcnlcbiIgKTsKKyNlbmRpZgorCisgICAgREVCVUdNU0dUTCgoInN3aW5zdDppbml0OmFyY2giLCIgcGFja2FnZSBkaXJlY3RvcnkgPSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGtnX2RpcmVjdG9yeSkpOworICAgIHJldHVybjsKK30KKwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9zaHV0ZG93bih2b2lkKQoreworICAgIHBrZ19kaXJlY3RvcnlbMF0gPSAnXDAnOworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9zd2luc3RfYXJjaF9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICAqZDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICAqZHA7CisgICAgc3RydWN0IHN0YXQgICAgICAgICAgIHN0YXRfYnVmOworI2lmZGVmIEhBVkVfUEtHSU5GTworICAgIGNoYXIgICAgICAgICAgICAgICAgICp2LCAqYzsKKyNlbmRpZgorICAgIGNoYXIgICAgICAgICAgICAgICAgICBidWZbIEJVRlNJWiBdOworICAgIHVuc2lnbmVkIGNoYXIgICAgICAgICpjcDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgaW5zdGFsbF90aW1lOworICAgIHNpemVfdCAgICAgICAgICAgICAgICBkYXRlX2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgaSA9IDE7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworI2lmZGVmIEhBVkVfTElCUEtHCisgICAgc3RydWN0IHBrZ2RiICpkYiA9IE5VTEw7CisgICAgc3RydWN0IHBrZ2RiX2l0ICppdCA9IE5VTEw7CisgICAgc3RydWN0IHBrZyAqcGtnID0gTlVMTDsKKyAgICBjaGFyIHBrZ25hbWVbIFNOTVBfTUFYUEFUSCBdOworICAgIGNoYXIgcGtnZGF0ZVsgQlVGU0laIF07CisgICAgaW50IHBrZ25nID0gMDsKKworICAgIGlmIChwa2dfaW5pdChOVUxMLCBOVUxMKSkgeworICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogZXJyb3IgaW5pdGlhbGl6aW5nIHBrZ25nIGRiXG4iICk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIGlmIChwa2dkYl9vcGVuKCZkYiwgUEtHREJfREVGQVVMVCkgIT0gRVBLR19PSykgeworCXNubXBfbG9nKCBMT0dfRVJSLCAiU1dJbnN0OiBlcnJvciBvcGVuaW5nIHBrZ25nIGRiXG4iICk7CisJcmV0dXJuIDE7CisgICAgfQorCisgICAgaWYgKHBrZ19zdGF0dXMoTlVMTCkgPT0gUEtHX1NUQVRVU19BQ1RJVkUpIHsKKwlwa2duZyA9IDE7CisgICAgfSBlbHNlIHsKKwlzbm1wX2xvZyggTE9HX0lORk8sICJTV0luc3Q6IG5vdCBhIHBrZ25nIHN5c3RlbVxuIiApOworICAgIH0KKworICAgIC8qIGlmIHdlIGFyZSB1c2luZyBGcmVlQlNEJ3MgcGtnbmcgKi8KKyAgICBpZiAocGtnbmcpIHsKKyAgICAgICAgaWYgKChpdCA9IHBrZ2RiX3F1ZXJ5KGRiLCBOVUxMLCBNQVRDSF9BTEwpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2xvZyggTE9HX0VSUiwgIlNXSW5zdDogZXJyb3IgcXVlcnlpbmcgcGtnbmcgZGJcbiIgKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICAgICAgd2hpbGUgKHBrZ2RiX2l0X25leHQoaXQsICZwa2csIFBLR19MT0FEX0JBU0lDKSA9PSBFUEtHX09LKSB7CisgICAgICAgICAgICBwa2dfc25wcmludGYocGtnbmFtZSwgc2l6ZW9mKHBrZ25hbWUpLCAiJW4tJXYiLCBwa2csIHBrZyk7CisgICAgICAgICAgICBwa2dfc25wcmludGYocGtnZGF0ZSwgc2l6ZW9mKHBrZ2RhdGUpLCAiJXQiLCBwa2cpOworCisgICAgICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZSggaSsrICk7CisKKyAgICAgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc25wcmludGYoIGVudHJ5LT5zd05hbWUsIHNpemVvZihlbnRyeS0+c3dOYW1lKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHBrZ25hbWUgKTsKKyAgICAgICAgICAgIGlmIChlbnRyeS0+c3dOYW1lX2xlbiA+PSBzaXplb2YoZW50cnktPnN3TmFtZSkpCisgICAgICAgICAgICAgICAgZW50cnktPnN3TmFtZV9sZW4gPSBzaXplb2YoZW50cnktPnN3TmFtZSktMTsKKworICAgICAgICAgICAgaW5zdGFsbF90aW1lID0gYXRvaShwa2dkYXRlKTsKKyAgICAgICAgICAgIGNwID0gZGF0ZV9uX3RpbWUoICZpbnN0YWxsX3RpbWUsICZkYXRlX2xlbiApOworICAgICAgICAgICAgbWVtY3B5KCBlbnRyeS0+c3dEYXRlLCBjcCwgZGF0ZV9sZW4gKTsKKyAgICAgICAgICAgIGVudHJ5LT5zd0RhdGVfbGVuID0gZGF0ZV9sZW47CisgICAgICAgIH0KKworICAgICAgICBwa2dkYl9pdF9mcmVlKGl0KTsKKyAgICAgICAgcGtnZGJfY2xvc2UoZGIpOworICAgICAgICBwa2dfc2h1dGRvd24oKTsKKyAgICB9IGVsc2UgeworI2VuZGlmIC8qIEhBVkVfTElCUEtHICovCisgICAgICAgIGlmICggIXBrZ19kaXJlY3RvcnlbMF0gKSB7CisgICAgICAgICAgICByZXR1cm4gMTsgICAgLyogQ2FuJ3QgcmVwb3J0IGluc3RhbGxlZCBwYWNrYWdlcworICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRoZXJlIGlzbid0IGEgbGlzdCBvZiB0aGVtISAqLworICAgICAgICB9CisKKyAgICAgICAgZCA9IG9wZW5kaXIoIHBrZ19kaXJlY3RvcnkgKTsKKyAgICAgICAgaWYgKCFkKQorICAgICAgICAgICAgcmV0dXJuIDE7CisKKyAgICAgICAgd2hpbGUgKChkcCA9IHJlYWRkaXIoZCkpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICggJy4nID09IGRwLT5kX25hbWVbMF0gKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgc25wcmludGYoIGJ1ZiwgQlVGU0laLCAiJXMvJXMiLCBwa2dfZGlyZWN0b3J5LCBkcC0+ZF9uYW1lICk7CisgICAgICAgICAgICBpZiAoc3RhdCggYnVmLCAmc3RhdF9idWYgKSA8IDApCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dpbnN0X2VudHJ5X2NyZWF0ZSggaSsrICk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworI2lmZGVmIEhBVkVfUEtHSU5GTworCSAgICB2ID0gcGtncGFyYW0oIGRwLT5kX25hbWUsICJWRVJTSU9OIiApOworCSAgICBjID0gcGtncGFyYW0oIGRwLT5kX25hbWUsICJDQVRFR09SWSIgKTsKKworCSAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNucHJpbnRmKCBlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisJCQkJCSAgIiVzLSVzIiwgZHAtPmRfbmFtZSwgdiApOworCSAgICBpZiAoZW50cnktPnN3TmFtZV9sZW4gPj0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpKQorCQllbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKS0xOworCSAgICBlbnRyeS0+c3dUeXBlID0gKE5VTEwgIT0gc3Ryc3RyKCBjLCAic3lzdGVtIikpCisJCQkgICAgPyAyICAgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCisJCQkgICAgOiA0OyAgICAgLyogIGFwcGxpY2F0aW9uICAgICovCisKKwkgICAgLyogRG8gd2UgbmVlZCB0byBmcmVlICd2JyAmICdjJyA/Pz8gKi8KKyNlbHNlCisJICAgIGVudHJ5LT5zd05hbWVfbGVuID0gc25wcmludGYoIGVudHJ5LT5zd05hbWUsIHNpemVvZihlbnRyeS0+c3dOYW1lKSwKKwkJCQkJICAiJXMiLCBkcC0+ZF9uYW1lICk7CisJICAgIGlmIChlbnRyeS0+c3dOYW1lX2xlbiA+PSBzaXplb2YoZW50cnktPnN3TmFtZSkpCisJCWVudHJ5LT5zd05hbWVfbGVuID0gc2l6ZW9mKGVudHJ5LT5zd05hbWUpLTE7CisKKwkgICAgLyogbm8gaW5mb3JtYXRpb24gYWJvdXQgTy9TIHZzIGFwcGxpY2F0aW9uIHBhY2thZ2VzID8/PyAqLworI2VuZGlmCisKKwkgICAgaW5zdGFsbF90aW1lID0gc3RhdF9idWYuc3RfbXRpbWU7CisJICAgIGNwID0gZGF0ZV9uX3RpbWUoICZpbnN0YWxsX3RpbWUsICZkYXRlX2xlbiApOworCSAgICBtZW1jcHkoIGVudHJ5LT5zd0RhdGUsIGNwLCBkYXRlX2xlbiApOworCSAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworCX0KKwljbG9zZWRpciggZCApOworI2lmZGVmIEhBVkVfTElCUEtHCisgICAgfQorI2VuZGlmCisKKyAgICBERUJVR01TR1RMKCgic3dpbnN0OmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3aW5zdF9ycG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU5NWJlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd2luc3RfcnBtLmMKQEAgLTAsMCArMSwxNTYgQEAKKy8qCisgKiBzd2luc3RfcnBtLmM6CisgKiAgICAgaHJTV0luc3RhbGxlZFRhYmxlIGRhdGEgYWNjZXNzOgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1JQTV9SUE1MSUJfSAorI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfUlBNX1JQTUxJQl9ICisjaW5jbHVkZSA8cnBtL2hlYWRlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9SUE1HRVRQQVRICQkvKiBIQVZFX1JQTV9SUE1NQUNST19IICovCisjaW5jbHVkZSA8cnBtL3JwbW1hY3JvLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1JQTV9SUE1UU19ICisjaW5jbHVkZSA8cnBtL3JwbXRzLmg+CisjaW5jbHVkZSA8cnBtL3JwbWRiLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKworICAgLyoKKyAgICAqIExvY2F0aW9uIG9mIFJQTSBwYWNrYWdlIGRpcmVjdG9yeS4KKyAgICAqIFVzZWQgZm9yOgorICAgICogICAgLSByZXBvcnRpbmcgaHJTV0luc3RhbGxlZExhc3QqIG9iamVjdHMKKyAgICAqICAgIC0gZGV0ZWN0aW5nIHdoZW4gdGhlIGNhY2hlZCBjb250ZW50cyBhcmUgb3V0IG9mIGRhdGUuCisgICAgKi8KK2NoYXIgcGtnX2RpcmVjdG9yeVtTTk1QX01BWFBBVEhdOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9zd2luc3RfYXJjaF9pbml0KHZvaWQpCit7CisgICAgY2hhciAgICAgICAgKnJwbWRicGF0aCA9IE5VTEw7CisgICAgY29uc3QgY2hhciAgKmRicGF0aDsKKyAgICBzdHJ1Y3Qgc3RhdCAgc3RhdF9idWY7CisKKyNpZmRlZiBIQVZFX1JQTUdFVFBBVEgKKyAgICBycG1SZWFkQ29uZmlnRmlsZXMoIE5VTEwsIE5VTEwgKTsKKyAgICBycG1kYnBhdGggPSBycG1HZXRQYXRoKCAiJXtfZGJwYXRofSIsIE5VTEwgKTsKKyAgICBkYnBhdGggPSBycG1kYnBhdGg7CisjZWxzZQorICAgIGRicGF0aCA9ICIvdmFyL2xpYi9ycG0iOyAgIC8qIE1vc3QgbGlrZWx5ICovCisjZW5kaWYKKworICAgIHNucHJpbnRmKCBwa2dfZGlyZWN0b3J5LCBTTk1QX01BWFBBVEgsICIlcy9QYWNrYWdlcyIsIGRicGF0aCApOworICAgIFNOTVBfRlJFRShycG1kYnBhdGgpOworICAgIGRicGF0aCA9IE5VTEw7CisgICAgaWYgKC0xID09IHN0YXQoIHBrZ19kaXJlY3RvcnksICZzdGF0X2J1ZiApKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW4ndCBmaW5kIGRpcmVjdG9yeSBvZiBSUE0gcGFja2FnZXMiKTsKKyAgICAgICAgcGtnX2RpcmVjdG9yeVswXSA9ICdcMCc7CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX3N3aW5zdF9hcmNoX3NodXRkb3duKHZvaWQpCit7CisgICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX3N3aW5zdF9hcmNoX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHJwbXRzICAgICAgICAgICAgICAgICB0czsKKworICAgIHJwbWRiTWF0Y2hJdGVyYXRvciAgICBtaTsKKyAgICBIZWFkZXIgICAgICAgICAgICAgICAgaDsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAqbiwgKnYsICpyLCAqZzsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAqdDsKKyAgICB0aW1lX3QgICAgICAgICAgICAgICAgaW5zdGFsbF90aW1lOworICAgIHNpemVfdCAgICAgICAgICAgICAgICBkYXRlX2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgaSA9IDE7CisgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5OworCisgICAgdHMgPSBycG10c0NyZWF0ZSgpOworICAgIHJwbXRzU2V0VlNGbGFncyggdHMsIChfUlBNVlNGX05PU0lHTkFUVVJFU3xfUlBNVlNGX05PRElHRVNUUykpOworCisgICAgbWkgPSBycG10c0luaXRJdGVyYXRvciggdHMsIFJQTURCSV9QQUNLQUdFUywgTlVMTCwgMCk7CisgICAgaWYgKG1pID09IE5VTEwpCisJTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAicnBtZGJPcGVuKCkgZmFpbGVkXG4iKSk7CisKKyAgICB3aGlsZSAoTlVMTCAhPSAoaCA9IHJwbWRiTmV4dEl0ZXJhdG9yKCBtaSApKSkKKyAgICB7CisgICAgICAgIGNvbnN0IHVfY2hhciAqZHQ7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd2luc3RfZW50cnlfY3JlYXRlKCBpKysgKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIGggPSBoZWFkZXJMaW5rKCBoICk7CisgICAgICAgIGhlYWRlckdldEVudHJ5KCBoLCBSUE1UQUdfTkFNRSwgICAgICAgIE5VTEwsICh2b2lkKiopJm4sIE5VTEwpOworICAgICAgICBoZWFkZXJHZXRFbnRyeSggaCwgUlBNVEFHX1ZFUlNJT04sICAgICBOVUxMLCAodm9pZCoqKSZ2LCBOVUxMKTsKKyAgICAgICAgaGVhZGVyR2V0RW50cnkoIGgsIFJQTVRBR19SRUxFQVNFLCAgICAgTlVMTCwgKHZvaWQqKikmciwgTlVMTCk7CisgICAgICAgIGhlYWRlckdldEVudHJ5KCBoLCBSUE1UQUdfR1JPVVAsICAgICAgIE5VTEwsICh2b2lkKiopJmcsIE5VTEwpOworICAgICAgICBoZWFkZXJHZXRFbnRyeSggaCwgUlBNVEFHX0lOU1RBTExUSU1FLCBOVUxMLCAodm9pZCoqKSZ0LCBOVUxMKTsKKworICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNucHJpbnRmKCBlbnRyeS0+c3dOYW1lLCBzaXplb2YoZW50cnktPnN3TmFtZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcy0lcy0lcyIsIG4sIHYsIHIpOworICAgICAgICBpZiAoZW50cnktPnN3TmFtZV9sZW4gPiBzaXplb2YoZW50cnktPnN3TmFtZSkpCisgICAgICAgICAgICBlbnRyeS0+c3dOYW1lX2xlbiA9IHNpemVvZihlbnRyeS0+c3dOYW1lKTsKKyAgICAgICAgZW50cnktPnN3VHlwZSA9IChOVUxMICE9IHN0cnN0ciggZywgIlN5c3RlbSBFbnZpcm9ubWVudCIpKQorICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgICAgLyogb3BlcmF0aW5nU3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICA6IDQ7ICAgICAvKiAgYXBwbGljYXRpb24gICAgKi8KKworICAgICAgICBpbnN0YWxsX3RpbWUgPSAqdDsKKyAgICAgICAgZHQgPSBkYXRlX25fdGltZSggJmluc3RhbGxfdGltZSwgJmRhdGVfbGVuICk7CisgICAgICAgIGlmIChkYXRlX2xlbiAhPSA4ICYmIGRhdGVfbGVuICE9IDExKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQm9ndXMgbGVuZ3RoIGZyb20gZGF0ZV9uX3RpbWUgZm9yICVzIiwgZW50cnktPnN3TmFtZSk7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+c3dEYXRlX2xlbiA9IGRhdGVfbGVuOworICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5zd0RhdGUsIGR0LCBlbnRyeS0+c3dEYXRlX2xlbik7CisgICAgICAgIH0KKworICAgICAgICBoZWFkZXJGcmVlKCBoICk7CisgICAgfQorICAgIHJwbWRiRnJlZUl0ZXJhdG9yKCBtaSApOworICAgIHJwbXRzRnJlZSggdHMgKTsKKworICAgIERFQlVHTVNHVEwoKCJzd2luc3Q6bG9hZDphcmNoIiwgImxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4ZWE1ZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uYwpAQCAtMCwwICsxLDM1MyBAQAorLyoKKyAqICBTd3J1biBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQ6IHN3cnVuLmMgMTU3NjggMjAwNy0wMS0yMiAxNjoxODoyOVogcnN0b3J5ICQKKyAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNvZnR3YXJlX3J1bm5pbmcsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3dydW5fbWF4X3Byb2Nlc3Nlcywgc29mdHdhcmVfcnVubmluZykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSwgc29mdHdhcmVfcnVubmluZykKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBsb2NhbCBzdGF0aWMgdmFycworICovCitzdGF0aWMgaW50IF9zd3J1bl9pbml0ID0gMDsKKyAgICAgICBpbnQgX3N3cnVuX21heCAgPSAwOworc3RhdGljIG5ldHNubXBfY2FjaGUgICAgICpzd3J1bl9jYWNoZSAgICAgPSBOVUxMOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzd3J1bl9jb250YWluZXIgPSBOVUxMOworCituZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfc3dydW5fY29udGFpbmVyKHZvaWQpOworbmV0c25tcF9jYWNoZSAgICAgKiBuZXRzbm1wX3N3cnVuX2NhY2hlICAgICh2b2lkKTsKKworLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyB2b2lkIF9zd3J1bl9lbnRyeV9yZWxlYXNlKG5ldHNubXBfc3dydW5fZW50cnkgKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkKTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCisgKgorICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCisgKiB0aGUgaGVhZGVyIGZpbGUuCisgKi8KK2V4dGVybiB2b2lkIG5ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpOworZXh0ZXJuIGludCBuZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworCisvKioKKyAqIGluaXRpYWxpemF0aW9uCisgKi8KK3ZvaWQKK2luaXRfc3dydW4odm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46YWNjZXNzIiwgImluaXRcbiIpKTsKKworICAgIGlmICgxID09IF9zd3J1bl9pbml0KQorICAgICAgICByZXR1cm47CisKKyAgICBfc3dydW5faW5pdCA9IDE7CisKKyAgICAodm9pZCluZXRzbm1wX3N3cnVuX2NvbnRhaW5lcigpOworICAgIG5ldHNubXBfYXJjaF9zd3J1bl9pbml0KCk7CisgICAgKHZvaWQpIG5ldHNubXBfc3dydW5fY2FjaGUoKTsKK30KKwordm9pZAorc2h1dGRvd25fc3dydW4odm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46YWNjZXNzIiwgInNodXRkb3duXG4iKSk7CisKK30KKworaW50Citzd3J1bl9jb3VudF9wcm9jZXNzZXMoIHZvaWQgKQoreworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChzd3J1bl9jYWNoZSk7CisgICAgcmV0dXJuICggc3dydW5fY29udGFpbmVyID8gQ09OVEFJTkVSX1NJWkUoc3dydW5fY29udGFpbmVyKSA6IDAgKTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NXUlVOX01BWF9QUk9DRVNTRVMKK2ludAorc3dydW5fbWF4X3Byb2Nlc3Nlcyggdm9pZCApCit7CisgICAgcmV0dXJuIF9zd3J1bl9tYXg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV1JVTl9NQVhfUFJPQ0VTU0VTICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TV1JVTl9DT1VOVF9QUk9DRVNTRVNfQllfTkFNRQoraW50Citzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSggY2hhciAqbmFtZSApCit7CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0OworICAgIGludCBpID0gMDsKKworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChzd3J1bl9jYWNoZSk7CisgICAgaWYgKCAhc3dydW5fY29udGFpbmVyIHx8ICFuYW1lICkKKyAgICAgICAgcmV0dXJuIDA7ICAgIC8qIG9yIC0xICovCisKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUiggc3dydW5fY29udGFpbmVyICk7CisgICAgd2hpbGUgKChlbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5KilJVEVSQVRPUl9ORVhUKCBpdCApKSAhPSBOVUxMKSB7CisgICAgICAgIGlmICgwID09IHN0cmNtcCggZW50cnktPmhyU1dSdW5OYW1lLCBuYW1lICkpCisgICAgICAgICAgICBpKys7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoIGl0ICk7CisKKyAgICByZXR1cm4gaTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NXUlVOX0NPVU5UX1BST0NFU1NFU19CWV9OQU1FICovCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY2FjaGUgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIGludAorX2NhY2hlX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCAgdm9pZCAqbWFnaWMgKQoreworICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2xvYWQoIHN3cnVuX2NvbnRhaW5lciwgMCApOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCAgdm9pZCAqbWFnaWMgKQoreworICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMoIHN3cnVuX2NvbnRhaW5lciApOworICAgIHJldHVybjsKK30KKworLyoqCisgKiBjcmVhdGUgc3dydW4gY2FjaGUKKyAqLworbmV0c25tcF9jYWNoZSAqCituZXRzbm1wX3N3cnVuX2NhY2hlKHZvaWQpCit7CisgICAgb2lkICAgIGhyU1dSdW5UYWJsZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNCwgMiB9OworICAgIHNpemVfdCBoclNXUnVuVGFibGVfb2lkX2xlbiA9IE9JRF9MRU5HVEgoaHJTV1J1blRhYmxlX29pZCk7CisKKyAgICBpZiAoICFzd3J1bl9jYWNoZSApIHsKKyAgICAgICAgc3dydW5fY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAvKiB0aW1lb3V0IGluIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCAgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuVGFibGVfb2lkLCBoclNXUnVuVGFibGVfb2lkX2xlbik7CisgICAgICAgIGlmIChzd3J1bl9jYWNoZSkKKyAgICAgICAgICAgIHN3cnVuX2NhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKyAgICB9CisgICAgcmV0dXJuIHN3cnVuX2NhY2hlOworfQorCisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY29udGFpbmVyIGZ1bmN0aW9ucworICovCisvKioKKyAqIGNyZWF0ZSBzd3J1biBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9zd3J1bl9jb250YWluZXIodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46Y29udGFpbmVyIiwgImluaXRcbiIpKTsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXIuCisgICAgICovCisgIGlmICghc3dydW5fY29udGFpbmVyKSB7CisgICAgc3dydW5fY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgic3dydW46dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gc3dydW5fY29udGFpbmVyKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHN3cnVuX2NvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInN3cnVuIGNvbnRhaW5lciIpOworICB9CisKKyAgICByZXR1cm4gc3dydW5fY29udGFpbmVyOworfQorCisvKioKKyAqIGxvYWQgc3dydW4gaW5mb3JtYXRpb24gaW4gc3BlY2lmaWVkIGNvbnRhaW5lcgorICoKKyAqIEBwYXJhbSBjb250YWluZXIgZW1wdHkgY29udGFpbmVyIHRvIGJlIGZpbGxlZC4KKyAqICAgICAgICAgICAgICAgICAgcGFzcyBOVUxMIHRvIGhhdmUgdGhlIGZ1bmN0aW9uIGNyZWF0ZSBvbmUuCisgKiBAcGFyYW0gbG9hZF9mbGFncyBmbGFncyB0byBtb2RpZnkgYmVoYXZpb3VyLiBFeGFtcGxlczoKKyAqICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU1dSVU5fQUxMX09SX05PTkUKKyAqCisgKiBAcmV0dmFsIE5VTEwgIGVycm9yCisgKiBAcmV0dmFsICFOVUxMIHBvaW50ZXIgdG8gY29udGFpbmVyCisgKi8KK25ldHNubXBfY29udGFpbmVyKgorbmV0c25tcF9zd3J1bl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogdXNlcl9jb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgbmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciA9IHVzZXJfY29udGFpbmVyOworICAgIGludCByYzsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpjb250YWluZXI6bG9hZCIsICJsb2FkXG4iKSk7CisgICAgbmV0c25tcF9hc3NlcnQoMSA9PSBfc3dydW5faW5pdCk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCisgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfc3dydW5fY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBzd3J1blxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gIG5ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworICAgIGlmICgwICE9IHJjKSB7CisgICAgICAgIGlmIChOVUxMID09IHVzZXJfY29udGFpbmVyKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgTkVUU05NUF9TV1JVTl9OT0ZMQUdTKTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfU1dSVU5fQUxMX09SX05PTkUpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpjb250YWluZXI6bG9hZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIGRpc2NhcmRpbmcgcGFydGlhbCByZXN1bHRzXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlX2l0ZW1zKGNvbnRhaW5lcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZyZWVfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX1NXUlVOX0RPTlRfRlJFRV9JVEVNUykpCisgICAgICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMoY29udGFpbmVyKTsKKworICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKK3ZvaWQKK25ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXMobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgic3dydW46Y29udGFpbmVyIiwgImZyZWVfaXRlbXNcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWVfaXRlbXNcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9zd3J1bl9lbnRyeV9yZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30KKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBzd3J1bl9lbnRyeSBmdW5jdGlvbnMKKyAqLworLyoqCisgKi8KK25ldHNubXBfc3dydW5fZW50cnkgKgorbmV0c25tcF9zd3J1bl9lbnRyeV9nZXRfYnlfaW5kZXgobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgb2lkIGluZGV4KQoreworICAgIG5ldHNubXBfaW5kZXggICB0bXA7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46ZW50cnkiLCAiYnlfaW5kZXhcbiIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgxID09IF9zd3J1bl9pbml0KTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfc3dydW5fZW50cnlfZ2V0X2J5X2luZGV4XG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdG1wLmxlbiA9IDE7CisgICAgdG1wLm9pZHMgPSAmaW5kZXg7CisKKyAgICByZXR1cm4gKG5ldHNubXBfc3dydW5fZW50cnkgKikgQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAmdG1wKTsKK30KKworLyoqCisgKi8KK25ldHNubXBfc3dydW5fZW50cnkgKgorbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUoaW50MzJfdCBpbmRleCkKK3sKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9zd3J1bl9lbnRyeSk7CisKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT5oclNXUnVuSW5kZXggPSBpbmRleDsKKyAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAxOyAvKiB1bmtub3duICovCisgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSAyOyAvKiBydW5uYWJsZSAqLworCisgICAgZW50cnktPm9pZF9pbmRleC5sZW4gPSAxOworICAgIGVudHJ5LT5vaWRfaW5kZXgub2lkcyA9IChvaWQgKikgJiBlbnRyeS0+aHJTV1J1bkluZGV4OworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKioKKyAqLworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9zd3J1bl9lbnRyeV9mcmVlKG5ldHNubXBfc3dydW5fZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBTTk1QX0ZSRUUgbm90IG5lZWRlZCwgZm9yIGFueSBvZiB0aGVzZSwgCisgICAgICogc2luY2UgdGhlIHdob2xlIGVudHJ5IGlzIGFib3V0IHRvIGJlIGZyZWVkCisgICAgICovCisgICAgZnJlZShlbnRyeSk7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogVXRpbGl0eSByb3V0aW5lcworICovCisKKy8qKgorICovCitzdGF0aWMgdm9pZAorX3N3cnVuX2VudHJ5X3JlbGVhc2UobmV0c25tcF9zd3J1bl9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7Cit9CisKKworI2lmZGVmIFRFU1QKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgY29uc3QgY2hhciAqdG9rZW5zID0gZ2V0ZW52KCJTTk1QX0RFQlVHIik7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QoKTsKKworICAgIC8qKiBzd3J1bix2ZXJib3NlOnN3cnVuLDk6c3dydW4sODpzd3J1biw1OnN3cnVuICovCisgICAgaWYgKHRva2VucykKKyAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKHRva2Vucyk7CisgICAgZWxzZQorICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoInN3cnVuIik7CisgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKDEpOworCisgICAgaW5pdF9zd3J1bigpOworICAgIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisgICAgc2h1dGRvd25fc3dydW4oKTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlNTNmNQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW4uaApAQCAtMCwwICsxLDU0IEBACisvKgorICogc3dydW4gZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiBzd3J1bi5oIDE1MzQ2IDIwMDYtMDktMjYgMjM6MzQ6NTBaIHJzdG9yeSAkCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfU1dSVU5fQ09ORklHX0gKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU1dSVU5fQ09ORklHX0gKKworLyoKKyAqIGFsbCBwbGF0Zm9ybXMgdXNlIHRoaXMgZ2VuZXJpYyBjb2RlCisgKi8KK2NvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW4pCitjb25maWdfZXhjbHVkZShob3N0L2hyX3N3cnVuKQorCisvKgorICogc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaW50ZXJmYWNlIGNvZGUKKyAqLworI2lmICAgZGVmaW5lZCggZGFyd2luICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2RhcndpbikKKyNlbGlmIGRlZmluZWQoIEhBVkVfU1lTX1BTVEFUX0ggKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQpCisjZWxpZiBkZWZpbmVkKCBkeW5peCApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mbykKKyNlbGlmIGRlZmluZWQoIHNvbGFyaXMyICkKKyMgaWYgX1NMQVNIX1BST0NfTUVUSE9EXworICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mbykKKyMgZWxzZQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MpCisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKCBhaXg0ICkgfHwgZGVmaW5lZCggYWl4NSApIHx8IGRlZmluZWQoIGFpeDYgKSB8fCBkZWZpbmVkKCBhaXg3ICkKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvKQorI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKKyAgICBjb25maWdfcmVxdWlyZShob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvKQorI2VsaWYgZGVmaW5lZCggbGludXggKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cykKKyNlbGlmIGRlZmluZWQoIGN5Z3dpbiApCisgICAgY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4pCisjZWxzZQorICAgIGNvbmZpZ193YXJuaW5nKFRoaXMgcGxhdGZvcm0gZG9lcyBub3QgeWV0IHN1cHBvcnQgaHJTV1J1blRhYmxlIHJld3JpdGVzKQorICAgIGNvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbnVsbCkKKyNlbmRpZgorCit2b2lkIGluaXRfc3dydW4odm9pZCk7Cit2b2lkIHNodXRkb3duX3N3cnVuKHZvaWQpOworCituZXRzbm1wX2NhY2hlICAgICAqbmV0c25tcF9zd3J1bl9jYWNoZSh2b2lkKTsKK25ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcih2b2lkKTsKKworI2VuZGlmIC8qIE5FVFNOTVBfQUNDRVNTX1NXUlVOX0NPTkZJR19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2N5Z3dpbi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWUxNDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9jeWd3aW4uYwpAQCAtMCwwICsxLDI4MSBAQAorLyoKKyAqIHN3cnVuX2N5Z3dpbi5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBDeWd3aW4gaW50ZXJmYWNlIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2luY2x1ZGUgPHN5cy9jeWd3aW4uaD4KKyNpbmNsdWRlIDx0bGhlbHAzMi5oPgorI2luY2x1ZGUgPHBzYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qCisgKiBhIGxvdCBvZiB0aGlzIGlzICJzdG9sZW4iIGZyb20gY3lnd2luIHBzLmNjCisgKi8KKwordHlwZWRlZiAgICAgICAgIEJPT0woV0lOQVBJICogRU5VTVBST0NFU1NNT0RVTEVTKSAoSEFORExFIGhQcm9jZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSAqIGxwaE1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIGNiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBEV09SRCBscGNiTmVlZGVkKTsKKwordHlwZWRlZiAgICAgICAgIERXT1JEKFdJTkFQSSAqIEdFVE1PRFVMRUZJTEVOQU1FKSAoSEFORExFIGhQcm9jZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSBoTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTFBUU1RSIGxwc3RyRklsZU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEV09SRCBuU2l6ZSk7CisKK3R5cGVkZWYgICAgICAgICBEV09SRChXSU5BUEkgKiBHRVRQUk9DRVNTTUVNT1JZSU5GTykgKEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQUk9DRVNTX01FTU9SWV9DT1VOVEVSUworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG1jLCBEV09SRCBuU2l6ZSk7CisKK3R5cGVkZWYgICAgICAgICBIQU5ETEUoV0lOQVBJICogQ1JFQVRFU05BUFNIT1QpIChEV09SRCBkd0ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERXT1JEIHRoMzJQcm9jZXNzSUQpOworCit0eXBlZGVmICAgICAgICAgQk9PTChXSU5BUEkgKiBQUk9DRVNTV0FMSykgKEhBTkRMRSBoU25hcHNob3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQUFJPQ0VTU0VOVFJZMzIgbHBwZSk7CisKK0VOVU1QUk9DRVNTTU9EVUxFUyBteUVudW1Qcm9jZXNzTW9kdWxlczsKK0dFVE1PRFVMRUZJTEVOQU1FIG15R2V0TW9kdWxlRmlsZU5hbWVFeDsKK0NSRUFURVNOQVBTSE9UICBteUNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdDsKK1BST0NFU1NXQUxLICAgICBteVByb2Nlc3MzMkZpcnN0OworUFJPQ0VTU1dBTEsgICAgIG15UHJvY2VzczMyTmV4dDsKK0dFVFBST0NFU1NNRU1PUllJTkZPIG15R2V0UHJvY2Vzc01lbW9yeUluZm8gPSBOVUxMOworY3lnd2luX2dldGluZm9fdHlwZXMgcXVlcnkgPSBDV19HRVRQSU5GTzsKKworc3RhdGljIEJPT0wgV0lOQVBJCitkdW1teXByb2Nlc3Ntb2R1bGVzKEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgSE1PRFVMRSAqIGxwaE1vZHVsZSwgRFdPUkQgY2IsIExQRFdPUkQgbHBjYk5lZWRlZCkKK3sKKyAgICBscGhNb2R1bGVbMF0gPSAoSE1PRFVMRSkgKiBscGNiTmVlZGVkOworICAgICpscGNiTmVlZGVkID0gMTsKKyAgICByZXR1cm4gMTsKK30KKworc3RhdGljIERXT1JEIFdJTkFQSQorR2V0TW9kdWxlRmlsZU5hbWVFeDk1KEhBTkRMRSBoUHJvY2VzcywKKyAgICAgICAgICAgICAgICAgICAgICBITU9EVUxFIGhNb2R1bGUsIExQVFNUUiBscHN0ckZpbGVOYW1lLCBEV09SRCBuKQoreworICAgIEhBTkRMRSAgICAgICAgICBoOworICAgIERXT1JEICAgICAgICAgICBwaWQgPSAoRFdPUkQpIGhNb2R1bGU7CisgICAgUFJPQ0VTU0VOVFJZMzIgIHByb2M7CisKKyAgICBoID0gbXlDcmVhdGVUb29saGVscDMyU25hcHNob3QoVEgzMkNTX1NOQVBQUk9DRVNTLCAwKTsKKyAgICBpZiAoIWgpCisgICAgICAgIHJldHVybiAwOworICAgIHByb2MuZHdTaXplID0gc2l6ZW9mKHByb2MpOworICAgIGlmIChteVByb2Nlc3MzMkZpcnN0KGgsICZwcm9jKSkKKyAgICAgICAgZG8KKyAgICAgICAgICAgIGlmIChwcm9jLnRoMzJQcm9jZXNzSUQgPT0gcGlkKSB7CisgICAgICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaCk7CisgICAgICAgICAgICAgICAgc3RyY3B5KGxwc3RyRmlsZU5hbWUsIHByb2Muc3pFeGVGaWxlKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgd2hpbGUgKG15UHJvY2VzczMyTmV4dChoLCAmcHJvYykpOworICAgIENsb3NlSGFuZGxlKGgpOworICAgIHJldHVybiAwOworfQorCisjZGVmaW5lIEZBQ1RPUiAoMHgxOWRiMWRlZDUzZWE3MTBMTCkKKyNkZWZpbmUgTlNQRVJTRUMgMTAwMDAwMDBMTAorI2RlZmluZSBOU1BFUk1TRUMgMTAwMDBMTAorCitzdGF0aWMgdGltZV90ICAgX19zdGRjYWxsCit0b190aW1lX3QoUEZJTEVUSU1FIHB0cikKK3sKKyAgICBsb25nICAgICAgICAgICAgcmVtOworICAgIGxvbmcgbG9uZyAgICAgICB4ID0KKyAgICAgICAgKChsb25nIGxvbmcpIHB0ci0+ZHdIaWdoRGF0ZVRpbWUgPDwgMzIpICsKKyAgICAgICAgKCh1bnNpZ25lZCkgcHRyLT5kd0xvd0RhdGVUaW1lKTsKKyAgICB4IC09IEZBQ1RPUjsKKyAgICByZW0gPSB4ICUgTlNQRVJTRUM7CisgICAgcmVtICs9IE5TUEVSU0VDIC8gMjsKKyAgICB4IC89IE5TUEVSU0VDOworICAgIHggKz0gcmVtIC8gTlNQRVJTRUM7CisgICAgcmV0dXJuIHg7Cit9CisKK3N0YXRpYyBsb25nCit0b19tc2VjKFBGSUxFVElNRSBwdHIpCit7CisgICAgbG9uZyBsb25nICAgICAgIHggPQorICAgICAgICAoKGxvbmcgbG9uZykgcHRyLT5kd0hpZ2hEYXRlVGltZSA8PCAzMikgKworICAgICAgICAodW5zaWduZWQpIHB0ci0+ZHdMb3dEYXRlVGltZTsKKyAgICB4IC89IE5TUEVSTVNFQzsKKyAgICByZXR1cm4geDsKK30KKworT1NWRVJTSU9OSU5GTyAgIHZlcjsKK0hNT0RVTEUgICAgICAgICBoOworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBtZW1zZXQoJnZlciwgMCwgc2l6ZW9mIHZlcik7CisgICAgdmVyLmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YgdmVyOworICAgIEdldFZlcnNpb25FeCgmdmVyKTsKKworICAgIGlmICh2ZXIuZHdQbGF0Zm9ybUlkID09IFZFUl9QTEFURk9STV9XSU4zMl9OVCkgeworICAgICAgICBoID0gTG9hZExpYnJhcnkoInBzYXBpLmRsbCIpOworICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgbXlFbnVtUHJvY2Vzc01vZHVsZXMgICA9IChFTlVNUFJPQ0VTU01PRFVMRVMpCisgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGgsICJFbnVtUHJvY2Vzc01vZHVsZXMiKTsKKyAgICAgICAgICAgIG15R2V0TW9kdWxlRmlsZU5hbWVFeCAgPSAoR0VUTU9EVUxFRklMRU5BTUUpCisgICAgICAgICAgICAgICAgICAgICAgIEdldFByb2NBZGRyZXNzKGgsICJHZXRNb2R1bGVGaWxlTmFtZUV4QSIpOworICAgICAgICAgICAgbXlHZXRQcm9jZXNzTWVtb3J5SW5mbyA9IChHRVRQUk9DRVNTTUVNT1JZSU5GTykKKyAgICAgICAgICAgICAgICAgICAgICAgR2V0UHJvY0FkZHJlc3MoaCwgIkdldFByb2Nlc3NNZW1vcnlJbmZvIik7CisgICAgICAgICAgICBpZiAobXlFbnVtUHJvY2Vzc01vZHVsZXMgJiYgbXlHZXRNb2R1bGVGaWxlTmFtZUV4KQorICAgICAgICAgICAgICAgIHF1ZXJ5ID0gQ1dfR0VUUElORk9fRlVMTDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaHJfc3dydW4gZmFpbGVkIE5UIGluaXRcbiIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJocl9zd3J1biBmYWlsZWQgdG8gbG9hZCBwc2FwaS5kbGxcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGggPSBHZXRNb2R1bGVIYW5kbGUoIktFUk5FTDMyLkRMTCIpOworICAgICAgICBteUNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdCA9IChDUkVBVEVTTkFQU0hPVCkKKyAgICAgICAgICAgICAgICAgICAgICAgR2V0UHJvY0FkZHJlc3MoaCwgIkNyZWF0ZVRvb2xoZWxwMzJTbmFwc2hvdCIpOworICAgICAgICBteVByb2Nlc3MzMkZpcnN0ID0gKFBST0NFU1NXQUxLKSBHZXRQcm9jQWRkcmVzcyhoLCAiUHJvY2VzczMyRmlyc3QiKTsKKyAgICAgICAgbXlQcm9jZXNzMzJOZXh0ICA9IChQUk9DRVNTV0FMSykgR2V0UHJvY0FkZHJlc3MoaCwgIlByb2Nlc3MzMk5leHQiKTsKKyAgICAgICAgbXlFbnVtUHJvY2Vzc01vZHVsZXMgID0gZHVtbXlwcm9jZXNzbW9kdWxlczsKKyAgICAgICAgbXlHZXRNb2R1bGVGaWxlTmFtZUV4ID0gR2V0TW9kdWxlRmlsZU5hbWVFeDk1OworICAgICAgICBpZiAobXlDcmVhdGVUb29saGVscDMyU25hcHNob3QgJiYgbXlQcm9jZXNzMzJGaXJzdAorICAgICAgICAgICAgJiYgbXlQcm9jZXNzMzJOZXh0KQorI2lmIDAKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIGRvZXNuJ3Qgd29yayBhZnRlciBhbGwgb24gV2luOTggU0UgCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHF1ZXJ5ID0gQ1dfR0VUUElORk9fRlVMTDsKKyNlbHNlCisgICAgICAgICAgICBxdWVyeSA9IENXX0dFVFBJTkZPOworI2VuZGlmCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJocl9zd3J1biBmYWlsZWQgbm9uLU5UIGluaXRcbiIpOworICAgIH0KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgc3RydWN0IGV4dGVybmFsX3BpbmZvICAqY3VycHJvYzsKKyAgICBwaWRfdCAgICAgICAgICAgICAgICAgICBjdXJwaWQgPSAwOworICAgIERXT1JEICAgICAgICAgICAgICAgICAgIG47CisgICAgSEFORExFICAgICAgICAgICAgICAgICAgaDsKKyAgICBGSUxFVElNRSAgICAgICAgICAgICAgICBjdCwgZXQsIGt0LCB1dDsKKyAgICBQUk9DRVNTX01FTU9SWV9DT1VOVEVSUyBwbWM7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICAqY3AxLCAqY3AyOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgICAgKmVudHJ5OworCisgICAgY3lnd2luX2ludGVybmFsKENXX0xPQ0tfUElORk8sIDEwMDApOworICAgIHdoaWxlIChjdXJwcm9jID0gKHN0cnVjdCBleHRlcm5hbF9waW5mbyAqKQorICAgICAgICAgICAgICAgY3lnd2luX2ludGVybmFsKHF1ZXJ5LCBjdXJwaWQgfCBDV19ORVhUUElEKSkgeworCisgICAgICAgIGN1cnBpZCA9IGN1cnByb2MtPnBpZDsKKyAgICAgICAgaWYgKCggUElEX0VYSVRFRCAmIGN1cnByb2MucHJvY2Vzc19zdGF0ZSApIHx8CisgICAgICAgICAgICAgICAoIH4weGZmZmYgJiBjdXJwcm9jLmV4aXRjb2RlICkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShjdXJwaWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworCisgICAgICAgIG4gPSBsb3dwcm9jLmR3UHJvY2Vzc0lkICYgMHhmZmZmOworICAgICAgICBoID0gT3BlblByb2Nlc3MoUFJPQ0VTU19RVUVSWV9JTkZPUk1BVElPTiB8IFBST0NFU1NfVk1fUkVBRCwgRkFMU0UsIG4pOworCisgICAgICAgIGlmIChjdXJwcm9jLnBwaWQpIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPQorICAgICAgICAgICAgICAgIHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpIC0gMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN5Z3dpbl9jb252X3RvX3Bvc2l4X3BhdGgoY3VycHJvYy5wcm9nbmFtZSkpOworICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5ID09IENXX0dFVFBJTkZPX0ZVTEwpIHsKKworICAgICAgICAgICAgaWYgKGgpIHsKKyAgICAgICAgICAgICAgICBITU9EVUxFICAgICAgICAgaG1bMTAwMF07CisgICAgICAgICAgICAgICAgaWYgKCFteUVudW1Qcm9jZXNzTW9kdWxlcyhoLCBobSwgc2l6ZW9mIGhtLCAmbikpCisgICAgICAgICAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAgICAgIGlmIChuICYmIG15R2V0TW9kdWxlRmlsZU5hbWVFeChoLCBobVswXSwgc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Ygc3RyaW5nKSkgeworICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkgLSAxLCBzdHJpbmcpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiBTZXQgaHJTV1J1bk5hbWUgdG8gYmUgdGhlIGxhc3QgY29tcG9uZW50IG9mIGhyU1dSdW5QYXRoLAorICAgICAgICAgKiAgICBidXQgd2l0aG91dCBhbnkgZmlsZSBleHRlbnNpb24KKyAgICAgICAgICovCisgICAgICAgIGlmICggZW50cnktPmhyU1dSdW5QYXRoX2xlbiApIHsKKyAgICAgICAgICAgIGNwMSA9IHN0cnJjaHIoIGVudHJ5LT5oclNXUnVuUGF0aCwgJy4nICk7CisgICAgICAgICAgICBpZiAoIGNwMSApCisgICAgICAgICAgICAgICAgKmNwMSA9ICdcMCc7ICAgIC8qIE1hc2sgdGhlIGZpbGUgZXh0ZW5zaW9uICovCisKKyAgICAgICAgICAgIGNwMiAgPSBzdHJyY2hyKCBlbnRyeS0+aHJTV1J1blBhdGgsICcvJyApOworICAgICAgICAgICAgaWYgKGNwMikgCisgICAgICAgICAgICAgICAgY3AyKys7ICAgICAgICAgICAvKiBGaW5kIHRoZSBmaW5hbCBjb21wb25lbnQgLi4uICovCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgY3AyID0gZW50cnktPmhyU1dSdW5QYXRoOyAgICAgICAgICAvKiAuLi4gaWYgYW55ICovCisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0KKyAgICAgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSAtIDEsIGNwMik7CisKKyAgICAgICAgICAgIGlmICggY3AxICkKKyAgICAgICAgICAgICAgICAqY3AxID0gJy4nOyAgICAgLyogUmVzdG9yZSB0aGUgZmlsZSBleHRlbnNpb24gKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFhYWCAtIE5vIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBwcm9jZXNzIGFyZ3VtZW50cworICAgICAgICAgKiBYWFggLSBObyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgc3lzdGVtIHByb2Nlc3NlcyB2cyBhcHBsaWNhdGlvbnMKKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKFBJRF9TVE9QUEVEICYgY3VycHJvYy5wcm9jZXNzX3N0YXRlICkgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICB9CisgICAgICAvKiAgZWxzZSBpZiAoUElEX1pPTUJJRSAmIGN1cnByb2MucHJvY2Vzc19zdGF0ZSApICAqLworICAgICAgICAgIGVsc2UgaWYgKCAgIH4weGZmZmYgJiBjdXJwcm9jLmV4aXRjb2RlICkKKyAgICAgICAgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgIC8qICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7ICA/PyAqLworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgaWYgKEdldFByb2Nlc3NUaW1lcyhoLCAmY3QsICZldCwgJmt0LCAmdXQpKQorICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSA9ICh0b19tc2VjKCZrdCkgKyB0b19tc2VjKCZ1dCkpIC8gMTA7CisgICAgICAgICAgICBpZiAobXlHZXRQcm9jZXNzTWVtb3J5SW5mbworICAgICAgICAgICAgICAgICYmIG15R2V0UHJvY2Vzc01lbW9yeUluZm8oaCwgJnBtYywgc2l6ZW9mIHBtYykpCisgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtID0gcG1jLldvcmtpbmdTZXRTaXplIC8gMTAyNDsKKworICAgICAgICAgICAgQ2xvc2VIYW5kbGUoaCk7CisgICAgICAgIH0KKyAgICB9CisgICAgY3lnd2luX2ludGVybmFsKENXX1VOTE9DS19QSU5GTyk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9kYXJ3aW4uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2IwMGZlMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fZGFyd2luLmMKQEAgLTAsMCArMSw0OTUgQEAKKy8qCisgKiBzd3J1bl9kYXJ3aW4uYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgRGFyd2luCisgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxsaWJwcm9jLmg+CisjaW5jbHVkZSA8c3lzL3Byb2NfaW5mby5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4JLyogZm9yIHN5c2N0bCgpIGFuZCBzdHJ1Y3Qga2luZm9fcHJvYyAqLworCisjZGVmaW5lIF9fQVBQTEVfQVBJX0VWT0xWSU5HIDEKKyNpbmNsdWRlIDxzeXMvYWNsLmg+IC8qIG9yIGVsc2UgQ29yZUZvdW5kYXRpb24uaCBiYXJmcyAqLworI3VuZGVmIF9fQVBQTEVfQVBJX0VWT0xWSU5HIAorCisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZCYXNlLmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZOdW1iZXIuaD4KKyNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkJ1bmRsZS5oPgorI2luY2x1ZGUgPENvcmVTZXJ2aWNlcy9Db3JlU2VydmljZXMuaD4KKyNpbmNsdWRlIDxJT0tpdC9JT0NGQnVuZGxlLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoLmg+CisjaW5jbHVkZSA8bWFjaC9tYWNoX3RpbWUuaD4KKworLyoqIHNpZ2guLi4gY2FuJ3QgZmluZCBQcm9jZXNzZXMuaCAqLworI2lmbmRlZiBrUHJvY2Vzc0RpY3Rpb25hcnlJbmNsdWRlQWxsSW5mb3JtYXRpb25NYXNrIAorI2RlZmluZSBrUHJvY2Vzc0RpY3Rpb25hcnlJbmNsdWRlQWxsSW5mb3JtYXRpb25NYXNrIChsb25nKTB4RkZGRkZGRkYKKyNlbmRpZgorI2lmbmRlZiBwcm9jTm90Rm91bmQKKyNkZWZpbmUgcHJvY05vdEZvdW5kIC02MDAKKyNlbmRpZgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludCBfa2Vybl9hcmdtYXg7CitzdGF0aWMgaW50IF9zZXRfY29tbWFuZF9uYW1lKG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5KTsKKworLyoqIGF2b2lkIGtlcm5lbCBidWcgaW4gMTAuMi4gODE5MiBvdWdodGEgYmUgZW5vdWdoIGFueXdheXMsIHJpZ2h0PyAqLworI2RlZmluZSBNQVhfS0VSTl9BUkdNQVggODE5MgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICBpbnQgICAgbWliWzJdID0geyBDVExfS0VSTiwgS0VSTl9BUkdNQVggfTsKKyAgICBzaXplX3Qgc2l6ZSwgbWliX3NpemUgPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKyAgICAKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiaW5pdFxuIikpOworCisgICAgc2l6ZSA9IHNpemVvZihfa2Vybl9hcmdtYXgpOworICAgIGlmIChzeXNjdGwobWliLCBtaWJfc2l6ZSwgJl9rZXJuX2FyZ21heCwgJnNpemUsIE5VTEwsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBBUkdNQVggc3lzY3RsKCk6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgX2tlcm5fYXJnbWF4ID0gTUFYX0tFUk5fQVJHTUFYOworICAgIH0KKyAgICBlbHNlIGlmIChfa2Vybl9hcmdtYXggPiBNQVhfS0VSTl9BUkdNQVgpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJhcnRpZmljaWFsbHkgbGltaXRpbmcgQVJHTUFYIHRvICVkIChmcm9tICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgTUFYX0tFUk5fQVJHTUFYLCBfa2Vybl9hcmdtYXgpKTsKKyAgICAgICAgX2tlcm5fYXJnbWF4ID0gTUFYX0tFUk5fQVJHTUFYOworICAgIH0KKworCit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjZGVmaW5lIFNXUlVOSU5ERU5UICIgICAgICAgICAgICIKK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBpbnQJICAgICAgICAgICAgICAgICBtaWJbNF0gPSB7Q1RMX0tFUk4sIEtFUk5fUFJPQywgS0VSTl9QUk9DX0FMTH07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgYnVmX3NpemUsIG1pYl9zaXplID0gc2l6ZW9mKG1pYikvc2l6ZW9mKG1pYlswXSk7CisgICAgc3RydWN0IGtpbmZvX3Byb2MgICAqcHJvY2Vzc2VzID0gTlVMTDsKKyAgICBzdHJ1Y3QgcHJvY190YXNrYWxsaW5mbyB0YXNraW5mbzsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByYywgbnVtX2VudHJpZXMsIGk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRcbiIpKTsKKworICAgIC8qCisgICAgICogZ2V0IHNpemUgdG8gYWxsb2NhdGUuIFRoaXMgaW50cm9kdWNlcyBhIGJpdCBvZiBhIHJhY2UgY29uZGl0aW9uLAorICAgICAqIGFzIHRoZSBzaXplIGNvdWxkIGNoYW5nZSBiZXR3ZWVuIHRoaXMgY2FsbCBhbmQgdGhlIG5leHQuLi4KKyAgICAgKi8KKyAgICByYyA9IHN5c2N0bChtaWIsIG1pYl9zaXplLCBOVUxMLCAmYnVmX3NpemUsIE5VTEwsIDApOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIktFUk5fUFJPQ19BTEwgc2l6ZSBzeXNjdGwgZmFpbGVkOiAlZFxuIiwgcmMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcHJvY2Vzc2VzID0gKHN0cnVjdCBraW5mb19wcm9jKikgbWFsbG9jKGJ1Zl9zaXplKTsKKyAgICBpZiAoTlVMTCA9PSBwcm9jZXNzZXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1hbGxvYyBmYWlsZWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBzeXNjdGwobWliLCBtaWJfc2l6ZSwgcHJvY2Vzc2VzLCAmYnVmX3NpemUsIE5VTEwsIDApOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIktFUk5fUFJPQ19BTEwgc3lzY3RsIGZhaWxlZDogJWRcbiIsIHJjKTsKKyAgICAgICAgZnJlZShwcm9jZXNzZXMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIG51bV9lbnRyaWVzID0gYnVmX3NpemUgLyBzaXplb2Yoc3RydWN0IGtpbmZvX3Byb2MpOworICAgIAorICAgIGZvciAoaSA9IDA7IGkgPCBudW1fZW50cmllczsgaSsrKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNraXAgZW1wdHkgbmFtZXMuCisgICAgICAgICAqIHBfc3RhdCA9IChTSURMfFNSVU58U1NMRUVQfFNTVE9QfFNaT01CKQorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCgnXDAnID09IHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbVswXSkgfHwKKyAgICAgICAgICAgICgwID09IHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiIHNraXBwaW5nIHBfY29tbSAnJXMnLCBwaWQgJTVkLCBwX3BzdGF0ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9jb21tID8gCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX2NvbW0gOiAiTlVMTCIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcm9jZXNzZXNbaV0ua3BfcHJvYy5wX3BpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfc3RhdCkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiICVzIHBpZCAlNWRcbiIsCisgICAgICAgICAgICAgICAgICAgIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbSwKKyAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9waWQpKTsKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHBfY29tbSBpcyBhIHBhcnRpYWwgbmFtZSwgYnV0IGl0IGlzIGFsbCB3ZSBoYXZlIGF0IHRoaXMgcG9pbnQuCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfY29tbSk7CisKKyAgICAgICAgLyoqIHN5c2N0bCBmb3IgbmFtZSwgcGF0aCwgcGFyYW1zICovCisgICAgICAgIHJjID0gX3NldF9jb21tYW5kX25hbWUoZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIG1hcCBwX3N0YXQgdG8gUnVuU3RhdHVzLiBPZGQgdGhhdCB0aGVyZSBpcyBubyAncnVubmluZycgc3RhdHVzLgorICAgICAgICAgKi8KKyAgICAgICAgc3dpdGNoKHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfc3RhdCkgeworICAgICAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgU1NMRUVQOgorICAgICAgICAgICAgY2FzZSBTU1RPUDoKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIFNJREw6CisgICAgICAgICAgICBjYXNlIFNaT01COgorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAKKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igc3lzdGVtIHByb2Nlc3NlcworICAgICAgICAgKi8KKyAgICAgICAgaWYgKFBfU1lTVEVNICYgcHJvY2Vzc2VzW2ldLmtwX3Byb2MucF9mbGFnKSB7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSBIUlNXUlVOVFlQRV9PUEVSQVRJTkdTWVNURU07CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwgU1dSVU5JTkRFTlQgIlNZU1RFTVxuIikpOworICAgICAgICB9CisgICAgICAgIGVsc2UgZW50cnktPmhyU1dSdW5UeXBlID0gSFJTV1JVTlRZUEVfQVBQTElDQVRJT047CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZ2V0IG1lbSBzaXplLCBydW4gdGltZQorICAgICAgICAgKi8KKyAgICAgICAgcmMgPSBwcm9jX3BpZGluZm8oIHByb2Nlc3Nlc1tpXS5rcF9wcm9jLnBfcGlkLCBQUk9DX1BJRFRBU0tBTExJTkZPLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRhc2tpbmZvLCBzaXplb2YodGFza2luZm8pKTsKKyAgICAgICAgaWYgKHNpemVvZih0YXNraW5mbykgIT0gcmMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCAiIHByb2NfcGlkaW5mbyByZXR1cm5lZCAlZFxuIiwgcmMpKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IHRhc2tfbWVtID0gdGFza2luZm8ucHRpbmZvLnB0aV9yZXNpZGVudF9zaXplIC8gMTAyNDsKKyAgICAgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgICAgICB1X3F1YWRfdCAgICAgdXE7IC8qIHVfaW50NjRfdCAqLworICAgICAgICAgICAgICAgIFVuc2lnbmVkV2lkZSB1dzsgLyogc3RydWN0IHVfaW50MzJfdCBoaS9sbyAqLworICAgICAgICAgICAgfSBhdCwgbnM7CisgICAgICAgICAgICBhdC51cSA9IHRhc2tpbmZvLnB0aW5mby5wdGlfdG90YWxfdXNlciArCisgICAgICAgICAgICAgICAgICAgIHRhc2tpbmZvLnB0aW5mby5wdGlfdG90YWxfc3lzdGVtOworICAgICAgICAgICAgbnMgPSBhdDsKKyAgICAgICAgICAgIG5zLnVxID0gbnMudXEgLyAxMDAwMDAwMExMOyAvKiBuYW5vIHRvIGRlY2kgKi8KKyAgICAgICAgICAgIGlmICh0YXNrX21lbSA+IElOVDMyX01BWCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCBTV1JVTklOREVOVCAibWVtIG92ZXJmbG93XG4iKSk7CisgICAgICAgICAgICAgICAgdGFza19tZW0gPSBJTlQzMl9NQVg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobnMudXEgPiBJTlQzMl9NQVgpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwgU1dSVU5JTkRFTlQgInRpbWUgb3ZlcmZsb3dcbiIpKTsKKyAgICAgICAgICAgICAgICBucy51cSA9IElOVDMyX01BWDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSA9IHRhc2tfbWVtOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVID0gbnMudXE7CisgICAgICAgIH0KKyAgICB9CisgICAgZnJlZShwcm9jZXNzZXMpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFRoZSBmb2xsb3dpbmcgY29kZSB3YXMgc25hZ2dlZCBmcm9tIERhcndpbiBjb2RlLCBhbmQgdGhlIG9yaWdpbmFsCisgKiBmaWxlIGhhZCB0aGUgZm9sbG93aW5nIGxpY2VuY2VzOgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNCBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBAQVBQTEVfTElDRU5TRV9IRUFERVJfU1RBUlRACisgKiAKKyAqIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgY29uc3RpdHV0ZSBPcmlnaW5hbCBDb2RlIGFzIGRlZmluZWQgaW4gYW5kCisgKiBhcmUgc3ViamVjdCB0byB0aGUgQXBwbGUgUHVibGljIFNvdXJjZSBMaWNlbnNlIFZlcnNpb24gMS4xICh0aGUKKyAqICJMaWNlbnNlIikuICBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlCisgKiBMaWNlbnNlLiAgUGxlYXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqIGh0dHA6Ly93d3cuYXBwbGUuY29tL3B1YmxpY3NvdXJjZSBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLgorICogCisgKiBUaGlzIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUKKyAqIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorICogRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLAorICogSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVC4gIFBsZWFzZSBzZWUgdGhlCisgKiBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKKyAqIHVuZGVyIHRoZSBMaWNlbnNlLgorICogCisgKiBAQVBQTEVfTElDRU5TRV9IRUFERVJfRU5EQAorICovCisjaWZkZWYgSkFHVUFSIC8qIHh4eCBjb25maWd1cmUgdGVzdD8gKi8KK3N0YXRpYyBpbnQKK19zZXRfY29tbWFuZF9uYW1lX2phZ3VhcihuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQJICAgICAgICBtaWJbM10gPSB7Q1RMX0tFUk4sIEtFUk5fUFJPQ0FSR1MsIDB9OworICAgIHNpemVfdCAgICAgIHByb2Nhcmdzc2l6ZSwgbWliX3NpemUgPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKyAgICBjaGFyICAgICAgICphcmdfZW5kLCAqZXhlY19wYXRoOworICAgIGludCAgICAgICAgKmlwOworICAgIGludCAgICAgICAgIGxlbjsKKyAgICBjaGFyICAgICAgICpjb21tYW5kX2JlZywgKmNvbW1hbmQsICpjb21tYW5kX2VuZDsKKyAgICBjaGFyICAgICAgICBhcmdfYnVmW01BWF9LRVJOX0FSR01BWF07IC8qIG1heCB0byBhdm9pZCBrZXJuZWwgYnVnICovCisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBwaWQgJWRcbiIsIGVudHJ5LT5oclNXUnVuSW5kZXgpKTsKKworICAgIG1pYlsyXSA9IGVudHJ5LT5oclNXUnVuSW5kZXg7CisKKyAgICBtZW1zZXQoYXJnX2J1ZiwgMHgwLCBzaXplb2YoYXJnX2J1ZikpOworICAgIHByb2Nhcmdzc2l6ZSA9IF9rZXJuX2FyZ21heDsKKyAgICBpZiAoc3lzY3RsKG1pYiwgbWliX3NpemUsIGFyZ19idWYsICZwcm9jYXJnc3NpemUsIE5VTEwsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBQUk9DQVJHUyBzeXNjdGwoKSBmb3IgJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSAwOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogU2V0IGlwIGp1c3QgYWJvdmUgdGhlIGVuZCBvZiBhcmdfYnVmLiAqLworICAgIGFyZ19lbmQgPSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdOworICAgIGlwID0gKGludCAqKWFyZ19lbmQ7CisgICAgCisgICAgLyoKKyAgICAgKiBTa2lwIHRoZSBsYXN0IDIgd29yZHMsIHNpbmNlIHRoZSBsYXN0IGlzIGEgMCB3b3JkLCBhbmQKKyAgICAgKiB0aGUgc2Vjb25kIHRvIGxhc3QgbWF5IGJlIGFzIHdlbGwsIGlmIHRoZXJlIGFyZSBubworICAgICAqIGFyZ3VtZW50cy4KKyAgICAgKi8KKyAgICBpcCAtPSAzOworICAgIAorICAgIC8qIEl0ZXJhdGUgZG93biB0aGUgYXJndW1lbnRzIHVudGlsIGEgMCB3b3JkIGlzIGZvdW5kLiAqLworICAgIGZvciAoOyAqaXAgIT0gMDsgaXAtLSkgeworICAgICAgICBpZiAoaXAgPT0gKGludCAqKWFyZ19idWYpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHVuZXhwZWN0ZWQgdG9wYXJnXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgLyogVGhlIHNhdmVkIGV4ZWNfcGF0aCBpcyBqdXN0IGFib3ZlIHRoZSAwIHdvcmQuICovCisgICAgaXArKzsKKyAgICBleGVjX3BhdGggPSAoY2hhciAqKWlwOworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIGV4ZWNfcGF0aCAlc1xuIiwgZXhlY19wYXRoKSk7CisgICAgbGVuID0gc3RybGVuKGV4ZWNfcGF0aCk7CisgICAgc3RybGNweShlbnRyeS0+aHJTV1J1blBhdGgsIGV4ZWNfcGF0aCwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkpOworICAgIGlmIChsZW4gPiBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHRydW5jYXRpbmcgbG9uZyBydW4gcGF0aFxuIikpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhbc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMl0gPSAnJCc7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xOworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBleGVjX3BhdGggJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBsZW47CisgICAgCisgICAgLyoKKyAgICAgKiBHZXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgYXJndW1lbnQuICBJdCBpcyB3b3JkLWFsaWduZWQsCisgICAgICogc28gc2tpcCBwYWRkaW5nICdcMCcgYnl0ZXMuCisgICAgICovCisgICAgY29tbWFuZF9iZWcgPSBleGVjX3BhdGggKyBzdHJsZW4oZXhlY19wYXRoKTsKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiBjb21tYW5kX2JlZyAnJXMnXG4iLCBjb21tYW5kX2JlZykpOworICAgIGZvciAoOyAqY29tbWFuZF9iZWcgPT0gJ1wwJzsgY29tbWFuZF9iZWcrKykgeworICAgICAgICBpZiAoY29tbWFuZF9iZWcgPj0gYXJnX2VuZCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgY29tbWFuZF9iZWcgJyVzJ1xuIiwgY29tbWFuZF9iZWcpKTsKKyAgICAKKyAgICAvKiBHZXQgdGhlIGJhc2VuYW1lIG9mIGNvbW1hbmQuICovCisgICAgY29tbWFuZCA9IGNvbW1hbmRfZW5kID0gY29tbWFuZF9iZWcgKyBzdHJsZW4oY29tbWFuZF9iZWcpICsgMTsKKyAgICBmb3IgKGNvbW1hbmQtLTsgY29tbWFuZCA+PSBjb21tYW5kX2JlZzsgY29tbWFuZC0tKSB7CisgICAgICAgIGlmICgqY29tbWFuZCA9PSAnLycpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgY29tbWFuZCsrOworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIGNvbW1hbmQgJyVzJ1xuIiwgY29tbWFuZCkpOworICAgIAorICAgIC8qIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgY29tbWFuZCBhbmQgY29weS4gKi8KKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsCisgICAgICAgICAgICAgICAgU1dSVU5JTkRFTlQgImtlcm5lbCBuYW1lICVzXG4iLCBjb21tYW5kKSk7CisgICAgaWYgKHN0cm5jbXAoY29tbWFuZCwgZW50cnktPmhyU1dSdW5OYW1lLCBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKS0xKSkgeworICAgICAgICBzdHJsY3B5KGVudHJ5LT5oclNXUnVuTmFtZSwgY29tbWFuZCwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSkpOworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc3RybGVuKGVudHJ5LT5oclNXUnVuTmFtZSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwgIioqIgorICAgICAgICAgICAgICAgICAgICBTV1JVTklOREVOVCAidXBkYXRlZCBuYW1lIHRvICVzXG4iLCBlbnRyeS0+aHJTV1J1bk5hbWUpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqIG5vIGVycm9yLCBubyBjaGFuZ2UgKi8KKyAgICByZXR1cm4gMTsKK30KKyNlbHNlCitzdGF0aWMgaW50Citfc2V0X2NvbW1hbmRfbmFtZShuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQJICAgICAgICBtaWJbM10gPSB7Q1RMX0tFUk4sIDAsIDB9OworICAgIHNpemVfdCAgICAgIHByb2Nhcmdzc2l6ZSwgbWliX3NpemUgPSBzaXplb2YobWliKS9zaXplb2YobWliWzBdKTsKKyAgICBjaGFyICAgICAgICpjcDsKKyAgICBpbnQgICAgICAgICBsZW4sIG5hcmdzOworICAgIGNoYXIgICAgICAgKmNvbW1hbmRfYmVnLCAqY29tbWFuZCwgKmNvbW1hbmRfZW5kLCAqZXhlY19wYXRoLCAqYXJnTjsKKyAgICBjaGFyICAgICAgICBhcmdfYnVmW01BWF9LRVJOX0FSR01BWF07IC8qIG1heCB0byBhdm9pZCBrZXJuZWwgYnVnICovCisKKyAgICAvKgorICAgICAqIGFyZ3VtZW50cworICAgICAqLworICAgIG1pYlsxXSA9IEtFUk5fUFJPQ0FSR1MyOworICAgIG1pYlsyXSA9IGVudHJ5LT5oclNXUnVuSW5kZXg7CisKKyAgICBtZW1zZXQoYXJnX2J1ZiwgMHgwLCBzaXplb2YoYXJnX2J1ZikpOworICAgIHByb2Nhcmdzc2l6ZSA9IF9rZXJuX2FyZ21heDsKKyAgICBpZiAoc3lzY3RsKG1pYiwgbWliX3NpemUsIGFyZ19idWYsICZwcm9jYXJnc3NpemUsIE5VTEwsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciBpbiBQUk9DQVJHUzIgc3lzY3RsKCkgZm9yICVzOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gMDsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG1lbWNweSgmbmFyZ3MsYXJnX2J1Ziwgc2l6ZW9mKG5hcmdzKSk7CisgICAgfQorCisgICAgZXhlY19wYXRoID0gYXJnX2J1ZiArIHNpemVvZihuYXJncyk7CisgICAgbGVuID0gc3RybGVuKGV4ZWNfcGF0aCk7CisgICAgc3RybGNweShlbnRyeS0+aHJTV1J1blBhdGgsIGV4ZWNfcGF0aCwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCkpOworICAgIGlmIChsZW4gPiBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHRydW5jYXRpbmcgbG9uZyBydW4gcGF0aFxuIikpOworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhbc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMl0gPSAnJCc7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKS0xOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBsZW47CisKKyAgICAvKiogU2tpcCB0aGUgc2F2ZWQgZXhlY19wYXRoLiAqLworI2lmIDAKKyAgICBjcCA9IGV4ZWNfcGF0aCArIGxlbjsKKyNlbHNlCisgICAgZm9yIChjcCA9IGV4ZWNfcGF0aDsgY3AgPCAmYXJnX2J1Zltwcm9jYXJnc3NpemVdOyBjcCsrKSB7CisgICAgICAgIGlmICgqY3AgPT0gJ1wwJykgCisgICAgICAgICAgICBicmVhazsgLyogRW5kIG9mIGV4ZWNfcGF0aCByZWFjaGVkLiAqLworICAgIH0KKyAgICBpZiAoY3AgIT0gZXhlY19wYXRoICsgbGVuKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwgIiBPRkYgQlkgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgIChpbnQpKChleGVjX3BhdGggKyBsZW4pIC0gY3ApKSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KCBjcCA9PSBleGVjX3BhdGggKyBsZW4gKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoY3AgPT0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsIiB1bmV4cGVjdGVkIGVuZCBvZiBidWZmZXJcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBTa2lwIHRyYWlsaW5nICdcMCcgY2hhcmFjdGVycy4gKi8KKyAgICBmb3IgKDsgY3AgPCAmYXJnX2J1Zltwcm9jYXJnc3NpemVdOyBjcCsrKSB7CisgICAgICAgIGlmICgqY3AgIT0gJ1wwJykKKyAgICAgICAgICAgIGJyZWFrOyAvKiBCZWdpbm5pbmcgb2YgZmlyc3QgYXJndW1lbnQgcmVhY2hlZC4gKi8KKyAgICB9CisgICAgaWYgKGNwID09ICZhcmdfYnVmW3Byb2Nhcmdzc2l6ZV0pIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaDpfY24iLCIgdW5leHBlY3RlZCBlbmQgb2YgYnVmZmVyXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29tbWFuZF9iZWcgPSBjcDsKKworICAgIC8qCisgICAgICogTWFrZSBzdXJlIHRoYXQgdGhlIGNvbW1hbmQgaXMgJ1wwJy10ZXJtaW5hdGVkLiAgVGhpcyBwcm90ZWN0cworICAgICAqIGFnYWluc3QgbWFsaWNpb3VzIHByb2dyYW1zOyB1bmRlciBub3JtYWwgb3BlcmF0aW9uIHRoaXMgbmV2ZXIKKyAgICAgKiBlbmRzIHVwIGJlaW5nIGEgcHJvYmxlbS4uCisgICAgICovCisgICAgZm9yICg7IGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXTsgY3ArKykgeworICAgICAgICBpZiAoKmNwID09ICdcMCcpCisgICAgICAgICAgICBicmVhazsgLyogRW5kIG9mIGZpcnN0IGFyZ3VtZW50IHJlYWNoZWQuICovCisgICAgfQorICAgIGlmIChjcCA9PSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHVuZXhwZWN0ZWQgZW5kIG9mIGJ1ZmZlclxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNvbW1hbmRfZW5kID0gY29tbWFuZCA9IGNwOworICAgIC0tbmFyZ3M7CisKKyAgICAvKgorICAgICAqIHNhdmUgYXJndW1lbnRzCisgICAgICovCisgICAgd2hpbGUoIG5hcmdzICYmIGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXSApIHsKKyAgICAgICAgLyoqIFNraXAgdHJhaWxpbmcgJ1wwJyBjaGFyYWN0ZXJzIGZyb20gcHJldiBhcmcuICovCisgICAgICAgIGZvciAoOyAoY3AgPCAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKSAmJiAoKmNwID09IDApOyBjcCsrKSAKKyAgICAgICAgICAgIDsgLyogbm9vcCAqLworICAgICAgICBpZiAoY3AgPT0gJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBlZmZlY3RpdmVseSBhIGJyZWFrICovCisgICAgCisgICAgICAgIC8qKiBzYXZlIGFyZ04gc3RhcnQgKi8KKyAgICAgICAgYXJnTiA9IGNwOworICAgICAgICAtLW5hcmdzOworICAgICAgICBpZiAoMCA9PSBuYXJncykKKyAgICAgICAgICAgIGNvbnRpbnVlOyAvKiBlZmZlY3RpdmVseSBhIGJyZWFrICovCisKKyAgICAgICAgLyoqIFNraXAgdG8gZW5kIG9mIGFyZyAqLworICAgICAgICBmb3IgKDsgKGNwIDwgJmFyZ19idWZbcHJvY2FyZ3NzaXplXSkgJiYgKCpjcCAhPSAwKTsgY3ArKykgCisgICAgICAgICAgICA7ICAvKiBub29wICovCisgICAgICAgIGlmIChjcCA9PSAmYXJnX2J1Zltwcm9jYXJnc3NpemVdKQorICAgICAgICAgICAgY29udGludWU7IC8qIGVmZmVjdGl2ZWx5IGEgYnJlYWsgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igb3ZlcnJ1biBpbnRvIGVudgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCgqYXJnTiAhPSAnLScpICYmIHN0cmNocihhcmdOLCc9JykpICB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsICIgKioqIE9WRVJSVU4gSU5UTyBFTlYgJWRcbiIsbmFyZ3MpKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBhcmcKKyAgICAgICAgICovCisgICAgICAgIGlmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPCBzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKS0xKSB7CisgICAgICAgICAgICBzdHJsY2F0KCZlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNbZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbl0sCisgICAgICAgICAgICAgICAgICAgIGFyZ04sIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLWVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4tMSk7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gc3RybGVuKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycyk7CisgICAgICAgICAgICBpZiAoKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4rMiA8IHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEpICYmICgwICE9IG5hcmdzKSkgeworICAgICAgICAgICAgICAgIC8qIGFkZCBzcGFjZSBiZXR3ZWVuIHBhcmFtcyAqLworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuKytdID0gJyAnOworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuXSA9IDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2g6X2NuIiwiIHRydW5jYXRpbmcgbG9uZyBhcmcgbGlzdFxuIikpOworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuKytdID0gJyQnOworICAgICAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuXSA9ICcwJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoJyAnID09IGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc1tlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuXSkKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzW2VudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4tLV0gPSAwOworCisgICAgCisgICAgLyogR2V0IHRoZSBiYXNlbmFtZSBvZiBjb21tYW5kLiAqLworICAgIGZvciAoY29tbWFuZC0tOyBjb21tYW5kID49IGNvbW1hbmRfYmVnOyBjb21tYW5kLS0pIHsKKyAgICAgICAgaWYgKCpjb21tYW5kID09ICcvJykKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjb21tYW5kKys7CisgICAgCisgICAgLyogQWxsb2NhdGUgc3BhY2UgZm9yIHRoZSBjb21tYW5kIGFuZCBjb3B5LiAqLworICAgIGlmIChzdHJuY21wKGNvbW1hbmQsIGVudHJ5LT5oclNXUnVuTmFtZSwgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSkpIHsKKyAgICAgICAgc3RybGNweShlbnRyeS0+aHJTV1J1bk5hbWUsIGNvbW1hbmQsIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHN0cmxlbihlbnRyeS0+aHJTV1J1bk5hbWUpOworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoOl9jbiIsCisgICAgICAgICAgICAgICAgICAgICIgKip1cGRhdGVkIG5hbWUgdG8gJXNcbiIsIGVudHJ5LT5oclNXUnVuTmFtZSkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX2tpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NjZTZlNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa2luZm8uYwpAQCAtMCwwICsxLDM3MCBAQAorLyoKKyAqIHN3cnVuX2tpbmZvLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIGt2bV9nZXRwcm9jcygpIGludGVyZmFjZSAtIEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRAorICoKKyAqIE5COiBsYXRlciBGcmVlQlNEIGFuZCBPcGVuQlNEIHVzZSBkaWZmZXJlbnQga2luZm9fcHJvYyBzdHJ1Y3R1cmVzCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfS1ZNX0gKKyNpbmNsdWRlIDxrdm0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NZU0NUTF9ICisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFJPQ19ICisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VTRVJfSAorI2luY2x1ZGUgPHN5cy91c2VyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VWTV9VVk1fRVhURVJOQUxfSAorI2luY2x1ZGUgPHV2bS91dm1fZXh0ZXJuYWwuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworZXh0ZXJuIGt2bV90ICprZDsKKworCisjaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMDE0CisgICAgLyoKKyAgICAgKiBsYXRlciBGcmVlQlNEIGtpbmZvX3Byb2MgZmllbGQgbmFtZXMKKyAgICAgKi8KKyNkZWZpbmUgU1dSVU5fVEFCTEUJa2luZm9fcHJvYworI2RlZmluZSBTV1JVTl9LX1NUQVQJa2lfc3RhdAorI2RlZmluZSBTV1JVTl9LX1BJRAlraV9waWQKKyNkZWZpbmUgU1dSVU5fS19QUElECWtpX3BwaWQKKyNkZWZpbmUgU1dSVU5fS19USUQJa2lfdGlkCisjZGVmaW5lIFNXUlVOX0tfQ09NTQlraV9jb21tCisjZGVmaW5lIFNXUlVOX0tfRkxBRwlraV9mbGFnCisjZGVmaW5lIFNXUlVOX0tfQ0xBU1MJa2lfcHJpLnByaV9jbGFzcworCisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMiB8fCBkZWZpbmVkKG9wZW5ic2Q1KQorICAgIC8qCisgICAgICogbmV3ZXIgTmV0QlNELCBPcGVuQlNEIGtpbmZvX3Byb2MyIGZpZWxkIG5hbWVzCisgICAgICovCisjaWYgZGVmaW5lZChvcGVuYnNkNSkKKyNkZWZpbmUgU1dSVU5fVEFCTEUJa2luZm9fcHJvYworI2Vsc2UKKyNkZWZpbmUgU1dSVU5fVEFCTEUJa2luZm9fcHJvYzIKKyNlbmRpZgorI2RlZmluZSBTV1JVTl9LX1NUQVQJcF9zdGF0CisjZGVmaW5lIFNXUlVOX0tfUElECXBfcGlkCisjZGVmaW5lIFNXUlVOX0tfQ09NTQlwX2NvbW0KKyNkZWZpbmUgU1dSVU5fS19GTEFHCXBfZmxhZworLyogICAgICBTV1JVTl9LX0NMQVNTCW5vdCBkZWZpbmVkICAgICAqLworCisjZWxpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICAvKgorICAgICAqIERyYWdvbkZseSBpcyBkaWZmZXJlbnQgLi4uCisgICAgICovCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MKKyNkZWZpbmUgU1dSVU5fS19TVEFUCWtwX3N0YXQKKyNkZWZpbmUgU1dSVU5fS19QSUQgCWtwX3BpZAorI2RlZmluZSBTV1JVTl9LX0NPTU0Ja3BfY29tbQorI2RlZmluZSBTV1JVTl9LX0ZMQUcJa3BfZmxhZ3MKKy8qICAgICAgU1dSVU5fS19DTEFTUwlub3QgZGVmaW5lZCAgICAgKi8KKworI2Vsc2UKKyAgICAvKgorICAgICAqIGVhcmx5IEZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCBraW5mb19wcm9jIGZpZWxkIG5hbWVzCisgICAgICovCisjZGVmaW5lIFNXUlVOX1RBQkxFCWtpbmZvX3Byb2MKKyNkZWZpbmUgU1dSVU5fS19TVEFUCWtwX3Byb2MucF9zdGF0CisjZGVmaW5lIFNXUlVOX0tfUElECWtwX3Byb2MucF9waWQKKyNkZWZpbmUgU1dSVU5fS19DT01NCWtwX3Byb2MucF9jb21tCisjZGVmaW5lIFNXUlVOX0tfRkxBRwlrcF9wcm9jLnBfZmxhZworLyogICAgICBTV1JVTl9LX0NMQVNTCW5vdCBkZWZpbmVkICAgICAqLworI2VuZGlmCisKKy8qCisgKiAgRGVmaW5lIGR1bW15IHZhbHVlcyBpZiBub3QgYWxyZWFkeSBwcm92aWRlZCBieSB0aGUgc3lzdGVtCisgKi8KKworI2lmZGVmIGRyYWdvbmZseQorCisvKgorICogRHJhZ29uRmx5IGlzIHNwZWNpYWwuIHBfc3RhdCBpcyBhbiBlbnVtIQorICovCisKKyNkZWZpbmUgU1JVTgkyMDAKKyNkZWZpbmUgU1NMRUVQCTIwMgorI2RlZmluZSBTV0FJVAkyMDMKKyNkZWZpbmUgU0xPQ0sJMjA1CisjZGVmaW5lIFNERUFECTIwOAorI2RlZmluZSBTT05QUk9DCTIwOQorCisKKyNlbHNlCisKKyNpZm5kZWYgU1JVTgorI2RlZmluZSBTUlVOCTIwMAkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QvT3BlbkJTRCwgbWlzc2luZyBpbiAgTmV0QlNEICovCisjZW5kaWYKKyNpZm5kZWYgU0FDVElWRQorI2RlZmluZSBTQUNUSVZFCTIwMQkvKiBEZWZpbmVkIGJ5ICBOZXRCU0QsIG1pc3NpbmcgaW4gRnJlZUJTRC9PcGVuQlNEICovCisjZW5kaWYKKyNpZm5kZWYgU1NMRUVQCisjZGVmaW5lIFNTTEVFUAkyMDIJLyogRGVmaW5lZCBieSBGcmVlQlNEL09wZW5CU0QsIG1pc3NpbmcgaW4gIE5ldEJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNXQUlUCisjZGVmaW5lIFNXQUlUCTIwMwkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QsIG1pc3NpbmcgaW4gIE5ldEJTRC9PcGVuQlNEICovCisjZW5kaWYKKyNpZm5kZWYgU1NUT1AKKyNkZWZpbmUgU1NUT1AJMjA0CS8qIERlZmluZWQgYnkgRnJlZUJTRC9OZXRCU0QvT3BlbkJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNMT0NLCisjZGVmaW5lIFNMT0NLCTIwNQkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QsIG1pc3NpbmcgaW4gTmV0QlNEL09wZW5CU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTSURMCisjZGVmaW5lIFNJREwJMjA2CS8qIERlZmluZWQgYnkgRnJlZUJTRC9OZXRCU0QvT3BlbkJTRCAqLworI2VuZGlmCisjaWZuZGVmIFNaT01CCisjZGVmaW5lIFNaT01CCTIwNwkvKiBEZWZpbmVkIGJ5IEZyZWVCU0QvTmV0QlNEL09wZW5CU0QgKi8KKyNlbmRpZgorI2lmbmRlZiBTREVBRAorI2RlZmluZSBTREVBRAkyMDgJLyogRGVmaW5lZCBieSBPcGVuQlNELCBtaXNzaW5nIGluIEZyZWVCU0QvTmV0QlNEICovCisjZW5kaWYKKyNpZm5kZWYgU09OUFJPQworI2RlZmluZSBTT05QUk9DCTIwOQkvKiBEZWZpbmVkIGJ5IE9wZW5CU0QsIG1pc3NpbmcgaW4gRnJlZUJTRC9OZXRCU0QgKi8KKyNlbmRpZgorCisjZW5kaWYKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisjaWYgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAmJiBkZWZpbmVkKENUTF9LRVJOKSAmJiBkZWZpbmVkKEtFUk5fTUFYUFJPQykKKyAgICBleHRlcm4gaW50IF9zd3J1bl9tYXg7CisgICAgc2l6ZV90IG1heF9zaXplID0gc2l6ZW9mKF9zd3J1bl9tYXgpOworICAgIGludCBtYXhwcm9jX21pYltdID0geyBDVExfS0VSTiwgS0VSTl9NQVhQUk9DIH07CisgICAgc3lzY3RsKG1heHByb2NfbWliLCAyLCAmX3N3cnVuX21heCwgJm1heF9zaXplLCBOVUxMLCAwKTsKKyNlbmRpZgorICAgIAorICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBzdHJ1Y3QgU1dSVU5fVEFCTEUgICpwcm9jX3RhYmxlOworICAgIGludCAgICAgICAgICAgICAgICAgIG5wcm9jcywgaSwgcmM7CisgICAgY2hhciAgICAgICAgICAgICAgICAgYnVmW0JVRlNJWisxXSwgKiphcmd2OworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgaWYgKCAwID09IGtkICkgeworICAgICAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIENhbid0IHF1ZXJ5IGt2bSBpbmZvXG4iKSk7CisgICAgICAgIHJldHVybiAxOyAgICAgLyogTm8gaGFuZGxlIGZvciByZXRyaWV2aW5nIHByb2Nlc3MgdGFibGUgKi8KKyAgICB9CisjaWYgZGVmaW5lZChvcGVuYnNkNSkKKyAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2NzKGtkLCBLRVJOX1BST0NfS1RIUkVBRCwgMCwgc2l6ZW9mKHN0cnVjdCBraW5mb19wcm9jKSwgJm5wcm9jcyApOworI2VsaWYgZGVmaW5lZChIQVZFX0tWTV9HRVRQUk9DMikKKyAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2MyKGtkLCBLRVJOX1BST0NfQUxMLCAwLCBzaXplb2Yoc3RydWN0IGtpbmZvX3Byb2MyKSwgJm5wcm9jcyApOworI2Vsc2UKKyAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2NzKGtkLCBLRVJOX1BST0NfQUxMLCAwLCAmbnByb2NzICk7CisjZW5kaWYKKyAgICBmb3IgKCBpPTAgOyBpPG5wcm9jczsgaSsrICkgeworICAgICAgICBpZiAoIDAgPT0gcHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQgKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGlmICggLTEgPT0gcHJvY190YWJsZVtpXS5TV1JVTl9LX1BJRCApCisgICAgICAgICAgICBjb250aW51ZTsKKyNpZmRlZiBTV1JVTl9LX1RJRAorCWlmICggMCA9PSBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfUFBJRCApCisJICAgIHByb2NfdGFibGVbaV0uU1dSVU5fS19QSUQgPSBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfVElEOworI2VuZGlmCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocHJvY190YWJsZVtpXS5TV1JVTl9LX1BJRCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgY29udGludWU7ICAgLyogZXJyb3IgYWxyZWFkeSBsb2dnZWQgYnkgZnVuY3Rpb24gKi8KKyAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZXJlIGFyZSB0d28gcG9zc2libGUgc291cmNlcyBmb3IgdGhlIGNvbW1hbmQgYmVpbmcgcnVuOgorICAgICAgICAgKiAgIC0gU1dSVU5fS19DT01NICAoZnJvbSB0aGUgcHJvY190YWJsZSBlbnRyeSBkaXJlY3RseSkKKyAgICAgICAgICogICAtIHJ1bm5pbmcga3ZtX2dldGFyZ3Ygb24gdGhlIHByb2Nlc3MgZW50cnkuCisgICAgICAgICAqCisgICAgICAgICAqIFdlJ2xsIHVzZSBhcmd2WzBdIChpZiBzZXQpIGZvciBoclNXUnVuUGF0aCwKKyAgICAgICAgICogICBzaW5jZSB0aGF0IG1pZ2h0IHBvdGVudGlhbGx5IGNvbnRhaW4gdGhlCisgICAgICAgICAqICAgYWJzb2x1dGUgcGF0aCB0byB0aGUgcnVubmluZyBiaW5hcnkuCisgICAgICAgICAqIFdlJ2xsIHVzZSBTV1JVTl9LX0NPTU0gZm9yIGhyU1dSdW5OYW1lLAorICAgICAgICAgKiAgIGFuZCBhcyBhbiBhbHRlcm5hdGl2ZSBmb3IgaHJTV1J1blBhdGgKKyAgICAgICAgICovCisjaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2Migga2QsICYocHJvY190YWJsZVtpXSksIDApOworI2Vsc2UKKyAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2KCAga2QsICYocHJvY190YWJsZVtpXSksIEJVRlNJWik7CisjZW5kaWYKKworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc3ByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2NfdGFibGVbaV0uU1dSVU5fS19DT01NKTsKKworICAgICAgICBpZiAoYXJndiAmJiAqYXJndikgeworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcmd2WzBdKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1lbWNweSggZW50cnktPmhyU1dSdW5QYXRoLCBlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiApOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IGVudHJ5LT5oclNXUnVuTmFtZV9sZW47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTdGl0Y2ggdG9nZXRoZXIgdGhlIHJlc3Qgb2YgYXJndltdIHRvIGJ1aWxkIGhyU1dSdW5QYXJhbWV0ZXJzCisgICAgICAgICAqCisgICAgICAgICAqIE5vdGU6CisgICAgICAgICAqICAgV2UgYWRkIGEgc2VwYXJhdGluZyBzcGFjZSBiZWZvcmUgZWFjaCBhcmd2W10gcGFyYW1ldGVyLAorICAgICAgICAgKiAgICppbmNsdWRpbmcqIHRoZSBmaXJzdCBvbmUuICBTbyB3ZSBuZWVkIHRvIHNraXAgdGhpcworICAgICAgICAgKiAgIGxlYWRpbmcgc3BhY2UgKGJ1ZlswXSkgd2hlbiBzZXR0aW5nIGhyU1dSdW5QYXJhbWV0ZXJzLgorICAgICAgICAgKiBUaGlzIGlzIGFsc28gd2h5IHdlIGNsZWFyZWQgdGhlIGZpcnN0ICp0d28qIGNoYXJhY3RlcnMKKyAgICAgICAgICogICBpbiB0aGUgYnVmZmVyIGluaXRpYWxseS4gSWYgdGhlcmUgd2VyZSBubyBjb21tYW5kLWxpbmUKKyAgICAgICAgICogICBhcmd1bWVudHMsIHRoZW4gYnVmWzFdIHdvdWxkIHN0aWxsIGJlIGEgbnVsbCBzdHJpbmcuCisgICAgICAgICAqLworICAgICAgICBidWZbMF0gPSAnXDAnOworICAgICAgICBidWZbMV0gPSAnXDAnOworICAgICAgICBpZiAoYXJndikKKyAgICAgICAgICAgIGFyZ3YrKzsgICAgLyogU2tpcCBhcmd2WzBdICovCisgICAgICAgIHdoaWxlICggYXJndiAmJiAqYXJndiApIHsKKyAgICAgICAgICAgIHN0cmxjYXQoYnVmLCAiICIsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIHN0cmxjYXQoYnVmLCAqYXJndiwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgYXJndisrOworICAgICAgICB9CisgICAgICAgIGlmIChzdHJsZW4oYnVmKSA+PSBCVUZTSVotMTApCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicGFyYW1zICVsdS8lZCAlc1xuIiwgc3RybGVuKGJ1ZiksIEJVRlNJWiwgYnVmKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9CisgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpIC0gMSwgYnVmKzEpOworCisgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IChQX1NZU1RFTSAmIHByb2NfdGFibGVbaV0uU1dSVU5fS19GTEFHKSAKKyNpZmRlZiBTV1JVTl9LX0NMQVNTCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gKChQUklfSVRIRCA9PSBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfQ0xBU1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMyAgLyogZGV2aWNlIGRyaXZlciAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDIgIC8qIG9wZXJhdGluZyBzeXN0ZW0gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgLyogIGFwcGxpY2F0aW9uICAgICAqLworI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAvKiBvcGVyYXRpbmcgc3lzdGVtICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgLyogIGFwcGxpY2F0aW9uICAgICAqLworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworI2lmZGVmIG5ldGJzZDUKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCkgeworCWNhc2UgTFNPTlBST0M6CisgICAgICAgIGNhc2UgTFNSVU46ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTFNTTEVFUDogZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIExTSURMOgorCWNhc2UgTFNTVVNQRU5ERUQ6CisgICAgICAgIGNhc2UgTFNTVE9QOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCWNhc2UgTFNERUFEOgorICAgICAgICBjYXNlIExTWk9NQjogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworCQkgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDogICAKKwkJICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisJCSAgICAgIHNubXBfbG9nKExPR19FUlIsICJCYWQgcHJvY2VzcyBzdGF0dXMgJWMgKDB4JXgpXG4iLCBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCwgcHJvY190YWJsZVtpXS5TV1JVTl9LX1NUQVQpOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisjZWxzZQorICAgICAgICBzd2l0Y2ggKHByb2NfdGFibGVbaV0uU1dSVU5fS19TVEFUICYgMHhGRikgeworICAgICAgICBjYXNlIFNPTlBST0M6CisgICAgICAgIGNhc2UgU1JVTjogICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NMRUVQOgorCWNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTV0FJVDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lETDoKKyAgICAgICAgY2FzZSBTU1RPUDoKKyAgICAgICAgY2FzZSBTTE9DSzogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTREVBRDoKKyAgICAgICAgY2FzZSBTWk9NQjogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsgICAvKiBpLmUuICJub3QgbG9hZGVkIiAqLworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7ICAgLyogQWN0dWFsbHkgaW52YWxpZCAgKi8KKwkJICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkJhZCBwcm9jZXNzIHN0YXR1cyAlYyAoMHgleClcbiIsIHByb2NfdGFibGVbaV0uU1dSVU5fS19TVEFULCBwcm9jX3RhYmxlW2ldLlNXUlVOX0tfU1RBVCk7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAKKyNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKKyAgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSAocHJvY190YWJsZVtpXS5raV9ydXNhZ2UucnVfdXRpbWUudHZfc2VjKjEwMDAwMDAgKyBwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZS5ydV91dGltZS50dl91c2VjKSAvIDEwMDAwOworCSBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ua2lfcnVzYWdlLnJ1X3N0aW1lLnR2X3NlYyoxMDAwMDAwICsgcHJvY190YWJsZVtpXS5raV9ydXNhZ2UucnVfc3RpbWUudHZfdXNlYykgLyAxMDAwMDsKKwkgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZV9jaC5ydV91dGltZS50dl9zZWMqMTAwMDAwMCArIHByb2NfdGFibGVbaV0ua2lfcnVzYWdlX2NoLnJ1X3V0aW1lLnR2X3VzZWMpIC8gMTAwMDA7CisJIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5raV9ydXNhZ2VfY2gucnVfc3RpbWUudHZfc2VjKjEwMDAwMDAgKyBwcm9jX3RhYmxlW2ldLmtpX3J1c2FnZV9jaC5ydV9zdGltZS50dl91c2VjKSAvIDEwMDAwOworCSBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5raV9yc3NpemUgKiAoZ2V0cGFnZXNpemUoKS8xMDI0KTsgIC8qIGluIGtCICovCisjZWxpZiBkZWZpbmVkKEhBVkVfS1ZNX0dFVFBST0MyKSB8fCBkZWZpbmVkKG9wZW5ic2Q1KQorICAgICAgICAvKgorICAgICAgICAgKiBuZXdlciBOZXRCU0QsIE9wZW5CU0QKKyAgICAgICAgICovCisJZW50cnktPmhyU1dSdW5QZXJmQ1BVID0gcHJvY190YWJsZVtpXS5wX3J0aW1lX3NlYyoxMDA7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IHByb2NfdGFibGVbaV0ucF9ydGltZV91c2VjIC8gMTAwMDA7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IHByb2NfdGFibGVbaV0ucF92bV9yc3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoZ2V0cGFnZXNpemUoKSAvIDEwMjQpOworI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpICYmIF9fRHJhZ29uRmx5X3ZlcnNpb24gPj0gMTkwMDAwCisJZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IHByb2NfdGFibGVbaV0ua3BfbHdwLmtsX3V0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9sd3Aua2xfc3RpY2tzOworCWVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSBwcm9jX3RhYmxlW2ldLmtwX2x3cC5rbF9pdGlja3M7CisJZW50cnktPmhyU1dSdW5QZXJmQ1BVID0gZW50cnktPmhyU1dSdW5QZXJmQ1BVIC8gMTAwMDA7CisKKwllbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5rcF92bV9tYXBfc2l6ZSAvIDEwMjQ7CisjZWxpZiBkZWZpbmVkKGRyYWdvbmZseSkKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX3V0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX3N0aWNrczsKKwllbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX2l0aWNrczsKKworCWVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSBwcm9jX3RhYmxlW2ldLmtwX3ZtX21hcF9zaXplIC8gMTAyNDsKKworI2Vsc2UKKyAgICAgICAgLyoKKyAgICAgICAgICogZWFybHkgRnJlZUJTRCwgTmV0QlNELCBPcGVuQlNECisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5rcF9wcm9jLnBfdXRpY2tzOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9wcm9jLnBfc3RpY2tzOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gcHJvY190YWJsZVtpXS5rcF9wcm9jLnBfaXRpY2tzOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gcHJvY190YWJsZVtpXS5rcF9lcHJvYy5lX3ZtLnZtX3Jzc2l6ZTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICo9IChnZXRwYWdlc2l6ZSgpIC8gMTAyNCk7CisjZW5kaWYKKyAgICB9CisgICAgLyoKKyAgICAgKiAncHJvY190YWJsZScgaXMgb3duZWQgYnkgdGhlIGt2bSBsaWJyYXJ5LAorICAgICAqICAgc28gc2hvdWxkbid0IGJlIGZyZWVkIGhlcmUuCisgICAgICovCisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwibG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fa3ZtX3Byb2MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MTU2Y2Y5Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9rdm1fcHJvYy5jCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogc3dydW5fa3ZtX3Byb2MuYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAga3ZtX2dldHByb2MoKSBpbnRlcmZhY2UgLSBTb2xhcmlzCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1VTRVJfSAorI2RlZmluZSBfS01FTVVTRVIKKyNpbmNsdWRlIDxzeXMvdXNlci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFJPQ19ICisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorICAgIC8qIFhYWCAtIHNob3VsZCByZWFsbHkgYmUgcHJvdGVjdGVkICovCisjaW5jbHVkZSA8c3lzL3Zhci5oPgorCisjaWZkZWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9LVk1fSAorI2luY2x1ZGUgPGt2bS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9LU1RBVF9ICisjaW5jbHVkZSA8a3N0YXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKyNpbmNsdWRlICJrZXJuZWwuaCIKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIGV4dGVybiBpbnQgX3N3cnVuX21heDsKKyAgICBrc3RhdF9jdGxfdCAqa3NjOworICAgIGtzdGF0X3QgICAgICprczsKKyAgICBzdHJ1Y3QgdmFyICAgdjsKKworICAgIGlmIChOVUxMICE9IChrc2MgPSBrc3RhdF9vcGVuKCkpKSB7CisgICAgICAgIGlmICgoTlVMTCAhPSAoa3MgID0ga3N0YXRfbG9va3VwKGtzYywgInVuaXgiLCAwLCAidmFyIikpKSAmJgorICAgICAgICAgICAgKCAtMSAgIT0ga3N0YXRfcmVhZChrc2MsIGtzLCAmdiApKSkgeworICAgICAgICAgICAgX3N3cnVuX21heCA9IHYudl9wcm9jOworICAgICAgICB9CisgICAgICAgIGtzdGF0X2Nsb3NlKGtzYyk7CisgICAgfQorICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICpwcm9jZGlyID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICpwcm9jZW50cnlfcDsKKyAgICBzdHJ1Y3QgcHJvYyAgICAgICAgICpwcm9jX2J1ZjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBwaWQsIHJjLCBpOworICAgIGNoYXIgICAgICAgICAgICAgICAgKmNwOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworICAgIAorICAgIC8qCisgICAgICogRXZlbiBpZiB3ZSdyZSB1c2luZyBrdm1fcHJvYygpIHRvIHJldHJpZXZlIGluZm9ybWF0aW9uCisgICAgICogICBhYm91dCBhIHBhcnRpY3VsYXIgcHJvY2Vzcywgd2Ugc2VlbSB0byB1c2UgL3Byb2MgdG8gZ2V0CisgICAgICogICB0aGUgaW5pdGlhbCBsaXN0IG9mIHByb2Nlc3NlcyB0byByZXBvcnQgb24uCisgICAgICovCisgICAgcHJvY2RpciA9IG9wZW5kaXIoIi9wcm9jIik7CisgICAgaWYgKCBOVUxMID09IHByb2NkaXIgKSB7CisgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gL3Byb2MiICk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgaW4gdGhlIC9wcm9jIHRyZWUKKyAgICAgKi8KKyAgICB3aGlsZSAoIE5VTEwgIT0gKHByb2NlbnRyeV9wID0gcmVhZGRpciggcHJvY2RpciApKSkgeworICAgICAgICBwaWQgPSBhdG9pKCBwcm9jZW50cnlfcC0+ZF9uYW1lICk7CisgICAgICAgIGlmICggMCA9PSBwaWQgKQorICAgICAgICAgICAgY29udGludWU7ICAgLyogUHJlc3VtYWJseSAnLicgb3IgJy4uJyAqLworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBpZiAoTlVMTCA9PSAocHJvY19idWYgPSBrdm1fZ2V0cHJvYygga2QsIHBpZCkpKSB7CisgICAgICAgICAgICAvKiByZWxlYXNlIGVudHJ5ICovCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5OYW1lLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY19idWYtPnBfdXNlci51X2NvbW0pOworICAgICAgICAvKgorICAgICAgICAgKiAgU3BsaXQgdV9wc2FyZ3MgaW50byB0d286CisgICAgICAgICAqICAgICBhcmd2WzBdICAgaXMgaHJTV1J1blBhdGgKKyAgICAgICAgICogICAgIGFyZ3ZbMS4uXSBpcyBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgKi8KKyAgICAgICAgZm9yICggY3AgPSBwcm9jX2J1Zi0+cF91c2VyLnVfcHNhcmdzOyAnICcgPT0gKmNwOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgKmNwID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9jX2J1Zi0+cF91c2VyLnVfcHNhcmdzKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9CisgICAgICAgICAgICBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAoaW50KXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpIC0gMSwgY3AgKyAxKTsKKyAgICAgICAgKmNwID0gJyAnOyAgICAgLyogUmVzdG9yZSB1X3BzYXJncyB2YWx1ZSAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIGNoZWNrIGZvciBzeXN0ZW0gcHJvY2Vzc2VzCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAoU1NZUyAmIHByb2NfYnVmLT5wX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgICAvKiBrZXJuZWwgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0ICAgLyogIGFwcGxpY2F0aW9uICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgICBzd2l0Y2ggKHByb2NfYnVmLT5wX3N0YXQpIHsKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTEVFUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU1RPUDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lETDoKKyAgICAgICAgY2FzZSBTWk9NQjoKKyAgICAgICAgZGVmYXVsdDogICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IChwcm9jX2J1Zi0+cF91dGltZSAqIDEwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY19idWYtPnBfc3RpbWUgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gIHByb2NfYnVmLT5wX3N3cnNzOworCQkvKiBYWFggLSBpcyB0aGlzIHJlcG9ydGVkIGluIGtCPyAqLworICAgIH0KKyAgICBjbG9zZWRpciggcHJvY2RpciApOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fbmxpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZGI2YzljCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9ubGlzdC5jCkBAIC0wLDAgKzEsMTE0IEBACisvKgorICogc3dydW5fbmxpc3QuYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgbmxpc3QoKSBpbnRlcmZhY2UKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIGV4dGVybiBpbnQgX3N3cnVuX21heDsKKworICAgIGF1dG9fbmxpc3QoICBQUk9DX1NZTUJPTCwgMCwgMCk7CisgICAgYXV0b19ubGlzdCggTlBST0NfU1lNQk9MLCAoY2hhciAqKSZfc3dydW5fbWF4LCBzaXplb2YoaW50KSk7CisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBwcm9jICAgICAgICAgKnByb2NfdGFibGU7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcHJvY190eXBlX2Jhc2U7CisgICAgaW50ICAgICAgICAgICAgICAgICAgbnByb2MsIGksIHJjOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgYXV0b19ubGlzdCggTlBST0NfU1lNQk9MLCAoY2hhciAqKSZucHJvYywgc2l6ZW9mKGludCkpOworICAgIHByb2NfdGFibGUgPSAoc3RydWN0IHByb2MgKikgbWFsbG9jKG5wcm9jKihzaXplb2Yoc3RydWN0IHByb2MpKSk7CisKKyAgICBhdXRvX25saXN0KCAgUFJPQ19TWU1CT0wsIChjaGFyICopJnByb2NfdGFibGVfYmFzZSwgc2l6ZW9mKGludCkpOworICAgIE5FVFNOTVBfS0xPT0tVUChwcm9jX3RhYmxlX2Jhc2UsIChjaGFyICopcHJvY190YWJsZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnByb2MqKHNpemVvZihzdHJ1Y3QgcHJvYykpKTsKKworICAgIGZvciAoIGk9MCA7IGk8bnByb2M7IGkrKyApIHsKKyAgICAgICAgaWYgKDAgPT0gcHJvY190YWJsZVtpXS5wX3N0YXQpCisgICAgICAgICAgICBjb250aW51ZTsJLyogU2tpcCB1bnVzZWQgZW50cmllcyAqLworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2NfdGFibGVbaV0ucF9waWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBYWFggLSBXaGF0IGluZm9ybWF0aW9uIGRvZXMgJ3N0cnVjdCBwcm9jJyBjb250YWluPworICAgICAgICAgKi8KKyAgICAgICAgCisvKgorIEFwcGFyZW50bHkgbm8gcHJvY2VzcyBuYW1lL2FyZ3VtZW50IGluZm9ybWF0aW9uCisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jX3RhYmxlW2ldLj8/Pyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhdGgpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBwcm9jX3RhYmxlW2ldLj8/Pyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCA/Pz8pOworICovCisKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLnBfc3RhdCkgeworLyogWFhYIC0gd2hpY2ggbmFtZXMgdG8gdXNlID8/ICovCisgICAgICAgIGNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTV0FQOgorICAgICAgICBjYXNlIFNTTEVFUDoKKyAgICAgICAgY2FzZSBTV0FJVDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSAocHJvY190YWJsZVtpXS5wX3V0aW1lLnR2X3NlYyAgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucF91dGltZS50dl91c2VjIC8gMTAwMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucF9zdGltZS50dl9zZWMgICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBfc3RpbWUudHZfdXNlYyAvIDEwMDAwKTsKKyAgICAvKgorICAgICBvciBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gcHJvY190YWJsZVtpXS5wX3RpbWU7CisgICAgICovCisgICAgfQorICAgIGZyZWUocHJvY190YWJsZSk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX251bGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDNkNDBlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9udWxsLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIHN3cnVuX251bGwuYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgZHVtbXkgaW50ZXJmYWNlIGZvciBub24tc3VwcG9ydGVkIHN5c3RlbXMKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIC8qIE5vdGhpbmcgdG8gZG8gKi8KKyAgICByZXR1cm47Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCitpbnQKK25ldHNubXBfYXJjaF9zd3J1bl9jb250YWluZXJfbG9hZCggbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3BzaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOTYxZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2Nmc19wc2luZm8uYwpAQCAtMCwwICsxLDE0NyBAQAorLyoKKyAqIHN3cnVuX3Byb2Nmc19wc2luZm8uYzoKKyAqICAgICBoclNXUnVuVGFibGUgZGF0YSBhY2Nlc3M6CisgKiAgICAgL3Byb2Mve3BpZH0vcHNpbmZvIGludGVyZmFjZSAtIFNvbGFyaXMKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmZGVmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2RlZmluZSBIQVZFX1NZU19QUk9DRlNfSCAgICAvKiBYWFggLSBOZWVkcyBhIGNvbmZpZ3VyZSBjaGVjayEgKi8KKyNpZmRlZiBIQVZFX1NZU19QUk9DRlNfSAorI2RlZmluZSBfS0VSTkVMICAgICAgICAgICAgICAvKiBGb3IgcHNpbmZvX3QgKi8KKyNpbmNsdWRlIDxzeXMvcHJvY2ZzLmg+CisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUFJPQ19ICisjaW5jbHVkZSA8c3lzL3Byb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF9zd3J1bl9pbml0KHZvaWQpCit7CisgICAgLyogTm90aGluZyB0byBkbyAqLworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICpwcm9jZGlyID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICpwcm9jZW50cnlfcDsKKyAgICBwc2luZm9fdCAgICAgICAgICAgICBwc2luZm87CisgICAgaW50ICAgICAgICAgICAgICAgICAgcGlkLCByYywgZmQ7CisgICAgY2hhciAgICAgICAgICAgICAgICAqY3AsIGJ1Zls1MTJdOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgcHJvY2RpciA9IG9wZW5kaXIoIi9wcm9jIik7CisgICAgaWYgKCBOVUxMID09IHByb2NkaXIgKSB7CisgICAgICAgIHNubXBfbG9nKCBMT0dfRVJSLCAiRmFpbGVkIHRvIG9wZW4gL3Byb2MiICk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhbGsgdGhyb3VnaCB0aGUgbGlzdCBvZiBwcm9jZXNzZXMgaW4gdGhlIC9wcm9jIHRyZWUKKyAgICAgKi8KKyAgICB3aGlsZSAoIE5VTEwgIT0gKHByb2NlbnRyeV9wID0gcmVhZGRpciggcHJvY2RpciApKSkgeworICAgICAgICBwaWQgPSBhdG9pKCBwcm9jZW50cnlfcC0+ZF9uYW1lICk7CisgICAgICAgIGlmICggMCA9PSBwaWQgKQorICAgICAgICAgICAgY29udGludWU7ICAgLyogUHJlc3VtYWJseSAnLicgb3IgJy4uJyAqLworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IGV4dHJhY3QgdGhlIGludGVyZXN0aW5nIGluZm9ybWF0aW9uCisgICAgICAgICAqICAgZnJvbSB0aGUgdmFyaW91cyAvcHJvY3tQSUR9LyBpbnRlcmZhY2UgZmlsZXMKKyAgICAgICAgICovCisKKyAgICAgICAgc25wcmludGYoIGJ1Ziwgc2l6ZW9mKGJ1ZiksICIvcHJvYy8lZC9wc2luZm8iLCBwaWQgKTsKKyAgICAgICAgZmQgPSBvcGVuKCBidWYsIE9fUkRPTkxZICk7CisgICAgICAgIHJlYWQoIGZkLCAmcHNpbmZvLCBzaXplb2YocHNpbmZvKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuCisgICAgICAgICAgICA9IHNwcmludGYoZW50cnktPmhyU1dSdW5OYW1lLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgcHNpbmZvLnByX2ZuYW1lKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFNwbGl0IHByX3BzYXJncyBpbnRvIHR3bzoKKyAgICAgICAgICogICAgIGFyZ3ZbMF0gICBpcyBoclNXUnVuUGF0aAorICAgICAgICAgKiAgICAgYXJndlsxLi5dIGlzIGhyU1dSdW5QYXJhbWV0ZXJzCisgICAgICAgICAqLworICAgICAgICBmb3IgKCBjcCA9IHBzaW5mby5wcl9wc2FyZ3M7ICcgJyA9PSAqY3A7IGNwKysgKQorICAgICAgICAgICAgOworICAgICAgICAqY3AgPSAnXDAnOyAgICAvKiBFbmQgb2YgYXJndlswXSAqLworICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuCisgICAgICAgICAgICA9IHNwcmludGYoZW50cnktPmhyU1dSdW5QYXRoLCAiJS4qcyIsCisgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgcHNpbmZvLnByX3BzYXJncyk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbgorICAgICAgICAgICAgPSBzcHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywgIiUuKnMiLAorICAgICAgICAgICAgICAgICAgICAgIChpbnQpc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycykgLSAxLCBjcCsxKTsKKyAgICAgICAgKmNwID0gJyAnOyAgICAgLyogUmVzdG9yZSBwcl9wc2FyZ3MgdmFsdWUgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBmb3Igc3lzdGVtIHByb2Nlc3NlcworICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gKFBSX0lTU1lTICYgcHNpbmZvLnByX2ZsYWcpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IDIgICAvKiBrZXJuZWwgcHJvY2VzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiA0ICAgLyogIGFwcGxpY2F0aW9uICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKKworICAgICAgICBzd2l0Y2ggKHBzaW5mby5wcl9sd3AucHJfc3RhdGUpIHsKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTTEVFUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU1RPUDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU0lETDoKKyAgICAgICAgY2FzZSBTWk9NQjoKKyAgICAgICAgZGVmYXVsdDogICAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRDsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IChwc2luZm8ucHJfdGltZS50dl9zZWMgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHBzaW5mby5wcl90aW1lLnR2X25zZWMgLyAxMDAwMDAwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSAgcHNpbmZvLnByX3Jzc2l6ZTsKKwkJLyogWFhYIC0gaXMgdGhpcyByZXBvcnRlZCBpbiBrQj8gKi8KKyAgICB9CisgICAgY2xvc2VkaXIoIHByb2NkaXIgKTsKKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcm9jZnNfc3RhdHVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY5ZTI2OQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2ZzX3N0YXR1cy5jCkBAIC0wLDAgKzEsMjIwIEBACisvKgorICogc3dydW5fcHJvY2ZzX2xpbnV4LmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIC9wcm9jL3twaWR9L3N0YXR1cyBpbnRlcmZhY2UgLSBMaW51eAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX0xJTlVYX1RBU0tTX0gKKyNpbmNsdWRlIDxsaW51eC90YXNrcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCitzdGF0aWMgbG9uZyBwYWdlc2l6ZTsKK3N0YXRpYyBsb25nIHNjX2Nsa190Y2s7CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworI2lmZGVmIEhBVkVfTElOVVhfVEFTS1NfSAorICAgIGV4dGVybiBpbnQgX3N3cnVuX21heCA9IE5SX1RBU0tTOyAgIC8qIGZyb20gPGxpbnV4L3Rhc2tzLmg+ICovCisjZW5kaWYKKyAgICAKKyAgICBwYWdlc2l6ZSA9IGdldHBhZ2VzaXplKCk7CisgICAgc2NfY2xrX3RjayA9IHN5c2NvbmYoX1NDX0NMS19UQ0spOworICAgIHJldHVybjsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3N3cnVuX2NvbnRhaW5lcl9sb2FkKCBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncykKK3sKKyAgICBESVIgICAgICAgICAgICAgICAgICpwcm9jZGlyID0gTlVMTDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgICAgICpwcm9jZW50cnlfcDsKKyAgICBGSUxFICAgICAgICAgICAgICAgICpmcDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBwaWQsIGk7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICAgY3B1OworICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZltCVUZTSVpdLCBidWYyW0JVRlNJWl0sICpjcCwgKmNwMTsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKyAgICAKKyAgICBwcm9jZGlyID0gb3BlbmRpcigiL3Byb2MiKTsKKyAgICBpZiAoIE5VTEwgPT0gcHJvY2RpciApIHsKKyAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiAvcHJvYyIgKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogV2FsayB0aHJvdWdoIHRoZSBsaXN0IG9mIHByb2Nlc3NlcyBpbiB0aGUgL3Byb2MgdHJlZQorICAgICAqLworICAgIHdoaWxlICggTlVMTCAhPSAocHJvY2VudHJ5X3AgPSByZWFkZGlyKCBwcm9jZGlyICkpKSB7CisgICAgICAgIHBpZCA9IGF0b2koIHByb2NlbnRyeV9wLT5kX25hbWUgKTsKKyAgICAgICAgaWYgKCAwID09IHBpZCApCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBQcmVzdW1hYmx5ICcuJyBvciAnLi4nICovCisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShwaWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IGV4dHJhY3QgdGhlIGludGVyZXN0aW5nIGluZm9ybWF0aW9uCisgICAgICAgICAqICAgZnJvbSB0aGUgdmFyaW91cyAvcHJvY3tQSUR9LyBpbnRlcmZhY2UgZmlsZXMKKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogICBOYW1lOiAgcHJvY2VzcyBuYW1lCisgICAgICAgICAqLworICAgICAgICBzbnByaW50ZiggYnVmMiwgQlVGU0laLCAiL3Byb2MvJWQvc3RhdHVzIiwgcGlkICk7CisgICAgICAgIGZwID0gZm9wZW4oIGJ1ZjIsICJyIiApOworICAgICAgICBpZiAoIWZwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7IC8qIGZpbGUgKHByb2Nlc3MpIHByb2JhYmx5IHdlbnQgYXdheSAqLworCX0KKyAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgc2l6ZW9mKGJ1ZikpOworICAgICAgICBpZiAoZmdldHMoIGJ1ZiwgQlVGU0laLTEsIGZwICkgPT0gTlVMTCkgeworICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZnApOworCisgICAgICAgIGZvciAoIGNwID0gYnVmOyAqY3AgIT0gJzonOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgd2hpbGUgKGlzc3BhY2UoKigrK2NwKSkpCS8qIFNraXAgJzonIGFuZCBmb2xsb3dpbmcgc3BhY2VzICovCisgICAgICAgICAgICA7CisgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZV9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLTEsICIlcyIsIGNwKTsKKyAgICAgICAgaWYgKCAnXG4nID09IGVudHJ5LT5oclNXUnVuTmFtZVsgZW50cnktPmhyU1dSdW5OYW1lX2xlbi0xIF0pIHsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuTmFtZVsgZW50cnktPmhyU1dSdW5OYW1lX2xlbi0xIF0gPSAnXDAnOworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbi0tOyAgICAgICAgICAgLyogU3RhbXAgb24gdHJhaWxpbmcgbmV3bGluZSAqLworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogIENvbW1hbmQgTGluZToKKyAgICAgICAgICogICAgIGFyZ3ZbMF0gJ1wwJyBhcmd2WzFdICdcMCcgLi4uLgorICAgICAgICAgKi8KKyAgICAgICAgc25wcmludGYoIGJ1ZjIsIEJVRlNJWiwgIi9wcm9jLyVkL2NtZGxpbmUiLCBwaWQgKTsKKyAgICAgICAgZnAgPSBmb3BlbiggYnVmMiwgInIiICk7CisgICAgICAgIGlmICghZnApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsgLyogZmlsZSAocHJvY2VzcykgcHJvYmFibHkgd2VudCBhd2F5ICovCisgICAgICAgIH0KKyAgICAgICAgZW50cnktPmhyU1dSdW5UeXBlID0gSFJTV1JVTlRZUEVfQVBQTElDQVRJT047CisgICAgICAgIG1lbXNldChidWYsIDAsIHNpemVvZihidWYpKTsKKyAgICAgICAgY3AgPSBmZ2V0cyggYnVmLCBCVUZTSVotMSwgZnAgKTsKKyAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiAgICAgYXJndlswXSAgIGlzIGhyU1dSdW5QYXRoCisgICAgICAgICAgICAgKi8gCisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhdGhfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5QYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSwgIiVzIiwgYnVmKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTdGl0Y2ggdG9nZXRoZXIgYXJndlsxLi5dIHRvIGNvbnN0cnVjdCBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgICAgICovCisgICAgICAgICAgICBjcCA9IGJ1ZiArIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4rMTsKKyAgICAgICAgICAgIHdoaWxlICggMSApIHsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKmNwKQorICAgICAgICAgICAgICAgICAgICBjcCsrOworICAgICAgICAgICAgICAgIGlmICggJ1wwJyA9PSAqKGNwKzEpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsgICAgICAvKiAnXDAnJ1wwJyA9PiBFbmQgb2YgY29tbWFuZCBsaW5lICovCisgICAgICAgICAgICAgICAgKmNwID0gJyAnOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbgorICAgICAgICAgICAgICAgID0gc3ByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGludClzaXplb2YoZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzKSAtIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiArIGVudHJ5LT5oclNXUnVuUGF0aF9sZW4gKyAxKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIGVtcHR5IC9wcm9jL1BJRC9jbWRsaW5lLCBpdCdzIHByb2JhYmx5IGEga2VybmVsIHRocmVhZCAqLworICAgICAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IDA7CisgICAgICAgICAgICBlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnNfbGVuID0gMDsKKyAgICAgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IEhSU1dSVU5UWVBFX09QRVJBVElOR1NZU1RFTTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqICAge3h4eH0ge3h4eH0gU1RBVFVTICB7eHh4fSoxMCAgVVRJTUUgU1RJTUUgIHt4eHh9KjggUlNTCisgICAgICAgICAqLworICAgICAgICBzbnByaW50ZiggYnVmLCBCVUZTSVosICIvcHJvYy8lZC9zdGF0IiwgcGlkICk7CisgICAgICAgIGZwID0gZm9wZW4oIGJ1ZiwgInIiICk7CisgICAgICAgIGlmICghZnApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsgLyogZmlsZSAocHJvY2VzcykgcHJvYmFibHkgd2VudCBhd2F5ICovCisJfQorICAgICAgICBpZiAoZmdldHMoIGJ1ZiwgQlVGU0laLTEsIGZwICkgPT0gTlVMTCkgeworICAgICAgICAgICAgZmNsb3NlKGZwKTsKKyAgICAgICAgICAgIG5ldHNubXBfc3dydW5fZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICBmY2xvc2UoZnApOworCisgICAgICAgIGNwID0gYnVmOworICAgICAgICB3aGlsZSAoICcgJyAhPSAqKGNwKyspKSAgICAvKiBTa2lwIGZpcnN0IGZpZWxkICovCisgICAgICAgICAgICA7CisgICAgICAgIGNwMSA9IGNwOyAgICAgICAgICAgICAgICAgIC8qIFNraXAgc2Vjb25kIGZpZWxkICovCisgICAgICAgIHdoaWxlICgqY3AxKSB7CisgICAgICAgICAgICBpZiAoKmNwMSA9PSAnKScpIGNwID0gY3AxOworICAgICAgICAgICAgY3AxKys7CisgICAgICAgIH0KKyAgICAgICAgY3AgKz0gMjsKKyAgICAgICAgCisgICAgICAgIHN3aXRjaCAoKmNwKSB7CisgICAgICAgIGNhc2UgJ1InOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5JTkc7CisgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1MnOiAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX1JVTk5BQkxFOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdEJzoKKyAgICAgICAgY2FzZSAnVCc6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfTk9UUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1onOgorICAgICAgICBkZWZhdWx0OiAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGZvciAoaT0xMTsgaTsgaS0tKSB7ICAgLyogU2tpcCBTVEFUVVMgKyAxMCBmaWVsZHMgKi8KKyAgICAgICAgICAgIHdoaWxlICgnICcgIT0gKigrK2NwKSkKKyAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICBjcCsrOworICAgICAgICB9CisgICAgICAgIGNwdSAgPSBhdG9sKCBjcCApOyAgICAgICAgICAgICAgICAgICAgIC8qICB1dGltZSAqLworICAgICAgICB3aGlsZSAoICcgJyAhPSAqKCsrY3ApKQorICAgICAgICAgICAgOworICAgICAgICBjcHUgKz0gYXRvbCggY3AgKTsgICAgICAgICAgICAgICAgICAgICAvKiArc3RpbWUgKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICA9IGNwdSAqIDEwMCAvIHNjX2Nsa190Y2s7CisKKyAgICAgICAgZm9yIChpPTk7IGk7IGktLSkgeyAgIC8qIFNraXAgc3RpbWUgKyA4IGZpZWxkcyAqLworICAgICAgICAgICAgd2hpbGUgKCcgJyAhPSAqKCsrY3ApKQorICAgICAgICAgICAgICAgIDsKKyAgICAgICAgICAgIGNwKys7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9IGF0b2woIGNwICk7ICAgICAgIC8qIHJzcyAgICovCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAocGFnZXNpemUvMTAyNCk7ICAvKiBpbiBrQiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKyAgICBjbG9zZWRpciggcHJvY2RpciApOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJSIgTkVUU05NUF9QUkl6ICJkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3Byb2NpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ2NDBlMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHJvY2luZm8uYwpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAqIHN3cnVuX3Byb2NpbmZvLmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIGdldHByb2NzKCkgaW50ZXJmYWNlIC0gQUlYCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxwcm9jaW5mby5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaD4KKworaW50IGF2YWlsID0gMTAyNDsgICAgLyogU2l6ZSBvZiB0YWJsZSB0byBhbGxvY2F0ZSAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBwcm9jc2luZm8gICAgKnByb2NfdGFibGU7CisgICAgcGlkX3QgICAgICAgICAgICAgICAgcHJvY19pbmRleCA9IDA7CisgICAgaW50ICAgICAgICAgICAgICAgICAgbnByb2NzLCBpOworICAgIGNoYXIgICAgICAgICAgICAgICAgIHBlbnRyeVsxMjhdLCAqcHBlbnRyeSwgZnVsbHBhdGhbMTI4XTsKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICplbnRyeTsKKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgYnVmZmVyIGZvciB0aGUgcHJvY2VzcyB0YWJsZSwgYmFzZWQgb24gdGhlIHNpemUgb2YKKyAgICAgKiAgIHRoZSB0YWJsZSB0aGUgbGFzdCB0aW1lIHdlIGxvYWRlZCB0aGlzIGluZm9ybWF0aW9uLgorICAgICAqIElmIHRoaXMgaXNuJ3QgYmlnIGVub3VnaCwga2VlcCBpbmNyZWFzaW5nIHRoZSBzaXplIG9mIHRoZQorICAgICAqICAgdGFibGUgdW50aWwgd2UgY2FuIHJldHJpZXZlIHRoZSB3aG9sZSB0aGluZy4KKyAgICAgKi8KKyAgICBwcm9jX3RhYmxlID0gKHN0cnVjdCBwcm9jc2luZm8gKikgbWFsbG9jKGF2YWlsKihzaXplb2Yoc3RydWN0IHByb2NzaW5mbykpKTsKKyAgICB3aGlsZSAoIGF2YWlsID09IChucHJvY3MgPSBnZXRwcm9jcyhwcm9jX3RhYmxlLCBzaXplb2Yoc3RydWN0IHByb2NzaW5mbyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgc2l6ZW9mKHN0cnVjdCBmZHNpbmZvKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJvY19pbmRleCwgYXZhaWwpKSkgeworICAgICAgICBhdmFpbCArPSAxMDI0OworICAgICAgICBmcmVlKCBwcm9jX3RhYmxlICk7CisgICAgICAgIHByb2NfdGFibGUgPSAoc3RydWN0IHByb2NzaW5mbyAqKSBtYWxsb2MoYXZhaWwqKHNpemVvZihzdHJ1Y3QgcHJvY3NpbmZvKSkpOworICAgIH0KKworICAgIGZvciAoIGk9MCA7IGk8bnByb2NzOyBpKysgKSB7CisgICAgICAgIGlmICgwID09IHByb2NfdGFibGVbaV0ucGlfc3RhdGUpCisgICAgICAgICAgICBjb250aW51ZTsJLyogU2tpcCB1bnVzZWQgZW50cmllcyAqLworICAgICAgICBlbnRyeSA9IG5ldHNubXBfc3dydW5fZW50cnlfY3JlYXRlKHByb2NfdGFibGVbaV0ucGlfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworCisJbWVtc2V0KHBlbnRyeSwgMCwgc2l6ZW9mKHBlbnRyeSkpOwkJCQkJCQkJLyogRW1wdHkgZWFjaCB0aW1lICovCisJaWYoIShTS1BST0MgJiBwcm9jX3RhYmxlW2ldLnBpX2ZsYWdzKSkgewkJCQkJCQkvKiBSZW1vdmUga2VybmVsIHByb2Nlc3NlcyAqLworCQlnZXRhcmdzKCZwcm9jX3RhYmxlW2ldLCBzaXplb2Yoc3RydWN0IHByb2NzaW5mbyksIHBlbnRyeSwgc2l6ZW9mKHBlbnRyeSkpOyAgICAgICAgICAgICAgLyogQ2FsbCBnZXRhcmdzKCkgKi8KKwkJZm9yKHBwZW50cnkgPSBwZW50cnk7ICEoKCpwcGVudHJ5ID09ICdcMCcpICYmICgqKHBwZW50cnkrMSkgPT0gJ1wwJykpOyBwcGVudHJ5KyspIHsgICAgIC8qIFByb2Nlc3MgdW50aWwgMHgwMCAweDAwICovCisJCQlpZigoKnBwZW50cnkgPT0gJ1wwJykgJiYgKCEoKihwcGVudHJ5KzEpID09ICdcMCcpKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIDB4MDAgITB4MDAgKi8KKwkJCQkqcHBlbnRyeSA9ICcgJzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBjaGFuZ2UgdG8gMHgyMCAhMHgwMCAqLworCQl9CisJCXNucHJpbnRmKGZ1bGxwYXRoLCBzaXplb2YoZnVsbHBhdGgpLTEsICIlLipzIiwgKGludCkoc3RyY2hyKHBlbnRyeSwgJyAnKS1wZW50cnkpLCBwZW50cnkpOworCisJCWVudHJ5LT5oclNXUnVuUGF0aF9sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhdGgsCisJCQlzaXplb2YoZW50cnktPmhyU1dSdW5QYXRoKSwgIiVzIiwgZnVsbHBhdGgpOworCQlwcGVudHJ5ID0gc3RycmNocihmdWxscGF0aCwgJy8nKTsKKwkJaWYocHBlbnRyeSA9PSBOVUxMKSB7CisJCQllbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorCQkJCXNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLCAiJXMiLCBmdWxscGF0aCk7CisJCX0KKwkJZWxzZSB7CisJCQllbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorCQkJCXNpemVvZihlbnRyeS0+aHJTV1J1bk5hbWUpLCAiJXMiLCBwcGVudHJ5ICsgMSk7CisJCX0KKworCQlwcGVudHJ5ID0gc3RyY2hyKHBlbnRyeSwgJyAnKTsKKwkJZW50cnktPmhyU1dSdW5QYXJhbWV0ZXJzX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGFyYW1ldGVycywKKwkJCXNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLCAiJS4qcyIsIChpbnQpKHBlbnRyeSAtIHBwZW50cnkpLCBwcGVudHJ5ICsgMSk7CisJfQorCisgICAgICAgIGVudHJ5LT5oclNXUnVuVHlwZSA9IChTS1BST0MgJiBwcm9jX3RhYmxlW2ldLnBpX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAyICAgLyoga2VybmVsIHByb2Nlc3MgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogNCAgIC8qICBhcHBsaWNhdGlvbiAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CisKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW2ldLnBpX3N0YXRlKSB7CisgICAgICAgIGNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTUlVOOiAgICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBTU0xFRVA6ICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gKHByb2NfdGFibGVbaV0ucGlfcnUucnVfdXRpbWUudHZfc2VjICogMTAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmQ1BVICs9IChwcm9jX3RhYmxlW2ldLnBpX3J1LnJ1X3V0aW1lLnR2X3VzZWMgLyAxMDAwMDAwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAocHJvY190YWJsZVtpXS5waV9ydS5ydV9zdGltZS50dl9zZWMgKiAxMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgKz0gKHByb2NfdGFibGVbaV0ucGlfcnUucnVfc3RpbWUudHZfdXNlYyAvIDEwMDAwMDAwKTsKKyAgICAgICAgZW50cnktPmhyU1dSdW5QZXJmTWVtICA9ICBwcm9jX3RhYmxlW2ldLnBpX3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoZ2V0cGFnZXNpemUoKS8xMDI0KTsgIC8qIGluIGtCICovCisgICAgfQorICAgIGZyZWUocHJvY190YWJsZSk7CisKKyAgICBERUJVR01TR1RMKCgic3dydW46bG9hZDphcmNoIiwiIGxvYWRlZCAlZCBlbnRyaWVzXG4iLAorICAgICAgICAgICAgICAgIChpbnQpIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bl9wcnBzaW5mby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYmJiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BycHNpbmZvLmMKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiBzd3J1bl9wcnBzaW5mby5jOgorICogICAgIGhyU1dSdW5UYWJsZSBkYXRhIGFjY2VzczoKKyAqICAgICBnZXRwcnBzaW5mbygpIGludGVyZmFjZSAtIER5bml4CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFXz8/Pz8/X0gKKyNpbmNsdWRlIDw/Pz8/Py5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9zd3J1bi5oPgorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLwordm9pZAorbmV0c25tcF9hcmNoX3N3cnVuX2luaXQodm9pZCkKK3sKKyAgICAvKiBOb3RoaW5nIHRvIGRvICovCisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHBpZF90ICAgICAgICAgICAgICAgIG5leHRwcm9jID0gMDsKKyAgICBnZXRwcnBzaW5mb190ICAgICAgICpzZWxlY3QgICA9IDA7CisgICAgcHJwc2luZm9fdCAgICAgICAgICAgbXlwc2luZm87CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmM7CisgICAgY2hhciAgICAgICAgICAgICAgICAqY3A7CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnk7CisKKyAgICB3aGlsZSAoIDAgPD0gKCBuZXh0cHJvYyA9IGdldHBycHNpbmZvKCBuZXh0cHJvYywgc2VsZWN0LCAmbXlwc2luZm8gKSkpIHsKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShteXBzaW5mby5wcl9waWQpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIGVycm9yIGFscmVhZHkgbG9nZ2VkIGJ5IGZ1bmN0aW9uICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKworICAgICAgICBlbnRyeS0+aHJTV1J1bk5hbWVfbGVuID0gc25wcmludGYoZW50cnktPmhyU1dSdW5OYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmhyU1dSdW5OYW1lKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVzIiwgbXlwc2luZm8ucHJfZm5hbWUpOworICAgICAgICAvKgorICAgICAgICAgKiAgU3BsaXQgcHJfcHNhcmdzIGludG8gdHdvOgorICAgICAgICAgKiAgICAgYXJndlswXSAgIGlzIGhyU1dSdW5QYXRoCisgICAgICAgICAqICAgICBhcmd2WzEuLl0gaXMgaHJTV1J1blBhcmFtZXRlcnMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoIGNwID0gbXlwc2luZm8ucHJfcHNhcmdzOyAnICcgPT0gKmNwOyBjcCsrICkKKyAgICAgICAgICAgIDsKKyAgICAgICAgKmNwID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIG15cHNpbmZvLnByX3BzYXJncyk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBjcCsxKTsKKyAgICAgICAgKmNwID0gJyAnOyAgICAgLyogUmVzdG9yZSBwcl9wc2FyZ3MgdmFsdWUgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBYWFggLSBObyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgc3lzdGVtIHByb2Nlc3NlcyB2cyBhcHBsaWNhdGlvbnMKKyAgICAgICAgICovCisKKyAgICAgICAgc3dpdGNoIChteXBzaW5mby5wcl9zdGF0ZSkgeworLyogWFhYIC0gd2hpY2ggbmFtZXMgdG8gdXNlID8/ICovCisgICAgICAgIGNhc2UgU0FDVElWRToKKyAgICAgICAgY2FzZSBTUlVOOgorICAgICAgICBjYXNlIFNPTlBST0M6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OSU5HOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNTV0FQOgorICAgICAgICBjYXNlIFNTTEVFUDoKKyAgICAgICAgY2FzZSBTV0FJVDogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTkFCTEU7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgU1NUT1A6ICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFOworICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFNJREw6CisgICAgICAgIGNhc2UgU1pPTUI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgZW50cnktPmhyU1dSdW5TdGF0dXMgPSBIUlNXUlVOU1RBVFVTX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZDUFUgID0gKG15cHNpbmZvLnByX3RpbWUudHZfc2VjICAqIDEwMCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSArPSAobXlwc2luZm8ucHJfdGltZS50dl9uc2VjIC8gMTAwMDAwMDApOworICAgICAgICBlbnRyeS0+aHJTV1J1blBlcmZNZW0gID0gKG15cHNpbmZvLnByX3Jzc2l6ZSk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSAoTVVfUEFHRVNJWkUvMTAyNCk7ICAvKiBpbiBrQiAqLworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzd3J1bjpsb2FkOmFyY2giLCIgbG9hZGVkICVkIGVudHJpZXNcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2RhdGFfYWNjZXNzL3N3cnVuX3BzdGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1Y2U3NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvZGF0YV9hY2Nlc3Mvc3dydW5fcHN0YXQuYwpAQCAtMCwwICsxLDExNyBAQAorLyoKKyAqIHN3cnVuX3BzdGF0LmM6CisgKiAgICAgaHJTV1J1blRhYmxlIGRhdGEgYWNjZXNzOgorICogICAgIHBzdGF0X2dldGR5bmFtaWMoKSBpbnRlcmZhY2UgLSBIUFVYCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QU1RBVF9ICisjZGVmaW5lIF9QU1RBVDY0CisjaW5jbHVkZSA8c3lzL3BzdGF0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCituZXRzbm1wX2FyY2hfc3dydW5faW5pdCh2b2lkKQoreworICAgIGV4dGVybiBpbnQgX3N3cnVuX21heDsKKyAgICBzdHJ1Y3QgcHN0X3N0YXRpYyBwc3RfYnVmOworCisgICAgcHN0YXRfZ2V0c3RhdGljKCAmcHN0X2J1Ziwgc2l6ZW9mKHN0cnVjdCBwc3Rfc3RhdGljKSwgMSwgMCk7CisgICAgX3N3cnVuX21heCA9IHBzdF9idWYubWF4X3Byb2M7CisgICAgcmV0dXJuOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworaW50CituZXRzbm1wX2FyY2hfc3dydW5fY29udGFpbmVyX2xvYWQoIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKQoreworICAgIHN0cnVjdCBwc3Rfc3RhdHVzICAgKnByb2NfdGFibGU7CisgICAgc3RydWN0IHBzdF9keW5hbWljICAgcHN0X2R5bjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBucHJvYywgaSwgcmM7CisgICAgY2hhciAgICAgICAgICAgICAgICAqY3AxLCAqY3AyOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKmVudHJ5OworCisgICAgcHN0YXRfZ2V0ZHluYW1pYyggJnBzdF9keW4sIHNpemVvZihzdHJ1Y3QgcHN0X2R5bmFtaWMpLCAxLCAwKTsKKyAgICBucHJvYyA9IHBzdF9keW4ucHNkX2FjdGl2ZXByb2NzOworICAgIHByb2NfdGFibGUgPSAoc3RydWN0IHBzdF9zdGF0dXMgKikgbWFsbG9jKG5wcm9jKihzaXplb2Yoc3RydWN0IHBzdF9zdGF0dXMpKSk7CisgICAgcHN0YXRfZ2V0cHJvYyhwcm9jX3RhYmxlLCBzaXplb2Yoc3RydWN0IHBzdF9zdGF0dXMpLCBucHJvYywgMCk7CisKKyAgICBmb3IgKCBpPTAgOyBpPG5wcm9jOyBpKysgKSB7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9zd3J1bl9lbnRyeV9jcmVhdGUocHJvY190YWJsZVtpXS5wc3RfcGlkKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgICAgICBjb250aW51ZTsgICAvKiBlcnJvciBhbHJlYWR5IGxvZ2dlZCBieSBmdW5jdGlvbiAqLworICAgICAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisKKyAgICAgICAgZW50cnktPmhyU1dSdW5OYW1lX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuTmFtZSktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHByb2NfdGFibGVbaV0ucHN0X3Vjb21tKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogIFNwbGl0IHBzdF9jbWQgaW50byB0d286CisgICAgICAgICAqICAgICBhcmd2WzBdICAgaXMgaHJTV1J1blBhdGgKKyAgICAgICAgICogICAgIGFyZ3ZbMS4uXSBpcyBoclNXUnVuUGFyYW1ldGVycworICAgICAgICAgKi8KKyAgICAgICAgZm9yICggY3AxID0gcHJvY190YWJsZVtpXS5wc3RfY21kOyAnICcgPT0gKmNwMTsgY3AxKysgKQorICAgICAgICAgICAgOworICAgICAgICAqY3AxID0gJ1wwJzsgICAgLyogRW5kIG9mIGFyZ3ZbMF0gKi8KKyAgICAgICAgZW50cnktPmhyU1dSdW5QYXRoX2xlbiA9IHNucHJpbnRmKGVudHJ5LT5oclNXUnVuUGF0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5oclNXUnVuUGF0aCktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlcyIsIHByb2NfdGFibGVbaV0ucHN0X2NtZCk7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGFyYW1ldGVyc19sZW4gPSBzbnByaW50ZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+aHJTV1J1blBhcmFtZXRlcnMpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJXMiLCBjcDErMSk7CisgICAgICAgICpjcDEgPSAnICc7ICAgICAvKiBSZXN0b3JlIHBzdF9jbWQgdmFsdWUgKi8KKworICAgICAgICBlbnRyeS0+aHJTV1J1blR5cGUgPSAoUFNfU1lTICYgcHJvY190YWJsZVtpXS5wc3RfZmxhZykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID8gMiAgIC8qIGtlcm5lbCBwcm9jZXNzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IDQgICAvKiAgYXBwbGljYXRpb24gICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOworCisgICAgICAgIHN3aXRjaCAocHJvY190YWJsZVtpXS5wc3Rfc3RhdCkgeworICAgICAgICBjYXNlIFBTX1JVTjogICBlbnRyeS0+aHJTV1J1blN0YXR1cyA9IEhSU1dSVU5TVEFUVVNfUlVOTklORzsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNfU0xFRVA6IGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19SVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNfU1RPUDogIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19OT1RSVU5OQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUFNfSURMRToKKyAgICAgICAgY2FzZSBQU19aT01CSUU6CisgICAgICAgIGNhc2UgUFNfT1RIRVI6CisgICAgICAgIGRlZmF1bHQ6ICAgICAgIGVudHJ5LT5oclNXUnVuU3RhdHVzID0gSFJTV1JVTlNUQVRVU19JTlZBTElEOworICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZkNQVSAgPSBwcm9jX3RhYmxlW2ldLnBzdF9jcHRpY2tzdG90YWw7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAgPSBwcm9jX3RhYmxlW2ldLnBzdF9yc3NpemU7CisgICAgICAgIGVudHJ5LT5oclNXUnVuUGVyZk1lbSAqPSBnZXRwYWdlc2l6ZSgpIC8gMTAyNDsgIC8qIGluIGtCICovCisJCS8qIFhYWCAtIENoZWNrIHRoaXMgbGFzdCBjYWxjdWxhdGlvbiAqLworICAgIH0KKyAgICBmcmVlKHByb2NfdGFibGUpOworCisgICAgREVCVUdNU0dUTCgoInN3cnVuOmxvYWQ6YXJjaCIsIiBsb2FkZWQgJWQgZW50cmllc1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkOGFlZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5jCkBAIC0wLDAgKzEsMjgyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLmNvbnRhaW5lci5jb25mLHYgMS44IDIwMDYvMDcvMjYgMTU6NTg6MjYgZHRzMTIgRXhwICQKKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dpbnN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgorI2luY2x1ZGUgImhyU1dJbnN0YWxsZWRUYWJsZS5oIgorCisjZGVmaW5lIE1ZVEFCTEUgImhyU1dJbnN0YWxsZWRUYWJsZSIKKworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisKK3N0YXRpYyB2b2lkIF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpOworc3RhdGljIGludCBfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKTsKKworLyoqIEluaXRpYWxpemVzIHRoZSBoclNXSW5zdGFsbGVkVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X2hyU1dJbnN0YWxsZWRUYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcgCisgICAgICovCisgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXSW5zdGFsbGVkVGFibGUoKTsKK30KKwordm9pZAorc2h1dGRvd25faHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorfQorCisvKiogSW5pdGlhbGl6ZSB0aGUgaHJTV0luc3RhbGxlZFRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9oclNXSW5zdGFsbGVkVGFibGUodm9pZCkKK3sKKyAgICBzdGF0aWMgb2lkICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZFtdID0KKyAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNiwgMyB9OworICAgIHNpemVfdCAgICAgICAgICBoclNXSW5zdGFsbGVkVGFibGVfb2lkX2xlbiA9CisgICAgICAgIE9JRF9MRU5HVEgoaHJTV0luc3RhbGxlZFRhYmxlX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOworICAgIG5ldHNubXBfY2FjaGUgKmNhY2hlID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJoclNXSW5zdGFsbGVkIiwgImluaXRpYWxpemVcbiIpKTsKKworICAgIHJlZyA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJoclNXSW5zdGFsbGVkVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXSW5zdGFsbGVkVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImhyU1dJbnN0YWxsZWRUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwgICAvKiBpbmRleDogaHJTV0luc3RhbGxlZEluZGV4ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IENPTFVNTl9IUlNXSU5TVEFMTEVESU5ERVg7CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl9IUlNXSU5TVEFMTEVEREFURTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YWJsZV9pbmZvLCBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgaWYgKE5VTEwgPT0gaGFuZGxlcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjb250YWluZXJfdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0LCB3aWxsIHJldXNlIGJlbG93ICovCisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlX2xvYWQsIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV0luc3RhbGxlZFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dJbnN0YWxsZWRUYWJsZV9vaWRfbGVuKTsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGNhY2hlLT5tYWdpYyA9IGNvbnRhaW5lcjsKKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBoYW5kbGVyID0gTlVMTDsgLyogcmVnIGhhcyBpdCovCisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgcmV0dXJuOyAvKiBvayAqLworCisKKyAgYmFpbDogLyogbm90IG9rICovCisgICAgCisgICAgaWYgKGhhbmRsZXIpCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOworCisgICAgaWYgKGNhY2hlKQorICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKworICAgIGlmIChjb250YWluZXIpCisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CisKKyAgICBpZiAocmVnKSAKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CisKK30KKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBoclNXSW5zdGFsbGVkVGFibGUgdGFibGUgKi8KK2ludAoraHJTV0luc3RhbGxlZFRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICp0YWJsZV9lbnRyeTsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgICAgICAvKgorICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAobmV0c25tcF9zd2luc3RfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRElOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnN3SW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRE5BTUU6IHsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT5zd05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zd05hbWVfbGVuKTsKKyAgICAgICAgICAgICAgICB9IGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRElEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJm51bGxPaWQsIG51bGxPaWRMZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV0lOU1RBTExFRFRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c3dUeXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dJTlNUQUxMRUREQVRFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPnN3RGF0ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zd0RhdGVfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBbiB1bnN1cHBvcnRlZC91bnJlYWRhYmxlIGNvbHVtbiAoaWYgYXBwbGljYWJsZSkgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEQVRBIEFDQ0VTUworICoKKyAqIFRoZSBkYXRhIGFjY2VzcyBtZWNoYW5pc20gaGVyZSBpcyByYXRoZXIgc2ltcGxlOiBsZXQgbmV3c25tcF9zd2luc3RfKgorICogdGFrZSBjYXJlIG9mIGl0LgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImhyU1dJbnN0YWxsZWRUYWJsZTpjYWNoZSIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgZm9yIGhyU1dJbnN0YWxsZWRUYWJsZV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIGNhY2hlLT5tYWdpYyA9CisgICAgICAgIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWMsIDApOworCisgICAgcmV0dXJuIDA7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBoclNXSW5zdGFsbGVkVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoImhyU1dJbnN0YWxsZWRUYWJsZTpjYWNoZSIsICJmcmVlXG4iKSk7CisKKyAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfZnJlZV9pdGVtcygobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV0luc3RhbGxlZFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZjE3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dJbnN0YWxsZWRUYWJsZS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisjaWZuZGVmIEhSU1dJTlNUQUxMRURUQUJMRV9ICisjZGVmaW5lIEhSU1dJTlNUQUxMRURUQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKGhvc3QvZGF0YV9hY2Nlc3Mvc3dpbnN0KQorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9oclNXSW5zdGFsbGVkVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25faHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaHJTV0luc3RhbGxlZFRhYmxlKHZvaWQpOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaHJTV0luc3RhbGxlZFRhYmxlX2hhbmRsZXI7CisKKy8qCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBoclNXSW5zdGFsbGVkVGFibGUgCisgKi8KKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRURJTkRFWAkJMQorI2RlZmluZSBDT0xVTU5fSFJTV0lOU1RBTExFRE5BTUUJCTIKKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRURJRAkJMworI2RlZmluZSBDT0xVTU5fSFJTV0lOU1RBTExFRFRZUEUJCTQKKyNkZWZpbmUgQ09MVU1OX0hSU1dJTlNUQUxMRUREQVRFCQk1CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhSU1dJTlNUQUxMRURUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blBlcmZUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYjQ0ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisjaW5jbHVkZSAiaHJTV1J1blBlcmZUYWJsZS5oIgorI2luY2x1ZGUgImRhdGFfYWNjZXNzL3N3cnVuLmgiCisKKyNkZWZpbmUgTVlUQUJMRSAiaHJTV1J1blBlcmZUYWJsZSIKKworLyoqIEluaXRpYWxpemVzIHRoZSBoclNXUnVuUGVyZlRhYmxlIG1vZHVsZSAqLwordm9pZAoraW5pdF9oclNXUnVuUGVyZlRhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZyAKKyAgICAgKi8KKyAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUoKTsKK30KKwordm9pZAorc2h1dGRvd25faHJTV1J1blBlcmZUYWJsZSh2b2lkKQoreworICAgIHNodXRkb3duX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUoKTsKK30KKworZXh0ZXJuIG9pZCAgICAgIGhyU1dSdW5UYWJsZV9vaWRbXTsKK2V4dGVybiBzaXplX3QgICBoclNXUnVuVGFibGVfb2lkX2xlbjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCisvKiogSW5pdGlhbGl6ZSB0aGUgaHJTV1J1blBlcmZUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfaHJTV1J1blBlcmZUYWJsZSh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgICAgICBoclNXUnVuUGVyZlRhYmxlX29pZFtdID0KKyAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNSwgMSB9OworICAgIHNpemVfdCAgICAgICAgICBoclNXUnVuUGVyZlRhYmxlX29pZF9sZW4gPQorICAgICAgICBPSURfTEVOR1RIKGhyU1dSdW5QZXJmVGFibGVfb2lkKTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWc7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CisKKyAgICByZWcgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaHJTV1J1blBlcmZUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QZXJmVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blBlcmZUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QZXJmVGFibGVfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBhbGxvY2F0aW5nIHRhYmxlIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCAgIC8qIGluZGV4OiBoclNXUnVuSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX0hSU1dSVU5QRVJGQ1BVOworICAgIHRhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fSFJTV1JVTlBFUkZNRU07CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGFibGVfaW5mbywgbmV0c25tcF9zd3J1bl9jb250YWluZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNvbnRhaW5lcl90YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQsIHdpbGwgcmV1c2UgYmVsb3cgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisKKyAgICBoYW5kbGVyID0gbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChuZXRzbm1wX3N3cnVuX2NhY2hlKCkpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICIgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQqLworCisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHJldHVybjsgLyogb2sgKi8KKworCisgIGJhaWw6IC8qIG5vdCBvayAqLworICAgIAorICAgIGlmIChoYW5kbGVyKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKKworICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKKyAgICBpZiAocmVnKSAKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7Cit9CisKK3ZvaWQKK3NodXRkb3duX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgaHJTV1J1blBlcmZUYWJsZSB0YWJsZSAqLworaW50CitoclNXUnVuUGVyZlRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfc3dydW5fZW50cnkgKnRhYmxlX2VudHJ5OworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QRVJGQ1BVOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5QZXJmQ1BVKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QRVJGTUVNOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5QZXJmTWVtKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBbiB1bnN1cHBvcnRlZC91bnJlYWRhYmxlIGNvbHVtbiAoaWYgYXBwbGljYWJsZSkgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5QZXJmVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTNmZGEzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuUGVyZlRhYmxlLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2lmbmRlZiBIUlNXUlVOUEVSRlRBQkxFX0gKKyNkZWZpbmUgSFJTV1JVTlBFUkZUQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKGhvc3QvaHJTV1J1blRhYmxlKQorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9oclNXUnVuUGVyZlRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX2hyU1dSdW5QZXJmVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9oclNXUnVuUGVyZlRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2hyU1dSdW5QZXJmVGFibGUodm9pZCk7CitOZXRzbm1wX05vZGVfSGFuZGxlciBoclNXUnVuUGVyZlRhYmxlX2hhbmRsZXI7CisKKy8qCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBoclNXUnVuUGVyZlRhYmxlIAorICovCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOUEVSRkNQVQkJMQorI2RlZmluZSBDT0xVTU5fSFJTV1JVTlBFUkZNRU0JCTIKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFJTV1JVTlBFUkZUQUJMRV9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wM2FkMjU2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9oclNXUnVuVGFibGUuYwpAQCAtMCwwICsxLDM1MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBtaWIyYy5jb250YWluZXIuY29uZix2IDEuOCAyMDA2LzA3LzI2IDE1OjU4OjI2IGR0czEyIEV4cCAkCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgorI2luY2x1ZGUgImRhdGFfYWNjZXNzL3N3cnVuLmgiCisjaW5jbHVkZSAiaHJTV1J1blRhYmxlLmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2RlZmluZSBNWVRBQkxFICJoclNXUnVuVGFibGUiCisKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworCisvKiogSW5pdGlhbGl6ZXMgdGhlIGhyU1dSdW5UYWJsZSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfaHJTV1J1blRhYmxlKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZyAKKyAgICAgKi8KKyAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5UYWJsZSgpOworfQorCit2b2lkCitzaHV0ZG93bl9oclNXUnVuVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9Cit9CisKK29pZCAgICAgIGhyU1dSdW5UYWJsZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDQsIDIgfTsKK3NpemVfdCAgIGhyU1dSdW5UYWJsZV9vaWRfbGVuID0gT0lEX0xFTkdUSChoclNXUnVuVGFibGVfb2lkKTsKKworLyoqIEluaXRpYWxpemUgdGhlIGhyU1dSdW5UYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KK3ZvaWQKK2luaXRpYWxpemVfdGFibGVfaHJTV1J1blRhYmxlKHZvaWQpCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyNpZmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjICBkZWZpbmUgU1dSVU5fQUNDRVNTX0xFVkVMIEhBTkRMRVJfQ0FOX1JXUklURQorI2Vsc2UKKyMgIGRlZmluZSBTV1JVTl9BQ0NFU1NfTEVWRUwgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZgorI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKKyMgIGRlZmluZSBTV1JVTl9BQ0NFU1NfTEVWRUwgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oTVlUQUJMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1blRhYmxlX2hhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5UYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5UYWJsZV9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTV1JVTl9BQ0NFU1NfTEVWRUwpOworICAgIGlmIChOVUxMID09IHJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIHJlZy0+bW9kZXMgfD0gSEFORExFUl9DQU5fTk9UX0NSRUFURTsKKworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgYWxsb2NhdGluZyB0YWJsZSByZWdpc3RyYXRpb24gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCAgIC8qIGluZGV4OiBoclNXUnVuSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX0hSU1dSVU5JTkRFWDsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX0hSU1dSVU5TVEFUVVM7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0gbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGFibGVfaW5mbywgbmV0c25tcF9zd3J1bl9jb250YWluZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNvbnRhaW5lcl90YWJsZSBoYW5kbGVyIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQsIHdpbGwgcmV1c2UgYmVsb3cgKi8KKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQobmV0c25tcF9zd3J1bl9jYWNoZSgpKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBoYW5kbGVyIGZvciAiIE1ZVEFCTEUgIlxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBoYW5kbGVyKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBpbmplY3RpbmcgY2FjaGUgaGFuZGxlciBmb3IgIgorICAgICAgICAgICAgICAgICBNWVRBQkxFICJcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorICAgIGhhbmRsZXIgPSBOVUxMOyAvKiByZWcgaGFzIGl0Ki8KKworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICByZXR1cm47IC8qIG9rICovCisKKworICBiYWlsOiAvKiBub3Qgb2sgKi8KKyAgICAKKyAgICBpZiAoaGFuZGxlcikKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CisKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCisgICAgaWYgKHJlZykgCisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOworCit9CisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgaHJTV1J1blRhYmxlIHRhYmxlICovCitpbnQKK2hyU1dSdW5UYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF9zd3J1bl9lbnRyeSAqdGFibGVfZW50cnk7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVhZC1zdXBwb3J0IChhbHNvIGNvdmVycyBHZXROZXh0IHJlcXVlc3RzKQorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dydW5fZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTklOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5JbmRleCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9IUlNXUlVOTkFNRToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHRhYmxlX2VudHJ5LT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJTV1J1bk5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuTmFtZV9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTklEOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQkpFQ1RfSUQsCisjaWZkZWYgTkVUU05NUF9TV1JVTl9IQVZFX0lECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPmhyU1dSdW5JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPmhyU1dSdW5JRF9sZW4KKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJm51bGxPaWQsIG51bGxPaWRMZW4KKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlBBVEg6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0YWJsZV9lbnRyeS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyU1dSdW5QYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blBhdGhfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5QQVJBTUVURVJTOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGFyYW1ldGVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoclNXUnVuUGFyYW1ldGVyc19sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blR5cGUpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlNUQVRVUzoKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oclNXUnVuU3RhdHVzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBBbiB1bnN1cHBvcnRlZC91bnJlYWRhYmxlIGNvbHVtbiAoaWYgYXBwbGljYWJsZSkgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QsIE5VTEwsIDApOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorI2lmZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGludCBwaWQ7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChuZXRzbm1wX3N3cnVuX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAiCisgICAgICAgICAgICAgICAgIE1ZVEFCTEUgIlxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0hSU1dSVU5TVEFUVVM6CisgICAgICAgICAgICAgICAgaWYgKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyICE9IEhSU1dSVU5TVEFUVVNfSU5WQUxJRCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfV1JPTkdWQUxVRSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwaWQgPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVbcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aC0xXTsKKyAgICAgICAgICAgICAgICBpZiAoMSA9PSBwaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsInJlZnVzaW5nIHRvIGtpbGwgcGlkIDFcbiIpOworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9BQ0NFU1MpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX05PVFdSSVRBQkxFKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dydW5fZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlNUQVRVUzoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2hyU1dSdW5TdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKG5ldHNubXBfc3dydW5fZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICIKKyAgICAgICAgICAgICAgICAgTVlUQUJMRSAiXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9HRU5FUlIsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fSFJTV1JVTlNUQVRVUzoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aHJTV1J1blN0YXR1cyA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfaHJTV1J1blN0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkX2hyU1dSdW5TdGF0dXMgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgaW50IHBpZDsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHBpZCA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZVtyZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoLTFdOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImhyU1dSdW5UYWJsZTpjb21taXQiLCAia2lsbCglZCxURVJNKVxuIiwgcGlkKSk7CisgICAgICAgICAgICBraWxsKHBpZCwgU0lHVEVSTSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVCAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJTV1J1blRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlODBmYzAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyU1dSdW5UYWJsZS5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogbWliMmMuY29udGFpbmVyLmNvbmYsdiAxLjggMjAwNi8wNy8yNiAxNTo1ODoyNiBkdHMxMiBFeHAgJAorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgSFJTV1JVTlRBQkxFX0gKKyNkZWZpbmUgSFJTV1JVTlRBQkxFX0gKKworY29uZmlnX3JlcXVpcmUoaG9zdC9kYXRhX2FjY2Vzcy9zd3J1bikKK2NvbmZpZ19yZXF1aXJlKGhvc3QvaHJTV1J1blBlcmZUYWJsZSkKKworLyoKKyAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAKKyAqLwordm9pZCAgICAgICAgICAgIGluaXRfaHJTV1J1blRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX2hyU1dSdW5UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2hyU1dSdW5UYWJsZSh2b2lkKTsKK05ldHNubXBfTm9kZV9IYW5kbGVyIGhyU1dSdW5UYWJsZV9oYW5kbGVyOworCisvKgorICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaHJTV1J1blRhYmxlIAorICovCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOSU5ERVgJCTEKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5OQU1FCQkyCisjZGVmaW5lIENPTFVNTl9IUlNXUlVOSUQJCTMKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5QQVRICQk0CisjZGVmaW5lIENPTFVNTl9IUlNXUlVOUEFSQU1FVEVSUwkJNQorI2RlZmluZSBDT0xVTU5fSFJTV1JVTlRZUEUJCTYKKyNkZWZpbmUgQ09MVU1OX0hSU1dSVU5TVEFUVVMJCTcKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSFJTV1JVTlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX2RldmljZS5jCmluZGV4IDdiMTM2NGQuLjI0MDMxYmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGV2aWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kZXZpY2UuYwpAQCAtNjMsMTIgKzYzLDE4IEBACiAjZGVmaW5lCUhSREVWX0VSUk9SUwkJNgogCiBzdHJ1Y3QgdmFyaWFibGU0IGhyZGV2aWNlX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUkRFVl9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCAxfX0sCi0gICAge0hSREVWX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaHJkZXZpY2UsIDIsIHsxLCAyfX0sCi0gICAge0hSREVWX0RFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZGV2aWNlLCAyLCB7MSwgM319LAotICAgIHtIUkRFVl9JRCwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDR9fSwKLSAgICB7SFJERVZfU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDV9fSwKLSAgICB7SFJERVZfRVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ocmRldmljZSwgMiwgezEsIDZ9fQorICAgIHtIUkRFVl9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCAxfX0sCisgICAge0hSREVWX1RZUEUsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkZXZpY2UsIDIsIHsxLCAyfX0sCisgICAge0hSREVWX0RFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGV2aWNlLCAyLCB7MSwgM319LAorICAgIHtIUkRFVl9JRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDR9fSwKKyAgICB7SFJERVZfU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDV9fSwKKyAgICB7SFJERVZfRVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRldmljZSwgMiwgezEsIDZ9fQogfTsKIG9pZCAgICAgICAgICAgICBocmRldmljZV92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCAyIH07CiAKQEAgLTE5MSw3ICsxOTcsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2RldmljZSIsICIuLi4gZ2V0IGRldmljZSBzdGF0cyAiKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2Rpc2suYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jCmluZGV4IGYzNjc5YjUuLmM0YWM1MmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5jCkBAIC0yLDYgKzIsMTYgQEAKICAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBkaXNrIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGhyX2Rpc2suYwogICoKICAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlICJob3N0X3Jlcy5oIgpAQCAtNjEsMTAgKzcxLDIzIEBACiAjIGVuZGlmCiAjZW5kaWYKIAorI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKKyNpbmNsdWRlIDxyZWdleC5oPgorI2VuZGlmCisKICNpZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NvcmVGb3VuZGF0aW9uLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9LaXRMaWIuaD4KKyNpbmNsdWRlIDxJT0tpdC9zdG9yYWdlL0lPQmxvY2tTdG9yYWdlRHJpdmVyLmg+CisjaW5jbHVkZSA8SU9LaXQvc3RvcmFnZS9JT01lZGlhLmg+CisjaW5jbHVkZSA8SU9LaXQvSU9CU0QuaD4KKyNpbmNsdWRlIDxEaXNrQXJiaXRyYXRpb24vREFEaXNrLmg+CisjZW5kaWYKKwogI2lmZGVmIGxpbnV4CiAvKgogICogZGVmaW5lIEJMS0dFVFNJWkUgZnJvbSA8bGludXgvZnMuaD46CkBAIC03OSw2ICsxMDIsMjcgQEAKIAogI2RlZmluZSBIUkRfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGhyRGlza1N0b3JhZ2VBY2Nlc3MgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqLworI2RlZmluZSBIUkRJU0tTVE9SQUdFQUNDRVNTX1JFQURXUklURSAgMQorI2RlZmluZSBIUkRJU0tTVE9SQUdFQUNDRVNTX1JFQURPTkxZICAyCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQorICogaHJEaXNrU3RvcmFnZU1lZGlhIChJTlRFR0VSIC8gQVNOX0lOVEVHRVIpCisgKi8KKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX09USEVSICAxCisjZGVmaW5lIEhSRElTS1NUT1JBR0VNRURJQV9VTktOT1dOICAyCisjZGVmaW5lIEhSRElTS1NUT1JBR0VNRURJQV9IQVJERElTSyAgMworI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfRkxPUFBZRElTSyAgNAorI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tST00gIDUKKyNkZWZpbmUgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLV09STSAgNgorI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tSVyAgNworI2RlZmluZSBIUkRJU0tTVE9SQUdFTUVESUFfUkFNRElTSyAgOAorCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBLZXJuZWwgJiBpbnRlcmZhY2UgaW5mb3JtYXRpb24sCkBAIC04OSw4ICsxMzMsMTAgQEAKIHZvaWQgICAgICAgICAgICBJbml0X0hSX0Rpc2sodm9pZCk7CiBpbnQgICAgICAgICAgICAgR2V0X05leHRfSFJfRGlzayh2b2lkKTsKIGludCAgICAgICAgICAgICBHZXRfTmV4dF9IUl9EaXNrX1BhcnRpdGlvbihjaGFyICosIHNpemVfdCwgaW50KTsKKyNpZiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiBzdGF0aWMgdm9pZCAgICAgQWRkX0hSX0Rpc2tfZW50cnkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQsIGludCk7CisjZW5kaWYKIHN0YXRpYyB2b2lkICAgICBTYXZlX0hSX0Rpc2tfR2VuZXJhbCh2b2lkKTsKIHN0YXRpYyB2b2lkICAgICBTYXZlX0hSX0Rpc2tfU3BlY2lmaWModm9pZCk7CiBzdGF0aWMgaW50ICAgICAgUXVlcnlfRGlzayhpbnQsIGNvbnN0IGNoYXIgKik7CkBAIC0xMDYsNyArMTUyLDkgQEAKIHN0YXRpYyBpbnQgICAgICBIUkRfaW5kZXg7CiBzdGF0aWMgY2hhciAgICAgSFJEX3NhdmVkTW9kZWxbNDBdOwogc3RhdGljIGxvbmcgICAgIEhSRF9zYXZlZENhcGFjaXR5ID0gMTA0NDsKKyNpZiBkZWZpbmVkKERJT0NfREVTQ1JJQkUpIHx8IGRlZmluZWQoREtJT0NJTkZPKSB8fCBkZWZpbmVkKEhBVkVfTElOVVhfSERSRUdfSCkKIHN0YXRpYyBpbnQgICAgICBIUkRfc2F2ZWRGbGFnczsKKyNlbmRpZgogc3RhdGljIHRpbWVfdCAgIEhSRF9oaXN0b3J5W0hSREVWX1RZUEVfTUFTSyArIDFdOwogCiAjaWZkZWYgRElPQ19ERVNDUklCRQpAQCAtMTMyLDkgKzE4MCwyNyBAQAogc3RhdGljIHN0cnVjdCBkaXNrbGFiZWwgSFJEX2luZm87CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorc3RhdGljIGludDY0X3QgIEhSRF9jYXA7CitzdGF0aWMgaW50ICAgICAgSFJEX2FjY2VzczsKK3N0YXRpYyBpbnQgICAgICBIUkRfdHlwZTsKK3N0YXRpYyBpbnQgICAgICBIUkRfcmVtb3ZlYmxlOworc3RhdGljIGNoYXIgICAgIEhSRF9tb2RlbFs0MF07CitzdGF0aWMgaW50ICAgICAgSFJEX3NhdmVkX2FjY2VzczsKK3N0YXRpYyBpbnQgICAgICBIUkRfc2F2ZWRfdHlwZTsKK3N0YXRpYyBpbnQgICAgICBIUkRfc2F2ZWRfcmVtb3ZlYmxlOworc3RhdGljIGludCBfZ2V0X3R5cGVfZnJvbV9wcm90b2NvbCggY29uc3QgY2hhciAqcHJvdCApOworc3RhdGljIGludCBfZ2V0X3R5cGVfdmFsdWUoIGNvbnN0IGNoYXIgKnN0cl90eXBlICk7CisjZW5kaWYKKwogc3RhdGljIHZvaWQgICAgIHBhcnNlX2Rpc2tfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKIHN0YXRpYyB2b2lkICAgICBmcmVlX2Rpc2tfY29uZmlnKHZvaWQpOwogCisjaWZkZWYgbGludXgKK3N0YXRpYyB2b2lkICAgICBBZGRfTFZNX0Rpc2tzKHZvaWQpOworc3RhdGljIHZvaWQgICAgIFJlbW92ZV9MVk1fRGlza3Modm9pZCk7CisjZW5kaWYKKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCkBAIC0xNDcsMTAgKzIxMywxNCBAQAogI2RlZmluZQlIUkRJU0tfQ0FQQUNJVFkJCTQKIAogc3RydWN0IHZhcmlhYmxlNCBocmRpc2tfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSRElTS19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZGlzaywgMiwgezEsIDF9fSwKLSAgICB7SFJESVNLX01FRElBLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRpc2ssIDIsIHsxLCAyfX0sCi0gICAge0hSRElTS19SRU1PVkVBQkxFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocmRpc2ssIDIsIHsxLCAzfX0sCi0gICAge0hSRElTS19DQVBBQ0lUWSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJkaXNrLCAyLCB7MSwgNH19CisgICAge0hSRElTS19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZGlzaywgMiwgezEsIDF9fSwKKyAgICB7SFJESVNLX01FRElBLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRpc2ssIDIsIHsxLCAyfX0sCisgICAge0hSRElTS19SRU1PVkVBQkxFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmRpc2ssIDIsIHsxLCAzfX0sCisgICAge0hSRElTS19DQVBBQ0lUWSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJkaXNrLCAyLCB7MSwgNH19CiB9Owogb2lkICAgICAgICAgICAgIGhyZGlza192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA2IH07CiAKQEAgLTE3Miw2ICsyNDIsOSBAQAogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L3NkJWMlZCIsIC0xLCAtMSwgJ2EnLCAncCcsICIvZGV2L3NkJWMiLCAxLCAxNSk7CiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvbWQlZCIsIC0xLCAtMSwgMCwgMywgIi9kZXYvbWQlZCIsIDAsIDApOwogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L2ZkJWQiLCAtMSwgLTEsIDAsIDEsICIvZGV2L2ZkJWQiLCAwLCAwKTsKKworICAgIEFkZF9MVk1fRGlza3MoKTsKKwogI2VsaWYgZGVmaW5lZChocHV4KQogI2lmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkKICAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9yZHNrL2MlZHQleGQlZCIsIDAsIDEsIDAsIDE1LApAQCAtMTg1LDYgKzI1OCw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIi9kZXYvcmRzay9jJWR0JWRkMHMwIiwgMCwgNyk7CiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvcmRzay9jJWRkJWRzJWQiLCAwLCA3LCAwLCAxNSwKICAgICAgICAgICAgICAgICAgICAgICAiL2Rldi9yZHNrL2MlZGQlZHMwIiwgMCwgNyk7CisjZWxpZiBkZWZpbmVkKGRhcndpbikKKyAgICBBZGRfSFJfRGlza19lbnRyeSgiL2Rldi9kaXNrJWRzJWQiLCAtMSwgLTEsIDAsIDMyLCAiL2Rldi9kaXNrJWQiLCAxLCAzMik7CiAjZWxpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQogICAgIEFkZF9IUl9EaXNrX2VudHJ5KCIvZGV2L2FkJWRzJWQlYyIsIDAsIDEsIDEsIDQsICIvZGV2L2FkJWRzJWQiLCAnYScsICdoJyk7CiAgICAgQWRkX0hSX0Rpc2tfZW50cnkoIi9kZXYvZGElZHMlZCVjIiwgMCwgMSwgMSwgNCwgIi9kZXYvZGElZHMlZCIsICdhJywgJ2gnKTsKQEAgLTIxNSw2ICsyOTAsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2Rpc2tfY29uZmlnLCAibmFtZSIpOwogfQogCit2b2lkCitzaHV0ZG93bl9ocl9kaXNrKHZvaWQpCit7CisjaWZkZWYgbGludXgKKyAgICBSZW1vdmVfTFZNX0Rpc2tzKCk7CisjZW5kaWYKK30KKwogI2RlZmluZSBJVEVNX1NUUklORwkxCiAjZGVmaW5lIElURU1fU0VUCTIKICNkZWZpbmUgSVRFTV9TVEFSCTMKQEAgLTI0MCwxMiArMzIzLDEyIEBACiBzdGF0aWMgdm9pZAogcGFyc2VfZGlza19jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY29uZl9kaXNrX2xpc3QgKmRfbmV3ID0gMDsKLSAgICBjb25mX2Rpc2tfaXRlbSAqZGlfY3VyciA9IDA7Ci0gICAgZGV0YWlsc19zZXQgICAgKmRfc2V0ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqbmFtZSA9IDAsICpwID0gMCwgKmRfc3RyID0gMCwgYzsKKyAgICBjb25mX2Rpc2tfbGlzdCAqZF9uZXcgPSBOVUxMOworICAgIGNvbmZfZGlza19pdGVtICpkaV9jdXJyID0gTlVMTDsKKyAgICBkZXRhaWxzX3NldCAgICAqZF9zZXQgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICpuYW1lID0gTlVMTCwgKnAgPSBOVUxMLCAqZF9zdHIgPSBOVUxMLCBjOwogICAgIHVuc2lnbmVkIGludCAgICBpLCBuZWcsIGMxLCBjMjsKLSAgICBjaGFyICAgICAgICAgICAqc3QgPSAwOworICAgIGNoYXIgICAgICAgICAgICpzdCA9IE5VTEw7CiAKICAgICBuYW1lID0gc3RydG9rX3IoY3B0ciwgIiBcdCIsICZzdCk7CiAgICAgaWYgKCFuYW1lKSB7CkBAIC00ODIsNiArNTY1LDcgQEAKICAgICBJbml0X0hSX0Rpc2soKTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGRpc2tfaWR4ID0gR2V0X05leHRfSFJfRGlzaygpOworICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwgIi4uLiBpbmRleCAlZFxuIiwgZGlza19pZHgpKTsKICAgICAgICAgaWYgKGRpc2tfaWR4ID09IC0xKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIG5ld25hbWVbSFJESVNLX0VOVFJZX05BTUVfTEVOR1RIXSA9IGRpc2tfaWR4OwpAQCAtNTEyLDcgKzU5Niw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsICIuLi4gZ2V0IGRpc2sgc3RhdHMgIikpOwpAQCAtNTg4LDYgKzY3Miw3IEBACiBzdGF0aWMgSFJEX2Rpc2tfdCBkaXNrX2RldmljZXNbTUFYX05VTUJFUl9ESVNLX1RZUEVTXTsKIHN0YXRpYyBpbnQgICAgICBIUl9udW1iZXJfZGlza190eXBlcyA9IDA7CiAKKyNpZiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiBzdGF0aWMgdm9pZAogQWRkX0hSX0Rpc2tfZW50cnkoY29uc3QgY2hhciAqZGV2cGFydF9zdHJpbmcsCiAgICAgICAgICAgICAgICAgICBpbnQgZmlyc3RfY3RsLApAQCAtNjAxLDcgKzY4Niw3IEBACiAKICAgICB3aGlsZSAoZmlyc3RfY3RsIDw9IGxhc3RfY3RsKSB7CiAgICAgICBmb3IgKGxvZGV2ID0gZmlyc3RfZGV2OwotICAgICAgICAgICBsb2RldiA8IGxhc3RfZGV2ICYmIE1BWF9OVU1CRVJfRElTS19UWVBFUyA+IEhSX251bWJlcl9kaXNrX3R5cGVzOworICAgICAgICAgICBsb2RldiA8PSBsYXN0X2RldiAmJiBNQVhfTlVNQkVSX0RJU0tfVFlQRVMgPiBIUl9udW1iZXJfZGlza190eXBlczsKICAgICAgICAgICAgbG9kZXYgKz0gKDErTUFYX0RJU0tTX1BFUl9UWVBFKSwgSFJfbnVtYmVyX2Rpc2tfdHlwZXMrKykKICAgICAgIHsKICAgICAgICAgbmJyX2NyZWF0ZWQrKzsKQEAgLTY0NCw2ICs3MjksNyBAQAogICAgICAgICAgICAgICAgICAgICBkZXZwYXJ0X3N0cmluZywgbmJyX2NyZWF0ZWQpKTsKICNlbmRpZgogfQorI2VuZGlmCiAKIHZvaWQKIEluaXRfSFJfRGlzayh2b2lkKQpAQCAtNjU2LDE0ICs3NDIsMTQgQEAKIGludAogR2V0X05leHRfSFJfRGlzayh2b2lkKQogewotICAgIGNoYXIgICAgICAgICAgICBzdHJpbmdbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgIHN0cmluZ1tQQVRIX01BWCsxXTsKICAgICBpbnQgICAgICAgICAgICAgZmQsIHJlc3VsdDsKICAgICBpbnQgICAgICAgICAgICAgaWluZGV4OwogICAgIGludCAgICAgICAgICAgICBtYXhfZGlza3M7CiAgICAgdGltZV90ICAgICAgICAgIG5vdzsKIAogICAgIEhSRF9pbmRleCsrOwotICAgICh2b2lkICopIHRpbWUoJm5vdyk7CisgICAgdGltZSgmbm93KTsKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwgIk5leHRfRGlzayB0eXBlICVkIG9mICVkXG4iLAogICAgICAgICAgICAgICAgIEhSRF90eXBlX2luZGV4LCBIUl9udW1iZXJfZGlza190eXBlcykpOwogICAgIHdoaWxlIChIUkRfdHlwZV9pbmRleCA8IEhSX251bWJlcl9kaXNrX3R5cGVzKSB7CkBAIC02OTcsNiArNzgzLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19jb250cm9sbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmljZV9maXJzdCArCiAgICAgICAgICAgICAgICAgICAgICAgICBIUkRfaW5kZXgpOworCSAgICB9IGVsc2UgaWYgKGRpc2tfZGV2aWNlc1tIUkRfdHlwZV9pbmRleF0uZGlza19kZXZpY2VfZmlyc3QgPT0gZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmljZV9sYXN0KSB7CisJCS8qIGV4YWN0IGRldmljZSBuYW1lICovCisJCXNucHJpbnRmKHN0cmluZywgc2l6ZW9mKHN0cmluZyktMSwgIiVzIiwgZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmZ1bGxfc3RyaW5nKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKS0xLAogICAgICAgICAgICAgICAgICAgICAgICAgZGlza19kZXZpY2VzW0hSRF90eXBlX2luZGV4XS5kaXNrX2RldmZ1bGxfc3RyaW5nLApAQCAtNzQ3LDYgKzgzNiwxMiBAQAogICAgICAgICAgICAgICAgICAgICBIUkRfaGlzdG9yeVtpaW5kZXhdID0gMDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgoSFJERVZfRElTSyA8PCBIUkRFVl9UWVBFX1NISUZUKSArIGlpbmRleCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJHZXRfTmV4dF9IUl9EaXNrOiBjYW4ndCBxdWVyeSAlc1xuIiwgc3RyaW5nKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR2V0X05leHRfSFJfRGlzazogY2FuJ3Qgb3BlbiAlc1xuIiwgc3RyaW5nKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBIUkRfaGlzdG9yeVtpaW5kZXhdID0gbm93OwogICAgICAgICAgICAgSFJEX2luZGV4Kys7CkBAIC03OTksNiArODk0LDYyIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBkYXJ3aW4KK2ludAorR2V0X0hSX0Rpc2tfTGFiZWwoY2hhciAqc3RyaW5nLCBzaXplX3Qgc3RyX2xlbiwgY29uc3QgY2hhciAqZGV2ZnVsbCkKK3sKKyAgICBEQVNlc3Npb25SZWYgICAgICAgIHNlc3NfcmVmOworICAgIERBRGlza1JlZiAgICAgICAgICAgZGlzazsKKyAgICBDRkRpY3Rpb25hcnlSZWYgICAgIGRlc2M7CisgICAgQ0ZTdHJpbmdSZWYgICAgICAgICBzdHJfcmVmOworICAgIENGU3RyaW5nRW5jb2RpbmcgICAgc3lzX2VuY29kaW5nID0gQ0ZTdHJpbmdHZXRTeXN0ZW1FbmNvZGluZygpOworCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsICJEaXNrIExhYmVsIHR5cGUgJXNcbiIsIGRldmZ1bGwpKTsKKworICAgIHNlc3NfcmVmID0gREFTZXNzaW9uQ3JlYXRlKCBOVUxMICk7CisgICAgaWYgKE5VTEwgPT0gc2Vzc19yZWYpIHsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIGRldmZ1bGwsIHN0cl9sZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGlzayA9IERBRGlza0NyZWF0ZUZyb21CU0ROYW1lKCBOVUxMLCBzZXNzX3JlZiwgZGV2ZnVsbCApOworICAgIGlmIChOVUxMID09IGRpc2spIHsKKyAgICAgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIGRldmZ1bGwsIHN0cl9sZW4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGVzYyA9IERBRGlza0NvcHlEZXNjcmlwdGlvbiggZGlzayApOworICAgIGlmIChOVUxMID09IGRlc2MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImRpc2ttZ3I6IGNvdWxkbid0IGdldCBkaXNrIGRlc2NyaXB0aW9uIGZvciAlcywgc2tpcHBpbmdcbiIsCisgICAgICAgICAgICAgICAgIGRldmZ1bGwpOworICAgICAgICBDRlJlbGVhc2UoZGlzayk7CisgICAgICAgIENGUmVsZWFzZShzZXNzX3JlZik7CisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBkZXZmdWxsLCBzdHJfbGVuKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBtb2RlbCAqLworICAgIHN0cl9yZWYgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgIENGRGljdGlvbmFyeUdldFZhbHVlKGRlc2MsIGtEQURpc2tEZXNjcmlwdGlvbk1lZGlhTmFtZUtleSk7CisgICAgaWYgKHN0cl9yZWYpIHsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJfcmVmLCBzeXNfZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgIHN0cl9sZW4pOworICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgbmFtZSAlc1xuIiwgc3RyaW5nKSk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBzdHJsY3B5KHN0cmluZywgZGV2ZnVsbCwgc3RyX2xlbik7CisgICAgfQorICAgIAorICAgIENGUmVsZWFzZShkaXNrKTsKKyAgICBDRlJlbGVhc2UoZGVzYyk7CisgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICAKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiBzdGF0aWMgdm9pZAogU2F2ZV9IUl9EaXNrX1NwZWNpZmljKHZvaWQpCiB7CkBAIC04MjAsNiArOTcxLDEzIEBACiAjaWZkZWYgRElPQ0dESU5GTwogICAgIEhSRF9zYXZlZENhcGFjaXR5ID0gSFJEX2luZm8uZF9zZWNwZXJ1bml0IC8gMjsKICNlbmRpZgorI2lmZGVmIGRhcndpbgorICAgIEhSRF9zYXZlZENhcGFjaXR5ID0gSFJEX2NhcCAvIDEwMjQ7CisgICAgSFJEX3NhdmVkX2FjY2VzcyA9IEhSRF9hY2Nlc3M7CisgICAgSFJEX3NhdmVkX3R5cGUgPSBIUkRfdHlwZTsKKyAgICBIUkRfc2F2ZWRfcmVtb3ZlYmxlID0gSFJEX3JlbW92ZWJsZTsKKyNlbmRpZgorCiB9CiAKIHN0YXRpYyB2b2lkCkBAIC04MzksNiArOTk3LDkgQEAKICAgICBzdHJsY3B5KEhSRF9zYXZlZE1vZGVsLCBka3R5cGVuYW1lc1tIUkRfaW5mby5kX3R5cGVdLAogICAgICAgICAgICAgc2l6ZW9mKEhSRF9zYXZlZE1vZGVsKSk7CiAjZW5kaWYKKyNpZmRlZiBkYXJ3aW4KKyAgICBzdHJsY3B5KEhSRF9zYXZlZE1vZGVsLCBIUkRfbW9kZWwsIHNpemVvZihIUkRfc2F2ZWRNb2RlbCkpOworI2VuZGlmCiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICoKQEAgLTg3MSw3ICsxMDMyLDcgQEAKICNpZmRlZiBIQVZFX0xJTlVYX0hEUkVHX0gKICAgICBpZiAoSFJEX3R5cGVfaW5kZXggPT0gMCkgICAgLyogSURFIGhhcmQgZGlzayAqLwogICAgICAgICByZXN1bHQgPSBpb2N0bChmZCwgSERJT19HRVRfSURFTlRJVFksICZIUkRfaW5mbyk7Ci0gICAgZWxzZSBpZiAoSFJEX3R5cGVfaW5kZXggPD0gMikgeyAgICAgLyogU0NTSSBoYXJkIGRpc2sgYW5kIG1kIGRldmljZXMgKi8KKyAgICBlbHNlIGlmIChIUkRfdHlwZV9pbmRleCAhPSAzKSB7ICAgICAvKiBTQ1NJIGhhcmQgZGlzaywgbWQgYW5kIExWTSBkZXZpY2VzICovCiAgICAgICAgIGxvbmcgICAgICAgICAgICBoOwogICAgICAgICByZXN1bHQgPSBpb2N0bChmZCwgQkxLR0VUU0laRSwgJmgpOwogICAgICAgICBpZiAocmVzdWx0ICE9IC0xICYmIEhSRF90eXBlX2luZGV4ID09IDIgJiYgaCA9PSAwTCkKQEAgLTg3OSwxMCArMTA0MCwxMyBAQAogICAgICAgICBpZiAocmVzdWx0ICE9IC0xKSB7CiAgICAgICAgICAgICBIUkRfaW5mby5sYmFfY2FwYWNpdHkgPSBoOwogICAgICAgICAgICAgaWYgKEhSRF90eXBlX2luZGV4ID09IDEpCi0gICAgICAgICAgICAgICAgc25wcmludGYoIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCisgICAgICAgICAgICAgICAgc25wcmludGYoIChjaGFyICopIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIlNDU0kgZGlzayAoJXMpIiwgZGV2ZnVsbCk7CisJICAgIGVsc2UgaWYgKEhSRF90eXBlX2luZGV4ID49IDQpCisJCXNucHJpbnRmKCAoY2hhciAqKSBIUkRfaW5mby5tb2RlbCwgc2l6ZW9mKEhSRF9pbmZvLm1vZGVsKS0xLAorCQkJICJMVk0gdm9sdW1lICglcykiLCBkZXZmdWxsICsgc3RybGVuKCIvZGV2L21hcHBlci8iKSk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgc25wcmludGYoIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCisgICAgICAgICAgICAgICAgc25wcmludGYoIChjaGFyICopIEhSRF9pbmZvLm1vZGVsLCBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAiUkFJRCBkaXNrICglcykiLCBkZXZmdWxsKTsKICAgICAgICAgICAgIEhSRF9pbmZvLm1vZGVsWyBzaXplb2YoSFJEX2luZm8ubW9kZWwpLTEgXSA9IDA7CiAgICAgICAgICAgICBIUkRfaW5mby5jb25maWcgPSAwOwpAQCAtODk0LDYgKzEwNTgsMTAzIEBACiAgICAgcmVzdWx0ID0gaW9jdGwoZmQsIERJT0NHRElORk8sICZIUkRfaW5mbyk7CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorICAgIERBU2Vzc2lvblJlZiAgICAgICAgc2Vzc19yZWY7CisgICAgREFEaXNrUmVmICAgICAgICAgICBkaXNrOworICAgIENGRGljdGlvbmFyeVJlZiAgICAgZGVzYzsKKyAgICBDRlN0cmluZ1JlZiAgICAgICAgIHN0cl9yZWY7CisgICAgQ0ZOdW1iZXJSZWYgICAgICAgICBudW1iZXJfcmVmOworICAgIENGQm9vbGVhblJlZiAgICAgICAgYm9vbF9yZWY7CisgICAgQ0ZTdHJpbmdFbmNvZGluZyAgICBzeXNfZW5jb2RpbmcgPSBDRlN0cmluZ0dldFN5c3RlbUVuY29kaW5nKCk7CisKKyAgICBzZXNzX3JlZiA9IERBU2Vzc2lvbkNyZWF0ZSggTlVMTCApOworICAgIGlmIChOVUxMID09IHNlc3NfcmVmKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBkaXNrID0gREFEaXNrQ3JlYXRlRnJvbUJTRE5hbWUoIE5VTEwsIHNlc3NfcmVmLCBkZXZmdWxsICk7CisgICAgaWYgKE5VTEwgPT0gZGlzaykgeworICAgICAgICBDRlJlbGVhc2Uoc2Vzc19yZWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZGVzYyA9IERBRGlza0NvcHlEZXNjcmlwdGlvbiggZGlzayApOworICAgIGlmIChOVUxMID09IGRlc2MpIHsKKyAgICAgICAgQ0ZSZWxlYXNlKGRpc2spOworICAgICAgICBDRlJlbGVhc2Uoc2Vzc19yZWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbnVtYmVyX3JlZiA9IChDRk51bWJlclJlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFTaXplS2V5KTsKKyAgICBpZiAobnVtYmVyX3JlZikKKyAgICAgICAgQ0ZOdW1iZXJHZXRWYWx1ZShudW1iZXJfcmVmLCBrQ0ZOdW1iZXJTSW50NjRUeXBlLCAmSFJEX2NhcCk7CisgICAgZWxzZQorICAgICAgICBIUkRfY2FwID0gMDsKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgc2l6ZSAlbGxkXG4iLCBIUkRfY2FwKSk7CisKKyAgICAvKiogd3JpdGFibGU/ICAqLworICAgIGJvb2xfcmVmID0gKENGQm9vbGVhblJlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFXcml0YWJsZUtleSk7CisgICAgaWYgKGJvb2xfcmVmKSB7CisgICAgICAgIEhSRF9hY2Nlc3MgPSBDRkJvb2xlYW5HZXRWYWx1ZShib29sX3JlZik7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgSFJEX2FjY2VzcyA9IDA7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIHdyaXRhYmxlICVkXG4iLAorICAgICAgICAgICAgICAgIEhSRF9hY2Nlc3MpKTsKKworICAgIC8qKiByZW1vdmFibGU/ICAqLworICAgIGJvb2xfcmVmID0gKENGQm9vbGVhblJlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFSZW1vdmFibGVLZXkpOworICAgIGlmIChib29sX3JlZikgeworICAgICAgICBIUkRfcmVtb3ZlYmxlID0gQ0ZCb29sZWFuR2V0VmFsdWUoYm9vbF9yZWYpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIEhSRF9yZW1vdmVibGUgPSAwOworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRpc2ttZ3I6ZGFyd2luIiwgIiByZW1vdmFibGUgJWRcbiIsCisgICAgICAgICAgICAgICAgSFJEX3JlbW92ZWJsZSkpOworCisgICAgLyoqIGdldCB0eXBlICovCisgICAgc3RyX3JlZiA9IChDRlN0cmluZ1JlZikKKyAgICAgICAgQ0ZEaWN0aW9uYXJ5R2V0VmFsdWUoZGVzYywga0RBRGlza0Rlc2NyaXB0aW9uTWVkaWFUeXBlS2V5KTsKKyAgICBpZiAoc3RyX3JlZikgeworICAgICAgICBIUkRfdHlwZSA9IF9nZXRfdHlwZV92YWx1ZShDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c19lbmNvZGluZykpOworICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpkaXNrbWdyOmRhcndpbiIsICIgdHlwZSAlcyAvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwgc3lzX2VuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgSFJEX3R5cGUpKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHN0cl9yZWYgPSAoQ0ZTdHJpbmdSZWYpCisgICAgICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXNjLCBrREFEaXNrRGVzY3JpcHRpb25EZXZpY2VQcm90b2NvbEtleSk7CisgICAgICAgIGlmIChzdHJfcmVmKSB7CisgICAgICAgICAgICBIUkRfdHlwZSA9IAorICAgICAgICAgICAgICAgIF9nZXRfdHlwZV9mcm9tX3Byb3RvY29sKENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJfcmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNfZW5jb2RpbmcpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmRpc2ttZ3I6ZGFyd2luIiwgIiB0eXBlICVzIC8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBDRlN0cmluZ0dldENTdHJpbmdQdHIoc3RyX3JlZiwgc3lzX2VuY29kaW5nKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEhSRF90eXBlKSk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgSFJEX3R5cGUgPSBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTjsKKyAgICB9CisKKyAgICAvKiogbW9kZWwgKi8KKyAgICBzdHJfcmVmID0gKENGU3RyaW5nUmVmKQorICAgICAgICBDRkRpY3Rpb25hcnlHZXRWYWx1ZShkZXNjLCBrREFEaXNrRGVzY3JpcHRpb25EZXZpY2VNb2RlbEtleSk7CisgICAgaWYgKHN0cl9yZWYpIHsKKyAgICAgICAgc3RybGNweShIUkRfbW9kZWwsIENGU3RyaW5nR2V0Q1N0cmluZ1B0cihzdHJfcmVmLCBzeXNfZW5jb2RpbmcpLAorICAgICAgICAgICAgICAgIHNpemVvZihIUkRfbW9kZWwpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZGlza21ncjpkYXJ3aW4iLCAiIG1vZGVsICVzXG4iLCBIUkRfbW9kZWwpKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBIUkRfbW9kZWxbMF0gPSAwOworICAgIENGUmVsZWFzZShkaXNrKTsKKyAgICBDRlJlbGVhc2UoZGVzYyk7CisgICAgQ0ZSZWxlYXNlKHNlc3NfcmVmKTsKKyAgICByZXN1bHQgPSAwOworI2VuZGlmCisKICAgICByZXR1cm4gKHJlc3VsdCk7CiB9CiAKQEAgLTkxMiw2ICsxMTczLDExIEBACiAgICAgICAgIHJldHVybiAoMik7ICAgICAgICAgICAgIC8qIHJlYWQgb25seSAqLwogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyAgICBpZiAoIUhSRF9hY2Nlc3MpCisgICAgICAgIHJldHVybiAoMik7CisjZW5kaWYKKwogICAgIHJldHVybiAoMSk7ICAgICAgICAgICAgICAgICAvKiByZWFkLXdyaXRlICovCiB9CiAKQEAgLTk4NCw2ICsxMjUwLDkgQEAKICAgICB9CiAjZW5kaWYKIAorI2lmZGVmIGRhcndpbgorICAgIHJldHVybiBIUkRfdHlwZTsKKyNlbmRpZgogCiAgICAgcmV0dXJuICgyKTsgICAgICAgICAgICAgICAgIC8qIFVua25vd24gKi8KIH0KQEAgLTEwMTQsNSArMTI4MywxNTAgQEAKICAgICAgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgLyogdHJ1ZSAqLwogI2VuZGlmCiAKKyNpZmRlZiBkYXJ3aW4KKyAgICBpZiAoSFJEX3JlbW92ZWJsZSkKKyAgICAgICAgcmV0dXJuICgxKTsKKyNlbmRpZgorCiAgICAgcmV0dXJuICgyKTsgICAgICAgICAgICAgICAgIC8qIGZhbHNlICovCiB9CisKKyNpZmRlZiBkYXJ3aW4KK3R5cGVkZWYgc3RydWN0IHR5cGVfdmFsdWVfbWFwX3MgeworICAgICBjb25zdCBjaGFyICp0eXBlOworICAgICB1aW50MzJfdCAgICB2YWx1ZTsKK30gdHlwZV92YWx1ZV9tYXA7CisKK3N0YXRpYyB0eXBlX3ZhbHVlX21hcCBtZWRpYV90eXBlX21hcFtdID0geworICAgIHsgIkNELVJPTSIsIEhSRElTS1NUT1JBR0VNRURJQV9PUFRJQ0FMRElTS1JPTX0sCisgICAgeyAiRFZELVIiLCBIUkRJU0tTVE9SQUdFTUVESUFfT1BUSUNBTERJU0tXT1JNfSwKKyAgICB7ICJEVkQrUiIsIEhSRElTS1NUT1JBR0VNRURJQV9PUFRJQ0FMRElTS1dPUk19LAorfTsgIAorc3RhdGljIGludCBtZWRpYV90eXBlcyA9IHNpemVvZihtZWRpYV90eXBlX21hcCkvc2l6ZW9mKG1lZGlhX3R5cGVfbWFwWzBdKTsKKworc3RhdGljIGludAorX2dldF90eXBlX3ZhbHVlKCBjb25zdCBjaGFyICpzdHJfdHlwZSApCit7CisgICAgaW50ICAgICAgICAgICBpLCBsZW47CisgICAgCisgICAgaWYgKE5VTEwgPT0gc3RyX3R5cGUpCisgICAgICAgIHJldHVybiBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTjsKKworICAgIGxlbiA9IHN0cmxlbihzdHJfdHlwZSk7CisgICAgZm9yKGk9MDsgaSA8IG1lZGlhX3R5cGVzOyArK2kpIHsKKyAgICAgICAgaWYgKDAgPT0gc3RyY21wKG1lZGlhX3R5cGVfbWFwW2ldLnR5cGUsIHN0cl90eXBlKSkKKyAgICAgICAgICAgIHJldHVybiBtZWRpYV90eXBlX21hcFtpXS52YWx1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gSFJESVNLU1RPUkFHRU1FRElBX1VOS05PV047Cit9CisKK3N0YXRpYyB0eXBlX3ZhbHVlX21hcCBwcm90b19tYXBbXSA9IHsKKyAgICB7ICJBVEEiLCBIUkRJU0tTVE9SQUdFTUVESUFfSEFSRERJU0t9LAorICAgIHsgIkFUQVBJIiwgSFJESVNLU1RPUkFHRU1FRElBX09QVElDQUxESVNLUk9NfQorfTsKK3N0YXRpYyBpbnQgcHJvdG9fbWFwcyA9IHNpemVvZihwcm90b19tYXApL3NpemVvZihwcm90b19tYXBbMF0pOworCitzdGF0aWMgaW50IF9nZXRfdHlwZV9mcm9tX3Byb3RvY29sKCBjb25zdCBjaGFyICpwcm90ICkKK3sgICAKKyAgICBpbnQgICAgICAgICAgIGksIGxlbjsKKworICAgIGlmIChOVUxMID09IHByb3QpCisgICAgICAgIHJldHVybiBUVl9GQUxTRTsKKworICAgIGxlbiA9IHN0cmxlbihwcm90KTsKKyAgICBmb3IoaT0wOyBpIDwgcHJvdG9fbWFwczsgKytpKSB7CisgICAgICAgIGlmICgwID09IHN0cmNtcChwcm90b19tYXBbaV0udHlwZSwgcHJvdCkpCisgICAgICAgICAgICByZXR1cm4gcHJvdG9fbWFwW2ldLnZhbHVlOworICAgIH0KKworICAgIHJldHVybiBIUkRJU0tTVE9SQUdFTUVESUFfVU5LTk9XTjsKK30KKyNlbmRpZgorCisKKyNpZmRlZiBsaW51eAorI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKK3N0YXRpYyBjaGFyICAgICpsdm1fZGV2aWNlX25hbWVzW01BWF9OVU1CRVJfRElTS19UWVBFU107CitzdGF0aWMgaW50ICAgICAgbHZtX2RldmljZV9jb3VudDsKKyNlbmRpZgorCitzdGF0aWMgdm9pZAorQWRkX0xWTV9EaXNrcyh2b2lkKQoreworI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKKyAgICAvKgorICAgICAqIExWTSBkZXZpY2VzIGFyZSBoYXJkZXIgYmVjYXVzZSB0aGVpciBuYW1lIGNhbiBiZSBhbG1vc3QgYW55dGhpbmcgKHNlZSAKKyAgICAgKiByZWdleHAgYmVsb3cpLiBFYWNoIGxvZ2ljYWwgdm9sdW1lIGlzIGludGVycHJldGVkIGFzIGl0cyBvd24gZGV2aWNlIHdpdGgKKyAgICAgKiBvbmUgcGFydGl0aW9uLCBldmVuIGlmIHR3byBsb2dpY2FsIHZvbHVtZXMgc2hhcmUgY29tbW9uIHZvbHVtZSBncm91cC4gCisgICAgICovCisgICAgcmVnZXhfdCAgICAgICAgIGx2b2w7CisgICAgaW50ICAgICAgICAgICAgIHJlczsKKyAgICBESVIgICAgICAgICAgICAqZGlyOworICAgIHN0cnVjdCBkaXJlbnQgICpkOworCisgICAgcmVzID0KKyAgICAgICAgcmVnY29tcCgmbHZvbCwgIlswLTlhLXpBLVorX1xcLi1dKy1bMC05YS16QS1aK19cXC4tXSsiLAorICAgICAgICAgICAgICAgIFJFR19FWFRFTkRFRCB8IFJFR19OT1NVQik7CisgICAgaWYgKHJlcyAhPSAwKSB7CisgICAgICAgIGNoYXIgICAgICAgICAgICBlcnJvclsyMDBdOworICAgICAgICByZWdlcnJvcihyZXMsICZsdm9sLCBlcnJvciwgc2l6ZW9mKGVycm9yKS0xKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsCisgICAgICAgICAgICAgICAgICAgICJBZGRfTFZNX0Rpc2tzOiBjYW5ub3QgY29tcGlsZSByZWdleHA6ICVzIiwgZXJyb3IpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRpciA9IG9wZW5kaXIoIi9kZXYvbWFwcGVyLyIpOworICAgIGlmIChkaXIgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9kaXNrIiwKKyAgICAgICAgICAgICAgICAgICAgIkFkZF9MVk1fRGlza3M6IGNhbm5vdCBvcGVuIC9kZXYvbWFwcGVyIikpOworICAgICAgICByZWdmcmVlKCZsdm9sKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHdoaWxlICgoZCA9IHJlYWRkaXIoZGlyKSkgIT0gTlVMTCkgeworICAgICAgICByZXMgPSByZWdleGVjKCZsdm9sLCBkLT5kX25hbWUsIDAsIE5VTEwsIDApOworICAgICAgICBpZiAocmVzID09IDApIHsKKyAgICAgICAgICAgIGNoYXIgKnBhdGggPSAoY2hhciopbWFsbG9jKFBBVEhfTUFYICsgMSk7CisgICAgICAgICAgICBpZiAocGF0aCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZGlzayIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFkZF9MVk1fRGlza3M6IGNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGRldmljZSAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZC0+ZF9uYW1lKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzbnByaW50ZihwYXRoLCBQQVRIX01BWC0xLCAiL2Rldi9tYXBwZXIvJXMiLCBkLT5kX25hbWUpOworICAgICAgICAgICAgQWRkX0hSX0Rpc2tfZW50cnkocGF0aCwgLTEsIC0xLCAwLCAwLCBwYXRoLCAwLCAwKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHN0b3JlIHRoZSBkZXZpY2UgbmFtZSBzbyB3ZSBjYW4gZnJlZSBpdCBpbiBSZW1vdmVfTFZNX0Rpc2tzIAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBsdm1fZGV2aWNlX25hbWVzW2x2bV9kZXZpY2VfY291bnRdID0gcGF0aDsKKyAgICAgICAgICAgICsrbHZtX2RldmljZV9jb3VudDsKKyAgICAgICAgICAgIGlmIChsdm1fZGV2aWNlX2NvdW50ID49IE1BWF9OVU1CRVJfRElTS19UWVBFUykgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2Rpc2siLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBZGRfTFZNX0Rpc2tzOiBtYXhpbXVtIGNvdW50IG9mIExWTSBkZXZpY2VzIHJlYWNoZWQiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgY2xvc2VkaXIoZGlyKTsKKyAgICByZWdmcmVlKCZsdm9sKTsKKyNlbmRpZgorfQorCitzdGF0aWMgdm9pZAorUmVtb3ZlX0xWTV9EaXNrcyh2b2lkKQoreworI2lmIGRlZmluZWQoSEFWRV9SRUdFWF9IKSAmJiBkZWZpbmVkKEhBVkVfUkVHQ09NUCkKKyAgICAvKgorICAgICAqIGp1c3QgZnJlZSB0aGUgZGV2aWNlIG5hbWVzIGFsbG9jYXRlZCBpbiBhZGRfbHZtX2Rpc2tzIAorICAgICAqLworICAgIGludCAgICAgICAgICAgICBpOworICAgIGZvciAoaSA9IDA7IGkgPCBsdm1fZGV2aWNlX2NvdW50OyBpKyspIHsKKyAgICAgICAgZnJlZShsdm1fZGV2aWNlX25hbWVzW2ldKTsKKyAgICAgICAgbHZtX2RldmljZV9uYW1lc1tpXSA9IE5VTEw7CisgICAgfQorICAgIGx2bV9kZXZpY2VfY291bnQgPSAwOworI2VuZGlmCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZGlzay5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKaW5kZXggZWZmMmE2Ny4uYjNjNDM5YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9kaXNrLmgKQEAgLTgsNiArOCw4IEBACiBjb25maWdfcmVxdWlyZShob3N0L2hyX2RldmljZSkKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJfZGlzayh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBzaHV0ZG93bl9ocl9kaXNrKHZvaWQpOworCiBleHRlcm4gdm9pZCAgICAgSW5pdF9IUl9EaXNrKHZvaWQpOwogZXh0ZXJuIGludCAgICAgIEdldF9OZXh0X0hSX0Rpc2sodm9pZCk7CiBleHRlcm4gaW50ICAgICAgR2V0X05leHRfSFJfRGlza19QYXJ0aXRpb24oY2hhciAqLCBzaXplX3QsIGludCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX2ZpbGVzeXMuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jCmluZGV4IDdmYTIwNTguLmIyM2QzMjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfZmlsZXN5cy5jCkBAIC0yLDE0ICsyLDI2IEBACiAgKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gRmlsZSBTeXN0ZW0gZGV2aWNlIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gaHJfZmlsZXN5cy5jCiAgKgogICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgogI2luY2x1ZGUgImhvc3RfcmVzLmgiCiAjaW5jbHVkZSAiaHJfZmlsZXN5cy5oIgogI2luY2x1ZGUgImhyX3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJocl9kaXNrLmgiCiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAKICNpZiBIQVZFX01OVEVOVF9ICkBAIC00MiwxMiArNTQsMjAgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICNpbmNsdWRlIDxzeXMvbW50Y3RsLmg+CiAjaW5jbHVkZSA8c3lzL3Ztb3VudC5oPgogI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzZV9maW5kX2ZyZWVfdmFsdWVfaW5fc2xpc3QpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGN0aW1lX3RvX3RpbWV0KQorCiAjaWYgZGVmaW5lZChic2RpNCkgfHwgZGVmaW5lZChmcmVlYnNkMykgfHwgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkgfHwgZGVmaW5lZChkYXJ3aW4pCiAjaWYgSEFWRV9HRVRGU1NUQVQgJiYgZGVmaW5lZChNRlNOQU1FTEVOKQogI2RlZmluZSBNT1VOVF9ORlMJIm5mcyIKQEAgLTEwOSw2ICsxMjksMTYgQEAKICNkZWZpbmUJSFJGU19uYW1lCWZfbW50ZnJvbW5hbWUKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdHZmcwogI2RlZmluZQlIUkZTX3R5cGUJZl9mc3R5cGVuYW1lCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKSAmJiAhZGVmaW5lZChIQVZFX1NUQVRGUykgJiYgZGVmaW5lZChIQVZFX1NUQVRWRlMpCisKK3N0YXRpYyBzdHJ1Y3Qgc3RhdGZzCSpmc3N0YXRzID0gTlVMTDsKK3N0cnVjdCBzdGF0ZnMJCSpIUkZTX2VudHJ5Oworc3RhdGljIGludAkJZnNjb3VudDsKKyNkZWZpbmUgSFJGU19tb3VudAlmX21udG9ubmFtZQorI2RlZmluZSBIUkZTX25hbWUJZl9tbnRmcm9tbmFtZQorI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCisjZGVmaW5lIEhSRlNfdHlwZQlmX2ZzdHlwZW5hbWUKKwogI2VsaWYgZGVmaW5lZChIQVZFX0dFVEZTU1RBVCkKIHN0YXRpYyBzdHJ1Y3Qgc3RhdGZzICpmc3N0YXRzID0gMDsKIHN0YXRpYyBpbnQgICAgICBmc2NvdW50OwpAQCAtMTM3LDcgKzE2Nyw3IEBACiAjZGVmaW5lIEhSRlNfc3RhdGZzCXdpbl9zdGF0ZnMKICNkZWZpbmUJSFJGU190eXBlCWZfdHlwZQogCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogCiBzdHJ1Y3Qgdm1vdW50ICphaXhtbnQsICphaXhjdXJyOwogc3RydWN0IEhSRlNfZW50cnkgewpAQCAtMTk1LDE1ICsyMjUsMjQgQEAKICNkZWZpbmUgSFJGU1lTX1BBUlREVU1QCQk5CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJmc3lzX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUkZTWVNfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDF9fSwKLSAgICB7SFJGU1lTX01PVU5ULCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDJ9fSwKLSAgICB7SFJGU1lTX1JNT1VOVCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAzfX0sCi0gICAge0hSRlNZU19UWVBFLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDR9fSwKLSAgICB7SFJGU1lTX0FDQ0VTUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgNX19LAotICAgIHtIUkZTWVNfQk9PVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgNn19LAotICAgIHtIUkZTWVNfU1RPUkVJRFgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDd9fSwKLSAgICB7SFJGU1lTX0ZVTExEVU1QLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDh9fSwKLSAgICB7SFJGU1lTX1BBUlREVU1QLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyZmlsZXN5cywgMiwgezEsIDl9fSwKKyAgICB7SFJGU1lTX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAxfX0sCisgICAge0hSRlNZU19NT1VOVCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCAyfX0sCisgICAge0hSRlNZU19STU9VTlQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJmaWxlc3lzLCAyLCB7MSwgM319LAorICAgIHtIUkZTWVNfVFlQRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA0fX0sCisgICAge0hSRlNZU19BQ0NFU1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZmlsZXN5cywgMiwgezEsIDV9fSwKKyAgICB7SFJGU1lTX0JPT1QsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyZmlsZXN5cywgMiwgezEsIDZ9fSwKKyAgICB7SFJGU1lTX1NUT1JFSURYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA3fX0sCisgICAge0hSRlNZU19GVUxMRFVNUCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA4fX0sCisgICAge0hSRlNZU19QQVJURFVNUCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmZpbGVzeXMsIDIsIHsxLCA5fX0sCiB9Owogb2lkICAgICAgICAgICAgIGhyZnN5c192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA4IH07CiAKQEAgLTIxMiw3ICsyNTEsNyBAQAogewogICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9maWxlc3lzIiwgaHJmc3lzX3ZhcmlhYmxlcywgdmFyaWFibGU0LAogICAgICAgICAgICAgICAgICBocmZzeXNfdmFyaWFibGVzX29pZCk7Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIC8qIHNvbWV0aGluZyBsZWFrcywgbWFrZSBpdCBpZGlvdC1zYWZlICovCiAgICAgYWl4bW50ID0gTlVMTDsKICAgICBhaXhjdXJyID0gTlVMTDsKQEAgLTI3OSw3ICszMTgsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAiLi4uIGdldCBmaWxlc3lzIHN0YXRzICIpKTsKQEAgLTQwNSw3ICs0NDQsNyBAQAogICAgICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICAgICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgc3dpdGNoIChIUkZTX2VudHJ5LT5IUkZTX3R5cGUpIHsKICAgICAgICAgY2FzZSBNTlRfQUlYOgogICAgICAgICBjYXNlIE1OVF9KRlM6CkBAIC01MjYsMTAgKzU2NSwxNCBAQAogI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSAmJiBkZWZpbmVkKF9fTmV0QlNEX18pCiAJbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5mX2ZsYWcgJiBNTlRfUkRPTkxZID8gMiA6IDE7CiAjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKQorI2lmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZMQUdTCiAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+Zl9mbGFncyAmIE1OVF9SRE9OTFkgPyAyIDogMTsKKyNlbHNlCisgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+Zl9mbGFnICYgTU5UX1JET05MWSA/IDIgOiAxOworI2VuZGlmCiAjZWxpZiBkZWZpbmVkKGN5Z3dpbikKICAgICAgICAgbG9uZ19yZXR1cm4gPSAxOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAoSFJGU19lbnRyeS0+SFJGU19mbGFncyAmIE1OVF9SRUFET05MWSkgPT0gMCA/IDEgOiAyOwogI2Vsc2UKICNpZiBIQVZFX0hBU01OVE9QVApAQCAtNTkyLDcgKzYzNSw3IEBACiAgICAgZ2V0ZnNzdGF0KGZzc3RhdHMsIGZzY291bnQgKiBzaXplb2YoKmZzc3RhdHMpLCBNTlRfTk9XQUlUKTsKICNlbmRpZgogICAgIEhSRlNfaW5kZXggPSAwOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpbnQgcmV0OwogICAgIHVpbnQgc2l6ZTsKICAgICByZXQgPSAwOwpAQCAtNjIxLDkgKzY2NCw3IEBACiAgICAgICAgIGZjbG9zZShmcCk7CiAgICAgZnAgPSBmb3BlbihFVENfTU5UVEFCLCAiciIpOwogICAgIGlmICghZnApIHsKLSAgICAgIGNoYXIgdG1wYnVmW1NUUklOR01BWF07Ci0gICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbid0IG9wZW4gbW50dGFiICVzXG4iLCBFVENfTU5UVEFCICk7Ci0gICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQ2FuJ3Qgb3BlbiBtbnR0YWIgJXNcbiIsIEVUQ19NTlRUQUIpOwogICAgIH0KICNlbmRpZgogfQpAQCAtNjc4LDcgKzcxOSw3IEBACiAgICAgInByb2MiLAogICAgICJmZCIsCiAjZW5kaWYKLSAgICAwCisgICAgTlVMTAogfTsKIAogaW50CkBAIC02ODksNyArNzMwLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIEhSRlNfZW50cnkgPSBmc3N0YXRzICsgSFJGU19pbmRleDsKICAgICByZXR1cm4gKytIUkZTX2luZGV4OwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpZihhaXhjdXJyID09IE5VTEwpIHsKICAgICAgICAgaWYoYWl4bW50ICE9IE5VTEwpIGZyZWUoYWl4bW50KTsKICAgICAgICAgYWl4bW50ID0gTlVMTDsKQEAgLTcyOSwxMyArNzcwLDkgQEAKICAgICAgICAgcmV0dXJuIC0xOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzb2xhcmlzMiAqLwogCi0gICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICJHZXRfTmV4dF9IUkZTICVzXG4iLCBIUkZTX2VudHJ5LT5IUkZTX25hbWUpKTsKLQogICAgIGZvciAoY3BwID0gSFJGU19pZ25vcmVzOyAqY3BwICE9IE5VTEw7ICsrY3BwKQotICAgICAgICBpZiAoIXN0cmNtcChIUkZTX2VudHJ5LT5IUkZTX3R5cGUsICpjcHApKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9maWxlc3lzIiwgIkdldF9OZXh0X0hSRlM6IHNraXBwaW5nICVzICglcylcbiIsIEhSRlNfZW50cnktPkhSRlNfdHlwZSwgKmNwcCkpOworICAgICAgICBpZiAoIXN0cmNtcChIUkZTX2VudHJ5LT5IUkZTX3R5cGUsICpjcHApKQogICAgICAgICAgICAgcmV0dXJuIEdldF9OZXh0X0hSX0ZpbGVTeXMoKTsKLSAgICAgICAgfQogCiAgICAgLyoKICAgICAgKiBUcnkgYW5kIGVuc3VyZSB0aGF0IGluZGV4IHZhbHVlcyBhcmUgcGVyc2lzdGVudApAQCAtNzY1LDcgKzgwMiw3IEBACiAjaWYgSEFWRV9HRVRGU1NUQVQgJiYgIWRlZmluZWQoTUZTTkFNRUxFTikKICAgICBpZiAoKEhSRlNfZW50cnktPkhSRlNfdHlwZSA9PSBNT1VOVF9ORlMpIHx8CiAgICAgICAgIChIUkZTX2VudHJ5LT5IUkZTX3R5cGUgPT0gTU9VTlRfQUZTKSkKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgaWYoSFJGU19lbnRyeS0+SFJGU190eXBlID09IE1OVF9ORlMgfHwgSFJGU19lbnRyeS0+SFJGU190eXBlID09IE1OVF9ORlMzKQogI2Vsc2UgLyogSEFWRV9HRVRGU1NUQVQgKi8KICAgICBpZiAoIEhSRlNfZW50cnktPkhSRlNfdHlwZSAhPSBOVUxMICYmICgKQEAgLTgwOSw3ICs4NDYsNyBAQAogICAgIGlmIChmc3N0YXRzKQogICAgICAgICBmcmVlKChjaGFyICopIGZzc3RhdHMpOwogICAgIGZzc3RhdHMgPSBOVUxMOwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICBpZihhaXhtbnQgIT0gTlVMTCkgewogICAgICAgICBmcmVlKGFpeG1udCk7CiAgICAgICAgIGFpeG1udCA9IE5VTEw7CkBAIC04NjYsMTMgKzkwMywxMyBAQAogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgICAgICArK2NwMjsKLSAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIpKQorICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoKmNwMiAmIDB4RkYpKQogICAgICAgICAgICAgICAgICsrY3AyOyAgICAgICAgICAvKiBOb3cgZmluZCB0aGUgZHVtcCBsZXZlbCAqLwogCiAgICAgICAgICAgICBpZiAobGV2ZWwgPT0gRlVMTF9EVU1QKSB7CiAgICAgICAgICAgICAgICAgaWYgKCooY3AyKyspICE9ICcwJykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gcGFydGlhbCBkdW1wcyAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIpKQorICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIgJiAweEZGKSkKICAgICAgICAgICAgICAgICAgICAgKytjcDI7CiAKICAgICAgICAgICAgICAgICBkdW1wZGF0ZSA9IGN0aW1lX3RvX3RpbWV0KGNwMik7CkBAIC04ODEsNyArOTE4LDcgQEAKICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogUGFydGlhbCBEdW1wICovCiAgICAgICAgICAgICAgICAgaWYgKCooY3AyKyspID09ICcwJykKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gZnVsbCBkdW1wcyAqLwotICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIpKQorICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcDIgJiAweEZGKSkKICAgICAgICAgICAgICAgICAgICAgKytjcDI7CiAKICAgICAgICAgICAgICAgICB0bXAgPSBjdGltZV90b190aW1ldChjcDIpOwpAQCAtOTU1LDcgKzk5Miw3IEBACiAgIAkJICogaW4gY2FzZSBvZiA1MTIgKGZfYmxvY2tzLzIpIGlzIHJldHVybmVkCiAgIAkJICogb3RoZXJ3aXNlIChmX2Jsb2NrcyooZl9ic2l6ZS8xMDI0KSkgaXMgcmV0dXJuZWQKICAgCQkgKi8KLSNpZiBkZWZpbmVkKHNvbGFyaXMyKSAmJiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRSkKKyNpZiBkZWZpbmVkKHNvbGFyaXMyKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIChzdGF0ZnNfYnVmLmZfYmxvY2tzKihzdGF0ZnNfYnVmLmZfZnJzaXplLzEwMjQpKTsKICNlbHNlCiAgIAkJaWYgKHN0YXRmc19idWYuZl9ic2l6ZSA9PSA1MTIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX25ldHdvcmsuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jCmluZGV4IDRmODVmOTYuLjZjY2U1OGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfbmV0d29yay5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KQEAgLTIyLDYgKzIzLDkgQEAKICNpbmNsdWRlICJtaWJJSS9pbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAiaHJfbmV0d29yay5oIgogCisjaWYgIWRlZmluZWQoIHNvbGFyaXMyICkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9sZWdhY3kpCisjZW5kaWYgLyogIXNvbGFyaXMyICovCiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC01MSw3ICs1NSw4IEBACiAjZGVmaW5lCUhSTkVUX0lGSU5ERVgJCTEKIAogc3RydWN0IHZhcmlhYmxlNCBocm5ldF92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJORVRfSUZJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJuZXQsIDIsIHsxLCAxfX0KKyAgICB7SFJORVRfSUZJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJuZXQsIDIsIHsxLCAxfX0KIH07CiBvaWQgICAgICAgICAgICAgaHJuZXRfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMywgNCB9OwogCkBAIC0xMzYsNyArMTQxLDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAKICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9uZXR3b3JrIiwgIi4uLiBnZXQgbmV0IHN0YXRzICIpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3BhcnRpdGlvbi5jCmluZGV4IGFlMGJkOGUuLjNiOWFiZDYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcGFydGl0aW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wYXJ0aXRpb24uYwpAQCAtMSw4ICsxLDE3IEBACi0KIC8qCiAgKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gcGFydGl0aW9uIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAtIGhyX3BhcnRpdGlvbi5jCiAgKgogICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CkBAIC0zNSw2ICs0NCwxMyBAQAogc3RhdGljIGludCAgICAgIEhSUF9zYXZlZERpc2tJbmRleDsKIHN0YXRpYyBpbnQgICAgICBIUlBfc2F2ZWRQYXJ0SW5kZXg7CiBzdGF0aWMgY2hhciAgICAgSFJQX3NhdmVkTmFtZVsxMDI0XTsKKyNpZmRlZiBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTAorc3RhdGljIGNoYXIgICAgIEhSUF9zYXZlZExhYmVsWzEwMjRdOworI2VuZGlmCisjaWZkZWYgZGFyd2luCitleHRlcm4gaW50CitHZXRfSFJfRGlza19MYWJlbChjaGFyICpzdHJpbmcsIHNpemVfdCBzdHJfbGVuLCBjb25zdCBjaGFyICpkZXZmdWxsKTsKKyNlbmRpZgogCiBzdGF0aWMgaW50ICAgICAgSFJQX0Rpc2tJbmRleDsKIApAQCAtNjAsMTEgKzc2LDE2IEBACiAjZGVmaW5lCUhSUEFSVF9GU0lEWAkJNQogCiBzdHJ1Y3QgdmFyaWFibGU0IGhycGFydGl0aW9uX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlBBUlRfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgMX19LAotICAgIHtIUlBBUlRfTEFCRUwsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCAyfX0sCi0gICAge0hSUEFSVF9JRCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDN9fSwKLSAgICB7SFJQQVJUX1NJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgNH19LAotICAgIHtIUlBBUlRfRlNJRFgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgNX19CisgICAge0hSUEFSVF9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCAxfX0sCisgICAge0hSUEFSVF9MQUJFTCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnBhcnRpdGlvbiwgMiwgezEsIDJ9fSwKKyAgICB7SFJQQVJUX0lELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycGFydGl0aW9uLCAyLCB7MSwgM319LAorICAgIHtIUlBBUlRfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCA0fX0sCisgICAge0hSUEFSVF9GU0lEWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJwYXJ0aXRpb24sIDIsIHsxLCA1fX0KIH07CiBvaWQgICAgICAgICAgICAgaHJwYXJ0aXRpb25fdmFyaWFibGVzX29pZFtdID0KICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA3IH07CkBAIC0xMzUsNiArMTU2LDcgQEAKICAgICAgICAgICAgIChuYW1lW0hSUEFSVF9ESVNLX05BTUVfTEVOR1RIXSAmCiAgICAgICAgICAgICAgKCgxIDw8IEhSREVWX1RZUEVfU0hJRlQpIC0gMSkpOwogCisgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gbG93IGluZGV4ICVkXG4iLCBMb3dEaXNrSW5kZXgpKTsKICAgICAgICAgd2hpbGUgKEhSUF9EaXNrSW5kZXggPCBMb3dEaXNrSW5kZXgpIHsKICAgICAgICAgICAgIEluaXRfSFJfUGFydGl0aW9uKCk7ICAgICAgICAvKiBtb3ZlcyB0byBuZXh0IGRpc2sgKi8KICAgICAgICAgICAgIGlmIChIUlBfRGlza0luZGV4ID09IC0xKQpAQCAtMTQ0LDYgKzE2Niw3IEBACiAKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIHBhcnRfaWR4ID0gR2V0X05leHRfSFJfUGFydGl0aW9uKCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gcGFydCBpbmRleCAlZFxuIiwgcGFydF9pZHgpKTsKICAgICAgICAgaWYgKHBhcnRfaWR4ID09IDApCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgbmV3bmFtZVtIUlBBUlRfRElTS19OQU1FX0xFTkdUSF0gPQpAQCAtMTg1LDcgKzIwOCw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDIpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDI7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfcGFydGl0aW9uIiwgIi4uLiBnZXQgcGFydGl0aW9uIHN0YXRzICIpKTsKQEAgLTIyNSw4ICsyNDgsMTMgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSBwYXJ0X2lkeDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICBjYXNlIEhSUEFSVF9MQUJFTDoKKyNpZmRlZiBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTAorICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihIUlBfc2F2ZWRMYWJlbCk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIEhSUF9zYXZlZExhYmVsOworI2Vsc2UKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oSFJQX3NhdmVkTmFtZSk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIEhSUF9zYXZlZE5hbWU7CisjZW5kaWYKICAgICBjYXNlIEhSUEFSVF9JRDogICAgICAgICAgICAvKiBVc2UgdGhlIGRldmljZSBudW1iZXIgKi8KICAgICAgICAgc3ByaW50ZihzdHJpbmcsICIweCV4IiwgKGludCkgc3RhdF9idWYuc3RfcmRldik7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CkBAIC0yNTksOSArMjg3LDExIEBACiBzdGF0aWMgdm9pZAogSW5pdF9IUl9QYXJ0aXRpb24odm9pZCkKIHsKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiSW5pdF9IUl9QYXJ0aXRpb25cbiIpKTsKICAgICBIUlBfRGlza0luZGV4ID0gR2V0X05leHRfSFJfRGlzaygpOwogICAgIGlmIChIUlBfRGlza0luZGV4ICE9IC0xKQogICAgICAgICBIUlBfRGlza0luZGV4ICY9ICgoMSA8PCBIUkRFVl9UWVBFX1NISUZUKSAtIDEpOworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3BhcnRpdGlvbiIsICIuLi4gICVkXG4iLEhSUF9EaXNrSW5kZXgpKTsKIAogICAgIEhSUF9pbmRleCA9IC0xOwogfQpAQCAtMjcyLDYgKzMwMiw3IEBACiAgICAgY2hhciAgICAgICAgICAgIHN0cmluZ1sxMDI0XTsKICAgICBpbnQgICAgICAgICAgICAgZmQ7CiAKKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9wYXJ0aXRpb24iLCAiR2V0X05leHRfSFJfUGFydGl0aW9uICVkXG4iLEhSUF9EaXNrSW5kZXgpKTsKICAgICBpZiAoSFJQX0Rpc2tJbmRleCA9PSAtMSkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0zMDksNCArMzQwLDcgQEAKICAgICBIUlBfc2F2ZWREaXNrSW5kZXggPSBkaXNrX2lkeDsKICAgICBIUlBfc2F2ZWRQYXJ0SW5kZXggPSBwYXJ0X2lkeDsKICAgICAodm9pZCkgR2V0X05leHRfSFJfRGlza19QYXJ0aXRpb24oSFJQX3NhdmVkTmFtZSwgc2l6ZW9mKEhSUF9zYXZlZE5hbWUpLCBIUlBfaW5kZXgpOworI2lmZGVmIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMCisgICAgKHZvaWQpIEdldF9IUl9EaXNrX0xhYmVsKEhSUF9zYXZlZExhYmVsLCBzaXplb2YoSFJQX3NhdmVkTGFiZWwpLCBIUlBfc2F2ZWROYW1lKTsKKyNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5jCmluZGV4IDFkMWYyZWYuLjRjZmEyNWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmMKQEAgLTQ4LDggKzQ4LDEwIEBACiAjZGVmaW5lCUhSUFJJTlRfRVJST1IJCTIKIAogc3RydWN0IHZhcmlhYmxlNCBocnByaW50X3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlBSSU5UX1NUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJwcmludCwgMiwgezEsIDF9fSwKLSAgICB7SFJQUklOVF9FUlJPUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnByaW50LCAyLCB7MSwgMn19CisgICAge0hSUFJJTlRfU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByaW50LCAyLCB7MSwgMX19LAorICAgIHtIUlBSSU5UX0VSUk9SLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hycHJpbnQsIDIsIHsxLCAyfX0KIH07CiBvaWQgICAgICAgICAgICAgaHJwcmludF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA1IH07CiAKQEAgLTEzOSw3ICsxNDEsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3ByaW50IiwgIi4uLiBnZXQgcHJpbnQgc3RhdHMgIikpOwpAQCAtMTc3LDkgKzE3OSwxMCBAQAogICAgIGNhc2UgSFJQUklOVF9FUlJPUjoKICNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUwogICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgorI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOyAgICAgICAgLyogTnVsbCBzdHJpbmcgKi8KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3ByaW50IiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9ocnByaW50XG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaCBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJpbnQuaAppbmRleCAyM2NhMTQzLi43YWNlZThkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3ByaW50LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcmludC5oCkBAIC02LDYgKzYsNyBAQAogI2RlZmluZSBfTUlCR1JPVVBfSFJQUklOVF9ICiAKIGNvbmZpZ19yZXF1aXJlKGhvc3QvaHJfZGV2aWNlKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKIAogZXh0ZXJuIHZvaWQgICAgIGluaXRfaHJfcHJpbnQodm9pZCk7CiBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJwcmludDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfcHJvYy5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMKaW5kZXggZWNlMzM4ZC4uNmY5MzA3OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9wcm9jLmMKQEAgLTUxLDggKzUxLDEwIEBACiAjZGVmaW5lCUhSUFJPQ19MT0FECQkyCiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJwcm9jX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlBST0NfSUQsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfaHJwcm9jLCAyLCB7MSwgMX19LAotICAgIHtIUlBST0NfTE9BRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJwcm9jLCAyLCB7MSwgMn19CisgICAge0hSUFJPQ19JRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByb2MsIDIsIHsxLCAxfX0sCisgICAge0hSUFJPQ19MT0FELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnByb2MsIDIsIHsxLCAyfX0KIH07CiBvaWQgICAgICAgICAgICAgaHJwcm9jX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDMsIDMgfTsKIApAQCAtMTM4LDcgKzE0MCw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCiAgICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogCiAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfcHJvYyIsICIuLi4gZ2V0IHByb2Mgc3RhdHMgIikpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYwppbmRleCAyNWZmM2RiLi4yNjRmZWNjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N0b3JhZ2UuYwpAQCAtOCw3ICs4LDcgQEAKICNpZiBkZWZpbmVkKGZyZWVic2Q1KQogLyogdW5kZWZpbmUgdGhlc2UgaW4gb3JkZXIgdG8gdXNlIGdldGZzc3RhdCAqLwogI3VuZGVmIEhBVkVfU1RBVFZGUwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQorI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKICNlbmRpZgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CkBAIC0xOSwxMyArMTksNyBAQAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDx3aW5kb3dzLmg+Ci0jICBpbmNsdWRlIDxlcnJuby5oPgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTEyLDcgKzEwNiwxMCBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZiBIQVZFX1NZU19TWVNDVExfSCAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZm5kZWYgZHluaXggKi8KIAotI2lmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgSEFWRV9MSUJQRVJGU1RBVF9ICisjaWYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpICYmIEhBVkVfTElCUEVSRlNUQVRfSAorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2VuZGlmCiAKQEAgLTE2MCw2ICsxNTcsOSBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKKyNpZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KQEAgLTE4OSw3ICsxODksNyBAQAogZXh0ZXJuIHN0cnVjdCBtbnR0YWIgKkhSRlNfZW50cnk7CiAjZGVmaW5lIEhSRlNfbW91bnQJbW50X21vdW50cAogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUKKyNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUKIAogI2VsaWYgZGVmaW5lZChXSU4zMikKIC8qIGZha2UgYmxvY2sgc2l6ZSAqLwpAQCAtMjA1LDE0ICsyMDUsMjIgQEAKIGV4dGVybiBpbnQgICAgICBmc2NvdW50OwogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCiAjZGVmaW5lIEhSRlNfbW91bnQJZl9tbnRvbm5hbWUKLSNkZWZpbmUgSFJGU19IQVNfRlJTSVpFIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRQorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRQogCi0jZWxpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgICYmIGRlZmluZWQoU1RSVUNUX1NUQVRWRlNfSEFTX01OVF9ESVIpCisjZWxpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU1RBVFZGU19NTlRfRElSKQogCiBleHRlcm4gc3RydWN0IG1udGVudCAqSFJGU19lbnRyeTsKIGV4dGVybiBpbnQgICAgICBmc2NvdW50OwogI2RlZmluZSBIUkZTX3N0YXRmcwlzdGF0dmZzCiAjZGVmaW5lIEhSRlNfbW91bnQJbW50X2RpcgorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRQorCisjZWxpZiBkZWZpbmVkKEhBVkVfR0VURlNTVEFUKSAmJiAhZGVmaW5lZChIQVZFX1NUQVRGUykgJiYgZGVmaW5lZChIQVZFX1NUQVRWRlMpCisKK2V4dGVybiBzdHJ1Y3Qgc3RhdGZzICpIUkZTX2VudHJ5OworZXh0ZXJuIGludCAgICAgIGZzY291bnQ7CisjZGVmaW5lIEhSRlNfc3RhdGZzCXN0YXR2ZnMKKyNkZWZpbmUgSFJGU19tb3VudAlmX21udG9ubmFtZQogI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCiAKICNlbGlmIGRlZmluZWQoSEFWRV9HRVRGU1NUQVQpCkBAIC0yMjEsMTQgKzIyOSwxNCBAQAogZXh0ZXJuIGludCAgICAgIGZzY291bnQ7CiAjZGVmaW5lIEhSRlNfc3RhdGZzCXN0YXRmcwogI2RlZmluZSBIUkZTX21vdW50CWZfbW50b25uYW1lCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZSU0laRQorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRlJTSVpFCiAKICNlbHNlCiAKIGV4dGVybiBzdHJ1Y3QgbW50ZW50ICpIUkZTX2VudHJ5OwogI2RlZmluZSBIUkZTX21vdW50CW1udF9kaXIKICNkZWZpbmUgSFJGU19zdGF0ZnMJc3RhdGZzCi0jZGVmaW5lIEhSRlNfSEFTX0ZSU0laRSBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZSU0laRQorI2RlZmluZSBIUkZTX0hBU19GUlNJWkUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRlJTSVpFCiAKICNlbmRpZgogCQpAQCAtMjQ5LDYgKzI1Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIFdyaXRlTWV0aG9kICoqKTsKIHZvaWQqICAgICAgICAgICBoZWFkZXJfaHJzdG9yZUVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7CitOZXRzbm1wX05vZGVfSGFuZGxlciBoYW5kbGVfbWVtc2l6ZTsKIAogI2lmZGVmIHNvbGFyaXMyCiB2b2lkICAgICAgICAgICAgc29sX2dldF9zd2FwaW5mbyhpbnQgKiwgaW50ICopOwpAQCAtMjYzLDE3ICsyNzIsMjUgQEAKICNkZWZpbmUJSFJTVE9SRV9VU0VECQk3CiAjZGVmaW5lCUhSU1RPUkVfRkFJTFMJCTgKIAotc3RydWN0IHZhcmlhYmxlNCBocnN0b3JlX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNUT1JFX01FTVNJWkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDEsIHsyfX0sCi0gICAge0hSU1RPUkVfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCAxfX0sCi0gICAge0hSU1RPUkVfVFlQRSwgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgMn19LAotICAgIHtIUlNUT1JFX0RFU0NSLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCAzfX0sCi0gICAge0hSU1RPUkVfVU5JVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3RvcmUsIDMsIHszLCAxLCA0fX0sCi0gICAge0hSU1RPUkVfU0laRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzdG9yZSwgMywgezMsIDEsIDV9fSwKLSAgICB7SFJTVE9SRV9VU0VELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgNn19LAotICAgIHtIUlNUT1JFX0ZBSUxTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9ocnN0b3JlLCAzLCB7MywgMSwgN319CitzdHJ1Y3QgdmFyaWFibGUyIGhyc3RvcmVfdmFyaWFibGVzW10gPSB7CisgICAge0hSU1RPUkVfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHsxfX0sCisgICAge0hSU1RPUkVfVFlQRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Mn19LAorICAgIHtIUlNUT1JFX0RFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHszfX0sCisgICAge0hSU1RPUkVfVU5JVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHs0fX0sCisgICAge0hSU1RPUkVfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezV9fSwKKyAgICB7SFJTVE9SRV9VU0VELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Nn19LAorICAgIHtIUlNUT1JFX0ZBSUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7N319CiB9Owogb2lkICAgICAgICAgICAgIGhyc3RvcmVfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiB9Oworb2lkICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMiB9Oworb2lkICAgICAgICAgICAgIGhyU3RvcmFnZVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMywgMSB9OwogCiAKIHZvaWQKQEAgLTI4MSw4ICsyOTgsMTIgQEAKIHsKICAgICBjaGFyICphcHBuYW1lOwogCi0gICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX3N0b3JhZ2UiLCBocnN0b3JlX3ZhcmlhYmxlcywgdmFyaWFibGU0LAotICAgICAgICAgICAgICAgICBocnN0b3JlX3ZhcmlhYmxlc19vaWQpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKAorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaG9zdC9ock1lbW9yeVNpemUiLCBoYW5kbGVfbWVtc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWQsIE9JRF9MRU5HVEgoaHJNZW1vcnlTaXplX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSkpOworICAgIFJFR0lTVEVSX01JQigiaG9zdC9ocl9zdG9yYWdlIiwgaHJzdG9yZV92YXJpYWJsZXMsIHZhcmlhYmxlMiwKKyAgICAgICAgICAgICAgICAgaHJTdG9yYWdlVGFibGVfb2lkKTsKIAogICAgIGFwcG5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CkBAIC0zMTcsNyArMzM4LDcgQEAKIH0KIAogLyoKLSAqIGhlYWRlcl9ocnN0b3JlKC4uLgorICogaGVhZGVyX2hyc3RvcmVFbnRyeSguLi4KICAqIEFyZ3VtZW50czoKICAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCiAgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKQEAgLTMyOCwzNCArMzQ5LDYgQEAKICAqIAogICovCiAKLWludAotaGVhZGVyX2hyc3RvcmUoc3RydWN0IHZhcmlhYmxlICp2cCwKLSAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCi0gICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKLXsKLSNkZWZpbmUgSFJTVE9SRV9OQU1FX0xFTkdUSAk5Ci0gICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOwotICAgIGludCAgICAgICAgICAgICByZXN1bHQ7Ci0KLSAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlOiAiKSk7Ci0gICAgREVCVUdNU0dPSUQoKCJob3N0L2hyX3N0b3JhZ2UiLCBuYW1lLCAqbGVuZ3RoKSk7Ci0gICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiICVkXG4iLCBleGFjdCkpOwotCi0gICAgbWVtY3B5KChjaGFyICopIG5ld25hbWUsIChjaGFyICopIHZwLT5uYW1lLCB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKLSAgICBuZXduYW1lW0hSU1RPUkVfTkFNRV9MRU5HVEhdID0gMDsKLSAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7Ci0gICAgaWYgKChleGFjdCAmJiAocmVzdWx0ICE9IDApKSB8fCAoIWV4YWN0ICYmIChyZXN1bHQgPj0gMCkpKQotICAgICAgICByZXR1cm4gKE1BVENIX0ZBSUxFRCk7Ci0gICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCi0gICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwotICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7Ci0KLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwotICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKLX0KLQogdm9pZCAqCiBoZWFkZXJfaHJzdG9yZUVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqdnAsCiAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCkBAIC00NjcsNyArNDYwLDcgQEAKICAgICAgICAgfQogICAgIH0KIAotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIC8qCkBAIC00NzUsNyArNDY4LDcgQEAKICAgICAgKi8KICAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlRW50cnk6IHByb2Nlc3MgIikpOwogICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmFtZSwgKmxlbmd0aCkpOwotICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIiAoJXgpXG4iLCBtZW0pKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgKCVwKVxuIiwgbWVtKSk7CiAgICAgcmV0dXJuICh2b2lkKiltZW07CiB9CiAKQEAgLTQ4OSwxMyArNDgyLDQ3IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqaHJzX2Rlc2NyW10gPSB7Ci0gICAgTlVMTCwKLSAgICAiTWVtb3J5IEJ1ZmZlcnMiLCAgICAgICAgICAgLyogSFJTX1RZUEVfTUJVRiAqLwotICAgICJSZWFsIE1lbW9yeSIsICAgICAgICAgICAgICAvKiBIUlNfVFlQRV9NRU0gKi8KLSAgICAiU3dhcCBTcGFjZSIgICAgICAgICAgICAgICAgLyogSFJTX1RZUEVfU1dBUCAqLwotfTsKK2ludAoraGFuZGxlX21lbXNpemUobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBuZXRzbm1wX21lbW9yeV9pbmZvICptZW1faW5mbzsKKyAgICBpbnQgdmFsOwogCisgICAgLyoKKyAgICAgKiBXZSBqdXN0IG5lZWQgdG8gaGFuZGxlIHZhbGlkIEdFVCByZXF1ZXN0cywgYXMgaW52YWxpZCBpbnN0YW5jZXMKKyAgICAgKiAgIGFyZSByZWplY3RlZCBhdXRvbWF0aWNhbGx5LCBhbmQgKHZhbGlkKSBHRVRORVhUIHJlcXVlc3RzIGFyZQorICAgICAqICAgY29udmVydGVkIGludG8gdGhlIGFwcHJvcHJpYXRlIEdFVCByZXF1ZXN0LgorICAgICAqCisgICAgICogV2UgYWxzbyBvbmx5IGV2ZXIgcmVjZWl2ZSBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuCisgICAgICovCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgbmV0c25tcF9tZW1vcnlfbG9hZCgpOworICAgICAgICBtZW1faW5mbyA9IG5ldHNubXBfbWVtb3J5X2dldF9ieUlkeCggTkVUU05NUF9NRU1fVFlQRV9QSFlTTUVNLCAwICk7CisgICAgICAgIGlmICggIW1lbV9pbmZvIHx8IG1lbV9pbmZvLT5zaXplID09IC0xIHx8IG1lbV9pbmZvLT51bml0cyA9PSAtMSApCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0cywgU05NUF9OT1NVQ0hPQkpFQ1QgKTsKKwllbHNlIHsKKyAgICAgICAgICAgIHZhbCAgPSAgbWVtX2luZm8tPnNpemU7ICAgICAvKiBtZW10b3RhbCAqLworICAgICAgICAgICAgdmFsICo9IChtZW1faW5mby0+dW5pdHMvMTAyNCk7CisgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZ2YWwsIHNpemVvZih2YWwpKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIC8qCisgICAgICAgICAqIHdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgc28gdGhpcyBpcyBhIHJlYWxseSBiYWQgZXJyb3IgCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBtb2RlICglZCkgaW4gaGFuZGxlX21lbXNpemVcbiIsCisgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQogCiAKIHVfY2hhciAgICAgICAgICoKQEAgLTUxMCwxMiArNTM3LDYgQEAKICAgICB2b2lkICAgICAgICAgICAgICAgICpwdHI7CiAgICAgbmV0c25tcF9tZW1vcnlfaW5mbyAqbWVtID0gTlVMTDsKIAotICAgIGlmICh2cC0+bWFnaWMgPT0gSFJTVE9SRV9NRU1TSVpFKSB7Ci0gICAgICAgIGlmIChoZWFkZXJfaHJzdG9yZSh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kKQotICAgICAgICAgICAgPT0gTUFUQ0hfRkFJTEVEKQotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfSBlbHNlIHsKLQogcmVhbGx5X3RyeV9uZXh0OgogCXB0ciA9IGhlYWRlcl9ocnN0b3JlRW50cnkodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sCiAJCQkJCXdyaXRlX21ldGhvZCk7CkBAIC01MzUsMTkgKzU1NiwxMCBAQAogCX0gZWxzZSB7CiAJICAgIG1lbSA9IChuZXRzbm1wX21lbW9yeV9pbmZvKilwdHI7CiAgICAgICAgIH0KLSAgICB9CiAKIAogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIEhSU1RPUkVfTUVNU0laRToKLSAgICAgICAgbmV0c25tcF9tZW1vcnlfbG9hZCgpOwotICAgICAgICBtZW0gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfUEhZU01FTSwgMCApOwotICAgICAgICBpZiAoICFtZW0gfHwgbWVtLT5zaXplID09IC0xIHx8IG1lbS0+dW5pdHMgPT0gLTEgKQotCSAgICByZXR1cm4gTlVMTDsKLQlsb25nX3JldHVybiA9IG1lbS0+c2l6ZSAqIChtZW0tPnVuaXRzIC8gMTAyNCk7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0KICAgICBjYXNlIEhSU1RPUkVfSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gc3RvcmVfaWR4OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwpAQCAtNTU1LDcgKzU2Nyw3IEBACiAgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkKICAgICAgICAgICAgIGlmIChzdG9yYWdlVXNlTkZTICYmIENoZWNrX0hSX0ZpbGVTeXNfTkZTKCkpCiAgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDEwOyAgICAgLyogTmV0d29yayBEaXNrICovCi0jaWYgSEFWRV9IQVNNTlRPUFQgJiYgIShkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkKKyNpZiBIQVZFX0hBU01OVE9QVCAmJiAhKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpCiAgICAgICAgICAgICAvKiAKICAgICAgICAgICAgICAqIGhhc21udG9wdCB0YWtlcyAiY29uc3Qgc3RydWN0IG1udGVudCoiLCBidXQgSFJGU19lbnRyeSBoYXMgYmVlbgogICAgICAgICAgICAgICogZGVmaW5lZCBkaWZmZXJlbnRseSBmb3IgQUlYLCBzbyBza2lwIHRoaXMgZm9yIEFJWApAQCAtNjU2LDcgKzY2OCw2IEBACiAJICoKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgaW50ICAgICAgRlNfc3RvcmFnZTsKIHN0YXRpYyBpbnQgICAgICBIUlNfaW5kZXg7CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3RvcmFnZS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKaW5kZXggZmZhMWY1Mi4uMjAwN2MzMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zdG9yYWdlLmgKQEAgLTEsMTIgKzEsMTIgQEAKIC8qCi0gKiAgSG9zdCBSZXNvdXJjZXMgTUlCIC0gc3RvcmFnZSBncm91cCBpbnRlcmZhY2UgLSBocl9zeXN0ZW0uaAorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIHN0b3JhZ2UgZ3JvdXAgaW50ZXJmYWNlIC0gaHJfc3RvcmFnZS5oCiAgKgogICovCiAjaWZuZGVmIF9NSUJHUk9VUF9IUlNUT1JBR0VfSAogI2RlZmluZSBfTUlCR1JPVVBfSFJTVE9SQUdFX0gKIAogY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5KQotY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9maWxlc3lzKQorLyogY29uZmlnX3JlcXVpcmUoaG9zdC9ocl9maWxlc3lzKSAqLwogCiBleHRlcm4gdm9pZCAgICAgaW5pdF9ocl9zdG9yYWdlKHZvaWQpOwogZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX2hyc3RvcmU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd2luc3QuYwppbmRleCBjZjkwZGYyLi4yNTU4MmJkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3aW5zdC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dpbnN0LmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX1NZU19QQVJBTV9ICiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CkBAIC00NSw2ICs0NiwxMCBAQAogI2luY2x1ZGUgPHJwbS9oZWFkZXIuaD4KICNpbmNsdWRlIDxmY250bC5oPgogCisjaWZkZWYgSEFWRV9SUE1fUlBNRklMRVVUSUxfSAorI2luY2x1ZGUgPHJwbS9ycG1maWxldXRpbC5oPgorI2VuZGlmCisKICNpZmRlZiBIQVZFX1JQTUdFVFBBVEgKICNpbmNsdWRlIDxycG0vcnBtbWFjcm8uaD4KICNlbmRpZgpAQCAtNjcsNiArNzIsOCBAQAogCiAjZGVmaW5lIEhSU1dJTlNUX01PTk9UT05JQ0FMTFlfSU5DUkVBU0lORwogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKKwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgS2VybmVsICYgaW50ZXJmYWNlIGluZm9ybWF0aW9uLApAQCAtMTI3LDcgKzEzNCw3IEBACiBpbnQgICAgICAgICAgICAgaGVhZGVyX2hyc3dJbnN0RW50cnkoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7CiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7CisjZGVmaW5lIHN0YXJ0dGltZSAoKihjb25zdCBzdHJ1Y3QgdGltZXZhbCopbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkpCiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC0xNTcsMTMgKzE2NCwyMCBAQAogI2RlZmluZQlIUlNXSU5TVF9EQVRFCQk3CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJzd2luc3RfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSU1dJTlNUX0NIQU5HRSwgQVNOX1RJTUVUSUNLUywgUk9OTFksIHZhcl9ocnN3aW5zdCwgMSwgezF9fSwKLSAgICB7SFJTV0lOU1RfVVBEQVRFLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2hyc3dpbnN0LCAxLCB7Mn19LAotICAgIHtIUlNXSU5TVF9JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCAxfX0sCi0gICAge0hSU1dJTlNUX05BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCAyfX0sCi0gICAge0hSU1dJTlNUX0lELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgM319LAotICAgIHtIUlNXSU5TVF9UWVBFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDR9fSwKLSAgICB7SFJTV0lOU1RfREFURSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDV9fQorICAgIHtIUlNXSU5TVF9DSEFOR0UsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDEsIHsxfX0sCisgICAge0hSU1dJTlNUX1VQREFURSwgQVNOX1RJTUVUSUNLUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3aW5zdCwgMSwgezJ9fSwKKyAgICB7SFJTV0lOU1RfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgMX19LAorICAgIHtIUlNXSU5TVF9OQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dpbnN0LCAzLCB7MywgMSwgMn19LAorICAgIHtIUlNXSU5TVF9JRCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3aW5zdCwgMywgezMsIDEsIDN9fSwKKyAgICB7SFJTV0lOU1RfVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCA0fX0sCisgICAge0hSU1dJTlNUX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd2luc3QsIDMsIHszLCAxLCA1fX0KIH07CiBvaWQgICAgICAgICAgICAgaHJzd2luc3RfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgNiB9OwogCkBAIC0xODYsOSArMjAwLDYgQEAKICNpZiBkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChIQVZFX0xJQlJQTSkKICNkZWZpbmUJX1BBVEhfSFJTV19kaXJlY3RvcnkJIi92YXIvY2FjaGUvaHJtaWIiCiAjZW5kaWYKLSNpZiBkZWZpbmVkKGxpbnV4KSAmJiAhZGVmaW5lZChIQVZFX0xJQlJQTSkKLSNkZWZpbmUJX1BBVEhfSFJTV19kaXJlY3RvcnkJIi92YXIvY2FjaGUvaHJtaWIiCi0jZW5kaWYKIAogdm9pZAogaW5pdF9ocl9zd2luc3Qodm9pZCkKQEAgLTI3OCw3ICsyODksNyBAQAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0KQEAgLTM0OCw3ICszNTksNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2luc3QiLCAiLi4uIGdldCBpbnN0YWxsZWQgUy9XIHN0YXRzICIpKTsKQEAgLTQzMSw3ICs0NDIsNyBAQAogI2lmZGVmIEhBVkVfUEtHSU5GTwogICAgICAgICAgICAgcHZlciA9IHBrZ3BhcmFtKHN3aS0+c3dpX25hbWUsICJWRVJTSU9OIik7CiAgICAgICAgICAgICAvKiAxIHNwb3QgZm9yIHRoZSB0ZXJtaW5hdGluZyBudWxsIGFuZCBvbmUgZm9yIHRoZSBkYXNoICovCi0gICAgICAgICAgICBpZiAocHZlciAmJgorICAgICAgICAgICAgaWYgKHB2ZXIgJiYgCiAgICAgICAgICAgICAgICAoc3RybGVuKHB2ZXIpICsgMiArIHN0cmxlbihzdHJpbmcpIDw9IHNpemVvZihzdHJpbmcpKSkgewogICAgICAgICAgICAgICAgIHN0cmNhdChzdHJpbmcsICItIik7CiAgICAgICAgICAgICAgICAgc3RyY2F0KHN0cmluZywgcHZlcik7CkBAIC00OTIsMjcgKzUwMywzMSBAQAogICAgIGNhc2UgSFJTV0lOU1RfREFURToKICAgICAgICAgewogI2lmZGVmIEhBVkVfTElCUlBNCi0gICAgICAgICAgICBpbnQgICAgICAgICAqcnBtX2RhdGE7CisgICAgICAgICAgICBpbnQzMl90ICAgICAgICAgKnJwbV9kYXRhOwogICAgICAgICAgICAgaWYgKCBoZWFkZXJHZXRFbnRyeShzd2ktPnN3aV9oLCBSUE1UQUdfSU5TVEFMTFRJTUUsIE5VTEwsICh2b2lkICoqKSAmcnBtX2RhdGEsIE5VTEwpICkgewogICAgICAgICAgICAgICAgIHRpbWVfdCAgICAgICAgICBpbnN0YWxsVGltZSA9ICpycG1fZGF0YTsKICAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZSgmaW5zdGFsbFRpbWUsIHZhcl9sZW4pOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZSgwLCB2YXJfbGVuKTsKKyAgICAgICAgICAgICAgICByZXQgPSBkYXRlX25fdGltZShOVUxMLCB2YXJfbGVuKTsKICAgICAgICAgICAgIH0KICNlbHNlCiAgICAgICAgICAgICBpZiAoc3dpLT5zd2lfZGlyZWN0b3J5ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBzbnByaW50ZihzdHJpbmcsIHNpemVvZihzdHJpbmcpLCAiJXMvJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN3aS0+c3dpX2RpcmVjdG9yeSwgc3dpLT5zd2lfbmFtZSk7CiAgICAgICAgICAgICAgICAgc3RyaW5nWyBzaXplb2Yoc3RyaW5nKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgIHN0YXQoc3RyaW5nLCAmc3RhdF9idWYpOwotICAgICAgICAgICAgICAgIHJldCA9IGRhdGVfbl90aW1lKCZzdGF0X2J1Zi5zdF9tdGltZSwgdmFyX2xlbik7CisgICAgICAgICAgICAgICAgaWYgKHN0YXQoc3RyaW5nLCAmc3RhdF9idWYpID49IDApCisgICAgICAgICAgICAgICAgICAgIHJldCA9IGRhdGVfbl90aW1lKCZzdGF0X2J1Zi5zdF9tdGltZSwgdmFyX2xlbik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsKICAgICAgICAgICAgIH0gZWxzZSB7CitlcnI6CiAjaWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgorICAgICAgICAgICAgICAgIHJldCA9IE5VTEw7CisjZWxzZQogICAgICAgICAgICAgICAgIHNwcmludGYoc3RyaW5nLCAiYmFjayBpbiB0aGUgbWlzdHMgb2YgdGltZSIpOwogICAgICAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0cmluZyk7CiAgICAgICAgICAgICAgICAgcmV0ID0gKHVfY2hhciAqKSBzdHJpbmc7CisjZW5kaWYKICAgICAgICAgICAgIH0KICNlbmRpZgogICAgICAgICB9CkBAIC02ODQsNyArNjk5LDcgQEAKICAgICAgICAgc3dpLT5zd2lfbmFtZVsgc2l6ZW9mKHN3aS0+c3dpX25hbWUpLTEgXSA9IDA7CiAgICAgfQogI2Vsc2UKLSAgICBzbnByaW50Zihzd2ktPnN3aV9uYW1lLCBzaXplb2Yoc3dpLT5zd2lfbmFtZSksIHN3aS0+c3dpX2RlcC0+ZF9uYW1lKTsKKyAgICBzbnByaW50Zihzd2ktPnN3aV9uYW1lLCBzaXplb2Yoc3dpLT5zd2lfbmFtZSksICIlcyIsIHN3aS0+c3dpX2RlcC0+ZF9uYW1lKTsKICAgICBzd2ktPnN3aV9uYW1lWyBzaXplb2Yoc3dpLT5zd2lfbmFtZSktMSBdID0gMDsKICNlbmRpZgogICAgIHJldHVybiAwOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zd3J1bi5jCmluZGV4IDEzNGIyN2YuLmY0MGU5OTcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3dydW4uYworKysgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N3cnVuLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAogI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKICNlbmRpZgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogI2luY2x1ZGUgPHByb2NpbmZvLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjZW5kaWYKQEAgLTEyMiwxMSArMTIyLDEzIEBACiAjaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKQogc3RydWN0IHBzdF9zdGF0dXMgKnByb2NfdGFibGU7CiBzdHJ1Y3QgcHN0X2R5bmFtaWMgcHN0X2R5bjsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCitzdHJ1Y3Qga2luZm9fcHJvYzIgKnByb2NfdGFibGU7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogc3RydWN0IGtpbmZvX3Byb2MgKnByb2NfdGFibGU7CiAjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQogaW50ICAgICAgICAgICAgKnByb2NfdGFibGU7Ci0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogc3RydWN0IHByb2NzaW5mbyAqcHJvY190YWJsZTsKICNlbHNlCiBzdHJ1Y3QgcHJvYyAgICAqcHJvY190YWJsZTsKQEAgLTE1MCwxOSArMTUyLDI5IEBACiAjZGVmaW5lCUhSU1dSVU5QRVJGX01FTQkJMTAKIAogc3RydWN0IHZhcmlhYmxlNCBocnN3cnVuX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNXUlVOX09TSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDEsIHsxfX0sCi0gICAge0hSU1dSVU5fSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAxfX0sCi0gICAge0hSU1dSVU5fTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgMn19LAotICAgIHtIUlNXUlVOX0lELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAzfX0sCi0gICAge0hSU1dSVU5fUEFUSCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNH19LAotICAgIHtIUlNXUlVOX1BBUkFNUywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgNX19LAotICAgIHtIUlNXUlVOX1RZUEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA2fX0sCi0gICAge0hSU1dSVU5fU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MiwgMSwgN319CisgICAge0hSU1dSVU5fT1NJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMSwgezF9fSwKKyAgICB7SFJTV1JVTl9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezIsIDEsIDF9fSwKKyAgICB7SFJTV1JVTl9OQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCAyfX0sCisgICAge0hSU1dSVU5fSUQsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezIsIDEsIDN9fSwKKyAgICB7SFJTV1JVTl9QQVRILCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA0fX0sCisgICAge0hSU1dSVU5fUEFSQU1TLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA1fX0sCisgICAge0hSU1dSVU5fVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezIsIDEsIDZ9fSwKKyAgICB7SFJTV1JVTl9TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3dydW4sIDMsIHsyLCAxLCA3fX0KIH07CiAKIHN0cnVjdCB2YXJpYWJsZTQgaHJzd3J1bnBlcmZfdmFyaWFibGVzW10gPSB7Ci0gICAge0hSU1dSVU5QRVJGX0NQVSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzd3J1biwgMywgezEsIDEsIDF9fSwKLSAgICB7SFJTV1JVTlBFUkZfTUVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN3cnVuLCAzLCB7MSwgMSwgMn19CisgICAge0hSU1dSVU5QRVJGX0NQVSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzd3J1biwgMywgezEsIDEsIDF9fSwKKyAgICB7SFJTV1JVTlBFUkZfTUVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN3cnVuLCAzLCB7MSwgMSwgMn19CiB9OwogCiBvaWQgICAgICAgICAgICAgaHJzd3J1bl92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCA0IH07CkBAIC0zMjYsNyArMzM4LDcgQEAKICAgICBhdXRvX25saXN0KE5QUk9DX1NZTUJPTCwgMCwgMCk7CiAjZW5kaWYKIAotICAgIHByb2NfdGFibGUgPSAwOworICAgIHByb2NfdGFibGUgPSBOVUxMOwogCiAgICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX3N3cnVuIiwgaHJzd3J1bl92YXJpYWJsZXMsIHZhcmlhYmxlNCwKICAgICAgICAgICAgICAgICAgaHJzd3J1bl92YXJpYWJsZXNfb2lkKTsKQEAgLTM2OSw3ICszODEsNyBAQAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLwogICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKIH0KQEAgLTQ1Myw3ICs0NjUsNyBAQAogICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAogICAgICAgICAgICAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KIAogICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3N3cnVuIiwgIi4uLiBnZXQgcHJvY2VzcyBzdGF0cyAiKSk7CkBAIC01MTIsNiArNTI0LDEyIEBACiAgICAgaWYgKChjcCA9IGdldF9wcm9jX2ZpbGVfbGluZSgiL3Byb2MvJWQvc3RhdCIsIHBpZCwgYnVmLCBidWZsZW4pKSA9PSBOVUxMICkKIAlyZXR1cm4gTlVMTDsKICAgICBmb3IgKGkgPSAwOyAqY3AgJiYgaSA8IHNraXA7ICsraSkgeworICAgICAgICAvKgorICAgICAgICAgKiBUaGUgc2Vjb25kIGZpZWxkIGlzICdjb21tJyBhbmQgY2FuIGNvbnRhaW4gc3BhY2VzLiBIZW5jZSBza2lwIHRvCisgICAgICAgICAqIHRoZSBjbG9zaW5nIHBhcmVudGhlc2lzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGkgPT0gMSAmJiAqY3AgPT0gJygnKQorICAgICAgICAgICAgY3AgPSBzdHJyY2hyKGNwLCAnKScpOwogCWNwID0gc2tpcF90b19uZXh0X2ZpZWxkKGNwKTsKICAgICB9CiAgICAgcmV0dXJuIGNwOwpAQCAtNTcwLDcgKzU4OCw3IEBACiAgICAgdGltZV90ICAgICAgICAgIG5vdzsKICAgICBzdGF0aWMgaW50ICAgICAgb2xkcGlkID0gLTE7CiAjZW5kaWYKLSNpZiBIQVZFX0tWTV9HRVRQUk9DUworI2lmIChkZWZpbmVkKEhBVkVfS1ZNX0dFVFBST0NTKSB8fCBkZWZpbmVkKEhBVkVfS1ZNX0dFVFBST0MyKSkKICAgICBjaGFyICAgICAgICAgICoqYXJndjsKICNlbmRpZgogI2lmZGVmIGxpbnV4CkBAIC02NjcsMTEgKzY4NSwxNyBAQAogI2Vsc2UKICAgICAgICAgc3RybGNweShzdHJpbmcsIHByb2NfYnVmLT5wX3VzZXIudV9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CiAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfY29tbSwgc2l6ZW9mKHN0cmluZykpOwogICAgICAgICBjcCA9IHN0cmNocihzdHJpbmcsICcgJyk7CiAgICAgICAgIGlmIChjcCAhPSBOVUxMKQogICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIHN0cmxjcHkoc3RyaW5nLCBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CisgICAgICAgIC8qIHByb2Nlc3MgbmFtZTogdHJ1bmNhdGUgdGhlIHN0cmluZyBhdCB0aGUgZmlyc3Qgc3BhY2UgKi8KKyAgICAgICAgY3AgPSBzdHJjaHIoc3RyaW5nLCAnICcpOworICAgICAgICBpZiAoY3AgIT0gTlVMTCkKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgc3RyY3B5KHN0cmluZywgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX2NvbW0pOwpAQCAtNzg0LDExICs4MDgsMTcgQEAKICAgICAgICAgICAgICpjcDErKyA9ICpjcCsrOwogICAgICAgICAqY3AxID0gMDsKICNlbmRpZgotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgc3RybGNweShzdHJpbmcsIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9jb21tLCBzaXplb2Yoc3RyaW5nKSk7CiAgICAgICAgIGNwID0gc3RyY2hyKHN0cmluZywgJyAnKTsKICAgICAgICAgaWYgKGNwICE9IE5VTEwpCiAgICAgICAgICAgICAqY3AgPSAnXDAnOworI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgLyogU2hvdWxkIGJlIHBhdGgsIGJ1dCB0aGlzIGlzIG5vdCBhdmFpbGFibGUsIGp1c3QgdXNlIGFyZ3ZbMF0gYWdhaW4gKi8KKyAgICAgICAgc3RybGNweShzdHJpbmcsIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX2NvbW0sIHNpemVvZihzdHJpbmcpKTsKKyAgICAgICAgY3AgPSBzdHJjaHIoc3RyaW5nLCAnICcpOworICAgICAgICBpZiAoY3AgIT0gTlVMTCkKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgc3RyY3B5KHN0cmluZywgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX2NvbW0pOwpAQCAtODgzLDEzICs5MTMsMjQgQEAKICAgICAgICAgICAgIGNwKys7CiAgICAgICAgIHN0cmNweShzdHJpbmcsIGNwKTsKICNlbmRpZgotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgY3AgPSBzdHJjaHIocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX2NvbW0sICcgJyk7CiAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBjcCsrOwogICAgICAgICAgICAgc3ByaW50ZihzdHJpbmcsICIlcyIsIGNwKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBzdHJpbmdbMF0gPSAnXDAnOworI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgc3RyaW5nWzBdID0gMDsKKyAgICAgICAgYXJndiA9IGt2bV9nZXRhcmd2MihrZCwgcHJvY190YWJsZSArIExvd1Byb2NJbmRleCwgc2l6ZW9mKHN0cmluZykpOworICAgICAgICBpZiAoYXJndikKKyAgICAgICAgICAgIGFyZ3YrKzsKKyAgICAgICAgd2hpbGUgKGFyZ3YgJiYgKmFyZ3YpIHsKKyAgICAgICAgICAgIGlmIChzdHJpbmdbMF0gIT0gMCkKKyAgICAgICAgICAgICAgICBzdHJjYXQoc3RyaW5nLCAiICIpOworICAgICAgICAgICAgc3RyY2F0KHN0cmluZywgKmFyZ3YpOworICAgICAgICAgICAgYXJndisrOworICAgICAgICB9CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICAgICBzdHJpbmdbMF0gPSAwOwogICAgICAgICBhcmd2ID0ga3ZtX2dldGFyZ3Yoa2QsIHByb2NfdGFibGUgKyBMb3dQcm9jSW5kZXgsIHNpemVvZihzdHJpbmcpKTsKQEAgLTkwMyw3ICs5NDQsNyBAQAogICAgICAgICB9CiAjZWxpZiBkZWZpbmVkKGxpbnV4KQogICAgICAgICBtZW1zZXQoYnVmLCAwLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgIGlmKCAoY3A9Z2V0X3Byb2NfbmFtZV9mcm9tX2NtZGxpbmUocGlkLGJ1ZixzaXplb2YoYnVmKS0yKSkgPT0gTlVMTCApIHsKKwlpZiggKGNwPWdldF9wcm9jX25hbWVfZnJvbV9jbWRsaW5lKHBpZCxidWYsc2l6ZW9mKGJ1ZiktMikpID09IE5VTEwgKSB7CiAgICAgICAgICAgICBzdHJjcHkoc3RyaW5nLCAiIik7CiAgICAgICAgICAgICAqdmFyX2xlbiA9IDA7CiAgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzdHJpbmc7CkBAIC05NTIsMTEgKzk5MywxNiBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAyOyAgICAvKiBvcGVyYXRpbmdTeXN0ZW0gKi8KICAgICAgICAgZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSA0OyAgICAvKiBhcHBsaWNhdGlvbiAqLwotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKIAkJaWYgKHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9mbGFncyAmIFNLUFJPQykgewogCQkJbG9uZ19yZXR1cm4gPSAyOwkvKiBrZXJuZWwgcHJvY2VzcyAqLwogCQl9IGVsc2UKIAkJCWxvbmdfcmV0dXJuID0gNDsJLyogYXBwbGljYXRpb24gKi8KKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGlmIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9mbGFnICYgUF9TWVNURU0pCisJICAgIGxvbmdfcmV0dXJuID0gMjsJLyogb3BlcmF0aW5nU3lzdGVtICovCisJZWxzZQorCSAgICBsb25nX3JldHVybiA9IDQ7CS8qIGFwcGxpY2F0aW9uICovCiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKIAlpZiAocHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLmtpX2ZsYWcgJiBQX1NZU1RFTSkgewpAQCAtMTAxNCw3ICsxMDYwLDkgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAjZWxzZQotI2lmIEhBVkVfS1ZNX0dFVFBST0NTCisjaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9zdGF0KSB7CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ua2lfc3RhdCkgewogICAgICNlbGlmIGRlZmluZWQoZHJhZ29uZmx5KSAmJiBfX0RyYWdvbkZseV92ZXJzaW9uID49IDE5MDAwMApAQCAtMTAzMiw3ICsxMDgwLDcgQEAKICNlbHNlCiAgICAgICAgIHN3aXRjaCAocHJvY19idWYtPnBfc3RhdCkgewogI2VuZGlmCi0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBzd2l0Y2ggKHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9zdGF0ZSkgewogI2Vsc2UKICAgICAgICAgc3dpdGNoIChwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF9zdGF0KSB7CkBAIC0xMTA5LDYgKzExNTcsMTAgQEAKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY19idWYtPnBfdXRpbWUgKiAxMDAgKyBwcm9jX2J1Zi0+cF9zdGltZSAqIDEwMDsKICNlbmRpZgorI2VsaWYgSEFWRV9LVk1fR0VUUFJPQzIKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucF91dGlja3MgKworICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfc3RpY2tzICsKKyAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5wX2l0aWNrczsKICNlbGlmIEhBVkVfS1ZNX0dFVFBST0NTCiAgICAgI2lmIGRlZmluZWQoTk9UX0RFRklORUQpICYmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAogICAgICAgICAvKiBYWFg6IEFjY2Vzc2luZyBraV9wYWRkciBjYXVzZXMgc2lnMTAgLi4uCkBAIC0xMTcxLDcgKzEyMjMsNyBAQAogICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSBwcm9jX3RhYmxlW0xvd1Byb2NJbmRleF0ucGlfcnUucnVfdXRpbWUudHZfc2VjICogMTAwICsKICAgICAgICAgICAgIHByb2NfdGFibGVbTG93UHJvY0luZGV4XS5waV9ydS5ydV91dGltZS50dl91c2VjIC8gMTAwMDAwMDAgKyAvKiBuYW5vc2Vjb25kcyAqLwogICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX3J1LnJ1X3N0aW1lLnR2X3NlYyAqIDEwMCArCkBAIC0xMjIzLDggKzEyNzUsMTMgQEAKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY19idWYtPnBfc3dyc3M7CiAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBpX3NpemUgKiBnZXRwYWdlc2l6ZSgpIC8gMTAyNDsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGxvbmdfcmV0dXJuID0gcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdm1fdHNpemUgKworICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdm1fc3NpemUgKworICAgICAgICAgICAgcHJvY190YWJsZVtMb3dQcm9jSW5kZXhdLnBfdm1fZHNpemU7CisgICAgICAgIGxvbmdfcmV0dXJuID0gbG9uZ19yZXR1cm4gKiAoZ2V0cGFnZXNpemUoKSAvIDEwMjQpOwogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MgJiYgIWRlZmluZWQoZGFyd2luOCkKICAgI2lmIGRlZmluZWQoTk9UX0RFRklORUQpICYmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDAxNAogCSAgICAvKiBYWFgKQEAgLTE0NjgsNyArMTUyNSw3IEBACiAgICAgICAgICAgICBucHJvYyA9IGN1cnJlbnRfcHJvY19lbnRyeTsKICAgICAgICAgY2xvc2VkaXIoZik7CiAgICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICB7CiAJCXBpZF90IHByb2NfaW5kZXggPSAwOwogCQlpbnQgYXZhaWwgPSAxMDI0OwpAQCAtMTQ5NSw2ICsxNTUyLDE0IEBACiAJCQlwcm9jX3RhYmxlID0gcmVhbGxvYyhwcm9jX3RhYmxlLCBhdmFpbCAqIHNpemVvZihwcm9jX3RhYmxlWzBdKSk7CiAJCX0KICAgICB9CisjZWxpZiBIQVZFX0tWTV9HRVRQUk9DMgorICAgIHsKKyAgICAgICAgaWYgKGtkID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5wcm9jID0gMDsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwcm9jX3RhYmxlID0ga3ZtX2dldHByb2MyKGtkLCBLRVJOX1BST0NfQUxMLCAwLCBzaXplb2YgKHN0cnVjdCBraW5mb19wcm9jMiksICZucHJvYyk7CisgICAgfQogI2VsaWYgSEFWRV9LVk1fR0VUUFJPQ1MKICAgICB7CiAgICAgICAgIGlmIChrZCA9PSBOVUxMKSB7CkBAIC0xNTU1LDYgKzE2MjAsOSBAQAogICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ucHN0X3BpZDsKICNlbGlmIGRlZmluZWQoc29sYXJpczIpCiAgICAgICAgIHJldHVybiBwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeSsrXTsKKyNlbGlmIEhBVkVfS1ZNX0dFVFBST0MyCisgICAgICAgIGlmIChwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeV0ucF9zdGF0ICE9IDApCisgICAgICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ucF9waWQ7CiAjZWxpZiBIQVZFX0tWTV9HRVRQUk9DUwogICAgICNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAwMTQKICAgICAgICAgaWYgKHByb2NfdGFibGVbY3VycmVudF9wcm9jX2VudHJ5XS5raV9zdGF0ICE9IDApCkBAIC0xNTY5LDcgKzE2MzcsNyBAQAogICAgICAgICBpZiAocHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnldLmtwX3Byb2MucF9zdGF0ICE9IDApCiAgICAgICAgICAgICByZXR1cm4gcHJvY190YWJsZVtjdXJyZW50X3Byb2NfZW50cnkrK10ua3BfcHJvYy5wX3BpZDsKICAgICAjZW5kaWYKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGlmIChwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeV0ucGlfc3RhdGUgIT0gMCkKICAgICAgICAgICAgIHJldHVybiBwcm9jX3RhYmxlW2N1cnJlbnRfcHJvY19lbnRyeSsrXS5waV9waWQ7CiAgICAgICAgIGVsc2UKQEAgLTE1OTUsMTYgKzE2NjMsMTYgQEAKIGludAogY291bnRfcHJvY2Vzc2VzKHZvaWQpCiB7Ci0jaWYgIShkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKGN5Z3dpbikgfHwgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKSB8fCBkZWZpbmVkKHNvbGFyaXMyKSB8fCBIQVZFX0tWTV9HRVRQUk9DUyB8fCBkZWZpbmVkKGR5bml4KSkKKyNpZiAhKGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoY3lnd2luKSB8fCBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpIHx8IGRlZmluZWQoc29sYXJpczIpIHx8IEhBVkVfS1ZNX0dFVFBST0NTIHx8IEhBVkVfS1ZNX0dFVFBST0MyIHx8IGRlZmluZWQoZHluaXgpKQogICAgIGludCAgICAgICAgICAgICBpOwogI2VuZGlmCiAgICAgaW50ICAgICAgICAgICAgIHRvdGFsID0gMDsKIAogICAgIEluaXRfSFJfU1dSdW4oKTsKLSNpZiBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpIHx8IEhBVkVfS1ZNX0dFVFBST0NTIHx8IGRlZmluZWQoc29sYXJpczIpCisjaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKSB8fCBIQVZFX0tWTV9HRVRQUk9DUyB8fCBIQVZFX0tWTV9HRVRQUk9DMiB8fCBkZWZpbmVkKHNvbGFyaXMyKQogICAgIHRvdGFsID0gbnByb2M7CiAjZWxzZQotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIGZvciAoaSA9IDA7IGkgPCBucHJvYzsgKytpKSB7CiAgICAgICAgIGlmIChwcm9jX3RhYmxlW2ldLnBpX3N0YXRlICE9IDApCiAjZWxpZiAhZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoY3lnd2luKSAmJiAhZGVmaW5lZChkeW5peCkKQEAgLTE2MTUsNyArMTY4Myw3IEBACiAjZW5kaWYKICAgICAgICAgKyt0b3RhbDsKICAgICB9Ci0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFocHV4MTAgJiYgIWhwdXgxMSAmJiAhSEFWRV9LVk1fR0VUUFJPQ1MgJiYgIXNvbGFyaXMyICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFocHV4MTAgJiYgIWhwdXgxMSAmJiAhSEFWRV9LVk1fR0VUUFJPQ1MgJiYgIUhBVkVfS1ZNX0dFVFBST0MyICYmICFzb2xhcmlzMiAqLwogICAgIEVuZF9IUl9TV1J1bigpOwogICAgIHJldHVybiB0b3RhbDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5jCmluZGV4IGNiYzhmYzguLmQ5OWNjN2QgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uYwpAQCAtMTUsNiArMTUsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCkBAIC03Nyw2ICs3OCw4IEBACiAjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGVfbl90aW1lKQorCiAjaWYgIWRlZmluZWQoVVRNUF9GSUxFKSAmJiBkZWZpbmVkKF9QQVRIX1VUTVApCiAjZGVmaW5lIFVUTVBfRklMRSBfUEFUSF9VVE1QCiAjZW5kaWYKQEAgLTk4LDE1ICsxMDEsMjAgQEAKICNpZiBkZWZpbmVkKHNvbGFyaXMyKQogc3RhdGljIHN0cnVjdCBvcGVucHJvbWlvICogb3BfbWFsbG9jKHNpemVfdCBzaXplKTsKIHN0YXRpYyB2b2lkIG9wX2ZyZWUoc3RydWN0IG9wZW5wcm9taW8gKm9wKTsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHN0YXRpYyBpbnQgc2V0X3NvbGFyaXNfYm9vdGNvbW1hbmRfcGFyYW1ldGVyKGludCBhY3Rpb24sIHVfY2hhciAqIHZhcl92YWwsIHVfY2hhciB2YXJfdmFsX3R5cGUsIHNpemVfdCB2YXJfdmFsX2xlbiwgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbik7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiBzdGF0aWMgaW50IHNldF9zb2xhcmlzX2VlcHJvbV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbik7CiBzdGF0aWMgaW50IGdldF9zb2xhcmlzX2VlcHJvbV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqcGFyYW1ldGVyLCBjaGFyICpvdXRwdXQpOwogc3RhdGljIGxvbmcgICAgIGdldF9tYXhfc29sYXJpc19wcm9jZXNzZXModm9pZCk7CiAjZW5kaWYKKwogc3RhdGljIGludCAgICAgIGdldF9sb2FkX2Rldih2b2lkKTsKIHN0YXRpYyBpbnQgICAgICBjb3VudF91c2Vycyh2b2lkKTsKIGV4dGVybiBpbnQgICAgICBjb3VudF9wcm9jZXNzZXModm9pZCk7Ci0KK2V4dGVybiBpbnQgICAgICBzd3J1bl9jb3VudF9wcm9jZXNzZXModm9pZCk7CiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC0xMjMsMjYgKzEzMSw2MCBAQAogI2RlZmluZQlIUlNZU19NQVhQUk9DUwkJNwogCiAjaWYgZGVmaW5lZChzb2xhcmlzMikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdHJ1Y3QgdmFyaWFibGUyIGhyc3lzdGVtX3ZhcmlhYmxlc1tdID0gewotICAgIHtIUlNZU19VUFRJTUUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHsxfX0sCi0gICAge0hSU1lTX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2hyc3lzLCAxLCB7Mn19LAotICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHszfX0sCi0gICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2hyc3lzLCAxLCB7NH19LAotICAgIHtIUlNZU19VU0VSUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7NX19LAotICAgIHtIUlNZU19QUk9DUywgQVNOX0dBVUdFLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7Nn19LAotICAgIHtIUlNZU19NQVhQUk9DUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs3fX0KKyAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7MX19LAorICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ocnN5cywgMSwgezJ9fSwKKyAgICB7SFJTWVNfTE9BRF9ERVYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7M319LAorICAgIHtIUlNZU19MT0FEX1BBUkFNLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9ocnN5cywgMSwgezR9fSwKKyAgICB7SFJTWVNfVVNFUlMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezV9fSwKKyAgICB7SFJTWVNfUFJPQ1MsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezZ9fSwKKyAgICB7SFJTWVNfTUFYUFJPQ1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7N319CiB9OworI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworc3RydWN0IHZhcmlhYmxlMiBocnN5c3RlbV92YXJpYWJsZXNbXSA9IHsKKyAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7MX19LAorICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7Mn19LAorICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHszfX0sCisgICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs0fX0sCisgICAge0hSU1lTX1VTRVJTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs1fX0sCisgICAge0hSU1lTX1BST0NTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHs2fX0sCisgICAge0hSU1lTX01BWFBST0NTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezd9fQorfTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZWxzZQogc3RydWN0IHZhcmlhYmxlMiBocnN5c3RlbV92YXJpYWJsZXNbXSA9IHsKLSAgICB7SFJTWVNfVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7MX19LAotICAgIHtIUlNZU19EQVRFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2hyc3lzLCAxLCB7Mn19LAotICAgIHtIUlNZU19MT0FEX0RFViwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHszfX0sCi0gICAge0hSU1lTX0xPQURfUEFSQU0sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs0fX0sCi0gICAge0hSU1lTX1VTRVJTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs1fX0sCi0gICAge0hSU1lTX1BST0NTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfaHJzeXMsIDEsIHs2fX0sCi0gICAge0hSU1lTX01BWFBST0NTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9ocnN5cywgMSwgezd9fQorICAgIHtIUlNZU19VUFRJTUUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHsxfX0sCisgICAge0hSU1lTX0RBVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzeXMsIDEsIHsyfX0sCisgICAge0hSU1lTX0xPQURfREVWLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezN9fSwKKyAgICB7SFJTWVNfTE9BRF9QQVJBTSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezR9fSwKKyAgICB7SFJTWVNfVVNFUlMsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezV9fSwKKyAgICB7SFJTWVNfUFJPQ1MsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN5cywgMSwgezZ9fSwKKyAgICB7SFJTWVNfTUFYUFJPQ1MsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3lzLCAxLCB7N319CiB9OwogI2VuZGlmCisKIG9pZCAgICAgICAgICAgICBocnN5c3RlbV92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAxIH07CiAKIApAQCAtMTkxLDcgKzIzMyw3IEBACiAgICAgICAgICAgICh2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CiAKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAgICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOwogfSAvKiBlbmQgaGVhZGVyX2hyc3lzICovCkBAIC0yMzYsOSArMjc4LDExIEBACiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgY2FzZSBIUlNZU19EQVRFOgogI2lmIGRlZmluZWQoSEFWRV9NS1RJTUUpICYmIGRlZmluZWQoSEFWRV9TVElNRSkKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgICAgICAqd3JpdGVfbWV0aG9kPW5zX3NldF90aW1lOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNlbmRpZgotICAgICAgICAodm9pZCAqKSB0aW1lKCZub3cpOworICAgICAgICB0aW1lKCZub3cpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBkYXRlX25fdGltZSgmbm93LCB2YXJfbGVuKTsKICAgICBjYXNlIEhSU1lTX0xPQURfREVWOgogICAgICAgICBsb25nX3JldHVybiA9IGdldF9sb2FkX2RldigpOwpAQCAtMjUyLDcgKzI5Niw5IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICp3cml0ZV9tZXRob2Q9c2V0X3NvbGFyaXNfYm9vdGNvbW1hbmRfcGFyYW1ldGVyOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgaWYgKCBnZXRfc29sYXJpc19lZXByb21fcGFyYW1ldGVyKCJib290LWNvbW1hbmQiLGJvb3RwYXJhbSkgKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJ1bmFibGUgdG8gbG9va3VwIGJvb3QtY29tbWFuZCBmcm9tIGVlcHJvbVxuIik7CiAgICAgICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI3MCw3ICszMTYsOSBAQAogICAgICAgICBsb25nX3JldHVybiA9IGNvdW50X3VzZXJzKCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgY2FzZSBIUlNZU19QUk9DUzoKLSNpZiBVU0lOR19IT1NUX0hSX1NXUlVOX01PRFVMRQorI2lmIFVTSU5HX0hPU1RfREFUQV9BQ0NFU1NfU1dSVU5fTU9EVUxFCisgICAgICAgIGxvbmdfcmV0dXJuID0gc3dydW5fY291bnRfcHJvY2Vzc2VzKCk7CisjZWxpZiBVU0lOR19IT1NUX0hSX1NXUlVOX01PRFVMRQogICAgICAgICBsb25nX3JldHVybiA9IGNvdW50X3Byb2Nlc3NlcygpOwogI2Vsc2UKICNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUwpAQCAtMzQ5LDYgKzM5Nyw3IEBACiAgICAgZnJlZShvcCk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBzdGF0aWMgaW50CiBzZXRfc29sYXJpc19ib290Y29tbWFuZF9wYXJhbWV0ZXIoaW50IGFjdGlvbiwKICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC00MTMsNiArNDYyLDcgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiBzdGF0aWMgaW50IHNldF9zb2xhcmlzX2VlcHJvbV9wYXJhbWV0ZXIoY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4pIHsKQEAgLTQ5Miw2ICs1NDIsNyBAQAogI2VuZGlmCiAKICNpZiBkZWZpbmVkKEhBVkVfTUtUSU1FKSAmJiBkZWZpbmVkKEhBVkVfU1RJTUUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiBuc19zZXRfdGltZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTU4NSw2ICs2MzYsNyBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZW5kaWYKIAogICAgICAgICAgICAgICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocl9zeXN0ZW0uaAppbmRleCA1ZTEyYzBkLi5mZWZmYTYwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ob3N0L2hyX3N5c3RlbS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJfc3lzdGVtLmgKQEAgLTksNyArOSw5IEBACiBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJzeXM7CiAKICNpZiBkZWZpbmVkKEhBVkVfTUtUSU1FKSAmJiBkZWZpbmVkKEhBVkVfU1RJTUUpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50IG5zX3NldF90aW1lKGludCBhY3Rpb24sIHVfY2hhciAqIHZhcl92YWwsIHVfY2hhciB2YXJfdmFsX3R5cGUsIHNpemVfdCB2YXJfdmFsX2xlbiwgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbik7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2VuZGlmCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0hSU1lTVEVNX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWFiNmEwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaG9zdC9ocmhfZmlsZXN5cy5jCkBAIC0wLDAgKzEsNDI5IEBACisvKgorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIEZpbGUgU3lzdGVtIGRldmljZSBncm91cCBpbXBsZW1lbnRhdGlvbiAoSEFMIHJld3JpdGUpIC0gaHJoX2ZpbGVzeXMuYworICoKKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9tZW1vcnkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmg+CisjaW5jbHVkZSAiaG9zdF9yZXMuaCIKKyNpbmNsdWRlICJocmhfZmlsZXN5cy5oIgorI2luY2x1ZGUgImhyaF9zdG9yYWdlLmgiCisjaW5jbHVkZSAiaHJfZGlzay5oIgorI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgorCisjaWYgSEFWRV9NTlRFTlRfSAorI2luY2x1ZGUgPG1udGVudC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTU5URU5UX0gKKyNpbmNsdWRlIDxzeXMvbW50ZW50Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19NTlRUQUJfSAorI2luY2x1ZGUgPHN5cy9tbnR0YWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19WRlNfSAorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKKyNpbmNsdWRlIDxzeXMvbW50Y3RsLmg+CisjaW5jbHVkZSA8c3lzL3Ztb3VudC5oPgorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShkYXRlX25fdGltZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGN0aW1lX3RvX3RpbWV0KQorCisjZGVmaW5lIEhSRlNfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKKwkgKiAgIGFuZCBpbnRlcm5hbCBmb3J3YXJkIGRlY2xhcmF0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KK25ldHNubXBfZnN5c19pbmZvICpIUkZTX2VudHJ5OworCisjZGVmaW5lCUZVTExfRFVNUAkwCisjZGVmaW5lCVBBUlRfRFVNUAkxCisKK2V4dGVybiB2b2lkICAgICBJbml0X0hSX0ZpbGVTeXModm9pZCk7CitleHRlcm4gaW50ICAgICAgR2V0X05leHRfSFJfRmlsZVN5cyh2b2lkKTsKK2NoYXIgICAgICAgICAgICpjb29rX2RldmljZShjaGFyICopOworc3RhdGljIHVfY2hhciAgKndoZW5fZHVtcGVkKGNoYXIgKmZpbGVzeXMsIGludCBsZXZlbCwgc2l6ZV90ICogbGVuZ3RoKTsKK2ludCAgICAgICAgICAgICBoZWFkZXJfaHJoZmlsZXN5cyhzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBJbml0aWFsaXNhdGlvbiAmIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKKwkgKgorCSAqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgSFJGU1lTX0lOREVYCQkxCisjZGVmaW5lIEhSRlNZU19NT1VOVAkJMgorI2RlZmluZSBIUkZTWVNfUk1PVU5UCQkzCisjZGVmaW5lIEhSRlNZU19UWVBFCQk0CisjZGVmaW5lIEhSRlNZU19BQ0NFU1MJCTUKKyNkZWZpbmUgSFJGU1lTX0JPT1QJCTYKKyNkZWZpbmUgSFJGU1lTX1NUT1JFSURYCQk3CisjZGVmaW5lIEhSRlNZU19GVUxMRFVNUAkJOAorI2RlZmluZSBIUkZTWVNfUEFSVERVTVAJCTkKKworc3RydWN0IHZhcmlhYmxlNCBocmZzeXNfdmFyaWFibGVzW10gPSB7CisgICAge0hSRlNZU19JTkRFWCwgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgMX19LAorICAgIHtIUkZTWVNfTU9VTlQsICAgIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDJ9fSwKKyAgICB7SFJGU1lTX1JNT1VOVCwgICBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCAzfX0sCisgICAge0hSRlNZU19UWVBFLCAgICAgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgNH19LAorICAgIHtIUkZTWVNfQUNDRVNTLCAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDV9fSwKKyAgICB7SFJGU1lTX0JPT1QsICAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCA2fX0sCisgICAge0hSRlNZU19TVE9SRUlEWCwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocmhmaWxlc3lzLCAyLCB7MSwgN319LAorICAgIHtIUkZTWVNfRlVMTERVTVAsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJoZmlsZXN5cywgMiwgezEsIDh9fSwKKyAgICB7SFJGU1lTX1BBUlREVU1QLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyaGZpbGVzeXMsIDIsIHsxLCA5fX0sCit9Oworb2lkICAgICAgICAgICAgIGhyZnN5c192YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDI1LCAzLCA4IH07CisKK3ZvaWQKK2luaXRfaHJoX2ZpbGVzeXModm9pZCkKK3sKKyAgICBSRUdJU1RFUl9NSUIoImhvc3QvaHJfZmlsZXN5cyIsIGhyZnN5c192YXJpYWJsZXMsIHZhcmlhYmxlNCwKKyAgICAgICAgICAgICAgICAgaHJmc3lzX3ZhcmlhYmxlc19vaWQpOworfQorCisvKgorICogaGVhZGVyX2hyaGZpbGVzeXMoLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAorICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKiAKKyAqLworCitpbnQKK2hlYWRlcl9ocmhmaWxlc3lzKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisjZGVmaW5lIEhSRlNZU19FTlRSWV9OQU1FX0xFTkdUSAkxMQorICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgZnN5c19pZHgsIExvd0luZGV4ID0gLTE7CisgICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX2ZpbGVzeXMiLCAidmFyX2hyaGZpbGVzeXM6ICIpKTsKKyAgICBERUJVR01TR09JRCgoImhvc3QvaHJfZmlsZXN5cyIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfZmlsZXN5cyIsICIgJWRcbiIsIGV4YWN0KSk7CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmV3bmFtZSwgKGNoYXIgKikgdnAtPm5hbWUsIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgIC8qCisgICAgICogRmluZCAibmV4dCIgZmlsZSBzeXN0ZW0gZW50cnkgCisgICAgICovCisKKyAgICBJbml0X0hSX0ZpbGVTeXMoKTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGZzeXNfaWR4ID0gR2V0X05leHRfSFJfRmlsZVN5cygpOworICAgICAgICBpZiAoZnN5c19pZHggPT0gLTEpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbmV3bmFtZVtIUkZTWVNfRU5UUllfTkFNRV9MRU5HVEhdID0gZnN5c19pZHg7CisgICAgICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3bmFtZSwgdnAtPm5hbWVsZW4gKyAxKTsKKyAgICAgICAgaWYgKGV4YWN0ICYmIChyZXN1bHQgPT0gMCkpIHsKKyAgICAgICAgICAgIExvd0luZGV4ID0gZnN5c19pZHg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAoKCFleGFjdCAmJiAocmVzdWx0IDwgMCkpICYmCisgICAgICAgICAgICAoTG93SW5kZXggPT0gLTEgfHwgZnN5c19pZHggPCBMb3dJbmRleCkpIHsKKyAgICAgICAgICAgIExvd0luZGV4ID0gZnN5c19pZHg7CisjaWZkZWYgSFJGU19NT05PVE9OSUNBTExZX0lOQ1JFQVNJTkcKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoTG93SW5kZXggPT0gLTEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICIuLi4gaW5kZXggb3V0IG9mIHJhbmdlXG4iKSk7CisgICAgICAgIHJldHVybiAoTUFUQ0hfRkFJTEVEKTsKKyAgICB9CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKKyAgICAgICAgICAgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CisgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsgICAgLyogZGVmYXVsdCB0byAnbG9uZycgcmVzdWx0cyAqLworCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfZmlsZXN5cyIsICIuLi4gZ2V0IGZpbGVzeXMgc3RhdHMgIikpOworICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9maWxlc3lzIiwgbmFtZSwgKmxlbmd0aCkpOworICAgIERFQlVHTVNHKCgiaG9zdC9ocl9maWxlc3lzIiwgIlxuIikpOworCisgICAgcmV0dXJuIExvd0luZGV4OworfQorCisKK29pZCAgICAgICAgICAgICBmc3lzX3R5cGVfaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMjUsIDMsIDksIDEgfTsgICAgIC8qIGhyRlNPdGhlciAqLworaW50ICAgICAgICAgICAgIGZzeXNfdHlwZV9sZW4gPQorICAgIHNpemVvZihmc3lzX3R5cGVfaWQpIC8gc2l6ZW9mKGZzeXNfdHlwZV9pZFswXSk7CisKKworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworCisKK3VfY2hhciAgICAgICAgICoKK3Zhcl9ocmhmaWxlc3lzKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgaW50ICAgICAgICAgICAgIGZzeXNfaWR4OworICAgIHN0YXRpYyBjaGFyICAgICBzdHJpbmdbMTAyNF07CisKKyAgICBmc3lzX2lkeCA9CisgICAgICAgIGhlYWRlcl9ocmhmaWxlc3lzKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpOworICAgIGlmIChmc3lzX2lkeCA9PSBNQVRDSF9GQUlMRUQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIEhSRlNZU19JTkRFWDoKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBmc3lzX2lkeDsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSRlNZU19NT1VOVDoKKyAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKSwgIiVzIiwgSFJGU19lbnRyeS0+cGF0aCk7CisgICAgICAgIHN0cmluZ1sgc2l6ZW9mKHN0cmluZyktMSBdID0gMDsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RyaW5nOworICAgIGNhc2UgSFJGU1lTX1JNT1VOVDoKKyAgICAgICAgaWYgKEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1JFTU9URSkgeworICAgICAgICAgICAgc25wcmludGYoc3RyaW5nLCBzaXplb2Yoc3RyaW5nKSwgIiVzIiwgSFJGU19lbnRyeS0+ZGV2aWNlKTsKKyAgICAgICAgICAgIHN0cmluZ1sgc2l6ZW9mKHN0cmluZyktMSBdID0gMDsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBzdHJpbmdbMF0gPSAnXDAnOworICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdHJpbmcpOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzdHJpbmc7CisKKyAgICBjYXNlIEhSRlNZU19UWVBFOgorICAgICAgICBmc3lzX3R5cGVfaWRbZnN5c190eXBlX2xlbiAtIDFdID0gCisgICAgICAgICAgICAoSFJGU19lbnRyeS0+dHlwZSA+IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GU19UWVBFX09USEVSIDogSFJGU19lbnRyeS0+dHlwZSk7CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGZzeXNfdHlwZV9pZCk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIGZzeXNfdHlwZV9pZDsKKworICAgIGNhc2UgSFJGU1lTX0FDQ0VTUzoKKwlsb25nX3JldHVybiA9IEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1JPTkxZID8gMiA6IDE7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUkZTWVNfQk9PVDoKKwlsb25nX3JldHVybiA9IEhSRlNfZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX0JPT1RBQkxFID8gMSA6IDI7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUkZTWVNfU1RPUkVJRFg6CisgICAgICAgIGxvbmdfcmV0dXJuID0gZnN5c19pZHggKyBORVRTTk1QX01FTV9UWVBFX01BWDsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSRlNZU19GVUxMRFVNUDoKKyAgICAgICAgcmV0dXJuIHdoZW5fZHVtcGVkKEhSRlNfZW50cnktPnBhdGgsIEZVTExfRFVNUCwgdmFyX2xlbik7CisgICAgY2FzZSBIUkZTWVNfUEFSVERVTVA6CisgICAgICAgIHJldHVybiB3aGVuX2R1bXBlZChIUkZTX2VudHJ5LT5wYXRoLCBQQVJUX0RVTVAsIHZhcl9sZW4pOworICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfaHJoZmlsZXN5c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyBpbnQgICAgICBIUkZTX2luZGV4OworCit2b2lkCitJbml0X0hSX0ZpbGVTeXModm9pZCkKK3sKKyAgICBuZXRzbm1wX2NhY2hlICpjID0gbmV0c25tcF9mc3lzX2dldF9jYWNoZSgpOworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCggYyApOworCisgICAgSFJGU19lbnRyeSA9IE5VTEw7CisgICAgSFJGU19pbmRleCA9IDA7Cit9CisKK2ludAorR2V0X05leHRfSFJfRmlsZVN5cyh2b2lkKQoreworICAgIGlmICggSFJGU19lbnRyeSApIHsKKyAgICAgICAgSFJGU19lbnRyeSA9IG5ldHNubXBfZnN5c19nZXRfbmV4dCggSFJGU19lbnRyeSApOworICAgIH0gZWxzZSB7ICAgICAKKyAgICAgICAgSFJGU19lbnRyeSA9IG5ldHNubXBfZnN5c19nZXRfZmlyc3QoKTsKKyAgICB9CisgICAgLyogU2tpcCAiaW5hY3RpdmUiIGVudHJpZXMgKi8KKyAgICB3aGlsZSAoIEhSRlNfZW50cnkgJiYgIShIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19BQ1RJVkUpKQorICAgICAgICBIUkZTX2VudHJ5ID0gbmV0c25tcF9mc3lzX2dldF9uZXh0KCBIUkZTX2VudHJ5ICk7CisKKyAgICBIUkZTX2luZGV4ID0gKEhSRlNfZW50cnkgPyBIUkZTX2VudHJ5LT5pZHgub2lkc1swXSA6IC0xICk7CisgICAgcmV0dXJuIEhSRlNfaW5kZXg7Cit9CisKKworCitzdGF0aWMgdV9jaGFyICAqCit3aGVuX2R1bXBlZChjaGFyICpmaWxlc3lzLCBpbnQgbGV2ZWwsIHNpemVfdCAqIGxlbmd0aCkKK3sKKyAgICB0aW1lX3QgICAgICAgICAgZHVtcGRhdGUgPSAwLCB0bXA7CisgICAgRklMRSAgICAgICAgICAgKmR1bXBfZnA7CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgKmNwMSwgKmNwMiwgKmNwMzsKKworICAgIC8qCisgICAgICogTG9vayBmb3IgdGhlIHJlbGV2ZW50IGVudHJpZXMgaW4gL2V0Yy9kdW1wZGF0ZXMKKyAgICAgKgorICAgICAqIFRoaXMgaXMgY29tcGxpY2F0ZWQgYnkgdGhlIGZhY3QgdGhhdCBkaXNrcyBhcmUKKyAgICAgKiAgIG1vdW50ZWQgdXNpbmcgYmxvY2sgZGV2aWNlcywgYnV0IGR1bXBzIGFyZQorICAgICAqICAgZG9uZSB2aWEgdGhlIHJhdyBjaGFyYWN0ZXIgZGV2aWNlcy4KKyAgICAgKiBUaHVzIHRoZSBkZXZpY2UgbmFtZXMgaW4gL2V0Yy9kdW1wZGF0ZXMgYW5kCisgICAgICogICAvZXRjL21udHRhYiBkb24ndCBtYXRjaC4KKyAgICAgKiAgIFRoZXNlIGNvbXBhcmlzb25zIGFyZSB0aGVyZWZvcmUgbWFkZSB1c2luZyB0aGUKKyAgICAgKiAgIGZpbmFsIHBvcnRpb24gb2YgdGhlIGRldmljZSBuYW1lIG9ubHkuCisgICAgICovCisKKyAgICBpZiAoKmZpbGVzeXMgPT0gJ1wwJykgICAgICAgLyogTm8gZmlsZXN5c3RlbSBuYW1lPyAqLworICAgICAgICByZXR1cm4gZGF0ZV9uX3RpbWUoTlVMTCwgbGVuZ3RoKTsKKyAgICBjcDEgPSBzdHJyY2hyKGZpbGVzeXMsICcvJyk7ICAgICAgICAvKiBGaW5kIHRoZSBsYXN0IGVsZW1lbnQgb2YgdGhlIGN1cnJlbnQgRlMgKi8KKworICAgIGlmIChjcDEgPT0gTlVMTCkKKyAgICAgICAgY3AxID0gZmlsZXN5czsKKworICAgIGlmICgoZHVtcF9mcCA9IGZvcGVuKCIvZXRjL2R1bXBkYXRlcyIsICJyIikpID09IE5VTEwpCisgICAgICAgIHJldHVybiBkYXRlX25fdGltZShOVUxMLCBsZW5ndGgpOworCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZHVtcF9mcCkgIT0gTlVMTCkgeworICAgICAgICBjcDIgPSBzdHJjaHIobGluZSwgJyAnKTsgICAgICAgIC8qIFN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGRldmljZSBuYW1lIG9ubHkgKi8KKyAgICAgICAgaWYgKGNwMiAhPSBOVUxMKSB7CisgICAgICAgICAgICAqY3AyID0gJ1wwJzsKKyAgICAgICAgICAgIGNwMyA9IHN0cnJjaHIobGluZSwgJy8nKTsgICAvKiBhbmQgZmluZCB0aGUgbGFzdCBlbGVtZW50ICovCisgICAgICAgICAgICBpZiAoY3AzID09IE5VTEwpCisgICAgICAgICAgICAgICAgY3AzID0gbGluZTsKKworICAgICAgICAgICAgaWYgKHN0cmNtcChjcDEsIGNwMykgIT0gMCkgIC8qIFdyb25nIEZTICovCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICsrY3AyOworICAgICAgICAgICAgd2hpbGUgKGlzc3BhY2UoMHhGRiAmICpjcDIpKQorICAgICAgICAgICAgICAgICsrY3AyOyAgICAgICAgICAvKiBOb3cgZmluZCB0aGUgZHVtcCBsZXZlbCAqLworCisgICAgICAgICAgICBpZiAobGV2ZWwgPT0gRlVMTF9EVU1QKSB7CisgICAgICAgICAgICAgICAgaWYgKCooY3AyKyspICE9ICcwJykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gcGFydGlhbCBkdW1wcyAqLworICAgICAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKDB4RkYgJiAqY3AyKSkKKyAgICAgICAgICAgICAgICAgICAgKytjcDI7CisKKyAgICAgICAgICAgICAgICBkdW1wZGF0ZSA9IGN0aW1lX3RvX3RpbWV0KGNwMik7CisgICAgICAgICAgICAgICAgZmNsb3NlKGR1bXBfZnApOworICAgICAgICAgICAgICAgIHJldHVybiBkYXRlX25fdGltZSgmZHVtcGRhdGUsIGxlbmd0aCk7CisgICAgICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgIC8qIFBhcnRpYWwgRHVtcCAqLworICAgICAgICAgICAgICAgIGlmICgqKGNwMisrKSA9PSAnMCcpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIE5vdCBpbnRlcmVzdGVkIGluIGZ1bGwgZHVtcHMgKi8KKyAgICAgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgweEZGICYgKmNwMikpCisgICAgICAgICAgICAgICAgICAgICsrY3AyOworCisgICAgICAgICAgICAgICAgdG1wID0gY3RpbWVfdG9fdGltZXQoY3AyKTsKKyAgICAgICAgICAgICAgICBpZiAodG1wID4gZHVtcGRhdGUpCisgICAgICAgICAgICAgICAgICAgIGR1bXBkYXRlID0gdG1wOyAgICAgLyogUmVtZW1iZXIgdGhlICdsYXRlc3QnIHBhcnRpYWwgZHVtcCAqLworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZmNsb3NlKGR1bXBfZnApOworCisgICAgcmV0dXJuIGRhdGVfbl90aW1lKCZkdW1wZGF0ZSwgbGVuZ3RoKTsKK30KKworCisjZGVmaW5lIFJBV19ERVZJQ0VfUFJFRklYCSIvZGV2L3Jkc2siCisjZGVmaW5lIENPT0tFRF9ERVZJQ0VfUFJFRklYCSIvZGV2L2RzayIKKworY2hhciAgICAgICAgICAgKgorY29va19kZXZpY2UoY2hhciAqZGV2KQoreworICAgIHN0YXRpYyBjaGFyICAgICBjb29rZWRfZGV2W1NOTVBfTUFYUEFUSCsxXTsKKworICAgIGlmICghc3RybmNtcChkZXYsIFJBV19ERVZJQ0VfUFJFRklYLCBzdHJsZW4oUkFXX0RFVklDRV9QUkVGSVgpKSkgeworICAgICAgICBzdHJsY3B5KGNvb2tlZF9kZXYsIENPT0tFRF9ERVZJQ0VfUFJFRklYLCBzaXplb2YoY29va2VkX2RldikpOworICAgICAgICBzdHJsY2F0KGNvb2tlZF9kZXYsIGRldiArIHN0cmxlbihSQVdfREVWSUNFX1BSRUZJWCksCisgICAgICAgICAgICAgICAgc2l6ZW9mKGNvb2tlZF9kZXYpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBzdHJsY3B5KGNvb2tlZF9kZXYsIGRldiwgc2l6ZW9mKGNvb2tlZF9kZXYpKTsKKyAgICB9CisKKyAgICByZXR1cm4gY29va2VkX2RldjsKK30KKworCitpbnQKK0dldF9GU0luZGV4KGNoYXIgKmRldikKK3sKKyAgICBuZXRzbm1wX2ZzeXNfaW5mbyAqZnN5czsKKworICAgIGZzeXMgPSBuZXRzbm1wX2ZzeXNfYnlfZGV2aWNlKCBkZXYsIE5FVFNOTVBfRlNfRklORF9FWElTVCApOworICAgIHJldHVybiAoZnN5cyA/IGZzeXMtPmlkeC5vaWRzWzBdIDogLTEgKTsKK30KKworbG9uZworR2V0X0ZTU2l6ZShjaGFyICpkZXYpCit7CisgICAgbmV0c25tcF9mc3lzX2luZm8gKmZzeXM7CisKKyAgICBmc3lzID0gbmV0c25tcF9mc3lzX2J5X2RldmljZSggZGV2LCBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgKTsKKyAgICBpZiAoIGZzeXMgKSAgICAgICAKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfZnN5c19zaXplKCBmc3lzICk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gLTE7Cit9CisKK2ludAorQ2hlY2tfSFJfRmlsZVN5c19ORlMgKHZvaWQpCit7CisgICAgcmV0dXJuIChIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUpID8gMSA6IDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9maWxlc3lzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY4OTE3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX2ZpbGVzeXMuaApAQCAtMCwwICsxLDE5IEBACisvKgorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIGZpbGUgc3lzdGVtIGRldmljZSBncm91cCBpbnRlcmZhY2UgKEhBTCByZXdyaXRlKSAtIGhyaF9maWxlc3lzLmgKKyAqCisgKi8KKyNpZm5kZWYgX01JQkdST1VQX0hSRlNZU19ICisjZGVmaW5lIF9NSUJHUk9VUF9IUkZTWVNfSAorCitleHRlcm4gdm9pZCAgICAgaW5pdF9ocmhfZmlsZXN5cyh2b2lkKTsKK2V4dGVybiB2b2lkICAgICBJbml0X0hSX0ZpbGVTeXModm9pZCk7CitleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfaHJoZmlsZXN5czsKK2V4dGVybiBpbnQgICAgICBHZXRfTmV4dF9IUl9GaWxlU3lzKHZvaWQpOworZXh0ZXJuIGludCAgICAgIENoZWNrX0hSX0ZpbGVTeXNfTkZTKHZvaWQpOworCitleHRlcm4gaW50ICAgICAgR2V0X0ZTSW5kZXgoY2hhciAqKTsKK2V4dGVybiBsb25nICAgICBHZXRfRlNTaXplKGNoYXIgKik7ICAgICAvKiBUZW1wb3JhcnkgKi8KKworY29uZmlnX2V4Y2x1ZGUoIGhvc3QvaHJfZmlsZXN5cyApCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0hSRlNZU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMgYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2EyZjg1NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuYwpAQCAtMCwwICsxLDUyMCBAQAorLyoKKyAqICBIb3N0IFJlc291cmNlcyBNSUIgLSBzdG9yYWdlIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gaHJoX3N0b3JhZ2UuYworICoKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL21lbW9yeS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaD4KKyNpbmNsdWRlICJob3N0X3Jlcy5oIgorI2luY2x1ZGUgImhyaF9maWxlc3lzLmgiCisjaW5jbHVkZSAiaHJoX3N0b3JhZ2UuaCIKKyNpbmNsdWRlICJocl9kaXNrLmgiCisjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpZmRlZiBXSU4zMgorIyAgaW5jbHVkZSA8d2luZG93cy5oPgorIyAgaW5jbHVkZSA8ZXJybm8uaD4KKyMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgorIyBlbHNlCisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbmRpZgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPgorCisjZGVmaW5lIEhSU1RPUkVfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKKwkgKiAgIGFuZCBpbnRlcm5hbCBmb3J3YXJkIGRlY2xhcmF0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KKworCitleHRlcm4gbmV0c25tcF9mc3lzX2luZm8gKkhSRlNfZW50cnk7CisKK3N0YXRpYyB2b2lkIHBhcnNlX3N0b3JhZ2VfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKworICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCisJICoKKwkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworaW50ICAgICAgICAgICAgIEdldF9OZXh0X0hSX1N0b3JlKHZvaWQpOwordm9pZCAgICAgICAgICAgIEluaXRfSFJfU3RvcmUodm9pZCk7CitpbnQgICAgICAgICAgICAgaGVhZGVyX2hyc3RvcmUoc3RydWN0IHZhcmlhYmxlICosIG9pZCAqLCBzaXplX3QgKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqLCBXcml0ZU1ldGhvZCAqKik7Cit2b2lkKiAgICAgICAgICAgaGVhZGVyX2hyc3RvcmVFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaGFuZGxlX21lbXNpemU7CisKKworI2RlZmluZQlIUlNUT1JFX01FTVNJWkUJCTEKKyNkZWZpbmUJSFJTVE9SRV9JTkRFWAkJMgorI2RlZmluZQlIUlNUT1JFX1RZUEUJCTMKKyNkZWZpbmUJSFJTVE9SRV9ERVNDUgkJNAorI2RlZmluZQlIUlNUT1JFX1VOSVRTCQk1CisjZGVmaW5lCUhSU1RPUkVfU0laRQkJNgorI2RlZmluZQlIUlNUT1JFX1VTRUQJCTcKKyNkZWZpbmUJSFJTVE9SRV9GQUlMUwkJOAorCitzdHJ1Y3QgdmFyaWFibGUyIGhyc3RvcmVfdmFyaWFibGVzW10gPSB7CisgICAge0hSU1RPUkVfSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHsxfX0sCisgICAge0hSU1RPUkVfVFlQRSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Mn19LAorICAgIHtIUlNUT1JFX0RFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHszfX0sCisgICAge0hSU1RPUkVfVU5JVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2hyc3RvcmUsIDEsIHs0fX0sCisgICAge0hSU1RPUkVfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaHJzdG9yZSwgMSwgezV9fSwKKyAgICB7SFJTVE9SRV9VU0VELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7Nn19LAorICAgIHtIUlNUT1JFX0ZBSUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9ocnN0b3JlLCAxLCB7N319Cit9Oworb2lkICAgICAgICAgICAgIGhyc3RvcmVfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiB9Oworb2lkICAgICAgICAgICAgIGhyTWVtb3J5U2l6ZV9vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMiB9Oworb2lkICAgICAgICAgICAgIGhyU3RvcmFnZVRhYmxlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMywgMSB9OworCisKK3ZvaWQKK2luaXRfaHJoX3N0b3JhZ2Uodm9pZCkKK3sKKyAgICBjaGFyICphcHBuYW1lOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIoCisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJob3N0L2hyTWVtb3J5U2l6ZSIsIGhhbmRsZV9tZW1zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaHJNZW1vcnlTaXplX29pZCwgT0lEX0xFTkdUSChock1lbW9yeVNpemVfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSk7CisgICAgUkVHSVNURVJfTUlCKCJob3N0L2hyX3N0b3JhZ2UiLCBocnN0b3JlX3ZhcmlhYmxlcywgdmFyaWFibGUyLAorICAgICAgICAgICAgICAgICBoclN0b3JhZ2VUYWJsZV9vaWQpOworCisgICAgYXBwbmFtZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwbmFtZSwgInNraXBORlNJbkhvc3RSZXNvdXJjZXMiLCAKKwkJCSAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorCQkJICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUyk7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgYXBwbmFtZSwgInJlYWxTdG9yYWdlVW5pdHMiLAorICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9SRUFMU1RPUkFHRVVOSVRTKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzdG9yYWdlVXNlTkZTIiwgcGFyc2Vfc3RvcmFnZV9jb25maWcsIE5VTEwsCisJIjEgfCAyXHRcdCgxID0gZW5hYmxlLCAyID0gZGlzYWJsZSkiKTsKK30KKworc3RhdGljIGludCBzdG9yYWdlVXNlTkZTID0gMTsJLyogRGVmYXVsdCB0byByZXBvcnRpbmcgTkZTIG1vdW50cyBhcyBOZXR3b3JrRGlzayAqLworCitzdGF0aWMgdm9pZAorcGFyc2Vfc3RvcmFnZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisgICAgY2hhciAqdmFsOworICAgIGludCBpdmFsOworICAgIGNoYXIgKnN0OworCisgICAgdmFsID0gc3RydG9rX3IoY3B0ciwgIiBcdCIsICZzdCk7CisgICAgaWYgKCF2YWwpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiTWlzc2luZyBGTEFHIHBhcmFtZXRlciBpbiBzdG9yYWdlVXNlTkZTIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaXZhbCA9IGF0b2kodmFsKTsKKyAgICBpZiAoaXZhbCA8IDEgfHwgaXZhbCA+IDIpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigic3RvcmFnZVVzZU5GUyBtdXN0IGJlIDEgb3IgMiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHN0b3JhZ2VVc2VORlMgPSAoaXZhbCA9PSAxKSA/IDEgOiAwOworfQorCisvKgorICogaGVhZGVyX2hyc3RvcmVFbnRyeSguLi4KKyAqIEFyZ3VtZW50czoKKyAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCisgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCisgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKKyAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCisgKiB3cml0ZV9tZXRob2QKKyAqIAorICovCisKK3ZvaWQgKgoraGVhZGVyX2hyc3RvcmVFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworI2RlZmluZSBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RICTExCisgICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOworICAgIGludCAgICAgICAgICAgICBzdG9yYWdlX2lkeCwgTG93SW5kZXggPSAtMTsKKyAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OworICAgIGludCAgICAgICAgICAgICAgICAgIGlkeCA9IC0xOworICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbSAgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoImhvc3QvaHJfc3RvcmFnZSIsICJ2YXJfaHJzdG9yZUVudHJ5OiByZXF1ZXN0ICIpKTsKKyAgICBERUJVR01TR09JRCgoImhvc3QvaHJfc3RvcmFnZSIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgZXhhY3Q9JWRcbiIsIGV4YWN0KSk7CisKKyAgICBtZW1jcHkoKGNoYXIgKikgbmV3bmFtZSwgKGNoYXIgKikgdnAtPm5hbWUsCisgICAgICAgICAgIChpbnQpIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOworICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgdnAtPm5hbWUsIHZwLT5uYW1lbGVuKTsKKworICAgIERFQlVHTVNHVEwoKCJob3N0L2hyX3N0b3JhZ2UiLCAidmFyX2hyc3RvcmVFbnRyeTogY29tcGFyZSAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJob3N0L2hyX3N0b3JhZ2UiLCB2cC0+bmFtZSwgdnAtPm5hbWVsZW4pKTsKKyAgICBERUJVR01TRygoImhvc3QvaHJfc3RvcmFnZSIsICIgPT4gJWRcbiIsIHJlc3VsdCkpOworCisKKyAgICBpZiAocmVzdWx0IDwgMCB8fAorICAgICAgICAqbGVuZ3RoIDw9IEhSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEggKSB7CisgICAgICAgLyoKKyAgICAgICAgKiBSZXF1ZXN0ZWQgT0lEIHRvbyBlYXJseSBvciB0b28gc2hvcnQgdG8gcmVmZXIKKyAgICAgICAgKiAgIHRvIGEgdmFsaWQgcm93IChmb3IgdGhlIGN1cnJlbnQgY29sdW1uIG9iamVjdCkuCisgICAgICAgICogR0VUIHJlcXVlc3RzIHNob3VsZCBmYWlsLCBHRVRORVhUIHJlcXVlc3RzCisgICAgICAgICogICBzaG91bGQgdXNlIHRoZSBmaXJzdCByb3cuCisgICAgICAgICovCisgICAgICAgIGlmICggZXhhY3QgKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKKyAgICAgICAgbWVtID0gbmV0c25tcF9tZW1vcnlfZ2V0X2ZpcnN0KCAwICk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBPdGhlcndpc2UsIHJldHJpZXZlIHRoZSByZXF1ZXN0ZWQKKyAgICAgICAgICogIChvciBmb2xsb3dpbmcpIHJvdyBhcyBhcHByb3ByaWF0ZS4KKyAgICAgICAgICovCisgICAgICAgIGlmICggZXhhY3QgJiYgKmxlbmd0aCA+IEhSU1RPUkVfRU5UUllfTkFNRV9MRU5HVEgrMSApCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAvKiBUb28gbG9uZyBmb3IgYSB2YWxpZCBpbnN0YW5jZSAqLworICAgICAgICBpZHggPSBuYW1lWyBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RIIF07CisgICAgICAgIGlmICggaWR4IDwgTkVUU05NUF9NRU1fVFlQRV9NQVggKSB7CisgICAgICAgICAgICBuZXRzbm1wX21lbW9yeV9sb2FkKCk7CisgICAgICAgICAgICBtZW0gPSAoIGV4YWN0ID8gbmV0c25tcF9tZW1vcnlfZ2V0X2J5SWR4KCBpZHgsIDAgKSA6CisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtb3J5X2dldF9uZXh0X2J5SWR4KCBpZHgsIDAgKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoaXMgbWF0Y2hlZCBhIG1lbW9yeS1iYXNlZCBlbnRyeSwgdGhlbgorICAgICAqICAgIHVwZGF0ZSB0aGUgT0lEIHBhcmFtZXRlcihzKSBmb3IgR0VUTkVYVCByZXF1ZXN0cy4KKyAgICAgKi8KKyAgICBpZiAoIG1lbSApIHsKKyAgICAgICAgaWYgKCAhZXhhY3QgKSB7CisgICAgICAgICAgICBuZXduYW1lWyBIUlNUT1JFX0VOVFJZX05BTUVfTEVOR1RIIF0gPSBtZW0tPmlkeDsKKyAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAorICAgICAgICAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKgorICAgICAqIElmIHRoaXMgZGlkbid0IG1hdGNoIGEgbWVtb3J5LWJhc2VkIGVudHJ5LAorICAgICAqICAgdGhlbiBjb25zaWRlciB0aGUgZGlzay1iYXNlZCBzdG9yYWdlLgorICAgICAqLworICAgIGVsc2UgeworICAgICAgICBJbml0X0hSX1N0b3JlKCk7CisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHN0b3JhZ2VfaWR4ID0gR2V0X05leHRfSFJfU3RvcmUoKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIihpbmRleCAlZCAuLi4uIiwgc3RvcmFnZV9pZHgpKTsKKyAgICAgICAgICAgIGlmIChzdG9yYWdlX2lkeCA9PSAtMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIG5ld25hbWVbSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSF0gPSBzdG9yYWdlX2lkeDsKKyAgICAgICAgICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmV3bmFtZSwgKmxlbmd0aCkpOworICAgICAgICAgICAgREVCVUdNU0coKCJob3N0L2hyX3N0b3JhZ2UiLCAiXG4iKSk7CisgICAgICAgICAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7CisgICAgICAgICAgICBpZiAoZXhhY3QgJiYgKHJlc3VsdCA9PSAwKSkgeworICAgICAgICAgICAgICAgIExvd0luZGV4ID0gc3RvcmFnZV9pZHg7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTYXZlIHN0b3JhZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCghZXhhY3QgJiYgKHJlc3VsdCA8IDApKSAmJgorICAgICAgICAgICAgICAgIChMb3dJbmRleCA9PSAtMSB8fCBzdG9yYWdlX2lkeCA8IExvd0luZGV4KSkgeworICAgICAgICAgICAgICAgIExvd0luZGV4ID0gc3RvcmFnZV9pZHg7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTYXZlIHN0b3JhZ2Ugc3RhdHVzIGluZm9ybWF0aW9uIAorICAgICAgICAgICAgICAgICAqLworI2lmZGVmIEhSU1RPUkVfTU9OT1RPTklDQUxMWV9JTkNSRUFTSU5HCisgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoIExvd0luZGV4ICE9IC0xICkgeworICAgICAgICAgICAgaWYgKCAhZXhhY3QgKSB7CisgICAgICAgICAgICAgICAgbmV3bmFtZVsgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSCBdID0gTG93SW5kZXg7CisgICAgICAgICAgICAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW0gPSAobmV0c25tcF9tZW1vcnlfaW5mbyopMHhmZmZmZmZmZjsgICAvKiBUbyBpbmRpY2F0ZSAnc3VjY2VzcycgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CisgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KKworICAgIC8qCisgICAgICogIC4uLiBhbmQgcmV0dXJuIHRoZSBhcHByb3ByaWF0ZSByb3cKKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgiaG9zdC9ocl9zdG9yYWdlIiwgInZhcl9ocnN0b3JlRW50cnk6IHByb2Nlc3MgIikpOworICAgIERFQlVHTVNHT0lEKCgiaG9zdC9ocl9zdG9yYWdlIiwgbmFtZSwgKmxlbmd0aCkpOworICAgIERFQlVHTVNHKCgiaG9zdC9ocl9zdG9yYWdlIiwgIiAoJXApXG4iLCBtZW0pKTsKKyAgICByZXR1cm4gKHZvaWQqKW1lbTsKK30KKworb2lkICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyNSwgMiwgMSwgMSB9OyAgLyogaHJTdG9yYWdlT3RoZXIgKi8KK2ludCAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfbGVuID0KKyAgICBzaXplb2Yoc3RvcmFnZV90eXBlX2lkKSAvIHNpemVvZihzdG9yYWdlX3R5cGVfaWRbMF0pOworCisgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKKwkgKgorCSAqICBTeXN0ZW0gc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCisJICoKKwkgKioqKioqKioqKioqKioqKioqKioqLworCitpbnQKK2hhbmRsZV9tZW1zaXplKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9tZW1vcnlfaW5mbyAqbWVtX2luZm87CisgICAgaW50IHZhbDsKKworICAgIC8qCisgICAgICogV2UganVzdCBuZWVkIHRvIGhhbmRsZSB2YWxpZCBHRVQgcmVxdWVzdHMsIGFzIGludmFsaWQgaW5zdGFuY2VzCisgICAgICogICBhcmUgcmVqZWN0ZWQgYXV0b21hdGljYWxseSwgYW5kICh2YWxpZCkgR0VUTkVYVCByZXF1ZXN0cyBhcmUKKyAgICAgKiAgIGNvbnZlcnRlZCBpbnRvIHRoZSBhcHByb3ByaWF0ZSBHRVQgcmVxdWVzdC4KKyAgICAgKgorICAgICAqIFdlIGFsc28gb25seSBldmVyIHJlY2VpdmUgb25lIHJlcXVlc3QgYXQgYSB0aW1lLgorICAgICAqLworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgIG5ldHNubXBfbWVtb3J5X2xvYWQoKTsKKyAgICAgICAgbWVtX2luZm8gPSBuZXRzbm1wX21lbW9yeV9nZXRfYnlJZHgoIE5FVFNOTVBfTUVNX1RZUEVfUEhZU01FTSwgMCApOworICAgICAgICBpZiAoICFtZW1faW5mbyB8fCBtZW1faW5mby0+c2l6ZSA9PSAtMSB8fCBtZW1faW5mby0+dW5pdHMgPT0gLTEgKQorICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfTk9TVUNIT0JKRUNUICk7CisJZWxzZSB7CisgICAgICAgICAgICB2YWwgID0gIG1lbV9pbmZvLT5zaXplOyAgICAgLyogbWVtdG90YWwgKi8KKyAgICAgICAgICAgIHZhbCAqPSAobWVtX2luZm8tPnVuaXRzLzEwMjQpOworICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmdmFsLCBzaXplb2YodmFsKSk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKgorICAgICAgICAgKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIHNvIHRoaXMgaXMgYSByZWFsbHkgYmFkIGVycm9yIAorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9tZW1zaXplXG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCit1X2NoYXIgICAgICAgICAqCit2YXJfaHJzdG9yZShzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIGludCAgICAgICAgICAgICBzdG9yZV9pZHggPSAwOworICAgIHN0YXRpYyBjaGFyICAgICBzdHJpbmdbMTAyNF07CisgICAgdm9pZCAgICAgICAgICAgICAgICAqcHRyOworICAgIG5ldHNubXBfbWVtb3J5X2luZm8gKm1lbSA9IE5VTEw7CisKK3JlYWxseV90cnlfbmV4dDoKKwlwdHIgPSBoZWFkZXJfaHJzdG9yZUVudHJ5KHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLAorCQkJCQl3cml0ZV9tZXRob2QpOworCWlmIChwdHIgPT0gTlVMTCkKKwkgICAgcmV0dXJuIE5VTEw7CisKKyAgICAgICAgc3RvcmVfaWR4ID0gbmFtZVsgSFJTVE9SRV9FTlRSWV9OQU1FX0xFTkdUSCBdOworICAgICAgICBpZiAoSFJGU19lbnRyeSAmJgorCSAgICBzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCAmJgorICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1NLSVBORlNJTkhPU1RSRVNPVVJDRVMpICYmCisgICAgICAgICAgICBDaGVja19IUl9GaWxlU3lzX05GUygpKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmIChzdG9yZV9pZHggPD0gTkVUU05NUF9NRU1fVFlQRV9NQVggKSB7CisJICAgIG1lbSA9IChuZXRzbm1wX21lbW9yeV9pbmZvKilwdHI7CisgICAgICAgIH0KKworCisKKyAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworICAgIGNhc2UgSFJTVE9SRV9JTkRFWDoKKyAgICAgICAgbG9uZ19yZXR1cm4gPSBzdG9yZV9pZHg7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CisgICAgY2FzZSBIUlNUT1JFX1RZUEU6CisgICAgICAgIGlmIChzdG9yZV9pZHggPiBORVRTTk1QX01FTV9UWVBFX01BWCkKKyAgICAgICAgICAgIGlmIChIUkZTX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfRlNfRkxBR19SRU1PVEUgKQorICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSAxMDsgICAgIC8qIE5ldHdvcmsgRGlzayAqLworICAgICAgICAgICAgZWxzZSBpZiAoSFJGU19lbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfUkVNT1ZFICkKKyAgICAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbc3RvcmFnZV90eXBlX2xlbiAtIDFdID0gNTsgICAgICAvKiBSZW1vdmFibGUgRGlzayAqLworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHN0b3JhZ2VfdHlwZV9pZFtzdG9yYWdlX3R5cGVfbGVuIC0gMV0gPSA0OyAgICAgIC8qIEFzc3VtZSBmaXhlZCAqLworICAgICAgICBlbHNlCisgICAgICAgICAgICBzd2l0Y2ggKHN0b3JlX2lkeCkgeworICAgICAgICAgICAgY2FzZSBORVRTTk1QX01FTV9UWVBFX1BIWVNNRU06CisgICAgICAgICAgICBjYXNlIE5FVFNOTVBfTUVNX1RZUEVfVVNFUk1FTToKKyAgICAgICAgICAgICAgICBzdG9yYWdlX3R5cGVfaWRbc3RvcmFnZV90eXBlX2xlbiAtIDFdID0gMjsgICAgICAvKiBSQU0gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTkVUU05NUF9NRU1fVFlQRV9WSVJUTUVNOgorICAgICAgICAgICAgY2FzZSBORVRTTk1QX01FTV9UWVBFX1NXQVA6CisgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDM7ICAgICAgLyogVmlydHVhbCBNZW0gKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgc3RvcmFnZV90eXBlX2lkW3N0b3JhZ2VfdHlwZV9sZW4gLSAxXSA9IDE7ICAgICAgLyogT3RoZXIgKi8KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RvcmFnZV90eXBlX2lkKTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RvcmFnZV90eXBlX2lkOworICAgIGNhc2UgSFJTVE9SRV9ERVNDUjoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBzdHJsY3B5KHN0cmluZywgSFJGU19lbnRyeS0+cGF0aCwgc2l6ZW9mKHN0cmluZykpOworICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKKyAgICAgICAgICAgIHJldHVybiAodV9jaGFyICopIHN0cmluZzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmICggIW1lbSB8fCAhbWVtLT5kZXNjciApCisgICAgICAgICAgICAgICAgZ290byB0cnlfbmV4dDsKKyAgICAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKG1lbS0+ZGVzY3IpOworICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgbWVtLT5kZXNjcjsKKyAgICAgICAgfQorICAgIGNhc2UgSFJTVE9SRV9VTklUUzoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JFQUxTVE9SQUdFVU5JVFMpKQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dW5pdHMgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dW5pdHNfMzI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoICFtZW0gfHwgbWVtLT51bml0cyA9PSAtMSApCisgICAgICAgICAgICAgICAgZ290byB0cnlfbmV4dDsKKyAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gbWVtLT51bml0czsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJTVE9SRV9TSVpFOgorICAgICAgICBpZiAoc3RvcmVfaWR4ID4gTkVUU05NUF9NRU1fVFlQRV9NQVgpIHsKKyAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUkVBTFNUT1JBR0VVTklUUykpCisgICAgICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT5zaXplICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb25nX3JldHVybiA9IEhSRlNfZW50cnktPnNpemVfMzI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoICFtZW0gfHwgbWVtLT5zaXplID09IC0xICkKKyAgICAgICAgICAgICAgICBnb3RvIHRyeV9uZXh0OworICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBtZW0tPnNpemU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBjYXNlIEhSU1RPUkVfVVNFRDoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKSB7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JFQUxTVE9SQUdFVU5JVFMpKQorICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gSFJGU19lbnRyeS0+dXNlZCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBIUkZTX2VudHJ5LT51c2VkXzMyOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+c2l6ZSA9PSAtMSB8fCBtZW0tPmZyZWUgPT0gLTEgKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ5X25leHQ7CisgICAgICAgICAgICBsb25nX3JldHVybiA9IG1lbS0+c2l6ZSAtIG1lbS0+ZnJlZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOworICAgIGNhc2UgSFJTVE9SRV9GQUlMUzoKKyAgICAgICAgaWYgKHN0b3JlX2lkeCA+IE5FVFNOTVBfTUVNX1RZUEVfTUFYKQorI2lmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCisJICAgIGdvdG8gdHJ5X25leHQ7CisjZWxzZQorICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOworI2VuZGlmCisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKCAhbWVtIHx8IG1lbS0+b3RoZXIgPT0gLTEgKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ5X25leHQ7CisgICAgICAgICAgICBsb25nX3JldHVybiA9IG1lbS0+b3RoZXI7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX2hyc3RvcmVcbiIsCisgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKKworICB0cnlfbmV4dDoKKyAgICBpZiAoIWV4YWN0KQorICAgICAgICBnb3RvIHJlYWxseV90cnlfbmV4dDsKKworICAgIHJldHVybiBOVUxMOworfQorCisKKyAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgorCSAqCisJICogIEludGVybmFsIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucworCSAqCisJICoqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIGludCAgICAgIEhSU19pbmRleDsKKwordm9pZAorSW5pdF9IUl9TdG9yZSh2b2lkKQoreworICAgIEhSU19pbmRleCA9IDA7CisgICAgSW5pdF9IUl9GaWxlU3lzKCk7Cit9CisKK2ludAorR2V0X05leHRfSFJfU3RvcmUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIEZpbGUtYmFzZWQgc3RvcmFnZSAKKyAgICAgKi8KKwlmb3IgKDs7KSB7CisgICAgCUhSU19pbmRleCA9IEdldF9OZXh0X0hSX0ZpbGVTeXMoKTsKKwkJaWYgKEhSU19pbmRleCA+PSAwKSB7CisJCQlpZiAoIShuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorCQkJCQkJCU5FVFNOTVBfRFNfQUdFTlRfU0tJUE5GU0lOSE9TVFJFU09VUkNFUykgJiYgCisJCQkJCQlDaGVja19IUl9GaWxlU3lzX05GUygpKSkgeworCQkJCXJldHVybiBIUlNfaW5kZXggKyBORVRTTk1QX01FTV9UWVBFX01BWDsJCisJCQl9CisJCX0gZWxzZSB7CisJCQlyZXR1cm4gLTE7CisJCX0JCisJfQorfQorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmggYi9hZ2VudC9taWJncm91cC9ob3N0L2hyaF9zdG9yYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg3MjM0NQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2hvc3QvaHJoX3N0b3JhZ2UuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogIEhvc3QgUmVzb3VyY2VzIE1JQiAtIHN0b3JhZ2UgZ3JvdXAgaW50ZXJmYWNlIChIQUwgcmV3cml0ZSkgLSBocmhfc3RvcmFnZS5oCisgKgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9IUlNUT1JBR0VfSAorI2RlZmluZSBfTUlCR1JPVVBfSFJTVE9SQUdFX0gKKworY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvbWVtb3J5KQorY29uZmlnX3JlcXVpcmUoaGFyZHdhcmUvZnN5cykKK2NvbmZpZ19yZXF1aXJlKGhvc3QvaHJoX2ZpbGVzeXMpCisKK2NvbmZpZ19leGNsdWRlKCBob3N0L2hyX3N0b3JhZ2UgKQorCitleHRlcm4gdm9pZCAgICAgaW5pdF9ocmhfc3RvcmFnZSh2b2lkKTsKK2V4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9ocnN0b3JlOworCisKKyNkZWZpbmUJSFJTX1RZUEVfTUJVRgkJMQorI2RlZmluZQlIUlNfVFlQRV9NRU0JCTIKKyNkZWZpbmUJSFJTX1RZUEVfU1dBUAkJMworI2RlZmluZQlIUlNfVFlQRV9GSVhFRF9NQVgJMyAgICAgLyogdGhlIGxhcmdlc3QgZml4ZWQgdHlwZSAqLworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9IUlNUT1JBR0VfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaCBiL2FnZW50L21pYmdyb3VwL2hvc3RfcmVzLmgKaW5kZXggOGM5NTA5MC4uMWRiYTM4OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaG9zdF9yZXMuaAorKysgYi9hZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oCkBAIC0xNywxNiArMTcsMTYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC92YXJfc3RydWN0Lmg+CiAKLSNpZiBkZWZpbmVkKElGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgotI2lmIGRlZmluZWQgKFdJTjMyKSAmJiAhZGVmaW5lZCAoY3lnd2luKQotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlIC8qIFdJTjMyICovCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZgogI2lmZGVmIF9JX0RFRklORURfS0VSTkVMCiAjdW5kZWYgX0tFUk5FTAogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmMKaW5kZXggZDY1ZmFkMC4uMjZlMzFmYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuYwpAQCAtNCwxNSArNCwyNSBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgotI2luY2x1ZGUgImlmLW1pYi9pZlRhYmxlL2lmVGFibGVfY29uc3RhbnRzLmgiCi0jaW5jbHVkZSAiaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgogCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oIgorI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCIKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9hbGwsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZSwgaW50ZXJmYWNlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2VfYWNjZXNzX2VudHJ5X3NldF9hZG1pbl9zdGF0dXMsIGludGVyZmFjZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2xlZ2FjeSwgaW50ZXJmYWNlX2FsbCkKKworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0lOVEVSRkFDRV9BQ0NFU1NfRU5UUllfU0VUX0FETUlOX1NUQVRVUworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cykKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMgKi8KIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC0yNTAsOCArMjYwLDggQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgdG1wLm5hbWUgPSAoY2hhciAqKW5hbWU7Ci0gICAgcmV0dXJuIENPTlRBSU5FUl9GSU5EKGNvbnRhaW5lci0+bmV4dCwgJnRtcCk7CisgICAgdG1wLm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIG5hbWUpOworICAgIHJldHVybiAobmV0c25tcF9pbnRlcmZhY2VfZW50cnkqKUNPTlRBSU5FUl9GSU5EKGNvbnRhaW5lci0+bmV4dCwgJnRtcCk7CiB9CiAKIC8qKgpAQCAtMzM3LDYgKzM0Nyw3IEBACiAgICAgZnJlZShlbnRyeSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfTEVHQUNZCiAvKgogICogQmxlY2ggLSBiYWNrd2FyZHMgY29tcGF0aWJsZSBtaWJJSS9pbnRlcmZhY2VzIHN0eWxlIGludGVyZmFjZQogICogZnVuY3Rpb25zLCBzbyB3ZSBkb24ndCBoYXZlIHRvIHVwZGF0ZSBvbGRlciBtb2R1bGVzIHRvIHVzZQpAQCAtMzQ2LDMzICszNTcsMzMgQEAKICAgICAhIGRlZmluZWQoIE5FVFNOTVBfTk9fQkFDS1dBUkRTX0NPTVBBVEFCSUxJVFkgKQogCiBzdGF0aWMgbmV0c25tcF9pdGVyYXRvciAqaXQgPSBOVUxMOwotc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpjID0gTlVMTDsKLXN0YXRpYyBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqZSA9IE5VTEw7CitzdGF0aWMgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3cgPSBOVUxMOwogCiAvKioKLSAqIAorICogU2V0dXAgYW4gaXRlcmF0b3IgZm9yIHNjYW5uaW5nIHRoZSBpbnRlcmZhY2VzIHVzaW5nIHRoZSBjYWNoZWQgZW50cnkKKyAqIGZyb20gaWYtbWliL2lmVGFibGUuCiAgKi8KIHZvaWQKIEludGVyZmFjZV9TY2FuX0luaXQodm9pZCkKIHsKLSAgICAvKgotICAgICAqIGlmVGFibGUgY29udGFpbmVyIHNob3VsZG4ndCBjaGFuZ2UsIHNvIHdlIHNob3VsZG4nIGhhdmUgdG8KLSAgICAgKiByZS1mZXRjaCBpdCBldmVyeSB0aW1lLgotICAgICAqLwotICAgIGlmIChOVUxMICE9IGMpCi0gICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9jb250YWluZXJfZnJlZShjLCAwKTsKLQotICAgIGMgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnQgPSBOVUxMOworICAgIG5ldHNubXBfY2FjaGUgKmNhY2hlICAgID0gTlVMTDsgCiAgICAgCi0gICAgaWYgKE5VTEwgIT0gYykgeworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZChpZlRhYmxlX29pZCwgaWZUYWJsZV9vaWRfc2l6ZSk7CisgICAgaWYgKE5VTEwgIT0gY2FjaGUpIHsKKyAgICAgICAgbmV0c25tcF9jYWNoZV9jaGVja19hbmRfcmVsb2FkKGNhY2hlKTsKKyAgICAgICAgY29udCA9IChuZXRzbm1wX2NvbnRhaW5lciopIGNhY2hlLT5tYWdpYzsKKyAgICB9CisgICAgCisgICAgaWYgKE5VTEwgIT0gY29udCkgewogICAgICAgICBpZiAoTlVMTCAhPSBpdCkKICAgICAgICAgICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOwogICAgIAotICAgICAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihjKTsKKyAgICAgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1IoY29udCk7CiAgICAgfQogICAgCiAgICAgaWYgKE5VTEwgIT0gaXQpCi0gICAgICAgIGUgPSBJVEVSQVRPUl9GSVJTVChpdCk7CisgICAgICAgIHJvdyA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKUlURVJBVE9SX0ZJUlNUKGl0KTsKIH0KIAogaW50CkBAIC0zOTQsOSArNDA1LDEyIEBACiBJbnRlcmZhY2VfU2Nhbl9OZXh0SW50KGludCAqaW5kZXgsIGNoYXIgKm5hbWUsIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICoqZW50cnksCiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRjKQogewotICAgIGlmIChOVUxMID09IGUpCi0gICAgICAgIHJldHVybiAwOworICAgIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5KiBlID0gTlVMTDsKIAorICAgIGlmIChOVUxMID09IHJvdykKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgZSA9IHJvdy0+ZGF0YS5pZmVudHJ5OwogICAgIGlmKGluZGV4KQogICAgICAgICAqaW5kZXggPSBlLT5pbmRleDsKIApAQCAtNDA2LDEzICs0MjAsMTQgQEAKICAgICBpZiAoZW50cnkpCiAgICAgICAgICplbnRyeSA9IGU7CiAKLSAgICBlID0gSVRFUkFUT1JfTkVYVChpdCk7CisgICAgcm93ID0gKGlmVGFibGVfcm93cmVxX2N0eCopIElURVJBVE9SX05FWFQoaXQpOwogCiAgICAgcmV0dXJuIDE7CiB9CiAjZW5kaWYgLyogTkVUU05NUF9OT19CQUNLV0FSRFNfQ09NUEFUQUJJTElUWSAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0xFR0FDWSAqLwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMKIC8qKgogICoKICAqIEByZXR2YWwgMCAgIDogc3VjY2VzcwpAQCAtNDQxLDYgKzQ1Niw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQUNDRVNTX0VOVFJZX1NFVF9BRE1JTl9TVEFUVVMgKi8KIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCkBAIC00NTYsNiArNDcyLDcgQEAKICAgICAgICAgICAgICAgICAgICgoY29uc3QgbmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKikgcmhzKS0+bmFtZSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfSU5URVJGQUNFX05PQVJDSAogLyoqCiAgKi8KIHN0YXRpYyB2b2lkCkBAIC00NjMsMTMgKzQ4MCwxNCBAQAogewogICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9mcmVlKGVudHJ5KTsKIH0KKyNlbmRpZgogCiAvKioKICAqLwogc3RhdGljIHZvaWQKIF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X3NhdmVfbmFtZShjb25zdCBjaGFyICpuYW1lLCBvaWQgaW5kZXgpCiB7Ci0gICAgb2lkIHRtcDsKKyAgICBpbnQgdG1wOwogCiAgICAgaWYoTlVMTCA9PSBuYW1lKQogICAgICAgICByZXR1cm47CkBAIC00NzcsMTkgKzQ5NSwxNyBAQAogICAgIHRtcCA9IHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoImludGVyZmFjZXMiLCBuYW1lKTsKICAgICBpZiAodG1wID09IFNFX0RORSkgewogICAgICAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiaW50ZXJmYWNlcyIsIHN0cmR1cChuYW1lKSwgaW5kZXgpOwotICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwgInNhdmVkIGlmSW5kZXggJWQgZm9yICVzXG4iLAorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwKKyAgICAgICAgICAgICAgICAgICAgInNhdmVkIGlmSW5kZXggJSIgTkVUU05NUF9QUklvICJ1IGZvciAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG5hbWUpKTsKICAgICB9CiAgICAgZWxzZQotICAgICAgICBpZiAoaW5kZXggIT0gdG1wKSB7Ci0gICAgICAgICAgICBzdGF0aWMgaW50IGxvZ2dlZCA9IDA7Ci0gICAgICAgICAgICBpZiAoIWxvZ2dlZCkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJJZkluZGV4IG9mIGFuIGludGVyZmFjZSBjaGFuZ2VkLiBTdWNoICIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2VzIHdpbGwgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluIElGLU1JQi5cbiIpOwotICAgICAgICAgICAgICAgIGxvZ2dlZCA9IDE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTppZkluZGV4IiwgImluZGV4ICVkICE9IHRtcCBmb3IgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG5hbWUpKTsKKyAgICAgICAgaWYgKGluZGV4ICE9IChvaWQpdG1wKSB7CisgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJJZkluZGV4IG9mIGFuIGludGVyZmFjZSBjaGFuZ2VkLiBTdWNoICIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2VzIHdpbGwgYXBwZWFyIG11bHRpcGxlIHRpbWVzIGluIElGLU1JQi5cbiIpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmlmSW5kZXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgImluZGV4ICUiIE5FVFNOTVBfUFJJbyAidSAhPSB0bXAgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgsIG5hbWUpKTsKICAgICAgICAgfQogfQogCkBAIC01MzIsMzkgKzU0OCw3OCBAQAogICAgICAgICBtZW1jcHkocHJldl92YWxzLT5vbGRfc3RhdHMsICZwcmV2X3ZhbHMtPnN0YXRzLCBzaXplb2YocHJldl92YWxzLT5zdGF0cykpOwogICAgIH0KIAotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJ5dGVzLAorICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJ5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5pYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmlieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luT2N0ZXRzIHRvIDY0Yml0c1xuIikpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+bnNfZmxhZ3MgJiBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19DQUxDVUxBVEVfVUNBU1QpIHsKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5pYWxsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaWFsbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmlhbGwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBwYWNrZXQgY291bnQgdG8gNjRiaXRzXG4iKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+aXVjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luVWNhc3RQa3RzIHRvIDY0Yml0c1xuIikpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLml1Y2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMuaXVjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5pdWNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLmltY2FzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENJblVjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaW1jYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5pbWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmltY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luTXVsdGljYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuaWJjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5pYmNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPmliY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub2J5dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ0luQnJvYWRjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub2J5dGVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5vYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPm9ieXRlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub3VjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ091dE9jdGV0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub3VjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5vdWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPm91Y2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub21jYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ091dFVjYXN0UGt0cyB0byA2NGJpdHNcbiIpKTsKKworICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub21jYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5vbWNhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPm9tY2FzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMub2JjYXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsCisgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgaWZIQ091dE11bHRpY2FzdFBrdHMgdG8gNjRiaXRzXG4iKSk7CisKKyAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLm9iY2FzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfdmFscy0+c3RhdHMub2JjYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5vYmNhc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIGlmSENPdXRCcm9hZGNhc3RQa3RzIHRvIDY0Yml0c1xuIikpOworCiAgICAgLyoKICAgICAgKiBDb3B5IDMyIGJpdCBjb3VudGVycwogICAgICAqLwpAQCAtNTk2LDYgKzY1MSwyMyBAQAogfQogCiAvKioKKyAqIENhbGN1bGF0ZSBzdGF0cworICoKKyAqIEByZXR2YWwgIDAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfY2FsY3VsYXRlX3N0YXRzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZSIsICJjYWxjdWxhdGVfc3RhdHNcbiIpKTsKKyAgICBpZiAoZW50cnktPm5zX2ZsYWdzICYgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfQ0FMQ1VMQVRFX1VDQVNUKSB7CisgICAgICAgIHU2NFN1YnRyYWN0KCZlbnRyeS0+c3RhdHMuaWFsbCwgJmVudHJ5LT5zdGF0cy5pbWNhc3QsCisgICAgICAgICAgICAgICAgJmVudHJ5LT5zdGF0cy5pdWNhc3QpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoqCiAgKiBjb3B5IGludGVyZmFjZSBlbnRyeSBkYXRhIChhZnRlciBjaGVja2luZyBmb3IgY291bnRlciB3cmFwcykKICAqCiAgKiBAcmV0dmFsIC0yIDogbWFsbG9jIGZhaWxlZApAQCAtNjE3LDYgKzY4OSw3IEBACiAgICAgICogdXBkYXRlIHN0YXRzCiAgICAgICovCiAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X3VwZGF0ZV9zdGF0cyhsaHMsIHJocyk7CisgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2NhbGN1bGF0ZV9zdGF0cyhsaHMpOwogCiAgICAgLyoKICAgICAgKiB1cGRhdGUgZGF0YQpAQCAtNjI2LDggKzY5OSw3IEBACiAgICAgICAgKDAgPT0gc3RyY21wKGxocy0+ZGVzY3IsIHJocy0+ZGVzY3IpKSkKICAgICAgICAgOwogICAgIGVsc2UgewotICAgICAgICBpZiAoTlVMTCAhPSBsaHMtPmRlc2NyKQotICAgICAgICAgICAgU05NUF9GUkVFKGxocy0+ZGVzY3IpOworICAgICAgICBTTk1QX0ZSRUUobGhzLT5kZXNjcik7CiAgICAgICAgIGlmIChyaHMtPmRlc2NyKSB7CiAgICAgICAgICAgICBsaHMtPmRlc2NyID0gc3RyZHVwKHJocy0+ZGVzY3IpOwogICAgICAgICAgICAgaWYoTlVMTCA9PSBsaHMtPmRlc2NyKQpAQCAtNjU1LDEwICs3MjcsOSBAQAogICAgICAgICBpZihyaHMtPnBhZGRyX2xlbikKICAgICAgICAgICAgIG1lbWNweShsaHMtPnBhZGRyLHJocy0+cGFkZHIscmhzLT5wYWRkcl9sZW4pOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChOVUxMICE9IGxocy0+cGFkZHIpCi0gICAgICAgICAgICBTTk1QX0ZSRUUobGhzLT5wYWRkcik7CisgICAgICAgIFNOTVBfRlJFRShsaHMtPnBhZGRyKTsKICAgICAgICAgaWYgKHJocy0+cGFkZHIpIHsKLSAgICAgICAgICAgIGxocy0+cGFkZHIgPSBtYWxsb2MocmhzLT5wYWRkcl9sZW4pOworICAgICAgICAgICAgbGhzLT5wYWRkciA9IChjaGFyKiltYWxsb2MocmhzLT5wYWRkcl9sZW4pOwogICAgICAgICAgICAgaWYoTlVMTCA9PSBsaHMtPnBhZGRyKQogICAgICAgICAgICAgICAgIHJldHVybiAtMjsKICAgICAgICAgICAgIG1lbWNweShsaHMtPnBhZGRyLHJocy0+cGFkZHIscmhzLT5wYWRkcl9sZW4pOwpAQCAtNzk2LDcgKzg2Nyw3IEBACiAgICAgbmV0c25tcF9jb25mX2lmX2xpc3QgICAqaWZfcHRyID0gY29uZl9saXN0LCAqaWZfbmV4dDsKICAgICB3aGlsZSAoaWZfcHRyKSB7CiAgICAgICAgIGlmX25leHQgPSBpZl9wdHItPm5leHQ7Ci0gICAgICAgIGZyZWUoaWZfcHRyLT5uYW1lKTsKKyAgICAgICAgZnJlZShORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIGlmX3B0ci0+bmFtZSkpOwogICAgICAgICBmcmVlKGlmX3B0cik7CiAgICAgICAgIGlmX3B0ciA9IGlmX25leHQ7CiAgICAgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCmluZGV4IDI1NmQwNDcuLjM1M2IyNTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAorKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKQEAgLTMyLDEyICszMiwxMyBAQAogCiAjICAgaWYgZGVmaW5lZCggbGludXggKQogCisgICAgY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKICAgICBjb25maWdfcmVxdWlyZShpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4KQogICAgIGNvbmZpZ19yZXF1aXJlKGlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwpCiAKICMgICBlbGlmIGRlZmluZWQoIG9wZW5ic2QzICkgfHwgXAogICAgICAgICAgZGVmaW5lZCggZnJlZWJzZDQgKSB8fCBkZWZpbmVkKCBmcmVlYnNkNSApIHx8IGRlZmluZWQoIGZyZWVic2Q2ICkgfHwgXAotICAgICAgICAgZGVmaW5lZCAoZGFyd2luKSAgICB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKQorICAgICAgICAgZGVmaW5lZCggZGFyd2luICkgICB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKSB8fCBkZWZpbmVkKCBuZXRic2QxICkKIAogICAgIGNvbmZpZ19yZXF1aXJlKGlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsKQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmMKaW5kZXggNTcwOGM2NC4uZGIyYzI0NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9pb2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKICNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgpAQCAtMTMsNiArMTQsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgogI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVyZmFjZV9pb2N0bF9mbGFnc19zZXQsIGludGVyZmFjZV9hbGwpCisKICNpZmRlZiBIQVZFX05FVF9JRl9ICiAjaW5jbHVkZSA8bmV0L2lmLmg+CiAjZW5kaWYKQEAgLTEwNyw3ICsxMTAsNyBAQAogICAgICAgICBTTk1QX0ZSRUUoaWZlbnRyeS0+cGFkZHIpOwogICAgIH0KICAgICBpZihOVUxMID09IGlmZW50cnktPnBhZGRyKSAKLSAgICAgICAgaWZlbnRyeS0+cGFkZHIgPSBtYWxsb2MoSUZIV0FERFJMRU4pOworICAgICAgICBpZmVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoSUZIV0FERFJMRU4pOwogCiAgICAgaWYoTlVMTCA9PSBpZmVudHJ5LT5wYWRkcikgewogICAgICAgICAgICAgcmMgPSAtNDsKQEAgLTI4Miw2ICsyODUsNyBAQAogICAgIHJldHVybiByYzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9JT0NUTF9GTEFHU19TRVQKIC8qKgogICogaW50ZXJmYWNlIGVudHJ5IGZsYWdzIGlvY3RsIHdyYXBwZXIKICAqCkBAIC0zNDksNiArMzUzLDcgQEAKIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0lPQ1RMX0ZMQUdTX1NFVCAqLwogI2VuZGlmIC8qIFNJT0NHSUZGTEFHUyAqLwogCiAjaWZkZWYgU0lPQ0dJRk1UVQpAQCAtNDc5LDggKzQ4NCw3IEBACiAgICAgICAgICAgICBpZiAoTlVMTCAhPSBwdHIpCiAgICAgICAgICAgICAgICAgKnB0ciA9IDA7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpZl9pbmRleCAhPQotICAgICAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldChzZCwgaWZycC0+aWZyX25hbWUpKQorICAgICAgICAgICAgaWYgKGlmX2luZGV4ICE9IChpbnQpbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2lvY3RsX2lmaW5kZXhfZ2V0KHNkLCBpZnJwLT5pZnJfbmFtZSkpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9saW51eC5jCmluZGV4IDk0YmQ5ODMuLmYxOTZmYzggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2xpbnV4LmMKQEAgLTQsMTQgKzQsNTYgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmRfZXZlbnRfbWFuYWdlcikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRlbGV0ZV9wcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNyZWF0ZV9wcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbnRlcmZhY2VfYXJjaF9zZXRfYWRtaW5fc3RhdHVzLCBpbnRlcmZhY2VfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2lvY3RsX2ZsYWdzX3NldCkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTICovCisKKyNpZmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQorI2luY2x1ZGUgPHBjaS9wY2kuaD4KKyNpbmNsdWRlIDxzZXRqbXAuaD4KK3N0YXRpYyBzdHJ1Y3QgcGNpX2FjY2VzcyAqcGNpX2FjY2VzczsKKworLyogQXZvaWQgbGV0dGluZyBsaWJwY2kgY2FsbCBleGl0KDEpIHdoZW4gbm8gUENJIGJ1cyBpcyBhdmFpbGFibGUuICovCitzdGF0aWMgaW50IGRvX2xvbmdqbXAgPTA7CitzdGF0aWMgam1wX2J1ZiBlcnJfYnVmOworc3RhdGljIHZvaWQKK25ldHNubXBfcGNpX2Vycm9yKGNoYXIgKm1zZywgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICBjaGFyICpidWY7CisgICAgaW50IGJ1ZmxlbjsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIG1zZyk7CisgICAgYnVmbGVuID0gc3RybGVuKCJwY2lsaWI6ICIpK3N0cmxlbihtc2cpKzI7CisgICAgYnVmID0gbWFsbG9jKGJ1Zmxlbik7CisgICAgc25wcmludGYoYnVmLCBidWZsZW4sICJwY2lsaWI6ICVzXG4iLCBtc2cpOworICAgIHNubXBfdmxvZyhMT0dfRVJSLCBidWYsIGFyZ3MpOworICAgIGZyZWUoYnVmKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgaWYgKGRvX2xvbmdqbXApCisJbG9uZ2ptcChlcnJfYnVmLCAxKTsKKyAgICBlbHNlCisJZXhpdCgxKTsKK30KKyNlbmRpZgorCiAjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2lmbmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQogdHlwZWRlZiBfX3U2NCB1NjQ7ICAgICAgICAgLyogaGFjaywgc28gd2UgbWF5IGluY2x1ZGUga2VybmVsJ3MgZXRodG9vbC5oICovCiB0eXBlZGVmIF9fdTMyIHUzMjsgICAgICAgICAvKiBkaXR0byAqLwogdHlwZWRlZiBfX3UxNiB1MTY7ICAgICAgICAgLyogZGl0dG8gKi8KIHR5cGVkZWYgX191OCB1ODsgICAgICAgICAgIC8qIGRpdHRvICovCisjZW5kaWYKKwogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNlbmRpZiAvKiBIQVZFX0xJTlVYX0VUSFRPT0xfSCAqLwogCkBAIC0yOSwxOCArNzEsMzcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KICNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgImludGVyZmFjZV9pb2N0bC5oIgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgogCiAjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CiAKICNpZm5kZWYgSUZfTkFNRVNJWkUKICNkZWZpbmUgSUZfTkFNRVNJWkUgMTYKICNlbmRpZgogCisjaWZuZGVmIFNJT0NHTUlJUEhZCisjZGVmaW5lIFNJT0NHTUlJUEhZIDB4ODk0NworI2VuZGlmCisKKyNpZm5kZWYgU0lPQ0dNSUlSRUcKKyNkZWZpbmUgU0lPQ0dNSUlSRUcgMHg4OTQ4CisjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNpZiBkZWZpbmVkKEhBVkVfTElOVVhfUlRORVRMSU5LX0gpCisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjaWZkZWYgUlRNR1JQX0lQVjZfUFJFRklYCisjZGVmaW5lIFNVUFBPUlRfUFJFRklYX0ZMQUdTIDEKKyNlbmRpZiAgLyogUlRNR1JQX0lQVjZfUFJFRklYICovCisjZW5kaWYgIC8qIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKi8KKyNlbmRpZiAgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLwogdW5zaWduZWQgbG9uZyBsb25nCiBuZXRzbm1wX2xpbnV4X2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgZGVmYXVsdHNwZWVkKTsKQEAgLTYwLDYgKzEyMSwxNiBAQAogI2RlZmluZSBQUk9DX1NZU19ORVRfSVBWeF9CQVNFX1JFQUNIQUJMRV9USU1FICIvcHJvYy9zeXMvbmV0L2lwdiVkL25laWdoLyVzL2Jhc2VfcmVhY2hhYmxlX3RpbWUiCiBzdGF0aWMgY29uc3QgY2hhciAqcHJvY19zeXNfYmFzZXJlYWNoYWJsZV90aW1lOwogc3RhdGljIHVuc2lnbmVkIHNob3J0IGJhc2VyZWFjaGFibGVfdGltZV9tcyA9IDA7CisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKK3ByZWZpeF9jYnggKnByZWZpeF9oZWFkX2xpc3QgPSBOVUxMOworbmV0c25tcF9wcmVmaXhfbGlzdGVuX2luZm8gbGlzdF9pbmZvOworI2RlZmluZSBJRl9QUkVGSVhfT05MSU5LICAgICAgICAweDAxCisjZGVmaW5lIElGX1BSRUZJWF9BVVRPQ09ORiAgICAgIDB4MDIKKyAKK2ludCBuZXRzbm1wX3ByZWZpeF9saXN0ZW4odm9pZCk7CisjZW5kaWYKKworCiB2b2lkCiBuZXRzbm1wX2FyY2hfaW50ZXJmYWNlX2luaXQodm9pZCkKIHsKQEAgLTkyLDYgKzE2MywzMSBAQAogICAgIGVsc2UgewogICAgICAgICBwcm9jX3N5c19iYXNlcmVhY2hhYmxlX3RpbWUgPSBQUk9DX1NZU19ORVRfSVBWeF9CQVNFX1JFQUNIQUJMRV9USU1FOwogICAgIH0KKworI2lmZGVmIFNVUFBPUlRfUFJFRklYX0ZMQUdTCisgICAgbGlzdF9pbmZvLmxpc3RfaGVhZCA9ICZwcmVmaXhfaGVhZF9saXN0OworICAgIG5ldHNubXBfcHJlZml4X2xpc3RlbigpOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BDSV9MT09LVVBfTkFNRQorICAgIHBjaV9hY2Nlc3MgPSBwY2lfYWxsb2MoKTsKKyAgICBpZiAoIXBjaV9hY2Nlc3MpIHsKKwlzbm1wX2xvZyhMT0dfRVJSLCAicGNpbGliOiBwY2lfYWxsb2MgZmFpbGVkXG4iKTsKKwlyZXR1cm47CisgICAgfQorCisgICAgcGNpX2FjY2Vzcy0+ZXJyb3IgPSBuZXRzbm1wX3BjaV9lcnJvcjsKKworICAgIGRvX2xvbmdqbXAgPSAxOworICAgIGlmIChzZXRqbXAoZXJyX2J1ZikpIHsKKyAgICAgICAgcGNpX2NsZWFudXAocGNpX2FjY2Vzcyk7CisJc25tcF9sb2coTE9HX0VSUiwgInBjaWxpYjogcGNpX2luaXQgZmFpbGVkXG4iKTsKKyAgICAgICAgcGNpX2FjY2VzcyA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgaWYgKHBjaV9hY2Nlc3MpCisJcGNpX2luaXQocGNpX2FjY2Vzcyk7CisgICAgZG9fbG9uZ2ptcCA9IDA7CisjZW5kaWYKIH0KIAogLyoKQEAgLTEyOCwxNCArMjI0LDYgQEAKIAogICAgICpmbGFncyAmPSB+TkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0lQVjY7CiAKLSNpZm5kZWYgU0lPQ0dNSUlQSFkKLSNkZWZpbmUgU0lPQ0dNSUlQSFkgMHg4OTQ3Ci0jZW5kaWYKLQotI2lmbmRlZiBTSU9DR01JSVJFRwotI2RlZmluZSBTSU9DR01JSVJFRyAweDg5NDgKLSNlbmRpZgotCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgogICAgIC8qCiAgICAgICogZ2V0IGlwdjYgYWRkcmVzc2VzCkBAIC0yMjksNiArMzE3LDY5IEBACiAgICAgfQogfQogCisjaWZkZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKworLyogR2V0IHZhbHVlIGZyb20gc3lzZnMgZmlsZSAqLworc3RhdGljIGludCBzeXNmc19nZXRfaWQoY29uc3QgY2hhciAqcGF0aCwgdW5zaWduZWQgc2hvcnQgKmlkKQoreworICAgIEZJTEUgKmZpbjsKKyAgICBpbnQgbjsKKworICAgIGlmICghKGZpbiA9IGZvcGVuKHBhdGgsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBvcGVuICVzXG4iLCBwYXRoKSk7CisJcmV0dXJuIDA7CisgICAgfQorCisgICAgbiA9IGZzY2FuZihmaW4sICIlaHgiLCBpZCk7CisgICAgZmNsb3NlKGZpbik7CisKKyAgICByZXR1cm4gbiA9PSAxOworfQorCisvKiBHZXQgaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGZvciBQQ0kgZGV2aWNlCisgKiBieSB1c2luZyBzeXNmcyB0byBmaW5kIHZlbmRvciBhbmQgZGV2aWNlCisgKiB0aGVuIGxvb2t1cCBuYW1lICgtbHBjaSkKKyAqCisgKiBGb3Igc29mdHdhcmUgaW50ZXJmYWNlcyB0aGVyZSBpcyBubyBQQ0kgaW5mb3JtYXRpb24KKyAqIHNvIGRlc2NyaXB0aW9uIHdpbGwgbm90IGJlIHNldC4KKyAqLworc3RhdGljIHZvaWQKK19hcmNoX2ludGVyZmFjZV9kZXNjcmlwdGlvbl9nZXQobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmVudHJ5KQoreworICAgIGNvbnN0IGNoYXIgKmRlc2NyOworICAgIGNoYXIgYnVmWzI1Nl07CisgICAgdW5zaWduZWQgc2hvcnQgdmVuZG9yX2lkLCBkZXZpY2VfaWQ7CisKKyAgICBpZiAoIXBjaV9hY2Nlc3MpCisJcmV0dXJuOworCisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKKwkgICAgICIvc3lzL2NsYXNzL25ldC8lcy9kZXZpY2UvdmVuZG9yIiwgZW50cnktPm5hbWUpOworCisgICAgaWYgKCFzeXNmc19nZXRfaWQoYnVmLCAmdmVuZG9yX2lkKSkKKwlyZXR1cm47CisKKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLAorCSAgICAgIi9zeXMvY2xhc3MvbmV0LyVzL2RldmljZS9kZXZpY2UiLCBlbnRyeS0+bmFtZSk7CisKKyAgICBpZiAoIXN5c2ZzX2dldF9pZChidWYsICZkZXZpY2VfaWQpKQorCXJldHVybjsKKworICAgIGRlc2NyID0gcGNpX2xvb2t1cF9uYW1lKHBjaV9hY2Nlc3MsIGJ1Ziwgc2l6ZW9mKGJ1ZiksCisJCQkgICAgUENJX0xPT0tVUF9WRU5ET1IgfCBQQ0lfTE9PS1VQX0RFVklDRSwKKwkJCSAgICB2ZW5kb3JfaWQsIGRldmljZV9pZCwgMCwgMCk7CisgICAgaWYgKGRlc2NyKSB7CisJZnJlZShlbnRyeS0+ZGVzY3IpOworCWVudHJ5LT5kZXNjciA9IHN0cmR1cChkZXNjcik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAorICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHBjaV9sb29rdXBfbmFtZSB2ZW5kb3I9JSNoeCBkZXZpY2U9JSNoeFxuIiwKKwkJICAgIHZlbmRvcl9pZCwgZGV2aWNlX2lkKSk7CisgICAgfQorfQorI2VuZGlmCisKIAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKIC8qKgpAQCAtNDAyLDE2ICs1NTMsMTUgQEAKICAgICAgKiBzdWJ0cmFjdCBvdXQgbXVsdGljYXN0IHBhY2tldHMgZnJvbSByZWNfcGt0IGJlZm9yZQogICAgICAqIHdlIHN0b3JlIGl0IGFzIHVuaWNhc3QgY291bnRlci4KICAgICAgKi8KLSAgICByZWNfcGt0IC09IHJlY19tY2FzdDsKLQorICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19DQUxDVUxBVEVfVUNBU1Q7CiAgICAgZW50cnktPnN0YXRzLmlieXRlcy5sb3cgPSByZWNfb2N0ICYgMHhmZmZmZmZmZjsKLSAgICBlbnRyeS0+c3RhdHMuaXVjYXN0LmxvdyA9IHJlY19wa3QgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5pYWxsLmxvdyA9IHJlY19wa3QgJiAweGZmZmZmZmZmOwogICAgIGVudHJ5LT5zdGF0cy5pbWNhc3QubG93ID0gcmVjX21jYXN0ICYgMHhmZmZmZmZmZjsKICAgICBlbnRyeS0+c3RhdHMub2J5dGVzLmxvdyA9IHNuZF9vY3QgJiAweGZmZmZmZmZmOwogICAgIGVudHJ5LT5zdGF0cy5vdWNhc3QubG93ID0gc25kX3BrdCAmIDB4ZmZmZmZmZmY7CiAjaWZkZWYgU0NOdU1BWCAgIC8qIFhYWCAtIHNob3VsZCBiZSBmbGFnIGZvciA2NC1iaXQgdmFyaWFibGVzICovCiAgICAgZW50cnktPnN0YXRzLmlieXRlcy5oaWdoID0gcmVjX29jdCA+PiAzMjsKLSAgICBlbnRyeS0+c3RhdHMuaXVjYXN0LmhpZ2ggPSByZWNfcGt0ID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5pYWxsLmhpZ2ggPSByZWNfcGt0ID4+IDMyOwogICAgIGVudHJ5LT5zdGF0cy5pbWNhc3QuaGlnaCA9IHJlY19tY2FzdCA+PiAzMjsKICAgICBlbnRyeS0+c3RhdHMub2J5dGVzLmhpZ2ggPSBzbmRfb2N0ID4+IDMyOwogICAgIGVudHJ5LT5zdGF0cy5vdWNhc3QuaGlnaCA9IHNuZF9wa3QgPj4gMzI7CkBAIC00NTUsNyArNjA1LDcgQEAKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcl9jb250YWluZXI7CiAjZW5kaWYKIAotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgKGZsYWdzICVwKVxuIiwKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsICJsb2FkIChmbGFncyAleClcbiIsCiAgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOwogCiAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CkBAIC00NjYsNyArNjE2LDcgQEAKICAgICBpZiAoIShkZXZpbiA9IGZvcGVuKCIvcHJvYy9uZXQvZGV2IiwgInIiKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2UiLAogICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGxvYWQgSW50ZXJmYWNlIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvZGV2IC4uLlxuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9kZXYgLi4uXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTU4Nyw5ICs3MzcsOSBAQAogICAgICAgICB9CiAgICAgICAgIGVudHJ5LT5uc19mbGFncyA9IGZsYWdzOyAvKiBpbml0aWFsIGZsYWdzOyB3ZSdsbCBzZXQgbW9yZSBsYXRlciAqLwogCi0gICAgICAgIC8qCi0gICAgICAgICAqIHh4eC1ya3M6IGdldCBkZXNjciBieSBsaW5raW5nIG1lbSBmcm9tIC9wcm9jL3BjaSBhbmQgL3Byb2MvaW9tZW0KLSAgICAgICAgICovCisjaWZkZWYgSEFWRV9QQ0lfTE9PS1VQX05BTUUKKwlfYXJjaF9pbnRlcmZhY2VfZGVzY3JpcHRpb25fZ2V0KGVudHJ5KTsKKyNlbmRpZgogCiAKICAgICAgICAgLyoKQEAgLTYyMiw3ICs3NzIsNyBAQAogICAgICAgICAgICAgICAgIHtJQU5BSUZUWVBFX0JBU0lDSVNETiwgImlwcHAifSwKICAgICAgICAgICAgICAgICB7SUFOQUlGVFlQRV9QUk9QVklSVFVBTCwgImJvbmQifSwgLyogQm9uZGluZyBkcml2ZXIgZmluZCBmYXN0ZXN0IHNsYXZlICovCiAgICAgICAgICAgICAgICAge0lBTkFJRlRZUEVfUFJPUFZJUlRVQUwsICJ2YWQifSwgIC8qIEFOUyBkcml2ZXIgLSA/c3BlZWQ/ICovCi0gICAgICAgICAgICAgICAgezAsIDB9ICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIGxpc3QgKi8KKyAgICAgICAgICAgICAgICB7MCwgTlVMTH0gICAgICAgICAgICAgICAgICAvKiBlbmQgb2YgbGlzdCAqLwogICAgICAgICAgICAgfTsKIAogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGxlbjsKQEAgLTYzOSw2ICs3ODksMzYgQEAKICAgICAgICAgICAgICAgICBlbnRyeS0+dHlwZSA9IElBTkFJRlRZUEVfT1RIRVI7CiAgICAgICAgIH0KIAorICAgICAgICAvKgorICAgICAgICAgKiBpbnRlcmZhY2UgaWRlbnRpZmllciBpcyBzcGVjaWZpZWQgYmFzZWQgb24gcGh5c2FkZHIgYW5kIHR5cGUKKyAgICAgICAgICovCisgICAgICAgIHN3aXRjaCAoZW50cnktPnR5cGUpIHsKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0VUSEVSTkVUQ1NNQUNEOgorICAgICAgICBjYXNlIElBTkFJRlRZUEVfRVRIRVJORVQzTUJJVDoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0ZBU1RFVEhFUjoKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0ZBU1RFVEhFUkZYOgorICAgICAgICBjYXNlIElBTkFJRlRZUEVfR0lHQUJJVEVUSEVSTkVUOgorICAgICAgICBjYXNlIElBTkFJRlRZUEVfRkRESToKKyAgICAgICAgY2FzZSBJQU5BSUZUWVBFX0lTTzg4MDI1VE9LRU5SSU5HOgorICAgICAgICAgICAgaWYgKE5VTEwgIT0gZW50cnktPnBhZGRyICYmIEVUSF9BTEVOICE9IGVudHJ5LT5wYWRkcl9sZW4pCisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGVudHJ5LT52Nl9pZl9pZF9sZW4gPSBlbnRyeS0+cGFkZHJfbGVuICsgMjsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+djZfaWZfaWQsIGVudHJ5LT5wYWRkciwgMyk7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPnY2X2lmX2lkICsgNSwgZW50cnktPnBhZGRyICsgMywgMyk7CisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRbMF0gXj0gMjsKKyAgICAgICAgICAgIGVudHJ5LT52Nl9pZl9pZFszXSA9IDB4RkY7CisgICAgICAgICAgICBlbnRyeS0+djZfaWZfaWRbNF0gPSAweEZFOworCisgICAgICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y2X0lGSUQ7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIElBTkFJRlRZUEVfU09GVFdBUkVMT09QQkFDSzoKKyAgICAgICAgICAgIGVudHJ5LT52Nl9pZl9pZF9sZW4gPSAwOworICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNl9JRklEOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwogICAgICAgICBpZiAoSUFOQUlGVFlQRV9FVEhFUk5FVENTTUFDRCA9PSBlbnRyeS0+dHlwZSkgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHNwZWVkOwogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGRlZmF1bHRzcGVlZCA9IE5PTUlOQUxfTElOS19TUEVFRDsKQEAgLTcyMyw2ICs5MDMsNyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUwogaW50CiBuZXRzbm1wX2FyY2hfc2V0X2FkbWluX3N0YXR1cyhuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGlmQWRtaW5TdGF0dXNfdmFsKQpAQCAtNzM5LDYgKzkyMCw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pb2N0bF9mbGFnc19zZXQoLTEsIGVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElGRl9VUCwgYW5kX2NvbXBsZW1lbnQpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5URVJGQUNFX0FSQ0hfU0VUX0FETUlOX1NUQVRVUyAqLwogCiAjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKIC8qKgpAQCAtODc4LDMgKzEwNjAsMTkwIEBACiAgICAgfQogICAgIHJldHVybiByZXRzcGVlZDsKIH0KKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUwordm9pZCBuZXRzbm1wX3ByZWZpeF9wcm9jZXNzKGludCBmZCwgdm9pZCAqZGF0YSk7CisKKy8qIE9wZW4gbmV0bGluayBzb2NrZXQgdG8gd2F0Y2ggbmV3IGlwdjYgYWRkcmVzc2VzIGFuZCBwcmVmaXhlcy4gKi8KK2ludCBuZXRzbm1wX3ByZWZpeF9saXN0ZW4oKQoreworICAgIHN0cnVjdCB7CisgICAgICAgICAgICAgICAgc3RydWN0IG5sbXNnaGRyIG47CisgICAgICAgICAgICAgICAgc3RydWN0IGlmaW5mb21zZyByOworICAgICAgICAgICAgICAgIGNoYXIgICBidWZbMTAyNF07CisgICAgfSByZXE7CisKKyAgICBzdHJ1Y3QgcnRhdHRyICAgICAgKnJ0YTsKKyAgICBpbnQgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIHN0cnVjdCBzb2NrYWRkcl9ubCBsb2NhbGFkZHJpbmZvOworICAgIHVuc2lnbmVkICAgICAgICAgICBncm91cHMgPSAwOworCisgICAgaW50IGZkID0gc29ja2V0KFBGX05FVExJTkssIFNPQ0tfREdSQU0sIE5FVExJTktfUk9VVEUpOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldHNubXBfcHJlZml4X2xpc3RlbjogQ2Fubm90IGNyZWF0ZSBzb2NrZXQuXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNldCgmbG9jYWxhZGRyaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9ubCkpOworCisgICAgZ3JvdXBzIHw9IFJUTUdSUF9JUFY2X0lGQUREUjsKKyAgICBncm91cHMgfD0gUlRNR1JQX0lQVjZfUFJFRklYOworICAgIGxvY2FsYWRkcmluZm8ubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKyAgICBsb2NhbGFkZHJpbmZvLm5sX2dyb3VwcyA9IGdyb3VwczsKKworICAgIGlmIChiaW5kKGZkLCAoc3RydWN0IHNvY2thZGRyKikmbG9jYWxhZGRyaW5mbywgc2l6ZW9mKGxvY2FsYWRkcmluZm8pKSA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9wcmVmaXhfbGlzdGVuOiBCaW5kIGZhaWxlZC5cbiIpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBtZW1zZXQoJnJlcSwgMCwgc2l6ZW9mKHJlcSkpOworICAgIHJlcS5uLm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IHJ0Z2VubXNnKSk7CisgICAgcmVxLm4ubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfUk9PVDsKKyAgICByZXEubi5ubG1zZ190eXBlID0gUlRNX0dFVExJTks7CisgICAgcmVxLnIuaWZpX2ZhbWlseSA9IEFGX0lORVQ2OworICAgIHJ0YSA9IChzdHJ1Y3QgcnRhdHRyICopKCgoY2hhciAqKSZyZXEpICsgTkxNU0dfQUxJR04ocmVxLm4ubmxtc2dfbGVuKSk7CisgICAgcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSCgxNik7CisKKyAgICBzdGF0dXMgPSBzZW5kKGZkLCAmcmVxLCByZXEubi5ubG1zZ19sZW4sIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3Rlbjogc2VuZCBmYWlsZWRcbiIpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAocmVnaXN0ZXJfcmVhZGZkKGZkLCBuZXRzbm1wX3ByZWZpeF9wcm9jZXNzLCBOVUxMKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3RlbjogZXJyb3IgcmVnaXN0ZXJpbmcgbmV0bGluayBzb2NrZXRcbiIpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKy8qIFByb2Nlc3Mgb25lIGluY29taW5nIG5ldGxpbmsgcGFja2V0cy4KKyAqIFJUTV9ORVdBRERSIGFuZCBSVE1fTkVXUFJFRklYIHVzdWFsbHkgYXJyaXZlIGluIHNlcGFyYXRlIHBhY2tldHMKKyAqIC0+IGluZm9ybWF0aW9uIGZyb20gdGhlc2UgcGFja2V0cyBtdXN0IGJlIHN0b3JlZCBsb2NhbGx5IGFuZAorICogbmV3IHByZWZpeCBpcyBhZGRlZCB3aGVuIGluZm9ybWF0aW9uIGZyb20gYm90aCBwYWNrZXRzIGlzIGNvbXBsZXRlLgorICovCit2b2lkIG5ldHNubXBfcHJlZml4X3Byb2Nlc3MoaW50IGZkLCB2b2lkICpkYXRhKQoreworICAgIGludCAgICAgICAgICAgICAgICBzdGF0dXM7CisgICAgY2hhciAgICAgICAgICAgICAgIGJ1ZlsxNjM4NF07CisgICAgc3RydWN0IG5sbXNnaGRyICAgICpubG1wOworICAgIHN0cnVjdCBydGF0dHIgICAgICAqcnRhdHA7CisgICAgc3RydWN0IGlmYWRkcm1zZyAgICppZmE7CisgICAgc3RydWN0IHByZWZpeG1zZyAgICpwcmVmaXg7CisgICAgc3RydWN0IGluNl9hZGRyICAgICppbjZwOworCisgICAgLyogdGhlc2UgdmFsdWVzIG11c3QgcGVyc2lzdCBiZXR3ZWVuIGNhbGxzICovCisgICAgc3RhdGljIGNoYXIgICAgICAgICAgICAgICBpbjZwQWRkcls0MF07CisgICAgc3RhdGljIGludCAgICAgICAgICAgICAgICBoYXZlX2FkZHIgPSAwLGhhdmVfcHJlZml4ID0gMDsKKyAgICBzdGF0aWMgaW50ICAgICAgICAgICAgICAgIG9ubGluayA9IDIsYXV0b25vbW91cyA9IDI7IC8qQXNzdW1lIGFzIGZhbHNlKi8KKworICAgIGludCAgICAgICAgICAgICAgICBpcmV0OworICAgIHByZWZpeF9jYnggICAgICAgICAqbmV3OworICAgIGludCAgICAgICAgICAgICAgICBsZW4sIHJlcV9sZW4sIGxlbmd0aDsgCisKKyAgICBzdGF0dXMgPSByZWN2KGZkLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfcHJlZml4X2xpc3RlbjogUmVjZWl2ZSBmYWlsZWQuXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKHN0YXR1cyA9PSAwKXsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIkVuZCBvZiBGaWxlXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IobmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIgKilidWY7IHN0YXR1cyA+IHNpemVvZigqbmxtcCk7KXsKKyAgICAgICAgbGVuID0gbmxtcC0+bmxtc2dfbGVuOworICAgICAgICByZXFfbGVuID0gbGVuIC0gc2l6ZW9mKCpubG1wKTsKKworICAgICAgICBpZiAocmVxX2xlbiA8IDAgfHwgbGVuID4gc3RhdHVzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX3ByZWZpeF9saXN0ZW46IEVycm9yIGluIGxlbmd0aC5cbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFOTE1TR19PSyhubG1wLCBzdGF0dXMpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpwcmVmaXgiLCAiTkxNU0cgbm90IE9LXG4iKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChubG1wLT5ubG1zZ190eXBlID09IFJUTV9ORVdBRERSIHx8IG5sbXAtPm5sbXNnX3R5cGUgPT0gUlRNX0RFTEFERFIpIHsKKyAgICAgICAgICAgIGlmYSA9IE5MTVNHX0RBVEEobmxtcCk7CisgICAgICAgICAgICBsZW5ndGggPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgICAgICBsZW5ndGggLT0gTkxNU0dfTEVOR1RIKHNpemVvZigqaWZhKSk7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIndyb25nIG5sbXNnIGxlbmd0aCAlZFxuIiwgbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmKCFpZmEtPmlmYV9mbGFncykgeworICAgICAgICAgICAgICAgIHJ0YXRwID0gSUZBX1JUQShpZmEpOworICAgICAgICAgICAgICAgIHdoaWxlIChSVEFfT0socnRhdHAsIGxlbmd0aCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQUREUkVTUyl7CisgICAgICAgICAgICAgICAgICAgICAgICBpbjZwID0gKHN0cnVjdCBpbjZfYWRkciAqKSBSVEFfREFUQShydGF0cCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZihubG1wLT5ubG1zZ190eXBlID09IFJUTV9ERUxBRERSKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYoaW42cEFkZHIsIHNpemVvZihpbjZwQWRkciksICIlMDR4JTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCIsIE5JUDYoKmluNnApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX2FkZHIgPSAtMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25wcmludGYoaW42cEFkZHIsIHNpemVvZihpbjZwQWRkciksICIlMDR4JTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCIsIE5JUDYoKmluNnApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXZlX2FkZHIgPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHJ0YXRwID0gUlRBX05FWFQocnRhdHAsbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBpZihubG1wLT5ubG1zZ190eXBlID09IFJUTV9ORVdQUkVGSVgpIHsKKyAgICAgICAgICAgIHByZWZpeCA9IE5MTVNHX0RBVEEobmxtcCk7CisgICAgICAgICAgICBsZW5ndGggPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgICAgICBsZW5ndGggLT0gTkxNU0dfTEVOR1RIKHNpemVvZigqcHJlZml4KSk7CisKKyAgICAgICAgICAgIGlmIChsZW5ndGggPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIndyb25nIG5sbXNnIGxlbmd0aCAlZFxuIiwgbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBoYXZlX3ByZWZpeCA9IDE7CisgICAgICAgICAgICBpZiAocHJlZml4LT5wcmVmaXhfZmxhZ3MgJiBJRl9QUkVGSVhfT05MSU5LKSB7CisgICAgICAgICAgICAgICAgb25saW5rID0gMTsgCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocHJlZml4LT5wcmVmaXhfZmxhZ3MgJiBJRl9QUkVGSVhfQVVUT0NPTkYpIHsKKyAgICAgICAgICAgICAgICBhdXRvbm9tb3VzID0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgLT0gTkxNU0dfQUxJR04obGVuKTsKKyAgICAgICAgbmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIqKSgoY2hhciopbmxtcCArIE5MTVNHX0FMSUdOKGxlbikpOworICAgIH0KKworICAgIGlmKChoYXZlX2FkZHIgPT0gMSkgJiYgKGhhdmVfcHJlZml4ID09IDEpKXsKKyAgICAgICAgaWYoIShuZXcgPSBuZXRfc25tcF9jcmVhdGVfcHJlZml4X2luZm8gKG9ubGluaywgYXV0b25vbW91cywgaW42cEFkZHIpKSkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJVbmFibGUgdG8gY3JlYXRlIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgIGVsc2UgeworCisgICAgICAgICAgICBpcmV0ID0gbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyAobGlzdF9pbmZvLmxpc3RfaGVhZCwgbmV3LCAwKTsKKyAgICAgICAgICAgIGlmKGlyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIlVuYWJsZSB0byBhZGQvdXBkYXRlIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgICAgICAgICAgZnJlZShuZXcpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoaXJldCA9PSAyKSAvKk9ubHkgd2hlbiBlbnJ0eSBhbHJlYWR5IGV4aXN0cyBhbmQgd2UgYXJlIG9ubHkgdXBkYXRpbmcqLworICAgICAgICAgICAgICAgIGZyZWUobmV3KTsKKyAgICAgICAgfQorICAgICAgICBoYXZlX2FkZHIgPSBoYXZlX3ByZWZpeCA9IDA7CisgICAgICAgIG9ubGluayA9IGF1dG9ub21vdXMgPSAyOyAvKlNldCB0byBkZWZhdWx0cyBhZ2FpbiovCisgICAgfSBlbHNlIGlmIChoYXZlX2FkZHIgPT0gLTEpIHsKKyAgICAgICAgaXJldCA9IG5ldF9zbm1wX2RlbGV0ZV9wcmVmaXhfaW5mbyAobGlzdF9pbmZvLmxpc3RfaGVhZCwgaW42cEFkZHIpOworICAgICAgICBpZihpcmV0IDwgMCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOnByZWZpeCIsICJVbmFibGUgdG8gZGVsZXRlIHRoZSBwcmVmaXggaW5mb1xuIikpOworICAgICAgICAgICAgaWYoIWlyZXQpCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6cHJlZml4IiwgIlVuYWJsZSB0byBmaW5kIHRoZSBub2RlIHRvIGRlbGV0ZVxuIikpOworICAgICAgICAgICAgaGF2ZV9hZGRyID0gMDsKKyAgICB9Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX29wZW5ic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzQwZGM2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9vcGVuYnNkLmMKQEAgLTAsMCArMSw0MDcgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZCQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKyNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpZiBIQVZFX1NZU19JT0NUTF9ICisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjZWxzZQorI2Vycm9yICJsaW51eCBzaG91bGQgaGF2ZSBzeXMvaW9jdGwgaGVhZGVyIgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgorCisjZGVmaW5lIHN0YXJ0dGltZSAoKihjb25zdCBzdHJ1Y3QgdGltZXZhbCopbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKCkpCisKK2ludAorbmV0c25tcF9vcGVuYnNkX2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoY2hhciAqbmFtZSwgdV9pbnQgKnNwZWVkLCB1X2ludCAqc3BlZWRfaGlnaCk7CisKK3ZvaWQKK25ldHNubXBfYXJjaF9pbnRlcmZhY2VfaW5pdCh2b2lkKQoreworICAgIC8qCisgICAgICogbm90aGluZyB0byBkbworICAgICAqLworfQorCisvKgorICogZmluZCB0aGUgaWZJbmRleCBmb3IgYW4gaW50ZXJmYWNlIG5hbWUKKyAqCisgKiBAcmV0dmFsIDAgOiBubyBpbmRleCBmb3VuZAorICogQHJldHZhbCA+MDogaWZJbmRleCBmb3IgaW50ZXJmYWNlCisgKi8KK29pZAorbmV0c25tcF9hcmNoX2ludGVyZmFjZV9pbmRleF9maW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgcmV0dXJuIGlmX25hbWV0b2luZGV4KG5hbWUpOworfQorCisvKiBzYV9sZW4gcm91bmR1cCBtYWNyby4gKi8KKyNkZWZpbmUgUk9VTkRVUChhKSBcCisgICgoYSkgPiAwID8gKDEgKyAoKChhKSAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpKSkgOiBzaXplb2YobG9uZykpCisKKy8qCisgKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIG5vIGNvbnRhaW5lciBzcGVjaWZpZWQKKyAqIEByZXR2YWwgLTIgY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mbworICogQHJldHZhbCAtMyBjb3VsZCBub3QgY3JlYXRlIGVudHJ5IChwcm9iYWJseSBtYWxsb2MpCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2ludGVyZmFjZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdV9jaGFyICppZl9saXN0ID0gTlVMTCwgKmNwOworICAgIHNpemVfdCBpZl9saXN0X3NpemUgPSAwOworICAgIHN0cnVjdCBpZl9tc2doZHIgKmlmcDsKKyAgICBpbnQgc3lzY3RsX29pZFtdID0geyBDVExfTkVULCBQRl9ST1VURSwgMCwgMCwgTkVUX1JUX0lGTElTVCwgMCB9OworICAgIHN0cnVjdCBpZmFfbXNnaGRyICppZmE7CisgICAgc3RydWN0IHNvY2thZGRyICphOworICAgIHN0cnVjdCBzb2NrYWRkcl9kbCAqYWRsOworICAgIGludCBhbWFzazsKKyAgICBjaGFyICppZl9uYW1lOworICAgIGludCBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAibG9hZCAoZmxhZ3MgJXApXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGludGVyZmFjZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKHN5c2N0bF9vaWQsIHNpemVvZihzeXNjdGxfb2lkKSAvIHNpemVvZihpbnQpLCAwLCAmaWZfbGlzdF9zaXplLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mbyAoc2l6ZSlcbiIpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgaWZfbGlzdCA9ICh1X2NoYXIqKW1hbGxvYyhpZl9saXN0X3NpemUpOworICAgIGlmIChpZl9saXN0ID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVyZmFjZSBpbmZvICgldSBieXRlcylcbiIsIGlmX2xpc3Rfc2l6ZSk7CisgICAgICAgIHJldHVybiAtMzsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0ZWQgJXUgYnl0ZXMgZm9yIGlmX2xpc3RcbiIsIGlmX2xpc3Rfc2l6ZSkpOworICAgIH0KKworICAgIGlmIChzeXNjdGwoc3lzY3RsX29pZCwgc2l6ZW9mKHN5c2N0bF9vaWQpIC8gc2l6ZW9mKGludCksIGlmX2xpc3QsICZpZl9saXN0X3NpemUsIDAsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGludGVyZmFjZSBpbmZvXG4iKTsKKyAgICAgICAgZnJlZShpZl9saXN0KTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qIDFzdCBwYXNzOiBjcmVhdGUgaW50ZXJmYWNlIGVudHJpZXMgKi8KKyAgICBmb3IgKGNwID0gaWZfbGlzdDsgY3AgPCBpZl9saXN0ICsgaWZfbGlzdF9zaXplOyBjcCArPSBpZnAtPmlmbV9tc2dsZW4pIHsKKworICAgICAgICBpZnAgPSAoc3RydWN0IGlmX21zZ2hkciAqKSBjcDsKKyAgICAgICAgaWZfbmFtZSA9IE5VTEw7CisgICAgICAgIGZsYWdzID0gMDsKKyAgICAgICAgYWRsID0gTlVMTDsKKworICAgICAgICBpZiAoaWZwLT5pZm1fdHlwZSAhPSBSVE1fSUZJTkZPKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKGlmcC0+aWZtX2FkZHJzICYgUlRBX0lGUCkgeworICAgICAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKGlmcCArIDEpOworICAgICAgICAgICAgLyogaWZfbXNnaGRyIGlzIGZvbGxvd2VkIGJ5IG9uZSBvciBtb3JlIHNvY2thZGRycywgb2Ygd2hpY2ggd2UgbmVlZCBvbmx5IFJUQV9JRlAgKi8KKyAgICAgICAgICAgIC8qIG1vc3Qgb2YgdGhlIHRpbWUgUlRBX0lGUCBpcyB0aGUgZmlyc3QgYWRkcmVzcyB3ZSBnZXQsIGhlbmNlIHRoZSBzaG9ydGN1dCAqLworICAgICAgICAgICAgaWYgKChpZnAtPmlmbV9hZGRycyAmICh+UlRBX0lGUCAtIDEpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgLyogc2tpcCBhbGwgYWRkcmVzc2VzIHVwIHRvIFJUQV9JRlAuICovCisgICAgICAgICAgICAgICAgZm9yIChhbWFzayA9IChSVEFfSUZQID4+IDEpOyBhbWFzayAhPSAwOyBhbWFzayA+Pj0gMSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaWZwLT5pZm1fYWRkcnMgJiBhbWFzaykgeyBhID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoICgoY2hhciAqKSBhKSArIFJPVU5EVVAoYS0+c2FfbGVuKSApOyB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYWRsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCAqKSBhOworICAgICAgICAgICAgaWZfbmFtZSA9IChjaGFyICopIGFkbC0+c2RsX2RhdGE7CisgICAgICAgICAgICBpZl9uYW1lW2FkbC0+c2RsX25sZW5dID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShpZnAtPmlmbV9hZGRycyAmIFJUQV9JRlApIHx8IGlmX25hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImlmbV9pbmRleCAldTogbm8gaW50ZXJmYWNlIG5hbWUgaW4gbWVzc2FnZSwgc2tpcHBpbmdcbiIsIGlmcC0+aWZtX2luZGV4KTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfY3JlYXRlKGlmX25hbWUsIGlmcC0+aWZtX2luZGV4KTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19JTlRFUkZBQ0VfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgICAgIGZyZWUoaWZfbGlzdCk7CisgICAgICAgICAgICByZXR1cm4gLTM7CisgICAgICAgIH0KKworICAgICAgICAvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyAqLworICAgICAgICBpZiAoYWRsICE9IE5VTEwgJiYgYWRsLT5zZGxfYWxlbiA+IDApIHsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkcl9sZW4gPSBhZGwtPnNkbF9hbGVuOworICAgICAgICAgICAgZW50cnktPnBhZGRyID0gKGNoYXIqKW1hbGxvYyhlbnRyeS0+cGFkZHJfbGVuKTsKKyAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cGFkZHIsIGFkbC0+c2RsX2RhdGEgKyBhZGwtPnNkbF9ubGVuLCBhZGwtPnNkbF9hbGVuKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlczogcGFkZHJfbGVuPSVkLCBlbnRyeS0+cGFkZHI9JXg6JXg6JXg6JXg6JXg6JXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpZl9uYW1lLCBlbnRyeS0+cGFkZHJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnBhZGRyWzBdLCBlbnRyeS0+cGFkZHJbMV0sIGVudHJ5LT5wYWRkclsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYWRkclszXSwgZW50cnktPnBhZGRyWzRdLCBlbnRyeS0+cGFkZHJbNV0pKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoNik7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHJfbGVuID0gNjsKKyAgICAgICAgICAgIG1lbXNldChlbnRyeS0+cGFkZHIsIDAsIDYpOworICAgICAgICB9CisKKyAgICAgICAgZW50cnktPm10dSA9IGlmcC0+aWZtX2RhdGEuaWZpX210dTsKKyAgICAgICAgZW50cnktPnR5cGUgPSBpZnAtPmlmbV9kYXRhLmlmaV90eXBlOworCisKKyAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JRl9GTEFHUzsKKyAgICAgICAgZW50cnktPm9zX2ZsYWdzID0gaWZwLT5pZm1fZmxhZ3M7CisgICAgICAgICAgICAgICAgCisgICAgICAgIGlmIChpZnAtPmlmbV9mbGFncyAmIElGRl9VUCkgeworICAgICAgICAgICAgZW50cnktPmFkbWluX3N0YXR1cyA9IElGQURNSU5TVEFUVVNfVVA7CisjaWYgZGVmaW5lZCggTElOS19TVEFURV9VUCApICYmIGRlZmluZWQoIExJTktfU1RBVEVfRE9XTiApCisgICAgICAgICAgICBpZiAoaWZwLT5pZm1fZGF0YS5pZmlfbGlua19zdGF0ZSA9PSBMSU5LX1NUQVRFX1VQKSB7CisgICAgICAgICAgICAgICAgZW50cnktPm9wZXJfc3RhdHVzID0gSUZPUEVSU1RBVFVTX1VQOworICAgICAgICAgICAgfSBlbHNlIGlmIChpZnAtPmlmbV9kYXRhLmlmaV9saW5rX3N0YXRlID09IExJTktfU1RBVEVfRE9XTikgeworICAgICAgICAgICAgICAgIGVudHJ5LT5vcGVyX3N0YXR1cyA9IElGT1BFUlNUQVRVU19ET1dOOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+b3Blcl9zdGF0dXMgPSBJRk9QRVJTVEFUVVNfVU5LTk9XTjsKKyAgICAgICAgICAgIH0KKyNlbHNlCisgICAgICAgICAgICBlbnRyeS0+b3Blcl9zdGF0dXMgPSBJRk9QRVJTVEFUVVNfVVA7CisjZW5kaWYKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGVudHJ5LT5hZG1pbl9zdGF0dXMgPSBJRkFETUlOU1RBVFVTX0RPV047CisgICAgICAgICAgICAvKiBJRi1NSUIgc3BlY2lmaWNhbGx5IHNheXMgdGhhdCBpZk9wZXJTdGF0dXMgc2hvdWxkIGJlIGRvd24gaW4gdGhpcyBjYXNlICovIAorICAgICAgICAgICAgZW50cnktPm9wZXJfc3RhdHVzID0gSUZPUEVSU1RBVFVTX0RPV047CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y0X1JFQVNNTUFYOworICAgICAgICBlbnRyeS0+cmVhc21fbWF4ID0gSVBfTUFYUEFDS0VUOworCisgICAgICAgIC8qIGdldCBjb3VudGVycyAqLworICAgICAgICBlbnRyeS0+c3RhdHMuaWJ5dGVzLmxvdyA9IGlmcC0+aWZtX2RhdGEuaWZpX2lieXRlczsgZW50cnktPnN0YXRzLmlieXRlcy5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLml1Y2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9pcGFja2V0czsgZW50cnktPnN0YXRzLml1Y2FzdC5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLmltY2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9pbWNhc3RzOyBlbnRyeS0+c3RhdHMuaW1jYXN0LmhpZ2ggPSAwOworICAgICAgICBlbnRyeS0+c3RhdHMuaWVycm9ycyA9IGlmcC0+aWZtX2RhdGEuaWZpX2llcnJvcnM7CisgICAgICAgIGVudHJ5LT5zdGF0cy5pZGlzY2FyZHMgPSBpZnAtPmlmbV9kYXRhLmlmaV9pcWRyb3BzOworICAgICAgICBlbnRyeS0+c3RhdHMuaXVua25vd25fcHJvdG9zID0gaWZwLT5pZm1fZGF0YS5pZmlfbm9wcm90bzsKKworICAgICAgICBlbnRyeS0+c3RhdHMub2J5dGVzLmxvdyA9IGlmcC0+aWZtX2RhdGEuaWZpX29ieXRlczsgZW50cnktPnN0YXRzLm9ieXRlcy5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLm91Y2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9vcGFja2V0czsgZW50cnktPnN0YXRzLm91Y2FzdC5oaWdoID0gMDsKKyAgICAgICAgZW50cnktPnN0YXRzLm9tY2FzdC5sb3cgPSBpZnAtPmlmbV9kYXRhLmlmaV9vbWNhc3RzOyBlbnRyeS0+c3RhdHMub21jYXN0LmhpZ2ggPSAwOworICAgICAgICBlbnRyeS0+c3RhdHMub2Vycm9ycyA9IGlmcC0+aWZtX2RhdGEuaWZpX29lcnJvcnM7CisgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSAgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0JZVEVTIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfRFJPUFMgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19NQ0FTVF9QS1RTOworCisgICAgICAgIGlmICh0aW1lcmNtcCgmaWZwLT5pZm1fZGF0YS5pZmlfbGFzdGNoYW5nZSwgJnN0YXJ0dGltZSwgPikpIHsKKyAgICAgICAgICAgIGVudHJ5LT5sYXN0Y2hhbmdlID0gKGlmcC0+aWZtX2RhdGEuaWZpX2xhc3RjaGFuZ2UudHZfc2VjIC0gc3RhcnR0aW1lLnR2X3NlYykgKiAxMDA7CisgICAgICAgICAgICBlbnRyeS0+bnNfZmxhZ3MgfD0gTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0xBU1RDSEFOR0U7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlbnRyeS0+bGFzdGNoYW5nZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoaWZwLT5pZm1fZmxhZ3MgJiBJRkZfUFJPTUlTQykgZW50cnktPnByb21pc2N1b3VzID0gMTsKKworICAgICAgICAvKiB0cnkgdG8gZ3Vlc3MgdGhlIHNwZWVkIGZyb20gbWVkaWEgdHlwZSAqLworICAgICAgICBuZXRzbm1wX29wZW5ic2RfaW50ZXJmYWNlX2dldF9pZl9zcGVlZChlbnRyeS0+bmFtZSwgJmVudHJ5LT5zcGVlZCwgJmVudHJ5LT5zcGVlZF9oaWdoKTsKKyAgICAgICAgaWYgKGVudHJ5LT5zcGVlZF9oaWdoICE9IDApIHsKKyAgICAgICAgICAgIGVudHJ5LT5uc19mbGFncyB8PSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfSElHSF9TUEVFRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG9yIHJlc29ydCB0byBpZmlfYmF1ZHJhdGUgKi8KKyAgICAgICAgICAgIGVudHJ5LT5zcGVlZCA9IGlmcC0+aWZtX2RhdGEuaWZpX2JhdWRyYXRlOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfb3ZlcnJpZGVzKGVudHJ5KTsKKworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICJjcmVhdGVkIGVudHJ5ICV1IGZvciAlc1xuIiwgZW50cnktPmluZGV4LCBlbnRyeS0+bmFtZSkpOworICAgIH0gLyogZm9yIChlYWNoIGludGVyZmFjZSBlbnRyeSkgKi8KKworICAgIC8qIHBhc3MgMjogd2FsayBhZGRyZXNzZXMgKi8KKyAgICBmb3IgKGNwID0gaWZfbGlzdDsgY3AgPCBpZl9saXN0ICsgaWZfbGlzdF9zaXplOyBjcCArPSBpZmEtPmlmYW1fbXNnbGVuKSB7CisKKyAgICAgICAgaWZhID0gKHN0cnVjdCBpZmFfbXNnaGRyICopIGNwOworCisgICAgICAgIGlmIChpZmEtPmlmYW1fdHlwZSAhPSBSVE1fTkVXQUREUikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAgICAgInJlY2VpdmVkIDB4JXggaW4gUlRNX05FV0FERFIgZm9yIGlmaW5kZXggJXVcbiIsCisgICAgICAgICAgICAgICAgICAgIGlmYS0+aWZhbV9hZGRycywgaWZhLT5pZmFtX2luZGV4KSk7CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfZ2V0X2J5X2luZGV4KGNvbnRhaW5lciwgaWZhLT5pZmFtX2luZGV4KTsKKyAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJhZGRyZXNzIGZvciBhIG5vbmV4aXN0ZW50IGludGVyZmFjZT8gaW5kZXg9JWQiLCBpZmEtPmlmYW1faW5kZXgpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICAvKiB3YWxrIHRoZSBsaXN0IG9mIGFkZHJlc3NlcyByZWNlaXZlZC4KKyAgICAgICAgICAgd2UgZG8gbm90IHVzZSBhY3R1YWwgYWRkcmVzc2VzLCB0aGUgc29sZSBwdXJwb3NlIG9mIHRoaXMgaXMgdG8gc2V0IGZsYWdzICovCisgICAgICAgIGEgPSAoc3RydWN0IHNvY2thZGRyICopIChpZmEgKyAxKTsKKyAgICAgICAgZm9yIChhbWFzayA9IGlmYS0+aWZhbV9hZGRyczsgYW1hc2sgIT0gMDsgYW1hc2sgPj49IDEpIHsKKyAgICAgICAgICAgIGlmICgoYW1hc2sgJiAxKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppbnRlcmZhY2U6Y29udGFpbmVyOmFyY2giLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogYT0lcCwgc2FfbGVuPSVkLCBzYV9mYW1pbHk9MHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+bmFtZSwgYSwgYS0+c2FfbGVuLCBhLT5zYV9mYW1pbHkpKTsKKworICAgICAgICAgICAgICAgIGlmIChhLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JUFY0OworICAgICAgICAgICAgICAgIGVsc2UgaWYgKGEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPm5zX2ZsYWdzIHw9IE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19JUFY2OworCisgICAgICAgICAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCAoKGNoYXIgKikgYSkgKyBST1VORFVQKGEtPnNhX2xlbikgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgICAgICIlczogZmxhZ3M9MHgleFxuIiwgZW50cnktPm5hbWUsIGVudHJ5LT5uc19mbGFncykpOworICAgIH0KKworICAgIGlmIChpZl9saXN0ICE9IE5VTEwpCisgICAgICAgIGZyZWUoaWZfbGlzdCk7CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIHN1YnJvdXRpbmUgdG8gdHJhbnNsYXRlIGtub3duIG1lZGlhIHR5cGVkIHRvIHNwZWVkLgorICogc2VlIC91c3IvaW5jbHVkZS9uZXQvaWZfbWVkaWEuaCBmb3IgZGVmaW5pdGlvbnMKKyAqLworCit2b2lkCitfb3BlbmJzZF9pbnRlcmZhY2VfaWZtZWRpYV90b19zcGVlZChpbnQgbWVkaWEsIHVfaW50ICpzcGVlZCwgdV9pbnQgKnNwZWVkX2hpZ2gpCit7CisgICAgKnNwZWVkID0gMDsgKnNwZWVkX2hpZ2ggPSAwOworCisgICAgc3dpdGNoIChJRk1fVFlQRShtZWRpYSkpIHsKKyAgICAgICAgY2FzZSBJRk1fRVRIRVI6CisgICAgICAgICAgICBzd2l0Y2ggKElGTV9TVUJUWVBFKG1lZGlhKSkgeworICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwX1Q6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTBfMjoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMF81OgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwX1NUUDoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMF9GTDoKKyAgICAgICAgICAgICAgICAgICAgKnNwZWVkID0gMTAwMDAwMDA7ICpzcGVlZF9oaWdoID0gMTA7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMF9UWDoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDBfRlg6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwX1Q0OgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMF9WRzoKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMDBfVDI6CisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9IDEwMDAwMDAwMDsgKnNwZWVkX2hpZ2ggPSAxMDA7IGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwMDBfTFg6CisJCWNhc2UgSUZNXzEwMDBfU1g6CisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwMF9DWDoKKyNpZmRlZiBJRk1fMTAwMF9UCisgICAgICAgICAgICAgICAgY2FzZSBJRk1fMTAwMF9UOgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9IDEwMDAwMDAwMDA7ICpzcGVlZF9oaWdoID0gMTAwMDsgYnJlYWs7CisjaWZkZWYgSUZNXzEwR0JBU0VfU1IKKyAgICAgICAgICAgICAgICBjYXNlIElGTV8xMEdCQVNFX1NSOgorICAgICAgICAgICAgICAgIGNhc2UgSUZNXzEwR0JBU0VfTFI6CisgICAgICAgICAgICAgICAgICAgICpzcGVlZCA9ICh1X2ludCkgLTE7IC8qIDQyOTQ5NjcyOTU7ICovICpzcGVlZF9oaWdoID0gMTAwMDA7IGJyZWFrOworI2VuZGlmCisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuOworfQorCisvKgorICogQHJldHZhbCAgMCBzcGVlZCBjb3VsZCBub3QgYmUgZGV0ZXJtaW5lZCAoZXJyb3IsIHVua25vd24gbWVkaWEpCisgKiBAcmV0dmFsID4wIHNwZWVkLCBlcXVhbCB0byAqc3BlZWQuCisgKiAgICAgICAgICAgIHNldHMgKnNwZWVkPTJeMzEgYW5kIHJldHVybnMgKnNwZWVkX2hpZ2g9c3BlZWQvMTBeNiBhcyByZXF1aXJlZCBieSBpZlNwZWVkL2lmSGlnaFNwZWVkLgorICovCisKK2ludAorbmV0c25tcF9vcGVuYnNkX2ludGVyZmFjZV9nZXRfaWZfc3BlZWQoY2hhciAqbmFtZSwgdV9pbnQgKnNwZWVkLCB1X2ludCAqc3BlZWRfaGlnaCkKK3sKKyAgICBpbnQgczsKKyAgICBzdHJ1Y3QgaWZtZWRpYXJlcSBpZm1yOworICAgIGludCAqbWVkaWFfbGlzdCwgaTsKKyAgICB1X2ludCB0X3NwZWVkLCB0X3NwZWVkX2hpZ2g7IAorICAgIHVfaW50IG1fc3BlZWQsIG1fc3BlZWRfaGlnaDsKKworICAgICpzcGVlZCA9IDA7ICpzcGVlZF9oaWdoID0gMDsKKworICAgIGlmICgocyA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKSkgPCAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG1lbXNldCgmaWZtciwgMCwgc2l6ZW9mKGlmbXIpKTsKKyAgICBzdHJsY3B5KGlmbXIuaWZtX25hbWUsIG5hbWUsIHNpemVvZihpZm1yLmlmbV9uYW1lKSk7CisKKyAgICBpZiAoaW9jdGwocywgU0lPQ0dJRk1FRElBLCAoY2FkZHJfdCkmaWZtcikgPCAwIHx8IGlmbXIuaWZtX2NvdW50ID09IDApIHsKKyAgICAgICAgY2xvc2Uocyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qCisgICAgICogdHJ5IHRvIGdldCBzcGVlZCBmcm9tIGN1cnJlbnQgbWVkaWEuCisgICAgICogaWYgdW5zdWNjZXNzZnVsIChlLmcuLCBpbnRlcmZhY2UgaXMgZG93biksIGdldCBhIGxpc3Qgb2YgY2FwYWJpbGl0aWVzLAorICAgICAqIHRyeSBlYWNoIGFuZCByZXR1cm4gbWF4aW11bSBzcGVlZCB0aGUgaW50ZXJmYWNlIGlzIGNhcGFibGUgb2YuCisgICAgICovCisKKyAgICBfb3BlbmJzZF9pbnRlcmZhY2VfaWZtZWRpYV90b19zcGVlZChpZm1yLmlmbV9jdXJyZW50LCBzcGVlZCwgc3BlZWRfaGlnaCk7CisKKyAgICBpZiAoKnNwZWVkID09IDAgJiYKKyAgICAgICAgKG1lZGlhX2xpc3QgPSAoaW50ICopIG1hbGxvYyhpZm1yLmlmbV9jb3VudCAqIHNpemVvZihpbnQpKSkgIT0gTlVMTCApIHsKKworICAgICAgICBpZm1yLmlmbV91bGlzdCA9IG1lZGlhX2xpc3Q7CisKKyAgICAgICAgaWYgKGlvY3RsKHMsIFNJT0NHSUZNRURJQSwgKGNhZGRyX3QpJmlmbXIpID09IDApIHsKKyAgICAgICAgICAgIG1fc3BlZWQgPSAwOyBtX3NwZWVkX2hpZ2ggPSAwOworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGlmbXIuaWZtX2NvdW50OyBpKyspIHsKKworICAgICAgICAgICAgICAgIF9vcGVuYnNkX2ludGVyZmFjZV9pZm1lZGlhX3RvX3NwZWVkKG1lZGlhX2xpc3RbaV0sICZ0X3NwZWVkLCAmdF9zcGVlZF9oaWdoKTsKKworICAgICAgICAgICAgICAgIGlmICh0X3NwZWVkX2hpZ2ggPiBtX3NwZWVkX2hpZ2ggfHwKKyAgICAgICAgICAgICAgICAgICAgKHRfc3BlZWRfaGlnaCA9PSBtX3NwZWVkX2hpZ2ggJiYgdF9zcGVlZCA+IHRfc3BlZWQpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fc3BlZWRfaGlnaCA9IHRfc3BlZWRfaGlnaDsgbV9zcGVlZCA9IHRfc3BlZWQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgKnNwZWVkID0gbV9zcGVlZDsgKnNwZWVkX2hpZ2ggPSBtX3NwZWVkX2hpZ2g7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShtZWRpYV9saXN0KTsKKyAgICB9CisKKyAgICBjbG9zZShzKTsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwKKyAgICAgICAgICAgICAgICAiJXM6IHNwZWVkOiAldSwgc3BlZWRfaGlnaDogJXVcbiIsCisgICAgICAgICAgICAgICAgbmFtZSwgKnNwZWVkLCAqc3BlZWRfaGlnaCkpOworCisgICAgcmV0dXJuICpzcGVlZDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMKK2ludAorbmV0c25tcF9hcmNoX3NldF9hZG1pbl9zdGF0dXMobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpZkFkbWluU3RhdHVzX3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTphcmNoIiwgInNldF9hZG1pbl9zdGF0dXNcbiIpKTsKKworICAgIC8qIFRPRE86IGltcGxlbWVudCB0aGlzIGNhbGwgKi8KKworICAgIC8qIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRzbm1wX2FyY2hfc2V0X2FkbWluX3N0YXR1cyBpcyBub3QgKHlldCkgaW1wbGVtZW50ZWQgZm9yIEZyZWVCU0QuXG4iKTsKKworICAgIHJldHVybiAtNDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zb2xhcmlzMi5jCmluZGV4IDY2ZmIyMmYuLjhhYTQ3ZjggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc29sYXJpczIuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3NvbGFyaXMyLmMKQEAgLTIsMTAgKzIsMTEgQEAKICAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBTb2xhcmlzCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAjaW5jbHVkZSAiaWYtbWliL2lmVGFibGUvaWZUYWJsZV9jb25zdGFudHMuaCIKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xNiw2ICsxNyw4IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKwogc3RhdGljIGludCBfc2V0X2lwX2ZsYWdzX3Y0KG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICosIG1pYjJfaWZFbnRyeV90ICopOwogc3RhdGljIGludCBfbWF0Y2hfaWZuYW1lX3Y0YWRkcih2b2lkICppZm5hbWUsIHZvaWQgKmlwYWRkcik7CiBzdGF0aWMgaW50IF9nZXRfdjRhZGRyKG1pYjJfaWZFbnRyeV90ICppZmUsIG1pYjJfaXBBZGRyRW50cnlfdCAqZSk7CkBAIC02Myw3ICs2Niw3IEBACiAgICAgcmVxX2UgICAgICAgICAgICAgICAgICAgcmVxID0gR0VUX0ZJUlNUOwogICAgIGludCAgICAgICAgICAgICAgICAgICAgIGVycm9yID0gMDsKIAotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aW50ZXJmYWNlOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgKGZsYWdzICVwKVxuIiwKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6YXJjaCIsICJsb2FkIChmbGFncyAldSlcbiIsCiAgICAgICAgICAgICAgICAgbF9mbGFncykpOwogCiAgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKSB7CkBAIC0xMDQsNyArMTA3LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogY29sbGVjdCB0aGUgaW5mb3JtYXRpb24gbmVlZGVkIGJ5IElGLU1JQgogICAgICAgICAgKi8KLSAgICAgICAgZW50cnktPnBhZGRyID0gbWFsbG9jKGlmZS5pZlBoeXNBZGRyZXNzLm9fbGVuZ3RoKTsKKyAgICAgICAgZW50cnktPnBhZGRyID0gKGNoYXIqKW1hbGxvYyhpZmUuaWZQaHlzQWRkcmVzcy5vX2xlbmd0aCk7CiAgICAgICAgIGlmIChlbnRyeS0+cGFkZHIgPT0gTlVMTCkgewogICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X2ZyZWUoZW50cnkpOwogICAgICAgICAgICAgZXJyb3IgPSAxOwpAQCAtMzA2LDcgKzMwOSw3IEBACiAgICAgaWYgKChyYyA9IGdldE1pYnN0YXQoTUlCX0lQX0FERFIsIGlwdjRlLCBzaXplb2YoKmlwdjRlKSwgR0VUX0VYQUNULCAKICAgICAgICAgJl9tYXRjaF9pZm5hbWVfdjRhZGRyLCAmaWZlLT5pZkRlc2NyLm9fYnl0ZXMpKSA9PSAwKQogICAgICAgICByZXR1cm4gKDEpOwotICAgIGJ6ZXJvKCh2b2lkICopaXB2NGUsIHNpemVvZigqaXB2NGUpKTsKKyAgICBtZW1zZXQoaXB2NGUsICdcMCcsIHNpemVvZigqaXB2NGUpKTsKICAgICByZXR1cm4gKDApOwogfQogCkBAIC0zNDAsMTEgKzM0MywxMiBAQAogICAgICAgICAmX21hdGNoX2lmbmFtZV92NmFkZHIsICZpZmUtPmlmRGVzY3Iub19ieXRlcykpID09IDApIHsKICAgICAgICAgcmV0dXJuICgxKTsKICAgICB9IAotICAgIGJ6ZXJvKCh2b2lkICopaXB2NmUsIHNpemVvZigqaXB2NmUpKTsKKyAgICBtZW1zZXQoaXB2NmUsICdcMCcsIHNpemVvZigqaXB2NmUpKTsKICAgICByZXR1cm4gKDApOwogfQogI2VuZGlmIC8qIFNPTEFSSVNfSEFWRV9JUFY2X01JQl9TVVBQT1JUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTCiBpbnQKIG5ldHNubXBfYXJjaF9zZXRfYWRtaW5fc3RhdHVzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICogZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZBZG1pblN0YXR1c192YWwpCkBAIC0zNTYsMyArMzYwLDQgQEAKICAgICAgKi8KICAgICByZXR1cm4gKC0xKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX3N5c2N0bC5jCmluZGV4IDA2Y2ZlZmUuLjYwNzZkMTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2Vfc3lzY3RsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2RhdGFfYWNjZXNzL2ludGVyZmFjZV9zeXNjdGwuYwpAQCAtNiw2ICs2LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKICNpbmNsdWRlICJpZi1taWIvaWZUYWJsZS9pZlRhYmxlX2NvbnN0YW50cy5oIgpAQCAtMjksNiArMzAsOCBAQAogI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC9pZl9tZWRpYS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW50ZXJmYWNlX2FyY2hfc2V0X2FkbWluX3N0YXR1cywgaW50ZXJmYWNlX2FsbCkKKwogLyoKICAqIGFjY291bnQgZm9yIG1pbm9yIGRpZmZlcmVuY2VzIGJldHdlZW4gRnJlZUJTRCBhbmQgT3BlbkJTRC4KICAqIElmIHRoaXMgZ2V0cyB1bnJ1bHksIHNwbGl0IHN0dWZmIG91dCBpbnRvIHRoZSByZXNwZWN0aXZlCkBAIC00OSw3ICs1Miw3IEBACiAjICAgZGVmaW5lIEFSQ0hfUFJPTUlTQ19GTEFHIElGRl9QUk9NSVNDCiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKKyNkZWZpbmUgc3RhcnR0aW1lICgqKGNvbnN0IHN0cnVjdCB0aW1ldmFsKiluZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUoKSkKIAogLyogc2FfbGVuIHJvdW5kdXAgbWFjcm8uICovCiAjZGVmaW5lIFJPVU5EVVAoYSkgXApAQCAtMjgxLDcgKzI4NCw3IEBACiAgICAgICAgICAgICAgICAgbmV0c25tcF9zeXNjdGxfaWZtZWRpYV90b19zcGVlZChtZWRpYV9saXN0W2ldLCAmdF9zcGVlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0X3NwZWVkX2hpZ2gpOwogICAgICAgICAgICAgICAgIGlmICh0X3NwZWVkX2hpZ2ggPiBtX3NwZWVkX2hpZ2ggfHwKLSAgICAgICAgICAgICAgICAgICAgKHRfc3BlZWRfaGlnaCA9PSBtX3NwZWVkX2hpZ2ggJiYgdF9zcGVlZCA+IHRfc3BlZWQpKSB7CisgICAgICAgICAgICAgICAgICAgICh0X3NwZWVkX2hpZ2ggPT0gbV9zcGVlZF9oaWdoICYmIHRfc3BlZWQgPiBtX3NwZWVkKSkgewogICAgICAgICAgICAgICAgICAgICBtX3NwZWVkX2hpZ2ggPSB0X3NwZWVkX2hpZ2g7CiAgICAgICAgICAgICAgICAgICAgIG1fc3BlZWQgPSB0X3NwZWVkOwogICAgICAgICAgICAgICAgIH0KQEAgLTM0OSw3ICszNTIsNyBAQAogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCi0gICAgaWZfbGlzdCA9IG1hbGxvYyhpZl9saXN0X3NpemUpOworICAgIGlmX2xpc3QgPSAodV9jaGFyKiltYWxsb2MoaWZfbGlzdF9zaXplKTsKICAgICBpZiAoaWZfbGlzdCA9PSBOVUxMKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBpbnRlcmZhY2UgaW5mbyAiCiAgICAgICAgICAgICAgICAgICIoJXUgYnl0ZXMpXG4iLCAodW5zaWduZWQpIGlmX2xpc3Rfc2l6ZSk7CkBAIC00MTQsNyArNDE3LDcgQEAKICAgICAgICAgLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3MgKi8KICAgICAgICAgaWYgKGFkbCAhPSBOVUxMICYmIGFkbC0+c2RsX2FsZW4gPiAwKSB7CiAgICAgICAgICAgICBlbnRyeS0+cGFkZHJfbGVuID0gYWRsLT5zZGxfYWxlbjsKLSAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IG1hbGxvYyhlbnRyeS0+cGFkZHJfbGVuKTsKKyAgICAgICAgICAgIGVudHJ5LT5wYWRkciA9IChjaGFyKiltYWxsb2MoZW50cnktPnBhZGRyX2xlbik7CiAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnBhZGRyLCBhZGwtPnNkbF9kYXRhICsgYWRsLT5zZGxfbmxlbiwgYWRsLT5zZGxfYWxlbik7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmludGVyZmFjZTpjb250YWluZXI6c3lzY3RsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICIlczogcGFkZHJfbGVuPSVkLCBlbnRyeS0+cGFkZHI9JXg6JXg6JXg6JXg6JXg6JXhcbiIsCkBAIC00MjIsNyArNDI1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYWRkclswXSwgZW50cnktPnBhZGRyWzFdLCBlbnRyeS0+cGFkZHJbMl0sCiAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cGFkZHJbM10sIGVudHJ5LT5wYWRkcls0XSwgZW50cnktPnBhZGRyWzVdKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSBtYWxsb2MoNik7CisgICAgICAgICAgICBlbnRyeS0+cGFkZHIgPSAoY2hhciopbWFsbG9jKDYpOwogICAgICAgICAgICAgZW50cnktPnBhZGRyX2xlbiA9IDY7CiAgICAgICAgICAgICBtZW1zZXQoZW50cnktPnBhZGRyLCAwLCA2KTsKICAgICAgICAgfQpAQCAtNTYxLDYgKzU2NCw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUkZBQ0VfQVJDSF9TRVRfQURNSU5fU1RBVFVTCiBpbnQKIG5ldHNubXBfYXJjaF9zZXRfYWRtaW5fc3RhdHVzKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5ICogZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWZBZG1pblN0YXR1c192YWwpCkBAIC01NzUsMyArNTc5LDQgQEAKIAogICAgIHJldHVybiAtNDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSRkFDRV9BUkNIX1NFVF9BRE1JTl9TVEFUVVMgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuYwppbmRleCA2OTQwMGZjLi5kOWI3MjUyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5jCkBAIC0xNCw5ICsxNCwxNCBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9hY2Nlc3NfZW50cnlfc2V0X2FkbWluX3N0YXR1cykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoKICAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCiAgKi8KQEAgLTMxLDE0ICszNiwxNCBAQAogIyAgIGluY2x1ZGUgImlwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgiCiAjZW5kaWYKICNpZmRlZiBVU0lOR19JUF9NSUJfSVBWNklOVEVSRkFDRVRBQkxFX0lQVjZJTlRFUkZBQ0VUQUJMRV9NT0RVTEUKLSMgICBpbmNsdWRlICJpcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oIgorIyAgIGluY2x1ZGUgImlwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgiCiAjZW5kaWYKICNpZmRlZiBVU0lOR19JRl9NSUJfSUZYVEFCTEVfSUZYVEFCTEVfTU9EVUxFCiAjICAgaW5jbHVkZSAiaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgiCiAjZW5kaWYKIAotb2lkICAgICAgICAgICAgIGlmVGFibGVfb2lkW10gPSB7IElGVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaWZUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZUYWJsZV9vaWQpOworY29uc3Qgb2lkICAgICAgIGlmVGFibGVfb2lkW10gPSB7IElGVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaWZUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZUYWJsZV9vaWQpOwogCiBpZlRhYmxlX3JlZ2lzdHJhdGlvbiBpZlRhYmxlX3VzZXJfY29udGV4dDsKIHN0YXRpYyBpZlRhYmxlX3JlZ2lzdHJhdGlvbiAqaWZUYWJsZV91c2VyX2NvbnRleHRfcDsKQEAgLTE0Nyw4ICsxNTIsNyBAQAogICAgICAqIHJlZ2lzdGVyIHNjYWxhciBmb3IgaWZOdW1iZXIKICAgICAgKi8KICAgICB7Ci0gICAgICAgIG9pZCAgICAgICAgICAgICByZWdfb2lkW10gPQotICAgICAgICAgICAgeyBJRlRBQkxFX05VTUJFUiB9OworICAgICAgICBjb25zdCBvaWQgICAgICAgcmVnX29pZFtdID0geyBJRlRBQkxFX05VTUJFUiB9OwogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteXJlZzsKIAogICAgICAgICBteXJlZyA9CkBAIC0yNzksOSArMjgzLDkgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHNhdmUgY2hhbmdlZCByb3dzLCBpZiB5b3UgaGF2ZW4ndCBhbHJlYWR5CisgICAgICAgICAgICAgKiBub3RpZnkgbGlicmFyeSB0byBzYXZlIGNoYW5nZWQgcm93cwogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX3N0b3JlKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwogICAgICAgICB9CiAKQEAgLTQ3NCw3ICs0NzgsNyBAQAogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgaWZEZXNjciBkYXRhCiAgICAgICAgICAqLwogICAgICAgICAoKmlmRGVzY3JfdmFsX3B0cl9wdHIpID0KLSAgICAgICAgICAgIG1hbGxvYyh0bXBfbGVuICogc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuaWZEZXNjclswXSkpOworICAgICAgICAgICAgKGNoYXIqKW1hbGxvYyh0bXBfbGVuICogc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuaWZEZXNjclswXSkpOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlmRGVzY3JfdmFsX3B0cl9wdHIpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeVxuIik7CiAgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwpAQCAtNzUyLDcgKzc1Niw3IEBACiAgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBpZlBoeXNBZGRyZXNzIGRhdGEKICAgICAgICAgICovCiAgICAgICAgICgqaWZQaHlzQWRkcmVzc192YWxfcHRyX3B0cikgPQotICAgICAgICAgICAgbWFsbG9jKHJvd3JlcV9jdHgtPmRhdGEuaWZQaHlzQWRkcmVzc19sZW4gKgorICAgICAgICAgICAgKGNoYXIqKW1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmlmUGh5c0FkZHJlc3NfbGVuICoKICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5pZlBoeXNBZGRyZXNzWzBdKSk7CiAgICAgICAgIGlmIChOVUxMID09ICgqaWZQaHlzQWRkcmVzc192YWxfcHRyX3B0cikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKQEAgLTE3NzMsOSArMTc3Nyw5IEBACiAgICAgLyoKICAgICAgKiBoYXJkIGNvZGVkCiAgICAgICovCi0gICAgbmV0c25tcF9hc3NlcnQoKCppZlNwZWNpZmljX3ZhbF9wdHJfbGVuX3B0cikgPiBudWxsT2lkTGVuKTsKLSAgICAoKmlmU3BlY2lmaWNfdmFsX3B0cl9sZW5fcHRyKSA9IG51bGxPaWRMZW47Ci0gICAgbWVtY3B5KCppZlNwZWNpZmljX3ZhbF9wdHJfcHRyLCAmbnVsbE9pZCwgbnVsbE9pZExlbik7CisgICAgbmV0c25tcF9hc3NlcnQoKCppZlNwZWNpZmljX3ZhbF9wdHJfbGVuX3B0cikgPiAoc2l6ZV90KW51bGxPaWRMZW4pOworICAgICgqaWZTcGVjaWZpY192YWxfcHRyX2xlbl9wdHIpID0gKHNpemVfdCludWxsT2lkTGVuOworICAgIG1lbWNweSgqaWZTcGVjaWZpY192YWxfcHRyX3B0ciwgJm51bGxPaWQsIChzaXplX3QpbnVsbE9pZExlbik7CiAjZW5kaWYKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKQEAgLTE3ODQsNiArMTc4OCw5IEBACiAKIAogLyoqIEB9ICovCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMjMzMCw2ICsyMzM3LDggQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMgKi8KIAogCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiBzdGF0aWMgaW50CiBfaWZfbnVtYmVyX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZS5oCmluZGV4IDZhNmYwZTUuLmU5MDYzNGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlLmgKQEAgLTM0Myw2ICszNDMsOSBAQAogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCiAgICAgICovCisgICAgCQorICAgIGludCAgICAgICAgICAgICBfbWZkX2lmVGFibGVfdW5kb19zZXR1cF9hbGxvY2F0ZShpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgpOworICAgIHZvaWQgICAgICAgICAgICBfbWZkX2lmVGFibGVfdW5kb19zZXR1cF9yZWxlYXNlKGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgIGlmVGFibGVfcHJlX3JlcXVlc3QoaWZUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCk7CiAgICAgaW50ICAgICAgICAgICAgIGlmVGFibGVfcG9zdF9yZXF1ZXN0KGlmVGFibGVfcmVnaXN0cmF0aW9uICoKQEAgLTM2MSw4ICszNjQsOCBAQAogICAgIGlmVGFibGVfcm93cmVxX2N0eCAqaWZUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaWZUYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaWZUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaWZUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkIGlmVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCBpZlRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpZlRhYmxlX2ludGVyZmFjZS5oIgpAQCAtNDQ4LDYgKzQ1MSw3IEBACiAKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIC8qCiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqIFNFVCBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKQEAgLTY2Myw3ICs2NjcsNyBAQAogCiAKICAgICBpbnQgICAgICAgICAgICAgaWZUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoaWZUYWJsZV9yb3dyZXFfY3R4ICogY3R4KTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMDUxOTFlNy4uZmI4MzhlZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtOCw5ICs4LDEyIEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlua2VkX2xpc3QpCisKIC8qCiAgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAogICovCkBAIC0yMywxMiArMjYsMzQgQEAKICMgICBpbmNsdWRlICJtaWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oIgogI2VuZGlmCiAKKyNpZmRlZiBVU0lOR19JUF9NSUJfSVBWNklOVEVSRkFDRVRBQkxFX0lQVjZJTlRFUkZBQ0VUQUJMRV9NT0RVTEUKKyMgICBpbmNsdWRlICJtaWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oIgorI2VuZGlmCisKK3R5cGVkZWYgc3RydWN0IGNkX2NvbnRhaW5lcl9zIHsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY3VycmVudDsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqZGVsZXRlZDsKK30gY2RfY29udGFpbmVyOworCiAvKgogICogZmxhZyBzbyB3ZSBrbm93IG5vdCB0byBzZXQgcm93L3RhYmxlIGxhc3QgY2hhbmdlIHRpbWVzCiAgKiBkdXJpbmcgc3RhcnR1cC4KICAqLwogc3RhdGljIGludCAgICAgIF9maXJzdF9sb2FkID0gMTsKIAorLyoKKyAqIFZhbHVlIG9mIGludGVyZmFjZV9mYWRlb3V0IGNvbmZpZyBvcHRpb24KKyAqLworc3RhdGljIGludCBmYWRlb3V0ID0gSUZUQUJMRV9SRU1PVkVfTUlTU0lOR19BRlRFUjsKKy8qCisgKiBWYWx1ZSBvZiBpbnRlcmZhY2VfcmVwbGFjZV9vbGQgY29uZmlnIG9wdGlvbgorICovCitzdGF0aWMgaW50IHJlcGxhY2Vfb2xkID0gMDsKKworc3RhdGljIHZvaWQKK19kZWxldGVfbWlzc2luZ19pbnRlcmZhY2UoaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKTsKKwogLyoqIEBpbmdyb3VwIGludGVyZmFjZSAKICAqIEBkZWZncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKICAqCkBAIC01MCw2ICs3NSwzMiBAQAogICogT0lEOiAuMS4zLjYuMS4yLjEuMi4yLCBsZW5ndGg6IDgKICAqLwogCitzdGF0aWMgdm9pZAorcGFyc2VfaW50ZXJmYWNlX2ZhZGVvdXQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgZmFkZW91dCA9IGF0b2kobGluZSk7Cit9CitzdGF0aWMgdm9pZAorcGFyc2VfaW50ZXJmYWNlX3JlcGxhY2Vfb2xkKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIGlmIChzdHJjbXAobGluZSwgInllcyIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAieSIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAidHJ1ZSIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAiMSIpID09IDApIHsKKyAgICAgICAgcmVwbGFjZV9vbGQgPSAxOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChzdHJjbXAobGluZSwgIm5vIikgPT0gMAorICAgICAgICAgICAgfHwgc3RyY21wKGxpbmUsICJuIikgPT0gMAorICAgICAgICAgICAgfHwgc3RyY21wKGxpbmUsICJmYWxzZSIpID09IDAKKyAgICAgICAgICAgIHx8IHN0cmNtcChsaW5lLCAiMCIpID09IDApIHsKKyAgICAgICAgcmVwbGFjZV9vbGQgPSAwOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHNubXBfbG9nKExPR19FUlIsICJJbnZhbGlkIHZhbHVlIG9mIGludGVyZmFjZV9yZXBsYWNlX29sZCBwYXJhbWV0ZXI6ICclcydcbiIsCisgICAgICAgICAgICBsaW5lKTsKK30KKwogLyoqCiAgKiBpbml0aWFsaXphdGlvbiBmb3IgaWZUYWJsZSBkYXRhIGFjY2VzcwogICoKQEAgLTcwLDYgKzEyMSwxMCBAQAogICAgIC8qCiAgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBpZlRhYmxlIGRhdGEuCiAgICAgICovCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImludGVyZmFjZV9mYWRlb3V0IiwgcGFyc2VfaW50ZXJmYWNlX2ZhZGVvdXQsIE5VTEwsCisgICAgICAgICAgICAiaW50ZXJmYWNlX2ZhZGVvdXQgc2Vjb25kcyIpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJpbnRlcmZhY2VfcmVwbGFjZV9vbGQiLAorICAgICAgICAgICAgcGFyc2VfaW50ZXJmYWNlX3JlcGxhY2Vfb2xkLCBOVUxMLCAiaW50ZXJmYWNlX3JlcGxhY2Vfb2xkIHllc3xubyIpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZlRhYmxlX2luaXRfZGF0YSAqLwpAQCAtMTUyLDIzICsyMDcsMTIyIEBACiAgICAgICAgICBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEIHwgTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUKTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWZUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCit2b2lkCitzZW5kX2xpbmtVcERvd25Ob3RpZmljYXRpb25zKG9pZCAqbm90aWZpY2F0aW9uX29pZCwgc2l6ZV90IG5vdGlmaWNhdGlvbl9vaWRfbGVuLCBpbnQgaWZfaW5kZXgsIGludCBpZl9hZG1pbl9zdGF0dXMsIGludCBpZl9vcGVyX3N0YXR1cykKK3sKKyAgICAvKgorICAgICAqIEluIHRoZSBub3RpZmljYXRpb24sIHdlIGhhdmUgdG8gYXNzaWduIG91ciBub3RpZmljYXRpb24gT0lEIHRvCisgICAgICogdGhlIHNubXBUcmFwT0lELjAgb2JqZWN0LiBIZXJlIGlzIGl0J3MgZGVmaW5pdGlvbi4gCisgICAgICovCisgICAgb2lkICAgICAgICAgICAgIG9iamlkX3NubXB0cmFwW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDQsIDEsIDAgfTsKKyAgICBzaXplX3QgICAgICAgICAgb2JqaWRfc25tcHRyYXBfbGVuID0gT0lEX0xFTkdUSChvYmppZF9zbm1wdHJhcCk7CisKKyAgICAvKgorICAgICAqIGRlZmluZSB0aGUgT0lEcyBmb3IgdGhlIHZhcmJpbmRzIHdlJ3JlIGdvaW5nIHRvIGluY2x1ZGUKKyAgICAgKiAgd2l0aCB0aGUgbm90aWZpY2F0aW9uIC0KKyAgICAgKiBJRi1NSUI6OmlmSW5kZXgsCisgICAgICogSUYtTUlCOjppZkFkbWluU3RhdHVzLCBhbmQKKyAgICAgKiBJRi1NSUI6OmlmT3BlclN0YXR1cworICAgICAqLworICAgIG9pZCAgICAgIGlmX2luZGV4X29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDEsIDAgfTsKKyAgICBzaXplX3QgICBpZl9pbmRleF9vaWRfbGVuID0gT0lEX0xFTkdUSChpZl9pbmRleF9vaWQpOworICAgIG9pZCAgICAgIGlmX2FkbWluX3N0YXR1c19vaWRbXSAgID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCA3LCAwIH07CisgICAgc2l6ZV90ICAgaWZfYWRtaW5fc3RhdHVzX29pZF9sZW4gPSBPSURfTEVOR1RIKGlmX2FkbWluX3N0YXR1c19vaWQpOworICAgIG9pZCAgICAgIGlmX29wZXJfc3RhdHVzX29pZFtdICAgPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDgsIDAgfTsKKyAgICBzaXplX3QgICBpZl9vcGVyX3N0YXR1c19vaWRfbGVuID0gT0lEX0xFTkdUSChpZl9vcGVyX3N0YXR1c19vaWQpOworCisgICAgLyoKKyAgICAgKiBoZXJlIGlzIHdoZXJlIHdlIHN0b3JlIHRoZSB2YXJpYWJsZXMgdG8gYmUgc2VudCBpbiB0aGUgdHJhcCAKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKm5vdGlmaWNhdGlvbl92YXJzID0gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJyc3lzOmxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwgImRlZmluaW5nIHRoZSB0cmFwXG4iKSk7CisKKyAgICAvKgorICAgICAqIHVwZGF0ZSB0aGUgaW5zdGFuY2UgZm9yIGVhY2ggdmFyaWFibGUgdG8gYmUgc2VudCBpbiB0aGUgdHJhcAorICAgICAqLworICAgIGlmX2luZGV4X29pZFsxMF0gPSBpZl9pbmRleDsKKyAgICBpZl9hZG1pbl9zdGF0dXNfb2lkWzEwXSA9IGlmX2luZGV4OworICAgIGlmX29wZXJfc3RhdHVzX29pZFsxMF0gPSBpZl9pbmRleDsKKworICAgIC8qCisgICAgICogYWRkIGluIHRoZSB0cmFwIGRlZmluaXRpb24gb2JqZWN0IAorICAgICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5vdGlmaWNhdGlvbl92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBzbm1wVHJhcE9JRC4wIHZhcmlhYmxlIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmppZF9zbm1wdHJhcCwgb2JqaWRfc25tcHRyYXBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbHVlIHR5cGUgaXMgYW4gT0lEIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHZhbHVlIGNvbnRlbnRzIGlzIG91ciBub3RpZmljYXRpb24gT0lEIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIG5vdGlmaWNhdGlvbl9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc2l6ZSBpbiBieXRlcyA9IG9pZCBsZW5ndGggKiBzaXplb2Yob2lkKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uX29pZF9sZW4gKiBzaXplb2Yob2lkKSk7CisKKyAgICAvKgorICAgICAqIGFkZCBpbiB0aGUgYWRkaXRpb25hbCBvYmplY3RzIGRlZmluZWQgYXMgcGFydCBvZiB0aGUgdHJhcAorICAgICAqLworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5vdGlmaWNhdGlvbl92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2luZGV4X29pZCwgaWZfaW5kZXhfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaWZfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlmX2luZGV4KSk7CisKKyAgICAvKgorICAgICAqIGlmIHdlIHdhbnQgdG8gaW5zZXJ0IGFkZGl0aW9uYWwgb2JqZWN0cywgd2UgZG8gaXQgaGVyZSAKKyAgICAgKi8KKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZub3RpZmljYXRpb25fdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9hZG1pbl9zdGF0dXNfb2lkLCBpZl9hZG1pbl9zdGF0dXNfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaWZfYWRtaW5fc3RhdHVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpZl9hZG1pbl9zdGF0dXMpKTsKKworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJm5vdGlmaWNhdGlvbl92YXJzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX29wZXJfc3RhdHVzX29pZCwgaWZfb3Blcl9zdGF0dXNfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaWZfb3Blcl9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlmX29wZXJfc3RhdHVzKSk7CisKKyAgICAvKgorICAgICAqIHNlbmQgdGhlIHRyYXAgb3V0LiAgVGhpcyB3aWxsIHNlbmQgaXQgdG8gYWxsIHJlZ2lzdGVyZWQKKyAgICAgKiByZWNlaXZlcnMgKHNlZSB0aGUgIlNFVFRJTkcgVVAgVFJBUCBBTkQvT1IgSU5GT1JNIERFU1RJTkFUSU9OUyIKKyAgICAgKiBzZWN0aW9uIG9mIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlLiAKKyAgICAgKi8KKyAgICBERUJVR01TR1RMKCgicnN5czpsaW5rVXBEb3duTm90aWZpY2F0aW9ucyIsICJzZW5kaW5nIHRoZSB0cmFwXG4iKSk7CisgICAgc2VuZF92MnRyYXAobm90aWZpY2F0aW9uX3ZhcnMpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBjcmVhdGVkIG5vdGlmaWNhdGlvbiB2YXJpYWJsZSBsaXN0IAorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJyc3lzOmxpbmtVcERvd25Ob3RpZmljYXRpb25zIiwgImNsZWFuaW5nIHVwXG4iKSk7CisgICAgc25tcF9mcmVlX3ZhcmJpbmQobm90aWZpY2F0aW9uX3ZhcnMpOworfQorCiAvKioKICAqIGNoZWNrIGVudHJ5IGZvciB1cGRhdGUKICAqCiAgKi8KIHN0YXRpYyB2b2lkCiBfY2hlY2tfaW50ZXJmYWNlX2VudHJ5X2Zvcl91cGRhdGVzKGlmVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICppZmNvbnRhaW5lcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2RfY29udGFpbmVyICpjZGMpCiB7CiAgICAgY2hhciAgICAgICAgICAgIG9wZXJfY2hhbmdlZCA9IDA7Ci0gICAgdV9sb25nIGxhc3RjaGFuZ2UgPSByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZTsKKyAgICBpbnQgbGFzdGNoYW5nZWQgPSByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqaWZjb250YWluZXIgPSBjZGMtPmN1cnJlbnQ7CiAKICAgICAvKgogICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeS4gV2UgY2FuIGRvIHRoaXMgZGlyZWN0bHksIHNpbmNlCiAgICAgICogYm90aCBjb250YWluZXJzIHVzZSB0aGUgc2FtZSBpbmRleC4KICAgICAgKi8KICAgICBuZXRzbm1wX2ludGVyZmFjZV9lbnRyeSAqaWZlbnRyeSA9Ci0gICAgICAgIENPTlRBSU5FUl9GSU5EKGlmY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgKG5ldHNubXBfaW50ZXJmYWNlX2VudHJ5KilDT05UQUlORVJfRklORChpZmNvbnRhaW5lciwgcm93cmVxX2N0eCk7CiAKICNpZmRlZiBVU0lOR19JUF9NSUJfSVBWNElOVEVSRkFDRVRBQkxFX0lQVjRJTlRFUkZBQ0VUQUJMRV9NT0RVTEUKICAgICAvKgpAQCAtMTkzLDI4ICszNDcsNDAgQEAKICAgICAgICAgICogZGVsZXRlZCAoYW5kIHRodXMgbmVlZCB0byB1cGRhdGUgaWZUYWJsZUxhc3RDaGFuZ2VkKT8KICAgICAgICAgICovCiAgICAgICAgIGlmICghcm93cmVxX2N0eC0+a25vd25fbWlzc2luZykgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcgPSAxOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIG1pc3NpbmcgZW50cnkgJXNcbiIscm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUpKTsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZBZG1pblN0YXR1cyA9IElGQURNSU5TVEFUVVNfRE9XTjsKLSAgICAgICAgICAgIGlmICgoIShyb3dyZXFfY3R4LT5kYXRhLmlmZW50cnktPm5zX2ZsYWdzICYgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX0xBU1RDSEFOR0UpKQotICAgICAgICAgICAgICAgICYmIChyb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyAhPSBJRk9QRVJTVEFUVVNfRE9XTikpCi0gICAgICAgICAgICAgICAgb3Blcl9jaGFuZ2VkID0gMTsKICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzID0gSUZPUEVSU1RBVFVTX0RPV047CisgICAgICAgICAgICBvcGVyX2NoYW5nZWQgPSAxOworICAgICAgICB9CisgICAgICAgIGlmIChyb3dyZXFfY3R4LT5rbm93bl9taXNzaW5nKSB7CisgICAgICAgICAgICB0aW1lX3Qgbm93ID0gbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCk7CisgICAgICAgICAgICB1X2xvbmcgZGlmZiA9IChub3cgLSByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZSkgLyAxMDA7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppZlRhYmxlOmFjY2VzcyIsICJtaXNzaW5nIGVudHJ5IGZvciAlbGQgc2Vjb25kc1xuIiwgZGlmZikpOworICAgICAgICAgICAgaWYgKGRpZmYgPj0gZmFkZW91dCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpZlRhYmxlOmFjY2VzcyIsICJtYXJraW5nIG1pc3NpbmcgZW50cnkgJXMgZm9yICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZhbCBhZnRlciAlZCBzZWNvbmRzXG4iLCByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmYWRlb3V0KSk7CisgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gY2RjLT5kZWxldGVkKQorICAgICAgICAgICAgICAgICAgIGNkYy0+ZGVsZXRlZCA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlmVGFibGVfZGVsZXRlZDpsaW5rZWRfbGlzdCIpOworICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGNkYy0+ZGVsZXRlZCkKKyAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgZGVsZXRlZCBpbnRlcmZhY2VcbiIpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY2RjLT5kZWxldGVkLCByb3dyZXFfY3R4KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAidXBkYXRpbmcgZXhpc3RpbmcgZW50cnlcbiIpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImlmVGFibGU6YWNjZXNzIiwgInVwZGF0aW5nIGV4aXN0aW5nIGVudHJ5ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSkpOwogCiAjaWZkZWYgVVNJTkdfSUZfTUlCX0lGWFRBQkxFX0lGWFRBQkxFX01PRFVMRQogICAgICAgICB7CiAgICAgICAgICAgICBpbnQgcmMgPSBzdHJjbXAocm93cmVxX2N0eC0+ZGF0YS5pZk5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZlbnRyeS0+bmFtZSk7CiAgICAgICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgICAgIHN0YXRpYyBpbnQgbG9nZ2VkID0gMDsKLSAgICAgICAgICAgICAgICBpZiAoIWxvZ2dlZCkgewotICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTmFtZSBvZiBhbiBpbnRlcmZhY2UgY2hhbmdlZC4gU3VjaCAiIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnRlcmZhY2VzIHdpbGwga2VlcCBpdHMgb2xkIG5hbWUgaW4gSUYtTUlCLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIGxvZ2dlZCA9IDE7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgIk5hbWUgb2YgYW4gaW50ZXJmYWNlIGNoYW5nZWQuIFN1Y2ggIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAiaW50ZXJmYWNlcyB3aWxsIGtlZXAgaXRzIG9sZCBuYW1lIGluIElGLU1JQi5cbiIpKTsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAiaW50ZXJmYWNlICVzIGNoYW5nZWQgbmFtZSB0byAlcywgaWdub3JpbmdcbiIsCiAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZOYW1lLCBpZmVudHJ5LT5uYW1lKSk7CiAgICAgICAgICAgICB9CkBAIC0yNTMsMTAgKzQxOSw2MyBAQAogICAgIC8qCiAgICAgICogaWYgaWZPcGVyU3RhdHVzIGNoYW5nZWQsIHVwZGF0ZSBpZkxhc3RDaGFuZ2UKICAgICAgKi8KLSAgICBpZiAob3Blcl9jaGFuZ2VkKQorICAgIGlmIChvcGVyX2NoYW5nZWQpIHsKICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2UgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyNpZmRlZiBVU0lOR19JRl9NSUJfSUZYVEFCTEVfSUZYVEFCTEVfTU9EVUxFCisgICAgICAgIGlmIChyb3dyZXFfY3R4LT5kYXRhLmlmTGlua1VwRG93blRyYXBFbmFibGUgPT0gMSkgeworICAgICAgICAgICAgaWYgKHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzID09IElGT1BFUlNUQVRVU19VUCkgeworICAgICAgICAgICAgICAgIG9pZCBub3RpZmljYXRpb25fb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDUsIDQgfTsKKyAgICAgICAgICAgICAgICBzZW5kX2xpbmtVcERvd25Ob3RpZmljYXRpb25zKG5vdGlmaWNhdGlvbl9vaWQsIE9JRF9MRU5HVEgobm90aWZpY2F0aW9uX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmQWRtaW5TdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmT3BlclN0YXR1cyk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzID09IElGT1BFUlNUQVRVU19ET1dOKSB7CisgICAgICAgICAgICAgICAgb2lkIG5vdGlmaWNhdGlvbl9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNSwgMyB9OworICAgICAgICAgICAgICAgIHNlbmRfbGlua1VwRG93bk5vdGlmaWNhdGlvbnMobm90aWZpY2F0aW9uX29pZCwgT0lEX0xFTkdUSChub3RpZmljYXRpb25fb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZBZG1pblN0YXR1cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZPcGVyU3RhdHVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCiAgICAgZWxzZQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTGFzdENoYW5nZSA9IGxhc3RjaGFuZ2U7CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZMYXN0Q2hhbmdlID0gbGFzdGNoYW5nZWQ7Cit9CisKKy8qKgorICogUmVtb3ZlIGFsbCBvbGQgaW50ZXJmYWNlcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXMgdGhlIG5ld2x5IGFkZGVkIG9uZS4KKyAqLworc3RhdGljIHZvaWQKK19jaGVja19hbmRfcmVwbGFjZV9vbGQobmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmlmZW50cnksCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICppdDsKKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4OworICAgIG5ldHNubXBfY29udGFpbmVyICp0b19kZWxldGU7CisKKyAgICB0b19kZWxldGUgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpZlRhYmxlX2RlbGV0ZWQ6bGlua2VkX2xpc3QiKTsKKyAgICBpZiAoTlVMTCA9PSB0b19kZWxldGUpIHsKKyAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGRuJ3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgZGVsZXRlZCBpbnRlcmZhY2VcbiIpOworICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihjb250YWluZXIpOworICAgIGZvciAocm93cmVxX2N0eCA9IElURVJBVE9SX0ZJUlNUKGl0KTsgcm93cmVxX2N0eDsgcm93cmVxX2N0eCA9IElURVJBVE9SX05FWFQoaXQpKSB7CisgICAgICAgIGlmIChzdHJjbXAoaWZlbnRyeS0+bmFtZSwgcm93cmVxX2N0eC0+ZGF0YS5pZmVudHJ5LT5uYW1lKSA9PSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAicmVtb3ZpbmcgaW50ZXJmYWNlICVsZCBkdWUgdG8gbmV3ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAobG9uZykgcm93cmVxX2N0eC0+ZGF0YS5pZmVudHJ5LT5pbmRleCwgaWZlbnRyeS0+bmFtZSkpOworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVCh0b19kZWxldGUsIHJvd3JlcV9jdHgpOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKHRvX2RlbGV0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9kZWxldGVfbWlzc2luZ19pbnRlcmZhY2UsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgQ09OVEFJTkVSX0ZSRUUodG9fZGVsZXRlKTsKIH0KIAogLyoqCkBAIC0yNzcsNiArNDk2LDkgQEAKICAgICByb3dyZXFfY3R4ID0gaWZUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGlmZW50cnkpOwogICAgIGlmICgoTlVMTCAhPSByb3dyZXFfY3R4KSAmJgogICAgICAgICAoTUZEX1NVQ0NFU1MgPT0gaWZUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LCBpZmVudHJ5LT5pbmRleCkpKSB7CisgICAgICAgIGlmIChyZXBsYWNlX29sZCkKKyAgICAgICAgICAgICAgICBfY2hlY2tfYW5kX3JlcGxhY2Vfb2xkKGlmZW50cnksIGNvbnRhaW5lcik7CisKICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOwogICAgICAgICBpZiAoMCA9PSBfZmlyc3RfbG9hZCkgewogICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pZkxhc3RDaGFuZ2UgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKQEAgLTMwOCw2ICs1MzAsMjEgQEAKIH0KIAogLyoqCisgKiBhZGQgbmV3IGVudHJ5CisgKi8KK3N0YXRpYyB2b2lkCitfZGVsZXRlX21pc3NpbmdfaW50ZXJmYWNlKGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgiaWZUYWJsZTphY2Nlc3MiLCAicmVtb3ZpbmcgbWlzc2luZyBlbnRyeSAlc1xuIiwKKyAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlmTmFtZSkpOworCisgICAgQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsIHJvd3JlcV9jdHgpOworCisgICAgaWZUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7Cit9CisKKy8qKgogICogY29udGFpbmVyIHNodXRkb3duCiAgKgogICogQHBhcmFtIGNvbnRhaW5lcl9wdHIgQSBwb2ludGVyIHRvIHRoZSBjb250YWluZXIuCkBAIC0zNzEsNyArNjA4LDcgQEAKIGludAogaWZUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQogewotICAgIG5ldHNubXBfY29udGFpbmVyICppZmNvbnRhaW5lcjsKKyAgICBjZF9jb250YWluZXIgY2RjOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aWZUYWJsZTppZlRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImNhbGxlZFxuIikpOwogCkBAIC0zODQsMjMgKzYyMSwzNSBAQAogICAgIC8qCiAgICAgICogaWZUYWJsZSBnZXRzIGl0cyBkYXRhIGZyb20gdGhlIG5ldHNubXBfaW50ZXJmYWNlIEFQSS4KICAgICAgKi8KLSAgICBpZmNvbnRhaW5lciA9CisgICAgY2RjLmN1cnJlbnQgPQogICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2xvYWQoTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0lOVEVSRkFDRV9JTklUX05PRkxBR1MpOwotICAgIGlmIChOVUxMID09IGlmY29udGFpbmVyKQorICAgIGlmIChOVUxMID09IGNkYy5jdXJyZW50KQogICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOyAgICAgICAgLyogbXNnIGFscmVhZHkgbG9nZ2VkICovCiAKKyAgICBjZGMuZGVsZXRlZCA9IE5VTEw7IC8qIGNyZWF0ZWQgYXMgbmVlZGVkICovCisKICAgICAvKgogICAgICAqIHdlIGp1c3QgZ290IGEgZnJlc2ggY29weSBvZiBpbnRlcmZhY2UgZGF0YS4gY29tcGFyZSBpdCB0bwogICAgICAqIHdoYXQgd2UndmUgYWxyZWFkeSBnb3QsIGFuZCBtYWtlIGFueSBhZGp1c3RlbWVudHMuLi4KICAgICAgKi8KICAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKLSAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX2ludGVyZmFjZV9lbnRyeV9mb3JfdXBkYXRlcywgaWZjb250YWluZXIpOworICAgICAgICAgICAgICAgICAgICAgICBfY2hlY2tfaW50ZXJmYWNlX2VudHJ5X2Zvcl91cGRhdGVzLCAmY2RjKTsKKworICAgIC8qCisgICAgICogbm93IHJlbW92ZSBhbnkgbWlzc2luZyBpbnRlcmZhY2VzCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gY2RjLmRlbGV0ZWQpIHsKKyAgICAgICBDT05UQUlORVJfRk9SX0VBQ0goY2RjLmRlbGV0ZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfZGVsZXRlX21pc3NpbmdfaW50ZXJmYWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgICAgIENPTlRBSU5FUl9GUkVFKGNkYy5kZWxldGVkKTsKKyAgICB9CiAKICAgICAvKgogICAgICAqIG5vdyBhZGQgYW55IG5ldyBpbnRlcmZhY2VzCiAgICAgICovCi0gICAgQ09OVEFJTkVSX0ZPUl9FQUNIKGlmY29udGFpbmVyLAorICAgIENPTlRBSU5FUl9GT1JfRUFDSChjZGMuY3VycmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9hZGRfbmV3X2ludGVyZmFjZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKIApAQCAtNDA4LDExICs2NTcsMTEgQEAKICAgICAgKiBmcmVlIHRoZSBjb250YWluZXIuIHdlJ3ZlIGVpdGhlciBjbGFpbWVkIGVhY2ggaWZlbnRyeSwgb3IgcmVsZWFzZWQgaXQsCiAgICAgICogc28gdGhlIGRhbCBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRhaW5lci4KICAgICAgKi8KLSAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfY29udGFpbmVyX2ZyZWUoaWZjb250YWluZXIsCisgICAgbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2NvbnRhaW5lcl9mcmVlKGNkYy5jdXJyZW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19JTlRFUkZBQ0VfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aWZUYWJsZTppZlRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlbHUgcmVjb3Jkc1xuIiwgKHVuc2lnbmVkIGxvbmcpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgaWYgKF9maXJzdF9sb2FkKQogICAgICAgICBfZmlyc3RfbG9hZCA9IDA7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2RhdGFfYWNjZXNzLmgKaW5kZXggOWFhYTQyZS4uNDQ1OTI5YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kYXRhX2FjY2Vzcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtNDYsNyArNDYsOSBAQAogICAgICAqIEEgMTAgTWJwcyBzdHJlYW0gY2FuIHdyYXAgaWYqT2N0ZXRzIGluIH41NyBtaW51dGVzLgogICAgICAqIEF0IDEwMCBNYnBzIGl0IGlzIH41IG1pbnV0ZXMsIGFuZCBhdCAxIEdicHMsIH4zNCBzZWNvbmRzLgogICAgICAqLwotI2RlZmluZSBJRlRBQkxFX0NBQ0hFX1RJTUVPVVQgICAxNQorI2RlZmluZSBJRlRBQkxFX0NBQ0hFX1RJTUVPVVQgICAzCisKKyNkZWZpbmUgSUZUQUJMRV9SRU1PVkVfTUlTU0lOR19BRlRFUiAgICAgKDUgKiA2MCkgLyogc2Vjb25kcyAqLwogCiAgICAgdm9pZCAgICAgICAgICAgIGlmVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKmNvbnRhaW5lcl9wdHJfcHRyLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlRhYmxlL2lmVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMjU3NDllMy4uNDFkMzhlZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZUYWJsZS9pZlRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Nyw2ICs0OCwyMSBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX2NvbnRhaW5lcl9nZXQsIGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmeHRhYmxlX3NodXRkb3duX2ludGVyZmFjZSwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfY29udGFpbmVyX3NpemUsIGlmWFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZlhUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpZlhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaWZYVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmWFRhYmxlX2NvbnRhaW5lcl9nZXQsIGlmWFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX2NvbnRhaW5lcl9zaXplLCBpZlRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpZnRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlmVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlmdGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaWZUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODIsMTkgKzk4LDIzIEBACiBzdGF0aWMgdm9pZCAgICAgX2lmVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaWZUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlmVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpZlRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpZlRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaWZUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaWZUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlmVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtMTAyLDEyICsxMjIsMTUgQEAKICAgICBpZlRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlmVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaWZUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGlmVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xNDUsNyArMTY4LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNjAsNyArMTgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogaWZUYWJsZV9kYXRhICAgKmlmVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKTsKIApAQCAtMjIyLDcgKzI0NSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElGVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElGVEFCTEVfTUFYX0NPTDsKQEAgLTI1MCw3ICsyNzMsNyBAQAogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9pZlRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjczLDcgKzI5Niw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX2lmVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjg2LDExICszMDksMTQgQEAKICAgICByZWdpbmZvID0KICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoImlmVGFibGUiLCBoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZlRhYmxlX29pZCwgaWZUYWJsZV9vaWRfc2l6ZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIQU5ETEVSX0NBTl9SV1JJVEUKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURQorI2Vsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCisgICAgICAgICAgICApOworCiAgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaWZUYWJsZVxuIik7CiAgICAgICAgIHJldHVybjsKQEAgLTMwOCw3ICszMzQsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzMxLDcgKzM1Nyw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC0zNzIsOCArMzk4LDggQEAKICAgICAgKiByZWdpc3RlciBpZlRhYmxlTGFzdENoYW5nZWQKICAgICAgKi8KICAgICB7Ci0gICAgICAgIG9pZCAgICAgICAgICAgICBpZnRsY19vaWRbXSA9IHsgSUZUQUJMRV9MQVNUX0NIQU5HRSB9OwotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgIGNvbnN0IG9pZCAgICAgICBpZnRsY19vaWRbXSA9IHsgSUZUQUJMRV9MQVNUX0NIQU5HRSB9OworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaWZUYWJsZUxhc3RDaGFuZ2VkIiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ0bGNfb2lkLCBPSURfTEVOR1RIKGlmdGxjX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKQEAgLTY1Niw3ICs2ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTcxMCw3ICs3MzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmVGFibGU6X21mZF9pZlRhYmxlX29iamVjdF9sb29rdXAiLApAQCAtOTcwLDcgKzk5Niw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMDM5LDggKzEwNjUsOCBAQAogCiAKIAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMjY1LDcgKzEyOTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTEzMTIsNyArMTMzOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKQEAgLTE0MjMsNyArMTQ0OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTQ5Nyw3ICsxNTIzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYzsKIApAQCAtMTU3Niw3ICsxNjAyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTYyMyw3ICsxNjQ5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTY2NSw3ICsxNjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlRhYmxlOl9tZmRfaWZUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE3NDMsNyArMTc2OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTc5Niw3ICsxODIyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZUYWJsZTpfbWZkX2lmVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsCkBAIC0xODE4LDcgKzE4NDQsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaWZUYWJsZV9pcnJldmVyc2libGVfY29tbWl0ICovCi0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKQEAgLTE5NjQsNiArMTk5MCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pZlRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaWZUYWJsZV9yb3dyZXFfY3R4ICoKIGlmVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlmVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKIHsKQEAgLTE5ODUsNyArMjAxMiw4IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChpZlRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKyAgICByb3dyZXFfY3R4ID0gKGlmVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoaWZUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jCmluZGV4IDhiOWI3Y2UuLmJiM2U3MzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yOSw2ICszMCw5IEBACiAKICNpbmNsdWRlICJpZlhUYWJsZV9pbnRlcmZhY2UuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaWZUYWJsZV9jb250YWluZXJfZ2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaWZUYWJsZV9jb250YWluZXJfc2l6ZSkKKwogLyoKICAqIG5vdCBzdXJlIGlmIHdlIHdhbnQgdG8gc3VwcG9ydCBzZXQgZm9yIHByb21pc2N1b3VzIG1vZGUsIGJlY2F1c2UKICAqIDEpIGNhcmVmdWwgdGhvdWdodCBzaG91bGQgZ28gaW50byBhbnkgc2V0dGFibGUgb2JqZWN0IHRoYXQgcGVyZm9ybXMKQEAgLTM4LDkgKzQyLDggQEAKICAqLwogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX1BST01JU0NVT1VTTU9ERV9TRVQKIAotb2lkICAgICAgICAgICAgIGlmWFRhYmxlX29pZFtdID0geyBJRlhUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpZlhUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZYVGFibGVfb2lkKTsKLWNvbnN0IGNoYXIgICAgICpyb3dfdG9rZW4gPSAiaWZYVGFibGUiOworY29uc3Qgb2lkICAgICAgIGlmWFRhYmxlX29pZFtdID0geyBJRlhUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpZlhUYWJsZV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoaWZYVGFibGVfb2lkKTsKIAogaWZYVGFibGVfcmVnaXN0cmF0aW9uIGlmWFRhYmxlX3VzZXJfY29udGV4dDsKIHN0YXRpYyBpZlhUYWJsZV9yZWdpc3RyYXRpb24gKmlmWFRhYmxlX3VzZXJfY29udGV4dF9wOwpAQCAtMjM2LDkgKzIzOSw5IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBzYXZlIGNoYW5nZWQgcm93cywgaWYgeW91IGhhdmVuJ3QgYWxyZWFkeQorICAgICAgICAgICAgICogbm90aWZ5IGxpYnJhcnkgdG8gc2F2ZSBjaGFuZ2VkIHJvd3MKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9zdG9yZShuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKICAgICAgICAgfQogCkBAIC00MDAsNyArNDAzLDcgQEAKIGlmTmFtZV9nZXQoaWZYVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsIGNoYXIgKippZk5hbWVfdmFsX3B0cl9wdHIsCiAgICAgICAgICAgIHNpemVfdCAqIGlmTmFtZV92YWxfcHRyX2xlbl9wdHIpCiB7Ci0gICAgaW50ICAgICAgICAgICAgIHRtcF9sZW47CisgICAgc2l6ZV90IHRtcF9sZW47CiAKICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCiAgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gaWZOYW1lX3ZhbF9wdHJfcHRyKQpAQCAtNDI1LDcgKzQyOCw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBpZk5hbWUgZGF0YQogICAgICAgICAgKi8KLSAgICAgICAgKCppZk5hbWVfdmFsX3B0cl9wdHIpID0gbWFsbG9jKHRtcF9sZW4pOworICAgICAgICAoKmlmTmFtZV92YWxfcHRyX3B0cikgPSAoY2hhciopbWFsbG9jKHRtcF9sZW4pOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlmTmFtZV92YWxfcHRyX3B0cikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKICAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CkBAIC0xNDkzLDcgKzE0OTYsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhbGxvY2F0ZSBzcGFjZSBmb3IgaWZBbGlhcyBkYXRhCiAgICAgICAgICAqLwotICAgICAgICAoKmlmQWxpYXNfdmFsX3B0cl9wdHIpID0KKyAgICAgICAgKCppZkFsaWFzX3ZhbF9wdHJfcHRyKSA9IChjaGFyKikKICAgICAgICAgICAgIG1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXNfbGVuICoKICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5pZkFsaWFzWzBdKSk7CiAgICAgICAgIGlmIChOVUxMID09ICgqaWZBbGlhc192YWxfcHRyX3B0cikpIHsKQEAgLTE1NzMsNiArMTU3Niw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlmQ291bnRlckRpc2NvbnRpbnVpdHlUaW1lX2dldCAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKIC8qKiBAfSAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI1MzEsNSArMjUzNSw3IEBACiAgICAgcmV0dXJuIHJjOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMgKi8KIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogLyoqIEB9ICovCiAvKiogQHsgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKaW5kZXggZTMyYWNjOC4uYmEyMmY5NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlLmgKQEAgLTk0LDggKzk0LDggQEAKICAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICppZlhUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaWZYVGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaWZYVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGlmWFRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpZlhUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaWZYVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImlmWFRhYmxlX2ludGVyZmFjZS5oIgpAQCAtMjE4LDcgKzIxOCw3IEBACiAgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMzEuMS4xLCBsZW5ndGg6IDkKICAgICAgKi8KIAotCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGludCAgICAgICAgICAgICBpZlhUYWJsZV91bmRvX3NldHVwKGlmWFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKICAgICBpbnQgICAgICAgICAgICAgaWZYVGFibGVfdW5kb19jbGVhbnVwKGlmWFRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CkBAIC00MzgsNyArNDM4LDcgQEAKIAogCiAgICAgaW50ICAgICAgICAgICAgIGlmWFRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyhpZlhUYWJsZV9yb3dyZXFfY3R4ICogY3R4KTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmggYi9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfY29uc3RhbnRzLmgKaW5kZXggNzI4ZWY1Ny4uNjdlMTk5NiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2NvbnN0YW50cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9jb25zdGFudHMuaApAQCAtNjcsNyArNjcsMTEgQEAKICAgICAgKiBUT0RPOjQwNTpyOiBSZXZpZXcgSUZYVEFCTEVfU0VUVEFCTEVfQ09MUyBtYWNyby4KICAgICAgKiBPUiB0b2dldGhlciBhbGwgdGhlIHdyaXRhYmxlIGNvbHMuCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBJRlhUQUJMRV9TRVRUQUJMRV9DT0xTIChDT0xVTU5fSUZMSU5LVVBET1dOVFJBUEVOQUJMRV9GTEFHIHwgQ09MVU1OX0lGQUxJQVNfRkxBRykKKyNlbHNlIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyNkZWZpbmUgSUZYVEFCTEVfU0VUVEFCTEVfQ09MUyAwCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICAvKgogICAgICAqIE5PVEVTIG9uIGVudW1zCiAgICAgICogPT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lmLW1pYi9pZlhUYWJsZS9pZlhUYWJsZV9pbnRlcmZhY2UuYwppbmRleCBkOWIxODQ3Li4yM2I1MGQwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pZi1taWIvaWZYVGFibGUvaWZYVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmWFRhYmxlL2lmWFRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw4IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ4LDYgKzUwLDE2IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaWZYVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2FjaGVfZmluZF9ieV9vaWQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgxLDE5ICs5MywyMyBAQAogc3RhdGljIHZvaWQgICAgIF9pZlhUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZYVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpZlhUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpZlhUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZYVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpZlhUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpZlhUYWJsZV9yZWdpc3RyYXRpb24gKgogaWZYVGFibGVfcmVnaXN0cmF0aW9uX3NldChpZlhUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCiB7CkBAIC0xMDEsMTIgKzExNywxNSBAQAogICAgIGlmWFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaWZYVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaWZYVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JRlhUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogaWZYVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzAsNyArMTQ5LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pZlhUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaWZYVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lmWFRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDUsNyArMTY0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogaWZYVGFibGVfZGF0YSAgKmlmWFRhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCk7CiAKQEAgLTE4OCw3ICsyMDcsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJRlhUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSUZYVEFCTEVfTUFYX0NPTDsKQEAgLTIyMyw3ICsyNDIsNyBAQAogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0ID0gX21mZF9pZlhUYWJsZV9wb3N0X3JlcXVlc3Q7CiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgLyoKICAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKICAgICAgKi8KQEAgLTI0Niw3ICsyNjUsNyBAQAogICAgICAqLwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzID0KICAgICAgICAgX21mZF9pZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC0yNjAsMTEgKzI3OSwxNCBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaWZYVGFibGUiLCBoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZlhUYWJsZV9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmWFRhYmxlX29pZF9zaXplLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhBTkRMRVJfQ0FOX1JXUklURQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFCisjZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWQorI2VuZGlmICAgICAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLworICAgICAgICAgICAgKTsKKwogICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGlmWFRhYmxlXG4iKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMjgyLDcgKzMwNCw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMDUsNyArMzI3LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTM1Miw2ICszNzQsNyBAQAogICogQGludGVybmFsCiAgKiBTaHV0ZG93biB0aGUgdGFibGUgaWZYVGFibGUKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX1NIVVRET1dOX0lOVEVSRkFDRQogdm9pZAogX2lmWFRhYmxlX3NodXRkb3duX2ludGVyZmFjZShpZlhUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQogewpAQCAtMzYwLDYgKzM4Myw3IEBACiAgICAgICovCiAgICAgX2lmWFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmaWZYVGFibGVfaWZfY3R4KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lGWFRBQkxFX1NIVVRET1dOX0lOVEVSRkFDRSAqLwogCiB2b2lkCiBpZlhUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2YykKQEAgLTU1Miw3ICs1NzYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNjA3LDcgKzYzMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmWFRhYmxlOl9tZmRfaWZYVGFibGVfb2JqZWN0X2xvb2t1cCIsCkBAIC04NDUsNyArODY5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtOTEyLDcgKzkzNiw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaWZYVGFibGVfZ2V0X3ZhbHVlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xMTYyLDcgKzExODYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTE5Myw3ICsxMjE3LDYgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pZlhUYWJsZV9jaGVja19vYmplY3RzICovCiAKLQogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKgogICogU0VUOiBjaGVjayBkZXBlbmRlbmNpZXMKQEAgLTEyMTAsNyArMTIzMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZYVGFibGU6X21mZF9pZlhUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKQEAgLTEyOTQsNyArMTMxNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aWZYVGFibGU6X21mZF9pZlhUYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTM1Nyw3ICsxMzgwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNDU5LDcgKzE0ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE1MDYsNyArMTUyOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlhUYWJsZTpfbWZkX2lmWFRhYmxlX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE1MzksNyArMTU2Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaWZYVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlmWFRhYmxlOl9tZmRfaWZYVGFibGVfdW5kb19jb21taXQiLApAQCAtMTYzMiw3ICsxNjU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpZlhUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTY4Nyw3ICsxNzEwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlmWFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaWZYVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppZlhUYWJsZTpfbWZkX2lmWFRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLApAQCAtMTcwOSw3ICsxNzMyLDggQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lmWFRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNzg0LDcgKzE4MDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdV9pbnQgY29sLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYnVmKTsKIAotc3RhdGljIGNoYXIgICAgIHJvd190b2tlbltdID0gImlmWFRhYmxlIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJvd190b2tlbltdID0gImlmWFRhYmxlIjsKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogKl9pbml0X3BlcnNpc3RlbmNlIHNob3VsZCBiZSBjYWxsZWQgZnJvbSB0aGUgbWFpbiB0YWJsZQpAQCAtMTc5OCwxMyArMTgyMiwxNyBAQAogdm9pZAogaWZYVGFibGVfY29udGFpbmVyX2luaXRfcGVyc2lzdGVuY2UobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKIHsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqKmNvbnRhaW5lcl9wOwogICAgIGludCAgICAgICAgICAgICByYzsKIAogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIHJvd190b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaWZYVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlLCBOVUxMLCBOVUxMKTsKKyAgICBuZXRzbm1wX2Fzc2VydChjb250YWluZXIpOworICAgIGNvbnRhaW5lcl9wID0gbmV0c25tcF9tZW1kdXAoJmNvbnRhaW5lciwgc2l6ZW9mKGNvbnRhaW5lcikpOworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lcl9wKTsKICAgICByYyA9IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9pZlhUYWJsZV9jb250YWluZXJfc2F2ZV9yb3dzLCBjb250YWluZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaWZYVGFibGVfY29udGFpbmVyX3NhdmVfcm93cywgY29udGFpbmVyX3ApOwogCiAgICAgaWYgKHJjICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyBmb3IgU1RPUkVfREFUQSBjYWxsYmFjayAiCkBAIC0xODI3LDcgKzE4NTUsNyBAQAogICAgIC8qCiAgICAgICogc2F2ZSBhbGwgcm93cwogICAgICAqLwotICAgIENPTlRBSU5FUl9GT1JfRUFDSCgobmV0c25tcF9jb250YWluZXIgKikgY2xpZW50YXJnLAorICAgIENPTlRBSU5FUl9GT1JfRUFDSCgqKG5ldHNubXBfY29udGFpbmVyICoqKWNsaWVudGFyZywKICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopCiAgICAgICAgICAgICAgICAgICAgICAgIF9pZlhUYWJsZV9jb250YWluZXJfcm93X3NhdmUsIHR5cGUpOwogCkBAIC0xODcwLDcgKzE4OTgsNyBAQAogICAgICAqIGJlIHRyZWF0ZWQgYSBsaXR0bGUgZGlmZmVyZW50bHkuIFNwZWNpZmljYWxseSwgeW91IHdpbGwgbmVlZAogICAgICAqICg0ICogbGVuKSArIDQgWzMgQVNDSUkgY2hhcnMgcGVyIGJ5dGUgKyAxIGZvciAuLCArIDQgZm9yIGxlbl0uCiAgICAgICoKLSAgICAgKiAzKSBBbHNvLCByZW1lYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGVyYXRvcgorICAgICAqIDMpIEFsc28sIHJlbWVtYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGFyYXRvcgogICAgICAqIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBlYWNoIGNvbHVtbiBpcyBwcmVmaXhlZCBieSB0aGUKICAgICAgKiBjb2x1bW4gbnVtYmVyIGFuZCBhIHNlbWljb2xvbi4gVG8gYWxsb3cgZm9yIHRoZSBtYXhpbXVtCiAgICAgICogY29sdW1uIHZhbHVlcywgMTIgYnl0ZXMgWzExIGZvciBvaWQgKyAxIGZvciAnOiddIHBlcgpAQCAtMTk5MSw3ICsyMDE5LDcgQEAKICAgICAgICAgICAgICAgICAgIl9pZlhUYWJsZV9jb250YWluZXJfcm93X3Jlc3RvcmVcbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChjb250YWluZXIsICZpbmRleCk7CisgICAgcm93cmVxX2N0eCA9IChpZlhUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChjb250YWluZXIsICZpbmRleCk7CiAgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgewogICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJlcnJvciBmaW5kaW5nIHJvdyBpbmRleCBpbiAiCiAgICAgICAgICAgICAgICAgICJfaWZYVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlXG4iKTsKQEAgLTIwMDIsNyArMjAzMCw3IEBACiAgICAgICogbG9vcCB0aHJvdWdoIGFuZCBnZXQgZWFjaCBjb2x1bW4KICAgICAgKi8KICAgICBidWYgPSBza2lwX3doaXRlKGJ1Zik7Ci0gICAgd2hpbGUgKChOVUxMICE9IGJ1ZikgJiYgaXNkaWdpdCgqYnVmKSkgeworICAgIHdoaWxlICgoTlVMTCAhPSBidWYpICYmIGlzZGlnaXQoKmJ1ZiAmIDB4RkYpKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGV4dHJhY3QgY29sdW1uLCBza2lwICc6JwogICAgICAgICAgKi8KQEAgLTIwODEsNyArMjEwOSw4IEBACiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDT0xVTU5fSUZBTElBUzogICAvKiogRGlzcGxheVN0cmluZyA9IEFTTl9PQ1RFVF9TVFIgKi8KLSAgICAgICAgYnVmID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoYnVmLCByb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXMsCisgICAgICAgIGJ1ZiA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSByb3dyZXFfY3R4LT5kYXRhLmlmQWxpYXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuaWZBbGlhc19sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtMjE0Myw2ICsyMTcyLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfRVhURVJOQUxfQUNDRVNTCiBpZlhUYWJsZV9yb3dyZXFfY3R4ICoKIGlmWFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpZlhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQogewpAQCAtMjE2NCw3ICsyMTk0LDggQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9IENPTlRBSU5FUl9GSU5EKGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKyAgICByb3dyZXFfY3R4ID0gKGlmWFRhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSU5EKGlmWFRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSUZYVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGUuaAppbmRleCBkYWM3MGNlLi4yYzczMWE2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlLmgKQEAgLTIyLDggKzIyLDEyIEBACiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXgpCiBjb25maWdfcmVxdWlyZShpcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bCkKKyNlbGlmIGRlZmluZWQoc29sYXJpczIpICYmIGRlZmluZWQoIEhBVkVfTUlCMl9JUElGU1RBVFNFTlRSWV9UICkKK2NvbmZpZ19yZXF1aXJlKGlwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMpCiAjZWxzZQotI2Vycm9yICJ0aGUgcm91dGUgZGF0YSBhY2Nlc3MgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtLiIKK2NvbmZpZ19lcnJvcih0aGUgcm91dGUgZGF0YSBhY2Nlc3MgbGlicmFyeSBpcyBub3QgYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQuKQogI2VuZGlmCiAKIC8qKiBuZWVkIGludGVyZmFjZSBmb3IgaWZJbmRleCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYwppbmRleCA5OWIzZGU0Li44NGMxODEwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9jb21tb24uYwpAQCAtNTUsNiArNTUsOCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiX3JvdXRlIik7CisKICAgICByYyA9ICBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CiAgICAgaWYgKDAgIT0gcmMpIHsKICAgICAgICAgbmV0c25tcF9hY2Nlc3Nfcm91dGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBORVRTTk1QX0FDQ0VTU19ST1VURV9GUkVFX05PRkxBR1MpOwpAQCAtMjQwLDggKzI0Miw3IEBACiAgICAgbGhzLT5ydF9wcm90byA9IHJocy0+cnRfcHJvdG87CiAKICNpZmRlZiBVU0lOR19JUF9GT1JXQVJEX01JQl9JUENJRFJST1VURVRBQkxFX0lQQ0lEUlJPVVRFVEFCTEVfTU9EVUxFCi0gICAgaWYgKE5VTEwgIT0gbGhzLT5ydF9pbmZvKQotICAgICAgICBTTk1QX0ZSRUUobGhzLT5ydF9pbmZvKTsKKyAgICBTTk1QX0ZSRUUobGhzLT5ydF9pbmZvKTsKICAgICBpZiAoTlVMTCAhPSByaHMtPnJ0X2luZm8pCiAgICAgICAgIHNubXBfY2xvbmVfbWVtKCh2b2lkICoqKSAmbGhzLT5ydF9pbmZvLCByaHMtPnJ0X2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgIHJocy0+cnRfaW5mb19sZW4gKiBzaXplb2Yob2lkKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuYwppbmRleCBkZTQyOTIwLi5mZjg5MTYxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9pb2N0bC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2lvY3RsLmMKQEAgLTU0LDEyICs1NCw5IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaD4KIAogI2luY2x1ZGUgImlwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaCIKQEAgLTY5LDEwICs2NiwxMCBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbmRpZgogCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKICMgICBkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0gKICMgICBkZWZpbmUgcnRfaGFzaCBydF9wYWQxCiAjZW5kaWYKIApAQCAtMTAxLDcgKzk4LDcgQEAKIAogICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIE5FVFNOTVBfUk9VVEVfV1JJVEVfUFJPVE9DT0wpOwogICAgIGlmIChzIDwgMCkgewotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInNvY2tldCIpOworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIm5ldHNubXBfaW9jdGxfcm91dGVfc2V0X3Y0OiBzb2NrZXQiKTsKICAgICAgICAgcmV0dXJuIC0zOwogICAgIH0KIApAQCAtMTEwLDcgKzEwNyw3IEBACiAgICAgZHN0LnNpbl9mYW1pbHkgPSBBRl9JTkVUOwogICAgIG1lbWNweSgmZHN0LnNpbl9hZGRyLnNfYWRkciwgZW50cnktPnJ0X2Rlc3QsIDQpOwogICAgIERFQlVHU1RSID0gaW5ldF9udG9hKGRzdC5zaW5fYWRkcik7Ci0gICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZSIsIioqKiByb3V0ZSB0byAlc1xuIiwgREVCVUdTVFIpKTsKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlIiwiYWRkIHJvdXRlIHRvICVzXG4iLCBERUJVR1NUUikpOwogCiAgICAgZ2F0ZXdheS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICBtZW1jcHkoJmdhdGV3YXkuc2luX2FkZHIuc19hZGRyLCBlbnRyeS0+cnRfbmV4dGhvcCwgNCk7CkBAIC0xMTgsNyArMTE1LDEwIEBACiAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZSIsIiAgICB2aWEgJXNcbiIsIERFQlVHU1RSKSk7CiAKICAgICBtYXNrLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgIG1hc2suc2luX2FkZHIuc19hZGRyID0gaHRvbmwoMCk7CisgICAgaWYgKGVudHJ5LT5ydF9wZnhfbGVuICE9IDApCisJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X21hc2soZW50cnktPnJ0X3BmeF9sZW4pOworICAgIGVsc2UKKwltYXNrLnNpbl9hZGRyLnNfYWRkciA9IGVudHJ5LT5ydF9tYXNrOwogICAgIERFQlVHU1RSID0gaW5ldF9udG9hKG1hc2suc2luX2FkZHIpOwogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGUiLCIgICAgbWFzayAlc1xuIiwgREVCVUdTVFIpKTsKIApAQCAtMTM3LDMwICsxMzcsMzEgQEAKICNlbmRpZgogCiAgICAgcmMgPSBpb2N0bChzLCBTSU9DQUREUlQsIChjYWRkcl90KSAmIHJvdXRlKTsKLSAgICBjbG9zZShzKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nX3BlcnJvcigiaW9jdGwiKTsKLSAgICAgICAgcmV0dXJuIC00OworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIm5ldHNubXBfaW9jdGxfcm91dGVfc2V0X3Y0OiBpb2N0bCIpOworICAgICAgICByYyA9IC00OwogICAgIH0KKyAgICBjbG9zZShzKTsKIAotICAgIHJldHVybiAwOworICAgIHJldHVybiByYzsKIH0KICNlbmRpZgogCiAjaWYgZGVmaW5lZCBTSU9DREVMUlQgJiYgIWRlZmluZWQoaXJpeDYpCiBpbnQgX25ldHNubXBfaW9jdGxfcm91dGVfZGVsZXRlX3Y0KG5ldHNubXBfcm91dGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gZHN0OworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBkc3QsIG1hc2s7CiAgICAgc3RydWN0IHNvY2thZGRyX2luIGdhdGV3YXk7CiAgICAgaW50ICAgICAgICAgICAgIHMsIHJjOwogICAgIFJURU5UUlkgICAgICAgICByb3V0ZTsKKyAgICBjaGFyICAgICAgICAgICAqREVCVUdTVFI7CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGVudHJ5KTsgLyogY2hlY2tlZCBpbiBuZXRzbm1wX2FyY2hfcm91dGVfZGVsZXRlICovCiAgICAgbmV0c25tcF9hc3NlcnQoKDQgPT0gZW50cnktPnJ0X2Rlc3RfbGVuKSAmJiAoNCA9PSBlbnRyeS0+cnRfbmV4dGhvcF9sZW4pKTsKIAogICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19SQVcsIE5FVFNOTVBfUk9VVEVfV1JJVEVfUFJPVE9DT0wpOwogICAgIGlmIChzIDwgMCkgewotICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInNvY2tldCIpOworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoIm5ldHNubXBfaW9jdGxfcm91dGVfZGVsZXRlX3Y0OiBzb2NrZXQiKTsKICAgICAgICAgcmV0dXJuIC0zOwogICAgIH0KIApAQCAtMTY4LDExICsxNjksMjAgQEAKIAogICAgIGRzdC5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKICAgICBtZW1jcHkoJmRzdC5zaW5fYWRkci5zX2FkZHIsIGVudHJ5LT5ydF9kZXN0LCA0KTsKKyAgICBERUJVR1NUUiA9IGluZXRfbnRvYShkc3Quc2luX2FkZHIpOworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGUiLCJkZWwgcm91dGUgdG8gJXNcbiIsIERFQlVHU1RSKSk7CisKKyAgICBtYXNrLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIGlmIChlbnRyeS0+cnRfcGZ4X2xlbiAhPSAwKQorCW1hc2suc2luX2FkZHIuc19hZGRyID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9tYXNrKGVudHJ5LT5ydF9wZnhfbGVuKTsKKyAgICBlbHNlCisJbWFzay5zaW5fYWRkci5zX2FkZHIgPSBlbnRyeS0+cnRfbWFzazsKIAogICAgIGdhdGV3YXkuc2luX2ZhbWlseSA9IEFGX0lORVQ7CiAgICAgbWVtY3B5KCZnYXRld2F5LnNpbl9hZGRyLnNfYWRkciwgZW50cnktPnJ0X25leHRob3AsIDQpOwogCiAgICAgbWVtY3B5KCZyb3V0ZS5ydF9kc3QsICZkc3QsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICBtZW1jcHkoJnJvdXRlLnJ0X2dlbm1hc2ssICZtYXNrLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7CiAgICAgbWVtY3B5KCZyb3V0ZS5ydF9nYXRld2F5LCAmZ2F0ZXdheSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwogCiAgICAgaWYgKDMyID09IGVudHJ5LT5ydF9wZnhfbGVuKQpAQCAtMTg2LDExICsxOTYsMTEgQEAKICNlbmRpZgogCiAgICAgcmMgPSBpb2N0bChzLCBTSU9DREVMUlQsIChjYWRkcl90KSAmIHJvdXRlKTsKLSAgICBjbG9zZShzKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nX3BlcnJvcigiaW9jdGwiKTsKKyAgICAgICAgc25tcF9sb2dfcGVycm9yKCJuZXRzbm1wX2lvY3RsX3JvdXRlX2RlbGV0ZV92NDogaW9jdGwiKTsKICAgICAgICAgcmMgPSAtNDsKICAgICB9CisgICAgY2xvc2Uocyk7CiAKICAgICByZXR1cm4gcmM7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfbGludXguYwppbmRleCA2YmY2YjA0Li4wZjgwZmU4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX2xpbnV4LmMKQEAgLTUzLDcgKzUzLDcgQEAKICAgICAgKiBmZXRjaCByb3V0ZXMgZnJvbSB0aGUgcHJvYyBmaWxlLXN5c3RlbToKICAgICAgKi8KICAgICBpZiAoIShpbiA9IGZvcGVuKCIvcHJvYy9uZXQvcm91dGUiLCAiciIpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3JvdXRlXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L3JvdXRlXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTcxLDkgKzcxLDkgQEAKIAogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBjaGFyICAgICAgICAgICAgcnRlbnRfbmFtZVszMl07Ci0gICAgICAgIGludCAgICAgICAgICAgICByZWZjbnQsIGZsYWdzLCByYzsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHJlZmNudCwgcmM7CiAgICAgICAgIHVpbnQzMl90ICAgICAgICBkZXN0LCBuZXh0aG9wLCBtYXNrOwotICAgICAgICB1bnNpZ25lZCAgICAgICAgdXNlOworICAgICAgICB1bnNpZ25lZCAgICAgICAgZmxhZ3MsIHVzZTsKIAogICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2NyZWF0ZSgpOwogCkBAIC04Myw3ICs4Myw3IEBACiAgICAgICAgICAqIEJFIGV0aDAgIDAwMDAwMDAwIEMwQTgwMTAxIDAwMDMgIDAgICAgICAwICAgMCAgIEZGRkZGRkZGIDE1MDAgMCAgIDAgCiAgICAgICAgICAqIExFIGV0aDAgIDAwMDAwMDAwIDAxMDFBOEMwIDAwMDMgIDAgICAgICAwICAgMCAgIDAwRkZGRkZGICAgIDAgMCAgIDAgIAogICAgICAgICAgKi8KLSAgICAgICAgcmMgPSBzc2NhbmYobGluZSwgIiVzICV4ICV4ICV4ICV1ICVkICVkICV4ICUqZCAlKmQgJSpkXG4iLAorICAgICAgICByYyA9IHNzY2FuZihsaW5lLCAiJXMgJXggJXggJXggJWQgJXUgJWQgJXggJSpkICUqZCAlKmRcbiIsCiAgICAgICAgICAgICAgICAgICAgIHJ0ZW50X25hbWUsICZkZXN0LCAmbmV4dGhvcCwKICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICogWFhYOiBmaXggdHlwZSBvZiB0aGUgYXJncyAKQEAgLTE2MSwxMiArMTYxLDEyIEBACiAgICAgICAgICAqIGFzIHRoZSBwb2xpY3ksIHRvIGRpc3Rpbmd1aXNlIGJldHdlZW4gdGhlbS4gSG9wZWZ1bGx5IHRoaXMgaXMKICAgICAgICAgICogdW5pcXVlLgogICAgICAgICAgKiB4eHgtcmtzOiBJdCBzaG91bGQgcmVhbGx5IG9ubHkgYmUgZm9yIHRoZSBkdXBsaWNhdGUgY2FzZSwgYnV0IHRoYXQKLSAgICAgICAgICogICAgIHdvdWxkIGJlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbkkgd2FudCB0byBnZXQgaW50byBub3cuIEZpeCBsYXRlci4KKyAgICAgICAgICogICAgIHdvdWxkIGJlIG1vcmUgY29tcGxpY2F0ZWQgdGhhbiBJIHdhbnQgdG8gZ2V0IGludG8gbm93LiBGaXggbGF0ZXIuCiAgICAgICAgICAqLwogICAgICAgICBpZiAoMCA9PSBuZXh0aG9wKSB7Ci0gICAgICAgICAgICBlbnRyeS0+cnRfcG9saWN5ID0gJmVudHJ5LT5pZl9pbmRleDsKLSAgICAgICAgICAgIGVudHJ5LT5ydF9wb2xpY3lfbGVuID0gMTsKLSAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0FDQ0VTU19ST1VURV9QT0xJQ1lfU1RBVElDOworICAgICAgICAgICAgZW50cnktPnJ0X3BvbGljeSA9IGNhbGxvYygzLCBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICBlbnRyeS0+cnRfcG9saWN5WzJdID0gZW50cnktPmlmX2luZGV4OworICAgICAgICAgICAgZW50cnktPnJ0X3BvbGljeV9sZW4gPSBzaXplb2Yob2lkKSozOwogICAgICAgICB9CiAjZW5kaWYKIApAQCAtMjAxLDcgKzIwMSw2IEBACiAgICAgRklMRSAgICAgICAgICAgKmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzI1Nl07CiAgICAgbmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkgPSBOVUxMOwotICAgIHN0YXRpYyBpbnQgICAgICBsb2dfb3Blbl9lcnIgPSAxOwogCiAgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLAogICAgICAgICAgICAgICAgICJyb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkIGlwdjZcbiIpKTsKQEAgLTIxMiwxOCArMjExLDEwIEBACiAgICAgICogZmV0Y2ggcm91dGVzIGZyb20gdGhlIHByb2MgZmlsZS1zeXN0ZW06CiAgICAgICovCiAgICAgaWYgKCEoaW4gPSBmb3BlbigiL3Byb2MvbmV0L2lwdjZfcm91dGUiLCAiciIpKSkgewotICAgICAgICBpZiAoMSA9PSBsb2dfb3Blbl9lcnIpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvaXB2Nl9yb3V0ZVxuIik7Ci0gICAgICAgICAgICBsb2dfb3Blbl9lcnIgPSAwOwotICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCI5OmFjY2Vzczpyb3V0ZTpjb250YWluZXIiLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L2lwdjZfcm91dGVcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLSAgICAvKgotICAgICAqIGlmIHdlIHR1cm5lZCBvZmYgbG9nZ2luZyBvZiBvcGVuIGVycm9ycywgdHVybiBpdCBiYWNrIG9uIG5vdyB0aGF0Ci0gICAgICogd2UgaGF2ZSBiZWVuIGFibGUgdG8gb3BlbiB0aGUgZmlsZS4KLSAgICAgKi8KLSAgICBpZiAoMCA9PSBsb2dfb3Blbl9lcnIpCi0gICAgICAgIGxvZ19vcGVuX2VyciA9IDE7CisgICAgCiAgICAgZmdldHMobGluZSxzaXplb2YobGluZSksaW4pOyAvKiBza2lwIGhlYWRlciAqLwogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBjaGFyICAgICAgICAgICAgY19uYW1lW0lGTkFNU0laKzFdOwpAQCAtMzIwLDExICszMTEsMTEgQEAKICAgICAgICAgLyoKICAgICAgICAgICogb24gbGludXgsIGRlZmF1bHQgcm91dGVzIGFsbCBsb29rIGFsaWtlLCBhbmQgd291bGQgaGF2ZSB0aGUgc2FtZQogICAgICAgICAgKiBpbmRleGVkIGJhc2VkIG9uIGRlc3QgYW5kIG5leHQgaG9wLiBTbyB3ZSB1c2Ugb3VyIGFyYml0cmFyeSBpbmRleAotICAgICAgICAgKiBhcyB0aGUgcG9saWN5LCB0byBkaXN0aW5ndWlzZSBiZXR3ZWVuIHRoZW0uCisgICAgICAgICAqIGFzIHRoZSBwb2xpY3ksIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlbS4KICAgICAgICAgICovCi0gICAgICAgIGVudHJ5LT5ydF9wb2xpY3kgPSAmZW50cnktPm5zX3J0X2luZGV4OwotICAgICAgICBlbnRyeS0+cnRfcG9saWN5X2xlbiA9IDE7Ci0gICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0FDQ0VTU19ST1VURV9QT0xJQ1lfU1RBVElDOworICAgICAgICBlbnRyeS0+cnRfcG9saWN5ID0gY2FsbG9jKDMsIHNpemVvZihvaWQpKTsKKyAgICAgICAgZW50cnktPnJ0X3BvbGljeVsyXSA9IGVudHJ5LT5uc19ydF9pbmRleDsKKyAgICAgICAgZW50cnktPnJ0X3BvbGljeV9sZW4gPSBzaXplb2Yob2lkKSozOwogI2VuZGlmCiAKICAgICAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3NvbGFyaXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDhhZDIyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc29sYXJpcy5jCkBAIC0wLDAgKzEsMjU4IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorCisjaW5jbHVkZSA8aW5ldC9pcC5oPgorI2luY2x1ZGUgPGluZXQvbWliMi5oPgorCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfaW9jdGwuaCIKKyNpbmNsdWRlICJpcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImlmLW1pYi9kYXRhX2FjY2Vzcy9pbnRlcmZhY2VfaW9jdGwuaCIKKworc3RhdGljIGludCBfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2xvbmcgKmNvdW50KTsKK3N0YXRpYyBpbnQgX2xvYWRfdjYobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9sb25nICpjb3VudCk7CisKKy8qKiBhcmNoIHNwZWNpZmljIGxvYWQKKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBvcGVuIGRhdGEgZmlsZQorICovCitpbnQKK25ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICB1X2xvbmcgICAgICAgICAgY291bnQgPSAwOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19yb3V0ZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYyA9IF9sb2FkX3Y0KGNvbnRhaW5lciwgJmNvdW50KTsKKyAgICAKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgaWYoKDAgIT0gcmMpIHx8IChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfUk9VVEVfTE9BRF9JUFY0X09OTFkpKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKgorICAgICAqIGxvYWQgaXB2Ni4gaXB2NiBtb2R1bGUgbWlnaHQgbm90IGJlIGxvYWRlZCwKKyAgICAgKiBzbyBpZ25vcmUgLTIgZXJyIChmaWxlIG5vdCBmb3VuZCkKKyAgICAgKi8KKyAgICByYyA9IF9sb2FkX3Y2KGNvbnRhaW5lciwgJmNvdW50KTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gMDsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2NyZWF0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKDQgIT0gZW50cnktPnJ0X2Rlc3RfbGVuKSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczpyb3V0ZTpjcmVhdGUiLCAib25seSBpcHY0IHN1cHBvcnRlZFxuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgLyogcmV0dXJuIF9uZXRzbm1wX2lvY3RsX3JvdXRlX3NldF92NChlbnRyeSk7ICovCisgICAgcmV0dXJuIC0yOworfQorCisvKgorICogY3JlYXRlIGEgbmV3IGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2RlbGV0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKDQgIT0gZW50cnktPnJ0X2Rlc3RfbGVuKSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2Vzczpyb3V0ZTpjcmVhdGUiLCAib25seSBpcHY0IHN1cHBvcnRlZFxuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgLyogcmV0dXJuIF9uZXRzbm1wX2lvY3RsX3JvdXRlX2RlbGV0ZV92NChlbnRyeSk7ICovCisgICAgcmV0dXJuIC0yOworfQorCisKK3N0YXRpYyBpbnQKK0lQX0NtcF9Sb3V0ZSh2b2lkICphZGRyLCB2b2lkICplcCkKK3sKKyAgICBtaWIyX2lwUm91dGVFbnRyeV90ICpFcCA9IGVwLCAqQWRkciA9IGFkZHI7CisKKyAgICBpZiAoKEVwLT5pcFJvdXRlRGVzdCA9PSBBZGRyLT5pcFJvdXRlRGVzdCkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlTmV4dEhvcCA9PSBBZGRyLT5pcFJvdXRlTmV4dEhvcCkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlVHlwZSA9PSBBZGRyLT5pcFJvdXRlVHlwZSkgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlUHJvdG8gPT0gQWRkci0+aXBSb3V0ZVByb3RvKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVNYXNrID09IEFkZHItPmlwUm91dGVNYXNrKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX21heF9mcmFnID09IEFkZHItPmlwUm91dGVJbmZvLnJlX21heF9mcmFnKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX3J0dCA9PSBBZGRyLT5pcFJvdXRlSW5mby5yZV9ydHQpICYmCisgICAgICAgIChFcC0+aXBSb3V0ZUluZm8ucmVfcmVmID09IEFkZHItPmlwUm91dGVJbmZvLnJlX3JlZikgJiYKKyAgICAgICAgKEVwLT5pcFJvdXRlSW5mby5yZV9mcmFnX2ZsYWcgPT0gQWRkci0+aXBSb3V0ZUluZm8ucmVfZnJhZ19mbGFnKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX3NyY19hZGRyID09IEFkZHItPmlwUm91dGVJbmZvLnJlX3NyY19hZGRyKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX2lyZV90eXBlID09IEFkZHItPmlwUm91dGVJbmZvLnJlX2lyZV90eXBlKSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX29icGt0ID09IEFkZHItPmlwUm91dGVJbmZvLnJlX29icGt0KSAmJgorICAgICAgICAoRXAtPmlwUm91dGVJbmZvLnJlX2licGt0ID09IEFkZHItPmlwUm91dGVJbmZvLnJlX2licGt0KQorICAgICAgICApCisgICAgICAgIHJldHVybiAoMCk7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAvKiBOb3QgZm91bmQgKi8KK30KKworCitzdGF0aWMgaW50CitJUDZfQ21wX1JvdXRlKHZvaWQgKmFkZHIsIHZvaWQgKmVwKQoreworICAgIG1pYjJfaXB2NlJvdXRlRW50cnlfdCAqRXAgPSBlcCwgKkFkZHIgPSBhZGRyOworCisgICAgaWYgKChtZW1jbXAoJkVwLT5pcHY2Um91dGVEZXN0LCAmQWRkci0+aXB2NlJvdXRlRGVzdCwgMTYpID09IDApICYmCisgICAgICAgIChtZW1jbXAoJkVwLT5pcHY2Um91dGVOZXh0SG9wLCAmQWRkci0+aXB2NlJvdXRlTmV4dEhvcCwgMTYpID09IDApICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlVHlwZSA9PSBBZGRyLT5pcHY2Um91dGVUeXBlKSAmJgorICAgICAgICAoRXAtPmlwdjZSb3V0ZUluZm8ucmVfbWF4X2ZyYWcgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9tYXhfZnJhZykgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX3J0dCA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX3J0dCkgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX3JlZiA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX3JlZikgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX2ZyYWdfZmxhZyA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX2ZyYWdfZmxhZykgJiYKKyAgICAgICAgKG1lbWNtcCgmRXAtPmlwdjZSb3V0ZUluZm8ucmVfc3JjX2FkZHIsICZBZGRyLT5pcHY2Um91dGVJbmZvLnJlX3NyY19hZGRyLCAxNikgPT0gMCkgJiYKKyAgICAgICAgKEVwLT5pcHY2Um91dGVJbmZvLnJlX2lyZV90eXBlID09IEFkZHItPmlwdjZSb3V0ZUluZm8ucmVfaXJlX3R5cGUpICYmCisgICAgICAgIChFcC0+aXB2NlJvdXRlSW5mby5yZV9vYnBrdCA9PSBBZGRyLT5pcHY2Um91dGVJbmZvLnJlX29icGt0KSAmJgorICAgICAgICAoRXAtPmlwdjZSb3V0ZUluZm8ucmVfaWJwa3QgPT0gQWRkci0+aXB2NlJvdXRlSW5mby5yZV9pYnBrdCkKKyAgICAgICAgKQorICAgICAgICByZXR1cm4gKDApOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuICgxKTsgICAgICAgICAgICAgLyogTm90IGZvdW5kICovCit9CisKKworc3RhdGljIGludCBfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2xvbmcgKmNvdW50KQoreworICAgIG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5OworICAgIG1pYjJfaXBSb3V0ZUVudHJ5X3QgQ3VyZW50cnksIE5leHRlbnRyeTsKKyAgICBpbnQgcmVxX3R5cGU7CisKKyAgICBmb3IgKE5leHRlbnRyeS5pcFJvdXRlRGVzdCA9ICh1X2xvbmcpIC0yLCByZXFfdHlwZSA9IEdFVF9GSVJTVDs7CisgICAgICAgICAgICAgTmV4dGVudHJ5ID0gQ3VyZW50cnksIHJlcV90eXBlID0gR0VUX05FWFQpIHsKKwlpZiAoZ2V0TWlic3RhdChNSUJfSVBfUk9VVEUsICZDdXJlbnRyeSwgc2l6ZW9mKG1pYjJfaXBSb3V0ZUVudHJ5X3QpLAorCQkgICAgICAgcmVxX3R5cGUsICZJUF9DbXBfUm91dGUsICZOZXh0ZW50cnkpICE9IDApCisJICAgIGJyZWFrOworI2lmZGVmIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUKKwlpZiAoQ3VyZW50cnkuaXBSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQ0FDSEUpCisJICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUgKi8KKwlpZiAoQ3VyZW50cnkuaXBSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQlJPQURDQVNUKQorCSAgICBjb250aW51ZTsKKwllbnRyeSA9IG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2NyZWF0ZSgpOworCUN1cmVudHJ5LmlwUm91dGVJZkluZGV4Lm9fYnl0ZXNbQ3VyZW50cnkuaXBSb3V0ZUlmSW5kZXgub19sZW5ndGhdID0gJ1wwJzsKKwllbnRyeS0+aWZfaW5kZXggPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZCgKKyAgICAgICAgICAgICAgICBDdXJlbnRyeS5pcFJvdXRlSWZJbmRleC5vX2J5dGVzKTsKKwllbnRyeS0+bnNfcnRfaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisKKwllbnRyeS0+cnRfZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisJZW50cnktPnJ0X2Rlc3RfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnJ0X2Rlc3QsICZDdXJlbnRyeS5pcFJvdXRlRGVzdCwgNCk7CisJbWVtY3B5KCZlbnRyeS0+cnRfbWFzaywgJkN1cmVudHJ5LmlwUm91dGVNYXNrLCA0KTsKKworCWVudHJ5LT5ydF9uZXh0aG9wX3R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKKwllbnRyeS0+cnRfbmV4dGhvcF9sZW4gPSA0OworCW1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwgJkN1cmVudHJ5LmlwUm91dGVOZXh0SG9wLCA0KTsKKworCWVudHJ5LT5ydF9wZnhfbGVuID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuKEN1cmVudHJ5LmlwUm91dGVNYXNrKTsKKwllbnRyeS0+cnRfdHlwZSA9IEN1cmVudHJ5LmlwUm91dGVUeXBlOworCWVudHJ5LT5ydF9wcm90byA9IEN1cmVudHJ5LmlwUm91dGVQcm90bzsKKwllbnRyeS0+cnRfYWdlID0gQ3VyZW50cnkuaXBSb3V0ZUFnZTsKKwllbnRyeS0+cnRfbWV0cmljMSA9IEN1cmVudHJ5LmlwUm91dGVNZXRyaWMxOworCWVudHJ5LT5ydF9tZXRyaWMyID0gQ3VyZW50cnkuaXBSb3V0ZU1ldHJpYzI7CisJZW50cnktPnJ0X21ldHJpYzMgPSBDdXJlbnRyeS5pcFJvdXRlTWV0cmljMzsKKwllbnRyeS0+cnRfbWV0cmljNCA9IEN1cmVudHJ5LmlwUm91dGVNZXRyaWM0OworCisJLyoKKwkgKiBpbnNlcnQgaW50byBjb250YWluZXIKKwkgKi8KKwlpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKwkgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLCAiZXJyb3Igd2l0aCByb3V0ZV9lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKwkgICAgbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfZnJlZShlbnRyeSk7CisJICAgIGNvbnRpbnVlOworCX0KKwkqY291bnQrKzsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGludCBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2xvbmcgKmNvdW50KQoreworICAgIG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5OworICAgIG1pYjJfaXB2NlJvdXRlRW50cnlfdCBDdXJlbnRyeSwgTmV4dGVudHJ5OworICAgIGludCByZXFfdHlwZTsKKworICAgIG1lbXNldCgmTmV4dGVudHJ5LCAwLCBzaXplb2YoTmV4dGVudHJ5KSk7CisgICAgZm9yIChyZXFfdHlwZSA9IEdFVF9GSVJTVDs7CisgICAgICAgICAgICAgTmV4dGVudHJ5ID0gQ3VyZW50cnksIHJlcV90eXBlID0gR0VUX05FWFQpIHsKKwlpZiAoZ2V0TWlic3RhdChNSUJfSVA2X1JPVVRFLCAmQ3VyZW50cnksIHNpemVvZihtaWIyX2lwdjZSb3V0ZUVudHJ5X3QpLAorCQkgICAgICAgcmVxX3R5cGUsICZJUDZfQ21wX1JvdXRlLCAmTmV4dGVudHJ5KSAhPSAwKQorCSAgICBicmVhazsKKyNpZmRlZiBIQVZFX0RFRklORURfSVJFX0NBQ0hFCisJaWYgKEN1cmVudHJ5LmlwdjZSb3V0ZUluZm8ucmVfaXJlX3R5cGUgJiBJUkVfQ0FDSEUpCisJICAgIGNvbnRpbnVlOworI2VuZGlmIC8qIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUgKi8KKwlpZiAoQ3VyZW50cnkuaXB2NlJvdXRlSW5mby5yZV9pcmVfdHlwZSAmIElSRV9CUk9BRENBU1QpCisJICAgIGNvbnRpbnVlOworCWVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfY3JlYXRlKCk7CisJQ3VyZW50cnkuaXB2NlJvdXRlSWZJbmRleC5vX2J5dGVzW0N1cmVudHJ5LmlwdjZSb3V0ZUlmSW5kZXgub19sZW5ndGhdID0gJ1wwJzsKKwllbnRyeS0+aWZfaW5kZXggPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZCgKKyAgICAgICAgICAgICAgICBDdXJlbnRyeS5pcHY2Um91dGVJZkluZGV4Lm9fYnl0ZXMpOworCWVudHJ5LT5uc19ydF9pbmRleCA9IGVudHJ5LT5pZl9pbmRleDsKKworCWVudHJ5LT5ydF9kZXN0X3R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKwllbnRyeS0+cnRfZGVzdF9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnJ0X2Rlc3QsICZDdXJlbnRyeS5pcHY2Um91dGVEZXN0LCAxNik7CisKKwllbnRyeS0+cnRfbmV4dGhvcF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisJZW50cnktPnJ0X25leHRob3BfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5ydF9uZXh0aG9wLCAmQ3VyZW50cnkuaXB2NlJvdXRlTmV4dEhvcCwgMTYpOworCisJZW50cnktPnJ0X3BmeF9sZW4gPSBDdXJlbnRyeS5pcHY2Um91dGVQZnhMZW5ndGg7CisJZW50cnktPnJ0X3R5cGUgPSBDdXJlbnRyeS5pcHY2Um91dGVUeXBlOworCWVudHJ5LT5ydF9wcm90byA9IEN1cmVudHJ5LmlwdjZSb3V0ZVByb3RvY29sOworCWVudHJ5LT5ydF9hZ2UgPSBDdXJlbnRyeS5pcHY2Um91dGVBZ2U7CisJZW50cnktPnJ0X3BvbGljeSA9IGNhbGxvYygzLCBzaXplb2Yob2lkKSk7CisJZW50cnktPnJ0X3BvbGljeV9sZW4gPSAzOworCWVudHJ5LT5ydF9wb2xpY3lbMl0gPSBDdXJlbnRyeS5pcHY2Um91dGVQb2xpY3k7CisJZW50cnktPnJ0X21ldHJpYzEgPSBDdXJlbnRyeS5pcHY2Um91dGVNZXRyaWM7CisJZW50cnktPnJ0X21ldHJpYzIgPSBDdXJlbnRyeS5pcHY2Um91dGVXZWlnaHQ7CisKKwkvKgorCSAqIGluc2VydCBpbnRvIGNvbnRhaW5lcgorCSAqLworCWlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsICJlcnJvciB3aXRoIHJvdXRlX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCSAgICBuZXRzbm1wX2FjY2Vzc19yb3V0ZV9lbnRyeV9mcmVlKGVudHJ5KTsKKwkgICAgY29udGludWU7CisJfQorCSpjb3VudCsrOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDRmOTI2YgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2RhdGFfYWNjZXNzL3JvdXRlX3N5c2N0bC5jCkBAIC0wLDAgKzEsNDM2IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmgiCisjaW5jbHVkZSAiaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJpZi1taWIvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlX2lvY3RsLmgiCisKK3N0YXRpYyBpbnQgX2xvYWRfaXB2NChuZXRzbm1wX2NvbnRhaW5lciosIGludCopOworc3RhdGljIGludCBfbG9hZF9pcHY2KG5ldHNubXBfY29udGFpbmVyKiwgaW50Kik7CitzdGF0aWMgaW50IF9jcmVhdGVfaXB2NChuZXRzbm1wX3JvdXRlX2VudHJ5ICopOworc3RhdGljIGludCBfY3JlYXRlX2lwdjYobmV0c25tcF9yb3V0ZV9lbnRyeSAqKTsKK3N0YXRpYyBpbnQgX2RlbGV0ZV9pcHY0KG5ldHNubXBfcm91dGVfZW50cnkgKik7CitzdGF0aWMgaW50IF9kZWxldGVfaXB2NihuZXRzbm1wX3JvdXRlX2VudHJ5ICopOworCisjaWYgIWRlZmluZWQoU0FfU0laRSkgJiYgIWRlZmluZWQoUlRfUk9VTkRVUCkKKyNkZWZpbmUgUlRfUk9VTkRVUChhKSAgXAorICAgICAgICAoKGEpID4gMCA/ICgxICsgKCgoYSkgLSAxKSB8IChzaXplb2YobG9uZykgLSAxKSkpIDogc2l6ZW9mKGxvbmcpKQorI2VuZGlmCisjaWZuZGVmIFNBX1NJWkUKKyNkZWZpbmUgU0FfU0laRSh4KSBSVF9ST1VORFVQKCgoc3RydWN0IHNvY2thZGRyICopKHgpKS0+c2FfbGVuKQorI2VuZGlmCisKKy8qKiBhcmNoIHNwZWNpZmljIGxvYWQKKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19yb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisJCQkJCSB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCBjb3VudCwgZXJyOworCisgICAgZXJyID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWRcbiIpKTsKKworICAgIGlmIChjb250YWluZXIgPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3JvdXRlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGVyciA9IF9sb2FkX2lwdjQoY29udGFpbmVyLCAmY291bnQpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJfbG9hZF9pcHY0IGZhaWxlZCAlZFxuIiwgZXJyKSk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChlcnIgIT0gMCB8fCBsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfUk9VVEVfTE9BRF9JUFY0X09OTFkpCisJcmV0dXJuIGVycjsKKworICAgIGVyciA9IF9sb2FkX2lwdjYoY29udGFpbmVyLCAmY291bnQpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJfbG9hZF9pcHY2IGZhaWxlZCAlZFxuIiwgZXJyKSk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworb3V0OgorICAgIHJldHVybiAoZXJyID09IDAgPyAwIDogLTMpOworfQorCisvKiogYXJjaCBzcGVjaWZpYyBuZXcgcm91dGUgZW50cnkgY3JlYXRpb24KKyAqIEBpbnRlcm5hbAorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBpbnZhbGlkIGVudHJ5IHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3QgY3JlYXRlIHJvdXRlIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX3JvdXRlX2NyZWF0ZShuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBpbnQgZXJyOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAoZW50cnktPnJ0X2Rlc3RfdHlwZSkgeworICAgIGNhc2UgSU5FVEFERFJFU1NUWVBFX0lQVjQ6CisgICAgICAgIGVyciA9IF9jcmVhdGVfaXB2NChlbnRyeSk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBjYXNlIElORVRBRERSRVNTVFlQRV9JUFY2OgorICAgICAgICBlcnIgPSBfY3JlYXRlX2lwdjYoZW50cnkpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGVyciA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIChlcnIgPT0gMCA/IDAgOiAtMik7Cit9CisKKy8qKiBhcmNoIHNwZWNpZmljIG5ldyByb3V0ZSBlbnRyeSBkZWxldGlvbgorICogQGludGVybmFsCisgKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGludmFsaWQgZW50cnkgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBkZWxldGUgcm91dGUgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfcm91dGVfZGVsZXRlKG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5KQoreworICAgIGludCBlcnI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnJvdXRlOmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgInJvdXRlX2NvbnRhaW5lcl9hcmNoX2RlbGV0ZVxuIikpOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHN3aXRjaCAoZW50cnktPnJ0X2Rlc3RfdHlwZSkgeworICAgIGNhc2UgSU5FVEFERFJFU1NUWVBFX0lQVjQ6CisgICAgICAgIGVyciA9IF9kZWxldGVfaXB2NChlbnRyeSk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBjYXNlIElORVRBRERSRVNTVFlQRV9JUFY2OgorICAgICAgICBlcnIgPSBfZGVsZXRlX2lwdjYoZW50cnkpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIGVyciA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIChlcnIgPT0gMCA/IDAgOiAtMik7Cit9CisKKyNpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKG5ldGJzZDQpIHx8IGRlZmluZWQob3BlbmJzZCkgfHwgZGVmaW5lZChkYXJ3aW4pCitzdGF0aWMgaW50CitfdHlwZV9mcm9tX2ZsYWdzKGludCBmbGFncykKK3sKKyAgICBpZiAoZmxhZ3MgJiBSVEZfVVApIHsKKyAgICAgICAgaWYgKGZsYWdzICYgUlRGX0JMQUNLSE9MRSkKKyAgICAgICAgICAgIHJldHVybiBJTkVUQ0lEUlJPVVRFVFlQRV9SRUpFQ1Q7CisjaWZkZWYgUlRGX0xPQ0FMCisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgUlRGX0xPQ0FMKQorICAgICAgICAgICAgcmV0dXJuIElORVRDSURSUk9VVEVUWVBFX0xPQ0FMOworI2VuZGlmCisgICAgICAgIGVsc2UgaWYgKGZsYWdzICYgUlRGX0dBVEVXQVkpCisgICAgICAgICAgICByZXR1cm4gSU5FVENJRFJST1VURVRZUEVfUkVNT1RFOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gSU5FVENJRFJST1VURVRZUEVfT1RIRVI7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQKK19sb2FkX3JvdXRpbmdfdGFibGVfZnJvbV9zeXNjdGwobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgaW50ICppbmRleCwKKyAgICBpbnQgZmFtaWx5KQoreworICAgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5leHQ7CisgICAgaW50IG1pYls2XTsKKyAgICBzaXplX3QgbmVlZGVkOworICAgIGludCBlcnI7CisgICAgdV9jaGFyIGRlc3RfbGVuLCBkZXN0X3R5cGU7CisgICAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworCisgICAgYnVmID0gTlVMTDsKKyAgICBlcnIgPSAwOworCisgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIGRlc3RfbGVuID0gNDsKKyAgICAgICAgZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisgICAgfSBlbHNlIGlmIChmYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgZGVzdF9sZW4gPSAxNjsKKyAgICAgICAgZGVzdF90eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjY7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gRUlOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBtaWJbMF0gPSBDVExfTkVUOworICAgIG1pYlsxXSA9IFBGX1JPVVRFOworICAgIG1pYlsyXSA9IDA7CisgICAgbWliWzNdID0gZmFtaWx5OworICAgIG1pYls0XSA9IE5FVF9SVF9EVU1QOworICAgIG1pYls1XSA9IDA7CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgKHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSkpLCBOVUxMLCAmbmVlZGVkLCBOVUxMLAorICAgICAgICAwKSA9PSAtMSkgeworICAgICAgICBlcnIgPSBlcnJubzsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorCisgICAgaWYgKChidWYgPSBtYWxsb2MobmVlZGVkKSkgPT0gTlVMTCkgeworICAgICAgICBlcnIgPSBFTk9NRU07CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGlmIChzeXNjdGwobWliLCAoc2l6ZW9mKG1pYikgLyBzaXplb2YobWliWzBdKSksIGJ1ZiwgJm5lZWRlZCwgTlVMTCwKKyAgICAgICAgMCkgPT0gLTEpIHsKKyAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKworICAgIGxpbSA9IGJ1ZiArIG5lZWRlZDsKKworICAgIGZvciAobmV4dCA9IGJ1ZjsgbmV4dCA8IGxpbTsgbmV4dCArPSBydG0tPnJ0bV9tc2dsZW4pIHsgICAgCisJc3RydWN0IHNvY2thZGRyICppZl9uYW1lID0gTlVMTCwgKmlmX2FkZHIgPSBOVUxMOworCXN0cnVjdCBzb2NrYWRkciAqZGVzdF9zYSA9IE5VTEwsICpnYXRld2F5X3NhID0gTlVMTCwgKm5ldG1hc2tfc2EgPSBOVUxMOworCW5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5OworCWNoYXIgKmFkZHJfcHRyOworCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyKiluZXh0OworCisgICAgICAgIC8qIAorICAgICAgICAgKiBTb21lIGNvZGUgaW4gbmV0c3RhdCBjaGVja3MgZm9yIHRoaXMgKCJuZXRtYXNrcyBkb25lIiBjYXNlKS4KKyAgICAgICAgICogRmlsdGVyIHRoaXMgb3V0IChJIGRvbid0IGtub3cgd2h5IGl0IHNob3VsZCBleGlzdCkuCisgICAgICAgICAqLworICAgICAgICBpZiAocnRtLT5ydG1fYWRkcnMgPT0gUlRBX0RTVCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfcm91dGVfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmIChlbnRyeSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIC0zOworICAgICAgICBtZW1zZXQoZW50cnktPnJ0X2Rlc3QsIDAsIGRlc3RfbGVuKTsKKyAgICAgICAgZW50cnktPnJ0X21hc2sgPSAwOworICAgICAgICBtZW1zZXQoZW50cnktPnJ0X25leHRob3AsIDAsIGRlc3RfbGVuKTsKKworICAgICAgICBhZGRyX3B0ciA9IChjaGFyICopKHJ0bSArIDEpOworCisJaWYgKHJ0bS0+cnRtX2FkZHJzICYgIFJUQV9EU1QpIHsKKwkgICAgZGVzdF9zYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyX3B0cjsKKwkgICAgYWRkcl9wdHIgKz0gU0FfU0laRShkZXN0X3NhKTsKKwl9CisJaWYgKHJ0bS0+cnRtX2FkZHJzICYgIFJUQV9HQVRFV0FZKSB7CisJICAgIGdhdGV3YXlfc2EgPSAoc3RydWN0IHNvY2thZGRyICopYWRkcl9wdHI7CisJICAgIGFkZHJfcHRyICs9IFNBX1NJWkUoZ2F0ZXdheV9zYSk7CisJfQorCWlmIChydG0tPnJ0bV9hZGRycyAmICBSVEFfTkVUTUFTSykgeworCSAgICBuZXRtYXNrX3NhID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKG5ldG1hc2tfc2EpOworCX0KKwlpZiAocnRtLT5ydG1fYWRkcnMgJiAgUlRBX0lGUCkgeworCSAgICBpZl9uYW1lID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKGlmX25hbWUpOworCX0KKwlpZiAocnRtLT5ydG1fYWRkcnMgJiAgUlRBX0lGQSkgeworCSAgICBpZl9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciAqKWFkZHJfcHRyOworCSAgICBhZGRyX3B0ciArPSBTQV9TSVpFKGlmX2FkZHIpOworCX0KKworICAgICAgICBlbnRyeS0+aWZfaW5kZXggPSBydG0tPnJ0bV9pbmRleDsKKworICAgICAgICAvKiBhcmJpdHJhcnkgaW5kZXggKi8KKyAgICAgICAgZW50cnktPm5zX3J0X2luZGV4ID0gKysoKmluZGV4KTsKKworICAgICAgICAvKiBjb3B5IGRlc3QgJiBuZXh0IGhvcCAqLworICAgICAgICBlbnRyeS0+cnRfZGVzdF90eXBlID0gZGVzdF90eXBlOworICAgICAgICBlbnRyeS0+cnRfZGVzdF9sZW4gPSBkZXN0X2xlbjsKKyAgICAgICAgaWYgKHJ0bS0+cnRtX2FkZHJzICYgUlRBX0RTVCkgeworICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luKilkZXN0X3NhKS0+c2luX2FkZHIsIGRlc3RfbGVuKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfZGVzdCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiopZGVzdF9zYSktPnNpbjZfYWRkciwgZGVzdF9sZW4pOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+cnRfbmV4dGhvcF90eXBlID0gZGVzdF90eXBlOworICAgICAgICBlbnRyeS0+cnRfbmV4dGhvcF9sZW4gPSBkZXN0X2xlbjsKKyAgICAgICAgaWYgKHJ0bS0+cnRtX2FkZHJzICYgUlRBX0dBVEVXQVkpIHsKKyAgICAgICAgICAgIGlmIChmYW1pbHkgPT0gQUZfSU5FVCkKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X25leHRob3AsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopZ2F0ZXdheV9zYSktPnNpbl9hZGRyLCBkZXN0X2xlbik7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnJ0X25leHRob3AsCisgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYqKWdhdGV3YXlfc2EpLT5zaW42X2FkZHIsIGRlc3RfbGVuKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luKilpZl9hZGRyKS0+c2luX2FkZHIsIGRlc3RfbGVuKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KQorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+cnRfbmV4dGhvcCwKKyAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiopaWZfYWRkciktPnNpbjZfYWRkciwgZGVzdF9sZW4pOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpIHsKKwkgICAgaWYgKG5ldG1hc2tfc2EpIHsKKyAgICAgICAgICAgIC8qIGNvdW50IGJpdHMgaW4gbWFzayAqLworCQllbnRyeS0+cnRfcGZ4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbigKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luICopbmV0bWFza19zYSktPnNpbl9hZGRyLnNfYWRkcik7CisJCW1lbWNweSgmZW50cnktPnJ0X21hc2ssICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKW5ldG1hc2tfc2EpLT5zaW5fYWRkciwgNCk7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWVudHJ5LT5ydF9wZnhfbGVuID0gMzI7CisJICAgIH0KKyAgICAgICAgfQorI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUNikgeworCSAgICBpZiAobmV0bWFza19zYSkgeworICAgICAgICAgICAgLyogY291bnQgYml0cyBpbiBtYXNrICovCisJCWVudHJ5LT5ydF9wZnhfbGVuID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKAorCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopbmV0bWFza19zYSktPnNpbjZfYWRkcik7CisJCW1lbWNweSgmZW50cnktPnJ0X21hc2ssICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKiluZXRtYXNrX3NhKS0+c2luNl9hZGRyLCAxNik7CisJICAgIH0KKwkgICAgZWxzZSB7CisJCWVudHJ5LT5ydF9wZnhfbGVuID0gMTI4OworCSAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCisjaWZkZWYgVVNJTkdfSVBfRk9SV0FSRF9NSUJfSU5FVENJRFJST1VURVRBQkxFX0lORVRDSURSUk9VVEVUQUJMRV9NT0RVTEUKKyAgICAgICAgLyoKKyAgICBpbmV0Q2lkclJvdXRlUG9saWN5IE9CSkVDVC1UWVBFIAorICAgICAgICBTWU5UQVggICAgIE9CSkVDVCBJREVOVElGSUVSIAorICAgICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlIAorICAgICAgICBTVEFUVVMgICAgIGN1cnJlbnQgCisgICAgICAgIERFU0NSSVBUSU9OIAorICAgICAgICAgICAgICAgIlRoaXMgb2JqZWN0IGlzIGFuIG9wYXF1ZSBvYmplY3Qgd2l0aG91dCBhbnkgZGVmaW5lZCAKKyAgICAgICAgICAgICAgICBzZW1hbnRpY3MuICBJdHMgcHVycG9zZSBpcyB0byBzZXJ2ZSBhcyBhbiBhZGRpdGlvbmFsIAorICAgICAgICAgICAgICAgIGluZGV4IHdoaWNoIG1heSBkZWxpbmVhdGUgYmV0d2VlbiBtdWx0aXBsZSBlbnRyaWVzIHRvIAorICAgICAgICAgICAgICAgIHRoZSBzYW1lIGRlc3RpbmF0aW9uLiAgVGhlIHZhbHVlIHsgMCAwIH0gc2hhbGwgYmUgdXNlZCAKKyAgICAgICAgICAgICAgICBhcyB0aGUgZGVmYXVsdCB2YWx1ZSBmb3IgdGhpcyBvYmplY3QuIgorICAgICAgICAqLworCWVudHJ5LT5ydF9wb2xpY3kgPSBjYWxsb2MoMywgc2l6ZW9mKG9pZCkpOworCWVudHJ5LT5ydF9wb2xpY3lbMl0gPSBlbnRyeS0+aWZfaW5kZXg7CisJZW50cnktPnJ0X3BvbGljeV9sZW4gPSBzaXplb2Yob2lkKSozOworI2VuZGlmCisKKyAgICAgICAgZW50cnktPnJ0X3R5cGUgPSBfdHlwZV9mcm9tX2ZsYWdzKHJ0bS0+cnRtX2ZsYWdzKTsKKwllbnRyeS0+cnRfYWdlID0gcnRtLT5ydG1fcm14LnJteF9leHBpcmU7CisJZW50cnktPnJ0X25leHRob3BfYXMgPSAwOworCS8qIGVudHJ5LT5ydF9tZXRyaWMxID0gcnRtLT5ydG1fcm14LnJteF9ob3Bjb3VudDsgKi8KKworICAgICAgICBpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVEZfRFlOQU1JQykKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wcm90byA9IElBTkFJUFJPVVRFUFJPVE9DT0xfSUNNUDsKKyAgICAgICAgZWxzZSBpZiAocnRtLT5ydG1fZmxhZ3MgJiBSVEZfU1RBVElDKQorICAgICAgICAgICAgZW50cnktPnJ0X3Byb3RvID0gSUFOQUlQUk9VVEVQUk9UT0NPTF9ORVRNR01UOworI2lmZGVmIFJURl9MT0NBTAorICAgICAgICBlbHNlIGlmIChydG0tPnJ0bV9mbGFncyAmIFJURl9MT0NBTCkKKyAgICAgICAgICAgIGVudHJ5LT5ydF9wcm90byA9IElBTkFJUFJPVVRFUFJPVE9DT0xfTE9DQUw7CisjZW5kaWYKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnktPnJ0X3Byb3RvID0gSUFOQUlQUk9VVEVQUk9UT0NPTF9PVEhFUjsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAiZXJyb3Igd2l0aCByb3V0ZV9lbnRyeTogaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX3JvdXRlX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKK291dDoKKyAgICBmcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gZXJyOworfQorCisvKioKKyAqIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9hcmNoX2xvYWQqIGZ1bmN0aW9ucy4KKyAqLworc3RhdGljIGludAorX2xvYWRfaXB2NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgKmluZGV4KQoreworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczpyb3V0ZTpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJyb3V0ZV9jb250YWluZXJfYXJjaF9sb2FkIGlwdjRcbiIpKTsKKyAgICByZXR1cm4gX2xvYWRfcm91dGluZ190YWJsZV9mcm9tX3N5c2N0bChjb250YWluZXIsIGluZGV4LCBBRl9JTkVUKTsKK30KKworc3RhdGljIGludAorX2xvYWRfaXB2NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgKmluZGV4KQoreworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY2XG4iKSk7CisgICAgcmV0dXJuIF9sb2FkX3JvdXRpbmdfdGFibGVfZnJvbV9zeXNjdGwoY29udGFpbmVyLCBpbmRleCwgQUZfSU5FVDYpOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQorCisvKioKKyAqIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NyZWF0ZSogZnVuY3Rpb25zLgorICoKKyAqIFRPRE86IGFkZCBsb2dpYyBzaW1pbGFyIHRvIG5ld3JvdXRlKC4uKSBpbiBzYmluL3JvdXRlL3JvdXRlLmMgLgorICovCitzdGF0aWMgaW50CitfY3JlYXRlX2lwdjQobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX2NyZWF0ZV9pcHY2KG5ldHNubXBfcm91dGVfZW50cnkgKmVudHJ5KQoreworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogbmV0c25tcF9hY2Nlc3Nfcm91dGVfZGVsZXRlKiBmdW5jdGlvbnMuCisgKgorICogVE9ETzogYWRkIGxvZ2ljIHNpbWlsYXIgdG8gbmV3cm91dGUoLi4pIGluIHNiaW4vcm91dGUvcm91dGUuYyAuCisgKi8KK3N0YXRpYyBpbnQKK19kZWxldGVfaXB2NChuZXRzbm1wX3JvdXRlX2VudHJ5ICplbnRyeSkKK3sKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitfZGVsZXRlX2lwdjYobmV0c25tcF9yb3V0ZV9lbnRyeSAqZW50cnkpCit7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorCisjZW5kaWYKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKGZyZWVic2Q3KSB8fCBkZWZpbmVkKG5ldGJzZCkgfHwgZGVmaW5lZChvcGVuYnNkKSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmggYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9kYXRhX2FjY2Vzcy9yb3V0ZV9zeXNjdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWVjY2M3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvZGF0YV9hY2Nlc3Mvcm91dGVfc3lzY3RsLmgKQEAgLTAsMCArMSw5IEBACisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGlmYWRkcnMuaD4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuYwppbmRleCA0MWI1Yzk1Li4wZjAxM2VhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5jCkBAIC0xNCw2ICsxNCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yNiw4ICsyNywxMSBAQAogCiAjaW5jbHVkZSAiaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZFtdID0geyBJTkVUQ0lEUlJPVVRFVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplKQorCitjb25zdCBvaWQgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZFtdID0geyBJTkVUQ0lEUlJPVVRFVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaW5ldENpZHJSb3V0ZVRhYmxlX29pZCk7CiAKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gaW5ldENpZHJSb3V0ZVRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTQxMCwyNSArNDE0LDI3IEBACiAgICAgLyoKICAgICAgKiBpbmV0Q2lkclJvdXRlUG9saWN5KDQpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvYS93L2Uvci9kL2ggCiAgICAgICovCi0gICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4gPSBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeSkgLyBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeVswXSk7ICAvKiBtYXggbGVuZ3RoICovCisgICAgdGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeV9sZW4gPSBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeSkgLyBzaXplb2YodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeVswXSk7CiAgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9yb3V0ZV9lbnRyeSAqLwogICAgIC8qCiAgICAgICogbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgaW5ldENpZHJSb3V0ZVBvbGljeSBkYXRhCiAgICAgICovCiAgICAgaWYgKChOVUxMID09IHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3kpIHx8CiAgICAgICAgICh0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiA8Ci0gICAgICAgICAoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbikpKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJub3QgZW5vdWdoIHNwYWNlIGZvciB2YWx1ZVxuIik7CisgICAgICAgICAoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJbMF0pKSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgImluZXRDaWRyUm91dGVQb2xpY3k6IE5vdCBlbm91Z2ggc3BhY2UgZm9yIHZhbHVlICglZCA8ICVkKVxuIiwKKwkgICAgKGludCl0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiwKKwkgICAgKGludCkoaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJbMF0pKSk7CiAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CiAgICAgfQogICAgIGlmICgwID09IGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4pIHsKLSAgICAgICAgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiA9IG51bGxPaWRMZW4gLyBzaXplb2Yob2lkKTsKKyAgICAgICAgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbiA9IG51bGxPaWRMZW47CiAgICAgICAgIGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0ciA9IG51bGxPaWQ7CiAgICAgfQotICAgIHRibF9pZHgtPmluZXRDaWRyUm91dGVQb2xpY3lfbGVuID0gaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyX2xlbjsKKyAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlUG9saWN5X2xlbiA9IGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0cl9sZW4gLyBzaXplb2Yob2lkKTsKICAgICBtZW1jcHkodGJsX2lkeC0+aW5ldENpZHJSb3V0ZVBvbGljeSwgaW5ldENpZHJSb3V0ZVBvbGljeV92YWxfcHRyLAotICAgICAgICAgICBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJfbGVuICoKLSAgICAgICAgICAgc2l6ZW9mKGluZXRDaWRyUm91dGVQb2xpY3lfdmFsX3B0clswXSkpOworICAgICAgICAgICBpbmV0Q2lkclJvdXRlUG9saWN5X3ZhbF9wdHJfbGVuKTsKIAogICAgIC8qCiAgICAgICogaW5ldENpZHJSb3V0ZU5leHRIb3BUeXBlKDUpL0luZXRBZGRyZXNzVHlwZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2ggCkBAIC00NDYsMTEgKzQ1MiwxNCBAQAogICAgICAqLwogICAgIGlmICgoTlVMTCA9PSB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcCkgfHwKICAgICAgICAgKHRibF9pZHgtPmluZXRDaWRyUm91dGVOZXh0SG9wX2xlbiA8Ci0gICAgICAgICAoaW5ldENpZHJSb3V0ZU5leHRIb3BfdmFsX3B0cl9sZW4pKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IGVub3VnaCBzcGFjZSBmb3IgdmFsdWVcbiIpOworICAgICAgICAgKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJfbGVuIC8gc2l6ZW9mKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJbMF0pKSkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKwkgICAgImluZXRDaWRyUm91dGVOZXh0aG9wOiBOb3QgZW5vdWdoIHNwYWNlIGZvciB2YWx1ZSAoJWQgPCAlZClcbiIsCisJICAgIChpbnQpdGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3BfbGVuLAorCSAgICAoaW50KShpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyWzBdKSkpOwogICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogICAgIH0KLSAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcF9sZW4gPSBpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbjsKKyAgICB0YmxfaWR4LT5pbmV0Q2lkclJvdXRlTmV4dEhvcF9sZW4gPSBpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyX2xlbiAvIHNpemVvZihpbmV0Q2lkclJvdXRlTmV4dEhvcF92YWxfcHRyWzBdKTsKICAgICBtZW1jcHkodGJsX2lkeC0+aW5ldENpZHJSb3V0ZU5leHRIb3AsIGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHIsCiAgICAgICAgICAgIGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJfbGVuICoKICAgICAgICAgICAgc2l6ZW9mKGluZXRDaWRyUm91dGVOZXh0SG9wX3ZhbF9wdHJbMF0pKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGUuaAppbmRleCA4ZDkwNDg1Li5iODEzMmUxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZS5oCkBAIC0yMTcsOCArMjE3LDggQEAKICAgICAgICAgKiBpbmV0Q2lkclJvdXRlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpbmV0Q2lkclJvdXRlVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpbmV0Q2lkclJvdXRlVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGluZXRDaWRyUm91dGVUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaW5ldENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggOTQ2MmJlNy4uYmVlYmIyYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjYzLDcgKzI2Myw3IEBACiAgICAgICAgIG5ldHNubXBfYWNjZXNzX3JvdXRlX2NvbnRhaW5lcl9sb2FkKE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1JPVVRFX0xPQURfTk9GTEFHUyk7CiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTppbmV0Q2lkclJvdXRlVGFibGU6aW5ldENpZHJSb3V0ZVRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKHJvdXRlX2NvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKHJvdXRlX2NvbnRhaW5lcikpKTsKIAogICAgIGlmIChOVUxMID09IHJvdXRlX2NvbnRhaW5lcikKICAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLwpAQCAtMjgzLDcgKzI4Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfUk9VVEVfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aW5ldENpZHJSb3V0ZVRhYmxlOmluZXRDaWRyUm91dGVUYWJsZV9jYWNoZV9sb2FkIiwKLSAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisgICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgKGludClDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2luZXRDaWRyUm91dGVUYWJsZS9pbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggZjQ4NTM2MC4uNWRmNDZiNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaW5ldENpZHJSb3V0ZVRhYmxlL2luZXRDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pbmV0Q2lkclJvdXRlVGFibGUvaW5ldENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxNiBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplLCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0LCBpbmV0Q2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MiwxOSArOTMsMjMgQEAKICAgICAgICAgICAgICAgICBfaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpbmV0Q2lkclJvdXRlVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGluZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpbmV0Q2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uICoKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGluZXRDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gKgogaW5ldENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaW5ldENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDQsMTIgKzExOSwxNSBAQAogICAgIGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaW5ldENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGluZXRDaWRyUm91dGVUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRDSURSUk9VVEVUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogaW5ldENpZHJSb3V0ZVRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMTQwLDcgKzE1OCw3IEBACiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfZ2V0X3ZhbHVlczsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9zZXRfdmFsdWVzOwpAQCAtMTUwLDEyICsxNjgsMTAgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV91bmRvX2NvbW1pdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXRDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGVfY29tbWl0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAotICAgICAgICAgICAgICAgIF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfaW5kZXhlcyhpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwotCisgICAgICAgICAgICAgICAgX2luZXRDaWRyUm91dGVUYWJsZV9jaGVja19pbmRleGVzKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CiAvKioKICAqIEBpbnRlcm5hbAogICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaW5ldENpZHJSb3V0ZVRhYmxlIApAQCAtMTk5LDcgKzIxNSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElORVRDSURSUk9VVEVUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSU5FVENJRFJST1VURVRBQkxFX01BWF9DT0w7CkBAIC0yMzksNyArMjU1LDcgQEAKICAgICAgICAgX21mZF9pbmV0Q2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNjQsNyArMjgwLDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTMwMCw3ICszMTYsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzIzLDcgKzMzOSw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC03OTMsNyArODA5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtOTExLDcgKzkyNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTExMDUsNyArMTEyMSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTIxMiw2ICsxMjI4LDggQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwogCisgICAgLyogTU9SRSBDSEVDS0lORyBSRVFVSVJFRCAqLworCiAgICAgLyoKICAgICAgKiAoSU5ERVgpIGluZXRDaWRyUm91dGVEZXN0KDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaCAKICAgICAgKi8KQEAgLTEzMTAsNyArMTMyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfaW5kZXhlcyAqLwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKICAqIFNFVCBwcm9jZXNzaW5nCkBAIC0xNjE1LDcgKzE2MzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xNjYzLDcgKzE2ODEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwgImNhbGxlZFxuIikpOwogCkBAIC0xNzg1LDcgKzE4MDMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTE4NTAsNyArMTg2OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0yMDA1LDcgKzIwMjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMjA1Myw3ICsyMDcxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjA4Nyw3ICsyMTA1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXRDaWRyUm91dGVUYWJsZTpfbWZkX2luZXRDaWRyUm91dGVUYWJsZV91bmRvX2NvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTIxMzMsNyArMjE1MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXRDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0Q2lkclJvdXRlVGFibGU6X21mZF9pbmV0Q2lkclJvdXRlVGFibGVfdW5kb192YWx1ZXMiLCAiY2FsbGVkXG4iKSk7CkBAIC0yMTY3LDcgKzIxODUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0Q2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aW5ldENpZHJSb3V0ZVRhYmxlOl9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0yMTk0LDcgKzIyMTIsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaW5ldENpZHJSb3V0ZVRhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQgKi8KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMjMyOCw5ICsyMzQ2LDExIEBACiAgICAgICAgIH0KICAgICB9CiAKLSAgICAvKiBzZXQgYWxsb3cgZHVwbGljYXRlcyB0aGlzIG1ha2VzIGluc2VydCBPKDEpICovCi0gICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoaWZfY3R4LT5jb250YWluZXIsIDEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKTsKKyAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImluZXRDaWRyUm91dGVUYWJsZSIpOworCisgICAvKiBzZXQgYWxsb3cgZHVwbGljYXRlcyB0aGlzIG1ha2VzIGluc2VydCBPKDEpICovCisgICBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChpZl9jdHgtPmNvbnRhaW5lciwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUyk7CiAKICAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQogICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOwpAQCAtMjM1Myw2ICsyMzczLDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2luZXRDaWRyUm91dGVUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKgogaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpbmV0Q2lkclJvdXRlVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTIzNzUsOCArMjM5Niw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAoaW5ldENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChpbmV0Q2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUQ0lEUlJPVVRFVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jCmluZGV4IDc1ZmRlODguLjBmZjAwYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXBDaWRyUm91dGVUYWJsZV9vaWRbXSA9IHsgSVBDSURSUk9VVEVUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZFtdID0geyBJUENJRFJST1VURVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwQ2lkclJvdXRlVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpcENpZHJSb3V0ZVRhYmxlX29pZCk7CiAKIGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uIGlwQ2lkclJvdXRlVGFibGVfdXNlcl9jb250ZXh0OwpAQCAtNzA2LDEzICs3MDYsMTMgQEAKICAgICAgKiBjb3B5ICgqIGlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0ciApIGRhdGEgYW5kICgqIGlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KICAgICAvKiogbnVsbE9pZExlbiBpcyBpbiBieXRlcywgc28gbm90IHNpemVvZihvaWQpIG5lZWRlZCAqLwotICAgIGlmICgoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpIDwgbnVsbE9pZExlbikgewotICAgICAgICAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0cikgPSBtYWxsb2MobnVsbE9pZExlbik7CisgICAgaWYgKCgqaXBDaWRyUm91dGVJbmZvX3ZhbF9wdHJfbGVuX3B0cikgPCAoc2l6ZV90KW51bGxPaWRMZW4pIHsKKyAgICAgICAgKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpID0gKG9pZCopbWFsbG9jKG51bGxPaWRMZW4pOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0cikpCiAgICAgICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogICAgIH0KLSAgICAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpID0gbnVsbE9pZExlbjsKLSAgICBtZW1jcHkoKCppcENpZHJSb3V0ZUluZm9fdmFsX3B0cl9wdHIpLCBudWxsT2lkLCBudWxsT2lkTGVuKTsKKyAgICAoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX2xlbl9wdHIpID0gKHNpemVfdCludWxsT2lkTGVuOworICAgIG1lbWNweSgoKmlwQ2lkclJvdXRlSW5mb192YWxfcHRyX3B0ciksIG51bGxPaWQsIChzaXplX3QpbnVsbE9pZExlbik7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwQ2lkclJvdXRlSW5mb19nZXQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKaW5kZXggNDk2OTQ4MC4uMmNlMzBiZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlLmgKQEAgLTE5NCw4ICsxOTQsOCBAQAogICAgICAgICAqIGlwQ2lkclJvdXRlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQ2lkclJvdXRlVGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICBpcENpZHJSb3V0ZVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBjMjdkMGFhLi5iYjI3Njc1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMjcwLDcgKzI3MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfUk9VVEVfRlJFRV9ET05UX0NMRUFSKTsKIAogICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBDaWRyUm91dGVUYWJsZTppcENpZHJSb3V0ZVRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtZm9yd2FyZC1taWIvaXBDaWRyUm91dGVUYWJsZS9pcENpZHJSb3V0ZVRhYmxlX2ludGVyZmFjZS5jCmluZGV4IGQwNTFjMjUuLjQ1Zjg0ODMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLWZvcndhcmQtbWliL2lwQ2lkclJvdXRlVGFibGUvaXBDaWRyUm91dGVUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1mb3J3YXJkLW1pYi9pcENpZHJSb3V0ZVRhYmxlL2lwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE3IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaXplLCBpcENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwQ2lkclJvdXRlVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBDaWRyUm91dGVUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0LCBpcENpZHJSb3V0ZVRhYmxlX2V4dGVybmFsX2FjY2VzcykKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtODEsMTkgKzkzLDIzIEBACiAgICAgICAgICAgICAgICAgX2lwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwQ2lkclJvdXRlVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogaXBDaWRyUm91dGVUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQ2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiBpcENpZHJSb3V0ZVRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gaXBDaWRyUm91dGVUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBDaWRyUm91dGVUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlwQ2lkclJvdXRlVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtMTAxLDEyICsxMTcsMTUgQEAKICAgICBpcENpZHJSb3V0ZVRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBDSURSUk9VVEVUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGlwQ2lkclJvdXRlVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBDaWRyUm91dGVUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQ0lEUlJPVVRFVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGlwQ2lkclJvdXRlVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzAsNyArMTQ5LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQ2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcENpZHJSb3V0ZVRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDQsNyArMTYzLDcgQEAKICAgICAgICAgICAgICAgICBfaXBDaWRyUm91dGVUYWJsZV91bmRvX2NvbHVtbihpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAogICAgICAgICAgICAgICAgIF9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrX2luZGV4ZXMoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CkBAIC0xODgsNyArMjA3LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBDSURSUk9VVEVUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBDSURSUk9VVEVUQUJMRV9NQVhfQ09MOwpAQCAtMjI3LDcgKzI0Niw3IEBACiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2lwQ2lkclJvdXRlVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNDUsNyArMjY0LDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0ID0gX21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fY29tbWl0OwogICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCA9CiAgICAgICAgIF9tZmRfaXBDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGVfY29tbWl0OwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjc4LDcgKzI5Nyw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMDEsNyArMzIwLDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTY3Miw3ICs2OTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTc5MSw3ICs4MTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xMDIyLDcgKzEwNDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTE1MSw3ICsxMTcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcENpZHJSb3V0ZVRhYmxlX2NoZWNrX2luZGV4ZXMgKi8KIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTQ1Niw3ICsxNDc1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNjExLDcgKzE2MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBDaWRyUm91dGVUYWJsZTpfbWZkX2lwQ2lkclJvdXRlVGFibGVfdW5kb19zZXR1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTE2NzUsNyArMTY5NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTE4NDAsNyArMTg1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE4ODgsNyArMTkwNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX2NvbW1pdCIsCkBAIC0xOTIyLDcgKzE5NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcENpZHJSb3V0ZVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQ2lkclJvdXRlVGFibGU6X21mZF9pcENpZHJSb3V0ZVRhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjA2NCw3ICsyMDgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogCkBAIC0yMTE4LDcgKzIxMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcENpZHJSb3V0ZVRhYmxlOl9tZmRfaXBDaWRyUm91dGVUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMjE0NSw3ICsyMTY0LDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwQ2lkclJvdXRlVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMjc3LDYgKzIyOTYsOCBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcENpZHJSb3V0ZVRhYmxlIik7CisKICAgICAvKiBzZXQgYWxsb3cgZHVwbGljYXRlcyB0aGlzIG1ha2VzIGluc2VydCBPKDEpICovCiAgICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfb3B0aW9uc19zZXQoaWZfY3R4LT5jb250YWluZXIsIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTKTsKQEAgLTIzMDIsNiArMjMyMyw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcENpZHJSb3V0ZVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaXBDaWRyUm91dGVUYWJsZV9yb3dyZXFfY3R4ICoKIGlwQ2lkclJvdXRlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQ2lkclJvdXRlVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0yMzI0LDggKzIzNDYsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKGlwQ2lkclJvdXRlVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKGlwQ2lkclJvdXRlVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUENJRFJST1VURVRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIuaAppbmRleCBiNDVjYmI0Li40ZTgzMTdmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIuaApAQCAtMyw3ICszLDEzIEBACiAgKi8KIAogY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwQWRkcmVzc1RhYmxlKTsKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZSk7Citjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUpOwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUpOwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZSk7CiBjb25maWdfcmVxdWlyZShpcC1taWIvaXBfc2NhbGFycyk7CisjaWZkZWYgbGludXgKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSk7Citjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUpOworI2VuZGlmCiBjb25maWdfYWRkX21pYihJUC1NSUIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwLmgKaW5kZXggNzBhNDczYy4uNjQ4Y2IyOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnAuaApAQCAtMTgsMTMgKzE4LDE2IEBACiAgKiAgICBiZSBoYW5kbGVkIGluIHRoZSAqX2hwdXguaCBoZWFkZXIgZmlsZS4KICAqLwogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24pCi0jaWYgZGVmaW5lZCggbGludXggKQorI2lmIGRlZmluZWQoIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rKQorI2VsaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCAoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkNCApIHx8IGRlZmluZWQoIGRyYWdvbmZseSApIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvYXJwX3N5c2N0bCkKICNlbHNlCiAvKgogICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCi0gKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KICAqLwotY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2FycC11bmtub3duLWFyY2gpCitjb25maWdfZXJyb3IodGhlIGFycCBkYXRhIGFjY2VzcyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4pCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfY29tbW9uLmMKaW5kZXggYzBjYzY4MC4uMjk1ODcxOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9jb21tb24uYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2NvbW1vbi5jCkBAIC0xMSw5OSArMTEsNiBAQAogCiAvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyoKLSAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCi0gKi8KLXN0YXRpYyB2b2lkIF9hY2Nlc3NfYXJwX2VudHJ5X3JlbGVhc2UobmV0c25tcF9hcnBfZW50cnkgKiBlbnRyeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkKTsKLQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCi0gKgotICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCi0gKiB0aGUgaGVhZGVyIGZpbGUuCi0gKi8KLWV4dGVybiBpbnQKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKLQotCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKLSAqIGNvbnRhaW5lciBmdW5jdGlvbnMKLSAqLwotLyoqCi0gKi8KLW5ldHNubXBfY29udGFpbmVyICoKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfaW5pdCh1X2ludCBmbGFncykKLXsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyMTsKLQotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsICJpbml0XG4iKSk7Ci0KLSAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVycy4gb25lIGluZGV4ZWQgYnkgaWZJbmRleCwgdGhlIG90aGVyCi0gICAgICogaW5kZXhlZCBieSBpZk5hbWUuCi0gICAgICovCi0gICAgY29udGFpbmVyMSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImFjY2Vzc19hcnA6dGFibGVfY29udGFpbmVyIik7Ci0gICAgaWYgKE5VTEwgPT0gY29udGFpbmVyMSkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgcmV0dXJuIGNvbnRhaW5lcjE7Ci19Ci0KLS8qKgotICogQHJldHZhbCBOVUxMICBlcnJvcgotICogQHJldHZhbCAhTlVMTCBwb2ludGVyIHRvIGNvbnRhaW5lcgotICovCi1uZXRzbm1wX2NvbnRhaW5lcioKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQotewotICAgIGludCByYzsKLQotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7Ci0KLSAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCi0gICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImFjY2VzczphcnA6dGFibGVfY29udGFpbmVyIik7Ci0gICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfYXJwXG4iKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgcmMgPSAgbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9hcmNoX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKLSAgICBpZiAoMCAhPSByYykgewotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfTk9GTEFHUyk7Ci0gICAgICAgIGNvbnRhaW5lciA9IE5VTEw7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvbnRhaW5lcjsKLX0KLQotdm9pZAotbmV0c25tcF9hY2Nlc3NfYXJwX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZyZWVfZmxhZ3MpCi17Ci0gICAgREVCVUdNU0dUTCgoImFjY2VzczphcnA6Y29udGFpbmVyIiwgImZyZWVcbiIpKTsKLQotICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjb250YWluZXIgZm9yIG5ldHNubXBfYWNjZXNzX2FycF9mcmVlXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmKCEgKGZyZWVfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19BUlBfRlJFRV9ET05UX0NMRUFSKSkgewotICAgICAgICAvKgotICAgICAgICAgKiBmcmVlIGFsbCBpdGVtcy4KLSAgICAgICAgICovCi0gICAgICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9hY2Nlc3NfYXJwX2VudHJ5X3JlbGVhc2UsCi0gICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICB9Ci0KLSAgICBpZighIChmcmVlX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVIpKQotICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwotfQotCi0vKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotLyoKICAqIGFycF9lbnRyeSBmdW5jdGlvbnMKICAqLwogLyoqCkBAIC0xMzcsOSArNDQsNDAgQEAKICAqLwogCiAvKioKKyAqIFVwZGF0ZSBnaXZlbiBlbnRyeSB3aXRoIG5ldyBkYXRhLiBDYWxjdWxhdGUgbmV3IGFycF9sYXN0X3VwZGF0ZWQsIGlmIGFueQorICogZmllbGQgaXMgY2hhbmdlZC4KICAqLwotdm9pZAotX2FjY2Vzc19hcnBfZW50cnlfcmVsZWFzZShuZXRzbm1wX2FycF9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQordm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfdXBkYXRlKG5ldHNubXBfYXJwX2VudHJ5ICplbnRyeSwKKyAgICAgICAgbmV0c25tcF9hcnBfZW50cnkgKm5ld19kYXRhKQogewotICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICBpbnQgbW9kaWZpZWQgPSAwOworCisgICAgZW50cnktPmdlbmVyYXRpb24gPSBuZXdfZGF0YS0+Z2VuZXJhdGlvbjsKKyAgICBpZiAoZW50cnktPmFycF9pcGFkZHJlc3NfbGVuICE9IG5ld19kYXRhLT5hcnBfaXBhZGRyZXNzX2xlbgorICAgICAgICAgICAgfHwgbWVtY21wKGVudHJ5LT5hcnBfaXBhZGRyZXNzLCBuZXdfZGF0YS0+YXJwX2lwYWRkcmVzcywgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKSAhPSAwICkgeworICAgICAgICBtb2RpZmllZCA9IDE7CisgICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbiA9IG5ld19kYXRhLT5hcnBfaXBhZGRyZXNzX2xlbjsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfaXBhZGRyZXNzLCBuZXdfZGF0YS0+YXJwX2lwYWRkcmVzcywgc2l6ZW9mKGVudHJ5LT5hcnBfaXBhZGRyZXNzKSk7CisgICAgfQorICAgIGlmIChlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiAhPSBuZXdfZGF0YS0+YXJwX3BoeXNhZGRyZXNzX2xlbiB8fAorICAgICAgICAgICAgbWVtY21wKGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIG5ld19kYXRhLT5hcnBfcGh5c2FkZHJlc3MsIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuKSAhPSAwKSB7CisgICAgICAgICBtb2RpZmllZCA9IDE7CisgICAgICAgICBlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiA9IG5ld19kYXRhLT5hcnBfcGh5c2FkZHJlc3NfbGVuOworICAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MsIG5ld19kYXRhLT5hcnBfcGh5c2FkZHJlc3MsIHNpemVvZihlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbikpOworICAgICB9CisgICAgaWYgKGVudHJ5LT5hcnBfc3RhdGUgIT0gbmV3X2RhdGEtPmFycF9zdGF0ZSkgeworICAgICAgICAgbW9kaWZpZWQgPSAxOworICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IG5ld19kYXRhLT5hcnBfc3RhdGU7CisgICAgIH0KKyAgICBpZiAoZW50cnktPmFycF90eXBlICE9IG5ld19kYXRhLT5hcnBfdHlwZSkgeworICAgICAgICAgbW9kaWZpZWQgPSAxOworICAgICAgICAgZW50cnktPmFycF90eXBlID0gbmV3X2RhdGEtPmFycF90eXBlOworICAgICB9CisgICAgaWYgKGVudHJ5LT5mbGFncyAhPSBuZXdfZGF0YS0+ZmxhZ3MpIHsKKyAgICAgICAgIG1vZGlmaWVkID0gMTsKKyAgICAgICAgIGVudHJ5LT5mbGFncyA9IG5ld19kYXRhLT5mbGFnczsKKyAgICAgfQorCisgICAgaWYgKG1vZGlmaWVkKQorICAgICAgICBlbnRyeS0+YXJwX2xhc3RfdXBkYXRlZCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9saW51eC5jCmluZGV4IDc1ZDk0YzAuLmEyZmE0OWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvYXJwX2xpbnV4LmMKQEAgLTEsNyArMSw1IEBACiAvKgogICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKLSAqCi0gKiAkSWQkCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgpAQCAtMTQsNDYgKzEyLDc2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2luY2x1ZGUgPG5ldC9pZl9hcnAuaD4KICNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgogCi1pbnQgX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpOworc3RhdGljIGludCBfbG9hZF92NChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2Vzcyk7CiAKLS8qKgotICovCi1pbnQKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCituZXRzbm1wX2FycF9hY2Nlc3MgKgorbmV0c25tcF9hY2Nlc3NfYXJwX2NyZWF0ZSh1X2ludCBpbml0X2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wQWNjZXNzQXJwVXBkYXRlICp1cGRhdGVfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycEdDICpnY19ob29rLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmNhY2hlX3RpbWVvdXQsIGludCAqY2FjaGVfZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNhY2hlX2V4cGlyZWQpCiB7Ci0gICAgaW50IHJjID0gMCwgaWR4X29mZnNldCA9IDA7CisgICAgbmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3M7CiAKLSAgICByYyA9IF9sb2FkX3Y0KGNvbnRhaW5lciwgaWR4X29mZnNldCk7Ci0gICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVI7Ci0gICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKLSAgICAgICAgcmV0dXJuIHJjOworICAgIGFjY2VzcyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9hcnBfYWNjZXNzKTsKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibWFsbG9jIGVycm9yIGluIG5ldHNubXBfYWNjZXNzX2FycF9jcmVhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KSAmJiAwIC8qIHh4LXJrczogYXJwIGZvciB2Nj8gKi8KLSAgICBpZHhfb2Zmc2V0ID0gcmM7CisgICAgYWNjZXNzLT5hcmNoX21hZ2ljID0gTlVMTDsKKyAgICBhY2Nlc3MtPm1hZ2ljID0gTlVMTDsKKyAgICBhY2Nlc3MtPnVwZGF0ZV9ob29rID0gdXBkYXRlX2hvb2s7CisgICAgYWNjZXNzLT5nY19ob29rID0gZ2NfaG9vazsKKyAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CiAKLSAgICByYyA9IF9sb2FkX3Y2KGNvbnRhaW5lciwgaWR4X29mZnNldCk7Ci0gICAgaWYocmMgPCAwKSB7Ci0gICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfS0VFUF9DT05UQUlORVI7Ci0gICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBpZiAoY2FjaGVfdGltZW91dCAhPSBOVUxMKQorICAgICAgICAqY2FjaGVfdGltZW91dCA9IDU7CisgICAgaWYgKGNhY2hlX2ZsYWdzICE9IE5VTEwpCisgICAgICAgICpjYWNoZV9mbGFncyB8PSBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRAorICAgICAgICAgICAgICAgICAgICAgICAgfCBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEOworICAgIGFjY2Vzcy0+Y2FjaGVfZXhwaXJlZCA9IGNhY2hlX2V4cGlyZWQ7CiAKLSAgICAvKgotICAgICAqIHJldHVybiBubyBlcnJvcnMgKDApIGlmIHdlIGZvdW5kIGFueSBpbnRlcmZhY2VzCi0gICAgICovCi0gICAgaWYocmMgPiAwKQotICAgICAgICByYyA9IDA7CisgICAgcmV0dXJuIGFjY2VzczsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9kZWxldGUobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaWYgKE5VTEwgPT0gYWNjZXNzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQoYWNjZXNzKTsKKyAgICBmcmVlKGFjY2Vzcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF9sb2FkKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBhY2Nlc3MtPmdlbmVyYXRpb24rKzsKKyAgICByYyA9X2xvYWRfdjQoYWNjZXNzKTsKKyAgICBhY2Nlc3MtPmdjX2hvb2soYWNjZXNzKTsKKyAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IChyYyA9PSAwKTsKIAogICAgIHJldHVybiByYzsKIH0KIAoraW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKIC8qKgogICovCi1pbnQKLV9sb2FkX3Y0KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KQorc3RhdGljIGludAorX2xvYWRfdjQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCiB7CiAgICAgRklMRSAgICAgICAgICAgKmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEyOF07CkBAIC02MywxMSArOTEsMTEgQEAKICAgICBjaGFyICAgICAgICAgICAqYXJwX3Rva2VuOwogICAgIGludCAgICAgICAgICAgICBpOwogCi0gICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBjb250YWluZXIpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gYWNjZXNzKTsKIAogI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L2FycCIKICAgICBpZiAoIShpbiA9IGZvcGVuKFBST0NGSUxFLCAiciIpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpOworICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIik7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKQEAgLTgzLDcgKzExMSw3IEBACiAgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CiAgICAgICAgIAogICAgICAgICBpbnQgICAgICAgICAgICAgemEsIHpiLCB6YywgemQ7Ci0gICAgICAgIGludCAgICAgICAgICAgICB0bXBfZmxhZ3M7CisgICAgICAgIHVuc2lnbmVkIGludCAgICB0bXBfZmxhZ3M7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBpZm5hbWVbMjFdOwogCiAgICAgICAgIHJjID0gc3NjYW5mKGxpbmUsCkBAIC0xMTAsNiArMTM4LDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogbG9vayB1cCBpZkluZGV4CiAgICAgICAgICAqLworICAgICAgICBlbnRyeS0+Z2VuZXJhdGlvbiA9IGFjY2Vzcy0+Z2VuZXJhdGlvbjsKICAgICAgICAgZW50cnktPmlmX2luZGV4ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoaWZuYW1lKTsKICAgICAgICAgaWYoMCA9PSBlbnRyeS0+aWZfaW5kZXgpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkbid0IGZpbmQgaWZJbmRleCBmb3IgJyVzJywgc2tpcHBpbmdcbiIsCkBAIC0xMjIsNyArMTUxLDcgQEAKICAgICAgICAgICogbm93IHRoYXQgd2UndmUgcGFzc2VkIGFsbCB0aGUgcG9zc2libGUgJ2NvbnRpbnVlJywgYXNzaWduCiAgICAgICAgICAqIGluZGV4IG9mZnNldC4KICAgICAgICAgICovCi0gICAgICAgIGVudHJ5LT5uc19hcnBfaW5kZXggPSArK2lkeF9vZmZzZXQ7CisgICAgICAgIC8qIGVudHJ5LT5uc19hcnBfaW5kZXggPSArK2lkeF9vZmZzZXQ7ICovCiAKICAgICAgICAgLyoKICAgICAgICAgICogcGFyc2UgaXAgYWRkcgpAQCAtMTc3LDE3ICsyMDYsOSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCiAgICAgICAgICAqLwotICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApCi0gICAgICAgIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6YXJwOmNvbnRhaW5lciIsImVycm9yIHdpdGggYXJwX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOwotICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUoZW50cnkpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KKyAgICAgICAgYWNjZXNzLT51cGRhdGVfaG9vayhhY2Nlc3MsIGVudHJ5KTsKICAgICB9CiAKICAgICBmY2xvc2UoaW4pOwotICAgIGlmKCByYyA8IDAgKQotICAgICAgICByZXR1cm4gcmM7Ci0KLSAgICByZXR1cm4gaWR4X29mZnNldDsKKyAgICByZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9uZXRsaW5rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA1OWMyMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfbmV0bGluay5jCkBAIC0wLDAgKzEsMzA0IEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgorCisKK3N0YXRpYyBpbnQgZmlsbHVwX2VudHJ5X2luZm8obmV0c25tcF9hcnBfZW50cnkgKmVudHJ5LCBzdHJ1Y3Qgbmxtc2doZHIgKmgpOworc3RhdGljIHZvaWQgbmV0c25tcF9hY2Nlc3NfYXJwX3JlYWRfbmV0bGluayhpbnQgZmQsIHZvaWQgKmRhdGEpOworCisvKioKKyAqLworbmV0c25tcF9hcnBfYWNjZXNzICoKK25ldHNubXBfYWNjZXNzX2FycF9jcmVhdGUodV9pbnQgaW5pdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjYWNoZV90aW1lb3V0LCBpbnQgKmNhY2hlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWNoZV9leHBpcmVkKQoreworICAgIG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzOworCisgICAgYWNjZXNzID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2FycF9hY2Nlc3MpOworICAgIGlmIChOVUxMID09IGFjY2VzcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJtYWxsb2MgZXJyb3IgaW4gbmV0c25tcF9hY2Nlc3NfYXJwX2NyZWF0ZVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGFjY2Vzcy0+YXJjaF9tYWdpYyA9IE5VTEw7CisgICAgYWNjZXNzLT5tYWdpYyA9IE5VTEw7CisgICAgYWNjZXNzLT51cGRhdGVfaG9vayA9IHVwZGF0ZV9ob29rOworICAgIGFjY2Vzcy0+Z2NfaG9vayA9IGdjX2hvb2s7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworCisgICAgaWYgKGNhY2hlX3RpbWVvdXQgIT0gTlVMTCkKKyAgICAgICAgKmNhY2hlX3RpbWVvdXQgPSA1OworICAgIGlmIChjYWNoZV9mbGFncyAhPSBOVUxMKQorICAgICAgICAqY2FjaGVfZmxhZ3MgfD0gTkVUU05NUF9DQUNIRV9SRVNFVF9USU1FUl9PTl9VU0UgfCBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRDsKKyAgICBhY2Nlc3MtPmNhY2hlX2V4cGlyZWQgPSBjYWNoZV9leHBpcmVkOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsICJjcmVhdGUgYXJwIGNhY2hlXG4iKSk7CisKKyAgICByZXR1cm4gYWNjZXNzOworfQorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2RlbGV0ZShuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBpZiAoTlVMTCA9PSBhY2Nlc3MpCisgICAgICAgIHJldHVybiAwOworCisgICAgbmV0c25tcF9hY2Nlc3NfYXJwX3VubG9hZChhY2Nlc3MpOworICAgIGZyZWUoYWNjZXNzKTsKKworICAgIHJldHVybiAwOworfQorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaW50IHIsIGZkID0gKHVpbnRwdHJfdCkgYWNjZXNzLT5hcmNoX21hZ2ljOworICAgIHN0cnVjdCB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBuOworICAgICAgICBzdHJ1Y3QgbmRtc2cgcjsKKyAgICB9IHJlcTsKKworICAgIGlmIChhY2Nlc3MtPnN5bmNocm9uaXplZCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoZmQgPT0gMCkgeworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgc2E7CisKKyAgICAgICAgZmQgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICAgICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYWNjZXNzX2FycF9sb2FkOiBuZXRsaW5rIHNvY2tldCBjcmVhdGUgZXJyb3JcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGFjY2Vzcy0+YXJjaF9tYWdpYyA9ICh2b2lkICopKHVpbnRwdHJfdClmZDsKKworICAgICAgICBtZW1zZXQoJnNhLCAwLCBzaXplb2Yoc2EpKTsKKyAgICAgICAgc2EubmxfZmFtaWx5ID0gQUZfTkVUTElOSzsKKyAgICAgICAgc2EubmxfZ3JvdXBzID0gUlRNR1JQX05FSUdIOworICAgICAgICBpZiAoYmluZChmZCwgKHN0cnVjdCBzb2NrYWRkciopICZzYSwgc2l6ZW9mKHNhKSkgPCAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZDogbmV0bGluayBiaW5kIGZhaWxlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVnaXN0ZXJfcmVhZGZkKGZkLCBuZXRzbm1wX2FjY2Vzc19hcnBfcmVhZF9uZXRsaW5rLCBhY2Nlc3MpICE9IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm5ldHNubXBfYWNjZXNzX2FycF9sb2FkOiBlcnJvciByZWdpc3RlcmluZyBuZXRsaW5rIHNvY2tldFxuIik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwgInN5bmNocm9uaXppbmcgYXJwIHRhYmxlXG4iKSk7CisKKyAgICBhY2Nlc3MtPmdlbmVyYXRpb24rKzsKKworICAgIG1lbXNldCgmcmVxLCAwLCBzaXplb2YocmVxKSk7CisgICAgcmVxLm4ubmxtc2dfbGVuID0gc2l6ZW9mKHJlcSk7CisgICAgcmVxLm4ubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfUk9PVDsKKyAgICByZXEubi5ubG1zZ190eXBlID0gUlRNX0dFVE5FSUdIOworICAgIHJlcS5yLm5kbV9mYW1pbHkgPSBBRl9VTlNQRUM7CisKKyAgICByID0gc2VuZChmZCwgJnJlcSwgcmVxLm4ubmxtc2dfbGVuLCAwKTsKKyAgICBpZiAociA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9hY2Nlc3NfYXJwX3JlZnJlc2g6IHNlbmQgZmFpbGVkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHdoaWxlICghYWNjZXNzLT5zeW5jaHJvbml6ZWQpCisgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9yZWFkX25ldGxpbmsoZmQsIGFjY2Vzcyk7CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgaW50IGZkOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpuZXRsaW5rOmFycCIsICJ1bmxvYWQgYXJwIGNhY2hlXG4iKSk7CisKKyAgICBmZCA9ICh1aW50cHRyX3QpIGFjY2Vzcy0+YXJjaF9tYWdpYzsKKyAgICBpZiAoZmQgPiAwKSB7CisgICAgICAgICB1bnJlZ2lzdGVyX3JlYWRmZChmZCk7CisgICAgICAgICBjbG9zZShmZCk7CisgICAgICAgICBhY2Nlc3MtPmFyY2hfbWFnaWMgPSBOVUxMOworCSBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfcmVhZF9uZXRsaW5rKGludCBmZCwgdm9pZCAqZGF0YSkKK3sKKyAgICBuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcyA9IChuZXRzbm1wX2FycF9hY2Nlc3MgKikgZGF0YTsKKyAgICBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnk7CisgICAgY2hhciBidWZbMTYzODRdOworICAgIHN0cnVjdCBubG1zZ2hkciAqaDsKKyAgICBpbnQgciwgbGVuOworCisgICAgZG8geworICAgICAgICByID0gcmVjdihmZCwgYnVmLCBzaXplb2YoYnVmKSwgTVNHX0RPTlRXQUlUKTsKKyAgICAgICAgaWYgKHIgPCAwKSB7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUFHQUlOKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibmV0bGluayBidWZmZXIgb3ZlcnJ1blxuIik7CisgICAgICAgICAgICBhY2Nlc3MtPnN5bmNocm9uaXplZCA9IDA7CisgICAgICAgICAgICBpZiAoYWNjZXNzLT5jYWNoZV9leHBpcmVkICE9IE5VTEwpCisJCSphY2Nlc3MtPmNhY2hlX2V4cGlyZWQgPSAxOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSB3aGlsZSAoMCk7CisgICAgbGVuID0gcjsKKworICAgIGZvciAoaCA9IChzdHJ1Y3Qgbmxtc2doZHIgKikgYnVmOyBOTE1TR19PSyhoLCBsZW4pOyBoID0gTkxNU0dfTkVYVChoLCBsZW4pKSB7CisgICAgICAgICBpZiAoaC0+bmxtc2dfdHlwZSA9PSBOTE1TR19ET05FKSB7CisgICAgICAgICAgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAxOworICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgfQorCisgICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwgImFycCBuZXRsaW5rIG5vdGlmaWNhdGlvblxuIikpOworICAgIAorICAgICAgICAgZW50cnktPmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CisgICAgICAgICByID0gZmlsbHVwX2VudHJ5X2luZm8gKGVudHJ5LCBoKTsKKyAgICAgICAgIGlmIChyID4gMCkgeworICAgICAgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CisgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgIGlmIChyIDwgMCkgeworICAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJmaWxsaW5nIGVudHJ5IGluZm8gZmFpbGVkXG4iKSk7CisgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6bmV0bGluazphcnAiLCAiZmlsbGluZyBlbnRyeSBpbmZvIGZhaWxlZFxuIikpOworICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50CitmaWxsdXBfZW50cnlfaW5mbyhuZXRzbm1wX2FycF9lbnRyeSAqZW50cnksIHN0cnVjdCBubG1zZ2hkciAqbmxtcCkKK3sKKyAgICBzdHJ1Y3QgbmRtc2cgICAqcnRtcDsKKyAgICBzdHJ1Y3QgcnRhdHRyICAqdGJbTkRBX01BWCArIDFdLCAqcnRhOworICAgIGludCAgICAgICAgICAgICBsZW5ndGg7CisKKyAgICBydG1wID0gKHN0cnVjdCBuZG1zZyAqKSBOTE1TR19EQVRBKG5sbXApOworICAgIHN3aXRjaCAobmxtcC0+bmxtc2dfdHlwZSkgeworICAgIGNhc2UgUlRNX05FV05FSUdIOgorICAgICAgICBpZiAocnRtcC0+bmRtX3N0YXRlID09IE5VRF9GQUlMRUQpCisgICAgICAgICAgICBlbnRyeS0+ZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19BUlBfRU5UUllfRkxBR19ERUxFVEU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyA9IDA7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRNX0RFTE5FSUdIOgorICAgICAgICBlbnRyeS0+ZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19BUlBfRU5UUllfRkxBR19ERUxFVEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRNX0dFVE5FSUdIOgorICAgICAgICByZXR1cm4gMDsKKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOm5ldGxpbms6YXJwIiwKKyAgICAgICAgICAgICAgICAgICAgIldyb25nIE5ldGxpbmsgbWVzc2FnZSB0eXBlICVkXG4iLCBubG1wLT5ubG1zZ190eXBlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAocnRtcC0+bmRtX3N0YXRlID09IE5VRF9OT0FSUCkgeworICAgICAgICAvKiBOVURfTk9BUlAgaXMgZm9yIGJyb2FkY2FzdCBhZGRyZXNzZXMgYW5kIHNpbWlsYXIsCisgICAgICAgICAqIGRyb3AgdGhlbSBzaWxlbnRseSAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBtZW1zZXQodGIsIDAsIHNpemVvZihzdHJ1Y3QgcnRhdHRyICopICogKE5EQV9NQVggKyAxKSk7CisgICAgbGVuZ3RoID0gbmxtcC0+bmxtc2dfbGVuIC0gTkxNU0dfTEVOR1RIKHNpemVvZigqcnRtcCkpOworICAgIHJ0YSA9ICgoc3RydWN0IHJ0YXR0ciAqKSAoKChjaGFyICopIChydG1wKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG5kbXNnKSkpKTsKKyAgICB3aGlsZSAoUlRBX09LKHJ0YSwgbGVuZ3RoKSkgeworICAgICAgICBpZiAocnRhLT5ydGFfdHlwZSA8PSBOREFfTUFYKQorICAgICAgICAgICAgdGJbcnRhLT5ydGFfdHlwZV0gPSBydGE7CisgICAgICAgIHJ0YSA9IFJUQV9ORVhUKHJ0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEZpbGwgdXAgdGhlIGluZGV4IGFuZCBhZGRyZXNzZXMKKyAgICAgKi8KKyAgICBlbnRyeS0+aWZfaW5kZXggPSBydG1wLT5uZG1faWZpbmRleDsKKyAgICBpZiAodGJbTkRBX0RTVF0pIHsKKyAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID0gUlRBX1BBWUxPQUQodGJbTkRBX0RTVF0pOworICAgICAgICBpZiAoZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID4gc2l6ZW9mKGVudHJ5LT5hcnBfaXBhZGRyZXNzKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldGxpbmsgaXAgYWRkcmVzcyBsZW5ndGggJWQgaXMgdG9vIGxvbmdcbiIsCisgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbWNweShlbnRyeS0+YXJwX2lwYWRkcmVzcywgUlRBX0RBVEEodGJbTkRBX0RTVF0pLAorICAgICAgIGVudHJ5LT5hcnBfaXBhZGRyZXNzX2xlbik7CisgICAgfQorICAgIGlmICh0YltOREFfTExBRERSXSkgeworICAgICAgICBlbnRyeS0+YXJwX3BoeXNhZGRyZXNzX2xlbiA9IFJUQV9QQVlMT0FEKHRiW05EQV9MTEFERFJdKTsKKyAgICAgICAgaWYgKGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuID4gc2l6ZW9mKGVudHJ5LT5hcnBfcGh5c2FkZHJlc3MpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibmV0bGluayBodyBhZGRyZXNzIGxlbmd0aCAlZCBpcyB0b28gbG9uZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5hcnBfcGh5c2FkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkoZW50cnktPmFycF9waHlzYWRkcmVzcywgUlRBX0RBVEEodGJbTkRBX0xMQUREUl0pLAorICAgICAgICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4pOworICAgIH0KKworICAgIHN3aXRjaCAocnRtcC0+bmRtX3N0YXRlKSB7CisgICAgY2FzZSBOVURfSU5DT01QTEVURToKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfSU5DT01QTEVURTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUkVBQ0hBQkxFOgorICAgIGNhc2UgTlVEX1BFUk1BTkVOVDoKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfUkVBQ0hBQkxFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VRF9TVEFMRToKKyAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfU1RBTEU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX0RFTEFZOgorICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9ERUxBWTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUFJPQkU6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1BST0JFOworICAgICAgICBicmVhazsKKyAgICBjYXNlIE5VRF9GQUlMRUQ6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX0lOVkFMSUQ7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTlVEX05PTkU6CisgICAgICAgIGVudHJ5LT5hcnBfc3RhdGUgPSBJTkVUTkVUVE9NRURJQVNUQVRFX1VOS05PV047CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJVbnJlY29nbml6ZWQgQVJQIGVudHJ5IHN0YXRlICVkIiwgcnRtcC0+bmRtX3N0YXRlKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgc3dpdGNoIChydG1wLT5uZG1fc3RhdGUpIHsKKyAgICBjYXNlIE5VRF9JTkNPTVBMRVRFOgorICAgIGNhc2UgTlVEX0ZBSUxFRDoKKyAgICBjYXNlIE5VRF9OT05FOgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfSU5WQUxJRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUkVBQ0hBQkxFOgorICAgIGNhc2UgTlVEX1NUQUxFOgorICAgIGNhc2UgTlVEX0RFTEFZOgorICAgIGNhc2UgTlVEX1BST0JFOgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfRFlOQU1JQzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBOVURfUEVSTUFORU5UOgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfU1RBVElDOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBlbnRyeS0+YXJwX3R5cGUgPSBJTkVUTkVUVE9NRURJQVRZUEVfTE9DQUw7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2FycF9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRlOWNkYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9hcnBfc3lzY3RsLmMKQEAgLTAsMCArMSwzMzAgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldC9pZl9kbC5oPgorI2luY2x1ZGUgPG5ldC9pZl90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmICFkZWZpbmVkKFNBX1NJWkUpICYmICFkZWZpbmVkKFJUX1JPVU5EVVApCisjZGVmaW5lIFJUX1JPVU5EVVAoYSkgIFwKKwkoKGEpID4gMCA/ICgxICsgKCgoYSkgLSAxKSB8IChzaXplb2YobG9uZykgLSAxKSkpIDogc2l6ZW9mKGxvbmcpKQorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWRfYXJwX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfYXJwX2FjY2VzcyAqKTsKK3N0YXRpYyBpbnQgX2xvYWRfbmRwX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfYXJwX2FjY2VzcyAqKTsKKworbmV0c25tcF9hcnBfYWNjZXNzICoKK25ldHNubXBfYWNjZXNzX2FycF9jcmVhdGUodV9pbnQgaW5pdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjYWNoZV90aW1lb3V0LCBpbnQgKmNhY2hlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWNoZV9leHBpcmVkKQoreworICAgIG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzOworCisgICAgYWNjZXNzID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2FycF9hY2Nlc3MpOworICAgIGlmIChOVUxMID09IGFjY2VzcykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWFsbG9jIGVycm9yIGluIG5ldHNubXBfYWNjZXNzX2FycF9jcmVhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBhY2Nlc3MtPmFyY2hfbWFnaWMgPSBOVUxMOworICAgIGFjY2Vzcy0+bWFnaWMgPSBOVUxMOworICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2sgPSB1cGRhdGVfaG9vazsKKyAgICBhY2Nlc3MtPmdjX2hvb2sgPSBnY19ob29rOworICAgIGFjY2Vzcy0+c3luY2hyb25pemVkID0gMDsKKworICAgIGlmIChjYWNoZV90aW1lb3V0ICE9IE5VTEwpCisgICAgICAgICpjYWNoZV90aW1lb3V0ID0gNTsKKyAgICBpZiAoY2FjaGVfZmxhZ3MgIT0gTlVMTCkKKyAgICAgICAgKmNhY2hlX2ZsYWdzIHw9IE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0JFRk9SRV9MT0FECisgICAgICAgICAgICAgICAgICAgICAgICB8IE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQ7CisgICAgYWNjZXNzLT5jYWNoZV9leHBpcmVkID0gY2FjaGVfZXhwaXJlZDsKKworICAgIHJldHVybiBhY2Nlc3M7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfZGVsZXRlKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworICAgIGlmIChOVUxMID09IGFjY2VzcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKGFjY2Vzcyk7CisgICAgZnJlZShhY2Nlc3MpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBuZXRzbm1wX2FjY2Vzc19hcnBfbG9hZChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBpbnQgZXJyID0gMDsKKworICAgIGFjY2Vzcy0+Z2VuZXJhdGlvbisrOworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY0XG4iKSk7CisgICAgZXJyID0gX2xvYWRfYXJwX3RhYmxlX2Zyb21fc3lzY3RsKGFjY2Vzcyk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICJuZXRzbm1wX2FjY2Vzc19hcnBfaXB2NCBmYWlsZWQgJWRcbiIsIGVycikpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAoZXJyID09IDApOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6cm91dGU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAicm91dGVfY29udGFpbmVyX2FyY2hfbG9hZCBpcHY2XG4iKSk7CisgICAgZXJyID0gX2xvYWRfbmRwX3RhYmxlX2Zyb21fc3lzY3RsKGFjY2Vzcyk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICJuZXRzbm1wX2FjY2Vzc19hcnBfaXB2NiBmYWlsZWQgJWRcbiIsIGVycikpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgYWNjZXNzLT5nY19ob29rKGFjY2Vzcyk7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAoZXJyID09IDApOworI2VuZGlmCisKK291dDoKKyAgICByZXR1cm4gKGVyciA9PSAwID8gMCA6IC0xKTsKK30KKworaW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgYWNjZXNzLT5zeW5jaHJvbml6ZWQgPSAwOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19sb2FkX2FycF90YWJsZV9mcm9tX3N5c2N0bChuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2VzcykKK3sKKyAgICBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnk7CisgICAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbmFycCAqc2luMjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfZGwgKnNkbDsKKyAgICBjaGFyICpidWYsICpsaW0sICpuZXdidWYsICpuZXh0OworICAgIGludCBtaWJbNl07CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgZXJyLCBzdDsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gYWNjZXNzKTsKKworICAgIG1pYlswXSA9IENUTF9ORVQ7CisgICAgbWliWzFdID0gUEZfUk9VVEU7CisgICAgbWliWzJdID0gMDsKKyAgICBtaWJbM10gPSBBRl9JTkVUOworICAgIG1pYls0XSA9IE5FVF9SVF9GTEFHUzsKKyAgICBtaWJbNV0gPSBSVEZfTExJTkZPOworCisgICAgZXJyID0gMDsKKyAgICBidWYgPSBuZXdidWYgPSBOVUxMOworCisgICAgLyogVGhlIGZvbGxvd2luZyBsb2dpYyB3YXMgYWRhcHRlZCBmcm9tIHNlYXJjaCguLikgaW4gdXNyLnNiaW4vYXJwL2FycC5jICovCisKKyAgICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBFbXB0eSBhcnAgdGFibGUuICovCisgICAgaWYgKG5lZWRlZCA9PSAwKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhidWYsIG5lZWRlZCk7CisgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gbmV3YnVmOworICAgICAgICBzdCA9IHN5c2N0bChtaWIsIDYsIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdCA9PSAwIHx8IGVycm5vICE9IEVOT01FTSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkZWQgKz0gbmVlZGVkIC8gODsgLyogWFhYOiB3aHkgOD8gKi8KKyAgICB9CisgICAgaWYgKHN0ID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisgICAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyICopbmV4dDsKKyAgICAgICAgc2luMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW5hcnAqKShydG0gKyAxKTsKKyNpZmRlZiBTQV9TSVpFCisgICAgICAgIHNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwqKSgoY2hhciAqKXNpbjIgKyBTQV9TSVpFKHNpbjIpKTsKKyNlbHNlCisJc2RsID0gKHN0cnVjdCBzb2NrYWRkcl9kbCopKHZvaWQgKikoUlRfUk9VTkRVUChzaW4yLT5zaW5fbGVuKSArIChjaGFyICopKHZvaWQgKilzaW4yKTsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+Z2VuZXJhdGlvbiA9IGFjY2Vzcy0+Z2VuZXJhdGlvbjsKKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisKKyAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID0gNDsKKworICAgICAgICBtZW1jcHkoZW50cnktPmFycF9pcGFkZHJlc3MsICZzaW4yLT5zaW5fYWRkci5zX2FkZHIsCisgICAgICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworCisgICAgICAgIC8qIEhXIEFkZHJlc3MgKi8KKyAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gPSA2OworICAgICAgICBpZiAoMCA8IHNkbC0+c2RsX2FsZW4gJiYKKyAgICAgICAgICAgIHNkbC0+c2RsX2FsZW4gPD0gTkVUU05NUF9BQ0NFU1NfQVJQX1BIWVNBRERSX0JVRl9TSVpFKSB7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPmFycF9waHlzYWRkcmVzcywgTExBRERSKHNkbCksIHNkbC0+c2RsX2FsZW4pOworICAgICAgICAgICAgLyogUHJvY2VzcyBzdGF0dXMgKi8KKyAgICAgICAgICAgIC8qIFhYWDogc2V0dGluZyB0aGlzIHZhbHVlIGZvciBhbGwgc3RhdGVzIGlzIHdyb25nLiAqLworICAgICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfUkVBQ0hBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc1swXSA9ICdcMCc7CisgICAgICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9JTkNPTVBMRVRFOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJvY2VzcyB0eXBlICovCisgICAgICAgIC8qIFhYWDogbW9yZSBzdGF0ZXMgc2hvdWxkIGJlIGhhbmRsZWQgaGVyZSwgcHJvYmFibHkuLiAqLworICAgICAgICBpZiAocnRtLT5ydG1fcm14LnJteF9leHBpcmUgPT0gMCkKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9TVEFUSUM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9EWU5BTUlDOworCisgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CisKKyAgICB9CisKK291dDoKKyAgICBmcmVlKGJ1Zik7CisgICAgcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludAorX2xvYWRfbmRwX3RhYmxlX2Zyb21fc3lzY3RsKG5ldHNubXBfYXJwX2FjY2VzcyAqYWNjZXNzKQoreworI2lmIDEKKyAgICBuZXRzbm1wX2FycF9lbnRyeSAqZW50cnk7CisgICAgc3RydWN0IHJ0X21zZ2hkciAqcnRtOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjI7CisgICAgc3RydWN0IHNvY2thZGRyX2RsICpzZGw7CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgZXJyLCBtaWJbNl0sIHN0OworICAgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5ld2J1ZiwgKm5leHQ7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGFjY2Vzcyk7CisKKyAgICBtaWJbMF0gPSBDVExfTkVUOworICAgIG1pYlsxXSA9IFBGX1JPVVRFOworICAgIG1pYlsyXSA9IDA7CisgICAgbWliWzNdID0gQUZfSU5FVDY7CisgICAgbWliWzRdID0gTkVUX1JUX0ZMQUdTOworICAgIG1pYls1XSA9IFJURl9MTElORk87CisKKyAgICBlcnIgPSAwOworICAgIGJ1ZiA9IG5ld2J1ZiA9IE5VTEw7CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBFbXB0eSBhcnAgdGFibGUuICovCisgICAgaWYgKG5lZWRlZCA9PSAwKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhidWYsIG5lZWRlZCk7CisgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gbmV3YnVmOworICAgICAgICBzdCA9IHN5c2N0bChtaWIsIDYsIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdCA9PSAwIHx8IGVycm5vICE9IEVOT01FTSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkZWQgKz0gbmVlZGVkIC8gODsgLyogWFhYOiB3aHkgOD8gKi8KKyAgICB9CisgICAgaWYgKHN0ID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisgICAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworCisgICAgICAgIHJ0bSA9IChzdHJ1Y3QgcnRfbXNnaGRyICopbmV4dDsKKyAgICAgICAgc2luMiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42KikocnRtICsgMSk7CisjaWZkZWYgU0FfU0laRQorICAgICAgICBzZGwgPSAoc3RydWN0IHNvY2thZGRyX2RsKikoKGNoYXIgKilzaW4yICsgU0FfU0laRShzaW4yKSk7CisjZWxzZQorCXNkbCA9IChzdHJ1Y3Qgc29ja2FkZHJfZGwqKSh2b2lkICopKFJUX1JPVU5EVVAoc2luMi0+c2luNl9sZW4pICsgKGNoYXIgKikodm9pZCAqKXNpbjIpOworI2VuZGlmCisKKyAgICAgICAgaWYgKCEocnRtLT5ydG1fZmxhZ3MgJiBSVEZfSE9TVCkgfHwKKyAgICAgICAgICAgIElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luMi0+c2luNl9hZGRyKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+Z2VuZXJhdGlvbiA9IGFjY2Vzcy0+Z2VuZXJhdGlvbjsKKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisKKyAgICAgICAgZW50cnktPmFycF9pcGFkZHJlc3NfbGVuID0gMTY7CisKKyAgICAgICAgbWVtY3B5KGVudHJ5LT5hcnBfaXBhZGRyZXNzLCAmc2luMi0+c2luNl9hZGRyLnM2X2FkZHIsCisgICAgICAgICAgICBlbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pOworCisgICAgICAgIC8qIEhXIEFkZHJlc3MgKi8KKyAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc19sZW4gPSBzZGwtPnNkbF9hbGVuOworICAgICAgICBpZiAoMCA8IHNkbC0+c2RsX2FsZW4gJiYKKyAgICAgICAgICAgIHNkbC0+c2RsX2FsZW4gPD0gTkVUU05NUF9BQ0NFU1NfQVJQX1BIWVNBRERSX0JVRl9TSVpFKSB7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPmFycF9waHlzYWRkcmVzcywgTExBRERSKHNkbCksIHNkbC0+c2RsX2FsZW4pOworICAgICAgICAgICAgLyogUHJvY2VzcyBzdGF0dXMgKi8KKyAgICAgICAgICAgIC8qIFhYWDogc2V0dGluZyB0aGlzIHZhbHVlIGZvciBhbGwgc3RhdGVzIGlzIHdyb25nLiAqLworICAgICAgICAgICAgZW50cnktPmFycF9zdGF0ZSA9IElORVRORVRUT01FRElBU1RBVEVfUkVBQ0hBQkxFOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgZW50cnktPmFycF9waHlzYWRkcmVzc1swXSA9ICdcMCc7CisgICAgICAgICAgICBlbnRyeS0+YXJwX3N0YXRlID0gSU5FVE5FVFRPTUVESUFTVEFURV9JTkNPTVBMRVRFOworICAgICAgICB9CisKKyAgICAgICAgLyogUHJvY2VzcyB0eXBlICovCisgICAgICAgIC8qIFhYWDogbW9yZSBzdGF0ZXMgc2hvdWxkIGJlIGhhbmRsZWQgaGVyZSwgcHJvYmFibHkuLiAqLworICAgICAgICBpZiAocnRtLT5ydG1fcm14LnJteF9leHBpcmUgPT0gMCkKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9TVEFUSUM7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5hcnBfdHlwZSA9IElORVRORVRUT01FRElBVFlQRV9EWU5BTUlDOworCisgICAgICAgIGFjY2Vzcy0+dXBkYXRlX2hvb2soYWNjZXNzLCBlbnRyeSk7CisKKyAgICB9CisKK291dDoKKyAgICBmcmVlKGJ1Zik7CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Yjk5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBkZWZhdWx0cm91dGVyIGRhdGEgYWNjZXNzIGhlYWRlcgorICoKKyAqICRJZDogJAorICovCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGNvbmZpZ3VyZSByZXF1aXJlZCBmaWxlcworICoKKyAqIE5vdGVzOgorICoKKyAqIDEpIHByZWZlciBmdW5jdGlvbmFsaXR5IG92ZXIgcGxhdGZvcm0sIHdoZXJlIHBvc3NpYmxlLiBJZiBhIG1ldGhvZAorICogICAgaXMgYXZhaWxhYmxlIGZvciBtdWx0aXBsZSBwbGF0Zm9ybXMsIHRlc3QgdGhhdCBmaXJzdC4gVGhhdCB3YXkKKyAqICAgIHdoZW4gYSBuZXcgcGxhdGZvcm0gaXMgcG9ydGVkLCBpdCB3b24ndCBuZWVkIGEgbmV3IHRlc3QgaGVyZS4KKyAqCisgKiAyKSBkb24ndCBkbyBkZXRhaWwgcmVxdWlyZW1lbnRzIGhlcmUuIElmLCBmb3IgZXhhbXBsZSwKKyAqICAgIEhQVVgxMSBoYWQgZGlmZmVyZW50IHJldWlyZW1lbnRzIHRoYW4gb3RoZXIgSFBVWCwgdGhhdCBzaG91bGQKKyAqICAgIGJlIGhhbmRsZWQgaW4gdGhlICpfaHB1eC5oIGhlYWRlciBmaWxlLgorICovCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9jb21tb24pCisjaWYgZGVmaW5lZCggbGludXggKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXgpCisjZWxpZiBkZWZpbmVkKCBmcmVlYnNkNCApIHx8IGRlZmluZWQoIG5ldGJzZDUgKSB8fCBkZWZpbmVkKCBvcGVuYnNkICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX3N5c2N0bCkKKyNlbHNlCisvKgorICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCisgKi8KK2NvbmZpZ19lcnJvcih0aGUgZGVmYXVsdHJvdXRlciBkYXRhIGFjY2VzcyBsaWJyYXJ5IGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBlbnZpcm9ubWVudC4pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU4NWJmYQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2NvbW1vbi5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogIGRlZmF1bHRyb3V0ZXIgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkOiQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2NvbXBhcmVfYWRkcihjb25zdCB2b2lkICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmhzKTsKK3N0YXRpYyB2b2lkIF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9yZWxlYXNlKG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqIGVudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdW51c2VkKTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBleHRlcm5hbCBwZXItYXJjaGl0ZWN0dXJlIGZ1bmN0aW9ucyBwcm90b3R5cGVzCisgKgorICogVGhlc2Ugc2hvdWxkbid0IGJlIGNhbGxlZCBieSB0aGUgZ2VuZXJhbCBwdWJsaWMsIHNvIHRoZXkgYXJlbid0IGluCisgKiB0aGUgaGVhZGVyIGZpbGUuCisgKi8KK2V4dGVybiBpbnQKK25ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2VudHJ5X2luaXQobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeSk7CisKK2V4dGVybiBpbnQKK25ldHNubXBfYXJjaF9kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBjb250YWluZXIgZnVuY3Rpb25zCisgKi8KKy8qKgorICovCituZXRzbm1wX2NvbnRhaW5lciAqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9pbml0KHVfaW50IGZsYWdzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIxOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmNvbnRhaW5lciIsICJpbml0XG4iKSk7CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgY29udGFpbmVycy4gb25lIGluZGV4ZWQgYnkgaWZJbmRleCwgdGhlIG90aGVyCisgICAgICogaW5kZXhlZCBieSBpZk5hbWUuCisgICAgICovCisgICAgY29udGFpbmVyMSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImFjY2Vzc19kZWZhdWx0cm91dGVyOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcjEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImRlZmF1bHRyb3V0ZXIgcHJpbWFyeSBjb250YWluZXIgaXMgbm90IGZvdW5kXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNvbnRhaW5lcjEtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJkcl9pbmRleCIpOworCisgICAgaWYgKGZsYWdzICYgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9JTklUX0FERExfSURYX0JZX0FERFIpIHsKKyAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiZGVmYXVsdHJvdXRlcl9hZGRyOmFjY2Vzc19kZWZhdWx0cm91dGVyOnRhYmxlX2NvbnRhaW5lciIpOworICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIyKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZGVmYXVsdHJvdXRlciBzZWNvbmRhcnkgY29udGFpbmVyIG5vdCBmb3VuZFxuIik7CisgICAgICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIxKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgY29udGFpbmVyMi0+Y29tcGFyZSA9IF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb21wYXJlX2FkZHI7CisgICAgICAgIGNvbnRhaW5lcjItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJkcl9hZGRyIik7CisKKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KGNvbnRhaW5lcjEsIGNvbnRhaW5lcjIpOworICAgIH0KKworICAgIHJldHVybiBjb250YWluZXIxOworfQorCisvKioKKyAqIEByZXR2YWwgTlVMTCAgZXJyb3IKKyAqIEByZXR2YWwgIU5VTEwgcG9pbnRlciB0byBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgaW50IHJjOworICAgICB1X2ludCBjb250YWluZXJfZmxhZ3MgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfQURETF9JRFhfQllfQUREUikgeworICAgICAgICAgICAgY29udGFpbmVyX2ZsYWdzIHw9CisgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9JTklUX0FERExfSURYX0JZX0FERFI7CisgICAgICAgIH0KKyAgICAgICAgY29udGFpbmVyID0KKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2luaXQoY29udGFpbmVyX2ZsYWdzKTsKKyAgICB9CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19kZWZhdWx0cm91dGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmMgPSAgbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKyAgICBpZiAoMCAhPSByYykgeworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgY29udGFpbmVyID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZyZWVfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9ET05UX0NMRUFSKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBmcmVlIGFsbCBpdGVtcy4KKyAgICAgICAgICovCisgICAgICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9yZWxlYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgfQorCisgICAgaWYoISAoZnJlZV9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9LRUVQX0NPTlRBSU5FUikpCisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogZGVmYXVsdHJvdXRlcl9lbnRyeSBmdW5jdGlvbnMKKyAqLworLyoqCisgKi8KKy8qKgorICovCituZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUodm9pZCkKK3sKKyAgICBpbnQgcmMgPSAwOworICAgIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZW50cnkgPQorICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmRlZmF1bHRyb3V0ZXI6ZW50cnkiLCAiY3JlYXRlXG4iKSk7CisKKyAgICBpZihOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT5vaWRfaW5kZXgubGVuID0gMTsKKyAgICBlbnRyeS0+b2lkX2luZGV4Lm9pZHMgPSAmZW50cnktPm5zX2RyX2luZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgZGVmYXVsdHMKKyAgICAgKi8KKyAgICBlbnRyeS0+ZHJfbGlmZXRpbWUgICA9IElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX01BWDsKKyAgICBlbnRyeS0+ZHJfcHJlZmVyZW5jZSA9IElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfTUVESVVNOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9lbnRyeV9pbml0KGVudHJ5KTsKKyAgICBpZiAoU05NUF9FUlJfTk9FUlJPUiAhPSByYykgeworICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjpjcmVhdGUiLCJlcnJvciAlZCBpbiBhcmNoIGluaXRcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgIGVudHJ5ID0gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgZnJlZShlbnRyeSk7Cit9CisKKy8qKgorICogdXBkYXRlIGFuIG9sZCBkZWZhdWx0cm91dGVyX2VudHJ5IGZyb20gYSBuZXcgb25lCisgKgorICogQG5vdGU6IG9ubHkgbWliIHJlbGF0ZWQgaXRlbXMgYXJlIGNvbXBhcmVkLiBJbnRlcm5hbCBvYmplY3RzCisgKiBzdWNoIGFzIG9pZF9pbmRleCwgbnNfZHJfaW5kZXggYW5kIGZsYWdzIGFyZSBub3QgY29tcGFyZWQuCisgKgorICogQHJldHZhbCAtMSAgOiBlcnJvcgorICogQHJldHZhbCA+PTAgOiBudW1iZXIgb2YgZmllbGRzIHVwZGF0ZWQKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X3VwZGF0ZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpyaHMpCit7CisgICAgaW50IGNoYW5nZWQgPSAwOworCisgICAgaWYgKGxocy0+ZHJfYWRkcmVzc3R5cGUgIT0gcmhzLT5kcl9hZGRyZXNzdHlwZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+ZHJfYWRkcmVzc3R5cGUgPSByaHMtPmRyX2FkZHJlc3N0eXBlOworICAgIH0KKworICAgIGlmIChsaHMtPmRyX2FkZHJlc3NfbGVuICE9IHJocy0+ZHJfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgY2hhbmdlZCArPSAyOworICAgICAgICBsaHMtPmRyX2FkZHJlc3NfbGVuID0gcmhzLT5kcl9hZGRyZXNzX2xlbjsKKyAgICAgICAgbWVtY3B5KGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKTsKKyAgICB9CisgICAgZWxzZSBpZiAobWVtY21wKGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKSAhPSAwKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbWVtY3B5KGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKTsKKyAgICB9CisKKyAgICBpZiAobGhzLT5kcl9pZl9pbmRleCAhPSByaHMtPmRyX2lmX2luZGV4KSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5kcl9pZl9pbmRleCA9IHJocy0+ZHJfaWZfaW5kZXg7CisgICAgfQorCisgICAgaWYgKGxocy0+ZHJfbGlmZXRpbWUgIT0gcmhzLT5kcl9saWZldGltZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+ZHJfbGlmZXRpbWUgPSByaHMtPmRyX2xpZmV0aW1lOworICAgIH0KKworICAgIGlmIChsaHMtPmRyX3ByZWZlcmVuY2UgIT0gcmhzLT5kcl9wcmVmZXJlbmNlKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5kcl9wcmVmZXJlbmNlID0gcmhzLT5kcl9wcmVmZXJlbmNlOworICAgIH0KKworICAgIHJldHVybiBjaGFuZ2VkOworfQorCisvKioKKyAqIGNvcHkgYW4gIGRlZmF1bHRyb3V0ZXJfZW50cnkKKyAqCisgKiBAcmV0dmFsIC0xICA6IGVycm9yCisgKiBAcmV0dmFsIDAgICA6IG5vIGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb3B5KG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpyaHMpCit7CisgICAgbGhzLT5kcl9hZGRyZXNzdHlwZSA9IHJocy0+ZHJfYWRkcmVzc3R5cGU7CisgICAgbGhzLT5kcl9hZGRyZXNzX2xlbiA9IHJocy0+ZHJfYWRkcmVzc19sZW47CisgICAgbWVtY3B5KGxocy0+ZHJfYWRkcmVzcywgcmhzLT5kcl9hZGRyZXNzLCByaHMtPmRyX2FkZHJlc3NfbGVuKTsKKyAgICBsaHMtPmRyX2lmX2luZGV4ICAgID0gcmhzLT5kcl9pZl9pbmRleDsKKyAgICBsaHMtPmRyX2xpZmV0aW1lICAgID0gcmhzLT5kcl9saWZldGltZTsKKyAgICBsaHMtPmRyX3ByZWZlcmVuY2UgID0gcmhzLT5kcl9wcmVmZXJlbmNlOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogVXRpbGl0eSByb3V0aW5lcworICovCisKKy8qKgorICovCit2b2lkCitfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfcmVsZWFzZShuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKiBlbnRyeSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZW50cnkpOworfQorCitzdGF0aWMgaW50IF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jb21wYXJlX2FkZHIoY29uc3Qgdm9pZCAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqcmhzKQoreworICAgIGNvbnN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqbGggPSAoY29uc3QgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICopbGhzOworICAgIGNvbnN0IG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqcmggPSAoY29uc3QgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICopcmhzOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBsaHMpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcmhzKTsKKworICAgIC8qCisgICAgICogY29tcGFyZSBhZGRyZXNzIGxlbmd0aAorICAgICAqLworICAgIGlmIChsaC0+ZHJfYWRkcmVzc19sZW4gPCByaC0+ZHJfYWRkcmVzc19sZW4pCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaC0+ZHJfYWRkcmVzc19sZW4gPiByaC0+ZHJfYWRkcmVzc19sZW4pCisgICAgICAgIHJldHVybiAxOworCisgICAgLyoKKyAgICAgKiBsZW5ndGggZXF1YWwsIGNvbXBhcmUgYWRkcmVzcworICAgICAqLworICAgIHJldHVybiBtZW1jbXAobGgtPmRyX2FkZHJlc3MsIHJoLT5kcl9hZGRyZXNzLCBsaC0+ZHJfYWRkcmVzc19sZW4pOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXJfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDM4MDE2YQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX2xpbnV4LmMKQEAgLTAsMCArMSwzMjggQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDokCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmg+CisKKyNpbmNsdWRlICJpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2lmZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRsaW5rLmg+CisjaW5jbHVkZSA8bGludXgvcnRuZXRsaW5rLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2RlZmluZSBSQ1ZCVUZfU0laRSAzMjc2OAorI2RlZmluZSBTTkRCVUZfU0laRSA1MTIKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNkZWZpbmUgRFJfQUREUlNUUkxFTiAgSU5FVDZfQUREUlNUUkxFTgorI2Vsc2UKKyNkZWZpbmUgRFJfQUREUlNUUkxFTiAgSU5FVF9BRERSU1RSTEVOCisjZW5kaWYKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcworICovCitzdGF0aWMgaW50IF9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpOworCisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfZW50cnlfaW5pdChuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyOmVudHJ5OmFyY2giLCAibG9hZCAobGludXgpXG4iKSk7CisKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lcik7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICB1X2ludCBmbGFncyA9IE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfRlJFRV9LRUVQX0NPTlRBSU5FUjsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworI2lmbmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisgICAgREVCVUdNU0dUTCgoImFjY2VzczpkZWZhdWx0cm91dGVyIiwKKyAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBkZWZhdWx0IHJvdXRlciBpbmZvcm1hdGlvbiIKKyAgICAgICAgICAgICAgICAiYXMgbmV0bGluayBzb2NrZXQgaXMgbm90IGF2YWlsYWJsZVxuIikpOworICAgIHJldHVybiAtMTsKKyNlbHNlCisgICAgaW50IHJjID0gMDsKKyAgICBpbnQgaWR4X29mZnNldCA9IDA7CisgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeTsKKyAgICBpbnQgbmxzazsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfbmwgYWRkcjsKKyAgICBpbnQgcmN2YnVmX3NpemUgPSBSQ1ZCVUZfU0laRTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBoZHI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgcmN2YnVmW1JDVkJVRl9TSVpFXTsKKyAgICB9IHJjdmJ1Zl91bmlvbjsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciBoZHI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgc25kYnVmW1NOREJVRl9TSVpFXTsKKyAgICB9IHNuZGJ1Zl91bmlvbjsKKyAgICB1bnNpZ25lZCBjaGFyICpjb25zdCByY3ZidWYgPSByY3ZidWZfdW5pb24ucmN2YnVmOworICAgIHVuc2lnbmVkIGNoYXIgKmNvbnN0IHNuZGJ1ZiA9IHNuZGJ1Zl91bmlvbi5zbmRidWY7CisgICAgc3RydWN0IG5sbXNnaGRyICpoZHI7CisgICAgc3RydWN0IHJ0bXNnICpydGhkcjsKKyAgICBpbnQgY291bnQ7CisgICAgaW50IGVuZF9vZl9tZXNzYWdlID0gMDsKKyAgICBsb25nIGh6ID0gc3lzY29uZihfU0NfQ0xLX1RDSyk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIE9wZW4gYSBuZXRsaW5rIHNvY2tldAorICAgICAqLworICAgIG5sc2sgPSBzb2NrZXQoQUZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICAgaWYgKG5sc2sgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3Qgb3BlbiBuZXRsaW5rIHNvY2tldCA6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHNldHNvY2tvcHQobmxzaywgU09MX1NPQ0tFVCwgU09fUkNWQlVGLAorICAgICAgICAgICAgICAgICAgICZyY3ZidWZfc2l6ZSwgc2l6ZW9mKHJjdmJ1Zl9zaXplKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3Qgb3BlbiBuZXRsaW5rIHNvY2tldCA6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9zZShubHNrKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICAKKyAgICBtZW1zZXQoJmFkZHIsICdcMCcsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKTsKKyAgICBhZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisKKyAgICBtZW1zZXQoc25kYnVmLCAnXDAnLCBTTkRCVUZfU0laRSk7CisgICAgaGRyID0gJnNuZGJ1Zl91bmlvbi5oZHI7CisgICAgaGRyLT5ubG1zZ190eXBlID0gUlRNX0dFVFJPVVRFOworICAgIGhkci0+bmxtc2dfcGlkID0gZ2V0cGlkKCk7CisgICAgaGRyLT5ubG1zZ19zZXEgPSAwOworICAgIGhkci0+bmxtc2dfZmxhZ3MgPSBOTE1fRl9ST09UIHwgTkxNX0ZfTUFUQ0ggfCBOTE1fRl9SRVFVRVNUOworICAgIGhkci0+bmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgcnRtc2cpKTsKKyAgICBydGhkciA9IChzdHJ1Y3QgcnRtc2cgKilOTE1TR19EQVRBKGhkcik7CisgICAgcnRoZHItPnJ0bV90YWJsZSA9IFJUX1RBQkxFX01BSU47CisKKyAgICAvKgorICAgICAqIFNlbmQgYSByZXF1ZXN0IHRvIHRoZSBrZXJuZWwgdG8gZHVtcCB0aGUgcm91dGluZyB0YWJsZSB0byB1cworICAgICAqLworICAgIGNvdW50ID0gc2VuZHRvKG5sc2ssIHNuZGJ1ZiwgaGRyLT5ubG1zZ19sZW4sIDAsCisgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSZhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX25sKSk7CisgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIHNlbmQgbmV0bGluayBtZXNzYWdlIHRvIGtlcm5lbCA6ICVzXG4iLAorICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICBjbG9zZShubHNrKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qCisgICAgICogTm93IGxpc3RlbiBmb3IgcmVzcG9uc2UKKyAgICAgKi8KKyAgICBkbyB7CisgICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxtaHA7CisgICAgICAgIHN0cnVjdCBydG1zZyAqcnRtcDsKKyAgICAgICAgc3RydWN0IHJ0YXR0ciAqcnRhcDsKKyAgICAgICAgc3RydWN0IHJ0YV9jYWNoZWluZm8gKnJ0Y2k7CisgICAgICAgIHNvY2tsZW5fdCBzb2NrX2xlbjsKKyAgICAgICAgaW50IHJ0Y291bnQ7CisKKyAgICAgICAgbWVtc2V0KHJjdmJ1ZiwgJ1wwJywgUkNWQlVGX1NJWkUpOworICAgICAgICBzb2NrX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpOworCisgICAgICAgIC8qCisgICAgICAgICAqIEdldCB0aGUgbWVzc2FnZQorICAgICAgICAgKi8KKyAgICAgICAgY291bnQgPSByZWN2ZnJvbShubHNrLCByY3ZidWYsIFJDVkJVRl9TSVpFLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikmYWRkciwgJnNvY2tfbGVuKTsKKyAgICAgICAgaWYgKGNvdW50IDwgMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuYWJsZSB0byByZWNlaXZlIG5ldGxpbmsgbWVzc2FnZXM6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFdhbGsgYWxsIG9mIHRoZSByZXR1cm5lZCBtZXNzYWdlcworICAgICAgICAgKi8KKyAgICAgICAgbmxtaHAgPSAmcmN2YnVmX3VuaW9uLmhkcjsKKyAgICAgICAgd2hpbGUgKE5MTVNHX09LKG5sbWhwLCBjb3VudCkpIHsKKyAgICAgICAgICAgIHVfY2hhciBhZGRyZXNzdHlwZTsKKyAgICAgICAgICAgIGNoYXIgICBhZGRyZXNzW05FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkUgKyAxXTsKKyAgICAgICAgICAgIHNpemVfdCBhZGRyZXNzX2xlbiA9ICAwOworICAgICAgICAgICAgaW50ICAgIGlmX2luZGV4ICAgID0gLTE7CisgICAgICAgICAgICB1X2xvbmcgbGlmZXRpbWUgICAgPSAgMDsKKyAgICAgICAgICAgIGludCAgICBwcmVmZXJlbmNlICA9IC0zOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogTWFrZSBzdXJlIHRoZSBtZXNzYWdlIGlzIG9rCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChubG1ocC0+bmxtc2dfdHlwZSA9PSBOTE1TR19FUlJPUikgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJrZXJuZWwgcHJvZHVjZWQgbmxtc2cgZXJyXG4iKTsKKyAgICAgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRW5kIG9mIG1lc3NhZ2UsIHdlJ3JlIGRvbmUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKG5sbWhwLT5ubG1zZ190eXBlICYgTkxNU0dfRE9ORSkgeworICAgICAgICAgICAgICAgIGVuZF9vZl9tZXNzYWdlID0gMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdldCB0aGUgcG9pbnRlciB0byB0aGUgcnRtc2cgc3RydWN0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJ0bXAgPSBOTE1TR19EQVRBKG5sbWhwKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHplcm8gbGVuZ3RoIGRlc3RpbmF0aW9uIGlzIGEgZGVmYXVsdCByb3V0ZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocnRtcC0+cnRtX2RzdF9sZW4gIT0gMCkKKyAgICAgICAgICAgICAgICBnb3RvIG5leHRfbmxtc2doZHI7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBTdGFydCBzY2FubmluZyB0aGUgYXR0cmlidXRlcyBmb3IgbmVlZGVkIGluZm8KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKHJ0bXAtPnJ0bV9mYW1pbHkgPT0gQUZfSU5FVCkgeworICAgICAgICAgICAgICAgIGFkZHJlc3N0eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisgICAgICAgICAgICAgICAgbGlmZXRpbWUgPSBJUERFRkFVTFRST1VURVJMSUZFVElNRV9NQVg7ICAgICAvKiBpbmZpbml0eSAqLworICAgICAgICAgICAgfQorI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICAgICAgICAgIGVsc2UgaWYgKHJ0bXAtPnJ0bV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgICAgICAgICBhZGRyZXNzdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworICAgICAgICAgICAgICAgIC8qIHJvdXRlciBsaWZldGltZSBmb3IgSVB2NiBpcyByZXRyaWV2ZWQgYnkgUlRBX0NBQ0hFSU5GTyAqLworICAgICAgICAgICAgICAgIGxpZmV0aW1lID0gMDsKKyAgICAgICAgICAgIH0KKyNlbmRpZgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGdvdG8gbmV4dF9ubG1zZ2hkcjsgLyogc2tpcCwgd2UgZG9uJ3QgY2FyZSBhYm91dCB0aGlzIHJvdXRlICovCisKKyAgICAgICAgICAgIHByZWZlcmVuY2UgPSAwOyAgICAgLyogcHJlZmVyZW5jZSBpcyBtZWRpdW0oMCkgZm9yIG5vdyAqLworCisgICAgICAgICAgICBydGFwID0gUlRNX1JUQShydG1wKTsKKyAgICAgICAgICAgIHJ0Y291bnQgPSBSVE1fUEFZTE9BRChubG1ocCk7CisgICAgICAgICAgICB3aGlsZSAoUlRBX09LKHJ0YXAsIHJ0Y291bnQpKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChydGFwLT5ydGFfdHlwZSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFJUQV9PSUY6CisgICAgICAgICAgICAgICAgICAgICAgICBpZl9pbmRleCA9ICooaW50ICopKFJUQV9EQVRBKHJ0YXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlRBX0dBVEVXQVk6CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyZXNzX2xlbiA9IFJUQV9QQVlMT0FEKHJ0YXApOworICAgICAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGFkZHJlc3MsICdcMCcsIHNpemVvZihhZGRyZXNzKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYWRkcmVzcywgUlRBX0RBVEEocnRhcCksIGFkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgICAgICAgICAgICAgICAgICBjYXNlIFJUQV9DQUNIRUlORk86CisgICAgICAgICAgICAgICAgICAgICAgICBydGNpID0gUlRBX0RBVEEocnRhcCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHJ0bXAtPnJ0bV9mbGFncyAmIFJUTV9GX0NMT05FRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAocnRjaSAmJiBydGNpLT5ydGFfZXhwaXJlcykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWZldGltZSA9IHJ0Y2ktPnJ0YV9leHBpcmVzIC8gaHo7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9ICAgLyogc3dpdGNoICovCisKKyAgICAgICAgICAgICAgICBydGFwID0gUlRBX05FWFQocnRhcCwgcnRjb3VudCk7CisgICAgICAgICAgICB9IC8qIHdoaWxlIFJUQV9PSyhydGFwKSAqLworCisgICAgICAgICAgICBpZiAoYWRkcmVzc19sZW4gIT0gMCAmJiBpZl9pbmRleCAhPSAtMSAmJgorICAgICAgICAgICAgICAgIGxpZmV0aW1lICE9IDAgJiYgcHJlZmVyZW5jZSAhPSAtMyApIHsKKyAgICAgICAgICAgICAgICBERUJVR0lGKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlciIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciBhZGRyX3N0cltEUl9BRERSU1RSTEVOXTsKKyAgICAgICAgICAgICAgICAgICAgbWVtc2V0KGFkZHJfc3RyLCAnXDAnLCBEUl9BRERSU1RSTEVOKTsKKworICAgICAgICAgICAgICAgICAgICBpZiAocnRtcC0+cnRtX2ZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsIGFkZHJlc3MsIGFkZHJfc3RyLCBEUl9BRERSU1RSTEVOKTsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgYWRkcmVzcywgYWRkcl9zdHIsIERSX0FERFJTVFJMRU4pOworI2VuZGlmCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3VuZCBkZWZhdWx0IHJvdXRlOiAlcyBpZl9pbmRleCAlZCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJsaWZldGltZSAlbHUgcHJlZmVyZW5jZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9zdHIsIGlmX2luZGV4LCBsaWZldGltZSwgcHJlZmVyZW5jZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBlbnRyeS0+bnNfZHJfaW5kZXggICAgPSArK2lkeF9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX2FkZHJlc3N0eXBlID0gYWRkcmVzc3R5cGU7CisgICAgICAgICAgICAgICAgZW50cnktPmRyX2FkZHJlc3NfbGVuID0gYWRkcmVzc19sZW47CisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5kcl9hZGRyZXNzLCBhZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0JVRl9TSVpFKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZHJfaWZfaW5kZXggICAgPSBpZl9pbmRleDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZHJfbGlmZXRpbWUgICAgPSBsaWZldGltZTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+ZHJfcHJlZmVyZW5jZSAgPSBwcmVmZXJlbmNlOworCisgICAgICAgICAgICAgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQorICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczphcnA6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHdpdGggZGVmYXVsdHJvdXRlcl9lbnRyeTogIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKK25leHRfbmxtc2doZHI6CisgICAgICAgICAgICBubG1ocCA9IE5MTVNHX05FWFQobmxtaHAsIGNvdW50KTsKKyAgICAgICAgfSAvKiB3aGlsZSBOTE1TR19PSyhubG1ocCkgKi8KKworICAgICAgICBpZiAocmMgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICB9IHdoaWxlICghZW5kX29mX21lc3NhZ2UpOworCisgICAgY2xvc2Uobmxzayk7CisgICAgcmV0dXJuIHJjOworI2VuZGlmICAvKiBIQVZFX0xJTlVYX1JUTkVUTElOS19IICovCit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9zeXNjdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNDZlYjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcl9zeXNjdGwuYwpAQCAtMCwwICsxLDIzMCBAQAorLyoKKyAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICogJElkOiQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworI2lmICFkZWZpbmVkKFNBX1NJWkUpICYmICFkZWZpbmVkKFJUX1JPVU5EVVApCisjZGVmaW5lIFJUX1JPVU5EVVAoYSkgIFwKKyAgICAgICAgKChhKSA+IDAgPyAoMSArICgoKGEpIC0gMSkgfCAoc2l6ZW9mKGxvbmcpIC0gMSkpKSA6IHNpemVvZihsb25nKSkKKyNlbmRpZgorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyBpbnQgX2xvYWRfZGVmYXVsdHJvdXRlcl9mcm9tX3N5c2N0bChuZXRzbm1wX2NvbnRhaW5lciAqLCBpbnQpOworCitzdGF0aWMgaW50IGlkeF9vZmZzZXQ7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2RlZmF1bHRyb3V0ZXJfZW50cnlfaW5pdChuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5KQoreworICAgIC8qCisgICAgICogaW5pdAorICAgICAqLworICAgIHJldHVybiAwOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBpbnQgZXJyOworCisgICAgZXJyID0gMDsKKyAgICBpZHhfb2Zmc2V0ID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZGVmYXVsdHJvdXRlcjplbnRyeTphcmNoIiwgImxvYWRcbiIpKTsKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICJuZXRzbm1wX2FyY2hfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfbG9hZDogY29udGFpbmVyIGludmFsaWRcbiIpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBlcnIgPSBfbG9hZF9kZWZhdWx0cm91dGVyX2Zyb21fc3lzY3RsKGNvbnRhaW5lciwgQUZfSU5FVCk7CisgICAgaWYgKGVyciAhPSAwKSB7CisgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9GUkVFX0tFRVBfQ09OVEFJTkVSOworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwgZmxhZ3MpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgZXJyID0gX2xvYWRfZGVmYXVsdHJvdXRlcl9mcm9tX3N5c2N0bChjb250YWluZXIsIEFGX0lORVQ2KTsKKyAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgdV9pbnQgZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfS0VFUF9DT05UQUlORVI7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyNlbmRpZgorCitvdXQ6CisgICAgcmV0dXJuIGVycjsKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkX2RlZmF1bHRyb3V0ZXJfZnJvbV9zeXNjdGwobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGZhbWlseSkKK3sKKyAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmVudHJ5OworICAgIHN0cnVjdCBydF9tc2doZHIgKnJ0bTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdF9zYSwgKmd3X3NhOworICAgIGNoYXIgKmJ1ZiwgKmxpbSwgKm5ld2J1ZiwgKm5leHQ7CisgICAgY2hhciBhZGRyZXNzW05FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkVdOworICAgIGludCBtaWJbNl07CisgICAgc2l6ZV90IGFkZHJlc3NfbGVuLCBuZWVkZWQ7CisgICAgaW50IGFkZHJlc3NfdHlwZSwgZXJyLCBwcmVmZXJlbmNlLCBzdDsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIG1pYlswXSA9IENUTF9ORVQ7CisgICAgbWliWzFdID0gUEZfUk9VVEU7CisgICAgbWliWzJdID0gMDsKKyAgICBtaWJbM10gPSBmYW1pbHk7CisgICAgbWliWzRdID0gTkVUX1JUX0RVTVA7CisgICAgbWliWzVdID0gMDsKKworICAgIGVyciA9IDA7CisKKyAgICBidWYgPSBuZXdidWYgPSBOVUxMOworCisgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKSB7CisgICAgICAgIGFkZHJlc3NfbGVuID0gNDsKKyAgICAgICAgYWRkcmVzc190eXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIH0gZWxzZSBpZiAoZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgIGFkZHJlc3NfbGVuID0gMTY7CisgICAgICAgIGFkZHJlc3NfdHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworI2VuZGlmCisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gRUlOVkFMOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgNiwgTlVMTCwgJm5lZWRlZCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICAvKiBFbXB0eSBhcnAgdGFibGUuICovCisgICAgaWYgKG5lZWRlZCA9PSAwKQorICAgICAgICBnb3RvIG91dDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgbmV3YnVmID0gcmVhbGxvYyhidWYsIG5lZWRlZCk7CisgICAgICAgIGlmIChuZXdidWYgPT0gTlVMTCkgeworICAgICAgICAgICAgZXJyID0gRU5PTUVNOworICAgICAgICAgICAgZ290byBvdXQ7CisgICAgICAgIH0KKyAgICAgICAgYnVmID0gbmV3YnVmOworICAgICAgICBzdCA9IHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSksIGJ1ZiwgJm5lZWRlZCwgTlVMTCwgMCk7CisgICAgICAgIGlmIChzdCA9PSAwIHx8IGVycm5vICE9IEVOT01FTSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBlbHNlCisgICAgICAgICAgICBuZWVkZWQgKz0gbmVlZGVkIC8gODsgLyogWFhYOiB3aHkgOD8gKi8KKyAgICB9CisgICAgaWYgKHN0ID09IC0xKSB7CisgICAgICAgIGVyciA9IGVycm5vOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisKKyAgICBsaW0gPSBidWYgKyBuZWVkZWQ7CisgICAgZm9yIChuZXh0ID0gYnVmOyBuZXh0IDwgbGltOyBuZXh0ICs9IHJ0bS0+cnRtX21zZ2xlbikgeworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKwlzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOworI2VuZGlmCisKKyAgICAgICAgcnRtID0gKHN0cnVjdCBydF9tc2doZHIgKiluZXh0OworCisgICAgICAgIGlmICghKHJ0bS0+cnRtX2FkZHJzICYgUlRBX0dBVEVXQVkpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZHN0X3NhID0gKHN0cnVjdCBzb2NrYWRkciopKHJ0bSArIDEpOworI2lmZGVmIFNBX1NJWkUKKyAgICAgICAgZ3dfc2EgPSAoc3RydWN0IHNvY2thZGRyKikoU0FfU0laRShkc3Rfc2EpICsgKGNoYXIqKWRzdF9zYSk7CisjZWxzZQorICAgICAgICBnd19zYSA9IChzdHJ1Y3Qgc29ja2FkZHIqKShSVF9ST1VORFVQKGRzdF9zYS0+c2FfbGVuKSArIChjaGFyKilkc3Rfc2EpOworI2VuZGlmCisKKyAgICAgICAgc3dpdGNoIChmYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgaWYgKCgoc3RydWN0IHNvY2thZGRyX2luKilkc3Rfc2EpLT5zaW5fYWRkci5zX2FkZHIgIT0gSU5BRERSX0FOWSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKwkgICAgbWVtY3B5KGFkZHJlc3MsICYoKHN0cnVjdCBzb2NrYWRkcl9pbiopZ3dfc2EpLT5zaW5fYWRkci5zX2FkZHIsCisJICAgICAgICAgICBhZGRyZXNzX2xlbik7CisgICAgICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICBpZiAobWVtY21wKCgoc3RydWN0IHNvY2thZGRyX2luNiopZHN0X3NhKS0+c2luNl9hZGRyLnM2X2FkZHIsCisJCQkmaW42YWRkcl9hbnksIHNpemVvZiBpbjZhZGRyX2FueSkgIT0gMCkKKwkJY29udGludWU7IC8qIFhYWDogbmVlZCB0byBkZXRlcm1pbmUgcXVhbGlmeWluZyBjcml0ZXJpYSBmb3IKKyAgICAgICAgICAgICAgICAgICAgICAgKiBkZWZhdWx0IGdhdGV3YXlzIGluIElQdjYuICovCisgICAgICAgICAgICBtZW1jcHkoYWRkcmVzcywgJigoc3RydWN0IHNvY2thZGRyX2luNiopZHN0X3NhKS0+c2luNl9hZGRyLnM2X2FkZHIsCisJCSAgIGFkZHJlc3NfbGVuKTsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIGVyciA9IEVOT01FTTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogWFhYOiB0aGlzIGlzIHdyb25nIChoYXJkY29kaW5nIHRoZSByb3V0ZXIgcHJlZmVyZW5jZSB0byBtZWRpdW0pLiAqLworICAgICAgICBwcmVmZXJlbmNlID0gMDsKKworICAgICAgICBlbnRyeS0+bnNfZHJfaW5kZXggICAgPSArK2lkeF9vZmZzZXQ7CisgICAgICAgIGVudHJ5LT5kcl9hZGRyZXNzdHlwZSA9IGFkZHJlc3NfdHlwZTsKKyAgICAgICAgZW50cnktPmRyX2FkZHJlc3NfbGVuID0gYWRkcmVzc19sZW47CisgICAgICAgIG1lbWNweShlbnRyeS0+ZHJfYWRkcmVzcywgYWRkcmVzcywgc2l6ZW9mKGFkZHJlc3MpKTsKKyAgICAgICAgZW50cnktPmRyX2lmX2luZGV4ID0gcnRtLT5ydG1faW5kZXg7CisgICAgICAgIGVudHJ5LT5kcl9saWZldGltZSAgICA9IHJ0bS0+cnRtX3JteC5ybXhfZXhwaXJlOworICAgICAgICBlbnRyeS0+ZHJfcHJlZmVyZW5jZSAgPSBwcmVmZXJlbmNlOworCisgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczphcnA6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciB3aXRoIGRlZmF1bHRyb3V0ZXJfZW50cnk6ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICAgICAgICAgIGdvdG8gb3V0OworICAgICAgICB9CisgICAgfQorCitvdXQ6CisgICAgZnJlZShidWYpOworICAgIHJldHVybiBlcnI7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgKaW5kZXggYzY2ZjE2MS4uZDc5YzdjMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaApAQCAtMjAsMTEgKzIwLDExIEBACiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbikKICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4KQorI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMikKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q3ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc3lzY3RsKQogI2Vsc2UKLS8qCi0gKiBjb3VsZG4ndCBkZXRlcm1pbmUgdGhlIGNvcnJlY3QgZmlsZSEKLSAqIHJlcXVpcmUgYSBib2d1cyBmaWxlIHRvIGdlbmVyYXRlIGFuIGVycm9yLgotICovCi1jb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLXVua25vd24tYXJjaCkKK2NvbmZpZ19lcnJvcih0aGUgaXBhZGRyZXNzIGRhdGEgYWNjZXNzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LikKICNlbmRpZgogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19jb21tb24uYwppbmRleCAzMTc2NTRlLi5hNjYzOTg1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfY29tbW9uLmMKQEAgLTEyLDYgKzEyLDE5IEBACiAKICNpbmNsdWRlICJpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgiCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzX2NvbW1vbiwgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfY29tbW9uX2NvcHlfdXRpbGl0aWVzLCBpcGFkZHJlc3NfY29tbW9uKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19lbnRyeV91cGRhdGUsIGlwYWRkcmVzc19jb21tb24pCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBhZGRyZXNzX3ByZWZpeF9jb3B5LCBpcGFkZHJlc3NfY29tbW9uX2NvcHlfdXRpbGl0aWVzKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0VOVFJZX0NPUFkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19hcmNoX2VudHJ5X2NvcHkpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0VOVFJZX0NPUFkgKi8KKwogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBsb2NhbCBzdGF0aWMgcHJvdG90eXBlcwpAQCAtMjExLDcgKzIyNCw4IEBACiAgICAgICogbWFrZSBzdXJlIGludGVyZmFjZSBhbmQgaWZJbmRleCBtYXRjaCB1cAogICAgICAqLwogICAgIGlmIChOVUxMID09IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9uYW1lX2ZpbmQoZW50cnktPmlmX2luZGV4KSkgewotICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJjYW50IGZpbmQgbmFtZSBmb3IgaW5kZXggJWRcbiIsCisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6c2V0IiwKKyAgICAgICAgICAgICAgICAgICAiY2FudCBmaW5kIG5hbWUgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pZl9pbmRleCkpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQpAQCAtMjQ2LDYgKzI2MCw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0VOVFJZX1VQREFURQogLyoqCiAgKiB1cGRhdGUgYW4gb2xkIGlwYWRkcmVzc19lbnRyeSBmcm9tIGEgbmV3IG9uZQogICoKQEAgLTMwNCwxMCArMzE5LDMzIEBACiAgICAgICAgICsrY2hhbmdlZDsKICAgICAgICAgbGhzLT5pYV9vcmlnaW4gPSByaHMtPmlhX29yaWdpbjsKICAgICB9CisgICAKKyAgICBpZiAobGhzLT5pYV9vbmxpbmtfZmxhZyAhPSByaHMtPmlhX29ubGlua19mbGFnKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5pYV9vbmxpbmtfZmxhZyA9IHJocy0+aWFfb25saW5rX2ZsYWc7CisgICAgfQorCisgICAgaWYgKGxocy0+aWFfYXV0b25vbW91c19mbGFnICE9IHJocy0+aWFfYXV0b25vbW91c19mbGFnKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5pYV9hdXRvbm9tb3VzX2ZsYWcgPSByaHMtPmlhX2F1dG9ub21vdXNfZmxhZzsKKyAgICB9CisKKyAgICBpZiAobGhzLT5pYV9wcmVmZXJlZF9saWZldGltZSAhPSByaHMtPmlhX3ByZWZlcmVkX2xpZmV0aW1lKSB7CisgICAgICAgICsrY2hhbmdlZDsKKyAgICAgICAgbGhzLT5pYV9wcmVmZXJlZF9saWZldGltZSA9IHJocy0+aWFfcHJlZmVyZWRfbGlmZXRpbWU7CisgICAgfQorCisgICAgaWYgKGxocy0+aWFfdmFsaWRfbGlmZXRpbWUgIT0gcmhzLT5pYV92YWxpZF9saWZldGltZSkgeworICAgICAgICArK2NoYW5nZWQ7CisgICAgICAgIGxocy0+aWFfdmFsaWRfbGlmZXRpbWUgPSByaHMtPmlhX3ZhbGlkX2xpZmV0aW1lOworICAgIH0KKwogCiAgICAgcmV0dXJuIGNoYW5nZWQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfRU5UUllfVVBEQVRFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfRU5UUllfQ09QWQogLyoqCiAgKiBjb3B5IGFuICBpcGFkZHJlc3NfZW50cnkKICAqCkBAIC0zMzksMTIgKzM3NywxNCBAQAogICAgIAogICAgIHJldHVybiAwOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0VOVFJZX0NPUFkgKi8KIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBVdGlsaXR5IHJvdXRpbmVzCiAgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19QUkVGSVhfQ09QWQogLyoqCiAgKiBjb3B5IHRoZSBwcmVmaXggcG9ydGlvbiBvZiBhbiBpcCBhZGRyZXNzCiAgKi8KQEAgLTM3MCw2ICs0MTAsNyBAQAogCiAgICAgcmV0dXJuIHBmeF9sZW47CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfUFJFRklYX0NPUFkgKi8KIAogCiAvKioKQEAgLTQwMCw2ICs0NDEsNTAgQEAKICAgICByZXR1cm4gbGVuOwogfQogCitpbl9hZGRyX3QgbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9tYXNrKGludCBsZW4pCit7CisgICAgaW50IGkgPSAwLCBtID0gMHg4MDsKKyAgICBpbl9hZGRyX3QgbWFzazsKKyAgICB1bnNpZ25lZCBjaGFyICptcCA9ICh1bnNpZ25lZCBjaGFyICopJm1hc2s7CisKKyAgICBpZiAobGVuIDwgMCB8fCBsZW4gPiAzMikgYWJvcnQoKTsKKworICAgIG1lbXNldChtcCwgMCwgc2l6ZW9mKG1hc2spKTsKKworICAgIHdoaWxlIChsZW4gPj0gOCkgeworICAgICAgICBtcFtpXSA9IDB4RkY7CisJbGVuIC09IDg7CisJaSsrOworICAgIH0KKyAgICB3aGlsZSAobGVuKSB7CisgICAgICAgIG1wW2ldIHw9IG07CisJbSA+Pj0gMTsKKwlsZW4tLTsKKyAgICB9CisgICAgcmV0dXJuIG1hc2s7Cit9CisKK2ludAorbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKHN0cnVjdCBpbjZfYWRkciBtYXNrKQoreworICAgIGludCBpLCBsZW4gPSAwOworICAgIHVuc2lnbmVkIGNoYXIgKm1wID0gKHVuc2lnbmVkIGNoYXIgKikmbWFzay5zNl9hZGRyOworCisgICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspCisJaWYgKG1wW2ldID09IDB4RkYpIGxlbiArPSA4OworCWVsc2UgYnJlYWs7CisKKyAgICBpZiAoaSA9PSAxNikKKwlyZXR1cm4gbGVuOworCisgICAgd2hpbGUoMHg4MCAmIG1wW2ldKSB7CisgICAgICAgICsrbGVuOworICAgICAgICBtcFtpXSA8PD0gMTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuOworfQorCiAKIC8qKgogICovCkBAIC00MzEsMyArNTE2LDUxIEBACiAgICAgICovCiAgICAgcmV0dXJuIG1lbWNtcChsaC0+aWFfYWRkcmVzcywgcmgtPmlhX2FkZHJlc3MsIGxoLT5pYV9hZGRyZXNzX2xlbik7CiB9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQ09NTU9OX0NPUFlfVVRJTElUSUVTCitpbnQKK25ldHNubXBfaXBhZGRyZXNzX2ZsYWdzX2NvcHkodV9sb25nICppcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlhX3ByZWZlcmVkX2xpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlhX3ZhbGlkX2xpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlhX29ubGlua19mbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlhX2F1dG9ub21vdXNfZmxhZykKK3sKKworICAgIC8qQ29weSBhbGwgdGhlIGZsYWdzKi8KKyAgICAqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWUgPSAqaWFfcHJlZmVyZWRfbGlmZXRpbWU7CisgICAgKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWUgPSAqaWFfdmFsaWRfbGlmZXRpbWU7CisgICAgKmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcgPSAqaWFfb25saW5rX2ZsYWc7CisgICAgKmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnID0gKmlhX2F1dG9ub21vdXNfZmxhZzsKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2lwYWRkcmVzc19wcmVmaXhfb3JpZ2luX2NvcHkodV9sb25nICppcEFkZHJlc3NQcmVmaXhPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIGlhX29yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc0FkZHJUeXBlKQoreworICAgIGlmKGlwQWRkcmVzc0FkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY0KXsKKyAgICAgICBpZihpYV9vcmlnaW4gPT0gNikgLypSYW5kb20qLworICAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luKSA9IDMgLypJUEFERFJFU1NQUkVGSVhPUklHSU5UQ19XRUxMS05PV04qLzsKKyAgICAgICBlbHNlCisgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW4pID0gaWFfb3JpZ2luOworICAgIH0gZWxzZSB7CisgICAgICAgaWYoaWFfb3JpZ2luID09IDUpIHsgLypMaW5rIExheWVyKi8KKyAgICAgICAgICBpZighZmxhZ3MpIC8qR2xvYmFsIGFkZHJlc3MgYXNzaWduZWQgYnkgcm91dGVyIGFkdiovCisgICAgICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW4pID0gNSAvKklQQUREUkVTU1BSRUZJWE9SSUdJTlRDX1JPVVRFUkFEViovOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbikgPSAzIC8qSVBBRERSRVNTUFJFRklYT1JJR0lOVENfV0VMTEtOT1dOKi87CisgICAgICAgfQorICAgICAgIGVsc2UgaWYoaWFfb3JpZ2luID09IDYpIC8qUmFuZG9tKi8KKyAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbikgPSA1IC8qSVBBRERSRVNTUFJFRklYT1JJR0lOVENfUk9VVEVSQURWKi87CisgICAgICAgZWxzZQorICAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4T3JpZ2luKSA9IGlhX29yaWdpbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQ09NTU9OX0NPUFlfVVRJTElUSUVTICovCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuYwppbmRleCBiMTk3ODZkLi42MDI1ZjA1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5jCkBAIC00LDYgKzQsNyBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgIm1pYklJL21pYklJX2NvbW1vbi5oIgogCkBAIC0yMCw2ICsyMSw4IEBACiAKICNpbmNsdWRlICJpcGFkZHJlc3NfaW9jdGwuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRyZXNzX2lvY3RsX2VudHJ5X2NvcHksIGlwYWRkcmVzc19jb21tb24pCisKIHN0YXRpYyB2b2lkIF9wcmludF9mbGFncyhzaG9ydCBmbGFncyk7CiAKICNkZWZpbmUgTElTVF9UT0tFTiAiaW9jdGxfZXh0cmFzIgpAQCAtMzUsNyArMzgsNyBAQAogICAgIGlmICgoTlVMTCA9PSBlbnRyeSkgfHwgKE5VTEwgPT0gZW50cnktPmFyY2hfZGF0YSkpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcmV0dXJuIG5ldHNubXBfZ2V0X2xpc3RfZGF0YShlbnRyeS0+YXJjaF9kYXRhLCBMSVNUX1RPS0VOKTsKKyAgICByZXR1cm4gKF9pb2N0bF9leHRyYXMqKW5ldHNubXBfZ2V0X2xpc3RfZGF0YShlbnRyeS0+YXJjaF9kYXRhLCBMSVNUX1RPS0VOKTsKIH0KIAogLyoqCkBAIC04Niw2ICs4OSw3IEBACiAgICAgbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlKCZlbnRyeS0+YXJjaF9kYXRhLCBMSVNUX1RPS0VOKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19JT0NUTF9FTlRSWV9DT1BZCiAvKioKICAqIGNvcHkgaW9jdGwgZXh0cmFzCiAgKgpAQCAtMTIyLDYgKzEyNiw3IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfSU9DVExfRU5UUllfQ09QWSAqLwogCiAvKioKICAqIGxvYWQgaXB2NCBhZGRyZXNzIHZpYSBpb2N0bApAQCAtMTM1LDcgKzE0MCw4IEBACiAgICAgc3RydWN0IGlmcmVxICAgKmlmcnA7CiAgICAgc3RydWN0IHNvY2thZGRyIHNhdmVfYWRkcjsKICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKiBzaTsKLSAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnk7CisgICAgc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvIGFkZHJfaW5mbzsKKyAgICBpbl9hZGRyX3QgICAgICAgaXB2YWw7CiAgICAgX2lvY3RsX2V4dHJhcyAgICAgICAgICAgKmV4dHJhczsKIAogICAgIGlmICgoc2QgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpIDwgMCkgewpAQCAtMTU0LDkgKzE2MCwxOCBAQAogCiAgICAgaWZycCA9IGlmYy5pZmNfcmVxOwogICAgIGZvcihpPTA7IGkgPCBpbnRlcmZhY2VzOyArK2ksICsraWZycCkgeworICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnksICpiY2FzdGVudHJ5ID0gTlVMTDsKIAogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLAogICAgICAgICAgICAgICAgICAgICAiIGludGVyZmFjZSAlZCwgJXNcbiIsIGksIGlmcnAtPmlmcl9uYW1lKSk7CisKKyAgICAgICAgaWYgKEFGX0lORVQgIT0gaWZycC0+aWZyX2FkZHIuc2FfZmFtaWx5KSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBza2lwcGluZyAlczsgbm9uIEFGX0lORVQgZmFtaWx5ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaWZycC0+aWZyX25hbWUsIGlmcnAtPmlmcl9hZGRyLnNhX2ZhbWlseSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKwogICAgICAgICAvKgogICAgICAgICAgKi8KICAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfY3JlYXRlKCk7CkBAIC0xODEsOSArMTk2LDkgQEAKICAgICAgICAgLyoKICAgICAgICAgICogc2V0IGluZGV4ZXMKICAgICAgICAgICovCi0gICAgICAgIG5ldHNubXBfYXNzZXJ0KEFGX0lORVQgPT0gaWZycC0+aWZyX2FkZHIuc2FfZmFtaWx5KTsKICAgICAgICAgc2kgPSAoc3RydWN0IHNvY2thZGRyX2luICopICZpZnJwLT5pZnJfYWRkcjsKICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuID0gc2l6ZW9mKHNpLT5zaW5fYWRkci5zX2FkZHIpOworICAgICAgICBpcHZhbCA9IHNpLT5zaW5fYWRkci5zX2FkZHI7CiAgICAgICAgIG1lbWNweShlbnRyeS0+aWFfYWRkcmVzcywgJnNpLT5zaW5fYWRkci5zX2FkZHIsCiAgICAgICAgICAgICAgICBlbnRyeS0+aWFfYWRkcmVzc19sZW4pOwogCkBAIC0yMjAsNiArMjM1LDI2IEBACiAgICAgICAgIH0KIAogICAgICAgICAvKgorICAgICAgICAgKiBnZXQgYnJvYWRjYXN0CisgICAgICAgICAqLworICAgICAgICBtZW1zZXQoJmFkZHJfaW5mbywgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbykpOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgICAgIGFkZHJfaW5mbyA9IG5ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGVudHJ5LT5pZl9pbmRleCwgQUZfSU5FVCk7CisgICAgICAgIGlmKGFkZHJfaW5mby5iY2FzdGZsZykgeworICAgICAgICAgICBiY2FzdGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICAgICBpZihOVUxMID09IGJjYXN0ZW50cnkpIHsKKyAgICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIH0KKyAgICAgICAgICAgYmNhc3RlbnRyeS0+aWZfaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisgICAgICAgICAgIGJjYXN0ZW50cnktPm5zX2lhX2luZGV4ID0gKytpZHhfb2Zmc2V0OworICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IHNpemVvZihhZGRyX2luZm8uYWRkcik7CisgICAgICAgICAgIG1lbWNweShiY2FzdGVudHJ5LT5pYV9hZGRyZXNzLCAmYWRkcl9pbmZvLmFkZHIsCisgICAgICAgICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qCiAgICAgICAgICAqIGdldCBuZXRtYXNrCiAgICAgICAgICAqLwogICAgICAgICBpZnJwLT5pZnJfYWRkciA9IHNhdmVfYWRkcjsKQEAgLTIzMyw2ICsyNjgsOSBAQAogICAgICAgICBzaSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJmlmcnAtPmlmcl9hZGRyOwogICAgICAgICBlbnRyeS0+aWFfcHJlZml4X2xlbiA9CiAgICAgICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X3ByZWZpeF9sZW4oc2ktPnNpbl9hZGRyLnNfYWRkcik7CisgICAgICAgIGlmKGJjYXN0ZW50cnkpCisgICAgICAgICAgIGJjYXN0ZW50cnktPmlhX3ByZWZpeF9sZW4gPSBlbnRyeS0+aWFfcHJlZml4X2xlbjsKKwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGdldCBmbGFncwpAQCAtMjQ2LDcgKzI4NCwxMiBAQAogICAgICAgICB9CiAgICAgICAgIGV4dHJhcy0+ZmxhZ3MgPSBpZnJwLT5pZnJfZmxhZ3M7CiAKLSAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7IC8qIGFzc3VtZSB1bmljYXN0PyAqLworICAgICAgICBpZihiY2FzdGVudHJ5KQorICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV90eXBlID0gSVBBRERSRVNTVFlQRV9CUk9BRENBU1Q7CisgICAgICAgIGlmKGFkZHJfaW5mby5hbnljYXN0ZmxnKQorICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfQU5ZQ0FTVDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfVU5JQ0FTVDsKIAogICAgICAgICAvKiogZW50cnktPmlhX3ByZWZpeF9vaWQgPyAqLwogCkBAIC0yNTYsMTYgKzI5OSwyNyBAQAogICAgICAgICAgKiAgIGFsd2F5cyBwcmVmZXJyZWQoMSkuCiAgICAgICAgICAqLwogICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfUFJFRkVSUkVEOworICAgICAgICBpZihiY2FzdGVudHJ5KQorICAgICAgICAgICBiY2FzdGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7CiAKICAgICAgICAgLyoKICAgICAgICAgICogY2FuIHdlIGZpZ3VyZSBvdXQgaWYgYW4gYWRkcmVzcyBpcyBmcm9tIERIQ1A/CiAgICAgICAgICAqIHVzZSBtYW51YWwgdW50aWwgdGhlbi4uLgogICAgICAgICAgKi8KLSAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKyAgICAgICAgaWYoSVNfQVBJUEEoaXB2YWwpKSB7CisgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19SQU5ET007CisgICAgICAgICAgIGlmKGJjYXN0ZW50cnkpCisgICAgICAgICAgICAgIGJjYXN0ZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX1JBTkRPTTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKyAgICAgICAgICAgaWYoYmNhc3RlbnRyeSkKKyAgICAgICAgICAgICAgYmNhc3RlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfTUFOVUFMOworICAgICAgICB9CiAKICAgICAgICAgREVCVUdJRigiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiKSB7CiAgICAgICAgICAgICBERUJVR01TR1RfTkMoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICIgaWYgJWQ6IGFkZHIgbGVuICVkLCBpbmRleCAweCVseFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIiBpZiAlZDogYWRkciBsZW4gJWQsIGluZGV4IDB4JSIgTkVUU05NUF9QUklvICJ4XG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBlbnRyeS0+aWFfYWRkcmVzc19sZW4sIGVudHJ5LT5pZl9pbmRleCkpOwogICAgICAgICAgICAgaWYgKDQgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKQogICAgICAgICAgICAgICAgIERFQlVHTVNHVF9OQygoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgIiBhZGRyZXNzICVwXG4iLApAQCAtMjc5LDkgKzMzMywxOSBAQAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCiAgICAgICAgICAqLwotICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApCi0gICAgICAgIHsKKyAgICAgICAgaWYoYmNhc3RlbnRyeSl7CisgICAgICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGJjYXN0ZW50cnkpIDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsImVycm9yIHdpdGggaXBhZGRyZXNzX2VudHJ5OiBpbnNlcnQgYnJvYWRjYXN0IGVudHJ5IGludG8gY29udGFpbmVyIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShiY2FzdGVudHJ5KTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBiY2FzdGVudHJ5ID0gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiZXJyb3Igd2l0aCBpcGFkZHJlc3NfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJEdXBsaWNhdGUgSVB2NCBhZGRyZXNzIGRldGVjdGVkLCBzb21lIGludGVyZmFjZXMgbWF5IG5vdCBiZSB2aXNpYmxlIGluIElQLU1JQlxuIikpOwogICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KQEAgLTMzMiw3ICszOTYsNyBAQAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaWZjLmlmY19idWYpOwogICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJwcm9jZXNzaW5nICVkIGludGVyZmFjZXNcbiIsIGludGVyZmFjZXMpKTsKIAotICAgIGFsaWFzX2xpc3QgPSBtYWxsb2MoaW50ZXJmYWNlcyAqIHNpemVvZihpbnQpKTsKKyAgICBhbGlhc19saXN0ID0gKGludCopbWFsbG9jKGludGVyZmFjZXMgKiBzaXplb2YoaW50KSk7CiAgICAgaWYgKE5VTEwgPT0gYWxpYXNfbGlzdCkgewogICAgICAgICBjbG9zZShzZCk7CiAgICAgICAgIHJldHVybiAtMjsKQEAgLTM2OCwxMCArNDMyLDEzIEBACiAgICAgICAgIGZvcihrPTA7azxqOysraykKICAgICAgICAgICAgIGlmIChhbGlhc19saXN0W2tdID09IGkpCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGlmIChrID09IGopCisgICAgICAgIGlmIChrID09IGopIHsKKyAgICAgICAgICAgIGZyZWUoYWxpYXNfbGlzdCk7CiAgICAgICAgICAgICByZXR1cm4gaTsKKyAgICAgICAgfQogICAgIH0KIAorICAgIGZyZWUoYWxpYXNfbGlzdCk7CiAgICAgcmV0dXJuIGludGVyZmFjZXMgKyAxOwogfQogCkBAIC00MTIsNyArNDc5LDggQEAKICAgICAgICAgaW50ICAgYWxpYXNfaWR4OwogCiAgICAgICAgIGlmIChOVUxMID09IG5hbWUpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6c2V0IiwgImNhbnQgZmluZCBuYW1lIGZvciBpbmRleCAlbGRcbiIsCisgICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsCisgICAgICAgICAgICAgICAgICAgICAgICJjYW50IGZpbmQgbmFtZSBmb3IgaW5kZXggJSIgTkVUU05NUF9QUklvICJkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWZfaW5kZXgpKTsKICAgICAgICAgICAgIGNsb3NlKGZkKTsKICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTQ4OSw2ICs1NTcsOTEgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCisvKioKKyAqIEFkZC9yZW1vdmUgSVB2NiBhZGRyZXNzIHVzaW5nIGlvY3RsLgorICogQHJldHZhbCAgMCA6IG5vIGVycm9yCisgKiBAcmV0dmFsIC0xIDogYmFkIHBhcmFtZXRlcgorICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBmYWlsZWQKKyAqLworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfdjYobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSwgaW50IG9wZXJhdGlvbikKK3sKKyNpZmRlZiBsaW51eAorICAgIC8qCisgICAgICogRnJvbSBsaW51eC9pcHY2LmguIEl0IGNhbm5vdCBiZSBpbmNsdWRlZCBiZWNhdXNlIGl0IGNvbGxpZGVzCisgICAgICogd2l0aCBuZXRpbmV0L2luLmgKKyAgICAgKi8KKyAgICBzdHJ1Y3QgaW42X2lmcmVxIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpZnI2X2FkZHI7CisgICAgICAgICAgICB1aW50MzJfdCAgICAgICAgaWZyNl9wcmVmaXhsZW47CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgaWZyNl9pZmluZGV4OworICAgIH07CisKKyAgICBzdHJ1Y3QgaW42X2lmcmVxICAgICAgICAgICAgICAgaWZycTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIGZkID0gLTE7CisKKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2IHN0YXJ0ZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBuZXRzbm1wX2Fzc2VydCgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pOworCisgICAgZmQgPSBzb2NrZXQoQUZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOworICAgIGlmKGZkIDwgMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZG4ndCBjcmVhdGUgc29ja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKyAgICBtZW1zZXQoJmlmcnEsIDAsIHNpemVvZihpZnJxKSk7CisgICAgaWZycS5pZnI2X2lmaW5kZXggPSBlbnRyeS0+aWZfaW5kZXg7CisgICAgaWZycS5pZnI2X3ByZWZpeGxlbiA9IDY0OworCisgICAgbWVtY3B5KCZpZnJxLmlmcjZfYWRkciwgZW50cnktPmlhX2FkZHJlc3MsCisgICAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisKKyAgICByYyA9IGlvY3RsKGZkLCBvcGVyYXRpb24sICZpZnJxKTsKKyAgICBjbG9zZShmZCk7CisgICAgaWYocmMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHNldHRpbmcgYWRkcmVzczogJXMoJWQpXG4iLCBzdHJlcnJvcihlcnJubyksIGVycm5vKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOnNldCIsICJfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2IGZpbmlzaGVkXG4iKSk7CisgICAgcmV0dXJuIDA7CisjZWxzZQorICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgaXB2NiBvbiB0aGlzIHBsYXRmb3JtICh5ZXQpICovCisgICAgcmV0dXJuIC0zOworI2VuZGlmCisKK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCA6IG5vIGVycm9yCisgKiBAcmV0dmFsIC0xIDogYmFkIHBhcmFtZXRlcgorICogQHJldHZhbCAtMiA6IGNvdWxkbid0IGNyZWF0ZSBzb2NrZXQKKyAqIEByZXR2YWwgLTMgOiBpb2N0bCBmYWlsZWQKKyAqLworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpCit7CisgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc192NihlbnRyeSwgU0lPQ1NJRkFERFIpOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIDogbm8gZXJyb3IKKyAqIEByZXR2YWwgLTEgOiBiYWQgcGFyYW1ldGVyCisgKiBAcmV0dmFsIC0yIDogY291bGRuJ3QgY3JlYXRlIHNvY2tldAorICogQHJldHZhbCAtMyA6IGlvY3RsIGZhaWxlZAorICovCitpbnQKK19uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjYobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKiBlbnRyeSkKK3sKKyAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3Y2KGVudHJ5LCBTSU9DRElGQUREUik7Cit9CisKIC8qKgogICogZ2V0IHRoZSBpbnRlcmZhY2UgY291bnQgYW5kIHBvcHVsYXRlIHRoZSBpZmNfYnVmCiAgKgpAQCAtNTE1LDcgKzY2OCw3IEBACiAgICAgICovCiAKICAgICBmb3IgKGkgPSA4OzsgaSAqPSAyKSB7Ci0gICAgICAgIGlmYy0+aWZjX2J1ZiA9IGNhbGxvYyhpLCBzaXplb2Yoc3RydWN0IGlmcmVxKSk7CisgICAgICAgIGlmYy0+aWZjX2J1ZiA9IChjYWRkcl90KWNhbGxvYyhpLCBzaXplb2Yoc3RydWN0IGlmcmVxKSk7CiAgICAgICAgIGlmIChOVUxMID09IGlmYy0+aWZjX2J1ZikgewogICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yICVkIGludGVyZmFjZXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICBpKTsKQEAgLTU4MCw3ICs3MzMsNyBAQAogICAgICAgICB7IElGRl9BVVRPTUVESUEsICAgImF1dG8gbWVkaWEgc2VsZWN0IGFjdGl2ZSJ9LAogICAgIH07CiAgICAgc2hvcnQgdW5rbm93biA9IGZsYWdzOwotICAgIGludCBpOworICAgIHNpemVfdCBpOwogCiAgICAgZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKG1hcCkvc2l6ZW9mKG1hcFswXSk7ICsraSkKICAgICAgICAgaWYoZmxhZ3MgJiBtYXBbaV0uZmxhZykgewpAQCAtNTkxLDQgKzc0NCwzIEBACiAgICAgaWYodW5rbm93bikKICAgICAgICAgREVCVUdNU0dUX05DKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCIgIHVua25vd24gMHgleFxuIiwgdW5rbm93bikpOwogfQotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsLmgKaW5kZXggYTdhMGVhMi4uZjJiNzg0NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19pb2N0bC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfaW9jdGwuaApAQCAtMiw2ICsyLDE3IEBACiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCisvKgorICogc3RydWN0IGZvciBuZXRsaW5rIGV4dHJhcworICovCitzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8geworICAgIGludCBiY2FzdGZsZzsKKyAgICBpbnQgYW55Y2FzdGZsZzsKKyAgICBpbl9hZGRyX3QgYWRkcjsKK307CisgCisjZGVmaW5lIElTX0FQSVBBKGEpICAoKChpbl9hZGRyX3QpKGEgPDwgMTYpKSA9PSAweEZFQTkwMDAwKQorCiBpbnQKIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19jb250YWluZXJfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgaWR4X29mZnNldCk7CkBAIC0xMSw4ICsyMiwxNSBAQAogX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3JlbW92ZV92NChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKIAogaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpOworaW50CitfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfcmVtb3ZlX3Y2KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICogZW50cnkpOworCitpbnQKIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19pb2N0bF9nZXRfaW50ZXJmYWNlX2NvdW50KGludCBzZCwgc3RydWN0IGlmY29uZiAqIGlmYyk7CiAKK3N0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbworbmV0c25tcF9hY2Nlc3Nfb3RoZXJfaW5mb19nZXQoaW50IGluZGV4LCBpbnQgZmFtaWx5KTsKIAogLyoKICAqIHN0cnVjdCBpb2N0bCBmb3IgYXJjaF9kYXRhCkBAIC0zNyw2ICs1NSw4IEBACiAKIGludAogX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKK2ludAorX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NihuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqIGVudHJ5KTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmMKaW5kZXggZTc4YzhiZC4uZjFjZWYwYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKIApAQCAtMTIsMTkgKzEzLDQ1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJpcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfY29uc3RhbnRzLmgiCisjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIKIAogI2luY2x1ZGUgPGVycm5vLmg+CiAjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHByZWZpeF9pbmZvKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmluZF9wcmVmaXhfaW5mbykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19hcmNoX2VudHJ5X2NvcHksIGlwYWRkcmVzc19jb21tb24pCisKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfaW9jdGxfZW50cnlfY29weSkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZICovCisKICNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaWYgZGVmaW5lZChIQVZFX0xJTlVYX1JUTkVUTElOS19IKQorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KICNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpZmRlZiBSVE1HUlBfSVBWNl9QUkVGSVgKKyNkZWZpbmUgU1VQUE9SVF9QUkVGSVhfRkxBR1MgMQorI2VuZGlmIC8qIFJUTUdSUF9JUFY2X1BSRUZJWCAqLworI2VuZGlmIC8qIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKi8KICNlbmRpZgogCiAjaW5jbHVkZSAiaXBhZGRyZXNzX2lvY3RsLmgiCi0KKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUworZXh0ZXJuIHByZWZpeF9jYnggKnByZWZpeF9oZWFkX2xpc3Q7CisjZW5kaWYKIGludCBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCk7CisjaWZkZWYgSEFWRV9MSU5VWF9SVE5FVExJTktfSAoraW50CituZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZXh0cmFfcHJlZml4X2luZm8oaW50IGluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqcHJlZmVyZWRsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bG9uZyAqdmFsaWRsdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyKTsKKyNlbmRpZgogCiAvKgogICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKQEAgLTY2LDYgKzkzLDcgQEAKICAgICAgKi8KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU19BUkNIX0VOVFJZX0NPUFkKIC8qCiAgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQogICovCkBAIC04OSw2ICsxMTcsNyBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLwogCiAvKgogICogY3JlYXRlIGEgbmV3IGVudHJ5CkBAIC05OSwxMiArMTI4LDE0IEBACiAgICAgaWYgKE5VTEwgPT0gZW50cnkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICg0ICE9IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgewotICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJvbmx5IGlwdjQgc3VwcG9ydGVkXG4iKSk7CisgICAgaWYgKDQgPT0gZW50cnktPmlhX2FkZHJlc3NfbGVuKSB7CisgICAgICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y0KGVudHJ5KTsKKyAgICB9IGVsc2UgaWYgKDE2ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX3NldF92NihlbnRyeSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOmlwYWRkcmVzczpjcmVhdGUiLCAid3JvbmcgbGVuZ3RoIG9mIElQIGFkZHJlc3NcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLQotICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3Nfc2V0X3Y0KGVudHJ5KTsKIH0KIAogLyoKQEAgLTExNiwxMiArMTQ3LDE0IEBACiAgICAgaWYgKE5VTEwgPT0gZW50cnkpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGlmICg0ICE9IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gX25ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2RlbGV0ZV92NChlbnRyeSk7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIF9uZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19kZWxldGVfdjYoZW50cnkpOworICAgIH0gZWxzZSB7CiAgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIm9ubHkgaXB2NCBzdXBwb3J0ZWRcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLQotICAgIHJldHVybiBfbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZGVsZXRlX3Y0KGVudHJ5KTsKIH0KIAogLyoqCkBAIC0xNzksNiArMjEyLDEyIEBACiBpbnQKIF9sb2FkX3Y2KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KQogeworI2lmbmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBpcCBhZGRyZXNzIGluZm9ybWF0aW9uIgorICAgICAgICAgICAgICAgICJhcyBuZXRsaW5rIHNvY2tldCBpcyBub3QgYXZhaWxhYmxlXG4iKSk7CisgICAgcmV0dXJuIC0xOworI2Vsc2UKICAgICBGSUxFICAgICAgICAgICAqaW47CiAgICAgY2hhciAgICAgICAgICAgIGxpbmVbODBdLCBhZGRyWzQwXTsKICAgICBjaGFyICAgICAgICAgICAgaWZfbmFtZVtJRk5BTVNJWisxXTsvKiArMSBmb3IgJ1wwJyBiZWNhdXNlIG9mIHRoZSB1Z2x5IHNzY2FuZiBiZWxvdyAqLyAKQEAgLTE4NywyNCArMjI2LDE1IEBACiAgICAgc2l6ZV90ICAgICAgICAgIGluX2xlbiwgb3V0X2xlbjsKICAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnk7CiAgICAgX2lvY3RsX2V4dHJhcyAgICAgICAgICAgKmV4dHJhczsKLSAgICBzdGF0aWMgaW50ICAgICAgbG9nX29wZW5fZXJyID0gMTsKKyAgICBzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8gYWRkcl9pbmZvOwogICAgIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKIAogI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L2lmX2luZXQ2IgogICAgIGlmICghKGluID0gZm9wZW4oUFJPQ0ZJTEUsICJyIikpKSB7Ci0gICAgICAgIGlmICgxID09IGxvZ19vcGVuX2VycikgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKTsKLSAgICAgICAgICAgIGxvZ19vcGVuX2VyciA9IDA7Ci0gICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiY291bGQgbm90IG9wZW4gIiBQUk9DRklMRSAiXG4iKSk7CiAgICAgICAgIHJldHVybiAtMjsKICAgICB9Ci0gICAgLyoKLSAgICAgKiBpZiB3ZSBoYWRuJ3QgYmVlbiBhYmxlIHRvIG9wZW4gZmlsZSBhbmQgdHVybmVkIG9mIGVyciBsb2dnaW5nLAotICAgICAqIHR1cm4gaXQgYmFjayBvbiBub3cgdGhhdCB3ZSBvcGVuZWQgdGhlIGZpbGUuCi0gICAgICovCi0gICAgaWYgKDAgPT0gbG9nX29wZW5fZXJyKQotICAgICAgICBsb2dfb3Blbl9lcnIgPSAxOwogCiAgICAgLyoKICAgICAgKiBhZGRyZXNzIGluZGV4IHByZWZpeF9sZW4gc2NvcGUgc3RhdHVzIGlmX25hbWUKQEAgLTI0MSw2ICsyNzEsNyBAQAogICAgICAgICBpbl9sZW4gPSBlbnRyeS0+aWFfYWRkcmVzc19sZW4gPSBzaXplb2YoZW50cnktPmlhX2FkZHJlc3MpOwogICAgICAgICBuZXRzbm1wX2Fzc2VydCgxNiA9PSBpbl9sZW4pOwogICAgICAgICBvdXRfbGVuID0gMDsKKyAgICAgICAgZW50cnktPmZsYWdzID0gZmxhZ3M7CiAgICAgICAgIGJ1ZiA9IGVudHJ5LT5pYV9hZGRyZXNzOwogICAgICAgICBpZigxICE9IG5ldHNubXBfaGV4X3RvX2JpbmFyeSgmYnVmLCAmaW5fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2xlbiwgMCwgYWRkciwgIjoiKSkgewpAQCAtMjY4LDYgKzI5OSw4IEBACiAgICAgICAgICAqIGV2ZXJ5IHRpbWUgaXQgaXMgY2FsbGVkLgogICAgICAgICAgKi8KICAgICAgICAgZW50cnktPmlmX2luZGV4ID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2luZGV4X2ZpbmQoaWZfbmFtZSk7CisgICAgICAgIG1lbXNldCgmYWRkcl9pbmZvLCAwLCBzaXplb2Yoc3RydWN0IGFkZHJlc3NfZmxhZ19pbmZvKSk7CisgICAgICAgIGFkZHJfaW5mbyA9IG5ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGVudHJ5LT5pZl9pbmRleCwgQUZfSU5FVDYpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAgI2RlZmluZSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQgIDEKQEAgLTI3OCw4ICszMTEsMTIgQEAKICAgICAgICAgICAjZGVmaW5lIElQQUREUkVTU1NUQVRVU1RDX1RFTlRBVElWRSAgNgogICAgICAgICAgICNkZWZpbmUgSVBBRERSRVNTU1RBVFVTVENfRFVQTElDQVRFICA3CiAgICAgICAgICovCi0gICAgICAgIGlmKGZsYWdzICYgSUZBX0ZfUEVSTUFORU5UKQorICAgICAgICBpZigoZmxhZ3MgJiBJRkFfRl9QRVJNQU5FTlQpIHx8ICghZmxhZ3MpKQogICAgICAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IElQQUREUkVTU1NUQVRVU1RDX1BSRUZFUlJFRDsgLyogPz8gKi8KKyNpZmRlZiBJRkFfRl9URU1QT1JBUlkKKyAgICAgICAgZWxzZSBpZihmbGFncyAmIElGQV9GX1RFTVBPUkFSWSkKKyAgICAgICAgICAgIGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7IC8qID8/ICovCisjZW5kaWYKICAgICAgICAgZWxzZSBpZihmbGFncyAmIElGQV9GX0RFUFJFQ0FURUQpCiAgICAgICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfREVQUkVDQVRFRDsKICAgICAgICAgZWxzZSBpZihmbGFncyAmIElGQV9GX1RFTlRBVElWRSkKQEAgLTI5NCw3ICszMzEsNyBAQAogICAgICAgICAgKiBpZiBpdCdzIG5vdCBtdWx0aSwgaXQgbXVzdCBiZSB1bmkuCiAgICAgICAgICAqICAoYW4gaXB2NiBhZGRyZXNzIGlzIG5ldmVyIGJyb2FkY2FzdCkKICAgICAgICAgICovCi0gICAgICAgIGlmIChJTjZfSVNfQUREUl9NVUxUSUNBU1QoZW50cnktPmlhX2FkZHJlc3MpKQorICAgICAgICBpZihhZGRyX2luZm8uYW55Y2FzdGZsZykKICAgICAgICAgICAgIGVudHJ5LT5pYV90eXBlID0gSVBBRERSRVNTVFlQRV9BTllDQVNUOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBlbnRyeS0+aWFfdHlwZSA9IElQQUREUkVTU1RZUEVfVU5JQ0FTVDsKQEAgLTMxNCwxMyArMzUxLDQ4IEBACiAgICAgICAgICAqCiAgICAgICAgICAqIGFyZSAnbG9jYWwnIGFkZHJlc3MgYXNzaWduZWQgYnkgbGluayBsYXllcj8/CiAgICAgICAgICAqLwotICAgICAgICBpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGVudHJ5LT5pYV9hZGRyZXNzKSB8fAotICAgICAgICAgICAgSU42X0lTX0FERFJfU0lURUxPQ0FMKGVudHJ5LT5pYV9hZGRyZXNzKSkKLSAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisgICAgICAgICBpZiAoIWZsYWdzKQorICAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7CisjaWZkZWYgSUZBX0ZfVEVNUE9SQVJZCisgICAgICAgICBlbHNlIGlmIChmbGFncyAmIElGQV9GX1RFTVBPUkFSWSkKKyAgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfUkFORE9NOworI2VuZGlmCisgICAgICAgICBlbHNlIGlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoZW50cnktPmlhX2FkZHJlc3MpKQorICAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVI7CisgICAgICAgICBlbHNlCisgICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKworICAgICAgICAgaWYoZW50cnktPmlhX29yaWdpbiA9PSBJUEFERFJFU1NPUklHSU5UQ19MSU5LTEFZRVIpCisgICAgICAgICAgICBlbnRyeS0+aWFfc3RvcmFnZXR5cGUgPSBTVE9SQUdFVFlQRV9QRVJNQU5FTlQ7CiAKICAgICAgICAgLyogeHh4LXJrczogd2hhdCBjYW4gd2UgZG8gd2l0aCBzY29wZT8gKi8KKyNpZmRlZiBIQVZFX0xJTlVYX1JUTkVUTElOS19ICisgICAgICAgIGlmKG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19leHRyYV9wcmVmaXhfaW5mbyhlbnRyeS0+aWZfaW5kZXgsICZlbnRyeS0+aWFfcHJlZmVyZWRfbGlmZXRpbWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICwmZW50cnktPmlhX3ZhbGlkX2xpZmV0aW1lLCBhZGRyKSA8IDApeworICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAidW5hYmxlIHRvIGZldGNoIGV4dHJhIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIGVudHJ5LT5pYV9wcmVmZXJlZF9saWZldGltZSA9IDA7CisgICAgICAgIGVudHJ5LT5pYV92YWxpZF9saWZldGltZSA9IDA7CisjZW5kaWYKKyNpZmRlZiBTVVBQT1JUX1BSRUZJWF9GTEFHUworICAgICAgICB7CisgICAgICAgIHByZWZpeF9jYnggICAgICBwcmVmaXhfdmFsOworICAgICAgICBtZW1zZXQoJnByZWZpeF92YWwsIDAsIHNpemVvZihwcmVmaXhfY2J4KSk7CisgICAgICAgIGlmKG5ldF9zbm1wX2ZpbmRfcHJlZml4X2luZm8oJnByZWZpeF9oZWFkX2xpc3QsIGFkZHIsICZwcmVmaXhfdmFsKSA8IDApIHsKKyAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgInVuYWJsZSB0byBmaW5kIGluZm9cbiIpKTsKKyAgICAgICAgICAgZW50cnktPmlhX29ubGlua19mbGFnID0gMTsgIC8qU2V0IGJ5IGRlZmF1bHQgYXMgdHJ1ZSovCisgICAgICAgICAgIGVudHJ5LT5pYV9hdXRvbm9tb3VzX2ZsYWcgPSAyOyAvKlNldCBieSBkZWZhdWx0IGFzIGZhbHNlKi8KKworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICBlbnRyeS0+aWFfb25saW5rX2ZsYWcgPSBwcmVmaXhfdmFsLmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWc7IAorICAgICAgICAgICBlbnRyeS0+aWFfYXV0b25vbW91c19mbGFnID0gcHJlZml4X3ZhbC5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZzsKKyAgICAgICAgfQorICAgICAgICB9CisjZWxzZQorICAgICAgICBlbnRyeS0+aWFfb25saW5rX2ZsYWcgPSAxOyAgLypTZXQgYnkgZGVmYXVsdCBhcyB0cnVlKi8KKyAgICAgICAgZW50cnktPmlhX2F1dG9ub21vdXNfZmxhZyA9IDI7IC8qU2V0IGJ5IGRlZmF1bHQgYXMgZmFsc2UqLworI2VuZGlmCiAKICAgICAgICAgLyoKICAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgpAQCAtMzM5LDQgKzQxMSwxOTAgQEAKIAogICAgIHJldHVybiBpZHhfb2Zmc2V0OwogfQorCitzdHJ1Y3QgYWRkcmVzc19mbGFnX2luZm8KK25ldHNubXBfYWNjZXNzX290aGVyX2luZm9fZ2V0KGludCBpbmRleCwgaW50IGZhbWlseSkKK3sKKyAgIHN0cnVjdCB7CisgICAgICAgICAgIHN0cnVjdCBubG1zZ2hkciBuOworICAgICAgICAgICBzdHJ1Y3QgaWZhZGRybXNnIHI7CisgICAgICAgICAgIGNoYXIgICBidWZbMTAyNF07CisgICB9IHJlcTsKKyAgIHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbyBhZGRyOworICAgc3RydWN0IHJ0YXR0ciAgICAqcnRhOworICAgaW50ICAgIHN0YXR1czsKKyAgIGNoYXIgICBidWZbMTYzODRdOworICAgc3RydWN0IG5sbXNnaGRyICAqbmxtcDsKKyAgIHN0cnVjdCBpZmFkZHJtc2cgKnJ0bXA7CisgICBzdHJ1Y3QgcnRhdHRyICAgICpydGF0cDsKKyAgIGludCAgICBydGF0dHJsZW47CisgICBpbnQgICAgc2Q7CisKKyAgIG1lbXNldCgmYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBhZGRyZXNzX2ZsYWdfaW5mbykpOworICAgc2QgPSBzb2NrZXQoUEZfTkVUTElOSywgU09DS19ER1JBTSwgTkVUTElOS19ST1VURSk7CisgICBpZihzZCA8IDApIHsKKyAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3Qgb3BlbiBuZXRsaW5rIHNvY2tldFxuIik7CisgICAgICByZXR1cm4gYWRkcjsKKyAgIH0KKworICAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKyAgIHJlcS5uLm5sbXNnX2xlbiA9IE5MTVNHX0xFTkdUSChzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpOworICAgcmVxLm4ubmxtc2dfZmxhZ3MgPSBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfUk9PVDsKKyAgIHJlcS5uLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKyAgIHJlcS5yLmlmYV9mYW1pbHkgPSBmYW1pbHk7CisgICBydGEgPSAoc3RydWN0IHJ0YXR0ciAqKSgoKGNoYXIgKikmcmVxKSArIE5MTVNHX0FMSUdOKHJlcS5uLm5sbXNnX2xlbikpOworICAgaWYoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICBydGEtPnJ0YV9sZW4gPSBSVEFfTEVOR1RIKDQpOworICAgZWxzZQorICAgICAgcnRhLT5ydGFfbGVuID0gUlRBX0xFTkdUSCgxNik7CisKKyAgICBzdGF0dXMgPSBzZW5kKHNkLCAmcmVxLCByZXEubi5ubG1zZ19sZW4sIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3Qgc2VuZCBuZXRsaW5rIHJlcXVlc3RcbiIpOworICAgICAgICByZXR1cm4gYWRkcjsKKyAgICB9CisKKyAgICBzdGF0dXMgPSByZWN2KHNkLCBidWYsIHNpemVvZihidWYpLCAwKTsKKyAgICBpZiAoc3RhdHVzIDwgMCkgeworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImNvdWxkIG5vdCByZWNpZXZlIG5ldGxpbmsgcmVxdWVzdFxuIik7CisgICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAgIGlmKHN0YXR1cyA9PSAwKSB7CisgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJub3RoaW5nIHRvIHJlYWRcbiIpOworICAgICAgIHJldHVybiBhZGRyOworICAgIH0KKworICAgIGZvcihubG1wID0gKHN0cnVjdCBubG1zZ2hkciAqKWJ1Zjsgc3RhdHVzID4gc2l6ZW9mKCpubG1wKTspIHsKKyAgICAgICAgaW50IGxlbiA9IG5sbXAtPm5sbXNnX2xlbjsKKyAgICAgICAgaW50IHJlcV9sZW4gPSBsZW4gLSBzaXplb2YoKm5sbXApOworCisgICAgICAgIGlmIChyZXFfbGVuIDwgMCB8fCBsZW4gPiBzdGF0dXMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiaW52YWxpZCBuZXRsaW5rIG1lc3NhZ2VcbiIpOworICAgICAgICAgICAgcmV0dXJuIGFkZHI7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIU5MTVNHX09LKG5sbXAsIHN0YXR1cykpIHsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiaW52YWxpZCBOTE1TRyBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBhZGRyOworICAgICAgICB9CisgICAgICAgIHJ0bXAgPSAoc3RydWN0IGlmYWRkcm1zZyAqKU5MTVNHX0RBVEEobmxtcCk7CisgICAgICAgIHJ0YXRwID0gKHN0cnVjdCBydGF0dHIgKilJRkFfUlRBKHJ0bXApOworICAgICAgICBydGF0dHJsZW4gPSBJRkFfUEFZTE9BRChubG1wKTsKKyAgICAgICAgaWYoaW5kZXggPT0gcnRtcC0+aWZhX2luZGV4KXsKKyAgICAgICAgICAgZm9yICg7IFJUQV9PSyhydGF0cCwgcnRhdHRybGVuKTsgcnRhdHAgPSBSVEFfTkVYVChydGF0cCwgcnRhdHRybGVuKSkgeworICAgICAgICAgICAgICAgIGlmKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQlJPQURDQVNUKXsKKyAgICAgICAgICAgICAgICAgICBhZGRyLmFkZHIgPSAoKHN0cnVjdCBpbl9hZGRyICopUlRBX0RBVEEocnRhdHApKS0+c19hZGRyOworICAgICAgICAgICAgICAgICAgIGFkZHIuYmNhc3RmbGcgPSAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZihydGF0cC0+cnRhX3R5cGUgPT0gSUZBX0FOWUNBU1QpeworICAgICAgICAgICAgICAgICAgIGFkZHIuYWRkciA9ICgoc3RydWN0IGluX2FkZHIgKilSVEFfREFUQShydGF0cCkpLT5zX2FkZHI7CisgICAgICAgICAgICAgICAgICAgYWRkci5hbnljYXN0ZmxnID0gMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgLT0gTkxNU0dfQUxJR04obGVuKTsKKyAgICAgICAgbmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIqKSgoY2hhciopbmxtcCArIE5MTVNHX0FMSUdOKGxlbikpOworICAgIH0KKyAgICBjbG9zZShzZCk7CisgICAgcmV0dXJuIGFkZHI7CiAjZW5kaWYKK30KKworI2lmZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKK2ludAorbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2V4dHJhX3ByZWZpeF9pbmZvKGludCBpbmRleCwgdV9sb25nICpwcmVmZXJlZGx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsb25nICp2YWxpZGx0LCBjaGFyICphZGRyKQoreworCisgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBubG1zZ2hkciBubGhkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpZmFkZHJtc2cgaWZhY2VpbmZvOworICAgICAgICAgICAgY2hhciAgIGJ1ZlsxMDI0XTsKKyAgICB9IHJlcTsKKworICAgIHN0cnVjdCBydGF0dHIgICAgICAgICpydGE7CisgICAgaW50ICAgICAgICAgICAgICAgICAgc3RhdHVzOworICAgIGNoYXIgICAgICAgICAgICAgICAgIGJ1ZlsxNjM4NF07CisgICAgY2hhciAgICAgICAgICAgICAgICAgdG1wYWRkcls0MF07CisgICAgc3RydWN0IG5sbXNnaGRyICAgICAgKm5sbXA7CisgICAgc3RydWN0IGlmYWRkcm1zZyAgICAgKnJ0bXA7CisgICAgc3RydWN0IHJ0YXR0ciAgICAgICAgKnJ0YXRwOworICAgIHN0cnVjdCBpZmFfY2FjaGVpbmZvICpjYWNoZV9pbmZvOworICAgIHN0cnVjdCBpbjZfYWRkciAgICAgICppbjZwOworICAgIGludCAgICAgICAgICAgICAgICAgIHJ0YXR0cmxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBzZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByZXFhZGRyID0gMDsKKyAgICBzZCA9IHNvY2tldChQRl9ORVRMSU5LLCBTT0NLX0RHUkFNLCBORVRMSU5LX1JPVVRFKTsKKyAgICBpZihzZCA8IDApIHsKKyAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IG9wZW4gbmV0bGluayBzb2NrZXRcbiIpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KCZyZXEsIDAsIHNpemVvZihyZXEpKTsKKyAgICByZXEubmxoZHIubmxtc2dfbGVuID0gTkxNU0dfTEVOR1RIKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSk7CisgICAgcmVxLm5saGRyLm5sbXNnX2ZsYWdzID0gTkxNX0ZfUkVRVUVTVCB8IE5MTV9GX1JPT1Q7CisgICAgcmVxLm5saGRyLm5sbXNnX3R5cGUgPSBSVE1fR0VUQUREUjsKKyAgICByZXEuaWZhY2VpbmZvLmlmYV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICBydGEgPSAoc3RydWN0IHJ0YXR0ciAqKSgoKGNoYXIgKikmcmVxKSArIE5MTVNHX0FMSUdOKHJlcS5ubGhkci5ubG1zZ19sZW4pKTsKKyAgICBydGEtPnJ0YV9sZW4gPSBSVEFfTEVOR1RIKDE2KTsgLypGb3IgaXB2NiovCisKKyAgICBzdGF0dXMgPSBzZW5kIChzZCwgJnJlcSwgcmVxLm5saGRyLm5sbXNnX2xlbiwgMCk7CisgICAgaWYgKHN0YXR1cyA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBzZW5kIG5ldGxpbmsgcmVxdWVzdFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3RhdHVzID0gcmVjdiAoc2QsIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDApOworICAgIGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiY291bGQgbm90IHJlY2lldmUgbmV0bGluayByZXF1ZXN0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBpZiAoc3RhdHVzID09IDApIHsKKyAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgIm5vdGhpbmcgdG8gcmVhZFxuIik7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmb3IgKG5sbXAgPSAoc3RydWN0IG5sbXNnaGRyICopYnVmOyBzdGF0dXMgPiBzaXplb2YoKm5sbXApOyApeworCisgICAgICAgIGludCBsZW4gPSBubG1wLT5ubG1zZ19sZW47CisgICAgICAgIGludCByZXFfbGVuID0gbGVuIC0gc2l6ZW9mKCpubG1wKTsKKworICAgICAgICBpZiAocmVxX2xlbiA8IDAgfHwgbGVuID4gc3RhdHVzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImludmFsaWQgbmV0bGluayBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICghTkxNU0dfT0sgKG5sbXAsIHN0YXR1cykpIHsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiaW52YWxpZCBOTE1TRyBtZXNzYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBydG1wID0gKHN0cnVjdCBpZmFkZHJtc2cgKilOTE1TR19EQVRBKG5sbXApOworICAgICAgICBydGF0cCA9IChzdHJ1Y3QgcnRhdHRyICopSUZBX1JUQShydG1wKTsKKyAgICAgICAgcnRhdHRybGVuID0gSUZBX1BBWUxPQUQobmxtcCk7CisgICAgICAgIGlmKGluZGV4ID09IHJ0bXAtPmlmYV9pbmRleCkgeworICAgICAgICAgICBmb3IgKDsgUlRBX09LKHJ0YXRwLCBydGF0dHJsZW4pOyBydGF0cCA9IFJUQV9ORVhUKHJ0YXRwLCBydGF0dHJsZW4pKSB7CisgICAgICAgICAgICAgICAgaWYocnRhdHAtPnJ0YV90eXBlID09IElGQV9BRERSRVNTKSB7CisgICAgICAgICAgICAgICAgICAgaW42cCA9IChzdHJ1Y3QgaW42X2FkZHIgKilSVEFfREFUQShydGF0cCk7CisgICAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXBhZGRyLCAiJTA0eCUwNHglMDR4JTA0eCUwNHglMDR4JTA0eCUwNHgiLCBOSVA2KCppbjZwKSk7CisgICAgICAgICAgICAgICAgICAgaWYoIXN0cmNtcCh0bXBhZGRyICxhZGRyKSkKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxYWRkciA9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmKHJ0YXRwLT5ydGFfdHlwZSA9PSBJRkFfQ0FDSEVJTkZPKSB7CisgICAgICAgICAgICAgICAgICAgY2FjaGVfaW5mbyA9IChzdHJ1Y3QgaWZhX2NhY2hlaW5mbyAqKVJUQV9EQVRBKHJ0YXRwKTsKKyAgICAgICAgICAgICAgICAgICBpZihyZXFhZGRyKSB7CisgICAgICAgICAgICAgICAgICAgICAgcmVxYWRkciA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgKnZhbGlkbHQgPSBjYWNoZV9pbmZvLT5pZmFfdmFsaWQ7CisgICAgICAgICAgICAgICAgICAgICAgKnByZWZlcmVkbHQgPSBjYWNoZV9pbmZvLT5pZmFfcHJlZmVyZWQ7CisgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBzdGF0dXMgLT0gTkxNU0dfQUxJR04obGVuKTsKKyAgICAgICAgbmxtcCA9IChzdHJ1Y3Qgbmxtc2doZHIqKSgoY2hhciopbmxtcCArIE5MTVNHX0FMSUdOKGxlbikpOworICAgIH0KKyAgICBjbG9zZShzZCk7CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2xpbnV4LmgKaW5kZXggMWNhZTI3OS4uNjAwY2VhZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19saW51eC5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXguaApAQCAtMTcsNiArMTcsNSBAQAogICogICAgSFBVWDExIGhhZCBkaWZmZXJlbnQgcmV1aXJlbWVudHMgdGhhbiBvdGhlciBIUFVYLCB0aGF0IHNob3VsZAogICogICAgYmUgaGFuZGxlZCBpbiB0aGUgKl9ocHV4LmggaGVhZGVyIGZpbGUuCiAgKi8KLWNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3NfbGludXgpCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX2lvY3RsKQotCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwYWRkcmVzc19zb2xhcmlzMi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNDg1ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3NvbGFyaXMyLmMKQEAgLTAsMCArMSwyOTEgQEAKKy8qCisgKiAgSVAtTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKgorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaD4KKworI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9jb25zdGFudHMuaCIKKworI2luY2x1ZGUgImtlcm5lbF9zdW5vczUuaCIKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwYWRkcmVzc19hcmNoX2VudHJ5X2NvcHksIGlwYWRkcmVzc19jb21tb24pCisKK3N0YXRpYyBpbnQgX2xvYWRfdjQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgaW50IGlkeF9vZmZzZXQpOworI2lmIGRlZmluZWQoIE5FVFNOTVBfRU5BQkxFX0lQVjYgKQorc3RhdGljIGludCBfbG9hZF92NihuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCk7CisjZW5kaWYKKworLyoKKyAqIGluaXRpYWxpemUgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKgorICogQHJldHZhbCAgMDogc3VjY2VzcworICogQHJldHZhbCA8MDogZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2VudHJ5X2luaXQobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGluaXRfa2VybmVsX3N1bm9zNSgpOworICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jbGVhbnVwKG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIE5vdGhpbmcgdG8gZG8uCisgICAgICovCit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZCisvKgorICogY29weSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2VudHJ5X2NvcHkobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqcmhzKQoreworICAgIC8qCisgICAgICogTm90aGluZyB0byBkby4gCisgICAgICovCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZICovCisKKy8qCisgKiBjcmVhdGUgYSBuZXcgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NyZWF0ZShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIm5vdCBhcHBsaWNhYmxlXG4iKSk7CisgICAgICAgIHJldHVybiAwOworfQorCisvKgorICogZGVsZXRlIGFuIGVudHJ5CisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19kZWxldGUobmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1QoKCJhY2Nlc3M6aXBhZGRyZXNzOmNyZWF0ZSIsICJub3QgYXBwbGljYWJsZVxuIikpOworICAgIHJldHVybiAwOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgaW50IHJjID0gMCwgaWR4X29mZnNldCA9IDA7CisKKyAgICBpZiAoIShsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0xPQURfSVBWNl9PTkxZKSkgeworICAgICAgICByYyA9IF9sb2FkX3Y0KGNvbnRhaW5lciwgaWR4X29mZnNldCk7CisgICAgICAgIGlmKHJjIDwgMCkgeworICAgICAgICAgICAgdV9pbnQgZmxhZ3MgPSBORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfRlJFRV9LRUVQX0NPTlRBSU5FUjsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19jb250YWluZXJfZnJlZShjb250YWluZXIsIGZsYWdzKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmIGRlZmluZWQoIE5FVFNOTVBfRU5BQkxFX0lQVjYgKQorCisgICAgaWYgKCEobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0lQQUREUkVTU19MT0FEX0lQVjRfT05MWSkpIHsKKyAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgIHJjID0gMDsKKworICAgICAgICBpZHhfb2Zmc2V0ID0gcmM7CisKKyAgICAgICAgcmMgPSBfbG9hZF92Nihjb250YWluZXIsIGlkeF9vZmZzZXQpOworICAgICAgICBpZihyYyA8IDApIHsKKyAgICAgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0ZSRUVfS0VFUF9DT05UQUlORVI7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyLCBmbGFncyk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKworICAgIC8qCisgICAgICogcmV0dXJuIG5vIGVycm9ycyAoMCkgaWYgd2UgZm91bmQgYW55IGludGVyZmFjZXMKKyAgICAgKi8KKyAgICBpZihyYyA+IDApCisgICAgICAgIHJjID0gMDsKKyAgICByZXR1cm4gcmM7Cit9CisKKy8qCisgKiBAcmV0dmFsID49aWR4X29mZnNldCBvaworICogQHJldHZhbCAtMSBtZW1vcnkgYWxsb2NhdGlvbiBlcnJvcgorICogQHJldHZhbCAtMiBpbnRlcmZhY2UgbG9va3VwIGVycm9yCisgKiBAcmV0dmFsIC0zIGNvbnRhaW5lciBlcnJvcgorICovCitzdGF0aWMgaW50CitfbG9hZF92NChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKK3sKKyAgICBtaWIyX2lwQWRkckVudHJ5X3QgICAgICBpcGFlOworICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeTsKKyAgICByZXFfZSAgICAgICAgICAgICAgICAgICByZXEgPSBHRVRfRklSU1Q7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgImxvYWRpbmcgdjRcbiIpKTsKKyAgICB3aGlsZSAoKHJjID0gZ2V0TWlic3RhdChNSUJfSVBfQUREUiwgJmlwYWUsIHNpemVvZihpcGFlKSwgcmVxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZHZXRfZXZlcnl0aGluZywgTlVMTCkpID09IDApIHsKKyAgICAgICAgcmVxID0gR0VUX05FWFQ7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiAoLTEpOyAgICAKKyAgICAgICAgaWYgKGlwYWUuaXBBZEVudEFkZHIgPT0gSU5BRERSX0FOWSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlc1tpcGFlLmlwQWRFbnRJZkluZGV4Lm9fbGVuZ3RoXSA9ICdcMCc7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJmb3VuZCBpZiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBhZS5pcEFkRW50SWZJbmRleC5vX2J5dGVzKSk7CisgICAgICAgIC8qIE9idGFpbiBpbnRlcmZhY2UgaW5kZXggKi8KKyAgICAgICAgZW50cnktPmlmX2luZGV4ID0gCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfaW5kZXhfZmluZChpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXMpOworICAgICAgICBpZiAoZW50cnktPmlmX2luZGV4ID09IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJjYW5ub3QgZmluZCBpZiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMik7ICAgIAorICAgICAgICB9CisKKyAgICAgICAgaWYgKHN0cmNocigoY29uc3QgY2hhciAqKSZpcGFlLmlwQWRFbnRJZkluZGV4Lm9fYnl0ZXMsICc6JykgIT0gMCkKKyAgICAgICAgICAgIGVudHJ5LT5mbGFncyB8PSBORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfSVNBTElBUzsKKworICAgICAgICAvKiBHZXQgdGhlIGFkZHJlc3MgKi8KKyAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuID0gc2l6ZW9mKGlwYWUuaXBBZEVudEFkZHIpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+aWFfYWRkcmVzc19sZW4gPT0gNCAmJgorICAgICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuIDw9IHNpemVvZihlbnRyeS0+aWFfYWRkcmVzcykpOworICAgICAgICBtZW1jcHkoJmVudHJ5LT5pYV9hZGRyZXNzLCAmaXBhZS5pcEFkRW50QWRkciwgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKworICAgICAgICAvKiBwcmVmaXggKi8KKyAgICAgICAgZW50cnktPmlhX3ByZWZpeF9sZW4gPSBpcGFlLmlwQWRFbnRJbmZvLmFlX3N1Ym5ldF9sZW47CisKKyAgICAgICAgLyogc2V0IHRoZSBPcmlnaW4gKi8KKyAgICAgICAgaWYgKGlwYWUuaXBBZEVudEluZm8uYWVfZmxhZ3MgJiBJRkZfREhDUFJVTk5JTkcpCisgICAgICAgICAgICBlbnRyeS0+aWFfb3JpZ2luID0gSVBBRERSRVNTT1JJR0lOVENfREhDUDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX01BTlVBTDsKKworICAgICAgICAvKiBzZXQgaXB2NCBjb25zdGFudHMgKi8KKyAgICAgICAgZW50cnktPmlhX3R5cGUgPSBJUEFERFJFU1NUWVBFX1VOSUNBU1Q7CisgICAgICAgIGVudHJ5LT5pYV9zdGF0dXMgPSBJUEFERFJFU1NTVEFUVVNUQ19QUkVGRVJSRUQ7CisKKyAgICAgICAgZW50cnktPm5zX2lhX2luZGV4ID0gKytpZHhfb2Zmc2V0OworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJpbnNlcnQgaWYgJSIgTkVUU05NUF9QUklvICJ1LCBhZGRybGVuICVkXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPmlmX2luZGV4LCBlbnRyeS0+aWFfYWRkcmVzc19sZW4pKTsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJ1bmFibGUgdG8gaW5zZXJ0ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwYWUuaXBBZEVudElmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChpZHhfb2Zmc2V0KTsKK30KKworLyoKKyAqIEByZXR2YWwgPj1pZHhfb2Zmc2V0IG9rCisgKiBAcmV0dmFsIC0xIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisgKiBAcmV0dmFsIC0yIGludGVyZmFjZSBsb29rdXAgZXJyb3IKKyAqIEByZXR2YWwgLTMgY29udGFpbmVyIGVycm9yCisgKi8KKyNpZiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkKK3N0YXRpYyBpbnQKK19sb2FkX3Y2KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KQoreworICAgIG1pYjJfaXB2NkFkZHJFbnRyeV90ICAgIGlwNmFlOworICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeTsKKyAgICByZXFfZSAgICAgICAgICAgICAgICAgICByZXEgPSBHRVRfRklSU1Q7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgImxvYWRpbmcgdjYuLi4gY2FjaGUgJWRcbiIsCisgICAgICAgICAgICAgICAgTUlCX0lQNl9BRERSKSk7CisgICAgd2hpbGUgKChyYyA9IGdldE1pYnN0YXQoTUlCX0lQNl9BRERSLCAmaXA2YWUsIHNpemVvZihpcDZhZSksIHJlcSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpKSA9PSAwKSB7CisgICAgICAgIHJlcSA9IEdFVF9ORVhUOworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX2lwYWRkcmVzc19lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYgKGVudHJ5ID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gKC0xKTsgICAgCisgICAgICAgIGlmIChtZW1jbXAoKGNvbnN0IHZvaWQgKikmaXA2YWUuaXB2NkFkZHJBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgIChjb25zdCB2b2lkICopJmluNmFkZHJfYW55LAorICAgICAgICAgICAgICAgICAgIHNpemVvZiAoaXA2YWUuaXB2NkFkZHJBZGRyZXNzKSkgPT0gMCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzW2lwNmFlLmlwdjZBZGRySWZJbmRleC5vX2xlbmd0aF0gPSAnXDAnOworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXIiLCAiZm91bmQgaWYgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzKSk7CisKKyAgICAgICAgLyogT2J0YWluIGludGVyZmFjZSBpbmRleCAqLworICAgICAgICBlbnRyeS0+aWZfaW5kZXggPSAKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9pbmRleF9maW5kKAorICAgICAgICAgICAgaXA2YWUuaXB2NkFkZHJJZkluZGV4Lm9fYnl0ZXMpOworICAgICAgICBpZiAoZW50cnktPmlmX2luZGV4ID09IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJjYW5ub3QgZmluZCBpZiAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZS5pcHY2QWRkcklmSW5kZXgub19ieXRlcykpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgICAgICAgICAgcmV0dXJuICgtMik7ICAgIAorICAgICAgICB9CisKKyAgICAgICAgLyogR2V0IHRoZSBhZGRyZXNzICovCisgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IHNpemVvZihpcDZhZS5pcHY2QWRkckFkZHJlc3MpOworICAgICAgICBuZXRzbm1wX2Fzc2VydChlbnRyeS0+aWFfYWRkcmVzc19sZW4gPT0gMTYgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmlhX2FkZHJlc3NfbGVuIDw9IHNpemVvZihlbnRyeS0+aWFfYWRkcmVzcykpOworICAgICAgICBtZW1jcHkoJmVudHJ5LT5pYV9hZGRyZXNzLCAmaXA2YWUuaXB2NkFkZHJBZGRyZXNzLCAKKyAgICAgICAgICAgICAgIGVudHJ5LT5pYV9hZGRyZXNzX2xlbik7CisgICAgICAgICAgICAgICAKKyAgICAgICAgLyogcHJlZml4ICovCisgICAgICAgIGVudHJ5LT5pYV9wcmVmaXhfbGVuID0gaXA2YWUuaXB2NkFkZHJQZnhMZW5ndGg7CisKKyAgICAgICAgLyogdHlwZSBpcyBhbnljYXN0PyAobWliMi5oOiAxID0geWVzLCAyID0gbm8pICovCisgICAgICAgIGVudHJ5LT5pYV90eXBlID0gKGlwNmFlLmlwdjZBZGRyQW55Y2FzdEZsYWcgPT0gMSkgPyAKKyAgICAgICAgICAgIElQQUREUkVTU1RZUEVfQU5ZQ0FTVCA6IElQQUREUkVTU1RZUEVfVU5JQ0FTVDsKKworICAgICAgICAvKiBvcmlnaW4gKG1pYjIuaDogMSA9IHN0YXRlbGVzcywgMiA9IHN0YXRlZnVsLCAzID0gdW5rbm93bikgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwgIm9yaWdpbiAlZFxuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZS5pcHY2QWRkclR5cGUpKTsKKyAgICAgICAgaWYgKGlwNmFlLmlwdjZBZGRyVHlwZSA9PSAxKQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX0xJTktMQVlFUjsKKyAgICAgICAgZWxzZSBpZiAoaXA2YWUuaXB2NkFkZHJJbmZvLmFlX2ZsYWdzICYgSUZGX0RIQ1BSVU5OSU5HKQorICAgICAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX0RIQ1A7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGVudHJ5LT5pYV9vcmlnaW4gPSBJUEFERFJFU1NPUklHSU5UQ19NQU5VQUw7CisgICAgICAgIAorICAgICAgICAvKiBzdGF0dXMgKi8KKyAgICAgICAgZW50cnktPmlhX3N0YXR1cyA9IGlwNmFlLmlwdjZBZGRyU3RhdHVzOworCisgICAgICAgIGVudHJ5LT5uc19pYV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJpbnNlcnQgaWYgJSIgTkVUU05NUF9QUklvICJ1LCBhZGRybGVuICVkXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPmlmX2luZGV4LCBlbnRyeS0+aWFfYWRkcmVzc19sZW4pKTsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lciIsICJ1bmFibGUgdG8gaW5zZXJ0ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFlLmlwdjZBZGRySWZJbmRleC5vX2J5dGVzKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICByZXR1cm4gKC0zKTsKKyAgICAgICAgfQorICAgIH0gICAgCisgICAgcmV0dXJuIChpZHhfb2Zmc2V0KTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkKCBORVRTTk1QX0VOQUJMRV9JUFY2ICkgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcGFkZHJlc3Nfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3N5c2N0bC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNjIyMWIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzX3N5c2N0bC5jCkBAIC0wLDAgKzEsMjcyIEBACisvKgorICogIEludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oPgorCisjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2NvbnN0YW50cy5oIgorI2luY2x1ZGUgImlwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShwcmVmaXhfaW5mbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbmRfcHJlZml4X2luZm8pCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NfYXJjaF9lbnRyeV9jb3B5LCBpcGFkZHJlc3NfY29tbW9uKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX2lvY3RsX2VudHJ5X2NvcHkpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWSAqLworCisjaW5jbHVkZSAiaXBhZGRyZXNzX2lvY3RsLmgiCisjaWZkZWYgU1VQUE9SVF9QUkVGSVhfRkxBR1MKK2V4dGVybiBwcmVmaXhfY2J4ICpwcmVmaXhfaGVhZF9saXN0OworI2VuZGlmCisKKyNkZWZpbmUgUk9VTkRVUChhKSBcCisgICgoYSkgPiAwID8gKDEgKyAoKChhKSAtIDEpIHwgKHNpemVvZihsb25nKSAtIDEpKSkgOiBzaXplb2YobG9uZykpCisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9pbml0KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQgaXB2NCBzdHVmZgorICAgICAqLworICAgIC8qIGlmIChOVUxMID09IG5ldHNubXBfaW9jdGxfaXBhZGRyZXNzX2VudHJ5X2luaXQoZW50cnkpKSAqLworICAgIC8qICAgICByZXR1cm4gLTE7ICovCisKKyAgICAvKgorICAgICAqIGluaXQgaXB2NiBzdHVmZgorICAgICAqICAgc28gZmFyLCB3ZSBjYW4ganVzdCBzaGFyZSB0aGUgaXB2NCBzdHVmZiwgc28gbm90aGluZyB0byBkbworICAgICAqLworICAgIAorICAgIHJldHVybiAwOworfQorCisvKgorICogY2xlYW51cCBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqLwordm9pZAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jbGVhbnVwKG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAgaXB2NCBzdHVmZgorICAgICAqLworICAgIC8qbmV0c25tcF9pb2N0bF9pcGFkZHJlc3NfZW50cnlfY2xlYW51cChlbnRyeSk7ICovCisKKyAgICAvKgorICAgICAqIGNsZWFudXAgaXB2NiBzdHVmZgorICAgICAqICAgc28gZmFyLCB3ZSBjYW4ganVzdCBzaGFyZSB0aGUgaXB2NCBzdHVmZiwgc28gbm90aGluZyB0byBkbworICAgICAqLworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTX0FSQ0hfRU5UUllfQ09QWQorLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19lbnRyeV9jb3B5KG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICpsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKnJocykKK3sKKyAgICBpbnQgcmM7CisKKyAgICByYyA9IDA7CisKKyAgICAvKgorICAgICAqIGNvcHkgaXB2NCBzdHVmZgorICAgICAqLworICAgIC8qcmMgPSBuZXRzbm1wX2lvY3RsX2lwYWRkcmVzc19lbnRyeV9jb3B5KGxocywgcmhzKTsgKi8KKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qCisgICAgICogY29weSBpcHY2IHN0dWZmCisgICAgICogICBzbyBmYXIsIHdlIGNhbiBqdXN0IHNoYXJlIHRoZSBpcHY0IHN0dWZmLCBzbyBub3RoaW5nIHRvIGRvCisgICAgICovCisKKyAgICByZXR1cm4gcmM7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NfQVJDSF9FTlRSWV9DT1BZICovCisKKy8qCisgKiBjcmVhdGUgYSBuZXcgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2NyZWF0ZShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIndyb25nIGxlbmd0aCBvZiBJUCBhZGRyZXNzXG4iKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9Cit9CisKKy8qCisgKiBjcmVhdGUgYSBuZXcgZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfaXBhZGRyZXNzX2RlbGV0ZShuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICg0ID09IGVudHJ5LT5pYV9hZGRyZXNzX2xlbikgeworICAgICAgICByZXR1cm4gLTI7CisgICAgfSBlbHNlIGlmICgxNiA9PSBlbnRyeS0+aWFfYWRkcmVzc19sZW4pIHsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVCgoImFjY2VzczppcGFkZHJlc3M6Y3JlYXRlIiwgIm9ubHkgaXB2NCBzdXBwb3J0ZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KK30KKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX2lwYWRkcmVzc19jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdV9jaGFyICppZl9saXN0ID0gTlVMTCwgKmNwOworICAgIHNpemVfdCBpZl9saXN0X3NpemUgPSAwOworICAgIGludCBzeXNjdGxfb2lkW10gPSB7IENUTF9ORVQsIFBGX1JPVVRFLCAwLCAwLCBORVRfUlRfSUZMSVNULCAwIH07CisgICAgc3RydWN0IGlmYV9tc2doZHIgKmlmYTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmE7CisgICAgaW50IGFtYXNrOworICAgIGludCByYyA9IDA7CisgICAgaW50IGlkeF9vZmZzZXQgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgImxvYWQgKGZsYWdzICV1KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBpbnRlcmZhY2VcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bChzeXNjdGxfb2lkLCBzaXplb2Yoc3lzY3RsX29pZCkvc2l6ZW9mKGludCksIDAsCisgICAgICAgICAgICAgICAmaWZfbGlzdF9zaXplLCAwLCAwKSA9PSAtMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpbnRlcmZhY2UgaW5mbyAoc2l6ZSlcbiIpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorCisgICAgaWZfbGlzdCA9ICh1X2NoYXIqKW1hbGxvYyhpZl9saXN0X3NpemUpOworICAgIGlmIChpZl9saXN0ID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGludGVyZmFjZSBpbmZvICIKKyAgICAgICAgICAgICAgICAgIiglenUgYnl0ZXMpXG4iLCBpZl9saXN0X3NpemUpOworICAgICAgICByZXR1cm4gLTM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJhbGxvY2F0ZWQgJXp1IGJ5dGVzIGZvciBpZl9saXN0XG4iLCBpZl9saXN0X3NpemUpKTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKHN5c2N0bF9vaWQsIHNpemVvZihzeXNjdGxfb2lkKS9zaXplb2YoaW50KSwgaWZfbGlzdCwKKyAgICAgICAgICAgICAgICZpZl9saXN0X3NpemUsIDAsIDApID09IC0xKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGludGVyZmFjZSBpbmZvXG4iKTsKKyAgICAgICAgZnJlZShpZl9saXN0KTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qIHBhc3MgMjogd2FsayBhZGRyZXNzZXMgKi8KKyAgICBmb3IgKGNwID0gaWZfbGlzdDsgY3AgPCBpZl9saXN0ICsgaWZfbGlzdF9zaXplOyBjcCArPSBpZmEtPmlmYW1fbXNnbGVuKSB7CisgICAgICAgIGlmYSA9IChzdHJ1Y3QgaWZhX21zZ2hkciAqKSBjcDsKKyAgICAgICAgaW50IHJ0YXg7CisKKyAgICAgICAgaWYgKGlmYS0+aWZhbV90eXBlICE9IFJUTV9ORVdBRERSKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJyZWNlaXZlZCAweCV4IGluIFJUTV9ORVdBRERSIGZvciBpZmluZGV4ICV1XG4iLAorICAgICAgICAgICAgICAgICAgICBpZmEtPmlmYW1fYWRkcnMsIGlmYS0+aWZhbV9pbmRleCkpOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZiAoZW50cnkgPT0gTlVMTCkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKGlmYSArIDEpOworICAgICAgICBlbnRyeS0+aWFfc3RhdHVzID0gSVBBRERSRVNTU1RBVFVTVENfVU5LTk9XTjsKKyAgICAgICAgZW50cnktPmlhX29yaWdpbiA9IElQQUREUkVTU09SSUdJTlRDX09USEVSOworCWVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IDA7CisgICAgICAgIGZvciAoYW1hc2sgPSBpZmEtPmlmYW1fYWRkcnMsIHJ0YXggPSAwOyBhbWFzayAhPSAwOyBhbWFzayA+Pj0gMSwgcnRheCsrKSB7CisgICAgICAgICAgICBpZiAoKGFtYXNrICYgMSkgIT0gMCkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5uc19pYV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+aWZfaW5kZXggPSBpZmEtPmlmYW1faW5kZXg7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkOiBhPSVwLCBzYV9sZW49JWQsIHNhX2ZhbWlseT0weCV4XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZW50cnktPmlmX2luZGV4LCBhLCBhLT5zYV9sZW4sIGEtPnNhX2ZhbWlseSkpOworCisgICAgICAgICAgICAgICAgaWYgKGEtPnNhX2ZhbWlseSA9PSBBRl9JTkVUIHx8IGEtPnNhX2ZhbWlseSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopYTsKKwkJICAgIGNoYXIgc3RyWzEyOF07CisJCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXI6c3lzY3RsIiwKKwkJICAgICAgICAgICAgICAgICJJUHY0IGFkZHIgJXNcbiIsIGluZXRfbnRvcChBRl9JTkVULCAmYTQtPnNpbl9hZGRyLnNfYWRkciwgc3RyLCAxMjgpKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChydGF4ID09IFJUQVhfSUZBKSB7CisJCQllbnRyeS0+aWFfYWRkcmVzc19sZW4gPSA0OworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5pYV9hZGRyZXNzLCAmYTQtPnNpbl9hZGRyLnNfYWRkciwgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocnRheCA9PSBSVEFYX05FVE1BU0spCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aWFfcHJlZml4X2xlbiA9IG5ldHNubXBfaXBhZGRyZXNzX2lwdjRfcHJlZml4X2xlbihhNC0+c2luX2FkZHIuc19hZGRyKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmE2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKilhOworCQkgICAgY2hhciBzdHJbMTI4XTsKKwkJICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBhZGRyZXNzOmNvbnRhaW5lcjpzeXNjdGwiLAorCQkgICAgICAgICAgICAgICAgIklQdjYgYWRkciAlc1xuIiwgaW5ldF9udG9wKEFGX0lORVQ2LCAmYTYtPnNpbjZfYWRkci5zNl9hZGRyLCBzdHIsIDEyOCkpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJ0YXggPT0gUlRBWF9JRkEpIHsKKwkJCWVudHJ5LT5pYV9hZGRyZXNzX2xlbiA9IDE2OworICAgICAgICAgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5pYV9hZGRyZXNzLCAmYTYtPnNpbjZfYWRkciwgZW50cnktPmlhX2FkZHJlc3NfbGVuKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocnRheCA9PSBSVEFYX05FVE1BU0spIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pYV9wcmVmaXhfbGVuID0gbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKGE2LT5zaW42X2FkZHIpOworCQkJREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyOnN5c2N0bCIsCisJCQkgICAgICAgICAgICAicHJlZml4X2xlbj0lZFxuIiwgZW50cnktPmlhX3ByZWZpeF9sZW4pKTsKKwkJICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCAoKGNoYXIgKikgYSkgKyBST1VORFVQKGEtPnNhX2xlbikgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCWlmIChlbnRyeS0+aWFfYWRkcmVzc19sZW4gPT0gMCkgeworCSAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwYWRkcmVzczpjb250YWluZXI6c3lzY3RsIiwKKwkgICAgICAgICAgICAgICAgImVudHJ5IHNraXBwZWRcbiIpKTsKKwkgICAgbmV0c25tcF9hY2Nlc3NfaXBhZGRyZXNzX2VudHJ5X2ZyZWUoZW50cnkpOworCX0KKwllbHNlIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcGFkZHJlc3M6Y29udGFpbmVyIiwiZXJyb3Igd2l0aCBpcGFkZHJlc3NfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19pcGFkZHJlc3NfZW50cnlfZnJlZShlbnRyeSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChpZl9saXN0ICE9IE5VTEwpCisgICAgICAgIGZyZWUoaWZfbGlzdCk7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkODFiM2YKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZS5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBzY29wZXpvbmUgZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiBpcHY2c2NvcGV6b25lLmggMTQxNzAgMjAwNy0wNC0yOSAwMjoyMjoxMlogdmFydW5fYyAkCisgKi8KKy8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogY29uZmlndXJlIHJlcXVpcmVkIGZpbGVzCisgKgorICogTm90ZXM6CisgKgorICogMSkgcHJlZmVyIGZ1bmN0aW9uYWxpdHkgb3ZlciBwbGF0Zm9ybSwgd2hlcmUgcG9zc2libGUuIElmIGEgbWV0aG9kCisgKiAgICBpcyBhdmFpbGFibGUgZm9yIG11bHRpcGxlIHBsYXRmb3JtcywgdGVzdCB0aGF0IGZpcnN0LiBUaGF0IHdheQorICogICAgd2hlbiBhIG5ldyBwbGF0Zm9ybSBpcyBwb3J0ZWQsIGl0IHdvbid0IG5lZWQgYSBuZXcgdGVzdCBoZXJlLgorICoKKyAqIDIpIGRvbid0IGRvIGRldGFpbCByZXF1aXJlbWVudHMgaGVyZS4gSWYsIGZvciBleGFtcGxlLAorICogICAgSFBVWDExIGhhZCBkaWZmZXJlbnQgcmV1aXJlbWVudHMgdGhhbiBvdGhlciBIUFVYLCB0aGF0IHNob3VsZAorICogICAgYmUgaGFuZGxlZCBpbiB0aGUgKl9ocHV4LmggaGVhZGVyIGZpbGUuCisgKi8KK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbikKKyNpZiBkZWZpbmVkKCBsaW51eCApCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9saW51eCkKKyNlbHNlCisvKgorICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCisgKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KKyAqLworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUtdW5rbm93bi1hcmNoKTsKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2NvbW1vbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0NjJlYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3MvaXB2NnNjb3Blem9uZV9jb21tb24uYwpAQCAtMCwwICsxLDE1NSBAQAorLyoKKyAqICBpcHY2U2NvcGVJbmRleFRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDogaXB2NnNjb3Blem9uZV9jb21tb24uYyAxNDE3MCAyMDA3LTA0LTI5IDAyOjIyOjEyWiB2YXJ1bl9jICQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oPgorLyoKKyAqIGxvY2FsIHN0YXRpYyBwcm90b3R5cGVzCisgKi8KK3N0YXRpYyB2b2lkIF9lbnRyeV9yZWxlYXNlKG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKiBlbnRyeSwgdm9pZCAqdW51c2VkKTsKKworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIGV4dGVybmFsIHBlci1hcmNoaXRlY3R1cmUgZnVuY3Rpb25zIHByb3RvdHlwZXMKKyAqCisgKiBUaGVzZSBzaG91bGRuJ3QgYmUgY2FsbGVkIGJ5IHRoZSBnZW5lcmFsIHB1YmxpYywgc28gdGhleSBhcmVuJ3QgaW4KKyAqIHRoZSBoZWFkZXIgZmlsZS4KKyAqLworZXh0ZXJuIGludAorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9hcmNoX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpOworZXh0ZXJuIHZvaWQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9hcmNoX2luaXQodm9pZCk7CisKKy8qKgorICogaW5pdGlhbGl6ZSBzeXN0ZW1zdGF0cyBjb250YWluZXIKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9pbml0KHVfaW50IGZsYWdzKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTpjb250YWluZXIiLCAiaW5pdFxuIikpOworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXJzLiBvbmUgaW5kZXhlZCBieSBpZkluZGV4LCB0aGUgb3RoZXIKKyAgICAgKiBpbmRleGVkIGJ5IGlmTmFtZS4KKyAgICAgKi8KKyAgICBjb250YWluZXIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJhY2Nlc3Nfc2NvcGV6b25lOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCisvKioKKyAqIGxvYWQgc2NvcGV6b25lIGluZm9ybWF0aW9uIGluIHNwZWNpZmllZCBjb250YWluZXIKKyAqCisgKiBAcGFyYW0gY29udGFpbmVyIGVtcHR5IGNvbnRhaW5lciwgb3IgTlVMTCB0byBoYXZlIG9uZSBjcmVhdGVkIGZvciB5b3UKKyAqIEBwYXJhbSBsb2FkX2ZsYWdzIGZsYWdzIHRvIG1vZGlmeSBiZWhhdmlvdXIuCisgKgorICogQHJldHZhbCBOVUxMICBlcnJvcgorICogQHJldHZhbCAhTlVMTCBwb2ludGVyIHRvIGNvbnRhaW5lcgorICovCituZXRzbm1wX2NvbnRhaW5lcioKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgY29udGFpbmVyID0gbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9pbml0KGxvYWRfZmxhZ3MpOworICAgICAgICBpZiAoY29udGFpbmVyKQorICAgICAgICAgICAgY29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgic2NvcGV6b25lIik7CisgICAgfQorICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3Njb3Blem9uZVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJjID0gIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfYXJjaF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgaWYgKDAgIT0gcmMpIHsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9GUkVFX05PRkxBR1MpOworICAgICAgICBjb250YWluZXIgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBjb250YWluZXI7Cit9CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmcmVlX2ZsYWdzKQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsICJmcmVlXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY29udGFpbmVyIGZvciBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZighIChmcmVlX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0ZSRUVfRE9OVF9DTEVBUikpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogZnJlZSBhbGwgaXRlbXMuCisgICAgICAgICAqLworICAgICAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfZW50cnlfcmVsZWFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIH0KKworICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKKy8qKgorICovCituZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICoKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9jcmVhdGUodm9pZCkKK3sKKyAgICBuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICplbnRyeSA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSk7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnNjb3Blem9uZTplbnRyeSIsICJjcmVhdGVcbiIpKTsKKworICAgIGlmKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisKKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gICZlbnRyeS0+bnNfc2NvcGV6b25lX2luZGV4OworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKioKKyAqLwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2ZyZWUobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqIGVudHJ5KQoreworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmVudHJ5IiwgImZyZWVcbiIpKTsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKworICAgIGZyZWUoZW50cnkpOworfQorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIFV0aWxpdHkgcm91dGluZXMKKyAqLworCisvKioKKyAqIFxpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2VudHJ5X3JlbGVhc2UobmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKGVudHJ5KTsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmVfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MDY0MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9pcHY2c2NvcGV6b25lX2xpbnV4LmMKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiAgSW50ZXJmYWNlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZDogaXB2NnNjb3Blem9uZV9saW51eC5jIDE0MTcwIDIwMDctMDQtMjkgMDI6MjI6MTJaIHZhcnVuX2MgJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmg+CisKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorc3RhdGljIGludCBfc2NvcGV6b25lX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIGludCBpZHhfb2Zmc2V0KTsKKyNlbmRpZgorCisvKgorICoKKyAqIEByZXR2YWwgIDAgc3VjY2VzcworICogQHJldHZhbCAtMSBubyBjb250YWluZXIgc3BlY2lmaWVkCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBvcGVuIGZpbGUKKyAqIEByZXR2YWwgLTMgY291bGQgbm90IGNyZWF0ZSBlbnRyeSAocHJvYmFibHkgbWFsbG9jKQorICogQHJldHZhbCAtNCBmaWxlIGZvcm1hdCBlcnJvcgorICovCitpbnQKK25ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzEgPSAwOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgaW50IGlkeF9vZmZzZXQgPSAwOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3Nfc2NvcGV6b25lX1xuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByYzEgPSBfc2NvcGV6b25lX3Y2KGNvbnRhaW5lciwgaWR4X29mZnNldCk7CisjZW5kaWYKKyAgICBpZihyYzEgPiAwKQorICAgICAgICByYzEgPSAwOworICAgIHJldHVybiByYzE7Cit9CisKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorCisvKiBzY29wZSBpZGVudGlmaWVycywgZnJvbSBrZXJuZWwgLSBpbmNsdWRlL25ldC9pcHY2LmggKi8KKyNkZWZpbmUgSVBWNl9BRERSX0xPT1BCQUNLICAgICAgMHgwMDEwVQorI2RlZmluZSBJUFY2X0FERFJfTElOS0xPQ0FMICAgICAweDAwMjBVCisjZGVmaW5lIElQVjZfQUREUl9TSVRFTE9DQUwgICAgIDB4MDA0MFUKKworc3RhdGljIGludAorX3Njb3Blem9uZV92NihuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCBpbnQgaWR4X29mZnNldCkKK3sKKworICAgIC8qCisgICAgICogT24gTGludXgsIHdlIHN1cHBvcnQgb25seSBsaW5rLWxvY2FsIHNjb3BlIHpvbmVzLgorICAgICAqIEVhY2ggaW50ZXJmYWNlLCB3aGljaCBoYXMgbGluay1sb2NhbCBhZGRyZXNzLCBnZXRzIHVuaXF1ZSBzY29wZQorICAgICAqIHpvbmUgaW5kZXguCisgICAgICovCisgICAgRklMRSAgICAgICAgICAgKmluOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzgwXSwgYWRkcls0MF07CisgICAgaW50ICAgICAgICAgICAgIGlmX2luZGV4LCBwZnhfbGVuLCBzY29wZSwgZmxhZ3MsIHJjID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgbGFzdF9pZl9pbmRleCA9IC0xOworICAgIG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKmVudHJ5OworICAgIAorICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworI2RlZmluZSBQUk9DRklMRSAiL3Byb2MvbmV0L2lmX2luZXQ2IgorICAgIGlmICghKGluID0gZm9wZW4oUFJPQ0ZJTEUsICJyIikpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIikpOworICAgICAgICByZXR1cm4gLTI7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogYWRkcmVzcyBpbmRleCBwcmVmaXhfbGVuIHNjb3BlIHN0YXR1cyBpZl9uYW1lCisgICAgICovCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGZlODAwMDAwMDAwMDAwMDAwMjAwZThmZmZlNWI1YzkzIDA1IDQwIDIwIDgwIGV0aDAKKyAgICAgICAgICogICAgICAgICAgICAgQSAgICAgICAgICAgICAgICAgICAgRCAgUCAgUyAgRiAgSQorICAgICAgICAgKiBBOiBhZGRyZXNzCisgICAgICAgICAqIEQ6IGRldmljZSBudW1iZXIKKyAgICAgICAgICogUDogcHJlZml4IGxlbgorICAgICAgICAgKiBTOiBzY29wZSAoc2VlIGluY2x1ZGUvbmV0L2lwdjYuaCwgbmV0L2lwdjYvYWRkcmNvbmYuYykKKyAgICAgICAgICogRjogZmxhZ3MgKHNlZSBpbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oLCBuZXQvaXB2Ni9hZGRyY29uZi5jKQorICAgICAgICAgKiBJOiBpbnRlcmZhY2UKKyAgICAgICAgICovCisgICAgICAgIHJjID0gc3NjYW5mKGxpbmUsICIlMzlzICUwNHggJTAyeCAlMDJ4ICUwMnhcbiIsCisgICAgICAgICAgICAgICAgICAgIGFkZHIsICZpZl9pbmRleCwgJnBmeF9sZW4sICZzY29wZSwgJmZsYWdzKTsKKyAgICAgICAgaWYoIDUgIT0gcmMgKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCBQUk9DRklMRSAiIGRhdGEgZm9ybWF0IGVycm9yICglZCE9NSksIGxpbmUgPT18JXN8XG4iLAorICAgICAgICAgICAgICAgICAgICAgcmMsIGxpbmUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpzY29wZXpvbmU6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAgICAgImFkZHIgJXMsIGluZGV4ICVkLCBwZnggJWQsIHNjb3BlICVkLCBmbGFncyAweCVYXG4iLAorICAgICAgICAgICAgICAgICAgICBhZGRyLCBpZl9pbmRleCwgcGZ4X2xlbiwgc2NvcGUsIGZsYWdzKSk7CisKKyAgICAgICAgaWYgKCEgKHNjb3BlICYgSVBWNl9BRERSX0xJTktMT0NBTCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBhZGRyZXNzIGlzIG5vdCBsaW5rLWxvY2FsLCBza2lwcGluZ1xuIikpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyogCisgICAgICAgICAqIENoZWNrIHRoYXQgdGhlIGludGVyZmFjZSB3YXMgbm90IGluc2VydGVkIGJlZm9yZSwganVzdCBpbiBjYXNlCisgICAgICAgICAqIG9uZSBpbnRlcmZhY2UgaGFzIHR3byBvciBtb3JlIGxpbmstbG9jYWwgYWRkcmVzc2VzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGxhc3RfaWZfaW5kZXggPT0gaWZfaW5kZXgpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c2NvcGV6b25lOmNvbnRhaW5lciIsIAorICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBpbnRlcmZhY2Ugd2FzIGFscmVhZHkgaW5zZXJ0ZWQsIHNraXBwaW5nXG4iKSk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIGxhc3RfaWZfaW5kZXggPSBpZl9pbmRleDsgCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc2NvcGV6b25lX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZW50cnktPm5zX3Njb3Blem9uZV9pbmRleCA9ICsraWR4X29mZnNldDsKKyAgICAgICAgZW50cnktPmluZGV4ID0gaWZfaW5kZXg7CisgICAgICAgIGVudHJ5LT5zY29wZXpvbmVfbGlua2xvY2FsID0gaWZfaW5kZXg7CisgCisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgfQorICAgIGZjbG9zZShpbik7CisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIGlkeF9vZmZzZXQ7Cit9CisjZW5kaWYgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19jb21tb24uaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oCmluZGV4IDJmMGE2M2EuLmViZWEyMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2NvbW1vbi5oCkBAIC0xOSw2ICsxOSw4IEBACiAgKi8KICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eCkKKyNlbGlmIGRlZmluZWQoIGZyZWVic2Q0ICkgfHwgZGVmaW5lZCggbmV0YnNkNSApIHx8IGRlZmluZWQoIG9wZW5ic2Q0ICkgfHwgZGVmaW5lZCggZHJhZ29uZmx5ICkgfHwgZGVmaW5lZCggZGFyd2luICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bCkKICNlbHNlCiAvKgogICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCkBAIC0yNiw0ICsyOCwzIEBACiAgKi8KIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzLXVua25vd24tYXJjaCkKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfbGludXguYwppbmRleCBkOWMzOTE0Li44NWU5MTJhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc2NhbGFyc19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX2xpbnV4LmMKQEAgLTUsMTAgKzUsMTQ4IEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmg+CiAKLXN0YXRpYyBjb25zdCBjaGFyIGlwZndfbmFtZVtdID0gIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2FsbC9mb3J3YXJkaW5nIjsKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlKQorCitzdGF0aWMgY29uc3QgY2hhciBpcGZ3X25hbWVbXSA9ICIvcHJvYy9zeXMvbmV0L2lwdjQvY29uZi9hbGwvZm9yd2FyZGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBpcHR0bF9uYW1lW10gPSAiL3Byb2Mvc3lzL25ldC9pcHY0L2lwX2RlZmF1bHRfdHRsIjsKK3N0YXRpYyBjb25zdCBjaGFyIGlwZnc2X25hbWVbXSA9ICIvcHJvYy9zeXMvbmV0L2lwdjYvY29uZi9hbGwvZm9yd2FyZGluZyI7CitzdGF0aWMgY29uc3QgY2hhciBpcGhvcDZfbmFtZVtdID0gIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2FsbC9ob3BfbGltaXQiOworCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBmaWxlcCA9IGZvcGVuKGlwZndfbmFtZSwgInIiKTsKKyAgICBpZiAoTlVMTCA9PSBmaWxlcCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBmd19uYW1lKSk7CisgICAgICAgIHJldHVybiAtMjsKKyAgICB9CisKKyAgICByYyA9IGZzY2FuZihmaWxlcCwgIiVsdSIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBGb3J3YXJkaW5nIiwgImNvdWxkIG5vdCByZWFkICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKworICAgIGlmICgoMCAhPSAqdmFsdWUpICYmICgxICE9ICp2YWx1ZSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAidW5leHBlY3RlZCB2YWx1ZSAlbGQgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgaXBmd19uYW1lKSk7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiYmFkIHZhbHVlICVsZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpcGZ3X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgZmlsZXAgPSBmb3BlbihpcGZ3X25hbWUsICJ3Iik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICB9CisKKyAgICByYyA9IGZwcmludGYoZmlsZXAsICIlbGQiLCB2YWx1ZSk7CisgICAgZmNsb3NlKGZpbGVwKTsKKyAgICBpZiAoMSAhPSByYykgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgd3JpdGUgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBGSUxFICpmaWxlcDsKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisKKyAgICBmaWxlcCA9IGZvcGVuKGlwdHRsX25hbWUsICJyIik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIHJjID0gZnNjYW5mKGZpbGVwLCAiJWx1IiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IHJlYWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKworICAgIGlmICgoMCA9PSAqdmFsdWUpIHx8ICgyNTUgPCAqdmFsdWUpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgInVuZXhwZWN0ZWQgdmFsdWUgJWxkIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAqdmFsdWUsIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodV9sb25nIHZhbHVlKQoreworICAgIEZJTEUgKmZpbGVwOworICAgIGludCByYzsKKworICAgIGlmICh2YWx1ZSA9PSAwIHx8IHZhbHVlID4gMjU1KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0VFRMIiwgImJhZCB2YWx1ZSAlbGQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgaXB0dGxfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICBmaWxlcCA9IGZvcGVuKGlwdHRsX25hbWUsICJ3Iik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwdHRsX25hbWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgfQorCisgICAgcmMgPSBmcHJpbnRmKGZpbGVwLCAiJWxkIiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRUVEwiLCAiY291bGQgbm90IHdyaXRlICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcHR0bF9uYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CiAKIGludAogbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKQEAgLTIwLDI0ICsxNTgsMjQgQEAKICAgICAgICAgcmV0dXJuIC0xOwogCiAKLSAgICBmaWxlcCA9IGZvcGVuKGlwZndfbmFtZSwgInIiKTsKKyAgICBmaWxlcCA9IGZvcGVuKGlwZnc2X25hbWUsICJyIik7CiAgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcHY2SXBGb3J3YXJkaW5nIiwgImNvdWxkIG5vdCBvcGVuICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBpcGZ3X25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgaXBmdzZfbmFtZSkpOwogICAgICAgICByZXR1cm4gLTI7CiAgICAgfQogCi0gICAgcmMgPSBmc2NhbmYoZmlsZXAsICIlbGQiLCB2YWx1ZSk7CisgICAgcmMgPSBmc2NhbmYoZmlsZXAsICIlbHUiLCB2YWx1ZSk7CiAgICAgZmNsb3NlKGZpbGVwKTsKICAgICBpZiAoMSAhPSByYykgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLCAiY291bGQgbm90IHJlYWQgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiAtMzsKICAgICB9CiAKICAgICBpZiAoKDAgIT0gKnZhbHVlKSAmJiAoMSAhPSAqdmFsdWUpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJ1bmV4cGVjdGVkIHZhbHVlICVsZCBpbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgKnZhbHVlLCBpcGZ3X25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgKnZhbHVlLCBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiAtNDsKICAgICB9CiAKQEAgLTYwLDEwICsxOTgsMTAgQEAKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CiAgICAgfQogCi0gICAgZmlsZXAgPSBmb3BlbihpcGZ3X25hbWUsICJ3Iik7CisgICAgZmlsZXAgPSBmb3BlbihpcGZ3Nl9uYW1lLCAidyIpOwogICAgIGlmIChOVUxMID09IGZpbGVwKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgaXBmd19uYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGlwZnc2X25hbWUpKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CiAgICAgfQogCkBAIC03MSw5ICsyMDksODYgQEAKICAgICBmY2xvc2UoZmlsZXApOwogICAgIGlmICgxICE9IHJjKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXB2NklwRm9yd2FyZGluZyIsICJjb3VsZCBub3Qgd3JpdGUgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGlwZndfbmFtZSkpOworICAgICAgICAgICAgICAgICAgICBpcGZ3Nl9uYW1lKSk7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQogCiAgICAgcmV0dXJuIDA7CiB9CisKK2ludAorbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X2dldCh1X2xvbmcgKnZhbHVlKQoreworICAgIEZJTEUgKmZpbGVwOworICAgIGludCByYzsKKworICAgIGlmIChOVUxMID09IHZhbHVlKQorICAgICAgICByZXR1cm4gLTE7CisKKworICAgIGZpbGVwID0gZm9wZW4oaXBob3A2X25hbWUsICJyIik7CisgICAgaWYgKE5VTEwgPT0gZmlsZXApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRIb3BMaW1pdCIsICJjb3VsZCBub3Qgb3BlbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIHJjID0gZnNjYW5mKGZpbGVwLCAiJWx1IiwgdmFsdWUpOworICAgIGZjbG9zZShmaWxlcCk7CisgICAgaWYgKDEgIT0gcmMpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcERlZmF1bHRIb3BMaW1pdCIsICJjb3VsZCBub3QgcmVhZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKworICAgIGlmICgoMCA9PSAqdmFsdWUpIHx8ICgyNTUgPCAqdmFsdWUpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAidW5leHBlY3RlZCB2YWx1ZSAlbGQgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICp2YWx1ZSwgaXBob3A2X25hbWUpKTsKKyAgICAgICAgcmV0dXJuIC00OworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcERlZmF1bHRIb3BMaW1pdF9zZXQodV9sb25nIHZhbHVlKQoreworICAgIEZJTEUgKmZpbGVwOworICAgIGludCByYzsKKworICAgIGlmICh2YWx1ZSA9PSAwIHx8IHZhbHVlID4gMjU1KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiYmFkIHZhbHVlICVsZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBpcGhvcDZfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICBmaWxlcCA9IGZvcGVuKGlwaG9wNl9uYW1lLCAidyIpOworICAgIGlmIChOVUxMID09IGZpbGVwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiY291bGQgbm90IG9wZW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGlwaG9wNl9uYW1lKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgIH0KKworICAgIHJjID0gZnByaW50ZihmaWxlcCwgIiVsZCIsIHZhbHVlKTsKKyAgICBmY2xvc2UoZmlsZXApOworICAgIGlmICgxICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6aXBEZWZhdWx0SG9wTGltaXQiLCAiY291bGQgbm90IHdyaXRlICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBpcGhvcDZfbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgaXBSZWFzbVRpbWVvdXRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDEzLCAwIH07CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlCisgICAgICAgICgiaXBSZWFzbVRpbWVvdXQiLAorICAgICAgICAgaXBSZWFzbVRpbWVvdXRfb2lkLCBPSURfTEVOR1RIKGlwUmVhc21UaW1lb3V0X29pZCksCisgICAgICAgICAiL3Byb2Mvc3lzL25ldC9pcHY0L2lwZnJhZ190aW1lIiwgQVNOX0lOVEVHRVIsCisgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgTlVMTCwgTlVMTCk7CisKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bC5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3NjYWxhcnNfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTY5Yzc0MwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zY2FsYXJzX3N5c2N0bC5jCkBAIC0wLDAgKzEsMjkxIEBACisvKgorICogIElQLU1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydAorICoKKyAqICRJZCQKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL2lwX3NjYWxhcnMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2N0bC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogWFhYOiB0aGUgdmFsdWVzIHBhc3NlZCB0byBuZXRzbm1wX2FyY2hfaXBfc2NhbGFycyguLikgbWF5IG9yIG1heSBub3QgYmUKKyAqIHBvcnRhYmxlIHRvIHRoZSBvdGhlciBCU0RzIC0tIGl0IHNlZW1zIHRvIGJlIHBvcnRhYmxlIGJhY2sgdG8gRnJlZUJTRCA0LngKKyAqIChEYXJ3aW4gMTAuOC4wKSBhdCBsZWFzdC4KKyAqLworCitzdGF0aWMgaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoY29uc3QgY2hhciAqYWNjZXNzX21vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbWliW10sIHNpemVfdCBtaWJfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqb2xkX3ZhbHVlLCB1X2xvbmcgKm5ld192YWx1ZSkKK3sKKyAgICBpbnQgbmV3aW50LCBvbGRpbnQ7CisgICAgc2l6ZV90IG5lZWRlZDsKKyAgICBpbnQgcmM7CisKKyAgICBuZWVkZWQgPSBzaXplb2Yob2xkaW50KTsKKyAgICBpZiAobmV3X3ZhbHVlKQorICAgICAgICBuZXdpbnQgPSAqbmV3X3ZhbHVlOworCisgICAgcmMgPSBzeXNjdGwobWliLCBtaWJfbGVuLCAmb2xkaW50LCAmbmVlZGVkLAorICAgICAgICAgICAgICAgIG5ld192YWx1ZSA/ICZuZXdpbnQgOiBOVUxMLCAobmV3X3ZhbHVlID8gc2l6ZW9mKG5ld2ludCkgOiAwKSk7CisgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAgIERFQlVHTVNHVEwoKGFjY2Vzc19tb2R1bGUsICJzeXNjdGwgJXMgZmFpbGVkIC0gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIChuZXdfdmFsdWUgPT0gTlVMTCA/ICJnZXQiIDogInNldCIpLAorICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKKyAgICB9CisgICAgKm9sZF92YWx1ZSA9IG9sZGludDsKKyAgICByZXR1cm4gcmM7Cit9CisKK2ludCBpcERlZmF1bHRUVExfbWliW10gPSB7CisgICAgQ1RMX05FVCwKKyAgICBQRl9JTkVULAorICAgIElQUFJPVE9fSVAsCisgICAgSVBDVExfREVGVFRMCit9OworCitpbnQgaXBGb3J3YXJkaW5nX21pYltdID0geworICAgIENUTF9ORVQsCisgICAgUEZfSU5FVCwKKyAgICBJUFBST1RPX0lQLAorICAgIElQQ1RMX0ZPUldBUkRJTkcKK307CisKK2ludCBpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliW10gPSB7CisgICAgQ1RMX05FVCwKKyAgICBQRl9JTkVUNiwKKyAgICBJUFBST1RPX0lQLAorICAgIElQVjZDVExfREVGSExJTQorfTsKKworaW50IGlwdjZJcEZvcndhcmRpbmdfbWliW10gPSB7CisgICAgQ1RMX05FVCwKKyAgICBQRl9JTkVUNiwKKyAgICBJUFBST1RPX0lQLAorICAgIElQVjZDVExfRk9SV0FSRElORworfTsKKworI2RlZmluZSBNSUJfTEVOKGEpCQkoc2l6ZW9mKGEpIC8gc2l6ZW9mKCphKSkKKworI2RlZmluZSBJUERFRkFVTFRUVExfTEVOCU1JQl9MRU4oaXBEZWZhdWx0VFRMX21pYikKKyNkZWZpbmUgSVBGT1JXQVJESU5HX0xFTglNSUJfTEVOKGlwRm9yd2FyZGluZ19taWIpCisjZGVmaW5lIElQVjZJUERFRkFVTFRIT1BMSU1JVF9MRU4JTUlCX0xFTihpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliKQorI2RlZmluZSBJUFY2SVBGT1JXQVJESU5HX0xFTglNSUJfTEVOKGlwdjZJcEZvcndhcmRpbmdfbWliKQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcERlZmF1bHRUVEwiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFRUTF9taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBERUZBVUxUVFRMX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgTlVMTCk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMjsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodV9sb25nIHZhbHVlKQoreworICAgIGludCByYzsKKworICAgIGlmICgxID09IHZhbHVlKQorICAgICAgICA7CisgICAgZWxzZSBpZiAoMiA9PSB2YWx1ZSkKKyAgICAgICAgdmFsdWUgPSAwOworICAgIGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlwRGVmYXVsdFRUTCIsICJiYWQgdmFsdWUgJWxkXG4iLAorICAgICAgICAgICAgICAgICAgICB2YWx1ZSkpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9CisKKyAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX3N5c2N0bCgiYWNjZXNzOmlwRm9yd2FyZGluZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBGb3J3YXJkaW5nX21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUEZPUldBUkRJTkdfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsICZ2YWx1ZSk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoTlVMTCA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZGluZ19taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSwgTlVMTCk7CisgICAgaWYgKHJjICE9IDApCisgICAgICAgIHJldHVybiAtMjsKKworICAgIC8qIE9uIEZyZWVCU0QgNy4yIGF0IGxlYXN0LCB0aGUgdmFsdWUgcGFzc2VkIHRvIHRoZSBzeXNjdGwgY2FuIGJlIGNvZXJjZWQKKyAgICAgKiBpbnRvIGEgbm9uLXplcm8gdmFsdWU7IGNvbnZlcnQgaXQgaW50byBhIHZhbHVlIHRoYXQncyBzYW5lIHBlciB0aGUKKyAgICAgKiBJUC1NSUIgZGVmaW5pdGlvbi4KKyAgICAgKi8KKyAgICBpZiAoKnZhbHVlICE9IDApCisgICAgICAgICp2YWx1ZSA9IDE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZGluZ19taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfZ2V0KHVfbG9uZyAqdmFsdWUpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKE5VTEwgPT0gdmFsdWUpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfc3lzY3RsKCJhY2Nlc3M6aXB2NklwRGVmYXVsdEhvcExpbWl0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZJUERFRkFVTFRIT1BMSU1JVF9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUsIE5VTEwpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTI7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBEZWZhdWx0SG9wTGltaXRfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcHY2SXBEZWZhdWx0SG9wTGltaXQiLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNklQREVGQVVMVEhPUExJTUlUX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50CituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBGb3J3YXJkaW5nX2dldCh1X2xvbmcgKnZhbHVlKQoreworICAgIGludCByYzsKKworICAgIGlmIChOVUxMID09IHZhbHVlKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX3N5c2N0bCgiYWNjZXNzOmlwdjZJcEZvcndhcmRpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJcEZvcndhcmRpbmdfbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZJUEZPUldBUkRJTkdfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLCBOVUxMKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICAgICAgcmV0dXJuIC0yOworCisgICAgLyogT24gRnJlZUJTRCA3LjIgYXQgbGVhc3QsIHRoZSB2YWx1ZSBwYXNzZWQgdG8gdGhlIHN5c2N0bCBjYW4gYmUgY29lcmNlZAorICAgICAqIGludG8gYSBub24temVybyB2YWx1ZTsgY29udmVydCBpdCBpbnRvIGEgdmFsdWUgdGhhdCdzIHNhbmUgcGVyIHRoZQorICAgICAqIElQLU1JQiBkZWZpbml0aW9uLgorICAgICAqLworICAgIGlmICgqdmFsdWUgIT0gMCkKKyAgICAgICAgKnZhbHVlID0gMTsKKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcEZvcndhcmRpbmdfc2V0KHVfbG9uZyB2YWx1ZSkKK3sKKyAgICBpbnQgcmM7CisKKyAgICBpZiAoMSA9PSB2YWx1ZSkKKyAgICAgICAgOworICAgIGVsc2UgaWYgKDIgPT0gdmFsdWUpCisgICAgICAgIHZhbHVlID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppcEZvcndhcmRpbmciLCAiYmFkIHZhbHVlICVsZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19zeXNjdGwoImFjY2VzczppcHY2SXBGb3J3YXJkaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBGb3J3YXJkaW5nX21pYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2SVBGT1JXQVJESU5HX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAmdmFsdWUpOworICAgIGlmIChyYyAhPSAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGxvbmcgaXBSZWFzbVRpbWVvdXRfdmFsOworCit2b2lkCituZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgaXBSZWFzbVRpbWVvdXRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDEzLCAwIH07CisKKyAgICAvKiAKKyAgICAgKiBUaGlzIHZhbHVlIGlzIHN0YXRpYyBhdCBjb21waWxlIHRpbWUgb24gRnJlZUJTRDsgaXQgcmVhbGx5IHNob3VsZCBiZSBhCisgICAgICogcHJvYmVkIHZpYSBlaXRoZXIgc3lzY3RsIG9yIHN5c2NvbmYgYXQgcnVudGltZSBhcyB0aGUgY29tcGlsZWQgdmFsdWUgYW5kCisgICAgICogdGhlIHJ1bnRpbWUgdmFsdWUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIGNhbiB2YXJ5LgorICAgICAqCisgICAgICogUGxlYXNlIHJlZmVyIHRvIHN5cy9wcm90b3N3LmggZm9yIG1vcmUgZGV0YWlscyBvbiB3aGF0IHRoaXMgdmFsdWUgaXMgKGluCisgICAgICogcGFydGljdWxhciBQUl9TTE9XSFopLgorICAgICAqLworICAgIGlwUmVhc21UaW1lb3V0X3ZhbCA9IElQRlJBR1RUTCAvIFBSX1NMT1dIWjsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZSgiaXBSZWFzbVRpbWVvdXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcFJlYXNtVGltZW91dF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXBSZWFzbVRpbWVvdXRfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmlwUmVhc21UaW1lb3V0X3ZhbCwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCmluZGV4IDZiYmE2ZDkuLjUxNDgwN2EgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCkBAIC0yMCwxMSArMjAsMTAgQEAKIGNvbmZpZ19yZXF1aXJlKGlwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24pCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2xpbnV4KQorI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyKQorI2VsaWYgZGVmaW5lZCggZnJlZWJzZDcgKSB8fCBkZWZpbmVkKCBuZXRic2Q1ICkgfHwgZGVmaW5lZCggb3BlbmJzZDQgKSB8fCBkZWZpbmVkKCBkcmFnb25mbHkgKSB8fCBkZWZpbmVkKCBkYXJ3aW4gKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3N5c2N0bCkKICNlbHNlCi0vKgotICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCi0gKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KLSAqLwotY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLXVua25vd24tYXJjaCk7Citjb25maWdfZXJyb3IodGhlIHN5c3RlbXN0YXRzIGRhdGEgYWNjZXNzIGxpYnJhcnkgaXMgbm90IGF2YWlsYWJsZSBpbiB0aGlzIGVudmlyb25tZW50LikKICNlbmRpZgotCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfY29tbW9uLmMKaW5kZXggZjI3ZTBlYS4uMjkxMDliZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19jb21tb24uYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiAgU3lzdGVtc3RhdHMgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKiAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcElmU3RhdHNUYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKICAqCiAgKiAkSWQkCiAgKi8KQEAgLTk2LDggKzk2LDExIEBACiAKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lciIsICJsb2FkXG4iKSk7CiAKLSAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CiAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9pbml0KGxvYWRfZmxhZ3MpOworICAgICAgICBpZiAoTlVMTCAhPSBjb250YWluZXIpCisgICAgICAgICAgICBjb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJzeXN0ZW1zdGF0c19hdXRvY3JlYXRlIik7CisgICAgfQogICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3N5c3RlbXN0YXRzXG4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNjMsNyArMTY2LDggQEAKIC8qKgogICovCiBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICoKLW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpbnQgdmVyc2lvbikKK25ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpbnQgdmVyc2lvbiwgaW50IGlmX2luZGV4LAorICAgICAgICBjb25zdCBjaGFyICp0YWJsZU5hbWUpCiB7CiAgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPQogICAgICAgICBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkpOwpAQCAtMTczLDExICsxNzcsMTEgQEAKICAgICBpZihOVUxMID09IGVudHJ5KQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGVudHJ5LT5uc19pcF92ZXJzaW9uID0gdmVyc2lvbjsKLQotICAgIGVudHJ5LT5vaWRfaW5kZXgubGVuID0gMTsKLSAgICBlbnRyeS0+b2lkX2luZGV4Lm9pZHMgPSAob2lkICopICYgZW50cnktPm5zX2lwX3ZlcnNpb247Ci0KKyAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDI7CisgICAgZW50cnktPm9pZF9pbmRleC5vaWRzID0gZW50cnktPmluZGV4OworICAgIGVudHJ5LT5pbmRleFswXSA9IHZlcnNpb247CisgICAgZW50cnktPmluZGV4WzFdID0gaWZfaW5kZXg7CisgICAgZW50cnktPnRhYmxlTmFtZSA9IHRhYmxlTmFtZTsKICAgICByZXR1cm4gZW50cnk7CiB9CiAKQEAgLTIxNyw2ICsyMjEsNjIgQEAKICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVudHJ5KTsKIH0KIAorLyoKKyAqIENhbGN1bGF0ZXMgdGhlIGVudHJpZXMsIHdoaWNoIGFyZSBub3QgcHJvdmlkZWQgYnkgT1MsIGJ1dCBjYW4gYmUgCisgKiBjb21wdXRlZCBmcm9tIHRoZSBvdGhlcnMuCisgKi8KK3N0YXRpYyB2b2lkCitfY2FsY3VsYXRlX2VudHJpZXMobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqIGVudHJ5KQoreworICAgIC8qCisgICAgICogSENJbkZvcndEYXRhZ3JhbXMgPSBIQ0luTm9Sb3V0ZXMgKyBIQ091dEZvcndEYXRhZ3JhbXMKKyAgICAgKi8KKyAgICBpZiAoIWVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVNdCisgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10pIHsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcyA9IGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXM7CisgICAgICAgIHU2NEluY3IoJmVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywgJmVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMpOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSA9IDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBIQ091dEZyYWdSZXFkcyA9IEhDT3V0RnJhZ09LcyArIEhDT3V0RnJhZ0ZhaWxzCisgICAgICovCisgICAgaWYgKCFlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10KKyAgICAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10pIHsKKyAgICAgICAgCisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcyA9IGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3M7CisgICAgICAgIHU2NEluY3IoJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcywgJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscyk7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdID0gMTsKKyAgICB9CisgICAgCisgICAgLyoKKyAgICAgKiBIQ091dFRyYW5zbWl0cyA9IEhDT3V0UmVxdWVzdHMgICsgSENPdXRGb3J3RGF0YWdyYW1zICsgSENPdXRGcmFnQ3JlYXRlcyAgCisgICAgICogICAgICAgICAgICAgICAgICAtIEhDT3V0RnJhZ1JlcWRzIC0gSENPdXROb1JvdXRlcyAgLSBIQ091dERpc2NhcmRzCisgICAgICovCisgICAgaWYgKCFlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXQorICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdCisgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXQorICAgICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXQorICAgICAgICAgICAmJiBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdCisgICAgICAgICAgICYmIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10KKyAgICAgICAgJiYgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSkgeworCisgICAgICAgIFU2NCB0bXAsIHRtcDIsIHRtcDM7CisgICAgICAgIHRtcCA9IGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzOworICAgICAgICB1NjRJbmNyKCZ0bXAsICZlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zKTsKKyAgICAgICAgdTY0SW5jcigmdG1wLCAmZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMpOworICAgICAgICAKKyAgICAgICAgdTY0U3VidHJhY3QoJnRtcCwgJmVudHJ5LT5zdGF0cy5IQ091dEZyYWdSZXFkcywgJnRtcDIpOworICAgICAgICB1NjRTdWJ0cmFjdCgmdG1wMiwgJmVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLCAmdG1wMyk7CisgICAgICAgIHU2NFN1YnRyYWN0KCZ0bXAzLCAmZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMsICZlbnRyeS0+c3RhdHMuSENPdXRUcmFuc21pdHMpOworICAgICAgICAgICAgICAgIAorICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSA9IDE7CisgICAgfQorfQorCiAvKioKICAqIHVwZGF0ZSBlbnRyeSBzdGF0cyAoY2hlY2tpbmcgZm9yIGNvdW50ZXIgd3JhcCkKICAqCkBAIC0yMzMsNyArMjkzLDggQEAKICAgICAgKiBzYW5pdHkgY2hlY2tzCiAgICAgICovCiAgICAgaWYgKChOVUxMID09IHByZXZfdmFscykgfHwgKE5VTEwgPT0gbmV3X3ZhbHMpIHx8Ci0gICAgICAgIChwcmV2X3ZhbHMtPm5zX2lwX3ZlcnNpb24gIT0gbmV3X3ZhbHMtPm5zX2lwX3ZlcnNpb24pKQorICAgICAgICAocHJldl92YWxzLT5pbmRleFswXSAhPSBuZXdfdmFscy0+aW5kZXhbMF0pCisgICAgICAgIHx8IChwcmV2X3ZhbHMtPmluZGV4WzFdICE9IG5ld192YWxzLT5pbmRleFsxXSkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qCkBAIC0yNDEsNiArMzAyLDcgQEAKICAgICAgKi8KICAgICBpZiAoMCA9PSBuZWVkX3dyYXBfY2hlY2spIHsKICAgICAgICAgbWVtY3B5KCZwcmV2X3ZhbHMtPnN0YXRzLCAmbmV3X3ZhbHMtPnN0YXRzLCBzaXplb2YobmV3X3ZhbHMtPnN0YXRzKSk7CisgICAgICAgIF9jYWxjdWxhdGVfZW50cmllcyhwcmV2X3ZhbHMpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKQEAgLTI1OCw4ICszMjAsOCBAQAogICAgICAgICAvKgogICAgICAgICAgKiB1cGRhdGUgc3RyYWlnaHQgMzIgYml0IGNvdW50ZXJzCiAgICAgICAgICAqLworICAgICAgICBtZW1jcHkoJnByZXZfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbMF0sICZuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbMF0sIHNpemVvZihuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWwpKTsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5JbkhkckVycm9ycyA9IG5ld192YWxzLT5zdGF0cy5JbkhkckVycm9yczsKLSAgICAgICAgcHJldl92YWxzLT5zdGF0cy5Jbk5vUm91dGVzID0gbmV3X3ZhbHMtPnN0YXRzLkluTm9Sb3V0ZXM7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5BZGRyRXJyb3JzID0gbmV3X3ZhbHMtPnN0YXRzLkluQWRkckVycm9yczsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBuZXdfdmFscy0+c3RhdHMuSW5Vbmtub3duUHJvdG9zOwogICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLkluVHJ1bmNhdGVkUGt0cyA9IG5ld192YWxzLT5zdGF0cy5JblRydW5jYXRlZFBrdHM7CkBAIC0yNjcsODcgKzMyOSwyMzYgQEAKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5SZWFzbU9LcyA9IG5ld192YWxzLT5zdGF0cy5SZWFzbU9LczsKICAgICAgICAgcHJldl92YWxzLT5zdGF0cy5SZWFzbUZhaWxzID0gbmV3X3ZhbHMtPnN0YXRzLlJlYXNtRmFpbHM7CiAgICAgICAgIHByZXZfdmFscy0+c3RhdHMuSW5EaXNjYXJkcyA9IG5ld192YWxzLT5zdGF0cy5JbkRpc2NhcmRzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dE5vUm91dGVzID0gbmV3X3ZhbHMtPnN0YXRzLk91dE5vUm91dGVzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dERpc2NhcmRzID0gbmV3X3ZhbHMtPnN0YXRzLk91dERpc2NhcmRzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dEZyYWdSZXFkcyA9IG5ld192YWxzLT5zdGF0cy5PdXRGcmFnUmVxZHM7Ci0gICAgICAgIHByZXZfdmFscy0+c3RhdHMuT3V0RnJhZ09LcyA9IG5ld192YWxzLT5zdGF0cy5PdXRGcmFnT0tzOwotICAgICAgICBwcmV2X3ZhbHMtPnN0YXRzLk91dEZyYWdGYWlscyA9IG5ld192YWxzLT5zdGF0cy5PdXRGcmFnRmFpbHM7Ci0gICAgICAgIHByZXZfdmFscy0+c3RhdHMuT3V0RnJhZ0NyZWF0ZXMgPSBuZXdfdmFscy0+c3RhdHMuT3V0RnJhZ0NyZWF0ZXM7CiAKICAgICAgICAgLyoKICAgICAgICAgICogdXBkYXRlIDY0Yml0IGNvdW50ZXJzCiAgICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJblJlY2VpdmVzLAorICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbk5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luTm9Sb3V0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5Ob1JvdXRlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbk5vUm91dGVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dE5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dE5vUm91dGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dE5vUm91dGVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dERpc2NhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dERpc2NhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dERpc2NhcmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dERpc2NhcmRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGcmFnUmVxZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZyYWdSZXFkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRGcmFnUmVxZHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGcmFnT0tzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZyYWdPS3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0RnJhZ09LcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRGcmFnT0tzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGcmFnRmFpbHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dEZyYWdGYWlscywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRGcmFnRmFpbHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3ZhbHMtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0RnJhZ0NyZWF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0RnJhZ0NyZWF0ZXMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJblJlY2VpdmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luUmVjZWl2ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5SZWNlaXZlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENJbk9jdGV0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJblJlY2VpdmVzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luT2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luT2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luT2N0ZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbk9jdGV0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENJbkZvcndEYXRhZ3JhbXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5EZWxpdmVycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbkZvcndEYXRhZ3JhbXMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbkRlbGl2ZXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luRGVsaXZlcnMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5EZWxpdmVycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRSZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbkRlbGl2ZXJzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dFJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dFJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dFJlcXVlc3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0UmVxdWVzdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDT3V0Rm9yd0RhdGFncmFtcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRUcmFuc21pdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0Rm9yd0RhdGFncmFtcyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUVFJBTlNNSVRTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dFRyYW5zbWl0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRUcmFuc21pdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0T2N0ZXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dFRyYW5zbWl0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE9jdGV0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRPY3RldHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDSW5NY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0T2N0ZXRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luTWNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luTWNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luTWNhc3RQa3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5NY2FzdFBrdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKKworICAgICAgICBpZiAobmV3X3ZhbHMtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICAgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5vbGRfc3RhdHMtPkhDSW5NY2FzdE9jdGV0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnByZXZfdmFscy0+c3RhdHMuSENPdXRNY2FzdFBrdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDSW5NY2FzdE9jdGV0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE1jYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRNY2FzdFBrdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAiRXJyb3IgZXhwYW5kaW5nIEhDT3V0TWNhc3RQa3RzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ091dE1jYXN0T2N0ZXRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ0luQmNhc3RQa3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgIkVycm9yIGV4cGFuZGluZyBIQ091dE1jYXN0T2N0ZXRzIHRvIDY0Yml0cyBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZXZfdmFscy0+dGFibGVOYW1lKSk7CisKKyAgICAgICAgaWYgKG5ld192YWxzLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10pCisgICAgICAgICAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl92YWxzLT5zdGF0cy5IQ0luQmNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ0luQmNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfdmFscy0+b2xkX3N0YXRzLT5IQ0luQmNhc3RQa3RzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmcHJldl92YWxzLT5zdGF0cy5IQ091dEJjYXN0UGt0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENJbkJjYXN0UGt0cyB0byA2NGJpdHMgaW4gJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X3ZhbHMtPnRhYmxlTmFtZSkpOworCisgICAgICAgIGlmIChuZXdfdmFscy0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUQkNBU1RQS1RTXSkKKyAgICAgICAgICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld192YWxzLT5zdGF0cy5IQ091dEJjYXN0UGt0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3ZhbHMtPm9sZF9zdGF0cy0+SENPdXRCY2FzdFBrdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJFcnJvciBleHBhbmRpbmcgSENPdXRCY2FzdFBrdHMgdG8gNjRiaXRzIGluICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcHJldl92YWxzLT50YWJsZU5hbWUpKTsKICAgICB9Ci0gICAgCisKICAgICAvKgogICAgICAqIGlmIHdlJ3ZlIGRlY2lkZWQgd2Ugbm8gbG9uZ2VyIG5lZWQgdG8gY2hlY2sgd3JhcHMsIGZyZWUgb2xkIHN0YXRzCiAgICAgICovCiAgICAgaWYgKDAgPT0gbmVlZF93cmFwX2NoZWNrKSB7CiAgICAgICAgIFNOTVBfRlJFRShwcmV2X3ZhbHMtPm9sZF9zdGF0cyk7Ci0gICAgfQotICAgIGVsc2UgeworICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHVwZGF0ZSBvbGQgc3RhdHMgZnJvbSBuZXcgc3RhdHMuCiAgICAgICAgICAqIGNhcmVmdWwgLSBvbGRfc3RhdHMgaXMgYSBwb2ludGVyIHRvIHN0YXRzLi4uCiAgICAgICAgICAqLwogICAgICAgICBtZW1jcHkocHJldl92YWxzLT5vbGRfc3RhdHMsICZuZXdfdmFscy0+c3RhdHMsIHNpemVvZihuZXdfdmFscy0+c3RhdHMpKTsKICAgICB9CisKKyAgICBfY2FsY3VsYXRlX2VudHJpZXMocHJldl92YWxzKTsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC0zNjgsNyArNTc5LDggQEAKICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwgImNvcHlcbiIpKTsKICAgICAKICAgICBpZiAoKE5VTEwgPT0gbGhzKSB8fCAoTlVMTCA9PSByaHMpIHx8Ci0gICAgICAgIChsaHMtPm5zX2lwX3ZlcnNpb24gIT0gcmhzLT5uc19pcF92ZXJzaW9uKSkKKyAgICAgICAgKGxocy0+aW5kZXhbMF0gIT0gcmhzLT5pbmRleFswXSkKKyAgICAgICAgfHwgKGxocy0+aW5kZXhbMV0gIT0gcmhzLT5pbmRleFsxXSkpCiAgICAgICAgIHJldHVybiAtMTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfbGludXguYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCmluZGV4IDNlMGZkODcuLjRhMjZlNDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19saW51eC5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqICBJbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CisgKiAgaXBTeXN0ZW1TdGF0c1RhYmxlIGFuZCBpcElmU3RhdHNUYWJsZSBpbnRlcmZhY2UgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0CiAgKgogICogJElkJAogICovCkBAIC0xMCwxMiArMTAsMjAgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaD4KIAorI2luY2x1ZGUgIi4uL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCIKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGRpcmVudC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKIHN0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y0KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOworc3RhdGljIGludCBfYWRkaXRpb25hbF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7CisKICNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQogc3RhdGljIGludCBfc3lzdGVtc3RhdHNfdjYobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncyk7CiAjZW5kaWYKIAotCiB2b2lkCiBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19hcmNoX2luaXQodm9pZCkKIHsKQEAgLTYyLDcgKzcwLDcgQEAKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19zeXN0ZW1zdGF0c19cbiIpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotCisgICAgCiAgICAgLyoKICAgICAgKiBsb2FkIHY0IGFuZCB2NiBzdGF0cy4gRXZlbiBpZiBvbmUgZmFpbHMsIHRyeSB0aGUgb3RoZXIuCiAgICAgICogSWYgdGhleSBoYXZlIHRoZSBzYW1lIHJjLCByZXR1cm4gaXQuIGlmIHRoZSBkaWZmZXIsIHJldHVybgpAQCAtODEsNiArODksOSBAQAogI2VuZGlmCiB9CiAKKy8qCisgKiBCYXNlZCBvbiBsb2FkX2ZsYWdzLCBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBvciBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NCBlbnRyaWVzLiAKKyAqLwogc3RhdGljIGludAogX3N5c3RlbXN0YXRzX3Y0KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCiB7CkBAIC05MiwxNSArMTAzLDIwIEBACiAgICAgaW50ICAgICAgICAgICAgIGxlbjsKICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2Nhbl92YWxzWzE5XTsKIAotICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NCAoZmxhZ3MgJXApXG4iLAorICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6c3lzdGVtc3RhdHM6Y29udGFpbmVyOmFyY2giLCAibG9hZCB2NCAoZmxhZ3MgJXgpXG4iLAogICAgICAgICAgICAgICAgIGxvYWRfZmxhZ3MpKTsKIAogICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLwogCisgICAgaWYgKGxvYWRfZmxhZ3MgJiBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUpIHsKKyAgICAgICAgLyogd2UgZG8gbm90IHN1cHBvcnQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgaWYgKCEoZGV2aW4gPSBmb3BlbigiL3Byb2MvbmV0L3NubXAiLCAiciIpKSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb2FkIFN5c3RlbXN0YXRzIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvc25tcCAuLi5cbiIpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvc25tcCAuLi5cbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KIApAQCAtMTQ0LDcgKzE2MCw4IEBACiAgICAgICAgIHdoaWxlICgqc3RhdHMgPT0gJyAnKSAvKiBza2lwIHNwYWNlcyBiZWZvcmUgc3RhdHMgKi8KICAgICAgICAgICAgIHN0YXRzKys7CiAKLSAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMSk7CisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDEsIDAsCisgICAgICAgICAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NCIpOwogICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CiAgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19GUkVFX05PRkxBR1MpOwpAQCAtMTg1LDIzICsyMDIsNTQgQEAKICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gc2Nhbl92YWxzWzJdID4+IDMyOwogICAgICAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgPSBzY2FuX3ZhbHNbM107CiAgICAgICAgIGVudHJ5LT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBzY2FuX3ZhbHNbNF07Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5sb3cgPSBzY2FuX3ZhbHNbNV0gJiAweGZmZmZmZmZmOwotICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMuaGlnaCA9IHNjYW5fdmFsc1s1XSA+PiAzMjsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBzY2FuX3ZhbHNbNV0gJiAweGZmZmZmZmZmOworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBzY2FuX3ZhbHNbNV0gPj4gMzI7CiAgICAgICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBzY2FuX3ZhbHNbNl07CiAgICAgICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gc2Nhbl92YWxzWzddOwogICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IHNjYW5fdmFsc1s4XSAmIDB4ZmZmZmZmZmY7CiAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IHNjYW5fdmFsc1s4XSA+PiAzMjsKICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gc2Nhbl92YWxzWzldICYgMHhmZmZmZmZmZjsKICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IHNjYW5fdmFsc1s5XSA+PiAzMjsKLSAgICAgICAgZW50cnktPnN0YXRzLk91dERpc2NhcmRzID0gc2Nhbl92YWxzWzEwXTsKLSAgICAgICAgZW50cnktPnN0YXRzLk91dE5vUm91dGVzID0gc2Nhbl92YWxzWzExXTsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gc2Nhbl92YWxzWzEwXSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gc2Nhbl92YWxzWzEwXSA+PiAzMjsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gc2Nhbl92YWxzWzExXSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gc2Nhbl92YWxzWzExXSA+PiAzMjsKICAgICAgICAgLyogZW50cnktPnN0YXRzLiA9IHNjYW5fdmFsc1sxMl07IC8gKiBSZWFzbVRpbWVvdXQgKi8KICAgICAgICAgZW50cnktPnN0YXRzLlJlYXNtUmVxZHMgPSBzY2FuX3ZhbHNbMTNdOwogICAgICAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBzY2FuX3ZhbHNbMTRdOwogICAgICAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IHNjYW5fdmFsc1sxNV07Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnT0tzID0gc2Nhbl92YWxzWzE2XTsKLSAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdGYWlscyA9IHNjYW5fdmFsc1sxN107Ci0gICAgICAgIGVudHJ5LT5zdGF0cy5PdXRGcmFnQ3JlYXRlcyA9IHNjYW5fdmFsc1sxOF07CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gc2Nhbl92YWxzWzE2XSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBzY2FuX3ZhbHNbMTZdID4+IDMyOworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gc2Nhbl92YWxzWzE3XSAmIDB4ZmZmZmZmZmY7OworICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IHNjYW5fdmFsc1sxN10gPj4gMzI7CisgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdyA9IHNjYW5fdmFsc1sxOF0gJiAweGZmZmZmZmZmOzsKKyAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IHNjYW5fdmFsc1sxOF0gPj4gMzI7CisKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10gPSAxOworICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfRElTQ09OVElOVUlUWVRJTUVdID0gMTsKKyAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0gPSAxOworCisgICAgICAgIC8qCisgICAgICAgICAqIGxvYWQgYWRkdGlvbmFsIHN0YXRpc3RpY3MgZGVmaW5lZCBieSBSRkMgNDI5MworICAgICAgICAgKiBBcyB0aGVzZSBhcmUgc3VwcG9ydGVkIGxpbnV4IDIuNi4yMiBvciBsYXRlciwgaXQgaXMgbm8gcHJvYmxlbQorICAgICAgICAgKiBpZiBsb2FkaW5nIHRoZW0gYXJlIGZhaWxlZC4KKyAgICAgICAgICovCisgICAgICAgIF9hZGRpdGlvbmFsX3N5c3RlbXN0YXRzX3Y0KGVudHJ5LCBsb2FkX2ZsYWdzKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBhZGQgdG8gY29udGFpbmVyCkBAIC0yMTYsNDggKzI2NCwxMjIgQEAKICAgICByZXR1cm4gMDsKIH0KICAgICAKLSNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorI2RlZmluZSBJUF9FWFRfSEVBRCAiSXBFeHQ6Igogc3RhdGljIGludAotX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCitfYWRkaXRpb25hbF9zeXN0ZW1zdGF0c192NChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KiBlbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MpCiB7CiAgICAgRklMRSAgICAgICAgICAgKmRldmluOwogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOwotICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAqc3RhdHMsICpzdGFydCA9IGxpbmU7Ci0gICAgaW50ICAgICAgICAgICAgIGxlbiwgcmM7Ci0gICAgdWludG1heF90ICAgICAgIHNjYW5fdmFsOwotICAgIGNvbnN0IGNoYXIgICAgICpmaWxlbmFtZSA9ICIvcHJvYy9uZXQvc25tcDYiOwotICAgIHN0YXRpYyBpbnQgICAgICB3YXJuZWRfb3BlbiA9IDA7CisgICAgaW50ICAgICAgICAgICAgIHNjYW5fY291bnQ7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHNjYW5fdmFsc1sxMl07CisgICAgaW50ICAgICAgICAgICAgIHJldHZhbCA9IDA7CiAKLSAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lcjphcmNoIiwgImxvYWQgdjYgKGZsYWdzICV1KVxuIiwKLSAgICAgICAgICAgICAgICBsb2FkX2ZsYWdzKSk7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsCisgICAgICAgICAgICAgICAgImxvYWQgYWRkdGlvbmFsIHY0IChmbGFncyAldSlcbiIsIGxvYWRfZmxhZ3MpKTsKIAotICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lciAhPSBOVUxMKTsgLyogbG9hZCBmdW5jdGlvbiBzaG91bGRhIGNoZWNrZWQgdGhpcyAqLwotCi0gICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMik7Ci0gICAgaWYoTlVMTCA9PSBlbnRyeSkKLSAgICAgICAgcmV0dXJuIC0zOwotICAgIAotICAgIC8qCi0gICAgICogdHJ5IHRvIG9wZW4gZmlsZS4gSWYgd2UgY2FuJ3QsIHRoYXQncyBvayAtIG1heWJlIHRoZSBtb2R1bGUgaGFzbid0Ci0gICAgICogYmVlbiBsb2FkZWQgeWV0LgotICAgICAqLwotICAgIGlmICghKGRldmluID0gZm9wZW4oZmlsZW5hbWUsICJyIikpKSB7CisgICAgaWYgKCEoZGV2aW4gPSBmb3BlbigiL3Byb2MvbmV0L25ldHN0YXQiLCAiciIpKSkgewogICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKLSAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBsb2FkIFN5c3RlbXN0YXRzIFRhYmxlIChsaW51eDEpXG4iKSk7Ci0gICAgICAgIGlmKCF3YXJuZWRfb3BlbikgewotICAgICAgICAgICAgKyt3YXJuZWRfb3BlbjsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAlcyAuLi5cbiIsIGZpbGVuYW1lKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKGVudHJ5KTsKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgICAgICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvbmV0c3RhdFxuIikpOworICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsImNhbm5vdCBvcGVuIC9wcm9jL25ldC9uZXRzdGF0XG4iKSk7CisgICAgICAgIHJldHVybiAtMjsKICAgICB9CiAKICAgICAvKgotICAgICAqIFRoaXMgZmlsZSBwcm92aWRlcyB0aGUgc3RhdGlzdGljcyBmb3IgZWFjaCBzeXN0ZW1zdGF0cy4KKyAgICAgKiBHZXQgaGVhZGVyIGFuZCBzdGF0IGxpbmVzCisgICAgICovCisgICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZGV2aW4pKSB7CisgICAgICAgIGlmIChzdHJuY21wKElQX0VYVF9IRUFELCBsaW5lLCBzaXplb2YoSVBfRVhUX0hFQUQpIC0gMSkgPT0gMCkgeworICAgICAgICAgICAgLyogbmV4dCBsaW5lIHNob3VsZCBpbmNsdWRlcyBJUHY0IGFkZHRpb25hbCBzdGF0aXN0aWNzICovCisgICAgICAgICAgICBpZiAoKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgZGV2aW4pKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RybmNtcChJUF9FWFRfSEVBRCwgbGluZSwgc2l6ZW9mKElQX0VYVF9IRUFEKSAtIDEpICE9IDApIHsKKyAgICAgICAgICAgICAgICByZXR2YWwgPSAtNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWVtc2V0KHNjYW5fdmFscywgMHgwLCBzaXplb2Yoc2Nhbl92YWxzKSk7CisgICAgICAgICAgICBzY2FuX2NvdW50ID0gc3NjYW5mKGxpbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlKnMiICAgLyogaWdub3JlIGBJcEV4dDonICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSAlbGx1ICVsbHUgJWxsdSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbMF0sICZzY2FuX3ZhbHNbMV0sICZzY2FuX3ZhbHNbMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbM10sICZzY2FuX3ZhbHNbNF0sICZzY2FuX3ZhbHNbNV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbNl0sICZzY2FuX3ZhbHNbN10sICZzY2FuX3ZhbHNbOF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzY2FuX3ZhbHNbOV0sICZzY2FuX3ZhbHNbMTBdLCAmc2Nhbl92YWxzWzExXSk7CisgICAgICAgICAgICBpZiAoc2Nhbl9jb3VudCA8IDYpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHNjYW5uaW5nIGFkZHRpb25hbCBzeXN0ZW1zdGF0cyBkYXRhIgorICAgICAgICAgICAgICAgICAgICAgICAgIihtaW5pbXVtIGV4cGVjdGVkICVkLCBnb3QgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgNiwgc2Nhbl9jb3VudCk7CisgICAgICAgICAgICAgICAgcmV0dmFsID0gLTQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXMubG93ICAgID0gc2Nhbl92YWxzWzBdICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTm9Sb3V0ZXMuaGlnaCAgID0gc2Nhbl92YWxzWzBdID4+IDMyOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkluVHJ1bmNhdGVkUGt0cyAgICAgPSBzY2FuX3ZhbHNbMV07CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3cgICA9IHNjYW5fdmFsc1syXSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0UGt0cy5oaWdoICA9IHNjYW5fdmFsc1syXSA+PiAzMjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgID0gc2Nhbl92YWxzWzNdICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5oaWdoID0gc2Nhbl92YWxzWzNdID4+IDMyOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93ICAgPSBzY2FuX3ZhbHNbNF0gJiAweGZmZmZmZmZmOworICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5CY2FzdFBrdHMuaGlnaCAgPSBzY2FuX3ZhbHNbNF0gPj4gMzI7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMubG93ICA9IHNjYW5fdmFsc1s1XSAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsc1s1XSA+PiAzMjsKKworICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSA9IDE7CisgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10gPSAxOworICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10gPSAxOworCSAgICBpZiAoc2Nhbl9jb3VudCA+PSAxMikgeworCQllbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5sb3cgICAgICAgID0gc2Nhbl92YWxzWzZdICYgMHhmZmZmZmZmZjsKKwkJZW50cnktPnN0YXRzLkhDSW5PY3RldHMuaGlnaCAgICAgICA9IHNjYW5fdmFsc1s2XSA+PiAzMjsKKwkJZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdyAgICAgICA9IHNjYW5fdmFsc1s3XSAmIDB4ZmZmZmZmZmY7CisJCWVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5oaWdoICAgICAgPSBzY2FuX3ZhbHNbN10gPj4gMzI7CisJCWVudHJ5LT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93ICAgPSBzY2FuX3ZhbHNbOF0gJiAweGZmZmZmZmZmOworCQllbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmhpZ2ggID0gc2Nhbl92YWxzWzhdID4+IDMyOworCQllbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3cgID0gc2Nhbl92YWxzWzldICYgMHhmZmZmZmZmZjsKKwkJZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMuaGlnaCA9IHNjYW5fdmFsc1s5XSA+PiAzMjsKKwkJLyogMTAgYW5kIDExIGFyZSBJbi9PdXRCY2FzdE9jdGV0cyAqLworCQllbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdID0gMTsKKwkJZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10gPSAxOworCQllbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUU10gPSAxOworCQllbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFNdID0gMTsKKwkgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgZmNsb3NlKGRldmluKTsKKworICAgIGlmIChyZXR2YWwgPCAwKQorICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgIi9wcm9jL25ldC9uZXRzdGF0IGRvZXMgbm90IGluY2x1ZGUgYWRkdGlvbmFsIHN0YXRzXG4iKSk7CisKKyAgICByZXR1cm4gcmV0dmFsOworfQorICAgCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKworLyoKKyAqIExvYWQgb25lIC9wcm9jL25ldC9zbm1wNiAtIGxpa2UgZmlsZSAoZS5nLiAvcHJvYy9uZXQvZGV2X3NubXA2KQorICovIAorc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnksIEZJTEUgKmRldmluKQoreworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICpzdGF0cywgKnN0YXJ0ID0gbGluZTsKKyAgICBpbnQgICAgICAgICAgICAgbGVuLCByYzsKKyAgICB1aW50bWF4X3QgICAgICAgc2Nhbl92YWw7CisKKyAgICAvKgogICAgICAqIFJlYWQgaW4gZWFjaCBsaW5lIGluIHR1cm4sIGlzb2xhdGUgdGhlIHN5c3RlbXN0YXRzIG5hbWUKICAgICAgKiAgIGFuZCByZXRyaWV2ZSAob3IgY3JlYXRlKSB0aGUgY29ycmVzcG9uZGluZyBkYXRhIHN0cnVjdHVyZS4KICAgICAgKi8KKyAgICByYyA9IDA7CiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgc3RhcnQgPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGRldmluKTsKICAgICAgICAgaWYgKE5VTEwgPT0gc3RhcnQpCkBAIC0yODcsNzcgKzQwOSwxMjMgQEAKICAgICAgICAgICogICAgICBkYXRhIHN0cnVjdHVyZSBhY2NvcmRpbmdseS4KICAgICAgICAgICovCiAgICAgICAgIHNjYW5fdmFsID0gYXRvbGwoc3RhdHMpOwotICAgICAgICBpZiAoMCA9PSBzY2FuX3ZhbCkKLSAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHJjID0gMDsKICAgICAgICAgaWYgKCdJJyA9PSBsaW5lWzNdKSB7IC8qIEluICovCiAgICAgICAgICAgICBpZiAoJ0EnID09IGxpbmVbNV0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSW5BZGRyRXJyb3JzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ0QnID09IGxpbmVbNV0pIHsKICAgICAgICAgICAgICAgICBpZiAoJ2UnID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdpJyA9PSBsaW5lWzZdKQorICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ2knID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluRGlzY2FyZHMgPSBzY2FuX3ZhbDsKLSAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdIJyA9PSBsaW5lWzVdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluSGRyRXJyb3JzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTScgPT0gbGluZVs1XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgIGlmICgnUCcgPT0gbGluZVsxMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzEwXSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RPY3RldHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUU10gPSAxOworICAgICAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdOJyA9PSBsaW5lWzVdKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkluTm9Sb3V0ZXMgPSBzY2FuX3ZhbDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnUicgPT0gbGluZVs1XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOwogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdUJyA9PSBsaW5lWzVdKSB7CiAgICAgICAgICAgICAgICAgaWYgKCdyJyA9PSBsaW5lWzZdKSB7CiAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JblRydW5jYXRlZFBrdHMgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVFJVTkNBVEVEUEtUU10gPSAxOwogICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ28nID09IGxpbmVbNl0pCiAgICAgICAgICAgICAgICAgICAgIDsgLyogVG9vQmlnIGlzbid0IGluIHRoZSBNSUIsIHNvIGlnbm9yZSBpdCAqLwogICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnVScgPT0gbGluZVs1XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBzY2FuX3ZhbDsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVs1XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ0luT2N0ZXRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5oaWdoID0gc2Nhbl92YWwgID4+IDMyOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk9DVEVUU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgcmMgPSAxOwogICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzNdKSB7IC8qIE91dCAqLwogICAgICAgICAgICAgaWYgKCdEJyA9PSBsaW5lWzZdKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dERpc2NhcmRzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ0YnID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnTScgPT0gbGluZVs2XSkgewotICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBpZiAoJ1AnID09IGxpbmVbMTFdKSB7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5oaWdoID0gc2Nhbl92YWwgPj4gMzI7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVFBLVFNdID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzExXSkgeworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSA9IDE7CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIHJjID0gLTE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdOJyA9PSBsaW5lWzZdKSB7Ci0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dE5vUm91dGVzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoJ1InID09IGxpbmVbNl0pIHsKICAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICgnTycgPT0gbGluZVs2XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUT0NURVRTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoJ1InID09IGxpbmVbM10pIHsgLyogUmVhc20gKi8KICAgICAgICAgICAgIGlmICgnRicgPT0gbGluZVs4XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5SZWFzbUZhaWxzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdPJyA9PSBsaW5lWzhdKSB7CiAgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10gPSAxOwogICAgICAgICAgICAgfSBlbHNlIGlmICgnUicgPT0gbGluZVs4XSkgewogICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gc2Nhbl92YWw7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSA9IDE7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKCdUJyA9PSBsaW5lWzhdKSB7CiAgICAgICAgICAgICAgICAgOyAvKiBubyBtaWIgZW50cnkgZm9yIHJlYXNtIHRpbWVvdXQgKi8KICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIHJjID0gMTsKICAgICAgICAgfSBlbHNlIGlmICgnRicgPT0gbGluZVszXSkgeyAvKiBGcmFnICovCi0gICAgICAgICAgICBpZiAoJ0MnID09IGxpbmVbN10pCi0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdDcmVhdGVzID0gc2Nhbl92YWw7Ci0gICAgICAgICAgICBlbHNlIGlmICgnTycgPT0gbGluZVs3XSkKLSAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuT3V0RnJhZ09LcyA9IHNjYW5fdmFsOwotICAgICAgICAgICAgZWxzZSBpZiAoJ0YnID09IGxpbmVbN10pCi0gICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLk91dEZyYWdGYWlscyA9IHNjYW5fdmFsOwotICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgaWYgKCdDJyA9PSBsaW5lWzddKSB7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gc2Nhbl92YWwgJiAweGZmZmZmZmZmOworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoJ08nID09IGxpbmVbN10pIHsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgICAgICAgICAgfSBlbHNlIGlmICgnRicgPT0gbGluZVs3XSkgeworICAgICAgICAgICAgICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgICAgICAgICAgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICByYyA9IDE7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgcmMgPSAxOwpAQCAtMzY1LDYgKzUzMyw0MyBAQAogICAgICAgICBpZiAocmMpCiAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwgInVua25vd24gc3RhdCAlc1xuIiwgbGluZSkpOwogICAgIH0KKyAgICAvKgorICAgICAqIExldCBEaXNjb250aW51aXR5VGltZSBhbmQgUmVmcmVzaFJhdGUgYWN0aXZlCisgICAgICovCisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIGxvYWQgaXBTeXN0ZW1TdGF0c1RhYmxlIGZvciBpcHY2IGVudHJpZXMKKyAqLworc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgRklMRSAqZGV2aW47CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgICAgICpmaWxlbmFtZSA9ICIvcHJvYy9uZXQvc25tcDYiOworICAgIGludCByYyA9IDA7CisgICAgCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMiwgMCwKKyAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NiIpOworICAgIGlmKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMzsKKyAgICAKKyAgICAvKgorICAgICAqIHRyeSB0byBvcGVuIGZpbGUuIElmIHdlIGNhbid0LCB0aGF0J3Mgb2sgLSBtYXliZSB0aGUgbW9kdWxlIGhhc24ndAorICAgICAqIGJlZW4gbG9hZGVkIHlldC4KKyAgICAgKi8KKyAgICBpZiAoIShkZXZpbiA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzIiwKKyAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGxvYWQgU3lzdGVtc3RhdHMgVGFibGUgKGxpbnV4MSksIGNhbm5vdCBvcGVuICVzXG4iLAorICAgICAgICAgICAgICAgIGZpbGVuYW1lKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICByYyA9IF9zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUoZW50cnksIGRldmluKTsKIAogICAgIGZjbG9zZShkZXZpbik7CiAKQEAgLTM4MCw0ICs1ODUsMTE4IEBACiAKICAgICByZXR1cm4gcmM7CiB9CisKKyNkZWZpbmUgREVWX1NOTVA2X0RJUk5BTUUgICAiL3Byb2MvbmV0L2Rldl9zbm1wNiIKKyNkZWZpbmUgSUZJTkRFWF9MSU5FICAgICAgICAiaWZJbmRleCIKKyNkZWZpbmUgREVWX0ZJTEVOQU1FX0xFTiAgICA2NAorCisvKgorICogbG9hZCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzCisgKi8KK3N0YXRpYyBpbnQgCitfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgKmRldl9zbm1wNl9kaXI7CisgICAgc3RydWN0IGRpcmVudCAgKmRldl9zbm1wNl9lbnRyeTsKKyAgICBjaGFyICAgICAgICAgICBkZXZfZmlsZW5hbWVbREVWX0ZJTEVOQU1FX0xFTl07CisgICAgRklMRSAgICAgICAgICAgKmRldmluOworICAgIGNoYXIgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgKnN0YXJ0ID0gbGluZTsKKyAgICBjaGFyICAgICAgICAgICAqc2Nhbl9zdHI7CisgICAgdWludG1heF90ICAgICAgIHNjYW5fdmFsOworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgIAorICAgIC8qCisgICAgICogdHJ5IHRvIG9wZW4gL3Byb2MvbmV0L2Rldl9zbm1wNiBkaXJlY3RvcnkuIElmIHdlIGNhbid0LCB0aGF0JyBvayAtCisgICAgICogbWF5YmUgaXQgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBydW5uaW5nIGtlcm5lbC4KKyAgICAgKi8KKyAgICBpZiAoKGRldl9zbm1wNl9kaXIgPSBvcGVuZGlyKERFVl9TTk1QNl9ESVJOQU1FKSkgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmlmc3RhdHMiLAorICAgICAgICAiRmFpbGVkIHRvIGxvYWQgSVB2NiBJZlN0YXRzIFRhYmxlIChsaW51eClcbiIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogUmVhZCBlYWNoIHBlciBpbnRlcmZhY2Ugc3RhdGlzdGljcyBwcm9jIGZpbGUKKyAgICAgKi8KKyAgICB3aGlsZSAoKGRldl9zbm1wNl9lbnRyeSA9IHJlYWRkaXIoZGV2X3NubXA2X2RpcikpICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lWzBdID09ICcuJykKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgIAorICAgICAgICBpZiAoc25wcmludGYoZGV2X2ZpbGVuYW1lLCBERVZfRklMRU5BTUVfTEVOLCAiJXMvJXMiLCBERVZfU05NUDZfRElSTkFNRSwKKyAgICAgICAgICAgICAgICBkZXZfc25tcDZfZW50cnktPmRfbmFtZSkgPiBERVZfRklMRU5BTUVfTEVOKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiSW50ZXJmYWNlIG5hbWUgJXMgaXMgdG9vIGxvbmdcbiIsCisgICAgICAgICAgICAgICAgICAgIGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgICAgIGlmIChOVUxMID09IChkZXZpbiA9IGZvcGVuKGRldl9maWxlbmFtZSwgInIiKSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiAlc1xuIiwgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIElmIGEgc3RhdCBmaWxlIG5hbWUgaXMgbWFkZSBvZiBkaWdpdHMsIHRoZSBuYW1lIGlzIGludGVyZmFjZSBpbmRleC4KKyAgICAgICAgICogSWYgaXQgaXMgYW4gaW50ZXJmYWNlIG5hbWUsIHRoZSBmaWxlIGluY2x1ZGVzIGEgbGluZSBsYWJlbGVkIGlmSW5kZXguCisgICAgICAgICAqLworICAgICAgICBpZiAoaXNkaWdpdChkZXZfc25tcDZfZW50cnktPmRfbmFtZVswXSkpIHsKKyAgICAgICAgICAgIHNjYW5fdmFsID0gc3RydG91bGwoZGV2X3NubXA2X2VudHJ5LT5kX25hbWUsIE5VTEwsIDApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKE5VTEwgPT0gKHN0YXJ0ID0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBkZXZpbikpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGRvZXNuJ3QgaW5jbHVkZSBhbnkgbGluZXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICBpZiAoMCAhPSBzdHJuY21wKHN0YXJ0LCBJRklOREVYX0xJTkUsIDcpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGRvZXNuJ3QgaW5jbHVkZSBpZkluZGV4IGxpbmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzY2FuX3N0ciA9IHN0cnJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHNjYW5fc3RyKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiVzIGlzIHdyb25nIGZvcm1hdCIsIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNjYW5fdmFsID0gc3RydG91bGwoc2Nhbl9zdHIsIE5VTEwsIDApOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgyLCBzY2FuX3ZhbCwKKyAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGUuaXB2NiIpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgY2xvc2VkaXIoZGV2X3NubXA2X2Rpcik7CisgICAgICAgICAgICByZXR1cm4gLTM7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIF9zeXN0ZW1zdGF0c192Nl9sb2FkX2ZpbGUoZW50cnksIGRldmluKTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICB9CisgICAgY2xvc2VkaXIoZGV2X3NubXA2X2Rpcik7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBCYXNlZCBvbiBsb2FkX2ZsYWdzLCBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBvciBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzLiAKKyAqLworc3RhdGljIGludAorX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAldSlcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiBsb2FkIGlwSWZTdGF0c1RhYmxlICovCisgICAgICAgIHJldHVybiBfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgKi8KKyAgICAgICAgcmV0dXJuIF9zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfQorfQogI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzX3NvbGFyaXMyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJlYzQ5NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zb2xhcmlzMi5jCkBAIC0wLDAgKzEsMjEzIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg+CisKKyNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCisKK3N0YXRpYyBpbnQgX3N5c3RlbXN0YXRzKG1pYmdyb3VwX2UsIG5ldHNubXBfY29udGFpbmVyICosIHVfaW50KTsKK3N0YXRpYyB2b2lkIF9hZGRfaXBzdGF0cyhtaWIyX2lwSWZTdGF0c0VudHJ5X3QgKiwgbWliMl9pcElmU3RhdHNFbnRyeV90ICopOworc3RhdGljIGludCBfaW5zZXJ0X2VudHJ5KG5ldHNubXBfY29udGFpbmVyICosIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqKTsKKwordm9pZAorbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfYXJjaF9pbml0KHZvaWQpCit7CisgICAgaW5pdF9rZXJuZWxfc3Vub3M1KCk7Cit9CisKKy8qCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgY29udGFpbmVyIGVycm9yCisgKiBAcmV0dmFsIC0yIGNvdWxkIG5vdCBjcmVhdGUgZW50cnkgKHByb2JhYmx5IG1hbGxvYykKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzsgCisgICAgCisgICAgaWYgKGNvbnRhaW5lciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gKC0xKTsKKworICAgIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFKQorCXJldHVybiAwOyAvKiB3ZSBkbyBub3Qgc3VwcG9ydCBpcElmU3RhdHNUYWJsZSB5ZXQgKi8KKworICAgIGlmICgocmMgPSBfc3lzdGVtc3RhdHMoTUlCX0lQX1RSQUZGSUNfU1RBVFMsIGNvbnRhaW5lciwgbG9hZF9mbGFncykpIDwgMCkKKyAgICAgICAgcmV0dXJuIChyYyk7CisjaWYgZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgIGlmICgocmMgPSBfc3lzdGVtc3RhdHMoTUlCX0lQNiwgY29udGFpbmVyLCBsb2FkX2ZsYWdzKSkgPCAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCisgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKKyAgICAgICAgcmV0dXJuIChyYyk7CisgICAgfQorI2VuZGlmCisgICAgcmV0dXJuICgwKTsKK30KKworLyoKKyAqIEByZXR2YWwgMCBzdWNjZXNzIAorICogQHJldHZhbCA8MCBlcnJvcgorICovCitzdGF0aWMgaW50Citfc3lzdGVtc3RhdHMobWliZ3JvdXBfZSBtaWIsIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgbWliMl9pcElmU3RhdHNFbnRyeV90IGlwZSwgaXB0b3Q7CisgICAgcmVxX2UgcmVxID0gR0VUX0ZJUlNUOworICAgIGludCBpcHZlcnNpb24gPSAobWliID09IE1JQl9JUDYpID8gTUlCMl9JTkVUQUREUkVTU1RZUEVfaXB2NiA6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNSUIyX0lORVRBRERSRVNTVFlQRV9pcHY0OworICAgIG1lbXNldCgmaXB0b3QsICdcMCcsIHNpemVvZihpcHRvdCkpOworCisgICAgd2hpbGUgKGdldE1pYnN0YXQobWliLCAmaXBlLCBzaXplb2YoaXBlKSwgcmVxLCAKKyAgICAgICAgICAgICAgICAgICAgICAmR2V0X2V2ZXJ5dGhpbmcsIE5VTEwpID09IDApIHsgCisgICAgICAgIHJlcSA9IEdFVF9ORVhUOworICAgICAgICBuZXRzbm1wX2Fzc2VydChpcGUuaXBJZlN0YXRzSVBWZXJzaW9uID09IGlwdmVyc2lvbik7CisgICAgICAgIF9hZGRfaXBzdGF0cygmaXB0b3QsICZpcGUpOworICAgIH0KKyAgICBpcHRvdC5pcElmU3RhdHNJUFZlcnNpb24gPSBpcHZlcnNpb247CisgICAgcmV0dXJuIF9pbnNlcnRfZW50cnkoY29udGFpbmVyLCAmaXB0b3QpOworfQorCitzdGF0aWMgdm9pZAorX2FkZF9pcHN0YXRzKG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqbzEsIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqbzIpCit7CisgICAgbzEtPmlwSWZTdGF0c0luSGRyRXJyb3JzICs9IG8yLT5pcElmU3RhdHNJbkhkckVycm9yczsKKyAgICBvMS0+aXBJZlN0YXRzSW5Ub29CaWdFcnJvcnMgKz0gbzItPmlwSWZTdGF0c0luVG9vQmlnRXJyb3JzOworICAgIG8xLT5pcElmU3RhdHNJbk5vUm91dGVzICs9IG8yLT5pcElmU3RhdHNJbk5vUm91dGVzOworICAgIG8xLT5pcElmU3RhdHNJbkFkZHJFcnJvcnMgKz0gbzItPmlwSWZTdGF0c0luQWRkckVycm9yczsKKyAgICBvMS0+aXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zICs9IG8yLT5pcElmU3RhdHNJblVua25vd25Qcm90b3M7CisgICAgbzEtPmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cyArPSBvMi0+aXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzOworICAgIG8xLT5pcElmU3RhdHNJbkRpc2NhcmRzICs9IG8yLT5pcElmU3RhdHNJbkRpc2NhcmRzOworICAgIG8xLT5pcElmU3RhdHNPdXREaXNjYXJkcyArPSBvMi0+aXBJZlN0YXRzT3V0RGlzY2FyZHM7CisgICAgbzEtPmlwSWZTdGF0c091dEZyYWdPS3MgKz0gbzItPmlwSWZTdGF0c091dEZyYWdPS3M7CisgICAgbzEtPmlwSWZTdGF0c091dEZyYWdGYWlscyArPSBvMi0+aXBJZlN0YXRzT3V0RnJhZ0ZhaWxzOworICAgIG8xLT5pcElmU3RhdHNPdXRGcmFnQ3JlYXRlcyArPSBvMi0+aXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXM7CisgICAgbzEtPmlwSWZTdGF0c1JlYXNtUmVxZHMgKz0gbzItPmlwSWZTdGF0c1JlYXNtUmVxZHM7CisgICAgbzEtPmlwSWZTdGF0c1JlYXNtT0tzICs9IG8yLT5pcElmU3RhdHNSZWFzbU9LczsKKyAgICBvMS0+aXBJZlN0YXRzUmVhc21GYWlscyArPSBvMi0+aXBJZlN0YXRzUmVhc21GYWlsczsKKyAgICBvMS0+aXBJZlN0YXRzT3V0Tm9Sb3V0ZXMgKz0gbzItPmlwSWZTdGF0c091dE5vUm91dGVzOworICAgIG8xLT5pcElmU3RhdHNSZWFzbUR1cGxpY2F0ZXMgKz0gbzItPmlwSWZTdGF0c1JlYXNtRHVwbGljYXRlczsKKyAgICBvMS0+aXBJZlN0YXRzUmVhc21QYXJ0RHVwcyArPSBvMi0+aXBJZlN0YXRzUmVhc21QYXJ0RHVwczsKKyAgICBvMS0+aXBJZlN0YXRzRm9yd1Byb2hpYml0cyArPSBvMi0+aXBJZlN0YXRzRm9yd1Byb2hpYml0czsKKyAgICBvMS0+dWRwSW5Da3N1bUVycnMgKz0gbzItPnVkcEluQ2tzdW1FcnJzOworICAgIG8xLT51ZHBJbk92ZXJmbG93cyArPSBvMi0+dWRwSW5PdmVyZmxvd3M7CisgICAgbzEtPnJhd2lwSW5PdmVyZmxvd3MgKz0gbzItPnJhd2lwSW5PdmVyZmxvd3M7CisgICAgbzEtPmlwSWZTdGF0c0luV3JvbmdJUFZlcnNpb24gKz0gbzItPmlwSWZTdGF0c0luV3JvbmdJUFZlcnNpb247CisgICAgbzEtPmlwSWZTdGF0c091dFdyb25nSVBWZXJzaW9uICs9IG8yLT5pcElmU3RhdHNPdXRXcm9uZ0lQVmVyc2lvbjsKKyAgICBvMS0+aXBJZlN0YXRzT3V0U3dpdGNoSVBWZXJzaW9uICs9IG8yLT5pcElmU3RhdHNPdXRTd2l0Y2hJUFZlcnNpb247CisgICAgbzEtPmlwSWZTdGF0c0hDSW5SZWNlaXZlcyArPSBvMi0+aXBJZlN0YXRzSENJblJlY2VpdmVzOworICAgIG8xLT5pcElmU3RhdHNIQ0luT2N0ZXRzICs9IG8yLT5pcElmU3RhdHNIQ0luT2N0ZXRzOworICAgIG8xLT5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyArPSBvMi0+aXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXM7CisgICAgbzEtPmlwSWZTdGF0c0hDSW5EZWxpdmVycyArPSBvMi0+aXBJZlN0YXRzSENJbkRlbGl2ZXJzOworICAgIG8xLT5pcElmU3RhdHNIQ091dFJlcXVlc3RzICs9IG8yLT5pcElmU3RhdHNIQ091dFJlcXVlc3RzOworICAgIG8xLT5pcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgKz0gbzItPmlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtczsKKyAgICBvMS0+aXBJZlN0YXRzT3V0RnJhZ1JlcWRzICs9IG8yLT5pcElmU3RhdHNPdXRGcmFnUmVxZHM7CisgICAgbzEtPmlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzICs9IG8yLT5pcElmU3RhdHNIQ091dFRyYW5zbWl0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRPY3RldHMgKz0gbzItPmlwSWZTdGF0c0hDT3V0T2N0ZXRzOworICAgIG8xLT5pcElmU3RhdHNIQ0luTWNhc3RQa3RzICs9IG8yLT5pcElmU3RhdHNIQ0luTWNhc3RQa3RzOworICAgIG8xLT5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgKz0gbzItPmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0czsKKyAgICBvMS0+aXBJZlN0YXRzSENPdXRNY2FzdFBrdHMgKz0gbzItPmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzOworICAgIG8xLT5pcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzICs9IG8yLT5pcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzOworICAgIG8xLT5pcElmU3RhdHNIQ0luQmNhc3RQa3RzICs9IG8yLT5pcElmU3RhdHNIQ0luQmNhc3RQa3RzOworICAgIG8xLT5pcElmU3RhdHNIQ091dEJjYXN0UGt0cyArPSBvMi0+aXBJZlN0YXRzSENPdXRCY2FzdFBrdHM7CisgICAgbzEtPmlwc2VjSW5TdWNjZWVkZWQgKz0gbzItPmlwc2VjSW5TdWNjZWVkZWQ7CisgICAgbzEtPmlwc2VjSW5GYWlsZWQgKz0gbzItPmlwc2VjSW5GYWlsZWQ7CisgICAgbzEtPmlwSW5Da3N1bUVycnMgKz0gbzItPmlwSW5Da3N1bUVycnM7CisgICAgbzEtPnRjcEluRXJycyArPSBvMi0+dGNwSW5FcnJzOworICAgIG8xLT51ZHBOb1BvcnRzICs9IG8yLT51ZHBOb1BvcnRzOworfQorCisvKgorICogQHJldHZhbCAwIGVudHJ5IHdhcyBzdWNjZXNzZnVsbHkgaW5zZXJ0ZWQgaW4gdGhlIGNvbnRhaW5lciAKKyAqIEByZXR2YWwgLTEgY29udGFpbmVyIGVycm9yCisgKiBAcmV0dmFsIC0yIG1lbW9yeSBhbGxvY2F0aW9uIGVycm9yCisgKi8KK3N0YXRpYyBpbnQgCitfaW5zZXJ0X2VudHJ5KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIG1pYjJfaXBJZlN0YXRzRW50cnlfdCAqaXBlKQoreworICAgIGludCBpOworICAgIAorICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVwID0KKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKGlwZS0+aXBJZlN0YXRzSVBWZXJzaW9uLCAwLAorICAgICAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUiKTsgCisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmFyY2giLCAiaW5zZXJ0IGVudHJ5IGZvciB2JWRcbiIsCisgICAgICAgICAgICAgICAgaXBlLT5pcElmU3RhdHNJUFZlcnNpb24pKTsgCisgICAgaWYgKGVwID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmFyY2giLCAiaW5zZXJ0IGZhaWxlZCAoYWxsb2MpIikpOworICAgICAgICByZXR1cm4gKC0yKTsKKyAgICB9CisKKyAgICBlcC0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5SZWNlaXZlcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ0luUmVjZWl2ZXMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDSW5PY3RldHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbk9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5PY3RldHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENJbk9jdGV0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSW5IZHJFcnJvcnMgPSBpcGUtPmlwSWZTdGF0c0luSGRyRXJyb3JzOworICAgIGVwLT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBpcGUtPmlwSWZTdGF0c0luQWRkckVycm9yczsKKyAgICBlcC0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gaXBlLT5pcElmU3RhdHNJblVua25vd25Qcm90b3M7CisgICAgZXAtPnN0YXRzLkluVHJ1bmNhdGVkUGt0cyA9IGlwZS0+aXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzOworICAgIGVwLT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmhpZ2ggPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuUmVhc21SZXFkcyA9IGlwZS0+aXBJZlN0YXRzUmVhc21SZXFkczsgCisgICAgZXAtPnN0YXRzLlJlYXNtT0tzID0gaXBlLT5pcElmU3RhdHNSZWFzbU9LczsgCisgICAgZXAtPnN0YXRzLlJlYXNtRmFpbHMgPSBpcGUtPmlwSWZTdGF0c1JlYXNtRmFpbHM7IAorICAgIGVwLT5zdGF0cy5JbkRpc2NhcmRzID0gaXBlLT5pcElmU3RhdHNJbkRpc2NhcmRzOworICAgIGVwLT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbkRlbGl2ZXJzICYgMHhmZmZmZmZmZjsgCisgICAgZXAtPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENJbkRlbGl2ZXJzID4+IDMyOyAKKyAgICBlcC0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ091dFJlcXVlc3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRSZXF1ZXN0cyA+PiAzMjsgCisgICAgZXAtPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gaXBlLT5pcElmU3RhdHNPdXROb1JvdXRlcyAmIDB4ZmZmZmZmZmY7IAorICAgIGVwLT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSAwOworICAgIGVwLT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSAKKyAgICAgICAgaXBlLT5pcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gaXBlLT5pcElmU3RhdHNPdXREaXNjYXJkcyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IDA7IAorICAgIGVwLT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gaXBlLT5pcElmU3RhdHNPdXRGcmFnT0tzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSAwOworICAgIGVwLT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3cgPSBpcGUtPmlwSWZTdGF0c091dEZyYWdGYWlscyAmIDB4ZmZmZmZmZmY7IAorICAgIGVwLT5zdGF0cy5IQ091dEZyYWdGYWlscy5oaWdoID0gMDsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcGUtPmlwSWZTdGF0c091dEZyYWdDcmVhdGVzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5oaWdoID0gMDsKKyAgICBlcC0+c3RhdHMuSENPdXRUcmFuc21pdHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRUcmFuc21pdHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ091dFRyYW5zbWl0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENPdXRPY3RldHMubG93ID0gaXBlLT5pcElmU3RhdHNIQ091dE9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDT3V0T2N0ZXRzID4+IDMyOworICAgIGVwLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IGlwZS0+aXBJZlN0YXRzSENJbk1jYXN0UGt0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENJbk1jYXN0UGt0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5oaWdoID0gaXBlLT5pcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRNY2FzdFBrdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRNY2FzdFBrdHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93ID0gCisgICAgICAgIGlwZS0+aXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyAmIDB4ZmZmZmZmZmY7CisgICAgZXAtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyA+PiAzMjsKKyAgICBlcC0+c3RhdHMuSENJbkJjYXN0UGt0cy5sb3cgPSBpcGUtPmlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgJiAweGZmZmZmZmZmOworICAgIGVwLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmhpZ2ggPSBpcGUtPmlwSWZTdGF0c0hDSW5CY2FzdFBrdHMgPj4gMzI7CisgICAgZXAtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdyA9IAorICAgICAgICBpcGUtPmlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzICYgMHhmZmZmZmZmZjsKKyAgICBlcC0+c3RhdHMuSENPdXRCY2FzdFBrdHMuaGlnaCA9IGlwZS0+aXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgPj4gMzI7CisKKyAgICBmb3IgKGk9MDsgaTw9SVBTWVNURU1TVEFUU1RBQkxFX0xBU1Q7IGkrKykKKyAgICAgICAgZXAtPnN0YXRzLmNvbHVtbkF2YWlsW2ldID0gMTsKKyAgICAKKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVwKSA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmFyY2giLCAidW5hYmxlIHRvIGluc2VydCBlbnRyeSIpKTsgCisgICAgICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZXApOyAKKyAgICAgICAgcmV0dXJuICgtMSk7CisgICAgfQorICAgIHJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHNfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjYTE2ZAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0c19zeXNjdGwuYwpAQCAtMCwwICsxLDc5MSBAQAorLyoKKyAqICBpcFN5c3RlbVN0YXRzVGFibGUgYW5kIGlwSWZTdGF0c1RhYmxlIGludGVyZmFjZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQKKyAqCisgKiAkSWQkCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaD4KKworI2luY2x1ZGUgIi4uL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCIKKworI2lmIGRlZmluZWQoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjZGVmaW5lIF9LRVJORUwgMQorI2RlZmluZSBfSV9ERUZJTkVEX0tFUk5FTAorI2VuZGlmCisjaWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorCisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNpZiBIQVZFX05FVElORVQ2X0lQNl9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQ2L2lwNl92YXIuaD4KKyNlbmRpZgorI2lmbmRlZiBmcmVlYnNkNworI2luY2x1ZGUgPG5ldGluZXQ2L2luNl92YXIuaD4KKyNlbmRpZgorCisjaWZkZWYgZGFyd2luCisKKy8qIFRoaXMgc3RydWN0IGlzIGluIG5ldGluZXQ2L2lwNl92YXIuaCB3aGljaCBBcHBsZSBmb3Igb2JzY3VyZSByZWFzb25zCisgKiBkbyBub3QgZGlzdHJpYnV0ZSBhcyBwYXJ0IG9mIC91c3IvaW5jbHVkZSA6LSgKKyAqLworCitzdHJ1Y3QJaXA2c3RhdCB7CisJdV9xdWFkX3QgaXA2c190b3RhbDsJCS8qIHRvdGFsIHBhY2tldHMgcmVjZWl2ZWQgKi8KKwl1X3F1YWRfdCBpcDZzX3Rvb3Nob3J0OwkJLyogcGFja2V0IHRvbyBzaG9ydCAqLworCXVfcXVhZF90IGlwNnNfdG9vc21hbGw7CQkvKiBub3QgZW5vdWdoIGRhdGEgKi8KKwl1X3F1YWRfdCBpcDZzX2ZyYWdtZW50czsJLyogZnJhZ21lbnRzIHJlY2VpdmVkICovCisJdV9xdWFkX3QgaXA2c19mcmFnZHJvcHBlZDsJLyogZnJhZ3MgZHJvcHBlZChkdXBzLCBvdXQgb2Ygc3BhY2UpICovCisJdV9xdWFkX3QgaXA2c19mcmFndGltZW91dDsJLyogZnJhZ21lbnRzIHRpbWVkIG91dCAqLworCXVfcXVhZF90IGlwNnNfZnJhZ292ZXJmbG93OwkvKiBmcmFnbWVudHMgdGhhdCBleGNlZWRlZCBsaW1pdCAqLworCXVfcXVhZF90IGlwNnNfZm9yd2FyZDsJCS8qIHBhY2tldHMgZm9yd2FyZGVkICovCisJdV9xdWFkX3QgaXA2c19jYW50Zm9yd2FyZDsJLyogcGFja2V0cyByY3ZkIGZvciB1bnJlYWNoYWJsZSBkZXN0ICovCisJdV9xdWFkX3QgaXA2c19yZWRpcmVjdHNlbnQ7CS8qIHBhY2tldHMgZm9yd2FyZGVkIG9uIHNhbWUgbmV0ICovCisJdV9xdWFkX3QgaXA2c19kZWxpdmVyZWQ7CS8qIGRhdGFncmFtcyBkZWxpdmVyZWQgdG8gdXBwZXIgbGV2ZWwqLworCXVfcXVhZF90IGlwNnNfbG9jYWxvdXQ7CQkvKiB0b3RhbCBpcCBwYWNrZXRzIGdlbmVyYXRlZCBoZXJlICovCisJdV9xdWFkX3QgaXA2c19vZHJvcHBlZDsJCS8qIGxvc3QgcGFja2V0cyBkdWUgdG8gbm9idWZzLCBldGMuICovCisJdV9xdWFkX3QgaXA2c19yZWFzc2VtYmxlZDsJLyogdG90YWwgcGFja2V0cyByZWFzc2VtYmxlZCBvayAqLworCXVfcXVhZF90IGlwNnNfZnJhZ21lbnRlZDsJLyogZGF0YWdyYW1zIHN1Y2Vzc2Z1bGx5IGZyYWdtZW50ZWQgKi8KKwl1X3F1YWRfdCBpcDZzX29mcmFnbWVudHM7CS8qIG91dHB1dCBmcmFnbWVudHMgY3JlYXRlZCAqLworCXVfcXVhZF90IGlwNnNfY2FudGZyYWc7CQkvKiBkb24ndCBmcmFnbWVudCBmbGFnIHdhcyBzZXQsIGV0Yy4gKi8KKwl1X3F1YWRfdCBpcDZzX2JhZG9wdGlvbnM7CS8qIGVycm9yIGluIG9wdGlvbiBwcm9jZXNzaW5nICovCisJdV9xdWFkX3QgaXA2c19ub3JvdXRlOwkJLyogcGFja2V0cyBkaXNjYXJkZWQgZHVlIHRvIG5vIHJvdXRlICovCisJdV9xdWFkX3QgaXA2c19iYWR2ZXJzOwkJLyogaXA2IHZlcnNpb24gIT0gNiAqLworCXVfcXVhZF90IGlwNnNfcmF3b3V0OwkJLyogdG90YWwgcmF3IGlwIHBhY2tldHMgZ2VuZXJhdGVkICovCisJdV9xdWFkX3QgaXA2c19iYWRzY29wZTsJCS8qIHNjb3BlIGVycm9yICovCisJdV9xdWFkX3QgaXA2c19ub3RtZW1iZXI7CS8qIGRvbid0IGpvaW4gdGhpcyBtdWx0aWNhc3QgZ3JvdXAgKi8KKwl1X3F1YWRfdCBpcDZzX254dGhpc3RbMjU2XTsJLyogbmV4dCBoZWFkZXIgaGlzdG9yeSAqLworCXVfcXVhZF90IGlwNnNfbTE7CQkvKiBvbmUgbWJ1ZiAqLworCXVfcXVhZF90IGlwNnNfbTJtWzMyXTsJCS8qIHR3byBvciBtb3JlIG1idWYgKi8KKwl1X3F1YWRfdCBpcDZzX21leHQxOwkJLyogb25lIGV4dCBtYnVmICovCisJdV9xdWFkX3QgaXA2c19tZXh0Mm07CQkvKiB0d28gb3IgbW9yZSBleHQgbWJ1ZiAqLworCXVfcXVhZF90IGlwNnNfZXh0aGRydG9vbG9uZzsJLyogZXh0IGhkciBhcmUgbm90IGNvbnRpbnVvdXMgKi8KKwl1X3F1YWRfdCBpcDZzX25vZ2lmOwkJLyogbm8gbWF0Y2ggZ2lmIGZvdW5kICovCisJdV9xdWFkX3QgaXA2c190b29tYW55aGRyOwkvKiBkaXNjYXJkZWQgZHVlIHRvIHRvbyBtYW55IGhlYWRlcnMgKi8KKworCS8qCisJICogc3RhdGlzdGljcyBmb3IgaW1wcm92ZW1lbnQgb2YgdGhlIHNvdXJjZSBhZGRyZXNzIHNlbGVjdGlvbgorCSAqIGFsZ29yaXRobToKKwkgKiBYWFg6IGhhcmRjb2RlZCAxNiA9ICMgb2YgaXA2IG11bHRpY2FzdCBzY29wZSB0eXBlcyArIDEKKwkgKi8KKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhZGRyZXNzIHNlbGVjdGlvbiBmYWlscyAqLworCXVfcXVhZF90IGlwNnNfc291cmNlc19ub25lOworCS8qIG51bWJlciBvZiB0aW1lcyB0aGF0IGFuIGFkZHJlc3Mgb24gdGhlIG91dGdvaW5nIEkvRiBpcyBjaG9zZW4gKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfc2FtZWlmWzE2XTsKKwkvKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBhZGRyZXNzIG9uIGEgbm9uLW91dGdvaW5nIEkvRiBpcyBjaG9zZW4gKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfb3RoZXJpZlsxNl07CisJLyoKKwkgKiBudW1iZXIgb2YgdGltZXMgdGhhdCBhbiBhZGRyZXNzIHRoYXQgaGFzIHRoZSBzYW1lIHNjb3BlCisJICogZnJvbSB0aGUgZGVzdGluYXRpb24gaXMgY2hvc2VuLgorCSAqLworCXVfcXVhZF90IGlwNnNfc291cmNlc19zYW1lc2NvcGVbMTZdOworCS8qCisJICogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gYWRkcmVzcyB0aGF0IGhhcyBhIGRpZmZlcmVudCBzY29wZQorCSAqIGZyb20gdGhlIGRlc3RpbmF0aW9uIGlzIGNob3Nlbi4KKwkgKi8KKwl1X3F1YWRfdCBpcDZzX3NvdXJjZXNfb3RoZXJzY29wZVsxNl07CisJLyogbnVtYmVyIG9mIHRpbWVzIHRoYXQgYW4gZGVwcmVjYXRlZCBhZGRyZXNzIGlzIGNob3NlbiAqLworCXVfcXVhZF90IGlwNnNfc291cmNlc19kZXByZWNhdGVkWzE2XTsKKworCXVfcXVhZF90IGlwNnNfZm9yd2FyZF9jYWNoZWhpdDsKKwl1X3F1YWRfdCBpcDZzX2ZvcndhcmRfY2FjaGVtaXNzOworfTsKKworI2VuZGlmIC8qIGRhcndpbiovCisKK3N0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y0KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOworCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKK3N0YXRpYyBpbnQgX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgbmNwdXM7CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2FyY2hfaW5pdCh2b2lkKQoreworICAgIGludCAgICBuY3B1X21pYltdICA9IHsgQ1RMX0hXLCBIV19OQ1BVIH07CisgICAgc2l6ZV90IHNpeiA9IHNpemVvZihuY3B1cyk7CisgICAgaWYgKHN5c2N0bChuY3B1X21pYiwgMiwgJm5jcHVzLCAmc2l6LCBOVUxMLCAwKSA8IDApIHsKKwlzbm1wX2xvZ19wZXJyb3IoImh3Lm5jcHUiKTsKKyAgICAgICAgbmNwdXMgPSAxOworICAgIH0KK30KKworLyoKKyAqCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgbm8gY29udGFpbmVyIHNwZWNpZmllZAorICogQHJldHZhbCAtMiBjb3VsZCBub3Qgb3BlbiBmaWxlCisgKiBAcmV0dmFsIC0zIGNvdWxkIG5vdCBjcmVhdGUgZW50cnkgKHByb2JhYmx5IG1hbGxvYykKKyAqIEByZXR2YWwgLTQgZmlsZSBmb3JtYXQgZXJyb3IKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfYXJjaF9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIGludCByYzE7CisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICBpbnQgcmMyOworI2VuZGlmCisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc19zeXN0ZW1zdGF0c19cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIAorICAgIC8qCisgICAgICogbG9hZCB2NCBhbmQgdjYgc3RhdHMuIEV2ZW4gaWYgb25lIGZhaWxzLCB0cnkgdGhlIG90aGVyLgorICAgICAqIElmIHRoZXkgaGF2ZSB0aGUgc2FtZSByYywgcmV0dXJuIGl0LiBpZiB0aGUgZGlmZmVyLCByZXR1cm4KKyAgICAgKiB0aGUgc21hbGxlciBvbmUuIE5vIGxvZyBtZXNzYWdlcywgc2luY2UgZWFjaCBpbmRpdmlkdWFsIGZ1bmN0aW9uCisgICAgICogd291bGQgaGF2ZSBsb2dnZWQgaXRzIG93biBtZXNzYWdlLgorICAgICAqLworICAgIHJjMSA9IF9zeXN0ZW1zdGF0c192NChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworI2lmIGRlZmluZWQgKE5FVFNOTVBfRU5BQkxFX0lQVjYpCisgICAgcmMyID0gX3N5c3RlbXN0YXRzX3Y2KGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgaWYgKChyYzEgPT0gcmMyKSB8fCAocmMxIDwgcmMyKSkKKyAgICAgICAgcmV0dXJuIHJjMTsKKyAgICAgICAgCisgICAgcmV0dXJuIHJjMjsKKyNlbHNlCisgICAgcmV0dXJuIHJjMTsKKyNlbmRpZgorfQorCisvKgorICogQmFzZWQgb24gbG9hZF9mbGFncywgbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgb3IgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjQgZW50cmllcy4gCisgKi8KKyNpZmRlZiBfX05ldEJTRF9fCisKK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyAgICB1aW50NjRfdCBpcHN0YXRbSVBfTlNUQVRTXTsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGlwc3RhdCk7CisKKyAgICBpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5pcC5zdGF0cyIsICZpcHN0YXQsICZsZW4sIE5VTEwsIDApIDwgMCkgeworCU5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgIkNhbm5vdCBzeXNjdGxieW5hbWUgbmV0LmluZXQuaXAuc3RhdHNcbiIpKTsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY0IChmbGFncyAleClcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiB3ZSBkbyBub3Qgc3VwcG9ydCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NCAqLworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgxLCAwLAorCQkiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjQiKTsKKyAgICBpZihOVUxMID09IGVudHJ5KSB7CisJc25tcF9sb2coTE9HX0VSUiwgInN5c3RlbXN0YXRzX3Y0OiBjYW5ub3QgY3JlYXRlIGVudHJ5XG4iKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShjb250YWluZXIsCisJCQkJCQkgIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0ZSRUVfTk9GTEFHUyk7CisJcmV0dXJuIC0zOworICAgIH0KKworICAgIC8qCisgICAgICogT0sgLSB3ZSd2ZSBub3cgZ290IChvciBjcmVhdGVkKSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yCisgICAgICogICAgICB0aGlzIHN5c3RlbXN0YXRzLCBpbmNsdWRpbmcgYW55ICJzdGF0aWMiIGluZm9ybWF0aW9uLgorICAgICAqIE5vdyBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgbGluZSAoaS5lLiBzdGFydGluZyBmcm9tICdzdGF0cycpCisgICAgICogICAgICB0byBleHRyYWN0IHRoZSByZWxldmFudCBzdGF0aXN0aWNzLCBhbmQgcG9wdWxhdGUKKyAgICAgKiAgICAgIGRhdGEgc3RydWN0dXJlIGFjY29yZGluZ2x5LgorICAgICAqLworCisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9UT1RBTF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX1RPVEFMXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSW5IZHJFcnJvcnMgPSBpcHN0YXRbSVBfU1RBVF9CQURTVU1dCisJCSAgICArIGlwc3RhdFtJUF9TVEFUX1RPT1NIT1JUXSArIGlwc3RhdFtJUF9TVEFUX1RPT1NNQUxMXQorCSAgICAgICAgICAgICsgaXBzdGF0W0lQX1NUQVRfQkFESExFTl0gKyBpcHN0YXRbSVBfU1RBVF9CQURMRU5dOworICAgIGVudHJ5LT5zdGF0cy5JbkFkZHJFcnJvcnMgPSBpcHN0YXRbSVBfU1RBVF9DQU5URk9SV0FSRF07CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9GT1JXQVJEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfRk9SV0FSRF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkluVW5rbm93blByb3RvcyA9IGlwc3RhdFtJUF9TVEFUX05PUFJPVE9dOworICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gaXBzdGF0W0lQX1NUQVRfRlJBR0RST1BQRURdOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gaXBzdGF0W0lQX1NUQVRfREVMSVZFUkVEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfREVMSVZFUkVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9MT0NBTE9VVF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2ggPSBpcHN0YXRbSVBfU1RBVF9MT0NBTE9VVF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93ID0gaXBzdGF0W0lQX1NUQVRfT0RST1BQRURdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfT0RST1BQRURdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IGlwc3RhdFtJUF9TVEFUX05PR0lGXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX05PR0lGXSA+PiAzMjsKKyAgICAvKiBlbnRyeS0+c3RhdHMuID0gc2Nhbl92YWxzWzEyXTsgLyAqIFJlYXNtVGltZW91dCAqLworICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gaXBzdGF0W0lQX1NUQVRfRlJBR01FTlRTXTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBpcHN0YXRbSVBfU1RBVF9SRUFTU0VNQkxFRF07CisgICAgZW50cnktPnN0YXRzLlJlYXNtRmFpbHMgPSBpcHN0YXRbSVBfU1RBVF9GUkFHRFJPUFBFRF0KKwkJICAgICsgaXBzdGF0W0lQX1NUQVRfRlJBR1RJTUVPVVRdOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdPS3MubG93ID0gaXBzdGF0W0lQX1NUQVRfRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5oaWdoID0gaXBzdGF0W0lQX1NUQVRfRlJBR01FTlRTXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBzdGF0W0lQX1NUQVRfQ0FOVEZSQUddICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX0NBTlRGUkFHXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcHN0YXRbSVBfU1RBVF9PRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IGlwc3RhdFtJUF9TVEFUX09GUkFHTUVOVFNdID4+IDMyOworCisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOSERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdID0gMTsKKworICAgIC8qCisgICAgICogYWRkIHRvIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpIDwgMCkKKyAgICB7CisJc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHdpdGggc3lzdGVtc3RhdHNfdjQ6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKTsKKwluZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKGVudHJ5KTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworCisjaWYgZGVmaW5lZCAoTkVUU05NUF9FTkFCTEVfSVBWNikKKworc3RhdGljIGludAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgdWludDY0X3QgaXBzdGF0W0lQNl9OU1RBVFNdOworICAgIHNpemVfdCBsZW4gPSBzaXplb2YoaXBzdGF0KTsKKworICAgIGlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0Ni5pcDYuc3RhdHMiLCAmaXBzdGF0LCAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwlORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJDYW5ub3Qgc3lzY3RsYnluYW1lIG5ldC5pbmV0Ni5pcDYuc3RhdHNcbiIpKTsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAleClcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZSgyLCAwLAorCQkiaXBTeXN0ZW1TdGF0c1RhYmxlLmlwdjYiKTsKKyAgICBpZihOVUxMID09IGVudHJ5KSB7CisJc25tcF9sb2coTE9HX0VSUiwgInN5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHM6IGNhbm5vdCBjcmVhdGUgZW50cnlcbiIpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKwkJCQkJCSAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKKwlyZXR1cm4gLTM7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBPSyAtIHdlJ3ZlIG5vdyBnb3QgKG9yIGNyZWF0ZWQpIHRoZSBkYXRhIHN0cnVjdHVyZSBmb3IKKyAgICAgKiAgICAgIHRoaXMgc3lzdGVtc3RhdHMsIGluY2x1ZGluZyBhbnkgInN0YXRpYyIgaW5mb3JtYXRpb24uCisgICAgICovCisKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9UT1RBTF0gJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9UT1RBTF0gPj4gMzI7CisgICAgZW50cnktPnN0YXRzLkluSGRyRXJyb3JzID0gaXBzdGF0W0lQNl9TVEFUX0JBRE9QVElPTlNdCisJCSAgICArIGlwc3RhdFtJUDZfU1RBVF9UT09TSE9SVF0gKyBpcHN0YXRbSVA2X1NUQVRfVE9PU01BTExdCisJCSAgICArIGlwc3RhdFtJUDZfU1RBVF9UT09NQU5ZSERSXSArIGlwc3RhdFtJUDZfU1RBVF9FWFRIRFJUT09MT05HXTsKKyAgICBlbnRyeS0+c3RhdHMuSW5BZGRyRXJyb3JzID0gaXBzdGF0W0lQNl9TVEFUX0NBTlRGT1JXQVJEXTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9GT1JXQVJEXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0ZPUldBUkRdID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gaXBzdGF0W0lQNl9TVEFUX0ZSQUdEUk9QUEVEXTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9ERUxJVkVSRURdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkRlbGl2ZXJzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfREVMSVZFUkVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfTE9DQUxPVVRdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX0xPQ0FMT1VUXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfT0RST1BQRURdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX09EUk9QUEVEXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5sb3cgPSBpcHN0YXRbSVA2X1NUQVRfTk9HSUZdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXROb1JvdXRlcy5oaWdoID0gaXBzdGF0W0lQNl9TVEFUX05PR0lGXSA+PiAzMjsKKyAgICAvKiBlbnRyeS0+c3RhdHMuID0gc2Nhbl92YWxzWzEyXTsgLyAqIFJlYXNtVGltZW91dCAqLworICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gaXBzdGF0W0lQNl9TVEFUX0ZSQUdNRU5UU107CisgICAgZW50cnktPnN0YXRzLlJlYXNtT0tzID0gaXBzdGF0W0lQNl9TVEFUX1JFQVNTRU1CTEVEXTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IGlwc3RhdFtJUDZfU1RBVF9GUkFHRFJPUFBFRF0KKwkJICAgICsgaXBzdGF0W0lQNl9TVEFUX0ZSQUdUSU1FT1VUXTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9GUkFHTUVOVFNdICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfRlJBR01FTlRTXSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBzdGF0W0lQNl9TVEFUX0NBTlRGUkFHXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0ZhaWxzLmhpZ2ggPSBpcHN0YXRbSVA2X1NUQVRfQ0FOVEZSQUddID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdyA9IGlwc3RhdFtJUDZfU1RBVF9PRlJBR01FTlRTXSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IGlwc3RhdFtJUDZfU1RBVF9PRlJBR01FTlRTXSA+PiAzMjsKKworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0gPSAxOworCisgICAgLyoKKyAgICAgKiBhZGQgdG8gY29udGFpbmVyCisgICAgICovCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQorICAgIHsKKwlzbm1wX2xvZyhMT0dfRVJSLCAic3lzdGVtc3RhdHNfdjZfbG9hZF9zeXN0ZW1zdGF0czogY2Fubm90IGluc2VydCBlbnRyeVxuIik7CisJREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXIiLCJlcnJvciB3aXRoIHN5c3RlbXN0YXRzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBsb2FkIGlwSWZTdGF0c1RhYmxlIGZvciBpcHY2IGVudHJpZXMKKyAqLworc3RhdGljIGludCAKK19zeXN0ZW1zdGF0c192Nl9sb2FkX2lmc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzdHJ1Y3QgaWZfbmFtZWluZGV4ICppZnMgPSBpZl9uYW1laW5kZXgoKTsKKyAgICBpbnQgaXg7CisgICAgaW50IHJjID0gMDsKKworICAgIGZvciAoaXggPSAwOyBpZnNbaXhdLmlmX2luZGV4OyBpeCsrKSB7CisJc3RydWN0IGluNl9pZnN0YXQgKmlmczY7CisJc3RydWN0IGluNl9pZnJlcSBpZnI7CisJaW50IHM7CisKKwltZW1zZXQoJmlmciwgMCwgc2l6ZW9mKGlmcikpOworCXN0cm5jcHkoaWZyLmlmcl9uYW1lLCBpZnNbaXhdLmlmX25hbWUsIHNpemVvZihpZnIuaWZyX25hbWUpLTEpOworCWlmICgocyA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCkpIDwgMCkgeworCSAgICByYyA9IC0xOworCSAgICBicmVhazsKKwl9CisJaWYgKGlvY3RsKHMsIFNJT0NHSUZTVEFUX0lONiwgKGNhZGRyX3QpJmlmcikgPCAwKSB7CisJICAgIHJjID0gLTI7CisJICAgIGNsb3NlKHMpOworCSAgICBicmVhazsKKwl9CisJY2xvc2Uocyk7CisJaWZzNiA9ICZpZnIuaWZyX2lmcnUuaWZydV9zdGF0OworICAgIH0KKyAgICBpZl9mcmVlbmFtZWluZGV4KGlmcyk7CisgICAgcmV0dXJuIHJjOworfQorI2VuZGlmCisKKyNlbHNlCisKK3N0YXRpYyBpbnQKK19zeXN0ZW1zdGF0c192NChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmVudHJ5ID0gTlVMTDsKKyNpZmRlZiBfX0RyYWdvbkZseV9fCisgICAgc2l6ZV90IGxlbiA9IG5jcHVzKnNpemVvZihzdHJ1Y3QgaXBfc3RhdHMpOworICAgIHN0cnVjdCBpcF9zdGF0cyAqaXBzdGF0ID0gbWFsbG9jKGxlbik7CisgICAgaW50IGM7CisjZWxzZQorICAgIHNpemVfdCBsZW4gPSBzaXplb2Yoc3RydWN0IGlwc3RhdCk7CisgICAgc3RydWN0IGlwc3RhdCAqaXBzdGF0ID0gbWFsbG9jKGxlbik7CisjZW5kaWYKKyAgICBpbnQgbWliW10gPSB7IENUTF9ORVQsIFBGX0lORVQsIElQUFJPVE9fSVAsIElQQ1RMX1NUQVRTIH07CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgc2l6ZW9mKG1pYikgLyBzaXplb2YobWliWzBdKSwgaXBzdGF0LCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworCXNubXBfbG9nX3BlcnJvcigiQ2Fubm90IHN5c2N0bGJ5bmFtZSBuZXQuaW5ldC5pcC5zdGF0cyIpOworCWZyZWUoaXBzdGF0KTsKKwlyZXR1cm4gLTI7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY0IChmbGFncyAleClcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiB3ZSBkbyBub3Qgc3VwcG9ydCBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NCAqLworCWZyZWUoaXBzdGF0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMSwgMCwKKwkJImlwU3lzdGVtU3RhdHNUYWJsZS5pcHY0Iik7CisgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lciwKKwkJCQkJCSAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9OT0ZMQUdTKTsKKwlmcmVlKGlwc3RhdCk7CisJcmV0dXJuIC0zOworICAgIH0KKworICAgIC8qCisgICAgICogT0sgLSB3ZSd2ZSBub3cgZ290IChvciBjcmVhdGVkKSB0aGUgZGF0YSBzdHJ1Y3R1cmUgZm9yCisgICAgICogICAgICB0aGlzIHN5c3RlbXN0YXRzLCBpbmNsdWRpbmcgYW55ICJzdGF0aWMiIGluZm9ybWF0aW9uLgorICAgICAqIE5vdyBwYXJzZSB0aGUgcmVzdCBvZiB0aGUgbGluZSAoaS5lLiBzdGFydGluZyBmcm9tICdzdGF0cycpCisgICAgICogICAgICB0byBleHRyYWN0IHRoZSByZWxldmFudCBzdGF0aXN0aWNzLCBhbmQgcG9wdWxhdGUKKyAgICAgKiAgICAgIGRhdGEgc3RydWN0dXJlIGFjY29yZGluZ2x5LgorICAgICAqLworCisjaWZkZWYgZHJhZ29uZmx5CisgICAgZm9yIChjID0gMTsgYyA8IG5jcHVzOyBjKyspIHsKKwlpbnQgaSwgbiA9IHNpemVvZihzdHJ1Y3QgaXBfc3RhdHMpL3NpemVvZih1X2xvbmcpOworCXVfbG9uZyAqdXAgPSAodV9sb25nICopaXBzdGF0OworCXVfbG9uZyAqY3AgPSAodV9sb25nICopKGlwc3RhdCtjKTsKKwlmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7CisJICAgICp1cCArPSAqY3A7CisJICAgIHVwKys7CisJICAgIGNwKys7CisJfQorICAgIH0KKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93ID0gaXBzdGF0LT5pcHNfdG90YWwgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmhpZ2ggPSBpcHN0YXQtPmlwc190b3RhbCA+PiAzMjsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyA9IGlwc3RhdC0+aXBzX2JhZHN1bSArIGlwc3RhdC0+aXBzX3Rvb3Nob3J0CisJCSAgICAgICAgICAgICsgaXBzdGF0LT5pcHNfdG9vc21hbGwgKyBpcHN0YXQtPmlwc19iYWRobGVuCisJCQkgICAgKyBpcHN0YXQtPmlwc19iYWRsZW47CisgICAgZW50cnktPnN0YXRzLkluQWRkckVycm9ycyA9IGlwc3RhdC0+aXBzX2NhbnRmb3J3YXJkOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMubG93ID0gaXBzdGF0LT5pcHNfZm9yd2FyZCAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dEZvcndEYXRhZ3JhbXMuaGlnaCA9IGlwc3RhdC0+aXBzX2ZvcndhcmQgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zID0gaXBzdGF0LT5pcHNfbm9wcm90bzsKKyAgICBlbnRyeS0+c3RhdHMuSW5EaXNjYXJkcyA9IGlwc3RhdC0+aXBzX2ZyYWdkcm9wcGVkOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gaXBzdGF0LT5pcHNfZGVsaXZlcmVkICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDSW5EZWxpdmVycy5oaWdoID0gaXBzdGF0LT5pcHNfZGVsaXZlcmVkID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93ID0gaXBzdGF0LT5pcHNfbG9jYWxvdXQgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5oaWdoID0gaXBzdGF0LT5pcHNfbG9jYWxvdXQgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSENPdXREaXNjYXJkcy5sb3cgPSBpcHN0YXQtPmlwc19vZHJvcHBlZCAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmhpZ2ggPSBpcHN0YXQtPmlwc19vZHJvcHBlZCA+PiAzMjsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdyA9IGlwc3RhdC0+aXBzX25vZ2lmICYgMHhmZmZmZmZmZjsKKyNpZm5kZWYgZGFyd2luCisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMuaGlnaCA9IGlwc3RhdC0+aXBzX25vZ2lmID4+IDMyOworI2VuZGlmCisgICAgLyogZW50cnktPnN0YXRzLiA9IHNjYW5fdmFsc1sxMl07IC8gKiBSZWFzbVRpbWVvdXQgKi8KKyAgICBlbnRyeS0+c3RhdHMuUmVhc21SZXFkcyA9IGlwc3RhdC0+aXBzX2ZyYWdtZW50czsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBpcHN0YXQtPmlwc19yZWFzc2VtYmxlZDsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21GYWlscyA9IGlwc3RhdC0+aXBzX2ZyYWdkcm9wcGVkICsgaXBzdGF0LT5pcHNfZnJhZ3RpbWVvdXQ7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3cgPSBpcHN0YXQtPmlwc19mcmFnbWVudHMgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBpcHN0YXQtPmlwc19mcmFnbWVudHMgPj4gMzI7CisjZW5kaWYKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93ID0gaXBzdGF0LT5pcHNfY2FudGZyYWcgJiAweGZmZmZmZmZmOworI2lmbmRlZiBkYXJ3aW4KKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnRmFpbHMuaGlnaCA9IGlwc3RhdC0+aXBzX2NhbnRmcmFnID4+IDMyOworI2VuZGlmCisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93ID0gaXBzdGF0LT5pcHNfb2ZyYWdtZW50cyAmIDB4ZmZmZmZmZmY7CisjaWZuZGVmIGRhcndpbgorICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmhpZ2ggPSBpcHN0YXQtPmlwc19vZnJhZ21lbnRzID4+IDMyOworI2VuZGlmCisKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlVOS05PV05QUk9UT1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5ERUxJVkVSU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVROT1JPVVRFU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1NdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSA9IDE7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURV0gPSAxOworCisgICAgLyoKKyAgICAgKiBhZGQgdG8gY29udGFpbmVyCisgICAgICovCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKQorICAgIHsKKwlERUJVR01TR1RMKCgiYWNjZXNzOnN5c3RlbXN0YXRzOmNvbnRhaW5lciIsImVycm9yIHdpdGggc3lzdGVtc3RhdHNfZW50cnk6IGluc2VydCBpbnRvIGNvbnRhaW5lciBmYWlsZWQuXG4iKSk7CisJbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShlbnRyeSk7CisgICAgfQorCisgICAgZnJlZShpcHN0YXQpOworICAgIHJldHVybiAwOworfQorCisKKyNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQorCisvKgorICogbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcworICovCitzdGF0aWMgaW50IAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfc3lzdGVtc3RhdHMobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzdHJ1Y3QgaXA2c3RhdCBpcDZzdGF0OworICAgIGludCBtaWJbXSA9IHsgQ1RMX05FVCwgQUZfSU5FVDYsIElQUFJPVE9fSVBWNiwgSVBWNkNUTF9TVEFUUyB9OworICAgIHNpemVfdCBsZW4gPSBzaXplb2YoaXA2c3RhdCk7CisgICAgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqZW50cnkgPSBOVUxMOworCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKG1pYlswXSksICZpcDZzdGF0LCAmbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworICAJTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiQ2Fubm90IHN5c2N0bChDVExfTkVULCBBRl9JTkVUNiwgSVBQUk9UT19JUFY2LCBJUFY2Q1RMX1NUQVRTKVxuIikpOworCXJldHVybiAtMTsKKyAgICB9CisgICAgCisgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9jcmVhdGUoMiwgMCwKKyAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUuaXB2NiIpOworICAgIGlmKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMzsKKyAgICAKKyAgICBlbnRyeS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdyA9IGlwNnN0YXQuaXA2c190b3RhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoID0gaXA2c3RhdC5pcDZzX3RvdGFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTlJFQ0VJVkVTXSA9IDE7CisgICAgLyoKKyAgICBlbnRyeS0+c3RhdHMuSENJbk9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5PY3RldHMuaGlnaCA9IHNjYW5fdmFsICA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdID0gMTsKKyAgICAqLworICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyA9IGlwNnN0YXQuaXA2c19iYWRvcHRpb25zICsgaXA2c3RhdC5pcDZzX3Rvb3Nob3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgaXA2c3RhdC5pcDZzX3Rvb3NtYWxsICsgaXA2c3RhdC5pcDZzX2JhZHZlcnMKKwkJCSAgICAgKyBpcDZzdGF0LmlwNnNfdG9vbWFueWhkcjsKKyNpZiBIQVZFX1NUUlVDVF9JUDZTVEFUX0lQNlNfRVhUSERSVE9PTE9ORworICAgIGVudHJ5LT5zdGF0cy5JbkhkckVycm9ycyArPSBpcDZzdGF0LmlwNnNfZXh0aGRydG9vbG9uZzsKKyNlbmRpZgorICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdyA9IGlwNnN0YXQuaXA2c19jYW50Zm9yd2FyZCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5Ob1JvdXRlcy5oaWdoID0gaXA2c3RhdC5pcDZzX2NhbnRmb3J3YXJkID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk5PUk9VVEVTXSA9IDE7CisgICAgLyoKKyAgICBlbnRyeS0+c3RhdHMuaW5BZGRyRXJyb3JzID0gMDsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOQUREUkVSUk9SU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5JblVua25vd25Qcm90b3MgPSBzY2FuX3ZhbDsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5JblRydW5jYXRlZFBrdHMgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSA9IDE7CisgICAgKi8KKyAgICBlbnRyeS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93ID0gaXA2c3RhdC5pcDZzX2ZvcndhcmQgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRm9yd0RhdGFncmFtcy5oaWdoID0gaXA2c3RhdC5pcDZzX2ZvcndhcmQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5SZWFzbVJlcWRzID0gaXA2c3RhdC5pcDZzX2ZyYWdtZW50czsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuUmVhc21PS3MgPSBpcDZzdGF0LmlwNnNfcmVhc3NlbWJsZWQ7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5SZWFzbUZhaWxzID0gaXA2c3RhdC5pcDZzX2ZyYWdkcm9wcGVkICsgaXA2c3RhdC5pcDZzX2ZyYWd0aW1lb3V0OworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01GQUlMU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5JbkRpc2NhcmRzID0gaXA2c3RhdC5pcDZzX2ZyYWdkcm9wcGVkOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMubG93ID0gaXA2c3RhdC5pcDZzX2RlbGl2ZXJlZCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaCA9IGlwNnN0YXQuaXA2c19kZWxpdmVyZWQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRSZXF1ZXN0cy5sb3cgPSBpcDZzdGF0LmlwNnNfbG9jYWxvdXQgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dFJlcXVlc3RzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfbG9jYWxvdXQgPj4gMzI7CisgICAgZW50cnktPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0Tm9Sb3V0ZXMubG93ID0gaXA2c3RhdC5pcDZzX25vcm91dGUgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE5vUm91dGVzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfbm9yb3V0ZSA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdyA9IGlwNnN0YXQuaXA2c19mb3J3YXJkICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmhpZ2ggPSBpcDZzdGF0LmlwNnNfZm9yd2FyZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdyA9IGlwNnN0YXQuaXA2c19vZHJvcHBlZCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RGlzY2FyZHMuaGlnaCA9IGlwNnN0YXQuaXA2c19vZHJvcHBlZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnUmVxZHMubG93ID0gKGlwNnN0YXQuaXA2c19mcmFnbWVudGVkICsgaXA2c3RhdC5pcDZzX2NhbnRmcmFnKSAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ1JlcWRzLmhpZ2ggPSAoaXA2c3RhdC5pcDZzX2ZyYWdtZW50ZWQgKyBpcDZzdGF0LmlwNnNfY2FudGZyYWcpID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHUkVRRFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmxvdyA9IGlwNnN0YXQuaXA2c19mcmFnbWVudGVkICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnT0tzLmhpZ2ggPSBpcDZzdGF0LmlwNnNfZnJhZ21lbnRlZCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR09LU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3cgPSBpcDZzdGF0LmlwNnNfY2FudGZyYWcgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ091dEZyYWdGYWlscy5oaWdoID0gaXA2c3RhdC5pcDZzX2NhbnRmcmFnID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHRkFJTFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRGcmFnQ3JlYXRlcy5sb3cgPSBpcDZzdGF0LmlwNnNfb2ZyYWdtZW50cyAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMuaGlnaCA9IGlwNnN0YXQuaXA2c19vZnJhZ21lbnRzID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHQ1JFQVRFU10gPSAxOworICAgIC8qCisgICAgZW50cnktPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRUcmFuc21pdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRNQ0FTVE9DVEVUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdyA9IHNjYW5fdmFsICAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDSW5NY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVE9DVEVUU10gPSAxOworICAgIGVudHJ5LT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAmIDB4ZmZmZmZmZmY7CisgICAgZW50cnktPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSA9IDE7CisgICAgZW50cnktPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdyA9IHNjYW5fdmFsICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRPY3RldHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENJbkJjYXN0UGt0cy5sb3cgPSBzY2FuX3ZhbCAgJiAweGZmZmZmZmZmOworICAgIGVudHJ5LT5zdGF0cy5IQ0luQmNhc3RQa3RzLmhpZ2ggPSBzY2FuX3ZhbCA+PiAzMjsKKyAgICBlbnRyeS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdID0gMTsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMubG93ID0gc2Nhbl92YWwgICYgMHhmZmZmZmZmZjsKKyAgICBlbnRyeS0+c3RhdHMuSENPdXRCY2FzdFBrdHMuaGlnaCA9IHNjYW5fdmFsID4+IDMyOworICAgIGVudHJ5LT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdID0gMTsKKyAgICAqLworCisgICAgLyoKKyAgICAgKiBhZGQgdG8gY29udGFpbmVyCisgICAgICovCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSkgPCAwKSB7CisJREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXIiLCJlcnJvciB3aXRoIHN5c3RlbXN0YXRzX2VudHJ5OiBpbnNlcnQgaW50byBjb250YWluZXIgZmFpbGVkLlxuIikpOworCW5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUoZW50cnkpOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCisjZGVmaW5lIERFVl9TTk1QNl9ESVJOQU1FICAgIi9wcm9jL25ldC9kZXZfc25tcDYiCisjZGVmaW5lIElGSU5ERVhfTElORSAgICAgICAgImlmSW5kZXgiCisjZGVmaW5lIERFVl9GSUxFTkFNRV9MRU4gICAgNjQKKworLyoKKyAqIGxvYWQgaXBJZlN0YXRzVGFibGUgZm9yIGlwdjYgZW50cmllcworICovCitzdGF0aWMgaW50IAorX3N5c3RlbXN0YXRzX3Y2X2xvYWRfaWZzdGF0cyhuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIERJUiAgICAgICAgICAgICpkZXZfc25tcDZfZGlyOworICAgIHN0cnVjdCBkaXJlbnQgICpkZXZfc25tcDZfZW50cnk7CisgICAgY2hhciAgICAgICAgICAgZGV2X2ZpbGVuYW1lW0RFVl9GSUxFTkFNRV9MRU5dOworICAgIEZJTEUgICAgICAgICAgICpkZXZpbjsKKyAgICBjaGFyICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIGNoYXIgICAgICAgICAgICpzdGFydCA9IGxpbmU7CisgICAgaW50ICAgICAgICAgICAgcmM7CisgICAgY2hhciAgICAgICAgICAgKnNjYW5fc3RyOworICAgIHVpbnRtYXhfdCAgICAgICBzY2FuX3ZhbDsKKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICplbnRyeSA9IE5VTEw7CisgICAgICAgICAgICAKKyAgICAvKgorICAgICAqIHRyeSB0byBvcGVuIC9wcm9jL25ldC9kZXZfc25tcDYgZGlyZWN0b3J5LiBJZiB3ZSBjYW4ndCwgdGhhdCcgb2sgLQorICAgICAqIG1heWJlIGl0IGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgcnVubmluZyBrZXJuZWwuCisgICAgICovCisgICAgaWYgKChkZXZfc25tcDZfZGlyID0gb3BlbmRpcihERVZfU05NUDZfRElSTkFNRSkpID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczppZnN0YXRzIiwKKyAgICAgICAgIkZhaWxlZCB0byBsb2FkIElQdjYgSWZTdGF0cyBUYWJsZSAobGludXgpXG4iKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICAKKyAgICAvKgorICAgICAqIFJlYWQgZWFjaCBwZXIgaW50ZXJmYWNlIHN0YXRpc3RpY3MgcHJvYyBmaWxlCisgICAgICovCisgICAgcmMgPSAwOworICAgIHdoaWxlICgoZGV2X3NubXA2X2VudHJ5ID0gcmVhZGRpcihkZXZfc25tcDZfZGlyKSkgIT0gTlVMTCkgeworICAgICAgICBpZiAoZGV2X3NubXA2X2VudHJ5LT5kX25hbWVbMF0gPT0gJy4nKQorICAgICAgICAgICAgY29udGludWU7CisgICAgCisgICAgICAgIGlmIChzbnByaW50ZihkZXZfZmlsZW5hbWUsIERFVl9GSUxFTkFNRV9MRU4sICIlcy8lcyIsIERFVl9TTk1QNl9ESVJOQU1FLAorICAgICAgICAgICAgICAgIGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lKSA+IERFVl9GSUxFTkFNRV9MRU4pIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJJbnRlcmZhY2UgbmFtZSAlcyBpcyB0b28gbG9uZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgZGV2X3NubXA2X2VudHJ5LT5kX25hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgPT0gKGRldmluID0gZm9wZW4oZGV2X2ZpbGVuYW1lLCAiciIpKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBvcGVuICVzXG4iLCBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogSWYgYSBzdGF0IGZpbGUgbmFtZSBpcyBtYWRlIG9mIGRpZ2l0cywgdGhlIG5hbWUgaXMgaW50ZXJmYWNlIGluZGV4LgorICAgICAgICAgKiBJZiBpdCBpcyBhbiBpbnRlcmZhY2UgbmFtZSwgdGhlIGZpbGUgaW5jbHVkZXMgYSBsaW5lIGxhYmVsZWQgaWZJbmRleC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChpc2RpZ2l0KGRldl9zbm1wNl9lbnRyeS0+ZF9uYW1lWzBdKSkgeworICAgICAgICAgICAgc2Nhbl92YWwgPSBzdHJ0b3VsbChkZXZfc25tcDZfZW50cnktPmRfbmFtZSwgTlVMTCwgMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSAoc3RhcnQgPSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGRldmluKSkpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgZG9lc24ndCBpbmNsdWRlIGFueSBsaW5lc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldl9maWxlbmFtZSk7CisgICAgICAgICAgICAgICAgZmNsb3NlKGRldmluKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAKKyAgICAgICAgICAgIGlmICgwICE9IHN0cm5jbXAoc3RhcnQsIElGSU5ERVhfTElORSwgNykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgZG9lc24ndCBpbmNsdWRlIGlmSW5kZXggbGluZSIsCisgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZmlsZW5hbWUpOworICAgICAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNjYW5fc3RyID0gc3RycmNocihsaW5lLCAnICcpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gc2Nhbl9zdHIpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgaXMgd3JvbmcgZm9ybWF0IiwgZGV2X2ZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc2Nhbl92YWwgPSBzdHJ0b3VsbChzY2FuX3N0ciwgTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKDIsIHNjYW5fdmFsLAorICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZS5pcHY2Iik7CisgICAgICAgIGlmKE5VTEwgPT0gZW50cnkpIHsKKyAgICAgICAgICAgIGZjbG9zZShkZXZpbik7CisgICAgICAgICAgICBjbG9zZWRpcihkZXZfc25tcDZfZGlyKTsKKyAgICAgICAgICAgIHJldHVybiAtMzsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogX3N5c3RlbXN0YXRzX3Y2X2xvYWRfZmlsZShlbnRyeSwgZGV2aW4pOyAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgICAgICBmY2xvc2UoZGV2aW4pOworICAgIH0KKyAgICBjbG9zZWRpcihkZXZfc25tcDZfZGlyKTsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisjZW5kaWYKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKy8qCisgKiBCYXNlZCBvbiBsb2FkX2ZsYWdzLCBsb2FkIGlwU3lzdGVtU3RhdHNUYWJsZSBvciBpcElmU3RhdHNUYWJsZSBmb3IgaXB2NiBlbnRyaWVzLiAKKyAqLworc3RhdGljIGludAorX3N5c3RlbXN0YXRzX3Y2KG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgREVCVUdNU0dUTCgoImFjY2VzczpzeXN0ZW1zdGF0czpjb250YWluZXI6YXJjaCIsICJsb2FkIHY2IChmbGFncyAldSlcbiIsCisgICAgICAgICAgICAgICAgbG9hZF9mbGFncykpOworCisgICAgbmV0c25tcF9hc3NlcnQoY29udGFpbmVyICE9IE5VTEwpOyAvKiBsb2FkIGZ1bmN0aW9uIHNob3VsZGEgY2hlY2tlZCB0aGlzICovCisKKyAgICBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSkgeworICAgICAgICAvKiBsb2FkIGlwSWZTdGF0c1RhYmxlICovCisgICAgICAgIHJldHVybiBfc3lzdGVtc3RhdHNfdjZfbG9hZF9pZnN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogbG9hZCBpcFN5c3RlbVN0YXRzVGFibGUgKi8KKyAgICAgICAgcmV0dXJuIF9zeXN0ZW1zdGF0c192Nl9sb2FkX3N5c3RlbXN0YXRzKGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CisgICAgfQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuYwppbmRleCA2NWFhOGUzLi5hYWFlMmUzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9vaWRbXSA9IHsgSU5FVE5FVFRPTUVESUFUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX29pZFtdID0geyBJTkVUTkVUVE9NRURJQVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpbmV0TmV0VG9NZWRpYVRhYmxlX29pZCk7CiAKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uIGluZXROZXRUb01lZGlhVGFibGVfdXNlcl9jb250ZXh0OwpAQCAtMTU5LDEwICsxNTksMTAgQEAKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppbmV0TmV0VG9NZWRpYVRhYmxlOmluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwIiwgImNhbGxlZFxuIikpOwogCiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKLQogICAgIC8qCiAgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgaW5ldE5ldFRvTWVkaWFUYWJsZSByb3dyZXEgY2xlYW51cC4KICAgICAgKi8KKyAgICBTTk1QX0ZSRUUocm93cmVxX2N0eC0+ZGF0YSk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCiAKIC8qKgpAQCAtNTM2LDExICs1MzYsNyBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpbmV0TmV0VG9NZWRpYUxhc3RVcGRhdGVkIGRhdGEuCiAgICAgICogY29weSAoKiBpbmV0TmV0VG9NZWRpYUxhc3RVcGRhdGVkX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KLSAgICAvKgotICAgICAqIHh4eC1ya3M6IGdldCB0aGlzIHZhbHVlPwotICAgICAqLwotICAgIHJldHVybiBNRkRfU0tJUDsKLQorICAgICppbmV0TmV0VG9NZWRpYUxhc3RVcGRhdGVkX3ZhbF9wdHIgPSByb3dyZXFfY3R4LT5kYXRhLT5hcnBfbGFzdF91cGRhdGVkOwogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFMYXN0VXBkYXRlZF9nZXQgKi8KIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZS5oCmluZGV4IDdmM2ZjZTIuLjczYWZhZTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlLmgKQEAgLTIwMCw4ICsyMDAsOCBAQAogICAgICAgICAqIGluZXROZXRUb01lZGlhVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpbmV0TmV0VG9NZWRpYVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGluZXROZXRUb01lZGlhVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImluZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmgiCkBAIC0yNTAsMTIgKzI1MCwxOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXROZXRUb01lZGlhU3RhdGVfdmFsX3B0cik7CisKICAgICBpbnQKICAgICAgICAgaW5ldE5ldFRvTWVkaWFSb3dTdGF0dXNfZ2V0KGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZXROZXRUb01lZGlhUm93U3RhdHVzX3ZhbF9wdHIpOwogCisgICAgaW50CisgICAgICAgIGluZXROZXRUb01lZGlhUm93U3RhdHVzX3NldChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFSb3dTdGF0dXNfdmFsKTsKKwogCiAgICAgaW50CiAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9kYXRhX2FjY2Vzcy5jCmluZGV4IDgxOTQ1MzQuLjFlYzhjYzYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xOSw2ICsyMCw5IEBACiAKICNpbmNsdWRlICJpbmV0TmV0VG9NZWRpYVRhYmxlX2RhdGFfYWNjZXNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9saWZvKQorc3RhdGljIG5ldHNubXBfYXJwX2FjY2VzcyAqIGFycF9hY2Nlc3MgPSBOVUxMOworCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCiAgKgpAQCAtNzEsNiArNzUsMTIzIEBACiAgKi8KIAogLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKi8KK3N0YXRpYyB2b2lkCitfYWRkX29yX3VwZGF0ZV9hcnBfZW50cnkobmV0c25tcF9hcnBfZW50cnkgKmFycF9lbnRyeSwKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcikKK3sKKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHgsICpvbGQ7CisgICAgaW50ICAgICAgICAgICAgIGluZXRBZGRyZXNzVHlwZTsKKworICAgIERFQlVHVFJBQ0U7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGFycF9lbnRyeSk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0IHRoZSBhZGRyIGxlbiB0byBhbiBpbmV0QWRkcmVzc1R5cGUKKyAgICAgKi8KKyAgICBzd2l0Y2ggKGFycF9lbnRyeS0+YXJwX2lwYWRkcmVzc19sZW4pIHsKKyAgICBjYXNlIDQ6CisgICAgICAgIGluZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgMTY6CisgICAgICAgIGluZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbmV0TmV0VG9NZWRpYVRhYmxlOl9hZGRfb3JfdXBkYXRlX2FycGVudHJ5OiB1bnN1cHBvcnRlZCBhZGRyZXNzIHR5cGUsIGxlbiA9ICVkXG4iLCBhcnBfZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKTsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfYXJwX2VudHJ5X2ZyZWUoYXJwX2VudHJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpLCB0aGVuIHRyeSB0byBmaW5kIGl0IGluCisgICAgICogdGhlIGNhY2hlLgorICAgICAqLworICAgIHJvd3JlcV9jdHggPSBpbmV0TmV0VG9NZWRpYVRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoYXJwX2VudHJ5LCBOVUxMKTsKKyAgICBpZiAoKE5VTEwgIT0gcm93cmVxX2N0eCkgJiYKKyAgICAgICAgKE1GRF9TVUNDRVNTID09IGluZXROZXRUb01lZGlhVGFibGVfaW5kZXhlc19zZXQKKyAgICAgICAgIChyb3dyZXFfY3R4LCByb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCwgaW5ldEFkZHJlc3NUeXBlLAorICAgICAgICAgIChjaGFyICopIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9pcGFkZHJlc3MsCisgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+YXJwX2lwYWRkcmVzc19sZW4pKSkgeworCisgICAgICAgIC8qIHRyeSB0byBmaW5kIG9sZCBlbnRyeSAqLworICAgICAgICBvbGQgPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChjb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICBpZiAoYXJwX2VudHJ5LT5mbGFncyAmIE5FVFNOTVBfQUNDRVNTX0FSUF9FTlRSWV9GTEFHX0RFTEVURSkgeworICAgICAgICAgICAgLyogZGVsZXRlIGV4aXN0aW5nIGVudHJ5ICovCisgICAgICAgICAgICBpZiAob2xkICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGNvbnRhaW5lciwgb2xkKTsKKyAgICAgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChvbGQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0gZWxzZSBpZiAob2xkICE9IE5VTEwpIHsKKyAgICAgICAgICAgIC8qIHRoZSBlbnRyeSBpcyBhbHJlYWR5IHRoZXJlLCB1cGRhdGUgaXQgKi8KKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV91cGRhdGUob2xkLT5kYXRhLCBhcnBfZW50cnkpOworICAgICAgICAgICAgLyogZGVsZXRlIHRoZSBhdXhpbGlhcnkgY29udGV4dCB3ZSB1c2VkIHRvIGZpbmQgdGhlIGVudHJ5CisgICAgICAgICAgICAgKiAodGhpcyBkZWxldGVzIGFsc28gYXJwX2VudHJ5KSAqLworICAgICAgICAgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBjcmVhdGUgbmV3IGVudHJ5IGFuZCBhZGQgaXQgdG8gdGhlIGNhY2hlKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmluZXROZXRUb01lZGlhUm93U3RhdHVzID0gUk9XU1RBVFVTX0FDVElWRTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9sYXN0X3VwZGF0ZWQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChyb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpbmV0TmV0VG9NZWRpYVRhYmxlIGNhY2hlLlxuIik7CisgICAgICAgICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfZW50cnlfZnJlZShhcnBfZW50cnkpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgIF9hcnBfaG9va191cGRhdGUobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MsIG5ldHNubXBfYXJwX2VudHJ5ICplbnRyeSkKK3sKKyAgICBfYWRkX29yX3VwZGF0ZV9hcnBfZW50cnkoZW50cnksIGFjY2Vzcy0+bWFnaWMpOworfQorCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdW5zaWduZWQgZ2VuZXJhdGlvbjsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlOworfSBfY29sbGVjdF9jdHg7CisKKy8qKgorICogUHV0IGFsbCBlbnRyaWVzIHdpdGggb3V0ZGF0ZWQgZ2VuZXJhdGlvbiB0byBkZWxldGlvbiBsaXN0LgorICovCitzdGF0aWMgdm9pZAorX2NvbGxlY3RfaW52YWxpZF9hcnBfY3R4KGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xsZWN0X2N0eCAqY2N0eCkKK3sKKyAgICBpZiAoY3R4LT5kYXRhLT5nZW5lcmF0aW9uICE9IGNjdHgtPmdlbmVyYXRpb24pCisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY2N0eC0+dG9fZGVsZXRlLCBjdHgpOworfQorCitzdGF0aWMgdm9pZCBfYXJwX2hvb2tfZ2MobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IGFjY2Vzcy0+bWFnaWM7CisgICAgX2NvbGxlY3RfY3R4IGNjdHg7CisKKyAgICBjY3R4LnRvX2RlbGV0ZSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImxpZm8iKTsKKyAgICBjY3R4LmdlbmVyYXRpb24gPSBhY2Nlc3MtPmdlbmVyYXRpb247CisKKyAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbGxlY3RfaW52YWxpZF9hcnBfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAmY2N0eCk7CisKKyAgICB3aGlsZSAoQ09OVEFJTkVSX1NJWkUoY2N0eC50b19kZWxldGUpKSB7CisgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJUlNUKGNjdHgudG9fZGVsZXRlKTsKKyAgICAgICAgQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsIGN0eCk7CisgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KGN0eCk7CisgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoY2N0eC50b19kZWxldGUsIE5VTEwpOworICAgIH0KKyAgICBDT05UQUlORVJfRlJFRShjY3R4LnRvX2RlbGV0ZSk7Cit9CisKKy8qKgogICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCiAgKgogICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKQEAgLTEyMCw3MiArMjQxLDE5IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICAvKgotICAgICAqIFRPRE86MzQ1OkE6IFNldCB1cCBpbmV0TmV0VG9NZWRpYVRhYmxlIGNhY2hlIHByb3BlcnRpZXMuCi0gICAgICoKLSAgICAgKiBBbHNvIGZvciBhZHZhbmNlZCB1c2VycywgeW91IGNhbiBzZXQgcGFyYW1ldGVycyBmb3IgdGhlCi0gICAgICogY2FjaGUuIERvIG5vdCBjaGFuZ2UgdGhlIG1hZ2ljIHBvaW50ZXIsIGFzIGl0IGlzIHVzZWQKLSAgICAgKiBieSB0aGUgTUZEIGhlbHBlci4gVG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIHNldAotICAgICAqIGNhY2hlLT5lbmFibGVkIHRvIDAuCi0gICAgICovCi0gICAgY2FjaGUtPnRpbWVvdXQgPSBJTkVUTkVUVE9NRURJQVRBQkxFX0NBQ0hFX1RJTUVPVVQ7IC8qIHNlY29uZHMgKi8KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfaW5pdCAqLwotCi0vKioKLSAqIGNoZWNrIGVudHJ5IGZvciB1cGRhdGUKLSAqCi0gKi8KLXN0YXRpYyB2b2lkCi1fc25hcmZfYXJwX2VudHJ5KG5ldHNubXBfYXJwX2VudHJ5ICphcnBfZW50cnksCi0gICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCi17Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OwotICAgIGludCAgICAgICAgICAgICBpbmV0QWRkcmVzc1R5cGU7Ci0KLSAgICBERUJVR1RSQUNFOwotCi0gICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBhcnBfZW50cnkpOwotICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKLQotICAgIC8qCi0gICAgICogY29udmVydCB0aGUgYWRkciBsZW4gdG8gYW4gaW5ldEFkZHJlc3NUeXBlCi0gICAgICovCi0gICAgc3dpdGNoIChhcnBfZW50cnktPmFycF9pcGFkZHJlc3NfbGVuKSB7Ci0gICAgY2FzZSA0OgotICAgICAgICBpbmV0QWRkcmVzc1R5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIDY6Ci0gICAgICAgIGluZXRBZGRyZXNzVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY2OwotICAgICAgICBicmVhazsKLQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGFycF9lbnRyeSk7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bnN1cHBvcnRlZCBhZGRyZXNzIHR5cGVcbiIpOworICAgIGFycF9hY2Nlc3MgPSBuZXRzbm1wX2FjY2Vzc19hcnBfY3JlYXRlKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfQVJQX0NSRUFURV9OT0ZMQUdTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FycF9ob29rX3VwZGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hcnBfaG9va19nYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZS0+dGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICZjYWNoZS0+ZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmY2FjaGUtPmV4cGlyZWQpOworICAgIGlmIChhcnBfYWNjZXNzID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBjcmVhdGUgYXJwIGFjY2VzcyBpbiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLQotICAgIC8qCi0gICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpLCB0aGVuIGFkZCBpdCB0bwotICAgICAqIHRoZSBjb250YWluZXIKLSAgICAgKi8KLSAgICByb3dyZXFfY3R4ID0gaW5ldE5ldFRvTWVkaWFUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGFycF9lbnRyeSwgTlVMTCk7Ci0gICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpICYmCi0gICAgICAgIChNRkRfU1VDQ0VTUyA9PSBpbmV0TmV0VG9NZWRpYVRhYmxlX2luZGV4ZXNfc2V0Ci0gICAgICAgICAocm93cmVxX2N0eCwgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXgsIGluZXRBZGRyZXNzVHlwZSwKLSAgICAgICAgICAoY2hhciAqKSByb3dyZXFfY3R4LT5kYXRhLT5hcnBfaXBhZGRyZXNzLAotICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmFycF9pcGFkZHJlc3NfbGVuKSkpIHsKLSAgICAgICAgcm93cmVxX2N0eC0+aW5ldE5ldFRvTWVkaWFSb3dTdGF0dXMgPSBST1dTVEFUVVNfQUNUSVZFOwotICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJvd3JlcV9jdHgpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgotICAgICAgICAgICAgICAgICAgICAgImluZXROZXRUb01lZGlhVGFibGUgY2FjaGUuXG4iKTsKLSAgICAgICAgICAgIGluZXROZXRUb01lZGlhVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKGFycF9lbnRyeSk7Ci0gICAgfQotfQorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0ICovCiAKIC8qKgogICogY29udGFpbmVyIHNodXRkb3duCkBAIC0yMDgsMTIgKzI3NiwxNiBAQAogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmluZXROZXRUb01lZGlhVGFibGU6aW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CiAKKyAgICBpZiAoTlVMTCAhPSBhcnBfYWNjZXNzKSB7CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2FycF9kZWxldGUoYXJwX2FjY2Vzcyk7CisgICAgICAgIGFycF9hY2Nlc3MgPSBOVUxMOworICAgIH0KKwogICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfc2h1dGRvd25cbiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIC8qKgpAQCAtMjUyLDM3ICszMjQsMTEgQEAKIGludAogaW5ldE5ldFRvTWVkaWFUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQogewotICAgIG5ldHNubXBfY29udGFpbmVyICphcnBfY29udGFpbmVyOwotCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aW5ldE5ldFRvTWVkaWFUYWJsZTppbmV0TmV0VG9NZWRpYVRhYmxlX2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CiAKLSAgICAvKgotICAgICAqIFRPRE86MzUxOk06IHwtPiBMb2FkL3VwZGF0ZSBkYXRhIGluIHRoZSBpbmV0TmV0VG9NZWRpYVRhYmxlIGNvbnRhaW5lci4KLSAgICAgKiBsb29wIG92ZXIgeW91ciBpbmV0TmV0VG9NZWRpYVRhYmxlIGRhdGEsIGFsbG9jYXRlIGEgcm93cmVxIGNvbnRleHQsCi0gICAgICogc2V0IHRoZSBpbmRleChlcykgW2FuZCBkYXRhLCBvcHRpb25hbGx5XSBhbmQgaW5zZXJ0IGludG8KLSAgICAgKiB0aGUgY29udGFpbmVyLgotICAgICAqLwotICAgIGFycF9jb250YWluZXIgPQotICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2xvYWQoTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQUNDRVNTX0FSUF9MT0FEX05PRkxBR1MpOwotICAgIGlmIChOVUxMID09IGFycF9jb250YWluZXIpCi0gICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7ICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KLQotICAgIC8qCi0gICAgICogd2UganVzdCBnb3QgYSBmcmVzaCBjb3B5IG9mIGRhdGEuIHNuYXJmIGRhdGEKLSAgICAgKi8KLSAgICBDT05UQUlORVJfRk9SX0VBQ0goYXJwX2NvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9zbmFyZl9hcnBfZW50cnksCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7Ci0KLSAgICAvKgotICAgICAqIGZyZWUgdGhlIGNvbnRhaW5lci4gd2UndmUgZWl0aGVyIGNsYWltZWQgZWFjaCBlbnRyeSwgb3IgcmVsZWFzZWQgaXQsCi0gICAgICogc28gdGhlIGFjY2VzcyBmdW5jdGlvbiBkb2Vzbid0IG5lZWQgdG8gY2xlYXIgdGhlIGNvbnRhaW5lci4KLSAgICAgKi8KLSAgICBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUoYXJwX2NvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfRE9OVF9DTEVBUik7Ci0KLSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmluZXROZXRUb01lZGlhVGFibGU6aW5ldE5ldFRvTWVkaWFUYWJsZV9jYWNoZV9sb2FkIiwgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICBhcnBfYWNjZXNzLT5tYWdpYyA9IGNvbnRhaW5lcjsKKyAgICBpZiAobmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQoYXJwX2FjY2VzcykgPCAwKQorICAgICAgICByZXR1cm4gTUZEX0VSUk9SOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9sb2FkICovCkBAIC0zMDUsNiArMzUxLDExIEBACiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aW5ldE5ldFRvTWVkaWFUYWJsZTppbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9mcmVlIiwgImNhbGxlZFxuIikpOwogCisgICAgaWYgKE5VTEwgIT0gYXJwX2FjY2VzcykgeworICAgICAgICBuZXRzbm1wX2FjY2Vzc19hcnBfdW5sb2FkKGFycF9hY2Nlc3MpOworICAgICAgICBhcnBfYWNjZXNzLT5tYWdpYyA9IE5VTEw7CisgICAgfQorCiAgICAgLyoKICAgICAgKiBUT0RPOjM4MDpNOiBGcmVlIGluZXROZXRUb01lZGlhVGFibGUgY29udGFpbmVyIGRhdGEuCiAgICAgICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2luZXROZXRUb01lZGlhVGFibGUvaW5ldE5ldFRvTWVkaWFUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA0MmViY2MwLi5jMTg2ODlhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaW5ldE5ldFRvTWVkaWFUYWJsZS9pbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pbmV0TmV0VG9NZWRpYVRhYmxlL2luZXROZXRUb01lZGlhVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE5IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldE5ldFRvTWVkaWFUYWJsZV9leHRlcm5hbF9hY2Nlc3MsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfY29udGFpbmVyX3Jvd19pbnNlcnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NpemUsIGluZXROZXRUb01lZGlhVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaW5ldE5ldFRvTWVkaWFUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpbmV0TmV0VG9NZWRpYVRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9nZXQsIGluZXROZXRUb01lZGlhVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgyLDE5ICs5NiwyMyBAQAogICAgICAgICAgICAgICAgIF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpbmV0TmV0VG9NZWRpYVRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiBpbmV0TmV0VG9NZWRpYVRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRORVRUT01FRElBVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb24gKgogaW5ldE5ldFRvTWVkaWFUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGluZXROZXRUb01lZGlhVGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uICoKIGluZXROZXRUb01lZGlhVGFibGVfcmVnaXN0cmF0aW9uX3NldChpbmV0TmV0VG9NZWRpYVRhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKQpAQCAtMTA0LDEyICsxMjIsMTUgQEAKICAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5FVE5FVFRPTUVESUFUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaW5ldE5ldFRvTWVkaWFUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lORVRORVRUT01FRElBVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogdV9pbnQKIGluZXROZXRUb01lZGlhVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzMsNyArMTU0LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfcG9zdF9yZXF1ZXN0Owogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9vYmplY3RfbG9va3VwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX29iamVjdHM7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3VuZG9fc2V0dXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDksNyArMTcwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLCBpbnQgY29sdW1uKTsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAogICAgICAgICAgICAgICAgIF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX2luZGV4ZXMoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICoKQEAgLTE5Miw3ICsyMTMsNyBAQAogCiAgICAgLyoKICAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAqIG9wdGltaXplcyByZXRyaXZhbC4gCisgICAgICogb3B0aW1pemVzIHJldHJpZXZhbC4gCiAgICAgICovCiAgICAgdGJsX2luZm8tPm1pbl9jb2x1bW4gPSBJTkVUTkVUVE9NRURJQVRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJTkVUTkVUVE9NRURJQVRBQkxFX01BWF9DT0w7CkBAIC0yMzIsNyArMjUzLDcgQEAKICAgICAgICAgX21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3Bvc3RfcmVxdWVzdDsKIAogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjU3LDcgKzI3OCw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjkzLDcgKzMxNCw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMTYsNyArMzM3LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTY5MCw3ICs3MTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTczNSw2ICs3NTYsNyBAQAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfcG9zdF9yZXF1ZXN0ICovCiAKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIHdyYXBwZXIKQEAgLTgwOCw3ICs4MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC05NDYsNyArOTY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTEwOTYsNyArMTExOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jdHgsIHJvd3JlcV9jdHgpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaW5ldE5ldFRvTWVkaWFUYWJsZV9jaGVja19pbmRleGVzICovCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEyNTcsNyArMTI3OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtMTMwNSw3ICsxMzI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyIsICJjYWxsZWRcbiIpKTsKIApAQCAtMTM5MSw3ICsxNDEzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3VuZG9fc2V0dXAiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNDU2LDcgKzE0NzgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCkBAIC0xNTYyLDcgKzE1ODQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNjEwLDcgKzE2MzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNjQ0LDcgKzE2NjYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpbmV0TmV0VG9NZWRpYVRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmluZXROZXRUb01lZGlhVGFibGU6X21mZF9pbmV0TmV0VG9NZWRpYVRhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTczOCw3ICsxNzYwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogCkBAIC0xNzkzLDcgKzE4MTUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLCBuZXRzbm1wX3JlcXVlc3RfaW5mbwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RzKQogewotICAgIGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppbmV0TmV0VG9NZWRpYVRhYmxlOl9tZmRfaW5ldE5ldFRvTWVkaWFUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTgyMCw3ICsxODQyLDcgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2luZXROZXRUb01lZGlhVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xOTQ2LDkgKzE5NjgsMTIgQEAKICAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKIAogICAgIGluZXROZXRUb01lZGlhVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKLSAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgewogICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CiAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpbmV0TmV0VG9NZWRpYVRhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgICAgICBpZiAoaWZfY3R4LT5jb250YWluZXIpCisgICAgICAgICAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImluZXROZXRUb01lZGlhVGFibGUiKTsKKyAgICB9CiAgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCiAgICAgICAgICAgICAgICAgICJpbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKQEAgLTE5NzYsNiArMjAwMSw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pbmV0TmV0VG9NZWRpYVRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaW5ldE5ldFRvTWVkaWFUYWJsZV9yb3dyZXFfY3R4ICoKIGluZXROZXRUb01lZGlhVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGluZXROZXRUb01lZGlhVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC0xOTk4LDggKzIwMjQsOSBAQAogICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICByb3dyZXFfY3R4ID0KKyAgICByb3dyZXFfY3R4ID0gKGluZXROZXRUb01lZGlhVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKGluZXROZXRUb01lZGlhVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTkVUTkVUVE9NRURJQVRBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYwppbmRleCAxNmUyMjAwLi5mNGJiMDg1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRbXSA9IHsgSVBBRERSRVNTUFJFRklYVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZFtdID0geyBJUEFERFJFU1NQUkVGSVhUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZCk7CiAKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbiBpcEFkZHJlc3NQcmVmaXhUYWJsZV91c2VyX2NvbnRleHQ7CkBAIC0yNTUsNyArMjU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NQcmVmaXhJZkluZGV4X3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0cl9sZW4sCkBAIC0zMTgsNyArMzE4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwQWRkcmVzc1ByZWZpeElmSW5kZXhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhMZW5ndGhfdmFsKQogewpAQCAtMzk1LDEwICszOTUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcEFkZHJlc3NQcmVmaXhPcmlnaW4gZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwQWRkcmVzc1ByZWZpeE9yaWdpbl92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCi0gICAgKCppcEFkZHJlc3NQcmVmaXhPcmlnaW5fdmFsX3B0cikgPQotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeE9yaWdpbjsKLQotICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKKyAgICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeE9yaWdpbl92YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuaXBBZGRyZXNzUHJlZml4T3JpZ2luOworICAgIAorICAgICAgICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwQWRkcmVzc1ByZWZpeE9yaWdpbl9nZXQgKi8KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTU5NCw3ICs1OTMsNyBAQAogICAgICAqIGNvcHkgKCogaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLwogICAgIGlmIChJTkVUQUREUkVTU1RZUEVfSVBWNCA9PSByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc1ByZWZpeFR5cGUpCi0gICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1OyAgICAvKiBwZXIgTUlCICovCisgICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1VTsgICAgLyogcGVyIE1JQiAqLwogICAgIGVsc2UKICAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZV92YWxfcHRyKSA9CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeEFkdlByZWZlcnJlZExpZmV0aW1lOwpAQCAtNjYxLDcgKzY2MCw3IEBACiAgICAgICogY29weSAoKiBpcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KICAgICBpZiAoSU5FVEFERFJFU1NUWVBFX0lQVjQgPT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NQcmVmaXhUeXBlKQotICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1OyAgICAgICAgLyogcGVyIE1JQiAqLworICAgICAgICAoKmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWVfdmFsX3B0cikgPSA0Mjk0OTY3Mjk1VTsgICAgICAgIC8qIHBlciBNSUIgKi8KICAgICBlbHNlCiAgICAgICAgICgqaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZV92YWxfcHRyKSA9CiAgICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmlwQWRkcmVzc1ByZWZpeEFkdlZhbGlkTGlmZXRpbWU7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCmluZGV4IGRmZTk3M2UuLjI0YjIyYTIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZS5oCkBAIC0yMTEsOCArMjExLDggQEAKICAgICAgICAgKiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKICAgICAgICAgKGlwQWRkcmVzc1ByZWZpeFRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuaCIKQEAgLTI3MSw3ICsyNzEsNyBAQAogICAgICAgICBpcEFkZHJlc3NQcmVmaXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CiAgICAgICAgIChpcEFkZHJlc3NQcmVmaXhUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAogICAgICAgICAgbG9uZyBpcEFkZHJlc3NQcmVmaXhJZkluZGV4X3ZhbCwgdV9sb25nIGlwQWRkcmVzc1ByZWZpeFR5cGVfdmFsLAotICAgICAgICAgY2hhciAqaXBBZGRyZXNzUHJlZml4UHJlZml4X3ZhbF9wdHIsCisgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyLAogICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyX2xlbiwKICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NQcmVmaXhMZW5ndGhfdmFsKTsKICAgICBpbnQKQEAgLTI3OSw3ICsyNzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwQWRkcmVzc1ByZWZpeElmSW5kZXhfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzUHJlZml4VHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICppcEFkZHJlc3NQcmVmaXhQcmVmaXhfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeFByZWZpeF92YWxfcHRyX2xlbiwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9jb25zdGFudHMuaAppbmRleCA2NmYyMTA5Li41ZWNhZGU0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfY29uc3RhbnRzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnN0YW50cy5oCkBAIC0xMzcsMyArMTM3LDE3IEBACiB9CiAjZW5kaWYKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBBRERSRVNTUFJFRklYVEFCTEVfT0lEU19IICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBBZGRpdGlvbmFsIGNvbnN0YW50cyBhbmQgZGVmaW5pdGlvbnMgZm9yIGNvbW1vbiBpbXBsZW1lbnRhdGlvbgorKi8KKyNkZWZpbmUgSU5GSU5JVFlfTElGRV9USU1FICAgICAgMHhGRkZGRkZGRlUKKyNkZWZpbmUgTklQNihhZGRyKSBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMF0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMV0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbMl0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbM10pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNF0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNV0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbNl0pLCBcCisgICAgICAgIG50b2hzKChhZGRyKS5zNl9hZGRyMTZbN10pCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMmY2NGNiZS4uNDQzNzgyOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0yMSw2ICsyMiwxMCBAQAogCiAjaW5jbHVkZSAiaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9nZXQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfY29tbW9uX2NvcHlfdXRpbGl0aWVzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX3ByZWZpeF9jb3B5KQorCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCiAgKgpAQCAtMjAyLDcgKzIwNyw3IEBACiAgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqYWRkcl9yb3dyZXFfY3R4OwogICAgIG5ldHNubXBfY29udGFpbmVyICphZGRyX2NvbnRhaW5lcjsKICAgICBuZXRzbm1wX2l0ZXJhdG9yICphZGRyX2l0OwotICAgIHNpemVfdCAgICAgICAgICBjb3VudCA9IDA7CisgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMDsKICAgICB1X2NoYXIgICAgICAgICAgdG1wX3BmeFtORVRTTk1QX0FDQ0VTU19JUEFERFJFU1NfQlVGX1NJWkVdOwogCiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBBZGRyZXNzUHJlZml4VGFibGU6aXBBZGRyZXNzUHJlZml4VGFibGVfY29udGFpbmVyX2xvYWQiLCAiY2FsbGVkXG4iKSk7CkBAIC0yNTEsNiArMjU2LDIzIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlhX2FkZHJlc3NfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPmRhdGEtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9wcmVmaXhfbGVuKTsKKyAgICAgICAgbmV0c25tcF9pcGFkZHJlc3NfZmxhZ3NfY29weSgmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NQcmVmaXhBZHZWYWxpZExpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT5kYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvd3JlcV9jdHgtPmRhdGEuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcsICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9wcmVmZXJlZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV92YWxpZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9vbmxpbmtfZmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9hdXRvbm9tb3VzX2ZsYWcpOworCiAgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPQogICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4VGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CkBAIC0yNzgsOCArMzAwLDE0IEBACiAgICAgICAgICAqIFRPRE86MzUyOnI6IHwgICB8LT4gcG9wdWxhdGUgaXBBZGRyZXNzUHJlZml4VGFibGUgZGF0YSBjb250ZXh0LgogICAgICAgICAgKiBQb3B1bGF0ZSBkYXRhIGNvbnRleHQgaGVyZS4gKG9wdGlvbmFsbHksIGRlbGF5IHVudGlsIHJvdyBwcmVwKQogICAgICAgICAgKi8KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5pcEFkZHJlc3NQcmVmaXhPcmlnaW4gPQotICAgICAgICAgICAgYWRkcl9yb3dyZXFfY3R4LT5kYXRhLT5pYV9vcmlnaW47CisgICAgICAgICAgIG5ldHNubXBfaXBhZGRyZXNzX3ByZWZpeF9vcmlnaW5fY29weSgmcm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1ByZWZpeE9yaWdpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZHJfcm93cmVxX2N0eC0+ZGF0YS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpYV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPmRhdGEtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX3Jvd3JlcV9jdHgtPnRibF9pZHguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZSk7CiAKICAgICAgICAgLyoqIGRlZmVyIHRoZSByZXN0IHRpbCByb3cgcHJlcCAqLwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzUHJlZml4VGFibGUvaXBBZGRyZXNzUHJlZml4VGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMTkwOWE0Yi4uZTE0YTMzNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1ByZWZpeFRhYmxlL2lwQWRkcmVzc1ByZWZpeFRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NQcmVmaXhUYWJsZS9pcEFkZHJlc3NQcmVmaXhUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTYgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NwcmVmaXh0YWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgsIGlwYWRkcmVzc3ByZWZpeHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcGFkZHJlc3NwcmVmaXh0YWJsZV9jb250YWluZXJfZ2V0LCBpcGFkZHJlc3NwcmVmaXh0YWJsZV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBhZGRyZXNzcHJlZml4dGFibGVfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1ByZWZpeFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwYWRkcmVzc3ByZWZpeHRhYmxlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NQcmVmaXhUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBhZGRyZXNzcHJlZml4dGFibGVfYWxsKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgxLDE4ICs5MiwyMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZl9jdHgpOwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQWRkcmVzc1ByZWZpeFRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzUHJlZml4VGFibGVfcmVnaXN0cmF0aW9uX3NldChpcEFkZHJlc3NQcmVmaXhUYWJsZV9yZWdpc3RyYXRpb24gKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDIsMTIgKzExOCwxNSBAQAogICAgIGlwQWRkcmVzc1ByZWZpeFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTUFJFRklYVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaXBBZGRyZXNzUHJlZml4VGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBBZGRyZXNzUHJlZml4VGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiAvKgogICogbWZkIG11bHRpcGxleGVyIG1vZGVzCkBAIC0xNTUsNyArMTc0LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBBRERSRVNTUFJFRklYVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQQUREUkVTU1BSRUZJWFRBQkxFX01BWF9DT0w7CkBAIC0yMjksNyArMjQ4LDggQEAKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOwogCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKKyAgICAvKiBYWFggLSBhcmUgdGhlc2UgYWN0dWFsbHkgbmVjZXNzYXJ5PyAqLwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMjUyLDcgKzI3Miw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC04NDksNyArODY5LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcEFkZHJlc3NQcmVmaXhUYWJsZV9nZXRfdmFsdWVzICovCiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTAxNCw2ICsxMDM0LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwQWRkcmVzc1ByZWZpeFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NQUkVGSVhUQUJMRV9ST1dfRklORF9CWV9NSUJfSU5ERVgKIGlwQWRkcmVzc1ByZWZpeFRhYmxlX3Jvd3JlcV9jdHggKgogaXBBZGRyZXNzUHJlZml4VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwQWRkcmVzc1ByZWZpeFRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTEwNDEsMyArMTA2Miw0IEBACiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1BSRUZJWFRBQkxFX1JPV19GSU5EX0JZX01JQl9JTkRFWCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYwppbmRleCA4NDhjNjNkLi5kZWZmNGU5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuYwpAQCAtMTQsNiArMTQsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMjgsOCArMjksMTIgQEAKIAogI2luY2x1ZGUgImlwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXBBZGRyZXNzVGFibGVfb2lkW10gPSB7IElQQUREUkVTU1RBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlwQWRkcmVzc1RhYmxlX29pZF9zaXplID0gT0lEX0xFTkdUSChpcEFkZHJlc3NUYWJsZV9vaWQpOworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaXBhZGRyZXNzX2VudHJ5X2NvcHkpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpcGFkZHJlc3NfcHJlZml4X2NvcHkpCisKK2NvbnN0IG9pZCAgICAgICBpcEFkZHJlc3NUYWJsZV9vaWRbXSA9IHsgSVBBRERSRVNTVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXBBZGRyZXNzVGFibGVfb2lkX3NpemUgPSBPSURfTEVOR1RIKGlwQWRkcmVzc1RhYmxlX29pZCk7CiAKIGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbiBpcEFkZHJlc3NUYWJsZV91c2VyX2NvbnRleHQ7CiBzdGF0aWMgaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uICppcEFkZHJlc3NUYWJsZV91c2VyX2NvbnRleHRfcDsKQEAgLTMzMyw4ICszMzgsOCBAQAogICogIE90aGVyd2lzZSwganVzdCBkbyBhIGRpcmVjdCBjb3B5LgogICovCiBpbnQKLWlwQWRkcmVzc0FkZHJUeXBlX21hcCh1X2xvbmcgKiBtaWJfaXBBZGRyZXNzQWRkclR5cGVfdmFsX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgcmF3X2lwQWRkcmVzc0FkZHJUeXBlX3ZhbCkKK2lwQWRkcmVzc0FkZHJUeXBlX21hcChsb25nICogbWliX2lwQWRkcmVzc0FkZHJUeXBlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgbG9uZyByYXdfaXBBZGRyZXNzQWRkclR5cGVfdmFsKQogewogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gbWliX2lwQWRkcmVzc0FkZHJUeXBlX3ZhbF9wdHIpOwogCkBAIC0zODIsOCArMzg3LDggQEAKICAqLwogaW50CiBpcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwQWRkcmVzc1RhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaXBBZGRyZXNzQWRkcl92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXBBZGRyZXNzQWRkcl92YWxfcHRyX2xlbikKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcEFkZHJlc3NUYWJsZTppcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4IiwgImNhbGxlZFxuIikpOwpAQCAtNDMxLDcgKzQzNiw3IEBACiBpbnQKIGlwQWRkcmVzc1RhYmxlX2luZGV4ZXNfc2V0KGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc0FkZHJUeXBlX3ZhbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaXBBZGRyZXNzQWRkcl92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGlwQWRkcmVzc0FkZHJfdmFsX3B0cl9sZW4pCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBBZGRyZXNzVGFibGU6aXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXQiLApAQCAtNjI2LDcgKzYzMSw3IEBACiAgICAgb2lkICAgICAgICAgICAgKmRzdCwgdG1wX29pZFtNQVhfT0lEX0xFTl0gPQogICAgICAgICB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1IH07CiAgICAgdV9jaGFyICAgICAgICAgIHRtcF9idWZbTkVUU05NUF9BQ0NFU1NfSVBBRERSRVNTX0JVRl9TSVpFXTsKLSAgICBpbnQgICAgICAgICAgICAgbGVuOworICAgIHNpemVfdCAgICAgICAgICBsZW47CiAKICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCiAgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKQpAQCAtNjU3LDcgKzY2Miw3IEBACiAKICAgICBsZW4gKj0gc2l6ZW9mKCgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKVswXSk7CiAgICAgaWYgKCgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfbGVuX3B0cikgPCBsZW4pIHsKLSAgICAgICAgKCppcEFkZHJlc3NQcmVmaXhfdmFsX3B0cl9wdHIpID0gbWFsbG9jKGxlbik7CisgICAgICAgICgqaXBBZGRyZXNzUHJlZml4X3ZhbF9wdHJfcHRyKSA9IChvaWQqKW1hbGxvYyhsZW4pOwogICAgICAgICBpZiAoTlVMTCA9PSAoKmlwQWRkcmVzc1ByZWZpeF92YWxfcHRyX3B0cikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKICAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CkBAIC05NDQsNyArOTQ5LDEwIEBACiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcEFkZHJlc3NSb3dTdGF0dXNfdmFsX3B0cik7CiAKICAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSAqLwotICAgICgqaXBBZGRyZXNzUm93U3RhdHVzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+aXBBZGRyZXNzUm93U3RhdHVzOworICAgIGlmKHJvd3JlcV9jdHgtPmRhdGEtPmlmX2luZGV4KQorICAgICAgICgqaXBBZGRyZXNzUm93U3RhdHVzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+aXBBZGRyZXNzUm93U3RhdHVzOworICAgIGVsc2UKKyAgICAgICAoKmlwQWRkcmVzc1Jvd1N0YXR1c192YWxfcHRyKSA9IFJPV1NUQVRVU19OT1RSRUFEWTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBBZGRyZXNzUm93U3RhdHVzX2dldCAqLwpAQCAtMTQ2OSw3ICsxNDc3LDcgQEAKICAgICAvKgogICAgICAqIGlmIHRoZSBuZXcgdmFsdWUgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZCwgYWNjZXB0IGl0LgogICAgICAqLwotICAgIGlmIChpcEFkZHJlc3NJZkluZGV4X3ZhbCA9PSByb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCkKKyAgICBpZiAoaXBBZGRyZXNzSWZJbmRleF92YWwgPT0gKGxvbmcpcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXgpCiAgICAgICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIAogICAgIC8qCkBAIC0xNDg2LDcgKzE0OTQsNyBAQAogICAgICAqIGZpbmQgbmFtZSBmb3IgaWZJbmRleAogICAgICAqLwogICAgIGlmIChOVUxMID09IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9uYW1lX2ZpbmQoaXBBZGRyZXNzSWZJbmRleF92YWwpKSB7Ci0gICAgICAgIERFQlVHTVNHVCgoImlwQWRkcmVzc1RhYmxlIiwgImNhbnQgZmluZCBuYW1lIGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgREVCVUdNU0dUKCgiaXBBZGRyZXNzVGFibGUiLCAiY2FudCBmaW5kIG5hbWUgZm9yIGluZGV4ICVsZFxuIiwKICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NJZkluZGV4X3ZhbCkpOwogICAgICAgICByZXR1cm4gTUZEX05PVF9WQUxJRF9OT1c7CiAgICAgfQpAQCAtMTU1Niw4ICsxNTY0LDggQEAKICAgICAgKiBUT0RPOjQ2MTpNOiB8LT4gU2V0IGlwQWRkcmVzc0lmSW5kZXggdmFsdWUuCiAgICAgICogc2V0IGlwQWRkcmVzc0lmSW5kZXggdmFsdWUgaW4gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLwotICAgIGlmIChyb3dyZXFfY3R4LT5kYXRhLT5pZl9pbmRleCAhPSBpcEFkZHJlc3NJZkluZGV4X3ZhbCkKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggPSBpcEFkZHJlc3NJZkluZGV4X3ZhbDsKKyAgICBpZiAocm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggIT0gKG9pZClpcEFkZHJlc3NJZkluZGV4X3ZhbCkKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWZfaW5kZXggID0gKG9pZClpcEFkZHJlc3NJZkluZGV4X3ZhbDsKICAgICBlbHNlCiAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgJj0gfkNPTFVNTl9JUEFERFJFU1NJRklOREVYX0ZMQUc7CiAKQEAgLTIwMzIsNyArMjA0MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NSb3dTdGF0dXNfdmFsKTsKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKICAgICAgICAgREVCVUdNU0dUTCgoImlwQWRkcmVzc1RhYmxlIiwKLSAgICAgICAgICAgICAgICAgICAgInJvdyBzdGF0dXMgdHJhbnNpdGlvbiBmcm9tICVkIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAicm93IHN0YXR1cyB0cmFuc2l0aW9uIGZyb20gJWQgdG8gJWx1XG4iLAogICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LT5pcEFkZHJlc3NSb3dTdGF0dXMsCiAgICAgICAgICAgICAgICAgICAgIGlwQWRkcmVzc1Jvd1N0YXR1c192YWwpKTsKICAgICAgICAgcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAppbmRleCA1MGFkMTg4Li5mZThmMDRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGUuaApAQCAtOTYsMTMgKzk2LDEzIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGlwQWRkcmVzc0FkZHJUeXBlKDEpL0luZXRBZGRyZXNzVHlwZS9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2gKICAgICAgICAgICovCi0gICAgICAgIHVfbG9uZyAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZTsKKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwQWRkcmVzc0FkZHJUeXBlOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGlwQWRkcmVzc0FkZHIoMikvSW5ldEFkZHJlc3MvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML2Evdy9lL1IvZC9oCiAgICAgICAgICAqLwogICAgICAgICAvKiogMTI4IC0gMShvdGhlciBpbmRleGVzKSAtIG9pZCBsZW5ndGgoMTApID0gMTE2ICovCi0gICAgICAgIGNoYXIgICAgICAgICAgICBpcEFkZHJlc3NBZGRyWzExNl07CisgICAgICAgIHVfY2hhciAgICAgICAgICBpcEFkZHJlc3NBZGRyWzExNl07CiAgICAgICAgIHNpemVfdCAgICAgICAgICBpcEFkZHJlc3NBZGRyX2xlbjsKIAogCkBAIC0xOTcsOCArMTk3LDggQEAKICAgICAgICAgKiBpcEFkZHJlc3NUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBBZGRyZXNzVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXBBZGRyZXNzVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIGlwQWRkcmVzc1RhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcEFkZHJlc3NUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBBZGRyZXNzVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgImlwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5oIgpAQCAtMjI3LDkgKzIyNyw5IEBACiAgICAgLyoKICAgICAgKiBpbmRleGVzCiAgICAgICovCi0gICAgaW50ICAgICAgICAgICAgIGlwQWRkcmVzc0FkZHJUeXBlX21hcCh1X2xvbmcgKgorICAgIGludCAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZV9tYXAobG9uZyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaXBBZGRyZXNzQWRkclR5cGVfdmFsX3B0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF3X2lwQWRkcmVzc0FkZHJUeXBlX3ZhbCk7CiAKICAgICBpbnQgICAgICAgICAgICAgaXBBZGRyZXNzSWZJbmRleF9nZXQoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqCkBAIC0yNzAsMTUgKzI3MCwxNSBAQAogICAgIGludAogICAgICAgICBpcEFkZHJlc3NUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwQWRkcmVzc1RhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgaXBBZGRyZXNzQWRkclR5cGVfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwQWRkcmVzc0FkZHJUeXBlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAgaXBBZGRyZXNzVGFibGVfaW5kZXhlc19zZXQoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyVHlwZV92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmlwQWRkcmVzc0FkZHJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICppcEFkZHJlc3NBZGRyX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NBZGRyX3ZhbF9wdHJfbGVuKTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBhMGQ4YzRhLi5kODBiM2U3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtOCw2ICs4LDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTIyLDYgKzIzLDggQEAKICNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlmbykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGlwYWRkcmVzc19lbnRyeV91cGRhdGUpCiAKIC8qKiBAaW5ncm91cCBpbnRlcmZhY2UgCiAgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKQEAgLTEzNCw2ICsxMzcsNyBAQAogICAgICpjb250YWluZXJfcHRyX3B0ciA9CiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlwQWRkcmVzc1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOwogICAgIGlmIChOVUxMICE9ICpjb250YWluZXJfcHRyX3B0cikgeworICAgICAgICAoKmNvbnRhaW5lcl9wdHJfcHRyKS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwQWRkcmVzc1RhYmxlIik7CiAgICAgICAgIGlwQWRkcmVzc1RhYmxlX2NvbnRhaW5lcl9sb2FkKCpjb250YWluZXJfcHRyX3B0cik7CiAgICAgICAgIENPTlRBSU5FUl9GT1JfRUFDSCgqY29udGFpbmVyX3B0cl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NsZWFyX3RpbWVzLApAQCAtMjAxLDEzICsyMDUsMTMgQEAKIF9jaGVja19lbnRyeV9mb3JfdXBkYXRlcyhpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqbWFnaWMpCiB7Ci0gICAgbmV0c25tcF9jb250YWluZXIgKmlwYWRkcmVzc19jb250YWluZXIgPSBtYWdpY1swXTsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlID0gKG5ldHNubXBfY29udGFpbmVyICopIG1hZ2ljWzFdOworICAgIG5ldHNubXBfY29udGFpbmVyICppcGFkZHJlc3NfY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyKiltYWdpY1swXTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG9fZGVsZXRlICAgICAgICAgICA9IChuZXRzbm1wX2NvbnRhaW5lciopbWFnaWNbMV07CiAKICAgICAvKgogICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeSB1c2luZyBzZWNvbmRhcnkgaW5kZXguCiAgICAgICovCi0gICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmlwYWRkcmVzc19lbnRyeSA9CisgICAgbmV0c25tcF9pcGFkZHJlc3NfZW50cnkgKmlwYWRkcmVzc19lbnRyeSA9IChuZXRzbm1wX2lwYWRkcmVzc19lbnRyeSopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKGlwYWRkcmVzc19jb250YWluZXIsIHJvd3JlcV9jdHgtPmRhdGEpOwogICAgIGlmIChOVUxMID09IGlwYWRkcmVzc19lbnRyeSkgewogICAgICAgICBERUJVR01TR1RMKCgiaXBBZGRyZXNzVGFibGU6YWNjZXNzIiwgInJlbW92aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKQEAgLTI1OSw3ICsyNjMsNyBAQAogICAgICAgICAoTUZEX1NVQ0NFU1MgPT0KICAgICAgICAgIGlwQWRkcmVzc1RhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJlc3NfZW50cnktPmlhX2FkZHJlc3NfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKikgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyZXNzX2VudHJ5LT5pYV9hZGRyZXNzX2xlbikpKSB7CiAgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCkgPCAwKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMICgoImlwQWRkcmVzc1RhYmxlOmFjY2VzcyIsImNvbnRhaW5lciBpbnNlcnQgZmFpbGVkIGZvciBuZXcgZW50cnlcbiIpKTsKQEAgLTM3OSw3ICszODMsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGdldCBmcm9tIGRlbGV0ZSBsaXN0CiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHRtcF9jdHggPSBDT05UQUlORVJfRklSU1QodG1wX2NvbnRhaW5lcik7CisgICAgICAgICAgICB0bXBfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKUNPTlRBSU5FUl9GSVJTVCh0bXBfY29udGFpbmVyKTsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHJlbGVhc2UgY29udGV4dCwgZGVsZXRlIGZyb20gdGFibGUgY29udGFpbmVyCkBAIC0zOTUsNyArMzk5LDcgQEAKICAgICB9CiAKICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwQWRkcmVzc1RhYmxlOmlwQWRkcmVzc1RhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlbHUgcmVjb3Jkc1xuIiwgKHVuc2lnbmVkIGxvbmcpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfQpAQCAtNjcyLDkgKzY3Niw5IEBACiAgICAgICogVE9ETzo0MzA6TTogfC0+IFZhbGlkYXRlIHBvdGVudGlhbCBpcEFkZHJlc3NUYWJsZSBpbmRleC4KICAgICAgKgogICAgICAqCi0gICAgICogeHh4LXJrczogd2Ugb25seSBwbGFuIGlwdjQgc3VwcG9ydCBpbml0aWFsbHkKICAgICAgKi8KLSAgICBpZiAoKDQgIT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyX2xlbikpIHsKKyAgICBpZiAoKDQgIT0gcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyX2xlbikKKyAgICAgICAgICAgICYmICgxNiAhPSByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJfbGVuKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgImludmFsaWQgaW5kZXggZm9yIGEgbmV3IHJvdyBpbiB0aGUgIgogICAgICAgICAgICAgICAgICAiaXBBZGRyZXNzVGFibGUgdGFibGUuXG4iKTsKICAgICAgICAgLyoKQEAgLTY5MSwxNSArNjk1LDkgQEAKICAgICAgICAgICAgIHJldHVybiBNRkRfQ0FOTk9UX0NSRUFURV9OT1c7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzWzBdID0KLSAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkclswXTsKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc1sxXSA9Ci0gICAgICAgICAgICByb3dyZXFfY3R4LT50YmxfaWR4LmlwQWRkcmVzc0FkZHJbMV07Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPmlhX2FkZHJlc3NbMl0gPQotICAgICAgICAgICAgcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyWzJdOwotICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzWzNdID0KLSAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkclszXTsKLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzc19sZW4gPSA0OworICAgICAgICBtZW1jcHkocm93cmVxX2N0eC0+ZGF0YS0+aWFfYWRkcmVzcywgcm93cmVxX2N0eC0+dGJsX2lkeC5pcEFkZHJlc3NBZGRyLAorICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkcl9sZW4pOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5pYV9hZGRyZXNzX2xlbiA9IHJvd3JlcV9jdHgtPnRibF9pZHguaXBBZGRyZXNzQWRkcl9sZW47CiAgICAgfQogCiAgICAgcmV0dXJuIHJjOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwQWRkcmVzc1RhYmxlL2lwQWRkcmVzc1RhYmxlX2ludGVyZmFjZS5jCmluZGV4IDBjODUwNzMuLjQ4NzcwYjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcEFkZHJlc3NUYWJsZS9pcEFkZHJlc3NUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBBZGRyZXNzVGFibGUvaXBBZGRyZXNzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE5IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwQWRkcmVzc1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwQWRkcmVzc1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpcEFkZHJlc3NUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX2dldCwgaXBBZGRyZXNzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgwLDE5ICs5NCwyMyBAQAogc3RhdGljIHZvaWQKICAgICAgICAgICAgICAgICBfaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwQWRkcmVzc1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9DT05UQUlORVJfR0VUCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBpcEFkZHJlc3NUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwQWRkcmVzc1RhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9DT05UQUlORVJfR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQogewogICAgIHJldHVybiBpcEFkZHJlc3NUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9SRUdJU1RSQVRJT05fU0VUCiBpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBBZGRyZXNzVGFibGVfcmVnaXN0cmF0aW9uX3NldChpcEFkZHJlc3NUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpCiB7CkBAIC0xMDAsMTIgKzExOCwxNSBAQAogICAgIGlwQWRkcmVzc1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBBRERSRVNTVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBBZGRyZXNzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUEFERFJFU1NUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogaXBBZGRyZXNzVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMjksNyArMTUwLDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX3Bvc3RfcmVxdWVzdDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX29iamVjdF9sb29rdXA7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcEFkZHJlc3NUYWJsZV9jaGVja19vYmplY3RzOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBBZGRyZXNzVGFibGVfdW5kb19zZXR1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwQWRkcmVzc1RhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDQsNyArMTY1LDcgQEAKICAgICAgICAgICAgICAgICBfaXBBZGRyZXNzVGFibGVfdW5kb19jb2x1bW4oaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbHVtbik7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKICAgICAgICAgICAgICAgICBfaXBBZGRyZXNzVGFibGVfY2hlY2tfaW5kZXhlcyhpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CkBAIC0xODQsNyArMjA1LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBBRERSRVNTVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQQUREUkVTU1RBQkxFX01BWF9DT0w7CkBAIC0yMjIsNyArMjQzLDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfaXBBZGRyZXNzVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yNDYsNyArMjY3LDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfaXBBZGRyZXNzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAgICAgKgpAQCAtMjgyLDcgKzMwMyw3IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0zMDUsNyArMzI2LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTY0MCw3ICs2NjEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNjg2LDYgKzcwNyw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBBZGRyZXNzVGFibGVfcG9zdF9yZXF1ZXN0ICovCiAKKwogLyoqCiAgKiBAaW50ZXJuYWwKICAqIHdyYXBwZXIKQEAgLTc1OCw3ICs3ODAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC05MzMsNyArOTU1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTA2MCw3ICsxMDgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcEFkZHJlc3NUYWJsZV9jaGVja19pbmRleGVzICovCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEyOTEsNyArMTMxMyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CkBAIC0xMzM4LDcgKzEzNjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzIiwgImNhbGxlZFxuIikpOwogCkBAIC0xNDM3LDcgKzE0NTksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfdW5kb19zZXR1cCIsCkBAIC0xNTAyLDcgKzE1MjQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTE2MjEsNyArMTY0Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTY2OSw3ICsxNjkxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfY29tbWl0IiwKQEAgLTE3MDMsNyArMTcyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwQWRkcmVzc1RhYmxlOl9tZmRfaXBBZGRyZXNzVGFibGVfdW5kb19jb21taXQiLApAQCAtMTgxMSw3ICsxODMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKIApAQCAtMTg2Niw3ICsxODg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwQWRkcmVzc1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcEFkZHJlc3NUYWJsZTpfbWZkX2lwQWRkcmVzc1RhYmxlX2lycmV2ZXJzaWJsZTpjb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xODkyLDcgKzE5MTQsNyBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBBZGRyZXNzVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMDQxLDYgKzIwNjMsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBBZGRyZXNzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaXBBZGRyZXNzVGFibGVfcm93cmVxX2N0eCAqCiBpcEFkZHJlc3NUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBBZGRyZXNzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKIHsKQEAgLTIwNjIsNyArMjA4NSw4IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORChpcEFkZHJlc3NUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisgICAgcm93cmVxX2N0eCA9IChpcEFkZHJlc3NUYWJsZV9yb3dyZXFfY3R4KilDT05UQUlORVJfRklORChpcEFkZHJlc3NUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQQUREUkVTU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGVkODRiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlLmgKQEAgLTAsMCArMSw1IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4MGUzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuYwpAQCAtMCwwICsxLDIxOCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qKiBccGFnZSBNRkQgaGVscGVyIGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoKKyAqIFxzZWN0aW9uIGludHJvIEludHJvZHVjdGlvbgorICogSW50cm9kdWN0b3J5IHRleHQuCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CisKKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaCIKKworY29uc3Qgb2lkICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZFtdID0geyBJUERFRkFVTFRST1VURVJUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRfc2l6ZSA9CitPSURfTEVOR1RIKGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZCk7CisKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiBpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHQ7CitzdGF0aWMgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICppcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcDsKKwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCk7CisKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgaXBEZWZhdWx0Um91dGVyVGFibGUgbW9kdWxlCisgKi8KK3ZvaWQKK2luaXRfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAwOm86IFBlcmZvcm0gaXBEZWZhdWx0Um91dGVyVGFibGUgb25lLXRpbWUgbW9kdWxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBoZXJlIHdlIGluaXRpYWxpemUgYWxsIHRoZSB0YWJsZXMgd2UncmUgcGxhbm5pbmcgb24gc3VwcG9ydGluZworICAgICAqLworICAgIGlmIChzaG91bGRfaW5pdCgiaXBEZWZhdWx0Um91dGVyVGFibGUiKSkKKyAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSgpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfaXBEZWZhdWx0Um91dGVyVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGlwRGVmYXVsdFJvdXRlclRhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25faXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImlwRGVmYXVsdFJvdXRlclRhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDE6bzogUGVyZm9ybSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBvbmUtdGltZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogVE9ETzozMDI6bzogfC0+SW5pdGlhbGl6ZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSB1c2VyIGNvbnRleHQKKyAgICAgKiBpZiB5b3UnZCBsaWtlIHRvIHBhc3MgaW4gYSBwb2ludGVyIHRvIHNvbWUgZGF0YSBmb3IgdGhpcworICAgICAqIHRhYmxlLCBhbGxvY2F0ZSBvciBzZXQgaXQgdXAgaGVyZS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGEgbmV0c25tcF9kYXRhX2xpc3QgaXMgYSBzaW1wbGUgd2F5IHRvIHN0b3JlIHZvaWQgcG9pbnRlcnMuIEEgc2ltcGxlCisgICAgICogc3RyaW5nIHRva2VuIGlzIHVzZWQgdG8gYWRkLCBmaW5kIG9yIHJlbW92ZSBwb2ludGVycy4KKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCgiaXBEZWZhdWx0Um91dGVyVGFibGUiLCBOVUxMLCBOVUxMKTsKKworICAgIC8qCisgICAgICogTm8gc3VwcG9ydCBmb3IgYW55IGZsYWdzIHlldCwgYnV0IGluIHRoZSBmdXR1cmUgeW91IHdvdWxkCisgICAgICogc2V0IGFueSBmbGFncyBoZXJlLgorICAgICAqLworICAgIGZsYWdzID0gMDsKKworICAgIC8qCisgICAgICogY2FsbCBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorCShpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCwgZmxhZ3MpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0aWFsaXplX3RhYmxlX2lwRGVmYXVsdFJvdXRlclRhYmxlICovCisKKy8qKgorICogU2h1dGRvd24gdGhlIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlIAorICovCit2b2lkCitzaHV0ZG93bl90YWJsZV9pcERlZmF1bHRSb3V0ZXJUYWJsZSh2b2lkKQoreworICAgIC8qCisgICAgICogY2FsbCBpbnRlcmZhY2Ugc2h1dGRvd24gY29kZQorICAgICAqLworICAgIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9zaHV0ZG93bl9pbnRlcmZhY2UKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShpcERlZmF1bHRSb3V0ZXJUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIxMDpvOiB8LT4gUGVyZm9ybSBleHRyYSBpcERlZmF1bHRSb3V0ZXJUYWJsZSByb3dyZXEgaW5pdGlhbGl6YXRpb24uIChlZyBERUZWQUxTKQorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQgKi8KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGNsZWFudXAKKyAqCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwRGVmYXVsdFJvdXRlclRhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShyb3dyZXFfY3R4LT5kYXRhKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhID0gTlVMTDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCisKKy8qKgorICogcHJlLXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvcgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTEwOm86IFBlcmZvcm0gaXBEZWZhdWx0Um91dGVyVGFibGUgcHJlLXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3QgKi8KKworLyoqCisgKiBwb3N0LXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKiBOb3RlOgorICogICBOZXcgcm93cyBoYXZlIGJlZW4gaW5zZXJ0ZWQgaW50byB0aGUgY29udGFpbmVyLCBhbmQKKyAqICAgZGVsZXRlZCByb3dzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gdGhlIGNvbnRhaW5lciBhbmQKKyAqICAgcmVsZWFzZWQuCisgKgorICogQHBhcmFtIHVzZXJfY29udGV4dAorICogQHBhcmFtIHJjIDogTUZEX1NVQ0NFU1MgaWYgYWxsIHJlcXVlc3RzIHN1Y2NlZWRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IG90aGVyIGVycm9yIChpZ25vcmVkKQorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCwgaW50IHJjKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTE6bzogUGVyZm9ybSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBwb3N0LXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKworLyoqIEB7ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyZWYyOWEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGUuaApAQCAtMCwwICsxLDIxMiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9ICisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBtaXNjIG1pc2M6IE1pc2NlbGxhbmVvdXMgcm91dGluZXMKKyAqCisgKiBAeworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlci5oPgorCisgICAgLyoKKyAgICAgKiBvdGhlciByZXF1aXJlZCBtb2R1bGUgY29tcG9uZW50cyAKKyAgICAgKi8KKyAgICAvKiAqSU5ERU5ULU9GRiogICovCitjb25maWdfcmVxdWlyZShpcC1taWIvZGF0YV9hY2Nlc3MvZGVmYXVsdHJvdXRlcikKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQpCisgICAgLyogKklOREVOVC1PTiogICovCisKKyAgICAvKgorICAgICAqIE9JRCBhbmQgY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUgCisgICAgICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkcy5oIgorCisgICAgLyoKKyAgICAgKiBlbnVtIGRlZmluaW9ucyAKKyAgICAgKi8KKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oIgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfaXBEZWZhdWx0Um91dGVyVGFibGUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwRGVmYXVsdFJvdXRlclRhYmxlKHZvaWQpOworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUgaXMgc3ViaWQgMzcgb2YgaXAuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcsIGxlbmd0aDogOAorICAgICAqLworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFdoZW4geW91IHJlZ2lzdGVyIHlvdXIgbWliLCB5b3UgZ2V0IHRvIHByb3ZpZGUgYSBnZW5lcmljCisgICAgICogcG9pbnRlciB0aGF0IHdpbGwgYmUgcGFzc2VkIGJhY2sgdG8geW91IGZvciBtb3N0IG9mIHRoZQorICAgICAqIGZ1bmN0aW9ucyBjYWxscy4KKyAgICAgKgorICAgICAqIFRPRE86MTAwOnI6IFJldmlldyBhbGwgY29udGV4dCBzdHJ1Y3R1cmVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBUT0RPOjEwMTpvOiB8LT4gUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9kYXRhX2xpc3QgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIFRPRE86MTEwOnI6IHwtPiBSZXZpZXcgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBjb250ZXh0IHN0cnVjdHVyZS4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMDpyOiB8LT4gUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIG1pYiBpbmRleC4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW5kZXggZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleF9zIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGU7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzcygyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2gKKyAgICAgICAgICovCisgICAgICAgIC8qKiAxMjggLSAyKG90aGVyIGluZGV4ZXMpIC0gb2lkIGxlbmd0aCgxMCkgPSAxMTUgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NbMTE1XTsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfbGVuOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwRGVmYXVsdFJvdXRlcklmSW5kZXgoMykvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlcklmSW5kZXg7CisKKworICAgIH0gaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4OworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMTpyOiB8ICAgfC0+IFJldmlldyBpcERlZmF1bHRSb3V0ZXJUYWJsZSBtYXggaW5kZXggbGVuZ3RoLgorICAgICAqIElmIHlvdSBLTk9XIHRoYXQgeW91ciBpbmRleGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbgorICAgICAqIGxlbmd0aCwgdXBkYXRlIHRoaXMgbWFjcm8gdG8gdGhhdCBsZW5ndGguCisgICAgICoKKyAgICAgKiBCRSBWRVJZIENBUkVGVUwgVE8gVEFLRSBJTlRPIEFDQ09VTlQgVEhFIE1BWElNVU0KKyAgICAgKiBQT1NTSUJMRSBMRU5HSFQgRk9SIEVWRVJZIFZBUklBQkxFIExFTkdUSCBJTkRFWCEKKyAgICAgKiBHdWVzc2luZyAxMjggLSBjb2wvZW50cnkoMikgIC0gb2lkIGxlbig4KQorICAgICAqLworI2RlZmluZSBNQVhfaXBEZWZhdWx0Um91dGVyVGFibGVfSURYX0xFTiAgICAgMTE4CisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTMwOm86IHwtPiBSZXZpZXcgaXBEZWZhdWx0Um91dGVyVGFibGUgUm93IHJlcXVlc3QgKHJvd3JlcSkgY29udGV4dC4KKyAgICAgKiBXaGVuIHlvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHlvdSB3aWxsIGJlIHBhc3NlZCBhCisgICAgICogaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCBwb2ludGVyLgorICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfcyB7CisKKyAgICAvKiogdGhpcyBtdXN0IGJlIGZpcnN0IGZvciBjb250YWluZXIgY29tcGFyZSB0byB3b3JrICovCisgICAgICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgICAgICBvaWQgICAgICAgICAgICAgb2lkX3RtcFtNQVhfaXBEZWZhdWx0Um91dGVyVGFibGVfSURYX0xFTl07CisKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfbWliX2luZGV4IHRibF9pZHg7CisKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqZGF0YTsKKworICAgICAgICAvKgorICAgICAgICAgKiBmbGFncyBwZXIgcm93LiBDdXJyZW50bHksIHRoZSBmaXJzdCAobG93ZXIpIDggYml0cyBhcmUgcmVzZXJ2ZWQKKyAgICAgICAgICogZm9yIHRoZSB1c2VyLiBTZWUgbWZkLmggZm9yIG90aGVyIGZsYWdzLgorICAgICAgICAgKi8KKyAgICAgICAgdV9pbnQgICAgICAgICAgIHJvd3JlcV9mbGFnczsKKworICAgICAgICAvKgorICAgICAgICAgKiBUT0RPOjEzMTpvOiB8ICAgfC0+IEFkZCB1c2VmdWwgZGF0YSB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogc3RvcmFnZSBmb3IgZnV0dXJlIGV4cGFuc2lvbgorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKmlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfbGlzdDsKKworICAgIH0gaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eDsKKworICAgIHR5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZl9yb3dyZXFfY3R4X3MgeworICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIH0gaXBEZWZhdWx0Um91dGVyVGFibGVfcmVmX3Jvd3JlcV9jdHg7CisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICovCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY29udGV4dCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jb250ZXh0LCBpbnQgcmMpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHhfaW5pdAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICB2b2lkICp1c2VyX2luaXRfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwCisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICppcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEoaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKKworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKKworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgiCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaCIKKworICAgIC8qCisgICAgICogRFVNTVkgbWFya2VycywgaWdub3JlCisgICAgICoKKyAgICAgKiBUT0RPOjA5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mjk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjM5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzo0OTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q3ZGNmZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0wLDAgKzEsNDIzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9hY2Nlc3MuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpZm8pCisKKy8qKiBAaW5ncm91cCBpbnRlcmZhY2UKKyAqIEBhZGR0b2dyb3VwIGRhdGFfYWNjZXNzIGRhdGFfYWNjZXNzOiBSb3V0aW5lcyB0byBhY2Nlc3MgZGF0YQorICoKKyAqIFRoZXNlIHJvdXRpbmVzIGFyZSB1c2VkIHRvIGxvY2F0ZSB0aGUgZGF0YSB1c2VkIHRvIHNhdGlzZnkKKyAqIHJlcXVlc3RzLgorICogCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdF9kYXRhKGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luaXRfZGF0YSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBkYXRhLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEgKi8KKworLyoqCisgKiBjb250YWluZXIgb3ZlcnZpZXcKKyAqCisgKi8KKworLyoqCisgKiBjb250YWluZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0cl9wdHIgQSBwb2ludGVyIHRvIGEgY29udGFpbmVyIHBvaW50ZXIuIElmIHlvdQorICogICAgICAgIGNyZWF0ZSBhIGN1c3RvbSBjb250YWluZXIsIHVzZSB0aGlzIHBhcmFtZXRlciB0byByZXR1cm4gaXQKKyAqICAgICAgICB0byB0aGUgTUZEIGhlbHBlci4gSWYgc2V0IHRvIE5VTEwsIHRoZSBNRkQgaGVscGVyIHdpbGwKKyAqICAgICAgICBhbGxvY2F0ZSBhIGNvbnRhaW5lciBmb3IgeW91LgorICogQHBhcmFtICBjYWNoZSBBIHBvaW50ZXIgdG8gYSBjYWNoZSBzdHJ1Y3R1cmUuIFlvdSBjYW4gc2V0IHRoZSB0aW1lb3V0CisgKiAgICAgICAgIGFuZCBvdGhlciBjYWNoZSBmbGFncyB1c2luZyB0aGlzIHBvaW50ZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLiBJZiBubyBjdXN0b20KKyAqICBjb250YWluZXIgaXMgYWxsb2NhdGVkLCB0aGUgTUZEIGNvZGUgd2lsbCBjcmVhdGUgb25lIGZvciB5b3VyLgorICoKKyAqICBUaGlzIGlzIGFsc28gdGhlIHBsYWNlIHRvIHNldCB1cCBjYWNoZSBiZWhhdmlvci4gVGhlIGRlZmF1bHQsIHRvCisgKiAgc2ltcGx5IHNldCB0aGUgY2FjaGUgdGltZW91dCwgd2lsbCB3b3JrIHdlbGwgd2l0aCB0aGUgZGVmYXVsdAorICogIGNvbnRhaW5lci4gSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb250YWluZXIsIHlvdSBtYXkgd2FudCB0bworICogIGxvb2sgYXQgdGhlIGNhY2hlIGhlbHBlciBkb2N1bWVudGF0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55CisgKiAgZmxhZ3MgeW91IHdhbnQgdG8gc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBpbml0aWFsaXphdGlvbiBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgb3BlbmluZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCB3aWxsIHN1cHBseSB0aGUgZGF0YSwgb3BlbmluZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjYWNoZSBwYXJhbSB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRPRE86MzQ1OkE6IFNldCB1cCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjYWNoZSBwcm9wZXJ0aWVzLgorICAgICAqCisgICAgICogQWxzbyBmb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gc2V0IHBhcmFtZXRlcnMgZm9yIHRoZQorICAgICAqIGNhY2hlLiBEbyBub3QgY2hhbmdlIHRoZSBtYWdpYyBwb2ludGVyLCBhcyBpdCBpcyB1c2VkCisgICAgICogYnkgdGhlIE1GRCBoZWxwZXIuIFRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBzZXQKKyAgICAgKiBjYWNoZS0+ZW5hYmxlZCB0byAwLgorICAgICAqLworICAgIGNhY2hlLT50aW1lb3V0ID0gSVBERUZBVUxUUk9VVEVSVEFCTEVfQ0FDSEVfVElNRU9VVDsgICAgICAgIC8qIHNlY29uZHMgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcl9wdHIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIHBhcmFtcyB0byBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd25cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisvKioKKyAqIGNoZWNrIGVudHJ5IGZvciB1cGRhdGUKKyAqLworc3RhdGljIHZvaWQKK19jaGVja19lbnRyeV9mb3JfdXBkYXRlcyhpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmRlZmF1bHRyb3V0ZXJfY29udGFpbmVyID0gbWFnaWNbMF07CisgICAgbmV0c25tcF9jb250YWluZXIgKnRvX2RlbGV0ZSA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBtYWdpY1sxXTsKKworICAgIC8qCisgICAgICogY2hlY2sgZm9yIG1hdGNoaW5nIGVudHJ5IHVzaW5nIHNlY29uZGFyeSBpbmRleC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKmRlZmF1bHRyb3V0ZXJfZW50cnkgPQorICAgICAgICBDT05UQUlORVJfRklORChkZWZhdWx0cm91dGVyX2NvbnRhaW5lciwgcm93cmVxX2N0eC0+ZGF0YSk7CisgICAgaWYgKE5VTEwgPT0gZGVmYXVsdHJvdXRlcl9lbnRyeSkgeworICAgICAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGU6YWNjZXNzIiwgInJlbW92aW5nIG1pc3NpbmcgZW50cnlcbiIpKTsKKworICAgICAgICBpZiAoTlVMTCA9PSB0b19kZWxldGUpIHsKKyAgICAgICAgICAgIG1hZ2ljWzFdID0gdG9fZGVsZXRlID0gbmV0c25tcF9jb250YWluZXJfZmluZCgibGlmbyIpOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gdG9fZGVsZXRlKQorICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBjcmVhdGUgZGVsZXRlIGNvbnRhaW5lclxuIik7CisgICAgICAgIH0KKyAgICAgICAgaWYgKE5VTEwgIT0gdG9fZGVsZXRlKQorICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVCh0b19kZWxldGUsIHJvd3JlcV9jdHgpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZTphY2Nlc3MiLCAidXBkYXRpbmcgZXhpc3RpbmcgZW50cnlcbiIpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgY2hhbmdlcyAmIHVwZGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9lbnRyeV91cGRhdGUocm93cmVxX2N0eC0+ZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGVudHJ5IGZyb20gaWZjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoZGVmYXVsdHJvdXRlcl9jb250YWluZXIsIGRlZmF1bHRyb3V0ZXJfZW50cnkpOworICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZGVmYXVsdHJvdXRlcl9lbnRyeSk7CisgICAgfQorfQorCisvKioKKyAqIGFkZCBuZXcgZW50cnkKKyAqLworc3RhdGljIHZvaWQKK19hZGRfbmV3X2VudHJ5KG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqZGVmYXVsdHJvdXRlcl9lbnRyeSwKKyAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZTphY2Nlc3MiLCAiY3JlYXRpbmcgbmV3IGVudHJ5XG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRlZmF1bHRyb3V0ZXJfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpCisgICAgICovCisgICAgcm93cmVxX2N0eCA9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoZGVmYXVsdHJvdXRlcl9lbnRyeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICBpZiAoKE5VTEwgIT0gcm93cmVxX2N0eCkgJiYKKyAgICAgICAgICAgIChNRkRfU1VDQ0VTUyA9PQorICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgIGRlZmF1bHRyb3V0ZXJfZW50cnktPmRyX2FkZHJlc3N0eXBlLAorICAgICAgICAgICAgICAgICBkZWZhdWx0cm91dGVyX2VudHJ5LT5kcl9hZGRyZXNzLAorICAgICAgICAgICAgICAgICBkZWZhdWx0cm91dGVyX2VudHJ5LT5kcl9hZGRyZXNzX2xlbiwKKyAgICAgICAgICAgICAgICAgZGVmYXVsdHJvdXRlcl9lbnRyeS0+ZHJfaWZfaW5kZXgpKSkgeworICAgICAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwQWRkcmVzc1RhYmxlOmFjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvbnRhaW5lciBpbnNlcnQgZmFpbGVkIGZvciBuZXcgZW50cnlcbiIpKTsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChOVUxMICE9IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBzZXR0aW5nIGluZGV4IHdoaWxlIGxvYWRpbmcgIgorICAgICAgICAgICAgICAgICAgICAiaXBEZWZhdWx0Um91dGVyVGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQgd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiaXBEZWZhdWx0Um91dGVyVGFibGUgY2FjaGUuXG4iKTsKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfZnJlZShkZWZhdWx0cm91dGVyX2VudHJ5KTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBsb2FkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIGNhY2hlIGhlbHBlciB0byBsb2FkCisgKiB0aGUgY29udGFpbmVyIGFnYWluIChhZnRlciB0aGUgY29udGFpbmVyIGZyZWUgZnVuY3Rpb24gaGFzIGJlZW4KKyAqIGNhbGxlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBjb250ZW50cykuCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmRlZmF1bHRyb3V0ZXJfY29udGFpbmVyOworICAgIHZvaWQgICAgICAgICAgICAgICp0bXBfcHRyWzJdOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzUxOk06IHwtPiBMb2FkL3VwZGF0ZSBkYXRhIGluIHRoZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjb250YWluZXIuCisgICAgICogbG9vcCBvdmVyIHlvdXIgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSwgYWxsb2NhdGUgYSByb3dyZXEgY29udGV4dCwKKyAgICAgKiBzZXQgdGhlIGluZGV4KGVzKSBbYW5kIGRhdGEsIG9wdGlvbmFsbHldIGFuZCBpbnNlcnQgaW50bworICAgICAqIHRoZSBjb250YWluZXIuCisgICAgICovCisgICAgZGVmYXVsdHJvdXRlcl9jb250YWluZXIgPQorICAgICAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9sb2FkKE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0xPQURfQURETF9JRFhfQllfQUREUik7CisKKyAgICBpZiAoTlVMTCA9PSBkZWZhdWx0cm91dGVyX2NvbnRhaW5lcikKKyAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworCisgICAgLyoKKyAgICAgKiB3ZSBqdXN0IGdvdCBhIGZyZXNoIGNvcHkgb2YgaW50ZXJmYWNlIGRhdGEuIGNvbXBhcmUgaXQgdG8KKyAgICAgKiB3aGF0IHdlJ3ZlIGFscmVhZHkgZ290LCBhbmQgbWFrZSBhbnkgYWRqdXN0bWVudHMsIHNhdmluZworICAgICAqIG1pc3NpbmcgYWRkcmVzc2VzIHRvIGJlIGRlbGV0ZWQuCisgICAgICovCisgICAgdG1wX3B0clswXSA9IGRlZmF1bHRyb3V0ZXJfY29udGFpbmVyLT5uZXh0OworICAgIHRtcF9wdHJbMV0gPSBOVUxMOworICAgIENPTlRBSU5FUl9GT1JfRUFDSChjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgIHRtcF9wdHIpOworCisgICAgLyoKKyAgICAgKiBub3cgYWRkIGFueSBuZXcgaW50ZXJmYWNlcworICAgICAqLworICAgIENPTlRBSU5FUl9GT1JfRUFDSChkZWZhdWx0cm91dGVyX2NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9hZGRfbmV3X2VudHJ5LAorICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIHRoZSBjb250YWluZXIuIHdlJ3ZlIGVpdGhlciBjbGFpbWVkIGVhY2ggZW50cnksIG9yIHJlbGVhc2VkIGl0LAorICAgICAqIHNvIHRoZSBhY2Nlc3MgZnVuY3Rpb24gZG9lc24ndCBuZWVkIHRvIGNsZWFyIHRoZSBjb250YWluZXIuCisgICAgICovCisgICAgbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfZnJlZShkZWZhdWx0cm91dGVyX2NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfRE9OVF9DTEVBUik7CisKKyAgICAvKgorICAgICAqIHJlbW92ZSBkZWxldGVkIGFkZHJlc3NlcyBmcm9tIHRhYmxlIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChOVUxMICE9IHRtcF9wdHJbMV0pIHsKKyAgICAgICAgbmV0c25tcF9jb250YWluZXIgKnRtcF9jb250YWluZXIgPQorICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyICopIHRtcF9wdHJbMV07CisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKnRtcF9jdHg7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhpcyB3b3JrcyBiZWNhdXNlIHRoZSB0bXBfY29udGFpbmVyIGlzIGEgbGlua2VkIGxpc3QsCisgICAgICAgICAqIHdoaWNoIGNhbiBiZSB1c2VkIGxpa2UgYSBzdGFjay4uLgorICAgICAgICAgKi8KKyAgICAgICAgd2hpbGUgKENPTlRBSU5FUl9TSVpFKHRtcF9jb250YWluZXIpKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogZ2V0IGZyb20gZGVsZXRlIGxpc3QKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgdG1wX2N0eCA9IENPTlRBSU5FUl9GSVJTVCh0bXBfY29udGFpbmVyKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHJlbGVhc2UgY29udGV4dCwgZGVsZXRlIGZyb20gdGFibGUgY29udGFpbmVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCB0bXBfY3R4KTsKKyAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCh0bXBfY3R4KTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHBvcCBvZmYgZGVsZXRlIGxpc3QKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgQ09OVEFJTkVSX1JFTU9WRSh0bXBfY29udGFpbmVyLCBOVUxMKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgIiUiIE5FVFNOTVBfUFJJeiAiZCByZWNvcmRzXG4iLCBDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9CisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozODA6TTogRnJlZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSBjb250YWluZXIgZGF0YS4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBwcmVwYXJlIHJvdyBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiAgV2hlbiB0aGUgYWdlbnQgaGFzIGxvY2F0ZWQgdGhlIHJvdyBmb3IgYSByZXF1ZXN0LCB0aGlzIGZ1bmN0aW9uIGlzCisgKiAgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHJvdyBmb3IgcHJvY2Vzc2luZy4gSWYgeW91IGZ1bGx5IHBvcHVsYXRlZAorICogIHRoZSBkYXRhIGNvbnRleHQgZHVyaW5nIHRoZSBpbmRleCBzZXR1cCBwaGFzZSwgeW91IG1heSBub3QgbmVlZCB0bworICogIGRvIGFueXRoaW5nLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHBvaW50ZXIgdG8gYSBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM5MDpvOiBQcmVwYXJlIHJvdyBmb3IgcmVxdWVzdC4KKyAgICAgKiBJZiBwb3B1bGF0aW5nIHJvdyBkYXRhIHdhcyBkZWxheWVkLCB0aGlzIGlzIHRoZSBwbGFjZSB0bworICAgICAqIGZpbGwgaW4gdGhlIHJvdyBmb3IgdGhpcyByZXF1ZXN0LgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dfcHJlcCAqLworCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfYWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWQwMzNmMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9BQ0NFU1NfSAorI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0FDQ0VTU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogSVAtTUlCOjppcERlZmF1bHRSb3V0ZXJUYWJsZSBpcyBzdWJpZCAzNyBvZiBpcC4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgICAgICovCisKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZyk7CisKKworICAgIC8qCisgICAgICogVE9ETzoxODA6bzogUmV2aWV3IGlwRGVmYXVsdFJvdXRlclRhYmxlIGNhY2hlIHRpbWVvdXQuCisgICAgICogVGhlIG51bWJlciBvZiBzZWNvbmRzIGJlZm9yZSB0aGUgY2FjaGUgdGltZXMgb3V0CisgICAgICovCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0NBQ0hFX1RJTUVPVVQgICA2MAorCisgICAgdm9pZCAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FjaGUpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cik7CisKKyAgICBpbnQgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisKKyAgICBpbnQgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTc3ODk3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwzMjUgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDg4ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGUuaCIKKworCisvKiogQGRlZmdyb3VwIGRhdGFfZ2V0IGRhdGFfZ2V0OiBSb3V0aW5lcyB0byBnZXQgZGF0YQorICoKKyAqIFRPRE86MjMwOk06IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBnZXQgcm91dGluZXMuCisgKiBUT0RPOjI0MDpNOiBJbXBsZW1lbnQgaXBEZWZhdWx0Um91dGVyVGFibGUgbWFwcGluZyByb3V0aW5lcyAoaWYgYW55KS4KKyAqCisgKiBUaGVzZSByb3V0aW5lIGFyZSB1c2VkIHRvIGdldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgd2hlcmUgdGhlCisgKiB2YWx1ZSBzaG91bGQgYmUgY29waWVkLgorICoKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyVGFibGUgaXMgc3ViaWQgMzcgb2YgaXAuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LCBsZW5ndGg6IDgKKyAqLworCisvKgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAqIFRPRE86MjAwOnI6IEltcGxlbWVudCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBkYXRhIGNvbnRleHQgZnVuY3Rpb25zLgorICovCisvKgorICogaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfZGF0YQorICoKKyAqIFB1cnBvc2U6IGNyZWF0ZSBuZXcgaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YS4KKyAqLworaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YSAqCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpCit7CisgICAgLyoKKyAgICAgKiBUT0RPOjIwMTpyOiB8LT4gYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaXBEZWZhdWx0Um91dGVyVGFibGUgZGF0YSBjb250ZXh0LgorICAgICAqLworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEgKnJ0biA9CisgICAgICAgIG5ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfY3JlYXRlKCk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcnRuKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmFibGUgdG8gbWFsbG9jIG1lbW9yeSBmb3IgbmV3ICIKKyAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGEuXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRuOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9kYXRhICovCisKKy8qCisgKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiByZWxlYXNlIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEuCisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2VfZGF0YShpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICogZGF0YSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX2RhdGEiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjAyOnI6IHwtPiByZWxlYXNlIG1lbW9yeSBmb3IgdGhlIGlwRGVmYXVsdFJvdXRlclRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUoZGF0YSk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2VfZGF0YSAqLworCisKKworLyoqCisgKiBzZXQgbWliIGluZGV4KGVzKQorICoKKyAqIEBwYXJhbSB0YmxfaWR4IG1pYiBpbmRleCBzdHJ1Y3R1cmUKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwKKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3B0cgorICogQHBhcmFtIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfcHRyX2xlbgorICogQHBhcmFtIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaCAKKyAgICAgKi8KKyAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKi8KKyAgICB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSA9IGlwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlX3ZhbDsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzcygyKS9JbmV0QWRkcmVzcy9BU05fT0NURVRfU1RSL2NoYXIoY2hhcikvL0wvYS93L2UvUi9kL2ggCisgICAgICovCisgICAgdGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPSBzaXplb2YodGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcykgLyBzaXplb2YodGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1swXSk7IC8qIG1heCBsZW5ndGggKi8KKyAgICAvKiogV0FSTklORzogdGhpcyBjb2RlIG1pZ2h0IG5vdCB3b3JrIGZvciBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKi8KKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSB0aGVyZSBpcyBlbm91Z2ggc3BhY2UgZm9yIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MgZGF0YQorICAgICAqLworICAgIGlmICgoTlVMTCA9PSB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzKSB8fAorICAgICAgICAodGJsX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPAorICAgICAgICAgKGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4pKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IGVub3VnaCBzcGFjZSBmb3IgdmFsdWVcbiIpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKyAgICB0YmxfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzX2xlbiA9CisgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW47CisgICAgbWVtY3B5KHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlckFkZHJlc3MsIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyX2xlbiAqCisgICAgICAgICAgIHNpemVvZihpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHJbMF0pKTsKKworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVySWZJbmRleCgzKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIC8qKiBXQVJOSU5HOiB0aGlzIGNvZGUgbWlnaHQgbm90IHdvcmsgZm9yIG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqLworICAgIHRibF9pZHgtPmlwRGVmYXVsdFJvdXRlcklmSW5kZXggPSBpcERlZmF1bHRSb3V0ZXJJZkluZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppcERlZmF1bHRSb3V0ZXJBZGRyZXNzX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCgmcm93cmVxX2N0eC0+dGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpKQorICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworCisgICAgLyoKKyAgICAgKiBjb252ZXJ0IG1pYiBpbmRleCB0byBvaWQgaW5kZXgKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5vaWRfaWR4LmxlbiA9IHNpemVvZihyb3dyZXFfY3R4LT5vaWRfdG1wKSAvIHNpemVvZihvaWQpOworICAgIGlmICgwICE9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZCgmcm93cmVxX2N0eC0+b2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvd3JlcV9jdHgtPnRibF9pZHgpKSB7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleGVzX3NldCAqLworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlckVudHJ5LmlwRGVmYXVsdFJvdXRlckxpZmV0aW1lCisgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSBpcyBzdWJpZCA0IG9mIGlwRGVmYXVsdFJvdXRlckVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcuMS40CisgKiBEZXNjcmlwdGlvbjoKK1RoZSByZW1haW5pbmcgbGVuZ3RoIG9mIHRpbWUsIGluIHNlY29uZHMsIHRoYXQgdGhpcyByb3V0ZXIKKyAgICAgICAgICAgIHdpbGwgY29udGludWUgdG8gYmUgdXNlZnVsIGFzIGEgZGVmYXVsdCByb3V0ZXIuICBBIHZhbHVlIG9mCisgICAgICAgICAgICB6ZXJvIGluZGljYXRlcyB0aGF0IGl0IGlzIG5vIGxvbmdlciB1c2VmdWwgYXMgYSBkZWZhdWx0CisgICAgICAgICAgICByb3V0ZXIuICBJdCBpcyBsZWZ0IHRvIHRoZSBpbXBsZW1lbnRlciBvZiB0aGUgTUlCIGFzIHRvCisgICAgICAgICAgICB3aGV0aGVyIGEgcm91dGVyIHdpdGggYSBsaWZldGltZSBvZiB6ZXJvIGlzIHJlbW92ZWQgZnJvbSB0aGUKKyAgICAgICAgICAgIGxpc3QuCisKKyAgICAgICAgICAgIEZvciBJUHY2LCB0aGlzIHZhbHVlIHNob3VsZCBiZSBleHRyYWN0ZWQgZnJvbSB0aGUgcm91dGVyCisgICAgICAgICAgICBhZHZlcnRpc2VtZW50IG1lc3NhZ2VzLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAxICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogUmFuZ2VzOiAgMCAtIDY1NTM1OworICoKKyAqIEl0cyBzeW50YXggaXMgVU5TSUdORUQzMiAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwRGVmYXVsdFJvdXRlckxpZmV0aW1lX2dldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBEZWZhdWx0Um91dGVyTGlmZXRpbWVfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlckxpZmV0aW1lX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lIGRhdGEuCisgICAgICogY29weSAoKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcERlZmF1bHRSb3V0ZXJMaWZldGltZV92YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEtPmRyX2xpZmV0aW1lOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBEZWZhdWx0Um91dGVyRW50cnkuaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZQorICogaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZSBpcyBzdWJpZCA1IG9mIGlwRGVmYXVsdFJvdXRlckVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzcuMS41CisgKiBEZXNjcmlwdGlvbjoKK0FuIGluZGljYXRpb24gb2YgcHJlZmVyZW5jZSBnaXZlbiB0byB0aGlzIHJvdXRlciBhcyBhCisgICAgICAgICAgICBkZWZhdWx0IHJvdXRlciBhcyBkZXNjcmliZWQgaW4gaGUgRGVmYXVsdCBSb3V0ZXIKKyAgICAgICAgICAgIFByZWZlcmVuY2VzIGRvY3VtZW50LiAgVHJlYXRpbmcgdGhlIHZhbHVlIGFzIGEKKyAgICAgICAgICAgIDIgYml0IHNpZ25lZCBpbnRlZ2VyIGFsbG93cyBmb3Igc2ltcGxlIGFyaXRobWV0aWMKKyAgICAgICAgICAgIGNvbXBhcmlzb25zLgorCisgICAgICAgICAgICBGb3IgSVB2NCByb3V0ZXJzIG9yIElQdjYgcm91dGVycyB0aGF0IGFyZSBub3QgdXNpbmcgdGhlCisgICAgICAgICAgICB1cGRhdGVkIHJvdXRlciBhZHZlcnRpc2VtZW50IGZvcm1hdCwgdGhpcyBvYmplY3QgaXMgc2V0IHRvCisgICAgICAgICAgICBtZWRpdW0gKDApLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogRW51bSByYW5nZTogMy84LiBWYWx1ZXM6ICByZXNlcnZlZCgtMiksIGxvdygtMSksIG1lZGl1bSgwKSwgaGlnaCgxKQorICoKKyAqIEl0cyBzeW50YXggaXMgSU5URUdFUiAoYmFzZWQgb24gcGVybHR5cGUgSU5URUdFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9JTlRFR0VSLiBUaGUgQyB0eXBlIGRlY2wgaXMgbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlIGRhdGEuCisgICAgICogY29weSAoKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2VfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLT5kcl9wcmVmZXJlbmNlOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX2dldCAqLworCisKKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2dldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2OTg2NzUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBEZWZhdWx0Um91dGVyVGFibGUvaXBEZWZhdWx0Um91dGVyVGFibGVfZGF0YV9nZXQuaApAQCAtMCwwICsxLDg0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICoKKyAqIEBmaWxlIGlwRGVmYXVsdFJvdXRlclRhYmxlX2RhdGFfZ2V0LmgKKyAqCisgKiBAYWRkdG9ncm91cCBnZXQKKyAqCisgKiBQcm90b3R5cGVzIGZvciBnZXQgZnVuY3Rpb25zCisgKgorICogQHsKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0dFVF9ICisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX0RBVEFfR0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogR0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM3LCBsZW5ndGg6IDgKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGluZGV4ZXMKKyAgICAgKi8KKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlX2dldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV92YWxfcHRyKTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgKKyAgICAgICAgKGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgICAgICB1X2xvbmcgaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGVfdmFsLAorICAgICAgICAgY2hhciAqaXBEZWZhdWx0Um91dGVyQWRkcmVzc192YWxfcHRyLAorICAgICAgICAgc2l6ZV90IGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICBsb25nIGlwRGVmYXVsdFJvdXRlcklmSW5kZXhfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhlc19zZXQoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlckFkZHJlc3NfdmFsX3B0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaXBEZWZhdWx0Um91dGVySWZJbmRleF92YWwpOworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9EQVRBX0dFVF9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmI0NmQxMAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUlRBQkxFX0VOVU1TX0gKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBpcERlZmF1bHRSb3V0ZXJMaWZldGltZSAoVU5TSUdORUQzMiAvIEFTTl9VTlNJR05FRCkKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX0VOVU1TCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX0VOVU1TCisKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSTElGRVRJTUVfTUlOICAwCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUkxJRkVUSU1FX01BWCAgMHhGRkZGRkZGRlVMCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSTElGRVRJTUVfRU5VTVMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogY29uc3RhbnRzIGZvciBlbnVtcyBmb3IgdGhlIE1JQiBub2RlCisgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSAoSW5ldEFkZHJlc3NUeXBlIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBJTkVUQUREUkVTU1RZUEVfRU5VTVMKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0VOVU1TCisKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX1VOS05PV04gIDAKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0lQVjQgIDEKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0lQVjYgIDIKKyNkZWZpbmUgSU5FVEFERFJFU1NUWVBFX0lQVjRaICAzCisjZGVmaW5lIElORVRBRERSRVNTVFlQRV9JUFY2WiAgNAorI2RlZmluZSBJTkVUQUREUkVTU1RZUEVfRE5TICAxNgorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElORVRBRERSRVNTVFlQRV9FTlVNUyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgKElOVEVHRVIgLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfRU5VTVMKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRV9FTlVNUworCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfUkVTRVJWRUQgIC0yCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlBSRUZFUkVOQ0VfTE9XICAtMQorI2RlZmluZSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX01FRElVTSAgMAorI2RlZmluZSBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX0hJR0ggIDEKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJQUkVGRVJFTkNFX0VOVU1TICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQREVGQVVMVFJPVVRFUlRBQkxFX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGFkNzJiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMTAyNiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcERlZmF1bHRSb3V0ZXJUYWJsZS5oIgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisjaW5jbHVkZSAiaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShiYWJ5X3N0ZXBzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwRGVmYXVsdFJvdXRlclRhYmxlIGlzIHN1YmlkIDM3IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNywgbGVuZ3RoOiA4CisgKi8KK3R5cGVkZWYgc3RydWN0IGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworfSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4OworCitzdGF0aWMgaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgIAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KGlwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmX2N0eCk7CisKKworbmV0c25tcF9jb250YWluZXIgKgoraXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgoraXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHg7Cit9CisKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JlZykKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9CisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQoreworICAgIHJldHVybiBDT05UQUlORVJfU0laRShpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKK30KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGlwRGVmYXVsdFJvdXRlclRhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLCB1X2xvbmcgZmxhZ3MpCit7CisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzICphY2Nlc3NfbXVsdGlwbGV4ZXIgPQorICAgICAgICAmaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmFjY2Vzc19tdWx0aXBsZXhlcjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxfaW5mbyA9CisgICAgICAgICZpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudGJsX2luZm87CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyOworICAgIGludCAgICAgICAgICAgICBtZmRfbW9kZXMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSIsICJjYWxsZWRcbiIpKTsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNhdmUgaW50ZXJmYWNlIGNvbnRleHQgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlCisgICAgICovCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHVwIHRoZSB0YWJsZSdzIGRlZmluaXRpb24KKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YmxfaW5mbywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogaXBEZWZhdWx0Um91dGVyQWRkcmVzcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwRGVmYXVsdFJvdXRlcklmSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQREVGQVVMVFJPVVRFUlRBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUERFRkFVTFRST1VURVJUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9pbml0KCZpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgaXBEZWZhdWx0Um91dGVyVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0KKyAgICAgICAgX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9IF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9CisgICAgICAgIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPQorICAgICAgICBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZTppbml0X2lwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgaXBEZWZhdWx0Um91dGVyVGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaXBEZWZhdWx0Um91dGVyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaXBEZWZhdWx0Um91dGVyVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmlwRGVmYXVsdFJvdXRlclRhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QUkVfUkVRVUVTVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUE9TVF9SRVFVRVNUOworCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgIC8qIFhYWCAtIGFyZSB0aGVzZSBhY3R1YWxseSBuZWNlc3Nhcnk/ICovCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LmNhY2hlKSB7CisgICAgICAgIGhhbmRsZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY2FjaGUpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGFibGUKKyAgICAgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRibF9pbmZvKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBEZWZhdWx0Um91dGVyVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZQorICovCit2b2lkCitfaXBEZWZhdWx0Um91dGVyVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJlZ19wdHIpCit7CisgICAgLyoKKyAgICAgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bigmaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4KTsKK30KKwordm9pZAoraXBEZWZhdWx0Um91dGVyVGFibGVfdmFsaWRfY29sdW1uc19zZXQobmV0c25tcF9jb2x1bW5faW5mbyAqdmMpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LnRibF9pbmZvLnZhbGlkX2NvbHVtbnMgPSB2YzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfdmFsaWRfY29sdW1uc19zZXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbnZlcnQgdGhlIGluZGV4IGNvbXBvbmVudCBzdG9yZWQgaW4gdGhlIGNvbnRleHQgdG8gYW4gb2lkCisgKi8KK2ludAoraXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZTsKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlckFkZHJlc3MoMikvSW5ldEFkZHJlc3MvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML2Evdy9lL1IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzOworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVySWZJbmRleCgzKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSkpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZS50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcywgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzKSk7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MudHlwZSA9IEFTTl9PQ1RFVF9TVFI7CisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4KSk7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLm5leHRfdmFyaWFibGUgPQorICAgICAgICAmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3M7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MubmV4dF92YXJpYWJsZSA9ICZ2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleDsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBEZWZhdWx0Um91dGVyVGFibGU6aXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfdG9fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSgxKS9JbmV0QWRkcmVzc1R5cGUvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSkpOworCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzKDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gKgorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc1swXSkpOworCisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJJZkluZGV4KDMpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmlwRGVmYXVsdFJvdXRlcklmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJJZkluZGV4KSk7CisKKworICAgIGVyciA9IGJ1aWxkX29pZF9ub2FsbG9jKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwgJm9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKTsKKyAgICBpZiAoZXJyKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgJWQgY29udmVydGluZyBpbmRleCB0byBvaWRcbiIsIGVycik7CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfaW5kZXhfdG9fb2lkICovCisKKy8qKgorICogZXh0cmFjdCBpcERlZmF1bHRSb3V0ZXJUYWJsZSBpbmRleGVzIGZyb20gYSBuZXRzbm1wX2luZGV4CisgKgorICogQHJldHZhbCBTTk1QX0VSUl9OT0VSUk9SICA6IG5vIGVycm9yCisgKiBAcmV0dmFsIFNOTVBfRVJSX0dFTkVSUiAgIDogZXJyb3IKKyAqLworaW50CitpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUoMSkvSW5ldEFkZHJlc3NUeXBlL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGU7CisgICAgLyoKKyAgICAgKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzKDIpL0luZXRBZGRyZXNzL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9hL3cvZS9SL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzczsKKyAgICAvKgorICAgICAqIGlwRGVmYXVsdFJvdXRlcklmSW5kZXgoMykvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUpKTsKKyAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUudHlwZSA9IEFTTl9JTlRFR0VSOworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3MsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcykpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnR5cGUgPSBBU05fT0NURVRfU1RSOworICAgIG1lbXNldCgmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgsIDB4MDAsCisgICAgICAgICAgIHNpemVvZih2YXJfaXBEZWZhdWx0Um91dGVySWZJbmRleCkpOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJJZkluZGV4LnR5cGUgPSBBU05fSU5URUdFUjsKKworICAgIC8qCisgICAgICogY2hhaW4gdGVtcCBpbmRleCB2YXJiaW5kcyB0b2dldGhlcgorICAgICAqLworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZS5uZXh0X3ZhcmlhYmxlID0KKyAgICAgICAgJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzOworICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLm5leHRfdmFyaWFibGUgPSAmdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXg7CisgICAgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwRGVmYXVsdFJvdXRlclRhYmxlOmlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X2Zyb21fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlKTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSA9CisgICAgICAgICAgICAqKCh1X2xvbmcgKikgdmFyX2lwRGVmYXVsdFJvdXRlckFkZHJlc3NUeXBlLnZhbC5zdHJpbmcpOworICAgICAgICAvKgorICAgICAgICAgKiBOT1RFOiB2YWxfbGVuIGlzIGluIGJ5dGVzLCBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzX2xlbiBtaWdodCBub3QgYmUKKyAgICAgICAgICovCisgICAgICAgIGlmICh2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy52YWxfbGVuID4KKyAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzKSkKKyAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkobWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICB2YXJfaXBEZWZhdWx0Um91dGVyQWRkcmVzcy52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnZhbF9sZW4pOworICAgICAgICAgICAgbWliX2lkeC0+aXBEZWZhdWx0Um91dGVyQWRkcmVzc19sZW4gPQorICAgICAgICAgICAgICAgIHZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzLnZhbF9sZW4gLworICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJBZGRyZXNzWzBdKTsKKyAgICAgICAgfQorICAgICAgICBtaWJfaWR4LT5pcERlZmF1bHRSb3V0ZXJJZkluZGV4ID0KKyAgICAgICAgICAgICooKGxvbmcgKikgdmFyX2lwRGVmYXVsdFJvdXRlcklmSW5kZXgudmFsLnN0cmluZyk7CisKKworICAgIH0KKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcERlZmF1bHRSb3V0ZXJBZGRyZXNzVHlwZSk7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbmRleF9mcm9tX29pZCAqLworCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAaW50ZXJuYWwKKyAqIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgYSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4CisgKi8KK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgoraXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gZGF0YSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyYWNrIGlmIHdlIGdvdCBkYXRhIGZyb20gdXNlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19EQVRBX0ZST01fVVNFUjsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBkYXRhOworICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0KKyAgICAgICAgICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YSA9CisgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2FsbG9jYXRlX2RhdGEoKSkpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1bmRvIGNvbnRleHQgd2lsbCBiZSBhbGxvY2F0ZWQgd2hlbiBuZWVkZWQgKGluICpfdW5kb19zZXR1cCkKKyAgICAgKi8KKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5pcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBmb3Igbm9uLXRyYW5zaWVudCBkYXRhLCBkb24ndCBmcmVlIGRhdGEgd2UgZ290IGZyb20gdGhlIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoKHJvd3JlcV9jdHgtPmRhdGEpICYmCisgICAgICAgICEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2VfZGF0YShyb3dyZXFfY3R4LT5kYXRhKTsKKworICAgIC8qCisgICAgICogZnJlZSBpbmRleCBvaWQgcG9pbnRlcgorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMgIT0gcm93cmVxX2N0eC0+b2lkX3RtcCkKKyAgICAgICAgZnJlZShyb3dyZXFfY3R4LT5vaWRfaWR4Lm9pZHMpOworCisgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19maXJzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIGFkZGl0aW9uYWwgcHJlX3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJpcERlZmF1bHRSb3V0ZXJUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImlwRGVmYXVsdFJvdXRlclRhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHJlbGVhc2Ugcm93IGNvbnRleHQsIGlmIGRlbGV0ZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eCAmJiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSkKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiB3YWl0IGZvciBsYXN0IGNhbGwgYmVmb3JlIGNhbGxpbmcgdXNlcgorICAgICAqLworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGUiLAorICAgICAgICAgICAgICAgICAgICAid2FpdGluZyBmb3IgbGFzdCBwb3N0X3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcGFja2V0X3JjID0gbmV0c25tcF9jaGVja19hbGxfcmVxdWVzdHNfZXJyb3IoYWd0cmVxX2luZm8tPmFzcCwgMCk7CisgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3QoaXBEZWZhdWx0Um91dGVyVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4LCBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXBEZWZhdWx0Um91dGVyVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZ2V0IG91ciBjb250ZXh0IGZyb20gbWZkCisgICAgICogaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqaWZfY3R4ID0KKyAgICAgKiAgICAgICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqKXJlZ2luZm8tPm15X3JlZ192b2lkOworICAgICAqLworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICByYyA9IFNOTVBfRVJSX05PQ1JFQVRJT047CisgICAgfQorCisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgcmMpOworICAgIGVsc2UKKyAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93X3ByZXAocm93cmVxX2N0eCk7CisKKyAgICByZXR1cm4gU05NUF9WQUxJREFURV9FUlIocmMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX29iamVjdF9sb29rdXAgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogR0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQGludGVybmFsCisgKiBSZXRyaWV2ZSB0aGUgdmFsdWUgZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF9jb2x1bW4oaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF9jb2x1bW4iLCAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwRGVmYXVsdFJvdXRlckxpZmV0aW1lKDQpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUERFRkFVTFRST1VURVJMSUZFVElNRToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcERlZmF1bHRSb3V0ZXJMaWZldGltZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcERlZmF1bHRSb3V0ZXJQcmVmZXJlbmNlKDUpL0lOVEVHRVIvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0Evdy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUERFRkFVTFRST1VURVJQUkVGRVJFTkNFOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHJjID0gaXBEZWZhdWx0Um91dGVyUHJlZmVyZW5jZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgaWYgKElQREVGQVVMVFJPVVRFUlRBQkxFX01JTl9DT0wgPD0gY29sdW1uCisgICAgICAgICAgICAmJiBjb2x1bW4gPD0gSVBERUZBVUxUUk9VVEVSVEFCTEVfTUFYX0NPTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X2NvbHVtbiIsICJhc3N1bWUgY29sdW1uICVkIGlzIHJlc2VydmVkXG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJjID0gTUZEX1NLSVA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uXG4iLAorICAgICAgICAgICAgICAgICAgICAgY29sdW1uKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uICovCisKK2ludAorX21mZF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfdmFsdWVzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOworICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOworICAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKHZvaWQgKik7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9tZmRfaXBEZWZhdWx0Um91dGVyVGFibGVfZ2V0X3ZhbHVlcyIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9pcERlZmF1bHRSb3V0ZXJUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgaWYgKE1GRF9TS0lQID09IHJjKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5VTEwgdmFyYmluZCBkYXRhIHBvaW50ZXIhXG4iKTsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlIGJ1ZmZlciB3YXNuJ3QgdXNlZCBwcmV2aW91c2x5IGZvciB0aGUgb2xkIGRhdGEgKGkuZS4gaXQKKyAgICAgICAgICogd2FzIGFsbGNvYXRlZCBtZW1vcnkpICBhbmQgdGhlIGdldCByb3V0aW5lIHJlcGxhY2VkIHRoZSBwb2ludGVyLAorICAgICAgICAgKiB3ZSBuZWVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAob2xkX3N0cmluZyAmJiAob2xkX3N0cmluZyAhPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpICYmCisgICAgICAgICAgICAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZyAhPSBvbGRfc3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKGRhdGFGcmVlSG9vaykKKyAgICAgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKG9sZF9zdHJpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyZWUob2xkX3N0cmluZyk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwRGVmYXVsdFJvdXRlclRhYmxlX2dldF92YWx1ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNFVCBQUk9DRVNTSU5HIE5PVCBBUFBMSUNBQkxFIChwZXIgTUlCIG9yIHVzZXIgc2V0dGluZykKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREFUQSBBQ0NFU1MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZCAgICAgX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKTsKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jYWNoZV9sb2FkIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNhY2hlIGZvciBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jYWNoZV9sb2FkXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICByZXR1cm4gaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2xvYWQoKG5ldHNubXBfY29udGFpbmVyICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlLT5tYWdpYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXBEZWZhdWx0Um91dGVyVGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY2FjaGUgaW4gaXBEZWZhdWx0Um91dGVyVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2l0ZW1fZnJlZShpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNvbnRleHQpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jb250YWluZXJfaXRlbV9mcmVlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KQorICAgICAgICByZXR1cm47CisKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfaXRlbV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwRGVmYXVsdFJvdXRlclRhYmxlOl9jb250YWluZXJfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNvbnRhaW5lciBpbiBpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogZnJlZSBhbGwgaXRlbXMuIGluZWZmaWNpZW50LCBidXQgZWFzeS4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikgX2NvbnRhaW5lcl9pdGVtX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgIE5VTEwpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGluaXRpYWxpemUgdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQoaXBEZWZhdWx0Um91dGVyVGFibGVfaW50ZXJmYWNlX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGlwRGVmYXVsdFJvdXRlclRhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiaXBEZWZhdWx0Um91dGVyVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBpbiAiCisgICAgICAgICAgICAgICAgICJpcERlZmF1bHRSb3V0ZXJUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNodXRkb3duIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcERlZmF1bHRSb3V0ZXJUYWJsZTpfaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlmX2N0eC0+Y29udGFpbmVyKTsKKworICAgIF9jb250YWluZXJfZnJlZShpZl9jdHgtPmNvbnRhaW5lcik7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisKK2lwRGVmYXVsdFJvdXRlclRhYmxlX3Jvd3JlcV9jdHggKgoraXBEZWZhdWx0Um91dGVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwRGVmYXVsdFJvdXRlclRhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKK3sKKyAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPQorICAgICAgICBDT05UQUlORVJfRklORChpcERlZmF1bHRSb3V0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzgwNDkxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBJUERFRkFVTFRST1VURVJUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImlwRGVmYXVsdFJvdXRlclRhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlCisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwRGVmYXVsdFJvdXRlclRhYmxlX3NodXRkb3duX2ludGVyZmFjZQorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jdHgpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICppcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0CisgICAgICAgIChpcERlZmF1bHRSb3V0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKiBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBEZWZhdWx0Um91dGVyVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcERlZmF1bHRSb3V0ZXJUYWJsZV9kYXRhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICosIHZvaWQgKik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eAorICAgICAgICAoaXBEZWZhdWx0Um91dGVyVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCk7CisgICAgaW50ICAgICAgICAgICAgIGlwRGVmYXVsdFJvdXRlclRhYmxlX2luZGV4X2Zyb21fb2lkKG5ldHNubXBfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKworICAgIC8qCisgICAgICogYWNjZXNzIHRvIGNlcnRhaW4gaW50ZXJuYWxzLiB1c2Ugd2l0aCBjYXV0aW9uIQorICAgICAqLworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcERlZmF1bHRSb3V0ZXJUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2Yyk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBERUZBVUxUUk9VVEVSVEFCTEVfSU5URVJGQUNFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwRGVmYXVsdFJvdXRlclRhYmxlL2lwRGVmYXVsdFJvdXRlclRhYmxlX29pZHMuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxNGU3MQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcERlZmF1bHRSb3V0ZXJUYWJsZS9pcERlZmF1bHRSb3V0ZXJUYWJsZV9vaWRzLmgKQEAgLTAsMCArMSwzOSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUERFRkFVTFRST1VURVJUQUJMRV9PSURTX0gKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisgICAgLyoKKyAgICAgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBpcERlZmF1bHRSb3V0ZXJUYWJsZSAKKyAgICAgKi8KKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfT0lEICAgICAgICAgICAgICAxLDMsNiwxLDIsMSw0LDM3CisKKyNkZWZpbmUgQ09MVU1OX0lQREVGQVVMVFJPVVRFUkFERFJFU1NUWVBFICAgICAgICAgMQorCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJBRERSRVNTICAgICAgICAgMgorCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJJRklOREVYICAgICAgICAgMworCisjZGVmaW5lIENPTFVNTl9JUERFRkFVTFRST1VURVJMSUZFVElNRSAgICAgICAgIDQKKworI2RlZmluZSBDT0xVTU5fSVBERUZBVUxUUk9VVEVSUFJFRkVSRU5DRSAgICAgICAgIDUKKworCisjZGVmaW5lIElQREVGQVVMVFJPVVRFUlRBQkxFX01JTl9DT0wgICBDT0xVTU5fSVBERUZBVUxUUk9VVEVSTElGRVRJTUUKKyNkZWZpbmUgSVBERUZBVUxUUk9VVEVSVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9JUERFRkFVTFRST1VURVJQUkVGRVJFTkNFCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUERFRkFVTFRST1VURVJUQUJMRV9PSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGExZDg1YwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS5oCkBAIC0wLDAgKzEsOCBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZSkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2VzcykKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkODA3ZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5jCkBAIC0wLDAgKzEsMjIyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoqIFxwYWdlIE1GRCBoZWxwZXIgZm9yIGlwSWZTdGF0c1RhYmxlCisgKgorICogXHNlY3Rpb24gaW50cm8gSW50cm9kdWN0aW9uCisgKiBJbnRyb2R1Y3RvcnkgdGV4dC4KKyAqCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KKworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorCitjb25zdCBvaWQgICAgICAgaXBJZlN0YXRzVGFibGVfb2lkW10gPSB7IElQSUZTVEFUU1RBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwSWZTdGF0c1RhYmxlX29pZF9zaXplID0gT0lEX0xFTkdUSChpcElmU3RhdHNUYWJsZV9vaWQpOworCitpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0Oworc3RhdGljIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3A7CisKK3ZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpOworCisKKy8qKgorICogSW5pdGlhbGl6ZXMgdGhlIGlwSWZTdGF0c1RhYmxlIG1vZHVsZQorICovCit2b2lkCitpbml0X2lwSWZTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aW5pdF9pcElmU3RhdHNUYWJsZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDA6bzogUGVyZm9ybSBpcElmU3RhdHNUYWJsZSBvbmUtdGltZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nCisgICAgICovCisgICAgaWYgKHNob3VsZF9pbml0KCJpcElmU3RhdHNUYWJsZSIpKQorICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwSWZTdGF0c1RhYmxlKCk7CisKKyAgICAvKgorICAgICAqIGxhc3QgY2hhbmdlZCBzaG91bGQgYmUgMCBhdCBzdGFydHVwCisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfbGFzdENoYW5nZV9zZXQoMCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfaXBJZlN0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0LWRvd24gdGhlIGlwSWZTdGF0c1RhYmxlIG1vZHVsZSAoYWdlbnQgaXMgZXhpdGluZykKKyAqLwordm9pZAorc2h1dGRvd25faXBJZlN0YXRzVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImlwSWZTdGF0c1RhYmxlIikpCisgICAgICAgIHNodXRkb3duX3RhYmxlX2lwSWZTdGF0c1RhYmxlKCk7CisKK30KKworLyoqCisgKiBJbml0aWFsaXplIHRoZSB0YWJsZSBpcElmU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2lwSWZTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgdV9sb25nICAgICAgICAgIGZsYWdzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMTpvOiBQZXJmb3JtIGlwSWZTdGF0c1RhYmxlIG9uZS10aW1lIHRhYmxlIGluaXRpYWxpemF0aW9uLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMjpvOiB8LT5Jbml0aWFsaXplIGlwSWZTdGF0c1RhYmxlIHVzZXIgY29udGV4dAorICAgICAqIGlmIHlvdSdkIGxpa2UgdG8gcGFzcyBpbiBhIHBvaW50ZXIgdG8gc29tZSBkYXRhIGZvciB0aGlzCisgICAgICogdGFibGUsIGFsbG9jYXRlIG9yIHNldCBpdCB1cCBoZXJlLgorICAgICAqLworICAgIC8qCisgICAgICogYSBuZXRzbm1wX2RhdGFfbGlzdCBpcyBhIHNpbXBsZSB3YXkgdG8gc3RvcmUgdm9pZCBwb2ludGVycy4gQSBzaW1wbGUKKyAgICAgKiBzdHJpbmcgdG9rZW4gaXMgdXNlZCB0byBhZGQsIGZpbmQgb3IgcmVtb3ZlIHBvaW50ZXJzLgorICAgICAqLworICAgIGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wCisJPSBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImlwSWZTdGF0c1RhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfaXBJZlN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKwkoaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9pcElmU3RhdHNUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcElmU3RhdHNUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfaXBJZlN0YXRzVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfaXBJZlN0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGlwSWZTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wKTsKKyAgICBuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YShpcElmU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgaXBJZlN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AgPSBOVUxMOworfQorCisvKioKKyAqIGV4dHJhIGNvbnRleHQgaW5pdGlhbGl6YXRpb24gKGVnIGRlZmF1bHQgdmFsdWVzKQorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4ICAgIDogcm93IHJlcXVlc3QgY29udGV4dAorICogQHBhcmFtIHVzZXJfaW5pdF9jdHggOiB2b2lkIHBvaW50ZXIgZm9yIHVzZXIgKHBhcmFtZXRlciB0byByb3dyZXFfY3R4X2FsbG9jYXRlKQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgIDogbm8gZXJyb3JzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICA6IGVycm9yIChjb250ZXh0IGFsbG9jYXRlIHdpbGwgZmFpbCkKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjEwOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwSWZTdGF0c1RhYmxlIHJvd3JlcSBpbml0aWFsaXphdGlvbi4gKGVnIERFRlZBTFMpCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAoraXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXBJZlN0YXRzVGFibGUgcm93cmVxIGNsZWFudXAuCisgICAgICovCisgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShyb3dyZXFfY3R4LT5kYXRhKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhID0gTlVMTDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwICovCisKKy8qKgorICogcHJlLXJlcXVlc3QgY2FsbGJhY2sKKyAqCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgICAgICAgOiBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMDpvOiBQZXJmb3JtIGlwSWZTdGF0c1RhYmxlIHByZS1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogcG9zdC1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICogTm90ZToKKyAqICAgTmV3IHJvd3MgaGF2ZSBiZWVuIGluc2VydGVkIGludG8gdGhlIGNvbnRhaW5lciwgYW5kCisgKiAgIGRlbGV0ZWQgcm93cyBoYXZlIGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIgYW5kCisgKiAgIHJlbGVhc2VkLgorICoKKyAqIEBwYXJhbSB1c2VyX2NvbnRleHQKKyAqIEBwYXJhbSByYyA6IE1GRF9TVUNDRVNTIGlmIGFsbCByZXF1ZXN0cyBzdWNjZWVkZWQKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBvdGhlciBlcnJvciAoaWdub3JlZCkKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTE6bzogUGVyZm9ybSBpcElmU3RhdHNUYWJsZSBwb3N0LXJlcXVlc3QgYWN0aW9ucy4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKworLyoqIEB7ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYTk1NmYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGUuaApAQCAtMCwwICsxLDIwMCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9ICisjZGVmaW5lIElQSUZTVEFUU1RBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKy8qKiBAYWRkdG9ncm91cCBtaXNjIG1pc2M6IE1pc2NlbGxhbmVvdXMgcm91dGluZXMKKyAqCisgKiBAeworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBzdGF0cy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmg+CisKKyAgICAvKgorICAgICAqIG90aGVyIHJlcXVpcmVkIG1vZHVsZSBjb21wb25lbnRzIAorICAgICAqLworICAgIC8qICpJTkRFTlQtT0ZGKiAgKi8KK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQpCisgICAgLyogKklOREVOVC1PTiogICovCisKKyAgICAvKgorICAgICAqIE9JRCBhbmQgY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgaXBJZlN0YXRzVGFibGUgCisgICAgICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGVfb2lkcy5oIgorCisgICAgLyoKKyAgICAgKiBlbnVtIGRlZmluaW9ucyAKKyAgICAgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9lbnVtcy5oIgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfaXBJZlN0YXRzVGFibGUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwSWZTdGF0c1RhYmxlKHZvaWQpOworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBXaGVuIHlvdSByZWdpc3RlciB5b3VyIG1pYiwgeW91IGdldCB0byBwcm92aWRlIGEgZ2VuZXJpYworICAgICAqIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHlvdSBmb3IgbW9zdCBvZiB0aGUKKyAgICAgKiBmdW5jdGlvbnMgY2FsbHMuCisgICAgICoKKyAgICAgKiBUT0RPOjEwMDpyOiBSZXZpZXcgYWxsIGNvbnRleHQgc3RydWN0dXJlcworICAgICAqLworICAgIC8qCisgICAgICogVE9ETzoxMDE6bzogfC0+IFJldmlldyBpcElmU3RhdHNUYWJsZSByZWdpc3RyYXRpb24gY29udGV4dC4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfZGF0YV9saXN0IGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBUT0RPOjExMDpyOiB8LT4gUmV2aWV3IGlwSWZTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBzdHJ1Y3R1cmUuCisgICAgICogVGhpcyBzdHJ1Y3R1cmUgaXMgdXNlZCB0byByZXByZXNlbnQgdGhlIGRhdGEgZm9yIGlwSWZTdGF0c1RhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSBpcElmU3RhdHNUYWJsZV9kYXRhOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTIwOnI6IHwtPiBSZXZpZXcgaXBJZlN0YXRzVGFibGUgbWliIGluZGV4LgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRleCBmb3IgaXBJZlN0YXRzVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXBJZlN0YXRzVGFibGVfbWliX2luZGV4X3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0lQVmVyc2lvbigxKS9JbmV0VmVyc2lvbi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBpcElmU3RhdHNJUFZlcnNpb247CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICAgICAqLworICAgICAgICBsb25nICAgICAgICAgICAgaXBJZlN0YXRzSWZJbmRleDsKKworCisgICAgfSBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXg7CisKKyAgICAvKgorICAgICAqIFRPRE86MTIxOnI6IHwgICB8LT4gUmV2aWV3IGlwSWZTdGF0c1RhYmxlIG1heCBpbmRleCBsZW5ndGguCisgICAgICogSWYgeW91IEtOT1cgdGhhdCB5b3VyIGluZGV4ZXMgd2lsbCBuZXZlciBleGNlZWQgYSBjZXJ0YWluCisgICAgICogbGVuZ3RoLCB1cGRhdGUgdGhpcyBtYWNybyB0byB0aGF0IGxlbmd0aC4KKyAgICAgKi8KKyNkZWZpbmUgTUFYX2lwSWZTdGF0c1RhYmxlX0lEWF9MRU4gICAgIDIKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxMzA6bzogfC0+IFJldmlldyBpcElmU3RhdHNUYWJsZSBSb3cgcmVxdWVzdCAocm93cmVxKSBjb250ZXh0LgorICAgICAqIFdoZW4geW91ciBmdW5jdGlvbnMgYXJlIGNhbGxlZCwgeW91IHdpbGwgYmUgcGFzc2VkIGEKKyAgICAgKiBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4IHBvaW50ZXIuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9zIHsKKworICAgIC8qKiB0aGlzIG11c3QgYmUgZmlyc3QgZm9yIGNvbnRhaW5lciBjb21wYXJlIHRvIHdvcmsgKi8KKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9pcElmU3RhdHNUYWJsZV9JRFhfTEVOXTsKKworICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggdGJsX2lkeDsKKworICAgICAgICBpcElmU3RhdHNUYWJsZV9kYXRhICpkYXRhOworCisgICAgICAgIC8qCisgICAgICAgICAqIGZsYWdzIHBlciByb3cuIEN1cnJlbnRseSwgdGhlIGZpcnN0IChsb3dlcikgOCBiaXRzIGFyZSByZXNlcnZlZAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIuIFNlZSBtZmQuaCBmb3Igb3RoZXIgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgICAgcm93cmVxX2ZsYWdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MTMxOm86IHwgICB8LT4gQWRkIHVzZWZ1bCBkYXRhIHRvIGlwSWZTdGF0c1RhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGtub3duX21pc3Npbmc7CisgICAgICAgIHVpbnQzMl90ICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZTsKKyAgICAgICAgdWludDMyX3QgICAgICAgIGlwSWZTdGF0c1JlZnJlc2hSYXRlOworCisgICAgICAgIC8qCisgICAgICAgICAqIHN0b3JhZ2UgZm9yIGZ1dHVyZSBleHBhbnNpb24KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICppcElmU3RhdHNUYWJsZV9kYXRhX2xpc3Q7CisKKyAgICB9IGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBpcElmU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eF9zIHsKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICB9IGlwSWZTdGF0c1RhYmxlX3JlZl9yb3dyZXFfY3R4OworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAqLworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB1c2VyX2NvbnRleHQpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHVzZXJfY29udGV4dCwgaW50IHJjKTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCB2b2lkICp1c2VyX2luaXRfY3R4KTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9kYXRhICppcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEoaXBJZlN0YXRzVGFibGVfZGF0YSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhKTsKKworCisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBJZlN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCk7CisKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgaXBJZlN0YXRzVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwSWZTdGF0c1RhYmxlX29pZF9zaXplOworCisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgiCisKKyAgICAvKgorICAgICAqIERVTU1ZIG1hcmtlcnMsIGlnbm9yZQorICAgICAqCisgICAgICogVE9ETzowOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjI5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzozOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86NDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MTlkZWEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwpAQCAtMCwwICsxLDQxMCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZS5oIgorCisKKyNpbmNsdWRlICJpcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgorCitzdGF0aWMgaW50ICAgICAgaXBpc19jYWNoZV9yZWZyZXNoID0gSVBJRlNUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVDsKKworLyoqIEBpbmdyb3VwIGludGVyZmFjZQorICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gbG9jYXRlIHRoZSBkYXRhIHVzZWQgdG8gc2F0aXNmeQorICogcmVxdWVzdHMuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcElmU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgKi8KKworLyoqCisgKiBpbml0aWFsaXphdGlvbiBmb3IgaXBJZlN0YXRzVGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBpcElmU3RhdHNUYWJsZV9yZWcKKyAqICAgICAgICBQb2ludGVyIHRvIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICA6IHVucmVjb3ZlcmFibGUgZXJyb3IuCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfaW5pdF9kYXRhKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIGlwSWZTdGF0c1RhYmxlX3JlZykKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbml0X2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozMDM6bzogSW5pdGlhbGl6ZSBpcElmU3RhdHNUYWJsZSBkYXRhLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2luaXQoKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5pdF9kYXRhICovCisKKy8qKgorICogY29udGFpbmVyIG92ZXJ2aWV3CisgKgorICovCisKKy8qKgorICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKKyAqICAgICAgICBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyLCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmV0dXJuIGl0CisgKiAgICAgICAgdG8gdGhlIE1GRCBoZWxwZXIuIElmIHNldCB0byBOVUxMLCB0aGUgTUZEIGhlbHBlciB3aWxsCisgKiAgICAgICAgYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHlvdS4KKyAqIEBwYXJhbSAgY2FjaGUgQSBwb2ludGVyIHRvIGEgY2FjaGUgc3RydWN0dXJlLiBZb3UgY2FuIHNldCB0aGUgdGltZW91dAorICogICAgICAgICBhbmQgb3RoZXIgY2FjaGUgZmxhZ3MgdXNpbmcgdGhpcyBwb2ludGVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzdGFydHVwIHRvIGFsbG93IHlvdSB0byBjdXN0b21pemUgY2VydGFpbgorICogIGFzcGVjdHMgb2YgdGhlIGFjY2VzcyBtZXRob2QuIEZvciB0aGUgbW9zdCBwYXJ0LCBpdCBpcyBmb3IgYWR2YW5jZWQKKyAqICB1c2Vycy4gVGhlIGRlZmF1bHQgY29kZSBzaG91bGQgc3VmZmljZSBmb3IgbW9zdCBjYXNlcy4gSWYgbm8gY3VzdG9tCisgKiAgY29udGFpbmVyIGlzIGFsbG9jYXRlZCwgdGhlIE1GRCBjb2RlIHdpbGwgY3JlYXRlIG9uZSBmb3IgeW91ci4KKyAqCisgKiAgVGhpcyBpcyBhbHNvIHRoZSBwbGFjZSB0byBzZXQgdXAgY2FjaGUgYmVoYXZpb3IuIFRoZSBkZWZhdWx0LCB0bworICogIHNpbXBseSBzZXQgdGhlIGNhY2hlIHRpbWVvdXQsIHdpbGwgd29yayB3ZWxsIHdpdGggdGhlIGRlZmF1bHQKKyAqICBjb250YWluZXIuIElmIHlvdSBhcmUgdXNpbmcgYSBjdXN0b20gY29udGFpbmVyLCB5b3UgbWF5IHdhbnQgdG8KKyAqICBsb29rIGF0IHRoZSBjYWNoZSBoZWxwZXIgZG9jdW1lbnRhdGlvbiB0byBzZWUgaWYgdGhlcmUgYXJlIGFueQorICogIGZsYWdzIHlvdSB3YW50IHRvIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgaW5pdGlhbGl6YXRpb24gbmVlZGVkCisgKiAgZm9yIHlvdSBkYXRhIHNvdXJjZS4gRm9yIGV4YW1wbGUsIG9wZW5pbmcgYSBjb25uZWN0aW9uIHRvIGFub3RoZXIKKyAqICBwcm9jZXNzIHRoYXQgd2lsbCBzdXBwbHkgdGhlIGRhdGEsIG9wZW5pbmcgYSBkYXRhYmFzZSwgZXRjLgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKiBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIFdlIGNyZWF0ZSBhIGN1c3RvbSBjb250YWluZXIgaGVyZSBzbyB3ZSBjYW4gcHJlLWxvYWQgaXQsIHdoaWNoCisgICAgICogd2lsbCByZXN1bHQgaW4gYWxsIG5ldyBlbnRyaWVzIHdpdGggbGFzdCBjaGFuZ2VkIHZhbHVlcy4gd2UgbmVlZAorICAgICAqIHRvIGNsZWFyIHRob3NlLi4uICBXZSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIGlmSW5kZXhlcyBoYXZlIGJlZW4KKyAgICAgKiBhc3NpZ25lZC4uLgorICAgICAqLworICAgICpjb250YWluZXJfcHRyX3B0ciA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImlwSWZTdGF0c1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMICE9ICpjb250YWluZXJfcHRyX3B0cikgeworICAgICAgICAoKmNvbnRhaW5lcl9wdHJfcHRyKS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwSWZTdGF0c1RhYmxlIik7CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKCpjb250YWluZXJfcHRyX3B0cik7CisgICAgfQorICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgaXBJZlN0YXRzVGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IElQSUZTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7ICAgICAgLyogc2Vjb25kcyAqLworCisgICAgY2FjaGUtPmZsYWdzIHw9CisgICAgICAgIChORVRTTk1QX0NBQ0hFX0RPTlRfQVVUT19SRUxFQVNFIHwgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfRVhQSVJFRAorICAgICAgICAgfCBORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9CRUZPUkVfTE9BRCB8CisgICAgICAgICBORVRTTk1QX0NBQ0hFX0FVVE9fUkVMT0FEKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKi8KK3N0YXRpYyB2b2lkCitfY2hlY2tfZm9yX3VwZGF0ZXMoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKnN0YXRzKQoreworICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKmlmc3RhdHNfZW50cnk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGZvciBtYXRjaGluZyBlbnRyeS4gd29ya3MgYmVjYXVzZSBpbmRleGVzIGFyZSB0aGUgc2FtZS4KKyAgICAgKi8KKyAgICBpZnN0YXRzX2VudHJ5ID0gKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkqKUNPTlRBSU5FUl9GSU5EKHN0YXRzLCByb3dyZXFfY3R4LT5kYXRhKTsKKyAgICBpZiAoTlVMTCA9PSBpZnN0YXRzX2VudHJ5KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAidXBkYXRpbmcgbWlzc2luZyBlbnRyeVxuIikpOworCisgICAgICAgIC8qCisgICAgICAgICAqIG1hcmsgcm93IGFzIG1pc3NpbmcsIHNvIHdlIGNhbiBzZXQgZGlzY29udGludWl0eQorICAgICAgICAgKiB3aGVuIGl0IGNvbWVzIGJhY2suCisgICAgICAgICAqCisgICAgICAgICAqIHdoYXQgZWxzZSBzaG91bGQgd2UgZG8/IHNldCByZWZyZXNoIHRvIDA/IHRoYXQncyBub3QgcXVpdGUgcmlnaHQuLi4KKyAgICAgICAgICovCisgICAgICAgIHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTphY2Nlc3MiLAorICAgICAgICAgICAgICAgICAgICAidXBkYXRpbmcgZXhpc3RpbmcgZW50cnlcbiIpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBDaGVjayBmb3IgY2hhbmdlcyAmIHVwZGF0ZQorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfdXBkYXRlKHJvd3JlcV9jdHgtPmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmc3RhdHNfZW50cnkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIHNldCBkaXNjb250aW51aXR5IGlmIHByZXZpb3VzbHkgbWlzc2luZy4KKyAgICAgICAgICovCisgICAgICAgIGlmICgxID09IHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcpIHsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmtub3duX21pc3NpbmcgPSAwOworICAgICAgICAgICAgcm93cmVxX2N0eC0+aXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfbGFzdENoYW5nZV9zZXQobmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKCkpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIGVudHJ5IGZyb20gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBDT05UQUlORVJfUkVNT1ZFKHN0YXRzLCBpZnN0YXRzX2VudHJ5KTsKKyAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShpZnN0YXRzX2VudHJ5KTsKKyAgICB9Cit9CisKKy8qKgorICogYWRkIG5ldyBlbnRyeQorICovCitzdGF0aWMgdm9pZAorX2FkZF9uZXcobmV0c25tcF9zeXN0ZW1zdGF0c19lbnRyeSAqaWZzdGF0c19lbnRyeSwKKyAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTphY2Nlc3MiLCAiY3JlYXRpbmcgbmV3IGVudHJ5XG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlmc3RhdHNfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgYW4gcm93IGNvbnRleHQgYW5kIHNldCB0aGUgaW5kZXgoZXMpCisgICAgICovCisgICAgcm93cmVxX2N0eCA9CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaWZzdGF0c19lbnRyeSwgTlVMTCk7CisgICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpCisgICAgICAgICYmIChNRkRfU1VDQ0VTUyA9PQorICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmc3RhdHNfZW50cnktPmluZGV4WzBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZzdGF0c19lbnRyeS0+aW5kZXhbMV0pKSkgeworICAgICAgICByb3dyZXFfY3R4LT5pcElmU3RhdHNSZWZyZXNoUmF0ZSA9IGlwaXNfY2FjaGVfcmVmcmVzaCAqIDEwMDA7ICAgLyogbWlsbGktc2Vjb25kcyAqLworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIGlwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSByb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfZnJlZShpZnN0YXRzX2VudHJ5KTsKKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBjb250YWluZXIgc2h1dGRvd24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0ciBBIHBvaW50ZXIgdG8gdGhlIGNvbnRhaW5lci4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc2h1dGRvd24gdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBiZWZvcmUgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcl9wdHIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXJfcHRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgcGFyYW1zIHRvIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93blxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgaXBJZlN0YXRzVGFibGUgZGF0YSBsb2FkCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBiZSBjYWxsZWQgYnkgdGhlIGNhY2hlIGhlbHBlciB0byBsb2FkCisgKiB0aGUgY29udGFpbmVyIGFnYWluIChhZnRlciB0aGUgY29udGFpbmVyIGZyZWUgZnVuY3Rpb24gaGFzIGJlZW4KKyAqIGNhbGxlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBjb250ZW50cykuCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKnN0YXRzOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKworICAgIHN0YXRzID0gbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2xvYWQoTlVMTCwgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9JRlRBQkxFKTsKKyAgICBpZiAoTlVMTCA9PSBzdGF0cykKKyAgICAgICAgcmV0dXJuIE1GRF9SRVNPVVJDRV9VTkFWQUlMQUJMRTsgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworCisgICAgLyoKKyAgICAgKiBUT0RPOjM1MTpNOiB8LT4gTG9hZC91cGRhdGUgZGF0YSBpbiB0aGUgaXBJZlN0YXRzVGFibGUgY29udGFpbmVyLgorICAgICAqIGxvb3Agb3ZlciB5b3VyIGlwSWZTdGF0c1RhYmxlIGRhdGEsIGFsbG9jYXRlIGEgcm93cmVxIGNvbnRleHQsCisgICAgICogc2V0IHRoZSBpbmRleChlcykgW2FuZCBkYXRhLCBvcHRpb25hbGx5XSBhbmQgaW5zZXJ0IGludG8KKyAgICAgKiB0aGUgY29udGFpbmVyLgorICAgICAqLworCisgICAgLyoKKyAgICAgKiB3ZSBqdXN0IGdvdCBhIGZyZXNoIGNvcHkgb2YgZGF0YS4gY29tcGFyZSBpdCB0bworICAgICAqIHdoYXQgd2UndmUgYWxyZWFkeSBnb3QsIGFuZCBtYWtlIGFueSBhZGp1c3RlbWVudHMuLi4KKyAgICAgKi8KKyAgICBDT05UQUlORVJfRk9SX0VBQ0goY29udGFpbmVyLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKKyAgICAgICAgICAgICAgICAgICAgICAgX2NoZWNrX2Zvcl91cGRhdGVzLCBzdGF0cyk7CisKKyAgICAvKgorICAgICAqIG5vdyBhZGQgYW55IG5ldyBlbnRyaWVzCisgICAgICovCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKHN0YXRzLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMgKikKKyAgICAgICAgICAgICAgICAgICAgICAgX2FkZF9uZXcsIGNvbnRhaW5lcik7CisKKworICAgIC8qCisgICAgICAqIGZyZWUgdGhlIGNvbnRhaW5lci4gd2UndmUgZWl0aGVyIGNsYWltZWQgZWFjaCBpZmVudHJ5LCBvciByZWxlYXNlZCBpdCwKKyAgICAgKiBzbyB0aGUgZGFsIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBjbGVhciB0aGUgY29udGFpbmVyLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9mcmVlKHN0YXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfRlJFRV9ET05UX0NMRUFSKTsKKworICAgIERFQlVHTVNHVCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgIiVsdSByZWNvcmRzXG4iLCAodW5zaWduZWQgbG9uZylDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkICovCisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM4MDpNOiBGcmVlIGlwSWZTdGF0c1RhYmxlIGNvbnRhaW5lciBkYXRhLgorICAgICAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIHByZXBhcmUgcm93IGZvciBwcm9jZXNzaW5nLgorICoKKyAqICBXaGVuIHRoZSBhZ2VudCBoYXMgbG9jYXRlZCB0aGUgcm93IGZvciBhIHJlcXVlc3QsIHRoaXMgZnVuY3Rpb24gaXMKKyAqICBjYWxsZWQgdG8gcHJlcGFyZSB0aGUgcm93IGZvciBwcm9jZXNzaW5nLiBJZiB5b3UgZnVsbHkgcG9wdWxhdGVkCisgKiAgdGhlIGRhdGEgY29udGV4dCBkdXJpbmcgdGhlIGluZGV4IHNldHVwIHBoYXNlLCB5b3UgbWF5IG5vdCBuZWVkIHRvCisgKiAgZG8gYW55dGhpbmcuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHggcG9pbnRlciB0byBhIGNvbnRleHQuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9yb3dfcHJlcChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9yb3dfcHJlcCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfcm93X3ByZXAgKi8KKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZjc2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMCwwICsxLDcwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX0RBVEFfQUNDRVNTX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luaXRfZGF0YShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVnKTsKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjE4MDpvOiBSZXZpZXcgaXBJZlN0YXRzVGFibGUgY2FjaGUgdGltZW91dC4KKyAgICAgKiBUaGUgbnVtYmVyIG9mIHNlY29uZHMgYmVmb3JlIHRoZSBjYWNoZSB0aW1lcyBvdXQKKyAgICAgKi8KKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVCAgIDYwCisKKyAgICB2b2lkICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSk7CisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyKTsKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jYWNoZV9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9jYWNoZV9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjY3M2RjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKQEAgLTAsMCArMSwzMDE1IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxMjA4OCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX2dldCBkYXRhX2dldDogUm91dGluZXMgdG8gZ2V0IGRhdGEKKyAqCisgKiBUT0RPOjIzMDpNOiBJbXBsZW1lbnQgaXBJZlN0YXRzVGFibGUgZ2V0IHJvdXRpbmVzLgorICogVE9ETzoyNDA6TTogSW1wbGVtZW50IGlwSWZTdGF0c1RhYmxlIG1hcHBpbmcgcm91dGluZXMgKGlmIGFueSkuCisgKgorICogVGhlc2Ugcm91dGluZSBhcmUgdXNlZCB0byBnZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIGEgcG9pbnRlciB0byB0aGUgbWVtb3J5IHdoZXJlIHRoZQorICogdmFsdWUgc2hvdWxkIGJlIGNvcGllZC4KKyAqCisgKiBAeworICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwSWZTdGF0c1RhYmxlIGlzIHN1YmlkIDMgb2YgaXBUcmFmZmljU3RhdHMuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMsIGxlbmd0aDogOQorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGlwSWZTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKy8qCisgKiBpcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhCisgKgorICogUHVycG9zZTogY3JlYXRlIG5ldyBpcElmU3RhdHNUYWJsZV9kYXRhLgorICovCitpcElmU3RhdHNUYWJsZV9kYXRhICoKK2lwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCkKK3sKKyAgICAvKgorICAgICAqIFRPRE86MjAxOnI6IHwtPiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpcElmU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQuCisgICAgICovCisgICAgaXBJZlN0YXRzVGFibGVfZGF0YSAqcnRuID0gU05NUF9NQUxMT0NfVFlQRURFRihpcElmU3RhdHNUYWJsZV9kYXRhKTsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJ0bikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5hYmxlIHRvIG1hbGxvYyBtZW1vcnkgZm9yIG5ldyAiCisgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZV9kYXRhLlxuIik7CisgICAgfQorCisgICAgcmV0dXJuIHJ0bjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSAqLworCisvKgorICogaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhCisgKgorICogUHVycG9zZTogcmVsZWFzZSBpcElmU3RhdHNUYWJsZSBkYXRhLgorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEoaXBJZlN0YXRzVGFibGVfZGF0YSAqIGRhdGEpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjAyOnI6IHwtPiByZWxlYXNlIG1lbW9yeSBmb3IgdGhlIGlwSWZTdGF0c1RhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBmcmVlKGRhdGEpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEgKi8KKworCisKKy8qKgorICogc2V0IG1pYiBpbmRleChlcykKKyAqCisgKiBAcGFyYW0gdGJsX2lkeCBtaWIgaW5kZXggc3RydWN0dXJlCisgKiBAcGFyYW0gaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbAorICogQHBhcmFtIGlwSWZTdGF0c0lmSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBpcElmU3RhdHNJUFZlcnNpb25fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwSWZTdGF0c0lmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGlwSWZTdGF0c0lQVmVyc2lvbigxKS9JbmV0VmVyc2lvbi9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvYS93L0Uvci9kL2ggCisgICAgICovCisgICAgLyoqIFdBUk5JTkc6IHRoaXMgY29kZSBtaWdodCBub3Qgd29yayBmb3IgbmV0c25tcF9pZnN0YXRzX2VudHJ5ICovCisgICAgdGJsX2lkeC0+aXBJZlN0YXRzSVBWZXJzaW9uID0gaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbDsKKworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIC8qKiBXQVJOSU5HOiB0aGlzIGNvZGUgbWlnaHQgbm90IHdvcmsgZm9yIG5ldHNubXBfaWZzdGF0c19lbnRyeSAqLworICAgIHRibF9pZHgtPmlwSWZTdGF0c0lmSW5kZXggPSBpcElmU3RhdHNJZkluZGV4X3ZhbDsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcworICoKKyAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogQHJlbWFyaworICogIFRoaXMgZnVuY3Rpb24gc2V0cyB0aGUgbWliIGluZGV4cywgdGhlbiB1cGRhdGVzIHRoZSBvaWQgaW5kZXhzCisgKiAgZnJvbSB0aGUgbWliIGluZGV4LgorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwSWZTdGF0c0lQVmVyc2lvbl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGlwSWZTdGF0c0lmSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCgmcm93cmVxX2N0eC0+dGJsX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJUFZlcnNpb25fdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0lmSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBpcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJblJlY2VpdmVzCisgKiBpcElmU3RhdHNJblJlY2VpdmVzIGlzIHN1YmlkIDMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMworICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyByZWNlaXZlZCwgaW5jbHVkaW5nCisgICAgICAgICAgICB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblJlY2VpdmVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5SZWNlaXZlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJblJlY2VpdmVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJblJlY2VpdmVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luUmVjZWl2ZXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luUmVjZWl2ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luUmVjZWl2ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5SZWNlaXZlcworICogaXBJZlN0YXRzSENJblJlY2VpdmVzIGlzIHN1YmlkIDQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyByZWNlaXZlZCwgaW5jbHVkaW5nCisgICAgICAgICAgICB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZQorICAgICAgICAgICAgZGF0YWdyYW1zIGFzIGlwSWZTdGF0c0luUmVjZWl2ZXMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlcgorICAgICAgICAgICAgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5SZWNlaXZlcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENJblJlY2VpdmVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5SZWNlaXZlcyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5SZWNlaXZlcy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luT2N0ZXRzCisgKiBpcElmU3RhdHNJbk9jdGV0cyBpcyBzdWJpZCA1IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjUKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gaW5wdXQgSVAgZGF0YWdyYW1zLAorICAgICAgICAgICAgaW5jbHVkaW5nIHRob3NlIHJlY2VpdmVkIGluIGVycm9yLiAgT2N0ZXRzIGZyb20gZGF0YWdyYW1zCisgICAgICAgICAgICBjb3VudGVkIGluIGlwSWZTdGF0c0luUmVjZWl2ZXMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5PY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5PY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luT2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbk9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5PY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5PY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luT2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbk9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5PY3RldHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbk9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbk9jdGV0cworICogaXBJZlN0YXRzSENJbk9jdGV0cyBpcyBzdWJpZCA2IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gaW5wdXQgSVAgZGF0YWdyYW1zLAorICAgICAgICAgICAgaW5jbHVkaW5nIHRob3NlIHJlY2VpdmVkIGluIGVycm9yLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZQorICAgICAgICAgICAgc2FtZSBvY3RldHMgYXMgaXBJZlN0YXRzSW5PY3RldHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlcgorICAgICAgICAgICAgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5PY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luT2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5PY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5PY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk9jdGV0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luT2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5PY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luSGRyRXJyb3JzCisgKiBpcElmU3RhdHNJbkhkckVycm9ycyBpcyBzdWJpZCA3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjcKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZGlzY2FyZGVkIGR1ZSB0byBlcnJvcnMgaW4KKyAgICAgICAgICAgIHRoZWlyIElQIGhlYWRlcnMsIGluY2x1ZGluZyB2ZXJzaW9uIG51bWJlciBtaXNtYXRjaCwgb3RoZXIKKyAgICAgICAgICAgIGZvcm1hdCBlcnJvcnMsIGhvcCBjb3VudCBleGNlZWRlZCwgZXJyb3JzIGRpc2NvdmVyZWQgaW4KKyAgICAgICAgICAgIHByb2Nlc3NpbmcgdGhlaXIgSVAgb3B0aW9ucywgZXRjLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luSGRyRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luSGRyRXJyb3JzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5IZHJFcnJvcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luSGRyRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luSGRyRXJyb3JzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5IZHJFcnJvcnM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luSGRyRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbk5vUm91dGVzCisgKiBpcElmU3RhdHNJbk5vUm91dGVzIGlzIHN1YmlkIDggb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyBkaXNjYXJkZWQgYmVjYXVzZSBubyByb3V0ZQorICAgICAgICAgICAgY291bGQgYmUgZm91bmQgdG8gdHJhbnNtaXQgdGhlbSB0byB0aGVpciBkZXN0aW5hdGlvbi4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk5vUm91dGVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5Ob1JvdXRlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5Ob1JvdXRlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNJbk5vUm91dGVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTm9Sb3V0ZXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luTm9Sb3V0ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5Ob1JvdXRlc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Ob1JvdXRlcy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luTm9Sb3V0ZXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luQWRkckVycm9ycworICogaXBJZlN0YXRzSW5BZGRyRXJyb3JzIGlzIHN1YmlkIDkgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuOQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUgSVAKKyAgICAgICAgICAgIGFkZHJlc3MgaW4gdGhlaXIgSVAgaGVhZGVyJ3MgZGVzdGluYXRpb24gZmllbGQgd2FzIG5vdCBhCisgICAgICAgICAgICB2YWxpZCBhZGRyZXNzIHRvIGJlIHJlY2VpdmVkIGF0IHRoaXMgZW50aXR5LiAgVGhpcyBjb3VudAorICAgICAgICAgICAgaW5jbHVkZXMgaW52YWxpZCBhZGRyZXNzZXMgKGUuZy4sIDo6MCkuICBGb3IgZW50aXRpZXMgdGhhdAorICAgICAgICAgICAgYXJlIG5vdCBJUCByb3V0ZXJzIGFuZCB0aGVyZWZvcmUgZG8gbm90IGZvcndhcmQgZGF0YWdyYW1zLAorICAgICAgICAgICAgdGhpcyBjb3VudGVyIGluY2x1ZGVzIGRhdGFncmFtcyBkaXNjYXJkZWQgYmVjYXVzZSB0aGUKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2FzIG5vdCBhIGxvY2FsIGFkZHJlc3MuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5BZGRyRXJyb3JzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkFkZHJFcnJvcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbkFkZHJFcnJvcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luQWRkckVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkFERFJFUlJPUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluQWRkckVycm9yczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJblVua25vd25Qcm90b3MKKyAqIGlwSWZTdGF0c0luVW5rbm93blByb3RvcyBpcyBzdWJpZCAxMCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xMAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGxvY2FsbHktYWRkcmVzc2VkIElQIGRhdGFncmFtcyByZWNlaXZlZAorICAgICAgICAgICAgc3VjY2Vzc2Z1bGx5IGJ1dCBkaXNjYXJkZWQgYmVjYXVzZSBvZiBhbiB1bmtub3duIG9yCisgICAgICAgICAgICB1bnN1cHBvcnRlZCBwcm90b2NvbC4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZGF0YWdyYW1zIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZGF0YWdyYW1zLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisKKworCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luVW5rbm93blByb3RvcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJblVua25vd25Qcm90b3MgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJblVua25vd25Qcm90b3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5JblVua25vd25Qcm90b3M7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzCisgKiBpcElmU3RhdHNJblRydW5jYXRlZFBrdHMgaXMgc3ViaWQgMTEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTEKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBJUCBkYXRhZ3JhbXMgZGlzY2FyZGVkIGJlY2F1c2UgdGhlCisgICAgICAgICAgICBkYXRhZ3JhbSBmcmFtZSBkaWRuJ3QgY2FycnkgZW5vdWdoIGRhdGEuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTlRSVU5DQVRFRFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluVHJ1bmNhdGVkUGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMKKyAqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcyBpcyBzdWJpZCAxMiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xMgorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IGRhdGFncmFtcyBmb3Igd2hpY2ggdGhpcyBlbnRpdHkgd2FzIG5vdAorICAgICAgICAgICAgdGhlaXIgZmluYWwgSVAgZGVzdGluYXRpb24gYW5kIGZvciB3aGljaCB0aGlzIGVudGl0eQorICAgICAgICAgICAgYXR0ZW1wdGVkIHRvIGZpbmQgYSByb3V0ZSB0byBmb3J3YXJkIHRoZW0gdG8gdGhhdCBmaW5hbAorICAgICAgICAgICAgZGVzdGluYXRpb24uICBJbiBlbnRpdGllcyB0aGF0IGRvIG5vdCBhY3QgYXMgSVAgcm91dGVycywKKyAgICAgICAgICAgIHRoaXMgY291bnRlciB3aWxsIGluY2x1ZGUgb25seSB0aG9zZSBkYXRhZ3JhbXMgdGhhdCB3ZXJlCisgICAgICAgICAgICBTb3VyY2UtUm91dGVkIHZpYSB0aGlzIGVudGl0eSwgYW5kIHRoZSBTb3VyY2UtUm91dGUKKyAgICAgICAgICAgIHByb2Nlc3Npbmcgd2FzIHN1Y2Nlc3NmdWwuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW5jb21pbmcgaW50ZXJmYWNlIGlzIGluY3JlbWVudGVkIGZvciBlYWNoIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcworICogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXMgaXMgc3ViaWQgMTMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTMKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBpbnB1dCBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QKKyAgICAgICAgICAgIHRoZWlyIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggdGhpcyBlbnRpdHkKKyAgICAgICAgICAgIGF0dGVtcHRlZCB0byBmaW5kIGEgcm91dGUgdG8gZm9yd2FyZCB0aGVtIHRvIHRoYXQgZmluYWwKKyAgICAgICAgICAgIGRlc3RpbmF0aW9uLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIHBhY2tldHMgYXMKKworCisKKyAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lORk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93OworICAgICgqaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5Gb3J3RGF0YWdyYW1zLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNSZWFzbVJlcWRzCisgKiBpcElmU3RhdHNSZWFzbVJlcWRzIGlzIHN1YmlkIDE0IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjE0CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBudW1iZXIgb2YgSVAgZnJhZ21lbnRzIHJlY2VpdmVkIHRoYXQgbmVlZGVkIHRvIGJlCisgICAgICAgICAgICByZWFzc2VtYmxlZCBhdCB0aGlzIGludGVyZmFjZS4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZnJhZ21lbnRzIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZnJhZ21lbnRzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c1JlYXNtUmVxZHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWFzbVJlcWRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1JlYXNtUmVxZHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21SZXFkcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVhc21SZXFkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01SRVFEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzUmVhc21SZXFkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtUmVxZHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1JlYXNtUmVxZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c1JlYXNtT0tzCisgKiBpcElmU3RhdHNSZWFzbU9LcyBpcyBzdWJpZCAxNSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGRhdGFncmFtcyBzdWNjZXNzZnVsbHkgcmVhc3NlbWJsZWQuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZXNlIGRhdGFncmFtcyB3ZXJlIGFkZHJlc3NlZCBpcworICAgICAgICAgICAgaW5jcmVtZW50ZWQuICBUaGlzIGludGVyZmFjZSBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCisgICAgICAgICAgICBpbnB1dCBpbnRlcmZhY2UgZm9yIHNvbWUgb2YgdGhlIGRhdGFncmFtcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbU9LcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWFzbU9Lc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlYXNtT0tzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNSZWFzbU9Lc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbU9LcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNT0tTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNSZWFzbU9Lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtT0tzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNSZWFzbU9Lc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzUmVhc21GYWlscworICogaXBJZlN0YXRzUmVhc21GYWlscyBpcyBzdWJpZCAxNiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNgorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGZhaWx1cmVzIGRldGVjdGVkIGJ5IHRoZSBJUCByZS1hc3NlbWJseQorICAgICAgICAgICAgYWxnb3JpdGhtIChmb3Igd2hhdGV2ZXIgcmVhc29uOiB0aW1lZCBvdXQsIGVycm9ycywgZXRjLikuCisgICAgICAgICAgICBOb3RlIHRoYXQgdGhpcyBpcyBub3QgbmVjZXNzYXJpbHkgYSBjb3VudCBvZiBkaXNjYXJkZWQgSVAKKyAgICAgICAgICAgIGZyYWdtZW50cyBzaW5jZSBzb21lIGFsZ29yaXRobXMgKG5vdGFibHkgdGhlIGFsZ29yaXRobSBpbgorICAgICAgICAgICAgUkZDIDgxNSkgY2FuIGxvc2UgdHJhY2sgb2YgdGhlIG51bWJlciBvZiBmcmFnbWVudHMgYnkKKyAgICAgICAgICAgIGNvbWJpbmluZyB0aGVtIGFzIHRoZXkgYXJlIHJlY2VpdmVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIGludGVyZmFjZSB0byB3aGljaCB0aGVzZSBmcmFnbWVudHMgd2VyZSBhZGRyZXNzZWQgaXMKKyAgICAgICAgICAgIGluY3JlbWVudGVkLiAgVGhpcyBpbnRlcmZhY2UgbWlnaHQgbm90IGJlIHRoZSBzYW1lIGFzIHRoZQorICAgICAgICAgICAgaW5wdXQgaW50ZXJmYWNlIGZvciBzb21lIG9mIHRoZSBmcmFnbWVudHMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzUmVhc21GYWlscyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c1JlYXNtRmFpbHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c1JlYXNtRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzUmVhc21GYWlsc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzUmVhc21GYWlsc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWFzbUZhaWxzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuUmVhc21GYWlsczsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzUmVhc21GYWlsc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSW5EaXNjYXJkcworICogaXBJZlN0YXRzSW5EaXNjYXJkcyBpcyBzdWJpZCAxNyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4xNworICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGlucHV0IElQIGRhdGFncmFtcyBmb3Igd2hpY2ggbm8gcHJvYmxlbXMgd2VyZQorICAgICAgICAgICAgZW5jb3VudGVyZWQgdG8gcHJldmVudCB0aGVpciBjb250aW51ZWQgcHJvY2Vzc2luZywgYnV0CisgICAgICAgICAgICB3ZXJlIGRpc2NhcmRlZCAoZS5nLiwgZm9yIGxhY2sgb2YgYnVmZmVyIHNwYWNlKS4gIE5vdGUgdGhhdAorICAgICAgICAgICAgdGhpcyBjb3VudGVyIGRvZXMgbm90IGluY2x1ZGUgYW55IGRhdGFncmFtcyBkaXNjYXJkZWQgd2hpbGUKKyAgICAgICAgICAgIGF3YWl0aW5nIHJlLWFzc2VtYmx5LgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRGlzY2FyZHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkRpc2NhcmRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkRpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luRGlzY2FyZHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luRGlzY2FyZHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5EaXNjYXJkcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5ESVNDQVJEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluRGlzY2FyZHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luRGlzY2FyZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luRGVsaXZlcnMKKyAqIGlwSWZTdGF0c0luRGVsaXZlcnMgaXMgc3ViaWQgMTggb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTgKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBkYXRhZ3JhbXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB0byBJUAorICAgICAgICAgICAgdXNlci1wcm90b2NvbHMgKGluY2x1ZGluZyBJQ01QKS4KKworICAgICAgICAgICAgV2hlbiB0cmFja2luZyBpbnRlcmZhY2Ugc3RhdGlzdGljcywgdGhlIGNvdW50ZXIgb2YgdGhlCisgICAgICAgICAgICBpbnRlcmZhY2UgdG8gd2hpY2ggdGhlc2UgZGF0YWdyYW1zIHdlcmUgYWRkcmVzc2VkIGlzCisgICAgICAgICAgICBpbmNyZW1lbnRlZC4gIFRoaXMgaW50ZXJmYWNlIG1pZ2h0IG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKKworCisKKyAgICAgICAgICAgIGlucHV0IGludGVyZmFjZSBmb3Igc29tZSBvZiB0aGUgZGF0YWdyYW1zLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luRGVsaXZlcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNJbkRlbGl2ZXJzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luRGVsaXZlcnNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5EZWxpdmVycyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzSW5EZWxpdmVyc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkRlbGl2ZXJzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkRlbGl2ZXJzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5EZWxpdmVyc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbkRlbGl2ZXJzCisgKiBpcElmU3RhdHNIQ0luRGVsaXZlcnMgaXMgc3ViaWQgMTkgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMTkKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBkYXRhZ3JhbXMgc3VjY2Vzc2Z1bGx5IGRlbGl2ZXJlZCB0byBJUAorICAgICAgICAgICAgdXNlci1wcm90b2NvbHMgKGluY2x1ZGluZyBJQ01QKS4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUKKyAgICAgICAgICAgIHNhbWUgcGFja2V0cyBhcyBpcElmU3RhdHNJbkRlbGl2ZXJzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIKKyAgICAgICAgICAgIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luRGVsaXZlcnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luRGVsaXZlcnMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOREVMSVZFUlNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRGVsaXZlcnMubG93OworICAgICgqaXBJZlN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luRGVsaXZlcnMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJbkRlbGl2ZXJzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRSZXF1ZXN0cworICogaXBJZlN0YXRzT3V0UmVxdWVzdHMgaXMgc3ViaWQgMjAgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjAKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBsb2NhbCBJUCB1c2VyLQorICAgICAgICAgICAgcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkgc3VwcGxpZWQgdG8gSVAgaW4gcmVxdWVzdHMgZm9yCisgICAgICAgICAgICB0cmFuc21pc3Npb24uICBOb3RlIHRoYXQgdGhpcyBjb3VudGVyIGRvZXMgbm90IGluY2x1ZGUgYW55CisgICAgICAgICAgICBkYXRhZ3JhbXMgY291bnRlZCBpbiBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dFJlcXVlc3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dFJlcXVlc3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dFJlcXVlc3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dFJlcXVlc3RzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0UmVxdWVzdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDT3V0UmVxdWVzdHMKKyAqIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHMgaXMgc3ViaWQgMjEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBsb2NhbCBJUCB1c2VyLQorICAgICAgICAgICAgcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkgc3VwcGxpZWQgdG8gSVAgaW4gcmVxdWVzdHMgZm9yCisgICAgICAgICAgICB0cmFuc21pc3Npb24uICBUaGlzIG9iamVjdCBjb3VudHMgdGhlIHNhbWUgcGFja2V0cyBhcworCisKKworICAgICAgICAgICAgaXBJZlN0YXRzT3V0UmVxdWVzdHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENPdXRSZXF1ZXN0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDT3V0UmVxdWVzdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENPdXRSZXF1ZXN0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRSRVFVRVNUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRSZXF1ZXN0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFJlcXVlc3RzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0UmVxdWVzdHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENPdXRSZXF1ZXN0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcworICogaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcyBpcyBzdWJpZCAyMyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yMworICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIGRhdGFncmFtcyBmb3Igd2hpY2ggdGhpcyBlbnRpdHkgd2FzIG5vdCB0aGVpcgorICAgICAgICAgICAgZmluYWwgSVAgZGVzdGluYXRpb24gYW5kIGZvciB3aGljaCBpdCB3YXMgc3VjY2Vzc2Z1bCBpbgorICAgICAgICAgICAgZmluZGluZyBhIHBhdGggdG8gdGhlaXIgZmluYWwgZGVzdGluYXRpb24uICBJbiBlbnRpdGllcworICAgICAgICAgICAgdGhhdCBkbyBub3QgYWN0IGFzIElQIHJvdXRlcnMsIHRoaXMgY291bnRlciB3aWxsIGluY2x1ZGUKKyAgICAgICAgICAgIG9ubHkgdGhvc2UgZGF0YWdyYW1zIHRoYXQgd2VyZSBTb3VyY2UtUm91dGVkIHZpYSB0aGlzCisgICAgICAgICAgICBlbnRpdHksIGFuZCB0aGUgU291cmNlLVJvdXRlIHByb2Nlc3Npbmcgd2FzIHN1Y2Nlc3NmdWwuCisKKyAgICAgICAgICAgIFdoZW4gdHJhY2tpbmcgaW50ZXJmYWNlIHN0YXRpc3RpY3MsIHRoZSBjb3VudGVyIG9mIHRoZQorICAgICAgICAgICAgb3V0Z29pbmcgaW50ZXJmYWNlIGlzIGluY3JlbWVudGVkIGZvciBhIHN1Y2Nlc3NmdWxseQorICAgICAgICAgICAgZm9yd2FyZGVkIGRhdGFncmFtLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0Rm9yd0RhdGFncmFtc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zCisgKiBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXMgaXMgc3ViaWQgMjQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjQKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QgdGhlaXIKKyAgICAgICAgICAgIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggaXQgd2FzIHN1Y2Nlc3NmdWwgaW4KKyAgICAgICAgICAgIGZpbmRpbmcgYSBwYXRoIHRvIHRoZWlyIGZpbmFsIGRlc3RpbmF0aW9uLiAgVGhpcyBvYmplY3QKKyAgICAgICAgICAgIGNvdW50cyB0aGUgc2FtZSBwYWNrZXRzIGFzIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMsIGJ1dAorICAgICAgICAgICAgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisKKworCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIFU2NCB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0Rm9yd0RhdGFncmFtcyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURk9SV0RBVEFHUkFNU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmxvdyA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0Rm9yd0RhdGFncmFtcy5oaWdoOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dERpc2NhcmRzCisgKiBpcElmU3RhdHNPdXREaXNjYXJkcyBpcyBzdWJpZCAyNSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yNQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIG91dHB1dCBJUCBkYXRhZ3JhbXMgZm9yIHdoaWNoIG5vIHByb2JsZW0gd2FzCisgICAgICAgICAgICBlbmNvdW50ZXJlZCB0byBwcmV2ZW50IHRoZWlyIHRyYW5zbWlzc2lvbiB0byB0aGVpcgorICAgICAgICAgICAgZGVzdGluYXRpb24sIGJ1dCB3ZXJlIGRpc2NhcmRlZCAoZS5nLiwgZm9yIGxhY2sgb2YKKyAgICAgICAgICAgIGJ1ZmZlciBzcGFjZSkuICBOb3RlIHRoYXQgdGhpcyBjb3VudGVyIHdvdWxkIGluY2x1ZGUKKyAgICAgICAgICAgIGRhdGFncmFtcyBjb3VudGVkIGluIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMgaWYgYW55IHN1Y2gKKyAgICAgICAgICAgIGRhdGFncmFtcyBtZXQgdGhpcyAoZGlzY3JldGlvbmFyeSkgZGlzY2FyZCBjcml0ZXJpb24uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RGlzY2FyZHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0RGlzY2FyZHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dERpc2NhcmRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RGlzY2FyZHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RGlzY2FyZHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dERpc2NhcmRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RGlzY2FyZHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXREaXNjYXJkc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0RnJhZ1JlcWRzCisgKiBpcElmU3RhdHNPdXRGcmFnUmVxZHMgaXMgc3ViaWQgMjYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjYKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCB3b3VsZCByZXF1aXJlIGZyYWdtZW50YXRpb24KKyAgICAgICAgICAgIGluIG9yZGVyIHRvIGJlIHRyYW5zbWl0dGVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ1JlcWRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGcmFnUmVxZHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRGcmFnUmVxZHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ1JlcWRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdSZXFkcyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdSRVFEU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnUmVxZHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnUmVxZHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEZyYWdPS3MKKyAqIGlwSWZTdGF0c091dEZyYWdPS3MgaXMgc3ViaWQgMjcgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMjcKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBoYXZlIGJlZW4gc3VjY2Vzc2Z1bGx5CisgICAgICAgICAgICBmcmFnbWVudGVkLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKworCisKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ09LcyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c091dEZyYWdPS3NfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0RnJhZ09Lc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzT3V0RnJhZ09Lc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRGcmFnT0tzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdPS1NdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdPS3MubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnT0tzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRGcmFnRmFpbHMKKyAqIGlwSWZTdGF0c091dEZyYWdGYWlscyBpcyBzdWJpZCAyOCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGRhdGFncmFtcyB0aGF0IGhhdmUgYmVlbiBkaXNjYXJkZWQgYmVjYXVzZQorICAgICAgICAgICAgdGhleSBuZWVkZWQgdG8gYmUgZnJhZ21lbnRlZCBidXQgY291bGQgbm90IGJlLiAgVGhpcworICAgICAgICAgICAgaW5jbHVkZXMgSVB2NCBwYWNrZXRzIHRoYXQgaGF2ZSB0aGUgREYgYml0IHNldCBhbmQgSVB2NgorICAgICAgICAgICAgcGFja2V0cyB0aGF0IGFyZSBiZWluZyBmb3J3YXJkZWQgYW5kIGV4Y2VlZCB0aGUgb3V0Z29pbmcKKyAgICAgICAgICAgIGxpbmsgTVRVLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYW4gdW5zdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRGcmFnRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRGcmFnRmFpbHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEZyYWdGYWlscyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGcmFnRmFpbHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnRmFpbHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dEZyYWdDcmVhdGVzCisgKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlcyBpcyBzdWJpZCAyOSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4yOQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIG91dHB1dCBkYXRhZ3JhbSBmcmFnbWVudHMgdGhhdCBoYXZlIGJlZW4KKyAgICAgICAgICAgIGdlbmVyYXRlZCBhcyBhIHJlc3VsdCBvZiBJUCBmcmFnbWVudGF0aW9uLgorCisgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKKyAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKKyAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEZyYWdDcmVhdGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdDUkVBVEVTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RnJhZ0NyZWF0ZXMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0VHJhbnNtaXRzCisgKiBpcElmU3RhdHNPdXRUcmFuc21pdHMgaXMgc3ViaWQgMzAgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzAKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCB0aGlzIGVudGl0eSBzdXBwbGllZAorICAgICAgICAgICAgdG8gdGhlIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgVGhpcyBpbmNsdWRlcworICAgICAgICAgICAgZGF0YWdyYW1zIGdlbmVyYXRlZCBsb2NhbGx5IGFuZCB0aG9zZSBmb3J3YXJkZWQgYnkgdGhpcworICAgICAgICAgICAgZW50aXR5LgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dFRyYW5zbWl0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0VHJhbnNtaXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0VHJhbnNtaXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dFRyYW5zbWl0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRUcmFuc21pdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dFRyYW5zbWl0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0VHJhbnNtaXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dFRyYW5zbWl0cworICogaXBJZlN0YXRzSENPdXRUcmFuc21pdHMgaXMgc3ViaWQgMzEgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCB0aGlzIGVudGl0eSBzdXBwbGllZAorICAgICAgICAgICAgdG8gdGhlIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgVGhpcyBvYmplY3QgY291bnRzCisgICAgICAgICAgICB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzT3V0VHJhbnNtaXRzLCBidXQgYWxsb3dzIGZvcgorICAgICAgICAgICAgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dFRyYW5zbWl0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dFRyYW5zbWl0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dFRyYW5zbWl0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFRSQU5TTUlUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRUcmFuc21pdHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0VHJhbnNtaXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRPY3RldHMKKyAqIGlwSWZTdGF0c091dE9jdGV0cyBpcyBzdWJpZCAzMiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zMgorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyBpbiBJUCBkYXRhZ3JhbXMgZGVsaXZlcmVkIHRvIHRoZQorICAgICAgICAgICAgbG93ZXIgbGF5ZXJzIGZvciB0cmFuc21pc3Npb24uICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMKKyAgICAgICAgICAgIGNvdW50ZWQgaW4gaXBJZlN0YXRzT3V0VHJhbnNtaXRzIE1VU1QgYmUgY291bnRlZCBoZXJlLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dE9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dE9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dE9jdGV0cworICogaXBJZlN0YXRzSENPdXRPY3RldHMgaXMgc3ViaWQgMzMgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzMKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgaW4gSVAgZGF0YWdyYW1zIGRlbGl2ZXJlZCB0byB0aGUKKyAgICAgICAgICAgIGxvd2VyIGxheWVycyBmb3IgdHJhbnNtaXNzaW9uLiAgVGhpcyBvYmplY3RzIGNvdW50cyB0aGUgc2FtZQorICAgICAgICAgICAgb2N0ZXRzIGFzIGlwSWZTdGF0c091dE9jdGV0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dE9jdGV0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRPY3RldHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNJbk1jYXN0UGt0cworICogaXBJZlN0YXRzSW5NY2FzdFBrdHMgaXMgc3ViaWQgMzQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzQKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBtdWx0aWNhc3QgZGF0YWdyYW1zIHJlY2VpdmVkLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNJbk1jYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c0luTWNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0luTWNhc3RQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbk1jYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSW5NY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5NY2FzdFBrdHMKKyAqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgaXMgc3ViaWQgMzUgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzUKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBtdWx0aWNhc3QgZGF0YWdyYW1zIHJlY2VpdmVkLiAgVGhpcyBvYmplY3QKKyAgICAgICAgICAgIGNvdW50cyB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzSW5NY2FzdFBrdHMsIGJ1dAorICAgICAgICAgICAgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0UGt0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luTWNhc3RPY3RldHMKKyAqIGlwSWZTdGF0c0luTWNhc3RPY3RldHMgaXMgc3ViaWQgMzYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuMzYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgcmVjZWl2ZWQgaW4gSVAgbXVsdGljYXN0CisKKworCisgICAgICAgICAgICBkYXRhZ3JhbXMuICBPY3RldHMgZnJvbSBkYXRhZ3JhbXMgY291bnRlZCBpbgorICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdFBrdHMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5NY2FzdE9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5NY2FzdE9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0luTWNhc3RPY3RldHNfdmFsX3B0cikgPQorICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5NY2FzdE9jdGV0cy5sb3c7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0cworICogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzIGlzIHN1YmlkIDM3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjM3CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIGluIElQIG11bHRpY2FzdAorICAgICAgICAgICAgZGF0YWdyYW1zLiAgVGhpcyBvYmplY3QgY291bnRzIHRoZSBzYW1lIG9jdGV0cyBhcworICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdE9jdGV0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMubG93OworICAgICgqaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RPY3RldHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNPdXRNY2FzdFBrdHMKKyAqIGlwSWZTdGF0c091dE1jYXN0UGt0cyBpcyBzdWJpZCAzOCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zOAorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIG11bHRpY2FzdCBkYXRhZ3JhbXMgdHJhbnNtaXR0ZWQuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0TWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcElmU3RhdHNPdXRNY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c091dE1jYXN0UGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0TWNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dE1jYXN0UGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdFBrdHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzCisgKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0cyBpcyBzdWJpZCAzOSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS4zOQorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIG11bHRpY2FzdCBkYXRhZ3JhbXMgdHJhbnNtaXR0ZWQuICBUaGlzCisgICAgICAgICAgICBvYmplY3QgY291bnRzIHRoZSBzYW1lIGRhdGFncmFtcyBhcyBpcElmU3RhdHNPdXRNY2FzdFBrdHMsCisgICAgICAgICAgICBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisKKworCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKiBpcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzIGRhdGEuCisgICAgICogZ2V0ICgqIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0UGt0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5oaWdoID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdFBrdHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c091dE1jYXN0T2N0ZXRzCisgKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0cyBpcyBzdWJpZCA0MCBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MAorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCBpbiBJUCBtdWx0aWNhc3QKKyAgICAgICAgICAgIGRhdGFncmFtcy4gIE9jdGV0cyBmcm9tIGRhdGFncmFtcyBjb3VudGVkIGluCisgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdFBrdHMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNPdXRNY2FzdE9jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RPY3RldHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNPdXRNY2FzdE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cworICogaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0cyBpcyBzdWJpZCA0MSBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCBpbiBJUCBtdWx0aWNhc3QKKyAgICAgICAgICAgIGRhdGFncmFtcy4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBvY3RldHMgYXMKKyAgICAgICAgICAgIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzLCBidXQgYWxsb3dzIGZvciBsYXJnZXIgdmFsdWVzLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVI2NCAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUjY0KQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVI2NC4gVGhlIEMgdHlwZSBkZWNsIGlzIFU2NCAoVTY0KQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMgZGF0YS4KKyAgICAgKiBnZXQgKCogaXBJZlN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRNY2FzdE9jdGV0cy5sb3c7CisgICAgKCppcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwSWZTdGF0c0VudHJ5LmlwSWZTdGF0c0luQmNhc3RQa3RzCisgKiBpcElmU3RhdHNJbkJjYXN0UGt0cyBpcyBzdWJpZCA0MiBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MgorICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGJyb2FkY2FzdCBkYXRhZ3JhbXMgcmVjZWl2ZWQuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5CY2FzdFBrdHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwSWZTdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXBJZlN0YXRzVGFibGU6aXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSW5CY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOQkNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93OworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNJbkJjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzSENJbkJjYXN0UGt0cworICogaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBpcyBzdWJpZCA0MyBvZiBpcElmU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjMxLjMuMS40MworICogRGVzY3JpcHRpb246CitUaGUgbnVtYmVyIG9mIElQIGJyb2FkY2FzdCBkYXRhZ3JhbXMgcmVjZWl2ZWQuICBUaGlzIG9iamVjdAorICAgICAgICAgICAgY291bnRzIHRoZSBzYW1lIGRhdGFncmFtcyBhcyBpcElmU3RhdHNJbkJjYXN0UGt0cywgYnV0CisgICAgICAgICAgICBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCisKKyAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAorICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKKyAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKKyAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUjY0IChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSNjQpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUjY0LiBUaGUgQyB0eXBlIGRlY2wgaXMgVTY0IChVNjQpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBVNjQgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwSWZTdGF0c0hDSW5CY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKS5sb3cgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luQmNhc3RQa3RzLmxvdzsKKyAgICAoKmlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMuaGlnaDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzSENJbkJjYXN0UGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzT3V0QmNhc3RQa3RzCisgKiBpcElmU3RhdHNPdXRCY2FzdFBrdHMgaXMgc3ViaWQgNDQgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDQKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBicm9hZGNhc3QgZGF0YWdyYW1zIHRyYW5zbWl0dGVkLgorCisgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKKyAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCisgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCisgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwSWZTdGF0c091dEJjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXBJZlN0YXRzT3V0QmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcElmU3RhdHNPdXRCY2FzdFBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c091dEJjYXN0UGt0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNPdXRCY2FzdFBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRCQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKKyAgICAoKmlwSWZTdGF0c091dEJjYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzT3V0QmNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNIQ091dEJjYXN0UGt0cworICogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMgaXMgc3ViaWQgNDUgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDUKKyAqIERlc2NyaXB0aW9uOgorVGhlIG51bWJlciBvZiBJUCBicm9hZGNhc3QgZGF0YWdyYW1zIHRyYW5zbWl0dGVkLiAgVGhpcworICAgICAgICAgICAgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBkYXRhZ3JhbXMgYXMgaXBJZlN0YXRzT3V0QmNhc3RQa3RzLAorICAgICAgICAgICAgYnV0IGFsbG93cyBmb3IgbGFyZ2VyIHZhbHVlcy4KKworICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CisgICAgICAgICAgICByZS1pbml0aWFsaXphdGlvbiBvZiB0aGUgbWFuYWdlbWVudCBzeXN0ZW0sIGFuZCBhdCBvdGhlcgorICAgICAgICAgICAgdGltZXMgYXMgaW5kaWNhdGVkIGJ5IHRoZSB2YWx1ZSBvZgorICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSNjQgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVI2NCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSNjQuIFRoZSBDIHR5cGUgZGVjbCBpcyBVNjQgKFU2NCkKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNIQ091dEJjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgVTY0IHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNIQ091dEJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcElmU3RhdHNIQ091dEJjYXN0UGt0cyBkYXRhLgorICAgICAqIGdldCAoKiBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcElmU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKworICAgICgqaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikubG93ID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRCY2FzdFBrdHMubG93OworICAgICgqaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmhpZ2g7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcElmU3RhdHNFbnRyeS5pcElmU3RhdHNEaXNjb250aW51aXR5VGltZQorICogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUgaXMgc3ViaWQgNDYgb2YgaXBJZlN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLjEuNDYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHZhbHVlIG9mIHN5c1VwVGltZSBvbiB0aGUgbW9zdCByZWNlbnQgb2NjYXNpb24gYXQgd2hpY2gKKworCisKKyAgICAgICAgICAgIGFueSBvbmUgb3IgbW9yZSBvZiB0aGlzIGVudHJ5J3MgY291bnRlcnMgc3VmZmVyZWQgYQorICAgICAgICAgICAgZGlzY29udGludWl0eS4KKworICAgICAgICAgICAgSWYgbm8gc3VjaCBkaXNjb250aW51aXRpZXMgaGF2ZSBvY2N1cnJlZCBzaW5jZSB0aGUgbGFzdCByZS0KKyAgICAgICAgICAgIGluaXRpYWxpemF0aW9uIG9mIHRoZSBsb2NhbCBtYW5hZ2VtZW50IHN1YnN5c3RlbSwgdGhlbiB0aGlzCisgICAgICAgICAgICBvYmplY3QgY29udGFpbnMgYSB6ZXJvIHZhbHVlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgVGltZVN0YW1wIChiYXNlZCBvbiBwZXJsdHlwZSBUSUNLUykKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9USU1FVElDS1MuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZSBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNEaXNjb250aW51aXR5VGltZV92YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXBJZlN0YXRzRW50cnkuaXBJZlN0YXRzUmVmcmVzaFJhdGUKKyAqIGlwSWZTdGF0c1JlZnJlc2hSYXRlIGlzIHN1YmlkIDQ3IG9mIGlwSWZTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMy4xLjQ3CisgKiBEZXNjcmlwdGlvbjoKK1RoZSBtaW5pbXVtIHJlYXNvbmFibGUgcG9sbGluZyBpbnRlcnZhbCBmb3IgdGhpcyBlbnRyeS4KKyAgICAgICAgICAgIFRoaXMgb2JqZWN0IHByb3ZpZGVzIGFuIGluZGljYXRpb24gb2YgdGhlIG1pbmltdW0gYW1vdW50IG9mCisgICAgICAgICAgICB0aW1lIHJlcXVpcmVkIHRvIHVwZGF0ZSB0aGUgY291bnRlcnMgaW4gdGhpcyBlbnRyeS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIFVOU0lHTkVEMzIgKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWZyZXNoUmF0ZSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXBJZlN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcElmU3RhdHNSZWZyZXNoUmF0ZSBkYXRhLgorICAgICAqIGNvcHkgKCogaXBJZlN0YXRzUmVmcmVzaFJhdGVfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFRlJFU0hSQVRFXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcElmU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmlwSWZTdGF0c1JlZnJlc2hSYXRlOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQgKi8KKworCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M3ZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKQEAgLTAsMCArMSwyNDYgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDg4ICQgb2YgJAorICoKKyAqICRJZDokCisgKgorICogQGZpbGUgaXBJZlN0YXRzVGFibGVfZGF0YV9nZXQuaAorICoKKyAqIEBhZGR0b2dyb3VwIGdldAorICoKKyAqIFByb3RvdHlwZXMgZm9yIGdldCBmdW5jdGlvbnMKKyAqCisgKiBAeworICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX0RBVEFfR0VUX0gKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfREFUQV9HRVRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHRVQgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHRVQgVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXBJZlN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zMS4zLCBsZW5ndGg6IDkKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGluZGV4ZXMKKyAgICAgKi8KKworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJblJlY2VpdmVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5SZWNlaXZlc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENJblJlY2VpdmVzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJblJlY2VpdmVzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbk9jdGV0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luT2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ0luT2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5IZHJFcnJvcnNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJbkhkckVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5Ob1JvdXRlc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luTm9Sb3V0ZXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luQWRkckVycm9yc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luQWRkckVycm9yc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzSENJbkZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzUmVhc21SZXFkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtUmVxZHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtT0tzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzUmVhc21PS3NfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1JlYXNtRmFpbHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbkRpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5EaXNjYXJkc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luRGVsaXZlcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5EZWxpdmVyc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5EZWxpdmVyc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0UmVxdWVzdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRSZXF1ZXN0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dERpc2NhcmRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdSZXFkc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdSZXFkc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdPS3NfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdGYWlsc19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c091dEZyYWdGYWlsc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0RnJhZ0NyZWF0ZXNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0VHJhbnNtaXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dFRyYW5zbWl0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0VHJhbnNtaXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0luTWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbk1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSW5NY2FzdE9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENPdXRNY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHNfZ2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVNjQgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNJbkJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0luQmNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ0luQmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSENJbkJjYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzT3V0QmNhc3RQa3RzX2dldChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNIQ091dEJjYXN0UGt0c19nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVTY0ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1JlZnJlc2hSYXRlX3ZhbF9wdHIpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeChpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwSWZTdGF0c0lQVmVyc2lvbl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcElmU3RhdHNJZkluZGV4X3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzSVBWZXJzaW9uX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcElmU3RhdHNJZkluZGV4X3ZhbCk7CisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX0RBVEFfR0VUX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfZW51bXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzY1N2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2VudW1zLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLWVudW1zLm0yYyAxMjUyNiAyMDA1LTA3LTE1IDIyOjQxOjE2WiByc3RvcnkgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgSVBJRlNUQVRTVEFCTEVfRU5VTVNfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9FTlVNU19ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworICAgIC8qCisgICAgICogTk9URVMgb24gZW51bXMKKyAgICAgKiA9PT09PT09PT09PT09PQorICAgICAqCisgICAgICogVmFsdWUgTWFwcGluZworICAgICAqIC0tLS0tLS0tLS0tLS0KKyAgICAgKiBJZiB0aGUgdmFsdWVzIGZvciB5b3VyIGRhdGEgdHlwZSBkb24ndCBleGFjdGx5IG1hdGNoIHRoZQorICAgICAqIHBvc3NpYmxlIHZhbHVlcyBkZWZpbmVkIGJ5IHRoZSBtaWIsIHlvdSBzaG91bGQgbWFwIHRoZW0KKyAgICAgKiBiZWxvdy4gRm9yIGV4YW1wbGUsIGEgYm9vbGVhbiBmbGFnICgxLzApIGlzIHVzdWFsbHkgcmVwcmVzZW50ZWQKKyAgICAgKiBhcyBhIFRydXRoVmFsdWUgaW4gYSBNSUIsIHdoaWNoIG1hcHMgdG8gdGhlIHZhbHVlcyAoMS8yKS4KKyAgICAgKgorICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZW51bSBkZWZpbml0aW9ucyBmb3IgdGFibGUgaXBJZlN0YXRzVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGlwSWZTdGF0c0lQVmVyc2lvbiAoSW5ldFZlcnNpb24gLyBBU05fSU5URUdFUikKKyAqCisgKiBzaW5jZSBhIFRleHR1YWwgQ29udmVudGlvbiBtYXkgYmUgcmVmZXJlbmNlZCBtb3JlIHRoYW4gb25jZSBpbiBhCisgKiBNSUIsIHByb3RlY3QgYWdhaW50IHJlZGVmaW5pdGlvbnMgb2YgdGhlIGVudW0gdmFsdWVzLgorICovCisjaWZuZGVmIElORVRWRVJTSU9OX0VOVU1TCisjZGVmaW5lIElORVRWRVJTSU9OX0VOVU1TCisKKyNkZWZpbmUgSU5FVFZFUlNJT05fVU5LTk9XTiAgMAorI2RlZmluZSBJTkVUVkVSU0lPTl9JUFY0ICAxCisjZGVmaW5lIElORVRWRVJTSU9OX0lQVjYgIDIKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJTkVUVkVSU0lPTl9FTlVNUyAqLworCisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUElGU1RBVFNUQUJMRV9FTlVNU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU5ZDFjMQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMCwwICsxLDE0MjAgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXBJZlN0YXRzVGFibGUuaCIKKworCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplLCBpcElmU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaXBJZlN0YXRzVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIGlwSWZTdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0LCBpcElmU3RhdHNUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcElmU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXBJZlN0YXRzVGFibGUgaXMgc3ViaWQgMyBvZiBpcFRyYWZmaWNTdGF0cy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzEuMywgbGVuZ3RoOiA5CisgKi8KK3R5cGVkZWYgc3RydWN0IGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqdXNlcl9jdHg7CisKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIHRibF9pbmZvOworCisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzIGFjY2Vzc19tdWx0aXBsZXhlcjsKKworICAgIHVfbG9uZyBsYXN0X2NoYW5nZWQ7CisKK30gaXBJZlN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggaXBJZlN0YXRzVGFibGVfaWZfY3R4OworCitzdGF0aWMgdm9pZCAgICAgX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZl9jdHgpOworc3RhdGljIHZvaWQgICAgCitfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX0dFVAorbmV0c25tcF9jb250YWluZXIgKgoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKQoreworICAgIHJldHVybiBpcElmU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX0dFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAoraXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2lwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAoraXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2lwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQoreworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqb2xkID0gaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKKyAgICByZXR1cm4gb2xkOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX1NFVCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBJRlNUQVRTVEFCTEVfQ09OVEFJTkVSX1NJWkUKK2ludAoraXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKK3sKKyAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lcik7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUElGU1RBVFNUQUJMRV9DT05UQUlORVJfU0laRSAqLworCisvKgorICogaXBJZlN0YXRzVGFibGVMYXN0Q2hhbmdlZCwgd2hpY2ggaXMgdGhlIGxhc3QgdGltZSB0aGF0IGEgcm93IGluCisgKiB0aGUgdGFibGUgd2FzIGNoYW5nZWQgb3IgdGhlIGxhc3QgdGltZSBhIHJvdyB3YXMgYWRkZWQvZGVsZXRlZCBmcm9tIHRoZQorICogdGFibGUuCisgKi8KK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KHVfbG9uZyB0YWJsZV9jaGFuZ2VkKQoreworICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTpsYXN0Q2hhbmdlZF9zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWQuIHdhcyAlbGQsIG5vdyAlbGRcbiIsCisgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaWZfY3R4Lmxhc3RfY2hhbmdlZCwgdGFibGVfY2hhbmdlZCkpOworICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5sYXN0X2NoYW5nZWQgPSB0YWJsZV9jaGFuZ2VkOworfQorCisvKgorICogbWZkIG11bHRpcGxleGVyIG1vZGVzCisgKi8KK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfaXBJZlN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF92YWx1ZXM7CisvKioKKyAqIEBpbnRlcm5hbAorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaXBJZlN0YXRzVGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAorX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHJlZ19wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGZsYWdzKQoreworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyAqYWNjZXNzX211bHRpcGxleGVyID0KKyAgICAgICAgJmlwSWZTdGF0c1RhYmxlX2lmX2N0eC5hY2Nlc3NfbXVsdGlwbGV4ZXI7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGJsX2luZm8gPQorICAgICAgICAmaXBJZlN0YXRzVGFibGVfaWZfY3R4LnRibF9pbmZvOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlcjsKKyAgICBpbnQgICAgICAgICAgICAgbWZkX21vZGVzID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfaXBJZlN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UiLCAiY2FsbGVkXG4iKSk7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzYXZlIGludGVyZmFjZSBjb250ZXh0IGZvciBpcElmU3RhdHNUYWJsZQorICAgICAqLworICAgIC8qCisgICAgICogU2V0dGluZyB1cCB0aGUgdGFibGUncyBkZWZpbml0aW9uCisgICAgICovCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGJsX2luZm8sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwSWZTdGF0c0lQVmVyc2lvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiogaW5kZXg6IGlwSWZTdGF0c0lmSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQSUZTVEFUU1RBQkxFX01JTl9DT0w7CisgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUElGU1RBVFNUQUJMRV9NQVhfQ09MOworCisgICAgLyoKKyAgICAgKiBzYXZlIHVzZXJzIGNvbnRleHQKKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV9pbml0X2RhdGEocmVnX3B0cik7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB0aGUgY29udGFpbmVyCisgICAgICovCisgICAgX2lwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KCZpcElmU3RhdHNUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgaXBJZlN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0gX21mZF9pcElmU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9IF9tZmRfaXBJZlN0YXRzVGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9IF9tZmRfaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPSBfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJpcElmU3RhdHNUYWJsZTppbml0X2lwSWZTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgaXBJZlN0YXRzVGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaXBJZlN0YXRzVGFibGUiLCBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaXBJZlN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmlwSWZTdGF0c1RhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BSRV9SRVFVRVNUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY2FjaGUgaGVscGVyCisgICAgICovCisgICAgaWYgKE5VTEwgIT0gaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNhY2hlKSB7CisgICAgICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGlwSWZTdGF0c1RhYmxlX2lmX2N0eC5jYWNoZSk7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZWdpc3RlciB0YWJsZQorICAgICAqLworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnaW5mbywgdGJsX2luZm8pOworICAgIAorICAgIC8qCisgICAgICogcmVnaXN0ZXIgTGFzdENoYW5nZWQKKyAgICAgKi8KKyAgICB7CisgICAgICAgIG9pZCAgICAgbGNfb2lkW10gPSB7IElQSUZTVEFUU1RBQkxFTEFTVENIQU5HRV9PSUQgfTsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAoImlwSWZTdGF0c1RhYmxlTGFzdENoYW5nZWQiLCBOVUxMLAorICAgICAgICAgICAgICAgICBsY19vaWQsIE9JRF9MRU5HVEgobGNfb2lkKSwKKyAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygodm9pZAorICAgICAgICAgICAgICAgICAgICAgICAgKikKKyAgICAgICAgICAgICAgICAgICAgJmlwSWZTdGF0c1RhYmxlX2lmX2N0eC4KKyAgICAgICAgICAgICAgICAgICAgbGFzdF9jaGFuZ2VkLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YKKyAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyksCisgICAgICAgICAgICAgICAgICAgIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgIFdBVENIRVJfRklYRURfU0laRSkpOworICAgIH0KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXBJZlN0YXRzVGFibGUKKyAqLwordm9pZAorX2lwSWZTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oJmlwSWZTdGF0c1RhYmxlX2lmX2N0eCk7Cit9CisKK3ZvaWQKK2lwSWZTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKQoreworICAgIGlwSWZTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mby52YWxpZF9jb2x1bW5zID0gdmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBjb252ZXJ0IHRoZSBpbmRleCBjb21wb25lbnQgc3RvcmVkIGluIHRoZSBjb250ZXh0IHRvIGFuIG9pZAorICovCitpbnQKK2lwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXBJZlN0YXRzSVBWZXJzaW9uKDEpL0luZXRWZXJzaW9uL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uOworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcElmU3RhdHNJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24sIDB4MDAsIHNpemVvZih2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKSk7CisgICAgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbi50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgbWVtc2V0KCZ2YXJfaXBJZlN0YXRzSWZJbmRleCwgMHgwMCwgc2l6ZW9mKHZhcl9pcElmU3RhdHNJZkluZGV4KSk7CisgICAgdmFyX2lwSWZTdGF0c0lmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwSWZTdGF0c0lQVmVyc2lvbi5uZXh0X3ZhcmlhYmxlID0gJnZhcl9pcElmU3RhdHNJZkluZGV4OworICAgIHZhcl9pcElmU3RhdHNJZkluZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9pbmRleF90b19vaWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXBJZlN0YXRzSVBWZXJzaW9uKDEpL0luZXRWZXJzaW9uL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9hL3cvRS9yL2QvaCAKKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5pcElmU3RhdHNJUFZlcnNpb24sCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcElmU3RhdHNJUFZlcnNpb24pKTsKKworICAgIC8qCisgICAgICogaXBJZlN0YXRzSWZJbmRleCgyKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9IIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2lwSWZTdGF0c0lmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBtaWJfaWR4LT5pcElmU3RhdHNJZkluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobWliX2lkeC0+aXBJZlN0YXRzSWZJbmRleCkpOworCisKKyAgICBlcnIgPSBidWlsZF9vaWRfbm9hbGxvYyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sICZvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnZhcl9pcElmU3RhdHNJUFZlcnNpb24pOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcElmU3RhdHNJUFZlcnNpb24pOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBJZlN0YXRzVGFibGVfaW5kZXhfdG9fb2lkICovCisKKy8qKgorICogZXh0cmFjdCBpcElmU3RhdHNUYWJsZSBpbmRleGVzIGZyb20gYSBuZXRzbm1wX2luZGV4CisgKgorICogQHJldHZhbCBTTk1QX0VSUl9OT0VSUk9SICA6IG5vIGVycm9yCisgKiBAcmV0dmFsIFNOTVBfRVJSX0dFTkVSUiAgIDogZXJyb3IKKyAqLworaW50CitpcElmU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBpcElmU3RhdHNJUFZlcnNpb24oMSkvSW5ldFZlcnNpb24vQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL2Evdy9FL3IvZC9oCisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcElmU3RhdHNJUFZlcnNpb247CisgICAgLyoKKyAgICAgKiBpcElmU3RhdHNJZkluZGV4KDIpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2lwSWZTdGF0c0lmSW5kZXg7CisKKyAgICAvKgorICAgICAqIHNldCB1cCB2YXJiaW5kcworICAgICAqLworICAgIG1lbXNldCgmdmFyX2lwSWZTdGF0c0lQVmVyc2lvbiwgMHgwMCwgc2l6ZW9mKHZhcl9pcElmU3RhdHNJUFZlcnNpb24pKTsKKyAgICB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLnR5cGUgPSBBU05fSU5URUdFUjsKKyAgICBtZW1zZXQoJnZhcl9pcElmU3RhdHNJZkluZGV4LCAweDAwLCBzaXplb2YodmFyX2lwSWZTdGF0c0lmSW5kZXgpKTsKKyAgICB2YXJfaXBJZlN0YXRzSWZJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfaXBJZlN0YXRzSVBWZXJzaW9uLm5leHRfdmFyaWFibGUgPSAmdmFyX2lwSWZTdGF0c0lmSW5kZXg7CisgICAgdmFyX2lwSWZTdGF0c0lmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHBhcnNlIHRoZSBvaWQgaW50byB0aGUgaW5kaXZpZHVhbCBpbmRleCBjb21wb25lbnRzCisgICAgICovCisgICAgZXJyID0gcGFyc2Vfb2lkX2luZGV4ZXMob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXJfaXBJZlN0YXRzSVBWZXJzaW9uKTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5pcElmU3RhdHNJUFZlcnNpb24gPQorICAgICAgICAgICAgKigodV9sb25nICopIHZhcl9pcElmU3RhdHNJUFZlcnNpb24udmFsLnN0cmluZyk7CisgICAgICAgIG1pYl9pZHgtPmlwSWZTdGF0c0lmSW5kZXggPQorICAgICAgICAgICAgKigobG9uZyAqKSB2YXJfaXBJZlN0YXRzSWZJbmRleC52YWwuc3RyaW5nKTsKKworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2lwSWZTdGF0c0lQVmVyc2lvbik7CisKKyAgICByZXR1cm4gZXJyOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcElmU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZCAqLworCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAaW50ZXJuYWwKKyAqIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgYSBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKi8KK2lwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgoraXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcElmU3RhdHNUYWJsZV9kYXRhICogZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqdXNlcl9pbml0X2N0eCkKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4KTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTppcElmU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHguXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gZGF0YSkgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHRyYWNrIGlmIHdlIGdvdCBkYXRhIGZyb20gdXNlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgfD0gTUZEX1JPV19EQVRBX0ZST01fVVNFUjsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBkYXRhOworICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0KKyAgICAgICAgICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YSA9IGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX2RhdGEoKSkpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiB1bmRvIGNvbnRleHQgd2lsbCBiZSBhbGxvY2F0ZWQgd2hlbiBuZWVkZWQgKGluICpfdW5kb19zZXR1cCkKKyAgICAgKi8KKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5pcElmU3RhdHNUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwgdXNlcl9pbml0X2N0eCkpIHsKKyAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHggPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHggKi8KKworLyoKKyAqIEBpbnRlcm5hbAorICogcmVsZWFzZSByZXNvdXJjZXMgZm9yIGEgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICovCit2b2lkCitpcElmU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwSWZTdGF0c1RhYmxlOmlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIGZvciBub24tdHJhbnNpZW50IGRhdGEsIGRvbid0IGZyZWUgZGF0YSB3ZSBnb3QgZnJvbSB0aGUgdXNlcgorICAgICAqLworICAgIGlmICgocm93cmVxX2N0eC0+ZGF0YSkgJiYKKyAgICAgICAgIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkKKyAgICAgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKHJvd3JlcV9jdHgtPmRhdGEpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGluZGV4IG9pZCBwb2ludGVyCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyAhPSByb3dyZXFfY3R4LT5vaWRfdG1wKQorICAgICAgICBmcmVlKHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyk7CisKKyAgICBTTk1QX0ZSRUUocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBhZGRpdGlvbmFsIHByZV9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHJjID0gaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3QoaXBJZlN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImlwSWZTdGF0c1RhYmxlIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiaXBJZlN0YXRzVGFibGVfcHJlX3JlcXVlc3RcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwSWZTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiByZWxlYXNlIHJvdyBjb250ZXh0LCBpZiBkZWxldGVkCisgICAgICovCisgICAgaWYgKHJvd3JlcV9jdHggJiYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfREVMRVRFRCkpCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogd2FpdCBmb3IgbGFzdCBjYWxsIGJlZm9yZSBjYWxsaW5nIHVzZXIKKyAgICAgKi8KKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdChyZWdpbmZvLCBhZ3RyZXFfaW5mbykpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwSWZTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgIndhaXRpbmcgZm9yIGxhc3QgcG9zdF9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHBhY2tldF9yYyA9IG5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKGFndHJlcV9pbmZvLT5hc3AsIDApOworICAgIHJjID0gaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGlwSWZTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXBJZlN0YXRzVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcElmU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXBJZlN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXBJZlN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0NSRUFUSU9OOworICAgIH0KKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIHJjKTsKKyAgICBlbHNlCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3Jvd19wcmVwKHJvd3JlcV9jdHgpOworCisgICAgcmV0dXJuIFNOTVBfVkFMSURBVEVfRVJSKHJjKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcElmU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwICovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIEdFVCBwcm9jZXNzaW5nCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIEBpbnRlcm5hbAorICogUmV0cmlldmUgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19pcElmU3RhdHNUYWJsZV9nZXRfY29sdW1uKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF9jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5SZWNlaXZlcygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTlJFQ0VJVkVTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5SZWNlaXZlc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5SZWNlaXZlcyg0KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENJTlJFQ0VJVkVTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luUmVjZWl2ZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luT2N0ZXRzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5PY3RldHNfZ2V0KHJvd3JlcV9jdHgsICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENJbk9jdGV0cyg2KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENJTk9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJbk9jdGV0c19nZXQocm93cmVxX2N0eCwgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkhkckVycm9ycyg3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTkhEUkVSUk9SUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luSGRyRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luTm9Sb3V0ZXMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5OT1JPVVRFUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luTm9Sb3V0ZXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkFkZHJFcnJvcnMoOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5BRERSRVJST1JTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5BZGRyRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJblVua25vd25Qcm90b3MoMTApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOVU5LTk9XTlBST1RPUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luVW5rbm93blByb3Rvc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5UcnVuY2F0ZWRQa3RzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTlRSVU5DQVRFRFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNJblRydW5jYXRlZFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luRm9yd0RhdGFncmFtcygxMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5GT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5Gb3J3RGF0YWdyYW1zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtcygxMykvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5GT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luRm9yd0RhdGFncmFtc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNSZWFzbVJlcWRzKDE0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUFTTVJFUURTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzUmVhc21SZXFkc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c1JlYXNtT0tzKDE1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUFTTU9LUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c1JlYXNtT0tzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c1JlYXNtRmFpbHMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU1JFQVNNRkFJTFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNSZWFzbUZhaWxzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5EaXNjYXJkcygxNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5ESVNDQVJEUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luRGlzY2FyZHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNJbkRlbGl2ZXJzKDE4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTkRFTElWRVJTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5EZWxpdmVyc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5EZWxpdmVycygxOSkvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5ERUxJVkVSUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENJbkRlbGl2ZXJzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRSZXF1ZXN0cygyMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VUUkVRVUVTVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRSZXF1ZXN0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ091dFJlcXVlc3RzKDIxKS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRSRVFVRVNUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRSZXF1ZXN0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dEZvcndEYXRhZ3JhbXMoMjMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEZPUldEQVRBR1JBTVM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRGb3J3RGF0YWdyYW1zX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRGb3J3RGF0YWdyYW1zKDI0KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRGT1JXREFUQUdSQU1TOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dERpc2NhcmRzKDI1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRESVNDQVJEUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dERpc2NhcmRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dEZyYWdSZXFkcygyNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR1JFUURTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ1JlcWRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGcmFnT0tzKDI3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRGUkFHT0tTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ09Lc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dEZyYWdGYWlscygyOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR0ZBSUxTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzT3V0RnJhZ0ZhaWxzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlcygyOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR0NSRUFURVM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRGcmFnQ3JlYXRlc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRUcmFuc21pdHMoMzApL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVFRSQU5TTUlUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dFRyYW5zbWl0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRUcmFuc21pdHMoMzEpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ09VVFRSQU5TTUlUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRUcmFuc21pdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0T2N0ZXRzKDMyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0T2N0ZXRzKDMzKS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0T2N0ZXRzX2dldChyb3dyZXFfY3R4LCAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0luTWNhc3RQa3RzKDM0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNJTk1DQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luTWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDSW5NY2FzdFBrdHMoMzUpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lOTUNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ0luTWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5NY2FzdE9jdGV0cygzNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSU5NQ0FTVE9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c0luTWNhc3RPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNIQ0luTWNhc3RPY3RldHMoMzcpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ0lOTUNBU1RPQ1RFVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDSW5NY2FzdE9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzT3V0TWNhc3RQa3RzKDM4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNPdXRNY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzKDM5KS9DT1VOVEVSNjQvQVNOX0NPVU5URVI2NC9VNjQoVTY0KS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRNQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDT3V0TWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVTY0ICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzKDQwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVE9DVEVUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dE1jYXN0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwSWZTdGF0c0hDT3V0TWNhc3RPY3RldHMoNDEpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ09VVE1DQVNUT0NURVRTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YoVTY0KTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI2NDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNIQ091dE1jYXN0T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSW5CY2FzdFBrdHMoNDIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0lOQkNBU1RQS1RTOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSW5CY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENJbkJjYXN0UGt0cyg0MykvQ09VTlRFUjY0L0FTTl9DT1VOVEVSNjQvVTY0KFU2NCkvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU0hDSU5CQ0FTVFBLVFM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihVNjQpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjY0OworICAgICAgICByYyA9IGlwSWZTdGF0c0hDSW5CY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFU2NCAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcElmU3RhdHNPdXRCY2FzdFBrdHMoNDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQSUZTVEFUU09VVEJDQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGlwSWZTdGF0c091dEJjYXN0UGt0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzSENPdXRCY2FzdFBrdHMoNDUpL0NPVU5URVI2NC9BU05fQ09VTlRFUjY0L1U2NChVNjQpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNIQ09VVEJDQVNUUEtUUzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKFU2NCk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJjID0gaXBJZlN0YXRzSENPdXRCY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChVNjQgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUoNDYpL1RpbWVTdGFtcC9BU05fVElNRVRJQ0tTL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNESVNDT05USU5VSVRZVElNRToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9USU1FVElDS1M7CisgICAgICAgIHJjID0gaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWVfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXBJZlN0YXRzUmVmcmVzaFJhdGUoNDcpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUElGU1RBVFNSRUZSRVNIUkFURToKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcElmU3RhdHNSZWZyZXNoUmF0ZV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChJUElGU1RBVFNUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IElQSUZTVEFUU1RBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfaXBJZlN0YXRzVGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBJZlN0YXRzVGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfaXBJZlN0YXRzVGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKKyAgICB2b2lkICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spICh2b2lkICopOworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfbWZkX2lwSWZTdGF0c1RhYmxlX2dldF92YWx1ZXMiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9pcElmU3RhdHNUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsIHJlcXVlc3RzLT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcElmU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qCisgKiBTRVQgUFJPQ0VTU0lORyBOT1QgQVBQTElDQUJMRSAocGVyIE1JQiBvciB1c2VyIHNldHRpbmcpCisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIERBVEEgQUNDRVNTCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIHZvaWQgICAgIF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBmb3IgaXBJZlN0YXRzVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY2FjaGVfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBpcElmU3RhdHNUYWJsZV9jYWNoZV9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGNvbnRhaW5lciA9IChuZXRzbm1wX2NvbnRhaW5lciAqKSBjYWNoZS0+bWFnaWM7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2ZyZWUgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jb250YWluZXJfaXRlbV9mcmVlKGlwSWZTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LCB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXBJZlN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGluIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworCisgICAgLyoKKyAgICAgKiBmcmVlIGFsbCBpdGVtcy4gaW5lZmZpY2llbnQsIGJ1dCBlYXN5LgorICAgICAqLworICAgIENPTlRBSU5FUl9DTEVBUihjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKSBfY29udGFpbmVyX2l0ZW1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogaW5pdGlhbGl6ZSB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19pcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChpcElmU3RhdHNUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcElmU3RhdHNUYWJsZTpfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGlmX2N0eC0+Y2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcElmU3RhdHNUYWJsZV9vaWRfc2l6ZSk7CisKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgaXBJZlN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICBpZl9jdHgtPmNvbnRhaW5lciA9CisgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpcElmU3RhdHNUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChOVUxMICE9IGlmX2N0eC0+Y2FjaGUpCisgICAgICAgIGlmX2N0eC0+Y2FjaGUtPm1hZ2ljID0gKHZvaWQgKikgaWZfY3R4LT5jb250YWluZXI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogc2h1dGRvd24gdGhlIGNvbnRhaW5lciB3aXRoIGZ1bmN0aW9ucyBvciB3cmFwcGVycworICovCit2b2lkCitfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKGlwSWZTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwSWZTdGF0c1RhYmxlOl9pcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24iLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpcElmU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZfY3R4LT5jb250YWluZXIpOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGlmX2N0eC0+Y29udGFpbmVyKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXBJZlN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQSUZTVEFUU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUworaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCAqCitpcElmU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoaXBJZlN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9PSURfTEVOXTsKKyAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICAvKgorICAgICAqIHNldCB1cCBzdG9yYWdlIGZvciBPSUQKKyAgICAgKi8KKyAgICBvaWRfaWR4Lm9pZHMgPSBvaWRfdG1wOworICAgIG9pZF9pZHgubGVuID0gc2l6ZW9mKG9pZF90bXApIC8gc2l6ZW9mKG9pZCk7CisKKyAgICAvKgorICAgICAqIGNvbnZlcnQKKyAgICAgKi8KKyAgICByYyA9IGlwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPSAoaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoaXBJZlN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUElGU1RBVFNUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNDNkZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwSWZTdGF0c1RhYmxlL2lwSWZTdGF0c1RhYmxlX2ludGVyZmFjZS5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE1ODk5ICQgb2YgJAorICoKKyAqICRJZDokCisgKi8KKy8qKiBAaW5ncm91cCBpbnRlcmZhY2U6IFJvdXRpbmVzIHRvIGludGVyZmFjZSB0byBOZXQtU05NUAorICoKKyAqIFx3YXJuaW5nIFRoaXMgY29kZSBzaG91bGQgbm90IGJlIG1vZGlmaWVkLCBjYWxsZWQgZGlyZWN0bHksCisgKiAgICAgICAgICBvciB1c2VkIHRvIGludGVycHJldCBmdW5jdGlvbmFsaXR5LiBJdCBpcyBzdWJqZWN0IHRvCisgKiAgICAgICAgICBjaGFuZ2UgYXQgYW55IHRpbWUuCisgKiAKKyAqIEB7CisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworI2lmbmRlZiBJUElGU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImlwSWZTdGF0c1RhYmxlLmgiCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqIFBVQkxJQyBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24gcm91dGluZSAKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwSWZTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCwgdV9sb25nIGZsYWdzKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgX2lwSWZTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4KTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKTsKKworICAgIGlwSWZTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAqaXBJZlN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldChpcElmU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpOworCisgICAgbmV0c25tcF9jb250YWluZXIgKmlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCk7CisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgaXBJZlN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXBJZlN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChpcElmU3RhdHNUYWJsZV9kYXRhICosIHZvaWQgKik7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwSWZTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChpcElmU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KTsKKyAgICBpbnQgICAgICAgICAgICAgaXBJZlN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworCisgICAgLyoKKyAgICAgKiBhY2Nlc3MgdG8gY2VydGFpbiBpbnRlcm5hbHMuIHVzZSB3aXRoIGNhdXRpb24hCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnZjKTsKKworICAgIC8qCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGlwSWZTdGF0c1RhYmxlX2xhc3RDaGFuZ2Vfc2V0KHVfbG9uZyB1cHRpbWUpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQSUZTVEFUU1RBQkxFX0lOVEVSRkFDRV9IICovCisvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcElmU3RhdHNUYWJsZS9pcElmU3RhdHNUYWJsZV9vaWRzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2NjA3YTkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBJZlN0YXRzVGFibGUvaXBJZlN0YXRzVGFibGVfb2lkcy5oCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtb2lkcy5tMmMgMTI4NTUgMjAwNS0wOS0yNyAxNTo1NjowOFogcnN0b3J5ICQKKyAqCisgKiAkSWQ6JAorICovCisjaWZuZGVmIElQSUZTVEFUU1RBQkxFX09JRFNfSAorI2RlZmluZSBJUElGU1RBVFNUQUJMRV9PSURTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwSWZTdGF0c1RhYmxlIAorICAgICAqLworI2RlZmluZSBJUElGU1RBVFNUQUJMRV9PSUQgICAgICAgICAgICAgIDEsMyw2LDEsMiwxLDQsMzEsMworI2RlZmluZSBJUElGU1RBVFNUQUJMRUxBU1RDSEFOR0VfT0lEICAgIDEsMyw2LDEsMiwxLDQsMzEsMgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJUFZFUlNJT04gICAgICAgICAxCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lGSU5ERVggICAgICAgICAyCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOUkVDRUlWRVMgICAgICAgICAzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5SRUNFSVZFUyAgICAgICAgIDQKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSU5PQ1RFVFMgICAgICAgICA1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5PQ1RFVFMgICAgICAgICA2CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOSERSRVJST1JTICAgICAgICAgNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTk5PUk9VVEVTICAgICAgICAgOAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkFERFJFUlJPUlMgICAgICAgICA5CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOVU5LTk9XTlBST1RPUyAgICAgICAgIDEwCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOVFJVTkNBVEVEUEtUUyAgICAgICAgIDExCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lORk9SV0RBVEFHUkFNUyAgICAgICAgIDEyCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDSU5GT1JXREFUQUdSQU1TICAgICAgICAgMTMKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTUkVBU01SRVFEUyAgICAgICAgIDE0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU1JFQVNNT0tTICAgICAgICAgMTUKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTUkVBU01GQUlMUyAgICAgICAgIDE2CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lORElTQ0FSRFMgICAgICAgICAxNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNJTkRFTElWRVJTICAgICAgICAgMTgKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTkRFTElWRVJTICAgICAgICAgMTkKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VUUkVRVUVTVFMgICAgICAgICAyMAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVFJFUVVFU1RTICAgICAgICAgMjEKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VURk9SV0RBVEFHUkFNUyAgICAgICAgIDIzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDT1VURk9SV0RBVEFHUkFNUyAgICAgICAgIDI0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVERJU0NBUkRTICAgICAgICAgMjUKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR1JFUURTICAgICAgICAgMjYKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VURlJBR09LUyAgICAgICAgIDI3CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdGQUlMUyAgICAgICAgIDI4CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEZSQUdDUkVBVEVTICAgICAgICAgMjkKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTT1VUVFJBTlNNSVRTICAgICAgICAgMzAKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRUUkFOU01JVFMgICAgICAgICAzMQorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRPQ1RFVFMgICAgICAgICAzMgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVE9DVEVUUyAgICAgICAgIDMzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOTUNBU1RQS1RTICAgICAgICAgMzQKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTk1DQVNUUEtUUyAgICAgICAgIDM1CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOTUNBU1RPQ1RFVFMgICAgICAgICAzNgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ0lOTUNBU1RPQ1RFVFMgICAgICAgICAzNworCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNPVVRNQ0FTVFBLVFMgICAgICAgICAzOAorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNIQ09VVE1DQVNUUEtUUyAgICAgICAgIDM5CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVE1DQVNUT0NURVRTICAgICAgICAgNDAKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENPVVRNQ0FTVE9DVEVUUyAgICAgICAgIDQxCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0lOQkNBU1RQS1RTICAgICAgICAgNDIKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTSENJTkJDQVNUUEtUUyAgICAgICAgIDQzCisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU09VVEJDQVNUUEtUUyAgICAgICAgIDQ0CisKKyNkZWZpbmUgQ09MVU1OX0lQSUZTVEFUU0hDT1VUQkNBU1RQS1RTICAgICAgICAgNDUKKworI2RlZmluZSBDT0xVTU5fSVBJRlNUQVRTRElTQ09OVElOVUlUWVRJTUUgICAgICAgICA0NgorCisjZGVmaW5lIENPTFVNTl9JUElGU1RBVFNSRUZSRVNIUkFURSAgICAgICAgIDQ3CisKKworI2RlZmluZSBJUElGU1RBVFNUQUJMRV9NSU5fQ09MICAgQ09MVU1OX0lQSUZTVEFUU0lOUkVDRUlWRVMKKyNkZWZpbmUgSVBJRlNUQVRTVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9JUElGU1RBVFNSRUZSRVNIUkFURQorCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBJRlNUQVRTVEFCTEVfT0lEU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuYwppbmRleCBjODY1NjA3Li4xMDU4N2UyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgImlwU3lzdGVtU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRbXSA9IHsgSVBTWVNURU1TVEFUU1RBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZFtdID0geyBJUFNZU1RFTVNUQVRTVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoaXBTeXN0ZW1TdGF0c1RhYmxlX29pZCk7CiAKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gaXBTeXN0ZW1TdGF0c1RhYmxlX3VzZXJfY29udGV4dDsKQEAgLTE2Myw2ICsxNjMsOCBAQAogICAgIC8qCiAgICAgICogVE9ETzoyMTE6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXBTeXN0ZW1TdGF0c1RhYmxlIHJvd3JlcSBjbGVhbnVwLgogICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2ZyZWUocm93cmVxX2N0eC0+ZGF0YSk7CisgICAgcm93cmVxX2N0eC0+ZGF0YSA9IE5VTEw7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAgKi8KIAogLyoqCkBAIC0zOTAsMTEgKzM5MiwxNCBAQAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7Ci0KKyAgICAKICAgICAvKgogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzSW5SZWNlaXZlcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luUmVjZWl2ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luUmVjZWl2ZXNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luUmVjZWl2ZXMubG93OwogCkBAIC00NTYsNiArNDYxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJblJlY2VpdmVzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5SZWNlaXZlc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOUkVDRUlWRVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJblJlY2VpdmVzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luUmVjZWl2ZXNfdmFsX3B0cikuaGlnaCA9CkBAIC01MjAsNiArNTI4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luT2N0ZXRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5PY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5PQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbk9jdGV0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5PY3RldHMubG93OwogCkBAIC01NzcsNiArNTg4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbk9jdGV0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk9jdGV0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luT2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luT2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtNjQ0LDYgKzY1OCw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkhkckVycm9ycyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkhEUkVSUk9SU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0luSGRyRXJyb3JzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5IZHJFcnJvcnM7CiAKQEAgLTcwNSw4ICs3MjIsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luTm9Sb3V0ZXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTk9ST1VURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbk5vUm91dGVzX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5Ob1JvdXRlczsKKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk5vUm91dGVzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c0luTm9Sb3V0ZXNfZ2V0ICovCkBAIC03NzIsNiArNzkyLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luQWRkckVycm9ycyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luQWRkckVycm9yc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5BZGRyRXJyb3JzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5BZGRyRXJyb3JzOwogCkBAIC04NDMsNiArODY2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luVW5rbm93blByb3RvcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luVW5rbm93blByb3Rvc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5VTktOT1dOUFJPVE9TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5Vbmtub3duUHJvdG9zX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5Vbmtub3duUHJvdG9zOwogCkBAIC05MDUsNiArOTMxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luVHJ1bmNhdGVkUGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luVHJ1bmNhdGVkUGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSU5UUlVOQ0FURURQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5UcnVuY2F0ZWRQa3RzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSW5UcnVuY2F0ZWRQa3RzOwogCkBAIC05NzYsNiArMTAwNSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkZvcndEYXRhZ3JhbXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93OwogCkBAIC0xMDM2LDYgKzEwNjgsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ0luRm9yd0RhdGFncmFtcyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5GT1JXREFUQUdSQU1TXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkZvcndEYXRhZ3JhbXNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbkZvcndEYXRhZ3JhbXMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5Gb3J3RGF0YWdyYW1zX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMTEwNSw2ICsxMTQwLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c1JlYXNtUmVxZHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNSZWFzbVJlcWRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzUmVhc21SZXFkc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLlJlYXNtUmVxZHM7CiAKQEAgLTExNzUsNiArMTIxMyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNSZWFzbU9LcyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c1JlYXNtT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTU9LU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c1JlYXNtT0tzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuUmVhc21PS3M7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CkBAIC0xMjQ1LDYgKzEyODYsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzUmVhc21GYWlscyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c1JlYXNtRmFpbHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX1JFQVNNRkFJTFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNSZWFzbUZhaWxzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuUmVhc21GYWlsczsKIApAQCAtMTMwOSw2ICsxMzUzLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luRGlzY2FyZHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbkRpc2NhcmRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9JTkRJU0NBUkRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5EaXNjYXJkc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkluRGlzY2FyZHM7CiAKQEAgLTEzNzYsNiArMTQyMyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbkRlbGl2ZXJzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5EZWxpdmVyc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5EZWxpdmVyc192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5EZWxpdmVycy5sb3c7CiAKQEAgLTE0MzMsNiArMTQ4Myw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDSW5EZWxpdmVycyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luRGVsaXZlcnNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5EZWxpdmVycy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENJbkRlbGl2ZXJzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMTQ5OCw2ICsxNTUxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dFJlcXVlc3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0UmVxdWVzdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRSZXF1ZXN0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93OwogCkBAIC0xNTU1LDYgKzE2MTEsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUUkVRVUVTVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0UmVxdWVzdHMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0UmVxdWVzdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0xNjE5LDggKzE2NzgsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dE5vUm91dGVzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0Tm9Sb3V0ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXROb1JvdXRlc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dE5vUm91dGVzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE5vUm91dGVzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c091dE5vUm91dGVzX2dldCAqLwpAQCAtMTY5NCw2ICsxNzU2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEZvcndEYXRhZ3JhbXMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdzsKIApAQCAtMTc1NCw2ICsxODE5LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRGb3J3RGF0YWdyYW1zIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0Rm9yd0RhdGFncmFtc192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZPUldEQVRBR1JBTVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENPdXRGb3J3RGF0YWdyYW1zLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEZvcndEYXRhZ3JhbXNfdmFsX3B0cikuaGlnaCA9CkBAIC0xODIxLDggKzE4ODksMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dERpc2NhcmRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RGlzY2FyZHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURElTQ0FSRFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXREaXNjYXJkc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dERpc2NhcmRzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dERpc2NhcmRzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c091dERpc2NhcmRzX2dldCAqLwpAQCAtMTg5MCw4ICsxOTYxLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGcmFnUmVxZHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGcmFnUmVxZHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ1JlcWRzX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuT3V0RnJhZ1JlcWRzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdSZXFkcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnUmVxZHNfZ2V0ICovCkBAIC0xOTU2LDkgKzIwMzAsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEZyYWdPS3MgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGcmFnT0tzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KLSAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICJpcFN5c3RlbVN0YXRzVGFibGUgbm9kZSBpcFN5c3RlbVN0YXRzT3V0RnJhZ09LcyBub3QgaW1wbGVtZW50ZWQ6IHNraXBwaW5nXG4iKTsKLSAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCisgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ09Lc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0RnJhZ09Lcy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnT0tzX2dldCAqLwpAQCAtMjAyNiw4ICsyMTAyLDExIEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0ZBSUxTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0RnJhZ0ZhaWxzX3ZhbF9wdHIpID0KLSAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuT3V0RnJhZ0ZhaWxzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdGYWlscy5sb3c7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNPdXRGcmFnRmFpbHNfZ2V0ICovCkBAIC0yMDkyLDggKzIxNzEsMTEgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dEZyYWdDcmVhdGVzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0RnJhZ0NyZWF0ZXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRGcmFnQ3JlYXRlc192YWxfcHRyKSA9Ci0gICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLk91dEZyYWdDcmVhdGVzOworICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dEZyYWdDcmVhdGVzLmxvdzsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXBTeXN0ZW1TdGF0c091dEZyYWdDcmVhdGVzX2dldCAqLwpAQCAtMjE1NSw2ICsyMjM3LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c091dFRyYW5zbWl0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dFRyYW5zbWl0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNPdXRUcmFuc21pdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5sb3c7CiAKQEAgLTIyMTIsNiArMjI5Nyw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IGNvcHkgaXBTeXN0ZW1TdGF0c0hDT3V0VHJhbnNtaXRzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0ciApLmhpZ2ggZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dFRyYW5zbWl0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dFRyYW5zbWl0cy5sb3c7CiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRUcmFuc21pdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yMjc2LDYgKzIzNjQsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0T2N0ZXRzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dE9jdGV0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKIApAQCAtMjMzMyw2ICsyNDI0LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRPY3RldHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0T2N0ZXRzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0T2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE9jdGV0c192YWxfcHRyKS5oaWdoID0KQEAgLTIzOTUsNiArMjQ4OSw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNJbk1jYXN0UGt0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0luTWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSW5NY2FzdFBrdHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdzsKIApAQCAtMjQ1MSw2ICsyNTQ4LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RQS1RTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENJbk1jYXN0UGt0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ0luTWNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luTWNhc3RQa3RzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjUxNCw2ICsyNjE0LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luTWNhc3RPY3RldHMgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbk1jYXN0T2N0ZXRzX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdzsKIApAQCAtMjU3Miw2ICsyNjc1LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENJbk1jYXN0T2N0ZXRzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0ciApLmxvdyBhbmQgKCogaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOTUNBU1RPQ1RFVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cikubG93ID0KICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuSENJbk1jYXN0T2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yNjM0LDYgKzI3NDAsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0TWNhc3RQa3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dE1jYXN0UGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdzsKIApAQCAtMjY5MCw2ICsyNzk5LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdFBrdHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0TWNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE1jYXN0UGt0c192YWxfcHRyKS5oaWdoID0KQEAgLTI3NTQsNiArMjg2Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNPdXRNY2FzdE9jdGV0cyBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzT3V0TWNhc3RPY3RldHNfdmFsX3B0cikgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmxvdzsKIApAQCAtMjgxNiw2ICsyOTMxLDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0cyBkYXRhLgogICAgICAqIGdldCAoKiBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkubG93IGFuZCAoKiBpcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUT0NURVRTXSkKKyAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworCiAgICAgKCppcFN5c3RlbVN0YXRzSENPdXRNY2FzdE9jdGV0c192YWxfcHRyKS5sb3cgPQogICAgICAgICByb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5IQ091dE1jYXN0T2N0ZXRzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dE1jYXN0T2N0ZXRzX3ZhbF9wdHIpLmhpZ2ggPQpAQCAtMjg3OCw2ICsyOTk2LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXBTeXN0ZW1TdGF0c0luQmNhc3RQa3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzSW5CY2FzdFBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNJbkJjYXN0UGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93OwogCkBAIC0yOTM0LDYgKzMwNTUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBjb3B5IGlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzIGRhdGEuCiAgICAgICogZ2V0ICgqIGlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIgKS5oaWdoIGZyb20gcm93cmVxX2N0eC0+ZGF0YQogICAgICAqLworICAgIGlmICghcm93cmVxX2N0eC0+ZGF0YS0+c3RhdHMuY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5CQ0FTVFBLVFNdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNIQ0luQmNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDSW5CY2FzdFBrdHMubG93OwogICAgICgqaXBTeXN0ZW1TdGF0c0hDSW5CY2FzdFBrdHNfdmFsX3B0cikuaGlnaCA9CkBAIC0yOTk2LDYgKzMxMjAsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzT3V0QmNhc3RQa3RzIGRhdGEuCiAgICAgICogY29weSAoKiBpcFN5c3RlbVN0YXRzT3V0QmNhc3RQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c091dEJjYXN0UGt0c192YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKIApAQCAtMzA1Miw2ICszMTc5LDkgQEAKICAgICAgKiBUT0RPOjIzMTpvOiB8LT4gY29weSBpcFN5c3RlbVN0YXRzSENPdXRCY2FzdFBrdHMgZGF0YS4KICAgICAgKiBnZXQgKCogaXBTeXN0ZW1TdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIgKS5sb3cgYW5kICgqIGlwU3lzdGVtU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyICkuaGlnaCBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUU10pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0hDT3V0QmNhc3RQa3RzX3ZhbF9wdHIpLmxvdyA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLkhDT3V0QmNhc3RQa3RzLmxvdzsKICAgICAoKmlwU3lzdGVtU3RhdHNIQ091dEJjYXN0UGt0c192YWxfcHRyKS5oaWdoID0KQEAgLTMxMTYsNiArMzI0Niw5IEBACiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZSBkYXRhLgogICAgICAqIGNvcHkgKCogaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKICAgICAgKi8KKyAgICBpZiAoIXJvd3JlcV9jdHgtPmRhdGEtPnN0YXRzLmNvbHVtbkF2YWlsW0lQU1lTVEVNU1RBVFNUQUJMRV9ESVNDT05USU5VSVRZVElNRV0pCisgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKwogICAgICgqaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lX3ZhbF9wdHIpID0KICAgICAgICAgcm93cmVxX2N0eC0+aXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lOwogCkBAIC0zMTcyLDYgKzMzMDUsOSBAQAogICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGUgZGF0YS4KICAgICAgKiBjb3B5ICgqIGlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCiAgICAgICovCisgICAgaWYgKCFyb3dyZXFfY3R4LT5kYXRhLT5zdGF0cy5jb2x1bW5BdmFpbFtJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEVdKQorICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisKICAgICAoKmlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZV92YWxfcHRyKSA9CiAgICAgICAgIHJvd3JlcV9jdHgtPmlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlLmgKaW5kZXggOWFhMDE2ZC4uY2ExZTFmMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZS5oCkBAIC0yMzQsOCArMjM0LDggQEAKICAgICAgICAgKiBpcFN5c3RlbVN0YXRzVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpcFN5c3RlbVN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcFN5c3RlbVN0YXRzVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBiNjMzMjliLi4zMDBlZDdhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBTeXN0ZW1TdGF0c1RhYmxlL2lwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTE5LDcgKzE5LDcgQEAKIAogI2luY2x1ZGUgImlwU3lzdGVtU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIgogCi1zdGF0aWMgaW50ICAgICAgaXBzc19jYWNoZV9yZWZyZXNoID0gMzA7CitzdGF0aWMgaW50ICAgICAgaXBzc19jYWNoZV9yZWZyZXNoID0gSVBTWVNURU1TVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7CiAKIC8qKiBAaW5ncm91cCBpbnRlcmZhY2UgCiAgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKQEAgLTU4LDYxICs1OCwxMCBAQAogaXBTeXN0ZW1TdGF0c1RhYmxlX2luaXRfZGF0YShpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZykKIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaW50IG15X2NvbHVtbnNbXSA9IHsKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTlJFQ0VJVkVTLCBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5SRUNFSVZFUywKLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5PQ1RFVFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTk9DVEVUUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkhEUkVSUk9SUywKLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5OT1JPVVRFUywgKi8KLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkFERFJFUlJPUlMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5VTktOT1dOUFJPVE9TLAotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTlRSVU5DQVRFRFBLVFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSU5GT1JXREFUQUdSQU1TLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDSU5GT1JXREFUQUdSQU1TLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU1JFQVNNUkVRRFMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTUkVBU01PS1MsIENPTFVNTl9JUFNZU1RFTVNUQVRTUkVBU01GQUlMUywKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkRJU0NBUkRTLCBDT0xVTU5fSVBTWVNURU1TVEFUU0lOREVMSVZFUlMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTkRFTElWRVJTLCBDT0xVTU5fSVBTWVNURU1TVEFUU09VVFJFUVVFU1RTLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU0hDT1VUUkVRVUVTVFMsIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VUTk9ST1VURVMsCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVEZPUldEQVRBR1JBTVMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRGT1JXREFUQUdSQU1TLAotICAgICAgICBDT0xVTU5fSVBTWVNURU1TVEFUU09VVERJU0NBUkRTLAotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRGUkFHUkVRRFMsICovCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VURlJBR09LUywgQ09MVU1OX0lQU1lTVEVNU1RBVFNPVVRGUkFHRkFJTFMsCi0gICAgICAgIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VURlJBR0NSRUFURVMsCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVFRSQU5TTUlUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRUUkFOU01JVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE9DVEVUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRPQ1RFVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU0lOTUNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ0lOTUNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTk1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ0lOTUNBU1RPQ1RFVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE1DQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENPVVRNQ0FTVFBLVFMsICovCi0gICAgICAgIC8qKiBDT0xVTU5fSVBTWVNURU1TVEFUU09VVE1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ09VVE1DQVNUT0NURVRTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNJTkJDQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTSENJTkJDQVNUUEtUUywgKi8KLSAgICAgICAgLyoqIENPTFVNTl9JUFNZU1RFTVNUQVRTT1VUQkNBU1RQS1RTLCAqLwotICAgICAgICAvKiogQ09MVU1OX0lQU1lTVEVNU1RBVFNIQ09VVEJDQVNUUEtUUywgKi8KLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNESVNDT05USU5VSVRZVElNRSwKLSAgICAgICAgQ09MVU1OX0lQU1lTVEVNU1RBVFNSRUZSRVNIUkFURQotICAgIH07Ci0gICAgc3RhdGljIG5ldHNubXBfY29sdW1uX2luZm8gdmFsaWRfY29sdW1uczsKLQotICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwU3lzdGVtU3RhdHNUYWJsZTppcFN5c3RlbVN0YXRzVGFibGVfaW5pdF9kYXRhIiwKKyAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwU3lzdGVtU3RhdHNUYWJsZTppcFN5c3RlbVN0YXRzVGFibGVfaW5pdF9kYXRhIiwKICAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CiAKICAgICAvKgotICAgICAqIHdlIG9ubHkgd2FudCB0byBwcm9jZXNzIGNlcnRhaW4gY29sdW1ucywgYW5kIGlnbm9yZQotICAgICAqIGFueXRoaW5nIGVsc2UuCi0gICAgICovCi0gICAgdmFsaWRfY29sdW1ucy5pc1JhbmdlID0gMDsKLSAgICB2YWxpZF9jb2x1bW5zLmRldGFpbHMubGlzdCA9IG15X2NvbHVtbnM7Ci0gICAgdmFsaWRfY29sdW1ucy5saXN0X2NvdW50ID0gc2l6ZW9mKG15X2NvbHVtbnMpIC8gc2l6ZW9mKHVuc2lnbmVkIGludCk7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KCZ2YWxpZF9jb2x1bW5zKTsKLSAgICAvKgogICAgICAqIFRPRE86MzAzOm86IEluaXRpYWxpemUgaXBTeXN0ZW1TdGF0c1RhYmxlIGRhdGEuCiAgICAgICovCiAKQEAgLTE2Nyw3ICsxMTYsMTEgQEAKICAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CiAgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KICAgICAgKi8KLSAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworCisKKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJpcFN5c3RlbVN0YXRzVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgaWYgKE5VTEwgIT0gKmNvbnRhaW5lcl9wdHJfcHRyKQorICAgICAgICAoKmNvbnRhaW5lcl9wdHJfcHRyKS0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwU3lzdGVtU3RhdHNUYWJsZSIpOwogCiAgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKQEAgLTE5Miw2ICsxNDUsNyBAQAogICAgICAgICAoTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRSB8IE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0VYUElSRUQKICAgICAgICAgIHwgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfQkVGT1JFX0xPQUQgfAogICAgICAgICAgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCk7CisgICAgaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9sb2FkKCpjb250YWluZXJfcHRyX3B0cik7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLwogCiAvKioKQEAgLTIwNCw3ICsxNTgsNyBAQAogICAgIC8qCiAgICAgICogY2hlY2sgZm9yIG1hdGNoaW5nIGVudHJ5LiB3b3JrcyBiZWNhdXNlIGluZGV4ZXMgYXJlIHRoZSBzYW1lLgogICAgICAqLwotICAgIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKnN5c3RlbXN0YXRzX2VudHJ5ID0KKyAgICBuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5ICpzeXN0ZW1zdGF0c19lbnRyeSA9IChuZXRzbm1wX3N5c3RlbXN0YXRzX2VudHJ5KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQoc3RhdHMsIHJvd3JlcV9jdHgtPmRhdGEpOwogICAgIGlmIChOVUxMID09IHN5c3RlbXN0YXRzX2VudHJ5KSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJpcFN5c3RlbVN0YXRzVGFibGU6YWNjZXNzIiwKQEAgLTI2Nyw3ICsyMjEsNyBAQAogICAgICAgICAmJiAoTUZEX1NVQ0NFU1MgPT0KICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c3RlbXN0YXRzX2VudHJ5LT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuc19pcF92ZXJzaW9uKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleFswXSkpKSB7CiAgICAgICAgIHJvd3JlcV9jdHgtPmlwU3lzdGVtU3RhdHNSZWZyZXNoUmF0ZSA9IGlwc3NfY2FjaGVfcmVmcmVzaCAqIDEwMDA7ICAgICAgIC8qIG1pbGxpLXNlY29uZHMgKi8KICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOwogICAgIH0gZWxzZSB7CkBAIC0zODYsNyArMzQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19GUkVFX0RPTlRfQ0xFQVIpOwogCiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTppcFN5c3RlbVN0YXRzVGFibGU6aXBTeXN0ZW1TdGF0c1RhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSXogInUgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUvaXBTeXN0ZW1TdGF0c1RhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggMDg5ODEyYy4uZTFjYTJjYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwU3lzdGVtU3RhdHNUYWJsZS9pcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlLmMKQEAgLTMwLDYgKzMwLDcgQEAKICAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTQ2LDYgKzQ3LDE4IEBACiAKICNpbmNsdWRlIDxjdHlwZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfc2l6ZSwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX3NldCwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcFN5c3RlbVN0YXRzVGFibGVfY29udGFpbmVyX2dldCwgaXBTeXN0ZW1TdGF0c1RhYmxlX2V4dGVybmFsX2FjY2VzcykKKwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqCkBAIC04MCwxOSArOTMsMjMgQEAKICAgICAgICAgICAgICAgICBfaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpcFN5c3RlbVN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIGlwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBpcFN5c3RlbVN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX1JFR0lTVFJBVElPTl9TRVQKIGlwU3lzdGVtU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgogaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoaXBTeXN0ZW1TdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMDIsMTIgKzExOSwxNSBAQAogICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogaXBTeXN0ZW1TdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwU3lzdGVtU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQU1lTVEVNU1RBVFNUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiAvKgogICogbWZkIG11bHRpcGxleGVyIG1vZGVzCkBAIC0xNDksNyArMTY5LDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBTWVNURU1TVEFUU1RBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBJUFNZU1RFTVNUQVRTVEFCTEVfTUFYX0NPTDsKQEAgLTIyMCw3ICsyNDAsOCBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgIC8qIFhYWCAtIGFyZSB0aGVzZSBhY3R1YWxseSBuZWNlc3Nhcnk/ICovCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0yNDMsNyArMjY0LDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTU0OCw3ICs1NjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIGludCAgICAgICAgICAgICByYywgcGFja2V0X3JjOwogCkBAIC01OTQsNyArNjE1LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwU3lzdGVtU3RhdHNUYWJsZTpfbWZkX2lwU3lzdGVtU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtMTEwNiw3ICsxMTI3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKGlwU3lzdGVtU3RhdHNUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CkBAIC0xMTc1LDcgKzExOTYsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwU3lzdGVtU3RhdHNUYWJsZV9nZXRfdmFsdWVzICovCiAKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCiAgKiBTRVQgcHJvY2Vzc2luZwpAQCAtMTMzOSw2ICsxMzYwLDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwU3lzdGVtU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBTWVNURU1TVEFUU1RBQkxFX0VYVEVSTkFMX0FDQ0VTUwogaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgogaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChpcFN5c3RlbVN0YXRzVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKQEAgLTEzNjEsOCArMTM4Myw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAoaXBTeXN0ZW1TdGF0c1RhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChpcFN5c3RlbVN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFNZU1RFTVNUQVRTVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwX3NjYWxhcnMuYwppbmRleCA4YWY5NjEzLi45MDk2MjY5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXBfc2NhbGFycy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcF9zY2FsYXJzLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC0xMSw0NCArMTIsMjg1IEBACiAKICNpbmNsdWRlICJpcF9zY2FsYXJzLmgiCiAKLWludAorc3RhdGljIGludAoraGFuZGxlX2lwRm9yd2FyZGluZyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKKworc3RhdGljIGludAoraGFuZGxlX2lwRGVmYXVsdFRUTChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKKworc3RhdGljIGludAogaGFuZGxlX2lwdjZJcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CiAKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcHY2SXBEZWZhdWx0SG9wTGltaXQobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CisKK3N0YXRpYyBpbnQgaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZTsKKworc3RhdGljIGludAoraGFuZGxlX2lwQWRkcmVzc1NwaW5Mb2NrKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOworCiAvKiogSW5pdGlhbGl6ZXMgdGhlIGlwIG1vZHVsZSAqLwogdm9pZAogaW5pdF9pcF9zY2FsYXJzKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAgICAgIGlwUmVhc21UaW1lb3V0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAxMywgMCB9OworICAgIHN0YXRpYyBvaWQgCSAgICBpcEZvcndhcmRpbmdfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDEgfTsKKyAgICBzdGF0aWMgb2lkIAkgICAgaXBEZWZhdWx0VFRMX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAyIH07CiAgICAgc3RhdGljIG9pZCAgICAgIGlwdjZJcEZvcndhcmRpbmdfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDQsIDI1IH07Ci0gICAgc3RhdGljIG9pZCAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWRbXSA9Ci0gICAgICAgIHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMjYsIDAgfTsKKyAgICBzdGF0aWMgb2lkICAgICAgaXB2NklwRGVmYXVsdEhvcExpbWl0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAyNiB9OworICAgIHN0YXRpYyBvaWQgICAgICBpcEFkZHJlc3NTcGluTG9ja19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzMgfTsKIAogICAgIERFQlVHTVNHVEwoKCJpcF9zY2FsYXIiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CiAKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX251bV9maWxlX2luc3RhbmNlCi0gICAgICAgICgiaXBSZWFzbVRpbWVvdXQiLAotICAgICAgICAgaXBSZWFzbVRpbWVvdXRfb2lkLCBPSURfTEVOR1RIKGlwUmVhc21UaW1lb3V0X29pZCksCi0gICAgICAgICAiL3Byb2Mvc3lzL25ldC9pcHY0L2lwZnJhZ190aW1lIiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgTlVMTCwgTlVMTCk7CisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcEZvcndhcmRpbmciLCBoYW5kbGVfaXBGb3J3YXJkaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBGb3J3YXJkaW5nX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXBGb3J3YXJkaW5nX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBEZWZhdWx0VFRMIiwgaGFuZGxlX2lwRGVmYXVsdFRUTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwRGVmYXVsdFRUTF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGlwRGVmYXVsdFRUTF9vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSk7CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXB2NklwRm9yd2FyZGluZyIsIGhhbmRsZV9pcHY2SXBGb3J3YXJkaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2SXBGb3J3YXJkaW5nX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChpcHY2SXBGb3J3YXJkaW5nX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOwogCi0gICAgbmV0c25tcF9yZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZQotICAgICAgICAoImlwdjZJcERlZmF1bHRIb3BMaW1pdCIsCi0gICAgICAgICBpcHY2SXBEZWZhdWx0SG9wTGltaXRfb2lkLCBPSURfTEVOR1RIKGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWQpLAotICAgICAgICAgIi9wcm9jL3N5cy9uZXQvaXB2Ni9jb25mL2RlZmF1bHQvaG9wX2xpbWl0IiwgQVNOX0lOVEVHRVIsCi0gICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsIE5VTEwsIE5VTEwpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdjZJcERlZmF1bHRIb3BMaW1pdCIsIGhhbmRsZV9pcHY2SXBEZWZhdWx0SG9wTGltaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJcERlZmF1bHRIb3BMaW1pdF9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXB2NklwRGVmYXVsdEhvcExpbWl0X29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOworCisgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIobmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwQWRkcmVzc1NwaW5Mb2NrIiwgaGFuZGxlX2lwQWRkcmVzc1NwaW5Mb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NTcGluTG9ja19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoaXBBZGRyZXNzU3BpbkxvY2tfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKSk7CisKKyAgICAvKiBJbml0aWFsaXplIHNwaW4gbG9jayB3aXRoIHJhbmRvbSB2YWx1ZSAqLworICAgIGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUgPSAoaW50KSByYW5kb20oKTsKKwogfQogCi1pbnQKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgcmM7CisgICAgdV9sb25nICAgdmFsdWU7CisKKyAgICAvKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgICAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgKi8KKworICAgIC8qIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAgIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAqLworCisgICAgc3dpdGNoKHJlcWluZm8tPm1vZGUpIHsKKworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfZ2V0KCZ2YWx1ZSk7CisgICAgICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSB2YWx1ZSA/IDEgOiAyOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICAvKgorICAgICAgICAgKiBTRVQgUkVRVUVTVAorICAgICAgICAgKgorICAgICAgICAgKiBtdWx0aXBsZSBzdGF0ZXMgaW4gdGhlIHRyYW5zYWN0aW9uLiAgU2VlOgorICAgICAgICAgKiBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvbWliX21vZHVsZS9zZXQtYWN0aW9ucy5qcGcKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHN0b3JlIG9sZCBpbmZvIGZvciB1bmRvIGxhdGVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX2dldCgmdmFsdWUpOworICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9OT0NSRUFUSU9OKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdV9sb25nICp2YWx1ZV9zYXZlOworICAgICAgICAgICAgICAgIHZhbHVlX3NhdmUgPSBuZXRzbm1wX21lbWR1cCgmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworICAgICAgICAgICAgICAgIGlmICggTlVMTCA9PSB2YWx1ZV9zYXZlICkKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YShyZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBmdyIsIHZhbHVlX3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKKwkgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAgICAgLyogWFhYOiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gUkVTRVJWRTEgYW5kL29yCisgICAgICAgICAgICAgICBSRVNFUlZFMi4gIFNvbWV0aGluZyBmYWlsZWQgc29tZXdoZXJlLCBhbmQgdGhlIHN0YXRlcworICAgICAgICAgICAgICAgYmVsb3cgd29uJ3QgYmUgY2FsbGVkLiAqLworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgICAgICAvKiBYWFg6IHBlcmZvcm0gdGhlIHZhbHVlIGNoYW5nZSBoZXJlICovCisgICAgICAgICAgICB2YWx1ZSA9ICAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKTsKKyAgICAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBGb3J3YXJkaW5nX3NldCh2YWx1ZSk7CisgICAgICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgICAgICAgdmFsdWUgPQorICAgICAgICAgICAgICAgICAqKCh1X2xvbmcgKikgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXBmdyIpKTsKKyAgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19zZXQodmFsdWUpOworICAgICAgICAgICAgIGlmICggMCAhPSByYyApIHsKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9pcEZvcndhcmRpbmdcbiIsIHJlcWluZm8tPm1vZGUgKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAoraGFuZGxlX2lwRGVmYXVsdFRUTChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICByYzsKKyAgICB1X2xvbmcgICB2YWx1ZTsKKworICAgIC8qIFdlIGFyZSBuZXZlciBjYWxsZWQgZm9yIGEgR0VUTkVYVCBpZiBpdCdzIHJlZ2lzdGVyZWQgYXMgYQorICAgICAgICJpbnN0YW5jZSIsIGFzIGl0J3MgIm1hZ2ljYWxseSIgaGFuZGxlZCBmb3IgdXMuICAqLworCisgICAgLyogYSBpbnN0YW5jZSBoYW5kbGVyIGFsc28gb25seSBoYW5kcyB1cyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUsIHNvCisgICAgICAgd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgYSBsaXN0IG9mIHJlcXVlc3RzOyB3ZSdsbCBvbmx5IGdldCBvbmUuICovCisKKyAgICBzd2l0Y2gocmVxaW5mby0+bW9kZSkgeworCisgICAgICAgIGNhc2UgTU9ERV9HRVQ6CisgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQoJnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzdG9yZSBvbGQgaW5mbyBmb3IgdW5kbyBsYXRlcgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQoJnZhbHVlKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9DUkVBVElPTik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVfbG9uZyAqdmFsdWVfc2F2ZTsKKyAgICAgICAgICAgICAgICB2YWx1ZV9zYXZlID0gbmV0c25tcF9tZW1kdXAoJnZhbHVlLCBzaXplb2YodmFsdWUpKTsKKyAgICAgICAgICAgICAgICBpZiAoIE5VTEwgPT0gdmFsdWVfc2F2ZSApCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoImlwdHRsIiwgdmFsdWVfc2F2ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZSkpOworCSAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgICAgICAvKiBYWFg6IGZyZWUgcmVzb3VyY2VzIGFsbG9jYXRlZCBpbiBSRVNFUlZFMSBhbmQvb3IKKyAgICAgICAgICAgICAgIFJFU0VSVkUyLiAgU29tZXRoaW5nIGZhaWxlZCBzb21ld2hlcmUsIGFuZCB0aGUgc3RhdGVzCisgICAgICAgICAgICAgICBiZWxvdyB3b24ndCBiZSBjYWxsZWQuICovCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgICAgIC8qIFhYWDogcGVyZm9ybSB0aGUgdmFsdWUgY2hhbmdlIGhlcmUgKi8KKyAgICAgICAgICAgIHZhbHVlID0gICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOworICAgICAgICAgICAgcmMgPSBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcERlZmF1bHRUVExfc2V0KHZhbHVlKTsKKyAgICAgICAgICAgIGlmICggMCAhPSByYyApIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCByYyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgICAgICB2YWx1ZSA9CisgICAgICAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJpcHR0bCIpKTsKKyAgICAgICAgICAgICByYyA9IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9zZXQodmFsdWUpOworICAgICAgICAgICAgIGlmICggMCAhPSByYyApIHsKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgU05NUF9FUlJfVU5ET0ZBSUxFRCk7CisgICAgICAgICAgICAgfQorICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9pcERlZmF1bHRUVExcbiIsIHJlcWluZm8tPm1vZGUgKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAogaGFuZGxlX2lwdjZJcEZvcndhcmRpbmcobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKQEAgLTgxLDYgKzMyMyw3IEBACiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFNFVCBSRVFVRVNUCiAgICAgICAgICAqCkBAIC0xMTAsNyArMzUzLDcgQEAKICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXBmdyIsIHZhbHVlX3NhdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJpcDZmdyIsIHZhbHVlX3NhdmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTMzLDEyICszNzYsMTMgQEAKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgIHZhbHVlID0KICAgICAgICAgICAgICooKHVfbG9uZyAqKSBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YShyZXF1ZXN0cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXBmdyIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaXA2ZnciKSk7CiAgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19zZXQodmFsdWUpOwogICAgICAgICBpZiAoIDAgIT0gcmMgKSB7CiAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9VTkRPRkFJTEVEKTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICBkZWZhdWx0OgogICAgICAgICAvKgpAQCAtMTUxLDMgKzM5NSwxOTMgQEAKIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorCisKK3N0YXRpYyBpbnQKK2hhbmRsZV9pcEFkZHJlc3NTcGluTG9jayhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAgICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0cykKK3sKKyAgICBsb25nICAgdmFsdWU7CisKKyAgICAvKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgICAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgKi8KKworICAgIC8qIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAgIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAqLworCisgICAgc3dpdGNoKHJlcWluZm8tPm1vZGUpIHsKKworICAgICAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUpKTsKKyAgICAgICAgICAgIGJyZWFrOworCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICAvKgorICAgICAgICAgKiBTRVQgUkVRVUVTVAorICAgICAgICAgKgorICAgICAgICAgKiBtdWx0aXBsZSBzdGF0ZXMgaW4gdGhlIHRyYW5zYWN0aW9uLiAgU2VlOgorICAgICAgICAgKiBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvbWliX21vZHVsZS9zZXQtYWN0aW9ucy5qcGcKKyAgICAgICAgICovCisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgICAgICAvKiBqdXN0IGNoZWNrIHRoZSB2YWx1ZSAqLworICAgICAgICAgICAgdmFsdWUgPSAgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcik7CisgICAgICAgICAgICBpZiAodmFsdWUgIT0gaXBBZGRyZXNzU3BpbkxvY2tWYWx1ZSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgICAgIC8qIHBlcmZvcm0gdGhlIGZpbmFsIHNwaW5sb2NrIGNoZWNrIGFuZCBpbmNyZWFzZSBpdHMgdmFsdWUgKi8KKyAgICAgICAgICAgIHZhbHVlID0gICoocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpOworICAgICAgICAgICAgaWYgKHZhbHVlICE9IGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUpIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUrKzsKKyAgICAgICAgICAgICAgICAvKiBhbmQgY2hlY2sgaXQgZm9yIG92ZXJmbG93ICovCisgICAgICAgICAgICAgICAgaWYgKGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUgPiAyMTQ3NDgzNjQ3IHx8IGlwQWRkcmVzc1NwaW5Mb2NrVmFsdWUgPCAwKQorICAgICAgICAgICAgICAgICAgICBpcEFkZHJlc3NTcGluTG9ja1ZhbHVlID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgLyogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9pcEFkZHJlc3NTcGluTG9ja1xuIiwgcmVxaW5mby0+bW9kZSApOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCitzdGF0aWMgaW50CitoYW5kbGVfaXB2NklwRGVmYXVsdEhvcExpbWl0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgdV9sb25nICAgICAgICAgIHZhbHVlOworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICAvKgorICAgICAqIFdlIGFyZSBuZXZlciBjYWxsZWQgZm9yIGEgR0VUTkVYVCBpZiBpdCdzIHJlZ2lzdGVyZWQgYXMgYQorICAgICAqICJpbnN0YW5jZSIsIGFzIGl0J3MgIm1hZ2ljYWxseSIgaGFuZGxlZCBmb3IgdXMuICAKKyAgICAgKi8KKworICAgIC8qCisgICAgICogYSBpbnN0YW5jZSBoYW5kbGVyIGFsc28gb25seSBoYW5kcyB1cyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUsIHNvCisgICAgICogd2UgZG9uJ3QgbmVlZCB0byBsb29wIG92ZXIgYSBsaXN0IG9mIHJlcXVlc3RzOyB3ZSdsbCBvbmx5IGdldCBvbmUuIAorICAgICAqLworCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisKKyAgICBjYXNlIE1PREVfR0VUOgorCisgICAgICAgIHJjID0gbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X2dldCgmdmFsdWUpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikmdmFsdWUsIHNpemVvZih2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBOT1RZRVQKKyAgICAgICAgLyoKKyAgICAgICAgICogU0VUIFJFUVVFU1QKKyAgICAgICAgICoKKyAgICAgICAgICogbXVsdGlwbGUgc3RhdGVzIGluIHRoZSB0cmFuc2FjdGlvbi4gIFNlZToKKyAgICAgICAgICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS90b29sa2l0L21pYl9tb2R1bGUvc2V0LWFjdGlvbnMuanBnCisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIC8qCisgICAgICAgICAqIG9yIHlvdSBjb3VsZCB1c2UgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplIGluc3RlYWQgCisgICAgICAgICAqLworICAgICAgICByYyA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUik7CisgICAgICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCByYyk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFggbWFsbG9jICJ1bmRvIiBzdG9yYWdlIGJ1ZmZlciAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYIGlmIG1hbGxvYywgb3Igd2hhdGV2ZXIsIGZhaWxlZDogKi8gKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgLyoKKyAgICAgICAgICogWFhYOiBmcmVlIHJlc291cmNlcyBhbGxvY2F0ZWQgaW4gUkVTRVJWRTEgYW5kL29yCisgICAgICAgICAqIFJFU0VSVkUyLiAgU29tZXRoaW5nIGZhaWxlZCBzb21ld2hlcmUsIGFuZCB0aGUgc3RhdGVzCisgICAgICAgICAqIGJlbG93IHdvbid0IGJlIGNhbGxlZC4gCisgICAgICAgICAqLworICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFg6IHBlcmZvcm0gdGhlIHZhbHVlIGNoYW5nZSBoZXJlIAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKCAvKiBYWFg6IGVycm9yPyAqLyApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIC8qIHNvbWUgZXJyb3IgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFg6IGRlbGV0ZSB0ZW1wb3Jhcnkgc3RvcmFnZSAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYOiBlcnJvcj8gKi8gKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJ5IF9yZWFsbHlfcmVhbGx5XyBoYXJkIHRvIG5ldmVyIGdldCB0byB0aGlzIHBvaW50IAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9DT01NSVRGQUlMRUQpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAvKgorICAgICAgICAgKiBYWFg6IFVORE8gYW5kIHJldHVybiB0byBwcmV2aW91cyB2YWx1ZSBmb3IgdGhlIG9iamVjdCAKKyAgICAgICAgICovCisgICAgICAgIGlmICggLyogWFhYOiBlcnJvcj8gKi8gKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJ5IF9yZWFsbHlfcmVhbGx5XyBoYXJkIHRvIG5ldmVyIGdldCB0byB0aGlzIHBvaW50IAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9VTkRPRkFJTEVEKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZgorCisgICAgZGVmYXVsdDoKKyAgICAgICAgLyoKKyAgICAgICAgICogd2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlLCBzbyB0aGlzIGlzIGEgcmVhbGx5IGJhZCBlcnJvciAKKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIG1vZGUgKCVkKSBpbiBoYW5kbGVfaXB2NklwRGVmYXVsdEhvcExpbWl0XG4iLAorICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5jCmluZGV4IGJkMjdiNzguLjM1MWRkZDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAiaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZFtdID0geyBJUFY0SU5URVJGQUNFVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkW10gPSB7IElQVjRJTlRFUkZBQ0VUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSChpcHY0SW50ZXJmYWNlVGFibGVfb2lkKTsKIAogaXB2NEludGVyZmFjZVRhYmxlX3JlZ2lzdHJhdGlvbiBpcHY0SW50ZXJmYWNlVGFibGVfdXNlcl9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlLmgKaW5kZXggYWQ1YTY3OC4uODEyMzkwOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZS5oCkBAIC0zOSw2ICszOSw3IEBACiAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwogICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX2lwdjRJbnRlcmZhY2VUYWJsZSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9pcHY0SW50ZXJmYWNlVGFibGUodm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2lwdjRJbnRlcmZhY2VUYWJsZSh2b2lkKTsKIApAQCAtMTA3LDggKzEwOCw4IEBACiAgICAgICAgICogaXB2NEludGVyZmFjZVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAoaXB2NEludGVyZmFjZVRhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRbXTsKLSAgICBleHRlcm4gaW50ICAgICAgaXB2NEludGVyZmFjZVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcHY0SW50ZXJmYWNlVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIGlwdjRJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZTsKIAogCiAjaW5jbHVkZSAiaXB2NEludGVyZmFjZVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggODRhOThmZi4uYzllMTRmZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0xMzgsNyArMTM4LDcgQEAKICAgICAgICAgICAgICAqIHllcy4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjRJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgcm93IGZvciAlZFxuIiwgZW50cnktPmluZGV4KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiaW5zZXJ0ZWQgcm93IGZvciAlIiBORVRTTk1QX1BSSW8gImRcbiIsIGVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjLCBpZnRfcnJjKTsKICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICB9CkBAIC0xNTIsNyArMTUyLDcgQEAKICAgICAgICAgICAgICAqIG5vCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY0SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgInJlbW92ZWQgIHJvdyBmb3IgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlZCAgcm93IGZvciAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpZnRfcnJjLT5kYXRhLmlmZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGMsIGlmdF9ycmMpOwogICAgICAgICAgICAgY2hhbmdlZCA9IDE7CkBAIC0xNjQsNyArMTY0LDcgQEAKICAgICAgICAgICAgICAgICAgaWZ0X3JyYy0+ZGF0YS5pZmVudHJ5LT5yZXRyYW5zbWl0X3Y0KSB8fAogICAgICAgICAgICAgICAgIChlbnRyeS0+cmVhc21fbWF4X3Y0ICE9IGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+cmVhc21fbWF4X3Y0KSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpcHY0SW50ZXJmYWNlVGFibGU6Y2hlY2tfZW50cnlfZm9yX3VwZGF0ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyb3cgY2hhbmdlZCBmb3IgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBjaGFuZ2VkIGZvciAlIiBORVRTTk1QX1BSSW8gImRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZ0X3JyYy0+ZGF0YS5pZmVudHJ5LT5pbmRleCkpOwogICAgICAgICAgICAgICAgIGNoYW5nZWQgPSAxOwogICAgICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA2ZjFhYTQ5Li5hODUxYTMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDQsOCArNDUsMTQgQEAKIAogI2luY2x1ZGUgImlwdjRJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuaCIKIAorI2luY2x1ZGUgImlmLW1pYi9pZlRhYmxlL2lmVGFibGUuaCIKKwogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMTk0LDcgKzIwMSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQVjRJTlRFUkZBQ0VUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBWNElOVEVSRkFDRVRBQkxFX01BWF9DT0w7CkBAIC0zNDUsNyArMzUyLDcgQEAKICAgICAgKi8KICAgICB7CiAgICAgICAgIG9pZCAgICAgICAgICAgICBsY19vaWRbXSA9IHsgSVBWNElOVEVSRkFDRVRBQkxFTEFTVENIQU5HRV9PSUQgfTsKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXB2NFRhYmxlTGFzdENoYW5nZWQiLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsY19vaWQsIE9JRF9MRU5HVEgobGNfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLApAQCAtNDQ3LDggKzQ1NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICBpcHY0SW50ZXJmYWNlVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9Ci0gICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY0SW50ZXJmYWNlVGFibGU6X21mZF9pcHY0SW50ZXJmYWNlVGFibGVfcG9zdF9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOwpAQCAtMTI3MCw2ICsxMjc1LDcgQEAKICAgICAgICAgICAgICAgICAgImlwdjRJbnRlcmZhY2VUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJpcHY0SW50ZXJmYWNlVGFibGUiKTsKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NEludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9pbml0ICovCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jCmluZGV4IDNjODVhNTQuLjM1YjJlOTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY0SW50ZXJmYWNlVGFibGUvaXB2NEludGVyZmFjZVRhYmxlX3N1YmFnZW50LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZS9pcHY0SW50ZXJmYWNlVGFibGVfc3ViYWdlbnQuYwpAQCAtNiw5ICs2LDE0IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShhZ2VudHhfZW5hYmxlX3N1YmFnZW50KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShlbmFibGVfc3RkZXJybG9nKQorCiAvKgogICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmMKaW5kZXggZjljYWFlZi4uOTJmMGE1YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5jCkBAIC0yNiw4ICsyNiw4IEBACiAKICNpbmNsdWRlICJpcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkW10gPSB7IElQVjZJTlRFUkZBQ0VUQUJMRV9PSUQgfTsKLWludCAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRbXSA9IHsgSVBWNklOVEVSRkFDRVRBQkxFX09JRCB9OworY29uc3QgaW50ICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKGlwdjZJbnRlcmZhY2VUYWJsZV9vaWQpOwogCiBpcHY2SW50ZXJmYWNlVGFibGVfcmVnaXN0cmF0aW9uIGlwdjZJbnRlcmZhY2VUYWJsZV91c2VyX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGUuaAppbmRleCA4MjkyZWMwLi5lMmE4N2ExIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlLmgKQEAgLTM5LDYgKzM5LDcgQEAKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICogZnVuY3Rpb24gZGVjbGFyYXRpb25zCiAgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXB2NkludGVyZmFjZVRhYmxlKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBpbml0X2lwdjZJbnRlcmZhY2VUYWJsZSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25faXB2NkludGVyZmFjZVRhYmxlKHZvaWQpOwogCkBAIC0xOTEsOCArMTkyLDggQEAKICAgICAgICAgKiBpcHY2SW50ZXJmYWNlVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChpcHY2SW50ZXJmYWNlVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXB2NkludGVyZmFjZVRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJpcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCBiMTQwOGZkLi4zM2M2NWE5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTEzOCw3ICsxMzgsNyBAQAogICAgICAgICAgICAgICogeWVzLgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBERUJVR01TR1RMKCgiaXB2NkludGVyZmFjZVRhYmxlOmNoZWNrX2VudHJ5X2Zvcl91cGRhdGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJpbnNlcnRlZCByb3cgZm9yIGluZGV4ICVkXG4iLCBlbnRyeS0+aW5kZXgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJpbnNlcnRlZCByb3cgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwgZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGMsIGlmdF9ycmMpOwogICAgICAgICAgICAgY2hhbmdlZCA9IDE7CiAgICAgICAgIH0KQEAgLTE1Miw3ICsxNTIsNyBAQAogICAgICAgICAgICAgICogbm8KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjZJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAicmVtb3ZlZCAgcm93IGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJyZW1vdmVkICByb3cgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+aW5kZXgpKTsKICAgICAgICAgICAgIENPTlRBSU5FUl9SRU1PVkUoYywgaWZ0X3JyYyk7CiAgICAgICAgICAgICBjaGFuZ2VkID0gMTsKQEAgLTE5MCw3ICsxOTAsNyBAQAogICAgICAgICAgICAgICAgICAgICAmJiAoZW50cnktPmZvcndhcmRpbmdfdjYgIT0KICAgICAgICAgICAgICAgICAgICAgICAgIGlmdF9ycmMtPmRhdGEuaWZlbnRyeS0+Zm9yd2FyZGluZ192NikpKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImlwdjZJbnRlcmZhY2VUYWJsZTpjaGVja19lbnRyeV9mb3JfdXBkYXRlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInJvdyBjaGFuZ2VkIGZvciBpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicm93IGNoYW5nZWQgZm9yIGluZGV4ICUiIE5FVFNOTVBfUFJJbyAiZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnRfcnJjLT5kYXRhLmlmZW50cnktPmluZGV4KSk7CiAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IDE7CiAgICAgICAgICAgICB9CkBAIC0zMjksNyArMzI5LDcgQEAKICAgICAgICAgKytjb3VudDsKICAgICB9CiAKLSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwdjZJbnRlcmZhY2VUYWJsZTppcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgY291bnQpKTsKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwdjZJbnRlcmZhY2VUYWJsZTppcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2xvYWQiLCAiaW5zZXJ0ZWQgJWQgcmVjb3Jkc1xuIiwgKGludCljb3VudCkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2xvYWQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9kYXRhX2FjY2Vzcy5oCmluZGV4IDQxZDcxNTcuLjY2NGMzZDcgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUvaXB2NkludGVyZmFjZVRhYmxlX2RhdGFfYWNjZXNzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfZGF0YV9hY2Nlc3MuaApAQCAtMzUsMjYgKzM1LDE0IEBACiAgICAgICovCiAKIAotICAgIGludAotICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfaW5pdF9kYXRhKGlwdjZJbnRlcmZhY2VUYWJsZV9yZWdpc3RyYXRpb24gKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yZWcpOworICAgIGludCAgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfaW5pdF9kYXRhKGlwdjZJbnRlcmZhY2VUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yZWcpOwogCiAKKyAgICB2b2lkICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX2NoZWNrX2VudHJ5X2Zvcl91cGRhdGVzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGlmVGFibGVfcm93cmVxX2N0eCAqIGlmdF9ycmMsCisJCQkgICAgbmV0c25tcF9pbnRlcmZhY2VfZW50cnkgKmVudHJ5KTsKKwogICAgIHZvaWQgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqY29udGFpbmVyX3B0cl9wdHIpOwogICAgIHZvaWQgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyCkBAIC02NSwyNCArNTMsOCBAQAogICAgIHZvaWQgICAgICAgICAgICBpcHY2SW50ZXJmYWNlVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjb250YWluZXIpOwogCi0gICAgaW50Ci0gICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIAotICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIGlwdjZJbnRlcmZhY2VUYWJsZV9yb3dfcHJlcChpcHY2SW50ZXJmYWNlVGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NkludGVyZmFjZVRhYmxlX3Jvd19wcmVwKGlwdjZJbnRlcmZhY2VUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogCiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZS9pcHY2SW50ZXJmYWNlVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA0MjAyNjE2Li5jYmQ1MzNjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NkludGVyZmFjZVRhYmxlL2lwdjZJbnRlcmZhY2VUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDgsNiArNDksMTAgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMTk0LDcgKzE5OSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IElQVjZJTlRFUkZBQ0VUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gSVBWNklOVEVSRkFDRVRBQkxFX01BWF9DT0w7CkBAIC0zNDUsNyArMzUwLDcgQEAKICAgICAgKi8KICAgICB7CiAgICAgICAgIG9pZCAgICAgICAgICAgICBsY19vaWRbXSA9IHsgSVBWNklOVEVSRkFDRVRBQkxFTEFTVENIQU5HRV9PSUQgfTsKLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgiaXB2NlRhYmxlTGFzdENoYW5nZWQiLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsY19vaWQsIE9JRF9MRU5HVEgobGNfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLApAQCAtMTM1Miw3ICsxMzU3LDcgQEAKICAgICAgICAgICAgICAgICAgImlwdjZJbnRlcmZhY2VUYWJsZV9jb250YWluZXJfaW5pdFxuIik7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0KKyAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImlwdjZJbnRlcmZhY2VUYWJsZSIpOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NkludGVyZmFjZVRhYmxlX2NvbnRhaW5lcl9pbml0ICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzliZDc1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKQEAgLTAsMCArMSw1IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCitjb25maWdfcmVxdWlyZShpcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTQwOTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYwpAQCAtMCwwICsxLDEwMDkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUuYyAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisvKiogXHBhZ2UgTUZEIGhlbHBlciBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqCisgKiBcc2VjdGlvbiBpbnRybyBJbnRyb2R1Y3Rpb24KKyAqIEludHJvZHVjdG9yeSB0ZXh0LgorICoKKyAqLworLyoKKyAqIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzIAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisvKgorICogaW5jbHVkZSBvdXIgcGFyZW50IGhlYWRlciAKKyAqLworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgorCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgiCisKK2NvbnN0IG9pZCAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRbXSA9CisgICAgeyBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRfc2l6ZSA9CitPSURfTEVOR1RIKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZCk7CisKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHQ7CitzdGF0aWMgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHRfcDsKKwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCk7CisKKworLyoqCisgKiBJbml0aWFsaXplcyB0aGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbW9kdWxlCisgKi8KK3ZvaWQKK2luaXRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMDpvOiBQZXJmb3JtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIG9uZS10aW1lIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcKKyAgICAgKi8KKyAgICBpZiAoc2hvdWxkX2luaXQoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlIikpCisgICAgICAgIGluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUoKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlICovCisKKy8qKgorICogU2h1dC1kb3duIHRoZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBtb2R1bGUgKGFnZW50IGlzIGV4aXRpbmcpCisgKi8KK3ZvaWQKK3NodXRkb3duX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHNob3VsZF9pbml0KCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIpKQorICAgICAgICBzaHV0ZG93bl90YWJsZV9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSgpOworCit9CisKKy8qKgorICogSW5pdGlhbGl6ZSB0aGUgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgCisgKiAgICAoRGVmaW5lIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCkKKyAqLwordm9pZAoraW5pdGlhbGl6ZV90YWJsZV9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSh2b2lkKQoreworICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmluaXRpYWxpemVfdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAxOm86IFBlcmZvcm0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgb25lLXRpbWUgdGFibGUgaW5pdGlhbGl6YXRpb24uCisgICAgICovCisKKyAgICAvKgorICAgICAqIFRPRE86MzAyOm86IHwtPkluaXRpYWxpemUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgdXNlciBjb250ZXh0CisgICAgICogaWYgeW91J2QgbGlrZSB0byBwYXNzIGluIGEgcG9pbnRlciB0byBzb21lIGRhdGEgZm9yIHRoaXMKKyAgICAgKiB0YWJsZSwgYWxsb2NhdGUgb3Igc2V0IGl0IHVwIGhlcmUuCisgICAgICovCisgICAgLyoKKyAgICAgKiBhIG5ldHNubXBfZGF0YV9saXN0IGlzIGEgc2ltcGxlIHdheSB0byBzdG9yZSB2b2lkIHBvaW50ZXJzLiBBIHNpbXBsZQorICAgICAqIHN0cmluZyB0b2tlbiBpcyB1c2VkIHRvIGFkZCwgZmluZCBvciByZW1vdmUgcG9pbnRlcnMuCisgICAgICovCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3AgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImlwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwgTlVMTCwgTlVMTCk7CisKKyAgICAvKgorICAgICAqIE5vIHN1cHBvcnQgZm9yIGFueSBmbGFncyB5ZXQsIGJ1dCBpbiB0aGUgZnV0dXJlIHlvdSB3b3VsZAorICAgICAqIHNldCBhbnkgZmxhZ3MgaGVyZS4KKyAgICAgKi8KKyAgICBmbGFncyA9IDA7CisKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKwkoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSAqLworCisvKioKKyAqIFNodXRkb3duIHRoZSB0YWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSAKKyAqLwordm9pZAorc2h1dGRvd25fdGFibGVfaXB2NlNjb3BlWm9uZUluZGV4VGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfc2h1dGRvd25faW50ZXJmYWNlCisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3VzZXJfY29udGV4dF9wID0gTlVMTDsKK30KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChlZyBkZWZhdWx0IHZhbHVlcykKKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCAgICA6IHJvdyByZXF1ZXN0IGNvbnRleHQKKyAqIEBwYXJhbSB1c2VyX2luaXRfY3R4IDogdm9pZCBwb2ludGVyIGZvciB1c2VyIChwYXJhbWV0ZXIgdG8gcm93cmVxX2N0eF9hbGxvY2F0ZSkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICA6IG5vIGVycm9ycworICogQHJldHZhbCBNRkRfRVJST1IgICAgOiBlcnJvciAoY29udGV4dCBhbGxvY2F0ZSB3aWxsIGZhaWwpCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMTA6bzogfC0+IFBlcmZvcm0gZXh0cmEgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgcm93cmVxIGluaXRpYWxpemF0aW9uLiAoZWcgREVGVkFMUykKKyAgICAgKi8KKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfaW5pdCAqLworCisvKioKKyAqIGV4dHJhIGNvbnRleHQgY2xlYW51cAorICoKKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9jbGVhbnVwCisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHJvd3JlcSBjbGVhbnVwLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKHJvd3JlcV9jdHgtPmRhdGEpOworICAgIHJvd3JlcV9jdHgtPmRhdGEgPSBOVUxMOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAgKi8KKworLyoqCisgKiBwcmUtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTA6bzogUGVyZm9ybSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBwcmUtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIHBvc3QtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqIE5vdGU6CisgKiAgIE5ldyByb3dzIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIsIGFuZAorICogICBkZWxldGVkIHJvd3MgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyIGFuZAorICogICByZWxlYXNlZC4KKyAqCisgKiBAcGFyYW0gdXNlcl9jb250ZXh0CisgKiBAcGFyYW0gcmMgOiBNRkRfU1VDQ0VTUyBpZiBhbGwgcmVxdWVzdHMgc3VjY2VlZGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogb3RoZXIgZXJyb3IgKGlnbm9yZWQpCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb250ZXh0LCBpbnQgcmMpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjUxMTpvOiBQZXJmb3JtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIHBvc3QtcmVxdWVzdCBhY3Rpb25zLgorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworLyoKKyAqIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiBjcmVhdGUgbmV3IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEuCisgKi8KK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKgoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKQoreworICAgIC8qCisgICAgICogVE9ETzoyMDE6cjogfC0+IGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICpydG4gPSBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfY3JlYXRlKCk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9kYXRhIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcnRuKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmFibGUgdG8gbWFsbG9jIG1lbW9yeSBmb3IgbmV3ICIKKyAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEuXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRuOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9kYXRhICovCisKKy8qCisgKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX2RhdGEKKyAqCisgKiBQdXJwb3NlOiByZWxlYXNlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEuCisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2VfZGF0YShpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhICogZGF0YSkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX2RhdGEiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjAyOnI6IHwtPiByZWxlYXNlIG1lbW9yeSBmb3IgdGhlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgKi8KKyAgICBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfZnJlZShkYXRhKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhICovCisKKy8qKiBAZGVmZ3JvdXAgZGF0YV9nZXQgZGF0YV9nZXQ6IFJvdXRpbmVzIHRvIGdldCBkYXRhCisgKgorICogVE9ETzoyMzA6TTogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGdldCByb3V0aW5lcy4KKyAqIFRPRE86MjQwOk06IEltcGxlbWVudCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBtYXBwaW5nIHJvdXRpbmVzIChpZiBhbnkpLgorICoKKyAqIFRoZXNlIHJvdXRpbmUgYXJlIHVzZWQgdG8gZ2V0IHRoZSB2YWx1ZSBmb3IgaW5kaXZpZHVhbCBvYmplY3RzLiBUaGUKKyAqIHJvdyBjb250ZXh0IGlzIHBhc3NlZCwgYWxvbmcgd2l0aCBhIHBvaW50ZXIgdG8gdGhlIG1lbW9yeSB3aGVyZSB0aGUKKyAqIHZhbHVlIHNob3VsZCBiZSBjb3BpZWQuCisgKgorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhUYWJsZSBpcyBzdWJpZCAzNiBvZiBpcC4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYsIGxlbmd0aDogOAorICovCisKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICogVE9ETzoyMDA6cjogSW1wbGVtZW50IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKworCisvKioKKyAqIHNldCBtaWIgaW5kZXgoZXMpCisgKgorICogQHBhcmFtIHRibF9pZHggbWliIGluZGV4IHN0cnVjdHVyZQorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBjb252ZW5pZW5jZSBmdW5jdGlvbiBpcyB1c2VmdWwgZm9yIHNldHRpbmcgYWxsIHRoZSBNSUIgaW5kZXgKKyAqICBjb21wb25lbnRzIHdpdGggYSBzaW5nbGUgZnVuY3Rpb24gY2FsbC4gSXQgaXMgYXNzdW1lIHRoYXQgdGhlIEMgdmFsdWVzCisgKiAgaGF2ZSBhbHJlYWR5IGJlZW4gbWFwcGVkIGZyb20gdGhlaXIgbmF0aXZlL3Jhd2Zvcm1hdCB0byB0aGUgTUlCIGZvcm1hdC4KKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleCAqIHRibF9pZHgsCisgICAgIGxvbmcgaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgdGJsX2lkeC0+aXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCA9IGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNldCByb3cgY29udGV4dCBpbmRleGVzCisgKgorICogQHBhcmFtIHJlcXJlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtaWIgaW5kZXhzLCB0aGVuIHVwZGF0ZXMgdGhlIG9pZCBpbmRleHMKKyAqICBmcm9tIHRoZSBtaWIgaW5kZXguCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChNRkRfU1VDQ0VTUyAhPQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KCZyb3dyZXFfY3R4LT50YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF90b19vaWQoJnJvd3JlcV9jdHgtPm9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyb3dyZXFfY3R4LT50YmxfaWR4KSkgeworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWwKKyAqIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCBpcyBzdWJpZCAyIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4yCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciB0aGUgbGluay1sb2NhbCBzY29wZSBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhMaW5rTG9jYWxfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS0+c2NvcGV6b25lX2xpbmtsb2NhbDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4TGlua0xvY2FsX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXgzCisgKiBpcHY2U2NvcGVab25lSW5kZXgzIGlzIHN1YmlkIDMgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjMKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDMgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXgzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4M192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4M19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXgzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXgzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXgzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleDNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4M192YWxfcHRyKSA9IDA7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4M19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbAorICogaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbCBpcyBzdWJpZCA0IG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS40CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciB0aGUgYWRtaW4tbG9jYWwgc2NvcGUgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWwgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbF92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbAorICogaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsIGlzIHN1YmlkIDUgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjUKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHRoZSBzaXRlLWxvY2FsIHNjb3BlIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWwgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleFNpdGVMb2NhbF92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleDYKKyAqIGlwdjZTY29wZVpvbmVJbmRleDYgaXMgc3ViaWQgNiBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuNgorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgNiBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDYgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXg2X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDZfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleDZfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleDZfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4NiBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4Nl92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4Nl9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4NworICogaXB2NlNjb3BlWm9uZUluZGV4NyBpcyBzdWJpZCA3IG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS43CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSA3IG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4NyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleDdfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4N19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXg3IGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXg3X3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleDdfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXg3X2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbAorICogaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWwgaXMgc3ViaWQgOCBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuOAorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3IgdGhlIG9yZ2FuaXphdGlvbi1sb2NhbCBzY29wZSBvbiB0aGlzCisgICAgICAgICAgICBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbF92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXg5CisgKiBpcHY2U2NvcGVab25lSW5kZXg5IGlzIHN1YmlkIDkgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjkKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDkgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXg5IGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4OV9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXg5X3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXg5X3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXg5X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleDkgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleDlfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleDlfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleEEKKyAqIGlwdjZTY29wZVpvbmVJbmRleEEgaXMgc3ViaWQgMTAgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjEwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSBBIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QSBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleEFfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4QV92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4QV92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4QV9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhBIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhBX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhBX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogSVAtTUlCOjppcHY2U2NvcGVab25lSW5kZXhFbnRyeS5pcHY2U2NvcGVab25lSW5kZXhCCisgKiBpcHY2U2NvcGVab25lSW5kZXhCIGlzIHN1YmlkIDExIG9mIGlwdjZTY29wZVpvbmVJbmRleEVudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYuMS4xMQorICogRGVzY3JpcHRpb246CitUaGUgem9uZSBpbmRleCBmb3Igc2NvcGUgQiBvbiB0aGlzIGludGVyZmFjZS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAxCisgKiAgIHNldHRhYmxlICAgMAorICogICBoaW50OiBkCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgSW5ldFpvbmVJbmRleCAoYmFzZWQgb24gcGVybHR5cGUgVU5TSUdORUQzMikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9VTlNJR05FRC4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEIgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBpcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhCX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleEJfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleEJfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleEJfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4QiBkYXRhLgorICAgICAqIGNvcHkgKCogaXB2NlNjb3BlWm9uZUluZGV4Ql92YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCppcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIpID0gMDsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4Ql9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4RW50cnkuaXB2NlNjb3BlWm9uZUluZGV4QworICogaXB2NlNjb3BlWm9uZUluZGV4QyBpcyBzdWJpZCAxMiBvZiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LjEuMTIKKyAqIERlc2NyaXB0aW9uOgorVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIEMgb24gdGhpcyBpbnRlcmZhY2UuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMQorICogICBzZXR0YWJsZSAgIDAKKyAqICAgaGludDogZAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIEluZXRab25lSW5kZXggKGJhc2VkIG9uIHBlcmx0eXBlIFVOU0lHTkVEMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fVU5TSUdORUQuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhDIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4Q19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhDX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpcHY2U2NvcGVab25lSW5kZXhDX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhDX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGlwdjZTY29wZVpvbmVJbmRleEMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGlwdjZTY29wZVpvbmVJbmRleENfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyKSA9IDA7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleENfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleEVudHJ5LmlwdjZTY29wZVpvbmVJbmRleEQKKyAqIGlwdjZTY29wZVpvbmVJbmRleEQgaXMgc3ViaWQgMTMgb2YgaXB2NlNjb3BlWm9uZUluZGV4RW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNi4xLjEzCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB6b25lIGluZGV4IGZvciBzY29wZSBEIG9uIHRoaXMgaW50ZXJmYWNlLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDEKKyAqICAgc2V0dGFibGUgICAwCisgKiAgIGhpbnQ6IGQKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBJbmV0Wm9uZUluZGV4IChiYXNlZCBvbiBwZXJsdHlwZSBVTlNJR05FRDMyKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX1VOU0lHTkVELiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgaXB2NlNjb3BlWm9uZUluZGV4RCBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleERfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4RF92YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXB2NlNjb3BlWm9uZUluZGV4RF92YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4RF9nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBpcHY2U2NvcGVab25lSW5kZXhEIGRhdGEuCisgICAgICogY29weSAoKiBpcHY2U2NvcGVab25lSW5kZXhEX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cikgPSAwOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhEX2dldCAqLworCisKKy8qKiBAeyAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTc0ZmVlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlLmgKQEAgLTAsMCArMSwyNjkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJAorICoKKyAqICRJZDppcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKyNpZm5kZWYgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfSAorI2RlZmluZSBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisvKiogQGFkZHRvZ3JvdXAgbWlzYyBtaXNjOiBNaXNjZWxsYW5lb3VzIHJvdXRpbmVzCisgKgorICogQHsKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oPgorICAgIC8qCisgICAgICogb3RoZXIgcmVxdWlyZWQgbW9kdWxlIGNvbXBvbmVudHMgCisgICAgICovCisgICAgLyogKklOREVOVC1PRkYqICAqLworY29uZmlnX3JlcXVpcmUoaXAtbWliL2RhdGFfYWNjZXNzL2lwdjZzY29wZXpvbmUpCitjb25maWdfcmVxdWlyZShpcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlKQorY29uZmlnX3JlcXVpcmUoaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzKQorICAgIC8qICpJTkRFTlQtT04qICAqLworCisgICAgLyoKKyAgICAgKiBPSUQgYW5kIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIAorICAgICAqLworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaCIKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworICAgIHZvaWQgICAgICAgICAgICBpbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlKHZvaWQpOworICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBXaGVuIHlvdSByZWdpc3RlciB5b3VyIG1pYiwgeW91IGdldCB0byBwcm92aWRlIGEgZ2VuZXJpYworICAgICAqIHBvaW50ZXIgdGhhdCB3aWxsIGJlIHBhc3NlZCBiYWNrIHRvIHlvdSBmb3IgbW9zdCBvZiB0aGUKKyAgICAgKiBmdW5jdGlvbnMgY2FsbHMuCisgICAgICoKKyAgICAgKiBUT0RPOjEwMDpyOiBSZXZpZXcgYWxsIGNvbnRleHQgc3RydWN0dXJlcworICAgICAqLworICAgIC8qCisgICAgICogVE9ETzoxMDE6bzogfC0+IFJldmlldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSByZWdpc3RyYXRpb24gY29udGV4dC4KKyAgICAgKi8KKyAgICB0eXBlZGVmIG5ldHNubXBfZGF0YV9saXN0IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbjsKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogVE9ETzoxMTA6cjogfC0+IFJldmlldyBpcHY2U2NvcGVab25lVGFibGUgZGF0YSBjb250ZXh0IHN0cnVjdHVyZS4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgZGF0YSBmb3IgaXB2NlNjb3BlWm9uZVRhYmxlLgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhOworCisKKyAgICAvKgorICAgICAqIFRPRE86MTIwOnI6IHwtPiBSZXZpZXcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgbWliIGluZGV4LgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBpbmRleCBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4X3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXg7CisKKworICAgIH0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4OworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMTpyOiB8ICAgfC0+IFJldmlldyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBtYXggaW5kZXggbGVuZ3RoLgorICAgICAqIElmIHlvdSBLTk9XIHRoYXQgeW91ciBpbmRleGVzIHdpbGwgbmV2ZXIgZXhjZWVkIGEgY2VydGFpbgorICAgICAqIGxlbmd0aCwgdXBkYXRlIHRoaXMgbWFjcm8gdG8gdGhhdCBsZW5ndGguCisgICAgICovCisjZGVmaW5lIE1BWF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9JRFhfTEVOICAgICAxCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjEzMDpvOiB8LT4gUmV2aWV3IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIFJvdyByZXF1ZXN0IChyb3dyZXEpIGNvbnRleHQuCisgICAgICogV2hlbiB5b3VyIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLCB5b3Ugd2lsbCBiZSBwYXNzZWQgYQorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggcG9pbnRlci4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X3MgeworCisgICAgLyoqIHRoaXMgbXVzdCBiZSBmaXJzdCBmb3IgY29udGFpbmVyIGNvbXBhcmUgdG8gd29yayAqLworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKyAgICAgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX0lEWF9MRU5dOworCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleCB0YmxfaWR4OworCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKmRhdGE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZmxhZ3MgcGVyIHJvdy4gQ3VycmVudGx5LCB0aGUgZmlyc3QgKGxvd2VyKSA4IGJpdHMgYXJlIHJlc2VydmVkCisgICAgICAgICAqIGZvciB0aGUgdXNlci4gU2VlIG1mZC5oIGZvciBvdGhlciBmbGFncy4KKyAgICAgICAgICovCisgICAgICAgIHVfaW50ICAgICAgICAgICByb3dyZXFfZmxhZ3M7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzoxMzE6bzogfCAgIHwtPiBBZGQgdXNlZnVsIGRhdGEgdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgcm93cmVxIGNvbnRleHQuCisgICAgICAgICAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHN0b3JhZ2UgZm9yIGZ1dHVyZSBleHBhbnNpb24KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2xpc3Q7CisKKyAgICB9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHg7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWZfcm93cmVxX2N0eF9zIHsKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICB9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZl9yb3dyZXFfY3R4OworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAqLworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2NvbnRleHQsIGludCByYyk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eF9pbml0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKKworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKgorICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX2RhdGEodm9pZCk7CisKKyAgICB2b2lkCisgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKiBkYXRhKTsKKworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkX3NpemU7CisKKworI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5oIgorI2luY2x1ZGUgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgiCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyAgICAvKgorICAgICAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaXMgc3ViaWQgMzYgb2YgaXAuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjQuMzYsIGxlbmd0aDogOAorICAgICAqLworICAgIC8qCisgICAgICogaW5kZXhlcworICAgICAqLworCisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4M19nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleDNfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEFkbWluTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhTaXRlTG9jYWxfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleDZfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXg2X3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXg3X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4N192YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleE9yZ2FuaXphdGlvbkxvY2FsX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXg5X2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4OV92YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4QV9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleEFfdmFsX3B0cik7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleEJfZ2V0KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpcHY2U2NvcGVab25lSW5kZXhCX3ZhbF9wdHIpOworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhDX2dldChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXB2NlNjb3BlWm9uZUluZGV4Q192YWxfcHRyKTsKKyAgICBpbnQKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4RF9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGlwdjZTY29wZVpvbmVJbmRleERfdmFsX3B0cik7CisKKworICAgIGludAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgbG9uZyBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4X3ZhbCk7CisgICAgaW50CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4ZXNfc2V0CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIGxvbmcgaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleF92YWwpOworCisgICAgLyoKKyAgICAgKiBEVU1NWSBtYXJrZXJzLCBpZ25vcmUKKyAgICAgKgorICAgICAqIFRPRE86MDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjE5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoyOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86Mzk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjQ5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMDI1ZGQzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTAsMCArMSwzMDQgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuYyAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCIKKworCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaCIKKworLyoqIEBpbmdyb3VwIGludGVyZmFjZQorICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCisgKgorICogVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gbG9jYXRlIHRoZSBkYXRhIHVzZWQgdG8gc2F0aXNmeQorICogcmVxdWVzdHMuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIElQLU1JQjo6aXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaXMgc3ViaWQgMzYgb2YgaXAuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAqLworCisvKioKKyAqIGluaXRpYWxpemF0aW9uIGZvciBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBkYXRhIGFjY2VzcworICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwIHRvIGFsbG93IHlvdSB0bworICogYWxsb2NhdGUgYW55IHJlc291cmNlcyB5b3UgbmVlZCBmb3IgdGhlIGRhdGEgdGFibGUuCisgKgorICogQHBhcmFtIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZworICogICAgICAgIFBvaW50ZXIgdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogdW5yZWNvdmVyYWJsZSBlcnJvci4KKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0X2RhdGEoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWcpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdF9kYXRhIiwgImNhbGxlZFxuIikpOworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdF9kYXRhICovCisKKy8qKgorICogY29udGFpbmVyIG92ZXJ2aWV3CisgKgorICovCisKKy8qKgorICogY29udGFpbmVyIGluaXRpYWxpemF0aW9uCisgKgorICogQHBhcmFtIGNvbnRhaW5lcl9wdHJfcHRyIEEgcG9pbnRlciB0byBhIGNvbnRhaW5lciBwb2ludGVyLiBJZiB5b3UKKyAqICAgICAgICBjcmVhdGUgYSBjdXN0b20gY29udGFpbmVyLCB1c2UgdGhpcyBwYXJhbWV0ZXIgdG8gcmV0dXJuIGl0CisgKiAgICAgICAgdG8gdGhlIE1GRCBoZWxwZXIuIElmIHNldCB0byBOVUxMLCB0aGUgTUZEIGhlbHBlciB3aWxsCisgKiAgICAgICAgYWxsb2NhdGUgYSBjb250YWluZXIgZm9yIHlvdS4KKyAqCisgKiAgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuIElmIG5vIGN1c3RvbQorICogIGNvbnRhaW5lciBpcyBhbGxvY2F0ZWQsIHRoZSBNRkQgY29kZSB3aWxsIGNyZWF0ZSBvbmUgZm9yIHlvdXIuCisgKgorICogQHJlbWFyaworICogIFRoaXMgd291bGQgYWxzbyBiZSBhIGdvb2QgcGxhY2UgdG8gZG8gYW55IGluaXRpYWxpemF0aW9uIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBvcGVuaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHdpbGwgc3VwcGx5IHRoZSBkYXRhLCBvcGVuaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQobmV0c25tcF9jb250YWluZXIgKioKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqIGNhY2hlKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBGb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gdXNlIGEgY3VzdG9tIGNvbnRhaW5lci4gSWYgeW91CisgICAgICogZG8gbm90IGNyZWF0ZSBvbmUsIG9uZSB3aWxsIGJlIGNyZWF0ZWQgZm9yIHlvdS4KKyAgICAgKi8KKyAgICAqY29udGFpbmVyX3B0cl9wdHIgPSBOVUxMOworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXRcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBUT0RPOjM0NTpBOiBTZXQgdXAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgY2FjaGUgcHJvcGVydGllcy4KKyAgICAgKgorICAgICAqIEFsc28gZm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHNldCBwYXJhbWV0ZXJzIGZvciB0aGUKKyAgICAgKiBjYWNoZS4gRG8gbm90IGNoYW5nZSB0aGUgbWFnaWMgcG9pbnRlciwgYXMgaXQgaXMgdXNlZAorICAgICAqIGJ5IHRoZSBNRkQgaGVscGVyLiBUbyBjb21wbGV0ZWx5IGRpc2FibGUgY2FjaGluZywgc2V0CisgICAgICogY2FjaGUtPmVuYWJsZWQgdG8gMC4KKyAgICAgKi8KKyAgICBjYWNoZS0+dGltZW91dCA9IDYwOyAvKiBzZWNvbmRzICovCisKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIGNvbnRhaW5lciBzaHV0ZG93bgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyIEEgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzaHV0ZG93biB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZSgpLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBjbGVhbnVwIG5lZWRlZAorICogIGZvciB5b3UgZGF0YSBzb3VyY2UuIEZvciBleGFtcGxlLCBjbG9zaW5nIGEgY29ubmVjdGlvbiB0byBhbm90aGVyCisgKiAgcHJvY2VzcyB0aGF0IHN1cHBsaWVkIHRoZSBkYXRhLCBjbG9zaW5nIGEgZGF0YWJhc2UsIGV0Yy4KKyAqLwordm9pZAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXJfcHRyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBwYXJhbXMgdG8gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworLyoqCisgKiBjaGVjayBlbnRyeSBmb3IgdXBkYXRlCisgKgorICovCitzdGF0aWMgdm9pZAorX3NuYXJmX3pvbmVpbmRleF9lbnRyeShuZXRzbm1wX3Y2c2NvcGV6b25lX2VudHJ5ICpzY29wZXpvbmVfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKworICAgIERFQlVHVFJBQ0U7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBzY29wZXpvbmVfZW50cnkpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKKyAgICByb3dyZXFfY3R4ID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChzY29wZXpvbmVfZW50cnksTlVMTCk7CisgICAgaWYgKChOVUxMICE9IHJvd3JlcV9jdHgpICYmCisgICAgICAgICAoTUZEX1NVQ0NFU1MgPT0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhlc19zZXQKKyAgICAgICAgIChyb3dyZXFfY3R4LCByb3dyZXFfY3R4LT5kYXRhLT5pbmRleCkpKSB7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICB9IGVsc2UgeworICAgICAgIGlmIChyb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKKyAgICAgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBjYWNoZS5cbiIpOworICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKHNjb3Blem9uZV9lbnRyeSk7CisgICAgfQorICAgICAgCit9CisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgZGF0YSBsb2FkCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgdG8gd2hpY2ggaXRlbXMgc2hvdWxkIGJlIGluc2VydGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgICAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEUgOiBDYW4ndCBhY2Nlc3MgZGF0YSBzb3VyY2UKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvYWQgdGhlIGluZGV4KGVzKSAoYW5kIGRhdGEsIG9wdGlvbmFsbHkpCisgKiAgZm9yIHRoZSBldmVyeSByb3cgaW4gdGhlIGRhdGEgc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBXaGlsZSBsb2FkaW5nIHRoZSBkYXRhLCB0aGUgb25seSBpbXBvcnRhbnQgdGhpbmcgaXMgdGhlIGluZGV4ZXMuCisgKiAgSWYgYWNjZXNzIHRvIHlvdXIgZGF0YSBpcyBjaGVhcC9mYXN0IChlLmcuIHlvdSBoYXZlIGEgcG9pbnRlciB0byBhCisgKiAgc3RydWN0dXJlIGluIG1lbW9yeSksIGl0IHdvdWxkIG1ha2Ugc2Vuc2UgdG8gdXBkYXRlIHRoZSBkYXRhIGhlcmUuCisgKiAgSWYsIGhvd2V2ZXIsIHRoZSBhY2Nlc3NpbmcgdGhlIGRhdGEgaW52b3ZsZXMgbW9yZSB3b3JrIChlLmcuIHBhcnNpbmcKKyAqICBzb21lIG90aGVyIGV4aXN0aW5nIGRhdGEsIG9yIHBlZm9ybWluZyBjYWxjdWxhdGlvbnMgdG8gZGVyaXZlIHRoZSBkYXRhKSwKKyAqICB0aGVuIHlvdSBjYW4gbGltaXQgeW91cnNlbGYgdG8gc2V0dGluZyB0aGUgaW5kZXhlcyBhbmQgc2F2aW5nIGFueQorICogIGluZm9ybWF0aW9uIHlvdSB3aWxsIG5lZWQgbGF0ZXIuIFRoZW4gdXNlIHRoZSBzYXZlZCBpbmZvcm1hdGlvbiBpbgorICogIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwKCkgZm9yIHBvcHVsYXRpbmcgZGF0YS4KKyAqCisgKiBAbm90ZQorICogIElmIHlvdSBuZWVkIGNvbnNpc3RlbmN5IGJldHdlZW4gcm93cyAobGlrZSB5b3Ugd2FudCBzdGF0aXN0aWNzCisgKiAgZm9yIGVhY2ggcm93IHRvIGJlIGZyb20gdGhlIHNhbWUgdGltZSBmcmFtZSksIHlvdSBzaG91bGQgc2V0IGFsbAorICogIGRhdGEgaGVyZS4KKyAqCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisKKyAgICAvKgorICAgICAqIHRlbXBvcmFyeSBzdG9yYWdlIGZvciBpbmRleCB2YWx1ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfY29udGFpbmVyICp6b25laW5kZXggPSBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2xvYWQoTlVMTCwgMCk7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHpvbmVpbmRleCkgeworICAgICAgICBERUJVR01TR1RMKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGU6Y29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgZ2V0IHNjb3Blem9uZSBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOworICAgIH0KKyAgICAvKgorICAgICAqIFRPRE86MzUxOk06IHwtPiBMb2FkL3VwZGF0ZSBkYXRhIGluIHRoZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBjb250YWluZXIuCisgICAgICogbG9vcCBvdmVyIHlvdXIgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgZGF0YSwgYWxsb2NhdGUgYSByb3dyZXEgY29udGV4dCwKKyAgICAgKiBzZXQgdGhlIGluZGV4KGVzKSBbYW5kIGRhdGEsIG9wdGlvbmFsbHldIGFuZCBpbnNlcnQgaW50bworICAgICAqIHRoZSBjb250YWluZXIuCisgICAgICovCisKKyAgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKHpvbmVpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9zbmFyZl96b25laW5kZXhfZW50cnksCisgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIC8qCisgICAgICogZnJlZSB0aGUgY29udGFpbmVyLiB3ZSd2ZSBlaXRoZXIgY2xhaW1lZCBlYWNoIGVudHJ5LCBvciByZWxlYXNlZCBpdCwKKyAgICAgKiBzbyB0aGUgYWNjZXNzIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBjbGVhciB0aGUgY29udGFpbmVyLgorICAgICAqLworICAgIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9jb250YWluZXJfZnJlZSh6b25laW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMSk7CisKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVsdSByZWNvcmRzXG4iLCAodW5zaWduZWQgbG9uZylDT05UQUlORVJfU0laRShjb250YWluZXIpKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkICovCisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcikKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZTppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozODA6TTogRnJlZSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZSBjb250YWluZXIgZGF0YS4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUgKi8KKworLyoqCisgKiBwcmVwYXJlIHJvdyBmb3IgcHJvY2Vzc2luZy4KKyAqCisgKiAgV2hlbiB0aGUgYWdlbnQgaGFzIGxvY2F0ZWQgdGhlIHJvdyBmb3IgYSByZXF1ZXN0LCB0aGlzIGZ1bmN0aW9uIGlzCisgKiAgY2FsbGVkIHRvIHByZXBhcmUgdGhlIHJvdyBmb3IgcHJvY2Vzc2luZy4gSWYgeW91IGZ1bGx5IHBvcHVsYXRlZAorICogIHRoZSBkYXRhIGNvbnRleHQgZHVyaW5nIHRoZSBpbmRleCBzZXR1cCBwaGFzZSwgeW91IG1heSBub3QgbmVlZCB0bworICogIGRvIGFueXRoaW5nLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4IHBvaW50ZXIgdG8gYSBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgIDogb3RoZXIgZXJyb3IuCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X3ByZXAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwIiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93X3ByZXAgKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YV9hY2Nlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Zjk4ZTkxCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmgKQEAgLTAsMCArMSw3MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGFfYWNjZXNzLmggMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworI2lmbmRlZiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9EQVRBX0FDQ0VTU19ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0RBVEFfQUNDRVNTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICAgICAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAgICAgKiBPSUQ6IC4xLjMuNi4xLjIuMS40LjM2LCBsZW5ndGg6IDgKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRfZGF0YQorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZyk7CisKKworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NodXRkb3duKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHIpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworCisjZGVmaW5lIE1BWF9MSU5FX1NJWkUgMjU2CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19wcmVwKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0RBVEFfQUNDRVNTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2VudW1zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc5ZWM4OAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9lbnVtcy5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogIDogZ2VuZXJpYy10YWJsZS1lbnVtcy5tMmMgMTI1MjYgMjAwNS0wNy0xNSAyMjo0MToxNlogcnN0b3J5ICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZW51bXMuaCAxNDE3MCAyMDA3LTA0LTI5IDAwOjEyOjMyWiB2YXJ1bl9jJAorICovCisjaWZuZGVmIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0VOVU1TX0gKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRU5VTVNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIE5PVEVTIG9uIGVudW1zCisgICAgICogPT09PT09PT09PT09PT0KKyAgICAgKgorICAgICAqIFZhbHVlIE1hcHBpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tCisgICAgICogSWYgdGhlIHZhbHVlcyBmb3IgeW91ciBkYXRhIHR5cGUgZG9uJ3QgZXhhY3RseSBtYXRjaCB0aGUKKyAgICAgKiBwb3NzaWJsZSB2YWx1ZXMgZGVmaW5lZCBieSB0aGUgbWliLCB5b3Ugc2hvdWxkIG1hcCB0aGVtCisgICAgICogYmVsb3cuIEZvciBleGFtcGxlLCBhIGJvb2xlYW4gZmxhZyAoMS8wKSBpcyB1c3VhbGx5IHJlcHJlc2VudGVkCisgICAgICogYXMgYSBUcnV0aFZhbHVlIGluIGEgTUlCLCB3aGljaCBtYXBzIHRvIHRoZSB2YWx1ZXMgKDEvMikuCisgICAgICoKKyAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGVudW0gZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRU5VTVNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVmMjA4OGIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmMKQEAgLTAsMCArMSwxMTU0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQgCisgKgorICogJElkOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZS5jIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZS5oIgorCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2l6ZSwgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2dldCwgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBJUC1NSUI6OmlwdjZTY29wZVpvbmVJbmRleFRhYmxlIGlzIHN1YmlkIDM2IG9mIGlwLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuNC4zNiwgbGVuZ3RoOiA4CisgKi8KK3R5cGVkZWYgc3RydWN0IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKnVzZXJfY3R4OworCisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyB0YmxfaW5mbzsKKworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyBhY2Nlc3NfbXVsdGlwbGV4ZXI7CisKK30gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eDsKKworc3RhdGljIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHgKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHg7CisKK3N0YXRpYyB2b2lkICAgIAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0CisoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCk7CitzdGF0aWMgdm9pZCAgICAKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24KKyhpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KTsKK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKTsKK3N0YXRpYyB2b2lkCitfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKm1hZ2ljKTsKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9HRVQKK25ldHNubXBfY29udGFpbmVyICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9HRVQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9TRVQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb25fc2V0CisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKK3sKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKm9sZCA9CisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eDsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0NPTlRBSU5FUl9TSVpFCitpbnQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCit7CisgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jb250YWluZXIpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KKworLyoKKyAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcworICovCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29iamVjdF9sb29rdXA7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfdmFsdWVzOworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlIAorICogICAgKERlZmluZSBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQpCisgKi8KK3ZvaWQKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyLCB1X2xvbmcgZmxhZ3MpCit7CisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzICphY2Nlc3NfbXVsdGlwbGV4ZXIgPQorICAgICAgICAmaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmFjY2Vzc19tdWx0aXBsZXhlcjsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YmxfaW5mbyA9CisgICAgICAgICZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudGJsX2luZm87CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyOworICAgIGludCAgICAgICAgICAgICBtZmRfbW9kZXMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZSIsICJjYWxsZWRcbiIpKTsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNhdmUgaW50ZXJmYWNlIGNvbnRleHQgZm9yIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlCisgICAgICovCisgICAgLyoKKyAgICAgKiBTZXR0aW5nIHVwIHRoZSB0YWJsZSdzIGRlZmluaXRpb24KKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YmxfaW5mbywgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBpbmRleDogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOworCisgICAgLyoKKyAgICAgKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcworICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAorICAgICAqLworICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUlOX0NPTDsKKyAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01BWF9DT0w7CisKKyAgICAvKgorICAgICAqIHNhdmUgdXNlcnMgY29udGV4dAorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IHJlZ19wdHI7CisKKyAgICAvKgorICAgICAqIGNhbGwgZGF0YSBhY2Nlc3MgaW5pdGlhbGl6YXRpb24gY29kZQorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRfZGF0YShyZWdfcHRyKTsKKworICAgIC8qCisgICAgICogc2V0IHVwIHRoZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2luaXQKKyAgICAgICAgKCZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBpbml0aWFsaXplIGNvbnRhaW5lciBmb3IgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBhY2Nlc3NfbXVsdGlwbGV4ZXI6IFJFUVVJUkVEIHdyYXBwZXIgZm9yIGdldCByZXF1ZXN0IGhhbmRsaW5nCisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3RfbG9va3VwID0KKyAgICAgICAgX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9CisgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wcmVfcmVxdWVzdCA9CisgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3Q7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgPQorICAgICAgICBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIENyZWF0ZSBhIHJlZ2lzdHJhdGlvbiwgc2F2ZSBvdXIgcmVnIGRhdGEsIHJlZ2lzdGVyIHRhYmxlLgorICAgICAqLworICAgIERFQlVHTVNHVEwoKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZTppbml0X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlIiwKKyAgICAgICAgICAgICAgICAiUmVnaXN0ZXJpbmcgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgYXMgYSBtaWJzLWZvci1kdW1taWVzIHRhYmxlLlxuIikpOworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2JhYnlfc3RlcHNfYWNjZXNzX211bHRpcGxleGVyX2dldChhY2Nlc3NfbXVsdGlwbGV4ZXIpOworICAgIHJlZ2luZm8gPQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZSgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJlZ2luZm8tPm15X3JlZ192b2lkID0gJmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eDsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzZXQgdXAgYmFieSBzdGVwcyBoYW5kbGVyLCBjcmVhdGUgaXQgYW5kIGluamVjdCBpdAorICAgICAqLworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnByZV9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BSRV9SRVFVRVNUOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfSVJSRVZFUlNJQkxFX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5vYmplY3Rfc3ludGF4X2NoZWNrcykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DSEVDS19PQkpFQ1Q7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fU0VUVVA7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ0xFQU5VUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRTOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cm93X2NyZWF0aW9uKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1JPV19DUkVBVEU7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29uc2lzdGVuY3lfY2hlY2tzKQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NIRUNLX0NPTlNJU1RFTkNZOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IHJvd19tZXJnZSBoZWxwZXIgd2l0aCBwcmVmaXggcm9vdG9pZF9sZW4gKyAyIChlbnRyeS5jb2wpCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMik7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBpbmplY3QgY29udGFpbmVyX3RhYmxlIGhlbHBlcgorICAgICAqLworICAgIGhhbmRsZXIgPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9oYW5kbGVyX2dldCh0YmxfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgIAorICAgIGlmIChOVUxMICE9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC5jYWNoZSkgeworICAgICAgICBoYW5kbGVyID0KKyAgICAgICAgICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmNhY2hlKTsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHRhYmxlCisgICAgICovCisgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWdpbmZvLCB0YmxfaW5mbyk7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUKKyAqLwordm9pZAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3NodXRkb3duX2ludGVyZmFjZQorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24KKyAgICAgICAgKCZpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgpOworfQorCit2b2lkCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvICp2YykKK3sKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pZl9jdHgudGJsX2luZm8udmFsaWRfY29sdW1ucyA9IHZjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV92YWxpZF9jb2x1bW5zX3NldCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogY29udmVydCB0aGUgaW5kZXggY29tcG9uZW50IHN0b3JlZCBpbiB0aGUgY29udGV4dCB0byBhbiBvaWQKKyAqLworaW50CitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbmRleF90b19vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfbWliX2luZGV4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQoreworICAgIGludCAgICAgICAgICAgICBlcnIgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgLyoKKyAgICAgKiB0ZW1wIHN0b3JhZ2UgZm9yIHBhcnNpbmcgaW5kZXhlcworICAgICAqLworICAgIC8qCisgICAgICogaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCgxKS9JbnRlcmZhY2VJbmRleC9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL2Evdy9lL1IvZC9ICisgICAgICovCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0IHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4LCAweDAwLAorICAgICAgICAgICBzaXplb2YodmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpKTsKKyAgICB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KDEpL0ludGVyZmFjZUluZGV4L0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvYS93L2UvUi9kL0ggCisgICAgICovCisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihtaWJfaWR4LT5pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KSk7CisKKworICAgIGVyciA9IGJ1aWxkX29pZF9ub2FsbG9jKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwgJm9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwLCAmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X3RvX29pZCAqLworCisvKioKKyAqIGV4dHJhY3QgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgaW5kZXhlcyBmcm9tIGEgbmV0c25tcF9pbmRleAorICoKKyAqIEByZXR2YWwgU05NUF9FUlJfTk9FUlJPUiAgOiBubyBlcnJvcgorICogQHJldHZhbCBTTk1QX0VSUl9HRU5FUlIgICA6IGVycm9yCisgKi8KK2ludAoraXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleElmSW5kZXgoMSkvSW50ZXJmYWNlSW5kZXgvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9hL3cvZS9SL2QvSAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleCwgMHgwMCwKKyAgICAgICAgICAgc2l6ZW9mKHZhcl9pcHY2U2NvcGVab25lSW5kZXhJZkluZGV4KSk7CisgICAgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgubmV4dF92YXJpYWJsZSA9IE5VTEw7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBwYXJzZSB0aGUgb2lkIGludG8gdGhlIGluZGl2aWR1YWwgaW5kZXggY29tcG9uZW50cworICAgICAqLworICAgIGVyciA9IHBhcnNlX29pZF9pbmRleGVzKG9pZF9pZHgtPm9pZHMsIG9pZF9pZHgtPmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpOworICAgIGlmIChlcnIgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IG91dCB2YWx1ZXMKKyAgICAgICAgICovCisgICAgICAgIG1pYl9pZHgtPmlwdjZTY29wZVpvbmVJbmRleElmSW5kZXggPQorICAgICAgICAgICAgKigobG9uZyAqKSB2YXJfaXB2NlNjb3BlWm9uZUluZGV4SWZJbmRleC52YWwuc3RyaW5nKTsKKworCisgICAgfQorCisgICAgLyoKKyAgICAgKiBwYXJzaW5nIG1heSBoYXZlIGFsbG9jYXRlZCBtZW1vcnkuIGZyZWUgaXQuCisgICAgICovCisgICAgc25tcF9yZXNldF92YXJfYnVmZmVycygmdmFyX2lwdjZTY29wZVpvbmVJbmRleElmSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfZnJvbV9vaWQgKi8KKworCisvKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogQGludGVybmFsCisgKiBhbGxvY2F0ZSByZXNvdXJjZXMgZm9yIGEgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eAorICovCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZGF0YSAqZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCk7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBtZW1vcnkgZm9yIGEgIgorICAgICAgICAgICAgICAgICAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eC5cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSBkYXRhKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogdHJhY2sgaWYgd2UgZ290IGRhdGEgZnJvbSB1c2VyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyB8PSBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSOworICAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YSA9IGRhdGE7CisgICAgICAgIH0gZWxzZSBpZiAoTlVMTCA9PQorICAgICAgICAgICAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhID0KKyAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfZGF0YSgpKSkgeworICAgICAgICAgICAgU05NUF9GUkVFKHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9kYXRhX2xpc3QgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBhbGxvY2F0ZWQgZGF0YSwgY2FsbCBpbml0IHJvdXRpbmUKKyAgICAgKi8KKyAgICBpZiAoIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkgeworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9CisgICAgICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4X2luaXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgcm93cmVxX2N0eCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gcm93cmVxX2N0eDsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCAqLworCisvKgorICogQGludGVybmFsCisgKiByZWxlYXNlIHJlc291cmNlcyBmb3IgYSBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cChyb3dyZXFfY3R4KTsKKyAgICAvKgorICAgICAqIGZvciBub24tdHJhbnNpZW50IGRhdGEsIGRvbid0IGZyZWUgZGF0YSB3ZSBnb3QgZnJvbSB0aGUgdXNlcgorICAgICAqLworICAgIGlmICgocm93cmVxX2N0eC0+ZGF0YSkgJiYKKyAgICAgICAgIShyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RBVEFfRlJPTV9VU0VSKSkKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9kYXRhKHJvd3JlcV9jdHgtPmRhdGEpOworCisKKyAgICAvKgorICAgICAqIGZyZWUgaW5kZXggb2lkIHBvaW50ZXIKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzICE9IHJvd3JlcV9jdHgtPm9pZF90bXApCisgICAgICAgIGZyZWUocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzKTsKKworICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpbnQKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoMSAhPSBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJza2lwcGluZyBhZGRpdGlvbmFsIHByZV9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcHJlX3JlcXVlc3QKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2lmX2N0eC51c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ByZV9yZXF1ZXN0XG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKyAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcmVsZWFzZSByb3cgY29udGV4dCwgaWYgZGVsZXRlZAorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4ICYmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RFTEVURUQpKQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIHdhaXQgZm9yIGxhc3QgY2FsbCBiZWZvcmUgY2FsbGluZyB1c2VyCisgICAgICovCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2xhc3QocmVnaW5mbywgYWd0cmVxX2luZm8pKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsCisgICAgICAgICAgICAgICAgICAgICJ3YWl0aW5nIGZvciBsYXN0IHBvc3RfcmVxdWVzdFxuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICBwYWNrZXRfcmMgPSBuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcihhZ3RyZXFfaW5mby0+YXNwLCAwKTsKKyAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Bvc3RfcmVxdWVzdAorICAgICAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LnVzZXJfY3R4LCBwYWNrZXRfcmMpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAvKgorICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9wb3N0X3JlcXVlc3RcbiIsIHJjKSk7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiB3cmFwcGVyCisgKi8KK3N0YXRpYyBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXgobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyY19wdHIpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggbWliX2lkeDsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfZnJvbV9pbmRleCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJjX3B0cikKKyAgICAgICAgcmNfcHRyID0gJnJjOworICAgICpyY19wdHIgPSBNRkRfU1VDQ0VTUzsKKworICAgIG1lbXNldCgmbWliX2lkeCwgMHgwLCBzaXplb2YobWliX2lkeCkpOworCisgICAgLyoKKyAgICAgKiB0cnkgdG8gcGFyc2Ugb2lkCisgICAgICovCisgICAgKnJjX3B0ciA9IGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2luZGV4X2Zyb21fb2lkKG9pZF9pZHgsICZtaWJfaWR4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gKnJjX3B0cikgeworICAgICAgICBERUJVR01TR1QoKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIsICJlcnJvciBwYXJzaW5nIGluZGV4XG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogYWxsb2NhdGUgbmV3IGNvbnRleHQKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4ID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eChOVUxMLCBOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgICpyY19wdHIgPSBNRkRfRVJST1I7CisgICAgICAgIHJldHVybiBOVUxMOyAgICAgICAgICAgIC8qIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworICAgIH0KKworICAgIG1lbWNweSgmcm93cmVxX2N0eC0+dGJsX2lkeCwgJm1pYl9pZHgsIHNpemVvZihtaWJfaWR4KSk7CisKKworICAgIC8qCisgICAgICogY29weSBpbmRleGVzCisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBvaWRfaWR4LT5sZW47CisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcywgb2lkX2lkeC0+b2lkcywKKyAgICAgICAgICAgb2lkX2lkeC0+bGVuICogc2l6ZW9mKG9pZCkpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9vYmplY3RfbG9va3VwKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCopCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGdldCBvdXIgY29udGV4dCBmcm9tIG1mZAorICAgICAqIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKmlmX2N0eCA9CisgICAgICogICAgICAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRibHJlcV9pbmZvOworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKworICAgICAgICB0YmxyZXFfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdGJscmVxX2luZm8pIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJyZXF1ZXN0IGhhZCBubyB0YWJsZSBpbmZvXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiB0cnkgY3JlYXRlIHJvd3JlcQorICAgICAgICAgKi8KKyAgICAgICAgb2lkX2lkeC5vaWRzID0gdGJscmVxX2luZm8tPmluZGV4X29pZDsKKyAgICAgICAgb2lkX2lkeC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKKworICAgICAgICByb3dyZXFfY3R4ID0KKyAgICAgICAgICAgIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2Zyb21faW5kZXgoJm9pZF9pZHgsICZyYyk7CisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgeworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyB8PSBNRkRfUk9XX0NSRUFURUQ7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogYWRkIHJvd3JlcV9jdHggdG8gcmVxdWVzdCBkYXRhIGxpc3RzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQocmVxdWVzdHMsIChuZXRzbm1wX2luZGV4ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgICAgICB9CisKKyAgICB9CisKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCByYyk7CisgICAgZWxzZQorICAgICAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dfcHJlcChyb3dyZXFfY3R4KTsKKworICAgIHJldHVybiBTTk1QX1ZBTElEQVRFX0VSUihyYyk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2JqZWN0X2xvb2t1cCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtbihpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW4iLCAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbCgyKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYTElOS0xPQ0FMOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleExpbmtMb2NhbF9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4MygzKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYMzoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXgzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4QWRtaW5Mb2NhbCg0KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQURNSU5MT0NBTDoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhBZG1pbkxvY2FsX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsKDUpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhTSVRFTE9DQUw6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4U2l0ZUxvY2FsX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXg2KDYpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVg2OgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleDZfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXg3KDcpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVg3OgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleDdfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhPcmdhbml6YXRpb25Mb2NhbCg4KS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYT1JHQU5JWkFUSU9OTE9DQUw6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4T3JnYW5pemF0aW9uTG9jYWxfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleDkoOSkvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDk6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4OV9nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleEEoMTApL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhBOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleEFfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBpcHY2U2NvcGVab25lSW5kZXhCKDExKS9JbmV0Wm9uZUluZGV4L0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvSCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQjoKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9VTlNJR05FRDsKKyAgICAgICAgcmMgPSBpcHY2U2NvcGVab25lSW5kZXhCX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaXB2NlNjb3BlWm9uZUluZGV4QygxMikvSW5ldFpvbmVJbmRleC9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL0ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEM6CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fVU5TSUdORUQ7CisgICAgICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4Q19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlwdjZTY29wZVpvbmVJbmRleEQoMTMpL0luZXRab25lSW5kZXgvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9IIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhEOgorICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX1VOU0lHTkVEOworICAgICAgICByYyA9IGlwdjZTY29wZVpvbmVJbmRleERfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9NSU5fQ09MIDw9IGNvbHVtbgorICAgICAgICAgICAgJiYgY29sdW1uIDw9IElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX01BWF9DT0wpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF9jb2x1bW4iLCAiYXNzdW1lIGNvbHVtbiAlZCBpcyByZXNlcnZlZFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByYyA9IE1GRF9TS0lQOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfZ2V0X3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4KikKKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CisgICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAodm9pZCAqKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X21mZF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfdmFsdWVzIiwgImNhbGxlZFxuIikpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2F2ZSBvbGQgcG9pbnRlciwgc28gd2UgY2FuIGZyZWUgaXQgaWYgcmVwbGFjZWQKKyAgICAgICAgICovCisgICAgICAgIG9sZF9zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nOworICAgICAgICBkYXRhRnJlZUhvb2sgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5kYXRhRnJlZUhvb2s7CisgICAgICAgIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWY7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfSBlbHNlIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYgPT0KKyAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihyZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpKQorICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9nZXRfY29sdW1uKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChyYykgeworICAgICAgICAgICAgaWYgKE1GRF9TS0lQID09IHJjKSB7CisgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKE5VTEwgPT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5VTEwgdmFyYmluZCBkYXRhIHBvaW50ZXIhXG4iKTsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgdGhlIGJ1ZmZlciB3YXNuJ3QgdXNlZCBwcmV2aW91c2x5IGZvciB0aGUgb2xkIGRhdGEgKGkuZS4gaXQKKyAgICAgICAgICogd2FzIGFsbGNvYXRlZCBtZW1vcnkpICBhbmQgdGhlIGdldCByb3V0aW5lIHJlcGxhY2VkIHRoZSBwb2ludGVyLAorICAgICAgICAgKiB3ZSBuZWVkIHRvIGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgICAgICAgICAqLworICAgICAgICBpZiAob2xkX3N0cmluZyAmJiAob2xkX3N0cmluZyAhPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5idWYpICYmCisgICAgICAgICAgICAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZyAhPSBvbGRfc3RyaW5nKSkgeworICAgICAgICAgICAgaWYgKGRhdGFGcmVlSG9vaykKKyAgICAgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykgKG9sZF9zdHJpbmcpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGZyZWUob2xkX3N0cmluZyk7CisgICAgICAgIH0KKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlc3VsdHMgKi8KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2dldF92YWx1ZXMgKi8KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBTRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIFNFVCBQUk9DRVNTSU5HIE5PVCBBUFBMSUNBQkxFIChwZXIgTUlCIG9yIHVzZXIgc2V0dGluZykKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogREFUQSBBQ0NFU1MKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9pdGVtX2ZyZWUoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfY29udGFpbmVyX2l0ZW1fZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY29udGFpbmVyX2l0ZW1fZnJlZSAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICogY29udGFpbmVyKQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcHY2U2NvcGVab25lSW5kZXhUYWJsZTpfY29udGFpbmVyX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjb250YWluZXIgaW4gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjYWxsIHVzZXIgY29kZQorICAgICAqLworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIGZyZWUgYWxsIGl0ZW1zLiBpbmVmZmljaWVudCwgYnV0IGVhc3kuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9jb250YWluZXJfaXRlbV9mcmVlLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBpbml0aWFsaXplIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0CisgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwdjZTY29wZVpvbmVJbmRleFRhYmxlOl9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfaW5pdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY29udGFpbmVyIGluaXQKKyAgICAgKi8KKyAgICBpZl9jdHgtPmNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY2FjaGVfbG9hZCwgX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkX3NpemUpOworCisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIGlwU2NvcGVab25lSW5kZXhUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0KCZpZl9jdHgtPmNvbnRhaW5lciwgaWZfY3R4LT5jYWNoZSk7CisgICAgaWYgKE5VTEwgPT0gaWZfY3R4LT5jb250YWluZXIpIHsKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZAorICAgICAgICAgICAgKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICAgICAgaWZfY3R4LT5jb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0KKyAgICAgICAgICAgICAgICAgc3RyZHVwKCJpcHY2U2NvcGVab25lSW5kZXhUYWJsZSIpOworICAgIH0KKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKKyAgICAgICAgICAgICAgICAgImlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoTlVMTCAhPSBpZl9jdHgtPmNhY2hlKQorICAgICAgICBpZl9jdHgtPmNhY2hlLT5tYWdpYyA9ICh2b2lkICopIGlmX2N0eC0+Y29udGFpbmVyOworCisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9pbml0ICovCisKKy8qKgorICogQGludGVybmFsCisgKiBzaHV0ZG93biB0aGUgY29udGFpbmVyIHdpdGggZnVuY3Rpb25zIG9yIHdyYXBwZXJzCisgKi8KK3ZvaWQKK19pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24KKyAgICAoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6aXB2NlNjb3BlWm9uZUluZGV4VGFibGU6X2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihpZl9jdHgtPmNvbnRhaW5lcik7CisKKyAgICBfY29udGFpbmVyX2ZyZWUoaWZfY3R4LT5jb250YWluZXIpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KKworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfRVhURVJOQUxfQUNDRVNTCitpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICoKK2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAorICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KQoreworICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX09JRF9MRU5dOworICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIC8qCisgICAgICogc2V0IHVwIHN0b3JhZ2UgZm9yIE9JRAorICAgICAqLworICAgIG9pZF9pZHgub2lkcyA9IG9pZF90bXA7CisgICAgb2lkX2lkeC5sZW4gPSBzaXplb2Yob2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKworICAgIC8qCisgICAgICogY29udmVydAorICAgICAqLworICAgIHJjID0gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkKCZvaWRfaWR4LCBtaWJfaWR4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcm93cmVxX2N0eCA9IChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4KikKKyAgICAgICAgQ09OVEFJTkVSX0ZJTkQoaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KKworc3RhdGljIGludAorX2NhY2hlX2xvYWQobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmlwU2NvcGVab25lSW5kZXhUYWJsZTpfY2FjaGVfbG9hZCIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiaW52YWxpZCBjYWNoZSBmb3IgaXBTY29wZVpvbmVJbmRleFRhYmxlX2NhY2hlX2xvYWRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIC8qKiBzaG91bGQgb25seSBiZSBjYWxsZWQgZm9yIGFuIGludmFsaWQgb3IgZXhwaXJlZCBjYWNoZSAqLworICAgIG5ldHNubXBfYXNzZXJ0KCgwID09IGNhY2hlLT52YWxpZCkgfHwgKDEgPT0gY2FjaGUtPmV4cGlyZWQpKTsKKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNvZGUKKyAgICAgKi8KKyAgICByZXR1cm4gaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2xvYWQoKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hZ2ljKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NhY2hlX2xvYWQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDppcFNjb3BlWm9uZUluZGV4VGFibGU6X2NhY2hlX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY2FjaGUgaW4gaXBTY29wZVpvbmVJbmRleFRhYmxlX2NhY2hlX2ZyZWVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT5tYWdpYzsKKworICAgIF9jb250YWluZXJfZnJlZShjb250YWluZXIpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfZnJlZSAqLworCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmggYi9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2ZjMzEwOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL2lwLW1pYi9pcHY2U2NvcGVab25lSW5kZXhUYWJsZS9pcHY2U2NvcGVab25lSW5kZXhUYWJsZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW50ZXJmYWNlLmggMTQxNzAgMjAwNy0wNC0yOSAwMDoxMjozMlogdmFydW5fYyQKKyAqLworLyoqIEBpbmdyb3VwIGludGVyZmFjZTogUm91dGluZXMgdG8gaW50ZXJmYWNlIHRvIE5ldC1TTk1QCisgKgorICogXHdhcm5pbmcgVGhpcyBjb2RlIHNob3VsZCBub3QgYmUgbW9kaWZpZWQsIGNhbGxlZCBkaXJlY3RseSwKKyAqICAgICAgICAgIG9yIHVzZWQgdG8gaW50ZXJwcmV0IGZ1bmN0aW9uYWxpdHkuIEl0IGlzIHN1YmplY3QgdG8KKyAqICAgICAgICAgIGNoYW5nZSBhdCBhbnkgdGltZS4KKyAqIAorICogQHsKKyAqLworLyoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRISVMgRklMRSBET0VTIE5PVCBDT05UQUlOIEFOWSBVU0VSIEVESVRBQkxFIENPREUuICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgIFRIRSBHRU5FUkFURUQgQ09ERSBJUyBJTlRFUk5BTCBJTVBMRU1FTlRBVElPTiwgQU5EICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgIElTIFNVQkpFQ1QgVE8gQ0hBTkdFIFdJVEhPVVQgV0FSTklORyBJTiBGVVRVUkUgUkVMRUFTRVMuICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisjaWZuZGVmIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0lOVEVSRkFDRV9ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX0lOVEVSRkFDRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworCisjaW5jbHVkZSAiaXB2NlNjb3BlWm9uZUluZGV4VGFibGUuaCIKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUYWJsZSBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKworICAgIC8qCisgICAgICogUFVCTElDIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiByb3V0aW5lIAorICAgICAqLworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY3R4LCB1X2xvbmcgZmxhZ3MpOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBfaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfc2h1dGRvd25faW50ZXJmYWNlCisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24gKiB1c2VyX2N0eCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQKKyAgICAgICAgKGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZyk7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX2dldCh2b2lkKTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfY29udGFpbmVyX3NpemUodm9pZCk7CisKKyAgICBpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICppcHY2U2NvcGVab25lSW5kZXhUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX2RhdGEgKiwgdm9pZCAqKTsKKyAgICB2b2lkICAgICAgICAgICAKKyAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4CisgICAgICAgIChpcHY2U2NvcGVab25lSW5kZXhUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKKyAgICBpbnQgICAgICAgICAgICAgaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX21pYl9pbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworCisgICAgLyoKKyAgICAgKiBhY2Nlc3MgdG8gY2VydGFpbiBpbnRlcm5hbHMuIHVzZSB3aXRoIGNhdXRpb24hCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGlwdjZTY29wZVpvbmVJbmRleFRhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9JTlRFUkZBQ0VfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9pcC1taWIvaXB2NlNjb3BlWm9uZUluZGV4VGFibGUvaXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkcy5oIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRkYWEyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvaXAtbWliL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlL2lwdjZTY29wZVpvbmVJbmRleFRhYmxlX29pZHMuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IGdlbmVyaWMtdGFibGUtb2lkcy5tMmMgMTI4NTUgMjAwNS0wOS0yNyAxNTo1NjowOFogcnN0b3J5ICQKKyAqCisgKiAkSWQ6aXB2NlNjb3BlWm9uZUluZGV4VGFibGVfb2lkcy5oIDE0MTcwIDIwMDctMDQtMjkgMDA6MTI6MzJaIHZhcnVuX2MkCisgKi8KKyNpZm5kZWYgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfT0lEU19ICisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX09JRFNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgaXB2NlNjb3BlWm9uZUluZGV4VGFibGUgCisgICAgICovCisjZGVmaW5lIElQVjZTQ09QRVpPTkVJTkRFWFRBQkxFX09JRCAgICAgICAgICAgICAgMSwzLDYsMSwyLDEsNCwzNgorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhJRklOREVYICAgICAgICAgMQorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhMSU5LTE9DQUwgICAgICAgICAyCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDMgICAgICAgICAzCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEFETUlOTE9DQUwgICAgICAgICA0CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWFNJVEVMT0NBTCAgICAgICAgIDUKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYNiAgICAgICAgIDYKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYNyAgICAgICAgIDcKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYT1JHQU5JWkFUSU9OTE9DQUwgICAgICAgICA4CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWDkgICAgICAgICA5CisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEEgICAgICAgICAxMAorCisjZGVmaW5lIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhCICAgICAgICAgMTEKKworI2RlZmluZSBDT0xVTU5fSVBWNlNDT1BFWk9ORUlOREVYQyAgICAgICAgIDEyCisKKyNkZWZpbmUgQ09MVU1OX0lQVjZTQ09QRVpPTkVJTkRFWEQgICAgICAgICAxMworCisKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUlOX0NPTCAgIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhMSU5LTE9DQUwKKyNkZWZpbmUgSVBWNlNDT1BFWk9ORUlOREVYVEFCTEVfTUFYX0NPTCAgIENPTFVNTl9JUFY2U0NPUEVaT05FSU5ERVhECisKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY2U0NPUEVaT05FSU5ERVhUQUJMRV9PSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYyBiL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuYwppbmRleCA2YTNiODEyLi4zMzFlZTZkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5jCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSA8a3N0YXQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgogCiAjaW5jbHVkZSA8c3lzL3NvY2tpby5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KQEAgLTEwMywxMiArMTA0LDI5IEBACiAgICAge01JQl9UUkFOU01JU1NJT04sIDAsICh2b2lkICopIC0xLCAwLCAwLCAwLCAwfSwKICAgICB7TUlCX1NOTVAsIDAsICh2b2lkICopIC0xLCAwLCAwLCAwLCAwfSwKICNpZmRlZiBTT0xBUklTX0hBVkVfSVBWNl9NSUJfU1VQUE9SVAorI2lmZGVmIFNPTEFSSVNfSEFWRV9SRkM0MjkzX1NVUFBPUlQKKyAgICB7TUlCX0lQX1RSQUZGSUNfU1RBVFMsIDIwICogc2l6ZW9mKG1pYjJfaXBJZlN0YXRzRW50cnlfdCksICh2b2lkICopLTEsIDAsCisgICAgIDMwLCAwLCAwfSwKKyAgICB7TUlCX0lQNiwgMjAgKiBzaXplb2YobWliMl9pcElmU3RhdHNFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgMzAsIDAsIDB9LAorI2Vsc2UKKyAgICB7TUlCX0lQNiwgMjAgKiBzaXplb2YobWliMl9pcHY2SWZTdGF0c0VudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCAzMCwgMCwgMH0sCisjZW5kaWYKICAgICB7TUlCX0lQNl9BRERSLCAyMCAqIHNpemVvZihtaWIyX2lwdjZBZGRyRW50cnlfdCksICh2b2lkICopLTEsIDAsIDMwLCAwLCAwfSwKKyAgICB7TUlCX0lQNl9ST1VURSwgMjAwICogc2l6ZW9mKG1pYjJfaXB2NkFkZHJFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwgMzAsIDAsIDB9LAorICAgIHtNSUJfSUNNUDYsIDIwICogc2l6ZW9mKG1pYjJfaXB2NklmSWNtcEVudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCAzMCwgMCwgMH0sCiAgICAge01JQl9UQ1A2X0NPTk4sIDEwMDAgKiBzaXplb2YobWliMl90Y3A2Q29ubkVudHJ5X3QpLCAodm9pZCAqKSAtMSwgMCwgMzAsCiAgICAgIDAsIDB9LAogICAgIHtNSUJfVURQNl9FTkRQT0lOVCwgMTAwMCAqIHNpemVvZihtaWIyX3VkcDZFbnRyeV90KSwgKHZvaWQgKikgLTEsIDAsIDMwLAogICAgICAwLCAwfSwKICNlbmRpZgorI2lmZGVmIE1JQjJfU0NUUAorICAgIHtNSUJfU0NUUCwgc2l6ZW9mKG1pYjJfc2N0cF90KSwgKHZvaWQgKiktMSwgMCwgNjAsIDAsIDB9LAorICAgIHtNSUJfU0NUUF9DT05OLCBzaXplb2YobWliMl9zY3RwQ29ubkVudHJ5X3QpLCAodm9pZCAqKS0xLCAwLCA2MCwgMCwgMH0sCisgICAge01JQl9TQ1RQX0NPTk5fTE9DQUwsIHNpemVvZihtaWIyX3NjdHBDb25uTG9jYWxFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwKKyAgICAgNjAsIDAsIDB9LAorICAgIHtNSUJfU0NUUF9DT05OX1JFTU9URSwgc2l6ZW9mKG1pYjJfc2N0cENvbm5SZW1vdGVFbnRyeV90KSwgKHZvaWQgKiktMSwgMCwKKyAgICAgNjAsIDAsIDB9LAorI2VuZGlmCiAgICAgezB9LAogfTsKIApAQCAtMTMxLDEwICsxNDksMjIgQEAKICAgICB7TUlCMl9UUkFOU01JU1NJT04sIDAsfSwKICAgICB7TUlCMl9TTk1QLCAwLH0sCiAjaWZkZWYgU09MQVJJU19IQVZFX0lQVjZfTUlCX1NVUFBPUlQKKyNpZmRlZiBTT0xBUklTX0hBVkVfUkZDNDI5M19TVVBQT1JUCisgICAge01JQjJfSVAsIE1JQjJfSVBfVFJBRkZJQ19TVEFUU30sCisjZW5kaWYKKyAgICB7TUlCMl9JUDYsIDB9LAogICAgIHtNSUIyX0lQNiwgTUlCMl9JUDZfQUREUn0sCisgICAge01JQjJfSVA2LCBNSUIyX0lQNl9ST1VURX0sCisgICAge01JQjJfSUNNUDYsIDB9LAogICAgIHtNSUIyX1RDUDYsIE1JQjJfVENQNl9DT05OfSwKICAgICB7TUlCMl9VRFA2LCBNSUIyX1VEUDZfRU5UUll9LAogI2VuZGlmCisjaWZkZWYgTUlCMl9TQ1RQCisgICAge01JQjJfU0NUUCwgMH0sCisgICAge01JQjJfU0NUUCwgTUlCMl9TQ1RQX0NPTk59LAorICAgIHtNSUIyX1NDVFAsIE1JQjJfU0NUUF9DT05OX0xPQ0FMfSwKKyAgICB7TUlCMl9TQ1RQLCBNSUIyX1NDVFBfQ09OTl9SRU1PVEV9LAorI2VuZGlmCiAgICAgezB9LAogfTsKIApAQCAtMTQ5LDcgKzE3OSw3IEBACiAgICAgICAgICB2b2lkICpyZXNwLCBpbnQgKCpjb21wKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKIHN0YXRpYyBpbnQKLWdldG1pYihpbnQgZ3JvdXBuYW1lLCBpbnQgc3ViZ3JvdXBuYW1lLCB2b2lkICpzdGF0YnVmLCBzaXplX3Qgc2l6ZSwKK2dldG1pYihpbnQgZ3JvdXBuYW1lLCBpbnQgc3ViZ3JvdXBuYW1lLCB2b2lkICoqc3RhdGJ1Ziwgc2l6ZV90ICpzaXplLAogICAgICAgIHNpemVfdCBlbnRyeXNpemUsIHJlcV9lIHJlcV90eXBlLCB2b2lkICpyZXNwLCBzaXplX3QgKmxlbmd0aCwKICAgICAgICBpbnQgKCpjb21wKSh2b2lkICosIHZvaWQgKiksIHZvaWQgKmFyZyk7CiAKQEAgLTIxNCw3ICsyNDQsNyBAQAogCiAgICAgZm9yIChpID0gMDsgaSA8IE1JQkNBQ0hFX1NJWkU7IGkrKykgewogCURFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgImNhY2hlWyVkXSB0aW1lICVsZCB0dGwgJWRcbiIsIGksCi0JCSAgICBNaWJjYWNoZVtpXS5jYWNoZV90aW1lLCBNaWJjYWNoZVtpXS5jYWNoZV90dGwpKTsKKwkJICAgIE1pYmNhY2hlW2ldLmNhY2hlX3RpbWUsIChpbnQpTWliY2FjaGVbaV0uY2FjaGVfdHRsKSk7CiAJaWYgKE1pYmNhY2hlW2ldLmNhY2hlX3RpbWUgPCBwZXJpb2QpIHsKIAkgICAgTWliY2FjaGVbaV0uY2FjaGVfdGltZSA9IDA7CiAJfSBlbHNlIHsKQEAgLTM0OCw3ICszNzgsOCBAQAogICAgIGtzdGF0X2N0bF90ICAgICprc2M7CiAgICAga3N0YXRfdCAgICAgICAgKmtzLCAqa3N0YXRfZGF0YTsKICAgICBrc3RhdF9uYW1lZF90ICAqZDsKLSAgICBzaXplX3QgICAgICAgICAgaSwgaW5zdGFuY2U7CisgICAgdWludF90ICAgICAgICAgIGk7CisgICAgaW50ICAgICAgICAgICAgIGluc3RhbmNlID0gMDsKICAgICBjaGFyICAgICAgICAgICAgbW9kdWxlX25hbWVbNjRdOwogICAgIGludCAgICAgICAgICAgICByZXQ7CiAgICAgdV9sb25nbG9uZ190ICAgIHZhbDsgICAgLyogVGhlIGxhcmdlc3QgdmFsdWUgKi8KQEAgLTQ1NSwxMSArNDg2LDExIEBACiAJCWJyZWFrOwogCSAgICBjYXNlIEtTVEFUX0RBVEFfSU5UNjQ6CiAJCSooaW50NjRfdCAqKXYgPSBkLT52YWx1ZS5pNjQ7Ci0JCURFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgInZhbHVlOiAlbGRcbiIsIGQtPnZhbHVlLmk2NCkpOworCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJ2YWx1ZTogJWxkXG4iLCAobG9uZylkLT52YWx1ZS5pNjQpKTsKIAkJYnJlYWs7CiAJICAgIGNhc2UgS1NUQVRfREFUQV9VSU5UNjQ6CiAJCSoodWludDY0X3QgKil2ID0gZC0+dmFsdWUudWk2NDsKLQkJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAidmFsdWU6ICVsdVxuIiwgZC0+dmFsdWUudWk2NCkpOworCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICJ2YWx1ZTogJWx1XG4iLCAodW5zaWduZWQgbG9uZylkLT52YWx1ZS51aTY0KSk7CiAJCWJyZWFrOwogI2Vsc2UKIAkgICAgY2FzZSBLU1RBVF9EQVRBX0xPTkc6CkBAIC01MTIsNyArNTQzLDcgQEAKICAgICBrc3RhdF9jdGxfdCAgICAqa3NjOwogICAgIGtzdGF0X3QgICAgICAgICprcywgKmtzdGF0X2RhdGE7CiAgICAga3N0YXRfbmFtZWRfdCAgKmQ7Ci0gICAgc2l6ZV90ICAgICAgICAgIGksIGluc3RhbmNlOworICAgIHNpemVfdCAgICAgICAgICBpLCBpbnN0YW5jZSA9IDA7CiAgICAgY2hhciAgICAgICAgICAgIG1vZHVsZV9uYW1lWzY0XTsKICAgICBpbnQgICAgICAgICAgICAgcmV0OwogCkBAIC02MzcsNyArNjY4LDcgQEAKICAgICAgKi8KIAogICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1IiwgImdldE1pYnN0YXQgKCVkLCAqLCAlZCwgJWQsICosICopXG4iLAotCQlncmlkLCBlbnRyeXNpemUsIHJlcV90eXBlKSk7CisJCWdyaWQsIChpbnQpZW50cnlzaXplLCByZXFfdHlwZSkpOwogICAgIGNhY2hlcCA9ICZNaWJjYWNoZVtncmlkXTsKICAgICBtaWJnciA9IE1pYm1hcFtncmlkXS5ncm91cDsKICAgICBtaWJ0YiA9IE1pYm1hcFtncmlkXS50YWJsZTsKQEAgLTY1NSw3ICs2ODYsNyBAQAogICAgIGNhY2hlX3ZhbGlkID0gKGNhY2hlcC0+Y2FjaGVfdGltZSA+IDApOwogCiAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCIuLi4gY2FjaGVfdmFsaWQgJWQgdGltZSAlbGQgdHRsICVkIG5vdyAlbGRcbiIsCi0JCWNhY2hlX3ZhbGlkLCBjYWNoZXAtPmNhY2hlX3RpbWUsIGNhY2hlcC0+Y2FjaGVfdHRsLAorCQljYWNoZV92YWxpZCwgY2FjaGVwLT5jYWNoZV90aW1lLCAoaW50KWNhY2hlcC0+Y2FjaGVfdHRsLAogCQl0aW1lKE5VTEwpKSk7CiAgICAgaWYgKGNhY2hlX3ZhbGlkKSB7CiAJLyoKQEAgLTY5OCw4ICs3MjksOCBAQAogCQkgICAgICAgY2FjaGVwLT5jYWNoZV9zaXplLCByZXFfdHlwZSwKIAkJICAgICAgIChtaWIyX2lmRW50cnlfdCAqKSAmIGVwLCAmbGVuZ3RoLCBjb21wLCBhcmcpOwogCX0gZWxzZSB7Ci0JICAgIHJjID0gZ2V0bWliKG1pYmdyLCBtaWJ0YiwgY2FjaGVwLT5jYWNoZV9hZGRyLAotCQkJY2FjaGVwLT5jYWNoZV9zaXplLCBlbnRyeXNpemUsIHJlcV90eXBlLCAmZXAsCisJICAgIHJjID0gZ2V0bWliKG1pYmdyLCBtaWJ0YiwgJihjYWNoZXAtPmNhY2hlX2FkZHIpLAorCQkJJihjYWNoZXAtPmNhY2hlX3NpemUpLCBlbnRyeXNpemUsIHJlcV90eXBlLCAmZXAsCiAJCQkmbGVuZ3RoLCBjb21wLCBhcmcpOwogCX0KIApAQCAtNzYyLDcgKzc5Myw3IEBACiAgICAgICAgICAqLwogICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsIAogICAgICAgICAgICAgImJhZCBjYWNoZSBsZW5ndGggJWQgLSBub3QgbXVsdGlwbGUgb2YgZW50cnkgc2l6ZSAlZFxuIiwgCi0gICAgICAgICAgICBsZW4sIGVudHJ5c2l6ZSkpOworICAgICAgICAgICAgKGludClsZW4sIChpbnQpZW50cnlzaXplKSk7CiAgICAgICAgIHJldHVybiBOT1RfRk9VTkQ7CiAgICAgfQogCkBAIC04NDEsNyArODcyLDcgQEAKICAqLwogCiBzdGF0aWMgaW50Ci1nZXRtaWIoaW50IGdyb3VwbmFtZSwgaW50IHN1Ymdyb3VwbmFtZSwgdm9pZCAqc3RhdGJ1Ziwgc2l6ZV90IHNpemUsCitnZXRtaWIoaW50IGdyb3VwbmFtZSwgaW50IHN1Ymdyb3VwbmFtZSwgdm9pZCAqKnN0YXRidWYsIHNpemVfdCAqc2l6ZSwKICAgICAgICBzaXplX3QgZW50cnlzaXplLCByZXFfZSByZXFfdHlwZSwgdm9pZCAqcmVzcCwKICAgICAgICBzaXplX3QgKmxlbmd0aCwgaW50ICgqY29tcCkodm9pZCAqLCB2b2lkICopLCB2b2lkICphcmcpCiB7CkBAIC04NTMsNiArODg0LDcgQEAKICAgICBzdHJ1Y3QgVF9lcnJvcl9hY2sgKnRlYSA9IChzdHJ1Y3QgVF9lcnJvcl9hY2sgKikgYnVmOwogICAgIHN0cnVjdCBvcHRoZHIgICpyZXE7CiAgICAgZm91bmRfZSAgICAgICAgIHJlc3VsdCA9IEZPVU5EOworICAgIHNpemVfdCBvbGRzaXplOwogCiAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAiLi4uLi4uIGdldG1pYiAoJWQsICVkLCAuLi4pXG4iLAogCQlncm91cG5hbWUsIHN1Ymdyb3VwbmFtZSkpOwpAQCAtOTY2LDIzICs5OTgsNDIgQEAKIAkgKiByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGdldG1zZyBjYWxscwogCSAqLwogCi0Jc3RyYnVmLmJ1ZiA9IHN0YXRidWY7Ci0Jc3RyYnVmLm1heGxlbiA9IHNpemU7CisJc3RyYnVmLmJ1ZiA9ICpzdGF0YnVmOworCXN0cmJ1Zi5tYXhsZW4gPSAqc2l6ZTsKIAlzdHJidWYubGVuID0gMDsKIAlmbGFncyA9IDA7CiAJZG8gewogCSAgICByYyA9IGdldG1zZyhzZCwgTlVMTCwgJnN0cmJ1ZiwgJmZsYWdzKTsKIAkgICAgc3dpdGNoIChyYykgewogCSAgICBjYXNlIC0xOgotCQlyYyA9IC1FTk9TUjsKKwkJcmV0ID0gLUVOT1NSOworCQlzbm1wX3BlcnJvcigiZ2V0bXNnIik7CiAJCWdvdG8gUmV0dXJuOwogCiAJICAgIGRlZmF1bHQ6Ci0JCXJjID0gLUVOT0RBVEE7CisJCXNubXBfbG9nKExPR19FUlIsICJrZXJuZWxfc3Vub3M1L2dldG1pYjogZ2V0bXNnIHJldHVybmVkICVkXG4iLCByYyk7CisJCXJldCA9IC1FTk9EQVRBOwogCQlnb3RvIFJldHVybjsKIAogCSAgICBjYXNlIE1PUkVEQVRBOgorCQlERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNSIsICIuLi4uLi4gZ2V0bWliIGluY3JlYXNlZCBidWZmZXIgc2l6ZVxuIikpOworCQlvbGRzaXplID0gKCBzdHJidWYuYnVmIC0gKGNoYXIgKikqc3RhdGJ1ZikgKyBzdHJidWYubGVuOworCQlzdHJidWYuYnVmID0gKGNoYXIgKilyZWFsbG9jKCpzdGF0YnVmLCBvbGRzaXplKzQwOTYpOworCQlpZihzdHJidWYuYnVmICE9IE5VTEwpIHsKKwkJICAgICpzdGF0YnVmID0gc3RyYnVmLmJ1ZjsKKwkJICAgICpzaXplID0gb2xkc2l6ZSArIDQwOTY7CisJCSAgICBzdHJidWYuYnVmID0gKGNoYXIgKikqc3RhdGJ1ZiArIG9sZHNpemU7CisJCSAgICBzdHJidWYubWF4bGVuID0gNDA5NjsKKwkJICAgIHJlc3VsdCA9IE5PVF9GT1VORDsKKwkJICAgIGJyZWFrOworCQl9CisJCXN0cmJ1Zi5idWYgPSAoY2hhciAqKSpzdGF0YnVmICsgKG9sZHNpemUgLSBzdHJidWYubGVuKTsKIAkgICAgY2FzZSAwOgorCQkvKiBmaXggYnVmZmVyIHRvIHJlYWwgc2l6ZSAmIHBvc2l0aW9uICovCisJCXN0cmJ1Zi5sZW4gKz0gc3RyYnVmLmJ1ZiAtIChjaGFyKikqc3RhdGJ1ZjsKKwkJc3RyYnVmLmJ1ZiA9ICpzdGF0YnVmOworCQlzdHJidWYubWF4bGVuID0gKnNpemU7CisKIAkJaWYgKHJlcV90eXBlID09IEdFVF9ORVhUICYmIHJlc3VsdCA9PSBORUVEX05FWFQpCiAJCSAgICAvKgogCQkgICAgICogRW5kIG9mIGJ1ZmZlciwgc28gIm5leHQiIGlzIHRoZSBmaXJzdCBpdGVtIGluIHRoZSBuZXh0CkBAIC05OTYsNiArMTA0Nyw4IEBACiAJICAgIH0KIAl9IHdoaWxlIChyYyA9PSBNT1JFREFUQSAmJiByZXN1bHQgIT0gRk9VTkQpOwogCisJREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczUiLCAiLi4uLi4uIGdldG1pYiBidWZmZXIgc2l6ZSBpcyAlZFxuIiwgKGludCkqc2l6ZSkpOworCiAJaWYgKHJlc3VsdCA9PSBGT1VORCkgeyAgICAgIC8qIFNlYXJjaCBpcyBzdWNjZXNzZnVsICovCiAJICAgIGlmIChyYyAhPSBNT1JFREFUQSkgewogCQlyZXQgPSAwOyAgICAvKiBGb3VuZCBhbmQgbm8gbW9yZSBkYXRhICovCkBAIC0xMTM1LDcgKzExODgsNyBAQAogICAgICAgICByZXR1cm4gKGVycnAtPmRsX2Vycm5vKTsKICAgICB9CiAgICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczU6ZGxwaSIsICJnb3QgdHlwZTogJXhcbiIsIGRscC0+ZGxfcHJpbWl0aXZlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGU6ICV4XG4iLCAodW5zaWduZWQpZGxwLT5kbF9wcmltaXRpdmUpKTsKICAgICAgICAgcmV0dXJuICgtMSk7CiAgICAgfQogfQpAQCAtMTE4MSw3ICsxMjM0LDcgQEAKICAgICAgICAgICAgIHJldHVybiAoLTEpOyAKIAogICAgICAgICBERUJVR01TR1RMKCgia2VybmVsX3N1bm9zNTpkbHBpIiwgImRsX21hY190eXBlOiAleFxuIiwKLQkgICAgICAgICAgIGluZm8tPmRsX21hY190eXBlKSk7CisJICAgICAgICAgICAodW5zaWduZWQpaW5mby0+ZGxfbWFjX3R5cGUpKTsKIAlzd2l0Y2ggKGluZm8tPmRsX21hY190eXBlKSB7CiAJY2FzZSBETF9DU01BQ0Q6CiAJY2FzZSBETF9FVEhFUjoKQEAgLTEyNDYsMTUgKzEyOTksMTUgQEAKICAgICAgICAgZGxfZXJyb3JfYWNrX3QgKmVycnAgPSAoZGxfZXJyb3JfYWNrX3QgKilidWY7CiAKICAgICAgICAgREVCVUdNU0dUTCgoImtlcm5lbF9zdW5vczU6ZGxwaSIsCi0gICAgICAgICAgICAgICAgICAgICJnb3QgRExfRVJST1JfQUNLOiBkbHBpICVkLCBlcnJvciAlZFxuIiwgZXJycC0+ZGxfZXJybm8sCi0gICAgICAgICAgICAgICAgICAgIGVycnAtPmRsX3VuaXhfZXJybm8pKTsKKyAgICAgICAgICAgICAgICAgICAgImdvdCBETF9FUlJPUl9BQ0s6IGRscGkgJWxkLCBlcnJvciAlbGRcbiIsCisJCSAgICAobG9uZyllcnJwLT5kbF9lcnJubywgKGxvbmcpZXJycC0+ZGxfdW5peF9lcnJubykpOwogCiAgICAgICAgIGlmIChjdGxidWYubGVuIDwgRExfRVJST1JfQUNLX1NJWkUpCiAgICAgICAgICAgICByZXR1cm4gKC0xKTsKICAgICAgICAgcmV0dXJuIChlcnJwLT5kbF9lcnJubyk7CiAgICAgfQogICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGUgJXhcbiIsIGRscC0+ZGxfcHJpbWl0aXZlKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJrZXJuZWxfc3Vub3M1OmRscGkiLCAiZ290IHR5cGUgJXhcbiIsICh1bnNpZ25lZClkbHAtPmRsX3ByaW1pdGl2ZSkpOwogICAgICAgICByZXR1cm4gKC0xKTsKICAgICB9CiB9CkBAIC0xMjk3LDcgKzEzNTAsNyBAQAogICAgIGludCBtID0gMTsKICAgICBpbnQgaSA9IHN0cmxlbihkZXZuYW1lKSAtIDE7CiAKLSAgICB3aGlsZSAoaSA+PSAwICYmIGlzZGlnaXQoZGV2bmFtZVtpXSkpIHsKKyAgICB3aGlsZSAoaSA+PSAwICYmIGlzZGlnaXQoZGV2bmFtZVtpXSAmIDB4RkYpKSB7CiAgICAgICAgIHBwYSArPSBtICogKGRldm5hbWVbaV0gLSAnMCcpOyAKICAgICAgICAgbSAqPSAxMDsKICAgICAgICAgaS0tOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oIGIvYWdlbnQvbWliZ3JvdXAva2VybmVsX3N1bm9zNS5oCmluZGV4IGNkZDIzNzUuLmJmMzM3YWUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL2tlcm5lbF9zdW5vczUuaAorKysgYi9hZ2VudC9taWJncm91cC9rZXJuZWxfc3Vub3M1LmgKQEAgLTcxLDEwICs3MSwyMiBAQAogICAgIE1JQl9UUkFOU01JU1NJT04gPSAxNCwKICAgICBNSUJfU05NUCA9IDE1LAogI2lmZGVmIFNPTEFSSVNfSEFWRV9JUFY2X01JQl9TVVBQT1JUCi0gICAgTUlCX0lQNl9BRERSID0gMTYsCisjaWZkZWYgU09MQVJJU19IQVZFX1JGQzQyOTNfU1VQUE9SVAorICAgIE1JQl9JUF9UUkFGRklDX1NUQVRTLAorI2VuZGlmCisgICAgTUlCX0lQNiwKKyAgICBNSUJfSVA2X0FERFIsCisgICAgTUlCX0lQNl9ST1VURSwKKyAgICBNSUJfSUNNUDYsCiAgICAgTUlCX1RDUDZfQ09OTiwKICAgICBNSUJfVURQNl9FTkRQT0lOVCwKICNlbmRpZgorI2lmZGVmIE1JQjJfU0NUUAorICAgIE1JQl9TQ1RQLAorICAgIE1JQl9TQ1RQX0NPTk4sCisgICAgTUlCX1NDVFBfQ09OTl9MT0NBTCwKKyAgICBNSUJfU0NUUF9DT05OX1JFTU9URSwKKyNlbmRpZgogICAgIE1JQkNBQ0hFX1NJWkUJCiB9IG1pYmdyb3VwX2U7CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJLmggYi9hZ2VudC9taWJncm91cC9taWJJSS5oCmluZGV4IGM1NGQyMzMuLmYzMTU3ZmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkuaApAQCAtNyw3ICs3LDcgQEAKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2F0KQogY29uZmlnX3JlcXVpcmUobWliSUkvaWZUYWJsZSkKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2lwKQotY29uZmlnX3JlcXVpcmUobWliSUkvc25tcF9taWIpCitjb25maWdfdmVyc2lvbl9yZXF1aXJlKChtaWJJSS9zbm1wX21pYiwgNS41LCBtaWJJSS9zbm1wX21pYl81XzUpKQogY29uZmlnX3JlcXVpcmUobWliSUkvdGNwKQogY29uZmlnX3JlcXVpcmUobWliSUkvaWNtcCkKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3VkcCkKQEAgLTE1LDcgKzE1LDcgQEAKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3NldFNlcmlhbE5vKQogCiAvKiBtaWJJSS9pcHY2IGlzIGFjdGl2YXRlZCB2aWEgLS1lbmFibGUtaXB2NiBhbmQgb25seSBidWlsZHMgb24gTGludXgrKkJTRCAqLwotI2lmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikgJiYgKGRlZmluZWQobGludXgpIHx8IGRlZmluZWQoZnJlZWJzZDMpIHx8IGRlZmluZWQobmV0YnNkMSkgfHwgZGVmaW5lZChvcGVuYnNkKSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpICYmIChkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKGZyZWVic2QzKSB8fCBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQob3BlbmJzZDQpKSAKIGNvbmZpZ19yZXF1aXJlKG1pYklJL2lwdjYpCiAjZW5kaWYKIApAQCAtMjUsOCArMjUsMjUgQEAKIAogLyoKICAqIHRoZXNlIG5ldyBtb2R1bGUgcmUtcmV3cml0ZXMgaGF2ZSBvbmx5IGJlZW4gaW1wbGVtZW50ZWQgZm9yCi0gKiBsaW51eC4KKyAqIExpbnV4IGFuZCAqQlNELgogICovCi0jaWYgZGVmaW5lZCggbGludXggKQorI2lmIGRlZmluZWQobGludXgpCiBjb25maWdfcmVxdWlyZShpcC1taWIgaXAtZm9yd2FyZC1taWIgdGNwLW1pYiB1ZHAtbWliKQorI2VsaWYgZGVmaW5lZChkcmFnb25mbHkpIHx8IGRlZmluZWQoZnJlZWJzZDcpIHx8IFwKKyAgICBkZWZpbmVkKG5ldGJzZDUpIHx8IGRlZmluZWQob3BlbmJzZDQpIHx8IGRlZmluZWQoIGRhcndpbiApCitjb25maWdfcmVxdWlyZShpcC1taWIgaXAtZm9yd2FyZC1taWIgdGNwLW1pYiB1ZHAtbWliKQorI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKK2NvbmZpZ19yZXF1aXJlKHRjcC1taWIgdWRwLW1pYikKKyNlbGlmIGRlZmluZWQoZnJlZWJzZDQpCitjb25maWdfcmVxdWlyZSh0Y3AtbWliIHVkcC1taWIpCisjZWxpZiBkZWZpbmVkKG5ldGJzZDEpCitjb25maWdfcmVxdWlyZSh0Y3AtbWliIHVkcC1taWIpCisjZW5kaWYKKworLyoKKyAqIEZvciBTb2xhcmlzLCBlbmFibGUgYWRkaXRpb25hbCB0YWJsZXMgd2hlbiBpdCBoYXMgZXh0ZW5kZWQgTUlCIHN1cHBvcnQuCisgKi8KKyNpZiBkZWZpbmVkKCBzb2xhcmlzMiApICYmIGRlZmluZWQoIEhBVkVfTUlCMl9JUElGU1RBVFNFTlRSWV9UICkKK2NvbmZpZ19yZXF1aXJlKGlwLW1pYi9pcFN5c3RlbVN0YXRzVGFibGUgaXAtbWliL2lwQWRkcmVzc1RhYmxlKQorY29uZmlnX3JlcXVpcmUoaXAtZm9yd2FyZC1taWIpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2F0LmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9hdC5jCmluZGV4IDQ1YWI1MTYuLmY1N2JhMmEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2F0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvYXQuYwpAQCAtMjUsMTcgKzI1LDEzIEBACiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCi0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtODksOSArODUsNiBAQAogI2lmZGVmIHNvbGFyaXMyCiAjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2lmZGVmIGhwdXgxMQogI2luY2x1ZGUgPHN5cy9taWIuaD4KQEAgLTE0Niw5ICsxMzksMTIgQEAKICAqIGluZm9ybWF0aW9uIGF0IAogICovCiBzdHJ1Y3QgdmFyaWFibGUxIGF0X3ZhcmlhYmxlc1tdID0gewotICAgIHtBVElGSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2F0RW50cnksIDEsIHsxfX0sCi0gICAge0FUUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezJ9fSwKLSAgICB7QVRORVRBRERSRVNTLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2F0RW50cnksIDEsIHszfX0KKyAgICB7QVRJRklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7MX19LAorICAgIHtBVFBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHsyfX0sCisgICAge0FUTkVUQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7M319CiB9OwogCiAvKgpAQCAtMzA0LDcgKzMwMCw3IEBACiAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbG93ZXN0LCBvaWRfbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwogICAgICpsZW5ndGggPSBvaWRfbGVuZ3RoOwotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIElQTUVESUFJRklOREVYOiAgICAgICAvKiBhbHNvIEFUSUZJTkRFWCAqLwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZiBsb25nX3JldHVybjsKQEAgLTM1Nyw3ICszNTMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXAtPmlwTmV0VG9NZWRpYUlmSW5kZXgub19sZW5ndGgpOwogI2VuZGlmCiAgICAgREVCVUdNU0dUTCgoIm1pYklJL2F0IiwgIi4uLi4uLi4uLiBBVF9DbXAgJWx4PD4lbHggJWQ8PiVkICglLjVzKVxuIiwKLSAgICAgICAgICAgICAgICBtcC0+aXBOZXRUb01lZGlhTmV0QWRkcmVzcywgKChpZl9pcF90ICopIGFkZHIpLT5pcEFkZHIsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbXAtPmlwTmV0VG9NZWRpYU5ldEFkZHJlc3MsCisgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKChpZl9pcF90ICopIGFkZHIpLT5pcEFkZHIsCiAgICAgICAgICAgICAgICAgKChpZl9pcF90ICopIGFkZHIpLT5pZklkeCwgaW5kZXgsCiAgICAgICAgICAgICAgICAgbXAtPmlwTmV0VG9NZWRpYUlmSW5kZXgub19ieXRlcykpOwogICAgIGlmIChtcC0+aXBOZXRUb01lZGlhTmV0QWRkcmVzcyAhPSAoKGlmX2lwX3QgKikgYWRkciktPmlwQWRkcikKQEAgLTM5Myw3ICszOTAsNyBAQAogICAgIHN0YXRpYyBtaWIyX2lwTmV0VG9NZWRpYUVudHJ5X3QgTG93ZW50cnk7CiAgICAgaW50ICAgICAgICAgICAgIEZvdW5kID0gMDsKICAgICByZXFfZSAgICAgICAgICAgcmVxX3R5cGU7Ci0gICAgaW50ICAgICAgICAgICAgIG9mZnNldCwgb2xlbmd0aDsKKyAgICBpbnQgICAgICAgICAgICAgb2Zmc2V0LCBvbGVuZ3RoID0gMDsKICAgICBzdGF0aWMgaW5fYWRkcl90ICAgICAgYWRkcl9yZXQ7CiAKICAgICAvKgpAQCAtNTEwLDcgKzUwNyw3IEBACiBzdGF0aWMgY2hhciAgICAqbGltLCAqcnRuZXh0Owogc3RhdGljIGNoYXIgICAgKmF0ID0gMDsKICNlbHNlCi0jaWZkZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCisjaWZkZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVAogc3RhdGljIHN0cnVjdCBhcnBoZCAqYXQgPSAwOwogc3RhdGljIHN0cnVjdCBhcnB0YWIgKmF0X3B0ciwgYXRfZW50cnk7CiBzdGF0aWMgc3RydWN0IGFycGNvbSBhdF9jb207CkBAIC01MjgsNyArNTI1LDYgQEAKICAqLwogI2RlZmluZSBBUlBfQ0FDSEVfSU5DUiAxMDI0CiBzdGF0aWMgc3RydWN0IGFycHRhYiAqYXQgPSBOVUxMOwotc3RhdGljIGludCAgICAgIGFycHRhYl9jdXJyX21heF9zaXplID0gMDsKIAogI2VuZGlmCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgKi8KQEAgLTU4Myw3ICs1NzksNyBAQAogI2lmZGVmIEFSUFRBQl9TSVpFX1NZTUJPTAogICAgICAgICBhdXRvX25saXN0KEFSUFRBQl9TSVpFX1NZTUJPTCwgKGNoYXIgKikgJmFycHRhYl9zaXplLAogICAgICAgICAgICAgICAgICAgIHNpemVvZiBhcnB0YWJfc2l6ZSk7Ci0jaWZkZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCisjaWZkZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVAogICAgICAgICBhdCA9IChzdHJ1Y3QgYXJwaGQgKikgbWFsbG9jKGFycHRhYl9zaXplICogc2l6ZW9mKHN0cnVjdCBhcnBoZCkpOwogI2Vsc2UKICAgICAgICAgYXQgPSAoc3RydWN0IGFycHRhYiAqKSBtYWxsb2MoYXJwdGFiX3NpemUgKiBzaXplb2Yoc3RydWN0IGFycHRhYikpOwpAQCAtNTkyLDcgKzU4OCw3IEBACiAgICAgICAgIHJldHVybjsKICNlbmRpZgogICAgIH0KLSNpZmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQKKyNpZmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUCiAgICAgYXV0b19ubGlzdChBUlBUQUJfU1lNQk9MLCAoY2hhciAqKSBhdCwKICAgICAgICAgICAgICAgIGFycHRhYl9zaXplICogc2l6ZW9mKHN0cnVjdCBhcnBoZCkpOwogICAgIGF0X3B0ciA9IGF0WzBdLmF0X25leHQ7CkBAIC02MzQsOCArNjMwLDEwIEBACiAKICAgICBpID0gMDsKICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKKyAgICAgICAgc3RhdGljIGludCAgICAgIGFycHRhYl9jdXJyX21heF9zaXplOwogICAgICAgICB1X2xvbmcgICAgICAgICAgdG1wX2E7Ci0gICAgICAgIGludCAgICAgICAgICAgICB0bXBfZmxhZ3M7CisgICAgICAgIHVuc2lnbmVkIGludCAgICB0bXBfZmxhZ3M7CisKICAgICAgICAgaWYgKGkgPj0gYXJwdGFiX2N1cnJfbWF4X3NpemUpIHsKICAgICAgICAgICAgIHN0cnVjdCBhcnB0YWIgICpuZXd0YWIgPSAoc3RydWN0IGFycHRhYiAqKQogICAgICAgICAgICAgICAgIHJlYWxsb2MoYXQsIChzaXplb2Yoc3RydWN0IGFycHRhYikgKgpAQCAtNzc5LDcgKzc3Nyw3IEBACiAgICAgcmVnaXN0ZXIgc3RydWN0IGFycHRhYiAqYXRhYjsKIAogICAgIHdoaWxlIChhcnB0YWJfY3VycmVudCA8IGFycHRhYl9zaXplKSB7Ci0jaWZkZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCisjaWZkZWYgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVAogICAgICAgICAvKgogICAgICAgICAgKiBUaGUgYXJwIHRhYmxlIGlzIGFuIGFycmF5IG9mIGxpbmtlZCBsaXN0cyBvZiBhcnB0YWIgZW50cmllcy4KICAgICAgICAgICogVW51c2VkIHNsb3RzIGhhdmUgcG9pbnRlcnMgYmFjayB0byB0aGUgYXJyYXkgZW50cnkgaXRzZWxmIApAQCAtODA4LDkgKzgwNiw5IEBACiAgICAgICAgIGF0X3B0ciA9IGF0X2VudHJ5LmF0X25leHQ7CiAgICAgICAgIGF0YWIgPSAmYXRfZW50cnk7CiAgICAgICAgICppZkluZGV4ID0gYXRfY29tLmFjX2lmLmlmX2luZGV4OyAgICAgICAvKiBub3Qgc3RyaWN0bHkgQVJQSEQgKi8KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUICovCisjZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQgKi8KICAgICAgICAgYXRhYiA9ICZhdFthcnB0YWJfY3VycmVudCsrXTsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQgKi8KICAgICAgICAgaWYgKCEoYXRhYi0+YXRfZmxhZ3MgJiBBVEZfQ09NKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAqaWZUeXBlID0gKGF0YWItPmF0X2ZsYWdzICYgQVRGX1BFUk0pID8gNCA6IDM7CkBAIC04NTksNyArODU3LDcgQEAKIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc29sYXJpczIgKi8KIAotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiBjeWd3aW4gKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9JUEhMUEFQSV9IKSAgLyogV0lOMzIgY3lnd2luICovCiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KIAogZXh0ZXJuIFdyaXRlTWV0aG9kIHdyaXRlX2FycDsKQEAgLTg5Myw2ICs4OTEsNyBAQAogICAgIERXT1JEICAgICAgICAgICBzdGF0dXMgPSBOT19FUlJPUjsKICAgICBEV09SRCAgICAgICAgICAgZHdBY3R1YWxTaXplID0gMDsKICAgICBVSU5UICAgICAgICAgICAgaTsKKyAgICBpbnQgICAgICAgICAgICAgajsKICAgICB1X2NoYXIgICAgICAgICAgZGVzdF9hZGRyWzRdOwogICAgIHZvaWQgICAgICAgICAgICpyZXN1bHQgPSBOVUxMOwogICAgIHN0YXRpYyBpbl9hZGRyX3QJYWRkcl9yZXQ7CkBAIC05MTYsNiArOTE1LDcgQEAKICAgICAgICAgICAgIHN0YXR1cyA9IEdldElwTmV0VGFibGUocElwTmV0VGFibGUsICZkd0FjdHVhbFNpemUsIFRSVUUpOwogICAgIH0KIAorICAgIGkgPSAtMTsKIAogICAgIGlmIChzdGF0dXMgPT0gTk9fRVJST1IpIHsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBJcE5ldFRhYmxlLT5kd051bUVudHJpZXM7ICsraSkgewpAQCAtOTcwLDE2ICs5NzAsMTYgQEAKICAgICAgICAgICAgIGFycF9yb3ctPmR3SW5kZXggPSBuYW1lWzEwXTsKIAogICAgICAgICAgICAgaWYgKCpsZW5ndGggPT0gMTUpIHsgICAgICAgIC8qIGlwTmV0VG9NZWRpYVRhYmxlICovCi0gICAgICAgICAgICAgICAgaSA9IDExOworICAgICAgICAgICAgICAgIGogPSAxMTsKICAgICAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgLyogYXQgVGFibGUgKi8KIAotICAgICAgICAgICAgICAgIGkgPSAxMjsKKyAgICAgICAgICAgICAgICBqID0gMTI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGRlc3RfYWRkclswXSA9ICh1X2NoYXIpIG5hbWVbaV07Ci0gICAgICAgICAgICBkZXN0X2FkZHJbMV0gPSAodV9jaGFyKSBuYW1lW2kgKyAxXTsKLSAgICAgICAgICAgIGRlc3RfYWRkclsyXSA9ICh1X2NoYXIpIG5hbWVbaSArIDJdOwotICAgICAgICAgICAgZGVzdF9hZGRyWzNdID0gKHVfY2hhcikgbmFtZVtpICsgM107CisgICAgICAgICAgICBkZXN0X2FkZHJbMF0gPSAodV9jaGFyKSBuYW1lW2pdOworICAgICAgICAgICAgZGVzdF9hZGRyWzFdID0gKHVfY2hhcikgbmFtZVtqICsgMV07CisgICAgICAgICAgICBkZXN0X2FkZHJbMl0gPSAodV9jaGFyKSBuYW1lW2ogKyAyXTsKKyAgICAgICAgICAgIGRlc3RfYWRkclszXSA9ICh1X2NoYXIpIG5hbWVbaiArIDNdOwogICAgICAgICAgICAgYXJwX3Jvdy0+ZHdBZGRyID0gKigoRFdPUkQgKikgZGVzdF9hZGRyKTsKIAogICAgICAgICAgICAgYXJwX3Jvdy0+ZHdUeXBlID0gNDsgICAgICAgIC8qIFN0YXRpYyAqLwpAQCAtOTkyLDYgKzk5Miw3IEBACiAgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIGxvd2VzdCwgb2lkX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gb2lkX2xlbmd0aDsKICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfYXJwOworICAgIG5ldHNubXBfYXNzZXJ0KDAgPD0gaSAmJiBpIDwgcElwTmV0VGFibGUtPmR3TnVtRW50cmllcyk7CiAgICAgKmFycF9yb3cgPSBwSXBOZXRUYWJsZS0+dGFibGVbaV07CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5jCmluZGV4IGM4MGYwZWUuLmJlODAzZWUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmMKQEAgLTEsNiArMSw1IEBACiAvKgogICogIElDTVAgTUlCIGdyb3VwIGltcGxlbWVudGF0aW9uIC0gaWNtcC5jCi0gKgogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KQEAgLTksNiArOCwxMyBAQAogI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKICNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KICNlbmRpZgorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorI2lmIEhBVkVfTkVUSU5FVF9JQ01QNl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLworCiAjaWYgSEFWRV9ORVRJTkVUX0lDTVBfVkFSX0gKICNpbmNsdWRlIDxuZXRpbmV0L2ljbXBfdmFyLmg+CiAjZW5kaWYKQEAgLTE5LDEwICsyNSwxMCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NjYWxhcl9ncm91cC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgiCiAjaW5jbHVkZSAiaWNtcC5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKIAogI2lmbmRlZiBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2RlZmluZSBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAk1CkBAIC0zMSw3ICszNywxOCBAQAogI2RlZmluZSBJQ01QX1NUQVRTX0NBQ0hFX1RJTUVPVVQJTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSkgJiYgIWRlZmluZWQoRklSU1RfUFJPVE9DT0wpCisvKiByZWRlZmluZSBJQ01QNiBtZXNzYWdlIHR5cGVzIGZyb20gZ2xpYmMgPCAyLjQgdG8gbmV3ZXIgbmFtZXMgKi8KKyNpZm5kZWYgTUxEX0xJU1RFTkVSX1FVRVJZCisjZGVmaW5lIE1MRF9MSVNURU5FUl9RVUVSWSBJQ01QNl9NRU1CRVJTSElQX1FVRVJZCisjZGVmaW5lIE1MRF9MSVNURU5FUl9SRVBPUlQgSUNNUDZfTUVNQkVSU0hJUF9SRVBPUlQKKyNkZWZpbmUgTUxEX0xJU1RFTkVSX1JFRFVDVElPTiBJQ01QNl9NRU1CRVJTSElQX1JFRFVDVElPTgorI2VuZGlmIC8qIElDTVA2X01FTUJFUlNISVBfUVVFUlkgKi8KKworCisjaWYgZGVmaW5lZChIQVZFX0xJQlBFUkZTVEFUX0gpICYmIChkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNpZmRlZiBGSVJTVF9QUk9UT0NPTAogcGVyZnN0YXRfcHJvdG9jb2xfdCBwc19wcm90bzsKQEAgLTU0LDQwICs3MSw2NjUgQEAKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCiAKKyNpZmRlZiBocHV4MTEKKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlpbnQKKyNlbmRpZgorCisjaWZkZWYgbGludXgKKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3QgaWNtcF9taWIKKyNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisjdW5kZWYgSUNNUFNUQVRfU1lNQk9MCisjZW5kaWYKKworI2lmZGVmIHNvbGFyaXMyCisjZGVmaW5lIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCW1pYjJfaWNtcF90CisjaW5jbHVkZSAia2VybmVsX21pYi5oIgorc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXBfc3RhdChJQ01QX1NUQVRfU1RSVUNUVVJFICopOworc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXBfbXNnX3N0YXQoSUNNUF9TVEFUX1NUUlVDVFVSRSAqLCBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqLCBpbnQgKik7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqKTsKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wNl9tc2dfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICosIHN0cnVjdCBpY21wNl9tc2dfbWliICosIGludCAqKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBORVRCU0RfU1RBVFNfVklBX1NZU0NUTAorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFICAgICBzdHJ1Y3QgaWNtcF9taWIKKyNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCisjdW5kZWYgSUNNUF9OU1RBVFMKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICisjaW5jbHVkZSA8aXBobHBhcGkuaD4KKyNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRSBNSUJfSUNNUAorI2VuZGlmCisKKyNpZiAoZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpKQorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBpY21wX21pYgorI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKyN1bmRlZiBJQ01QU1RBVF9TWU1CT0wKKyNlbmRpZgorCisjaWZkZWYgSEFWRV9TWVNfSUNNUElQU1RBVFNfSAorLyogb3IgI2lmZGVmCQlIQVZFX1NZU19UQ1BJUFNUQVRTX0ggID8/PyAqLworI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBrbmEKKyNkZWZpbmUgVVNFU19UUkFESVRJT05BTF9JQ01QU1RBVAorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChJQ01QX1NUQVRfU1RSVUNUVVJFKQorI2RlZmluZSBJQ01QX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBpY21wc3RhdAorI2RlZmluZSBVU0VTX1RSQURJVElPTkFMX0lDTVBTVEFUCisjZW5kaWYKKworSUNNUF9TVEFUX1NUUlVDVFVSRSBpY21wc3RhdDsKKyNpZiBkZWZpbmVkKHNvbGFyaXMyKSAmJiBkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpCitzdGF0aWMgc3RydWN0IGljbXA2X21pYiBpY21wNnN0YXQ7CisjZW5kaWYKKworLyogSWYgdGhleSBqdXN0IGFsbCBhZ3JlZWQgLi4uICovCisKKyNpZm5kZWYgSUNNUF9ERVNUX1VOUkVBQ0gKKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0ggSUNNUF9VTlJFQUNICisjZW5kaWYKKyNpZm5kZWYgSUNNUF9TT1VSQ0VfUVVFTkNICisjZGVmaW5lIElDTVBfU09VUkNFX1FVRU5DSCBJQ01QX1NPVVJDRVFVRU5DSAorI2VuZGlmCisjaWZuZGVmIElDTVBfVElNRV9FWENFRURFRAorI2RlZmluZSBJQ01QX1RJTUVfRVhDRUVERUQgSUNNUF9USU1YQ0VFRAorI2VuZGlmCisjaWZuZGVmIElDTVBfUEFSQU1FVEVSUFJPQgorI2RlZmluZSBJQ01QX1BBUkFNRVRFUlBST0IgSUNNUF9QQVJBTVBST0IKKyNlbmRpZgorI2lmbmRlZiBJQ01QX1RJTUVTVEFNUAorI2RlZmluZSBJQ01QX1RJTUVTVEFNUCBJQ01QX1RTVEFNUAorI2VuZGlmCisjaWZuZGVmIElDTVBfVElNRVNUQU1QUkVQTFkKKyNkZWZpbmUgSUNNUF9USU1FU1RBTVBSRVBMWSBJQ01QX1RTVEFNUFJFUExZCisjZW5kaWYKKyNpZm5kZWYgSUNNUF9BRERSRVNTCisjZGVmaW5lIElDTVBfQUREUkVTUyBJQ01QX01BU0tSRVEKKyNlbmRpZgorI2lmbmRlZiBJQ01QX0FERFJFU1NSRVBMWQorI2RlZmluZSBJQ01QX0FERFJFU1NSRVBMWSBJQ01QX01BU0tSRVBMWQorI2VuZGlmCisjaWZuZGVmIE1MRF9MSVNURU5FUl9SRURVQ1RJT04KKyNkZWZpbmUgTUxEX0xJU1RFTkVSX1JFRFVDVElPTiBNTERfTElTVEVORVJfRE9ORQorI2VuZGlmCiAKIC8qCiAgKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKICAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGggCiAgKi8KLW9pZCAgICAgICAgICAgICBpY21wX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA1IH07CitzdGF0aWMgY29uc3Qgb2lkIGljbXBfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDUgfTsKK3N0YXRpYyBjb25zdCBvaWQgaWNtcF9zdGF0c190Ymxfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDUsIDI5IH07CitzdGF0aWMgY29uc3Qgb2lkIGljbXBfbXNnX3N0YXRzX3RibF9vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNSwgMzAgfTsKICNpZmRlZiBVU0lOR19NSUJJSV9JUF9NT0RVTEUKIGV4dGVybiBvaWQgICAgICBpcF9tb2R1bGVfb2lkW107CiBleHRlcm4gaW50ICAgICAgaXBfbW9kdWxlX29pZF9sZW47CiBleHRlcm4gaW50ICAgICAgaXBfbW9kdWxlX2NvdW50OwogI2VuZGlmCiAKKyNpZmRlZiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKK3N0cnVjdCBpY21wX3N0YXRzX3RhYmxlX2VudHJ5IHsKKwl1aW50MzJfdCBpcFZlcjsKKyAgICAgICAgdWludDMyX3QgaWNtcFN0YXRzSW5Nc2dzOworICAgICAgICB1aW50MzJfdCBpY21wU3RhdHNJbkVycm9yczsKKyAgICAgICAgdWludDMyX3QgaWNtcFN0YXRzT3V0TXNnczsKKyAgICAgICAgdWludDMyX3QgaWNtcFN0YXRzT3V0RXJyb3JzOworfTsKKworc3RydWN0IGljbXBfc3RhdHNfdGFibGVfZW50cnkgaWNtcF9zdGF0c190YWJsZVsyXTsKKyAKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSEFTX0lOIDEKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSEFTX09VVCAyCisKK3N0cnVjdCBpY21wX21zZ19zdGF0c190YWJsZV9lbnRyeSB7CisgICAgICAgIHVpbnQzMl90IGlwVmVyOworICAgICAgICB1aW50MzJfdCBpY21wTXNnU3RhdHNUeXBlOworICAgICAgICB1aW50MzJfdCBpY21wTXNnU3RhdHNJblBrdHM7CisgICAgICAgIHVpbnQzMl90IGljbXBNc2dTdGF0c091dFBrdHM7CisgICAgICAgIGludCBmbGFnczsKK307CisKKyNpZmRlZiBsaW51eAorLyogTGludXgga2VlcHMgdHJhY2sgb2YgYWxsIHBvc3NpYmxlIG1lc3NhZ2UgdHlwZXMgKi8KKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSVBWNF9DT1VOVCAyNTYKKyNlbHNlCisjZGVmaW5lIElDTVBfTVNHX1NUQVRTX0lQVjRfQ09VTlQgMTEKKyNlbmRpZgorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorI2lmZGVmIGxpbnV4CisvKiBMaW51eCBrZWVwcyB0cmFjayBvZiBhbGwgcG9zc2libGUgbWVzc2FnZSB0eXBlcyAqLworI2RlZmluZSBJQ01QX01TR19TVEFUU19JUFY2X0NPVU5UIDI1NgorI2Vsc2UKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVFNfSVBWNl9DT1VOVCAxNAorI2VuZGlmCisjZWxzZQorI2RlZmluZSBJQ01QX01TR19TVEFUU19JUFY2X0NPVU5UIDAKKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisKK3N0cnVjdCBpY21wX21zZ19zdGF0c190YWJsZV9lbnRyeSBpY21wX21zZ19zdGF0c190YWJsZVtJQ01QX01TR19TVEFUU19JUFY0X0NPVU5UICsgSUNNUF9NU0dfU1RBVFNfSVBWNl9DT1VOVF07CisKK2ludAoraWNtcF9zdGF0c19sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCit7CisKKyAgICAvKgorICAgICAqIG5vdGUgZG9uJ3QgYm90aGVyIHVzaW5nIHRoZSBwYXNzZWQgaW4gY2FjaGUKKyAgICAgKiBhbmQgdm1hZ2ljIHBvaW50ZXJzLiAgVGhleSBhcmUgdXNlbGVzcyBhcyB0aGV5IAorICAgICAqIGN1cnJlbnRseSBwb2ludCB0byB0aGUgaWNtcCBzeXN0ZW0gc3RhdHMgY2FjaGUJCisgICAgICogc2luY2UgSSBzZWUgbGl0dGxlIHBvaW50IGluIHJlZ2lzdGVyaW5nIGFub3RoZXIKKyAgICAgKiBjYWNoZSBmb3IgdGhpcyB0YWJsZS4gIEl0cyBub3QgcmVhbGx5IG5lZWRlZAorICAgICAqLworCisgICAgaW50IGk7CisgICAgSUNNUF9TVEFUX1NUUlVDVFVSRSB2NGljbXA7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIHN0cnVjdCBpY21wNl9taWIgdjZpY21wOworI2VuZGlmCisgICAgZm9yKGkgPSAwOyBpIDwgMjsgaSsrKSB7CisgICAgICAgIHN3aXRjaChpKSB7CisgICAgICAgIGNhc2UgMDoKKyNpZmRlZiBsaW51eAorICAgICAgICAgICAgbGludXhfcmVhZF9pY21wX3N0YXQoJnY0aWNtcCk7CisjZWxpZiBkZWZpbmVkKE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMKQorCSAgICBuZXRic2RfcmVhZF9pY21wX3N0YXQoJnY0aWNtcCk7CisjZWxpZiAoZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpKQorCSAgICBzeXNjdGxfcmVhZF9pY21wX3N0YXQoJnY0aWNtcCk7CisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQorCSAgICBzb2xhcmlzX3JlYWRfaWNtcF9zdGF0KCZ2NGljbXApOworI2Vsc2UKKwkgICAgcmV0dXJuIC0xOworI2VuZGlmCisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c0luTXNncyA9IHY0aWNtcC5pY21wSW5Nc2dzOworICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNJbkVycm9ycyA9IHY0aWNtcC5pY21wSW5FcnJvcnM7CisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c091dE1zZ3MgPSB2NGljbXAuaWNtcE91dE1zZ3M7CisgICAgICAgICAgICBpY21wX3N0YXRzX3RhYmxlW2ldLmljbXBTdGF0c091dEVycm9ycyA9IHY0aWNtcC5pY21wT3V0RXJyb3JzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgICAgICBtZW1zZXQoJmljbXBfc3RhdHNfdGFibGVbaV0sMCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpY21wX3N0YXRzX3RhYmxlX2VudHJ5KSk7CisjaWZkZWYgbGludXgKKyAgICAgICAgICAgIGxpbnV4X3JlYWRfaWNtcDZfc3RhdCgmdjZpY21wKTsKKyNlbGlmIGRlZmluZWQoTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwpCisJICAgIG5ldGJzZF9yZWFkX2ljbXA2X3N0YXQoJnY2aWNtcCk7CisjZWxpZiAoZGVmaW5lZChORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKSAmJiBkZWZpbmVkKElDTVBDVExfU1RBVFMpKQorCSAgICBzeXNjdGxfcmVhZF9pY21wNl9zdGF0KCZ2NmljbXApOworI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKKwkgICAgc29sYXJpc19yZWFkX2ljbXA2X3N0YXQoJnY2aWNtcCk7CisjZWxzZQorCSAgICByZXR1cm4gLTE7CisjZW5kaWYKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzSW5Nc2dzID0gdjZpY21wLmljbXA2SW5Nc2dzOworICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNJbkVycm9ycyA9IHY2aWNtcC5pY21wNkluRXJyb3JzOworICAgICAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pY21wU3RhdHNPdXRNc2dzID0gdjZpY21wLmljbXA2T3V0TXNnczsKKyAgICAgICAgICAgIGljbXBfc3RhdHNfdGFibGVbaV0uaWNtcFN0YXRzT3V0RXJyb3JzID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHY2aWNtcC5pY21wNk91dERlc3RVbnJlYWNocyArCisgICAgICAgICAgICAgICAgICAgICAgICB2NmljbXAuaWNtcDZPdXRQa3RUb29CaWdzICsgIHY2aWNtcC5pY21wNk91dFRpbWVFeGNkcyArCisgICAgICAgICAgICAgICAgICAgICAgICB2NmljbXAuaWNtcDZPdXRQYXJtUHJvYmxlbXM7CisjZW5kaWYJLyogTkVUU05NUF9FTkFCTEVfSVBWNiAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWNtcF9zdGF0c190YWJsZVtpXS5pcFZlciA9IGkgKyAxOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK2ljbXBfbXNnX3N0YXRzX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKK3sKKyAgICBJQ01QX1NUQVRfU1RSVUNUVVJFIHY0aWNtcDsKKyAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiB2NGljbXBtc2c7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIHN0cnVjdCBpY21wNl9taWIgdjZpY21wOworICAgIHN0cnVjdCBpY21wNl9tc2dfbWliIHY2aWNtcG1zZzsKKyNlbmRpZgorICAgIGludCBpLCBrLCBmbGFnLCBpbmM7CisKKyAgICBtZW1zZXQoJmljbXBfbXNnX3N0YXRzX3RhYmxlLCAwLCBzaXplb2YoaWNtcF9tc2dfc3RhdHNfdGFibGUpKTsKKworICAgIGkgPSAwOworICAgIGZsYWcgPSAwOworICAgIGsgPSAwOworICAgIGluYyA9IDA7CisjaWZkZWYgbGludXgKKyAgICBsaW51eF9yZWFkX2ljbXBfbXNnX3N0YXQoJnY0aWNtcCwgJnY0aWNtcG1zZywgJmZsYWcpOworI2VsaWYgZGVmaW5lZChORVRCU0RfU1RBVFNfVklBX1NZU0NUTCkKKyAgICBuZXRic2RfcmVhZF9pY21wX21zZ19zdGF0KCZ2NGljbXAsICZ2NGljbXBtc2csICZmbGFnKTsKKyNlbGlmIChkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykpCisgICAgc3lzY3RsX3JlYWRfaWNtcF9tc2dfc3RhdCgmdjRpY21wLCAmdjRpY21wbXNnLCAmZmxhZyk7CisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQorICAgIHNvbGFyaXNfcmVhZF9pY21wX21zZ19zdGF0KCZ2NGljbXAsICZ2NGljbXBtc2csICZmbGFnKTsKKyNlbHNlCisgICAgcmV0dXJuIC0xOworI2VuZGlmCisgICAgaWYgKGZsYWcpIHsKKyAgICAgICAgd2hpbGUgKDI1NSA+PSBrKSB7CisgICAgICAgICAgICBpZiAodjRpY21wbXNnLnZhbHNba10uSW5UeXBlKSB7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBrOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcG1zZy52YWxzW2tdLkluVHlwZTsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzIHwgSUNNUF9NU0dfU1RBVFNfSEFTX0lOOworICAgICAgICAgICAgICAgIGluYyA9IDE7IC8qIFNldCB0aGlzIGlmIHdlIGZvdW5kIGEgdmFsaWQgZW50cnkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICh2NGljbXBtc2cudmFsc1trXS5PdXRUeXBlKSB7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBrOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXBtc2cudmFsc1trXS5PdXRUeXBlOworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICAgICAgICAgIGluYyA9IDE7IC8qIFNldCB0aGlzIGlmIHdlIGZvdW5kIGEgdmFsaWQgZW50cnkgKi8KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpbmMpIHsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICAgICAgaW5jID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX0VDSE9SRVBMWTsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJbkVjaG9SZXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRFY2hvUmVwczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9ERVNUX1VOUkVBQ0g7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5EZXN0VW5yZWFjaHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dERlc3RVbnJlYWNoczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9TT1VSQ0VfUVVFTkNIOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluU3JjUXVlbmNoczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0U3JjUXVlbmNoczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9SRURJUkVDVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJblJlZGlyZWN0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0UmVkaXJlY3RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX0VDSE87CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5FY2hvczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0RWNob3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfVElNRV9FWENFRURFRDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjRpY21wLmljbXBJblRpbWVFeGNkczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0VGltZUV4Y2RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX1BBUkFNRVRFUlBST0I7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5QYXJtUHJvYnM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NGljbXAuaWNtcE91dFBhcm1Qcm9iczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9USU1FU1RBTVA7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY0aWNtcC5pY21wSW5UaW1lc3RhbXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRUaW1lc3RhbXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMTsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QX1RJTUVTVEFNUFJFUExZOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluVGltZXN0YW1wUmVwczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY0aWNtcC5pY21wT3V0VGltZXN0YW1wUmVwczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDE7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUF9BRERSRVNTOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluQWRkck1hc2tzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRBZGRyTWFza3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVBfQUREUkVTU1JFUExZOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NGljbXAuaWNtcEluQWRkck1hc2tSZXBzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjRpY21wLmljbXBPdXRBZGRyTWFza1JlcHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAxOworICAgICAgICBpKys7CisgICAgfQorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIGZsYWcgPSAwOworICAgIGsgPSAwOworICAgIGluYyA9IDA7CisjaWZkZWYgbGludXgKKyAgICBsaW51eF9yZWFkX2ljbXA2X21zZ19zdGF0KCZ2NmljbXAsICZ2NmljbXBtc2csICZmbGFnKTsKKyNlbGlmIGRlZmluZWQoTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwpCisgICAgbmV0YnNkX3JlYWRfaWNtcDZfbXNnX3N0YXQoJnY2aWNtcCwgJnY2aWNtcG1zZywgJmZsYWcpOworI2VsaWYgKGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSkKKyAgICBzeXNjdGxfcmVhZF9pY21wNl9tc2dfc3RhdCgmdjZpY21wLCAmdjZpY21wbXNnLCAmZmxhZyk7CisjZWxpZiBkZWZpbmVkKHNvbGFyaXMyKQorICAgIHNvbGFyaXNfcmVhZF9pY21wNl9tc2dfc3RhdCgmdjZpY21wLCAmdjZpY21wbXNnLCAmZmxhZyk7CisjZWxzZQorICAgIHJldHVybiAtMTsKKyNlbmRpZgorICAgIGlmIChmbGFnKSB7CisgICAgICAgIHdoaWxlICgyNTUgPj0gaykgeworICAgICAgICAgICAgaWYgKHY2aWNtcG1zZy52YWxzW2tdLkluVHlwZSkgeworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gazsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXBtc2cudmFsc1trXS5JblR5cGU7CisgICAgICAgICAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyB8IElDTVBfTVNHX1NUQVRTX0hBU19JTjsKKyAgICAgICAgICAgICAgICBpbmMgPSAxOyAvKiBTZXQgdGhpcyBpZiB3ZSBmb3VuZCBhIHZhbGlkIGVudHJ5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAodjZpY21wbXNnLnZhbHNba10uT3V0VHlwZSkgeworICAgICAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gazsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wbXNnLnZhbHNba10uT3V0VHlwZTsKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgICAgICAgICBpbmMgPSAxOyAvKiBTZXQgdGhpcyBpZiB3ZSBmb3VuZCBhIHZhbGlkIGVudHJ5ICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoaW5jKSB7CisgICAgICAgICAgICAgICAgaSsrOworICAgICAgICAgICAgICAgIGluYyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBrKys7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUDZfRFNUX1VOUkVBQ0g7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluRGVzdFVucmVhY2hzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0RGVzdFVucmVhY2hzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QNl9QQUNLRVRfVE9PX0JJRzsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5Qa3RUb29CaWdzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0UGt0VG9vQmlnczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUDZfVElNRV9FWENFRURFRDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5UaW1lRXhjZHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRUaW1lRXhjZHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IElDTVA2X1BBUkFNX1BST0I7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluUGFybVByb2JsZW1zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0UGFybVByb2JsZW1zOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBJQ01QNl9FQ0hPX1JFUVVFU1Q7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluRWNob3M7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRFY2hvczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gSUNNUDZfRUNIT19SRVBMWTsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5FY2hvUmVwbGllczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dEVjaG9SZXBsaWVzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyAgICAgICAgaSsrOworCisjaWZkZWYgTUxEX0xJU1RFTkVSX1FVRVJZCisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c1R5cGUgPSBNTERfTElTVEVORVJfUVVFUlk7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluR3JvdXBNZW1iUXVlcmllczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IDA7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU47CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTUxEX0xJU1RFTkVSX1JFUE9SVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5Hcm91cE1lbWJSZXNwb25zZXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSB2NmljbXAuaWNtcDZPdXRHcm91cE1lbWJSZXNwb25zZXM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE1MRF9MSVNURU5FUl9SRURVQ1RJT047CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluR3JvdXBNZW1iUmVkdWN0aW9uczsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dEdyb3VwTWVtYlJlZHVjdGlvbnM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE5EX1JPVVRFUl9TT0xJQ0lUOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNJblBrdHMgPSB2NmljbXAuaWNtcDZJblJvdXRlclNvbGljaXRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0Um91dGVyU29saWNpdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE5EX1JPVVRFUl9BRFZFUlQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluUm91dGVyQWR2ZXJ0aXNlbWVudHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c091dFBrdHMgPSAwOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE5EX05FSUdIQk9SX1NPTElDSVQ7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluTmVpZ2hib3JTb2xpY2l0czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzT3V0UGt0cyA9IHY2aWNtcC5pY21wNk91dE5laWdoYm9yU29saWNpdHM7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmlwVmVyID0gMjsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uZmxhZ3MgPSBJQ01QX01TR19TVEFUU19IQVNfSU4gfCBJQ01QX01TR19TVEFUU19IQVNfT1VUOworICAgICAgICBpKys7CisKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzVHlwZSA9IE5EX05FSUdIQk9SX0FEVkVSVDsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaWNtcE1zZ1N0YXRzSW5Qa3RzID0gdjZpY21wLmljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0TmVpZ2hib3JBZHZlcnRpc2VtZW50czsKKyAgICAgICAgaWNtcF9tc2dfc3RhdHNfdGFibGVbaV0uaXBWZXIgPSAyOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5mbGFncyA9IElDTVBfTVNHX1NUQVRTX0hBU19JTiB8IElDTVBfTVNHX1NUQVRTX0hBU19PVVQ7CisgICAgICAgIGkrKzsKKworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlID0gTkRfUkVESVJFQ1Q7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmljbXBNc2dTdGF0c0luUGt0cyA9IHY2aWNtcC5pY21wNkluUmVkaXJlY3RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNPdXRQa3RzID0gdjZpY21wLmljbXA2T3V0UmVkaXJlY3RzOworICAgICAgICBpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciA9IDI7CisgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlW2ldLmZsYWdzID0gSUNNUF9NU0dfU1RBVFNfSEFTX0lOIHwgSUNNUF9NU0dfU1RBVFNfSEFTX09VVDsKKyNlbmRpZgorICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisgICAgcmV0dXJuIDA7Cit9CisKK25ldHNubXBfdmFyaWFibGVfbGlzdCAqCitpY21wX3N0YXRzX25leHRfZW50cnkoIHZvaWQgKipsb29wX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqZGF0YSkKK3sKKyAgICBpbnQgaSA9IChpbnQpKGludHB0cl90KSgqbG9vcF9jb250ZXh0KTsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmlkeCA9IGluZGV4OworCisgICAgaWYoaSA+IDEpCisgICAgICAgIHJldHVybiBOVUxMOworCisKKyAgICAvKgorICAgICAqc2V0IElQIHZlcnNpb24KKyAgICAgKi8KKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoaWR4LCBBU05fSU5URUdFUiwgKHVfY2hhciAqKSZpY21wX3N0YXRzX3RhYmxlW2ldLmlwVmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCkpOworICAgIGlkeCA9IGlkeC0+bmV4dF92YXJpYWJsZTsKKworICAgICpkYXRhX2NvbnRleHQgPSAmaWNtcF9zdGF0c190YWJsZVtpXTsKKworICAgICpsb29wX2NvbnRleHQgPSAodm9pZCAqKShpbnRwdHJfdCkoKytpKTsKKyAgICAKKyAgICByZXR1cm4gaW5kZXg7Cit9CisKKworbmV0c25tcF92YXJpYWJsZV9saXN0ICoKK2ljbXBfc3RhdHNfZmlyc3RfZW50cnkoIHZvaWQgKipsb29wX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICoqZGF0YV9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICppbmRleCwKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqZGF0YSkKK3sKKyAgICAqbG9vcF9jb250ZXh0ID0gTlVMTDsKKyAgICAqZGF0YV9jb250ZXh0ID0gTlVMTDsKKyAgICByZXR1cm4gaWNtcF9zdGF0c19uZXh0X2VudHJ5KGxvb3BfY29udGV4dCwgZGF0YV9jb250ZXh0LCBpbmRleCwgZGF0YSk7Cit9CisKK25ldHNubXBfdmFyaWFibGVfbGlzdCAqCitpY21wX21zZ19zdGF0c19uZXh0X2VudHJ5KHZvaWQgKipsb29wX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqZGF0YSkKK3sKKyAgICBpbnQgaSA9IChpbnQpKGludHB0cl90KSgqbG9vcF9jb250ZXh0KTsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmlkeCA9IGluZGV4OworCisgICAgaWYoaSA+PSBJQ01QX01TR19TVEFUU19JUFY0X0NPVU5UICsgSUNNUF9NU0dfU1RBVFNfSVBWNl9DT1VOVCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBzZXQgSVAgdmVyc2lvbiAqLworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShpZHgsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgKHVfY2hhciAqKSZpY21wX21zZ19zdGF0c190YWJsZVtpXS5pcFZlciwKKyAgICAgICAgICAgIHNpemVvZih1aW50MzJfdCkpOworCisgICAgLyogc2V0IHBhY2tldCB0eXBlICovCisgICAgaWR4ID0gaWR4LT5uZXh0X3ZhcmlhYmxlOworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShpZHgsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgKHVfY2hhciAqKSZpY21wX21zZ19zdGF0c190YWJsZVtpXS5pY21wTXNnU3RhdHNUeXBlLAorICAgICAgICAgICAgc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAqZGF0YV9jb250ZXh0ID0gJmljbXBfbXNnX3N0YXRzX3RhYmxlW2ldOworICAgICpsb29wX2NvbnRleHQgPSAodm9pZCAqKShpbnRwdHJfdCkoKytpKTsKKworICAgIHJldHVybiBpbmRleDsKK30KKworCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgoraWNtcF9tc2dfc3RhdHNfZmlyc3RfZW50cnkodm9pZCAqKmxvb3BfY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipkYXRhX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmluZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICpkYXRhKQoreworICAgICpsb29wX2NvbnRleHQgPSBOVUxMOworICAgICpkYXRhX2NvbnRleHQgPSBOVUxMOworICAgIHJldHVybiBpY21wX21zZ19zdGF0c19uZXh0X2VudHJ5KGxvb3BfY29udGV4dCwgZGF0YV9jb250ZXh0LCBpbmRleCwgZGF0YSk7Cit9CisjZW5kaWYKKwogdm9pZAogaW5pdF9pY21wKHZvaWQpCiB7Ci0gICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbzsKKyNpZmRlZiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICptc2dfc3RhdHNfcmVnaW5mbyA9IE5VTEw7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqdGFibGVfcmVnaW5mbyA9IE5VTEw7CisgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbzsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKm1zZ19zdGF0c19paW5mbzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKm1zZ19zdGF0c190YWJsZV9pbmZvOworI2VuZGlmCisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqc2NhbGFyX3JlZ2luZm8gPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7CiAKICAgICAvKgogICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCBhcyBhIGdyb3VwIG9mIHNjYWxhcnMuLi4KICAgICAgKi8KICAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJJbml0aWFsaXNpbmcgSUNNUCBncm91cFxuIikpOwotICAgIHJlZ2luZm8gPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiaWNtcCIsIGljbXBfaGFuZGxlciwKKyAgICBzY2FsYXJfcmVnaW5mbyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJpY21wIiwgaWNtcF9oYW5kbGVyLAogCQkgICAgaWNtcF9vaWQsIE9JRF9MRU5HVEgoaWNtcF9vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mbywgSUNNUElOTVNHUywgSUNNUE9VVEFERFJNQVNLUkVQUyk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChzY2FsYXJfcmVnaW5mbywgSUNNUElOTVNHUywgSUNNUE9VVEFERFJNQVNLUkVQUyk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOwogICAgIC8qCiAgICAgICogLi4uLiB3aXRoIGEgbG9jYWwgY2FjaGUKICAgICAgKiAgICAoZXhjZXB0IGZvciBIUC1VWCAxMSwgd2hpY2ggZXh0cmFjdHMgb2JqZWN0cyBpbmRpdmlkdWFsbHkpCiAgICAgICovCiAjaWZuZGVmIGhwdXgxMQotICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIoIHJlZ2luZm8sCisgICAgcmMgPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKCBzY2FsYXJfcmVnaW5mbywKIAkJICAgIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIoSUNNUF9TVEFUU19DQUNIRV9USU1FT1VULAogCQkJICAgCQlpY21wX2xvYWQsIGljbXBfZnJlZSwKIAkJCQkJaWNtcF9vaWQsIE9JRF9MRU5HVEgoaWNtcF9vaWQpKSk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKwlnb3RvIGJhaWw7CiAjZW5kaWYKKyNpZmRlZiBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKKworICAgIC8qIHJlZ2lzdGVyIGljbXBTdGF0c1RhYmxlICovCisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKCF0YWJsZV9pbmZvKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywgQVNOX0lOVEVHRVIsIDApOworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBJQ01QX1NUQVRfSU5NU0c7CisgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IElDTVBfU1RBVF9PVVRFUlI7CisKKworICAgIGlpbmZvICAgICAgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfaXRlcmF0b3JfaW5mbyk7CisgICAgaWYgKCFpaW5mbykKKyAgICAgICAgZ290byBiYWlsOworICAgIGlpbmZvLT5nZXRfZmlyc3RfZGF0YV9wb2ludCA9IGljbXBfc3RhdHNfZmlyc3RfZW50cnk7CisgICAgaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQgID0gaWNtcF9zdGF0c19uZXh0X2VudHJ5OworICAgIGlpbmZvLT50YWJsZV9yZWdpbmZvICAgICAgICA9IHRhYmxlX2luZm87CisKKyAgICB0YWJsZV9yZWdpbmZvID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImljbXBTdGF0c1RhYmxlIiwKKwkJaWNtcF9zdGF0c190YWJsZV9oYW5kbGVyLCBpY21wX3N0YXRzX3RibF9vaWQsCisJCU9JRF9MRU5HVEgoaWNtcF9zdGF0c190Ymxfb2lkKSwgSEFORExFUl9DQU5fUk9OTFkpOworCisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMih0YWJsZV9yZWdpbmZvLCBpaW5mbyk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICB0YWJsZV9yZWdpbmZvID0gTlVMTDsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKCB0YWJsZV9yZWdpbmZvLAorICAgICAgICAgICAgbmV0c25tcF9nZXRfY2FjaGVfaGFuZGxlcihJQ01QX1NUQVRTX0NBQ0hFX1RJTUVPVVQsCisgICAgICAgICAgICAgICAgICAgICAgICBpY21wX2xvYWQsIGljbXBfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGljbXBfc3RhdHNfdGJsX29pZCwgT0lEX0xFTkdUSChpY21wX3N0YXRzX3RibF9vaWQpKSk7CisKKyAgICAvKiByZWdpc3RlciBpY21wTXNnU3RhdHNUYWJsZSAqLworICAgIG1zZ19zdGF0c190YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAoIW1zZ19zdGF0c190YWJsZV9pbmZvKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXMobXNnX3N0YXRzX3RhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCBBU05fSU5URUdFUiwgMCk7CisgICAgbXNnX3N0YXRzX3RhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBJQ01QX01TR19TVEFUX0lOX1BLVFM7CisgICAgbXNnX3N0YXRzX3RhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBJQ01QX01TR19TVEFUX09VVF9QS1RTOworCisgICAgbXNnX3N0YXRzX2lpbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2l0ZXJhdG9yX2luZm8pOworICAgIGlmICghbXNnX3N0YXRzX2lpbmZvKQorICAgICAgICBnb3RvIGJhaWw7CisgICAgbXNnX3N0YXRzX2lpbmZvLT5nZXRfZmlyc3RfZGF0YV9wb2ludCA9IGljbXBfbXNnX3N0YXRzX2ZpcnN0X2VudHJ5OworICAgIG1zZ19zdGF0c19paW5mby0+Z2V0X25leHRfZGF0YV9wb2ludCAgPSBpY21wX21zZ19zdGF0c19uZXh0X2VudHJ5OworICAgIG1zZ19zdGF0c19paW5mby0+dGFibGVfcmVnaW5mbyAgICAgICAgPSBtc2dfc3RhdHNfdGFibGVfaW5mbzsKKworICAgIG1zZ19zdGF0c19yZWdpbmZvID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImljbXBNc2dTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgIGljbXBfbXNnX3N0YXRzX3RhYmxlX2hhbmRsZXIsIGljbXBfbXNnX3N0YXRzX3RibF9vaWQsCisgICAgICAgICAgICBPSURfTEVOR1RIKGljbXBfbXNnX3N0YXRzX3RibF9vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7CisKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IyKG1zZ19zdGF0c19yZWdpbmZvLCBtc2dfc3RhdHNfaWluZm8pOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgbXNnX3N0YXRzX3JlZ2luZm8gPSBOVUxMOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlciggbXNnX3N0YXRzX3JlZ2luZm8sCisgICAgICAgICAgICBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyKElDTVBfU1RBVFNfQ0FDSEVfVElNRU9VVCwKKyAgICAgICAgICAgICAgICBpY21wX2xvYWQsIGljbXBfZnJlZSwKKyAgICAgICAgICAgICAgICBpY21wX21zZ19zdGF0c190Ymxfb2lkLCBPSURfTEVOR1RIKGljbXBfbXNnX3N0YXRzX3RibF9vaWQpKSk7CisjZW5kaWYgLyogVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUICovCiAKICNpZmRlZiBVU0lOR19NSUJJSV9JUF9NT0RVTEUKICAgICBpZiAoKytpcF9tb2R1bGVfY291bnQgPT0gMikKQEAgLTEwMyw2ICs3NDUsMTkgQEAKICAgICBpbml0X2tlcm5lbF9zdW5vczUoKTsKICNlbmRpZgogI2VuZGlmCisgICAgcmV0dXJuOworCisjaWZuZGVmIGhwdXgxMQorYmFpbDoKKyNlbmRpZgorI2lmZGVmIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAorICAgIGlmIChtc2dfc3RhdHNfcmVnaW5mbykKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKG1zZ19zdGF0c19yZWdpbmZvKTsKKyAgICBpZiAodGFibGVfcmVnaW5mbykKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHRhYmxlX3JlZ2luZm8pOworI2VuZGlmCisgICAgaWYgKHNjYWxhcl9yZWdpbmZvKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUoc2NhbGFyX3JlZ2luZm8pOwogfQogCiAKQEAgLTExMiw0OCArNzY3LDYgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKiovCiAKLSNpZmRlZiBocHV4MTEKLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlpbnQKLSNlbmRpZgotCi0jaWZkZWYgbGludXgKLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3QgaWNtcF9taWIKLSNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCi0jdW5kZWYgSUNNUFNUQVRfU1lNQk9MCi0jZW5kaWYKLQotI2lmZGVmIHNvbGFyaXMyCi0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUJbWliMl9pY21wX3QKLSNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lDTVBTVEFUCi0jZW5kaWYKLQotI2lmZGVmIE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMCi0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUgICAgIHN0cnVjdCBpY21wX21pYgotI2RlZmluZSBVU0VTX1NOTVBfREVTSUdORURfSUNNUFNUQVQKLSN1bmRlZiBJQ01QX05TVEFUUwotI2VuZGlmCi0KLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQotI2luY2x1ZGUgPGlwaGxwYXBpLmg+Ci0jZGVmaW5lIElDTVBfU1RBVF9TVFJVQ1RVUkUgTUlCX0lDTVAKLSNlbmRpZgotCi0vKiA/PyAjaWYgKGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkgJiYgZGVmaW5lZChJQ01QQ1RMX1NUQVRTKSkgPz8gKi8KLQotI2lmZGVmIEhBVkVfU1lTX0lDTVBJUFNUQVRTX0gKLS8qIG9yICNpZmRlZgkJSEFWRV9TWVNfVENQSVBTVEFUU19IICA/Pz8gKi8KLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3Qga25hCi0jZGVmaW5lIFVTRVNfVFJBRElUSU9OQUxfSUNNUFNUQVQKLSNlbmRpZgotCi0jaWYgIWRlZmluZWQoSUNNUF9TVEFUX1NUUlVDVFVSRSkKLSNkZWZpbmUgSUNNUF9TVEFUX1NUUlVDVFVSRQlzdHJ1Y3QgaWNtcHN0YXQKLSNkZWZpbmUgVVNFU19UUkFESVRJT05BTF9JQ01QU1RBVAotI2VuZGlmCi0KLUlDTVBfU1RBVF9TVFJVQ1RVUkUgaWNtcHN0YXQ7Ci0KLQogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgU3lzdGVtIGluZGVwZW5kZW50IGhhbmRsZXIKQEAgLTE3MSw5ICs3ODQsNiBAQAogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqcmVxdWVzdHZiOwogICAgIGxvbmcgICAgIHJldF92YWx1ZTsKICAgICBvaWQgICAgICBzdWJpZDsKLSNpZmRlZiBVU0VTX1RSQURJVElPTkFMX0lDTVBTVEFUCi0gICAgaW50ICAgICAgaTsKLSNlbmRpZgogCiAgICAgLyoKICAgICAgKiBUaGUgY2FjaGVkIGRhdGEgc2hvdWxkIGFscmVhZHkgaGF2ZSBiZWVuIGxvYWRlZCBieSB0aGUKQEAgLTI4MSwxMyArODkxLDE2IEBACiAgICAgICAgIHJldF92YWx1ZSA9IGljbXBzdGF0LmljbXBPdXRBZGRyTWFza1JlcHM7CiAgICAgICAgIGJyZWFrOwogI2VsaWYgZGVmaW5lZChVU0VTX1RSQURJVElPTkFMX0lDTVBTVEFUKSAmJiAhZGVmaW5lZChfVVNFX1BFUkZTVEFUX1BST1RPQ09MKQotICAgIGNhc2UgSUNNUElOTVNHUzoKKyAgICBjYXNlIElDTVBJTk1TR1M6IHsKKyAgICAgICAgaW50IGk7CisKICAgICAgICAgcmV0X3ZhbHVlID0gaWNtcHN0YXQuaWNwc19iYWRjb2RlICsKICAgICAgICAgICAgIGljbXBzdGF0LmljcHNfdG9vc2hvcnQgKwogICAgICAgICAgICAgaWNtcHN0YXQuaWNwc19jaGVja3N1bSArIGljbXBzdGF0LmljcHNfYmFkbGVuOwogICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVBfTUFYVFlQRTsgaSsrKQogICAgICAgICAgICAgcmV0X3ZhbHVlICs9IGljbXBzdGF0LmljcHNfaW5oaXN0W2ldOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBJQ01QSU5FUlJPUlM6CiAgICAgICAgIHJldF92YWx1ZSA9IGljbXBzdGF0LmljcHNfYmFkY29kZSArCiAgICAgICAgICAgICBpY21wc3RhdC5pY3BzX3Rvb3Nob3J0ICsKQEAgLTMyNiwxMSArOTM5LDE0IEBACiAgICAgY2FzZSBJQ01QSU5BRERSTUFTS1JFUFM6CiAgICAgICAgIHJldF92YWx1ZSA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfTUFTS1JFUExZXTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBJQ01QT1VUTVNHUzoKKyAgICBjYXNlIElDTVBPVVRNU0dTOiB7CisgICAgICAgIGludCBpOworCiAgICAgICAgIHJldF92YWx1ZSA9IGljbXBzdGF0LmljcHNfb2xkc2hvcnQgKyBpY21wc3RhdC5pY3BzX29sZGljbXA7CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUF9NQVhUWVBFOyBpKyspCiAgICAgICAgICAgICByZXRfdmFsdWUgKz0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W2ldOwogICAgICAgICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBJQ01QT1VURVJST1JTOgogICAgICAgICByZXRfdmFsdWUgPSBpY21wc3RhdC5pY3BzX29sZHNob3J0ICsgaWNtcHN0YXQuaWNwc19vbGRpY21wOwogICAgICAgICBicmVhazsKQEAgLTUzMiw2ICsxMTQ4LDcgQEAKIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CkBAIC01NDEsNiArMTE1OCw3IEBACiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcDogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS9pY21wOiBVbnJlY29nbmlzZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwpAQCAtNTUxLDYgKzExNjksMTUzIEBACiB9CiAKIAorI2lmZGVmIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVAoraW50CitpY21wX3N0YXRzX3RhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICAgKnJlcWluZm8sCisgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgKnJlcXVlc3RzKQoreworCW5ldHNubXBfcmVxdWVzdF9pbmZvICAqcmVxdWVzdDsKKwluZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJlcXVlc3R2YjsKKwluZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKwlzdHJ1Y3QgaWNtcF9zdGF0c190YWJsZV9lbnRyeSAgICplbnRyeTsKKwlvaWQgICAgICBzdWJpZDsKKworCXN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworCQljYXNlIE1PREVfR0VUOgorCQkJZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKwkJCQlyZXF1ZXN0dmIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7CisJCQkJZW50cnkgPSAoc3RydWN0IGljbXBfc3RhdHNfdGFibGVfZW50cnkgKiluZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dChyZXF1ZXN0KTsKKwkJCQlpZiAoIWVudHJ5KQorCQkJCQljb250aW51ZTsKKwkJCQl0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisJCQkJc3ViaWQgICAgICA9IHRhYmxlX2luZm8tPmNvbG51bTsKKwkJCQlERUJVR01TR1RMKCggIm1pYklJL2ljbXBTdGF0c1RhYmxlIiwgIm9pZDogIiApKTsKKwkJCQlERUJVR01TR09JRCgoICJtaWJJSS9pY21wU3RhdHNUYWJsZSIsIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSwKKwkJCQkJCSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoICkpOworCQkJCURFQlVHTVNHKCggIm1pYklJL2ljbXBTdGF0c1RhYmxlIiwgIiBJbiAlZCBJbkVyciAlZCBPdXQgJWQgT3V0RXJyICVkXG4iLAorCQkJCQkgICAgICBlbnRyeS0+aWNtcFN0YXRzSW5Nc2dzLCBlbnRyeS0+aWNtcFN0YXRzSW5FcnJvcnMsCisJCQkJCSAgICAgIGVudHJ5LT5pY21wU3RhdHNPdXRNc2dzLCBlbnRyeS0+aWNtcFN0YXRzT3V0RXJyb3JzICkpOworCisJCQkJc3dpdGNoIChzdWJpZCkgeworCQkJCQljYXNlIElDTVBfU1RBVF9JTk1TRzoKKwkJCQkJCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorCQkJCQkJCSh1X2NoYXIgKikmZW50cnktPmljbXBTdGF0c0luTXNncywgc2l6ZW9mKHVpbnQzMl90KSk7CisJCQkJCQlicmVhazsJCisJCQkJCWNhc2UgSUNNUF9TVEFUX0lORVJSOgorCQkJCQkJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisJCQkJCQkJKHVfY2hhciAqKSZlbnRyeS0+aWNtcFN0YXRzSW5FcnJvcnMsIHNpemVvZih1aW50MzJfdCkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSUNNUF9TVEFUX09VVE1TRzoKKwkJCQkJCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorCQkJCQkJCSh1X2NoYXIgKikmZW50cnktPmljbXBTdGF0c091dE1zZ3MsIHNpemVvZih1aW50MzJfdCkpOworCQkJCQkJYnJlYWs7CisJCQkJCWNhc2UgSUNNUF9TVEFUX09VVEVSUjoKKwkJCQkJCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorCQkJCQkJCSh1X2NoYXIgKikmZW50cnktPmljbXBTdGF0c091dEVycm9ycywgc2l6ZW9mKHVpbnQzMl90KSk7CisJCQkJCQlicmVhazsKKwkJCQkJZGVmYXVsdDoKKwkJCQkJCXNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcFN0YXRzVGFibGU6IFVucmVjb2duaXNlZCBjb2x1bW4gKCVkKVxuIiwoaW50KXN1YmlkKTsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJY2FzZSBNT0RFX0dFVE5FWFQ6CisJCWNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKwkJY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKwkJY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKwkJY2FzZSBNT0RFX1NFVF9BQ1RJT046CisJCWNhc2UgTU9ERV9TRVRfQ09NTUlUOgorCQljYXNlIE1PREVfU0VUX0ZSRUU6CisJCWNhc2UgTU9ERV9TRVRfVU5ETzoKKwkJCXNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcFN0YXRzVGFibGU6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKKwkJCQlyZXFpbmZvLT5tb2RlKTsKKwkJCWJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwkJZGVmYXVsdDoKKwkJCXNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcFN0YXRzVGFibGU6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCisJCQkJcmVxaW5mby0+bW9kZSk7CisJCQlicmVhazsKKworCX0KKworCXJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitpbnQKK2ljbXBfbXNnX3N0YXRzX3RhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAgICAgICAgICAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAqcmVxdWVzdHMpCit7CisgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3Q7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpyZXF1ZXN0dmI7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgc3RydWN0IGljbXBfbXNnX3N0YXRzX3RhYmxlX2VudHJ5ICplbnRyeTsKKyAgICBvaWQgc3ViaWQ7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgIHJlcXVlc3R2YiA9IHJlcXVlc3QtPnJlcXVlc3R2YjsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IChzdHJ1Y3QgaWNtcF9tc2dfc3RhdHNfdGFibGVfZW50cnkgKiluZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dChyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgc3ViaWQgPSB0YWJsZV9pbmZvLT5jb2xudW07CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJtaWJJSS9pY21wTXNnU3RhdHNUYWJsZSIsICJvaWQ6ICIgKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dPSUQoKCAibWliSUkvaWNtcE1zZ1N0YXRzVGFibGUiLCByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoICkpOworICAgICAgICAgICAgICAgIERFQlVHTVNHKCggIm1pYklJL2ljbXBNc2dTdGF0c1RhYmxlIiwgIiBJbiAlZCBPdXQgJWQgRmxhZ3MgMHgleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5pY21wTXNnU3RhdHNJblBrdHMsIGVudHJ5LT5pY21wTXNnU3RhdHNPdXRQa3RzLCBlbnRyeS0+ZmxhZ3MgKSk7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHN1YmlkKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgSUNNUF9NU0dfU1RBVF9JTl9QS1RTOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudHJ5LT5mbGFncyAmIElDTVBfTVNHX1NUQVRTX0hBU19JTikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZlbnRyeS0+aWNtcE1zZ1N0YXRzSW5Qa3RzLCBzaXplb2YodWludDMyX3QpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHZiLT50eXBlID0gU05NUF9OT1NVQ0hJTlNUQU5DRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIElDTVBfTVNHX1NUQVRfT1VUX1BLVFM6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnktPmZsYWdzICYgSUNNUF9NU0dfU1RBVFNfSEFTX09VVCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0dmIsIEFTTl9DT1VOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSZlbnRyeS0+aWNtcE1zZ1N0YXRzT3V0UGt0cywgc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3R2Yi0+dHlwZSA9IFNOTVBfTk9TVUNISU5TVEFOQ0U7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcE1zZ1N0YXRzVGFibGU6IFVucmVjb2duaXNlZCBjb2x1bW4gKCVkKVxuIiwoaW50KXN1YmlkKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisgICAgICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaWNtcFN0YXRzVGFibGU6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL2ljbXBTdGF0c1RhYmxlOiBVbnJlY29nbmlzZWQgbW9kZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisjZW5kaWYJCS8qIFVTRVNfU05NUF9ERVNJR05FRF9JQ01QU1RBVCAqLworCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKQEAgLTY4MCwxMyArMTQ0NSwxOSBAQAogICAgIH0gZWxzZSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkxvYWRlZCBJQ01QIEdyb3VwIChsaW51eClcbiIpKTsKICAgICB9CisgICAgaWNtcF9zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOworICAgIGljbXBfbXNnX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CiAgICAgcmV0dXJuIHJldF92YWx1ZTsKIH0KICNlbGlmIGRlZmluZWQoc29sYXJpczIpCiBpbnQKIGljbXBfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqdm1hZ2ljKQogewotICAgIGxvbmcgICAgICAgICAgICByZXRfdmFsdWUgPSAtMTsKKyAgICBpbnQgcmV0X3ZhbHVlID0gLTE7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIG1pYjJfaXB2NklmSWNtcEVudHJ5X3QgaWZzdGF0OworICAgIGludCByZXEgPSBHRVRfRklSU1Q7CisjZW5kaWYKIAogICAgIHJldF92YWx1ZSA9CiAgICAgICAgIGdldE1pYnN0YXQoTUlCX0lDTVAsICZpY21wc3RhdCwgc2l6ZW9mKG1pYjJfaWNtcF90KSwgR0VUX0ZJUlNULApAQCAtNjk3LDggKzE0NjgsODUgQEAKICAgICB9IGVsc2UgewogICAgICAgICBERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJMb2FkZWQgSUNNUCBHcm91cCAoc29sYXJpcylcbiIpKTsKICAgICB9CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgbWVtc2V0KCZpY21wNnN0YXQsIDAsIHNpemVvZihpY21wNnN0YXQpKTsKKyAgICB3aGlsZSAoKHJldF92YWx1ZSA9IGdldE1pYnN0YXQoTUlCX0lDTVA2LCAmaWZzdGF0LCBzaXplb2YoaWZzdGF0KSwgcmVxLAorICAgICAgICAgICAgICAgICAgICZHZXRfZXZlcnl0aGluZywgTlVMTCkpID09IDApIHsKKwlpZiAoIHJldF92YWx1ZSA8IDAgKSB7CisJICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkZhaWxlZCB0byBsb2FkIElDTVA2IEdyb3VwIChzb2xhcmlzKVxuIikpOworCX0gZWxzZSB7CisJICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkxvYWRlZCBJQ01QNiBHcm91cCAoc29sYXJpcylcbiIpKTsKKwl9CisJaWNtcDZzdGF0LmljbXA2T3V0TXNncyArPSBpZnN0YXQuaXB2NklmSWNtcE91dE1zZ3M7CisJaWNtcDZzdGF0LmljbXA2SW5Nc2dzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5Nc2dzOworCWljbXA2c3RhdC5pY21wNkluRXJyb3JzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5FcnJvcnM7CisJaWNtcDZzdGF0LmljbXA2T3V0RGVzdFVucmVhY2hzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0RGVzdFVucmVhY2hzOworCWljbXA2c3RhdC5pY21wNkluRGVzdFVucmVhY2hzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5EZXN0VW5yZWFjaHM7CisJaWNtcDZzdGF0LmljbXA2T3V0UGt0VG9vQmlncyArPSBpZnN0YXQuaXB2NklmSWNtcE91dFBrdFRvb0JpZ3M7CisJaWNtcDZzdGF0LmljbXA2SW5Qa3RUb29CaWdzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5Qa3RUb29CaWdzOworCWljbXA2c3RhdC5pY21wNk91dFRpbWVFeGNkcyArPSBpZnN0YXQuaXB2NklmSWNtcE91dFRpbWVFeGNkczsKKwlpY21wNnN0YXQuaWNtcDZJblRpbWVFeGNkcyArPSBpZnN0YXQuaXB2NklmSWNtcEluVGltZUV4Y2RzOworCWljbXA2c3RhdC5pY21wNk91dFBhcm1Qcm9ibGVtcyArPSBpZnN0YXQuaXB2NklmSWNtcE91dFBhcm1Qcm9ibGVtczsKKwlpY21wNnN0YXQuaWNtcDZJblBhcm1Qcm9ibGVtcyArPSBpZnN0YXQuaXB2NklmSWNtcEluUGFybVByb2JsZW1zOworCWljbXA2c3RhdC5pY21wNk91dEVjaG9zICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0RWNob3M7CisJaWNtcDZzdGF0LmljbXA2SW5FY2hvcyArPSBpZnN0YXQuaXB2NklmSWNtcEluRWNob3M7CisJaWNtcDZzdGF0LmljbXA2T3V0RWNob1JlcGxpZXMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRFY2hvUmVwbGllczsKKwlpY21wNnN0YXQuaWNtcDZJbkVjaG9SZXBsaWVzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5FY2hvUmVwbGllczsKKwlpY21wNnN0YXQuaWNtcDZPdXRSb3V0ZXJTb2xpY2l0cyArPSBpZnN0YXQuaXB2NklmSWNtcE91dFJvdXRlclNvbGljaXRzOworCWljbXA2c3RhdC5pY21wNkluUm91dGVyU29saWNpdHMgKz0gaWZzdGF0LmlwdjZJZkljbXBJblJvdXRlclNvbGljaXRzOworCWljbXA2c3RhdC5pY21wNk91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzOworCWljbXA2c3RhdC5pY21wNkluTmVpZ2hib3JBZHZlcnRpc2VtZW50cyArPSBpZnN0YXQuaXB2NklmSWNtcEluTmVpZ2hib3JBZHZlcnRpc2VtZW50czsKKwlpY21wNnN0YXQuaWNtcDZPdXROZWlnaGJvclNvbGljaXRzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0TmVpZ2hib3JTb2xpY2l0czsKKwlpY21wNnN0YXQuaWNtcDZJbk5laWdoYm9yU29saWNpdHMgKz0gaWZzdGF0LmlwdjZJZkljbXBJbk5laWdoYm9yU29saWNpdHM7CisJaWNtcDZzdGF0LmljbXA2T3V0UmVkaXJlY3RzICs9IGlmc3RhdC5pcHY2SWZJY21wT3V0UmVkaXJlY3RzOworCWljbXA2c3RhdC5pY21wNkluUmVkaXJlY3RzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5SZWRpcmVjdHM7CisJaWNtcDZzdGF0LmljbXA2SW5Hcm91cE1lbWJRdWVyaWVzICs9IGlmc3RhdC5pcHY2SWZJY21wSW5Hcm91cE1lbWJRdWVyaWVzOworCWljbXA2c3RhdC5pY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlcyArPSBpZnN0YXQuaXB2NklmSWNtcE91dEdyb3VwTWVtYlJlc3BvbnNlczsKKwlpY21wNnN0YXQuaWNtcDZJbkdyb3VwTWVtYlJlc3BvbnNlcyArPSBpZnN0YXQuaXB2NklmSWNtcEluR3JvdXBNZW1iUmVzcG9uc2VzOworCWljbXA2c3RhdC5pY21wNk91dEdyb3VwTWVtYlJlZHVjdGlvbnMgKz0gaWZzdGF0LmlwdjZJZkljbXBPdXRHcm91cE1lbWJSZWR1Y3Rpb25zOworCWljbXA2c3RhdC5pY21wNkluR3JvdXBNZW1iUmVkdWN0aW9ucyArPSBpZnN0YXQuaXB2NklmSWNtcEluR3JvdXBNZW1iUmVkdWN0aW9uczsKKwlyZXEgPSBHRVRfTkVYVDsKKyAgICB9CisjZW5kaWYKKworICAgIGljbXBfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKKyAgICBpY21wX21zZ19zdGF0c19sb2FkKGNhY2hlLCB2bWFnaWMpOwogICAgIHJldHVybiByZXRfdmFsdWU7CiB9CisKK3N0YXRpYyBpbnQKK3NvbGFyaXNfcmVhZF9pY21wX3N0YXQoSUNNUF9TVEFUX1NUUlVDVFVSRSAqbWliKQoreworICAgICptaWIgPSBpY21wc3RhdDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXBfbXNnX3N0YXQoSUNNUF9TVEFUX1NUUlVDVFVSRSAqbWliLCBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqbXNnX21pYiwgaW50ICpmbGFnKQoreworICAgICptaWIgPSBpY21wc3RhdDsKKyAgICAqZmxhZyA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CitzdGF0aWMgaW50Citzb2xhcmlzX3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICptaWIpCit7CisgICAgKm1pYiA9IGljbXA2c3RhdDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorc29sYXJpc19yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKm1pYiwgc3RydWN0IGljbXA2X21zZ19taWIgKm1zZ19taWIsIGludCAqZmxhZykKK3sKKyAgICAqbWliID0gaWNtcDZzdGF0OworICAgICpmbGFnID0gMDsKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZgorCiAjZWxpZiBkZWZpbmVkKE5FVEJTRF9TVEFUU19WSUFfU1lTQ1RMKQogaW50CiBpY21wX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKQEAgLTcxMiw5ICsxNTYwLDEwIEBACiAgICAgfSBlbHNlIHsKIAlERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJMb2FkZWQgSUNNUCBHcm91cCAobmV0YnNkKVxuIikpOwogICAgIH0KKyAgICBpY21wX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CisgICAgaWNtcF9tc2dfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKICAgICByZXR1cm4gcmV0X3ZhbHVlOwogfQotCiAjZWxpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQogaW50CiBpY21wX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKQEAgLTc1MiwxNyArMTYwMSwxNiBAQAogaWNtcF9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMpCiB7CiAgICAgbG9uZyAgICAgICAgICAgIHJldF92YWx1ZSA9IC0xOwotICAgIHN0YXRpYyBpbnQgICAgICBzbmFtZVs0XSA9Ci0gICAgICAgIHsgQ1RMX05FVCwgUEZfSU5FVCwgSVBQUk9UT19JQ01QLCBJQ01QQ1RMX1NUQVRTIH07Ci0gICAgc2l6ZV90ICAgICAgICAgIGxlbiA9IHNpemVvZihpY21wc3RhdCk7CiAKLSAgICByZXRfdmFsdWUgPSBzeXNjdGwoc25hbWUsIDQsICZpY21wc3RhdCwgJmxlbiwgMCwgMCk7CisgICAgcmV0X3ZhbHVlID0gc3lzY3RsX3JlYWRfaWNtcF9zdGF0KCZpY21wc3RhdCk7CiAKICAgICBpZiAoIHJldF92YWx1ZSA8IDAgKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9pY21wIiwgIkZhaWxlZCB0byBsb2FkIElDTVAgR3JvdXAgKHN5c2N0bClcbiIpKTsKKwlERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJGYWlsZWQgdG8gbG9hZCBJQ01QIEdyb3VwIChuZXRic2QpXG4iKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2ljbXAiLCAiTG9hZGVkIElDTVAgR3JvdXAgKHN5c2N0bClcbiIpKTsKKwlERUJVR01TR1RMKCgibWliSUkvaWNtcCIsICJMb2FkZWQgSUNNUCBHcm91cCAobmV0YnNkKVxuIikpOwogICAgIH0KKyAgICBpY21wX3N0YXRzX2xvYWQoY2FjaGUsIHZtYWdpYyk7CisgICAgaWNtcF9tc2dfc3RhdHNfbG9hZChjYWNoZSwgdm1hZ2ljKTsKICAgICByZXR1cm4gcmV0X3ZhbHVlOwogfQogI2VsaWYgZGVmaW5lZChIQVZFX1NZU19UQ1BJUFNUQVRTX0gpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9pY21wLmgKaW5kZXggY2RhYWM1ZC4uZDA3ODQxYSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaWNtcC5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2ljbXAuaApAQCAtNSwxNSArNSwzMiBAQAogI2lmbmRlZiBfTUlCR1JPVVBfSUNNUF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9JQ01QX0gKIAotY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwgICAgICAgIGtlcm5lbF9zdW5vczUpCitjb25maWdfYXJjaF9yZXF1aXJlKHNvbGFyaXMyLCAga2VybmVsX3N1bm9zNSkKIGNvbmZpZ19hcmNoX3JlcXVpcmUobGludXgsICAgICBtaWJJSS9rZXJuZWxfbGludXgpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2Q0LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDUsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkNiwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2Q3LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZnJlZWJzZDgsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShmcmVlYnNkOSwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGZyZWVic2QxMCwgbWliSUkva2VybmVsX3N5c2N0bCkKIGNvbmZpZ19hcmNoX3JlcXVpcmUobmV0YnNkLCAgICBtaWJJSS9rZXJuZWxfbmV0YnNkKQogY29uZmlnX2FyY2hfcmVxdWlyZShuZXRic2RlbGYsIG1pYklJL2tlcm5lbF9uZXRic2QpCitjb25maWdfYXJjaF9yZXF1aXJlKG9wZW5ic2Q0LCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUob3BlbmJzZDUsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShkcmFnb25mbHkyLCBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShkcmFnb25mbHkzLCBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShkYXJ3aW4xMCwgIG1pYklJL2tlcm5lbF9zeXNjdGwpCitjb25maWdfYXJjaF9yZXF1aXJlKGRhcndpbjExLCAgbWliSUkva2VybmVsX3N5c2N0bCkKK2NvbmZpZ19hcmNoX3JlcXVpcmUoZGFyd2luMTIsICBtaWJJSS9rZXJuZWxfc3lzY3RsKQorY29uZmlnX2FyY2hfcmVxdWlyZShkYXJ3aW4xMywgIG1pYklJL2tlcm5lbF9zeXNjdGwpCiAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmg+CiAKIGV4dGVybiB2b2lkICAgICBpbml0X2ljbXAodm9pZCk7CiBleHRlcm4gTmV0c25tcF9Ob2RlX0hhbmRsZXIgaWNtcF9oYW5kbGVyOworZXh0ZXJuIE5ldHNubXBfTm9kZV9IYW5kbGVyIGljbXBfc3RhdHNfdGFibGVfaGFuZGxlcjsKK2V4dGVybiBOZXRzbm1wX05vZGVfSGFuZGxlciBpY21wX21zZ19zdGF0c190YWJsZV9oYW5kbGVyOwogZXh0ZXJuIE5ldHNubXBDYWNoZUxvYWQgaWNtcF9sb2FkOwogZXh0ZXJuIE5ldHNubXBDYWNoZUZyZWUgaWNtcF9mcmVlOwogCkBAIC00NCw0ICs2MSwxNyBAQAogI2RlZmluZSBJQ01QT1VUQUREUk1BU0tTICAgICAyNQogI2RlZmluZSBJQ01QT1VUQUREUk1BU0tSRVBTICAyNgogCisjZGVmaW5lIElDTVBTVEFUU1RBQkxFICAgICAgIDI5CisjZGVmaW5lIElDTVBfU1RBVF9JUFZFUiAgICAgICAxCisjZGVmaW5lIElDTVBfU1RBVF9JTk1TRyAgICAgICAyIAorI2RlZmluZSBJQ01QX1NUQVRfSU5FUlIgICAgICAgMyAKKyNkZWZpbmUgSUNNUF9TVEFUX09VVE1TRyAgICAgIDQgCisjZGVmaW5lIElDTVBfU1RBVF9PVVRFUlIgICAgICA1IAorCisjZGVmaW5lIElDTVBNU0dTVEFUU1RBQkxFICAgICAzMAorI2RlZmluZSBJQ01QX01TR19TVEFUX0lQVkVSICAgIDEKKyNkZWZpbmUgSUNNUF9NU0dfU1RBVF9UWVBFICAgICAyCisjZGVmaW5lIElDTVBfTVNHX1NUQVRfSU5fUEtUUyAgMworI2RlZmluZSBJQ01QX01TR19TVEFUX09VVF9QS1RTIDQKKwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfSUNNUF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmMKaW5kZXggYzg5NmZmMi4uMjZmZmViYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuYwpAQCAtMTUsOCArMTUsMTEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAotI2lmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUxfTEFURSkKK25ldHNubXBfZmVhdHVyZV9wcm92aWRlKGludGVyZmFjZV9sZWdhY3kpCisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9MQVRFKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgpAQCAtMzcsMTAgKzQwLDcgQEAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpICYmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMX0xBVEUpCisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkgJiYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9MQVRFKQogI2RlZmluZSBfS0VSTkVMIDEKICNkZWZpbmUgX0lfREVGSU5FRF9LRVJORUwKICNlbmRpZgpAQCAtNTcsMTEgKzU3LDcgQEAKICNlbmRpZgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQogIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTE5Nyw0OSArMTkzLDc5IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmg+CiAKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKLS8qIGlmIHlvdSB3YW50IGNhY2hpbmcgZW5hYmxlZCBmb3Igc3BlZWQgcmV0cml2YWwgcHVycG9zZXMsIHNldCB0aGlzIHRvIDU/Ki8KKy8qIGlmIHlvdSB3YW50IGNhY2hpbmcgZW5hYmxlZCBmb3Igc3BlZWQgcmV0cmlldmFsIHB1cnBvc2VzLCBzZXQgdGhpcyB0byA1PyovCiAjZGVmaW5lIE1JTkxPQURGUkVRIDAgICAgICAgICAgICAgICAgICAgICAvKiBtaW4gcmVsb2FkIGZyZXF1ZW5jeSBpbiBzZWNvbmRzICovCiAjaWZkZWYgbGludXgKIHN0YXRpYyB1bnNpZ25lZCBsb25nIExhc3RMb2FkID0gMDsgICAgICAgIC8qIEVUIGluIHNlY3MgYXQgbGFzdCB0YWJsZSBsb2FkICovCiAjZW5kaWYKIAotZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHN0YXJ0dGltZTsKKyNkZWZpbmUgc3RhcnR0aW1lICgqKGNvbnN0IHN0cnVjdCB0aW1ldmFsKiluZXRzbm1wX2dldF9hZ2VudF9zdGFydHRpbWUoKSkKIAogc3RydWN0IHZhcmlhYmxlMyBpbnRlcmZhY2VzX3ZhcmlhYmxlc1tdID0gewotICAgIHtJRk5VTUJFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaW50ZXJmYWNlcywgMSwgezF9fSwKLSAgICB7SUZJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDF9fSwKLSAgICB7SUZERVNDUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMn19LAotICAgIHtORVRTTk1QX0lGVFlQRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDN9fSwKLSAgICB7SUZNVFUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA0fX0sCi0gICAge0lGU1BFRUQsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgNX19LAotICAgIHtJRlBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA2fX0sCisgICAge05FVFNOTVBfSUZOVU1CRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2ludGVyZmFjZXMsIDEsIHsxfX0sCisgICAge05FVFNOTVBfSUZJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDF9fSwKKyAgICB7TkVUU05NUF9JRkRFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyfX0sCisgICAge05FVFNOTVBfSUZUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgM319LAorICAgIHtORVRTTk1QX0lGTVRVLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgNH19LAorICAgIHtORVRTTk1QX0lGU1BFRUQsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgNX19LAorICAgIHtORVRTTk1QX0lGUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDZ9fSwKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSAgICB7SUZBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA3fX0sCisgICAge05FVFNOTVBfSUZBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA3fX0sCiAjZWxzZQotICAgIHtJRkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgN319LAorICAgIHtORVRTTk1QX0lGQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA3fX0sCiAjZW5kaWYKLSAgICB7SUZPUEVSU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgOH19LAotICAgIHtJRkxBU1RDSEFOR0UsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDl9fSwKLSAgICB7SUZJTk9DVEVUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDEwfX0sCi0gICAge0lGSU5VQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxMX19LAotICAgIHtJRklOTlVDQVNUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDEyfX0sCi0gICAge0lGSU5ESVNDQVJEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDEzfX0sCi0gICAge0lGSU5FUlJPUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxNH19LAotICAgIHtJRklOVU5LTk9XTlBST1RPUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE1fX0sCi0gICAge0lGT1VUT0NURVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTZ9fSwKLSAgICB7SUZPVVRVQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxN319LAotICAgIHtJRk9VVE5VQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxOH19LAotICAgIHtJRk9VVERJU0NBUkRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTl9fSwKLSAgICB7SUZPVVRFUlJPUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAyMH19LAotICAgIHtJRk9VVFFMRU4sIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMjF9fSwKLSAgICB7SUZTUEVDSUZJQywgQVNOX09CSkVDVF9JRCwgUk9OTFksIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMjJ9fQorI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB7TkVUU05NUF9JRkFETUlOU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgN319LAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB7TkVUU05NUF9JRk9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA4fX0sCisgICAge05FVFNOTVBfSUZMQVNUQ0hBTkdFLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCA5fX0sCisgICAge05FVFNOTVBfSUZJTk9DVEVUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDEwfX0sCisgICAge05FVFNOTVBfSUZJTlVDQVNUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDExfX0sCisgICAge05FVFNOTVBfSUZJTk5VQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxMn19LAorICAgIHtORVRTTk1QX0lGSU5ESVNDQVJEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDEzfX0sCisgICAge05FVFNOTVBfSUZJTkVSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE0fX0sCisgICAge05FVFNOTVBfSUZJTlVOS05PV05QUk9UT1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmRW50cnksIDMsIHsyLCAxLCAxNX19LAorICAgIHtORVRTTk1QX0lGT1VUT0NURVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTZ9fSwKKyAgICB7TkVUU05NUF9JRk9VVFVDQVNUUEtUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDE3fX0sCisgICAge05FVFNOTVBfSUZPVVROVUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTh9fSwKKyAgICB7TkVUU05NUF9JRk9VVERJU0NBUkRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMTl9fSwKKyAgICB7TkVUU05NUF9JRk9VVEVSUk9SUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDIwfX0sCisgICAge05FVFNOTVBfSUZPVVRRTEVOLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZFbnRyeSwgMywgezIsIDEsIDIxfX0sCisgICAge05FVFNOTVBfSUZTUEVDSUZJQywgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZkVudHJ5LCAzLCB7MiwgMSwgMjJ9fQogfTsKIAogLyoKQEAgLTM4NSw3ICs0MTEsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRk5VTUJFUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZOVU1CRVI6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gSW50ZXJmYWNlX1NjYW5fR2V0X0NvdW50KCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgZGVmYXVsdDoKQEAgLTU3MiwxMCArNTk4LDEwIEBACiAgICAgaWZfcHRyID0gbmV0c25tcF9hY2Nlc3NfaW50ZXJmYWNlX2VudHJ5X292ZXJyaWRlc19nZXQoaWZfbmFtZSk7CiAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZJTkRFWDoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRFWDoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpbnRlcmZhY2U7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkRFU0NSOgorICAgIGNhc2UgTkVUU05NUF9JRkRFU0NSOgogICAgICAgICBjcCA9IGlmX25hbWU7CiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGlmX25hbWUpOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBjcDsKQEAgLTU4NSwxNCArNjExLDE0IEBACiAgICAgICAgIGVsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV90eXBlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZNVFU6CisgICAgY2FzZSBORVRTTk1QX0lGTVRVOgogICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX210dTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFRUQ6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFRUQ6CiAgICAgICAgIGlmIChpZl9wdHIpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+c3BlZWQ7CiAgICAgICAgIGVsc2UgewotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9iYXVkcmF0ZS5pZnNfdmFsdWUgPDwKICAgICAgICAgICAgIGlmX21zZy5pZm1fZGF0YS5pZmlfYmF1ZHJhdGUuaWZzX2xvZzI7CiAjZWxzZQpAQCAtNjAwLDUyICs2MjYsNTIgQEAKICNlbmRpZgogICAgICAgICB9CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlBIWVNBRERSRVNTOgorICAgIGNhc2UgTkVUU05NUF9JRlBIWVNBRERSRVNTOgogICAgICAgICAvKgogICAgICAgICAgKiBYWFggCiAgICAgICAgICAqLwogICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBjYXNlIElGQURNSU5TVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGQURNSU5TVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfbXNnLmlmbV9mbGFncyAmIElGRl9VUCA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPUEVSU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRk9QRVJTVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfbXNnLmlmbV9mbGFncyAmIElGRl9SVU5OSU5HID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47CiAgICAgICAgIC8qCiAgICAgICAgICAqIGlmTGFzdENoYW5nZSAKICAgICAgICAgICovCi0gICAgY2FzZSBJRklOT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRklOT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfaWJ5dGVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPQogICAgICAgICAgICAgKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9pcGFja2V0cyAtCiAgICAgICAgICAgICBpZl9tc2cuaWZtX2RhdGEuaWZpX2ltY2FzdHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9pbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkRJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRklORElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9pcWRyb3BzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX2llcnJvcnM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVU5LTk9XTlBST1RPUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVOS05PV05QUk9UT1M6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9ub3Byb3RvOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRPQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfb2J5dGVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRVQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9CiAgICAgICAgICAgICAodV9sb25nKSBpZl9tc2cuaWZtX2RhdGEuaWZpX29wYWNrZXRzIC0KICAgICAgICAgICAgIGlmX21zZy5pZm1fZGF0YS5pZmlfb21jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmX21zZy5pZm1fZGF0YS5pZmlfb21jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURElTQ0FSRFM6CiAjaWZkZWYgaWZfb2Ryb3BzCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9vZHJvcHM7CiAjZWxzZQpAQCAtNjU1LDEwICs2ODEsMTAgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVEVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRFUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZfbXNnLmlmbV9kYXRhLmlmaV9vZXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZMQVNUQ0hBTkdFOgorICAgIGNhc2UgTkVUU05NUF9JRkxBU1RDSEFOR0U6CiAjaWZkZWYgaXJpeDYKICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOwogI2Vsc2UKQEAgLTc1Miw5ICs3NzgsNiBAQAogICAgIHN0YXRpYyBjaGFyICAgICBOYW1lWzE2XTsKICAgICBjaGFyICAgICAgICAgICAqY3A7CiAgICAgY29uZl9pZl9saXN0ICAgKmlmX3B0cjsKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDCi0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKLSNlbmRpZgogCiAgICAgaW50ZXJmYWNlID0KICAgICAgICAgaGVhZGVyX2lmRW50cnkodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCk7CkBAIC03NjUsMTAgKzc4OCwxMCBAQAogICAgIGlmX3B0ciA9IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9vdmVycmlkZXNfZ2V0KE5hbWUpOwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGSU5ERVg6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaW50ZXJmYWNlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZERVNDUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZERVNDUjoKICAgICAgICAgY3AgPSBOYW1lOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihjcCk7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIGNwOwpAQCAtNzc2LDI2ICs3OTksMjYgQEAKICAgICAgICAgaWYgKGlmX3B0cikKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT50eXBlOwogICAgICAgICBlbHNlIHsKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1RZUEUKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9UWVBFCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3R5cGU7CiAjZWxzZQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAxOyAgICAvKiBPVEhFUiAqLwogI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTVRVOnsKKyAgICBjYXNlIE5FVFNOTVBfSUZNVFU6ewogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAobG9uZykgaWZuZXQuaWZfbXR1OwogICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICAgICAgfQotICAgIGNhc2UgSUZTUEVFRDoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVFRDoKICAgICAgICAgaWYgKGlmX3B0cikKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT5zcGVlZDsKICAgICAgICAgZWxzZSB7Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2JhdWRyYXRlOwotI2VsaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9TUEVFRAorI2VsaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfU1BFRUQKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc3BlZWQ7Ci0jZWxpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1RZUEUgJiYgZGVmaW5lZChJRlRfRVRIRVIpCisjZWxpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9UWVBFICYmIGRlZmluZWQoSUZUX0VUSEVSKQogICAgICAgICAgICAgaWYgKGlmbmV0LmlmX3R5cGUgPT0gSUZUX0VUSEVSKQogICAgICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gMTAwMDAwMDA7CiAgICAgICAgICAgICBpZiAoaWZuZXQuaWZfdHlwZSA9PSBJRlRfUDEwKQpAQCAtODE0LDkgKzgzNyw5IEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZQSFlTQUREUkVTUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZQSFlTQUREUkVTUzoKICAgICAgICAgSW50ZXJmYWNlX0dldF9FdGhlcl9CeV9JbmRleChpbnRlcmZhY2UsIHJldHVybl9idWYpOwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogCSp2YXJfbGVuID0gMDsKICNlbHNlCiAgICAgICAgIGlmICgocmV0dXJuX2J1ZlswXSA9PSAwKSAmJiAocmV0dXJuX2J1ZlsxXSA9PSAwKSAmJgpAQCAtODI3LDE0ICs4NTAsMTQgQEAKICAgICAgICAgICAgICp2YXJfbGVuID0gNjsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSByZXR1cm5fYnVmOwotICAgIGNhc2UgSUZBRE1JTlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZBRE1JTlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9mbGFncyAmIElGRl9VUCA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPUEVSU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRk9QRVJTVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZmxhZ3MgJiBJRkZfUlVOTklORyA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZMQVNUQ0hBTkdFOgotI2lmIGRlZmluZWQoU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQykgJiYgIShkZWZpbmVkKGZyZWVic2QyKSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA8IDE5OTYwNykKKyAgICBjYXNlIE5FVFNOTVBfSUZMQVNUQ0hBTkdFOgorI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMpICYmICEoZGVmaW5lZChmcmVlYnNkMikgJiYgX19GcmVlQlNEX3ZlcnNpb24gPCAxOTk2MDcpCiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYWCAtIFNOTVAncyBpZkxhc3RjaGFuZ2UgaXMgdGltZSB3aGVuIG9wLiBzdGF0dXMgY2hhbmdlZAogICAgICAgICAgKiAqIEZyZWVCU0QncyBpZl9sYXN0Y2hhbmdlIGlzIHRpbWUgd2hlbiBwYWNrZXQgd2FzIGlucHV0IG9yIG91dHB1dApAQCAtODYzLDkgKzg4Niw5IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gMDsgICAgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOT0NURVRTOgotI2lmZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSUJZVEVTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk9DVEVUUzoKKyNpZmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JQllURVMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaWJ5dGVzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaWJ5dGVzOwpAQCAtODc3LDE1ICs5MDAsMTUgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcGFja2V0cyAqIDMwODsgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFM6CiAgICAgICAgIHsKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXBhY2tldHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXBhY2tldHM7CiAjZW5kaWYKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lNQ0FTVFMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lNQ0FTVFMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgICAgICBsb25nX3JldHVybiAtPSAodV9sb25nKSBpZm5ldC5pZl9pbWNhc3RzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgICAgICBsb25nX3JldHVybiAtPSAodV9sb25nKSBpZm5ldC5pZl9pbWNhc3RzOwpAQCAtODkzLDkgKzkxNiw5IEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk5VQ0FTVFBLVFM6Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JTUNBU1RTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk5VQ0FTVFBLVFM6CisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSU1DQVNUUworI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pbWNhc3RzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaW1jYXN0czsKQEAgLTkwNyw5ICs5MzAsOSBAQAogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORElTQ0FSRFM6Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JUURST1BTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRJU0NBUkRTOgorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lRRFJPUFMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfaXFkcm9wcyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lxZHJvcHM7CkBAIC05MjEsMTYgKzk0NCwxNiBAQAogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORVJST1JTOgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGSU5FUlJPUlM6CisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2llcnJvcnMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pZXJyb3JzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVU5LTk9XTlBST1RPUzoKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX05PUFJPVE8KLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorICAgIGNhc2UgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUzoKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9OT1BST1RPCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX25vcHJvdG8gJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9ub3Byb3RvOwpAQCAtOTQyLDkgKzk2NSw5IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUT0NURVRTOgotI2lmZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT0JZVEVTCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRPQ1RFVFM6CisjaWZkZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT0JZVEVTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29ieXRlcyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29ieXRlczsKQEAgLTk1NiwxNSArOTc5LDE1IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb3BhY2tldHMgKiAzMDg7IC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFM6CiAgICAgICAgIHsKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb3BhY2tldHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb3BhY2tldHM7CiAjZW5kaWYKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09NQ0FTVFMKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09NQ0FTVFMKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgICAgICBsb25nX3JldHVybiAtPSAodV9sb25nKSBpZm5ldC5pZl9vbWNhc3RzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgICAgICBsb25nX3JldHVybiAtPSAodV9sb25nKSBpZm5ldC5pZl9vbWNhc3RzOwpAQCAtOTcyLDkgKzk5NSw5IEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVROVUNBU1RQS1RTOgotI2lmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUwotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUzoKKyNpZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PTUNBU1RTCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX29tY2FzdHMgJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vbWNhc3RzOwpAQCAtOTg2LDI4ICsxMDA5LDI4IEBACiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgMDsgICAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURElTQ0FSRFM6Ci0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRESVNDQVJEUzoKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc25kLmlmcV9kcm9wcyAmIDB4ZmZmZmZmZmY7CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NuZC5pZnFfZHJvcHM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURVJST1JTOgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGT1VURVJST1JTOgorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9vZXJyb3JzICYgMHhmZmZmZmZmZjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfb2Vycm9yczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRRTEVOOgotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisgICAgY2FzZSBORVRTTk1QX0lGT1VUUUxFTjoKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc25kLmlmcV9sZW4gJiAweGZmZmZmZmZmOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9zbmQuaWZxX2xlbjsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVDSUZJQzoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVDSUZJQzoKICAgICAgICAgKnZhcl9sZW4gPSBudWxsT2lkTGVuOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBudWxsT2lkOwogICAgIGRlZmF1bHQ6CkBAIC0xMDQwLDcgKzEwNjMsNyBAQAogICAgIHN0YXRpYyBjaGFyICAgICBOYW1lWzE2XTsKICNlbmRpZgogICAgIHJlZ2lzdGVyIGNoYXIgICpjcDsKLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMKICAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwogI2VuZGlmCiAjaWYgIWRlZmluZWQoaHB1eDExKQpAQCAtMTA4MywxMCArMTEwNiwxMCBAQAogICAgIGlmX3B0ciA9IG5ldHNubXBfYWNjZXNzX2ludGVyZmFjZV9lbnRyeV9vdmVycmlkZXNfZ2V0KE5hbWUpOwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGSU5ERVg6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaW50ZXJmYWNlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZERVNDUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZERVNDUjoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgY3AgPSBpZm5ldC5pZl9lbnRyeS5pZkRlc2NyOwogI2Vsc2UKQEAgLTExMTEsNyArMTEzNCw3IEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZNVFU6eworICAgIGNhc2UgTkVUU05NUF9JRk1UVTp7CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZm5ldC5pZl9lbnRyeS5pZk10dTsKICNlbHNlCkBAIC0xMTE5LDcgKzExNDIsNyBAQAogI2VuZGlmCiAgICAgICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgICAgICB9Ci0gICAgY2FzZSBJRlNQRUVEOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUVEOgogICAgICAgICBpZiAoaWZfcHRyKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnNwZWVkOwogICAgICAgICBlbHNlIHsKQEAgLTExMzMsNyArMTE1Niw3IEBACiAjZW5kaWYKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZQSFlTQUREUkVTUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZQSFlTQUREUkVTUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgKnZhcl9sZW4gPSBpZm5ldC5pZl9lbnRyeS5pZlBoeXNBZGRyZXNzLm9fbGVuZ3RoOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBpZm5ldC5pZl9lbnRyeS5pZlBoeXNBZGRyZXNzLm9fYnl0ZXM7CkBAIC0xMTQ3LDIxICsxMTcwLDIxIEBACiAgICAgICAgICAgICAqdmFyX2xlbiA9IDY7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIHJldHVybl9idWY7CiAjZW5kaWYKLSAgICBjYXNlIElGQURNSU5TVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGQURNSU5TVEFUVVM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZBZG1pbjsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZmxhZ3MgJiBJRkZfVVAgPyAxIDogMjsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPUEVSU1RBVFVTOgorICAgIGNhc2UgTkVUU05NUF9JRk9QRVJTVEFUVVM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPcGVyOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9mbGFncyAmIElGRl9SVU5OSU5HID8gMSA6IDI7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTEFTVENIQU5HRToKKyAgICBjYXNlIE5FVFNOTVBfSUZMQVNUQ0hBTkdFOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmTGFzdENoYW5nZTsKICNlbHNlCkBAIC0xMTcxLDcgKzExOTQsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAwOyAgICAvKiBYWFggKi8KICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk9DVEVUUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZkluT2N0ZXRzOwogI2Vsc2UKQEAgLTExODEsNyArMTIwNCw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbmV0LmlmX2lwYWNrZXRzICogMzA4OyAgICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZJblVjYXN0UGt0czsKICNlbHNlCkBAIC0xMTkxLDcgKzEyMTQsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9pcGFja2V0czsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmSW5OVWNhc3RQa3RzOwogI2Vsc2UKQEAgLTEyMDEsNyArMTIyNCw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5ESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRJU0NBUkRTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmSW5EaXNjYXJkczsKICNlbHNlCkBAIC0xMjExLDE0ICsxMjM0LDE0IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5FUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5FUlJPUlM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZJbkVycm9yczsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfaWVycm9yczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVOS05PV05QUk9UT1M6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmSW5Vbmtub3duUHJvdG9zOwogI2Vsc2UKQEAgLTEyMjgsNyArMTI1MSw3IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE9DVEVUUzoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk91dE9jdGV0czsKICNlbHNlCkBAIC0xMjM4LDcgKzEyNjEsNyBAQAogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm5ldC5pZl9vcGFja2V0cyAqIDMwODsgICAgIC8qIFhYWCAqLwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPdXRVY2FzdFBrdHM7CiAjZWxzZQpAQCAtMTI0OCw3ICsxMjcxLDcgQEAKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZuZXQuaWZfb3BhY2tldHM7CiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3V0TlVjYXN0UGt0czsKICNlbHNlCkBAIC0xMjU4LDI4ICsxMjgxLDI4IEBACiAgICAgICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIDA7ICAgLyogWFhYICovCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURElTQ0FSRFM6CiAjaWYgZGVmaW5lZChocHV4MTEpCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfZW50cnkuaWZPdXREaXNjYXJkczsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZuZXQuaWZfc25kLmlmcV9kcm9wczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRFUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURVJST1JTOgogI2lmIGRlZmluZWQoaHB1eDExKQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX2VudHJ5LmlmT3V0RXJyb3JzOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9vZXJyb3JzOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFFMRU46CisgICAgY2FzZSBORVRTTk1QX0lGT1VUUUxFTjoKICNpZiBkZWZpbmVkKGhwdXgxMSkKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm5ldC5pZl9lbnRyeS5pZk91dFFsZW47CiAjZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbmV0LmlmX3NuZC5pZnFfbGVuOwogI2VuZGlmCiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUNJRklDOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUNJRklDOgogICAgICAgICAqdmFyX2xlbiA9IG51bGxPaWRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIG51bGxPaWQ7CiAgICAgZGVmYXVsdDoKQEAgLTEzMzEsMTAgKzEzNTQsMTAgQEAKICAgICAgKiBpZl9wdHIgPSBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfb3ZlcnJpZGVzX2dldChOYW1lKTsKICAgICAgKi8KICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgSUZJTkRFWDoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRFWDoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZnN0YXQuaWZJbmRleDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGREVTQ1I6CisgICAgY2FzZSBORVRTTk1QX0lGREVTQ1I6CiAgICAgICAgICp2YXJfbGVuID0gaWZzdGF0LmlmRGVzY3Iub19sZW5ndGg7CiAgICAgICAgICh2b2lkKSBtZW1jcHkocmV0dXJuX2J1ZiwgaWZzdGF0LmlmRGVzY3Iub19ieXRlcywgKnZhcl9sZW4pOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSByZXR1cm5fYnVmOwpAQCAtMTM0NCw2NSArMTM2Nyw2NSBAQAogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmVHlwZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGTVRVOgorICAgIGNhc2UgTkVUU05NUF9JRk1UVToKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZNdHU7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUVEOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUVEOgogICAgICAgICBpZiAoaWZfcHRyKQogICAgICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZl9wdHItPnNwZWVkOwogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmU3BlZWQ7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlBIWVNBRERSRVNTOgorICAgIGNhc2UgTkVUU05NUF9JRlBIWVNBRERSRVNTOgogICAgICAgICAqdmFyX2xlbiA9IGlmc3RhdC5pZlBoeXNBZGRyZXNzLm9fbGVuZ3RoOwogICAgICAgICAodm9pZCkgbWVtY3B5KHJldHVybl9idWYsIGlmc3RhdC5pZlBoeXNBZGRyZXNzLm9fYnl0ZXMsICp2YXJfbGVuKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcmV0dXJuX2J1ZjsKLSAgICBjYXNlIElGQURNSU5TVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGQURNSU5TVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmQWRtaW5TdGF0dXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9QRVJTVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGT1BFUlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPcGVyU3RhdHVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZMQVNUQ0hBTkdFOgorICAgIGNhc2UgTkVUU05NUF9JRkxBU1RDSEFOR0U6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmTGFzdENoYW5nZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5PQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5PQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmSW5PY3RldHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklOVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkluVWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkluTlVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5ESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkluRGlzY2FyZHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRklORVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkluRXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVOS05PV05QUk9UT1M6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmc3RhdC5pZkluVW5rbm93blByb3RvczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZPdXRPY3RldHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3V0VWNhc3RQa3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVROVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3V0TlVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3V0RGlzY2FyZHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVEVSUk9SUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRFUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3V0RXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRRTEVOOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFFMRU46CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZzdGF0LmlmT3V0UUxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFQ0lGSUM6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFQ0lGSUM6CiAJbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZnN0YXQuaWZTcGVjaWZpYzsKIAlyZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgIGRlZmF1bHQ6CkBAIC0xNTAyLDcgKzE1MjUsNyBAQAogCiAjaWZkZWYgbGludXgKICAgICAvKiAgZGlzYWxsb3cgcmVsb2FkaW5nIG9mIHN0cnVjdHVyZXMgdG9vIG9mdGVuICovCi0gICAgZ2V0dGltZW9mZGF5ICggJmV0LCAoIHN0cnVjdCB0aW1lem9uZSAqICkgMCApOyAgLyogIGdldCB0aW1lLW9mLWRheSAqLworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmZXQpOwogICAgIGlmICggZXQudHZfc2VjIDwgTGFzdExvYWQgKyBNSU5MT0FERlJFUSApIHsgICAgIC8qICBvbmx5IHJlbG9hZCBzbyBvZnRlbiAqLwogICAgICAgaWZuZXRhZGRyID0gaWZuZXRhZGRyX2xpc3Q7ICAgICAgICAgICAgICAgICAgIC8qICBpbml0aWFsaXplIHBvaW50ZXIgKi8KICAgICAgIHJldHVybjsKQEAgLTE1MzgsNyArMTU2MSw3IEBACiAgICAgICovCiAgICAgaWYgKCEoZGV2aW4gPSBmb3BlbigiL3Byb2MvbmV0L2RldiIsICJyIikpKSB7CiAgICAgICAgIGNsb3NlKGZkKTsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9kZXYgLSBjb250aW51aW5nLi4uXG4iKTsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiY2Fubm90IG9wZW4gL3Byb2MvbmV0L2Rldi5cbiIpKTsKICAgICAgICAgcmV0dXJuOyAvKiogZXhpdCAoMSk7ICoqLwogICAgIH0KIApAQCAtMTg3OSw2ICsxOTAyLDEwIEBACiAjaWZkZWYgbGludXgKICAgICAgICAgc3RybGNhdChzYXZlTmFtZSwgaWZuZXQuaWZfdW5pdCwgc2l6ZW9mKHNhdmVOYW1lKSk7CiAjZWxzZQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lOCisgICAgICAgIC8qIHRoaXMgZXhpc3RzIGhlcmUganVzdCBzbyB3ZSBkb24ndCBjb3B5IGlmZGVmIGxvZ2ljIGVsc2V3aGVyZSAqLworICAgICAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfYXBwZW5kX2ludCk7CisjZW5kaWYKICAgICAgICAgc3RyaW5nX2FwcGVuZF9pbnQoY3AsIGlmbmV0LmlmX3VuaXQpOwogI2VuZGlmCiAgICAgICAgIGlmICgxIHx8IHN0cmNtcChzYXZlTmFtZSwgImxvMCIpICE9IDApIHsgICAgICAgIC8qIFhYWCAqLwpAQCAtMTk0NywxMCArMTk3NCwxMyBAQAogICAgIGludCAgICAgICAgICAgICByZXQ7CiAKICAgICBpZiAoIWlmX3B0cikgewotICAgICAgICBpZiAoY291bnQpCisgICAgICAgIGlmIChjb3VudCkgewogICAgICAgICAgICAgaWZfcHRyID0KICAgICAgICAgICAgICAgICAobm1hcGlfcGh5c3RhdCAqKSBtYWxsb2Moc2l6ZW9mKG5tYXBpX3BoeXN0YXQpICogY291bnQpOwotICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiAoaWZfcHRyID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIHJldHVybiAoMCk7ICAgICAgICAgLyogRU9GICovCiAgICAgfQogCkBAIC0xOTk3LDcgKzIwMjcsNyBAQAogICAgIHN0cnVjdCBpZm5ldCAgICBpZm5ldDsKICAgICBzdHJ1Y3QgaW5faWZhZGRyICppYSwgaW5faWZhZGRyOwogICAgIHNob3J0ICAgICAgICAgICBoYXNfaXBhZGRyID0gMDsKLSNpZiAhU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRQorI2lmICFIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRQogICAgIHJlZ2lzdGVyIGNoYXIgICpjcDsKICNlbmRpZgogCkBAIC0yMDA5LDcgKzIwMzksNyBAQAogICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2ludGVyZmFjZXM6SW50ZXJmYWNlX1NjYW5fTmV4dCIsICJrbG9va3VwIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSNpZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FCisjaWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUKICNpZiBkZWZpbmVkKG5ldGJzZDEpIHx8IGRlZmluZWQob3BlbmJzZDIpCiAgICAgICAgIHN0cmxjcHkoc2F2ZU5hbWUsIGlmbmV0LmlmX3huYW1lLCBzaXplb2Yoc2F2ZU5hbWUpKTsKICNlbHNlCkBAIC0yMDI3LDYgKzIwNTcsMTAgQEAKIAogICAgICAgICBzYXZlTmFtZVtzaXplb2Yoc2F2ZU5hbWUpIC0gMV0gPSAnXDAnOwogICAgICAgICBjcCA9IHN0cmNocihzYXZlTmFtZSwgJ1wwJyk7CisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU4KKyAgICAgICAgLyogdGhpcyBleGlzdHMgaGVyZSBqdXN0IHNvIHdlIGRvbid0IGNvcHkgaWZkZWYgbG9naWMgZWxzZXdoZXJlICovCisgICAgICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ19hcHBlbmRfaW50KTsKKyNlbmRpZgogICAgICAgICBzdHJpbmdfYXBwZW5kX2ludChjcCwgaWZuZXQuaWZfdW5pdCk7CiAjZW5kaWYKICAgICAgICAgaWYgKDEgfHwgc3RyY21wKHNhdmVOYW1lLCAibG8wIikgIT0gMCkgeyAgICAgICAgLyogWFhYICovCkBAIC0yMDY4LDcgKzIxMDIsNyBAQAogI2VuZGlmCiAgICAgICAgICAgICB9CiAKLSNpZiAhZGVmaW5lZChuZXRic2QxKSAmJiAhZGVmaW5lZChmcmVlYnNkMikgJiYgIWRlZmluZWQob3BlbmJzZDIpICYmICFkZWZpbmVkKFNUUlVDVF9JRk5FVF9IQVNfSUZfQUREUkxJU1QpCisjaWYgIWRlZmluZWQobmV0YnNkMSkgJiYgIWRlZmluZWQoZnJlZWJzZDIpICYmICFkZWZpbmVkKG9wZW5ic2QyKSAmJiAhZGVmaW5lZChIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSTElTVCkKICAgICAgICAgICAgIGlmbmV0LmlmX2FkZHJsaXN0ID0gKHN0cnVjdCBpZmFkZHIgKikgaWE7ICAgLyogV1JPTkcgREFUQSBUWVBFOyBPTkxZIEEgRkxBRyAqLwogI2VuZGlmCiAgICAgICAgICAgICAvKgpAQCAtMjUyOSwxMCArMjU2MywxMCBAQAogICAgICAqLwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGSU5ERVg6CisgICAgY2FzZSBORVRTTk1QX0lGSU5ERVg6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaW50ZXJmYWNlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZERVNDUjoKKyAgICBjYXNlIE5FVFNOTVBfSUZERVNDUjoKICAgICAgICAgY3AgPSBpZm1kLmlmbWRfbmFtZTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oY3ApOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBjcDsKQEAgLTI1NDIsMTYgKzI1NzYsMTYgQEAKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9kYXRhLmlmaV90eXBlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZNVFU6CisgICAgY2FzZSBORVRTTk1QX0lGTVRVOgogICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfbXR1OwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZTUEVFRDoKKyAgICBjYXNlIE5FVFNOTVBfSUZTUEVFRDoKICAgICAgICAgaWYgKGlmX3B0cikKICAgICAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZfcHRyLT5zcGVlZDsKICAgICAgICAgZWxzZQogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9kYXRhLmlmaV9iYXVkcmF0ZTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGUEhZU0FERFJFU1M6CisgICAgY2FzZSBORVRTTk1QX0lGUEhZU0FERFJFU1M6CiAgICAgICAgIHsKICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICpjcDsKICAgICAgICAgICAgIGlmIChnZXRfcGh5c19hZGRyZXNzKGludGVyZmFjZSwgJmNwLCB2YXJfbGVuKSkKQEAgLTI1NTksMTMgKzI1OTMsMTMgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICByZXR1cm4gY3A7CiAgICAgICAgIH0KLSAgICBjYXNlIElGQURNSU5TVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGQURNSU5TVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX2ZsYWdzICYgSUZGX1VQID8gMSA6IDI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9QRVJTVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGT1BFUlNUQVRVUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfZmxhZ3MgJiBJRkZfUlVOTklORyA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZMQVNUQ0hBTkdFOgorICAgIGNhc2UgTkVUU05NUF9JRkxBU1RDSEFOR0U6CiAgICAgICAgIGlmIChpZm1kLmlmbWRfZGF0YS5pZmlfbGFzdGNoYW5nZS50dl9zZWMgPT0gMCAmJgogICAgICAgICAgICAgaWZtZC5pZm1kX2RhdGEuaWZpX2xhc3RjaGFuZ2UudHZfdXNlYyA9PSAwKSB7CiAgICAgICAgICAgICBsb25nX3JldHVybiA9IDA7CkBAIC0yNTc5LDQ1ICsyNjEzLDQ1IEBACiAgICAgICAgICAgICAgICAgICAgc3RhcnR0aW1lLnR2X3VzZWMpIC8gMTAwMDApKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk9DVEVUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTk9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfaWJ5dGVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfaXBhY2tldHM7CiAgICAgICAgIGxvbmdfcmV0dXJuIC09ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9pbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTk5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5OVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9pbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTkRJU0NBUkRTOgorICAgIGNhc2UgTkVUU05NUF9JRklORElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX2lxZHJvcHM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRklORVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRklORVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9kYXRhLmlmaV9pZXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZJTlVOS05PV05QUk9UT1M6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VTktOT1dOUFJPVE9TOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9ub3Byb3RvOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRPQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VUT0NURVRTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9vYnl0ZXM7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRk9VVFVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRVQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gKHVfbG9uZykgaWZtZC5pZm1kX2RhdGEuaWZpX29wYWNrZXRzOwogICAgICAgICBsb25nX3JldHVybiAtPSAodV9sb25nKSBpZm1kLmlmbWRfZGF0YS5pZmlfb21jYXN0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9ICh1X2xvbmcpIGlmbWQuaWZtZF9kYXRhLmlmaV9vbWNhc3RzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRESVNDQVJEUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZm1kLmlmbWRfc25kX2Ryb3BzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRFUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURVJST1JTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmbWQuaWZtZF9kYXRhLmlmaV9vZXJyb3JzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZPVVRRTEVOOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFFMRU46CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZtZC5pZm1kX3NuZF9sZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlNQRUNJRklDOgorICAgIGNhc2UgTkVUU05NUF9JRlNQRUNJRklDOgogICAgICAgICAqdmFyX2xlbiA9IG51bGxPaWRMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIG51bGxPaWQ7CiAgICAgZGVmYXVsdDoKQEAgLTI2MzAsMTAgKzI2NjQsMTIgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSEFWRV9ORVRfSUZfTUlCX0ggKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIVVTRV9TWVNDVExfSUZMSVNUICovCiAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgY3lnd2luICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSVBITFBBUElfSCkgIC8qIFdJTjMyIGN5Z3dpbiAqLwogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBXcml0ZU1ldGhvZCAgICAgd3JpdGVJZkVudHJ5OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIGxvbmcgICAgICAgICAgICBhZG1pbl9zdGF0dXMgPSAwOwogbG9uZyAgICAgICAgICAgIG9sZGFkbWluX3N0YXR1cyA9IDA7CiAKQEAgLTI3MTIsNyArMjc0OCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIElGTlVNQkVSOgorICAgIGNhc2UgTkVUU05NUF9JRk5VTUJFUjoKICAgICAgICAgbmV0c25tcF9hc3NlcnQoc2l6ZW9mKERXT1JEKSA9PSBzaXplb2YobG9uZ19yZXR1cm4pKTsKICAgICAgICAgR2V0TnVtYmVyT2ZJbnRlcmZhY2VzKChEV09SRCAqKSAmbG9uZ19yZXR1cm4pOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwpAQCAtMjc1MCwxMCArMjc4NiwxMCBAQAogICAgIGlmIChHZXRJZkVudHJ5KCZpZlJvdykgIT0gTk9fRVJST1IpCiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7Ci0gICAgY2FzZSBJRklOREVYOgorICAgIGNhc2UgTkVUU05NUF9JRklOREVYOgogICAgICAgICBsb25nX3JldHVybiA9IGlmSW5kZXg7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRkRFU0NSOgorICAgIGNhc2UgTkVUU05NUF9JRkRFU0NSOgogICAgICAgICAqdmFyX2xlbiA9IGlmUm93LmR3RGVzY3JMZW47CiAgICAgICAgIHJldHVybiAodV9jaGFyICopIGlmUm93LmJEZXNjcjsKICAgICBjYXNlIE5FVFNOTVBfSUZUWVBFOgpAQCAtMjc2Miw2OCArMjc5OCw3MCBAQAogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdUeXBlOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZNVFU6CisgICAgY2FzZSBORVRTTk1QX0lGTVRVOgogICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZlJvdy5kd010dTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFRUQ6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFRUQ6CiAgICAgICAgIGlmIChpZl9wdHIpCi0gICAgICAgICAgICBsb25nX3JldHVybiA9IGlmX3B0ci0+c3BlZWQ7CisgICAgICAgICAgICBsb25nX3JldHVybiA9IChsb25nKSBpZl9wdHItPnNwZWVkOwogICAgICAgICBlbHNlCiAgICAgICAgIGxvbmdfcmV0dXJuID0gKGxvbmcpIGlmUm93LmR3U3BlZWQ7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgY2FzZSBJRlBIWVNBRERSRVNTOgorICAgIGNhc2UgTkVUU05NUF9JRlBIWVNBRERSRVNTOgogICAgICAgICAqdmFyX2xlbiA9IGlmUm93LmR3UGh5c0FkZHJMZW47CiAgICAgICAgIG1lbWNweShyZXR1cm5fYnVmLCBpZlJvdy5iUGh5c0FkZHIsICp2YXJfbGVuKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcmV0dXJuX2J1ZjsKLSAgICBjYXNlIElGQURNSU5TVEFUVVM6CisgICAgY2FzZSBORVRTTk1QX0lGQURNSU5TVEFUVVM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdBZG1pblN0YXR1czsKICAgICAgICAgYWRtaW5fc3RhdHVzID0gbG9uZ19yZXR1cm47CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVJZkVudHJ5OworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1BFUlNUQVRVUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPUEVSU1RBVFVTOgogICAgICAgICBsb25nX3JldHVybiA9CiAgICAgICAgICAgIChNSUJfSUZfT1BFUl9TVEFUVVNfT1BFUkFUSU9OQUwgPT0gaWZSb3cuZHdPcGVyU3RhdHVzKSA/IDEgOiAyOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotICAgIGNhc2UgSUZMQVNUQ0hBTkdFOgorICAgIGNhc2UgTkVUU05NUF9JRkxBU1RDSEFOR0U6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gMCAvKiBYWFggbm90IGEgVU5JWCBlcG9jaGFsIHRpbWUgaWZSb3cuZHdMYXN0Q2hhbmdlICovIDsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5PQ1RFVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5PQ1RFVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdJbk9jdGV0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VQ0FTVFBLVFM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5VQ0FTVFBLVFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdJblVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5OVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRklOTlVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0luTlVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5ESVNDQVJEUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZJTkRJU0NBUkRTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3SW5EaXNjYXJkczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5FUlJPUlM6CisgICAgY2FzZSBORVRTTk1QX0lGSU5FUlJPUlM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdJbkVycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGSU5VTktOT1dOUFJPVE9TOgorICAgIGNhc2UgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd0luVW5rbm93blByb3RvczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUT0NURVRTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVE9DVEVUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd091dE9jdGV0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUVUNBU1RQS1RTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVFVDQVNUUEtUUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd091dFVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUTlVDQVNUUEtUUzoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVROVUNBU1RQS1RTOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3T3V0TlVjYXN0UGt0czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURElTQ0FSRFM6CisgICAgY2FzZSBORVRTTk1QX0lGT1VURElTQ0FSRFM6CiAgICAgICAgIGxvbmdfcmV0dXJuID0gaWZSb3cuZHdPdXREaXNjYXJkczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VURVJST1JTOgorICAgIGNhc2UgTkVUU05NUF9JRk9VVEVSUk9SUzoKICAgICAgICAgbG9uZ19yZXR1cm4gPSBpZlJvdy5kd091dEVycm9yczsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGT1VUUUxFTjoKKyAgICBjYXNlIE5FVFNOTVBfSUZPVVRRTEVOOgogICAgICAgICBsb25nX3JldHVybiA9IGlmUm93LmR3T3V0UUxlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKLSAgICBjYXNlIElGU1BFQ0lGSUM6CisgICAgY2FzZSBORVRTTk1QX0lGU1BFQ0lGSUM6CiAgICAgICAgICp2YXJfbGVuID0gbnVsbE9pZExlbjsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgbnVsbE9pZDsKICAgICBkZWZhdWx0OgpAQCAtMjgzNCw2ICsyODcyLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiB3cml0ZUlmRW50cnkoaW50IGFjdGlvbiwKICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtMjg0Miw3ICsyODgxLDcgQEAKICAgICAgICAgICAgICB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewogICAgIE1JQl9JRlJPVyAgICAgICBpZkVudHJ5Um93OwotICAgIGlmICgoY2hhcikgbmFtZVs5XSAhPSBJRkFETUlOU1RBVFVTKSB7CisgICAgaWYgKChjaGFyKSBuYW1lWzldICE9IE5FVFNOTVBfSUZBRE1JTlNUQVRVUykgewogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CiAgICAgfQogCkBAIC0yOTA1LDQgKzI5NDQsNSBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG9mIHdyaXRlSWZFbnRyeSAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyIGN5Z3dpbiAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaW50ZXJmYWNlcy5oCmluZGV4IDUxZDRiMWQuLmMxOWI3YTYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2ludGVyZmFjZXMuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pbnRlcmZhY2VzLmgKQEAgLTgsNyArOCw3IEBACiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGNvbmZpZ3VyZSBtYWNyb3MKICAqLwotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKIC8qCiAgKiBjb25mbGljdHMgd2l0aCB0aGUgbmV3IE1GRCByZXdyaXRlCkBAIC02MSwyOSArNjEsMjkgQEAKIAogI2VuZGlmIC8qIFVTSU5HX0lGX01JQl9JRlRBQkxFX01PRFVMRSAqLwogCi0jZGVmaW5lIElGTlVNQkVSICAgICAgICAwCi0jZGVmaW5lIElGSU5ERVggICAgICAgICAxCi0jZGVmaW5lIElGREVTQ1IgICAgICAgICAyCisjZGVmaW5lIE5FVFNOTVBfSUZOVU1CRVIgICAgICAgIDAKKyNkZWZpbmUgTkVUU05NUF9JRklOREVYICAgICAgICAgMQorI2RlZmluZSBORVRTTk1QX0lGREVTQ1IgICAgICAgICAyCiAjZGVmaW5lIE5FVFNOTVBfSUZUWVBFICAgICAgICAgIDMKLSNkZWZpbmUgSUZNVFUgICAgICAgICAgIDQKLSNkZWZpbmUgSUZTUEVFRCAgICAgICAgIDUKLSNkZWZpbmUgSUZQSFlTQUREUkVTUyAgIDYKLSNkZWZpbmUgSUZBRE1JTlNUQVRVUyAgIDcKLSNkZWZpbmUgSUZPUEVSU1RBVFVTICAgIDgKLSNkZWZpbmUgSUZMQVNUQ0hBTkdFICAgIDkKLSNkZWZpbmUgSUZJTk9DVEVUUyAgICAgIDEwCi0jZGVmaW5lIElGSU5VQ0FTVFBLVFMgICAxMQotI2RlZmluZSBJRklOTlVDQVNUUEtUUyAgMTIKLSNkZWZpbmUgSUZJTkRJU0NBUkRTICAgIDEzCi0jZGVmaW5lIElGSU5FUlJPUlMgICAgICAxNAotI2RlZmluZSBJRklOVU5LTk9XTlBST1RPUyAxNQotI2RlZmluZSBJRk9VVE9DVEVUUyAgICAgMTYKLSNkZWZpbmUgSUZPVVRVQ0FTVFBLVFMgIDE3Ci0jZGVmaW5lIElGT1VUTlVDQVNUUEtUUyAxOAotI2RlZmluZSBJRk9VVERJU0NBUkRTICAgMTkKLSNkZWZpbmUgSUZPVVRFUlJPUlMgICAgIDIwCi0jZGVmaW5lIElGT1VUUUxFTiAgICAgICAyMQotI2RlZmluZSBJRlNQRUNJRklDICAgICAgMjIKKyNkZWZpbmUgTkVUU05NUF9JRk1UVSAgICAgICAgICAgNAorI2RlZmluZSBORVRTTk1QX0lGU1BFRUQgICAgICAgICA1CisjZGVmaW5lIE5FVFNOTVBfSUZQSFlTQUREUkVTUyAgIDYKKyNkZWZpbmUgTkVUU05NUF9JRkFETUlOU1RBVFVTICAgNworI2RlZmluZSBORVRTTk1QX0lGT1BFUlNUQVRVUyAgICA4CisjZGVmaW5lIE5FVFNOTVBfSUZMQVNUQ0hBTkdFICAgIDkKKyNkZWZpbmUgTkVUU05NUF9JRklOT0NURVRTICAgICAgMTAKKyNkZWZpbmUgTkVUU05NUF9JRklOVUNBU1RQS1RTICAgMTEKKyNkZWZpbmUgTkVUU05NUF9JRklOTlVDQVNUUEtUUyAgMTIKKyNkZWZpbmUgTkVUU05NUF9JRklORElTQ0FSRFMgICAgMTMKKyNkZWZpbmUgTkVUU05NUF9JRklORVJST1JTICAgICAgMTQKKyNkZWZpbmUgTkVUU05NUF9JRklOVU5LTk9XTlBST1RPUyAxNQorI2RlZmluZSBORVRTTk1QX0lGT1VUT0NURVRTICAgICAxNgorI2RlZmluZSBORVRTTk1QX0lGT1VUVUNBU1RQS1RTICAxNworI2RlZmluZSBORVRTTk1QX0lGT1VUTlVDQVNUUEtUUyAxOAorI2RlZmluZSBORVRTTk1QX0lGT1VURElTQ0FSRFMgICAxOQorI2RlZmluZSBORVRTTk1QX0lGT1VURVJST1JTICAgICAyMAorI2RlZmluZSBORVRTTk1QX0lGT1VUUUxFTiAgICAgICAyMQorI2RlZmluZSBORVRTTk1QX0lGU1BFQ0lGSUMgICAgICAyMgogCiAjaWZkZWYgbGludXgKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pcC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXAuYwppbmRleCA2NzE3ZTJlLi5mMzlkMzIyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pcC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwLmMKQEAgLTE5LDEyICsxOSwxMiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCIKICNpbmNsdWRlICJpcC5oIgogI2luY2x1ZGUgImlwQWRkci5oIgogI2luY2x1ZGUgImludGVyZmFjZXMuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCiAKICNpZm5kZWYgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQKICNkZWZpbmUgTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQJNQpAQCAtMzMsNyArMzMsMTAgQEAKICNkZWZpbmUgSVBfU1RBVFNfQ0FDSEVfVElNRU9VVAlNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2lmZGVmIEZJUlNUX1BST1RPQ09MCiBwZXJmc3RhdF9wcm90b2NvbF90IHBzX3Byb3RvOwpAQCAtNjQsNDMgKzY3LDY5IEBACiAgKiBpbmZvcm1hdGlvbiBhdCAKICAqLwogc3RydWN0IHZhcmlhYmxlMSBpcGFkZHJfdmFyaWFibGVzW10gPSB7Ci0gICAge0lQQURBRERSLCAgICAgIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBBZGRyRW50cnksIDEsIHsxfX0sCi0gICAge0lQQURJRklOREVYLCAgIEFTTl9JTlRFR0VSLCAgIFJPTkxZLCB2YXJfaXBBZGRyRW50cnksIDEsIHsyfX0sCisgICAge0lQQURBRERSLCAgICAgIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBBZGRyRW50cnksIDEsIHsxfX0sCisgICAge0lQQURJRklOREVYLCAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBBZGRyRW50cnksIDEsIHsyfX0sCiAjaWZuZGVmIHN1blYzCi0gICAge0lQQURORVRNQVNLLCAgIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBBZGRyRW50cnksIDEsIHszfX0sCisgICAge0lQQURORVRNQVNLLCAgIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBBZGRyRW50cnksIDEsIHszfX0sCiAjZW5kaWYKLSAgICB7SVBBREJDQVNUQUREUiwgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9pcEFkZHJFbnRyeSwgMSwgezR9fSwKLSAgICB7SVBBRFJFQVNNTUFYLCAgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9pcEFkZHJFbnRyeSwgMSwgezV9fQorICAgIHtJUEFEQkNBU1RBRERSLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwQWRkckVudHJ5LCAxLCB7NH19LAorICAgIHtJUEFEUkVBU01NQVgsICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwQWRkckVudHJ5LCAxLCB7NX19CiB9OwogCiBzdHJ1Y3QgdmFyaWFibGUxIGlwcm91dGVfdmFyaWFibGVzW10gPSB7Ci0gICAge0lQUk9VVEVERVNULCAgICBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxfX0sCi0gICAge0lQUk9VVEVJRklOREVYLCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHsyfX0sCi0gICAge0lQUk9VVEVNRVRSSUMxLCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHszfX0sCi0gICAge0lQUk9VVEVNRVRSSUMyLCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHs0fX0sCi0gICAge0lQUk9VVEVNRVRSSUMzLCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHs1fX0sCi0gICAge0lQUk9VVEVNRVRSSUM0LCBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHs2fX0sCi0gICAge0lQUk9VVEVORVhUSE9QLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHs3fX0sCi0gICAge0lQUk9VVEVUWVBFLCAgICBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHs4fX0sCi0gICAge0lQUk9VVEVQUk9UTywgICBBU05fSU5URUdFUiwgICBST05MWSwgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs5fX0sCi0gICAge0lQUk9VVEVBR0UsICAgICBBU05fSU5URUdFUiwgICBSV1JJVEUsIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxMH19LAotICAgIHtJUFJPVVRFTUFTSywgICAgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTF9fSwKLSAgICB7SVBST1VURU1FVFJJQzUsIEFTTl9JTlRFR0VSLCAgIFJXUklURSwgdmFyX2lwUm91dGVFbnRyeSwgMSwgezEyfX0sCi0gICAge0lQUk9VVEVJTkZPLCAgICBBU05fT0JKRUNUX0lELCBST05MWSwgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxM319CisgICAge0lQUk9VVEVERVNULCAgICBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxfX0sCisgICAge0lQUk9VVEVJRklOREVYLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsyfX0sCisgICAge0lQUk9VVEVNRVRSSUMxLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHszfX0sCisgICAge0lQUk9VVEVNRVRSSUMyLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs0fX0sCisgICAge0lQUk9VVEVNRVRSSUMzLCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs1fX0sCisgICAge0lQUk9VVEVNRVRSSUM0LCBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs2fX0sCisgICAge0lQUk9VVEVORVhUSE9QLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs3fX0sCisgICAge0lQUk9VVEVUWVBFLCAgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHs4fX0sCisgICAge0lQUk9VVEVQUk9UTywgICBBU05fSU5URUdFUiwgICBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezl9fSwKKyAgICB7SVBST1VURUFHRSwgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2lwUm91dGVFbnRyeSwgMSwgezEwfX0sCisgICAge0lQUk9VVEVNQVNLLCAgICBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9pcFJvdXRlRW50cnksIDEsIHsxMX19LAorICAgIHtJUFJPVVRFTUVUUklDNSwgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTJ9fSwKKyAgICB7SVBST1VURUlORk8sICAgIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBSb3V0ZUVudHJ5LCAxLCB7MTN9fQogfTsKIAogc3RydWN0IHZhcmlhYmxlMSBpcG1lZGlhX3ZhcmlhYmxlc1tdID0gewogI2lmZGVmIFVTSU5HX01JQklJX0FUX01PRFVMRQogI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0gICAge0lQTUVESUFJRklOREVYLCAgICAgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfYXRFbnRyeSwgMSwgezF9fSwKLSAgICB7SVBNRURJQVBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9hdEVudHJ5LCAxLCB7Mn19LAotICAgIHtJUE1FRElBTkVUQUREUkVTUywgIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX2F0RW50cnksIDEsIHszfX0sCi0gICAge0lQTUVESUFUWVBFLCAgICAgICAgQVNOX0lOVEVHRVIsICAgUldSSVRFLCB2YXJfYXRFbnRyeSwgMSwgezR9fQorICAgIHtJUE1FRElBSUZJTkRFWCwgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHsxfX0sCisgICAge0lQTUVESUFQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezJ9fSwKKyAgICB7SVBNRURJQU5FVEFERFJFU1MsICBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7M319LAorICAgIHtJUE1FRElBVFlQRSwgICAgICAgIEFTTl9JTlRFR0VSLCAgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHs0fX0KICNlbHNlCi0gICAge0lQTUVESUFJRklOREVYLCAgICAgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7MX19LAotICAgIHtJUE1FRElBUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfYXRFbnRyeSwgMSwgezJ9fSwKLSAgICB7SVBNRURJQU5FVEFERFJFU1MsICBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2F0RW50cnksIDEsIHszfX0sCi0gICAge0lQTUVESUFUWVBFLCAgICAgICAgQVNOX0lOVEVHRVIsICAgUk9OTFksIHZhcl9hdEVudHJ5LCAxLCB7NH19CisgICAge0lQTUVESUFJRklOREVYLCAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7MX19LAorICAgIHtJUE1FRElBUEhZU0FERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYXRFbnRyeSwgMSwgezJ9fSwKKyAgICB7SVBNRURJQU5FVEFERFJFU1MsICBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2F0RW50cnksIDEsIHszfX0sCisgICAge0lQTUVESUFUWVBFLCAgICAgICAgQVNOX0lOVEVHRVIsICAgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9hdEVudHJ5LCAxLCB7NH19CiAjZW5kaWYKICNlbmRpZgogfTsKQEAgLTEyMiw2ICsxNTEsNyBAQAogaW5pdF9pcCh2b2lkKQogewogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CisgICAgaW50IHJjOwogCiAgICAgLyoKICAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgYXMgYSBncm91cCBvZiBzY2FsYXJzLi4uCkBAIC0xMjksNyArMTU5LDkgQEAKICAgICBERUJVR01TR1RMKCgibWliSUkvaXAiLCAiSW5pdGlhbGlzaW5nIElQIGdyb3VwXG4iKSk7CiAgICAgcmVnaW5mbyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJpcCIsIGlwX2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBfb2lkLCBPSURfTEVOR1RIKGlwX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvLCBJUEZPUldBUkRJTkcsIElQUk9VVEVESVNDQVJEUyk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cChyZWdpbmZvLCBJUEZPUldBUkRJTkcsIElQUk9VVEVESVNDQVJEUyk7CisgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLyoKICAgICAgKiAuLi4uIHdpdGggYSBsb2NhbCBjYWNoZQpAQCAtMjAwLDEyICsyMzIsMTIgQEAKICNlbmRpZgogCiAjaWZkZWYgTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwKLSNkZWZpbmUgSVBfU1RBVF9TVFJVQ1RVUkUgICAgICBzdHJ1Y3QgaXBfbWliCisjZGVmaW5lIElQX1NUQVRfU1RSVUNUVVJFCXN0cnVjdCBpcF9taWIKICNkZWZpbmUgVVNFU19TTk1QX0RFU0lHTkVEX0lQU1RBVAogI3VuZGVmIElQX05TVEFUUwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQorI2lmZGVmIEhBVkVfSVBITFBBUElfSAogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAjZGVmaW5lIElQX1NUQVRfU1RSVUNUVVJFIE1JQl9JUFNUQVRTCiBsb25nICAgICAgICAgICAgaXBGb3J3YXJkaW5nOwpAQCAtMzc4LDcgKzQxMCw3IEBACiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfZm9yd2FyZDsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBJUElOVU5LTk9XTlBST1RPUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9QUk9UTworI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9QUk9UTwogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX25vcHJvdG87CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTM4Niw3ICs0MTgsNyBAQAogICAgICAgICBjb250aW51ZTsKICNlbmRpZgogICAgIGNhc2UgSVBJTkRJU0NBUkRTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHRFJPUFBFRAorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR0RST1BQRUQKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19mcmFnZHJvcHBlZDsgICAvKiA/PyAqLwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC0zOTQsNyArNDI2LDcgQEAKICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICBjYXNlIElQSU5ERUxJVkVSUzoKLSNpZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfREVMSVZFUkVECisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19ERUxJVkVSRUQKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19kZWxpdmVyZWQgJiAweGZmZmZmZmZmOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC00MDIsNyArNDM0LDcgQEAKICAgICAgICAgY29udGludWU7CiAjZW5kaWYKICAgICBjYXNlIElQT1VUUkVRVUVTVFM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0xPQ0FMT1VUCisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19MT0NBTE9VVAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX2xvY2Fsb3V0ICYgMHhmZmZmZmZmZjsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNDEwLDcgKzQ0Miw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgY2FzZSBJUE9VVERJU0NBUkRTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRFJPUFBFRAorI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0RST1BQRUQKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19vZHJvcHBlZDsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNDMzLDcgKzQ2NSw3IEBACiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfZnJhZ21lbnRzOwogICAgICAgICBicmVhazsKICAgICBjYXNlIElQUkVBU01PS1M6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX1JFQVNTRU1CTEVECisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19SRUFTU0VNQkxFRAogICAgICAgICByZXRfdmFsdWUgPSBpcHN0YXQuaXBzX3JlYXNzZW1ibGVkOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC00NDQsNyArNDc2LDcgQEAKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19mcmFnZHJvcHBlZCArIGlwc3RhdC5pcHNfZnJhZ3RpbWVvdXQ7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSVBGUkFHT0tTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHTUVOVEVECisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHTUVOVEVECiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfZnJhZ21lbnRzOwogICAgICAgICBicmVhazsKICNlbHNlICAgICAgICAgICAgLyogWFhYICovCkBAIC00NTMsNyArNDg1LDcgQEAKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIElQRlJBR0ZBSUxTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URlJBRworI2lmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZSQUcKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19jYW50ZnJhZzsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNDYxLDcgKzQ5Myw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgY2FzZSBJUEZSQUdDUkVBVEVTOgotI2lmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRlJBR01FTlRTCisjaWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRlJBR01FTlRTCiAgICAgICAgIHJldF92YWx1ZSA9IGlwc3RhdC5pcHNfb2ZyYWdtZW50czsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtNDY5LDcgKzUwMSw3IEBACiAgICAgICAgIGNvbnRpbnVlOwogI2VuZGlmCiAgICAgY2FzZSBJUFJPVVRFRElTQ0FSRFM6Ci0jaWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUk9VVEUKKyNpZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUk9VVEUKICAgICAgICAgcmV0X3ZhbHVlID0gaXBzdGF0Lmlwc19ub3JvdXRlOwogICAgICAgICBicmVhazsKICNlbHNlCkBAIC02NDUsNiArNjc3LDcgQEAKIAogICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgIGNhc2UgTU9ERV9HRVRCVUxLOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgogCQkvKiBYWFggLSBXaW5kb3dzIGN1cnJlbnRseSBzdXBwb3J0cyBzZXR0aW5nIHRoaXMgKi8KICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgpAQCAtNjU1LDYgKzY4OCw3IEBACiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaXA6IFVuc3VwcG9ydGVkIG1vZGUgKCVkKVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAibWliSUkvaXA6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CkBAIC04MDYsOSArODQwLDkgQEAKICAgICByZXRfdmFsdWUgPSBuZXRic2RfcmVhZF9pcF9zdGF0KCZpcHN0YXQpOwogCiAgICAgaWYgKCByZXRfdmFsdWUgPCAwKSB7Ci0gICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2lwIiwgIkZhaWxlZCB0byBsb2FkIElQIEdyb3VwIChuZXRic2QpXG4iKSk7CisJREVCVUdNU0dUTCgoIm1pYklJL2lwIiwgIkZhaWxlZCB0byBsb2FkIElQIEdyb3VwIChuZXRic2QpXG4iKSk7CiAgICAgfSBlbHNlIHsKLSAgICAgICBERUJVR01TR1RMKCgibWliSUkvaXAiLCAiTG9hZGVkIElQIEdyb3VwIChuZXRic2QpXG4iKSk7CisJREVCVUdNU0dUTCgoIm1pYklJL2lwIiwgIkxvYWRlZCBJUCBHcm91cCAobmV0YnNkKVxuIikpOwogICAgIH0KICAgICByZXR1cm4gcmV0X3ZhbHVlOwogfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBBZGRyLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYwppbmRleCBmNTlhNjNhLi5hNGQ1NzdlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuYwpAQCAtMTUsOCArMTUsOSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCi0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKQEAgLTM5LDkgKzQwLDYgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NZU0NUTF9ICiAjaWZkZWYgX0lfREVGSU5FRF9LRVJORUwKICN1bmRlZiBfS0VSTkVMCkBAIC0xMTgsMTIgKzExNiwxMyBAQAogCiAjaW5jbHVkZSAiaXAuaCIKICNpbmNsdWRlICJpbnRlcmZhY2VzLmgiCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgogCiAjaWZkZWYgY3lnd2luCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9sZWdhY3kpCisKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCiAJICogIEtlcm5lbCAmIGludGVyZmFjZSBpbmZvcm1hdGlvbiwKQEAgLTIyMSw3ICsyMjAsNyBAQAogI2lmICFkZWZpbmVkKGZyZWVic2QyKSAmJiAhZGVmaW5lZChocHV4MTEpICYmICFkZWZpbmVkKGxpbnV4KQogICAgICAgICBpZiAoSW50ZXJmYWNlX1NjYW5fTmV4dCgmaW50ZXJmYWNlLCBOVUxMLCAmaWZuZXQsICZpbl9pZmFkZHIpID09IDApCiAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0FERFJMSVNUCisjaWZkZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQUREUkxJU1QKICAgICAgICAgaWYgKGlmbmV0LmlmX2FkZHJsaXN0ID09IDApCiAgICAgICAgICAgICBjb250aW51ZTsgICAgICAgICAgIC8qIE5vIGFkZHJlc3MgZm91bmQgZm9yIGludGVyZmFjZSAqLwogI2VuZGlmCkBAIC0yOTAsNyArMjg5LDcgQEAKICAgICAgICAgcmV0dXJuIChOVUxMKTsKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbG93ZXN0LCAxNCAqIHNpemVvZihvaWQpKTsKICAgICAqbGVuZ3RoID0gMTQ7Ci0gICAgKndyaXRlX21ldGhvZCA9IDA7CisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsKICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldHVybik7CiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIElQQURBRERSOgpAQCAtOTYwLDcgKzk1OSw3IEBACiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9DQU5fVVNFX1NZU0NUTCAmJiBJUENUTF9TVEFUUyAqLwogCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyIGN5Z3dpbiAqLworI2VsaWYgZGVmaW5lZChIQVZFX0lQSExQQVBJX0gpICAvKiBXSU4zMiBjeWd3aW4gKi8KICNpbmNsdWRlIDxpcGhscGFwaS5oPgogdV9jaGFyICAgICAgICAgKgogdmFyX2lwQWRkckVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqdnAsCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9pcEFkZHIuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5oCmluZGV4IDUyNmEwNjAuLmVjNjljZjMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwQWRkci5oCkBAIC01LDcgKzUsNiBAQAogI2lmbmRlZiBfTUlCR1JPVVBfSVBBRERSX0gKICNkZWZpbmUgX01JQkdST1VQX0lQQUREUl9ICiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiAjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTKQogY29uZmlnX3JlcXVpcmUobWliSUkvaXApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwQ2lkclJvdXRlVGFibGUuYwppbmRleCAwMGQ3ZDE3Li44NjA5YmIwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pcENpZHJSb3V0ZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXBDaWRyUm91dGVUYWJsZS5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgInJvdXRlX2hlYWRlcnMuaCIKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0xMyw2ICsxNCwxMSBAQAogCiAjaW5jbHVkZSAidmFyX3JvdXRlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9zdGFzaCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGdldF9yb3V0ZXMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfZ2V0X2RhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShvaWRfc3Rhc2hfYWRkX2RhdGEpCisKIHN0YXRpYyBuZXRzbm1wX29pZF9zdGFzaF9ub2RlICp1bmRvU3RvcmFnZTsKIAogc3RydWN0IHVuZG9JbmZvIHsKQEAgLTczLDcgKzc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKIAogICAgIC8qKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAgICBvcHRpbWl6ZXMgcmV0cml2YWwuICovCisgICAgICAgIG9wdGltaXplcyByZXRyaWV2YWwuICovCiAgICAgdGFibGVfaW5mby0+bWluX2NvbHVtbiA9IDE7CiAgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IDE2OwogCkBAIC05OSw3ICsxMDUsNyBAQAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJpbml0aWFsaXplX3RhYmxlX2lwQ2lkclJvdXRlVGFibGUiLAogICAgICAgICAgICAgICAgICJSZWdpc3RlcmluZyB0YWJsZSBpcENpZHJSb3V0ZVRhYmxlIGFzIGEgdGFibGUgaXRlcmF0b3JcbiIpKTsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG15X2hhbmRsZXIsIGlpbmZvKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihteV9oYW5kbGVyLCBpaW5mbyk7CiB9CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgaXBDaWRyUm91dGVUYWJsZSBtb2R1bGUgKi8KQEAgLTI2MCwxMiArMjY2LDEwIEBACiAKICAgICB2b2lkICAgICAgICAgICAqZGF0YV9jb250ZXh0OwogCi0gICAgb2lkICAgICAgICAgICAgKnN1ZmZpeDsKLSAgICBzaXplX3QgICAgICAgICAgc3VmZml4X2xlbjsKLQogICAgIC8qKiBjb2x1bW4gYW5kIHJvdyBpbmRleCBlbmNvZGVkIHBvcnRpb24gKi8KLSAgICBzdWZmaXggPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lICsgcmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxOwotICAgIHN1ZmZpeF9sZW4gPSByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aCAtCisgICAgY29uc3Qgb2lkICogY29uc3Qgc3VmZml4ID0KKyAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZSArIHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMTsKKyAgICBjb25zdCBzaXplX3Qgc3VmZml4X2xlbiA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0KICAgICAgICAgKHJlZ2luZm8tPnJvb3RvaWRfbGVuICsgMSk7CiAKICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL2lwdjYuYwppbmRleCA0ZTE4NjhiLi45OWQ1MGU4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9pcHY2LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvaXB2Ni5jCkBAIC00LDEwICs0LDE0IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotI2lmIGRlZmluZWQoSUZORVRfTkVFRFNfS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKQorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKKyNpZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUworI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgpAQCAtMTM3LDEwICsxNDEsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKICNpbmNsdWRlICJrZXJuZWwuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAiaXB2Ni5oIgogI2luY2x1ZGUgImludGVyZmFjZXMuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUobGludXhfcmVhZF9pcDZfc3RhdCkKKwogI2lmIGRlZmluZWQobmV0YnNkMSkgJiYgIWRlZmluZWQob3BlbmJzZDQpCiAjZGVmaW5lIGlucF9scG9ydCBpbjZwX2xwb3J0CiAjZGVmaW5lIGlucF9mcG9ydCBpbjZwX2Zwb3J0CkBAIC0xNjEsMTAxICsxNjYsMTMwIEBACiAjZW5kaWYKIAogc3RydWN0IHZhcmlhYmxlMyBpcHY2X3ZhcmlhYmxlc1tdID0gewotICAgIHtJUFY2Rk9SV0FSRElORywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NiwgMSwgezF9fSwKLSAgICB7SVBWNkRFRkFVTFRIT1BMSU1JVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NiwgMSwgezJ9fSwKLSAgICB7SVBWNklOVEVSRkFDRVMsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9pcHY2LCAxLCB7M319LAotICAgIHtJUFY2SUZUQkxMQVNUQ0hHLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX2lwdjYsIDEsIHs0fX0sCisgICAge0lQVjZGT1JXQVJESU5HLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2LCAxLCB7MX19LAorICAgIHtJUFY2REVGQVVMVEhPUExJTUlULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2LCAxLCB7Mn19LAorICAgIHtJUFY2SU5URVJGQUNFUywgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjYsIDEsIHszfX0sCisgICAge0lQVjZJRlRCTExBU1RDSEcsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NiwgMSwgezR9fSwKIAotICAgIHtJUFY2SUZERVNDUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAyfX0sCi0gICAge0lQVjZJRkxPV0xBWUVSLCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDN9fSwKLSAgICB7SVBWNklGRUZGRUNUTVRVLCBBU05fVU5TSUdORUQsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgNH19LAotICAgIHtJUFY2SUZSRUFTTU1BWFNJWkUsIEFTTl9VTlNJR05FRCwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA1fX0sCisgICAge0lQVjZJRkRFU0NSLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDJ9fSwKKyAgICB7SVBWNklGTE9XTEFZRVIsIEFTTl9PQkpFQ1RfSUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgM319LAorICAgIHtJUFY2SUZFRkZFQ1RNVFUsIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA0fX0sCisgICAge0lQVjZJRlJFQVNNTUFYU0laRSwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDV9fSwKIAotICAgIHtJUFY2SUZUT0tFTiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA2fX0sCi0gICAge0lQVjZJRlRPS0VOTEVOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA3fX0sCi0gICAge0lQVjZJRlBIWVNBRERSRVNTLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDh9fSwKLSAgICB7SVBWNklGQURNU1RBVFVTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA5fX0sCi0gICAge0lQVjZJRk9QRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDEwfX0sCi0gICAge0lQVjZJRkxBU1RDSEFOR0UsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgMTF9fSwKKyAgICB7SVBWNklGVE9LRU4sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgNn19LAorICAgIHtJUFY2SUZUT0tFTkxFTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgN319LAorICAgIHtJUFY2SUZQSFlTQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCA4fX0sCisgICAge0lQVjZJRkFETVNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NSwgMSwgOX19LAorICAgIHtJUFY2SUZPUEVSU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs1LCAxLCAxMH19LAorICAgIHtJUFY2SUZMQVNUQ0hBTkdFLCBBU05fVElNRVRJQ0tTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezUsIDEsIDExfX0sCiAKLSAgICB7SVBWNklGU1RBVFNJTlJDVlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDF9fSwKLSAgICB7SVBWNklGU1RBVFNJTkhEUkVSUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDJ9fSwKLSAgICB7SVBWNklGU1RBVFNUT09CSUdFUlJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAzfX0sCi0gICAge0lQVjZJRlNUQVRTSU5OT1JPVVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgNH19LAotICAgIHtJUFY2SUZTVEFUU0lOQUREUkVSUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDV9fSwKLSAgICB7SVBWNklGU1RBVFNJTlVOS05PV1BST1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCA2fX0sCi0gICAge0lQVjZJRlNUQVRTSU5UUlVOQ0FUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgN319LAotICAgIHtJUFY2SUZTVEFUU0lORElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDh9fSwKLSAgICB7SVBWNklGU1RBVFNJTkRFTElWRVJTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCA5fX0sCi0gICAge0lQVjZJRlNUQVRTT1VURk9SV0RBVEFTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pZnY2RW50cnksIDMsCi0gICAgIHs2LCAxLCAxMH19LAotICAgIHtJUFY2SUZTVEFUU09VVFJFUVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDExfX0sCi0gICAge0lQVjZJRlNUQVRTT1VURElTQ0FSRFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDEyfX0sCi0gICAge0lQVjZJRlNUQVRTT1VURlJBR09LUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTN9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRGUkFHRkFJTFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDE0fX0sCi0gICAge0lQVjZJRlNUQVRTT1VURlJBR0NSRUFUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTV9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRSRUFTTVJFUVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDE2fX0sCi0gICAge0lQVjZJRlNUQVRTT1VUUkVBU01PS1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDE3fX0sCi0gICAge0lQVjZJRlNUQVRTT1VUUkVBU01GQUlMUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTh9fSwKLSAgICB7SVBWNklGU1RBVFNJTk1DQVNUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWZ2NkVudHJ5LCAzLAotICAgICB7NiwgMSwgMTl9fSwKLSAgICB7SVBWNklGU1RBVFNPVVRNQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2lmdjZFbnRyeSwgMywKLSAgICAgezYsIDEsIDIwfX0sCisgICAge0lQVjZJRlNUQVRTSU5SQ1ZTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxfX0sCisgICAge0lQVjZJRlNUQVRTSU5IRFJFUlJTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAyfX0sCisgICAge0lQVjZJRlNUQVRTVE9PQklHRVJSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgM319LAorICAgIHtJUFY2SUZTVEFUU0lOTk9ST1VURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDR9fSwKKyAgICB7SVBWNklGU1RBVFNJTkFERFJFUlJTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCA1fX0sCisgICAge0lQVjZJRlNUQVRTSU5VTktOT1dQUk9UUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgNn19LAorICAgIHtJUFY2SUZTVEFUU0lOVFJVTkNBVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDd9fSwKKyAgICB7SVBWNklGU1RBVFNJTkRJU0NBUkRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCA4fX0sCisgICAge0lQVjZJRlNUQVRTSU5ERUxJVkVSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgOX19LAorICAgIHtJUFY2SUZTVEFUU09VVEZPUldEQVRBUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaWZ2NkVudHJ5LCAzLCB7NiwgMSwgMTB9fSwKKyAgICB7SVBWNklGU1RBVFNPVVRSRVFTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxMX19LAorICAgIHtJUFY2SUZTVEFUU09VVERJU0NBUkRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxMn19LAorICAgIHtJUFY2SUZTVEFUU09VVEZSQUdPS1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDEzfX0sCisgICAge0lQVjZJRlNUQVRTT1VURlJBR0ZBSUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxNH19LAorICAgIHtJUFY2SUZTVEFUU09VVEZSQUdDUkVBVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDE1fX0sCisgICAge0lQVjZJRlNUQVRTT1VUUkVBU01SRVFTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxNn19LAorICAgIHtJUFY2SUZTVEFUU09VVFJFQVNNT0tTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAxN319LAorICAgIHtJUFY2SUZTVEFUU09VVFJFQVNNRkFJTFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDE4fX0sCisgICAge0lQVjZJRlNUQVRTSU5NQ0FTVFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lmdjZFbnRyeSwgMywgezYsIDEsIDE5fX0sCisgICAge0lQVjZJRlNUQVRTT1VUTUNBU1RQS1RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pZnY2RW50cnksIDMsIHs2LCAxLCAyMH19LAogCiAjaWYgMAotICAgIHtJUFY2QUREUlBSRUZJWE9OTElOS0ZMRywgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLAotICAgICB7NywgMSwgM319LAotICAgIHtJUFY2QUREUlBSRUZJWEFVVE9OT01PVVNGTEFHLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsCi0gICAgIHs3LCAxLCA0fX0sCi0gICAge0lQVjZBRERSUFJFRklYQURWUFJFRkVSTElGRSwgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLAotICAgICB7NywgMSwgNX19LAotICAgIHtJUFY2QUREUlBSRUZJWFZBTElETElGRSwgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLAotICAgICB7NywgMSwgNn19LAorICAgIHtJUFY2QUREUlBSRUZJWE9OTElOS0ZMRywgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7NywgMSwgM319LAorICAgIHtJUFY2QUREUlBSRUZJWEFVVE9OT01PVVNGTEFHLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs3LCAxLCA0fX0sCisgICAge0lQVjZBRERSUFJFRklYQURWUFJFRkVSTElGRSwgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7NywgMSwgNX19LAorICAgIHtJUFY2QUREUlBSRUZJWFZBTElETElGRSwgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7NywgMSwgNn19LAogCi0gICAge0lQVjZBRERSUEZYTEVOLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCAyfX0sCi0gICAge0lQVjZBRERSVFlQRSwgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgM319LAotICAgIHtJUFY2QUREUkFOWUNBU1RGTEFHLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCA0fX0sCi0gICAge0lQVjZBRERSU1RBVFVTLCBJTlRFR0VSLCBST05MWSwgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCA1fX0sCisgICAge0lQVjZBRERSUEZYTEVOLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCAyfX0sCisgICAge0lQVjZBRERSVFlQRSwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2QWRkckVudHJ5LCAzLCB7OCwgMSwgM319LAorICAgIHtJUFY2QUREUkFOWUNBU1RGTEFHLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCA0fX0sCisgICAge0lQVjZBRERSU1RBVFVTLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZBZGRyRW50cnksIDMsIHs4LCAxLCA1fX0sCiAKLSAgICB7SVBWNlJPVVRFSUZJTkRFWCwgSXBWNklGSU5ERVgsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsCi0gICAgIHsxMSwgMSwgNH19LAotICAgIHtJUFY2Uk9VVEVORVhUSE9QLCBJcFY2QUREUkVTUywgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywKLSAgICAgezExLCAxLCA1fX0sCi0gICAge0lQVjZST1VURVRZUEUsIElOVEVHRVIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgNn19LAotICAgIHtJUFY2Uk9VVEVQUk9UT0NPTCwgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA3fX0sCi0gICAge0lQVjZST1VURVBPTElDWSwgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywKLSAgICAgezExLCAxLCA4fX0sCi0gICAge0lQVjZST1VURUFHRSwgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA5fX0sCi0gICAge0lQVjZST1VURU5FWFRIT1BSREksIFVOU0lHTkVEMzIsIFJPTkxZLCB2YXJfaXB2NlJvdXRlRW50cnksIDMsCi0gICAgIHsxMSwgMSwgMTB9fSwKLSAgICB7SVBWNlJPVVRFTUVUUklDLCBVTlNJR05FRDMyLCBST05MWSwgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLAotICAgICB7MTEsIDEsIDExfX0sCi0gICAge0lQVjZST1VURVdFSUdIVCwgVU5TSUdORUQzMiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywKLSAgICAgezExLCAxLCAxMn19LAotICAgIHtJUFY2Uk9VVEVJTkZPLCBPQkpJRCwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxM319LAotICAgIHtJUFY2Uk9VVEVWQUxJRCwgSU5URUdFUiwgUk9OTFksIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxNH19LAorICAgIHtJUFY2Uk9VVEVJRklOREVYLCBJcFY2SUZJTkRFWCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA0fX0sCisgICAge0lQVjZST1VURU5FWFRIT1AsIElwVjZBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDV9fSwKKyAgICB7SVBWNlJPVVRFVFlQRSwgSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCA2fX0sCisgICAge0lQVjZST1VURVBST1RPQ09MLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDd9fSwKKyAgICB7SVBWNlJPVVRFUE9MSUNZLCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDh9fSwKKyAgICB7SVBWNlJPVVRFQUdFLCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDl9fSwKKyAgICB7SVBWNlJPVVRFTkVYVEhPUFJESSwgVU5TSUdORUQzMiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcHY2Um91dGVFbnRyeSwgMywgezExLCAxLCAxMH19LAorICAgIHtJUFY2Uk9VVEVNRVRSSUMsIFVOU0lHTkVEMzIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXB2NlJvdXRlRW50cnksIDMsIHsxMSwgMSwgMTF9fSwKKyAgICB7SVBWNlJPVVRFV0VJR0hULCBVTlNJR05FRDMyLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDEyfX0sCisgICAge0lQVjZST1VURUlORk8sIE9CSklELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDEzfX0sCisgICAge0lQVjZST1VURVZBTElELCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwdjZSb3V0ZUVudHJ5LCAzLCB7MTEsIDEsIDE0fX0sCiAKLSAgICB7SVBWNk5FVFRPTUVESUFQSFlBRERSLCBTVFJJTkcsIFJPTkxZLCB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgMn19LAotICAgIHtJUFY2TkVUVE9NRURJQVRZUEUsIElOVEVHRVIsIFJPTkxZLCB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgM319LAotICAgIHtJUFY2TkVUVE9NRURJQVNUQVRFLCBJTlRFR0VSLCBST05MWSwgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDR9fSwKLSAgICB7SVBWNk5FVFRPTUVESUFMQVNUVVBEQVRFLCBUSU1FVElDS1MsIFJPTkxZLCB2YXJfbmRwRW50cnksIDMsCi0gICAgIHsxMiwgMSwgNX19LAotICAgIHtJUFY2TkVUVE9NRURJQVZBTElELCBJTlRFR0VSLCBST05MWSwgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDZ9fSwKKyAgICB7SVBWNk5FVFRPTUVESUFQSFlBRERSLCBTVFJJTkcsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgMn19LAorICAgIHtJUFY2TkVUVE9NRURJQVRZUEUsIElOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgM319LAorICAgIHtJUFY2TkVUVE9NRURJQVNUQVRFLCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDR9fSwKKyAgICB7SVBWNk5FVFRPTUVESUFMQVNUVVBEQVRFLCBUSU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbmRwRW50cnksIDMsIHsxMiwgMSwgNX19LAorICAgIHtJUFY2TkVUVE9NRURJQVZBTElELCBJTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX25kcEVudHJ5LCAzLCB7MTIsIDEsIDZ9fSwKICNlbmRpZgogfTsKIG9pZCAgICAgICAgICAgICBpcHY2X3ZhcmlhYmxlc19vaWRbXSA9IHsgU05NUF9PSURfTUlCMiwgNTUsIDEgfTsKQEAgLTI2NSw3NCArMjk5LDc0IEBACiAgICAgY29uZmlnX2FkZF9taWIoSVBWNiAtIE1JQikKICNlbmRpZgogICAgICBzdHJ1Y3QgdmFyaWFibGUzIGlwdjZpY21wX3ZhcmlhYmxlc1tdID0gewotICAgICAgICAge0lQVjZJRklDTVBJTk1TRywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDF9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5FUlJPUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyfX0sCi0gICAgICAgICB7SVBWNklGSUNNUElORFNUVU5SQ0hTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgM319LAotICAgICAgICAge0lQVjZJRklDTVBJTkFETVBST0hTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgNH19LAotICAgICAgICAge0lQVjZJRklDTVBJTlRJTUVYQ0RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgNX19LAotICAgICAgICAge0lQVjZJRklDTVBJTlBBUk1QUk9CUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDZ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5QS1RUT09CSUdTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgN319LAotICAgICAgICAge0lQVjZJRklDTVBJTkVDSE9TLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgOH19LAotICAgICAgICAge0lQVjZJRklDTVBJTkVDSE9SRVBTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgOX19LAotICAgICAgICAge0lQVjZJRklDTVBJTlJUUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxMH19LAotICAgICAgICAge0lQVjZJRklDTVBJTlJUUkFEVlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxMX19LAotICAgICAgICAge0lQVjZJRklDTVBJTk5CUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxMn19LAotICAgICAgICAge0lQVjZJRklDTVBJTk5CUkFEVlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAxM319LAotICAgICAgICAge0lQVjZJRklDTVBJTlJFRElSRUNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDE0fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOR1JQTUVRRVJZUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDE1fX0sCi0gICAgICAgICB7SVBWNklGSUNNUElOR1JQTUVSU1BTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTZ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QSU5HUlBNRVJFRENTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTd9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUTVNHLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTh9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VURVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMTl9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VURFNUVU5SQ0hTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjB9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUQURNUFJPSFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyMX19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRUSU1FWENEUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDIyfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVFBBUk1QUk9CUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDIzfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVFBLVFRPT0JJR1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyNH19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRFQ0hPUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDI1fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEVDSE9SRVBTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjZ9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUUlRSU0xJQ0lUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDI3fX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVFJUUkFEVlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAyOH19LAotICAgICAgICAge0lQVjZJRklDTVBPVVROQlJTTElDSVRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMjl9fSwKLSAgICAgICAgIHtJUFY2SUZJQ01QT1VUTkJSQURWUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDMwfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVFJFRElSRUNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaWNtcHY2RW50cnksIDMsCi0gICAgICAgICAgezEsIDEsIDMxfX0sCi0gICAgICAgICB7SVBWNklGSUNNUE9VVEdSUE1FUUVSWVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAzMn19LAotICAgICAgICAge0lQVjZJRklDTVBPVVRHUlBNRVJTUFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2ljbXB2NkVudHJ5LCAzLAotICAgICAgICAgIHsxLCAxLCAzM319LAotICAgICAgICAge0lQVjZJRklDTVBPVVRHUlBNRVJFRENTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9pY21wdjZFbnRyeSwgMywKLSAgICAgICAgICB7MSwgMSwgMzR9fQorICAgICAgICAge0lQVjZJRklDTVBJTk1TRywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDF9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5FUlJPUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyfX0sCisgICAgICAgICB7SVBWNklGSUNNUElORFNUVU5SQ0hTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgM319LAorICAgICAgICAge0lQVjZJRklDTVBJTkFETVBST0hTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgNH19LAorICAgICAgICAge0lQVjZJRklDTVBJTlRJTUVYQ0RTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgNX19LAorICAgICAgICAge0lQVjZJRklDTVBJTlBBUk1QUk9CUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDZ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5QS1RUT09CSUdTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgN319LAorICAgICAgICAge0lQVjZJRklDTVBJTkVDSE9TLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgOH19LAorICAgICAgICAge0lQVjZJRklDTVBJTkVDSE9SRVBTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgOX19LAorICAgICAgICAge0lQVjZJRklDTVBJTlJUUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxMH19LAorICAgICAgICAge0lQVjZJRklDTVBJTlJUUkFEVlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxMX19LAorICAgICAgICAge0lQVjZJRklDTVBJTk5CUlNMSUNJVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxMn19LAorICAgICAgICAge0lQVjZJRklDTVBJTk5CUkFEVlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAxM319LAorICAgICAgICAge0lQVjZJRklDTVBJTlJFRElSRUNUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDE0fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOR1JQTUVRRVJZUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDE1fX0sCisgICAgICAgICB7SVBWNklGSUNNUElOR1JQTUVSU1BTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTZ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QSU5HUlBNRVJFRENTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTd9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUTVNHLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTh9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VURVJST1JTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMTl9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VURFNUVU5SQ0hTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjB9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUQURNUFJPSFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyMX19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRUSU1FWENEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDIyfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVFBBUk1QUk9CUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDIzfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVFBLVFRPT0JJR1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyNH19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRFQ0hPUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDI1fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEVDSE9SRVBTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjZ9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUUlRSU0xJQ0lUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDI3fX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVFJUUkFEVlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAyOH19LAorICAgICAgICAge0lQVjZJRklDTVBPVVROQlJTTElDSVRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMjl9fSwKKyAgICAgICAgIHtJUFY2SUZJQ01QT1VUTkJSQURWUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDMwfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVFJFRElSRUNUUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl9pY21wdjZFbnRyeSwgMywgezEsIDEsIDMxfX0sCisgICAgICAgICB7SVBWNklGSUNNUE9VVEdSUE1FUUVSWVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAzMn19LAorICAgICAgICAge0lQVjZJRklDTVBPVVRHUlBNRVJTUFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWNtcHY2RW50cnksIDMsIHsxLCAxLCAzM319LAorICAgICAgICAge0lQVjZJRklDTVBPVVRHUlBNRVJFRENTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2ljbXB2NkVudHJ5LCAzLCB7MSwgMSwgMzR9fQogICAgICB9Owogb2lkICAgICAgICAgICAgIGlwdjZpY21wX3ZhcmlhYmxlc19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNTYsIDEgfTsKICNpZiAwCkBAIC0zNDAsNyArMzc0LDggQEAKICAgICBjb25maWdfYWRkX21pYihJUFY2IC0gSUNNUCAtIE1JQikKICNlbmRpZgogICAgICBzdHJ1Y3QgdmFyaWFibGUyIGlwdjZ1ZHBfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgICB7SVBWNlVEUElGSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3VkcDYsIDIsIHsxLCAzfX0KKyAgICAgICAgIHtJUFY2VURQSUZJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl91ZHA2LCAyLCB7MSwgM319CiAgICAgIH07CiBvaWQgICAgICAgICAgICAgaXB2NnVkcF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDcsIDYgfTsKICNpZiAwCkBAIC0zNDgsMTUgKzM4MywxNyBAQAogICAgIGNvbmZpZ19hZGRfbWliKElQVjYgLSBVRFAgLSBNSUIpCiAjZW5kaWYKICAgICAgc3RydWN0IHZhcmlhYmxlMiBpcHY2dGNwX3ZhcmlhYmxlc1tdID0gewotICAgICAgICAge0lQVjZUQ1BDT05OU1RBVEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3RjcDYsIDIsIHsxLCA2fX0sCisgICAgICAgICB7SVBWNlRDUENPTk5TVEFURSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgIHZhcl90Y3A2LCAyLCB7MSwgNn19LAogICAgICB9Owogb2lkICAgICAgICAgICAgIGlwdjZ0Y3BfdmFyaWFibGVzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA2LCAxNiB9OwogI2lmIDAKIGNvbmZpZ19sb2FkX21pYigxLjMgLjYgLjEgLjMgLjg2IC4xLCA3LCBpcHY2dGNwX3ZhcmlhYmxlcykKICAgICBjb25maWdfYWRkX21pYihJUFY2IC0gVENQIC0gTUlCKQogI2VuZGlmCi0gICAgIHZvaWQKLSAgICAgICAgICAgICAgICAgICAgIGluaXRfaXB2NigpCisKK3ZvaWQKK2luaXRfaXB2Nih2b2lkKQogewogICAgIC8qCiAgICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUgCkBAIC00MDAsNyArNDM3LDcgQEAKICAgICAgICAgICAgKChpbnQpIHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKIAotICAgICp3cml0ZV9tZXRob2QgPSAwOworICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KICAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7CiB9CkBAIC00NDAsNyArNDc3LDcgQEAKICAgICBtZW1jcHkoKGNoYXIgKikgbmFtZSwgKGNoYXIgKikgbmV3bmFtZSwKICAgICAgICAgICAgKChpbnQpIHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CiAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICAqd3JpdGVfbWV0aG9kID0gMDsKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOwogICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCiAgICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOwogfQpAQCAtOTMxLDcgKzk2OCw3IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogI2VuZGlmCi0jaWZkZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQworI2lmZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDCiAgICAgICAgICAgICBpZiAoIWdvdGFuc3dlcikgewogICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldCAgICBpZm5ldDsKIApAQCAtMTk2MCw3ICsxOTk3LDcgQEAKICAgICByZXR1cm4gdmFsdWU7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBsaW51eF9yZWFkX2lwNl9zdGF0KHN0cnVjdCBpcDZfbWliICppcDZzdGF0KQogewogICAgIGlmICghaXA2c3RhdCkKQEAgLTIwNDgsNyArMjA4NSw3IEBACiAgICAgICAgIHAgPSBpZl9nZXRuYW1lKGludGVyZmFjZSk7CiAgICAgICAgIGlmIChwKSB7CiAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihwKTsKLSAgICAgICAgICAgIHJldHVybiBwOworICAgICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgcDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKICAgICBjYXNlIElQVjZJRkxPV0xBWUVSOgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYwppbmRleCBiYjZmODY3Li45OTMxNGRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguYwpAQCAtNCwxMSArNCwxMCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgpAQCAtMTYsNDMgKzE1LDExMyBAQAogI2lmIEhBVkVfU1lTX1BBUkFNX0gKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KICNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CiAKICNpbmNsdWRlICJrZXJuZWxfbGludXguaCIKIAogc3RydWN0IGlwX21pYiAgIGNhY2hlZF9pcF9taWI7CitzdHJ1Y3QgaXA2X21pYiAgIGNhY2hlZF9pcDZfbWliOwogc3RydWN0IGljbXBfbWliIGNhY2hlZF9pY21wX21pYjsKK3N0cnVjdCBpY21wNl9taWIgY2FjaGVkX2ljbXA2X21pYjsKK3N0cnVjdCBpY21wNF9tc2dfbWliIGNhY2hlZF9pY21wNF9tc2dfbWliOwogc3RydWN0IHRjcF9taWIgIGNhY2hlZF90Y3BfbWliOwogc3RydWN0IHVkcF9taWIgIGNhY2hlZF91ZHBfbWliOworc3RydWN0IHVkcDZfbWliICBjYWNoZWRfdWRwNl9taWI7CiAKICNkZWZpbmUgSVBfU1RBVFNfTElORQkiSXA6ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSIKICNkZWZpbmUgSUNNUF9TVEFUU19MSU5FCSJJY21wOiAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1IgorI2RlZmluZSBJQ01QX01TR19TVEFUU19MSU5FICJJY21wTXNnOiAiCiAjZGVmaW5lIFRDUF9TVEFUU19MSU5FCSJUY3A6ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUgJWx1ICVsdSAlbHUiCiAjZGVmaW5lIFVEUF9TVEFUU19MSU5FCSJVZHA6ICVsdSAlbHUgJWx1ICVsdSIKKyNkZWZpbmUgSVA2X1NUQVRTX0xJTkUgICAiSXA2IgorI2RlZmluZSBJQ01QNl9TVEFUU19MSU5FICJJY21wNiIKICNkZWZpbmUgVURQNl9TVEFUU19MSU5FICJVZHA2IgogCiAjZGVmaW5lIElQX1NUQVRTX1BSRUZJWF9MRU4JNAogI2RlZmluZSBJQ01QX1NUQVRTX1BSRUZJWF9MRU4JNgorI2RlZmluZSBJQ01QX01TR19TVEFUU19QUkVGSVhfTEVOIDkKICNkZWZpbmUgVENQX1NUQVRTX1BSRUZJWF9MRU4JNQogI2RlZmluZSBVRFBfU1RBVFNfUFJFRklYX0xFTgk1CisjZGVmaW5lIElQNl9TVEFUU19QUkVGSVhfTEVOCTMKKyNkZWZpbmUgSUNNUDZfU1RBVFNfUFJFRklYX0xFTgk1CiAjZGVmaW5lIFVEUDZfU1RBVFNfUFJFRklYX0xFTiAgIDQKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxpbnV4X2lwNl9zdGF0X2FsbCwgbGlibmV0c25tcG1pYnMpCiAKLWludAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxpbnV4X3JlYWRfaXA2X3N0YXQsIGxpbnV4X2lwNl9zdGF0X2FsbCkKKworc3RhdGljIGludAorZGVjb2RlX2ljbXBfbXNnKGNoYXIgKmxpbmUsIGNoYXIgKmRhdGEsIHN0cnVjdCBpY21wNF9tc2dfbWliICptc2cpCit7CisgICAgY2hhciAqdG9rZW4sICpzYXZlcHRyLCAqbGluZXB0ciwgKnNhdmVwdHIxLCAqZGF0YXB0ciwgKmRlbGltID0gTlVMTDsKKyAgICBjaGFyIGxpbmVfY3B5WzEwMjRdOworICAgIGNoYXIgZGF0YV9jcHlbMTAyNF07CisgICAgbG9uZyBpbmRleDsKKworICAgIGlmKGRhdGEgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgLyoKKyAgICAgKiBTaW5jZSB3ZSBhcmUgdXNpbmcgc3RydG9rLCB0aGVyZSBpcyBhIHBvc3NpYmxpdHkgb2YgdGhlIG9yZ2luYWwgZGF0YQorICAgICAqIGdldHRpbmcgbW9kaWZpZWQuIFNvIHdlIHRha2UgYSBsb2NhbCBjb3B5IGZvciB0aGlzIHB1cnBvc2UgZXZlbiB0aG91Z2gKKyAgICAgKiBpdHMgZXhwZW5zaXZlLgorICAgICAqLworICAgIHN0cmxjcHkobGluZV9jcHksIGxpbmUsIHNpemVvZihsaW5lX2NweSkpOworICAgIHN0cmxjcHkoZGF0YV9jcHksIGRhdGEsIHNpemVvZihkYXRhX2NweSkpOworCisgICAgbGluZXB0ciA9IGxpbmVfY3B5OworICAgIGRhdGFwdHIgPSBkYXRhX2NweTsKKyAgICBzYXZlcHRyMSA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgaWYoTlVMTCA9PSAodG9rZW4gPSBzdHJ0b2tfcihsaW5lcHRyLCAiICIsICZzYXZlcHRyKSkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbGluZXB0ciA9IE5VTEw7CisgICAgICAgIGVycm5vID0gMDsKKyAgICAgICAgaWYgKDAgPT0gc3RybmNtcChzdHJzZXAoJnRva2VuLCAiZSIpLCAiT3V0VHlwIiwgNikpIHsKKyAgICAgICAgICAgIGluZGV4ID0gc3RydG9sKHRva2VuLCAmZGVsaW0sIDApOworICAgICAgICAgICAgaWYgKEVSQU5HRSA9PSBlcnJubykgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA+IDI1NSkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfSBlbHNlIGlmIChpbmRleCA8IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChOVUxMID09ICh0b2tlbiA9IHN0cnRva19yKGRhdGFwdHIsICIgIiwgJnNhdmVwdHIxKSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBkYXRhcHRyID0gTlVMTDsKKyAgICAgICAgICAgIG1zZy0+dmFsc1tpbmRleF0uT3V0VHlwZSA9IGF0b2kodG9rZW4pOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaW5kZXggPSBzdHJ0b2wodG9rZW4sICZkZWxpbSwgMCk7CisgICAgICAgICAgICBpZiAoRVJBTkdFID09IGVycm5vKSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4ID4gMjU1KSB7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGluZGV4IDwgMCkgeworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYoTlVMTCA9PSAodG9rZW4gPSBzdHJ0b2tfcihkYXRhcHRyLCAiICIsICZzYXZlcHRyMSkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGF0YXB0ciA9IE5VTEw7CisgICAgICAgICAgICBtc2ctPnZhbHNbaW5kZXhdLkluVHlwZSA9IGF0b2kodG9rZW4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CiBsaW51eF9yZWFkX21pYklJX3N0YXRzKHZvaWQpCiB7CiAgICAgRklMRSAgICAgICAgICAgKmluID0gZm9wZW4oIi9wcm9jL25ldC9zbm1wIiwgInIiKTsKLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2Ci0gICAgRklMRSAgICAgICAgICAgKmluNjsKLSAgICB1bnNpZ25lZCBsb25nICAgdmFsdWU7Ci0jZW5kaWYKLSAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKLQorICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdLCBkYXRhWzEwMjRdOworICAgIGludCByZXQgPSAwOwogICAgIGlmICghaW4pIHsKICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eCIsIlVuYWJsZSB0byBvcGVuIC9wcm9jL25ldC9zbm1wIikpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAKKyAgICBtZW1zZXQobGluZSwgJ1wwJywgc2l6ZW9mKGxpbmUpKTsKKyAgICBtZW1zZXQoZGF0YSwgJ1wwJywgc2l6ZW9mKGRhdGEpKTsKICAgICB3aGlsZSAobGluZSA9PSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBpZiAoIXN0cm5jbXAobGluZSwgSVBfU1RBVFNfTElORSwgSVBfU1RBVFNfUFJFRklYX0xFTikpIHsKICAgICAgICAgICAgIHNzY2FuZihsaW5lLCBJUF9TVEFUU19MSU5FLApAQCAtMTA0LDYgKzE3MywxOSBAQAogICAgICAgICAgICAgICAgICAgICZjYWNoZWRfaWNtcF9taWIuaWNtcE91dFRpbWVzdGFtcFJlcHMsCiAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9pY21wX21pYi5pY21wT3V0QWRkck1hc2tzLAogICAgICAgICAgICAgICAgICAgICZjYWNoZWRfaWNtcF9taWIuaWNtcE91dEFkZHJNYXNrUmVwcyk7CisgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAobGluZSwgSUNNUF9NU0dfU1RBVFNfTElORSwgSUNNUF9NU0dfU1RBVFNfUFJFRklYX0xFTikpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBOb3RlOiBXZSBoYXZlIHRvIGRvIHRoaXMgZGlmZmVyZW50bHkgZnJvbSBvdGhlciBzdGF0cyBhcyB0aGUKKyAgICAgICAgICAgICAqIGNvdW50ZXJzIHRvIHRoaXMgc3RhdHMgYXJlIGR5bmFtaWMuIFNvIHdlIHdpbGwgbm90IGtub3cgdGhlCisgICAgICAgICAgICAgKiBudW1iZXIgb2YgY291bnRlcnMgYXQgYSBnaXZlbiB0aW1lLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmZ2V0cyhkYXRhLCBzaXplb2YoZGF0YSksIGluKTsKKyAgICAgICAgICAgIGlmKGRlY29kZV9pY21wX21zZyhsaW5lICsgSUNNUF9NU0dfU1RBVFNfUFJFRklYX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEgKyBJQ01QX01TR19TVEFUU19QUkVGSVhfTEVOLAorICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF9pY21wNF9tc2dfbWliKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldCA9IDE7CiAgICAgICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAobGluZSwgVENQX1NUQVRTX0xJTkUsIFRDUF9TVEFUU19QUkVGSVhfTEVOKSkgewogICAgICAgICAgICAgaW50ICAgICAgICAgICAgIHJldCA9IHNzY2FuZihsaW5lLCBUQ1BfU1RBVFNfTElORSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNhY2hlZF90Y3BfbWliLnRjcFJ0b0FsZ29yaXRobSwKQEAgLTEzMiwzNSArMjE0LDYgQEAKICAgICB9CiAgICAgZmNsb3NlKGluKTsKIAotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKLSAgICBpbjYgPSBmb3BlbigiL3Byb2MvbmV0L3NubXA2IiwgInIiKTsKLSAgICBpZiAoaW42KSB7Ci0gICAgICAKLSAgICAgICAgd2hpbGUgKGxpbmUgPT0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbjYpKSB7Ci0KLSAgICAgICAgICAgIGlmICgoJ1UnICE9IGxpbmVbMF0pIHx8Ci0gICAgICAgICAgICAgICAgKDAgIT0gc3RybmNtcChsaW5lLCBVRFA2X1NUQVRTX0xJTkUsIFVEUDZfU1RBVFNfUFJFRklYX0xFTikpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBzc2NhbmYobGluZSwgIiUqcyAlbHUiICwgJnZhbHVlKTsKLSAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoJ08nID09IGxpbmVbNF0pIC8qIFVkcDZPdXREYXRhZ3JhbXMgKi8KLSAgICAgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBPdXREYXRhZ3JhbXMgKz0gdmFsdWU7Ci0gICAgICAgICAgICBlbHNlIGlmICgnTicgPT0gbGluZVs0XSkgLyogVWRwNk5vUG9ydHMgKi8KLSAgICAgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBOb1BvcnRzICs9IHZhbHVlOwotICAgICAgICAgICAgZWxzZSBpZiAoJ0QnID09IGxpbmVbNl0pIC8qIFVkcDZJbkRhdGFncmFtcyAqLwotICAgICAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcEluRGF0YWdyYW1zICs9IHZhbHVlOwotICAgICAgICAgICAgZWxzZSBpZiAoJ0UnID09IGxpbmVbNl0pIC8qIFVkcDZJbkVycm9ycyAqLwotICAgICAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcEluRXJyb3JzICs9IHZhbHVlOwotCi0gICAgICAgIH0KLSAgICAgICAgZmNsb3NlKGluNik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eCIsIlVuYWJsZSB0byBvcGVuIC9wcm9jL25ldC9zbm1wNiIpKTsKLSAgICB9Ci0KLSNlbmRpZgotCiAgICAgLyoKICAgICAgKiBUd2VhayBpbGxlZ2FsIHZhbHVlczoKICAgICAgKgpAQCAtMTc2LDcgKzIyOSw4IEBACiAgICAgICovCiAgICAgaWYgKCFjYWNoZWRfdGNwX21pYi50Y3BSdG9BbGdvcml0aG0pCiAgICAgICAgIGNhY2hlZF90Y3BfbWliLnRjcFJ0b0FsZ29yaXRobSA9IDE7Ci0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gcmV0OwogfQogCiBpbnQKQEAgLTE4OSw2ICsyNDMsMTM4IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MSU5VWF9SRUFEX0lQNl9TVEFUCitpbnQgbGludXhfcmVhZF9pcDZfc3RhdCggc3RydWN0IGlwNl9taWIgKmlwNnN0YXQpCit7CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIEZJTEUgICAgICAgICAgICppbjsKKyAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKKyAgICB1bnNpZ25lZCBsb25nICAgc3RhdHM7CisgICAgY2hhciAgICAgICAgICAgKmVuZHA7CisgICAgaW50ICAgICAgICAgICAgIG1hdGNoOworI2VuZGlmCisKKyAgICBtZW1zZXQoKGNoYXIgKikgaXA2c3RhdCwgKDApLCBzaXplb2YoKmlwNnN0YXQpKTsKKworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2lwNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAiUmVhZGluZyAvcHJvYy9uZXQvc25tcDYgc3RhdHNcbiIpKTsKKyAgICBpZiAoTlVMTCA9PSAoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3NubXA2IiwgInIiKSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gb3BlbiAvcHJvYy9uZXQvc25tcDZcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHdoaWxlIChOVUxMICE9IGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaW4pKSB7CisgICAgICAgIGlmICgwICE9IHN0cm5jbXAobGluZSwgSVA2X1NUQVRTX0xJTkUsIElQNl9TVEFUU19QUkVGSVhfTEVOKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgxICE9IHNzY2FuZihsaW5lLCAiJSpzICVsdSIsICZzdGF0cykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBlbmRwID0gc3RyY2hyKGxpbmUsICcgJyk7CisgICAgICAgICplbmRwID0gJ1wwJzsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pcDZzdGF0cyIsICJGaW5kIHRhZzogJXNcbiIsIGxpbmUpKTsKKworICAgICAgICBtYXRjaCA9IDE7CisgICAgICAgIGlmICgwID09IHN0cm5jbXAobGluZSArIDMsICJJbiIsIDIpKSB7ICAvKiBJbiAqLworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiQWRkckVycm9ycyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5BZGRyRXJyb3JzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiRGVsaXZlcnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluRGVsaXZlcnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJEaXNjYXJkcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5EaXNjYXJkcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIkhkckVycm9ycyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5IZHJFcnJvcnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJNY2FzdFBrdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluTWNhc3RQa3RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA1LCAiTm9Sb3V0ZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluTm9Sb3V0ZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJSZWNlaXZlcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5SZWNlaXZlcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIlRydW5jYXRlZFBrdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkluVHJ1bmNhdGVkUGt0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNSwgIlRvb0JpZ0Vycm9ycyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2SW5Ub29CaWdFcnJvcnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDUsICJVbmtub3duUHJvdG9zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZJblVua25vd25Qcm90b3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RybmNtcChsaW5lICsgMywgIk91dCIsIDMpKSB7ICAvKiBPdXQgKi8KKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgNiwgIkRpc2NhcmRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZPdXREaXNjYXJkcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNiwgIkZvcndEYXRhZ3JhbXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNk91dEZvcndEYXRhZ3JhbXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDYsICJNY2FzdFBrdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNk91dE1jYXN0UGt0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNiwgIk5vUm91dGVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZPdXROb1JvdXRlcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNiwgIlJlcXVlc3RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZPdXRSZXF1ZXN0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJuY21wKGxpbmUgKyAzLCAiUmVhc20iLCA1KSkgeyAgLyogUmVhc20gKi8KKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIkZhaWxzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZSZWFzbUZhaWxzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiT0tzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZSZWFzbU9LcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlJlcWRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaXA2X21pYi5pcDZSZWFzbVJlcWRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiVGltZW91dCIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2UmVhc21UaW1lb3V0ID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIG1hdGNoID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cm5jbXAobGluZSArIDMsICJGcmFnIiwgNCkpIHsgIC8qIEZyYWcgKi8KKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkNyZWF0ZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkZyYWdDcmVhdGVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiRmFpbHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pcDZfbWliLmlwNkZyYWdGYWlscyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIk9LcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2lwNl9taWIuaXA2RnJhZ09LcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtYXRjaCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZighbWF0Y2gpCisgICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2lwNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBhbiB1bmtub3duIHRhZ1xuIiwgbGluZSkpOworICAgIH0KKworICAgIGZjbG9zZShpbik7CisjZW5kaWYKKworICAgIG1lbWNweSgoY2hhciAqKSBpcDZzdGF0LCAoY2hhciAqKSAmY2FjaGVkX2lwNl9taWIsIHNpemVvZigqaXA2c3RhdCkpOworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTElOVVhfUkVBRF9JUDZfU1RBVCAqLworCitpbnQKK2xpbnV4X3JlYWRfaWNtcF9tc2dfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKmljbXBzdGF0LAorICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNF9tc2dfbWliICppY21wbXNnc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKmZsYWcpCit7CisgICAgaW50IHJldDsKKworICAgIG1lbXNldChpY21wc3RhdCwgMCwgc2l6ZW9mKCppY21wc3RhdCkpOworICAgIG1lbXNldChpY21wbXNnc3RhdCwgMCwgc2l6ZW9mKCppY21wbXNnc3RhdCkpOworCisgICAgaWYgKChyZXQgPSBsaW51eF9yZWFkX21pYklJX3N0YXRzKCkpID09IC0xKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgaWYgKHJldCkgeworICAgICAgIG1lbWNweShpY21wbXNnc3RhdCwgJmNhY2hlZF9pY21wNF9tc2dfbWliLCBzaXplb2YoKmljbXBtc2dzdGF0KSk7CisgICAgICAgKmZsYWcgPSAxOyAvKiBXZSBoYXZlIGEgdmFsaWQgaWNtcG1zZyAqLworICAgIH0KKworICAgIG1lbWNweShpY21wc3RhdCwgJmNhY2hlZF9pY21wX21pYiwgc2l6ZW9mKCppY21wc3RhdCkpOworICAgIHJldHVybiAwOworfQorCiBpbnQKIGxpbnV4X3JlYWRfaWNtcF9zdGF0KHN0cnVjdCBpY21wX21pYiAqaWNtcHN0YXQpCiB7CkBAIC0yMDAsNiArMzg2LDE2OSBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitsaW51eF9yZWFkX2ljbXA2X3BhcnNlKHN0cnVjdCBpY21wNl9taWIgKmljbXA2c3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKmljbXA2bXNnc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdXBwb3J0KQoreworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyAgICBGSUxFICAgICAgICAgICAqaW47CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgY2hhciAgICAgICAgICAgIG5hbWVbMjU1XTsKKyAgICB1bnNpZ25lZCBsb25nICAgc3RhdHM7CisgICAgY2hhciAgICAgICAgICAgKmVuZHAsICp2YWxzOworICAgIGludCAgICAgICAgICAgICBtYXRjaDsKKyNlbmRpZgorCisgICAgbWVtc2V0KGljbXA2c3RhdCwgMCwgc2l6ZW9mKCppY21wNnN0YXQpKTsKKyAgICBpZiAoTlVMTCAhPSBpY21wNm1zZ3N0YXQpCisgICAgICAgIG1lbXNldChpY21wNm1zZ3N0YXQsIDAsIHNpemVvZigqaWNtcDZtc2dzdGF0KSk7CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pY21wNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAiUmVhZGluZyAvcHJvYy9uZXQvc25tcDYgc3RhdHNcbiIpKTsKKyAgICBpZiAoTlVMTCA9PSAoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3NubXA2IiwgInIiKSkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC9pY21wNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBvcGVuIC9wcm9jL25ldC9zbm1wNlxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKE5VTEwgIT0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKKyAgICAgICAgaWYgKDAgIT0gc3RybmNtcChsaW5lLCBJQ01QNl9TVEFUU19MSU5FLCBJQ01QNl9TVEFUU19QUkVGSVhfTEVOKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgyICE9IHNzY2FuZihsaW5lLCAiJXMgJWx1IiwgbmFtZSwgJnN0YXRzKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGVuZHAgPSBzdHJjaHIobGluZSwgJyAnKTsKKyAgICAgICAgKmVuZHAgPSAnXDAnOworICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L2ljbXA2c3RhdHMiLCAiRmluZCB0YWc6ICVzXG4iLCBsaW5lKSk7CisKKyAgICAgICAgdmFscyA9IG5hbWU7CisgICAgICAgIGlmIChOVUxMICE9IGljbXA2bXNnc3RhdCkgeworICAgICAgICAgICAgaW50IHR5cGU7CisgICAgICAgICAgICBpZiAoMCA9PSBzdHJuY21wKG5hbWUsICJJY21wNk91dFR5cGUiLCAxMikpIHsKKyAgICAgICAgICAgICAgICBzdHJzZXAoJnZhbHMsICJlIik7CisgICAgICAgICAgICAgICAgdHlwZSA9IGF0b2kodmFscyk7CisgICAgICAgICAgICAgICAgaWYgKCB0eXBlIDwgMCB8fCB0eXBlID4gMjU1ICkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWNtcDZtc2dzdGF0LT52YWxzW3R5cGVdLk91dFR5cGUgPSBzdGF0czsKKyAgICAgICAgICAgICAgICAqc3VwcG9ydCA9IDE7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RybmNtcChuYW1lLCAiSWNtcDZJblR5cGUiLCAxMSkpIHsKKyAgICAgICAgICAgICAgICBzdHJzZXAoJnZhbHMsICJlIik7CisgICAgICAgICAgICAgICAgdHlwZSA9IGF0b2kodmFscyk7CisgICAgICAgICAgICAgICAgaWYgKCB0eXBlIDwgMCB8fCB0eXBlID4gMjU1ICkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgaWNtcDZtc2dzdGF0LT52YWxzW3R5cGVdLkluVHlwZSA9IHN0YXRzOworICAgICAgICAgICAgICAgICpzdXBwb3J0ID0gMTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIG1hdGNoID0gMTsKKyAgICAgICAgaWYgKDAgPT0gc3RybmNtcChsaW5lICsgNSwgIkluIiwgMikpIHsgIC8qIEluICovCisgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJEZXN0VW5yZWFjaHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkRlc3RVbnJlYWNocyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkVjaG9zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5FY2hvcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkVjaG9SZXBsaWVzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5FY2hvUmVwbGllcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkVycm9ycyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluRXJyb3JzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiR3JvdXBNZW1iUXVlcmllcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluR3JvdXBNZW1iUXVlcmllcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIkdyb3VwTWVtYlJlZHVjdGlvbnMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkdyb3VwTWVtYlJlZHVjdGlvbnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJHcm91cE1lbWJSZXNwb25zZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbkdyb3VwTWVtYlJlc3BvbnNlcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIk1zZ3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJbk1zZ3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJOZWlnaGJvckFkdmVydGlzZW1lbnRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiTmVpZ2hib3JTb2xpY2l0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluTmVpZ2hib3JTb2xpY2l0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIlBrdFRvb0JpZ3MiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJblBrdFRvb0JpZ3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDcsICJQYXJtUHJvYmxlbXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJblBhcm1Qcm9ibGVtcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNywgIlJlZGlyZWN0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNkluUmVkaXJlY3RzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiUm91dGVyQWR2ZXJ0aXNlbWVudHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJblJvdXRlckFkdmVydGlzZW1lbnRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiUm91dGVyU29saWNpdHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZJblJvdXRlclNvbGljaXRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA3LCAiVGltZUV4Y2RzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2SW5UaW1lRXhjZHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RybmNtcChsaW5lICsgNSwgIk91dCIsIDMpKSB7ICAvKiBPdXQgKi8KKyAgICAgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIkRlc3RVbnJlYWNocyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dERlc3RVbnJlYWNocyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIkVjaG9zIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0RWNob3MgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJFY2hvUmVwbGllcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dEVjaG9SZXBsaWVzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiR3JvdXBNZW1iUmVkdWN0aW9ucyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dEdyb3VwTWVtYlJlZHVjdGlvbnMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJHcm91cE1lbWJSZXNwb25zZXMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRHcm91cE1lbWJSZXNwb25zZXMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJNc2dzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0TXNncyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIk5laWdoYm9yQWR2ZXJ0aXNlbWVudHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzID0gc3RhdHM7CisgICAgICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA4LCAiTmVpZ2hib3JTb2xpY2l0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dE5laWdoYm9yU29saWNpdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJQa3RUb29CaWdzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0UGt0VG9vQmlncyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlBhcm1Qcm9ibGVtcyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dFBhcm1Qcm9ibGVtcyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlJlZGlyZWN0cyIpKSB7CisgICAgICAgICAgICAgICAgY2FjaGVkX2ljbXA2X21pYi5pY21wNk91dFJlZGlyZWN0cyA9IHN0YXRzOworICAgICAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgOCwgIlJvdXRlclNvbGljaXRzIikpIHsKKyAgICAgICAgICAgICAgICBjYWNoZWRfaWNtcDZfbWliLmljbXA2T3V0Um91dGVyU29saWNpdHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoMCA9PSBzdHJjbXAobGluZSArIDgsICJUaW1lRXhjZHMiKSkgeworICAgICAgICAgICAgICAgIGNhY2hlZF9pY21wNl9taWIuaWNtcDZPdXRUaW1lRXhjZHMgPSBzdGF0czsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbWF0Y2ggPSAwOworICAgICAgICB9CisgICAgICAgIGlmKCFtYXRjaCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvaWNtcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICAgICAiJXMgaXMgYW4gdW5rbm93biB0YWdcbiIsIGxpbmUpKTsKKyAgICB9CisKKyAgICBmY2xvc2UoaW4pOworI2VuZGlmCisKKyAgICBtZW1jcHkoKGNoYXIgKikgaWNtcDZzdGF0LCAoY2hhciAqKSAmY2FjaGVkX2ljbXA2X21pYiwKKyAgICAgICAgICAgc2l6ZW9mKCppY21wNnN0YXQpKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50CitsaW51eF9yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKmljbXA2c3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKmljbXA2bXNnc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzdXBwb3J0KQoreworICAgICBpZiAobGludXhfcmVhZF9pY21wNl9wYXJzZShpY21wNnN0YXQsIGljbXA2bXNnc3RhdCwgc3VwcG9ydCkgPCAwKQorICAgICAgICAgcmV0dXJuIC0xOworICAgICBlbHNlCisgICAgICAgICByZXR1cm4gMDsKK30KKworaW50CitsaW51eF9yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqaWNtcDZzdGF0KQoreworICAgaWYgKGxpbnV4X3JlYWRfaWNtcDZfcGFyc2UoaWNtcDZzdGF0LCBOVUxMLCBOVUxMKSA8IDApCisgICAgICAgcmV0dXJuIC0xOworICAgZWxzZQorICAgICAgIHJldHVybiAwOworfQorCiBpbnQKIGxpbnV4X3JlYWRfdGNwX3N0YXQoc3RydWN0IHRjcF9taWIgKnRjcHN0YXQpCiB7CkBAIC0yMTYsNiArNTY1LDczIEBACiAgICAgbWVtc2V0KChjaGFyICopIHVkcHN0YXQsICgwKSwgc2l6ZW9mKCp1ZHBzdGF0KSk7CiAgICAgaWYgKGxpbnV4X3JlYWRfbWliSUlfc3RhdHMoKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIHsKKyAgICAgICAgc3RydWN0IHVkcDZfbWliIHVkcDZzdGF0OworICAgICAgICBtZW1zZXQoJnVkcDZzdGF0LCAwLCBzaXplb2YodWRwNnN0YXQpKTsKKworICAgICAgICBpZiAobGludXhfcmVhZF91ZHA2X3N0YXQoJnVkcDZzdGF0KSA9PSAwKSB7CisgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBPdXREYXRhZ3JhbXMgKz0gdWRwNnN0YXQudWRwNk91dERhdGFncmFtczsKKyAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcE5vUG9ydHMgICAgICArPSB1ZHA2c3RhdC51ZHA2Tm9Qb3J0czsKKyAgICAgICAgICAgIGNhY2hlZF91ZHBfbWliLnVkcEluRGF0YWdyYW1zICArPSB1ZHA2c3RhdC51ZHA2SW5EYXRhZ3JhbXM7CisgICAgICAgICAgICBjYWNoZWRfdWRwX21pYi51ZHBJbkVycm9ycyAgICAgKz0gdWRwNnN0YXQudWRwNkluRXJyb3JzOworICAgICAgICB9CisgICAgfQorI2VuZGlmCiAgICAgbWVtY3B5KChjaGFyICopIHVkcHN0YXQsIChjaGFyICopICZjYWNoZWRfdWRwX21pYiwgc2l6ZW9mKCp1ZHBzdGF0KSk7CiAgICAgcmV0dXJuIDA7CiB9CisKK2ludAorbGludXhfcmVhZF91ZHA2X3N0YXQoc3RydWN0IHVkcDZfbWliICp1ZHA2c3RhdCkKK3sKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgRklMRSAgICAgICAgICAgKmluOworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdOworICAgIHVuc2lnbmVkIGxvbmcgICBzdGF0czsKKyAgICBjaGFyICAgICAgICAgICAqZW5kcDsKKyNlbmRpZgorCisgICAgbWVtc2V0KHVkcDZzdGF0LCAwLCBzaXplb2YoKnVkcDZzdGF0KSk7CisKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgREVCVUdNU0dUTCgoIm1pYklJL2tlcm5lbF9saW51eC91ZHA2c3RhdHMiLAorICAgICAgICAgICAgICAgICJSZWFkaW5nIC9wcm9jL25ldC9zbm1wNiBzdGF0c1xuIikpOworICAgIGlmIChOVUxMID09IChpbiA9IGZvcGVuKCIvcHJvYy9uZXQvc25tcDYiLCAiciIpKSkgeworICAgICAgICBERUJVR01TR1RMKCgibWliSUkva2VybmVsX2xpbnV4L3VkcDZzdGF0cyIsCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gb3BlbiAvcHJvYy9uZXQvc25tcDZcbiIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgd2hpbGUgKE5VTEwgIT0gZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKKyAgICAgICAgaWYgKDAgIT0gc3RybmNtcChsaW5lLCBVRFA2X1NUQVRTX0xJTkUsIFVEUDZfU1RBVFNfUFJFRklYX0xFTikpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoMSAhPSBzc2NhbmYobGluZSwgIiUqcyAlbHUiLCAmc3RhdHMpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZW5kcCA9IHN0cmNocihsaW5lLCAnICcpOworICAgICAgICAqZW5kcCA9ICdcMCc7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvdWRwNnN0YXRzIiwgIkZpbmQgdGFnOiAlc1xuIiwgbGluZSkpOworCisgICAgICAgIGlmICgwID09IHN0cmNtcChsaW5lICsgNCwgIk91dERhdGFncmFtcyIpKSB7CisgICAgICAgICAgICBjYWNoZWRfdWRwNl9taWIudWRwNk91dERhdGFncmFtcyA9IHN0YXRzOworICAgICAgICB9IGVsc2UgaWYgKDAgPT0gc3RyY21wKGxpbmUgKyA0LCAiTm9Qb3J0cyIpKSB7CisgICAgICAgICAgICBjYWNoZWRfdWRwNl9taWIudWRwNk5vUG9ydHMgPSBzdGF0czsKKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNCwgIkluRGF0YWdyYW1zIikpIHsKKyAgICAgICAgICAgIGNhY2hlZF91ZHA2X21pYi51ZHA2SW5EYXRhZ3JhbXMgPSBzdGF0czsKKyAgICAgICAgfSBlbHNlIGlmICgwID09IHN0cmNtcChsaW5lICsgNCwgIkluRXJyb3JzIikpIHsKKyAgICAgICAgICAgIGNhY2hlZF91ZHA2X21pYi51ZHA2SW5FcnJvcnMgPSBzdGF0czsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS9rZXJuZWxfbGludXgvdWRwNnN0YXRzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBpcyBhbiB1bmtub3duIHRhZ1xuIiwgbGluZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgZmNsb3NlKGluKTsKKyNlbmRpZgorCisgICAgbWVtY3B5KChjaGFyICopIHVkcDZzdGF0LCAoY2hhciAqKSAmY2FjaGVkX3VkcDZfbWliLCBzaXplb2YoKnVkcDZzdGF0KSk7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbGludXguaCBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oCmluZGV4IGZiN2RiOTYuLmIzYzU4ZDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9saW51eC5oCkBAIC02LDg4ICs2LDIwIEBACiAjaWZuZGVmIF9NSUJHUk9VUF9LRVJORUxfTElOVVhfSAogI2RlZmluZSBfTUlCR1JPVVBfS0VSTkVMX0xJTlVYX0gKIAotc3RydWN0IGlwX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRm9yd2FyZGluZzsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBEZWZhdWx0VFRMOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluUmVjZWl2ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5IZHJFcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5BZGRyRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZvcndEYXRhZ3JhbXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5Vbmtub3duUHJvdG9zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluRGlzY2FyZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwSW5EZWxpdmVyczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBPdXRSZXF1ZXN0czsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBPdXREaXNjYXJkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBPdXROb1JvdXRlczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbVRpbWVvdXQ7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21SZXFkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbU9LczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbUZhaWxzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdPS3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ0ZhaWxzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdDcmVhdGVzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJvdXRpbmdEaXNjYXJkczsKLX07Ci0KLXN0cnVjdCBpY21wX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbk1zZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRGVzdFVucmVhY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5UaW1lRXhjZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblBhcm1Qcm9iczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluU3JjUXVlbmNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluUmVkaXJlY3RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FY2hvczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRWNob1JlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVzdGFtcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVzdGFtcFJlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkFkZHJNYXNrczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluQWRkck1hc2tSZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0TXNnczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dERlc3RVbnJlYWNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVFeGNkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFBhcm1Qcm9iczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFNyY1F1ZW5jaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRSZWRpcmVjdHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRFY2hvczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVjaG9SZXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZXN0YW1wczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFRpbWVzdGFtcFJlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRBZGRyTWFza3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRBZGRyTWFza1JlcHM7Ci19OwotCi1zdHJ1Y3QgdWRwX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcEluRGF0YWdyYW1zOwotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBOb1BvcnRzOwotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBJbkVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwT3V0RGF0YWdyYW1zOwotfTsKLQotc3RydWN0IHRjcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9BbGdvcml0aG07Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b01pbjsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvTWF4OwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BNYXhDb25uOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BBY3RpdmVPcGVuczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUGFzc2l2ZU9wZW5zOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BBdHRlbXB0RmFpbHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEVzdGFiUmVzZXRzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BDdXJyRXN0YWI7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEluU2VnczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwT3V0U2VnczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUmV0cmFuc1NlZ3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEluRXJyczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwT3V0UnN0czsKLSAgICBzaG9ydCAgICAgICAgICAgdGNwSW5FcnJzVmFsaWQ7Ci0gICAgc2hvcnQgICAgICAgICAgIHRjcE91dFJzdHNWYWxpZDsKLX07Ci0KKyNpbmNsdWRlICJrZXJuZWxfbWliLmgiCiAKIGludCAgICAgICAgICAgICBsaW51eF9yZWFkX2lwX3N0YXQoc3RydWN0IGlwX21pYiAqKTsKK2ludCAgICAgICAgICAgICBsaW51eF9yZWFkX2lwNl9zdGF0KHN0cnVjdCBpcDZfbWliICopOwogaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfaWNtcF9zdGF0KHN0cnVjdCBpY21wX21pYiAqKTsKK2ludCAgICAgICAgICAgICBsaW51eF9yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqKTsKIGludCAgICAgICAgICAgICBsaW51eF9yZWFkX3VkcF9zdGF0KHN0cnVjdCB1ZHBfbWliICopOworaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfdWRwNl9zdGF0KHN0cnVjdCB1ZHA2X21pYiAqKTsKIGludCAgICAgICAgICAgICBsaW51eF9yZWFkX3RjcF9zdGF0KHN0cnVjdCB0Y3BfbWliICopOworaW50ICAgICAgICAgICAgIGxpbnV4X3JlYWRfaWNtcF9tc2dfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA0X21zZ19taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpmbGFnKTsKK2ludCAgICAgICAgICAgICBsaW51eF9yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKnN1cHBvcnQpOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9LRVJORUxfTElOVVhfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX21pYi5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX21pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiODYzOWYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbWliLmgKQEAgLTAsMCArMSwxNjQgQEAKKy8qCisgKiAgTUlCIHN0YXRpc3RpY3MgZ2F0aGVyaW5nIHN0cnVjdHVyZXMKKyAqLworCisjaWZuZGVmIF9NSUJHUk9VUF9LRVJORUxfTUlCX0gKKyNkZWZpbmUgX01JQkdST1VQX0tFUk5FTF9NSUJfSAorCitzdHJ1Y3QgaXBfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBGb3J3YXJkaW5nOworICAgIHVuc2lnbmVkIGxvbmcgICBpcERlZmF1bHRUVEw7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwSW5SZWNlaXZlczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBJbkhkckVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBJbkFkZHJFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwRm9yd0RhdGFncmFtczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBJblVua25vd25Qcm90b3M7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwSW5EaXNjYXJkczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBJbkRlbGl2ZXJzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dFJlcXVlc3RzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dERpc2NhcmRzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcE91dE5vUm91dGVzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtVGltZW91dDsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBSZWFzbVJlcWRzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtT0tzOworICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtRmFpbHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ09LczsKKyAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnRmFpbHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwRnJhZ0NyZWF0ZXM7CisgICAgdW5zaWduZWQgbG9uZyAgIGlwUm91dGluZ0Rpc2NhcmRzOworfTsKKworc3RydWN0IGlwNl9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5SZWNlaXZlczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluSGRyRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5Ub29CaWdFcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZJbk5vUm91dGVzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5BZGRyRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5Vbmtub3duUHJvdG9zOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5UcnVuY2F0ZWRQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2SW5EaXNjYXJkczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluRGVsaXZlcnM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZPdXRGb3J3RGF0YWdyYW1zOworICAgIHVuc2lnbmVkIGxvbmcgaXA2T3V0UmVxdWVzdHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZPdXREaXNjYXJkczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNk91dE5vUm91dGVzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2UmVhc21UaW1lb3V0OworICAgIHVuc2lnbmVkIGxvbmcgaXA2UmVhc21SZXFkczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNlJlYXNtT0tzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2UmVhc21GYWlsczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkZyYWdPS3M7CisgICAgdW5zaWduZWQgbG9uZyBpcDZGcmFnRmFpbHM7CisgICAgdW5zaWduZWQgbG9uZyBpcDZGcmFnQ3JlYXRlczsKKyAgICB1bnNpZ25lZCBsb25nIGlwNkluTWNhc3RQa3RzOworICAgIHVuc2lnbmVkIGxvbmcgaXA2T3V0TWNhc3RQa3RzOworfTsKKworc3RydWN0IGljbXBfbWliIHsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluTXNnczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5EZXN0VW5yZWFjaHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVFeGNkczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluUGFybVByb2JzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5TcmNRdWVuY2hzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5SZWRpcmVjdHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVjaG9zOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FY2hvUmVwczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZXN0YW1wczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZXN0YW1wUmVwczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluQWRkck1hc2tzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5BZGRyTWFza1JlcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRNc2dzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RGVzdFVucmVhY2hzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZUV4Y2RzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0UGFybVByb2JzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0U3JjUXVlbmNoczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFJlZGlyZWN0czsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVjaG9zOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RWNob1JlcHM7CisgICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lc3RhbXBzOworICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZXN0YW1wUmVwczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEFkZHJNYXNrczsKKyAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEFkZHJNYXNrUmVwczsKK307CisKK3N0cnVjdCBpY21wNl9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbk1zZ3M7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluRXJyb3JzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbkRlc3RVbnJlYWNoczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Qa3RUb29CaWdzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJblRpbWVFeGNkczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5QYXJtUHJvYmxlbXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluRWNob3M7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluRWNob1JlcGxpZXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluR3JvdXBNZW1iUXVlcmllczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Hcm91cE1lbWJSZXNwb25zZXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluR3JvdXBNZW1iUmVkdWN0aW9uczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Sb3V0ZXJTb2xpY2l0czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5Sb3V0ZXJBZHZlcnRpc2VtZW50czsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2SW5OZWlnaGJvclNvbGljaXRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZJbk5laWdoYm9yQWR2ZXJ0aXNlbWVudHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNkluUmVkaXJlY3RzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRNc2dzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXREZXN0VW5yZWFjaHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dFBrdFRvb0JpZ3M7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dFRpbWVFeGNkczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0UGFybVByb2JsZW1zOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRFY2hvczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0RWNob1JlcGxpZXM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dFJvdXRlclNvbGljaXRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXROZWlnaGJvclNvbGljaXRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzOworICAgIHVuc2lnbmVkIGxvbmcgaWNtcDZPdXRSZWRpcmVjdHM7CisgICAgdW5zaWduZWQgbG9uZyBpY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlczsKKyAgICB1bnNpZ25lZCBsb25nIGljbXA2T3V0R3JvdXBNZW1iUmVkdWN0aW9uczsKK307CisKK3N0cnVjdCBpY21wX21zZ19taWIgeworICAgIHVuc2lnbmVkIGxvbmcgSW5UeXBlOworICAgIHVuc2lnbmVkIGxvbmcgT3V0VHlwZTsKK307CisKKy8qIExldHMgdXNlIHdyYXBwZXIgc3RydWN0dXJlcyBmb3IgZnV0dXJlIGV4cGFuc2lvbiAqLworc3RydWN0IGljbXA0X21zZ19taWIgeworICAgIHN0cnVjdCBpY21wX21zZ19taWIgdmFsc1syNTZdOworfTsKKworc3RydWN0IGljbXA2X21zZ19taWIgeworICAgIHN0cnVjdCBpY21wX21zZ19taWIgdmFsc1syNTZdOworfTsKKworc3RydWN0IHVkcF9taWIgeworICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBJbkRhdGFncmFtczsKKyAgICB1bnNpZ25lZCBsb25nICAgdWRwTm9Qb3J0czsKKyAgICB1bnNpZ25lZCBsb25nICAgdWRwSW5FcnJvcnM7CisgICAgdW5zaWduZWQgbG9uZyAgIHVkcE91dERhdGFncmFtczsKK307CisKK3N0cnVjdCB1ZHA2X21pYiB7CisgICAgdW5zaWduZWQgbG9uZyB1ZHA2SW5EYXRhZ3JhbXM7CisgICAgdW5zaWduZWQgbG9uZyB1ZHA2Tm9Qb3J0czsKKyAgICB1bnNpZ25lZCBsb25nIHVkcDZJbkVycm9yczsKKyAgICB1bnNpZ25lZCBsb25nIHVkcDZPdXREYXRhZ3JhbXM7Cit9OworCitzdHJ1Y3QgdGNwX21pYiB7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b0FsZ29yaXRobTsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvTWluOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9NYXg7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcE1heENvbm47CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcEFjdGl2ZU9wZW5zOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BQYXNzaXZlT3BlbnM7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcEF0dGVtcHRGYWlsczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwRXN0YWJSZXNldHM7CisgICAgdW5zaWduZWQgbG9uZyAgIHRjcEN1cnJFc3RhYjsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwSW5TZWdzOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BPdXRTZWdzOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSZXRyYW5zU2VnczsKKyAgICB1bnNpZ25lZCBsb25nICAgdGNwSW5FcnJzOworICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BPdXRSc3RzOworICAgIHNob3J0ICAgICAgICAgICB0Y3BJbkVycnNWYWxpZDsKKyAgICBzaG9ydCAgICAgICAgICAgdGNwT3V0UnN0c1ZhbGlkOworfTsKKworI2VuZGlmICAvKiBfTUlCR1JPVVBfS0VSTkVMX01JQl9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmMKaW5kZXggOTNmMzhiNy4uMDgwNjE4MCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuYwpAQCAtMTUsNiArMTUsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KICNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgogI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CiAjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdmFyLmg+CkBAIC0zOCw4ICszOSwxMCBAQAogCiAgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKIAotICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LmljbXAuc3RhdHMiLCBpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKQorICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LmljbXAuc3RhdHMiLCBpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoIm5ldGJzZF9yZWFkX2ljbXBfc3RhdDogbmV0LmluZXQuaWNtcC5zdGF0cyIpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWliLT5pY21wSW5Nc2dzID0gaWNtcHN0YXRbSUNNUF9TVEFUX0JBRENPREVdCiAgICAgICAgICsgaWNtcHN0YXRbSUNNUF9TVEFUX1RPT1NIT1JUXQpAQCAtODYsNiArODksMTA0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKworaW50CituZXRic2RfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKm1pYikKK3sKKyAgICB1aW50NjRfdCBpY21wc3RhdFtJQ01QNl9OU1RBVFNdOworICAgIHNpemVfdCAgIHNpemUgPSBzaXplb2YoaWNtcHN0YXQpOworICAgIGludCAgICAgIGk7CisKKyAgICAodm9pZCltZW1zZXQobWliLCAwLCBzaXplb2YoKm1pYikpOworCisgICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQ2LmljbXA2LnN0YXRzIiwgaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJuZXRic2RfcmVhZF9pY21wNl9zdGF0OiBuZXQuaW5ldDYuaWNtcDYuc3RhdHMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1pYi0+aWNtcDZJbk1zZ3MgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0JBRENPREVdCisgICAgICAgICAgICArIGljbXBzdGF0W0lDTVBfU1RBVF9UT09TSE9SVF0KKwkgICAgKyBpY21wc3RhdFtJQ01QX1NUQVRfQ0hFQ0tTVU1dCisgICAgICAgICAgICArIGljbXBzdGF0W0lDTVBfU1RBVF9CQURMRU5dOworICAgIGZvciAoaSA9IDA7IGkgPD0gSUNNUDZfTUFYVFlQRTsgaSsrKQorICAgICAgICBtaWItPmljbXA2SW5Nc2dzICArPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIGldOworICAgIG1pYi0+aWNtcDZJbkVycm9ycyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfQkFEQ09ERV0KKyAgICAgICAgKyBpY21wc3RhdFtJQ01QNl9TVEFUX1RPT1NIT1JUXQorICAgICAgICArIGljbXBzdGF0W0lDTVA2X1NUQVRfQ0hFQ0tTVU1dCisgICAgICAgICsgaWNtcHN0YXRbSUNNUDZfU1RBVF9CQURMRU5dOworICAgIG1pYi0+aWNtcDZJbkRlc3RVbnJlYWNocyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgSUNNUDZfRFNUX1VOUkVBQ0hdOworICAgIG1pYi0+aWNtcDZJblBrdFRvb0JpZ3MgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIElDTVA2X1BBQ0tFVF9UT09fQklHXTsKKyAgICBtaWItPmljbXA2SW5UaW1lRXhjZHMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIElDTVA2X1RJTUVfRVhDRUVERURdOworICAgIG1pYi0+aWNtcDZJblBhcm1Qcm9ibGVtcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgSUNNUDZfUEFSQU1fUFJPQl07CisgICAgbWliLT5pY21wNkluRWNob3MgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIElDTVA2X0VDSE9fUkVRVUVTVF07CisgICAgbWliLT5pY21wNkluRWNob1JlcGxpZXMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIElDTVA2X0VDSE9fUkVQTFldOworICAgIG1pYi0+aWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0lOSElTVCArIE1MRF9MSVNURU5FUl9RVUVSWV07CisgICAgbWliLT5pY21wNkluR3JvdXBNZW1iUmVzcG9uc2VzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBNTERfTElTVEVORVJfUkVQT1JUXTsKKyAgICBtaWItPmljbXA2SW5Sb3V0ZXJTb2xpY2l0cyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTkRfUk9VVEVSX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZJblJvdXRlckFkdmVydGlzZW1lbnRzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBORF9ST1VURVJfQURWRVJUXTsKKyAgICBtaWItPmljbXA2SW5OZWlnaGJvclNvbGljaXRzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBORF9ORUlHSEJPUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2SW5OZWlnaGJvckFkdmVydGlzZW1lbnRzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9JTkhJU1QgKyBORF9ORUlHSEJPUl9BRFZFUlRdOworICAgIG1pYi0+aWNtcDZJblJlZGlyZWN0cyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUICsgTkRfUkVESVJFQ1RdOworCisgICAgbWliLT5pY21wNk91dE1zZ3MgPSBpY21wc3RhdFtJQ01QNl9TVEFUX0JBRENPREVdCisgICAgICAgICsgaWNtcHN0YXRbSUNNUDZfU1RBVF9UT09TSE9SVF0KKyAgICAgICAgKyBpY21wc3RhdFtJQ01QNl9TVEFUX0NIRUNLU1VNXQorICAgICAgICArIGljbXBzdGF0W0lDTVA2X1NUQVRfQkFETEVOXTsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVA2X01BWFRZUEU7IGkrKykKKyAgICAgICAgbWliLT5pY21wNk91dE1zZ3MgKz0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgaV07CisgICAgbWliLT5pY21wNk91dERlc3RVbnJlYWNocyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIElDTVA2X0RTVF9VTlJFQUNIXTsKKyAgICBtaWItPmljbXA2T3V0UGt0VG9vQmlncyA9ICBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBJQ01QNl9QQUNLRVRfVE9PX0JJR107CisgICAgbWliLT5pY21wNk91dFRpbWVFeGNkcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIElDTVA2X1RJTUVfRVhDRUVERURdOworICAgIG1pYi0+aWNtcDZPdXRQYXJtUHJvYmxlbXMgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBJQ01QNl9QQVJBTV9QUk9CXTsKKyAgICBtaWItPmljbXA2T3V0RWNob3MgPSBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBJQ01QNl9FQ0hPX1JFUVVFU1RdOworICAgIG1pYi0+aWNtcDZPdXRFY2hvUmVwbGllcyA9IGljbXBzdGF0W0lDTVA2X1NUQVRfT1VUSElTVCArIElDTVA2X0VDSE9fUkVQTFldOworICAgIG1pYi0+aWNtcDZPdXRSb3V0ZXJTb2xpY2l0cyA9ICBpY21wc3RhdFtJQ01QNl9TVEFUX09VVEhJU1QgKyBORF9ST1VURVJfU09MSUNJVF07CisgICAgbWliLT5pY21wNk91dE5laWdoYm9yU29saWNpdHMgPSAgaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgTkRfTkVJR0hCT1JfU09MSUNJVF07CisgICAgbWliLT5pY21wNk91dE5laWdoYm9yQWR2ZXJ0aXNlbWVudHMgPSAgaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgTkRfTkVJR0hCT1JfQURWRVJUXTsKKyAgICBtaWItPmljbXA2T3V0UmVkaXJlY3RzID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgTkRfUkVESVJFQ1RdOworICAgIG1pYi0+aWNtcDZPdXRHcm91cE1lbWJSZXNwb25zZXMgPSAgaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgTUxEX0xJU1RFTkVSX1JFUE9SVF07CisgICAgbWliLT5pY21wNk91dEdyb3VwTWVtYlJlZHVjdGlvbnMgPSAgaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUICsgTUxEX0xJU1RFTkVSX0RPTkVdOworCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50CituZXRic2RfcmVhZF9pY21wX21zZ19zdGF0KHN0cnVjdCBpY21wX21pYiAqbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqbXNnbWliLAorCQkJICBpbnQgKmZsYWcpCit7CisgICAgbmV0YnNkX3JlYWRfaWNtcF9zdGF0KG1pYik7CisgICAgKmZsYWcgPSAwOworICAgIHJldHVybiAwOworfQorCisKK2ludAorbmV0YnNkX3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKm1zZ21pYiwKKwkJCSAgIGludCAqc3VwcG9ydCkKK3sKKyAgICB1aW50NjRfdCBpY21wc3RhdFtJQ01QNl9OU1RBVFNdOworICAgIHNpemVfdCAgIHNpemUgPSBzaXplb2YoaWNtcHN0YXQpOworICAgIGludCAgICAgIGk7CisKKyAgICBuZXRic2RfcmVhZF9pY21wNl9zdGF0KG1pYik7CisKKyAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldDYuaWNtcDYuc3RhdHMiLCBpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoIm5ldGJzZF9yZWFkX2ljbXA2X3N0YXQ6IG5ldC5pbmV0Ni5pY21wNi5zdGF0cyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKSB7CisJbXNnbWliLT52YWxzW2ldLkluVHlwZSA9IGljbXBzdGF0W0lDTVA2X1NUQVRfSU5ISVNUK2ldOworCW1zZ21pYi0+dmFsc1tpXS5PdXRUeXBlID0gaWNtcHN0YXRbSUNNUDZfU1RBVF9PVVRISVNUK2ldOworICAgIH0KKyAgICAqc3VwcG9ydCA9IDE7CisgICAgcmV0dXJuIDA7Cit9CisKKwogaW50CiBuZXRic2RfcmVhZF9pcF9zdGF0KHN0cnVjdCBpcF9taWIgKm1pYikKIHsKQEAgLTk3LDggKzE5OCwxMCBAQAogCiAgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKIAotICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LmlwLnN0YXRzIiwgaXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpCisgICAgaWYgKC0xID09IHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuaXAuc3RhdHMiLCBpcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJuZXRic2RfcmVhZF9pcF9zdGF0OiBuZXQuaW5ldC5pcC5zdGF0cyIpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWliLT5pcEZvcndhcmRpbmcgPSAwOwogICAgIGxlbiA9IHNpemVvZiBpOwpAQCAtMTM4LDYgKzI0MSw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKwogaW50CiBuZXRic2RfcmVhZF90Y3Bfc3RhdChzdHJ1Y3QgdGNwX21pYiAqbWliKQogewpAQCAtMTQ2LDggKzI1MCwxMCBAQAogCiAgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKIAotICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnRjcC5zdGF0cyIsIHRjcHN0YXQsICZzaXplLCBOVUxMLCAwKSkKKyAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC50Y3Auc3RhdHMiLCB0Y3BzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigibmV0YnNkX3JlYWRfdGNwX3N0YXQ6IG5ldC5pbmV0LnRjcC5zdGF0cyIpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWliLT50Y3BSdG9BbGdvcml0aG0gPSA0OyAvKiBBc3N1bWUgVmFuIEphY29ic2VuJ3MgYWxnb3JpdGhtICovCiAgICAgbWliLT50Y3BSdG9NaW4gPSBUQ1BUVl9NSU47CkBAIC0xNzQsNiArMjgwLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorCiBpbnQKIG5ldGJzZF9yZWFkX3VkcF9zdGF0KHN0cnVjdCB1ZHBfbWliICptaWIpCiB7CkBAIC0xODIsMTQgKzI4OSwxNiBAQAogCiAgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKIAotICAgIGlmICgtMSA9PSBzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnVkcC5zdGF0cyIsIHVkcHN0YXQsICZzaXplLCBOVUxMLCAwKSkKKyAgICBpZiAoLTEgPT0gc3lzY3RsYnluYW1lKCJuZXQuaW5ldC51ZHAuc3RhdHMiLCB1ZHBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigibmV0YnNkX3JlYWRfdWRwX3N0YXQ6IG5ldC5pbmV0LnVkcC5zdGF0cyIpOwogICAgICAgICByZXR1cm4gLTE7CisgICAgfQogCiAgICAgbWliLT51ZHBJbkRhdGFncmFtcyA9IHVkcHN0YXRbVURQX1NUQVRfSVBBQ0tFVFNdOwogICAgIG1pYi0+dWRwTm9Qb3J0cyA9IHVkcHN0YXRbVURQX1NUQVRfTk9QT1JUXTsKICAgICBtaWItPnVkcE91dERhdGFncmFtcyA9IHVkcHN0YXRbVURQX1NUQVRfT1BBQ0tFVFNdOwogICAgIG1pYi0+dWRwSW5FcnJvcnMgPSB1ZHBzdGF0W1VEUF9TVEFUX0hEUk9QU10KLSAgICAgICAgKyB1ZHBzdGF0W1VEUF9TVEFUX0JBRFNVTV0gLyogKyB1ZHBzdGF0W1VEUF9TVEFUX0RJU0NBUkRdIC8qIEZJWE1FICovCisgICAgICAgICsgdWRwc3RhdFtVRFBfU1RBVF9CQURTVU1dIC8qICsgdWRwc3RhdFtVRFBfU1RBVF9ESVNDQVJEXSAqLyAvKiBGSVhNRSAqLwogICAgICAgICArIHVkcHN0YXRbVURQX1NUQVRfRlVMTFNPQ0tdICsgdWRwc3RhdFtVRFBfU1RBVF9CQURMRU5dOwogCiAgICAgcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfbmV0YnNkLmgKaW5kZXggOTAwMDY4Mi4uYWNjYjlhNyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX25ldGJzZC5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9uZXRic2QuaApAQCAtMyw4NSArMywxNiBAQAogCiAjaWYgZGVmaW5lZChORVRCU0RfU1RBVFNfVklBX1NZU0NUTCkKIAotc3RydWN0IGljbXBfbWliIHsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluTXNnczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5EZXN0VW5yZWFjaHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJblRpbWVFeGNkczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluUGFybVByb2JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5TcmNRdWVuY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5SZWRpcmVjdHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBJbkVjaG9zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5FY2hvUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZXN0YW1wczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluVGltZXN0YW1wUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcEluQWRkck1hc2tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wSW5BZGRyTWFza1JlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRNc2dzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RGVzdFVucmVhY2hzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZUV4Y2RzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0UGFybVByb2JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0U3JjUXVlbmNoczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dFJlZGlyZWN0czsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEVjaG9zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0RWNob1JlcHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGljbXBPdXRUaW1lc3RhbXBzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpY21wT3V0VGltZXN0YW1wUmVwczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEFkZHJNYXNrczsKLSAgICB1bnNpZ25lZCBsb25nICAgaWNtcE91dEFkZHJNYXNrUmVwczsKLX07Ci0KLXN0cnVjdCBpcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZvcndhcmRpbmc7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwRGVmYXVsdFRUTDsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJblJlY2VpdmVzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluSGRyRXJyb3JzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluQWRkckVycm9yczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGb3J3RGF0YWdyYW1zOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluVW5rbm93blByb3RvczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBJbkRpc2NhcmRzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEluRGVsaXZlcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0UmVxdWVzdHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0RGlzY2FyZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwT3V0Tm9Sb3V0ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21UaW1lb3V0OwotICAgIHVuc2lnbmVkIGxvbmcgICBpcFJlYXNtUmVxZHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21PS3M7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGlwUmVhc21GYWlsczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnT0tzOwotICAgIHVuc2lnbmVkIGxvbmcgICBpcEZyYWdGYWlsczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBGcmFnQ3JlYXRlczsKLSAgICB1bnNpZ25lZCBsb25nICAgaXBSb3V0aW5nRGlzY2FyZHM7Ci19OwotCi1zdHJ1Y3QgdGNwX21pYiB7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcFJ0b0FsZ29yaXRobTsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwUnRvTWluOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSdG9NYXg7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcE1heENvbm47Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEFjdGl2ZU9wZW5zOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BQYXNzaXZlT3BlbnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEF0dGVtcHRGYWlsczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwRXN0YWJSZXNldHM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHRjcEN1cnJFc3RhYjsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwSW5TZWdzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BPdXRTZWdzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BSZXRyYW5zU2VnczsKLSAgICB1bnNpZ25lZCBsb25nICAgdGNwSW5FcnJzOwotICAgIHVuc2lnbmVkIGxvbmcgICB0Y3BPdXRSc3RzOwotICAgIHNob3J0ICAgICAgICAgICB0Y3BJbkVycnNWYWxpZDsKLSAgICBzaG9ydCAgICAgICAgICAgdGNwT3V0UnN0c1ZhbGlkOwotfTsKLQotc3RydWN0IHVkcF9taWIgewotICAgIHVuc2lnbmVkIGxvbmcgICB1ZHBJbkRhdGFncmFtczsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwTm9Qb3J0czsKLSAgICB1bnNpZ25lZCBsb25nICAgdWRwSW5FcnJvcnM7Ci0gICAgdW5zaWduZWQgbG9uZyAgIHVkcE91dERhdGFncmFtczsKLX07CisjaW5jbHVkZSAia2VybmVsX21pYi5oIgogCiBpbnQgICAgICBuZXRic2RfcmVhZF9pY21wX3N0YXQoc3RydWN0IGljbXBfbWliICopOworaW50ICAgICAgbmV0YnNkX3JlYWRfaWNtcDZfc3RhdChzdHJ1Y3QgaWNtcDZfbWliICopOworaW50ICAgICAgbmV0YnNkX3JlYWRfaWNtcF9tc2dfc3RhdChzdHJ1Y3QgaWNtcF9taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA0X21zZ19taWIgKiwKKwkJIAkJICBpbnQgKmZsYWcpOworaW50ICAgICAgbmV0YnNkX3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKiwKKwkJCQkgICAgaW50ICpzdXBwb3J0KTsKIGludCAgICAgIG5ldGJzZF9yZWFkX2lwX3N0YXQoc3RydWN0IGlwX21pYiAqKTsKIGludCAgICAgIG5ldGJzZF9yZWFkX3RjcF9zdGF0KHN0cnVjdCB0Y3BfbWliICopOwogaW50ICAgICAgbmV0YnNkX3JlYWRfdWRwX3N0YXQoc3RydWN0IHVkcF9taWIgKik7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfc3lzY3RsLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfc3lzY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2ZjY2NAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL2tlcm5lbF9zeXNjdGwuYwpAQCAtMCwwICsxLDE3NSBAQAorLyoKKyAqIHN5c2N0bCBpbnRlcmZhY2UgZm9yIGljbXAgc3RhdHMgZm9yIG90aGVycyB0aGFuIE5ldEJTRAorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pY21wX3Zhci5oPgorI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgImtlcm5lbF9zeXNjdGwuaCIKKworI2lmIGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkKKworaW50CitzeXNjdGxfcmVhZF9pY21wX3N0YXQoc3RydWN0IGljbXBfbWliICptaWIpCit7CisgICAgc3RydWN0IGljbXBzdGF0IGljbXBzdGF0OworICAgIHNpemVfdCAgIHNpemUgPSBzaXplb2YoaWNtcHN0YXQpOworICAgIGludCAgICAgIGk7CisgICAgc3RhdGljIGludCAgICAgIHNuYW1lWzRdID0KKyAgICAgICAgeyBDVExfTkVULCBQRl9JTkVULCBJUFBST1RPX0lDTVAsIElDTVBDVExfU1RBVFMgfTsKKworICAgICh2b2lkKW1lbXNldChtaWIsIDAsIHNpemVvZigqbWliKSk7CisKKyAgICBpZiAoLTEgPT0gc3lzY3RsKHNuYW1lLCA0LCAmaWNtcHN0YXQsICZzaXplLCBOVUxMLCAwKSkgeworCXNubXBfcGVycm9yKCJzeXNjdGxfcmVhZF9pY21wX3N0YXQ6IG5ldC5pbmV0LmljbXAuc3RhdHMiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1pYi0+aWNtcEluTXNncyA9IGljbXBzdGF0LmljcHNfYmFkY29kZQorICAgICAgICArIGljbXBzdGF0LmljcHNfdG9vc2hvcnQKKyAgICAgICAgKyBpY21wc3RhdC5pY3BzX2NoZWNrc3VtCisgICAgICAgICsgaWNtcHN0YXQuaWNwc19iYWRsZW47CisgICAgbWliLT5pY21wSW5FcnJvcnMgPSBtaWItPmljbXBJbk1zZ3M7CisgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QX01BWFRZUEU7IGkrKykKKyAgICAgICAgbWliLT5pY21wSW5Nc2dzICArPSBpY21wc3RhdC5pY3BzX2luaGlzdFtpXTsKKyAgICBtaWItPmljbXBJbkRlc3RVbnJlYWNocyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfVU5SRUFDSF07CisgICAgbWliLT5pY21wSW5UaW1lRXhjZHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1RJTVhDRUVEXTsKKyAgICBtaWItPmljbXBJblBhcm1Qcm9icyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfUEFSQU1QUk9CXTsKKyAgICBtaWItPmljbXBJblNyY1F1ZW5jaHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1NPVVJDRVFVRU5DSF07CisgICAgbWliLT5pY21wSW5SZWRpcmVjdHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1JFRElSRUNUXTsKKyAgICBtaWItPmljbXBJbkVjaG9zID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9FQ0hPXTsKKyAgICBtaWItPmljbXBJbkVjaG9SZXBzID0gaWNtcHN0YXQuaWNwc19pbmhpc3RbSUNNUF9FQ0hPUkVQTFldOworICAgIG1pYi0+aWNtcEluVGltZXN0YW1wcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfVFNUQU1QXTsKKyAgICBtaWItPmljbXBJblRpbWVzdGFtcFJlcHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX1RTVEFNUFJFUExZXTsKKyAgICBtaWItPmljbXBJbkFkZHJNYXNrcyA9IGljbXBzdGF0LmljcHNfaW5oaXN0W0lDTVBfTUFTS1JFUV07CisgICAgbWliLT5pY21wSW5BZGRyTWFza1JlcHMgPSBpY21wc3RhdC5pY3BzX2luaGlzdFtJQ01QX01BU0tSRVBMWV07CisgICAgbWliLT5pY21wT3V0TXNncyA9IGljbXBzdGF0LmljcHNfb2xkc2hvcnQgKyBpY21wc3RhdC5pY3BzX29sZGljbXA7CisgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QX01BWFRZUEU7IGkrKykKKyAgICAgICAgbWliLT5pY21wT3V0TXNncyArPSBpY21wc3RhdC5pY3BzX291dGhpc3RbaV07CisgICAgbWliLT5pY21wT3V0RXJyb3JzID0gaWNtcHN0YXQuaWNwc19vbGRzaG9ydCArIGljbXBzdGF0LmljcHNfb2xkaWNtcDsKKyAgICBtaWItPmljbXBPdXREZXN0VW5yZWFjaHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9VTlJFQUNIXTsKKyAgICBtaWItPmljbXBPdXRUaW1lRXhjZHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9USU1YQ0VFRF07CisgICAgbWliLT5pY21wT3V0UGFybVByb2JzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfUEFSQU1QUk9CXTsKKyAgICBtaWItPmljbXBPdXRTcmNRdWVuY2hzID0gaWNtcHN0YXQuaWNwc19vdXRoaXN0W0lDTVBfU09VUkNFUVVFTkNIXTsKKyAgICBtaWItPmljbXBPdXRSZWRpcmVjdHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9SRURJUkVDVF07CisgICAgbWliLT5pY21wT3V0RWNob3MgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9FQ0hPXTsKKyAgICBtaWItPmljbXBPdXRFY2hvUmVwcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX0VDSE9SRVBMWV07CisgICAgbWliLT5pY21wT3V0VGltZXN0YW1wcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1RTVEFNUF07CisgICAgbWliLT5pY21wT3V0VGltZXN0YW1wUmVwcyA9IGljbXBzdGF0LmljcHNfb3V0aGlzdFtJQ01QX1RTVEFNUFJFUExZXTsKKyAgICBtaWItPmljbXBPdXRBZGRyTWFza3MgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9NQVNLUkVRXTsKKyAgICBtaWItPmljbXBPdXRBZGRyTWFza1JlcHMgPSBpY21wc3RhdC5pY3BzX291dGhpc3RbSUNNUF9NQVNLUkVQTFldOworCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50CitzeXNjdGxfcmVhZF9pY21wNl9zdGF0KHN0cnVjdCBpY21wNl9taWIgKm1pYikKK3sKKyAgICBzdHJ1Y3QgaWNtcDZzdGF0IGljbXBzdGF0OworICAgIHNpemVfdCAgIHNpemUgPSBzaXplb2YoaWNtcHN0YXQpOworICAgIGludCAgICAgIGk7CisgICAgc3RhdGljIGludCAgICAgIHNuYW1lWzRdID0KKyAgICAgICAgeyBDVExfTkVULCBQRl9JTkVUNiwgSVBQUk9UT19JQ01QVjYsIElDTVBWNkNUTF9TVEFUUyB9OworCisgICAgKHZvaWQpbWVtc2V0KG1pYiwgMCwgc2l6ZW9mKCptaWIpKTsKKworICAgIGlmICgtMSA9PSBzeXNjdGwoc25hbWUsIDQsICZpY21wc3RhdCwgJnNpemUsIE5VTEwsIDApKSB7CisJc25tcF9wZXJyb3IoInN5c2N0bF9yZWFkX2ljbXA2X3N0YXQ6IG5ldC5pbmV0Ni5pY21wNi5zdGF0cyIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWliLT5pY21wNkluTXNncyA9IGljbXBzdGF0LmljcDZzX2JhZGNvZGUKKyAgICAgICAgICAgICsgaWNtcHN0YXQuaWNwNnNfdG9vc2hvcnQKKwkgICAgKyBpY21wc3RhdC5pY3A2c19jaGVja3N1bQorICAgICAgICAgICAgKyBpY21wc3RhdC5pY3A2c19iYWRsZW47CisgICAgbWliLT5pY21wNkluRXJyb3JzID0gbWliLT5pY21wNkluTXNnczsKKyAgICBmb3IgKGkgPSAwOyBpIDw9IElDTVA2X01BWFRZUEU7IGkrKykKKyAgICAgICAgbWliLT5pY21wNkluTXNncyAgKz0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W2ldOworICAgIG1pYi0+aWNtcDZJbkRlc3RVbnJlYWNocyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtJQ01QNl9EU1RfVU5SRUFDSF07CisgICAgbWliLT5pY21wNkluUGt0VG9vQmlncyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtJQ01QNl9QQUNLRVRfVE9PX0JJR107CisgICAgbWliLT5pY21wNkluVGltZUV4Y2RzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W0lDTVA2X1RJTUVfRVhDRUVERURdOworICAgIG1pYi0+aWNtcDZJblBhcm1Qcm9ibGVtcyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtJQ01QNl9QQVJBTV9QUk9CXTsKKyAgICBtaWItPmljbXA2SW5FY2hvcyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtJQ01QNl9FQ0hPX1JFUVVFU1RdOworICAgIG1pYi0+aWNtcDZJbkVjaG9SZXBsaWVzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W0lDTVA2X0VDSE9fUkVQTFldOworICAgIG1pYi0+aWNtcDZJbkdyb3VwTWVtYlF1ZXJpZXMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTUxEX0xJU1RFTkVSX1FVRVJZXTsKKyAgICBtaWItPmljbXA2SW5Hcm91cE1lbWJSZXNwb25zZXMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTUxEX0xJU1RFTkVSX1JFUE9SVF07CisgICAgbWliLT5pY21wNkluUm91dGVyU29saWNpdHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTkRfUk9VVEVSX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZJblJvdXRlckFkdmVydGlzZW1lbnRzID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W05EX1JPVVRFUl9BRFZFUlRdOworICAgIG1pYi0+aWNtcDZJbk5laWdoYm9yU29saWNpdHMgPSBpY21wc3RhdC5pY3A2c19pbmhpc3RbTkRfTkVJR0hCT1JfU09MSUNJVF07CisgICAgbWliLT5pY21wNkluTmVpZ2hib3JBZHZlcnRpc2VtZW50cyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtORF9ORUlHSEJPUl9BRFZFUlRdOworICAgIG1pYi0+aWNtcDZJblJlZGlyZWN0cyA9IGljbXBzdGF0LmljcDZzX2luaGlzdFtORF9SRURJUkVDVF07CisKKyAgICBtaWItPmljbXA2T3V0TXNncyA9IGljbXBzdGF0LmljcDZzX2NhbnRlcnJvcgorICAgICAgICArIGljbXBzdGF0LmljcDZzX3Rvb2ZyZXE7CisgICAgZm9yIChpID0gMDsgaSA8PSBJQ01QNl9NQVhUWVBFOyBpKyspCisgICAgICAgIG1pYi0+aWNtcDZPdXRNc2dzICs9IGljbXBzdGF0LmljcDZzX291dGhpc3RbaV07CisgICAgbWliLT5pY21wNk91dERlc3RVbnJlYWNocyA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbSUNNUDZfRFNUX1VOUkVBQ0hdOworICAgIG1pYi0+aWNtcDZPdXRQa3RUb29CaWdzID0gIGljbXBzdGF0LmljcDZzX291dGhpc3RbSUNNUDZfUEFDS0VUX1RPT19CSUddOworICAgIG1pYi0+aWNtcDZPdXRUaW1lRXhjZHMgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W0lDTVA2X1RJTUVfRVhDRUVERURdOworICAgIG1pYi0+aWNtcDZPdXRQYXJtUHJvYmxlbXMgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W0lDTVA2X1BBUkFNX1BST0JdOworICAgIG1pYi0+aWNtcDZPdXRFY2hvcyA9IGljbXBzdGF0LmljcDZzX291dGhpc3RbSUNNUDZfRUNIT19SRVFVRVNUXTsKKyAgICBtaWItPmljbXA2T3V0RWNob1JlcGxpZXMgPSBpY21wc3RhdC5pY3A2c19vdXRoaXN0W0lDTVA2X0VDSE9fUkVQTFldOworICAgIG1pYi0+aWNtcDZPdXRSb3V0ZXJTb2xpY2l0cyA9ICBpY21wc3RhdC5pY3A2c19vdXRoaXN0W05EX1JPVVRFUl9TT0xJQ0lUXTsKKyAgICBtaWItPmljbXA2T3V0TmVpZ2hib3JTb2xpY2l0cyA9ICBpY21wc3RhdC5pY3A2c19vdXRoaXN0W05EX05FSUdIQk9SX1NPTElDSVRdOworICAgIG1pYi0+aWNtcDZPdXROZWlnaGJvckFkdmVydGlzZW1lbnRzID0gIGljbXBzdGF0LmljcDZzX291dGhpc3RbTkRfTkVJR0hCT1JfQURWRVJUXTsKKyAgICBtaWItPmljbXA2T3V0UmVkaXJlY3RzID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtORF9SRURJUkVDVF07CisgICAgbWliLT5pY21wNk91dEdyb3VwTWVtYlJlc3BvbnNlcyA9ICBpY21wc3RhdC5pY3A2c19vdXRoaXN0W01MRF9MSVNURU5FUl9SRVBPUlRdOworICAgIG1pYi0+aWNtcDZPdXRHcm91cE1lbWJSZWR1Y3Rpb25zID0gIGljbXBzdGF0LmljcDZzX291dGhpc3RbTUxEX0xJU1RFTkVSX0RPTkVdOworCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50CitzeXNjdGxfcmVhZF9pY21wX21zZ19zdGF0KHN0cnVjdCBpY21wX21pYiAqbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWNtcDRfbXNnX21pYiAqbXNnbWliLAorCQkJICBpbnQgKmZsYWcpCit7CisgICAgc3lzY3RsX3JlYWRfaWNtcF9zdGF0KG1pYik7CisgICAgKmZsYWcgPSAwOworICAgIHJldHVybiAwOworfQorCisKK2ludAorc3lzY3RsX3JlYWRfaWNtcDZfbXNnX3N0YXQoc3RydWN0IGljbXA2X21pYiAqbWliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGljbXA2X21zZ19taWIgKm1zZ21pYiwKKwkJCSAgIGludCAqc3VwcG9ydCkKK3sKKyAgICBzdHJ1Y3QgaWNtcDZzdGF0IGljbXBzdGF0OworICAgIHNpemVfdCAgIHNpemUgPSBzaXplb2YoaWNtcHN0YXQpOworICAgIGludCAgICAgIGk7CisgICAgc3RhdGljIGludCAgICAgIHNuYW1lWzRdID0KKyAgICAgICAgeyBDVExfTkVULCBQRl9JTkVUNiwgSVBQUk9UT19JQ01QVjYsIElDTVBWNkNUTF9TVEFUUyB9OworCisgICAgc3lzY3RsX3JlYWRfaWNtcDZfc3RhdChtaWIpOworCisgICAgaWYgKC0xID09IHN5c2N0bChzbmFtZSwgNCwgJmljbXBzdGF0LCAmc2l6ZSwgTlVMTCwgMCkpIHsKKwlzbm1wX3BlcnJvcigic3lzY3RsX3JlYWRfaWNtcDZfc3RhdDogbmV0LmluZXQ2LmljbXA2LnN0YXRzIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgMjU2OyBpKyspIHsKKwltc2dtaWItPnZhbHNbaV0uSW5UeXBlID0gaWNtcHN0YXQuaWNwNnNfaW5oaXN0W2ldOworCW1zZ21pYi0+dmFsc1tpXS5PdXRUeXBlID0gaWNtcHN0YXQuaWNwNnNfb3V0aGlzdFtpXTsKKyAgICB9CisgICAgKnN1cHBvcnQgPSAxOworICAgIHJldHVybiAwOworfQorCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX3N5c2N0bC5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkva2VybmVsX3N5c2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ODQ5NzMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9rZXJuZWxfc3lzY3RsLmgKQEAgLTAsMCArMSwxOSBAQAorI2lmbmRlZiBfTUlCR1JPVVBfS0VSTkVMX1NZU0NUTF9ICisjZGVmaW5lIF9NSUJHUk9VUF9LRVJORUxfU1lTQ1RMX0gKKworI2lmIGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkKKworI2luY2x1ZGUgImtlcm5lbF9taWIuaCIKKworaW50ICAgICAgc3lzY3RsX3JlYWRfaWNtcF9zdGF0KHN0cnVjdCBpY21wX21pYiAqKTsKK2ludCAgICAgIHN5c2N0bF9yZWFkX2ljbXA2X3N0YXQoc3RydWN0IGljbXA2X21pYiAqKTsKK2ludCAgICAgIHN5c2N0bF9yZWFkX2ljbXBfbXNnX3N0YXQoc3RydWN0IGljbXBfbWliICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNF9tc2dfbWliICosCisJCSAJCSAgaW50ICpmbGFnKTsKK2ludCAgICAgIHN5c2N0bF9yZWFkX2ljbXA2X21zZ19zdGF0KHN0cnVjdCBpY21wNl9taWIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpY21wNl9tc2dfbWliICosCisJCQkJICAgIGludCAqc3VwcG9ydCk7CisKKyNlbmRpZiAvKiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMICovCisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfS0VSTkVMX1NZU0NUTF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9taWJJSV9jb21tb24uaCBiL2FnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oCmluZGV4IDQwYThjOTMuLjg3ZWY5ZDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oCkBAIC0xMSw5ICsxMSw2IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2lmIEhBVkVfU1lTX1BBUkFNX0gKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KQEAgLTI4LDcgKzI1LDcgQEAKICNpZiBIQVZFX1NZU19UQ1BJUFNUQVRTX0gKICNpbmNsdWRlIDxzeXMvdGNwaXBzdGF0cy5oPgogI2VuZGlmCi0jaWYgZGVmaW5lZChJRk5FVF9ORUVEU19LRVJORUwpICYmICFkZWZpbmVkKF9LRVJORUwpCisjaWYgZGVmaW5lZChORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCkgJiYgIWRlZmluZWQoX0tFUk5FTCkKICNkZWZpbmUgX0tFUk5FTCAxCiAjZGVmaW5lIF9JX0RFRklORURfS0VSTkVMCiAjZW5kaWYKQEAgLTkxLDcgKzg4LDYgQEAKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKIAotCiAjaWZkZWYgc29sYXJpczIKICNpbmNsdWRlICJrZXJuZWxfc3Vub3M1LmgiCiAjZWxzZQpAQCAtMTAzLDYgKzk5LDEwIEBACiAjaWZkZWYgTkVUQlNEX1NUQVRTX1ZJQV9TWVNDVEwKICNpbmNsdWRlICJrZXJuZWxfbmV0YnNkLmgiCiAjZW5kaWYKKyNpZiBkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwpIC8qICYmIGRlZmluZWQoSUNNUENUTF9TVEFUUykgKi8KKyNpbmNsdWRlICJrZXJuZWxfc3lzY3RsLmgiCisjZW5kaWYKKwogCS8qIG9yIE1JQl94eHhDT1VOVEVSX1NZTUJPTCB8fCBocHV4MTEgKi8KICNpZmRlZiBocHV4CiAjaW5jbHVkZSA8c3lzL21pYi5oPgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvbXRhX3NlbmRtYWlsLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYwppbmRleCA1OTIxZDY4Li5jMWVkZDA3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9tdGFfc2VuZG1haWwuYwpAQCAtMTAxLDEzICsxMDEsOCBAQAogIyBlbmRpZgogI2VuZGlmCiAKLSNpZiBIQVZFX1NUREFSR19ICi0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHZhcmFyZ3MuaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KIAogIC8qKi8KIC8qKiAibWFjcm9zIGFuZCB2YXJpYWJsZXMgZm9yIHJlZ2lzdGVyaW5nIHRoZSBPSUQgdHJlZSIgKi8KQEAgLTE1MiwzMSArMTQ3LDM3IEBACiAgKiBzdHJ1Y3R1cmUgdGhhdCB0ZWxscyB0aGUgYWdlbnQsIHdoaWNoIGZ1bmN0aW9uIHJldHVybnMgd2hhdCB2YWx1ZXMgCiAgKi8KIHN0YXRpYyBzdHJ1Y3QgdmFyaWFibGUzIG10YV92YXJpYWJsZXNbXSA9IHsKLSAgICB7TVRBUkVDRUlWRURNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCAxfX0sCi0gICAge01UQVNUT1JFRE1FU1NBR0VTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCAyfX0sCi0gICAge01UQVRSQU5TTUlUVEVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUVudHJ5LCAzLAotICAgICB7MSwgMSwgM319LAotICAgIHtNVEFSRUNFSVZFRFZPTFVNRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCA0fX0sCi0gICAge01UQVNUT1JFRFZPTFVNRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgNX19LAotICAgIHtNVEFUUkFOU01JVFRFRFZPTFVNRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhRW50cnksIDMsIHsxLCAxLCA2fX0sCisgICAge01UQVJFQ0VJVkVETUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgMX19LAorICAgIHtNVEFTVE9SRURNRVNTQUdFUywgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgMn19LAorICAgIHtNVEFUUkFOU01JVFRFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDN9fSwKKyAgICB7TVRBUkVDRUlWRURWT0xVTUUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgNH19LAorICAgIHtNVEFTVE9SRURWT0xVTUUsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFFbnRyeSwgMywgezEsIDEsIDV9fSwKKyAgICB7TVRBVFJBTlNNSVRURURWT0xVTUUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUVudHJ5LCAzLCB7MSwgMSwgNn19LAogCi0gICAge01UQUdST1VQUkVDRUlWRURNRVNTQUdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDJ9fSwKLSAgICB7TVRBR1JPVVBSRUpFQ1RFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgM319LAotICAgIHtNVEFHUk9VUFNUT1JFRE1FU1NBR0VTLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbXRhR3JvdXBFbnRyeSwgMywKLSAgICAgezIsIDEsIDR9fSwKLSAgICB7TVRBR1JPVVBUUkFOU01JVFRFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgNX19LAotICAgIHtNVEFHUk9VUFJFQ0VJVkVEVk9MVU1FLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLAotICAgICB7MiwgMSwgNn19LAotICAgIHtNVEFHUk9VUFNUT1JFRFZPTFVNRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCA3fX0sCi0gICAge01UQUdST1VQVFJBTlNNSVRURURWT0xVTUUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCA4fX0sCi0gICAge01UQUdST1VQTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgMjV9fSwKLSAgICB7TVRBR1JPVVBISUVSQVJDSFksIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX210YUdyb3VwRW50cnksIDMsCi0gICAgIHsyLCAxLCAzMX19CisgICAge01UQUdST1VQUkVDRUlWRURNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDJ9fSwKKyAgICB7TVRBR1JPVVBSRUpFQ1RFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgM319LAorICAgIHtNVEFHUk9VUFNUT1JFRE1FU1NBR0VTLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbXRhR3JvdXBFbnRyeSwgMywgezIsIDEsIDR9fSwKKyAgICB7TVRBR1JPVVBUUkFOU01JVFRFRE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgNX19LAorICAgIHtNVEFHUk9VUFJFQ0VJVkVEVk9MVU1FLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgNn19LAorICAgIHtNVEFHUk9VUFNUT1JFRFZPTFVNRSwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCA3fX0sCisgICAge01UQUdST1VQVFJBTlNNSVRURURWT0xVTUUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCA4fX0sCisgICAge01UQUdST1VQTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9tdGFHcm91cEVudHJ5LCAzLCB7MiwgMSwgMjV9fSwKKyAgICB7TVRBR1JPVVBISUVSQVJDSFksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX210YUdyb3VwRW50cnksIDMsIHsyLCAxLCAzMX19CiB9OwogIC8qKi8KIC8qKiAib3RoZXIgbWFjcm9zIGFuZCBzdHJ1Y3R1cmVzIiAqLwpAQCAtMzQyLDM3ICszNDMsMTUgQEAKICAqICAgIC4uLjogICAgICAgICBhZGRpdGlvbmFsIHBhcmFtZXRlcnMgdG8gaW5zZXJ0IGludG8gdGhlIGVycm9yIG1lc3NhZ2Ugc3RyaW5nCiAgKgogICovCi0jaWYgSEFWRV9TVERBUkdfSAotICAgIHN0YXRpYyB2b2lkCitzdGF0aWMgdm9pZAogcHJpbnRfZXJyb3IoaW50IHByaW9yaXR5LCBCT09MIGNvbmZpZywgQk9PTCBjb25maWdfb25seSwKICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSNlbHNlCi0gICAgc3RhdGljIHZvaWQKLXByaW50X2Vycm9yKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewogICAgIHZhX2xpc3QgICAgICAgICBhcDsKICAgICBjaGFyICAgICAgICAgICAgYnVmZmVyWzIgKiBGSUxFTkFNRUxFTiArIDIwMF07ICAgICAgLyogSSBrbm93LCB0aGF0J3Mgbm90IHBlcmZlY3RseSBzYWZlLCBidXQgc2luY2UgSSBkb24ndCB1c2UgbW9yZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGFuIHR3byBmaWxlbmFtZXMgaW4gb25lIGVycm9yIG1lc3NhZ2UsIHRoYXQgc2hvdWxkIGJlIGVub3VnaCAqLwogCi0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZhX3N0YXJ0KGFwLCBmb3JtYXQpOwotI2Vsc2UKLSAgICBpbnQgICAgICAgICAgICAgcHJpb3JpdHk7Ci0gICAgQk9PTCAgICAgICAgICAgIGNvbmZpZzsKLSAgICBCT09MICAgICAgICAgICAgY29uZmlnX29ubHk7Ci0gICAgY29uc3QgY2hhciAgICAgKmZ1bmN0aW9uOwotICAgIGNvbnN0IGNoYXIgICAgICpmb3JtYXQ7Ci0KLSAgICB2YV9zdGFydChhcCk7Ci0gICAgcHJpb3JpdHkgPSB2YV9hcmcoYXAsIGludCk7Ci0gICAgY29uZmlnID0gdmFfYXJnKGFwLCBCT09MKTsKLSAgICBjb25maWdfb25seSA9IHZhX2FyZyhhcCwgQk9PTCk7Ci0gICAgZnVuY3Rpb24gPSB2YV9hcmcoYXAsIGNoYXIgKik7Ci0gICAgZm9ybWF0ID0gdmFfYXJnKGFwLCBjaGFyICopOwotI2VuZGlmCi0KICAgICB2c25wcmludGYoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgZm9ybWF0LCBhcCk7CiAKICAgICBpZiAoY29uZmlnKSB7CkBAIC0xMDU0LDkgKzEwMzMsNyBAQAogICAgICAgICBvcGVuX3NlbmRtYWlsc3QoVFJVRSk7CiAKICAgICAgICAgaWYgKHNlbmRtYWlsc3RfZmggPT0gLTEpIHsKLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICBzdHJbRklMRU5BTUVMRU4gKyA1MF07Ci0gICAgICAgICAgICBzcHJpbnRmKHN0ciwgImNvdWxkbid0IG9wZW4gZmlsZSBcIiVzXCIiLCBzZW5kbWFpbHN0X2ZuKTsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3Ioc3RyKTsKKwkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoImNvdWxkbid0IG9wZW4gZmlsZSBcIiVzXCIiLCBzZW5kbWFpbHN0X2ZuKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV9oZWFkZXJzLmgKaW5kZXggMzQ4MzBmMi4uZWFjZTJlMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfaGVhZGVycy5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX2hlYWRlcnMuaApAQCAtMjcsOCArMjcsNiBAQAogI2luY2x1ZGUgImlwLmgiCiAjaW5jbHVkZSAia2VybmVsLmgiCiAjaW5jbHVkZSAiaW50ZXJmYWNlcy5oIgotI2luY2x1ZGUgInN0cnVjdC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAogI2Vsc2UgLyogIU5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgKi8KIApAQCAtNDIsMTEgKzQwLDcgQEAKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWYgZGVmaW5lZCAoV0lOMzIpIHx8IGRlZmluZWQgKGN5Z3dpbikKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCiAjIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtOTQsMjggKzg4LDI4IEBACiAjZW5kaWYKICN1bmRlZglLRVJORUwKICNpZmRlZiBSVEVOVFJZXzRfNAotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VOSVQKICNkZWZpbmUgcnRfdW5pdCBydF9yZWZjbnQgICAgICAgLyogUmV1c2UgdGhpcyBmaWVsZCBmb3IgZGV2aWNlICMgKi8KICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCiAjZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5CiAjZW5kaWYKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUlRFTlRSWV80XzMgKi8KLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0RTVAogI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQogI2VuZGlmCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9IQVNICisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfSEFTSAogI2RlZmluZSBydF9oYXNoIHJ0X3BhZDEKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfUkVGQ05UCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfUkVGQ05UCiAjaWZuZGVmIGhwdXgxMAogI2RlZmluZSBydF9yZWZjbnQgcnRfcGFkMgogI2VuZGlmCiAjZW5kaWYKLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VTRQorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VTRQogI2RlZmluZSBydF91c2UgcnRfcGFkMwogI2VuZGlmCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VTklUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVU5JVAogI2RlZmluZSBydF91bml0IHJ0X3JlZmNudCAgICAgICAvKiBSZXVzZSB0aGlzIGZpZWxkIGZvciBkZXZpY2UgIyAqLwogI2VuZGlmCiAjZW5kaWYKQEAgLTE1MSwxNiArMTQ1LDIzIEBACiAjZW5kaWYKICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2lmIEhBVkVfTkxJU1RfSAogI2luY2x1ZGUgPG5saXN0Lmg+CiAjZW5kaWYKIAogI2lmZGVmIHNvbGFyaXMyCiAjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgorLyogU29sYXJpcyAyLjYvNyBuZWVkIHN5cy9zdHJlYW0uaCAobWJsa190KSB0byBpbmNsdWRlIGluZXQvaXAuaCAqLworI2lmZGVmIEhBVkVfU1lTX1NUUkVBTV9ICisjaW5jbHVkZSA8c3lzL3N0cmVhbS5oPgorI2VuZGlmCisvKiBTb2xhcmlzIDIuNiBuZWVkcyBpbmV0L2NvbW1vbi5oICh1MTYpIHRvIGluY2x1ZGUgaW5ldC9pcC5oICovCisjaWZkZWYgSEFWRV9JTkVUX0NPTU1PTl9ICisjaW5jbHVkZSA8aW5ldC9jb21tb24uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfSU5FVF9JUF9ICisjaW5jbHVkZSA8aW5ldC9pcC5oPgorI2VuZGlmIC8qIEhBVkVfSU5FVF9JUF9IICovCiAjZW5kaWYKIAogI2lmZGVmIEhBVkVfU1lTX1NZU0NUTF9ICmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvcm91dGVfd3JpdGUuYwppbmRleCBmNmE0ZjNlLi41ODIwZWUxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9yb3V0ZV93cml0ZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3JvdXRlX3dyaXRlLmMKQEAgLTYwLDEwICs2MCw2IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTc2LDEwICs3MiwxMCBAQAogCiAjaWYgIWRlZmluZWQgKFdJTjMyKSAmJiAhZGVmaW5lZCAoY3lnd2luKQogCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKKyNpZm5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKICNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKICNlbmRpZgotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSAorI2lmbmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX0hBU0gKICNkZWZpbmUgcnRfaGFzaCBydF9wYWQxCiAjZW5kaWYKIApAQCAtMjY5LDcgKzI2NSw3IEBACiB9CiAKIAotI2lmbmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCiAjdW5kZWYgcnRfZHN0CiAjZW5kaWYKIApAQCAtMzEzLDcgKzMwOSw3IEBACiAgICAgICAgICAgICByZXR1cm4gKCZydGNhY2hlW2ldKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAogc3RydWN0IHJ0ZW50ICAgKgpAQCAtMzI5LDcgKzMyNSw3IEBACiAgICAgICAgICAgICByZXR1cm4gKCZydGNhY2hlW2ldKTsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTlVMTDsKIAogfQogCkBAIC0zNTEsNyArMzQ3LDcgQEAKIHN0cnVjdCBydGVudCAgICoKIGNhY2hlS2VybmVsUlRFKHVfbG9uZyBkc3QpCiB7Ci0gICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgIC8qIGZvciBub3cgKi8KKyAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAgICAgLyogZm9yIG5vdyAqLwogICAgIC8qCiAgICAgICogLi4uLi4uIAogICAgICAqLwpAQCAtNTk3LDcgKzU5Myw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgY3lnd2luICovCisjZWxpZiBkZWZpbmVkKEhBVkVfSVBITFBBUElfSCkgIC8qIFdJTjMyIGN5Z3dpbiAqLwogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAKIGV4dGVybiBQTUlCX0lQRk9SV0FSRFJPVyByb3V0ZV9yb3c7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc2V0U2VyaWFsTm8uYwppbmRleCA5MGEwYWJhLi44NWE0MDk4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zZXRTZXJpYWxOby5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NldFNlcmlhbE5vLmMKQEAgLTIsOSArMiwxMyBAQAogICogIFRoaXMgZmlsZSBpbXBsZW1lbnRzIHRoZSBzbm1wU2V0U2VyaWFsTm8gVGVzdEFuZEluY3IgY291bnRlcgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHdhdGNoZXJfc3BpbmxvY2spCisKKwogI2luY2x1ZGUgInNldFNlcmlhbE5vLmgiCiAKIC8qCkBAIC02MCwxMyArNjQsMjEgQEAKICAgICAvKgogICAgICAqIFJlZ2lzdGVyICdzZXRzZXJpYWxubycgYXMgYSB3YXRjaGVkIHNwaW5sb2NrIG9iamVjdAogICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc3BpbmxvY2soCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wU2V0U2VyaWFsTm8iLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc2VyaWFsX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzZXRfc2VyaWFsX29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2V0c2VyaWFsbm8gKTsKLQorI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc3BpbmxvY2soCisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wU2V0U2VyaWFsTm8iLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRfc2VyaWFsX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzZXRfc2VyaWFsX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXRzZXJpYWxubyApOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICBERUJVR01TR1RMKCgic2NhbGFyX2ludCIsICJEb25lIGluaXRhbGl6aW5nIGV4YW1wbGUgc2NhbGFyIGludFxuIikpOwogfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuYwppbmRleCBiMTQzYmY3Li4xZWJlNjRjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmMKQEAgLTEsOTcgKzEsMjAgQEAKLS8qCi0gKiAgU05NUHYxIE1JQiBncm91cCBpbXBsZW1lbnRhdGlvbiAtIHNubXAuYwotICoKLSAqLwotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKICNpbmNsdWRlICJzbm1wX21pYi5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKKyNpbmNsdWRlICJ1cGRhdGVzLmgiCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCi0gICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKLQkgKgotCSAqICBLZXJuZWwgJiBpbnRlcmZhY2UgaW5mb3JtYXRpb24sCi0JICogICBhbmQgaW50ZXJuYWwgZm9yd2FyZCBkZWNsYXJhdGlvbnMKLQkgKgotCSAqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgY29uc3Qgb2lkIHNubXBfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDExIH07CiAKLWV4dGVybiBsb25nICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzOwotZXh0ZXJuIGludCAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQ7Ci1pbnQgICAgICAgICAgICAgb2xkX3NubXBfZW5hYmxlYXV0aGVudHJhcHM7Ci0KLS8qKioqKioqKioqKioqKioqKioqKioKLSAqCi0gKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCi0gKgotICoqKioqKioqKioqKioqKioqKioqKi8KLQotLyoKLSAqIGRlZmluZSB0aGUgc3RydWN0dXJlIHdlJ3JlIGdvaW5nIHRvIGFzayB0aGUgYWdlbnQgdG8gcmVnaXN0ZXIgb3VyCi0gKiBpbmZvcm1hdGlvbiBhdCAKLSAqLwotc3RydWN0IHZhcmlhYmxlMSBzbm1wX3ZhcmlhYmxlc1tdID0gewotICAgIHtTTk1QSU5QS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MX19LAotICAgIHtTTk1QT1VUUEtUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezJ9fSwKLSAgICB7U05NUElOQkFEVkVSU0lPTlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHszfX0sCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAge1NOTVBJTkJBRENPTU1VTklUWU5BTUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7NH19LAotICAgIHtTTk1QSU5CQURDT01NVU5JVFlVU0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7NX19LAotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi0gICAge1NOTVBJTkFTTlBBUlNFRVJST1JTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7Nn19LAotICAgIHtTTk1QSU5UT09CSUdTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7OH19LAotICAgIHtTTk1QSU5OT1NVQ0hOQU1FUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezl9fSwKLSAgICB7U05NUElOQkFEVkFMVUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTB9fSwKLSAgICB7U05NUElOUkVBRE9OTFlTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTF9fSwKLSAgICB7U05NUElOR0VORVJSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezEyfX0sCi0gICAge1NOTVBJTlRPVEFMUkVRVkFSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezEzfX0sCi0gICAge1NOTVBJTlRPVEFMU0VUVkFSUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezE0fX0sCi0gICAge1NOTVBJTkdFVFJFUVVFU1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTV9fSwKLSAgICB7U05NUElOR0VUTkVYVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsxNn19LAotICAgIHtTTk1QSU5TRVRSRVFVRVNUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezE3fX0sCi0gICAge1NOTVBJTkdFVFJFU1BPTlNFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezE4fX0sCi0gICAge1NOTVBJTlRSQVBTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MTl9fSwKLSAgICB7U05NUE9VVFRPT0JJR1MsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyMH19LAotICAgIHtTTk1QT1VUTk9TVUNITkFNRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyMX19LAotICAgIHtTTk1QT1VUQkFEVkFMVUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MjJ9fSwKLSAgICB7U05NUE9VVEdFTkVSUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyNH19LAotICAgIHtTTk1QT1VUR0VUUkVRVUVTVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyNX19LAotICAgIHtTTk1QT1VUR0VUTkVYVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyNn19LAotICAgIHtTTk1QT1VUU0VUUkVRVUVTVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXAsIDEsIHsyN319LAotICAgIHtTTk1QT1VUR0VUUkVTUE9OU0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7Mjh9fSwKLSAgICB7U05NUE9VVFRSQVBTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7Mjl9fSwKLSAgICB7U05NUEVOQUJMRUFVVEhFTlRSQVBTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfc25tcCwgMSwgezMwfX0sCi0gICAge1NOTVBTSUxFTlREUk9QUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfc25tcCwgMSwgezMxfX0sCi0gICAge1NOTVBQUk9YWURST1BTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wLCAxLCB7MzJ9fQotfTsKLQotLyoKLSAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQotICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aCAKLSAqLwotb2lkICAgICAgICAgICAgIHNubXBfdmFyaWFibGVzX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCAxMSB9OwotI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi1leHRlcm4gb2lkICAgICAgc3lzdGVtX21vZHVsZV9vaWRbXTsKLWV4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX29pZF9sZW47Ci1leHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9jb3VudDsKLSNlbmRpZgorZXh0ZXJuIGxvbmcgc25tcF9lbmFibGVhdXRoZW50cmFwczsKK2V4dGVybiBpbnQgc25tcF9lbmFibGVhdXRoZW50cmFwc3NldDsKIAogc3RhdGljIGludAogc25tcF9lbmFibGVhdXRoZW50cmFwc19zdG9yZShpbnQgYSwgaW50IGIsIHZvaWQgKmMsIHZvaWQgKmQpCkBAIC0xMDYsMTQgKzI5LDEwMyBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitoYW5kbGVfdHJ1dGh2YWx1ZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgeworICAgICAgICBpbnQgcmVzID0gbmV0c25tcF9jaGVja192Yl90cnV0aHZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIpOworICAgICAgICBpZiAocmVzICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCByZXMpOworICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIG5ldHNubXBfbWliX2hhbmRsZXIqCituZXRzbm1wX2dldF90cnV0aHZhbHVlKHZvaWQpCit7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciogaG5kID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigidHJ1dGh2YWx1ZSIsIGhhbmRsZV90cnV0aHZhbHVlKTsKKyAgICBpZiAoaG5kKQorICAgICAgICBobmQtPmZsYWdzIHw9IE1JQl9IQU5ETEVSX0FVVE9fTkVYVDsKKyAgICByZXR1cm4gaG5kOworfQorCitzdGF0aWMgaW50CitoYW5kbGVfc25tcChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorCSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorCSAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKwkgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIGNhc2UgTU9ERV9HRVQ6CisJeworCSAgICBvaWQgaWR4ID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVtPSURfTEVOR1RIKHNubXBfb2lkKV07CisJICAgIHN3aXRjaChpZHgpIHsKKwkgICAgY2FzZSA3OgorCSAgICBjYXNlIDIzOgorICAgICAgICAgICAgY2FzZSAzMDoKKwkJbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKKwkJCQkJICBTTk1QX05PU1VDSE9CSkVDVCk7CisJCWJyZWFrOworCSAgICBkZWZhdWx0OgorCQl7CisJCSAgICB1X2ludCB2YWx1ZSA9CisJCQlzbm1wX2dldF9zdGF0aXN0aWMoaWR4IC0gMSArIFNUQVRfU05NUElOUEtUUyk7CisJCSAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisJCQkJCSAgICAgKHVfY2hhciAqKSZ2YWx1ZSwgc2l6ZW9mKHZhbHVlKSk7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKwl9CisJYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidW5rbm93biBtb2RlICglZCkgaW4gaGFuZGxlX3NubXBcbiIsIHJlcWluZm8tPm1vZGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK2V4dGVybiBvaWQgICAgICBzeXN0ZW1fbW9kdWxlX29pZFtdOworZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkX2xlbjsKK2V4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX2NvdW50OworI2VuZGlmCisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcCBtb2R1bGUgKi8KIHZvaWQKIGluaXRfc25tcF9taWIodm9pZCkKIHsKLSAgICAvKgotICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlIAotICAgICAqLwotICAgIFJFR0lTVEVSX01JQigibWliSUkvc25tcCIsIHNubXBfdmFyaWFibGVzLCB2YXJpYWJsZTEsCi0gICAgICAgICAgICAgICAgIHNubXBfdmFyaWFibGVzX29pZCk7CisgICAgREVCVUdNU0dUTCgoInNubXAiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcl9ncm91cCgKKyAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorCSJtaWJJSS9zbm1wIiwgaGFuZGxlX3NubXAsIHNubXBfb2lkLCBPSURfTEVOR1RIKHNubXBfb2lkKSwKKwlIQU5ETEVSX0NBTl9ST05MWSksIDEsIDMyKTsKKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDExLCAzMCwgMCB9OworCXN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBlbmFibGVhdXRoZW5faW5mbzsKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0KKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc25tcEVuYWJsZUF1dGhlblRyYXBzIiwKKyAgICAgICAgICAgICAgICBzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCAmc25tcF9lbmFibGVhdXRoZW50cmFwc3NldCk7CisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBuZXRzbm1wX2dldF90cnV0aHZhbHVlKCkpOworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UoCisgICAgICAgICAgICByZWcsCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorCQkmZW5hYmxlYXV0aGVuX2luZm8sCisgICAgICAgICAgICAgICAgJnNubXBfZW5hYmxlYXV0aGVudHJhcHMsIHNpemVvZihzbm1wX2VuYWJsZWF1dGhlbnRyYXBzKSwKKyAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CisgICAgfQogCiAjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKICAgICBpZiAoKytzeXN0ZW1fbW9kdWxlX2NvdW50ID09IDMpCkBAIC0xMjMsMTMxICsxMzUsMyBAQAogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzX3N0b3JlLCBOVUxMKTsKIH0KLQotLyoKLSAqIGhlYWRlcl9zbm1wKC4uLgotICogQXJndW1lbnRzOgotICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKLSAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAotICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKLSAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAotICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKLSAqIHdyaXRlX21ldGhvZAotICogCi0gKi8KLQotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCi0JICoKLQkgKiAgU3lzdGVtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotCSAqCShhY3R1YWxseSBjb21tb24hKQotCSAqCi0JICoqKioqKioqKioqKioqKioqKioqKi8KLQotCi11X2NoYXIgICAgICAgICAqCi12YXJfc25tcChzdHJ1Y3QgdmFyaWFibGUgKnZwLAotICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQotewotICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKLQotICAgICp3cml0ZV9tZXRob2QgPSAwOyAgICAgICAgICAvKiBhc3N1bWUgaXQgaXNudCB3cml0YWJsZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KLSAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7ICAgICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLwotCi0gICAgaWYgKGhlYWRlcl9nZW5lcmljKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpCi0gICAgICAgID09IE1BVENIX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgotICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuIAotICAgICAqLwotICAgIGlmICh2cC0+bWFnaWMgPT0gU05NUEVOQUJMRUFVVEhFTlRSQVBTKSB7Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wOwotICAgICAgICBsb25nX3JldHVybiA9IHNubXBfZW5hYmxlYXV0aGVudHJhcHM7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXR1cm47Ci0gICAgfSBlbHNlIGlmICgodnAtPm1hZ2ljID49IDEpCi0gICAgICAgICAgICAgICAmJiAodnAtPm1hZ2ljIDw9Ci0gICAgICAgICAgICAgICAgICAgKFNUQVRfU05NUF9TVEFUU19FTkQgLSBTVEFUX1NOTVBfU1RBVFNfU1RBUlQgKyAxKSkpIHsKLSAgICAgICAgbG9uZ19yZXQgPQotICAgICAgICAgICAgc25tcF9nZXRfc3RhdGlzdGljKHZwLT5tYWdpYyArIFNUQVRfU05NUF9TVEFUU19TVEFSVCAtIDEpOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIG9ubHkgZm9yIHNubXBFbmFibGVBdXRoZW5UcmFwczoKLSAqLwotCi1pbnQKLXdyaXRlX3NubXAoaW50IGFjdGlvbiwKLSAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKLSAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKLSAgICAgICAgICAgc2l6ZV90IHZhcl92YWxfbGVuLCB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQotewotICAgIGxvbmcgICAgICAgICAgICBpbnR2YWwgPSAwOwotCi0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIFJFU0VSVkUxOiAgICAgICAgICAgICAvKiBDaGVjayB2YWx1ZXMgZm9yIGFjY2VwdGFiaWxpdHkgKi8KLSAgICAgICAgaWYgKHZhcl92YWxfdHlwZSAhPSBBU05fSU5URUdFUikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm1pYklJL3NubXBfbWliIiwgIiV4IG5vdCBpbnRlZ2VyIHR5cGUiLAotICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3ZhbF90eXBlKSk7Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwotICAgICAgICB9Ci0KLSAgICAgICAgaW50dmFsID0gKigobG9uZyAqKSB2YXJfdmFsKTsKLSAgICAgICAgaWYgKGludHZhbCAhPSAxICYmIGludHZhbCAhPSAyKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibWliSUkvc25tcF9taWIiLCAibm90IHZhbGlkICV4XG4iLCBpbnR2YWwpKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwotICAgICAgICB9Ci0gICAgICAgIGlmIChzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0IDwgMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoZSBvYmplY3QgaXMgc2V0IGluIGEgcmVhZC1vbmx5IGNvbmZpZ3VyYXRpb24gZmlsZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFJFU0VSVkUyOiAgICAgICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIHNpbWlsYXIgcmVzb3VyY2VzICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogVXNpbmcgc3RhdGljIHZhcmlhYmxlcywgc28gbm90aGluZyBuZWVkcyB0byBiZSBkb25lIAotICAgICAgICAgKi8KLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEFDVElPTjogICAgICAgICAgICAgICAvKiBQZXJmb3JtIHRoZSBTRVQgYWN0aW9uIChpZiByZXZlcnNpYmxlKSAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNhdmUgdGhlIG9sZCB2YWx1ZSwgaW4gY2FzZSBvZiBVTkRPIAotICAgICAgICAgKi8KLSAgICAgICAgaW50dmFsID0gKigobG9uZyAqKSB2YXJfdmFsKTsKLSAgICAgICAgb2xkX3NubXBfZW5hYmxlYXV0aGVudHJhcHMgPSBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzOwotICAgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzID0gaW50dmFsOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgVU5ETzogICAgICAgICAgICAgICAgIC8qIFJldmVyc2UgdGhlIFNFVCBhY3Rpb24gYW5kIGZyZWUgcmVzb3VyY2VzICovCi0KLSAgICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwcyA9IG9sZF9zbm1wX2VuYWJsZWF1dGhlbnRyYXBzOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQ09NTUlUOgotICAgICAgICBzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0ID0gMTsKLSAgICAgICAgc25tcF9zYXZlX3BlcnNpc3RlbnQobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwotICAgICAgICAodm9pZCkgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0xJQlJBUlksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQSwgTlVMTCk7Ci0gICAgICAgIHNubXBfY2xlYW5fcGVyc2lzdGVudChuZXRzbm1wX2RzX2dldF9zdHJpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIEZSRUU6ICAgICAgICAgICAgICAgICAvKiBGcmVlIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkICovCi0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKgotICoKLSAqICBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKLSAqCi0gKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliLmgKaW5kZXggNjQxZjExZS4uMzllMGEzYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc25tcF9taWIuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYi5oCkBAIC0xLDgzICsxLDkgQEAKLS8qCi0gKiAgU05NUCBNSUIgZ3JvdXAgaW50ZXJmYWNlIC0gc25tcC5oCi0gKgotICovCiAjaWZuZGVmIF9NSUJHUk9VUF9TTk1QX0gKICNkZWZpbmUgX01JQkdST1VQX1NOTVBfSAogCi1zdHJ1Y3QgdmFyaWFibGU7Ci0KLWV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9zbm1wOwotZXh0ZXJuIFdyaXRlTWV0aG9kIHdyaXRlX3NubXA7Citjb25maWdfcmVxdWlyZShtaWJJSS91cGRhdGVzKQorY29uZmlnX2V4Y2x1ZGUobWliSUkvc25tcF9taWJfNV81KQogCiB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wX21pYih2b2lkKTsKIAotZXh0ZXJuIGludCAgICAgIHNubXBfaW5wa3RzOyAgICAvKiAgMSAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dHBrdHM7ICAgLyogIDIgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5iYWR2ZXJzaW9uczsgICAgIC8qICAzIC0gY3VycmVudCAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5iYWRjb21tdW5pdHluYW1lczsgICAgICAgLyogIDQgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmJhZGNvbW11bml0eXVzZXM7ICAgICAgICAvKiAgNSAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luYXNucGFyc2VlcnJvcnM7ICAvKiAgNiAtIGN1cnJlbnQgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2ludG9vYmlnczsgLyogIDggLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5ub3N1Y2huYW1lczsgICAgIC8qICA5IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luYmFkdmFsdWVzOyAgICAgICAvKiAxMCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnJlYWRvbmx5czsgICAgICAgLyogMTEgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5nZW5lcnJzOyAvKiAxMiAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnRvdGFscmVxdmFyczsgICAgLyogMTMgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW50b3RhbHNldHZhcnM7ICAgIC8qIDE0IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luZ2V0cmVxdWVzdHM7ICAgICAvKiAxNSAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbmdldG5leHRzOyAgICAgICAgLyogMTYgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfaW5zZXRyZXF1ZXN0czsgICAgIC8qIDE3IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2luZ2V0cmVzcG9uc2VzOyAgICAvKiAxOCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9pbnRyYXBzOyAgIC8qIDE5IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dHRvb2JpZ3M7ICAgICAgICAvKiAyMCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRub3N1Y2huYW1lczsgICAgLyogMjEgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0YmFkdmFsdWVzOyAgICAgIC8qIDIyIC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dGdlbmVycnM7ICAgICAgICAvKiAyNCAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRnZXRyZXF1ZXN0czsgICAgLyogMjUgLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0Z2V0bmV4dHM7ICAgICAgIC8qIDI2IC0gb2Jzb2xldGUgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX291dHNldHJlcXVlc3RzOyAgICAvKiAyNyAtIG9ic29sZXRlICovCi1leHRlcm4gaW50ICAgICAgc25tcF9vdXRnZXRyZXNwb25zZXM7ICAgLyogMjggLSBvYnNvbGV0ZSAqLwotZXh0ZXJuIGludCAgICAgIHNubXBfb3V0dHJhcHM7ICAvKiAyOSAtIG9ic29sZXRlICovCi1leHRlcm4gbG9uZyAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwczsgLyogMzAgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9zaWxlbnRkcm9wczsgICAgICAgLyogMzEgLSBjdXJyZW50ICovCi1leHRlcm4gaW50ICAgICAgc25tcF9wcm94eWRyb3BzOyAgICAgICAgLyogMzIgLSBjdXJyZW50ICovCi0KLWV4dGVybiBjaGFyICAgICpzbm1wX3RyYXBzaW5rOwotZXh0ZXJuIGNoYXIgICAgKnNubXBfdHJhcGNvbW11bml0eTsKLQotCi0jZGVmaW5lIFNOTVBJTlBLVFMJCTEKLSNkZWZpbmUgU05NUE9VVFBLVFMJCTIKLSNkZWZpbmUgU05NUElOQkFEVkVSU0lPTlMJMwotI2RlZmluZSBTTk1QSU5CQURDT01NVU5JVFlOQU1FUwk0Ci0jZGVmaW5lIFNOTVBJTkJBRENPTU1VTklUWVVTRVMJNQotI2RlZmluZSBTTk1QSU5BU05QQVJTRUVSUk9SUwk2Ci0jZGVmaW5lIFNOTVBJTkJBRFRZUEVTCQk3Ci0jZGVmaW5lIFNOTVBJTlRPT0JJR1MJCTgKLSNkZWZpbmUgU05NUElOTk9TVUNITkFNRVMJOQotI2RlZmluZSBTTk1QSU5CQURWQUxVRVMJCTEwCi0jZGVmaW5lIFNOTVBJTlJFQURPTkxZUwkJMTEKLSNkZWZpbmUgU05NUElOR0VORVJSUwkJMTIKLSNkZWZpbmUgU05NUElOVE9UQUxSRVFWQVJTCTEzCi0jZGVmaW5lIFNOTVBJTlRPVEFMU0VUVkFSUwkxNAotI2RlZmluZSBTTk1QSU5HRVRSRVFVRVNUUwkxNQotI2RlZmluZSBTTk1QSU5HRVRORVhUUwkJMTYKLSNkZWZpbmUgU05NUElOU0VUUkVRVUVTVFMJMTcKLSNkZWZpbmUgU05NUElOR0VUUkVTUE9OU0VTCTE4Ci0jZGVmaW5lIFNOTVBJTlRSQVBTCQkxOQotI2RlZmluZSBTTk1QT1VUVE9PQklHUwkJMjAKLSNkZWZpbmUgU05NUE9VVE5PU1VDSE5BTUVTCTIxCi0jZGVmaW5lIFNOTVBPVVRCQURWQUxVRVMJMjIKLSNkZWZpbmUgU05NUE9VVFJFQURPTkxZUwkyMwotI2RlZmluZSBTTk1QT1VUR0VORVJSUwkJMjQKLSNkZWZpbmUgU05NUE9VVEdFVFJFUVVFU1RTCTI1Ci0jZGVmaW5lIFNOTVBPVVRHRVRORVhUUwkJMjYKLSNkZWZpbmUgU05NUE9VVFNFVFJFUVVFU1RTCTI3Ci0jZGVmaW5lIFNOTVBPVVRHRVRSRVNQT05TRVMJMjgKLSNkZWZpbmUgU05NUE9VVFRSQVBTCQkyOQotI2RlZmluZSBTTk1QRU5BQkxFQVVUSEVOVFJBUFMJMzAKLSNkZWZpbmUgU05NUFNJTEVOVERST1BTCQkzMQotI2RlZmluZSBTTk1QUFJPWFlEUk9QUwkJMzIKLQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfU05NUF9IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2M2VmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuYwpAQCAtMCwwICsxLDEzMiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oPgorCisjaW5jbHVkZSAic25tcF9taWJfNV81LmgiCisjaW5jbHVkZSAidXBkYXRlcy5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWxwZXJfc3RhdGlzdGljcykKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90cnV0aHZhbHVlKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisjZGVmaW5lIFNOTVBfT0lEIDEsIDMsIDYsIDEsIDIsIDEsIDExCisKK3N0YXRpYyBvaWQgc25tcF9vaWRbXSA9IHsgU05NUF9PSUQgfTsKKworZXh0ZXJuIGxvbmcgc25tcF9lbmFibGVhdXRoZW50cmFwczsKK2V4dGVybiBpbnQgc25tcF9lbmFibGVhdXRoZW50cmFwc3NldDsKKworc3RhdGljIGludAorc25tcF9lbmFibGVhdXRoZW50cmFwc19zdG9yZShpbnQgYSwgaW50IGIsIHZvaWQgKmMsIHZvaWQgKmQpCit7CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbU05NUF9NQVhCVUZfU01BTExdOworCisgICAgaWYgKHNubXBfZW5hYmxlYXV0aGVudHJhcHNzZXQgPiAwKSB7CisgICAgICAgIHNucHJpbnRmKGxpbmUsIFNOTVBfTUFYQlVGX1NNQUxMLCAicGF1dGh0cmFwZW5hYmxlICVsZCIsCisgICAgICAgICAgICAgICAgIHNubXBfZW5hYmxlYXV0aGVudHJhcHMpOworICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitoYW5kbGVfdHJ1dGh2YWx1ZShuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9SRVNFUlZFMSkgeworICAgICAgICBpbnQgcmVzID0gbmV0c25tcF9jaGVja192Yl90cnV0aHZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIpOworICAgICAgICBpZiAocmVzICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCByZXMpOworICAgIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBuZXRzbm1wX21pYl9oYW5kbGVyKgorbmV0c25tcF9nZXRfdHJ1dGh2YWx1ZSh2b2lkKQoreworICAgIG5ldHNubXBfbWliX2hhbmRsZXIqIGhuZCA9CisgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoInRydXRodmFsdWUiLCBoYW5kbGVfdHJ1dGh2YWx1ZSk7CisgICAgaWYgKGhuZCkKKyAgICAgICAgaG5kLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFQ7CisgICAgcmV0dXJuIGhuZDsKK30KKworc3RhdGljIGludAoraGFuZGxlX3NubXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKwkgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKwkgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisJICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBzd2l0Y2gocmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVtPSURfTEVOR1RIKHNubXBfb2lkKV0pIHsKKyAgICBjYXNlIDc6CisgICAgY2FzZSAyMzoKKyAgICBjYXNlIDMwOgorICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisJYnJlYWs7CisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK2V4dGVybiBvaWQgICAgICBzeXN0ZW1fbW9kdWxlX29pZFtdOworZXh0ZXJuIGludCAgICAgIHN5c3RlbV9tb2R1bGVfb2lkX2xlbjsKK2V4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX2NvdW50OworI2VuZGlmCisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcCBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfc25tcF9taWJfNV81KHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInNubXAiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICBORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKAorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICJtaWJJSS9zbm1wIiwgaGFuZGxlX3NubXAsIHNubXBfb2lkLCBPSURfTEVOR1RIKHNubXBfb2lkKSwKKyAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKKyAgICAgICAgMSwgU05NUCk7CisgICAgeworICAgICAgICBvaWQgc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZFtdID0geyBTTk1QX09JRCwgMzAsIDAgfTsKKwlzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gZW5hYmxlYXV0aGVuX2luZm87CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfdXBkYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zbm1wRW5hYmxlQXV0aGVuVHJhcHMiLAorICAgICAgICAgICAgICAgIHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWQsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzbm1wRW5hYmxlQXV0aGVuVHJhcHNfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUsICZzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0KTsKKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3NubXBFbmFibGVBdXRoZW5UcmFwcyIsCisgICAgICAgICAgICAgICAgc25tcEVuYWJsZUF1dGhlblRyYXBzX29pZCwKKyAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNubXBFbmFibGVBdXRoZW5UcmFwc19vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZLCAmc25tcF9lbmFibGVhdXRoZW50cmFwc3NldCk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnLCBuZXRzbm1wX2dldF90cnV0aHZhbHVlKCkpOworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UoCisgICAgICAgICAgICByZWcsCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorCQkmZW5hYmxlYXV0aGVuX2luZm8sCisgICAgICAgICAgICAgICAgJnNubXBfZW5hYmxlYXV0aGVudHJhcHMsIHNpemVvZihzbm1wX2VuYWJsZWF1dGhlbnRyYXBzKSwKKyAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgV0FUQ0hFUl9GSVhFRF9TSVpFKSk7CisgICAgfQorCisjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKyAgICBpZiAoKytzeXN0ZW1fbW9kdWxlX2NvdW50ID09IDMpCisgICAgICAgIFJFR0lTVEVSX1NZU09SX1RBQkxFKHN5c3RlbV9tb2R1bGVfb2lkLCBzeXN0ZW1fbW9kdWxlX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTUlCIG1vZHVsZSBmb3IgU05NUHYyIGVudGl0aWVzIik7CisjZW5kaWYKKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9lbmFibGVhdXRoZW50cmFwc19zdG9yZSwgTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3NubXBfbWliXzVfNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlNTYxMDMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zbm1wX21pYl81XzUuaApAQCAtMCwwICsxLDQgQEAKK2NvbmZpZ19yZXF1aXJlKG1pYklJL3VwZGF0ZXMpCitjb25maWdfZXhjbHVkZShtaWJJSS9zbm1wX21pYikKKwordm9pZCAgICAgICAgICAgIGluaXRfc25tcF9taWJfNV81KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5jCmluZGV4IGY4ZmZhNTAuLmVkMjY5MTkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmMKQEAgLTEsMzQ0ICsxLDI5NSBAQAotLyoKLSAqICBUZW1wbGF0ZSBNSUIgZ3JvdXAgaW1wbGVtZW50YXRpb24gLSBzeXNPUlRhYmxlLmMKLSAqCi0gKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotI2lmIEhBVkVfU1RSSU5HX0gKLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8c3RyaW5ncy5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAic3RydWN0LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgInN5c09SVGFibGUuaCIKLSNpbmNsdWRlICJzbm1wZC5oIgogCi0jaWZkZWYgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotI2luY2x1ZGUgImFnZW50eC9zdWJhZ2VudC5oIgotI2luY2x1ZGUgImFnZW50eC9jbGllbnQuaCIKLSNlbmRpZgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcikKIAogCi1zdGF0aWMgaW50Ci1fcmVnaXN0ZXJfc3lzT1JfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKTsKLXN0YXRpYyBpbnQKLV91bnJlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7Ci1zdGF0aWMgaW50Ci1fdW5yZWdpc3Rlcl9zeXNPUl9ieV9zZXNzaW9uX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOwotCi1zdHJ1Y3QgdGltZXZhbCAgc3lzT1JfbGFzdGNoYW5nZTsKLXN0YXRpYyBzdHJ1Y3Qgc3lzT1JUYWJsZSAqdGFibGUgPSBOVUxMOwotc3RhdGljIGludCAgICAgIG51bUVudHJpZXMgPSAwOworLyoqIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5ICovCit0eXBlZGVmIHN0cnVjdCBzeXNPUlRhYmxlX2VudHJ5X3MgeworICAgIG5ldHNubXBfaW5kZXggICAgICAgICAgICBvaWRfaW5kZXg7CisgICAgb2lkICAgICAgICAgICAgICAgICAgICAgIHN5c09SSW5kZXg7CisgICAgY29uc3Qgc3RydWN0IHN5c09SVGFibGUqIGRhdGE7Cit9IHN5c09SVGFibGVfZW50cnk7CiAKIC8qCi0gKiBkZWZpbmUgdGhlIHN0cnVjdHVyZSB3ZSdyZSBnb2luZyB0byBhc2sgdGhlIGFnZW50IHRvIHJlZ2lzdGVyIG91cgotICogaW5mb3JtYXRpb24gYXQgCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSBzeXNPUlRhYmxlCiAgKi8KLXN0cnVjdCB2YXJpYWJsZTEgc3lzT1JUYWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICB7U1lTT1JUQUJMRUlELCBBU05fT0JKRUNUX0lELCBST05MWSwgdmFyX3N5c09SVGFibGUsIDEsIHsyfX0sCi0gICAge1NZU09SVEFCTEVERVNDUiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9zeXNPUlRhYmxlLCAxLCB7M319LAotICAgIHtTWVNPUlRBQkxFVVBUSU1FLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX3N5c09SVGFibGUsIDEsIHs0fX0KLX07CisjZGVmaW5lIENPTFVNTl9TWVNPUklOREVYCTEKKyNkZWZpbmUgQ09MVU1OX1NZU09SSUQJCTIKKyNkZWZpbmUgQ09MVU1OX1NZU09SREVTQ1IJMworI2RlZmluZSBDT0xVTU5fU1lTT1JVUFRJTUUJNAogCi0vKgotICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCi0gKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoIAotICovCi1vaWQgICAgICAgICAgICAgc3lzT1JUYWJsZV92YXJpYWJsZXNfb2lkW10gPSB7IFNOTVBfT0lEX01JQjIsIDEsIDksIDEgfTsKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqdGFibGUgPSBOVUxMOworc3RhdGljIHVfbG9uZyAgICAgICAgICAgICBzeXNPUkxhc3RDaGFuZ2U7CitzdGF0aWMgb2lkICAgICAgICAgICAgICAgIHN5c09STmV4dEluZGV4ID0gMTsKKworLyoqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlICovCitzdGF0aWMgdm9pZAorcmVnaXN0ZXJfZm9yZWFjaChjb25zdCBzdHJ1Y3Qgc3lzT1JUYWJsZSogZGF0YSwgdm9pZCogZHVtbXkpCit7CisgICAgc3lzT1JUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICBzeXNPUkxhc3RDaGFuZ2UgPSBkYXRhLT5PUl91cHRpbWU7CisKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3lzT1JUYWJsZV9lbnRyeSk7CisgICAgaWYgKCFlbnRyeSkgeworCXNubXBfbG9nKExPR19FUlIsCisJCSAiY291bGQgbm90IGFsbG9jYXRlIHN0b3JhZ2UsIHN5c09SVGFibGUgaXMgaW5jb25zaXN0ZW50XG4iKTsKKyAgICB9IGVsc2UgeworCWNvbnN0IG9pZCBmaXJzdE5leHQgPSBzeXNPUk5leHRJbmRleDsKKwluZXRzbm1wX2l0ZXJhdG9yKiBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUih0YWJsZSk7CisKKwlkbyB7CisJICAgIGNvbnN0IHN5c09SVGFibGVfZW50cnkqIHZhbHVlOworCSAgICBjb25zdCBvaWQgY3VyID0gc3lzT1JOZXh0SW5kZXg7CisKKwkgICAgaWYgKHN5c09STmV4dEluZGV4ID09IFNOTVBfTUlOKE1BWF9TVUJJRCwgMjE0NzQ4MzY0N1VMKSkKKwkJc3lzT1JOZXh0SW5kZXggPSAxOworCSAgICBlbHNlCisJCSsrc3lzT1JOZXh0SW5kZXg7CisKKwkgICAgZm9yICh2YWx1ZSA9IChzeXNPUlRhYmxlX2VudHJ5KilpdC0+Y3VycihpdCk7CisJCSB2YWx1ZSAmJiB2YWx1ZS0+c3lzT1JJbmRleCA8IGN1cjsKKwkJIHZhbHVlID0gKHN5c09SVGFibGVfZW50cnkqKUlURVJBVE9SX05FWFQoaXQpKSB7CisJICAgIH0KKworCSAgICBpZiAodmFsdWUgJiYgdmFsdWUtPnN5c09SSW5kZXggPT0gY3VyKSB7CisJCWlmIChzeXNPUk5leHRJbmRleCA8IGN1cikKKwkJICAgIGl0LT5yZXNldChpdCk7CisJICAgIH0gZWxzZSB7CisJCWVudHJ5LT5zeXNPUkluZGV4ID0gY3VyOworCQlicmVhazsKKwkgICAgfQorCX0gd2hpbGUgKGZpcnN0TmV4dCAhPSBzeXNPUk5leHRJbmRleCk7CisKKwlJVEVSQVRPUl9SRUxFQVNFKGl0KTsKKworCWlmKGZpcnN0TmV4dCA9PSBzeXNPUk5leHRJbmRleCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBsb2NhdGUgYSBmcmVlIGluZGV4IGluIHN5c09SVGFibGVcbiIpOworICAgICAgICAgICAgZnJlZShlbnRyeSk7CisJfSBlbHNlIHsKKwkgICAgZW50cnktPmRhdGEgPSBkYXRhOworCSAgICBlbnRyeS0+b2lkX2luZGV4LmxlbiA9IDE7CisJICAgIGVudHJ5LT5vaWRfaW5kZXgub2lkcyA9ICZlbnRyeS0+c3lzT1JJbmRleDsKKworCSAgICBDT05UQUlORVJfSU5TRVJUKHRhYmxlLCBlbnRyeSk7CisJfQorICAgIH0KK30KKworc3RhdGljIGludAorcmVnaXN0ZXJfY2IoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQqIHNlcnYsIHZvaWQqIGNsaWVudCkKK3sKKyAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZS9yZWdpc3Rlcl9jYiIsCisgICAgICAgICAgICAgICAgInJlZ2lzdGVyX2NiKCVkLCAlZCwgJXAsICVwKVxuIiwgbWFqb3IsIG1pbm9yLCBzZXJ2LCBjbGllbnQpKTsKKyAgICByZWdpc3Rlcl9mb3JlYWNoKChzdHJ1Y3Qgc3lzT1JUYWJsZSopc2VydiwgTlVMTCk7CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KK3N0YXRpYyBpbnQKK3VucmVnaXN0ZXJfY2IoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQqIHNlcnYsIHZvaWQqIGNsaWVudCkKK3sKKyAgICBzeXNPUlRhYmxlX2VudHJ5ICp2YWx1ZTsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yKiBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUih0YWJsZSk7CisKKyAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZS91bnJlZ2lzdGVyX2NiIiwKKyAgICAgICAgICAgICAgICAidW5yZWdpc3Rlcl9jYiglZCwgJWQsICVwLCAlcClcbiIsIG1ham9yLCBtaW5vciwgc2VydiwgY2xpZW50KSk7CisgICAgc3lzT1JMYXN0Q2hhbmdlID0gKChzdHJ1Y3Qgc3lzT1JUYWJsZSopKHNlcnYpKS0+T1JfdXB0aW1lOworCisgICAgd2hpbGUgKCh2YWx1ZSA9IChzeXNPUlRhYmxlX2VudHJ5KilJVEVSQVRPUl9ORVhUKGl0KSkgJiYgdmFsdWUtPmRhdGEgIT0gc2Vydik7CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdCk7CisgICAgaWYodmFsdWUpIHsKKwlDT05UQUlORVJfUkVNT1ZFKHRhYmxlLCB2YWx1ZSk7CisJZnJlZSh2YWx1ZSk7CisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKiogaGFuZGxlcyByZXF1ZXN0cyBmb3IgdGhlIHN5c09SVGFibGUgdGFibGUgKi8KK3N0YXRpYyBpbnQKK3N5c09SVGFibGVfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OworCisgICAgREVCVUdNU0dUTCgoIm1pYklJL3N5c09SVGFibGUvc3lzT1JUYWJsZV9oYW5kbGVyIiwKKyAgICAgICAgICAgICAgICAic3lzT1JUYWJsZV9oYW5kbGVyIGNhbGxlZFxuIikpOworCisgICAgaWYgKHJlcWluZm8tPm1vZGUgIT0gTU9ERV9HRVQpIHsKKwlzbm1wX2xvZyhMT0dfRVJSLAorCQkgIkdvdCB1bmV4cGVjdGVkIG9wZXJhdGlvbiBmb3Igc3lzT1JUYWJsZVxuIik7CisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgKi8KKyAgICByZXF1ZXN0ID0gcmVxdWVzdHM7CisgICAgd2hpbGUocmVxdWVzdCAmJiByZXF1ZXN0LT5wcm9jZXNzZWQpCisJcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQ7CisgICAgd2hpbGUocmVxdWVzdCkgeworCXN5c09SVGFibGVfZW50cnkgKnRhYmxlX2VudHJ5OworCW5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworCisJaWYgKE5VTEwgPT0gKHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KSkpIHsKKwkgICAgc25tcF9sb2coTE9HX0VSUiwKKwkJICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgaW5mbyBmb3Igc3lzT1JUYWJsZVxuIik7CisJICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSgKKwkJICAgIHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKwl9IGVsc2UgaWYoTlVMTCA9PSAodGFibGVfZW50cnkgPSAoc3lzT1JUYWJsZV9lbnRyeSAqKQorCQkJICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpKSkgeworCSAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworCSAgICBjYXNlIENPTFVNTl9TWVNPUklEOgorCSAgICBjYXNlIENPTFVNTl9TWVNPUkRFU0NSOgorCSAgICBjYXNlIENPTFVNTl9TWVNPUlVQVElNRToKKwkJbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorCQkJCQkgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworCQlicmVhazsKKwkgICAgZGVmYXVsdDoKKwkJbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSE9CSkVDVCk7CisJCWJyZWFrOworCSAgICB9CisJfSBlbHNlIHsKKwkgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKwkgICAgY2FzZSBDT0xVTU5fU1lTT1JJRDoKKwkJc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKAorCQkJcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorCQkJKGNvbnN0IHVfY2hhciopdGFibGVfZW50cnktPmRhdGEtPk9SX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5kYXRhLT5PUl9vaWRsZW4gKiBzaXplb2Yob2lkKSk7CisJCWJyZWFrOworCSAgICBjYXNlIENPTFVNTl9TWVNPUkRFU0NSOgorCQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoCisJCQlyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisJCQkoY29uc3QgdV9jaGFyKil0YWJsZV9lbnRyeS0+ZGF0YS0+T1JfZGVzY3IsCisJCQlzdHJsZW4odGFibGVfZW50cnktPmRhdGEtPk9SX2Rlc2NyKSk7CisJCWJyZWFrOworCSAgICBjYXNlIENPTFVNTl9TWVNPUlVQVElNRToKKwkJc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoCisJCQlyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+ZGF0YS0+T1JfdXB0aW1lKTsKKwkJYnJlYWs7CisJICAgIGRlZmF1bHQ6CisJCW5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hPQkpFQ1QpOworCQlicmVhazsKKwkgICAgfQorCX0KKwlkbyB7CisJICAgIHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0OworCX0gd2hpbGUocmVxdWVzdCAmJiByZXF1ZXN0LT5wcm9jZXNzZWQpOworICAgIH0KKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKwogI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCiBleHRlcm4gb2lkICAgICAgc3lzdGVtX21vZHVsZV9vaWRbXTsKIGV4dGVybiBpbnQgICAgICBzeXN0ZW1fbW9kdWxlX29pZF9sZW47CiBleHRlcm4gaW50ICAgICAgc3lzdGVtX21vZHVsZV9jb3VudDsKICNlbmRpZgogCitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqc3lzT1JMYXN0Q2hhbmdlX3JlZzsKK3N0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzeXNPUkxhc3RDaGFuZ2Vfd2luZm87CitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqc3lzT1JUYWJsZV9yZWc7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqc3lzT1JUYWJsZV90YWJsZV9pbmZvOworCisvKiogSW5pdGlhbGl6ZXMgdGhlIHN5c09SVGFibGUgbW9kdWxlICovCiB2b2lkCiBpbml0X3N5c09SVGFibGUodm9pZCkKIHsKKyAgICBjb25zdCBvaWQgc3lzT1JMYXN0Q2hhbmdlX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCA4IH07CisgICAgY29uc3Qgb2lkIHN5c09SVGFibGVfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDkgfTsKKworICAgIHN5c09SVGFibGVfdGFibGVfaW5mbyA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisKKyAgICB0YWJsZSA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInN5c09SVGFibGU6dGFibGVfY29udGFpbmVyIik7CisKKyAgICBpZiAoc3lzT1JUYWJsZV90YWJsZV9pbmZvID09IE5VTEwgfHwgdGFibGUgPT0gTlVMTCkgeworICAgICAgICBTTk1QX0ZSRUUoc3lzT1JUYWJsZV90YWJsZV9pbmZvKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUodGFibGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRhYmxlLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgic3lzT1JUYWJsZSIpOworCisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXMoc3lzT1JUYWJsZV90YWJsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9JTlRFR0VSLCAvKiogaW5kZXg6IHN5c09SSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICBzeXNPUlRhYmxlX3RhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fU1lTT1JJRDsKKyAgICBzeXNPUlRhYmxlX3RhYmxlX2luZm8tPm1heF9jb2x1bW4gPSBDT0xVTU5fU1lTT1JVUFRJTUU7CisKKyAgICBzeXNPUkxhc3RDaGFuZ2VfcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAibWliSUkvc3lzT1JMYXN0Q2hhbmdlIiwgTlVMTCwKKyAgICAgICAgICAgIHN5c09STGFzdENoYW5nZV9vaWQsIE9JRF9MRU5HVEgoc3lzT1JMYXN0Q2hhbmdlX29pZCksCisgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbygKKwkgICAgJnN5c09STGFzdENoYW5nZV93aW5mbywKKyAgICAgICAgICAgICZzeXNPUkxhc3RDaGFuZ2UsIHNpemVvZih1X2xvbmcpLAorICAgICAgICAgICAgQVNOX1RJTUVUSUNLUywgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyKHN5c09STGFzdENoYW5nZV9yZWcsCisJCQkJICAgICZzeXNPUkxhc3RDaGFuZ2Vfd2luZm8pOworCisgICAgc3lzT1JUYWJsZV9yZWcgPQorICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICJtaWJJSS9zeXNPUlRhYmxlIiwgc3lzT1JUYWJsZV9oYW5kbGVyLAorICAgICAgICAgICAgc3lzT1JUYWJsZV9vaWQsIE9JRF9MRU5HVEgoc3lzT1JUYWJsZV9vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcmVnaXN0ZXIoc3lzT1JUYWJsZV9yZWcsIHN5c09SVGFibGVfdGFibGVfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSwgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKworICAgIHN5c09STGFzdENoYW5nZSA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworCiAgICAgLyoKLSAgICAgKiByZWdpc3RlciBvdXJzZWx2ZXMgd2l0aCB0aGUgYWdlbnQgdG8gaGFuZGxlIG91ciBtaWIgdHJlZSAKKyAgICAgKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZQogICAgICAqLworICAgIG5ldHNubXBfc3lzT1JUYWJsZV9mb3JlYWNoKCZyZWdpc3Rlcl9mb3JlYWNoLCBOVUxMKTsKIAotI2lmZGVmIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLSAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX1JPTEUpID09IE1BU1RFUl9BR0VOVCkKLSAgICAgICAgKHZvaWQpIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgibWliSUkvc3lzT1JUYWJsZSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCB2YXJpYWJsZSAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5c09SVGFibGVfdmFyaWFibGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmFyaWFibGUxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3lzT1JUYWJsZV92YXJpYWJsZXMpIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZhcmlhYmxlMSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzT1JUYWJsZV92YXJpYWJsZXNfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzeXNPUlRhYmxlX3ZhcmlhYmxlc19vaWQpIC8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob2lkKSwgMSk7Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIFJFR0lTVEVSX01JQigibWliSUkvc3lzT1JUYWJsZSIsIHN5c09SVGFibGVfdmFyaWFibGVzLCB2YXJpYWJsZTEsCi0gICAgICAgICAgICAgICAgICAgICBzeXNPUlRhYmxlX3ZhcmlhYmxlc19vaWQpOwotCisgICAgLyoKKyAgICAgKiBSZWdpc3RlciBjYWxsYmFja3MKKyAgICAgKi8KICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfUkVHX1NZU09SLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgX3JlZ2lzdGVyX3N5c09SX2NhbGxiYWNrLCBOVUxMKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwgcmVnaXN0ZXJfY2IsIE5VTEwpOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIF91bnJlZ2lzdGVyX3N5c09SX2NhbGxiYWNrLCBOVUxMKTsKLSAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1JfU0VTUywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIF91bnJlZ2lzdGVyX3N5c09SX2J5X3Nlc3Npb25fY2FsbGJhY2ssIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfVU5SRUdfU1lTT1IsIHVucmVnaXN0ZXJfY2IsIE5VTEwpOwogCiAjaWZkZWYgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKICAgICBpZiAoKytzeXN0ZW1fbW9kdWxlX2NvdW50ID09IDMpCiAgICAgICAgIFJFR0lTVEVSX1NZU09SX1RBQkxFKHN5c3RlbV9tb2R1bGVfb2lkLCBzeXN0ZW1fbW9kdWxlX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTUlCIG1vZHVsZSBmb3IgU05NUHYyIGVudGl0aWVzIik7CiAjZW5kaWYKLQotICAgIGdldHRpbWVvZmRheSgmc3lzT1JfbGFzdGNoYW5nZSwgTlVMTCk7Ci19Ci0KLSAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgotCSAqCi0JICogIFN5c3RlbSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKLQkgKgotCSAqKioqKioqKioqKioqKioqKioqKiovCi0KLXVfY2hhciAgICAgICAgICoKLXZhcl9zeXNPUlRhYmxlKHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0gICAgdW5zaWduZWQgbG9uZyAgIGkgPSAwOwotICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHJldDsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcHRyID0gdGFibGU7Ci0KLSAgICBpZiAoaGVhZGVyX3NpbXBsZV90YWJsZQotICAgICAgICAodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCwgbnVtRW50cmllcykpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgZm9yIChpID0gMTsgcHRyICE9IE5VTEwgJiYgaSA8IG5hbWVbKmxlbmd0aCAtIDFdOyBwdHIgPSBwdHItPm5leHQsIGkrKykgewotICAgICAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZSIsICJzeXNPUlRhYmxlIC0tICVsdSAhPSAlbHVcbiIsCi0gICAgICAgICAgICAgICAgICAgIGksIG5hbWVbKmxlbmd0aCAtIDFdKSk7Ci0gICAgfQotICAgIGlmIChwdHIgPT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgibWliSUkvc3lzT1JUYWJsZSIsICJzeXNPUlRhYmxlIC0tIG5vIG1hdGNoOiAlbHVcbiIsCi0gICAgICAgICAgICAgICAgICAgIGkpKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlIiwgInN5c09SVGFibGUgLS0gbWF0Y2g6ICVsdVxuIiwgaSkpOwotCi0gICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIFNZU09SVEFCTEVJRDoKLSAgICAgICAgKnZhcl9sZW4gPSBwdHItPk9SX29pZGxlbiAqIHNpemVvZihwdHItPk9SX29pZFswXSk7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopIHB0ci0+T1Jfb2lkOwotCi0gICAgY2FzZSBTWVNPUlRBQkxFREVTQ1I6Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKHB0ci0+T1JfZGVzY3IpOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBwdHItPk9SX2Rlc2NyOwotCi0gICAgY2FzZSBTWVNPUlRBQkxFVVBUSU1FOgotICAgICAgICByZXQgPSBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKCZwdHItPk9SX3VwdGltZSk7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopICYgcmV0OwotCi0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBkIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9zeXNPUlRhYmxlXG4iLAotICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotaW50Ci1yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkICogb2lkaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9pZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZXNjciwgbmV0c25tcF9zZXNzaW9uICogc3MpCi17Ci0gICAgc3RydWN0IHN5c09SVGFibGUgKnB0ciwgKipucHRyOwotICAgIHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzIHJlZ19zeXNPUl9wYXJtczsKLQotICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlIiwgInN5c09SVGFibGUgcmVnaXN0ZXJpbmc6ICIpKTsKLSAgICBERUJVR01TR09JRCgoIm1pYklJL3N5c09SVGFibGUiLCBvaWRpbiwgb2lkbGVuKSk7Ci0gICAgREVCVUdNU0coKCJtaWJJSS9zeXNPUlRhYmxlIiwgIlxuIikpOwotCi0gICAgcHRyID0gKHN0cnVjdCBzeXNPUlRhYmxlICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHN5c09SVGFibGUpKTsKLSAgICBpZiAocHRyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQ7Ci0gICAgfQotICAgIHB0ci0+T1JfZGVzY3IgPSAoY2hhciAqKSBzdHJkdXAoZGVzY3IpOwotICAgIGlmIChwdHItPk9SX2Rlc2NyID09IE5VTEwpIHsKLSAgICAgICAgZnJlZShwdHIpOwotICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKLSAgICB9Ci0gICAgcHRyLT5PUl9vaWRsZW4gPSBvaWRsZW47Ci0gICAgcHRyLT5PUl9vaWQgPSAob2lkICopIG1hbGxvYyhzaXplb2Yob2lkKSAqIG9pZGxlbik7Ci0gICAgaWYgKHB0ci0+T1Jfb2lkID09IE5VTEwpIHsKLSAgICAgICAgZnJlZShwdHItPk9SX2Rlc2NyKTsKLSAgICAgICAgZnJlZShwdHIpOwotICAgICAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNUUkFUSU9OX0ZBSUxFRDsKLSAgICB9Ci0gICAgbWVtY3B5KHB0ci0+T1Jfb2lkLCBvaWRpbiwgc2l6ZW9mKG9pZCkgKiBvaWRsZW4pOwotICAgIGdldHRpbWVvZmRheSgmKHB0ci0+T1JfdXB0aW1lKSwgTlVMTCk7Ci0gICAgZ2V0dGltZW9mZGF5KCYoc3lzT1JfbGFzdGNoYW5nZSksIE5VTEwpOwotICAgIHB0ci0+T1Jfc2VzcyA9IHNzOwotICAgIHB0ci0+bmV4dCA9IE5VTEw7Ci0gICAgbnVtRW50cmllcysrOwotCi0gICAgLyogYWRkIHRoaXMgZW50cnkgdG8gdGhlIGVuZCBvZiB0aGUgY2hhaW5lZCBsaXN0ICovCi0gICAgbnB0ciA9ICZ0YWJsZTsKLSAgICB3aGlsZSAoKm5wdHIgIT0gTlVMTCkKLSAgICAgICAgbnB0ciA9ICYoKCpucHRyKS0+bmV4dCk7Ci0gICAgKm5wdHIgPSBwdHI7Ci0KLSAgICByZWdfc3lzT1JfcGFybXMubmFtZSA9IG9pZGluOwotICAgIHJlZ19zeXNPUl9wYXJtcy5uYW1lbGVuID0gb2lkbGVuOwotICAgIHJlZ19zeXNPUl9wYXJtcy5kZXNjciA9IGRlc2NyOwotICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKLSAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFR19TWVNPUiwgJnJlZ19zeXNPUl9wYXJtcyk7Ci0KLSAgICByZXR1cm4gU1lTX09SVEFCTEVfUkVHSVNURVJFRF9PSzsKLX0KLQotaW50Ci1yZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqIG9pZGluLCBzaXplX3Qgb2lkbGVuLCBjb25zdCBjaGFyICpkZXNjcikKLXsKLSAgICByZXR1cm4gcmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZGluLCBvaWRsZW4sIGRlc2NyLCBOVUxMKTsKLX0KLQotCi0KLWludAotdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkICogb2lkaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2lkbGVuLCBuZXRzbm1wX3Nlc3Npb24gKiBzcykKLXsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcHRyLCAqcHJldiA9IE5VTEwsICpuZXh0OwotICAgIGludCAgICAgICAgICAgICBmb3VuZCA9IFNZU19PUlRBQkxFX05PX1NVQ0hfUkVHSVNUUkFUSU9OOwotICAgIHN0cnVjdCByZWdpc3Rlcl9zeXNPUl9wYXJhbWV0ZXJzIHJlZ19zeXNPUl9wYXJtczsKLQotICAgIERFQlVHTVNHVEwoKCJtaWJJSS9zeXNPUlRhYmxlIiwgInN5c09SVGFibGUgdW5yZWdpc3RlcmluZzogIikpOwotICAgIERFQlVHTVNHT0lEKCgibWliSUkvc3lzT1JUYWJsZSIsIG9pZGluLCBvaWRsZW4pKTsKLSAgICBERUJVR01TRygoIm1pYklJL3N5c09SVGFibGUiLCAiXG4iKSk7Ci0KLSAgICBmb3IgKHB0ciA9IHRhYmxlOyBwdHI7IHB0ciA9IG5leHQpCi0gICAgewotICAgICAgICBuZXh0ID0gcHRyLT5uZXh0OwotICAgICAgICBpZiAocHRyLT5PUl9zZXNzID09IHNzICYmCi0gICAgICAgICAgKHNubXBfb2lkX2NvbXBhcmUob2lkaW4sIG9pZGxlbiwgcHRyLT5PUl9vaWQsIHB0ci0+T1Jfb2lkbGVuKSA9PSAwKSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKHByZXYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB0YWJsZSA9IHB0ci0+bmV4dDsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwcmV2LT5uZXh0ID0gcHRyLT5uZXh0OwotCi0gICAgICAgICAgICBmcmVlKHB0ci0+T1Jfb2lkKTsKLSAgICAgICAgICAgIGZyZWUocHRyLT5PUl9kZXNjcik7Ci0gICAgICAgICAgICBmcmVlKHB0cik7Ci0gICAgICAgICAgICBudW1FbnRyaWVzLS07Ci0gICAgICAgICAgICBnZXR0aW1lb2ZkYXkoJihzeXNPUl9sYXN0Y2hhbmdlKSwgTlVMTCk7Ci0gICAgICAgICAgICBmb3VuZCA9IFNZU19PUlRBQkxFX1VOUkVHSVNURVJFRF9PSzsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHByZXYgPSBwdHI7Ci0gICAgfQotCi0gICAgcmVnX3N5c09SX3Bhcm1zLm5hbWUgPSBvaWRpbjsKLSAgICByZWdfc3lzT1JfcGFybXMubmFtZWxlbiA9IG9pZGxlbjsKLSAgICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCi0gICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19VTlJFR19TWVNPUiwgJnJlZ19zeXNPUl9wYXJtcyk7Ci0KLSAgICByZXR1cm4gZm91bmQ7Ci19Ci0KLQotaW50Ci11bnJlZ2lzdGVyX3N5c09SVGFibGUob2lkICogb2lkaW4sIHNpemVfdCBvaWRsZW4pCi17Ci0gICAgcmV0dXJuIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZGluLCBvaWRsZW4sIE5VTEwpOwogfQogCiB2b2lkCi11bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzcykKK3NodXRkb3duX3N5c09SVGFibGUodm9pZCkKIHsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcHRyLCAqcHJldiA9IE5VTEwsICpuZXh0OworI2lmZGVmIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisgICAgaWYgKHN5c3RlbV9tb2R1bGVfY291bnQtLSA9PSAzKQorICAgICAgICBVTlJFR0lTVEVSX1NZU09SX1RBQkxFKHN5c3RlbV9tb2R1bGVfb2lkLCBzeXN0ZW1fbW9kdWxlX29pZF9sZW4pOworI2VuZGlmCiAKLSAgICBmb3IgKHB0ciA9IHRhYmxlOyBwdHI7IHB0ciA9IG5leHQpCi0gICAgewotICAgICAgICBuZXh0ID0gcHRyLT5uZXh0OwotICAgICAgICBpZiAoKChzcy0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NVQlNFU1NJT04pICYmIHB0ci0+T1Jfc2VzcyA9PSBzcykgfHwKLSAgICAgICAgICAgICghKHNzLT5mbGFncyAmIFNOTVBfRkxBR1NfU1VCU0VTU0lPTikgJiYgcHRyLT5PUl9zZXNzICYmCi0gICAgICAgICAgICAgcHRyLT5PUl9zZXNzLT5zdWJzZXNzaW9uID09IHNzKSkgewotICAgICAgICAgICAgaWYgKHByZXYgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICB0YWJsZSA9IG5leHQ7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7Ci0gICAgICAgICAgICBmcmVlKHB0ci0+T1Jfb2lkKTsKLSAgICAgICAgICAgIGZyZWUocHRyLT5PUl9kZXNjcik7Ci0gICAgICAgICAgICBmcmVlKHB0cik7Ci0gICAgICAgICAgICBudW1FbnRyaWVzLS07Ci0gICAgICAgICAgICBnZXR0aW1lb2ZkYXkoJihzeXNPUl9sYXN0Y2hhbmdlKSwgTlVMTCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgcHJldiA9IHB0cjsKLSAgICB9CisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1VOUkVHX1NZU09SLCB1bnJlZ2lzdGVyX2NiLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKTsKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVHX1NZU09SLCByZWdpc3Rlcl9jYiwgTlVMTCwgMSk7CisKKyAgICBpZiAodGFibGUpCisgICAgICAgIENPTlRBSU5FUl9DTEVBUih0YWJsZSwgbmV0c25tcF9jb250YWluZXJfc2ltcGxlX2ZyZWUsIE5VTEwpOworICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3VucmVnaXN0ZXIoc3lzT1JUYWJsZV9yZWcpOworICAgIHN5c09SVGFibGVfcmVnID0gTlVMTDsKKyAgICB0YWJsZSA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHN5c09SVGFibGVfdGFibGVfaW5mbyk7CisgICAgc3lzT1JUYWJsZV90YWJsZV9pbmZvID0gTlVMTDsKKyAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihzeXNPUkxhc3RDaGFuZ2VfcmVnKTsKKyAgICBzeXNPUkxhc3RDaGFuZ2VfcmVnID0gTlVMTDsKIH0KLQotc3RhdGljIGludAotX3JlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKLXsKLSAgICBzdHJ1Y3Qgc3lzT1JUYWJsZSAqcGFybXMgPSAoc3RydWN0IHN5c09SVGFibGUgKikgc2VydmVyYXJnOwotCi0gICAgcmV0dXJuIHJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwYXJtcy0+T1Jfb2lkLCBwYXJtcy0+T1Jfb2lkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFybXMtPk9SX2Rlc2NyLCBwYXJtcy0+T1Jfc2Vzcyk7Ci19Ci0KLXN0YXRpYyBpbnQKLV91bnJlZ2lzdGVyX3N5c09SX2J5X3Nlc3Npb25fY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKLXsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24gPSAobmV0c25tcF9zZXNzaW9uICopIHNlcnZlcmFyZzsKLQotICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKHNlc3Npb24pOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLV91bnJlZ2lzdGVyX3N5c09SX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCi17Ci0gICAgc3RydWN0IHN5c09SVGFibGUgKnBhcm1zID0gKHN0cnVjdCBzeXNPUlRhYmxlICopIHNlcnZlcmFyZzsKLQotICAgIHJldHVybiB1bnJlZ2lzdGVyX3N5c09SVGFibGVfc2VzcyhwYXJtcy0+T1Jfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1Jfb2lkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJtcy0+T1Jfc2Vzcyk7Ci19Ci0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaAppbmRleCA1OWZiN2UwLi5lOTg4ZmRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXNPUlRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzT1JUYWJsZS5oCkBAIC0xLDU3ICsxLDE1IEBACi0vKgotICogIFRlbXBsYXRlIE1JQiBncm91cCBpbnRlcmZhY2UgLSBzeXNPUlRhYmxlLmgKLSAqCi0gKi8KLSNpZm5kZWYgX01JQkdST1VQX1NZU09SVEFCTEVfSAotI2RlZmluZSBfTUlCR1JPVVBfU1lTT1JUQUJMRV9ICisjaWZuZGVmIE1JQkdST1VQX1NZU09SVEFCTEVfSAorI2RlZmluZSBNSUJHUk9VUF9TWVNPUlRBQkxFX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKLWNvbmZpZ19yZXF1aXJlKG1pYklJL3N5c3RlbV9taWIpCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCiAKLSAgICAgc3RydWN0IHN5c09SVGFibGUgewotICAgICAgICAgY2hhciAgICAgICAgICAgKk9SX2Rlc2NyOwotICAgICAgICAgb2lkICAgICAgICAgICAgKk9SX29pZDsKLSAgICAgICAgIHNpemVfdCAgICAgICAgICBPUl9vaWRsZW47Ci0gICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgT1JfdXB0aW1lOwotICAgICAgICAgbmV0c25tcF9zZXNzaW9uICpPUl9zZXNzOwotICAgICAgICAgc3RydWN0IHN5c09SVGFibGUgKm5leHQ7Ci0gICAgIH07CitleHRlcm4gdm9pZCAgICAgaW5pdF9zeXNPUlRhYmxlKHZvaWQpOworZXh0ZXJuIHZvaWQgICAgIHNodXRkb3duX3N5c09SVGFibGUodm9pZCk7CiAKLSAgICAgc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgewotICAgICAgICAgb2lkICAgICAgICAgICAgKm5hbWU7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgbmFtZWxlbjsKLSAgICAgICAgIGNvbnN0IGNoYXIgICAgICpkZXNjcjsKLSAgICAgfTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKLSAgICAgZXh0ZXJuIHZvaWQgICAgIGluaXRfc3lzT1JUYWJsZSh2b2lkKTsKLSAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3N5c09SVGFibGU7Ci0gICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9zeXNPUkxhc3RDaGFuZ2U7Ci0gICAgIGV4dGVybiBpbnQgICAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKG9pZCAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKik7Ci0gICAgIGV4dGVybiBpbnQgICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGUob2lkICosIHNpemVfdCk7Ci0gICAgIGV4dGVybiBpbnQgICAgICByZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqKTsKLSAgICAgZXh0ZXJuIGludCAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9zZXNzKG9pZCAqLCBzaXplX3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKik7Ci0gICAgIGV4dGVybiB2b2lkICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGVfYnlfc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKik7Ci0KLSNkZWZpbmUJU1lTT1JUQUJMRUlOREVYCQkgICAgICAgIDEKLSNkZWZpbmUJU1lTT1JUQUJMRUlECQkgICAgICAgIDIKLSNkZWZpbmUJU1lTT1JUQUJMRURFU0NSCQkgICAgICAgIDMKLSNkZWZpbmUJU1lTT1JUQUJMRVVQVElNRQkgICAgICAgIDQKLQotI2RlZmluZSBTWVNfT1JUQUJMRV9SRUdJU1RFUkVEX09LICAgICAgICAgICAgICAwCi0jZGVmaW5lIFNZU19PUlRBQkxFX1JFR0lTVFJBVElPTl9GQUlMRUQgICAgICAgLTEKLSNkZWZpbmUgU1lTX09SVEFCTEVfVU5SRUdJU1RFUkVEX09LICAgICAgICAgICAgMAotI2RlZmluZSBTWVNfT1JUQUJMRV9OT19TVUNIX1JFR0lTVFJBVElPTiAgICAgIC0xCi0KLSNpZmRlZiAgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSNkZWZpbmUgUkVHSVNURVJfU1lTT1JfRU5UUlkodGhlb2lkLCBkZXNjcikgICAgICAgICAgICAgICAgICAgICAgXAotICAodm9pZClyZWdpc3Rlcl9zeXNPUlRhYmxlKHRoZW9pZCwgc2l6ZW9mKHRoZW9pZCkvc2l6ZW9mKG9pZCksIGRlc2NyKTsKLSNkZWZpbmUgUkVHSVNURVJfU1lTT1JfVEFCTEUodGhlb2lkLCBsZW4sIGRlc2NyKSAgICAgICAgICAgICAgICAgICAgICBcCi0gICh2b2lkKXJlZ2lzdGVyX3N5c09SVGFibGUodGhlb2lkLCBsZW4sIGRlc2NyKTsKLQotI2Vsc2UKLSNkZWZpbmUgUkVHSVNURVJfU1lTT1JfRU5UUlkoeCx5KQotI2RlZmluZSBSRUdJU1RFUl9TWVNPUl9UQUJMRSh4LHkseikKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1NZU09SVEFCTEVfSCAqLworI2VuZGlmIC8qIE1JQkdST1VQX1NZU09SVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5jCmluZGV4IGVkOTdhZjMuLjY1YjBiN2MgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmMKQEAgLTE0LDYgKzE0LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTI3LDE1ICsyOCw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAotI2lmICFkZWZpbmVkKG1pbmd3MzIpICYmIGRlZmluZWQoSEFWRV9TWVNfVElNRV9IKQotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgSEFWRV9VVFNOQU1FX0gKICNpbmNsdWRlIDx1dHNuYW1lLmg+CiAjZWxzZQpAQCAtNDMsMTggKzM2LDE2IEBACiAjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KICNlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAic3lzdGVtX21pYi5oIgotI2luY2x1ZGUgInN0cnVjdC5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKKyNpbmNsdWRlICJ1cGRhdGVzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHdhdGNoZXJfcmVhZF9vbmx5X2ludF9zY2FsYXIpCiAKICAgICAgICAgLyoqKioqKioqKioqKioqKioqKioqKgogCSAqCkBAIC02NCwzMyArNTUsMjQgQEAKIAkgKioqKioqKioqKioqKioqKioqKioqLwogCiAjZGVmaW5lIFNZU19TVFJJTkdfTEVOCTI1NgotY2hhciAgICAgICAgICAgIHZlcnNpb25fZGVzY3JbU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9WRVJTX0RFU0M7Ci1jaGFyICAgICAgICAgICAgc3lzQ29udGFjdFtTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1NZU19DT05UQUNUOwotY2hhciAgICAgICAgICAgIHN5c05hbWVbU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9TWVNfTkFNRTsKLWNoYXIgICAgICAgICAgICBzeXNMb2NhdGlvbltTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1NZU19MT0M7Ci1vaWQgICAgICAgICAgICAgc3lzT2JqZWN0SURbTUFYX09JRF9MRU5dOwotc2l6ZV90ICAgICAgICAgIHN5c09iamVjdElETGVuZ3RoOworc3RhdGljIGNoYXIgICAgIHZlcnNpb25fZGVzY3JbU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9WRVJTX0RFU0M7CitzdGF0aWMgY2hhciAgICAgc3lzQ29udGFjdFtTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1NZU19DT05UQUNUOworc3RhdGljIGNoYXIgICAgIHN5c05hbWVbU1lTX1NUUklOR19MRU5dID0gTkVUU05NUF9TWVNfTkFNRTsKK3N0YXRpYyBjaGFyICAgICBzeXNMb2NhdGlvbltTWVNfU1RSSU5HX0xFTl0gPSBORVRTTk1QX1NZU19MT0M7CitzdGF0aWMgb2lkICAgICAgc3lzT2JqZWN0SURbTUFYX09JRF9MRU5dOworc3RhdGljIHNpemVfdCBzeXNPYmplY3RJREJ5dGVMZW5ndGg7CiAKIGV4dGVybiBvaWQgICAgICB2ZXJzaW9uX3N5c29pZFtdOwogZXh0ZXJuIGludCAgICAgIHZlcnNpb25fc3lzb2lkX2xlbjsKIAotY2hhciAgICAgICAgICAgIG9sZHZlcnNpb25fZGVzY3JbU1lTX1NUUklOR19MRU5dOwotY2hhciAgICAgICAgICAgIG9sZHN5c0NvbnRhY3RbU1lTX1NUUklOR19MRU5dOwotY2hhciAgICAgICAgICAgIG9sZHN5c05hbWVbU1lTX1NUUklOR19MRU5dOwotY2hhciAgICAgICAgICAgIG9sZHN5c0xvY2F0aW9uW1NZU19TVFJJTkdfTEVOXTsKLQotaW50ICAgICAgICAgICAgIHN5c1NlcnZpY2VzID0gNzI7Ci1pbnQgICAgICAgICAgICAgc3lzU2VydmljZXNDb25maWdlZCA9IDA7CitzdGF0aWMgaW50ICAgICAgc3lzU2VydmljZXMgPSA3MjsKK3N0YXRpYyBpbnQgICAgICBzeXNTZXJ2aWNlc0NvbmZpZ2VkID0gMDsKIAogZXh0ZXJuIG9pZCAgICAgIHZlcnNpb25faWRbXTsKIGV4dGVybiBpbnQgICAgICB2ZXJzaW9uX2lkX2xlbjsKIAogc3RhdGljIGludCAgICAgIHN5c0NvbnRhY3RTZXQgPSAwLCBzeXNMb2NhdGlvblNldCA9IDAsIHN5c05hbWVTZXQgPSAwOwogCi1Xcml0ZU1ldGhvZCAgICAgd3JpdGVTeXN0ZW07Ci1pbnQgICAgICAgICAgICAgaGVhZGVyX3N5c3RlbShzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOwotCiAjaWYgKGRlZmluZWQgKFdJTjMyKSAmJiBkZWZpbmVkIChIQVZFX1dJTjMyX1BMQVRGT1JNX1NESykpIHx8IGRlZmluZWQgKG1pbmd3MzIpCiBzdGF0aWMgdm9pZCAgICAgd2luZG93c09TVmVyc2lvblN0cmluZyhjaGFyIFtdLCBzaXplX3QpOwogI2VuZGlmCkBAIC0xMDEsMTg3ICs4MywxMDAgQEAKIAkgKgogCSAqKioqKioqKioqKioqKioqKioqKiovCiAKLXZvaWQKK3N0YXRpYyB2b2lkCitzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZzIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogdmFsdWUsIHNpemVfdCBzaXplKQoreworICAgIGlmIChzdHJsZW4oY3B0cikgPCBzaXplKSB7CisgICAgICAgIHN0cmNweSh2YWx1ZSwgY3B0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIiVzIHRva2VuIHRvbyBsb25nIChtdXN0IGJlIDwgJWx1KTpcblx0JXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tlbiwgKHVuc2lnbmVkIGxvbmcpc2l6ZSwgY3B0cik7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuYW1lLCBjaGFyKiB2YWx1ZSwgc2l6ZV90IHNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQqIGd1YXJkKQoreworICAgIGlmICgqdG9rZW4gPT0gJ3AnKSB7CisgICAgICAgIGlmICgqZ3VhcmQgPCAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB0aGUgdmFsdWUgaXMKKyAgICAgICAgICAgICAqIGFscmVhZHkgY29uZmlndXJlZCByZWFkLW9ubHkuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgJXMuMFxuIiwgbmFtZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqZ3VhcmQgPSAxOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKCpndWFyZCA+IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHdlIGFscmVhZHkgcmVhZCBhCisgICAgICAgICAgICAgKiBwZXJzaXN0ZW50IHZhbHVlIHdoaWNoIHdlIHNob3VsZCBpZ25vcmUgaW4gZmF2b3VyIG9mIHRoaXMgb25lLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5ICVzLjBcbiIsIG5hbWUpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEZhbGwgdGhyb3VnaCBhbmQgY29weSBpbiB0aGlzIHZhbHVlLgorICAgICAgICAgICAgICovCisgICAgICAgIH0KKyAgICAgICAgKmd1YXJkID0gLTE7CisgICAgfQorCisgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcyKHRva2VuLCBjcHRyLCB2YWx1ZSwgc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkCiBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c2Rlc2NyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0KLSAgICBpZiAoc3RybGVuKGNwdHIpID49IHNpemVvZih2ZXJzaW9uX2Rlc2NyKSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsCi0gICAgICAgICAgICAgICAgIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAic3lzZGVzY3IgdG9rZW4gdG9vIGxvbmcgKG11c3QgYmUgPCAlbHUpOlxuXHQlcyIsCi0gICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZih2ZXJzaW9uX2Rlc2NyKSwKLSAgICAgICAgICAgICAgICAgY3B0cik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKLSAgICB9IGVsc2UgaWYgKHN0cmNtcChjcHRyLCAiXCJcIiIpID09IDApIHsKLSAgICAgICAgdmVyc2lvbl9kZXNjclswXSA9ICdcMCc7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RyY3B5KHZlcnNpb25fZGVzY3IsIGNwdHIpOwotICAgIH0KKyAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZzIodG9rZW4sIGNwdHIsIHZlcnNpb25fZGVzY3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2ZXJzaW9uX2Rlc2NyKSk7CiB9CiAKLXZvaWQKK3N0YXRpYyB2b2lkCiBzeXN0ZW1fcGFyc2VfY29uZmlnX3N5c2xvYyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwotCi0gICAgaWYgKHN0cmxlbihjcHRyKSA+PSBzaXplb2Yoc3lzTG9jYXRpb24pKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1ZiwgMTAyNCwKLSAgICAgICAgICAgICAgICAgInN5c2xvY2F0aW9uIHRva2VuIHRvbyBsb25nIChtdXN0IGJlIDwgJWx1KTpcblx0JXMiLAotICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzaXplb2Yoc3lzTG9jYXRpb24pLCBjcHRyKTsKLSAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAodG9rZW4sICJwc3lzbG9jYXRpb24iKSA9PSAwKSB7Ci0gICAgICAgIGlmIChzeXNMb2NhdGlvblNldCA8IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHRoZSBzeXNMb2NhdGlvbgotICAgICAgICAgICAgICogaXMgYWxyZWFkeSBjb25maWd1cmVkIHJlYWQtb25seS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IHN5c0xvY2F0aW9uLjBcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3lzTG9jYXRpb25TZXQrKzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzeXNMb2NhdGlvblNldCA+IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHdlIGFscmVhZHkgcmVhZCBhCi0gICAgICAgICAgICAgKiBwZXJzaXN0ZW50IHZhbHVlIG9mIHN5c0xvY2F0aW9uLCB3aGljaCB3ZSBzaG91bGQgaWdub3JlIGluCi0gICAgICAgICAgICAgKiBmYXZvdXIgb2YgdGhpcyBvbmUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBzeXNMb2NhdGlvbi4wXG4iKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBGYWxsIHRocm91Z2ggYW5kIGNvcHkgaW4gdGhpcyB2YWx1ZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgIH0KLSAgICAgICAgc3lzTG9jYXRpb25TZXQgPSAtMTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKGNwdHIsICJcIlwiIikgPT0gMCkgewotICAgICAgICBzeXNMb2NhdGlvblswXSA9ICdcMCc7Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oY3B0cikgPCBzaXplb2Yoc3lzTG9jYXRpb24pKSB7Ci0gICAgICAgIHN0cmNweShzeXNMb2NhdGlvbiwgY3B0cik7Ci0gICAgfQorICAgIHN5c3RlbV9wYXJzZV9jb25maWdfc3RyaW5nKHRva2VuLCBjcHRyLCAic3lzTG9jYXRpb24iLCBzeXNMb2NhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3lzTG9jYXRpb24pLCAmc3lzTG9jYXRpb25TZXQpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNjb24oY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZlsxMDI0XTsKLQotICAgIGlmIChzdHJsZW4oY3B0cikgPj0gc2l6ZW9mKHN5c0NvbnRhY3QpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1ZiwgMTAyNCwKLSAgICAgICAgICAgICAgICAgInN5c2NvbnRhY3QgdG9rZW4gdG9vIGxvbmcgKG11c3QgYmUgPCAlbHUpOlxuXHQlcyIsCi0gICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZihzeXNDb250YWN0KSwgY3B0cik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKLSAgICB9Ci0KLSAgICBpZiAoc3RyY21wKHRva2VuLCAicHN5c2NvbnRhY3QiKSA9PSAwKSB7Ci0gICAgICAgIGlmIChzeXNDb250YWN0U2V0IDwgMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gdGhlIHN5c0NvbnRhY3QKLSAgICAgICAgICAgICAqIGlzIGFscmVhZHkgY29uZmlndXJlZCByZWFkLW9ubHkuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBzeXNDb250YWN0LjBcbiIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3lzQ29udGFjdFNldCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN5c0NvbnRhY3RTZXQgPiAwKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBib2d1cyAoYW5kIHNob3VsZG4ndCBoYXBwZW4gYW55d2F5KSAtLSB3ZSBhbHJlYWR5IHJlYWQgYQotICAgICAgICAgICAgICogcGVyc2lzdGVudCB2YWx1ZSBvZiBzeXNDb250YWN0LCB3aGljaCB3ZSBzaG91bGQgaWdub3JlIGluIGZhdm91cgotICAgICAgICAgICAgICogb2YgdGhpcyBvbmUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgYXR0ZW1wdGVkIG92ZXJyaWRlIG9mIHJlYWQtb25seSBzeXNDb250YWN0LjBcbiIpOwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEZhbGwgdGhyb3VnaCBhbmQgY29weSBpbiB0aGlzIHZhbHVlLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgfQotICAgICAgICBzeXNDb250YWN0U2V0ID0gLTE7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcChjcHRyLCAiXCJcIiIpID09IDApIHsKLSAgICAgICAgc3lzQ29udGFjdFswXSA9ICdcMCc7Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oY3B0cikgPCBzaXplb2Yoc3lzQ29udGFjdCkpIHsKLSAgICAgICAgc3RyY3B5KHN5c0NvbnRhY3QsIGNwdHIpOwotICAgIH0KKyAgICBzeXN0ZW1fcGFyc2VfY29uZmlnX3N0cmluZyh0b2tlbiwgY3B0ciwgInN5c0NvbnRhY3QiLCBzeXNDb250YWN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzeXNDb250YWN0KSwgJnN5c0NvbnRhY3RTZXQpOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNuYW1lKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewotICAgIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07Ci0KLSAgICBpZiAoc3RybGVuKGNwdHIpID49IHNpemVvZihzeXNOYW1lKSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIDEwMjQsCi0gICAgICAgICAgICAgICAgICJzeXNuYW1lIHRva2VuIHRvbyBsb25nIChtdXN0IGJlIDwgJWx1KTpcblx0JXMiLAotICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzaXplb2Yoc3lzTmFtZSksIGNwdHIpOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7Ci0gICAgfQotCi0gICAgaWYgKHN0cmNtcCh0b2tlbiwgInBzeXNuYW1lIikgPT0gMCkgewotICAgICAgICBpZiAoc3lzTmFtZVNldCA8IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGlzIGlzIGJvZ3VzIChhbmQgc2hvdWxkbid0IGhhcHBlbiBhbnl3YXkpIC0tIHRoZSBzeXNOYW1lCi0gICAgICAgICAgICAgKiBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQgcmVhZC1vbmx5LiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgc3lzTmFtZS4wXG4iKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHN5c05hbWVTZXQrKzsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChzeXNOYW1lU2V0ID4gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoaXMgaXMgYm9ndXMgKGFuZCBzaG91bGRuJ3QgaGFwcGVuIGFueXdheSkgLS0gd2UgYWxyZWFkeSByZWFkIGEKLSAgICAgICAgICAgICAqIHBlcnNpc3RlbnQgdmFsdWUgb2Ygc3lzTmFtZSwgd2hpY2ggd2Ugc2hvdWxkIGlnbm9yZSBpbiBmYXZvdXIKLSAgICAgICAgICAgICAqIG9mIHRoaXMgb25lLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAotICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgc3lzTmFtZS4wXG4iKTsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBGYWxsIHRocm91Z2ggYW5kIGNvcHkgaW4gdGhpcyB2YWx1ZS4gIAotICAgICAgICAgICAgICovCi0gICAgICAgIH0KLSAgICAgICAgc3lzTmFtZVNldCA9IC0xOwotICAgIH0KLQotICAgIGlmIChzdHJjbXAoY3B0ciwgIlwiXCIiKSA9PSAwKSB7Ci0gICAgICAgIHN5c05hbWVbMF0gPSAnXDAnOwotICAgIH0gZWxzZSBpZiAoc3RybGVuKGNwdHIpIDwgc2l6ZW9mKHN5c05hbWUpKSB7Ci0gICAgICAgIHN0cmNweShzeXNOYW1lLCBjcHRyKTsKLSAgICB9CisgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zdHJpbmcodG9rZW4sIGNwdHIsICJzeXNOYW1lIiwgc3lzTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3lzTmFtZSksICZzeXNOYW1lU2V0KTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzU2VydmljZXMoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAgICAgc3lzU2VydmljZXMgPSBhdG9pKGNwdHIpOwogICAgIHN5c1NlcnZpY2VzQ29uZmlnZWQgPSAxOwogfQogCi12b2lkIHN5c3RlbV9wYXJzZV9jb25maWdfc3lzT2JqZWN0SUQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCitzdGF0aWMgdm9pZAorc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNPYmplY3RJRChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyIHRtcGJ1ZlsxMDI0XTsKLQotICAgIHN5c09iamVjdElETGVuZ3RoID0gTUFYX09JRF9MRU47CisgICAgc2l6ZV90IHN5c09iamVjdElETGVuZ3RoID0gTUFYX09JRF9MRU47CiAgICAgaWYgKCFyZWFkX29iamlkKGNwdHIsIHN5c09iamVjdElELCAmc3lzT2JqZWN0SURMZW5ndGgpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcGJ1ZiwKLSAgICAgICAgICAgICAgICAgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICJzeXNvYmplY3RpZCB0b2tlbiBub3QgYSBwYXJzYWJsZSBPSUQ6XG5cdCVzIiwKLSAgICAgICAgICAgICAgICAgY3B0cik7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKLSAgICAgICAgbWVtY3B5KHN5c09iamVjdElELCB2ZXJzaW9uX3N5c29pZCwgdmVyc2lvbl9zeXNvaWRfbGVuICogc2l6ZW9mKG9pZCkpOwotICAgICAgICBzeXNPYmplY3RJRExlbmd0aCA9IHZlcnNpb25fc3lzb2lkX2xlbjsKLSAgICB9CisJbmV0c25tcF9jb25maWdfZXJyb3IoInN5c29iamVjdGlkIHRva2VuIG5vdCBhIHBhcnNhYmxlIE9JRDpcblx0JXMiLAorCQkJICAgICBjcHRyKTsKKyAgICAgICAgc3lzT2JqZWN0SURCeXRlTGVuZ3RoID0gdmVyc2lvbl9zeXNvaWRfbGVuICAqIHNpemVvZihvaWQpOworICAgICAgICBtZW1jcHkoc3lzT2JqZWN0SUQsIHZlcnNpb25fc3lzb2lkLCBzeXNPYmplY3RJREJ5dGVMZW5ndGgpOworICAgIH0gZWxzZQorCisJCXN5c09iamVjdElEQnl0ZUxlbmd0aCA9IHN5c09iamVjdElETGVuZ3RoICogc2l6ZW9mKG9pZCk7CiB9CiAKIApAQCAtMjkxLDI4ICsxODYsOCBAQAogCSAqCiAJICoqKioqKioqKioqKioqKioqKioqKi8KIAotLyoKLSAqIGRlZmluZSB0aGUgc3RydWN0dXJlIHdlJ3JlIGdvaW5nIHRvIGFzayB0aGUgYWdlbnQgdG8gcmVnaXN0ZXIgb3VyCi0gKiBpbmZvcm1hdGlvbiBhdCAKLSAqLwotc3RydWN0IHZhcmlhYmxlMSBzeXN0ZW1fdmFyaWFibGVzW10gPSB7Ci0gICAge1ZFUlNJT05fREVTQ1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfc3lzdGVtLCAxLCB7MX19LAotICAgIHtWRVJTSU9OSUQsIEFTTl9PQkpFQ1RfSUQsIFJPTkxZLCB2YXJfc3lzdGVtLCAxLCB7Mn19LAotICAgIHtVUFRJTUUsIEFTTl9USU1FVElDS1MsIFJPTkxZLCB2YXJfc3lzdGVtLCAxLCB7M319LAotICAgIHtTWVNDT05UQUNULCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9zeXN0ZW0sIDEsIHs0fX0sCi0gICAge1NZU1RFTU5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3N5c3RlbSwgMSwgezV9fSwKLSAgICB7U1lTTE9DQVRJT04sIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3N5c3RlbSwgMSwgezZ9fSwKLSAgICB7U1lTU0VSVklDRVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3N5c3RlbSwgMSwgezd9fSwKLSAgICB7U1lTT1JMQVNUQ0hBTkdFLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX3N5c3RlbSwgMSwgezh9fQotfTsKLS8qCi0gKiBEZWZpbmUgdGhlIE9JRCBwb2ludGVyIHRvIHRoZSB0b3Agb2YgdGhlIG1pYiB0cmVlIHRoYXQgd2UncmUKLSAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGggCi0gKi8KLW9pZCAgICAgICAgICAgICBzeXN0ZW1fdmFyaWFibGVzX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCAxIH07CiBvaWQgICAgICAgICAgICAgc3lzdGVtX21vZHVsZV9vaWRbXSA9IHsgU05NUF9PSURfU05NUE1PRFVMRVMsIDEgfTsKLWludCAgICAgICAgICAgICBzeXN0ZW1fbW9kdWxlX29pZF9sZW4gPQotICAgIHNpemVvZihzeXN0ZW1fbW9kdWxlX29pZCkgLyBzaXplb2Yob2lkKTsKK2ludCAgICAgICAgICAgICBzeXN0ZW1fbW9kdWxlX29pZF9sZW4gPSBPSURfTEVOR1RIKHN5c3RlbV9tb2R1bGVfb2lkKTsKIGludCAgICAgICAgICAgICBzeXN0ZW1fbW9kdWxlX2NvdW50ID0gMDsKIAogc3RhdGljIGludApAQCAtMzM2LDYgKzIxMSwzMCBAQAogICAgIHJldHVybiAwOwogfQogCitzdGF0aWMgaW50CitoYW5kbGVfc3lzU2VydmljZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUworICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfR0VUICYmICFzeXNTZXJ2aWNlc0NvbmZpZ2VkKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX05PU1VDSElOU1RBTkNFKTsKKyNlbmRpZgorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50CitoYW5kbGVfc3lzVXBUaW1lKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX1RJTUVUSUNLUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKSk7CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKIHZvaWQKIGluaXRfc3lzdGVtX21pYih2b2lkKQogewpAQCAtMzk5LDMwICsyOTgsMTMwIEBACiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfR0VUSE9TVE5BTUUgKi8KIAogI2lmIChkZWZpbmVkIChXSU4zMikgJiYgZGVmaW5lZCAoSEFWRV9XSU4zMl9QTEFURk9STV9TREspKSB8fCBkZWZpbmVkIChtaW5ndzMyKQotICB7Ci0gICAgSEtFWSBoS2V5OwotICAgIC8qIERlZmF1bHQgc3lzQ29udGFjdCBpcyB0aGUgcmVnaXN0ZXJlZCB3aW5kb3dzIHVzZXIgKi8KLSAgICBpZiAoUmVnT3BlbktleUV4KEhLRVlfTE9DQUxfTUFDSElORSwgIlNPRlRXQVJFXFxNaWNyb3NvZnRcXFdpbmRvd3MgTlRcXEN1cnJlbnRWZXJzaW9uIiwgMCwgS0VZX1FVRVJZX1ZBTFVFLCAmaEtleSkgPT0gRVJST1JfU1VDQ0VTUykgewotICAgICAgIGNoYXIgcmVnaXN0ZXJlZE93bmVyWzI1Nl0gPSAiIjsKLSAgICAgICBEV09SRCByZWdpc3RlcmVkT3duZXJTeiA9IDI1NjsKLSAgICAgICBpZiAoUmVnUXVlcnlWYWx1ZUV4KGhLZXksICJSZWdpc3RlcmVkT3duZXIiLCBOVUxMLCBOVUxMLCAoTFBCWVRFKXJlZ2lzdGVyZWRPd25lciwgJnJlZ2lzdGVyZWRPd25lclN6KSA9PSBFUlJPUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgc3RyY3B5KHN5c0NvbnRhY3QsIHJlZ2lzdGVyZWRPd25lcik7Ci0gICAgICAgfQotICAgICAgIFJlZ0Nsb3NlS2V5KGhLZXkpOworICAgIHsKKyAgICAgIEhLRVkgaEtleTsKKyAgICAgIC8qIERlZmF1bHQgc3lzQ29udGFjdCBpcyB0aGUgcmVnaXN0ZXJlZCB3aW5kb3dzIHVzZXIgKi8KKyAgICAgIGlmIChSZWdPcGVuS2V5RXgoSEtFWV9MT0NBTF9NQUNISU5FLAorICAgICAgICAgICAgICAgICAgICAgICAiU09GVFdBUkVcXE1pY3Jvc29mdFxcV2luZG93cyBOVFxcQ3VycmVudFZlcnNpb24iLCAwLAorICAgICAgICAgICAgICAgICAgICAgICBLRVlfUVVFUllfVkFMVUUsICZoS2V5KSA9PSBFUlJPUl9TVUNDRVNTKSB7CisgICAgICAgICAgY2hhciByZWdpc3RlcmVkT3duZXJbMjU2XSA9ICIiOworICAgICAgICAgIERXT1JEIHJlZ2lzdGVyZWRPd25lclN6ID0gMjU2OworICAgICAgICAgIGlmIChSZWdRdWVyeVZhbHVlRXgoaEtleSwgIlJlZ2lzdGVyZWRPd25lciIsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTFBCWVRFKXJlZ2lzdGVyZWRPd25lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyZWdpc3RlcmVkT3duZXJTeikgPT0gRVJST1JfU1VDQ0VTUykgeworICAgICAgICAgICAgICBzdHJjcHkoc3lzQ29udGFjdCwgcmVnaXN0ZXJlZE93bmVyKTsKKyAgICAgICAgICB9CisgICAgICAgICAgUmVnQ2xvc2VLZXkoaEtleSk7CisgICAgICB9CiAgICAgfQotICB9CiAjZW5kaWYKIAogICAgIC8qIGRlZmF1bHQgc3lzT2JqZWN0SUQgKi8KICAgICBtZW1jcHkoc3lzT2JqZWN0SUQsIHZlcnNpb25fc3lzb2lkLCB2ZXJzaW9uX3N5c29pZF9sZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgc3lzT2JqZWN0SURMZW5ndGggPSB2ZXJzaW9uX3N5c29pZF9sZW47CisgICAgc3lzT2JqZWN0SURCeXRlTGVuZ3RoID0gdmVyc2lvbl9zeXNvaWRfbGVuICogc2l6ZW9mKG9pZCk7CiAKLSAgICAvKgotICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlIAotICAgICAqLwotICAgIFJFR0lTVEVSX01JQigibWliSUkvc3lzdGVtIiwgc3lzdGVtX3ZhcmlhYmxlcywgdmFyaWFibGUxLAotICAgICAgICAgICAgICAgICBzeXN0ZW1fdmFyaWFibGVzX29pZCk7Ci0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNEZXNjcl9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgMSB9OworICAgICAgICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gc3lzRGVzY3Jfd2luZm87CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzRGVzY3IiLCBOVUxMLCBzeXNEZXNjcl9vaWQsIE9JRF9MRU5HVEgoc3lzRGVzY3Jfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKCZzeXNEZXNjcl93aW5mbywgdmVyc2lvbl9kZXNjciwgMCwKKwkJCQkgICAgICBBU05fT0NURVRfU1RSLCBXQVRDSEVSX1NJWkVfU1RSTEVOKSk7CisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c09iamVjdElEX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCAyIH07CisgICAgICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzeXNPYmplY3RJRF93aW5mbzsKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAgICJtaWJJSS9zeXNPYmplY3RJRCIsIE5VTEwsCisgICAgICAgICAgICAgICAgc3lzT2JqZWN0SURfb2lkLCBPSURfTEVOR1RIKHN5c09iamVjdElEX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAorICAgICAgICAgICAgbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYoCisJCSZzeXNPYmplY3RJRF93aW5mbywgc3lzT2JqZWN0SUQsIDAsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9JU19QVFIsCisgICAgICAgICAgICAgICAgTUFYX09JRF9MRU4sICZzeXNPYmplY3RJREJ5dGVMZW5ndGgpKTsKKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzVXBUaW1lX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCAzIH07CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKAorICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c1VwVGltZSIsIGhhbmRsZV9zeXNVcFRpbWUsCisgICAgICAgICAgICAgICAgc3lzVXBUaW1lX29pZCwgT0lEX0xFTkdUSChzeXNVcFRpbWVfb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSkpOworICAgIH0KKyAgICB7CisgICAgICAgIGNvbnN0IG9pZCBzeXNDb250YWN0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCA0IH07CisgICAgICAgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyBzeXNDb250YWN0X3dpbmZvOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzQ29udGFjdCIsIHN5c0NvbnRhY3Rfb2lkLCBPSURfTEVOR1RIKHN5c0NvbnRhY3Rfb2lkKSwgCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCAmc3lzQ29udGFjdFNldCksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICZzeXNDb250YWN0X3dpbmZvLCBzeXNDb250YWN0LCBTWVNfU1RSSU5HX0xFTiAtIDEsCisgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c0NvbnRhY3QiLCBzeXNDb250YWN0X29pZCwgT0lEX0xFTkdUSChzeXNDb250YWN0X29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksICZzeXNDb250YWN0U2V0KSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgJnN5c0NvbnRhY3Rfd2luZm8sIHN5c0NvbnRhY3QsIFNZU19TVFJJTkdfTEVOIC0gMSwKKyAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLCBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzTmFtZV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgMSwgNSB9OworICAgICAgICBzdGF0aWMgbmV0c25tcF93YXRjaGVyX2luZm8gc3lzTmFtZV93aW5mbzsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c05hbWUiLCBzeXNOYW1lX29pZCwgT0lEX0xFTkdUSChzeXNOYW1lX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFLCAmc3lzTmFtZVNldCksCisgICAgICAgICAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKAorICAgICAgICAgICAgICAgICZzeXNOYW1lX3dpbmZvLCBzeXNOYW1lLCBTWVNfU1RSSU5HX0xFTiAtIDEsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c05hbWUiLCBzeXNOYW1lX29pZCwgT0lEX0xFTkdUSChzeXNOYW1lX29pZCksCisgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFksICZzeXNOYW1lU2V0KSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisgICAgICAgICAgICAgICAgJnN5c05hbWVfd2luZm8sIHN5c05hbWUsIFNZU19TVFJJTkdfTEVOIC0gMSwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICBXQVRDSEVSX01BWF9TSVpFIHwgV0FUQ0hFUl9TSVpFX1NUUkxFTikpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICB9CisgICAgeworICAgICAgICBjb25zdCBvaWQgc3lzTG9jYXRpb25fb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDYgfTsKKyAgICAgICAgc3RhdGljIG5ldHNubXBfd2F0Y2hlcl9pbmZvIHN5c0xvY2F0aW9uX3dpbmZvOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcigKKyAgICAgICAgICAgIG5ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgICAibWliSUkvc3lzTG9jYXRpb24iLCBzeXNMb2NhdGlvbl9vaWQsCisgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChzeXNMb2NhdGlvbl9vaWQpLAorICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSwgJnN5c0xvY2F0aW9uU2V0KSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisJCSZzeXNMb2NhdGlvbl93aW5mbywgc3lzTG9jYXRpb24sIFNZU19TVFJJTkdfTEVOIC0gMSwKKwkJQVNOX09DVEVUX1NUUiwgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyNlbHNlICAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIoCisgICAgICAgICAgICBuZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAgICAgIm1pYklJL3N5c0xvY2F0aW9uIiwgc3lzTG9jYXRpb25fb2lkLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc3lzTG9jYXRpb25fb2lkKSwKKyAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSwgJnN5c0xvY2F0aW9uU2V0KSwKKyAgICAgICAgICAgIG5ldHNubXBfaW5pdF93YXRjaGVyX2luZm8oCisJCSZzeXNMb2NhdGlvbl93aW5mbywgc3lzTG9jYXRpb24sIFNZU19TVFJJTkdfTEVOIC0gMSwKKwkJQVNOX09DVEVUX1NUUiwgV0FUQ0hFUl9NQVhfU0laRSB8IFdBVENIRVJfU0laRV9TVFJMRU4pKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgfQorICAgIHsKKyAgICAgICAgY29uc3Qgb2lkIHN5c1NlcnZpY2VzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxLCA3IH07CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9zY2FsYXIoCisgICAgICAgICAgICAibWliSUkvc3lzU2VydmljZXMiLCBzeXNTZXJ2aWNlc19vaWQsIE9JRF9MRU5HVEgoc3lzU2VydmljZXNfb2lkKSwKKyAgICAgICAgICAgICZzeXNTZXJ2aWNlcywgaGFuZGxlX3N5c1NlcnZpY2VzKTsKKyAgICB9CiAgICAgaWYgKCsrc3lzdGVtX21vZHVsZV9jb3VudCA9PSAzKQogICAgICAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShzeXN0ZW1fbW9kdWxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNSUIgbW9kdWxlIGZvciBTTk1QdjIgZW50aXRpZXMiKTsKQEAgLTQ1NiwxODcgKzQ1NSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIk9JRCIpOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXN0ZW1fc3RvcmUsIE5VTEwpOwotCiB9CiAKLQotICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCi0JICoKLQkgKiAgU3lzdGVtIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGZ1bmN0aW9ucwotCSAqCi0JICoqKioqKioqKioqKioqKioqKioqKi8KLQotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3lzT1JfbGFzdGNoYW5nZTsKLSNlbmRpZgotCi11X2NoYXIgICAgICAgICAqCi12YXJfc3lzdGVtKHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0gICAgc3RhdGljIHVfbG9uZyAgIHVscmV0OwotCi0gICAgaWYgKGhlYWRlcl9nZW5lcmljKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpID09Ci0gICAgICAgIE1BVENIX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgVkVSU0lPTl9ERVNDUjoKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4odmVyc2lvbl9kZXNjcik7Ci0gICAgICAgIHJldHVybiAodV9jaGFyICopIHZlcnNpb25fZGVzY3I7Ci0gICAgY2FzZSBWRVJTSU9OSUQ6Ci0gICAgICAgICp2YXJfbGVuID0gc3lzT2JqZWN0SURMZW5ndGggKiBzaXplb2Yoc3lzT2JqZWN0SURbMF0pOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKXN5c09iamVjdElEOwotICAgIGNhc2UgVVBUSU1FOgotICAgICAgICB1bHJldCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgJiB1bHJldCk7Ci0gICAgY2FzZSBTWVNDT05UQUNUOgotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzeXNDb250YWN0KTsKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlU3lzdGVtOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBzeXNDb250YWN0OwotICAgIGNhc2UgU1lTVEVNTkFNRToKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3lzTmFtZSk7Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZVN5c3RlbTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3lzTmFtZTsKLSAgICBjYXNlIFNZU0xPQ0FUSU9OOgotICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzeXNMb2NhdGlvbik7Ci0gICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZVN5c3RlbTsKLSAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3lzTG9jYXRpb247Ci0gICAgY2FzZSBTWVNTRVJWSUNFUzoKLSNpZiBORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUwotICAgICAgICBpZiAoIXN5c1NlcnZpY2VzQ29uZmlnZWQpCi0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSNlbmRpZgotICAgICAgICBsb25nX3JldHVybiA9IHN5c1NlcnZpY2VzOwotICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwotCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSAgICBjYXNlIFNZU09STEFTVENIQU5HRToKLSAgICAgICAgdWxyZXQgPSBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKCZzeXNPUl9sYXN0Y2hhbmdlKTsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICYgdWxyZXQpOwotI2VuZGlmCi0KLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX3N5c3RlbVxuIiwKLSAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLQotaW50Ci13cml0ZVN5c3RlbShpbnQgYWN0aW9uLAotICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKLSAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCi0gICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4sCi0gICAgICAgICAgICB1X2NoYXIgKiBzdGF0UCwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQotewotICAgIHVfY2hhciAgICAgICAgICpjcDsKLSAgICBjaGFyICAgICAgICAgICAqYnVmID0gTlVMTCwgKm9sZGJ1ZiA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIGNvdW50LCAqc2V0dmFyID0gTlVMTDsKLQotICAgIHN3aXRjaCAoKGNoYXIpIG5hbWVbN10pIHsKLSAgICBjYXNlIFZFUlNJT05fREVTQ1I6Ci0gICAgY2FzZSBWRVJTSU9OSUQ6Ci0gICAgY2FzZSBVUFRJTUU6Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJBdHRlbXB0IHRvIHdyaXRlIHRvIFIvTyBPSURcbiIpOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7Ci0gICAgY2FzZSBTWVNDT05UQUNUOgotICAgICAgICBidWYgPSBzeXNDb250YWN0OwotICAgICAgICBvbGRidWYgPSBvbGRzeXNDb250YWN0OwotICAgICAgICBzZXR2YXIgPSAmc3lzQ29udGFjdFNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTWVNURU1OQU1FOgotICAgICAgICBidWYgPSBzeXNOYW1lOwotICAgICAgICBvbGRidWYgPSBvbGRzeXNOYW1lOwotICAgICAgICBzZXR2YXIgPSAmc3lzTmFtZVNldDsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBTWVNMT0NBVElPTjoKLSAgICAgICAgYnVmID0gc3lzTG9jYXRpb247Ci0gICAgICAgIG9sZGJ1ZiA9IG9sZHN5c0xvY2F0aW9uOwotICAgICAgICBzZXR2YXIgPSAmc3lzTG9jYXRpb25TZXQ7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU1lTU0VSVklDRVM6Ci0gICAgY2FzZSBTWVNPUkxBU1RDSEFOR0U6Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJBdHRlbXB0IHRvIHdyaXRlIHRvIFIvTyBPSURcbiIpOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsgLyogPz8/ICovCi0gICAgfQotCi0gICAgc3dpdGNoIChhY3Rpb24pIHsKLSAgICBjYXNlIFJFU0VSVkUxOiAgICAgICAgICAgICAvKiBDaGVjayB2YWx1ZXMgZm9yIGFjY2VwdGFiaWxpdHkgKi8KLSAgICAgICAgaWYgKHZhcl92YWxfdHlwZSAhPSBBU05fT0NURVRfU1RSKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm90IHN0cmluZ1xuIik7Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwotICAgICAgICB9Ci0gICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IHNpemVvZihzeXNMb2NhdGlvbikgLSAxKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIGxlbmd0aFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7Ci0gICAgICAgIH0KLQotICAgICAgICBmb3IgKGNwID0gdmFyX3ZhbCwgY291bnQgPSAwOyBjb3VudCA8IChpbnQpIHZhcl92YWxfbGVuOwotICAgICAgICAgICAgIGNvdW50KyssIGNwKyspIHsKLSAgICAgICAgICAgIGlmICghaXNwcmludCgqY3ApKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vdCBwcmludCAleFxuIiwgKmNwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpZiAoc2V0dmFyICE9IE5VTEwgJiYgKnNldHZhciA8IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUaGUgb2JqZWN0IGlzIHNldCBpbiBhIHJlYWQtb25seSBjb25maWd1cmF0aW9uIGZpbGUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotCi0gICAgY2FzZSBSRVNFUlZFMjogICAgICAgICAgICAgLyogQWxsb2NhdGUgbWVtb3J5IGFuZCBzaW1pbGFyIHJlc291cmNlcyAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFVzaW5nIHN0YXRpYyBzdHJpbmdzLCBzbyBub3RoaW5nIG5lZWRzIHRvIGJlIGRvbmUgCi0gICAgICAgICAqLwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgQUNUSU9OOiAgICAgICAgICAgICAgIC8qIFBlcmZvcm0gdGhlIFNFVCBhY3Rpb24gKGlmIHJldmVyc2libGUpICovCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2F2ZSB0aGUgb2xkIHZhbHVlLCBpbiBjYXNlIG9mIFVORE8gCi0gICAgICAgICAqLwotICAgICAgICBzdHJjcHkob2xkYnVmLCBidWYpOwotICAgICAgICBtZW1jcHkoYnVmLCB2YXJfdmFsLCB2YXJfdmFsX2xlbik7Ci0gICAgICAgIGJ1Zlt2YXJfdmFsX2xlbl0gPSAwOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgVU5ETzogICAgICAgICAgICAgICAgIC8qIFJldmVyc2UgdGhlIFNFVCBhY3Rpb24gYW5kIGZyZWUgcmVzb3VyY2VzICovCi0KLSAgICAgICAgc3RyY3B5KGJ1Ziwgb2xkYnVmKTsKLSAgICAgICAgb2xkYnVmWzBdID0gMDsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIENPTU1JVDoKLSAgICAgICAgaWYgKHNldHZhciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqc2V0dmFyID0gMTsKLSAgICAgICAgfQotICAgICAgICBzbm1wX3NhdmVfcGVyc2lzdGVudChuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7Ci0gICAgICAgICh2b2lkKSBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLCBOVUxMKTsKLSAgICAgICAgc25tcF9jbGVhbl9wZXJzaXN0ZW50KG5ldHNubXBfZHNfZ2V0X3N0cmluZwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSkpOwotCi0gICAgY2FzZSBGUkVFOiAgICAgICAgICAgICAgICAgLyogRnJlZSBhbnkgcmVzb3VyY2VzIGFsbG9jYXRlZCAqLwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vIHJlc291cmNlcyBoYXZlIGJlZW4gYWxsb2NhdGVkLCBidXQgImVtcHR5IiB0aGUgJ29sZGJ1ZicgCi0gICAgICAgICAqLwotICAgICAgICBvbGRidWZbMF0gPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBvZiB3cml0ZVN5c3RlbSAqLwotCiAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBJbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMgLSBOb25lCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmggYi9hZ2VudC9taWJncm91cC9taWJJSS9zeXN0ZW1fbWliLmgKaW5kZXggZWMzMzEyZC4uZGQxNmYwOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvc3lzdGVtX21pYi5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3N5c3RlbV9taWIuaApAQCAtMSwzMSArMSwxNiBAQAotLyoKLSAqICBTeXN0ZW0gTUlCIGdyb3VwIGludGVyZmFjZSAtIHN5c3RlbS5oCi0gKgotICovCiAjaWZuZGVmIF9NSUJHUk9VUF9TWVNURU1fTUlCX0gKICNkZWZpbmUgX01JQkdST1VQX1NZU1RFTV9NSUJfSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgogCi0gICAgIGV4dGVybiBjaGFyICAgICB2ZXJzaW9uX2Rlc2NyW107Citjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzIG1pYklJL3VwZGF0ZXMpCiAKLSAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc3lzdGVtX21pYih2b2lkKTsKLSAgICAgZXh0ZXJuIEZpbmRWYXJNZXRob2QgdmFyX3N5c3RlbTsKK3ZvaWQgaW5pdF9zeXN0ZW1fbWliKHZvaWQpOwogCi0vKgotICogY29uZmlnIGZpbGUgcGFyc2luZyByb3V0aW5lcyAKLSAqLwotICAgICB2b2lkICAgICAgICAgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNsb2MoY29uc3QgY2hhciAqLCBjaGFyICopOwotICAgICB2b2lkICAgICAgICAgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNjb24oY29uc3QgY2hhciAqLCBjaGFyICopOwotICAgICB2b2lkICAgICAgICAgICAgc3lzdGVtX3BhcnNlX2NvbmZpZ19zeXNuYW1lKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLQotI2RlZmluZQlWRVJTSU9OX0RFU0NSCQkxCi0jZGVmaW5lCVZFUlNJT05JRAkJMgotI2RlZmluZQlVUFRJTUUJCQkzCi0jZGVmaW5lIFNZU0NPTlRBQ1QJCTQKLSNkZWZpbmUgU1lTVEVNTkFNRQkJNQotI2RlZmluZSBTWVNMT0NBVElPTgkJNgotI2RlZmluZSBTWVNTRVJWSUNFUwkJNwotI2RlZmluZSBTWVNPUkxBU1RDSEFOR0UJCTgKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1NZU1RFTV9NSUJfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuYwppbmRleCBiYzJlMmQwLi4zYzc5ZmFkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuYwpAQCAtNSw2ICs1LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlICJtaWJJSV9jb21tb24uaCIKIAogI2lmIEhBVkVfU1RETElCX0gKQEAgLTQ5LDExICs1MCwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCIKICNpbmNsdWRlICJ0Y3AuaCIKICNpbmNsdWRlICJ0Y3BUYWJsZS5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKIAogI2lmbmRlZiBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2RlZmluZSBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAk1CkBAIC02Miw3ICs2MywxMCBAQAogI2RlZmluZSBUQ1BfU1RBVFNfQ0FDSEVfVElNRU9VVAlNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2lmZGVmIEZJUlNUX1BST1RPQ09MCiBwZXJmc3RhdF9wcm90b2NvbF90IHBzX3Byb3RvOwpAQCAtODgsNyArOTIsOSBAQAogaW50ICBoeiA9IDEwMDA7CiAjZW5kaWYKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUF9DT1VOVF9DT05ORUNUSU9OUwogZXh0ZXJuIGludCBUQ1BfQ291bnRfQ29ubmVjdGlvbnMoIHZvaWQgKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUF9DT1VOVF9DT05ORUNUSU9OUyAqLwogICAgICAgICAvKioqKioqKioqKioqKioqKioqKioqCiAJICoKIAkgKiAgSW5pdGlhbGlzYXRpb24gJiBjb21tb24gaW1wbGVtZW50YXRpb24gZnVuY3Rpb25zCkBAIC0xNzYsNyArMTgyLDcgQEAKICN1bmRlZiBUQ1BfTlNUQVRTCiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KICNkZWZpbmUgVENQX1NUQVRfU1RSVUNUVVJFICAgICBNSUJfVENQU1RBVFMKICNlbmRpZgpAQCAtMzY3LDExICszNzMsMTQgQEAKICAgICAgICAgcmV0X3ZhbHVlID0gdGNwc3RhdC50Y3BzX2Ryb3BzOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFRDUENVUlJFU1RBQjoKLSNpZmRlZiBVU0lOR19NSUJJSV9UQ1BUQUJMRV9NT0RVTEUKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcKKyAgICAgICAgbmV0c25tcF9mZWF0dXJlX3dhbnQodGNwX2NvdW50X2Nvbm5lY3Rpb25zKQorI2VuZGlmCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQX0NPVU5UX0NPTk5FQ1RJT05TCiAgICAgICAgIHJldF92YWx1ZSA9IFRDUF9Db3VudF9Db25uZWN0aW9ucygpOwogI2Vsc2UKICAgICAgICAgcmV0X3ZhbHVlID0gMDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQX0NPVU5UX0NPTk5FQ1RJT05TICovCiAgICAgICAgIHR5cGUgPSBBU05fR0FVR0U7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVENQSU5TRUdTOgpAQCAtMzg5LDcgKzM5OCw3IEBACiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVENQSU5FUlJTOgogICAgICAgICByZXRfdmFsdWUgPSB0Y3BzdGF0LnRjcHNfcmN2YmFkc3VtICsgdGNwc3RhdC50Y3BzX3JjdmJhZG9mZgotI2lmZGVmIFNUUlVDVF9UQ1BTVEFUX0hBU19UQ1BTX1JDVk1FTURST1AKKyNpZmRlZiBIQVZFX1NUUlVDVF9UQ1BTVEFUX1RDUFNfUkNWTUVNRFJPUAogICAgICAgICAgICAgKyB0Y3BzdGF0LnRjcHNfcmN2bWVtZHJvcAogI2VuZGlmCiAgICAgICAgICAgICArIHRjcHN0YXQudGNwc19yY3ZzaG9ydDsKQEAgLTU0Niw2ICs1NTUsNyBAQAogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTU1NSw2ICs1NjUsNyBAQAogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL3RjcDogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS90Y3A6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS90Y3AuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5oCmluZGV4IDkyNmRmNDkuLjA0OWRkZDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3RjcC5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBfTUlCR1JPVVBfVENQX0gKIAogCi1jb25maWdfcmVxdWlyZShtaWJJSS90Y3BUYWJsZSB1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUobWliSUkvdGNwVGFibGUpCiAKIGNvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsICAgICAgICBrZXJuZWxfc3Vub3M1KQogY29uZmlnX2FyY2hfcmVxdWlyZShsaW51eCwgICAgIG1pYklJL2tlcm5lbF9saW51eCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5jCmluZGV4IDJiMWMyYzYuLjAzYzg1ZTUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYwpAQCAtMTUsNiArMTUsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgIm1pYklJX2NvbW1vbi5oIgogCiAjaWYgSEFWRV9ORVRJTkVUX1RDUF9ICkBAIC0yOSw2ICszMCwxMSBAQAogI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKICNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KICNlbmRpZgorI2lmIEhBVkVfTkVUTElOS19ORVRMSU5LX0gKKyNpbmNsdWRlIDxuZXRsaW5rL25ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXRsaW5rL21zZy5oPgorI2luY2x1ZGUgPGxpbnV4L2luZXRfZGlhZy5oPgorI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0zNiw3ICs0MiwxMCBAQAogCiAjaW5jbHVkZSAidGNwLmgiCiAjaW5jbHVkZSAidGNwVGFibGUuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3B0YWJsZV9hbGwsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwX2NvdW50X2Nvbm5lY3Rpb25zLCB0Y3B0YWJsZV9hbGwpCiAKICNpZmRlZiBocHV4MTEKICNkZWZpbmUJVENQVEFCTEVfRU5UUllfVFlQRQltaWJfdGNwQ29ubkVudCAKQEAgLTYzLDcgKzcyLDcgQEAKICNkZWZpbmUJVENQVEFCTEVfSVNfTElOS0VEX0xJU1QKICNlbHNlCiAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAoY3lnd2luKQorI2lmZGVmIEhBVkVfSVBITFBBUElfSAogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAjZGVmaW5lCVRDUFRBQkxFX0VOVFJZX1RZUEUJTUlCX1RDUFJPVwogI2RlZmluZQlUQ1BUQUJMRV9TVEFURQkJZHdTdGF0ZSAKQEAgLTkxLDYgKzEwMCw3IEBACiAgICAgaW50ICAgICAgICAgICAgIHN0YXRlOwogICAgIG5ldHNubXBfaW5wY2IgICppbnBfbmV4dDsKIH07CisjdW5kZWYgSU5QX05FWFRfU1lNQk9MCiAjZGVmaW5lIElOUF9ORVhUX1NZTUJPTAkJaW5wX25leHQKICNkZWZpbmUJVENQVEFCTEVfRU5UUllfVFlQRQluZXRzbm1wX2lucGNiIAogI2RlZmluZQlUQ1BUQUJMRV9TVEFURQkJc3RhdGUgCkBAIC0xMjksMTUgKzEzOSwxNSBAQAogI2RlZmluZSBUQ1BfUE9SVF9UT19IT1NUX09SREVSKHgpIG50b2hzKHgpCiAjZW5kaWYKIAotb2lkICAgICAgICAgICAgIHRjcFRhYmxlX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA2LCAxMyB9OwotCiB2b2lkCiBpbml0X3RjcFRhYmxlKHZvaWQpCiB7CisgICAgY29uc3Qgb2lkIHRjcFRhYmxlX29pZFtdID0geyBTTk1QX09JRF9NSUIyLCA2LCAxMyB9OworCiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvOwotICAgIGludCByYzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByYzsKIAogICAgIERFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJJbml0aWFsaXNpbmcgVENQIFRhYmxlXG4iKSk7CiAgICAgLyoKQEAgLTE3Nyw3ICsxODcsNyBAQAogICAgICAgICAgICAgdGNwVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgIHRjcFRhYmxlX29pZCwgT0lEX0xFTkdUSCh0Y3BUYWJsZV9vaWQpLAogICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAotICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihyZWdpbmZvLCBpaW5mbyk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihyZWdpbmZvLCBpaW5mbyk7CiAgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yNjgsMTIgKzI3OCwxNCBAQAogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS90Y3BUYWJsZTogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKQEAgLTI4NiwxMSArMjk4LDEzIEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BfQ09VTlRfQ09OTkVDVElPTlMKIGludAogVENQX0NvdW50X0Nvbm5lY3Rpb25zKCB2b2lkICkgewogICAgIHRjcFRhYmxlX2xvYWQoTlVMTCwgTlVMTCk7CiAgICAgcmV0dXJuIHRjcF9lc3RhYjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUF9DT1VOVF9DT05ORUNUSU9OUyAqLwogCiAJLyoKIAkgKiBUd28gZm9ybXMgb2YgaXRlcmF0aW9uIGhvb2sgcm91dGluZXM6CkBAIC00MDQsNyArNDE4LDcgQEAKICAgICAgKiBYWFggLSBIb3cgY2FuIHdlIHRlbGwgaWYgdGhlIGNhY2hlIGlzIHZhbGlkPwogICAgICAqICAgICAgIE5vIGFjY2VzcyB0byAncmVxaW5mbycKICAgICAgKi8KLSAgICBpZiAodGNwX2hlYWQgPT0gMCkKKyAgICBpZiAodGNwX2hlYWQgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgpAQCAtNTQ3LDYgKzU2MSwxNDQgQEAKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaHB1eDExICovCiAKICNpZmRlZiBsaW51eAorCisvKiAgc2VlIDxuZXRpbmV0L3RjcC5oPiAqLworI2RlZmluZSBUQ1BfQUxMICgoMSA8PCAoVENQX0NMT1NJTkcgKyAxKSkgLSAxKQorCitjb25zdCBzdGF0aWMgaW50IGxpbnV4X3N0YXRlc1sxMl0gPSB7IDEsIDUsIDMsIDQsIDYsIDcsIDExLCAxLCA4LCA5LCAyLCAxMCB9OworCisjaWYgSEFWRV9ORVRMSU5LX05FVExJTktfSAorCisjaWYgIWRlZmluZWQoSEFWRV9MSUJOTDMpCisvKiBsaWJubDMgQVBJIGltcGxlbWVudGVkIG9uIHRvcCBvZiB0aGUgbGlibmwxIEFQSSAqLworCisjZGVmaW5lIG5sX3NvY2sgbmxfaGFuZGxlCisKK3N0YXRpYyBjb25zdCBjaGFyICpubF9nZXRlcnJvcl9jb21wYXQoaW50IGUpCit7CisgICAgcmV0dXJuIG5sX2dldGVycm9yKCk7Cit9CisKKyNkZWZpbmUgbmxfZ2V0ZXJyb3IoZSkgbmxfZ2V0ZXJyb3JfY29tcGF0KGUpCisKK3N0YXRpYyBzdHJ1Y3QgbmxfaGFuZGxlICpubF9zb2NrZXRfYWxsb2Modm9pZCkKK3sKKyAgICByZXR1cm4gbmxfaGFuZGxlX2FsbG9jKCk7Cit9CisKK3N0YXRpYyB2b2lkIG5sX3NvY2tldF9mcmVlKHN0cnVjdCBubF9oYW5kbGUgKm5zKQoreworICAgIG5sX2hhbmRsZV9kZXN0cm95KG5zKTsKK30KKyNlbmRpZiAvKiBIQVZFX0xJQk5MMyAqLworCitzdGF0aWMgaW50Cit0Y3BUYWJsZV9sb2FkX25ldGxpbmsodm9pZCkKK3sKKwkvKiBUT0RPOiBwZXJoYXBzIHVzZSBwZXJtYW5lbnQgbmwgc29ja2V0ID8gKi8KKwlzdHJ1Y3Qgbmxfc29jayAqbmwgPSBubF9zb2NrZXRfYWxsb2MoKTsKKwlzdHJ1Y3QgaW5ldF9kaWFnX3JlcSByZXEgPSB7CisJCS5pZGlhZ19mYW1pbHkgPSBBRl9JTkVULAorCQkuaWRpYWdfc3RhdGVzID0gVENQX0FMTCwKKwl9OworCisJc3RydWN0IG5sX21zZyAqbm07CisKKwlzdHJ1Y3Qgc29ja2FkZHJfbmwgcGVlcjsKKwl1bnNpZ25lZCBjaGFyICpidWYgPSBOVUxMOworCWludCBydW5uaW5nID0gMSwgbGVuLCBlcnI7CisKKwlpZiAobmwgPT0gTlVMTCkgeworCQlERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAiRmFpbGVkIHRvIGFsbG9jYXRlIG5ldGxpbmsgaGFuZGxlXG4iKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJzbm1wZDogRmFpbGVkIHRvIGFsbG9jYXRlIG5ldGxpbmsgaGFuZGxlXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCWVyciA9IG5sX2Nvbm5lY3QobmwsIE5FVExJTktfSU5FVF9ESUFHKTsKKwlpZiAoZXJyIDwgMCkgeworCQlERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gbmV0bGluazogJXNcbiIsIG5sX2dldGVycm9yKGVycikpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBDb3VsZG4ndCBjb25uZWN0IHRvIG5ldGxpbms6ICVzXG4iLCBubF9nZXRlcnJvcihlcnIpKTsKKwkJbmxfc29ja2V0X2ZyZWUobmwpOworCQlyZXR1cm4gLTE7CisJfQorCisJbm0gPSBubG1zZ19hbGxvY19zaW1wbGUoVENQRElBR19HRVRTT0NLLCBOTE1fRl9ST09UfE5MTV9GX01BVENIfE5MTV9GX1JFUVVFU1QpOworCW5sbXNnX2FwcGVuZChubSwgJnJlcSwgc2l6ZW9mKHN0cnVjdCBpbmV0X2RpYWdfcmVxKSwgMCk7CisKKwllcnIgPSBubF9zZW5kX2F1dG9fY29tcGxldGUobmwsIG5tKTsKKwlpZiAoZXJyIDwgMCkgeworCQlERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAibmxfc2VuZF9hdXRvY29tcGxldGUoKTogJXNcbiIsIG5sX2dldGVycm9yKGVycikpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBubF9zZW5kX2F1dG9jb21wbGV0ZSgpOiAlc1xuIiwgbmxfZ2V0ZXJyb3IoZXJyKSk7CisJCW5sX3NvY2tldF9mcmVlKG5sKTsKKwkJcmV0dXJuIC0xOworCX0KKwlubG1zZ19mcmVlKG5tKTsKKworCXdoaWxlIChydW5uaW5nKSB7CisJCXN0cnVjdCBubG1zZ2hkciAqaDsKKwkJaWYgKChsZW4gPSBubF9yZWN2KG5sLCAmcGVlciwgJmJ1ZiwgTlVMTCkpIDw9IDApIHsKKwkJCURFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJubF9yZWN2KCk6ICVzXG4iLCBubF9nZXRlcnJvcihsZW4pKSk7CisJCQlzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IG5sX3JlY3YoKTogJXNcbiIsIG5sX2dldGVycm9yKGxlbikpOworCQkJbmxfc29ja2V0X2ZyZWUobmwpOworCQkJcmV0dXJuIC0xOworCQl9CisKKwkJaCA9IChzdHJ1Y3Qgbmxtc2doZHIqKWJ1ZjsKKworCQl3aGlsZSAobmxtc2dfb2soaCwgbGVuKSkgeworCQkJc3RydWN0IGluZXRfZGlhZ19tc2cgKnIgPSBubG1zZ19kYXRhKGgpOworCQkJc3RydWN0IGlucGNiICAgIHBjYiwgKm5uZXc7CisKKwkJCWlmIChoLT5ubG1zZ190eXBlID09IE5MTVNHX0RPTkUpIHsKKwkJCQlydW5uaW5nID0gMDsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJciA9IG5sbXNnX2RhdGEoaCk7CisKKwkJCWlmIChyLT5pZGlhZ19mYW1pbHkgIT0gQUZfSU5FVCkgeworCQkJCWggPSBubG1zZ19uZXh0KGgsICZsZW4pOworCQkJCWNvbnRpbnVlOworCQkJfQorCisJCQltZW1jcHkoJnBjYi5pbnBfbGFkZHIuc19hZGRyLCByLT5pZC5pZGlhZ19zcmMsIHItPmlkaWFnX2ZhbWlseSA9PSBBRl9JTkVUID8gNCA6IDYpOworCQkJbWVtY3B5KCZwY2IuaW5wX2ZhZGRyLnNfYWRkciwgci0+aWQuaWRpYWdfZHN0LCByLT5pZGlhZ19mYW1pbHkgPT0gQUZfSU5FVCA/IDQgOiA2KTsKKworCQkJcGNiLmlucF9scG9ydCA9IHItPmlkLmlkaWFnX3Nwb3J0OworCQkJcGNiLmlucF9mcG9ydCA9IHItPmlkLmlkaWFnX2Rwb3J0OworCisJCQlwY2IuaW5wX3N0YXRlID0gKHItPmlkaWFnX3N0YXRlICYgMHhmKSA8IDEyID8gbGludXhfc3RhdGVzW3ItPmlkaWFnX3N0YXRlICYgMHhmXSA6IDI7CisJCQlpZiAocGNiLmlucF9zdGF0ZSA9PSA1IC8qIGVzdGFibGlzaGVkICovIHx8CisJCQkJcGNiLmlucF9zdGF0ZSA9PSA4IC8qICBjbG9zZVdhaXQgICovICkKKwkJCQl0Y3BfZXN0YWIrKzsKKwkJCXBjYi51aWQgPSByLT5pZGlhZ191aWQ7CisKKwkJCW5uZXcgPSBTTk1QX01BTExPQ19UWVBFREVGKHN0cnVjdCBpbnBjYik7CisJCQlpZiAobm5ldyA9PSBOVUxMKSB7CisJCQkJcnVubmluZyA9IDA7CisJCQkJLyogIFhYWCByZXBvcnQgbWFsbG9jIGVycm9yIGFuZCByZXR1cm4gLTE/ICovCisJCQkJYnJlYWs7CisJCQl9CisJCQltZW1jcHkobm5ldywgJnBjYiwgc2l6ZW9mKHN0cnVjdCBpbnBjYikpOworCQkJbm5ldy0+aW5wX25leHQgPSB0Y3BfaGVhZDsKKwkJCXRjcF9oZWFkICAgICAgID0gbm5ldzsKKworCQkJaCA9IG5sbXNnX25leHQoaCwgJmxlbik7CisJCX0KKwkJZnJlZShidWYpOworCX0KKworCW5sX3NvY2tldF9mcmVlKG5sKTsKKworCWlmICh0Y3BfaGVhZCkgeworCQlERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAiTG9hZGVkIFRDUCBUYWJsZSB1c2luZyBuZXRsaW5rXG4iKSk7CisJCXJldHVybiAwOworCX0KKwlERUJVR01TR1RMKCgibWliSUkvdGNwVGFibGUiLCAiRmFpbGVkIHRvIGxvYWQgVENQIFRhYmxlIChuZXRsaW5rKVxuIikpOworCXJldHVybiAtMTsKK30KKyNlbmRpZgorCiBpbnQKIHRjcFRhYmxlX2xvYWQobmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYykKIHsKQEAgLTU1NSw5ICs3MDcsMTUgQEAKIAogICAgIHRjcFRhYmxlX2ZyZWUoY2FjaGUsIE5VTEwpOwogCisjaWYgSEFWRV9ORVRMSU5LX05FVExJTktfSAorCWlmICh0Y3BUYWJsZV9sb2FkX25ldGxpbmsoKSA9PSAwKSB7CisJCXJldHVybiAwOworCX0KKyNlbmRpZgorCiAgICAgaWYgKCEoaW4gPSBmb3BlbigiL3Byb2MvbmV0L3RjcCIsICJyIikpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS90Y3BUYWJsZSIsICJGYWlsZWQgdG8gbG9hZCBUQ1AgVGFibGUgKGxpbnV4MSlcbiIpKTsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvdGNwIC4uLlxuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvdGNwIC4uLlxuIikpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC01NjgsOSArNzI2LDggQEAKICAgICAgKi8KICAgICB3aGlsZSAobGluZSA9PSBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBzdHJ1Y3QgaW5wY2IgICAgcGNiLCAqbm5ldzsKLSAgICAgICAgc3RhdGljIGludCAgICAgIGxpbnV4X3N0YXRlc1sxMl0gPQotICAgICAgICAgICAgeyAxLCA1LCAzLCA0LCA2LCA3LCAxMSwgMSwgOCwgOSwgMiwgMTAgfTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXRlLCBscCwgZnAsIHVpZDsKKyAgICAgICAgdW5zaWduZWQgaW50ICAgIGxwLCBmcDsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHN0YXRlLCB1aWQ7CiAKICAgICAgICAgaWYgKDYgIT0gc3NjYW5mKGxpbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAiJSpkOiAleDoleCAleDoleCAleCAlKlg6JSpYICUqWDolKlggJSpYICVkIiwKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9taWJJSS90Y3BUYWJsZS5oCmluZGV4IGE1YTZmNzYuLjU1ZmU5N2IgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3RjcFRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuaApAQCAtNiw3ICs2LDYgQEAKICNkZWZpbmUgX01JQkdST1VQX1RDUFRBQkxFX0gKIAogY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwga2VybmVsX3N1bm9zNSkKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCiAjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTKQogY29uZmlnX3JlcXVpcmUobWliSUkvaXApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMKaW5kZXggZTE1YTJkZS4uMWRkY2JjNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwLmMKQEAgLTE2LDE1ICsxNiwxNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCIKIAogI2lmZGVmIGxpbnV4CiAjaW5jbHVkZSAidGNwLmgiCiAjZW5kaWYKICNpbmNsdWRlICJ1ZHAuaCIKICNpbmNsdWRlICJ1ZHBUYWJsZS5oIgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKIAogI2lmZGVmIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwKICNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CkBAIC0zNyw3ICszNywxMCBAQAogI2RlZmluZSBVRFBfU1RBVFNfQ0FDSEVfVElNRU9VVAlNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpKSAmJiAhZGVmaW5lZChGSVJTVF9QUk9UT0NPTCkKKyNpZiBkZWZpbmVkKEhBVkVfTElCUEVSRlNUQVRfSCkgJiYgKGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykpICYmICFkZWZpbmVkKEZJUlNUX1BST1RPQ09MKQorI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogI2lmZGVmIEZJUlNUX1BST1RPQ09MCiBwZXJmc3RhdF9wcm90b2NvbF90IHBzX3Byb3RvOwpAQCAtMTM4LDcgKzE0MSw3IEBACiAjdW5kZWYgVURQX05TVEFUUwogI2VuZGlmCiAKLSNpZmRlZiBXSU4zMgorI2lmZGVmIEhBVkVfSVBITFBBUElfSAogI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAjZGVmaW5lIFVEUF9TVEFUX1NUUlVDVFVSRSBNSUJfVURQU1RBVFMKICNlbmRpZgpAQCAtMjM1LDcgKzIzOCw3IEBACiAjZGVmaW5lIHVkcHN0YXQgICAgICAgICAgdWRwc3RhdC51ZHBzdGF0CiAjZW5kaWYKICAgICBjYXNlIFVEUElOREFUQUdSQU1TOgotI2lmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0lQQUNLRVRTCisjaWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0lQQUNLRVRTCiAgICAgICAgIHJldF92YWx1ZSA9IHVkcHN0YXQudWRwc19pcGFja2V0czsKICAgICAgICAgYnJlYWs7CiAjZWxzZQpAQCAtMjQ0LDcgKzI0Nyw3IEBACiAjZW5kaWYKIAogICAgIGNhc2UgVURQTk9QT1JUUzoKLSNpZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlQKKyNpZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUCiAgICAgICAgIHJldF92YWx1ZSA9IHVkcHN0YXQudWRwc19ub3BvcnQ7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTI1Myw3ICsyNTYsNyBAQAogI2VuZGlmCiAKICAgICBjYXNlIFVEUE9VVERBVEFHUkFNUzoKLSNpZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19PUEFDS0VUUworI2lmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19PUEFDS0VUUwogICAgICAgICByZXRfdmFsdWUgPSB1ZHBzdGF0LnVkcHNfb3BhY2tldHM7CiAgICAgICAgIGJyZWFrOwogI2Vsc2UKQEAgLTI2MywxMCArMjY2LDEwIEBACiAKICAgICBjYXNlIFVEUElORVJST1JTOgogICAgICAgICByZXRfdmFsdWUgPSB1ZHBzdGF0LnVkcHNfaGRyb3BzICsgdWRwc3RhdC51ZHBzX2JhZHN1bSArCi0jaWZkZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRElTQ0FSRAorI2lmZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19ESVNDQVJECiAgICAgICAgICAgICB1ZHBzdGF0LnVkcHNfZGlzY2FyZCArCiAjZW5kaWYKLSNpZmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19GVUxMU09DSworI2lmZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19GVUxMU09DSwogICAgICAgICAgICAgdWRwc3RhdC51ZHBzX2Z1bGxzb2NrICsKICNlbmRpZgogICAgICAgICAgICAgdWRwc3RhdC51ZHBzX2JhZGxlbjsKQEAgLTMyNiw2ICszMjksNyBAQAogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKQEAgLTMzNSw2ICszMzksNyBAQAogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIm1pYklJL3VkcDogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS91ZHA6IFVucmVjb2duaXNlZCBtb2RlICglZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHAuaCBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5oCmluZGV4IDA4MTZmMDEuLjlkNDY3MWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcC5oCkBAIC02LDcgKzYsNyBAQAogI2RlZmluZSBfTUlCR1JPVVBfVURQX0gKIAogCi1jb25maWdfcmVxdWlyZShtaWJJSS91ZHBUYWJsZSB1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUobWliSUkvdWRwVGFibGUpCiAKIGNvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsICAgICAgICBrZXJuZWxfc3Vub3M1KQogY29uZmlnX2FyY2hfcmVxdWlyZShsaW51eCwgICAgIG1pYklJL2tlcm5lbF9saW51eCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5jCmluZGV4IDU3ZTk2N2MuLjJjODg3NDkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuYwpAQCAtMzMsNyArMzMsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSAidWRwLmgiCiAjaW5jbHVkZSAidWRwVGFibGUuaCIKLSNpbmNsdWRlICJzeXNPUlRhYmxlLmgiCiAKICNpZmRlZiBocHV4MTEKICNkZWZpbmUJVURQVEFCTEVfRU5UUllfVFlQRQltaWJfdWRwTHNuRW50IApAQCAtNTQsNyArNTMsNyBAQAogI2RlZmluZQlVRFBUQUJMRV9JU19MSU5LRURfTElTVAogI2Vsc2UKIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCisjaWZkZWYgSEFWRV9JUEhMUEFQSV9ICiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KICNkZWZpbmUJVURQVEFCTEVfRU5UUllfVFlQRQlNSUJfVURQUk9XCQkvKiA/Pz8gKi8KICNkZWZpbmUJVURQVEFCTEVfTE9DQUxBRERSRVNTCWR3TG9jYWxBZGRyCkBAIC0xMzAsNyArMTI5LDcgQEAKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAgICAgICAgICAgKmlpbmZvOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZ2luZm87Ci0gICAgaW50IHJjOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjOwogCiAgICAgREVCVUdNU0dUTCgoIm1pYklJL3VkcFRhYmxlIiwgIkluaXRpYWxpc2luZyBVRFAgVGFibGVcbiIpKTsKICAgICAvKgpAQCAtMTUxLDYgKzE1MCw3IEBACiAgICAgICovCiAgICAgaWluZm8gICAgICA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9pdGVyYXRvcl9pbmZvKTsKICAgICBpZiAoIWlpbmZvKSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpaW5mby0+Z2V0X2ZpcnN0X2RhdGFfcG9pbnQgPSB1ZHBUYWJsZV9maXJzdF9lbnRyeTsKQEAgLTE2OCw3ICsxNjgsNyBAQAogICAgICAgICAgICAgdWRwVGFibGVfaGFuZGxlciwKICAgICAgICAgICAgIHVkcFRhYmxlX29pZCwgT0lEX0xFTkdUSCh1ZHBUYWJsZV9vaWQpLAogICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpLAotICAgIHJjID0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcihyZWdpbmZvLCBpaW5mbyk7CisgICAgcmMgPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihyZWdpbmZvLCBpaW5mbyk7CiAgICAgaWYgKHJjICE9IFNOTVBFUlJfU1VDQ0VTUykKICAgICAgICAgcmV0dXJuOwogCkBAIC0yMzksMTIgKzIzOSwxNCBAQAogCiAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CiAgICAgY2FzZSBNT0RFX0dFVEJVTEs6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CiAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJtaWJJSS91ZHBUYWJsZTogVW5zdXBwb3J0ZWQgbW9kZSAoJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKQEAgLTM0OSw3ICszNTEsNyBAQAogICAgICAqIFhYWCAtIEhvdyBjYW4gd2UgdGVsbCBpZiB0aGUgY2FjaGUgaXMgdmFsaWQ/CiAgICAgICogICAgICAgTm8gYWNjZXNzIHRvICdyZXFpbmZvJwogICAgICAqLwotICAgIGlmICh1ZHBfaGVhZCA9PSAwKQorICAgIGlmICh1ZHBfaGVhZCA9PSBOVUxMKQogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCkBAIC00NzgsNyArNDgwLDcgQEAKIAogICAgIGlmICghKGluID0gZm9wZW4oIi9wcm9jL25ldC91ZHAiLCAiciIpKSkgewogICAgICAgICBERUJVR01TR1RMKCgibWliSUkvdWRwVGFibGUiLCAiRmFpbGVkIHRvIGxvYWQgVURQIFRhYmxlIChsaW51eClcbiIpKTsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvdWRwIC4uLlxuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgInNubXBkOiBjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvdWRwIC4uLlxuIikpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdWRwVGFibGUuaAppbmRleCAyYzYxY2RhLi5mOWFmZDVhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS91ZHBUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VkcFRhYmxlLmgKQEAgLTYsNyArNiw3IEBACiAjZGVmaW5lIF9NSUJHUk9VUF9VRFBUQUJMRV9ICiAKIGNvbmZpZ19hcmNoX3JlcXVpcmUoc29sYXJpczIsIGtlcm5lbF9zdW5vczUpCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzIG1pYklJL2lwKQorY29uZmlnX3JlcXVpcmUobWliSUkvaXApCiAKIGV4dGVybiB2b2lkICAgICBpbml0X3VkcFRhYmxlKHZvaWQpOwogZXh0ZXJuIE5ldHNubXBfTm9kZV9IYW5kbGVyIHVkcFRhYmxlX2hhbmRsZXI7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4ZWEyOQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuYwpAQCAtMCwwICsxLDQ1IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCitzdGF0aWMgaW50CitoYW5kbGVfdXBkYXRlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICBpbnQgKnNldCA9IChpbnQqKWhhbmRsZXItPm15dm9pZDsKKworICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX1JFU0VSVkUxICYmICpzZXQgPCAwKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX0VSUl9OT1RXUklUQUJMRSk7CisgICAgZWxzZSBpZiAocmVxaW5mby0+bW9kZSA9PSBNT0RFX1NFVF9DT01NSVQpIHsKKyAgICAgICAgKnNldCA9IDE7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKHJlZ2luZm8tPmhhbmRsZXJOYW1lKTsKKyAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qCituZXRzbm1wX2NyZWF0ZV91cGRhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgY29uc3QgY2hhciogbmFtZSwgY29uc3Qgb2lkKiBpZCwgc2l6ZV90IGlkbGVuLCBpbnQgbW9kZSwgaW50KiBzZXQpCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVzOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhuZDsKKworICAgIGhuZCA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXIoInVwZGF0ZSIsIGhhbmRsZV91cGRhdGVzKTsKKyAgICBpZiAoaG5kID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaG5kLT5mbGFncyB8PSBNSUJfSEFORExFUl9BVVRPX05FWFQ7CisgICAgaG5kLT5teXZvaWQgPSBzZXQ7CisKKyAgICByZXMgPSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NyZWF0ZShuYW1lLCBobmQsIGlkLCBpZGxlbiwgbW9kZSk7CisgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhuZCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiByZXM7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmggYi9hZ2VudC9taWJncm91cC9taWJJSS91cGRhdGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQxNGUzMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3VwZGF0ZXMuaApAQCAtMCwwICsxLDE2IEBACisjaWZuZGVmIFVQREFURVNfSAorI2RlZmluZSBVUERBVEVTX0gKKworLyoqCisgKiBDcmVhdGUgYSBoYW5kbGVyX3JlZ2lzdHJhdGlvbiB0aGF0IGNoZWNrcyAqc2V0IHRvIGRldGVybWluZSBob3cgdG8gcHJvY2VlZGUsCisgKiBpZiAqc2V0IGlzIGxlc3MgdGhhbiAwIHRoZW4gdGhlIG9iamVjdCBpcyBub253cml0ZWFibGUsIG90aGVyd2lzZSwgKnNldCBpcworICogc2V0IHRvIDEgaW4gdGhlIGNvbW1pdCBwaGFzZS4gQWxsIG90aGVyIHBhcmFtZXRlcnMgYXJlIGFzIGluCisgKiBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4KKyAqLworCitleHRlcm4gbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbioKK25ldHNubXBfY3JlYXRlX3VwZGF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbihjb25zdCBjaGFyKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCogaWQsIHNpemVfdCBpZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbW9kZSwgaW50KiBzZXQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5jIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMKaW5kZXggN2Q3OGExZi4uZjJmYWY4NiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMKQEAgLTQwLDM0ICs0MCwxMiBAQAogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CiAjaW5jbHVkZSAidmFjbV9jb25mLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgInN5c09SVGFibGUuaCIKLSNlbmRpZgogCiAjaW5jbHVkZSAic25tcGQuaCIKIApAQCAtODgsMTQgKzY2LDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5hbWUgY29udGV4dCBtb2RlbCBsZXZlbCBwcmVmaXggdmlld25hbWUgdmlld3ZhbCIpOwogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ2aWV3IiwgdmFjbV9wYXJzZV92aWV3LCB2YWNtX2ZyZWVfdmlldywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmFtZSB0eXBlIHN1YnRyZWUgW21hc2tdIik7Ci0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInZhY21WaWV3IiwgdmFjbV9wYXJzZV9jb25maWdfdmlldywgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKLSAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidmFjbUdyb3VwIiwgdmFjbV9wYXJzZV9jb25maWdfZ3JvdXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInZhY21BY2Nlc3MiLCB2YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInZhY21BdXRoQWNjZXNzIiwgdmFjbV9wYXJzZV9jb25maWdfYXV0aF9hY2Nlc3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgc25tcGRfcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoInZhY21WaWV3IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ192aWV3LCBOVUxMLCBOVUxMKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigidmFjbUdyb3VwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19ncm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKKyAgICBzbm1wZF9yZWdpc3Rlcl9jb25zdF9jb25maWdfaGFuZGxlcigidmFjbUFjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCJ2YWNtQXV0aEFjY2VzcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfYXV0aF9hY2Nlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CiAKICAgICAvKiBlYXN5IGNvbW11bml0eSBhdXRoIGhhbmRsZXIgKi8KICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigiYXV0aGNvbW11bml0eSIsCkBAIC0xMTksNyArMTAwLDcgQEAKICAgICAgKiBEZWZpbmUgc3RhbmRhcmQgdmlld3MgIl9hbGxfIiBhbmQgIl9ub25lXyIKICAgICAgKi8KICAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfUE9TVF9QUkVNSUJfUkVBRF9DT05GSUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1BSRV9SRUFEX0NPTkZJRywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhY21fc3RhbmRhcmRfdmlld3MsIE5VTEwpOwogICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19QT1NUX1JFQURfQ09ORklHLApAQCAtMTc0LDI0ICsxNTUsMjQgQEAKIHZvaWQKIHZhY21fcGFyc2VfZ3JvdXAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKQogewotICAgIGNoYXIgICAgICAgICAgICpncm91cCwgKm1vZGVsLCAqc2VjdXJpdHk7CisgICAgY2hhciAgICAgICAgICAgIGdyb3VwW1ZBQ01TVFJJTkdMRU5dLCBtb2RlbFtWQUNNU1RSSU5HTEVOXSwgc2VjdXJpdHlbVkFDTVNUUklOR0xFTl07CiAgICAgaW50ICAgICAgICAgICAgIGltb2RlbDsKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICpncCA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgKnN0OwogCi0gICAgZ3JvdXAgPSBzdHJ0b2tfcihwYXJhbSwgIiBcdFxuIiwgJnN0KTsKLSAgICBtb2RlbCA9IHN0cnRva19yKE5VTEwsICIgXHRcbiIsICZzdCk7Ci0gICAgc2VjdXJpdHkgPSBzdHJ0b2tfcihOVUxMLCAiIFx0XG4iLCAmc3QpOworICAgIHN0ID0gY29weV9ud29yZChwYXJhbSwgZ3JvdXAsIHNpemVvZihncm91cCktMSk7CisgICAgc3QgPSBjb3B5X253b3JkKHN0LCBtb2RlbCwgc2l6ZW9mKG1vZGVsKS0xKTsKKyAgICBzdCA9IGNvcHlfbndvcmQoc3QsIHNlY3VyaXR5LCBzaXplb2Yoc2VjdXJpdHkpLTEpOwogCi0gICAgaWYgKGdyb3VwID09IE5VTEwgfHwgKmdyb3VwID09IDApIHsKKyAgICBpZiAoZ3JvdXBbMF0gPT0gMCkgewogICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIEdST1VQIHBhcmFtZXRlciIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGlmIChtb2RlbCA9PSBOVUxMIHx8ICptb2RlbCA9PSAwKSB7CisgICAgaWYgKG1vZGVsWzBdID09IDApIHsKICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBNT0RFTCBwYXJhbWV0ZXIiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBpZiAoc2VjdXJpdHkgPT0gTlVMTCB8fCAqc2VjdXJpdHkgPT0gMCkgeworICAgIGlmIChzZWN1cml0eVswXSA9PSAwKSB7CiAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgU0VDVVJJVFkgcGFyYW1ldGVyIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0yNzAsNyArMjUxLDcgQEAKICAgICAgICAgcmV0dXJuIFBBUlNFX0ZBSUw7CiAgICAgfQogCi0gICAgaWYgKHN0cmNtcCgqY29udGV4dCwgIlwiXCIiKSA9PSAwKQorICAgIGlmIChzdHJjbXAoKmNvbnRleHQsICJcIlwiIikgPT0gMCB8fCBzdHJjbXAoKmNvbnRleHQsICJcJ1wnIikgPT0gMCkKICAgICAgICAgKipjb250ZXh0ID0gMDsKICAgICBpZiAoc3RyY2FzZWNtcChtb2RlbCwgImFueSIpID09IDApCiAgICAgICAgICppbW9kZWwgPSBTTk1QX1NFQ19NT0RFTF9BTlk7CkBAIC02NDMsNyArNjI0LDcgQEAKICAgICBzaXplX3QgICAgICAgICAgc3Vib2lkX2xlbiA9IDA7CiAgICAgc2l6ZV90ICAgICAgICAgIG1hc2tfbGVuID0gMDsKICAgICB1X2NoYXIgICAgICAgICAgdmlld01hc2tbVkFDTVNUUklOR0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgIGk7CisgICAgc2l6ZV90ICAgICAgICAgIGk7CiAgICAgY2hhciAgICAgICAgICAgICpzdDsKIAogICAgIG5hbWUgPSBzdHJ0b2tfcihwYXJhbSwgIiBcdFxuIiwgJnN0KTsKQEAgLTY4MCw3ICs2NjEsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtYXNrKSB7Ci0gICAgICAgIGludCAgICAgICAgICAgICB2YWw7CisgICAgICAgIHVuc2lnbmVkIGludCB2YWw7CiAgICAgICAgIGkgPSAwOwogICAgICAgICBmb3IgKG1hc2sgPSBzdHJ0b2tfcihtYXNrLCAiIC46IiwgJnN0KTsgbWFzazsgbWFzayA9IHN0cnRva19yKE5VTEwsICIgLjoiLCAmc3QpKSB7CiAgICAgICAgICAgICBpZiAoaSA+PSBzaXplb2Yodmlld01hc2spKSB7CkBAIC05NjIsNiArOTQzLDcgQEAKICAgICBjb21tY291bnQrKzsKIAogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUF9ET01BSU4KICAgICBpZiAocGFyc2V0eXBlID09IFZBQ01fQ1JFQVRFX1NJTVBMRV9DT01JUFY0IHx8CiAgICAgICAgIHBhcnNldHlwZSA9PSBWQUNNX0NSRUFURV9TSU1QTEVfQ09NKSB7CiAgICAgICAgIHZhY21fZ2VuX2NvbTJzZWMoY29tbWNvdW50LCBjb21tdW5pdHksIGFkZHJlc3NuYW1lLApAQCAtOTY5LDEzICs5NTEsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNuYW1lLCBzaXplb2Yoc2VjbmFtZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgdmlld19wdHIsIHNpemVvZih2aWV3bmFtZSksIGNvbW12ZXJzaW9uLCBjb250ZXh0KTsKICAgICB9Ci0gICAgCisjZW5kaWYKKwogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCiAgICAgaWYgKHBhcnNldHlwZSA9PSBWQUNNX0NSRUFURV9TSU1QTEVfQ09NVU5JWCB8fAogICAgICAgICBwYXJzZXR5cGUgPT0gVkFDTV9DUkVBVEVfU0lNUExFX0NPTSkgewotICAgICAgICBpZiAoY29udGV4dCAmJiAqY29udGV4dCkKLSAgICAgICAgICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwgIi1DbiAlcyAlcyAlcyAnJXMnIiwKLSAgICAgICAgICAgICAgICAgY29udGV4dCwgc2VjbmFtZSwgYWRkcmVzc25hbWUsIGNvbW11bml0eSk7CisgICAgICAgIGlmICggKmNvbnRleHQgKQorICAgICAgICAgICBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICItQ24gJXMgJXMgJXMgJyVzJyIsCisgICAgICAgICAgICAgY29udGV4dCwgc2VjbmFtZSwgYWRkcmVzc25hbWUsIGNvbW11bml0eSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwgIiVzICVzICclcyciLAogICAgICAgICAgICAgICAgICBzZWNuYW1lLCBhZGRyZXNzbmFtZSwgY29tbXVuaXR5KTsKQEAgLTEwMTQsMTAgKzk5NywxMCBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBzbnByaW50ZihncnBuYW1lLCBzaXplb2YoZ3JwbmFtZSksICJncnAlLjI4cyIsIHNlY25hbWUpOwogICAgICAgICAgICAgZm9yICh0bXA9Z3JwbmFtZTsgKnRtcDsgdG1wKyspCi0gICAgICAgICAgICAgICAgaWYgKCFpc2FsbnVtKCp0bXApKQorICAgICAgICAgICAgICAgIGlmICghaXNhbG51bSgodW5zaWduZWQgY2hhcikoKnRtcCkpKQogICAgICAgICAgICAgICAgICAgICAqdG1wID0gJ18nOwogICAgICAgICAgICAgc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLAotICAgICAgICAgICAgICAgICAgICAgIiVzICVzICVzIiwgZ3JwbmFtZSwgbW9kZWwsIHNlY25hbWUpOworICAgICAgICAgICAgICAgICAgICAgIiVzICVzIFwiJXNcIiIsIGdycG5hbWUsIG1vZGVsLCBzZWNuYW1lKTsKICAgICAgICAgICAgIGxpbmVbIHNpemVvZihsaW5lKS0xIF0gPSAwOwogICAgICAgICAgICAgREVCVUdNU0dUTCgodG9rZW4sICJwYXNzaW5nOiAlcyAlc1xuIiwgImdyb3VwIiwgbGluZSkpOwogICAgICAgICAgICAgdmFjbV9wYXJzZV9ncm91cCgiZ3JvdXAiLCBsaW5lKTsKQEAgLTEwMjUsNyArMTAwOCw3IEBACiAgICAgfSBlbHNlIHsKICAgICAgICAgc25wcmludGYoZ3JwbmFtZSwgc2l6ZW9mKGdycG5hbWUpLCAiZ3JwJS4yOHMiLCBzZWNuYW1lKTsKICAgICAgICAgZm9yICh0bXA9Z3JwbmFtZTsgKnRtcDsgdG1wKyspCi0gICAgICAgICAgICBpZiAoIWlzYWxudW0oKnRtcCkpCisgICAgICAgICAgICBpZiAoIWlzYWxudW0oKHVuc2lnbmVkIGNoYXIpKCp0bXApKSkKICAgICAgICAgICAgICAgICAqdG1wID0gJ18nOwogICAgIH0KIApAQCAtMTIxOCw5ICsxMjAxLDExIEBACiAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgogICAgICAgICB2aWV3dHlwZSA9IFZBQ01fVklFV19SRUFEOwogICAgICAgICBicmVhazsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QX01TR19TRVQ6CiAgICAgICAgIHZpZXd0eXBlID0gVkFDTV9WSUVXX1dSSVRFOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgY2FzZSBTTk1QX01TR19UUkFQOgogICAgIGNhc2UgU05NUF9NU0dfVFJBUDI6CiAgICAgY2FzZSBTTk1QX01TR19JTkZPUk06CkBAIC0xMjYyLDEyICsxMjQ3LDIwIEBACiB2YWNtX2NoZWNrX3ZpZXcobmV0c25tcF9wZHUgKnBkdSwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVsZW4sCiAgICAgICAgICAgICAgICAgaW50IGNoZWNrX3N1YnRyZWUsIGludCB2aWV3dHlwZSkKIHsKKyAgICByZXR1cm4gdmFjbV9jaGVja192aWV3X2NvbnRlbnRzKHBkdSwgbmFtZSwgbmFtZWxlbiwgY2hlY2tfc3VidHJlZSwgdmlld3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUNNX0NIRUNLX1ZJRVdfQ09OVEVOVFNfTk9fRkxBR1MpOworfQorCitpbnQKK3ZhY21fY2hlY2tfdmlld19jb250ZW50cyhuZXRzbm1wX3BkdSAqcGR1LCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZWxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY2hlY2tfc3VidHJlZSwgaW50IHZpZXd0eXBlLCBpbnQgZmxhZ3MpCit7CiAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKmFwOwogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKmdwOwogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdnA7CiAgICAgY2hhciAgICAgICAgICAgIHZhY21fZGVmYXVsdF9jb250ZXh0WzFdID0gIiI7Ci0gICAgY2hhciAgICAgICAgICAgKmNvbnRleHROYW1lID0gdmFjbV9kZWZhdWx0X2NvbnRleHQ7Ci0gICAgY2hhciAgICAgICAgICAgKnNuID0gTlVMTDsKKyAgICBjb25zdCBjaGFyICAgICAqY29udGV4dE5hbWUgPSB2YWNtX2RlZmF1bHRfY29udGV4dDsKKyAgICBjb25zdCBjaGFyICAgICAqc24gPSBOVUxMOwogICAgIGNoYXIgICAgICAgICAgICp2bjsKICAgICBjb25zdCBjaGFyICAgICAqcGR1X2NvbW11bml0eTsKIApAQCAtMTMxNCw3ICsxMzA3LDkgQEAKICAgICAgICAgICogY29tbXVuaXR5IHN0cmluZyB0byBhIHNlY3VyaXR5IG5hbWUgZm9yIHVzLiAgCiAgICAgICAgICAqLwogCi0gICAgICAgIGlmIChwZHUtPnREb21haW4gPT0gbmV0c25tcFVEUERvbWFpbgorICAgICAgICBpZiAoMCkgeworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUF9ET01BSU4KKyAgICAgICAgfSBlbHNlIGlmIChwZHUtPnREb21haW4gPT0gbmV0c25tcFVEUERvbWFpbgogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KICAgICAgICAgICAgIHx8IHBkdS0+dERvbWFpbiA9PSBuZXRzbm1wX3NubXBUQ1BEb21haW4KICNlbmRpZgpAQCAtMTMzMyw2ICsxMzI4LDcgQEAKICAgICAgICAgICAgIFNOTVBfRlJFRShwZHUtPmNvbnRleHROYW1lKTsKICAgICAgICAgICAgIHBkdS0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOwogICAgICAgICAgICAgcGR1LT5jb250ZXh0TmFtZUxlbiA9IHN0cmxlbihjb250ZXh0TmFtZSk7CisjZW5kaWYKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgogICAgICAgICB9IGVsc2UgaWYgKHBkdS0+dERvbWFpbiA9PSBuZXRzbm1wX1VEUElQdjZEb21haW4KICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgpAQCAtMTQyMSw3ICsxNDE3LDggQEAKICAgICAgICAgY29udGV4dE5hbWVJbmRleFswXSA9ICdcMCc7CiAKICAgICBjb250ZXh0TmFtZUluZGV4W3BkdS0+Y29udGV4dE5hbWVMZW5dID0gJ1wwJzsKLSAgICBpZiAoIW5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnRleHROYW1lSW5kZXgpKSB7CisgICAgaWYgKCEoZmxhZ3MgJiBWQUNNX0NIRUNLX1ZJRVdfQ09OVEVOVFNfRE5FX0NPTlRFWFRfT0spICYmCisgICAgICAgICFuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdChjb250ZXh0TmFtZUluZGV4KSkgewogICAgICAgICAvKgogICAgICAgICAgKiByZmMgMzQxNSBzZWN0aW9uIDMuMiwgc3RlcCAxCiAgICAgICAgICAqIG5vIHN1Y2ggY29udGV4dCBoZXJlOyByZXR1cm4gbm8gc3VjaCBjb250ZXh0IGVycm9yIApAQCAtMTQ0Nyw3ICsxNDQ0LDcgQEAKICAgICAgICAgcmV0dXJuIFZBQ01fTk9BQ0NFU1M7CiAgICAgfQogCi0gICAgaWYgKG5hbWUgPT0gMCkgeyAgICAgICAgICAgIC8qIG9ubHkgY2hlY2sgdGhlIHNldHVwIG9mIHRoZSB2YWNtIGZvciB0aGUgcmVxdWVzdCAqLworICAgIGlmIChuYW1lID09IE5VTEwpIHsgLyogb25seSBjaGVjayB0aGUgc2V0dXAgb2YgdGhlIHZhY20gZm9yIHRoZSByZXF1ZXN0ICovCiAgICAgICAgIERFQlVHTVNHKCgibWliSUkvdmFjbV92YXJzIiwgIiwgRG9uZSBjaGVja2luZyBzZXR1cFxuIikpOwogICAgICAgICByZXR1cm4gVkFDTV9TVUNDRVNTOwogICAgIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKaW5kZXggOGUxNTk3OC4uNzg2NGNlMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKQEAgLTcsNyArNyw2IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3ZhY20uaD4KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKIGNvbmZpZ19iZWxvbmdzX2luKGFnZW50X21vZHVsZSkKIAogI2RlZmluZSBWQUNNX0NSRUFURV9TSU1QTEVfVjMgICAgICAgMQpAQCAtNDMsNSArNDIsMTAgQEAKIAogICAgICBpbnQgICAgICAgICAgICAgdmFjbV9pbl92aWV3KG5ldHNubXBfcGR1ICosIG9pZCAqLCBzaXplX3QsIGludCk7CiAgICAgIGludCAgICAgICAgICAgICB2YWNtX2NoZWNrX3ZpZXcobmV0c25tcF9wZHUgKiwgb2lkICosIHNpemVfdCwgaW50LCBpbnQpOworICAgICBpbnQgICAgICAgICAgICAgdmFjbV9jaGVja192aWV3X2NvbnRlbnRzKG5ldHNubXBfcGR1ICosIG9pZCAqLCBzaXplX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQsIGludCk7CisKKyNkZWZpbmUgVkFDTV9DSEVDS19WSUVXX0NPTlRFTlRTX05PX0ZMQUdTICAgICAgICAwCisjZGVmaW5lIFZBQ01fQ0hFQ0tfVklFV19DT05URU5UU19ETkVfQ09OVEVYVF9PSyAgMQogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9WQUNNX0NPTkZfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb250ZXh0LmMgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYwppbmRleCBjNDc0MTgwLi44ZjQzY2QzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbnRleHQuYwpAQCAtMTA1LDcgKzEwNSw3IEBACiAgICAgaWluZm8tPmdldF9maXJzdF9kYXRhX3BvaW50ID0gZ2V0X2ZpcnN0X2NvbnRleHQ7CiAgICAgaWluZm8tPmdldF9uZXh0X2RhdGFfcG9pbnQgPSBnZXRfbmV4dF9jb250ZXh0OwogICAgIGlpbmZvLT50YWJsZV9yZWdpbmZvID0gdGFibGVfaW5mbzsKLSAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG15X2hhbmRsZXIsIGlpbmZvKTsKKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yMihteV9oYW5kbGVyLCBpaW5mbyk7CiB9CiAKIC8qCkBAIC0xNDksNyArMTQ5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oY29udGV4dF9wdHItPmNvbnRleHRfbmFtZSkpOwogCiAgICAgICAgICAgICBicmVhazsKLQogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSwgZ2V0bmV4dCBhbHJlYWR5IGhhdmUgYmVlbgpAQCAtMTU5LDggKzE1OCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAidmFjbV9jb250ZXh0IHRhYmxlIGFjY2Vzc2VkIGFzIG1vZGU9JWQuICBXZSdyZSBpbXByb3Blcmx5IHJlZ2lzdGVyZWQhIiwKICAgICAgICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpOwogICAgICAgICAgICAgYnJlYWs7Ci0KLQogICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuYyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jCmluZGV4IDA5MzdmYzUuLjg1Y2VmOTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jCisrKyBiL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fdmFycy5jCkBAIC00MCwyNCArNDAsMTcgQEAKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KICNpbmNsdWRlICJ2YWNtX3ZhcnMuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCi0jaWZkZWYgVVNJTkdfTUlCSUlfU1lTT1JUQUJMRV9NT0RVTEUKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTY2LDQxICs1OSw1MiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaW5jbHVkZSAic3lzT1JUYWJsZS5oIgotI2VuZGlmCisKIHN0YXRpYyB1bnNpZ25lZCBpbnQgdmFjbVZpZXdTcGluTG9jayA9IDA7CiAKIHZvaWQKIGluaXRfdmFjbV92YXJzKHZvaWQpCiB7CiAKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotICAgIHN0YXRpYyBvaWQgICAgICByZWdbXSA9IHsgU05NUF9PSURfU05NUE1PRFVMRVMsIDE2LCAyLCAyLCAxIH07Ci0jZW5kaWYKKyAgICBvaWQgICAgICByZWdbXSA9IHsgU05NUF9PSURfU05NUE1PRFVMRVMsIDE2LCAyLCAyLCAxIH07CiAKICNkZWZpbmUgUFJJVlJXCShORVRTTk1QX1NOTVBWMkFOWSB8IDB4NTAwMCkKIAogICAgIHN0cnVjdCB2YXJpYWJsZTEgdmFjbV9zZWMyZ3JvdXBbXSA9IHsKLSAgICAgICAge1NFQ1VSSVRZR1JPVVAsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3ZhY21fc2VjMmdyb3VwLCAxLCB7M319LAotICAgICAgICB7U0VDVVJJVFlTVE9SQUdFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV9zZWMyZ3JvdXAsIDEsIHs0fX0sCi0gICAgICAgIHtTRUNVUklUWVNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fc2VjMmdyb3VwLCAxLCB7NX19LAorICAgICAgICB7U0VDVVJJVFlHUk9VUCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fc2VjMmdyb3VwLCAxLCB7M319LAorICAgICAgICB7U0VDVVJJVFlTVE9SQUdFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fc2VjMmdyb3VwLCAxLCB7NH19LAorICAgICAgICB7U0VDVVJJVFlTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV9zZWMyZ3JvdXAsIDEsIHs1fX0sCiAgICAgfTsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTEgdmFjbV9hY2Nlc3NbXSA9IHsKLSAgICAgICAge0FDQ0VTU01BVENILCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs0fX0sCi0gICAgICAgIHtBQ0NFU1NSRUFELCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl92YWNtX2FjY2VzcywgMSwgezV9fSwKLSAgICAgICAge0FDQ0VTU1dSSVRFLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl92YWNtX2FjY2VzcywgMSwgezZ9fSwKLSAgICAgICAge0FDQ0VTU05PVElGWSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs3fX0sCi0gICAgICAgIHtBQ0NFU1NTVE9SQUdFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdmFjbV9hY2Nlc3MsIDEsIHs4fX0sCi0gICAgICAgIHtBQ0NFU1NTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX2FjY2VzcywgMSwgezl9fSwKKyAgICAgICAge0FDQ0VTU01BVENILCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fYWNjZXNzLCAxLCB7NH19LAorICAgICAgICB7QUNDRVNTUkVBRCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fYWNjZXNzLCAxLCB7NX19LAorICAgICAgICB7QUNDRVNTV1JJVEUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX2FjY2VzcywgMSwgezZ9fSwKKyAgICAgICAge0FDQ0VTU05PVElGWSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fYWNjZXNzLCAxLCB7N319LAorICAgICAgICB7QUNDRVNTU1RPUkFHRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX2FjY2VzcywgMSwgezh9fSwKKyAgICAgICAge0FDQ0VTU1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX2FjY2VzcywgMSwgezl9fSwKICAgICB9OwogCiAgICAgc3RydWN0IHZhcmlhYmxlMyB2YWNtX3ZpZXdbXSA9IHsKLSAgICAgICAge1ZBQ01WSUVXU1BJTkxPQ0ssIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX3ZpZXcsIDEsIHsxfX0sCi0gICAgICAgIHtWSUVXTUFTSywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgM319LAotICAgICAgICB7VklFV1RZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCA0fX0sCi0gICAgICAgIHtWSUVXU1RPUkFHRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3ZhY21fdmlldywgMywgezIsIDEsIDV9fSwKLSAgICAgICAge1ZJRVdTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCA2fX0sCisgICAgICAgIHtWQUNNVklFV1NQSU5MT0NLLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX3ZhY21fdmlldywgMSwgezF9fSwKKyAgICAgICAge1ZJRVdNQVNLLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgM319LAorICAgICAgICB7VklFV1RZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgNH19LAorICAgICAgICB7VklFV1NUT1JBR0UsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfdmFjbV92aWV3LCAzLCB7MiwgMSwgNX19LAorICAgICAgICB7VklFV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl92YWNtX3ZpZXcsIDMsIHsyLCAxLCA2fX0sCiAgICAgfTsKIAogICAgIC8qCkBAIC0xMjYsMTEgKzEzMCw3IEBACiAgICAgICAgICAgICAgICAgIHZhY21fYWNjZXNzX29pZCk7CiAgICAgUkVHSVNURVJfTUlCKCJtaWJJSS92YWNtOnZpZXciLCB2YWNtX3ZpZXcsIHZhcmlhYmxlMywgdmFjbV92aWV3X29pZCk7CiAKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotICAgIHJlZ2lzdGVyX3N5c09SVGFibGUocmVnLCAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJWaWV3LWJhc2VkIEFjY2VzcyBDb250cm9sIE1vZGVsIGZvciBTTk1QLiIpOwotI2VuZGlmCi0KKyAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShyZWcsICJWaWV3LWJhc2VkIEFjY2VzcyBDb250cm9sIE1vZGVsIGZvciBTTk1QLiIpOwogfQogCiAKQEAgLTE0NCw3ICsxNDQsNyBAQAogewogICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKmdwOwogICAgIG9pZCAgICAgICAgICAgICpncm91cFN1YnRyZWU7Ci0gICAgaW50ICAgICAgICAgICAgIGdyb3VwU3VidHJlZUxlbjsKKyAgICBzc2l6ZV90ICAgICAgICAgZ3JvdXBTdWJ0cmVlTGVuOwogICAgIGludCAgICAgICAgICAgICBzZWNtb2RlbDsKICAgICBjaGFyICAgICAgICAgICAgc2VjbmFtZVtWQUNNU1RSSU5HTEVOXSwgKmNwOwogCkBAIC0xNTYsNiArMTU2LDcgQEAKICAgICAgKi8KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICBjYXNlIFNFQ1VSSVRZR1JPVVA6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV92YWNtR3JvdXBOYW1lOwogICAgICAgICBicmVhazsKQEAgLTE2NSwxMCArMTY2LDEzIEBACiAgICAgY2FzZSBTRUNVUklUWVNUQVRVUzoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3ZhY21TZWN1cml0eVRvR3JvdXBTdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQogCisJKnZhcl9sZW4gPSAwOyAvKiBhc3N1bWUgMCBsZW5ndGggdW50aWwgZm91bmQgKi8KKwogICAgIGlmIChtZW1jbXAobmFtZSwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogdnAtPm5hbWVsZW4pICE9IDApIHsKICAgICAgICAgbWVtY3B5KG5hbWUsIHZwLT5uYW1lLCBzaXplb2Yob2lkKSAqIHZwLT5uYW1lbGVuKTsKICAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuOwpAQCAtMTgxLDEzICsxODUsMTMgQEAKICAgICAgICAgZ3JvdXBTdWJ0cmVlID0gbmFtZSArIDEzOwogICAgICAgICBncm91cFN1YnRyZWVMZW4gPSAqbGVuZ3RoIC0gMTM7CiAgICAgICAgIGlmICggbmFtZVsxMl0gIT0gZ3JvdXBTdWJ0cmVlTGVuICkKLSAgICAgICAgICAgIHJldHVybiAwOwkJLyogRWl0aGVyIGV4dHJhIHN1Ymlkcywgb3IgYW4gaW5jb21wbGV0ZSBzdHJpbmcgKi8KKyAgICAgICAgICAgIHJldHVybiBOVUxMOwkvKiBFaXRoZXIgZXh0cmEgc3ViaWRzLCBvciBhbiBpbmNvbXBsZXRlIHN0cmluZyAqLwogICAgICAgICBjcCA9IHNlY25hbWU7CiAgICAgICAgIHdoaWxlIChncm91cFN1YnRyZWVMZW4tLSA+IDApIHsKICAgICAgICAgICAgIGlmICgqZ3JvdXBTdWJ0cmVlID4gMjU1KQotICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBpbGxlZ2FsIHZhbHVlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KICAgICAgICAgICAgIGlmIChjcCAtIHNlY25hbWUgPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqZ3JvdXBTdWJ0cmVlKys7CiAgICAgICAgIH0KICAgICAgICAgKmNwID0gMDsKQEAgLTIwMCw5ICsyMDQsOSBAQAogICAgICAgICBjcCA9IHNlY25hbWU7CiAgICAgICAgIHdoaWxlIChncm91cFN1YnRyZWVMZW4tLSA+IDApIHsKICAgICAgICAgICAgIGlmICgqZ3JvdXBTdWJ0cmVlID4gMjU1KQotICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBpbGxlZ2FsIHZhbHVlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KICAgICAgICAgICAgIGlmIChjcCAtIHNlY25hbWUgPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqZ3JvdXBTdWJ0cmVlKys7CiAgICAgICAgIH0KICAgICAgICAgKmNwID0gMDsKQEAgLTI1Miw2ICsyNTYsNyBAQAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC0yNzgsNiArMjgzLDcgQEAKICAgICAgKi8KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICBjYXNlIEFDQ0VTU01BVENIOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbUFjY2Vzc0NvbnRleHRNYXRjaDsKICAgICAgICAgYnJlYWs7CkBAIC0yOTYsMTAgKzMwMiwxMyBAQAogICAgIGNhc2UgQUNDRVNTU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbUFjY2Vzc1N0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKICAgICBkZWZhdWx0OgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gTlVMTDsKICAgICB9CiAKKwkqdmFyX2xlbiA9IDA7IC8qIGFzc3VtZSAwIGxlbmd0aCB1bnRpbCBmb3VuZCAqLworCiAgICAgaWYgKG1lbWNtcChuYW1lLCB2cC0+bmFtZSwgc2l6ZW9mKG9pZCkgKiB2cC0+bmFtZWxlbikgIT0gMCkgewogICAgICAgICBtZW1jcHkobmFtZSwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogdnAtPm5hbWVsZW4pOwogICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW47CkBAIC0zMTUsMTEgKzMyNCwxMSBAQAogICAgICAgICBvcCA9IG5hbWUgKyAxMTsKICAgICAgICAgbGVuID0gKm9wKys7CiAgICAgICAgIGlmIChsZW4gPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBjcCA9IGdyb3VwTmFtZTsKICAgICAgICAgd2hpbGUgKGxlbi0tID4gMCkgewogICAgICAgICAgICAgaWYgKCpvcCA+IDI1NSkKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAgICAgLyogaWxsZWdhbCB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgICAvKiBpbGxlZ2FsIHZhbHVlICovCiAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqb3ArKzsKICAgICAgICAgfQogICAgICAgICAqY3AgPSAwOwpAQCAtMzI5LDExICszMzgsMTEgQEAKICAgICAgICAgICovCiAgICAgICAgIGxlbiA9ICpvcCsrOwogICAgICAgICBpZiAobGVuID4gVkFDTV9NQVhfU1RSSU5HKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgY3AgPSBjb250ZXh0UHJlZml4OwogICAgICAgICB3aGlsZSAobGVuLS0gPiAwKSB7CiAgICAgICAgICAgICBpZiAoKm9wID4gMjU1KQotICAgICAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAvKiBpbGxlZ2FsIHZhbHVlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7ICAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpvcCsrOwogICAgICAgICB9CiAgICAgICAgICpjcCA9IDA7CkBAIC0zNjEsMTEgKzM3MCwxMSBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgbGVuID0gKm9wOwogICAgICAgICAgICAgaWYgKGxlbiA+IFZBQ01fTUFYX1NUUklORykKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIGNwID0gZ3JvdXBOYW1lOwogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8PSBsZW47IGkrKykgewogICAgICAgICAgICAgICAgIGlmICgqb3AgPiAyNTUpIHsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7ICAgLyogaWxsZWdhbCB2YWx1ZSAqLworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAvKiBpbGxlZ2FsIHZhbHVlICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpvcCsrOwogICAgICAgICAgICAgfQpAQCAtMzc1LDExICszODQsMTEgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGxlbiA9ICpvcDsKICAgICAgICAgICAgIGlmIChsZW4gPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBjcCA9IGNvbnRleHRQcmVmaXg7CiAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDw9IGxlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgaWYgKCpvcCA+IDI1NSkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsgICAvKiBpbGxlZ2FsIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOyAgIC8qIGlsbGVnYWwgdmFsdWUgKi8KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgKmNwKysgPSAoY2hhcikgKm9wKys7CiAgICAgICAgICAgICB9CkBAIC00NjksNiArNDc4LDcgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSBncC0+c3RhdHVzOwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0dXJuOwogICAgIH0KKwogICAgIHJldHVybiBOVUxMOwogfQogCkBAIC00OTUsNiArNTA1LDcgQEAKICAgICAgKi8KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICBjYXNlIFZJRVdNQVNLOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbVZpZXdNYXNrOwogICAgICAgICBicmVhazsKQEAgLTUwNywxMSArNTE4LDEzIEBACiAgICAgY2FzZSBWSUVXU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbVZpZXdTdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQogCiAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXR1cm4pOworCiAgICAgaWYgKHZwLT5tYWdpYyAhPSBWQUNNVklFV1NQSU5MT0NLKSB7CiAgICAgICAgIGlmIChtZW1jbXAobmFtZSwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogdnAtPm5hbWVsZW4pICE9IDApIHsKICAgICAgICAgICAgIG1lbWNweShuYW1lLCB2cC0+bmFtZSwgc2l6ZW9mKG9pZCkgKiB2cC0+bmFtZWxlbik7CkBAIC01MjgsMTEgKzU0MSwxMSBAQAogICAgICAgICAgICAgb3AgPSBuYW1lICsgMTI7CiAgICAgICAgICAgICBsZW4gPSAqb3ArKzsKICAgICAgICAgICAgIGlmIChsZW4gPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICBjcCA9IHZpZXdOYW1lOwogICAgICAgICAgICAgd2hpbGUgKGxlbi0tID4gMCkgewogICAgICAgICAgICAgICAgIGlmICgqb3AgPiAyNTUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAqY3ArKyA9IChjaGFyKSAqb3ArKzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICpjcCA9IDA7CkBAIC01NDMsNyArNTU2LDcgQEAKICAgICAgICAgICAgIHN1YnRyZWVbMF0gPSBsZW4gPSAqb3ArKzsKICAgICAgICAgICAgIHN1YnRyZWVMZW4gPSAxOwogICAgICAgICAgICAgaWYgKGxlbiA+IE1BWF9PSURfTEVOKQotICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgaWYgKCAob3ArbGVuKSAhPSAobmFtZSArICpsZW5ndGgpICkKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgIC8qIERlY2xhcmVkIGxlbmd0aCBkb2Vzbid0IG1hdGNoIHdoYXQgd2UgYWN0dWFsbHkgZ290ICovCiAgICAgICAgICAgICBvcDEgPSAmKHN1YnRyZWVbMV0pOwpAQCAtNTY2LDExICs1NzksMTEgQEAKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbGVuID0gKm9wOwogICAgICAgICAgICAgICAgIGlmIChsZW4gPiBWQUNNX01BWF9TVFJJTkcpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICBjcCA9IHZpZXdOYW1lOwogICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbGVuICYmIG9wIDwgbmFtZSArICpsZW5ndGg7IGkrKykgewogICAgICAgICAgICAgICAgICAgICBpZiAoKm9wID4gMjU1KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICpjcCsrID0gKGNoYXIpICpvcCsrOwogICAgICAgICAgICAgICAgIH0KQEAgLTYyMyw3ICs2MzYsOSBAQAogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIFZBQ01WSUVXU1BJTkxPQ0s6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdmFjbVZpZXdTcGluTG9jazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGxvbmdfcmV0dXJuID0gdmFjbVZpZXdTcGluTG9jazsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKIApAQCAtNjUxLDM0ICs2NjYsMTEgQEAKICAgICAgICAgbG9uZ19yZXR1cm4gPSBncC0+dmlld1N0YXR1czsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldHVybjsKICAgICB9CisKICAgICByZXR1cm4gTlVMTDsKIH0KIAotb2lkICAgICAgICAgICAgKgotc2VjMmdyb3VwX2dlbmVyYXRlX09JRChvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKiBnZXB0ciwgc2l6ZV90ICogbGVuZ3RoKQotewotICAgIG9pZCAgICAgICAgICAgICppbmRleE9pZDsKLSAgICBpbnQgICAgICAgICAgICAgaSwgc2VjdXJpdHlOYW1lTGVuOwotCi0gICAgc2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKGdlcHRyLT5zZWN1cml0eU5hbWUpOwotCi0gICAgKmxlbmd0aCA9IDIgKyBzZWN1cml0eU5hbWVMZW4gKyBwcmVmaXhMZW47Ci0gICAgaW5kZXhPaWQgPSAob2lkICopIG1hbGxvYygqbGVuZ3RoICogc2l6ZW9mKG9pZCkpOwotICAgIGlmIChpbmRleE9pZCkgewotICAgICAgICBtZW1tb3ZlKGluZGV4T2lkLCBwcmVmaXgsIHByZWZpeExlbiAqIHNpemVvZihvaWQpKTsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW5dID0gZ2VwdHItPnNlY3VyaXR5TW9kZWw7Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgMV0gPSBzZWN1cml0eU5hbWVMZW47Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZWN1cml0eU5hbWVMZW47IGkrKykKLSAgICAgICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIDIgKyBpXSA9IChvaWQpIGdlcHRyLT5zZWN1cml0eU5hbWVbaV07Ci0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4T2lkOwotCi19Ci0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogaW50CiBzZWMyZ3JvdXBfcGFyc2Vfb2lkKG9pZCAqIG9pZEluZGV4LCBzaXplX3Qgb2lkTGVuLAogICAgICAgICAgICAgICAgICAgICBpbnQgKm1vZGVsLCB1bnNpZ25lZCBjaGFyICoqbmFtZSwgc2l6ZV90ICogbmFtZUxlbikKQEAgLTk4MSw0MCArOTczLDYgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAotb2lkICAgICAgICAgICAgKgotYWNjZXNzX2dlbmVyYXRlX09JRChvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhMZW4sCi0gICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICogYXB0ciwgc2l6ZV90ICogbGVuZ3RoKQotewotICAgIG9pZCAgICAgICAgICAgICppbmRleE9pZDsKLSAgICBpbnQgICAgICAgICAgICAgaSwgZ3JvdXBOYW1lTGVuLCBjb250ZXh0UHJlZml4TGVuOwotCi0gICAgZ3JvdXBOYW1lTGVuID0gc3RybGVuKGFwdHItPmdyb3VwTmFtZSk7Ci0gICAgY29udGV4dFByZWZpeExlbiA9IHN0cmxlbihhcHRyLT5jb250ZXh0UHJlZml4KTsKLQotICAgICpsZW5ndGggPSA0ICsgZ3JvdXBOYW1lTGVuICsgY29udGV4dFByZWZpeExlbiArIHByZWZpeExlbjsKLSAgICBpbmRleE9pZCA9IChvaWQgKikgbWFsbG9jKCpsZW5ndGggKiBzaXplb2Yob2lkKSk7Ci0gICAgaWYgKGluZGV4T2lkKSB7Ci0gICAgICAgIG1lbW1vdmUoaW5kZXhPaWQsIHByZWZpeCwgcHJlZml4TGVuICogc2l6ZW9mKG9pZCkpOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbl0gPSBncm91cE5hbWVMZW47Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBncm91cE5hbWVMZW47IGkrKykKLSAgICAgICAgICAgIGluZGV4T2lkW2dyb3VwTmFtZUxlbiArIDEgKyBpXSA9IChvaWQpIGFwdHItPmdyb3VwTmFtZVtpXTsKLQotICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyBncm91cE5hbWVMZW4gKyAxXSA9IGNvbnRleHRQcmVmaXhMZW47Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBjb250ZXh0UHJlZml4TGVuOyBpKyspCi0gICAgICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyBncm91cE5hbWVMZW4gKyAyICsgaV0gPQotICAgICAgICAgICAgICAgIChvaWQpIGFwdHItPmNvbnRleHRQcmVmaXhbaV07Ci0KLSAgICAgICAgaW5kZXhPaWRbcHJlZml4TGVuICsgZ3JvdXBOYW1lTGVuICsgY29udGV4dFByZWZpeExlbiArIDNdID0KLSAgICAgICAgICAgIGFwdHItPnNlY3VyaXR5TW9kZWw7Ci0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIGdyb3VwTmFtZUxlbiArIGNvbnRleHRQcmVmaXhMZW4gKyA0XSA9Ci0gICAgICAgICAgICBhcHRyLT5zZWN1cml0eUxldmVsOwotCi0gICAgfQotICAgIHJldHVybiBpbmRleE9pZDsKLQotfQotCiBpbnQKIGFjY2Vzc19wYXJzZV9vaWQob2lkICogb2lkSW5kZXgsIHNpemVfdCBvaWRMZW4sCiAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipncm91cE5hbWUsIHNpemVfdCAqIGdyb3VwTmFtZUxlbiwKQEAgLTE1NTAsMzUgKzE1MDgsNiBAQAogICAgIHJldHVybiAwOwogfQogCi1vaWQgICAgICAgICAgICAqCi12aWV3X2dlbmVyYXRlX09JRChvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhMZW4sCi0gICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKiB2cHRyLCBzaXplX3QgKiBsZW5ndGgpCi17Ci0gICAgb2lkICAgICAgICAgICAgKmluZGV4T2lkOwotICAgIGludCAgICAgICAgICAgICBpLCB2aWV3TmFtZUxlbiwgdmlld1N1YnRyZWVMZW47Ci0KLSAgICB2aWV3TmFtZUxlbiA9IHN0cmxlbih2cHRyLT52aWV3TmFtZSk7Ci0gICAgdmlld1N1YnRyZWVMZW4gPSB2cHRyLT52aWV3U3VidHJlZUxlbjsKLQotICAgICpsZW5ndGggPSAyICsgdmlld05hbWVMZW4gKyB2aWV3U3VidHJlZUxlbiArIHByZWZpeExlbjsKLSAgICBpbmRleE9pZCA9IChvaWQgKikgbWFsbG9jKCpsZW5ndGggKiBzaXplb2Yob2lkKSk7Ci0gICAgaWYgKGluZGV4T2lkKSB7Ci0gICAgICAgIG1lbW1vdmUoaW5kZXhPaWQsIHByZWZpeCwgcHJlZml4TGVuICogc2l6ZW9mKG9pZCkpOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbl0gPSB2aWV3TmFtZUxlbjsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHZpZXdOYW1lTGVuOyBpKyspCi0gICAgICAgICAgICBpbmRleE9pZFt2aWV3TmFtZUxlbiArIDEgKyBpXSA9IChvaWQpIHZwdHItPnZpZXdOYW1lW2ldOwotCi0gICAgICAgIGluZGV4T2lkW3ByZWZpeExlbiArIHZpZXdOYW1lTGVuICsgMV0gPSB2aWV3U3VidHJlZUxlbjsKLSAgICAgICAgZm9yIChpID0gMDsgaSA8IHZpZXdTdWJ0cmVlTGVuOyBpKyspCi0gICAgICAgICAgICBpbmRleE9pZFtwcmVmaXhMZW4gKyB2aWV3TmFtZUxlbiArIDIgKyBpXSA9Ci0gICAgICAgICAgICAgICAgKG9pZCkgdnB0ci0+dmlld1N1YnRyZWVbaV07Ci0KLSAgICB9Ci0gICAgcmV0dXJuIGluZGV4T2lkOwotCi19Ci0KIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqCiB2aWV3X3BhcnNlX3ZpZXdFbnRyeShvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7CkBAIC0xOTExLDMgKzE4NDAsNCBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV92YXJzLmggYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaAppbmRleCA4MDkzMTU3Li40NzFmNzU5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaAorKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX3ZhcnMuaApAQCAtNyw3ICs3LDcgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdmFjbS5oPgogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3ZhY21fY29udGV4dCkKIGNvbmZpZ19yZXF1aXJlKG1pYklJL3ZhY21fY29uZikKIGNvbmZpZ19hZGRfbWliKFNOTVAtVklFVy1CQVNFRC1BQ00tTUlCKQpAQCAtMTksNiArMTksNyBAQAogICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfdmFjbV9hY2Nlc3M7CiAgICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl92YWNtX3ZpZXc7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdmFjbUdyb3VwTmFtZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3ZhY21TZWN1cml0eVRvR3JvdXBTdGF0dXM7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV92YWNtU2VjdXJpdHlUb0dyb3VwU3RvcmFnZVR5cGU7CkBAIC0zNiw3ICszNyw2IEBACiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV92YWNtVmlld1N0b3JhZ2VUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdmFjbVZpZXdUeXBlOwogCi0KICAgICAgb2lkICAgICAgICAgICAgKmFjY2Vzc19nZW5lcmF0ZV9PSUQob2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4TGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqYXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHN1YnRyZWVMZW4pOwogICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZpZXdfcGFyc2Vfdmlld0VudHJ5KG9pZCAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG5hbWVfbGVuKTsKLQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAKIAogI2RlZmluZSBPSURfU05NUFZBQ01NSUIJCVNOTVBfT0lEX1NOTVBNT0RVTEVTLCAxNgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmMgYi9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYwppbmRleCA1Y2VmMWNmLi43MmE1MDNmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYworKysgYi9hZ2VudC9taWJncm91cC9taWJJSS92YXJfcm91dGUuYwpAQCAtNDYsNiArNDYsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSAicm91dGVfaGVhZGVycy5oIgogI2RlZmluZSBDQUNIRV9USU1FICgxMjApICAgICAgICAvKiBTZWNvbmRzICovCkBAIC02Myw2ICs2NCw4IEBACiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZ2V0X3JvdXRlcywgbGlibmV0c25tcG1pYnMpCisKICNpZm5kZWYgIE1JTgogI2RlZmluZSAgTUlOKGEsYikgICAgICAgICAgICAgICAgICAgICAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpCiAjZW5kaWYKQEAgLTMxMywxNyArMzE2LDE5IEBACiBzdGF0aWMgbWliX2lwUm91dGVFbnQgKnJ0ID0gKG1pYl9pcFJvdXRlRW50ICopIDA7CiBzdGF0aWMgdm9pZCAgICAgUm91dGVfU2Nhbl9SZWxvYWQodm9pZCk7CiAjZWxpZiAhZGVmaW5lZChzb2xhcmlzMikKLXN0YXRpYyBSVEVOVFJZICoqcnRoZWFkID0gMDsKK3N0YXRpYyBSVEVOVFJZICoqcnRoZWFkID0gTlVMTDsKIHN0YXRpYyBpbnQgICAgICBydHNpemUgPSAwLCBydGFsbG9jYXRlID0gMDsKIAogc3RhdGljIHZvaWQgICAgIFJvdXRlX1NjYW5fUmVsb2FkKHZvaWQpOwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX1JPVVRFUwogUlRFTlRSWSAqKm5ldHNubXBfZ2V0X3JvdXRlcyhzaXplX3QgKnNpemUpIHsKICAgICBSb3V0ZV9TY2FuX1JlbG9hZCgpOwogICAgIGlmIChzaXplKQogICAgICAgICAqc2l6ZSA9IHJ0c2l6ZTsKICAgICByZXR1cm4gcnRoZWFkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX1JPVVRFUyAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBocHV4MTEgKi8KIAogI2lmICEoZGVmaW5lZChsaW51eCkgfHwgZGVmaW5lZChzb2xhcmlzMikgfHwgZGVmaW5lZChocHV4MTEpKSAmJiBkZWZpbmVkKFJUSE9TVF9TWU1CT0wpICYmIGRlZmluZWQoUlRORVRfU1lNQk9MKQpAQCAtNDMyLDcgKzQzNyw4IEBACiAgICAgICogSVBBRERSIHN0YXJ0cyBhdCBvZmZzZXQgMTAuCiAgICAgICovCiAgICAgcmVnaXN0ZXIgaW50ICAgIFNhdmVfVmFsaWQsIHJlc3VsdCwgUnRJbmRleDsKLSAgICBzdGF0aWMgaW50ICAgICAgc2F2ZU5hbWVMZW4gPSAwLCBzYXZlRXhhY3QgPSAwLCBzYXZlUnRJbmRleCA9IDA7CisgICAgc3RhdGljIHNpemVfdCAgIHNhdmVOYW1lTGVuID0gMDsKKyAgICBzdGF0aWMgaW50ICAgICAgc2F2ZUV4YWN0ID0gMCwgc2F2ZVJ0SW5kZXggPSAwOwogICAgIHN0YXRpYyBvaWQgICAgICBzYXZlTmFtZVtNQVhfT0lEX0xFTl0sIEN1cnJlbnRbTUFYX09JRF9MRU5dOwogICAgIHVfY2hhciAgICAgICAgICpjcDsKICAgICBvaWQgICAgICAgICAgICAqb3A7CkBAIC03NjIsNiArNzY4LDEwIEBACiAgICAgICAgIGlmIChnZXRNaWJzdGF0KE1JQl9JUF9ST1VURSwgJmVudHJ5LCBzaXplb2YobWliMl9pcFJvdXRlRW50cnlfdCksCiAgICAgICAgICAgICAgICAgICAgICAgIHJlcV90eXBlLCAmSVBfQ21wX1JvdXRlLCAmTmV4dGVudHJ5KSAhPSAwKQogICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgSEFWRV9ERUZJTkVEX0lSRV9DQUNIRQorICAgICAgICBpZihlbnRyeS5pcFJvdXRlSW5mby5yZV9pcmVfdHlwZSZJUkVfQ0FDSEUpCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZiAvKiBIQVZFX0RFRklORURfSVJFX0NBQ0hFICovCiAgICAgICAgIENPUFlfSVBBRERSKGNwLCAodV9jaGFyICopICYgZW50cnkuaXBSb3V0ZURlc3QsIG9wLAogICAgICAgICAgICAgICAgICAgICBjdXJyZW50ICsgSVBfUk9VVEVBRERSX09GRik7CiAgICAgICAgIGlmIChleGFjdCkgewpAQCAtODY1LDcgKzg3NSw3IEBACiBzdGF0aWMgaW50ICAgICAgcXNvcnRfY29tcGFyZShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKik7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoUlRFTlRSWV80XzQpIHx8IGRlZmluZWQoUlRFTlRSWV9SVF9ORVhUKSB8fCBkZWZpbmVkKGhwdXgxMSkKKyNpZiBkZWZpbmVkKFJURU5UUllfNF80KSB8fCBkZWZpbmVkKFJURU5UUllfUlRfTkVYVCkgfHwgZGVmaW5lZCAoaHB1eDExKQogCiAjaWYgZGVmaW5lZChSVEVOVFJZXzRfNCkgJiYgIWRlZmluZWQoaHB1eDExKQogdm9pZApAQCAtODc1LDcgKzg4NSw3IEBACiAgICAgUlRFTlRSWSAgICAgICAgIHJ0OwogICAgIHN0cnVjdCBpZm5ldCAgICBpZm5ldDsKICAgICBjaGFyICAgICAgICAgICAgbmFtZVsxNl0sIHRlbXBbMTZdOwotI2lmICFTVFJVQ1RfSUZORVRfSEFTX0lGX1hOQU1FCisjaWYgIUhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FCiAgICAgcmVnaXN0ZXIgY2hhciAgKmNwOwogI2VuZGlmCiAKQEAgLTkwOCw3ICs5MTgsNyBAQAogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS92YXJfcm91dGUiLCAia2xvb2t1cCBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0jaWYgU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRQorI2lmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1hOQU1FCiAjaWYgZGVmaW5lZChuZXRic2QxKSB8fCBkZWZpbmVkKG9wZW5ic2QyKQogICAgICAgICAgICAgc3RybGNweShuYW1lLCBpZm5ldC5pZl94bmFtZSwgc2l6ZW9mKG5hbWUpKTsKICNlbHNlCkBAIC05MTksNiArOTI5LDEwIEBACiAjZW5kaWYKICAgICAgICAgICAgIG5hbWVbc2l6ZW9mKG5hbWUpIC0gMV0gPSAnXDAnOwogI2Vsc2UKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTgorICAgICAgICAgICAgLyogdGhpcyBleGlzdHMgaGVyZSBqdXN0IHNvIHdlIGRvbid0IGNvcHkgaWZkZWYgbG9naWMgZWxzZXdoZXJlICovCisgICAgICAgICAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzdHJpbmdfYXBwZW5kX2ludCk7CisjZW5kaWYKICAgICAgICAgICAgIGlmICghTkVUU05NUF9LTE9PS1VQKGlmbmV0LmlmX25hbWUsIG5hbWUsIHNpemVvZiBuYW1lKSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJtaWJJSS92YXJfcm91dGUiLCAia2xvb2t1cCBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC05MjcsNiArOTQxLDkgQEAKICAgICAgICAgICAgIGNwID0gKGNoYXIgKikgc3RyY2hyKG5hbWUsICdcMCcpOwogICAgICAgICAgICAgc3RyaW5nX2FwcGVuZF9pbnQoY3AsIGlmbmV0LmlmX3VuaXQpOwogI2VuZGlmCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU4KKyAgICAgICAgICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGludGVyZmFjZV9sZWdhY3kpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX0NIRUNLSU4gKi8KICAgICAgICAgICAgIEludGVyZmFjZV9TY2FuX0luaXQoKTsKICAgICAgICAgICAgIHJ0LnJ0X3VuaXQgPSAwOwogICAgICAgICAgICAgd2hpbGUgKEludGVyZmFjZV9TY2FuX05leHQKQEAgLTEwMzEsMTAgKzEwNDgsMTAgQEAKICAgICBjaGFyICAgICAgICAgICAgbmFtZVsxNl0sIHRlbXBbMTZdOwogICAgIGludCAgICAgICAgICAgICBoYXNoc2l6ZTsKICNlbmRpZgotICAgIHN0YXRpYyBpbnQgICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gMDsKKyAgICBzdGF0aWMgdGltZV90ICAgVGltZV9PZl9MYXN0X1JlbG9hZDsKICAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OwogCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogICAgIGlmIChUaW1lX09mX0xhc3RfUmVsb2FkICsgQ0FDSEVfVElNRSA+IG5vdy50dl9zZWMpCiAgICAgICAgIHJldHVybjsKICAgICBUaW1lX09mX0xhc3RfUmVsb2FkID0gbm93LnR2X3NlYzsKQEAgLTEwNzYsNiArMTA5MywxMSBAQAogICAgIH0KIAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBydGVudHJ5IGlzIGEgQlNEIDQuMyBjb21wYXQgKi8KKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTgorICAgIC8qIHRoaXMgZXhpc3RzIGhlcmUganVzdCBzbyB3ZSBkb24ndCBjb3B5IGlmZGVmIGxvZ2ljIGVsc2V3aGVyZSAqLworICAgIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ19hcHBlbmRfaW50KTsKKyAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShpbnRlcmZhY2VfbGVnYWN5KQorI2VuZGlmCiAgICAgZm9yICh0YWJsZSA9IDA7IHRhYmxlIDwgTlVNX1JPVVRFX1NZTUJPTFM7IHRhYmxlKyspIHsKICAgICAgICAgYXV0b19ubGlzdChSVEhBU0hTSVpFX1NZTUJPTCwgKGNoYXIgKikgJmhhc2hzaXplLAogICAgICAgICAgICAgICAgICAgIHNpemVvZihoYXNoc2l6ZSkpOwpAQCAtMTE2MCw2ICsxMTgyLDggQEAKICNlbHNlCiAKICNpZiBIQVZFX1NZU19NQlVGX0gKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN0cmluZ19hcHBlbmRfaW50KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW50ZXJmYWNlX2xlZ2FjeSkKIHN0YXRpYyB2b2lkCiBSb3V0ZV9TY2FuX1JlbG9hZCh2b2lkKQogewpAQCAtMTE3MCwxMSArMTE5NCwxMSBAQAogICAgIGludCAgICAgICAgICAgICBpLCB0YWJsZTsKICAgICByZWdpc3RlciBjaGFyICAqY3A7CiAgICAgY2hhciAgICAgICAgICAgIG5hbWVbMTZdLCB0ZW1wWzE2XTsKLSAgICBzdGF0aWMgaW50ICAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IDA7CisgICAgc3RhdGljIHRpbWVfdCAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQ7CiAgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKICAgICBpbnQgICAgICAgICAgICAgaGFzaHNpemU7CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAgICAgaWYgKFRpbWVfT2ZfTGFzdF9SZWxvYWQgKyBDQUNIRV9USU1FID4gbm93LnR2X3NlYykKICAgICAgICAgcmV0dXJuOwogICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSBub3cudHZfc2VjOwpAQCAtMTI4NiwxMCArMTMxMCwxMCBAQAogICAgIGNoYXIgICAgICAgICAgICBsaW5lWzI1Nl07CiAgICAgc3RydWN0IHJ0ZW50cnkgKnJ0OwogICAgIGNoYXIgICAgICAgICAgICBuYW1lWzE2XTsKLSAgICBzdGF0aWMgaW50ICAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IDA7CisgICAgc3RhdGljIHRpbWVfdCAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQ7CiAgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKIAotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKICAgICBpZiAoVGltZV9PZl9MYXN0X1JlbG9hZCArIENBQ0hFX1RJTUUgPiBub3cudHZfc2VjKQogICAgICAgICByZXR1cm47CiAgICAgVGltZV9PZl9MYXN0X1JlbG9hZCA9IG5vdy50dl9zZWM7CkBAIC0xMzEzLDE1ICsxMzM3LDE1IEBACiAgICAgcnRzaXplID0gMDsKIAogICAgIGlmICghKGluID0gZm9wZW4oIi9wcm9jL25ldC9yb3V0ZSIsICJyIikpKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW5ub3Qgb3BlbiAvcHJvYy9uZXQvcm91dGUgLSBidXJwc1xuIik7CisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwgImNhbm5vdCBvcGVuIC9wcm9jL25ldC9yb3V0ZSAtIGJ1cnBzXG4iKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICB3aGlsZSAoZmdldHMobGluZSwgc2l6ZW9mKGxpbmUpLCBpbikpIHsKICAgICAgICAgc3RydWN0IHJ0ZW50cnkgIHJ0ZW50OwogICAgICAgICBjaGFyICAgICAgICAgICAgcnRlbnRfbmFtZVszMl07Ci0gICAgICAgIGludCAgICAgICAgICAgICByZWZjbnQsIGZsYWdzLCBtZXRyaWM7Ci0gICAgICAgIHVuc2lnbmVkICAgICAgICB1c2U7CisgICAgICAgIGludCAgICAgICAgICAgICByZWZjbnQsIG1ldHJpYzsKKyAgICAgICAgdW5zaWduZWQgICAgICAgIGZsYWdzLCB1c2U7CiAKICAgICAgICAgcnQgPSAmcnRlbnQ7CiAgICAgICAgIG1lbXNldCgoY2hhciAqKSBydCwgKDApLCBzaXplb2YoKnJ0KSk7CkBAIC0xMzMyLDE4ICsxMzU2LDE1IEBACiAgICAgICAgICAqIElmYWNlIERlc3QgR1cgRmxhZ3MgUmVmQ250IFVzZSBNZXRyaWMgTWFzayBNVFUgV2luIElSVFQKICAgICAgICAgICogZXRoMCAwQTBBMEEwQSAwMDAwMDAwMCAwNSAwIDAgMCBGRkZGRkZGRiAxNTAwIDAgMCAKICAgICAgICAgICovCi0gICAgICAgIGlmICg4ICE9IHNzY2FuZihsaW5lLCAiJXMgJXggJXggJXggJXUgJWQgJWQgJXggJSpkICUqZCAlKmRcbiIsCisgICAgICAgIGlmICg4ICE9IHNzY2FuZihsaW5lLCAiJXMgJXggJXggJXggJWQgJXUgJWQgJXggJSpkICUqZCAlKmRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBydC0+cnRfZGV2LAotICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHJ0ZW50LnJ0X2RzdCkpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2luX2FkZHIuc19hZGRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICYoKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihydGVudC5ydF9nYXRld2F5KSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICBzaW5fYWRkci5zX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHJ0ZW50LnJ0X2RzdCkpLT5zaW5fYWRkci5zX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICAgICAgJigoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKHJ0ZW50LnJ0X2dhdGV3YXkpKS0+c2luX2FkZHIuc19hZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBYWFg6IGZpeCB0eXBlIG9mIHRoZSBhcmdzIAogICAgICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgICAgICAmZmxhZ3MsICZyZWZjbnQsICZ1c2UsICZtZXRyaWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAmKCgoc3RydWN0IHNvY2thZGRyX2luICopICYocnRlbnQucnRfZ2VubWFzaykpLT4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgc2luX2FkZHIuc19hZGRyKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAmKCgoc3RydWN0IHNvY2thZGRyX2luICopICYocnRlbnQucnRfZ2VubWFzaykpLT5zaW5fYWRkci5zX2FkZHIpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIHN0cmxjcHkobmFtZSwgcnQtPnJ0X2Rldiwgc2l6ZW9mKG5hbWUpKTsKQEAgLTE0NDIsNyArMTQ2Myw3IEBACiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc29sYXJpczIgKi8KIAotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBXSU4zMiBjeWd3aW4gKi8KKyNlbGlmIGRlZmluZWQoSEFWRV9JUEhMUEFQSV9IKSAgLyogV0lOMzIgY3lnd2luICovCiAjaW5jbHVkZSA8aXBobHBhcGkuaD4KICNpZm5kZWYgTUlCX0lQUFJPVE9fTkVUTUdNVAogI2RlZmluZSBNSUJfSVBQUk9UT19ORVRNR01UIDMKQEAgLTE0NjYsNyArMTQ4Nyw3IEBACiAgICAgICogMS4zLjYuMS4yLjEuNC4yMS4xLj8uQS5CLkMuRCwgIHdoZXJlIEEuQi5DLkQgaXMgSVAgYWRkcmVzcy4KICAgICAgKiBJUEFERFIgc3RhcnRzIGF0IG9mZnNldCAxMC4KICAgICAgKi8KLSAgICByZWdpc3RlciBpbnQgICAgU2F2ZV9WYWxpZCwgcmVzdWx0LCBSdEluZGV4OworICAgIHJlZ2lzdGVyIGludCAgICBTYXZlX1ZhbGlkLCByZXN1bHQsIFJ0SW5kZXggPSAwOwogICAgIHN0YXRpYyBpbnQgICAgICBzYXZlTmFtZUxlbiA9IDAsIHNhdmVFeGFjdCA9IDAsIHNhdmVSdEluZGV4ID0KICAgICAgICAgMCwgcnRzaXplID0gMDsKICAgICBzdGF0aWMgb2lkICAgICAgc2F2ZU5hbWVbTUFYX09JRF9MRU5dLCBDdXJyZW50W01BWF9PSURfTEVOXTsKQEAgLTE0NzYsOSArMTQ5Nyw3IEBACiAgICAgRFdPUkQgICAgICAgICAgIGR3QWN0dWFsU2l6ZSA9IDA7CiAgICAgc3RhdGljIFBNSUJfSVBGT1JXQVJEVEFCTEUgcElwUnRyVGFibGUgPSBOVUxMOwogICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0gICAgc3RhdGljIGxvbmcgICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQgPSAwOwotICAgIHVfY2hhciAgICAgICAgICBkZXN0X2FkZHJbNF07Ci0gICAgTUlCX0lQRk9SV0FSRFJPVyB0ZW1wX3JvdzsKKyAgICBzdGF0aWMgdGltZV90ICAgIFRpbWVfT2ZfTGFzdF9SZWxvYWQ7CiAgICAgc3RhdGljIGluX2FkZHJfdCBhZGRyX3JldDsKIAogCkBAIC0xNDk1LDcgKzE1MTQsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgcm91dGVfcm93ID0gKFBNSUJfSVBGT1JXQVJEUk9XKSBtYWxsb2Moc2l6ZW9mKE1JQl9JUEZPUldBUkRST1cpKTsKICAgICB9Ci0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogICAgIGlmICgocnRzaXplIDw9IDEpIHx8IChUaW1lX09mX0xhc3RfUmVsb2FkICsgNSA8PSBub3cudHZfc2VjKSkKICAgICAgICAgU2F2ZV9WYWxpZCA9IDA7CiAgICAgZWxzZQpAQCAtMTU3MywxMiArMTU5MiwxNiBAQAogICAgICAgICAgICAgICogZm9yIGNyZWF0aW9uIG9mIG5ldyByb3csIG9ubHkgaXBOZXRUb01lZGlhVGFibGUgY2FzZSBpcyBjb25zaWRlcmVkIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoKmxlbmd0aCA9PSAxNCkgeworICAgICAgICAgICAgICAgIHVfY2hhciAgICAgICAgICAgZGVzdF9hZGRyWzRdOworICAgICAgICAgICAgICAgIE1JQl9JUEZPUldBUkRST1cgdGVtcF9yb3c7CisKICAgICAgICAgICAgICAgICBjcmVhdGVfZmxhZyA9IDE7CiAgICAgICAgICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3J0ZTsKICAgICAgICAgICAgICAgICBkZXN0X2FkZHJbMF0gPSAodV9jaGFyKSBuYW1lWzEwXTsKICAgICAgICAgICAgICAgICBkZXN0X2FkZHJbMV0gPSAodV9jaGFyKSBuYW1lWzExXTsKICAgICAgICAgICAgICAgICBkZXN0X2FkZHJbMl0gPSAodV9jaGFyKSBuYW1lWzEyXTsKICAgICAgICAgICAgICAgICBkZXN0X2FkZHJbM10gPSAodV9jaGFyKSBuYW1lWzEzXTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoJnRlbXBfcm93LCAwLCBzaXplb2YodGVtcF9yb3cpKTsKICAgICAgICAgICAgICAgICB0ZW1wX3Jvdy5kd0ZvcndhcmREZXN0ID0gKigoRFdPUkQgKikgZGVzdF9hZGRyKTsKICAgICAgICAgICAgICAgICB0ZW1wX3Jvdy5kd0ZvcndhcmRQb2xpY3kgPSAwOwogICAgICAgICAgICAgICAgIHRlbXBfcm93LmR3Rm9yd2FyZFByb3RvID0gTUlCX0lQUFJPVE9fTkVUTUdNVDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pYklJL3Zhcl9yb3V0ZS5oIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmgKaW5kZXggOTFlY2VlOC4uNzg2MmM0MyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFyX3JvdXRlLmgKQEAgLTUsNyArNSw3IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9WQVJfUk9VVEVfSAogI2RlZmluZSBfTUlCR1JPVVBfVkFSX1JPVVRFX0gKIAotY29uZmlnX3JlcXVpcmUobWliSUkvaXAgdXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKG1pYklJL2lwKQogY29uZmlnX2FyY2hfcmVxdWlyZShzb2xhcmlzMiwga2VybmVsX3N1bm9zNSkKIAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF92YXJfcm91dGUodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9taWJpbmNsLmggYi9hZ2VudC9taWJncm91cC9taWJpbmNsLmgKaW5kZXggMjhlZDU5OS4uM2Q0ODc2OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWliaW5jbC5oCisrKyBiL2FnZW50L21pYmdyb3VwL21pYmluY2wuaApAQCAtMTIsMTEgKzEyLDcgQEAKICNpbmNsdWRlIDxtYWxsb2MuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmMgYi9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYwppbmRleCA2NjNhNWU1Li5jY2E5ODcxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYworKysgYi9hZ2VudC9taWJncm91cC9taXNjL2lwZndhY2MuYwpAQCAtMjIsNyArMjIsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKICNpbmNsdWRlICJpcGZ3YWNjLmgiCiAKIC8qCkBAIC0xODUsNDAgKzE4NSw1OCBAQAogICovCiAKIHN0cnVjdCB2YXJpYWJsZTIgaXBmd2FjY192YXJpYWJsZXNbXSA9IHsKLSAgICB7SVBGV0FDQ0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0lOREVYfX0sCi0gICAge0lQRldBQ0NTUkNBRERSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDU1JDQUREUn19LAotICAgIHtJUEZXQUNDU1JDTk0sIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NTUkNOTX19LAotICAgIHtJUEZXQUNDRFNUQUREUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ0RTVEFERFJ9fSwKLSAgICB7SVBGV0FDQ0RTVE5NLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDRFNUTk19fSwKLSAgICB7SVBGV0FDQ1ZJQU5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NWSUFOQU1FfX0sCi0gICAge0lQRldBQ0NWSUFBRERSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDVklBQUREUn19LAotICAgIHtJUEZXQUNDUFJPVE8sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUFJPVE99fSwKLSAgICB7SVBGV0FDQ0JJRElSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0JJRElSfX0sCi0gICAge0lQRldBQ0NESVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDRElSfX0sCi0gICAge0lQRldBQ0NCWVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NCWVRFU319LAotICAgIHtJUEZXQUNDUEFDS0VUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQQUNLRVRTfX0sCi0gICAge0lQRldBQ0NOU1JDUFJUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NOU1JDUFJUU319LAotICAgIHtJUEZXQUNDTkRTVFBSVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsCi0gICAgIHtJUEZXQUNDTkRTVFBSVFN9fSwKLSAgICB7SVBGV0FDQ1NSQ0lTUk5HLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLAotICAgICB7SVBGV0FDQ1NSQ0lTUk5HfX0sCi0gICAge0lQRldBQ0NEU1RJU1JORywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwKLSAgICAge0lQRldBQ0NEU1RJU1JOR319LAotICAgIHtJUEZXQUNDUE9SVDEsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDF9fSwKLSAgICB7SVBGV0FDQ1BPUlQyLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQyfX0sCi0gICAge0lQRldBQ0NQT1JUMywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUM319LAotICAgIHtJUEZXQUNDUE9SVDQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDR9fSwKLSAgICB7SVBGV0FDQ1BPUlQ1LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ1fX0sCi0gICAge0lQRldBQ0NQT1JUNiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUNn19LAotICAgIHtJUEZXQUNDUE9SVDcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDd9fSwKLSAgICB7SVBGV0FDQ1BPUlQ4LCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ4fX0sCi0gICAge0lQRldBQ0NQT1JUOSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUOX19LAotICAgIHtJUEZXQUNDUE9SVDEwLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQxMH19CisgICAge0lQRldBQ0NJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NJTkRFWH19LAorICAgIHtJUEZXQUNDU1JDQUREUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1NSQ0FERFJ9fSwKKyAgICB7SVBGV0FDQ1NSQ05NLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDU1JDTk19fSwKKyAgICB7SVBGV0FDQ0RTVEFERFIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NEU1RBRERSfX0sCisgICAge0lQRldBQ0NEU1ROTSwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0RTVE5NfX0sCisgICAge0lQRldBQ0NWSUFOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDVklBTkFNRX19LAorICAgIHtJUEZXQUNDVklBQUREUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1ZJQUFERFJ9fSwKKyAgICB7SVBGV0FDQ1BST1RPLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BST1RPfX0sCisgICAge0lQRldBQ0NCSURJUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NCSURJUn19LAorICAgIHtJUEZXQUNDRElSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ0RJUn19LAorICAgIHtJUEZXQUNDQllURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDQllURVN9fSwKKyAgICB7SVBGV0FDQ1BBQ0tFVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUEFDS0VUU319LAorICAgIHtJUEZXQUNDTlNSQ1BSVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDTlNSQ1BSVFN9fSwKKyAgICB7SVBGV0FDQ05EU1RQUlRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ05EU1RQUlRTfX0sCisgICAge0lQRldBQ0NTUkNJU1JORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NTUkNJU1JOR319LAorICAgIHtJUEZXQUNDRFNUSVNSTkcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDRFNUSVNSTkd9fSwKKyAgICB7SVBGV0FDQ1BPUlQxLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQxfX0sCisgICAge0lQRldBQ0NQT1JUMiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUMn19LAorICAgIHtJUEZXQUNDUE9SVDMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDN9fSwKKyAgICB7SVBGV0FDQ1BPUlQ0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ0fX0sCisgICAge0lQRldBQ0NQT1JUNSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUNX19LAorICAgIHtJUEZXQUNDUE9SVDYsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDZ9fSwKKyAgICB7SVBGV0FDQ1BPUlQ3LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9pcGZ3YWNjLCAxLCB7SVBGV0FDQ1BPUlQ3fX0sCisgICAge0lQRldBQ0NQT1JUOCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUOH19LAorICAgIHtJUEZXQUNDUE9SVDksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2lwZndhY2MsIDEsIHtJUEZXQUNDUE9SVDl9fSwKKyAgICB7SVBGV0FDQ1BPUlQxMCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfaXBmd2FjYywgMSwge0lQRldBQ0NQT1JUMTB9fQogfTsKIAogb2lkICAgICAgICAgICAgIGlwZndhY2NfdmFyaWFibGVzX29pZFtdID0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL21pc2MvaXBmd2FjYy5oIGIvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmgKaW5kZXggZDliNmU2MS4uNjM5YzczOSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvbWlzYy9pcGZ3YWNjLmgKQEAgLTYsMTAgKzYsMTAgQEAKICNkZWZpbmUgX01JQkdST1VQX0lQRldBQ0NfSAogCiAvKgotICogd2UgdXNlIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9zaW1wbGVfdGFibGUgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogCiAgICAgLyoKICAgICAgKiBhZGQgdGhlIG1pYiB3ZSBpbXBsZW1lbnQgdG8gdGhlIGxpc3Qgb2YgZGVmYXVsdCBtaWJzIHRvIGxvYWQgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmMKaW5kZXggOWIxZmY1MS4uYTEyYTMzOCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5jCisrKyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKQEAgLTE2LDkgKzE3LDE1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oPgotI2luY2x1ZGUgIm1pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCIKKyNpbmNsdWRlICJuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgiCiAjaW5jbHVkZSAibm90aWZpY2F0aW9uX2xvZy5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZV9jb250ZXh0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZGVsZXRlX3RhYmxlX2RhdGFfc2V0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfZGF0YXNldCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGRhdGVfbl90aW1lKQorCiAvKgogICogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgbmxtTG9nVGFibGUKICAqLwpAQCAtMTQzLDExICsxNTAsMTEgQEAKICAgICAgKi8KICAgICBjb3VudCA9IG5ldHNubXBfdGFibGVfc2V0X251bV9yb3dzKG5sbUxvZ1RhYmxlKTsKICAgICBERUJVR01TR1RMKCgibm90aWZpY2F0aW9uX2xvZyIsCi0gICAgICAgICAgICAgICAgImxvZ2dlZCBub3RpZmljYXRpb25zICVkOyBtYXggJWRcbiIsCisgICAgICAgICAgICAgICAgImxvZ2dlZCBub3RpZmljYXRpb25zICVsdTsgbWF4ICVsdVxuIiwKICAgICAgICAgICAgICAgICAgICAgY291bnQsIG1heF9sb2dnZWQpKTsKICAgICBpZiAoY291bnQgPiBtYXhfbG9nZ2VkKSB7CiAgICAgICAgIGNvdW50ID0gY291bnQgLSBtYXhfbG9nZ2VkOwotICAgICAgICBERUJVR01TR1RMKCgibm90aWZpY2F0aW9uX2xvZyIsICJyZW1vdmluZyAlZCBleHRyYSBub3RpZmljYXRpb25zXG4iLAorICAgICAgICBERUJVR01TR1RMKCgibm90aWZpY2F0aW9uX2xvZyIsICJyZW1vdmluZyAlbHUgZXh0cmEgbm90aWZpY2F0aW9uc1xuIiwKICAgICAgICAgICAgICAgICAgICAgY291bnQpKTsKICAgICAgICAgbmV0c25tcF9ub3RpZl9sb2dfcmVtb3ZlX29sZGVzdChjb3VudCk7CiAgICAgfQpAQCAtMTY1LDEzICsxNzIsMTMgQEAKICAgICAgICAgZGF0YSA9IChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2UgKikgcm93LT5kYXRhOwogICAgICAgICBkYXRhID0gbmV0c25tcF90YWJsZV9kYXRhX3NldF9maW5kX2NvbHVtbihkYXRhLCBDT0xVTU5fTkxNTE9HVElNRSk7CiAKLSAgICAgICAgaWYgKHVwdGltZSA8ICgobG9uZykoKihkYXRhLT5kYXRhLmludGVnZXIpICsgbWF4X2FnZSAqIDEwMCAqIDYwKSkpCisgICAgICAgIGlmICh1cHRpbWUgPCAoKHVfbG9uZykoKihkYXRhLT5kYXRhLmludGVnZXIpICsgbWF4X2FnZSAqIDEwMCAqIDYwKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytjb3VudDsKICAgICB9CiAKICAgICBpZiAoY291bnQpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5vdGlmaWNhdGlvbl9sb2ciLCAicmVtb3ZpbmcgJWQgZXhwaXJlZCBub3RpZmljYXRpb25zXG4iLAorICAgICAgICBERUJVR01TR1RMKCgibm90aWZpY2F0aW9uX2xvZyIsICJyZW1vdmluZyAlbHUgZXhwaXJlZCBub3RpZmljYXRpb25zXG4iLAogICAgICAgICAgICAgICAgICAgICBjb3VudCkpOwogICAgICAgICBuZXRzbm1wX25vdGlmX2xvZ19yZW1vdmVfb2xkZXN0KGNvdW50KTsKICAgICB9CkBAIC00NjcsOCArNDc0LDEwIEBACiAgICAgICogY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZ2V0IHNldCB0byBhIHZhbHVlIGFuZCB0aHVzCiAgICAgICogbm90aWZpY2F0aW9ucyBtdXN0IGJlIHBvc3NpYmx5IGRlbGV0ZWQgZnJvbSBvdXIgYXJjaGl2ZXMuCiAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGlmIChyZXFpbmZvLT5tb2RlID09IE1PREVfU0VUX0NPTU1JVCkKICAgICAgICAgY2hlY2tfbG9nX3NpemUoMCwgTlVMTCk7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCkBAIC01NjIsNyArNTcxLDcgQEAKICAgICBuZXRzbm1wX2RlbGV0ZV90YWJsZV9kYXRhX3NldChubG1Mb2dUYWJsZSk7CiAgICAgbmxtTG9nVGFibGUgPSBOVUxMOwogCi0gICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKG5sbV9tb2R1bGVfb2lkLCBPSURfTEVOR1RIKG5sbV9tb2R1bGVfb2lkKSk7CisgICAgVU5SRUdJU1RFUl9TWVNPUl9FTlRSWShubG1fbW9kdWxlX29pZCk7CiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jCmluZGV4IDg5NzM1NDYuLmU5YjExZDMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuYwpAQCAtMTAsOSArMTAsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTI2LDEyICsyMywxNiBAQAogLyoKICAqIG1pbmltYWwgaW5jbHVkZSBkaXJlY3RpdmVzIAogICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJoZWFkZXJfY29tcGxleC5oIgogI2luY2x1ZGUgInNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaCIKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlYWRlcl9jb21wbGV4X2ZpbmRfZW50cnkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlX3ZhcmlhYmxlc19vaWQ6CkBAIC01NywxMyArNTgsMTMgQEAKICAgICAgKiBtYWdpYyBudW1iZXIgICAgICAgICwgdmFyaWFibGUgdHlwZSAsIHJvL3J3ICwgY2FsbGJhY2sgZm4gICwgTCwgb2lkc3VmZml4IAogICAgICAqLwogI2RlZmluZSAgIFNOTVBOT1RJRllGSUxURVJQUk9GSUxFTkFNRSAgMwotICAgIHtTTk1QTk9USUZZRklMVEVSUFJPRklMRU5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7U05NUE5PVElGWUZJTFRFUlBST0ZJTEVOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLCAyLCB7MSwgMX19LAogI2RlZmluZSAgIFNOTVBOT1RJRllGSUxURVJQUk9GSUxFU1RPUlRZUEUgIDQKLSAgICB7U05NUE5PVElGWUZJTFRFUlBST0ZJTEVTVE9SVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUE5PVElGWUZJTFRFUlBST0ZJTEVTVE9SVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUsIDIsIHsxLCAyfX0sCiAjZGVmaW5lICAgU05NUE5PVElGWUZJTFRFUlBST0ZJTEVST1dTVEFUVVMgIDUKLSAgICB7U05NUE5PVElGWUZJTFRFUlBST0ZJTEVST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBOT1RJRllGSUxURVJQUk9GSUxFUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSwgMiwgezEsIDN9fSwKIAogfTsKQEAgLTEzNCw3ICsxMzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRoZWRhdGEpCiB7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzID0gTlVMTDsKLQorICAgIGludCByZXRWYWw7CiAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSIsICJhZGRpbmcgZGF0YS4uLiAgIikpOwogICAgIC8qCkBAIC0xNDYsMTMgKzE0NywxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSB0aGVkYXRhLT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWRhdGEtPnNubXBUYXJnZXRQYXJhbXNOYW1lTGVuKTsKIAotICAgIGhlYWRlcl9jb21wbGV4X2FkZF9kYXRhKCZzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlU3RvcmFnZSwgdmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVkYXRhKTsKLSAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZSIsICJyZWdpc3RlcmVkIGFuIGVudHJ5XG4iKSk7CisgICAgaWYgKGhlYWRlcl9jb21wbGV4X21heWJlX2FkZF9kYXRhKCZzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlU3RvcmFnZSwgdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlZGF0YSwgMSkgIT0gTlVMTCl7CisgICAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUiLCAicmVnaXN0ZXJlZCBhbiBlbnRyeVxuIikpOworICAgICAgIHJldFZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKKyAgICB9ZWxzZXsKKyAgICAgICByZXRWYWwgPSBTTk1QRVJSX0dFTkVSUjsgIAkKKyAgICB9CiAKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlIiwgImRvbmUuXG4iKSk7Ci0gICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICByZXR1cm4gcmV0VmFsOwogfQogCiAKQEAgLTIwMyw3ICsyMDgsMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlUm93U3RhdHVzLCAmdG1waW50KTsKIAotICAgIHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGVfYWRkKFN0b3JhZ2VUbXApOworICAgIGlmIChzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlX2FkZChTdG9yYWdlVG1wKSAhPSBTTk1QRVJSX1NVQ0NFU1MpeworICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+c25tcFRhcmdldFBhcmFtc05hbWUpOworICAgICAgICBTTk1QX0ZSRUUoU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lKTsKKyAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXApOworICAgIH0KIAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlIiwgImRvbmUuXG4iKSk7CiB9CkBAIC0yMjEsNyArMjMwLDYgQEAKIHsKICAgICBjaGFyICAgICAgICAgICAgbGluZVtTTk1QX01BWEJVRl07CiAgICAgY2hhciAgICAgICAgICAgKmNwdHI7Ci0gICAgc2l6ZV90ICAgICAgICAgIHRtcGludDsKICAgICBzdHJ1Y3Qgc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZV9kYXRhICpTdG9yYWdlVG1wOwogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaGNpbmRleDsKIApAQCAtMjU1LDEyICsyNjMsMTIgQEAKICAgICAgICAgICAgICAgICByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9JTlRFR0VSLCBjcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclByb2ZpbGVTdG9yVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0bXBpbnQpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgICAgICAgICBjcHRyID0KICAgICAgICAgICAgICAgICByZWFkX2NvbmZpZ19zdG9yZV9kYXRhKEFTTl9JTlRFR0VSLCBjcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VUbXAtPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcE5vdGlmeUZpbHRlclByb2ZpbGVSb3dTdGF0dXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdG1waW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwogCiAgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CiAgICAgICAgIH0KQEAgLTMwNCw2ICszMTIsNyBAQAogICAgIH0KIAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUE5PVElGWUZJTFRFUlBST0ZJTEVOQU1FOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lOwogICAgICAgICBicmVhazsKQEAgLTMxNSw3ICszMjQsNyBAQAogICAgIGNhc2UgU05NUE5PVElGWUZJTFRFUlBST0ZJTEVST1dTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVJvd1N0YXR1czsKICAgICAgICAgYnJlYWs7Ci0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQpAQCAtMzQ1LDYgKzM1NCw3IEBACiAgICAgZGVmYXVsdDoKICAgICAgICAgRVJST1JfTVNHKCIiKTsKICAgICB9CisKICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtMzUyLDYgKzM2Miw4IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZV9kYXRhICpTdG9yYWdlTmV3OwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKKwogaW50CiB3cml0ZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWUoaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtNDAyLDcgKzQxNCw3IEBACiAgICAgICAgICAqLwogICAgICAgICB0bXB2YXIgPSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZU5hbWU7CiAgICAgICAgIHRtcGxlbiA9IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZUxlbjsKLSAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lID0gY2FsbG9jKDEsIHZhcl92YWxfbGVuICsgMSk7CisgICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZSA9IChjaGFyKiljYWxsb2MoMSwgdmFyX3ZhbF9sZW4gKyAxKTsKICAgICAgICAgaWYgKE5VTEwgPT0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeUZpbHRlclByb2ZpbGVOYW1lKQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CiAgICAgICAgIGJyZWFrOwpAQCAtNDQyLDYgKzQ1NCw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC01MzQsNyArNTQ3LDcgQEAKICAgICAgICAgICogVGhpbmdzIGFyZSB3b3JraW5nIHdlbGwsIHNvIGl0J3Mgbm93IHNhZmUgdG8gbWFrZSB0aGUgY2hhbmdlCiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KLQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtNjQ5LDYgKzY2Miw4IEBACiAKICAgICAgICAgICAgIFN0b3JhZ2VOZXcgPQogICAgICAgICAgICAgICAgIFNOTVBfTUFMTE9DX1NUUlVDVChzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlX2RhdGEpOworICAgICAgICAgICAgaWYgKFN0b3JhZ2VOZXcgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICAgICAgU3RvcmFnZU5ldy0+c25tcFRhcmdldFBhcmFtc05hbWUgPQogICAgICAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKHZhcnMtPnZhbC5zdHJpbmcsIHZhcnMtPnZhbF9sZW4pOwogICAgICAgICAgICAgU3RvcmFnZU5ldy0+c25tcFRhcmdldFBhcmFtc05hbWVMZW4gPSB2YXJzLT52YWxfbGVuOwpAQCAtNzg1LDEyICs4MDAsMTUgQEAKICAgICAgICAgICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVJvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKICAgICAgICAgICAgIFN0b3JhZ2VOZXcgPSBOVUxMOwogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCisKIAogY2hhciAgICAgICAgICAgKgogZ2V0X0ZpbHRlclByb2ZpbGVOYW1lKGNvbnN0IGNoYXIgKnBhcmFtTmFtZSwgc2l6ZV90IHBhcmFtTmFtZV9sZW4sCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaAppbmRleCA5NzM0Y2JlLi42MTZiY2RjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlLmgKQEAgLTU1LDkgKzU1LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKik7CiAgICAgIFNOTVBDYWxsYmFjayAgICBzdG9yZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlTmFtZTsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlU3RvclR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVJvd1N0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAgY2hhciAgICAgICAgICAgKmdldF9GaWx0ZXJQcm9maWxlTmFtZShjb25zdCBjaGFyICpwYXJhbU5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHBhcmFtTmFtZV9sZW4sCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmMKaW5kZXggM2QzZTQwMS4uOTFhZGIyZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuYwpAQCAtOCwxMSArOCw5IEBACiAgKiBUaGlzIHNob3VsZCBhbHdheXMgYmUgaW5jbHVkZWQgZmlyc3QgYmVmb3JlIGFueXRoaW5nIGVsc2UgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTM4LDEyICszNiwxNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X2NhbGxiYWNrcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oPgotI2luY2x1ZGUgIm1pYmdyb3VwL21pYklJL3N5c09SVGFibGUuaCIKKyNpbmNsdWRlICJuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgiCiAKICNpZmRlZiBVU0lOR19OT1RJRklDQVRJT05fTE9HX01JQl9OT1RJRklDQVRJT05fTE9HX01PRFVMRQogIyAgIGluY2x1ZGUgIm5vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaCIKICNlbmRpZgogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVhZGVyX2NvbXBsZXhfZmluZF9lbnRyeSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogU05NUENhbGxiYWNrICAgIHN0b3JlX3NubXBOb3RpZnlUYWJsZTsKIAogLyoKQEAgLTYwLDExICs2Miw2IEBACiBzdGF0aWMgb2lkIHNubXBOb3RpZnlGdWxsQ29tcGxpYW5jZVtdID0KICAgICB7IFNOTVBfT0lEX1NOTVBNT0RVTEVTLCAxMywgMywgMSwgMyB9OyAvKiBTTk1QLU5PVElGSUNBVElPTi1NSUI6OnNubXBOb3RpZnlGdWxsQ29tcGxpYW5jZSAqLwogCi12b2lkIHNodXRkb3duX3NubXBOb3RpZnlUYWJsZSh2b2lkKQotewotICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZShzbm1wTm90aWZ5RnVsbENvbXBsaWFuY2UsIE9JRF9MRU5HVEgoc25tcE5vdGlmeUZ1bGxDb21wbGlhbmNlKSk7Ci19Ci0KIAogLyoKICAqIHZhcmlhYmxlMiBzbm1wTm90aWZ5VGFibGVfdmFyaWFibGVzOgpAQCAtNzgsMTUgKzc1LDE3IEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBTTk1QTk9USUZZVEFHICAgICAgICAgNAotICAgIHtTTk1QTk9USUZZVEFHLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsIHsxLCAyfX0sCisgICAge1NOTVBOT1RJRllUQUcsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwgezEsIDJ9fSwKICNkZWZpbmUgICBTTk1QTk9USUZZVFlQRSAgICAgICAgNQotICAgIHtTTk1QTk9USUZZVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwgezEsIDN9fSwKKyAgICB7U05NUE5PVElGWVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsIHsxLCAzfX0sCiAjZGVmaW5lICAgU05NUE5PVElGWVNUT1JBR0VUWVBFICA2Ci0gICAge1NOTVBOT1RJRllTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NubXBOb3RpZnlUYWJsZSwgMiwKLSAgICAgezEsIDR9fSwKKyAgICB7U05NUE5PVElGWVNUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc25tcE5vdGlmeVRhYmxlLCAyLCB7MSwgNH19LAogI2RlZmluZSAgIFNOTVBOT1RJRllST1dTVEFUVVMgICA3Ci0gICAge1NOTVBOT1RJRllST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsCi0gICAgIHsxLCA1fX0sCisgICAge1NOTVBOT1RJRllST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbm1wTm90aWZ5VGFibGUsIDIsIHsxLCA1fX0sCiAKIH07CiAvKgpAQCAtMTEwLDggKzEwOSw4IEBACiAgICAgc2l6ZV90ICAgICAgICAgICAgICAgICBwcm9maWxlTmFtZUxlbjsKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZwLCAqaGVhZDsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgIHZiX29pZF9leGNsdWRlZCA9IDA7Ci0gICAgZXh0ZXJuIG9pZCAgICAgICAgICAgICBzbm1wdHJhcF9vaWRbXTsKLSAgICBleHRlcm4gc2l6ZV90ICAgICAgICAgIHNubXB0cmFwX29pZF9sZW47CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgICBzbm1wdHJhcF9vaWRbXTsKKyAgICBleHRlcm4gY29uc3Qgc2l6ZV90ICAgIHNubXB0cmFwX29pZF9sZW47CiAKICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHBhcmFtTmFtZSk7CiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBwZHUpOwpAQCAtMjE5LDcgKzIxOCw3IEBACiAgICAgbmV0c25tcF9wZHUgICAgKnRlbXBsYXRlX3BkdSA9IChuZXRzbm1wX3BkdSAqKSBzZXJ2ZXJhcmc7CiAgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMCwgc2VuZCA9IDA7CiAKLSAgICBERUJVR01TR1RMKCgic2VuZF9ub3RpZmljYXRpb25zIiwgInN0YXJ0aW5nOiBwZHU9JXgsIHZhcnM9JXhcbiIsCisgICAgREVCVUdNU0dUTCgoInNlbmRfbm90aWZpY2F0aW9ucyIsICJzdGFydGluZzogcGR1PSVwLCB2YXJzPSVwXG4iLAogICAgICAgICAgICAgICAgIHRlbXBsYXRlX3BkdSwgdGVtcGxhdGVfcGR1LT52YXJpYWJsZXMpKTsKIAogICAgIGZvciAoaHB0ciA9IHNubXBOb3RpZnlUYWJsZVN0b3JhZ2U7IGhwdHI7IGhwdHIgPSBocHRyLT5uZXh0KSB7CkBAIC0yODYsNyArMjg1LDcgQEAKICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqcHRyOwogICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqcHB0cjsKICAgICBzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEgKm5wdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGNvbmZpcm0sIGk7CisgICAgaW50ICAgICAgICAgICAgIGNvbmZpcm0sIGksIGJ1ZkxlbjsKICAgICBjaGFyICAgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXTsKICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CiAgICAgc3RydWN0IGFnZW50X2FkZF90cmFwX2FyZ3MgKmFyZ3MgPQpAQCAtMzAzLDggKzMwMiw5IEBACiAgICAgICogWFhYOiBTVEFSVCBtb3ZlIHRhcmdldCBjcmVhdGlvbiB0byB0YXJnZXQgY29kZSAKICAgICAgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0VOVFJJRVM7IGkrKykgewotICAgICAgICBzcHJpbnRmKGJ1ZiwgImludGVybmFsJWQiLCBpKTsKLSAgICAgICAgaWYgKGdldF9hZGRyRm9yTmFtZShidWYpID09IE5VTEwgJiYgZ2V0X3BhcmFtRW50cnkoYnVmKSA9PSBOVUxMKQorICAgICAgICBidWZMZW4gPSBzcHJpbnRmKGJ1ZiwgImludGVybmFsJWQiLCBpKTsKKyAgICAgICAgaWYgKGdldF9hZGRyRm9yTmFtZTIoYnVmLCBidWZMZW4pID09IE5VTEwgJiYKKyAgICAgICAgICAgIGdldF9wYXJhbUVudHJ5KGJ1ZikgPT0gTlVMTCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBpZiAoaSA9PSBNQVhfRU5UUklFUykgewpAQCAtMzI2LDcgKzMyNiw4IEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBwdHIgPSBzbm1wVGFyZ2V0QWRkclRhYmxlX2NyZWF0ZSgpOwotICAgIHB0ci0+bmFtZSA9IHN0cmR1cChidWYpOworICAgIHB0ci0+bmFtZURhdGEgPSBuZXRzbm1wX21lbWR1cChidWYsIGJ1Zkxlbik7CisgICAgcHRyLT5uYW1lTGVuID0gYnVmTGVuOwogICAgIG1lbWNweShwdHItPnREb21haW4sIHQtPmRvbWFpbiwgdC0+ZG9tYWluX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKICAgICBwdHItPnREb21haW5MZW4gPSB0LT5kb21haW5fbGVuZ3RoOwogICAgIHB0ci0+dEFkZHJlc3NMZW4gPSB0LT5yZW1vdGVfbGVuZ3RoOwpAQCAtMzM1LDggKzMzNiw4IEBACiAgICAgcHRyLT50aW1lb3V0ID0gc3MtPnRpbWVvdXQgLyAxMDAwMDsKICAgICBwdHItPnJldHJ5Q291bnQgPSBzcy0+cmV0cmllczsKICAgICBTTk1QX0ZSRUUocHRyLT50YWdMaXN0KTsKLSAgICBwdHItPnRhZ0xpc3QgPSBzdHJkdXAocHRyLT5uYW1lKTsKLSAgICBwdHItPnBhcmFtcyA9IHN0cmR1cChwdHItPm5hbWUpOworICAgIHB0ci0+dGFnTGlzdCA9IHN0cmR1cChidWYpOyAvKiBzdHJkdXAgb2sgc2luY2UgYnVmIGNvbnRhaW5zICdpbnRlcm5hbCVkJyAqLworICAgIHB0ci0+cGFyYW1zID0gc3RyZHVwKGJ1Zik7CiAgICAgcHRyLT5zdG9yYWdlVHlwZSA9IFNUX1JFQURPTkxZOwogICAgIHB0ci0+cm93U3RhdHVzID0gUlNfQUNUSVZFOwogICAgIHB0ci0+c2VzcyA9IHNzOwpAQCAtMzUzLDYgKzM1NCwxMCBAQAogICAgICAgICBwcHRyLT5zZWNNb2RlbCA9IHNzLT5zZWN1cml0eU1vZGVsOwogICAgICAgICBwcHRyLT5zZWNMZXZlbCA9IHNzLT5zZWN1cml0eUxldmVsOwogICAgICAgICBwcHRyLT5zZWNOYW1lID0gKGNoYXIgKikgbWFsbG9jKHNzLT5zZWN1cml0eU5hbWVMZW4gKyAxKTsKKyAgICAgICAgaWYgKHBwdHItPnNlY05hbWUgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZShwcHRyKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CiAgICAgICAgIG1lbWNweSgodm9pZCAqKSBwcHRyLT5zZWNOYW1lLCAodm9pZCAqKSBzcy0+c2VjdXJpdHlOYW1lLAogICAgICAgICAgICAgICAgc3MtPnNlY3VyaXR5TmFtZUxlbik7CiAgICAgICAgIHBwdHItPnNlY05hbWVbc3MtPnNlY3VyaXR5TmFtZUxlbl0gPSAwOwpAQCAtMzY4LDYgKzM3MywxMCBAQAogICAgICAgICBwcHRyLT5zZWNOYW1lID0gTlVMTDsKICAgICAgICAgaWYgKHNzLT5jb21tdW5pdHkgJiYgKHNzLT5jb21tdW5pdHlfbGVuID4gMCkpIHsKICAgICAgICAgICAgIHBwdHItPnNlY05hbWUgPSAoY2hhciAqKSBtYWxsb2Moc3MtPmNvbW11bml0eV9sZW4gKyAxKTsKKyAgICAgICAgICAgIGlmIChwcHRyLT5zZWNOYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKHBwdHIpOworICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQogICAgICAgICAgICAgbWVtY3B5KCh2b2lkICopIHBwdHItPnNlY05hbWUsICh2b2lkICopIHNzLT5jb21tdW5pdHksCiAgICAgICAgICAgICAgICAgICAgc3MtPmNvbW11bml0eV9sZW4pOwogICAgICAgICAgICAgcHB0ci0+c2VjTmFtZVtzcy0+Y29tbXVuaXR5X2xlbl0gPSAwOwpAQCAtMzg1LDYgKzM5NCw4IEBACiAgICAgICogbm90aWZ5IHRhYmxlIAogICAgICAqLwogICAgIG5wdHIgPSBTTk1QX01BTExPQ19TVFJVQ1Qoc25tcE5vdGlmeVRhYmxlX2RhdGEpOworICAgIGlmIChucHRyID09IE5VTEwpCisgICAgICAgIHJldHVybiAwOwogICAgIG5wdHItPnNubXBOb3RpZnlOYW1lID0gc3RyZHVwKGJ1Zik7CiAgICAgbnB0ci0+c25tcE5vdGlmeU5hbWVMZW4gPSBzdHJsZW4oYnVmKTsKICAgICBucHRyLT5zbm1wTm90aWZ5VGFnID0gc3RyZHVwKGJ1Zik7CkBAIC00MTEsMTggKzQyMiwxOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQogewogICAgIHN0cnVjdCBoZWFkZXJfY29tcGxleF9pbmRleCAqaHB0ciwgKm5ocHRyOwotICAgIHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YSAqbnB0cjsKIAogICAgIGZvciAoaHB0ciA9IHNubXBOb3RpZnlUYWJsZVN0b3JhZ2U7IGhwdHI7IGhwdHIgPSBuaHB0cikgewotICAgICAgICBucHRyID0gKHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YSAqKSBocHRyLT5kYXRhOworICAgICAgICBzdHJ1Y3Qgc25tcE5vdGlmeVRhYmxlX2RhdGEgKm5wdHIgPSBocHRyLT5kYXRhOwogICAgICAgICBuaHB0ciA9IGhwdHItPm5leHQ7CiAgICAgICAgIGlmIChucHRyLT5zbm1wTm90aWZ5U3RvcmFnZVR5cGUgPT0gU1RfUkVBRE9OTFkpIHsKICAgICAgICAgICAgIGhlYWRlcl9jb21wbGV4X2V4dHJhY3RfZW50cnkoJnNubXBOb3RpZnlUYWJsZVN0b3JhZ2UsIGhwdHIpOwotICAgICAgICAgICAgU05NUF9GUkVFKG5wdHItPnNubXBOb3RpZnlOYW1lKTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShucHRyLT5zbm1wTm90aWZ5VGFnKTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShucHRyKTsKKyAgICAgICAgICAgIGZyZWUobnB0ci0+c25tcE5vdGlmeU5hbWUpOworICAgICAgICAgICAgZnJlZShucHRyLT5zbm1wTm90aWZ5VGFnKTsKKyAgICAgICAgICAgIGZyZWUobnB0cik7CiAgICAgICAgIH0KICAgICB9CisgICAgc25tcE5vdGlmeVRhYmxlU3RvcmFnZSA9IE5VTEw7CiAgICAgcmV0dXJuICgwKTsKIH0KIApAQCAtNDgyLDYgKzQ5MywzNyBAQAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAiZG9uZS5cbiIpKTsKIH0KIAordm9pZAorc2h1dGRvd25fc25tcE5vdGlmeVRhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJzaHV0dGluZyBkb3duIC4uLiAiKSk7CisKKyAgICBub3RpZnlUYWJsZV91bnJlZ2lzdGVyX25vdGlmaWNhdGlvbnMoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUFJFX1VQREFURV9DT05GSUcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1BSRV9VUERBVEVfQ09ORklHLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3RpZnlUYWJsZV91bnJlZ2lzdGVyX25vdGlmaWNhdGlvbnMsIE5VTEwsIEZBTFNFKTsKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfUkVHSVNURVJfTk9USUZJQ0FUSU9OUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm90aWZ5VGFibGVfcmVnaXN0ZXJfbm90aWZpY2F0aW9ucywgTlVMTCwgRkFMU0UpOworICAgIHNubXBfdW5yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19TRU5EX1RSQVAyLCBzZW5kX25vdGlmaWNhdGlvbnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIEZBTFNFKTsKKyNpZm5kZWYgRElTQUJMRV9TTk1QVjEKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUERfQ0FMTEJBQ0tfU0VORF9UUkFQMSwgc2VuZF9ub3RpZmljYXRpb25zLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBGQUxTRSk7CisjZW5kaWYKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX3NubXBOb3RpZnlUYWJsZSwgTlVMTCwgRkFMU0UpOworCisgICAgVU5SRUdJU1RFUl9TWVNPUl9FTlRSWShzbm1wTm90aWZ5RnVsbENvbXBsaWFuY2UpOworCisgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJkb25lLlxuIikpOworfQogCiAvKgogICogc25tcE5vdGlmeVRhYmxlX2FkZCgpOiBhZGRzIGEgc3RydWN0dXJlIG5vZGUgdG8gb3VyIGRhdGEgc2V0IApAQCAtNDkwLDcgKzUzMiw3IEBACiBzbm1wTm90aWZ5VGFibGVfYWRkKHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YSAqdGhlZGF0YSkKIHsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMgPSBOVUxMOwotCisgICAgaW50IHJldFZhbDsJCiAKICAgICBERUJVR01TR1RMKCgic25tcE5vdGlmeVRhYmxlIiwgImFkZGluZyBkYXRhLi4uICAiKSk7CiAgICAgLyoKQEAgLTUwMywxMiArNTQ1LDE3IEBACiAKIAogCi0gICAgaGVhZGVyX2NvbXBsZXhfYWRkX2RhdGEoJnNubXBOb3RpZnlUYWJsZVN0b3JhZ2UsIHZhcnMsIHRoZWRhdGEpOwotICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAicmVnaXN0ZXJlZCBhbiBlbnRyeVxuIikpOworICAgIGlmIChoZWFkZXJfY29tcGxleF9tYXliZV9hZGRfZGF0YSgmc25tcE5vdGlmeVRhYmxlU3RvcmFnZSwgdmFycywgdGhlZGF0YSwgMSkKKyAgICAgICAgIT0gTlVMTCl7CisgICAgCURFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAicmVnaXN0ZXJlZCBhbiBlbnRyeVxuIikpOworCXJldFZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKKyAgICB9ZWxzZXsKKyAgICAgICAgcmV0VmFsID0gU05NUEVSUl9HRU5FUlI7IAorICAgIH0JCiAKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wTm90aWZ5VGFibGUiLCAiZG9uZS5cbiIpKTsKLSAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgIHJldHVybiByZXRWYWw7CiB9CiAKIApAQCAtNTU5LDE1ICs2MDYsMjEgQEAKICAgICBsaW5lID0KICAgICAgICAgcmVhZF9jb25maWdfcmVhZF9kYXRhKEFTTl9JTlRFR0VSLCBsaW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJlN0b3JhZ2VUbXAtPnNubXBOb3RpZnlTdG9yYWdlVHlwZSwgJnRtcGludCk7CisgICAgaWYgKCFTdG9yYWdlVG1wLT5zbm1wTm90aWZ5U3RvcmFnZVR5cGUpCisgICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlTdG9yYWdlVHlwZSA9IFNUX1JFQURPTkxZOwogCiAgICAgbGluZSA9CiAgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfZGF0YShBU05fSU5URUdFUiwgbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZTdG9yYWdlVG1wLT5zbm1wTm90aWZ5Um93U3RhdHVzLCAmdG1waW50KTsKKyAgICBpZiAoIVN0b3JhZ2VUbXAtPnNubXBOb3RpZnlSb3dTdGF0dXMpCisgICAgICAgIFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlSb3dTdGF0dXMgPSBSU19BQ1RJVkU7CiAKIAotCi0KLSAgICBzbm1wTm90aWZ5VGFibGVfYWRkKFN0b3JhZ2VUbXApOworICAgIGlmIChzbm1wTm90aWZ5VGFibGVfYWRkKFN0b3JhZ2VUbXApICE9IFNOTVBFUlJfU1VDQ0VTUyl7CisgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT5zbm1wTm90aWZ5TmFtZSk7CisgICAgICAgIFNOTVBfRlJFRShTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnKTsKKyAgICAgICAgU05NUF9GUkVFKFN0b3JhZ2VUbXApOworICAgIH0KIAogCiAgICAgREVCVUdNU0dUTCgoInNubXBOb3RpZnlUYWJsZSIsICJkb25lLlxuIikpOwpAQCAtNjY4LDYgKzcyMSw3IEBACiAgICAgfQogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QTk9USUZZVEFHOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcE5vdGlmeVRhZzsKICAgICAgICAgYnJlYWs7CkBAIC02ODAsNiArNzM0LDcgQEAKICAgICBjYXNlIFNOTVBOT1RJRllST1dTVEFUVVM6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wTm90aWZ5Um93U3RhdHVzOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQpAQCAtNjg4LDYgKzc0Myw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1JFQURfU1VQUE9SVAogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBTTk1QTk9USUZZVEFHOgogICAgICAgICAqdmFyX2xlbiA9IFN0b3JhZ2VUbXAtPnNubXBOb3RpZnlUYWdMZW47CkBAIC03MDgsNiArNzY0LDcgQEAKICAgICBkZWZhdWx0OgogICAgICAgICBFUlJPUl9NU0coIiIpOwogICAgIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19SRUFEX1NVUFBPUlQgKi8gCiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTczNiw2ICs3OTMsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNubXBOb3RpZnlUYWJsZV9kYXRhICpTdG9yYWdlTmV3OwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAKKwogaW50CiB3cml0ZV9zbm1wTm90aWZ5VGFnKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCkBAIC03NzAsMTAgKzgyOSwxMCBAQAogICAgICAgICBpZiAodmFyX3ZhbF90eXBlICE9IEFTTl9PQ1RFVF9TVFIpIHsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHZhcl92YWxfbGVuIDwgMCB8fCB2YXJfdmFsX2xlbiA+IDI1NSkgeworICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiAyNTUpIHsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKICAgICAgICAgfQotICAgICAgICBpZiAoIXNubXBUYWdWYWxpZCh2YXJfdmFsLCB2YXJfdmFsX2xlbikpIHsKKyAgICAgICAgaWYgKCFzbm1wVGFnVmFsaWQoKGNoYXIgKikgdmFyX3ZhbCwgdmFyX3ZhbF9sZW4pKSB7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTc4NSw3ICs4NDQsNyBAQAogICAgICAgICAgKi8KICAgICAgICAgdG1wdmFyID0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZzsKICAgICAgICAgdG1wbGVuID0gU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZ0xlbjsKLSAgICAgICAgU3RvcmFnZVRtcC0+c25tcE5vdGlmeVRhZyA9IGNhbGxvYygxLCB2YXJfdmFsX2xlbiArIDEpOworICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnID0gKGNoYXIqKWNhbGxvYygxLCB2YXJfdmFsX2xlbiArIDEpOwogICAgICAgICBpZiAoTlVMTCA9PSBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5VGFnKQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CiAgICAgICAgIGJyZWFrOwpAQCAtODIxLDYgKzg4MCw3IEBACiAgICAgICAgICAqIHBlcm1hbmVudGx5LiAgTWFrZSBzdXJlIHRoYXQgYW55dGhpbmcgZG9uZSBoZXJlIGNhbid0IGZhaWwhIAogICAgICAgICAgKi8KICAgICAgICAgU05NUF9GUkVFKHRtcHZhcik7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEwNDEsNyArMTEwMSw3IEBACiAgICAgICAgICAgICBpZiAoU3RvcmFnZU5ldyA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBTdG9yYWdlTmV3LT5zbm1wTm90aWZ5TmFtZSA9IGNhbGxvYyggMSwgdnAtPnZhbF9sZW4gKyAxICk7CisgICAgICAgICAgICBTdG9yYWdlTmV3LT5zbm1wTm90aWZ5TmFtZSA9IChjaGFyKiljYWxsb2MoIDEsIHZwLT52YWxfbGVuICsgMSApOwogICAgICAgICAgICAgaWYgKFN0b3JhZ2VOZXctPnNubXBOb3RpZnlOYW1lID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKICAgICAgICAgICAgIH0KQEAgLTExNTYsNyArMTIxNiw5IEBACiAgICAgICAgICAgICBTdG9yYWdlVG1wLT5zbm1wTm90aWZ5Um93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOwogICAgICAgICAgICAgU3RvcmFnZU5ldyA9IE5VTEw7CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmggYi9hZ2VudC9taWJncm91cC9ub3RpZmljYXRpb24vc25tcE5vdGlmeVRhYmxlLmgKaW5kZXggOWE5MzY0NS4uMThiZjFiZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaApAQCAtNjQsMTAgKzY0LDEyIEBACiAgICAgIGludCAgICAgICAgICAgICBzbm1wTm90aWZ5VGFibGVfYWRkKHN0cnVjdCBzbm1wTm90aWZ5VGFibGVfZGF0YQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGhlZGF0YSk7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5VGFnOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcE5vdGlmeVR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5U3RvcmFnZVR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wTm90aWZ5Um93U3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMDlkZjcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi5oCkBAIC0wLDAgKzEsOCBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlKQorY29uZmlnX2FkZF9taWIoUk1PTi1NSUIpCisKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzNWRkNjEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9kYXRhX2FjY2Vzcy9ldGhlcnN0YXRzLmgKQEAgLTAsMCArMSw3IEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworCisjaWYgZGVmaW5lZChsaW51eCkKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2RhdGFfYWNjZXNzL2V0aGVyc3RhdHNfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNmE0MmMzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0c19saW51eC5jCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAicm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5oIgorI2luY2x1ZGUgInJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MuaCIKKyNpbmNsdWRlICJybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oIgorCisvKgorICogQHJldHZhbCAgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGdldGlmYWRkcnMgZmFpbGVkIAorICogQHJldHZhbCAtMiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQKKyAqLworCitzdHJ1Y3QgaWZuYW1lICoKK2V0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCwgaW50ICpyZXR2YWwpCit7CisgICAgc3RydWN0IGlmYWRkcnMgKmFkZHJzID0gTlVMTCwgKnAgPSBOVUxMOworICAgIHN0cnVjdCBpZm5hbWUgKm5hbWVwdHIxPU5VTEwsICpuYW1lcHRyMiA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKChnZXRpZmFkZHJzKCZhZGRycykpIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2dldCIsCisgICAgICAgICAgICAgICAgICAgICJnZXRpZmFkZHJzIGZhaWxlZFxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX25hbWVfbGlzdF9nZXQsIGdldGlmYWRkcnMgZmFpbGVkXG4iKTsKKyAgICAgICAgKnJldHZhbCA9IC0xOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBmb3IgKHAgPSBhZGRyczsgcDsgcCA9IHAtPmlmYV9uZXh0KSB7CisKKyAgICAgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgICAgIGxpc3RfaGVhZCA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IGlmbmFtZSkpOworICAgICAgICAgICAgaWYgKCFsaXN0X2hlYWQpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2dldCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1lbW9yeSBhbGxvY2F0aW9uIGZhaWxlZFxuIikpOworICAgICAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgICAgICBmcmVlaWZhZGRycyhhZGRycyk7CisgICAgICAgICAgICAgICAgKnJldHZhbCA9IC0yOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtc2V0KGxpc3RfaGVhZCwgMCwgc2l6ZW9mKHN0cnVjdCBpZm5hbWUpKTsKKyAgICAgICAgICAgIHN0cmxjcHkobGlzdF9oZWFkLT5uYW1lLCBwLT5pZmFfbmFtZSwgSUZfTkFNRVNJWkUpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgIGZvciAobmFtZXB0cjEgPSBsaXN0X2hlYWQ7IG5hbWVwdHIxOyBuYW1lcHRyMiA9IG5hbWVwdHIxLCBuYW1lcHRyMSA9IG5hbWVwdHIxLT5pZm5fbmV4dCkKKyAgICAgICAgICAgIGlmICghc3RybmNtcChwLT5pZmFfbmFtZSwgbmFtZXB0cjEtPm5hbWUsIElGX05BTUVTSVpFKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAobmFtZXB0cjEpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBuYW1lcHRyMi0+aWZuX25leHQgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBpZm5hbWUpKTsKKyAgICAgICAgaWYgKCFuYW1lcHRyMi0+aWZuX25leHQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9uYW1lX2xpc3RfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfbmFtZV9saXN0X2dldCwgbWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGV0aGVyc3RhdHNfaW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIChsaXN0X2hlYWQpOworICAgICAgICAgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgICAgICAgICAgKnJldHZhbCA9IC0yOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbmFtZXB0cjIgPSBuYW1lcHRyMi0+aWZuX25leHQ7CisgICAgICAgIG1lbXNldChuYW1lcHRyMiwgMCwgc2l6ZW9mKHN0cnVjdCBpZm5hbWUpKTsKKyAgICAgICAgc3RybGNweShuYW1lcHRyMi0+bmFtZSwgcC0+aWZhX25hbWUsIElGX05BTUVTSVpFKTsKKyAgICAgICAgY29udGludWU7CisgICAgfQorCisgICAgZnJlZWlmYWRkcnMoYWRkcnMpOworICAgICpyZXR2YWwgPSAwOworICAgIHJldHVybiBsaXN0X2hlYWQ7Cit9CisKKworLyoKKyAqIEByZXR2YWwgMCBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIGludmFsaWQgcG9pbnRlcgorICovCisKK2ludAorZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCkKK3sKKyAgICBzdHJ1Y3QgaWZuYW1lICpuYW1lcHRyMSA9IE5VTEwsICpuYW1lcHRyMiA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmICghbGlzdF9oZWFkKSB7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWU6IGludmFsaWQgcG9pbnRlciBsaXN0X2hlYWQiKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX25hbWVfbGlzdF9mcmVlIiwKKyAgICAgICAgICAgICAgICAgICAgImludmFsaWQgcG9pbnRlciBsaXN0X2hlYWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAobmFtZXB0cjEgPSBsaXN0X2hlYWQ7IG5hbWVwdHIxOyBuYW1lcHRyMSA9IG5hbWVwdHIyKSB7CisgICAgICAgICAgICBuYW1lcHRyMiA9IG5hbWVwdHIxLT5pZm5fbmV4dDsKKyAgICAgICAgICAgIGZyZWUgKG5hbWVwdHIxKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIEByZXR2YWwgIDAgOiBub3QgZm91bmQKKyAqIEByZXR2YWwgITAgOiBpZkluZGV4CisgKi8KKworaW50CitldGhlcnN0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCAoaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKSB7CisjaWZuZGVmIFNJT0NHSUZJTkRFWAorICAgIHJldHVybiAwOworI2Vsc2UKKyAgICBzdHJ1Y3QgaWZyZXEgICAgaWZycTsKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwiLCAiaWZpbmRleF9nZXRcbiIpKTsKKworICAgIHJjID0gX2V0aGVyU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DR0lGSU5ERVgsICZpZnJxLCBuYW1lKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0czppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJpZmluZGV4X2dldCBlcnJvciBvbiBpbmVyZmFjZSAnJXMnXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCwgaWZpbmRleF9nZXQgZXJyb3Igb24gaW5lcmZhY2UgJyVzJ1xuIiwgbmFtZSk7CisgICAgICAgIHJldHVybiAwOworCisgICAgfQorCisgICAgcmV0dXJuIGlmcnEuaWZyX2lmaW5kZXg7CisjZW5kaWYgLyogU0lPQ0dJRklOREVYICovCit9CisKKy8qCisgKiBAcmV0dmFsICAwIHN1Y2Nlc3MKKyAqIEByZXR2YWwgLTEgY2Fubm90IGdldCBFVEhUT09MX0RSVklORk8gZmFpbGVkIAorICogQHJldHZhbCAtMiBuX3N0YXRzIHplcm8gLSBubyBzdGF0aXN0Y3MgYXZhaWxhYmxlCisgKiBAcmV0dmFsIC0zIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBob2xkaW5nIHRoZSBzdGF0aXN0aWNzIGZhaWxlZAorICogQHJldHZhbCAtNCBjYW5ub3QgZ2V0IEVUSFRPT0xfR1NUUklOR1MgaW5mb3JtYXRpb24KKyAqIEByZXR2YWwgLTUgY2Fubm90IGdldCBFVEhUT09MX0dTVEFUUyBpbmZvcm1hdGlvbgorICogQHJldHZhbCAtNiBmdW5jdGlvbiBub3Qgc3VwcG9ydGVkIGlmIEhBVkVfTElOVVhfRVRIVE9PTF9IIG5vdCBkZWZpbmVkCisgKi8KKworaW50CitpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ICwgaW50IGZkLCBjb25zdCBjaGFyICpuYW1lKSB7CisKKyNpZmRlZiBIQVZFX0xJTlVYX0VUSFRPT0xfSAorCisgICAgZXRoZXJTdGF0c1RhYmxlX2RhdGEgKmRhdGEgPSAmcm93cmVxX2N0eC0+ZGF0YTsKKyAgICBzdHJ1Y3QgZXRodG9vbF9kcnZpbmZvIGRyaXZlcl9pbmZvOworICAgIHN0cnVjdCBldGh0b29sX2dzdHJpbmdzICpldGhfc3RyaW5nczsKKyAgICBzdHJ1Y3QgZXRodG9vbF9zdGF0cyAqZXRoX3N0YXRzOworICAgIHN0cnVjdCBpZnJlcSBpZnI7CisgICAgdW5zaWduZWQgaW50IG5zdGF0cywgc2l6ZV9zdHIsIGk7CisgICAgaW50IGVycjsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihpZnIpKTsKKyAgICBzdHJsY3B5KGlmci5pZnJfbmFtZSwgbmFtZSwgc2l6ZW9mKGlmci5pZnJfbmFtZSkpOworCisgICAgbWVtc2V0KCZkcml2ZXJfaW5mbywgMCwgc2l6ZW9mKGRyaXZlcl9pbmZvKSk7CisgICAgZHJpdmVyX2luZm8uY21kID0gRVRIVE9PTF9HRFJWSU5GTzsKKyAgICBpZnIuaWZyX2RhdGEgPSAoY2hhciAqKSZkcml2ZXJfaW5mbzsKKworICAgIGVyciA9IF9ldGhlclN0YXRzX2lvY3RsX2dldChmZCwgU0lPQ0VUSFRPT0wsICZpZnIsIG5hbWUpOworICAgIGlmIChlcnIgPCAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCIsCisgICAgICAgICAgICAgICAgICAgICJFVEhUT09MX0dFVERSVklORk8gZmFpbGVkIG9uIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbnN0YXRzID0gZHJpdmVyX2luZm8ubl9zdGF0czsKKyAgICBpZiAobnN0YXRzIDwgMSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAibm8gc3RhdHMgYXZhaWxhYmxlIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIHNpemVfc3RyID0gbnN0YXRzICogRVRIX0dTVFJJTkdfTEVOOworCisgICAgZXRoX3N0cmluZ3MgPSBtYWxsb2Moc2l6ZV9zdHIgKyBzaXplb2YgKHN0cnVjdCBldGh0b29sX2dzdHJpbmdzKSk7CisgICAgaWYgKCFldGhfc3RyaW5ncykgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAibm8gbWVtb3J5IGF2YWlsYWJsZVxuIikpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGUsaW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0LCBubyBtZW1vcnkgYXZhaWxhYmxlXG4iKTsKKworICAgICAgICByZXR1cm4gLTM7CisgICAgfQorICAgIG1lbXNldCAoZXRoX3N0cmluZ3MsIDAsIChzaXplX3N0ciArIHNpemVvZiAoc3RydWN0IGV0aHRvb2xfZ3N0cmluZ3MpKSk7CisKKyAgICBldGhfc3RhdHMgPSBtYWxsb2MgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9zdGF0cykpOworICAgIGlmICghZXRoX3N0YXRzKSB7CisgICAgICAgIGZyZWUgKGV0aF9zdHJpbmdzKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgIm5vIG1lbW9yeSBhdmFpbGFibGVcbiIpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCwgbm8gbWVtb3J5IGF2YWlsYWJsZVxuIik7CisKKyAgICAgICAgcmV0dXJuIC0zOworICAgIH0KKyAgICBtZW1zZXQgKGV0aF9zdGF0cywgMCwgKHNpemVfc3RyICsgc2l6ZW9mIChzdHJ1Y3QgZXRodG9vbF9zdGF0cykpKTsKKworICAgIGV0aF9zdHJpbmdzLT5jbWQgPSBFVEhUT09MX0dTVFJJTkdTOworICAgIGV0aF9zdHJpbmdzLT5zdHJpbmdfc2V0ID0gRVRIX1NTX1NUQVRTOworICAgIGV0aF9zdHJpbmdzLT5sZW4gPSBuc3RhdHM7CisgICAgaWZyLmlmcl9kYXRhID0gKGNoYXIgKikgZXRoX3N0cmluZ3M7CisKKyAgICBlcnIgPSBfZXRoZXJTdGF0c19pb2N0bF9nZXQoZmQsIFNJT0NFVEhUT09MLCAmaWZyLCBuYW1lKTsKKyAgICBpZiAoZXJyIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQiLAorICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGdldCBzdGF0cyBzdHJpbmdzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpKTsKKyAgICAgICAgc25tcF9sb2cgKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLGludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCwgY2Fubm90IGdldCBzdGF0cyBzdHJpbmdzIGluZm9ybWF0aW9uIGZvciBpbnRlcmZhY2UgfCVzfCBcbiIsIG5hbWUpOworCisgICAgICAgIGZyZWUoZXRoX3N0cmluZ3MpOworICAgICAgICBmcmVlKGV0aF9zdGF0cyk7CisgICAgICAgIHJldHVybiAtNDsKKyAgICB9CisKKyAgICBldGhfc3RhdHMtPmNtZCA9IEVUSFRPT0xfR1NUQVRTOworICAgIGV0aF9zdGF0cy0+bl9zdGF0cyA9IG5zdGF0czsKKyAgICBpZnIuaWZyX2RhdGEgPSAoY2hhciAqKSBldGhfc3RhdHM7CisgICAgZXJyID0gX2V0aGVyU3RhdHNfaW9jdGxfZ2V0KGZkLCBTSU9DRVRIVE9PTCwgJmlmciwgbmFtZSk7CisgICAgaWYgKGVyciA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW50ZXJmYWNlX2lvY3RsX2V0aGVyc3RhdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAgICAgImNhbm5vdCBnZXQgc3RhdHMgc3RyaW5ncyBpbmZvcm1hdGlvbiBmb3IgaW50ZXJmYWNlIHwlc3wgXG4iLCBuYW1lKSk7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSxpbnRlcmZhY2VfaW9jdGxfZXRoZXJzdGF0c19nZXQsIGNhbm5vdCBnZXQgc3RhdHMgaW5mb3JtYXRpb24gZm9yIGludGVyZmFjZSB8JXN8IFxuIiwgbmFtZSk7CisKKyAgICAgICAgZnJlZShldGhfc3RyaW5ncyk7CisgICAgICAgIGZyZWUoZXRoX3N0YXRzKTsKKyAgICAgICAgcmV0dXJuIC01OworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBuc3RhdHM7IGkrKykgeworICAgICAgICBjaGFyIHNbRVRIX0dTVFJJTkdfTEVOXTsKKworICAgICAgICBzdHJsY3B5KHMsIChjb25zdCBjaGFyICopICZldGhfc3RyaW5ncy0+ZGF0YVtpICogRVRIX0dTVFJJTkdfTEVOXSwKKyAgICAgICAgICAgICAgICBzaXplb2YocykpOworICAgICAgICAKKyAgICAgICAgaWYgKEVUSEVSU1RBVFNKQUJCRVJTKHMpKSB7CisgICAgICAgICAgICBkYXRhLT5ldGhlclN0YXRzSmFiYmVycyA9ICh1X2xvbmcpZXRoX3N0YXRzLT5kYXRhW2ldOworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlNfRkxBRzsKKyAgICAgICAgfQorICAgIH0KKyAgICBmcmVlKGV0aF9zdHJpbmdzKTsKKyAgICBmcmVlKGV0aF9zdGF0cyk7CisKKyAgICByZXR1cm4gMDsKKyNlbHNlCisgICAgcmV0dXJuIC02OworI2VuZGlmCisKK30KKworCisvKiBpb2N0bCB3cmFwcGVyCisgKgorICogQHBhcmFtIGZkIDogc29ja2V0IGZkIHRvIHVzZSB3L2lvY3RsLCBvciAtMSB0byBvcGVuL2Nsb3NlIG9uZQorICogQHBhcmFtIHdoaWNoCisgKiBAcGFyYW0gaWZycQorICogcGFyYW0gaWZlbnRyeSA6IGlmZW50cnkgdG8gdXBkYXRlCisgKiBAcGFyYW0gbmFtZQorICoKKyAqIEByZXR2YWwgIDAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIC0xIDogaW52YWxpZCBwYXJhbWV0ZXJzCisgKiBAcmV0dmFsIC0yIDogY291bGRuJ3QgY3JlYXRlIHNvY2tldAorICogQHJldHZhbCAtMyA6IGlvY3RsIGNhbGwgZmFpbGVkCisgKi8KK2ludAorX2V0aGVyU3RhdHNfaW9jdGxfZ2V0KGludCBmZCwgaW50IHdoaWNoLCBzdHJ1Y3QgaWZyZXEgKmlmcnEsIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaW50IG91cmZkID0gLTEsIHJjID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlOmlvY3RsIiwgIl9ldGhlclN0YXRzX2lvY3RsX2dldFxuIikpOworICAgIC8qCisgICAgICogc2FuaXR5IGNoZWNrcworICAgICAqLworICAgIGlmKE5VTEwgPT0gbmFtZSkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJfZXRoZXJTdGF0c19pb2N0bF9nZXQgaW52YWxpZCBpZm5hbWUgJyVzJ1xuIiwgbmFtZSkpOworICAgICAgICBzbm1wX2xvZyAoTE9HX0VSUiwgImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwsIF9ldGhlclN0YXRzX2lvY3RsX2dldCBlcnJvciBvbiBpbmVyZmFjZSAnJXMnXG4iLCBuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogY3JlYXRlIHNvY2tldCBmb3IgaW9jdGxzCisgICAgICovCisgICAgaWYoZmQgPCAwKSB7CisgICAgICAgIGZkID0gb3VyZmQgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgICAgIGlmKG91cmZkIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGU6aW9jdGwiLAorICAgICAgICAgICAgICAgICAgICAgICAgIl9ldGhlclN0YXRzX2lvY3RsX2dldCBjb3VsZG4ndCBjcmVhdGUgYSBzb2NrZXRcbiIpKTsKKyAgICAgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCwgX2V0aGVyU3RhdHNfaW9jdGxfZ2V0IGVycm9yIG9uIGluZXJmYWNlICclcydcbiIsIG5hbWUpOworCisgICAgICAgICAgICByZXR1cm4gLTI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdHJsY3B5KGlmcnEtPmlmcl9uYW1lLCBuYW1lLCBzaXplb2YoaWZycS0+aWZyX25hbWUpKTsKKyAgICByYyA9IGlvY3RsKGZkLCB3aGljaCwgaWZycSk7CisgICAgaWYgKHJjIDwgMCkgeworICAgICAgICBERUJVR01TR1RMKCgiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZTppb2N0bCIsCisgICAgICAgICAgICAgICAgICAgICJfZXRoZXJTdGF0c19pb2N0bF9nZXQgaW9jdGwgJWQgcmV0dXJuZWQgJWRcbiIsIHdoaWNoLCByYykpOworICAgICAgICByYyA9IC0zOworICAgIH0KKworICAgIGlmKG91cmZkID49IDApCisgICAgICAgIGNsb3NlKG91cmZkKTsKKworICAgIHJldHVybiByYzsKK30KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzI4NDVlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlLmgKQEAgLTAsMCArMSwxMSBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KKworY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZGF0YV9hY2Nlc3MvZXRoZXJzdGF0cykKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUpCitjb25maWdfcmVxdWlyZShybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0KQorY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldCkKK2NvbmZpZ19yZXF1aXJlKHJtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9hY2Nlc3MpIAorY29uZmlnX3JlcXVpcmUocm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UpCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWE2ZTIyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZS5jCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNDE3MCAkIG9mICQgCisgKgorICogJElkOiQKKyAqLworLyoqIFxwYWdlIE1GRCBoZWxwZXIgZm9yIGV0aGVyU3RhdHNUYWJsZQorICoKKyAqIFxzZWN0aW9uIGludHJvIEludHJvZHVjdGlvbgorICogSW50cm9kdWN0b3J5IHRleHQuCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgorCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oIgorCitvaWQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZFtdID0geyBFVEhFUlNUQVRTVEFCTEVfT0lEIH07CitpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZF9zaXplID0gT0lEX0xFTkdUSChldGhlclN0YXRzVGFibGVfb2lkKTsKKworZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiBldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0Oworc3RhdGljIGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKmV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcDsKKwordm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfZXRoZXJTdGF0c1RhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSh2b2lkKTsKKworCisvKioKKyAqIEluaXRpYWxpemVzIHRoZSBldGhlclN0YXRzVGFibGUgbW9kdWxlCisgKi8KK3ZvaWQKK2luaXRfZXRoZXJTdGF0c1RhYmxlKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmluaXRfZXRoZXJTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAwOm86IFBlcmZvcm0gZXRoZXJTdGF0c1RhYmxlIG9uZS10aW1lIG1vZHVsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogaGVyZSB3ZSBpbml0aWFsaXplIGFsbCB0aGUgdGFibGVzIHdlJ3JlIHBsYW5uaW5nIG9uIHN1cHBvcnRpbmcKKyAgICAgKi8KKyAgICBpZiAoc2hvdWxkX2luaXQoImV0aGVyU3RhdHNUYWJsZSIpKQorICAgICAgICBpbml0aWFsaXplX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSgpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXRfZXRoZXJTdGF0c1RhYmxlICovCisKKy8qKgorICogU2h1dC1kb3duIHRoZSBldGhlclN0YXRzVGFibGUgbW9kdWxlIChhZ2VudCBpcyBleGl0aW5nKQorICovCit2b2lkCitzaHV0ZG93bl9ldGhlclN0YXRzVGFibGUodm9pZCkKK3sKKyAgICBpZiAoc2hvdWxkX2luaXQoImV0aGVyU3RhdHNUYWJsZSIpKQorICAgICAgICBzaHV0ZG93bl90YWJsZV9ldGhlclN0YXRzVGFibGUoKTsKKworfQorCisvKioKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGV0aGVyU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitpbml0aWFsaXplX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSh2b2lkKQoreworICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTppbml0aWFsaXplX3RhYmxlX2V0aGVyU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjMwMTpvOiBQZXJmb3JtIGV0aGVyU3RhdHNUYWJsZSBvbmUtdGltZSB0YWJsZSBpbml0aWFsaXphdGlvbi4KKyAgICAgKi8KKworICAgIC8qCisgICAgICogVE9ETzozMDI6bzogfC0+SW5pdGlhbGl6ZSBldGhlclN0YXRzVGFibGUgdXNlciBjb250ZXh0CisgICAgICogaWYgeW91J2QgbGlrZSB0byBwYXNzIGluIGEgcG9pbnRlciB0byBzb21lIGRhdGEgZm9yIHRoaXMKKyAgICAgKiB0YWJsZSwgYWxsb2NhdGUgb3Igc2V0IGl0IHVwIGhlcmUuCisgICAgICovCisgICAgLyoKKyAgICAgKiBhIG5ldHNubXBfZGF0YV9saXN0IGlzIGEgc2ltcGxlIHdheSB0byBzdG9yZSB2b2lkIHBvaW50ZXJzLiBBIHNpbXBsZQorICAgICAqIHN0cmluZyB0b2tlbiBpcyB1c2VkIHRvIGFkZCwgZmluZCBvciByZW1vdmUgcG9pbnRlcnMuCisgICAgICovCisgICAgZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wCisJPSBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoImV0aGVyU3RhdHNUYWJsZSIsIE5VTEwsIE5VTEwpOworCisgICAgLyoKKyAgICAgKiBObyBzdXBwb3J0IGZvciBhbnkgZmxhZ3MgeWV0LCBidXQgaW4gdGhlIGZ1dHVyZSB5b3Ugd291bGQKKyAgICAgKiBzZXQgYW55IGZsYWdzIGhlcmUuCisgICAgICovCisgICAgZmxhZ3MgPSAwOworCisgICAgLyoKKyAgICAgKiBjYWxsIGludGVyZmFjZSBpbml0aWFsaXphdGlvbiBjb2RlCisgICAgICovCisgICAgX2V0aGVyU3RhdHNUYWJsZV9pbml0aWFsaXplX2ludGVyZmFjZQorCShldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3AsIGZsYWdzKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdGlhbGl6ZV90YWJsZV9ldGhlclN0YXRzVGFibGUgKi8KKworLyoqCisgKiBTaHV0ZG93biB0aGUgdGFibGUgZXRoZXJTdGF0c1RhYmxlIAorICovCit2b2lkCitzaHV0ZG93bl90YWJsZV9ldGhlclN0YXRzVGFibGUodm9pZCkKK3sKKyAgICAvKgorICAgICAqIGNhbGwgaW50ZXJmYWNlIHNodXRkb3duIGNvZGUKKyAgICAgKi8KKyAgICBfZXRoZXJTdGF0c1RhYmxlX3NodXRkb3duX2ludGVyZmFjZShldGhlclN0YXRzVGFibGVfdXNlcl9jb250ZXh0X3ApOworICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGV0aGVyU3RhdHNUYWJsZV91c2VyX2NvbnRleHRfcCk7CisgICAgZXRoZXJTdGF0c1RhYmxlX3VzZXJfY29udGV4dF9wID0gTlVMTDsKK30KKworLyoqCisgKiBleHRyYSBjb250ZXh0IGluaXRpYWxpemF0aW9uIChlZyBkZWZhdWx0IHZhbHVlcykKKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCAgICA6IHJvdyByZXF1ZXN0IGNvbnRleHQKKyAqIEBwYXJhbSB1c2VyX2luaXRfY3R4IDogdm9pZCBwb2ludGVyIGZvciB1c2VyIChwYXJhbWV0ZXIgdG8gcm93cmVxX2N0eF9hbGxvY2F0ZSkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICA6IG5vIGVycm9ycworICogQHJldHZhbCBNRkRfRVJST1IgICAgOiBlcnJvciAoY29udGV4dCBhbGxvY2F0ZSB3aWxsIGZhaWwpCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnVzZXJfaW5pdF9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjEwOm86IHwtPiBQZXJmb3JtIGV4dHJhIGV0aGVyU3RhdHNUYWJsZSByb3dyZXEgaW5pdGlhbGl6YXRpb24uIChlZyBERUZWQUxTKQorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9pbml0ICovCisKKy8qKgorICogZXh0cmEgY29udGV4dCBjbGVhbnVwCisgKgorICovCit2b2lkCitldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjExOm86IHwtPiBQZXJmb3JtIGV4dHJhIGV0aGVyU3RhdHNUYWJsZSByb3dyZXEgY2xlYW51cC4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfY2xlYW51cCAqLworCisvKioKKyAqIHByZS1yZXF1ZXN0IGNhbGxiYWNrCisgKgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICAgICAgIDogb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIHVzZXJfY29udGV4dCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86NTEwOm86IFBlcmZvcm0gZXRoZXJTdGF0c1RhYmxlIHByZS1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIHBvc3QtcmVxdWVzdCBjYWxsYmFjaworICoKKyAqIE5vdGU6CisgKiAgIE5ldyByb3dzIGhhdmUgYmVlbiBpbnNlcnRlZCBpbnRvIHRoZSBjb250YWluZXIsIGFuZAorICogICBkZWxldGVkIHJvd3MgaGF2ZSBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgY29udGFpbmVyIGFuZAorICogICByZWxlYXNlZC4KKyAqCisgKiBAcGFyYW0gdXNlcl9jb250ZXh0CisgKiBAcGFyYW0gcmMgOiBNRkRfU1VDQ0VTUyBpZiBhbGwgcmVxdWVzdHMgc3VjY2VlZGVkCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogb3RoZXIgZXJyb3IgKGlnbm9yZWQpCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICogdXNlcl9jb250ZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmMpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzo1MTE6bzogUGVyZm9ybSBldGhlclN0YXRzVGFibGUgcG9zdC1yZXF1ZXN0IGFjdGlvbnMuCisgICAgICovCisKKyAgICAvKgorICAgICAqIGNoZWNrIHRvIHNldCBpZiBhbnkgcm93cyB3ZXJlIGNoYW5nZWQuCisgICAgICovCisgICAgaWYgKGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9nZXQoKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayBpZiByZXF1ZXN0IHdhcyBzdWNjZXNzZnVsLiBJZiBzbywgdGhpcyB3b3VsZCBiZQorICAgICAgICAgKiBhIGdvb2QgcGxhY2UgdG8gc2F2ZSBkYXRhIHRvIGl0cyBwZXJzaXN0ZW50IHN0b3JlLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKE1GRF9TVUNDRVNTID09IHJjKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2F2ZSBjaGFuZ2VkIHJvd3MsIGlmIHlvdSBoYXZlbid0IGFscmVhZHkKKyAgICAgICAgICAgICAqLworICAgICAgICB9CisKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2RpcnR5X3NldCgwKTsgICAvKiBjbGVhciB0YWJsZSBkaXJ0eSBmbGFnICovCisgICAgfQorCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0ICovCisKKworLyoqIEB7ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY3ZjAzYwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGUuaApAQCAtMCwwICsxLDMwMyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworLyoqIEBhZGR0b2dyb3VwIG1pc2MgbWlzYzogTWlzY2VsbGFuZW91cyByb3V0aW5lcworICoKKyAqIEB7CisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKworICAgIC8qCisgICAgICogT0lEIGFuZCBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciBldGhlclN0YXRzVGFibGUgCisgICAgICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX29pZHMuaCIKKworICAgIC8qCisgICAgICogZW51bSBkZWZpbmlvbnMgCisgICAgICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2VudW1zLmgiCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKKyAgICAgKi8KKyAgICB2b2lkICAgICAgICAgICAgaW5pdF9ldGhlclN0YXRzVGFibGUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2V0aGVyU3RhdHNUYWJsZSh2b2lkKTsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgICAgICovCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogV2hlbiB5b3UgcmVnaXN0ZXIgeW91ciBtaWIsIHlvdSBnZXQgdG8gcHJvdmlkZSBhIGdlbmVyaWMKKyAgICAgKiBwb2ludGVyIHRoYXQgd2lsbCBiZSBwYXNzZWQgYmFjayB0byB5b3UgZm9yIG1vc3Qgb2YgdGhlCisgICAgICogZnVuY3Rpb25zIGNhbGxzLgorICAgICAqCisgICAgICogVE9ETzoxMDA6cjogUmV2aWV3IGFsbCBjb250ZXh0IHN0cnVjdHVyZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFRPRE86MTAxOm86IHwtPiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIHJlZ2lzdHJhdGlvbiBjb250ZXh0LgorICAgICAqLworICAgIHR5cGVkZWYgbmV0c25tcF9kYXRhX2xpc3QgZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbjsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBUT0RPOjExMDpyOiB8LT4gUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSBkYXRhIGNvbnRleHQgc3RydWN0dXJlLgorICAgICAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBkYXRhIGZvciBldGhlclN0YXRzVGFibGUuCisgICAgICovCisgICAgLyoKKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBjb250YWlucyBzdG9yYWdlIGZvciBhbGwgdGhlIGNvbHVtbnMgZGVmaW5lZCBpbiB0aGUKKyAgICAgKiBldGhlclN0YXRzVGFibGUuCisgICAgICovCisgICAgdHlwZWRlZiBzdHJ1Y3QgZXRoZXJTdGF0c1RhYmxlX2RhdGFfcyB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0RhdGFTb3VyY2UoMikvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL1cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgb2lkICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlWzEyOF07CisgICAgICAgIHNpemVfdCAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV9sZW47ICAgICAgIC8qICMgb2Ygb2lkIGVsZW1lbnRzLCBub3QgYnl0ZXMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRHJvcEV2ZW50cygzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c09jdGV0cyg0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c09jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0cyg1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMoNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzKDcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMoOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yczsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzVW5kZXJzaXplUGt0cyg5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c092ZXJzaXplUGt0cygxMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0ZyYWdtZW50cygxMSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHM7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0phYmJlcnMoMTIpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzSmFiYmVyczsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQ29sbGlzaW9ucygxMykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNjRPY3RldHMoMTQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cygxNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzKDE2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzKDE3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oCisgICAgICAgICAqLworICAgICAgICB1X2xvbmcgICAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cygxOCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cygxOSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgdV9sb25nICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0czsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3duZXIoMjApL093bmVyU3RyaW5nL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9BL1cvZS9SL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgIGV0aGVyU3RhdHNPd25lclsxMjddOworICAgICAgICBzaXplX3QgICAgICAgICAgZXRoZXJTdGF0c093bmVyX2xlbjsgICAgLyogIyBvZiBjaGFyIGVsZW1lbnRzLCBub3QgYnl0ZXMgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzU3RhdHVzKDIxKS9FbnRyeVN0YXR1cy9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS9XL0Uvci9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICBldGhlclN0YXRzU3RhdHVzOworCisgICAgfSBldGhlclN0YXRzVGFibGVfZGF0YTsKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxMTU6bzogfC0+IFJldmlldyBldGhlclN0YXRzVGFibGUgdW5kbyBjb250ZXh0LgorICAgICAqIFdlJ3JlIGp1c3QgZ29pbmcgdG8gdXNlIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlIGZvciBvdXIKKyAgICAgKiB1bmRvX2NvbnRleHQuIElmIHlvdSB3YW50IHRvIGRvIHNvbWV0aGluZyBtb3JlIGVmZmljZW50LAorICAgICAqIGRlZmluZSB5b3VyIHR5cGVkZWYgaGVyZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIGV0aGVyU3RhdHNUYWJsZV9kYXRhIGV0aGVyU3RhdHNUYWJsZV91bmRvX2RhdGE7CisKKyAgICAvKgorICAgICAqIFRPRE86MTIwOnI6IHwtPiBSZXZpZXcgZXRoZXJTdGF0c1RhYmxlIG1pYiBpbmRleC4KKyAgICAgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgaW5kZXggZm9yIGV0aGVyU3RhdHNUYWJsZS4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBldGhlclN0YXRzVGFibGVfbWliX2luZGV4X3MgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaAorICAgICAgICAgKi8KKyAgICAgICAgbG9uZyAgICAgICAgICAgIGV0aGVyU3RhdHNJbmRleDsKKworCisgICAgfSBldGhlclN0YXRzVGFibGVfbWliX2luZGV4OworCisgICAgLyoKKyAgICAgKiBUT0RPOjEyMTpyOiB8ICAgfC0+IFJldmlldyBldGhlclN0YXRzVGFibGUgbWF4IGluZGV4IGxlbmd0aC4KKyAgICAgKiBJZiB5b3UgS05PVyB0aGF0IHlvdXIgaW5kZXhlcyB3aWxsIG5ldmVyIGV4Y2VlZCBhIGNlcnRhaW4KKyAgICAgKiBsZW5ndGgsIHVwZGF0ZSB0aGlzIG1hY3JvIHRvIHRoYXQgbGVuZ3RoLgorICAgICAqLworI2RlZmluZSBNQVhfZXRoZXJTdGF0c1RhYmxlX0lEWF9MRU4gICAgIDEKKworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzoxMzA6bzogfC0+IFJldmlldyBldGhlclN0YXRzVGFibGUgUm93IHJlcXVlc3QgKHJvd3JlcSkgY29udGV4dC4KKyAgICAgKiBXaGVuIHlvdXIgZnVuY3Rpb25zIGFyZSBjYWxsZWQsIHlvdSB3aWxsIGJlIHBhc3NlZCBhCisgICAgICogZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggcG9pbnRlci4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9zIHsKKworICAgIC8qKiB0aGlzIG11c3QgYmUgZmlyc3QgZm9yIGNvbnRhaW5lciBjb21wYXJlIHRvIHdvcmsgKi8KKyAgICAgICAgbmV0c25tcF9pbmRleCAgIG9pZF9pZHg7CisgICAgICAgIG9pZCAgICAgICAgICAgICBvaWRfdG1wW01BWF9ldGhlclN0YXRzVGFibGVfSURYX0xFTl07CisKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCB0YmxfaWR4OworCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9kYXRhIGRhdGE7CisgICAgICAgIHVuc2lnbmVkIGludCAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzOyAgICAvKiBmbGFncyBmb3IgZXhpc3RlbmNlICovCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV91bmRvX2RhdGEgKnVuZG87CisgICAgICAgIHVuc2lnbmVkIGludCAgICBjb2x1bW5fc2V0X2ZsYWdzOyAgICAgICAvKiBmbGFncyBmb3Igc2V0IGNvbHVtbnMgKi8KKworCisgICAgICAgIC8qCisgICAgICAgICAqIGZsYWdzIHBlciByb3cuIEN1cnJlbnRseSwgdGhlIGZpcnN0IChsb3dlcikgOCBiaXRzIGFyZSByZXNlcnZlZAorICAgICAgICAgKiBmb3IgdGhlIHVzZXIuIFNlZSBtZmQuaCBmb3Igb3RoZXIgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgICAgcm93cmVxX2ZsYWdzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MTMxOm86IHwgICB8LT4gQWRkIHVzZWZ1bCBkYXRhIHRvIGV0aGVyU3RhdHNUYWJsZSByb3dyZXEgY29udGV4dC4KKyAgICAgICAgICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogc3RvcmFnZSBmb3IgZnV0dXJlIGV4cGFuc2lvbgorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9kYXRhX2xpc3QgKmV0aGVyU3RhdHNUYWJsZV9kYXRhX2xpc3Q7CisKKyAgICB9IGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4OworCisgICAgdHlwZWRlZiBzdHJ1Y3QgZXRoZXJTdGF0c1RhYmxlX3JlZl9yb3dyZXFfY3R4X3MgeworICAgICAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eDsKKyAgICB9IGV0aGVyU3RhdHNUYWJsZV9yZWZfcm93cmVxX2N0eDsKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgKi8KKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9jb250ZXh0KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2NvbnRleHQsIGludCByYyk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgdm9pZCAqdXNlcl9pbml0X2N0eCk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4X2NsZWFudXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb21taXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgKmV0aGVyU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpOworCisgICAgZXh0ZXJuIG9pZCAgICAgIGV0aGVyU3RhdHNUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gaW50ICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZF9zaXplOworCisKKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmgiCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmgiCisKKyAgICAvKgorICAgICAqIERVTU1ZIG1hcmtlcnMsIGlnbm9yZQorICAgICAqCisgICAgICogVE9ETzowOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86MTk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBUT0RPOjI5OTp4OiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVE9ETzozOTk6eDogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRPRE86NDk5Ong6ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZDRhY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTAsMCArMSw1MzMgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDE0MTcwICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlLmgiCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgiCisKKyNpZiBkZWZpbmVkKGxpbnV4KQorI2luY2x1ZGUgImlvY3RsX2ltcF9jb21tb24uaCIKKyNlbmRpZgorCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlCisgKiBAYWRkdG9ncm91cCBkYXRhX2FjY2VzcyBkYXRhX2FjY2VzczogUm91dGluZXMgdG8gYWNjZXNzIGRhdGEKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBsb2NhdGUgdGhlIGRhdGEgdXNlZCB0byBzYXRpc2Z5CisgKiByZXF1ZXN0cy4KKyAqIAorICogQHsKKyAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAqLworCisvKioKKyAqIGluaXRpYWxpemF0aW9uIGZvciBldGhlclN0YXRzVGFibGUgZGF0YSBhY2Nlc3MKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBkdXJpbmcgc3RhcnR1cCB0byBhbGxvdyB5b3UgdG8KKyAqIGFsbG9jYXRlIGFueSByZXNvdXJjZXMgeW91IG5lZWQgZm9yIHRoZSBkYXRhIHRhYmxlLgorICoKKyAqIEBwYXJhbSBldGhlclN0YXRzVGFibGVfcmVnCisgKiAgICAgICAgUG9pbnRlciB0byBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogdW5yZWNvdmVyYWJsZSBlcnJvci4KKyAqLworaW50CitldGhlclN0YXRzVGFibGVfaW5pdF9kYXRhKGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVnKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfaW5pdF9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIFRPRE86MzAzOm86IEluaXRpYWxpemUgZXRoZXJTdGF0c1RhYmxlIGRhdGEuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9pbml0X2RhdGEgKi8KKworLyoqCisgKiBjb250YWluZXIgb3ZlcnZpZXcKKyAqCisgKi8KKworLyoqCisgKiBjb250YWluZXIgaW5pdGlhbGl6YXRpb24KKyAqCisgKiBAcGFyYW0gY29udGFpbmVyX3B0cl9wdHIgQSBwb2ludGVyIHRvIGEgY29udGFpbmVyIHBvaW50ZXIuIElmIHlvdQorICogICAgICAgIGNyZWF0ZSBhIGN1c3RvbSBjb250YWluZXIsIHVzZSB0aGlzIHBhcmFtZXRlciB0byByZXR1cm4gaXQKKyAqICAgICAgICB0byB0aGUgTUZEIGhlbHBlci4gSWYgc2V0IHRvIE5VTEwsIHRoZSBNRkQgaGVscGVyIHdpbGwKKyAqICAgICAgICBhbGxvY2F0ZSBhIGNvbnRhaW5lciBmb3IgeW91LgorICogQHBhcmFtICBjYWNoZSBBIHBvaW50ZXIgdG8gYSBjYWNoZSBzdHJ1Y3R1cmUuIFlvdSBjYW4gc2V0IHRoZSB0aW1lb3V0CisgKiAgICAgICAgIGFuZCBvdGhlciBjYWNoZSBmbGFncyB1c2luZyB0aGlzIHBvaW50ZXIuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAgdG8gYWxsb3cgeW91IHRvIGN1c3RvbWl6ZSBjZXJ0YWluCisgKiAgYXNwZWN0cyBvZiB0aGUgYWNjZXNzIG1ldGhvZC4gRm9yIHRoZSBtb3N0IHBhcnQsIGl0IGlzIGZvciBhZHZhbmNlZAorICogIHVzZXJzLiBUaGUgZGVmYXVsdCBjb2RlIHNob3VsZCBzdWZmaWNlIGZvciBtb3N0IGNhc2VzLiBJZiBubyBjdXN0b20KKyAqICBjb250YWluZXIgaXMgYWxsb2NhdGVkLCB0aGUgTUZEIGNvZGUgd2lsbCBjcmVhdGUgb25lIGZvciB5b3VyLgorICoKKyAqICBUaGlzIGlzIGFsc28gdGhlIHBsYWNlIHRvIHNldCB1cCBjYWNoZSBiZWhhdmlvci4gVGhlIGRlZmF1bHQsIHRvCisgKiAgc2ltcGx5IHNldCB0aGUgY2FjaGUgdGltZW91dCwgd2lsbCB3b3JrIHdlbGwgd2l0aCB0aGUgZGVmYXVsdAorICogIGNvbnRhaW5lci4gSWYgeW91IGFyZSB1c2luZyBhIGN1c3RvbSBjb250YWluZXIsIHlvdSBtYXkgd2FudCB0bworICogIGxvb2sgYXQgdGhlIGNhY2hlIGhlbHBlciBkb2N1bWVudGF0aW9uIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55CisgKiAgZmxhZ3MgeW91IHdhbnQgdG8gc2V0LgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIHdvdWxkIGFsc28gYmUgYSBnb29kIHBsYWNlIHRvIGRvIGFueSBpbml0aWFsaXphdGlvbiBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgb3BlbmluZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCB3aWxsIHN1cHBseSB0aGUgZGF0YSwgb3BlbmluZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChuZXRzbm1wX2NvbnRhaW5lciAqKiBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlICogY2FjaGUpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cl9wdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImJhZCBjb250YWluZXIgcGFyYW0gdG8gZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogRm9yIGFkdmFuY2VkIHVzZXJzLCB5b3UgY2FuIHVzZSBhIGN1c3RvbSBjb250YWluZXIuIElmIHlvdQorICAgICAqIGRvIG5vdCBjcmVhdGUgb25lLCBvbmUgd2lsbCBiZSBjcmVhdGVkIGZvciB5b3UuCisgICAgICovCisgICAgKmNvbnRhaW5lcl9wdHJfcHRyID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJiYWQgY2FjaGUgcGFyYW0gdG8gZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qCisgICAgICogVE9ETzozNDU6QTogU2V0IHVwIGV0aGVyU3RhdHNUYWJsZSBjYWNoZSBwcm9wZXJ0aWVzLgorICAgICAqCisgICAgICogQWxzbyBmb3IgYWR2YW5jZWQgdXNlcnMsIHlvdSBjYW4gc2V0IHBhcmFtZXRlcnMgZm9yIHRoZQorICAgICAqIGNhY2hlLiBEbyBub3QgY2hhbmdlIHRoZSBtYWdpYyBwb2ludGVyLCBhcyBpdCBpcyB1c2VkCisgICAgICogYnkgdGhlIE1GRCBoZWxwZXIuIFRvIGNvbXBsZXRlbHkgZGlzYWJsZSBjYWNoaW5nLCBzZXQKKyAgICAgKiBjYWNoZS0+ZW5hYmxlZCB0byAwLgorICAgICAqLworICAgIGNhY2hlLT50aW1lb3V0ID0gRVRIRVJTVEFUU1RBQkxFX0NBQ0hFX1RJTUVPVVQ7ICAgICAvKiBzZWNvbmRzICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdCAqLworCisvKioKKyAqIGNvbnRhaW5lciBzaHV0ZG93bgorICoKKyAqIEBwYXJhbSBjb250YWluZXJfcHRyIEEgcG9pbnRlciB0byB0aGUgY29udGFpbmVyLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBzaHV0ZG93biB0byBhbGxvdyB5b3UgdG8gY3VzdG9taXplIGNlcnRhaW4KKyAqICBhc3BlY3RzIG9mIHRoZSBhY2Nlc3MgbWV0aG9kLiBGb3IgdGhlIG1vc3QgcGFydCwgaXQgaXMgZm9yIGFkdmFuY2VkCisgKiAgdXNlcnMuIFRoZSBkZWZhdWx0IGNvZGUgc2hvdWxkIHN1ZmZpY2UgZm9yIG1vc3QgY2FzZXMuCisgKgorICogIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJlZm9yZSBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUoKS4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyB3b3VsZCBhbHNvIGJlIGEgZ29vZCBwbGFjZSB0byBkbyBhbnkgY2xlYW51cCBuZWVkZWQKKyAqICBmb3IgeW91IGRhdGEgc291cmNlLiBGb3IgZXhhbXBsZSwgY2xvc2luZyBhIGNvbm5lY3Rpb24gdG8gYW5vdGhlcgorICogIHByb2Nlc3MgdGhhdCBzdXBwbGllZCB0aGUgZGF0YSwgY2xvc2luZyBhIGRhdGFiYXNlLCBldGMuCisgKi8KK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXJfcHRyKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiYmFkIHBhcmFtcyB0byBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duICovCisKKy8qKgorICogbG9hZCBpbml0aWFsIGRhdGEKKyAqCisgKiBUT0RPOjM1MDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIGRhdGEgbG9hZAorICogVGhpcyBmdW5jdGlvbiB3aWxsIGFsc28gYmUgY2FsbGVkIGJ5IHRoZSBjYWNoZSBoZWxwZXIgdG8gbG9hZAorICogdGhlIGNvbnRhaW5lciBhZ2FpbiAoYWZ0ZXIgdGhlIGNvbnRhaW5lciBmcmVlIGZ1bmN0aW9uIGhhcyBiZWVuCisgKiBjYWxsZWQgdG8gZnJlZSB0aGUgcHJldmlvdXMgY29udGVudHMpLgorICoKKyAqIEBwYXJhbSBjb250YWluZXIgY29udGFpbmVyIHRvIHdoaWNoIGl0ZW1zIHNob3VsZCBiZSBpbnNlcnRlZAorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICAgICAgIDogc3VjY2Vzcy4KKyAqIEByZXR2YWwgTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFIDogQ2FuJ3QgYWNjZXNzIGRhdGEgc291cmNlCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqICBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBsb2FkIHRoZSBpbmRleChlcykgKGFuZCBkYXRhLCBvcHRpb25hbGx5KQorICogIGZvciB0aGUgZXZlcnkgcm93IGluIHRoZSBkYXRhIHNldC4KKyAqCisgKiBAcmVtYXJrCisgKiAgV2hpbGUgbG9hZGluZyB0aGUgZGF0YSwgdGhlIG9ubHkgaW1wb3J0YW50IHRoaW5nIGlzIHRoZSBpbmRleGVzLgorICogIElmIGFjY2VzcyB0byB5b3VyIGRhdGEgaXMgY2hlYXAvZmFzdCAoZS5nLiB5b3UgaGF2ZSBhIHBvaW50ZXIgdG8gYQorICogIHN0cnVjdHVyZSBpbiBtZW1vcnkpLCBpdCB3b3VsZCBtYWtlIHNlbnNlIHRvIHVwZGF0ZSB0aGUgZGF0YSBoZXJlLgorICogIElmLCBob3dldmVyLCB0aGUgYWNjZXNzaW5nIHRoZSBkYXRhIGludm92bGVzIG1vcmUgd29yayAoZS5nLiBwYXJzaW5nCisgKiAgc29tZSBvdGhlciBleGlzdGluZyBkYXRhLCBvciBwZWZvcm1pbmcgY2FsY3VsYXRpb25zIHRvIGRlcml2ZSB0aGUgZGF0YSksCisgKiAgdGhlbiB5b3UgY2FuIGxpbWl0IHlvdXJzZWxmIHRvIHNldHRpbmcgdGhlIGluZGV4ZXMgYW5kIHNhdmluZyBhbnkKKyAqICBpbmZvcm1hdGlvbiB5b3Ugd2lsbCBuZWVkIGxhdGVyLiBUaGVuIHVzZSB0aGUgc2F2ZWQgaW5mb3JtYXRpb24gaW4KKyAqICBldGhlclN0YXRzVGFibGVfcm93X3ByZXAoKSBmb3IgcG9wdWxhdGluZyBkYXRhLgorICoKKyAqIEBub3RlCisgKiAgSWYgeW91IG5lZWQgY29uc2lzdGVuY3kgYmV0d2VlbiByb3dzIChsaWtlIHlvdSB3YW50IHN0YXRpc3RpY3MKKyAqICBmb3IgZWFjaCByb3cgdG8gYmUgZnJvbSB0aGUgc2FtZSB0aW1lIGZyYW1lKSwgeW91IHNob3VsZCBzZXQgYWxsCisgKiAgZGF0YSBoZXJlLgorICoKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgc2l6ZV90ICAgICAgICAgIGNvdW50ID0gMDsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogVE9ETzozNTI6TTogfCAgIHwtPiBzZXQgaW5kZXhlcyBpbiBuZXcgZXRoZXJTdGF0c1RhYmxlIHJvd3JlcSBjb250ZXh0LgorICAgICAqIGRhdGEgY29udGV4dCB3aWxsIGJlIHNldCBmcm9tIHRoZSBwYXJhbSAodW5sZXNzIE5VTEwsCisgICAgICogICAgICBpbiB3aGljaCBjYXNlIGEgbmV3IGRhdGEgY29udGV4dCB3aWxsIGJlIGFsbG9jYXRlZCkKKyAgICAgKi8KKworICAgIC8qCisgICAgICogdGVtcG9yYXJ5IHN0b3JhZ2UgZm9yIGluZGV4IHZhbHVlcworICAgICAqLworICAgIAorICAgIC8qCisgICAgICogZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oCisgICAgICovCisKKyAgICBpbnQgICAgICAgICAgICAgZmQ7CisKKyNpZiBkZWZpbmVkKGxpbnV4KQorICAgIHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCA9IE5VTEwsICpwID0gTlVMTDsKKyNlbmRpZgorICAgIAorICAgIC8qCisgICAgICogY3JlYXRlIHNvY2tldCBmb3IgaW9jdGxzCisgICAgICovCisKKyAgICBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZihmZCA8IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgc29ja2V0XG4iKTsKKyAgICAgICAgcmV0dXJuIC0yOworICAgIH0KKworICAgIC8qCisgICAgICogZ2V0IHRoZSBpbnRlcmZhY2UgbmFtZXMgb2YgdGhlIGRldmljZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtLCBpbiBjYXNlIG9mIGZhaWx1cmUgcmV0dmFsIHN1Z2dlc3RzIHRoZSByZXNvbiBmb3IgZmFpbHVyZQorICAgICAqIGFuZCBsaXN0X2hlYWQgY29udGFpbnMgbnVsbAorICAgICAqLworCisjaWYgZGVmaW5lZChsaW51eCkKKyAgICB7CisgICAgICAgIGludCByZXR2YWw7CisKKyAgICAgICAgbGlzdF9oZWFkID0gZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2dldChsaXN0X2hlYWQsICZyZXR2YWwpOworICAgIH0KKworICAgIGlmICghbGlzdF9oZWFkKSB7CisgICAgICAgIHNubXBfbG9nIChMT0dfRVJSLCAiYWNjZXNzOmV0aGVyU3RhdHNUYWJsZSwgZXJyb3IgZ2V0dGluZyB0aGUgaW50ZXJmYWNlIG5hbWVzIHByZXNlbnQgaW4gdGhlIHN5c3RlbVxuIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yIGdldHRpbmcgdGhlIGludGVyZmFjZSBuYW1lcyBwcmVzZW50IGluIHRoZSBzeXN0ZW0iKSk7CisgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFdhbGsgb3ZlciB0aGUgbGlzdCBvZiBpbnRlcmZhY2UgbmFtZXMgcHJlc2VudCBpbiB0aGUgc3lzdGVtIGFuZCByZXRyZWl2ZSB0aGUgc3RhdGlzdGljcyAKKyAgICAgKi8KKworICAgIGZvciAocCA9IGxpc3RfaGVhZDsgcDsgcCA9IHAtPmlmbl9uZXh0KSB7CisgICAgICAgIGxvbmcgICAgICAgICAgICBldGhlclN0YXRzSW5kZXg7CisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4OworCisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlIiwgInByb2Nlc3NpbmcgJyVzJ1xuIiwgcC0+bmFtZSkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBpbmRleCB2aWEgaW9jdGwuCisgICAgICAgICAqLworCisgICAgICAgIGV0aGVyU3RhdHNJbmRleCA9IChsb25nKSBldGhlcnN0YXRzX2ludGVyZmFjZV9pb2N0bF9pZmluZGV4X2dldCgtMSwgcC0+bmFtZSk7CisKKyAgICAgICAgLyogCisgICAgICAgICAqICBnZXQgdGhlIGV0aGVyc3RhdHMgY29udGVudHMgcG9wdWxhdGVkLCBpZiB0aGUgZGV2aWNlIGlzIG5vdCBhbiBldGhlcm5ldCBkZXZpY2UKKyAgICAgICAgICogIHRoZSBvcGVyYXRpb24gd2lsbCBub3QgYmUgc3VwcG9ydGVkIGFuZCBhbiBlcnJvciBtZXNzYWdlIHdpbGwgYmUgbG9nZ2VkCisgICAgICAgICAqLworICAgICAgICAKKyAgICAgICAgcm93cmVxX2N0eCA9IGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4KE5VTEwpOworICAgICAgICBpZiAoTlVMTCA9PSByb3dyZXFfY3R4KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibWVtb3J5IGFsbG9jYXRpb24gZmFpbGVkXG4iKTsKKyAgICAgICAgICAgIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfUkVTT1VSQ0VfVU5BVkFJTEFCTEU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0KKyAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldChyb3dyZXFfY3R4LCBldGhlclN0YXRzSW5kZXgpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCisgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIGRhdGEuXG4iKTsKKyAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86MzUyOnI6IHwgICB8LT4gcG9wdWxhdGUgZXRoZXJTdGF0c1RhYmxlIGRhdGEgY29udGV4dC4KKyAgICAgICAgICogUG9wdWxhdGUgZGF0YSBjb250ZXh0IGhlcmUuIChvcHRpb25hbGx5LCBkZWxheSB1bnRpbCByb3cgcHJlcCkKKyAgICAgICAgICovCisgICAgICAgIC8qCisgICAgICAgICAqIG5vbi1UUkFOU0lFTlQgZGF0YTogbm8gbmVlZCB0byBjb3B5LiBzZXQgcG9pbnRlciB0byBkYXRhIAorICAgICAgICAgKi8KKworICAgICAgICBtZW1zZXQgKCZyb3dyZXFfY3R4LT5kYXRhLCAwLCBzaXplb2YgKHJvd3JlcV9jdHgtPmRhdGEpKTsKKyAgICAgICAgeworICAgICAgICAgICAgaW50IHJjOworCisgICAgICAgICAgICByYyA9IGludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldCAocm93cmVxX2N0eCwgZmQsIHAtPm5hbWUpOworCisgICAgICAgICAgICBpZiAocmMgPCAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImFjY2VzczpldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgZ2V0dGluZyB0aGUgc3RhdGlzdGljcyBmb3IgaW50ZXJmYWNlIHwlc3wgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgZGF0YSwgb3BlcmF0aW9uIG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWRcbiIsIHAtPm5hbWUpKTsKKyAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogaW5zZXJ0IGludG8gdGFibGUgY29udGFpbmVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIHJvd3JlcV9jdHgpOworICAgICAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yIGluc2VydGluZyB8JXN8ICIsIHAtPm5hbWUpKTsKKyAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKytjb3VudDsKKyAgICB9CisKKyAgICBjbG9zZShmZCk7CisKKyAgICAvKgorICAgICAqIGZyZWUgdGhlIGludGVyZmFjZSBuYW1lcyBsaXN0IAorICAgICAqLworCisgICAgaWYgKCAoZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUobGlzdF9oZWFkKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlLCBlcnJvciBmcmVlaW5nIHRoZSBpbnRlcmZhY2UgbmFtZSBsaXN0IFxuIik7CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6ZXRoZXJTdGF0c1RhYmxlIiwgImVycm9yIGZyZWVpbmcgdGhlIGludGVyZmFjZSBuYW1lIGxpc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICB9CisjZW5kaWYKKyAgICAKKyAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2xvYWQiLAorICAgICAgICAgICAgICAgImluc2VydGVkICUiIE5FVFNOTVBfUFJJeiAiZCByZWNvcmRzXG4iLCBjb3VudCkpOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCAqLworCisKKy8qKgorICogY29udGFpbmVyIGNsZWFuIHVwCisgKgorICogQHBhcmFtIGNvbnRhaW5lciBjb250YWluZXIgd2l0aCBhbGwgY3VycmVudCBpdGVtcworICoKKyAqICBUaGlzIG9wdGlvbmFsIGNhbGxiYWNrIGlzIGNhbGxlZCBwcmlvciB0byBhbGwKKyAqICBpdGVtJ3MgYmVpbmcgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIuIElmIHlvdQorICogIG5lZWQgdG8gZG8gYW55IHByb2Nlc3NpbmcgYmVmb3JlIHRoYXQsIGRvIGl0IGhlcmUuCisgKgorICogQG5vdGUKKyAqICBUaGUgTUZEIGhlbHBlciB3aWxsIHRha2UgY2FyZSBvZiByZWxlYXNpbmcgYWxsIHRoZSByb3cgY29udGV4dHMuCisgKgorICovCit2b2lkCitldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjM4MDpNOiBGcmVlIGV0aGVyU3RhdHNUYWJsZSBjb250YWluZXIgZGF0YS4KKyAgICAgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogcHJlcGFyZSByb3cgZm9yIHByb2Nlc3NpbmcuCisgKgorICogIFdoZW4gdGhlIGFnZW50IGhhcyBsb2NhdGVkIHRoZSByb3cgZm9yIGEgcmVxdWVzdCwgdGhpcyBmdW5jdGlvbiBpcworICogIGNhbGxlZCB0byBwcmVwYXJlIHRoZSByb3cgZm9yIHByb2Nlc3NpbmcuIElmIHlvdSBmdWxseSBwb3B1bGF0ZWQKKyAqICB0aGUgZGF0YSBjb250ZXh0IGR1cmluZyB0aGUgaW5kZXggc2V0dXAgcGhhc2UsIHlvdSBtYXkgbm90IG5lZWQgdG8KKyAqICBkbyBhbnl0aGluZy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eCBwb2ludGVyIHRvIGEgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9yb3dfcHJlcChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9yb3dfcHJlcCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzozOTA6bzogUHJlcGFyZSByb3cgZm9yIHJlcXVlc3QuCisgICAgICogSWYgcG9wdWxhdGluZyByb3cgZGF0YSB3YXMgZGVsYXllZCwgdGhpcyBpcyB0aGUgcGxhY2UgdG8KKyAgICAgKiBmaWxsIGluIHRoZSByb3cgZm9yIHRoaXMgcmVxdWVzdC4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3Jvd19wcmVwICovCisKKy8qCisgKiBUT0RPOjQyMDpyOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIGluZGV4IHZhbGlkYXRpb24uCisgKi8KKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNJbmRleAorICogZXRoZXJTdGF0c0luZGV4IGlzIHN1YmlkIDEgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHZhbHVlIG9mIHRoaXMgb2JqZWN0IHVuaXF1ZWx5IGlkZW50aWZpZXMgdGhpcworICAgICAgICBldGhlclN0YXRzIGVudHJ5LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAxICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICogUmFuZ2VzOiAgMSAtIDY1NTM1OworICoKKyAqIEl0cyBzeW50YXggaXMgSU5URUdFUjMyIChiYXNlZCBvbiBwZXJsdHlwZSBJTlRFR0VSMzIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKGxvbmcpCisgKi8KKy8qKgorICogY2hlY2sgdmFsaWRpdHkgb2YgZXRoZXJTdGF0c0luZGV4IGluZGV4IHBvcnRpb24KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgOiB0aGUgaW5jb21pbmcgdmFsdWUgaXMgbGVnYWwKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICA6IHRoZSBpbmNvbWluZyB2YWx1ZSBpcyBOT1QgbGVnYWwKKyAqCisgKiBAbm90ZSB0aGlzIGlzIG5vdCB0aGUgcGxhY2UgdG8gZG8gYW55IGNoZWNrcyBmb3IgdGhlIHNhbml0eQorICogICAgICAgb2YgbXVsdGlwbGUgaW5kZXhlcy4gVGhvc2UgdHlwZXMgb2YgY2hlY2tzIHNob3VsZCBiZSBkb25lIGluIHRoZQorICogICAgICAgZXRoZXJTdGF0c1RhYmxlX3ZhbGlkYXRlX2luZGV4KCkgZnVuY3Rpb24uCisgKgorICogQG5vdGUgQWxzbyBrZWVwIGluIG1pbmQgdGhhdCBpZiB0aGUgaW5kZXggcmVmZXJzIHRvIGEgcm93IGluIHRoaXMgb3IKKyAqICAgICAgIHNvbWUgb3RoZXIgdGFibGUsIHlvdSBjYW4ndCBjaGVjayBmb3IgdGhhdCByb3cgaGVyZSB0byBtYWtlCisgKiAgICAgICBkZWNpc2lvbnMsIHNpbmNlIHRoYXQgcm93IG1pZ2h0IG5vdCBiZSBjcmVhdGVkIHlldCwgYnV0IG1heQorICogICAgICAgYmUgY3JlYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0LiBJZiB5b3UgaGF2ZQorICogICAgICAgc3VjaCBjaGVja3MsIHRoZXkgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGNoZWNrX2RlcGVuZGVuY2llcworICogICAgICAgZnVuY3Rpb24sIGJlY2F1c2UgYW55IG5ldy9kZWxldGVkL2NoYW5nZWQgcm93cyBzaG91bGQgYmUKKyAqICAgICAgIGF2YWlsYWJsZSB0aGVuLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgY2hlY2tzIGhhdmUgYWxyZWFkeSBiZWVuIGRvbmUgZm9yIHlvdToKKyAqICAgIFRoZSB2YWx1ZSBpcyBpbiAob25lIG9mKSB0aGUgcmFuZ2Ugc2V0KHMpOiAgMSAtIDY1NTM1CisgKgorICogSWYgdGhlcmUgYSBubyBvdGhlciBjaGVja3MgeW91IG5lZWQgdG8gZG8sIHNpbXBseSByZXR1cm4gTUZEX1NVQ0NFU1MuCisgKi8KK2ludAorZXRoZXJTdGF0c0luZGV4X2NoZWNrX2luZGV4KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0luZGV4X2NoZWNrX2luZGV4IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQyNjpNOiB8LT4gQ2hlY2sgZXRoZXJTdGF0c1RhYmxlIGluZGV4IGV0aGVyU3RhdHNJbmRleC4KKyAgICAgKiBjaGVjayB0aGF0IGluZGV4IHZhbHVlIGluIHRoZSB0YWJsZSBjb250ZXh0IGlzIGxlZ2FsLgorICAgICAqIChyb3dyZXFfY3R4LT50YmxfaW5kZXguZXRoZXJTdGF0c0luZGV4KQorICAgICAqLworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOyAgICAgICAgIC8qIGV0aGVyU3RhdHNJbmRleCBpbmRleCBvayAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzSW5kZXhfY2hlY2tfaW5kZXggKi8KKworLyoqCisgKiB2ZXJpZnkgc3BlY2lmaWVkIGluZGV4IGlzIHZhbGlkLgorICoKKyAqIFRoaXMgY2hlY2sgaXMgaW5kZXBlbmRlbnQgb2Ygd2hldGhlciBvciBub3QgdGhlIHZhbHVlcyBzcGVjaWZpZWQgZm9yCisgKiB0aGUgY29sdW1ucyBvZiB0aGUgbmV3IHJvdyBhcmUgdmFsaWQuIENvbHVtbiB2YWx1ZXMgYW5kIHJvdyBjb25zaXN0ZW5jeQorICogd2lsbCBiZSBjaGVja2VkIGxhdGVyLiBBdCB0aGlzIHBvaW50LCBvbmx5IHRoZSBpbmRleCB2YWx1ZXMgc2hvdWxkIGJlCisgKiBjaGVja2VkLgorICoKKyAqIEFsbCBvZiB0aGUgaW5kaXZpZHVhbCBpbmRleCB2YWxpZGF0aW9uIGZ1bmN0aW9ucyBoYXZlIGJlZW4gY2FsbGVkLCBzbyB0aGlzCisgKiBpcyB0aGUgcGxhY2UgdG8gbWFrZSBzdXJlIHRoZXkgYXJlIHZhbGlkIGFzIGEgd2hvbGUgd2hlbiBjb21iaW5lZC4gSWYKKyAqIHlvdSBvbmx5IGhhdmUgb25lIGluZGV4LCB0aGVuIHlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nIGVsc2UKKyAqIGhlcmUuCisgKiAKKyAqIEBub3RlIEtlZXAgaW4gbWluZCB0aGF0IGlmIHRoZSBpbmRleGVzIHJlZmVyIHRvIGEgcm93IGluIHRoaXMgb3IKKyAqICAgICAgIHNvbWUgb3RoZXIgdGFibGUsIHlvdSBjYW4ndCBjaGVjayBmb3IgdGhhdCByb3cgaGVyZSB0byBtYWtlCisgKiAgICAgICBkZWNpc2lvbnMsIHNpbmNlIHRoYXQgcm93IG1pZ2h0IG5vdCBiZSBjcmVhdGVkIHlldCwgYnV0IG1heQorICogICAgICAgYmUgY3JlYXRlZCBkdXJpbmcgdGhlIHByb2Nlc3NpbmcgdGhpcyByZXF1ZXN0LiBJZiB5b3UgaGF2ZQorICogICAgICAgc3VjaCBjaGVja3MsIHRoZXkgc2hvdWxkIGJlIGRvbmUgaW4gdGhlIGNoZWNrX2RlcGVuZGVuY2llcworICogICAgICAgZnVuY3Rpb24sIGJlY2F1c2UgYW55IG5ldy9kZWxldGVkL2NoYW5nZWQgcm93cyBzaG91bGQgYmUKKyAqICAgICAgIGF2YWlsYWJsZSB0aGVuLgorICoKKyAqCisgKiBAcGFyYW0gZXRoZXJTdGF0c1RhYmxlX3JlZworICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXIgcmVnaXN0cmF0aW9uIGRhdGEKKyAqIEBwYXJhbSBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9DQU5OT1RfQ1JFQVRFX05PVyAgOiBpbmRleCBub3QgdmFsaWQgcmlnaHQgbm93CisgKiBAcmV0dmFsIE1GRF9DQU5OT1RfQ1JFQVRFX0VWRVIgOiBpbmRleCBuZXZlciB2YWxpZAorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV92YWxpZGF0ZV9pbmRleChldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfdmFsaWRhdGVfaW5kZXgiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQzMDpNOiB8LT4gVmFsaWRhdGUgcG90ZW50aWFsIGV0aGVyU3RhdHNUYWJsZSBpbmRleC4KKyAgICAgKi8KKyAgICBpZiAoMSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgImludmFsaWQgaW5kZXggZm9yIGEgbmV3IHJvdyBpbiB0aGUgIgorICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIHRhYmxlLlxuIik7CisgICAgICAgIC8qCisgICAgICAgICAqIGRldGVybWluZSBmYWlsdXJlIHR5cGUuCisgICAgICAgICAqCisgICAgICAgICAqIElmIHRoZSBpbmRleCBjb3VsZCBub3QgZXZlciBiZSBjcmVhdGVkLCByZXR1cm4gTUZEX05PVF9FVkVSCisgICAgICAgICAqIElmIHRoZSBpbmRleCBjYW4gbm90IGJlIGNyZWF0ZWQgdW5kZXIgdGhlIHByZXNlbnQgY2lyY3Vtc3RhbmNlcworICAgICAgICAgKiAoZXZlbiB0aG91Z2ggaXQgY291bGQgYmUgY3JlYXRlZCB1bmRlciBvdGhlciBjaXJjdW1zdGFuY2VzKSwKKyAgICAgICAgICogcmV0dXJuIE1GRF9OT1RfTk9XLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKDApIHsKKyAgICAgICAgICAgIHJldHVybiBNRkRfQ0FOTk9UX0NSRUFURV9FVkVSOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIE1GRF9DQU5OT1RfQ1JFQVRFX05PVzsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3ZhbGlkYXRlX2luZGV4ICovCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2FjY2Vzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwNzAwZjQKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfYWNjZXNzLmgKQEAgLTAsMCArMSw4MCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTQxNzAgJCBvZiAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfREFUQV9BQ0NFU1NfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworICAgIC8qCisgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAgICAgKi8KKworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbml0X2RhdGEoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogZXRoZXJTdGF0c1RhYmxlX3JlZyk7CisKKworICAgIC8qCisgICAgICogVE9ETzoxODA6bzogUmV2aWV3IGV0aGVyU3RhdHNUYWJsZSBjYWNoZSB0aW1lb3V0LgorICAgICAqIFRoZSBudW1iZXIgb2Ygc2Vjb25kcyBiZWZvcmUgdGhlIGNhY2hlIHRpbWVzIG91dAorICAgICAqLworI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfQ0FDSEVfVElNRU9VVCAgIDYwCisKKyAgICB2b2lkICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0KG5ldHNubXBfY29udGFpbmVyICoqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FjaGUgKiBjYWNoZSk7CisgICAgdm9pZCAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24obmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl9wdHIpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXIpOworICAgIHZvaWQgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfY2FjaGVfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcik7CisgICAgdm9pZCAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9jYWNoZV9mcmVlKG5ldHNubXBfY29udGFpbmVyICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKworI2RlZmluZSBNQVhfTElORV9TSVpFIDI1NgorCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dfcHJlcChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfdmFsaWRhdGVfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfcmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNJbmRleF9jaGVja19pbmRleChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOyAgICAgICAvKiBpbnRlcm5hbCAqLworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9EQVRBX0FDQ0VTU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmMgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JhNTFkNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9nZXQuYwpAQCAtMCwwICsxLDE0MTEgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDg4ICQgb2YgJCAKKyAqCisgKiAkSWQ6JAorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX2dldCBkYXRhX2dldDogUm91dGluZXMgdG8gZ2V0IGRhdGEKKyAqCisgKiBUT0RPOjIzMDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIGdldCByb3V0aW5lcy4KKyAqIFRPRE86MjQwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgbWFwcGluZyByb3V0aW5lcyAoaWYgYW55KS4KKyAqCisgKiBUaGVzZSByb3V0aW5lIGFyZSB1c2VkIHRvIGdldCB0aGUgdmFsdWUgZm9yIGluZGl2aWR1YWwgb2JqZWN0cy4gVGhlCisgKiByb3cgY29udGV4dCBpcyBwYXNzZWQsIGFsb25nIHdpdGggYSBwb2ludGVyIHRvIHRoZSBtZW1vcnkgd2hlcmUgdGhlCisgKiB2YWx1ZSBzaG91bGQgYmUgY29waWVkLgorICoKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgKi8KKworLyoKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogKiBUT0RPOjIwMDpyOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIGRhdGEgY29udGV4dCBmdW5jdGlvbnMuCisgKi8KKworCisvKioKKyAqIHNldCBtaWIgaW5kZXgoZXMpCisgKgorICogQHBhcmFtIHRibF9pZHggbWliIGluZGV4IHN0cnVjdHVyZQorICogQHBhcmFtIGV0aGVyU3RhdHNJbmRleF92YWwKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICA6IHN1Y2Nlc3MuCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICA6IG90aGVyIGVycm9yLgorICoKKyAqIEByZW1hcmsKKyAqICBUaGlzIGNvbnZlbmllbmNlIGZ1bmN0aW9uIGlzIHVzZWZ1bCBmb3Igc2V0dGluZyBhbGwgdGhlIE1JQiBpbmRleAorICogIGNvbXBvbmVudHMgd2l0aCBhIHNpbmdsZSBmdW5jdGlvbiBjYWxsLiBJdCBpcyBhc3N1bWUgdGhhdCB0aGUgQyB2YWx1ZXMKKyAqICBoYXZlIGFscmVhZHkgYmVlbiBtYXBwZWQgZnJvbSB0aGVpciBuYXRpdmUvcmF3Zm9ybWF0IHRvIHRoZSBNSUIgZm9ybWF0LgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXggKiB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldGhlclN0YXRzSW5kZXhfdmFsKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAqLworICAgIHRibF9pZHgtPmV0aGVyU3RhdHNJbmRleCA9IGV0aGVyU3RhdHNJbmRleF92YWw7CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHggKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNldCByb3cgY29udGV4dCBpbmRleGVzCisgKgorICogQHBhcmFtIHJlcXJlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KKyAqCisgKiBAcmVtYXJrCisgKiAgVGhpcyBmdW5jdGlvbiBzZXRzIHRoZSBtaWIgaW5kZXhzLCB0aGVuIHVwZGF0ZXMgdGhlIG9pZCBpbmRleHMKKyAqICBmcm9tIHRoZSBtaWIgaW5kZXguCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nIGV0aGVyU3RhdHNJbmRleF92YWwpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgaWYgKE1GRF9TVUNDRVNTICE9CisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldF90YmxfaWR4KCZyb3dyZXFfY3R4LT50YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzSW5kZXhfdmFsKSkKKyAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKworICAgIC8qCisgICAgICogY29udmVydCBtaWIgaW5kZXggdG8gb2lkIGluZGV4CisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBzaXplb2Yocm93cmVxX2N0eC0+b2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKyAgICBpZiAoMCAhPSBldGhlclN0YXRzVGFibGVfaW5kZXhfdG9fb2lkKCZyb3dyZXFfY3R4LT5vaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnJvd3JlcV9jdHgtPnRibF9pZHgpKSB7CisgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgfQorCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfaW5kZXhlc19zZXQgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzRGF0YVNvdXJjZQorICogZXRoZXJTdGF0c0RhdGFTb3VyY2UgaXMgc3ViaWQgMiBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIENyZWF0ZS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjIKKyAqIERlc2NyaXB0aW9uOgorVGhpcyBvYmplY3QgaWRlbnRpZmllcyB0aGUgc291cmNlIG9mIHRoZSBkYXRhIHRoYXQKKyAgICAgICAgdGhpcyBldGhlclN0YXRzIGVudHJ5IGlzIGNvbmZpZ3VyZWQgdG8gYW5hbHl6ZS4gIFRoaXMKKyAgICAgICAgc291cmNlIGNhbiBiZSBhbnkgZXRoZXJuZXQgaW50ZXJmYWNlIG9uIHRoaXMgZGV2aWNlLgorICAgICAgICBJbiBvcmRlciB0byBpZGVudGlmeSBhIHBhcnRpY3VsYXIgaW50ZXJmYWNlLCB0aGlzIG9iamVjdAorICAgICAgICBzaGFsbCBpZGVudGlmeSB0aGUgaW5zdGFuY2Ugb2YgdGhlIGlmSW5kZXggb2JqZWN0LAorICAgICAgICBkZWZpbmVkIGluIFJGQyAyMjMzIFsxN10sIGZvciB0aGUgZGVzaXJlZCBpbnRlcmZhY2UuCisgICAgICAgIEZvciBleGFtcGxlLCBpZiBhbiBlbnRyeSB3ZXJlIHRvIHJlY2VpdmUgZGF0YSBmcm9tCisgICAgICAgIGludGVyZmFjZSAjMSwgdGhpcyBvYmplY3Qgd291bGQgYmUgc2V0IHRvIGlmSW5kZXguMS4KKworICAgICAgICBUaGUgc3RhdGlzdGljcyBpbiB0aGlzIGdyb3VwIHJlZmxlY3QgYWxsIHBhY2tldHMKKyAgICAgICAgb24gdGhlIGxvY2FsIG5ldHdvcmsgc2VnbWVudCBhdHRhY2hlZCB0byB0aGUgaWRlbnRpZmllZAorICAgICAgICBpbnRlcmZhY2UuCisKKyAgICAgICAgQW4gYWdlbnQgbWF5IG9yIG1heSBub3QgYmUgYWJsZSB0byB0ZWxsIGlmIGZ1bmRhbWVudGFsCisgICAgICAgIGNoYW5nZXMgdG8gdGhlIG1lZGlhIG9mIHRoZSBpbnRlcmZhY2UgaGF2ZSBvY2N1cnJlZCBhbmQKKyAgICAgICAgbmVjZXNzaXRhdGUgYW4gaW52YWxpZGF0aW9uIG9mIHRoaXMgZW50cnkuICBGb3IgZXhhbXBsZSwgYQorICAgICAgICBob3QtcGx1Z2dhYmxlIGV0aGVybmV0IGNhcmQgY291bGQgYmUgcHVsbGVkIG91dCBhbmQgcmVwbGFjZWQKKyAgICAgICAgYnkgYSB0b2tlbi1yaW5nIGNhcmQuICBJbiBzdWNoIGEgY2FzZSwgaWYgdGhlIGFnZW50IGhhcyBzdWNoCisgICAgICAgIGtub3dsZWRnZSBvZiB0aGUgY2hhbmdlLCBpdCBpcyByZWNvbW1lbmRlZCB0aGF0IGl0CisgICAgICAgIGludmFsaWRhdGUgdGhpcyBlbnRyeS4KKworICAgICAgICBUaGlzIG9iamVjdCBtYXkgbm90IGJlIG1vZGlmaWVkIGlmIHRoZSBhc3NvY2lhdGVkCisgICAgICAgIGV0aGVyU3RhdHNTdGF0dXMgb2JqZWN0IGlzIGVxdWFsIHRvIHZhbGlkKDEpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAxCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgT0JKRUNUSUQgKGJhc2VkIG9uIHBlcmx0eXBlIE9CSkVDVElEKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX09CSkVDVF9JRC4gVGhlIEMgdHlwZSBkZWNsIGlzIG9pZCAob2lkKQorICogVGhpcyBkYXRhIHR5cGUgcmVxdWlyZXMgYSBsZW5ndGguCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0RhdGFTb3VyY2UgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSBvaWQgdmFyaWFibGUKKyAqIEBwYXJhbSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIGEgc2l6ZV90LiBPbiBlbnRyeSwgaXQgd2lsbCBjb250YWluIHRoZSBzaXplIChpbiBieXRlcykKKyAqICAgICAgICBwb2ludGVkIHRvIGJ5IGV0aGVyU3RhdHNEYXRhU291cmNlLgorICogICAgICAgIE9uIGV4aXQsIHRoaXMgdmFsdWUgc2hvdWxkIGNvbnRhaW4gdGhlIGRhdGEgc2l6ZSAoaW4gYnl0ZXMpLgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisqCisgKiBAbm90ZSBJZiB5b3UgbmVlZCBtb3JlIHRoYW4gKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIpIGJ5dGVzIG9mIG1lbW9yeSwKKyAqICAgICAgIGFsbG9jYXRlIGl0IHVzaW5nIG1hbGxvYygpIGFuZCB1cGRhdGUgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIuCisgKiAgICAgICA8Yj5ETyBOT1Q8L2I+IGZyZWUgdGhlIHByZXZpb3VzIHBvaW50ZXIuCisgKiAgICAgICBUaGUgTUZEIGhlbHBlciB3aWxsIHJlbGVhc2UgdGhlIG1lbW9yeSB5b3UgYWxsb2NhdGUuCisgKgorICogQHJlbWFyayBJZiB5b3UgY2FsbCB0aGlzIGZ1bmN0aW9uIHlvdXJzZWxmLCB5b3UgYXJlIHJlc3BvbnNpYmxlCisgKiAgICAgICAgIGZvciBjaGVja2luZyBpZiB0aGUgcG9pbnRlciBjaGFuZ2VkLCBhbmQgZnJlZWluZyBhbnkKKyAqICAgICAgICAgcHJldmlvdXNseSBhbGxvY2F0ZWQgbWVtb3J5LiAoTm90IG5lY2Vzc2FyeSBpZiB5b3UgcGFzcworICogICAgICAgICBpbiBhIHBvaW50ZXIgdG8gc3RhdGljIG1lbW9yeSwgb2J2aW91c2x5LikKKyAqLworaW50CitldGhlclN0YXRzRGF0YVNvdXJjZV9nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqKiBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCisgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIpCisgICAgICAgICAgICAgICAgICAgJiYgKE5VTEwgIT0gKmV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyKSk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0RhdGFTb3VyY2VfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0RhdGFTb3VyY2UgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfcHRyICkgZGF0YSBhbmQgKCogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW5fcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgLyoKKyAgICAgKiBtYWtlIHN1cmUgdGhlcmUgaXMgZW5vdWdoIHNwYWNlIGZvciBldGhlclN0YXRzRGF0YVNvdXJjZSBkYXRhCisgICAgICovCisgICAgaWYgKChOVUxMID09ICgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIpKSB8fAorICAgICAgICAoKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIpIDwKKyAgICAgICAgIChyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiAqCisgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VbMF0pKSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxsb2NhdGUgc3BhY2UgZm9yIGV0aGVyU3RhdHNEYXRhU291cmNlIGRhdGEKKyAgICAgICAgICovCisgICAgICAgICgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIpID0KKyAgICAgICAgICAgIG1hbGxvYyhyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiAqCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VbMF0pKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX3B0cikpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgICAgIH0KKyAgICB9CisgICAgKCpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gKgorICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZVswXSk7CisgICAgbWVtY3B5KCgqZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIpLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiAqCisgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlWzBdKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNEYXRhU291cmNlX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzRHJvcEV2ZW50cworICogZXRoZXJTdGF0c0Ryb3BFdmVudHMgaXMgc3ViaWQgMyBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMworICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGV2ZW50cyBpbiB3aGljaCBwYWNrZXRzCisgICAgICAgIHdlcmUgZHJvcHBlZCBieSB0aGUgcHJvYmUgZHVlIHRvIGxhY2sgb2YgcmVzb3VyY2VzLgorICAgICAgICBOb3RlIHRoYXQgdGhpcyBudW1iZXIgaXMgbm90IG5lY2Vzc2FyaWx5IHRoZSBudW1iZXIgb2YKKyAgICAgICAgcGFja2V0cyBkcm9wcGVkOyBpdCBpcyBqdXN0IHRoZSBudW1iZXIgb2YgdGltZXMgdGhpcworICAgICAgICBjb25kaXRpb24gaGFzIGJlZW4gZGV0ZWN0ZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzRHJvcEV2ZW50cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzRHJvcEV2ZW50c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzRHJvcEV2ZW50c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNEcm9wRXZlbnRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNEcm9wRXZlbnRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzRHJvcEV2ZW50c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzRHJvcEV2ZW50c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0Ryb3BFdmVudHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNEcm9wRXZlbnRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzT2N0ZXRzCisgKiBldGhlclN0YXRzT2N0ZXRzIGlzIHN1YmlkIDQgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjQKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBvY3RldHMgb2YgZGF0YSAoaW5jbHVkaW5nCisgICAgICAgIHRob3NlIGluIGJhZCBwYWNrZXRzKSByZWNlaXZlZCBvbiB0aGUKKyAgICAgICAgbmV0d29yayAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nCisgICAgICAgIEZDUyBvY3RldHMpLgorCisgICAgICAgIFRoaXMgb2JqZWN0IGNhbiBiZSB1c2VkIGFzIGEgcmVhc29uYWJsZSBlc3RpbWF0ZSBvZgorICAgICAgICAxMC1NZWdhYml0IGV0aGVybmV0IHV0aWxpemF0aW9uLiAgSWYgZ3JlYXRlciBwcmVjaXNpb24gaXMKKyAgICAgICAgZGVzaXJlZCwgdGhlIGV0aGVyU3RhdHNQa3RzIGFuZCBldGhlclN0YXRzT2N0ZXRzIG9iamVjdHMKKyAgICAgICAgc2hvdWxkIGJlIHNhbXBsZWQgYmVmb3JlIGFuZCBhZnRlciBhIGNvbW1vbiBpbnRlcnZhbC4gIFRoZQorICAgICAgICBkaWZmZXJlbmNlcyBpbiB0aGUgc2FtcGxlZCB2YWx1ZXMgYXJlIFBrdHMgYW5kIE9jdGV0cywKKyAgICAgICAgcmVzcGVjdGl2ZWx5LCBhbmQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGluIHRoZSBpbnRlcnZhbCBpcworICAgICAgICBJbnRlcnZhbC4gIFRoZXNlIHZhbHVlcyBhcmUgdXNlZCB0byBjYWxjdWxhdGUgdGhlIFV0aWxpemF0aW9uCisgICAgICAgIGFzIGZvbGxvd3M6CisKKyAgICAgICAgICAgICAgICAgICAgICAgICBQa3RzICogKDkuNiArIDYuNCkgKyAoT2N0ZXRzICogLjgpCisgICAgICAgICBVdGlsaXphdGlvbiA9IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludGVydmFsICogMTAsMDAwCisKKyAgICAgICAgVGhlIHJlc3VsdCBvZiB0aGlzIGVxdWF0aW9uIGlzIHRoZSB2YWx1ZSBVdGlsaXphdGlvbiB3aGljaAorICAgICAgICBpcyB0aGUgcGVyY2VudCB1dGlsaXphdGlvbiBvZiB0aGUgZXRoZXJuZXQgc2VnbWVudCBvbiBhCisgICAgICAgIHNjYWxlIG9mIDAgdG8gMTAwIHBlcmNlbnQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzT2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c09jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c09jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c09jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c09jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c09jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c09jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzT2N0ZXRzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzT2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0cworICogZXRoZXJTdGF0c1BrdHMgaXMgc3ViaWQgNSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuNQorICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIHBhY2tldHMgKGluY2x1ZGluZyBiYWQgcGFja2V0cywKKyAgICAgICAgYnJvYWRjYXN0IHBhY2tldHMsIGFuZCBtdWx0aWNhc3QgcGFja2V0cykgcmVjZWl2ZWQuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzUGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHNfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHMKKyAqIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzIGlzIHN1YmlkIDYgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjYKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBnb29kIHBhY2tldHMgcmVjZWl2ZWQgdGhhdCB3ZXJlCisgICAgICAgIGRpcmVjdGVkIHRvIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4gIE5vdGUgdGhhdCB0aGlzCisgICAgICAgIGRvZXMgbm90IGluY2x1ZGUgbXVsdGljYXN0IHBhY2tldHMuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzQnJvYWRjYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzQnJvYWRjYXN0UGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzTXVsdGljYXN0UGt0cworICogZXRoZXJTdGF0c011bHRpY2FzdFBrdHMgaXMgc3ViaWQgNyBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuNworICogRGVzY3JpcHRpb246CitUaGUgdG90YWwgbnVtYmVyIG9mIGdvb2QgcGFja2V0cyByZWNlaXZlZCB0aGF0IHdlcmUKKyAgICAgICAgZGlyZWN0ZWQgdG8gYSBtdWx0aWNhc3QgYWRkcmVzcy4gIE5vdGUgdGhhdCB0aGlzIG51bWJlcgorICAgICAgICBkb2VzIG5vdCBpbmNsdWRlIHBhY2tldHMgZGlyZWN0ZWQgdG8gdGhlIGJyb2FkY2FzdAorCisgICAgICAgIGFkZHJlc3MuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzTXVsdGljYXN0UGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzTXVsdGljYXN0UGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c011bHRpY2FzdFBrdHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnMKKyAqIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycyBpcyBzdWJpZCA4IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS44CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0CisgICAgICAgIGhhZCBhIGxlbmd0aCAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cywgYnV0CisgICAgICAgIGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKSBvZiBiZXR3ZWVuIDY0IGFuZCAxNTE4CisgICAgICAgIG9jdGV0cywgaW5jbHVzaXZlLCBidXQgaGFkIGVpdGhlciBhIGJhZAorICAgICAgICBGcmFtZSBDaGVjayBTZXF1ZW5jZSAoRkNTKSB3aXRoIGFuIGludGVncmFsCisgICAgICAgIG51bWJlciBvZiBvY3RldHMgKEZDUyBFcnJvcikgb3IgYSBiYWQgRkNTIHdpdGgKKyAgICAgICAgYSBub24taW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cyAoQWxpZ25tZW50IEVycm9yKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNVbmRlcnNpemVQa3RzCisgKiBldGhlclN0YXRzVW5kZXJzaXplUGt0cyBpcyBzdWJpZCA5IG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS45CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IHdlcmUKKyAgICAgICAgbGVzcyB0aGFuIDY0IG9jdGV0cyBsb25nIChleGNsdWRpbmcgZnJhbWluZyBiaXRzLAorICAgICAgICBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpIGFuZCB3ZXJlIG90aGVyd2lzZSB3ZWxsCisgICAgICAgIGZvcm1lZC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNVbmRlcnNpemVQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzVW5kZXJzaXplUGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMKKyAqIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMgaXMgc3ViaWQgMTAgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjEwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyByZWNlaXZlZCB0aGF0IHdlcmUKKyAgICAgICAgbG9uZ2VyIHRoYW4gMTUxOCBvY3RldHMgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMsCisgICAgICAgIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykgYW5kIHdlcmUgb3RoZXJ3aXNlCisgICAgICAgIHdlbGwgZm9ybWVkLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c092ZXJzaXplUGt0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzT3ZlcnNpemVQa3RzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c092ZXJzaXplUGt0czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c092ZXJzaXplUGt0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0ZyYWdtZW50cworICogZXRoZXJTdGF0c0ZyYWdtZW50cyBpcyBzdWJpZCAxMSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTEKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgd2VyZSBsZXNzIHRoYW4KKyAgICAgICAgNjQgb2N0ZXRzIGluIGxlbmd0aCAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nCisgICAgICAgIEZDUyBvY3RldHMpIGFuZCBoYWQgZWl0aGVyIGEgYmFkIEZyYW1lIENoZWNrIFNlcXVlbmNlCisgICAgICAgIChGQ1MpIHdpdGggYW4gaW50ZWdyYWwgbnVtYmVyIG9mIG9jdGV0cyAoRkNTIEVycm9yKSBvciBhCisgICAgICAgIGJhZCBGQ1Mgd2l0aCBhIG5vbi1pbnRlZ3JhbCBudW1iZXIgb2Ygb2N0ZXRzIChBbGlnbm1lbnQKKyAgICAgICAgRXJyb3IpLgorCisgICAgICAgIE5vdGUgdGhhdCBpdCBpcyBlbnRpcmVseSBub3JtYWwgZm9yIGV0aGVyU3RhdHNGcmFnbWVudHMgdG8KKyAgICAgICAgaW5jcmVtZW50LiAgVGhpcyBpcyBiZWNhdXNlIGl0IGNvdW50cyBib3RoIHJ1bnRzICh3aGljaCBhcmUKKyAgICAgICAgbm9ybWFsIG9jY3VycmVuY2VzIGR1ZSB0byBjb2xsaXNpb25zKSBhbmQgbm9pc2UgaGl0cy4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNGcmFnbWVudHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzRnJhZ21lbnRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0ZyYWdtZW50c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzRnJhZ21lbnRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNGcmFnbWVudHNfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNGcmFnbWVudHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNGcmFnbWVudHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNKYWJiZXJzCisgKiBldGhlclN0YXRzSmFiYmVycyBpcyBzdWJpZCAxMiBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTIKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIHJlY2VpdmVkIHRoYXQgd2VyZQorICAgICAgICBsb25nZXIgdGhhbiAxNTE4IG9jdGV0cyAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cywKKyAgICAgICAgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKSwgYW5kIGhhZCBlaXRoZXIgYSBiYWQKKyAgICAgICAgRnJhbWUgQ2hlY2sgU2VxdWVuY2UgKEZDUykgd2l0aCBhbiBpbnRlZ3JhbCBudW1iZXIKKyAgICAgICAgb2Ygb2N0ZXRzIChGQ1MgRXJyb3IpIG9yIGEgYmFkIEZDUyB3aXRoIGEgbm9uLWludGVncmFsCisgICAgICAgIG51bWJlciBvZiBvY3RldHMgKEFsaWdubWVudCBFcnJvcikuCisKKyAgICAgICAgTm90ZSB0aGF0IHRoaXMgZGVmaW5pdGlvbiBvZiBqYWJiZXIgaXMgZGlmZmVyZW50CisgICAgICAgIHRoYW4gdGhlIGRlZmluaXRpb24gaW4gSUVFRS04MDIuMyBzZWN0aW9uIDguMi4xLjUKKyAgICAgICAgKDEwQkFTRTUpIGFuZCBzZWN0aW9uIDEwLjMuMS40ICgxMEJBU0UyKS4gIFRoZXNlCisgICAgICAgIGRvY3VtZW50cyBkZWZpbmUgamFiYmVyIGFzIHRoZSBjb25kaXRpb24gd2hlcmUgYW55CisgICAgICAgIHBhY2tldCBleGNlZWRzIDIwIG1zLiAgVGhlIGFsbG93ZWQgcmFuZ2UgdG8gZGV0ZWN0CisgICAgICAgIGphYmJlciBpcyBiZXR3ZWVuIDIwIG1zIGFuZCAxNTAgbXMuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzSmFiYmVycyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNKYWJiZXJzX3ZhbF9wdHIKKyAqICAgICAgICBQb2ludGVyIHRvIHN0b3JhZ2UgZm9yIGEgdV9sb25nIHZhcmlhYmxlCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzSmFiYmVyc19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNKYWJiZXJzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzSmFiYmVyc192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNKYWJiZXJzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzSmFiYmVycyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0phYmJlcnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c0phYmJlcnNfdmFsX3B0cikgPSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNKYWJiZXJzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzSmFiYmVyc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0NvbGxpc2lvbnMKKyAqIGV0aGVyU3RhdHNDb2xsaXNpb25zIGlzIHN1YmlkIDEzIG9mIGV0aGVyU3RhdHNFbnRyeS4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudCwgYW5kIGl0cyBhY2Nlc3MgbGV2ZWwgaXMgUmVhZE9ubHkuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4xMworICogRGVzY3JpcHRpb246CitUaGUgYmVzdCBlc3RpbWF0ZSBvZiB0aGUgdG90YWwgbnVtYmVyIG9mIGNvbGxpc2lvbnMKKyAgICAgICAgb24gdGhpcyBFdGhlcm5ldCBzZWdtZW50LgorCisgICAgICAgIFRoZSB2YWx1ZSByZXR1cm5lZCB3aWxsIGRlcGVuZCBvbiB0aGUgbG9jYXRpb24gb2YgdGhlCisgICAgICAgIFJNT04gcHJvYmUuIFNlY3Rpb24gOC4yLjEuMyAoMTBCQVNFLTUpIGFuZCBzZWN0aW9uCisgICAgICAgIDEwLjMuMS4zICgxMEJBU0UtMikgb2YgSUVFRSBzdGFuZGFyZCA4MDIuMyBzdGF0ZXMgdGhhdCBhCisgICAgICAgIHN0YXRpb24gbXVzdCBkZXRlY3QgYSBjb2xsaXNpb24sIGluIHRoZSByZWNlaXZlIG1vZGUsIGlmCisgICAgICAgIHRocmVlIG9yIG1vcmUgc3RhdGlvbnMgYXJlIHRyYW5zbWl0dGluZyBzaW11bHRhbmVvdXNseS4gIEEKKyAgICAgICAgcmVwZWF0ZXIgcG9ydCBtdXN0IGRldGVjdCBhIGNvbGxpc2lvbiB3aGVuIHR3byBvciBtb3JlCisKKyAgICAgICAgc3RhdGlvbnMgYXJlIHRyYW5zbWl0dGluZyBzaW11bHRhbmVvdXNseS4gIFRodXMgYSBwcm9iZQorICAgICAgICBwbGFjZWQgb24gYSByZXBlYXRlciBwb3J0IGNvdWxkIHJlY29yZCBtb3JlIGNvbGxpc2lvbnMKKyAgICAgICAgdGhhbiBhIHByb2JlIGNvbm5lY3RlZCB0byBhIHN0YXRpb24gb24gdGhlIHNhbWUgc2VnbWVudAorICAgICAgICB3b3VsZC4KKworICAgICAgICBQcm9iZSBsb2NhdGlvbiBwbGF5cyBhIG11Y2ggc21hbGxlciByb2xlIHdoZW4gY29uc2lkZXJpbmcKKyAgICAgICAgMTBCQVNFLVQuICAxNC4yLjEuNCAoMTBCQVNFLVQpIG9mIElFRUUgc3RhbmRhcmQgODAyLjMKKyAgICAgICAgZGVmaW5lcyBhIGNvbGxpc2lvbiBhcyB0aGUgc2ltdWx0YW5lb3VzIHByZXNlbmNlIG9mIHNpZ25hbHMKKyAgICAgICAgb24gdGhlIERPIGFuZCBSRCBjaXJjdWl0cyAodHJhbnNtaXR0aW5nIGFuZCByZWNlaXZpbmcKKyAgICAgICAgYXQgdGhlIHNhbWUgdGltZSkuICBBIDEwQkFTRS1UIHN0YXRpb24gY2FuIG9ubHkgZGV0ZWN0CisgICAgICAgIGNvbGxpc2lvbnMgd2hlbiBpdCBpcyB0cmFuc21pdHRpbmcuICBUaHVzIHByb2JlcyBwbGFjZWQgb24KKyAgICAgICAgYSBzdGF0aW9uIGFuZCBhIHJlcGVhdGVyLCBzaG91bGQgcmVwb3J0IHRoZSBzYW1lIG51bWJlciBvZgorICAgICAgICBjb2xsaXNpb25zLgorCisgICAgICAgIE5vdGUgYWxzbyB0aGF0IGFuIFJNT04gcHJvYmUgaW5zaWRlIGEgcmVwZWF0ZXIgc2hvdWxkCisgICAgICAgIGlkZWFsbHkgcmVwb3J0IGNvbGxpc2lvbnMgYmV0d2VlbiB0aGUgcmVwZWF0ZXIgYW5kIG9uZSBvcgorICAgICAgICBtb3JlIG90aGVyIGhvc3RzICh0cmFuc21pdCBjb2xsaXNpb25zIGFzIGRlZmluZWQgYnkgSUVFRQorICAgICAgICA4MDIuM2spIHBsdXMgcmVjZWl2ZXIgY29sbGlzaW9ucyBvYnNlcnZlZCBvbiBhbnkgY29heAorICAgICAgICBzZWdtZW50cyB0byB3aGljaCB0aGUgcmVwZWF0ZXIgaXMgY29ubmVjdGVkLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c0NvbGxpc2lvbnMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzQ29sbGlzaW9uc192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c0NvbGxpc2lvbnNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBldGhlclN0YXRzQ29sbGlzaW9uc192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzQ29sbGlzaW9uc19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzQ29sbGlzaW9ucyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNDb2xsaXNpb25zOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzQ29sbGlzaW9uc19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHM2NE9jdGV0cworICogZXRoZXJTdGF0c1BrdHM2NE9jdGV0cyBpcyBzdWJpZCAxNCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTQKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkCisgICAgICAgIHBhY2tldHMpIHJlY2VpdmVkIHRoYXQgd2VyZSA2NCBvY3RldHMgaW4gbGVuZ3RoCisgICAgICAgIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czY0T2N0ZXRzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzNjRPY3RldHNfZ2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHM2NE9jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHM2NE9jdGV0c192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT5kYXRhCisgICAgICovCisgICAgKCpldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czY0T2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzX2dldCAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMKKyAqIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cyBpcyBzdWJpZCAxNSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTUKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkCisgICAgICAgIHBhY2tldHMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuCisgICAgICAgIDY1IGFuZCAxMjcgb2N0ZXRzIGluIGxlbmd0aCBpbmNsdXNpdmUKKyAgICAgICAgKGV4Y2x1ZGluZyBmcmFtaW5nIGJpdHMgYnV0IGluY2x1ZGluZyBGQ1Mgb2N0ZXRzKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMAorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIENPVU5URVIgKGJhc2VkIG9uIHBlcmx0eXBlIENPVU5URVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fQ09VTlRFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIHVfbG9uZyAodV9sb25nKQorICovCisvKioKKyAqIEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWxfcHRyKQoreworICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c192YWxfcHRyKSA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMKKyAqIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMgaXMgc3ViaWQgMTYgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjE2CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZAorICAgICAgICBwYWNrZXRzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbgorICAgICAgICAxMjggYW5kIDI1NSBvY3RldHMgaW4gbGVuZ3RoIGluY2x1c2l2ZQorICAgICAgICAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMKKyAqIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMgaXMgc3ViaWQgMTcgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjE3CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZAorICAgICAgICBwYWNrZXRzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbgorICAgICAgICAyNTYgYW5kIDUxMSBvY3RldHMgaW4gbGVuZ3RoIGluY2x1c2l2ZQorICAgICAgICAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cyBkYXRhLgorICoKKyAqIFNldCBhIHZhbHVlIHVzaW5nIHRoZSBkYXRhIGNvbnRleHQgZm9yIHRoZSByb3cuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbF9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19nZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICAoKmV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfZ2V0ICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzCisgKiBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cyBpcyBzdWJpZCAxOCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIFJlYWRPbmx5LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLjEuMTgKKyAqIERlc2NyaXB0aW9uOgorVGhlIHRvdGFsIG51bWJlciBvZiBwYWNrZXRzIChpbmNsdWRpbmcgYmFkCisgICAgICAgIHBhY2tldHMpIHJlY2VpdmVkIHRoYXQgd2VyZSBiZXR3ZWVuCisgICAgICAgIDUxMiBhbmQgMTAyMyBvY3RldHMgaW4gbGVuZ3RoIGluY2x1c2l2ZQorICAgICAgICAoZXhjbHVkaW5nIGZyYW1pbmcgYml0cyBidXQgaW5jbHVkaW5nIEZDUyBvY3RldHMpLgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAwCisgKgorICoKKyAqIEl0cyBzeW50YXggaXMgQ09VTlRFUiAoYmFzZWQgb24gcGVybHR5cGUgQ09VTlRFUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9DT1VOVEVSLiBUaGUgQyB0eXBlIGRlY2wgaXMgdV9sb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIHVfbG9uZyB2YXJpYWJsZQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgICAgICAgICA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX1NLSVAgICAgICAgICAgICA6IHNraXAgdGhpcyBub2RlIChubyB2YWx1ZSBmb3Igbm93KQorICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgICAgIDogQW55IG90aGVyIGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbF9wdHIpCit7CisgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX2dldCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86MjMxOm86IHwtPiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cyBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfdmFsX3B0cikgPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzCisgKiBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMgaXMgc3ViaWQgMTkgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBSZWFkT25seS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjE5CisgKiBEZXNjcmlwdGlvbjoKK1RoZSB0b3RhbCBudW1iZXIgb2YgcGFja2V0cyAoaW5jbHVkaW5nIGJhZAorICAgICAgICBwYWNrZXRzKSByZWNlaXZlZCB0aGF0IHdlcmUgYmV0d2VlbgorICAgICAgICAxMDI0IGFuZCAxNTE4IG9jdGV0cyBpbiBsZW5ndGggaW5jbHVzaXZlCisgICAgICAgIChleGNsdWRpbmcgZnJhbWluZyBiaXRzIGJ1dCBpbmNsdWRpbmcgRkNTIG9jdGV0cykuCisgKgorICogQXR0cmlidXRlczoKKyAqICAgYWNjZXNzaWJsZSAxICAgICBpc3NjYWxhciAwICAgICBlbnVtcyAgMCAgICAgIGhhc2RlZnZhbCAwCisgKiAgIHJlYWRhYmxlICAgMSAgICAgaXNjb2x1bW4gMSAgICAgcmFuZ2VzIDAgICAgICBoYXNoaW50ICAgMAorICogICBzZXR0YWJsZSAgIDAKKyAqCisgKgorICogSXRzIHN5bnRheCBpcyBDT1VOVEVSIChiYXNlZCBvbiBwZXJsdHlwZSBDT1VOVEVSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0NPVU5URVIuIFRoZSBDIHR5cGUgZGVjbCBpcyB1X2xvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHMgZGF0YS4KKyAqCisgKiBTZXQgYSB2YWx1ZSB1c2luZyB0aGUgZGF0YSBjb250ZXh0IGZvciB0aGUgcm93LgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsX3B0cgorICogICAgICAgIFBvaW50ZXIgdG8gc3RvcmFnZSBmb3IgYSB1X2xvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWxfcHRyKTsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19nZXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjIzMTpvOiB8LT4gRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzIGRhdGEuCisgICAgICogY29weSAoKiBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3ZhbF9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHM7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c093bmVyCisgKiBldGhlclN0YXRzT3duZXIgaXMgc3ViaWQgMjAgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBDcmVhdGUuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4yMAorICogRGVzY3JpcHRpb246CitUaGUgZW50aXR5IHRoYXQgY29uZmlndXJlZCB0aGlzIGVudHJ5IGFuZCBpcyB0aGVyZWZvcmUKKyAgICAgICAgdXNpbmcgdGhlIHJlc291cmNlcyBhc3NpZ25lZCB0byBpdC4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMSAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMQorICoKKyAqIFJhbmdlczogIDAgLSAxMjc7CisgKgorICogSXRzIHN5bnRheCBpcyBPd25lclN0cmluZyAoYmFzZWQgb24gcGVybHR5cGUgT0NURVRTVFIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fT0NURVRfU1RSLiBUaGUgQyB0eXBlIGRlY2wgaXMgY2hhciAoY2hhcikKKyAqIFRoaXMgZGF0YSB0eXBlIHJlcXVpcmVzIGEgbGVuZ3RoLiAgKE1heCAxMjcpCisgKi8KKy8qKgorICogRXh0cmFjdCB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZXRoZXJTdGF0c093bmVyIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGNoYXIgdmFyaWFibGUKKyAqIEBwYXJhbSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBhIHNpemVfdC4gT24gZW50cnksIGl0IHdpbGwgY29udGFpbiB0aGUgc2l6ZSAoaW4gYnl0ZXMpCisgKiAgICAgICAgcG9pbnRlZCB0byBieSBldGhlclN0YXRzT3duZXIuCisgKiAgICAgICAgT24gZXhpdCwgdGhpcyB2YWx1ZSBzaG91bGQgY29udGFpbiB0aGUgZGF0YSBzaXplIChpbiBieXRlcykuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfU0tJUCAgICAgICAgICAgIDogc2tpcCB0aGlzIG5vZGUgKG5vIHZhbHVlIGZvciBub3cpCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgICAgICAgICAgOiBBbnkgb3RoZXIgZXJyb3IKKyoKKyAqIEBub3RlIElmIHlvdSBuZWVkIG1vcmUgdGhhbiAoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIpIGJ5dGVzIG9mIG1lbW9yeSwKKyAqICAgICAgIGFsbG9jYXRlIGl0IHVzaW5nIG1hbGxvYygpIGFuZCB1cGRhdGUgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyLgorICogICAgICAgPGI+RE8gTk9UPC9iPiBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICogICAgICAgVGhlIE1GRCBoZWxwZXIgd2lsbCByZWxlYXNlIHRoZSBtZW1vcnkgeW91IGFsbG9jYXRlLgorICoKKyAqIEByZW1hcmsgSWYgeW91IGNhbGwgdGhpcyBmdW5jdGlvbiB5b3Vyc2VsZiwgeW91IGFyZSByZXNwb25zaWJsZQorICogICAgICAgICBmb3IgY2hlY2tpbmcgaWYgdGhlIHBvaW50ZXIgY2hhbmdlZCwgYW5kIGZyZWVpbmcgYW55CisgKiAgICAgICAgIHByZXZpb3VzbHkgYWxsb2NhdGVkIG1lbW9yeS4gKE5vdCBuZWNlc3NhcnkgaWYgeW91IHBhc3MKKyAqICAgICAgICAgaW4gYSBwb2ludGVyIHRvIHN0YXRpYyBtZW1vcnksIG9idmlvdXNseS4pCisgKi8KK2ludAorZXRoZXJTdGF0c093bmVyX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKipldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCisgICAgbmV0c25tcF9hc3NlcnQoKE5VTEwgIT0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyKQorICAgICAgICAgICAgICAgICAgICYmIChOVUxMICE9ICpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIpKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIpOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c093bmVyX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNPd25lciBkYXRhLgorICAgICAqIGNvcHkgKCogZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyICkgZGF0YSBhbmQgKCogZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIC8qCisgICAgICogbWFrZSBzdXJlIHRoZXJlIGlzIGVub3VnaCBzcGFjZSBmb3IgZXRoZXJTdGF0c093bmVyIGRhdGEKKyAgICAgKi8KKyAgICBpZiAoKE5VTEwgPT0gKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIpKSB8fAorICAgICAgICAoKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyKSA8CisgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuICoKKyAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJbMF0pKSkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYWxsb2NhdGUgc3BhY2UgZm9yIGV0aGVyU3RhdHNPd25lciBkYXRhCisgICAgICAgICAqLworICAgICAgICAoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX3B0cikgPQorICAgICAgICAgICAgbWFsbG9jKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiAqCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyWzBdKSk7CisgICAgICAgIGlmIChOVUxMID09ICgqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBhbGxvY2F0ZSBtZW1vcnlcbiIpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKKyAgICAgICAgfQorICAgIH0KKyAgICAoKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyX2xlbl9wdHIpID0KKyAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuICoKKyAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyWzBdKTsKKyAgICBtZW1jcHkoKCpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9wdHIpLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lciwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuICoKKyAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyWzBdKSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPd25lcl9nZXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c1N0YXR1cworICogZXRoZXJTdGF0c1N0YXR1cyBpcyBzdWJpZCAyMSBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIENyZWF0ZS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjIxCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBzdGF0dXMgb2YgdGhpcyBldGhlclN0YXRzIGVudHJ5LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDEgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAwICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAxCisgKgorICogRW51bSByYW5nZTogMi84LiBWYWx1ZXM6ICB2YWxpZCgxKSwgY3JlYXRlUmVxdWVzdCgyKSwgdW5kZXJDcmVhdGlvbigzKSwgaW52YWxpZCg0KQorICoKKyAqIEl0cyBzeW50YXggaXMgRW50cnlTdGF0dXMgKGJhc2VkIG9uIHBlcmx0eXBlIElOVEVHRVIpCisgKiBUaGUgbmV0LXNubXAgdHlwZSBpcyBBU05fSU5URUdFUi4gVGhlIEMgdHlwZSBkZWNsIGlzIGxvbmcgKHVfbG9uZykKKyAqLworLyoqCisgKiBFeHRyYWN0IHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBldGhlclN0YXRzU3RhdHVzIGRhdGEuCisgKgorICogU2V0IGEgdmFsdWUgdXNpbmcgdGhlIGRhdGEgY29udGV4dCBmb3IgdGhlIHJvdy4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyCisgKiAgICAgICAgUG9pbnRlciB0byBzdG9yYWdlIGZvciBhIGxvbmcgdmFyaWFibGUKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICAgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9TS0lQICAgICAgICAgICAgOiBza2lwIHRoaXMgbm9kZSAobm8gdmFsdWUgZm9yIG5vdykKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgICAgICAgICA6IEFueSBvdGhlciBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNTdGF0dXNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0cikKK3sKKyAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0cik7CisKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzU3RhdHVzX2dldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGV0aGVyU3RhdHNTdGF0dXMgZGF0YS4KKyAgICAgKiBjb3B5ICgqIGV0aGVyU3RhdHNTdGF0dXNfdmFsX3B0ciApIGZyb20gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgICgqZXRoZXJTdGF0c1N0YXR1c192YWxfcHRyKSA9IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1N0YXR1czsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1N0YXR1c19nZXQgKi8KKworCisKKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX2dldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzUyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKQEAgLTAsMCArMSwxNTEgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDg4ICQgb2YgJAorICoKKyAqICRJZDokCisgKgorICogQGZpbGUgZXRoZXJTdGF0c1RhYmxlX2RhdGFfZ2V0LmgKKyAqCisgKiBAYWRkdG9ncm91cCBnZXQKKyAqCisgKiBQcm90b3R5cGVzIGZvciBnZXQgZnVuY3Rpb25zCisgKgorICogQHsKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfREFUQV9HRVRfSAorI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfREFUQV9HRVRfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHRVQgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgICovCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBHRVQgVGFibGUgZGVjbGFyYXRpb25zCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogVGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgLyoKKyAgICAgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAgICAgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQuCisgICAgICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGluZGV4ZXMKKyAgICAgKi8KKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV9nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbl9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGV0aGVyU3RhdHNQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0phYmJlcnNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0phYmJlcnNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfdmFsX3B0cik7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfZ2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbF9wdHIpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWxfcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW5fcHRyKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c19nZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgoZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRibF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgZXRoZXJTdGF0c0luZGV4X3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pbmRleGVzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyBldGhlclN0YXRzSW5kZXhfdmFsKTsKKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX0RBVEFfR0VUX0ggKi8KKy8qKiBAfSAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5jIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9kYXRhX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3ZjNhMjYKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmMKQEAgLTAsMCArMSw5NzcgQEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICAgICAgdmVyc2lvbiA6IDEyMDc3ICQgb2YgJAorICoKKyAqICRJZDokCisgKgorICovCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKy8qCisgKiBpbmNsdWRlIG91ciBwYXJlbnQgaGVhZGVyIAorICovCisjaW5jbHVkZSAiZXRoZXJTdGF0c1RhYmxlLmgiCisKKworLyoqIEBkZWZncm91cCBkYXRhX3NldCBkYXRhX3NldDogUm91dGluZXMgdG8gc2V0IGRhdGEKKyAqCisgKiBUaGVzZSByb3V0aW5lcyBhcmUgdXNlZCB0byBzZXQgdGhlIHZhbHVlIGZvciBpbmRpdmlkdWFsIG9iamVjdHMuIFRoZQorICogcm93IGNvbnRleHQgaXMgcGFzc2VkLCBhbG9uZyB3aXRoIHRoZSBuZXcgdmFsdWUuCisgKiAKKyAqIEB7CisgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiBUYWJsZSBldGhlclN0YXRzVGFibGUKKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c1RhYmxlIGlzIHN1YmlkIDEgb2Ygc3RhdGlzdGljcy4KKyAqIEl0cyBzdGF0dXMgaXMgQ3VycmVudC4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgKi8KKyAgICAvKgorICAgICAqIE5PVEU6IGlmIHlvdSB1cGRhdGUgdGhpcyBjaGFydCwgcGxlYXNlIHVwZGF0ZSB0aGUgdmVyc2lvbnMgaW4KKyAgICAgKiAgICAgICBsb2NhbC9taWIyYy1jb25mLmQvcGFyZW50LXNldC5tMmkKKyAgICAgKiAgICAgICBhZ2VudC9taWJncm91cC9oZWxwZXJzL2JhYnlfc3RlcHMuYworICAgICAqIHdoaWxlIHlvdSdyZSBhdCBpdC4KKyAgICAgKi8KKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIEJhYnkgU3RlcHMgRmxvdyBDaGFydCAoMjAwNC4wNi4wNSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICAgICAqICstLS0tLS0tLS0tLS0tLSsgICAgKz09PT09PT09PT09PT09PT0rICAgIFUgPSB1bmNvbmRpdGlvbmFsIHBhdGggICAgKgorICAgICAqIHxvcHRpb25hbCBzdGF0ZXwgICAgfHxyZXF1aXJlZCBzdGF0ZXx8ICAgIFMgPSBwYXRoIGZvciBzdWNjZXNzICAgICAgKgorICAgICAqICstLS0tLS0tLS0tLS0tLSsgICAgKz09PT09PT09PT09PT09PT0rICAgIEUgPSBwYXRoIGZvciBlcnJvciAgICAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgICBwcmUgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgcmVxdWVzdCAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBVCisgICAgICogKy0tLS0tLS0tLS0tLS0rICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogfCAgICByb3cgICAgfGZ8PC0tLS0tLS18fCAgb2JqZWN0ICAgIHx8CisgICAgICogfCAgY3JlYXRlICAgfDF8ICAgICAgRSB8fCAgbG9va3VwICAgIHx8CisgICAgICogKy0tLS0tLS0tLS0tLS0rICAgICAgICArPT09PT09PT09PT09PT0rCisgICAgICogICAgIEUgfCAgIHwgUyAgICAgICAgICAgICAgICAgfCBTCisgICAgICogICAgICAgfCAgICstLS0tLS0tLS0tLS0tLS0tLS0+fAorICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgICAgICAgIEUgfHwgICBjaGVjayAgICB8fAorICAgICAqICAgICAgIHw8LS0tLS0tLS0tLS0tLS0tfHwgICB2YWx1ZXMgICB8fAorICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgIHwgUworICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgKzwtLS0tLS0tfHwgICB1bmRvICAgICB8fAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgIEUgfHwgICBzZXR1cCAgICB8fAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgUworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfHwgICAgc2V0ICAgICB8fC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tPisKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHx8ICAgdmFsdWUgICAgfHwgRSAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArPT09PT09PT09PT09PT0rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8ICAgIGNoZWNrICAgICB8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+fAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfCAgY29uc2lzdGVuY3kgfCBFICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICAgICAgICAgfCBTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKz09PT09PT09PT09PT09KyAgICAgICAgICs9PT09PT09PT09PT09PSsgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHx8ICAgY29tbWl0ICAgfHwtLS0tLS0tLT58fCAgICAgdW5kbyAgIHx8ICB8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICB8fCAgICAgICAgICAgIHx8IEUgICAgICAgfHwgICAgY29tbWl0ICB8fCAgfAorICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgKz09PT09PT09PT09PT09KyAgICAgICAgICs9PT09PT09PT09PT09PSsgIHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgICAgICAgICB8IFMgICAgICAgICAgICAgICAgICAgICBVIHw8LS0tLS0tLS0rCisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgfCBpcnJldmVyc2libGUgfCAgICAgICAgIHx8ICAgIHVuZG8gICAgfHwKKyAgICAgKiAgICAgICB8ICAgICAgIHwgICAgICAgIHwgICAgY29tbWl0ICAgIHwgICAgICAgICB8fCAgICAgc2V0ICAgIHx8CisgICAgICogICAgICAgfCAgICAgICB8ICAgICAgICArLS0tLS0tLS0tLS0tLS0rICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgfCAgICAgICAgICAgICAgIHwgVSAgICAgICAgICAgICAgICAgICAgIFUgfAorICAgICAqICAgICAgIHwgICAgICAgKy0tLS0tLS0tLS0tLS0tPnw8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgfHwgICB1bmRvICAgICB8fAorICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgfHwgIGNsZWFudXAgICB8fAorICAgICAqICAgICAgIHwgICAgICAgICAgICAgICAgKz09PT09PT09PT09PT09KworICAgICAqICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tPnwgVQorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgKGVyciAmJiBmMSktLS0tLS0tLS0tLS0tLS0tLS0tPisKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisgICAgICogICAgICAgICAgICAgICAgICAgICAgICB8ICAgIHBvc3QgICAgICB8PC0tLS0tLS0tfCAgICAgIHJvdyAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHJlcXVlc3QgICAgfCAgICAgICBVIHwgICAgcmVsZWFzZSAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLSsgICAgICAgICArLS0tLS0tLS0tLS0tLS0rCisgICAgICoKKyAgICAgKi8KKworLyoqCisgKiBTZXR1cCB1cCBjb250ZXh0IHdpdGggaW5mb3JtYXRpb24gbmVlZGVkIHRvIHVuZG8gYSBzZXQgcmVxdWVzdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSB0aGUgaW5kaXZpZHVhbCBub2RlIHVuZG8gc2V0dXAKKyAqIGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBJZiB5b3UgbmVlZCB0byBkbyBhbnkgdW5kbyBzZXR1cCB0aGF0IGlzIG5vdAorICogcmVsYXRlZCB0byBhIHNwZWNpZmljIGNvbHVtbiwgeW91IGNhbiBkbyBpdCBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUgdW5kbyBjb250ZXh0IGhhcyBiZWVuIGFsbG9jYXRlZCB3aXRoCisgKiBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSgpLCBidXQgbWF5IG5lZWQgZXh0cmEKKyAqIGluaXRpYWxpemF0aW9uIHNpbWlsYXIgdG8gd2hhdCB5b3UgbWF5IGhhdmUgZG9uZSBpbgorICogZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdCgpLgorICogTm90ZSB0aGF0IGFuIGluZGl2aWR1YWwgbm9kZSdzIHVuZG9fc2V0dXAgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxlZAorICogaWYgdGhhdCBub2RlIGlzIGJlaW5nIHNldCB0byBhIG5ldyB2YWx1ZS4KKyAqCisgKiBJZiB0aGVyZSBpcyBhbnkgc2V0dXAgc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIGNvbHVtbiAoZS5nLiBhbGxvY2F0aW5nCisgKiBtZW1vcnkgZm9yIGEgc3RyaW5nKSwgeW91IHNob3VsZCBkbyB0aGF0IHNldHVwIGluIHRoZSBub2RlJ3MgdW5kb19zZXR1cAorICogZnVuY3Rpb24sIHNvIGl0IHdvbid0IGJlIGRvbmUgdW5sZXNzIGl0IGlzIG5lY2Vzc2FyeS4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGNvbnRleHQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IuIHNldCB3aWxsIGZhaWwuCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IE1GRF9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTE6TTogfC0+IFNldHVwIGV0aGVyU3RhdHNUYWJsZSB1bmRvLgorICAgICAqIHNldCB1cCBldGhlclN0YXRzVGFibGUgdW5kbyBpbmZvcm1hdGlvbiwgaW4gcHJlcGFyYXRpb24gZm9yIGEgc2V0LgorICAgICAqIFVuZG8gc3RvcmFnZSBpcyBpbiAoKiBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIgKSoKKyAgICAgKi8KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAgKi8KKworLyoqCisgKiBVbmRvIGEgc2V0IHJlcXVlc3QuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBiZWZvcmUgdGhlIGluZGl2aWR1YWwgbm9kZSB1bmRvCisgKiBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gSWYgeW91IG5lZWQgdG8gZG8gYW55IHVuZG8gdGhhdCBpcyBub3QKKyAqIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBjb2x1bW4sIHlvdSBjYW4gZG8gaXQgaGVyZS4KKyAqCisgKiBOb3RlIHRoYXQgYW4gaW5kaXZpZHVhbCBub2RlJ3MgdW5kbyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkCisgKiBpZiB0aGF0IG5vZGUgaXMgYmVpbmcgc2V0IHRvIGEgbmV3IHZhbHVlLgorICoKKyAqIElmIHRoZXJlIGlzIGFueXRoaW5nICBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY29sdW1uIChlLmcuIHJlbGVhc2luZworICogbWVtb3J5IGZvciBhIHN0cmluZyksIHlvdSBzaG91bGQgZG8gdGhhdCBzZXR1cCBpbiB0aGUgbm9kZSdzIHVuZG8KKyAqIGZ1bmN0aW9uLCBzbyBpdCB3b24ndCBiZSBkb25lIHVubGVzcyBpdCBpcyBuZWNlc3NhcnkuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB0YWJsZSBjb250ZXh0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yLiBzZXQgd2lsbCBmYWlsLgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV91bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfdW5kbyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDUxOk06IHwtPiBldGhlclN0YXRzVGFibGUgdW5kby4KKyAgICAgKiBldGhlclN0YXRzVGFibGUgdW5kbyBpbmZvcm1hdGlvbiwgaW4gcmVzcG9uc2UgdG8gYSBmYWlsZWQgc2V0LgorICAgICAqIFVuZG8gc3RvcmFnZSBpcyBpbiAoKiBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIgKSoKKyAgICAgKi8KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAgKi8KKworLyoqCisgKiBDbGVhbnVwIHVwIGNvbnRleHQgdW5kbyBpbmZvcm1hdGlvbi4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHNldC9jb21taXQgcHJvY2Vzc2luZy4gSWYgeW91CisgKiBhbGxvY2F0ZWQgYW55IHJlc291cmNlcyBpbiB1bmRvX3NldHVwLCB0aGlzIGlzIHRoZSBwbGFjZSB0byByZWxlYXNlCisgKiB0aG9zZSByZXNvdXJjZXMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgcmVnYXJkbGVzcyBvZiB0aGUgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSBzZXQKKyAqIHJlcXVlc3QuIElmIHlvdSBuZWVkIHRvIHBlcmZvcm0gZGlmZmVyZW50IHN0ZXBzIGZvciBjbGVhbnVwIGRlcGVuZGluZworICogb24gc3VjY2VzcyBvciBmYWlsdXJlLCB5b3UgY2FuIGFkZCBhIGZsYWcgdG8gdGhlIHJvd3JlcV9jdHguCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB0YWJsZSBjb250ZXh0IChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCkKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHdlIHNob3VsZCBoYXZlIGEgbm9uLU5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDUyOk06IHwtPiBDbGVhbnVwIGV0aGVyU3RhdHNUYWJsZSB1bmRvLgorICAgICAqIFVuZG8gc3RvcmFnZSBpcyBpbiAoKiBldGhlclN0YXRzU3RhdHVzX3ZhbF9wdHIgKSoKKyAgICAgKi8KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cCAqLworCisvKioKKyAqIGNvbW1pdCBuZXcgdmFsdWVzLgorICoKKyAqIEF0IHRoaXMgcG9pbnQsIHlvdSBzaG91bGQgaGF2ZSBkb25lIGV2ZXJ5dGhpbmcgeW91IGNhbiB0byBlbnN1cmUgdGhhdAorICogdGhpcyBjb21taXQgd2lsbCBub3QgZmFpbC4KKyAqCisgKiBTaG91bGQgeW91IG5lZWQgZGlmZmVyZW50IGJlaGF2aW9yIGRlcGVuZGluZyBvbiB3aGljaCBjb2x1bW5zIHdlcmUKKyAqIHNldCwgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB3aWxsIGluZGljYXRlIHdoaWNoIHdyaXRlYWJsZSBjb2x1bW5zIHdlcmUKKyAqIHNldC4gVGhlIGRlZmluaXRpb25zIGZvciB0aGUgQ09MVU1OXypfRkxBRyBiaXRzIGNhbiBiZSBmb3VuZCBpbgorICogZXRoZXJTdGF0c1RhYmxlX29pZHMuaC4KKyAqIEEgbmV3IHJvdyB3aWxsIGhhdmUgdGhlIE1GRF9ST1dfQ1JFQVRFRCBiaXQgc2V0IGluIHJvd3JlcV9mbGFncy4KKyAqCisgKiBAcGFyYW0gZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSB1c2VycyBjb250ZXh0LgorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IKKyAqLworaW50CitldGhlclN0YXRzVGFibGVfY29tbWl0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKKyAgICBpbnQgICAgICAgICAgICAgc2F2ZV9mbGFnczsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfY29tbWl0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogc2F2ZSBmbGFncywgdGhlbiBjbGVhciB1bnRpbCB3ZSBhY3R1YWxseSBkbyBzb21ldGhpbmcKKyAgICAgKi8KKyAgICBzYXZlX2ZsYWdzID0gcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFnczsKKyAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzID0gMDsKKworICAgIC8qCisgICAgICogY29tbWl0IGV0aGVyU3RhdHNUYWJsZSBkYXRhCisgICAgICogMSkgY2hlY2sgdGhlIGNvbHVtbidzIGZsYWcgaW4gc2F2ZV9mbGFncyB0byBzZWUgaWYgaXQgd2FzIHNldC4KKyAgICAgKiAyKSBjbGVhciB0aGUgZmxhZyB3aGVuIHlvdSBoYW5kbGUgdGhhdCBjb2x1bW4KKyAgICAgKiAzKSBzZXQgdGhlIGNvbHVtbidzIGZsYWcgaW4gY29sdW1uX3NldF9mbGFncyBpZiBpdCBuZWVkcyB1bmRvCisgICAgICogICAgcHJvY2Vzc2luZyBpbiBjYXNlIG9mIGEgZmFpbHVyZS4KKyAgICAgKi8KKyAgICBpZiAoc2F2ZV9mbGFncyAmIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHKSB7CisgICAgICAgIHNhdmVfZmxhZ3MgJj0gfkNPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHOyAgICAgICAgLyogY2xlYXIgZXRoZXJTdGF0c0RhdGFTb3VyY2UgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzo0ODI6bzogfC0+IGNvbW1pdCBjb2x1bW4gZXRoZXJTdGF0c0RhdGFTb3VyY2UuCisgICAgICAgICAqLworICAgICAgICByYyA9IC0xOworICAgICAgICBpZiAoLTEgPT0gcmMpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlIGNvbHVtbiBldGhlclN0YXRzRGF0YVNvdXJjZSBjb21taXQgZmFpbGVkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzZXQgZmxhZywgaW4gY2FzZSB3ZSBuZWVkIHRvIHVuZG8gZXRoZXJTdGF0c0RhdGFTb3VyY2UKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PQorICAgICAgICAgICAgICAgIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhdmVfZmxhZ3MgJiBDT0xVTU5fRVRIRVJTVEFUU09XTkVSX0ZMQUcpIHsKKyAgICAgICAgc2F2ZV9mbGFncyAmPSB+Q09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHOyAgICAgLyogY2xlYXIgZXRoZXJTdGF0c093bmVyICovCisgICAgICAgIC8qCisgICAgICAgICAqIFRPRE86NDgyOm86IHwtPiBjb21taXQgY29sdW1uIGV0aGVyU3RhdHNPd25lci4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGlmICgtMSA9PSByYykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgY29sdW1uIGV0aGVyU3RhdHNPd25lciBjb21taXQgZmFpbGVkXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzZXQgZmxhZywgaW4gY2FzZSB3ZSBuZWVkIHRvIHVuZG8gZXRoZXJTdGF0c093bmVyCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHNhdmVfZmxhZ3MgJiBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHKSB7CisgICAgICAgIHNhdmVfZmxhZ3MgJj0gfkNPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUc7ICAgIC8qIGNsZWFyIGV0aGVyU3RhdHNTdGF0dXMgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICogVE9ETzo0ODI6bzogfC0+IGNvbW1pdCBjb2x1bW4gZXRoZXJTdGF0c1N0YXR1cy4KKyAgICAgICAgICovCisgICAgICAgIHJjID0gLTE7CisgICAgICAgIGlmICgtMSA9PSByYykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgY29sdW1uIGV0aGVyU3RhdHNTdGF0dXMgY29tbWl0IGZhaWxlZFxuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2V0IGZsYWcsIGluIGNhc2Ugd2UgbmVlZCB0byB1bmRvIGV0aGVyU3RhdHNTdGF0dXMKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHOworICAgICAgICB9CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiB3ZSBzdWNjZXNzZnVsbHkgY29tbWl0ZWQgdGhpcyByb3csIHNldCB0aGUgZGlydHkgZmxhZy4KKyAgICAgKi8KKyAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKKyAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzIHw9IE1GRF9ST1dfRElSVFk7CisgICAgfQorCisgICAgaWYgKHNhdmVfZmxhZ3MpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuaGFuZGxlZCBjb2x1bW5zICgweCV4KSBpbiBjb21taXRcbiIsCisgICAgICAgICAgICAgICAgIHNhdmVfZmxhZ3MpOworICAgICAgICByZXR1cm4gTUZEX0VSUk9SOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2NvbW1pdCAqLworCisvKioKKyAqIHVuZG8gY29tbWl0IG5ldyB2YWx1ZXMuCisgKgorICogU2hvdWxkIHlvdSBuZWVkIGRpZmZlcmVudCBiZWhhdmlvciBkZXBlbmRpbmcgb24gd2hpY2ggY29sdW1ucyB3ZXJlCisgKiBzZXQsIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3Mgd2lsbCBpbmRpY2F0ZSB3aGljaCB3cml0ZWFibGUgY29sdW1ucyB3ZXJlCisgKiBzZXQuIFRoZSBkZWZpbml0aW9ucyBmb3IgdGhlIENPTFVNTl8qX0ZMQUcgYml0cyBjYW4gYmUgZm91bmQgaW4KKyAqIGV0aGVyU3RhdHNUYWJsZV9vaWRzLmguCisgKiBBIG5ldyByb3cgd2lsbCBoYXZlIHRoZSBNRkRfUk9XX0NSRUFURUQgYml0IHNldCBpbiByb3dyZXFfZmxhZ3MuCisgKgorICogQHBhcmFtIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4KKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTIDogc3VjY2VzcworICogQHJldHZhbCBNRkRfRVJST1IgICA6IGVycm9yCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBNRkRfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ4NTpNOiB8LT4gVW5kbyBldGhlclN0YXRzVGFibGUgY29tbWl0LgorICAgICAqIGNoZWNrIHRoZSBjb2x1bW4ncyBmbGFnIGluIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgdG8gc2VlCisgICAgICogaWYgaXQgd2FzIHNldCBkdXJpbmcgY29tbWl0LCB0aGVuIHVuZG8gaXQuCisgICAgICoKKyAgICAgKiBlZzogaWYgKHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgJiBDT0xVTU5fX0ZMQUcpIHt9CisgICAgICovCisKKworICAgIC8qCisgICAgICogaWYgd2Ugc3VjY2Vzc2Z1bGx5IHVuLWNvbW1pdGVkIHRoaXMgcm93LCBjbGVhciB0aGUgZGlydHkgZmxhZy4KKyAgICAgKi8KKyAgICBpZiAoTUZEX1NVQ0NFU1MgPT0gcmMpIHsKKyAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICY9IH5NRkRfUk9XX0RJUlRZOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0ICovCisKKy8qCisgKiBUT0RPOjQ0MDpNOiBJbXBsZW1lbnQgZXRoZXJTdGF0c1RhYmxlIG5vZGUgdmFsdWUgY2hlY2tzLgorICogVE9ETzo0NTA6TTogSW1wbGVtZW50IGV0aGVyU3RhdHNUYWJsZSB1bmRvIGZ1bmN0aW9ucy4KKyAqIFRPRE86NDYwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgc2V0IGZ1bmN0aW9ucy4KKyAqIFRPRE86NDgwOk06IEltcGxlbWVudCBldGhlclN0YXRzVGFibGUgY29tbWl0IGZ1bmN0aW9ucy4KKyAqLworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIFJNT04tTUlCOjpldGhlclN0YXRzRW50cnkuZXRoZXJTdGF0c0RhdGFTb3VyY2UKKyAqIGV0aGVyU3RhdHNEYXRhU291cmNlIGlzIHN1YmlkIDIgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBDcmVhdGUuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4yCisgKiBEZXNjcmlwdGlvbjoKK1RoaXMgb2JqZWN0IGlkZW50aWZpZXMgdGhlIHNvdXJjZSBvZiB0aGUgZGF0YSB0aGF0CisgICAgICAgIHRoaXMgZXRoZXJTdGF0cyBlbnRyeSBpcyBjb25maWd1cmVkIHRvIGFuYWx5emUuICBUaGlzCisgICAgICAgIHNvdXJjZSBjYW4gYmUgYW55IGV0aGVybmV0IGludGVyZmFjZSBvbiB0aGlzIGRldmljZS4KKyAgICAgICAgSW4gb3JkZXIgdG8gaWRlbnRpZnkgYSBwYXJ0aWN1bGFyIGludGVyZmFjZSwgdGhpcyBvYmplY3QKKyAgICAgICAgc2hhbGwgaWRlbnRpZnkgdGhlIGluc3RhbmNlIG9mIHRoZSBpZkluZGV4IG9iamVjdCwKKyAgICAgICAgZGVmaW5lZCBpbiBSRkMgMjIzMyBbMTddLCBmb3IgdGhlIGRlc2lyZWQgaW50ZXJmYWNlLgorICAgICAgICBGb3IgZXhhbXBsZSwgaWYgYW4gZW50cnkgd2VyZSB0byByZWNlaXZlIGRhdGEgZnJvbQorICAgICAgICBpbnRlcmZhY2UgIzEsIHRoaXMgb2JqZWN0IHdvdWxkIGJlIHNldCB0byBpZkluZGV4LjEuCisKKyAgICAgICAgVGhlIHN0YXRpc3RpY3MgaW4gdGhpcyBncm91cCByZWZsZWN0IGFsbCBwYWNrZXRzCisgICAgICAgIG9uIHRoZSBsb2NhbCBuZXR3b3JrIHNlZ21lbnQgYXR0YWNoZWQgdG8gdGhlIGlkZW50aWZpZWQKKyAgICAgICAgaW50ZXJmYWNlLgorCisgICAgICAgIEFuIGFnZW50IG1heSBvciBtYXkgbm90IGJlIGFibGUgdG8gdGVsbCBpZiBmdW5kYW1lbnRhbAorICAgICAgICBjaGFuZ2VzIHRvIHRoZSBtZWRpYSBvZiB0aGUgaW50ZXJmYWNlIGhhdmUgb2NjdXJyZWQgYW5kCisgICAgICAgIG5lY2Vzc2l0YXRlIGFuIGludmFsaWRhdGlvbiBvZiB0aGlzIGVudHJ5LiAgRm9yIGV4YW1wbGUsIGEKKyAgICAgICAgaG90LXBsdWdnYWJsZSBldGhlcm5ldCBjYXJkIGNvdWxkIGJlIHB1bGxlZCBvdXQgYW5kIHJlcGxhY2VkCisgICAgICAgIGJ5IGEgdG9rZW4tcmluZyBjYXJkLiAgSW4gc3VjaCBhIGNhc2UsIGlmIHRoZSBhZ2VudCBoYXMgc3VjaAorICAgICAgICBrbm93bGVkZ2Ugb2YgdGhlIGNoYW5nZSwgaXQgaXMgcmVjb21tZW5kZWQgdGhhdCBpdAorICAgICAgICBpbnZhbGlkYXRlIHRoaXMgZW50cnkuCisKKyAgICAgICAgVGhpcyBvYmplY3QgbWF5IG5vdCBiZSBtb2RpZmllZCBpZiB0aGUgYXNzb2NpYXRlZAorICAgICAgICBldGhlclN0YXRzU3RhdHVzIG9iamVjdCBpcyBlcXVhbCB0byB2YWxpZCgxKS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAwICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMQorICoKKyAqCisgKiBJdHMgc3ludGF4IGlzIE9CSkVDVElEIChiYXNlZCBvbiBwZXJsdHlwZSBPQkpFQ1RJRCkKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9PQkpFQ1RfSUQuIFRoZSBDIHR5cGUgZGVjbCBpcyBvaWQgKG9pZCkKKyAqIFRoaXMgZGF0YSB0eXBlIHJlcXVpcmVzIGEgbGVuZ3RoLgorICovCisvKioKKyAqIENoZWNrIHRoYXQgdGhlIHByb3Bvc2VkIG5ldyB2YWx1ZSBpcyBwb3RlbnRpYWxseSB2YWxpZC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHJvdyByZXF1ZXN0IGNvbnRleHQuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cgorICogICAgICAgIEEgb2lkIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZS4KKyAqIEBwYXJhbSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbgorICogICAgICAgIFRoZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGRhdGEgcG9pbnRlZCB0byBieSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgOiBpbmNvbWluZyB2YWx1ZSBpcyBsZWdhbAorICogQHJldHZhbCBNRkRfTk9UX1ZBTElEX05PVyAgOiBpbmNvbWluZyB2YWx1ZSBpcyBub3QgdmFsaWQgbm93CisgKiBAcmV0dmFsIE1GRF9OT1RfVkFMSURfRVZFUiA6IGluY29taW5nIHZhbHVlIGlzIG5ldmVyIHZhbGlkCisgKgorICogVGhpcyBpcyB0aGUgcGxhY2UgdG8gY2hlY2sgZm9yIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBub3QKKyAqIGV4cHJlc3NlZCBpbiB0aGUgbWliIHN5bnRheCAoZm9yIGV4YW1wbGUsIGEgcmVxdWlyZW1lbnQgdGhhdAorICogaXMgZGV0YWlsZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGZvciBhbiBvYmplY3QpLgorICoKKyAqIFlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIGNoYW5nZSBiZXR3ZWVuIHRoZSB1bmRvIHZhbHVlIGFuZCB0aGUKKyAqIG5ldyB2YWx1ZSBpcyBsZWdhbCAoaWUsIHRoZSB0cmFuc2lzdGlvbiBmcm9tIG9uZSB2YWx1ZSB0byBhbm90aGVyCisgKiBpcyBsZWdhbCkuCisgKiAgICAgIAorICpAbm90ZQorICogVGhpcyBjaGVjayBpcyBvbmx5IHRvIGRldGVybWluZSBpZiB0aGUgbmV3IHZhbHVlCisgKiBpcyBcYiBwb3RlbnRpYWxseSB2YWxpZC4gVGhpcyBpcyB0aGUgZmlyc3QgY2hlY2sgb2YgbWFueSwgYW5kCisgKiBpcyBvbmUgb2YgdGhlIHNpbXBsZXN0IG9uZXMuCisgKiAKKyAqQG5vdGUKKyAqIHRoaXMgaXMgbm90IHRoZSBwbGFjZSB0byBkbyBhbnkgY2hlY2tzIGZvciB2YWx1ZXMKKyAqIHdoaWNoIGRlcGVuZCBvbiBzb21lIG90aGVyIHZhbHVlIGluIHRoZSBtaWIuIFRob3NlCisgKiB0eXBlcyBvZiBjaGVja3Mgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCisgKiBldGhlclN0YXRzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzKCkgZnVuY3Rpb24uCisgKgorICogVGhlIGZvbGxvd2luZyBjaGVja3MgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSBmb3IgeW91OgorICogICAgVGhlIHN5bnRheCBpcyBBU05fT0JKRUNUX0lECisgKiAgICBUaGUgbGVuZ3RoIGlzIDwgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2UpLgorICoKKyAqIElmIHRoZXJlIGEgbm8gb3RoZXIgY2hlY2tzIHlvdSBuZWVkIHRvIGRvLCBzaW1wbHkgcmV0dXJuIE1GRF9TVUNDRVNTLgorICoKKyAqLworaW50CitldGhlclN0YXRzRGF0YVNvdXJjZV9jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRGF0YVNvdXJjZV9jaGVja192YWx1ZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cik7CisKKyAgICAvKgorICAgICAqIFRPRE86NDQxOm86IHwtPiBDaGVjayBmb3IgdmFsaWQgZXRoZXJTdGF0c0RhdGFTb3VyY2UgdmFsdWUuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7ICAgICAgICAgLyogZXRoZXJTdGF0c0RhdGFTb3VyY2UgdmFsdWUgbm90IGlsbGVnYWwgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0RhdGFTb3VyY2VfY2hlY2tfdmFsdWUgKi8KKworLyoqCisgKiBTYXZlIG9sZCB2YWx1ZSBpbmZvcm1hdGlvbgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdGFibGUgY29udGV4dCAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgpCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgTUZEX0VSUk9SICAgOiBlcnJvci4gc2V0IHdpbGwgZmFpbC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIGFmdGVyIHRoZSB0YWJsZSBsZXZlbCB1bmRvIHNldHVwIGZ1bmN0aW9uCisgKiBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cCBoYXMgYmVlbiBjYWxsZWQuCisgKgorICpAbm90ZQorICogdGhpcyBmdW5jdGlvbiB3aWxsIG9ubHkgYmUgY2FsbGVkIGlmIGEgbmV3IHZhbHVlIGlzIHNldCBmb3IgdGhpcyBjb2x1bW4uCisgKgorICogSWYgdGhlcmUgaXMgYW55IHNldHVwIHNwZWNpZmljIHRvIGEgcGFydGljdWxhciBjb2x1bW4gKGUuZy4gYWxsb2NhdGluZworICogbWVtb3J5IGZvciBhIHN0cmluZyksIHlvdSBzaG91bGQgZG8gdGhhdCBzZXR1cCBpbiB0aGlzIGZ1bmN0aW9uLCBzbyBpdAorICogd29uJ3QgYmUgZG9uZSB1bmxlc3MgaXQgaXMgbmVjZXNzYXJ5LgorICovCitpbnQKK2V0aGVyU3RhdHNEYXRhU291cmNlX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvX3NldHVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDU1Om86IHwtPiBTZXR1cCBldGhlclN0YXRzRGF0YVNvdXJjZSB1bmRvLgorICAgICAqLworICAgIC8qCisgICAgICogY29weSBldGhlclN0YXRzRGF0YVNvdXJjZSBhbmQgZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuIGRhdGEKKyAgICAgKiBzZXQgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2UgZnJvbSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlCisgICAgICovCisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlLAorICAgICAgICAgICAocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gKgorICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlWzBdKSkpOworICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNEYXRhU291cmNlX2xlbiA9CisgICAgICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG9fc2V0dXAgKi8KKworLyoqCisgKiBTZXQgdGhlIG5ldyB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuIFlvdSBzaG91bGQga25vdyBob3cgdG8KKyAqICAgICAgICBtYW5pcHVsYXRlIHRoZSB2YWx1ZSBmcm9tIHRoaXMgb2JqZWN0LgorICogQHBhcmFtIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIKKyAqICAgICAgICBBIG9pZCBjb250YWluaW5nIHRoZSBuZXcgdmFsdWUuCisgKiBAcGFyYW0gZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4KKyAqICAgICAgICBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cgorICovCitpbnQKK2V0aGVyU3RhdHNEYXRhU291cmNlX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4pCit7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0RhdGFTb3VyY2Vfc2V0IiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyKTsKKworICAgIC8qCisgICAgICogVE9ETzo0NjE6TTogfC0+IFNldCBldGhlclN0YXRzRGF0YVNvdXJjZSB2YWx1ZS4KKyAgICAgKiBzZXQgZXRoZXJTdGF0c0RhdGFTb3VyY2UgdmFsdWUgaW4gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIG1lbWNweShyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlLAorICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyLCBldGhlclN0YXRzRGF0YVNvdXJjZV92YWxfcHRyX2xlbik7CisgICAgLyoqIGNvbnZlcnQgYnl0ZXMgdG8gbnVtYmVyIG9mIG9pZCAqLworICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VfbGVuID0KKyAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0cl9sZW4gLworICAgICAgICBzaXplb2YoZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0clswXSk7CisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNEYXRhU291cmNlX3NldCAqLworCisvKioKKyAqIHVuZG8gdGhlIHByZXZpb3VzIHNldC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuCisgKi8KK2ludAorZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kbyIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTY6bzogfC0+IENsZWFuIHVwIGV0aGVyU3RhdHNEYXRhU291cmNlIHVuZG8uCisgICAgICovCisgICAgLyoKKyAgICAgKiBjb3B5IGV0aGVyU3RhdHNEYXRhU291cmNlIGFuZCBldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gZGF0YQorICAgICAqIHNldCByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNEYXRhU291cmNlIGZyb20gcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2UKKyAgICAgKi8KKyAgICBtZW1jcHkocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZSwKKyAgICAgICAgICAgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c0RhdGFTb3VyY2UsCisgICAgICAgICAgIChyb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gKgorICAgICAgICAgICAgc2l6ZW9mKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c0RhdGFTb3VyY2VbMF0pKSk7CisgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW4gPQorICAgICAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzRGF0YVNvdXJjZV9sZW47CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kbyAqLworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogUk1PTi1NSUI6OmV0aGVyU3RhdHNFbnRyeS5ldGhlclN0YXRzT3duZXIKKyAqIGV0aGVyU3RhdHNPd25lciBpcyBzdWJpZCAyMCBvZiBldGhlclN0YXRzRW50cnkuCisgKiBJdHMgc3RhdHVzIGlzIEN1cnJlbnQsIGFuZCBpdHMgYWNjZXNzIGxldmVsIGlzIENyZWF0ZS4KKyAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMS4xLjIwCisgKiBEZXNjcmlwdGlvbjoKK1RoZSBlbnRpdHkgdGhhdCBjb25maWd1cmVkIHRoaXMgZW50cnkgYW5kIGlzIHRoZXJlZm9yZQorICAgICAgICB1c2luZyB0aGUgcmVzb3VyY2VzIGFzc2lnbmVkIHRvIGl0LgorICoKKyAqIEF0dHJpYnV0ZXM6CisgKiAgIGFjY2Vzc2libGUgMSAgICAgaXNzY2FsYXIgMCAgICAgZW51bXMgIDAgICAgICBoYXNkZWZ2YWwgMAorICogICByZWFkYWJsZSAgIDEgICAgIGlzY29sdW1uIDEgICAgIHJhbmdlcyAxICAgICAgaGFzaGludCAgIDAKKyAqICAgc2V0dGFibGUgICAxCisgKgorICogUmFuZ2VzOiAgMCAtIDEyNzsKKyAqCisgKiBJdHMgc3ludGF4IGlzIE93bmVyU3RyaW5nIChiYXNlZCBvbiBwZXJsdHlwZSBPQ1RFVFNUUikKKyAqIFRoZSBuZXQtc25tcCB0eXBlIGlzIEFTTl9PQ1RFVF9TVFIuIFRoZSBDIHR5cGUgZGVjbCBpcyBjaGFyIChjaGFyKQorICogVGhpcyBkYXRhIHR5cGUgcmVxdWlyZXMgYSBsZW5ndGguICAoTWF4IDEyNykKKyAqLworLyoqCisgKiBDaGVjayB0aGF0IHRoZSBwcm9wb3NlZCBuZXcgdmFsdWUgaXMgcG90ZW50aWFsbHkgdmFsaWQuCisgKgorICogQHBhcmFtIHJvd3JlcV9jdHgKKyAqICAgICAgICBQb2ludGVyIHRvIHRoZSByb3cgcmVxdWVzdCBjb250ZXh0LgorICogQHBhcmFtIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyCisgKiAgICAgICAgQSBjaGFyIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZS4KKyAqIEBwYXJhbSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4KKyAqICAgICAgICBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIKKyAqCisgKiBAcmV0dmFsIE1GRF9TVUNDRVNTICAgICAgICA6IGluY29taW5nIHZhbHVlIGlzIGxlZ2FsCisgKiBAcmV0dmFsIE1GRF9OT1RfVkFMSURfTk9XICA6IGluY29taW5nIHZhbHVlIGlzIG5vdCB2YWxpZCBub3cKKyAqIEByZXR2YWwgTUZEX05PVF9WQUxJRF9FVkVSIDogaW5jb21pbmcgdmFsdWUgaXMgbmV2ZXIgdmFsaWQKKyAqCisgKiBUaGlzIGlzIHRoZSBwbGFjZSB0byBjaGVjayBmb3IgcmVxdWlyZW1lbnRzIHRoYXQgYXJlIG5vdAorICogZXhwcmVzc2VkIGluIHRoZSBtaWIgc3ludGF4IChmb3IgZXhhbXBsZSwgYSByZXF1aXJlbWVudCB0aGF0CisgKiBpcyBkZXRhaWxlZCBpbiB0aGUgZGVzY3JpcHRpb24gZm9yIGFuIG9iamVjdCkuCisgKgorICogWW91IHNob3VsZCBjaGVjayB0aGF0IHRoZSByZXF1ZXN0ZWQgY2hhbmdlIGJldHdlZW4gdGhlIHVuZG8gdmFsdWUgYW5kIHRoZQorICogbmV3IHZhbHVlIGlzIGxlZ2FsIChpZSwgdGhlIHRyYW5zaXN0aW9uIGZyb20gb25lIHZhbHVlIHRvIGFub3RoZXIKKyAqIGlzIGxlZ2FsKS4KKyAqICAgICAgCisgKkBub3RlCisgKiBUaGlzIGNoZWNrIGlzIG9ubHkgdG8gZGV0ZXJtaW5lIGlmIHRoZSBuZXcgdmFsdWUKKyAqIGlzIFxiIHBvdGVudGlhbGx5IHZhbGlkLiBUaGlzIGlzIHRoZSBmaXJzdCBjaGVjayBvZiBtYW55LCBhbmQKKyAqIGlzIG9uZSBvZiB0aGUgc2ltcGxlc3Qgb25lcy4KKyAqIAorICpAbm90ZQorICogdGhpcyBpcyBub3QgdGhlIHBsYWNlIHRvIGRvIGFueSBjaGVja3MgZm9yIHZhbHVlcworICogd2hpY2ggZGVwZW5kIG9uIHNvbWUgb3RoZXIgdmFsdWUgaW4gdGhlIG1pYi4gVGhvc2UKKyAqIHR5cGVzIG9mIGNoZWNrcyBzaG91bGQgYmUgZG9uZSBpbiB0aGUKKyAqIGV0aGVyU3RhdHNUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMoKSBmdW5jdGlvbi4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGNoZWNrcyBoYXZlIGFscmVhZHkgYmVlbiBkb25lIGZvciB5b3U6CisgKiAgICBUaGUgc3ludGF4IGlzIEFTTl9PQ1RFVF9TVFIKKyAqICAgIFRoZSBsZW5ndGggaXMgPCBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIpLgorICogICAgVGhlIGxlbmd0aCBpcyBpbiAob25lIG9mKSB0aGUgcmFuZ2Ugc2V0KHMpOiAgMCAtIDEyNworICoKKyAqIElmIHRoZXJlIGEgbm8gb3RoZXIgY2hlY2tzIHlvdSBuZWVkIHRvIGRvLCBzaW1wbHkgcmV0dXJuIE1GRF9TVUNDRVNTLgorICoKKyAqLworaW50CitldGhlclN0YXRzT3duZXJfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmV0aGVyU3RhdHNPd25lcl92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4pCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPd25lcl9jaGVja192YWx1ZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ0MTpvOiB8LT4gQ2hlY2sgZm9yIHZhbGlkIGV0aGVyU3RhdHNPd25lciB2YWx1ZS4KKyAgICAgKi8KKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsgICAgICAgICAvKiBldGhlclN0YXRzT3duZXIgdmFsdWUgbm90IGlsbGVnYWwgKi8KK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c093bmVyX2NoZWNrX3ZhbHVlICovCisKKy8qKgorICogU2F2ZSBvbGQgdmFsdWUgaW5mb3JtYXRpb24KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGNvbnRleHQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IuIHNldCB3aWxsIGZhaWwuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgdGFibGUgbGV2ZWwgdW5kbyBzZXR1cCBmdW5jdGlvbgorICogZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAgaGFzIGJlZW4gY2FsbGVkLgorICoKKyAqQG5vdGUKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBhIG5ldyB2YWx1ZSBpcyBzZXQgZm9yIHRoaXMgY29sdW1uLgorICoKKyAqIElmIHRoZXJlIGlzIGFueSBzZXR1cCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY29sdW1uIChlLmcuIGFsbG9jYXRpbmcKKyAqIG1lbW9yeSBmb3IgYSBzdHJpbmcpLCB5b3Ugc2hvdWxkIGRvIHRoYXQgc2V0dXAgaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQKKyAqIHdvbid0IGJlIGRvbmUgdW5sZXNzIGl0IGlzIG5lY2Vzc2FyeS4KKyAqLworaW50CitldGhlclN0YXRzT3duZXJfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPd25lcl91bmRvX3NldHVwIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogc2hvdWxkIG5ldmVyIGdldCBhIE5VTEwgcG9pbnRlciAqLworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDU1Om86IHwtPiBTZXR1cCBldGhlclN0YXRzT3duZXIgdW5kby4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNvcHkgZXRoZXJTdGF0c093bmVyIGFuZCBldGhlclN0YXRzT3duZXJfbGVuIGRhdGEKKyAgICAgKiBzZXQgcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyIGZyb20gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIKKyAgICAgKi8KKyAgICBtZW1jcHkocm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyLAorICAgICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lciwKKyAgICAgICAgICAgKHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyX2xlbiAqCisgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyWzBdKSkpOworICAgIHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNPd25lcl9sZW4gPQorICAgICAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW47CisKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c093bmVyX3VuZG9fc2V0dXAgKi8KKworLyoqCisgKiBTZXQgdGhlIG5ldyB2YWx1ZS4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuIFlvdSBzaG91bGQga25vdyBob3cgdG8KKyAqICAgICAgICBtYW5pcHVsYXRlIHRoZSB2YWx1ZSBmcm9tIHRoaXMgb2JqZWN0LgorICogQHBhcmFtIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyCisgKiAgICAgICAgQSBjaGFyIGNvbnRhaW5pbmcgdGhlIG5ldyB2YWx1ZS4KKyAqIEBwYXJhbSBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4KKyAqICAgICAgICBUaGUgc2l6ZSAoaW4gYnl0ZXMpIG9mIHRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIKKyAqLworaW50CitldGhlclN0YXRzT3duZXJfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgY2hhciAqZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4pCit7CisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c093bmVyX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZXRoZXJTdGF0c093bmVyX3ZhbF9wdHIpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ2MTpNOiB8LT4gU2V0IGV0aGVyU3RhdHNPd25lciB2YWx1ZS4KKyAgICAgKiBzZXQgZXRoZXJTdGF0c093bmVyIHZhbHVlIGluIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKi8KKyAgICBtZW1jcHkocm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXIsIGV0aGVyU3RhdHNPd25lcl92YWxfcHRyLAorICAgICAgICAgICBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4pOworICAgIC8qKiBjb252ZXJ0IGJ5dGVzIHRvIG51bWJlciBvZiBjaGFyICovCisgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzT3duZXJfbGVuID0KKyAgICAgICAgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuIC8gc2l6ZW9mKGV0aGVyU3RhdHNPd25lcl92YWxfcHRyWzBdKTsKKworICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c093bmVyX3NldCAqLworCisvKioKKyAqIHVuZG8gdGhlIHByZXZpb3VzIHNldC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuCisgKi8KK2ludAorZXRoZXJTdGF0c093bmVyX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNPd25lcl91bmRvIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ1NjpvOiB8LT4gQ2xlYW4gdXAgZXRoZXJTdGF0c093bmVyIHVuZG8uCisgICAgICovCisgICAgLyoKKyAgICAgKiBjb3B5IGV0aGVyU3RhdHNPd25lciBhbmQgZXRoZXJTdGF0c093bmVyX2xlbiBkYXRhCisgICAgICogc2V0IHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyIGZyb20gcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c093bmVyCisgICAgICovCisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c093bmVyLAorICAgICAgICAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXIsCisgICAgICAgICAgIChyb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXJfbGVuICoKKyAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lclswXSkpKTsKKyAgICByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNPd25lcl9sZW4gPQorICAgICAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzT3duZXJfbGVuOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNPd25lcl91bmRvICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBSTU9OLU1JQjo6ZXRoZXJTdGF0c0VudHJ5LmV0aGVyU3RhdHNTdGF0dXMKKyAqIGV0aGVyU3RhdHNTdGF0dXMgaXMgc3ViaWQgMjEgb2YgZXRoZXJTdGF0c0VudHJ5LgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LCBhbmQgaXRzIGFjY2VzcyBsZXZlbCBpcyBDcmVhdGUuCisgKiBPSUQ6IC4xLjMuNi4xLjIuMS4xNi4xLjEuMS4yMQorICogRGVzY3JpcHRpb246CitUaGUgc3RhdHVzIG9mIHRoaXMgZXRoZXJTdGF0cyBlbnRyeS4KKyAqCisgKiBBdHRyaWJ1dGVzOgorICogICBhY2Nlc3NpYmxlIDEgICAgIGlzc2NhbGFyIDAgICAgIGVudW1zICAxICAgICAgaGFzZGVmdmFsIDAKKyAqICAgcmVhZGFibGUgICAxICAgICBpc2NvbHVtbiAxICAgICByYW5nZXMgMCAgICAgIGhhc2hpbnQgICAwCisgKiAgIHNldHRhYmxlICAgMQorICoKKyAqIEVudW0gcmFuZ2U6IDIvOC4gVmFsdWVzOiAgdmFsaWQoMSksIGNyZWF0ZVJlcXVlc3QoMiksIHVuZGVyQ3JlYXRpb24oMyksIGludmFsaWQoNCkKKyAqCisgKiBJdHMgc3ludGF4IGlzIEVudHJ5U3RhdHVzIChiYXNlZCBvbiBwZXJsdHlwZSBJTlRFR0VSKQorICogVGhlIG5ldC1zbm1wIHR5cGUgaXMgQVNOX0lOVEVHRVIuIFRoZSBDIHR5cGUgZGVjbCBpcyBsb25nICh1X2xvbmcpCisgKi8KKy8qKgorICogQ2hlY2sgdGhhdCB0aGUgcHJvcG9zZWQgbmV3IHZhbHVlIGlzIHBvdGVudGlhbGx5IHZhbGlkLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgcm93IHJlcXVlc3QgY29udGV4dC4KKyAqIEBwYXJhbSBldGhlclN0YXRzU3RhdHVzX3ZhbAorICogICAgICAgIEEgbG9uZyBjb250YWluaW5nIHRoZSBuZXcgdmFsdWUuCisgKgorICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgICAgOiBpbmNvbWluZyB2YWx1ZSBpcyBsZWdhbAorICogQHJldHZhbCBNRkRfTk9UX1ZBTElEX05PVyAgOiBpbmNvbWluZyB2YWx1ZSBpcyBub3QgdmFsaWQgbm93CisgKiBAcmV0dmFsIE1GRF9OT1RfVkFMSURfRVZFUiA6IGluY29taW5nIHZhbHVlIGlzIG5ldmVyIHZhbGlkCisgKgorICogVGhpcyBpcyB0aGUgcGxhY2UgdG8gY2hlY2sgZm9yIHJlcXVpcmVtZW50cyB0aGF0IGFyZSBub3QKKyAqIGV4cHJlc3NlZCBpbiB0aGUgbWliIHN5bnRheCAoZm9yIGV4YW1wbGUsIGEgcmVxdWlyZW1lbnQgdGhhdAorICogaXMgZGV0YWlsZWQgaW4gdGhlIGRlc2NyaXB0aW9uIGZvciBhbiBvYmplY3QpLgorICoKKyAqIFlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGUgcmVxdWVzdGVkIGNoYW5nZSBiZXR3ZWVuIHRoZSB1bmRvIHZhbHVlIGFuZCB0aGUKKyAqIG5ldyB2YWx1ZSBpcyBsZWdhbCAoaWUsIHRoZSB0cmFuc2lzdGlvbiBmcm9tIG9uZSB2YWx1ZSB0byBhbm90aGVyCisgKiBpcyBsZWdhbCkuCisgKiAgICAgIAorICpAbm90ZQorICogVGhpcyBjaGVjayBpcyBvbmx5IHRvIGRldGVybWluZSBpZiB0aGUgbmV3IHZhbHVlCisgKiBpcyBcYiBwb3RlbnRpYWxseSB2YWxpZC4gVGhpcyBpcyB0aGUgZmlyc3QgY2hlY2sgb2YgbWFueSwgYW5kCisgKiBpcyBvbmUgb2YgdGhlIHNpbXBsZXN0IG9uZXMuCisgKiAKKyAqQG5vdGUKKyAqIHRoaXMgaXMgbm90IHRoZSBwbGFjZSB0byBkbyBhbnkgY2hlY2tzIGZvciB2YWx1ZXMKKyAqIHdoaWNoIGRlcGVuZCBvbiBzb21lIG90aGVyIHZhbHVlIGluIHRoZSBtaWIuIFRob3NlCisgKiB0eXBlcyBvZiBjaGVja3Mgc2hvdWxkIGJlIGRvbmUgaW4gdGhlCisgKiBldGhlclN0YXRzVGFibGVfY2hlY2tfZGVwZW5kZW5jaWVzKCkgZnVuY3Rpb24uCisgKgorICogVGhlIGZvbGxvd2luZyBjaGVja3MgaGF2ZSBhbHJlYWR5IGJlZW4gZG9uZSBmb3IgeW91OgorICogICAgVGhlIHN5bnRheCBpcyBBU05fSU5URUdFUgorICogICAgVGhlIHZhbHVlIGlzIG9uZSBvZiAgdmFsaWQoMSksIGNyZWF0ZVJlcXVlc3QoMiksIHVuZGVyQ3JlYXRpb24oMyksIGludmFsaWQoNCkKKyAqCisgKiBJZiB0aGVyZSBhIG5vIG90aGVyIGNoZWNrcyB5b3UgbmVlZCB0byBkbywgc2ltcGx5IHJldHVybiBNRkRfU1VDQ0VTUy4KKyAqCisgKi8KK2ludAorZXRoZXJTdGF0c1N0YXR1c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzU3RhdHVzX3ZhbCkKK3sKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1N0YXR1c19jaGVja192YWx1ZSIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ0MTpvOiB8LT4gQ2hlY2sgZm9yIHZhbGlkIGV0aGVyU3RhdHNTdGF0dXMgdmFsdWUuCisgICAgICovCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7ICAgICAgICAgLyogZXRoZXJTdGF0c1N0YXR1cyB2YWx1ZSBub3QgaWxsZWdhbCAqLworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzU3RhdHVzX2NoZWNrX3ZhbHVlICovCisKKy8qKgorICogU2F2ZSBvbGQgdmFsdWUgaW5mb3JtYXRpb24KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHRhYmxlIGNvbnRleHQgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4KQorICoKKyAqIEByZXR2YWwgTUZEX1NVQ0NFU1MgOiBzdWNjZXNzCisgKiBAcmV0dmFsIE1GRF9FUlJPUiAgIDogZXJyb3IuIHNldCB3aWxsIGZhaWwuCisgKgorICogVGhpcyBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCBhZnRlciB0aGUgdGFibGUgbGV2ZWwgdW5kbyBzZXR1cCBmdW5jdGlvbgorICogZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAgaGFzIGJlZW4gY2FsbGVkLgorICoKKyAqQG5vdGUKKyAqIHRoaXMgZnVuY3Rpb24gd2lsbCBvbmx5IGJlIGNhbGxlZCBpZiBhIG5ldyB2YWx1ZSBpcyBzZXQgZm9yIHRoaXMgY29sdW1uLgorICoKKyAqIElmIHRoZXJlIGlzIGFueSBzZXR1cCBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIgY29sdW1uIChlLmcuIGFsbG9jYXRpbmcKKyAqIG1lbW9yeSBmb3IgYSBzdHJpbmcpLCB5b3Ugc2hvdWxkIGRvIHRoYXQgc2V0dXAgaW4gdGhpcyBmdW5jdGlvbiwgc28gaXQKKyAqIHdvbid0IGJlIGRvbmUgdW5sZXNzIGl0IGlzIG5lY2Vzc2FyeS4KKyAqLworaW50CitldGhlclN0YXRzU3RhdHVzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzU3RhdHVzX3VuZG9fc2V0dXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qKiBzaG91bGQgbmV2ZXIgZ2V0IGEgTlVMTCBwb2ludGVyICovCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogVE9ETzo0NTU6bzogfC0+IFNldHVwIGV0aGVyU3RhdHNTdGF0dXMgdW5kby4KKyAgICAgKi8KKyAgICAvKgorICAgICAqIGNvcHkgZXRoZXJTdGF0c1N0YXR1cyBkYXRhCisgICAgICogc2V0IHJvd3JlcV9jdHgtPnVuZG8tPmV0aGVyU3RhdHNTdGF0dXMgZnJvbSByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNTdGF0dXMKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzU3RhdHVzID0gcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzU3RhdHVzOworCisKKyAgICByZXR1cm4gTUZEX1NVQ0NFU1M7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNTdGF0dXNfdW5kb19zZXR1cCAqLworCisvKioKKyAqIFNldCB0aGUgbmV3IHZhbHVlLgorICoKKyAqIEBwYXJhbSByb3dyZXFfY3R4CisgKiAgICAgICAgUG9pbnRlciB0byB0aGUgdXNlcnMgY29udGV4dC4gWW91IHNob3VsZCBrbm93IGhvdyB0bworICogICAgICAgIG1hbmlwdWxhdGUgdGhlIHZhbHVlIGZyb20gdGhpcyBvYmplY3QuCisgKiBAcGFyYW0gZXRoZXJTdGF0c1N0YXR1c192YWwKKyAqICAgICAgICBBIGxvbmcgY29udGFpbmluZyB0aGUgbmV3IHZhbHVlLgorICovCitpbnQKK2V0aGVyU3RhdHNTdGF0dXNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzU3RhdHVzX3ZhbCkKK3sKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzU3RhdHVzX3NldCIsCisgICAgICAgICAgICAgICAgImNhbGxlZFxuIikpOworCisgICAgLyoqIHNob3VsZCBuZXZlciBnZXQgYSBOVUxMIHBvaW50ZXIgKi8KKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiBUT0RPOjQ2MTpNOiB8LT4gU2V0IGV0aGVyU3RhdHNTdGF0dXMgdmFsdWUuCisgICAgICogc2V0IGV0aGVyU3RhdHNTdGF0dXMgdmFsdWUgaW4gcm93cmVxX2N0eC0+ZGF0YQorICAgICAqLworICAgIHJvd3JlcV9jdHgtPmRhdGEuZXRoZXJTdGF0c1N0YXR1cyA9IGV0aGVyU3RhdHNTdGF0dXNfdmFsOworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzU3RhdHVzX3NldCAqLworCisvKioKKyAqIHVuZG8gdGhlIHByZXZpb3VzIHNldC4KKyAqCisgKiBAcGFyYW0gcm93cmVxX2N0eAorICogICAgICAgIFBvaW50ZXIgdG8gdGhlIHVzZXJzIGNvbnRleHQuCisgKi8KK2ludAorZXRoZXJTdGF0c1N0YXR1c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzU3RhdHVzX3VuZG8iLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIFRPRE86NDU2Om86IHwtPiBDbGVhbiB1cCBldGhlclN0YXRzU3RhdHVzIHVuZG8uCisgICAgICovCisgICAgLyoKKyAgICAgKiBjb3B5IGV0aGVyU3RhdHNTdGF0dXMgZGF0YQorICAgICAqIHNldCByb3dyZXFfY3R4LT5kYXRhLmV0aGVyU3RhdHNTdGF0dXMgZnJvbSByb3dyZXFfY3R4LT51bmRvLT5ldGhlclN0YXRzU3RhdHVzCisgICAgICovCisgICAgcm93cmVxX2N0eC0+ZGF0YS5ldGhlclN0YXRzU3RhdHVzID0gcm93cmVxX2N0eC0+dW5kby0+ZXRoZXJTdGF0c1N0YXR1czsKKworCisgICAgcmV0dXJuIE1GRF9TVUNDRVNTOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzU3RhdHVzX3VuZG8gKi8KKworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2RhdGFfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU4ZTA4NwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfZGF0YV9zZXQuaApAQCAtMCwwICsxLDM1NiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTIwNzcgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX0RBVEFfU0VUX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0RBVEFfU0VUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU0VUIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU0VUIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogUk1PTi1NSUI6OmV0aGVyU3RhdHNUYWJsZSBpcyBzdWJpZCAxIG9mIHN0YXRpc3RpY3MuCisgICAgICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICAgICAqIE9JRDogLjEuMy42LjEuMi4xLjE2LjEuMSwgbGVuZ3RoOiA5CisgICAgICovCisKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbW1pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNEYXRhU291cmNlX3ZhbF9wdHJfbGVuKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0RhdGFTb3VyY2VfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c0Ryb3BFdmVudHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0Ryb3BFdmVudHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNEcm9wRXZlbnRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRHJvcEV2ZW50c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c09jdGV0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzT2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzUGt0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c1BrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNCcm9hZGNhc3RQa3RzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQnJvYWRjYXN0UGt0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzTXVsdGljYXN0UGt0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c011bHRpY2FzdFBrdHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9yc19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQ1JDQWxpZ25FcnJvcnNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVW5kZXJzaXplUGt0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzT3ZlcnNpemVQa3RzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c092ZXJzaXplUGt0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNGcmFnbWVudHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0ZyYWdtZW50c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRnJhZ21lbnRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNGcmFnbWVudHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzSmFiYmVyc19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzSmFiYmVyc192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzSmFiYmVyc191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0phYmJlcnNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c0phYmJlcnNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c0phYmJlcnNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgZXRoZXJTdGF0c0NvbGxpc2lvbnNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c0NvbGxpc2lvbnNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNDb2xsaXNpb25zX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzQ29sbGlzaW9uc191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX2NoZWNrX3ZhbHVlKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM2NE9jdGV0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czY0T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNjRPY3RldHNfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEyOHRvMjU1T2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19jaGVja192YWx1ZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHNfdW5kb19zZXR1cChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19zZXQoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfY2hlY2tfdmFsdWUKKyAgICAgICAgKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgIHVfbG9uZyBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0c191bmRvX3NldHVwKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3ZhbCk7CisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgCisgICAgICAgIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c19jaGVja192YWx1ZQorICAgICAgICAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0c192YWwpOworICAgIGludCAgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdW5kb19zZXR1cAorICAgICAgICAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzUGt0czEwMjR0bzE1MThPY3RldHNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX3VuZG8oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpldGhlclN0YXRzT3duZXJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX3ZhbF9wdHJfbGVuKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c093bmVyX3NldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpldGhlclN0YXRzT3duZXJfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfdmFsX3B0cl9sZW4pOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzT3duZXJfdW5kbyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfY2hlY2tfdmFsdWUoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c192YWwpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzU3RhdHVzX3VuZG9fc2V0dXAoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCk7CisgICAgaW50ICAgICAgICAgICAgIGV0aGVyU3RhdHNTdGF0dXNfc2V0KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGV0aGVyU3RhdHNTdGF0dXNfdmFsKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1c191bmRvKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworCisKKyAgICBpbnQgICAgICAgICAgICAKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2RlcGVuZGVuY2llcyhldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4KTsKKworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFVEhFUlNUQVRTVEFCTEVfREFUQV9TRVRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9lbnVtcy5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9lbnVtcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExM2MwYjcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2VudW1zLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLWVudW1zLm0yYyAxMjUyNiAyMDA1LTA3LTE1IDIyOjQxOjE2WiByc3RvcnkgJAorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX0VOVU1TX0gKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX0VOVU1TX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBOT1RFUyBvbiBlbnVtcworICAgICAqID09PT09PT09PT09PT09CisgICAgICoKKyAgICAgKiBWYWx1ZSBNYXBwaW5nCisgICAgICogLS0tLS0tLS0tLS0tLQorICAgICAqIElmIHRoZSB2YWx1ZXMgZm9yIHlvdXIgZGF0YSB0eXBlIGRvbid0IGV4YWN0bHkgbWF0Y2ggdGhlCisgICAgICogcG9zc2libGUgdmFsdWVzIGRlZmluZWQgYnkgdGhlIG1pYiwgeW91IHNob3VsZCBtYXAgdGhlbQorICAgICAqIGJlbG93LiBGb3IgZXhhbXBsZSwgYSBib29sZWFuIGZsYWcgKDEvMCkgaXMgdXN1YWxseSByZXByZXNlbnRlZAorICAgICAqIGFzIGEgVHJ1dGhWYWx1ZSBpbiBhIE1JQiwgd2hpY2ggbWFwcyB0byB0aGUgdmFsdWVzICgxLzIpLgorICAgICAqCisgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBlbnVtIGRlZmluaXRpb25zIGZvciB0YWJsZSBldGhlclN0YXRzVGFibGUKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBjb25zdGFudHMgZm9yIGVudW1zIGZvciB0aGUgTUlCIG5vZGUKKyAqIGV0aGVyU3RhdHNTdGF0dXMgKEVudHJ5U3RhdHVzIC8gQVNOX0lOVEVHRVIpCisgKgorICogc2luY2UgYSBUZXh0dWFsIENvbnZlbnRpb24gbWF5IGJlIHJlZmVyZW5jZWQgbW9yZSB0aGFuIG9uY2UgaW4gYQorICogTUlCLCBwcm90ZWN0IGFnYWludCByZWRlZmluaXRpb25zIG9mIHRoZSBlbnVtIHZhbHVlcy4KKyAqLworI2lmbmRlZiBFTlRSWVNUQVRVU19FTlVNUworI2RlZmluZSBFTlRSWVNUQVRVU19FTlVNUworCisjZGVmaW5lIEVOVFJZU1RBVFVTX1ZBTElEICAxCisjZGVmaW5lIEVOVFJZU1RBVFVTX0NSRUFURVJFUVVFU1QgIDIKKyNkZWZpbmUgRU5UUllTVEFUVVNfVU5ERVJDUkVBVElPTiAgMworI2RlZmluZSBFTlRSWVNUQVRVU19JTlZBTElEICA0CisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU5UUllTVEFUVVNfRU5VTVMgKi8KKworCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVRIRVJTVEFUU1RBQkxFX0VOVU1TX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyMWM2MDgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5jCkBAIC0wLDAgKzEsMjIzMiBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgICAgICB2ZXJzaW9uIDogMTU4OTkgJCBvZiAkIAorICoKKyAqICRJZDokCisgKi8KKy8qCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSElTIEZJTEUgRE9FUyBOT1QgQ09OVEFJTiBBTlkgVVNFUiBFRElUQUJMRSBDT0RFLiAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICAgICBUSEUgR0VORVJBVEVEIENPREUgSVMgSU5URVJOQUwgSU1QTEVNRU5UQVRJT04sIEFORCAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKiAgICBJUyBTVUJKRUNUIFRPIENIQU5HRSBXSVRIT1VUIFdBUk5JTkcgSU4gRlVUVVJFIFJFTEVBU0VTLiAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqLworCisvKgorICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyoKKyAqIGluY2x1ZGUgb3VyIHBhcmVudCBoZWFkZXIgCisgKi8KKyNpbmNsdWRlICJldGhlclN0YXRzVGFibGUuaCIKKworCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXJfcm93X2luc2VydCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqIFRhYmxlIGV0aGVyU3RhdHNUYWJsZQorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIFJNT04tTUlCOjpldGhlclN0YXRzVGFibGUgaXMgc3ViaWQgMSBvZiBzdGF0aXN0aWNzLgorICogSXRzIHN0YXR1cyBpcyBDdXJyZW50LgorICogT0lEOiAuMS4zLjYuMS4yLjEuMTYuMS4xLCBsZW5ndGg6IDkKKyAqLwordHlwZWRlZiBzdHJ1Y3QgZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHhfcyB7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKnVzZXJfY3R4OworCisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyB0YmxfaW5mbzsKKworICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbWV0aG9kcyBhY2Nlc3NfbXVsdGlwbGV4ZXI7CisKKyAgICB1X2ludCAgICAgICAgICAgdGFibGVfZGlydHk7CisKK30gZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHg7CisKK3N0YXRpYyBldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCBldGhlclN0YXRzVGFibGVfaWZfY3R4OworCitzdGF0aWMgdm9pZCAgICAKK19ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQoZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpOworc3RhdGljIHZvaWQgICAgCitfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bihldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOworCisKK25ldHNubXBfY29udGFpbmVyICoKK2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyOworfQorCitldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICoKK2V0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCit7CisgICAgcmV0dXJuIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHg7Cit9CisKK2V0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKK3sKKyAgICBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICpvbGQgPSBldGhlclN0YXRzVGFibGVfaWZfY3R4LnVzZXJfY3R4OworICAgIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50CitldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKK3sKKyAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5jb250YWluZXIpOworfQorCit1X2ludAorZXRoZXJTdGF0c1RhYmxlX2RpcnR5X2dldCh2b2lkKQoreworICAgIHJldHVybiBldGhlclN0YXRzVGFibGVfaWZfY3R4LnRhYmxlX2RpcnR5OworfQorCit2b2lkCitldGhlclN0YXRzVGFibGVfZGlydHlfc2V0KHVfaW50IHN0YXR1cykKK3sKKyAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9zZXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWQuIHdhcyAlZCwgbm93ICVkXG4iLAorICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudGFibGVfZGlydHksIHN0YXR1cykpOworICAgIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudGFibGVfZGlydHkgPSBzdGF0dXM7Cit9CisKKy8qCisgKiBtZmQgbXVsdGlwbGV4ZXIgbW9kZXMKKyAqLworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0Oworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF92YWx1ZXM7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfY2hlY2tfb2JqZWN0czsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3NldF92YWx1ZXM7CitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fdmFsdWVzOworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2NvbW1pdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdDsKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX2V0aGVyU3RhdHNUYWJsZV9pcnJldmVyc2libGVfY29tbWl0OworCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKTsKKworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV9jaGVja19pbmRleGVzKGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCk7CisKK2V0aGVyU3RhdHNUYWJsZV9kYXRhICpldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSh2b2lkKTsKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIEluaXRpYWxpemUgdGhlIHRhYmxlIGV0aGVyU3RhdHNUYWJsZSAKKyAqICAgIChEZWZpbmUgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkKQorICovCit2b2lkCitfZXRoZXJTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlKGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfcHRyLCB1X2xvbmcgZmxhZ3MpCit7CisgICAgbmV0c25tcF9iYWJ5X3N0ZXBzX2FjY2Vzc19tZXRob2RzICphY2Nlc3NfbXVsdGlwbGV4ZXIgPQorICAgICAgICAmZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC5hY2Nlc3NfbXVsdGlwbGV4ZXI7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGJsX2luZm8gPQorICAgICAgICAmZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC50YmxfaW5mbzsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvOworICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXI7CisgICAgaW50ICAgICAgICAgICAgIG1mZF9tb2RlcyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UiLCAiY2FsbGVkXG4iKSk7CisKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBzYXZlIGludGVyZmFjZSBjb250ZXh0IGZvciBldGhlclN0YXRzVGFibGUKKyAgICAgKi8KKyAgICAvKgorICAgICAqIFNldHRpbmcgdXAgdGhlIHRhYmxlJ3MgZGVmaW5pdGlvbgorICAgICAqLworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRibF9pbmZvLCBBU05fSU5URUdFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyoqIGluZGV4OiBldGhlclN0YXRzSW5kZXggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKKyAgICAgKi8KKyAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IEVUSEVSU1RBVFNUQUJMRV9NSU5fQ09MOworICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gRVRIRVJTVEFUU1RBQkxFX01BWF9DT0w7CisKKyAgICAvKgorICAgICAqIHNhdmUgdXNlcnMgY29udGV4dAorICAgICAqLworICAgIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHggPSByZWdfcHRyOworCisgICAgLyoKKyAgICAgKiBjYWxsIGRhdGEgYWNjZXNzIGluaXRpYWxpemF0aW9uIGNvZGUKKyAgICAgKi8KKyAgICBldGhlclN0YXRzVGFibGVfaW5pdF9kYXRhKHJlZ19wdHIpOworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQoJmV0aGVyU3RhdHNUYWJsZV9pZl9jdHgpOworICAgIGlmIChOVUxMID09IGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgaW5pdGlhbGl6ZSBjb250YWluZXIgZm9yIGV0aGVyU3RhdHNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFjY2Vzc19tdWx0aXBsZXhlcjogUkVRVUlSRUQgd3JhcHBlciBmb3IgZ2V0IHJlcXVlc3QgaGFuZGxpbmcKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9sb29rdXAgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+Z2V0X3ZhbHVlcyA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF92YWx1ZXM7CisKKyAgICAvKgorICAgICAqIG5vIHdyYXBwZXJzIHlldAorICAgICAqLworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdDsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdDsKKworCisgICAgLyoKKyAgICAgKiBSRVFVSVJFRCB3cmFwcGVycyBmb3Igc2V0IHJlcXVlc3QgaGFuZGxpbmcKKyAgICAgKi8KKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPm9iamVjdF9zeW50YXhfY2hlY2tzID0KKyAgICAgICAgX21mZF9ldGhlclN0YXRzVGFibGVfY2hlY2tfb2JqZWN0czsKKyAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0dXAgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jbGVhbnVwID0gX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jbGVhbnVwOworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcyA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3NldF92YWx1ZXM7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT51bmRvX3NldHMgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3ZhbHVlczsKKworICAgIC8qCisgICAgICogbm8gd3JhcHBlcnMgeWV0CisgICAgICovCisgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb21taXQgPSBfbWZkX2V0aGVyU3RhdHNUYWJsZV9jb21taXQ7CisgICAgYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCA9IF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0OworICAgIGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCA9CisgICAgICAgIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2lycmV2ZXJzaWJsZV9jb21taXQ7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogQ3JlYXRlIGEgcmVnaXN0cmF0aW9uLCBzYXZlIG91ciByZWcgZGF0YSwgcmVnaXN0ZXIgdGFibGUuCisgICAgICovCisgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTppbml0X2V0aGVyU3RhdHNUYWJsZSIsCisgICAgICAgICAgICAgICAgIlJlZ2lzdGVyaW5nIGV0aGVyU3RhdHNUYWJsZSBhcyBhIG1pYnMtZm9yLWR1bW1pZXMgdGFibGUuXG4iKSk7CisgICAgaGFuZGxlciA9CisgICAgICAgIG5ldHNubXBfYmFieV9zdGVwc19hY2Nlc3NfbXVsdGlwbGV4ZXJfZ2V0KGFjY2Vzc19tdWx0aXBsZXhlcik7CisgICAgcmVnaW5mbyA9CisgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlKCJldGhlclN0YXRzVGFibGUiLCBoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfb2lkX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUCB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisgICAgaWYgKE5VTEwgPT0gcmVnaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgZXRoZXJTdGF0c1RhYmxlXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByZWdpbmZvLT5teV9yZWdfdm9pZCA9ICZldGhlclN0YXRzVGFibGVfaWZfY3R4OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIHNldCB1cCBiYWJ5IHN0ZXBzIGhhbmRsZXIsIGNyZWF0ZSBpdCBhbmQgaW5qZWN0IGl0CisgICAgICovCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X2xvb2t1cCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9PQkpFQ1RfTE9PS1VQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQ7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+b2JqZWN0X3N5bnRheF9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfT0JKRUNUOworCisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cHJlX3JlcXVlc3QpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUFJFX1JFUVVFU1Q7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKKworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0dXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19TRVRVUDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NsZWFudXApCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DTEVBTlVQOworICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fc2V0cykKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX1NFVFM7CisKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5yb3dfY3JlYXRpb24pCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfUk9XX0NSRUFURTsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MpCisgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ0hFQ0tfQ09OU0lTVEVOQ1k7CisgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+Y29tbWl0KQorICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKKyAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKKyAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKKworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCByb3dfbWVyZ2UgaGVscGVyIHdpdGggcHJlZml4IHJvb3RvaWRfbGVuICsgMiAoZW50cnkuY29sKQorICAgICAqLworICAgIGhhbmRsZXIgPSBuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlcihyZWdpbmZvLT5yb290b2lkX2xlbiArIDIpOworICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNvbnRhaW5lcl90YWJsZSBoZWxwZXIKKyAgICAgKi8KKyAgICBoYW5kbGVyID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQodGJsX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjYWNoZSBoZWxwZXIKKyAgICAgKi8KKyAgICBpZiAoTlVMTCAhPSBldGhlclN0YXRzVGFibGVfaWZfY3R4LmNhY2hlKSB7CisgICAgICAgIGhhbmRsZXIgPSBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY2FjaGUpOworICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgdGFibGUKKyAgICAgKi8KKyAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZ2luZm8sIHRibF9pbmZvKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX2luaXRpYWxpemVfaW50ZXJmYWNlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBTaHV0ZG93biB0aGUgdGFibGUgZXRoZXJTdGF0c1RhYmxlCisgKi8KK3ZvaWQKK19ldGhlclN0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKiByZWdfcHRyKQoreworICAgIC8qCisgICAgICogc2h1dGRvd24gdGhlIGNvbnRhaW5lcgorICAgICAqLworICAgIF9ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX3NodXRkb3duKCZldGhlclN0YXRzVGFibGVfaWZfY3R4KTsKK30KKwordm9pZAorZXRoZXJTdGF0c1RhYmxlX3ZhbGlkX2NvbHVtbnNfc2V0KG5ldHNubXBfY29sdW1uX2luZm8gKnZjKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudGJsX2luZm8udmFsaWRfY29sdW1ucyA9IHZjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfdmFsaWRfY29sdW1uc19zZXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIGNvbnZlcnQgdGhlIGluZGV4IGNvbXBvbmVudCBzdG9yZWQgaW4gdGhlIGNvbnRleHQgdG8gYW4gb2lkCisgKi8KK2ludAorZXRoZXJTdGF0c1RhYmxlX2luZGV4X3RvX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgaW50ICAgICAgICAgICAgIGVyciA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICAvKgorICAgICAqIHRlbXAgc3RvcmFnZSBmb3IgcGFyc2luZyBpbmRleGVzCisgICAgICovCisgICAgLyoKKyAgICAgKiBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2gKKyAgICAgKi8KKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyX2V0aGVyU3RhdHNJbmRleDsKKworICAgIC8qCisgICAgICogc2V0IHVwIHZhcmJpbmRzCisgICAgICovCisgICAgbWVtc2V0KCZ2YXJfZXRoZXJTdGF0c0luZGV4LCAweDAwLCBzaXplb2YodmFyX2V0aGVyU3RhdHNJbmRleCkpOworICAgIHZhcl9ldGhlclN0YXRzSW5kZXgudHlwZSA9IEFTTl9JTlRFR0VSOworCisgICAgLyoKKyAgICAgKiBjaGFpbiB0ZW1wIGluZGV4IHZhcmJpbmRzIHRvZ2V0aGVyCisgICAgICovCisgICAgdmFyX2V0aGVyU3RhdHNJbmRleC5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKKworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9pbmRleF90b19vaWQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAqLworICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyX2V0aGVyU3RhdHNJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIG1pYl9pZHgtPmV0aGVyU3RhdHNJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pYl9pZHgtPmV0aGVyU3RhdHNJbmRleCkpOworCisKKyAgICBlcnIgPSBidWlsZF9vaWRfbm9hbGxvYyhvaWRfaWR4LT5vaWRzLCBvaWRfaWR4LT5sZW4sICZvaWRfaWR4LT5sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgJnZhcl9ldGhlclN0YXRzSW5kZXgpOworICAgIGlmIChlcnIpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciAlZCBjb252ZXJ0aW5nIGluZGV4IHRvIG9pZFxuIiwgZXJyKTsKKworICAgIC8qCisgICAgICogcGFyc2luZyBtYXkgaGF2ZSBhbGxvY2F0ZWQgbWVtb3J5LiBmcmVlIGl0LgorICAgICAqLworICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMoJnZhcl9ldGhlclN0YXRzSW5kZXgpOworCisgICAgcmV0dXJuIGVycjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX2luZGV4X3RvX29pZCAqLworCisvKioKKyAqIGV4dHJhY3QgZXRoZXJTdGF0c1RhYmxlIGluZGV4ZXMgZnJvbSBhIG5ldHNubXBfaW5kZXgKKyAqCisgKiBAcmV0dmFsIFNOTVBfRVJSX05PRVJST1IgIDogbm8gZXJyb3IKKyAqIEByZXR2YWwgU05NUF9FUlJfR0VORVJSICAgOiBlcnJvcgorICovCitpbnQKK2V0aGVyU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZChuZXRzbm1wX2luZGV4ICogb2lkX2lkeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfbWliX2luZGV4ICogbWliX2lkeCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZXJyID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIC8qCisgICAgICogdGVtcCBzdG9yYWdlIGZvciBwYXJzaW5nIGluZGV4ZXMKKyAgICAgKi8KKyAgICAvKgorICAgICAqIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaAorICAgICAqLworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCB2YXJfZXRoZXJTdGF0c0luZGV4OworCisgICAgLyoKKyAgICAgKiBzZXQgdXAgdmFyYmluZHMKKyAgICAgKi8KKyAgICBtZW1zZXQoJnZhcl9ldGhlclN0YXRzSW5kZXgsIDB4MDAsIHNpemVvZih2YXJfZXRoZXJTdGF0c0luZGV4KSk7CisgICAgdmFyX2V0aGVyU3RhdHNJbmRleC50eXBlID0gQVNOX0lOVEVHRVI7CisKKyAgICAvKgorICAgICAqIGNoYWluIHRlbXAgaW5kZXggdmFyYmluZHMgdG9nZXRoZXIKKyAgICAgKi8KKyAgICB2YXJfZXRoZXJTdGF0c0luZGV4Lm5leHRfdmFyaWFibGUgPSBOVUxMOworCisKKyAgICBERUJVR01TR1RMKCgidmVyYm9zZTpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX2luZGV4X2Zyb21fb2lkIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIHBhcnNlIHRoZSBvaWQgaW50byB0aGUgaW5kaXZpZHVhbCBpbmRleCBjb21wb25lbnRzCisgICAgICovCisgICAgZXJyID0gcGFyc2Vfb2lkX2luZGV4ZXMob2lkX2lkeC0+b2lkcywgb2lkX2lkeC0+bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXJfZXRoZXJTdGF0c0luZGV4KTsKKyAgICBpZiAoZXJyID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY29weSBvdXQgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBtaWJfaWR4LT5ldGhlclN0YXRzSW5kZXggPQorICAgICAgICAgICAgKigobG9uZyAqKSB2YXJfZXRoZXJTdGF0c0luZGV4LnZhbC5zdHJpbmcpOworCisKKyAgICB9CisKKyAgICAvKgorICAgICAqIHBhcnNpbmcgbWF5IGhhdmUgYWxsb2NhdGVkIG1lbW9yeS4gZnJlZSBpdC4KKyAgICAgKi8KKyAgICBzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzKCZ2YXJfZXRoZXJTdGF0c0luZGV4KTsKKworICAgIHJldHVybiBlcnI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9pbmRleF9mcm9tX29pZCAqLworCisKKy8qCisgKiBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YQorICoKKyAqIFB1cnBvc2U6IGNyZWF0ZSBuZXcgZXRoZXJTdGF0c1RhYmxlX2RhdGEuCisgKi8KK2V0aGVyU3RhdHNUYWJsZV9kYXRhICoKK2V0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhKHZvaWQpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX2RhdGEgKnJ0biA9IFNOTVBfTUFMTE9DX1RZUEVERUYoZXRoZXJTdGF0c1RhYmxlX2RhdGEpOworCisgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBydG4pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuYWJsZSB0byBtYWxsb2MgbWVtb3J5IGZvciBuZXcgIgorICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX2RhdGEuXG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gcnRuOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSAqLworCisvKgorICogZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2VfZGF0YQorICoKKyAqIFB1cnBvc2U6IHJlbGVhc2UgZXRoZXJTdGF0c1RhYmxlIGRhdGEuCisgKi8KK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEoZXRoZXJTdGF0c1RhYmxlX2RhdGEgKiBkYXRhKQoreworICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmV0aGVyU3RhdHNUYWJsZTpldGhlclN0YXRzVGFibGVfcmVsZWFzZV9kYXRhIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBmcmVlKGRhdGEpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9kYXRhICovCisKKy8qCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAaW50ZXJuYWwKKyAqIGFsbG9jYXRlIHJlc291cmNlcyBmb3IgYSBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eAorICovCitldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqCitldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCh2b2lkICp1c2VyX2luaXRfY3R4KQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgU05NUF9NQUxMT0NfVFlQRURFRihldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOmV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgbWVtb3J5IGZvciBhICIKKyAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4LlxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcyA9IHJvd3JlcV9jdHgtPm9pZF90bXA7CisKKyAgICByb3dyZXFfY3R4LT5ldGhlclN0YXRzVGFibGVfZGF0YV9saXN0ID0gTlVMTDsKKworICAgIC8qCisgICAgICogaWYgd2UgYWxsb2NhdGVkIGRhdGEsIGNhbGwgaW5pdCByb3V0aW5lCisgICAgICovCisgICAgaWYgKCEocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19EQVRBX0ZST01fVVNFUikpIHsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPQorICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHhfaW5pdChyb3dyZXFfY3R4LCB1c2VyX2luaXRfY3R4KSkgeworICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHggPSBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyU3RhdHNUYWJsZV9hbGxvY2F0ZV9yb3dyZXFfY3R4ICovCisKKy8qCisgKiBAaW50ZXJuYWwKKyAqIHJlbGVhc2UgcmVzb3VyY2VzIGZvciBhIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4CisgKi8KK3ZvaWQKK2V0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6ZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCIsICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eF9jbGVhbnVwKHJvd3JlcV9jdHgpOworCisgICAgaWYgKHJvd3JlcV9jdHgtPnVuZG8pCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX2RhdGEocm93cmVxX2N0eC0+dW5kbyk7CisKKyAgICAvKgorICAgICAqIGZyZWUgaW5kZXggb2lkIHBvaW50ZXIKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzICE9IHJvd3JlcV9jdHgtPm9pZF90bXApCisgICAgICAgIGZyZWUocm93cmVxX2N0eC0+b2lkX2lkeC5vaWRzKTsKKworICAgIFNOTVBfRlJFRShyb3dyZXFfY3R4KTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZXRoZXJTdGF0c1RhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3ByZV9yZXF1ZXN0IiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKDEgIT0gbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2ZpcnN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgInNraXBwaW5nIGFkZGl0aW9uYWwgcHJlX3JlcXVlc3RcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgfQorCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3QoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfcHJlX3JlcXVlc3RcbiIsIHJjKSk7CisgICAgICAgIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3JfYWxsKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9wcmVfcmVxdWVzdCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICogd3JhcHBlcgorICovCitzdGF0aWMgaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3Bvc3RfcmVxdWVzdCIsICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogcmVsZWFzZSByb3cgY29udGV4dCwgaWYgZGVsZXRlZAorICAgICAqLworICAgIGlmIChyb3dyZXFfY3R4ICYmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0RFTEVURUQpKQorICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KHJvd3JlcV9jdHgpOworCisgICAgLyoKKyAgICAgKiB3YWl0IGZvciBsYXN0IGNhbGwgYmVmb3JlIGNhbGxpbmcgdXNlcgorICAgICAqLworICAgIGlmICgxICE9IG5ldHNubXBfcm93X21lcmdlX3N0YXR1c19sYXN0KHJlZ2luZm8sIGFndHJlcV9pbmZvKSkgeworICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgIndhaXRpbmcgZm9yIGxhc3QgcG9zdF9yZXF1ZXN0XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIHBhY2tldF9yYyA9IG5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKGFndHJlcV9pbmZvLT5hc3AsIDApOworICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcGFja2V0X3JjKSAmJiBldGhlclN0YXRzVGFibGVfZGlydHlfZ2V0KCkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogd2Ugc2hvdWxkbid0IGdldCBoZXJlLiB0aGUgdW5kbyBzdGVwcyBzaG91bGQgYWxzbyBjbGVhcgorICAgICAgICAgKiB0aGUgZGlydHkgZmxhZ3MuCisgICAgICAgICAqLworICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZSBkaXJ0eSBmbGFnIHNldCBpbiBwb3N0X3JlcXVlc3QgIgorICAgICAgICAgICAgICAgICAiYnV0IHN0YXR1cyAhPSBTVUNDRVNTLlxuIik7CisgICAgfQorCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0KGV0aGVyU3RhdHNUYWJsZV9pZl9jdHgudXNlcl9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhY2tldF9yYyk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGUiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfcG9zdF9yZXF1ZXN0XG4iLCByYykpOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9wb3N0X3JlcXVlc3QgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9mcm9tX2luZGV4KG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpyY19wdHIpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCBtaWJfaWR4OworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfcm93cmVxX2Zyb21faW5kZXgiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSByY19wdHIpCisgICAgICAgIHJjX3B0ciA9ICZyYzsKKyAgICAqcmNfcHRyID0gTUZEX1NVQ0NFU1M7CisKKyAgICBtZW1zZXQoJm1pYl9pZHgsIDB4MCwgc2l6ZW9mKG1pYl9pZHgpKTsKKworICAgIC8qCisgICAgICogdHJ5IHRvIHBhcnNlIG9pZAorICAgICAqLworICAgICpyY19wdHIgPSBldGhlclN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQob2lkX2lkeCwgJm1pYl9pZHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSAqcmNfcHRyKSB7CisgICAgICAgIERFQlVHTVNHVCgoImV0aGVyU3RhdHNUYWJsZSIsICJlcnJvciBwYXJzaW5nIGluZGV4XG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogYWxsb2NhdGUgbmV3IGNvbnRleHQKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4ID0gZXRoZXJTdGF0c1RhYmxlX2FsbG9jYXRlX3Jvd3JlcV9jdHgoTlVMTCk7CisgICAgaWYgKE5VTEwgPT0gcm93cmVxX2N0eCkgeworICAgICAgICAqcmNfcHRyID0gTUZEX0VSUk9SOworICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiBtc2cgYWxyZWFkeSBsb2dnZWQgKi8KKyAgICB9CisKKyAgICBtZW1jcHkoJnJvd3JlcV9jdHgtPnRibF9pZHgsICZtaWJfaWR4LCBzaXplb2YobWliX2lkeCkpOworCisgICAgLyoKKyAgICAgKiBjaGVjayBpbmRleGVzCisgICAgICovCisgICAgKnJjX3B0ciA9IF9ldGhlclN0YXRzVGFibGVfY2hlY2tfaW5kZXhlcyhyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gKnJjX3B0cikgeworICAgICAgICBuZXRzbm1wX2Fzc2VydCgoKnJjX3B0ciA9PSBTTk1QX0VSUl9OT0NSRUFUSU9OKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAoKnJjX3B0ciA9PSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FKSk7CisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogY29weSBpbmRleGVzCisgICAgICovCisgICAgcm93cmVxX2N0eC0+b2lkX2lkeC5sZW4gPSBvaWRfaWR4LT5sZW47CisgICAgbWVtY3B5KHJvd3JlcV9jdHgtPm9pZF9pZHgub2lkcywgb2lkX2lkeC0+b2lkcywKKyAgICAgICAgICAgb2lkX2lkeC0+bGVuICogc2l6ZW9mKG9pZCkpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9mcm9tX2luZGV4ICovCisKKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHdyYXBwZXIKKyAqLworc3RhdGljIGludAorX21mZF9ldGhlclN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOworCisgICAgLyoKKyAgICAgKiBnZXQgb3VyIGNvbnRleHQgZnJvbSBtZmQKKyAgICAgKiBldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqaWZfY3R4ID0KKyAgICAgKiAgICAgICAgICAgICAoZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKilyZWdpbmZvLT5teV9yZWdfdm9pZDsKKyAgICAgKi8KKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpIHsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRibHJlcV9pbmZvOworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2lkeDsKKworICAgICAgICB0YmxyZXFfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdGJscmVxX2luZm8pIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJyZXF1ZXN0IGhhZCBubyB0YWJsZSBpbmZvXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfRVJST1I7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiB0cnkgY3JlYXRlIHJvd3JlcQorICAgICAgICAgKi8KKyAgICAgICAgb2lkX2lkeC5vaWRzID0gdGJscmVxX2luZm8tPmluZGV4X29pZDsKKyAgICAgICAgb2lkX2lkeC5sZW4gPSB0YmxyZXFfaW5mby0+aW5kZXhfb2lkX2xlbjsKKworICAgICAgICByb3dyZXFfY3R4ID0gX21mZF9ldGhlclN0YXRzVGFibGVfcm93cmVxX2Zyb21faW5kZXgoJm9pZF9pZHgsICZyYyk7CisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyA9PSByYykgeworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyB8PSBNRkRfUk9XX0NSRUFURUQ7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogYWRkIHJvd3JlcV9jdHggdG8gcmVxdWVzdCBkYXRhIGxpc3RzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQocmVxdWVzdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2luZGV4ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgcmMpOworICAgIGVsc2UKKyAgICAgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd19wcmVwKHJvd3JlcV9jdHgpOworCisgICAgcmV0dXJuIFNOTVBfVkFMSURBVEVfRVJSKHJjKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfb2JqZWN0X2xvb2t1cCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBHRVQgcHJvY2Vzc2luZworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIFJldHJpZXZlIHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogKElOREVYKSBldGhlclN0YXRzSW5kZXgoMSkvSU5URUdFUjMyL0FTTl9JTlRFR0VSL2xvbmcobG9uZykvL2wvQS93L2UvUi9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNJTkRFWDoKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZihsb25nKTsKKyAgICAgICAgKCp2YXItPnZhbC5pbnRlZ2VyKSA9IHJvd3JlcV9jdHgtPnRibF9pZHguZXRoZXJTdGF0c0luZGV4OworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRGF0YVNvdXJjZSgyKS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0EvVy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRToKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzRGF0YVNvdXJjZSkgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnR5cGUgPSBBU05fT0JKRUNUX0lEOworICAgICAgICByYyA9IGV0aGVyU3RhdHNEYXRhU291cmNlX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob2lkICoqKSAmIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsX2xlbik7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEcm9wRXZlbnRzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEUk9QRVZFTlRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTRFJPUEVWRU5UU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNEcm9wRXZlbnRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzRHJvcEV2ZW50c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT2N0ZXRzKDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzT2N0ZXRzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzT2N0ZXRzX2dldChyb3dyZXFfY3R4LCAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzUGt0c19nZXQocm93cmVxX2N0eCwgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0cyg2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTQlJPQURDQVNUUEtUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzQnJvYWRjYXN0UGt0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0Jyb2FkY2FzdFBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c011bHRpY2FzdFBrdHMoNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU01VTFRJQ0FTVFBLVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c011bHRpY2FzdFBrdHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNNdWx0aWNhc3RQa3RzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycyg4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTQ1JDQUxJR05FUlJPUlM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNDUkNBTElHTkVSUk9SU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0NSQ0FsaWduRXJyb3JzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzVW5kZXJzaXplUGt0cyg5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTVU5ERVJTSVpFUEtUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1VOREVSU0laRVBLVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzVW5kZXJzaXplUGt0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1VuZGVyc2l6ZVBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c092ZXJzaXplUGt0cygxMCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09WRVJTSVpFUEtUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU09WRVJTSVpFUEtUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNPdmVyc2l6ZVBrdHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRnJhZ21lbnRzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTRlJBR01FTlRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTRlJBR01FTlRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c0ZyYWdtZW50cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0ZyYWdtZW50c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNKYWJiZXJzKDEyKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzSmFiYmVycykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0phYmJlcnNfZ2V0KHJvd3JlcV9jdHgsICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0NvbGxpc2lvbnMoMTMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNDT0xMSVNJT05TOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTQ09MTElTSU9OU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNDb2xsaXNpb25zKSBkb2Vzbid0IGV4aXN0XG4iLCBjb2x1bW4pKTsKKyAgICAgICAgICAgIHJldHVybiBNRkRfU0tJUDsKKyAgICAgICAgfQorCisgICAgICAgIHZhci0+dmFsX2xlbiA9IHNpemVvZih1X2xvbmcpOworICAgICAgICB2YXItPnR5cGUgPSBBU05fQ09VTlRFUjsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzQ29sbGlzaW9uc19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czY0T2N0ZXRzKDE0KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY0T0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUUzY0T0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHM2NE9jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHM2NE9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0cygxNSkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUUzY1VE8xMjdPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0czY1dG8xMjdPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzNjV0bzEyN09jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMxMjh0bzI1NU9jdGV0cygxNikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMpIGRvZXNuJ3QgZXhpc3RcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmV0dXJuIE1GRF9TS0lQOworICAgICAgICB9CisKKyAgICAgICAgdmFyLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7CisgICAgICAgIHZhci0+dHlwZSA9IEFTTl9DT1VOVEVSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzUGt0czI1NnRvNTExT2N0ZXRzKDE3KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzI1NlRPNTExT0NURVRTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTUEtUUzI1NlRPNTExT0NURVRTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHMyNTZ0bzUxMU9jdGV0c19nZXQocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9sb25nICopIHZhci0+dmFsLnN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzKDE4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVUUzoKKyAgICAgICAgaWYgKCEKKyAgICAgICAgICAgIChDT0xVTU5fRVRIRVJTVEFUU1BLVFM1MTJUTzEwMjNPQ1RFVFNfRkxBRyAmIHJvd3JlcV9jdHgtPgorICAgICAgICAgICAgIGNvbHVtbl9leGlzdHNfZmxhZ3MpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4iLCAiY29sdW1uICVkIChldGhlclN0YXRzUGt0czUxMnRvMTAyM09jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHM1MTJ0bzEwMjNPY3RldHNfZ2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2xvbmcgKikgdmFyLT52YWwuc3RyaW5nKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzKDE5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFVFM6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVUU19GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNQa3RzMTAyNHRvMTUxOE9jdGV0cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0NPVU5URVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzX2dldChyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPd25lcigyMCkvT3duZXJTdHJpbmcvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML0EvVy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1dORVI6CisgICAgICAgIGlmICghCisgICAgICAgICAgICAoQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHICYgcm93cmVxX2N0eC0+CisgICAgICAgICAgICAgY29sdW1uX2V4aXN0c19mbGFncykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X2NvbHVtbiIsICJjb2x1bW4gJWQgKGV0aGVyU3RhdHNPd25lcikgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnR5cGUgPSBBU05fT0NURVRfU1RSOworICAgICAgICByYyA9IGV0aGVyU3RhdHNPd25lcl9nZXQocm93cmVxX2N0eCwgKGNoYXIgKiopICZ2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1N0YXR1cygyMSkvRW50cnlTdGF0dXMvQVNOX0lOVEVHRVIvbG9uZyh1X2xvbmcpLy9sL0EvVy9FL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTOgorICAgICAgICBpZiAoIQorICAgICAgICAgICAgKENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUcgJiByb3dyZXFfY3R4LT4KKyAgICAgICAgICAgICBjb2x1bW5fZXhpc3RzX2ZsYWdzKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImNvbHVtbiAlZCAoZXRoZXJTdGF0c1N0YXR1cykgZG9lc24ndCBleGlzdFxuIiwgY29sdW1uKSk7CisgICAgICAgICAgICByZXR1cm4gTUZEX1NLSVA7CisgICAgICAgIH0KKworICAgICAgICB2YXItPnZhbF9sZW4gPSBzaXplb2YodV9sb25nKTsKKyAgICAgICAgdmFyLT50eXBlID0gQVNOX0lOVEVHRVI7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1N0YXR1c19nZXQocm93cmVxX2N0eCwgKHVfbG9uZyAqKSB2YXItPnZhbC5zdHJpbmcpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChFVEhFUlNUQVRTVEFCTEVfTUlOX0NPTCA8PSBjb2x1bW4KKyAgICAgICAgICAgICYmIGNvbHVtbiA8PSBFVEhFUlNUQVRTVEFCTEVfTUFYX0NPTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uIiwgImFzc3VtZSBjb2x1bW4gJWQgaXMgcmVzZXJ2ZWRcbiIsIGNvbHVtbikpOworICAgICAgICAgICAgcmMgPSBNRkRfU0tJUDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBjb2x1bW4gJWQgaW4gX2V0aGVyU3RhdHNUYWJsZV9nZXRfY29sdW1uLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4gKi8KKworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9nZXRfdmFsdWVzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgdV9jaGFyICAgICAgICAgKm9sZF9zdHJpbmc7CisgICAgdm9pZCAgICAgICAgICAgICgqZGF0YUZyZWVIb29rKSAodm9pZCAqKTsKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX2dldF92YWx1ZXMiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBERUJVR01TR1RMKCgiOTpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X3ZhbHVlcyIsCisgICAgICAgICAgICAgICAgImV4aXN0cyAldVxuIiwgcm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncykpOworCisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNhdmUgb2xkIHBvaW50ZXIsIHNvIHdlIGNhbiBmcmVlIGl0IGlmIHJlcGxhY2VkCisgICAgICAgICAqLworICAgICAgICBvbGRfc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZzsKKyAgICAgICAgZGF0YUZyZWVIb29rID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+ZGF0YUZyZWVIb29rOworICAgICAgICBpZiAoTlVMTCA9PSByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nKSB7CisgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuc3RyaW5nID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmOworICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsX2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0gZWxzZSBpZiAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmID09CisgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZykgeworICAgICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbF9sZW4gIT0KKyAgICAgICAgICAgICAgICBzaXplb2YocmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSkKKyAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWxfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHJlcXVlc3RzLT5yZXF1ZXN0dmItPmJ1Zik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBnZXQgY29sdW1uIGRhdGEKKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfZXRoZXJTdGF0c1RhYmxlX2dldF9jb2x1bW4ocm93cmVxX2N0eCwgcmVxdWVzdHMtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAocmMpIHsKKyAgICAgICAgICAgIGlmIChNRkRfU0tJUCA9PSByYykgeworICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgPSBTTk1QX05PU1VDSElOU1RBTkNFOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChOVUxMID09IHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJOVUxMIHZhcmJpbmQgZGF0YSBwb2ludGVyIVxuIik7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMpCisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIHRoZSBidWZmZXIgd2Fzbid0IHVzZWQgcHJldmlvdXNseSBmb3IgdGhlIG9sZCBkYXRhIChpLmUuIGl0CisgICAgICAgICAqIHdhcyBhbGxjb2F0ZWQgbWVtb3J5KSAgYW5kIHRoZSBnZXQgcm91dGluZSByZXBsYWNlZCB0aGUgcG9pbnRlciwKKyAgICAgICAgICogd2UgbmVlZCB0byBmcmVlIHRoZSBwcmV2aW91cyBwb2ludGVyLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKG9sZF9zdHJpbmcgJiYgKG9sZF9zdHJpbmcgIT0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+YnVmKSAmJgorICAgICAgICAgICAgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcgIT0gb2xkX3N0cmluZykpIHsKKyAgICAgICAgICAgIGlmIChkYXRhRnJlZUhvb2spCisgICAgICAgICAgICAgICAgKCpkYXRhRnJlZUhvb2spIChvbGRfc3RyaW5nKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmcmVlKG9sZF9zdHJpbmcpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfZ2V0X3ZhbHVlcyAqLworCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2luZGV4ZXMoZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jaGVja19pbmRleGVzIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisKKyAgICAvKgorICAgICAqIChJTkRFWCkgZXRoZXJTdGF0c0luZGV4KDEpL0lOVEVHRVIzMi9BU05fSU5URUdFUi9sb25nKGxvbmcpLy9sL0Evdy9lL1IvZC9oIAorICAgICAqLworICAgIC8qCisgICAgICogY2hlY2sgZGVmaW5lZCByYW5nZShzKS4gCisgICAgICovCisgICAgaWYgKChTTk1QRVJSX1NVQ0NFU1MgPT0gcmMpCisgICAgICAgICYmICgocm93cmVxX2N0eC0+dGJsX2lkeC5ldGhlclN0YXRzSW5kZXggPCAxKQorICAgICAgICAgICAgfHwgKHJvd3JlcV9jdHgtPnRibF9pZHguZXRoZXJTdGF0c0luZGV4ID4gNjU1MzUpKQorICAgICAgICApIHsKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9XUk9OR1ZBTFVFOworICAgIH0KKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiByYzsKKyAgICByYyA9IGV0aGVyU3RhdHNJbmRleF9jaGVja19pbmRleChyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOworCisgICAgLyoKKyAgICAgKiBpZiBpbmRpdmlkdWFsIHBhcnRzIGxvb2sgb2ssIGNoZWNrIHRoZW0gYXMgYSB3aG9sZQorICAgICAqLworICAgIHJldHVybiBldGhlclN0YXRzVGFibGVfdmFsaWRhdGVfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX2lmX2N0eC51c2VyX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2luZGV4ZXMgKi8KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogU0VUIHByb2Nlc3NpbmcKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNFVDogU3ludGF4IGNoZWNrcworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBAaW50ZXJuYWwKKyAqIENoZWNrIHRoZSBzeW50YXggZm9yIGEgcGFydGljdWxhciBjb2x1bW4KKyAqLworTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAorX2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW4oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyLCBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW4iLAorICAgICAgICAgICAgICAgICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworICAgICAgICAvKgorICAgICAgICAgKiAoSU5ERVgpIGV0aGVyU3RhdHNJbmRleCgxKS9JTlRFR0VSMzIvQVNOX0lOVEVHRVIvbG9uZyhsb25nKS8vbC9BL3cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0lOREVYOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOyAgICAgIC8qIGNhbiBub3QgY2hhbmdlIGluZGV4IG9mIGFjdGl2ZSByb3cgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0RhdGFTb3VyY2UoMikvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL1cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0U6CisgICAgICAgIHJjID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSh2YXIsIEFTTl9PQkpFQ1RfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzRGF0YVNvdXJjZSkpOworICAgICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uOmV0aGVyU3RhdHNEYXRhU291cmNlIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IGV0aGVyU3RhdHNEYXRhU291cmNlX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvaWQgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKKyAgICAgICAgICAgICAgICAmJiAoTUZEX05PVF9WQUxJRF9OT1cgIT0gcmMpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJjICVkIGZyb20gZXRoZXJTdGF0c0RhdGFTb3VyY2VfY2hlY2tfdmFsdWVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmMpOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEcm9wRXZlbnRzKDMpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEUk9QRVZFTlRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT2N0ZXRzKDQpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzKDUpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzQnJvYWRjYXN0UGt0cyg2KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTQlJPQURDQVNUUEtUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c011bHRpY2FzdFBrdHMoNykvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU01VTFRJQ0FTVFBLVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNDUkNBbGlnbkVycm9ycyg4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTQ1JDQUxJR05FUlJPUlM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNVbmRlcnNpemVQa3RzKDkpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNVTkRFUlNJWkVQS1RTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3ZlcnNpemVQa3RzKDEwKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRnJhZ21lbnRzKDExKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTRlJBR01FTlRTOgorICAgICAgICByYyA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzSmFiYmVycygxMikvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNDb2xsaXNpb25zKDEzKS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTQ09MTElTSU9OUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM2NE9jdGV0cygxNCkvQ09VTlRFUi9BU05fQ09VTlRFUi91X2xvbmcodV9sb25nKS8vbC9BL3cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NE9DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHM2NXRvMTI3T2N0ZXRzKDE1KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY1VE8xMjdPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMTI4dG8yNTVPY3RldHMoMTYpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzMjU2dG81MTFPY3RldHMoMTcpL0NPVU5URVIvQVNOX0NPVU5URVIvdV9sb25nKHVfbG9uZykvL2wvQS93L2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMjU2VE81MTFPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNQa3RzNTEydG8xMDIzT2N0ZXRzKDE4KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVUUzoKKyAgICAgICAgcmMgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgYnJlYWs7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c1BrdHMxMDI0dG8xNTE4T2N0ZXRzKDE5KS9DT1VOVEVSL0FTTl9DT1VOVEVSL3VfbG9uZyh1X2xvbmcpLy9sL0Evdy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTUEtUUzEwMjRUTzE1MThPQ1RFVFM6CisgICAgICAgIHJjID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPd25lcigyMCkvT3duZXJTdHJpbmcvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML0EvVy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1dORVI6CisgICAgICAgIHJjID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSh2YXIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzT3duZXIpKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogY2hlY2sgZGVmaW5lZCByYW5nZShzKS4gCisgICAgICAgICAqLworICAgICAgICBpZiAoKFNOTVBFUlJfU1VDQ0VTUyA9PSByYykKKyAgICAgICAgICAgICYmICgodmFyLT52YWxfbGVuIDwgMCkgfHwgKHZhci0+dmFsX2xlbiA+IDEyNykpCisgICAgICAgICAgICApIHsKKyAgICAgICAgICAgIHJjID0gU05NUF9FUlJfV1JPTkdMRU5HVEg7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbjpldGhlclN0YXRzT3duZXIiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJjID0gZXRoZXJTdGF0c093bmVyX2NoZWNrX3ZhbHVlKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKChNRkRfU1VDQ0VTUyAhPSByYykgJiYgKE1GRF9OT1RfVkFMSURfRVZFUiAhPSByYykKKyAgICAgICAgICAgICAgICAmJiAoTUZEX05PVF9WQUxJRF9OT1cgIT0gcmMpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiYmFkIHJjICVkIGZyb20gZXRoZXJTdGF0c093bmVyX2NoZWNrX3ZhbHVlXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJjKTsKKyAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzU3RhdHVzKDIxKS9FbnRyeVN0YXR1cy9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS9XL0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVM6CisgICAgICAgIHJjID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplKHZhciwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihyb3dyZXFfY3R4LT5kYXRhLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1N0YXR1cykpOworICAgICAgICAvKgorICAgICAgICAgKiBjaGVjayB0aGF0IHRoZSB2YWx1ZSBpcyBvbmUgb2YgZGVmaW5lZCBlbnVtcyAKKyAgICAgICAgICovCisgICAgICAgIGlmICgoU05NUEVSUl9TVUNDRVNTID09IHJjKQorICAgICAgICAgICAgJiYgKCp2YXItPnZhbC5pbnRlZ2VyICE9IEVOVFJZU1RBVFVTX1ZBTElEKQorICAgICAgICAgICAgJiYgKCp2YXItPnZhbC5pbnRlZ2VyICE9IEVOVFJZU1RBVFVTX0NSRUFURVJFUVVFU1QpCisgICAgICAgICAgICAmJiAoKnZhci0+dmFsLmludGVnZXIgIT0gRU5UUllTVEFUVVNfVU5ERVJDUkVBVElPTikKKyAgICAgICAgICAgICYmICgqdmFyLT52YWwuaW50ZWdlciAhPSBFTlRSWVNUQVRVU19JTlZBTElEKQorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICByYyA9IFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgICAgIH0KKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbjpldGhlclN0YXRzU3RhdHVzIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByYyA9IGV0aGVyU3RhdHNTdGF0dXNfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKCh1X2xvbmcgKikgdmFyLT52YWwuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcpKTsKKyAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCisgICAgICAgICAgICAgICAgJiYgKE1GRF9OT1RfVkFMSURfTk9XICE9IHJjKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImJhZCByYyAlZCBmcm9tIGV0aGVyU3RhdHNTdGF0dXNfY2hlY2tfdmFsdWVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmMpOworICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDogICAgLyoqIFdlIHNob3VsZG4ndCBnZXQgaGVyZSAqLworICAgICAgICByYyA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9ldGhlclN0YXRzVGFibGVfY2hlY2tfY29sdW1uXG4iLAorICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV9jaGVja19jb2x1bW4gKi8KKworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9jaGVja19vYmplY3RzKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9jaGVja19vYmplY3RzIiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIGZvciAoOyByZXF1ZXN0czsgcmVxdWVzdHMgPSByZXF1ZXN0cy0+bmV4dCkgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGdldCBjb2x1bW4gbnVtYmVyIGZyb20gdGFibGUgcmVxdWVzdCBpbmZvLCBhbmQgY2hlY2sgdGhhdCBjb2x1bW4KKyAgICAgICAgICovCisgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdHJpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgcmMgPSBfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX2NvbHVtbihyb3dyZXFfY3R4LCByZXF1ZXN0cy0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyaS0+Y29sbnVtKTsKKyAgICAgICAgaWYgKHJjKSB7CisgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcXVlc3RzLCBTTk1QX1ZBTElEQVRFX0VSUihyYykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX2NoZWNrX29iamVjdHMgKi8KKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBTRVQ6IFVuZG8gc2V0dXAKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKgorICogQGludGVybmFsCisgKiBTZXQgdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cF9jb2x1bW4oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29sdW1uKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwX2NvbHVtbiIsICJjYWxsZWQgZm9yICVkXG4iLCBjb2x1bW4pKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICBzd2l0Y2ggKGNvbHVtbikgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNEYXRhU291cmNlKDIpL09CSkVDVElEL0FTTl9PQkpFQ1RfSUQvb2lkKG9pZCkvL0wvQS9XL2Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFOgorICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHOworICAgICAgICByYyA9IGV0aGVyU3RhdHNEYXRhU291cmNlX3VuZG9fc2V0dXAocm93cmVxX2N0eCk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNPd25lcigyMCkvT3duZXJTdHJpbmcvQVNOX09DVEVUX1NUUi9jaGFyKGNoYXIpLy9ML0EvVy9lL1IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTT1dORVI6CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHOworICAgICAgICByYyA9IGV0aGVyU3RhdHNPd25lcl91bmRvX3NldHVwKHJvd3JlcV9jdHgpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzU3RhdHVzKDIxKS9FbnRyeVN0YXR1cy9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS9XL0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVM6CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRzsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzU3RhdHVzX3VuZG9fc2V0dXAocm93cmVxX2N0eCk7CisgICAgICAgIGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVua25vd24gY29sdW1uICVkIGluIF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cF9jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiByYzsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2V0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwX2NvbHVtbiAqLworCisKKy8qKgorICogQGludGVybmFsCisgKiB1bmRvIHNldHVwCisgKi8KK2ludAorX21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19zZXR1cChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICAvKgorICAgICAqIGFsbG9jYXRlIHVuZG8gY29udGV4dAorICAgICAqLworICAgIHJvd3JlcV9jdHgtPnVuZG8gPSBldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfZGF0YSgpOworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgtPnVuZG8pIHsKKyAgICAgICAgLyoqIG1zZyBhbHJlYWR5IGxvZ2dlZCAqLworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgIH0KKworICAgIC8qCisgICAgICogcm93IHVuZG8gc2V0dXAKKyAgICAgKi8KKyAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzID0gMDsKKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwKHJvd3JlcV9jdHgpOworICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICBERUJVR01TR1RMKCgiZXRoZXJTdGF0c1RhYmxlOm1mZCIsICJlcnJvciAlZCBmcm9tICIKKyAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwXG4iLCByYykpOworICAgICAgICBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbChyZXF1ZXN0cywgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvKgorICAgICAgICAgKiBjb2x1bW4gdW5kbyBzZXR1cAorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICAgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2V0IGNvbHVtbiBkYXRhCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHRyaSA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3RzKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHRyaSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgcmMgPSBfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXBfY29sdW1uKHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV91bmRvX3NldHVwX2NvbHVtblxuIiwgcmMpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXN1bHRzICovCisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fc2V0dXAgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHVuZG8gc2V0dXAKKyAqLworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAiLCAiY2FsbGVkXG4iKSk7CisKKyAgICAvKgorICAgICAqIGZhaWxlZCByb3cgY3JlYXRlIGluIGVhcmx5IHN0YWdlcyBoYXMgbm8gcm93cmVxX2N0eAorICAgICAqLworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpCisgICAgICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKKworICAgIC8qCisgICAgICogY2FsbCB1c2VyIGNsZWFudXAKKyAgICAgKi8KKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIG5vdGhpbmcgd2UgY2FuIGRvIGFib3V0IGl0IGJ1dCBsb2cgaXQKKyAgICAgICAgICovCisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3VuZG9fY2xlYW51cFxuIiwgcmMpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIHJlbGVhc2UgdW5kbyBjb250ZXh0LCBpZiBuZWVkZWQKKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+dW5kbykgeworICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9kYXRhKHJvd3JlcV9jdHgtPnVuZG8pOworICAgICAgICByb3dyZXFfY3R4LT51bmRvID0gTlVMTDsKKyAgICB9CisKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NsZWFudXAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU0VUOiBTZXQgdmFsdWVzCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIEBpbnRlcm5hbAorICogU2V0IHRoZSB2YWx1ZSBmb3IgYSBwYXJ0aWN1bGFyIGNvbHVtbgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50CitfZXRoZXJTdGF0c1RhYmxlX3NldF9jb2x1bW4oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwgaW50IGNvbHVtbikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfc2V0X2NvbHVtbiIsCisgICAgICAgICAgICAgICAgImNhbGxlZCBmb3IgJWRcbiIsIGNvbHVtbikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIHN3aXRjaCAoY29sdW1uKSB7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogZXRoZXJTdGF0c0RhdGFTb3VyY2UoMikvT0JKRUNUSUQvQVNOX09CSkVDVF9JRC9vaWQob2lkKS8vTC9BL1cvZS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0U6CisgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUc7CisgICAgICAgIHJjID0gZXRoZXJTdGF0c0RhdGFTb3VyY2Vfc2V0KHJvd3JlcV9jdHgsIChvaWQgKikgdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbF9sZW4pOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3duZXIoMjApL093bmVyU3RyaW5nL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9BL1cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSOgorICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzIHw9IENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRzsKKyAgICAgICAgcmMgPSBldGhlclN0YXRzT3duZXJfc2V0KHJvd3JlcV9jdHgsIChjaGFyICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qCisgICAgICAgICAqIGV0aGVyU3RhdHNTdGF0dXMoMjEpL0VudHJ5U3RhdHVzL0FTTl9JTlRFR0VSL2xvbmcodV9sb25nKS8vbC9BL1cvRS9yL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVUzoKKyAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyB8PSBDT0xVTU5fRVRIRVJTVEFUU1NUQVRVU19GTEFHOworICAgICAgICByYyA9IGV0aGVyU3RhdHNTdGF0dXNfc2V0KHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigodV9sb25nICopIHZhci0+dmFsLnN0cmluZykpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZXRoZXJTdGF0c1RhYmxlX3NldF9jb2x1bW5cbiIsCisgICAgICAgICAgICAgICAgIGNvbHVtbik7CisgICAgICAgIHJjID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfc2V0X2NvbHVtbiAqLworCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3NldF92YWx1ZXMobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9zZXRfdmFsdWVzIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncyA9IDA7CisgICAgZm9yICg7IHJlcXVlc3RzOyByZXF1ZXN0cyA9IHJlcXVlc3RzLT5uZXh0KSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHNldCBjb2x1bW4gZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgdHJpID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdHMpOworICAgICAgICBpZiAoTlVMTCA9PSB0cmkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICByYyA9IF9ldGhlclN0YXRzVGFibGVfc2V0X2NvbHVtbihyb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLCB0cmktPmNvbG51bSk7CisgICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX3NldF9jb2x1bW5cbiIsIHJjKSk7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKGFndHJlcV9pbmZvLCByZXF1ZXN0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9WQUxJREFURV9FUlIocmMpKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3NldF92YWx1ZXMgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU0VUOiBjb21taXQKKyAqCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisvKioKKyAqIEBpbnRlcm5hbAorICogY29tbWl0IHRoZSB2YWx1ZXMKKyAqLworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9jb21taXQobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9jb21taXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcm93cmVxX2N0eCk7CisKKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV9jb21taXQocm93cmVxX2N0eCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX2NvbW1pdFxuIiwgcmMpKTsKKyAgICAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIFNOTVBfVkFMSURBVEVfRVJSKHJjKSk7CisgICAgfQorCisgICAgaWYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfRElSVFkpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgd2Ugc3VjY2Vzc2Z1bGx5IGNvbW1pdGVkIHRoaXMgcm93LCBzZXQgdGhlIGRpcnR5IGZsYWcuIFVzZSB0aGUKKyAgICAgICAgICogY3VycmVudCB2YWx1ZSArIDEgKGkuZS4gZGlydHkgPSAjIHJvd3MgY2hhbmdlZCkuCisgICAgICAgICAqIHRoaXMgaXMgY2hlY2tlZCBpbiBwb3N0X3JlcXVlc3QuLi4KKyAgICAgICAgICovCisgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9zZXQoZXRoZXJTdGF0c1RhYmxlX2RpcnR5X2dldCgpICsgMSk7ICAgICAvKiBzZXQgdGFibGUgZGlydHkgZmxhZyAqLworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitpbnQKK19tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29tbWl0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICBldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfdW5kb19jb21taXQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgaWYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfRElSVFkpIHsKKyAgICAgICAgdV9pbnQgICAgICAgICAgIGQgPSBldGhlclN0YXRzVGFibGVfZGlydHlfZ2V0KCk7CisKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoZCAhPSAwKTsKKyAgICAgICAgaWYgKGQpCisgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfZGlydHlfc2V0KGQgLSAxKTsKKyAgICB9CisKKyAgICByYyA9IGV0aGVyU3RhdHNUYWJsZV91bmRvX2NvbW1pdChyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfdW5kb19jb21taXRcbiIsIHJjKSk7CisgICAgfQorCisgICAgaWYgKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfRElSVFkpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGUgcm93IGRpcnR5IGZsYWcgc3RpbGwgc2V0IGFmdGVyIHVuZG9fY29tbWl0XG4iKTsKKyAgICAgICAgcm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICY9IH5NRkRfUk9XX0RJUlRZOworICAgIH0KKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfbWZkX2V0aGVyU3RhdHNUYWJsZV9jb21taXQgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogU0VUOiBVbmRvCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHVuZG8gdGhlIHZhbHVlIGZvciBhIHBhcnRpY3VsYXIgY29sdW1uCisgKi8KK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK19ldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW4oZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsIGludCBjb2x1bW4pCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uIiwKKyAgICAgICAgICAgICAgICAiY2FsbGVkIGZvciAlZFxuIiwgY29sdW1uKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgc3dpdGNoIChjb2x1bW4pIHsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzRGF0YVNvdXJjZSgyKS9PQkpFQ1RJRC9BU05fT0JKRUNUX0lEL29pZChvaWQpLy9ML0EvVy9lL3IvZC9oIAorICAgICAgICAgKi8KKyAgICBjYXNlIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRToKKyAgICAgICAgcmMgPSBldGhlclN0YXRzRGF0YVNvdXJjZV91bmRvKHJvd3JlcV9jdHgpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzT3duZXIoMjApL093bmVyU3RyaW5nL0FTTl9PQ1RFVF9TVFIvY2hhcihjaGFyKS8vTC9BL1cvZS9SL2QvaCAKKyAgICAgICAgICovCisgICAgY2FzZSBDT0xVTU5fRVRIRVJTVEFUU09XTkVSOgorICAgICAgICByYyA9IGV0aGVyU3RhdHNPd25lcl91bmRvKHJvd3JlcV9jdHgpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBldGhlclN0YXRzU3RhdHVzKDIxKS9FbnRyeVN0YXR1cy9BU05fSU5URUdFUi9sb25nKHVfbG9uZykvL2wvQS9XL0Uvci9kL2ggCisgICAgICAgICAqLworICAgIGNhc2UgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVM6CisgICAgICAgIHJjID0gZXRoZXJTdGF0c1N0YXR1c191bmRvKHJvd3JlcV9jdHgpOworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJ1bmtub3duIGNvbHVtbiAlZCBpbiBfZXRoZXJTdGF0c1RhYmxlX3VuZG9fY29sdW1uXG4iLAorICAgICAgICAgICAgICAgICBjb2x1bW4pOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gcmM7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfdW5kb19jb2x1bW4gKi8KKworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV91bmRvX3ZhbHVlcyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X21mZF9ldGhlclN0YXRzVGFibGVfdW5kb192YWx1ZXMiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOworCisgICAgcmMgPSBldGhlclN0YXRzVGFibGVfdW5kbyhyb3dyZXFfY3R4KTsKKyAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbm90aGluZyB3ZSBjYW4gZG8gYWJvdXQgaXQgYnV0IGxvZyBpdAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImV0aGVyU3RhdHNUYWJsZTptZmQiLCAiZXJyb3IgJWQgZnJvbSAiCisgICAgICAgICAgICAgICAgICAgICJldGhlclN0YXRzVGFibGVfdW5kb1xuIiwgcmMpKTsKKyAgICB9CisKKyAgICBmb3IgKDsgcmVxdWVzdHM7IHJlcXVlc3RzID0gcmVxdWVzdHMtPm5leHQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2V0IGNvbHVtbiBkYXRhCisgICAgICAgICAqLworICAgICAgICB0cmkgPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0cyk7CisgICAgICAgIGlmIChOVUxMID09IHRyaSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHJjID0gX2V0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtbihyb3dyZXFfY3R4LCByZXF1ZXN0cy0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJpLT5jb2xudW0pOworICAgICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBub3RoaW5nIHdlIGNhbiBkbyBhYm91dCBpdCBidXQgbG9nIGl0CisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJldGhlclN0YXRzVGFibGU6bWZkIiwgImVycm9yICVkIGZyb20gIgorICAgICAgICAgICAgICAgICAgICAgICAgImV0aGVyU3RhdHNUYWJsZV91bmRvX2NvbHVtblxuIiwgcmMpKTsKKyAgICAgICAgfQorICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVzdWx0cyAqLworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfZXRoZXJTdGF0c1RhYmxlX3VuZG9fdmFsdWVzICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIFNFVDogaXJyZXZlcnNpYmxlIGNvbW1pdAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qKgorICogQGludGVybmFsCisgKiBjb21taXQgaXJyZXZlcnNpYmxlIGFjdGlvbnMKKyAqLworaW50CitfbWZkX2V0aGVyU3RhdHNUYWJsZV9pcnJldmVyc2libGVfY29tbWl0KG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2V0aGVyU3RhdHNUYWJsZV9pcnJldmVyc2libGU6Y29tbWl0IiwgImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworICAgIC8qCisgICAgICogY2hlY2sgZm9yIGFuZCBoYW5kbGUgcm93IGNyZWF0aW9uL2RlbGV0aW9uCisgICAgICogYW5kIHVwZGF0ZSBjb2x1bW4gZXhpc3QgZmxhZ3MuLi4KKyAgICAgKi8KKyAgICBpZiAocm93cmVxX2N0eC0+cm93cmVxX2ZsYWdzICYgTUZEX1JPV19ERUxFVEVEKSB7CisgICAgICAgIGlmICghKHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmIE1GRF9ST1dfQ1JFQVRFRCkpCisgICAgICAgICAgICBDT05UQUlORVJfUkVNT1ZFKGV0aGVyU3RhdHNUYWJsZV9pZl9jdHguY29udGFpbmVyLCByb3dyZXFfY3R4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAocm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFncykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfbWZkX2lycmV2ZXJzaWJsZV9jb21taXQiLCAidXBkYXRpbmcgZXhpc3RzICglI3gpIHcvc2V0ICglI3gpID0gJSN4XG4iLCByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzLCByb3dyZXFfY3R4LT5jb2x1bW5fc2V0X2ZsYWdzLCAocm93cmVxX2N0eC0+Y29sdW1uX2V4aXN0c19mbGFncyB8IHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MpKSk7CisgICAgICAgICAgICByb3dyZXFfY3R4LT5jb2x1bW5fZXhpc3RzX2ZsYWdzIHw9CisgICAgICAgICAgICAgICAgcm93cmVxX2N0eC0+Y29sdW1uX3NldF9mbGFnczsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgPSAwOworICAgICAgICB9CisgICAgICAgIGlmIChyb3dyZXFfY3R4LT5yb3dyZXFfZmxhZ3MgJiBNRkRfUk9XX0NSRUFURUQpIHsKKyAgICAgICAgICAgIHJvd3JlcV9jdHgtPnJvd3JlcV9mbGFncyAmPSB+TUZEX1JPV19DUkVBVEVEOworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChldGhlclN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9ldGhlclN0YXRzVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBEQVRBIEFDQ0VTUworICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KK3N0YXRpYyB2b2lkICAgICBfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpOworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKnZtYWdpYykKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9jYWNoZV9sb2FkIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJpbnZhbGlkIGNhY2hlIGZvciBldGhlclN0YXRzVGFibGVfY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiogc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGZvciBhbiBpbnZhbGlkIG9yIGV4cGlyZWQgY2FjaGUgKi8KKyAgICBuZXRzbm1wX2Fzc2VydCgoMCA9PSBjYWNoZS0+dmFsaWQpIHx8ICgxID09IGNhY2hlLT5leHBpcmVkKSk7CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgcmV0dXJuIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfbG9hZCgobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFnaWMpOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfY2FjaGVfbG9hZCAqLworCisvKioKKyAqIEBpbnRlcm5hbAorICovCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqIGNhY2hlLCB2b2lkICptYWdpYykKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfY2FjaGVfZnJlZSIsICJjYWxsZWRcbiIpKTsKKworICAgIGlmICgoTlVMTCA9PSBjYWNoZSkgfHwgKE5VTEwgPT0gY2FjaGUtPm1hZ2ljKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBjYWNoZSBpbiBldGhlclN0YXRzVGFibGVfY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjb250YWluZXIgPSAobmV0c25tcF9jb250YWluZXIgKikgY2FjaGUtPm1hZ2ljOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2l0ZW1fZnJlZShldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpjb250ZXh0KQoreworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpldGhlclN0YXRzVGFibGU6X2NvbnRhaW5lcl9pdGVtX2ZyZWUiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIGlmIChOVUxMID09IHJvd3JlcV9jdHgpCisgICAgICAgIHJldHVybjsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yZWxlYXNlX3Jvd3JlcV9jdHgocm93cmVxX2N0eCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jb250YWluZXJfaXRlbV9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyB2b2lkCitfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfY29udGFpbmVyX2ZyZWUiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImludmFsaWQgY29udGFpbmVyIGluIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNhbGwgdXNlciBjb2RlCisgICAgICovCisgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisKKyAgICAvKgorICAgICAqIGZyZWUgYWxsIGl0ZW1zLiBpbmVmZmljaWVudCwgYnV0IGVhc3kuCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICopIF9jb250YWluZXJfaXRlbV9mcmVlLAorICAgICAgICAgICAgICAgICAgICBOVUxMKTsKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX2NvbnRhaW5lcl9mcmVlICovCisKKy8qKgorICogQGludGVybmFsCisgKiBpbml0aWFsaXplIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfaW5pdChldGhlclN0YXRzVGFibGVfaW50ZXJmYWNlX2N0eCAqIGlmX2N0eCkKK3sKKyAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6ZXRoZXJTdGF0c1RhYmxlOl9ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQiLAorICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKKworICAgIC8qCisgICAgICogY2FjaGUgaW5pdAorICAgICAqLworICAgIGlmX2N0eC0+Y2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgzMCwgICAgLyogdGltZW91dCBpbiBzZWNvbmRzICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jYWNoZV9sb2FkLCBfY2FjaGVfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX29pZF9zaXplKTsKKworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciBldGhlclN0YXRzVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWZfY3R4LT5jYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQoJmlmX2N0eC0+Y29udGFpbmVyLCBpZl9jdHgtPmNhY2hlKTsKKyAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgaWZfY3R4LT5jb250YWluZXIgPQorICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZCgiZXRoZXJTdGF0c1RhYmxlOnRhYmxlX2NvbnRhaW5lciIpOworICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBjb250YWluZXIgaW4gIgorICAgICAgICAgICAgICAgICAiZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChOVUxMICE9IGlmX2N0eC0+Y2FjaGUpCisgICAgICAgIGlmX2N0eC0+Y2FjaGUtPm1hZ2ljID0gKHZvaWQgKikgaWZfY3R4LT5jb250YWluZXI7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9ldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2luaXQgKi8KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqIHNodXRkb3duIHRoZSBjb250YWluZXIgd2l0aCBmdW5jdGlvbnMgb3Igd3JhcHBlcnMKKyAqLwordm9pZAorX2V0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZV9jdHggKiBpZl9jdHgpCit7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOmV0aGVyU3RhdHNUYWJsZTpfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biIsICJjYWxsZWRcbiIpKTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9jb250YWluZXJfc2h1dGRvd24oaWZfY3R4LT5jb250YWluZXIpOworCisgICAgX2NvbnRhaW5lcl9mcmVlKGlmX2N0eC0+Y29udGFpbmVyKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLworCisKK2V0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKK2V0aGVyU3RhdHNUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgoZXRoZXJTdGF0c1RhYmxlX21pYl9pbmRleCAqIG1pYl9pZHgpCit7CisgICAgZXRoZXJTdGF0c1RhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHg7CisgICAgb2lkICAgICAgICAgICAgIG9pZF90bXBbTUFYX09JRF9MRU5dOworICAgIG5ldHNubXBfaW5kZXggICBvaWRfaWR4OworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIC8qCisgICAgICogc2V0IHVwIHN0b3JhZ2UgZm9yIE9JRAorICAgICAqLworICAgIG9pZF9pZHgub2lkcyA9IG9pZF90bXA7CisgICAgb2lkX2lkeC5sZW4gPSBzaXplb2Yob2lkX3RtcCkgLyBzaXplb2Yob2lkKTsKKworICAgIC8qCisgICAgICogY29udmVydAorICAgICAqLworICAgIHJjID0gZXRoZXJTdGF0c1RhYmxlX2luZGV4X3RvX29pZCgmb2lkX2lkeCwgbWliX2lkeCk7CisgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvd3JlcV9jdHggPQorICAgICAgICBDT05UQUlORVJfRklORChldGhlclN0YXRzVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOworCisgICAgcmV0dXJuIHJvd3JlcV9jdHg7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX2ludGVyZmFjZS5oIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTE0NTdiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvcm1vbi1taWIvZXRoZXJTdGF0c1RhYmxlL2V0aGVyU3RhdHNUYWJsZV9pbnRlcmZhY2UuaApAQCAtMCwwICsxLDk4IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgIHZlcnNpb24gOiAxNTg5OSAkIG9mICQKKyAqCisgKiAkSWQ6JAorICovCisvKiogQGluZ3JvdXAgaW50ZXJmYWNlOiBSb3V0aW5lcyB0byBpbnRlcmZhY2UgdG8gTmV0LVNOTVAKKyAqCisgKiBcd2FybmluZyBUaGlzIGNvZGUgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCwgY2FsbGVkIGRpcmVjdGx5LAorICogICAgICAgICAgb3IgdXNlZCB0byBpbnRlcnByZXQgZnVuY3Rpb25hbGl0eS4gSXQgaXMgc3ViamVjdCB0bworICogICAgICAgICAgY2hhbmdlIGF0IGFueSB0aW1lLgorICogCisgKiBAeworICovCisvKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFIE5PVEUgTk9URSBOT1RFICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhJUyBGSUxFIERPRVMgTk9UIENPTlRBSU4gQU5ZIFVTRVIgRURJVEFCTEUgQ09ERS4gICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgICAgVEhFIEdFTkVSQVRFRCBDT0RFIElTIElOVEVSTkFMIElNUExFTUVOVEFUSU9OLCBBTkQgICAgICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKiogICAgSVMgU1VCSkVDVCBUTyBDSEFOR0UgV0lUSE9VVCBXQVJOSU5HIElOIEZVVFVSRSBSRUxFQVNFUy4gICAqKioKKyAqICoqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKgorICogKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKi8KKyNpZm5kZWYgRVRIRVJTVEFUU1RBQkxFX0lOVEVSRkFDRV9ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworI2luY2x1ZGUgImV0aGVyU3RhdHNUYWJsZS5oIgorCisKKyAgICAvKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqIFRhYmxlIGRlY2xhcmF0aW9ucworICAgICAqLworCisgICAgLyoKKyAgICAgKiBQVUJMSUMgaW50ZXJmYWNlIGluaXRpYWxpemF0aW9uIHJvdXRpbmUgCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9ldGhlclN0YXRzVGFibGVfaW5pdGlhbGl6ZV9pbnRlcmZhY2UoZXRoZXJTdGF0c1RhYmxlX3JlZ2lzdHJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdXNlcl9jdHgsIHVfbG9uZyBmbGFncyk7CisgICAgdm9pZCAgICAgICAgICAgCisgICAgICAgIF9ldGhlclN0YXRzVGFibGVfc2h1dGRvd25faW50ZXJmYWNlKGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX2N0eCk7CisKKyAgICBldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uICpldGhlclN0YXRzVGFibGVfcmVnaXN0cmF0aW9uX2dldCh2b2lkKTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24KKyAgICAgICAgKmV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb25fc2V0KGV0aGVyU3RhdHNUYWJsZV9yZWdpc3RyYXRpb24gKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3cmVnKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICpldGhlclN0YXRzVGFibGVfY29udGFpbmVyX2dldCh2b2lkKTsKKyAgICBpbnQgICAgICAgICAgICAgZXRoZXJTdGF0c1RhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpOworCisgICAgdV9pbnQgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9nZXQodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9kaXJ0eV9zZXQodV9pbnQgc3RhdHVzKTsKKworICAgIGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICpldGhlclN0YXRzVGFibGVfYWxsb2NhdGVfcm93cmVxX2N0eCh2b2lkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopOworICAgIHZvaWQgICAgICAgICAgIAorICAgICAgICBldGhlclN0YXRzVGFibGVfcmVsZWFzZV9yb3dyZXFfY3R4KGV0aGVyU3RhdHNUYWJsZV9yb3dyZXFfY3R4ICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKKworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaW5kZXhfdG9fb2lkKG5ldHNubXBfaW5kZXggKiBvaWRfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV9taWJfaW5kZXgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworICAgIGludCAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfaW5kZXhfZnJvbV9vaWQobmV0c25tcF9pbmRleCAqIG9pZF9pZHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldGhlclN0YXRzVGFibGVfbWliX2luZGV4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOworCisgICAgLyoKKyAgICAgKiBhY2Nlc3MgdG8gY2VydGFpbiBpbnRlcm5hbHMuIHVzZSB3aXRoIGNhdXRpb24hCisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgIGV0aGVyU3RhdHNUYWJsZV92YWxpZF9jb2x1bW5zX3NldChuZXRzbm1wX2NvbHVtbl9pbmZvCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmMpOworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9JTlRFUkZBQ0VfSCAqLworLyoqIEB9ICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX29pZHMuaCBiL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9ldGhlclN0YXRzVGFibGVfb2lkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwZjFkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvZXRoZXJTdGF0c1RhYmxlX29pZHMuaApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgOiBnZW5lcmljLXRhYmxlLW9pZHMubTJjIDEyODU1IDIwMDUtMDktMjcgMTU6NTY6MDhaIHJzdG9yeSAkCisgKgorICogJElkOiQKKyAqLworI2lmbmRlZiBFVEhFUlNUQVRTVEFCTEVfT0lEU19ICisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9PSURTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisKKyAgICAvKgorICAgICAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIGV0aGVyU3RhdHNUYWJsZSAKKyAgICAgKi8KKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX09JRCAgICAgICAgICAgICAgMSwzLDYsMSwyLDEsMTYsMSwxCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNJTkRFWCAgICAgICAgIDEKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNJTkRFWF9GTEFHICAgICgweDEgPDwgMCkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0UgICAgICAgICAyCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTREFUQVNPVVJDRV9GTEFHICAgICgweDEgPDwgMSkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0RST1BFVkVOVFMgICAgICAgICAzCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTRFJPUEVWRU5UU19GTEFHICAgICgweDEgPDwgMikKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU09DVEVUUyAgICAgICAgIDQKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNPQ1RFVFNfRkxBRyAgICAoMHgxIDw8IDMpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTICAgICAgICAgNQorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFNfRkxBRyAgICAoMHgxIDw8IDQpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNCUk9BRENBU1RQS1RTICAgICAgICAgNgorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU0JST0FEQ0FTVFBLVFNfRkxBRyAgICAoMHgxIDw8IDUpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTICAgICAgICAgNworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU01VTFRJQ0FTVFBLVFNfRkxBRyAgICAoMHgxIDw8IDYpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNDUkNBTElHTkVSUk9SUyAgICAgICAgIDgKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNDUkNBTElHTkVSUk9SU19GTEFHICAgICgweDEgPDwgNykKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1VOREVSU0laRVBLVFMgICAgICAgICA5CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTVU5ERVJTSVpFUEtUU19GTEFHICAgICgweDEgPDwgOCkKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU09WRVJTSVpFUEtUUyAgICAgICAgIDEwCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTX0ZMQUcgICAgKDB4MSA8PCA5KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTRlJBR01FTlRTICAgICAgICAgMTEKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNGUkFHTUVOVFNfRkxBRyAgICAoMHgxIDw8IDEwKQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSUyAgICAgICAgIDEyCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTSkFCQkVSU19GTEFHICAgICgweDEgPDwgMTEpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNDT0xMSVNJT05TICAgICAgICAgMTMKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNDT0xMSVNJT05TX0ZMQUcgICAgKDB4MSA8PCAxMikKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NE9DVEVUUyAgICAgICAgIDE0CisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTUEtUUzY0T0NURVRTX0ZMQUcgICAgKDB4MSA8PCAxMykKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVRTICAgICAgICAgMTUKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNjVUTzEyN09DVEVUU19GTEFHICAgICgweDEgPDwgMTQpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTI4VE8yNTVPQ1RFVFMgICAgICAgICAxNgorI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVUU19GTEFHICAgICgweDEgPDwgMTUpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMjU2VE81MTFPQ1RFVFMgICAgICAgICAxNworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMyNTZUTzUxMU9DVEVUU19GTEFHICAgICgweDEgPDwgMTYpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNTEyVE8xMDIzT0NURVRTICAgICAgICAgMTgKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTNTEyVE8xMDIzT0NURVRTX0ZMQUcgICAgKDB4MSA8PCAxNykKKworI2RlZmluZSBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMDI0VE8xNTE4T0NURVRTICAgICAgICAgMTkKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVUU19GTEFHICAgICgweDEgPDwgMTgpCisKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNPV05FUiAgICAgICAgIDIwCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRyAgICAoMHgxIDw8IDE5KQorCisjZGVmaW5lIENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTICAgICAgICAgMjEKKyNkZWZpbmUgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRyAgICAoMHgxIDw8IDIwKQorCisKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX01JTl9DT0wgICBDT0xVTU5fRVRIRVJTVEFUU0lOREVYCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9NQVhfQ09MICAgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVMKKworCisgICAgLyoKKyAgICAgKiBUT0RPOjQwNTpyOiBSZXZpZXcgRVRIRVJTVEFUU1RBQkxFX1NFVFRBQkxFX0NPTFMgbWFjcm8uCisgICAgICogT1IgdG9nZXRoZXIgYWxsIHRoZSB3cml0YWJsZSBjb2xzLgorICAgICAqLworI2RlZmluZSBFVEhFUlNUQVRTVEFCTEVfU0VUVEFCTEVfQ09MUyAoQ09MVU1OX0VUSEVSU1RBVFNJTkRFWF9GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNEQVRBU09VUkNFX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0RST1BFVkVOVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTT0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTQlJPQURDQVNUUEtUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNNVUxUSUNBU1RQS1RTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0NSQ0FMSUdORVJST1JTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1VOREVSU0laRVBLVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTT1ZFUlNJWkVQS1RTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0ZSQUdNRU5UU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNKQUJCRVJTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU0NPTExJU0lPTlNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUUzY0T0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFM2NVRPMTI3T0NURVRTX0ZMQUcgfCBDT0xVTU5fRVRIRVJTVEFUU1BLVFMxMjhUTzI1NU9DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMjU2VE81MTFPQ1RFVFNfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTUEtUUzUxMlRPMTAyM09DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNQS1RTMTAyNFRPMTUxOE9DVEVUU19GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNPV05FUl9GTEFHIHwgQ09MVU1OX0VUSEVSU1RBVFNTVEFUVVNfRkxBRykKKyAgICAvKgorICAgICAqIFRPRE86NDA1OnI6IFJldmlldyBFVEhFUlNUQVRTVEFCTEVfUkVRVUlSRURfQ09MUyBtYWNyby4KKyAgICAgKiBPUiB0b2dldGhlciBhbGwgdGhlIHJlcXVpcmVkIHJvd3MgZm9yIHJvdyBjcmVhdGlvbi4KKyAgICAgKiBkZWZhdWx0IGlzIHdyaXRhYmxlIGNvbHMgdy9vdXQgZGVmYXVsdHMuCisgICAgICovCisjZGVmaW5lIEVUSEVSU1RBVFNUQUJMRV9SRVFVSVJFRF9DT0xTIChDT0xVTU5fRVRIRVJTVEFUU0RBVEFTT1VSQ0VfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTT1dORVJfRkxBRyB8IENPTFVNTl9FVEhFUlNUQVRTU1RBVFVTX0ZMQUcpCisKKyNkZWZpbmUgRVRIRVJTVEFUU1RBQkxFX1ZBTElEX0NPTCAgICBDT0xVTU5fRVRIRVJTVEFUU0pBQkJFUlNfRkxBRyAKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVUSEVSU1RBVFNUQUJMRV9PSURTX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Jtb24tbWliL2V0aGVyU3RhdHNUYWJsZS9pb2N0bF9pbXBfY29tbW9uLmggYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MTk4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9ybW9uLW1pYi9ldGhlclN0YXRzVGFibGUvaW9jdGxfaW1wX2NvbW1vbi5oCkBAIC0wLDAgKzEsMzUgQEAKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGlmYWRkcnMuaD4KKworLyogdXNlIGtlcm5lbCdzIGV0aHRvb2wuaCAgKi8KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cit0eXBlZGVmIF9fdTY0IHU2NDsKK3R5cGVkZWYgX191MzIgdTMyOwordHlwZWRlZiBfX3UxNiB1MTY7Cit0eXBlZGVmIF9fdTggdTg7CisjaW5jbHVkZSA8bGludXgvZXRodG9vbC5oPgorCisvKiBzdHJ1Y3R1cmUgZm9yIHN0b3JpbmcgdGhlIGludGVyZmFjZSBuYW1lcyBpbiB0aGUgc3lzdGVtICovCisKK3N0cnVjdCBpZm5hbWUgeworICAgIHN0cnVjdCBpZm5hbWUgKmlmbl9uZXh0OworICAgIGNoYXIgbmFtZSBbSUZfTkFNRVNJWkVdOworfTsKKworc3RydWN0IGlmbmFtZSAqZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2dldCAoc3RydWN0IGlmbmFtZSAqLCBpbnQgKik7CitpbnQgZXRoZXJzdGF0c19pbnRlcmZhY2VfbmFtZV9saXN0X2ZyZWUgKHN0cnVjdCBpZm5hbWUgKmxpc3RfaGVhZCk7CitpbnQgZXRoZXJzdGF0c19pbnRlcmZhY2VfaW9jdGxfaWZpbmRleF9nZXQgKGludCBmZCwgY29uc3QgY2hhciAqbmFtZSk7CitpbnQgX2V0aGVyU3RhdHNfaW9jdGxfZ2V0KGludCBmZCwgaW50IHdoaWNoLCBzdHJ1Y3QgaWZyZXEgKmlmcnEsIGNvbnN0IGNoYXIqIG5hbWUpOworaW50IGludGVyZmFjZV9pb2N0bF9ldGhlcnN0YXRzX2dldChldGhlclN0YXRzVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCwgaW50IGZkLCBjb25zdCBjaGFyKiBuYW1lKTsKKworLyogZm9yIG1haW50YWluYWJpbGl0eSAqLworCisjZGVmaW5lIEJST0FEQ09NX1JFQ0VJVkVfSkFCQkVSUyAgICAgICAgICAgICAgICAicnhfamFiYmVycyIKKworI2RlZmluZSBFVEhFUlNUQVRTSkFCQkVSUyh4KSAgICAgICAgICAgICAgICAgICAgc3Ryc3RyKHgsIEJST0FEQ09NX1JFQ0VJVkVfSkFCQkVSUykKKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmMKaW5kZXggNDM1ZjU2MC4uZDYwMjNlNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5jCkBAIC0xMyw2ICsxMyw3IEBACiAgKiBjb250ZW50IG9mIHRoZSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSAKICAqLwogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTI3LDggKzI4LDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfY29udGFpbmVyX2NsZWFyCi0gICAgICAgIChzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTQyLDcgKzQyLDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBBc3NvY0xvY2FsQWRkclRhYmxlIiwKQEAgLTEwMyw2ICsxMDIsNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMjEsNiArMTIxLDkgQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKIApAQCAtMTI4LDYgKzEzMSwxNyBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cEFzc29jTG9jYWxBZGRyVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcgorICAgICAgICAoc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfY29udGFpbmVyKTsKK30KKwogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZSB0YWJsZSAqLwogaW50CiBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC0yNjAsOCArMjc0LDcgQEAKIHZvaWQKIHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2VudHJ5X2ZyZWUoc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaAppbmRleCBjMmNjMDU1Li5lZmYwODBmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBBc3NvY0xvY2FsQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cEFzc29jTG9jYWxBZGRyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cEFzc29jTG9jYWxBZGRyVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jUmVtQWRkclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYwppbmRleCA2MDEwZDg0Li4zOGNhOGEzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuYwpAQCAtMTMsNiArMTMsNyBAQAogICogY29udGVudCBvZiB0aGUgc2N0cEFzc29jUmVtQWRkclRhYmxlIAogICovCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBBc3NvY1JlbUFkZHJUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwQXNzb2NSZW1BZGRyVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNyw3ICsyOCw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwQXNzb2NSZW1BZGRyVGFibGUodm9pZCkKIHsKLSAgICBzY3RwQXNzb2NSZW1BZGRyVGFibGVfY29udGFpbmVyX2NsZWFyKHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9jb250YWluZXIpOworICAgIHNodXRkb3duX3RhYmxlX3NjdHBBc3NvY1JlbUFkZHJUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cEFzc29jUmVtQWRkclRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtNDEsNyArNDIsNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cEFzc29jUmVtQWRkclRhYmxlIiwKQEAgLTEwMSw2ICsxMDEsNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwQXNzb2NSZW1BZGRyVGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTE5LDYgKzEyMCw4IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKIAogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CkBAIC0xMjcsNiArMTMwLDE2IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NSZW1BZGRyVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9jb250YWluZXJfY2xlYXIoc2N0cEFzc29jUmVtQWRkclRhYmxlX2NvbnRhaW5lcik7Cit9CisKIAogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwQXNzb2NSZW1BZGRyVGFibGUgdGFibGUgKi8KIGludApAQCAtMzA2LDggKzMxOSw3IEBACiB2b2lkCiBzY3RwQXNzb2NSZW1BZGRyVGFibGVfZW50cnlfZnJlZShzY3RwQXNzb2NSZW1BZGRyVGFibGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NSZW1BZGRyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCmluZGV4IGNjNjVjN2UuLjUwNjg1NjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1JlbUFkZHJUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwQXNzb2NSZW1BZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc2N0cEFzc29jUmVtQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cEFzc29jUmVtQWRkclRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBBc3NvY1JlbUFkZHJUYWJsZSh2b2lkKTsKIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmMKaW5kZXggZTcyMGEzOC4uOTkxOTA3NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5jCkBAIC0xNiw2ICsxNiw3IEBACiAgKiBjb250ZW50IG9mIHRoZSBzY3RwQXNzb2NUYWJsZSAKICAqLwogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwQXNzb2NUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwQXNzb2NUYWJsZSBtb2R1bGUgKi8KIHZvaWQKQEAgLTMwLDcgKzMxLDcgQEAKIHZvaWQKIHNodXRkb3duX3NjdHBBc3NvY1RhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cEFzc29jVGFibGVfY29udGFpbmVyX2NsZWFyKHNjdHBBc3NvY1RhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cEFzc29jVGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBBc3NvY1RhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtNDMsNyArNDQsNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAgICAgbmV0c25tcF9jYWNoZSAgKmNhY2hlID0gTlVMTDsKIAogICAgIHJlZyA9CkBAIC0xMjAsNiArMTIwLDggQEAKICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIAorICAgIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKGhhbmRsZXIpOworCiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIGluamVjdGluZyBjYWNoZSBoYW5kbGVyIGZvciBzY3RwQXNzb2NUYWJsZVxuIik7CkBAIC0xMzMsNiArMTM1LDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cEFzc29jVGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTUxLDYgKzE1NCwxMiBAQAogICAgIGlmIChoYW5kbGVyKQogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKIAorICAgIGlmIChjYWNoZSkKKyAgICAgICAgbmV0c25tcF9jYWNoZV9mcmVlKGNhY2hlKTsKKworICAgIGlmICh0YWJsZV9pbmZvKQorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisKICAgICBpZiAoY29udGFpbmVyKQogICAgICAgICBDT05UQUlORVJfRlJFRShjb250YWluZXIpOwogCkBAIC0xNTgsNiArMTY3LDE3IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwQXNzb2NUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisJbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCXRhYmxlX2luZm8gPSBOVUxMOworICAgIH0KKyAgICBpZiAoc2N0cEFzc29jVGFibGVfY29udGFpbmVyKQorCXNjdHBBc3NvY1RhYmxlX2NvbnRhaW5lcl9jbGVhcihzY3RwQXNzb2NUYWJsZV9jb250YWluZXIpOworfQorCiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cEFzc29jVGFibGUgdGFibGUgKi8KIGludApAQCAtNDg3LDggKzUwNyw3IEBACiB2b2lkCiBzY3RwQXNzb2NUYWJsZV9lbnRyeV9mcmVlKHNjdHBBc3NvY1RhYmxlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBBc3NvY1RhYmxlLmgKaW5kZXggYTZhOWYzYy4uYzYyNTdiMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cEFzc29jVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwQXNzb2NUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwQXNzb2NUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwQXNzb2NUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBBc3NvY1RhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBBc3NvY1RhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cEFzc29jVGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMKaW5kZXggYjc5OGI3ZS4uMWE2ZmQzNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaCIKIAogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjQsOCArMjUsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2NvbnRhaW5lcl9jbGVhcgotICAgICAgICAoc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC0zOSw3ICszOSw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwTG9va3VwTG9jYWxQb3J0VGFibGUiLApAQCAtOTgsNiArOTcsNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTE2LDYgKzExNiw4IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKIAogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CkBAIC0xMjQsNiArMTI2LDE2IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworCW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2NvbnRhaW5lcl9jbGVhcgorICAgICAgICAoc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2NvbnRhaW5lcik7Cit9CiAKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlIHRhYmxlICovCiBpbnQKQEAgLTI0Niw4ICsyNTgsNyBAQAogdm9pZAogc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2VudHJ5X2ZyZWUoc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlX2VudHJ5ICogZW50cnkpCiB7Ci0gICAgaWYgKGVudHJ5ICE9IE5VTEwpCi0gICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKIH0KIAogbmV0c25tcF9jb250YWluZXIgKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaAppbmRleCA5ZGE2Y2Q5Li4yMjZjMTY4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cExvb2t1cExvY2FsUG9ydFRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBpbml0aWFsaXplX3RhYmxlX3NjdHBMb29rdXBMb2NhbFBvcnRUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwTG9jYWxQb3J0VGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwTG9va3VwTG9jYWxQb3J0VGFibGVfaGFuZGxlcjsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5jCmluZGV4IGVkMWI4NDkuLmFlMmVjOTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgInNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgiCiAKIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfY29udGFpbmVyOworc3RhdGljIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKIC8qKiBJbml0aWFsaXplcyB0aGUgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNCw4ICsyNSw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSh2b2lkKQogewotICAgIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2NvbnRhaW5lcl9jbGVhcgotICAgICAgICAoc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCkBAIC0zOSw3ICszOSw2IEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnID0gTlVMTDsKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyID0gTlVMTDsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gTlVMTDsKLSAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKIAogICAgIHJlZyA9CiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSIsCkBAIC0xMDAsNiArOTksNyBAQAogICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICJlcnJvciByZWdpc3RlcmluZyB0YWJsZSBoYW5kbGVyIGZvciBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMTgsNiArMTE4LDkgQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOworCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKIApAQCAtMTI1LDYgKzEyOCwxNyBAQAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnKTsKIH0KIAordm9pZAorc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2NvbnRhaW5lcl9jbGVhcgorICAgICAgICAoc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfY29udGFpbmVyKTsKK30KKwogLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZSB0YWJsZSAqLwogaW50CiBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC0yNDksOCArMjYzLDcgQEAKIHNjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlX2VudHJ5X2ZyZWUoc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGVfZW50cnkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUuaAppbmRleCA0ODRjYjU4Li41YmQzYzQ4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBMb29rdXBSZW1Ib3N0TmFtZVRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbUhvc3ROYW1lVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwTG9va3VwUmVtSG9zdE5hbWVUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYwppbmRleCBmYjdmZjRiLi4zNjhkZDUxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgInNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oIgogCiBzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKnNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNCw4ICsyNSw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUodm9pZCkKIHsKLSAgICBzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfY29udGFpbmVyX2NsZWFyCi0gICAgICAgIChzY3RwTG9va3VwUmVtSVBBZGRyVGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUoKTsKIH0KIAogLyoqIEluaXRpYWxpemUgdGhlIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTM5LDcgKzM5LDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSIsCkBAIC05OSw2ICs5OCw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMTIsNiArMTEyLDggQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOwogCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKQEAgLTEyMCw2ICsxMjIsMTcgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSh2b2lkKQoreworICAgIGlmICh0YWJsZV9pbmZvKSB7CisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKwl0YWJsZV9pbmZvID0gTlVMTDsKKyAgICB9CisgICAgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2NvbnRhaW5lcl9jbGVhcgorICAgICAgICAoc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2NvbnRhaW5lcik7Cit9CisKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlIHRhYmxlICovCiBpbnQKIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCkBAIC0yNTAsOCArMjYzLDcgQEAKIHZvaWQKIHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9lbnRyeV9mcmVlKHNjdHBMb29rdXBSZW1JUEFkZHJUYWJsZV9lbnRyeSAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgKaW5kZXggZTMxNWQ2ZC4uYjc0NTE0YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgKQEAgLTEzLDYgKzEzLDcgQEAKIHZvaWQgICAgICAgICAgICBpbml0X3NjdHBMb29rdXBSZW1JUEFkZHJUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwTG9va3VwUmVtSVBBZGRyVGFibGUodm9pZCk7Cit2b2lkICAgICAgICAgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cExvb2t1cFJlbUlQQWRkclRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmMKaW5kZXggYjA2MjA1Yy4uYzhhODg3NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuYwpAQCAtMTAsNiArMTAsNyBAQAogI2luY2x1ZGUgInNjdHBMb29rdXBSZW1Qb3J0VGFibGUuaCIKIAogc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2NvbnRhaW5lcjsKK3N0YXRpYyBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIHNjdHBMb29rdXBSZW1Qb3J0VGFibGUgbW9kdWxlICovCiB2b2lkCkBAIC0yNCw4ICsyNSw3IEBACiB2b2lkCiBzaHV0ZG93bl9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKHZvaWQpCiB7Ci0gICAgc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9jb250YWluZXJfY2xlYXIKLSAgICAgICAgKHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfY29udGFpbmVyKTsKKyAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKCk7CiB9CiAKIC8qKiBJbml0aWFsaXplIHRoZSBzY3RwTG9va3VwUmVtUG9ydFRhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cyBhbmQgaG93IGl0J3Mgc3RydWN0dXJlZCAqLwpAQCAtMzksNyArMzksNiBAQAogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZyA9IE5VTEw7CiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciA9IE5VTEw7CiAgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciA9IE5VTEw7Ci0gICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyA9IE5VTEw7CiAKICAgICByZWcgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic2N0cExvb2t1cFJlbVBvcnRUYWJsZSIsCkBAIC05OCw2ICs5Nyw3IEBACiAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKHJlZywgdGFibGVfaW5mbykpIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yIHNjdHBMb29rdXBSZW1Qb3J0VGFibGVcbiIpOworICAgICAgICByZWcgPSBOVUxMOyAvKiBpdCB3YXMgZnJlZWQgaW5zaWRlIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUgKi8KICAgICAgICAgZ290byBiYWlsOwogICAgIH0KIApAQCAtMTExLDYgKzExMSw4IEBACiAgICAgaWYgKGhhbmRsZXIpCiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9mcmVlKGhhbmRsZXIpOwogCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKIAogICAgIGlmIChjb250YWluZXIpCiAgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CkBAIC0xMTksNiArMTIxLDE3IEBACiAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWcpOwogfQogCit2b2lkCitzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKHZvaWQpCit7CisgICAgaWYgKHRhYmxlX2luZm8pIHsKKwluZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfY29udGFpbmVyX2NsZWFyCisgICAgICAgIChzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2NvbnRhaW5lcik7Cit9CisKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cExvb2t1cFJlbVBvcnRUYWJsZSB0YWJsZSAqLwogaW50CiBzY3RwTG9va3VwUmVtUG9ydFRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTI0MCw4ICsyNTMsNyBAQAogdm9pZAogc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9lbnRyeV9mcmVlKHNjdHBMb29rdXBSZW1Qb3J0VGFibGVfZW50cnkgKiBlbnRyeSkKIHsKLSAgICBpZiAoZW50cnkgIT0gTlVMTCkKLSAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICBTTk1QX0ZSRUUoZW50cnkpOwogfQogCiBuZXRzbm1wX2NvbnRhaW5lciAqCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmggYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUG9ydFRhYmxlLmgKaW5kZXggOTZkNDljZS4uYjJhYzgxMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVBvcnRUYWJsZS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1Qb3J0VGFibGUuaApAQCAtMTMsNiArMTMsNyBAQAogdm9pZCAgICAgICAgICAgIGluaXRfc2N0cExvb2t1cFJlbVBvcnRUYWJsZSh2b2lkKTsKIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIGluaXRpYWxpemVfdGFibGVfc2N0cExvb2t1cFJlbVBvcnRUYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBzaHV0ZG93bl90YWJsZV9zY3RwTG9va3VwUmVtUG9ydFRhYmxlKHZvaWQpOwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgc2N0cExvb2t1cFJlbVBvcnRUYWJsZV9oYW5kbGVyOwogCiAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5jCmluZGV4IDQ0MmUyMDcuLmQ5OTY2ZmMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlICJzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgiCiAKIHN0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9jb250YWluZXI7CitzdGF0aWMgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKIAogLyoqIEluaXRpYWxpemVzIHRoZSBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlIG1vZHVsZSAqLwogdm9pZApAQCAtMjQsOCArMjUsNyBAQAogdm9pZAogc2h1dGRvd25fc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSh2b2lkKQogewotICAgIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfY29udGFpbmVyX2NsZWFyCi0gICAgICAgIChzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2NvbnRhaW5lcik7CisgICAgc2h1dGRvd25fdGFibGVfc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSgpOwogfQogCiAvKiogSW5pdGlhbGl6ZSB0aGUgc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSB0YWJsZSBieSBkZWZpbmluZyBpdHMgY29udGVudHMgYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQgKi8KQEAgLTM5LDcgKzM5LDYgQEAKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcgPSBOVUxMOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIgPSBOVUxMOwogICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIgPSBOVUxMOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8gPSBOVUxMOwogCiAgICAgcmVnID0KICAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUiLApAQCAtMTAwLDYgKzk5LDcgQEAKICAgICBpZiAoU05NUEVSUl9TVUNDRVNTICE9IG5ldHNubXBfcmVnaXN0ZXJfdGFibGUocmVnLCB0YWJsZV9pbmZvKSkgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgaGFuZGxlciBmb3Igc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZVxuIik7CisgICAgICAgIHJlZyA9IE5VTEw7IC8qIGl0IHdhcyBmcmVlZCBpbnNpZGUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAqLwogICAgICAgICBnb3RvIGJhaWw7CiAgICAgfQogCkBAIC0xMTMsNiArMTEzLDggQEAKICAgICBpZiAoaGFuZGxlcikKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX2ZyZWUoaGFuZGxlcik7CiAKKyAgICBpZiAodGFibGVfaW5mbykKKyAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19mcmVlKHRhYmxlX2luZm8pOwogCiAgICAgaWYgKGNvbnRhaW5lcikKICAgICAgICAgQ09OVEFJTkVSX0ZSRUUoY29udGFpbmVyKTsKQEAgLTEyMSw2ICsxMjMsMTcgQEAKICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKK3ZvaWQKK3NodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUodm9pZCkKK3sKKyAgICBpZiAodGFibGVfaW5mbykgeworICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUodGFibGVfaW5mbyk7CisJdGFibGVfaW5mbyA9IE5VTEw7CisgICAgfQorICAgIHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfY29udGFpbmVyX2NsZWFyCisgICAgICAgIChzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2NvbnRhaW5lcik7Cit9CisKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZSB0YWJsZSAqLwogaW50CiBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKQEAgLTI1NSw4ICsyNjgsNyBAQAogc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZV9lbnRyeV9mcmVlKHNjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGVfZW50cnkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGVudHJ5KQogewotICAgIGlmIChlbnRyeSAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUoZW50cnkpOworICAgIFNOTVBfRlJFRShlbnRyeSk7CiB9CiAKIG5ldHNubXBfY29udGFpbmVyICoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUuaAppbmRleCBhYWE1YTBiLi5mM2JlY2RjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cExvb2t1cFJlbVByaW1JUEFkZHJUYWJsZS5oCkBAIC0xMyw2ICsxMyw3IEBACiB2b2lkICAgICAgICAgICAgaW5pdF9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKHZvaWQpOwogdm9pZCAgICAgICAgICAgIHNodXRkb3duX3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUodm9pZCk7CiB2b2lkICAgICAgICAgICAgaW5pdGlhbGl6ZV90YWJsZV9zY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlKHZvaWQpOwordm9pZCAgICAgICAgICAgIHNodXRkb3duX3RhYmxlX3NjdHBMb29rdXBSZW1QcmltSVBBZGRyVGFibGUodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlX2hhbmRsZXI7CiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuYwppbmRleCAwMzZmNDBjLi44MjEwNzlhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmMKQEAgLTE4LDYgKzE4LDcgQEAKIHsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvX3N0YXRzOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm9fcGFyYW1zOworICAgIGludCByYzsKIAogICAgIERFQlVHTVNHVEwoKCJzY3RwOnNjYWxhcnM6aW5pdCIsICJJbml0aWFsaXppbmdcbiIpKTsKIApAQCAtMjcsOCArMjgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2N0cF9zdGF0c19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc2N0cF9zdGF0c19vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7Ci0gICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAocmVnaW5mb19zdGF0cywgU0NUUF9DVVJSRVNUQUIsCisgICAgaWYgKCFyZWdpbmZvX3N0YXRzKQorICAgICAgICByZXR1cm47CisKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm9fc3RhdHMsIFNDVFBfQ1VSUkVTVEFCLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDVFBfRElTQ09OVElOVUlUWVRJTUUpOworICAgIGlmIChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybjsKKwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mb19zdGF0cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ1RQX1NUQVRTX0NBQ0hFX1RJTUVPVVQsCkBAIC00Myw4ICs1MCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzY3RwX3BhcmFtc19vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc2N0cF9wYXJhbXNfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOwotICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm9fcGFyYW1zLCBTQ1RQX1JUT0FMR09SSVRITSwKKyAgICBpZiAoIXJlZ2luZm9fcGFyYW1zKQorICAgICAgICByZXR1cm47CisKKyAgICByYyA9IG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKHJlZ2luZm9fcGFyYW1zLCBTQ1RQX1JUT0FMR09SSVRITSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ1RQX01BWElOSVRSRVRSKTsKKyAgICBpZiAoIXJjKQorICAgICAgICByZXR1cm47CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvX3BhcmFtcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ1RQX1BBUkFNU19DQUNIRV9USU1FT1VULApAQCAtNjUsNyArNzcsNiBAQAogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqcmVxdWVzdHZiOwogICAgIGludCAgICAgICAgICAgICBzdWJpZDsKLSAgICBpbnQgICAgICAgICAgICAgcmV0OwogCiAgICAgREVCVUdNU0dUTCgoInNjdHA6c2NhbGFyczpzdGF0cyIsICJIYW5kbGVyIC0gbW9kZSAlc1xuIiwKICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJhZ2VudF9tb2RlIiwgcmVxaW5mby0+bW9kZSkpKTsKQEAgLTIxNSw3ICsyMjYsNiBAQAogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqcmVxdWVzdHZiOwogICAgIGludCAgICAgICAgICAgICBzdWJpZDsKLSAgICBpbnQgICAgICAgICAgICAgcmV0OwogCiAgICAgREVCVUdNU0dUTCgoInNjdHA6c2NhbGFyczpwYXJhbXMiLCAiSGFuZGxlciAtIG1vZGUgJXNcbiIsCiAgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpKSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnMuaAppbmRleCAyNWIxODdhLi44ZGJiOGI1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFycy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzLmgKQEAgLTcsNiArNywxMCBAQAogY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFNjYWxhcnNfY29tbW9uKQogI2lmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKHNjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4KQorI2VsaWYgZGVmaW5lZCggZnJlZWJzZDggKSB8fCBkZWZpbmVkICggZnJlZWJzZDcgKQorY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZCkJIAorI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQorY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIpCSAKICNlbHNlCiAvKgogICogY291bGRuJ3QgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IGZpbGUhCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jCmluZGV4IDVhOWVlMzQuLjJhODk1YTggMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2NvbW1vbi5jCkBAIC04LDcgKzgsNiBAQAogc3RhdGljIG5ldHNubXBfc2N0cF9zdGF0cyBwcmV2X3NjdHBfc3RhdHM7CiAKIG5ldHNubXBfc2N0cF9wYXJhbXMgc2N0cF9wYXJhbXM7Ci1zdGF0aWMgbmV0c25tcF9zY3RwX3BhcmFtcyBwcmV2X3NjdHBfcGFyYW1zOwogCiBzdGF0aWMgaW50ICAgICAgbmVlZF93cmFwX2NoZWNrID0gMTsKIApAQCAtNTUsNDYgKzU0LDc1IEBACiAgICAgLyoKICAgICAgKiBVcGRhdGUgNjQgYml0IGNvdW50ZXJzCiAgICAgICovCi0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF9jdHJsX2NodW5rcywKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X2N0cmxfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLm91dF9jdHJsX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5vdXRfY3RybF9jaHVua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfb3JkZXJfY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cE91dEN0cmxDaHVua3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X29yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5vdXRfb3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLm91dF9vcmRlcl9jaHVua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5vdXRfdW5vcmRlcl9jaHVua3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwT3V0T3JkZXJDaHVua3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X3Vub3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLm91dF91bm9yZGVyX2NodW5rcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnByZXZfc2N0cF9zdGF0cy5vdXRfdW5vcmRlcl9jaHVua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl9jdHJsX2NodW5rcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBPdXRVbm9yZGVyQ2h1bmtzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX2N0cmxfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLmluX2N0cmxfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLmluX2N0cmxfY2h1bmtzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fb3JkZXJfY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cEluQ3RybENodW5rcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5pbl9vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMuaW5fb3JkZXJfY2h1bmtzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLmluX29yZGVyX2NodW5rcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLmluX3Vub3JkZXJfY2h1bmtzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cEluT3JkZXJDaHVua3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fdW5vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXdfc3RhdHMuaW5fdW5vcmRlcl9jaHVua3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMuaW5fdW5vcmRlcl9jaHVua3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOwotICAgIG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5mcmFnX3Vzcl9tc2dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cEluVW5vcmRlckNodW5rcyB0byA2NGJpdHNcbiIpKTsKKworICAgIGlmICgwICE9IG5ldHNubXBfYzY0X2NoZWNrMzJfYW5kX3VwZGF0ZSgmc2N0cF9zdGF0cy5mcmFnX3Vzcl9tc2dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLmZyYWdfdXNyX21zZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwcmV2X3NjdHBfc3RhdHMuZnJhZ191c3JfbXNncywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjayk7Ci0gICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLnJlYXNtX3Vzcl9tc2dzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cEZyYWdVc3JNc2dzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLnJlYXNtX3Vzcl9tc2dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLnJlYXNtX3Vzcl9tc2dzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLnJlYXNtX3Vzcl9tc2dzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMub3V0X3NjdHBfcGFja3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spKQorICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsCisgICAgICAgICAgICAgICAgIlNDVFA6IEVycm9yIGV4cGFuZGluZyBzY3RwUmVhc21Vc3JNc2dzIHRvIDY0Yml0c1xuIikpOworCisgICAgaWYgKDAgIT0gbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlKCZzY3RwX3N0YXRzLm91dF9zY3RwX3BhY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3X3N0YXRzLm91dF9zY3RwX3BhY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLm91dF9zY3RwX3BhY2tzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKTsKLSAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fc2N0cF9wYWNrcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5lZWRfd3JhcF9jaGVjaykpCisgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAiU0NUUDogRXJyb3IgZXhwYW5kaW5nIHNjdHBPdXRTQ1RQUGFja3MgdG8gNjRiaXRzXG4iKSk7CisKKyAgICBpZiAoMCAhPSBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoJnNjdHBfc3RhdHMuaW5fc2N0cF9wYWNrcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5ld19zdGF0cy5pbl9zY3RwX3BhY2tzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcHJldl9zY3RwX3N0YXRzLmluX3NjdHBfcGFja3MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZWVkX3dyYXBfY2hlY2spOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmVlZF93cmFwX2NoZWNrKSkKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLAorICAgICAgICAgICAgICAgICJTQ1RQOiBFcnJvciBleHBhbmRpbmcgc2N0cEluU0NUUFBhY2tzIHRvIDY0Yml0c1xuIikpOwogCiAgICAgLyoKICAgICAgKiBVcGRhdGUgcHJldl9zdGF0cyBmb3IgbmV4dCBjb21wdXRhdGlvbi4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2ZyZWVic2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGM3MjNmCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfZnJlZWJzZC5jCkBAIC0wLDAgKzEsOTMgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJzY3RwU2NhbGFyc19jb21tb24uaCIKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY3RsLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHAuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L3NjdHBfY29uc3RhbnRzLmg+CisKK3ZvaWQKK25ldHNubXBfYWNjZXNzX3NjdHBfc3RhdHNfYXJjaF9pbml0KCkKK3sKK30KKworaW50CituZXRzbm1wX2FjY2Vzc19zY3RwX3N0YXRzX2FyY2hfbG9hZChuZXRzbm1wX3NjdHBfc3RhdHMgKiBzY3RwX3N0YXRzKQoreworICBzdHJ1Y3Qgc2N0cHN0YXQgc3RhdDsKKyAgc2l6ZV90IGxlbiA9IHNpemVvZihzdHJ1Y3Qgc2N0cHN0YXQpOworCisgIGlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAuc3RhdHMiLCAmc3RhdCwgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJcmV0dXJuKC0xKTsKKyAgfQorICBtZW1zZXQoc2N0cF9zdGF0cywgMCwgc2l6ZW9mKG5ldHNubXBfc2N0cF9zdGF0cykpOworICBzY3RwX3N0YXRzLT5jdXJyX2VzdGFiID0gc3RhdC5zY3Rwc19jdXJyZXN0YWI7CisgIHNjdHBfc3RhdHMtPmFjdGl2ZV9lc3RhYnMgPSBzdGF0LnNjdHBzX2FjdGl2ZWVzdGFiOworICBzY3RwX3N0YXRzLT5wYXNzaXZlX2VzdGFicyA9IHN0YXQuc2N0cHNfcGFzc2l2ZWVzdGFiOworICBzY3RwX3N0YXRzLT5hYm9ydGVkcyA9IHN0YXQuc2N0cHNfYWJvcnRlZDsKKyAgc2N0cF9zdGF0cy0+c2h1dGRvd25zID0gc3RhdC5zY3Rwc19zaHV0ZG93bjsKKyAgc2N0cF9zdGF0cy0+b3V0X29mX2JsdWVzID0gc3RhdC5zY3Rwc19vdXRvZnRoZWJsdWU7CisgIHNjdHBfc3RhdHMtPmNoZWNrc3VtX2Vycm9ycyA9IHN0YXQuc2N0cHNfY2hlY2tzdW1lcnJvcnM7CisgIHNjdHBfc3RhdHMtPm91dF9jdHJsX2NodW5rcy5sb3cgPSBzdGF0LnNjdHBzX291dGNvbnRyb2xjaHVua3M7CisgIHNjdHBfc3RhdHMtPm91dF9vcmRlcl9jaHVua3MubG93ID0gc3RhdC5zY3Rwc19vdXRvcmRlcmNodW5rczsKKyAgc2N0cF9zdGF0cy0+b3V0X3Vub3JkZXJfY2h1bmtzLmxvdyA9IHN0YXQuc2N0cHNfb3V0dW5vcmRlcmNodW5rczsKKyAgc2N0cF9zdGF0cy0+aW5fY3RybF9jaHVua3MubG93ID0gc3RhdC5zY3Rwc19pbmNvbnRyb2xjaHVua3M7CisgIHNjdHBfc3RhdHMtPmluX29yZGVyX2NodW5rcy5sb3cgPSBzdGF0LnNjdHBzX2lub3JkZXJjaHVua3M7CisgIHNjdHBfc3RhdHMtPmluX3Vub3JkZXJfY2h1bmtzLmxvdyA9IHN0YXQuc2N0cHNfaW51bm9yZGVyY2h1bmtzOworICBzY3RwX3N0YXRzLT5mcmFnX3Vzcl9tc2dzLmxvdyA9IHN0YXQuc2N0cHNfZnJhZ3Vzcm1zZ3M7CisgIHNjdHBfc3RhdHMtPnJlYXNtX3Vzcl9tc2dzLmxvdyA9IHN0YXQuc2N0cHNfcmVhc211c3Jtc2dzOworICBzY3RwX3N0YXRzLT5vdXRfc2N0cF9wYWNrcy5sb3cgPSBzdGF0LnNjdHBzX291dHBhY2tldHM7CisgIHNjdHBfc3RhdHMtPmluX3NjdHBfcGFja3MubG93ID0gc3RhdC5zY3Rwc19pbnBhY2tldHM7CisgIHNjdHBfc3RhdHMtPmRpc2NvbnRpbnVpdHlfdGltZSA9IDA7CisgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX2FjY2Vzc19zY3RwX3BhcmFtc19hcmNoX2luaXQoKQoreworfQorCitpbnQKK25ldHNubXBfYWNjZXNzX3NjdHBfcGFyYW1zX2FyY2hfbG9hZChuZXRzbm1wX3NjdHBfcGFyYW1zICogc2N0cF9wYXJhbXMpCit7CisJc2l6ZV90IGxlbiA9IHNpemVvZih1aW50MzJfdCk7CisKKyAgICBzY3RwX3BhcmFtcy0+cnRvX2FsZ29yaXRobSA9IE5FVFNOTVBfU0NUUF9BTEdPUklUSE1fVkFOSjsKKyAgICBzY3RwX3BhcmFtcy0+bWF4X2Fzc29jcyA9ICBTQ1RQX01BWF9OVU1fT0ZfQVNPQzsgCisJaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5ydG9fbWF4IiwKKwkJCQkJICZzY3RwX3BhcmFtcy0+cnRvX21heCwKKwkJCQkJICZsZW4sIE5VTEwsIDApIDwgMCkgeworCSAgcmV0dXJuKC0xKTsKKwl9CisJaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5ydG9fbWluIiwKKwkJCQkJICZzY3RwX3BhcmFtcy0+cnRvX21pbiwKKwkJCQkJICZsZW4sIE5VTEwsIDApIDwgMCkgeworCSAgcmV0dXJuKC0xKTsKKwl9CisJaWYgKHN5c2N0bGJ5bmFtZSgibmV0LmluZXQuc2N0cC5ydG9faW5pdGlhbCIsCisJCQkJCSAmc2N0cF9wYXJhbXMtPnJ0b19pbml0aWFsLAorCQkJCQkgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJICByZXR1cm4oLTEpOworCX0KKwlpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLnZhbGlkX2Nvb2tpZV9saWZlIiwKKwkJCQkJICZzY3RwX3BhcmFtcy0+dmFsX2Nvb2tpZV9saWZlLAorCQkJCQkgJmxlbiwgTlVMTCwgMCkgPCAwKSB7CisJICByZXR1cm4oLTEpOworCX0KKwlpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLmluaXRfcnR4X21heCIsCisJCQkJCSAmc2N0cF9wYXJhbXMtPm1heF9pbml0X3JldHIsCisJCQkJCSAmbGVuLCBOVUxMLCAwKSA8IDApIHsKKwkgIHJldHVybigtMSk7CisJfQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBTY2FsYXJzX2xpbnV4LmMKaW5kZXggMTE1NzNjMy4uNmRhNWE2YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19saW51eC5jCkBAIC0xNDMsOCArMTQzLDggQEAKICAgICAgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzY3RwOnNjYWxhcnM6c3RhdHM6YXJjaF9sb2FkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIGVudHJ5OiAlc1xuIiwgbGluZSkpOwotICAgICAgICAgICAgLy8gZmNsb3NlKGYpOwotICAgICAgICAgICAgLy8gcmV0dXJuIHJldDsKKyAgICAgICAgICAgIC8qIGZjbG9zZShmKTsgKi8KKyAgICAgICAgICAgIC8qIHJldHVybiByZXQ7ICovCiAJICAgIHJldCA9IDA7CiAgICAgICAgIH0KICAgICB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwU2NhbGFyc19zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jN2FiNTQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFNjYWxhcnNfc29sYXJpczIuYwpAQCAtMCwwICsxLDk1IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAic2N0cFNjYWxhcnNfY29tbW9uLmgiCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGluZXQvbWliMi5oPgorCisjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgorCit2b2lkCituZXRzbm1wX2FjY2Vzc19zY3RwX3N0YXRzX2FyY2hfaW5pdCgpCit7Cit9CisKK2ludAorbmV0c25tcF9hY2Nlc3Nfc2N0cF9zdGF0c19hcmNoX2xvYWQobmV0c25tcF9zY3RwX3N0YXRzICogc2N0cF9zdGF0cykKK3sKKyAgICBtaWIyX3NjdHBfdCBzY3Rwc3RhdDsKKyAgICBzaXplX3QgbGVuID0gc2l6ZW9mKHNjdHBzdGF0KTsKKyAgICBpbnQgcmV0OworCisgICAgcmV0ID0gZ2V0TWlic3RhdChNSUJfU0NUUCwgJnNjdHBzdGF0LCBsZW4sIEdFVF9GSVJTVCwgJkdldF9ldmVyeXRoaW5nLCBOVUxMKTsKKyAgICBpZiAocmV0KSB7CisgICAgICAgIHNubXBfbG9nX3BlcnJvcigiZ2V0TWlic3RhdCBNSUJfU0NUUCIpOworCXJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KHNjdHBfc3RhdHMsIDAsIHNpemVvZihuZXRzbm1wX3NjdHBfc3RhdHMpKTsKKyAgICBzY3RwX3N0YXRzLT5jdXJyX2VzdGFiID0gc2N0cHN0YXQuc2N0cEN1cnJFc3RhYjsKKyAgICBzY3RwX3N0YXRzLT5hY3RpdmVfZXN0YWJzID0gc2N0cHN0YXQuc2N0cEFjdGl2ZUVzdGFiOworICAgIHNjdHBfc3RhdHMtPnBhc3NpdmVfZXN0YWJzID0gc2N0cHN0YXQuc2N0cFBhc3NpdmVFc3RhYjsKKyAgICBzY3RwX3N0YXRzLT5hYm9ydGVkcyA9IHNjdHBzdGF0LnNjdHBBYm9ydGVkOworICAgIHNjdHBfc3RhdHMtPnNodXRkb3ducyA9IHNjdHBzdGF0LnNjdHBTaHV0ZG93bnM7CisgICAgc2N0cF9zdGF0cy0+b3V0X29mX2JsdWVzID0gc2N0cHN0YXQuc2N0cE91dE9mQmx1ZTsKKyAgICBzY3RwX3N0YXRzLT5jaGVja3N1bV9lcnJvcnMgPSBzY3Rwc3RhdC5zY3RwQ2hlY2tzdW1FcnJvcjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfY3RybF9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cE91dEN0cmxDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPm91dF9jdHJsX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cE91dEN0cmxDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+b3V0X29yZGVyX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwT3V0T3JkZXJDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPm91dF9vcmRlcl9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBPdXRPcmRlckNodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5vdXRfdW5vcmRlcl9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cE91dFVub3JkZXJDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPm91dF91bm9yZGVyX2NodW5rcy5oaWdoID0gc2N0cHN0YXQuc2N0cE91dFVub3JkZXJDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+aW5fY3RybF9jaHVua3MubG93ID0gc2N0cHN0YXQuc2N0cEluQ3RybENodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+aW5fY3RybF9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBJbkN0cmxDaHVua3MgPj4gMzI7CisgICAgc2N0cF9zdGF0cy0+aW5fb3JkZXJfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBJbk9yZGVyQ2h1bmtzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5pbl9vcmRlcl9jaHVua3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBJbk9yZGVyQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmluX3Vub3JkZXJfY2h1bmtzLmxvdyA9IHNjdHBzdGF0LnNjdHBJblVub3JkZXJDaHVua3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPmluX3Vub3JkZXJfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwSW5Vbm9yZGVyQ2h1bmtzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPmluX29yZGVyX2NodW5rcy5sb3cgPSBzY3Rwc3RhdC5zY3RwSW5PcmRlckNodW5rcyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+aW5fb3JkZXJfY2h1bmtzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwSW5PcmRlckNodW5rcyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5mcmFnX3Vzcl9tc2dzLmxvdyA9IHNjdHBzdGF0LnNjdHBGcmFnVXNyTXNncyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+ZnJhZ191c3JfbXNncy5oaWdoID0gc2N0cHN0YXQuc2N0cEZyYWdVc3JNc2dzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPnJlYXNtX3Vzcl9tc2dzLmxvdyA9IHNjdHBzdGF0LnNjdHBSZWFzbVVzck1zZ3MgJiAweEZGRkZGRkZGOworICAgIHNjdHBfc3RhdHMtPnJlYXNtX3Vzcl9tc2dzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwUmVhc21Vc3JNc2dzID4+IDMyOworICAgIHNjdHBfc3RhdHMtPm91dF9zY3RwX3BhY2tzLmxvdyA9IHNjdHBzdGF0LnNjdHBPdXRTQ1RQUGt0cyAmIDB4RkZGRkZGRkY7CisgICAgc2N0cF9zdGF0cy0+b3V0X3NjdHBfcGFja3MuaGlnaCA9IHNjdHBzdGF0LnNjdHBPdXRTQ1RQUGt0cyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5pbl9zY3RwX3BhY2tzLmxvdyA9IHNjdHBzdGF0LnNjdHBJblNDVFBQa3RzICYgMHhGRkZGRkZGRjsKKyAgICBzY3RwX3N0YXRzLT5pbl9zY3RwX3BhY2tzLmhpZ2ggPSBzY3Rwc3RhdC5zY3RwSW5TQ1RQUGt0cyA+PiAzMjsKKyAgICBzY3RwX3N0YXRzLT5kaXNjb250aW51aXR5X3RpbWUgPSAwOworICAgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX2FjY2Vzc19zY3RwX3BhcmFtc19hcmNoX2luaXQoKQoreworfQorCitpbnQKK25ldHNubXBfYWNjZXNzX3NjdHBfcGFyYW1zX2FyY2hfbG9hZChuZXRzbm1wX3NjdHBfcGFyYW1zICogc2N0cF9wYXJhbXMpCit7CisgICAgbWliMl9zY3RwX3Qgc2N0cHN0YXQ7CisgICAgc2l6ZV90IGxlbiA9IHNpemVvZihzY3Rwc3RhdCk7CisgICAgaW50IHJldDsKKworICAgIHJldCA9IGdldE1pYnN0YXQoTUlCX1NDVFAsICZzY3Rwc3RhdCwgbGVuLCBHRVRfRklSU1QsICZHZXRfZXZlcnl0aGluZywgTlVMTCk7CisgICAgaWYgKHJldCkgeworICAgICAgICBzbm1wX2xvZ19wZXJyb3IoImdldE1pYnN0YXQgTUlCX1NDVFAiKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgc2N0cF9wYXJhbXMtPnJ0b19hbGdvcml0aG0gPSBzY3Rwc3RhdC5zY3RwUnRvQWxnb3JpdGhtOworICAgIHNjdHBfcGFyYW1zLT5tYXhfYXNzb2NzID0gIHNjdHBzdGF0LnNjdHBNYXhBc3NvY3M7IAorICAgIHNjdHBfcGFyYW1zLT5ydG9fbWF4ID0gc2N0cHN0YXQuc2N0cFJ0b01heDsKKyAgICBzY3RwX3BhcmFtcy0+cnRvX21pbiA9IHNjdHBzdGF0LnNjdHBSdG9NaW47CisgICAgc2N0cF9wYXJhbXMtPnJ0b19pbml0aWFsID0gc2N0cHN0YXQuc2N0cFJ0b0luaXRpYWw7CisgICAgc2N0cF9wYXJhbXMtPnZhbF9jb29raWVfbGlmZSA9IHNjdHBzdGF0LnNjdHBWYWxDb29raWVMaWZlOworICAgIHNjdHBfcGFyYW1zLT5tYXhfaW5pdF9yZXRyID0gc2N0cHN0YXQuc2N0cE1heEluaXRSZXRyOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlcy5oCmluZGV4IDU0NDE0NGEuLmQyMmFlYTAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXMuaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzLmgKQEAgLTE0LDExICsxNCwxMiBAQAogY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cEFzc29jVGFibGUpCiAjaWYgZGVmaW5lZCggbGludXggKQogY29uZmlnX3JlcXVpcmUoc2N0cC1taWIvc2N0cFRhYmxlc19saW51eCkKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlKQorI2VsaWYgZGVmaW5lZCggZnJlZWJzZDcgKSB8fCBkZWZpbmVkKCBmcmVlYnNkOCApCitjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QpCisjZWxpZiBkZWZpbmVkKCBzb2xhcmlzMiApCitjb25maWdfcmVxdWlyZShzY3RwLW1pYi9zY3RwVGFibGVzX3NvbGFyaXMyKQogI2Vsc2UKLS8qCi0qIGNvdWxkbid0IGRldGVybWluZSB0aGUgY29ycmVjdCBmaWxlIQotKiByZXF1aXJlIGEgYm9ndXMgZmlsZSB0byBnZW5lcmF0ZSBhbiBlcnJvci4KLSovCi1jb25maWdfcmVxdWlyZShzY3RwLW1pYi90YWJsZXMtdW5rbm93bi1hcmNoKQorY29uZmlnX2Vycm9yKFNDVFAtTUlCIGlzIG5vdCBhdmFpbGFibGUgaW4gdGlocyBlbnZpcm9ubWVudCkKICNlbmRpZgogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTQ1RQX1RBQkxFU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uYwppbmRleCAyMzc2Nzk1Li5iMjhlYTAzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTEyLDYgKzEzLDggQEAKICNpbmNsdWRlICJzY3RwTG9va3VwUmVtUHJpbUlQQWRkclRhYmxlLmgiCiAjaW5jbHVkZSAic2N0cExvb2t1cFJlbUlQQWRkclRhYmxlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9saWZvKQorCiBzdGF0aWMgdm9pZAogc2N0cEFzc29jVGFibGVfY29sbGVjdF9pbnZhbGlkKHZvaWQgKndoYXQsIHZvaWQgKm1hZ2ljKQogewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaCBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfY29tbW9uLmgKaW5kZXggZWI3Zjk5MC4uZjQ1NzYwNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19jb21tb24uaAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2NvbW1vbi5oCkBAIC0xLDYgKzEsMTAgQEAKICNpZm5kZWYgU0NUUF9UQUJMRVNfQ09NTU9OX0gKICNkZWZpbmUgU0NUUF9UQUJMRVNfQ09NTU9OX0gKIAorI2lmIGRlZmluZWQoZnJlZWJzZDgpIHx8IGRlZmluZWQoZnJlZWJzZDcpCisjZGVmaW5lIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSBTTk1QX0ZSRUUKKyNlbmRpZgorCiAjZGVmaW5lIFNDVFBfSVBBRERSRVNTX1NJWkUgMTYKICNkZWZpbmUgU0NUUF9IT1NUTkFNRV9TSVpFIDI1NQogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfZnJlZWJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxNmU5ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2ZyZWVic2QuYwpAQCAtMCwwICsxLDI0NCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgInNjdHBBc3NvY1RhYmxlLmgiCisjaW5jbHVkZSAic2N0cEFzc29jTG9jYWxBZGRyVGFibGUuaCIKKyNpbmNsdWRlICJzY3RwQXNzb2NSZW1BZGRyVGFibGUuaCIKKyNpbmNsdWRlICJzY3RwVGFibGVzX2NvbW1vbi5oIgorCisjaW5jbHVkZSA8dXRpbF9mdW5jcy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cC5oPgorI2luY2x1ZGUgPG5ldGluZXQvc2N0cF9jb25zdGFudHMuaD4KKworCitzdGF0aWMgaW50CitwYXJzZV9hc3NvY19sb2NhbF9hZGRyZXNzZXMoc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywKKwkJCQkJCQlzdHJ1Y3QgeHNjdHBfbGFkZHIgKnhsYWRkcikKK3sKKyAgaW50IHJldDsKKyAgc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfZW50cnkgKmVudHJ5OworICBlbnRyeSA9IHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2VudHJ5X2NyZWF0ZSgpOworICBpZiAoZW50cnkgPT0gTlVMTCkKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgIGVudHJ5LT5zY3RwQXNzb2NJZCA9IDA7CisgIGlmICh4bGFkZHItPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwllbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyVHlwZSA9IElORVRBRERSRVNTVFlQRV9JUFY0OworCWVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkciwKKwkJICAgJnhsYWRkci0+YWRkcmVzcy5zaW4uc2luX2FkZHIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuKTsKKyAgfSBlbHNlIGlmICh4bGFkZHItPmFkZHJlc3Muc2Euc2FfZmFtaWx5ID09IEFGX0lORVQ2KSB7CisJZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkclR5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKwllbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbiA9IDE2OworCW1lbWNweShlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyLAorCQkgICAmeGxhZGRyLT5hZGRyZXNzLnNpbjYuc2luNl9hZGRyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbik7CisgIH0KKyAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkclN0YXJ0VGltZSA9IHhsYWRkci0+c3RhcnRfdGltZS50dl9zZWM7CisgIHJldCA9IHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2FkZF9vcl91cGRhdGUoY29udGFpbmVycy0+c2N0cEFzc29jTG9jYWxBZGRyVGFibGUsCisJCQkJCQkJCQkJCSAgZW50cnkpOworICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorcGFyc2VfYXNzb2NfeHN0Y2Ioc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywgc3RydWN0IHhzY3RwX3RjYiAqeHN0Y2IpCit7CisgIGludCAgICAgICAgICAgICByZXQ7CisgIHNjdHBBc3NvY1RhYmxlX2VudHJ5ICplbnRyeTsKKworICBlbnRyeSA9IHNjdHBBc3NvY1RhYmxlX2VudHJ5X2NyZWF0ZSgpOworICBpZiAoZW50cnkgPT0gTlVMTCkKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgIHN3aXRjaCAoeHN0Y2ItPnN0YXRlKSB7CisgIGNhc2UgU0NUUF9TVEFURV9JTlVTRToKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9ERUxFVEVUQ0I7CisJYnJlYWs7CisgIGNhc2UgU0NUUF9TVEFURV9DT09LSUVfV0FJVDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9DT09LSUVXQUlUOworCWJyZWFrOworICBjYXNlIFNDVFBfU1RBVEVfQ09PS0lFX0VDSE9FRDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9DT09LSUVFQ0hPRUQ7CisJYnJlYWs7CisgIGNhc2UgU0NUUF9TVEFURV9PUEVOOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0VTVEFCTElTSEVEOworCWJyZWFrOworICBjYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fU0VOVDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTlNFTlQ7CisJYnJlYWs7CisgIGNhc2UgU0NUUF9TVEFURV9TSFVURE9XTl9SRUNFSVZFRDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTlJFQ0VJVkVEOworCWJyZWFrOworICBjYXNlIFNDVFBfU1RBVEVfU0hVVERPV05fQUNLX1NFTlQ6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05BQ0tTRU5UOworCWJyZWFrOworICBkZWZhdWx0OgorICBjYXNlIFNDVFBfU1RBVEVfRU1QVFk6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfQ0xPU0VEOworCWJyZWFrOworICB9OworICBlbnRyeS0+c2N0cEFzc29jSGVhcnRCZWF0SW50ZXJ2YWwgPSB4c3RjYi0+aGVhcnRiZWF0X2ludGVydmFsOworICBlbnRyeS0+c2N0cEFzc29jSWQgPSAwOworICBlbnRyeS0+c2N0cEFzc29jUHJpbVByb2Nlc3MgPSB4c3RjYi0+cHJpbWFyeV9wcm9jZXNzOworICBlbnRyeS0+c2N0cEFzc29jTG9jYWxQb3J0ID0geHN0Y2ItPmxvY2FsX3BvcnQ7CisgIGVudHJ5LT5zY3RwQXNzb2NSZW1Qb3J0ID0geHN0Y2ItPnJlbW90ZV9wb3J0OworICBlbnRyeS0+c2N0cEFzc29jSGVhcnRCZWF0SW50ZXJ2YWwgPSB4c3RjYi0+aGVhcnRiZWF0X2ludGVydmFsOworICBlbnRyeS0+c2N0cEFzc29jSW5TdHJlYW1zID0geHN0Y2ItPmluX3N0cmVhbXM7CisgIGVudHJ5LT5zY3RwQXNzb2NPdXRTdHJlYW1zID0geHN0Y2ItPm91dF9zdHJlYW1zOworICBlbnRyeS0+c2N0cEFzc29jTWF4UmV0ciA9IHhzdGNiLT5tYXhfbnJfcmV0cmFuczsKKyAgZW50cnktPnNjdHBBc3NvY1QxZXhwaXJlZHMgPSB4c3RjYi0+VDFfZXhwaXJlcmllczsKKyAgZW50cnktPnNjdHBBc3NvY1J0eENodW5rcyA9IHhzdGNiLT5yZXRyYW5zbWl0dGVkX3RzbnM7CisgIGVudHJ5LT5zY3RwQXNzb2NUMmV4cGlyZWRzID0geHN0Y2ItPlQyX2V4cGlyZXJpZXM7IAorICBlbnRyeS0+c2N0cEFzc29jUmVtSG9zdE5hbWVbMF0gPSAwOworICBlbnRyeS0+c2N0cEFzc29jUmVtSG9zdE5hbWVfbGVuID0gMDsKKyAgZW50cnktPnNjdHBBc3NvY0Rpc2NvbnRpbnVpdHlUaW1lID0geHN0Y2ItPmRpc2NvbnRpbnVpdHlfdGltZS50dl9zZWM7CisgIGVudHJ5LT5zY3RwQXNzb2NTdGFydFRpbWUgPSB4c3RjYi0+c3RhcnRfdGltZS50dl9zZWM7CQorCisgIHJldCA9IHNjdHBBc3NvY1RhYmxlX2FkZF9vcl91cGRhdGUoY29udGFpbmVycy0+c2N0cEFzc29jVGFibGUsIGVudHJ5KTsKKyAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisJcmV0dXJuIHJldDsKKyAgfQorCisgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisKK3N0YXRpYyBpbnQKK3BhcnNlX3JlbWFkZHJfeHJhZGRyKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsCisJCQkJCSBzdHJ1Y3QgeHNjdHBfcmFkZHIgKnhyYWRkcikKK3sKKyAgaW50ICAgICAgICAgICAgIHJldDsKKyAgc2N0cEFzc29jUmVtQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKworICBlbnRyeSA9IHNjdHBBc3NvY1JlbUFkZHJUYWJsZV9lbnRyeV9jcmVhdGUoKTsKKyAgaWYgKGVudHJ5ID09IE5VTEwpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworCQorICBlbnRyeS0+c2N0cEFzc29jSWQgPSAwOworCisgIGlmKHhyYWRkci0+YWN0aXZlKSAKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkckFjdGl2ZSA9IFRSVVRIVkFMVUVfVFJVRTsKKyAgZWxzZQorCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyQWN0aXZlID0gVFJVVEhWQUxVRV9GQUxTRTsKKyAgCisgIGlmICh4cmFkZHItPmhlYXJ0YmVhdF9lbmFibGVkKSAKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkckhCQWN0aXZlID0gVFJVVEhWQUxVRV9UUlVFOworICBlbHNlCisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJIQkFjdGl2ZSA9IFRSVVRIVkFMVUVfRkFMU0U7CisKKyAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJSVE8gPSB4cmFkZHItPnJ0bzsKKyAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJNYXhQYXRoUnR4ID0geHJhZGRyLT5tYXhfcGF0aF9ydHg7CisgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyUnR4ID0geHJhZGRyLT5ydHg7CisgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyU3RhcnRUaW1lID0geHJhZGRyLT5zdGFydF90aW1lLnR2X3NlYzsKKworICBpZiAoeHJhZGRyLT5hZGRyZXNzLnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUKSB7CisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJUeXBlID0gSU5FVEFERFJFU1NUWVBFX0lQVjQ7CisJZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY1JlbUFkZHIsCisJCSAgICZ4cmFkZHItPmFkZHJlc3Muc2luLnNpbl9hZGRyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4pOworICB9IGVsc2UgaWYgKHhyYWRkci0+YWRkcmVzcy5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkclR5cGUgPSBJTkVUQUREUkVTU1RZUEVfSVBWNjsKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY1JlbUFkZHIsCisJCSAgICZ4cmFkZHItPmFkZHJlc3Muc2luNi5zaW42X2FkZHIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbik7CisgIH0KKyAgcmV0ID0KKwlzY3RwQXNzb2NSZW1BZGRyVGFibGVfYWRkX29yX3VwZGF0ZShjb250YWluZXJzLT4KKwkJCQkJCQkJCQlzY3RwQXNzb2NSZW1BZGRyVGFibGUsIGVudHJ5KTsKKyAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7CisJcmV0dXJuIHJldDsKKyAgfQorICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworCitpbnQKK3NjdHBUYWJsZXNfYXJjaF9sb2FkKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsIHVfbG9uZyAqIGZsYWdzKQoreworICBpbnQgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgc2l6ZV90IGxlbjsKKyAgY2FkZHJfdCBidWY7CisgIHVuc2lnbmVkIGludCBvZmZzZXQ7CisgIHN0cnVjdCB4c2N0cF9pbnBjYiAqeGlucDsKKyAgc3RydWN0IHhzY3RwX3RjYiAqeHN0Y2I7CisgIHN0cnVjdCB4c2N0cF9sYWRkciAqeGxhZGRyOworICBzdHJ1Y3QgeHNjdHBfcmFkZHIgKnhyYWRkcjsKKworCisgICpmbGFncyB8PSBTQ1RQX1RBQkxFU19MT0FEX0ZMQUdfREVMRVRFX0lOVkFMSUQ7CisgICpmbGFncyB8PSBTQ1RQX1RBQkxFU19MT0FEX0ZMQUdfQVVUT19MT09LVVA7CisgIGxlbiA9IDA7CisgIGlmIChzeXNjdGxieW5hbWUoIm5ldC5pbmV0LnNjdHAuYXNzb2NsaXN0IiwgMCwgJmxlbiwgMCwgMCkgPCAwKSB7CisJcHJpbnRmKCJFcnJvciAlZCAoJXMpIGNvdWxkIG5vdCBnZXQgdGhlIGFzc29jbGlzdFxuIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJcmV0dXJuKC0xKTsKKyAgfQorICBpZiAoKGJ1ZiA9IChjYWRkcl90KW1hbGxvYyhsZW4pKSA9PSAwKSB7CisJcHJpbnRmKCJtYWxsb2MgJWx1IGJ5dGVzIGZhaWxlZC5cbiIsIChsb25nIHVuc2lnbmVkKWxlbik7CisJcmV0dXJuKC0xKTsKKyAgfQorICBpZiAoc3lzY3RsYnluYW1lKCJuZXQuaW5ldC5zY3RwLmFzc29jbGlzdCIsIGJ1ZiwgJmxlbiwgMCwgMCkgPCAwKSB7CisJcHJpbnRmKCJFcnJvciAlZCAoJXMpIGNvdWxkIG5vdCBnZXQgdGhlIGFzc29jbGlzdFxuIiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisJZnJlZShidWYpOworCXJldHVybigtMSk7CisgIH0KKyAgb2Zmc2V0ID0gMDsKKyAgeGlucCA9IChzdHJ1Y3QgeHNjdHBfaW5wY2IgKikoYnVmICsgb2Zmc2V0KTsKKyAgd2hpbGUgKHhpbnAtPmxhc3QgPT0gMCkgeworCS8qIGZvciBlYWNoIElOUCAqLworCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX2lucGNiKTsKKwkvKiBMb2NhbCBhZGRyZXNzZXMgKi8KKwl4bGFkZHIgPSAoc3RydWN0IHhzY3RwX2xhZGRyICopKGJ1ZiArIG9mZnNldCk7CisJd2hpbGUgKHhsYWRkci0+bGFzdCA9PSAwKSB7CisJICBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcik7CisJICB4bGFkZHIgPSAoc3RydWN0IHhzY3RwX2xhZGRyICopKGJ1ZiArIG9mZnNldCk7CisJfQorCW9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX2xhZGRyKTsKKwkvKiBBc3NvY2lhdGlvbnMgKi8KKwl4c3RjYiA9IChzdHJ1Y3QgeHNjdHBfdGNiICopKGJ1ZiArIG9mZnNldCk7CisJd2hpbGUgKHhzdGNiLT5sYXN0ID09IDApIHsKKwkgIHhzdGNiID0gKHN0cnVjdCB4c2N0cF90Y2IgKikoYnVmICsgb2Zmc2V0KTsKKwkgIG9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX3RjYik7CisJICBwYXJzZV9hc3NvY194c3RjYihjb250YWluZXJzLCB4c3RjYik7CisJICAvKiBMb2NhbCBhZGRyZXNzZXMgKi8KKwkgIHhsYWRkciA9IChzdHJ1Y3QgeHNjdHBfbGFkZHIgKikoYnVmICsgb2Zmc2V0KTsKKwkgIHdoaWxlICh4bGFkZHItPmxhc3QgPT0gMCkgeworCQlwYXJzZV9hc3NvY19sb2NhbF9hZGRyZXNzZXMoY29udGFpbmVycywgeGxhZGRyKTsKKwkJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfbGFkZHIpOworCQl4bGFkZHIgPSAoc3RydWN0IHhzY3RwX2xhZGRyICopKGJ1ZiArIG9mZnNldCk7CisJICB9CisJICBvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9sYWRkcik7CisKKwkgIC8qIFJlbW90ZSBhZGRyZXNzZXMgKi8KKwkgIHhyYWRkciA9IChzdHJ1Y3QgeHNjdHBfcmFkZHIgKikoYnVmICsgb2Zmc2V0KTsKKwkgIHdoaWxlICh4cmFkZHItPmxhc3QgPT0gMCkgeworCQlwYXJzZV9yZW1hZGRyX3hyYWRkcihjb250YWluZXJzLCB4cmFkZHIpOworCQlvZmZzZXQgKz0gc2l6ZW9mKHN0cnVjdCB4c2N0cF9yYWRkcik7CisJCXhyYWRkciA9IChzdHJ1Y3QgeHNjdHBfcmFkZHIgKikoYnVmICsgb2Zmc2V0KTsKKwkgIH0KKwkgIG9mZnNldCArPSBzaXplb2Yoc3RydWN0IHhzY3RwX3JhZGRyKTsKKwkgIHhzdGNiID0gKHN0cnVjdCB4c2N0cF90Y2IgKikoYnVmICsgb2Zmc2V0KTsKKwl9CisJb2Zmc2V0ICs9IHNpemVvZihzdHJ1Y3QgeHNjdHBfdGNiKTsKKwl4aW5wID0gKHN0cnVjdCB4c2N0cF9pbnBjYiAqKShidWYgKyBvZmZzZXQpOworICB9CisgIGZyZWUoKHZvaWQgKilidWYpOworICByZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19saW51eC5jCmluZGV4IGQ2ZmQ4MTAuLjhlNjI4NjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfbGludXguYworKysgYi9hZ2VudC9taWJncm91cC9zY3RwLW1pYi9zY3RwVGFibGVzX2xpbnV4LmMKQEAgLTcsNyArNyw3IEBACiAjaW5jbHVkZSAic2N0cEFzc29jUmVtQWRkclRhYmxlLmgiCiAjaW5jbHVkZSAic2N0cFRhYmxlc19jb21tb24uaCIKIAotI2luY2x1ZGUgPHV0aWxfZnVuY3MuaD4KKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oIgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgpAQCAtMTUwLDEzICsxNTAsNyBAQAogICAgIH0KICAgICBlbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBzdHJ0b2wodG9rZW4sIE5VTEwsIDEwKTsKIAotICAgIHRva2VuID0gc3RydG9rKE5VTEwsICIgIik7ICAvKiBIQktUICovCi0gICAgaWYgKHRva2VuID09IE5VTEwpIHsKLSAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOwotICAgICAgICBnb3RvIGVycm9yOwotICAgIH0KLSAgICBlbnRyeS0+c2N0cEFzc29jSGVhcnRCZWF0SW50ZXJ2YWwgPSBzdHJ0b2wodG9rZW4sIE5VTEwsIDEwKTsKLQorICAgIHRva2VuID0gc3RydG9rKE5VTEwsICIgIik7ICAvKiBIQktULCBpZ25vcmUgKi8KICAgICB0b2tlbiA9IHN0cnRvayhOVUxMLCAiICIpOyAgLyogQVNTT0MtSUQsIHN0b3JlICovCiAgICAgaWYgKHRva2VuID09IE5VTEwpIHsKICAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOwpAQCAtMTc0LDcgKzE2OCw3IEBACiAgICAgICAgIGdvdG8gZXJyb3I7CiAgICAgfQogICAgIGlub2RlID0gc3RydG91bGwodG9rZW4sIE5VTEwsIDEwKTsKLSAgICBlbnRyeS0+c2N0cEFzc29jUHJpbVByb2Nlc3MgPSBnZXRfcGlkX2Zyb21faW5vZGUoaW5vZGUpOworICAgIGVudHJ5LT5zY3RwQXNzb2NQcmltUHJvY2VzcyA9IG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlKGlub2RlKTsKIAogICAgIHRva2VuID0gc3RydG9rKE5VTEwsICIgIik7ICAvKiBMUE9SVCAqLwogICAgIGlmICh0b2tlbiA9PSBOVUxMKSB7CkBAIC0yODcsNiArMjgxLDggQEAKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9CiAKKyAgICBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZV9pbml0KCk7CisKICAgICAvKgogICAgICAqIGlnbm9yZSB0aGUgaGVhZGVyLiAKICAgICAgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL3NjdHAtbWliL3NjdHBUYWJsZXNfc29sYXJpczIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTkzYWIzCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc2N0cC1taWIvc2N0cFRhYmxlc19zb2xhcmlzMi5jCkBAIC0wLDAgKzEsMTgyIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAic2N0cEFzc29jVGFibGUuaCIKKyNpbmNsdWRlICJzY3RwQXNzb2NMb2NhbEFkZHJUYWJsZS5oIgorI2luY2x1ZGUgInNjdHBBc3NvY1JlbUFkZHJUYWJsZS5oIgorI2luY2x1ZGUgInNjdHBUYWJsZXNfY29tbW9uLmgiCisKKyNpbmNsdWRlIDx1dGlsX2Z1bmNzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPGluZXQvbWliMi5oPgorCisjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgorCitzdGF0aWMgaW50CitwYXJzZV9hc3NvY19sb2NhbF9hZGRyZXNzKHNjdHBUYWJsZXNfY29udGFpbmVycyAqIGNvbnRhaW5lcnMsCisJCQkgICAgbWliMl9zY3RwQ29ubkxvY2FsRW50cnlfdCAqbGNlKQoreworICAgIGludCByZXQ7CisgICAgc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfZW50cnkgKmVudHJ5OworICAgIGVudHJ5ID0gc2N0cEFzc29jTG9jYWxBZGRyVGFibGVfZW50cnlfY3JlYXRlKCk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGVudHJ5LT5zY3RwQXNzb2NJZCA9IDA7CisgICAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkclR5cGUgPSBsY2UtPnNjdHBBc3NvY0xvY2FsQWRkclR5cGU7CisgICAgaWYgKGxjZS0+c2N0cEFzc29jTG9jYWxBZGRyVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNCkgeworCWVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkciwKKwkJICAgbGNlLT5zY3RwQXNzb2NMb2NhbEFkZHIuczZfYWRkcisxMiwKKwkJICAgZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4pOworICAgIH0gZWxzZSBpZiAobGNlLT5zY3RwQXNzb2NMb2NhbEFkZHJUeXBlID09IElORVRBRERSRVNTVFlQRV9JUFY2KSB7CisJZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkcl9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY0xvY2FsQWRkciwKKwkJICAgJmxjZS0+c2N0cEFzc29jTG9jYWxBZGRyLAorCQkgICBlbnRyeS0+c2N0cEFzc29jTG9jYWxBZGRyX2xlbik7CisgICAgfQorICAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbEFkZHJTdGFydFRpbWUgPSAwOworICAgIHJldCA9IHNjdHBBc3NvY0xvY2FsQWRkclRhYmxlX2FkZF9vcl91cGRhdGUoY29udGFpbmVycy0+c2N0cEFzc29jTG9jYWxBZGRyVGFibGUsCisJCQkJCSAgICAgIGVudHJ5KTsKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50CitwYXJzZV9hc3NvYyhzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLCBtaWIyX3NjdHBDb25uRW50cnlfdCAqc2NlKQoreworICAgIGludCAgICAgICAgICAgICByZXQ7CisgICAgc2N0cEFzc29jVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgZW50cnkgPSBzY3RwQXNzb2NUYWJsZV9lbnRyeV9jcmVhdGUoKTsKKyAgICBpZiAoZW50cnkgPT0gTlVMTCkKKwlyZXR1cm4gU05NUF9FUlJfR0VORVJSOworCisgICAgc3dpdGNoIChzY2UtPnNjdHBBc3NvY1N0YXRlKSB7CisgICAgY2FzZSBNSUIyX1NDVFBfY2xvc2VkOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0NMT1NFRDsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9jb29raWVXYWl0OgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0NPT0tJRVdBSVQ7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfY29va2llRWNob2VkOgorCWVudHJ5LT5zY3RwQXNzb2NTdGF0ZSA9IFNDVFBBU1NPQ1NUQVRFX0NPT0tJRUVDSE9FRDsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9lc3RhYmxpc2hlZDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9FU1RBQkxJU0hFRDsKKwlicmVhazsKKyAgICBjYXNlIE1JQjJfU0NUUF9zaHV0ZG93blBlbmRpbmc6CisJZW50cnktPnNjdHBBc3NvY1N0YXRlID0gU0NUUEFTU09DU1RBVEVfU0hVVERPV05QRU5ESU5HOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX3NodXRkb3duU2VudDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTlNFTlQ7CisJYnJlYWs7CisgICAgY2FzZSBNSUIyX1NDVFBfc2h1dGRvd25SZWNlaXZlZDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTlJFQ0VJVkVEOworCWJyZWFrOworICAgIGNhc2UgTUlCMl9TQ1RQX3NodXRkb3duQWNrU2VudDoKKwllbnRyeS0+c2N0cEFzc29jU3RhdGUgPSBTQ1RQQVNTT0NTVEFURV9TSFVURE9XTkFDS1NFTlQ7CisJYnJlYWs7CisgICAgfQorICAgIGVudHJ5LT5zY3RwQXNzb2NIZWFydEJlYXRJbnRlcnZhbCA9IHNjZS0+c2N0cEFzc29jSGVhcnRCZWF0SW50ZXJ2YWw7CisgICAgZW50cnktPnNjdHBBc3NvY0lkID0gc2NlLT5zY3RwQXNzb2NJZDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUHJpbVByb2Nlc3MgPSBzY2UtPnNjdHBBc3NvY1ByaW1Qcm9jZXNzOworICAgIGVudHJ5LT5zY3RwQXNzb2NMb2NhbFBvcnQgPSBzY2UtPnNjdHBBc3NvY0xvY2FsUG9ydDsKKyAgICBlbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHJUeXBlID0gc2NlLT5zY3RwQXNzb2NSZW1QcmltQWRkclR5cGU7CisgICAgaWYgKGVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkclR5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjQpIHsKKwllbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHJfbGVuID0gNDsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY1JlbVByaW1BZGRyLCBzY2UtPnNjdHBBc3NvY1JlbVByaW1BZGRyLnM2X2FkZHIrMTIsCisJICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkcl9sZW4pOworICAgIH0KKyAgICBlbHNlIHsKKwllbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHJfbGVuID0gMTY7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NSZW1QcmltQWRkciwgc2NlLT5zY3RwQXNzb2NSZW1QcmltQWRkci5zNl9hZGRyLAorCSAgICBlbnRyeS0+c2N0cEFzc29jUmVtUHJpbUFkZHJfbGVuKTsKKyAgICB9CisgICAgZW50cnktPnNjdHBBc3NvY1JlbVBvcnQgPSBzY2UtPnNjdHBBc3NvY1JlbVBvcnQ7CisgICAgZW50cnktPnNjdHBBc3NvY0luU3RyZWFtcyA9IHNjZS0+c2N0cEFzc29jSW5TdHJlYW1zOworICAgIGVudHJ5LT5zY3RwQXNzb2NPdXRTdHJlYW1zID0gc2NlLT5zY3RwQXNzb2NPdXRTdHJlYW1zOworICAgIGVudHJ5LT5zY3RwQXNzb2NNYXhSZXRyID0gc2NlLT5zY3RwQXNzb2NNYXhSZXRyOworICAgIGVudHJ5LT5zY3RwQXNzb2NUMWV4cGlyZWRzID0gc2NlLT5zY3RwQXNzb2NUMWV4cGlyZWQ7CisgICAgZW50cnktPnNjdHBBc3NvY1J0eENodW5rcyA9IHNjZS0+c2N0cEFzc29jUnR4Q2h1bmtzOworICAgIGVudHJ5LT5zY3RwQXNzb2NUMmV4cGlyZWRzID0gc2NlLT5zY3RwQXNzb2NUMmV4cGlyZWQ7IAorICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1Ib3N0TmFtZVswXSA9IDA7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUhvc3ROYW1lX2xlbiA9IDA7CisgICAgZW50cnktPnNjdHBBc3NvY0Rpc2NvbnRpbnVpdHlUaW1lID0gMDsKKyAgICBlbnRyeS0+c2N0cEFzc29jU3RhcnRUaW1lID0gc2NlLT5zY3RwQXNzb2NTdGFydFRpbWU7CQorCisgICAgcmV0ID0gc2N0cEFzc29jVGFibGVfYWRkX29yX3VwZGF0ZShjb250YWluZXJzLT5zY3RwQXNzb2NUYWJsZSwgZW50cnkpOworICAgIHJldHVybiByZXQ7Cit9CisKKworc3RhdGljIGludAorcGFyc2VfYXNzb2NfcmVtb3RlX2FkZHJlc3Moc2N0cFRhYmxlc19jb250YWluZXJzICogY29udGFpbmVycywKKwkJICAgIG1pYjJfc2N0cENvbm5SZW1vdGVFbnRyeV90ICpyY2UpCit7CisgICAgaW50ICAgICAgICAgICAgIHJldDsKKyAgICBzY3RwQXNzb2NSZW1BZGRyVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgZW50cnkgPSBzY3RwQXNzb2NSZW1BZGRyVGFibGVfZW50cnlfY3JlYXRlKCk7CisgICAgaWYgKGVudHJ5ID09IE5VTEwpCisJcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGVudHJ5LT5zY3RwQXNzb2NJZCA9IHJjZS0+c2N0cEFzc29jSWQ7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJBY3RpdmUgPSByY2UtPnNjdHBBc3NvY1JlbUFkZHJBY3RpdmU7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJIQkFjdGl2ZSA9IHJjZS0+c2N0cEFzc29jUmVtQWRkckhCQWN0aXZlOworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyUlRPID0gcmNlLT5zY3RwQXNzb2NSZW1BZGRyUlRPOworICAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyTWF4UGF0aFJ0eCA9IHJjZS0+c2N0cEFzc29jUmVtQWRkck1heFBhdGhSdHg7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJSdHggPSByY2UtPnNjdHBBc3NvY1JlbUFkZHJSdHg7CisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJTdGFydFRpbWUgPSAwOworCisgICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJUeXBlID0gcmNlLT5zY3RwQXNzb2NSZW1BZGRyVHlwZTsKKyAgICBpZiAocmNlLT5zY3RwQXNzb2NSZW1BZGRyVHlwZSA9PSBJTkVUQUREUkVTU1RZUEVfSVBWNCkgeworCWVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbiA9IDQ7CisJbWVtY3B5KGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyLAorCQkgICByY2UtPnNjdHBBc3NvY1JlbUFkZHIuczZfYWRkcisxMiwKKwkJICAgZW50cnktPnNjdHBBc3NvY1JlbUFkZHJfbGVuKTsKKyAgICB9IGVsc2UgaWYgKHJjZS0+c2N0cEFzc29jUmVtQWRkclR5cGUgPT0gSU5FVEFERFJFU1NUWVBFX0lQVjYpIHsKKwllbnRyeS0+c2N0cEFzc29jUmVtQWRkcl9sZW4gPSAxNjsKKwltZW1jcHkoZW50cnktPnNjdHBBc3NvY1JlbUFkZHIsCisJCSAgICZyY2UtPnNjdHBBc3NvY1JlbUFkZHIsCisJCSAgIGVudHJ5LT5zY3RwQXNzb2NSZW1BZGRyX2xlbik7CisgICAgfQorICAgIHJldCA9CisJc2N0cEFzc29jUmVtQWRkclRhYmxlX2FkZF9vcl91cGRhdGUoY29udGFpbmVycy0+c2N0cEFzc29jUmVtQWRkclRhYmxlLAorCQkJCQkgICAgZW50cnkpOworICAgIHJldHVybiByZXQ7Cit9CisKKworaW50CitzY3RwVGFibGVzX2FyY2hfbG9hZChzY3RwVGFibGVzX2NvbnRhaW5lcnMgKiBjb250YWluZXJzLCB1X2xvbmcgKiBmbGFncykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9FUlJPUjsKKyAgICBtaWIyX3NjdHBDb25uRW50cnlfdCBzY2U7CisgICAgbWliMl9zY3RwQ29ubkxvY2FsRW50cnlfdCBsY2U7CisgICAgbWliMl9zY3RwQ29ublJlbW90ZUVudHJ5X3QgcmNlOworICAgIHJlcV9lICAgICAgICAgICAgICByZXEgPSBHRVRfRklSU1Q7CisKKyAgICB3aGlsZSAoZ2V0TWlic3RhdChNSUJfU0NUUF9DT05OLCAmc2NlLCBzaXplb2Yoc2NlKSwgcmVxLCAmR2V0X2V2ZXJ5dGhpbmcsIDApID09IDApIHsKKwlyZXEgPSBHRVRfTkVYVDsKKwlwYXJzZV9hc3NvYyhjb250YWluZXJzLCAmc2NlKTsKKyAgICB9CisgICAgcmVxID0gR0VUX0ZJUlNUOworICAgIHdoaWxlIChnZXRNaWJzdGF0KE1JQl9TQ1RQX0NPTk5fTE9DQUwsICZsY2UsIHNpemVvZihsY2UpLCByZXEsICZHZXRfZXZlcnl0aGluZywgMCkgPT0gMCkgeworCXJlcSA9IEdFVF9ORVhUOworCXBhcnNlX2Fzc29jX2xvY2FsX2FkZHJlc3MoY29udGFpbmVycywgJmxjZSk7CisgICAgfQorICAgIHJlcSA9IEdFVF9GSVJTVDsKKyAgICB3aGlsZSAoZ2V0TWlic3RhdChNSUJfU0NUUF9DT05OX1JFTU9URSwgJnJjZSwgc2l6ZW9mKHJjZSksIHJlcSwgJkdldF9ldmVyeXRoaW5nLCAwKSA9PSAwKSB7CisJcmVxID0gR0VUX05FWFQ7CisJcGFyc2VfYXNzb2NfcmVtb3RlX2FkZHJlc3MoY29udGFpbmVycywgJnJjZSk7CisgICAgfQorICAgIHJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbXV4L3NtdXguYyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5jCmluZGV4IDQwMDZiZjcuLjQ1OThjMmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5jCkBAIC00LDYgKzQsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAKQEAgLTI2LDExICsyNyw3IEBACiAjaW5jbHVkZSA8ZXJyLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTQ3LDggKzQ0LDYgQEAKICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VsaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19GSUxJT19ICiAjaW5jbHVkZSA8c3lzL2ZpbGlvLmg+CkBAIC03MSwxMCArNjYsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CiAKICNpbmNsdWRlICJzbXV4LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgogI2luY2x1ZGUgIm1pYmRlZnMuaCIKICNpbmNsdWRlICJzbm1wZC5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X29iamlkKQorCiBsb25nICAgICAgICAgICAgc211eF9sb25nOwogdV9sb25nICAgICAgICAgIHNtdXhfdWxvbmc7CiBzdHJ1Y3Qgc29ja2FkZHJfaW4gc211eF9zYTsKQEAgLTEyMiw3ICsxMTgsOCBAQAogICAgIC8qCiAgICAgICogYm9ndXMgZW50cnksIGFzIGluIHBhc3MuYyAKICAgICAgKi8KLSAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbXV4LCAwLCB7TUlCSU5ERVh9fSwKKyAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9zbXV4LCAwLCB7TUlCSU5ERVh9fSwKIH07CiAKIApAQCAtMzUwLDcgKzM0Nyw4IEBACiAgICAgdV9jaGFyICAgICAgICAgIGJ1ZltTTVVYTUFYUEtUU0laRV0sICpwdHIsIHNvdXRbM10sIHR5cGU7CiAgICAgaW50ICAgICAgICAgICAgIHJldGVycjsKICAgICBzaXplX3QgICAgICAgICAgdmFyX2xlbiwgZGF0YWxlbiwgbmFtZV9sZW5ndGgsIHBhY2tldF9sZW47Ci0gICAgc3NpemVfdCAgICAgICAgIGxlbiwgdG1wX2xlbjsKKyAgICBzaXplX3QgICAgICAgICAgbGVuOworICAgIHNzaXplX3QgICAgICAgICB0bXBfbGVuOwogICAgIGxvbmcgICAgICAgICAgICByZXFpZCwgZXJyc3RzLCBlcnJpZHg7CiAgICAgdV9jaGFyICAgICAgICAgICpkYXRhcHRyOwogCkBAIC00MTksNyArNDE3LDcgQEAKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAoc2VuZHRvKHJwdHItPnNyX2ZkLCBidWYsIGxlbiwgMCwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIGlmIChzZW5kdG8ocnB0ci0+c3JfZmQsICh2b2lkICopIGJ1ZiwgbGVuLCAwLCBOVUxMLCAwKSA8IDApIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIlt2YXJfc211eF93cml0ZV0gc2VuZCBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgIH0KQEAgLTQyOCw4ICs0MjYsOCBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIHBlZWsgYXQgd2hhdCdzIHJlY2VpdmVkIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoKGxlbiA9IHJlY3Zmcm9tKHJwdHItPnNyX2ZkLCBidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgU01VWE1BWFBLVFNJWkUsIE1TR19QRUVLLCBOVUxMLCAwKSkgPD0gMCkgeworICAgICAgICAgICAgaWYgKChsZW4gPSByZWN2ZnJvbShycHRyLT5zcl9mZCwgKHZvaWQgKikgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNNVVhNQVhQS1RTSVpFLCBNU0dfUEVFSywgTlVMTCwgTlVMTCkpIDw9IDApIHsKICAgICAgICAgICAgICAgICBpZiAoKGxlbiA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTQ0NCw4ICs0NDIsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIlt2YXJfc211eF93cml0ZV0gUGVla2VkIGF0ICVkIGJ5dGVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbdmFyX3NtdXhfd3JpdGVdIFBlZWtlZCBhdCAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgICAgICJkIGJ5dGVzXG4iLCBsZW4pKTsKICAgICAgICAgICAgIERFQlVHRFVNUFNFVFVQKCJ2YXJfc211eF93cml0ZSIsIGJ1ZiwgbGVuKTsKIAogICAgICAgICAgICAgLyoKQEAgLTQ2OCw3ICs0NjYsNyBAQAogICAgICAgICAgICAgZG8KICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIGxlbiA9IHRtcF9sZW47Ci0gICAgICAgICAgICAgICBsZW4gPSByZWN2ZnJvbShycHRyLT5zcl9mZCwgYnVmLCBsZW4sIDAsIE5VTEwsIDApOworICAgICAgICAgICAgICAgbGVuID0gcmVjdmZyb20ocnB0ci0+c3JfZmQsICh2b2lkICopIGJ1ZiwgbGVuLCAwLCBOVUxMLCBOVUxMKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHdoaWxlKChsZW4gPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSk7CiAKQEAgLTQ4MCw4ICs0NzgsOCBAQAogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIlt2YXJfc211eF93cml0ZV0gUmVjZWl2ZWQgJWQgYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBsZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIlt2YXJfc211eF93cml0ZV0gUmVjZWl2ZWQgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICAgICAiZCBieXRlc1xuIiwgbGVuKSk7CiAKICAgICAgICAgICAgIGlmIChidWZbMF0gPT0gU01VWF9UUkFQKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3Zhcl9zbXV4X3dyaXRlXSBSZWNlaXZlZCB0cmFwXG4iKSk7CkBAIC01NTIsNyArNTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJbdmFyX3NtdXhfd3JpdGVdIGVudGVyaW5nIEZSRUUgLSBzZW5kaW5nIENvbW1pdCBcbiIpKTsKICAgICAgICAgfQogCi0gICAgICAgIGlmICgoc2VuZHRvKHJwdHItPnNyX2ZkLCBzb3V0LCAzLCAwLCBOVUxMLCAwKSkgPCAwKSB7CisgICAgICAgIGlmICgoc2VuZHRvKHJwdHItPnNyX2ZkLCAodm9pZCAqKSBzb3V0LCAzLCAwLCBOVUxMLCAwKSkgPCAwKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiW3Zhcl9zbXV4X3dyaXRlXSBzZW5kIHJvbGxiYWNrL2NvbW1pdCBmYWlsZWRcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CkBAIC01NzQsOSArNTcyLDEwIEBACiAgICAgdV9jaGFyICAgICAgICAgIGRhdGFbU01VWE1BWFBLVFNJWkVdLCAqcHRyLCB0eXBlOwogICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBpbl9zb2NrZXQ7CiAgICAgc3RydWN0IHRpbWV2YWwgIHR2OwotICAgIGludCAgICAgICAgICAgICBmYWlsLCBmZCwgYWxlbjsKKyAgICBpbnQgICAgICAgICAgICAgZmFpbCwgZmQ7CisgICAgc29ja2xlbl90ICAgICAgIGFsZW47CiAgICAgaW50ICAgICAgICAgICAgIGxlbmd0aDsKLSAgICBzc2l6ZV90ICAgICAgICAgbGVuOworICAgIHNpemVfdCAgICAgICAgICBsZW47CiAKICAgICBhbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CiAgICAgLyoKQEAgLTYxMCw3ICs2MDksNyBAQAogICAgICAgICAgKi8KICAgICAgICAgZG8KICAgICAgICAgewotICAgICAgICAgICBsZW5ndGggPSByZWN2ZnJvbShmZCwgKGNoYXIgKikgZGF0YSwgU01VWE1BWFBLVFNJWkUsIDAsIE5VTEwsIDApOworICAgICAgICAgICBsZW5ndGggPSByZWN2ZnJvbShmZCwgKGNoYXIgKikgZGF0YSwgU01VWE1BWFBLVFNJWkUsIDAsIE5VTEwsIE5VTEwpOwogICAgICAgICB9CiAgICAgICAgIHdoaWxlKChsZW5ndGggPT0gLTEpICYmICgoZXJybm8gPT0gRUlOVFIpIHx8IChlcnJubyA9PSBFQUdBSU4pKSk7CiAKQEAgLTY4OCw3ICs2ODcsOCBAQAogCiAgICAgZG8KICAgICB7Ci0gICAgICAgbGVuZ3RoID0gcmVjdmZyb20oZmQsIChjaGFyICopIGRhdGEsIFNNVVhNQVhQS1RTSVpFLCBNU0dfUEVFSywgTlVMTCwgMCk7CisgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oZmQsIChjaGFyICopIGRhdGEsIFNNVVhNQVhQS1RTSVpFLCBNU0dfUEVFSywgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICB9CiAgICAgd2hpbGUoKGxlbmd0aCA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKTsKIApAQCAtNzE2LDcgKzcxNiw3IEBACiAgICAgZG8KICAgICB7CiAgICAgICAgbGVuZ3RoID0gdG1wX2xlbmd0aDsKLSAgICAgICBsZW5ndGggPSByZWN2ZnJvbShmZCwgKGNoYXIgKikgZGF0YSwgbGVuZ3RoLCAwLCBOVUxMLCAwKTsKKyAgICAgICBsZW5ndGggPSByZWN2ZnJvbShmZCwgKGNoYXIgKikgZGF0YSwgbGVuZ3RoLCAwLCBOVUxMLCBOVUxMKTsKICAgICB9CiAgICAgd2hpbGUoKGxlbmd0aCA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKTsKIApAQCAtNzQyLDggKzc0Miw4IEBACiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKICAgICB1X2NoYXIgICAgICAgICAqcHRyLCB0eXBlOwogCi0gICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcGR1X3Byb2Nlc3NdIFByb2Nlc3NpbmcgJWQgYnl0ZXNcbiIsCi0gICAgICAgICAgICAgICAgbGVuZ3RoKSk7CisgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcGR1X3Byb2Nlc3NdIFByb2Nlc3NpbmcgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgImQgYnl0ZXNcbiIsIGxlbmd0aCkpOwogCiAgICAgZXJyb3IgPSAwOwogICAgIHB0ciA9IGRhdGE7CkBAIC03ODUsNyArNzg1LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIFNNVVhfVFJBUDoKICAgICAgICAgICAgIHNubXBfbG9nKExPR19JTkZPLCAiR290IHRyYXAgZnJvbSBwZWVyIG9uIGZkICVkXG4iLCBmZCk7Ci0gICAgICAgICAgICBpZiAocHRyICE9IDApCisgICAgICAgICAgICBpZiAocHRyKQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcGR1X3Byb2Nlc3NdIGNhbGwgc211eF90cmFwX3Byb2Nlc3MuXG4iKSk7CiAgICAgICAgICAgICAgICBwdHIgPSBzbXV4X3RyYXBfcHJvY2VzcyhwdHIsICZsZW4pOwpAQCAtODI5LDggKzgyOSw4IEBACiAgICAgICAgIHJldHVybiAoKHB0ciArPSAqbGVuKSk7CiAgICAgfQogICAgIERFQlVHTVNHVEwoKCJzbXV4IiwKLSAgICAgICAgICAgICAgICAiW3NtdXhfb3Blbl9wcm9jZXNzXSB2ZXJzaW9uICVkLCBsZW4gJWQsIHR5cGUgJWRcbiIsCi0gICAgICAgICAgICAgICAgdmVyc2lvbiwgKmxlbiwgKGludCkgdHlwZSkpOworICAgICAgICAgICAgICAgICJbc211eF9vcGVuX3Byb2Nlc3NdIHZlcnNpb24gJWxkLCBsZW4gJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgInUsIHR5cGUgJWRcbiIsIHZlcnNpb24sICpsZW4sIChpbnQpIHR5cGUpKTsKIAogICAgIG9pZF9uYW1lX2xlbiA9IE1BWF9PSURfTEVOOwogICAgIGlmICgocHRyID0gYXNuX3BhcnNlX29iamlkKHB0ciwgbGVuLCAmdHlwZSwgb2lkX25hbWUsCkBAIC04NDQsOCArODQ0LDggQEAKICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBzbXV4IHBlZXI6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICBvaWRfcHJpbnQpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBsZW4gJWQsIHR5cGUgJWRcbiIsICpsZW4sCi0gICAgICAgICAgICAgICAgICAgIChpbnQpIHR5cGUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBsZW4gJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICJ1LCB0eXBlICVkXG4iLCAqbGVuLCAoaW50KSB0eXBlKSk7CiAgICAgfQogCiAgICAgc3RyaW5nX2xlbiA9IFNNVVhNQVhTVFJMRU47CkBAIC04NjEsOCArODYxLDggQEAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIHN0cmluZ19sZW47IGkrKykKICAgICAgICAgICAgIERFQlVHTVNHKCgic211eCIsICIlYyIsIGRlc2NyW2ldKSk7CiAgICAgICAgIERFQlVHTVNHKCgic211eCIsICJcbiIpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBsZW4gJWQsIHR5cGUgJWRcbiIsICpsZW4sCi0gICAgICAgICAgICAgICAgICAgIChpbnQpIHR5cGUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfb3Blbl9wcm9jZXNzXSBsZW4gJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICJ1LCB0eXBlICVkXG4iLCAqbGVuLCAoaW50KSB0eXBlKSk7CiAgICAgfQogICAgIGRlc2NyW3N0cmluZ19sZW5dID0gMDsKIApAQCAtODc5LDggKzg3OSw4IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBzdHJpbmdfbGVuOyBpKyspCiAgICAgICAgICAgICBERUJVR01TRygoInNtdXgiLCAiJWMiLCBwYXNzd2RbaV0pKTsKICAgICAgICAgREVCVUdNU0coKCJzbXV4IiwgIlxuIikpOwotICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIGxlbiAlZCwgdHlwZSAlZFxuIiwgKmxlbiwKLSAgICAgICAgICAgICAgICAgICAgKGludCkgdHlwZSkpOworICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9vcGVuX3Byb2Nlc3NdIGxlbiAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgInUsIHR5cGUgJWRcbiIsICpsZW4sIChpbnQpIHR5cGUpKTsKICAgICB9CiAgICAgcGFzc3dkW3N0cmluZ19sZW5dID0gJ1wwJzsKICAgICBpZiAoIXNtdXhfYXV0aF9wZWVyKG9pZF9uYW1lLCBvaWRfbmFtZV9sZW4sIHBhc3N3ZCwgZmQpKSB7CkBAIC05MjYsMTAgKzkyNiwyNyBAQAogc211eF9hdXRoX3BlZXIob2lkICogbmFtZSwgc2l6ZV90IG5hbWVsZW4sIGNoYXIgKnBhc3N3ZCwgaW50IGZkKQogewogICAgIGludCAgICAgICAgICAgICBpOworICAgIGNoYXIgICAgICAgICAgICBvaWRfcHJpbnRbU01VWE1BWFNUUkxFTl07CisKKyAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKKyAgICAgICAgc25wcmludF9vYmppZChvaWRfcHJpbnQsIHNpemVvZihvaWRfcHJpbnQpLCBuYW1lLCBuYW1lbGVuKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNtdXg6YXV0aCIsICJbc211eF9hdXRoX3BlZXJdIEF1dGhvcml6aW5nOiAlcywgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIG9pZF9wcmludCwgcGFzc3dkKSk7CisgICAgfQogCiAgICAgZm9yIChpID0gMDsgaSA8IG5hdXRoczsgaSsrKSB7CisgICAgICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgeworICAgICAgICAgICAgc25wcmludF9vYmppZChvaWRfcHJpbnQsIHNpemVvZihvaWRfcHJpbnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICBBdXRoc1tpXS0+c2Ffb2lkLCBBdXRoc1tpXS0+c2Ffb2lkX2xlbik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic211eDphdXRoIiwgIltzbXV4X2F1dGhfcGVlcl0gQ2hlY2tpbmcgT0lEOiAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBvaWRfcHJpbnQsIGkpKTsKKyAgICAgICAgfQogICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZShBdXRoc1tpXS0+c2Ffb2lkLCBBdXRoc1tpXS0+c2Ffb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbmFtZWxlbikgPT0gMCkgeworICAgICAgICAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNtdXg6YXV0aCIsICJbc211eF9hdXRoX3BlZXJdIENoZWNraW5nIFAvVzogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIEF1dGhzW2ldLT5zYV9wYXNzd2QsIEF1dGhzW2ldLT5zYV9hY3RpdmVfZmQpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICghKHN0cmNtcChBdXRoc1tpXS0+c2FfcGFzc3dkLCBwYXNzd2QpKSAmJgogICAgICAgICAgICAgICAgIChBdXRoc1tpXS0+c2FfYWN0aXZlX2ZkID09IC0xKSkgewogICAgICAgICAgICAgICAgIC8qCkBAIC05NjYsNyArOTgzLDcgQEAKICAgICB9CiAKICAgICBERUJVR01TR1RMKCgic211eCIsCi0gICAgICAgICAgICAgICAgIltzbXV4X2Nsb3NlX3Byb2Nlc3NdIGNsb3NlIGZyb20gcGVlciBvbiBmZCAlZCByZWFzb24gJWRcbiIsCisgICAgICAgICAgICAgICAgIltzbXV4X2Nsb3NlX3Byb2Nlc3NdIGNsb3NlIGZyb20gcGVlciBvbiBmZCAlZCByZWFzb24gJWxkXG4iLAogICAgICAgICAgICAgICAgIGZkLCBkb3duKSk7CiAgICAgc211eF9wZWVyX2NsZWFudXAoZmQpOwogCkBAIC05OTgsNyArMTAxNSw3IEBACiAgICAgICAgIHNtdXhfc2VuZF9ycnNwKHNkLCAtMSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9ycmVxX3Byb2Nlc3NdIHByaW9yaXR5ICVkXG4iLCBwcmlvcml0eSkpOworICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3JyZXFfcHJvY2Vzc10gcHJpb3JpdHkgJWxkXG4iLCBwcmlvcml0eSkpOwogCiAgICAgaWYgKChwdHIgPSBhc25fcGFyc2VfaW50KHB0ciwgbGVuLCAmdHlwZSwgJm9wZXJhdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9wZXJhdGlvbikpKSA9PSBOVUxMKSB7CkBAIC0xMDA3LDcgKzEwMjQsNyBAQAogICAgICAgICBzbXV4X3NlbmRfcnJzcChzZCwgLTEpOwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9Ci0gICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfcnJlcV9wcm9jZXNzXSBvcGVyYXRpb24gJWRcbiIsIG9wZXJhdGlvbikpOworICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3JyZXFfcHJvY2Vzc10gb3BlcmF0aW9uICVsZFxuIiwgb3BlcmF0aW9uKSk7CiAKICAgICBpZiAob3BlcmF0aW9uID09IFNNVVhfUkVHT1BfREVMRVRFKSB7CiAgICAgICAgIC8qCkBAIC0xMTQ2LDcgKzExNjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCBucnB0ci0+c3JfbmFtZSwgbnJwdHItPnNyX25hbWVfbGVuKQogICAgICAgICAgICAgICAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CiAJCURFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3JyZXFfcHJvY2Vzc10gRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YnRyZWVcbiIpKTsKLQkJc211eF9saXN0X2RldGFjaCgmQWN0aXZlUmVncywgJm5ycHRyKTsKKwkJc211eF9saXN0X2RldGFjaCgmQWN0aXZlUmVncywgbnJwdHIpOwogCQlmcmVlKG5ycHRyKTsKIAkJc211eF9zZW5kX3Jyc3Aoc2QsIC0xKTsKIAkJcmV0dXJuIE5VTEw7CkBAIC0xMjQ4LDUwICsxMjY1LDYxIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBwcmV2ID0gTlVMTDsKLSAgICBmb3IgKHJwdHIgPSAqaGVhZDsgcnB0ci0+c3JfbmV4dDsgcnB0ciA9IHJwdHItPnNyX25leHQpIHsKKyAgICBmb3IgKHJwdHIgPSAqaGVhZDsgcnB0cjsgcnB0ciA9IHJwdHItPnNyX25leHQpIHsKICAgICAgICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShhZGQtPnNyX25hbWUsIGFkZC0+c3JfbmFtZV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnB0ci0+c3JfbmFtZSwgcnB0ci0+c3JfbmFtZV9sZW4pOwotICAgICAgICBpZiAoKHJlc3VsdCA9PSAwKSAmJiAoYWRkLT5zcl9wcmlvcml0eSA9PSBycHRyLT5zcl9wcmlvcml0eSkpIHsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSAwKSB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogc2FtZSB0cmVlLCBzYW1lIHByaSwgbm9wZSAKKyAgICAgICAgICAgICAqIFNhbWUgdHJlZS4uLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBpZiAoYWRkLT5zcl9wcmlvcml0eSA9PSBycHRyLT5zcl9wcmlvcml0eSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogLi4uIHNhbWUgcHJpIDogbm9wZSAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9IGVsc2UgaWYgKGFkZC0+c3JfcHJpb3JpdHkgPCBycHRyLT5zcl9wcmlvcml0eSkgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogLi4uIGxvd2VyIHByaSA6IGluc2VydCBhbmQgcmV0dXJuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgYWRkLT5zcl9uZXh0ID0gcnB0cjsKKyAgICAgICAgICAgICAgICBpZiAoIHByZXYgKSB7IHByZXYtPnNyX25leHQgPSBhZGQ7IH0KKyAgICAgICAgICAgICAgICBlbHNlICAgICAgICB7ICAgICAgICAgKmhlYWQgPSBhZGQ7IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyNpZmRlZiBYWFgKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiAuLi4gaGlnaGVyIHByaSA6IHB1dCBhZnRlciAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBhZGQtPnNyX25leHQgID0gcnB0ci0+c3JfbmV4dDsKKyAgICAgICAgICAgICAgICBycHRyLT5zcl9uZXh0ID0gYWRkOworI2VuZGlmCisgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSBpZiAocmVzdWx0IDwgMCkgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIHRoaXMgY2FuIG9ubHkgaGFwcGVuIGlmIHdlIGdvIGJlZm9yZSB0aGUgaGVhZCAKKyAgICAgICAgICAgICAqIEVhcmxpZXIgdHJlZSA6IGluc2VydCBhbmQgcmV0dXJuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGFkZC0+c3JfbmV4dCA9ICpoZWFkOwotICAgICAgICAgICAgKmhlYWQgPSBhZGQ7CisgICAgICAgICAgICBhZGQtPnNyX25leHQgPSBycHRyOworICAgICAgICAgICAgaWYgKCBwcmV2ICkgeyBwcmV2LT5zcl9uZXh0ID0gYWRkOyB9CisgICAgICAgICAgICBlbHNlICAgICAgICB7ICAgICAgICAgKmhlYWQgPSBhZGQ7IH0KICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9IGVsc2UgaWYgKChzbm1wX29pZF9jb21wYXJlKGFkZC0+c3JfbmFtZSwgYWRkLT5zcl9uYW1lX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBycHRyLT5zcl9uZXh0LT5zcl9uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwdHItPnNyX25leHQtPnNyX25hbWVfbGVuKSkgPCAwKSB7CisjaWZkZWYgWFhYCisgICAgICAgIH0gZWxzZSAgewogICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGluc2VydCBoZXJlIAorICAgICAgICAgICAgICogTGF0ZXIgdHJlZSA6IHB1dCBhZnRlcgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBhZGQtPnNyX25leHQgPSBycHRyLT5zcl9uZXh0OwogICAgICAgICAgICAgcnB0ci0+c3JfbmV4dCA9IGFkZDsKICAgICAgICAgICAgIHJldHVybiAwOworI2VuZGlmCiAgICAgICAgIH0KICAgICAgICAgcHJldiA9IHJwdHI7CiAgICAgfQogICAgIC8qCi0gICAgICogY29tcGFyZSB0aGUgbGFzdCBvbmUgCisgICAgICogT3RoZXJ3aXNlLCB0aGlzIGVudHJ5IG11c3QgY29tZSBsYXN0CiAgICAgICovCi0gICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShhZGQtPnNyX25hbWUsIGFkZC0+c3JfbmFtZV9sZW4sIHJwdHItPnNyX25hbWUsIHJwdHItPnNyX25hbWVfbGVuKTsKLSAgICBpZiAoKHJlc3VsdCA9PSAwKSAmJiBhZGQtPnNyX3ByaW9yaXR5ID09IHJwdHItPnNyX3ByaW9yaXR5KQotICAgICAgICByZXR1cm4gLTE7Ci0gICAgZWxzZSAgaWYgKHJlc3VsdCA8IDAgKSB7Ci0gICAgICAgIGFkZC0+c3JfbmV4dCA9IHJwdHI7Ci0gICAgICAgIGlmICggcHJldiApIHsKLSAgICAgICAgICAgIHByZXYtPnNyX25leHQgPSBhZGQ7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqaGVhZCA9IGFkZDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJwdHItPnNyX25leHQgPSBhZGQ7Ci0gICAgICAgIGFkZC0+c3JfbmV4dCA9IE5VTEw7Ci0gICAgfQorICAgIGlmICggcHJldiApIHsgcHJldi0+c3JfbmV4dCA9IGFkZDsgfQorICAgIGVsc2UgICAgICAgIHsgICAgICAgICAqaGVhZCA9IGFkZDsgfQorICAgIGFkZC0+c3JfbmV4dCA9IE5VTEw7CiAgICAgcmV0dXJuIDA7CiB9CiAKQEAgLTEzMzcsNyArMTM2NSw3IEBACiAgICAgICAgICAgICAgICAgICBzaXplX3QgKiByZXR1cm5fbGVuLCB1X2NoYXIgKiByZXR1cm5fdHlwZSwgaW50IHNkKQogewogICAgIHVfY2hhciAgICAgICAgICBwYWNrZXRbU01VWE1BWFBLVFNJWkVdLCAqcHRyLCByZXN1bHRbU01VWE1BWFBLVFNJWkVdOwotICAgIGludCAgICAgICAgICAgICBsZW5ndGggPSBTTVVYTUFYUEtUU0laRTsKKyAgICBzc2l6ZV90ICAgICAgICAgbGVuZ3RoID0gU01VWE1BWFBLVFNJWkU7CiAgICAgaW50ICAgICAgICAgICAgIHRtcF9sZW5ndGg7CiAgICAgdV9jaGFyICAgICAgICAgIHR5cGU7CiAgICAgc2l6ZV90ICAgICAgICAgIHBhY2tldF9sZW47CkBAIC0xMzUzLDcgKzEzODEsNyBAQAogICAgICAgICB0eXBlID0gU01VWF9HRVRORVhUOwogCiAgICAgaWYgKHNtdXhfYnVpbGQodHlwZSwgc211eF9yZXFpZCwgb2JqaWQsIGxlbiwgMCwgTlVMTCwKLSAgICAgICAgICAgICAgICAgICAqbGVuLCBwYWNrZXQsICZsZW5ndGgpIDwgMCkgeworICAgICAgICAgICAgICAgICAgICpsZW4sIHBhY2tldCwgKHNpemVfdCAqKSAmbGVuZ3RoKSA8IDApIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIltzbXV4X3NubXBfcHJvY2Vzc106IHNtdXhfYnVpbGQgZmFpbGVkXG4iKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtMTM2NiwxNCArMTM5NCwxNSBAQAogICAgIH0KIAogICAgIERFQlVHTVNHVEwoKCJzbXV4IiwKLSAgICAgICAgICAgICAgICAiW3NtdXhfc25tcF9wcm9jZXNzXSBTZW50ICVkIHJlcXVlc3QgdG8gcGVlcjsgJWQgYnl0ZXNcbiIsCisgICAgICAgICAgICAgICAgIltzbXV4X3NubXBfcHJvY2Vzc10gU2VudCAlZCByZXF1ZXN0IHRvIHBlZXI7ICUiIE5FVFNOTVBfUFJJeiAiZCBieXRlc1xuIiwKICAgICAgICAgICAgICAgICAoaW50KSB0eXBlLCBsZW5ndGgpKTsKIAogICAgIHdoaWxlICgxKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHBlZWsgYXQgd2hhdCdzIHJlY2VpdmVkIAogICAgICAgICAgKi8KLSAgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oc2QsIChjaGFyICopIHJlc3VsdCwgU01VWE1BWFBLVFNJWkUsIE1TR19QRUVLLCBOVUxMLCAwKTsKKyAgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oc2QsIChjaGFyICopIHJlc3VsdCwgU01VWE1BWFBLVFNJWkUsIE1TR19QRUVLLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKICAgICAgICAgaWYgKGxlbmd0aCA8PSAwKSB7CiAgICAgICAgICAgICBpZiAoKGxlbmd0aCA9PSAtMSkgJiYgKChlcnJubyA9PSBFSU5UUikgfHwgKGVycm5vID09IEVBR0FJTikpKQogICAgICAgICAgICAgewpAQCAtMTM4OCw3ICsxNDE3LDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbXV4IiwgIltzbXV4X3NubXBfcHJvY2Vzc10gUGVla2VkIGF0ICVkIGJ5dGVzXG4iLAorICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9zbm1wX3Byb2Nlc3NdIFBlZWtlZCBhdCAlIiBORVRTTk1QX1BSSXogImQgYnl0ZXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpOwogICAgICAgICBERUJVR0RVTVBTRVRVUCgic211eF9zbm1wX3Byb2Nlc3MiLCByZXN1bHQsIGxlbmd0aCk7CiAKQEAgLTE0MTIsNyArMTQ0MSw3IEBACiAgICAgICAgIGRvCiAgICAgICAgIHsKICAgICAgICAgICAgbGVuZ3RoID0gdG1wX2xlbmd0aDsKLSAgICAgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oc2QsIChjaGFyICopIHJlc3VsdCwgbGVuZ3RoLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgbGVuZ3RoID0gcmVjdmZyb20oc2QsIChjaGFyICopIHJlc3VsdCwgbGVuZ3RoLCAwLCBOVUxMLCBOVUxMKTsKICAgICAgICAgfQogICAgICAgICB3aGlsZSgobGVuZ3RoID09IC0xKSAmJiAoKGVycm5vID09IEVJTlRSKSB8fCAoZXJybm8gPT0gRUFHQUlOKSkpOwogCkBAIC0xNDIzLDE0ICsxNDUyLDE0IEBACiAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfc25tcF9wcm9jZXNzXSBSZWNlaXZlZCAlZCBieXRlc1xuIiwKKyAgICAgICAgREVCVUdNU0dUTCgoInNtdXgiLCAiW3NtdXhfc25tcF9wcm9jZXNzXSBSZWNlaXZlZCAlIiBORVRTTk1QX1BSSXogImQgYnl0ZXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpOwogCiAgICAgICAgIGlmIChyZXN1bHRbMF0gPT0gU01VWF9UUkFQKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic211eCIsICJbc211eF9zbm1wX3Byb2Nlc3NdIFJlY2VpdmVkIHRyYXBcbiIpKTsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19JTkZPLCAiR290IHRyYXAgZnJvbSBwZWVyIG9uIGZkICVkXG4iLCBzZCk7Ci0gICAgICAgICAgICBwdHIgPSBhc25fcGFyc2VfaGVhZGVyKHJlc3VsdCwgJmxlbmd0aCwgJnR5cGUpOwotICAgICAgICAgICAgc211eF90cmFwX3Byb2Nlc3MocHRyLCAmbGVuZ3RoKTsKKyAgICAgICAgICAgIHB0ciA9IGFzbl9wYXJzZV9oZWFkZXIocmVzdWx0LCAoc2l6ZV90ICopICZsZW5ndGgsICZ0eXBlKTsKKyAgICAgICAgICAgIHNtdXhfdHJhcF9wcm9jZXNzKHB0ciwgKHNpemVfdCAqKSAmbGVuZ3RoKTsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIGdvIGFuZCBwZWVrIGF0IHJlY2VpdmVkIGRhdGEgYWdhaW4gCkBAIC0xNDk2LDcgKzE1MjUsNyBAQAogICAgICAqIFhYWCBIb3cgdG8gc2VuZCBzb21ldGhpbmcgaW50ZWxsaWdlbnQgYmFjayBpbiBjYXNlIG9mIGFuIGVycm9yIAogICAgICAqLwogICAgIERFQlVHTVNHVEwoKCJzbXV4IiwKLSAgICAgICAgICAgICAgICAiW3NtdXhfcGFyc2VdIE1lc3NhZ2UgdHlwZSAlZCwgcmVxaWQgJWQsIGVycnN0YXQgJWQsIFxuXHRlcnJpbmRleCAlZFxuIiwKKyAgICAgICAgICAgICAgICAiW3NtdXhfcGFyc2VdIE1lc3NhZ2UgdHlwZSAlZCwgcmVxaWQgJWxkLCBlcnJzdGF0ICVsZCwgXG5cdGVycmluZGV4ICVsZFxuIiwKICAgICAgICAgICAgICAgICAoaW50KSB0eXBlLCByZXFpZCwgZXJyc3RhdCwgZXJyaW5kZXgpKTsKICAgICBpZiAocHRyID09IE5VTEwgfHwgZXJyc3RhdCAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTE1NTYsOCArMTU4NSw4IEBACiAgICAgICovCiAgICAgbGVuID0gU01VWE1BWFBLVFNJWkU7CiAgICAgREVCVUdNU0dUTCgoInNtdXgiLAotICAgICAgICAgICAgICAgICJbc211eF9wYXJzZV92YXJdIEFzbiBjb2RlZCBsZW4gb2YgdmFyICVkLCB0eXBlICVkXG4iLAotICAgICAgICAgICAgICAgIHZhcl92YWxfbGVuLCAoaW50KSAqdmFydHlwZSkpOworICAgICAgICAgICAgICAgICJbc211eF9wYXJzZV92YXJdIEFzbiBjb2RlZCBsZW4gb2YgdmFyICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICJ1LCB0eXBlICVkXG4iLCB2YXJfdmFsX2xlbiwgKGludCkgKnZhcnR5cGUpKTsKIAogICAgIHN3aXRjaCAoKHNob3J0KSAqdmFydHlwZSkgewogICAgIGNhc2UgQVNOX0lOVEVHRVI6CkBAIC0xOTYyLDcgKzE5OTEsNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFhYWCAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICAgICAgaWYgKGxlbiA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgdmFyX3ZhbF9sZW4gPSBTTVVYTUFYU1RSTEVOOwogICAgICAgICAgICAgYXNuX3BhcnNlX3N0cmluZyh2YXJfdmFsLCAmbWF4bGVuLCAmdmFydHlwZSwKQEAgLTE5ODYsNyArMjAxNSw3IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogWFhYIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgICBpZiAobGVuID09IE5VTEwpCiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB2YXJfdmFsX2xlbiA9IFNNVVhNQVhTVFJMRU47CiAgICAgICAgICAgICBhc25fcGFyc2VfYml0c3RyaW5nKHZhcl92YWwsICZtYXhsZW4sICZ2YXJ0eXBlLApAQCAtMjA3MCw3ICsyMDk5LDcgQEAKICAgIHJldHVybigwKTsKIH0KIAotaW50IHNtdXhfc25tcF9zZWxlY3RfbGlzdF9nZXRfbGVuZ3RoKCkKK2ludCBzbXV4X3NubXBfc2VsZWN0X2xpc3RfZ2V0X2xlbmd0aCh2b2lkKQogewogICAgcmV0dXJuKHNkbGVuKTsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NtdXgvc211eC5oIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgKaW5kZXggZDE1MWY3ZC4uODhiOGEzZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbXV4LmgKQEAgLTIsNiArMiwxMSBAQAogICogU211eCBtb2R1bGUgYXV0aG9yZWQgYnkgUm9oaXQgRHViZS4KICAqIFJld3JpdHRlbiBieSBOaWNrIEFtYXRvIDxuYWFtYXRvQG1lcml0Lm5ldD4uCiAgKi8KKworI2lmbmRlZiBORVRTTk1QX1RSQU5TUE9SVF9JUFY0QkFTRV9ET01BSU4KK2NvbmZpZ19lcnJvcihzbXV4L3NtdXggZGVwZW5kcyBvbiB0aGUgSVB2NEJhc2UgdHJhbnNwb3J0IGRvbWFpbikKKyNlbmRpZgorCiBjb25maWdfYmVsb25nc19pbihhZ2VudF9tb2R1bGUpCiAKICNkZWZpbmUgU01VWFBPUlQgMTk5CkBAIC02NSw4ICs3MCw2IEBACiBleHRlcm4gaW50ICAgICAgc211eF9wcm9jZXNzKGludCk7CiBleHRlcm4gdm9pZCAgICAgc211eF9wYXJzZV9wZWVyX2F1dGgoY29uc3QgY2hhciAqLCBjaGFyICopOwogZXh0ZXJuIHZvaWQgICAgIHNtdXhfZnJlZV9wZWVyX2F1dGgodm9pZCk7Ci1leHRlcm4gdm9pZCAgICAgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyhpbnQsIGludCwgb2lkICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsKIAogLyogQWRkIHNvY2tldC1mZCB0byBsaXN0ICovCiBpbnQgc211eF9zbm1wX3NlbGVjdF9saXN0X2FkZChpbnQgc2QpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX2JncC5jCmluZGV4IDNlNWQ1Y2UuLjE2YjAxODUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9iZ3AuYworKysgYi9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfYmdwLmMKQEAgLTUyLDMyICs1Miw1NSBAQAogI2luY2x1ZGUgInNubXBfYmdwLmgiCiAKIHN0cnVjdCB2YXJpYWJsZTEzIGJncF92YXJpYWJsZXNbXSA9IHsKLSAgICB7QkdQVkVSU0lPTiwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9iZ3AsIDEsIHsxfX0sCi0gICAge0JHUExPQ0FMQVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMSwgezJ9fSwKLSAgICB7QkdQSURFTlRJRklFUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9iZ3AsIDEsIHs0fX0sCi0gICAge0JHUFBFRVJJREVOVElGSUVSLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDF9fSwKLSAgICB7QkdQUEVFUlNUQVRFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAyfX0sCi0gICAge0JHUFBFRVJBRE1JTlNUQVRVUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgM319LAotICAgIHtCR1BQRUVSTkVHT1RJQVRFRFZFUlNJT04sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDR9fSwKLSAgICB7QkdQUEVFUkxPQ0FMQUREUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCA1fX0sCi0gICAge0JHUFBFRVJMT0NBTFBPUlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDZ9fSwKLSAgICB7QkdQUEVFUlJFTU9URUFERFIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgN319LAotICAgIHtCR1BQRUVSUkVNT1RFUE9SVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgOH19LAotICAgIHtCR1BQRUVSUkVNT1RFQVMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDl9fSwKLSAgICB7QkdQUEVFUklOVVBEQVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7MywgMSwgMTB9fSwKLSAgICB7QkdQUEVFUk9VVFVQREFURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDExfX0sCi0gICAge0JHUFBFRVJJTlRPVEFMTUVTU0FHRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDEyfX0sCi0gICAge0JHUFBFRVJPVVRUT1RBTE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHszLCAxLCAxM319LAotICAgIHtCR1BQRUVSTEFTVEVSUk9SLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2JncCwgMywgezMsIDEsIDE0fX0sCi0gICAge0JHUFBBVEhBVFRSUEVFUiwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9iZ3AsIDMsIHs1LCAxLCAxfX0sCi0gICAge0JHUFBBVEhBVFRSREVTVE5FVFdPUkssIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfYmdwLCAzLCB7NSwgMSwgMn19LAotICAgIHtCR1BQQVRIQVRUUk9SSUdJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7NSwgMSwgM319LAotICAgIHtCR1BQQVRIQVRUUkFTUEFUSCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9iZ3AsIDMsIHs1LCAxLCA0fX0sCi0gICAge0JHUFBBVEhBVFRSTkVYVEhPUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7NSwgMSwgNX19LAotICAgIHtCR1BQQVRIQVRUUklOVEVSQVNNRVRSSUMsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfYmdwLCAzLCB7NSwgMSwgNn19CisgICAge0JHUFZFUlNJT04sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAxLCB7MX19LAorICAgIHtCR1BMT0NBTEFTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDEsIHsyfX0sCisgICAge0JHUElERU5USUZJRVIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAxLCB7NH19LAorICAgIHtCR1BQRUVSSURFTlRJRklFUiwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAxfX0sCisgICAge0JHUFBFRVJTVEFURSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMn19LAorICAgIHtCR1BQRUVSQURNSU5TVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDN9fSwKKyAgICB7QkdQUEVFUk5FR09USUFURURWRVJTSU9OLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCA0fX0sCisgICAge0JHUFBFRVJMT0NBTEFERFIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgNX19LAorICAgIHtCR1BQRUVSTE9DQUxQT1JULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCA2fX0sCisgICAge0JHUFBFRVJSRU1PVEVBRERSLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDd9fSwKKyAgICB7QkdQUEVFUlJFTU9URVBPUlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDh9fSwKKyAgICB7QkdQUEVFUlJFTU9URUFTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCA5fX0sCisgICAge0JHUFBFRVJJTlVQREFURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezMsIDEsIDEwfX0sCisgICAge0JHUFBFRVJPVVRVUERBVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAxMX19LAorICAgIHtCR1BQRUVSSU5UT1RBTE1FU1NBR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAxMn19LAorICAgIHtCR1BQRUVST1VUVE9UQUxNRVNTQUdFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7MywgMSwgMTN9fSwKKyAgICB7QkdQUEVFUkxBU1RFUlJPUiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9iZ3AsIDMsIHszLCAxLCAxNH19LAorICAgIHtCR1BQQVRIQVRUUlBFRVIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7NSwgMSwgMX19LAorICAgIHtCR1BQQVRIQVRUUkRFU1RORVRXT1JLLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezUsIDEsIDJ9fSwKKyAgICB7QkdQUEFUSEFUVFJPUklHSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezUsIDEsIDN9fSwKKyAgICB7QkdQUEFUSEFUVFJBU1BBVEgsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfYmdwLCAzLCB7NSwgMSwgNH19LAorICAgIHtCR1BQQVRIQVRUUk5FWFRIT1AsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezUsIDEsIDV9fSwKKyAgICB7QkdQUEFUSEFUVFJJTlRFUkFTTUVUUklDLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2JncCwgMywgezUsIDEsIDZ9fQogfTsKIAotb2lkICAgICAgICAgICAgIGJncF92YXJpYWJsZXNfb2lkW10gPSB7IE1JQiwgMTUgfTsKK29pZCAgICAgICAgICAgICBiZ3BfdmFyaWFibGVzX29pZFtdID0geyBORVRTTk1QX01JQjJfT0lELCAxNSB9OwogCiB2b2lkCiBpbml0X3NubXBfYmRwKHZvaWQpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX29zcGYuYwppbmRleCA0ZjQ3NThjLi43M2YwZTQzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfb3NwZi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9vc3BmLmMKQEAgLTU3LDEyOSArNTcsMjI1IEBACiBleHRlcm4gdV9jaGFyICAgc211eF90eXBlOwogCiBzdHJ1Y3QgdmFyaWFibGUxMyBvc3BmX3ZhcmlhYmxlc1tdID0gewotICAgIHtvc3BmUm91dGVySWQsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxLCAxLCAxfX0sCi0gICAge29zcGZBZG1pblN0YXQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MSwgMSwgMn19LAotICAgIHtvc3BmVmVyc2lvbk51bWJlciwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEsIDEsIDN9fSwKLSAgICB7b3NwZkFyZWFCZHJSdHJTdGF0dXMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxLCAxLCA0fX0sCi0gICAge29zcGZBU0JkclJ0clN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxLCAxLCA1fX0sCi0gICAge29zcGZFeHRlcm5Mc2FDb3VudCwgQVNOX0dBVUdFLCBST05MWSwgdmFyX29zcGYsIDMsIHsxLCAxLCA2fX0sCi0gICAge29zcGZFeHRlcm5Mc2FDa3N1bVN1bSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEsIDEsIDd9fSwKLSAgICB7b3NwZlRPU1N1cHBvcnQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MSwgMSwgOH19LAotICAgIHtvc3BmT3JpZ2luYXRlTmV3THNhcywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEsIDEsIDl9fSwKLSAgICB7b3NwZlJ4TmV3THNhcywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEsIDEsIDEwLCAwfX0sCi0gICAge29zcGZFeHRMc2RiTGltaXQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MSwgMSwgMTF9fSwKLSAgICB7b3NwZk11bHRpY2FzdEV4dGVuc2lvbnMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLAotICAgICB7MSwgMSwgMTJ9fSwKLSAgICB7b3NwZkFyZWFJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MiwgMSwgMX19LAotICAgIHtvc3BmQXV0aFR5cGUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MiwgMSwgMn19LAotICAgIHtvc3BmSW1wb3J0QXNFeHRlcm4sIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MiwgMSwgM319LAotICAgIHtvc3BmU3BmUnVucywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezIsIDEsIDR9fSwKLSAgICB7b3NwZkFyZWFCZHJSdHJDb3VudCwgQVNOX0dBVUdFLCBST05MWSwgdmFyX29zcGYsIDMsIHsyLCAxLCA1fX0sCi0gICAge29zcGZBc0JkclJ0ckNvdW50LCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfb3NwZiwgMywgezIsIDEsIDZ9fSwKLSAgICB7b3NwZkFyZWFMc2FDb3VudCwgQVNOX0dBVUdFLCBST05MWSwgdmFyX29zcGYsIDMsIHsyLCAxLCA3fX0sCi0gICAge29zcGZBcmVhTHNhQ2tzdW1TdW0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsyLCAxLCA4fX0sCi0gICAge29zcGZBcmVhU3VtbWFyeSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsyLCAxLCA5fX0sCi0gICAge29zcGZBcmVhU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezIsIDEsIDEwfX0sCi0gICAge29zcGZTdHViQXJlYUlkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHszLCAxLCAxfX0sCi0gICAge29zcGZTdHViVE9TLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MywgMSwgMn19LAotICAgIHtvc3BmU3R1Yk1ldHJpYywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHszLCAxLCAzfX0sCi0gICAge29zcGZTdHViU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezMsIDEsIDR9fSwKLSAgICB7b3NwZlN0dWJNZXRyaWNUeXBlLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezMsIDEsIDV9fSwKLSAgICB7b3NwZkxzZGJBcmVhSWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDF9fSwKLSAgICB7b3NwZkxzZGJUeXBlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgMn19LAotICAgIHtvc3BmTHNkYkxzaWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDN9fSwKLSAgICB7b3NwZkxzZGJSb3V0ZXJJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgNH19LAotICAgIHtvc3BmTHNkYlNlcXVlbmNlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7NCwgMSwgNX19LAotICAgIHtvc3BmTHNkYkFnZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDZ9fSwKLSAgICB7b3NwZkxzZGJDaGVja3N1bSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezQsIDEsIDd9fSwKLSAgICB7b3NwZkxzZGJBZHZlcnRpc2VtZW50LCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX29zcGYsIDMsIHs0LCAxLCA4fX0sCi0gICAge29zcGZBcmVhUmFuZ2VBcmVhSWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezUsIDEsIDF9fSwKLSAgICB7b3NwZkFyZWFSYW5nZU5ldCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NSwgMSwgMn19LAotICAgIHtvc3BmQXJlYVJhbmdlTWFzaywgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfb3NwZiwgMywgezUsIDEsIDN9fSwKLSAgICB7b3NwZkFyZWFSYW5nZVN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs1LCAxLCA0fX0sCi0gICAge29zcGZBcmVhUmFuZ2VFZmZlY3QsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NSwgMSwgNX19LAotICAgIHtvc3BmSG9zdElwQWRkcmVzcywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NiwgMSwgMX19LAotICAgIHtvc3BmSG9zdFRPUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezYsIDEsIDJ9fSwKLSAgICB7b3NwZkhvc3RNZXRyaWMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NiwgMSwgM319LAotICAgIHtvc3BmSG9zdFN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs2LCAxLCA0fX0sCi0gICAge29zcGZIb3N0QXJlYUlELCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs2LCAxLCA1fX0sCi0gICAge29zcGZJZklwQWRkcmVzcywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7NywgMSwgMX19LAotICAgIHtvc3BmQWRkcmVzc0xlc3NJZiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezcsIDEsIDJ9fSwKLSAgICB7b3NwZklmQXJlYUlkLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgM319LAotICAgIHtvc3BmSWZUeXBlLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDR9fSwKLSAgICB7b3NwZklmQWRtaW5TdGF0LCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDV9fSwKLSAgICB7b3NwZklmUnRyUHJpb3JpdHksIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgNn19LAotICAgIHtvc3BmSWZUcmFuc2l0RGVsYXksIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgN319LAotICAgIHtvc3BmSWZSZXRyYW5zSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgOH19LAotICAgIHtvc3BmSWZIZWxsb0ludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDl9fSwKLSAgICB7b3NwZklmUnRyRGVhZEludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezcsIDEsIDEwfX0sCi0gICAge29zcGZJZlBvbGxJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxMX19LAotICAgIHtvc3BmSWZTdGF0ZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezcsIDEsIDEyfX0sCi0gICAge29zcGZJZkRlc2lnbmF0ZWRSb3V0ZXIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywKLSAgICAgezcsIDEsIDEzfX0sCi0gICAge29zcGZJZkJhY2t1cERlc2lnbmF0ZWRSb3V0ZXIsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywKLSAgICAgezcsIDEsIDE0fX0sCi0gICAge29zcGZJZkV2ZW50cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezcsIDEsIDE1fX0sCi0gICAge29zcGZJZkF1dGhLZXksIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs3LCAxLCAxNn19LAotICAgIHtvc3BmSWZTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7NywgMSwgMTd9fSwKLSAgICB7b3NwZklmTXVsdGljYXN0Rm9yd2FyZGluZywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsCi0gICAgIHs3LCAxLCAxOH19LAotICAgIHtvc3BmSWZNZXRyaWNJcEFkZHJlc3MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezgsIDEsIDF9fSwKLSAgICB7b3NwZklmTWV0cmljQWRkcmVzc0xlc3NJZiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywKLSAgICAgezgsIDEsIDJ9fSwKLSAgICB7b3NwZklmTWV0cmljVE9TLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7OCwgMSwgM319LAotICAgIHtvc3BmSWZNZXRyaWNWYWx1ZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs4LCAxLCA0fX0sCi0gICAge29zcGZJZk1ldHJpY1N0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs4LCAxLCA1fX0sCi0gICAge29zcGZWaXJ0SWZBcmVhSWQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywgezksIDEsIDF9fSwKLSAgICB7b3NwZlZpcnRJZk5laWdoYm9yLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHs5LCAxLCAyfX0sCi0gICAge29zcGZWaXJ0SWZUcmFuc2l0RGVsYXksIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7OSwgMSwgM319LAotICAgIHtvc3BmVmlydElmUmV0cmFuc0ludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywKLSAgICAgezksIDEsIDR9fSwKLSAgICB7b3NwZlZpcnRJZkhlbGxvSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7OSwgMSwgNX19LAotICAgIHtvc3BmVmlydElmUnRyRGVhZEludGVydmFsLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywKLSAgICAgezksIDEsIDZ9fSwKLSAgICB7b3NwZlZpcnRJZlN0YXRlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7OSwgMSwgN319LAotICAgIHtvc3BmVmlydElmRXZlbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7OSwgMSwgOH19LAotICAgIHtvc3BmVmlydElmQXV0aEtleSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezksIDEsIDl9fSwKLSAgICB7b3NwZlZpcnRJZlN0YXR1cywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHs5LCAxLCAxMH19LAotICAgIHtvc3BmTmJySXBBZGRyLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgMX19LAotICAgIHtvc3BmTmJyQWRkcmVzc0xlc3NJbmRleCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCAyfX0sCi0gICAge29zcGZOYnJSdHJJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDN9fSwKLSAgICB7b3NwZk5ick9wdGlvbnMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgNH19LAotICAgIHtvc3BmTmJyUHJpb3JpdHksIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDV9fSwKLSAgICB7b3NwZk5iclN0YXRlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDZ9fSwKLSAgICB7b3NwZk5ickV2ZW50cywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCA3fX0sCi0gICAge29zcGZOYnJMc1JldHJhbnNRTGVuLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEwLCAxLCA4fX0sCi0gICAge29zcGZOYm1hTmJyU3RhdHVzLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfb3NwZiwgMywgezEwLCAxLCA5fX0sCi0gICAge29zcGZOYm1hTmJyUGVybWFuZW5jZSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX29zcGYsIDMsIHsxMCwgMSwgMTB9fSwKLSAgICB7b3NwZlZpcnROYnJBcmVhLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgMX19LAotICAgIHtvc3BmVmlydE5iclJ0cklkLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX29zcGYsIDMsIHsxMSwgMSwgMn19LAotICAgIHtvc3BmVmlydE5icklwQWRkciwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDN9fSwKLSAgICB7b3NwZlZpcnROYnJPcHRpb25zLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDR9fSwKLSAgICB7b3NwZlZpcnROYnJTdGF0ZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCA1fX0sCi0gICAge29zcGZWaXJ0TmJyRXZlbnRzLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDZ9fSwKLSAgICB7b3NwZlZpcnROYnJMc1JldHJhbnNRTGVuLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfb3NwZiwgMywgezExLCAxLCA3fX0sCi0gICAge29zcGZFeHRMc2RiVHlwZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEyLCAxLCAxfX0sCi0gICAge29zcGZFeHRMc2RiTHNpZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDJ9fSwKLSAgICB7b3NwZkV4dExzZGJSb3V0ZXJJZCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDN9fSwKLSAgICB7b3NwZkV4dExzZGJTZXF1ZW5jZSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEyLCAxLCA0fX0sCi0gICAge29zcGZFeHRMc2RiQWdlLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDV9fSwKLSAgICB7b3NwZkV4dExzZGJDaGVja3N1bSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfb3NwZiwgMywgezEyLCAxLCA2fX0sCi0gICAge29zcGZFeHRMc2RiQWR2ZXJ0aXNlbWVudCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9vc3BmLCAzLAotICAgICB7MTIsIDEsIDd9fSwKLSAgICB7b3NwZkFyZWFBZ2dyZWdhdGVBcmVhSUQsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfb3NwZiwgMywKLSAgICAgezE0LCAxLCAxfX0sCi0gICAge29zcGZBcmVhQWdncmVnYXRlTHNkYlR5cGUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX29zcGYsIDMsCi0gICAgIHsxNCwgMSwgMn19LAotICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZU5ldCwgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDN9fSwKLSAgICB7b3NwZkFyZWFBZ2dyZWdhdGVNYXNrLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9vc3BmLCAzLAotICAgICB7MTQsIDEsIDR9fSwKLSAgICB7b3NwZkFyZWFBZ2dyZWdhdGVTdGF0dXMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLAotICAgICB7MTQsIDEsIDV9fSwKLSAgICB7b3NwZkFyZWFBZ2dyZWdhdGVFZmZlY3QsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDZ9fQorICAgIHtvc3BmUm91dGVySWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCAxfX0sCisgICAge29zcGZBZG1pblN0YXQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgMn19LAorICAgIHtvc3BmVmVyc2lvbk51bWJlciwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDN9fSwKKyAgICB7b3NwZkFyZWFCZHJSdHJTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCA0fX0sCisgICAge29zcGZBU0JkclJ0clN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCA1fX0sCisgICAge29zcGZFeHRlcm5Mc2FDb3VudCwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxLCAxLCA2fX0sCisgICAge29zcGZFeHRlcm5Mc2FDa3N1bVN1bSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDd9fSwKKyAgICB7b3NwZlRPU1N1cHBvcnQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgOH19LAorICAgIHtvc3BmT3JpZ2luYXRlTmV3THNhcywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDl9fSwKKyAgICB7b3NwZlJ4TmV3THNhcywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEsIDEsIDEwLCAwfX0sCisgICAge29zcGZFeHRMc2RiTGltaXQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgMTF9fSwKKyAgICB7b3NwZk11bHRpY2FzdEV4dGVuc2lvbnMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MSwgMSwgMTJ9fSwKKyAgICB7b3NwZkFyZWFJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgMX19LAorICAgIHtvc3BmQXV0aFR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgMn19LAorICAgIHtvc3BmSW1wb3J0QXNFeHRlcm4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MiwgMSwgM319LAorICAgIHtvc3BmU3BmUnVucywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDR9fSwKKyAgICB7b3NwZkFyZWFCZHJSdHJDb3VudCwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCA1fX0sCisgICAge29zcGZBc0JkclJ0ckNvdW50LCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDZ9fSwKKyAgICB7b3NwZkFyZWFMc2FDb3VudCwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCA3fX0sCisgICAge29zcGZBcmVhTHNhQ2tzdW1TdW0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCA4fX0sCisgICAge29zcGZBcmVhU3VtbWFyeSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsyLCAxLCA5fX0sCisgICAge29zcGZBcmVhU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezIsIDEsIDEwfX0sCisgICAge29zcGZTdHViQXJlYUlkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHszLCAxLCAxfX0sCisgICAge29zcGZTdHViVE9TLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MywgMSwgMn19LAorICAgIHtvc3BmU3R1Yk1ldHJpYywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHszLCAxLCAzfX0sCisgICAge29zcGZTdHViU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezMsIDEsIDR9fSwKKyAgICB7b3NwZlN0dWJNZXRyaWNUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezMsIDEsIDV9fSwKKyAgICB7b3NwZkxzZGJBcmVhSWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDF9fSwKKyAgICB7b3NwZkxzZGJUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgMn19LAorICAgIHtvc3BmTHNkYkxzaWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDN9fSwKKyAgICB7b3NwZkxzZGJSb3V0ZXJJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgNH19LAorICAgIHtvc3BmTHNkYlNlcXVlbmNlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NCwgMSwgNX19LAorICAgIHtvc3BmTHNkYkFnZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDZ9fSwKKyAgICB7b3NwZkxzZGJDaGVja3N1bSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezQsIDEsIDd9fSwKKyAgICB7b3NwZkxzZGJBZHZlcnRpc2VtZW50LCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs0LCAxLCA4fX0sCisgICAge29zcGZBcmVhUmFuZ2VBcmVhSWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezUsIDEsIDF9fSwKKyAgICB7b3NwZkFyZWFSYW5nZU5ldCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NSwgMSwgMn19LAorICAgIHtvc3BmQXJlYVJhbmdlTWFzaywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezUsIDEsIDN9fSwKKyAgICB7b3NwZkFyZWFSYW5nZVN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs1LCAxLCA0fX0sCisgICAge29zcGZBcmVhUmFuZ2VFZmZlY3QsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NSwgMSwgNX19LAorICAgIHtvc3BmSG9zdElwQWRkcmVzcywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NiwgMSwgMX19LAorICAgIHtvc3BmSG9zdFRPUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezYsIDEsIDJ9fSwKKyAgICB7b3NwZkhvc3RNZXRyaWMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NiwgMSwgM319LAorICAgIHtvc3BmSG9zdFN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs2LCAxLCA0fX0sCisgICAge29zcGZIb3N0QXJlYUlELCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs2LCAxLCA1fX0sCisgICAge29zcGZJZklwQWRkcmVzcywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMX19LAorICAgIHtvc3BmQWRkcmVzc0xlc3NJZiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDJ9fSwKKyAgICB7b3NwZklmQXJlYUlkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgM319LAorICAgIHtvc3BmSWZUeXBlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDR9fSwKKyAgICB7b3NwZklmQWRtaW5TdGF0LCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDV9fSwKKyAgICB7b3NwZklmUnRyUHJpb3JpdHksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgNn19LAorICAgIHtvc3BmSWZUcmFuc2l0RGVsYXksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgN319LAorICAgIHtvc3BmSWZSZXRyYW5zSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgOH19LAorICAgIHtvc3BmSWZIZWxsb0ludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDl9fSwKKyAgICB7b3NwZklmUnRyRGVhZEludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDEwfX0sCisgICAge29zcGZJZlBvbGxJbnRlcnZhbCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxMX19LAorICAgIHtvc3BmSWZTdGF0ZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDEyfX0sCisgICAge29zcGZJZkRlc2lnbmF0ZWRSb3V0ZXIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDEzfX0sCisgICAge29zcGZJZkJhY2t1cERlc2lnbmF0ZWRSb3V0ZXIsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDE0fX0sCisgICAge29zcGZJZkV2ZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezcsIDEsIDE1fX0sCisgICAge29zcGZJZkF1dGhLZXksIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxNn19LAorICAgIHtvc3BmSWZTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7NywgMSwgMTd9fSwKKyAgICB7b3NwZklmTXVsdGljYXN0Rm9yd2FyZGluZywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs3LCAxLCAxOH19LAorICAgIHtvc3BmSWZNZXRyaWNJcEFkZHJlc3MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezgsIDEsIDF9fSwKKyAgICB7b3NwZklmTWV0cmljQWRkcmVzc0xlc3NJZiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezgsIDEsIDJ9fSwKKyAgICB7b3NwZklmTWV0cmljVE9TLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OCwgMSwgM319LAorICAgIHtvc3BmSWZNZXRyaWNWYWx1ZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs4LCAxLCA0fX0sCisgICAge29zcGZJZk1ldHJpY1N0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs4LCAxLCA1fX0sCisgICAge29zcGZWaXJ0SWZBcmVhSWQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDF9fSwKKyAgICB7b3NwZlZpcnRJZk5laWdoYm9yLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCAyfX0sCisgICAge29zcGZWaXJ0SWZUcmFuc2l0RGVsYXksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgM319LAorICAgIHtvc3BmVmlydElmUmV0cmFuc0ludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDR9fSwKKyAgICB7b3NwZlZpcnRJZkhlbGxvSW50ZXJ2YWwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgNX19LAorICAgIHtvc3BmVmlydElmUnRyRGVhZEludGVydmFsLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDZ9fSwKKyAgICB7b3NwZlZpcnRJZlN0YXRlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgN319LAorICAgIHtvc3BmVmlydElmRXZlbnRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7OSwgMSwgOH19LAorICAgIHtvc3BmVmlydElmQXV0aEtleSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezksIDEsIDl9fSwKKyAgICB7b3NwZlZpcnRJZlN0YXR1cywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHs5LCAxLCAxMH19LAorICAgIHtvc3BmTmJySXBBZGRyLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgMX19LAorICAgIHtvc3BmTmJyQWRkcmVzc0xlc3NJbmRleCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCAyfX0sCisgICAge29zcGZOYnJSdHJJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDN9fSwKKyAgICB7b3NwZk5ick9wdGlvbnMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgNH19LAorICAgIHtvc3BmTmJyUHJpb3JpdHksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDV9fSwKKyAgICB7b3NwZk5iclN0YXRlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTAsIDEsIDZ9fSwKKyAgICB7b3NwZk5ickV2ZW50cywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCA3fX0sCisgICAge29zcGZOYnJMc1JldHJhbnNRTGVuLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCA4fX0sCisgICAge29zcGZOYm1hTmJyU3RhdHVzLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfb3NwZiwgMywgezEwLCAxLCA5fX0sCisgICAge29zcGZOYm1hTmJyUGVybWFuZW5jZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMCwgMSwgMTB9fSwKKyAgICB7b3NwZlZpcnROYnJBcmVhLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgMX19LAorICAgIHtvc3BmVmlydE5iclJ0cklkLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxMSwgMSwgMn19LAorICAgIHtvc3BmVmlydE5icklwQWRkciwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDN9fSwKKyAgICB7b3NwZlZpcnROYnJPcHRpb25zLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDR9fSwKKyAgICB7b3NwZlZpcnROYnJTdGF0ZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCA1fX0sCisgICAge29zcGZWaXJ0TmJyRXZlbnRzLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTEsIDEsIDZ9fSwKKyAgICB7b3NwZlZpcnROYnJMc1JldHJhbnNRTGVuLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezExLCAxLCA3fX0sCisgICAge29zcGZFeHRMc2RiVHlwZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCAxfX0sCisgICAge29zcGZFeHRMc2RiTHNpZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDJ9fSwKKyAgICB7b3NwZkV4dExzZGJSb3V0ZXJJZCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDN9fSwKKyAgICB7b3NwZkV4dExzZGJTZXF1ZW5jZSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCA0fX0sCisgICAge29zcGZFeHRMc2RiQWdlLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDV9fSwKKyAgICB7b3NwZkV4dExzZGJDaGVja3N1bSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezEyLCAxLCA2fX0sCisgICAge29zcGZFeHRMc2RiQWR2ZXJ0aXNlbWVudCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTIsIDEsIDd9fSwKKyAgICB7b3NwZkFyZWFBZ2dyZWdhdGVBcmVhSUQsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfb3NwZiwgMywgezE0LCAxLCAxfX0sCisgICAge29zcGZBcmVhQWdncmVnYXRlTHNkYlR5cGUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX29zcGYsIDMsIHsxNCwgMSwgMn19LAorICAgIHtvc3BmQXJlYUFnZ3JlZ2F0ZU5ldCwgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDN9fSwKKyAgICB7b3NwZkFyZWFBZ2dyZWdhdGVNYXNrLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDR9fSwKKyAgICB7b3NwZkFyZWFBZ2dyZWdhdGVTdGF0dXMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDV9fSwKKyAgICB7b3NwZkFyZWFBZ2dyZWdhdGVFZmZlY3QsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9vc3BmLCAzLCB7MTQsIDEsIDZ9fQogfTsKIAotb2lkICAgICAgICAgICAgIG9zcGZfdmFyaWFibGVzX29pZFtdID0geyBNSUIsIDE0IH07CitvaWQgICAgICAgICAgICAgb3NwZl92YXJpYWJsZXNfb2lkW10gPSB7IE5FVFNOTVBfTUlCMl9PSUQsIDE0IH07CiAKIHZvaWQKIGluaXRfc25tcF9vc3BmKHZvaWQpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jIGIvYWdlbnQvbWliZ3JvdXAvc211eC9zbm1wX3JpcDIuYwppbmRleCBjNWIxMzY0Li5iOTg3YTA5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbXV4L3NubXBfcmlwMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NtdXgvc25tcF9yaXAyLmMKQEAgLTU3LDMxICs1Nyw1MyBAQAogZXh0ZXJuIHVfY2hhciAgIHNtdXhfdHlwZTsKIAogc3RydWN0IHZhcmlhYmxlMTMgcmlwMl92YXJpYWJsZXNbXSA9IHsKLSAgICB7UklQMkdMT0JBTFJPVVRFQ0hBTkdFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMiwgezEsIDF9fSwKLSAgICB7UklQMkdMT0JBTFFVRVJJRVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDIsIHsxLCAyfX0sCi0gICAge1JJUDJJRlNUQVRBRERSRVNTLCBBU05fSVBBRERSRVNTLCBST05MWSwgdmFyX3JpcDIsIDMsIHsyLCAxLCAxfX0sCi0gICAge1JJUDJJRlNUQVRSQ1ZCQURQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7MiwgMSwgMn19LAotICAgIHtSSVAySUZTVEFUUkNWQkFEUk9VVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7MiwgMSwgM319LAotICAgIHtSSVAySUZTVEFUU0VOVFVQREFURVMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3JpcDIsIDMsIHsyLCAxLCA0fX0sCi0gICAge1JJUDJJRlNUQVRTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MiwgMSwgNX19LAotICAgIHtSSVAySUZDT05GQUREUkVTUywgQVNOX0lQQUREUkVTUywgUk9OTFksIHZhcl9yaXAyLCAzLCB7MywgMSwgMX19LAotICAgIHtSSVAySUZDT05GRE9NQUlOLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgMn19LAotICAgIHtSSVAySUZDT05GQVVUSFRZUEUsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgM319LAotICAgIHtSSVAySUZDT05GQVVUSEtFWSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDR9fSwKLSAgICB7UklQMklGQ09ORlNFTkQsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgNX19LAotICAgIHtSSVAySUZDT05GUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCA2fX0sCi0gICAge1JJUDJJRkNPTkZERUZBVUxUTUVUUklDLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfcmlwMiwgMywgezMsIDEsIDd9fSwKLSAgICB7UklQMklGQ09ORlNUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3JpcDIsIDMsIHszLCAxLCA4fX0sCi0gICAge1JJUDJJRkNPTkZTUkNBRERSRVNTLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl9yaXAyLCAzLCB7MywgMSwgOX19LAotICAgIHtSSVAyUEVFUkFERFJFU1MsIEFTTl9JUEFERFJFU1MsIFJPTkxZLCB2YXJfcmlwMiwgMywgezQsIDEsIDF9fSwKLSAgICB7UklQMlBFRVJET01BSU4sIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezQsIDEsIDJ9fSwKLSAgICB7UklQMlBFRVJMQVNUVVBEQVRFLCBBU05fVElNRVRJQ0tTLCBST05MWSwgdmFyX3JpcDIsIDMsIHs0LCAxLCAzfX0sCi0gICAge1JJUDJQRUVSVkVSU0lPTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezQsIDEsIDR9fSwKLSAgICB7UklQMlBFRVJSQ1ZCQURQS1RTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9yaXAyLCAzLCB7NCwgMSwgNX19LAotICAgIHtSSVAyUEVFUlJDVkJBRFJPVVRFUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfcmlwMiwgMywgezQsIDEsIDZ9fQorICAgIHtSSVAyR0xPQkFMUk9VVEVDSEFOR0VTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAyLCB7MSwgMX19LAorICAgIHtSSVAyR0xPQkFMUVVFUklFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMiwgezEsIDJ9fSwKKyAgICB7UklQMklGU1RBVEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezIsIDEsIDF9fSwKKyAgICB7UklQMklGU1RBVFJDVkJBRFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHsyLCAxLCAyfX0sCisgICAge1JJUDJJRlNUQVRSQ1ZCQURST1VURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHsyLCAxLCAzfX0sCisgICAge1JJUDJJRlNUQVRTRU5UVVBEQVRFUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezIsIDEsIDR9fSwKKyAgICB7UklQMklGU1RBVFNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHsyLCAxLCA1fX0sCisgICAge1JJUDJJRkNPTkZBRERSRVNTLCBBU05fSVBBRERSRVNTLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCAxfX0sCisgICAge1JJUDJJRkNPTkZET01BSU4sIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCAyfX0sCisgICAge1JJUDJJRkNPTkZBVVRIVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCAzfX0sCisgICAge1JJUDJJRkNPTkZBVVRIS0VZLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgNH19LAorICAgIHtSSVAySUZDT05GU0VORCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCA1fX0sCisgICAge1JJUDJJRkNPTkZSRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDZ9fSwKKyAgICB7UklQMklGQ09ORkRFRkFVTFRNRVRSSUMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9yaXAyLCAzLCB7MywgMSwgN319LAorICAgIHtSSVAySUZDT05GU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfcmlwMiwgMywgezMsIDEsIDh9fSwKKyAgICB7UklQMklGQ09ORlNSQ0FERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3JpcDIsIDMsIHszLCAxLCA5fX0sCisgICAge1JJUDJQRUVSQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7NCwgMSwgMX19LAorICAgIHtSSVAyUEVFUkRPTUFJTiwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7NCwgMSwgMn19LAorICAgIHtSSVAyUEVFUkxBU1RVUERBVEUsIEFTTl9USU1FVElDS1MsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfcmlwMiwgMywgezQsIDEsIDN9fSwKKyAgICB7UklQMlBFRVJWRVJTSU9OLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7NCwgMSwgNH19LAorICAgIHtSSVAyUEVFUlJDVkJBRFBLVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3JpcDIsIDMsIHs0LCAxLCA1fX0sCisgICAge1JJUDJQRUVSUkNWQkFEUk9VVEVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9yaXAyLCAzLCB7NCwgMSwgNn19CiB9OwogCi1vaWQgICAgICAgICAgICAgcmlwMl92YXJpYWJsZXNfb2lkW10gPSB7IE1JQiwgMjMgfTsKK29pZCAgICAgICAgICAgICByaXAyX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9NSUIyX09JRCwgMjMgfTsKIAogdm9pZAogaW5pdF9zbm1wX3JpcDIodm9pZCkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5jCmluZGV4IGNiMDBmNjUuLmQxYzU3NWYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuYwpAQCAtMTQsNiArMTQsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtMjYsOSArMjcsMTEgQEAKIAogI2luY2x1ZGUgInNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRbXSA9CituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19zdG9yYWdlX3RyYW5zaXRpb24pCisKK2NvbnN0IG9pZCAgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkW10gPQogICAgIHsgU05NUE5PVElGWUZJTFRFUlRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBpbnQgICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgoc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZCk7CiAKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb24gc25tcE5vdGlmeUZpbHRlclRhYmxlX3VzZXJfY29udGV4dDsKQEAgLTI2Nyw5ICsyNzAsOSBAQAogICAgICAgICAgKi8KICAgICAgICAgaWYgKE1GRF9TVUNDRVNTID09IHJjKSB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogc2F2ZSBjaGFuZ2VkIHJvd3MsIGlmIHlvdSBoYXZlbid0IGFscmVhZHkKKyAgICAgICAgICAgICAqIG5vdGlmeSBsaWJyYXJ5IHRvIHNhdmUgY2hhbmdlZCByb3dzCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfc3RvcmUobmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7CiAgICAgICAgIH0KIApAQCAtNTQ0LDcgKzU0Nyw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIGFsbG9jYXRlIHNwYWNlIGZvciBzbm1wTm90aWZ5RmlsdGVyTWFzayBkYXRhCiAgICAgICAgICAqLwotICAgICAgICAoKnNubXBOb3RpZnlGaWx0ZXJNYXNrX3ZhbF9wdHJfcHRyKSA9CisgICAgICAgICgqc25tcE5vdGlmeUZpbHRlck1hc2tfdmFsX3B0cl9wdHIpID0gKGNoYXIqKQogICAgICAgICAgICAgbWFsbG9jKHJvd3JlcV9jdHgtPmRhdGEuc25tcE5vdGlmeUZpbHRlck1hc2tfbGVuICoKICAgICAgICAgICAgICAgICAgICBzaXplb2Yocm93cmVxX2N0eC0+ZGF0YS5zbm1wTm90aWZ5RmlsdGVyTWFza1swXSkpOwogICAgICAgICBpZiAoTlVMTCA9PSAoKnNubXBOb3RpZnlGaWx0ZXJNYXNrX3ZhbF9wdHJfcHRyKSkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgKaW5kZXggNWJmZWI3ZC4uM2ZmMmY5NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS5oCkBAIC0zMTEsOCArMzExLDggQEAKICAgICAgICAgKiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4CiAgICAgICAgIChzbm1wTm90aWZ5RmlsdGVyVGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCAzNDJlMDY0Li45NDJhODY1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtbm90aWZpY2F0aW9uLW1pYi9zbm1wTm90aWZ5RmlsdGVyVGFibGUvc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTgsNiArOCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdmFjbS5oPgpAQCAtMjAsNiArMjEsOCBAQAogCiAjaW5jbHVkZSAic25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfZ2V0KQorCiAvKiogQGluZ3JvdXAgaW50ZXJmYWNlIAogICogQGFkZHRvZ3JvdXAgZGF0YV9hY2Nlc3MgZGF0YV9hY2Nlc3M6IFJvdXRpbmVzIHRvIGFjY2VzcyBkYXRhCiAgKgpAQCAtMjQzLDcgKzI0Niw4IEBACiAgICAgICAgICsrY291bnQ7CiAgICAgfQogCi0gICAgREVCVUdNU0dUKCgidmVyYm9zZTpzbm1wTm90aWZ5RmlsdGVyVGFibGU6c25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVkIHJlY29yZHNcbiIsIGNvdW50KSk7CisgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzbm1wTm90aWZ5RmlsdGVyVGFibGU6c25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9sb2FkIiwKKyAgICAgICAgICAgICAgICJpbnNlcnRlZCAlIiBORVRTTk1QX1BSSXogInUgcmVjb3Jkc1xuIiwgY291bnQpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9sb2FkICovCkBAIC00OTUsNyArNDk5LDcgQEAKIHsKICAgICBvaWQgICAgICAgICAgICAgdG1wX29pZFtNQVhfT0lEX0xFTl07CiAgICAgbmV0c25tcF9pbmRleCAgIHRtcF9pZHg7Ci0gICAgaW50ICAgICAgICAgICAgIGksIGo7CisgICAgc2l6ZV90ICAgICAgICAgIGksIGo7CiAgICAgbmV0c25tcF92b2lkX2FycmF5ICpzOwogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqdG1wOwogICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXE7CkBAIC01MjUsNyArNTI5LDcgQEAKICAgICAvKgogICAgICAqIGFsbG9jYXRlIHRlbXBvcmFyeSBzdG9yYWdlCiAgICAgICovCi0gICAgdG1wID0gY2FsbG9jKHNpemVvZihzdHJ1Y3QgdmFjbV92aWV3RW50cnkpLCBzLT5zaXplICsgMSk7CisgICAgdG1wID0gKHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSopY2FsbG9jKHNpemVvZihzdHJ1Y3QgdmFjbV92aWV3RW50cnkpLCBzLT5zaXplICsgMSk7CiAgICAgaWYgKE5VTEwgPT0gdG1wKSB7CiAgICAgICAgIGZyZWUocy0+YXJyYXkpOwogICAgICAgICBmcmVlKHMpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA0OGYzZTdlLi40MDQwZTNmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlL3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMjIgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wTm90aWZ5RmlsdGVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2NvbnRhaW5lcl9yb3dfaW5zZXJ0KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yKQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3NpemUsIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQsIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9nZXQsIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtOTYsMTkgKzExMywyMyBAQAogICAgIF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3NodXRkb3duCiAgICAgKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2VfY3R4ICogaWZfY3R4KTsKIAotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcmVnaXN0cmF0aW9uICoKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfUkVHSVNUUkFUSU9OX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yZWdpc3RyYXRpb24gKgogc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbl9zZXQoc25tcE5vdGlmeUZpbHRlclRhYmxlX3JlZ2lzdHJhdGlvbiAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdyZWcpCkBAIC0xMTgsMTIgKzEzOSwxNSBAQAogICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHgudXNlcl9jdHggPSBuZXdyZWc7CiAgICAgcmV0dXJuIG9sZDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9zaXplKHZvaWQpCiB7CiAgICAgcmV0dXJuIENPTlRBSU5FUl9TSVpFKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBOT1RJRllGSUxURVJUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiB1X2ludAogc25tcE5vdGlmeUZpbHRlclRhYmxlX2RpcnR5X2dldCh2b2lkKQpAQCAtMjIwLDcgKzI0NCw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IFNOTVBOT1RJRllGSUxURVJUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gU05NUE5PVElGWUZJTFRFUlRBQkxFX01BWF9DT0w7CkBAIC0yNjEsNyArMjg1LDcgQEAKICAgICAgICAgX21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfcG9zdF9yZXF1ZXN0OwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIC8qCiAgICAgICogUkVRVUlSRUQgd3JhcHBlcnMgZm9yIHNldCByZXF1ZXN0IGhhbmRsaW5nCiAgICAgICovCkBAIC0yODcsNyArMzExLDcgQEAKICAgICAgKi8KICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPmNvbnNpc3RlbmN5X2NoZWNrcyA9CiAgICAgICAgIF9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NoZWNrX2RlcGVuZGVuY2llczsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgICoKQEAgLTMwMyw4ICszMjcsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfb2lkX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX0JBQllfU1RFUAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgSEFORExFUl9DQU5fUldSSVRFCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IEhBTkRMRVJfQ0FOX1JXUklURQogI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwogICAgIGlmIChOVUxMID09IHJlZ2luZm8pIHsKQEAgLTMyNSw3ICszNDksNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzQ4LDcgKzM3Miw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC03MjksNyArNzUzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNzc0LDYgKzc5OCw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX3Bvc3RfcmVxdWVzdCAqLwogCisKIC8qKgogICogQGludGVybmFsCiAgKiB3cmFwcGVyCkBAIC04NDcsNyArODcyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9vYmplY3RfbG9va3VwIiwgImNhbGxlZFxuIikpOwpAQCAtOTc0LDcgKzk5OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtMTA4Miw3ICsxMTA3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJfY3R4LCByb3dyZXFfY3R4KTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jaGVja19pbmRleGVzICovCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTEyNTMsNyArMTI3OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTEzMDEsNyArMTMyNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLCAiY2FsbGVkXG4iKSk7CiAKQEAgLTEzOTQsNyArMTQxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTQ1OSw3ICsxNDg0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTE1NzMsNyArMTU5OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNjIxLDcgKzE2NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfbWZkX3NubXBOb3RpZnlGaWx0ZXJUYWJsZV9jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNjU0LDcgKzE2NzksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6c25tcE5vdGlmeUZpbHRlclRhYmxlOl9tZmRfc25tcE5vdGlmeUZpbHRlclRhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTc1NCw3ICsxNzc5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAKQEAgLTE4MTAsNyArMTgzNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywgbmV0c25tcF9yZXF1ZXN0X2luZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3RzKQogewotICAgIHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICBzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9IChzbm1wTm90aWZ5RmlsdGVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDpzbm1wTm90aWZ5RmlsdGVyVGFibGU6X21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE4MzgsNyArMTg2Myw3IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0yMDEzLDE1ICsyMDM4LDE4IEBACiBzbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX2luaXRfcGVyc2lzdGVuY2UobmV0c25tcF9jb250YWluZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqY29udGFpbmVyKQogeworICAgIG5ldHNubXBfY29udGFpbmVyICoqY29udGFpbmVyX3A7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgcm93X3Rva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3Jvd19yZXN0b3JlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIGNvbnRhaW5lcl9wID0gbmV0c25tcF9tZW1kdXAoJmNvbnRhaW5lciwgc2l6ZW9mKGNvbnRhaW5lcikpOworICAgIG5ldHNubXBfYXNzZXJ0KGNvbnRhaW5lcl9wKTsKICAgICByYyA9IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3NhdmVfcm93cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3ApOwogCiAgICAgaWYgKHJjICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyBmb3IgU1RPUkVfREFUQSBjYWxsYmFjayAiCkBAIC0yMDM5LDkgKzIwNjcsMTEgQEAKICAgICAgICAgIiNcbiIgIiMgc25tcE5vdGlmeUZpbHRlclRhYmxlIHBlcnNpc3RlbnQgZGF0YVxuIiAiIyI7CiAgICAgY2hhciAgICAgICAgICAgKnR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOwotICAgIG5ldHNubXBfY29udGFpbmVyICpjID0gKG5ldHNubXBfY29udGFpbmVyICopIGNsaWVudGFyZzsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyA9ICoobmV0c25tcF9jb250YWluZXIgKiopY2xpZW50YXJnOwogCi0gICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZTpfc25tcE5vdGlmeUZpbHRlclRhYmxlX2NvbnRhaW5lcl9zYXZlX3Jvd3MiLCAic2F2aW5nICVkIHJvd3NcbiIsIENPTlRBSU5FUl9TSVpFKGMpKSk7CisgICAgREVCVUdNU0dUTCgoImludGVybmFsOnNubXBOb3RpZnlGaWx0ZXJUYWJsZToiCisgICAgICAgICAgICAgICAgIl9zbm1wTm90aWZ5RmlsdGVyVGFibGVfY29udGFpbmVyX3NhdmVfcm93cyIsCisgICAgICAgICAgICAgICAgInNhdmluZyAlIiBORVRTTk1QX1BSSXogInUgcm93c1xuIiwgQ09OVEFJTkVSX1NJWkUoYykpKTsKIAogICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CiAgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgYnVmKTsKQEAgLTIwOTIsNyArMjEyMiw3IEBACiAgICAgICogYmUgdHJlYXRlZCBhIGxpdHRsZSBkaWZmZXJlbnRseS4gU3BlY2lmaWNhbGx5LCB5b3Ugd2lsbCBuZWVkCiAgICAgICogKDQgKiBsZW4pICsgNCBbMyBBU0NJSSBjaGFycyBwZXIgYnl0ZSArIDEgZm9yIC4sICsgNCBmb3IgbGVuXS4KICAgICAgKgotICAgICAqIDMpIEFsc28sIHJlbWViZXIgdG8gYWRkIHNwYWNlIGZvciB0aGUgaWRlbnRpZmllciBhbmQgc2VwZXJhdG9yCisgICAgICogMykgQWxzbywgcmVtZW1iZXIgdG8gYWRkIHNwYWNlIGZvciB0aGUgaWRlbnRpZmllciBhbmQgc2VwYXJhdG9yCiAgICAgICogY2hhcmFjdGVycyAoZm9yIGV4YW1wbGUsIGVhY2ggY29sdW1uIGlzIHByZWZpeGVkIGJ5IHRoZQogICAgICAqIGNvbHVtbiBudW1iZXIgYW5kIGEgc2VtaWNvbG9uLiBUbyBhbGxvdyBmb3IgdGhlIG1heGltdW0KICAgICAgKiBjb2x1bW4gdmFsdWVzLCAxMiBieXRlcyBbMTEgZm9yIG9pZCArIDEgZm9yICc6J10gcGVyCkBAIC0yMjIwLDcgKzIyNTAsNyBAQAogICAgICAqIGxvb3AgdGhyb3VnaCBhbmQgZ2V0IGVhY2ggY29sdW1uCiAgICAgICovCiAgICAgYnVmID0gc2tpcF93aGl0ZShidWYpOwotICAgIHdoaWxlICgoTlVMTCAhPSBidWYpICYmIGlzZGlnaXQoKmJ1ZikpIHsKKyAgICB3aGlsZSAoKE5VTEwgIT0gYnVmKSAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqYnVmKSkpIHsKICAgICAgICAgLyoKICAgICAgICAgICogZXh0cmFjdCBjb2x1bW4sIHNraXAgJzonCiAgICAgICAgICAqLwpAQCAtMjQwMyw2ICsyNDMzLDcgQEAKIH0KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUE5PVElGWUZJTFRFUlRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHggKgogc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleChzbm1wTm90aWZ5RmlsdGVyVGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogbWliX2lkeCkKQEAgLTI0MjUsOCArMjQ1Niw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAoc25tcE5vdGlmeUZpbHRlclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORChzbm1wTm90aWZ5RmlsdGVyVGFibGVfaWZfY3R4LmNvbnRhaW5lciwgJm9pZF9pZHgpOwogCiAgICAgcmV0dXJuIHJvd3JlcV9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QTk9USUZZRklMVEVSVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuYwppbmRleCAwNWQ4MzExLi41MDEwMTk3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgInVzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkW10gPSB7IFVTTURIVVNFUktFWVRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRbXSA9IHsgVVNNREhVU0VSS0VZVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSCh1c21ESFVzZXJLZXlUYWJsZV9vaWQpOwogCiB1c21ESFVzZXJLZXlUYWJsZV9yZWdpc3RyYXRpb24gdXNtREhVc2VyS2V5VGFibGVfdXNlcl9jb250ZXh0OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlLmgKaW5kZXggZTIwZDViYy4uYjM0M2Q3OCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZS5oCkBAIC0xOTksOCArMTk5LDggQEAKICAgICAgICAgKnVzbURIVXNlcktleVRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleAogICAgICAgICAodXNtREhVc2VyS2V5VGFibGVfbWliX2luZGV4ICogbWliX2lkeCk7CiAKLSAgICBleHRlcm4gb2lkICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIHVzbURIVXNlcktleVRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICB1c21ESFVzZXJLZXlUYWJsZV9vaWRbXTsKKyAgICBleHRlcm4gY29uc3QgaW50ICAgICAgdXNtREhVc2VyS2V5VGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgInVzbURIVXNlcktleVRhYmxlX2ludGVyZmFjZS5oIgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggMzUxY2JkMy4uYTEzOWM5ZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0yNjUsNyArMjY1LDcgQEAKICAgICAgICAgKytjb3VudDsKICAgICB9CiAKLSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIVXNlcktleVRhYmxlX2NvbnRhaW5lcl9sb2FkIiwgImluc2VydGVkICVkIHJlY29yZHNcbiIsIGNvdW50KSk7CisgICAgREVCVUdNU0dUKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFVzZXJLZXlUYWJsZV9jb250YWluZXJfbG9hZCIsICJpbnNlcnRlZCAlZCByZWNvcmRzXG4iLCAoaW50KWNvdW50KSk7CiAKICAgICByZXR1cm4gTUZEX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHVzbURIVXNlcktleVRhYmxlX2NvbnRhaW5lcl9sb2FkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuYwppbmRleCBkNjA5Y2U2Li40MjdkMjZmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqLwogI2RlZmluZSBORUVEX1VTTURIX0ZVTkNUSU9OUwogI2luY2x1ZGUgInVzbURIVXNlcktleVRhYmxlLmgiCisjaW5jbHVkZSAic25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhQYXJhbWV0ZXJzL3VzbURIUGFyYW1ldGVycy5oIgogCiBESCAgICAgICAgICAgICAqCiB1c21ESEdldFVzZXJESHB0cihzdHJ1Y3QgdXNtVXNlciAqdXNlciwgaW50IGZvcl9hdXRoX2tleSkKQEAgLTU3LDcgKzU4LDcgQEAKIAogaW50CiB1c21ESEdldFVzZXJLZXlDaGFuZ2Uoc3RydWN0IHVzbVVzZXIgKnVzZXIsIGludCBmb3JfYXV0aF9rZXksCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmtleW9iaiwgc2l6ZV90ICprZXlvYmpfbGVuKQorICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKmtleW9iaiwgc2l6ZV90ICprZXlvYmpfbGVuKQogewogICAgIERIICAgICAgICAgICAgICpkaDsKIApAQCAtMTgzLDcgKzE4NCw3IEBACiBpbnQKIHVzbURIVXNlcktleVRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgodXNtREhVc2VyS2V5VGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGJsX2lkeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21Vc2VyRW5naW5lSURfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJOYW1lX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21Vc2VyTmFtZV92YWxfcHRyX2xlbikKQEAgLTI0NSw3ICsyNDYsNyBAQAogICovCiBpbnQKIHVzbURIVXNlcktleVRhYmxlX2luZGV4ZXNfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbVVzZXJFbmdpbmVJRF92YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJOYW1lX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtVXNlck5hbWVfdmFsX3B0cl9sZW4pCkBAIC0zMjgsNyArMzI5LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpCiB7CiAgICAvKiogd2Ugc2hvdWxkIGhhdmUgYSBub24tTlVMTCBwb2ludGVyIGFuZCBlbm91Z2ggc3RvcmFnZSAqLwpAQCAtNDExLDcgKzQxMiw3IEBACiAgKi8KIGludAogdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9nZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cikKIHsKQEAgLTQ5NSw3ICs0OTYsNyBAQAogICovCiBpbnQKIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKip1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cikKIHsKICAgIC8qKiB3ZSBzaG91bGQgaGF2ZSBhIG5vbi1OVUxMIHBvaW50ZXIgYW5kIGVub3VnaCBzdG9yYWdlICovCkBAIC01NzgsNyArNTc5LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKip1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKQogewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuaCBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfZ2V0LmgKaW5kZXggYjcyNWUxMS4uODNjMDI4ZSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9nZXQuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX2dldC5oCkBAIC0yNiw3ICsyNiw4IEBACiAKICNpZmRlZiBORUVEX1VTTURIX0ZVTkNUSU9OUwogICAgIGludCAgICAgICAgICAgICB1c21ESEdldFVzZXJLZXlDaGFuZ2Uoc3RydWN0IHVzbVVzZXIgKnVzZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yX2F1dGhfa2V5LCBjaGFyICoqa2V5b2JqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZvcl9hdXRoX2tleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKmtleW9iaiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqa2V5b2JqX2xlbik7CiAgICAgREggICAgICAgICAgICAgKnVzbURIR2V0VXNlckRIcHRyKHN0cnVjdCB1c21Vc2VyICp1c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZm9yX2F1dGhfa2V5KTsKQEAgLTU0LDI5ICs1NSwzOCBAQAogICAgICAqLwogCiAgICAgaW50ICAgICAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuX3B0cik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfZ2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpOwogICAgIGludCAgICAgICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbl9wdHIpOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2dldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKip1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW5fcHRyKTsKIAogCiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlcktleVRhYmxlX2luZGV4ZXNfc2V0X3RibF9pZHgodXNtREhVc2VyS2V5VGFibGVfbWliX2luZGV4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbVVzZXJFbmdpbmVJRF92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YmxfaWR4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtVXNlckVuZ2luZUlEX3ZhbF9wdHJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbVVzZXJOYW1lX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CkBAIC04NCw3ICs5NCw3IEBACiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlcktleVRhYmxlX2luZGV4ZXNfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21Vc2VyRW5naW5lSURfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbVVzZXJFbmdpbmVJRF92YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtVXNlck5hbWVfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbVVzZXJOYW1lX3ZhbF9wdHJfbGVuKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5jCmluZGV4IGVhMDhjMTAuLjU2N2QyMGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuYwpAQCAtMjIsMTMgKzIyLDEzIEBACiAKIGludAogdXNtREhVc2VyQ2hlY2tWYWx1ZShzdHJ1Y3QgdXNtVXNlciAqdXNlciwgaW50IGZvcl9hdXRoX2tleSwKLSAgICAgICAgICAgICAgICAgICAgY2hhciAqdmFsLCBzaXplX3QgdmFsX2xlbikKKyAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp2YWwsIHNpemVfdCB2YWxfbGVuKQogewogICAgIC8qCiAgICAgICogVGhlIHNldCB2YWx1ZSBtdXN0IGJlIGNvbXBvc2VkIG9mIDIgcGFydHMsIHRoZSBmaXJzdCBiZWluZyB0aGUKICAgICAgKiBjdXJyZW50IHZhbHVlIAogICAgICAqLwotICAgIGNoYXIgICAgICAgICAgICpjdXJyZW50X3ZhbHVlOworICAgIHVfY2hhciAgICAgICAgICpjdXJyZW50X3ZhbHVlOwogICAgIHNpemVfdCAgICAgICAgICBjdXJyZW50X3ZhbHVlX2xlbjsKIAogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIVXNlckNoZWNrVmFsdWUiLApAQCAtNTAsMTEgKzUwLDExIEBACiAKIGludAogdXNtREhTZXRLZXkoc3RydWN0IHVzbVVzZXIgKnVzZXIsIGludCBmb3JfYXV0aF9rZXksCi0gICAgICAgICAgICBjaGFyICp2YWwsIHNpemVfdCB2YWxfbGVuKQorICAgICAgICAgICAgdV9jaGFyICp2YWwsIHNpemVfdCB2YWxfbGVuKQogewogICAgIERIICAgICAgICAgICAgICpkaDsKICAgICBCSUdOVU0gICAgICAgICAqb3RoZXJfcHViOwotICAgIGNoYXIgICAgICAgICAgICprZXk7CisgICAgdV9jaGFyICAgICAgICAgKmtleTsKICAgICBzaXplX3QgICAgICAgICAga2V5X2xlbjsKIAogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIU2V0S2V5IiwgImNhbGxlZFxuIikpOwpAQCAtMzM2LDcgKzMzNiw2IEBACiB1c21ESFVzZXJLZXlUYWJsZV9jb21taXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gTUZEX1NVQ0NFU1M7Ci0gICAgaW50ICAgICAgICAgICAgIHNhdmVfZmxhZ3M7CiAKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1c21ESFVzZXJLZXlUYWJsZTp1c21ESFVzZXJLZXlUYWJsZV9jb21taXQiLAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKQEAgLTUyOCw3ICs1MjcsNyBAQAogaW50CiB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKQEAgLTYwNSw3ICs2MDQsNyBAQAogICovCiBpbnQKIHVzbURIVXNlckF1dGhLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKIApAQCAtNzI4LDggKzcyNyw5IEBACiAgKi8KIGludAogdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewogICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnVzbURIVXNlcktleVRhYmxlOnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUiLCAiY2FsbGVkXG4iKSk7CkBAIC03OTgsNyArNzk4LDcgQEAKICAqLwogaW50CiB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CiAKQEAgLTkxMiw3ICs5MTIsNyBAQAogaW50CiB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKQEAgLTk4OSw3ICs5ODksNyBAQAogICovCiBpbnQKIHVzbURIVXNlclByaXZLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbikKIHsKIApAQCAtMTExMyw4ICsxMTEzLDkgQEAKICAqLwogaW50CiB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2NoZWNrX3ZhbHVlKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pCiB7CiAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6dXNtREhVc2VyS2V5VGFibGU6dXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9jaGVja192YWx1ZSIsICJjYWxsZWRcbiIpKTsKQEAgLTExODMsNyArMTE4NCw3IEBACiAgKi8KIGludAogdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKQogewogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfZGF0YV9zZXQuaAppbmRleCAwNGY0ZWJlLi5lN2M3MDU5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9kYXRhX3NldC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXAtdXNtLWRoLW9iamVjdHMtbWliL3VzbURIVXNlcktleVRhYmxlL3VzbURIVXNlcktleVRhYmxlX2RhdGFfc2V0LmgKQEAgLTU0LDE1ICs1NCwxOSBAQAogCiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV91bmRvX3NldHVwKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlckF1dGhLZXlDaGFuZ2VfdW5kbyh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKQEAgLTcwLDE2ICs3NCwyMCBAQAogCiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0cl9sZW4pOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlX3VuZG9fc2V0dXAodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3dyZXFfY3R4KTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9zZXQodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsIGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfdW5kbyh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKQEAgLTg3LDE1ICs5NSwxOSBAQAogCiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUodXNtREhVc2VyS2V5VGFibGVfcm93cmVxX2N0eCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlclByaXZLZXlDaGFuZ2VfdmFsX3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV91bmRvX3NldHVwKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCk7CiAgICAgaW50ICAgICAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2Vfc2V0KHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHgKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3ZhbF9wdHIsIHNpemVfdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHJvd3JlcV9jdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlclByaXZLZXlDaGFuZ2VfdW5kbyh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKQEAgLTEwMywxNiArMTE1LDIwIEBACiAKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9jaGVja192YWx1ZSh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LCBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdmFsX3B0ciwgc2l6ZV90CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiByb3dyZXFfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyX2xlbik7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfdW5kb19zZXR1cCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgpOwogICAgIGludCAgICAgICAgICAgIAogICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3NldCh1c21ESFVzZXJLZXlUYWJsZV9yb3dyZXFfY3R4ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwgY2hhcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV92YWxfcHRyLCBzaXplX3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcm93cmVxX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX3ZhbF9wdHJfbGVuKTsKICAgICBpbnQgICAgICAgICAgICAKICAgICAgICAgdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV91bmRvKHVzbURIVXNlcktleVRhYmxlX3Jvd3JlcV9jdHggKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcC11c20tZGgtb2JqZWN0cy1taWIvdXNtREhVc2VyS2V5VGFibGUvdXNtREhVc2VyS2V5VGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYwppbmRleCA5YWJhZjljLi4wNDIzMWY5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wLXVzbS1kaC1vYmplY3RzLW1pYi91c21ESFVzZXJLZXlUYWJsZS91c21ESFVzZXJLZXlUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTAgQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtMTg0LDcgKzE4OSw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IFVTTURIVVNFUktFWVRBQkxFX01JTl9DT0w7CiAgICAgdGJsX2luZm8tPm1heF9jb2x1bW4gPSBVU01ESFVTRVJLRVlUQUJMRV9NQVhfQ09MOwpAQCAtNzY0LDcgKzc2OSw3IEBACiAgICAgY2FzZSBDT0xVTU5fVVNNREhVU0VSQVVUSEtFWUNIQU5HRToKICAgICAgICAgdmFyLT50eXBlID0gQVNOX09DVEVUX1NUUjsKICAgICAgICAgcmMgPSB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX2dldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC03NzQsNyArNzc5LDcgQEAKICAgICBjYXNlIENPTFVNTl9VU01ESFVTRVJPV05BVVRIS0VZQ0hBTkdFOgogICAgICAgICB2YXItPnR5cGUgPSBBU05fT0NURVRfU1RSOwogICAgICAgICByYyA9IHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfZ2V0KHJvd3JlcV9jdHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZ2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsLnN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTc4NCw3ICs3ODksNyBAQAogICAgIGNhc2UgQ09MVU1OX1VTTURIVVNFUlBSSVZLRVlDSEFOR0U6CiAgICAgICAgIHZhci0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CiAgICAgICAgIHJjID0gdXNtREhVc2VyUHJpdktleUNoYW5nZV9nZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJnZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbF9sZW4pOwogICAgICAgICBicmVhazsKIApAQCAtNzk0LDcgKzc5OSw3IEBACiAgICAgY2FzZSBDT0xVTU5fVVNNREhVU0VST1dOUFJJVktFWUNIQU5HRToKICAgICAgICAgdmFyLT50eXBlID0gQVNOX09DVEVUX1NUUjsKICAgICAgICAgcmMgPSB1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlX2dldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICoqKSAmdmFyLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC05MTksNyArOTI0LDcgQEAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21ESFVzZXJLZXlUYWJsZTpfdXNtREhVc2VyS2V5VGFibGVfY2hlY2tfY29sdW1uOnVzbURIVXNlckF1dGhLZXlDaGFuZ2UiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJjID0gdXNtREhVc2VyQXV0aEtleUNoYW5nZV9jaGVja192YWx1ZShyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgdmFyLT52YWxfbGVuKTsKICAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCiAgICAgICAgICAgICAgICAgJiYgKE1GRF9OT1RfVkFMSURfTk9XICE9IHJjKSkgewpAQCAtOTQwLDcgKzk0NSw3IEBACiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtREhVc2VyS2V5VGFibGU6X3VzbURIVXNlcktleVRhYmxlX2NoZWNrX2NvbHVtbjp1c21ESFVzZXJPd25BdXRoS2V5Q2hhbmdlIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByYyA9IHVzbURIVXNlck93bkF1dGhLZXlDaGFuZ2VfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKICAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCkBAIC05NjIsNyArOTY3LDcgQEAKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21ESFVzZXJLZXlUYWJsZTpfdXNtREhVc2VyS2V5VGFibGVfY2hlY2tfY29sdW1uOnVzbURIVXNlclByaXZLZXlDaGFuZ2UiLCAidmFyYmluZCB2YWxpZGF0aW9uIGZhaWxlZCAoZWcgYmFkIHR5cGUgb3Igc2l6ZSlcbiIpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJjID0gdXNtREhVc2VyUHJpdktleUNoYW5nZV9jaGVja192YWx1ZShyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZywgdmFyLT52YWxfbGVuKTsKICAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCiAgICAgICAgICAgICAgICAgJiYgKE1GRF9OT1RfVkFMSURfTk9XICE9IHJjKSkgewpAQCAtOTgzLDcgKzk4OCw3IEBACiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtREhVc2VyS2V5VGFibGU6X3VzbURIVXNlcktleVRhYmxlX2NoZWNrX2NvbHVtbjp1c21ESFVzZXJPd25Qcml2S2V5Q2hhbmdlIiwgInZhcmJpbmQgdmFsaWRhdGlvbiBmYWlsZWQgKGVnIGJhZCB0eXBlIG9yIHNpemUpXG4iKSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICByYyA9IHVzbURIVXNlck93blByaXZLZXlDaGFuZ2VfY2hlY2tfdmFsdWUocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKICAgICAgICAgICAgIGlmICgoTUZEX1NVQ0NFU1MgIT0gcmMpICYmIChNRkRfTk9UX1ZBTElEX0VWRVIgIT0gcmMpCkBAIC0xMjgzLDcgKzEyODgsNyBAQAogICAgIGNhc2UgQ09MVU1OX1VTTURIVVNFUkFVVEhLRVlDSEFOR0U6CiAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX1VTTURIVVNFUkFVVEhLRVlDSEFOR0VfRkxBRzsKICAgICAgICAgcmMgPSB1c21ESFVzZXJBdXRoS2V5Q2hhbmdlX3NldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEyOTQsNyArMTI5OSw3IEBACiAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0KICAgICAgICAgICAgIENPTFVNTl9VU01ESFVTRVJPV05BVVRIS0VZQ0hBTkdFX0ZMQUc7CiAgICAgICAgIHJjID0gdXNtREhVc2VyT3duQXV0aEtleUNoYW5nZV9zZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMzA0LDcgKzEzMDksNyBAQAogICAgIGNhc2UgQ09MVU1OX1VTTURIVVNFUlBSSVZLRVlDSEFOR0U6CiAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0gQ09MVU1OX1VTTURIVVNFUlBSSVZLRVlDSEFOR0VfRkxBRzsKICAgICAgICAgcmMgPSB1c21ESFVzZXJQcml2S2V5Q2hhbmdlX3NldChyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopIHZhci0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPnZhbC5zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuKTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTEzMTUsNyArMTMyMCw3IEBACiAgICAgICAgIHJvd3JlcV9jdHgtPmNvbHVtbl9zZXRfZmxhZ3MgfD0KICAgICAgICAgICAgIENPTFVNTl9VU01ESFVTRVJPV05QUklWS0VZQ0hBTkdFX0ZMQUc7CiAgICAgICAgIHJjID0gdXNtREhVc2VyT3duUHJpdktleUNoYW5nZV9zZXQocm93cmVxX2N0eCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSB2YXItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbik7CiAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuYwppbmRleCA0Y2EyOTg3Li5lNzU2Nzg4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmMKQEAgLTMsMjggKzMsNDEgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgotI2luY2x1ZGUgIm1pYklJL3N5c09SVGFibGUuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAjaW5jbHVkZSAic25tcEVuZ2luZS5oIgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcGVuZ2luZV9hbGwsIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVnaXN0ZXJfc25tcEVuZ2luZV9zY2FsYXJzX2NvbnRleHQsIHNubXBlbmdpbmVfYWxsKQorCiBzdHJ1Y3QgdmFyaWFibGUyIHNubXBFbmdpbmVfdmFyaWFibGVzW10gPSB7Ci0gICAge1NOTVBFTkdJTkVJRCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9zbm1wRW5naW5lLCAxLCB7MX19LAorICAgIHtTTk1QRU5HSU5FSUQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezF9fSwKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQotICAgIHtTTk1QRU5HSU5FQk9PVFMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9zbm1wRW5naW5lLCAxLCB7Mn19LAotICAgIHtTTk1QRU5HSU5FVElNRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3NubXBFbmdpbmUsIDEsIHszfX0sCisgICAge1NOTVBFTkdJTkVCT09UUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHsyfX0sCisgICAge1NOTVBFTkdJTkVUSU1FLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezN9fSwKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIU5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLwotICAgIHtTTk1QRU5HSU5FQk9PVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3NubXBFbmdpbmUsIDEsIHsyfX0sCi0gICAge1NOTVBFTkdJTkVUSU1FLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9zbm1wRW5naW5lLCAxLCB7M319LAorICAgIHtTTk1QRU5HSU5FQk9PVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHsyfX0sCisgICAge1NOTVBFTkdJTkVUSU1FLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7M319LAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KLSAgICB7U05NUEVOR0lORU1BWE1FU1NBR0VTSVpFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9zbm1wRW5naW5lLCAxLCB7NH19LAorI2Vsc2UgIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCisgICAge1NOTVBFTkdJTkVCT09UUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcEVuZ2luZSwgMSwgezJ9fSwKKyAgICB7U05NUEVOR0lORVRJTUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBFbmdpbmUsIDEsIHszfX0sCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKKyAgICB7U05NUEVOR0lORU1BWE1FU1NBR0VTSVpFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9zbm1wRW5naW5lLCAxLCB7NH19LAogfTsKIAogLyoKQEAgLTQwLDYgKzUzLDcgQEAKICAgICAgICAgICAgICAgICAgc25tcEVuZ2luZV92YXJpYWJsZXNfb2lkKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JFR0lTVEVSX1NOTVBFTkdJTkVfU0NBTEFSU19DT05URVhUCiB2b2lkCiByZWdpc3Rlcl9zbm1wRW5naW5lX3NjYWxhcnNfY29udGV4dChjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKIHsKQEAgLTUyLDI1ICs2NiwyNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfTUlCX1BSSU9SSVRZLCAwLCAwLCBOVUxMLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lLCAtMSwgMCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9TTk1QRU5HSU5FX1NDQUxBUlNfQ09OVEVYVCAqLwogCiB2b2lkCiBpbml0X3NubXBFbmdpbmUodm9pZCkKIHsKLSNpZmRlZiBVU0lOR19NSUJJSV9TWVNPUlRBQkxFX01PRFVMRQotICAgIHN0YXRpYyBvaWQgICAgICByZWdbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTAsIDMsIDEsIDEgfTsKLSAgICByZWdpc3Rlcl9zeXNPUlRhYmxlKHJlZywgMTAsICJUaGUgU05NUCBNYW5hZ2VtZW50IEFyY2hpdGVjdHVyZSBNSUIuIik7Ci0jZW5kaWYKKyAgICBvaWQgICAgICByZWdbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTAsIDMsIDEsIDEgfTsKKyAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShyZWcsICJUaGUgU05NUCBNYW5hZ2VtZW50IEFyY2hpdGVjdHVyZSBNSUIuIik7CiAgICAgcmVnaXN0ZXJfc25tcEVuZ2luZV9zY2FsYXJzKCk7CiB9CiAKLWV4dGVybiBzdHJ1Y3QgdGltZXZhbCBzdGFydHRpbWU7Ci0KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCiBpbnQgICAgICAgICAgICAgd3JpdGVfZW5naW5lQm9vdHMoaW50LCB1X2NoYXIgKiwgdV9jaGFyLCBzaXplX3QsIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqLCBzaXplX3QpOwogaW50ICAgICAgICAgICAgIHdyaXRlX2VuZ2luZVRpbWUoaW50LCB1X2NoYXIgKiwgdV9jaGFyLCBzaXplX3QsIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICosIHNpemVfdCk7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiB1X2NoYXIgICAgICAgICAqCiB2YXJfc25tcEVuZ2luZShzdHJ1Y3QgdmFyaWFibGUgKnZwLApAQCAtODUsMTEgKzk4LDExIEBACiAgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OwogICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGVuZ2luZUlEW1NOTVBfTUFYQlVGXTsKIAotICAgICp3cml0ZV9tZXRob2QgPSAwOyAgICAgICAgICAvKiBhc3N1bWUgaXQgaXNudCB3cml0YWJsZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOyAgICAvKiBhc3N1bWUgaXQgaXNudCB3cml0YWJsZSBmb3IgdGhlIHRpbWUgYmVpbmcgKi8KICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7ICAgICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLwogCiAgICAgaWYgKGhlYWRlcl9nZW5lcmljKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpKQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgogICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuIApAQCAtMTA0LDE2ICsxMTcsMjAgQEAKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGVuZ2luZUlEOwogCiAgICAgY2FzZSBTTk1QRU5HSU5FQk9PVFM6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZW5naW5lQm9vdHM7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgbG9uZ19yZXQgPSBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZUJvb3RzKCk7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAKICAgICBjYXNlIFNOTVBFTkdJTkVUSU1FOgorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2VuZ2luZVRpbWU7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgbG9uZ19yZXQgPSBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKTsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKIApAQCAtMTI1LDkgKzE0MiwxMSBAQAogICAgICAgICBERUJVR01TR1RMKCgic25tcGQiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX3NubXBFbmdpbmVcbiIsCiAgICAgICAgICAgICAgICAgICAgIHZwLT5tYWdpYykpOwogICAgIH0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gTlVMTDsKIH0KIAorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQogLyoKICAqIHdyaXRlX2VuZ2luZUJvb3RzKCk6CkBAIC0yMjQsMyArMjQzLDQgQEAKIH0KIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmggYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcEVuZ2luZS5oCmluZGV4IDM0M2VlYWEuLmI2MmEyMjAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wRW5naW5lLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBFbmdpbmUuaApAQCAtMTAsMTAgKzEwLDEwIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9TTk1QRU5HSU5FX0gKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUKICAqLwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIGNvbmZpZ19hZGRfbWliKFNOTVAtRlJBTUVXT1JLLU1JQikKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmMKaW5kZXggYzdlZmJjOC4uYWU3OTJkZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuYwpAQCAtMywyNCArMywyMSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgogCi0jaW5jbHVkZSAibWliSUkvc3lzT1JUYWJsZS5oIgogI2luY2x1ZGUgInNubXBNUERTdGF0cy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKIAogc3RydWN0IHZhcmlhYmxlMiBzbm1wTVBEU3RhdHNfdmFyaWFibGVzW10gPSB7Ci0gICAge1NOTVBVTktOT1dOU0VDVVJJVFlNT0RFTFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXBNUERTdGF0cywgMSwKLSAgICAgezF9fSwKLSAgICB7U05NUElOVkFMSURNU0dTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9zbm1wTVBEU3RhdHMsIDEsIHsyfX0sCi0gICAge1NOTVBVTktOT1dOUERVSEFORExFUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3NubXBNUERTdGF0cywgMSwgezN9fSwKKyAgICB7U05NUFVOS05PV05TRUNVUklUWU1PREVMUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcE1QRFN0YXRzLCAxLCB7MX19LAorICAgIHtTTk1QSU5WQUxJRE1TR1MsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3NubXBNUERTdGF0cywgMSwgezJ9fSwKKyAgICB7U05NUFVOS05PV05QRFVIQU5ETEVSUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfc25tcE1QRFN0YXRzLCAxLCB7M319LAogfTsKIAogLyoKQEAgLTMyLDEyICsyOSw5IEBACiB2b2lkCiBpbml0X3NubXBNUERTdGF0cyh2b2lkKQogewotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCiAgICAgc3RhdGljIG9pZCAgICAgIHJlZ1tdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMSwgMywgMSwgMSB9OwotICAgIHJlZ2lzdGVyX3N5c09SVGFibGUocmVnLCAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTUlCIGZvciBNZXNzYWdlIFByb2Nlc3NpbmcgYW5kIERpc3BhdGNoaW5nLiIpOwotI2VuZGlmCi0KKyAgICBSRUdJU1RFUl9TWVNPUl9FTlRSWShyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBNSUIgZm9yIE1lc3NhZ2UgUHJvY2Vzc2luZyBhbmQgRGlzcGF0Y2hpbmcuIik7CiAgICAgUkVHSVNURVJfTUlCKCJzbm1wdjMvc25tcE1QRFN0YXRzIiwgc25tcE1QRFN0YXRzX3ZhcmlhYmxlcywgdmFyaWFibGUyLAogICAgICAgICAgICAgICAgICBzbm1wTVBEU3RhdHNfdmFyaWFibGVzX29pZCk7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmggYi9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzLmgKaW5kZXggZDE3YzM3MS4uNDFlYWIxZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHMuaApAQCAtOCwxMCArOCwxMSBAQAogI2RlZmluZSBfTUlCR1JPVVBfU05NUE1QRFNUQVRTX0gKIAogLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCisgKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCitjb25maWdfZXhjbHVkZShzbm1wdjMvc25tcE1QRFN0YXRzXzVfNSkKIGNvbmZpZ19hZGRfbWliKFNOTVAtTVBELU1JQikKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvc25tcE1QRFN0YXRzXzVfNS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hN2ZjMmNlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogc25tcE1QRFN0YXRzLmM6IHRhbGxpZXMgZXJyb3JzIGZvciBTTk1QdjMgbWVzc2FnZSBwcm9jZXNzaW5nLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oPgorCisjaW5jbHVkZSAic25tcE1QRFN0YXRzXzVfNS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg+CisKKyNkZWZpbmUgc25tcE1QRE1JQiAxLCAzLCA2LCAxLCA2LCAzLCAxMQorI2RlZmluZSBzbm1wTVBETUlCT2JqZWN0cyBzbm1wTVBETUlCLCAyCisjZGVmaW5lIHNubXBNUERNSUJDb21wbGlhbmNlcyBzbm1wTVBETUlCLCAzLCAxCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGhlbHBlcl9zdGF0aXN0aWNzKQorCitzdGF0aWMgb2lkIHNubXBNUERTdGF0c1tdID0geyBzbm1wTVBETUlCT2JqZWN0cywgMSB9OworCitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogc25tcE1QRFN0YXRzX3JlZyA9IE5VTEw7CitzdGF0aWMgb2lkIHNubXBNUERDb21wbGlhbmNlW10gPSB7IHNubXBNUERNSUJDb21wbGlhbmNlcywgMSB9OworCit2b2lkCitpbml0X3NubXBNUERTdGF0c181XzUodm9pZCkKK3sKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiBzID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAic25tcE1QRFN0YXRzIiwgTlVMTCwgc25tcE1QRFN0YXRzLCBPSURfTEVOR1RIKHNubXBNUERTdGF0cyksCisgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKHMgJiYKKwlORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKHMsIDEsIE1QRCkgPT0gTUlCX1JFR0lTVEVSRURfT0spIHsKKyAgICAgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkoc25tcE1QRENvbXBsaWFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgTUlCIGZvciBNZXNzYWdlIFByb2Nlc3NpbmcgYW5kIERpc3BhdGNoaW5nLiIpOworICAgICAgICBzbm1wTVBEU3RhdHNfcmVnID0gczsKKyAgICB9Cit9CisKK3ZvaWQKK3NodXRkb3duX3NubXBNUERTdGF0c181XzUodm9pZCkKK3sKKyAgICBVTlJFR0lTVEVSX1NZU09SX0VOVFJZKHNubXBNUERDb21wbGlhbmNlKTsKKyAgICBpZiAoc25tcE1QRFN0YXRzX3JlZykgeworICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihzbm1wTVBEU3RhdHNfcmVnKTsKKyAgICAgICAgc25tcE1QRFN0YXRzX3JlZyA9IE5VTEw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3NubXBNUERTdGF0c181XzUuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhmM2RmZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My9zbm1wTVBEU3RhdHNfNV81LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTUlCR1JPVVBfU05NUE1QRFNUQVRTX0gKKyNkZWZpbmUgX01JQkdST1VQX1NOTVBNUERTVEFUU19ICisKK2NvbmZpZ19leGNsdWRlKHNubXB2My9zbm1wTVBEU3RhdHMpCitjb25maWdfYWRkX21pYihTTk1QLU1QRC1NSUIpCisKK3ZvaWQgaW5pdF9zbm1wTVBEU3RhdHNfNV81KHZvaWQpOwordm9pZCBzaHV0ZG93bl9zbm1wTVBEU3RhdHNfNV81KHZvaWQpOworCisjZW5kaWYgLyogX01JQkdST1VQX1NOTVBNUERTVEFUU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuYyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jCmluZGV4IGQ4MWUxMjcuLjcxOGUwNzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5jCkBAIC00LDI2ICs0LDI2IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0jaW5jbHVkZSAibWliSUkvc3lzT1JUYWJsZS5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ1c21TdGF0cy5oIgogCiBzdHJ1Y3QgdmFyaWFibGUyIHVzbVN0YXRzX3ZhcmlhYmxlc1tdID0gewotICAgIHtVU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl91c21TdGF0cywgMSwKLSAgICAgezF9fSwKLSAgICB7VVNNU1RBVFNOT1RJTlRJTUVXSU5ET1dTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl91c21TdGF0cywgMSwgezJ9fSwKLSAgICB7VVNNU1RBVFNVTktOT1dOVVNFUk5BTUVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl91c21TdGF0cywgMSwgezN9fSwKLSAgICB7VVNNU1RBVFNVTktOT1dORU5HSU5FSURTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl91c21TdGF0cywgMSwgezR9fSwKLSAgICB7VVNNU1RBVFNXUk9OR0RJR0VTVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3VzbVN0YXRzLCAxLCB7NX19LAotICAgIHtVU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX3VzbVN0YXRzLCAxLCB7Nn19LAorICAgIHtVU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21TdGF0cywgMSwgezF9fSwKKyAgICB7VVNNU1RBVFNOT1RJTlRJTUVXSU5ET1dTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21TdGF0cywgMSwgezJ9fSwKKyAgICB7VVNNU1RBVFNVTktOT1dOVVNFUk5BTUVTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21TdGF0cywgMSwgezN9fSwKKyAgICB7VVNNU1RBVFNVTktOT1dORU5HSU5FSURTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl91c21TdGF0cywgMSwgezR9fSwKKyAgICB7VVNNU1RBVFNXUk9OR0RJR0VTVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVN0YXRzLCAxLCB7NX19LAorICAgIHtVU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3VzbVN0YXRzLCAxLCB7Nn19LAogfTsKIAogLyoKQEAgLTM1LDEyICszNSwxMCBAQAogdm9pZAogaW5pdF91c21TdGF0cyh2b2lkKQogewotI2lmZGVmIFVTSU5HX01JQklJX1NZU09SVEFCTEVfTU9EVUxFCiAgICAgc3RhdGljIG9pZCAgICAgIHJlZ1tdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxNSwgMiwgMSwgMSB9OwotICAgIHJlZ2lzdGVyX3N5c09SVGFibGUocmVnLCAxMCwKLSAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBkZWZpbml0aW9ucyBmb3IgdGhlIFNOTVAgVXNlci1iYXNlZCBTZWN1cml0eSBNb2RlbC4iKTsKLSNlbmRpZgotCisgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkocmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICJUaGUgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBkZWZpbml0aW9ucyBmb3IgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUCBVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsLiIpOwogICAgIFJFR0lTVEVSX01JQigic25tcHYzL3VzbVN0YXRzIiwgdXNtU3RhdHNfdmFyaWFibGVzLCB2YXJpYWJsZTIsCiAgICAgICAgICAgICAgICAgIHVzbVN0YXRzX3ZhcmlhYmxlc19vaWQpOwogfQpAQCAtNzMsNSArNzEsNiBAQAogICAgICAgICBsb25nX3JldCA9IHNubXBfZ2V0X3N0YXRpc3RpYyh0bWFnaWMgKyBTVEFUX1VTTV9TVEFUU19TVEFSVCk7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAgICAgfQorCiAgICAgcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oCmluZGV4IDcxODhlMWEuLjU2ODUzODEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21TdGF0cy5oCkBAIC05LDEwICs5LDExIEBACiAjZGVmaW5lIF9NSUJHUk9VUF9VU01TVEFUU19ICiAKIC8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAogICovCiAKLWNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorY29uZmlnX2V4Y2x1ZGUoc25tcHYzL3VzbVN0YXRzXzVfNSkKIGNvbmZpZ19hZGRfbWliKFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIpCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjZDA0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIHVzbVN0YXRzLmM6IGltcGxlbWVudHMgdGhlIHVzbVN0YXRzIHBvcnRpb24gb2YgdGhlIFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3N5c09SVGFibGUuaD4KKworI2luY2x1ZGUgInVzbVN0YXRzXzVfNS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg+CisKKyNkZWZpbmUgc25tcFVzbU1JQiAxLCAzLCA2LCAxLCA2LCAzLCAxNQorI2RlZmluZSB1c21NSUJDb21wbGlhbmNlcyBzbm1wVXNtTUlCLCAyLCAxCisKK3N0YXRpYyBvaWQgdXNtU3RhdHNbXSA9IHsgc25tcFVzbU1JQiwgMSwgMSB9OworCitzdGF0aWMgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogdXNtU3RhdHNfcmVnID0gTlVMTDsKK3N0YXRpYyBvaWQgdXNtTUlCQ29tcGxpYW5jZVtdID0geyB1c21NSUJDb21wbGlhbmNlcywgMSB9OworCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWxwZXJfc3RhdGlzdGljcykKKwordm9pZAoraW5pdF91c21TdGF0c181XzUodm9pZCkKK3sKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiBzID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAidXNtU3RhdHMiLCBOVUxMLCB1c21TdGF0cywgT0lEX0xFTkdUSCh1c21TdGF0cyksCisgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKHMgJiYKKwlORVRTTk1QX1JFR0lTVEVSX1NUQVRJU1RJQ19IQU5ETEVSKHMsIDEsIFVTTSkgPT0gTUlCX1JFR0lTVEVSRURfT0spIHsKKyAgICAgICAgUkVHSVNURVJfU1lTT1JfRU5UUlkodXNtTUlCQ29tcGxpYW5jZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRoZSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIGRlZmluaXRpb25zIGZvciB0aGUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUCBVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsLiIpOworICAgICAgICB1c21TdGF0c19yZWcgPSBzOworICAgIH0KK30KKwordm9pZAorc2h1dGRvd25fdXNtU3RhdHNfNV81KHZvaWQpCit7CisgICAgVU5SRUdJU1RFUl9TWVNPUl9FTlRSWSh1c21NSUJDb21wbGlhbmNlKTsKKyAgICBpZiAodXNtU3RhdHNfcmVnKSB7CisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKHVzbVN0YXRzX3JlZyk7CisgICAgICAgIHVzbVN0YXRzX3JlZyA9IE5VTEw7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVN0YXRzXzVfNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMDcxOWUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtU3RhdHNfNV81LmgKQEAgLTAsMCArMSwxMCBAQAorI2lmbmRlZiBfTUlCR1JPVVBfVVNNU1RBVFNfSAorI2RlZmluZSBfTUlCR1JPVVBfVVNNU1RBVFNfSAorCitjb25maWdfZXhjbHVkZShzbm1wdjMvdXNtU3RhdHMpCitjb25maWdfYWRkX21pYihTTk1QLVVTRVItQkFTRUQtU00tTUlCKQorCit2b2lkIGluaXRfdXNtU3RhdHNfNV81KHZvaWQpOwordm9pZCBzaHV0ZG93bl91c21TdGF0c181XzUodm9pZCk7CisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfVVNNU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYyBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmMKaW5kZXggMGViMGRhYy4uOWYwNTAzZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuYworKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5jCkBAIC0zLDYgKzMsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCiAjaWYgSEFWRV9TVFJJTkdfSApAQCAtMTEsMzcgKzEyLDQ0IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ1c21Vc2VyLmgiCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogaW50IHVzbVN0YXR1c0NoZWNrKHN0cnVjdCB1c21Vc2VyICp1cHRyKTsKKyNlbmRpZiAgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtdXNlcl9hbGwsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGluaXRfcmVnaXN0ZXJfdXNtdXNlcl9jb250ZXh0LCB1c211c2VyX2FsbCkKIAogc3RydWN0IHZhcmlhYmxlNCB1c21Vc2VyX3ZhcmlhYmxlc1tdID0gewotICAgIHtVU01VU0VSU1BJTkxPQ0ssIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAxLCB7MX19LAotICAgIHtVU01VU0VSU0VDVVJJVFlOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAzfX0sCi0gICAge1VTTVVTRVJDTE9ORUZST00sIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA0fX0sCi0gICAge1VTTVVTRVJBVVRIUFJPVE9DT0wsIEFTTl9PQkpFQ1RfSUQsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsCi0gICAgIHsyLCAxLCA1fX0sCi0gICAge1VTTVVTRVJBVVRIS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLAotICAgICB7MiwgMSwgNn19LAotICAgIHtVU01VU0VST1dOQVVUSEtFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywKLSAgICAgezIsIDEsIDd9fSwKLSAgICB7VVNNVVNFUlBSSVZQUk9UT0NPTCwgQVNOX09CSkVDVF9JRCwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywKLSAgICAgezIsIDEsIDh9fSwKLSAgICB7VVNNVVNFUlBSSVZLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsCi0gICAgIHsyLCAxLCA5fX0sCi0gICAge1VTTVVTRVJPV05QUklWS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl91c21Vc2VyLCAzLAotICAgICB7MiwgMSwgMTB9fSwKLSAgICB7VVNNVVNFUlBVQkxJQywgQVNOX09DVEVUX1NUUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywgezIsIDEsIDExfX0sCi0gICAge1VTTVVTRVJTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxMn19LAotICAgIHtVU01VU0VSU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdXNtVXNlciwgMywgezIsIDEsIDEzfX0sCisgICAge1VTTVVTRVJTUElOTE9DSywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDEsIHsxfX0sCisgICAge1VTTVVTRVJTRUNVUklUWU5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDN9fSwKKyAgICB7VVNNVVNFUkNMT05FRlJPTSwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDR9fSwKKyAgICB7VVNNVVNFUkFVVEhQUk9UT0NPTCwgQVNOX09CSkVDVF9JRCwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDV9fSwKKyAgICB7VVNNVVNFUkFVVEhLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCA2fX0sCisgICAge1VTTVVTRVJPV05BVVRIS0VZQ0hBTkdFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgN319LAorICAgIHtVU01VU0VSUFJJVlBST1RPQ09MLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgOH19LAorICAgIHtVU01VU0VSUFJJVktFWUNIQU5HRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDl9fSwKKyAgICB7VVNNVVNFUk9XTlBSSVZLRVlDSEFOR0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3VzbVVzZXIsIDMsIHsyLCAxLCAxMH19LAorICAgIHtVU01VU0VSUFVCTElDLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTF9fSwKKyAgICB7VVNNVVNFUlNUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdXNtVXNlciwgMywgezIsIDEsIDEyfX0sCisgICAge1VTTVVTRVJTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl91c21Vc2VyLCAzLCB7MiwgMSwgMTN9fSwKIAogfTsKIApAQCAtNjIsNiArNzAsNyBAQAogICAgICAgICAgICAgICAgICB1c21Vc2VyX3ZhcmlhYmxlc19vaWQpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5JVF9SRUdJU1RFUl9VU01VU0VSX0NPTlRFWFQKIHZvaWQKIGluaXRfcmVnaXN0ZXJfdXNtVXNlcl9jb250ZXh0KGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSB7CiAgICAgcmVnaXN0ZXJfbWliX2NvbnRleHQoInNubXB2My91c21Vc2VyIiwKQEAgLTczLDYgKzgyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX01JQl9QUklPUklUWSwgMCwgMCwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZXh0TmFtZSwgLTEsIDApOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSU5JVF9SRUdJU1RFUl9VU01VU0VSX0NPTlRFWFQgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIHVzbV9nZW5lcmF0ZV9PSUQKQEAgLTMwMSw4ICszMTEsMTEgQEAKICAgICBpZiAoIXZwIHx8ICFuYW1lIHx8ICFsZW5ndGggfHwgIXZhcl9sZW4pCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgKndyaXRlX21ldGhvZCA9IDA7ICAgICAgICAgIC8qIGFzc3VtZSBpdCBpc250IHdyaXRhYmxlIGZvciB0aGUgdGltZSBiZWluZyAqLwotICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsgICAgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCisgICAgLyogYXNzdW1lIGl0IGlzbnQgd3JpdGFibGUgZm9yIHRoZSB0aW1lIGJlaW5nICovCisgICAgKndyaXRlX21ldGhvZCA9IChXcml0ZU1ldGhvZCopMDsgICAgCisKKyAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLworICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsKIAogICAgIGlmICh2cC0+bWFnaWMgIT0gVVNNVVNFUlNQSU5MT0NLKSB7CiAgICAgICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKQEAgLTMxNSw3ICszMjgsNyBAQAogICAgICAgICAgICAgKGV4YWN0ID09IDEgJiYgcnRlc3QgIT0gMCkpIHsKICAgICAgICAgICAgIGlmICh2YXJfbGVuKQogICAgICAgICAgICAgICAgICp2YXJfbGVuID0gMDsKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgbWVtc2V0KG5ld25hbWUsIDAsIHNpemVvZihuZXduYW1lKSk7CiAgICAgICAgIGlmICgoKGludCkgKmxlbmd0aCkgPD0gKGludCkgdnAtPm5hbWVsZW4gfHwgcnRlc3QgPT0gLTEpIHsKQEAgLTM3Miw2ICszODUsNyBAQAogICAgICAgICAgICAgaW5kZXhPaWQgPSB1c21fZ2VuZXJhdGVfT0lEKHZwLT5uYW1lLCB2cC0+bmFtZWxlbiwgdXB0ciwgJmxlbik7CiAgICAgICAgICAgICAqbGVuZ3RoID0gbGVuOwogICAgICAgICAgICAgbWVtbW92ZShuYW1lLCBpbmRleE9pZCwgbGVuICogc2l6ZW9mKG9pZCkpOworCiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtVXNlciIsICJGb3VuZCB1c2VyOiAlcyAtICIsIHVwdHItPm5hbWUpKTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSB1cHRyLT5lbmdpbmVJRExlbjsgaSsrKSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ1c21Vc2VyIiwgIiAleCIsIHVwdHItPmVuZ2luZUlEW2ldKSk7CkBAIC0zODQsMTAgKzM5OCwxMSBAQAogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGhlYWRlcl9nZW5lcmljKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kaWYgLS0gdnAtPm1hZ2ljICE9IFVTTVVTRVJTUElOTE9DSyAqLwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIAogICAgIGNhc2UgVVNNVVNFUlNQSU5MT0NLOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdXNtVXNlclNwaW5Mb2NrOwogICAgICAgICBsb25nX3JldCA9IHVzbVVzZXJTcGluTG9jazsKQEAgLTQ1OCw3ICs0NzMsNyBAQAogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfdXNtVXNlclB1YmxpYzsKICAgICAgICAgaWYgKHVwdHIpIHsKICAgICAgICAgICAgIGlmICh1cHRyLT51c2VyUHVibGljU3RyaW5nKSB7Ci0gICAgICAgICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oKGNoYXIgKikgdXB0ci0+dXNlclB1YmxpY1N0cmluZyk7CisgICAgICAgICAgICAgICAgKnZhcl9sZW4gPSB1cHRyLT51c2VyUHVibGljU3RyaW5nTGVuOwogICAgICAgICAgICAgICAgIHJldHVybiB1cHRyLT51c2VyUHVibGljU3RyaW5nOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKnN0cmluZyA9IDA7CkBAIC00ODMsMTUgKzQ5OCwyMSBAQAogICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopICZsb25nX3JldDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gTlVMTDsKLQogICAgIGRlZmF1bHQ6CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfdXNtVXNlclxuIiwKICAgICAgICAgICAgICAgICAgICAgdnAtPm1hZ2ljKSk7CisjZWxzZSAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovIAorICAgIGRlZmF1bHQ6CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZCIsICJubyB3cml0ZSBzdXBwb3J0IGZvciB2YXJfdXNtVXNlclxuIikpOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAgICAgfQotICAgIHJldHVybiAwOworICAgIHJldHVybiBOVUxMOwogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB2YXJfdXNtVXNlcigpICovCiAKKworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCisKIC8qCiAgKiB3cml0ZV91c21Vc2VyU3BpbkxvY2soKTogY2FsbGVkIHdoZW4gYSBzZXQgaXMgcGVyZm9ybWVkIG9uIHRoZQogICogdXNtVXNlclNwaW5Mb2NrIG9iamVjdCAKQEAgLTc0NSw3ICs3NjYsNiBAQAogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvcHRyKTsKLSAgICAgICAgb3B0ciA9IE5VTEw7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gRlJFRSB8fCBhY3Rpb24gPT0gVU5ETykgewogICAgICAgICBpZiAoKHVwdHIgPSB1c21fcGFyc2VfdXNlcihuYW1lLCBuYW1lX2xlbikpICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChyZXNldE9uRmFpbCkgewpAQCAtODg4LDcgKzkwOCw2IEBACiAgICAgICAgIHVwdHItPmF1dGhLZXlMZW4gPSBidWZsZW47CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvbGRrZXkpOwotICAgICAgICBvbGRrZXkgPSBOVUxMOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgaWYgKCh1cHRyID0gdXNtX3BhcnNlX3VzZXIobmFtZSwgbmFtZV9sZW4pKSAhPSBOVUxMICYmIHJlc2V0T25GYWlsKSB7CiAgICAgICAgICAgICBTTk1QX0ZSRUUodXB0ci0+YXV0aEtleSk7CkBAIC0xMDEzLDcgKzEwMzIsNiBAQAogICAgICAgICB9CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gQ09NTUlUKSB7CiAgICAgICAgIFNOTVBfRlJFRShvcHRyKTsKLSAgICAgICAgb3B0ciA9IE5VTEw7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gRlJFRSB8fCBhY3Rpb24gPT0gVU5ETykgewogICAgICAgICBpZiAoKHVwdHIgPSB1c21fcGFyc2VfdXNlcihuYW1lLCBuYW1lX2xlbikpICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmIChyZXNldE9uRmFpbCkgewpAQCAtMTEzOCw3ICsxMTU2LDYgQEAKICAgICAgICAgdXB0ci0+cHJpdktleUxlbiA9IGJ1ZmxlbjsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9sZGtleSk7Ci0gICAgICAgIG9sZGtleSA9IE5VTEw7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gVU5ETykgewogICAgICAgICBpZiAoKHVwdHIgPSB1c21fcGFyc2VfdXNlcihuYW1lLCBuYW1lX2xlbikpICE9IE5VTEwgJiYgcmVzZXRPbkZhaWwpIHsKICAgICAgICAgICAgIFNOTVBfRlJFRSh1cHRyLT5wcml2S2V5KTsKQEAgLTExNjQsNyArMTE4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byB1c21Vc2VyUHVibGljIG5vdCBBU05fT0NURVRfU1RSXG4iKSk7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgfQotICAgIGlmICh2YXJfdmFsX2xlbiA8IDAgfHwgdmFyX3ZhbF9sZW4gPiAzMikgeworICAgIGlmICh2YXJfdmFsX2xlbiA+IDMyKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21Vc2VyIiwgIndyaXRlIHRvIHVzbVVzZXJQdWJsaWM6IGJhZCBsZW5ndGhcbiIpKTsKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HTEVOR1RIOwogICAgIH0KQEAgLTExNzcsMTQgKzExOTQsMTUgQEAKICAgICAgICAgfQogICAgICAgICBpZiAodXB0ci0+dXNlclB1YmxpY1N0cmluZykKICAgICAgICAgICAgIGZyZWUodXB0ci0+dXNlclB1YmxpY1N0cmluZyk7Ci0gICAgICAgIHVwdHItPnVzZXJQdWJsaWNTdHJpbmcgPSAodV9jaGFyICopIG1hbGxvYyh2YXJfdmFsX2xlbiArIDEpOworICAgICAgICB1cHRyLT51c2VyUHVibGljU3RyaW5nID0gKHVfY2hhciAqKSBtYWxsb2ModmFyX3ZhbF9sZW4pOwogICAgICAgICBpZiAodXB0ci0+dXNlclB1YmxpY1N0cmluZyA9PSBOVUxMKSB7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgICAgICB9CiAgICAgICAgIG1lbWNweSh1cHRyLT51c2VyUHVibGljU3RyaW5nLCB2YXJfdmFsLCB2YXJfdmFsX2xlbik7Ci0gICAgICAgIHVwdHItPnVzZXJQdWJsaWNTdHJpbmdbdmFyX3ZhbF9sZW5dID0gMDsKLSAgICAgICAgREVCVUdNU0coKCJ1c21Vc2VyIiwgInNldHRpbmcgcHVibGljIHN0cmluZzogJWQgLSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgIHZhcl92YWxfbGVuLCB1cHRyLT51c2VyUHVibGljU3RyaW5nKSk7CisgICAgICAgIHVwdHItPnVzZXJQdWJsaWNTdHJpbmdMZW4gPSB2YXJfdmFsX2xlbjsKKyAgICAgICAgREVCVUdNU0coKCJ1c21Vc2VyIiwgInNldHRpbmcgcHVibGljIHN0cmluZzogJWQgLSAiLCAoaW50KXZhcl92YWxfbGVuKSk7CisgICAgICAgIERFQlVHTVNHSEVYKCgidXNtVXNlciIsIHVwdHItPnVzZXJQdWJsaWNTdHJpbmcsIHZhcl92YWxfbGVuKSk7CisgICAgICAgIERFQlVHTVNHKCgidXNtVXNlciIsICJcbiIpKTsKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB3cml0ZV91c21Vc2VyUHVibGljKCkgKi8KQEAgLTEyNDEsNyArMTI1OSw3IEBACiAgICAgICAgICAgICAgKiBDb252ZW50aW9uIGFwcGx5LiAgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c21Vc2VyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJsb25nX3JldCAlZCB1cHRyLT5zdCAlZCB1cHRyLT5zdGF0dXMgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAibG9uZ19yZXQgJWxkIHVwdHItPnN0ICVkIHVwdHItPnN0YXR1cyAlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdfcmV0LCB1cHRyLT51c2VyU3RvcmFnZVR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICB1cHRyLT51c2VyU3RhdHVzKSk7CiAKQEAgLTEyNzMsNiArMTI5MSw3IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB3cml0ZV91c21Vc2VyU3RvcmFnZVR5cGUoKSAqLwogCisKIC8qCiAgKiBSZXR1cm4gMSBpZiBlbm91Z2ggb2JqZWN0cyBoYXZlIGJlZW4gc2V0IHVwIHRvIHRyYW5zaXRpb24gcm93U3RhdHVzIHRvCiAgKiBub3RJblNlcnZpY2UoMikgb3IgYWN0aXZlKDEpLiAgCkBAIC0xNDc5LDcgKzE0OTgsOSBAQAogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorfSAgLyogd3JpdGVfdXNtVXNlclN0YXR1cyAqLworCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLyAKIAogI2lmIDAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaCBiL2FnZW50L21pYmdyb3VwL3NubXB2My91c21Vc2VyLmgKaW5kZXggZTkyMGIyMC4uNTNkMTQxMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzL3VzbVVzZXIuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjMvdXNtVXNlci5oCkBAIC0xNSwxMCArMTUsMTAgQEAKICNkZWZpbmUgVVNNX0xFTkdUSF9PSURfTUFYCTY2CiAKIC8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiBjb25maWdfYWRkX21pYihTTk1QLVVTRVItQkFTRUQtU00tTUlCKQogCiAgICAgLyoKQEAgLTU0LDYgKzU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogZW5naW5lSURMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipuYW1lLCBzaXplX3QgKiBuYW1lTGVuKTsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV91c21Vc2VyU3BpbkxvY2s7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV91c21Vc2VyQ2xvbmVGcm9tOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdXNtVXNlckF1dGhQcm90b2NvbDsKQEAgLTYzLDUgKzY0LDYgQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3VzbVVzZXJQdWJsaWM7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV91c21Vc2VyU3RvcmFnZVR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV91c21Vc2VyU3RhdHVzOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8gCiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1VTTVVTRVJfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oIGIvYWdlbnQvbWliZ3JvdXAvc25tcHYzbWlicy5oCmluZGV4IDYwZjY2NmQuLjBjY2E5YTMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3NubXB2M21pYnMuaAorKysgYi9hZ2VudC9taWJncm91cC9zbm1wdjNtaWJzLmgKQEAgLTcsOCArNywxMCBAQAogICovCiAKIGNvbmZpZ19yZXF1aXJlKHNubXB2My9zbm1wRW5naW5lKQotY29uZmlnX3JlcXVpcmUoc25tcHYzL3NubXBNUERTdGF0cykKLWNvbmZpZ19yZXF1aXJlKHNubXB2My91c21TdGF0cykKK2NvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKHNubXB2My9zbm1wTVBEU3RhdHMsIDUuNSwgc25tcHYzL3NubXBNUERTdGF0c181XzUpKQorI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQorY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoc25tcHYzL3VzbVN0YXRzLCA1LjUsIHNubXB2My91c21TdGF0c181XzUpKQogY29uZmlnX3JlcXVpcmUoc25tcHYzL3VzbUNvbmYpCiBjb25maWdfcmVxdWlyZShzbm1wdjMvdXNtVXNlcikKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTlNNUFYzTUlCU19IICovCisjZW5kaWYgLyogTkVUU05NUF9TRUNNT0RfVVNNICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBWM01JQlNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvc3RydWN0LmggYi9hZ2VudC9taWJncm91cC9zdHJ1Y3QuaAppbmRleCAxMGI4NDNkLi5kMDI1ZWQwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC9zdHJ1Y3QuaAorKysgYi9hZ2VudC9taWJncm91cC9zdHJ1Y3QuaApAQCAtMTYsOSArMTYsMTAgQEAKICAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OwogICAgIGNoYXIgICAgICAgICAgICBvdXRwdXRbU1RSTUFYXTsKICAgICBzdHJ1Y3QgZXh0ZW5zaWJsZSAqbmV4dDsKLSAgICB1bnNpZ25lZCBsb25nICAgbWlib2lkW01JQk1BWF07CisgICAgb2lkICAgICAgICAgICAgIG1pYm9pZFtNSUJNQVhdOwogICAgIHNpemVfdCAgICAgICAgICBtaWJsZW47Ci0gICAgaW50ICAgICAgICAgICAgIHBpZDsKKyAgICBpbnQgICAgICAgICAgICAgbWlicHJpb3JpdHk7CisgICAgbmV0c25tcF9waWRfdCAgIHBpZDsKICNpZiBkZWZpbmVkKFdJTjMyKQogICAgIEhBTkRMRSAgICAgICAgICB0aWQ7ICAgICAgICAgICAgICAgIC8qIFdJTjMyIHRocmVhZCAqLwogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQuaCBiL2FnZW50L21pYmdyb3VwL3RhcmdldC5oCmluZGV4IDM5ZmFkZmUuLjU4YzViNGIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC5oCkBAIC0xLDUgKzEsNSBAQAogY29uZmlnX3JlcXVpcmUodGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkpCiBjb25maWdfcmVxdWlyZSh0YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5KQogY29uZmlnX3JlcXVpcmUodGFyZ2V0L3RhcmdldCkKLWNvbmZpZ19yZXF1aXJlKHRhcmdldC90YXJnZXRfY291bnRlcnMpCitjb25maWdfdmVyc2lvbl9yZXF1aXJlKCh0YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLCA1LjUsIHRhcmdldC90YXJnZXRfY291bnRlcnNfNV81KSkKIGNvbmZpZ19hZGRfbWliKFNOTVAtVEFSR0VULU1JQikKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMgYi9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5jCmluZGV4IGJiNzMwMmQuLmIxZWIwMGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuYwpAQCAtMTUsMjYgKzE1LDI3IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJzbm1wVGFyZ2V0QWRkckVudHJ5LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogI2RlZmluZSBzbm1wVGFyZ2V0QWRkck9JRExlbiAxMSAvKlRoaXMgaXMgYmFzZStjb2x1bW4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpLmUuIGV2ZXJ5dGhpbmcgYnV0IGluZGV4ICovCiAKLW9pZCAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRFtzbm1wVGFyZ2V0QWRkck9JRExlbl0gPQorc3RhdGljIG9pZCAgICAgIHNubXBUYXJnZXRBZGRyT0lEW3NubXBUYXJnZXRBZGRyT0lETGVuXSA9CiAgICAgeyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgMiwgMSwgMCB9OwogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbm1wVGFyZ2V0U3BpbkxvY2sgPSAwOwotc3RhdGljIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICphQWRkclRhYmxlID0gMDsKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqYUFkZHJUYWJsZSA9IE5VTEw7CiAKIAorc3RhdGljIGludAorc3RvcmVfc25tcFRhcmdldEFkZHJFbnRyeShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKKwogLyoKICAqIFV0aWxpdHkgcm91dGluZXMgCiAgKi8KQEAgLTQ1LDExICs0NiwxMiBAQAogfQogCiBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqCi1nZXRfYWRkckZvck5hbWUoY2hhciAqbmFtZSkKK2dldF9hZGRyRm9yTmFtZTIoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciBuYW1lTGVuKQogewogICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpwdHI7CiAgICAgZm9yIChwdHIgPSBhQWRkclRhYmxlOyBwdHIgIT0gTlVMTDsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIGlmIChwdHItPm5hbWUgJiYgc3RyY21wKHB0ci0+bmFtZSwgbmFtZSkgPT0gMCkKKyAgICAgICAgaWYgKHB0ci0+bmFtZUxlbiA9PSBuYW1lTGVuICYmCisgICAgICAgICAgICBtZW1jbXAocHRyLT5uYW1lRGF0YSwgbmFtZSwgbmFtZUxlbikgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBwdHI7CiAgICAgfQogICAgIHJldHVybiBOVUxMOwpAQCAtNjcsMjEgKzY5LDIyIEBACiAgICAgbmV3RW50cnkgPSBtYWxsb2Moc2l6ZW9mKCpuZXdFbnRyeSkpOwogCiAgICAgaWYgKG5ld0VudHJ5KSB7Ci0gICAgICAgIG5ld0VudHJ5LT5uYW1lID0gMDsKKyAgICAgICAgbmV3RW50cnktPm5hbWVEYXRhID0gTlVMTDsKKyAgICAgICAgbmV3RW50cnktPm5hbWVMZW4gPSAwOwogCiAgICAgICAgIG5ld0VudHJ5LT50RG9tYWluTGVuID0gMDsKLSAgICAgICAgbmV3RW50cnktPnRBZGRyZXNzID0gMDsKKyAgICAgICAgbmV3RW50cnktPnRBZGRyZXNzID0gTlVMTDsKIAogICAgICAgICBuZXdFbnRyeS0+dGltZW91dCA9IDE1MDA7CiAgICAgICAgIG5ld0VudHJ5LT5yZXRyeUNvdW50ID0gMzsKIAogICAgICAgICBuZXdFbnRyeS0+dGFnTGlzdCA9IHN0cmR1cCgiIik7Ci0gICAgICAgIG5ld0VudHJ5LT5wYXJhbXMgPSAwOworICAgICAgICBuZXdFbnRyeS0+cGFyYW1zID0gTlVMTDsKIAogICAgICAgICBuZXdFbnRyeS0+c3RvcmFnZVR5cGUgPSBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEU7CiAgICAgICAgIG5ld0VudHJ5LT5yb3dTdGF0dXMgPSBTTk1QX1JPV19OT05FWElTVEVOVDsKICAgICAgICAgbmV3RW50cnktPnNlc3MgPSBOVUxMOwotICAgICAgICBuZXdFbnRyeS0+bmV4dCA9IDA7CisgICAgICAgIG5ld0VudHJ5LT5uZXh0ID0gTlVMTDsKICAgICB9CiAKICAgICByZXR1cm4gbmV3RW50cnk7CkBAIC05NSwxMSArOTgsMTEgQEAKIHZvaWQKIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqcmVhcGVkKQogewotICAgIGlmIChyZWFwZWQtPnNlc3MgIT0gTlVMTCkgeworICAgIGlmIChyZWFwZWQtPnNlc3MpCiAgICAgICAgIHNubXBfY2xvc2UocmVhcGVkLT5zZXNzKTsKLSAgICB9Ci0gICAgU05NUF9GUkVFKHJlYXBlZC0+bmFtZSk7Ci0gICAgU05NUF9GUkVFKHJlYXBlZC0+dEFkZHJlc3MpOworICAgIGVsc2UKKyAgICAgICAgU05NUF9GUkVFKHJlYXBlZC0+dEFkZHJlc3MpOworICAgIFNOTVBfRlJFRShyZWFwZWQtPm5hbWVEYXRhKTsKICAgICBTTk1QX0ZSRUUocmVhcGVkLT50YWdMaXN0KTsKICAgICBTTk1QX0ZSRUUocmVhcGVkLT5wYXJhbXMpOwogCkBAIC0xMTksMzQgKzEyMiwyOCBAQAogewogICAgIHN0YXRpYyBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqY3Vycl9zdHJ1Y3QsICpwcmV2X3N0cnVjdDsKICAgICBpbnQgICAgICAgICAgICAgaTsKLSAgICBzaXplX3QgICAgICAgICAgbmV3T0lETGVuID0gMCwgY3Vyck9JRExlbiA9IDA7Ci0gICAgb2lkICAgICAgICAgICAgIG5ld09JRFsxMjhdLCBjdXJyT0lEWzEyOF07CiAKICAgICAvKgogICAgICAqIGlmIHRoZSBsaXN0IGlzIGVtcHR5LCBhZGQgdGhlIG5ldyBlbnRyeSB0byB0aGUgdG9wIAogICAgICAqLwotICAgIGlmICgocHJldl9zdHJ1Y3QgPSBjdXJyX3N0cnVjdCA9ICpsaXN0UHRyKSA9PSAwKSB7CisgICAgaWYgKChwcmV2X3N0cnVjdCA9IGN1cnJfc3RydWN0ID0gKmxpc3RQdHIpID09IE5VTEwpIHsKICAgICAgICAgKmxpc3RQdHIgPSBuZXdFbnRyeTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qCi0gICAgICAgICAqIGdldCB0aGUgJ09JRCcgdmFsdWUgb2YgdGhlIG5ldyBlbnRyeSAKLSAgICAgICAgICovCi0gICAgICAgIG5ld09JRExlbiA9IHN0cmxlbihuZXdFbnRyeS0+bmFtZSk7Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBuZXdPSURMZW47IGkrKykgewotICAgICAgICAgICAgbmV3T0lEW2ldID0gbmV3RW50cnktPm5hbWVbaV07Ci0gICAgICAgIH0KLQotICAgICAgICAvKgogICAgICAgICAgKiBzZWFyY2ggdGhyb3VnaCB0aGUgbGlzdCBmb3IgYW4gZXF1YWwgb3IgZ3JlYXRlciBPSUQgdmFsdWUgCiAgICAgICAgICAqLwotICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gMCkgewotICAgICAgICAgICAgY3Vyck9JRExlbiA9IHN0cmxlbihjdXJyX3N0cnVjdC0+bmFtZSk7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgY3Vyck9JRExlbjsgaSsrKSB7Ci0gICAgICAgICAgICAgICAgY3Vyck9JRFtpXSA9IGN1cnJfc3RydWN0LT5uYW1lW2ldOworICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gTlVMTCkgeworICAgICAgICAgICAgaSA9IG1lbWNtcChuZXdFbnRyeS0+bmFtZURhdGEsIGN1cnJfc3RydWN0LT5uYW1lRGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPm5hbWVMZW4gPCBjdXJyX3N0cnVjdC0+bmFtZUxlbiA/CisgICAgICAgICAgICAgICAgICAgICAgIG5ld0VudHJ5LT5uYW1lTGVuIDogY3Vycl9zdHJ1Y3QtPm5hbWVMZW4pOworICAgICAgICAgICAgaWYgKGkgPT0gMCkgeworICAgICAgICAgICAgICAgIGlmIChuZXdFbnRyeS0+bmFtZUxlbiA8IGN1cnJfc3RydWN0LT5uYW1lTGVuKQorICAgICAgICAgICAgICAgICAgICBpID0gLTE7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobmV3RW50cnktPm5hbWVMZW4gPiBjdXJyX3N0cnVjdC0+bmFtZUxlbikKKyAgICAgICAgICAgICAgICAgICAgaSA9IDE7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGkgPSBzbm1wX29pZF9jb21wYXJlKG5ld09JRCwgbmV3T0lETGVuLCBjdXJyT0lELCBjdXJyT0lETGVuKTsKICAgICAgICAgICAgIGlmIChpID09IDApIHsgICAgICAgLyogRXhhY3QgbWF0Y2gsIG92ZXJ3cml0ZSB3aXRoIG5ldyBzdHJ1Y3QgKi8KICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+bmV4dCA9IGN1cnJfc3RydWN0LT5uZXh0OwogICAgICAgICAgICAgICAgIC8qCkBAIC0xOTcsMTQgKzE5NCwxNCBAQAogewogICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICp0cHRyOwogCi0gICAgaWYgKCh0cHRyID0gKmxpc3RQdHIpID09IDApCisgICAgaWYgKCh0cHRyID0gKmxpc3RQdHIpID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKICAgICBlbHNlIGlmICh0cHRyID09IG9sZEVudHJ5KSB7CiAgICAgICAgICpsaXN0UHRyID0gKCpsaXN0UHRyKS0+bmV4dDsKICAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKHRwdHIpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKLSAgICAgICAgd2hpbGUgKHRwdHItPm5leHQgIT0gMCkgeworICAgICAgICB3aGlsZSAodHB0ci0+bmV4dCAhPSBOVUxMKSB7CiAgICAgICAgICAgICBpZiAodHB0ci0+bmV4dCA9PSBvbGRFbnRyeSkgewogICAgICAgICAgICAgICAgIHRwdHItPm5leHQgPSB0cHRyLT5uZXh0LT5uZXh0OwogICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShvbGRFbnRyeSk7CkBAIC0yMzQsMTIgKzIzMSwxMiBAQAogICAgICAqLwogICAgIG1lbWNweShuZXdOdW0sIGJhc2VOYW1lLCBiYXNlTmFtZUxlbiAqIHNpemVvZihvaWQpKTsKIAotICAgIGZvciAodGVtcF9zdHJ1Y3QgPSBhQWRkclRhYmxlOyB0ZW1wX3N0cnVjdCAhPSAwOworICAgIGZvciAodGVtcF9zdHJ1Y3QgPSBhQWRkclRhYmxlOyB0ZW1wX3N0cnVjdCAhPSBOVUxMOwogICAgICAgICAgdGVtcF9zdHJ1Y3QgPSB0ZW1wX3N0cnVjdC0+bmV4dCkgewotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgc3RybGVuKHRlbXBfc3RydWN0LT5uYW1lKTsgaSsrKSB7Ci0gICAgICAgICAgICBuZXdOdW1bYmFzZU5hbWVMZW4gKyBpXSA9IHRlbXBfc3RydWN0LT5uYW1lW2ldOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdGVtcF9zdHJ1Y3QtPm5hbWVMZW47IGkrKykgeworICAgICAgICAgICAgbmV3TnVtW2Jhc2VOYW1lTGVuICsgaV0gPSAodW5zaWduZWQgY2hhcil0ZW1wX3N0cnVjdC0+bmFtZURhdGFbaV07CiAgICAgICAgIH0KLSAgICAgICAgbXlPSURMZW4gPSBiYXNlTmFtZUxlbiArIHN0cmxlbih0ZW1wX3N0cnVjdC0+bmFtZSk7CisgICAgICAgIG15T0lETGVuID0gYmFzZU5hbWVMZW4gKyB0ZW1wX3N0cnVjdC0+bmFtZUxlbjsKICAgICAgICAgaSA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3TnVtLCBteU9JRExlbik7CiAgICAgICAgIC8qCiAgICAgICAgICAqIEFzc3VtZXMgdGhhdCB0aGUgbGlua2VkIGxpc3Qgc29ydGVkIGJ5IE9JRCwgbG93IHRvIGhpZ2ggCkBAIC0yNTIsNyArMjQ5LDcgQEAKICAgICAgICAgICAgIHJldHVybiB0ZW1wX3N0cnVjdDsKICAgICAgICAgfQogICAgIH0KLSAgICByZXR1cm4gKDApOworICAgIHJldHVybiBOVUxMOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZWFyY2hfc25tcFRhcmdldEFkZHJUYWJsZSAgKi8KIAogCkBAIC0yNzcsNDMgKzI3NCw0NCBAQAogICogZm9yIHRoZSBzbm1wVGFyZ2V0QWRkckVudHJ5IG1pYiAKICAqLwogCi1zdHJ1Y3QgdmFyaWFibGUyIHNubXBUYXJnZXRBZGRyRW50cnlfdmFyaWFibGVzW10gPSB7Ci0gICAge1NOTVBUQVJHRVRBRERSVERPTUFJTiwgQVNOX09CSkVDVF9JRCwgUldSSVRFLAorc3RhdGljIGNvbnN0IHN0cnVjdCB2YXJpYWJsZTIgc25tcFRhcmdldEFkZHJFbnRyeV92YXJpYWJsZXNbXSA9IHsKKyAgICB7U05NUFRBUkdFVEFERFJURE9NQUlOLCBBU05fT0JKRUNUX0lELCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJURE9NQUlOQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSVEFERFJFU1MsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJUQUREUkVTUywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSVEFERFJFU1NDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJUSU1FT1VULCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlRJTUVPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJUSU1FT1VUQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSUkVUUllDT1VOVCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJSRVRSWUNPVU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldEFkZHJFbnRyeSwgMSwge1NOTVBUQVJHRVRBRERSUkVUUllDT1VOVENPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUQUREUlRBR0xJU1QsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJUQUdMSVNULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJUQUdMSVNUQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSUEFSQU1TLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRBRERSUEFSQU1TLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5LCAxLCB7U05NUFRBUkdFVEFERFJQQVJBTVNDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVEFERFJTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVEFERFJTVE9SQUdFVFlQRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlNUT1JBR0VUWVBFQ09MVU1OfX0sCi0gICAge1NOTVBUQVJHRVRBRERSUk9XU1RBVFVTLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUQUREUlJPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRBZGRyRW50cnksIDEsIHtTTk1QVEFSR0VUQUREUlJPV1NUQVRVU0NPTFVNTn19LAogCiB9OwogCi1zdHJ1Y3QgdmFyaWFibGUyIHNubXBUYXJnZXRTcGluTG9ja192YXJbXSA9IHsKLSAgICB7U05NUFRBUkdFVFNQSU5MT0NLLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdGFyZ2V0U3BpbkxvY2ssIDEsIHsxfX0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdmFyaWFibGUyIHNubXBUYXJnZXRTcGluTG9ja192YXJbXSA9IHsKKyAgICB7U05NUFRBUkdFVFNQSU5MT0NLLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdGFyZ2V0U3BpbkxvY2ssIDEsIHsxfX0KIH07CiAKLXN0YXRpYyBvaWQgICAgICBzbm1wVGFyZ2V0U3BpbkxvY2tfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxIH07CitzdGF0aWMgY29uc3Qgb2lkIHNubXBUYXJnZXRTcGluTG9ja19vaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMTIsIDEgfTsKIAogLyoKICAqIG5vdyBsb2FkIHRoaXMgbWliIGludG8gdGhlIGFnZW50cyBtaWIgdGFibGUgCiAgKi8KLW9pZCAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkckVudHJ5X3ZhcmlhYmxlc19vaWRbXSA9CitzdGF0aWMgY29uc3Qgb2lkIHNubXBUYXJnZXRBZGRyRW50cnlfdmFyaWFibGVzX29pZFtdID0KICAgICB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCAyLCAxIH07CiAKIAogdm9pZAogaW5pdF9zbm1wVGFyZ2V0QWRkckVudHJ5KHZvaWQpCiB7Ci0gICAgYUFkZHJUYWJsZSA9IDA7CisgICAgYUFkZHJUYWJsZSA9IE5VTEw7CiAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLCAiaW5pdFxuIikpOwogICAgIFJFR0lTVEVSX01JQigidGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkckVudHJ5X3ZhcmlhYmxlcywgdmFyaWFibGUyLApAQCAtMzIyLDcgKzMyMCw4IEBACiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMiwgc25tcFRhcmdldFNwaW5Mb2NrX29pZCk7CiAKICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigidGFyZ2V0QWRkciIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldEFkZHIsIDAsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRBZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICgqKSh2b2lkKSkwLCBOVUxMKTsKIAogICAgIC8qCiAgICAgICogd2UgbmVlZCB0byBiZSBjYWxsZWQgYmFjayBsYXRlciAKQEAgLTMzMiwzNyArMzMxLDI4IEBACiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5pdF9zbm1wVGFyZ2V0QWRkckVudHJ5ICovCiAKLQotaW50Ci1zbm1wVGFyZ2V0QWRkcl9hZGROYW1lKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwgY2hhciAqY3B0cikKK3ZvaWQKK3NodXRkb3duX3NubXBUYXJnZXRBZGRyRW50cnkodm9pZCkKIHsKLSAgICBzaXplX3QgICAgICAgICAgbGVuOwotICAgIGlmIChjcHRyID09IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAotICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gbmFtZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7Ci0gICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbGVuID0gc3RybGVuKGNwdHIpOwotICAgICAgICAvKgotICAgICAgICAgKiBzcGVjIGNoZWNrIGZvciBzdHJpbmcgMS0zMiAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChsZW4gPCAxIHx8IGxlbiA+IDMyKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbmFtZSBvdXQgb2YgcmFuZ2UgaW4gY29uZmlnIHN0cmluZ1xuIikpOwotICAgICAgICAgICAgcmV0dXJuICgwKTsKLSAgICAgICAgfQotICAgICAgICBlbnRyeS0+bmFtZSA9IHN0cmR1cChjcHRyKTsKLSAgICB9Ci0gICAgcmV0dXJuICgxKTsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYWRkTmFtZSAqLworICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpwdHI7CisgICAgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKm5leHQ7CiAKKyAgICBmb3IgKHB0ciA9IGFBZGRyVGFibGU7IHB0cjsgcHRyID0gbmV4dCkgeworICAgICAgICBuZXh0ID0gcHRyLT5uZXh0OworICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UocHRyKTsKKyAgICB9CisgICAgYUFkZHJUYWJsZSA9IE5VTEw7CisKKyAgICBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JlX3NubXBUYXJnZXRBZGRyRW50cnksIE5VTEwsIEZBTFNFKTsKK30KIAogaW50CiBzbm1wVGFyZ2V0QWRkcl9hZGRURG9tYWluKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwgY2hhciAqY3B0cikKIHsKICAgICBzaXplX3QgICAgICAgICAgbGVuID0gMTI4OwogCi0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gdERvbWFpbiBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC0zOTIsNyArMzgyLDcgQEAKIHNubXBUYXJnZXRBZGRyX2FkZFRBZGRyZXNzKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIsIHNpemVfdCBsZW4pCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gdEFkZHJlc3MgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNDE4LDExICs0MDgsMTEgQEAKIGludAogc25tcFRhcmdldEFkZHJfYWRkVGltZW91dChzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBUaW1lb3V0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiBUaW1lb3V0IGlzIG5vdCBhIGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTQ0MywxMSArNDMzLDExIEBACiBzbm1wVGFyZ2V0QWRkcl9hZGRSZXRyeUNvdW50KHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIFJldHJ5IENvdW50IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiBSZXRyeSBDb3VudCBpcyBub3QgYSBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC00NzAsMTcgKzQ2MCwxNiBAQAogaW50CiBzbm1wVGFyZ2V0QWRkcl9hZGRUYWdMaXN0KHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwgY2hhciAqY3B0cikKIHsKLSAgICBzaXplX3QgICAgICAgICAgbGVuOwotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIHRhZyBsaXN0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKICAgICB9IGVsc2UgewotICAgICAgICBsZW4gPSBzdHJsZW4oY3B0cik7CisgICAgICAgIHNpemVfdCBsZW4gPSBzdHJsZW4oY3B0cik7CiAgICAgICAgIC8qCiAgICAgICAgICAqIHNwZWMgY2hlY2sgZm9yIHN0cmluZyAwLTI1NSAKICAgICAgICAgICovCi0gICAgICAgIGlmIChsZW4gPCAwIHx8IGxlbiA+IDI1NSkgeworICAgICAgICBpZiAobGVuID4gMjU1KSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogdGFnIGxpc3Qgb3V0IG9mIHJhbmdlIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgICAgIHJldHVybiAoMCk7CkBAIC00OTYsNyArNDg1LDcgQEAKIHNubXBUYXJnZXRBZGRyX2FkZFBhcmFtcyhzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksIGNoYXIgKmNwdHIpCiB7CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBwYXJhbXMgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNTIwLDE1ICs1MDksMTUgQEAKIHNubXBUYXJnZXRBZGRyX2FkZFN0b3JhZ2VUeXBlKHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZmZbMTAyNF07Ci0KLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBubyBzdG9yYWdlIHR5cGUgaW4gY29uZmlnIHN0cmluZ1xuIikpOworICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gc3RvcmFnZSB0eXBlIGluIGNvbmZpZyAiCisgICAgICAgICAgICAgICAgICAgICJzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IHN0b3JhZ2UgdHlwZSBpcyBub3QgYSBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CisgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBzdG9yYWdlIHR5cGUgaXMgbm90IGEgZGlnaXQgIgorICAgICAgICAgICAgICAgICAgICAiaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwogICAgIH0KICAgICAvKgpAQCAtNTQwLDE0ICs1MjksMTMgQEAKICAgICAgICAgICAgICAoZW50cnktPnN0b3JhZ2VUeXBlICE9IFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRSkgJiYKICAgICAgICAgICAgICAoZW50cnktPnN0b3JhZ2VUeXBlICE9IFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQpICYmCiAgICAgICAgICAgICAgKGVudHJ5LT5zdG9yYWdlVHlwZSAhPSBTTk1QX1NUT1JBR0VfUkVBRE9OTFkpKSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1ZmYsIHNpemVvZihidWZmKSwKLSAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogc3RvcmFnZSB0eXBlIG5vdCBhIHZhbGlkIHZhbHVlIG9mIG90aGVyKCVkKSwgdm9sYXRpbGUoJWQpLCBub252b2xhdGlsZSglZCksIHBlcm1hbmVudCglZCksIG9yIHJlYWRvbmx5KCVkKSBpbiBjb25maWcgc3RyaW5nLlxuIiwKLSAgICAgICAgICAgICAgICBTTk1QX1NUT1JBR0VfT1RIRVIsIFNOTVBfU1RPUkFHRV9WT0xBVElMRSwKLSAgICAgICAgICAgICAgICBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEUsIFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQsCi0gICAgICAgICAgICAgICAgU05NUF9TVE9SQUdFX1JFQURPTkxZKTsKLSAgICAgICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpLTEgXSA9IDA7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwgYnVmZikpOwotCisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IHN0b3JhZ2UgdHlwZSBub3QgYSB2YWxpZCAiCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSBvZiBvdGhlciglZCksIHZvbGF0aWxlKCVkKSwgbm9udm9sYXRpbGUoJWQpLCAiCisgICAgICAgICAgICAgICAgICAgICJwZXJtYW5lbnQoJWQpLCBvciByZWFkb25seSglZCkgaW4gY29uZmlnIHN0cmluZy5cbiIsCisgICAgICAgICAgICAgICAgICAgIFNOTVBfU1RPUkFHRV9PVEhFUiwgU05NUF9TVE9SQUdFX1ZPTEFUSUxFLAorICAgICAgICAgICAgICAgICAgICBTTk1QX1NUT1JBR0VfTk9OVk9MQVRJTEUsIFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQsCisgICAgICAgICAgICAgICAgICAgIFNOTVBfU1RPUkFHRV9SRUFET05MWSkpOwogICAgICAgICByZXR1cm4gKDApOwogICAgIH0KICAgICByZXR1cm4gKDEpOwpAQCAtNTU4LDE1ICs1NDYsMTUgQEAKIHNubXBUYXJnZXRBZGRyX2FkZFJvd1N0YXR1cyhzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAgYnVmZlsxMDI0XTsKLQotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIFJvdyBTdGF0dXMgaW4gY29uZmlnIHN0cmluZ1xuIikpOworICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogbm8gUm93IFN0YXR1cyBpbiBjb25maWcgIgorICAgICAgICAgICAgICAgICAgICAic3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCi0gICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBSb3cgU3RhdHVzIGlzIG5vdCBhIGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IFJvdyBTdGF0dXMgaXMgbm90IGEgZGlnaXQgaW4gIgorICAgICAgICAgICAgICAgICAgICAiY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwogICAgIH0KICAgICAvKgpAQCAtNTc2LDEyICs1NjQsMTEgQEAKICAgICAgICAgICAgICAgIT0gU05NUF9ST1dfQUNUSVZFKSAmJgogICAgICAgICAgICAgIChlbnRyeS0+cm93U3RhdHVzICE9IFNOTVBfUk9XX05PVElOU0VSVklDRSkgJiYKICAgICAgICAgICAgICAoZW50cnktPnJvd1N0YXR1cyAhPSBTTk1QX1JPV19OT1RSRUFEWSkpIHsKLSAgICAgICAgc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLAotICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0QWRkckVudHJ5OiBSb3cgU3RhdHVzIGlzIG5vdCBhIHZhbGlkIHZhbHVlIG9mIGFjdGl2ZSglZCksIG5vdGluc2VydmljZSglZCksIG9yIG5vdHJlYWR5KCVkKSBpbiBjb25maWcgc3RyaW5nLlxuIiwKLSAgICAgICAgICAgICAgICBTTk1QX1JPV19BQ1RJVkUsIFNOTVBfUk9XX05PVElOU0VSVklDRSwgU05NUF9ST1dfTk9UUkVBRFkpOwotICAgICAgICBidWZmWyBzaXplb2YoYnVmZiktMSBdID0gMDsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLCBidWZmKSk7Ci0KKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAorICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldEFkZHJFbnRyeTogUm93IFN0YXR1cyBpcyBub3QgYSB2YWxpZCAiCisgICAgICAgICAgICAgICAgICAgICJ2YWx1ZSBvZiBhY3RpdmUoJWQpLCBub3RpbnNlcnZpY2UoJWQpLCBvciBub3RyZWFkeSglZCkgIgorICAgICAgICAgICAgICAgICAgICAiaW4gY29uZmlnIHN0cmluZy5cbiIsCisgICAgICAgICAgICAgICAgICAgIFNOTVBfUk9XX0FDVElWRSwgU05NUF9ST1dfTk9USU5TRVJWSUNFLCBTTk1QX1JPV19OT1RSRUFEWSkpOwogICAgICAgICByZXR1cm4gKDApOwogICAgIH0KICAgICByZXR1cm4gKDEpOwpAQCAtNTkxLDI0ICs1NzgsNDIgQEAKIHZvaWQKIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRBZGRyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjaGFyX3B0cikKIHsKLSAgICBjaGFyICAgICAgICAgICAqY3B0ciA9IGNoYXJfcHRyLCBidWZmWzEwMjRdOworICAgIGNvbnN0IGNoYXIgICAgICpjcHRyID0gY2hhcl9wdHI7CisgICAgY2hhciAgICAgICAgICAgIGJ1ZmZbMTAyNF0sICpicHRyOwogICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpuZXdFbnRyeTsKICAgICBpbnQgICAgICAgICAgICAgaTsKKyAgICBzaXplX3QgICAgICAgICAgYnVmbDsKIAogICAgIG5ld0VudHJ5ID0gc25tcFRhcmdldEFkZHJUYWJsZV9jcmVhdGUoKTsKIAotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7Ci0gICAgaWYgKHNubXBUYXJnZXRBZGRyX2FkZE5hbWUobmV3RW50cnksIGJ1ZmYpID09IDApIHsKKyAgICBjcHRyID0gc2tpcF93aGl0ZV9jb25zdChjcHRyKTsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5vIG5hbWUgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisKKyAgICBidWZsID0gMDsKKyAgICBjcHRyID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoY3B0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhcioqKSZuZXdFbnRyeS0+bmFtZURhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZsKTsKKyAgICBpZiAoYnVmbCA8IDEgfHwgYnVmbCA+IDMyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKKyAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRBZGRyRW50cnk6IG5hbWUgb3V0IG9mIHJhbmdlIGluIGNvbmZpZyAiCisgICAgICAgICAgICAgICAgICAgICJzdHJpbmdcbiIpKTsKKyAgICAgICAgc25tcFRhcmdldEFkZHJUYWJsZV9kaXNwb3NlKG5ld0VudHJ5KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBuZXdFbnRyeS0+bmFtZUxlbiA9IGJ1Zmw7CisKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRURG9tYWluKG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgY3B0ciA9Ci0gICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGNwdHIsCisgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KGNwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKiopICYgbmV3RW50cnktPnRBZGRyZXNzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3RW50cnktPnRBZGRyZXNzTGVuKTsKICAgICBpZiAoIWNwdHIgfHwgIShuZXdFbnRyeS0+dEFkZHJlc3MpKSB7CkBAIC02MTcsNTEgKzYyMiw1MyBAQAogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkVGltZW91dChuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkUmV0cnlDb3VudChuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkVGFnTGlzdChuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkUGFyYW1zKG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCBidWZmLCBzaXplb2YoYnVmZikpOwogICAgIGlmIChzbm1wVGFyZ2V0QWRkcl9hZGRTdG9yYWdlVHlwZShuZXdFbnRyeSwgYnVmZikgPT0gMCkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1ZmYsIHNpemVvZihidWZmKSk7CisgICAgY3B0ciA9IGNvcHlfbndvcmRfY29uc3QoY3B0ciwgYnVmZiwgc2l6ZW9mKGJ1ZmYpKTsKICAgICBpZiAoc25tcFRhcmdldEFkZHJfYWRkUm93U3RhdHVzKG5ld0VudHJ5LCBidWZmKSA9PSAwKSB7CiAgICAgICAgIHNubXBUYXJnZXRBZGRyVGFibGVfZGlzcG9zZShuZXdFbnRyeSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc25wcmludGYoYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAic25tcF9wYXJzZV9jb25maWdfdGFyZ2V0QWRkciwgcmVhZDogJXNcbiIsCi0gICAgICAgICAgICBuZXdFbnRyeS0+bmFtZSk7Ci0gICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpLTEgXSA9IDA7CisgICAgYnB0ciA9IGJ1ZmY7CisgICAgYnB0ciArPSBzcHJpbnRmKGJwdHIsICJzbm1wX3BhcnNlX2NvbmZpZ190YXJnZXRBZGRyLCByZWFkOiAiKTsKKyAgICBicHRyID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoYnB0ciwgKHVfY2hhciopbmV3RW50cnktPm5hbWVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+bmFtZUxlbik7CisgICAgKmJwdHIrKyA9ICdcbic7CiAgICAgZm9yIChpID0gMDsgaSA8IG5ld0VudHJ5LT50RG9tYWluTGVuOyBpKyspIHsKLSAgICAgICAgc25wcmludGYoJmJ1ZmZbc3RybGVuKGJ1ZmYpXSwgc2l6ZW9mKGJ1ZmYpLXN0cmxlbihidWZmKS0xLAotICAgICAgICAgICAgICAgICAiLiVkIiwgKGludCkgbmV3RW50cnktPnREb21haW5baV0pOwotICAgICAgICBidWZmWyBzaXplb2YoYnVmZiktMSBdID0gMDsKKyAgICAgICAgYnB0ciArPSBzbnByaW50ZihicHRyLCBidWZmICsgc2l6ZW9mKGJ1ZmYpIC0gYnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiLiVkIiwgKGludCkgbmV3RW50cnktPnREb21haW5baV0pOwogICAgIH0KLSAgICBzbnByaW50ZigmYnVmZltzdHJsZW4oYnVmZildLCBzaXplb2YoYnVmZiktc3RybGVuKGJ1ZmYpLTEsCi0gICAgICAgICAgICAiICVzICVkICVkICVzICVzICVkICVkXG4iLAotICAgICAgICAgICAgbmV3RW50cnktPnRBZGRyZXNzLCBuZXdFbnRyeS0+dGltZW91dCwgbmV3RW50cnktPnJldHJ5Q291bnQsCi0gICAgICAgICAgICBuZXdFbnRyeS0+dGFnTGlzdCwgbmV3RW50cnktPnBhcmFtcywgbmV3RW50cnktPnN0b3JhZ2VUeXBlLAotICAgICAgICAgICAgbmV3RW50cnktPnJvd1N0YXR1cyk7Ci0gICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpLTEgXSA9IDA7Ci0gICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLCBidWZmKSk7CisgICAgYnB0ciArPSBzbnByaW50ZihicHRyLCBidWZmICsgc2l6ZW9mKGJ1ZmYpIC0gYnB0ciwKKyAgICAgICAgICAgICAgICAgICAgICIgJXMgJWQgJWQgJXMgJXMgJWQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICBuZXdFbnRyeS0+dEFkZHJlc3MsIG5ld0VudHJ5LT50aW1lb3V0LAorICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPnJldHJ5Q291bnQsIG5ld0VudHJ5LT50YWdMaXN0LAorICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPnBhcmFtcywgbmV3RW50cnktPnN0b3JhZ2VUeXBlLAorICAgICAgICAgICAgICAgICAgICAgbmV3RW50cnktPnJvd1N0YXR1cyk7CisgICAgYnVmZlsgc2l6ZW9mKGJ1ZmYpIC0gMSBdID0gMDsKKyAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsICIlcyIsIGJ1ZmYpKTsKIAogICAgIHNubXBUYXJnZXRBZGRyVGFibGVfYWRkVG9MaXN0KG5ld0VudHJ5LCAmYUFkZHJUYWJsZSk7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXQgKi8KQEAgLTY3Nyw1MyArNjg0LDQ4IEBACiAgKiBmb3IgdGhpcyBNSUIgdGFibGUuIEl0IHdyaXRlcyBvdXQgYWxsIHRoZSBub24tdm9sYXRpbGUgcm93cyAKICAqIHRvIHBlcm1hbmVudCBzdG9yYWdlIG9uIGEgc2h1dGRvd24gIAogICovCi1pbnQKK3N0YXRpYyBpbnQKIHN0b3JlX3NubXBUYXJnZXRBZGRyRW50cnkoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZykKIHsKLSAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqY3Vycl9zdHJ1Y3Q7Ci0gICAgY2hhciAgICAgICAgICAgIGxpbmVbMTAyNF07CisgICAgY29uc3Qgc3RydWN0IHRhcmdldEFkZHJUYWJsZV9zdHJ1Y3QgKmN1cnJfc3RydWN0OworICAgIGNoYXIgICAgICAgICAgICBsaW5lWzEwMjRdLCAqY3VyLCAqZXAgPSBsaW5lICsgc2l6ZW9mKGxpbmUpOwogICAgIGludCAgICAgICAgICAgICBpOwogCi0gICAgaWYgKChjdXJyX3N0cnVjdCA9IGFBZGRyVGFibGUpICE9IDApIHsKLSAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IDApIHsKLSAgICAgICAgICAgIGlmICgoY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlID09IFNOTVBfU1RPUkFHRV9OT05WT0xBVElMRSB8fAotICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUgPT0gU05NUF9TVE9SQUdFX1BFUk1BTkVOVCkKLSAgICAgICAgICAgICAgICAmJgotICAgICAgICAgICAgICAgIChjdXJyX3N0cnVjdC0+cm93U3RhdHVzID09IFNOTVBfUk9XX0FDVElWRSB8fAotICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cm93U3RhdHVzID09IFNOTVBfUk9XX05PVElOU0VSVklDRSkpIHsKLSAgICAgICAgICAgICAgICBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksCi0gICAgICAgICAgICAgICAgICAgICAgICAidGFyZ2V0QWRkciAlcyAiLCBjdXJyX3N0cnVjdC0+bmFtZSk7Ci0gICAgICAgICAgICAgICAgbGluZVsgc2l6ZW9mKGxpbmUpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGN1cnJfc3RydWN0LT50RG9tYWluTGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc25wcmludGYoJmxpbmVbc3RybGVuKGxpbmUpXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobGluZSktc3RybGVuKGxpbmUpLTEsICIuJWkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGN1cnJfc3RydWN0LT50RG9tYWluW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgbGluZVsgc2l6ZW9mKGxpbmUpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHN0cmxjYXQobGluZSwgIiAiLCBzaXplb2YobGluZSkpOwotICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKCZsaW5lW3N0cmxlbihsaW5lKV0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnRBZGRyZXNzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT50QWRkcmVzc0xlbik7Ci0KLSAgICAgICAgICAgICAgICBzbnByaW50ZigmbGluZVtzdHJsZW4obGluZSldLCBzaXplb2YobGluZSktc3RybGVuKGxpbmUpLTEsCi0gICAgICAgICAgICAgICAgICAgICAgICAiICVpICVpIFwiJXNcIiAlcyAlaSAlaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+dGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5yZXRyeUNvdW50LCBjdXJyX3N0cnVjdC0+dGFnTGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5wYXJhbXMsIGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5yb3dTdGF0dXMpOwotICAgICAgICAgICAgICAgIGxpbmVbIHNpemVvZihsaW5lKS0xIF0gPSAwOwotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBzdG9yZSB0byBmaWxlIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKKyAgICBjdXJyX3N0cnVjdCA9IGFBZGRyVGFibGU7CisgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKChjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUgPT0gU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFIHx8CisgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnN0b3JhZ2VUeXBlID09IFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQpICYmCisgICAgICAgICAgICAoY3Vycl9zdHJ1Y3QtPnJvd1N0YXR1cyA9PSBTTk1QX1JPV19BQ1RJVkUgfHwKKyAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cm93U3RhdHVzID09IFNOTVBfUk9XX05PVElOU0VSVklDRSkpIHsKKyAgICAgICAgICAgIGN1ciA9IGxpbmUgKyBzbnByaW50ZihsaW5lLCBzaXplb2YobGluZSksICJ0YXJnZXRBZGRyICIpOworICAgICAgICAgICAgY3VyID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoCisgICAgICAgICAgICAgICAgY3VyLCAodV9jaGFyKiljdXJyX3N0cnVjdC0+bmFtZURhdGEsIGN1cnJfc3RydWN0LT5uYW1lTGVuKTsKKyAgICAgICAgICAgICpjdXIrKyA9ICcgJzsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdXJyX3N0cnVjdC0+dERvbWFpbkxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgY3VyICs9IHNucHJpbnRmKGN1ciwgZXAgLSBjdXIsICIuJWkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KSBjdXJyX3N0cnVjdC0+dERvbWFpbltpXSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBjdXJyX3N0cnVjdCA9IGN1cnJfc3RydWN0LT5uZXh0OwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgICAgICAgICAqY3VyKysgPSAnICc7CisgICAgICAgICAgICBjdXIgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZygKKyAgICAgICAgICAgICAgICBjdXIsIGN1cnJfc3RydWN0LT50QWRkcmVzcywgY3Vycl9zdHJ1Y3QtPnRBZGRyZXNzTGVuKTsKKyAgICAgICAgICAgIGN1ciArPSBzbnByaW50ZihjdXIsIGVwIC0gY3VyLCAiICVpICVpIFwiJXNcIiAlcyAlaSAlaSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnRpbWVvdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Vycl9zdHJ1Y3QtPnJldHJ5Q291bnQsIGN1cnJfc3RydWN0LT50YWdMaXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5wYXJhbXMsIGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJyX3N0cnVjdC0+cm93U3RhdHVzKTsKKyAgICAgICAgICAgIGxpbmVbIHNpemVvZihsaW5lKS0xIF0gPSAwOwogCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc3RvcmUgdG8gZmlsZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcobGluZSk7CisgICAgICAgIH0KKworICAgICAgICBjdXJyX3N0cnVjdCA9IGN1cnJfc3RydWN0LT5uZXh0OworICAgIH0KKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICBzdG9yZV9zbm1wVGFyZ2V0QWRkckVudHJ5ICAqLwogCiAKQEAgLTc1Nyw2ICs3NTksNyBAQAogICAgICAqLwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QVEFSR0VUQUREUlRET01BSU46CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV9zbm1wVGFyZ2V0QWRkclREb21haW47CiAgICAgICAgIGJyZWFrOwpAQCAtNzgxLDE5ICs3ODQsMjEgQEAKICAgICBjYXNlIFNOTVBUQVJHRVRBRERSUk9XU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcFRhcmdldEFkZHJSb3dTdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IE5VTEw7CiAgICAgfQogCi0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOyAgICAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KKyAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyIGlmIG5vdCAqLworICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsKIAogICAgIC8qCiAgICAgICogbG9vayBmb3IgT0lEIGluIGN1cnJlbnQgdGFibGUgCiAgICAgICovCiAgICAgaWYgKCh0ZW1wX3N0cnVjdCA9IHNlYXJjaF9zbm1wVGFyZ2V0QWRkclRhYmxlKHZwLT5uYW1lLCB2cC0+bmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFtZSwgbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGFjdCkpID09IDApIHsKLSAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3QpKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qCkBAIC04MDUsNyArODEwLDcgQEAKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgU05NUFRBUkdFVEFERFJURE9NQUlOOgogICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnREb21haW5MZW4gPD0gMCkgewotICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRlbXBfc3RydWN0LT50RG9tYWluTGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBvYmppZFtpXSA9IHRlbXBfc3RydWN0LT50RG9tYWluW2ldOwpAQCAtODE1LDggKzgyMCw4IEBACiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSBvYmppZDsKIAogICAgIGNhc2UgU05NUFRBUkdFVEFERFJUQUREUkVTUzoKLSAgICAgICAgaWYgKHRlbXBfc3RydWN0LT50QWRkcmVzcyA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgaWYgKHRlbXBfc3RydWN0LT50QWRkcmVzcyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICp2YXJfbGVuID0gdGVtcF9zdHJ1Y3QtPnRBZGRyZXNzTGVuOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgdGVtcF9zdHJ1Y3QtPnRBZGRyZXNzOwogCkBAIC04MzAsNyArODM1LDcgQEAKIAogICAgIGNhc2UgU05NUFRBUkdFVEFERFJUQUdMSVNUOgogICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnRhZ0xpc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgc3RyY3B5KHN0cmluZywgdGVtcF9zdHJ1Y3QtPnRhZ0xpc3QpOworICAgICAgICAgICAgc3RybGNweShzdHJpbmcsIHRlbXBfc3RydWN0LT50YWdMaXN0LCBzaXplb2Yoc3RyaW5nKSk7CiAgICAgICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihzdHJpbmcpOwogICAgICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIHN0cmluZzsKICAgICAgICAgfSBlbHNlIHsKQEAgLTgzOCw5ICs4NDMsOSBAQAogICAgICAgICB9CiAKICAgICBjYXNlIFNOTVBUQVJHRVRBRERSUEFSQU1TOgotICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnBhcmFtcyA9PSAwKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKLSAgICAgICAgc3RyY3B5KHN0cmluZywgdGVtcF9zdHJ1Y3QtPnBhcmFtcyk7CisgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+cGFyYW1zID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgc3RybGNweShzdHJpbmcsIHRlbXBfc3RydWN0LT5wYXJhbXMsIHNpemVvZihzdHJpbmcpKTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oc3RyaW5nKTsKICAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIHN0cmluZzsKIApAQCAtODU3LDEwICs4NjIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5XG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gTlVMTDsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFyX3NubXBUYXJnZXRBZGRyRW50cnkgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogaW50CiB3cml0ZV9zbm1wVGFyZ2V0QWRkclREb21haW4oaW50IGFjdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiB2YXJfdmFsLApAQCAtODkwLDcgKzg5Nyw3IEBACiAgICAgICAgIGlmICgodGFyZ2V0ID0KICAgICAgICAgICAgICBzZWFyY2hfc25tcFRhcmdldEFkZHJUYWJsZShzbm1wVGFyZ2V0QWRkck9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRExlbiwgbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9sZW4sIDEpKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfbGVuLCAxKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRBZGRyVERvbWFpbjogQkFEIE9JRCFcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOwpAQCAtOTI1LDYgKzkzMiw4IEBACiAgICAgICAgICAgICAgICAgdGFyZ2V0LT5yb3dTdGF0dXMgPSBTTk1QX1JPV19OT1RJTlNFUlZJQ0U7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gRlJFRSB8fCBhY3Rpb24gPT0gVU5ETykgewogICAgICAgICAvKgogICAgICAgICAgKiBUcnkgdG8gdW5kbyB0aGUgU0VUIGhlcmUgKGFibm9ybWFsIHVzYWdlIG9mIEZSRUUgY2xhdXNlKSAgCkBAIC05NzYsNyArOTg1LDcgQEAKICAgICAgICAgaWYgKCh0YXJnZXQgPQogICAgICAgICAgICAgIHNlYXJjaF9zbm1wVGFyZ2V0QWRkclRhYmxlKHNubXBUYXJnZXRBZGRyT0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lETGVuLCBuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX2xlbiwgMSkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmFtZV9sZW4sIDEpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldEFkZHJFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gc25tcFRhcmdldEFkZHJUQWRkcmVzczogQkFEIE9JRCFcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOwpAQCAtMTAxMiw2ICsxMDIxLDcgQEAKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9sZF9hZGRyKTsKICAgICAgICAgb2xkX2FkZHIgPSBOVUxMOworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBGUkVFIHx8IGFjdGlvbiA9PSBVTkRPKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFRyeSB0byB1bmRvIHRoZSBTRVQgaGVyZSAoYWJub3JtYWwgdXNhZ2Ugb2YgRlJFRSBjbGF1c2UpICAKQEAgLTEwODIsNyArMTA5Miw3IEBACiAgICAgICAgIGlmICgodGVtcF9zdHJ1Y3QgPQogICAgICAgICAgICAgIHNlYXJjaF9zbm1wVGFyZ2V0QWRkclRhYmxlKHNubXBUYXJnZXRBZGRyT0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyT0lETGVuLCBuYW1lLCAmbmFtZV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRBZGRyRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRBZGRyVGltZW91dCA6IEJBRCBPSURcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1NVQ0hOQU1FOwpAQCAtMTEwNyw2ICsxMTE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxKSkgIT0gTlVMTCkgewogICAgICAgICAgICAgdGVtcF9zdHJ1Y3QtPnRpbWVvdXQgPSBsb25nX3JldDsKICAgICAgICAgfQorICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKICAgICB9CiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTExNjQsNiArMTE3NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSkpICE9IE5VTEwpIHsKICAgICAgICAgICAgIHRhcmdldC0+cmV0cnlDb3VudCA9IGxvbmdfcmV0OwogICAgICAgICB9CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0KIAogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwpAQCAtMTI1NCw2ICsxMjY2LDcgQEAKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9sZF90bGlzdCk7CiAgICAgICAgIG9sZF90bGlzdCA9IE5VTEw7CisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOwogICAgIH0gZWxzZSBpZiAoYWN0aW9uID09IEZSRUUgfHwgYWN0aW9uID09IFVORE8pIHsKICAgICAgICAgc25tcFRhcmdldEFkZHJPSURbc25tcFRhcmdldEFkZHJPSURMZW4gLSAxXSA9CiAgICAgICAgICAgICBTTk1QVEFSR0VUQUREUlRBR0xJU1RDT0xVTU47CkBAIC0xMjk2LDcgKzEzMDksNyBAQAogICAgICAgICBpZiAoKHRhcmdldCA9CiAgICAgICAgICAgICAgc2VhcmNoX3NubXBUYXJnZXRBZGRyVGFibGUoc25tcFRhcmdldEFkZHJPSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRhcmdldEFkZHJPSURMZW4sIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm5hbWVfbGVuLCAxKSkgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuYW1lX2xlbiwgMSkpID09IE5VTEwpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0QWRkclBhcmFtczogQkFEIE9JRCFcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOwpAQCAtMTMzMSw2ICsxMzQ0LDcgQEAKICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PSBDT01NSVQpIHsKICAgICAgICAgU05NUF9GUkVFKG9sZF9wYXJhbXMpOwogICAgICAgICBvbGRfcGFyYW1zID0gTlVMTDsKKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gRlJFRSB8fCBhY3Rpb24gPT0gVU5ETykgewogICAgICAgICAvKgogICAgICAgICAgKiBUcnkgdG8gdW5kbyB0aGUgU0VUIGhlcmUgKGFibm9ybWFsIHVzYWdlIG9mIEZSRUUgY2xhdXNlKSAgCkBAIC0xNDE3LDYgKzE0MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEpKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICB0YXJnZXQtPnN0b3JhZ2VUeXBlID0gbG9uZ19yZXQ7CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNDQ1LDE4ICsxNDYwLDE4IEBACiAgICAgICAgIHRlbXBfc3RydWN0ID0gc25tcFRhcmdldEFkZHJUYWJsZV9jcmVhdGUoKTsKICAgICAgICAgaWYgKCF0ZW1wX3N0cnVjdCkKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7Ci0gICAgICAgIHRlbXBfc3RydWN0LT5uYW1lID0gKGNoYXIgKikgbWFsbG9jKG5ld05hbWVMZW4gKyAxKTsKLSAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5uYW1lID09IE5VTEwpIHsKKyAgICAgICAgdGVtcF9zdHJ1Y3QtPm5hbWVEYXRhID0gKGNoYXIgKikgbWFsbG9jKG5ld05hbWVMZW4pOworICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPm5hbWVEYXRhID09IE5VTEwpIHsKICAgICAgICAgICAgIFNOTVBfRlJFRSh0ZW1wX3N0cnVjdC0+dGFnTGlzdCk7CiAgICAgICAgICAgICBTTk1QX0ZSRUUodGVtcF9zdHJ1Y3QpOwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KIAorICAgICAgICB0ZW1wX3N0cnVjdC0+bmFtZUxlbiA9IG5ld05hbWVMZW47CiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBuZXdOYW1lTGVuOyBpKyspIHsKLSAgICAgICAgICAgIHRlbXBfc3RydWN0LT5uYW1lW2ldID0gKGNoYXIpIG5hbWVbaSArIHNubXBUYXJnZXRBZGRyT0lETGVuXTsKKyAgICAgICAgICAgIHRlbXBfc3RydWN0LT5uYW1lRGF0YVtpXSA9IChjaGFyKSBuYW1lW2kgKyBzbm1wVGFyZ2V0QWRkck9JRExlbl07CiAgICAgICAgIH0KIAotICAgICAgICB0ZW1wX3N0cnVjdC0+bmFtZVtuZXdOYW1lTGVuXSA9ICdcMCc7CiAgICAgICAgIHRlbXBfc3RydWN0LT5yb3dTdGF0dXMgPSBTTk1QX1JPV19OT1RSRUFEWTsKIAogICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2FkZFRvTGlzdCh0ZW1wX3N0cnVjdCwgJmFBZGRyVGFibGUpOwpAQCAtMTUwNCw3ICsxNTE5LDcgQEAKICAgICAgICAgaWYgKG5hbWVfbGVuIDwgc25tcFRhcmdldEFkZHJPSURMZW4gKyAxIHx8CiAgICAgICAgICAgICBuYW1lX2xlbiA+IHNubXBUYXJnZXRBZGRyT0lETGVuICsgMzIpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0QWRkckVudHJ5IiwgImJhZCBpbmRleCBsZW5ndGggJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbiAtIHNubXBUYXJnZXRBZGRyT0lETGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShuYW1lX2xlbiAtIHNubXBUYXJnZXRBZGRyT0lETGVuKSkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047CiAgICAgICAgIH0KIApAQCAtMTYwNiw2ICsxNjIxLDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gVU5ETyB8fCBhY3Rpb24gPT0gRlJFRSkgewogICAgICAgICBzbm1wVGFyZ2V0QWRkck9JRFtzbm1wVGFyZ2V0QWRkck9JRExlbiAtIDFdID0KICAgICAgICAgICAgIFNOTVBUQVJHRVRBRERSUk9XU1RBVFVTQ09MVU1OOwpAQCAtMTY1MSw2ICsxNjY3LDcgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogCiB1X2NoYXIgICAgICAgICAqCkBAIC0xNjYyLDEyICsxNjc5LDIwIEBACiB7CiAgICAgaWYgKGhlYWRlcl9nZW5lcmljKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpID09CiAgICAgICAgIE1BVENIX0ZBSUxFRCkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3RhcmdldFNwaW5Mb2NrOworI2Vsc2UKKwkJKndyaXRlX21ldGhvZCA9IE5VTEw7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgaWYgKHZwLT5tYWdpYyA9PSBTTk1QVEFSR0VUU1BJTkxPQ0spIHsKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3RhcmdldFNwaW5Mb2NrOwogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZih1bnNpZ25lZCBsb25nKTsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisgICAgICAgICp3cml0ZV9tZXRob2QgPSB3cml0ZV90YXJnZXRTcGluTG9jazsKKyNlbHNlCisJCSp3cml0ZV9tZXRob2QgPSBOVUxMOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiAoc25tcFRhcmdldFNwaW5Mb2NrKTsKICAgICB9CiAgICAgcmV0dXJuIE5VTEw7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRBZGRyRW50cnkuaAppbmRleCBiMWI1YWQxLi4wYjcwYWY1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0QWRkckVudHJ5LmgKQEAgLTEwLDEwICsxMCwxMCBAQAogI2RlZmluZSBfTUlCR1JPVVBfU05NUFRBUkdFVEFERFJFTlRSWV9ICiAKIC8qCi0gKiB3ZSB1c2UgaGVhZGVyX2dlbmVyaWMgYW5kIGNoZWNrbWliIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlIAorICogd2UgdXNlIGhlYWRlcl9nZW5lcmljIGZyb20gdGhlIHV0aWxfZnVuY3MgbW9kdWxlCiAgKi8KIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKIAogICAgIC8qCkBAIC00Niw3ICs0Niw4IEBACiAgICAgICogc3RydWN0dXJlIGRlZmluaXRpb25zIAogICAgICAqLwogICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCB7Ci0gICAgICAgICBjaGFyICAgICAgICAgICAqbmFtZTsKKyAgICAgICAgIGNoYXIgICAgICAgICAgICpuYW1lRGF0YTsKKyAgICAgICAgIHVuc2lnbmVkIGNoYXIgICBuYW1lTGVuOwogICAgICAgICAgb2lkICAgICAgICAgICAgIHREb21haW5bTUFYX09JRF9MRU5dOwogICAgICAgICAgaW50ICAgICAgICAgICAgIHREb21haW5MZW47CiAgICAgICAgICB1bnNpZ25lZCBjaGFyICAqdEFkZHJlc3M7CkBAIC02NywxOSArNjgsMTkgQEAKICAqLwogCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXBUYXJnZXRBZGRyRW50cnkodm9pZCk7Ci0gICAgIGludCAgICAgICAgICAgICBzdG9yZV9zbm1wVGFyZ2V0QWRkckVudHJ5KGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOworICAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc25tcFRhcmdldEFkZHJFbnRyeSh2b2lkKTsKICAgICAgRmluZFZhck1ldGhvZCAgIHZhcl9zbm1wVGFyZ2V0QWRkckVudHJ5OwogCiAgICAgIHN0cnVjdCB0YXJnZXRBZGRyVGFibGVfc3RydWN0ICpnZXRfYWRkclRhYmxlKHZvaWQpOwotICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZ2V0X2FkZHJGb3JOYW1lKGNoYXIgKm5hbWUpOworICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqZ2V0X2FkZHJGb3JOYW1lMihjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIG5hbWVMZW4pOwogICAgICBzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdCAqc25tcFRhcmdldEFkZHJUYWJsZV9jcmVhdGUodm9pZCk7CiAgICAgIHZvaWQgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlX2FkZChzdHJ1Y3QgdGFyZ2V0QWRkclRhYmxlX3N0cnVjdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5ld0VudHJ5KTsKIAogICAgICB2b2lkICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldEFkZHIoY29uc3QgY2hhciAqLCBjaGFyICopOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldEFkZHJURG9tYWluOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldEFkZHJUQWRkcmVzczsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRBZGRyVGltZW91dDsKQEAgLTg5LDcgKzkwLDggQEAKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRBZGRyU3RvcmFnZVR5cGU7CiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0QWRkclJvd1N0YXR1czsKIAotICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX3RhcmdldFNwaW5Mb2NrOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfdGFyZ2V0U3BpbkxvY2s7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICBGaW5kVmFyTWV0aG9kICAgdmFyX3RhcmdldFNwaW5Mb2NrOwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9TTk1QVEFSR0VUQUREUkVOVFJZX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuYwppbmRleCAwNjkzNmIxLi40ZTFmNGUyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5jCkBAIC0xNSw5ICsxNSw2IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0zMCw3ICsyNyw3IEBACiBvaWQgICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtc09JRFtzbm1wVGFyZ2V0UGFyYW1zT0lETGVuXSA9CiAgICAgeyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgMywgMSwgMCB9OwogCi1zdGF0aWMgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICphUFRhYmxlID0gMDsKK3N0YXRpYyBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmFQVGFibGUgPSBOVUxMOwogCiAKIC8qCkBAIC01MSwxNiArNDgsMTYgQEAKICAgICBuZXdFbnRyeSA9IChzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKikKICAgICAgICAgbWFsbG9jKHNpemVvZihzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QpKTsKIAotICAgIG5ld0VudHJ5LT5wYXJhbU5hbWUgPSAwOworICAgIG5ld0VudHJ5LT5wYXJhbU5hbWUgPSBOVUxMOwogICAgIG5ld0VudHJ5LT5tcE1vZGVsID0gLTE7CiAKICAgICBuZXdFbnRyeS0+c2VjTW9kZWwgPSAtMTsKLSAgICBuZXdFbnRyeS0+c2VjTmFtZSA9IDA7CisgICAgbmV3RW50cnktPnNlY05hbWUgPSBOVUxMOwogICAgIG5ld0VudHJ5LT5zZWNMZXZlbCA9IC0xOwogCiAgICAgbmV3RW50cnktPnN0b3JhZ2VUeXBlID0gU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFOwogICAgIG5ld0VudHJ5LT5yb3dTdGF0dXMgPSBTTk1QX1JPV19OT05FWElTVEVOVDsKLSAgICBuZXdFbnRyeS0+bmV4dCA9IDA7CisgICAgbmV3RW50cnktPm5leHQgPSBOVUxMOwogICAgIHJldHVybiBuZXdFbnRyeTsKIH0KIApAQCAtOTgsNyArOTUsNyBAQAogICAgIC8qCiAgICAgICogaWYgdGhlIGxpc3QgaXMgZW1wdHksIGFkZCB0aGUgbmV3IGVudHJ5IHRvIHRoZSB0b3AgCiAgICAgICovCi0gICAgaWYgKChwcmV2X3N0cnVjdCA9IGN1cnJfc3RydWN0ID0gKmxpc3RQdHIpID09IDApIHsKKyAgICBpZiAoKHByZXZfc3RydWN0ID0gY3Vycl9zdHJ1Y3QgPSAqbGlzdFB0cikgPT0gTlVMTCkgewogICAgICAgICAqbGlzdFB0ciA9IG5ld0VudHJ5OwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKQEAgLTExMyw3ICsxMTAsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBzZWFyY2ggdGhyb3VnaCB0aGUgbGlzdCBmb3IgYW4gZXF1YWwgb3IgZ3JlYXRlciBPSUQgdmFsdWUgCiAgICAgICAgICAqLwotICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gMCkgeworICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gTlVMTCkgewogICAgICAgICAgICAgY3Vyck9JRExlbiA9IHN0cmxlbihjdXJyX3N0cnVjdC0+cGFyYW1OYW1lKTsKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBjdXJyT0lETGVuOyBpKyspIHsKICAgICAgICAgICAgICAgICBjdXJyT0lEW2ldID0gY3Vycl9zdHJ1Y3QtPnBhcmFtTmFtZVtpXTsKQEAgLTE2OCwxNCArMTY1LDE0IEBACiB7CiAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICp0cHRyOwogCi0gICAgaWYgKCh0cHRyID0gKmxpc3RQdHIpID09IDApCisgICAgaWYgKCh0cHRyID0gKmxpc3RQdHIpID09IE5VTEwpCiAgICAgICAgIHJldHVybjsKICAgICBlbHNlIGlmICh0cHRyID09IG9sZEVudHJ5KSB7CiAgICAgICAgICpsaXN0UHRyID0gKCpsaXN0UHRyKS0+bmV4dDsKICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfZGlzcG9zZSh0cHRyKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHdoaWxlICh0cHRyLT5uZXh0ICE9IDApIHsKKyAgICAgICAgd2hpbGUgKHRwdHItPm5leHQgIT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKHRwdHItPm5leHQgPT0gb2xkRW50cnkpIHsKICAgICAgICAgICAgICAgICB0cHRyLT5uZXh0ID0gdHB0ci0+bmV4dC0+bmV4dDsKICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKG9sZEVudHJ5KTsKQEAgLTIwNSw3ICsyMDIsNyBAQAogICAgICAqLwogICAgIG1lbWNweShuZXdOdW0sIGJhc2VOYW1lLCBiYXNlTmFtZUxlbiAqIHNpemVvZihvaWQpKTsKIAotICAgIGZvciAodGVtcF9zdHJ1Y3QgPSBhUFRhYmxlOyB0ZW1wX3N0cnVjdCAhPSAwOworICAgIGZvciAodGVtcF9zdHJ1Y3QgPSBhUFRhYmxlOyB0ZW1wX3N0cnVjdCAhPSBOVUxMOwogICAgICAgICAgdGVtcF9zdHJ1Y3QgPSB0ZW1wX3N0cnVjdC0+bmV4dCkgewogICAgICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgc3RybGVuKHRlbXBfc3RydWN0LT5wYXJhbU5hbWUpOyBpKyspIHsKICAgICAgICAgICAgIG5ld051bVtiYXNlTmFtZUxlbiArIGldID0gdGVtcF9zdHJ1Y3QtPnBhcmFtTmFtZVtpXTsKQEAgLTIyMyw3ICsyMjAsNyBAQAogICAgICAgICAgICAgcmV0dXJuIHRlbXBfc3RydWN0OwogICAgICAgICB9CiAgICAgfQotICAgIHJldHVybiAoMCk7CisgICAgcmV0dXJuIE5VTEw7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNlYXJjaF9zbm1wVGFyZ2V0UGFyYW1zVGFibGUgKi8KIAogCkBAIC0yMzYsNyArMjMzLDcgQEAKIHNubXBUYXJnZXRQYXJhbXNfcm93U3RhdHVzQ2hlY2soc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSkKIHsKICAgICBpZiAoKGVudHJ5LT5tcE1vZGVsIDwgMCkgfHwgKGVudHJ5LT5zZWNNb2RlbCA8IDApIHx8Ci0gICAgICAgIChlbnRyeS0+c2VjTGV2ZWwgPCAwKSB8fCAoZW50cnktPnNlY05hbWUgPT0gMCkpCisgICAgICAgIChlbnRyeS0+c2VjTGV2ZWwgPCAwKSB8fCAoZW50cnktPnNlY05hbWUgPT0gTlVMTCkpCiAgICAgICAgIHJldHVybiAwOwogICAgIGVsc2UKICAgICAgICAgcmV0dXJuIDE7CkBAIC0yNTQsMTcgKzI1MSwxNyBAQAogICovCiAKIHN0cnVjdCB2YXJpYWJsZTIgc25tcFRhcmdldFBhcmFtc0VudHJ5X3ZhcmlhYmxlc1tdID0gewotICAgIHtTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVFBBUkFNU01QTU9ERUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIDEsIHtTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTENPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTCwgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTU9ERUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIDEsIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlNT0RFTENPTFVNTn19LAotICAgIHtTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgMSwge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU5BTUVDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUwsIEFTTl9JTlRFR0VSLCBSV1JJVEUsCisgICAge1NOTVBUQVJHRVRQQVJBTVNTRUNVUklUWUxFVkVMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAogICAgICB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5LCAxLCB7U05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUxDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVFBBUkFNU1NUT1JBR0VUWVBFLCBBU05fSU5URUdFUiwgUldSSVRFLAorICAgIHtTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCiAgICAgIHZhcl9zbm1wVGFyZ2V0UGFyYW1zRW50cnksIDEsIHtTTk1QVEFSR0VUUEFSQU1TU1RPUkFHRVRZUEVDT0xVTU59fSwKLSAgICB7U05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVUywgQVNOX0lOVEVHRVIsIFJXUklURSwKKyAgICB7U05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKICAgICAgdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSwgMSwge1NOTVBUQVJHRVRQQVJBTVNST1dTVEFUVVNDT0xVTU59fQogfTsKIApAQCAtMjc4LDE1ICsyNzUsMTUgQEAKIHZvaWQKIGluaXRfc25tcFRhcmdldFBhcmFtc0VudHJ5KHZvaWQpCiB7Ci0gICAgYVBUYWJsZSA9IDA7CisgICAgYVBUYWJsZSA9IE5VTEw7CiAKICAgICBSRUdJU1RFUl9NSUIoInRhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zRW50cnlfdmFyaWFibGVzLCB2YXJpYWJsZTIsCiAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbXNFbnRyeV92YXJpYWJsZXNfb2lkKTsKIAogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJ0YXJnZXRQYXJhbXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190YXJnZXRQYXJhbXMsIDAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RhcmdldFBhcmFtcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCAoKikodm9pZCkpMCwgTlVMTCk7CiAKICAgICAvKgogICAgICAqIHdlIG5lZWQgdG8gYmUgY2FsbGVkIGJhY2sgbGF0ZXIgCkBAIC0yOTUsMTMgKzI5MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmVfc25tcFRhcmdldFBhcmFtc0VudHJ5LCBOVUxMKTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIGluaXRfc25tcFRhcmdldFBhcm1zRW50cnkgICovCiAKK3ZvaWQKK3NodXRkb3duX3NubXBUYXJnZXRQYXJhbXNFbnRyeSh2b2lkKQoreworICAgIHdoaWxlIChhUFRhYmxlKQorCXNubXBUYXJnZXRQYXJhbVRhYmxlX3JlbUZyb21MaXN0KGFQVGFibGUsICZhUFRhYmxlKTsKK30KKwogCiBpbnQKIHNubXBUYXJnZXRQYXJhbXNfYWRkUGFyYW1OYW1lKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewogICAgIHNpemVfdCAgICAgICAgICBsZW47Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIHBhcmFtIG5hbWUgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtMzI1LDExICszMjksMTEgQEAKIHNubXBUYXJnZXRQYXJhbXNfYWRkTVBNb2RlbChzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmNwdHIpCiB7Ci0gICAgaWYgKGNwdHIgPT0gMCkgeworICAgIGlmIChjcHRyID09IE5VTEwpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2V0UGFyYW1zRW50cnk6IG5vIG1wIG1vZGVsIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IG1wIG1vZGVsIGlzIG5vdCBkaWdpdCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC0zNTAsMTEgKzM1NCwxMSBAQAogc25tcFRhcmdldFBhcmFtc19hZGRTZWNNb2RlbChzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBzZWMgbW9kZWwgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwotICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCpjcHRyKSkpIHsKKyAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCiAgICAgICAgICAgICAgICAgICAgICJFUlJPUiBzbm1wVGFyZ2VQYXJhbXNFbnRyeTogc2VjdXJpdHkgbW9kZWwgaXMgbm90IGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTM3Niw3ICszODAsNyBAQAogc25tcFRhcmdldFBhcmFtc19hZGRTZWNOYW1lKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gc2VjdXJpdHkgbmFtZSBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7CkBAIC0zOTEsMTEgKzM5NSwxMSBAQAogc25tcFRhcmdldFBhcmFtc19hZGRTZWNMZXZlbChzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKmVudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyBzZWN1cml0eSBsZXZlbCBpbiBjb25maWcgc3RyaW5nXG4iKSk7CiAgICAgICAgIHJldHVybiAoMCk7Ci0gICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKmNwdHIpKSkgeworICAgIH0gZWxzZSBpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZVBhcmFtc0VudHJ5OiBzZWN1cml0eSBsZXZlbCBpcyBub3QgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNDE3LDExICs0MjEsMTEgQEAKIHNubXBUYXJnZXRQYXJhbXNfYWRkU3RvcmFnZVR5cGUoc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICplbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY3B0cikKIHsKLSAgICBpZiAoY3B0ciA9PSAwKSB7CisgICAgaWYgKGNwdHIgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKICAgICAgICAgICAgICAgICAgICAgIkVSUk9SIHNubXBUYXJnZXRQYXJhbXNFbnRyeTogbm8gc3RvcmFnZSB0eXBlIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IHN0b3JhZ2UgdHlwZSBpcyBub3QgZGlnaXQgaW4gY29uZmlnIHN0cmluZ1xuIikpOwogICAgICAgICByZXR1cm4gKDApOwpAQCAtNDU1LDExICs0NTksMTEgQEAKIHNubXBUYXJnZXRQYXJhbXNfYWRkUm93U3RhdHVzKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqZW50cnksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjcHRyKQogewotICAgIGlmIChjcHRyID09IDApIHsKKyAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdldFBhcmFtc0VudHJ5OiBubyByb3cgc3RhdHVzIGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKLSAgICB9IGVsc2UgaWYgKCEoaXNkaWdpdCgqY3B0cikpKSB7CisgICAgfSBlbHNlIGlmICghKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAiRVJST1Igc25tcFRhcmdlUGFyYW1zRW50cnk6IHJvdyBzdGF0dXMgaXMgbm90IGRpZ2l0IGluIGNvbmZpZyBzdHJpbmdcbiIpKTsKICAgICAgICAgcmV0dXJuICgwKTsKQEAgLTUzNSwxMyArNTM5LDExIEBACiAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2Rpc3Bvc2UobmV3RW50cnkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNucHJpbnRmKGJ1ZmYsIHNpemVvZihidWZmKSwKLSAgICAgICAgICAgICJzbm1wX3BhcnNlX2NvbmZpZ190YXJnZXRQYXJhbXMsIHJlYWQ6ICVzICVkICVkICVzICVkICVkICVkXG4iLAotICAgICAgICAgICAgbmV3RW50cnktPnBhcmFtTmFtZSwgbmV3RW50cnktPm1wTW9kZWwsIG5ld0VudHJ5LT5zZWNNb2RlbCwKLSAgICAgICAgICAgIG5ld0VudHJ5LT5zZWNOYW1lLCBuZXdFbnRyeS0+c2VjTGV2ZWwsIG5ld0VudHJ5LT5zdG9yYWdlVHlwZSwKLSAgICAgICAgICAgIG5ld0VudHJ5LT5yb3dTdGF0dXMpOwotICAgIGJ1ZmZbIHNpemVvZihidWZmKS0xIF0gPSAwOwotICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLCBidWZmKSk7CisgICAgREVCVUdNU0dUTCgoInNubXBUYXJnZXRQYXJhbXNFbnRyeSIsCisgICAgICAgICAgICAgICAgInNubXBfcGFyc2VfY29uZmlnX3RhcmdldFBhcmFtcywgcmVhZDogJXMgJWQgJWQgJXMgJWQgJWQgJWRcbiIsCisgICAgICAgICAgICAgICAgbmV3RW50cnktPnBhcmFtTmFtZSwgbmV3RW50cnktPm1wTW9kZWwsIG5ld0VudHJ5LT5zZWNNb2RlbCwKKyAgICAgICAgICAgICAgICBuZXdFbnRyeS0+c2VjTmFtZSwgbmV3RW50cnktPnNlY0xldmVsLCBuZXdFbnRyeS0+c3RvcmFnZVR5cGUsCisgICAgICAgICAgICAgICAgbmV3RW50cnktPnJvd1N0YXR1cykpOwogCiAgICAgdXBkYXRlX3RpbWVzdGFtcChuZXdFbnRyeSk7CiAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfYWRkVG9MaXN0KG5ld0VudHJ5LCAmYVBUYWJsZSk7CkBAIC01NjYsOCArNTY4LDggQEAKICAgICBjaGFyICAgICAgICAgICAgbGluZVsxMDI0XTsKIAogICAgIHN0cmNweShsaW5lLCAiIik7Ci0gICAgaWYgKChjdXJyX3N0cnVjdCA9IGFQVGFibGUpICE9IDApIHsKLSAgICAgICAgd2hpbGUgKGN1cnJfc3RydWN0ICE9IDApIHsKKyAgICBpZiAoKGN1cnJfc3RydWN0ID0gYVBUYWJsZSkgIT0gTlVMTCkgeworICAgICAgICB3aGlsZSAoY3Vycl9zdHJ1Y3QgIT0gTlVMTCkgewogICAgICAgICAgICAgaWYgKChjdXJyX3N0cnVjdC0+c3RvcmFnZVR5cGUgPT0gU05NUF9TVE9SQUdFX05PTlZPTEFUSUxFIHx8CiAgICAgICAgICAgICAgICAgIGN1cnJfc3RydWN0LT5zdG9yYWdlVHlwZSA9PSBTTk1QX1NUT1JBR0VfUEVSTUFORU5UKQogICAgICAgICAgICAgICAgICYmCkBAIC02MTMsNiArNjE1LDcgQEAKICAgICBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKnRlbXBfc3RydWN0OwogCiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTDoKICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX3NubXBUYXJnZXRQYXJhbXNNUE1vZGVsOwogICAgICAgICBicmVhazsKQEAgLTYzMSwxOSArNjM0LDIxIEBACiAgICAgY2FzZSBTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTOgogICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfc25tcFRhcmdldFBhcmFtc1Jvd1N0YXR1czsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGRlZmF1bHQ6CiAgICAgICAgICp3cml0ZV9tZXRob2QgPSBOVUxMOwogICAgIH0KIAotICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmdfcmV0KTsgICAgICAgIC8qIGFzc3VtZSBhbiBpbnRlZ2VyIGFuZCBjaGFuZ2UgbGF0ZXIgaWYgbm90ICovCisgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlciBpZiBub3QgKi8KKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7CiAKICAgICAvKgogICAgICAqIGxvb2sgZm9yIE9JRCBpbiBjdXJyZW50IHRhYmxlIAogICAgICAqLwogICAgIGlmICgodGVtcF9zdHJ1Y3QgPSBzZWFyY2hfc25tcFRhcmdldFBhcmFtc1RhYmxlKHZwLT5uYW1lLCB2cC0+bmFtZWxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3QpKSA9PSAwKSB7Ci0gICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhhY3QpKSA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAogICAgIC8qCkBAIC02NTksNyArNjY0LDcgQEAKICAgICAgICAgICogaWYgdW5zZXQgdmFsdWUsIChpLmUuIG5ldyByb3cpIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5tcE1vZGVsID09IC0xKQotICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICBsb25nX3JldCA9IHRlbXBfc3RydWN0LT5tcE1vZGVsOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogCkBAIC02NjgsNyArNjczLDcgQEAKICAgICAgICAgICogaWYgdW5zZXQgdmFsdWUsIChpLmUuIG5ldyByb3cpIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKHRlbXBfc3RydWN0LT5zZWNNb2RlbCA9PSAtMSkKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgbG9uZ19yZXQgPSB0ZW1wX3N0cnVjdC0+c2VjTW9kZWw7CiAgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQ7CiAKQEAgLTY3Niw4ICs2ODEsOCBAQAogICAgICAgICAvKgogICAgICAgICAgKiBpZiB1bnNldCB2YWx1ZSwgKGkuZS4gbmV3IHJvdykgCiAgICAgICAgICAqLwotICAgICAgICBpZiAodGVtcF9zdHJ1Y3QtPnNlY05hbWUgPT0gMCkKLSAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+c2VjTmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGluY2x1ZGluZyBudWxsIGNoYXJhY3Rlci4gCiAgICAgICAgICAqLwpAQCAtNjkxLDcgKzY5Niw3IEBACiAgICAgICAgICAqIGlmIHVuc2V0IHZhbHVlLCAoaS5lLiBuZXcgcm93KSAKICAgICAgICAgICovCiAgICAgICAgIGlmICh0ZW1wX3N0cnVjdC0+c2VjTGV2ZWwgPT0gLTEpCi0gICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIGxvbmdfcmV0ID0gdGVtcF9zdHJ1Y3QtPnNlY0xldmVsOwogICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgJmxvbmdfcmV0OwogCkBAIC03MDgsOSArNzEzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIHN1Yi1pZCAlZCBpbiB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5XG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gTlVMTDsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdmFyX3NubXBUYXJnZXRQYXJhbXNFbnRyeSAqLwogCisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAvKgogICogQXNzaWduIGEgdmFsdWUgdG8gdGhlIG1wTW9kZWwgdmFyaWFibGUuICAKICAqLwpAQCAtODQyLDcgKzg1MCw3IEBACiAgICAgICAgIH0KICAgICAgICAgaWYgKGZpbmRfc2VjX21vZChsb25nX3JldCkgPT0gTlVMTCAmJiBsb25nX3JldCA+PSAzKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcFRhcmdldFBhcmFtc0VudHJ5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0UGFyYW1zU2VjTW9kZWw6IHNlY01vZGVsICVkIHVuc3VwcG9ydGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRQYXJhbXNTZWNNb2RlbDogc2VjTW9kZWwgJWxkIHVuc3VwcG9ydGVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ19yZXQpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKICAgICAgICAgfQpAQCAtMTExNiw3ICsxMTI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJ3cml0ZSB0byBzbm1wVGFyZ2V0UGFyYW1zU2VjTmFtZTogbm90IEFTTl9PQ1RFVF9TVFJcbiIpKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHZhcl92YWxfbGVuID4gMjU1IHx8IHZhcl92YWxfbGVuIDwgMCkgeworICAgICAgICBpZiAodmFyX3ZhbF9sZW4gPiAyNTUpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIHNubXBUYXJnZXRQYXJhbXNTZWNOYW1lOiBiYWQgbGVuZ3RoXG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CkBAIC0xMjczLDcgKzEyODEsNyBAQAogICAgICAgICBpZiAobmFtZV9sZW4gPCBzbm1wVGFyZ2V0UGFyYW1zT0lETGVuICsgMSB8fAogICAgICAgICAgICAgbmFtZV9sZW4gPiBzbm1wVGFyZ2V0UGFyYW1zT0lETGVuICsgMzIpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wVGFyZ2V0UGFyYW1zRW50cnkiLCAiYmFkIGluZGV4IGxlbmd0aCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuIC0gc25tcFRhcmdldFBhcmFtc09JRExlbikpOworICAgICAgICAgICAgICAgICAgICAgICAgKGludCkobmFtZV9sZW4gLSBzbm1wVGFyZ2V0UGFyYW1zT0lETGVuKSkpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PQ1JFQVRJT047CiAgICAgICAgIH0KIApAQCAtMTM2Niw2ICsxMzc0LDcgQEAKICAgICAgICAgICAgICAgICB1cGRhdGVfdGltZXN0YW1wKHBhcmFtcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyAgICAgICAgc25tcF9zdG9yZV9uZWVkZWQoTlVMTCk7CiAgICAgfSBlbHNlIGlmIChhY3Rpb24gPT0gVU5ETyB8fCBhY3Rpb24gPT0gRlJFRSkgewogICAgICAgICBzbm1wVGFyZ2V0UGFyYW1zT0lEW3NubXBUYXJnZXRQYXJhbXNPSURMZW4gLSAxXSA9CiAgICAgICAgICAgICBTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTQ09MVU1OOwpAQCAtMTM4Miw2ICsxMzkxLDkgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworCiBzdHJ1Y3QgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QgKgogZ2V0X3BhcmFtRW50cnkoY2hhciAqbmFtZSkKIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCBiL2FnZW50L21pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaAppbmRleCA5YjVhYjg1Li5iZDMwNTgyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvc25tcFRhcmdldFBhcmFtc0VudHJ5LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3NubXBUYXJnZXRQYXJhbXNFbnRyeS5oCkBAIC0xLDc3ICsxLDc1IEBACiAKLS8qCi0gKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBtaWIyYyBhbmQgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBhIG1pYiBtb2R1bGUKLSAqIGZvciB0aGUgdWNkLXNubXAgc25tcGQgYWdlbnQuIEVkaXRlZCBieSBNaWNoYWVsIEJhZXIKLSAqIAotICogbGFzdCBjaGFuZ2VkIDIvMi85OS4KLSAqLwotCi0jaWZuZGVmIF9NSUJHUk9VUF9TTk1QVEFSR0VUUEFSQU1TRU5UUllfSAotI2RlZmluZSBfTUlCR1JPVVBfU05NUFRBUkdFVFBBUkFNU0VOVFJZX0gKLQotLyoKLSAqIHdlIHVzZSBoZWFkZXJfZ2VuZXJpYyBhbmQgY2hlY2ttaWIgZnJvbSB0aGUgdXRpbF9mdW5jcyBtb2R1bGUgCi0gKi8KLQotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKLQotICAgIC8qCi0gICAgICogTWFnaWMgbnVtYmVyIGRlZmluaXRpb25zOiAKLSAgICAgKi8KLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTCAgICAgICAgMQotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMICAyCi0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRSAgIDMKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTCAgNAotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRSAgICA1Ci0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVUyAgICAgIDYKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TTVBNT0RFTENPTFVNTiAgICAgICAgMgotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMQ09MVU1OICAzCi0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTkFNRUNPTFVNTiAgIDQKLSNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlMRVZFTENPTFVNTiAgNQotI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRUNPTFVNTiAgICA2Ci0jZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1JPV1NUQVRVU0NPTFVNTiAgICAgIDcKLSAgICAvKgotICAgICAqIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAKLSAgICAgKi8KLSAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0IHsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICpwYXJhbU5hbWU7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgbXBNb2RlbDsKLSAgICAgICAgIGludCAgICAgICAgICAgICBzZWNNb2RlbDsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICpzZWNOYW1lOwotICAgICAgICAgaW50ICAgICAgICAgICAgIHNlY0xldmVsOwotICAgICAgICAgaW50ICAgICAgICAgICAgIHN0b3JhZ2VUeXBlOwotICAgICAgICAgaW50ICAgICAgICAgICAgIHJvd1N0YXR1czsKLSAgICAgICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqbmV4dDsKLSAgICAgICAgIHRpbWVfdCAgICAgICAgICB1cGRhdGVUaW1lOwotICAgICB9OwotCi0vKgotICogdXRpbGl0eSBmdW5jdGlvbnMgCi0gKi8KLSAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpnZXRfcGFyYW1FbnRyeShjaGFyICpuYW1lKTsKLSAgICAgdm9pZCAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbVRhYmxlX2FkZChzdHJ1Y3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXdFbnRyeSk7Ci0gICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqc25tcFRhcmdldFBhcmFtVGFibGVfY3JlYXRlKHZvaWQpOwotCi0vKgotICogZnVuY3Rpb24gZGVmaW5pdGlvbnMgCi0gKi8KLQotICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVGFyZ2V0UGFyYW1zRW50cnkodm9pZCk7Ci0gICAgIGludCAgICAgICAgICAgICBzdG9yZV9zbm1wVGFyZ2V0UGFyYW1zRW50cnkoaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOwotICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5OwotCi0gICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0UGFyYW1zKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKLQorICAvKgorICAgKiBUaGlzIGZpbGUgd2FzIGdlbmVyYXRlZCBieSBtaWIyYyBhbmQgaXMgaW50ZW5kZWQgZm9yIHVzZSBhcyBhIG1pYiBtb2R1bGUKKyAgICogZm9yIHRoZSB1Y2Qtc25tcCBzbm1wZCBhZ2VudC4gRWRpdGVkIGJ5IE1pY2hhZWwgQmFlcgorICAgKiAKKyAgICogbGFzdCBjaGFuZ2VkIDIvMi85OS4KKyAgICovCisgCisgICNpZm5kZWYgX01JQkdST1VQX1NOTVBUQVJHRVRQQVJBTVNFTlRSWV9ICisgICNkZWZpbmUgX01JQkdST1VQX1NOTVBUQVJHRVRQQVJBTVNFTlRSWV9ICisgCisgICAgICAvKgorICAgICAgICogTWFnaWMgbnVtYmVyIGRlZmluaXRpb25zOiAKKyAgICAgICAqLworICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU01QTU9ERUwgICAgICAgIDEKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMICAyCisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FICAgMworICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUwgIDQKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRSAgICA1CisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTICAgICAgNgorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU01QTU9ERUxDT0xVTU4gICAgICAgIDIKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTRUNVUklUWU1PREVMQ09MVU1OICAzCisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TU0VDVVJJVFlOQU1FQ09MVU1OICAgNAorICAjZGVmaW5lICAgU05NUFRBUkdFVFBBUkFNU1NFQ1VSSVRZTEVWRUxDT0xVTU4gIDUKKyAgI2RlZmluZSAgIFNOTVBUQVJHRVRQQVJBTVNTVE9SQUdFVFlQRUNPTFVNTiAgICA2CisgICNkZWZpbmUgICBTTk1QVEFSR0VUUEFSQU1TUk9XU1RBVFVTQ09MVU1OICAgICAgNworICAgICAgLyoKKyAgICAgICAqIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAKKyAgICAgICAqLworICAgICAgIHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCB7CisgICAgICAgICAgIGNoYXIgICAgICAgICAgICpwYXJhbU5hbWU7CisgICAgICAgICAgIGludCAgICAgICAgICAgICBtcE1vZGVsOworICAgICAgICAgICBpbnQgICAgICAgICAgICAgc2VjTW9kZWw7CisgICAgICAgICAgIGNoYXIgICAgICAgICAgICpzZWNOYW1lOworICAgICAgICAgICBpbnQgICAgICAgICAgICAgc2VjTGV2ZWw7CisgICAgICAgICAgIGludCAgICAgICAgICAgICBzdG9yYWdlVHlwZTsKKyAgICAgICAgICAgaW50ICAgICAgICAgICAgIHJvd1N0YXR1czsKKyAgICAgICAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpuZXh0OworICAgICAgICAgICB0aW1lX3QgICAgICAgICAgdXBkYXRlVGltZTsKKyAgICAgICB9OworIAorICAvKgorICAgKiB1dGlsaXR5IGZ1bmN0aW9ucyAKKyAgICovCisgICAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpnZXRfcGFyYW1FbnRyeShjaGFyICpuYW1lKTsKKyAgICAgICB2b2lkICAgICAgICAgICAgc25tcFRhcmdldFBhcmFtVGFibGVfYWRkKHN0cnVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2V0UGFyYW1UYWJsZV9zdHJ1Y3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpuZXdFbnRyeSk7CisgICAgICAgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpzbm1wVGFyZ2V0UGFyYW1UYWJsZV9jcmVhdGUodm9pZCk7CisgICAgICAgdm9pZCBzbm1wVGFyZ2V0UGFyYW1UYWJsZV9kaXNwb3NlKHN0cnVjdCB0YXJnZXRQYXJhbVRhYmxlX3N0cnVjdCAqKTsKKyAKKyAgLyoKKyAgICogZnVuY3Rpb24gZGVmaW5pdGlvbnMgCisgICAqLworIAorICAgICAgIHZvaWQgICAgICAgICAgICBpbml0X3NubXBUYXJnZXRQYXJhbXNFbnRyeSh2b2lkKTsKKyAgICAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc25tcFRhcmdldFBhcmFtc0VudHJ5KHZvaWQpOworICAgICAgIGludCAgICAgICAgICAgICBzdG9yZV9zbm1wVGFyZ2V0UGFyYW1zRW50cnkoaW50IG1ham9ySUQsIGludCBtaW5vcklELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKKyAgICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfc25tcFRhcmdldFBhcmFtc0VudHJ5OworIAorICAgICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfdGFyZ2V0UGFyYW1zKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKyAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgIFdyaXRlTWV0aG9kICAgICB3cml0ZV9zbm1wVGFyZ2V0UGFyYW1zTVBNb2RlbDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRQYXJhbXNTZWNNb2RlbDsKICAgICAgV3JpdGVNZXRob2QgICAgIHdyaXRlX3NubXBUYXJnZXRQYXJhbXNTZWNOYW1lOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldFBhcmFtc1NlY0xldmVsOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldFBhcmFtc1N0b3JhZ2VUeXBlOwogICAgICBXcml0ZU1ldGhvZCAgICAgd3JpdGVfc25tcFRhcmdldFBhcmFtc1Jvd1N0YXR1czsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfU05NUFRBUkdFVFBBUkFNU0VOVFJZX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXQuYwppbmRleCAzY2NiYTFjLi41NjE5ZTM1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldC5jCkBAIC0xLDggKzEsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCkBAIC0xMiwxMCArMTAsMjYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOKSB8fCBkZWZpbmVkKE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4pCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaD4KKyNlbmRpZgorCiAjaW5jbHVkZSAic25tcFRhcmdldEFkZHJFbnRyeS5oIgogI2luY2x1ZGUgInNubXBUYXJnZXRQYXJhbXNFbnRyeS5oIgogI2luY2x1ZGUgInRhcmdldC5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0ZG9tYWluX3N1cHBvcnQpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0ZG9tYWluX3RyYW5zcG9ydF9vaWQpCituZXRzbm1wX2ZlYXR1cmVfd2FudChuZXRzbm1wX3Rsc3RtQWRkcl9nZXRfc2VydmVySWQpCisKICNkZWZpbmUgTUFYX1RBR1MgMTI4CiAKIG5ldHNubXBfc2Vzc2lvbiAqCkBAIC0yNyw2ICs0MSw5IEBACiAgICAgY2hhciAgICAgICAgICAgIGJ1ZltTUFJJTlRfTUFYX0xFTl07CiAgICAgY2hhciAgICAgICAgICAgIHRhZ3NbTUFYX1RBR1NdW1NQUklOVF9NQVhfTEVOXSwgKmNwOwogICAgIGludCAgICAgICAgICAgICBudW10YWdzID0gMCwgaTsKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOKSB8fCBkZWZpbmVkKE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4pCisgICAgaW50ICAgICAgICAgICAgIHRscyA9IDA7CisjZW5kaWYKICAgICBzdGF0aWMgc3RydWN0IHRhcmdldFBhcmFtVGFibGVfc3RydWN0ICpwYXJhbTsKIAogICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLCAibG9va2luZyBmb3I6ICVzXG4iLCB0YWdsaXN0KSk7CkBAIC01NCw3ICs3MSw3IEBACiAgICAgICAgICAgICAodGFyZ2FkZHJzLT50RG9tYWluLCB0YXJnYWRkcnMtPnREb21haW5MZW4sIE5VTEwsIE5VTEwpID09IDApIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCiAgICAgICAgICAgICAgICAgICAgICAidW5zdXBwb3J0ZWQgZG9tYWluIGZvciB0YXJnZXQgYWRkcmVzcyB0YWJsZSBlbnRyeSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICB0YXJnYWRkcnMtPm5hbWVEYXRhKTsKICAgICAgICAgfQogCiAgICAgICAgIC8qCkBAIC0xNTksMTkgKzE3Niw4NyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShkc3Rfc3RyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmIHREb21haW4gaXMgdGxzIHJlbGF0ZWQsIGNoZWNrIGZvciB0bHMgY29uZmlnCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bHMgPSBzbm1wX29pZF9jb21wYXJlKHRhcmdhZGRycy0+dERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+dERvbWFpbkxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcERUTFNVRFBEb21haW5fbGVuKTsKKworI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRscyA9IHNubXBfb2lkX2NvbXBhcmUodGFyZ2FkZHJzLT50RG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+dERvbWFpbkxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wVExTVENQRG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW5fbGVuKTsKKyNlbmRpZgorI2lmIGRlZmluZWQoTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4pIHx8IGRlZmluZWQoTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIXRscykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnQgKmNlcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICAqc2VydmVyX2lkID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcgkgICAgICBidWZbMzNdOworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBsb29raW5nIHVwIG91ciBpZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+cGFyYW1zKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9JREVOVElUWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TX0NFUlRLRVlfVEFSR0VUX1BBUkFNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5wYXJhbXMpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCh0LT5mX2NvbmZpZyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjZXJ0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZm91bmQgZmluZ2VycHJpbnQ6ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5mX2NvbmZpZyh0LCAibG9jYWxDZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmZpbmdlcnByaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoYnVmLCB0YXJnYWRkcnMtPm5hbWVEYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT5uYW1lTGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmW3RhcmdhZGRycy0+bmFtZUxlbl0gPSAnXDAnOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgbG9va2luZyB1cCB0aGVpciBpZDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0ID0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfUkVNT1RFX1BFRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19DRVJUS0VZX1RBUkdFVF9BRERSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGNlcnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0YXJnZXRfc2Vzc2lvbnMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBmb3VuZCBmaW5nZXJwcmludDogJXNcbiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHQtPmZfY29uZmlnKHQsICJwZWVyQ2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5maW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfR0VUX1NFUlZFUklECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZCA9IG5ldHNubXBfdGxzdG1BZGRyX2dldF9zZXJ2ZXJJZChidWYpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX0dFVF9TRVJWRVJJRCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VydmVyX2lkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGFyZ2V0X3Nlc3Npb25zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgZm91bmQgc2VydmVySWQ6ICVzXG4iLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlcnZlcl9pZCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+Zl9jb25maWcodCwgInRoZWlyX2hvc3RuYW1lIiwgc2VydmVyX2lkKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldCgmdGhpc3Nlc3MsIDAsIHNpemVvZih0aGlzc2VzcykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNzZXNzLnRpbWVvdXQgPSAodGFyZ2FkZHJzLT50aW1lb3V0KSAqIDEwMDAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNzZXNzLnJldHJpZXMgPSB0YXJnYWRkcnMtPnJldHJ5Q291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInRhcmdldF9zZXNzaW9ucyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRpbWVvdXQ6ICVkIC0+ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0aW1lb3V0OiAlZCAtPiAlbGRcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFyZ2FkZHJzLT50aW1lb3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXNzZXNzLnRpbWVvdXQpKTsKIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwYXJhbS0+bXBNb2RlbCA9PSBTTk1QX1ZFUlNJT05fMyAmJgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2VjTW9kZWwgIT0gMykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbS0+c2VjTW9kZWwgIT0gU05NUF9TRUNfTU9ERUxfVVNNICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5zZWNNb2RlbCAhPSBTTk1QX1NFQ19NT0RFTF9UU00pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuc3VwcG9ydGVkIG1vZGVsL3NlY21vZGVsIGNvbWJvIGZvciB0YXJnZXQgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+bmFtZSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bnN1cHBvcnRlZCBtcE1vZGVsL3NlY01vZGVsIGNvbWJvICVkLyVkIGZvciB0YXJnZXQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLT5tcE1vZGVsLCBwYXJhbS0+c2VjTW9kZWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdhZGRycy0+bmFtZURhdGEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBYWFg6IG1lbWxlYWsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5jCmluZGV4IDAyZWJiNzIuLjAxMDk5NzQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuYworKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmMKQEAgLTEyLDEyICsxMiwxMiBAQAogI2luY2x1ZGUgInRhcmdldF9jb3VudGVycy5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2luc3RhbmNlLmg+CiAKLXN0YXRpYyBvaWQgICB1bmF2YWlsYWJsZV9jb250ZXh0X29pZFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxMiwgMSwgNCB9Owotc3RhdGljIG9pZCAgIHVua25vd25fY29udGV4dF9vaWRbXSAgICAgPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCA1IH07Ci0KIHZvaWQKIGluaXRfdGFyZ2V0X2NvdW50ZXJzKHZvaWQpCiB7CisgICAgY29uc3Qgb2lkIHVuYXZhaWxhYmxlX2NvbnRleHRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCA0IH07CisgICAgY29uc3Qgb2lkIHVua25vd25fY29udGV4dF9vaWRbXSAgICAgPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxLCA1IH07CisKICAgICBERUJVR01TR1RMKCgidGFyZ2V0X2NvdW50ZXJzIiwgImluaXRpYWxpemluZ1xuIikpOwogCiAgICAgLyoKQEAgLTQ0LDYgKzQ0LDcgQEAKIAogfQogCisKIGludAogZ2V0X3Vua25vd25fY29udGV4dF9jb3VudChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oIGIvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVycy5oCmluZGV4IGE3ZGJmMGEuLjM1NWYzOTEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnMuaAorKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzLmgKQEAgLTIsNiArMiw5IEBACiAgKiB0ZXN0aGFuZGxlci5oIAogICovCiAKK2NvbmZpZ19leGNsdWRlKHRhcmdldC90YXJnZXRfY291bnRlcnMpCisKIHZvaWQgICAgICAgICAgICBpbml0X3RhcmdldF9jb3VudGVycyh2b2lkKTsKKwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgZ2V0X3VuYXZhaWxhYmxlX2NvbnRleHRfY291bnQ7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBnZXRfdW5rbm93bl9jb250ZXh0X2NvdW50OwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGFyZ2V0L3RhcmdldF9jb3VudGVyc181XzUuYyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTMyMjA3YgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmMKQEAgLTAsMCArMSwzMSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlICJ0YXJnZXRfY291bnRlcnNfNV81LmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGVscGVyX3N0YXRpc3RpY3MpCisKK3ZvaWQKK2luaXRfdGFyZ2V0X2NvdW50ZXJzXzVfNSh2b2lkKQoreworICAgIG9pZCB0YXJnZXRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEyLCAxIH07CisKKyAgICBERUJVR01TR1RMKCgidGFyZ2V0X2NvdW50ZXJzIiwgImluaXRpYWxpemluZ1xuIikpOworCisgICAgTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUigKKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCisgICAgICAgICAgICAidGFyZ2V0X2NvdW50ZXJzIiwgTlVMTCwgdGFyZ2V0X29pZCwgT0lEX0xFTkdUSCh0YXJnZXRfb2lkKSwKKyAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwgNCwgVEFSR0VUKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RhcmdldC90YXJnZXRfY291bnRlcnNfNV81LmggYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NjBiZjEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90YXJnZXQvdGFyZ2V0X2NvdW50ZXJzXzVfNS5oCkBAIC0wLDAgKzEsMyBAQAorY29uZmlnX2V4Y2x1ZGUodGFyZ2V0L3RhcmdldF9jb3VudGVycykKKwordm9pZCAgICAgICAgICAgIGluaXRfdGFyZ2V0X2NvdW50ZXJzXzVfNSh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmgKaW5kZXggNTAwMzE1Ny4uMGMxM2EwZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uLmgKQEAgLTIwLDggKzIwLDE1IEBACiBjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uKQogI2lmIGRlZmluZWQoIGxpbnV4ICkKIGNvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eCkKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlKQogI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQogY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3NvbGFyaXMyKQorI2VsaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChkcmFnb25mbHkpIHx8IGRlZmluZWQoZGFyd2luKQorY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0KQorI2VsaWYgZGVmaW5lZChvcGVuYnNkNCkKK2NvbmZpZ19yZXF1aXJlKHRjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkKQorI2VsaWYgZGVmaW5lZChuZXRic2QxKQorY29uZmlnX3JlcXVpcmUodGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX25ldGJzZCkKICNlbHNlCiBjb25maWdfcmVxdWlyZSh0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fdW5zdXApCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9jb21tb24uYwppbmRleCA5YjBjYjc4Li5iYmEwMWZlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2NvbW1vbi5jCkBAIC0xNjQsNiArMTY0LDEzIEBACiAgICAgZnJlZShlbnRyeSk7CiB9CiAKKyNpZmRlZiBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQKKworLyogWFhYIFRPRE86IHRoZXNlIGFyZSBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgZXZlcnl3aGVyZTsgdG8gZW5hYmxlIHRoZQorICAgZnVuY3Rpb25zIGZpcnN0IGltcGxlbWVudCBuZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUgaW4gdGhlCisgICB0Y3BDb25uX3tPU30uYyBmaWxlIGFuZCB0aGVuIGRlZmluZSBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQgaW4gdGhlCisgICB0Y3BDb25uX3tPU30uaCBmaWxlICh3aGljaCBtYXkgbmVlZCB0byBiZSBjcmVhdGVkIGZpcnN0KS4gKi8KKwogLyoqCiAgKiB1cGRhdGUgdW5kZXJseWluZyBkYXRhIHN0b3JlIChrZXJuZWwpIGZvciBlbnRyeQogICoKQEAgLTE4OSwxMCArMTk2LDExIEBACiAgICAgaWYgKCEgKGVudHJ5LT5mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fREVMRVRFKSkKICAgICAgICAgcmV0dXJuIC0xOwogICAgIAotICAgIHJjID0gbmV0c25tcF9hcmNoX3RjcGNvbm5fZGVsZXRlKGVudHJ5KTsKKyAgICByYyA9IG5ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZShlbnRyeSk7CiAgICAgCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRCAqLwogCiAvKioKICAqIHVwZGF0ZSBhbiBvbGQgdGNwY29ubl9lbnRyeSBmcm9tIGEgbmV3IG9uZQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fZnJlZWJzZDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWQxZTg0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX2ZyZWVic2Q0LmMKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiAgdGNwQ29ublRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgRnJlZUJTRC9EcmFnb25GbHlCU0QKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3RjcENvbm4uaD4KKworI2luY2x1ZGUgInRjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJ0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BJUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BpcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2luaXQobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2NsZWFudXAobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAKKyAgICAgKi8KK30KKworLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfY29weShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgKnJocykKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyoqIHh4eC1ya3M6OSB0Y3BDb25uIGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MgKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAidGNwY29ubl9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3RjcGNvbm5cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworCisgICAgcmV0dXJuIHJjOworfQorCisjaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChkYXJ3aW4pCisgICAgI2RlZmluZSBOU19FTEVNIHN0cnVjdCB4dGNwY2IKKyNlbHNlCisgICAgI2RlZmluZSBOU19FTEVNIHN0cnVjdCB4aW5wY2IKKyNlbmRpZgorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzaXplX3QgICBsZW47CisgICAgaW50ICAgICAgc25hbWVbXSA9IHsgQ1RMX05FVCwgUEZfSU5FVCwgSVBQUk9UT19UQ1AsIFRDUENUTF9QQ0JMSVNUIH07CisgICAgY2hhciAgICAgKnRjcGNiX2J1ZiA9IE5VTEw7CisjaWYgZGVmaW5lZChkcmFnb25mbHkpCisgICAgc3RydWN0IHhpbnBjYiAgKnhpZyA9IE5VTEw7CisgICAgaW50ICAgICAgU3RhdGVNYXBbXSA9IHsgMSwgMSwgMiwgMywgNCwgNSwgOCwgNiwgMTAsIDksIDcsIDExIH07CisjZWxzZQorICAgIHN0cnVjdCB4aW5wZ2VuICp4aWcgPSBOVUxMOworICAgIGludCAgICAgIFN0YXRlTWFwW10gPSB7IDEsIDIsIDMsIDQsIDUsIDgsIDYsIDEwLCA5LCA3LCAxMSB9OworI2VuZGlmCisgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICAqZW50cnk7CisgICAgaW50ICAgICAgc3RhdGU7CisgICAgaW50ICAgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiAgUmVhZCBpbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRDUCB0YWJsZSBkYXRhCisgICAgICovCisgICAgbGVuID0gMDsKKyAgICBpZiAoc3lzY3RsKHNuYW1lLCA0LCAwLCAmbGVuLCAwLCAwKSA8IDAgfHwKKyAgICAgICAodGNwY2JfYnVmID0gbWFsbG9jKGxlbikpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoc3lzY3RsKHNuYW1lLCA0LCB0Y3BjYl9idWYsICZsZW4sIDAsIDApIDwgMCkgeworICAgICAgICBmcmVlKHRjcGNiX2J1Zik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBVbnBpY2sgdGhpcyBpbnRvIHRoZSBjb25zdGl0dWVudCAneGlucGdlbicgc3RydWN0dXJlcywgYW5kIGV4dHJhY3QKKyAgICAgKiAgICAgdGhlICdpbnBjYicgZWxlbWVudHMgaW50byBhIGxpbmtlZCBsaXN0IChidWlsdCBpbiByZXZlcnNlKQorICAgICAqLworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorICAgIHhpZyA9IChzdHJ1Y3QgeGlucGNiICAqKSB0Y3BjYl9idWY7CisjZWxzZQorICAgIHhpZyA9IChzdHJ1Y3QgeGlucGdlbiAqKSB0Y3BjYl9idWY7CisgICAgeGlnID0gKHN0cnVjdCB4aW5wZ2VuICopICgoY2hhciAqKSB4aWcgKyB4aWctPnhpZ19sZW4pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICB3aGlsZSAoeGlnICYmICh4aWctPnhpX2xlbiA+IHNpemVvZihzdHJ1Y3QgeGlucGNiKSkpCisjZWxzZQorICAgIHdoaWxlICh4aWcgJiYgKHhpZy0+eGlnX2xlbiA+IHNpemVvZihzdHJ1Y3QgeGlucGdlbikpKQorI2VuZGlmCisgICAgeworCU5TX0VMRU0gcGNiID0gKigoTlNfRUxFTSAqKSB4aWcpOworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorCXhpZyA9IChzdHJ1Y3QgeGlucGNiICAqKSAoKGNoYXIgKikgeGlnICsgeGlnLT54aV9sZW4pOworI2Vsc2UKKwl4aWcgPSAoc3RydWN0IHhpbnBnZW4gKikgKChjaGFyICopIHhpZyArIHhpZy0+eGlnX2xlbik7CisjZW5kaWYKKwlzdGF0ZSA9IFN0YXRlTWFwW3BjYi54dF90cC50X3N0YXRlXTsKKworCWlmIChsb2FkX2ZsYWdzKSB7CisJICAgIGlmIChzdGF0ZSA9PSBUQ1BDT05ORUNUSU9OU1RBVEVfTElTVEVOKSB7CisJCWlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9MT0FEX05PTElTVEVOKSB7CisJCSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisJCQkgICAgICAgIiBza2lwcGluZyBsaXN0ZW5cbiIpKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fTE9BRF9PTkxZTElTVEVOKSB7CisJCURFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKwkJCSAgICAiIHNraXBwaW5nIG5vbi1saXN0ZW5cbiIpKTsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisKKyNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorCWlmIChwY2IueHRfaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2KQorCSAgICBjb250aW51ZTsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfdGNwY29ubl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoqIG9kZGx5IGVub3VnaCwgdGhlc2UgYXBwZWFyIHRvIGFscmVhZHkgYmUgaW4gbmV0d29yayBvcmRlciAqLworICAgICAgICBlbnRyeS0+bG9jX3BvcnQgPSBodG9ucyhwY2IueHRfaW5wLmlucF9scG9ydCk7CisgICAgICAgIGVudHJ5LT5ybXRfcG9ydCA9IGh0b25zKHBjYi54dF9pbnAuaW5wX2Zwb3J0KTsKKyAgICAgICAgZW50cnktPnRjcENvbm5TdGF0ZSA9IHN0YXRlOworICAgICAgICBlbnRyeS0+cGlkID0gMDsKKyAgICAgICAgCisgICAgICAgIC8qKiB0aGUgYWRkciBzdHJpbmcgbWF5IG5lZWQgd29yayAqLworCWlmIChwY2IueHRfaW5wLmlucF92ZmxhZyAmIElOUF9JUFY2KSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gMTY7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZwY2IueHRfaW5wLmluNnBfbGFkZHIsIDE2KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJnBjYi54dF9pbnAuaW42cF9mYWRkciwgMTYpOworCX0KKwllbHNlIHsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSA0OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmcGNiLnh0X2lucC5pbnBfbGFkZHIsIDQpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmcGNiLnh0X2lucC5pbnBfZmFkZHIsIDQpOworCX0KKworICAgICAgICAvKgorICAgICAgICAgKiBhZGQgZW50cnkgdG8gY29udGFpbmVyCisgICAgICAgICAqLworICAgICAgICBlbnRyeS0+YXJiaXRyYXJ5X2luZGV4ID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSArIDE7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisgICAgfQorCisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbGludXguYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jCmluZGV4IDhlYTA4MmIuLjVmOTNiZTAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9saW51eC5jCkBAIC0xMSw3ICsxMSw3IEBACiAKICNpbmNsdWRlICJ0Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfY29uc3RhbnRzLmgiCiAjaW5jbHVkZSAidGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX3ByaXZhdGUuaCIKLQorI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmgiCiBzdGF0aWMgaW50CiBsaW51eF9zdGF0ZXNbMTJdID0geyAxLCA1LCAzLCA0LCA2LCA3LCAxMSwgMSwgOCwgOSwgMiwgMTAgfTsKIApAQCAtNTYsMTggKzU2LDE5IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZmRlZiBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQKIC8qCiAgKiBkZWxldGUgYW4gZW50cnkKICAqLwogaW50Ci1uZXRzbm1wX2FyY2hfdGNwY29ubl9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQogewogICAgIGlmIChOVUxMID09IGVudHJ5KQogICAgICAgICByZXR1cm4gLTE7CiAgICAgLyoqIHh4eC1ya3M6OSB0Y3BDb25uIGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KICAgICByZXR1cm4gLTE7CiB9Ci0KKyNlbmRpZiAvKiBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQgKi8KIAogLyoqCiAgKgpAQCAtODEsNyArODIsMTAgQEAKICAgICBpbnQgcmMgPSAwOwogCiAgICAgREVCVUdNU0dUTCgoImFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCi0gICAgICAgICAgICAgICAgInRjcGNvbm5fY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXApXG4iLCBsb2FkX2ZsYWdzKSk7CisgICAgICAgICAgICAgICAgInRjcGNvbm5fY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICAvKiBTZXR1cCB0aGUgcGlkX2Zyb21faW5vZGUgdGFibGUsIGFuZCBmaWxsIGl0LiovCisgICAgbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGVfaW5pdCgpOwogCiAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CiAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdGNwY29ublxuIik7CkBAIC0xMzQsMTcgKzEzOCwyMCBAQAogICAgICAqLwogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5OwotICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdGUsIHJjLCBsb2NhbF9wb3J0LCByZW1vdGVfcG9ydCwgdG1wX3N0YXRlOworICAgICAgICB1bnNpZ25lZCBpbnQgICAgc3RhdGUsIGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0LCB0bXBfc3RhdGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbm9kZTsKICAgICAgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4sIG9mZnNldDsKICAgICAgICAgY2hhciAgICAgICAgICAgIGxvY2FsX2FkZHJbMTBdLCByZW1vdGVfYWRkclsxMF07CiAgICAgICAgIHVfY2hhciAgICAgICAgICp0bXBfcHRyOwogCi0gICAgICAgIGlmICg1ICE9IChyYyA9IHNzY2FuZihsaW5lLCAiJSpkOiAlOFswLTlBLVpdOiV4ICU4WzAtOUEtWl06JXggJXgiLAorICAgICAgICBpZiAoNiAhPSAocmMgPSBzc2NhbmYobGluZSwgIiUqZDogJThbMC05QS1aXToleCAlOFswLTlBLVpdOiV4ICV4ICUqeDolKnggJSp4OiUqeCAlKnggJSp4ICUqeCAlbGx1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvY2FsX2FkZHIsICZsb2NhbF9wb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3RlX2FkZHIsICZyZW1vdGVfcG9ydCwgJnRtcF9zdGF0ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfYWRkciwgJnJlbW90ZV9wb3J0LCAmdG1wX3N0YXRlLCAmaW5vZGUpKSkgewogICAgICAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKLSAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcgbGluZSAoJWQgIT0gNSlcbiIsIHJjKSk7CisgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBwYXJzaW5nIGxpbmUgKCVkICE9IDYpXG4iLCByYykpOwogICAgICAgICAgICAgREVCVUdNU0dUKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwiIGxpbmUgJyVzJ1xuIiwgbGluZSkpOworCSAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGNwOl9sb2FkNDogYmFkIGxpbmUgaW4gIiBQUk9DRklMRSAiOiAlc1xuIiwgbGluZSk7CisJICAgIHJjID0gMDsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwiIGxpbmUgJyVzJ1xuIiwgbGluZSkpOwpAQCAtMTgwLDcgKzE4Nyw4IEBACiAgICAgICAgIGVudHJ5LT5sb2NfcG9ydCA9ICh1bnNpZ25lZCBzaG9ydCkgbG9jYWxfcG9ydDsKICAgICAgICAgZW50cnktPnJtdF9wb3J0ID0gKHVuc2lnbmVkIHNob3J0KSByZW1vdGVfcG9ydDsKICAgICAgICAgZW50cnktPnRjcENvbm5TdGF0ZSA9IHN0YXRlOwotICAgICAgICAKKyAgICAgICAgZW50cnktPnBpZCA9IG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlKGlub2RlKTsKKwogICAgICAgICAvKiogdGhlIGFkZHIgc3RyaW5nIG1heSBuZWVkIHdvcmsgKi8KICAgICAgICAgYnVmX2xlbiA9IHN0cmxlbihsb2NhbF9hZGRyKTsKICAgICAgICAgaWYgKCg4ICE9IGJ1Zl9sZW4pIHx8CkBAIC0yNTMsMjggKzI2MSwxNyBAQAogewogICAgIGludCAgICAgICAgICAgICByYyA9IDA7CiAgICAgRklMRSAgICAgICAgICAgKmluOwotICAgIGNoYXIgICAgICAgICAgICBsaW5lWzE4MF07Ci0gICAgc3RhdGljIGludCAgICAgIGxvZ19vcGVuX2VyciA9IDE7CisgICAgY2hhciAgICAgICAgICAgIGxpbmVbMzYwXTsKIAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gY29udGFpbmVyKTsKIAogI3VuZGVmIFBST0NGSUxFCiAjZGVmaW5lIFBST0NGSUxFICIvcHJvYy9uZXQvdGNwNiIKICAgICBpZiAoIShpbiA9IGZvcGVuKFBST0NGSUxFLCAiciIpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpOwotICAgICAgICBpZiAoMSA9PSBsb2dfb3Blbl9lcnIpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkIG5vdCBvcGVuICIgUFJPQ0ZJTEUgIlxuIik7Ci0gICAgICAgICAgICBsb2dfb3Blbl9lcnIgPSAwOwotICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLCJjb3VsZCBub3Qgb3BlbiAiIFBST0NGSUxFICJcbiIpKTsKICAgICAgICAgcmV0dXJuIC0yOwogICAgIH0KLSAgICAvKgotICAgICAqIGlmIHdlIHR1cm5lZCBvZmYgbG9nZ2luZyBvZiBvcGVuIGVycm9ycywgdHVybiBpdCBiYWNrIG9uIG5vdyB0aGF0Ci0gICAgICogd2UgaGF2ZSBiZWVuIGFibGUgdG8gb3BlbiB0aGUgZmlsZS4KLSAgICAgKi8KLSAgICBpZiAoMCA9PSBsb2dfb3Blbl9lcnIpCi0gICAgICAgIGxvZ19vcGVuX2VyciA9IDE7Ci0gICAgCisKICAgICBmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKTsgLyogc2tpcCBoZWFkZXIgKi8KIAogICAgIC8qCkBAIC0yODYsMTYgKzI4MywxOSBAQAogICAgIHdoaWxlIChmZ2V0cyhsaW5lLCBzaXplb2YobGluZSksIGluKSkgewogICAgICAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5OwogICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdGUsIGxvY2FsX3BvcnQsIHJlbW90ZV9wb3J0LCB0bXBfc3RhdGU7CisgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgaW5vZGU7CiAgICAgICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuLCBvZmZzZXQ7CiAgICAgICAgIGNoYXIgICAgICAgICAgICBsb2NhbF9hZGRyWzQ4XSwgcmVtb3RlX2FkZHJbNDhdOwogICAgICAgICB1X2NoYXIgICAgICAgICAqdG1wX3B0cjsKIAotICAgICAgICBpZiAoNSAhPSAocmMgPSBzc2NhbmYobGluZSwgIiUqZDogJTQ3WzAtOUEtWl06JXggJTQ3WzAtOUEtWl06JXggJXgiLAorICAgICAgICBpZiAoNiAhPSAocmMgPSBzc2NhbmYobGluZSwgIiUqZDogJTQ3WzAtOUEtWl06JXggJTQ3WzAtOUEtWl06JXggJXggJSp4OiUqeCAlKng6JSp4ICUqeCAlKnggJSp4ICVsbHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9jYWxfYWRkciwgJmxvY2FsX3BvcnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdGVfYWRkciwgJnJlbW90ZV9wb3J0LCAmdG1wX3N0YXRlKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9hZGRyLCAmcmVtb3RlX3BvcnQsICZ0bXBfc3RhdGUsICZpbm9kZSkpKSB7CiAgICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgcGFyc2luZyBsaW5lICglZCAhPSA1KVxuIiwgcmMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIHBhcnNpbmcgbGluZSAoJWQgIT0gNilcbiIsIHJjKSk7CiAgICAgICAgICAgICBERUJVR01TR1QoKCJhY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLCIgbGluZSAnJXMnXG4iLCBsaW5lKSk7CisJICAgIHNubXBfbG9nKExPR19FUlIsICJ0Y3A6X2xvYWQ2OiBiYWQgbGluZSBpbiAiIFBST0NGSUxFICI6ICVzXG4iLCBsaW5lKTsKKwkgICAgcmMgPSAwOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLCIgbGluZSAnJXMnXG4iLCBsaW5lKSk7CkBAIC0zMzEsNiArMzMxLDcgQEAKICAgICAgICAgZW50cnktPmxvY19wb3J0ID0gKHVuc2lnbmVkIHNob3J0KSBsb2NhbF9wb3J0OwogICAgICAgICBlbnRyeS0+cm10X3BvcnQgPSAodW5zaWduZWQgc2hvcnQpIHJlbW90ZV9wb3J0OwogICAgICAgICBlbnRyeS0+dGNwQ29ublN0YXRlID0gc3RhdGU7CisgICAgICAgIGVudHJ5LT5waWQgPSBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZShpbm9kZSk7CiAKICAgICAgICAgLyoqIHRoZSBhZGRyIHN0cmluZyBtYXkgbmVlZCB3b3JrICovCiAgICAgICAgIGJ1Zl9sZW4gPSBzdHJsZW4obG9jYWxfYWRkcik7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fbmV0YnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMjlmZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9uZXRic2QuYwpAQCAtMCwwICsxLDIyOSBAQAorLyoKKyAqICB0Y3BDb25uVGFibGUgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBOZXRCU0QKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3RjcENvbm4uaD4KKworI2luY2x1ZGUgInRjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJ0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BJUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BpcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MsIGludCB2YXIpOworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2luaXQobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2NsZWFudXAobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAKKyAgICAgKi8KK30KKworLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfY29weShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgKnJocykKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyoqIHh4eC1ya3M6OSB0Y3BDb25uIGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MgKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAidGNwY29ubl9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3RjcGNvbm5cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MsIDQpOworI2lmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncywgNik7CisjZW5kaWYKKworICAgIHJldHVybiByYzsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncywgaW50IHZlcikKK3sKKyAgICBjb25zdCBjaGFyICptaWJuYW1lOworICAgIGludCAgICAgIG1pYls4XTsKKyAgICBzaXplX3QgICBtaWJfbGVuOworICAgIHN0cnVjdCBraW5mb19wY2IgKnBjYmxpc3Q7CisgICAgc2l6ZV90ICAgcGNiX2xlbjsKKyAgICBpbnQgICAgICBTdGF0ZU1hcFtdID0geyAxLCAyLCAzLCA0LCA1LCA4LCA2LCAxMCwgOSwgNywgMTEgfTsKKyAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgICplbnRyeTsKKyAgICBpbnQgICAgICBzdGF0ZTsKKyAgICBpbnQgICAgICBpLCByYyA9IDA7CisKKyAgICAvKgorICAgICAqICBSZWFkIGluIHRoZSBidWZmZXIgY29udGFpbmluZyB0aGUgVENQIHRhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBzd2l0Y2ggKHZlcikgeworICAgIGNhc2UgNDoKKyAgICAJbWlibmFtZSA9ICJuZXQuaW5ldC50Y3AucGNibGlzdCI7CisgICAgCWJyZWFrOworICAgIGNhc2UgNjoKKyAgICAJbWlibmFtZSA9ICJuZXQuaW5ldDYudGNwNi5wY2JsaXN0IjsKKwlicmVhazsKKyAgICBkZWZhdWx0OgorICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidGNwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogYmFkIHZlcnNpb24gJWRcbiIsIHZlcik7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzeXNjdGxuYW1ldG9taWIobWlibmFtZSwgbWliLCAmbWliX2xlbikgPT0gLTEpIHsKKyAgICAJc25tcF9sb2coTE9HX0VSUiwgInRjcC1taWI6ZGF0YV9hY2Nlc3M6X2xvYWQ6IGNhbnQgcmVzb2x2ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoc3lzY3RsKG1pYiwgc2l6ZW9mKG1pYikgLyBzaXplb2YoKm1pYiksIE5VTEwsICZwY2JfbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidGNwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCBzaXplIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgocGNibGlzdCA9IG1hbGxvYyhwY2JfbGVuKSkgPT0gTlVMTCkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidGNwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCBhbGxvY2F0ZSBtaWIgJXNcbiIsIG1pYm5hbWUpOworCXJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KHBjYmxpc3QsIDAsIHBjYl9sZW4pOworCisgICAgbWliWzZdID0gc2l6ZW9mKCpwY2JsaXN0KTsKKyAgICBtaWJbN10gPSBwY2JfbGVuIC8gc2l6ZW9mKCpwY2JsaXN0KTsKKworICAgIGlmIChzeXNjdGwobWliLCBzaXplb2YobWliKSAvIHNpemVvZigqbWliKSwKKwkJICAgIHBjYmxpc3QsICZwY2JfbGVuLCBOVUxMLCAwKSA9PSAtMSkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidGNwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCBzaXplIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogIFVucGljayB0aGlzIGludG8gdGhlIGNvbnN0aXR1ZW50IHN0cnVjdHVyZXMsIGFuZCBleHRyYWN0CisgICAgICogICAgIHRoZSAnaW5wY2InIGVsZW1lbnRzIGludG8gYSBsaW5rZWQgbGlzdCAoYnVpbHQgaW4gcmV2ZXJzZSkKKyAgICAgKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgcGNiX2xlbiAvIHNpemVvZigqcGNibGlzdCk7IGkrKykgeworCXN0cnVjdCBraW5mb19wY2IgKnBjYiA9IHBjYmxpc3QraTsKKwlzdGF0ZSA9IFN0YXRlTWFwW3BjYi0+a2lfdHN0YXRlXTsKKworCWlmIChsb2FkX2ZsYWdzKSB7CisJICAgIGlmIChzdGF0ZSA9PSBUQ1BDT05ORUNUSU9OU1RBVEVfTElTVEVOKSB7CisJCWlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9MT0FEX05PTElTVEVOKSB7CisJCSAgICBERUJVR01TR1QoKCJ2ZXJib3NlOmFjY2Vzczp0Y3Bjb25uOmNvbnRhaW5lciIsCisJCQkgICAgICAgIiBza2lwcGluZyBsaXN0ZW5cbiIpKTsKKwkJICAgIGNvbnRpbnVlOworCQl9CisJICAgIH0KKwkgICAgZWxzZSBpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fTE9BRF9PTkxZTElTVEVOKSB7CisJCURFQlVHTVNHVCgoInZlcmJvc2U6YWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKwkJCSAgICAiIHNraXBwaW5nIG5vbi1saXN0ZW5cbiIpKTsKKwkJY29udGludWU7CisJICAgIH0KKwl9CisKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc190Y3Bjb25uX2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+dGNwQ29ublN0YXRlID0gc3RhdGU7CisgICAgICAgIGVudHJ5LT5waWQgPSAwOworICAgICAgICAKKwlpZiAodmVyID09IDYpIHsKKwkgICAgc3RydWN0IHNvY2thZGRyX2luNiBzcmMsIGRzdDsKKwkgICAgbWVtY3B5KCZzcmMsICZwY2ItPmtpX3MsIHNpemVvZihzcmMpKTsKKwkgICAgbWVtY3B5KCZkc3QsICZwY2ItPmtpX2QsIHNpemVvZihkc3QpKTsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSAxNjsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnNyYy5zaW42X2FkZHIsIDE2KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmRzdC5zaW42X2FkZHIsIDE2KTsKKwkgICAgZW50cnktPmxvY19wb3J0ID0gbnRvaHMoc3JjLnNpbjZfcG9ydCk7CisJICAgIGVudHJ5LT5ybXRfcG9ydCA9IG50b2hzKGRzdC5zaW42X3BvcnQpOworCX0KKwllbHNlIHsKKwkgICAgc3RydWN0IHNvY2thZGRyX2luIHNyYywgZHN0OworCSAgICBtZW1jcHkoJnNyYywgJnBjYi0+a2lfcywgc2l6ZW9mKHNyYykpOworCSAgICBtZW1jcHkoJmRzdCwgJnBjYi0+a2lfZCwgc2l6ZW9mKGRzdCkpOworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDQ7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZzcmMuc2luX2FkZHIsIDQpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmZHN0LnNpbl9hZGRyLCA0KTsKKwkgICAgZW50cnktPmxvY19wb3J0ID0gbnRvaHMoc3JjLnNpbl9wb3J0KTsKKwkgICAgZW50cnktPnJtdF9wb3J0ID0gbnRvaHMoZHN0LnNpbl9wb3J0KTsKKwl9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmFyYml0cmFyeV9pbmRleCA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgKyAxOworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKworICAgIGlmKHJjPDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uX29wZW5ic2QuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDAxMDY0ZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9vcGVuYnNkLmMKQEAgLTAsMCArMSwyMTEgQEAKKy8qCisgKiAgdGNwQ29ublRhYmxlIE1JQiBhcmNoaXRlY3R1cmUgc3VwcG9ydCBmb3IgT3BlbkJTRAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdGNwQ29ubi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KKworI2luY2x1ZGUgInRjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJ0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fcHJpdmF0ZS5oIgorCisjaW5jbHVkZSAibWliSUkvbWliSUlfY29tbW9uLmgiCisKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BJUF9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BpcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisKK3N0YXRpYyBpbnQgX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOworCisvKgorICogaW5pdGlhbGl6ZSBhcmNoIHNwZWNpZmljIHN0b3JhZ2UKKyAqCisgKiBAcmV0dmFsICAwOiBzdWNjZXNzCisgKiBAcmV0dmFsIDwwOiBlcnJvcgorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2luaXQobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2NsZWFudXAobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGNsZWFudXAKKyAgICAgKi8KK30KKworLyoKKyAqIGNvcHkgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fZW50cnlfY29weShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RjcGNvbm5fZW50cnkgKnJocykKK3sKKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGRlbGV0ZSBhbiBlbnRyeQorICovCitpbnQKK25ldHNubXBfYXJjaF90Y3Bjb25uX2VudHJ5X2RlbGV0ZShuZXRzbm1wX3RjcGNvbm5fZW50cnkgKmVudHJ5KQoreworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgLyoqIHh4eC1ya3M6OSB0Y3BDb25uIGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KKyAgICByZXR1cm4gLTE7Cit9CisKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3RjcGNvbm5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MgKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnRjcGNvbm46Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAidGNwY29ubl9jb250YWluZXJfYXJjaF9sb2FkIChmbGFncyAleClcbiIsIGxvYWRfZmxhZ3MpKTsKKworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gY29udGFpbmVyIHNwZWNpZmllZC9mb3VuZCBmb3IgYWNjZXNzX3RjcGNvbm5cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworCisgICAgcmV0dXJuIHJjOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitzdGF0aWMgaW50CitfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBsb2FkX2ZsYWdzKQoreworICAgIHN0cnVjdCBpbnBjYnRhYmxlIHRhYmxlOworICAgIHN0cnVjdCBpbnBjYiAgICpoZWFkLCAqbmV4dCwgKnByZXY7CisgICAgc3RydWN0IGlucGNiICAgaW5wY2I7CisgICAgc3RydWN0IHRjcGNiICAgdGNwY2I7CisgICAgaW50ICAgICAgU3RhdGVNYXBbXSA9IHsgMSwgMiwgMywgNCwgNSwgOCwgNiwgMTAsIDksIDcsIDExIH07CisgICAgbmV0c25tcF90Y3Bjb25uX2VudHJ5ICAqZW50cnk7CisgICAgaW50ICAgICAgc3RhdGU7CisgICAgaW50ICAgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiAgUmVhZCBpbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRDUCB0YWJsZSBkYXRhCisgICAgICovCisgICAgaWYgKCFhdXRvX25saXN0KFRDUF9TWU1CT0wsIChjaGFyICopJnRhYmxlLCBzaXplb2YodGFibGUpKSkgeworCURFQlVHTVNHVEwoKCJ0Y3AtbWliL3RjcENvbm5fb3BlbmJzZCIsICJGYWlsZWQgdG8gcmVhZCB0Y3Bfc3ltYm9sXG4iKSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIHByZXYgPSAoc3RydWN0IGlucGNiICopJkNJUkNMRVFfRklSU1QoJnRhYmxlLmlucHRfcXVldWUpOworICAgIHByZXYgPSBOVUxMOworICAgIGhlYWQgPSBuZXh0ID0gQ0lSQ0xFUV9GSVJTVCgmdGFibGUuaW5wdF9xdWV1ZSk7CisKKyAgICB3aGlsZSAobmV4dCkgeworCWlmICghTkVUU05NUF9LTE9PS1VQKG5leHQsIChjaGFyICopJmlucGNiLCBzaXplb2YoaW5wY2IpKSkgeworCSAgICBERUJVR01TR1RMKCgidGNwLW1pYi9kYXRhX2FjY2Vzcy90Y3BDb25uIiwgImtsb29rdXAgaW5wY2IgZmFpbGVkXG4iKSk7CisJICAgIGJyZWFrOworCX0KKwlpZiAocHJldiAmJiBDSVJDTEVRX1BSRVYoJmlucGNiLCBpbnBfcXVldWUpICE9IHByZXYpIHsKKwkgICAgc25tcF9sb2coTE9HX0VSUiwidGNidGFibGUgbGluayBlcnJvclxuIik7CisJICAgIGJyZWFrOworCX0KKwlwcmV2ID0gbmV4dDsKKwluZXh0ID0gQ0lSQ0xFUV9ORVhUKCZpbnBjYiwgaW5wX3F1ZXVlKTsKKwlpZiAoIU5FVFNOTVBfS0xPT0tVUChpbnBjYi5pbnBfcHBjYiwgKGNoYXIgKikmdGNwY2IsIHNpemVvZih0Y3BjYikpKSB7CisJICAgIERFQlVHTVNHVEwoKCJ0Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm4iLCAia2xvb2t1cCB0Y3BjYiBmYWlsZWRcbiIpKTsKKwkgICAgYnJlYWs7CisJfQorCXN0YXRlID0gU3RhdGVNYXBbdGNwY2IudF9zdGF0ZV07CisKKwlpZiAobG9hZF9mbGFncykgeworCSAgICBpZiAoc3RhdGUgPT0gVENQQ09OTkVDVElPTlNUQVRFX0xJU1RFTikgeworCQlpZiAobG9hZF9mbGFncyAmIE5FVFNOTVBfQUNDRVNTX1RDUENPTk5fTE9BRF9OT0xJU1RFTikgeworCQkgICAgREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorCQkJICAgICAgICIgc2tpcHBpbmcgbGlzdGVuXG4iKSk7CisJCSAgICBnb3RvIHNraXA7CisJCX0KKwkgICAgfQorCSAgICBlbHNlIGlmIChsb2FkX2ZsYWdzICYgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9MT0FEX09OTFlMSVNURU4pIHsKKwkJREVCVUdNU0dUKCgidmVyYm9zZTphY2Nlc3M6dGNwY29ubjpjb250YWluZXIiLAorCQkJICAgICIgc2tpcHBpbmcgbm9uLWxpc3RlblxuIikpOworCQlnb3RvIHNraXA7CisJICAgIH0KKwl9CisKKyNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgICAgICBpZiAoaW5wY2IuaW5wX2ZsYWdzICYgSU5QX0lQVjYpCisJICAgIGdvdG8gc2tpcDsKKyNlbmRpZgorCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfdGNwY29ubl9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoqIG9kZGx5IGVub3VnaCwgdGhlc2UgYXBwZWFyIHRvIGFscmVhZHkgYmUgaW4gbmV0d29yayBvcmRlciAqLworICAgICAgICBlbnRyeS0+bG9jX3BvcnQgPSBudG9ocyhpbnBjYi5pbnBfbHBvcnQpOworICAgICAgICBlbnRyeS0+cm10X3BvcnQgPSBudG9ocyhpbnBjYi5pbnBfZnBvcnQpOworICAgICAgICBlbnRyeS0+dGNwQ29ublN0YXRlID0gc3RhdGU7CisgICAgICAgIGVudHJ5LT5waWQgPSAwOworICAgICAgICAKKyAgICAgICAgLyoqIHRoZSBhZGRyIHN0cmluZyBtYXkgbmVlZCB3b3JrICovCisJaWYgKGlucGNiLmlucF9mbGFncyAmIElOUF9JUFY2KSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gMTY7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZpbnBjYi5pbnBfbGFkZHI2LCAxNik7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZpbnBjYi5pbnBfZmFkZHI2LCAxNik7CisJfQorCWVsc2UgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDQ7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZpbnBjYi5pbnBfbGFkZHIsIDQpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmaW5wY2IuaW5wX2ZhZGRyLCA0KTsKKwl9CisJREVCVUdNU0dUTCgoInRjcC1taWIvZGF0YV9hY2Nlc3MiLCAidGNwICVkICVkICVkXG4iLAorCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuLCBlbnRyeS0+bG9jX3BvcnQsIGVudHJ5LT5ybXRfcG9ydCkpOworCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5LT5hcmJpdHJhcnlfaW5kZXggPSBDT05UQUlORVJfU0laRShjb250YWluZXIpICsgMTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKK3NraXA6CisJaWYgKGhlYWQgPT0gbmV4dCkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYocmM8MCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL2RhdGFfYWNjZXNzL3RjcENvbm5fc29sYXJpczIuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jCmluZGV4IDdjMmM2YWUuLjg4OTI5OWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvZGF0YV9hY2Nlc3MvdGNwQ29ubl9zb2xhcmlzMi5jCkBAIC0zOSwxNCArMzksMTYgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmZGVmIFRDUENPTk5fREVMRVRFX1NVUFBPUlRFRAogaW50IAotbmV0c25tcF9hcmNoX3RjcGNvbm5fZGVsZXRlKG5ldHNubXBfdGNwY29ubl9lbnRyeSAqZXApCituZXRzbm1wX2FyY2hfdGNwY29ubl9lbnRyeV9kZWxldGUobmV0c25tcF90Y3Bjb25uX2VudHJ5ICplcCkKIHsKICAgICAvKgogICAgICAqIE5vdCBpbXBsZW1lbnRlZCAKICAgICAgKi8KICAgICByZXR1cm4gKC0xKTsKIH0KKyNlbmRpZiAvKiBUQ1BDT05OX0RFTEVURV9TVVBQT1JURUQgKi8KIAogaW50IAogbmV0c25tcF9hcmNoX3RjcGNvbm5fY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIsIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYwppbmRleCBlYjkwZjQwLi5jOTk5YTBlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYworKysgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAidGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5oIgogCi1vaWQgICAgICAgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZFtdID0geyBUQ1BDT05ORUNUSU9OVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZF9zaXplID0KK2NvbnN0IG9pZCAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkW10gPSB7IFRDUENPTk5FQ1RJT05UQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkX3NpemUgPQogT0lEX0xFTkdUSCh0Y3BDb25uZWN0aW9uVGFibGVfb2lkKTsKIAogdGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbiB0Y3BDb25uZWN0aW9uVGFibGVfdXNlcl9jb250ZXh0OwpAQCAtMzU1LDggKzM1NSw3IEBACiAgICAgICAgIHRjcENvbm5lY3Rpb25Mb2NhbEFkZHJlc3NfdmFsX3B0cl9sZW47CiAgICAgbWVtY3B5KHRibF9pZHgtPnRjcENvbm5lY3Rpb25Mb2NhbEFkZHJlc3MsCiAgICAgICAgICAgIHRjcENvbm5lY3Rpb25Mb2NhbEFkZHJlc3NfdmFsX3B0ciwKLSAgICAgICAgICAgdGNwQ29ubmVjdGlvbkxvY2FsQWRkcmVzc192YWxfcHRyX2xlbiAqCi0gICAgICAgICAgIHNpemVvZih0Y3BDb25uZWN0aW9uTG9jYWxBZGRyZXNzX3ZhbF9wdHJbMF0pKTsKKyAgICAgICAgICAgdGNwQ29ubmVjdGlvbkxvY2FsQWRkcmVzc192YWxfcHRyX2xlbik7CiAKICAgICAvKgogICAgICAqIHRjcENvbm5lY3Rpb25Mb2NhbFBvcnQoMykvSW5ldFBvcnROdW1iZXIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL2Evdy9lL1IvZC9IIApAQCAtMzg5LDggKzM4OCw3IEBACiAgICAgICAgIHRjcENvbm5lY3Rpb25SZW1BZGRyZXNzX3ZhbF9wdHJfbGVuOwogICAgIG1lbWNweSh0YmxfaWR4LT50Y3BDb25uZWN0aW9uUmVtQWRkcmVzcywKICAgICAgICAgICAgdGNwQ29ubmVjdGlvblJlbUFkZHJlc3NfdmFsX3B0ciwKLSAgICAgICAgICAgdGNwQ29ubmVjdGlvblJlbUFkZHJlc3NfdmFsX3B0cl9sZW4gKgotICAgICAgICAgICBzaXplb2YodGNwQ29ubmVjdGlvblJlbUFkZHJlc3NfdmFsX3B0clswXSkpOworICAgICAgICAgICB0Y3BDb25uZWN0aW9uUmVtQWRkcmVzc192YWxfcHRyX2xlbik7CiAKICAgICAvKgogICAgICAqIHRjcENvbm5lY3Rpb25SZW1Qb3J0KDYpL0luZXRQb3J0TnVtYmVyL0FTTl9VTlNJR05FRC91X2xvbmcodV9sb25nKS8vbC9hL3cvZS9SL2QvSCAKQEAgLTQwNiw3ICs0MDQsNyBAQAogICogQGludGVybmFsCiAgKiBzZXQgcm93IGNvbnRleHQgaW5kZXhlcwogICoKLSAqIEBwYXJhbSByZXFyZXFfY3R4IHRoZSByb3cgY29udGV4dCB0aGF0IG5lZWRzIHVwZGF0ZWQgaW5kZXhlcworICogQHBhcmFtIHJvd3JlcV9jdHggdGhlIHJvdyBjb250ZXh0IHRoYXQgbmVlZHMgdXBkYXRlZCBpbmRleGVzCiAgKgogICogQHJldHZhbCBNRkRfU1VDQ0VTUyAgICAgOiBzdWNjZXNzLgogICogQHJldHZhbCBNRkRfRVJST1IgICAgICAgOiBvdGhlciBlcnJvci4KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKaW5kZXggOWE3YjI5Yi4uMTdkMzEwNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlLmgKQEAgLTMwMSw4ICszMDEsOCBAQAogICAgICAgICAqIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgKICAgICAgICAgKHRjcENvbm5lY3Rpb25UYWJsZV9taWJfaW5kZXggKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIHRjcENvbm5lY3Rpb25UYWJsZV9vaWRfc2l6ZTsKKyAgICBleHRlcm4gY29uc3Qgb2lkICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICB0Y3BDb25uZWN0aW9uVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgInRjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggNjZjNDJiNS4uZGZiOTY0OSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTE4Nyw3ICsxODcsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm10X2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnJtdF9hZGRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm10X3BvcnQpKSkgewotICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCk7CisgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgcm93cmVxX2N0eCkpIHsKKyAgICAgICAgICAgIE5FVFNOTVBfTE9HT05DRSgoTE9HX0RFQlVHLAorICAgICAgICAgICAgICAgICAgICAiRXJyb3IgaW5zZXJ0aW5nIGVudHJ5IHRvIHRjcENvbm5lY3Rpb25UYWJsZSwiXAorICAgICAgICAgICAgICAgICAgICAiIGVudHJ5IGFscmVhZHkgZXhpc3RzLlxuIikpOworICAgICAgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX3JlbGVhc2Vfcm93cmVxX2N0eChyb3dyZXFfY3R4KTsKKyAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChyb3dyZXFfY3R4KSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igc2V0dGluZyBpbmRleCB3aGlsZSBsb2FkaW5nICIKQEAgLTI2MCw3ICsyNjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9GUkVFX0RPTlRfQ0xFQVIpOwogCiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTp0Y3BDb25uZWN0aW9uVGFibGU6dGNwQ29ubmVjdGlvblRhYmxlX2NhY2hlX2xvYWQiLAotICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICIlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9sb2FkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcENvbm5lY3Rpb25UYWJsZS90Y3BDb25uZWN0aW9uVGFibGVfaW50ZXJmYWNlLmMKaW5kZXggNTM0ODYxNC4uZDBiMjdlNSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BDb25uZWN0aW9uVGFibGUvdGNwQ29ubmVjdGlvblRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwQ29ubmVjdGlvblRhYmxlL3RjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTggQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BDb25uZWN0aW9uVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9zaXplLCB0Y3BDb25uZWN0aW9uVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb25fc2V0LCB0Y3BDb25uZWN0aW9uVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCB0Y3BDb25uZWN0aW9uVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfZ2V0LCB0Y3BDb25uZWN0aW9uVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTgyLDE5ICs5NSwyMyBAQAogICAgICAgICAgICAgICAgIF90Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX3NodXRkb3duKHRjcENvbm5lY3Rpb25UYWJsZV9pbnRlcmZhY2VfY3R4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogdGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gdGNwQ29ubmVjdGlvblRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX1JFR0lTVFJBVElPTl9HRVQKIHRjcENvbm5lY3Rpb25UYWJsZV9yZWdpc3RyYXRpb24gKgogdGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gdGNwQ29ubmVjdGlvblRhYmxlX2lmX2N0eC51c2VyX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogdGNwQ29ubmVjdGlvblRhYmxlX3JlZ2lzdHJhdGlvbiAqCiB0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uX3NldCh0Y3BDb25uZWN0aW9uVGFibGVfcmVnaXN0cmF0aW9uICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3JlZykKQEAgLTEwNCwxMiArMTIxLDE1IEBACiAgICAgdGNwQ29ubmVjdGlvblRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9DT05UQUlORVJfU0laRQogaW50CiB0Y3BDb25uZWN0aW9uVGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUodGNwQ29ubmVjdGlvblRhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQQ09OTkVDVElPTlRBQkxFX0NPTlRBSU5FUl9TSVpFICovCiAKIHVfaW50CiB0Y3BDb25uZWN0aW9uVGFibGVfZGlydHlfZ2V0KHZvaWQpCkBAIC0xMzMsNyArMTUzLDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9wb3N0X3JlcXVlc3Q7CiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfb2JqZWN0X2xvb2t1cDsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9nZXRfdmFsdWVzOwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiBzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgX21mZF90Y3BDb25uZWN0aW9uVGFibGVfY2hlY2tfb2JqZWN0czsKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV91bmRvX3NldHVwOwogc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX3NldF92YWx1ZXM7CkBAIC0xNDgsNyArMTY4LDcgQEAKICAgICAgICAgICAgICAgICBfdGNwQ29ubmVjdGlvblRhYmxlX3VuZG9fY29sdW1uKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIsIGludCBjb2x1bW4pOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioKICAqIEBpbnRlcm5hbApAQCAtMTkzLDcgKzIxMyw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IFRDUENPTk5FQ1RJT05UQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gVENQQ09OTkVDVElPTlRBQkxFX01BWF9DT0w7CkBAIC0yMzIsOCArMjUyLDcgQEAKICAgICBhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCA9CiAgICAgICAgIF9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX3Bvc3RfcmVxdWVzdDsKIAotCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorI2lmICEoZGVmaW5lZChORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQpIHx8IGRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUKSkKICAgICAvKgogICAgICAqIFJFUVVJUkVEIHdyYXBwZXJzIGZvciBzZXQgcmVxdWVzdCBoYW5kbGluZwogICAgICAqLwpAQCAtMjU4LDcgKzI3Nyw3IEBACiAgICAgICovCiAgICAgYWNjZXNzX211bHRpcGxleGVyLT5jb25zaXN0ZW5jeV9jaGVja3MgPQogICAgICAgICBfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9jaGVja19kZXBlbmRlbmNpZXM7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC0yNzMsNyArMjkyLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwQ29ubmVjdGlvblRhYmxlX29pZF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9CQUJZX1NURVAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCBIQU5ETEVSX0NBTl9SV1JJVEUKICNlbmRpZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKQEAgLTI5NCw3ICszMTMsNyBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfU0VUX1ZBTFVFUzsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5pcnJldmVyc2libGVfY29tbWl0KQpAQCAtMzE3LDcgKzMzNiw3IEBACiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfQ09NTUlUOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnVuZG9fY29tbWl0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAgICAgaGFuZGxlciA9IG5ldHNubXBfYmFieV9zdGVwc19oYW5kbGVyX2dldChtZmRfbW9kZXMpOwogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXIocmVnaW5mbywgaGFuZGxlcik7CkBAIC03ODQsNyArODAzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtODQwLDcgKzg1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmMgPSBTTk1QX0VSUl9OT0VSUk9SOwotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BDb25uZWN0aW9uVGFibGU6X21mZF90Y3BDb25uZWN0aW9uVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTkyMSw3ICs5NDAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTk5MCw3ICsxMDA5LDcgQEAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF90Y3BDb25uZWN0aW9uVGFibGVfZ2V0X3ZhbHVlcyAqLwogCiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogU0VUIHByb2Nlc3NpbmcKQEAgLTExMTgsNyArMTEzNyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYzsKQEAgLTExNjYsNyArMTE4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcENvbm5lY3Rpb25UYWJsZTpfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9jaGVja19kZXBlbmRlbmNpZXMiLCAiY2FsbGVkXG4iKSk7CiAKQEAgLTEyMzMsNyArMTI1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcENvbm5lY3Rpb25UYWJsZTpfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV91bmRvX3NldHVwIiwgImNhbGxlZFxuIikpOwpAQCAtMTI5OCw3ICsxMzE3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmM7CiAKQEAgLTEzODEsNyArMTQwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7CkBAIC0xNDI5LDcgKzE0NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnRjcENvbm5lY3Rpb25UYWJsZTpfbWZkX3RjcENvbm5lY3Rpb25UYWJsZV9jb21taXQiLCAiY2FsbGVkXG4iKSk7CkBAIC0xNDYzLDcgKzE0ODIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYzsKLSAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwQ29ubmVjdGlvblRhYmxlOl9tZmRfdGNwQ29ubmVjdGlvblRhYmxlX3VuZG9fY29tbWl0IiwgImNhbGxlZFxuIikpOwpAQCAtMTU0Miw3ICsxNTYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKICAgICBpbnQgICAgICAgICAgICAgcmM7Ci0gICAgdGNwQ29ubmVjdGlvblRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0cmk7CiAKQEAgLTE1OTcsNyArMTYxNiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcENvbm5lY3Rpb25UYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDp0Y3BDb25uZWN0aW9uVGFibGU6X21mZF90Y3BDb25uZWN0aW9uVGFibGVfaXJyZXZlcnNpYmxlOmNvbW1pdCIsICJjYWxsZWRcbiIpKTsKQEAgLTE2MTgsNyArMTYzNyw3IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX21mZF90Y3BDb25uZWN0aW9uVGFibGVfaXJyZXZlcnNpYmxlX2NvbW1pdCAqLwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqCkBAIC0xNzQyLDkgKzE3NjEsMTIgQEAKICAgICBpZl9jdHgtPmNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKIAogICAgIHRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOwotICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CiAgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyID0KICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRjcENvbm5lY3Rpb25UYWJsZTp0YWJsZV9jb250YWluZXIiKTsKKyAgICAgICAgaWYgKGlmX2N0eC0+Y29udGFpbmVyKQorICAgICAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInRjcENvbm5lY3Rpb25UYWJsZSIpOworICAgIH0KICAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKICAgICAgICAgICAgICAgICAgInRjcENvbm5lY3Rpb25UYWJsZV9jb250YWluZXJfaW5pdFxuIik7CkBAIC0xNzcyLDYgKzE3OTQsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfdGNwQ29ubmVjdGlvblRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BDT05ORUNUSU9OVEFCTEVfRVhURVJOQUxfQUNDRVNTCiB0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCAqCiB0Y3BDb25uZWN0aW9uVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KHRjcENvbm5lY3Rpb25UYWJsZV9taWJfaW5kZXggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQpAQCAtMTc5NCw4ICsxODE3LDkgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9CisgICAgcm93cmVxX2N0eCA9ICh0Y3BDb25uZWN0aW9uVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIENPTlRBSU5FUl9GSU5EKHRjcENvbm5lY3Rpb25UYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUENPTk5FQ1RJT05UQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5jCmluZGV4IDJhNmZlN2IuLmViZDY3MmIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuYwpAQCAtMjYsOCArMjYsOCBAQAogCiAjaW5jbHVkZSAidGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuaCIKIAotb2lkICAgICAgICAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkW10gPSB7IFRDUExJU1RFTkVSVEFCTEVfT0lEIH07Ci1pbnQgICAgICAgICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRfc2l6ZSA9Citjb25zdCBvaWQgICAgICAgdGNwTGlzdGVuZXJUYWJsZV9vaWRbXSA9IHsgVENQTElTVEVORVJUQUJMRV9PSUQgfTsKK2NvbnN0IGludCAgICAgICB0Y3BMaXN0ZW5lclRhYmxlX29pZF9zaXplID0KIE9JRF9MRU5HVEgodGNwTGlzdGVuZXJUYWJsZV9vaWQpOwogCiB0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbiB0Y3BMaXN0ZW5lclRhYmxlX3VzZXJfY29udGV4dDsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmggYi9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZS5oCmluZGV4IDA4OThmOWMuLjA4YTc0MWEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGUuaApAQCAtMTgyLDggKzE4Miw4IEBACiAgICAgICAgICogdGNwTGlzdGVuZXJUYWJsZV9yb3dfZmluZF9ieV9taWJfaW5kZXgodGNwTGlzdGVuZXJUYWJsZV9taWJfaW5kZXgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIG1pYl9pZHgpOwogCi0gICAgZXh0ZXJuIG9pZCAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkW107Ci0gICAgZXh0ZXJuIGludCAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkX3NpemU7CisgICAgZXh0ZXJuIGNvbnN0IG9pZCAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkW107CisgICAgZXh0ZXJuIGNvbnN0IGludCAgICAgIHRjcExpc3RlbmVyVGFibGVfb2lkX3NpemU7CiAKIAogI2luY2x1ZGUgInRjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlLmgiCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jIGIvYWdlbnQvbWliZ3JvdXAvdGNwLW1pYi90Y3BMaXN0ZW5lclRhYmxlL3RjcExpc3RlbmVyVGFibGVfZGF0YV9hY2Nlc3MuYwppbmRleCAwNTAzZmIzLi40YWExNGZmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9kYXRhX2FjY2Vzcy5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2RhdGFfYWNjZXNzLmMKQEAgLTI1OCw3ICsyNTgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9BQ0NFU1NfVENQQ09OTl9GUkVFX0RPTlRfQ0xFQVIpOwogCiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTp0Y3BMaXN0ZW5lclRhYmxlOnRjcExpc3RlbmVyVGFibGVfY2FjaGVfbG9hZCIsCi0gICAgICAgICAgICAgICAiJWQgcmVjb3Jkc1xuIiwgQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOworICAgICAgICAgICAgICAgIiVkIHJlY29yZHNcbiIsIChpbnQpQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSkpOwogCiAgICAgcmV0dXJuIE1GRF9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB0Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9sb2FkICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90Y3AtbWliL3RjcExpc3RlbmVyVGFibGUvdGNwTGlzdGVuZXJUYWJsZV9pbnRlcmZhY2UuYyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jCmluZGV4IGNmYWJkZDEuLjJlNDEzODAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3RjcC1taWIvdGNwTGlzdGVuZXJUYWJsZS90Y3BMaXN0ZW5lclRhYmxlX2ludGVyZmFjZS5jCkBAIC0zMCw2ICszMCw3IEBACiAgKiBzdGFuZGFyZCBOZXQtU05NUCBpbmNsdWRlcyAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCkBAIC00Niw2ICs0NywxOCBAQAogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcExpc3RlbmVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X21lcmdlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYmFieV9zdGVwcykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX2FsbF9yZXF1ZXN0c19lcnJvcikKKworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfc2l6ZSwgdGNwTGlzdGVuZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0LCB0Y3BMaXN0ZW5lclRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQsIHRjcExpc3RlbmVyVGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX2dldCwgdGNwTGlzdGVuZXJUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCisKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKgpAQCAtNzksMTkgKzkyLDIzIEBACiAgICAgICAgICAgICAgICAgX3RjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX3NodXRkb3duKHRjcExpc3RlbmVyVGFibGVfaW50ZXJmYWNlX2N0eCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX2N0eCk7CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfQ09OVEFJTkVSX0dFVAogbmV0c25tcF9jb250YWluZXIgKgogdGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHRjcExpc3RlbmVyVGFibGVfaWZfY3R4LmNvbnRhaW5lcjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfQ09OVEFJTkVSX0dFVCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9SRUdJU1RSQVRJT05fR0VUCiB0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbiAqCiB0Y3BMaXN0ZW5lclRhYmxlX3JlZ2lzdHJhdGlvbl9nZXQodm9pZCkKIHsKICAgICByZXR1cm4gdGNwTGlzdGVuZXJUYWJsZV9pZl9jdHgudXNlcl9jdHg7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX1JFR0lTVFJBVElPTl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfUkVHSVNUUkFUSU9OX1NFVAogdGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb24gKgogdGNwTGlzdGVuZXJUYWJsZV9yZWdpc3RyYXRpb25fc2V0KHRjcExpc3RlbmVyVGFibGVfcmVnaXN0cmF0aW9uICogbmV3cmVnKQogewpAQCAtOTksMTIgKzExNiwxNSBAQAogICAgIHRjcExpc3RlbmVyVGFibGVfaWZfY3R4LnVzZXJfY3R4ID0gbmV3cmVnOwogICAgIHJldHVybiBvbGQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX1JFR0lTVFJBVElPTl9TRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfQ09OVEFJTkVSX1NJWkUKIGludAogdGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfc2l6ZSh2b2lkKQogewogICAgIHJldHVybiBDT05UQUlORVJfU0laRSh0Y3BMaXN0ZW5lclRhYmxlX2lmX2N0eC5jb250YWluZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVENQTElTVEVORVJUQUJMRV9DT05UQUlORVJfU0laRSAqLwogCiAvKgogICogbWZkIG11bHRpcGxleGVyIG1vZGVzCkBAIC0xNTAsNyArMTcwLDcgQEAKIAogICAgIC8qCiAgICAgICogRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgKiBvcHRpbWl6ZXMgcmV0cml2YWwuIAorICAgICAqIG9wdGltaXplcyByZXRyaWV2YWwuIAogICAgICAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gVENQTElTVEVORVJUQUJMRV9NSU5fQ09MOwogICAgIHRibF9pbmZvLT5tYXhfY29sdW1uID0gVENQTElTVEVORVJUQUJMRV9NQVhfQ09MOwpAQCAtMjIwLDcgKzI0MCw4IEBACiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+cG9zdF9yZXF1ZXN0KQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKIAotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCisgICAgLyogWFhYIC0gYXJlIHRoZXNlIGFjdHVhbGx5IG5lY2Vzc2FyeT8gKi8KICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT5zZXRfdmFsdWVzKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCkKQEAgLTI0Myw3ICsyNjQsNyBAQAogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX0NPTU1JVDsKICAgICBpZiAoYWNjZXNzX211bHRpcGxleGVyLT51bmRvX2NvbW1pdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9VTkRPX0NPTU1JVDsKLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtNjA5LDcgKzYzMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBpbnQgICAgICAgICAgICAgcmMsIHBhY2tldF9yYzsKIApAQCAtNjU2LDcgKzY3Nyw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKLSAgICB0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh0Y3BMaXN0ZW5lclRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6dGNwTGlzdGVuZXJUYWJsZTpfbWZkX3RjcExpc3RlbmVyVGFibGVfb2JqZWN0X2xvb2t1cCIsICJjYWxsZWRcbiIpKTsKQEAgLTcyNyw3ICs3NDgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgIHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKHRjcExpc3RlbmVyVGFibGVfcm93cmVxX2N0eCopCiAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpOwogICAgIHVfY2hhciAgICAgICAgICpvbGRfc3RyaW5nOwpAQCAtOTI0LDkgKzk0NSwxMiBAQAogICAgIGlmX2N0eC0+Y2FjaGUtPmZsYWdzID0gTkVUU05NUF9DQUNIRV9ET05UX0lOVkFMSURBVEVfT05fU0VUOwogCiAgICAgdGNwTGlzdGVuZXJUYWJsZV9jb250YWluZXJfaW5pdCgmaWZfY3R4LT5jb250YWluZXIsIGlmX2N0eC0+Y2FjaGUpOwotICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKQorICAgIGlmIChOVUxMID09IGlmX2N0eC0+Y29udGFpbmVyKSB7CiAgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyID0KICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRjcExpc3RlbmVyVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgICAgIGlmIChpZl9jdHgtPmNvbnRhaW5lcikKKyAgICAgICAgICAgIGlmX2N0eC0+Y29udGFpbmVyLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgidGNwTGlzdGVuZXJUYWJsZSIpOworICAgIH0KICAgICBpZiAoTlVMTCA9PSBpZl9jdHgtPmNvbnRhaW5lcikgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGluICIKICAgICAgICAgICAgICAgICAgInRjcExpc3RlbmVyVGFibGVfY29udGFpbmVyX2luaXRcbiIpOwpAQCAtOTU0LDYgKzk3OCw3IEBACiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF90Y3BMaXN0ZW5lclRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93biAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UQ1BMSVNURU5FUlRBQkxFX0VYVEVSTkFMX0FDQ0VTUwogdGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4ICoKIHRjcExpc3RlbmVyVGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KHRjcExpc3RlbmVyVGFibGVfbWliX2luZGV4ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgpCkBAIC05NzYsOCArMTAwMSw5IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPQorICAgIHJvd3JlcV9jdHggPSAodGNwTGlzdGVuZXJUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgQ09OVEFJTkVSX0ZJTkQodGNwTGlzdGVuZXJUYWJsZV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RDUExJU1RFTkVSVEFCTEVfRVhURVJOQUxfQUNDRVNTICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jIGIvYWdlbnQvbWliZ3JvdXAvdGVzdGhhbmRsZXIuYwppbmRleCA4MDg1OWNlLi5mNzQ2OGYwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC90ZXN0aGFuZGxlci5jCisrKyBiL2FnZW50L21pYmdyb3VwL3Rlc3RoYW5kbGVyLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTksNiArMTAsMTEgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodWxvbmdfaW5zdGFuY2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyZWdpc3Rlcl9yZWFkX29ubHlfdGFibGVfZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2J1aWxkX3Jlc3VsdCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX2RhdGFzZXQpCisKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKQEAgLTc0LDYgKzgwLDggQEAKICAgICAgICAgcmV0dXJuOwogCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKHRhYmxlX2luZm8gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywgQVNOX0lOVEVHRVIsIEFTTl9JTlRFR0VSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOwpAQCAtMTIzLDYgKzEzMSw4IEBACiAgICAgICogYXV0b21hdGljYWxseSBwYXJzZWQgY29sdW1uIGFuZCBpbmRleCBpbmZvcm1hdGlvbiAKICAgICAgKi8KICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKKyAgICBpZiAodGFibGVfaW5mbyA9PSBOVUxMKQorICAgICAgICByZXR1cm47CiAKICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLCBBU05fSU5URUdFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLCAwKTsKQEAgLTMyNSw2ICszMzUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGFjY2Vzc2VzLCBzaXplb2YoYWNjZXNzZXMpKTsKICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKICAgICAgICAgaWYgKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnR5cGUgIT0gQVNOX1VOU0lHTkVEKQogICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywKQEAgLTM2Nyw2ICszNzgsNyBAQAogICAgICAgICAgKiBub3RoaW5nIHRvIGRvIAogICAgICAgICAgKi8KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgfQogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZTY5ODUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIuaApAQCAtMCwwICsxLDExIEBACisvKgorICogbW9kdWxlIHRvIGluY2x1ZGUgdGhlIG1vZHVsZXMKKyAqLworY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24pCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlKQorY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlKQorY29uZmlnX3JlcXVpcmUodGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlKQorY29uZmlnX2FkZF9taWIoU05NUC1UTFMtVE0tTUlCKQorY29uZmlnX2FkZF9taWIoU05NUC1UU00tTUlCKQorCisjZGVmaW5lIFNOTVBfVExTX1RNX0JBU0UgICAgIDEsIDMsIDYsIDEsIDIsIDEsIDE5OApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiMTA5MDUKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlLmgKQEAgLTAsMCArMSw3IEBACisjaWZuZGVmIFNOTVBUTFNUTUFERFJUQUJMRV9ICisjZGVmaW5lIFNOTVBUTFNUTUFERFJUQUJMRV9ICisKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlKQorCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRMU1RNQUREUlRBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmMgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0OTNmZjkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5jCkBAIC0wLDAgKzEsMTQzOCBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSAidGxzdG0tbWliLmgiCisjaW5jbHVkZSAic25tcFRsc3RtQWRkclRhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGxzdG1hZGRyX2NvbnRhaW5lcikKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2RlbGV0ZV90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2V4dHJhY3RfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9yZW1vdmVfcm93KQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3N0b3JhZ2V0eXBlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9pbnNlcnRfcm93KQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisvKiogWFhYIC0gbW92ZSB0aGVzZSB0byB0YWJsZV9kYXRhIGhlYWRlcj8gKi8KKyNkZWZpbmUgRkFURV9ORVdMWV9DUkVBVEVEICAgIDEKKyNkZWZpbmUgRkFURV9OT19DSEFOR0UgICAgICAgIDAKKyNkZWZpbmUgRkFURV9ERUxFVEVfTUUgICAgICAgIC0xCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIC8qCisgICAgICogc3RydWN0dXJlIGZvciB1bmRvIHN0b3JhZ2UgYW5kIG90aGVyIHZhcnMgZm9yIHNldCBwcm9jZXNzaW5nIAorICAgICAqLwordHlwZWRlZiBzdHJ1Y3QgdGxzdG1BZGRyVGFibGVfdW5kb19zIHsKKyAgICBjaGFyICAgICAgICAgICAgZmF0ZTsKKyAgICBjaGFyICAgICAgICAgICAgY29waWVkOworICAgIGNoYXIgICAgICAgICAgICBpc19jb25zaXN0ZW50OworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXFbVExTVE1BRERSVEFCTEVfTUFYX0NPTFVNTiArIDFdOworICAgIC8qCisgICAgICogdW5kbyBDb2x1bW4gc3BhY2UgCisgICAgICovCisgICAgY2hhciAgICAgICB0bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludFtUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVF9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIHRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbjsKKyAgICBjaGFyICAgICAgICAgICAgdGxzdG1BZGRyU2VydmVySWRlbnRpdHlbVExTVE1BRERSU0VSVkVSSURFTlRJVFlfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW47CisgICAgY2hhciAgICAgICAgICAgIHRsc3RtQWRkclN0b3JhZ2VUeXBlOworICAgIGNoYXIgICAgICAgICAgICB0bHN0bUFkZHJSb3dTdGF0dXM7CisgICAgY2hhciAgICAgICAgICAgIGhhc2hUeXBlOworfSB0bHN0bUFkZHJUYWJsZV91bmRvOworCisgICAgLyoKKyAgICAgKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAKKyAgICAgKi8KK3R5cGVkZWYgc3RydWN0IHRsc3RtQWRkclRhYmxlX2VudHJ5X3MgeworICAgIC8qCisgICAgICogSW5kZXggdmFsdWVzIAorICAgICAqLworICAgIGNoYXIgICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck5hbWVbU05NUFRBUkdFVEFERFJOQU1FX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgc25tcFRhcmdldEFkZHJOYW1lX2xlbjsKKworICAgIC8qCisgICAgICogQ29sdW1uIHZhbHVlcyAKKyAgICAgKi8KKyAgICBjaGFyICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludFtUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVF9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIHRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbjsKKyAgICBjaGFyICAgICAgICAgICAgdGxzdG1BZGRyU2VydmVySWRlbnRpdHlbVExTVE1BRERSU0VSVkVSSURFTlRJVFlfTUFYX1NJWkVdOworICAgIHNpemVfdCAgICAgICAgICB0bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW47CisgICAgY2hhciAgICAgICAgICAgIHRsc3RtQWRkclN0b3JhZ2VUeXBlOworICAgIGNoYXIgICAgICAgICAgICB0bHN0bUFkZHJSb3dTdGF0dXM7CisgICAgY2hhciAgICAgICAgICAgIGhhc2hUeXBlOworCisgICAgLyoKKyAgICAgKiB1c2VkIGR1cmluZyBzZXQgcHJvY2Vzc2luZyAKKyAgICAgKi8KKyAgICB0bHN0bUFkZHJUYWJsZV91bmRvICp1bmRvOworCisgICAgLyoKKyAgICAgKiB1c2VyIGRhdGEKKyAgICAgKi8KKyAgICBzdHJ1Y3QgbmV0c25tcF9jZXJ0X3MgICAqY2VydDsKKyAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgYWRkcl9mbGFnczsKKworfSB0bHN0bUFkZHJUYWJsZV9lbnRyeTsKKworbmV0c25tcF90ZGF0YV9yb3cgKnRsc3RtQWRkclRhYmxlX2NyZWF0ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNubXBUYXJnZXRBZGRyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc25tcFRhcmdldEFkZHJOYW1lX2xlbik7Cit2b2lkIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KG5ldHNubXBfdGRhdGEgKiB0YWJsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqIHJvdyk7CisKK3N0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciB0bHN0bUFkZHJUYWJsZV9oYW5kbGVyOworc3RhdGljIGludCBfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpOworc3RhdGljIHZvaWQgX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKTsKK3N0YXRpYyB1aW50MzJfdCBfbGFzdF9jaGFuZ2VkID0gMDsKK3N0YXRpYyBpbnQgX2NvdW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cyk7CisKK3N0YXRpYyB2b2lkIF90bHN0bUFkZHJfaW5pdF9wZXJzaXN0ZW5jZSh2b2lkKTsKK3N0YXRpYyB2b2lkIF9hZGRyc19hZGQodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyB2b2lkIF9hZGRyc19yZW1vdmUodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyB2b2lkIF9hZGRyX3R3ZWFrX3N0b3JhZ2UodGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyBuZXRzbm1wX3RkYXRhICAqX3RhYmxlX2RhdGEgPSBOVUxMOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBJbml0aWFsaXplcyB0aGUgdGxzdG1BZGRyVGFibGUgbW9kdWxlICovCit2b2lkCitpbml0X3NubXBUbHN0bUFkZHJUYWJsZSh2b2lkKQoreworICAgIG9pZCAgICAgICAgICAgICByZWdfb2lkW10gPSB7IFNOTVBfVExTX1RNX0FERFJfVEFCTEUgfTsKKyAgICBjb25zdCBzaXplX3QgICAgcmVnX29pZF9sZW4gPSBPSURfTEVOR1RIKHJlZ19vaWQpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZzsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOworICAgIG5ldHNubXBfY2FjaGUgICAgICAgICAgICAgICAgICAgKmNhY2hlOworICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgICAgKndhdGNoZXI7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6aW5pdCIsCisgICAgICAgICAgICAgICAgImluaXRpYWxpemluZyB0YWJsZSB0bHN0bUFkZHJUYWJsZVxuIikpOworCisgICAgcmVnID0KKyAgICAgICAgbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInRsc3RtQWRkclRhYmxlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZCwgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSk7CisKKyAgICBfdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJ0bHN0bUFkZHJUYWJsZSIsIDApOworICAgIGlmIChOVUxMID09IF90YWJsZV9kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyB0ZGF0YSB0YWJsZSBmb3IgdGxzdG1BZGRyVGFibGVcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8pOworICAgIGlmIChOVUxMID09IHRhYmxlX2luZm8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIHRhYmxlIGluZm8gZm9yIHRsc3RtQWRkclRhYmxlXG4iKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUoX3RhYmxlX2RhdGEpOworICAgICAgICBfdGFibGVfZGF0YSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAoTmV0c25tcENhY2hlTG9hZCopX2NhY2hlX2xvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTmV0c25tcENhY2hlRnJlZSopX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLCByZWdfb2lkX2xlbik7CisgICAgaWYgKE5VTEwgPT0gY2FjaGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yIHRsc3RtQ2VydFRvVFNOVGFibGVcbiIpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShfdGFibGVfZGF0YSk7CisgICAgICAgIF90YWJsZV9kYXRhID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWNoZS0+bWFnaWMgPSAodm9pZCAqKV90YWJsZV9kYXRhOworICAgIGNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIC8qCisgICAgICogcG9wdWxhdGUgaW5kZXggdHlwZXMKKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4OiBzbm1wVGFyZ2V0QWRkck5hbWUgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fUFJJVl9JTVBMSUVEX09DVEVUX1NUUiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CisKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gVExTVE1BRERSVEFCTEVfTUlOX0NPTFVNTjsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gVExTVE1BRERSVEFCTEVfTUFYX0NPTFVNTjsKKworICAgIG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIocmVnLCBfdGFibGVfZGF0YSwgdGFibGVfaW5mbyk7CisKKyAgICBpZiAoY2FjaGUpIAorICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YWJsZV9jb250YWluZXIiKTsKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgc2NhbGFycworICAgICAqLworICAgIHJlZ19vaWRbMTBdID0gNzsKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFRsc3RtQWRkckNvdW50IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY291bnRfaGFuZGxlciwgcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHJlZ19vaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgY3JlYXRlIGhhbmRsZXIgZm9yIHNubXBUbHN0bUFkZHJDb3VudFxuIik7CisgICAgZWxzZSB7CisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKHJlZyk7CisgICAgICAgIGlmIChjYWNoZSkgCisgICAgICAgICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZShyZWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KGNhY2hlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbm1wVGxzdG1BZGRyQ291bnQiKTsKKyAgICB9CisgICAgCisgICAgcmVnX29pZFsxMF0gPSA4OworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAic25tcFRsc3RtQWRkclRhYmxlTGFzdENoYW5nZWQiLCBOVUxMLCByZWdfb2lkLAorICAgICAgICBPSURfTEVOR1RIKHJlZ19vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgd2F0Y2hlciA9IG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygodm9pZCopJl9sYXN0X2NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX2xhc3RfY2hhbmdlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVElNRVRJQ0tTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKKyAgICBpZiAoKE5VTEwgPT0gcmVnKSB8fCAoTlVMTCA9PSB3YXRjaGVyKSkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgaGFuZGxlciBmb3Igc25tcFRsc3RtQWRkclRhYmxlTGFzdENoYW5nZWRcbiIpOworICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhcjIocmVnLCB3YXRjaGVyKTsKKworICAgIC8qCisgICAgICogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUgCisgICAgICovCisgICAgX3Rsc3RtQWRkcl9pbml0X3BlcnNpc3RlbmNlKCk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlIAorICovCituZXRzbm1wX3RkYXRhX3JvdyAqCit0bHN0bUFkZHJUYWJsZV9jcmVhdGVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnNubXBUYXJnZXRBZGRyTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzbm1wVGFyZ2V0QWRkck5hbWVfbGVuKQoreworICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworCisgICAgaWYgKHNubXBUYXJnZXRBZGRyTmFtZV9sZW4gPiBzaXplb2YoZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHRsc3RtQWRkclRhYmxlX2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3JvdygpOworICAgIGlmICghcm93KSB7CisgICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByb3ctPmRhdGEgPSBlbnRyeTsKKworICAgIERFQlVHSUYoInRsc3RtQWRkclRhYmxlOmVudHJ5OmNyZWF0ZSIpIHsKKyAgICAgICAgY2hhciBuYW1lW3NpemVvZihlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lKSsxXTsKKyAgICAgICAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBzbm1wVGFyZ2V0QWRkck5hbWUpOworICAgICAgICBERUJVR01TR1QoKCJ0bHN0bUFkZHJUYWJsZTplbnRyeTpjcmVhdGUiLCAiZW50cnkgJXMgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICAgICAgbmFtZSwgZW50cnksIHJvdykpOworICAgIH0KKworICAgIC8qCisgICAgICogcG9wdWxhdGUgaW5kZXgKKyAgICAgKi8KKyAgICBtZW1jcHkoZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSwgc25tcFRhcmdldEFkZHJOYW1lLAorICAgICAgICAgICBzbm1wVGFyZ2V0QWRkck5hbWVfbGVuKTsKKyAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lX2xlbiA9IHNubXBUYXJnZXRBZGRyTmFtZV9sZW47CisgICAgbmV0c25tcF90ZGF0YV9yb3dfYWRkX2luZGV4KHJvdywgQVNOX1BSSVZfSU1QTElFRF9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRBZGRyTmFtZV9sZW4pOworCisgICAgLyoKKyAgICAgKiBkZWZhdWx0cworICAgICAqLworICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludFswXSA9ICdcMCc7CisgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9IDA7CisgICAgZW50cnktPmhhc2hUeXBlID0gMDsKKyAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlbMF0gPSAnXDAnOworICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPSAwOworICAgIGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9IFNUX05PTlZPTEFUSUxFOworICAgIGVudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKworICAgIGlmICh0YWJsZV9kYXRhKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpyb3c6aW5zZXJ0IiwgInJvdyAlcFxuIixyb3cpKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlX2RhdGEsIHJvdyk7CisgICAgfQorICAgIHJldHVybiByb3c7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSB1bmRvIHJlc291cmNlcyAKKyAqLworc3RhdGljIHRsc3RtQWRkclRhYmxlX3VuZG8gKgorX2FsbG9jVW5kbyh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqIGVudHJ5KQoreworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnktPnVuZG8gPSBTTk1QX01BTExPQ19UWVBFREVGKHRsc3RtQWRkclRhYmxlX3VuZG8pOworICAgIGlmICghZW50cnktPnVuZG8pCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAtMTsgICAgLyogZG9uJ3Qga25vdyAqLworCisgICAgcmV0dXJuIGVudHJ5LT51bmRvOworfQorCisvKgorICogZnJlZSB1bmRvIHJlc291cmNlcyAKKyAqLworc3RhdGljIHZvaWQKK19mcmVlVW5kbyh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqIGVudHJ5KQoreworICAgIGlmICghZW50cnkgfHwgIWVudHJ5LT51bmRvKQorICAgICAgICByZXR1cm47CisKKyAgICBTTk1QX0ZSRUUoZW50cnktPnVuZG8pOworfQorCisvKgorICogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlIAorICovCit2b2lkCit0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGVfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICogcm93KQoreworICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIGlmICghcm93KQorICAgICAgICByZXR1cm47ICAgICAgICAgICAgICAgICAvKiBOb3RoaW5nIHRvIHJlbW92ZSAqLworCisgICAgZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikgcm93LT5kYXRhOworCisgICAgaWYgKHRhYmxlX2RhdGEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOnJvdzpyZW1vdmUiLCAicm93ICVwXG4iLHJvdykpOworICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3Jvdyh0YWJsZV9kYXRhLCByb3cpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3Jvdyhyb3cpOworCisgICAgREVCVUdJRigidGxzdG1BZGRyVGFibGU6ZW50cnk6ZGVsZXRlIikgeworICAgICAgICBjaGFyIG5hbWVbc2l6ZW9mKGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUpKzFdOworICAgICAgICBzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcyIsIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUpOworICAgICAgICBERUJVR01TR1QoKCJ0bHN0bUFkZHJUYWJsZTplbnRyeTpkZWxldGUiLCAiZW50cnkgJXMgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICAgICAgbmFtZSwgZW50cnksIHJvdykpOworICAgIH0KKyAgICBpZiAoZW50cnkgJiYgZW50cnktPnVuZG8pCisgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKK30KKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBQRVJTSVNURU5DRQorICoKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgdGxzdG1BZGRyVGFibGUgdGFibGUgKi8KK3N0YXRpYyBpbnQKK3Rsc3RtQWRkclRhYmxlX2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3RkYXRhICAqdGFibGVfZGF0YTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqdGFibGVfcm93OworICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICp0YWJsZV9lbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgbW9kZSAlcyAoJWQpIHJlcXVlc3RcbiIsCisgICAgICAgICAgICAgICAgc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiYWdlbnRfbW9kZSIsIHJlcWluZm8tPm1vZGUpLAorICAgICAgICAgICAgICAgIHJlcWluZm8tPm1vZGUpKTsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgR0VUICMjIyMjCisgICAgICoKKyAgICAgKiAgIFJlYWQtc3VwcG9ydCAoYWxzbyBjb3ZlcnMgR2V0TmV4dCByZXF1ZXN0cykKKyAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVDoKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB1X2NoYXIgYmluWzQyXSwgKnB0ciA9IGJpbjsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGJpbiksIG9mZnNldCA9IDE7CisgICAgICAgICAgICAgICAgaW50ICAgIHJjOworCisgICAgICAgICAgICAgICAgaWYgKCh0YWJsZV9lbnRyeS0+aGFzaFR5cGUgPT0gMCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPT0wKSkKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgYmluWzBdID0gdGFibGVfZW50cnktPmhhc2hUeXBlOworICAgICAgICAgICAgICAgICAgICByYyA9IG5ldHNubXBfaGV4X3RvX2JpbmFyeSgKKyAgICAgICAgICAgICAgICAgICAgICAgICZwdHIsICZsZW4sICZvZmZzZXQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsIE5VTEwpOworICAgICAgICAgICAgICAgICAgICBpZiAoMSAhPSByYykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluLCBvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWToKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbik7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9HRVQgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CisgICAgICAgICAqLworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFU0VSVkUxICMjIyMjCisgICAgICoKKyAgICAgKiAgIEluIFJFU0VSVkUxIHdlIGFyZSBqdXN0IGNoZWNraW5nIGJhc2ljIEFTTi4xIHNpemUvdHlwZSByZXN0cmljdGlvbnMuCisgICAgICogWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueSBvZiB0aGlzIGNvZGUuIERvbid0IGNoYW5nZSBhbnkKKyAgICAgKiBvZiB0aGUgY29sdW1uIHZhbHVlcyBoZXJlLiBTYXZlIHRoYXQgZm9yIHRoZSBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoZSBuZXh0IHBoYXNlIGlzIFJFU0VSVkUyIG9yIEZSRUUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKChOVUxMICE9IHRhYmxlX2VudHJ5KSAmJgorICAgICAgICAgICAgICAgIChTVF9SRUFET05MWSA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUpKSB7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIC8qKiBjaGVjayBsZW4vYWxnb3JpdGhtIE1JQiByZXF1aXJlbWVudHMgKi8KKyAgICAgICAgICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2VydF9jaGVja192Yl9maW5nZXJwcmludChyZXF1ZXN0LT5yZXF1ZXN0dmIpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWToKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfc3RvcmFnZXR5cGUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/CisgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlIDogU1RfTk9ORSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8KKyAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzIDogUlNfTk9ORVhJU1RFTlQpLAorICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8KKyAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgOiBTVF9OT05FKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9SRVNFUlZFMSAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgUkVTRVJWRTIgIyMjIyMKKyAgICAgKgorICAgICAqICAgUkVTRVJWRTIgaXMgZm9yIGNoZWNraW5nIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGZyb20gdGhlIE1JQi4KKyAgICAgKiBTaW5jZSB0aGVzZSByZXN0cmljdGlvbnMgYXJlIG9mdGVuIGluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgb2JqZWN0LAorICAgICAqIG1pYjJjIGNhbid0IGdlbmVyYXRlIGNvZGUuIEl0J3MgcG9zc2libGUgdGhhdCB5b3UgbmVlZCB0byBhZGQKKyAgICAgKiBhZGRpdGlvbmFsIGNoZWNrcyBoZXJlLiBIb3dldmVyLCBkb24ndCBjaGFuZ2UgYW55IG9mIHRoZSBjb2x1bW4KKyAgICAgKiB2YWx1ZXMgaGVyZS4gU2F2ZSB0aGF0IGZvciB0aGUgQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGUgbmV4dCBwaGFzZSBpcyBBQ1RJT04gb3IgRlJFRS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBpZiBubyB0YWJsZV9yb3csIGNyZWF0ZSBvbmUKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeSkgeworICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IHRsc3RtQWRkclRhYmxlX2NyZWF0ZUVudHJ5CisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9kYXRhLCAoY2hhciopdGFibGVfaW5mby0+aW5kZXhlcy0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIGlmICghdGFibGVfcm93KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IHRhYmxlX3Jvdy0+ZGF0YTsKKyAgICAgICAgICAgICAgICBfYWxsb2NVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgICAgIHRsc3RtQWRkclRhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSA9IEZBVEVfTkVXTFlfQ1JFQVRFRDsKKyAgICAgICAgICAgICAgICAvKiogYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICAgICAgbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93KHJlcXVlc3QsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKiBhbGxvY2F0ZSB1bmRvIHN0cnVjdHVyZSwgaWYgbmVlZGVkICovCisgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgX2FsbG9jVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKiBkb24ndCBhbGxvdyBtdWx0aXBsZSBzZXRzIG9mIHNhbWUgY29sdW1uICovCisgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPnJlcVt0YWJsZV9pbmZvLT5jb2xudW1dKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgidGxzdG1BZGRyVGFibGU6cmVzZXJ2ZTIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIHNldHMgdG8gY29sICVkIGluIHJlcXVlc3RcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5jb2xudW0pKTsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnJlcVt0YWJsZV9pbmZvLT5jb2xudW1dID0gcmVxdWVzdDsKKworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICAvKiogbWFrZSBzdXJlIHJvd3N0YXR1cyBpcyB1c2VkIHRvIGNyZWF0ZSByb3dzICovCisgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgaWYgKCh0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSAhPSBGQVRFX05FV0xZX0NSRUFURUQpIHx8CisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTXSkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVE5BTUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAvIGNyZWF0aW9uICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIG5vIGVycm9yICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTIgKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBGUkVFICMjIyMjCisgICAgICoKKyAgICAgKiAgIEZSRUUgaXMgZm9yIGNsZWFuaW5nIHVwIGFmdGVyIGEgZmFpbGVkIHJlcXVlc3QgKGR1cmluZyBlaXRoZXIKKyAgICAgKiBSRVNFUlZFMSBvciBSRVNFUlZFMikuIFNvIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIG5lZWQgdG8gYmUKKyAgICAgKiByZWxlYXNlZC4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgIC8qCisgICAgICAgICAqIHJlbGVhc2UgdW5kbyByZXNvdXJjZXMsICByZW1vdmUgYW55IG5ld2x5IGNyZWF0ZWQgcm93cworICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSAgPSAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPQorICAgICAgICAgICAgICAgICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKSB0YWJsZV9yb3cgPyB0YWJsZV9yb3ctPgorICAgICAgICAgICAgICAgIGRhdGEgOiBOVUxMOworCisgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5IHx8ICF0YWJsZV9lbnRyeS0+dW5kbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KHJlcXVlc3QsIHRhYmxlX3Jvdyk7CisKKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gdGFibGVfZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfRlJFRSAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBQ1RJT04gIyMjIyMKKyAgICAgKgorICAgICAqICAgSW4gdGhlIEFDVElPTiBwaGFzZSwgd2UgcGVyZm9ybSBhbnkgc2V0cyB0aGF0IGNhbiBiZSB1bmRvbmUuCisgICAgICogKFNhdmUgYW55dGhpbmcgdGhhdCBjYW4ndCBiZSB1bmRvbmUgZm9yIHRoZSBDT01NSVQgcGhhc2UuKQorICAgICAqCisgICAgICogICBBZnRlciBpbmRpdmlkdWFsIGNvbHVtbnMgaGF2ZSBiZWVuIGRvbmUsIHlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGUKKyAgICAgKiByb3cgYXMgYSB3aG9sZSBpcyBjb25zaXN0ZW50LgorICAgICAqCisgICAgICogVGhlIG5leHQgcGhhc2UgaXMgVU5ETyBvciBDT01NSVQuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdV9jaGFyICp0bXAgPSAodV9jaGFyKil0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQ7CisKKyAgICAgICAgICAgICAgICBtZW1jcHkodGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbjsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aGFzaFR5cGUgPSB0YWJsZV9lbnRyeS0+aGFzaFR5cGU7CisKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+aGFzaFR5cGUgPSByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmdbMF07CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgIG1lbXNldCh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9iaW5hcnlfdG9faGV4KCZ0bXAsICZ0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgJnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZ1sxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbiAtIDEpOworICAgICAgICAgICAgICAgIGlmICgwID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4pCisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFk6CisgICAgICAgICAgICAgICAgbWVtY3B5KHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW47CisgICAgICAgICAgICAgICAgbWVtc2V0KHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkpOworICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFkgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGU7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyUm93U3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1czsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgdmFsdWVzIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikgeworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQWxsIGNvbHVtbnMgbm93IGhhdmUgdGhlaXIgZmluYWwgdmFsdWVzIHNldC4gY2hlY2sgdGhlCisgICAgICAgICAgICAgKiBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBlYWNoIHJvdy4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAodGxzdG1BZGRyVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgICAgIHRhYmxlX2luZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgICAgIGlmICh0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCAhPSAtMSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7ICAgLyogYWxyZWFkeSBjaGVja2VkICovCisKKyAgICAgICAgICAgICAgICAvKiogYXNzdW1lIGNvbnNpc3RlbmN5ICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAxOworCisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBwZXIgbWliLCBjYW4ndCBoYXZlIGVtcHR5IGZpbmdlcnByaW50IGFuZCB3aWxkY2FyZCBpZAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICggKDAgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbikgJiYKKyAgICAgICAgICAgICAgICAgICAgICgxID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4pICYmCisgICAgICAgICAgICAgICAgICAgICAoJyonID09IHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eVswXSkgKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZSIsICJmaW5nZXJwcmludCBtdXN0IG5vdCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJiZSBlbXB0eSBmb3Igd2lsZGNhcmQgKCopIGlkZW50aXR5XG4iKSk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKChSU19JU19BQ1RJVkUodGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykpICYmCisgICAgICAgICAgICAgICAgICAgICgoIXRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVNdKSB8fAorICAgICAgICAgICAgICAgICAgICAgKFJTX0lTX0FDVElWRSh0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyUm93U3RhdHVzKSkpKSB7CisgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAqIGNoZWNrIG1pYiByZXN0cmljdGlvbnMgb24gYWN0aXZlIHJvd3MuCisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJGSU5HRVJQUklOVF07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRV07CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsgLyogcGVyIG1pYiAqLworICAgICAgICAgICAgICAgIH0gLyogYWN0aXZlIHJvdyAqLworICAgICAgICAgICAgICAgIGVsc2UgaWYgKFJTX0lTX0dPSU5HX0FDVElWRQorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICAvKiogaWYgZ29pbmcgYWN0aXZlLCBpbmNvbnNpc3RlbmN5IGlzIGZhdGFsICovCisgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gdGFibGVfZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gLyogZ29pbmcgYWN0aXZlICovCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoUlNfREVTVFJPWSA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgICAgIC8qKiBjYW4ndCBkZWxldGUgYWN0aXZlIHJvdyAqLworICAgICAgICAgICAgICAgICAgICBpZiAoUlNfSVNfQUNUSVZFKHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJSb3dTdGF0dXMpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTXTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAvKiBkZXN0cm95ICovCisgICAgICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogY29uc2lzdGVuY3kgZm9yIHJlcXVlc3RzICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGlmIG5vIGVycm9yICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfQUNUSU9OICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgVU5ETyAjIyMjIworICAgICAqCisgICAgICogICBVTkRPIGlzIGZvciBjbGVhbmluZyB1cCBhbnkgZmFpbGVkIHJlcXVlc3RzIHRoYXQgd2VudCB0aHJvdWdoIHRoZQorICAgICAqIEFDVElPTiBwaGFzZS4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX1VORE86CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0KKyAgICAgICAgICAgICAgICAodGxzdG1BZGRyVGFibGVfZW50cnkgKikgdGFibGVfcm93ID8gdGFibGVfcm93LT4KKyAgICAgICAgICAgICAgICBkYXRhIDogTlVMTDsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZXN0b3JlIHRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50IHZhbHVlIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oYXNoVHlwZSA9IHRhYmxlX2VudHJ5LT51bmRvLT5oYXNoVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFk6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZXN0b3JlIHRsc3RtQWRkclNlcnZlcklkZW50aXR5IHZhbHVlIAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG1lbWNweSh0YWJsZV9lbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSkpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPQorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSSURFTlRJVFkgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIHJlc3RvcmUgdGxzdG1BZGRyU3RvcmFnZVR5cGUgdmFsdWUgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclN0b3JhZ2VUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1BRERSU1RPUkFHRVRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiByZXN0b3JlIHRsc3RtQWRkclJvd1N0YXR1cyB2YWx1ZSAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnRsc3RtQWRkclJvd1N0YXR1czsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUyAqLworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbGVhc2UgdW5kbyBkYXRhCisgICAgICAgICAqIG9yIHJlbW92ZSBhbnkgbmV3bHkgY3JlYXRlZCByb3dzCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX3JvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9CisgICAgICAgICAgICAgICAgKHRsc3RtQWRkclRhYmxlX2VudHJ5ICopIHRhYmxlX3JvdyA/IHRhYmxlX3Jvdy0+CisgICAgICAgICAgICAgICAgZGF0YSA6IE5VTEw7CisKKyAgICAgICAgICAgIGlmICghdGFibGVfZW50cnkgfHwgIXRhYmxlX2VudHJ5LT51bmRvKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAvKiogZGlzYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cocmVxdWVzdCwgdGFibGVfcm93KTsKKworICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSkKKyAgICAgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX1VORE8gKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09NTUlUICMjIyMjCisgICAgICoKKyAgICAgKiAgIENPTU1JVCBpcyB0aGUgZmluYWwgc3VjY2VzcyBzdGF0ZSwgd2hlbiBhbGwgY2hhbmdlcyBhcmUgZmluYWxpemVkLgorICAgICAqIFRoZXJlIGlzIG5vdCByZWNvdmVyeSBzdGF0ZSBzaG91bGQgc29tZXRoaW5nIGZhaWxlIGhlcmUuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ID0gbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKCF0YWJsZV9lbnRyeSB8fCAhdGFibGVfZW50cnktPnVuZG8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIGlmICgoUlNfTk9UUkVBRFkgPT0gdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykgJiYKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgZWxzZSBpZiAoKFJTX05PVElOU0VSVklDRSA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKSAmJgorICAgICAgICAgICAgICAgICAgICAgKDAgPT0gdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpKQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKworICAgICAgICAgICAgLyoqIHJlbGVhc2UgdW5kbyBkYXRhIGZvciByZXF1ZXN0cyB3aXRoIG5vIHJvd3N0YXR1cyAqLworICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvICYmCisgICAgICAgICAgICAgICAgIXRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVNdICE9IDApIHsKKworICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisKKyAgICAgICAgICAgICAgICAvKiogdXBkYXRlIGFjdGl2ZSBhZGRycyAqLworICAgICAgICAgICAgICAgIGlmICgoMCA9PSB0YWJsZV9lbnRyeS0+YWRkcl9mbGFncykgJiYKKyAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSkKKyAgICAgICAgICAgICAgICAgICAgX2FkZHJzX2FkZCh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKDAgIT0gdGFibGVfZW50cnktPmFkZHJfZmxhZ3MpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPT0gUlNfREVTVFJPWSkpCisgICAgICAgICAgICAgICAgICAgIF9hZGRyc19yZW1vdmUodGFibGVfZW50cnkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cykgeworICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgICAgICAvKiogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNfQUNUSVZFOgorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IFJTX0FDVElWRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgwID09IHRhYmxlX2VudHJ5LT5hZGRyX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9hZGRyc19hZGQodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICAgICAgLyoqIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX05PVElOU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBzaW1wbHkgc2V0IHN0YXR1cyBiYXNlZCBvbiBjb25zaXN0ZW5jeSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IFJTX05PVFJFQURZOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gdGFibGVfZW50cnktPmFkZHJfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2FkZHJzX3JlbW92ZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICBjYXNlIFJTX0RFU1RST1k6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPSB0YWJsZV9lbnRyeS0+YWRkcl9mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYWRkcnNfcmVtb3ZlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhyZXF1ZXN0LCB0YWJsZV9yb3cpOworICAgICAgICAgICAgICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkodGFibGVfZGF0YSwgdGFibGVfcm93KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgLyoqIHJlbGVhc2UgdW5kbyBkYXRhICovCisgICAgICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgIC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJST1dTVEFUVVMgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICAgICAgaWYgKFJTX0FDVElWRSA9PSB0YWJsZV9lbnRyeS0+dGxzdG1BZGRyUm93U3RhdHVzKQorICAgICAgICAgICAgICAgICAgICAgICAgX2FkZHJfdHdlYWtfc3RvcmFnZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoqIHVwZGF0ZSBsYXN0IGNoYW5nZWQgKi8KKyAgICAgICAgX2xhc3RfY2hhbmdlZCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfQ09NTUlUICovCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgKi8KKworICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworc3RhdGljIGludAorX2NvdW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgdmFsOworCisgICAgaWYgKE1PREVfR0VUICE9IHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCBtb2RlIGluIFJPIGhhbmRsZXIiKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBpZiAoKE5VTEwgPT0gX3RhYmxlX2RhdGEpIHx8IChOVUxMID09IF90YWJsZV9kYXRhLT5jb250YWluZXIpKQorICAgICAgICB2YWwgPSAwOworICAgIGVsc2UKKyAgICAgICAgdmFsID0gQ09OVEFJTkVSX1NJWkUoX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7CisKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0dBVUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZ2YWwsIHNpemVvZih2YWwpKTsKKyAgIAorICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCisgICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKKyAgICAKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogaGFuZGxlIGNhY2hlIC8gaW50ZXJhY3Rpb25zIHdpdGggdGxzdG1BZGRyIGNvbnRhaW5lciBpbiBzbm1wbGliCisgKgorICoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCitzdGF0aWMgdm9pZAorX2FkZHJzX2FkZCh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFkZHJzOworICAgIHNubXBUbHN0bUFkZHIgICAgICphZGRyOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTphZGRyczphZGQiLCAibmFtZSAlcywgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZSwgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIGFkZHJzICovCisgICAgYWRkcnMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRycykKKyAgICAgICAgcmV0dXJuOworCisgICAgYWRkciA9IG5ldHNubXBfdGxzdG1BZGRyX2NyZWF0ZShlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRyKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbikKKyAgICAgICAgYWRkci0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50KTsKKyAgICBpZiAoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbikKKyAgICAgICAgYWRkci0+aWRlbnRpdHkgPSBzdHJkdXAoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KTsKKyAgICBhZGRyLT5oYXNoVHlwZSA9IGVudHJ5LT5oYXNoVHlwZTsKKworICAgIGFkZHItPmZsYWdzID0gVExTVE1fQUREUl9GUk9NX01JQjsKKyAgICBpZiAoZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID09IFNUX05PTlZPTEFUSUxFKQorICAgICAgICBhZGRyLT5mbGFncyB8PSBUTFNUTV9BRERSX05PTlZPTEFUSUxFOworCisgICAgaWYgKENPTlRBSU5FUl9JTlNFUlQoYWRkcnMsIGFkZHIpICE9IDApIHsKKyAgICAgICAgbmV0c25tcF90bHN0bUFkZHJfZnJlZShhZGRyKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBpbnNlcnQgbmV3IHRsc3RtIGFkZHIiKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfYWRkcnNfcmVtb3ZlKHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkcnM7CisgICAgc25tcFRsc3RtQWRkciAgICAgIGFkZHI7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmFkZHI6cmVtb3ZlIiwgIm5hbWUgJXMsIGZwICVzXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUsIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSBhZGRycyAqLworICAgIGFkZHJzID0gbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gYWRkcnMpCisgICAgICAgIHJldHVybjsKKworICAgIGFkZHIubmFtZSA9IGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWU7CisgICAgaWYgKENPTlRBSU5FUl9SRU1PVkUoYWRkcnMsICZhZGRyKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgcmVtb3ZlIHRsc3RtIGFkZHIiKTsKKyAgICB9CisgICAgZW50cnktPmFkZHJfZmxhZ3MgPSAwOworfQorCitzdGF0aWMgdm9pZAorX2FkZHJfdHdlYWtfc3RvcmFnZSh0bHN0bUFkZHJUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFkZHJzOworICAgIHNubXBUbHN0bUFkZHIgICAgICphZGRyLCBpbmRleDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6YWRkcjp0d2VhayIsICJuYW1lICVzLCBzdCAlZFxuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldEFkZHJOYW1lLCBlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUpKTsKKworICAgIC8qKiBnZXQgY3VycmVudCBhY3RpdmUgYWRkcnMgKi8KKyAgICBhZGRycyA9IG5ldHNubXBfdGxzdG1BZGRyX2NvbnRhaW5lcigpOworICAgIGlmIChOVUxMID09IGFkZHJzKQorICAgICAgICByZXR1cm47CisKKyAgICBpbmRleC5uYW1lID0gZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZTsKKyAgICBhZGRyID0gQ09OVEFJTkVSX0ZJTkQoYWRkcnMsICZpbmRleCk7CisgICAgaWYgKE5VTEwgPT0gYWRkcikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6YWRkcjp0d2VhayIsICJjb3VsZG4ndCBmaW5kIGFkZHIhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZW50cnktPnRsc3RtQWRkclN0b3JhZ2VUeXBlID09IFNUX05PTlZPTEFUSUxFKQorICAgICAgICBhZGRyLT5mbGFncyB8PSBUTFNUTV9BRERSX05PTlZPTEFUSUxFOworICAgIGVsc2UKKyAgICAgICAgYWRkci0+ZmxhZ3MgJj0gflRMU1RNX0FERFJfTk9OVk9MQVRJTEU7Cit9CisKK3N0YXRpYyBuZXRzbm1wX3RkYXRhX3JvdyAqCitfZW50cnlfZnJvbV9hZGRyKHNubXBUbHN0bUFkZHIgICphZGRyKQoreworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgcm93ID0gdGxzdG1BZGRyVGFibGVfY3JlYXRlRW50cnkoTlVMTCwgYWRkci0+bmFtZSwgc3RybGVuKGFkZHItPm5hbWUpKTsKKyAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNhbiBjcmVhdGUgdGxzdG1BZGRyIHJvdyBlbnRyeVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgIGlmIChhZGRyLT5mbGFncyAmIFRMU1RNX0FERFJfRlJPTV9DT05GSUcpCisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSA9IFNUX1BFUk1BTkVOVDsKKyAgICBlbHNlIGlmICghIChhZGRyLT5mbGFncyAmIFRMU1RNX0FERFJfTk9OVk9MQVRJTEUpKQorICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPSBTVF9WT0xBVElMRTsKKworICAgIGVudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPSBSU19BQ1RJVkU7CisKKyAgICBpZiAoYWRkci0+ZmluZ2VycHJpbnQpIHsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9IHN0cmxlbihhZGRyLT5maW5nZXJwcmludCk7CisgICAgICAgIGlmIChlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRfbGVuID4KKyAgICAgICAgICAgIHNpemVvZihlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQpKQorICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkgLSAxOworICAgICAgICBtZW1jcHkoZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LCBhZGRyLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4pOworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnRbc2l6ZW9mKGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCkgLSAxXSA9IDA7CisgICAgfQorCisgICAgaWYgKGFkZHItPmlkZW50aXR5KSB7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPSBzdHJsZW4oYWRkci0+aWRlbnRpdHkpOworICAgICAgICBpZiAoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5X2xlbiA+CisgICAgICAgICAgICBzaXplb2YoZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5KSkKKyAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eV9sZW4gPQorICAgICAgICAgICAgICAgIHNpemVvZihlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpIC0gMTsKKyAgICAgICAgbWVtY3B5KGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSwgYWRkci0+aWRlbnRpdHksCisgICAgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuKTsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlcklkZW50aXR5W3NpemVvZihlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHkpIC0gMV0gPSAwOworICAgIH0KKworICAgIGVudHJ5LT5oYXNoVHlwZSA9IGFkZHItPmhhc2hUeXBlOworICAgIGVudHJ5LT5hZGRyX2ZsYWdzID0gYWRkci0+ZmxhZ3M7CisKKyAgICByZXR1cm4gcm93OworfQorCitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmFkZHJzOworICAgIG5ldHNubXBfaXRlcmF0b3IgICppdHI7CisgICAgc25tcFRsc3RtQWRkciAgICAgKmFkZHI7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBpbnQgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmxvYWQiLCAiY2FsbGVkLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSByb3dzICovCisgICAgYWRkcnMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRycykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6bG9hZCIsICJ0bHN0bUFkZHIgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoYWRkcnMpKSk7CisgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKGFkZHJzKTsKKyAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmxvYWQiLAorICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgaXRlcmF0b3JcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogaW5zZXJ0IHJvd3MgZm9yIGFjdGl2ZSBhZGRycyBpbnRvIHRibCBjb250YWluZXIKKyAgICAgKi8KKyAgICBhZGRyID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICBmb3IoIDsgYWRkcjsgYWRkciA9IElURVJBVE9SX05FWFQoaXRyKSkgeworCisgICAgICAgIHJvdyA9IF9lbnRyeV9mcm9tX2FkZHIoYWRkcik7CisgICAgICAgIGlmIChOVUxMID09IHJvdykgeworICAgICAgICAgICAgcmMgPS0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobmV0c25tcF90ZGF0YV9hZGRfcm93KHRhYmxlLCByb3cpICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgdGxzdG1BZGRyVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICAgICAgICAgIHJjID0gLTE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0cik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6Y2FjaGU6bG9hZCIsICJkb25lLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorX2NhY2hlX2ZyZWUobmV0c25tcF9jYWNoZSAqY2FjaGUsIG5ldHNubXBfdGRhdGEgKnRhYmxlKQoreworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICp0YmxfaXRyOworICAgIHRsc3RtQWRkclRhYmxlX2VudHJ5ICAgKmVudHJ5OworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmNhY2hlOmZyZWUiLCAiY2FsbGVkLCAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRSh0YWJsZS0+Y29udGFpbmVyKSkpOworCisgICAgdGJsX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUih0YWJsZS0+Y29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSB0YmxfaXRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpmcmVlIiwKKyAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IGVudHJ5IGl0ZXJhdG9yXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByb3cgPSBJVEVSQVRPUl9GSVJTVCh0YmxfaXRyKTsKKyAgICBmb3IoIDsgcm93OyByb3cgPSBJVEVSQVRPUl9ORVhUKHRibF9pdHIpKSB7CisgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbW92ZSBhbGwgYWN0aXZlIHJvd3MgKHRoZXkgYXJlIGluIHRoZSBhZGRycyBjb250YWluZXIga2VwdAorICAgICAgICAgKiBieSB0aGUgbGlicmFyeSkuIEtlZXAgaW5hY3RpdmUgb25lcyBmb3IgbmV4dCB0aW1lLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGVudHJ5LT50bHN0bUFkZHJSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB7CisgICAgICAgICAgICB0bHN0bUFkZHJUYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgICAgICAgICAgSVRFUkFUT1JfUkVNT1ZFKHRibF9pdHIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRSh0YmxfaXRyKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpjYWNoZTpmcmVlIiwgImRvbmUsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFBFUlNJU1RFTkNFCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgaW50ICBfdGxzdG1BZGRyVGFibGVfc2F2ZV9yb3dzKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnNlcnZlcmFyZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CitzdGF0aWMgdm9pZCBfdGxzdG1BZGRyVGFibGVfcm93X3Jlc3RvcmVfbWliKGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1Zik7CitzdGF0aWMgY29uc3QgY2hhciBtaWJfdG9rZW5bXSA9ICJzbm1wVGxzdG1BZGRyRW50cnkiOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqX2luaXRfcGVyc2lzdGVuY2Ugc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRhYmxlCisgKiBpbml0IHJvdXRpbmUuCisgKgorICogSWYgeW91ciB0YWJsZSBkZXBlbmRzIG9uIHJvd3MgaW4gYW5vdGhlciB0YWJsZSwKKyAqIHlvdSBzaG91bGQgcmVnaXN0ZXIgeW91ciBjYWxsYmFjayBhZnRlciB0aGUgb3RoZXIgdGFibGUsCisgKiB3aGljaCBzaG91bGQgZW5zdXJlIHRoZSByb3dzIG9uIHdoaWNoIHlvdSBkZXBlbmQgYXJlIHNhdmVkCisgKiAoYW5kIHJlLWNyZWF0ZWQpIGJlZm9yZSB0aGUgZGVwZW5kZW50IHJvd3MuCisgKi8KK3N0YXRpYyB2b2lkCitfdGxzdG1BZGRyX2luaXRfcGVyc2lzdGVuY2Uodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisKKyAgICBpZiAoTlVMTCA9PSBfdGFibGVfZGF0YSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gdGFibGUgZGF0YSBmb3IgdGxzdG1BZGRyIHBlcnNpc3RlbmNlIVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCBtaWJfdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3Rsc3RtQWRkclRhYmxlX3Jvd19yZXN0b3JlX21pYiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICByYyA9IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90bHN0bUFkZHJUYWJsZV9zYXZlX3Jvd3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90YWJsZV9kYXRhLT5jb250YWluZXIpOworCisgICAgaWYgKHJjICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWdpc3RlcmluZyBmb3IgU1RPUkVfREFUQSBjYWxsYmFjayAiCisgICAgICAgICAgICAgICAgICJpbiBfdGxzdG1BZGRyVGFibGVfaW5pdF9wZXJzaXN0ZW5jZVxuIik7Cit9CisKK3N0YXRpYyBpbnQKK19zYXZlX2VudHJ5KHRsc3RtQWRkclRhYmxlX2VudHJ5ICplbnRyeSwgdm9pZCAqdHlwZSkKK3sKKyAgICBjaGFyICAgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmhhc2hUeXBlOworCisgICAgaGFzaFR5cGUgPSBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgZW50cnktPmhhc2hUeXBlKTsKKyAgICBpZiAoTlVMTCA9PSBoYXNoVHlwZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2tpcHBpbmcgZW50cnkgdW5rbm93biBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIGVudHJ5LT5oYXNoVHlwZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBidWlsZCB0aGUgbGluZQorICAgICAqLworICAgIG5ldHNubXBfYXNzZXJ0KDAgPT0gZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZVsKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRBZGRyTmFtZV9sZW5dKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgwID09IGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludFsKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50X2xlbl0pOworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlcyAtLSVzICVzICVzICVkIiwgbWliX3Rva2VuLAorICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0QWRkck5hbWUsIGhhc2hUeXBlLAorICAgICAgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCwKKyAgICAgICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgICAgICAgZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyk7CisgICAgYnVmW3NpemVvZihidWYpLTFdID0gMDsKKworICAgIHJlYWRfY29uZmlnX3N0b3JlKHR5cGUsIGJ1Zik7CisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOnJvdzpzYXZlIiwgInNhdmluZyBlbnRyeSAnJXMnXG4iLCBidWYpKTsKKworICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCitzdGF0aWMgaW50Citfc2F2ZV9hZGRycyhzbm1wVGxzdG1BZGRyICphZGRycywgdm9pZCAqYXBwX3R5cGUpCit7CisgICAgY2hhciBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqaGFzaFR5cGU7CisKKyAgICBpZiAoTlVMTCA9PSBhZGRycykKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGhhc2hUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIGFkZHJzLT5oYXNoVHlwZSk7CisgICAgaWYgKE5VTEwgPT0gaGFzaFR5cGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInNraXBwaW5nIGVudHJ5IHVua25vd24gaGFzaCB0eXBlICVkXG4iLAorICAgICAgICAgICAgICAgICBhZGRycy0+aGFzaFR5cGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKyAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMgJXMgLS0lcyAlcyAlcyAlZCIsIG1pYl90b2tlbiwgYWRkcnMtPm5hbWUsCisgICAgICAgICAgICAgaGFzaFR5cGUsIGFkZHJzLT5maW5nZXJwcmludCwgYWRkcnMtPmlkZW50aXR5LCBSU19BQ1RJVkUpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQWRkclRhYmxlOmFkZHJzOnNhdmUiLCAic2F2aW5nIGFkZHJzICclcydcbiIsCisgICAgICAgICAgICAgICAgYnVmKSk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoYXBwX3R5cGUsIGJ1Zik7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorX3Rsc3RtQWRkclRhYmxlX3NhdmVfcm93cyhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywKKyAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCit7CisgICAgY2hhciAgICAgICAgICAgIHNlcFtdID0KKyAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIjsKKyAgICBjaGFyICAgICAgICAgICAgYnVmW10gPSAiI1xuIiAiIyB0bHN0bUFkZHIgcGVyc2lzdGVudCBkYXRhXG4iICIjIjsKKyAgICBjaGFyICAgICAgICAgICAqdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbWliX2FkZHJzID0gKG5ldHNubXBfY29udGFpbmVyICopIGNsaWVudGFyZzsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWN0aXZlX2FkZHJzID0gbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKCk7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKnRibF9pdHIsICphZGRyc19pdHIgPSBOVUxMOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgc25tcFRsc3RtQWRkciAgICAgKmFkZHI7CisgICAgdGxzdG1BZGRyVGFibGVfZW50cnkgKmVudHJ5OworCisgICAgaWYgKCgoTlVMTCA9PSBtaWJfYWRkcnMpIHx8IChDT05UQUlORVJfU0laRShtaWJfYWRkcnMpID09IDApKSAmJgorICAgICAgICAoKE5VTEwgPT0gYWN0aXZlX2FkZHJzKSB8fCAoQ09OVEFJTkVSX1NJWkUoYWN0aXZlX2FkZHJzKSA9PSAwKSkpCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIGJ1Zik7CisKKyAgICAvKgorICAgICAqIHNhdmUgYWN0aXZlIHJvd3MgZnJvbSBhZGRyIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGFjdGl2ZV9hZGRycykgeworICAgICAgICBhZGRyc19pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoYWN0aXZlX2FkZHJzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gYWRkcnNfaXRyKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyVGFibGU6c2F2ZSIsICJjYW50IGdldCBhZGRycyBpdGVyYXRvclxuIikpOworICAgICAgICAgICAgYWRkciA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYWRkciA9IElURVJBVE9SX0ZJUlNUKGFkZHJzX2l0cik7CisKKyAgICAgICAgZm9yKCA7IGFkZHI7IGFkZHIgPSBJVEVSQVRPUl9ORVhUKGFkZHJzX2l0cikpIHsKKyAgICAgICAgICAgIC8qKiBkb24ndCBzdG9yZSBjb25maWcgcm93cyAqLworICAgICAgICAgICAgaWYgKChhZGRyLT5mbGFncyAmIFRMU1RNX0FERFJfRlJPTV9DT05GSUcpIHx8CisgICAgICAgICAgICAgICAgISAoYWRkci0+ZmxhZ3MgJiBUTFNUTV9BRERSX05PTlZPTEFUSUxFKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIF9zYXZlX2FkZHJzKGFkZHIsIHR5cGUpOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoYWRkcnNfaXRyKTsKKworICAgIC8qCisgICAgICogc2F2ZSBpbmFjdGl2ZSByb3dzIGZyb20gbWliCisgICAgICovCisgICAgdGJsX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihtaWJfYWRkcnMpOworICAgIGlmIChOVUxMID09IHRibF9pdHIpCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUFkZHJUYWJsZTpzYXZlIiwgImNhbnQgZ2V0IHRhYmxlIGl0ZXJhdG9yXG4iKSk7CisgICAgZWxzZSB7CisgICAgICAgIHJvdyA9IElURVJBVE9SX0ZJUlNUKHRibF9pdHIpOworICAgICAgICBmb3IoIDsgcm93OyByb3cgPSBJVEVSQVRPUl9ORVhUKHRibF9pdHIpKSB7CisgICAgICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNraXAgYWxsIGFjdGl2ZSByb3dzIChzaG91bGQgYmUgaW4gYWN0aXZlX2FkZHJzIGFuZCB0aHVzIHNhdmVkCisgICAgICAgICAgICAgKiBhYm92ZSkgYW5kIHZvbGF0aWxlIHJvd3MuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICgoZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9PSBSU19BQ1RJVkUpIHx8CisgICAgICAgICAgICAgICAgKGVudHJ5LT50bHN0bUFkZHJTdG9yYWdlVHlwZSAhPSBTVF9OT05WT0xBVElMRSkpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIF9zYXZlX2VudHJ5KGVudHJ5LCB0eXBlKTsKKyAgICAgICAgfQorICAgICAgICBJVEVSQVRPUl9SRUxFQVNFKHRibF9pdHIpOworICAgIH0KKworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgIlxuIik7CisKKyAgICAvKgorICAgICAqIG5ldmVyIGZhaWxzIAorICAgICAqLworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkCitfdGxzdG1BZGRyVGFibGVfcm93X3Jlc3RvcmVfbWliKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpidWYpCit7CisgICAgY2hhciAgICAgICAgICAgICAgICAgICBuYW1lW1NOTVBBRE1JTkxFTkdUSCArIDFdLCBpZFtTTk1QQURNSU5MRU5HVEggKyAxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50W1NOTVBUTFNGSU5HRVJQUklOVF9NQVhfTEVOICsgMV07CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICBuYW1lX2xlbiA9IHNpemVvZihuYW1lKSwgaWRfbGVuID0gc2l6ZW9mKGlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwX2xlbiA9IHNpemVvZihmaW5nZXJwcmludCk7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICBoYXNoVHlwZSwgcm93U3RhdHVzOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7CisKKyAgICAvKiogbmVlZCBzb21ld2hlcmUgdG8gc2F2ZSByb3dzICovCisgICAgbmV0c25tcF9hc3NlcnQoX3RhYmxlX2RhdGEgJiYgX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7IAorCisgICAgcmMgPSBuZXRzbm1wX3Rsc3RtQWRkcl9yZXN0b3JlX2NvbW1vbigmYnVmLCBuYW1lLCAmbmFtZV9sZW4sIGlkLCAmaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsICZmcF9sZW4sICZoYXNoVHlwZSk7CisgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKE5VTEwgPT0gYnVmKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImluY29tcGxldGUgbGluZSIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJvd1N0YXR1cyA9IGF0b2koYnVmKTsKKworICAgIC8qCisgICAgICogaWYgcm93IGlzIGFjdGl2ZSwgYWRkIGl0IHRvIHRoZSBhZGRycyBjb250YWluZXIgc28gaXQgaXMgYXZhaWxhYmxlCisgICAgICogZm9yIHVzZS4gRG8gbm90IGFkZCBpdCB0byB0aGUgdGFibGUsIHNpbmNlIGl0IHdpbGwgYmUgYWRkZWQKKyAgICAgKiBkdXJpbmcgY2FjaGVfbG9hZC4KKyAgICAgKi8KKyAgICBpZiAoUlNfQUNUSVZFID09IHJvd1N0YXR1cykgeworICAgICAgICBzbm1wVGxzdG1BZGRyICphZGRyOworCisgICAgICAgIGFkZHIgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jcmVhdGUobmFtZSk7CisgICAgICAgIGlmICghYWRkcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZnBfbGVuKQorICAgICAgICAgICAgYWRkci0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoZmluZ2VycHJpbnQpOworICAgICAgICBpZiAoaWRfbGVuKQorICAgICAgICAgICAgYWRkci0+aWRlbnRpdHkgPSBzdHJkdXAoaWQpOworICAgICAgICBhZGRyLT5oYXNoVHlwZSA9IGhhc2hUeXBlOworICAgICAgICBhZGRyLT5mbGFncyA9IFRMU1RNX0FERFJfRlJPTV9NSUIgfCBUTFNUTV9BRERSX05PTlZPTEFUSUxFOworCisgICAgICAgIG5ldHNubXBfdGxzdG1BZGRyX2FkZChhZGRyKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICAgICAqcm93OworICAgICAgICB0bHN0bUFkZHJUYWJsZV9lbnRyeSAgKmVudHJ5OworCisgICAgICAgIHJvdyA9IHRsc3RtQWRkclRhYmxlX2NyZWF0ZUVudHJ5KF90YWJsZV9kYXRhLCBuYW1lLCBuYW1lX2xlbik7CisgICAgICAgIGlmICghcm93KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworICAgICAgICAKKyAgICAgICAgZW50cnktPmhhc2hUeXBlID0gaGFzaFR5cGU7CisgICAgICAgIG1lbWNweShlbnRyeS0+dGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsZmluZ2VycHJpbnQsIGZwX2xlbik7CisgICAgICAgIGVudHJ5LT50bHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludF9sZW4gPSBmcF9sZW47CisgICAgICAgIG1lbWNweShlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHksIGlkLCBpZF9sZW4pOworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU2VydmVySWRlbnRpdHlfbGVuID0gaWRfbGVuOworICAgICAgICBlbnRyeS0+dGxzdG1BZGRyU3RvcmFnZVR5cGUgPSBTVF9OT05WT0xBVElMRTsKKyAgICAgICAgZW50cnktPnRsc3RtQWRkclJvd1N0YXR1cyA9IHJvd1N0YXR1czsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzBiODBhCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUFkZHJUYWJsZS9zbm1wVGxzdG1BZGRyVGFibGUuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICA6IG1pYjJjLnRhYmxlX2RhdGEuY29uZiAxNTk5OSAyMDA3LTAzLTI1IDIyOjMyOjAyWiBkdHMxMiAkCisgKi8KKyNpZm5kZWYgU05NUFRMU1RNQUREUlRBQkxFX0gKKyNkZWZpbmUgU05NUFRMU1RNQUREUlRBQkxFX0gKKworI2RlZmluZSBTTk1QX1RMU19UTV9BRERSX0NPVU5UICAgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDcKKyNkZWZpbmUgU05NUF9UTFNfVE1fQUREUl9DSEFOR0VEICBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCA4CisjZGVmaW5lIFNOTVBfVExTX1RNX0FERFJfVEFCTEUgICAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgOQorCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVGxzdG1BZGRyVGFibGUodm9pZCk7CisKKy8qCisgKiBpbmRleCBkZWZpbml0aW9ucyBmb3IgdGFibGUgdGxzdG1BZGRyVGFibGUgCisgKi8KKyNkZWZpbmUgU05NUFRBUkdFVEFERFJOQU1FX01BWF9TSVpFICAyNTUKKworLyoKKyAqIGNvbHVtbiBudW1iZXIgZGVmaW5pdGlvbnMgZm9yIHRhYmxlIHRsc3RtQWRkclRhYmxlIAorICovCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1BRERSU0VSVkVSRklOR0VSUFJJTlQgICAgICAgMQorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUklERU5USVRZICAgICAgICAgIDIKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTUFERFJTVE9SQUdFVFlQRSAgICAgICAgICAgICAzCisjZGVmaW5lIENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTICAgICAgICAgICAgICAgNAorCisjZGVmaW5lIFRMU1RNQUREUlRBQkxFX01JTl9DT0xVTU4gICAgICAgICBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UCisjZGVmaW5lIFRMU1RNQUREUlRBQkxFX01BWF9DT0xVTU4gICAgICAgICBDT0xVTU5fU05NUFRMU1RNQUREUlJPV1NUQVRVUworCisjZGVmaW5lIFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UX01BWF9TSVpFICAgICAgMjU1CisjZGVmaW5lIFRMU1RNQUREUlNFUlZFUklERU5USVRZX01BWF9TSVpFICAgICAgICAgMjU1CisKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVExTVE1BRERSVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYmZhMGVjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIFNOTVBUTFNUTUNFUlRUT1RTTlRBQkxFX0gKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOVEFCTEVfSAorCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUpCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRMU1RNQ0VSVFRPVFNOVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NGQxYWZiCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmMKQEAgLTAsMCArMSwxMzc3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlICJ0bHN0bS1taWIuaCIKKyNpbmNsdWRlICJzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oIgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNlcnRfZmluZ2VycHJpbnRzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZGVsZXRlX3RhYmxlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfZXh0cmFjdF90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX3JlbW92ZV9yb3cpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0bHNfZmluZ2VycHJpbnRfYnVpbGQpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfc3RvcmFnZXR5cGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGFfaW5zZXJ0X3JvdykKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKworLyoqIFhYWCAtIG1vdmUgdGhlc2UgdG8gdGFibGVfZGF0YSBoZWFkZXI/ICovCisjZGVmaW5lIEZBVEVfTkVXTFlfQ1JFQVRFRCAgICAxCisjZGVmaW5lIEZBVEVfTk9fQ0hBTkdFICAgICAgICAwCisjZGVmaW5lIEZBVEVfREVMRVRFX01FICAgICAgICAtMQorCisjZGVmaW5lIE1BUF9NSUJfQ09ORklHX1RPS0VOICJzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSIKKworZXh0ZXJuIG5ldHNubXBfY2VydF9tYXAgKm5ldHNubXBfY2VydFRvVFNOX3BhcnNlX2NvbW1vbihjaGFyICoqbGluZSk7CisKKworICAgIC8qCisgICAgICogc3RydWN0dXJlIGZvciB1bmRvIHN0b3JhZ2UgYW5kIG90aGVyIHZhcnMgZm9yIHNldCBwcm9jZXNzaW5nIAorICAgICAqLwordHlwZWRlZiBzdHJ1Y3QgY2VydFRvVFNOX3VuZG9fcyB7CisgICAgY2hhciAgICAgICAgICAgIGZhdGU7CisgICAgY2hhciAgICAgICAgICAgIGNvcGllZDsKKyAgICBjaGFyICAgICAgICAgICAgaXNfY29uc2lzdGVudDsKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxW1NOTVBUTFNUTUNFUlRUT1RTTl9UQUJMRV9NQVhfQ09MKzFdOworCisgICAgLyoKKyAgICAgKiB1bmRvIENvbHVtbiBzcGFjZSAKKyAgICAgKi8KKyAgICBjaGFyICAgICAgICAgICAgZmluZ2VycHJpbnRbU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgZmluZ2VycHJpbnRfbGVuOworICAgIGludCAgICAgICAgICAgICBtYXBUeXBlOworICAgIGNoYXIgICAgICAgICAgICBkYXRhW1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBX01BWF9TSVpFXTsKKyAgICBzaXplX3QgICAgICAgICAgZGF0YV9sZW47CisgICAgdV9jaGFyICAgICAgICAgIGhhc2hUeXBlOworICAgIGNoYXIgICAgICAgICAgICBzdG9yYWdlVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgcm93U3RhdHVzOworfSBjZXJ0VG9UU05fdW5kbzsKKworICAgIC8qCisgICAgICogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkgCisgICAgICovCit0eXBlZGVmIHN0cnVjdCBjZXJ0VG9UU05fZW50cnlfcyB7CisgICAgLyoKKyAgICAgKiBJbmRleCB2YWx1ZXMgCisgICAgICovCisgICAgdV9sb25nICAgICAgICAgIHRsc3RtQ2VydFRvVFNOSUQ7CisKKyAgICAvKgorICAgICAqIENvbHVtbiB2YWx1ZXMgCisgICAgICovCisgICAgY2hhciAgICAgICAgICAgIGZpbmdlcnByaW50W1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVF9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIGZpbmdlcnByaW50X2xlbjsKKyAgICBpbnQgICAgICAgICAgICAgbWFwVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgZGF0YVtTTk1QVExTVE1DRVJUVE9UU05fREFUQV9NQVhfU0laRV07CisgICAgc2l6ZV90ICAgICAgICAgIGRhdGFfbGVuOworICAgIGNoYXIgICAgICAgICAgICBzdG9yYWdlVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgcm93U3RhdHVzOworICAgIHVfY2hhciAgICAgICAgICBoYXNoVHlwZTsKKyAgICBjaGFyICAgICAgICAgICAgbWFwX2ZsYWdzOworCisgICAgLyoKKyAgICAgKiB1c2VkIGR1cmluZyBzZXQgcHJvY2Vzc2luZyAKKyAgICAgKi8KKyAgICBjZXJ0VG9UU05fdW5kbyAqdW5kbzsKK30gY2VydFRvVFNOX2VudHJ5OworCitzdGF0aWMgTmV0c25tcF9Ob2RlX0hhbmRsZXIgdGxzdG1DZXJ0VG9UU05UYWJsZV9oYW5kbGVyOworc3RhdGljIG9pZCBfb2lkMnR5cGUob2lkICp2YWwsIGludCB2YWxfbGVuKTsKKy8qKiBzdGF0aWMgaW50IF90eXBlMm9pZChpbnQgdHlwZSwgb2lkICp2YWwsIGludCAqdmFsX2xlbik7ICovCitzdGF0aWMgaW50IF9jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSk7CitzdGF0aWMgdm9pZCBfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpOworc3RhdGljIHZvaWQgX2NlcnRfbWFwX2FkZChjZXJ0VG9UU05fZW50cnkgKmVudHJ5KTsKK3N0YXRpYyB2b2lkIF9jZXJ0X21hcF9yZW1vdmUoY2VydFRvVFNOX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgaW50IF9jb3VudF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpOworc3RhdGljIHZvaWQgX3BhcnNlX21pYl9tYXBzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKK3N0YXRpYyBpbnQgX3NhdmVfbWFwcyhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlciwgdm9pZCAqY2xpZW50KTsKK3N0YXRpYyBpbnQgX3NhdmVfbWFwKG5ldHNubXBfY2VydF9tYXAgKm1hcCwgaW50IHJvd19zdGF0dXMsIHZvaWQgKnR5cGUpOworc3RhdGljIHZvaWQgX2NlcnRfbWFwX3R3ZWFrX3N0b3JhZ2UoY2VydFRvVFNOX2VudHJ5ICplbnRyeSk7CisKK3N0YXRpYyBuZXRzbm1wX3RkYXRhICpfdGFibGUgPSBOVUxMOworc3RhdGljIHVpbnQzMl90IF9sYXN0X2NoYW5nZWQgPSAwOworCisKKy8qKiBJbml0aWFsaXplcyB0aGUgdGxzdG1DZXJ0VG9UU05UYWJsZSBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfc25tcFRsc3RtQ2VydFRvVFNOVGFibGUodm9pZCkKK3sKKyAgICBpbml0X3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlX2NvbnRleHQoTlVMTCk7Cit9CisKK3ZvaWQKK2luaXRfc25tcFRsc3RtQ2VydFRvVFNOVGFibGVfY29udGV4dChjb25zdCBjaGFyICpjb250ZXh0TmFtZSkKK3sKKyAgICBvaWQgICAgICAgICAgICAgcmVnX29pZFtdICAgPSAgeyBTTk1QX1RMU19UTV9DRVJUX1RBQkxFIH07CisgICAgY29uc3Qgc2l6ZV90ICAgIHJlZ19vaWRfbGVuID0gIE9JRF9MRU5HVEgocmVnX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKmluZm87CisgICAgbmV0c25tcF9jYWNoZSAgICAgICAgICAgICAgICAgICAqY2FjaGU7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAgICAqd2F0Y2hlcjsKKyAgICBjb25zdCBjaGFyICptaWJfbWFwX2hlbHAgPSAKKyAgICAgICAgTUFQX01JQl9DT05GSUdfVE9LRU4gIiB0YWJsZSBwZXJzaXN0ZW5jZSAoaW50ZXJuYWwgdXNlKSI7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9TTjppbml0IiwKKyAgICAgICAgICAgICAgICAiaW5pdGlhbGl6aW5nIHRhYmxlIHRsc3RtQ2VydFRvVFNOVGFibGVcbiIpKTsKKworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICgidGxzdG1DZXJ0VG9UU05UYWJsZSIsIHRsc3RtQ2VydFRvVFNOVGFibGVfaGFuZGxlciwKKyAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuLAorICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIGhhbmRsZXIgcmVnaXN0cmF0aW9uIGZvciB0bHN0bUNlcnRUb1NOXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChOVUxMICE9IGNvbnRleHROYW1lKQorICAgICAgICByZWctPmNvbnRleHROYW1lID0gc3RyZHVwKGNvbnRleHROYW1lKTsKKworICAgIF90YWJsZSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCJ0bHN0bUNlcnRUb1RTTlRhYmxlIiwgMCk7CisgICAgaWYgKE5VTEwgPT0gX3RhYmxlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyB0ZGF0YSB0YWJsZSBmb3IgdGxzdG1DZXJ0VG9UU05UYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyk7CisgICAgaWYgKE5VTEwgPT0gaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgdGFibGUgaW5mbyBmb3IgdGxzdG1DZXJ0VG9UU05UYWJsZVxuIik7CisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKF90YWJsZSk7CisgICAgICAgIF90YWJsZSA9IE5VTEw7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXMoaW5mbywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kZXg6IHRsc3RtQ2VydFRvVFNOSUQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVU5TSUdORUQsICAwKTsKKworICAgIGluZm8tPm1pbl9jb2x1bW4gPSBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfTUlOX0NPTDsKKyAgICBpbmZvLT5tYXhfY29sdW1uID0gU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX01BWF9DT0w7CisKKyAgICAvKgorICAgICAqIGNhY2hlIGluaXQKKyAgICAgKi8KKyAgICBjYWNoZSA9IG5ldHNubXBfY2FjaGVfY3JlYXRlKDMwLCAoTmV0c25tcENhY2hlTG9hZCopX2NhY2hlX2xvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTmV0c25tcENhY2hlRnJlZSopX2NhY2hlX2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4pOworICAgIGlmIChOVUxMID09IGNhY2hlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGNhY2hlIGZvciB0bHN0bUNlcnRUb1RTTlRhYmxlXG4iKTsKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUoX3RhYmxlKTsKKyAgICAgICAgX3RhYmxlID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWNoZS0+bWFnaWMgPSAodm9pZCAqKV90YWJsZTsKKyAgICBjYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisKKyAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKHJlZywgX3RhYmxlLCBpbmZvKTsKKworICAgIGlmIChjYWNoZSkgCisgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2NvbnRhaW5lciIpOworCisgICAgLyoKKyAgICAgKiByZWdpc3RlciBzY2FsYXJzCisgICAgICovCisgICAgcmVnX29pZFsxMF0gPSAxOworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wVGxzdG1DZXJ0VG9UU05Db3VudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvdW50X2hhbmRsZXIsIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChyZWdfb2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgaWYgKE5VTEwgPT0gcmVnKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBoYW5kbGVyIGZvciBzbm1wVGxzdG1DZXJ0VG9UU05Db3VudFxuIik7CisgICAgZWxzZSB7CisgICAgICAgIGlmIChOVUxMICE9IGNvbnRleHROYW1lKQorICAgICAgICAgICAgcmVnLT5jb250ZXh0TmFtZSA9IHN0cmR1cChjb250ZXh0TmFtZSk7CisKKyAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIocmVnKTsKKyAgICAgICAgaWYgKGNhY2hlKSAKKyAgICAgICAgICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidGFibGVfY29udGFpbmVyIik7CisgICAgfQorICAgIAorICAgIHJlZ19vaWRbMTBdID0gMjsKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgInNubXBUbHN0bUNlcnRUb1RTTlRhYmxlTGFzdENoYW5nZWQiLCBOVUxMLCByZWdfb2lkLAorICAgICAgICBPSURfTEVOR1RIKHJlZ19vaWQpLCBIQU5ETEVSX0NBTl9ST05MWSk7CisgICAgd2F0Y2hlciA9IG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygodm9pZCopJl9sYXN0X2NoYW5nZWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoX2xhc3RfY2hhbmdlZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fVElNRVRJQ0tTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKKyAgICBpZiAoKE5VTEwgPT0gcmVnKSB8fCAoTlVMTCA9PSB3YXRjaGVyKSkKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgaGFuZGxlciBmb3Igc25tcFRsc3RtQ2VydFRvVFNOQ291bnRcbiIpOworICAgIGVsc2UgeworICAgICAgICBpZiAoTlVMTCAhPSBjb250ZXh0TmFtZSkKKyAgICAgICAgICAgIHJlZy0+Y29udGV4dE5hbWUgPSBzdHJkdXAoY29udGV4dE5hbWUpOworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfc2NhbGFyMihyZWcsIHdhdGNoZXIpOworICAgIH0KKworICAgIC8qCisgICAgICogcGVyc2lzdGVuY2UKKyAgICAgKi8KKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCBNQVBfTUlCX0NPTkZJR19UT0tFTiwgX3BhcnNlX21pYl9tYXBzLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9tYXBfaGVscCk7CisgICAgaWYgKHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NhdmVfbWFwcywgTlVMTCkgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlZ2lzdGVyaW5nIGZvciBTVE9SRV9EQVRBIGNhbGxiYWNrICIKKyAgICAgICAgICAgICAgICAgImZvciBjZXJ0VG9UU05cbiIpOworCit9CisKKy8qCisgKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAKKyAqLworbmV0c25tcF90ZGF0YV9yb3cgKgordGxzdG1DZXJ0VG9UU05UYWJsZV9jcmVhdGVFbnRyeShuZXRzbm1wX3RkYXRhICogdGFibGUsIHVfbG9uZyB0bHN0bUNlcnRUb1RTTklEKQoreworICAgIGNlcnRUb1RTTl9lbnRyeSAqZW50cnk7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRihjZXJ0VG9UU05fZW50cnkpOworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcm93ID0gbmV0c25tcF90ZGF0YV9jcmVhdGVfcm93KCk7CisgICAgaWYgKCFyb3cpIHsKKyAgICAgICAgU05NUF9GUkVFKGVudHJ5KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHJvdy0+ZGF0YSA9IGVudHJ5OworCisgICAgREVCVUdNU0dUKCgidGxzdG1DZXJ0VG9TTjplbnRyeTpjcmVhdGUiLCAiZW50cnkgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICBlbnRyeSwgcm93KSk7CisgICAgLyoKKyAgICAgKiBwb3B1bGF0ZSBpbmRleAorICAgICAqLworICAgIGVudHJ5LT50bHN0bUNlcnRUb1RTTklEID0gdGxzdG1DZXJ0VG9UU05JRDsKKyAgICBuZXRzbm1wX3RkYXRhX3Jvd19hZGRfaW5kZXgocm93LCBBU05fVU5TSUdORUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoZW50cnktPnRsc3RtQ2VydFRvVFNOSUQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPnRsc3RtQ2VydFRvVFNOSUQpKTsKKyAgIC8qCisgICAgKiBhc3NpZ24gZGVmYXVsdCBjb2x1bW4gdmFsdWVzCisgICAgKi8KKyAgICBlbnRyeS0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkOworICAgIGVudHJ5LT5zdG9yYWdlVHlwZSA9IFNUX05PTlZPTEFUSUxFOworICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKworICAgIGlmICh0YWJsZSkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU046cm93Omluc2VydCIsICJyb3cgJXBcbiIsIHJvdykpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGUsIHJvdyk7CisgICAgfQorICAgIHJldHVybiByb3c7Cit9CisKKy8qCisgKiBhbGxvY2F0ZSB1bmRvIHJlc291cmNlcyAKKyAqLworc3RhdGljIGNlcnRUb1RTTl91bmRvICoKK19hbGxvY1VuZG8oY2VydFRvVFNOX2VudHJ5ICogZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBuZXRzbm1wX2Fzc2VydCghZW50cnktPnVuZG8pOworCisgICAgZW50cnktPnVuZG8gPSBTTk1QX01BTExPQ19UWVBFREVGKGNlcnRUb1RTTl91bmRvKTsKKyAgICBpZiAoIWVudHJ5LT51bmRvKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gLTE7ICAgLyogZG9uJ3Qga25vdyAqLworCisgICAgcmV0dXJuIGVudHJ5LT51bmRvOworfQorCisvKgorICogZnJlZSB1bmRvIHJlc291cmNlcyAKKyAqLworc3RhdGljIHZvaWQKK19mcmVlVW5kbyhjZXJ0VG9UU05fZW50cnkgKiBlbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS0+dW5kbykKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBUT0RPOiByZWxlYXNlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzIAorICAgICAqLworICAgIFNOTVBfRlJFRShlbnRyeS0+dW5kbyk7Cit9CisKKy8qCisgKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgCisgKi8KK3ZvaWQKK3Rsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkobmV0c25tcF90ZGF0YSAqIHRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqIHJvdykKK3sKKyAgICBjZXJ0VG9UU05fZW50cnkgKmVudHJ5OworCisgICAgaWYgKCFyb3cpCisgICAgICAgIHJldHVybjsgICAgICAgICAgICAgICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCisKKyAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgcm93LT5kYXRhOworCisgICAgREVCVUdNU0dUKCgidGxzdG1DZXJ0VG9TTjplbnRyeTpkZWxldGUiLCAiZW50cnkgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICBlbnRyeSwgcm93KSk7CisKKyAgICBpZiAoZW50cnkgJiYgZW50cnktPnVuZG8pCisgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgU05NUF9GUkVFKGVudHJ5KTsKKworICAgIGlmICh0YWJsZSkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9TTjpyb3c6cmVtb3ZlIiwgInJvdyAlcFxuIiwgcm93KSk7CisgICAgICAgIG5ldHNubXBfdGRhdGFfcmVtb3ZlX2FuZF9kZWxldGVfcm93KHRhYmxlLCByb3cpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3Jvdyhyb3cpOworfQorCisKKy8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgdGxzdG1DZXJ0VG9UU05UYWJsZSB0YWJsZSAqLworc3RhdGljIGludAordGxzdG1DZXJ0VG9UU05UYWJsZV9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgb2lkIHRzbm1bXSA9IHsgU05NUF9UTFNfVE1fQkFTRSwgMSwgMSwgMCB9OworICAgIHN0YXRpYyBjb25zdCBpbnQgdHNubV9wb3MgPSBPSURfTEVOR1RIKHRzbm0pIC0gMTsKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKmluZm87CisgICAgbmV0c25tcF90ZGF0YSAgKnRhYmxlOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgY2VydFRvVFNOX2VudHJ5ICplbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfTk9FUlJPUjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1NOOmhhbmRsZXIiLCAiUHJvY2Vzc2luZyByZXF1ZXN0IChtb2RlICVzICglZCkpXG4iLAorICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSwKKyAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKSk7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEdFVCAjIyMjIworICAgICAqCisgICAgICogICBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoZW50cnkgJiYgaW5mbyk7CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBidWlsZCBTbm1wVExTRmluZ2VycHJpbnQKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICB1X2NoYXIgYmluWzQyXSwgKnB0ciA9IGJpbjsKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuID0gc2l6ZW9mKGJpbik7CisgICAgICAgICAgICAgICAgaW50ICAgIHJjOworICAgICAgICAgICAgICAgIHJjID0gbmV0c25tcF90bHNfZmluZ2VycHJpbnRfYnVpbGQoZW50cnktPmhhc2hUeXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnB0ciwgJmxlbiwgMCk7CisgICAgICAgICAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluLCBsZW4pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFOgorICAgICAgICAgICAgICAgIHRzbm1bdHNubV9wb3NdID0gZW50cnktPm1hcFR5cGU7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNubSwgc2l6ZW9mKHRzbm0pKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5kYXRhLCBlbnRyeS0+ZGF0YV9sZW4pOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnN0b3JhZ2VUeXBlKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9HRVQgKi8KKworICAgICAgICAvKgorICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CisgICAgICAgICAqLworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFJFU0VSVkUxICMjIyMjCisgICAgICoKKyAgICAgKiAgIEluIFJFU0VSVkUxIHdlIGFyZSBqdXN0IGNoZWNraW5nIGJhc2ljIEFTTi4xIHNpemUvdHlwZSByZXN0cmljdGlvbnMuCisgICAgICogWW91IHByb2JhYmx5IGRvbid0IG5lZWQgdG8gY2hhbmdlIGFueSBvZiB0aGlzIGNvZGUuIERvbid0IGNoYW5nZSBhbnkKKyAgICAgKiBvZiB0aGUgY29sdW1uIHZhbHVlcyBoZXJlLiBTYXZlIHRoYXQgZm9yIHRoZSBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoZSBuZXh0IHBoYXNlIGlzIFJFU0VSVkUyIG9yIEZSRUUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChyZXF1ZXN0LT5wcm9jZXNzZWQgPT0gMCk7CisKKyAgICAgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSAqKSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisKKyAgICAgICAgICAgIGlmICgoTlVMTCAhPSBlbnRyeSkgJiYgKFNUX1JFQURPTkxZID09IGVudHJ5LT5zdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc3dpdGNoIChpbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgLyoqIGNoZWNrIGxlbi9hbGdvcml0aG0gTUlCIHJlcXVpcmVtZW50cyAqLworICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jZXJ0X2NoZWNrX3ZiX2ZpbmdlcnByaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEU6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZQorICAgICAgICAgICAgICAgICAgICAocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEVfTUFYX1NJWkUpOworICAgICAgICAgICAgICAgIGlmIChyZXQgPT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgICAgICAgICBpZiAoX29pZDJ0eXBlKHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbikgPgorICAgICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRfTUFYKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQToKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9PQ1RFVF9TVFIsIHNpemVvZihlbnRyeS0+ZGF0YSkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfc3RvcmFnZXR5cGUKKyAgICAgICAgICAgICAgICAgICAgKHJlcXVlc3QtPnJlcXVlc3R2YiwoZW50cnkgPyBlbnRyeS0+c3RvcmFnZVR5cGUgOiBTVF9OT05FKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlCisgICAgICAgICAgICAgICAgICAgIChyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAoZW50cnkgPyBlbnRyeS0+cm93U3RhdHVzIDpSU19OT05FWElTVEVOVCksCisgICAgICAgICAgICAgICAgICAgICAoZW50cnkgPyBlbnRyeS0+c3RvcmFnZVR5cGUgOlNUX05PTkUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUyAqLworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworCisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX1JFU0VSVkUxICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNFUlZFMiAjIyMjIworICAgICAqCisgICAgICogICBSRVNFUlZFMiBpcyBmb3IgY2hlY2tpbmcgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgZnJvbSB0aGUgTUlCLgorICAgICAqIFNpbmNlIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgb2Z0ZW4gaW4gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QsCisgICAgICogbWliMmMgY2FuJ3QgZ2VuZXJhdGUgY29kZS4gSXQncyBwb3NzaWJsZSB0aGF0IHlvdSBuZWVkIHRvIGFkZAorICAgICAqIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuIEhvd2V2ZXIsIGRvbid0IGNoYW5nZSBhbnkgb2YgdGhlIGNvbHVtbgorICAgICAqIHZhbHVlcyBoZXJlLiBTYXZlIHRoYXQgZm9yIHRoZSBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoZSBuZXh0IHBoYXNlIGlzIEFDVElPTiBvciBGUkVFLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQocmVxdWVzdC0+cHJvY2Vzc2VkID09IDApOworCisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGUgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogaWYgbm8gcm93LCBjcmVhdGUgb25lCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmICghZW50cnkpIHsKKyAgICAgICAgICAgICAgICByb3cgPSB0bHN0bUNlcnRUb1RTTlRhYmxlX2NyZWF0ZUVudHJ5CisgICAgICAgICAgICAgICAgICAgICh0YWJsZSwqaW5mby0+aW5kZXhlcy0+dmFsLmludGVnZXIpOworICAgICAgICAgICAgICAgIGlmICghcm93KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKyAgICAgICAgICAgICAgICBfYWxsb2NVbmRvKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoIWVudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkodGFibGUsIHJvdyk7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+ZmF0ZSA9IEZBVEVfTkVXTFlfQ1JFQVRFRDsKKyAgICAgICAgICAgICAgICAvKiogYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICAgICAgbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93KHJlcXVlc3QsIHJvdyk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qKiBhbGxvY2F0ZSB1bmRvIHN0cnVjdHVyZSwgaWYgbmVlZGVkICovCisgICAgICAgICAgICBpZiAoIWVudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgX2FsbG9jVW5kbyhlbnRyeSk7CisgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBzYXZlIHJlcXVlc3QgcHRyIGZvciBjb2x1bW4uIGlmIHdlIGFscmVhZHkKKyAgICAgICAgICAgICAqIGhhdmUgYSB2YWx1ZSwgYmFpbC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKGVudHJ5LT51bmRvLT5yZXFbaW5mby0+Y29sbnVtXSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoInRsc3RtQ2VydFRvU046cmVzZXJ2ZTIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIHNldHMgdG8gY29sICVkIGluIHJlcXVlc3RcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5jb2xudW0pKTsKKyAgICAgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IGVudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnRyeS0+dW5kby0+cmVxW2luZm8tPmNvbG51bV0gPSByZXF1ZXN0OworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBmb3IgcmVxdWVzdHMgKi8KKworICAgICAgICBpZiAocmV0ID09IFNOTVBfRVJSX05PRVJST1IpIHsKKyAgICAgICAgICAgIC8qKiBtYWtlIHN1cmUgcm93c3RhdHVzIGlzIHVzZWQgdG8gY3JlYXRlIHJvd3MgKi8KKyAgICAgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICBpZiAoKGVudHJ5LT51bmRvLT5mYXRlICE9IEZBVEVfTkVXTFlfQ1JFQVRFRCkgfHwKKyAgICAgICAgICAgICAgICAgICAgKGVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLyogY3JlYXRpb24gZm9yIHJlcXVlc3RzICovCisgICAgICAgIH0gLyogbm8gZXJyb3IgKi8KKyAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogY2FzZSBNT0RFX1NFVF9SRVNFUlZFMiAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEZSRUUgIyMjIyMKKyAgICAgKgorICAgICAqICAgRlJFRSBpcyBmb3IgY2xlYW5pbmcgdXAgYWZ0ZXIgYSBmYWlsZWQgcmVxdWVzdCAoZHVyaW5nIGVpdGhlcgorICAgICAqIFJFU0VSVkUxIG9yIFJFU0VSVkUyKS4gU28gYW55IGFsbG9jYXRlZCByZXNvdXJjZXMgbmVlZCB0byBiZQorICAgICAqIHJlbGVhc2VkLgorICAgICAqCisgICAgICogICBUaGlzIHRoZSBmaW5hbCBwaGFzZSBmb3IgdGhpcyBwYXRoIGluIHRoZSBzdGF0ZSBtYWNoaW5lLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVsZWFzZSB1bmRvIHJlc291cmNlcworICAgICAgICAgKiByZW1vdmUgYW55IG5ld2x5IGNyZWF0ZWQgcm93cworICAgICAgICAgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZSA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoIWVudHJ5IHx8ICFlbnRyeS0+dW5kbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KHJlcXVlc3QsIHJvdyk7CisKKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgdGxzdG1DZXJ0VG9UU05UYWJsZV9yZW1vdmVFbnRyeSh0YWJsZSwgcm93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8oZW50cnkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfRlJFRSAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBQ1RJT04gIyMjIyMKKyAgICAgKgorICAgICAqICAgSW4gdGhlIEFDVElPTiBwaGFzZSwgd2UgcGVyZm9ybSBhbnkgc2V0cyB0aGF0IGNhbiBiZSB1bmRvbmUuCisgICAgICogKFNhdmUgYW55dGhpbmcgdGhhdCBjYW4ndCBiZSB1bmRvbmUgZm9yIHRoZSBDT01NSVQgcGhhc2UuKQorICAgICAqCisgICAgICogICBBZnRlciBpbmRpdmlkdWFsIGNvbHVtbnMgaGF2ZSBiZWVuIGRvbmUsIHlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGUKKyAgICAgKiByb3cgYXMgYSB3aG9sZSBpcyBjb25zaXN0ZW50LgorICAgICAqCisgICAgICogVGhlIG5leHQgcGhhc2UgaXMgVU5ETyBvciBDT01NSVQuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgLyoqIHJlc2VydmUyIHNob3VsZCBlbmZvcmNlIHRoaXMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHJlcXVlc3QgPT0gZW50cnktPnVuZG8tPnJlcVtpbmZvLT5jb2xudW1dKTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGZvciBlYWNoIGNvbCwgc2F2ZSBvbGQgdmFsdWUgYW5kIHRoZSBzZXQgbmV3IHZhbHVlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdV9jaGFyICp0bXAgPSAodV9jaGFyKillbnRyeS0+ZmluZ2VycHJpbnQ7CisgICAgICAgICAgICAgICAgdV9pbnQgc2l6ZSA9IHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7CisKKyAgICAgICAgICAgICAgICBtZW1jcHkoZW50cnktPnVuZG8tPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+ZmluZ2VycHJpbnQsIHNpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+ZmluZ2VycHJpbnRfbGVuID0gZW50cnktPmZpbmdlcnByaW50X2xlbjsKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+aGFzaFR5cGUgPSBlbnRyeS0+aGFzaFR5cGU7CisgICAgICAgICAgICAgICAgbWVtc2V0KGVudHJ5LT5maW5nZXJwcmludCwgMCwgc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkpOworCisgICAgICAgICAgICAgICAgKHZvaWQpbmV0c25tcF90bHNfZmluZ2VycHJpbnRfcGFyc2UodmItPnZhbC5zdHJpbmcsIHZiLT52YWxfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKiopJnRtcCwgJnNpemUsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmVudHJ5LT5oYXNoVHlwZSk7CisgICAgICAgICAgICAgICAgZW50cnktPmZpbmdlcnByaW50X2xlbiA9IHNpemU7CisgICAgICAgICAgICAgICAgaWYgKDAgPT0gZW50cnktPmZpbmdlcnByaW50X2xlbikKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFOgorICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5tYXBUeXBlID0gZW50cnktPm1hcFR5cGU7CisgICAgICAgICAgICAgICAgZW50cnktPm1hcFR5cGUgPSBfb2lkMnR5cGUocmVxdWVzdC0+cmVxdWVzdHZiLT52YWwub2JqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWxfbGVuKTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEUgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBOgorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+dW5kby0+ZGF0YSwgZW50cnktPmRhdGEsIHNpemVvZihlbnRyeS0+ZGF0YSkpOworICAgICAgICAgICAgICAgIGVudHJ5LT51bmRvLT5kYXRhX2xlbiA9IGVudHJ5LT5kYXRhX2xlbjsKKyAgICAgICAgICAgICAgICBtZW1zZXQoZW50cnktPmRhdGEsIDAsIHNpemVvZihlbnRyeS0+ZGF0YSkpOworICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+ZGF0YSwgcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuc3RyaW5nLAorICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIGVudHJ5LT5kYXRhX2xlbiA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsX2xlbjsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgKi8KKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRToKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+c3RvcmFnZVR5cGUgPSBlbnRyeS0+c3RvcmFnZVR5cGU7CisgICAgICAgICAgICAgICAgZW50cnktPnN0b3JhZ2VUeXBlID0gKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICBlbnRyeS0+dW5kby0+cm93U3RhdHVzID0gZW50cnktPnJvd1N0YXR1czsKKyAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgdmFsdWVzIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgCisgICAgICAgICAgICBicmVhazsgLyogc2tpcCBjb25zaXN0ZW5jeSBpZiB3ZSd2ZSBhbHJlYWR5IGdvdCBlcnJvciAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIEFsbCBjb2x1bW5zIG5vdyBoYXZlIHRoZWlyIGZpbmFsIHZhbHVlcyBzZXQuIGNoZWNrIHRoZQorICAgICAgICAgKiBpbnRlcm5hbCBjb25zaXN0ZW5jeSBvZiBlYWNoIHJvdy4KKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIGluZm8gPSBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ICE9IC0xKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAgICAgICAvKiBhbHJlYWR5IGNoZWNrZWQgKi8KKworICAgICAgICAgICAgLyoqIGFzc3VtZSBjb25zaXN0ZW5jeSAqLworICAgICAgICAgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAxOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogcGVyIG1pYiwgY2FuJ3QgaGF2ZSBlbXB0eSBmaW5nZXJwcmludCBhbmQgbXVzdAorICAgICAgICAgICAgICogaGF2ZSBkYXRhIGlmIGluZGljYXRlZCBieSBtYXAgdHlwZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKDAgPT0gZW50cnktPmZpbmdlcnByaW50X2xlbikgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmluY29uc2lzdGVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZpbmdlcnByaW50IG11c3Qgbm90IGJlIGVtcHR5XG4iKSk7CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoKFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkID09IGVudHJ5LT5tYXBUeXBlKSAmJgorICAgICAgICAgICAgICAgICAgICAgKDAgPT0gZW50cnktPmRhdGFfbGVuKSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmluY29uc2lzdGVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11c3Qgc3BlY2lmeSBEYXRhIGZvciBDZXJ0U3BlY2lmaWVkIGlkZW50aXR5XG4iKSk7CisgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKFJTX0lTX0FDVElWRShlbnRyeS0+cm93U3RhdHVzKSkgJiYKKyAgICAgICAgICAgICAgICAoKCFlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXSkgfHwKKyAgICAgICAgICAgICAgICAgKFJTX0lTX0FDVElWRShlbnRyeS0+dW5kby0+cm93U3RhdHVzKSkpKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBwZXIgbWliLCBjYW4ndCBtb2RpZnkgdGhlc2Ugd2hpbGUgcm93IGFjdGl2ZQorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGNoYXIgX2NvbHNbM10gPSB7IENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFLCBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgfTsKKyAgICAgICAgICAgICAgICBpbnQgaTsKKyAgICAgICAgICAgICAgICBmb3IgKGk9MDsgaSA8IDM7ICsraSApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFlbnRyeS0+dW5kby0+cmVxW2ldKQorICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmluY29uc2lzdGVudCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBtb2RpZnkgcm93ICVkIHdoaWxlIGFjdGl2ZVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbHNbaV0pKTsKKyAgICAgICAgICAgICAgICAgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgcmVxdWVzdD0gZW50cnktPnVuZG8tPnJlcVtpXTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChSU19JU19HT0lOR19BQ1RJVkUoZW50cnktPnJvd1N0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIGlmIGdvaW5nIGFjdGl2ZSwgaW5jb25zaXN0ZW5jeSBpcyBmYXRhbAorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmICghZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoZW50cnktPnVuZG8tPnJlcVtDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVU10pOworICAgICAgICAgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IGVudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgaWYgKFJTX0RFU1RST1kgPT0gZW50cnktPnJvd1N0YXR1cykgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogY2FuJ3QgZGVzdHJveSBhY3RpdmUgcm93CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaWYgKFJTX0lTX0FDVElWRShlbnRyeS0+dW5kby0+cm93U3RhdHVzKSkgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTppbmNvbnNpc3RlbnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2FuJ3QgZGVzdHJveSBhY3RpdmUgcm93XG4iKSk7CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CisgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSBlbnRyeS0+dW5kby0+cmVxW0NPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmV0ICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnNpc3RlbmN5IGZvciByZXF1ZXN0cyAqLworICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAvKiBjYXNlIE1PREVfU0VUX0FDVElPTiAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFVORE8gIyMjIyMKKyAgICAgKgorICAgICAqICAgVU5ETyBpcyBmb3IgY2xlYW5pbmcgdXAgYW55IGZhaWxlZCByZXF1ZXN0cyB0aGF0IHdlbnQgdGhyb3VnaCB0aGUKKyAgICAgKiBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBmb3IgKHJlcXVlc3QgPSByZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdCA9IHJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3cocmVxdWVzdCk7CisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogc2tpcCBuZXdseSBjcmVhdGVkIHJvd3MsIGFzIHdlJ3JlIGdvaW5nIHRvIGRlbGV0ZQorICAgICAgICAgICAgICogdGhlbSBiZWxvdyBhbnl3YXlzCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiByZXN0b3JlIHZhbHVlcworICAgICAgICAgICAgICovCisgICAgICAgICAgICBzd2l0Y2ggKGluZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIG1lbWNweShlbnRyeS0+ZmluZ2VycHJpbnQsIGVudHJ5LT51bmRvLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgICAgIGVudHJ5LT5maW5nZXJwcmludF9sZW4gPSBlbnRyeS0+dW5kby0+ZmluZ2VycHJpbnRfbGVuOworICAgICAgICAgICAgICAgIGVudHJ5LT5oYXNoVHlwZSA9IGVudHJ5LT51bmRvLT5oYXNoVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRToKKyAgICAgICAgICAgICAgICBlbnRyeS0+bWFwVHlwZSA9IGVudHJ5LT51bmRvLT5tYXBUeXBlOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEE6CisgICAgICAgICAgICAgICAgbWVtY3B5KGVudHJ5LT5kYXRhLCBlbnRyeS0+dW5kby0+ZGF0YSwgc2l6ZW9mKGVudHJ5LT5kYXRhKSk7CisgICAgICAgICAgICAgICAgZW50cnktPmRhdGFfbGVuID0gZW50cnktPnVuZG8tPmRhdGFfbGVuOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQSAqLworICAgICAgICAgICAgY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIGVudHJ5LT5zdG9yYWdlVHlwZSA9IGVudHJ5LT51bmRvLT5zdG9yYWdlVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBlbnRyeS0+dW5kby0+cm93U3RhdHVzOworICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAvKiBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTICovCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCBjb2xudW0gKi8KKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVsZWFzZSB1bmRvIGRhdGEKKyAgICAgICAgICogb3IgcmVtb3ZlIGFueSBuZXdseSBjcmVhdGVkIHJvd3MKKyAgICAgICAgICovCisgICAgICAgIGZvciAocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGUgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5ICopIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKworICAgICAgICAgICAgaWYgKCFlbnRyeSB8fCAhZW50cnktPnVuZG8pCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcmVtb3ZlX3RkYXRhX3JvdyhyZXF1ZXN0LCByb3cpOworCisgICAgICAgICAgICBpZiAoRkFURV9ORVdMWV9DUkVBVEVEID09IGVudHJ5LT51bmRvLT5mYXRlKQorICAgICAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkodGFibGUsIHJvdyk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfVU5ETyAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBDT01NSVQgIyMjIyMKKyAgICAgKgorICAgICAqICAgQ09NTUlUIGlzIHRoZSBmaW5hbCBzdWNjZXNzIHN0YXRlLCB3aGVuIGFsbCBjaGFuZ2VzIGFyZSBmaW5hbGl6ZWQuCisgICAgICogVGhlcmUgaXMgbm90IHJlY292ZXJ5IHN0YXRlIHNob3VsZCBzb21ldGhpbmcgZmFpbGUgaGVyZS4KKyAgICAgKgorICAgICAqICAgVGhpcyB0aGUgZmluYWwgcGhhc2UgZm9yIHRoaXMgcGF0aCBpbiB0aGUgc3RhdGUgbWFjaGluZS4KKyAgICAgKi8KKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICByb3cgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGUgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICBpbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBlbnRyeSA9IChjZXJ0VG9UU05fZW50cnkgKikgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoKFJTX05PVFJFQURZID09IGVudHJ5LT5yb3dTdGF0dXMpICYmIGVudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgIGVudHJ5LT5yb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICBlbHNlIGlmICgoUlNfTk9USU5TRVJWSUNFID09IGVudHJ5LT5yb3dTdGF0dXMpICYmCisgICAgICAgICAgICAgICAgICAgICAoMCA9PSBlbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkpCisgICAgICAgICAgICAgICAgZW50cnktPnJvd1N0YXR1cyA9IFJTX05PVFJFQURZOworCisgICAgICAgICAgICAvKiogcmVsZWFzZSB1bmRvIGRhdGEgZm9yIHJlcXVlc3RzIHdpdGggbm8gcm93c3RhdHVzICovCisgICAgICAgICAgICBpZiAoZW50cnktPnVuZG8gJiYgIWVudHJ5LT51bmRvLT5yZXFbQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVNdKSB7CisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAoKDAgPT0gZW50cnktPm1hcF9mbGFncykgJiYgKGVudHJ5LT5yb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSkKKyAgICAgICAgICAgICAgICAgICAgX2NlcnRfbWFwX2FkZChlbnRyeSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKDAgIT0gZW50cnktPm1hcF9mbGFncykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAoZW50cnktPnJvd1N0YXR1cyA9PSBSU19ERVNUUk9ZKSkKKyAgICAgICAgICAgICAgICAgICAgX2NlcnRfbWFwX3JlbW92ZShlbnRyeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHN3aXRjaCAoaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoZW50cnktPnJvd1N0YXR1cykgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgICAgIC8qKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpOworICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfQUNUSVZFOworICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSBlbnRyeS0+bWFwX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgX2NlcnRfbWFwX2FkZChlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICAvKiogRmFsbC10aHJvdWdoICovCisgICAgICAgICAgICAgICAgY2FzZSBSU19OT1RJTlNFUlZJQ0U6CisgICAgICAgICAgICAgICAgICAgIC8qKiBzaW1wbHkgc2V0IHN0YXR1cyBiYXNlZCBvbiBjb25zaXN0ZW5jeSAqLworICAgICAgICAgICAgICAgICAgICBpZiAoZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfTk9UUkVBRFk7CisgICAgICAgICAgICAgICAgICAgIGlmICgwICE9IGVudHJ5LT5tYXBfZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICAgICBfY2VydF9tYXBfcmVtb3ZlKGVudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0RFU1RST1k6CisgICAgICAgICAgICAgICAgICAgIC8qKiByZW1vdmUgZnJvbSBjZXJ0IG1hcCAqLworICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPSBlbnRyeS0+bWFwX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgX2NlcnRfbWFwX3JlbW92ZShlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIC8qKiBkaXNhc3NvY2lhdGUgcm93IHdpdGggcmVxdWVzdHMgKi8KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KHJlcXVlc3QsIHJvdyk7CisgICAgICAgICAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkodGFibGUsIHJvdyk7CisgICAgICAgICAgICAgICAgICAgIHJvdyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIGVudHJ5ID0gTlVMTDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyoqIHJlbGVhc2UgdW5kbyBkYXRhICovCisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKGVudHJ5KTsKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgLyogY2FzZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUyAqLworCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgaWYgKFJTX0FDVElWRSA9PSBlbnRyeS0+cm93U3RhdHVzKQorICAgICAgICAgICAgICAgICAgICBfY2VydF9tYXBfdHdlYWtfc3RvcmFnZShlbnRyeSk7CisgICAgICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgIC8qIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSAqLworCisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQ6CisgICAgICAgICAgICBjYXNlIENPTF9TTk1QVExTVE1DRVJUVE9UU05fTUFQVFlQRToKKyAgICAgICAgICAgIGNhc2UgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9EQVRBOgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAvKiBzd2l0Y2ggY29sbnVtICovCisKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoqIHVwZGF0ZSBsYXN0IGNoYW5nZWQgKi8KKyAgICAgICAgX2xhc3RfY2hhbmdlZCA9IG5ldHNubXBfZ2V0X2FnZW50X3VwdGltZSgpOworCisgICAgICAgIC8qKiBzZXQgdXAgdG8gc2F2ZSBwZXJzaXN0ZW50IHN0b3JlICovCisgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKE5VTEwpOworCisgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgIC8qIGNhc2UgTU9ERV9TRVRfQ09NTUlUICovCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgKi8KKworICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LCByZXQpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK19jb3VudF9oYW5kbGVyKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIsCisgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCit7CisgICAgaW50ICAgICAgICAgICAgICAgIHZhbDsKKworICAgIGlmIChNT0RFX0dFVCAhPSByZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgbW9kZSBpbiBSTyBoYW5kbGVyIik7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgaWYgKE5VTEwgPT0gX3RhYmxlLT5jb250YWluZXIpCisgICAgICAgIHZhbCA9IDA7CisgICAgZWxzZQorICAgICAgICB2YWwgPSBDT05UQUlORVJfU0laRShfdGFibGUtPmNvbnRhaW5lcik7CisKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0dBVUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZ2YWwsIHNpemVvZih2YWwpKTsKKyAgIAorICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCisgICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKKyAgICAKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIHZvaWQKK19jZXJ0X21hcF9hZGQoY2VydFRvVFNOX2VudHJ5ICplbnRyeSkKK3sKKyAgICBuZXRzbm1wX2NlcnRfbWFwICptYXA7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6bWFwOmFkZCIsICJwcmkgJWxkLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCwgZW50cnktPmZpbmdlcnByaW50KSk7CisKKyAgICBtYXAgPSBuZXRzbm1wX2NlcnRfbWFwX2FsbG9jKGVudHJ5LT5maW5nZXJwcmludCwgTlVMTCk7CisgICAgaWYgKE5VTEwgPT0gbWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBtYXAtPnByaW9yaXR5ID0gZW50cnktPnRsc3RtQ2VydFRvVFNOSUQ7CisgICAgbWFwLT5tYXBUeXBlID0gZW50cnktPm1hcFR5cGU7CisgICAgaWYgKGVudHJ5LT5kYXRhKQorICAgICAgICBtYXAtPmRhdGEgPSBzdHJkdXAoZW50cnktPmRhdGEpOworICAgIG1hcC0+aGFzaFR5cGUgPSBlbnRyeS0+aGFzaFR5cGU7CisKKyAgICBtYXAtPmZsYWdzID0gTlNDTV9GUk9NX01JQjsKKyAgICBpZiAoZW50cnktPnN0b3JhZ2VUeXBlID09IFNUX05PTlZPTEFUSUxFKQorICAgICAgICBtYXAtPmZsYWdzIHw9IE5TQ01fTk9OVk9MQVRJTEU7CisKKyAgICBpZiAobmV0c25tcF9jZXJ0X21hcF9hZGQobWFwKSAhPSAwKQorICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKK30KKworc3RhdGljIHZvaWQKK19jZXJ0X21hcF90d2Vha19zdG9yYWdlKGNlcnRUb1RTTl9lbnRyeSAqZW50cnkpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKm1hcHM7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqbWFwLCBpbmRleDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTptYXA6dHdlYWsiLCAicHJpICVsZCwgc3QgJWRcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnRsc3RtQ2VydFRvVFNOSUQsIGVudHJ5LT5zdG9yYWdlVHlwZSkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSBtYXBzICovCisgICAgbWFwcyA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gbWFwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgaW5kZXgucHJpb3JpdHkgPSBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRDsKKyAgICBtYXAgPSBDT05UQUlORVJfRklORChtYXBzLCAmaW5kZXgpOworICAgIGlmIChOVUxMID09IG1hcCkgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTptYXA6dHdlYWsiLCAiY291bGRuJ3QgZmluZCBtYXAhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZW50cnktPnN0b3JhZ2VUeXBlID09IFNUX05PTlZPTEFUSUxFKQorICAgICAgICBtYXAtPmZsYWdzIHw9IE5TQ01fTk9OVk9MQVRJTEU7CisgICAgZWxzZQorICAgICAgICBtYXAtPmZsYWdzICY9IH5OU0NNX05PTlZPTEFUSUxFOworfQorCitzdGF0aWMgdm9pZAorX2NlcnRfbWFwX3JlbW92ZShjZXJ0VG9UU05fZW50cnkgKmVudHJ5KQoreworICAgIG5ldHNubXBfY29udGFpbmVyICptYXBzOworICAgIG5ldHNubXBfY2VydF9tYXAgbWFwOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOm1hcDpyZW1vdmUiLCAicHJpICVsZCwgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnRsc3RtQ2VydFRvVFNOSUQsIGVudHJ5LT5maW5nZXJwcmludCkpOworCisgICAgLyoqIGdldCBjdXJyZW50IGFjdGl2ZSBtYXBzICovCisgICAgbWFwcyA9IG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gbWFwcykKKyAgICAgICAgcmV0dXJuOworCisgICAgbWFwLnByaW9yaXR5ID0gZW50cnktPnRsc3RtQ2VydFRvVFNOSUQ7CisgICAgbWFwLmZpbmdlcnByaW50ID0gZW50cnktPmZpbmdlcnByaW50OworCisgICAgaWYgKENPTlRBSU5FUl9SRU1PVkUobWFwcywgJm1hcCkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHJlbW92ZSBjZXJ0aWZpY2F0ZSBtYXAiKTsKKyAgICB9CisgICAgZW50cnktPm1hcF9mbGFncyA9IDA7Cit9CisKK3N0YXRpYyBuZXRzbm1wX3RkYXRhX3JvdyAqCitfZW50cnlfZnJvbV9tYXAobmV0c25tcF9jZXJ0X21hcCAgKm1hcCkKK3sKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIGNlcnRUb1RTTl9lbnRyeSAgICplbnRyeTsKKworICAgIHJvdyA9IHRsc3RtQ2VydFRvVFNOVGFibGVfY3JlYXRlRW50cnkoTlVMTCwgbWFwLT5wcmlvcml0eSk7CisgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW4gY3JlYXRlIHRsc3RtQ2VydFRvVFNOIHJvdyBlbnRyeVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgIGlmIChtYXAtPmZsYWdzICYgTlNDTV9GUk9NX0NPTkZJRykKKyAgICAgICAgZW50cnktPnN0b3JhZ2VUeXBlID0gU1RfUEVSTUFORU5UOworICAgIGVsc2UgaWYgKCEgKG1hcC0+ZmxhZ3MgJiBOU0NNX05PTlZPTEFUSUxFKSkKKyAgICAgICAgZW50cnktPnN0b3JhZ2VUeXBlID0gU1RfVk9MQVRJTEU7CisgICAgZW50cnktPm1hcF9mbGFncyA9IG1hcC0+ZmxhZ3M7CisKKyAgICBlbnRyeS0+ZmluZ2VycHJpbnRfbGVuID0gc3RybGVuKG1hcC0+ZmluZ2VycHJpbnQpOworICAgIGlmIChlbnRyeS0+ZmluZ2VycHJpbnRfbGVuID4gc2l6ZW9mKGVudHJ5LT5maW5nZXJwcmludCkpCisgICAgICAgIGVudHJ5LT5maW5nZXJwcmludF9sZW4gPSBzaXplb2YoZW50cnktPmZpbmdlcnByaW50KSAtIDE7CisgICAgbWVtY3B5KGVudHJ5LT5maW5nZXJwcmludCwgbWFwLT5maW5nZXJwcmludCwgZW50cnktPmZpbmdlcnByaW50X2xlbik7CisgICAgZW50cnktPmZpbmdlcnByaW50W3NpemVvZihlbnRyeS0+ZmluZ2VycHJpbnQpIC0gMV0gPSAwOworICAgIGVudHJ5LT5oYXNoVHlwZSA9IG1hcC0+aGFzaFR5cGU7CisgICAgCisgICAgaWYgKG1hcC0+ZGF0YSkgeworICAgICAgICBlbnRyeS0+ZGF0YV9sZW4gPSBzdHJsZW4obWFwLT5kYXRhKTsKKyAgICAgICAgaWYgKGVudHJ5LT5kYXRhX2xlbikgeworICAgICAgICAgICAgaWYgKGVudHJ5LT5kYXRhX2xlbiA+IHNpemVvZihlbnRyeS0+ZGF0YSkpCisgICAgICAgICAgICAgICAgZW50cnktPmRhdGFfbGVuID0gc2l6ZW9mKGVudHJ5LT5kYXRhKSAtIDE7CisgICAgICAgICAgICBtZW1jcHkoZW50cnktPmRhdGEsIG1hcC0+ZGF0YSwgZW50cnktPmRhdGFfbGVuKTsKKyAgICAgICAgICAgIGVudHJ5LT5kYXRhW3NpemVvZihlbnRyeS0+ZGF0YSkgLSAxXSA9IDA7CisgICAgICAgIH0KKyAgICB9CisgICAgZW50cnktPm1hcFR5cGUgPSBtYXAtPm1hcFR5cGU7CisKKyAgICByZXR1cm4gcm93OworfQorCitzdGF0aWMgaW50CitfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICpjYWNoZSwgbmV0c25tcF90ZGF0YSAqdGFibGUpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKm1hcHM7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKm1hcF9pdHI7CisgICAgbmV0c25tcF9jZXJ0X21hcCAgKm1hcDsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIGNlcnRUb1RTTl9lbnRyeSAgICplbnRyeTsKKyAgICBpbnQgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6Y2FjaGU6bG9hZCIsICJjYWxsZWQsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7CisKKyAgICAvKiogZ2V0IGN1cnJlbnQgYWN0aXZlIG1hcHMgKi8KKyAgICBtYXBzID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIoKTsKKyAgICBpZiAoTlVMTCA9PSBtYXBzKQorICAgICAgICByZXR1cm4gMDsKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpsb2FkIiwgIm1hcHMgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUobWFwcykpKTsKKworICAgIG1hcF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IobWFwcyk7CisgICAgaWYgKE5VTEwgPT0gbWFwX2l0cikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpsb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IG1hcCBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpbnNlcnQgcm93cyBmb3IgYWN0aXZlIG1hcHMgaW50byB0YmwgY29udGFpbmVyCisgICAgICovCisgICAgbWFwID0gSVRFUkFUT1JfRklSU1QobWFwX2l0cik7CisgICAgZm9yKCA7IG1hcDsgbWFwID0gSVRFUkFUT1JfTkVYVChtYXBfaXRyKSkgeworCisgICAgICAgIHJvdyA9IF9lbnRyeV9mcm9tX21hcChtYXApOworICAgICAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgICAgIHJjID0tMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGVudHJ5ID0gKGNlcnRUb1RTTl9lbnRyeSopcm93LT5kYXRhOworICAgICAgICBlbnRyeS0+cm93U3RhdHVzID0gUlNfQUNUSVZFOworCisgICAgICAgIGlmIChuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGUsIHJvdykgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICB0bHN0bUNlcnRUb1RTTlRhYmxlX3JlbW92ZUVudHJ5KE5VTEwsIHJvdyk7CisgICAgICAgICAgICByYyA9IC0xOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShtYXBfaXRyKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmxvYWQiLCAiZG9uZSwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKmNhY2hlLCBuZXRzbm1wX3RkYXRhICp0YWJsZSkKK3sKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIG5ldHNubXBfaXRlcmF0b3IgICAqdGJsX2l0cjsKKyAgICBjZXJ0VG9UU05fZW50cnkgICAqZW50cnk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpmcmVlIiwgImNhbGxlZCwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIC8qKiBpbnNlcnQgcm93cyBmb3IgYWN0aXZlIG1hcHMgaW50byB0YmwgY29udGFpbmVyICovCisgICAgdGJsX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUih0YWJsZS0+Y29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSB0YmxfaXRyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOmNhY2hlOmZyZWUiLAorICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgbWFwIGl0ZXJhdG9yXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByb3cgPSBJVEVSQVRPUl9GSVJTVCh0YmxfaXRyKTsKKyAgICBmb3IoIDsgcm93OyByb3cgPSBJVEVSQVRPUl9ORVhUKHRibF9pdHIpKSB7CisgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbW92ZSBhbGwgYWN0aXZlIHJvd3MgKHRoZXkgYXJlIGluIHRoZSBtYXBzIGNvbnRhaW5lciBrZXB0CisgICAgICAgICAqIGJ5IHRoZSBsaWJyYXJ5KS4gS2VlcCBpbmFjdGl2ZSBvbmVzIGZvciBuZXh0IHRpbWUuCisgICAgICAgICAqLworICAgICAgICBpZiAoZW50cnktPnJvd1N0YXR1cyA9PSBSU19BQ1RJVkUpIHsKKyAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICAgICAgICAgIElURVJBVE9SX1JFTU9WRSh0YmxfaXRyKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UodGJsX2l0cik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpjYWNoZTpmcmVlIiwgImRvbmUsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7Cit9CisKK3N0YXRpYyB2b2lkCitfcGFyc2VfbWliX21hcHMoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBjZXJ0VG9UU05fZW50cnkgICAqZW50cnk7CisgICAgbmV0c25tcF9jZXJ0X21hcCAqbWFwID0gbmV0c25tcF9jZXJ0VG9UU05fcGFyc2VfY29tbW9uKCZsaW5lKTsKKworICAgIGlmIChOVUxMID09IGxpbmUpIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoImluY29tcGxldGUgbGluZSIpOworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobWFwKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1hcC0+ZmxhZ3MgPSBOU0NNX0ZST01fTUlCIHwgTlNDTV9OT05WT0xBVElMRTsKKyAgICByb3cgPSBfZW50cnlfZnJvbV9tYXAobWFwKTsKKyAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgZW50cnkgPSAoY2VydFRvVFNOX2VudHJ5Kilyb3ctPmRhdGE7CisgICAgZW50cnktPnJvd1N0YXR1cyA9IGF0b2kobGluZSk7CisgICAgZW50cnktPnN0b3JhZ2VUeXBlID0gU1RfTk9OVk9MQVRJTEU7CisKKyAgICAvKgorICAgICAqIGlmIHJvdyBpcyBhY3RpdmUsIGFkZCBpdCB0byB0aGUgbWFwcyBjb250YWluZXIgc28gaXQgaXMgYXZhaWxhYmxlCisgICAgICogZm9yIHVzZS4gRG8gbm90IGFkZCBpdCB0byB0aGUgdGFibGUsIHNpbmNlIGl0IHdpbGwgYmUgYWRkZWQKKyAgICAgKiBkdXJpbmcgY2FjaGVfbG9hZC4KKyAgICAgKi8KKyAgICBpZiAoUlNfQUNUSVZFID09IGVudHJ5LT5yb3dTdGF0dXMpIHsKKyAgICAgICAgaWYgKG5ldHNubXBfY2VydF9tYXBfYWRkKG1hcCkgIT0gMCkKKyAgICAgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7CisgICAgICAgIGlmIChuZXRzbm1wX3RkYXRhX2FkZF9yb3coX3RhYmxlLCByb3cpICE9IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgICAgIHRsc3RtQ2VydFRvVFNOVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICB9Cit9CisKK3N0YXRpYyBpbnQKK19zYXZlX2VudHJ5KGNlcnRUb1RTTl9lbnRyeSAqZW50cnksIHZvaWQgKmFwcF90eXBlKQoreworICAgIGNoYXIgYnVmW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmhhc2hUeXBlLCAqbWFwVHlwZSwgKmRhdGEgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBoYXNoVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBlbnRyeS0+aGFzaFR5cGUpOworICAgIGlmIChOVUxMID09IGhhc2hUeXBlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJza2lwcGluZyBlbnRyeSB1bmtub3duIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgZW50cnktPmhhc2hUeXBlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisgICAgbWFwVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfbWFwX3R5cGUiLCBlbnRyeS0+bWFwVHlwZSk7CisgICAgaWYgKFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkID09IGVudHJ5LT5tYXBUeXBlKQorICAgICAgICBkYXRhID0gZW50cnktPmRhdGE7CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVsZCAtLSVzICVzIC0tJXMgJXMgJWQiLAorICAgICAgICAgICAgIE1BUF9NSUJfQ09ORklHX1RPS0VOLCBlbnRyeS0+dGxzdG1DZXJ0VG9UU05JRCwgaGFzaFR5cGUsCisgICAgICAgICAgICAgZW50cnktPmZpbmdlcnByaW50LCBtYXBUeXBlLCBkYXRhID8gZGF0YSA6ICIiLCBlbnRyeS0+cm93U3RhdHVzKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOnNhdmUiLCAic2F2aW5nICclcydcbiIsIGJ1ZikpOworICAgIHJlYWRfY29uZmlnX3N0b3JlKGFwcF90eXBlLCBidWYpOworCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKK3N0YXRpYyBpbnQKK19zYXZlX21hcChuZXRzbm1wX2NlcnRfbWFwICptYXAsIGludCByb3dfc3RhdHVzLCB2b2lkICphcHBfdHlwZSkKK3sKKyAgICBjaGFyIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpoYXNoVHlwZSwgKm1hcFR5cGUsICpkYXRhID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IG1hcCkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIC8qKiBkb24ndCBzdG9yZSB2YWx1ZXMgZnJvbSBjb25mIGZpbGVzICovCisgICAgaWYgKCEgKG1hcC0+ZmxhZ3MgJiBOU0NNX05PTlZPTEFUSUxFKSkgeworICAgICAgICBERUJVR01TR1QoKCJ0bHN0bUNlcnRUb1RTTlRhYmxlOnNhdmUiLCAKKyAgICAgICAgICAgICAgICAgICAic2tpcHBpbmcgUk8vcGVybWFuZW50L3ZvbGF0aWxlIHJvd1xuIikpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICB9CisKKyAgICBoYXNoVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBtYXAtPmhhc2hUeXBlKTsKKyAgICBpZiAoTlVMTCA9PSBoYXNoVHlwZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2tpcHBpbmcgZW50cnkgdW5rbm93biBoYXNoIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgIG1hcC0+aGFzaFR5cGUpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKyAgICBtYXBUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9tYXBfdHlwZSIsIG1hcC0+bWFwVHlwZSk7CisgICAgaWYgKFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkID09IG1hcC0+bWFwVHlwZSkKKyAgICAgICAgZGF0YSA9IChjaGFyKiltYXAtPmRhdGE7CisgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiVzICVkIC0tJXMgJXMgLS0lcyAlcyAlZCIsCisgICAgICAgICAgICAgTUFQX01JQl9DT05GSUdfVE9LRU4sIG1hcC0+cHJpb3JpdHksIGhhc2hUeXBlLCBtYXAtPmZpbmdlcnByaW50LAorICAgICAgICAgICAgIG1hcFR5cGUsIGRhdGEgPyBkYXRhIDogIiIsIHJvd19zdGF0dXMpOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6c2F2ZSIsICJzYXZpbmcgJyVzJ1xuIiwgYnVmKSk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoYXBwX3R5cGUsIGJ1Zik7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorX3NhdmVfbWFwcyhpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQoreworICAgIGNoYXIgICAgICAgICAgICBzZXBbXSA9CisgICAgICAgICJcbiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIjsKKyAgICBjaGFyICAgICAgICAgICAgYnVmW10gPQorICAgICAgICAiI1xuIiAiIyBjZXJ0aWZpY2F0ZSBzZWNOYW1lIG1hcHBpbmcgcGVyc2lzdGVudCBkYXRhXG4iICIjIjsKKyAgICBjaGFyICAgICAgICAgICAqdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisgICAgbmV0c25tcF9jb250YWluZXIgKm1hcHMgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcigpOworICAgIG5ldHNubXBfdGRhdGFfcm93ICpyb3c7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKnRibF9pdHIsICptYXBfaXRyOworICAgIG5ldHNubXBfY2VydF9tYXAgICptYXA7CisgICAgY2VydFRvVFNOX2VudHJ5ICAgKmVudHJ5OworCisgICAgaWYgKChOVUxMID09IG1hcHMpIHx8ICgoQ09OVEFJTkVSX1NJWkUobWFwcykgPT0gMCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChDT05UQUlORVJfU0laRShfdGFibGUtPmNvbnRhaW5lcikgPT0gMCkpKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBidWYpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGFjdGl2ZSByb3dzIGZyb20gbWFwcworICAgICAqLworICAgIGlmIChOVUxMICE9IG1hcHMpIHsKKyAgICAgICAgbWFwX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihtYXBzKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gbWFwX2l0cikgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtQ2VydFRvVFNOVGFibGU6c2F2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgbWFwIGl0ZXJhdG9yXG4iKSk7CisgICAgICAgICAgICBtYXAgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1hcCA9IElURVJBVE9SX0ZJUlNUKG1hcF9pdHIpOworCisgICAgICAgIGZvciggOyBtYXA7IG1hcCA9IElURVJBVE9SX05FWFQobWFwX2l0cikpIHsKKyAgICAgICAgICAgIC8qKiBkb24ndCBzdG9yZSBjb25maWcgcm93cyAqLworICAgICAgICAgICAgaWYgKG1hcC0+ZmxhZ3MgJiBOU0NNX0ZST01fQ09ORklHKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgX3NhdmVfbWFwKG1hcCwgUlNfQUNUSVZFLCB0eXBlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBJVEVSQVRPUl9SRUxFQVNFKG1hcF9pdHIpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGluYWN0aXZlIHJvd3MgZnJvbSBtaWIKKyAgICAgKi8KKyAgICB0YmxfaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKF90YWJsZS0+Y29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSB0YmxfaXRyKQorICAgICAgICBERUJVR01TR1RMKCgidGxzdG1DZXJ0VG9UU05UYWJsZTpzYXZlIiwgImNhbnQgZ2V0IHRhYmxlIGl0ZXJhdG9yXG4iKSk7CisgICAgZWxzZSB7CisgICAgICAgIHJvdyA9IElURVJBVE9SX0ZJUlNUKHRibF9pdHIpOworICAgICAgICBmb3IoIDsgcm93OyByb3cgPSBJVEVSQVRPUl9ORVhUKHRibF9pdHIpKSB7CisgICAgICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNraXAgYWxsIGFjdGl2ZSByb3dzIChzaG91bGQgYmUgaW4gbWFwcyBhbmQgdGh1cyBzYXZlZAorICAgICAgICAgICAgICogYWJvdmUpIGFuZCB2b2xhdGlsZSByb3dzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKGVudHJ5LT5yb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB8fAorICAgICAgICAgICAgICAgIChlbnRyeS0+c3RvcmFnZVR5cGUgIT0gU1RfTk9OVk9MQVRJTEUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBfc2F2ZV9lbnRyeShlbnRyeSwgdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgSVRFUkFUT1JfUkVMRUFTRSh0YmxfaXRyKTsKKyAgICB9CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsICJcbiIpOworCisgICAgLyoKKyAgICAgKiBuZXZlciBmYWlscyAKKyAgICAgKi8KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisKK3N0YXRpYyBjb25zdCBvaWQgX3Rzbm1fYmFzZVtdID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxIH07CitzdGF0aWMgY29uc3QgaW50IF90c25tX2Jhc2VfbGVuID0gc2l6ZW9mKF90c25tX2Jhc2UpOworCitzdGF0aWMgb2lkCitfb2lkMnR5cGUob2lkICp2YWwsIGludCB2YWxfbGVuKQoreworICAgIG5ldHNubXBfYXNzZXJ0KHZhbCk7CisKKyAgICBpZiAodmFsX2xlbiAhPSAoX3Rzbm1fYmFzZV9sZW4gKyBzaXplb2Yob2lkKSkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmIChtZW1jbXAoX3Rzbm1fYmFzZSx2YWwsX3Rzbm1fYmFzZV9sZW4pICE9IDApCisgICAgICAgIHJldHVybiAtMjsKKworICAgIGlmICgodmFsW09JRF9MRU5HVEgoX3Rzbm1fYmFzZSldID4gVFNOTV90bHN0bUNlcnRfTUFYKSB8fAorICAgICAgICAoMCA9PSB2YWxbT0lEX0xFTkdUSChfdHNubV9iYXNlKV0pKQorICAgICAgICByZXR1cm4gLTM7CisKKyAgICByZXR1cm4gdmFsW09JRF9MRU5HVEgoX3Rzbm1fYmFzZSldOworfQorCisjaWYgMAorc3RhdGljIGludAorX3R5cGUyb2lkKGludCB0eXBlLCBvaWQgKnZhbCwgaW50ICp2YWxfbGVuKQoreworICAgIG5ldHNubXBfYXNzZXJ0KCB2YWwgJiYgdmFsX2xlbiApOworCisgICAgaWYgKCp2YWxfbGVuIDwgX3Rzbm1fYmFzZV9sZW4gKyBzaXplb2Yob2lkKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWVtY3B5KHZhbCwgX3Rzbm1fYmFzZSwgX3Rzbm1fYmFzZV9sZW4gKyBzaXplb2Yob2lkKSk7CisgICAgdmFsW190c25tX2Jhc2VfbGVuICsgc2l6ZW9mKG9pZCldID0gdHlwZTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYjgwOTcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUvc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkCisgKi8KKyNpZm5kZWYgU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX0gKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX0gKKworI2RlZmluZSBTTk1QX1RMU19UTV9DRVJUX0NPVU5UICAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgMQorI2RlZmluZSBTTk1QX1RMU19UTV9DRVJUX0NIQU5HRUQgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgMgorI2RlZmluZSBTTk1QX1RMU19UTV9DRVJUX1RBQkxFICAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgMworCisvKgorICogZnVuY3Rpb24gZGVjbGFyYXRpb25zIAorICovCit2b2lkICAgICAgICAgICAgaW5pdF9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSh2b2lkKTsKK3ZvaWQgICAgICAgICAgICBpbml0X3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlX2NvbnRleHQoY29uc3QgY2hhciAqKTsKKworLyoKKyAqIGluZGV4IGRlZmluaXRpb25zIGZvciB0YWJsZSB0bHN0bUNlcnRUb1RTTlRhYmxlIAorICovCisKKy8qCisgKiBjb2x1bW4gbnVtYmVyIGRlZmluaXRpb25zIGZvciB0YWJsZSB0bHN0bUNlcnRUb1RTTlRhYmxlIAorICovCisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fSUQgICAgICAgICAgICAgICAgICAgICAgIDEKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVCAgICAgICAgICAgICAgMgorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEUgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fREFUQSAgICAgICAgICAgICAgICAgICAgIDQKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9TVE9SQUdFVFlQRSAgICAgICAgICAgICAgNQorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUyAgICAgICAgICAgICAgICA2CisKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOX1RBQkxFX01JTl9DT0wgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVAorI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfTUFYX0NPTCBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1JPV1NUQVRVUworCisjZGVmaW5lIFNOTVBUTFNUTUNFUlRUT1RTTl9GSU5HRVJQUklOVF9NQVhfU0laRSAgICAgICAgICAyNTUKKyNkZWZpbmUgU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEVfTUFYX1NJWkUgICAgICAgICAgICAgIDEyOAorI2RlZmluZSBTTk1QVExTVE1DRVJUVE9UU05fREFUQV9NQVhfU0laRSAgICAgICAgICAgICAgICAgMTAyNAorCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FOUkZDODIyTmFtZSAgICAgICAgICAgICAyCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FORE5TTmFtZSAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FOSXBBZGRyZXNzICAgICAgICAgICAgICA0CisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FOQW55ICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZSAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0X01BWCAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWUKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVExTVE1DRVJUVE9UU05fVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODE0YmUyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgKQEAgLTAsMCArMSw2IEBACisjaWZuZGVmIFNOTVBUTFNUTVBBUkFNU1RBQkxFX0gKKyNkZWZpbmUgU05NUFRMU1RNUEFSQU1TVEFCTEVfSAorCitjb25maWdfcmVxdWlyZSh0bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUpCisKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRMU1RNUEFSQU1TVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDU0NDUyCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmMKQEAgLTAsMCArMSwxMjg2IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgInRsc3RtLW1pYi5oIgorCisjaW5jbHVkZSAic25tcFRsc3RtUGFyYW1zVGFibGUuaCIKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGFibGVfdGRhdGEpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0bHN0bXBhcmFtc19maW5kKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGxzdG1wYXJhbXNfZXh0ZXJuYWwpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjZXJ0X2ZpbmdlcnByaW50cykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2RlbGV0ZV90YWJsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2V4dHJhY3RfdGFibGUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV90ZGF0YV9yZW1vdmVfcm93KQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3ZiX3N0b3JhZ2V0eXBlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHRhYmxlX3RkYXRhX2luc2VydF9yb3cpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKy8qKiBYWFggLSBtb3ZlIHRoZXNlIHRvIHRhYmxlX2RhdGEgaGVhZGVyPyAqLworI2RlZmluZSBGQVRFX05FV0xZX0NSRUFURUQgICAgMQorI2RlZmluZSBGQVRFX05PX0NIQU5HRSAgICAgICAgMAorI2RlZmluZSBGQVRFX0RFTEVURV9NRSAgICAgICAgLTEKKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdGFibGUgc3RydWN0dXJlcworICoKKyAqLworICAgIC8qCisgICAgICogc3RydWN0dXJlIGZvciB1bmRvIHN0b3JhZ2UgYW5kIG90aGVyIHZhcnMgZm9yIHNldCBwcm9jZXNzaW5nCisgICAgICovCisgdHlwZWRlZiBzdHJ1Y3Qgc25tcFRsc3RtUGFyYW1zVGFibGVfdW5kb19zIHsKKyAgICBjaGFyICBmYXRlOworICAgIGNoYXIgIGNvcGllZDsKKyAgICBjaGFyICBpc19jb25zaXN0ZW50OworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXFbU05NUFRMU1RNUEFSQU1TVEFCTEVfTUFYX0NPTFVNTiArIDFdOworICAgIC8qIHVuZG8gQ29sdW1uIHNwYWNlICovCisgICAgY2hhciBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludFtTTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVF9NQVhfU0laRV07CisgICAgc2l6ZV90IHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbjsKKyAgICBjaGFyIHNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlOworICAgIGNoYXIgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzOworIH0gc25tcFRsc3RtUGFyYW1zVGFibGVfdW5kbzsKKworICAgIC8qCisgICAgICogVHlwaWNhbCBkYXRhIHN0cnVjdHVyZSBmb3IgYSByb3cgZW50cnkKKyAgICAgKi8KK3R5cGVkZWYgc3RydWN0IHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5X3MgeworICAgIC8qIEluZGV4IHZhbHVlcyAqLworICAgIGNoYXIgc25tcFRhcmdldFBhcmFtc05hbWVbU05NUFRBUkdFVFBBUkFNU05BTUVfTUFYX1NJWkVdOworICAgIHNpemVfdCBzbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW47CisKKyAgICAvKiBDb2x1bW4gdmFsdWVzICovCisgICAgY2hhciBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludFtTTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVF9NQVhfU0laRV07CisgICAgc2l6ZV90IHNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbjsKKyAgICBjaGFyIHNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlOworICAgIGNoYXIgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzOworCisgICAgY2hhciAgICAgICAgICAgIGhhc2hUeXBlOworICAgIGNoYXIgICAgICAgICAgICBwYXJhbXNfZmxhZ3M7CisKKyAgICAvKiB1c2VkIGR1cmluZyBzZXQgcHJvY2Vzc2luZyAqLworICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV91bmRvICp1bmRvOworfSBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeTsKKworc3RhdGljIE5ldHNubXBfTm9kZV9IYW5kbGVyIHNubXBUbHN0bVBhcmFtc1RhYmxlX2hhbmRsZXI7CitzdGF0aWMgTmV0c25tcENhY2hlTG9hZCBzbm1wVGxzdG1QYXJhbXNUYWJsZV9sb2FkOworc3RhdGljIE5ldHNubXBDYWNoZUZyZWUgc25tcFRsc3RtUGFyYW1zVGFibGVfZnJlZTsKKworc3RhdGljIGludCBfY291bnRfaGFuZGxlcihuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKTsKK3N0YXRpYyB2b2lkIF90bHN0bVBhcmFtc19pbml0X3BlcnNpc3RlbmNlKHZvaWQpOworc3RhdGljIHZvaWQgX3BhcmFtc19hZGQoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KTsKK3N0YXRpYyB2b2lkIF9wYXJhbXNfcmVtb3ZlKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSk7CitzdGF0aWMgdm9pZCBfcGFyYW1zX3R3ZWFrX3N0b3JhZ2Uoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KTsKKworc3RhdGljIHVpbnQzMl90ICAgICAgICAgICAgICAgIF9sYXN0X2NoYW5nZWQgPSAwOworc3RhdGljIG5ldHNubXBfdGRhdGEgICAgICAgICAgKl90YWJsZV9kYXRhID0gTlVMTDsKKworLyoKKyAqIEluaXRpYWxpemUgdGhlIHNubXBUbHN0bVBhcmFtc1RhYmxlIHRhYmxlIGJ5IGRlZmluaW5nIGl0cyBjb250ZW50cworICogYW5kIGhvdyBpdCdzIHN0cnVjdHVyZWQKKyAqLwordm9pZAoraW5pdF9zbm1wVGxzdG1QYXJhbXNUYWJsZSh2b2lkKQoreworICAgIG9pZCByZWdfb2lkW10gPSB7U05NUF9UTFNfVE1fQkFTRSwyLDIsMSw2fTsKKyAgICBjb25zdCBzaXplX3QgcmVnX29pZF9sZW4gICA9IE9JRF9MRU5HVEgocmVnX29pZCk7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF9jYWNoZSAgICAgICAgICAgICAgICAgICAqY2FjaGU7CisgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAgICAqd2F0Y2hlcjsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmluaXQiLCAiaW5pdGlhbGl6aW5nIHRhYmxlIHNubXBUbHN0bVBhcmFtc1RhYmxlXG4iKSk7CisKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbgorICAgICAgICAoInNubXBUbHN0bVBhcmFtc1RhYmxlIiwgc25tcFRsc3RtUGFyYW1zVGFibGVfaGFuZGxlciwgcmVnX29pZCwKKyAgICAgICAgIHJlZ19vaWRfbGVuLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworCisgICAgX3RhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZSggInNubXBUbHN0bVBhcmFtc1RhYmxlIiwgMCApOworICAgIGlmIChOVUxMID09IF90YWJsZV9kYXRhKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIHRkYXRhIHRhYmxlIGZvciBzbm1wVGxzdG1QYXJhbXNUYWJsZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZShTTk1QVExTVE1QQVJBTVNUQUJMRV9USU1FT1VULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2xvYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsIHJlZ19vaWRfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3Igc25tcFRsc3RtUGFyYW1zVGFibGVcbiIpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2RlbGV0ZV90YWJsZShfdGFibGVfZGF0YSk7CisgICAgICAgIF90YWJsZV9kYXRhID0gTlVMTDsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjYWNoZS0+bWFnaWMgPSAodm9pZCAqKV90YWJsZV9kYXRhOworICAgIGNhY2hlLT5mbGFncyA9IE5FVFNOTVBfQ0FDSEVfRE9OVF9JTlZBTElEQVRFX09OX1NFVDsKKworICAgIHRhYmxlX2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfaW5mbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyB0YWJsZSBpbmZvIGZvciBzbm1wVGxzdG1QYXJhbXNUYWJsZVxuIik7CisgICAgICAgIG5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlKF90YWJsZV9kYXRhKTsKKyAgICAgICAgX3RhYmxlX2RhdGEgPSBOVUxMOworICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIC8qCisgICAgICogcG9wdWxhdGUgaW5kZXggdHlwZXMKKyAgICAgKi8KKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4OiBzbm1wVGFyZ2V0UGFyYW1zTmFtZSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9QUklWX0lNUExJRURfT0NURVRfU1RSLCAgMCk7CisKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gU05NUFRMU1RNUEFSQU1TVEFCTEVfTUlOX0NPTFVNTjsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gU05NUFRMU1RNUEFSQU1TVEFCTEVfTUFYX0NPTFVNTjsKKyAgICAKKyAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKCByZWcsIF90YWJsZV9kYXRhLCB0YWJsZV9pbmZvICk7CisgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ0YWJsZV9jb250YWluZXIiKTsKKworICAgIC8qCisgICAgICogcmVnaXN0ZXIgc2NhbGFycworICAgICAqLworICAgIHJlZ19vaWRbMTBdID0gNDsKKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFRsc3RtUGFyYW1zQ291bnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb3VudF9oYW5kbGVyLCByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgocmVnX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IHJlZykKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBjcmVhdGUgaGFuZGxlciBmb3Igc25tcFRsc3RtUGFyYW1zQ291bnRcbiIpOworICAgIGVsc2UgeworICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhcihyZWcpOworICAgICAgICBpZiAoY2FjaGUpIAorICAgICAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUocmVnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic25tcFRsc3RtUGFyYW1zQ291bnQiKTsKKyAgICB9CisgICAgCisgICAgcmVnX29pZFsxMF0gPSA1OworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAic25tcFRsc3RtUGFyYW1zVGFibGVMYXN0Q2hhbmdlZCIsIE5VTEwsIHJlZ19vaWQsCisgICAgICAgIE9JRF9MRU5HVEgocmVnX29pZCksIEhBTkRMRVJfQ0FOX1JPTkxZKTsKKyAgICB3YXRjaGVyID0gbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKCh2b2lkKikmX2xhc3RfY2hhbmdlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfbGFzdF9jaGFuZ2VkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9USU1FVElDS1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVRDSEVSX0ZJWEVEX1NJWkUpOworICAgIGlmICgoTlVMTCA9PSByZWcpIHx8IChOVUxMID09IHdhdGNoZXIpKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiY291bGQgbm90IGNyZWF0ZSBoYW5kbGVyIGZvciBzbm1wVGxzdG1QYXJhbXNUYWJsZUxhc3RDaGFuZ2VkXG4iKTsKKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKHJlZywgd2F0Y2hlcik7CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlCisgICAgICovCisgICAgX3Rsc3RtUGFyYW1zX2luaXRfcGVyc2lzdGVuY2UoKTsKK30KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdXRpbGl0eSBmdW5jdGlvbnMgZm9yIHRhYmxlIHN0cnVjdHVyZXMKKyAqCisgKi8KKy8qIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlICovCituZXRzbm1wX3RkYXRhX3JvdyAqCitzbm1wVGxzdG1QYXJhbXNUYWJsZV9jcmVhdGVFbnRyeShuZXRzbm1wX3RkYXRhICp0YWJsZV9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogc25tcFRhcmdldFBhcmFtc05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc25tcFRhcmdldFBhcmFtc05hbWVfbGVuICkgeworICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworCisgICAgaWYgKChOVUxMID09IHNubXBUYXJnZXRQYXJhbXNOYW1lKSB8fCAoc25tcFRhcmdldFBhcmFtc05hbWVfbGVuID4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJvdyA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3JvdygpOworICAgIGlmICghcm93KSB7CisgICAgICAgIFNOTVBfRlJFRShlbnRyeSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICByb3ctPmRhdGEgPSBlbnRyeTsKKworICAgIERFQlVHTVNHVCgoInRsc3RtUGFyYW1zVGFibGU6ZW50cnk6Y3JlYXRlIiwgImVudHJ5ICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgZW50cnksIHJvdykpOworCisgICAgREVCVUdJRigic25tcFRsc3RtUGFyYW1UYWJsZTplbnRyeTpjcmVhdGUiKSB7CisgICAgICAgIGNoYXIgbmFtZVtzaXplb2YoZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lKSsxXTsKKyAgICAgICAgc25wcmludGYobmFtZSwgc2l6ZW9mKG5hbWUpLCAiJXMiLCBzbm1wVGFyZ2V0UGFyYW1zTmFtZSk7CisgICAgICAgIERFQlVHTVNHVCgoInRsc3RtUGFyYW1zVGFibGU6ZW50cnk6Y3JlYXRlIiwKKyAgICAgICAgICAgICAgICAgICAiZW50cnkgJXMgJXAgLyByb3cgJXBcbiIsCisgICAgICAgICAgICAgICAgICAgbmFtZSwgZW50cnksIHJvdykpOworICAgIH0KKworICAgIC8qCisgICAgICogcG9wdWxhdGUgaW5kZXgKKyAgICAgKi8KKyAgICBtZW1jcHkoZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lLCBzbm1wVGFyZ2V0UGFyYW1zTmFtZSwKKyAgICAgICAgICAgc25tcFRhcmdldFBhcmFtc05hbWVfbGVuKTsKKyAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWVfbGVuID0gc25tcFRhcmdldFBhcmFtc05hbWVfbGVuOworICAgIG5ldHNubXBfdGRhdGFfcm93X2FkZF9pbmRleCggcm93LCBBU05fUFJJVl9JTVBMSUVEX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUYXJnZXRQYXJhbXNOYW1lX2xlbik7CisKKyAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRbMF0gPSAnXDAnOworICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPSAwOworICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19OT1RSRUFEWTsKKyAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPSBTVF9OT05WT0xBVElMRTsKKyAgICAgICAgCisgICAgaWYgKHRhYmxlX2RhdGEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cm93Omluc2VydCIsICJyb3cgJXBcbiIsCisgICAgICAgICAgICAgICAgICAgIHJvdykpOworICAgICAgICBuZXRzbm1wX3RkYXRhX2FkZF9yb3coIHRhYmxlX2RhdGEsIHJvdyApOworICAgIH0KKyAgICByZXR1cm4gcm93OworfQorCisvKiBhbGxvY2F0ZSB1bmRvIHJlc291cmNlcyAqLworc3RhdGljIHNubXBUbHN0bVBhcmFtc1RhYmxlX3VuZG8gKgorX2FsbG9jVW5kbyhzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgZW50cnktPnVuZG8gPSBTTk1QX01BTExPQ19UWVBFREVGKHNubXBUbHN0bVBhcmFtc1RhYmxlX3VuZG8pOworICAgIGlmICghZW50cnktPnVuZG8pCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAtMTsgLyogZG9uJ3Qga25vdyAqLworCisgICAgLyogVE9ETzogYWxsb2NhdGVkIGFueSBvdGhlciByZXNvdXJjZXMgbmVlZGVkICovCisKKyAgICByZXR1cm4gZW50cnktPnVuZG87Cit9CisKKy8qIGZyZWUgdW5kbyByZXNvdXJjZXMgKi8KK3N0YXRpYyB2b2lkCitfZnJlZVVuZG8oc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIGlmICghZW50cnkgfHwgIWVudHJ5LT51bmRvKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBUT0RPOiByZWxlYXNlIGFueSBhbGxvY2F0ZWQgcmVzb3VyY2VzICovCisgICAgU05NUF9GUkVFKGVudHJ5LT51bmRvKTsKK30KKworLyogcmVtb3ZlIGEgcm93IGZyb20gdGhlIHRhYmxlICovCit2b2lkCitzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeShuZXRzbm1wX3RkYXRhICAgICAqdGFibGVfZGF0YSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93KQoreworICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIGlmICghcm93KQorICAgICAgICByZXR1cm47ICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCisKKyAgICBlbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKXJvdy0+ZGF0YTsKKworICAgIERFQlVHTVNHVCgoInRsc3RtUGFyYW1zVGFibGU6ZW50cnk6ZGVsZXRlIiwgImVudHJ5ICVwIC8gcm93ICVwXG4iLAorICAgICAgICAgICAgICAgZW50cnksIHJvdykpOworCisgICAgaWYgKHRhYmxlX2RhdGEpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cm93OnJlbW92ZSIsICJyb3cgJXBcbiIsIHJvdykpOworICAgICAgICBuZXRzbm1wX3RkYXRhX3JlbW92ZV9hbmRfZGVsZXRlX3JvdyggdGFibGVfZGF0YSwgcm93ICk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfcm93KCByb3cgKTsgICAgCisKKyAgICBpZiAoZW50cnkgJiYgZW50cnktPnVuZG8pCisgICAgICAgIF9mcmVlVW5kbyhlbnRyeSk7CisgICAgU05NUF9GUkVFKCBlbnRyeSApOyAvKiBUT0RPIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGhhbmRsZSBjYWNoZSAvIGludGVyYWN0aW9ucyB3aXRoIHNubXBUbHN0bVBhcmFtcyBjb250YWluZXIgaW4gc25tcGxpYgorICoKKyAqLworc3RhdGljIHZvaWQKK19wYXJhbXNfYWRkKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeSkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgICAgICpwYXJhbXM7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cGFyYW1zOmFkZCIsICJuYW1lICVzLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUsIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkpOworCisgICAgcGFyYW1zID0KKyAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19jcmVhdGUoZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnRyeS0+aGFzaFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbik7CisgICAgaWYgKE5VTEwgPT0gcGFyYW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBwYXJhbXMtPmZsYWdzID0gVExTVE1fUEFSQU1TX0ZST01fTUlCOworICAgIGlmIChlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPT0gU1RfTk9OVk9MQVRJTEUpCisgICAgICAgIHBhcmFtcy0+ZmxhZ3MgfD0gVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFOworCisgICAgaWYgKG5ldHNubXBfdGxzdG1QYXJhbXNfYWRkKHBhcmFtcykgIT0gMCkgeworICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUocGFyYW1zKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitfcGFyYW1zX3JlbW92ZShzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnkpCit7CisgICAgc25tcFRsc3RtUGFyYW1zICAgICAgaW5kZXgsICpmb3VuZDsKKworICAgIGlmIChOVUxMID09IGVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpwYXJhbXM6cmVtb3ZlIiwgIm5hbWUgJXNcbiIsCisgICAgICAgICAgICAgICAgZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lKSk7CisKKyAgICBpbmRleC5uYW1lID0gZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lOworICAgIGZvdW5kID0gbmV0c25tcF90bHN0bVBhcmFtc19maW5kKCZpbmRleCk7CisgICAgaWYgKGZvdW5kKSB7CisgICAgICAgIG5ldHNubXBfdGxzdG1QYXJhbXNfcmVtb3ZlKGZvdW5kKTsKKyAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKGZvdW5kKTsKKyAgICB9CisgICAgZW50cnktPnBhcmFtc19mbGFncyA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitfcGFyYW1zX3R3ZWFrX3N0b3JhZ2Uoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5KQoreworICAgIHNubXBUbHN0bVBhcmFtcyAgICAgKnBhcmFtcywgaW5kZXg7CisKKyAgICBpZiAoTlVMTCA9PSBlbnRyeSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6cGFyYW1zOnR3ZWFrIiwgIm5hbWUgJXMsIHN0ICVkXG4iLAorICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZSwgZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlKSk7CisKKyAgICBpbmRleC5uYW1lID0gZW50cnktPnNubXBUYXJnZXRQYXJhbXNOYW1lOworICAgIHBhcmFtcyA9IG5ldHNubXBfdGxzdG1QYXJhbXNfZmluZCgmaW5kZXgpOworICAgIGlmIChOVUxMID09IHBhcmFtcykgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpwYXJhbXM6dHdlYWsiLAorICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgZmluZCBwYXJhbXMhXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID09IFNUX05PTlZPTEFUSUxFKQorICAgICAgICBwYXJhbXMtPmZsYWdzIHw9IFRMU1RNX1BBUkFNU19OT05WT0xBVElMRTsKKyAgICBlbHNlCisgICAgICAgIHBhcmFtcy0+ZmxhZ3MgJj0gflRMU1RNX1BBUkFNU19OT05WT0xBVElMRTsKK30KKworc3RhdGljIG5ldHNubXBfdGRhdGFfcm93ICoKK19lbnRyeV9mcm9tX3BhcmFtcyhzbm1wVGxzdG1QYXJhbXMgICpwYXJhbXMpCit7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgKnJvdzsKKyAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqZW50cnk7CisKKyAgICByb3cgPSBzbm1wVGxzdG1QYXJhbXNUYWJsZV9jcmVhdGVFbnRyeShOVUxMLCBwYXJhbXMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4ocGFyYW1zLT5uYW1lKSk7CisgICAgaWYgKE5VTEwgPT0gcm93KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW4gY3JlYXRlIHNubXBUbHN0bVBhcmFtcyByb3cgZW50cnlcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZW50cnkgPSByb3ctPmRhdGE7CisKKyAgICBpZiAocGFyYW1zLT5mbGFncyAmIFRMU1RNX1BBUkFNU19GUk9NX0NPTkZJRykKKyAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlID0gU1RfUEVSTUFORU5UOworICAgIGVsc2UgaWYgKCEgKHBhcmFtcy0+ZmxhZ3MgJiBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEUpKQorICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPSBTVF9WT0xBVElMRTsKKworICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19BQ1RJVkU7CisKKyAgICBpZiAocGFyYW1zLT5maW5nZXJwcmludCkgeworICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0gCisgICAgICAgICAgICBzdHJsZW4ocGFyYW1zLT5maW5nZXJwcmludCk7CisgICAgICAgIGlmIChlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID4KKyAgICAgICAgICAgIHNpemVvZihlbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKQorICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgc2l6ZW9mKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCkgLSAxOworICAgICAgICBtZW1jcHkoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LCBwYXJhbXMtPmZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbik7CisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludFtzaXplb2YoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSAtIDFdID0gMDsKKyAgICB9CisgICAgZW50cnktPmhhc2hUeXBlID0gcGFyYW1zLT5oYXNoVHlwZTsKKyAgICBlbnRyeS0+cGFyYW1zX2ZsYWdzID0gcGFyYW1zLT5mbGFnczsKKworICAgIHJldHVybiByb3c7Cit9CisKK3N0YXRpYyBpbnQKK3NubXBUbHN0bVBhcmFtc1RhYmxlX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMgKQorIHsKKyAgICBuZXRzbm1wX3RkYXRhICAgICAqdGFibGUgPSAobmV0c25tcF90ZGF0YSAqKXZtYWdpYzsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIG5ldHNubXBfY29udGFpbmVyICphY3RpdmVfcGFyYW1zOworICAgIG5ldHNubXBfaXRlcmF0b3IgICppdHI7CisgICAgc25tcFRsc3RtUGFyYW1zICAgKnBhcmFtczsKKyAgICBpbnQgICAgICAgICAgICAgICAgcmMgPSAwOworCisgICAgYWN0aXZlX3BhcmFtcyA9IG5ldHNubXBfdGxzdG1QYXJhbXNfY29udGFpbmVyKCk7CisgICAgaWYgKE5VTEwgPT0gYWN0aXZlX3BhcmFtcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpjYWNoZTpsb2FkIiwgInNubXBUbHN0bVBhcmFtcyAlIiBORVRTTk1QX1BSSXogImQgcm93c1xuIiwKKyAgICAgICAgICAgICAgICBDT05UQUlORVJfU0laRShhY3RpdmVfcGFyYW1zKSkpOworICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihhY3RpdmVfcGFyYW1zKTsKKyAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6Y2FjaGU6bG9hZCIsCisgICAgICAgICAgICAgICAgICAgICJjYW50IGdldCBpdGVyYXRvclxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpbnNlcnQgcm93cyBmb3IgYWN0aXZlIHBhcmFtcyBpbnRvIHRibCBjb250YWluZXIKKyAgICAgKi8KKyAgICBwYXJhbXMgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgIGZvciggOyBwYXJhbXM7IHBhcmFtcyA9IElURVJBVE9SX05FWFQoaXRyKSkgeworCisgICAgICAgIHJvdyA9IF9lbnRyeV9mcm9tX3BhcmFtcyhwYXJhbXMpOworICAgICAgICBpZiAoTlVMTCA9PSByb3cpIHsKKyAgICAgICAgICAgIHJjID0tMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChuZXRzbm1wX3RkYXRhX2FkZF9yb3codGFibGUsIHJvdykgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeShOVUxMLCByb3cpOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtc1RhYmxlOmNhY2hlOmxvYWQiLCAiZG9uZSwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIHJldHVybiByYzsKK30KKworc3RhdGljIHZvaWQKK3NubXBUbHN0bVBhcmFtc1RhYmxlX2ZyZWUoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMgKQoreworICAgIG5ldHNubXBfdGRhdGEgICAgICAgICAgICAqdGFibGUgPSAobmV0c25tcF90ZGF0YSAqKXZtYWdpYzsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAgICAgICAgKnJvdzsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgICAgICAgKnRibF9pdHI7CisgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgICAqZW50cnk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpjYWNoZTpmcmVlIiwgImNhbGxlZCwgJSIgTkVUU05NUF9QUkl6ICJkIHJvd3NcbiIsCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUodGFibGUtPmNvbnRhaW5lcikpKTsKKworICAgIHRibF9pdHIgPSBDT05UQUlORVJfSVRFUkFUT1IodGFibGUtPmNvbnRhaW5lcik7CisgICAgaWYgKE5VTEwgPT0gdGJsX2l0cikgeworICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpjYWNoZTpmcmVlIiwKKyAgICAgICAgICAgICAgICAgICAgImNhbnQgZ2V0IGVudHJ5IGl0ZXJhdG9yXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByb3cgPSBJVEVSQVRPUl9GSVJTVCh0YmxfaXRyKTsKKyAgICBmb3IoIDsgcm93OyByb3cgPSBJVEVSQVRPUl9ORVhUKHRibF9pdHIpKSB7CisgICAgICAgIGVudHJ5ID0gcm93LT5kYXRhOworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbW92ZSBhbGwgYWN0aXZlIHJvd3MgKHRoZXkgYXJlIGluIHRoZSBwYXJhbXMgY29udGFpbmVyIGtlcHQKKyAgICAgICAgICogYnkgdGhlIGxpYnJhcnkpLiBLZWVwIGluYWN0aXZlIG9uZXMgZm9yIG5leHQgdGltZS4KKyAgICAgICAgICovCisgICAgICAgIGlmIChlbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID09IFJTX0FDVElWRSkgeworICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkoTlVMTCwgcm93KTsKKyAgICAgICAgICAgIElURVJBVE9SX1JFTU9WRSh0YmxfaXRyKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UodGJsX2l0cik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpjYWNoZTpmcmVlIiwgImRvbmUsICUiIE5FVFNOTVBfUFJJeiAiZCByb3dzXG4iLAorICAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKHRhYmxlLT5jb250YWluZXIpKSk7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSBzbm1wVGxzdG1QYXJhbXNUYWJsZSB0YWJsZQorICoKKyAqLworc3RhdGljIGludAorc25tcFRsc3RtUGFyYW1zVGFibGVfaGFuZGxlcigKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICAgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWdpbmZvLAorICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICAgICAgICAqcmVxaW5mbywKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICAgICAgKnJlcXVlc3RzKSB7CisKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxdWVzdCA9IE5VTEw7CisgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF90ZGF0YSAgICAgICAgICAgICAgKnRhYmxlX2RhdGE7CisgICAgbmV0c25tcF90ZGF0YV9yb3cgICAgICAgICAgKnRhYmxlX3JvdzsKKyAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAgICAgICAgICAqdGFibGVfZW50cnk7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PRVJST1I7CisgICAgCisgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6aGFuZGxlciIsICJQcm9jZXNzaW5nICVzIG1vZGUgKCVkKSByZXF1ZXN0XG4iLAorICAgICAgICAgICAgICAgIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImFnZW50X21vZGUiLCByZXFpbmZvLT5tb2RlKSwKKyAgICAgICAgICAgICAgICByZXFpbmZvLT5tb2RlKSk7CisKKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIEdFVCAjIyMjIworICAgICAqCisgICAgICogICBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCisgICAgICovCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQ6IAorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHVfY2hhciBiaW5bNDJdLCAqcHRyID0gYmluOworICAgICAgICAgICAgICAgIHNpemVfdCBsZW4gPSBzaXplb2YoYmluKSwgb2Zmc2V0ID0gMTsKKyAgICAgICAgICAgICAgICBpbnQgICAgcmM7CisgICAgICAgICAgICAgICAgYmluWzBdID0gdGFibGVfZW50cnktPmhhc2hUeXBlOworICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KHRhYmxlX2VudHJ5LT5oYXNoVHlwZSAhPSAwKTsKKyAgICAgICAgICAgICAgICByYyA9IG5ldHNubXBfaGV4X3RvX2JpbmFyeSgKKyAgICAgICAgICAgICAgICAgICAgJnB0ciwgJmxlbiwgJm9mZnNldCwgMCwKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50LCBOVUxMKTsKKyAgICAgICAgICAgICAgICBpZiAoMSAhPSByYykKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmluLCBvZmZzZXQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVCAqLworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSk7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFICovCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgIH0gLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfR0VUICovCisKKyAgICAgICAgLyoKKyAgICAgICAgICogV3JpdGUtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNFUlZFMSAjIyMjIworICAgICAqCisgICAgICogICBJbiBSRVNFUlZFMSB3ZSBhcmUganVzdCBjaGVja2luZyBiYXNpYyBBU04uMSBzaXplL3R5cGUgcmVzdHJpY3Rpb25zLgorICAgICAqIFlvdSBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGNoYW5nZSBhbnkgb2YgdGhpcyBjb2RlLiBEb24ndCBjaGFuZ2UgYW55CisgICAgICogb2YgdGhlIGNvbHVtbiB2YWx1ZXMgaGVyZS4gU2F2ZSB0aGF0IGZvciB0aGUgQUNUSU9OIHBoYXNlLgorICAgICAqCisgICAgICogICBUaGUgbmV4dCBwaGFzZSBpcyBSRVNFUlZFMiBvciBGUkVFLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoKE5VTEwgIT0gdGFibGVfZW50cnkpICYmCisgICAgICAgICAgICAgICAgKFNUX1JFQURPTkxZID09IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSkpIHsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGZvciBlYWNoIGNvbHVtbiwgYWxsb2NhdGUgYW55IGFkZGl0aW9uYWwgcmVzb3VyY2VzIG5lZWRlZAorICAgICAgICAgICAgICogYmV5b25kIHdoYXQgaXMgaW4gdGhlIHVuZG8gc3RydWN0dXJlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQ6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fT0NURVRfU1RSLCBzaXplb2YodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSk7CisgICAgICAgICAgICAgICAgLyoqIGNoZWNrIGxlbi9hbGdvcml0aG0gTUlCIHJlcXVpcmVtZW50cyAqLworICAgICAgICAgICAgICAgIGlmIChTTk1QX0VSUl9OT0VSUk9SID09IHJldCkKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jZXJ0X2NoZWNrX3ZiX2ZpbmdlcnByaW50KHJlcXVlc3QtPnJlcXVlc3R2Yik7CisKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl9zdG9yYWdldHlwZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlIDogU1RfTk9ORSApKTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEUgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTOgorICAgICAgICAgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgOiBSU19OT05FWElTVEVOVCApLAorICAgICAgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeSA/IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA6IFNUX05PTkUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICovCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX05PVFdSSVRBQkxFOworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggY29sbnVtICovCisKKyAgICAgICAgICAgIGlmICggcmV0ICE9IFNOTVBfRVJSX05PRVJST1IgKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9LyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfU0VUX1JFU0VSVkUxICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBSRVNFUlZFMiAjIyMjIworICAgICAqCisgICAgICogICBSRVNFUlZFMiBpcyBmb3IgY2hlY2tpbmcgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgZnJvbSB0aGUgTUlCLgorICAgICAqIFNpbmNlIHRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgb2Z0ZW4gaW4gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBvYmplY3QsCisgICAgICogbWliMmMgY2FuJ3QgZ2VuZXJhdGUgY29kZS4gSXQncyBwb3NzaWJsZSB0aGF0IHlvdSBuZWVkIHRvIGFkZAorICAgICAqIGFkZGl0aW9uYWwgY2hlY2tzIGhlcmUuIEhvd2V2ZXIsIGRvbid0IGNoYW5nZSBhbnkgb2YgdGhlIGNvbHVtbgorICAgICAqIHZhbHVlcyBoZXJlLiBTYXZlIHRoYXQgZm9yIHRoZSBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoZSBuZXh0IHBoYXNlIGlzIEFDVElPTiBvciBGUkVFLgorICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgPSBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvID0gbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIGlmIG5vIHRhYmxlX3JvdywgY3JlYXRlIG9uZQorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICB0YWJsZV9yb3cgPSBzbm1wVGxzdG1QYXJhbXNUYWJsZV9jcmVhdGVFbnRyeQorICAgICAgICAgICAgICAgICAgICAodGFibGVfZGF0YSwgIChjaGFyKil0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuc3RyaW5nLCAKKyAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIGlmICghdGFibGVfcm93KSB7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IHRhYmxlX3Jvdy0+ZGF0YTsKKyAgICAgICAgICAgICAgICBfYWxsb2NVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT51bmRvKSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX3JlbW92ZUVudHJ5KHRhYmxlX2RhdGEsIHRhYmxlX3Jvdyk7CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX3JvdyA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSA9IEZBVEVfTkVXTFlfQ1JFQVRFRDsKKyAgICAgICAgICAgICAgICAvKiogYXNzb2NpYXRlIHJvdyB3aXRoIHJlcXVlc3RzICovCisgICAgICAgICAgICAgICAgbmV0c25tcF9pbnNlcnRfdGRhdGFfcm93KCByZXF1ZXN0LCB0YWJsZV9yb3cgKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgLyoqIGFsbG9jYXRlIHVuZG8gc3RydWN0dXJlLCBpZiBuZWVkZWQgKi8KKyAgICAgICAgICAgIGlmKCF0YWJsZV9lbnRyeS0+dW5kbykgeworICAgICAgICAgICAgICAgIF9hbGxvY1VuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGlmICghdGFibGVfZW50cnktPnVuZG8pIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfUkVTT1VSQ0VVTkFWQUlMQUJMRTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICAvKiogZG9uJ3QgYWxsb3cgbXVsdGlwbGUgc2V0cyBvZiBzYW1lIGNvbHVtbiAqLworICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbdGFibGVfaW5mby0+Y29sbnVtXSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoInRsc3RtUGFyYW1zVGFibGU6cmVzZXJ2ZTIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIm11bHRpcGxlIHNldHMgdG8gY29sICVkIGluIHJlcXVlc3RcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9pbmZvLT5jb2xudW0pKTsKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnJlcVt0YWJsZV9pbmZvLT5jb2xudW1dID0gcmVxdWVzdDsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCByZXQgIT0gU05NUF9FUlJfTk9FUlJPUiApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gLyogZm9yIHJlcXVlc3RzICovCisKKyAgICAgICAgLyoqIG1ha2Ugc3VyZSByb3dzdGF0dXMgaXMgdXNlZCB0byBjcmVhdGUgcm93cyAqLworICAgICAgICBpZiAoIHJldCA9PSBTTk1QX0VSUl9OT0VSUk9SICkgeworICAgICAgICAgICAgZm9yIChyZXF1ZXN0ID0gcmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3QgPSByZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgaWYgKCh0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSAhPSBGQVRFX05FV0xZX0NSRUFURUQpIHx8CisgICAgICAgICAgICAgICAgICAgICh0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVNdKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSAvKiBmb3IgcmVxdWVzdHMgLyBjcmVhdGlvbiAqLworICAgICAgICB9IC8qIGlmIG5vIGVycm9yICovCisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfU0VUX1JFU0VSVkUyICovCisKKyAgICAvKiogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgRlJFRSAjIyMjIworICAgICAqCisgICAgICogICBGUkVFIGlzIGZvciBjbGVhbmluZyB1cCBhZnRlciBhIGZhaWxlZCByZXF1ZXN0IChkdXJpbmcgZWl0aGVyCisgICAgICogUkVTRVJWRTEgb3IgUkVTRVJWRTIpLiBTbyBhbnkgYWxsb2NhdGVkIHJlc291cmNlcyBuZWVkIHRvIGJlCisgICAgICogcmVsZWFzZWQuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgorICAgICAgICAvKgorICAgICAgICAgKiByZWxlYXNlIHVuZG8gcmVzb3VyY2VzCisgICAgICAgICAqIHJlbW92ZSBhbnkgbmV3bHkgY3JlYXRlZCByb3dzCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ICAgPSAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyggIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZGF0YSAgPSAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgfHwgIXRhYmxlX2VudHJ5LT51bmRvICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KCByZXF1ZXN0LCB0YWJsZV9yb3cgKTsKKworICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSApCisgICAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkoIHRhYmxlX2RhdGEsIHRhYmxlX3JvdyApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7IC8qIGNhc2UgTU9ERV9TRVRfRlJFRSAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBBQ1RJT04gIyMjIyMKKyAgICAgKgorICAgICAqICAgSW4gdGhlIEFDVElPTiBwaGFzZSwgd2UgcGVyZm9ybSBhbnkgc2V0cyB0aGF0IGNhbiBiZSB1bmRvbmUuCisgICAgICogKFNhdmUgYW55dGhpbmcgdGhhdCBjYW4ndCBiZSB1bmRvbmUgZm9yIHRoZSBDT01NSVQgcGhhc2UuKQorICAgICAqCisgICAgICogICBBZnRlciBpbmRpdmlkdWFsIGNvbHVtbnMgaGF2ZSBiZWVuIGRvbmUsIHlvdSBzaG91bGQgY2hlY2sgdGhhdCB0aGUKKyAgICAgKiByb3cgYXMgYSB3aG9sZSBpcyBjb25zaXN0ZW50LgorICAgICAqCisgICAgICogVGhlIG5leHQgcGhhc2UgaXMgVU5ETyBvciBDT01NSVQuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQ6CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdV9jaGFyICp0bXAgPSAodV9jaGFyKil0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQ7CisKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbjsKKworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5oYXNoVHlwZSA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLnN0cmluZ1swXTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYmluYXJ5X3RvX2hleCgmdG1wLCAmdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsICZyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmdbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4gLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAoMCA9PSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuKQorICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UICovCisKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFOgorICAgICAgICAgICAgICAgIC8qIHNhdmUgc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgPSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGU7CisgICAgICAgICAgICAgICAgLyogZ2V0IHZhbHVlIGZyb20gdmFyYmluZCAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9ICpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNTVE9SQUdFVFlQRSAqLworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgLyogc2F2ZSBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dW5kby0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1czsKKyAgICAgICAgICAgICAgICAvKiBnZXQgdmFsdWUgZnJvbSB2YXJiaW5kICAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgICAgID0gKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgYnJlYWs7IC8qIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAqLworICAgICAgICAgICAgfSAvKiBzd2l0Y2ggY29sbnVtICovCisgICAgICAgICAgICBpZiAoIHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SICkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfSAvKiBzZXQgdmFsdWVzIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIGlmICggcmV0ID09IFNOTVBfRVJSX05PRVJST1IgKSB7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBbGwgY29sdW1ucyBub3cgaGF2ZSB0aGVpciBmaW5hbCB2YWx1ZXMgc2V0LiBjaGVjayB0aGUKKyAgICAgICAgICAgICAqIGludGVybmFsIGNvbnNpc3RlbmN5IG9mIGVhY2ggcm93LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICopCisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ICE9IC0xKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogYWxyZWFkeSBjaGVja2VkICovCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLyoqIGFzc3VtZSBjb25zaXN0ZW5jeSAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50ID0gMTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBpZiAoKFJTX0lTX0FDVElWRSh0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSkgJiYKKyAgICAgICAgICAgICAgICAgICAgKCghdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTXSkgfHwKKyAgICAgICAgICAgICAgICAgICAgIChSU19JU19BQ1RJVkUodGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykpKSkgeworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBjaGVjayBtaWIgcmVzdHJpY3Rpb25zIG9uIGFjdGl2ZSByb3dzLgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UXTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOyAvKiBwZXIgbWliICovCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8qIGFjdGl2ZSByb3cgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChSU19JU19HT0lOR19BQ1RJVkUodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogY2hlY2sgcmVzdHJpY3Rpb25zIGZvciBhY3RpdmF0aW5nIGEgcm93CisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAvKiogaWYgZ29pbmcgYWN0aXZlLCBpbmNvbnNpc3RlbmN5IGlzIGZhdGFsICovCisgICAgICAgICAgICAgICAgICAgIGlmICghdGFibGVfZW50cnktPnVuZG8tPmlzX2NvbnNpc3RlbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChGQVRFX05FV0xZX0NSRUFURUQgPT0gdGFibGVfZW50cnktPnVuZG8tPmZhdGUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3QgPSB0YWJsZV9lbnRyeS0+dW5kby0+cmVxW0NPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVNdOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfSAvKiBnb2luZyBhY3RpdmUgKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChSU19ERVNUUk9ZID09IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogVE9ETzogY2hlY2sgcmVzdHJpY3Rpb25zIGZvciBkZWxldGluZyBhIHJvdworICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgLyoqIGNhbid0IGRlbGV0ZSBhY3RpdmUgcm93ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChSU19JU19BQ1RJVkUodGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdCA9IHRhYmxlX2VudHJ5LT51bmRvLT5yZXFbQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVU107CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8qIGRlc3Ryb3kgKi8KKyAgICAgICAgICAgICAgICBpZiAoIHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SICkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9IC8qIGNvbnNpc3RlbmN5IGZvciByZXF1ZXN0cyAqLworICAgICAgICB9IC8qIGlmIG5vIGVycm9yICovCisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfU0VUX0FDVElPTiAqLworCisgICAgLyoqICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIFVORE8gIyMjIyMKKyAgICAgKgorICAgICAqICAgVU5ETyBpcyBmb3IgY2xlYW5pbmcgdXAgYW55IGZhaWxlZCByZXF1ZXN0cyB0aGF0IHdlbnQgdGhyb3VnaCB0aGUKKyAgICAgKiBBQ1RJT04gcGhhc2UuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX3JvdyAgID0gICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9yb3coICByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2RhdGEgID0gICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZShyZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKworICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UOgorICAgICAgICAgICAgICAgIC8qIHJlc3RvcmUgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnRfbGVuID0KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnVuZG8tPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbjsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSB2YWx1ZSAqLworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsgLyogY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEUgKi8KKworICAgICAgICAgICAgICAgIGNhc2UgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUzoKKyAgICAgICAgICAgICAgICAgICAgLyogcmVzdG9yZSBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgdmFsdWUgKi8KKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IHRhYmxlX2VudHJ5LT51bmRvLT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXM7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMgKi8KKyAgICAgICAgICAgIH0gLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9IC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qCisgICAgICAgICAqIHJlbGVhc2UgdW5kbyBkYXRhCisgICAgICAgICAqIG9yIHJlbW92ZSBhbnkgbmV3bHkgY3JlYXRlZCByb3dzCisgICAgICAgICAqLworICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfcm93ICAgPSAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyggIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeShyZXF1ZXN0KTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKCAhdGFibGVfZW50cnkgfHwgIXRhYmxlX2VudHJ5LT51bmRvICkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgbmV0c25tcF9yZW1vdmVfdGRhdGFfcm93KCByZXF1ZXN0LCB0YWJsZV9yb3cgKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKEZBVEVfTkVXTFlfQ1JFQVRFRCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+ZmF0ZSApCisgICAgICAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGVfcmVtb3ZlRW50cnkoIHRhYmxlX2RhdGEsIHRhYmxlX3JvdyApOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIF9mcmVlVW5kbyh0YWJsZV9lbnRyeSk7CisgICAgICAgIH0gLyogZm9yIHJlcXVlc3RzICovCisgICAgICAgIGJyZWFrOyAvKiBjYXNlIE1PREVfU0VUX1VORE8gKi8KKworICAgIC8qKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgQ09NTUlUICMjIyMjCisgICAgICoKKyAgICAgKiAgIENPTU1JVCBpcyB0aGUgZmluYWwgc3VjY2VzcyBzdGF0ZSwgd2hlbiBhbGwgY2hhbmdlcyBhcmUgZmluYWxpemVkLgorICAgICAqIFRoZXJlIGlzIG5vdCByZWNvdmVyeSBzdGF0ZSBzaG91bGQgc29tZXRoaW5nIGZhaWxlIGhlcmUuCisgICAgICoKKyAgICAgKiAgIFRoaXMgdGhlIGZpbmFsIHBoYXNlIGZvciB0aGlzIHBhdGggaW4gdGhlIHN0YXRlIG1hY2hpbmUuCisgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9DT01NSVQ6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9yb3cgICA9ICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3Rfcm93KCAgcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9kYXRhICA9ICAgICBuZXRzbm1wX3RkYXRhX2V4dHJhY3RfdGFibGUocmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggICAgcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5KHJlcXVlc3QpOworCisgICAgICAgICAgICBpZiAoIXRhYmxlX2VudHJ5IHx8ICF0YWJsZV9lbnRyeS0+dW5kbykKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKChSU19OT1RSRUFEWSA9PSB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSAmJgorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPSBSU19OT1RJTlNFUlZJQ0U7CisgICAgICAgICAgICBlbHNlIGlmICgoUlNfTk9USU5TRVJWSUNFID09IHRhYmxlX2VudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMpICYmCisgICAgICAgICAgICAgICAgICAgICAoMCA9PSB0YWJsZV9lbnRyeS0+dW5kby0+aXNfY29uc2lzdGVudCkpCisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX05PVFJFQURZOworCisgICAgICAgICAgICAvKiogcmVsZWFzZSB1bmRvIGRhdGEgZm9yIHJlcXVlc3RzIHdpdGggbm8gcm93c3RhdHVzICovCisgICAgICAgICAgICBpZiAodGFibGVfZW50cnktPnVuZG8gJiYKKyAgICAgICAgICAgICAgICAhdGFibGVfZW50cnktPnVuZG8tPnJlcVtDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgX2ZyZWVVbmRvKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvKiogdXBkYXRlIGFjdGl2ZSBhZGRycyAqLworICAgICAgICAgICAgICAgIGlmICgoMCA9PSB0YWJsZV9lbnRyeS0+cGFyYW1zX2ZsYWdzKSAmJgorICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9PSBSU19BQ1RJVkUpKQorICAgICAgICAgICAgICAgICAgICBfcGFyYW1zX2FkZCh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAoKDAgIT0gdGFibGVfZW50cnktPnBhcmFtc19mbGFncykgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAodGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9PSBSU19ERVNUUk9ZKSkKKyAgICAgICAgICAgICAgICAgICAgX3BhcmFtc19yZW1vdmUodGFibGVfZW50cnkpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVM6CisgICAgICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICAgICAgLyoqIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgUlNfQUNUSVZFOgorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gUlNfQUNUSVZFOworICAgICAgICAgICAgICAgICAgICBpZiAoMCA9PSB0YWJsZV9lbnRyeS0+cGFyYW1zX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgX3BhcmFtc19hZGQodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgLyoqIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgorICAgICAgICAgICAgICAgICAgICAvKiogc2ltcGx5IHNldCBzdGF0dXMgYmFzZWQgb24gY29uc2lzdGVuY3kgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5LT51bmRvLT5pc19jb25zaXN0ZW50KQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX05PVElOU0VSVklDRTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyA9IFJTX05PVFJFQURZOworICAgICAgICAgICAgICAgICAgICBpZiAoMCAhPSB0YWJsZV9lbnRyeS0+cGFyYW1zX2ZsYWdzKQorICAgICAgICAgICAgICAgICAgICAgICAgX3BhcmFtc19yZW1vdmUodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUlNfREVTVFJPWToKKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgIT0gdGFibGVfZW50cnktPnBhcmFtc19mbGFncykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJhbXNfcmVtb3ZlKHRhYmxlX2VudHJ5KTsKKyAgICAgICAgICAgICAgICAgICAgLyoqIGRpc2Fzc29jaWF0ZSByb3cgd2l0aCByZXF1ZXN0cyAqLworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3coIHJlcXVlc3QsIHRhYmxlX3JvdyApOworICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9yZW1vdmVFbnRyeSh0YWJsZV9kYXRhLCB0YWJsZV9yb3cgKTsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfcm93ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSBOVUxMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiogcmVsZWFzZSB1bmRvIGRhdGEgKi8KKyAgICAgICAgICAgICAgICBfZnJlZVVuZG8odGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMgKi8KKworICAgICAgICAgICAgY2FzZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEU6CisgICAgICAgICAgICAgICAgICAgIGlmIChSU19BQ1RJVkUgPT0gdGFibGVfZW50cnktPnNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cykKKyAgICAgICAgICAgICAgICAgICAgICAgIF9wYXJhbXNfdHdlYWtfc3RvcmFnZSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVDoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gLyogc3dpdGNoIGNvbG51bSAqLworICAgICAgICB9IC8qIGZvciByZXF1ZXN0cyAqLworCisgICAgICAgIC8qKiB1cGRhdGUgbGFzdCBjaGFuZ2VkICovCisgICAgICAgIF9sYXN0X2NoYW5nZWQgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKworICAgICAgICAvKiogc2V0IHVwIHRvIHNhdmUgcGVyc2lzdGVudCBzdG9yZSAqLworICAgICAgICBzbm1wX3N0b3JlX25lZWRlZChOVUxMKTsKKworICAgICAgICBicmVhazsgLyogY2FzZSBNT0RFX1NFVF9DT01NSVQgKi8KKyAgICB9ICAvKiBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpICovCisgICAgCisgICAgaWYgKCByZXQgIT0gU05NUF9FUlJfTk9FUlJPUiApCisgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3QsIHJldCk7CisgICAgCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKworc3RhdGljIGludAorX2NvdW50X2hhbmRsZXIobmV0c25tcF9taWJfaGFuZGxlciAqaGFuZGxlciwKKyAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywKKyAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgdmFsOworCisgICAgaWYgKE1PREVfR0VUICE9IHJlcWluZm8tPm1vZGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImJhZCBtb2RlIGluIFJPIGhhbmRsZXIiKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBpZiAoTlVMTCA9PSBfdGFibGVfZGF0YS0+Y29udGFpbmVyKQorICAgICAgICB2YWwgPSAwOworICAgIGVsc2UKKyAgICAgICAgdmFsID0gQ09OVEFJTkVSX1NJWkUoX3RhYmxlX2RhdGEtPmNvbnRhaW5lcik7CisKKyAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0dBVUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICZ2YWwsIHNpemVvZih2YWwpKTsKKyAgIAorICAgIGlmIChoYW5kbGVyLT5uZXh0ICYmIGhhbmRsZXItPm5leHQtPmFjY2Vzc19tZXRob2QpCisgICAgICAgIHJldHVybiBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyKGhhbmRsZXIsIHJlZ2luZm8sIHJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzKTsKKyAgICAKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogUEVSU0lTVEVOQ0UKKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyBpbnQgX3Rsc3RtUGFyYW1zVGFibGVfc2F2ZShpbnQgbWFqb3JJRCwgaW50IG1pbm9ySUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOworc3RhdGljIGludCBfc2F2ZV9wYXJhbXMoc25tcFRsc3RtUGFyYW1zICpwYXJhbXMsIHZvaWQgKmFwcF90eXBlKTsKK3N0YXRpYyBpbnQgX3NhdmVfZW50cnkoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5LCB2b2lkICp0eXBlKTsKK3N0YXRpYyB2b2lkIF90bHN0bVBhcmFtc1RhYmxlX3Jvd19yZXN0b3JlX21pYihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqYnVmKTsKKworc3RhdGljIGNvbnN0IGNoYXIgbWliX3Rva2VuW10gPSAic25tcFRsc3RtUGFyYW1zRW50cnkiOworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqX2luaXRfcGVyc2lzdGVuY2Ugc2hvdWxkIGJlIGNhbGxlZCBmcm9tIHRoZSBtYWluIHRhYmxlCisgKiBpbml0IHJvdXRpbmUuCisgKgorICogSWYgeW91ciB0YWJsZSBkZXBlbmRzIG9uIHJvd3MgaW4gYW5vdGhlciB0YWJsZSwKKyAqIHlvdSBzaG91bGQgcmVnaXN0ZXIgeW91ciBjYWxsYmFjayBhZnRlciB0aGUgb3RoZXIgdGFibGUsCisgKiB3aGljaCBzaG91bGQgZW5zdXJlIHRoZSByb3dzIG9uIHdoaWNoIHlvdSBkZXBlbmQgYXJlIHNhdmVkCisgKiAoYW5kIHJlLWNyZWF0ZWQpIGJlZm9yZSB0aGUgZGVwZW5kZW50IHJvd3MuCisgKi8KK3ZvaWQKK190bHN0bVBhcmFtc19pbml0X3BlcnNpc3RlbmNlKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgbWliX3Rva2VuLCBfdGxzdG1QYXJhbXNUYWJsZV9yb3dfcmVzdG9yZV9taWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgcmMgPSBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGxzdG1QYXJhbXNUYWJsZV9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsKKworICAgIGlmIChyYyAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcmVnaXN0ZXJpbmcgZm9yIFNUT1JFX0RBVEEgY2FsbGJhY2sgIgorICAgICAgICAgICAgICAgICAiaW4gX3Rsc3RtUGFyYW1zX2luaXRfcGVyc2lzdGVuY2VcbiIpOworfQorCitzdGF0aWMgaW50CitfdGxzdG1QYXJhbXNUYWJsZV9zYXZlKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpCit7CisgICAgY2hhciAgICAgICAgICAgIHNlcFtdID0KKyAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIjsKKyAgICBjaGFyICAgICAgICAgICAgYnVmW10gPSAiI1xuIiAiIyB0bHN0bVBhcmFtcyBwZXJzaXN0ZW50IGRhdGFcbiIgIiMiOworICAgIGNoYXIgICAgICAgICAgICp0eXBlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKworICAgIG5ldHNubXBfY29udGFpbmVyICphY3RpdmVfcGFyYW1zID0gbmV0c25tcF90bHN0bVBhcmFtc19jb250YWluZXIoKTsKKyAgICBuZXRzbm1wX3RkYXRhX3JvdyAqcm93OworICAgIG5ldHNubXBfaXRlcmF0b3IgICp0YmxfaXRyLCAqcGFyYW1zX2l0cjsKKyAgICBzbm1wVGxzdG1QYXJhbXMgICAqcGFyYW1zOworICAgIHNubXBUbHN0bVBhcmFtc1RhYmxlX2VudHJ5ICplbnRyeTsKKworICAgIGlmICgoQ09OVEFJTkVSX1NJWkUoYWN0aXZlX3BhcmFtcykgPT0gMCkgJiYKKyAgICAgICAgKENPTlRBSU5FUl9TSVpFKF90YWJsZV9kYXRhLT5jb250YWluZXIpID09IDApKQorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBidWYpOworCisgICAgLyoKKyAgICAgKiBzYXZlIGFjdGl2ZSByb3dzIGZyb20gcGFyYW1zIGNvbnRhaW5lcgorICAgICAqLworICAgIGlmIChOVUxMICE9IGFjdGl2ZV9wYXJhbXMpIHsKKyAgICAgICAgcGFyYW1zX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihhY3RpdmVfcGFyYW1zKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcGFyYW1zX2l0cikgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc3RtUGFyYW1zVGFibGU6c2F2ZSIsCisgICAgICAgICAgICAgICAgICAgICAgICAiY2FudCBnZXQgcGFyYW1zIGl0ZXJhdG9yXG4iKSk7CisgICAgICAgICAgICBwYXJhbXMgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBhcmFtcyA9IElURVJBVE9SX0ZJUlNUKHBhcmFtc19pdHIpOworCisgICAgICAgIGZvciggOyBwYXJhbXM7IHBhcmFtcyA9IElURVJBVE9SX05FWFQocGFyYW1zX2l0cikpIHsKKyAgICAgICAgICAgIC8qKiBkb24ndCBzdG9yZSBjb25maWcgcm93cyAqLworICAgICAgICAgICAgaWYgKChwYXJhbXMtPmZsYWdzICYgVExTVE1fUEFSQU1TX0ZST01fQ09ORklHKSB8fAorICAgICAgICAgICAgICAgICEgKHBhcmFtcy0+ZmxhZ3MgJiBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgX3NhdmVfcGFyYW1zKHBhcmFtcywgdHlwZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShwYXJhbXNfaXRyKTsKKworICAgIC8qCisgICAgICogc2F2ZSBpbmFjdGl2ZSByb3dzIGZyb20gbWliCisgICAgICovCisgICAgdGJsX2l0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihfdGFibGVfZGF0YS0+Y29udGFpbmVyKTsKKyAgICBpZiAoTlVMTCA9PSB0YmxfaXRyKQorICAgICAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpzYXZlIiwgImNhbnQgZ2V0IHRhYmxlIGl0ZXJhdG9yXG4iKSk7CisgICAgZWxzZSB7CisgICAgICAgIHJvdyA9IElURVJBVE9SX0ZJUlNUKHRibF9pdHIpOworICAgICAgICBmb3IoIDsgcm93OyByb3cgPSBJVEVSQVRPUl9ORVhUKHRibF9pdHIpKSB7CisgICAgICAgICAgICBlbnRyeSA9IHJvdy0+ZGF0YTsKKworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIHNraXAgYWxsIGFjdGl2ZSByb3dzIChzaG91bGQgYmUgaW4gYWN0aXZlX3BhcmFtcyBhbmQgdGh1cyBzYXZlZAorICAgICAgICAgICAgICogYWJvdmUpIGFuZCB2b2xhdGlsZSByb3dzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgPT0gUlNfQUNUSVZFKSB8fAorICAgICAgICAgICAgICAgIChlbnRyeS0+c25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUgIT0gU1RfTk9OVk9MQVRJTEUpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBfc2F2ZV9lbnRyeShlbnRyeSwgdHlwZSk7CisgICAgICAgIH0KKyAgICAgICAgSVRFUkFUT1JfUkVMRUFTRSh0YmxfaXRyKTsKKyAgICB9CisKKyAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBzZXApOworICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsICJcbiIpOworCisgICAgLyoKKyAgICAgKiBuZXZlciBmYWlscyAKKyAgICAgKi8KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBfdGxzdG1QYXJhbXNUYWJsZV9jb250YWluZXJfcm93X3NhdmUKKyAqLworc3RhdGljIGludAorX3NhdmVfZW50cnkoc25tcFRsc3RtUGFyYW1zVGFibGVfZW50cnkgKmVudHJ5LCB2b2lkICp0eXBlKQoreworICAgIGNoYXIgICBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqaGFzaFR5cGU7CisKKyAgICBoYXNoVHlwZSA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBlbnRyeS0+aGFzaFR5cGUpOworICAgIGlmIChOVUxMID09IGhhc2hUeXBlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJza2lwcGluZyBlbnRyeSB1bmtub3duIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgZW50cnktPmhhc2hUeXBlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGJ1aWxkIHRoZSBsaW5lCisgICAgICovCisgICAgbmV0c25tcF9hc3NlcnQoMCA9PSBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWVbCisgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGFyZ2V0UGFyYW1zTmFtZV9sZW5dKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgwID09IGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludFsKKyAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50X2xlbl0pOworICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlcyAlcyAlcyAlZCIsIG1pYl90b2tlbiwKKyAgICAgICAgICAgICBlbnRyeS0+c25tcFRhcmdldFBhcmFtc05hbWUsIGhhc2hUeXBlLAorICAgICAgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzKTsKKyAgICBidWZbc2l6ZW9mKGJ1ZiktMV0gPSAwOworCisgICAgcmVhZF9jb25maWdfc3RvcmUodHlwZSwgYnVmKTsKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpyb3c6c2F2ZSIsICJzYXZpbmcgZW50cnkgJyVzJ1xuIiwgYnVmKSk7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIGludAorX3NhdmVfcGFyYW1zKHNubXBUbHN0bVBhcmFtcyAqcGFyYW1zLCB2b2lkICphcHBfdHlwZSkKK3sKKyAgICBjaGFyIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF0sICpoYXNoVHlwZTsKKworICAgIGlmIChOVUxMID09IHBhcmFtcykKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGhhc2hUeXBlID0gc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHBhcmFtcy0+aGFzaFR5cGUpOworICAgIGlmIChOVUxMID09IGhhc2hUeXBlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJza2lwcGluZyBlbnRyeSB1bmtub3duIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgcGFyYW1zLT5oYXNoVHlwZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyAlcyAtLSVzICVzICVkIiwgbWliX3Rva2VuLCBwYXJhbXMtPm5hbWUsCisgICAgICAgICAgICAgaGFzaFR5cGUsIHBhcmFtcy0+ZmluZ2VycHJpbnQsIFJTX0FDVElWRSk7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXNUYWJsZTpwYXJhbXM6c2F2ZSIsICJzYXZpbmcgcGFyYW1zICclcydcbiIsCisgICAgICAgICAgICAgICAgYnVmKSk7CisgICAgcmVhZF9jb25maWdfc3RvcmUoYXBwX3R5cGUsIGJ1Zik7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworc3RhdGljIHZvaWQKK190bHN0bVBhcmFtc1RhYmxlX3Jvd19yZXN0b3JlX21pYihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqYnVmKQoreworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgcm93U3RhdHVzOworICAgIHNubXBUbHN0bVBhcmFtcyAgICAgICAqcGFyYW1zOworCisgICAgLyoqIG5lZWQgc29tZXdoZXJlIHRvIHNhdmUgcm93cyAqLworICAgIG5ldHNubXBfYXNzZXJ0KF90YWJsZV9kYXRhICYmIF90YWJsZV9kYXRhLT5jb250YWluZXIpOyAKKworICAgIHBhcmFtcyA9IG5ldHNubXBfdGxzdG1QYXJhbXNfcmVzdG9yZV9jb21tb24oJmJ1Zik7CisgICAgaWYgKE5VTEwgPT0gcGFyYW1zKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlVMTCA9PSBidWYpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiaW5jb21wbGV0ZSBsaW5lIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcm93U3RhdHVzID0gYXRvaShidWYpOworCisgICAgLyoKKyAgICAgKiBpZiByb3cgaXMgYWN0aXZlLCBhZGQgaXQgdG8gdGhlIHBhcmFtcyBjb250YWluZXIgc28gaXQgaXMgYXZhaWxhYmxlCisgICAgICogZm9yIHVzZS4gRG8gbm90IGFkZCBpdCB0byB0aGUgdGFibGUsIHNpbmNlIGl0IHdpbGwgYmUgYWRkZWQKKyAgICAgKiBkdXJpbmcgY2FjaGVfbG9hZC4KKyAgICAgKi8KKyAgICBpZiAoUlNfQUNUSVZFID09IHJvd1N0YXR1cykgeworICAgICAgICBwYXJhbXMtPmZsYWdzID0gVExTVE1fUEFSQU1TX0ZST01fTUlCIHwgVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFOworCisgICAgICAgIGlmIChuZXRzbm1wX3Rsc3RtUGFyYW1zX2FkZChwYXJhbXMpICE9IDApCisgICAgICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUocGFyYW1zKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIG5ldHNubXBfdGRhdGFfcm93ICAgICAqcm93OworICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZV9lbnRyeSAgKmVudHJ5OworCisgICAgICAgIHJvdyA9IHNubXBUbHN0bVBhcmFtc1RhYmxlX2NyZWF0ZUVudHJ5KF90YWJsZV9kYXRhLCBwYXJhbXMtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihwYXJhbXMtPm5hbWUpKTsKKyAgICAgICAgaWYgKCFyb3cpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgZW50cnkgPSByb3ctPmRhdGE7CisgICAgICAgIAorICAgICAgICBlbnRyeS0+aGFzaFR5cGUgPSBwYXJhbXMtPmhhc2hUeXBlOworICAgICAgICBzdHJsY3B5KGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwgcGFyYW1zLT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPnNubXBUbHN0bVBhcmFtc0NsaWVudEZpbmdlcnByaW50KSk7CisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludF9sZW4gPQorICAgICAgICAgICAgc3RybGVuKGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCk7CisgICAgICAgIGVudHJ5LT5zbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSA9IFNUX05PTlZPTEFUSUxFOworICAgICAgICBlbnRyeS0+c25tcFRsc3RtUGFyYW1zUm93U3RhdHVzID0gcm93U3RhdHVzOworICAgICAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUocGFyYW1zKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMzNjYWMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtUGFyYW1zVGFibGUvc25tcFRsc3RtUGFyYW1zVGFibGUuaApAQCAtMCwwICsxLDMwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAkCisgKi8KKyNpZm5kZWYgU05NUFRMU1RNUEFSQU1TVEFCTEVfSAorI2RlZmluZSBTTk1QVExTVE1QQVJBTVNUQUJMRV9ICisKKyNkZWZpbmUgU05NUF9UTFNfVE1fUEFSQU1TX0NPVU5UICAgU05NUF9UTFNfVE1fQkFTRSwgMiwgMiwgMSwgNAorI2RlZmluZSBTTk1QX1RMU19UTV9QQVJBTVNfQ0hBTkdFRCBTTk1QX1RMU19UTV9CQVNFLCAyLCAyLCAxLCA1CisjZGVmaW5lIFNOTVBfVExTX1RNX1BBUkFNU19UQUJMRSAgIFNOTVBfVExTX1RNX0JBU0UsIDIsIDIsIDEsIDYKKworLyogZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCit2b2lkIGluaXRfc25tcFRsc3RtUGFyYW1zVGFibGUodm9pZCk7Cit2b2lkIGluaXRpYWxpemVfdGFibGVfc25tcFRsc3RtUGFyYW1zVGFibGUodm9pZCk7CisjZGVmaW5lIFNOTVBUTFNUTVBBUkFNU1RBQkxFX1RJTUVPVVQgIDYwCisKKy8qIGluZGV4IGRlZmluaXRpb25zIGZvciB0YWJsZSBzbm1wVGxzdG1QYXJhbXNUYWJsZSAqLworI2RlZmluZSBTTk1QVEFSR0VUUEFSQU1TTkFNRV9NQVhfU0laRSAgMzIKKworLyogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgc25tcFRsc3RtUGFyYW1zVGFibGUgKi8KKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UICAgIDEKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFICAgIDIKKyNkZWZpbmUgQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1JPV1NUQVRVUyAgICAzCisgICAgCisjZGVmaW5lIFNOTVBUTFNUTVBBUkFNU0NMSUVOVEZJTkdFUlBSSU5UX01BWF9TSVpFICAgIDI1NQorICAgIAorI2RlZmluZSBTTk1QVExTVE1QQVJBTVNUQUJMRV9NSU5fQ09MVU1OIENPTFVNTl9TTk1QVExTVE1QQVJBTVNDTElFTlRGSU5HRVJQUklOVAorI2RlZmluZSBTTk1QVExTVE1QQVJBTVNUQUJMRV9NQVhfQ09MVU1OIENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVMKKworI2VuZGlmIC8qIFNOTVBUTFNUTVBBUkFNU1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uLmggYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZjRlZjgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtU2Vzc2lvbi5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBTTk1QVExTVE1TRVNTSU9OX0gKKyNkZWZpbmUgU05NUFRMU1RNU0VTU0lPTl9ICisKK2NvbmZpZ19yZXF1aXJlKHRsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24pCisKKyNlbmRpZiAvKiBTTk1QVExTVE1TRVNTSU9OX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYyBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM3YjYwCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBzbm1wVGxzdG1TZXNzaW9uCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgInRsc3RtLW1pYi5oIgorI2luY2x1ZGUgInNubXBUbHN0bVNlc3Npb24uaCIKKworc3RhdGljIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24qIF9teXJlZyA9IE5VTEw7CisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcFRsc3RtU2Vzc2lvbiBtb2R1bGUgKi8KK3ZvaWQKK2luaXRfc25tcFRsc3RtU2Vzc2lvbih2b2lkKQoreworICAgIHN0YXRpYyBvaWQgICAgICBteW9pZFtdID0geyBTTk1QX1RMU19UTV9CQVNFLCAyLCAxIH07CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgREVCVUdNU0dUTCgoInRsc3RtU2Vzc2lvbiIsICJJbml0aWFsaXppbmdcbiIpKTsKKworICAgIF9teXJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJzbm1wVGxzdG1TZXNzaW9uIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBteW9pZCwgT0lEX0xFTkdUSChteW9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IF9teXJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGNyZWF0ZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICAic25tcFRsc3RtU2Vzc2lvblxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICByYyA9IE5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIoX215cmVnLCAxLCBUTFNUTSk7CisgICAgaWYgKE1JQl9SRUdJU1RFUkVEX09LICE9IHJjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gcmVnaXN0ZXIgc25tcFRsc3RtU2Vzc2lvbiBtZG91bGVcbiIpOworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUoX215cmVnKTsKKyAgICAgICAgX215cmVnID0gTlVMTDsKKyAgICB9CisKK30KKworCit2b2lkCitzaHV0ZG93bl9zbm1wVGxzdG1TZXNzaW9uKHZvaWQpCit7CisgICAgaWYgKF9teXJlZykgeworICAgICAgICBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcihfbXlyZWcpOworICAgICAgICBfbXlyZWcgPSBOVUxMOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaCBiL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1TZXNzaW9uL3NubXBUbHN0bVNlc3Npb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmNjMDNjCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bVNlc3Npb24vc25tcFRsc3RtU2Vzc2lvbi5oCkBAIC0wLDAgKzEsOSBAQAorI2lmbmRlZiBTTk1QVExTVE1TRVNTSU9OX0gKKyNkZWZpbmUgU05NUFRMU1RNU0VTU0lPTl9ICisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcFRsc3RtU2Vzc2lvbiBtb2R1bGUgKi8KK3ZvaWQgaW5pdF9zbm1wVGxzdG1TZXNzaW9uKHZvaWQpOwordm9pZCBzaHV0ZG93bl9zbm1wVGxzdG1TZXNzaW9uKHZvaWQpOworCisjZW5kaWYgLyogU05NUFRMU1RNU0VTU0lPTl9IICovCisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RzbS1taWIuaCBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWMwMWZlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi5oCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAqIG1vZHVsZSB0byBpbmNsdWRlIHRoZSBtb2R1bGVzCisgKi8KK2NvbmZpZ19yZXF1aXJlKHRzbS1taWIvc25tcFRzbVN0YXRzKQorY29uZmlnX3JlcXVpcmUodHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCkKK2NvbmZpZ19hZGRfbWliKFNOTVAtVFNNLU1JQikKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguYyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzk3NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeC5jCkBAIC0wLDAgKzEsMTEwIEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgInNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgiCisKKy8qKiBJbml0aWFsaXplcyB0aGUgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggbW9kdWxlICovCit2b2lkCitpbml0X3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4KHZvaWQpCit7CisgICAgY29uc3Qgb2lkICAgICAgIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4X29pZFtdID0KKyAgICAgICAgeyAxLCAzLCA2LCAxLCAyLCAxLCAxOTAsIDEsIDIsIDEgfTsKKworICAgIERFQlVHTVNHVEwoKCJzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCIsICJJbml0aWFsaXppbmdcbiIpKTsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyKG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCJzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZV9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXhfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4X29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURSkpOworfQorCitpbnQKK2hhbmRsZV9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQoreworICAgIGludCAgICAgICAgICAgICByZXQ7CisgICAgLyoKKyAgICAgKiBXZSBhcmUgbmV2ZXIgY2FsbGVkIGZvciBhIEdFVE5FWFQgaWYgaXQncyByZWdpc3RlcmVkIGFzIGEKKyAgICAgKiAiaW5zdGFuY2UiLCBhcyBpdCdzICJtYWdpY2FsbHkiIGhhbmRsZWQgZm9yIHVzLiAgCisgICAgICovCisKKyAgICAvKgorICAgICAqIGEgaW5zdGFuY2UgaGFuZGxlciBhbHNvIG9ubHkgaGFuZHMgdXMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLCBzbworICAgICAqIHdlIGRvbid0IG5lZWQgdG8gbG9vcCBvdmVyIGEgbGlzdCBvZiByZXF1ZXN0czsgd2UnbGwgb25seSBnZXQgb25lLiAKKyAgICAgKi8KKworICAgIGxvbmcgY3VycmVudF92YWx1ZSA9IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgpOworICAgIHN0YXRpYyBsb25nIG9yaWdpbmFsX3ZhbHVlID0gMDsKKworICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgeworCisgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgaWYgKGN1cnJlbnRfdmFsdWUgPT0gMCkKKyAgICAgICAgICAgIGN1cnJlbnRfdmFsdWUgPSBUVl9GQUxTRTsKKyAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1cnJlbnRfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY3VycmVudF92YWx1ZSkpOworICAgICAgICBicmVhazsKKworICAgICAgICAvKgorICAgICAgICAgKiBTRVQgUkVRVUVTVAorICAgICAgICAgKgorICAgICAgICAgKiBtdWx0aXBsZSBzdGF0ZXMgaW4gdGhlIHRyYW5zYWN0aW9uLiAgU2VlOgorICAgICAgICAgKiBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvbWliX21vZHVsZS9zZXQtYWN0aW9ucy5qcGcKKyAgICAgICAgICovCisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgLyoKKyAgICAgICAgICogb3IgeW91IGNvdWxkIHVzZSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUgaW5zdGVhZCAKKyAgICAgICAgICovCisgICAgICAgIHJldCA9IG5ldHNubXBfY2hlY2tfdmJfdHlwZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fSU5URUdFUik7CisgICAgICAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgeworICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0cywgcmV0KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgIT0gMiAmJgorICAgICAgICAgICAgKihyZXF1ZXN0cy0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgIT0gMSkKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdHMsIFNOTVBfRVJSX1dST05HVkFMVUUpOworICAgICAgICBvcmlnaW5hbF92YWx1ZSA9IGN1cnJlbnRfdmFsdWU7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgIGlmIChUVl9GQUxTRSA9PSAqKHJlcXVlc3RzLT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSkKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCwgMSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UU01fVVNFX1BSRUZJWCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbF92YWx1ZSk7CisgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qIHdlIGRvbid0IG5lZWQgdGhlc2UgKi8KKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKKyAgICAgICAgYnJlYWs7CisKKyAgICBkZWZhdWx0OgorICAgICAgICAvKgorICAgICAgICAgKiB3ZSBzaG91bGQgbmV2ZXIgZ2V0IGhlcmUsIHNvIHRoaXMgaXMgYSByZWFsbHkgYmFkIGVycm9yIAorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInVua25vd24gbW9kZSAoJWQpIGluIGhhbmRsZV9zbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeFxuIiwKKyAgICAgICAgICAgICAgICAgcmVxaW5mby0+bW9kZSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmggYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmEwYzViMwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXguaApAQCAtMCwwICsxLDE0IEBACisvKgorICogTm90ZTogdGhpcyBmaWxlIG9yaWdpbmFsbHkgYXV0by1nZW5lcmF0ZWQgYnkgbWliMmMgdXNpbmcKKyAqICAgICAgICAkCisgKi8KKyNpZm5kZWYgU05NUFRTTUNPTkZJR1VSQVRJT05VU0VQUkVGSVhfSAorI2RlZmluZSBTTk1QVFNNQ09ORklHVVJBVElPTlVTRVBSRUZJWF9ICisKKy8qCisgKiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgCisgKi8KK3ZvaWQgICAgICAgICAgICBpbml0X3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4KHZvaWQpOworTmV0c25tcF9Ob2RlX0hhbmRsZXIgaGFuZGxlX3NubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4OworCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFNOTVBUU01DT05GSUdVUkFUSU9OVVNFUFJFRklYX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzLmggYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYzQxMDEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy5oCkBAIC0wLDAgKzEsNiBAQAorI2lmbmRlZiBTTk1QVFNNU1RBVFNfSAorI2RlZmluZSBTTk1QVFNNU1RBVFNfSAorCitjb25maWdfcmVxdWlyZSh0c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMpCisKKyNlbmRpZiAvKiBTTk1QVFNNU1RBVFNfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMgYi9hZ2VudC9taWJncm91cC90c20tbWliL3NubXBUc21TdGF0cy9zbm1wVHNtU3RhdHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTY3ZDJlCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIHNubXBUc21TdGF0cworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSAic25tcFRzbVN0YXRzLmgiCisKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uKiBfbXlyZWcgPSBOVUxMOworCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShoZWxwZXJfc3RhdGlzdGljcykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNodXRkb3duX3NubXB0c21zZXNzaW9uLCBuZXRzbm1wX3VudXNlZCkKKworLyoqIEluaXRpYWxpemVzIHRoZSBzbm1wVHNtU3RhdHMgbW9kdWxlICovCit2b2lkCitpbml0X3NubXBUc21TdGF0cyh2b2lkKQoreworICAgIHN0YXRpYyBvaWQgICAgICBzbm1wVHNtU3RhdHNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDE5MCwgMSwgMSB9OworICAgIGludCAgICAgICAgICAgICByYzsKKworICAgIERFQlVHTVNHVEwoKCJzbm1wVHNtU3RhdHMiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CisKKyAgICBfbXlyZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigic25tcFRzbVN0YXRzIiwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVHNtU3RhdHNfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoc25tcFRzbVN0YXRzX29pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpOworICAgIGlmIChOVUxMID09IF9teXJlZykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGNyZWF0ZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBmb3IgIgorICAgICAgICAgICAgICAgICAic25tcFRzbVN0YXRzXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICByYyA9IE5FVFNOTVBfUkVHSVNURVJfU1RBVElTVElDX0hBTkRMRVIoX215cmVnLCAxLCBUU00pOworICAgIGlmIChNSUJfUkVHSVNURVJFRF9PSyAhPSByYykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHNubXBUc21TdGF0cyBtZG91bGVcbiIpOworICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUoX215cmVnKTsKKyAgICAgICAgX215cmVnID0gTlVMTDsKKyAgICB9Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TSFVURE9XTl9TTk1QVFNNU0VTU0lPTgordm9pZAorc2h1dGRvd25fc25tcFRzbVNlc3Npb24odm9pZCkKK3sKKyAgICBpZiAoX215cmVnKSB7CisgICAgICAgIG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKF9teXJlZyk7CisgICAgICAgIF9teXJlZyA9IE5VTEw7CisgICAgfQorfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0hVVERPV05fU05NUFRTTVNFU1NJT04gKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oIGIvYWdlbnQvbWliZ3JvdXAvdHNtLW1pYi9zbm1wVHNtU3RhdHMvc25tcFRzbVN0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwMDdjZgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3RzbS1taWIvc25tcFRzbVN0YXRzL3NubXBUc21TdGF0cy5oCkBAIC0wLDAgKzEsOCBAQAorI2lmbmRlZiBTTk1QVFNNU1RBVFNfSAorI2RlZmluZSBTTk1QVFNNU1RBVFNfSAorCisvKiogSW5pdGlhbGl6ZXMgdGhlIHNubXBUc21TdGF0cyBtb2R1bGUgKi8KK3ZvaWQgaW5pdF9zbm1wVHNtU3RhdHModm9pZCk7Cit2b2lkIHNodXRkb3duX3NubXBUc21TdGF0cyh2b2lkKTsKKworI2VuZGlmIC8qIFNOTVBUU01TVEFUU19IICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMgYi9hZ2VudC9taWJncm91cC90dW5uZWwvdHVubmVsLmMKaW5kZXggY2ZiZWU0Ni4uZjk2NDllZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdHVubmVsL3R1bm5lbC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3R1bm5lbC90dW5uZWwuYwpAQCAtNjIsOCArNjIsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAidHVubmVsLmgiCiAKICNpZm5kZWYgTUlOCkBAIC0xMzcsMzIgKzEzNywzNSBAQAogICAgICAqIG1hZ2ljIG51bWJlciAgICAgICAgLCB2YXJpYWJsZSB0eXBlICwgcm8vcncgLCBjYWxsYmFjayBmbiAgLCBMLCBvaWRzdWZmaXggCiAgICAgICovCiAjZGVmaW5lICAgTE9DQUxBRERSRVNTICAgICAgICAgIDEKLSAgICB7TE9DQUxBRERSRVNTLCBBU05fSVBBRERSRVNTLCBSV1JJVEUsIHZhcl90dW5uZWxJZkVudHJ5LCAzLCB7MSwgMSwgMX19LAorICAgIHtMT0NBTEFERFJFU1MsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCAxfX0sCiAjZGVmaW5lICAgUkVNT1RFQUREUkVTUyAgICAgICAgIDIKLSAgICB7UkVNT1RFQUREUkVTUywgQVNOX0lQQUREUkVTUywgUldSSVRFLCB2YXJfdHVubmVsSWZFbnRyeSwgMywKLSAgICAgezEsIDEsIDJ9fSwKKyAgICB7UkVNT1RFQUREUkVTUywgQVNOX0lQQUREUkVTUywgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDJ9fSwKICNkZWZpbmUgICBFTkNBUFNNRVRIT0QgICAgICAgICAgMwotICAgIHtFTkNBUFNNRVRIT0QsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCAzfX0sCisgICAge0VOQ0FQU01FVEhPRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDN9fSwKICNkZWZpbmUgICBIT1BMSU1JVCAgICAgICAgICAgICAgNAotICAgIHtIT1BMSU1JVCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCA0fX0sCisgICAge0hPUExJTUlULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDR9fSwKICNkZWZpbmUgICBTRUNVUklUWSAgICAgICAgICAgICAgNQotICAgIHtTRUNVUklUWSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDV9fSwKKyAgICB7U0VDVVJJVFksIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX3R1bm5lbElmRW50cnksIDMsIHsxLCAxLCA1fX0sCiAjZGVmaW5lICAgVE9TICAgICAgICAgICAgICAgICAgIDYKLSAgICB7VE9TLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDZ9fSwKKyAgICB7VE9TLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHVubmVsSWZFbnRyeSwgMywgezEsIDEsIDZ9fSwKIAogI2RlZmluZSAgIElGSU5ERVggICAgICAgICAgICAgICA3Ci0gICAge0lGSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX3R1bm5lbENvbmZpZ0VudHJ5LCAzLCB7MiwgMSwgNX19LAorICAgIHtJRklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl90dW5uZWxDb25maWdFbnRyeSwgMywgezIsIDEsIDV9fSwKICNkZWZpbmUgICBST1dTVEFUVVMgICAgICAgICAgICAgOAotICAgIHtST1dTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl90dW5uZWxDb25maWdFbnRyeSwgMywgezIsIDEsIDZ9fSwKKyAgICB7Uk9XU1RBVFVTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfdHVubmVsQ29uZmlnRW50cnksIDMsIHsyLCAxLCA2fX0sCiB9OwogCiAKIAotZXh0ZXJuIGludCAgICAgIHJlZ2lzdGVyX3N5c09SVGFibGUob2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqKTsKLWV4dGVybiBpbnQgICAgICB1bnJlZ2lzdGVyX3N5c09SVGFibGUob2lkICosIHNpemVfdCk7Ci0KIHN0YXRpYyBvaWQgICAgICBzeXNPUlRhYmxlX3JlZ1tdID0geyAxLCAzLCA2LCAxLCAyLCAxLCAxMCwgMTMxIH07Ci1zdGF0aWMgc2l6ZV90ICAgc3lzT1JUYWJsZV9yZWdsZW4gPSA4OwogCiBzdGF0aWMgc3RydWN0IHR1bm5lbCAqdHVubmVsczsKIApAQCAtMTcxLDcgKzE3NCw3IEBACiB2b2lkCiBkZWluaXRfdHVubmVsKHZvaWQpCiB7Ci0gICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlKHN5c09SVGFibGVfcmVnLCBzeXNPUlRhYmxlX3JlZ2xlbik7CisgICAgVU5SRUdJU1RFUl9TWVNPUl9FTlRSWShzeXNPUlRhYmxlX3JlZyk7CiB9CiAKIApAQCAtMTg4LDcgKzE5MSw3IEBACiB2b2lkCiBpbml0X3R1bm5lbCh2b2lkKQogewotICAgIHJlZ2lzdGVyX3N5c09SVGFibGUoc3lzT1JUYWJsZV9yZWcsIHN5c09SVGFibGVfcmVnbGVuLAorICAgIFJFR0lTVEVSX1NZU09SX0VOVFJZKHN5c09SVGFibGVfcmVnLAogICAgICAgICAgICAgICAgICAgICAgICAgIlJGQyAyNjY3IFRVTk5FTC1NSUIgaW1wbGVtZW50YXRpb24gZm9yICIKICAgICAgICAgICAgICAgICAgICAgICAgICJMaW51eCAyLjIueCBrZXJuZWxzLiIpOwogCkBAIC0yMTMsOCArMjE2LDggQEAKICAgICBvaWQgICAgICAgICAgICAgbmFtZVtNQVhfT0lEX0xFTl0gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDIsIDIsIDEsIDMgfTsKICAgICBzaXplX3QgICAgICAgICAgbGVuZ3RoID0gMTA7CiAgICAgc3RydWN0IHZhcmlhYmxlIGlmVHlwZV92YXJpYWJsZSA9Ci0gICAgICAgIHsgMywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfaWZFbnRyeSwgMTAsCi0gICAgICAgIHsxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAzfQorICAgICAgICB7IDMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICB2YXJfaWZFbnRyeSwgMTAsIHsxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAzfQogICAgIH07CiAgICAgdW5zaWduZWQgY2hhciAgKnA7CiAgICAgc2l6ZV90ICAgICAgICAgIHZhcl9sZW47CkBAIC0yNDUsMTUgKzI0OCwxNSBAQAogCiAKIAotc3RhdGljIGNoYXIgICAgKgorc3RhdGljIGNvbnN0IGNoYXIgKgogZ2V0TmFtZShpbnQgaW5kZXgpCiB7CiAjaWZuZGVmIFVTSU5HX0lGX01JQl9JRlRBQkxFX0lGVEFCTEVfTU9EVUxFCiAgICAgb2lkICAgICAgICAgICAgIG5hbWVbTUFYX09JRF9MRU5dID0geyAxLCAzLCA2LCAxLCAyLCAxLCAyLCAyLCAxLCAyIH07CiAgICAgc2l6ZV90ICAgICAgICAgIGxlbmd0aCA9IDEwOwogICAgIHN0cnVjdCB2YXJpYWJsZSBpZk5hbWVfdmFyaWFibGUgPQotICAgICAgICB7IDIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2lmRW50cnksIDEwLAotICAgICAgICB7MSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgMn0KKyAgICAgICAgeyAyLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgdmFyX2lmRW50cnksIDEwLCB7MSwgMywgNiwgMSwgMiwgMSwgMiwgMiwgMSwgMn0KICAgICB9OwogICAgIHVuc2lnbmVkIGNoYXIgICpwOwogICAgIHNpemVfdCAgICAgICAgICB2YXJfbGVuOwpAQCAtNDA3LDcgKzQxMCw3IEBACiAgICAgc3RhdGljIGludCAgICAgIG1heF9pbmRleCA9IDE7CiAgICAgc3RhdGljIHN0cnVjdCB0dW5uZWwgKmxhc3RfdHVubmVsID0gTlVMTDsKICAgICBzdHJ1Y3QgdHVubmVsICAqdHVubmVsOwotICAgIGNoYXIgICAgICAgICAgICppZm5hbWU7CisgICAgY29uc3QgY2hhciAgICAgKmlmbmFtZTsKICAgICBpbnQgICAgICAgICAgICAgdHlwZTsKIAogICAgIC8qCkBAIC00MTUsNyArNDE4LDcgQEAKICAgICAgKi8KICAgICBmb3IgKHR1bm5lbCA9IHR1bm5lbHM7IHR1bm5lbDsgdHVubmVsID0gdHVubmVsLT5uZXh0KSB7CiAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwKLSAgICAgICAgICAgICAgICAgICJ1cGRhdGVUdW5uZWxzKCk6IHVwZGF0aW5nICVzIChpbmRleD0lbHUpXG4iLAorICAgICAgICAgICAgICAgICAgInVwZGF0ZVR1bm5lbHMoKTogdXBkYXRpbmcgJXMgKGluZGV4PSUiIE5FVFNOTVBfUFJJbyAidSlcbiIsCiAgICAgICAgICAgICAgICAgICB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CiAgICAgICAgIHVwZGF0ZVR1bm5lbCh0dW5uZWwpOwogICAgIH0KQEAgLTQ2MSw3ICs0NjQsOCBAQAogICAgICAgICAgICAgbGFzdF90dW5uZWwgPSB0dW5uZWw7CiAKICAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwKLSAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlVHVubmVscygpOiBhZGRlZCAlcyAoaW5kZXg9JWx1IHN0YXRlPSVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAidXBkYXRlVHVubmVscygpOiBhZGRlZCAlcyAoaW5kZXg9JSIgTkVUU05NUF9QUklvCisgICAgICAgICAgICAgICAgICAgICAgInUgc3RhdGU9JWQpXG4iLAogICAgICAgICAgICAgICAgICAgICAgIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgsIHR1bm5lbC0+YWN0aXZlKSk7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHR5cGUgPT0gMCkKQEAgLTQ4Miw4ICs0ODYsOCBAQAogICAgICAgICBpZiAodHVubmVsLT5pZmluZGV4ID09IGluZGV4KSB7CiAgICAgICAgICAgICBpZiAoIXR1bm5lbC0+YWN0aXZlKQogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLAotICAgICAgICAgICAgICAgICAgICAgICIlcyAoaW5kZXg9JWx1KVxuIiwgdHVubmVsLT5pZm5hbWUsIHR1bm5lbC0+aWZpbmRleCkpOworICAgICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLCAiJXMgKGluZGV4PSUiIE5FVFNOTVBfUFJJbyAidSlcbiIsCisgICAgICAgICAgICAgICAgICAgICB0dW5uZWwtPmlmbmFtZSwgdHVubmVsLT5pZmluZGV4KSk7CiAgICAgICAgICAgICByZXR1cm4gdHVubmVsOwogICAgICAgICB9CiAgICAgfQpAQCAtNTA0LDggKzUwOCw4IEBACiAgICAgICAgIGlmICh0dW5uZWwtPmlmaW5kZXggPiBpbmRleCkgewogICAgICAgICAgICAgaWYgKCF0dW5uZWwtPmFjdGl2ZSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwKLSAgICAgICAgICAgICAgICAgICAgICAiJXMgKGluZGV4PSVsdSlcbiIsIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwgIiVzIChpbmRleD0lIiBORVRTTk1QX1BSSW8gInUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiB0dW5uZWw7CiAgICAgICAgIH0KICAgICB9CkBAIC01NDgsOCArNTUyLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqbGVuZ3RoKSAtIHR1bm5lbF9sZW4gLSAzKSkgewogICAgICAgICAgICAgaWYgKCF0dW5uZWwtPmFjdGl2ZSkKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwKLSAgICAgICAgICAgICAgICAgICAgICAiJXMgKGluZGV4PSVsdSlcbiIsIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKKyAgICAgICAgICAgIERFQlVHTVNHKCgidHVubmVsIiwgIiVzIChpbmRleD0lIiBORVRTTk1QX1BSSW8gInUpXG4iLAorICAgICAgICAgICAgICAgICAgICAgIHR1bm5lbC0+aWZuYW1lLCB0dW5uZWwtPmlmaW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiB0dW5uZWw7CiAgICAgICAgIH0KICAgICB9CkBAIC01OTIsOCArNTk2LDcgQEAKICAgICB9CiAKICAgICBpZiAobGFzdF90dW5uZWwpIHsKLSAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLAotICAgICAgICAgICAgICAgICAgIiVzIChpbmRleD0lbHUpXG4iLAorICAgICAgICBERUJVR01TRygoInR1bm5lbCIsICIlcyAoaW5kZXg9JSIgTkVUU05NUF9QUklvICJ1KVxuIiwKICAgICAgICAgICAgICAgICAgIGxhc3RfdHVubmVsLT5pZm5hbWUsIGxhc3RfdHVubmVsLT5pZmluZGV4KSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgREVCVUdNU0coKCJ0dW5uZWwiLCAiTk9ORVxuIikpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5jCmluZGV4IGJkNzg0ZmMuLjExNDdlZWYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmMKQEAgLTQsNiArNCwxMiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKKy8qIHdvcmthcm91bmQgZm9yIGJ1ZyBpbiBhdXRvY29uZiAyLjYwYiBhbmQgMi42MSAqLworI2lmZGVmIEhBVkVfR0VUTU5URU5UCisjdW5kZWYgSEFWRV9HRVRNTlRFTlQKKyNkZWZpbmUgSEFWRV9HRVRNTlRFTlQgMSAvKiBwcmV2aW91c2x5IG1pZ2h0IGJlIG9ubHkgIiNkZWZpbmUgSEFWRV9HRVRNTlRFTlQiICovCisjZW5kaWYKKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKICNpZiBIQVZFX1NURExJQl9ICkBAIC0xMTcsMTEgKzEyMyw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xMzAsOSArMTMyLDYgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0xNDAsNyArMTM5LDcgQEAKIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgImRpc2suaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAjaWYgVVNJTkdfVUNEX1NOTVBfRVJST1JNSUJfTU9EVUxFCiAjaW5jbHVkZSAiZXJyb3JtaWIuaCIKICNlbHNlCkBAIC0xNzAsMTAgKzE2OSw4IEBACiAgICAgaW50ICAgICAgICAgICAgIG1pbnBlcmNlbnQ7CiB9OwogCi0jaWZuZGVmICBJTlQzMl9NQVgKLSNkZWZpbmUgIElOVDMyX01BWCAgMHg3ZmZmZmZmZgotI2VuZGlmCi0KKyNkZWZpbmUgTUFYX0lOVF8zMiAweDdmZmZmZmZmCisjZGVmaW5lIE1BWF9VSU5UXzMyIDB4ZmZmZmZmZmYKIAogdW5zaWduZWQgaW50ICAgIG51bWRpc2tzOwogaW50ICAgICAgICAgICAgIGFsbERpc2tzSW5jbHVkZWQgPSAwOwpAQCAtMTgxLDIzICsxNzgsNDIgQEAKIHN0cnVjdCBkaXNrcGFydCAqZGlza3M7CiAKIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9kaXNrX3ZhcmlhYmxlc1tdID0gewotICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge01JQklOREVYfX0sCi0gIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JOQU1FfX0sCi0gIHtESVNLREVWSUNFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwKLSAgIHtESVNLREVWSUNFfX0sCi0gIHtESVNLTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLAotICAge0RJU0tNSU5JTVVNfX0sCi0gIHtESVNLTUlOUEVSQ0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLAotICAge0RJU0tNSU5QRVJDRU5UfX0sCi0gIHtESVNLVE9UQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTH19LAotICB7RElTS0FWQUlMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUx9fSwKLSAge0RJU0tVU0VELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFRH19LAotICB7RElTS1BFUkNFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwKLSAgIHtESVNLUEVSQ0VOVH19LAotICB7RElTS1BFUkNFTlROT0RFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsCi0gICB7RElTS1BFUkNFTlROT0RFfX0sCi0gIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9SRkxBR319LAotICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JNU0d9fQorICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtNSUJJTkRFWH19LAorICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUk5BTUV9fSwKKyAge0RJU0tERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tERVZJQ0V9fSwKKyAge0RJU0tNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS01JTklNVU19fSwKKyAge0RJU0tNSU5QRVJDRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS01JTlBFUkNFTlR9fSwKKyAge0RJU0tUT1RBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tUT1RBTH19LAorICB7RElTS0FWQUlMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMfX0sCisgIHtESVNLVVNFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VEfX0sCisgIHtESVNLUEVSQ0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tQRVJDRU5UfX0sCisgIHtESVNLUEVSQ0VOVE5PREUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLUEVSQ0VOVE5PREV9fSwKKyAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9SRkxBR319LAorICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0VSUk9STVNHfX0sCisgICB7RElTS1RPVEFMTE9XLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUxMT1d9fSwKKyAgIHtESVNLVE9UQUxISUdILCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUxISUdIfX0sCisgICB7RElTS0FWQUlMTE9XLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUxMT1d9fSwKKyAgIHtESVNLQVZBSUxISUdILCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLQVZBSUxISUdIfX0sCisgICB7RElTS1VTRURMT1csIEFTTl9VTlNJR05FRCwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tVU0VETE9XfX0sCisgICB7RElTS1VTRURISUdILCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFREhJR0h9fSwKIH07CiAKIC8qCkBAIC0yNDMsNyArMjU5LDYgQEAKIGRpc2tfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQogewogI2lmIEhBVkVfRlNUQUJfSCB8fCBIQVZFX0dFVE1OVEVOVCB8fCBIQVZFX1NUQVRGUwotICBjaGFyICAgICAgICAgICAgdG1wYnVmWzEwMjRdOwogICBjaGFyICAgICAgICAgICAgcGF0aFtTVFJNQVhdOwogICBpbnQgICAgICAgICAgICAgbWlucGVyY2VudDsKICAgaW50ICAgICAgICAgICAgIG1pbnNwYWNlOwpAQCAtMjUxLDIzICsyNjYsMTkgQEAKICAgaWYgKG51bWRpc2tzID09IG1heGRpc2tzKSB7CiAgICAgICBpZiAobWF4ZGlza3MgPT0gMCkgewogICAgICAgICAgIG1heGRpc2tzID0gNTA7Ci0gICAgICAgICAgZGlza3MgPSBtYWxsb2MobWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CisgICAgICAgICAgZGlza3MgPSAoc3RydWN0IGRpc2twYXJ0ICopbWFsbG9jKG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgICAgIGlmICghZGlza3MpIHsKICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWxlZCBmb3IgbmV3IGRpc2sgYWxsb2NhdGlvbi4iKTsKLSAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwotICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogICVzIiwgY3B0cik7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgICAgbWVtc2V0KGRpc2tzLCAwLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgbWF4ZGlza3MgKj0gMjsKLSAgICAgICAgICBkaXNrcyA9IHJlYWxsb2MoZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOworICAgICAgICAgIGRpc2tzID0gKHN0cnVjdCBkaXNrcGFydCAqKXJlYWxsb2MoZGlza3MsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgICAgIGlmICghZGlza3MpIHsKICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWxlZCBmb3IgbmV3IGRpc2sgYWxsb2NhdGlvbi4iKTsKLSAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6ICAlcyIsIGNwdHIpOwotICAgICAgICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogICVzIiwgY3B0cik7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgICAgbWVtc2V0KGRpc2tzICsgbWF4ZGlza3MvMiwgMCwgbWF4ZGlza3MvMiAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKQEAgLTI4NSw3ICsyOTYsNyBAQAogICAgKiByZWFkIG9wdGlvbmFsIG1pbmltdW0gZGlzayB1c2FnZSBzcGVjIAogICAgKi8KICAgaWYoY3B0ciAhPSBOVUxMKSB7Ci0gICAgICBpZihzdHJjaHIoY3B0ciwgJyUnKSA9PSAwKSB7CisgICAgICBpZihzdHJjaHIoY3B0ciwgJyUnKSA9PSBOVUxMKSB7CiAgICAgICAgICAgbWluc3BhY2UgPSBhdG9pKGNwdHIpOwogICAgICAgICAgIG1pbnBlcmNlbnQgPSAtMTsKICAgICAgIH0KQEAgLTMxMCwyNyArMzIxLDI0IEBACiBkaXNrX3BhcnNlX2NvbmZpZ19hbGwoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAjaWYgSEFWRV9GU1RBQl9IIHx8IEhBVkVfR0VUTU5URU5UIHx8IEhBVkVfU1RBVEZTCi0gIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07CiAgIGludCAgICAgICAgICAgICBtaW5wZXJjZW50ID0gRElTS01JTlBFUkNFTlQ7CiAgICAgCiAgIGlmIChudW1kaXNrcyA9PSBtYXhkaXNrcykgewogICAgICAgaWYgKG1heGRpc2tzID09IDApIHsKICAgICAgICAgICBtYXhkaXNrcyA9IDUwOwotICAgICAgICAgIGRpc2tzID0gbWFsbG9jKG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOworICAgICAgICAgIGRpc2tzID0gKHN0cnVjdCBkaXNrcGFydCAqKW1hbGxvYyhtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgICAgICBpZiAoIWRpc2tzKSB7CiAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsZWQgZm9yIG5ldyBkaXNrIGFsbG9jYXRpb24uIik7Ci0gICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKLSAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAgJXMiLCBjcHRyKTsKICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgIH0KICAgICAgICAgICBtZW1zZXQoZGlza3MsIDAsIG1heGRpc2tzICogc2l6ZW9mKHN0cnVjdCBkaXNrcGFydCkpOwogICAgICAgfSBlbHNlIHsKICAgICAgICAgICBtYXhkaXNrcyAqPSAyOwotICAgICAgICAgIGRpc2tzID0gcmVhbGxvYyhkaXNrcywgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CisgICAgICAgICAgZGlza3MgPSAoc3RydWN0IGRpc2twYXJ0ICopcmVhbGxvYyhkaXNrcywgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICAgICAgaWYgKCFkaXNrcykgewogICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbGVkIGZvciBuZXcgZGlzayBhbGxvY2F0aW9uLiIpOwotICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogICVzIiwgY3B0cik7Ci0gICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiXHRpZ25vcmluZzogICVzIiwgY3B0cik7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgICAgbWVtc2V0KGRpc2tzICsgbWF4ZGlza3MvMiwgMCwgbWF4ZGlza3MvMiAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKQEAgLTM0MCw3ICszNDgsNyBAQAogICAgKiByZWFkIHRoZSBtaW5pbXVtIGRpc2sgdXNhZ2UgcGVyY2VudAogICAgKi8KICAgaWYoY3B0ciAhPSBOVUxMKSB7Ci0gICAgICBpZihzdHJjaHIoY3B0ciwgJyUnKSAhPSAwKSB7CisgICAgICBpZihzdHJjaHIoY3B0ciwgJyUnKSAhPSBOVUxMKSB7CiAgICAgICAgICAgbWlucGVyY2VudCA9IGF0b2koY3B0cik7CiAgICAgICB9CiAgIH0KQEAgLTM1Miw4ICszNjAsNyBAQAogICAgKi8KICAgaWYoYWxsRGlza3NJbmNsdWRlZCkgewogICAgICAgY29uZmlnX3BlcnJvcigiaW5jbHVkZUFsbERpc2tzIGFscmVhZHkgc3BlY2lmaWVkLiIpOwotICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6IGluY2x1ZGVBbGxEaXNrcyAlcyIsIGNwdHIpOwotICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6IGluY2x1ZGVBbGxEaXNrcyAlcyIsIGNwdHIpOwogICB9CiAgIGVsc2UgewogICAgICAgYWxsRGlza3NJbmNsdWRlZCA9IDE7CkBAIC0zNzYsMjQgKzM4MywxOCBAQAogICBpZiAobnVtZGlza3MgPT0gbWF4ZGlza3MpIHsKICAgICAgIGlmIChtYXhkaXNrcyA9PSAwKSB7CiAgICAgICAgICAgbWF4ZGlza3MgPSA1MDsKLSAgICAgICAgICBkaXNrcyA9IG1hbGxvYyhtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKKyAgICAgICAgICBkaXNrcyA9IChzdHJ1Y3QgZGlza3BhcnQgKiltYWxsb2MobWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICAgICAgaWYgKCFkaXNrcykgewotICAgICAgICAgICAgICBjaGFyIHRtcGJ1ZlsxMDI0XTsKLSAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIlx0aWdub3Jpbmc6ICAlcyIsIGRldmljZSk7Ci0gICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCSAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiAgJXMiLCBkZXZpY2UpOwogICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgfQogICAgICAgICAgIG1lbXNldChkaXNrcywgMCwgbWF4ZGlza3MgKiBzaXplb2Yoc3RydWN0IGRpc2twYXJ0KSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICAgIG1heGRpc2tzICo9IDI7Ci0gICAgICAgICAgZGlza3MgPSByZWFsbG9jKGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKKyAgICAgICAgICBkaXNrcyA9IChzdHJ1Y3QgZGlza3BhcnQgKilyZWFsbG9jKGRpc2tzLCBtYXhkaXNrcyAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKICAgICAgICAgICBpZiAoIWRpc2tzKSB7Ci0gICAgICAgICAgICAgIGNoYXIgdG1wYnVmWzEwMjRdOwogICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtYWxsb2MgZmFpbGVkIGZvciBuZXcgZGlzayBhbGxvY2F0aW9uLiIpOwotICAgICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiXHRpZ25vcmluZzogICVzIiwgZGV2aWNlKTsKLSAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisJICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICAlcyIsIGRldmljZSk7CiAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICB9CiAgICAgICAgICAgbWVtc2V0KGRpc2tzICsgbWF4ZGlza3MvMiwgMCwgbWF4ZGlza3MvMiAqIHNpemVvZihzdHJ1Y3QgZGlza3BhcnQpKTsKQEAgLTQ2NCw3ICs0NjUsNyBAQAogI2lmIGRlZmluZWQoSEFWRV9HRVRNTlRFTlQpIHx8IGRlZmluZWQoSEFWRV9GU1RBQl9IKQogICBpbnQgZHVtbXkgPSAwOwogI2VuZGlmCi0gIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07CisKICAgLyogCiAgICAqIGZpbmQgdGhlIGRldmljZSBmb3IgdGhlIHBhdGggYW5kIGNvcHkgdGhlIGRldmljZSBpbnRvIHRoZQogICAgKiBzdHJpbmcgZGVjbGFyZWQgYWJvdmUgYW5kIGF0IHRoZSBlbmQgb2YgdGhlIHJvdXRpbmUgcmV0dXJuIGl0CkBAIC00NzUsOCArNDc2LDcgQEAKICNpZiBIQVZFX1NFVE1OVEVOVAogICBtbnRmcCA9IHNldG1udGVudChFVENfTU5UVEFCLCAiciIpOwogICBpZiAoIW1udGZwKSB7Ci0gICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbid0IG9wZW4gJXMgKHNldG1udGVudClcbiIsIEVUQ19NTlRUQUIgKTsKLSAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJDYW4ndCBvcGVuICVzIChzZXRtbnRlbnQpXG4iLCBFVENfTU5UVEFCKTsKICAgICAgIHJldHVybjsKICAgfQogICB3aGlsZSAobW50ZnAgJiYgTlVMTCAhPSAobW50ZW50ID0gZ2V0bW50ZW50KG1udGZwKSkpIHsKQEAgLTQ5Myw4ICs0OTMsNyBAQAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXRtZW50ZW50IGJ1dCBub3Qgc2V0bW50ZW50ICovCiAgIG1udGZwID0gZm9wZW4oRVRDX01OVFRBQiwgInIiKTsKICAgaWYgKCFtbnRmcCkgewotICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW4ndCBvcGVuICVzIChmb3BlbilcbiIsIEVUQ19NTlRUQUIgKTsKLSAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJDYW4ndCBvcGVuICVzIChmb3BlbilcbiIsIEVUQ19NTlRUQUIpOwogICAgICAgcmV0dXJuOwogICB9CiAgIHdoaWxlICgoaSA9IGdldG1udGVudChtbnRmcCwgJm1udHRhYikpID09IDApIHsKQEAgLTU0NSwxMSArNTQ0LDggQEAKICAgICBpZiAobnVtZGlza3MgPT0gbWF4ZGlza3MpIHsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAiQ291bGRuJ3QgZmluZCBkZXZpY2UgZm9yIGRpc2sgJXMiLAotICAgICAgICAgICAgIGRpc2tzW251bWRpc2tzXS5wYXRoKTsKLSAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgY29uZmlnX3B3YXJuKHRtcGJ1Zik7CisgICAgbmV0c25tcF9jb25maWdfd2FybigiQ291bGRuJ3QgZmluZCBkZXZpY2UgZm9yIGRpc2sgJXMiLAorCQkJZGlza3NbbnVtZGlza3NdLnBhdGgpOwogICAgIGRpc2tzW251bWRpc2tzXS5taW5pbXVtc3BhY2UgPSAtMTsKICAgICBkaXNrc1tudW1kaXNrc10ubWlucGVyY2VudCA9IC0xOwogICAgIGRpc2tzW251bWRpc2tzXS5wYXRoWzBdID0gMDsKQEAgLTU3MiwxMSArNTY4LDkgQEAKICAgRklMRSAgICAgICAgICAgKm1udGZwOwogI2VsaWYgSEFWRV9GU1RBQl9ICiAgIHN0cnVjdCBmc3RhYiAgICpmc3RhYjsKLSAgc3RydWN0IHN0YXQgICAgIHN0YXQxOwogI2VsaWYgSEFWRV9TVEFURlMKICAgc3RydWN0IHN0YXRmcyAgIHN0YXRmOwogI2VuZGlmCi0gIGNoYXIgICAgICAgICAgICB0bXBidWZbMTAyNF07CiAgIHN0YXRpYyBjaGFyICAgICBkZXZpY2VbU1RSTUFYXTsKICNpZiBkZWZpbmVkKEhBVkVfR0VUTU5URU5UKSAmJiAhZGVmaW5lZChIQVZFX1NFVE1OVEVOVCkKICAgaW50ICAgICAgICAgICAgIGk7CkBAIC01OTQsOCArNTg4LDcgQEAKICNpZiBIQVZFX1NFVE1OVEVOVAogICBtbnRmcCA9IHNldG1udGVudChFVENfTU5UVEFCLCAiciIpOwogICBpZiAoIW1udGZwKSB7Ci0gICAgICBzbnByaW50ZiggdG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIkNhbid0IG9wZW4gJXMgKHNldG1udGVudClcbiIsIEVUQ19NTlRUQUIgKTsKLSAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJDYW4ndCBvcGVuICVzIChzZXRtbnRlbnQpXG4iLCBFVENfTU5UVEFCKTsKICAgICAgIHJldHVybiBOVUxMOwogICB9CiAgIHdoaWxlIChtbnRmcCAmJiBOVUxMICE9IChtbnRlbnQgPSBnZXRtbnRlbnQobW50ZnApKSkKQEAgLTYxMyw4ICs2MDYsNyBAQAogI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXRtZW50ZW50IGJ1dCBub3Qgc2V0bW50ZW50ICovCiAgIG1udGZwID0gZm9wZW4oRVRDX01OVFRBQiwgInIiKTsKICAgaWYgKCFtbnRmcCkgewotICAgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDYW4ndCBvcGVuICVzIChmb3BlbilcbiIsIEVUQ19NTlRUQUIgKTsKLSAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJDYW4ndCBvcGVuICVzIChmb3BlbilcbiIsIEVUQ19NTlRUQUIpOwogICAgICAgcmV0dXJuIE5VTEw7CiAgIH0KICAgd2hpbGUgKChpID0gZ2V0bW50ZW50KG1udGZwLCAmbW50dGFiKSkgPT0gMCkKQEAgLTYyOSw3ICs2MjEsNiBAQAogICAgIHN0cmxjcHkoZGV2aWNlLCBtbnR0YWIubW50X3NwZWNpYWwsIHNpemVvZihkZXZpY2UpKTsKICNlbmRpZiAvKiBIQVZFX1NFVE1OVEVOVCAqLwogI2VsaWYgSEFWRV9GU1RBQl9ICi0gIHN0YXQocGF0aCwgJnN0YXQxKTsKICAgc2V0ZnNlbnQoKTsKICAgaWYgKChmc3RhYiA9IGdldGZzZmlsZShwYXRoKSkpCiAgICAgc3RybGNweShkZXZpY2UsIGZzdGFiLT5mc19zcGVjLCBzaXplb2YoZGV2aWNlKSk7CkBAIC02NDgsOSArNjM5LDcgQEAKICAgfQogI2VuZGlmCiAgIGVsc2UgewotICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICJDb3VsZG4ndCBmaW5kIGRldmljZSBmb3IgZGlzayAlcyIsCi0JICAgIHBhdGgpOwotICAgIGNvbmZpZ19wd2Fybih0bXBidWYpOworICAgIG5ldHNubXBfY29uZmlnX3dhcm4oIkNvdWxkbid0IGZpbmQgZGV2aWNlIGZvciBkaXNrICVzIiwgcGF0aCk7CiAgIH0KICNlbHNlCiAgIGNvbmZpZ19wZXJyb3IoIidkaXNrJyBjaGVja3Mgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGFyY2hpdGVjdHVyZS4iKTsKQEAgLTY1OSwzOSArNjQ4LDMzIEBACiB9CiAjZW5kaWYKIAotCiAvKgotICogdmFyX2V4dGVuc2libGVfZGlzayguLi4KLSAqIEFyZ3VtZW50czoKLSAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCi0gKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKLSAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCi0gKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKLSAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCi0gKiB3cml0ZV9tZXRob2QKLSAqIAorICogUGFydCBvZiBVQ0QtU05NUC1NSUI6OmRza0VudHJ5LCB3aGljaCBpcyBzbyBoYXJkIHRvIGZpbGwgCisgKiAoaS5lLiBwbGF0Zm9ybSBkZXBlbmRlbnQgcGFydHMpLgogICovCi11X2NoYXIgICAgICAgICAqCi12YXJfZXh0ZW5zaWJsZV9kaXNrKHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LAotICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17CitzdHJ1Y3QgZHNrX2VudHJ5IHsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgIGRza1RvdGFsOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgZHNrVXNlZDsKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgIGRza0F2YWlsOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgZHNrUGVyY2VudDsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIGRza1BlcmNlbnRJbm9kZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIGRza0Vycm9yRmxhZzsKK307CiAKLSAgICBpbnQgICAgICAgICAgICAgcGVyY2VudCwgaXNlcnJvcjsKLSAgICB1bnNpZ25lZCBpbnQgICAgZGlza251bSA9IDA7Ci0jaWYgIWRlZmluZWQoSEFWRV9TWVNfU1RBVFZGU19IKSAmJiAhZGVmaW5lZChIQVZFX1NUQVRGUykKLSAgICBkb3VibGUgICAgICAgICAgdG90YWxibGtzLCBmcmVlLCB1c2VkLCBhdmFpbCwgYXZhaWxibGtzOwotI2Vsc2UKLSAgICBzdGF0aWMgbG9uZyAgICAgYXZhaWw7Ci0jaWYgZGVmaW5lZChTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUykgfHwgZGVmaW5lZChTVFJVQ1RfU1RBVEZTX0hBU19GX0ZJTEVTKQotICAgIGludCAgICAgICAgICAgICBwZXJjZW50X2lub2RlOwotI2VuZGlmCi0jZW5kaWYKLSAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7Ci0gICAgc3RhdGljIGNoYXIgICAgIGVycm1zZ1szMDBdOworLyoqCisgKiBGaWxsIGluIHRoZSBwcm92aWRlZCBkc2tfZW50cnkgc3RydWN0dXJlLgorICogUmV0dXJucyAtMSBvbiBlcnJvciwgMCBvbiBzdWNjZXNzLgorICovCisKK3N0YXRpYyBpbnQKK2ZpbGxfZHNrX2VudHJ5KGludCBkaXNrbnVtLCBzdHJ1Y3QgZHNrX2VudHJ5ICplbnRyeSkKK3sKKyNpZiBkZWZpbmVkKEhBVkVfU1RBVFZGUykgfHwgZGVmaW5lZChIQVZFX1NUQVRGUykKICAgICBmbG9hdCAgICAgICAgICAgbXVsdGlwbGllcjsKKyNlbmRpZgorI2lmIGRlZmluZWQoSEFWRV9GU1RBQl9IKSAmJiAhZGVmaW5lZChIQVZFX1NZU19TVEFUVkZTX0gpICYmICFkZWZpbmVkKEhBVkVfU1RBVEZTKQorICAgIGRvdWJsZSAgICAgICAgICB0b3RhbGJsa3MsIGZyZWUsIHVzZWQsIGF2YWlsLCBhdmFpbGJsa3M7CisjZW5kaWYKIAogI2lmIGRlZmluZWQoSEFWRV9TVEFUVkZTKSB8fCBkZWZpbmVkKEhBVkVfU1RBVEZTKQogI2lmZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKQEAgLTcxMyw2ICs2OTYsMTM2IEBACiAjZW5kaWYKICNlbmRpZgogCisgICAgZW50cnktPmRza1BlcmNlbnRJbm9kZSA9IC0xOworCisjaWYgZGVmaW5lZChIQVZFX1NUQVRWRlMpIHx8IGRlZmluZWQoSEFWRV9TVEFURlMpCisjaWZkZWYgU1RBVF9TVEFURlNfRlNfREFUQQorICAgIGlmIChzdGF0dmZzKGRpc2tzW2Rpc2tudW1dLnBhdGgsICZmc2QpID09IC0xKQorI2Vsc2UKKyAgICBpZiAoc3RhdHZmcyhkaXNrc1tkaXNrbnVtXS5wYXRoLCAmdmZzKSA9PSAtMSkKKyNlbmRpZgorICAgIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IG9wZW4gZGV2aWNlICVzXG4iLAorICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5kZXZpY2UpOworICAgICAgICBzZXRQZXJyb3JzdGF0dXMoInN0YXR2ZnMgZGV2L2Rpc2siKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNpZmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCisgICAgdmZzLmZfYmxvY2tzID0gZnNkLmZkX2J0b3Q7CisgICAgdmZzLmZfYmZyZWUgPSBmc2QuZmRfYmZyZWU7CisgICAgdmZzLmZfYmF2YWlsID0gZnNkLmZkX2JmcmVlbjsKKyAgICB2ZnMuZl9ic2l6ZSA9IDEwMjQ7ICAgICAgICAgLyogIFVsdHJpeCBmX2JzaXplIGlzIGEgVk0gcGFyYW1ldGVyIGFwcGFyZW50bHkuICAqLworI2VuZGlmCisjaWYgZGVmaW5lZChIQVZFX09EUykKKyAgICB2ZnMuZl9ibG9ja3MgPSB2ZnMuZl9zcGFyZVswXTsKKyAgICB2ZnMuZl9iZnJlZSA9IHZmcy5mX3NwYXJlWzFdOworICAgIHZmcy5mX2JhdmFpbCA9IHZmcy5mX3NwYXJlWzJdOworI2VuZGlmCisKKyAgICBtdWx0aXBsaWVyID0gKGZsb2F0KXZmcy5mX2JzaXplIC8gKGZsb2F0KTEwMjQuMDsKKyNpZmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFCisgICAgaWYgKHZmcy5mX2Zyc2l6ZSA+IDI1NSkKKyAgICAgICAgbXVsdGlwbGllciA9IChmbG9hdCl2ZnMuZl9mcnNpemUgLyAoZmxvYXQpMTAyNC4wOworI2VuZGlmCisKKyAgICBlbnRyeS0+ZHNrVG90YWwgPSAodW5zaWduZWQgbG9uZyBsb25nKSh2ZnMuZl9ibG9ja3MgKiBtdWx0aXBsaWVyKTsKKyAgICBlbnRyeS0+ZHNrQXZhaWwgPSAodW5zaWduZWQgbG9uZyBsb25nKSh2ZnMuZl9iYXZhaWwgKiBtdWx0aXBsaWVyKTsKKyAgICBlbnRyeS0+ZHNrVXNlZCA9ICh1bnNpZ25lZCBsb25nIGxvbmcpKCh2ZnMuZl9ibG9ja3MgLSB2ZnMuZl9iZnJlZSkgKiBtdWx0aXBsaWVyKTsKKworICAgIGVudHJ5LT5kc2tQZXJjZW50ID0gCisgICAgICAgIHZmcy5mX2Jsb2NrcyA9PSAwID8gMCA6CisgICAgICAgIHZmcy5mX2JhdmFpbCA8PSAwID8gMTAwIDoKKyAgICAgICAgKGludCkgKChkb3VibGUpICh2ZnMuZl9ibG9ja3MgLSB2ZnMuZl9iZnJlZSkgLworICAgICAgICAgICAgICAgKGRvdWJsZSkgKHZmcy5mX2Jsb2NrcyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZmcy5mX2JmcmVlIC0gdmZzLmZfYmF2YWlsKSkgKiAxMDAuMCArIDAuNSk7CisKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GSUxFUykgfHwgZGVmaW5lZCBIQVZFX1NUUlVDVF9TVEFURlNfRl9GQVZBSUwKKyAgICBlbnRyeS0+ZHNrUGVyY2VudElub2RlID0gdmZzLmZfZmF2YWlsIDw9IDAgPyAxMDAgOgorICAgICAgICAoaW50KSAoKGRvdWJsZSkgKHZmcy5mX2ZpbGVzIC0gdmZzLmZfZmZyZWUpIC8KKyAgICAgICAgICAgICAgIChkb3VibGUpICh2ZnMuZl9maWxlcyAtCisgICAgICAgICAgICAgICAgICAgICAgICAgKHZmcy5mX2ZmcmVlIC0gdmZzLmZfZmF2YWlsKSkgKiAxMDAuMCArIDAuNSk7CisjZWxzZQorI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRklMRVMpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkZSRUUpCisgICAgZW50cnktPmRza1BlcmNlbnRJbm9kZSA9IHZmcy5mX2ZpbGVzID09IDAgPyAxMDAuMCA6CisgICAgICAoaW50KSAoKGRvdWJsZSkgKHZmcy5mX2ZpbGVzIC0gdmZzLmZfZmZyZWUpIC8KKyAgICAgICAgICAgICAgKGRvdWJsZSkgKHZmcy5mX2ZpbGVzKSAqIDEwMC4wICsgMC41KTsKKyNlbmRpZiAKKyNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GSUxFUykgKi8KKworI2VsaWYgSEFWRV9GU1RBQl9ICisgICAgLyoKKyAgICAgKiByZWFkIHRoZSBkaXNrIGluZm9ybWF0aW9uIAorICAgICAqLworICAgIGlmICgoZmlsZSA9IG9wZW4oZGlza3NbZGlza251bV0uZGV2aWNlLCAwKSkgPCAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZG4ndCBvcGVuIGRldmljZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0uZGV2aWNlKTsKKyAgICAgICAgc2V0UGVycm9yc3RhdHVzKCJvcGVuIGRldi9kaXNrIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbHNlZWsoZmlsZSwgKGxvbmcpIChTQkxPQ0sgKiBERVZfQlNJWkUpLCAwKTsKKyAgICBpZiAocmVhZChmaWxlLCAoY2hhciAqKSAmZmlsZXN5cywgU0JTSVpFKSAhPSBTQlNJWkUpIHsKKyAgICAgICAgc2V0UGVycm9yc3RhdHVzKCJvcGVuIGRldi9kaXNrIik7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciByZWFkaW5nIGRldmljZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0uZGV2aWNlKTsKKyAgICAgICAgY2xvc2UoZmlsZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY2xvc2UoZmlsZSk7CisKKyAgICB0b3RhbGJsa3MgPSBmaWxlc3lzLmZzX2RzaXplOworICAgIGZyZWUgPSBmaWxlc3lzLmZzX2NzdG90YWwuY3NfbmJmcmVlICogZmlsZXN5cy5mc19mcmFnICsKKyAgICAgICAgZmlsZXN5cy5mc19jc3RvdGFsLmNzX25mZnJlZTsKKyAgICB1c2VkID0gdG90YWxibGtzIC0gZnJlZTsKKyAgICBhdmFpbGJsa3MgPSB0b3RhbGJsa3MgKiAoMTAwIC0gZmlsZXN5cy5mc19taW5mcmVlKSAvIDEwMDsKKyAgICBhdmFpbCA9IGF2YWlsYmxrcyA+IHVzZWQgPyBhdmFpbGJsa3MgLSB1c2VkIDogMDsKKyAgICBlbnRyeS0+ZHNrUGVyY2VudCA9CisgICAgICAgIHRvdGFsYmxrcyA9PSAwID8gMCA6CisgICAgICAgIGF2YWlsYmxrcyA9PSAwID8gMTAwIDoKKyAgICAgICAgKGludCkgKChkb3VibGUpIHVzZWQgLyAoZG91YmxlKSB0b3RhbGJsa3MgKiAxMDAuMCArIDAuNSk7CisgICAgbXVsdGlwbGllciA9IChmbG9hdClmaWxlc3lzLmZzX2ZzaXplIC8gKGZsb2F0KTEwMjQuMDsKKyAgICBlbnRyeS0+ZHNrVG90YWwgPSAodW5zaWduZWQgbG9uZyBsb25nKSh0b3RhbGJsa3MgKiBtdWx0aXBsaWVyKTsKKyAgICBlbnRyeS0+ZHNrQXZhaWwgPSAodW5zaWduZWQgbG9uZyBsb25nKShhdmFpbCAqIG11bHRpcGxpZXIpOworICAgIGVudHJ5LT5kc2tVc2VkID0gKHVuc2lnbmVkIGxvbmcgbG9uZykodXNlZCAqIG11bHRpcGxpZXIpOworI2Vsc2UKKyAgICAvKiBNaW5HVyAqLworICAgIGVudHJ5LT5kc2tQZXJjZW50ID0gMDsKKyAgICBlbnRyeS0+ZHNrVG90YWwgPSAwOworICAgIGVudHJ5LT5kc2tBdmFpbCA9IDA7CisgICAgZW50cnktPmRza1VzZWQgPSAwOworI2VuZGlmCisKKyAgICBlbnRyeS0+ZHNrRXJyb3JGbGFnID0KKyAgICAgICAgKGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSA+PSAwCisgICAgICAgICAgICA/IGVudHJ5LT5kc2tBdmFpbCA8ICh1bnNpZ25lZCBsb25nIGxvbmcpZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlCisgICAgICAgICAgICA6IDEwMCAtIGVudHJ5LT5kc2tQZXJjZW50IDw9ICh1bnNpZ25lZCBpbnQpZGlza3NbZGlza251bV0ubWlucGVyY2VudCkgPyAxIDogMDsKKworICAgIHJldHVybiAwOworfQorCisvKgorICogdmFyX2V4dGVuc2libGVfZGlzayguLi4KKyAqIEFyZ3VtZW50czoKKyAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCisgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MgCisgKiBleGFjdCAgIElOICAgICAgLSBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQKKyAqIHZhcl9sZW4gT1VUICAgICAtIGxlbmd0aCBvZiB2YXJpYWJsZSBvciAwIGlmIGZ1bmN0aW9uIHJldHVybmVkCisgKiB3cml0ZV9tZXRob2QKKyAqIAorICovCit1X2NoYXIgICAgICAgICAqCit2YXJfZXh0ZW5zaWJsZV9kaXNrKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgaW50ICAgICAgICAgICAgIHJldDsKKwl1bnNpZ25lZCBpbnQJZGlza251bSA9IDA7CisgICAgc3RydWN0IGRza19lbnRyeSBlbnRyeTsKKyAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7CisgICAgc3RhdGljIGNoYXIgICAgIGVycm1zZ1szMDBdOworCiB0cnlBZ2FpbjoKICAgICBpZiAoaGVhZGVyX3NpbXBsZV90YWJsZQogICAgICAgICAodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCwgbnVtZGlza3MpKQpAQCAtNzM3LDE4OSArODUwLDgzIEBACiAgICAgICAgIGxvbmdfcmV0ID0gZGlza3NbZGlza251bV0ubWlucGVyY2VudDsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKICAgICB9Ci0jaWYgZGVmaW5lZChIQVZFX1NUQVRWRlMpIHx8IGRlZmluZWQoSEFWRV9TVEFURlMpCi0jaWZkZWYgU1RBVF9TVEFURlNfRlNfREFUQQotICAgIGlmIChzdGF0dmZzKGRpc2tzW2Rpc2tudW1dLnBhdGgsICZmc2QpID09IC0xKQotI2Vsc2UKLSAgICBpZiAoc3RhdHZmcyhkaXNrc1tkaXNrbnVtXS5wYXRoLCAmdmZzKSA9PSAtMSkKLSNlbmRpZgotICAgIHsKLSAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkbid0IG9wZW4gZGV2aWNlICVzXG4iLAotICAgICAgICAgICAgICAgICBkaXNrc1tkaXNrbnVtXS5kZXZpY2UpOwotICAgICAgICBzZXRQZXJyb3JzdGF0dXMoInN0YXR2ZnMgZGV2L2Rpc2siKTsKKworICAgIHJldCA9IGZpbGxfZHNrX2VudHJ5KGRpc2tudW0sICZlbnRyeSk7CisgICAgaWYgKHJldCA8IDApIHsKICAgICAgICAgaWYgKCFleGFjdCkKICAgICAgICAgICAgIGdvdG8gdHJ5QWdhaW47CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSNpZmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCi0gICAgdmZzLmZfYmxvY2tzID0gZnNkLmZkX2J0b3Q7Ci0gICAgdmZzLmZfYmZyZWUgPSBmc2QuZmRfYmZyZWU7Ci0gICAgdmZzLmZfYmF2YWlsID0gZnNkLmZkX2JmcmVlbjsKLSAgICB2ZnMuZl9ic2l6ZSA9IDEwMjQ7ICAgICAgICAgLyogIFVsdHJpeCBmX2JzaXplIGlzIGEgVk0gcGFyYW1ldGVyIGFwcGFyZW50bHkuICAqLwotI2VuZGlmCi0jaWYgZGVmaW5lZChIQVZFX09EUykKLSAgICB2ZnMuZl9ibG9ja3MgPSB2ZnMuZl9zcGFyZVswXTsKLSAgICB2ZnMuZl9iZnJlZSA9IHZmcy5mX3NwYXJlWzFdOwotICAgIHZmcy5mX2JhdmFpbCA9IHZmcy5mX3NwYXJlWzJdOwotI2VuZGlmCi0gICAgcGVyY2VudCA9Ci0gICAgICAgIHZmcy5mX2Jsb2NrcyA9PSAwID8gMCA6Ci0gICAgICAgIHZmcy5mX2JhdmFpbCA8PSAwID8gMTAwIDoKLSAgICAgICAgKGludCkgKChkb3VibGUpICh2ZnMuZl9ibG9ja3MgLSB2ZnMuZl9iZnJlZSkgLwotICAgICAgICAgICAgICAgKGRvdWJsZSkgKHZmcy5mX2Jsb2NrcyAtCi0gICAgICAgICAgICAgICAgICAgICAgICAgKHZmcy5mX2JmcmVlIC0gdmZzLmZfYmF2YWlsKSkgKiAxMDAuMCArIDAuNSk7Ci0gICAgbXVsdGlwbGllciA9IChmbG9hdCl2ZnMuZl9ic2l6ZSAvIChmbG9hdCkxMDI0LjA7Ci0jaWZkZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCi0gICAgaWYgKHZmcy5mX2Zyc2l6ZSA+IDI1NSkKLSAgICAgICAgbXVsdGlwbGllciA9IChmbG9hdCl2ZnMuZl9mcnNpemUgLyAoZmxvYXQpMTAyNC4wOwotI2VuZGlmCi0gICAgYXZhaWwgPSAobG9uZykodmZzLmZfYmF2YWlsICogbXVsdGlwbGllcik7Ci0gICAgaXNlcnJvciA9IChkaXNrc1tkaXNrbnVtXS5taW5pbXVtc3BhY2UgPj0gMCA/Ci0gICAgICAgICAgICAgICB2ZnMuZl9iYXZhaWwgPCAoZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlL211bHRpcGxpZXIpIDoKLSAgICAgICAgICAgICAgIDEwMCAtIHBlcmNlbnQgPD0gZGlza3NbZGlza251bV0ubWlucGVyY2VudCkgPyAxIDogMDsKLSNpZiBkZWZpbmVkKFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTKSB8fCBkZWZpbmVkIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkFWQUlMCi0gICAgcGVyY2VudF9pbm9kZSA9IHZmcy5mX2ZhdmFpbCA8PSAwID8gMTAwIDoKLSAgICAgICAgKGludCkgKChkb3VibGUpICh2ZnMuZl9maWxlcyAtIHZmcy5mX2ZmcmVlKSAvCi0gICAgICAgICAgICAgICAoZG91YmxlKSAodmZzLmZfZmlsZXMgLQotICAgICAgICAgICAgICAgICAgICAgICAgICh2ZnMuZl9mZnJlZSAtIHZmcy5mX2ZhdmFpbCkpICogMTAwLjAgKyAwLjUpOwotI2Vsc2UKLSNpZiBkZWZpbmVkKFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMpICYmIGRlZmluZWQoU1RSVUNUX1NUQVRGU19IQVNfRl9GRlJFRSkKLSAgIHBlcmNlbnRfaW5vZGUgPSB2ZnMuZl9maWxlcyA9PSAwID8gMTAwLjAgOgotICAgICAgKGludCkgKChkb3VibGUpICh2ZnMuZl9maWxlcyAtIHZmcy5mX2ZmcmVlKSAvCi0JICAgICAgICAgIChkb3VibGUpICh2ZnMuZl9maWxlcykgKiAxMDAuMCArIDAuNSk7Ci0jZW5kaWYgCi0jZW5kaWYgLyogZGVmaW5lZChTVFJVQ1RfU1RBVFZGU19IQVNfRl9GSUxFUykgKi8gCisKICAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewogICAgIGNhc2UgRElTS1RPVEFMOgotICAgICAgICBpZiAoIHZmcy5mX2Jsb2NrcyA+ICggSU5UMzJfTUFYIC8gbXVsdGlwbGllciApKQotICAgICAgICAgICAgbG9uZ19yZXQgPSBJTlQzMl9NQVg7CisgICAgICAgIGlmIChlbnRyeS5kc2tUb3RhbCA+IE1BWF9JTlRfMzIpCisgICAgICAgICAgICBsb25nX3JldCA9IE1BWF9JTlRfMzI7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKHZmcy5mX2Jsb2NrcyAqIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykoZW50cnkuZHNrVG90YWwpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1RPVEFMTE9XOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza1RvdGFsICYgTUFYX1VJTlRfMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVE9UQUxISUdIOgorICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza1RvdGFsID4+IDMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgICAgICAKICAgICBjYXNlIERJU0tBVkFJTDoKLSAgICAgICAgaWYgKCB2ZnMuZl9iYXZhaWwgPiAoIElOVDMyX01BWCAvIG11bHRpcGxpZXIgKSkKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gSU5UMzJfTUFYOworICAgICAgICBpZiAoZW50cnkuZHNrQXZhaWwgPiBNQVhfSU5UXzMyKQorICAgICAgICAgICAgbG9uZ19yZXQgPSBNQVhfSU5UXzMyOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICBsb25nX3JldCA9IChsb25nKSh2ZnMuZl9iYXZhaWwgKiBtdWx0aXBsaWVyKTsKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKGVudHJ5LmRza0F2YWlsKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tBVkFJTExPVzoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tBdmFpbCAmIE1BWF9VSU5UXzMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS0FWQUlMSElHSDoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tBdmFpbCA+PiAzMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKwogICAgIGNhc2UgRElTS1VTRUQ6Ci0gICAgICAgIGlmICggKHZmcy5mX2Jsb2NrcyAtIHZmcy5mX2JmcmVlKSA+ICggSU5UMzJfTUFYIC8gbXVsdGlwbGllciApKQotICAgICAgICAgICAgbG9uZ19yZXQgPSBJTlQzMl9NQVg7CisgICAgICAgIGlmIChlbnRyeS5kc2tVc2VkID4gTUFYX0lOVF8zMikKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gTUFYX0lOVF8zMjsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykoKHZmcy5mX2Jsb2NrcyAtIHZmcy5mX2JmcmVlKSAqIG11bHRpcGxpZXIpOworICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykoZW50cnkuZHNrVXNlZCk7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVVNFRExPVzoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tVc2VkICYgTUFYX1VJTlRfMzI7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVVNFREhJR0g6CisgICAgICAgIGxvbmdfcmV0ID0gZW50cnkuZHNrVXNlZCA+PiAzMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKwogICAgIGNhc2UgRElTS1BFUkNFTlQ6Ci0gICAgICAgIGxvbmdfcmV0ID0gcGVyY2VudDsKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tQZXJjZW50OwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotI2lmIGRlZmluZWQoU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMpIHx8IGRlZmluZWQgKFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMpCisKICAgICBjYXNlIERJU0tQRVJDRU5UTk9ERToKLSAgICAgICAgbG9uZ19yZXQgPSBwZXJjZW50X2lub2RlOworICAgICAgICBsb25nX3JldCA9IGVudHJ5LmRza1BlcmNlbnRJbm9kZTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSNlbmRpZgorCiAgICAgY2FzZSBFUlJPUkZMQUc6Ci0gICAgICAgIGxvbmdfcmV0ID0gaXNlcnJvcjsKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS5kc2tFcnJvckZsYWc7CiAgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKICAgICBjYXNlIEVSUk9STVNHOgotICAgICAgICBpZiAoaXNlcnJvcikgeworICAgICAgICBpZiAoZW50cnkuZHNrRXJyb3JGbGFnKSB7CiAgICAgICAgICAgICBpZiAoZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlID49IDApCiAgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICIlczogbGVzcyB0aGFuICVkIGZyZWUgKD0gJWQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLnBhdGgsIGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGF2YWlsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIGVudHJ5LmRza0F2YWlsKTsKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAogICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBsZXNzIHRoYW4gJWQlJSBmcmVlICg9ICVkJSUpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLnBhdGgsIGRpc2tzW2Rpc2tudW1dLm1pbnBlcmNlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBwZXJjZW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZW50cnkuZHNrUGVyY2VudCk7CiAgICAgICAgICAgICBlcnJtc2dbIHNpemVvZihlcnJtc2cpLTEgXSA9IDA7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgZXJybXNnWzBdID0gMDsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIChlcnJtc2cpKTsKICAgICB9Ci0jZWxzZQotI2lmIEhBVkVfRlNUQUJfSAotICAgIC8qCi0gICAgICogcmVhZCB0aGUgZGlzayBpbmZvcm1hdGlvbiAKLSAgICAgKi8KLSAgICBpZiAoKGZpbGUgPSBvcGVuKGRpc2tzW2Rpc2tudW1dLmRldmljZSwgMCkpIDwgMCkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGRuJ3Qgb3BlbiBkZXZpY2UgJXNcbiIsCi0gICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLmRldmljZSk7Ci0gICAgICAgIHNldFBlcnJvcnN0YXR1cygib3BlbiBkZXYvZGlzayIpOwotICAgICAgICBpZiAoIWV4YWN0KQotICAgICAgICAgICAgZ290byB0cnlBZ2FpbjsKLSAgICAgICAgcmV0dXJuIChOVUxMKTsKLSAgICB9Ci0gICAgbHNlZWsoZmlsZSwgKGxvbmcpIChTQkxPQ0sgKiBERVZfQlNJWkUpLCAwKTsKLSAgICBpZiAocmVhZChmaWxlLCAoY2hhciAqKSAmZmlsZXN5cywgU0JTSVpFKSAhPSBTQlNJWkUpIHsKLSAgICAgICAgc2V0UGVycm9yc3RhdHVzKCJvcGVuIGRldi9kaXNrIik7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJFcnJvciByZWFkaW5nIGRldmljZSAlc1xuIiwKLSAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0uZGV2aWNlKTsKLSAgICAgICAgY2xvc2UoZmlsZSk7Ci0gICAgICAgIGlmICghZXhhY3QpCi0gICAgICAgICAgICBnb3RvIHRyeUFnYWluOwotICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgIH0KLSAgICBjbG9zZShmaWxlKTsKLSAgICB0b3RhbGJsa3MgPSBmaWxlc3lzLmZzX2RzaXplOwotICAgIGZyZWUgPSBmaWxlc3lzLmZzX2NzdG90YWwuY3NfbmJmcmVlICogZmlsZXN5cy5mc19mcmFnICsKLSAgICAgICAgZmlsZXN5cy5mc19jc3RvdGFsLmNzX25mZnJlZTsKLSAgICB1c2VkID0gdG90YWxibGtzIC0gZnJlZTsKLSAgICBhdmFpbGJsa3MgPSB0b3RhbGJsa3MgKiAoMTAwIC0gZmlsZXN5cy5mc19taW5mcmVlKSAvIDEwMDsKLSAgICBhdmFpbCA9IGF2YWlsYmxrcyA+IHVzZWQgPyBhdmFpbGJsa3MgLSB1c2VkIDogMDsKLSAgICBwZXJjZW50ID0KLSAgICAgICAgdG90YWxibGtzID09IDAgPyAwIDoKLSAgICAgICAgYXZhaWxibGtzID09IDAgPyAxMDAgOgotICAgICAgICAoaW50KSAoKGRvdWJsZSkgdXNlZCAvIChkb3VibGUpIHRvdGFsYmxrcyAqIDEwMC4wICsgMC41KTsKLSAgICBtdWx0aXBsaWVyID0gKGZsb2F0KWZpbGVzeXMuZnNfZnNpemUgLyAoZmxvYXQpMTAyNC4wOwotICAgIGlzZXJyb3IgPQotICAgICAgICAoZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlID49IDAKLSAgICAgICAgICAgID8gYXZhaWwgKiBtdWx0aXBsaWVyIDwgZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlCi0gICAgICAgICAgICA6IDEwMCAtIHBlcmNlbnQgPD0gZGlza3NbZGlza251bV0ubWlucGVyY2VudCkgPyAxIDogMDsKLSAgICBzd2l0Y2ggKHZwLT5tYWdpYykgewotICAgIGNhc2UgRElTS1RPVEFMOgotICAgICAgICBpZiAoIHRvdGFsYmxrcyA+ICggSU5UMzJfTUFYIC8gbXVsdGlwbGllciApKQotICAgICAgICAgICAgbG9uZ19yZXQgPSBJTlQzMl9NQVg7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGxvbmdfcmV0ID0gKGxvbmcpKHRvdGFsYmxrcyAqIG11bHRpcGxpZXIpOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotICAgIGNhc2UgRElTS0FWQUlMOgotICAgICAgICBpZiAoIGF2YWlsID4gKCBJTlQzMl9NQVggLyBtdWx0aXBsaWVyICkpCi0gICAgICAgICAgICBsb25nX3JldCA9IElOVDMyX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykoYXZhaWwgKiBtdWx0aXBsaWVyKTsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSAgICBjYXNlIERJU0tVU0VEOgotICAgICAgICBpZiAoIHVzZWQgPiAoICBJTlQzMl9NQVggLyBtdWx0aXBsaWVyICkpCi0gICAgICAgICAgICBsb25nX3JldCA9IElOVDMyX01BWDsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZykodXNlZCAqIG11bHRpcGxpZXIpOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotICAgIGNhc2UgRElTS1BFUkNFTlQ6Ci0gICAgICAgIGxvbmdfcmV0ID0gcGVyY2VudDsKLSAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKLSAgICBjYXNlIEVSUk9SRkxBRzoKLSAgICAgICAgbG9uZ19yZXQgPSBpc2Vycm9yOwotICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwotICAgIGNhc2UgRVJST1JNU0c6Ci0gICAgICAgIGlmIChpc2Vycm9yKSB7Ci0gICAgICAgICAgICBpZiAoZGlza3NbZGlza251bV0ubWluaW11bXNwYWNlID49IDApCi0gICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICIlczogbGVzcyB0aGFuICVkIGZyZWUgKD0gJWQpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tzW2Rpc2tudW1dLnBhdGgsIGRpc2tzW2Rpc2tudW1dLm1pbmltdW1zcGFjZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsICogZmlsZXN5cy5mc19mc2l6ZSAvIDEwMjQpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAiJXM6IGxlc3MgdGhhbiAlZCUlIGZyZWUgKD0gJWQlJSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgZGlza3NbZGlza251bV0ucGF0aCwgZGlza3NbZGlza251bV0ubWlucGVyY2VudCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHBlcmNlbnQpOwotICAgICAgICAgICAgZXJybXNnWyBzaXplb2YoZXJybXNnKS0xIF0gPSAwOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIGVycm1zZ1swXSA9IDA7Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7Ci0gICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoZXJybXNnKSk7Ci0gICAgfQotI2VuZGlmCi0jZW5kaWYKICAgICByZXR1cm4gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2suaAppbmRleCA2YmM1YjE0Li4yMGU5MzMyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlzay5oCkBAIC03LDcgKzcsNyBAQAogCiB2b2lkICAgICAgICAgICAgaW5pdF9kaXNrKHZvaWQpOwogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogCiAgICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9leHRlbnNpYmxlX2Rpc2s7CiAKQEAgLTIxLDUgKzIxLDExIEBACiAjZGVmaW5lIERJU0tVU0VEIDgKICNkZWZpbmUgRElTS1BFUkNFTlQgOQogI2RlZmluZSBESVNLUEVSQ0VOVE5PREUgMTAKKyNkZWZpbmUgRElTS1RPVEFMTE9XIDExCisjZGVmaW5lIERJU0tUT1RBTEhJR0ggMTIKKyNkZWZpbmUgRElTS0FWQUlMTE9XIDEzCisjZGVmaW5lIERJU0tBVkFJTEhJR0ggMTQKKyNkZWZpbmUgRElTS1VTRURMT1cgMTUKKyNkZWZpbmUgRElTS1VTRURISUdIIDE2CiAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX0RJU0tfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhMzc2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmMKQEAgLTAsMCArMSw0MjQgQEAKKy8qCisgKiBkaXNrX2h3LmMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvZnN5cy5oPgorCisjaW5jbHVkZSAic3RydWN0LmgiCisjaW5jbHVkZSAiZGlzay5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgorI2lmIFVTSU5HX1VDRF9TTk1QX0VSUk9STUlCX01PRFVMRQorI2luY2x1ZGUgImVycm9ybWliLmgiCisjZWxzZQorI2RlZmluZSBzZXRQZXJyb3JzdGF0dXMoeCkgc25tcF9sb2dfcGVycm9yKHgpCisjZW5kaWYKKworLyoKKyAqICAqIGNvbmZpZyBmaWxlIHBhcnNpbmcgcm91dGluZXMKKyAqICAgKi8KK3N0YXRpYyB2b2lkICAgICAgIGRpc2tfZnJlZV9jb25maWcodm9pZCk7CitzdGF0aWMgdm9pZCAgICAgICBkaXNrX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7CitzdGF0aWMgdm9pZCAgICAgICBkaXNrX3BhcnNlX2NvbmZpZ19hbGwoY29uc3QgY2hhciAqLCBjaGFyICopOworCitzdGF0aWMgbmV0c25tcF9mc3lzX2luZm8gKiogX2V4cGFuZF9kaXNrX2FycmF5KCBjaGFyICpjcHRyICk7CisKKyNkZWZpbmUgTUFYX0lOVF8zMiAweDdmZmZmZmZmCisjZGVmaW5lIE1BWF9VSU5UXzMyIDB4ZmZmZmZmZmYKKworaW50ICAgICAgICAgICAgIG51bWRpc2tzOworaW50ICAgICAgICAgICAgIGFsbERpc2tzSW5jbHVkZWQgPSAwOworaW50ICAgICAgICAgICAgIG1heGRpc2tzID0gMDsKK25ldHNubXBfZnN5c19pbmZvICoqZGlza3MgPSBOVUxMOworCitzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfZGlza192YXJpYWJsZXNbXSA9IHsKKyAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7TUlCSU5ERVh9fSwKKyAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RVJST1JOQU1FfX0sCisgIHtESVNLREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLREVWSUNFfX0sCisgIHtESVNLTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tNSU5JTVVNfX0sCisgIHtESVNLTUlOUEVSQ0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tNSU5QRVJDRU5UfX0sCisgIHtESVNLVE9UQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVE9UQUx9fSwKKyAge0RJU0tBVkFJTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgdmFyX2V4dGVuc2libGVfZGlzaywgMSwge0RJU0tBVkFJTH19LAorICB7RElTS1VTRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFRH19LAorICB7RElTS1BFUkNFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLUEVSQ0VOVH19LAorICB7RElTS1BFUkNFTlROT0RFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1BFUkNFTlROT0RFfX0sCisgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUkZMQUd9fSwKKyAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtFUlJPUk1TR319LAorICAge0RJU0tUT1RBTExPVywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMTE9XfX0sCisgICB7RElTS1RPVEFMSElHSCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1RPVEFMSElHSH19LAorICAge0RJU0tBVkFJTExPVywgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMTE9XfX0sCisgICB7RElTS0FWQUlMSElHSCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS0FWQUlMSElHSH19LAorICAge0RJU0tVU0VETE9XLCBBU05fVU5TSUdORUQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgIHZhcl9leHRlbnNpYmxlX2Rpc2ssIDEsIHtESVNLVVNFRExPV319LAorICAge0RJU0tVU0VESElHSCwgQVNOX1VOU0lHTkVELCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICB2YXJfZXh0ZW5zaWJsZV9kaXNrLCAxLCB7RElTS1VTRURISUdIfX0sCit9OworCisvKgorICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCisgKiByZWdpc3RlcmluZyB1bmRlcm5lYXRoIAorICovCitvaWQgICAgICAgICAgICAgZGlza192YXJpYWJsZXNfb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIE5FVFNOTVBfRElTS01JQk5VTSwgMSB9OworCit2b2lkCitpbml0X2Rpc2tfaHcodm9pZCkKK3sKKyAgLyoKKyAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUgCisgICAqLworICBSRUdJU1RFUl9NSUIoInVjZC1zbm1wL2Rpc2siLCBleHRlbnNpYmxlX2Rpc2tfdmFyaWFibGVzLCB2YXJpYWJsZTIsCisJICAgICAgIGRpc2tfdmFyaWFibGVzX29pZCk7CisKKyAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRpc2siLCBkaXNrX3BhcnNlX2NvbmZpZywKKwkJCQlkaXNrX2ZyZWVfY29uZmlnLAorCQkJCSJwYXRoIFsgbWluc3BhY2UgfCBtaW5wZXJjZW50JSBdIik7CisgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJpbmNsdWRlQWxsRGlza3MiLCBkaXNrX3BhcnNlX2NvbmZpZ19hbGwsCisJCQkJZGlza19mcmVlX2NvbmZpZywKKwkJCQkibWlucGVyY2VudCUiKTsKKyAgYWxsRGlza3NJbmNsdWRlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkCitkaXNrX2ZyZWVfY29uZmlnKHZvaWQpCit7CisgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKworICBmb3IgKCBlbnRyeSAgPSBuZXRzbm1wX2ZzeXNfZ2V0X2ZpcnN0KCk7CisgICAgICAgIGVudHJ5ICE9IE5VTEw7CisgICAgICAgIGVudHJ5ICA9IG5ldHNubXBfZnN5c19nZXRfbmV4dCggZW50cnkgKSkgeworCisgICAgICBlbnRyeS0+bWluc3BhY2UgICA9IC0xOworICAgICAgZW50cnktPm1pbnBlcmNlbnQgPSAtMTsKKyAgICAgIGVudHJ5LT5mbGFncyAgICAgJj0gfk5FVFNOTVBfRlNfRkxBR19VQ0Q7CisgIH0KKyAgaWYgKGRpc2tzKSB7CisgICAgIGZyZWUoIGRpc2tzICk7CisgICAgIGRpc2tzID0gTlVMTDsKKyAgICAgbWF4ZGlza3MgPSBudW1kaXNrcyA9IDA7CisgIH0KKyAgYWxsRGlza3NJbmNsdWRlZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIAorZGlza19wYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCit7CisgIGNoYXIgICAgICAgICAgICBwYXRoW1NUUk1BWF07CisgIGludCAgICAgICAgICAgICBtaW5wZXJjZW50OworICBpbnQgICAgICAgICAgICAgbWluc3BhY2U7CisgIG5ldHNubXBfZnN5c19pbmZvICplbnRyeTsKKworICAvKgorICAgKiBFbnN1cmUgdGhlcmUgaXMgc3BhY2UgZm9yIHRoZSBuZXcgZW50cnkKKyAgICovCisgIGlmIChudW1kaXNrcyA9PSBtYXhkaXNrcykgeworICAgICAgaWYgKCFfZXhwYW5kX2Rpc2tfYXJyYXkoIGNwdHIgKSkgCisgICAgICAgICAgcmV0dXJuOworICB9CisKKyAgLyoKKyAgICogcmVhZCBkaXNrIHBhdGggKGVnLCAvMSBvciAvdXNyKSAKKyAgICovCisgIGNvcHlfbndvcmQoY3B0ciwgcGF0aCwgc2l6ZW9mKHBhdGgpKTsKKyAgY3B0ciA9IHNraXBfbm90X3doaXRlKGNwdHIpOworICBjcHRyID0gc2tpcF93aGl0ZShjcHRyKTsKKwkKKyAgLyoKKyAgICogcmVhZCBvcHRpb25hbCBtaW5pbXVtIGRpc2sgdXNhZ2Ugc3BlYyAKKyAgICovCisgIGlmKGNwdHIgIT0gTlVMTCkgeworICAgICAgaWYoc3RyY2hyKGNwdHIsICclJykgPT0gTlVMTCkgeworICAgICAgICAgIG1pbnNwYWNlID0gYXRvaShjcHRyKTsKKyAgICAgICAgICBtaW5wZXJjZW50ID0gLTE7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgICBtaW5zcGFjZSA9IC0xOworICAgICAgICAgIG1pbnBlcmNlbnQgPSBhdG9pKGNwdHIpOworICAgICAgfQorICB9IGVsc2UgeworICAgICAgbWluc3BhY2UgPSBORVRTTk1QX0RFRkRJU0tNSU5JTVVNU1BBQ0U7CisgICAgICBtaW5wZXJjZW50ID0gLTE7CisgIH0KKworICAvKgorICAgKiBjaGVjayBpZiB0aGUgZGlzayBhbHJlYWR5IGV4aXN0cywgaWYgc28gdGhlbiBtb2RpZnkgaXRzCisgICAqIHBhcmFtZXRlcnMuIGlmIGl0IGRvZXMgbm90IGV4aXN0IHRoZW4gYWRkIGl0CisgICAqLworICBlbnRyeSA9IG5ldHNubXBfZnN5c19ieV9wYXRoKCBwYXRoLCBORVRTTk1QX0ZTX0ZJTkRfQ1JFQVRFICk7CisgIGlmICggZW50cnkgKSB7CisgICAgICBlbnRyeS0+bWluc3BhY2UgICA9IG1pbnNwYWNlOworICAgICAgZW50cnktPm1pbnBlcmNlbnQgPSBtaW5wZXJjZW50OworICAgICAgZW50cnktPmZsYWdzICAgICB8PSBORVRTTk1QX0ZTX0ZMQUdfVUNEOworICAgICAgZGlza3NbbnVtZGlza3MrK10gPSBlbnRyeTsKKyAgfQorfQorCitzdGF0aWMgdm9pZCAKK2Rpc2tfcGFyc2VfY29uZmlnX2FsbChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKyAgaW50ICAgICAgICAgICAgIG1pbnBlcmNlbnQgPSBESVNLTUlOUEVSQ0VOVDsKKyAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworICAgIAorICAvKgorICAgKiByZWFkIHRoZSBtaW5pbXVtIGRpc2sgdXNhZ2UgcGVyY2VudAorICAgKi8KKyAgaWYoY3B0ciAhPSBOVUxMKSB7CisgICAgICBpZihzdHJjaHIoY3B0ciwgJyUnKSAhPSBOVUxMKSB7CisgICAgICAgICAgbWlucGVyY2VudCA9IGF0b2koY3B0cik7CisgICAgICB9CisgIH0KKyAgLyoKKyAgICogaWYgd2UgaGF2ZSBhbHJlYWR5IHNlZW4gdGhlICJpbmNsdWRlQWxsRGlza3MiIGRpcmVjdGl2ZQorICAgKiB0aGVuIHNlYXJjaCBmb3IgdGhlIGRpc2sgaW4gdGhlICJkaXNrcyIgYXJyYXkgYW5kIG1vZGlmeQorICAgKiB0aGUgdmFsdWVzLiBpZiB3ZSBoYXZlbnQgc2VlbiB0aGUgImluY2x1ZGVBbGxEaXNrcyIKKyAgICogZGlyZWN0aXZlIHRoZW4gaW5jbHVkZSB0aGlzIGRpc2sKKyAgICovCisgIGlmKGFsbERpc2tzSW5jbHVkZWQpIHsKKyAgICAgIGNvbmZpZ19wZXJyb3IoImluY2x1ZGVBbGxEaXNrcyBhbHJlYWR5IHNwZWNpZmllZC4iKTsKKyAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJcdGlnbm9yaW5nOiBpbmNsdWRlQWxsRGlza3MgJXMiLCBjcHRyKTsKKyAgfQorICBlbHNlIHsKKworICAgICAgbmV0c25tcF9mc3lzX2xvYWQoIE5VTEwsIE5VTEwgKTsgIC8qIFByaW1lIHRoZSBmc3lzIEgvVyBtb2R1bGUgKi8KKyAgICAgIGZvciAoIGVudHJ5ICA9IG5ldHNubXBfZnN5c19nZXRfZmlyc3QoKTsKKyAgICAgICAgICAgIGVudHJ5ICE9IE5VTEw7CisgICAgICAgICAgICBlbnRyeSAgPSBuZXRzbm1wX2ZzeXNfZ2V0X25leHQoIGVudHJ5ICkpIHsKKworICAgICAgICAgIGlmICggIShlbnRyeS0+ZmxhZ3MgJiBORVRTTk1QX0ZTX0ZMQUdfQUNUSVZFICkpCisgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgIGVudHJ5LT5taW5zcGFjZSAgID0gLTE7CisgICAgICAgICAgZW50cnktPm1pbnBlcmNlbnQgPSBtaW5wZXJjZW50OworICAgICAgICAgIGVudHJ5LT5mbGFncyAgICAgfD0gTkVUU05NUF9GU19GTEFHX1VDRDsKKyAgICAgICAgICAvKgorICAgICAgICAgICAqIEVuc3VyZSB0aGVyZSBpcyBzcGFjZSBmb3IgdGhlIG5ldyBlbnRyeQorICAgICAgICAgICAqLworICAgICAgICAgIGlmIChudW1kaXNrcyA9PSBtYXhkaXNrcykgeworICAgICAgICAgICAgICBpZiAoIV9leHBhbmRfZGlza19hcnJheSggZW50cnktPmRldmljZSApKSAKKyAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgZGlza3NbbnVtZGlza3MrK10gPSBlbnRyeTsKKyAgICAgIH0KKyAgICAgIGFsbERpc2tzSW5jbHVkZWQgPSAxOworICB9Cit9CisKKworc3RhdGljIGludCBfcGVyY2VudCggdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlLCB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWwgKSB7CisgICAgZmxvYXQgdj12YWx1ZSwgdD10b3RhbCwgcGN0OworCisgICAgLyogYXZvaWQgZGl2aXNpb24gYnkgemVybyAqLworICAgIGlmICh0b3RhbCA9PSAwKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHBjdCAgPSAodioxMDApL3Q7ICAgLyogQ2FsY3VsYXRlIHBlcmNlbnRhZ2UgdXNpbmcgZmxvYXRpbmcgcG9pbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaXRobWV0aWMsIHRvIGF2b2lkIG92ZXJmbG93IGVycm9ycyAqLworICAgIHBjdCArPSAwLjU7ICAgICAgICAgLyogcm91bmRpbmcgKi8KKyAgICByZXR1cm4gKGludClwY3Q7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2ZzeXNfaW5mbyAqKgorX2V4cGFuZF9kaXNrX2FycmF5KCBjaGFyICpjcHRyICkgeworCisgICAgaWYgKCBtYXhkaXNrcyA9PSAwICkKKyAgICAgICAgbWF4ZGlza3MgID0gNTA7CisgICAgZWxzZQorICAgICAgICBtYXhkaXNrcyAqPSAyOworCisgICAgZGlza3MgPSByZWFsbG9jKCBkaXNrcywgbWF4ZGlza3MgKiBzaXplb2YoIG5ldHNubXBfZnN5c19pbmZvKikpOworICAgIGlmICghZGlza3MpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWxlZCBmb3IgbmV3IGRpc2sgYWxsb2NhdGlvbi4iKTsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIlx0aWdub3Jpbmc6ICVzIiwgY3B0cik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICggbWF4ZGlza3MgPT0gNTAgKQorICAgICAgICBtZW1zZXQoZGlza3MsICAgICAgICAgICAgICAwLCAgbWF4ZGlza3MgICAqIHNpemVvZiggbmV0c25tcF9mc3lzX2luZm8qKSk7CisgICAgZWxzZQorICAgICAgICBtZW1zZXQoZGlza3MgKyBtYXhkaXNrcy8yLCAwLCAgbWF4ZGlza3MvMiAqIHNpemVvZiggbmV0c25tcF9mc3lzX2luZm8qKSk7CisKKyAgICByZXR1cm4gZGlza3M7Cit9CisKKworLyoKKyAqIHZhcl9leHRlbnNpYmxlX2Rpc2soLi4uCisgKiBBcmd1bWVudHM6CisgKiB2cCAgICAgSU4gICAgICAtIHBvaW50ZXIgdG8gdmFyaWFibGUgZW50cnkgdGhhdCBwb2ludHMgaGVyZQorICogbmFtZSAgICBJTi9PVVQgIC0gSU4vbmFtZSByZXF1ZXN0ZWQsIE9VVC9uYW1lIGZvdW5kCisgKiBsZW5ndGggIElOL09VVCAgLSBsZW5ndGggb2YgSU4vT1VUIG9pZCdzIAorICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKiAKKyAqLwordV9jaGFyICAgICAgICAgKgordmFyX2V4dGVuc2libGVfZGlzayhzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIGludCAgICAgICAgICAgICBkaXNrbnVtID0gMDsKKyAgbmV0c25tcF9mc3lzX2luZm8gKmVudHJ5OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyB2YWw7CisgICAgc3RhdGljIGxvbmcgICAgIGxvbmdfcmV0OworICAgIHN0YXRpYyBjaGFyICAgICBlcnJtc2dbMzAwXTsKKyAgICBuZXRzbm1wX2NhY2hlICAqY2FjaGU7CisKKyAgICAvKiBVcGRhdGUgdGhlIGZzeXMgSC9XIG1vZHVsZSAqLworICAgIGNhY2hlID0gbmV0c25tcF9mc3lzX2dldF9jYWNoZSgpOworICAgIG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZChjYWNoZSk7CisKK3RyeUFnYWluOgorICAgIGlmIChoZWFkZXJfc2ltcGxlX3RhYmxlCisgICAgICAgICh2cCwgbmFtZSwgbGVuZ3RoLCBleGFjdCwgdmFyX2xlbiwgd3JpdGVfbWV0aG9kLCBudW1kaXNrcykpCisgICAgICAgIHJldHVybiAoTlVMTCk7CisgICAgZGlza251bSA9IG5hbWVbKmxlbmd0aCAtIDFdIC0gMTsKKyAgICBlbnRyeSA9IGRpc2tzW2Rpc2tudW1dOworICAgIGlmICggIWVudHJ5ICkgeworICAgICAgICBpZiAoIWV4YWN0IHx8ICEoZW50cnktPmZsYWdzICYgTkVUU05NUF9GU19GTEFHX1VDRCkpCisgICAgICAgICAgICBnb3RvIHRyeUFnYWluOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworICAgIGNhc2UgTUlCSU5ERVg6CisgICAgICAgIGxvbmdfcmV0ID0gZGlza251bSArIDE7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBFUlJPUk5BTUU6ICAgICAgICAgICAgLyogRElTS1BBVEggKi8KKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZW50cnktPnBhdGgpOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKillbnRyeS0+cGF0aCk7CisgICAgY2FzZSBESVNLREVWSUNFOgorICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlbnRyeS0+ZGV2aWNlKTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopZW50cnktPmRldmljZSk7CisgICAgY2FzZSBESVNLTUlOSU1VTToKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS0+bWluc3BhY2U7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLTUlOUEVSQ0VOVDoKKyAgICAgICAgbG9uZ19yZXQgPSBlbnRyeS0+bWlucGVyY2VudDsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKworICAgIGNhc2UgRElTS1RPVEFMOgorICAgICAgICB2YWwgPSBuZXRzbm1wX2ZzeXNfc2l6ZV91bGwoZW50cnkpOworICAgICAgICBpZiAodmFsID4gTUFYX0lOVF8zMikKKyAgICAgICAgICAgIGxvbmdfcmV0ID0gTUFYX0lOVF8zMjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbG9uZ19yZXQgPSAobG9uZyl2YWw7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisgICAgY2FzZSBESVNLVE9UQUxMT1c6CisgICAgICAgIGxvbmdfcmV0ID0gbmV0c25tcF9mc3lzX3NpemVfdWxsKGVudHJ5KSAmIE1BWF9VSU5UXzMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS1RPVEFMSElHSDoKKyAgICAgICAgbG9uZ19yZXQgPSBuZXRzbm1wX2ZzeXNfc2l6ZV91bGwoZW50cnkpID4+IDMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgICAgICAKKyAgICBjYXNlIERJU0tBVkFJTDoKKyAgICAgICAgdmFsID0gbmV0c25tcF9mc3lzX2F2YWlsX3VsbChlbnRyeSk7CisgICAgICAgIGlmICh2YWwgPiBNQVhfSU5UXzMyKQorICAgICAgICAgICAgbG9uZ19yZXQgPSBNQVhfSU5UXzMyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb25nX3JldCA9IChsb25nKXZhbDsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tBVkFJTExPVzoKKyAgICAgICAgbG9uZ19yZXQgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGVudHJ5KSAmIE1BWF9VSU5UXzMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgRElTS0FWQUlMSElHSDoKKyAgICAgICAgbG9uZ19yZXQgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGVudHJ5KSA+PiAzMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKworICAgIGNhc2UgRElTS1VTRUQ6CisgICAgICAgIHZhbCA9IG5ldHNubXBfZnN5c191c2VkX3VsbChlbnRyeSk7CisgICAgICAgIGlmICh2YWwgPiBNQVhfSU5UXzMyKQorICAgICAgICAgICAgbG9uZ19yZXQgPSBNQVhfSU5UXzMyOworICAgICAgICBlbHNlCisgICAgICAgICAgICBsb25nX3JldCA9IChsb25nKXZhbDsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tVU0VETE9XOgorICAgICAgICBsb25nX3JldCA9IG5ldHNubXBfZnN5c191c2VkX3VsbChlbnRyeSkgJiBNQVhfVUlOVF8zMjsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKyAgICBjYXNlIERJU0tVU0VESElHSDoKKyAgICAgICAgbG9uZ19yZXQgPSBuZXRzbm1wX2ZzeXNfdXNlZF91bGwoZW50cnkpID4+IDMyOworICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworCisgICAgY2FzZSBESVNLUEVSQ0VOVDoKKyAgICAgICAgbG9uZ19yZXQgPSBfcGVyY2VudCggZW50cnktPnVzZWQsIGVudHJ5LT5zaXplICk7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKKyAgICBjYXNlIERJU0tQRVJDRU5UTk9ERToKKyAgICAgICAgbG9uZ19yZXQgPSBfcGVyY2VudCggZW50cnktPmludW1zX3RvdGFsIC0gZW50cnktPmludW1zX2F2YWlsLCBlbnRyeS0+aW51bXNfdG90YWwgKTsKKyAgICAgICAgcmV0dXJuICgodV9jaGFyICopICgmbG9uZ19yZXQpKTsKKworICAgIGNhc2UgRVJST1JGTEFHOgorICAgICAgICBsb25nX3JldCA9IDA7CisgICAgICAgIHZhbCA9IG5ldHNubXBfZnN5c19hdmFpbF91bGwoZW50cnkpOworICAgICAgICBpZiAoKCBlbnRyeS0+bWluc3BhY2UgPj0gMCApICYmCisgICAgICAgICAgICAoIHZhbCA8IGVudHJ5LT5taW5zcGFjZSApKQorICAgICAgICAgICAgbG9uZ19yZXQgPSAxOworICAgICAgICBlbHNlIGlmICgoIGVudHJ5LT5taW5wZXJjZW50ID49IDAgKSAmJgorICAgICAgICAgICAgICAgICAoX3BlcmNlbnQoIGVudHJ5LT5hdmFpbCwgZW50cnktPnNpemUgKSA8IGVudHJ5LT5taW5wZXJjZW50ICkpCisgICAgICAgICAgICBsb25nX3JldCA9IDE7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoJmxvbmdfcmV0KSk7CisKKyAgICBjYXNlIEVSUk9STVNHOgorICAgICAgICBlcnJtc2dbMF0gPSAwOworICAgICAgICB2YWwgPSBuZXRzbm1wX2ZzeXNfYXZhaWxfdWxsKGVudHJ5KTsKKyAgICAgICAgaWYgKCggZW50cnktPm1pbnNwYWNlID49IDAgKSAmJgorICAgICAgICAgICAgKCB2YWwgPCBlbnRyeS0+bWluc3BhY2UgKSkKKyAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBsZXNzIHRoYW4gJWQgZnJlZSAoPSAlZCkiLAorICAgICAgICAgICAgICAgICAgICAgICAgZW50cnktPnBhdGgsIGVudHJ5LT5taW5zcGFjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpIHZhbCk7CisgICAgICAgIGVsc2UgaWYgKCggZW50cnktPm1pbnBlcmNlbnQgPj0gMCApICYmCisgICAgICAgICAgICAgICAgIChfcGVyY2VudCggZW50cnktPmF2YWlsLCBlbnRyeS0+c2l6ZSApIDwgZW50cnktPm1pbnBlcmNlbnQgKSkKKyAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiVzOiBsZXNzIHRoYW4gJWQlJSBmcmVlICg9ICVkJSUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5wYXRoLCBlbnRyeS0+bWlucGVyY2VudCwKKyAgICAgICAgICAgICAgICAgICAgICAgIF9wZXJjZW50KCBlbnRyeS0+YXZhaWwsIGVudHJ5LT5zaXplICkpOworICAgICAgICBlcnJtc2dbIHNpemVvZihlcnJtc2cpLTEgXSA9IDA7CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGVycm1zZyk7CisgICAgICAgIHJldHVybiAoKHVfY2hhciAqKSAoZXJybXNnKSk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza19ody5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNDJlZDkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNrX2h3LmgKQEAgLTAsMCArMSwzMiBAQAorLyoKKyAqICBUZW1wbGF0ZSBNSUIgZ3JvdXAgaW50ZXJmYWNlIC0gZGlzay5oCisgKgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9ESVNLX0hXX0gKKyNkZWZpbmUgX01JQkdST1VQX0RJU0tfSFdfSAorCit2b2lkICAgICAgICAgICAgaW5pdF9kaXNrX2h3KHZvaWQpOworCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9mc3lzKQorCisgICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9leHRlbnNpYmxlX2Rpc2s7CisKKyNpbmNsdWRlICJtaWJkZWZzLmgiCisKKyNkZWZpbmUgRElTS0RFVklDRSAzCisjZGVmaW5lIERJU0tNSU5JTVVNIDQKKyNkZWZpbmUgRElTS01JTlBFUkNFTlQgNQorI2RlZmluZSBESVNLVE9UQUwgNgorI2RlZmluZSBESVNLQVZBSUwgNworI2RlZmluZSBESVNLVVNFRCA4CisjZGVmaW5lIERJU0tQRVJDRU5UIDkKKyNkZWZpbmUgRElTS1BFUkNFTlROT0RFIDEwCisjZGVmaW5lIERJU0tUT1RBTExPVyAxMQorI2RlZmluZSBESVNLVE9UQUxISUdIIDEyCisjZGVmaW5lIERJU0tBVkFJTExPVyAxMworI2RlZmluZSBESVNLQVZBSUxISUdIIDE0CisjZGVmaW5lIERJU0tVU0VETE9XIDE1CisjZGVmaW5lIERJU0tVU0VESElHSCAxNgorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9ESVNLX0hXX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Rpc2tpby5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMKaW5kZXggMDhlZjNmMS4uNGVhODk4NyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmMKQEAgLTI1LDEzICsyNSwxMyBAQAogIyBlbmRpZgogI2VuZGlmCiAKKyNpbmNsdWRlIDxtYXRoLmg+CisKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CiAKLS8qCi0gKiBoZWFkZXJfZ2VuZXJpYygpIGNvbWVzIGZyb20gaGVyZSAKLSAqLwotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKIAogLyoKICAqIGluY2x1ZGUgb3VyIC5oIGZpbGUgCkBAIC01MiwyNyArNTIsMzQgQEAKIHN0YXRpYyBpbnQgICAgICBjYWNoZV9kaXNrbnIgPSAtMTsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc29sYXJpczIgKi8KIAotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogLyoKICAqIGhhbmRsZSBkaXNrIHN0YXRpc3RpY3MgdmlhIGxpYnBlcmZzdGF0CiAgKi8KKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KIHN0YXRpYyBwZXJmc3RhdF9kaXNrX3QgKnBzX2Rpc2s7CS8qIHN0b3JhZ2UgZm9yIGFsbCBkaXNrIHZhbHVlcyAqLwogc3RhdGljIGludCBwc19udW1kaXNrczsJCQkvKiBudW1iZXIgb2YgZGlza3MgaW4gc3lzdGVtLCBtYXkgY2hhbmdlIHdoaWxlIHJ1bm5pbmcgKi8KICNlbmRpZgogCi0jaWYgZGVmaW5lZChic2RpMykgfHwgZGVmaW5lZChic2RpNCkKKyNpZiBkZWZpbmVkKGJzZGkzKSB8fCBkZWZpbmVkKGJzZGk0KSB8fCBkZWZpbmVkKG9wZW5ic2Q0KQogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNpZmRlZiBvcGVuYnNkNAorI2luY2x1ZGUgPHN5cy9kaXNrLmg+CisjZWxzZQogI2luY2x1ZGUgPHN5cy9kaXNrc3RhdHMuaD4KKyNlbmRpZgogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBic2RpICovCiAKLSNpZiBkZWZpbmVkIChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkKKyNpZiBkZWZpbmVkKEhBVkVfR0VUREVWUykgfHwgZGVmaW5lZChIQVZFX0RFVlNUQVRfR0VUREVWUykKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpZiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDEKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPiAgICAgICAvKiBmb3IgQ1BVU1RBVEVTIGluIGRldnN0YXQuaCAqLwotI2VsaWYgIWRlZmluZWQoZHJhZ29uZmx5KQorI2VsaWYgSEFWRV9TWVNfREtTVEFUX0gKICNpbmNsdWRlIDxzeXMvZGtzdGF0Lmg+CiAjZW5kaWYKICNpbmNsdWRlIDxkZXZzdGF0Lmg+CkBAIC04NCwxMiArOTEsMTcgQEAKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmcmVlYnNkICovCiAKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAjZGVmaW5lIEdFVERFVlMoeCkgZGV2c3RhdF9nZXRkZXZzKE5VTEwsICh4KSkKICNlbHNlCiAgICNkZWZpbmUgR0VUREVWUyh4KSBnZXRkZXZzKCh4KSkKICNlbmRpZgogCisjaWYgZGVmaW5lZCAobGludXgpCisjZGVmaW5lIERJU0tJT19TQU1QTEVfSU5URVJWQUwgNQordm9pZCBkZXZsYV9nZXRzdGF0cyh1bnNpZ25lZCBpbnQgcmVnbm8sIHZvaWQgKiBkdW1teSk7CisjZW5kaWYgLyogbGludXggKi8KKwogI2lmIGRlZmluZWQgKGRhcndpbikKICNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9Db3JlRm91bmRhdGlvbi5oPgogI2luY2x1ZGUgPElPS2l0L0lPS2l0TGliLmg+CkBAIC0xMDAsMTQgKzExMiwyMCBAQAogc3RhdGljIG1hY2hfcG9ydF90IG1hc3RlclBvcnQ7CQkvKiB0byBjb21tdW5pY2F0ZSB3aXRoIEkvTyBLaXQJKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGFyd2luICovCiAKLXZvaWQgICAgICAgICAgICBkaXNraW9fcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKKyNpZiAhZGVmaW5lZChzb2xhcmlzMikgJiYgIShkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpKQorc3RhdGljIGludCAgICAgIGdldHN0YXRzKHZvaWQpOworI2VuZGlmCiAKLSNpZiBkZWZpbmVkIChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkKKyNpZiBkZWZpbmVkIChIQVZFX0dFVERFVlMpIHx8IGRlZmluZWQoSEFWRV9ERVZTVEFUX0dFVERFVlMpCiB2b2lkCQlkZXZsYV9nZXRzdGF0cyh1bnNpZ25lZCBpbnQgcmVnbm8sIHZvaWQgKmR1bW15KTsKICNlbmRpZgogCiBGSUxFICAgICAgICAgICAqZmlsZTsKIAorI2lmZGVmIGxpbnV4CitzdGF0aWMgaW50CWRpc2tpb19mcmVlX2NvbmZpZyhpbnQsIGludCwgdm9pZCAqLCB2b2lkICopOworI2VuZGlmCisKICAgICAgICAgIC8qKioqKioqKioqKioqKioqKioqKioKIAkgKgogCSAqICBJbml0aWFsaXNhdGlvbiAmIGNvbW1vbiBpbXBsZW1lbnRhdGlvbiBmdW5jdGlvbnMKQEAgLTE0MiwxOSArMTYwLDMwIEBACiAgICAgICovCiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGRpc2tpb192YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge0RJU0tJT19JTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7MX19LAotICAgICAgICB7RElTS0lPX0RFVklDRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHsyfX0sCi0gICAgICAgIHtESVNLSU9fTlJFQUQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezN9fSwKLSAgICAgICAge0RJU0tJT19OV1JJVFRFTiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7NH19LAotICAgICAgICB7RElTS0lPX1JFQURTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHs1fX0sCi0gICAgICAgIHtESVNLSU9fV1JJVEVTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9kaXNraW8sIDEsIHs2fX0sCi0jaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkKLSAgICAgICAge0RJU0tJT19MQTEsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezl9fSwKLSAgICAgICAge0RJU0tJT19MQTUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2Rpc2tpbywgMSwgezEwfX0sCi0gICAgICAgIHtESVNLSU9fTEExNSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7MTF9fSwKKyAgICAgICAge0RJU0tJT19JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezF9fSwKKyAgICAgICAge0RJU0tJT19ERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezJ9fSwKKyAgICAgICAge0RJU0tJT19OUkVBRCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezN9fSwKKyAgICAgICAge0RJU0tJT19OV1JJVFRFTiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezR9fSwKKyAgICAgICAge0RJU0tJT19SRUFEUywgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezV9fSwKKyAgICAgICAge0RJU0tJT19XUklURVMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHs2fX0sCisjaWYgZGVmaW5lZChIQVZFX0dFVERFVlMpIHx8IGRlZmluZWQoSEFWRV9ERVZTVEFUX0dFVERFVlMpIHx8IGRlZmluZWQobGludXgpCisgICAgICAgIHtESVNLSU9fTEExLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZGlza2lvLCAxLCB7OX19LAorICAgICAgICB7RElTS0lPX0xBNSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezEwfX0sCisgICAgICAgIHtESVNLSU9fTEExNSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezExfX0sCiAjZW5kaWYKLSAgICAgICAge0RJU0tJT19OUkVBRFgsIEFTTl9DT1VOVEVSNjQsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7MTJ9fSwKLSAgICAgICAge0RJU0tJT19OV1JJVFRFTlgsIEFTTl9DT1VOVEVSNjQsIFJPTkxZLCB2YXJfZGlza2lvLCAxLCB7MTN9fSwKKyAgICAgICAge0RJU0tJT19OUkVBRFgsIEFTTl9DT1VOVEVSNjQsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2Rpc2tpbywgMSwgezEyfX0sCisgICAgICAgIHtESVNLSU9fTldSSVRURU5YLCBBU05fQ09VTlRFUjY0LCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9kaXNraW8sIDEsIHsxM319LAogICAgIH07CiAKICAgICAvKgpAQCAtMTkyLDcgKzIyMSw3IEBACiAgICAgSU9NYXN0ZXJQb3J0KGJvb3RzdHJhcF9wb3J0LCAmbWFzdGVyUG9ydCk7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIC8qCiAgICAgICogaW5pdGlhbGl6ZSB2YWx1ZXMgdG8gZ2F0aGVyIGluZm9ybWF0aW9uIG9uIGZpcnN0IHJlcXVlc3QKICAgICAgKi8KQEAgLTIwMCwxNCArMjI5LDU0IEBACiAgICAgcHNfZGlzayA9IE5VTEw7CiAjZW5kaWYKIAotI2lmIGRlZmluZWQgKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGZyZWVic2Q1KQotCWRldmxhX2dldHN0YXRzKDAsIE5VTEwpOwotCS8qIGNvbGxlY3QgTEEgZGF0YSByZWd1bGFybHkgKi8KLQlzbm1wX2FsYXJtX3JlZ2lzdGVyKERJU0tJT19TQU1QTEVfSU5URVJWQUwsIFNBX1JFUEVBVCwgZGV2bGFfZ2V0c3RhdHMsIE5VTEwpOworI2lmIGRlZmluZWQgKEhBVkVfR0VUREVWUykgfHwgZGVmaW5lZChIQVZFX0RFVlNUQVRfR0VUREVWUykgfHwgZGVmaW5lZChsaW51eCkKKyAgICBkZXZsYV9nZXRzdGF0cygwLCBOVUxMKTsKKyAgICAvKiBjb2xsZWN0IExBIGRhdGEgcmVndWxhcmx5ICovCisgICAgc25tcF9hbGFybV9yZWdpc3RlcihESVNLSU9fU0FNUExFX0lOVEVSVkFMLCBTQV9SRVBFQVQsIGRldmxhX2dldHN0YXRzLCBOVUxMKTsKICNlbmRpZgogCisKKyNpZmRlZiBsaW51eAorICAgIGNoYXIgKmFwcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCBhcHAsICJkaXNraW9fZXhjbHVkZV9mZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19GRCk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcCwgImRpc2tpb19leGNsdWRlX2xvb3AiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fTE9PUCk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sIGFwcCwgImRpc2tpb19leGNsdWRlX3JhbSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19SQU0pOworCisgICAgICAgIC8qIG9yIHBvc3NpYmxlIGFuIGV4Y2x1c2lvbiBwYXR0ZXJuPyAqLworCisgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLAorCSAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19QUkVfVVBEQVRFX0NPTkZJRywKKwkgICAgICAgICAgICAgICAgICAgZGlza2lvX2ZyZWVfY29uZmlnLCBOVUxMKTsKKworI2VuZGlmCiB9CiAKKyNpZmRlZiBsaW51eAorLyogdG8gZG86IG1ha2Ugc3VyZSBkaXNraW9fZnJlZV9jb25maWcoKSBnZXRzIGludm9rZWQgdXBvbiBTSUdIVVAuICovCitzdGF0aWMgaW50CitkaXNraW9fZnJlZV9jb25maWcoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKQoreworICAgIERFQlVHTVNHVEwoKCJkaXNraW8iLCAiZnJlZSBjb25maWcgJWRcbiIsCisJCW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKwkJCQkgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fUkFNKSkpOworICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19GRCwgICAwKTsKKyAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorCQkJICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fTE9PUCwgMCk7CisgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKwkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX1JBTSwgIDApOworICAgIHJldHVybiAwOworfQorI2VuZGlmCisKKwogI2lmZGVmIHNvbGFyaXMyCiBpbnQKIGdldF9kaXNrKGludCBkaXNrbnIpCkBAIC00MjIsMTIgKzQ5MSwyODkgQEAKIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogYnNkaSAqLwogCi0jaWYgZGVmaW5lZChmcmVlYnNkNCkgfHwgZGVmaW5lZChmcmVlYnNkNSkKKyNpZiBkZWZpbmVkKG9wZW5ic2Q0KQorc3RhdGljIGludCAgICAgIG5kaXNrOworc3RhdGljIHN0cnVjdCBkaXNrc3RhdHMgKmRrOworc3RhdGljIGNoYXIgICAqKmRrbmFtZTsKKworc3RhdGljIGludAorZ2V0c3RhdHModm9pZCkKK3sKKyAgICB0aW1lX3QgICAgICAgICAgbm93OworICAgIGludCAgICAgICAgICAgICBtaWJbMl07CisgICAgY2hhciAgICAgICAgICAgKnQsICp0cCwqdGU7CisgICAgc2l6ZV90ICAgICAgICAgIHNpemUsIGRrbl9zaXplOworICAgIGludCAgICAgICAgICAgICBpOworCisgICAgbm93ID0gdGltZShOVUxMKTsKKyAgICBpZiAoY2FjaGVfdGltZSArIENBQ0hFX1RJTUVPVVQgPiBub3cpIHsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIG1pYlswXSA9IENUTF9IVzsKKyAgICBtaWJbMV0gPSBIV19ESVNLU1RBVFM7CisgICAgc2l6ZSA9IDA7CisgICAgaWYgKHN5c2N0bChtaWIsIDIsIE5VTEwsICZzaXplLCBOVUxMLCAwKSA8IDApIHsKKyAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgc2l6ZSBvZiBIV19ESVNLU1RBVFMgbWliIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobmRpc2sgIT0gc2l6ZSAvIHNpemVvZigqZGspKSB7CisgICAgICAgIGlmIChkaykKKyAgICAgICAgICAgIGZyZWUoZGspOworICAgICAgICBpZiAoZGtuYW1lKSB7CisgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpc2s7IGkrKykKKyAgICAgICAgICAgICAgICBpZiAoZGtuYW1lW2ldKQorICAgICAgICAgICAgICAgICAgICBmcmVlKGRrbmFtZVtpXSk7CisgICAgICAgICAgICBmcmVlKGRrbmFtZSk7CisgICAgICAgIH0KKyAgICAgICAgbmRpc2sgPSBzaXplIC8gc2l6ZW9mKCpkayk7CisgICAgICAgIGlmIChuZGlzayA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGRrbmFtZSA9IG1hbGxvYyhuZGlzayAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgbWliWzBdID0gQ1RMX0hXOworICAgICAgICBtaWJbMV0gPSBIV19ESVNLTkFNRVM7CisgICAgICAgIGlmIChzeXNjdGwobWliLCAyLCBOVUxMLCAmZGtuX3NpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgc2l6ZSBvZiBIV19ESVNLTkFNRVMgbWliIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0ZSA9IHRwID0gdCA9IG1hbGxvYyhka25fc2l6ZSk7CisgICAgICAgIGlmIChzeXNjdGwobWliLCAyLCB0LCAmZGtuX3NpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgc2l6ZSBvZiBIV19ESVNLTkFNRVMgbWliIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmRpc2s7IGkrKykgeworCSAgICB3aGlsZSAodGUtdCA8IGRrbl9zaXplICYmICp0ZSAhPSAnLCcpIHRlKys7CisJICAgICp0ZSsrID0gJ1wwJzsKKyAgICAgICAgICAgIGRrbmFtZVtpXSA9IHN0cmR1cCh0cCk7CisgICAgICAgICAgICB0cCA9IHRlOworICAgICAgICB9CisgICAgICAgIGZyZWUodCk7CisgICAgICAgIGRrID0gbWFsbG9jKG5kaXNrICogc2l6ZW9mKCpkaykpOworICAgIH0KKyAgICBtaWJbMF0gPSBDVExfSFc7CisgICAgbWliWzFdID0gSFdfRElTS1NUQVRTOworICAgIGlmIChzeXNjdGwobWliLCAyLCBkaywgJnNpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBIV19ESVNLU1RBVFMgbWliIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBjYWNoZV90aW1lID0gbm93OworICAgIHJldHVybiAxOworfQorCit1X2NoYXIgICAgICAgICAqCit2YXJfZGlza2lvKHN0cnVjdCB2YXJpYWJsZSAqIHZwLAorICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKKyAgICBzdGF0aWMgc3RydWN0IGNvdW50ZXI2NCBjNjRfcmV0OworICAgIHVuc2lnbmVkIGludCAgICBpbmR4OworCisgICAgaWYgKGdldHN0YXRzKCkgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoaGVhZGVyX3NpbXBsZV90YWJsZQorICAgICAgICAodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCwgbmRpc2spKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGluZHggPSAodW5zaWduZWQgaW50KSAobmFtZVsqbGVuZ3RoIC0gMV0gLSAxKTsKKyAgICBpZiAoaW5keCA+PSBuZGlzaykKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzd2l0Y2ggKHZwLT5tYWdpYykgeworICAgIGNhc2UgRElTS0lPX0lOREVYOgorICAgICAgICBsb25nX3JldCA9IChsb25nKSBpbmR4ICsgMTsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19ERVZJQ0U6CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRrbmFtZVtpbmR4XSk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIGRrbmFtZVtpbmR4XTsKKyAgICBjYXNlIERJU0tJT19OUkVBRDoKKyAgICAgICAgbG9uZ19yZXQgPSAodW5zaWduZWQgbG9uZykgKGRrW2luZHhdLmRzX3JieXRlcykgJiAweGZmZmZmZmZmOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX05XUklUVEVOOgorICAgICAgICBsb25nX3JldCA9ICh1bnNpZ25lZCBsb25nKSAoZGtbaW5keF0uZHNfd2J5dGVzKSAmIDB4ZmZmZmZmZmY7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fUkVBRFM6CisgICAgICAgIGxvbmdfcmV0ID0gKHVuc2lnbmVkIGxvbmcpIGRrW2luZHhdLmRzX3J4ZmVyICYgMHhmZmZmZmZmZjsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19XUklURVM6CisgICAgICAgIGxvbmdfcmV0ID0gKHVuc2lnbmVkIGxvbmcpIGRrW2luZHhdLmRzX3d4ZmVyICYgMHhmZmZmZmZmZjsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19OUkVBRFg6CisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpOworICAgICAgICBjNjRfcmV0LmxvdyA9IGRrW2luZHhdLmRzX3JieXRlcyAmIDB4ZmZmZmZmZmY7CisgICAgICAgIGM2NF9yZXQuaGlnaCA9IGRrW2luZHhdLmRzX3JieXRlcyA+PiAzMjsKKyAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBjNjRfcmV0OworICAgIGNhc2UgRElTS0lPX05XUklUVEVOWDoKKyAgICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7CisgICAgICAgIGM2NF9yZXQubG93ID0gZGtbaW5keF0uZHNfcmJ5dGVzICYgMHhmZmZmZmZmZjsKKyAgICAgICAgYzY0X3JldC5oaWdoID0gZGtbaW5keF0uZHNfcmJ5dGVzID4+IDMyOworICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGM2NF9yZXQ7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFUlJPUl9NU0coImRpc2tpby5jOiBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyByZXF1ZXN0LiIpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogb3BlbmJzZCAqLworCisjaWZkZWYgX19OZXRCU0RfXworI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KK3N0YXRpYyBpbnQgICAgICBuZGlzazsKKyNpZmRlZiBIV19JT1NUQVROQU1FUworc3RhdGljIGludCBubWliWzJdID0ge0NUTF9IVywgSFdfSU9TVEFUTkFNRVN9OworI2Vsc2UKK3N0YXRpYyBpbnQgbm1pYlsyXSA9IHtDVExfSFcsIEhXX0RJU0tOQU1FU307CisjZW5kaWYKKyNpZmRlZiBIV19ESVNLU1RBVFMKKyNpbmNsdWRlIDxzeXMvZGlzay5oPgorc3RhdGljIGludCBkbWliWzNdID0ge0NUTF9IVywgSFdfRElTS1NUQVRTLCBzaXplb2Yoc3RydWN0IGRpc2tfc3lzY3RsKX07CitzdGF0aWMgc3RydWN0IGRpc2tfc3lzY3RsICpkazsKKyNlbmRpZgorI2lmZGVmIEhXX0lPU1RBVFMKKyNpbmNsdWRlIDxzeXMvaW9zdGF0Lmg+CitzdGF0aWMgaW50IGRtaWJbM10gPSB7Q1RMX0hXLCBIV19JT1NUQVRTLCBzaXplb2Yoc3RydWN0IGlvX3N5c2N0bCl9Oworc3RhdGljIHN0cnVjdCBpb19zeXNjdGwgKmRrOworI2VuZGlmCitzdGF0aWMgY2hhciAgICoqZGtuYW1lOworCitzdGF0aWMgaW50CitnZXRzdGF0cyh2b2lkKQoreworICAgIHRpbWVfdCAgICAgICAgICBub3c7CisgICAgY2hhciAgICAgICAgICAgKnQsICp0cDsKKyAgICBzaXplX3QgICAgICAgICAgc2l6ZSwgZGtuX3NpemU7CisgICAgaW50ICAgICAgICAgICAgIGk7CisKKyAgICBub3cgPSB0aW1lKE5VTEwpOworICAgIGlmIChjYWNoZV90aW1lICsgQ0FDSEVfVElNRU9VVCA+IG5vdykgeworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgc2l6ZSA9IDA7CisgICAgaWYgKHN5c2N0bChkbWliLCAzLCBOVUxMLCAmc2l6ZSwgTlVMTCwgMCkgPCAwKSB7CisgICAgICAgIHBlcnJvcigiQ2FuJ3QgZ2V0IHNpemUgb2YgSFdfRElTS1NUQVRTL0hXX0lPU1RBVFMgbWliIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAobmRpc2sgIT0gc2l6ZSAvIGRtaWJbMl0pIHsKKyAgICAgICAgaWYgKGRrKQorICAgICAgICAgICAgZnJlZShkayk7CisgICAgICAgIGlmIChka25hbWUpIHsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBuZGlzazsgaSsrKQorICAgICAgICAgICAgICAgIGlmIChka25hbWVbaV0pCisgICAgICAgICAgICAgICAgICAgIGZyZWUoZGtuYW1lW2ldKTsKKyAgICAgICAgICAgIGZyZWUoZGtuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBuZGlzayA9IHNpemUgLyBkbWliWzJdOworICAgICAgICBpZiAobmRpc2sgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICBka25hbWUgPSBtYWxsb2MobmRpc2sgKiBzaXplb2YoY2hhciAqKSk7CisgICAgICAgIGRrbl9zaXplID0gMDsKKyAgICAgICAgaWYgKHN5c2N0bChubWliLCAyLCBOVUxMLCAmZGtuX3NpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgc2l6ZSBvZiBIV19ESVNLTkFNRVMgbWliIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0ID0gbWFsbG9jKGRrbl9zaXplKTsKKyAgICAgICAgaWYgKHN5c2N0bChubWliLCAyLCB0LCAmZGtuX3NpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICAgICAgcGVycm9yKCJDYW4ndCBnZXQgc2l6ZSBvZiBIV19ESVNLTkFNRVMgbWliIik7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICBmb3IgKGkgPSAwLCB0cCA9IHN0cnRvayh0LCAiICIpOyB0cCAmJiBpIDwgbmRpc2s7IGkrKywKKwkgICAgdHAgPSBzdHJ0b2soTlVMTCwgIiAiKSkgeworICAgICAgICAgICAgZGtuYW1lW2ldID0gc3RyZHVwKHRwKTsKKyAgICAgICAgfQorICAgICAgICBmcmVlKHQpOworICAgICAgICBkayA9IG1hbGxvYyhuZGlzayAqIHNpemVvZigqZGspKTsKKyAgICB9CisgICAgaWYgKHN5c2N0bChkbWliLCAzLCBkaywgJnNpemUsIE5VTEwsIDApIDwgMCkgeworICAgICAgICBwZXJyb3IoIkNhbid0IGdldCBIV19ESVNLU1RBVFMvSFdfSU9TVEFUUyBtaWIiKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNhY2hlX3RpbWUgPSBub3c7CisgICAgcmV0dXJuIDE7Cit9CisKK3VfY2hhciAqCit2YXJfZGlza2lvKHN0cnVjdCB2YXJpYWJsZSAqIHZwLAorICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworICAgIHN0YXRpYyBsb25nICAgICBsb25nX3JldDsKKyAgICB1bnNpZ25lZCBpbnQgICAgaW5keDsKKworICAgIGlmIChnZXRzdGF0cygpID09IDApCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGhlYWRlcl9zaW1wbGVfdGFibGUKKyAgICAgICAgKHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QsIG5kaXNrKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpbmR4ID0gKHVuc2lnbmVkIGludCkgKG5hbWVbKmxlbmd0aCAtIDFdIC0gMSk7CisgICAgaWYgKGluZHggPj0gbmRpc2spCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIERJU0tJT19JTkRFWDoKKyAgICAgICAgbG9uZ19yZXQgPSAobG9uZykgaW5keCArIDE7CisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisKKyAgICBjYXNlIERJU0tJT19ERVZJQ0U6CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRrbmFtZVtpbmR4XSk7CisgICAgICAgIHJldHVybiAodV9jaGFyICopIGRrbmFtZVtpbmR4XTsKKworICAgIGNhc2UgRElTS0lPX05SRUFEOgorI2lmZGVmIEhXX0RJU0tTVEFUUworICAgICAJbG9uZ19yZXQgPSBka1tpbmR4XS5ka19yYnl0ZXM7CisjZW5kaWYKKyNpZmRlZiBIV19JT1NUQVRTCisJaWYgKGRrW2luZHhdLnR5cGUgPT0gSU9TVEFUX0RJU0spCisJICAgIGxvbmdfcmV0ID0gZGtbaW5keF0ucmJ5dGVzOworI2VuZGlmCisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisKKyAgICBjYXNlIERJU0tJT19OV1JJVFRFTjoKKyNpZmRlZiBIV19ESVNLU1RBVFMKKyAgICAgCWxvbmdfcmV0ID0gZGtbaW5keF0uZGtfd2J5dGVzOworI2VuZGlmCisjaWZkZWYgSFdfSU9TVEFUUworCWlmIChka1tpbmR4XS50eXBlID09IElPU1RBVF9ESVNLKQorCSAgICBsb25nX3JldCA9IGRrW2luZHhdLndieXRlczsKKyNlbmRpZgorICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworCisgICAgY2FzZSBESVNLSU9fUkVBRFM6CisjaWZkZWYgSFdfRElTS1NUQVRTCisgICAgIAlsb25nX3JldCA9IGRrW2luZHhdLmRrX3J4ZmVyOworI2VuZGlmCisjaWZkZWYgSFdfSU9TVEFUUworCWlmIChka1tpbmR4XS50eXBlID09IElPU1RBVF9ESVNLKQorCSAgICBsb25nX3JldCA9IGRrW2luZHhdLnJ4ZmVyOworI2VuZGlmCisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisKKyAgICBjYXNlIERJU0tJT19XUklURVM6CisjaWZkZWYgSFdfRElTS1NUQVRTCisgICAgIAlsb25nX3JldCA9IGRrW2luZHhdLmRrX3d4ZmVyOworI2VuZGlmCisjaWZkZWYgSFdfSU9TVEFUUworCWlmIChka1tpbmR4XS50eXBlID09IElPU1RBVF9ESVNLKQorCSAgICBsb25nX3JldCA9IGRrW2luZHhdLnd4ZmVyOworI2VuZGlmCisgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBFUlJPUl9NU0coImRpc2tpby5jOiBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcyByZXF1ZXN0LiIpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBfX05ldEJTRF9fICovCisKKyNpZiBkZWZpbmVkKEhBVkVfR0VUREVWUykgfHwgZGVmaW5lZChIQVZFX0RFVlNUQVRfR0VUREVWUykKIAogLyogZGlzayBsb2FkIGF2ZXJhZ2UgcGF0Y2ggYnkgUm9qZXIgKi8KIAogc3RydWN0IGRldl9sYSB7Ci0jaWYgKCBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcgKQorI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIHN0cnVjdCBiaW50aW1lIHByZXY7CiAjZWxzZQogICAgICAgICBzdHJ1Y3QgdGltZXZhbCBwcmV2OwpAQCAtNDM5LDcgKzc4NSw3IEBACiBzdGF0aWMgc3RydWN0IGRldl9sYSAqZGV2bG9hZHMgPSBOVUxMOwogc3RhdGljIGludCBuZGV2cyA9IDA7CiAKLSNpZiAhICggZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3ICkKKyNpZiAhIEhBVkVfREVWU1RBVF9HRVRERVZTCiBkb3VibGUgZGV2bGFfdGltZXZhbF9kaWZmKHN0cnVjdCB0aW1ldmFsICp0MSwgc3RydWN0IHRpbWV2YWwgKnQyKSB7CiAKICAgICAgICAgZG91YmxlIGR0MSA9IChkb3VibGUpIHQxLT50dl9zZWMgKyAoZG91YmxlKSB0MS0+dHZfdXNlYyAqIDAuMDAwMDAxOwpAQCAtNDg4LDcgKzgzNCw3IEBACiAgICAgICAgIGlmIChuZGV2cyA9PSAwKSB7CiAgICAgICAgICAgICAgICAgbmRldnMgPSBsYXN0YXQtPmRpbmZvLT5udW1kZXZzOwogICAgICAgICAgICAgICAgIGRldmxvYWRzID0gKHN0cnVjdCBkZXZfbGEgKikgbWFsbG9jKG5kZXZzICogc2l6ZW9mKHN0cnVjdCBkZXZfbGEpKTsKLSAgICAgICAgICAgICAgICBiemVybyhkZXZsb2FkcywgbmRldnMgKiBzaXplb2Yoc3RydWN0IGRldl9sYSkpOworICAgICAgICAgICAgICAgIG1lbXNldChkZXZsb2FkcywgJ1wwJywgbmRldnMgKiBzaXplb2Yoc3RydWN0IGRldl9sYSkpOwogICAgICAgICAgICAgICAgIGZvciAoaT0wOyBpIDwgbmRldnM7IGkrKykgewogICAgICAgICAgICAgICAgICAgICAgICAgZGV2bG9hZHNbaV0ubGExID0gZGV2bG9hZHNbaV0ubGE1ID0gZGV2bG9hZHNbaV0ubGExNSA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jcHkoJmRldmxvYWRzW2ldLnByZXYsICZsYXN0YXQtPmRpbmZvLT5kZXZpY2VzW2ldLmJ1c3lfdGltZSwgc2l6ZW9mKGRldmxvYWRzW2ldLnByZXYpKTsKQEAgLTUwMSw3ICs4NDcsNyBAQAogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICBmb3IgKGk9MDsgaTxuZGV2czsgaSsrKSB7Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgICAgICAgICBidXN5X3RpbWUgPSBkZXZzdGF0X2NvbXB1dGVfZXRpbWUoJmxhc3RhdC0+ZGluZm8tPmRldmljZXNbaV0uYnVzeV90aW1lLCAmZGV2bG9hZHNbaV0ucHJldik7CiAjZWxzZQogICAgICAgICAgICAgICAgIGJ1c3lfdGltZSA9IGRldmxhX3RpbWV2YWxfZGlmZigmZGV2bG9hZHNbaV0ucHJldiwgJmxhc3RhdC0+ZGluZm8tPmRldmljZXNbaV0uYnVzeV90aW1lKTsKQEAgLTU5NywxNCArOTQzLDE0IEBACiAgICAgICAgICp2YXJfbGVuID0gc3RybGVuKHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmRldmljZV9uYW1lKTsKICAgICAgICAgcmV0dXJuICh1X2NoYXIgKikgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uZGV2aWNlX25hbWU7CiAgICAgY2FzZSBESVNLSU9fTlJFQUQ6Ci0jaWYgZGVmaW5lZChmcmVlYnNkNSkgJiYgX19GcmVlQlNEX3ZlcnNpb24gPj0gNTAwMTA3CisjaWYgSEFWRV9ERVZTVEFUX0dFVERFVlMKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzW0RFVlNUQVRfUkVBRF07CiAjZWxzZQogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNfcmVhZDsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OwogICAgIGNhc2UgRElTS0lPX05XUklUVEVOOgotI2lmIGRlZmluZWQoZnJlZWJzZDUpICYmIF9fRnJlZUJTRF92ZXJzaW9uID49IDUwMDEwNworI2lmIEhBVkVfREVWU1RBVF9HRVRERVZTCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc1tERVZTVEFUX1dSSVRFXTsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc193cml0dGVuOwpAQCAtNjEyLDcgKzk1OCw3IEBACiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CiAgICAgY2FzZSBESVNLSU9fTlJFQURYOgogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBsb25nbG9uZ19yZXQgPSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc1tERVZTVEFUX1JFQURdOwogI2Vsc2UKICAgICAgICAgbG9uZ2xvbmdfcmV0ID0gc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0uYnl0ZXNfcmVhZDsKQEAgLTYyMiw3ICs5NjgsNyBAQAogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGM2NF9yZXQ7CiAgICAgY2FzZSBESVNLSU9fTldSSVRURU5YOgogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihzdHJ1Y3QgY291bnRlcjY0KTsKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBsb25nbG9uZ19yZXQgPSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5ieXRlc1tERVZTVEFUX1dSSVRFXTsKICNlbHNlCiAgICAgICAgIGxvbmdsb25nX3JldCA9IHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLmJ5dGVzX3dyaXR0ZW47CkBAIC02MzEsMTQgKzk3NywxNCBAQAogICAgICAgICBjNjRfcmV0LmhpZ2ggPSBsb25nbG9uZ19yZXQgPj4gMzI7CiAgICAgICAgIHJldHVybiAodV9jaGFyICopICYgYzY0X3JldDsKICAgICBjYXNlIERJU0tJT19SRUFEUzoKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0ub3BlcmF0aW9uc1tERVZTVEFUX1JFQURdOwogI2Vsc2UKICAgICAgICAgbG9uZ19yZXQgPSAoc2lnbmVkIGxvbmcpIHN0YXQtPmRpbmZvLT5kZXZpY2VzW2luZHhdLm51bV9yZWFkczsKICNlbmRpZgogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OwogICAgIGNhc2UgRElTS0lPX1dSSVRFUzoKLSNpZiBkZWZpbmVkKGZyZWVic2Q1KSAmJiBfX0ZyZWVCU0RfdmVyc2lvbiA+PSA1MDAxMDcKKyNpZiBIQVZFX0RFVlNUQVRfR0VUREVWUwogICAgICAgICBsb25nX3JldCA9IChzaWduZWQgbG9uZykgc3RhdC0+ZGluZm8tPmRldmljZXNbaW5keF0ub3BlcmF0aW9uc1tERVZTVEFUX1dSSVRFXTsKICNlbHNlCiAgICAgICAgIGxvbmdfcmV0ID0gKHNpZ25lZCBsb25nKSBzdGF0LT5kaW5mby0+ZGV2aWNlc1tpbmR4XS5udW1fd3JpdGVzOwpAQCAtNjg1LDYgKzEwMzEsMTMgQEAKICAgICB1bnNpZ25lZCBsb25nICBhdmVxOwogfSBsaW51eF9kaXNraW87CiAKKy8qIGRpc2sgbG9hZCBhdmVyYWdlcyAqLwordHlwZWRlZiBzdHJ1Y3QgbGludXhfZGlza2lvX2xhCit7CisgICAgdW5zaWduZWQgbG9uZyB1c2VfcHJldjsKKyAgICBkb3VibGUgbGExLCBsYTUsIGxhMTU7Cit9IGxpbnV4X2Rpc2tpb19sYTsKKwogdHlwZWRlZiBzdHJ1Y3QgbGludXhfZGlza2lvX2hlYWRlcgogewogICAgIGxpbnV4X2Rpc2tpbyogaW5kaWNlczsKQEAgLTY5MiwxMCArMTA0NSw3OSBAQAogICAgIGludCBhbGxvYzsKIH0gbGludXhfZGlza2lvX2hlYWRlcjsKIAordHlwZWRlZiBzdHJ1Y3QgbGludXhfZGlza2lvX2xhX2hlYWRlcgoreworICAgIGxpbnV4X2Rpc2tpb19sYSAqIGluZGljZXM7ICAgCisgICAgaW50IGxlbmd0aDsKK30gbGludXhfZGlza2lvX2xhX2hlYWRlcjsKKwogc3RhdGljIGxpbnV4X2Rpc2tpb19oZWFkZXIgaGVhZDsKK3N0YXRpYyBsaW51eF9kaXNraW9fbGFfaGVhZGVyIGxhX2hlYWQ7CiAKK3ZvaWQgZGV2bGFfZ2V0c3RhdHModW5zaWduZWQgaW50IHJlZ25vLCB2b2lkICogZHVtbXkpIHsKIAotaW50IGdldHN0YXRzKHZvaWQpCisgICAgc3RhdGljIGRvdWJsZSBleHBvbjEsIGV4cG9uNSwgZXhwb24xNTsKKyAgICBkb3VibGUgYnVzeV90aW1lLCBidXN5X3BlcmNlbnQ7CisgICAgaW50IGlkeDsKKworICAgIGlmIChnZXRzdGF0cygpID09IDEpIHsKKyAgICAgICAgRVJST1JfTVNHKCJjYW4ndCBkbyBkaXNraW8gZ2V0c3RhdHMoKVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWxhX2hlYWQubGVuZ3RoKSB7CisgICAgICAgIGxhX2hlYWQuaW5kaWNlcyA9IChsaW51eF9kaXNraW9fbGEgKikgbWFsbG9jKGhlYWQubGVuZ3RoICogc2l6ZW9mKGxpbnV4X2Rpc2tpb19sYSkpOworICAgICAgICBmb3IgKGlkeD0wOyBpZHg8aGVhZC5sZW5ndGg7IGlkeCsrKSB7CisgICAgICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTEgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTUgPSBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTE1ID0gMC47IAorICAgICAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0udXNlX3ByZXYgPSBoZWFkLmluZGljZXNbaWR4XS51c2U7CisgICAgICAgIH0KKyAgICAgICAgbGFfaGVhZC5sZW5ndGggPSBoZWFkLmxlbmd0aDsKKyAgICAgICAgZXhwb24xID0gZXhwKC0oKChkb3VibGUpRElTS0lPX1NBTVBMRV9JTlRFUlZBTCkgLyAoKGRvdWJsZSk2MCkpKTsKKyAgICAgICAgZXhwb241ID0gZXhwKC0oKChkb3VibGUpRElTS0lPX1NBTVBMRV9JTlRFUlZBTCkgLyAoKGRvdWJsZSkzMDApKSk7CisgICAgICAgIGV4cG9uMTUgPSBleHAoLSgoKGRvdWJsZSlESVNLSU9fU0FNUExFX0lOVEVSVkFMKSAvICgoZG91YmxlKTkwMCkpKTsKKyAgICB9CisgICAgZWxzZSBpZiAoaGVhZC5sZW5ndGggLSBsYV9oZWFkLmxlbmd0aCkgeworICAgICAgICBsYV9oZWFkLmluZGljZXMgPSAobGludXhfZGlza2lvX2xhICopIHJlYWxsb2MobGFfaGVhZC5pbmRpY2VzLCBoZWFkLmxlbmd0aCAqIHNpemVvZihsaW51eF9kaXNraW9fbGEpKTsKKyAgICAgICAgZm9yIChpZHg9bGFfaGVhZC5sZW5ndGg7IGlkeDxoZWFkLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhNSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMTUgPSAwLjsgCisgICAgICAgICAgICBsYV9oZWFkLmluZGljZXNbaWR4XS51c2VfcHJldiA9IGhlYWQuaW5kaWNlc1tpZHhdLnVzZTsKKyAgICAgICAgfQorICAgICAgICBsYV9oZWFkLmxlbmd0aCA9IGhlYWQubGVuZ3RoOworICAgIH0KKworICAgIGZvciAoaWR4PTA7IGlkeDxoZWFkLmxlbmd0aDsgaWR4KyspIHsKKyAgICAgICAgYnVzeV90aW1lID0gaGVhZC5pbmRpY2VzW2lkeF0udXNlIC0gbGFfaGVhZC5pbmRpY2VzW2lkeF0udXNlX3ByZXY7CisgICAgICAgIGJ1c3lfcGVyY2VudCA9IGJ1c3lfdGltZSAqIDEwMC4gLyAoKGRvdWJsZSkgRElTS0lPX1NBTVBMRV9JTlRFUlZBTCkgLyAxMDAwLjsKKyAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExICogZXhwb24xICsgYnVzeV9wZXJjZW50ICogKDEuIC0gZXhwb24xKTsKKyAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGE1ID0gbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGE1ICogZXhwb241ICsgYnVzeV9wZXJjZW50ICogKDEuIC0gZXhwb241KTsKKyAgICAgICAgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExNSA9IGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhMTUgKiBleHBvbjE1ICsgYnVzeV9wZXJjZW50ICogKDEuIC0gZXhwb24xNSk7CisgICAgICAgIC8qCisgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIoJWQpIHVwZGF0ZSBsYTE9JWYgbGE1PSVmIGxhMTU9JWZcbiIsCisgICAgICAgICAgaWR4LCBsYV9oZWFkLmluZGljZXNbaWR4XS5sYTEsIGxhX2hlYWQuaW5kaWNlc1tpZHhdLmxhNSwgbGFfaGVhZC5pbmRpY2VzW2lkeF0ubGExNSk7ICAgCisgICAgICAgICovCisgICAgICAgIGxhX2hlYWQuaW5kaWNlc1tpZHhdLnVzZV9wcmV2ID0gaGVhZC5pbmRpY2VzW2lkeF0udXNlOworICAgIH0KK30KKworaW50IGlzX2V4Y2x1ZGVkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19GRCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoc3RybmNtcChuYW1lLCAiZmQiLCAyKSkpCisgICAgICAgIHJldHVybiAxOworICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fTE9PUCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICEoc3RybmNtcChuYW1lLCAibG9vcCIsIDQpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19SQU0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhKHN0cm5jbXAobmFtZSwgInJhbSIsIDMpKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2dldHN0YXRzKHZvaWQpCiB7CiAgICAgRklMRSogcGFydHM7CiAgICAgdGltZV90IG5vdzsKQEAgLTczNCw3ICsxMTU2LDggQEAKIAkJICAgICZwVGVtcC0+bWFqb3IsICZwVGVtcC0+bWlub3IsIHBUZW1wLT5uYW1lLAogCQkgICAgJnBUZW1wLT5yaW8sICZwVGVtcC0+cnNlY3QsCiAJCSAgICAmcFRlbXAtPndpbywgJnBUZW1wLT53c2VjdCk7Ci0JICAgIGhlYWQubGVuZ3RoKys7CisgICAgICAgICAgICBpZiAoIWlzX2V4Y2x1ZGVkKHBUZW1wLT5uYW1lKSkKKwkgICAgICAgIGhlYWQubGVuZ3RoKys7CiAJfQogICAgIH0KICAgICBlbHNlIHsKQEAgLTc3Miw3ICsxMTk1LDggQEAKICAgICAgICAgICAgICAgIGZjbG9zZShwYXJ0cyk7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgIH0KLQkgICAgaGVhZC5sZW5ndGgrKzsKKyAgICAgICAgICAgIGlmICghaXNfZXhjbHVkZWQocFRlbXAtPm5hbWUpKQorCSAgICAgICAgaGVhZC5sZW5ndGgrKzsKIAl9CiAgICAgfQogCkBAIC04MjYsNiArMTI1MCwxNSBAQAogICAgIGNhc2UgRElTS0lPX1dSSVRFUzoKICAgICAgIGxvbmdfcmV0ID0gaGVhZC5pbmRpY2VzW2luZHhdLndpbyAmIDB4ZmZmZmZmZmY7CiAgICAgICByZXR1cm4gKHVfY2hhciAqKSAmIGxvbmdfcmV0OworICAgIGNhc2UgRElTS0lPX0xBMToKKyAgICAgIGxvbmdfcmV0ID0gbGFfaGVhZC5pbmRpY2VzW2luZHhdLmxhMTsKKyAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CisgICAgY2FzZSBESVNLSU9fTEE1OgorICAgICAgbG9uZ19yZXQgPSBsYV9oZWFkLmluZGljZXNbaW5keF0ubGE1OworICAgICAgcmV0dXJuICh1X2NoYXIgKikgJiBsb25nX3JldDsKKyAgICBjYXNlIERJU0tJT19MQTE1OgorICAgICAgbG9uZ19yZXQgPSBsYV9oZWFkLmluZGljZXNbaW5keF0ubGExNTsKKyAgICAgIHJldHVybiAodV9jaGFyICopICYgbG9uZ19yZXQ7CiAgICAgY2FzZSBESVNLSU9fTlJFQURYOgogICAgICAgKnZhcl9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7CiAgICAgICBjNjRfcmV0LmxvdyA9IGhlYWQuaW5kaWNlc1tpbmR4XS5yc2VjdCAqIDUxMiAmIDB4ZmZmZmZmZmY7CkBAIC0xMTAxLDcgKzE1MzQsNyBAQAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBkYXJ3aW4gKi8KIAogCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAvKgogICogY29sbGVjdCBzdGF0aXN0aWNzIGZvciBhbGwgZGlza3MKICAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGlza2lvLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uaAppbmRleCAwNTU5NmFiLi44Y2QyMDZiIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kaXNraW8uaApAQCAtMSw3ICsxLDcgQEAKICNpZm5kZWYgX01JQkdST1VQX0RJU0tJT19ICiAjZGVmaW5lIF9NSUJHUk9VUF9ESVNLSU9fSAogCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlKQogY29uZmlnX2FkZF9taWIoVUNELURJU0tJTy1NSUIpCiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmMKaW5kZXggYTZiOWIzNC4uMGI3MTFmYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5jCkBAIC0zLDYgKzMsNyBAQAogICoKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIEhBVkVfU1RETElCX0gKQEAgLTE0LDI0ICsxNSwxMCBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxjdHlwZS5oPgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInN0cnVjdC5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQotI2lmIGRlZmluZWQoSEFWRV9ETEZDTl9IKSAmJiAoZGVmaW5lZChIQVZFX0RMT1BFTikgfHwgZGVmaW5lZChIQVZFX0xJQkRMKSkgXAotICAgIHx8IGRlZmluZWQoV0lOMzIpCi0KICNpZiBkZWZpbmVkKFdJTjMyKQogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNlbHNlCkBAIC0zOSw2OCArMjYsMzMgQEAKICNlbmRpZgogI2luY2x1ZGUgImRsbW9kLmgiCiAKLXN0YXRpYyBzdHJ1Y3QgZGxtb2QgKmRsbW9kczsKLXN0YXRpYyBpbnQgICAgICBkbG1vZF9uZXh0X2luZGV4ID0gMTsKLXN0YXRpYyBjaGFyICAgICBkbG1vZF9wYXRoWzEwMjRdOworI2lmbmRlZiBTTk1QRExNT0RQQVRICisjZGVmaW5lIFNOTVBETE1PRFBBVEggIi91c3IvbG9jYWwvbGliL3NubXAvZGxtb2QiCisjZW5kaWYKIAotc3RhdGljIHZvaWQgICAgIGRsbW9kX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Ci1zdGF0aWMgdm9pZCAgICAgZGxtb2RfZnJlZV9jb25maWcodm9pZCk7Ci0KLS8qCi0gKiB0aGlzIHZhcmlhYmxlIGRlZmluZXMgZnVuY3Rpb24gY2FsbGJhY2tzIGFuZCB0eXBlIHJldHVybgotICogaW5mb3JtYXRpb24gZm9yIHRoZSBkbG1vZCBtaWIKLSAqLwotc3RhdGljIHN0cnVjdCB2YXJpYWJsZTQgZGxtb2RfdmFyaWFibGVzW10gPSB7Ci0gICAge0RMTU9ETkVYVElOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9kbG1vZCwgMSwgezF9fSwKLSAgICB7RExNT0ROQU1FLCBBU05fT0NURVRfU1RSLCBSV1JJVEUsIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgMn19LAotICAgIHtETE1PRFBBVEgsIEFTTl9PQ1RFVF9TVFIsIFJXUklURSwgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCAzfX0sCi0gICAge0RMTU9ERVJST1IsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDR9fSwKLSAgICB7RExNT0RTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgNX19LAorc3RydWN0IGRsbW9kIHsKKyAgc3RydWN0IGRsbW9kICAgKm5leHQ7CisgIGludCAgICAgICAgICAgICBpbmRleDsKKyAgY2hhciAgICAgICAgICAgIG5hbWVbNjQgKyAxXTsKKyAgY2hhciAgICAgICAgICAgIHBhdGhbMjU1ICsgMV07CisgIGNoYXIgICAgICAgICAgICBlcnJvclsyNTUgKyAxXTsKKyAgdm9pZCAgICAgICAgICAgKmhhbmRsZTsKKyAgaW50ICAgICAgICAgICAgIHN0YXR1czsKIH07CiAKLXN0YXRpYyBvaWQgICAgICBkbG1vZF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDEzLCAxNCB9Owotc3RhdGljIGludCAgICAgIGRsbW9kX3ZhcmlhYmxlc19vaWRfbGVuID0gOTsKKyNkZWZpbmUgRExNT0RfTE9BREVECQkxCisjZGVmaW5lIERMTU9EX1VOTE9BREVECQkyCisjZGVmaW5lIERMTU9EX0VSUk9SCQkzCisjZGVmaW5lIERMTU9EX0xPQUQJCTQKKyNkZWZpbmUgRExNT0RfVU5MT0FECQk1CisjZGVmaW5lIERMTU9EX0NSRUFURQkJNgorI2RlZmluZSBETE1PRF9ERUxFVEUJCTcKIAotdm9pZAotaW5pdF9kbG1vZCh2b2lkKQotewotICAgIFJFR0lTVEVSX01JQigiZGxtb2QiLCBkbG1vZF92YXJpYWJsZXMsIHZhcmlhYmxlNCwgZGxtb2RfdmFyaWFibGVzX29pZCk7CitzdGF0aWMgc3RydWN0IGRsbW9kICpkbG1vZHM7CitzdGF0aWMgdW5zaWduZWQgaW50IGRsbW9kX25leHRfaW5kZXggPSAxOworc3RhdGljIGNoYXIgICAgIGRsbW9kX3BhdGhbMTAyNF07CiAKLSAgICAvKgotICAgICAqIFRPRE86IFJFR0lTVEVSX1NZU09SX0VOVFJZIAotICAgICAqLwotCi0gICAgREVCVUdNU0dUTCgoImRsbW9kIiwgInJlZ2lzdGVyIG1pYlxuIikpOwotCi0gICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRsbW9kIiwgZGxtb2RfcGFyc2VfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsbW9kX2ZyZWVfY29uZmlnLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUtbmFtZSBtb2R1bGUtcGF0aCIpOwotCi0gICAgewotICAgICAgICBjb25zdCBjaGFyICogY29uc3QgcCA9IGdldGVudigiU05NUERMTU9EUEFUSCIpOwotICAgICAgICBzdHJsY3B5KGRsbW9kX3BhdGgsIFNOTVBETE1PRFBBVEgsIHNpemVvZihkbG1vZF9wYXRoKSk7Ci0gICAgICAgIGlmIChwKSB7Ci0gICAgICAgICAgICBpZiAocFswXSA9PSBFTlZfU0VQQVJBVE9SX0NIQVIpIHsKLSAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGRsbW9kX3BhdGgpOwotICAgICAgICAgICAgICAgIGlmIChsZW4gPj0gMSAmJiBkbG1vZF9wYXRoW2xlbiAtIDFdICE9IEVOVl9TRVBBUkFUT1JfQ0hBUikKLSAgICAgICAgICAgICAgICAgICAgc3RybGNhdChkbG1vZF9wYXRoLCBFTlZfU0VQQVJBVE9SLCBzaXplb2YoZGxtb2RfcGF0aCkpOwotICAgICAgICAgICAgICAgIHN0cmxjYXQoZGxtb2RfcGF0aCwgcCArIDEsIHNpemVvZihkbG1vZF9wYXRoKSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzdHJsY3B5KGRsbW9kX3BhdGgsIHAsIHNpemVvZihkbG1vZF9wYXRoKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiZGxtb2RfcGF0aDogJXNcbiIsIGRsbW9kX3BhdGgpKTsKLX0KLQotdm9pZAotZGVpbml0X2RsbW9kKHZvaWQpCi17Ci0gICAgdW5yZWdpc3Rlcl9taWIoZGxtb2RfdmFyaWFibGVzX29pZCwgZGxtb2RfdmFyaWFibGVzX29pZF9sZW4pOwotICAgIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRsbW9kIik7Ci19Ci0KLXN0cnVjdCBkbG1vZCAgICoKK3N0YXRpYyBzdHJ1Y3QgZGxtb2QgICAqCiBkbG1vZF9jcmVhdGVfbW9kdWxlKHZvaWQpCiB7CiAgICAgc3RydWN0IGRsbW9kICAqKnBkbG1vZCwgKmRsbTsKQEAgLTEyMCw3ICs3Miw3IEBACiAgICAgcmV0dXJuIGRsbTsKIH0KIAotdm9pZAorc3RhdGljIHZvaWQKIGRsbW9kX2RlbGV0ZV9tb2R1bGUoc3RydWN0IGRsbW9kICpkbG0pCiB7CiAgICAgc3RydWN0IGRsbW9kICAqKnBkbG1vZDsKQEAgLTIyNywxNCArMTc5LDkgQEAKICNlbmRpZgogfQogCi12b2lkCitzdGF0aWMgdm9pZAogZGxtb2RfbG9hZF9tb2R1bGUoc3RydWN0IGRsbW9kICpkbG0pCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHN5bV9pbml0WzY0XTsKLSAgICBjaGFyICAgICAgICAgICAqcCwgdG1wX3BhdGhbMjU1XTsKLSAgICBkbF9mdW5jdGlvbl9wdHIgZGxfaW5pdDsKLSAgICBjaGFyICAgICAgICAgICAqc3Q7Ci0KICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiZGxtb2RfbG9hZF9tb2R1bGUgJXM6ICVzXG4iLCBkbG0tPm5hbWUsCiAgICAgICAgICAgICAgICAgZGxtLT5wYXRoKSk7CiAKQEAgLTI1MSw2ICsxOTgsOCBAQAogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciAqc3QsICpwLCB0bXBfcGF0aFsyNTVdOworCiAgICAgICAgIGZvciAocCA9IHN0cnRva19yKGRsbW9kX3BhdGgsIEVOVl9TRVBBUkFUT1IsICZzdCk7IHA7CiAgICAgICAgICAgICAgcCA9IHN0cnRva19yKE5VTEwsIEVOVl9TRVBBUkFUT1IsICZzdCkpIHsKICAgICAgICAgICAgIHNucHJpbnRmKHRtcF9wYXRoLCBzaXplb2YodG1wX3BhdGgpLCAiJXMvJXMuJXMiLCBwLCBkbG0tPnBhdGgsCkBAIC0yNjcsMjUgKzIxNiwzMCBAQAogICAgICAgICBpZiAoZGxtLT5zdGF0dXMgPT0gRExNT0RfRVJST1IpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNucHJpbnRmKHN5bV9pbml0LCBzaXplb2Yoc3ltX2luaXQpLCAiaW5pdF8lcyIsIGRsbS0+bmFtZSk7Ci0gICAgZGxfaW5pdCA9IGRsbW9kX2Rsc3ltKGRsbS0+aGFuZGxlLCBzeW1faW5pdCk7Ci0gICAgaWYgKGRsX2luaXQgPT0gTlVMTCkgewotICAgICAgICBkbG1vZF9kbGNsb3NlKGRsbS0+aGFuZGxlKTsKLSAgICAgICAgc25wcmludGYoZGxtLT5lcnJvciwgc2l6ZW9mKGRsbS0+ZXJyb3IpLAotICAgICAgICAgICAgICAgICAiZGxzeW0gZmFpbGVkOiBjYW4ndCBmaW5kIFwnJXNcJyIsIHN5bV9pbml0KTsKLSAgICAgICAgZGxtLT5zdGF0dXMgPSBETE1PRF9FUlJPUjsKLSAgICAgICAgcmV0dXJuOworICAgIHsKKyAgICAgICAgY2hhciBzeW1faW5pdFs2NCArIHNpemVvZigiaW5pdF8iKV07CisgICAgICAgIGRsX2Z1bmN0aW9uX3B0ciBkbF9pbml0OworCisgICAgICAgIHNucHJpbnRmKHN5bV9pbml0LCBzaXplb2Yoc3ltX2luaXQpLCAiaW5pdF8lcyIsIGRsbS0+bmFtZSk7CisgICAgICAgIGRsX2luaXQgPSBkbG1vZF9kbHN5bShkbG0tPmhhbmRsZSwgc3ltX2luaXQpOworICAgICAgICBpZiAoZGxfaW5pdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBkbG1vZF9kbGNsb3NlKGRsbS0+aGFuZGxlKTsKKyAgICAgICAgICAgIHNucHJpbnRmKGRsbS0+ZXJyb3IsIHNpemVvZihkbG0tPmVycm9yKSwKKyAgICAgICAgICAgICAgICAgICAgICJkbHN5bSBmYWlsZWQ6IGNhbid0IGZpbmQgXCclc1wnIiwgc3ltX2luaXQpOworICAgICAgICAgICAgZGxtLT5zdGF0dXMgPSBETE1PRF9FUlJPUjsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBkbF9pbml0KCk7CiAgICAgfQogCi0gICAgZGxfaW5pdCgpOwogICAgIGRsbS0+ZXJyb3JbMF0gPSAnXDAnOwogICAgIGRsbS0+c3RhdHVzID0gRExNT0RfTE9BREVEOwogfQogCi12b2lkCitzdGF0aWMgdm9pZAogZGxtb2RfdW5sb2FkX21vZHVsZShzdHJ1Y3QgZGxtb2QgKmRsbSkKIHsKLSAgICBjaGFyICAgICAgICAgICAgc3ltX2RlaW5pdFs2NF07CisgICAgY2hhciAgICAgICAgICAgIHN5bV9kZWluaXRbNjQgKyBzaXplb2YoInNodXRkb3duXyIpXTsKICAgICBkbF9mdW5jdGlvbl9wdHIgZGxfZGVpbml0OwogCiAgICAgaWYgKCFkbG0gfHwgZGxtLT5zdGF0dXMgIT0gRExNT0RfTE9BREVEKQpAQCAtMjkzLDE4ICsyNDcsMjIgQEAKIAogICAgIHNucHJpbnRmKHN5bV9kZWluaXQsIHNpemVvZihzeW1fZGVpbml0KSwgImRlaW5pdF8lcyIsIGRsbS0+bmFtZSk7CiAgICAgZGxfZGVpbml0ID0gZGxtb2RfZGxzeW0oZGxtLT5oYW5kbGUsIHN5bV9kZWluaXQpOwotICAgIGlmIChkbF9kZWluaXQgPT0gTlVMTCkgewotICAgICAgICBzbnByaW50ZihkbG0tPmVycm9yLCBzaXplb2YoZGxtLT5lcnJvciksCi0gICAgICAgICAgICAgICAgICJkbHN5bSBmYWlsZWQ6IGNhbid0IGZpbmQgXCclc1wnIiwgc3ltX2RlaW5pdCk7Ci0gICAgfSBlbHNlIHsKKyAgICBpZiAoIWRsX2RlaW5pdCkgeworICAgICAgICBzbnByaW50ZihzeW1fZGVpbml0LCBzaXplb2Yoc3ltX2RlaW5pdCksICJzaHV0ZG93bl8lcyIsIGRsbS0+bmFtZSk7CisgICAgICAgIGRsX2RlaW5pdCA9IGRsbW9kX2Rsc3ltKGRsbS0+aGFuZGxlLCBzeW1fZGVpbml0KTsKKyAgICB9CisgICAgaWYgKGRsX2RlaW5pdCkgeworICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiQ2FsbGluZyAlcygpXG4iLCBzeW1fZGVpbml0KSk7CiAgICAgICAgIGRsX2RlaW5pdCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJObyBkZXN0cnVjdG9yIGZvciAlc1xuIiwgZGxtLT5uYW1lKSk7CiAgICAgfQogICAgIGRsbW9kX2RsY2xvc2UoZGxtLT5oYW5kbGUpOwogICAgIGRsbS0+c3RhdHVzID0gRExNT0RfVU5MT0FERUQ7CiAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgIk1vZHVsZSAlcyB1bmxvYWRlZFxuIiwgZGxtLT5uYW1lKSk7CiB9CiAKLXN0cnVjdCBkbG1vZCAgICoKK3N0YXRpYyBzdHJ1Y3QgZGxtb2QgICAqCiBkbG1vZF9nZXRfYnlfaW5kZXgoaW50IGlpbmRleCkKIHsKICAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtb2Q7CkBAIC0zMTYsNiArMjc0LDEwIEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qCisgKiBGdW5jdGlvbnMgdG8gcGFyc2UgY29uZmlnIGxpbmVzCisgKi8KKwogc3RhdGljIHZvaWQKIGRsbW9kX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKQEAgLTMyOCw3ICsyOTAsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIC8qCi0gICAgICogcmVtb3ZlIGNvbW1lbnRzIAorICAgICAqIHJlbW92ZSBjb21tZW50cwogICAgICAqLwogICAgICooY3B0ciArIHN0cmNzcG4oY3B0ciwgIiM7XHJcbiIpKSA9ICdcMCc7CiAKQEAgLTMzNyw3ICsyOTksNyBAQAogICAgICAgICByZXR1cm47CiAKICAgICAvKgotICAgICAqIGR5bmFtaWMgbW9kdWxlIG5hbWUgCisgICAgICogZHluYW1pYyBtb2R1bGUgbmFtZQogICAgICAqLwogICAgIGRsbV9uYW1lID0gc3RydG9rX3IoY3B0ciwgIlx0ICIsICZzdCk7CiAgICAgaWYgKGRsbV9uYW1lID09IE5VTEwpIHsKQEAgLTM0OCw3ICszMTAsNyBAQAogICAgIHN0cmxjcHkoZGxtLT5uYW1lLCBkbG1fbmFtZSwgc2l6ZW9mKGRsbS0+bmFtZSkpOwogCiAgICAgLyoKLSAgICAgKiBkeW5hbWljIG1vZHVsZSBwYXRoIAorICAgICAqIGR5bmFtaWMgbW9kdWxlIHBhdGgKICAgICAgKi8KICAgICBkbG1fcGF0aCA9IHN0cnRva19yKE5VTEwsICJcdCAiLCAmc3QpOwogICAgIGlmIChkbG1fcGF0aCkKQEAgLTM3NiwxMyArMzM4LDIzIEBACiAgICAgZGxtb2RzID0gTlVMTDsKIH0KIAorLyoKKyAqIEZ1bmN0aW9ucyB0byBoYW5kbGUgU05NUCBtYW5hZ2VtZW50CisgKi8KKworI2RlZmluZSBETE1PRE5FWFRJTkRFWCAJCTEKKyNkZWZpbmUgRExNT0RJTkRFWCAgICAgCQkyCisjZGVmaW5lIERMTU9ETkFNRSAgICAgIAkJMworI2RlZmluZSBETE1PRFBBVEggICAgICAJCTQKKyNkZWZpbmUgRExNT0RFUlJPUiAgICAgCQk1CisjZGVmaW5lIERMTU9EU1RBVFVTICAgIAkJNgogCiAvKgogICogaGVhZGVyX2RsbW9kKC4uLgogICogQXJndW1lbnRzOgogICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKICAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAotICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MKICAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAogICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKICAqIHdyaXRlX21ldGhvZApAQCAtNDE0LDcgKzM4Niw3IEBACiB9CiAKIAotdV9jaGFyICAgICAgICAgKgorc3RhdGljIHVfY2hhciAgICAgICAgICoKIHZhcl9kbG1vZChzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKICAgICAgICAgICBvaWQgKiBuYW1lLAogICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKQEAgLTQyMiw3ICszOTQsNyBAQAogewogCiAgICAgLyoKLSAgICAgKiB2YXJpYWJsZXMgd2UgbWF5IHVzZSBsYXRlciAKKyAgICAgKiB2YXJpYWJsZXMgd2UgbWF5IHVzZSBsYXRlcgogICAgICAqLwogCiAgICAgKndyaXRlX21ldGhvZCA9IDA7ICAgICAgICAgLyogYXNzdW1lIGl0IGlzbid0IHdyaXRhYmxlIGZvciB0aGUgdGltZSBiZWluZyAqLwpAQCAtNDMwLDEwICs0MDIsMTAgQEAKIAogICAgIGlmIChoZWFkZXJfZGxtb2QodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsCiAgICAgICAgICAgICAgICAgICAgICB2YXJfbGVuLCB3cml0ZV9tZXRob2QpID09IE1BVENIX0ZBSUxFRCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyoKLSAgICAgKiB0aGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB2YWx1ZSBhc3NpZ25tZW50cyBmb3IgdGhlIG1pYiByZXN1bHRzLiAKKyAgICAgKiB0aGlzIGlzIHdoZXJlIHdlIGRvIHRoZSB2YWx1ZSBhc3NpZ25tZW50cyBmb3IgdGhlIG1pYiByZXN1bHRzLgogICAgICAqLwogICAgIHN3aXRjaCAodnAtPm1hZ2ljKSB7CiAgICAgY2FzZSBETE1PRE5FWFRJTkRFWDoKQEAgLTQ0MywxMTIgKzQxNSwxMSBAQAogICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAidW5rbm93biBzdWItaWQgJWQgaW4gdmFyX2RsbW9kXG4iLAogICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKICAgICB9Ci0gICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIE5VTEw7CiB9CiAKIAotLyoKLSAqIGhlYWRlcl9kbG1vZEVudHJ5KC4uLgotICogQXJndW1lbnRzOgotICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKLSAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAotICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKLSAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAotICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKLSAqIHdyaXRlX21ldGhvZAotICogCi0gKi8KLQotCi1zdGF0aWMgc3RydWN0IGRsbW9kICoKLWhlYWRlcl9kbG1vZEVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqdnAsCi0gICAgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAotICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCi17Ci0jZGVmaW5lIERMTU9ERU5UUllfTkFNRV9MRU5HVEggMTIKLSAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07Ci0gICAgaW50ICAgICAgICAgICAgIHJlc3VsdDsKLSAgICBzdHJ1Y3QgZGxtb2QgICAqZGxtID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgZGxtb2RfaW5kZXg7Ci0KLSAgICBtZW1jcHkobmV3bmFtZSwgdnAtPm5hbWUsIHZwLT5uYW1lbGVuICogc2l6ZW9mKG9pZCkpOwotICAgICp3cml0ZV9tZXRob2QgPSAwOwotCi0gICAgZm9yIChkbG1vZF9pbmRleCA9IDE7IGRsbW9kX2luZGV4IDwgZGxtb2RfbmV4dF9pbmRleDsgZGxtb2RfaW5kZXgrKykgewotICAgICAgICBkbG0gPSBkbG1vZF9nZXRfYnlfaW5kZXgoZGxtb2RfaW5kZXgpOwotCi0gICAgICAgIERFQlVHTVNHVEwoKCJkbG1vZCIsICJkbG1vZEVudHJ5IGRsbTogJXAgZGxtb2RfaW5kZXg6ICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBkbG0sIGRsbW9kX2luZGV4KSk7Ci0KLSAgICAgICAgaWYgKGRsbSkgewotICAgICAgICAgICAgbmV3bmFtZVsxMl0gPSBkbG1vZF9pbmRleDsKLSAgICAgICAgICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3bmFtZSwgdnAtPm5hbWVsZW4gKyAxKTsKLQotICAgICAgICAgICAgaWYgKChleGFjdCAmJiAocmVzdWx0ID09IDApKSB8fCAoIWV4YWN0ICYmIChyZXN1bHQgPCAwKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoZGxtb2RfaW5kZXggPj0gZGxtb2RfbmV4dF9pbmRleCkgewotICAgICAgICBpZiAoZGxtb2RfaW5kZXggPT0gZGxtb2RfbmV4dF9pbmRleCAmJgotICAgICAgICAgICAgZXhhY3QgJiYgdnAtPm1hZ2ljID09IERMTU9EU1RBVFVTKQotCi0gICAgICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2RTdGF0dXM7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1lbWNweShuYW1lLCBuZXduYW1lLCAodnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKLSAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOwotICAgIHJldHVybiBkbG07Ci19Ci0KLXVfY2hhciAgICAgICAgICoKLXZhcl9kbG1vZEVudHJ5KHN0cnVjdCB2YXJpYWJsZSAqIHZwLAotICAgICAgICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQotewotICAgIC8qCi0gICAgICogdmFyaWFibGVzIHdlIG1heSB1c2UgbGF0ZXIgCi0gICAgICovCi0gICAgc3RydWN0IGRsbW9kICAgKmRsbTsKLQotICAgICp2YXJfbGVuID0gc2l6ZW9mKGludCk7ICAgICAvKiBhc3N1bWUgYW4gaW50ZWdlciBhbmQgY2hhbmdlIGxhdGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGlmIG5vdCAqLwotCi0gICAgZGxtID0gaGVhZGVyX2RsbW9kRW50cnkodnAsIG5hbWUsIGxlbmd0aCwgZXhhY3QsIHZhcl9sZW4sIHdyaXRlX21ldGhvZCk7Ci0gICAgaWYgKGRsbSA9PSBOVUxMKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8qCi0gICAgICogdGhpcyBpcyB3aGVyZSB3ZSBkbyB0aGUgdmFsdWUgYXNzaWdubWVudHMgZm9yIHRoZSBtaWIgcmVzdWx0cy4gCi0gICAgICovCi0gICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKLSAgICBjYXNlIERMTU9ETkFNRToKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kTmFtZTsKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGxtLT5uYW1lKTsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGRsbS0+bmFtZTsKLSAgICBjYXNlIERMTU9EUEFUSDoKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kUGF0aDsKLSAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGxtLT5wYXRoKTsKLSAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGRsbS0+cGF0aDsKLSAgICBjYXNlIERMTU9ERVJST1I6Ci0gICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRsbS0+ZXJyb3IpOwotICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZGxtLT5lcnJvcjsKLSAgICBjYXNlIERMTU9EU1RBVFVTOgotICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2RTdGF0dXM7Ci0gICAgICAgIGxvbmdfcmV0dXJuID0gZGxtLT5zdGF0dXM7Ci0gICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXR1cm47Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9kbG1vZEVudHJ5XG4iLAotICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludAorc3RhdGljIGludAogd3JpdGVfZGxtb2ROYW1lKGludCBhY3Rpb24sCiAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKICAgICAgICAgICAgICAgICB1X2NoYXIgdmFyX3ZhbF90eXBlLApAQCAtNTY5LDEzICs0NDAsMTMgQEAKICAgICAgICAgZGxtID0gZGxtb2RfZ2V0X2J5X2luZGV4KG5hbWVbMTJdKTsKICAgICAgICAgaWYgKCFkbG0gfHwgZGxtLT5zdGF0dXMgPT0gRExNT0RfTE9BREVEKQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEU7Ci0gICAgICAgIG1lbWNweShkbG0tPm5hbWUsIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKKyAgICAgICAgc3RybmNweShkbG0tPm5hbWUsIChjb25zdCBjaGFyICopIHZhcl92YWwsIHZhcl92YWxfbGVuKTsKICAgICAgICAgZGxtLT5uYW1lW3Zhcl92YWxfbGVuXSA9IDA7CiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQogCi1pbnQKK3N0YXRpYyBpbnQKIHdyaXRlX2RsbW9kUGF0aChpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCiAgICAgICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKQEAgLTU5NiwxMyArNDY3LDEzIEBACiAgICAgICAgIGRsbSA9IGRsbW9kX2dldF9ieV9pbmRleChuYW1lWzEyXSk7CiAgICAgICAgIGlmICghZGxtIHx8IGRsbS0+c3RhdHVzID09IERMTU9EX0xPQURFRCkKICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOwotICAgICAgICBtZW1jcHkoZGxtLT5wYXRoLCB2YXJfdmFsLCB2YXJfdmFsX2xlbik7CisgICAgICAgIHN0cm5jcHkoZGxtLT5wYXRoLCAoY29uc3QgY2hhciAqKSB2YXJfdmFsLCB2YXJfdmFsX2xlbik7CiAgICAgICAgIGRsbS0+cGF0aFt2YXJfdmFsX2xlbl0gPSAwOwogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAotaW50CitzdGF0aWMgaW50CiB3cml0ZV9kbG1vZFN0YXR1cyhpbnQgYWN0aW9uLAogICAgICAgICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKICAgICAgICAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCkBAIC02MTAsNyArNDgxLDcgQEAKICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHN0YXRQLCBvaWQgKiBuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7CiAgICAgLyoKLSAgICAgKiB2YXJpYWJsZXMgd2UgbWF5IHVzZSBsYXRlciAKKyAgICAgKiB2YXJpYWJsZXMgd2UgbWF5IHVzZSBsYXRlcgogICAgICAqLwogICAgIHN0cnVjdCBkbG1vZCAgICpkbG07CiAKQEAgLTYyNCw4ICs0OTUsOCBAQAogICAgIH0KICAgICBpZiAoYWN0aW9uID09IENPTU1JVCkgewogICAgICAgICAvKgotICAgICAgICAgKiBvYmplY3QgaWRlbnRpZmllciBpbiBmb3JtIC4xLjMuNi4xLjQuMS4yMDIxLjEzLjE0LjIuMS40LnggCi0gICAgICAgICAqIHdoZXJlIFggaXMgaW5kZXggd2l0aCBvZmZzZXQgMTIgCisgICAgICAgICAqIG9iamVjdCBpZGVudGlmaWVyIGluIGZvcm0gLjEuMy42LjEuNC4xLjIwMjEuMTMuMTQuMi4xLjQueAorICAgICAgICAgKiB3aGVyZSBYIGlzIGluZGV4IHdpdGggb2Zmc2V0IDEyCiAgICAgICAgICAqLwogCiAgICAgICAgIGRsbSA9IGRsbW9kX2dldF9ieV9pbmRleChuYW1lWzEyXSk7CkBAIC02NTksMTMgKzUzMCwxNjcgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBubyBkbG9wZW4gc3VwcG9ydCAqLworLyoKKyAqIGhlYWRlcl9kbG1vZEVudHJ5KC4uLgorICogQXJndW1lbnRzOgorICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKKyAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAorICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncworICogZXhhY3QgICBJTiAgICAgIC0gVFJVRSBpZiBhbiBleGFjdCBtYXRjaCB3YXMgcmVxdWVzdGVkCisgKiB2YXJfbGVuIE9VVCAgICAgLSBsZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZAorICogd3JpdGVfbWV0aG9kCisgKgorICovCisKKworc3RhdGljIHN0cnVjdCBkbG1vZCAqCitoZWFkZXJfZGxtb2RFbnRyeShzdHJ1Y3QgdmFyaWFibGUgKnZwLAorICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKKyAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQoreworI2RlZmluZSBETE1PREVOVFJZX05BTUVfTEVOR1RIIDEyCisgICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOworICAgIGludCAgICAgICAgICAgICByZXN1bHQ7CisgICAgc3RydWN0IGRsbW9kICAgKmRsbSA9IE5VTEw7CisgICAgdW5zaWduZWQgaW50ICAgIGRsbW9kX2luZGV4OworCisgICAgbWVtY3B5KG5ld25hbWUsIHZwLT5uYW1lLCB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKKyAgICAqd3JpdGVfbWV0aG9kID0gMDsKKworICAgIGZvciAoZGxtb2RfaW5kZXggPSAxOyBkbG1vZF9pbmRleCA8IGRsbW9kX25leHRfaW5kZXg7IGRsbW9kX2luZGV4KyspIHsKKyAgICAgICAgZGxtID0gZGxtb2RfZ2V0X2J5X2luZGV4KGRsbW9kX2luZGV4KTsKKworICAgICAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiZGxtb2RFbnRyeSBkbG06ICVwIGRsbW9kX2luZGV4OiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgZGxtLCBkbG1vZF9pbmRleCkpOworCisgICAgICAgIGlmIChkbG0pIHsKKyAgICAgICAgICAgIG5ld25hbWVbMTJdID0gZGxtb2RfaW5kZXg7CisgICAgICAgICAgICByZXN1bHQgPSBzbm1wX29pZF9jb21wYXJlKG5hbWUsICpsZW5ndGgsIG5ld25hbWUsIHZwLT5uYW1lbGVuICsgMSk7CisKKyAgICAgICAgICAgIGlmICgoZXhhY3QgJiYgKHJlc3VsdCA9PSAwKSkgfHwgKCFleGFjdCAmJiAocmVzdWx0IDwgMCkpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRsbW9kX2luZGV4ID49IGRsbW9kX25leHRfaW5kZXgpIHsKKyAgICAgICAgaWYgKGRsbW9kX2luZGV4ID09IGRsbW9kX25leHRfaW5kZXggJiYKKyAgICAgICAgICAgIGV4YWN0ICYmIHZwLT5tYWdpYyA9PSBETE1PRFNUQVRVUykKKworICAgICAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kU3RhdHVzOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW1jcHkobmFtZSwgbmV3bmFtZSwgKHZwLT5uYW1lbGVuICsgMSkgKiBzaXplb2Yob2lkKSk7CisgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKKyAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nKTsKKyAgICByZXR1cm4gZGxtOworfQorCitzdGF0aWMgdV9jaGFyICAgICAgICAgKgordmFyX2RsbW9kRW50cnkoc3RydWN0IHZhcmlhYmxlICogdnAsCisgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgLyoKKyAgICAgKiB2YXJpYWJsZXMgd2UgbWF5IHVzZSBsYXRlcgorICAgICAqLworICAgIHN0cnVjdCBkbG1vZCAgICpkbG07CisKKyAgICAqdmFyX2xlbiA9IHNpemVvZihpbnQpOyAgICAgLyogYXNzdW1lIGFuIGludGVnZXIgYW5kIGNoYW5nZSBsYXRlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBpZiBub3QgKi8KKworICAgIGRsbSA9IGhlYWRlcl9kbG1vZEVudHJ5KHZwLCBuYW1lLCBsZW5ndGgsIGV4YWN0LCB2YXJfbGVuLCB3cml0ZV9tZXRob2QpOworICAgIGlmIChkbG0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIHRoaXMgaXMgd2hlcmUgd2UgZG8gdGhlIHZhbHVlIGFzc2lnbm1lbnRzIGZvciB0aGUgbWliIHJlc3VsdHMuCisgICAgICovCisgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKKyAgICBjYXNlIERMTU9ETkFNRToKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kTmFtZTsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGxtLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGRsbS0+bmFtZTsKKyAgICBjYXNlIERMTU9EUEFUSDoKKyAgICAgICAgKndyaXRlX21ldGhvZCA9IHdyaXRlX2RsbW9kUGF0aDsKKyAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZGxtLT5wYXRoKTsKKyAgICAgICAgcmV0dXJuICh1bnNpZ25lZCBjaGFyICopIGRsbS0+cGF0aDsKKyAgICBjYXNlIERMTU9ERVJST1I6CisgICAgICAgICp2YXJfbGVuID0gc3RybGVuKGRsbS0+ZXJyb3IpOworICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGNoYXIgKikgZGxtLT5lcnJvcjsKKyAgICBjYXNlIERMTU9EU1RBVFVTOgorICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfZGxtb2RTdGF0dXM7CisgICAgICAgIGxvbmdfcmV0dXJuID0gZGxtLT5zdGF0dXM7CisgICAgICAgIHJldHVybiAodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXR1cm47CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgInVua25vd24gc3ViLWlkICVkIGluIHZhcl9kbG1vZEVudHJ5XG4iLAorICAgICAgICAgICAgICAgICAgICB2cC0+bWFnaWMpKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKy8qCisgKiB0aGlzIHZhcmlhYmxlIGRlZmluZXMgZnVuY3Rpb24gY2FsbGJhY2tzIGFuZCB0eXBlIHJldHVybgorICogaW5mb3JtYXRpb24gZm9yIHRoZSBkbG1vZCBtaWIKKyAqLworc3RhdGljIHN0cnVjdCB2YXJpYWJsZTQgZGxtb2RfdmFyaWFibGVzW10gPSB7CisgICAge0RMTU9ETkVYVElOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9kbG1vZCwgMSwgezF9fSwKKyAgICB7RExNT0ROQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgMn19LAorICAgIHtETE1PRFBBVEgsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2RsbW9kRW50cnksIDMsIHsyLCAxLCAzfX0sCisgICAge0RMTU9ERVJST1IsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZGxtb2RFbnRyeSwgMywgezIsIDEsIDR9fSwKKyAgICB7RExNT0RTVEFUVVMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgIHZhcl9kbG1vZEVudHJ5LCAzLCB7MiwgMSwgNX19LAorfTsKKworc3RhdGljIG9pZCBkbG1vZF92YXJpYWJsZXNfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDQsIDEsIDIwMjEsIDEzLCAxNCB9OwogCiB2b2lkCiBpbml0X2RsbW9kKHZvaWQpCiB7Ci0gICAgREVCVUdNU0dUTCgoImRsbW9kIiwKLSAgICAgICAgICAgICAgICAiRHluYW1pYyBtb2R1bGVzIG5vdCBzdXBwb3J0IG9uIHRoaXMgcGxhdGZvcm1cbiIpKTsKKyAgICBSRUdJU1RFUl9NSUIoImRsbW9kIiwgZGxtb2RfdmFyaWFibGVzLCB2YXJpYWJsZTQsIGRsbW9kX3ZhcmlhYmxlc19vaWQpOworCisgICAgLyoKKyAgICAgKiBUT0RPOiBSRUdJU1RFUl9TWVNPUl9FTlRSWQorICAgICAqLworCisgICAgREVCVUdNU0dUTCgoImRsbW9kIiwgInJlZ2lzdGVyIG1pYlxuIikpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRsbW9kIiwgZGxtb2RfcGFyc2VfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRsbW9kX2ZyZWVfY29uZmlnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtb2R1bGUtbmFtZSBtb2R1bGUtcGF0aCIpOworCisgICAgeworICAgICAgICBjb25zdCBjaGFyICogY29uc3QgcCA9IGdldGVudigiU05NUERMTU9EUEFUSCIpOworICAgICAgICBzdHJuY3B5KGRsbW9kX3BhdGgsIFNOTVBETE1PRFBBVEgsIHNpemVvZihkbG1vZF9wYXRoKSk7CisgICAgICAgIGRsbW9kX3BhdGhbIHNpemVvZihkbG1vZF9wYXRoKSAtIDEgXSA9IDA7CisgICAgICAgIGlmIChwKSB7CisgICAgICAgICAgICBpZiAocFswXSA9PSAnOicpIHsKKyAgICAgICAgICAgICAgICBpbnQgbGVuID0gc3RybGVuKGRsbW9kX3BhdGgpOworICAgICAgICAgICAgICAgIGlmIChkbG1vZF9wYXRoW2xlbiAtIDFdICE9ICc6JykgeworICAgICAgICAgICAgICAgICAgICBzdHJuY2F0KGRsbW9kX3BhdGgsICI6Iiwgc2l6ZW9mKGRsbW9kX3BhdGgpIC0gbGVuIC0gMSk7CisgICAgICAgICAgICAgICAgICAgIGxlbisrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBzdHJuY2F0KGRsbW9kX3BhdGgsIHAgKyAxLCAgIHNpemVvZihkbG1vZF9wYXRoKSAtIGxlbik7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBzdHJuY3B5KGRsbW9kX3BhdGgsIHAsIHNpemVvZihkbG1vZF9wYXRoKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkbG1vZF9wYXRoWyBzaXplb2YoZGxtb2RfcGF0aCktMSBdID0gMDsKKyAgICBERUJVR01TR1RMKCgiZGxtb2QiLCAiZGxtb2RfcGF0aDogJXNcbiIsIGRsbW9kX3BhdGgpKTsKIH0KIAotI2VuZGlmCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKQorCit2b2lkCitzaHV0ZG93bl9kbG1vZCh2b2lkKQoreworICAgIHNubXBkX3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoImRsbW9kIik7CisgICAgdW5yZWdpc3Rlcl9taWIoZGxtb2RfdmFyaWFibGVzX29pZCwgT0lEX0xFTkdUSChkbG1vZF92YXJpYWJsZXNfb2lkKSk7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZGxtb2QuaAppbmRleCA2OTBiYzQ1Li45NTkyYmRkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9kbG1vZC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2RsbW9kLmgKQEAgLTMsNTggKzMsMTYgQEAKICAqCiAgKi8KIAotI2lmbmRlZiBfTUlCR1JPVVBfRExNT0RfSAotI2RlZmluZSBfTUlCR1JPVVBfRExNT0RfSAorI2lmbmRlZiBNSUJHUk9VUF9ETE1PRF9ICisjZGVmaW5lIE1JQkdST1VQX0RMTU9EX0gKIAotLyoKLSAqIFRPRE8gI2luY2x1ZGUgIm1pYmRlZnMuaCIgCi0gKi8KKyNpZiAoIWRlZmluZWQoSEFWRV9ETEZDTl9IKSB8fCAhZGVmaW5lZChIQVZFX0RMT1BFTikpICYmICFkZWZpbmVkKFdJTjMyKQorY29uZmlnX2Vycm9yKER5bmFtaWMgbW9kdWxlcyBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0pCisjZW5kaWYKIAogY29uZmlnX2FkZF9taWIoVUNELURMTU9ELU1JQikKLSNpZm5kZWYgU05NUERMTU9EUEFUSAotI2RlZmluZSBTTk1QRExNT0RQQVRIICIvdXNyL2xvY2FsL2xpYi9zbm1wL2RsbW9kIgotI2VuZGlmCi0gICAgIHN0cnVjdCBkbG1vZCB7Ci0gICAgICAgICBzdHJ1Y3QgZGxtb2QgICAqbmV4dDsKLSAgICAgICAgIGludCAgICAgICAgICAgICBpbmRleDsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICBuYW1lWzY0ICsgMV07Ci0gICAgICAgICBjaGFyICAgICAgICAgICAgcGF0aFsyNTUgKyAxXTsKLSAgICAgICAgIGNoYXIgICAgICAgICAgICBlcnJvclsyNTUgKyAxXTsKLSAgICAgICAgIHZvaWQgICAgICAgICAgICpoYW5kbGU7Ci0gICAgICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOwotICAgICB9OwogCi0gICAgIHZvaWQgICAgICAgICAgICBkbG1vZF9sb2FkX21vZHVsZShzdHJ1Y3QgZGxtb2QgKik7Ci0gICAgIHZvaWQgICAgICAgICAgICBkbG1vZF91bmxvYWRfbW9kdWxlKHN0cnVjdCBkbG1vZCAqKTsKLSAgICAgc3RydWN0IGRsbW9kICAgKmRsbW9kX2NyZWF0ZV9tb2R1bGUodm9pZCk7Ci0gICAgIHZvaWQgICAgICAgICAgICBkbG1vZF9kZWxldGVfbW9kdWxlKHN0cnVjdCBkbG1vZCAqKTsKLSAgICAgc3RydWN0IGRsbW9kICAgKmRsbW9kX2dldF9ieV9pbmRleChpbnQpOwordm9pZCBpbml0X2RsbW9kKHZvaWQpOwordm9pZCBzaHV0ZG93bl9kbG1vZCh2b2lkKTsKIAotICAgICB2b2lkICAgICAgICAgICAgZGxtb2RfaW5pdCh2b2lkKTsKLSAgICAgdm9pZCAgICAgICAgICAgIGRsbW9kX2RlaW5pdCh2b2lkKTsKLQotICAgICBleHRlcm4gdm9pZCAgICAgaW5pdF9kbG1vZCh2b2lkKTsKLSAgICAgZXh0ZXJuIHZvaWQgICAgIGRlaW5pdF9kbG1vZCh2b2lkKTsKLQotICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfZGxtb2Q7Ci0gICAgIGV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9kbG1vZEVudHJ5OwotICAgICBleHRlcm4gV3JpdGVNZXRob2Qgd3JpdGVfZGxtb2ROYW1lOwotICAgICBleHRlcm4gV3JpdGVNZXRob2Qgd3JpdGVfZGxtb2RQYXRoOwotICAgICBleHRlcm4gV3JpdGVNZXRob2Qgd3JpdGVfZGxtb2RTdGF0dXM7Ci0KLSNkZWZpbmUgRExNT0RORVhUSU5ERVggCQkxCi0jZGVmaW5lIERMTU9ESU5ERVggICAgIAkJMgotI2RlZmluZSBETE1PRE5BTUUgICAgICAJCTMKLSNkZWZpbmUgRExNT0RQQVRIICAgICAgCQk0Ci0jZGVmaW5lIERMTU9ERVJST1IgICAgIAkJNQotI2RlZmluZSBETE1PRFNUQVRVUyAgICAJCTYKLQotI2RlZmluZSBETE1PRF9MT0FERUQJCTEKLSNkZWZpbmUgRExNT0RfVU5MT0FERUQJCTIKLSNkZWZpbmUgRExNT0RfRVJST1IJCTMKLSNkZWZpbmUgRExNT0RfTE9BRAkJNAotI2RlZmluZQlETE1PRF9VTkxPQUQJCTUKLSNkZWZpbmUgRExNT0RfQ1JFQVRFCQk2Ci0jZGVmaW5lIERMTU9EX0RFTEVURQkJNwotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9ETE1PRF9IICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1JQkdST1VQX0RMTU9EX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5jCmluZGV4IDBmMTFlOTkuLjdmM2JjYjEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuYwpAQCAtMTEsMTEgKzExLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHNpZ25hbC5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTEyLDkgKzEwOCw2IEBACiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTEyMiw3ICsxMTUsNyBAQAogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAiZXJyb3JtaWIuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiBzdGF0aWMgdGltZV90ICAgZXJyb3JzdGF0dXN0aW1lID0gMDsKIHN0YXRpYyBpbnQgICAgICBlcnJvcnN0YXR1c3ByaW9yID0gMDsKQEAgLTE1OSwxNCArMTUyLDE0IEBACiAgICAgICogaW5mb3JtYXRpb24gYXQgCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX2Vycm9yX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9lcnJvcnMsIDEsCi0gICAgICAgICB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2Vycm9ycywgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfZXJyb3JzLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2Vycm9ybWliLmgKaW5kZXggNWRjYjJjYy4uNTAxNjQyYyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXJyb3JtaWIuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9lcnJvcm1pYi5oCkBAIC02LDcgKzYsNyBAQAogCiB2b2lkICAgICAgICAgICAgaW5pdF9lcnJvcm1pYih2b2lkKTsKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKICAgICAgdm9pZCAgICAgICAgICAgIHNldFBlcnJvcnN0YXR1cyhjb25zdCBjaGFyICopOwogICAgICB2b2lkICAgICAgICAgICAgc2V0ZXJyb3JzdGF0dXMoY29uc3QgY2hhciAqLCBpbnQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5jCmluZGV4IDQyOTkyMTcuLjE0YjA4NGEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTEwLDExICsxMSw3IEBACiAjaW5jbHVkZSA8ZmNudGwuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMTAwLDIyICs5NywyMSBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotI2lmbmRlZiBIQVZFX1NUUk5DQVNFQ01QCi1pbnQgICAgICAgICAgICAgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3Qgbik7Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgImV4dGVuc2libGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAidXRpbGl0aWVzL2V4ZWN1dGUuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGdldF9leHRlbl9pbnN0YW5jZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHBhcnNlX21pYm9pZCkKIAogZXh0ZXJuIHN0cnVjdCBteXByb2MgKnByb2N3YXRjaDsgICAgICAgIC8qIG1vdmVkIHRvIHByb2MuYyAqLwogZXh0ZXJuIGludCAgICAgIG51bXByb2NzOyAgICAgICAvKiBkaXR0byAqLwpAQCAtMTMzLDIwICsxMjksMjAgQEAKICAqIHRoZSByZWxvY2F0YWJsZSBleHRlbnNpYmxlIGNvbW1hbmRzIHZhcmlhYmxlcyAKICAqLwogc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3JlbG9jYXRhYmxlX3ZhcmlhYmxlc1tdID0gewotICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge01JQklOREVYfX0sCi0gICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7RVJST1JOQU1FfX0sCi0gICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7U0hFTExDT01NQU5EfX0sCi0gICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge0VSUk9SRkxBR319LAotICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7RVJST1JNU0d9fSwKLSAgICB7RVJST1JGSVgsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3JlbG9jYXRhYmxlLCAxLAotICAgICB7RVJST1JGSVh9fSwKLSAgICB7RVJST1JGSVhDTUQsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwKLSAgICAge0VSUk9SRklYQ01EfX0KKyAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtNSUJJTkRFWH19LAorICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge0VSUk9STkFNRX19LAorICAgIHtTSEVMTENPTU1BTkQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge1NIRUxMQ09NTUFORH19LAorICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtFUlJPUkZMQUd9fSwKKyAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge0VSUk9STVNHfX0sCisgICAge0VSUk9SRklYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXh0ZW5zaWJsZV9yZWxvY2F0YWJsZSwgMSwge0VSUk9SRklYfX0sCisgICAge0VSUk9SRklYQ01ELCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2V4dGVuc2libGVfcmVsb2NhdGFibGUsIDEsIHtFUlJPUkZJWENNRH19CiB9OwogCiAKQEAgLTE1NSwyMCArMTUxLDIwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfZXh0ZW5zaWJsZV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge1NIRUxMQ09NTUFORH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwKLSAgICAgICAgIHtFUlJPUk1TR319LAotICAgICAgICB7RVJST1JGSVgsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge0VSUk9SRklYfX0sCi0gICAgICAgIHtFUlJPUkZJWENNRCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3NoZWxsLCAxLAotICAgICAgICAge0VSUk9SRklYQ01EfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NIRUxMQ09NTUFORCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge1NIRUxMQ09NTUFORH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfc2hlbGwsIDEsIHtFUlJPUk1TR319LAorICAgICAgICB7RVJST1JGSVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge0VSUk9SRklYfX0sCisgICAgICAgIHtFUlJPUkZJWENNRCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9zaGVsbCwgMSwge0VSUk9SRklYQ01EfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuaAppbmRleCA1NThmMTRiLi4yNGJkMTZkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZXh0ZW5zaWJsZS5oCkBAIC03LDYgKzcsNyBAQAogCiB2b2lkICAgICAgICAgICAgaW5pdF9leHRlbnNpYmxlKHZvaWQpOwogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiBjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQogY29uZmlnX3JlcXVpcmUodXRpbGl0aWVzL2V4ZWN1dGUpCiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuYwppbmRleCAwMGM5OGQ0Li45ZTM0NWQ4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5jCkBAIC0xMiwxMSArMTIsNyBAQAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0yNSw5ICsyMSw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgpAQCAtNDEsNyArMzQsNyBAQAogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAiZmlsZS5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKIAogI2RlZmluZSBNQVhGSUxFICAgMjAKIApAQCAtNTIsMTIgKzQ1LDE4IEBACiBpbml0X2ZpbGUodm9pZCkKIHsKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGZpbGVfdGFibGVbXSA9IHsKLSAgICAgICAge0ZJTEVfSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2ZpbGVfdGFibGUsIDEsIHsxfX0sCi0gICAgICAgIHtGSUxFX05BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZmlsZV90YWJsZSwgMSwgezJ9fSwKLSAgICAgICAge0ZJTEVfU0laRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZmlsZV90YWJsZSwgMSwgezN9fSwKLSAgICAgICAge0ZJTEVfTUFYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9maWxlX3RhYmxlLCAxLCB7NH19LAotICAgICAgICB7RklMRV9FUlJPUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZmlsZV90YWJsZSwgMSwgezEwMH19LAotICAgICAgICB7RklMRV9NU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZmlsZV90YWJsZSwgMSwgezEwMX19CisgICAgICAgIHtGSUxFX0lOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZmlsZV90YWJsZSwgMSwgezF9fSwKKyAgICAgICAge0ZJTEVfTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZmlsZV90YWJsZSwgMSwgezJ9fSwKKyAgICAgICAge0ZJTEVfU0laRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2ZpbGVfdGFibGUsIDEsIHszfX0sCisgICAgICAgIHtGSUxFX01BWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2ZpbGVfdGFibGUsIDEsIHs0fX0sCisgICAgICAgIHtGSUxFX0VSUk9SLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZmlsZV90YWJsZSwgMSwgezEwMH19LAorICAgICAgICB7RklMRV9NU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2ZpbGVfdGFibGUsIDEsIHsxMDF9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvZmlsZS5oCmluZGV4IDhiMjIyYzUuLjQ1NTA4NmYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2ZpbGUuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9maWxlLmgKQEAgLTcsNiArNyw4IEBACiAKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKKwogdm9pZCAgICAgICAgICAgIGluaXRfZmlsZSh2b2lkKTsKIAogLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2hwdXguYwppbmRleCBkYjA5NGQzLi45YzVmOWY5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9ocHV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvaHB1eC5jCkBAIC0zMCwxNSArMzAsMjEgQEAKICAgICAgKiBpbmZvcm1hdGlvbiBhdCAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGhwX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7SFBDT05GLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfaHAsIDEsIHtIUENPTkZ9fSwKLSAgICAgICAge0hQUkVDT05GSUcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9ocCwgMSwge0hQUkVDT05GSUd9fSwKLSAgICAgICAge0hQRkxBRywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2hwLCAxLCB7SFBGTEFHfX0sCi0gICAgICAgIHtIUExPR01BU0ssIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9ocCwgMSwge0VSUk9SRkxBR319LAotICAgICAgICB7SFBTVEFUVVMsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9ocCwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge0hQQ09ORiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9ocCwgMSwge0hQQ09ORn19LAorICAgICAgICB7SFBSRUNPTkZJRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9ocCwgMSwge0hQUkVDT05GSUd9fSwKKyAgICAgICAge0hQRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9ocCwgMSwge0hQRkxBR319LAorICAgICAgICB7SFBMT0dNQVNLLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2hwLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtIUFNUQVRVUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9ocCwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBocHRyYXBfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtIUFRSQVAsIEFTTl9JUEFERFJFU1MsIFJXUklURSwgdmFyX2hwLCAxLCB7SFBUUkFQfX0sCisgICAgICAgIHtIUFRSQVAsIEFTTl9JUEFERFJFU1MsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9ocCwgMSwge0hQVFJBUH19LAogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYwppbmRleCBjNWNlOTA2Li4wNWM2MGI3IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbVNlbnNvcnMuYwpAQCAtNjYsNiArNjYsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNzMsOSArNzQsMTIgQEAKICAqIG1pbmltYWwgaW5jbHVkZSBkaXJlY3RpdmVzIAogICovCiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCiAjaW5jbHVkZSA8dGltZS5oPgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh0YWJsZV9jb250YWluZXIpCisKKwogLyoKICAqIExvYWQgcmVxdWlyZWQgZHJpdmVycyBhbmQgbGlicmFyaWVzLgogICovCkBAIC04NCw5ICs4OCwxMCBAQAogICAgICNpbmNsdWRlIDxrc3RhdC5oPgogICAgICNpZmRlZiBIQVZFX1BJQ0xfSCAKICAgICAgICAgI2luY2x1ZGUgPHBpY2wuaD4gLyogYWNjZXNzZXMgdGhlIHBpY2xkIGRhZW1vbiAqLworICAgICNlbHNlIAorICAgICAgICAvKiB0aGUgZm9sbG93aW5nIHNob3VsZCBiZSBzdWZmaWNpZW50IGZvciBhbnkgU3VuLWJhc2VkIHNlbnNvcnMgKi8KKwkjaW5jbHVkZSA8L3Vzci9wbGF0Zm9ybS9zdW40dS9pbmNsdWRlL3N5cy9lbnZjdHJsLmg+CiAgICAgI2VuZGlmIAotLyogdGhlIGZvbGxvd2luZyBzaG91bGQgYmUgc3VmZmljaWVudCBmb3IgYW55IFN1bi1iYXNlZCBzZW5zb3JzICovCi0gICAgI2luY2x1ZGUgPC91c3IvcGxhdGZvcm0vc3VuNHUvaW5jbHVkZS9zeXMvZW52Y3RybC5oPgogI2Vsc2UKICAgICAjaW5jbHVkZSA8c2Vuc29ycy9zZW5zb3JzLmg+CiAgICAgI2RlZmluZSBDT05GSUdfRklMRV9OQU1FICIvZXRjL3NlbnNvcnMuY29uZiIKQEAgLTEzMSw0MSArMTM2LDQxIEBACiAgICAgICogbWFnaWMgbnVtYmVyICAgICAgICAsIHZhcmlhYmxlIHR5cGUgLCByby9ydyAsIGNhbGxiYWNrIGZuICAsIEwsIG9pZHN1ZmZpeCAKICAgICAgKi8KICNkZWZpbmUgICBMTVRFTVBTRU5TT1JTSU5ERVggICAgMwotICAgIHtMTVRFTVBTRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7MiwgMSwgMX19LAorICAgIHtMTVRFTVBTRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7MiwgMSwgMX19LAogI2RlZmluZSAgIExNVEVNUFNFTlNPUlNERVZJQ0UgICA0Ci0gICAge0xNVEVNUFNFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHsyLCAxLCAyfX0sCisgICAge0xNVEVNUFNFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHsyLCAxLCAyfX0sCiAjZGVmaW5lICAgTE1URU1QU0VOU09SU1ZBTFVFICAgIDUKLSAgICB7TE1URU1QU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHsyLCAxLCAzfX0sCisgICAge0xNVEVNUFNFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7MiwgMSwgM319LAogI2RlZmluZSAgIExNRkFOU0VOU09SU0lOREVYICAgICA4Ci0gICAge0xNRkFOU0VOU09SU0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezMsIDEsIDF9fSwKKyAgICB7TE1GQU5TRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7MywgMSwgMX19LAogI2RlZmluZSAgIExNRkFOU0VOU09SU0RFVklDRSAgICA5Ci0gICAge0xNRkFOU0VOU09SU0RFVklDRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezMsIDEsIDJ9fSwKKyAgICB7TE1GQU5TRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7MywgMSwgMn19LAogI2RlZmluZSAgIExNRkFOU0VOU09SU1ZBTFVFICAgICAxMAotICAgIHtMTUZBTlNFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7MywgMSwgM319LAorICAgIHtMTUZBTlNFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7MywgMSwgM319LAogI2RlZmluZSAgIExNVk9MVFNFTlNPUlNJTkRFWCAgICAxMwotICAgIHtMTVZPTFRTRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7NCwgMSwgMX19LAorICAgIHtMTVZPTFRTRU5TT1JTSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7NCwgMSwgMX19LAogI2RlZmluZSAgIExNVk9MVFNFTlNPUlNERVZJQ0UgICAxNAotICAgIHtMTVZPTFRTRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7NCwgMSwgMn19LAorICAgIHtMTVZPTFRTRU5TT1JTREVWSUNFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLCB7NCwgMSwgMn19LAogI2RlZmluZSAgIExNVk9MVFNFTlNPUlNWQUxVRSAgICAxNQotICAgIHtMTVZPTFRTRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgUk9OTFksIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywKLSAgICAgezQsIDEsIDN9fSwKKyAgICB7TE1WT0xUU0VOU09SU1ZBTFVFLCBBU05fR0FVR0UsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHs0LCAxLCAzfX0sCiAjZGVmaW5lICAgTE1NSVNDU0VOU09SU0lOREVYICAgIDE4Ci0gICAge0xNTUlTQ1NFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHs1LCAxLCAxfX0sCisgICAge0xNTUlTQ1NFTlNPUlNJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHs1LCAxLCAxfX0sCiAjZGVmaW5lICAgTE1NSVNDU0VOU09SU0RFVklDRSAgIDE5Ci0gICAge0xNTUlTQ1NFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG1TZW5zb3JzVGFibGUsIDMsCi0gICAgIHs1LCAxLCAyfX0sCisgICAge0xNTUlTQ1NFTlNPUlNERVZJQ0UsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICB2YXJfbG1TZW5zb3JzVGFibGUsIDMsIHs1LCAxLCAyfX0sCiAjZGVmaW5lICAgTE1NSVNDU0VOU09SU1ZBTFVFICAgIDIwCi0gICAge0xNTUlTQ1NFTlNPUlNWQUxVRSwgQVNOX0dBVUdFLCBST05MWSwgdmFyX2xtU2Vuc29yc1RhYmxlLCAzLAotICAgICB7NSwgMSwgM319LAorICAgIHtMTU1JU0NTRU5TT1JTVkFMVUUsIEFTTl9HQVVHRSwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgIHZhcl9sbVNlbnNvcnNUYWJsZSwgMywgezUsIDEsIDN9fSwKIH07CiAKIHR5cGVkZWYgc3RydWN0IHsKQEAgLTI0Nyw3ICsyNTIsNyBAQAogICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIHZhcl9sZW4sIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCkKIHsKICAgICBzdGF0aWMgbG9uZyAgICAgbG9uZ19yZXQ7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgc3RyaW5nW1NQUklOVF9NQVhfTEVOXTsKKyAgICBzdGF0aWMgY2hhciAgICAgc3RyaW5nW1NQUklOVF9NQVhfTEVOXTsKIAogICAgIGludCAgICAgICAgICAgICBzX2luZGV4OwogICAgIGludCAgICAgICAgICAgICBzX3R5cGUgPSAtMTsKQEAgLTM3OSw5ICszODQsOSBAQAogICAgIH0KIAogICAgIF9zZW5zb3JfbG9hZCh0KTsgLyogSSdsbCBsZXQgdGhlIGxpbnV4IHBlb3BsZSBkZWNpZGUgd2hldGhlciB0aGV5IHdhbnQgdG8gbG9hZCByaWdodCBhd2F5ICovCitsZWF2aW5nOgogI2VuZGlmIC8qIG5vdCBzb2xhcmlzMiAqLwogCi1sZWF2aW5nOgogICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgIjw9IHNlbnNvcl9pbml0XG4iKSk7CiAgICAgcmV0dXJuIHJlczsKIH0KQEAgLTQxNSw3ICs0MjAsNyBAQAogICAgdGhlIHNjYWxlIHZhcmlhYmxlIGhhbmRsZXMgbWluaVZvbHRzICovCiAKIHN0YXRpYyBpbnQKLXJlYWRfbnVtX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNoYXIgKnByb3AgLGludCBzY2FsZSwgaW50ICp2YWx1ZSkKK3JlYWRfbnVtX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKnByb3AsIGludCBzY2FsZSwgaW50ICp2YWx1ZSkKICB7CiAgIHBpY2xfbm9kZWhkbF90ICBzZW5zb3JoOwogICBwaWNsX3Byb3BpbmZvX3Qgc2Vuc29yX2luZm87CkBAIC00ODEsNyArNDg2LDcgQEAKIH0gLyogZW5kIG9mIHJlYWRfbnVtX3NlbnNvcigpICovCiAKIHN0YXRpYyBpbnQKLXJlYWRfZW51bV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLCBjaGFyICoqb3B0aW9ucywgdV9pbnQgKnZhbHVlKQorcmVhZF9lbnVtX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsIGNvbnN0IGNoYXIgKipvcHRpb25zLCB1X2ludCAqdmFsdWUpCiB7CiAgIHBpY2xfbm9kZWhkbF90ICBzZW5zb3JoOwogICBwaWNsX3Byb3BpbmZvX3Qgc2Vuc29yX2luZm87CkBAIC01MjYsMTAgKzUzMSwxMCBAQAogCiAvKiBzY2FsZSB2YXJpYWJsZSBoYW5kbGVzIG1pbmlWb2x0cyovCiAgCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19udW1fc2Vuc29yKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgCi0gICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSwgCi0gICAgICAgICAgICAgICAgICBjaGFyIHByb3B2YWxbUElDTF9QUk9QTkFNRUxFTl9NQVhdLCBpbnQgdHlwLCBpbnQgc2NhbGUpCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSwgCisgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3B2YWxbUElDTF9QUk9QTkFNRUxFTl9NQVhdLCBpbnQgdHlwLCBpbnQgc2NhbGUpCiB7CiAgIGludCB2YWx1ZSA9IDA7CiAgIHBpY2xfZXJybm9fdCBlcnJvcl9jb2RlOwpAQCAtNTUzLDEwICs1NTgsMTAgQEAKICAgfQogfSAvKiBlbmQgcHJvY2Vzc19udW1fc2Vuc29yKCkgKi8KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfZW51bV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLCAKLSAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdLCAKLSAgICAgICAgICAgICAgICAgIGludCB0eXAsIGNoYXIgKipvcHRpb25zKQorICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0sIAorICAgICAgICAgICAgICAgICAgaW50IHR5cCwgY29uc3QgY2hhciAqKm9wdGlvbnMpCiB7CiAgIGludCB2YWx1ZSA9IDA7CiAgIHBpY2xfZXJybm9fdCBlcnJvcl9jb2RlOwpAQCAtNTgzLDY5ICs1ODgsNjkgQEAKIC8qIFRoZSBmb2xsb3dpbmcgYXJlIG1vZHVsZXMgZm9yIGRlYWxpbmcgd2l0aCBpbmRpdmlkdWFsIHNlbnNvcnMgdHlwZXMuCiAgICBUaGV5IGNhbGwgdGhlIGdlbmVyaWMgbW9kdWxlcyBhYm92ZS4gICovCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX2luZGl2aWR1YWxfZmFuKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwgCi0gICAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogICBwcm9jZXNzX251bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgIkF0b0RTZW5zb3JWYWx1ZSIsIEZBTl9UWVBFLCAxKTsKIH0KIAogCi1zdGF0aWMgaW50CitzdGF0aWMgdm9pZAogcHJvY2Vzc19uZXd0eXBlX2ZhbihwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogICBwcm9jZXNzX251bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgIlNwZWVkIiwgRkFOX1RZUEUsIDEpOwogfQogCiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX3RlbXBlcmF0dXJlX3NlbnNvcihwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAgIHByb2Nlc3NfbnVtX3NlbnNvcihjaGlsZGgsIHByb3BuYW1lLCAiVGVtcGVyYXR1cmUiLCBURU1QX1RZUEUsIDEwMDApOwogfSAvKiBNSUIgYXNrcyBmb3IgbUMgKi8KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3Nfdm9sdGFnZV9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogICBwcm9jZXNzX251bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgIlZvbHRhZ2UiLCBWT0xUX1RZUEUsIDEwMDApOwogfSAvKiBNSUIgYXNrcyBmb3IgbVYgKi8KIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3NfZGlnaXRhbF9zZW5zb3IocGljbF9ub2RlaGRsX3QgY2hpbGRoLAotICAgICAgICAgICAgICAgICAgICAgIGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgcHJvcG5hbWVbUElDTF9QUk9QTkFNRUxFTl9NQVhdKQogewogICBwcm9jZXNzX251bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgIkF0b0RTZW5zb3JWYWx1ZSIsIFZPTFRfVFlQRSwgMSk7CiB9CiAKIAotc3RhdGljIGludAorc3RhdGljIHZvaWQKIHByb2Nlc3Nfc3dpdGNoKHBpY2xfbm9kZWhkbF90IGNoaWxkaCwKLSAgICAgICAgICAgICAgICAgICBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKKyAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIHByb3BuYW1lW1BJQ0xfUFJPUE5BTUVMRU5fTUFYXSkKIHsKIAotICBjaGFyICpzZXR0aW5nc1tdPXsiT0ZGIiwiT04iLCJOT1JNQUwiLCJMT0NLRUQiLCJVTktOT1dOIiwKKyAgY29uc3QgY2hhciAqc2V0dGluZ3NbXT17Ik9GRiIsIk9OIiwiTk9STUFMIiwiTE9DS0VEIiwiVU5LTk9XTiIsCiAgICAgICAgICAgICAgICAgICAgIkRJQUciLCJTRUNVUkUiLE5VTEx9OwogCiAgIHByb2Nlc3NfZW51bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgTUlTQ19UWVBFLCBzZXR0aW5ncyk7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX2xlZChwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7CiAKLSAgY2hhciAqc2V0dGluZ3NbXT17Ik9GRiIsIk9OIiwiQkxJTksiLE5VTEx9OworICBjb25zdCBjaGFyICpzZXR0aW5nc1tdPXsiT0ZGIiwiT04iLCJCTElOSyIsTlVMTH07CiAgIHByb2Nlc3NfZW51bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgTUlTQ19UWVBFLCBzZXR0aW5ncyk7CiB9CiAKLXN0YXRpYyBpbnQKK3N0YXRpYyB2b2lkCiBwcm9jZXNzX2kyYyhwaWNsX25vZGVoZGxfdCBjaGlsZGgsCi0gICAgICAgICAgICAgICAgICAgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBwcm9wbmFtZVtQSUNMX1BST1BOQU1FTEVOX01BWF0pCiB7Ci0gIGNoYXIgKnNldHRpbmdzW109eyJPSyIsTlVMTH07CisgIGNvbnN0IGNoYXIgKnNldHRpbmdzW109eyJPSyIsTlVMTH07CiAgIHByb2Nlc3NfZW51bV9zZW5zb3IoY2hpbGRoLCBwcm9wbmFtZSwgTUlTQ19UWVBFLCBzZXR0aW5ncyk7CiB9CiAKQEAgLTc1Miw2ICs3NTcsMTIgQEAKIHsKICNpZmRlZiBzb2xhcmlzMgogICAgIGludCBpLGo7CisjaWZkZWYgSEFWRV9QSUNMX0ggCisgICAgaW50IGVyX2NvZGU7CisgICAgcGljbF9lcnJub190ICAgICBlcnJvcl9jb2RlOworICAgIGludCBsZXZlbD0wOworICAgIHBpY2xfbm9kZWhkbF90ICByb290aDsKKyNlbHNlCiAgICAgaW50IHR5cDsKICAgICBpbnQgdGVtcD0wOyAvKiBkbyBub3QgcmVzZXQgdGhpcyBsYXRlciwgbW9yZSB0aGFuIG9uZSB0eXAgaGFzIHRlbXBlcmF0dXJlcyovCiAgICAgaW50IG90aGVyPTA7CkBAIC03NjEsNiArNzcyLDcgQEAKICAgICBlbnZjdHJsX2Zhbl90ICpmYW5faW5mbzsKICAgICBlbnZjdHJsX3BzX3QgKnBvd2VyX2luZm87CiAgICAgZW52Y3RybF9lbmNsX3QgKmVuY19pbmZvOworI2VuZGlmCiAKIC8qIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgIlJlYWRpbmcgdGhlIHNlbnNvcnNcbiIpKTsgKi8KIApAQCAtNzc2LDEzICs3ODgsNiBAQAogLyogdHJ5IHBpY2xkIChpZiBzdXBwb3J0ZWQpLCBpZiB0aGF0IGRvZXNuJ3Qgd29yaywgdHJ5IGtzdGF0ICovCiAjaWZkZWYgSEFWRV9QSUNMX0ggCiAKLS8qIHNvbWUgbW9yZSBkZWNsYXJhdGlvbnMgKi8KLQotICAgIGludCBlcl9jb2RlOwotICAgIHBpY2xfZXJybm9fdCAgICAgZXJyb3JfY29kZTsKLSAgICBpbnQgbGV2ZWw9MDsKLSAgICBwaWNsX25vZGVoZGxfdCAgcm9vdGg7Ci0KIGVyX2NvZGUgPSBwaWNsX2luaXRpYWxpemUoKTsKIAogaWYgKGVyX2NvZGUgPT0gUElDTF9TVUNDRVNTKSB7CkBAIC04MDksNyArODE0LDcgQEAKIAogfSAvKmVuZCBlbHNlIHBpY2xfaW5pdGlhbGl6ZSAqLwogCi0jZW5kaWYgIC8qIGVuZCBvZiBwaWNsZCBzZWN0aW9uICovCisjZWxzZSAgLyogZW5kIG9mIHBpY2xkIHNlY3Rpb24gKi8KIC8qIGluaXRpYWxpemUga3N0YXQgKi8KIAoga2MgPSBrc3RhdF9vcGVuKCk7CkBAIC05MjMsNyArOTI4LDcgQEAKICAgICAgICAgICAgICAgICAgICB0ZW1wKys7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgInVua25vd24gZWxlbWVudCBpbnN0YW5jZSAmZCB0eXBlICZkIHZhbHVlICVkXG4iLAorICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgidWNkLXNubXAvbG1TZW5zb3JzIiwgInVua25vd24gZWxlbWVudCBpbnN0YW5jZSAlZCB0eXBlICVkIHZhbHVlICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlbmNfaW5mby0+aW5zdGFuY2UsIGVuY19pbmZvLT50eXBlLCBlbmNfaW5mby0+dmFsdWUpKTsKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0gLyogZW5kIHN3aXRjaCAqLwpAQCAtOTM3LDE0ICs5NDIsMTcgQEAKICAgICBrc3RhdF9jbG9zZShrYyk7CiAKIH0gLyogZW5kIGVsc2Uga3N0YXQgKi8KKyNlbmRpZgorCiAjZWxzZSAvKiBlbmQgc29sYXJpczIgb25seSBpZS4gaWZkZWYgZXZlcnl0aGluZyBlbHNlICovCiAKICAgICBjb25zdCBzZW5zb3JzX2NoaXBfbmFtZSAqY2hpcDsKICAgICBjb25zdCBzZW5zb3JzX2ZlYXR1cmVfZGF0YSAqZGF0YTsKICAgICBpbnQgICAgICAgICAgICAgY2hpcF9uciA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKICAgICB1bnNpZ25lZCBpbnQgICAgaSA9IDA7CiAKKyAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICI9PiBzZW5zb3JfbG9hZFxuIikpOworCiAgICAgZm9yIChpID0gMDsgaSA8IE5fVFlQRVM7IGkrKykKICAgICB7CiAgICAgICAgIHNlbnNvcl9hcnJheVtpXS5uID0gMDsKQEAgLTk1Niw3ICs5NjQsNyBAQAogICAgICAgICB7CiAgICAgICAgICAgIC8qIENvbnRpbnVpbmcgd291bGQgYmUgdW5zYWZlICovCiAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW5ub3QgbWFsbG9jIHNlbnNvciBhcnJheSEiKTsgCi0gICAgICAgICAgIHJldHVybiAocmMgPSAxKTsKKyAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0gLyogZW5kIGlmICovCiAgICAgICAgIHNlbnNvcl9hcnJheVtpXS5jdXJyZW50X2xlbiA9IERFRkFVTFRfU0VOU09SUzsKICAgICB9IC8qIGVuZCBmb3IgKi8KQEAgLTk3NCw3ICs5ODIsNyBAQAogICAgICAgICAgICAgICAgICFzZW5zb3JzX2dldF9sYWJlbCgqY2hpcCwgZGF0YS0+bnVtYmVyLCAmbGFiZWwpICYmCiAgICAgICAgICAgICAgICAgIXNlbnNvcnNfZ2V0X2ZlYXR1cmUoKmNoaXAsIGRhdGEtPm51bWJlciwgJnZhbCkpIHsKICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgdHlwZSA9IC0xOwotICAgICAgICAgICAgICAgIGZsb2F0ICAgICAgICAgICBtdWw7CisgICAgICAgICAgICAgICAgZmxvYXQgICAgICAgICAgIG11bCA9IDA7CiAgICAgICAgICAgICAgICAgX3NlbnNvcl9hcnJheSAgKmFycmF5OwogCiAgICAgICAgICAgICAgICAgLyogVGhlIGxhYmVsLCBhcyBkZXRlcm1pbmVkIGZvciBhIGdpdmVuIGNoaXAgaW4gc2Vuc29ycy5jb25mLApAQCAtMTAxNiwxNCArMTAyNCwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZShsYWJlbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYWJlbCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgICAgIH0gLyogZW5kIGlmIGxhYmVsICovCi0gICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAocmM9MSk7CisgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgICAgICAgICAgICB9IC8qIGVuZCBpZiBhcnJheS0+c2Vuc29yICovCiAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5jdXJyZW50X2xlbiA9IG5ld19zaXplIC8gc2l6ZW9mKF9zZW5zb3IpOwotICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICJ0eXBlICMlZCBpbmNyZWFzZWQgdG8gJWQgZWxlbWVudHNcbiIsIHR5cGUsIGFycmF5LT5jdXJyZW50X2xlbikpOworICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICJ0eXBlICMlZCBpbmNyZWFzZWQgdG8gJWQgZWxlbWVudHNcbiIsIHR5cGUsIChpbnQpYXJyYXktPmN1cnJlbnRfbGVuKSk7CiAgICAgICAgICAgICAgICAgfSAvKiBlbmQgaWYgYXJyYXktPmN1cnJlbnQgKi8KICAgICAgICAgICAgICAgICBzdHJsY3B5KGFycmF5LT5zZW5zb3JbYXJyYXktPm5dLm5hbWUsIGxhYmVsLCBNQVhfTkFNRSk7CiAgICAgICAgICAgICAgICAgYXJyYXktPnNlbnNvclthcnJheS0+bl0udmFsdWUgPSAoaW50KSAodmFsICogbXVsKTsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vuc29ycyIsInNlbnNvciAlZCwgdmFsdWUgJWRcbiIsCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlbnNvcnMiLCJzZW5zb3IgJXMsIHZhbHVlICVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFycmF5LT5zZW5zb3JbYXJyYXktPm5dLm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXktPnNlbnNvclthcnJheS0+bl0udmFsdWUpKTsKICAgICAgICAgICAgICAgICBhcnJheS0+bisrOwpAQCAtMTAzNCwxMCArMTA0MiwxMSBAQAogCSAgICB9IC8qIGVuZCBpZiBsYWJlbCAqLwogICAgICAgICB9IC8qIGVuZCB3aGlsZSBkYXRhICovCiAgICAgfSAvKiBlbmQgd2hpbGUgY2hpcCAqLwotICAgIHJldHVybiByYzsKKyAgICBERUJVR01TRygoInVjZC1zbm1wL2xtU2Vuc29ycyIsICI8PSBzZW5zb3JfbG9hZFxuIikpOwogI2VuZGlmICAvKiBlbmQgZWxzZSBpZS4gaWZkZWYgZXZlcnl0aGluZyBlbHNlICovCiAgICAgLyogVXBkYXRlIHRoZSB0aW1lc3RhbXAgYWZ0ZXIgYSBsb2FkLiAqLwogICAgIHRpbWVzdGFtcCA9IHQ7CisgICAgcmV0dXJuIDA7CiB9CiAKICNpZm5kZWYgc29sYXJpczIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtU2Vuc29ycy5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmgKaW5kZXggYWZlZDZmYS4uOTIwOThhNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1TZW5zb3JzLmgKQEAgLTYsNyArNiw3IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9MTVNFTlNPUlNfSAogI2RlZmluZSBfTUlCR1JPVVBfTE1TRU5TT1JTX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIGNvbmZpZ19hZGRfbWliKExNLVNFTlNPUlMtTUlCKQogCiAgICAgIHZvaWQgICAgICAgICAgICBpbml0X2xtU2Vuc29ycyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG1zZW5zb3JzTWliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjU1Nzc5NgotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5jCkBAIC0wLDAgKzEsMjA2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2hhcmR3YXJlL3NlbnNvcnMuaD4KKyNpbmNsdWRlICJoYXJkd2FyZS9zZW5zb3JzL2h3X3NlbnNvcnMuaCIKKyNpbmNsdWRlICJ1Y2Qtc25tcC9sbXNlbnNvcnNNaWIuaCIKKworbmV0c25tcF9jb250YWluZXIgKnNlbnNvckNvbnRhaW5lciA9IE5VTEw7CisKK3ZvaWQgaW5pdGlhbGl6ZV9sbVNlbnNvcnNUYWJsZShjb25zdCBjaGFyICp0YWJsZU5hbWUsIGNvbnN0IG9pZCAqdGFibGVPSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgKmZpbHRlciwgaW50IG11bHQgKTsKKworaW50IF9zZW5zb3JfZmlsdGVyX3RlbXAoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICk7CitpbnQgX3NlbnNvcl9maWx0ZXJfZmFuKCAgbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKTsKK2ludCBfc2Vuc29yX2ZpbHRlcl92b2x0KCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApOworaW50IF9zZW5zb3JfZmlsdGVyX21pc2MoIG5ldHNubXBfY29udGFpbmVyICpjLCBjb25zdCB2b2lkICp2ICk7CisKK3N0YXRpYyBjb25zdCBvaWQgbG1UZW1wU2Vuc29yc1RhYmxlX29pZFtdICAgPSB7MSwzLDYsMSw0LDEsMjAyMSwxMywxNiwyfTsKK3N0YXRpYyBjb25zdCBvaWQgbG1GYW5TZW5zb3JzVGFibGVfb2lkW10gICAgPSB7MSwzLDYsMSw0LDEsMjAyMSwxMywxNiwzfTsKK3N0YXRpYyBjb25zdCBvaWQgbG1Wb2x0U2Vuc29yc1RhYmxlX29pZFtdICAgPSB7MSwzLDYsMSw0LDEsMjAyMSwxMywxNiw0fTsKK3N0YXRpYyBjb25zdCBvaWQgbG1NaXNjU2Vuc29yc1RhYmxlX29pZFtdICAgPSB7MSwzLDYsMSw0LDEsMjAyMSwxMywxNiw1fTsKKyAgICAgICAgICAgIC8qIEFsbCB0aGUgdGFibGVzIGhhdmUgdGhlIHNhbWUgbGVuZ3RoIHJvb3QgT0lEICovCitjb25zdCBzaXplX3QgbG1TZW5zb3JzVGFibGVzX29pZF9sZW4gPSBPSURfTEVOR1RIKGxtTWlzY1NlbnNvcnNUYWJsZV9vaWQpOworCisKKy8qIEluaXRpYWxpc2UgdGhlIExNIFNlbnNvcnMgTUlCIG1vZHVsZSAqLwordm9pZAoraW5pdF9sbXNlbnNvcnNNaWIodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidWNkLXNubXAvbG1zZW5zb3JzTWliIiwiSW5pdGlhbGl6aW5nIExNLVNFTlNPUlMtTUlCIHRhYmxlc1xuIikpOworCisgICAgLyogCisgICAgICogSW5pdGlhbGlzZSB0aGUgZm91ciBMTS1TRU5TT1JTLU1JQiB0YWJsZXMKKyAgICAgKgorICAgICAqIFRoZXkgYXJlIGFsbW9zdCBpZGVudGljYWwsIHNvIHdlIGNhbiB1c2UgdGhlIHNhbWUgcmVnaXN0cmF0aW9uIGNvZGUuCisgICAgICovCisgICAgaW5pdGlhbGl6ZV9sbVNlbnNvcnNUYWJsZSggImxtVGVtcFNlbnNvcnNUYWJsZSIsIGxtVGVtcFNlbnNvcnNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfZmlsdGVyX3RlbXAsIDEwMDAgKTsgIC8qIE1JQiBhc2tzIGZvciBtQyAqLworICAgIGluaXRpYWxpemVfbG1TZW5zb3JzVGFibGUoICJsbUZhblNlbnNvcnNUYWJsZSIsICBsbUZhblNlbnNvcnNUYWJsZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zZW5zb3JfZmlsdGVyX2ZhbiwgIDEpOworICAgIGluaXRpYWxpemVfbG1TZW5zb3JzVGFibGUoICJsbVZvbHRTZW5zb3JzVGFibGUiLCBsbVZvbHRTZW5zb3JzVGFibGVfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc2Vuc29yX2ZpbHRlcl92b2x0LCAxMDAwICk7ICAvKiBNSUIgYXNrcyBmb3IgbVYgKi8KKyAgICBpbml0aWFsaXplX2xtU2Vuc29yc1RhYmxlKCAibG1NaXNjU2Vuc29yc1RhYmxlIiwgbG1NaXNjU2Vuc29yc1RhYmxlX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NlbnNvcl9maWx0ZXJfbWlzYywgMSApOworfQorCisvKgorICogQ29tbW9uIGluaXRpYWxpc2F0aW9uIGNvZGUsIHVzZWQgZm9yIHNldHRpbmcgdXAgYWxsIGZvdXIgdGFibGVzCisgKi8KK3ZvaWQKK2luaXRpYWxpemVfbG1TZW5zb3JzVGFibGUoY29uc3QgY2hhciAqdGFibGVOYW1lLCBjb25zdCBvaWQgKnRhYmxlT0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vcCAqZmlsdGVyLCBpbnQgbXVsdCApCit7CisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgbmV0c25tcF9jYWNoZSAgICAgKmNhY2hlOworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisKKyAgICAvKgorICAgICAqIEVuc3VyZSB0aGUgSEFMIHNlbnNvcnMgbW9kdWxlIGhhcyBiZWVuIGluaXRpYWxpc2VkLAorICAgICAqICAgYW5kIHJldHJpZXZlIHRoZSBtYWluIHNlbnNvcnMgY29udGFpbmVyLgorICAgICAqIFRoaXMgdGFibGUgd2lsbCB0aGVuIGJlIHJlZ2lzdGVyZWQgdXNpbmcgYSBmaWx0ZXIgb24gdGhpcyBjb250YWluZXIuCisgICAgICovCisgICAgc2Vuc29yQ29udGFpbmVyID0gZ2V0X3NlbnNvcl9jb250YWluZXIoKTsKKyAgICBpZiAoICFzZW5zb3JDb250YWluZXIgKSB7CisgICAgICAgIGluaXRfaHdfc2Vuc29ycyggKTsKKyAgICAgICAgc2Vuc29yQ29udGFpbmVyID0gZ2V0X3NlbnNvcl9jb250YWluZXIoKTsKKyAgICB9CisgICAgY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgic2Vuc29yVGFibGU6dGFibGVfY29udGFpbmVyIik7CisgICAgY29udGFpbmVyLT5pbnNlcnRfZmlsdGVyID0gZmlsdGVyOworICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleCggc2Vuc29yQ29udGFpbmVyLCBjb250YWluZXIgKTsKKworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgYSBiYXNpYyByZWdpc3RyYXRpb24gc3RydWN0dXJlIGZvciB0aGUgdGFibGUKKyAgICAgKi8KKyAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKKyAgICAgICAgICAgICAgIHRhYmxlTmFtZSwgbG1TZW5zb3JzVGFibGVzX2hhbmRsZXIsCisgICAgICAgICAgICAgICB0YWJsZU9JRCwgIGxtU2Vuc29yc1RhYmxlc19vaWRfbGVuLCBIQU5ETEVSX0NBTl9ST05MWQorICAgICAgICAgICAgICApOworCisgICAgLyoKKyAgICAgKiBSZWdpc3RlciB0aGUgdGFibGUgdXNpbmcgdGhlIGZpbHRlcmVkIGNvbnRhaW5lcgorICAgICAqIEluY2x1ZGUgYW4gaW5kaWNhdG9yIG9mIGFueSBzY2FsaW5nIHRvIGJlIGFwcGxpZWQgdG8gdGhlIHNlbnNvciB2YWx1ZQorICAgICAqLworICAgIHJlZy0+bXlfcmVnX3ZvaWQgPSAodm9pZCAqKSh1aW50cHRyX3QpbXVsdDsKKyAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRiggbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyApOworICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKHRhYmxlX2luZm8sIEFTTl9JTlRFR0VSLCAwKTsKKyAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OX0xNU0VOU09SU19JTkRFWDsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OX0xNU0VOU09SU19WQUxVRTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yZWdpc3RlciggcmVnLCB0YWJsZV9pbmZvLCBjb250YWluZXIsIDAgKTsKKworICAgIC8qCisgICAgICogSWYgdGhlIEhBTCBzZW5zb3JzIG1vZHVsZSB3YXMgY29uZmlndXJlZCBhcyBhbiBvbi1kZW1hbmQgY2FjaGluZworICAgICAqICBtb2R1bGUgKHJhdGhlciB0aGFuIGJlaW5nIGF1dG9tYXRpY2FsbHkgbG9hZGVkIHJlZ3VsYXJseSksCisgICAgICogIHRoZW4gZW5zdXJlIHRoaXMgdGFibGUgbWFrZXMgdXNlIG9mIHRoYXQgY2FjaGUuCisgICAgICovCisgICAgY2FjaGUgPSBnZXRfc2Vuc29yX2NhY2hlKCk7CisgICAgaWYgKCBjYWNoZSApIHsKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldCggY2FjaGUgKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRhYmxlX2NvbnRhaW5lciIpOworICAgIH0KKworfQorCisKKy8qCisgKiAgQ29udGFpbmVyIGZpbHRlcnMgZm9yIHRoZSBmb3VyIHRhYmxlcworICoKKyAqICBVc2VkIHRvIGVuc3VyZSB0aGF0IHNlbnNvciBlbnRyaWVzIGFwcGVhciBpbiB0aGUgYXBwcm9wcmlhdGUgdGFibGUuCisgKi8KK2ludCBfc2Vuc29yX2ZpbHRlcl90ZW1wKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApIHsKKyAgICBjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICpzcCA9IChjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICopdjsKKyAgICAvKiBPbmx5IG1hdGNoZXMgdGVtcGVyYXR1cmUgc2Vuc29ycyAqLworICAgIHJldHVybiAoKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1RFTVBFUkFUVVJFICkgPyAwIDogMSApOworfQorCitpbnQgX3NlbnNvcl9maWx0ZXJfZmFuKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApIHsKKyAgICBjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICpzcCA9IChjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICopdjsKKyAgICAvKiBPbmx5IG1hdGNoZXMgZmFuIHNlbnNvcnMgKi8KKyAgICByZXR1cm4gKCggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9SUE0gKSA/IDAgOiAxICk7Cit9CisKK2ludCBfc2Vuc29yX2ZpbHRlcl92b2x0KCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqdiApIHsKKyAgICBjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICpzcCA9IChjb25zdCBuZXRzbm1wX3NlbnNvcl9pbmZvICopdjsKKyAgICAvKiBPbmx5IG1hdGNoZXMgdm9sdGFnZSBzZW5zb3JzIChBQyBvciBEQykgKi8KKyAgICByZXR1cm4gKCgoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyApIHx8CisgICAgICAgICAgICAgKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfQUMgKSkgPyAwIDogMSApOworfQorCitpbnQgX3NlbnNvcl9maWx0ZXJfbWlzYyggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKnYgKSB7CisgICAgY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqc3AgPSAoY29uc3QgbmV0c25tcF9zZW5zb3JfaW5mbyAqKXY7CisgICAgLyogTWF0Y2hlcyBldmVyeXRoaW5nIGV4Y2VwdCB0ZW1wZXJhdHVyZSwgZmFuIG9yIHZvbHRhZ2Ugc2Vuc29ycyAqLworICAgIHJldHVybiAoKCggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSApIHx8CisgICAgICAgICAgICAgKCBzcC0+dHlwZSA9PSBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSAgICAgICAgICkgfHwKKyAgICAgICAgICAgICAoIHNwLT50eXBlID09IE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9EQyAgKSB8fAorICAgICAgICAgICAgICggc3AtPnR5cGUgPT0gTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xUQUdFX0FDICApKSA/IDEgOiAwICk7Cit9CisKKworLyoKKyAqIEhhbmRsZSByZXF1ZXN0cyBmb3IgYW55IG9mIHRoZSBmb3VyIGxtWHh4eFNlbnNvcnNUYWJsZXMgCisgKgorICogVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIGFsbCB0aGUgdGFibGUgc2hhcmUgdGhlCisgKiAgc2FtZSBzdHJ1Y3R1cmUgYW5kIGJlaGF2aW91ci4KKyAqLworaW50CitsbVNlbnNvcnNUYWJsZXNfaGFuZGxlcigKKyAgICBuZXRzbm1wX21pYl9oYW5kbGVyICAgICAgICAgICAgICAgKmhhbmRsZXIsCisgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAgICpyZWdpbmZvLAorICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICAgICAgICAqcmVxaW5mbywKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICAgICAgKnJlcXVlc3RzKSB7CisKKyAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAqcmVxdWVzdDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbzsKKyAgICBuZXRzbm1wX3NlbnNvcl9pbmZvICAgICAgICAqc2Vuc29yX2luZm87CisgICAgaW50IG11bHQgID0gKHVpbnRwdHJfdClyZWdpbmZvLT5teV9yZWdfdm9pZDsKKworICAgIERFQlVHTVNHVEwoKCAidWNkLXNubXAvbG1zZW5zb3JzTWliIiwibG1TZW5zb3JzVGFibGVzX2hhbmRsZXIgLSByb290OiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJ1Y2Qtc25tcC9sbXNlbnNvcnNNaWIiLCByZWdpbmZvLT5yb290b2lkLCByZWdpbmZvLT5yb290b2lkX2xlbikpOworICAgIERFQlVHTVNHKCggICAidWNkLXNubXAvbG1zZW5zb3JzTWliIiwiLCBtb2RlICVkXG4iLCByZXFpbmZvLT5tb2RlICkpOworICAgIC8qCisgICAgICogVGhpcyBpcyBhIHJlYWQtb25seSB0YWJsZSwgc28gd2Ugb25seSBuZWVkIHRvIGhhbmRsZSBHRVQgcmVxdWVzdHMuCisgICAgICogICAgKFRoZSBjb250YWluZXIgaGVscGVyIGNvbnZlcnRzIEdFVE5FWFQtPkdFVCByZXF1ZXN0cyBhdXRvbWF0aWNhbGx5KS4KKyAgICAgKi8KKyAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgc2Vuc29yX2luZm8gPSAobmV0c25tcF9zZW5zb3JfaW5mbyAqKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICggIXNlbnNvcl9pbmZvICkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgCisgICAgICAgICAgICB0YWJsZV9pbmZvICAgPSAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgY2FzZSBDT0xVTU5fTE1TRU5TT1JTX0lOREVYOgorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JfaW5mby0+aWR4Lm9pZHNbMF0pOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBDT0xVTU5fTE1TRU5TT1JTX0RFVklDRToKKyAgICAgICAgICAgICAgICBpZiAoIHNlbnNvcl9pbmZvLT5kZXNjclswXSAhPSAnXDAnICkgeworICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JfaW5mby0+ZGVzY3IsIHN0cmxlbihzZW5zb3JfaW5mby0+ZGVzY3IpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZW5zb3JfaW5mby0+bmFtZSwgIHN0cmxlbihzZW5zb3JfaW5mby0+bmFtZSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OX0xNU0VOU09SU19WQUxVRToKKyAgICAgICAgICAgICAgICAvKiBNdWx0aXBseSB0aGUgdmFsdWUgYnkgdGhlIGFwcHJvcHJpYXRlIHNjYWxpbmcgZmFjdG9yIGZvciB0aGlzIHRhYmxlICovCisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX0dBVUdFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW50KShtdWx0KnNlbnNvcl9pbmZvLT52YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICB9CisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xtc2Vuc29yc01pYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkODVkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sbXNlbnNvcnNNaWIuaApAQCAtMCwwICsxLDIzIEBACisjaWZuZGVmIExNX1NFTlNPUlNfTUlCX0gKKyNkZWZpbmUgTE1fU0VOU09SU19NSUJfSAorCitjb25maWdfcmVxdWlyZShoYXJkd2FyZS9zZW5zb3JzKQorY29uZmlnX2FkZF9taWIoTE0tU0VOU09SUy1NSUIpCisKKy8qIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwordm9pZCBpbml0X2xtc2Vuc29yc01pYih2b2lkKTsKKworLyoKKyAqIEhhbmRsZXIgYW5kIENvbHVtbiBkZWZpbml0aW9ucyBmb3IgbG1YeHh4U2Vuc29yc1RhYmxlCisgKgorICogTm90ZSB0aGF0IHRoZSBzYW1lIGhhbmRsZXIgKGFuZCBoZW5jZSB0aGUgc2FtZQorICogIGNvbHVtbiBpZGVudGlmaWVycykgYXJlIHVzZWQgZm9yIGFsbCBmb3VyIHRhYmxlcy4KKyAqIFRoaXMgaXMgcG9zc2libGUgYmVjYXVzZSBhbGwgdGhlIHRhYmxlIHNoYXJlIHRoZQorICogIHNhbWUgc3RydWN0dXJlIGFuZCBiZWhhdmlvdXIuCisgKi8KK05ldHNubXBfTm9kZV9IYW5kbGVyIGxtU2Vuc29yc1RhYmxlc19oYW5kbGVyOworI2RlZmluZSBDT0xVTU5fTE1TRU5TT1JTX0lOREVYCQkxCisjZGVmaW5lIENPTFVNTl9MTVNFTlNPUlNfREVWSUNFCQkyCisjZGVmaW5lIENPTFVNTl9MTVNFTlNPUlNfVkFMVUUJCTMKKworI2VuZGlmIC8qIExNX1NFTlNPUlNfTUlCX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuYwppbmRleCBjMzA2NTA2Li4zMTc4MzMwIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5jCkBAIC05OSwxMSArOTksNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xMTIsMTYgKzEwOCwxNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZmRlZiBkeW5peAogI2luY2x1ZGUgPHN5cy9tY192bXBhcmFtLmg+CiAjZW5kaWYKICNpZiBkZWZpbmVkKGhwdXgxMCkgfHwgZGVmaW5lZChocHV4MTEpCiAjaW5jbHVkZSA8c3lzL3BzdGF0Lmg+CiAjZW5kaWYKLSNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2lmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNlbmRpZgogI2lmIEhBVkVfU1lTX1NZU0dFVF9ICkBAIC0xMzQsMTAgKzEzMCwyMiBAQAogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAibG9hZGF2ZS5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaCIKICNpbmNsdWRlICJrZXJuZWwuaCIKIAotZG91YmxlICAgICAgICAgIG1heGxvYWRbM107CitzdGF0aWMgZG91YmxlIG1heGxvYWRbM107CitzdGF0aWMgaW50IGxhQ29uZmlnU2V0ID0gMDsKKworc3RhdGljIGludAorbG9hZGF2ZV9zdG9yZV9jb25maWcoaW50IGEsIGludCBiLCB2b2lkICpjLCB2b2lkICpkKQoreworICAgIGNoYXIgbGluZVtTTk1QX01BWEJVRl9TTUFMTF07CisgICAgaWYgKGxhQ29uZmlnU2V0ID4gMCkgeworICAgICAgICBzbnByaW50ZihsaW5lLCBTTk1QX01BWEJVRl9TTUFMTCwgInBsb2FkICUuMDJmICUuMDJmICUuMDJmIiwgbWF4bG9hZFswXSwgbWF4bG9hZFsxXSwgbWF4bG9hZFsyXSk7CisgICAgICAgIHNubXBkX3N0b3JlX2NvbmZpZyhsaW5lKTsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KIAogdm9pZAogaW5pdF9sb2FkYXZlKHZvaWQpCkBAIC0xNDgsMjQgKzE1NiwyNCBAQAogICAgICAqIGluZm9ybWF0aW9uIGF0IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9sb2FkYXZlX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge0xPQURBVkUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0xPQURBVkV9fSwKLSAgICAgICAge0xPQURNQVhWQUwsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0xPQURNQVhWQUx9fSwKLSAgICAgICAge0xPQURBVkVJTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwKLSAgICAgICAgIHtMT0FEQVZFSU5UfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TE9BREFWRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7TE9BREFWRX19LAorICAgICAgICB7TE9BRE1BWFZBTCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbG9hZGF2ZSwgMSwge0xPQURNQVhWQUx9fSwKKyAgICAgICAge0xPQURBVkVJTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtMT0FEQVZFSU5UfX0sCiAjaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCi0gICAgICAgIHtMT0FEQVZFRkxPQVQsIEFTTl9PUEFRVUVfRkxPQVQsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLAotICAgICAgICAge0xPQURBVkVGTE9BVH19LAorICAgICAgICB7TE9BREFWRUZMT0FULCBBU05fT1BBUVVFX0ZMT0FULCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsIHtMT0FEQVZFRkxPQVR9fSwKICNlbmRpZgotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX2xvYWRhdmUsIDEsCi0gICAgICAgICB7RVJST1JNU0d9fQorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpAQCAtMTgxLDkgKzE4OSwyMiBAQAogICAgIFJFR0lTVEVSX01JQigidWNkLXNubXAvbG9hZGF2ZSIsIGV4dGVuc2libGVfbG9hZGF2ZV92YXJpYWJsZXMsCiAgICAgICAgICAgICAgICAgIHZhcmlhYmxlMiwgbG9hZGF2ZV92YXJpYWJsZXNfb2lkKTsKIAorICAgIGxhQ29uZmlnU2V0ID0gMDsKKwogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJsb2FkIiwgbG9hZGF2ZV9wYXJzZV9jb25maWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGF2ZV9mcmVlX2NvbmZpZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibWF4MSBbbWF4NV0gW21heDE1XSIpOworCisgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInBsb2FkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkYXZlX3BhcnNlX2NvbmZpZywgTlVMTCwgTlVMTCk7CisKKworICAgIC8qCisgICAgICogd2UgbmVlZCB0byBiZSBjYWxsZWQgYmFjayBsYXRlcgorICAgICAqLworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLCBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2FkYXZlX3N0b3JlX2NvbmZpZywgTlVMTCk7CisKIH0KIAogdm9pZApAQCAtMTkxLDYgKzIxMiwyNSBAQAogewogICAgIGludCAgICAgICAgICAgICBpOwogCisgICAgaWYgKHN0cmNtcCh0b2tlbiwgInBsb2FkIikgPT0gMCkgeworICAgICAgICBpZiAobGFDb25maWdTZXQgPCAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJpZ25vcmluZyBhdHRlbXB0ZWQgb3ZlcnJpZGUgb2YgcmVhZC1vbmx5IGxvYWRcbiIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGFDb25maWdTZXQrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsYUNvbmZpZ1NldCA+IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgImlnbm9yaW5nIGF0dGVtcHRlZCBvdmVycmlkZSBvZiByZWFkLW9ubHkgbG9hZFxuIik7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogRmFsbCB0aHJvdWdoIGFuZCBjb3B5IGluIHRoaXMgdmFsdWUuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfQorICAgICAgICBsYUNvbmZpZ1NldCA9IC0xOworICAgIH0KKwogICAgIGZvciAoaSA9IDA7IGkgPD0gMjsgaSsrKSB7CiAgICAgICAgIGlmIChjcHRyICE9IE5VTEwpCiAgICAgICAgICAgICBtYXhsb2FkW2ldID0gYXRvZihjcHRyKTsKQEAgLTIxOCwxMiArMjU4LDYgQEAKIGludAogdHJ5X2dldGxvYWRhdmcoZG91YmxlICpyX2F2ZSwgc2l6ZV90IHNfYXZlKQogewotI2lmIGRlZmluZWQoSEFWRV9HRVRMT0FEQVZHKSB8fCBkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKHVsdHJpeCkgXAotICAgIHx8IGRlZmluZWQoc3VuKSB8fCBkZWZpbmVkKF9fYWxwaGEpIHx8IGRlZmluZWQoZHluaXgpIFwKLSAgICB8fCAhZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoTkVUU05NUF9DQU5fVVNFX05MSVNUKSBcCi0gICAgICAgJiYgZGVmaW5lZChMT0FEQVZFX1NZTUJPTCkKLSAgICBkb3VibGUgICAgICAgICAqcGF2ZSA9IHJfYXZlOwotI2VuZGlmCiAjaWZuZGVmIEhBVkVfR0VUTE9BREFWRwogI2lmZGVmIEhBVkVfU1lTX0ZJWFBPSU5UX0gKICAgICBmaXggICAgICAgICAgICAgZmF2ZW5ydW5bM107CkBAIC0yMzcsOCArMjcxLDcgQEAKICNkZWZpbmUgRklYX1RPX0RCTChfSU4pICgoKGRvdWJsZSkgX0lOKS8oKGRvdWJsZSkgRlNDQUxFKSkKICNlbmRpZgogI2VuZGlmCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKLSAgICBpbnQgICAgICAgICAgICAgZmF2ZW5ydW5bM107CisjaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIHBlcmZzdGF0X2NwdV90b3RhbF90IGNzOwogI2VuZGlmCiAjaWYgZGVmaW5lZChocHV4MTApIHx8IGRlZmluZWQoaHB1eDExKQpAQCAtMjUxLDE2ICsyODQsMTYgQEAKICNlbmRpZgkvKiAhSEFWRV9HRVRMT0FEQVZHICovCiAKICNpZmRlZiBIQVZFX0dFVExPQURBVkcKLSAgICBpZiAoZ2V0bG9hZGF2ZyhwYXZlLCBzX2F2ZSkgPT0gLTEpCisgICAgaWYgKGdldGxvYWRhdmcocl9hdmUsIHNfYXZlKSA9PSAtMSkKICAgICAgICAgcmV0dXJuICgtMSk7CiAjZWxpZiBkZWZpbmVkKGxpbnV4KQogICAgIHsKICAgICAgICAgRklMRSAgICAgICAgICAgKmluID0gZm9wZW4oIi9wcm9jL2xvYWRhdmciLCAiciIpOwogICAgICAgICBpZiAoIWluKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jL2xvYWRhdmdcbiIpOworICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jL2xvYWRhdmdcbiIpKTsKICAgICAgICAgICAgIHJldHVybiAoLTEpOwogICAgICAgICB9Ci0gICAgICAgIGZzY2FuZihpbiwgIiVsZiAlbGYgJWxmIiwgcGF2ZSwgKHBhdmUgKyAxKSwgKHBhdmUgKyAyKSk7CisgICAgICAgIGZzY2FuZihpbiwgIiVsZiAlbGYgJWxmIiwgcl9hdmUsIChyX2F2ZSArIDEpLCAocl9hdmUgKyAyKSk7CiAgICAgICAgIGZjbG9zZShpbik7CiAgICAgfQogI2VsaWYgKGRlZmluZWQodWx0cml4KSB8fCBkZWZpbmVkKHN1bikgfHwgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKGR5bml4KSkKQEAgLTI2OCwxNCArMzAxLDE0IEBACiAgICAgICAgIDApCiAgICAgICAgIHJldHVybiAoLTEpOwogICAgIGZvciAoaSA9IDA7IGkgPCBzX2F2ZTsgaSsrKQotICAgICAgICAqKHBhdmUgKyBpKSA9IEZJWF9UT19EQkwoZmF2ZW5ydW5baV0pOworICAgICAgICAqKHJfYXZlICsgaSkgPSBGSVhfVE9fREJMKGZhdmVucnVuW2ldKTsKICNlbGlmIGRlZmluZWQoaHB1eDEwKSB8fCBkZWZpbmVkKGhwdXgxMSkKICAgICBpZiAocHN0YXRfZ2V0ZHluYW1pYygmcHN0X2J1Ziwgc2l6ZW9mKHN0cnVjdCBwc3RfZHluYW1pYyksIDEsIDApIDwgMCkKICAgICAgICAgcmV0dXJuKC0xKTsKICAgICByX2F2ZVswXSA9IHBzdF9idWYucHNkX2F2Z18xX21pbjsKICAgICByX2F2ZVsxXSA9IHBzdF9idWYucHNkX2F2Z181X21pbjsKICAgICByX2F2ZVsyXSA9IHBzdF9idWYucHNkX2F2Z18xNV9taW47Ci0jZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KQorI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikgfHwgZGVmaW5lZChhaXg3KQogICAgIGlmKHBlcmZzdGF0X2NwdV90b3RhbCgocGVyZnN0YXRfaWRfdCAqKU5VTEwsICZjcywgc2l6ZW9mKHBlcmZzdGF0X2NwdV90b3RhbF90KSwgMSkgPiAwKSB7CiAgICAgICAgIHJfYXZlWzBdID0gY3MubG9hZGF2Z1swXSAvIDY1NTM2LjA7CiAgICAgICAgIHJfYXZlWzFdID0gY3MubG9hZGF2Z1sxXSAvIDY1NTM2LjA7CkBAIC0yOTAsNyArMzIzLDcgQEAKICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvbG9hZGF2ZSIsICJpcml4NjogJWQgJWQgJWRcbiIsIGZhdmVucnVuWzBdLCBmYXZlbnJ1blsxXSwgZmF2ZW5ydW5bMl0pKTsKICNlbGlmICFkZWZpbmVkKGN5Z3dpbikKICNpZiBkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9OTElTVCkgJiYgZGVmaW5lZChMT0FEQVZFX1NZTUJPTCkKLSAgICBpZiAoYXV0b19ubGlzdChMT0FEQVZFX1NZTUJPTCwgKGNoYXIgKikgcGF2ZSwgc2l6ZW9mKGRvdWJsZSkgKiBzX2F2ZSkKKyAgICBpZiAoYXV0b19ubGlzdChMT0FEQVZFX1NZTUJPTCwgKGNoYXIgKikgcl9hdmUsIHNpemVvZihkb3VibGUpICogc19hdmUpCiAgICAgICAgID09IDApCiAjZW5kaWYKICAgICAgICAgcmV0dXJuICgtMSk7CkBAIC0zMTYsNiArMzQ5LDcwIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQKK3dyaXRlX2xhQ29uZmlnKGludCBhY3Rpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB2YXJfdmFsX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJfdmFsX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKyAgICBzdGF0aWMgZG91YmxlIGxhQ29uZmlnID0gMDsKKworICAgIHN3aXRjaCAoYWN0aW9uKSB7CisgICAgY2FzZSBSRVNFUlZFMTogLyogQ2hlY2sgdmFsdWVzIGZvciBhY2NlcHRhYmlsaXR5ICovCisgICAgICAgIGlmICh2YXJfdmFsX3R5cGUgIT0gQVNOX09DVEVUX1NUUikgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL2xvYWRhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIGxhQ29uZmlnIG5vdCBBU05fT0NURVRfU1RSXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOworICAgICAgICB9CisgICAgICAgIGlmICh2YXJfdmFsX2xlbiA+IDggfHwgdmFyX3ZhbF9sZW4gPD0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL2xvYWRhdmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgIndyaXRlIHRvIGxhQ29uZmlnOiBiYWQgbGVuZ3RoXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7CisgICAgICAgIH0KKworICAgICAgICBpZiAobGFDb25maWdTZXQgPCAwKSB7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogVGhlIG9iamVjdCBpcyBzZXQgaW4gYSByZWFkLW9ubHkgY29uZmlndXJhdGlvbiBmaWxlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFJFU0VSVkUyOiAvKiBBbGxvY2F0ZSBtZW1vcnkgYW5kIHNpbWlsYXIgcmVzb3VyY2VzICovCisgICAgICAgIHsKKyAgICAgICAgICAgIGNoYXIgYnVmWzhdOworICAgICAgICAgICAgaW50IG9sZF9lcnJubyA9IGVycm5vOworICAgICAgICAgICAgZG91YmxlIHZhbDsKKyAgICAgICAgICAgIGNoYXIgKmVuZHA7CisKKyAgICAgICAgICAgIHNwcmludGYoYnVmLCAiJS4qcyIsIChpbnQpIHZhcl92YWxfbGVuLCAoY2hhciAqKXZhcl92YWwpOworICAgICAgICAgICAgdmFsID0gc3RydG9kKGJ1ZiwgJmVuZHApOworCisgICAgICAgICAgICBpZiAoZXJybm8gPT0gRVJBTkdFIHx8ICplbmRwICE9ICdcMCcgfHwgdmFsIDwgMCB8fCB2YWwgPiA2NTUzNi4wMCkgeworICAgICAgICAgICAgICAgIGVycm5vID0gb2xkX2Vycm5vOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9sb2FkYXZlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAid3JpdGUgdG8gbGFDb25maWc6IGludmFsaWQgdmFsdWVcbiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZXJybm8gPSBvbGRfZXJybm87CisKKyAgICAgICAgICAgIGxhQ29uZmlnID0gdmFsOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBDT01NSVQ6CisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBpZHggPSBuYW1lW25hbWVfbGVuIC0gMV0gLSAxOworICAgICAgICAgICAgbWF4bG9hZFtpZHhdID0gbGFDb25maWc7CisgICAgICAgICAgICBsYUNvbmZpZ1NldCA9IDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKwogdV9jaGFyICAgICAgICAgKgogdmFyX2V4dGVuc2libGVfbG9hZGF2ZShzdHJ1Y3QgdmFyaWFibGUgKiB2cCwKICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbmFtZSwKQEAgLTMzNSw2ICs0MzIsMTAgQEAKICAgICBjYXNlIE1JQklOREVYOgogICAgICAgICBsb25nX3JldCA9IG5hbWVbKmxlbmd0aCAtIDFdOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOworICAgIGNhc2UgTE9BRE1BWFZBTDoKKyAgICAgICAgLyogc2V0dXAgd3JpdGUgbWV0aG9kLCBidXQgZG9uJ3QgcmV0dXJuIHlldCAqLworICAgICAgICAqd3JpdGVfbWV0aG9kID0gd3JpdGVfbGFDb25maWc7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRVJST1JOQU1FOgogICAgICAgICBzcHJpbnRmKGVycm1zZywgIkxvYWQtJWQiLCAoKG5hbWVbKmxlbmd0aCAtIDFdID09IDEpID8gMSA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG5hbWVbKmxlbmd0aCAtIDFdID09IDIpID8gNSA6IDE1KSkpOwpAQCAtMzQzLDcgKzQ0NCw3IEBACiAgICAgfQogICAgIGlmICh0cnlfZ2V0bG9hZGF2ZygmYXZlbnJ1blswXSwgc2l6ZW9mKGF2ZW5ydW4pIC8gc2l6ZW9mKGF2ZW5ydW5bMF0pKQogICAgICAgICA9PSAtMSkKLSAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgc3dpdGNoICh2cC0+bWFnaWMpIHsKICAgICBjYXNlIExPQURBVkU6CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvYWRhdmUuaAppbmRleCA0OTdiZmI4Li40ZjVlN2E1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2FkYXZlLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9hZGF2ZS5oCkBAIC00LDcgKzQsNyBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTE9BREFWRV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9MT0FEQVZFX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZSkKIAogICAgICB2b2lkICAgICAgICAgICAgaW5pdF9sb2FkYXZlKHZvaWQpOwogICAgICBleHRlcm4gRmluZFZhck1ldGhvZCB2YXJfZXh0ZW5zaWJsZV9sb2FkYXZlOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmMKaW5kZXggNmI2NzJmYS4uODNiNGU0YSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5jCkBAIC05LDIzNSArOSwxMDQgQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSAibG9nbWF0Y2guaCIKKwogI2lmZGVmIEhBVkVfUkVHRVhfSAogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNpbmNsdWRlIDxlcnJuby5oPgotCi0KLSNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCisjaW5jbHVkZSA8cmVnZXguaD4KKyNpbmNsdWRlIDx0aW1lLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKLSNpbmNsdWRlICJzdHJ1Y3QuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCi0jaW5jbHVkZSAibG9nbWF0Y2guaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIgogCi0jZGVmaW5lIE1BWExPR01BVENIICAgNTAKKy8qCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgZmlsZW5hbWUgcGF0dGVybgorICogIGNvbnRhaW5zIHRoZSAlIGNoYXJhY3RlciBpbmRpY2F0aW5nIGEgdmFyaWFibGUKKyAqICBmaWxlbmFtZSAoaS5lLiBpdCB1c2VzIGRhdGUvdGltZSBmb3JtYXQgY29udHJvbAorICogIGNvZGVzLCBzZWUgJ21hbiBkYXRlJykgdGhlbiBleHBhbmRzIHRob3NlIGNvbnRyb2wKKyAqICBjb2RlcyBiYXNlZCBvbiBjdXJyZW50IHRpbWUgYW5kIHNldHMgdGhlCisgKiAgZmlsZW5hbWUgZmllbGQgaW4gdGhlIHN0cnVjdC4KKyAqICBSZXR1cm5zIDEgaWYgdGhlIGZpbGVuYW1lIGNoYW5nZWQsIDAgb3RoZXJ3aXNlCisgKiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCiAKLXN0cnVjdCBsb2dtYXRjaHN0YXQgbG9nbWF0Y2hUYWJsZVtNQVhMT0dNQVRDSF07Ci1pbnQgICAgICAgICAgICAgbG9nbWF0Y2hDb3VudDsKLQotdm9pZAotaW5pdF9sb2dtYXRjaCh2b2lkKQorc3RhdGljIGludAorbG9nbWF0Y2hfdXBkYXRlX2ZpbGVuYW1lKGNvbnN0IGNoYXIgKiBwYXR0ZXJuLCBjaGFyICogY3VycmVudEZpbGVuYW1lKQogewotICAgIHN0cnVjdCB2YXJpYWJsZTIgbG9nbWF0Y2hfaW5mb1tdID0gewotICAgICAgICB7TE9HTUFUQ0hfSU5GTywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDB9Ci0gICAgfTsKLQotICAgIHN0cnVjdCB2YXJpYWJsZTIgbG9nbWF0Y2hfdGFibGVbXSA9IHsKLSAgICAgICAge0xPR01BVENIX0lOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezF9fSwKLSAgICAgICAge0xPR01BVENIX05BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsyfX0sCi0gICAgICAgIHtMT0dNQVRDSF9GSUxFTkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwKLSAgICAgICAgIHszfX0sCi0gICAgICAgIHtMT0dNQVRDSF9SRUdFWCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezR9fSwKLSAgICAgICAge0xPR01BVENIX0dMT0JBTENUUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsCi0gICAgICAgICB7NX19LAotICAgICAgICB7TE9HTUFUQ0hfR0xPQkFMQ05ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwKLSAgICAgICAgIHs2fX0sCi0gICAgICAgIHtMT0dNQVRDSF9DVVJSRU5UQ1RSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwKLSAgICAgICAgIHs3fX0sCi0gICAgICAgIHtMT0dNQVRDSF9DVVJSRU5UQ05ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwKLSAgICAgICAgIHs4fX0sCi0gICAgICAgIHtMT0dNQVRDSF9DT1VOVEVSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezl9fSwKLSAgICAgICAge0xPR01BVENIX0NPVU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezEwfX0sCi0gICAgICAgIHtMT0dNQVRDSF9GUkVRLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezExfX0sCi0gICAgICAgIHtMT0dNQVRDSF9FUlJPUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMDB9fSwKLSAgICAgICAge0xPR01BVENIX01TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezEwMX19Ci0gICAgfTsKKyAgICB0aW1lX3QgdDsKKyAgICBzdHJ1Y3QgdG0gKnRtcDsKKyAgICBjaGFyIG5ld0ZpbGVuYW1lWzI1Nl07CiAKICAgICAvKgotICAgICAqIERlZmluZSB0aGUgT0lEIHBvaW50ZXIgdG8gdGhlIHRvcCBvZiB0aGUgbWliIHRyZWUgdGhhdCB3ZSdyZQotICAgICAqIHJlZ2lzdGVyaW5nIHVuZGVybmVhdGggCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqIGlmIHRoZSBmaWxlbmFtZSBwYXR0ZXJuIGRvZXNuJ3QgaGF2ZSB0aGUgIiUiIGNoYXJhY3RlciBqdXN0IHJldHVybiwKKyAgICAgKiBzaW5jZSB0aGVyZSBpcyBubyBuZWVkIGZvciBmdXJ0aGVyIHByb2Nlc3NpbmcKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICovCi0gICAgb2lkICAgICAgICAgICAgIGxvZ21hdGNoX2luZm9fb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIDE2LCAxIH07Ci0gICAgb2lkICAgICAgICAgICAgIGxvZ21hdGNoX3ZhcmlhYmxlc19vaWRbXSA9IHsgTkVUU05NUF9VQ0RBVklTX01JQiwgMTYsIDIsIDEgfTsKLQotICAgIC8qCi0gICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIHdpdGggdGhlIGFnZW50IHRvIGhhbmRsZSBvdXIgbWliIHRyZWUgCi0gICAgICovCi0gICAgUkVHSVNURVJfTUlCKCJ1Y2Qtc25tcC9sb2dtYXRjaCIsIGxvZ21hdGNoX2luZm8sIHZhcmlhYmxlMiwKLSAgICAgICAgICAgICAgICAgbG9nbWF0Y2hfaW5mb19vaWQpOwotICAgIFJFR0lTVEVSX01JQigidWNkLXNubXAvbG9nbWF0Y2giLCBsb2dtYXRjaF90YWJsZSwgdmFyaWFibGUyLAotICAgICAgICAgICAgICAgICBsb2dtYXRjaF92YXJpYWJsZXNfb2lkKTsKLQotICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJsb2dtYXRjaCIsIGxvZ21hdGNoX3BhcnNlX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaF9mcmVlX2NvbmZpZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9nbWF0Y2ggbmFtZSBwYXRoIGN5Y2xldGltZSByZWdleCIpOwotCi19Ci0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogISEhLS0tISEhIFBVQkxJQyAhISEgLS0tICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogbG9nbWF0Y2hfZnJlZV9jb25maWcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogZnJlZSBtZW1vcnkgYWxsb2NhdGVkIGJ5IHRoaXMgbWliIG1vZHVsZSAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQotdm9pZAotbG9nbWF0Y2hfZnJlZV9jb25maWcodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgaTsKLQotICAgIC8qCi0gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAqIHRoZSBvbmx5IG1lbW9yeSB3ZSBoYXZlIGFsbG9jYXRlZCAgICAKLSAgICAgKiBpcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSByZWdjb21wICAgCi0gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAqLwotCi0gICAgZm9yIChpID0gMDsgaSA8IGxvZ21hdGNoQ291bnQ7IGkrKykgewotCi0gICAgICAgIHJlZ2ZyZWUoJihsb2dtYXRjaFRhYmxlW2ldLnJlZ2V4QnVmZmVyKSk7CisgICAgaWYgKHN0cmNocihwYXR0ZXJuLCAnJScpID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGxvZ21hdGNoQ291bnQgPSAwOwotfQogCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICEhIS0tLSEhISBQVUJMSUMgISEhIC0tLSAhISEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qIGxvZ21hdGNoX3BhcnNlX2NvbmZpZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qIHBhcnNlIG9uZSBsaW5lIGZyb20gc25tcGQuY29uZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisgICAgdCA9IHRpbWUoTlVMTCk7CisgICAgdG1wID0gbG9jYWx0aW1lKCZ0KTsKIAotdm9pZAotbG9nbWF0Y2hfcGFyc2VfY29uZmlnKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoteworICAgIGlmICh0bXAgPT0gTlVMTCkgeworICAgICAgICBwZXJyb3IoImxvY2FsdGltZSIpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CiAKLSAgICBjaGFyIHNwYWNlX25hbWU7Ci0gICAgY2hhciBzcGFjZV9wYXRoOworICAgIC8qIHJlc3VsdCBvZiBleHBhbnNpb24gbXVzdCBmaXQgaW50byBuZXdGaWxlbmFtZSwgb3RoZXJ3aXNlIHJldHVybmluZyAqLworICAgIGlmIChzdHJmdGltZShuZXdGaWxlbmFtZSwgc2l6ZW9mKG5ld0ZpbGVuYW1lKSwgcGF0dGVybiwgdG1wKSA9PSAwKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIGlmIChsb2dtYXRjaENvdW50IDwgTUFYTE9HTUFUQ0gpIHsKLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3kgPSAzMDsKLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS50aGlzSW5kZXggPSBsb2dtYXRjaENvdW50OwotCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKiBiZSBjYXJlZnVsIHRoaXMgY291bnRlciBuZWVkcyB0byBiZSAgCi0gICAgICAgICAqIHJlc2V0IGZyb20gcGVyc2lzdGVudCBzdG9yYWdlICAgICAgICAgCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICovCi0KLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5nbG9iYWxNYXRjaENvdW50ZXIgPSAwOwotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmN1cnJlbnRNYXRjaENvdW50ZXIgPSAwOwotICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm1hdGNoQ291bnRlciA9IDA7Ci0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0udmlyZ2luID0gVFJVRTsKLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5jdXJyZW50RmlsZVBvc2l0aW9uID0gMDsKLQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICogYmUgY2FyZWZ1bDogdGhlIGZsYWcgMjU1IG11c3QgZml0IHRvIAotICAgICAgICAgKiB0aGUgc2l6ZSBvZiByZWdFeCBhcyBkZWZpbmRlZCBpbiAgICAgCi0gICAgICAgICAqIGxvZ21hdGNoLmggICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAotICAgICAgICAgKi8KLQotICAgICAgICBzc2NhbmYoY3B0ciwgIiUyNTVzJWMlMjU1cyVjICVkICUyNTVjXG4iLAotICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5uYW1lLAotCSAgICAgICAmc3BhY2VfbmFtZSwKLSAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZmlsZW5hbWUsCi0JICAgICAgICZzcGFjZV9wYXRoLAotICAgICAgICAgICAgICAgJihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSksCi0gICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4KTsKLQotCS8qCi0JICogTG9nIGFuIGVycm9yIHRoZW4gcmV0dXJuIGlmIGFueSBvZiB0aGUgc3RyaW5ncyBzY2FubmVkIGluIHdlcmUKLQkgKiBsYXJnZXIgdGhlbiB0aGV5IHNob3VsZCBoYXZlIGJlZW4uCi0JICovCi0JaWYgKHNwYWNlX25hbWUgIT0gJyAnKSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJsb2dtYXRjaF9wYXJzZV9jb25maWc6IHRoZSBuYW1lIHNjYW5uZWQgIiBcCi0JCSAiaW4gZnJvbSBsaW5lICVzIGlzIHRvbyBsYXJnZS4gbG9nbWF0Y2hDb3VudCA9ICVkXG4iLAotCQkgY3B0ciwgbG9nbWF0Y2hDb3VudCk7Ci0JCXJldHVybjsKLQl9IGVsc2UgaWYgKHNwYWNlX3BhdGggIT0gJyAnKSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJsb2dtYXRjaF9wYXJzZV9jb25maWc6IHRoZSBmaWxlIG5hbWUgIiBcCi0JCSAic2Nhbm5lZCBpbiBmcm9tIGxpbmUgJXMgaXMgdG9vIGxhcmdlLiBsb2dtYXRjaENvdW50ID0gJWRcbiIsCi0JCSAgICBjcHRyLCBsb2dtYXRjaENvdW50KTsKLQkJcmV0dXJuOwotCX0KLQotICAgICAgICAvKgotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqIGp1c3QgdG8gYmUgc2FmZSAiTlVMTCIgdGhlIGVuZCBvZiAgICAKLSAgICAgICAgICogdGhlIGFyYXJ5IHJlZ0V4IGFzIHNzY2FuZiB3b24ndCBkbyAgIAotICAgICAgICAgKiBpdCB3aXRoIHRoZSAlYyBtb2RpZmllciAgICAgICAgICAgICAgCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICovCi0KLSAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeFsyNTVdID0gJ1wwJzsKLQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICogbm93IGNvbXBpbGUgdGhlIHJlZ3VsYXIgZXhwcmVzc2lvbiAgIAotICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAqLwotCi0gICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubXlSZWdleEVycm9yID0KLSAgICAgICAgICAgIHJlZ2NvbXAoJihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ2V4QnVmZmVyKSwKLSAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeCwKLSAgICAgICAgICAgICAgICAgICAgUkVHX0VYVEVOREVEIHwgUkVHX05PU1VCKTsKLQotICAgICAgICBpZiAobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5mcmVxdWVuY3kgPiAwKSB7Ci0gICAgICAgICAgICBzbm1wX2FsYXJtX3JlZ2lzdGVyKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQV9SRVBFQVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTTk1QQWxhcm1DYWxsYmFjayAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVMb2dtYXRjaF9TY2hlZHVsZWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYobG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XSkKLSAgICAgICAgICAgICAgICApOwotICAgICAgICB9Ci0KLSAgICAgICAgbG9nbWF0Y2hDb3VudCsrOworICAgIC8qIGlmIHNhbWUgYXMgY3VycmVudCBmaWxlbmFtZSwganVzdCByZXR1cm4gKi8KKyAgICBpZiAoc3RyY21wKGN1cnJlbnRGaWxlbmFtZSwgbmV3RmlsZW5hbWUpID09IDApIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogb3RoZXJ3aXNlIHVwZGF0ZSBjdXJyZW50RmlsZW5hbWUgYW5kIHJldHVybiAxICovCisgICAgICAgIHN0cmNweShjdXJyZW50RmlsZW5hbWUsIG5ld0ZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogfQogCitzdHJ1Y3QgbG9nbWF0Y2hzdGF0IHsKKyAgICBjaGFyICAgICAgICAgICAgZmlsZW5hbWVQYXR0ZXJuWzI1Nl07CisgICAgY2hhciAgICAgICAgICAgIGZpbGVuYW1lWzI1Nl07CisgICAgY2hhciAgICAgICAgICAgIHJlZ0V4WzI1Nl07CisgICAgY2hhciAgICAgICAgICAgIG5hbWVbMjU2XTsKKyAgICBGSUxFICAgICAgICAgICAqbG9nZmlsZTsKKyAgICBsb25nICAgICAgICAgICAgY3VycmVudEZpbGVQb3NpdGlvbjsKKyAgICB1bnNpZ25lZCBsb25nICAgZ2xvYmFsTWF0Y2hDb3VudGVyOworICAgIHVuc2lnbmVkIGxvbmcgICBjdXJyZW50TWF0Y2hDb3VudGVyOworICAgIHVuc2lnbmVkIGxvbmcgICBtYXRjaENvdW50ZXI7CisgICAgcmVnZXhfdCAgICAgICAgIHJlZ2V4QnVmZmVyOworICAgIGludCAgICAgICAgICAgICBteVJlZ2V4RXJyb3I7CisgICAgaW50ICAgICAgICAgICAgIHZpcmdpbjsKKyAgICBpbnQgICAgICAgICAgICAgdGhpc0luZGV4OworICAgIGludCAgICAgICAgICAgICBmcmVxdWVuY3k7Cit9OworCisjZGVmaW5lIE1BWExPR01BVENIICAgMjUwCisKK3N0YXRpYyBzdHJ1Y3QgbG9nbWF0Y2hzdGF0IGxvZ21hdGNoVGFibGVbTUFYTE9HTUFUQ0hdOworc3RhdGljIGludCAgICAgICAgICAgICAgICAgbG9nbWF0Y2hDb3VudCA9IDA7CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogISEhLS0tISEhIFBVQkxJQyAhISEgLS0tICEhISAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogdXBkYXRlTG9nbWF0Y2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYmFjayBieSBzbm1wZCBhbGFybXMgICAgICAgICAgICAgICAgICoKICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotCi12b2lkCitzdGF0aWMgdm9pZAogdXBkYXRlTG9nbWF0Y2goaW50IGlpbmRleCkKIHsKIApAQCAtMjUwLDYgKzExOSw3IEBACiAgICAgaW50ICAgICAgICAgICAgIHRvb2JpZzsKICAgICBpbnQgICAgICAgICAgICAgYW55Q2hhbmdlcyA9IEZBTFNFOwogICAgIHN0cnVjdCBzdGF0ICAgICBzYjsKKyAgICBjaGFyICAgICAgICAgICAgbGFzdEZpbGVuYW1lWzI1Nl07CiAKICAgICAvKgogICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKQEAgLTI2Miw3ICsxMzIsNyBAQAogICAgICAqLwogCiAgICAgc25wcmludGYocGVyZmlsZW5hbWUsIHNpemVvZihwZXJmaWxlbmFtZSksICIlcy9zbm1wZF9sb2dtYXRjaF8lcy5wb3MiLAotCWdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBsb2dtYXRjaFRhYmxlW2lpbmRleF0ubmFtZSk7CisgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGxvZ21hdGNoVGFibGVbaWluZGV4XS5uYW1lKTsKIAogICAgIGlmIChsb2dtYXRjaFRhYmxlW2lpbmRleF0udmlyZ2luKSB7CiAKQEAgLTI3Nyw3ICsxNDcsNiBAQAogCiAgICAgICAgIGlmICgocGVyZmlsZSA9IGZvcGVuKHBlcmZpbGVuYW1lLCAiciIpKSkgewogCi0KICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgICAgICAgICAgICAgKiB0aGUgcGVyc2lzdGVudCBkYXRhIGZpbGUgZXhpc3RzIHNvICAgCkBAIC0yODgsNyArMTU3LDggQEAKIAogICAgICAgICAgICAgcG9zID0gY291bnRlciA9IGNjb3VudGVyID0gMDsKIAotICAgICAgICAgICAgaWYgKGZzY2FuZihwZXJmaWxlLCAiJWx1ICVsdSAlbHUiLCAmcG9zLCAmY2NvdW50ZXIsICZjb3VudGVyKSkgeworICAgICAgICAgICAgaWYgKGZzY2FuZihwZXJmaWxlLCAiJWx1ICVsdSAlbHUgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAmcG9zLCAmY2NvdW50ZXIsICZjb3VudGVyLCBsYXN0RmlsZW5hbWUpKSB7CiAKIAogICAgICAgICAgICAgICAgIC8qCkBAIC0yOTksNDEgKzE2OSw1MyBAQAogICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAgICAgICAgICAgICAgKi8KIAotICAgICAgICAgICAgICAgIGlmICgobG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmxvZ2ZpbGUgPQotICAgICAgICAgICAgICAgICAgICBmb3Blbihsb2dtYXRjaFRhYmxlW2lpbmRleF0uZmlsZW5hbWUsICJyIikpKSB7Ci0KKyAgICAgICAgICAgICAgICBpZiAobG9nbWF0Y2hfdXBkYXRlX2ZpbGVuYW1lKGxvZ21hdGNoVGFibGVbaWluZGV4XS5maWxlbmFtZVBhdHRlcm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsYXN0RmlsZW5hbWUpID09IDApIHsKIAogICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCi0gICAgICAgICAgICAgICAgICAgICAqIHRoZSBsb2cgZmlsZSBjb3VsZCBiZSBvcGVuZWQ7IG5vdyAgICAKLSAgICAgICAgICAgICAgICAgICAgICogbGV0J3MgdHJ5IHRvIHNldCB0aGUgcG9pbnRlciAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAgICAgKiB0aGUgZmlsZW5hbWUgaXMgc3RpbGwgdGhlIHNhbWUgYXMgCisgICAgICAgICAgICAgICAgICAgICAqIHRoZSBvbmUgc3RvcmVkIGluIHRoZSBwZXJzaXN0ZW50CisgICAgICAgICAgICAgICAgICAgICAqIGRhdGEgZmlsZS4KKyAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgIGlmICghZnNlZWsKLSAgICAgICAgICAgICAgICAgICAgICAgIChsb2dtYXRjaFRhYmxlW2lpbmRleF0ubG9nZmlsZSwgcG9zLCBTRUVLX1NFVCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKChsb2dtYXRjaFRhYmxlW2lpbmRleF0ubG9nZmlsZSA9CisgICAgICAgICAgICAgICAgICAgICAgICBmb3Blbihsb2dtYXRjaFRhYmxlW2lpbmRleF0uZmlsZW5hbWUsICJyIikpKSB7CiAKIAogICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBwb2ludGVyIGNvdWxkIGJlIHNldCAtIHRoaXMgaXMgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBtb3N0IHRoYXQgd2UgY2FuIGRvOiBpZiB0aGUgICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvaW50ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBmaWxlICAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHNpemUgd2UgbXVzdCBhc3N1bWUgdGhhdCB0aGUgcG9pbnRlciAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIHN0aWxsIHBvaW50cyB0byB3aGVyZSBpdCByZWFkIHRoZSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpbGUgbGFzdCB0aW1lOyBsZXQncyByZXN0b3JlIHRoZSAgICAKLSAgICAgICAgICAgICAgICAgICAgICAgICAqIGRhdGEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIHRoZSBsb2cgZmlsZSBjb3VsZCBiZSBvcGVuZWQ7IG5vdyAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIGxldCdzIHRyeSB0byBzZXQgdGhlIHBvaW50ZXIgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi0gICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uY3VycmVudEZpbGVQb3NpdGlvbiA9IHBvczsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50TWF0Y2hDb3VudGVyID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY291bnRlcjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5nbG9iYWxNYXRjaENvdW50ZXIgPSBjb3VudGVyOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWZzZWVrCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxvZ21hdGNoVGFibGVbaWluZGV4XS5sb2dmaWxlLCBwb3MsIFNFRUtfU0VUKSkgewogCi0gICAgICAgICAgICAgICAgICAgIGZjbG9zZShsb2dtYXRjaFRhYmxlW2lpbmRleF0ubG9nZmlsZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0aGUgcG9pbnRlciBjb3VsZCBiZSBzZXQgLSB0aGlzIGlzICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogdGhlIG1vc3QgdGhhdCB3ZSBjYW4gZG86IGlmIHRoZSAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHBvaW50ZXIgaXMgc21hbGxlciB0aGFuIHRoZSBmaWxlICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzaXplIHdlIG11c3QgYXNzdW1lIHRoYXQgdGhlIHBvaW50ZXIgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3RpbGwgcG9pbnRzIHRvIHdoZXJlIGl0IHJlYWQgdGhlICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIGZpbGUgbGFzdCB0aW1lOyBsZXQncyByZXN0b3JlIHRoZSAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBkYXRhICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRGaWxlUG9zaXRpb24gPSBwb3M7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRNYXRjaENvdW50ZXIgPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjY291bnRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICAgICAgZmNsb3NlKGxvZ21hdGNoVGFibGVbaWluZGV4XS5sb2dmaWxlKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uZ2xvYmFsTWF0Y2hDb3VudGVyID0gY291bnRlcjsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZmNsb3NlKHBlcmZpbGUpOwpAQCAtMzQyLDYgKzIyNCwxOSBAQAogICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0udmlyZ2luID0gRkFMU0U7CiAgICAgfQogCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICogY2hlY2sgaWYgYSBuZXcgaW5wdXQgZmlsZSBuZWVkcyB0byBiZSBvcGVuZWQKKyAgICAgKiBpZiB5ZXMsIHJlc2V0IGNvdW50ZXIgYW5kIHBvc2l0aW9uCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqLworCisgICAgaWYgKGxvZ21hdGNoX3VwZGF0ZV9maWxlbmFtZShsb2dtYXRjaFRhYmxlW2lpbmRleF0uZmlsZW5hbWVQYXR0ZXJuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmZpbGVuYW1lKSA9PSAxKSB7CisgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50RmlsZVBvc2l0aW9uID0gMDsgCisgICAgICAgIGxvZ21hdGNoVGFibGVbaWluZGV4XS5jdXJyZW50TWF0Y2hDb3VudGVyID0gMDsKKyAgICB9CisKIAogICAgIC8qCiAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIApAQCAtNDI5LDEwICszMjQsMTEgQEAKICAgICAgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAogICAgICAgICAgKi8KIAotICAgICAgICBmcHJpbnRmKHBlcmZpbGUsICIlbHUgJWx1ICVsdVxuIiwKKyAgICAgICAgZnByaW50ZihwZXJmaWxlLCAiJWx1ICVsdSAlbHUgJXNcbiIsCiAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRGaWxlUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmN1cnJlbnRNYXRjaENvdW50ZXIsCi0gICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmdsb2JhbE1hdGNoQ291bnRlcik7CisgICAgICAgICAgICAgICAgbG9nbWF0Y2hUYWJsZVtpaW5kZXhdLmdsb2JhbE1hdGNoQ291bnRlciwKKyAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2lpbmRleF0uZmlsZW5hbWUpOwogCiAgICAgICAgIGZjbG9zZShwZXJmaWxlKTsKICAgICB9CkBAIC00NDAsMjIgKzMzNiwxNzMgQEAKIH0KIAogCi12b2lkCitzdGF0aWMgdm9pZAogdXBkYXRlTG9nbWF0Y2hfU2NoZWR1bGVkKHVuc2lnbmVkIGludCByZWdpc3RyYXRpb25OdW1iZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxvZ21hdGNoc3RhdCAqbG9nbWF0Y2h0YWJsZSkKIHsKLQogICAgIHVwZGF0ZUxvZ21hdGNoKGxvZ21hdGNodGFibGUtPnRoaXNJbmRleCk7CiB9CiAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogbG9nbWF0Y2hfcGFyc2VfY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogcGFyc2Ugb25lIGxpbmUgZnJvbSBzbm1wZC5jb25mICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworc3RhdGljIHZvaWQKK2xvZ21hdGNoX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKworICAgIGNoYXIgc3BhY2VfbmFtZTsKKyAgICBjaGFyIHNwYWNlX3BhdGg7CisKKyAgICBpZiAobG9nbWF0Y2hDb3VudCA8IE1BWExPR01BVENIKSB7CisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5ID0gMzA7CisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0udGhpc0luZGV4ID0gbG9nbWF0Y2hDb3VudDsKIAogCisgICAgICAgIC8qCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKiBiZSBjYXJlZnVsIHRoaXMgY291bnRlciBuZWVkcyB0byBiZQorICAgICAgICAgKiByZXNldCBmcm9tIHBlcnNpc3RlbnQgc3RvcmFnZQorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICovCisKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5nbG9iYWxNYXRjaENvdW50ZXIgPSAwOworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmN1cnJlbnRNYXRjaENvdW50ZXIgPSAwOworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm1hdGNoQ291bnRlciA9IDA7CisgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0udmlyZ2luID0gVFJVRTsKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5jdXJyZW50RmlsZVBvc2l0aW9uID0gMDsKKworCisgICAgICAgIC8qCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKiBiZSBjYXJlZnVsOiB0aGUgZmxhZyAyNTUgbXVzdCBmaXQgdG8KKyAgICAgICAgICogdGhlIHNpemUgb2YgcmVnRXggYXMgZGVmaW5kZWQgaW4KKyAgICAgICAgICogbG9nbWF0Y2guaAorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICovCisKKyAgICAgICAgc3NjYW5mKGNwdHIsICIlMjU1cyVjJTI1NXMlYyAlZCAlMjU1Y1xuIiwKKyAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ubmFtZSwKKwkgICAgICAgJnNwYWNlX25hbWUsCisgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZpbGVuYW1lUGF0dGVybiwKKwkgICAgICAgJnNwYWNlX3BhdGgsCisgICAgICAgICAgICAgICAmKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5KSwKKyAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXgpOworCisgICAgICAgIC8qIGZpbGwgaW4gZmlsZW5hbWUgd2l0aCBpbml0aWFsIGRhdGEgKi8KKyAgICAgICAgc3RyY3B5KGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZmlsZW5hbWUsCisgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZpbGVuYW1lUGF0dGVybik7CisgICAgICAgIGxvZ21hdGNoX3VwZGF0ZV9maWxlbmFtZShsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZpbGVuYW1lUGF0dGVybiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZmlsZW5hbWUpOworCisJLyoKKwkgKiBMb2cgYW4gZXJyb3IgdGhlbiByZXR1cm4gaWYgYW55IG9mIHRoZSBzdHJpbmdzIHNjYW5uZWQgaW4gd2VyZQorCSAqIGxhcmdlciB0aGVuIHRoZXkgc2hvdWxkIGhhdmUgYmVlbi4KKwkgKi8KKwlpZiAoc3BhY2VfbmFtZSAhPSAnICcpIHsKKwkJc25tcF9sb2coTE9HX0VSUiwgImxvZ21hdGNoX3BhcnNlX2NvbmZpZzogdGhlIG5hbWUgc2Nhbm5lZCAiIFwKKwkJICJpbiBmcm9tIGxpbmUgJXMgaXMgdG9vIGxhcmdlLiBsb2dtYXRjaENvdW50ID0gJWRcbiIsCisJCSBjcHRyLCBsb2dtYXRjaENvdW50KTsKKwkJcmV0dXJuOworCX0gZWxzZSBpZiAoc3BhY2VfcGF0aCAhPSAnICcpIHsKKwkJc25tcF9sb2coTE9HX0VSUiwgImxvZ21hdGNoX3BhcnNlX2NvbmZpZzogdGhlIGZpbGUgbmFtZSAiIFwKKwkJICJzY2FubmVkIGluIGZyb20gbGluZSAlcyBpcyB0b28gbGFyZ2UuIGxvZ21hdGNoQ291bnQgPSAlZFxuIiwKKwkJICAgIGNwdHIsIGxvZ21hdGNoQ291bnQpOworCQlyZXR1cm47CisJfQorCisgICAgICAgIC8qCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKiBqdXN0IHRvIGJlIHNhZmUgIk5VTEwiIHRoZSBlbmQgb2YKKyAgICAgICAgICogdGhlIGFyYXJ5IHJlZ0V4IGFzIHNzY2FuZiB3b24ndCBkbworICAgICAgICAgKiBpdCB3aXRoIHRoZSAlYyBtb2RpZmllcgorICAgICAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICovCisKKyAgICAgICAgbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XS5yZWdFeFsyNTVdID0gJ1wwJzsKKworCisgICAgICAgIC8qCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKiBub3cgY29tcGlsZSB0aGUgcmVndWxhciBleHByZXNzaW9uCisgICAgICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgKi8KKworICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm15UmVnZXhFcnJvciA9CisgICAgICAgICAgICByZWdjb21wKCZsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ2V4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ0V4LAorICAgICAgICAgICAgICAgICAgICBSRUdfRVhURU5ERUQgfCBSRUdfTk9TVUIpOworCisgICAgICAgIGlmIChsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm15UmVnZXhFcnJvcikgeworICAgICAgICAgICAgY2hhciByZWdleEVycm9yU3RyaW5nWzEwMF07CisgICAgICAgICAgICByZWdlcnJvcihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLm15UmVnZXhFcnJvciwKKyAgICAgICAgICAgICAgICAgICAgICZsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLnJlZ2V4QnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAgcmVnZXhFcnJvclN0cmluZywgMTAwKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3QgcHJvY2VzcyB0aGUgbG9nbWF0Y2ggcmVnZXggLSAlcywiIFwKKyAgICAgICAgICAgICAgICAgICAgICJcbiBzaW5jZSByZWdjb21wKCkgZmFpbGVkIHdpdGggLSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0ucmVnRXgsIHJlZ2V4RXJyb3JTdHJpbmcpOworICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKGxvZ21hdGNoVGFibGVbbG9nbWF0Y2hDb3VudF0uZnJlcXVlbmN5ID4gMCkgeworICAgICAgICAgICAgc25tcF9hbGFybV9yZWdpc3Rlcihsb2dtYXRjaFRhYmxlW2xvZ21hdGNoQ291bnRdLmZyZXF1ZW5jeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU0FfUkVQRUFULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU05NUEFsYXJtQ2FsbGJhY2sgKikgdXBkYXRlTG9nbWF0Y2hfU2NoZWR1bGVkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbG9nbWF0Y2hUYWJsZVtsb2dtYXRjaENvdW50XSk7CisgICAgICAgIH0KKworICAgICAgICBsb2dtYXRjaENvdW50Kys7CisgICAgfQorfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIGxvZ21hdGNoX2ZyZWVfY29uZmlnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqIGZyZWUgbWVtb3J5IGFsbG9jYXRlZCBieSB0aGlzIG1pYiBtb2R1bGUgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3N0YXRpYyB2b2lkCitsb2dtYXRjaF9mcmVlX2NvbmZpZyh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBpOworCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKiB0aGUgb25seSBtZW1vcnkgd2UgaGF2ZSBhbGxvY2F0ZWQKKyAgICAgKiBpcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSByZWdjb21wCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICovCisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbG9nbWF0Y2hDb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChsb2dtYXRjaFRhYmxlW2ldLm15UmVnZXhFcnJvciA9PSAwKQorICAgICAgICAgICAgcmVnZnJlZSgmbG9nbWF0Y2hUYWJsZVtpXS5yZWdleEJ1ZmZlcik7CisgICAgfQorICAgIGxvZ21hdGNoQ291bnQgPSAwOworfQorCisKKyNkZWZpbmUgTE9HTUFUQ0hfSU5GTyAgICAgICAwCisjZGVmaW5lIExPR01BVENIX0lOREVYICAgICAgMQorI2RlZmluZSBMT0dNQVRDSF9OQU1FICAgICAgIDIKKyNkZWZpbmUgTE9HTUFUQ0hfRklMRU5BTUUgICAzCisjZGVmaW5lIExPR01BVENIX1JFR0VYICAgICAgNAorI2RlZmluZSBMT0dNQVRDSF9HTE9CQUxDVFIgIDUKKyNkZWZpbmUgTE9HTUFUQ0hfR0xPQkFMQ05UICA2CisjZGVmaW5lIExPR01BVENIX0NVUlJFTlRDVFIgNworI2RlZmluZSBMT0dNQVRDSF9DVVJSRU5UQ05UIDgKKyNkZWZpbmUgTE9HTUFUQ0hfQ09VTlRFUiAgICA5CisjZGVmaW5lIExPR01BVENIX0NPVU5UICAgICAgMTAKKyNkZWZpbmUgTE9HTUFUQ0hfRlJFUSAgICAgICAxMQorI2RlZmluZSBMT0dNQVRDSF9FUlJPUiAgICAgIDEwMAorI2RlZmluZSBMT0dNQVRDSF9NU0cgICAgICAgIDEwMQogCiAvKgogICogT0lEIGZ1bmN0aW9ucyAKICAqLwogCi11X2NoYXIgICAgICAgICAqCitzdGF0aWMgdV9jaGFyICoKIHZhcl9sb2dtYXRjaF90YWJsZShzdHJ1Y3QgdmFyaWFibGUgKnZwLAogICAgICAgICAgICAgICAgICAgIG9pZCAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLApAQCAtNTQ5LDQgKzU5Niw2MiBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi0jZW5kaWYgLyogSEFWRV9SRUdFWCAqLwordm9pZAoraW5pdF9sb2dtYXRjaCh2b2lkKQoreworICAgIHN0cnVjdCB2YXJpYWJsZTIgbG9nbWF0Y2hfaW5mb1tdID0geworICAgICAgICB7TE9HTUFUQ0hfSU5GTywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAwfQorICAgIH07CisKKyAgICBzdHJ1Y3QgdmFyaWFibGUyIGxvZ21hdGNoX3RhYmxlW10gPSB7CisgICAgICAgIHtMT0dNQVRDSF9JTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7MX19LAorICAgICAgICB7TE9HTUFUQ0hfTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsyfX0sCisgICAgICAgIHtMT0dNQVRDSF9GSUxFTkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHszfX0sCisgICAgICAgIHtMT0dNQVRDSF9SRUdFWCwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHs0fX0sCisgICAgICAgIHtMT0dNQVRDSF9HTE9CQUxDVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezV9fSwKKyAgICAgICAge0xPR01BVENIX0dMT0JBTENOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7Nn19LAorICAgICAgICB7TE9HTUFUQ0hfQ1VSUkVOVENUUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7N319LAorICAgICAgICB7TE9HTUFUQ0hfQ1VSUkVOVENOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7OH19LAorICAgICAgICB7TE9HTUFUQ0hfQ09VTlRFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2xvZ21hdGNoX3RhYmxlLCAxLCB7OX19LAorICAgICAgICB7TE9HTUFUQ0hfQ09VTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezEwfX0sCisgICAgICAgIHtMT0dNQVRDSF9GUkVRLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfbG9nbWF0Y2hfdGFibGUsIDEsIHsxMX19LAorICAgICAgICB7TE9HTUFUQ0hfRVJST1IsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezEwMH19LAorICAgICAgICB7TE9HTUFUQ0hfTVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9sb2dtYXRjaF90YWJsZSwgMSwgezEwMX19CisgICAgfTsKKworICAgIC8qCisgICAgICogRGVmaW5lIHRoZSBPSUQgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBtaWIgdHJlZSB0aGF0IHdlJ3JlCisgICAgICogcmVnaXN0ZXJpbmcgdW5kZXJuZWF0aAorICAgICAqLworICAgIG9pZCAgICAgICAgICAgICBsb2dtYXRjaF9pbmZvX29pZFtdID0geyBORVRTTk1QX1VDREFWSVNfTUlCLCAxNiwgMSB9OworICAgIG9pZCAgICAgICAgICAgICBsb2dtYXRjaF92YXJpYWJsZXNfb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIDE2LCAyLCAxIH07CisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIG91cnNlbHZlcyB3aXRoIHRoZSBhZ2VudCB0byBoYW5kbGUgb3VyIG1pYiB0cmVlCisgICAgICovCisgICAgUkVHSVNURVJfTUlCKCJ1Y2Qtc25tcC9sb2dtYXRjaCIsIGxvZ21hdGNoX2luZm8sIHZhcmlhYmxlMiwKKyAgICAgICAgICAgICAgICAgbG9nbWF0Y2hfaW5mb19vaWQpOworICAgIFJFR0lTVEVSX01JQigidWNkLXNubXAvbG9nbWF0Y2giLCBsb2dtYXRjaF90YWJsZSwgdmFyaWFibGUyLAorICAgICAgICAgICAgICAgICBsb2dtYXRjaF92YXJpYWJsZXNfb2lkKTsKKworICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJsb2dtYXRjaCIsIGxvZ21hdGNoX3BhcnNlX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dtYXRjaF9mcmVlX2NvbmZpZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibG9nbWF0Y2ggbmFtZSBwYXRoIGN5Y2xldGltZSByZWdleCIpOworCit9CisKKyNlbmRpZiAvKiBIQVZFX1JFR0VYX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9sb2dtYXRjaC5oCmluZGV4IGViMmMwNzAuLmI5NGFkM2EgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2xvZ21hdGNoLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbG9nbWF0Y2guaApAQCAtNSw1MyArNSw5IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9MT0dNQVRDSF9ICiAjZGVmaW5lIF9NSUJHUk9VUF9MT0dNQVRDSF9ICiAKLSNpbmNsdWRlICJtaWJkZWZzLmgiCi0jaW5jbHVkZSA8cmVnZXguaD4KK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCiAKLXN0cnVjdCBsb2dtYXRjaHN0YXQgewotICAgIGNoYXIgICAgICAgICAgICBmaWxlbmFtZVsyNTZdOwotICAgIGNoYXIgICAgICAgICAgICByZWdFeFsyNTZdOwotICAgIGNoYXIgICAgICAgICAgICBuYW1lWzI1Nl07Ci0gICAgRklMRSAgICAgICAgICAgKmxvZ2ZpbGU7Ci0gICAgbG9uZyAgICAgICAgICAgIGN1cnJlbnRGaWxlUG9zaXRpb247Ci0gICAgdW5zaWduZWQgbG9uZyAgIGdsb2JhbE1hdGNoQ291bnRlcjsKLSAgICB1bnNpZ25lZCBsb25nICAgY3VycmVudE1hdGNoQ291bnRlcjsKLSAgICB1bnNpZ25lZCBsb25nICAgbWF0Y2hDb3VudGVyOwotICAgIHJlZ2V4X3QgICAgICAgICByZWdleEJ1ZmZlcjsKLSAgICBpbnQgICAgICAgICAgICAgbXlSZWdleEVycm9yOwotICAgIGludCAgICAgICAgICAgICB2aXJnaW47Ci0gICAgaW50ICAgICAgICAgICAgIHRoaXNJbmRleDsKLSAgICBpbnQgICAgICAgICAgICAgZnJlcXVlbmN5OwotfTsKLXZvaWQgICAgICAgICAgICBpbml0X2xvZ21hdGNoKHZvaWQpOwotCi0KLS8qCi0gKiBjb25maWcgbG9nbWF0Y2ggcGFyc2luZyByb3V0aW5lcyAKLSAqLwotdm9pZCAgICAgICAgICAgIGxvZ21hdGNoX2ZyZWVfY29uZmlnKHZvaWQpOwotdm9pZCAgICAgICAgICAgIGxvZ21hdGNoX3BhcnNlX2NvbmZpZyhjb25zdCBjaGFyICosIGNoYXIgKik7Ci12b2lkICAgICAgICAgICAgdXBkYXRlTG9nbWF0Y2hfU2NoZWR1bGVkKHVuc2lnbmVkIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGxvZ21hdGNoc3RhdCAqKTsKLWV4dGVybiBGaW5kVmFyTWV0aG9kIHZhcl9sb2dtYXRjaF90YWJsZTsKLQotCi0KLSNkZWZpbmUgTE9HTUFUQ0hfRVJST1JfTVNHICAiJXM6IHNpemUgZXhjZWVkcyAlZGtiICg9ICVka2IpIgotCi0jZGVmaW5lIExPR01BVENIX0lORk8gICAgICAgMAotI2RlZmluZSBMT0dNQVRDSF9JTkRFWCAgICAgIDEKLSNkZWZpbmUgTE9HTUFUQ0hfTkFNRSAgICAgICAyCi0jZGVmaW5lIExPR01BVENIX0ZJTEVOQU1FICAgMwotI2RlZmluZSBMT0dNQVRDSF9SRUdFWCAgICAgIDQKLSNkZWZpbmUgTE9HTUFUQ0hfR0xPQkFMQ1RSICA1Ci0jZGVmaW5lIExPR01BVENIX0dMT0JBTENOVCAgNgotI2RlZmluZSBMT0dNQVRDSF9DVVJSRU5UQ1RSIDcKLSNkZWZpbmUgTE9HTUFUQ0hfQ1VSUkVOVENOVCA4Ci0jZGVmaW5lIExPR01BVENIX0NPVU5URVIgICAgOQotI2RlZmluZSBMT0dNQVRDSF9DT1VOVCAgICAgIDEwCi0jZGVmaW5lIExPR01BVENIX0ZSRVEgICAgICAgMTEKLSNkZWZpbmUgTE9HTUFUQ0hfRVJST1IgICAgICAxMDAKLSNkZWZpbmUgTE9HTUFUQ0hfTVNHICAgICAgICAxMDEKK3ZvaWQgaW5pdF9sb2dtYXRjaCh2b2lkKTsKIAogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfTUlCR1JPVVBfTE9HTUFUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYwppbmRleCAxMDllOTZmLi43NDIxODZmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnkuYwpAQCAtMTAsMzIgKzEwLDMwIEBACiAjaW5jbHVkZSAibWVtb3J5LmgiCiAKICNkZWZpbmUgREVGQVVMVE1JTklNVU1TV0FQIDE2MDAwICAgICAgICAvKiBraWxvYnl0ZXMgKi8KLWludCBtZW1vcnlfb2JqZWN0X2luZGV4OwotaW50IG1pbmltdW1fc3dhcDsKK3N0YXRpYyBpbnQgbWluaW11bV9zd2FwOwogCiAvKiogSW5pdGlhbGl6ZXMgdGhlIG1lbW9yeSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfbWVtb3J5KHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAgICAgIG1lbW9yeV9vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgNCB9OwotICAgIHN0YXRpYyBvaWQgICAgICBtZW1Td2FwRXJyb3Jfb2lkW10gID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA0LCAxMDAgfTsKLSAgICBzdGF0aWMgb2lkICAgICAgbWVtU3dhcEVyck1zZ19vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgNCwgMTAxIH07CisgICAgY29uc3Qgb2lkICAgICAgbWVtb3J5X29pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA0IH07CisgICAgY29uc3Qgb2lkICAgICAgbWVtU3dhcEVycm9yX29pZFtdICA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgNCwgMTAwIH07CisgICAgY29uc3Qgb2lkICAgICAgbWVtU3dhcEVyck1zZ19vaWRbXSA9IHsgMSwgMywgNiwgMSwgNCwgMSwgMjAyMSwgNCwgMTAxIH07CiAKICAgICBERUJVR01TR1RMKCgibWVtb3J5IiwgIkluaXRpYWxpemluZ1xuIikpOwogCi0gICAgbWVtb3J5X29iamVjdF9pbmRleCA9IE9JRF9MRU5HVEgobWVtb3J5X29pZCk7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXAoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtZW1vcnkiLCBoYW5kbGVfbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtb3J5X29pZCwgbWVtb3J5X29iamVjdF9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9vaWQsIE9JRF9MRU5HVEgobWVtb3J5X29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAxNyk7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtZW1Td2FwRXJyb3IiLCBoYW5kbGVfbWVtb3J5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtU3dhcEVycm9yX29pZCwgbWVtb3J5X29iamVjdF9pbmRleCsxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtU3dhcEVycm9yX29pZCwgT0lEX0xFTkdUSChtZW1Td2FwRXJyb3Jfb2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSk7CiAgICAgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIoCiAgICAgICAgIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCJtZW1Td2FwRXJyTXNnIiwgaGFuZGxlX21lbW9yeSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtU3dhcEVyck1zZ19vaWQsIG1lbW9yeV9vYmplY3RfaW5kZXgrMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgbWVtU3dhcEVyck1zZ19vaWQsIE9JRF9MRU5HVEgobWVtU3dhcEVyck1zZ19vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUk9OTFkpKTsKIAogICAgIHNubXBkX3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzd2FwIiwgbWVtb3J5X3BhcnNlX2NvbmZpZywKQEAgLTc0LDcgKzcyLDcgQEAKICAgICBzd2l0Y2ggKHJlcWluZm8tPm1vZGUpIHsKICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBuZXRzbm1wX21lbW9yeV9sb2FkKCk7Ci0gICAgICAgIHN3aXRjaCAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVsgbWVtb3J5X29iamVjdF9pbmRleCBdKSB7CisgICAgICAgIHN3aXRjaCAocmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVsgcmVnaW5mby0+cm9vdG9pZF9sZW4gLSAyIF0pIHsKICAgICAgICAgY2FzZSBNRU1PUllfSU5ERVg6CiAgICAgICAgICAgICB2YWwgPSAwOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0yMDQsOCArMjAyLDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopYnVmLCBzdHJsZW4oYnVmKSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIG9iamVjdCAoJWx1KSBpbiBoYW5kbGVfbWVtb3J5XG4iLAotICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZVsgbWVtb3J5X29iamVjdF9pbmRleCBdKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBvYmplY3QgKCUiIE5FVFNOTVBfUFJJbyAidSkgaW4gaGFuZGxlX21lbW9yeVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbIHJlZ2luZm8tPnJvb3RvaWRfbGVuIC0gMiBdKTsKIE5PU1VDSDoKICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX05PU1VDSE9CSkVDVCApOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuYwppbmRleCAzMThlZWUwLi43ODZlNWViIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmMKQEAgLTMwLDEwICszMCwxMyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIiAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIiAvKiB1dGlsaXR5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwogI2luY2x1ZGUgIm1lbW9yeS5oIiAgICAgICAgICAgICAvKiB0aGUgbW9kdWxlLXNwZWNpZmljIGhlYWRlciAqLwogI2luY2x1ZGUgIm1lbW9yeV9haXg0LmgiICAgIC8qIHRoZSBtb2R1bGUtc3BlY2lmaWMgaGVhZGVyICovCiAKKyNpZmRlZiBIQVZFX1NZU19QUk9UT1NXX0gKKyNpbmNsdWRlIDxzeXMvcHJvdG9zdy5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGlicGVyZnN0YXQuaD4KICNpbmNsdWRlIDxzeXMvc3RhdC5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNTUsMzggKzU4LDQwIEBACiB7CiAKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfbWVtX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMU1dBUH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUx9fSwKLSAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUFRYVH19LAotICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVVTRURSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMRlJFRX19LAotICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVNIQVJFRH19LAotICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1CVUZGRVJ9fSwKLSAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9SRkxBR319LAotICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCisgICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMU1dBUH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUx9fSwKKyAgICAgICAge01FTUFWQUlMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUFRYVH19LAorICAgICAgICB7TUVNVVNFRFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURTV0FQVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAorICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVVTRURSRUFMVFhUfX0sCisgICAgICAgIHtNRU1UT1RBTEZSRUUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMRlJFRX19LAorICAgICAgICB7TUVNU1dBUE1JTklNVU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCisgICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNIQVJFRH19LAorICAgICAgICB7TUVNQlVGRkVSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1CVUZGRVJ9fSwKKyAgICAgICAge01FTUNBQ0hFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCisgICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQogICAgIH07CiAKICAgICAvKgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9haXg0LmgKaW5kZXggOWY1ODA0MS4uYzM5NTk2YyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2FpeDQuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfYWl4NC5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTUVNT1JZX0FJWDRfSAogI2RlZmluZSBfTUlCR1JPVVBfTUVNT1JZX0FJWDRfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiB2b2lkICAgICAgICAgICAgaW5pdF9tZW1vcnlfYWl4NCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5jCmluZGV4IDc5Y2M0YzkuLjc0ZDUzNjUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuYwpAQCAtNDQsNyArNDQsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJtZW1vcnkuaCIKICNpbmNsdWRlICJtZW1vcnlfZGFyd2luNy5oIgogCkBAIC03MywyMyArNzMsNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQfX0sCi0gICAgICAgIHtNRU1BVkFJTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxSRUFMfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVBUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTFRYVH19LAotICAgICAgICB7TUVNVVNFRFJFQUxUWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVNXQVBNSU5JTVVNfX0sCi0gICAgICAgIHtNRU1TSEFSRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQ0FDSEVEfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2RhcndpbjcuaAppbmRleCBlZmE5OWM4Li5hYjVkMjY0IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZGFyd2luNy5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9kYXJ3aW43LmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9NRU1PUllfREFSV0lON19ICiAjZGVmaW5lIF9NSUJHUk9VUF9NRU1PUllfREFSV0lON19ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIGV4dGVybiB2b2lkICAgICBpbml0X21lbW9yeV9kYXJ3aW43KHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2R5bml4LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYwppbmRleCBiMWQ2Y2IzLi4yNjFjNGNkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguYwpAQCAtMTcsNyArMTcsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2F1dG9fbmxpc3QuaD4KIAogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIiAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIiAvKiB1dGlsaXR5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwogI2luY2x1ZGUgIm1lbW9yeS5oIiAgICAgICAgICAgICAvKiB0aGUgbW9kdWxlLXNwZWNpZmljIGhlYWRlciAqLwogI2luY2x1ZGUgIm1lbW9yeV9keW5peC5oIiAgICAgICAvKiB0aGUgbW9kdWxlLXNwZWNpZmljIGhlYWRlciAqLwogCkBAIC0zNCwzOCArMzQsNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZHluaXguaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5oCmluZGV4IDBhNjk5OGQuLjRmYjUyOTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9keW5peC5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTUVNT1JZX0RZTklYX0gKICNkZWZpbmUgX01JQkdST1VQX01FTU9SWV9EWU5JWF9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfZnJlZWJzZDIuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jCmluZGV4IDJiZWU1MTcuLjIyZGRlNGMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9mcmVlYnNkMi5jCkBAIC04NywzOCArODcsNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X2hwdXguYwppbmRleCA1YmY5OWFkLi5jMmIyNDc4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfaHB1eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9ocHV4LmMKQEAgLTQ5LDM4ICs0OSw0MCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX21lbV92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMU1dBUH19LAotICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFNXQVB9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMfX0sCi0gICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUFWQUlMUkVBTH19LAotICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVBUWFR9fSwKLSAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEU1dBUFRYVH19LAotICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFJFQUxUWFR9fSwKLSAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1VU0VEUkVBTFRYVH19LAotICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTEZSRUV9fSwKLSAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TV0FQTUlOSU1VTX19LAotICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1TSEFSRUR9fSwKLSAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQlVGRkVSfX0sCi0gICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUNBQ0hFRH19LAotICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JNU0d9fQorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtNRU1UT1RBTFNXQVAsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMU1dBUH19LAorICAgICAgICB7TUVNQVZBSUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFNXQVB9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMfX0sCisgICAgICAgIHtNRU1BVkFJTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUFWQUlMUkVBTH19LAorICAgICAgICB7TUVNVE9UQUxTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVBUWFR9fSwKKyAgICAgICAge01FTVVTRURTV0FQVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEU1dBUFRYVH19LAorICAgICAgICB7TUVNVE9UQUxSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFJFQUxUWFR9fSwKKyAgICAgICAge01FTVVTRURSRUFMVFhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1VU0VEUkVBTFRYVH19LAorICAgICAgICB7TUVNVE9UQUxGUkVFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTEZSRUV9fSwKKyAgICAgICAge01FTVNXQVBNSU5JTVVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TV0FQTUlOSU1VTX19LAorICAgICAgICB7TUVNU0hBUkVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1TSEFSRUR9fSwKKyAgICAgICAge01FTUJVRkZFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQlVGRkVSfX0sCisgICAgICAgIHtNRU1DQUNIRUQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUNBQ0hFRH19LAorICAgICAgICB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUkZMQUd9fSwKKyAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KICAgICB9OwogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5jCmluZGV4IDY2MzI5MjEuLjNkMjZhNDQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuYwpAQCAtNDcsNyArNDcsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJtZW1vcnkuaCIKICNpbmNsdWRlICJtZW1vcnlfbmV0YnNkMS5oIgogCkBAIC03NSwzOCArNzUsNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X25ldGJzZDEuaAppbmRleCBhOTM3NTRhLi5hMTk1Zjg1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfbmV0YnNkMS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9uZXRic2QxLmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9NRU1PUllfTkVUQlNEMV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9NRU1PUllfTkVUQlNEMV9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIGV4dGVybiB2b2lkICAgICBpbml0X21lbW9yeV9uZXRic2QxKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvbWVtb3J5X3NvbGFyaXMyLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYwppbmRleCAzM2Y0MWIyLi4yZDM2Mjc4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIiAgICAgICAgIC8qIHV0aWxpdHkgZnVuY3Rpb24gZGVjbGFyYXRpb25zICovCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIiAvKiB1dGlsaXR5IGZ1bmN0aW9uIGRlY2xhcmF0aW9ucyAqLwogI2luY2x1ZGUgIm1lbW9yeS5oIiAgICAgICAgICAgICAvKiB0aGUgbW9kdWxlLXNwZWNpZmljIGhlYWRlciAqLwogI2luY2x1ZGUgIm1lbW9yeV9zb2xhcmlzMi5oIiAgICAvKiB0aGUgbW9kdWxlLXNwZWNpZmljIGhlYWRlciAqLwogCkBAIC00MiwzOCArNDIsNDAgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9tZW1fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1UT1RBTFNXQVB9fSwKLSAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNQVZBSUxTV0FQfX0sCi0gICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTVRPVEFMUkVBTH19LAotICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1BVkFJTFJFQUx9fSwKLSAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxTV0FQVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFNXQVBUWFR9fSwKLSAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxSRUFMVFhUfX0sCi0gICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVVNFRFJFQUxUWFR9fSwKLSAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNVE9UQUxGUkVFfX0sCi0gICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU1dBUE1JTklNVU19fSwKLSAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7TUVNU0hBUkVEfX0sCi0gICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfbWVtLCAxLAotICAgICAgICAge01FTUJVRkZFUn19LAotICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwKLSAgICAgICAgIHtNRU1DQUNIRUR9fSwKLSAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsCi0gICAgICAgICB7RVJST1JGTEFHfX0sCi0gICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STVNHfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7TUVNVE9UQUxTV0FQLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1UT1RBTFNXQVB9fSwKKyAgICAgICAge01FTUFWQUlMU1dBUCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNQVZBSUxTV0FQfX0sCisgICAgICAgIHtNRU1UT1RBTFJFQUwsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTVRPVEFMUkVBTH19LAorICAgICAgICB7TUVNQVZBSUxSRUFMLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1BVkFJTFJFQUx9fSwKKyAgICAgICAge01FTVRPVEFMU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxTV0FQVFhUfX0sCisgICAgICAgIHtNRU1VU0VEU1dBUFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFNXQVBUWFR9fSwKKyAgICAgICAge01FTVRPVEFMUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxSRUFMVFhUfX0sCisgICAgICAgIHtNRU1VU0VEUkVBTFRYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVVNFRFJFQUxUWFR9fSwKKyAgICAgICAge01FTVRPVEFMRlJFRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNVE9UQUxGUkVFfX0sCisgICAgICAgIHtNRU1TV0FQTUlOSU1VTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU1dBUE1JTklNVU19fSwKKyAgICAgICAge01FTVNIQVJFRCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7TUVNU0hBUkVEfX0sCisgICAgICAgIHtNRU1CVUZGRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX21lbSwgMSwge01FTUJVRkZFUn19LAorICAgICAgICB7TUVNQ0FDSEVELCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtNRU1DQUNIRUR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfbWVtLCAxLCB7RVJST1JGTEFHfX0sCisgICAgICAgIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV9tZW0sIDEsIHtFUlJPUk1TR319CiAgICAgfTsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9tZW1vcnlfc29sYXJpczIuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oCmluZGV4IDMzNmIzZGQuLmZmZjVmNzkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL21lbW9yeV9zb2xhcmlzMi5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfTUVNT1JZX1NPTEFSSVMyX0gKICNkZWZpbmUgX01JQkdST1VQX01FTU9SWV9TT0xBUklTMl9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIHZvaWQgICAgICAgICAgICBpbml0X21lbW9yeV9zb2xhcmlzMih2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3MuYwppbmRleCBhNDJhOTFiLi44ZDYwMmMxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzcy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yMyw5ICsyNCw2IEBACiAjaWZkZWYgSEFWRV9MSU1JVFNfSAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZmRlZiBXSU4zMgogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCkBAIC0zOSw2ICszNyw5IEBACiAjaW5jbHVkZSAiZXh0ZW5zaWJsZS5oIgogI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZ2V0X2V4dGVuX2luc3RhbmNlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocGFyc2VfbWlib2lkKQorCiBzdHJ1Y3QgZXh0ZW5zaWJsZSAqcGFzc3RocnVzID0gTlVMTDsKIGludCAgICAgICAgICAgICBudW1wYXNzdGhydXMgPSAwOwogCkBAIC00OSw3ICs1MCw4IEBACiAgICAgLyoKICAgICAgKiBib2d1cyBlbnRyeS4gIE9ubHkgc29tZSBvZiBpdCBpcyBhY3R1YWxseSB1c2VkLiAKICAgICAgKi8KLSAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3Bhc3MsIDAsIHtNSUJJTkRFWH19LAorICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgdmFyX2V4dGVuc2libGVfcGFzcywgMCwge01JQklOREVYfX0sCiB9OwogCiAKQEAgLTgwLDcgKzgyLDcgQEAKIAkvKiBjaGFuZ2UgcHJpb3JpdHkgbGV2ZWwgKi8KIAljcHRyKys7CiAJY3B0ciA9IHNraXBfd2hpdGUoY3B0cik7Ci0JaWYgKCEgaXNkaWdpdCgqY3B0cikpIHsKKwlpZiAoISBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqY3B0cikpKSB7CiAJICBjb25maWdfcGVycm9yKCJwcmlvcml0eSBtdXN0IGJlIGFuIGludGVnZXIiKTsKIAkgIHJldHVybjsKIAl9CkBAIC0xMDMsNyArMTA1LDcgQEAKICAgICAgKi8KICAgICBpZiAoKmNwdHIgPT0gJy4nKQogICAgICAgICBjcHRyKys7Ci0gICAgaWYgKCFpc2RpZ2l0KCpjcHRyKSkgeworICAgIGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkgewogICAgICAgICBjb25maWdfcGVycm9yKCJzZWNvbmQgdG9rZW4gaXMgbm90IGEgT0lEIik7CiAgICAgICAgIHJldHVybjsKICAgICB9CkBAIC0xMTUsOSArMTE3LDEwIEBACiAgICAgaWYgKCpwcGFzcyA9PSBOVUxMKQogICAgICAgICByZXR1cm47CiAgICAgKCpwcGFzcyktPnR5cGUgPSBQQVNTVEhSVTsKKyAgICAoKnBwYXNzKS0+bWlicHJpb3JpdHkgPSBwcmlvcml0eTsKIAogICAgICgqcHBhc3MpLT5taWJsZW4gPSBwYXJzZV9taWJvaWQoY3B0ciwgKCpwcGFzcyktPm1pYm9pZCk7Ci0gICAgd2hpbGUgKGlzZGlnaXQoKmNwdHIpIHx8ICpjcHRyID09ICcuJykKKyAgICB3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSB8fCAqY3B0ciA9PSAnLicpCiAgICAgICAgIGNwdHIrKzsKICAgICAvKgogICAgICAqIHBhdGgKQEAgLTEzNCw5ICsxMzcsMTAgQEAKICAgICBzdHJsY3B5KCgqcHBhc3MpLT5uYW1lLCAoKnBwYXNzKS0+Y29tbWFuZCwgc2l6ZW9mKCgqcHBhc3MpLT5uYW1lKSk7CiAgICAgKCpwcGFzcyktPm5leHQgPSBOVUxMOwogCi0gICAgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCJwYXNzIiwgKHN0cnVjdCB2YXJpYWJsZSAqKSBleHRlbnNpYmxlX3Bhc3N0aHJ1X3ZhcmlhYmxlcywKLQkJCSAgc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZTIpLAotCQkJICAxLCAoKnBwYXNzKS0+bWlib2lkLCAoKnBwYXNzKS0+bWlibGVuLCBwcmlvcml0eSk7CisgICAgcmVnaXN0ZXJfbWliX3ByaW9yaXR5KCJwYXNzIiwKKyAgICAgICAgICAgICAgICAgKHN0cnVjdCB2YXJpYWJsZSAqKSBleHRlbnNpYmxlX3Bhc3N0aHJ1X3ZhcmlhYmxlcywKKyAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB2YXJpYWJsZTIpLCAxLCAoKnBwYXNzKS0+bWlib2lkLAorICAgICAgICAgICAgICAgICAoKnBwYXNzKS0+bWlibGVuLCAoKnBwYXNzKS0+bWlicHJpb3JpdHkpOwogCiAgICAgLyoKICAgICAgKiBhcmdnZ2cgLS0gcGFzc3RocnVzIG11c3QgYmUgc29ydGVkIApAQCAtMTQ4LDcgKzE1Miw3IEBACiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgZm9yIChpID0gMCwgcHRtcCA9IChzdHJ1Y3QgZXh0ZW5zaWJsZSAqKSBwYXNzdGhydXM7Ci0gICAgICAgICAgICAgaSA8IG51bXBhc3N0aHJ1cyAmJiBwdG1wICE9IDA7IGkrKywgcHRtcCA9IHB0bXAtPm5leHQpCisgICAgICAgICAgICAgaSA8IG51bXBhc3N0aHJ1cyAmJiBwdG1wICE9IE5VTEw7IGkrKywgcHRtcCA9IHB0bXAtPm5leHQpCiAgICAgICAgICAgICBldG1wW2ldID0gcHRtcDsKICAgICAgICAgcXNvcnQoZXRtcCwgbnVtcGFzc3RocnVzLCBzaXplb2Yoc3RydWN0IGV4dGVuc2libGUgKiksCiAgICAgICAgICAgICAgIHBhc3NfY29tcGFyZSk7CkBAIC0xNzIsNyArMTc2LDcgQEAKICAgICBmb3IgKGV0bXAgPSBwYXNzdGhydXM7IGV0bXAgIT0gTlVMTDspIHsKICAgICAgICAgZXRtcDIgPSBldG1wOwogICAgICAgICBldG1wID0gZXRtcC0+bmV4dDsKLSAgICAgICAgdW5yZWdpc3Rlcl9taWIoZXRtcDItPm1pYm9pZCwgZXRtcDItPm1pYmxlbik7CisgICAgICAgIHVucmVnaXN0ZXJfbWliX3ByaW9yaXR5KGV0bXAyLT5taWJvaWQsIGV0bXAyLT5taWJsZW4sIGV0bXAyLT5taWJwcmlvcml0eSk7CiAgICAgICAgIGZyZWUoZXRtcDIpOwogICAgIH0KICAgICBwYXNzdGhydXMgPSBOVUxMOwpAQCAtMzAwLDEyICszMDQsNyBAQAogICAgICAgICAgICAgZXhlY19jb21tYW5kKHBhc3N0aHJ1KTsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9wYXNzIiwgInBhc3MtcnVubmluZyByZXR1cm5lZDogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgcGFzc3RocnUtPm91dHB1dCkpOwotICAgICAgICAgICAgaWYgKCFzdHJuY2FzZWNtcChwYXNzdGhydS0+b3V0cHV0LCAibm90LXdyaXRhYmxlIiwgMTIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAocGFzc3RocnUtPm91dHB1dCwgIndyb25nLXR5cGUiLCAxMCkpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICByZXR1cm4gbmV0c25tcF9pbnRlcm5hbF9wYXNzX3N0cl90b19lcnJubyhwYXNzdGhydS0+b3V0cHV0KTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5jCmluZGV4IGFjZTBmMDcuLmUzZDlhMDEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uYwpAQCAtNjEsNiArNjEsNTEgQEAKICAgICByZXR1cm4gMyAqIG4gLSAxOwogfQogCitpbnQKK25ldHNubXBfaW50ZXJuYWxfcGFzc19zdHJfdG9fZXJybm8oY29uc3QgY2hhciAqYnVmKQoreworICAgIGlmICghc3RybmNhc2VjbXAoYnVmLCAidG9vLWJpZyIsIDcpKSB7CisgICAgICAgIC8qIFNob3VsZG4ndCBoYXBwZW4gKi8KKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1RPT0JJRzsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJuby1zdWNoLW5hbWUiLCAxMikpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PU1VDSE5BTUU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiYmFkLXZhbHVlIiwgOSkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0JBRFZBTFVFOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgInJlYWQtb25seSIsIDkpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRUFET05MWTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJnZW4tZXJyb3IiLCA5KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgIm5vLWFjY2VzcyIsIDkpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0FDQ0VTUzsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy10eXBlIiwgMTApKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctbGVuZ3RoIiwgMTIpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy1lbmNvZGluZyIsIDE0KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdFTkNPRElORzsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy12YWx1ZSIsIDExKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJuby1jcmVhdGlvbiIsIDExKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJpbmNvbnNpc3RlbnQtdmFsdWUiLCAxOCkpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgInJlc291cmNlLXVuYXZhaWxhYmxlIiwgMjApKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFOworICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImNvbW1pdC1mYWlsZWQiLCAxMykpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0NPTU1JVEZBSUxFRDsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ1bmRvLWZhaWxlZCIsIDExKSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfVU5ET0ZBSUxFRDsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJhdXRob3JpemF0aW9uLWVycm9yIiwgMTkpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9BVVRIT1JJWkFUSU9ORVJST1I7CisgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAibm90LXdyaXRhYmxlIiwgMTIpKSB7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT1RXUklUQUJMRTsKKyAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJpbmNvbnNpc3RlbnQtbmFtZSIsIDE3KSkgeworICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UTkFNRTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKwogdW5zaWduZWQgY2hhciAqCiBuZXRzbm1wX2ludGVybmFsX3Bhc3NfcGFyc2UoY2hhciAqIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogYnVmMiwKQEAgLTgyLDcgKzEyNywxOSBAQAogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihidWYyKTsKICAgICAgICAgdnAtPnR5cGUgPSBBU05fT0NURVRfU1RSOwogICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBjaGFyICopIGJ1ZjIpOwotICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImludGVnZXIiLCA3KSkgeworICAgIH0KKyNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKKyAgICBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiaW50ZWdlcjY0IiwgOSkpIHsKKyAgICAgICAgc3RhdGljIHN0cnVjdCBjb3VudGVyNjQgYzY0OworICAgICAgICB1aW50NjRfdCB2NjQgPSBzdHJ0b3VsbChidWYyLCBOVUxMLCAxMCk7CisgICAgICAgIGM2NC5oaWdoID0gKHVuc2lnbmVkIGxvbmcpKHY2NCA+PiAzMik7CisgICAgICAgIGM2NC5sb3cgID0gKHVuc2lnbmVkIGxvbmcpKHY2NCAmIDB4ZmZmZmZmZmYpOworICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihjNjQpOworICAgICAgICB2cC0+dHlwZSA9IEFTTl9JTlRFR0VSNjQ7CisgICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGNoYXIgKikgJmM2NCk7CisgICAgfQorI2VuZGlmCisgICAgZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImludGVnZXIiLCA3KSkgewogICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihsb25nX3JldCk7CiAgICAgICAgIGxvbmdfcmV0ID0gc3RydG9sKGJ1ZjIsIE5VTEwsIDEwKTsKICAgICAgICAgdnAtPnR5cGUgPSBBU05fSU5URUdFUjsKQEAgLTkyLDcgKzE0OSwxNyBAQAogICAgICAgICBsb25nX3JldCA9IHN0cnRvdWwoYnVmMiwgTlVMTCwgMTApOwogICAgICAgICB2cC0+dHlwZSA9IEFTTl9VTlNJR05FRDsKICAgICAgICAgcmV0dXJuICgodW5zaWduZWQgY2hhciAqKSAmbG9uZ19yZXQpOwotICAgIH0gZWxzZSBpZiAoIXN0cm5jYXNlY21wKGJ1ZiwgImNvdW50ZXIiLCA3KSkgeworICAgIH0KKyAgICBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiY291bnRlcjY0IiwgOSkpIHsKKyAgICAgICAgc3RhdGljIHN0cnVjdCBjb3VudGVyNjQgYzY0OworICAgICAgICB1aW50NjRfdCB2NjQgPSBzdHJ0b3VsbChidWYyLCBOVUxMLCAxMCk7CisgICAgICAgIGM2NC5oaWdoID0gKHVuc2lnbmVkIGxvbmcpKHY2NCA+PiAzMik7CisgICAgICAgIGM2NC5sb3cgID0gKHVuc2lnbmVkIGxvbmcpKHY2NCAmIDB4ZmZmZmZmZmYpOworICAgICAgICAqdmFyX2xlbiA9IHNpemVvZihjNjQpOworICAgICAgICB2cC0+dHlwZSA9IEFTTl9DT1VOVEVSNjQ7CisgICAgICAgIHJldHVybiAoKHVuc2lnbmVkIGNoYXIgKikgJmM2NCk7CisgICAgfQorICAgIGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJjb3VudGVyIiwgNykpIHsKICAgICAgICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZ19yZXQpOwogICAgICAgICBsb25nX3JldCA9IHN0cnRvdWwoYnVmMiwgTlVMTCwgMTApOwogICAgICAgICB2cC0+dHlwZSA9IEFTTl9DT1VOVEVSOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Bhc3NfY29tbW9uLmgKaW5kZXggMmNlNmFmZC4uYjFkN2U0YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19jb21tb24uaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX2NvbW1vbi5oCkBAIC02LDYgKzYsOSBAQAogICogb3IgZGlzYXBwZWFyIGF0IGFueSB0aW1lCiAgKi8KIAoraW50CituZXRzbm1wX2ludGVybmFsX3Bhc3Nfc3RyX3RvX2Vycm5vKGNvbnN0IGNoYXIgKmJ1Zik7CisKIHVuc2lnbmVkIGNoYXIgKgogbmV0c25tcF9pbnRlcm5hbF9wYXNzX3BhcnNlKGNoYXIgKmJ1ZiwgY2hhciAqYnVmMiwgc2l6ZV90ICp2YXJfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YXJpYWJsZSAqdnApOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcGFzc19wZXJzaXN0LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYwppbmRleCBjM2YzODk5Li44NDY3ZTE5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wYXNzX3BlcnNpc3QuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9JT19ICiAjaW5jbHVkZSA8aW8uaD4KQEAgLTI1LDkgKzI2LDYgQEAKICNpZmRlZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmZGVmIFdJTjMyCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKQEAgLTQ0LDEyICs0MiwxNSBAQAogI2luY2x1ZGUgImV4dGVuc2libGUuaCIKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGdldF9leHRlbl9pbnN0YW5jZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHBhcnNlX21pYm9pZCkKKwogc3RydWN0IGV4dGVuc2libGUgKnBlcnNpc3RwYXNzdGhydXMgPSBOVUxMOwogaW50ICAgICAgICAgICAgIG51bXBlcnNpc3RwYXNzdGhydXMgPSAwOwogc3RydWN0IHBlcnNpc3RfcGlwZV90eXBlIHsKICAgICBGSUxFICAgICAgICAgICAqZkluLCAqZk91dDsKICAgICBpbnQgICAgICAgICAgICAgZmRJbiwgZmRPdXQ7Ci0gICAgaW50ICAgICAgICAgICAgIHBpZDsKKyAgICBuZXRzbm1wX3BpZF90ICAgcGlkOwogfSAgICAgICAgICAgICAgKnBlcnNpc3RfcGlwZXMgPSAoc3RydWN0IHBlcnNpc3RfcGlwZV90eXBlICopIE5VTEw7CiBzdGF0aWMgdW5zaWduZWQgcGlwZV9jaGVja19hbGFybV9pZDsKIHN0YXRpYyBpbnQgICAgICBpbml0X3BlcnNpc3RfcGlwZXModm9pZCk7CkBAIC02Niw4ICs2Nyw4IEBACiAgICAgLyoKICAgICAgKiBib2d1cyBlbnRyeS4gIE9ubHkgc29tZSBvZiBpdCBpcyBhY3R1YWxseSB1c2VkLiAKICAgICAgKi8KLSAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3Bhc3NfcGVyc2lzdCwgMCwKLSAgICAge01JQklOREVYfX0sCisgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICB2YXJfZXh0ZW5zaWJsZV9wYXNzX3BlcnNpc3QsIDAsIHtNSUJJTkRFWH19LAogfTsKIAogdm9pZApAQCAtMTExLDcgKzExMiw3IEBACiAJLyogY2hhbmdlIHByaW9yaXR5IGxldmVsICovCiAJY3B0cisrOwogCWNwdHIgPSBza2lwX3doaXRlKGNwdHIpOwotCWlmICghIGlzZGlnaXQoKmNwdHIpKSB7CisJaWYgKCEgaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSkgewogCSAgY29uZmlnX3BlcnJvcigicHJpb3JpdHkgbXVzdCBiZSBhbiBpbnRlZ2VyIik7CiAJICByZXR1cm47CiAJfQpAQCAtMTM0LDcgKzEzNSw3IEBACiAgICAgICovCiAgICAgaWYgKCpjcHRyID09ICcuJykKICAgICAgICAgY3B0cisrOwotICAgIGlmICghaXNkaWdpdCgqY3B0cikpIHsKKyAgICBpZiAoIWlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpjcHRyKSkpIHsKICAgICAgICAgY29uZmlnX3BlcnJvcigic2Vjb25kIHRva2VuIGlzIG5vdCBhIE9JRCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTQ2LDkgKzE0NywxMCBAQAogICAgIGlmICgqcHBhc3MgPT0gTlVMTCkKICAgICAgICAgcmV0dXJuOwogICAgICgqcHBhc3MpLT50eXBlID0gUEFTU1RIUlVfUEVSU0lTVDsKKyAgICAoKnBwYXNzKS0+bWlicHJpb3JpdHkgPSBwcmlvcml0eTsKIAogICAgICgqcHBhc3MpLT5taWJsZW4gPSBwYXJzZV9taWJvaWQoY3B0ciwgKCpwcGFzcyktPm1pYm9pZCk7Ci0gICAgd2hpbGUgKGlzZGlnaXQoKmNwdHIpIHx8ICpjcHRyID09ICcuJykKKyAgICB3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwdHIpKSB8fCAqY3B0ciA9PSAnLicpCiAgICAgICAgIGNwdHIrKzsKICAgICAvKgogICAgICAqIHBhdGgKQEAgLTE2OCw3ICsxNzAsNyBAQAogICAgIHJlZ2lzdGVyX21pYl9wcmlvcml0eSgicGFzc19wZXJzaXN0IiwKICAgICAgICAgICAgICAgICAgKHN0cnVjdCB2YXJpYWJsZSAqKSBleHRlbnNpYmxlX3BlcnNpc3RfcGFzc3RocnVfdmFyaWFibGVzLAogICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHZhcmlhYmxlMiksIDEsICgqcHBhc3MpLT5taWJvaWQsCi0gICAgICAgICAgICAgICAgICgqcHBhc3MpLT5taWJsZW4sIHByaW9yaXR5KTsKKyAgICAgICAgICAgICAgICAgKCpwcGFzcyktPm1pYmxlbiwgKCpwcGFzcyktPm1pYnByaW9yaXR5KTsKIAogICAgIC8qCiAgICAgICogYXJnZ2dnIC0tIHBhc3RocnVzIG11c3QgYmUgc29ydGVkIApAQCAtMTc5LDcgKzE4MSw3IEBACiAgICAgICAgIGlmIChldG1wID09IE5VTEwpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZvciAoaSA9IDAsIHB0bXAgPSAoc3RydWN0IGV4dGVuc2libGUgKikgcGVyc2lzdHBhc3N0aHJ1czsKLSAgICAgICAgICAgICBpIDwgbnVtcGVyc2lzdHBhc3N0aHJ1cyAmJiBwdG1wICE9IDA7IGkrKywgcHRtcCA9IHB0bXAtPm5leHQpCisgICAgICAgICAgICAgaSA8IG51bXBlcnNpc3RwYXNzdGhydXMgJiYgcHRtcCAhPSBOVUxMOyBpKyssIHB0bXAgPSBwdG1wLT5uZXh0KQogICAgICAgICAgICAgZXRtcFtpXSA9IHB0bXA7CiAgICAgICAgIHFzb3J0KGV0bXAsIG51bXBlcnNpc3RwYXNzdGhydXMsIHNpemVvZihzdHJ1Y3QgZXh0ZW5zaWJsZSAqKSwKICAgICAgICAgICAgICAgcGFzc19wZXJzaXN0X2NvbXBhcmUpOwpAQCAtMTk5LDEzICsyMDEsMTkgQEAKIHBhc3NfcGVyc2lzdF9mcmVlX2NvbmZpZyh2b2lkKQogewogICAgIHN0cnVjdCBleHRlbnNpYmxlICpldG1wLCAqZXRtcDI7CisgICAgaW50IGk7CiAKICAgICBmb3IgKGV0bXAgPSBwZXJzaXN0cGFzc3RocnVzOyBldG1wICE9IE5VTEw7KSB7CiAgICAgICAgIGV0bXAyID0gZXRtcDsKICAgICAgICAgZXRtcCA9IGV0bXAtPm5leHQ7Ci0gICAgICAgIHVucmVnaXN0ZXJfbWliKGV0bXAyLT5taWJvaWQsIGV0bXAyLT5taWJsZW4pOworICAgICAgICB1bnJlZ2lzdGVyX21pYl9wcmlvcml0eShldG1wMi0+bWlib2lkLCBldG1wMi0+bWlibGVuLCBldG1wMi0+bWlicHJpb3JpdHkpOwogICAgICAgICBmcmVlKGV0bXAyKTsKICAgICB9CisgICAgaWYgKHBlcnNpc3RfcGlwZXMpIHsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8PSBudW1wZXJzaXN0cGFzc3RocnVzOyBpKyspIHsKKyAgICAgICAgICAgIGNsb3NlX3BlcnNpc3RfcGlwZShpKTsKKyAgICAgICAgfQorICAgIH0KICAgICBwZXJzaXN0cGFzc3RocnVzID0gTlVMTDsKICAgICBudW1wZXJzaXN0cGFzc3RocnVzID0gMDsKIH0KQEAgLTM4MSwxOCArMzg5LDcgQEAKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9UV1JJVEFCTEU7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmICghc3RybmNhc2VjbXAoYnVmLCAibm90LXdyaXRhYmxlIiwgMTIpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAid3JvbmctdHlwZSIsIDEwKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1RZUEU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy1sZW5ndGgiLCAxMikpIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdMRU5HVEg7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY2FzZWNtcChidWYsICJ3cm9uZy12YWx1ZSIsIDExKSkgewotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR1ZBTFVFOwotICAgICAgICAgICAgfSBlbHNlIGlmICghc3RybmNhc2VjbXAoYnVmLCAiaW5jb25zaXN0ZW50LXZhbHVlIiwgMTgpKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICByZXR1cm4gbmV0c25tcF9pbnRlcm5hbF9wYXNzX3N0cl90b19lcnJubyhidWYpOwogICAgICAgICB9CiAgICAgfQogICAgIGlmIChzbm1wX2dldF9kb19kZWJ1Z2dpbmcoKSkgewpAQCAtNDQwLDcgKzQzNyw3IEBACiAgICAgICAgIGZvciAoaSA9IDA7IGkgPD0gbnVtcGVyc2lzdHBhc3N0aHJ1czsgaSsrKSB7CiAgICAgICAgICAgICBwZXJzaXN0X3BpcGVzW2ldLmZJbiA9IHBlcnNpc3RfcGlwZXNbaV0uZk91dCA9IChGSUxFICopIDA7CiAgICAgICAgICAgICBwZXJzaXN0X3BpcGVzW2ldLmZkSW4gPSBwZXJzaXN0X3BpcGVzW2ldLmZkT3V0ID0gLTE7Ci0gICAgICAgICAgICBwZXJzaXN0X3BpcGVzW2ldLnBpZCA9IC0xOworICAgICAgICAgICAgcGVyc2lzdF9waXBlc1tpXS5waWQgPSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUzsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gcGVyc2lzdF9waXBlcyA/IDEgOiAwOwpAQCAtNDU0LDcgKzQ1MSw3IEBACiAgKi8KIHN0YXRpYyBpbnQgcHJvY2Vzc19zdG9wcGVkKGludCBpZHgpCiB7Ci0gICAgaWYgKHBlcnNpc3RfcGlwZXNbaWR4XS5waWQgIT0gLTEpIHsKKyAgICBpZiAocGVyc2lzdF9waXBlc1tpZHhdLnBpZCAhPSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUykgewogI2lmIEhBVkVfU1lTX1dBSVRfSAogICAgICAgICByZXR1cm4gd2FpdHBpZChwZXJzaXN0X3BpcGVzW2lkeF0ucGlkLCBOVUxMLCBXTk9IQU5HKSA+IDA7CiAjZW5kaWYKQEAgLTUyMSwxNCArNTE4LDE1IEBACiAgICAgLyoKICAgICAgKiBPcGVuIGlmIGl0J3Mgbm90IGFscmVhZHkgb3BlbiAKICAgICAgKi8KLSAgICBpZiAocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCA9PSAtMSkgewotICAgICAgICBpbnQgICAgICAgICAgICAgZmRJbiwgZmRPdXQsIHBpZDsKKyAgICBpZiAocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCA9PSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUykgeworICAgICAgICBpbnQgICAgICAgICAgICAgZmRJbiwgZmRPdXQ7CisgICAgICAgIG5ldHNubXBfcGlkX3QgICBwaWQ7CiAKICAgICAgICAgLyoKICAgICAgICAgICogRGlkIHdlIGZhaWw/IAogICAgICAgICAgKi8KICAgICAgICAgaWYgKCgwID09IGdldF9leGVjX3BpcGVzKGNvbW1hbmQsICZmZEluLCAmZmRPdXQsICZwaWQpKSB8fAotICAgICAgICAgICAgKHBpZCA9PSAtMSkpIHsKKyAgICAgICAgICAgIChwaWQgPT0gTkVUU05NUF9OT19TVUNIX1BST0NFU1MpKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidWNkLXNubXAvcGFzc19wZXJzaXN0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICJvcGVuX3BlcnNpc3RfcGlwZTogcGlkID09IC0xXG4iKSk7CiAgICAgICAgICAgICByZWN1cnNlID0gMDsKQEAgLTYwNSw3ICs2MDMsNyBAQAogICAgIC8qCiAgICAgICogRG9uJ3Qgd3JpdGUgdG8gYSBub24tZXhpc3RhbnQgcHJvY2VzcyAKICAgICAgKi8KLSAgICBpZiAocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCA9PSAtMSkgeworICAgIGlmIChwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkID09IE5FVFNOTVBfTk9fU1VDSF9QUk9DRVNTKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ1Y2Qtc25tcC9wYXNzX3BlcnNpc3QiLAogICAgICAgICAgICAgICAgICAgICAid3JpdGVfcGVyc2lzdF9waXBlOiBub3Qgd3JpdGluZyAlcywgcHJvY2VzcyBpcyBub24tZXhpc3RlbnQiLAogICAgICAgICAgICAgICAgICAgICBkYXRhKSk7CkBAIC03MjMsMTYgKzcyMSwyMyBAQAogCXVubGluayhmaWZvX291dF9wYXRoKTsKICNlbmRpZgogCi0gICAgaWYgKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgIT0gLTEpIHsKKyAgICBpZiAocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCAhPSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUykgeworICAgICAgICAvKgorICAgICAgICAgKiBraWxsIHRoZSBjaGlsZCwgaW4gY2FzZSB3ZSBnb3QgYW4gZXJyb3IgYW5kIHRoZSBjaGlsZCBpcyBub3QKKyAgICAgICAgICogY29vcGVyYXRpbmcuICBJZ25vcmUgdGhlIHJldHVybiBjb2RlLgorICAgICAgICAgKi8KKyNpZmRlZiBIQVZFX1NJR05BTAorICAgICAgICAodm9pZClraWxsKHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQsIFNJR0tJTEwpOworI2VuZGlmCiAjaWYgSEFWRV9TWVNfV0FJVF9ICi0gICAgICAgIHdhaXRwaWQocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCwgMCwgMCk7CisgICAgICAgIHdhaXRwaWQocGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCwgTlVMTCwgMCk7CiAjZW5kaWYKICNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZCAobWluZ3czMikgJiYgIWRlZmluZWQgKEhBVkVfU0lHTkFMKQotICAgICAgICBpZiAoIUNsb3NlSGFuZGxlKChIQU5ETEUpcGVyc2lzdF9waXBlc1tpaW5kZXhdLnBpZCkpIHsKKyAgICAgICAgaWYgKCFDbG9zZUhhbmRsZShwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkKSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVjZC1zbm1wL3Bhc3NfcGVyc2lzdCIsImNsb3NlX3BlcnNpc3RfcGlwZSBwaWQ6IGNsb3NlIGVycm9yXG4iKSk7CiAgICAgICAgIH0KICNlbmRpZgotICAgICAgICBwZXJzaXN0X3BpcGVzW2lpbmRleF0ucGlkID0gLTE7CisgICAgICAgIHBlcnNpc3RfcGlwZXNbaWluZGV4XS5waWQgPSBORVRTTk1QX05PX1NVQ0hfUFJPQ0VTUzsKICAgICB9CiAKIH0KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb2MuYwppbmRleCA3MjUyMWEwLi5lOTBjMmU4IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm9jLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJvYy5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZmRlZiBzb2xhcmlzMgogI2RlZmluZSBfS01FTVVTRVIgICAgICAgICAgICAgICAvKiBOZWVkZWQgYnkgPHN5cy91c2VyLmg+ICovCkBAIC0yOSwxMSArMzAsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNDUsMTUgKzQyLDE1IEBACiAjaWYgSEFWRV9LVk1fSAogI2luY2x1ZGUgPGt2bS5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgInN0cnVjdC5oIgogI2luY2x1ZGUgInByb2MuaCIKKyNpZmRlZiBVU0lOR19IT1NUX0RBVEFfQUNDRVNTX1NXUlVOX01PRFVMRQorI2luY2x1ZGUgPG5ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmg+CisjZW5kaWYKICNpZmRlZiBVU0lOR19VQ0RfU05NUF9FUlJPUk1JQl9NT0RVTEUKICNpbmNsdWRlICJlcnJvcm1pYi5oIgogI2Vsc2UKQEAgLTc2LDIxICs3MywyNCBAQAogICAgICAqIGluZm9ybWF0aW9uIGF0IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV9wcm9jX3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7UFJPQ01JTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7UFJPQ01JTn19LAotICAgICAgICB7UFJPQ01BWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV9wcm9jLCAxLCB7UFJPQ01BWH19LAotICAgICAgICB7UFJPQ0NPVU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsCi0gICAgICAgICB7UFJPQ0NPVU5UfX0sCi0gICAgICAgIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwKLSAgICAgICAgIHtFUlJPUkZMQUd9fSwKLSAgICAgICAge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwKLSAgICAgICAgIHtFUlJPUk1TR319LAotICAgICAgICB7RVJST1JGSVgsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsCi0gICAgICAgICB7RVJST1JGSVh9fSwKLSAgICAgICAge0VSUk9SRklYQ01ELCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfcHJvYywgMSwKLSAgICAgICAgIHtFUlJPUkZJWENNRH19CisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7UFJPQ01JTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge1BST0NNSU59fSwKKyAgICAgICAge1BST0NNQVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtQUk9DTUFYfX0sCisgICAgICAgIHtQUk9DQ09VTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtQUk9DQ09VTlR9fSwKKyAgICAgICAge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge0VSUk9SRkxBR319LAorICAgICAgICB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge0VSUk9STVNHfX0sCisgICAgICAgIHtFUlJPUkZJWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Byb2MsIDEsIHtFUlJPUkZJWH19LAorICAgICAgICB7RVJST1JGSVhDTUQsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfcHJvYywgMSwge0VSUk9SRklYQ01EfX0KICAgICB9OwogCiAgICAgLyoKQEAgLTIxMCw4ICsyMTAsMTIgQEAKICAgICAgICAgZWxzZQogICAgICAgICAgICAgKCpwcm9jcCktPm1pbiA9IDA7CiAgICAgfSBlbHNlIHsKKyAgICAgICAgLyogRGVmYXVsdCB0byBhc3NzdW1lIHRoYXQgd2UgcmVxdWlyZSBhdCBsZWFzdCBvbmUKKyAgICAgICAgICogIHN1Y2ggcHJvY2VzcyB0byBiZSBydW5uaW5nLCBidXQgbm8gdXBwZXIgbGltaXQgKi8KICAgICAgICAgKCpwcm9jcCktPm1heCA9IDA7Ci0gICAgICAgICgqcHJvY3ApLT5taW4gPSAwOworICAgICAgICAoKnByb2NwKS0+bWluID0gMTsKKyAgICAgICAgLyogVGhpcyBmcmVlcyAicHJvYyA8cHJvY25hbWU+IDAgMCIgdG8gbW9uaXRvcgorICAgICAgICAgKiBwcm9jZXNzZXMgdGhhdCBzaG91bGQgX25vdF8gYmUgcnVubmluZy4gKi8KICAgICB9CiAjaWZkZWYgTkVUU05NUF9QUk9DRklYQ01ECiAgICAgc3ByaW50ZigoKnByb2NwKS0+Zml4Y21kLCBORVRTTk1QX1BST0NGSVhDTUQsICgqcHJvY3ApLT5uYW1lKTsKQEAgLTI2MSw5ICsyNjUsMTIgQEAKICAgICAgICAgY2FzZSBFUlJPUkZMQUc6CiAgICAgICAgICAgICBsb25nX3JldCA9IHNoX2NvdW50X3Byb2NzKHByb2MtPm5hbWUpOwogICAgICAgICAgICAgaWYgKGxvbmdfcmV0ID49IDAgJiYKKyAgICAgICAgICAgICAgICAgICAvKiBUb28gZmV3IHByb2Nlc3NlcyBydW5uaW5nICovCiAgICAgICAgICAgICAgICAgKChwcm9jLT5taW4gJiYgbG9uZ19yZXQgPCBwcm9jLT5taW4pIHx8CisgICAgICAgICAgICAgICAgICAgLyogVG9vIG1hbnkgcHJvY2Vzc2VzIHJ1bm5pbmcgKi8KICAgICAgICAgICAgICAgICAgKHByb2MtPm1heCAmJiBsb25nX3JldCA+IHByb2MtPm1heCkgfHwKLSAgICAgICAgICAgICAgICAgKHByb2MtPm1pbiA9PSAwICYmIHByb2MtPm1heCA9PSAwICYmIGxvbmdfcmV0IDwgMSkpKSB7CisgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc2VzIHJ1bm5pbmcgdGhhdCBzaG91bGRuJ3QgYmUgKi8KKyAgICAgICAgICAgICAgICAgKHByb2MtPm1pbiA9PSAwICYmIHByb2MtPm1heCA9PSAwICYmIGxvbmdfcmV0ID4gMCkpKSB7CiAgICAgICAgICAgICAgICAgbG9uZ19yZXQgPSAxOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBsb25nX3JldCA9IDA7CkBAIC0yNzQsMTYgKzI4MSwyMCBAQAogICAgICAgICAgICAgaWYgKGxvbmdfcmV0IDwgMCkgewogICAgICAgICAgICAgICAgIGVycm1zZ1swXSA9IDA7ICAvKiBjYXRjaCBvdXQgb2YgbWVtIGVycm9ycyByZXR1cm4gMCBjb3VudCAqLwogICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9jLT5taW4gJiYgbG9uZ19yZXQgPCBwcm9jLT5taW4pIHsKLSAgICAgICAgICAgICAgICBzbnByaW50ZihlcnJtc2csIHNpemVvZihlcnJtc2cpLAorICAgICAgICAgICAgICAgIGlmICggbG9uZ19yZXQgPiAwICkKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJUb28gZmV3ICVzIHJ1bm5pbmcgKCMgPSAlZCkiLAogICAgICAgICAgICAgICAgICAgICAgICAgcHJvYy0+bmFtZSwgKGludCkgbG9uZ19yZXQpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICJObyAlcyBwcm9jZXNzIHJ1bm5pbmciLCBwcm9jLT5uYW1lKTsKICAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvYy0+bWF4ICYmIGxvbmdfcmV0ID4gcHJvYy0+bWF4KSB7CiAgICAgICAgICAgICAgICAgc25wcmludGYoZXJybXNnLCBzaXplb2YoZXJybXNnKSwKICAgICAgICAgICAgICAgICAgICAgICAgICJUb28gbWFueSAlcyBydW5uaW5nICgjID0gJWQpIiwKICAgICAgICAgICAgICAgICAgICAgICAgIHByb2MtPm5hbWUsIChpbnQpIGxvbmdfcmV0KTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvYy0+bWluID09IDAgJiYgcHJvYy0+bWF4ID09IDAgJiYgbG9uZ19yZXQgPCAxKSB7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHByb2MtPm1pbiA9PSAwICYmIHByb2MtPm1heCA9PSAwICYmIGxvbmdfcmV0ID4gMCkgewogICAgICAgICAgICAgICAgIHNucHJpbnRmKGVycm1zZywgc2l6ZW9mKGVycm1zZyksCi0gICAgICAgICAgICAgICAgICAgICAgICAiTm8gJXMgcHJvY2VzcyBydW5uaW5nLiIsIHByb2MtPm5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgIiVzIHByb2Nlc3Mgc2hvdWxkIG5vdCBiZSBydW5uaW5nLiIsIHByb2MtPm5hbWUpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBlcnJtc2dbMF0gPSAwOwogICAgICAgICAgICAgfQpAQCAtMzQ4LDYgKzM1OSwxNSBAQAogICAgIHJldHVybiAocHJvYyk7CiB9CiAKKyNpZmRlZiBVU0lOR19IT1NUX0RBVEFfQUNDRVNTX1NXUlVOX01PRFVMRQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc3dydW5fY291bnRfcHJvY2Vzc2VzX2J5X25hbWUpCitpbnQKK3NoX2NvdW50X3Byb2NzKGNoYXIgKnByb2NuYW1lKQoreworICAgIHJldHVybiBzd3J1bl9jb3VudF9wcm9jZXNzZXNfYnlfbmFtZSggcHJvY25hbWUgKTsKK30KKyNlbHNlCisKICNpZmRlZiBic2RpMgogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2luY2x1ZGUgPHN5cy9zeXNjdGwuaD4KQEAgLTM5OSw3ICs0MTksNyBAQAogICAgIHJldHVybiByZXQ7CiB9CiAKLSNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpCisjZWxpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCiAjaW5jbHVkZSA8cHJvY2luZm8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIApAQCAtNzk0LDYgKzgxNCw3IEBACiB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9TTEFTSF9QUk9DX01FVEhPRF8gKi8KICNlbHNlCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShmaW5kX2ZpZWxkKQogaW50CiBzaF9jb3VudF9wcm9jcyhjaGFyICpwcm9jbmFtZSkKIHsKQEAgLTg1MiwzICs4NzMsNCBAQAogICAgIHJldHVybiAocmV0KTsKIH0KICNlbmRpZgorI2VuZGlmICAgLyogIVVTSU5HX0hPU1RfREFUQV9BQ0NFU1NfU1dSVU5fTU9EVUxFICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvcHJveHkuYwppbmRleCA1NjkyMTBkLi4wMTdmZDVjIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC9wcm94eS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Byb3h5LmMKQEAgLTksMTEgKzksOSBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbmRpZgpAQCAtMjYsNiArMjQsOSBAQAogCiAjaW5jbHVkZSAicHJveHkuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJlcXVlc3Rfc2V0X2Vycm9yX2lkeCkKKwogc3RhdGljIHN0cnVjdCBzaW1wbGVfcHJveHkgKnByb3hpZXMgPSBOVUxMOwogCiBvaWQgICAgICAgICAgICAgdGVzdG9pZFtdID0geyAxLCAzLCA2LCAxLCA0LCAxLCAyMDIxLCA4ODg4LCAxIH07CkBAIC0xMDUsNyArMTA2LDkgQEAKIAogICAgIERFQlVHTVNHVEwoKCJwcm94eV9jb25maWciLCAicGFyc2luZyBhcmdzOiAlZFxuIiwgYXJnbikpOwogICAgIC8qIENhbGwgc3BlY2lhbCBwYXJzZV9hcmdzIHRoYXQgYWxsb3dzIGZvciBubyBzcGVjaWZpZWQgY29tbXVuaXR5IHN0cmluZyAqLwotICAgIGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmduLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgcHJveHlPcHRQcm9jKTsKKyAgICBhcmcgPSBuZXRzbm1wX3BhcnNlX2FyZ3MoYXJnbiwgYXJndiwgJnNlc3Npb24sICJDOiIsIHByb3h5T3B0UHJvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9QQVJTRV9BUkdTX05PTE9HR0lORyB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUEFSU0VfQVJHU19OT1pFUk8pOwogCiAgICAgLyogcmVzZXQgdGhpcyBpbiBjYXNlIHdlIG1vZGlmaWVkIGl0ICovCiAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCkBAIC0zNTcsNiArMzYwLDcgQEAKICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKHJlcWluZm8tPm1vZGUpOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX1NFVCk7CiAgICAgICAgIGJyZWFrOwpAQCAtMzg0LDYgKzM4OCw3IEBACiAgICAgICAgICAqICBOb3RoaW5nIHRvIGRvIGluIHRoaXMgcGFzcwogICAgICAgICAgKi8KICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJ1bnN1cHBvcnRlZCBtb2RlIGZvciBwcm94eSBjYWxsZWQgKCVkKVxuIiwKQEAgLTQwNCw3ICs0MDksMzMgQEAKICAgICAgICAgb3VybmFtZSA9IHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZTsKICAgICAgICAgb3VybGVuZ3RoID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aDsKIAotICAgICAgICBpZiAoc3AtPmJhc2VfbGVuID4gMCkgeworICAgICAgICBpZiAoc3AtPmJhc2VfbGVuICYmCisgICAgICAgICAgICByZXFpbmZvLT5tb2RlID09IE1PREVfR0VUTkVYVCAmJgorICAgICAgICAgICAgKHNubXBfb2lkX2NvbXBhcmUob3VybmFtZSwgb3VybGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3AtPmJhc2UsIHNwLT5iYXNlX2xlbikgPCAwKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoICJwcm94eSIsICJyZXF1ZXN0IGlzIG91dCBvZiByZWdpc3RlcmVkIHJhbmdlXG4iKSk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogQ3JlYXRlIEdFVE5FWFQgcmVxdWVzdCB3aXRoIGFuIE9JRCBzbyB0aGUKKyAgICAgICAgICAgICAqIG1hc3RlciByZXR1cm5zIHRoZSBmaXJzdCBPSUQgaW4gdGhlIHJlZ2lzdGVyZWQgcmFuZ2UuCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG1lbWNweShvdXJuYW1lLCBzcC0+YmFzZSwgc3AtPmJhc2VfbGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgb3VybGVuZ3RoID0gc3AtPmJhc2VfbGVuOworICAgICAgICAgICAgaWYgKG91cm5hbWVbb3VybGVuZ3RoLTFdIDw9IDEpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFRoZSByZWdpc3RlcmVkIHJhbmdlIGVuZHMgd2l0aCB4Lnkuei4xCisgICAgICAgICAgICAgICAgICogLT4gYXNrIGZvciB0aGUgbmV4dCBvZiB4LnkuegorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIG91cmxlbmd0aC0tOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFRoZSByZWdpc3RlcmVkIHJhbmdlIGVuZHMgd2l0aCB4Lnkuei5BCisgICAgICAgICAgICAgICAgICogLT4gYXNrIGZvciB0aGUgbmV4dCBvZiB4Lnkuei5BLTEuTUFYX1NVQklECisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgb3VybmFtZVtvdXJsZW5ndGgtMV0tLTsKKyAgICAgICAgICAgICAgICBvdXJuYW1lW291cmxlbmd0aF0gPSBNQVhfU1VCSUQ7CisgICAgICAgICAgICAgICAgb3VybGVuZ3RoKys7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3AtPmJhc2VfbGVuID4gMCkgewogICAgICAgICAgICAgaWYgKChvdXJsZW5ndGggLSBzcC0+bmFtZV9sZW4gKyBzcC0+YmFzZV9sZW4pID4gTUFYX09JRF9MRU4pIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIHRvbyBsYXJnZSAKQEAgLTQxOSw4ICs0NTAsOCBAQAogICAgICAgICAgICAgICogc3VmZml4IGFwcGVuZGVkPyAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInByb3h5IiwgImxlbmd0aD0lZCwgYmFzZV9sZW49JWQsIG5hbWVfbGVuPSVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgb3VybGVuZ3RoLCBzcC0+YmFzZV9sZW4sIHNwLT5uYW1lX2xlbikpOwotICAgICAgICAgICAgaWYgKG91cmxlbmd0aCA+IChpbnQpIHNwLT5uYW1lX2xlbikKKyAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpb3VybGVuZ3RoLCAoaW50KXNwLT5iYXNlX2xlbiwgKGludClzcC0+bmFtZV9sZW4pKTsKKyAgICAgICAgICAgIGlmIChvdXJsZW5ndGggPiBzcC0+bmFtZV9sZW4pCiAgICAgICAgICAgICAgICAgbWVtY3B5KCYoc3AtPmJhc2Vbc3AtPmJhc2VfbGVuXSksICYob3VybmFtZVtzcC0+bmFtZV9sZW5dKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkgKiAob3VybGVuZ3RoIC0gc3AtPm5hbWVfbGVuKSk7CiAgICAgICAgICAgICBvdXJsZW5ndGggPSBvdXJsZW5ndGggLSBzcC0+bmFtZV9sZW4gKyBzcC0+YmFzZV9sZW47CkBAIC00OTUsNyArNTI2LDcgQEAKICAgICAgICAgICogV1dXWFhYOiBkb24ndCBsZWF2ZSByZXF1ZXN0cyBkZWxheWVkIGlmIG9wZXJhdGlvbiBpcwogICAgICAgICAgKiBzb21ldGhpbmcgbGlrZSBUSU1FT1VUIAogICAgICAgICAgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInByb3h5IiwgImdvdCB0aW1lZCBvdXQuLi4gcmVxdWVzdHMgPSAlMDhwXG4iLCByZXF1ZXN0cykpOworICAgICAgICBERUJVR01TR1RMKCgicHJveHkiLCAiZ290IHRpbWVkIG91dC4uLiByZXF1ZXN0cyA9ICU4cFxuIiwgcmVxdWVzdHMpKTsKIAogICAgICAgICBuZXRzbm1wX2hhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQocmVxdWVzdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVRVNUX0lTX05PVF9ERUxFR0FURUQpOwpAQCAtNTIzLDEzICs1NTQsMTQgQEAKICAgICAgICAgICAgICAqIE5vdCBzdXJlIGlmIGFueSBvdGhlciBlcnJvciBjb2RlcyBuZWVkIHRoZSBzYW1lIHRyZWF0bWVudC4gTGVmdAogICAgICAgICAgICAgICogYXMgYW4gZXhlcmNpc2UgdG8gdGhlIHJlYWRlci4uLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgicHJveHkiLCAiZ290IGVycm9yIHJlc3BvbnNlICglZClcbiIsIHBkdS0+ZXJyc3RhdCkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInByb3h5IiwgImdvdCBlcnJvciByZXNwb25zZSAoJWxkKVxuIiwgcGR1LT5lcnJzdGF0KSk7CiAgICAgICAgICAgICBpZigoY2FjaGUtPnJlcWluZm8tPm1vZGUgPT0gTU9ERV9HRVRORVhUKSAmJgogICAgICAgICAgICAgICAgKFNOTVBfRVJSX05PU1VDSE5BTUUgPT0gcGR1LT5lcnJzdGF0KSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwcm94eSIsICIgIGlnbm9yaW5nIGVycm9yIHJlc3BvbnNlXG4iKSk7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkKHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRVFVRVNUX0lTX05PVF9ERUxFR0FURUQpOwogICAgICAgICAgICAgfQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIAkgICAgZWxzZSBpZiAoY2FjaGUtPnJlcWluZm8tPm1vZGUgPT0gTU9ERV9TRVRfQUNUSU9OKSB7CiAJCS8qCiAJCSAqIEluIG9yZGVyIGZvciBuZXRzbm1wX3dyYXBfdXBfcmVxdWVzdCB0byBjb25zaWRlciB0aGUKQEAgLTUzOSwxMyArNTcxLDE0IEBACiAJCSAqCT9mdW5jPWRldGFpbCZhdGlkPTExMjY5NCZhaWQ9MTU1NDI2MSZncm91cF9pZD0xMjY5NAogCQkgKi8KIAkJREVCVUdNU0dUTCgoInByb3h5IiwKLQkJICAgICJnb3QgU0VUIGVycm9yICVzLCBpbmRleCAlZFxuIiwKKwkJICAgICJnb3QgU0VUIGVycm9yICVzLCBpbmRleCAlbGRcbiIsCiAJCSAgICBzbm1wX2VycnN0cmluZyhwZHUtPmVycnN0YXQpLCBwZHUtPmVycmluZGV4KSk7CiAJCW5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZCgKIAkJICAgIHJlcXVlc3RzLCBSRVFVRVNUX0lTX05PVF9ERUxFR0FURUQpOwogCQluZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2lkeChyZXF1ZXN0cywgcGR1LT5lcnJzdGF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPmVycmluZGV4KTsKIAkgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgICAgIGVsc2UgewogCQluZXRzbm1wX2hhbmRsZXJfbWFya19yZXF1ZXN0c19hc19kZWxlZ2F0ZWQoIHJlcXVlc3RzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVRVUVTVF9JU19OT1RfREVMRUdBVEVEKTsKQEAgLTU4Myw3ICs2MTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5iYXNlX2xlbikgIT0gMCkpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInByb3h5IiwgIm91dCBvZiByZWdpc3RlcmVkIHJhbmdlLi4uICIpKTsKICAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoInByb3h5IiwgdmFyLT5uYW1lLCBzcC0+YmFzZV9sZW4pKTsKLSAgICAgICAgICAgICAgICBERUJVR01TRygoICAgInByb3h5IiwgIiAoJWQpICE9ICIsIHNwLT5iYXNlX2xlbikpOworICAgICAgICAgICAgICAgIERFQlVHTVNHKCggICAicHJveHkiLCAiICglZCkgIT0gIiwgKGludClzcC0+YmFzZV9sZW4pKTsKICAgICAgICAgICAgICAgICBERUJVR01TR09JRCgoInByb3h5Iiwgc3AtPmJhc2UsIHNwLT5iYXNlX2xlbikpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHKCggICAicHJveHkiLCAiXG4iKSk7CiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgQVNOX05VTEwsIE5VTEwsIDApOwpAQCAtNTk1LDcgKzYyOCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwLT5uYW1lX2xlbikgIT0gMCkpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInByb3h5IiwgIm91dCBvZiByZWdpc3RlcmVkIGJhc2UgcmFuZ2UuLi4gIikpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgicHJveHkiLCB2YXItPm5hbWUsIHNwLT5uYW1lX2xlbikpOwotICAgICAgICAgICAgICAgIERFQlVHTVNHKCggICAicHJveHkiLCAiICglZCkgIT0gIiwgc3AtPm5hbWVfbGVuKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCAgICJwcm94eSIsICIgKCVkKSAhPSAiLCAoaW50KXNwLT5uYW1lX2xlbikpOwogICAgICAgICAgICAgICAgIERFQlVHTVNHT0lEKCgicHJveHkiLCBzcC0+bmFtZSwgc3AtPm5hbWVfbGVuKSk7CiAgICAgICAgICAgICAgICAgREVCVUdNU0coKCAgICJwcm94eSIsICJcbiIpKTsKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBBU05fTlVMTCwgTlVMTCwgMCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uYwppbmRleCBhOTRhZjVjLi5mN2E4YzYzIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmMKQEAgLTEsMTIgKzEsOSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTE4LDkgKzE1LDYgQEAKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVFJJTkdfSAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCkBAIC0zMCw3ICsyNCwxMiBAQAogCiAjaW5jbHVkZSAic3RydWN0LmgiCiAjaW5jbHVkZSAidmVyc2lvbmluZm8uaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvcmVzdGFydC5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIgLyogY2xlYXJfY2FjaGUgKi8KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY2xlYXJfY2FjaGUpCisKIAogdm9pZAogaW5pdF92ZXJzaW9uaW5mbyh2b2lkKQpAQCAtNDEsMjggKzQwLDI4IEBACiAgICAgICogaW5mb3JtYXRpb24gYXQgCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3ZlcnNpb25fdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtWRVJUQUcsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUlRBR319LAotICAgICAgICB7VkVSREFURSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSREFURX19LAotICAgICAgICB7VkVSQ0RBVEUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUkNEQVRFfX0sCi0gICAgICAgIHtWRVJJREVOVCwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSSURFTlR9fSwKLSAgICAgICAge1ZFUkNPTkZJRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSQ09ORklHfX0sCi0gICAgICAgIHtWRVJDTEVBUkNBQ0hFLCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUkNMRUFSQ0FDSEV9fSwKLSAgICAgICAge1ZFUlVQREFURUNPTkZJRywgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJVUERBVEVDT05GSUd9fSwKLSAgICAgICAge1ZFUlJFU1RBUlRBR0VOVCwgQVNOX0lOVEVHRVIsIFJXUklURSwgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwKLSAgICAgICAgIHtWRVJSRVNUQVJUQUdFTlR9fSwKLSAgICAgICAge1ZFUlNBVkVQRVJTSVNURU5ULCBBU05fSU5URUdFUiwgUldSSVRFLCB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLAotICAgICAgICAge1ZFUlNBVkVQRVJTSVNURU5UfX0sCi0gICAgICAgIHtWRVJERUJVR0dJTkcsIEFTTl9JTlRFR0VSLCBSV1JJVEUsIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsCi0gICAgICAgICB7VkVSREVCVUdHSU5HfX0KKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge1ZFUlRBRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSVEFHfX0sCisgICAgICAgIHtWRVJEQVRFLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJEQVRFfX0sCisgICAgICAgIHtWRVJDREFURSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSQ0RBVEV9fSwKKyAgICAgICAge1ZFUklERU5ULCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJJREVOVH19LAorICAgICAgICB7VkVSQ09ORklHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJDT05GSUd9fSwKKyAgICAgICAge1ZFUkNMRUFSQ0FDSEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSQ0xFQVJDQUNIRX19LAorICAgICAgICB7VkVSVVBEQVRFQ09ORklHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUlVQREFURUNPTkZJR319LAorICAgICAgICB7VkVSUkVTVEFSVEFHRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdmVyc2lvbiwgMSwge1ZFUlJFU1RBUlRBR0VOVH19LAorICAgICAgICB7VkVSU0FWRVBFUlNJU1RFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92ZXJzaW9uLCAxLCB7VkVSU0FWRVBFUlNJU1RFTlR9fSwKKyAgICAgICAge1ZFUkRFQlVHR0lORywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3ZlcnNpb24sIDEsIHtWRVJERUJVR0dJTkd9fQogICAgIH07CiAKICAgICAvKgpAQCAtMTA5LDIyICsxMDgsMjEgQEAKICAgICAgICAgbG9uZ19yZXQgPSBuYW1lWzhdOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgKCZsb25nX3JldCkpOwogICAgIGNhc2UgVkVSVEFHOgotICAgICAgICBzcHJpbnRmKGVycm1zZywgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKKyAgICAgICAgc3RybGNweShlcnJtc2csIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSwgc2l6ZW9mKGVycm1zZykpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgZXJybXNnKTsKICAgICBjYXNlIFZFUkRBVEU6Ci0gICAgICAgIHNwcmludGYoZXJybXNnLCAiJERhdGUkIik7CisgICAgICAgIHN0cmxjcHkoZXJybXNnLCAiJERhdGUkIiwgc2l6ZW9mKGVycm1zZykpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgZXJybXNnKTsKICAgICBjYXNlIFZFUkNEQVRFOgogICAgICAgICBjdXJ0aW1lID0gdGltZShOVUxMKTsKICAgICAgICAgY3B0ciA9IGN0aW1lKCZjdXJ0aW1lKTsKLSAgICAgICAgc3ByaW50ZihlcnJtc2csIGNwdHIpOworICAgICAgICBzdHJsY3B5KGVycm1zZywgY3B0ciwgc2l6ZW9mKGVycm1zZykpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpIC0gMTsgLyogLSAxIHRvIHN0cmlwIHRyYWlsaW5nIG5ld2xpbmUgKi8KICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGVycm1zZyk7CiAgICAgY2FzZSBWRVJJREVOVDoKLSAgICAgICAgc3ByaW50ZihlcnJtc2csCi0gICAgICAgICAgICAgICAgIiRJZCQiKTsKKyAgICAgICAgc3RybGNweShlcnJtc2csICIkSWQkIiwgc2l6ZW9mKGVycm1zZykpOwogICAgICAgICAqdmFyX2xlbiA9IHN0cmxlbihlcnJtc2cpOwogICAgICAgICByZXR1cm4gKCh1X2NoYXIgKikgZXJybXNnKTsKICAgICBjYXNlIFZFUkNPTkZJRzoKQEAgLTEzNCw3ICsxMzIsNyBAQAogICAgICAgICAgICAgKnZhcl9sZW4gPSAxMDI0OyAgICAvKiBtaWIgaW1wb3NlZCByZXN0cmljdGlvbiAqLwogICAgICAgICByZXR1cm4gKHVfY2hhciAqKSBjb25maWdfb3B0czsKICNlbHNlCi0gICAgICAgIHNwcmludGYoZXJybXNnLCAiIik7CisgICAgICAgIHN0cmxjcHkoZXJybXNnLCAiIiwgc2l6ZW9mKGVycm1zZykpKTsKICAgICAgICAgKnZhcl9sZW4gPSBzdHJsZW4oZXJybXNnKTsKICAgICAgICAgcmV0dXJuICgodV9jaGFyICopIGVycm1zZyk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92ZXJzaW9uaW5mby5oCmluZGV4IGQ5OTExNDcuLjAwNzQyNGUgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3ZlcnNpb25pbmZvLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdmVyc2lvbmluZm8uaApAQCAtMjgsNSArMjgsOCBAQAogI2RlZmluZSBWRVJTQVZFUEVSU0lTVEVOVCAxMwogI2RlZmluZSBWRVJERUJVR0dJTkcgMjAKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvcmVzdGFydCkKIGNvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MpCisKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogX01JQkdST1VQX1ZFUlNJT05JTkZPX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMKaW5kZXggNzlmMTAwNC4uZjc2Y2U5NSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmMKQEAgLTEzLDE0ICsxMywxNCBAQAogdm9pZAogaW5pdF92bXN0YXQodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICB2bXN0YXRfb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIDExIH07CisgICAgY29uc3Qgb2lkICB2bXN0YXRfb2lkW10gPSB7IE5FVFNOTVBfVUNEQVZJU19NSUIsIDExIH07CiAKICAgICBERUJVR01TR1RMKCgidm1zdGF0IiwgIkluaXRpYWxpemluZ1xuIikpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyX2dyb3VwKAogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigidm1zdGF0Iiwgdm1zdGF0X2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZtc3RhdF9vaWQsIE9JRF9MRU5HVEgodm1zdGF0X29pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZKSwKLSAgICAgICAgTUlCSU5ERVgsIFJBV1NXQVBPVVQpOworICAgICAgICBNSUJJTkRFWCwgQ1BVTlVNQ1BVUyk7CiB9CiAKIApAQCAtMzgsNiArMzgsNyBAQAogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgIGNhc2UgTU9ERV9HRVQ6CiAgICAgICAgIG9iaiA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVbIHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoLTIgXTsKKwogICAgICAgICBzd2l0Y2ggKG9iaikgewogICAgICAgICBjYXNlIE1JQklOREVYOiAgICAgICAgICAgICAvKiBkdW1teSB2YWx1ZSAqLwogICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLCAxKTsKQEAgLTExMiw2ICsxMTMsMjIgQEAKICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5zaXJxX3RpY2tzICYgMHhmZmZmZmZmZik7CiAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1BVUkFXU1RFQUw6CisgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIocmVxdWVzdHMtPnJlcXVlc3R2YiwgQVNOX0NPVU5URVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5mby0+c3RlYWxfdGlja3MgJiAweGZmZmZmZmZmKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFVSQVdHVUVTVDoKKyAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5ndWVzdF90aWNrcyAmIDB4ZmZmZmZmZmYpOworICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENQVVJBV0dVRVNUTklDRToKKyAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihyZXF1ZXN0cy0+cmVxdWVzdHZiLCBBU05fQ09VTlRFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvLT5ndWVzdG5pY2VfdGlja3MgJiAweGZmZmZmZmZmKTsKKyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDUFVOVU1DUFVTOgorICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKHJlcXVlc3RzLT5yZXF1ZXN0dmIsIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdV9udW0gJiAweDdmZmZmZmZmKTsKKyAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAvKgogICAgICAgICAgKiAgJ0Nvb2tlZCcgQ1BVIHN0YXRpc3RpY3MKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKaW5kZXggYjhkNTIwMi4uOWZkZjRmMCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0LmgKQEAgLTM2LDUgKzM2LDkgQEAKICNkZWZpbmUgQ1BVUkFXU09GVElSUSA2MQogI2RlZmluZSBSQVdTV0FQSU4gNjIKICNkZWZpbmUgUkFXU1dBUE9VVCA2MworI2RlZmluZSBDUFVSQVdTVEVBTCA2NAorI2RlZmluZSBDUFVSQVdHVUVTVCA2NQorI2RlZmluZSBDUFVSQVdHVUVTVE5JQ0UgNjYKKyNkZWZpbmUgQ1BVTlVNQ1BVUyA2NwogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9WTVNUQVRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmMKaW5kZXggZDQ5MDRmOS4uNjJkN2NlNiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5jCkBAIC0zOSw2ICszOSw5IEBACiAvKgogICogbGlicGVyZnN0YXQgc3RydWN0cyAKICAqLworI2lmZGVmIEhBVkVfU1lTX1BST1RPU1dfSAorI2luY2x1ZGUgPHN5cy9wcm90b3N3Lmg+CisjZW5kaWYKICNpbmNsdWRlIDxsaWJwZXJmc3RhdC5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CkBAIC00Niw3ICs0OSw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgIm1pYmRlZnMuaCIKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAvKgogICogSGVhZGVyIGZpbGUgZm9yIHRoaXMgbW9kdWxlIApAQCAtMTUzLDQ1ICsxNTYsNTIgQEAKIAkgKiBXaGljaCB2YXJpYWJsZXMgZG8gd2Ugc2VydmljZSA/IAogCSAqLwogCXN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0JCXtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7TUlCSU5ERVh9fSwKLQkJe0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtFUlJPUk5BTUV9fSwKLQkJe1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLQkJe1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotCQl7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotCQl7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtJT1JFQ0VJVkV9fSwKLQkJe1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge1NZU0lOVEVSUlVQVFN9fSwKLQkJe1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge1NZU0NPTlRFWFR9fSwKLQkJe0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotCQl7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtDUFVTWVNURU19fSwKLQkJe0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotCQl7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7Q1BVUkFXVVNFUn19LAotCQl7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtDUFVSQVdTWVNURU19fSwKLQkJe0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0NQVVJBV0lETEV9fSwKLQkJe0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0NQVVJBV1dBSVR9fSwKLQkJe0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0JCSB7Q1BVUkFXS0VSTkVMfX0sCi0JCXtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge0lPUkFXU0VOVH19LAotCQl7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLQkJIHtJT1JBV1JFQ0VJVkV9fSwKLQkJe1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge1NZU1JBV0lOVEVSUlVQVFN9fSwKLQkJe1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotCQkge1NZU1JBV0NPTlRFWFR9fSwKKwkJe01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisJCXtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKwkJe1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKwkJe1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorCQl7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorCQl7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorCQl7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisJCXtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKwkJe0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorCQl7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorCQl7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisJCXtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKwkJe0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKwkJe0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorCQl7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdXQUlUfX0sCisJCXtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisJCXtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdTRU5UfX0sCisJCXtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdSRUNFSVZFfX0sCisJCXtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0lOVEVSUlVQVFN9fSwKKwkJe1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTUkFXQ09OVEVYVH19LAogCQkvKgogCQkgKiBGdXR1cmUgdXNlOiAKLQkJICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0JCSAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisJCSAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorCQkgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogCQkgKi8KIAl9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2FpeDQuaAppbmRleCA1MDg2OWFiLi5hMTNmY2NlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYWl4NC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9haXg0LmgKQEAgLTE1LDcgKzE1LDcgQEAKICAgICAvKgogICAgICAqIERpcmVjdGl2ZSB0byBpbmNsdWRlIHV0aWxpdHkgbW9kdWxlIAogICAgICAqLwotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKICAgICAvKgogICAgICAqIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBpbmRleCBvdXJzZWx2ZXMsIGJlY2F1c2UgcGVyZnN0YXQgc3RydWN0dXJlcwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2JzZGk0LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYwppbmRleCA5NGQzMmIzLi5lMzViNmNkIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuYwpAQCAtNDEsNyArNDEsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ2bXN0YXQuaCIKIAogLyoKQEAgLTU3LDQxICs1Nyw0OCBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdOSUNFfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lOVFJ9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV05JQ0V9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSU5UUn19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKICAgICAgICAgICovCiAgICAgICAgIC8qCi0gICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAotICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQorICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCisgICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICAqICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk1TRyB9fQogICAgICAgICAgKi8KICAgICB9OwogCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfYnNkaTQuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5oCmluZGV4IDBiNjdhMTIuLjc0YmYzMWIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ic2RpNC5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVk1TVEFUX0JTREk0X0gKICNkZWZpbmUgX01JQkdST1VQX1ZNU1RBVF9CU0RJNF9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIHZvaWQgICAgICAgICAgICBpbml0X3Ztc3RhdF9ic2RpNCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5jCmluZGV4IDcwNDE1ZTUuLmQ5NmM1NWMgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuYwpAQCAtNDMsNyArNDMsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ2bXN0YXQuaCIKICNpbmNsdWRlICJ2bXN0YXRfZGFyd2luNy5oIgogCkBAIC03NCw0NSArNzQsNTIgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXTklDRX19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJTlRSfX0sCi0gICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNSQVdDT05URVhUfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdOSUNFfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lOVFJ9fSwKKyAgICAgICAge1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0NPTlRFWFR9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaCBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9kYXJ3aW43LmgKaW5kZXggZjkyZTUwOS4uYjFhMzAxZCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2RhcndpbjcuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZGFyd2luNy5oCkBAIC01LDYgKzUsOCBAQAogI2lmbmRlZiBfTUlCR1JPVVBfVk1TVEFUX0RBUldJTjdfSAogI2RlZmluZSBfTUlCR1JPVVBfVk1TVEFUX0RBUldJTjdfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiB2b2lkICAgICAgICAgICAgaW5pdF92bXN0YXRfZGFyd2luNyh2b2lkKTsKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMKaW5kZXggOTE3MGIyNi4uMzNmNTQxMiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmMKQEAgLTM0LDcgKzM0LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSAibWliZGVmcy5oIgotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCiAKIC8qCiAgKiBIZWFkZXIgZmlsZSBmb3IgdGhpcyBtb2R1bGUgCkBAIC0xNjUsNDMgKzE2NSw1MCBAQAogICAgICAqIFdoaWNoIHZhcmlhYmxlcyBkbyB3ZSBzZXJ2aWNlID8gCiAgICAgICovCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXV0FJVH19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdTRU5UfX0sCi0gICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXUkVDRUlWRX19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKKyAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lETEV9fSwKKyAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1dBSVR9fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXU0VOVH19LAorICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1JFQ0VJVkV9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2R5bml4LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguaAppbmRleCBhYWUxNzkwLi44OTU0ZTM1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZHluaXguaApAQCAtMTQsNyArMTQsNyBAQAogLyoKICAqIERpcmVjdGl2ZSB0byBpbmNsdWRlIHV0aWxpdHkgbW9kdWxlIAogICovCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogICAgIC8qCiAgICAgICogTUlCIHdhbnRzIFZfQ1BVX1NZU1RFTSB3aGljaCBpcyBzeXNpbmZvIFZfQ1BVX0tFUk5FTCArIFZfQ1BVX1dBSVQgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jCmluZGV4IDkxODViYzYuLjNkZTg5YjIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9mcmVlYnNkMi5jCkBAIC01Nyw3ICs1Nyw3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogI2luY2x1ZGUgInZtc3RhdC5oIgogI2luY2x1ZGUgInZtc3RhdF9mcmVlYnNkMi5oIgogCkBAIC04OCw0NSArODgsNTIgQEAKIHsKIAogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXTklDRX19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJTlRSfX0sCi0gICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNSQVdDT05URVhUfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdOSUNFfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0lOVFJ9fSwKKyAgICAgICAge1NZU1JBV0lOVEVSUlVQVFMsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU1JBV0NPTlRFWFQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU1JBV0NPTlRFWFR9fSwKICAgICAgICAgLyoKICAgICAgICAgICogRnV0dXJlIHVzZTogCiAgICAgICAgICAqLwogICAgICAgICAvKgotICAgICAgICAgKiB7RVJST1JGTEFHLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKLSAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KKyAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JGTEFHIH19LAorICAgICAgICAgKiB7RVJST1JNU0csIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgKiAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JNU0cgfX0KICAgICAgICAgICovCiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2ZyZWVic2QyLmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuaAppbmRleCBmMGU2MGI4Li4yNmI0NGI2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfZnJlZWJzZDIuaApAQCAtNSw2ICs1LDggQEAKICNpZm5kZWYgX01JQkdST1VQX1ZNU1RBVF9GUkVFQlNEMl9ICiAjZGVmaW5lIF9NSUJHUk9VUF9WTVNUQVRfRlJFRUJTRDJfSAogCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljKQorCiAjaW5jbHVkZSAibWliZGVmcy5oIgogCiB2b2lkICAgICAgICAgICAgaW5pdF92bXN0YXRfZnJlZWJzZDIodm9pZCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguYwppbmRleCA4OTJmYjdlLi5hNzg0NTAyIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmMKQEAgLTQ1LDcgKzQ1LDcgQEAKIC8qCiAgKiBVdGlsaXR5IGZ1bmN0aW9ucyBmb3IgVUNELVNOTVAgCiAgKi8KLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIgogCiAvKgogICogSGVhZGVyIGZpbGUgZm9yIHRoaXMgbW9kdWxlIApAQCAtMTcxLDQ1ICsxNzEsNTIgQEAKICAgICAgKiBXaGljaCB2YXJpYWJsZXMgZG8gd2Ugc2VydmljZSA/IAogICAgICAqLwogICAgIHN0cnVjdCB2YXJpYWJsZTIgZXh0ZW5zaWJsZV92bXN0YXRfdmFyaWFibGVzW10gPSB7Ci0gICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7TUlCSU5ERVh9fSwKLSAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtFUlJPUk5BTUV9fSwKLSAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKLSAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0lOVEVSUlVQVFN9fSwKLSAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge1NZU0NPTlRFWFR9fSwKLSAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAotICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVTWVNURU19fSwKLSAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAotICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXVVNFUn19LAotICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXTklDRX19LAotICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdTWVNURU19fSwKLSAgICAgICAge0NQVVJBV0lETEUsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lETEV9fSwKLSAgICAgICAge0NQVVJBV1dBSVQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1dBSVR9fSwKLSAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXS0VSTkVMfX0sCi0gICAgICAgIHtJT1JBV1NFTlQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkFXU0VOVH19LAotICAgICAgICB7SU9SQVdSRUNFSVZFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1JFQ0VJVkV9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV05JQ0V9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdXQUlUfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1NFTlR9fSwKKyAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdSRUNFSVZFfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmggYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfaHB1eC5oCmluZGV4IGUxMDA5NWUuLjhmMjY1OTQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9ocHV4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2hwdXguaApAQCAtMTQsNyArMTQsNyBAQAogLyoKICAqIERpcmVjdGl2ZSB0byBpbmNsdWRlIHV0aWxpdHkgbW9kdWxlIAogICovCi1jb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzKQorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIAogICAgIC8qCiAgICAgICogTWFrZSA2NC1iaXQgcHN0YXQgY2FsbHMgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbGludXguYyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jCmluZGV4IGYwOWVkMzQuLmQ2ZWZmNTAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC0xMDgsOSArMTA5LDEyIEBACiAKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAjaW5jbHVkZSAic3RydWN0LmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ2bXN0YXQuaCIKIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaGFyZHdhcmVfY3B1X2xvYWQpCisKKwogRmluZFZhck1ldGhvZCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQ7CiAKIHN0YXRpYyBpbnQgaGFzX3Ztc3RhdCA9IDE7CkBAIC0xMjgsNTQgKzEzMiw2NCBAQAogaW5pdF92bXN0YXQodm9pZCkKIHsKICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge1JBV1NXQVBJTiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtSQVdTV0FQSU59fSwKLSAgICAgICAge1JBV1NXQVBPVVQsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7UkFXU1dBUE9VVH19LAotICAgICAgICB7SU9TRU5ULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAotICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JFQ0VJVkV9fSwKLSAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1NFTlR9fSwKLSAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdSRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV05JQ0V9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7U1lTUkFXSU5URVJSVVBUUywgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTUkFXSU5URVJSVVBUU319LAotICAgICAgICB7U1lTUkFXQ09OVEVYVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTUkFXQ09OVEVYVH19LAotICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXV0FJVH19LAotICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSU5UUn19LAotICAgICAgICB7Q1BVUkFXU09GVElSUSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU09GVElSUX19LAorICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge01JQklOREVYfX0sCisgICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7RVJST1JOQU1FfX0sCisgICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAorICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUE9VVH19LAorICAgICAgICB7UkFXU1dBUElOLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtSQVdTV0FQSU59fSwKKyAgICAgICAge1JBV1NXQVBPVVQsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1JBV1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JBV1NFTlR9fSwKKyAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdSRUNFSVZFfX0sCisgICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNDT05URVhUfX0sCisgICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCisgICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVNZU1RFTX19LAorICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVSURMRX19LAorICAgICAgICB7Q1BVUkFXVVNFUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXVVNFUn19LAorICAgICAgICB7Q1BVUkFXTklDRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXTklDRX19LAorICAgICAgICB7Q1BVUkFXU1lTVEVNLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTWVNURU19fSwKKyAgICAgICAge0NQVVJBV0tFUk5FTCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXS0VSTkVMfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtTWVNSQVdJTlRFUlJVUFRTLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdJTlRFUlJVUFRTfX0sCisgICAgICAgIHtTWVNSQVdDT05URVhULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTWVNSQVdDT05URVhUfX0sCisgICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdXQUlUfX0sCisgICAgICAgIHtDUFVSQVdJTlRSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJTlRSfX0sCisgICAgICAgIHtDUFVSQVdTT0ZUSVJRLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdTT0ZUSVJRfX0sCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9saW51eC5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmgKaW5kZXggNzM4ZTJmMS4uNmY3YzUwZiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X2xpbnV4LmgKQEAgLTUsNiArNSw3IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9WTVNUQVRfSAogI2RlZmluZSBfTUlCR1JPVVBfVk1TVEFUX0gKIAorY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYykKIGNvbmZpZ19yZXF1aXJlKGhhcmR3YXJlL2NwdSkKIAogI2luY2x1ZGUgIm1pYmRlZnMuaCIKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5jCmluZGV4IDEyYzczZGIuLjk3MDZjNDIgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuYwpAQCAtNDksNyArNDksNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYXV0b19ubGlzdC5oPgogCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKICNpbmNsdWRlICJ2bXN0YXQuaCIKIAogLyoKQEAgLTY2LDQyICs2Niw0OSBAQAogewogCiAgICAgc3RydWN0IHZhcmlhYmxlMiBleHRlbnNpYmxlX3Ztc3RhdF92YXJpYWJsZXNbXSA9IHsKLSAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtNSUJJTkRFWH19LAotICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0VSUk9STkFNRX19LAotICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBJTn19LAotICAgICAgICB7U1dBUE9VVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCi0gICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCi0gICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0lPUkVDRUlWRX19LAotICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTSU5URVJSVVBUU319LAotICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7U1lTQ09OVEVYVH19LAotICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVVU0VSfX0sCi0gICAgICAgIHtDUFVTWVNURU0sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVNZU1RFTX19LAotICAgICAgICB7Q1BVSURMRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCi0gICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdVU0VSfX0sCi0gICAgICAgIHtDUFVSQVdOSUNFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdOSUNFfX0sCi0gICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1NZU1RFTX19LAotICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXSURMRX19LAotICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdLRVJORUx9fSwKLSAgICAgICAge0NQVVJBV0lOVFIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0lOVFJ9fSwKKyAgICAgICAge01JQklOREVYLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtNSUJJTkRFWH19LAorICAgICAgICB7RVJST1JOQU1FLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STkFNRX19LAorICAgICAgICB7U1dBUElOLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQSU59fSwKKyAgICAgICAge1NXQVBPVVQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKKyAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9TRU5UfX0sCisgICAgICAgIHtJT1JFQ0VJVkUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkVDRUlWRX19LAorICAgICAgICB7U1lTSU5URVJSVVBUUywgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTSU5URVJSVVBUU319LAorICAgICAgICB7U1lTQ09OVEVYVCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1lTQ09OVEVYVH19LAorICAgICAgICB7Q1BVVVNFUiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVVVNFUn19LAorICAgICAgICB7Q1BVU1lTVEVNLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVTWVNURU19fSwKKyAgICAgICAge0NQVUlETEUsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKKyAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1VTRVJ9fSwKKyAgICAgICAge0NQVVJBV05JQ0UsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV05JQ0V9fSwKKyAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXU1lTVEVNfX0sCisgICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdJRExFfX0sCisgICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV0tFUk5FTH19LAorICAgICAgICB7Q1BVUkFXSU5UUiwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSU5UUn19LAogCiAgICAgICAgIC8qCiAgICAgICAgICAqIEZ1dHVyZSB1c2U6IAogICAgICAgICAgKi8KICAgICAgICAgLyoKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKQEAgLTE5Miw3ICsxOTksNyBAQAogICAgICAgICAgICAgbWVtc2V0KGNwdV9uZXcsIDAsIHNpemVvZihjcHVfbmV3KSk7CiAjZWxpZiBkZWZpbmVkKEtFUk5fQ1BUSU1FKQogICAgICAgICBpbnQgICAgICAgICAgICAgbWliWzJdID0geyBDVExfS0VSTiwgS0VSTl9DUFRJTUUgfTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIHNzaXplID0gc2l6ZW9mKGNwdV9uZXcpOworICAgICAgICBzaXplX3QgICAgICAgICAgc3NpemUgPSBzaXplb2YoY3B1X25ldyk7CiAKICAgICAgICAgaWYgKHN5c2N0bChtaWIsIDIsIGNwdV9uZXcsICZzc2l6ZSwgTlVMTCwgMCkgPCAwKQogICAgICAgICAgICAgbWVtc2V0KGNwdV9uZXcsIDAsIHNpemVvZihjcHVfbmV3KSk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X25ldGJzZDEuaAppbmRleCBlYjZiMTcyLi5hZGY1ZDQ2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfbmV0YnNkMS5oCisrKyBiL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9uZXRic2QxLmgKQEAgLTUsNiArNSw4IEBACiAjaWZuZGVmIF9NSUJHUk9VUF9WTVNUQVRfTkVUQlNEMV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9WTVNUQVRfTkVUQlNEMV9ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCisKICNpbmNsdWRlICJtaWJkZWZzLmgiCiAKIHZvaWQgICAgICAgICAgICBpbml0X3Ztc3RhdF9uZXRic2QxKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmMgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYwppbmRleCBjYThhODdmLi4zNzE1MDQ1IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYworKysgYi9hZ2VudC9taWJncm91cC91Y2Qtc25tcC92bXN0YXRfc29sYXJpczIuYwpAQCAtNDYsNyArNDYsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlICJtaWJkZWZzLmgiCi0jaW5jbHVkZSAidXRpbF9mdW5jcy5oIgorI2luY2x1ZGUgInV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMuaCIKIAogLyoKICAqIEhlYWRlciBmaWxlIGZvciB0aGlzIG1vZHVsZSAKQEAgLTE2OSw0MSArMTY5LDQ4IEBACiAgICAgICogV2hpY2ggdmFyaWFibGVzIGRvIHdlIHNlcnZpY2UgPyAKICAgICAgKi8KICAgICBzdHJ1Y3QgdmFyaWFibGUyIGV4dGVuc2libGVfdm1zdGF0X3ZhcmlhYmxlc1tdID0gewotICAgICAgICB7TUlCSU5ERVgsIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge01JQklOREVYfX0sCi0gICAgICAgIHtFUlJPUk5BTUUsIEFTTl9PQ1RFVF9TVFIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7RVJST1JOQU1FfX0sCi0gICAgICAgIHtTV0FQSU4sIEFTTl9JTlRFR0VSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCi0gICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NXQVBPVVR9fSwKLSAgICAgICAge0lPU0VOVCwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1NFTlR9fSwKLSAgICAgICAge0lPUkVDRUlWRSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SRUNFSVZFfX0sCi0gICAgICAgIHtTWVNJTlRFUlJVUFRTLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNJTlRFUlJVUFRTfX0sCi0gICAgICAgIHtTWVNDT05URVhULCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtTWVNDT05URVhUfX0sCi0gICAgICAgIHtDUFVVU0VSLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKLSAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVU1lTVEVNfX0sCi0gICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVUlETEV9fSwKLSAgICAgICAge0NQVVJBV1VTRVIsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV1VTRVJ9fSwKLSAgICAgICAge0NQVVJBV1NZU1RFTSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7Q1BVUkFXU1lTVEVNfX0sCi0gICAgICAgIHtDUFVSQVdJRExFLCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdJRExFfX0sCi0gICAgICAgIHtDUFVSQVdXQUlULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtDUFVSQVdXQUlUfX0sCi0gICAgICAgIHtDUFVSQVdLRVJORUwsIEFTTl9DT1VOVEVSLCBST05MWSwgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLAotICAgICAgICAge0NQVVJBV0tFUk5FTH19LAotICAgICAgICB7SU9SQVdTRU5ULCBBU05fQ09VTlRFUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwKLSAgICAgICAgIHtJT1JBV1NFTlR9fSwKLSAgICAgICAge0lPUkFXUkVDRUlWRSwgQVNOX0NPVU5URVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsCi0gICAgICAgICB7SU9SQVdSRUNFSVZFfX0sCisgICAgICAgIHtNSUJJTkRFWCwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7TUlCSU5ERVh9fSwKKyAgICAgICAge0VSUk9STkFNRSwgQVNOX09DVEVUX1NUUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUk5BTUV9fSwKKyAgICAgICAge1NXQVBJTiwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7U1dBUElOfX0sCisgICAgICAgIHtTV0FQT1VULCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtTV0FQT1VUfX0sCisgICAgICAgIHtJT1NFTlQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPU0VOVH19LAorICAgICAgICB7SU9SRUNFSVZFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtJT1JFQ0VJVkV9fSwKKyAgICAgICAge1NZU0lOVEVSUlVQVFMsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0lOVEVSUlVQVFN9fSwKKyAgICAgICAge1NZU0NPTlRFWFQsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge1NZU0NPTlRFWFR9fSwKKyAgICAgICAge0NQVVVTRVIsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVVTRVJ9fSwKKyAgICAgICAge0NQVVNZU1RFTSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVU1lTVEVNfX0sCisgICAgICAgIHtDUFVJRExFLCBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVJRExFfX0sCisgICAgICAgIHtDUFVSQVdVU0VSLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdVU0VSfX0sCisgICAgICAgIHtDUFVSQVdTWVNURU0sIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0NQVVJBV1NZU1RFTX19LAorICAgICAgICB7Q1BVUkFXSURMRSwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXSURMRX19LAorICAgICAgICB7Q1BVUkFXV0FJVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7Q1BVUkFXV0FJVH19LAorICAgICAgICB7Q1BVUkFXS0VSTkVMLCBBU05fQ09VTlRFUiwgTkVUU05NUF9PTERBUElfUk9OTFksCisgICAgICAgICB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtDUFVSQVdLRVJORUx9fSwKKyAgICAgICAge0lPUkFXU0VOVCwgQVNOX0NPVU5URVIsIE5FVFNOTVBfT0xEQVBJX1JPTkxZLAorICAgICAgICAgdmFyX2V4dGVuc2libGVfdm1zdGF0LCAxLCB7SU9SQVdTRU5UfX0sCisgICAgICAgIHtJT1JBV1JFQ0VJVkUsIEFTTl9DT1VOVEVSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0lPUkFXUkVDRUlWRX19LAogICAgICAgICAvKgogICAgICAgICAgKiBGdXR1cmUgdXNlOiAKLSAgICAgICAgICoge0VSUk9SRkxBRywgQVNOX0lOVEVHRVIsIFJPTkxZLCB2YXJfZXh0ZW5zaWJsZV92bXN0YXQsIDEsIHtFUlJPUkZMQUcgfX0sCi0gICAgICAgICAqIHtFUlJPUk1TRywgQVNOX09DVEVUX1NUUiwgUk9OTFksIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CisgICAgICAgICAqIHtFUlJPUkZMQUcsIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9SRkxBRyB9fSwKKyAgICAgICAgICoge0VSUk9STVNHLCBBU05fT0NURVRfU1RSLCBORVRTTk1QX09MREFQSV9ST05MWSwKKyAgICAgICAgICogIHZhcl9leHRlbnNpYmxlX3Ztc3RhdCwgMSwge0VSUk9STVNHIH19CiAgICAgICAgICAqLwogICAgIH07CiAKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5oIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgKaW5kZXggODI4MjI4OC4uNzdmYmIzYiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWNkLXNubXAvdm1zdGF0X3NvbGFyaXMyLmgKQEAgLTIzLDcgKzIzLDcgQEAKICAgICAvKgogICAgICAqIERpcmVjdGl2ZSB0byBpbmNsdWRlIHV0aWxpdHkgbW9kdWxlIAogICAgICAqLwotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCiAKICAgICAvKgogICAgICAqIE1JQiB3YW50cyBDUFVfU1lTVEVNIHdoaWNoIGlzIHN5c2luZm8gQ1BVX0tFUk5FTCArIENQVV9XQUlUIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaCBiL2FnZW50L21pYmdyb3VwL3VjZF9zbm1wLmgKaW5kZXggMzRjMmZiYi4uMGQ4N2VjMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWNkX3NubXAuaAorKysgYi9hZ2VudC9taWJncm91cC91Y2Rfc25tcC5oCkBAIC0zLDEyICszLDE0IEBACiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC92ZXJzaW9uaW5mbykKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL3Bhc3MpCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9wYXNzX3BlcnNpc3QpCi1jb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9kaXNrKQorY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgodWNkLXNubXAvZGlzaywgNS43LCB1Y2Qtc25tcC9kaXNrX2h3KSkKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL2xvYWRhdmUpCiBjb25maWdfcmVxdWlyZShhZ2VudC9leHRlbmQpCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9lcnJvcm1pYikKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL2ZpbGUpCisjaWYgZGVmaW5lZChIQVZFX0RMRkNOX0gpICYmIGRlZmluZWQoSEFWRV9ETE9QRU4pCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9kbG1vZCkKKyNlbmRpZgogY29uZmlnX3JlcXVpcmUodWNkLXNubXAvcHJveHkpCiBjb25maWdfcmVxdWlyZSh1Y2Qtc25tcC9sb2dtYXRjaCkKIGNvbmZpZ19yZXF1aXJlKHVjZC1zbm1wL21lbW9yeSkKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmggYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oCmluZGV4IGZkMDczOTQuLmQ5ZGVjMWQgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaApAQCAtMjAsOCArMjAsMTUgQEAKIGNvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbikKICNpZiBkZWZpbmVkKCBsaW51eCApCiBjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eCkKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlKQogI2VsaWYgZGVmaW5lZCggc29sYXJpczIgKQogY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIpCisjZWxpZiBkZWZpbmVkKGZyZWVic2Q0KSB8fCBkZWZpbmVkKGRyYWdvbmZseSkgfHwgZGVmaW5lZChkYXJ3aW4pCitjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNCkKKyNlbGlmIGRlZmluZWQob3BlbmJzZDQpCitjb25maWdfcmVxdWlyZSh1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkKQorI2VsaWYgZGVmaW5lZChuZXRic2QxKQorY29uZmlnX3JlcXVpcmUodWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbmV0YnNkKQogI2Vsc2UKIGNvbmZpZ19yZXF1aXJlKHVkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3Vuc3VwKQogI2VuZGlmCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9jb21tb24uYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jCmluZGV4IDUxZTMzNzUuLjYzZjg1NDkgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2NvbW1vbi5jCkBAIC00LDYgKzQsNyBAQAogICogJElkJAogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgInVkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oIgogCkBAIC0xMyw2ICsxNCwxMCBAQAogCiAjaW5jbHVkZSAidWRwX2VuZHBvaW50X3ByaXZhdGUuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcF9lbmRwb2ludF9jb21tb24sIGxpYm5ldHNubXBtaWJzKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwX2VuZHBvaW50X2VudHJ5X2NyZWF0ZSwgdWRwX2VuZHBvaW50X2NvbW1vbikKKwogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBsb2NhbCBzdGF0aWMgdmFycwpAQCAtMjQsMTEgKzI5LDYgQEAKICAqIGluaXRpYWxpemF0aW9uCiAgKi8KIAotdm9pZAotbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2luaXQodm9pZCkKLXsKLX0KLQogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBjb250YWluZXIgZnVuY3Rpb25zCkBAIC0xMDUsNyArMTA1LDggQEAKICAgICAgICAgICogZnJlZSBhbGwgaXRlbXMuCiAgICAgICAgICAqLwogICAgICAgICBDT05UQUlORVJfQ0xFQVIoY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilmcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKikKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9mcmVlLAogICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CiAgICAgfQogCkBAIC0xMTksNiArMTIwLDcgQEAKICAqLwogLyoqCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBfRU5EUE9JTlRfRU5UUllfQ1JFQVRFCiBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqCiBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfY3JlYXRlKHZvaWQpCiB7CkBAIC0xMzUsNiArMTM3LDcgQEAKIAogICAgIHJldHVybiBlbnRyeTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUF9FTkRQT0lOVF9FTlRSWV9DUkVBVEUgKi8KIAogLyoqCiAgKi8KQEAgLTE1MywyMyArMTU2LDMgQEAKIAogICAgIGZyZWUoZW50cnkpOwogfQotCi0KLS8qKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogVXRpbGl0eSByb3V0aW5lcwotICovCi0KLS8qKgotICogXGludGVybmFsCi0gKi8KLXN0YXRpYyB2b2lkCi1fZW50cnlfcmVsZWFzZShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqIGVudHJ5LCB2b2lkICpjb250ZXh0KQotewotICAgIG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9mcmVlKGVudHJ5KTsKLX0KLQotLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KLS8qCi0gKgotICovCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9mcmVlYnNkNC5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmI4YmI2Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfZnJlZWJzZDQuYwpAQCAtMCwwICsxLDE5NCBAQAorLyoKKyAqICBVRFAgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBGcmVlQlNEL0RyYWdvbkZseUJzZAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50Lmg+CisKKyNpbmNsdWRlICJ1ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJ1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9pbml0KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfY2xlYW51cChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwCisgICAgICovCit9CisKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfY29weShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICpyaHMpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWxldGUgYW4gZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2RlbGV0ZShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiogeHh4LXJrczo5IHRjcENvbm4gZGVsZXRlIG5vdCBpbXBsZW1lbnRlZCAqLworICAgIHJldHVybiAtMTsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzICkKK3sKKyAgICBpbnQgcmMgPSAwOworCisgICAgREVCVUdNU0dUTCgoImFjY2Vzczp1ZHBfZW5kcG9pbnQ6Y29udGFpbmVyIiwKKyAgICAgICAgICAgICAgICAidWRwX2VuZHBvaW50X2NvbnRhaW5lcl9hcmNoX2xvYWQgKGZsYWdzICV4KVxuIiwgbG9hZF9mbGFncykpOworCisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJubyBjb250YWluZXIgc3BlY2lmaWVkL2ZvdW5kIGZvciBhY2Nlc3NfdWRwX2VuZHBvaW50XG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJjID0gX2xvYWQoY29udGFpbmVyLCBsb2FkX2ZsYWdzKTsKKworICAgIHJldHVybiByYzsKK30KKworI2RlZmluZSBOU19FTEVNIHN0cnVjdCB4aW5wY2IKKworLyoqCisgKgorICogQHJldHZhbCAgMCBubyBlcnJvcnMKKyAqIEByZXR2YWwgITAgZXJyb3JzCisgKi8KK3N0YXRpYyBpbnQKK19sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGxvYWRfZmxhZ3MpCit7CisgICAgc2l6ZV90ICAgbGVuOworICAgIGludCAgICAgIHNuYW1lW10gPSB7IENUTF9ORVQsIFBGX0lORVQsIElQUFJPVE9fVURQLCBVRFBDVExfUENCTElTVCB9OworICAgIGNoYXIgICAgICp1ZHBjYl9idWYgPSBOVUxMOworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorICAgIHN0cnVjdCB4aW5wY2IgICp4aWcgPSBOVUxMOworI2Vsc2UKKyAgICBzdHJ1Y3QgeGlucGdlbiAqeGlnID0gTlVMTDsKKyNlbmRpZgorICAgIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICAqZW50cnk7CisgICAgaW50ICAgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiAgUmVhZCBpbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRDUCB0YWJsZSBkYXRhCisgICAgICovCisgICAgbGVuID0gMDsKKyAgICBpZiAoc3lzY3RsKHNuYW1lLCA0LCAwLCAmbGVuLCAwLCAwKSA8IDAgfHwKKyAgICAgICAodWRwY2JfYnVmID0gbWFsbG9jKGxlbikpID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBpZiAoc3lzY3RsKHNuYW1lLCA0LCB1ZHBjYl9idWYsICZsZW4sIDAsIDApIDwgMCkgeworICAgICAgICBmcmVlKHVkcGNiX2J1Zik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKgorICAgICAqICBVbnBpY2sgdGhpcyBpbnRvIHRoZSBjb25zdGl0dWVudCAneGlucGdlbicgc3RydWN0dXJlcywgYW5kIGV4dHJhY3QKKyAgICAgKiAgICAgdGhlICdpbnBjYicgZWxlbWVudHMgaW50byBhIGxpbmtlZCBsaXN0IChidWlsdCBpbiByZXZlcnNlKQorICAgICAqLworI2lmIGRlZmluZWQoZHJhZ29uZmx5KQorICAgIHhpZyA9IChzdHJ1Y3QgeGlucGNiICAqKSB1ZHBjYl9idWY7CisjZWxzZQorICAgIHhpZyA9IChzdHJ1Y3QgeGlucGdlbiAqKSB1ZHBjYl9idWY7CisgICAgeGlnID0gKHN0cnVjdCB4aW5wZ2VuICopICgoY2hhciAqKSB4aWcgKyB4aWctPnhpZ19sZW4pOworI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKyAgICB3aGlsZSAoeGlnICYmICh4aWctPnhpX2xlbiA+PSBzaXplb2Yoc3RydWN0IHhpbnBjYikpKQorI2Vsc2UKKyAgICB3aGlsZSAoeGlnICYmICh4aWctPnhpZ19sZW4gPiBzaXplb2Yoc3RydWN0IHhpbnBnZW4pKSkKKyNlbmRpZgorICAgIHsKKwlOU19FTEVNIHBjYiA9ICooKE5TX0VMRU0gKikgeGlnKTsKKyNpZiBkZWZpbmVkKGRyYWdvbmZseSkKKwl4aWcgPSAoc3RydWN0IHhpbnBjYiAgKikgKChjaGFyICopIHhpZyArIHhpZy0+eGlfbGVuKTsKKyNlbHNlCisJeGlnID0gKHN0cnVjdCB4aW5wZ2VuICopICgoY2hhciAqKSB4aWcgKyB4aWctPnhpZ19sZW4pOworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgICAgICBpZiAocGNiLnhpX2lucC5pbnBfdmZsYWcgJiBJTlBfSVBWNikKKwkgICAgY29udGludWU7CisjZW5kaWYKKworICAgICAgICBlbnRyeSA9IG5ldHNubXBfYWNjZXNzX3VkcF9lbmRwb2ludF9lbnRyeV9jcmVhdGUoKTsKKyAgICAgICAgaWYoTlVMTCA9PSBlbnRyeSkgeworICAgICAgICAgICAgcmMgPSAtMzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyoqIG9kZGx5IGVub3VnaCwgdGhlc2UgYXBwZWFyIHRvIGFscmVhZHkgYmUgaW4gbmV0d29yayBvcmRlciAqLworICAgICAgICBlbnRyeS0+bG9jX3BvcnQgPSBodG9ucyhwY2IueGlfaW5wLmlucF9scG9ydCk7CisgICAgICAgIGVudHJ5LT5ybXRfcG9ydCA9IGh0b25zKHBjYi54aV9pbnAuaW5wX2Zwb3J0KTsKKyAgICAgICAgZW50cnktPnBpZCA9IDA7CisgICAgICAgIAorICAgICAgICAvKiogdGhlIGFkZHIgc3RyaW5nIG1heSBuZWVkIHdvcmsgKi8KKwlpZiAocGNiLnhpX2lucC5pbnBfdmZsYWcgJiBJTlBfSVBWNikgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDE2OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmcGNiLnhpX2lucC5pbjZwX2xhZGRyLCAxNik7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZwY2IueGlfaW5wLmluNnBfZmFkZHIsIDE2KTsKKwl9CisJZWxzZSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gNDsKKwkgICAgbWVtY3B5KGVudHJ5LT5sb2NfYWRkciwgJnBjYi54aV9pbnAuaW5wX2xhZGRyLCA0KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJnBjYi54aV9pbnAuaW5wX2ZhZGRyLCA0KTsKKwl9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgorICAgICAgICAgKi8KKwllbnRyeS0+aW5kZXggPSBDT05UQUlORVJfU0laRShjb250YWluZXIpICsgMTsKKyAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsIGVudHJ5KTsKKyAgICB9CisKKyAgICBpZihyYzwwKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9saW51eC5jCmluZGV4IGJhOGY3YTIuLjZlZGJkYzEgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X2xpbnV4LmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfbGludXguYwpAQCAtNCw2ICs0LDcgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CkBAIC0xNCwxMSArMTUsMTUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaD4KIAogI2luY2x1ZGUgInVkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2NvbnN0YW50cy5oIgotCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuaCIKICNpbmNsdWRlICJ1ZHBfZW5kcG9pbnRfcHJpdmF0ZS5oIgogCiAjaW5jbHVkZSA8ZmNudGwuaD4KIAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGV4dF91dGlscykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBfZW5kcG9pbnRfYWxsLCBsaWJuZXRzbm1wbWlicykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBfZW5kcG9pbnRfd3JpdGFibGUsIHVkcF9lbmRwb2ludF9hbGwpCisKIHN0YXRpYyBpbnQgX2xvYWQ0KG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzKTsKICNpZiBkZWZpbmVkIChORVRTTk1QX0VOQUJMRV9JUFY2KQogc3RhdGljIGludCBfbG9hZDYobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOwpAQCAtMzAsNiArMzUsNyBAQAogICogQHJldHZhbCAgMDogc3VjY2VzcwogICogQHJldHZhbCA8MDogZXJyb3IKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUF9FTkRQT0lOVF9XUklUQUJMRQogaW50CiBuZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2luaXQobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkgKmVudHJ5KQogewpAQCAtNzEsNiArNzcsNyBAQAogICAgIC8qKiB4eHgtcmtzOjkgdWRwX2VuZHBvaW50IGRlbGV0ZSBub3QgaW1wbGVtZW50ZWQgKi8KICAgICByZXR1cm4gLTE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBfRU5EUE9JTlRfV1JJVEFCTEUgKi8KIAogCiAvKioKQEAgLTg0LDYgKzkxLDkgQEAKIHsKICAgICBpbnQgcmMgPSAwOwogCisgICAgLyogU2V0dXAgdGhlIHBpZF9mcm9tX2lub2RlIHRhYmxlLCBhbmQgZmlsbCBpdC4qLworICAgIG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlX2luaXQoKTsKKwogICAgIHJjID0gX2xvYWQ0KGNvbnRhaW5lciwgbG9hZF9mbGFncyk7CiAgICAgaWYocmMgPCAwKSB7CiAgICAgICAgIHVfaW50IGZsYWdzID0gTkVUU05NUF9BQ0NFU1NfVURQX0VORFBPSU5UX0ZSRUVfS0VFUF9DT05UQUlORVI7CkBAIC0xNTAsMTQgKzE2MCwxNCBAQAogICAgIGxlbiA9IChzZXAgLSBwdHIpOwogICAgIGlmICgtMSA9PSBuZXRzbm1wX2FkZHJzdHJfaHRvbihwdHIsIGxlbikpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInRleHQ6dXRpbDp0dmkiLCAiYmFkIGxlbmd0aCAlZCBmb3IgbG9jIGFkZHIgJyVzJ1xuIiwKLSAgICAgICAgICAgICAgICAgICAgdV9wdHJfbGVuLCBsaW5lX2luZm8tPnN0YXJ0KSk7CisgICAgICAgICAgICAgICAgICAgIChpbnQpdV9wdHJfbGVuLCBsaW5lX2luZm8tPnN0YXJ0KSk7CiAgICAgICAgIHJldHVybiBQTUxQX1JDX01FTU9SWV9VTlVTRUQ7CiAgICAgfQogICAgIG9mZnNldCA9IDA7CiAgICAgbmV0c25tcF9oZXhfdG9fYmluYXJ5KCZ1X3B0ciwgJnVfcHRyX2xlbiwgJm9mZnNldCwgMCwgcHRyLCBOVUxMKTsKICAgICBpZiAoKDQgIT0gb2Zmc2V0KSAmJiAoMTYgIT0gb2Zmc2V0KSkgewogICAgICAgICBERUJVR01TR1RMKCgidGV4dDp1dGlsOnR2aSIsICJiYWQgb2Zmc2V0ICVkIGZvciBsb2MgYWRkciAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICBvZmZzZXQsIGxpbmVfaW5mby0+c3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludClvZmZzZXQsIGxpbmVfaW5mby0+c3RhcnQpKTsKICAgICAgICAgcmV0dXJuIFBNTFBfUkNfTUVNT1JZX1VOVVNFRDsKICAgICB9CiAgICAgZXAtPmxvY19hZGRyX2xlbiA9IG9mZnNldDsKQEAgLTE4NiwxNCArMTk2LDE0IEBACiAgICAgbGVuID0gKHNlcCAtIHB0cik7CiAgICAgaWYgKC0xID09IG5ldHNubXBfYWRkcnN0cl9odG9uKHB0ciwgbGVuKSkgewogICAgICAgICBERUJVR01TR1RMKCgidGV4dDp1dGlsOnR2aSIsICJiYWQgbGVuZ3RoICVkIGZvciBybXQgYWRkciAnJXMnXG4iLAotICAgICAgICAgICAgICAgICAgICB1X3B0cl9sZW4sIGxpbmVfaW5mby0+c3RhcnQpKTsKKyAgICAgICAgICAgICAgICAgICAgKGludCl1X3B0cl9sZW4sIGxpbmVfaW5mby0+c3RhcnQpKTsKICAgICAgICAgcmV0dXJuIFBNTFBfUkNfTUVNT1JZX1VOVVNFRDsKICAgICB9CiAgICAgb2Zmc2V0ID0gMDsKICAgICBuZXRzbm1wX2hleF90b19iaW5hcnkoJnVfcHRyLCAmdV9wdHJfbGVuLCAmb2Zmc2V0LCAwLCBwdHIsIE5VTEwpOwogICAgIGlmICgoNCAhPSBvZmZzZXQpICYmICgxNiAhPSBvZmZzZXQpKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ0ZXh0OnV0aWw6dHZpIiwgImJhZCBvZmZzZXQgJWQgZm9yIHJtdCBhZGRyICclcydcbiIsCi0gICAgICAgICAgICAgICAgICAgIG9mZnNldCwgbGluZV9pbmZvLT5zdGFydCkpOworICAgICAgICAgICAgICAgICAgICAoaW50KW9mZnNldCwgbGluZV9pbmZvLT5zdGFydCkpOwogICAgICAgICByZXR1cm4gUE1MUF9SQ19NRU1PUllfVU5VU0VEOwogICAgIH0KICAgICBlcC0+cm10X2FkZHJfbGVuID0gb2Zmc2V0OwpAQCAtMjIyLDggKzIzMiwxMyBAQAogICAgIGlub2RlID0gc3RydG91bGwocHRyLCAmcHRyLCAwKTsKICAgICBlcC0+aW5zdGFuY2UgPSAodV9pbnQpaW5vZGU7CiAKLSAgICBlcC0+aW5kZXggPSAodV9pbnQpKGxwaS0+dXNlcl9jb250ZXh0KTsKLSAgICBscGktPnVzZXJfY29udGV4dCA9ICh2b2lkKikoKHVfaW50KShscGktPnVzZXJfY29udGV4dCkgKyAxKTsKKyAgICAvKgorICAgICAqIGdldCB0aGUgcGlkIGFsc28KKyAgICAgKi8KKyAgICBlcC0+cGlkID0gbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUoaW5vZGUpOworCisgICAgZXAtPmluZGV4ID0gKHVpbnRwdHJfdCkobHBpLT51c2VyX2NvbnRleHQpOworICAgIGxwaS0+dXNlcl9jb250ZXh0ID0gKHZvaWQqKSgoY2hhciopKGxwaS0+dXNlcl9jb250ZXh0KSArIDEpOwogCiAgICAgZXAtPm9pZF9pbmRleC5vaWRzID0gJmVwLT5pbmRleDsKICAgICBlcC0+b2lkX2luZGV4LmxlbiA9IDE7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X25ldGJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ODMxNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9uZXRic2QuYwpAQCAtMCwwICsxLDIwNyBAQAorLyoKKyAqICB1ZHBfZW5kcG9pbnRUYWJsZSBNSUIgYXJjaGl0ZWN0dXJlIHN1cHBvcnQgZm9yIE5ldEJTRAorICoKKyAqICRJZDogdWRwX2VuZHBvaW50X2xpbnV4LmMgMTg5OTQgMjAxMC0wNi0xNiAxMzoxMzoyNVogZHRzMTIgJAorICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50Lmg+CisKKyNpbmNsdWRlICJ1ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJ1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncywgaW50IHZhcik7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9pbml0KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfY2xlYW51cChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwCisgICAgICovCit9CisKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfY29weShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICpyaHMpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWxldGUgYW4gZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2RlbGV0ZShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiogeHh4LXJrczo5IHVkcF9lbmRwb2ludCBkZWxldGUgbm90IGltcGxlbWVudGVkICovCisgICAgcmV0dXJuIC0xOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MgKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnVkcF9lbmRwb2ludDpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJ1ZHBfZW5kcG9pbnRfY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc191ZHBfZW5kcG9pbnRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MsIDQpOworI2lmIGRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICByYyA9IF9sb2FkKGNvbnRhaW5lciwgbG9hZF9mbGFncywgNik7CisjZW5kaWYKKworICAgIHJldHVybiByYzsKK30KKworCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncywgaW50IHZlcikKK3sKKyAgICBjb25zdCBjaGFyICptaWJuYW1lOworICAgIGludCAgICAgIG1pYls4XTsKKyAgICBzaXplX3QgICBtaWJfbGVuOworICAgIHN0cnVjdCBraW5mb19wY2IgKnBjYmxpc3Q7CisgICAgc2l6ZV90ICAgcGNiX2xlbjsKKyAgICBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAgKmVudHJ5OworICAgIGludCAgICAgIGksIHJjID0gMDsKKworICAgIC8qCisgICAgICogIFJlYWQgaW4gdGhlIGJ1ZmZlciBjb250YWluaW5nIHRoZSBUQ1AgdGFibGUgZGF0YQorICAgICAqLworICAgIHN3aXRjaCAodmVyKSB7CisgICAgY2FzZSA0OgorICAgIAltaWJuYW1lID0gIm5ldC5pbmV0LnVkcC5wY2JsaXN0IjsKKyAgICAJYnJlYWs7CisgICAgY2FzZSA2OgorICAgIAltaWJuYW1lID0gIm5ldC5pbmV0Ni51ZHA2LnBjYmxpc3QiOworCWJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ1ZHAtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBiYWQgdmVyc2lvbiAlZFxuIiwgdmVyKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHN5c2N0bG5hbWV0b21pYihtaWJuYW1lLCBtaWIsICZtaWJfbGVuKSA9PSAtMSkgeworICAgIAlzbm1wX2xvZyhMT0dfRVJSLCAidWRwLW1pYjpkYXRhX2FjY2VzczpfbG9hZDogY2FudCByZXNvbHZlIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChzeXNjdGwobWliLCBzaXplb2YobWliKSAvIHNpemVvZigqbWliKSwgTlVMTCwgJnBjYl9sZW4sIE5VTEwsIDApID09IC0xKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ1ZHAtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IHNpemUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKChwY2JsaXN0ID0gbWFsbG9jKHBjYl9sZW4pKSA9PSBOVUxMKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ1ZHAtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IGFsbG9jYXRlIG1pYiAlc1xuIiwgbWlibmFtZSk7CisJcmV0dXJuIC0xOworICAgIH0KKyAgICBtZW1zZXQocGNibGlzdCwgMCwgcGNiX2xlbik7CisKKyAgICBtaWJbNl0gPSBzaXplb2YoKnBjYmxpc3QpOworICAgIG1pYls3XSA9IHBjYl9sZW4gLyBzaXplb2YoKnBjYmxpc3QpOworCisgICAgaWYgKHN5c2N0bChtaWIsIHNpemVvZihtaWIpIC8gc2l6ZW9mKCptaWIpLAorCQkgICAgcGNibGlzdCwgJnBjYl9sZW4sIE5VTEwsIDApID09IC0xKSB7CisgICAgCXNubXBfbG9nKExPR19FUlIsICJ1ZHAtbWliOmRhdGFfYWNjZXNzOl9sb2FkOiBjYW50IHNpemUgbWliICVzXG4iLCBtaWJuYW1lKTsKKwlyZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiAgVW5waWNrIHRoaXMgaW50byB0aGUgY29uc3RpdHVlbnQgc3RydWN0dXJlcywgYW5kIGV4dHJhY3QKKyAgICAgKiAgICAgdGhlICdpbnBjYicgZWxlbWVudHMgaW50byBhIGxpbmtlZCBsaXN0IChidWlsdCBpbiByZXZlcnNlKQorICAgICAqLworICAgIGZvciAoaSA9IDA7IGkgPCBwY2JfbGVuIC8gc2l6ZW9mKCpwY2JsaXN0KTsgaSsrKSB7CisJc3RydWN0IGtpbmZvX3BjYiAqcGNiID0gcGNibGlzdCtpOworCisgICAgICAgIGVudHJ5ID0gbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2VudHJ5X2NyZWF0ZSgpOworICAgICAgICBpZihOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBlbnRyeS0+cGlkID0gMDsKKyAgICAgICAgCisJaWYgKHZlciA9PSA2KSB7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc3JjLCBkc3Q7CisJICAgIG1lbWNweSgmc3JjLCAmcGNiLT5raV9zLCBzaXplb2Yoc3JjKSk7CisJICAgIG1lbWNweSgmZHN0LCAmcGNiLT5raV9kLCBzaXplb2YoZHN0KSk7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gMTY7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZzcmMuc2luNl9hZGRyLCAxNik7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZkc3Quc2luNl9hZGRyLCAxNik7CisJICAgIGVudHJ5LT5sb2NfcG9ydCA9IG50b2hzKHNyYy5zaW42X3BvcnQpOworCSAgICBlbnRyeS0+cm10X3BvcnQgPSBudG9ocyhkc3Quc2luNl9wb3J0KTsKKwl9CisJZWxzZSB7CisJICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzcmMsIGRzdDsKKwkgICAgbWVtY3B5KCZzcmMsICZwY2ItPmtpX3MsIHNpemVvZihzcmMpKTsKKwkgICAgbWVtY3B5KCZkc3QsICZwY2ItPmtpX2QsIHNpemVvZihkc3QpKTsKKwkgICAgZW50cnktPmxvY19hZGRyX2xlbiA9IGVudHJ5LT5ybXRfYWRkcl9sZW4gPSA0OworCSAgICBtZW1jcHkoZW50cnktPmxvY19hZGRyLCAmc3JjLnNpbl9hZGRyLCA0KTsKKwkgICAgbWVtY3B5KGVudHJ5LT5ybXRfYWRkciwgJmRzdC5zaW5fYWRkciwgNCk7CisJICAgIGVudHJ5LT5sb2NfcG9ydCA9IG50b2hzKHNyYy5zaW5fcG9ydCk7CisJICAgIGVudHJ5LT5ybXRfcG9ydCA9IG50b2hzKGRzdC5zaW5fcG9ydCk7CisJfQorCisgICAgICAgIC8qCisgICAgICAgICAqIGFkZCBlbnRyeSB0byBjb250YWluZXIKKyAgICAgICAgICovCisgICAgICAgIGVudHJ5LT5pbmRleCA9IENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgKyAxOworICAgICAgICBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZW50cnkpOworICAgIH0KKworICAgIGlmKHJjPDApCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfb3BlbmJzZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YjY3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9vcGVuYnNkLmMKQEAgLTAsMCArMSwxNzcgQEAKKy8qCisgKiAgdWRwX2VuZHBvaW50VGFibGUgTUlCIGFyY2hpdGVjdHVyZSBzdXBwb3J0IGZvciBPcGVuQlNECisgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9hdXRvX25saXN0Lmg+CisKKyNpbmNsdWRlICJ1ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9jb25zdGFudHMuaCIKKyNpbmNsdWRlICJ1ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9wcml2YXRlLmgiCisKKyNpbmNsdWRlICJtaWJJSS9taWJJSV9jb21tb24uaCIKKworI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworc3RhdGljIGludCBfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCB1X2ludCBmbGFncyk7CisKKy8qCisgKiBpbml0aWFsaXplIGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICoKKyAqIEByZXR2YWwgIDA6IHN1Y2Nlc3MKKyAqIEByZXR2YWwgPDA6IGVycm9yCisgKi8KK2ludAorbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9lbnRyeV9pbml0KG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICplbnRyeSkKK3sKKyAgICAvKgorICAgICAqIGluaXQKKyAgICAgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIGNsZWFudXAgYXJjaCBzcGVjaWZpYyBzdG9yYWdlCisgKi8KK3ZvaWQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfY2xlYW51cChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgLyoKKyAgICAgKiBjbGVhbnVwCisgICAgICovCit9CisKKy8qCisgKiBjb3B5IGFyY2ggc3BlY2lmaWMgc3RvcmFnZQorICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfY29weShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICpyaHMpCit7CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBkZWxldGUgYW4gZW50cnkKKyAqLworaW50CituZXRzbm1wX2FyY2hfdWRwX2VuZHBvaW50X2VudHJ5X2RlbGV0ZShuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZW50cnkpCit7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAvKiogeHh4LXJrczo5IHVkcF9lbmRwb2ludCBkZWxldGUgbm90IGltcGxlbWVudGVkICovCisgICAgcmV0dXJuIC0xOworfQorCisKKy8qKgorICoKKyAqIEByZXR2YWwgIDAgbm8gZXJyb3JzCisgKiBAcmV0dmFsICEwIGVycm9ycworICovCitpbnQKK25ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxvYWRfZmxhZ3MgKQoreworICAgIGludCByYyA9IDA7CisKKyAgICBERUJVR01TR1RMKCgiYWNjZXNzOnVkcF9lbmRwb2ludDpjb250YWluZXIiLAorICAgICAgICAgICAgICAgICJ1ZHBfZW5kcG9pbnRfY29udGFpbmVyX2FyY2hfbG9hZCAoZmxhZ3MgJXgpXG4iLCBsb2FkX2ZsYWdzKSk7CisKKyAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5vIGNvbnRhaW5lciBzcGVjaWZpZWQvZm91bmQgZm9yIGFjY2Vzc191ZHBfZW5kcG9pbnRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmMgPSBfbG9hZChjb250YWluZXIsIGxvYWRfZmxhZ3MpOworCisgICAgcmV0dXJuIHJjOworfQorCisvKioKKyAqCisgKiBAcmV0dmFsICAwIG5vIGVycm9ycworICogQHJldHZhbCAhMCBlcnJvcnMKKyAqLworc3RhdGljIGludAorX2xvYWQobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgbG9hZF9mbGFncykKK3sKKyAgICBzdHJ1Y3QgaW5wY2J0YWJsZSB0YWJsZTsKKyAgICBzdHJ1Y3QgaW5wY2IgICAqaGVhZCwgKm5leHQsICpwcmV2OworICAgIHN0cnVjdCBpbnBjYiAgIGlucGNiOworICAgIG5ldHNubXBfdWRwX2VuZHBvaW50X2VudHJ5ICAqZW50cnk7CisgICAgaW50ICAgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiAgUmVhZCBpbiB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIFRDUCB0YWJsZSBkYXRhCisgICAgICovCisgICAgaWYgKCFhdXRvX25saXN0KFVEQl9TWU1CT0wsIChjaGFyICopICZ0YWJsZSwgc2l6ZW9mKHRhYmxlKSkpIHsKKwlERUJVR01TR1RMKCgidWRwLW1pYi91ZHBfZW5kcG9pbnRfb3BlbmJzZCIsICJGYWlsZWQgdG8gcmVhZCB1ZHBfc3ltYm9sXG4iKSk7CisJcmV0dXJuIC0xOworICAgIH0KKworICAgIHByZXYgPSAoc3RydWN0IGlucGNiICopJkNJUkNMRVFfRklSU1QoJnRhYmxlLmlucHRfcXVldWUpOworICAgIHByZXYgPSBOVUxMOworICAgIGhlYWQgPSBuZXh0ID0gQ0lSQ0xFUV9GSVJTVCgmdGFibGUuaW5wdF9xdWV1ZSk7CisKKyAgICB3aGlsZSAobmV4dCkgeworCU5FVFNOTVBfS0xPT0tVUChuZXh0LCAoY2hhciAqKSZpbnBjYiwgc2l6ZW9mKGlucGNiKSk7CisJaWYgKHByZXYgJiYgQ0lSQ0xFUV9QUkVWKCZpbnBjYiwgaW5wX3F1ZXVlKSAhPSBwcmV2KSB7CisJICAgIHNubXBfbG9nKExPR19FUlIsInVkYnRhYmxlIGxpbmsgZXJyb3JcbiIpOworCSAgICBicmVhazsKKwl9CisJcHJldiA9IG5leHQ7CisJbmV4dCA9IENJUkNMRVFfTkVYVCgmaW5wY2IsIGlucF9xdWV1ZSk7CisKKyNpZiAhZGVmaW5lZChORVRTTk1QX0VOQUJMRV9JUFY2KQorICAgICAgICBpZiAoaW5wY2IuaW5wX2ZsYWdzICYgSU5QX0lQVjYpCisgICAgICAgICAgICBnb3RvIHNraXA7CisjZW5kaWYKKyAgICAgICAgZW50cnkgPSBuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfY3JlYXRlKCk7CisgICAgICAgIGlmIChOVUxMID09IGVudHJ5KSB7CisgICAgICAgICAgICByYyA9IC0zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiogb2RkbHkgZW5vdWdoLCB0aGVzZSBhcHBlYXIgdG8gYWxyZWFkeSBiZSBpbiBuZXR3b3JrIG9yZGVyICovCisgICAgICAgIGVudHJ5LT5sb2NfcG9ydCA9IG50b2hzKGlucGNiLmlucF9scG9ydCk7CisgICAgICAgIGVudHJ5LT5ybXRfcG9ydCA9IG50b2hzKGlucGNiLmlucF9mcG9ydCk7CisgICAgICAgIGVudHJ5LT5waWQgPSAwOworICAgICAgICAKKyAgICAgICAgLyoqIHRoZSBhZGRyIHN0cmluZyBtYXkgbmVlZCB3b3JrICovCisJaWYgKGlucGNiLmlucF9mbGFncyAmIElOUF9JUFY2KSB7CisJICAgIGVudHJ5LT5sb2NfYWRkcl9sZW4gPSBlbnRyeS0+cm10X2FkZHJfbGVuID0gMTY7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZpbnBjYi5pbnBfbGFkZHI2LCAxNik7CisJICAgIG1lbWNweShlbnRyeS0+cm10X2FkZHIsICZpbnBjYi5pbnBfZmFkZHI2LCAxNik7CisJfQorCWVsc2UgeworCSAgICBlbnRyeS0+bG9jX2FkZHJfbGVuID0gZW50cnktPnJtdF9hZGRyX2xlbiA9IDQ7CisJICAgIG1lbWNweShlbnRyeS0+bG9jX2FkZHIsICZpbnBjYi5pbnBfbGFkZHIsIDQpOworCSAgICBtZW1jcHkoZW50cnktPnJtdF9hZGRyLCAmaW5wY2IuaW5wX2ZhZGRyLCA0KTsKKwl9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIGVudHJ5IHRvIGNvbnRhaW5lcgorICAgICAgICAgKi8KKyAgICAgICAgZW50cnktPmluZGV4ID0gQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSArIDE7CisgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCBlbnRyeSk7CisjaWYgIWRlZmluZWQoTkVUU05NUF9FTkFCTEVfSVBWNikKKyAgICBza2lwOgorI2VuZGlmCisJaWYgKG5leHQgPT0gaGVhZCkKKwkgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnRfc29sYXJpczIuYwppbmRleCBmNGI2OWRmLi5mNTIyNDRhIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludF9zb2xhcmlzMi5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50X3NvbGFyaXMyLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KQEAgLTEwLDExICsxMSwxNiBAQAogCiAjaW5jbHVkZSAia2VybmVsX3N1bm9zNS5oIgogCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShuZXRzbm1wX2FjY2Vzc191ZHBfZW5kcG9pbnRfZW50cnlfY3JlYXRlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcF9lbmRwb2ludF9hbGwsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcF9lbmRwb2ludF93cml0YWJsZSwgdWRwX2VuZHBvaW50X2FsbCkKKwogc3RhdGljIGludCBfbG9hZF91ZHBfZW5kcG9pbnRfdGFibGVfdjQobmV0c25tcF9jb250YWluZXIgKiwgaW50KTsKICNpZiBkZWZpbmVkKE5FVFNOTVBfRU5BQkxFX0lQVjYpICYmIGRlZmluZWQoU09MQVJJU19IQVZFX0lQVjZfTUlCX1NVUFBPUlQpCiBzdGF0aWMgaW50IF9sb2FkX3VkcF9lbmRwb2ludF90YWJsZV92NihuZXRzbm1wX2NvbnRhaW5lciAqLCBpbnQpOwogI2VuZGlmCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBfRU5EUE9JTlRfV1JJVEFCTEUKIGludCAKIG5ldHNubXBfYXJjaF91ZHBfZW5kcG9pbnRfZW50cnlfaW5pdChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSAqZXApCiB7CkBAIC00OCw2ICs1NCw3IEBACiAgICAgICovCiAgICAgcmV0dXJuICgtMSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBfRU5EUE9JTlRfV1JJVEFCTEUgKi8KIAogaW50IAogbmV0c25tcF9hcmNoX3VkcF9lbmRwb2ludF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lciwgCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuYwppbmRleCA4MDNmNTA0Li4xNDVmNGNlIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5jCisrKyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmMKQEAgLTI2LDggKzI2LDggQEAKIAogI2luY2x1ZGUgInVkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmgiCiAKLW9pZCAgICAgICAgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZFtdID0geyBVRFBFTkRQT0lOVFRBQkxFX09JRCB9OwotaW50ICAgICAgICAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkX3NpemUgPQorY29uc3Qgb2lkICAgICAgIHVkcEVuZHBvaW50VGFibGVfb2lkW10gPSB7IFVEUEVORFBPSU5UVEFCTEVfT0lEIH07Citjb25zdCBpbnQgICAgICAgdWRwRW5kcG9pbnRUYWJsZV9vaWRfc2l6ZSA9CiBPSURfTEVOR1RIKHVkcEVuZHBvaW50VGFibGVfb2lkKTsKIAogdWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb24gdWRwRW5kcG9pbnRUYWJsZV91c2VyX2NvbnRleHQ7CkBAIC0yMjYsNyArMjI2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3NfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50UmVtb3RlUG9ydF92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbCkKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1ZHBFbmRwb2ludFRhYmxlOnVkcEVuZHBvaW50VGFibGVfaW5kZXhlc19zZXRfdGJsX2lkeCIsICJjYWxsZWRcbiIpKTsKIApAQCAtMjk1LDYgKzI5NiwxMCBAQAogICAgICAqIHVkcEVuZHBvaW50SW5zdGFuY2UoNykvVU5TSUdORUQzMi9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvYS93L2UvUi9kL2ggCiAgICAgICovCiAgICAgdGJsX2lkeC0+dWRwRW5kcG9pbnRJbnN0YW5jZSA9IHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsOworICAgIC8qCisgICAgICogdWRwRW5kcG9pbnRQcm9jZXNzKDgpL1VOU0lHTkVEMzIvQVNOX1VOU0lHTkVEL3VfbG9uZyh1X2xvbmcpLy9sL2Evdy9lL1IvZC9oIAorICAgICAqLworICAgIHRibF9pZHgtPnVkcEVuZHBvaW50UHJvY2VzcyA9IHVkcEVuZHBvaW50UHJvY2Vzc192YWw7CiAKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKQEAgLTMyMyw3ICszMjgsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3NfdmFsX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHVkcEVuZHBvaW50UmVtb3RlQWRkcmVzc192YWxfcHRyX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50UmVtb3RlUG9ydF92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyB1ZHBFbmRwb2ludEluc3RhbmNlX3ZhbCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbCkKIHsKICAgICBERUJVR01TR1RMKCgidmVyYm9zZTp1ZHBFbmRwb2ludFRhYmxlOnVkcEVuZHBvaW50VGFibGVfaW5kZXhlc19zZXQiLAogICAgICAgICAgICAgICAgICJjYWxsZWRcbiIpKTsKQEAgLTMzOCw3ICszNDQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRSZW1vdGVBZGRyZXNzX3ZhbF9wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3NfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFJlbW90ZVBvcnRfdmFsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsKSkKICAgICAgICAgcmV0dXJuIE1GRF9FUlJPUjsKIAogICAgIC8qCkBAIC00MDUsOSArNDEyLDkgQEAKIAogICAgIC8qCiAgICAgICogVE9ETzoyMzE6bzogfC0+IEV4dHJhY3QgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHVkcEVuZHBvaW50UHJvY2VzcyBkYXRhLgotICAgICAqIGNvcHkgKCogdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbF9wdHIgKSBmcm9tIHJvd3JlcV9jdHgtPmRhdGEKKyAgICAgKiBjb3B5ICgqIHVkcEVuZHBvaW50UHJvY2Vzc192YWxfcHRyICkgZnJvbSByb3dyZXFfY3R4LT50YmxfaWR4LnVkcEVuZHBvaW50UHJvY2VzcwogICAgICAqLwotICAgICgqdWRwRW5kcG9pbnRQcm9jZXNzX3ZhbF9wdHIpID0gcm93cmVxX2N0eC0+ZGF0YS51ZHBFbmRwb2ludFByb2Nlc3M7CisgICAgKCp1ZHBFbmRwb2ludFByb2Nlc3NfdmFsX3B0cikgPSByb3dyZXFfY3R4LT50YmxfaWR4LnVkcEVuZHBvaW50UHJvY2VzczsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdWRwRW5kcG9pbnRQcm9jZXNzX2dldCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaCBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlLmgKaW5kZXggMzY3NTJiZi4uMGRlZGEwMyAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGUuaAorKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZS5oCkBAIC0xMzIsNiArMTMyLDExIEBACiAgICAgICAgICAqLwogICAgICAgICB1X2xvbmcgICAgICAgICAgdWRwRW5kcG9pbnRJbnN0YW5jZTsKIAorICAgICAgICAvKgorICAgICAgICAgKiB1ZHBFbmRwb2ludFByb2Nlc3MoOCkvVU5TSUdORUQzMi9BU05fVU5TSUdORUQvdV9sb25nKHVfbG9uZykvL2wvYS93L2UvUi9kL2gKKyAgICAgICAgICovCisgICAgICAgIHVfbG9uZyAgICAgICAgICB1ZHBFbmRwb2ludFByb2Nlc3M7CisKIAogICAgIH0gdWRwRW5kcG9pbnRUYWJsZV9taWJfaW5kZXg7CiAKQEAgLTIwMCw4ICsyMDUsOCBAQAogICAgICAgICAqIHVkcEVuZHBvaW50VGFibGVfcm93X2ZpbmRfYnlfbWliX2luZGV4KHVkcEVuZHBvaW50VGFibGVfbWliX2luZGV4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBtaWJfaWR4KTsKIAotICAgIGV4dGVybiBvaWQgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZFtdOwotICAgIGV4dGVybiBpbnQgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZF9zaXplOworICAgIGV4dGVybiBjb25zdCBvaWQgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZFtdOworICAgIGV4dGVybiBjb25zdCBpbnQgICAgICB1ZHBFbmRwb2ludFRhYmxlX29pZF9zaXplOwogCiAKICNpbmNsdWRlICJ1ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZS5oIgpAQCAtMjU3LDcgKzI2Miw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UmVtb3RlUG9ydF92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFByb2Nlc3NfdmFsKTsKICAgICBpbnQKICAgICAgICAgdWRwRW5kcG9pbnRUYWJsZV9pbmRleGVzX3NldCh1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvd3JlcV9jdHgsCkBAIC0yNzMsNyArMjgwLDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBFbmRwb2ludFJlbW90ZUFkZHJlc3NfdmFsX3B0cl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50UmVtb3RlUG9ydF92YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50SW5zdGFuY2VfdmFsKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgdWRwRW5kcG9pbnRJbnN0YW5jZV92YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIHVkcEVuZHBvaW50UHJvY2Vzc192YWwpOwogCiAKIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYyBiL2FnZW50L21pYmdyb3VwL3VkcC1taWIvdWRwRW5kcG9pbnRUYWJsZS91ZHBFbmRwb2ludFRhYmxlX2RhdGFfYWNjZXNzLmMKaW5kZXggZDIyM2I5Ni4uMGUyNWMyMSAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfZGF0YV9hY2Nlc3MuYworKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9kYXRhX2FjY2Vzcy5jCkBAIC0yNDMsNyArMjQzLDggQEAKICAgICAgICAgbmV0c25tcF9hY2Nlc3NfdWRwX2VuZHBvaW50X2NvbnRhaW5lcl9mcmVlKGVwX2MsIDApOwogICAgICAgICByZXR1cm4gTUZEX1JFU09VUkNFX1VOQVZBSUxBQkxFOwogICAgIH0KLSAgICBmb3IgKGVwID0gSVRFUkFUT1JfRklSU1QoZXBfaXQpOyBlcDsgZXAgPSBJVEVSQVRPUl9ORVhUKGVwX2l0KSkgeworICAgIGZvciAoZXAgPSAobmV0c25tcF91ZHBfZW5kcG9pbnRfZW50cnkqKUlURVJBVE9SX0ZJUlNUKGVwX2l0KTsgZXA7CisgICAgICAgICBlcCA9IChuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeSopSVRFUkFUT1JfTkVYVCAoZXBfaXQpKSB7CiAKICAgICAgICAgLyoKICAgICAgICAgICogVE9ETzozNTI6TTogfCAgIHwtPiBzZXQgaW5kZXhlcyBpbiBuZXcgdWRwRW5kcG9pbnRUYWJsZSByb3dyZXEgY29udGV4dC4KQEAgLTI2NSw3ICsyNjYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKSBlcC0+cm10X2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5ybXRfYWRkcl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5ybXRfcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXAtPmluc3RhbmNlKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcC0+aW5zdGFuY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVwLT5waWQpKSB7CiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAogICAgICAgICAgICAgICAgICAgICAgImVycm9yIHNldHRpbmcgaW5kZXggd2hpbGUgbG9hZGluZyAiCiAgICAgICAgICAgICAgICAgICAgICAidWRwRW5kcG9pbnRUYWJsZSBkYXRhLlxuIik7CkBAIC0yOTMsNyArMjk1LDcgQEAKIAogCiAgICAgREVCVUdNU0dUKCgidmVyYm9zZTp1ZHBFbmRwb2ludFRhYmxlOnVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX2xvYWQiLAotICAgICAgICAgICAgICAgImluc2VydGVkICVkIHJlY29yZHNcbiIsIENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKKyAgICAgICAgICAgICAgICJpbnNlcnRlZCAlZCByZWNvcmRzXG4iLCAoaW50KUNPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikpKTsKIAogICAgIHJldHVybiBNRkRfU1VDQ0VTUzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfbG9hZCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdWRwLW1pYi91ZHBFbmRwb2ludFRhYmxlL3VkcEVuZHBvaW50VGFibGVfaW50ZXJmYWNlLmMgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYwppbmRleCAyOGMyZGYzLi42MGQzN2U5IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYworKysgYi9hZ2VudC9taWJncm91cC91ZHAtbWliL3VkcEVuZHBvaW50VGFibGUvdWRwRW5kcG9pbnRUYWJsZV9pbnRlcmZhY2UuYwpAQCAtMzAsNiArMzAsNyBAQAogICogc3RhbmRhcmQgTmV0LVNOTVAgaW5jbHVkZXMgCiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIApAQCAtNDYsNiArNDcsMTggQEAKIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBFbmRwb2ludFRhYmxlX2V4dGVybmFsX2FjY2VzcywgbGlibmV0c25tcG1pYnMpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHJvd19tZXJnZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX3NpemUsIHVkcEVuZHBvaW50VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uX3NldCwgdWRwRW5kcG9pbnRUYWJsZV9leHRlcm5hbF9hY2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb25fZ2V0LCB1ZHBFbmRwb2ludFRhYmxlX2V4dGVybmFsX2FjY2VzcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9nZXQsIHVkcEVuZHBvaW50VGFibGVfZXh0ZXJuYWxfYWNjZXNzKQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqKioKQEAgLTc5LDE5ICs5MiwyMyBAQAogICAgICAgICAgICAgICAgIF91ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9zaHV0ZG93bih1ZHBFbmRwb2ludFRhYmxlX2ludGVyZmFjZV9jdHggKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9jdHgpOwogCi0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX0NPTlRBSU5FUl9HRVQKIG5ldHNubXBfY29udGFpbmVyICoKIHVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX2dldCh2b2lkKQogewogICAgIHJldHVybiB1ZHBFbmRwb2ludFRhYmxlX2lmX2N0eC5jb250YWluZXI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX0NPTlRBSU5FUl9HRVQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfUkVHSVNUUkFUSU9OX0dFVAogdWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb24gKgogdWRwRW5kcG9pbnRUYWJsZV9yZWdpc3RyYXRpb25fZ2V0KHZvaWQpCiB7CiAgICAgcmV0dXJuIHVkcEVuZHBvaW50VGFibGVfaWZfY3R4LnVzZXJfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9SRUdJU1RSQVRJT05fR0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX1JFR0lTVFJBVElPTl9TRVQKIHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uICoKIHVkcEVuZHBvaW50VGFibGVfcmVnaXN0cmF0aW9uX3NldCh1ZHBFbmRwb2ludFRhYmxlX3JlZ2lzdHJhdGlvbiAqIG5ld3JlZykKIHsKQEAgLTk5LDEyICsxMTYsMTUgQEAKICAgICB1ZHBFbmRwb2ludFRhYmxlX2lmX2N0eC51c2VyX2N0eCA9IG5ld3JlZzsKICAgICByZXR1cm4gb2xkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9SRUdJU1RSQVRJT05fU0VUICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VRFBFTkRQT0lOVFRBQkxFX0NPTlRBSU5FUl9TSVpFCiBpbnQKIHVkcEVuZHBvaW50VGFibGVfY29udGFpbmVyX3NpemUodm9pZCkKIHsKICAgICByZXR1cm4gQ09OVEFJTkVSX1NJWkUodWRwRW5kcG9pbnRUYWJsZV9pZl9jdHguY29udGFpbmVyKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VEUEVORFBPSU5UVEFCTEVfQ09OVEFJTkVSX1NJWkUgKi8KIAogLyoKICAqIG1mZCBtdWx0aXBsZXhlciBtb2RlcwpAQCAtMTU4LDcgKzE3OCw3IEBACiAKICAgICAvKgogICAgICAqIERlZmluZSB0aGUgbWluaW11bSBhbmQgbWF4aW11bSBhY2Nlc3NpYmxlIGNvbHVtbnMuICBUaGlzCi0gICAgICogb3B0aW1pemVzIHJldHJpdmFsLiAKKyAgICAgKiBvcHRpbWl6ZXMgcmV0cmlldmFsLiAKICAgICAgKi8KICAgICB0YmxfaW5mby0+bWluX2NvbHVtbiA9IFVEUEVORFBPSU5UVEFCTEVfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9IFVEUEVORFBPSU5UVEFCTEVfTUFYX0NPTDsKQEAgLTIyOCw3ICsyNDgsOCBAQAogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPnBvc3RfcmVxdWVzdCkKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9QT1NUX1JFUVVFU1Q7CiAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQorICAgIC8qIFhYWCAtIGFyZSB0aGVzZSBhY3R1YWxseSBuZWNlc3Nhcnk/ICovCiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+c2V0X3ZhbHVlcykKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9TRVRfVkFMVUVTOwogICAgIGlmIChhY2Nlc3NfbXVsdGlwbGV4ZXItPmlycmV2ZXJzaWJsZV9jb21taXQpCkBAIC0yNTEsNyArMjcyLDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYgKGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQpCiAgICAgICAgIG1mZF9tb2RlcyB8PSBCQUJZX1NURVBfVU5ET19DT01NSVQ7Ci0jZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgfHwgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUICovCiAKICAgICBoYW5kbGVyID0gbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0KG1mZF9tb2Rlcyk7CiAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWdpbmZvLCBoYW5kbGVyKTsKQEAgLTcwMSw3ICs3MjIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYWd0cmVxX2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50ICAgICAgICAgICAgIHJjLCBwYWNrZXRfcmM7CiAKQEAgLTc0OCw3ICs3NjksNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgdWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAodWRwRW5kcG9pbnRUYWJsZV9yb3dyZXFfY3R4KikKICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOnVkcEVuZHBvaW50VGFibGU6X21mZF91ZHBFbmRwb2ludFRhYmxlX29iamVjdF9sb29rdXAiLCAiY2FsbGVkXG4iKSk7CkBAIC04MTksNyArODQwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICB1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICh1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gKnRyaTsKICAgICB1X2NoYXIgICAgICAgICAqb2xkX3N0cmluZzsKQEAgLTEwMjQsNiArMTA0NSw3IEBACiAgICAgICAgICAgICAgICAgICJ1ZHBFbmRwb2ludFRhYmxlX2NvbnRhaW5lcl9pbml0XG4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBpZl9jdHgtPmNvbnRhaW5lci0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInVkcEVuZHBvaW50VGFibGUiKTsKIAogICAgIGlmIChOVUxMICE9IGlmX2N0eC0+Y2FjaGUpCiAgICAgICAgIGlmX2N0eC0+Y2FjaGUtPm1hZ2ljID0gKHZvaWQgKikgaWZfY3R4LT5jb250YWluZXI7CkBAIC0xMDQ2LDYgKzEwNjgsNyBAQAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBfdWRwRW5kcG9pbnRUYWJsZV9jb250YWluZXJfc2h1dGRvd24gKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9FWFRFUk5BTF9BQ0NFU1MKIHVkcEVuZHBvaW50VGFibGVfcm93cmVxX2N0eCAqCiB1ZHBFbmRwb2ludFRhYmxlX3Jvd19maW5kX2J5X21pYl9pbmRleCh1ZHBFbmRwb2ludFRhYmxlX21pYl9pbmRleCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtaWJfaWR4KQpAQCAtMTA2OCw4ICsxMDkxLDkgQEAKICAgICBpZiAoTUZEX1NVQ0NFU1MgIT0gcmMpCiAgICAgICAgIHJldHVybiBOVUxMOwogCi0gICAgcm93cmVxX2N0eCA9CisgICAgcm93cmVxX2N0eCA9ICh1ZHBFbmRwb2ludFRhYmxlX3Jvd3JlcV9jdHgqKQogICAgICAgICBDT05UQUlORVJfRklORCh1ZHBFbmRwb2ludFRhYmxlX2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKIAogICAgIHJldHVybiByb3dyZXFfY3R4OwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVURQRU5EUE9JTlRUQUJMRV9FWFRFUk5BTF9BQ0NFU1MgKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuYwppbmRleCBhMDE3NjU4Li41NDA2OGM2IDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmMKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5jCkBAIC05LDYgKzksNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9JT19ICkBAIC00MywxMSArNDQsNyBAQAogIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXRfdmFsKSAoKChzdGF0X3ZhbCkgJiAyNTUpID09IDApCiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTcwLDkgKzY3LDYgQEAKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTg2LDIzICs4MCw5IEBACiAjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KICNlbmRpZgotI2lmIEhBVkVfRElSRU5UX0gKLSNpbmNsdWRlIDxkaXJlbnQuaD4KLSNlbHNlCi0jIGRlZmluZSBkaXJlbnQgZGlyZWN0Ci0jIGlmIEhBVkVfU1lTX05ESVJfSAotIyAgaW5jbHVkZSA8c3lzL25kaXIuaD4KLSMgZW5kaWYKLSMgaWYgSEFWRV9TWVNfRElSX0gKLSMgIGluY2x1ZGUgPHN5cy9kaXIuaD4KLSMgZW5kaWYKLSMgaWYgSEFWRV9ORElSX0gKLSMgIGluY2x1ZGUgPG5kaXIuaD4KLSMgZW5kaWYKLSNlbmRpZgotCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CiAKICNpbmNsdWRlICJzdHJ1Y3QuaCIKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCkBAIC0xMTcsNiArOTcsMjQgQEAKICNkZWZpbmUgc2V0UGVycm9yc3RhdHVzKHgpIHNubXBfbG9nX3BlcnJvcih4KQogI2VuZGlmCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1dGlsX2Z1bmNzLCBsaWJuZXRzbm1wbWlicykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNoZWxsX2NvbW1hbmQsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZ2V0X2V4dGVuX2luc3RhbmNlLCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNsZWFyX2NhY2hlLCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGZpbmRfZmllbGQsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocGFyc2VfbWlib2lkLCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN0cmluZ19hcHBlbmRfaW50LCB1dGlsX2Z1bmNzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGludGVybmFsX21pYl90YWJsZSwgdXRpbF9mdW5jcykKKworI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9SVE5FVExJTktfSCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwcmVmaXhfaW5mb19hbGwsIHV0aWxfZnVuY3MpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocHJlZml4X2luZm8sIHByZWZpeF9pbmZvX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1cGRhdGVfcHJlZml4X2luZm8sIHByZWZpeF9pbmZvX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkZWxldGVfcHJlZml4X2luZm8sIHByZWZpeF9pbmZvX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaW5kX3ByZWZpeF9pbmZvLCBwcmVmaXhfaW5mb19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY3JlYXRlX3ByZWZpeF9pbmZvLCBwcmVmaXhfaW5mb19hbGwpCisjZW5kaWYgLyogSEFWRV9MSU5VWF9SVE5FVExJTktfSCAqLwogCiAjaWZkZWYgTkVUU05NUF9FWENBQ0hFVElNRQogc3RhdGljIGxvbmcgICAgIGNhY2hldGltZTsKQEAgLTEyNCwxMyArMTIyLDYgQEAKIAogZXh0ZXJuIGludCAgICAgIG51bXByb2NzLCBudW1leHRlbnM7CiAKLXZvaWQKLUV4aXQoaW50IHZhcikKLXsKLSAgICBzbm1wX2xvZyhMT0dfRVJSLCAiU2VydmVyIEV4aXRpbmcgd2l0aCBjb2RlICVkXG4iLCB2YXIpOwotICAgIGV4aXQodmFyKTsKLX0KLQogLyoqIGRlcHJlY2F0ZWQsIHVzZSBuZXRzbm1wX21rdGVtcCBpbnN0ZWFkICovCiBjb25zdCBjaGFyICoKIG1ha2VfdGVtcGZpbGUodm9pZCkKQEAgLTEzOCw2ICsxMjksNyBAQAogICAgIHJldHVybiBuZXRzbm1wX21rdGVtcCgpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0hFTExfQ09NTUFORAogaW50CiBzaGVsbF9jb21tYW5kKHN0cnVjdCBleHRlbnNpYmxlICpleCkKIHsKQEAgLTE3MSw2ICsxNjMsNyBAQAogI2VuZGlmCiAgICAgcmV0dXJuIChleC0+cmVzdWx0KTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NIRUxMX0NPTU1BTkQgKi8KIAogI2RlZmluZSBNQVhPVVRQVVQgMzAwCiAKQEAgLTE5Nyw2ICsxOTAsNyBAQAogICAgIHJldHVybiAoZXgtPnJlc3VsdCk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfRVhURU5fSU5TVEFOQ0UKIHN0cnVjdCBleHRlbnNpYmxlICoKIGdldF9leHRlbl9pbnN0YW5jZShzdHJ1Y3QgZXh0ZW5zaWJsZSAqZXh0ZW4sIHNpemVfdCBpbnN0KQogewpAQCAtMjA4LDYgKzIwMiw3IEBACiAgICAgICAgIGV4dGVuID0gZXh0ZW4tPm5leHQ7CiAgICAgcmV0dXJuIChleHRlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfRVhURU5fSU5TVEFOQ0UgKi8KIAogdm9pZAogd2FpdF9vbl9leGVjKHN0cnVjdCBleHRlbnNpYmxlICpleCkKQEAgLTIxNiw3ICsyMTEsNyBAQAogICBpbnQgcmM7CiAgIGlmIChleC0+dGlkICE9IDAgJiYgZXgtPnBpZCAhPSAwKSB7CiAgICAgSEFORExFIGhUaHJlYWQgPSBleC0+dGlkOwotICAgIEhBTkRMRSBoUHJvY2VzcyA9IChIQU5ETEUpIGV4LT5waWQ7CisgICAgSEFORExFIGhQcm9jZXNzID0gZXgtPnBpZDsKICAgICByYyA9IFdhaXRGb3JTaW5nbGVPYmplY3QoaFByb2Nlc3MsIE5FVFNOTVBfVElNRU9VVF9XQUlURk9SU0lOR0xFT0JKRUNUKTsKICAgICBERUJVR01TR1QoKCJleGVjOndhaXRfb25fZXhlYyIsIldhaXRGb3JTaW5nbGVPYmplY3QgcmM9KCVkKVxuIixyYyApKTsKICAgICByYyA9IENsb3NlSGFuZGxlKCBoVGhyZWFkICk7CkBAIC0yNDEsNiArMjM2LDEwIEBACiBpbnQKIGdldF9leGVjX291dHB1dChzdHJ1Y3QgZXh0ZW5zaWJsZSAqZXgpCiB7CisjaWZuZGVmIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRQorICAgIGV4LT5yZXN1bHQgPSAtMTsKKyAgICBORVRTTk1QX0xPR09OQ0UoKExPR19XQVJOSU5HLCAic3VwcG9ydCBmb3IgcnVuX2V4ZWNfY29tbWFuZCBub3QgYXZhaWxhYmxlXG4iKSk7CisjZWxzZQogI2lmIEhBVkVfRVhFQ1YKICAgICBjaGFyICAgICAgICAgICAgY2FjaGVmaWxlW1NUUk1BWF07CiAgICAgY2hhciAgICAgICAgICAgIGNhY2hlW05FVFNOTVBfTUFYQ0FDSEVTSVpFXTsKQEAgLTI3MCw3ICsyNjksNyBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFhYWCAgVXNlIFNOTVBfRklMRU1PREVfQ0xPU0VEIGluc3RlYWQgb2YgNjQ0PyAKICAgICAgICAgICAgICAqLwotICAgICAgICBpZiAoKGNmZCA9IG9wZW4oY2FjaGVmaWxlLCBPX1dST05MWSB8IE9fVFJVTkMgfCBPX0NSRUFULCAwNjQ0KSkgPCAwKSB7CisgICAgICAgIGlmICgoY2ZkID0gb3BlbihjYWNoZWZpbGUsIE9fV1JPTkxZIHwgT19UUlVOQyB8IE9fQ1JFQVQsIDA2MDApKSA8IDApIHsKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjYW4gbm90IGNyZWF0ZSBjYWNoZSBmaWxlXG4iKTsKICAgICAgICAgICAgICAgICBzZXRQZXJyb3JzdGF0dXMoY2FjaGVmaWxlKTsKICNpZmRlZiBORVRTTk1QX0VYQ0FDSEVUSU1FCkBAIC0zNjksNyArMzY4LDcgQEAKICAgICB9CiAgICAgCiAgICAgLyogU2V0IGdsb2JhbCBjaGlsZCBwcm9jZXNzIGhhbmRsZSAqLwotICAgIGV4LT5waWQgPSAoaW50KXBpLmhQcm9jZXNzOworICAgIGV4LT5waWQgPSBwaS5oUHJvY2VzczsKICAgICBleC0+dGlkID0gcGkuaFRocmVhZDsKIAogICAgIC8qIENsb3NlIHBpcGUgaGFuZGxlcyB0byBtYWtlIHN1cmUgdGhhdCBubyBoYW5kbGVzIHRvIHRoZSB3cml0ZSBlbmQgb2YgdGhlCkBAIC0zOTAsMTEgKzM4OSwxMiBAQAogICAgIH0KICAgICByZXR1cm4gZmQ7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyICovCi0gICAgcmV0dXJuIC0xOwogI2VuZGlmCisjZW5kaWYgLyogIWRlZmluZWQoVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFKSAqLworICAgIHJldHVybiAtMTsKIH0KIGludAotZ2V0X2V4ZWNfcGlwZXMoY2hhciAqY21kLCBpbnQgKmZkSW4sIGludCAqZmRPdXQsIGludCAqcGlkKQorZ2V0X2V4ZWNfcGlwZXMoY2hhciAqY21kLCBpbnQgKmZkSW4sIGludCAqZmRPdXQsIG5ldHNubXBfcGlkX3QgKnBpZCkKIHsKIC8qIAlBbGV4YW5kZXIgUHLDtm1lbCwgYWxleGFuZGVyQHByb2VtZWwuZGUgMDgvMjQvMjAwNgogCVRoZSBmb2xsb3dpbmcgY29kZSwgaXMgdGVzdGVkIG9uIHBpY290dXggcmV2LiAxLjAxLgpAQCAtNjI3LDcgKzYyNyw3IEBACiAgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3MiLCJjaGlsZCBkd1Byb2Nlc3NJZCAodGFzayBtYW5hZ2VyKTogJWRcbiIsKGludClwaS5kd1Byb2Nlc3NJZCkpOwogCiAgICAgLyogU2V0IGdsb2JhbCBjaGlsZCBwcm9jZXNzIGhhbmRsZSAqLwotICAgICpwaWQgPSAoaW50KXBpLmhQcm9jZXNzOworICAgICpwaWQgPSBwaS5oUHJvY2VzczsKIAogICAgIC8qIENsZWFudXAgKi8KICAgICBpZiAoIUNsb3NlSGFuZGxlKHBpLmhUaHJlYWQpKQpAQCAtNjU2LDYgKzY1Niw3IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DTEVBUl9DQUNIRQogaW50CiBjbGVhcl9jYWNoZShpbnQgYWN0aW9uLAogICAgICAgICAgICAgdV9jaGFyICogdmFyX3ZhbCwKQEAgLTY3OCw3MCArNjc5LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9Ci0KLWNoYXIgICAgICAgICAgKiphcmd2cmVzdGFydHAsICphcmd2cmVzdGFydG5hbWUsICphcmd2cmVzdGFydDsKLQotUkVUU0lHVFlQRQotcmVzdGFydF9kb2l0KGludCBhKQotewotICAgIGNoYXIgKiBuYW1lID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7Ci0gICAgc25tcF9zaHV0ZG93bihuYW1lKTsKLQotICAgIC8qICBUaGlzIHNpZ25hbCBoYW5kbGVyIG1heSBydW4gd2l0aCBTSUdBTEFSTSBibG9ja2VkLgotICAgICAqICBTaW5jZSB0aGUgc2lnbmFsIG1hc2sgaXMgcHJlc2VydmVkIGFjY3Jvc3MgZXhlY3YoKSwgd2UgbXVzdCAKLSAgICAgKiAgbWFrZSBzdXJlIHRoYXQgU0lHQUxBUk0gaXMgdW5ibG9ja2VkIHByaW9yIG9mIGV4ZWN2J2luZy4KLSAgICAgKiAgT3RoZXJ3aXNlIFNJR0FMQVJNIHdpbGwgYmUgaWdub3JlZCBpbiB0aGUgbmV4dCBpbmNhcm5hdGlvbgotICAgICAqICBvZiBzbm1wZCwgYmVjYXVzZSB0aGUgc2lnbmFsIGlzIGJsb2NrZWQuIEFuZCB0aHVzLCB0aGUgCi0gICAgICogIHJlc3RhcnQgZG9lc24ndCB3b3JrIGFueW1vcmUuIAotICAgICAqCi0gICAgICogIEEgcXVvdGUgZnJvbSB0aGUgc2lncHJvY21hc2soKSBtYW4gcGFnZToKLSAgICAgKiAgVGhlIHVzZSBvZiBzaWdwcm9jbWFzaygpIGlzIHVuc3BlY2lmaWVkIGluIGEgbXVsdGl0aHJlYWRlZCBwcm9jZXNzOyBzZWUKLSAgICAgKiAgcHRocmVhZF9zaWdtYXNrKDMpLiAKLSAgICAgKi8gCi0jaWYgSEFWRV9TSUdQUk9DTUFTSwotICAgIHsKLSAgICAgICAgc2lnc2V0X3QgZW1wdHlfc2V0OwotICAgICAgCi0gICAgICAgIHNpZ2VtcHR5c2V0KCZlbXB0eV9zZXQpOwotICAgICAgICBzaWdwcm9jbWFzayhTSUdfU0VUTUFTSywgJmVtcHR5X3NldCwgTlVMTCk7Ci0gICAgfQotI2VsaWYgSEFWRV9TSUdCTE9DSwotICAgIHNpZ3NldG1hc2soMCk7Ci0jZW5kaWYKLQotICAgIC8qCi0gICAgICogZG8gdGhlIGV4ZWMgCi0gICAgICovCi0jaWYgSEFWRV9FWEVDVgotICAgIGV4ZWN2KGFyZ3ZyZXN0YXJ0bmFtZSwgYXJndnJlc3RhcnRwKTsKLSAgICBzZXRQZXJyb3JzdGF0dXMoYXJndnJlc3RhcnRuYW1lKTsKLSNlbmRpZgotfQotCi1pbnQKLXJlc3RhcnRfaG9vayhpbnQgYWN0aW9uLAotICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCi0gICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKLSAgICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4sCi0gICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKLXsKLQotICAgIGxvbmcgICAgICAgICAgICB0bXAgPSAwOwotCi0gICAgaWYgKHZhcl92YWxfdHlwZSAhPSBBU05fSU5URUdFUikgewotICAgICAgICBzbm1wX2xvZyhMT0dfTk9USUNFLCAiV3JvbmcgdHlwZSAhPSBpbnRcbiIpOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOwotICAgIH0KLSAgICB0bXAgPSAqKChsb25nICopIHZhcl92YWwpOwotICAgIGlmICh0bXAgPT0gMSAmJiBhY3Rpb24gPT0gQ09NTUlUKSB7Ci0jaWZkZWYgU0lHQUxSTQotICAgICAgICBzaWduYWwoU0lHQUxSTSwgcmVzdGFydF9kb2l0KTsKLSNlbmRpZgotICAgICAgICBhbGFybShORVRTTk1QX1JFU1RBUlRTTEVFUCk7Ci0gICAgfQotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0xFQVJfQ0FDSEUgKi8KIAogdm9pZAogcHJpbnRfbWliX29pZChvaWQgbmFtZVtdLCBzaXplX3QgbGVuKQpAQCAtNzYzLDE2OSArNzAxLDcgQEAKICAgICBpbnQgICAgICAgICAgICAgaTsKIAogICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSBsZW47IGkrKykKLSAgICAgICAgYnVmICs9IHNwcmludGYoYnVmLCAiLiV1IiwgKHVuc2lnbmVkKSBuYW1lW2ldKTsKLX0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIGhlYWRlcl9zaW1wbGVfdGFibGUKLSAqCi0gKiBQYXJhbWV0ZXJzOgotICoJICAqdnAJCSBWYXJpYWJsZSBkYXRhLgotICoJICAqbmFtZQkJIEZ1bGx5IGluc3RhbnRpYXRlZCBPSUQgbmFtZS4KLSAqCSAgKmxlbmd0aAkgTGVuZ3RoIG9mIG5hbWUuCi0gKgkgICBleGFjdAkgVFJVRSBpZiBhbiBleGFjdCBtYXRjaCBpcyBkZXNpcmVkLgotICoJICAqdmFyX2xlbgkgSG9vayBmb3Igc2l6ZSBvZiByZXR1cm5lZCBkYXRhIHR5cGUuCi0gKgkoKip3cml0ZV9tZXRob2QpIEhvb2sgZm9yIHdyaXRlIG1ldGhvZCAoVU5VU0VEKS4KLSAqCSAgIG1heAotICogICAgICAKLSAqIFJldHVybnM6Ci0gKgkwCUlmIG5hbWUgbWF0Y2hlcyB2cC0+bmFtZSAoYWNjb3VudGluZyBmb3IgJ2V4YWN0JykgYW5kIGlzCi0gKgkJCW5vdCBncmVhdGVyIGluIGxlbmd0aCB0aGFuICdtYXgnLgotICoJMQlPdGhlcndpc2UuCi0gKgotICoKLSAqIENvbXBhcmUgJ25hbWUnIHRvIHZwLT5uYW1lIGZvciB0aGUgYmVzdCBtYXRjaCBvciBhbiBleGFjdCBtYXRjaCAoaWYKLSAqCXJlcXVlc3RlZCkuICBBbHNvIGNoZWNrIHRoYXQgJ25hbWUnIGlzIG5vdCBsb25nZXIgdGhhbiAnbWF4JyBpZgotICoJbWF4IGlzIGdyZWF0ZXItdGhhbi9lcXVhbCAwLgotICogU3RvcmUgYSBzdWNjZXNzZnVsIG1hdGNoIGluICduYW1lJywgYW5kIGluY3JlbWVudCB0aGUgT0lEIGluc3RhbmNlIGlmCi0gKgl0aGUgbWF0Y2ggd2FzIG5vdCBleGFjdC4gIAotICoKLSAqICduYW1lJyBhbmQgJ2xlbmd0aCcgYXJlIHVuZGVmaW5lZCB1cG9uIGZhaWx1cmUuCi0gKgotICovCi1pbnQKLWhlYWRlcl9zaW1wbGVfdGFibGUoc3RydWN0IHZhcmlhYmxlICp2cCwgb2lkICogbmFtZSwgc2l6ZV90ICogbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICBpbnQgZXhhY3QsIHNpemVfdCAqIHZhcl9sZW4sCi0gICAgICAgICAgICAgICAgICAgIFdyaXRlTWV0aG9kICoqIHdyaXRlX21ldGhvZCwgaW50IG1heCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgaSwgcnRlc3Q7ICAgLyogU2V0IHRvOiAgICAgIC0xICAgICAgSWYgbmFtZSA8IHZwLT5uYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgMSAgICAgICBJZiBuYW1lID4gdnAtPm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAwICAgICAgIE90aGVyd2lzZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi0gICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOwotCi0gICAgZm9yIChpID0gMCwgcnRlc3QgPSAwOwotICAgICAgICAgaSA8IChpbnQpIHZwLT5uYW1lbGVuICYmIGkgPCAoaW50KSAoKmxlbmd0aCkgJiYgIXJ0ZXN0OyBpKyspIHsKLSAgICAgICAgaWYgKG5hbWVbaV0gIT0gdnAtPm5hbWVbaV0pIHsKLSAgICAgICAgICAgIGlmIChuYW1lW2ldIDwgdnAtPm5hbWVbaV0pCi0gICAgICAgICAgICAgICAgcnRlc3QgPSAtMTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBydGVzdCA9IDE7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHJ0ZXN0ID4gMCB8fAotICAgICAgICAoZXhhY3QgPT0gMQotICAgICAgICAgJiYgKHJ0ZXN0IHx8IChpbnQpICpsZW5ndGggIT0gKGludCkgKHZwLT5uYW1lbGVuICsgMSkpKSkgewotICAgICAgICBpZiAodmFyX2xlbikKLSAgICAgICAgICAgICp2YXJfbGVuID0gMDsKLSAgICAgICAgcmV0dXJuIE1BVENIX0ZBSUxFRDsKLSAgICB9Ci0KLSAgICBtZW1zZXQobmV3bmFtZSwgMCwgc2l6ZW9mKG5ld25hbWUpKTsKLQotICAgIGlmICgoKGludCkgKmxlbmd0aCkgPD0gKGludCkgdnAtPm5hbWVsZW4gfHwgcnRlc3QgPT0gLTEpIHsKLSAgICAgICAgbWVtbW92ZShuZXduYW1lLCB2cC0+bmFtZSwgKGludCkgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgICAgIG5ld25hbWVbdnAtPm5hbWVsZW5dID0gMTsKLSAgICAgICAgKmxlbmd0aCA9IHZwLT5uYW1lbGVuICsgMTsKLSAgICB9IGVsc2UgaWYgKCgoaW50KSAqbGVuZ3RoKSA+IChpbnQpIHZwLT5uYW1lbGVuICsgMSkgeyAgICAgICAvKiBleGFjdCBjYXNlIGNoZWNrZWQgZWFybGllciAqLwotICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICAgICBtZW1tb3ZlKG5ld25hbWUsIG5hbWUsICgqbGVuZ3RoKSAqIHNpemVvZihvaWQpKTsKLSAgICAgICAgaWYgKG5hbWVbKmxlbmd0aCAtIDFdIDwgVUxPTkdfTUFYKSB7Ci0gICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdICsgMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDYXJlZnVsIG5vdCB0byBvdmVyZmxvdy4uLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotICAgICAgICBtZW1tb3ZlKG5ld25hbWUsIG5hbWUsICgqbGVuZ3RoKSAqIHNpemVvZihvaWQpKTsKLSAgICAgICAgaWYgKCFleGFjdCkgewotICAgICAgICAgICAgaWYgKG5hbWVbKmxlbmd0aCAtIDFdIDwgVUxPTkdfTUFYKSB7Ci0gICAgICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXSArIDE7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogQ2FyZWZ1bCBub3QgdG8gb3ZlcmZsb3cuLi4gIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICgobWF4ID49IDAgJiYgKChpbnQpbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPiBtYXgpKSB8fAotICAgICAgICAgICAgICAgKCAwID09IG5ld25hbWVbKmxlbmd0aCAtIDFdICkpIHsKLSAgICAgICAgaWYgKHZhcl9sZW4pCi0gICAgICAgICAgICAqdmFyX2xlbiA9IDA7Ci0gICAgICAgIHJldHVybiBNQVRDSF9GQUlMRUQ7Ci0gICAgfQotCi0gICAgbWVtbW92ZShuYW1lLCBuZXduYW1lLCAoKmxlbmd0aCkgKiBzaXplb2Yob2lkKSk7Ci0gICAgaWYgKHdyaXRlX21ldGhvZCkKLSAgICAgICAgKndyaXRlX21ldGhvZCA9IDA7Ci0gICAgaWYgKHZhcl9sZW4pCi0gICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAgICAgLyogZGVmYXVsdCAqLwotICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKLX0KLQotLyoKLSAqIGhlYWRlcl9nZW5lcmljKC4uLgotICogQXJndW1lbnRzOgotICogdnAgICAgIElOICAgICAgLSBwb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUKLSAqIG5hbWUgICAgSU4vT1VUICAtIElOL25hbWUgcmVxdWVzdGVkLCBPVVQvbmFtZSBmb3VuZAotICogbGVuZ3RoICBJTi9PVVQgIC0gbGVuZ3RoIG9mIElOL09VVCBvaWQncyAKLSAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAotICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKLSAqIHdyaXRlX21ldGhvZAotICogCi0gKi8KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIGdlbmVyaWNfaGVhZGVyCi0gKgotICogUGFyYW1ldGVyczoKLSAqCSAgKnZwCSAgIChJKSAgICAgUG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlLgotICoJICAqbmFtZQkgICAoSS9PKSAgIElucHV0IG5hbWUgcmVxdWVzdGVkLCBvdXRwdXQgbmFtZSBmb3VuZC4KLSAqCSAgKmxlbmd0aCAgKEkvTykgICBMZW5ndGggb2YgaW5wdXQgYW5kIG91dHB1dCBvaWQncy4KLSAqCSAgIGV4YWN0ICAgKEkpICAgICBUUlVFIGlmIGFuIGV4YWN0IG1hdGNoIHdhcyByZXF1ZXN0ZWQuCi0gKgkgICp2YXJfbGVuIChPKSAgICAgTGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQuCi0gKgkoKip3cml0ZV9tZXRob2QpICAgSG9vayB0byBuYW1lIGEgd3JpdGUgbWV0aG9kIChVTlVTRUQpLgotICogICAgICAKLSAqIFJldHVybnM6Ci0gKglNQVRDSF9TVUNDRUVERUQJSWYgdnAtPm5hbWUgbWF0Y2hlcyBuYW1lIChhY2NvdW50aW5nIGZvciBleGFjdCBiaXQpLgotICoJTUFUQ0hfRkFJTEVECU90aGVyd2lzZSwKLSAqCi0gKgotICogQ2hlY2sgd2hldGhlciB2YXJpYWJsZSAodnApIG1hdGNoZXMgbmFtZS4KLSAqLwotaW50Ci1oZWFkZXJfZ2VuZXJpYyhzdHJ1Y3QgdmFyaWFibGUgKnZwLAotICAgICAgICAgICAgICAgb2lkICogbmFtZSwKLSAgICAgICAgICAgICAgIHNpemVfdCAqIGxlbmd0aCwKLSAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kKQotewotICAgIG9pZCAgICAgICAgICAgICBuZXduYW1lW01BWF9PSURfTEVOXTsKLSAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OwotCi0gICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3MiLCAiaGVhZGVyX2dlbmVyaWM6ICIpKTsKLSAgICBERUJVR01TR09JRCgoInV0aWxfZnVuY3MiLCBuYW1lLCAqbGVuZ3RoKSk7Ci0gICAgREVCVUdNU0coKCJ1dGlsX2Z1bmNzIiwgIiBleGFjdD0lZFxuIiwgZXhhY3QpKTsKLQotICAgIG1lbWNweSgoY2hhciAqKSBuZXduYW1lLCAoY2hhciAqKSB2cC0+bmFtZSwKLSAgICAgICAgICAgKGludCkgdnAtPm5hbWVsZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgbmV3bmFtZVt2cC0+bmFtZWxlbl0gPSAwOwotICAgIHJlc3VsdCA9IHNubXBfb2lkX2NvbXBhcmUobmFtZSwgKmxlbmd0aCwgbmV3bmFtZSwgdnAtPm5hbWVsZW4gKyAxKTsKLSAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jcyIsICIgIHJlc3VsdDogJWRcbiIsIHJlc3VsdCkpOwotICAgIGlmICgoZXhhY3QgJiYgKHJlc3VsdCAhPSAwKSkgfHwgKCFleGFjdCAmJiAocmVzdWx0ID49IDApKSkKLSAgICAgICAgcmV0dXJuIChNQVRDSF9GQUlMRUQpOwotICAgIG1lbWNweSgoY2hhciAqKSBuYW1lLCAoY2hhciAqKSBuZXduYW1lLAotICAgICAgICAgICAoKGludCkgdnAtPm5hbWVsZW4gKyAxKSAqIHNpemVvZihvaWQpKTsKLSAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOwotCi0gICAgKndyaXRlX21ldGhvZCA9IDA7Ci0gICAgKnZhcl9sZW4gPSBzaXplb2YobG9uZyk7ICAgIC8qIGRlZmF1bHQgdG8gJ2xvbmcnIHJlc3VsdHMgKi8KLSAgICByZXR1cm4gKE1BVENIX1NVQ0NFRURFRCk7CisgICAgICAgIGJ1ZiArPSBzcHJpbnRmKGJ1ZiwgIi4lIiBORVRTTk1QX1BSSW8gInUiLCBuYW1lW2ldKTsKIH0KIAogLyoKQEAgLTk0NCw2ICs3MjAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVfbWV0aG9kLCBtYXgpKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfRklFTEQKIGNoYXIgICAgICAgICAgICoKIGZpbmRfZmllbGQoY2hhciAqcHRyLCBpbnQgZmllbGQpCiB7CkBAIC05NTksMTUgKzczNiwxNSBAQAogICAgICAgICAvKgogICAgICAgICAgKiByZXdpbmQgYSBmaWVsZCBsZW5ndGggCiAgICAgICAgICAqLwotICAgICAgICB3aGlsZSAoKnB0ciAhPSAwICYmIGlzc3BhY2UoKnB0cikgJiYgaW5pdCA8PSBwdHIpCisgICAgICAgIHdoaWxlICgqcHRyICE9IDAgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKnB0cikpICYmIGluaXQgPD0gcHRyKQogICAgICAgICAgICAgcHRyLS07Ci0gICAgICAgIHdoaWxlICgqcHRyICE9IDAgJiYgIWlzc3BhY2UoKnB0cikgJiYgaW5pdCA8PSBwdHIpCisgICAgICAgIHdoaWxlICgqcHRyICE9IDAgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpwdHIpKSAmJiBpbml0IDw9IHB0cikKICAgICAgICAgICAgIHB0ci0tOwotICAgICAgICBpZiAoaXNzcGFjZSgqcHRyKSkKKyAgICAgICAgaWYgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpwdHIpKSkKICAgICAgICAgICAgIHB0cisrOyAgICAgICAgICAgICAgLyogcGFzdCBzcGFjZSAqLwogICAgICAgICBpZiAocHRyIDwgaW5pdCkKICAgICAgICAgICAgIHB0ciA9IGluaXQ7Ci0gICAgICAgIGlmICghaXNzcGFjZSgqcHRyKSAmJiAqcHRyICE9IDApCisgICAgICAgIGlmICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKnB0cikpICYmICpwdHIgIT0gMCkKICAgICAgICAgICAgIHJldHVybiAocHRyKTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoKHB0ciA9IHNraXBfd2hpdGUocHRyKSkgPT0gTlVMTCkKQEAgLTk4NCw3ICs3NjEsOSBAQAogICAgIH0KICAgICByZXR1cm4gKE5VTEwpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklORF9GSUVMRCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfTUlCT0lECiBpbnQKIHBhcnNlX21pYm9pZChjb25zdCBjaGFyICpidWYsIG9pZCAqIG9pZG91dCkKIHsKQEAgLTk5NCwxMiArNzczLDEyIEBACiAgICAgICAgIHJldHVybiAwOwogICAgIGlmICgqYnVmID09ICcuJykKICAgICAgICAgYnVmKys7Ci0gICAgZm9yIChpID0gMDsgaXNkaWdpdCgqYnVmKTsgaSsrKSB7CisgICAgZm9yIChpID0gMDsgaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmJ1ZikpOyBpKyspIHsKICAgICAgICAgLyogU3ViaWRlbnRpZmllcnMgYXJlIHVuc2lnbmVkIHZhbHVlcywgdXAgdG8gMl4zMi0xCiAgICAgICAgICAqIHNvIHdlIG5lZWQgdG8gdXNlICdzdHJ0b3VsJyByYXRoZXIgdGhhbiAnYXRvaScKICAgICAgICAgICovCiAgICAgICAgIG9pZG91dFtpXSA9IHN0cnRvdWwoYnVmLCBOVUxMLCAxMCkgJiAweGZmZmZmZmZmOwotICAgICAgICB3aGlsZSAoaXNkaWdpdCgqYnVmKyspKTsKKyAgICAgICAgd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpidWYpKSkgYnVmKys7CiAgICAgICAgIGlmICgqYnVmID09ICcuJykKICAgICAgICAgICAgIGJ1ZisrOwogICAgIH0KQEAgLTEwMDgsNyArNzg3LDkgQEAKICAgICAgKi8KICAgICByZXR1cm4gaTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX01JQk9JRCAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RSSU5HX0FQUEVORF9JTlQKIHZvaWQKIHN0cmluZ19hcHBlbmRfaW50KGNoYXIgKnMsIGludCB2YWwpCiB7CkBAIC0xMDIzLDEzICs4MDQsMTYgQEAKICAgICBzdHJjcHkocywgdGV4dFZhbCk7CiAgICAgcmV0dXJuOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RSSU5HX0FQUEVORF9JTlQgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lOVEVSTkFMX01JQl9UQUJMRQogCiBzdHJ1Y3QgaW50ZXJuYWxfbWliX3RhYmxlIHsKICAgICBpbnQgICAgICAgICAgICAgbWF4X3NpemU7ICAgLyogU2l6ZSBvZiB0aGUgY3VycmVudCBkYXRhIHRhYmxlICovCiAgICAgaW50ICAgICAgICAgICAgIG5leHRfaW5kZXg7IC8qIEluZGV4IG9mIHRoZSBuZXh0IGZyZWUgZW50cnkgKi8KICAgICBpbnQgICAgICAgICAgICAgY3VycmVudF9pbmRleDsgICAgICAvKiBJbmRleCBvZiB0aGUgJ2N1cnJlbnQnIGVudHJ5ICovCiAgICAgaW50ICAgICAgICAgICAgIGNhY2hlX3RpbWVvdXQ7Ci0gICAgbWFya2VyX3QgICAgICAgIGNhY2hlX21hcmtlcjsKKyAgICBtYXJrZXJfdCAgICAgICAgY2FjaGVfbWFya2VyTTsKICAgICBSRUxPQUQgICAgICAgICAqcmVsb2FkOyAgICAgLyogUm91dGluZSB0byByZWFkIGluIHRoZSBkYXRhICovCiAgICAgQ09NUEFSRSAgICAgICAgKmNvbXBhcmU7ICAgIC8qIFJvdXRpbmUgdG8gY29tcGFyZSB0d28gZW50cmllcyAqLwogICAgIGludCAgICAgICAgICAgICBkYXRhX3NpemU7ICAvKiBTaXplIG9mIGFuIGluZGl2aWR1YWwgZW50cnkgKi8KQEAgLTEwNTAsNyArODM0LDcgQEAKICAgICB0LT5uZXh0X2luZGV4ID0gMTsgICAgICAgICAgLyogRG9uJ3QgdXNlIGluZGV4IDAgKi8KICAgICB0LT5jdXJyZW50X2luZGV4ID0gMTsKICAgICB0LT5jYWNoZV90aW1lb3V0ID0gdGltZW91dDsKLSAgICB0LT5jYWNoZV9tYXJrZXIgPSBOVUxMOworICAgIHQtPmNhY2hlX21hcmtlck0gPSBOVUxMOwogICAgIHQtPnJlbG9hZCA9IHJlbG9hZDsKICAgICB0LT5jb21wYXJlID0gY29tcGFyZTsKICAgICB0LT5kYXRhX3NpemUgPSBzaXplOwpAQCAtMTA3Miw4ICs4NTYsOSBAQAogICAgICAqIElmIHRoZSBzYXZlZCBkYXRhIGlzIGZhaXJseSByZWNlbnQsCiAgICAgICogICAgd2UgZG9uJ3QgbmVlZCB0byByZWxvYWQgaXQKICAgICAgKi8KLSAgICBpZiAodGFibGUtPmNhY2hlX21hcmtlciAmJgotICAgICAgICAhKGF0aW1lX3JlYWR5KHRhYmxlLT5jYWNoZV9tYXJrZXIsIHRhYmxlLT5jYWNoZV90aW1lb3V0ICogMTAwMCkpKQorICAgIGlmICh0YWJsZS0+Y2FjaGVfbWFya2VyTSAmJgorICAgICAgICAhKG5ldHNubXBfcmVhZHlfbW9ub3RvbmljKHRhYmxlLT5jYWNoZV9tYXJrZXJNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlLT5jYWNoZV90aW1lb3V0ICogMTAwMCkpKQogICAgICAgICByZXR1cm4gMTsKIAogCkBAIC0xMDgzLDE1ICs4NjgsMTIgQEAKICAgICAgKiBOLkI6ICBVcGRhdGUgdGhlIGNhY2hlIG1hcmtlciAqYmVmb3JlKiBjYWxsaW5nCiAgICAgICogICB0aGlzIHJvdXRpbmUsIHRvIGF2b2lkIHByb2JsZW1zIHdpdGggcmVjdXJzaW9uCiAgICAgICovCi0gICAgaWYgKCF0YWJsZS0+Y2FjaGVfbWFya2VyKQotICAgICAgICB0YWJsZS0+Y2FjaGVfbWFya2VyID0gYXRpbWVfbmV3TWFya2VyKCk7Ci0gICAgZWxzZQotICAgICAgICBhdGltZV9zZXRNYXJrZXIodGFibGUtPmNhY2hlX21hcmtlcik7CisgICAgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigmdGFibGUtPmNhY2hlX21hcmtlck0pOwogCiAgICAgdGFibGUtPm5leHRfaW5kZXggPSAxOwogICAgIGlmICh0YWJsZS0+cmVsb2FkKChtaWJfdGFibGVfdCkgdGFibGUpIDwgMCkgewotICAgICAgICBmcmVlKHRhYmxlLT5jYWNoZV9tYXJrZXIpOwotICAgICAgICB0YWJsZS0+Y2FjaGVfbWFya2VyID0gTlVMTDsKKyAgICAgICAgZnJlZSh0YWJsZS0+Y2FjaGVfbWFya2VyTSk7CisgICAgICAgIHRhYmxlLT5jYWNoZV9tYXJrZXJNID0gTlVMTDsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogICAgIHRhYmxlLT5jdXJyZW50X2luZGV4ID0gMTsKQEAgLTEyMDEsODkgKzk4MywxNDcgQEAKICAgICAqbWF4X2lkeCA9IHRhYmxlLT5uZXh0X2luZGV4IC0gMTsKICAgICByZXR1cm4gdGFibGUtPmRhdGE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JTlRFUk5BTF9NSUJfVEFCTEUgKi8KIAotI2lmZGVmIGxpbnV4Ci0jIGRlZmluZSBQUk9DX1BBVEggICAgICAgICAgIi9wcm9jIgotIyBkZWZpbmUgRklMRV9ESVNQICAgICAgICAgICJmZC8iCi0jIGRlZmluZSBTT0NLRVRfVFlQRV8xICAgICAgInNvY2tldDpbIgotIyBkZWZpbmUgU09DS0VUX1RZUEVfMiAgICAgICJbMDAwMF06IgorI2lmIGRlZmluZWQoSEFWRV9MSU5VWF9SVE5FVExJTktfSCkKIAotdW5zaWduZWQgbG9uZyBsb25nCi1leHRyYWN0X2lub2RlKGNoYXIgKmZvcm1hdCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DUkVBVEVfUFJFRklYX0lORk8KK3ByZWZpeF9jYnggKm5ldF9zbm1wX2NyZWF0ZV9wcmVmaXhfaW5mbyh1bnNpZ25lZCBsb25nIE9uTGlua0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBBdXRvbm9tb3VzRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICppbjZwdHIpCiB7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHJldCA9IDA7CisgICBwcmVmaXhfY2J4ICpub2RlID0gU05NUF9NQUxMT0NfVFlQRURFRihwcmVmaXhfY2J4KTsKKyAgIGlmKCFpbjZwdHIpIHsKKyAgICAgIGZyZWUobm9kZSk7CisgICAgICByZXR1cm4gTlVMTDsKKyAgIH0KKyAgIGlmKCFub2RlKSB7CisgICAgICBmcmVlKG5vZGUpOworICAgICAgcmV0dXJuIE5VTEw7CisgICB9CisgICBub2RlLT5uZXh0X2luZm8gPSBOVUxMOworICAgbm9kZS0+aXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZyA9IE9uTGlua0ZsYWc7CisgICBub2RlLT5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZyA9IEF1dG9ub21vdXNGbGFnOworICAgbWVtY3B5KG5vZGUtPmluNnAsIGluNnB0ciwgc2l6ZW9mKG5vZGUtPmluNnApKTsKIAotICAgIGlmICghc3RybmNtcChmb3JtYXQsIFNPQ0tFVF9UWVBFXzEsIDgpKSB7Ci0gICAgICAgIHJldCA9IHN0cnRvdWxsKGZvcm1hdCArIDgsIE5VTEwsIDApOwotICAgIH0gZWxzZSBpZiAoIXN0cm5jbXAoZm9ybWF0LCBTT0NLRVRfVFlQRV8yLCA3KSkgewotICAgICAgICByZXQgPSBzdHJ0b3VsbChmb3JtYXQgKyA3LCBOVUxMLCAwKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gcmV0OworICAgcmV0dXJuIG5vZGU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DUkVBVEVfUFJFRklYX0lORk8gKi8KIAotdW5zaWduZWQgaW50Ci1nZXRfcGlkX2Zyb21faW5vZGUodW5zaWduZWQgbG9uZyBsb25nIGlub2RlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfUFJFRklYX0lORk8KK2ludCBuZXRfc25tcF9maW5kX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqYWRkcmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jYnggKm5vZGVfdG9fZmluZCkKIHsKLSAgICBESVIgICAgICAgICAgICAqcHJvY2RpcnMgPSBOVUxMLCAqcGlkZGlycyA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgKm5hbWUgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICBwYXRoX25hbWVbUEFUSF9NQVggKyAxXTsKLSAgICBjaGFyICAgICAgICAgICAgc29ja2V0X2xua1tOQU1FX01BWCArIDFdOwotICAgIGludCAgICAgICAgICAgICBmaWxlbGVuID0gMCwgcmVhZGxlbiA9IDAsIGlmbGFnID0gMDsKLSAgICBzdHJ1Y3QgZGlyZW50ICAqcHJvY2luZm8sICpwaWRpbmZvOwotICAgIHVuc2lnbmVkIGludCAgICBwaWQ7Ci0gICAgdW5zaWduZWQgbG9uZyBsb25nIHRlbXBfaW5vZGU7CisgICAgaW50IGlyZXQ7CisgICAgbWVtc2V0KG5vZGVfdG9fZmluZCwgMCwgc2l6ZW9mKHByZWZpeF9jYngpKTsKKyAgICBpZighKmhlYWQpCisgICAgICAgcmV0dXJuIC0xOworICAgIG1lbWNweShub2RlX3RvX2ZpbmQtPmluNnAsIGFkZHJlc3MsIHNpemVvZihub2RlX3RvX2ZpbmQtPmluNnApKTsKIAotICAgIGlmICghKHByb2NkaXJzID0gb3BlbmRpcihQUk9DX1BBVEgpKSkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jXG4iKTsgICAgICAgCi0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBpcmV0ID0gbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyhoZWFkLCBub2RlX3RvX2ZpbmQsIDEpOworICAgIGlmKGlyZXQgPCAwKSB7CisgICAgICAgREVCVUdNU0dUTCgoInV0aWxfZnVuY3M6cHJlZml4IiwgIlVuYWJsZSB0byBzZWFyY2ggdGhlIGxpc3RcbiIpKTsKKyAgICAgICByZXR1cm4gLTE7CisgICAgfSBlbHNlIGlmICghaXJldCkgeworICAgICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzOnByZWZpeCIsICJDb3VsZCBub3QgZmluZCBwcmVmaXggaW5mb1xuIikpOworICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UKKyAgICAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfUFJFRklYX0lORk8gKi8KIAotICAgIHdoaWxlICgocHJvY2luZm8gPSByZWFkZGlyKHByb2NkaXJzKSkgIT0gTlVMTCkgewotICAgICAgICBuYW1lID0gcHJvY2luZm8tPmRfbmFtZTsKLSAgICAgICAgZm9yICg7ICpuYW1lOyBuYW1lKyspIHsKLSAgICAgICAgICAgIGlmICghaXNkaWdpdCgqbmFtZSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoKm5hbWUpCi0gICAgICAgICAgICBjb250aW51ZTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VUERBVEVfUFJFRklYX0lORk8KK2ludCBuZXRfc25tcF91cGRhdGVfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jYnggKm5vZGVfdG9fdXBkYXRlKQoreworICAgIGludCBpcmV0OworICAgIGlyZXQgPSBuZXRfc25tcF9zZWFyY2hfdXBkYXRlX3ByZWZpeF9pbmZvKGhlYWQsIG5vZGVfdG9fdXBkYXRlLCAwKTsKKyAgICBpZihpcmV0IDwgMCkgeworICAgICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzOnByZWZpeCIsICJVbmFibGUgdG8gdXBkYXRlIHByZWZpeCBpbmZvXG4iKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAoIWlyZXQpIHsKKyAgICAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jczpwcmVmaXgiLCAiVW5hYmxlIHRvIGZpbmQgdGhlIG5vZGUgdG8gdXBkYXRlXG4iKSk7CisgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZQorICAgICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVBEQVRFX1BSRUZJWF9JTkZPICovCiAKLSAgICAgICAgbWVtc2V0KHBhdGhfbmFtZSwgJ1wwJywgUEFUSF9NQVggKyAxKTsKLSAgICAgICAgZmlsZWxlbiA9IHNucHJpbnRmKHBhdGhfbmFtZSwgUEFUSF9NQVgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9DX1BBVEggIi8lcy8iIEZJTEVfRElTUCwgcHJvY2luZm8tPmRfbmFtZSk7Ci0gICAgICAgIGlmIChmaWxlbGVuIDw9IDAgfHwgUEFUSF9NQVggPCBmaWxlbGVuKQotICAgICAgICAgICAgY29udGludWU7CitpbnQgbmV0X3NubXBfc2VhcmNoX3VwZGF0ZV9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeF9jYnggKm5vZGVfdG9fdXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZ1bmN0aW9uYWxpdHkpCit7CiAKLSAgICAgICAgcGlkID0gc3RydG91bChwcm9jaW5mby0+ZF9uYW1lLCBOVUxMLCAwKTsKKyAgIC8qIFdlIGRlZmluZSBmdW5jdGlvbmFsaXR5IGJhc2VkIG9uIG5lZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgICAgKiAwIC0gTmVlZCB0byBkbyBhIHNlYXJjaCBhbmQgdXBkYXRlLiBXZSBoYXZlIHRvIHByb3ZpZGUgdGhlIG5vZGVfdG9fdXNlIHN0cnVjdHVyZSBmaWxsZWQgZnVsbHkgKgorICAgICogMSAtIE5lZWQgdG8gZG8gb25seSBzZWFyY2guIFByb3ZpZGUgdGhlIG5vZGVfdG9fdXNlIHdpdGggaW42cCB2YWx1ZSBmaWxsZWQgICAgICAgICAgICAgICAgICAgICovCiAKLSAgICAgICAgaWYgKCEocGlkZGlycyA9IG9wZW5kaXIocGF0aF9uYW1lKSkpCi0gICAgICAgICAgICBjb250aW51ZTsKKyAgICBwcmVmaXhfY2J4ICp0ZW1wX25vZGU7CisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBoZWFkKTsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IG5vZGVfdG9fdXNlKTsKIAotICAgICAgICB3aGlsZSAoKHBpZGluZm8gPSByZWFkZGlyKHBpZGRpcnMpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoZmlsZWxlbiArIHN0cmxlbihwaWRpbmZvLT5kX25hbWUpID4gUEFUSF9NQVgpCi0gICAgICAgICAgICAgICAgY29udGludWU7CisgICAgaWYoZnVuY3Rpb25hbGl0eSA+IDEpCisgICAgICAgcmV0dXJuIC0xOworICAgIGlmKCFub2RlX3RvX3VzZSkKKyAgICAgICByZXR1cm4gLTE7CiAKLSAgICAgICAgICAgIHN0cmNweShwYXRoX25hbWUgKyBmaWxlbGVuLCBwaWRpbmZvLT5kX25hbWUpOwogCi0gICAgICAgICAgICBtZW1zZXQoc29ja2V0X2xuaywgJ1wwJywgTkFNRV9NQVggKyAxKTsKLSAgICAgICAgICAgIHJlYWRsZW4gPSByZWFkbGluayhwYXRoX25hbWUsIHNvY2tldF9sbmssIE5BTUVfTUFYKTsKLSAgICAgICAgICAgIGlmIChyZWFkbGVuIDwgMCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIHNvY2tldF9sbmtbcmVhZGxlbl0gPSAnXDAnOworICAgIGlmICghZnVuY3Rpb25hbGl0eSkgeworICAgICAgIGlmICghKmhlYWQpIHsKKyAgICAgICAgICAgKmhlYWQgPSBub2RlX3RvX3VzZTsKKyAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgfQogCi0gICAgICAgICAgICB0ZW1wX2lub2RlID0gZXh0cmFjdF9pbm9kZShzb2NrZXRfbG5rKTsKLSAgICAgICAgICAgIGlmIChpbm9kZSA9PSB0ZW1wX2lub2RlKSB7Ci0gICAgICAgICAgICAgICAgaWZsYWcgPSAxOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgIGZvciAodGVtcF9ub2RlID0gKmhlYWQ7IHRlbXBfbm9kZS0+bmV4dF9pbmZvICE9IE5VTEwgOyB0ZW1wX25vZGUgPSB0ZW1wX25vZGUtPm5leHRfaW5mbykgeworICAgICAgICAgICAgaWYgKDAgPT0gc3RyY21wKHRlbXBfbm9kZS0+aW42cCwgbm9kZV90b191c2UtPmluNnApKSB7CisgICAgICAgICAgICAgICAgdGVtcF9ub2RlLT5pcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnID0gbm9kZV90b191c2UtPmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWc7CisgICAgICAgICAgICAgICAgdGVtcF9ub2RlLT5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZyA9IG5vZGVfdG9fdXNlLT5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZzsKKyAgICAgICAgICAgICAgICByZXR1cm4gMjsKICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBjbG9zZWRpcihwaWRkaXJzKTsKLSAgICAgICAgaWYgKGlmbGFnID09IDEpCi0gICAgICAgICAgICBicmVhazsKKyAgICAgICB9CisgICAgICAgdGVtcF9ub2RlLT5uZXh0X2luZm8gPSBub2RlX3RvX3VzZTsKKyAgICAgICByZXR1cm4gMTsKKyAgICB9IGVsc2UgeworICAgICAgICAgZm9yICh0ZW1wX25vZGUgPSAqaGVhZDsgdGVtcF9ub2RlICE9IE5VTEwgOyB0ZW1wX25vZGUgPSB0ZW1wX25vZGUtPm5leHRfaW5mbykgeworICAgICAgICAgICAgICBpZiAoMCA9PSBzdHJjbXAodGVtcF9ub2RlLT5pbjZwLCBub2RlX3RvX3VzZS0+aW42cCkpIHsKKyAgICAgICAgICAgICAgICAvKm5lZWQgeW8gcHV0IHNlbSBoZXJlIGFzIGkgcmVhZCBoZXJlICovCisgICAgICAgICAgICAgICAgbm9kZV90b191c2UtPmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWcgPSB0ZW1wX25vZGUtPmlwQWRkcmVzc1ByZWZpeE9uTGlua0ZsYWc7CisgICAgICAgICAgICAgICAgbm9kZV90b191c2UtPmlwQWRkcmVzc1ByZWZpeEF1dG9ub21vdXNGbGFnID0gdGVtcF9ub2RlLT5pcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZzsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgfQorICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQotICAgIGlmIChwcm9jZGlycykKLSAgICAgICAgY2xvc2VkaXIocHJvY2RpcnMpOwotICAgIHJldHVybiBwaWQ7CiB9CiAKLSNlbmRpZiAgLyogI2lmZGVmIGxpbnV4ICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVMRVRFX1BSRUZJWF9JTkZPCitpbnQgbmV0X3NubXBfZGVsZXRlX3ByZWZpeF9pbmZvKHByZWZpeF9jYnggKipoZWFkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICphZGRyZXNzKQoreworCisgICAgcHJlZml4X2NieCAqdGVtcF9ub2RlLCpwcmV2X25vZGU7CisgICAgaWYoIWFkZHJlc3MpCisgICAgICAgcmV0dXJuIC0xOworICAgIGlmKCFoZWFkKQorICAgICAgIHJldHVybiAtMTsKKworICAgIGZvciAodGVtcF9ub2RlID0gKmhlYWQsIHByZXZfbm9kZSA9IE5VTEw7IHRlbXBfbm9kZTsKKyAgICAgICAgIHByZXZfbm9kZSA9IHRlbXBfbm9kZSwgdGVtcF9ub2RlID0gdGVtcF9ub2RlLT5uZXh0X2luZm8pIHsKKworICAgICAgICAgaWYgKHRlbXBfbm9kZS0+aW42cCAmJiBzdHJjbXAodGVtcF9ub2RlLT5pbjZwLCBhZGRyZXNzKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAocHJldl9ub2RlKQorICAgICAgICAgICAgICAgIHByZXZfbm9kZS0+bmV4dF9pbmZvID0gdGVtcF9ub2RlLT5uZXh0X2luZm87CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKmhlYWQgPSB0ZW1wX25vZGUtPm5leHRfaW5mbzsKKyAgICAgICAgICAgIGZyZWUodGVtcF9ub2RlKTsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICB9CisKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUxFVEVfUFJFRklYX0lORk8gKi8KKworI2VuZGlmIC8qIEhBVkVfTElOVVhfUlRORVRMSU5LX0ggKi8KKyAgICAgICAgIApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy5oCmluZGV4IGZiYTFhOTguLjdmNTk3ODAgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MuaAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzLmgKQEAgLTQsMjggKzQsNDYgQEAKICNpZm5kZWYgX01JQkdST1VQX1VUSUxfRlVOQ1NfSAogI2RlZmluZSBfTUlCR1JPVVBfVVRJTF9GVU5DU19ICiAKK2NvbmZpZ19yZXF1aXJlKHV0aWxfZnVuY3MvaGVhZGVyX2dlbmVyaWMpCitjb25maWdfcmVxdWlyZSh1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUpCisKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpbmNsdWRlICJ1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgiCisjaW5jbHVkZSAidXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgiCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAogI2luY2x1ZGUgInN0cnVjdC5oIgogCi12b2lkICAgICAgICAgICAgRXhpdChpbnQpOwordHlwZWRlZiBzdHJ1Y3QgcHJlZml4X2luZm8KK3sKKyAgIHN0cnVjdCBwcmVmaXhfaW5mbyAqbmV4dF9pbmZvOworICAgdW5zaWduZWQgbG9uZyBpcEFkZHJlc3NQcmVmaXhPbkxpbmtGbGFnOworICAgdW5zaWduZWQgbG9uZyBpcEFkZHJlc3NQcmVmaXhBdXRvbm9tb3VzRmxhZzsKKyAgIGNoYXIgaW42cFs0MF07Cit9cHJlZml4X2NieDsKKyNpZm5kZWYgV0lOMzIKK3R5cGVkZWYgc3RydWN0IAoreworIHByZWZpeF9jYnggKipsaXN0X2hlYWQ7Cit9bmV0c25tcF9wcmVmaXhfbGlzdGVuX2luZm87CisjZW5kaWYKIGludCAgICAgICAgICAgICBzaGVsbF9jb21tYW5kKHN0cnVjdCBleHRlbnNpYmxlICopOwogaW50ICAgICAgICAgICAgIGV4ZWNfY29tbWFuZChzdHJ1Y3QgZXh0ZW5zaWJsZSAqKTsKIHN0cnVjdCBleHRlbnNpYmxlICpnZXRfZXh0ZW5faW5zdGFuY2Uoc3RydWN0IGV4dGVuc2libGUgKiwgc2l6ZV90KTsKIGludCAgICAgICAgICAgICBnZXRfZXhlY19vdXRwdXQoc3RydWN0IGV4dGVuc2libGUgKik7Ci1pbnQgICAgICAgICAgICAgZ2V0X2V4ZWNfcGlwZXMoY2hhciAqY21kLCBpbnQgKmZkSW4sIGludCAqZmRPdXQsIGludCAqcGlkKTsKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChjeWd3aW4pCitpbnQgICAgICAgICAgICAgZ2V0X2V4ZWNfcGlwZXMoY2hhciAqY21kLCBpbnQgKmZkSW4sIGludCAqZmRPdXQsIEhBTkRMRSAqcGlkKTsKKyNlbHNlCitpbnQgICAgICAgICAgICAgZ2V0X2V4ZWNfcGlwZXMoY2hhciAqY21kLCBpbnQgKmZkSW4sIGludCAqZmRPdXQsIHBpZF90ICpwaWQpOworI2VuZGlmCiBXcml0ZU1ldGhvZCAgICAgY2xlYXJfY2FjaGU7Ci1SRVRTSUdUWVBFICAgICAgcmVzdGFydF9kb2l0KGludCk7Ci1Xcml0ZU1ldGhvZCAgICAgcmVzdGFydF9ob29rOwogdm9pZCAgICAgICAgICAgIHByaW50X21pYl9vaWQob2lkICosIHNpemVfdCk7CiB2b2lkICAgICAgICAgICAgc3ByaW50X21pYl9vaWQoY2hhciAqLCBjb25zdCBvaWQgKiwgc2l6ZV90KTsKLWludCAgICAgICAgICAgICBoZWFkZXJfc2ltcGxlX3RhYmxlKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIHNpemVfdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kLCBpbnQpOwotaW50ICAgICAgICAgICAgIGhlYWRlcl9nZW5lcmljKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosIGludCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiwgV3JpdGVNZXRob2QgKiopOwogaW50ICAgICAgICAgICAgIGNoZWNrbWliKHN0cnVjdCB2YXJpYWJsZSAqLCBvaWQgKiwgc2l6ZV90ICosIGludCwgc2l6ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kLCBpbnQpOwogY2hhciAgICAgICAgICAgKmZpbmRfZmllbGQoY2hhciAqLCBpbnQpOwpAQCAtMzQsMTUgKzUyLDM1IEBACiB2b2lkICAgICAgICAgICAgd2FpdF9vbl9leGVjKHN0cnVjdCBleHRlbnNpYmxlICopOwogY29uc3QgY2hhciAgICAgKm1ha2VfdGVtcGZpbGUodm9pZCk7CiAKLSNpZmRlZiBsaW51eAotdW5zaWduZWQgaW50ICAgIGdldF9waWRfZnJvbV9pbm9kZSh1bnNpZ25lZCBsb25nIGxvbmcpOworcHJlZml4X2NieCAqbmV0X3NubXBfY3JlYXRlX3ByZWZpeF9pbmZvKHVuc2lnbmVkIGxvbmcgT25MaW5rRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIEF1dG9ub21vdXNGbGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmluNnB0cik7CisjaWZuZGVmIFdJTjMyCitpbnQgbmV0X3NubXBfZmluZF9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHJlc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2J4ICpub2RlX3RvX2ZpbmQpOworaW50IG5ldF9zbm1wX3VwZGF0ZV9wcmVmaXhfaW5mbyhwcmVmaXhfY2J4ICoqaGVhZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJlZml4X2NieCAqbm9kZV90b191cGRhdGUpOworaW50IG5ldF9zbm1wX3NlYXJjaF91cGRhdGVfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmVmaXhfY2J4ICpub2RlX3RvX3VzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmdW5jdGlvbmFsaXR5KTsKK2ludCBuZXRfc25tcF9kZWxldGVfcHJlZml4X2luZm8ocHJlZml4X2NieCAqKmhlYWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmFkZHJlc3MpOwogI2VuZGlmCisjZGVmaW5lIE5JUDYoYWRkcikgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzBdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzFdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzJdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzNdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzRdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzVdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzZdKSwgXAorICAgICAgICBudG9ocygoYWRkcikuczZfYWRkcjE2WzddKQogCiAjZGVmaW5lICAgICBzYXRvc2luKHgpICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJih4KSkKICNkZWZpbmUgICAgIFNPQ0tBRERSKHgpICAgICAoc2F0b3Npbih4KS0+c2luX2FkZHIuc19hZGRyKQotI2lmbmRlZiBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVAotI2RlZmluZSBNSUJfU1RBVFNfQ0FDSEVfVElNRU9VVCA1Ci0jZW5kaWYKKworI2luY2x1ZGUgInV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaCIKIAogdHlwZWRlZiB2b2lkICAgKm1pYl90YWJsZV90OwogdHlwZWRlZiBpbnQgICAgIChSRUxPQUQpIChtaWJfdGFibGVfdCk7CmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvRXhpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NDhmZDgKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuYwpAQCAtMCwwICsxLDIzIEBACisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCBDb3B5cmlnaHQgMjAwMyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KKworI2luY2x1ZGUgIkV4aXQuaCIKKwordm9pZAorRXhpdChpbnQgdmFyKQoreworICAgIHNubXBfbG9nKExPR19FUlIsICJTZXJ2ZXIgRXhpdGluZyB3aXRoIGNvZGUgJWRcbiIsIHZhcik7CisgICAgZXhpdCh2YXIpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL0V4aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGYwY2Q1Ci0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9FeGl0LmgKQEAgLTAsMCArMSwxNyBAQAorLyoKKyAqICBFeGl0Lmg6ICB2ZXJib3NlIHRlcm1pbmFpb24gcm91dGluZQorICovCisjaWZuZGVmIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0VYSVRfSAorI2RlZmluZSBfTUlCR1JPVVBfVVRJTF9GVU5DU19FWElUX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCit2b2lkICAgICAgICAgICAgRXhpdChpbnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0VYSVRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGJhY2QKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL01JQl9TVEFUU19DQUNIRV9USU1FT1VULmgKQEAgLTAsMCArMSwxMiBAQAorLyoKKyAqIHV0aWxfZnVuY3MvTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVQuaDogIHV0aWxpdGl5IGZ1bmN0aW9ucyBmb3IgZXh0ZW5zaWJsZQorICogZ3JvdXBzLgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9VVElMX0ZVTkNTX01JQl9TVEFUU19DQUNIRV9USU1FT1VUX0gKKyNkZWZpbmUgX01JQkdST1VQX1VUSUxfRlVOQ1NfTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVRfSAorCisjaWZuZGVmIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUCisjZGVmaW5lIE1JQl9TVEFUU19DQUNIRV9USU1FT1VUIDUKKyNlbmRpZgorCisjZW5kaWYgLyogX01JQkdST1VQX1VUSUxfRlVOQ1NfTUlCX1NUQVRTX0NBQ0hFX1RJTUVPVVRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9nZXRfcGlkX2Zyb21faW5vZGUuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGUxNTdhZQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmMKQEAgLTAsMCArMSwxODYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgImdldF9waWRfZnJvbV9pbm9kZS5oIgorCisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyMgZGVmaW5lIFBST0NfUEFUSCAgICAgICAgICAiL3Byb2MiCisjIGRlZmluZSBTT0NLRVRfVFlQRV8xICAgICAgInNvY2tldDpbIgorIyBkZWZpbmUgU09DS0VUX1RZUEVfMiAgICAgICJbMDAwMF06IgorCisvKiBEZWZpbml0aW9uIG9mIGEgc2ltcGxlIG9wZW4gYWRkcmVzc2luZyBoYXNoIHRhYmxlLiovCisvKiBXaGVuIGlub2RlID09IDAgdGhlbiB0aGUgZW50cnkgaXMgZW1wdHkuKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbm82NF90IGlub2RlOworICAgIHBpZF90ICAgcGlkOworfSBpbm9kZV9waWRfZW50X3Q7CisKKyNkZWZpbmUgSU5PREVfUElEX1RBQkxFX01BWF9DT0xMSVNJT05TIDEwMDAKKyNkZWZpbmUgSU5PREVfUElEX1RBQkxFX0xFTkdUSCAyMDAwMAorI2RlZmluZSBJTk9ERV9QSURfVEFCTEVfU0laRSAoSU5PREVfUElEX1RBQkxFX0xFTkdUSCAqIHNpemVvZiAoaW5vZGVfcGlkX2VudF90KSkKK3N0YXRpYyBpbm9kZV9waWRfZW50X3QgIGlub2RlX3BpZF90YWJsZVtJTk9ERV9QSURfVEFCTEVfTEVOR1RIXTsKKworc3RhdGljIHVpbnQzMl90CitfaGFzaCh1aW50NjRfdCBrZXkpCit7CisgICAga2V5ID0gKH5rZXkpICsgKGtleSA8PCAxOCk7CisgICAga2V5ID0ga2V5IF4gKGtleSA+PiAzMSk7CisgICAga2V5ID0ga2V5ICogMjE7CisgICAga2V5ID0ga2V5IF4gKGtleSA+PiAxMSk7CisgICAga2V5ID0ga2V5ICsgKGtleSA8PCA2KTsKKyAgICBrZXkgPSBrZXkgXiAoa2V5ID4+IDIyKTsKKyAgICByZXR1cm4ga2V5OworfQorCitzdGF0aWMgdm9pZAorX2NsZWFyKHZvaWQpCit7CisgICAgLyogQ2xlYXIgdGhlIGlub2RlL3BpZCBoYXNoIHRhYmxlLiovCisgICAgbWVtc2V0KGlub2RlX3BpZF90YWJsZSwgMCwgSU5PREVfUElEX1RBQkxFX1NJWkUpOworfQorCitzdGF0aWMgdm9pZAorX3NldChpbm82NF90IGlub2RlLCBwaWRfdCBwaWQpCit7CisgICAgdWludDMyX3QgICAgICAgIGhhc2ggPSBfaGFzaChpbm9kZSk7CisgICAgdWludDMyX3QgICAgICAgIGk7CisgICAgaW5vZGVfcGlkX2VudF90ICplbnRyeTsKKworICAgIC8qIFdlIHdpbGwgdHJ5IGZvciBhIG1heGltdW0gbnVtYmVyIG9mIGNvbGxpc2lvbnMuKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgSU5PREVfUElEX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpKyspIHsKKyAgICAgICAgZW50cnkgPSAmaW5vZGVfcGlkX3RhYmxlWyhoYXNoICsgaSkgJSBJTk9ERV9QSURfVEFCTEVfTEVOR1RIXTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGlzIGVudHJ5IGlzIGVtcHR5LCBvciB0aGUgYWN0dWFsIGlub2RlIHdlIHdlcmUgbG9va2luZyBmb3IuKi8KKyAgICAgICAgLyogVGhlIHNlY29uZCBwYXJ0IHNob3VsZCBuZXZlciBoYXBwZW4sIGJ1dCBpdCBpcyBoZXJlIGZvciBjb21wbGV0ZW5lc3MuKi8KKyAgICAgICAgaWYgKGVudHJ5LT5pbm9kZSA9PSAwIHx8IGVudHJ5LT5pbm9kZSA9PSBpbm9kZSkgeworICAgICAgICAgICAgZW50cnktPmlub2RlID0gaW5vZGU7CisgICAgICAgICAgICBlbnRyeS0+cGlkID0gcGlkOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorCisgICAgLyogV2Ugd2lsbCBzaWxlbnRseSBmYWlsIHRvIGluc2VydCB0aGUgaW5vZGUgaWYgd2UgZ2V0IHRvbyBtYW55IGNvbGxpc2lvbnMuKi8KKyAgICAvKiB0aGUgX2dldCBmdW5jdGlvbiB3aWxsIHJldHVybiBhIHplcm8gcGlkLiovCit9CisKK3N0YXRpYyBwaWRfdCBfZ2V0KGlubzY0X3QgaW5vZGUpCit7CisgICAgdWludDMyX3QgICAgICAgIGhhc2ggPSBfaGFzaChpbm9kZSk7CisgICAgdWludDMyX3QgICAgICAgIGk7CisgICAgaW5vZGVfcGlkX2VudF90ICplbnRyeTsKKworICAgIC8qIFdlIHdpbGwgdHJ5IGZvciBhIG1heGltdW0gbnVtYmVyIG9mIGNvbGxpc2lvbnMuKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgSU5PREVfUElEX1RBQkxFX01BWF9DT0xMSVNJT05TOyBpKyspIHsKKyAgICAgICAgZW50cnkgPSAmaW5vZGVfcGlkX3RhYmxlWyhoYXNoICsgaSkgJSBJTk9ERV9QSURfVEFCTEVfTEVOR1RIXTsKKworICAgICAgICAvKiBDaGVjayBpZiB0aGlzIGVudHJ5IGlzIGVtcHR5LCBvciB0aGUgYWN0dWFsIGlub2RlIHdlIHdlcmUgbG9va2luZyBmb3IuKi8KKyAgICAgICAgLyogSWYgdGhlIGVudHJ5IGlzIGVtcHR5IGl0IG1lYW5zIHRoZSBpbm9kZSBpcyBub3QgaW4gdGhlIHRhYmxlIGFuZCB3ZSovCisgICAgICAgIC8qIHNob3VsZCByZXR1cm4gMCwgdGhlIGVudHJ5IHdpbGwgYWxzbyBoYXZlIGEgemVybyBwaWQuKi8KKyAgICAgICAgaWYgKGVudHJ5LT5pbm9kZSA9PSAwIHx8IGVudHJ5LT5pbm9kZSA9PSBpbm9kZSkgeworICAgICAgICAgICAgcmV0dXJuIGVudHJ5LT5waWQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBXZSBjb3VsZCBub3QgZmluZCB0aGUgcGlkLiovCisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlX2luaXQodm9pZCkKK3sKKyAgICBESVIgICAgICAgICAgICAqcHJvY2RpcnMgPSBOVUxMLCAqcGlkZGlycyA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgIHBhdGhfbmFtZVtQQVRIX01BWCArIDFdOworICAgIGNoYXIgICAgICAgICAgICBzb2NrZXRfbG5rW05BTUVfTUFYICsgMV07CisgICAgaW50ICAgICAgICAgICAgIGZpbGVsZW4gPSAwLCByZWFkbGVuID0gMDsKKyAgICBzdHJ1Y3QgZGlyZW50ICAqcHJvY2luZm8sICpwaWRpbmZvOworICAgIHBpZF90ICAgICAgICAgICBwaWQgPSAwOworICAgIGlubzY0X3QgICAgICAgICB0ZW1wX2lub2RlOworCisgICAgX2NsZWFyKCk7CisKKyAgICAvKiB3YWxrIG92ZXIgYWxsIGRpcmVjdG9yaWVzIGluIC9wcm9jKi8KKyAgICBpZiAoIShwcm9jZGlycyA9IG9wZW5kaXIoUFJPQ19QQVRIKSkpIHsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAic25tcGQ6IGNhbm5vdCBvcGVuIC9wcm9jXG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB3aGlsZSAoKHByb2NpbmZvID0gcmVhZGRpcihwcm9jZGlycykpICE9IE5VTEwpIHsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IHByb2NpbmZvLT5kX25hbWU7CisKKyAgICAgICAgLyogQSBwaWQgZGlyZWN0b3J5IG9ubHkgY29udGFpbnMgZGlnaXRzLCBjaGVjayBmb3IgdGhvc2UuKi8KKyAgICAgICAgZm9yICg7ICpuYW1lOyBuYW1lKyspIHsKKyAgICAgICAgICAgIGlmICghaXNkaWdpdCgqbmFtZSkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYoKm5hbWUpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiBDcmVhdGUgdGhlIC9wcm9jLzxwaWQ+L2ZkLyBwYXRoIG5hbWUuKi8KKyAgICAgICAgbWVtc2V0KHBhdGhfbmFtZSwgJ1wwJywgUEFUSF9NQVggKyAxKTsKKyAgICAgICAgZmlsZWxlbiA9IHNucHJpbnRmKHBhdGhfbmFtZSwgUEFUSF9NQVgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBQUk9DX1BBVEggIi8lcy9mZC8iLCBwcm9jaW5mby0+ZF9uYW1lKTsKKyAgICAgICAgaWYgKGZpbGVsZW4gPD0gMCB8fCBQQVRIX01BWCA8IGZpbGVsZW4pCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiB3YWxrIG92ZXIgYWxsIHRoZSBmaWxlcyBpbiAvcHJvYy88cGlkPi9mZC8qLworICAgICAgICBpZiAoIShwaWRkaXJzID0gb3BlbmRpcihwYXRoX25hbWUpKSkKKyAgICAgICAgY29udGludWU7CisKKyAgICAgICAgd2hpbGUgKChwaWRpbmZvID0gcmVhZGRpcihwaWRkaXJzKSkgIT0gTlVMTCkgeworICAgICAgICAgICAgaWYgKGZpbGVsZW4gKyBzdHJsZW4ocGlkaW5mby0+ZF9uYW1lKSA+IFBBVEhfTUFYKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzdHJjcHkocGF0aF9uYW1lICsgZmlsZWxlbiwgcGlkaW5mby0+ZF9uYW1lKTsKKworICAgICAgICAgICAgLyogVGhlIGZpbGUgZGlzY3JpcHRvciBpcyBhIHN5bWJvbGljIGxpbmsgdG8gYSBzb2NrZXQgb3IgYSBmaWxlLiovCisgICAgICAgICAgICAvKiBUaHVzIHJlYWQgdGhlIHN5bWJvbGljIGxpbmsuKi8KKyAgICAgICAgICAgIG1lbXNldChzb2NrZXRfbG5rLCAnXDAnLCBOQU1FX01BWCArIDEpOworICAgICAgICAgICAgcmVhZGxlbiA9IHJlYWRsaW5rKHBhdGhfbmFtZSwgc29ja2V0X2xuaywgTkFNRV9NQVgpOworICAgICAgICAgICAgaWYgKHJlYWRsZW4gPCAwKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBzb2NrZXRfbG5rW3JlYWRsZW5dID0gJ1wwJzsKKworICAgICAgICAgICAgLyogQ2hlY2sgaWYgdG8gc2VlIGlmIHRoZSBmaWxlIGRlc2NyaXB0b3IgaXMgYSBzb2NrZXQgYnkgY29tcGFyaW5nKi8KKyAgICAgICAgICAgIC8qIHRoZSBzdGFydCB0byBhIHN0cmluZy4gQWxzbyBleHRyYWN0IHRoZSBpbm9kZSBudW1iZXIgZnJvbSB0aGlzKi8KKyAgICAgICAgICAgIC8qIHN5bWJvbGljIGxpbmsuKi8KKyAgICAgICAgICAgIGlmICghc3RybmNtcChzb2NrZXRfbG5rLCBTT0NLRVRfVFlQRV8xLCA4KSkgeworICAgICAgICAgICAgICAgIHRlbXBfaW5vZGUgPSBzdHJ0b3VsbChzb2NrZXRfbG5rICsgOCwgTlVMTCwgMCk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKCFzdHJuY21wKHNvY2tldF9sbmssIFNPQ0tFVF9UWVBFXzIsIDcpKSB7CisgICAgICAgICAgICAgICAgdGVtcF9pbm9kZSA9IHN0cnRvdWxsKHNvY2tldF9sbmsgKyA3LCBOVUxMLCAwKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdGVtcF9pbm9kZSA9IDA7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIEFkZCB0aGUgaW5vZGUvcGlkIGNvbWJpbmF0aW9uIHRvIG91ciBoYXNoIHRhYmxlLiovCisgICAgICAgICAgICBpZiAodGVtcF9pbm9kZSAhPSAwKSB7CisgICAgICAgICAgICAgICAgcGlkID0gc3RydG91bChwcm9jaW5mby0+ZF9uYW1lLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBfc2V0KHRlbXBfaW5vZGUsIHBpZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgY2xvc2VkaXIocGlkZGlycyk7CisgICAgfQorICAgIGlmIChwcm9jZGlycykKKyAgICAgICAgY2xvc2VkaXIocHJvY2RpcnMpOworfQorCitwaWRfdAorbmV0c25tcF9nZXRfcGlkX2Zyb21faW5vZGUoaW5vNjRfdCBpbm9kZSkKK3sKKyAgICByZXR1cm4gX2dldChpbm9kZSk7Cit9CisKZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvZ2V0X3BpZF9mcm9tX2lub2RlLmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkODg3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiB1dGlsX2Z1bmNzL2dldF9waWRfZnJvbV9pbm9kZS5oOiAgdXRpbGl0aXkgZnVuY3Rpb24gdG8gcmV0cmlldmUgdGhlIHBpZAorICogdGhhdCBjb250cm9scyBhIGdpdmVuIGlub2RlIG9uIGxpbnV4LgorICovCisjaWZuZGVmIE5FVFNOTVBfTUlCR1JPVVBfVVRJTF9GVU5DU19HRVRfUElEX0ZST01fSU5PREVfSAorI2RlZmluZSBORVRTTk1QX01JQkdST1VQX1VUSUxfRlVOQ1NfR0VUX1BJRF9GUk9NX0lOT0RFX0gKKworI2lmbmRlZiBsaW51eAorY29uZmlnX2Vycm9yKGdldF9waWRfZnJvbV9pbm9kZSBpcyBvbmx5IHN1cHBvcmVkIG9uIGxpbnV4KQorI2VuZGlmCisKKyNkZWZpbmUgX0xBUkdFRklMRTY0X1NPVVJDRSAxCisKKyNpZiBIQVZFX0RJUkVOVF9ICisjaW5jbHVkZSA8ZGlyZW50Lmg+CisjZWxzZQorIyBkZWZpbmUgZGlyZW50IGRpcmVjdAorIyBpZiBIQVZFX1NZU19ORElSX0gKKyMgIGluY2x1ZGUgPHN5cy9uZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfU1lTX0RJUl9ICisjICBpbmNsdWRlIDxzeXMvZGlyLmg+CisjIGVuZGlmCisjIGlmIEhBVkVfTkRJUl9ICisjICBpbmNsdWRlIDxuZGlyLmg+CisjIGVuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCit2b2lkIG5ldHNubXBfZ2V0X3BpZF9mcm9tX2lub2RlX2luaXQodm9pZCk7CitwaWRfdCBuZXRzbm1wX2dldF9waWRfZnJvbV9pbm9kZShpbm82NF90KTsKKworI2VuZGlmIC8qIE5FVFNOTVBfTUlCR1JPVVBfVVRJTF9GVU5DU19HRVRfUElEX0ZST01fSU5PREVfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxNTRiZTkKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmMKQEAgLTAsMCArMSw2NCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgImhlYWRlcl9nZW5lcmljLmgiCisKKy8qCisgKiBoZWFkZXJfZ2VuZXJpYyguLi4KKyAqIEFyZ3VtZW50czoKKyAqIHZwICAgICBJTiAgICAgIC0gcG9pbnRlciB0byB2YXJpYWJsZSBlbnRyeSB0aGF0IHBvaW50cyBoZXJlCisgKiBuYW1lICAgIElOL09VVCAgLSBJTi9uYW1lIHJlcXVlc3RlZCwgT1VUL25hbWUgZm91bmQKKyAqIGxlbmd0aCAgSU4vT1VUICAtIGxlbmd0aCBvZiBJTi9PVVQgb2lkJ3MKKyAqIGV4YWN0ICAgSU4gICAgICAtIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZAorICogdmFyX2xlbiBPVVQgICAgIC0gbGVuZ3RoIG9mIHZhcmlhYmxlIG9yIDAgaWYgZnVuY3Rpb24gcmV0dXJuZWQKKyAqIHdyaXRlX21ldGhvZAorICoKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogZ2VuZXJpY19oZWFkZXIKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJICAqdnAJICAgKEkpICAgICBQb2ludGVyIHRvIHZhcmlhYmxlIGVudHJ5IHRoYXQgcG9pbnRzIGhlcmUuCisgKgkgICpuYW1lCSAgIChJL08pICAgSW5wdXQgbmFtZSByZXF1ZXN0ZWQsIG91dHB1dCBuYW1lIGZvdW5kLgorICoJICAqbGVuZ3RoICAoSS9PKSAgIExlbmd0aCBvZiBpbnB1dCBhbmQgb3V0cHV0IG9pZCdzLgorICoJICAgZXhhY3QgICAoSSkgICAgIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggd2FzIHJlcXVlc3RlZC4KKyAqCSAgKnZhcl9sZW4gKE8pICAgICBMZW5ndGggb2YgdmFyaWFibGUgb3IgMCBpZiBmdW5jdGlvbiByZXR1cm5lZC4KKyAqCSgqKndyaXRlX21ldGhvZCkgICBIb29rIHRvIG5hbWUgYSB3cml0ZSBtZXRob2QgKFVOVVNFRCkuCisgKgorICogUmV0dXJuczoKKyAqCU1BVENIX1NVQ0NFRURFRAlJZiB2cC0+bmFtZSBtYXRjaGVzIG5hbWUgKGFjY291bnRpbmcgZm9yIGV4YWN0IGJpdCkuCisgKglNQVRDSF9GQUlMRUQJT3RoZXJ3aXNlLAorICoKKyAqCisgKiBDaGVjayB3aGV0aGVyIHZhcmlhYmxlICh2cCkgbWF0Y2hlcyBuYW1lLgorICovCitpbnQKK2hlYWRlcl9nZW5lcmljKHN0cnVjdCB2YXJpYWJsZSAqdnAsCisgICAgICAgICAgICAgICBvaWQgKiBuYW1lLAorICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoLAorICAgICAgICAgICAgICAgaW50IGV4YWN0LCBzaXplX3QgKiB2YXJfbGVuLCBXcml0ZU1ldGhvZCAqKiB3cml0ZV9tZXRob2QpCit7CisgICAgb2lkICAgICAgICAgICAgIG5ld25hbWVbTUFYX09JRF9MRU5dOworICAgIGludCAgICAgICAgICAgICByZXN1bHQ7CisKKyAgICBERUJVR01TR1RMKCgidXRpbF9mdW5jcyIsICJoZWFkZXJfZ2VuZXJpYzogIikpOworICAgIERFQlVHTVNHT0lEKCgidXRpbF9mdW5jcyIsIG5hbWUsICpsZW5ndGgpKTsKKyAgICBERUJVR01TRygoInV0aWxfZnVuY3MiLCAiIGV4YWN0PSVkXG4iLCBleGFjdCkpOworCisgICAgbWVtY3B5KChjaGFyICopIG5ld25hbWUsIChjaGFyICopIHZwLT5uYW1lLAorICAgICAgICAgICAoaW50KSB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKKyAgICBuZXduYW1lW3ZwLT5uYW1lbGVuXSA9IDA7CisgICAgcmVzdWx0ID0gc25tcF9vaWRfY29tcGFyZShuYW1lLCAqbGVuZ3RoLCBuZXduYW1lLCB2cC0+bmFtZWxlbiArIDEpOworICAgIERFQlVHTVNHVEwoKCJ1dGlsX2Z1bmNzIiwgIiAgcmVzdWx0OiAlZFxuIiwgcmVzdWx0KSk7CisgICAgaWYgKChleGFjdCAmJiAocmVzdWx0ICE9IDApKSB8fCAoIWV4YWN0ICYmIChyZXN1bHQgPj0gMCkpKQorICAgICAgICByZXR1cm4gKE1BVENIX0ZBSUxFRCk7CisgICAgbWVtY3B5KChjaGFyICopIG5hbWUsIChjaGFyICopIG5ld25hbWUsCisgICAgICAgICAgICgoaW50KSB2cC0+bmFtZWxlbiArIDEpICogc2l6ZW9mKG9pZCkpOworICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisKKyAgICAqd3JpdGVfbWV0aG9kID0gKFdyaXRlTWV0aG9kKikwOworICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAvKiBkZWZhdWx0IHRvICdsb25nJyByZXN1bHRzICovCisgICAgcmV0dXJuIChNQVRDSF9TVUNDRUVERUQpOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfZ2VuZXJpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NjEwNDAKLS0tIC9kZXYvbnVsbAorKysgYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmgKQEAgLTAsMCArMSwxOCBAQAorLyoKKyAqICB1dGlsX2Z1bmNzL2hlYWRlcl9nZW5lcmljLmg6ICB1dGlsaXRpeSBmdW5jdGlvbnMgZm9yIGV4dGVuc2libGUgZ3JvdXBzLgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0hFQURFUl9HRU5FUklDX0gKKyNkZWZpbmUgX01JQkdST1VQX1VUSUxfRlVOQ1NfSEVBREVSX0dFTkVSSUNfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK2ludCBoZWFkZXJfZ2VuZXJpYyhzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsIHNpemVfdCAqLAorICAgICAgICAgICAgICAgICAgIFdyaXRlTWV0aG9kICoqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0hFQURFUl9HRU5FUklDX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFmZTE2MAotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5jCkBAIC0wLDAgKzEsMTEwIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSAiaGVhZGVyX3NpbXBsZV90YWJsZS5oIgorCisjaW5jbHVkZSA8bGltaXRzLmg+CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiBoZWFkZXJfc2ltcGxlX3RhYmxlCisgKgorICogUGFyYW1ldGVyczoKKyAqCSAgKnZwCQkgVmFyaWFibGUgZGF0YS4KKyAqCSAgKm5hbWUJCSBGdWxseSBpbnN0YW50aWF0ZWQgT0lEIG5hbWUuCisgKgkgICpsZW5ndGgJIExlbmd0aCBvZiBuYW1lLgorICoJICAgZXhhY3QJIFRSVUUgaWYgYW4gZXhhY3QgbWF0Y2ggaXMgZGVzaXJlZC4KKyAqCSAgKnZhcl9sZW4JIEhvb2sgZm9yIHNpemUgb2YgcmV0dXJuZWQgZGF0YSB0eXBlLgorICoJKCoqd3JpdGVfbWV0aG9kKSBIb29rIGZvciB3cml0ZSBtZXRob2QgKFVOVVNFRCkuCisgKgkgICBtYXgKKyAqCisgKiBSZXR1cm5zOgorICoJMAlJZiBuYW1lIG1hdGNoZXMgdnAtPm5hbWUgKGFjY291bnRpbmcgZm9yICdleGFjdCcpIGFuZCBpcworICoJCQlub3QgZ3JlYXRlciBpbiBsZW5ndGggdGhhbiAnbWF4Jy4KKyAqCTEJT3RoZXJ3aXNlLgorICoKKyAqCisgKiBDb21wYXJlICduYW1lJyB0byB2cC0+bmFtZSBmb3IgdGhlIGJlc3QgbWF0Y2ggb3IgYW4gZXhhY3QgbWF0Y2ggKGlmCisgKglyZXF1ZXN0ZWQpLiAgQWxzbyBjaGVjayB0aGF0ICduYW1lJyBpcyBub3QgbG9uZ2VyIHRoYW4gJ21heCcgaWYKKyAqCW1heCBpcyBncmVhdGVyLXRoYW4vZXF1YWwgMC4KKyAqIFN0b3JlIGEgc3VjY2Vzc2Z1bCBtYXRjaCBpbiAnbmFtZScsIGFuZCBpbmNyZW1lbnQgdGhlIE9JRCBpbnN0YW5jZSBpZgorICoJdGhlIG1hdGNoIHdhcyBub3QgZXhhY3QuCisgKgorICogJ25hbWUnIGFuZCAnbGVuZ3RoJyBhcmUgdW5kZWZpbmVkIHVwb24gZmFpbHVyZS4KKyAqCisgKi8KK2ludAoraGVhZGVyX3NpbXBsZV90YWJsZShzdHJ1Y3QgdmFyaWFibGUgKnZwLCBvaWQgKiBuYW1lLCBzaXplX3QgKiBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgIGludCBleGFjdCwgc2l6ZV90ICogdmFyX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgV3JpdGVNZXRob2QgKiogd3JpdGVfbWV0aG9kLCBpbnQgbWF4KQoreworICAgIGludCAgICAgICAgICAgICBpLCBydGVzdDsgICAvKiBTZXQgdG86ICAgICAgLTEgICAgICBJZiBuYW1lIDwgdnAtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAxICAgICAgIElmIG5hbWUgPiB2cC0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgIDAgICAgICAgT3RoZXJ3aXNlLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICBvaWQgICAgICAgICAgICAgbmV3bmFtZVtNQVhfT0lEX0xFTl07CisKKyAgICBmb3IgKGkgPSAwLCBydGVzdCA9IDA7CisgICAgICAgICBpIDwgKGludCkgdnAtPm5hbWVsZW4gJiYgaSA8IChpbnQpICgqbGVuZ3RoKSAmJiAhcnRlc3Q7IGkrKykgeworICAgICAgICBpZiAobmFtZVtpXSAhPSB2cC0+bmFtZVtpXSkgeworICAgICAgICAgICAgaWYgKG5hbWVbaV0gPCB2cC0+bmFtZVtpXSkKKyAgICAgICAgICAgICAgICBydGVzdCA9IC0xOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJ0ZXN0ID0gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAocnRlc3QgPiAwIHx8CisgICAgICAgIChleGFjdCA9PSAxCisgICAgICAgICAmJiAocnRlc3QgfHwgKGludCkgKmxlbmd0aCAhPSAoaW50KSAodnAtPm5hbWVsZW4gKyAxKSkpKSB7CisgICAgICAgIGlmICh2YXJfbGVuKQorICAgICAgICAgICAgKnZhcl9sZW4gPSAwOworICAgICAgICByZXR1cm4gTUFUQ0hfRkFJTEVEOworICAgIH0KKworICAgIG1lbXNldChuZXduYW1lLCAwLCBzaXplb2YobmV3bmFtZSkpOworCisgICAgaWYgKCgoaW50KSAqbGVuZ3RoKSA8PSAoaW50KSB2cC0+bmFtZWxlbiB8fCBydGVzdCA9PSAtMSkgeworICAgICAgICBtZW1tb3ZlKG5ld25hbWUsIHZwLT5uYW1lLCAoaW50KSB2cC0+bmFtZWxlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgbmV3bmFtZVt2cC0+bmFtZWxlbl0gPSAxOworICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOworICAgIH0gZWxzZSBpZiAoKChpbnQpICpsZW5ndGgpID4gKGludCkgdnAtPm5hbWVsZW4gKyAxKSB7ICAgICAgIC8qIGV4YWN0IGNhc2UgY2hlY2tlZCBlYXJsaWVyICovCisgICAgICAgICpsZW5ndGggPSB2cC0+bmFtZWxlbiArIDE7CisgICAgICAgIG1lbW1vdmUobmV3bmFtZSwgbmFtZSwgKCpsZW5ndGgpICogc2l6ZW9mKG9pZCkpOworICAgICAgICBpZiAobmFtZVsqbGVuZ3RoIC0gMV0gPCBNQVhfU1VCSUQpIHsKKyAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV0gKyAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIENhcmVmdWwgbm90IHRvIG92ZXJmbG93Li4uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIG5ld25hbWVbKmxlbmd0aCAtIDFdID0gbmFtZVsqbGVuZ3RoIC0gMV07CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAqbGVuZ3RoID0gdnAtPm5hbWVsZW4gKyAxOworICAgICAgICBtZW1tb3ZlKG5ld25hbWUsIG5hbWUsICgqbGVuZ3RoKSAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgaWYgKCFleGFjdCkgeworICAgICAgICAgICAgaWYgKG5hbWVbKmxlbmd0aCAtIDFdIDwgTUFYX1NVQklEKSB7CisgICAgICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXSArIDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQ2FyZWZ1bCBub3QgdG8gb3ZlcmZsb3cuLi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBuZXduYW1lWypsZW5ndGggLSAxXSA9IG5hbWVbKmxlbmd0aCAtIDFdOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbmV3bmFtZVsqbGVuZ3RoIC0gMV0gPSBuYW1lWypsZW5ndGggLSAxXTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoKG1heCA+PSAwICYmICgoaW50KW5ld25hbWVbKmxlbmd0aCAtIDFdID4gbWF4KSkgfHwKKyAgICAgICAgICAgICAgICggMCA9PSBuZXduYW1lWypsZW5ndGggLSAxXSApKSB7CisgICAgICAgIGlmICh2YXJfbGVuKQorICAgICAgICAgICAgKnZhcl9sZW4gPSAwOworICAgICAgICByZXR1cm4gTUFUQ0hfRkFJTEVEOworICAgIH0KKworICAgIG1lbW1vdmUobmFtZSwgbmV3bmFtZSwgKCpsZW5ndGgpICogc2l6ZW9mKG9pZCkpOworICAgIGlmICh3cml0ZV9tZXRob2QpCisgICAgICAgICp3cml0ZV9tZXRob2QgPSAoV3JpdGVNZXRob2QqKTA7CisgICAgaWYgKHZhcl9sZW4pCisgICAgICAgICp2YXJfbGVuID0gc2l6ZW9mKGxvbmcpOyAgICAgICAgLyogZGVmYXVsdCAqLworICAgIHJldHVybiAoTUFUQ0hfU1VDQ0VFREVEKTsKK30KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9oZWFkZXJfc2ltcGxlX3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE5NWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvaGVhZGVyX3NpbXBsZV90YWJsZS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qCisgKiB1dGlsX2Z1bmNzL2hlYWRlcl9zaW1wbGVfdGFibGUuaDogIHV0aWxpdGl5IGZ1bmN0aW9ucyBmb3IgZXh0ZW5zaWJsZQorICogZ3JvdXBzLgorICovCisjaWZuZGVmIF9NSUJHUk9VUF9VVElMX0ZVTkNTX0hFQURFUl9TSU1QTEVfVEFCTEVfSAorI2RlZmluZSBfTUlCR1JPVVBfVVRJTF9GVU5DU19IRUFERVJfU0lNUExFX1RBQkxFX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCitpbnQgaGVhZGVyX3NpbXBsZV90YWJsZShzdHJ1Y3QgdmFyaWFibGUgKiwgb2lkICosIHNpemVfdCAqLCBpbnQsIHNpemVfdCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgV3JpdGVNZXRob2QgKiosIGludCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfTUlCR1JPVVBfVVRJTF9GVU5DU19IRUFERVJfU0lNUExFX1RBQkxFX0ggKi8KZGlmZiAtLWdpdCBhL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhZDczNwotLS0gL2Rldi9udWxsCisrKyBiL2FnZW50L21pYmdyb3VwL3V0aWxfZnVuY3MvcmVzdGFydC5jCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiB1dGlsX2Z1bmNzLmMKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgQ29weXJpZ2h0IDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKworI2lmIEhBVkVfUkFJU0UKKyNkZWZpbmUgYWxhcm0gcmFpc2UKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgorCisjaWZkZWYgVVNJTkdfVUNEX1NOTVBfRVJST1JNSUJfTU9EVUxFCisjaW5jbHVkZSAidWNkLXNubXAvZXJyb3JtaWIuaCIKKyNlbHNlCisjZGVmaW5lIHNldFBlcnJvcnN0YXR1cyh4KSBzbm1wX2xvZ19wZXJyb3IoeCkKKyNlbmRpZgorCitjaGFyICoqYXJndnJlc3RhcnRwLCAqYXJndnJlc3RhcnRuYW1lLCAqYXJndnJlc3RhcnQ7CisKK1JFVFNJR1RZUEUKK3Jlc3RhcnRfZG9pdChpbnQgYSkKK3sKKyAgICBjaGFyICogbmFtZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CisgICAgc25tcF9zaHV0ZG93bihuYW1lKTsKKworICAgIC8qICBUaGlzIHNpZ25hbCBoYW5kbGVyIG1heSBydW4gd2l0aCBTSUdBTEFSTSBibG9ja2VkLgorICAgICAqICBTaW5jZSB0aGUgc2lnbmFsIG1hc2sgaXMgcHJlc2VydmVkIGFjY3Jvc3MgZXhlY3YoKSwgd2UgbXVzdAorICAgICAqICBtYWtlIHN1cmUgdGhhdCBTSUdBTEFSTSBpcyB1bmJsb2NrZWQgcHJpb3Igb2YgZXhlY3YnaW5nLgorICAgICAqICBPdGhlcndpc2UgU0lHQUxBUk0gd2lsbCBiZSBpZ25vcmVkIGluIHRoZSBuZXh0IGluY2FybmF0aW9uCisgICAgICogIG9mIHNubXBkLCBiZWNhdXNlIHRoZSBzaWduYWwgaXMgYmxvY2tlZC4gQW5kIHRodXMsIHRoZQorICAgICAqICByZXN0YXJ0IGRvZXNuJ3Qgd29yayBhbnltb3JlLgorICAgICAqCisgICAgICogIEEgcXVvdGUgZnJvbSB0aGUgc2lncHJvY21hc2soKSBtYW4gcGFnZToKKyAgICAgKiAgVGhlIHVzZSBvZiBzaWdwcm9jbWFzaygpIGlzIHVuc3BlY2lmaWVkIGluIGEgbXVsdGl0aHJlYWRlZCBwcm9jZXNzOyBzZWUKKyAgICAgKiAgcHRocmVhZF9zaWdtYXNrKDMpLgorICAgICAqLworI2lmIEhBVkVfU0lHUFJPQ01BU0sKKyAgICB7CisgICAgICAgIHNpZ3NldF90IGVtcHR5X3NldDsKKworICAgICAgICBzaWdlbXB0eXNldCgmZW1wdHlfc2V0KTsKKyAgICAgICAgc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZlbXB0eV9zZXQsIE5VTEwpOworICAgIH0KKyNlbGlmIEhBVkVfU0lHQkxPQ0sKKyAgICBzaWdzZXRtYXNrKDApOworI2VuZGlmCisKKyAgICAvKgorICAgICAqIGRvIHRoZSBleGVjCisgICAgICovCisjaWYgSEFWRV9FWEVDVgorICAgIGV4ZWN2KGFyZ3ZyZXN0YXJ0bmFtZSwgYXJndnJlc3RhcnRwKTsKKyAgICBzZXRQZXJyb3JzdGF0dXMoYXJndnJlc3RhcnRuYW1lKTsKKyNlbmRpZgorfQorCitpbnQKK3Jlc3RhcnRfaG9vayhpbnQgYWN0aW9uLAorICAgICAgICAgICAgIHVfY2hhciAqIHZhcl92YWwsCisgICAgICAgICAgICAgdV9jaGFyIHZhcl92YWxfdHlwZSwKKyAgICAgICAgICAgICBzaXplX3QgdmFyX3ZhbF9sZW4sCisgICAgICAgICAgICAgdV9jaGFyICogc3RhdFAsIG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbikKK3sKKworICAgIGxvbmcgICAgICAgICAgICB0bXAgPSAwOworCisgICAgaWYgKHZhcl92YWxfdHlwZSAhPSBBU05fSU5URUdFUikgeworICAgICAgICBzbm1wX2xvZyhMT0dfTk9USUNFLCAiV3JvbmcgdHlwZSAhPSBpbnRcbiIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdUWVBFOworICAgIH0KKyAgICB0bXAgPSAqKChsb25nICopIHZhcl92YWwpOworICAgIGlmICh0bXAgPT0gMSAmJiBhY3Rpb24gPT0gQ09NTUlUKSB7CisjaWZkZWYgU0lHQUxSTQorICAgICAgICBzaWduYWwoU0lHQUxSTSwgcmVzdGFydF9kb2l0KTsKKyNlbmRpZgorICAgICAgICBhbGFybShORVRTTk1QX1JFU1RBUlRTTEVFUCk7CisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmggYi9hZ2VudC9taWJncm91cC91dGlsX2Z1bmNzL3Jlc3RhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Mjc2MGExCi0tLSAvZGV2L251bGwKKysrIGIvYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9yZXN0YXJ0LmgKQEAgLTAsMCArMSwxNSBAQAorI2lmbmRlZiBfTUlCR1JPVVBfVVRJTF9GVU5DU19SRVNUQVJUX0gKKyNkZWZpbmUgX01JQkdST1VQX1VUSUxfRlVOQ1NfUkVTVEFSVF9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworUkVUU0lHVFlQRSAgICAgIHJlc3RhcnRfZG9pdChpbnQpOworV3JpdGVNZXRob2QgICAgIHJlc3RhcnRfaG9vazsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9NSUJHUk9VUF9VVElMX0ZVTkNTX1JFU1RBUlRfSCAqLwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYyBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmMKaW5kZXggMjFiZjY4Mi4uNjhmMzY1NCAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuYworKysgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5jCkBAIC0zNSwxOSArMzUsMjIgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPHVjZC1zbm1wL2Vycm9ybWliLmg+CiAKLSNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAiZXhlY3V0ZS5oIgorI2luY2x1ZGUgInN0cnVjdC5oIgogCiAjZGVmaW5lIHNldFBlcnJvcnN0YXR1cyh4KSBzbm1wX2xvZ19wZXJyb3IoeCkKIAorI2lmZGVmIF9NU0NfVkVSCisjZGVmaW5lIHBvcGVuICBfcG9wZW4KKyNkZWZpbmUgcGNsb3NlIF9wY2xvc2UKKyNlbmRpZgorCisKIGludAogcnVuX3NoZWxsX2NvbW1hbmQoIGNoYXIgKmNvbW1hbmQsIGNoYXIgKmlucHV0LAogICAgICAgICAgICAgICAgICAgIGNoYXIgKm91dHB1dCwgIGludCAqb3V0X2xlbikJLyogT3IgcmVhbGxvYyBzdHlsZSA/ICovCiB7CiAjaWYgSEFWRV9TWVNURU0KLSAgICBjb25zdCBjaGFyICppZm5hbWU7ICAgIC8qIEZpbGVuYW1lIGZvciBpbnB1dCAgcmVkaXJlY3Rpb24gKi8KLSAgICBjb25zdCBjaGFyICpvZm5hbWU7ICAgIC8qIEZpbGVuYW1lIGZvciBvdXRwdXQgcmVkaXJlY3Rpb24gKi8KLSAgICBjaGFyICAgICAgICBzaGVsbGxpbmVbU1RSTUFYXTsgICAvKiBUaGUgZnVsbCBjb21tYW5kIHRvIHJ1biAqLwogICAgIGludCAgICAgICAgIHJlc3VsdDsgICAgLyogYW5kIHRoZSByZXR1cm4gdmFsdWUgb2YgdGhlIGNvbW1hbmQgKi8KIAogICAgIGlmICghY29tbWFuZCkKQEAgLTU2LDI1ICs1OSwzMSBAQAogICAgIERFQlVHTVNHVEwoKCJydW5fc2hlbGxfY29tbWFuZCIsICJydW5uaW5nICVzXG4iLCBjb21tYW5kKSk7CiAgICAgREVCVUdNU0dUTCgoInJ1bjpzaGVsbCIsICJydW5uaW5nICclcydcbiIsIGNvbW1hbmQpKTsKIAorICAgIHJlc3VsdCA9IC0xOworCiAgICAgLyoKLSAgICAgKiBTZXQgdXAgdGhlIGNvbW1hbmQgdG8gcnVuLi4uLgorICAgICAqIFNldCB1cCB0aGUgY29tbWFuZCBhbmQgcnVuIGl0LgogICAgICAqLwogICAgIGlmIChpbnB1dCkgewogICAgICAgICBGSUxFICAgICAgICpmaWxlOwogCi0gICAgICAgIGlmbmFtZSA9IG5ldHNubXBfbWt0ZW1wKCk7Ci0gICAgICAgIGlmKE5VTEwgPT0gaWZuYW1lKQotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICBmaWxlID0gZm9wZW4oaWZuYW1lLCAidyIpOwotICAgICAgICBpZihOVUxMID09IGZpbGUpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsImNvdWxkbid0IG9wZW4gdGVtcG9yYXJ5IGZpbGUgJXNcbiIsIGlmbmFtZSk7Ci0gICAgICAgICAgICB1bmxpbmsoaWZuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotCWZwcmludGYoZmlsZSwgIiVzIiwgaW5wdXQpOwotICAgICAgICBmY2xvc2UoIGZpbGUgKTsKLQogICAgICAgICBpZiAob3V0cHV0KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyICppZm5hbWU7CisgICAgICAgICAgICBjb25zdCBjaGFyICpvZm5hbWU7ICAgIC8qIEZpbGVuYW1lIGZvciBvdXRwdXQgcmVkaXJlY3Rpb24gKi8KKyAgICAgICAgICAgIGNoYXIgICAgICAgIHNoZWxsbGluZVtTVFJNQVhdOyAgIC8qIFRoZSBmdWxsIGNvbW1hbmQgdG8gcnVuICovCisKKyAgICAgICAgICAgIGlmbmFtZSA9IG5ldHNubXBfbWt0ZW1wKCk7CisgICAgICAgICAgICBpZihOVUxMID09IGlmbmFtZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBmaWxlID0gZm9wZW4oaWZuYW1lLCAidyIpOworICAgICAgICAgICAgaWYoTlVMTCA9PSBmaWxlKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGRuJ3Qgb3BlbiB0ZW1wb3JhcnkgZmlsZSAlc1xuIiwgaWZuYW1lKTsKKyAgICAgICAgICAgICAgICB1bmxpbmsoaWZuYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmcHJpbnRmKGZpbGUsICIlcyIsIGlucHV0KTsKKyAgICAgICAgICAgIGZjbG9zZSggZmlsZSApOworCiAgICAgICAgICAgICBvZm5hbWUgPSBuZXRzbm1wX21rdGVtcCgpOwogICAgICAgICAgICAgaWYoTlVMTCA9PSBvZm5hbWUpIHsKICAgICAgICAgICAgICAgICBpZihpZm5hbWUpCkBAIC04Myw0OSArOTIsNDYgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNucHJpbnRmKCBzaGVsbGxpbmUsIHNpemVvZihzaGVsbGxpbmUpLCAiKCVzKSA8IFwiJXNcIiA+IFwiJXNcIiIsCiAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZCwgaWZuYW1lLCBvZm5hbWUgKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IHN5c3RlbShzaGVsbGxpbmUpOworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIG91dHB1dCB3YXMgcmVxdWVzdGVkLCB0aGVuIHJldHJpZXZlICYgcmV0dXJuIGl0LgorICAgICAgICAgICAgICogVGlkeSB1cCwgYW5kIHJldHVybiB0aGUgcmVzdWx0IG9mIHRoZSBjb21tYW5kLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAob3V0X2xlbiAmJiAqb3V0X2xlbiAhPSAwKSB7CisgICAgICAgICAgICAgICAgaW50ICAgICAgICAgZmQ7ICAgICAgICAvKiBGb3IgcHJvY2Vzc2luZyBhbnkgb3V0cHV0ICovCisgICAgICAgICAgICAgICAgaW50ICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgICAgICAgICBmZCA9IG9wZW4ob2ZuYW1lLCBPX1JET05MWSk7CisgICAgICAgICAgICAgICAgaWYoZmQgPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgbGVuICA9IHJlYWQoIGZkLCBvdXRwdXQsICpvdXRfbGVuLTEgKTsKKyAgICAgICAgICAgICAgICAqb3V0X2xlbiA9IGxlbjsKKyAgICAgICAgICAgICAgICBpZiAobGVuID49IDApIG91dHB1dFtsZW5dID0gMDsKKyAgICAgICAgICAgICAgICBlbHNlIG91dHB1dFswXSA9IDA7CisgICAgICAgICAgICAgICAgaWYgKGZkID49IDApIGNsb3NlKGZkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHVubGluayhvZm5hbWUpOworICAgICAgICAgICAgdW5saW5rKGlmbmFtZSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBvZm5hbWUgPSBOVUxMOyAgIC8qIEp1c3QgdG8gc2h1dCB0aGUgY29tcGlsZXIgdXAhICovCi0gICAgICAgICAgICBzbnByaW50Ziggc2hlbGxsaW5lLCBzaXplb2Yoc2hlbGxsaW5lKSwgIiglcykgPCBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQsIGlmbmFtZSApOworICAgICAgICAgICAgZmlsZSA9IHBvcGVuKGNvbW1hbmQsICJ3Iik7CisgICAgICAgICAgICBpZiAoZmlsZSkgeworICAgICAgICAgICAgICAgIGZ3cml0ZShpbnB1dCwgMSwgc3RybGVuKGlucHV0KSwgZmlsZSk7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gcGNsb3NlKGZpbGUpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsKLSAgICAgICAgaWZuYW1lID0gTlVMTDsgICAvKiBKdXN0IHRvIHNodXQgdGhlIGNvbXBpbGVyIHVwISAqLwogICAgICAgICBpZiAob3V0cHV0KSB7Ci0gICAgICAgICAgICBvZm5hbWUgPSBuZXRzbm1wX21rdGVtcCgpOwotICAgICAgICAgICAgaWYoTlVMTCA9PSBvZm5hbWUpCi0gICAgICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICAgICAgc25wcmludGYoIHNoZWxsbGluZSwgc2l6ZW9mKHNoZWxsbGluZSksICIoJXMpID4gXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kLCBvZm5hbWUgKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG9mbmFtZSA9IE5VTEw7ICAgLyogSnVzdCB0byBzaHV0IHRoZSBjb21waWxlciB1cCEgKi8KLSAgICAgICAgICAgIHNucHJpbnRmKCBzaGVsbGxpbmUsIHNpemVvZihzaGVsbGxpbmUpLCAiJXMiLAotICAgICAgICAgICAgICAgICAgICAgIGNvbW1hbmQgKTsKLSAgICAgICAgfQotICAgIH0KKyAgICAgICAgICAgIEZJTEUqIGZpbGU7CiAKLSAgICAvKgotICAgICAqIC4uLiBhbmQgcnVuIGl0Ci0gICAgICovCi0gICAgcmVzdWx0ID0gc3lzdGVtKHNoZWxsbGluZSk7Ci0KLSAgICAvKgotICAgICAqIElmIG91dHB1dCB3YXMgcmVxdWVzdGVkLCB0aGVuIHJldHJpZXZlICYgcmV0dXJuIGl0LgotICAgICAqIFRpZHkgdXAsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZC4KLSAgICAgKi8KLSAgICBpZiAoIG91dHB1dCAmJiBvdXRfbGVuICYmICgqb3V0X2xlbiAhPSAwKSApIHsKLSAgICAgICAgaW50ICAgICAgICAgZmQ7ICAgICAgICAvKiBGb3IgcHJvY2Vzc2luZyBhbnkgb3V0cHV0ICovCi0gICAgICAgIGludCAgICAgICAgIGxlbiA9IDA7Ci0gICAgICAgIGZkID0gb3BlbihvZm5hbWUsIE9fUkRPTkxZKTsKLSAgICAgICAgaWYoZmQgPj0gMCkKLSAgICAgICAgICAgIGxlbiAgPSByZWFkKCBmZCwgb3V0cHV0LCAqb3V0X2xlbi0xICk7Ci0JKm91dF9sZW4gPSBsZW47Ci0JaWYgKGxlbiA+PSAwKSBvdXRwdXRbbGVuXSA9IDA7Ci0JZWxzZSBvdXRwdXRbMF0gPSAwOwotCWlmIChmZCA+PSAwKSBjbG9zZShmZCk7Ci0gICAgICAgIHVubGluayhvZm5hbWUpOwotICAgIH0KLSAgICBpZiAoIGlucHV0ICkgewotICAgICAgICB1bmxpbmsoaWZuYW1lKTsKKyAgICAgICAgICAgIGZpbGUgPSBwb3Blbihjb21tYW5kLCAiciIpOworICAgICAgICAgICAgaWYgKGZpbGUpIHsKKyAgICAgICAgICAgICAgICAqb3V0X2xlbiA9IGZyZWFkKG91dHB1dCwgMSwgKm91dF9sZW4gLSAxLCBmaWxlKTsKKyAgICAgICAgICAgICAgICBpZiAoKm91dF9sZW4gPj0gMCkKKyAgICAgICAgICAgICAgICAgICAgb3V0cHV0WypvdXRfbGVuXSA9IDA7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBvdXRwdXRbMF0gPSAwOworICAgICAgICAgICAgICAgIHJlc3VsdCA9IHBjbG9zZShmaWxlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICByZXN1bHQgPSBzeXN0ZW0oY29tbWFuZCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE2MCw2NyArMTY2LDEyIEBACiAgICAgaWYgKGNwKSB7CiAgICAgICAgIGFyZ3ZbaSsrXSA9IHN0cmR1cCggY3AgKTsKICAgICB9Ci0gICAgYXJndltpXSA9IDA7CisgICAgYXJndltpXSA9IE5VTEw7CiAgICAgKmFyZ2MgPSBpOwogCiAgICAgcmV0dXJuIGFyZ3Y7CiB9CiAKLWNoYXIgKioKLXh4X3Rva2VuaXplX2V4ZWNfY29tbWFuZCggY2hhciAqY29tbWFuZCwgaW50ICphcmdjICkKLXsKLSAgICBjaGFyIGN0bXBbU1RSTUFYXTsKLSAgICBjaGFyICpjcHRyMSwgKmNwdHIyOwotICAgIGNoYXIgKiphcmd2OwotICAgIGludCAgY291bnQsIGk7Ci0KLSAgICBpZiAoIWNvbW1hbmQpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgbWVtc2V0KCBjdG1wLCAwLCBTVFJNQVggKTsKLSAgICAvKgotICAgICAqIE1ha2UgYSBjb3B5IG9mIHRoZSBjb21tYW5kIGludG8gdGhlICdjdG1wJyBidWZmZXIsCi0gICAgICogICAgc3BsaXR0aW5nIGl0IGludG8gc2VwYXJhdGUgdG9rZW5zCi0gICAgICogICAgKGJ1dCBzdGlsbCBhbGwgaW4gdGhlIG9uZSBidWZmZXIpLgotICAgICAqLwotICAgIGNvdW50ID0gMTsKLSAgICBmb3IgKGNwdHIxID0gY29tbWFuZCwgY3B0cjIgPSBjdG1wOwotICAgICAgICAgICAgY3B0cjEgJiYgKmNwdHIxOwotICAgICAgICAgICAgY3B0cjErKywgY3B0cjIrKykgewotICAgICAgICAqY3B0cjIgPSAqY3B0cjE7Ci0JaWYgKGlzc3BhY2UoKmNwdHIxKSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBvZiBhIHRva2VuLCBzbyBpbmNyZWFzZQotICAgICAgICAgICAgICogdGhlIGNvdW50LCBhbmQgbWFyayB0aGlzIGluIHRoZSBjb21tYW5kIGNvcHkuCi0gICAgICAgICAgICAgKiBUaGVuIGdldCByZWFkeSBmb3IgdGhlIG5leHQgd29yZC4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgY291bnQrKzsKLSAgICAgICAgICAgICpjcHRyMiA9IDA7ICAgIC8qIEVuZCBvZiB0b2tlbiAqLwotCSAgICBjcHRyMSA9IHNraXBfd2hpdGUoY3B0cjEpOwotCSAgICBpZiAoIWNwdHIxKQotCSAgICAgICAgYnJlYWs7Ci0JICAgIGNwdHIxLS07CS8qIEJhY2sgdXAgb25lLCByZWFkeSBmb3IgdGhlIG5leHQgbG9vcCAqLwotCX0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE5vdyBzZXQgdXAgdGhlICdhcmd2JyBhcnJheSwKLSAgICAgKiAgIGNvcHlpbmcgdG9rZW5zIG91dCBvZiB0aGUgJ2NwdHInIGJ1ZmZlcgotICAgICAqLwotICAgIGFyZ3YgPSAoY2hhciAqKikgY2FsbG9jKChjb3VudCArIDIpLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgaWYgKGFyZ3YgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgY3B0cjIgPSBjdG1wOwotICAgIGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgIGFyZ3ZbaV0gPSBzdHJkdXAoIGNwdHIyICk7Ci0gICAgICAgIGNwdHIyICArPSBzdHJsZW4oIGNwdHIyICkrMTsKLSAgICB9Ci0gICAgYXJndltjb3VudF0gPSAwOwotICAgICphcmdjICAgICAgID0gY291bnQ7Ci0gICAgICAgIAotICAgIHJldHVybiBhcmd2OwotfQotCiAKIGludAogcnVuX2V4ZWNfY29tbWFuZCggY2hhciAqY29tbWFuZCwgY2hhciAqaW5wdXQsCkBAIC0zNTUsNyArMzA2LDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgY291bnQgPSByZWFkKG9waXBlWzBdLCAmY2FjaGVfcHRyW29mZnNldF0sIGNhY2hlX3NpemUpOwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6cnVuOmV4ZWMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZWFkICVkIGJ5dGVzXG4iLCBjb3VudCkpOworICAgICAgICAgICAgICAgICAgICAgICAgIiAgICByZWFkICVkIGJ5dGVzXG4iLCAoaW50KWNvdW50KSk7CiAgICAgICAgICAgICBpZiAoMCA9PSBjb3VudCkgewogICAgICAgICAgICAgICAgIGludCByYzsKICAgICAgICAgICAgICAgICAvKgpAQCAtMzkwLDcgKzM0MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpydW46ZXhlYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgICAgJWQgbGVmdCBpbiBidWZmZXJcbiIsIGNhY2hlX3NpemUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgICAlZCBsZWZ0IGluIGJ1ZmZlclxuIiwgKGludCljYWNoZV9zaXplKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgZWxzZSBpZiAoKGNvdW50ID09IC0xKSAmJiAoRUFHQUlOICE9IGVycm5vKSkgewpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaCBiL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKaW5kZXggMDVlODI3MC4uM2M5ZTg0YiAxMDA2NDQKLS0tIGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2V4ZWN1dGUuaAorKysgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oCkBAIC0xLDcgKzEsNiBAQAogI2lmbmRlZiBfTUlCR1JPVVBfRVhFQ1VURV9ICiAjZGVmaW5lIF9NSUJHUk9VUF9FWEVDVVRFX0gKIAotY29uZmlnX3JlcXVpcmUodXRpbF9mdW5jcykKIGNvbmZpZ19iZWxvbmdzX2luKGFnZW50X21vZHVsZSkKIAogaW50IHJ1bl9zaGVsbF9jb21tYW5kKGNoYXIgKmNvbW1hbmQsIGNoYXIgKmlucHV0LApkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jIGIvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5jCmluZGV4IDRmNjZkN2UuLjg2MDU5MGYgMTAwNjQ0Ci0tLSBhL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYworKysgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvaXF1ZXJ5LmMKQEAgLTEsMzAgKzEsMzUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAogI2luY2x1ZGUgInV0aWxpdGllcy9pcXVlcnkuaCIKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlxdWVyeV9hbGwsIGxpYm5ldHNubXBtaWJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGlxdWVyeSwgaXF1ZXJ5X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihpcXVlcnlfY29tbXVuaXR5X3Nlc3Npb24sIGlxdWVyeV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoaXF1ZXJ5X3BkdV9zZXNzaW9uLCBpcXVlcnlfYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShxdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZCisKIHZvaWQKIG5ldHNubXBfcGFyc2VfaXF1ZXJ5U2VjTGV2ZWwoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCiB7Ci0gICAgY2hhciBidWZbMTAyNF07CiAgICAgaW50IHNlY0xldmVsOwogCiAgICAgaWYgKChzZWNMZXZlbCA9IHBhcnNlX3NlY0xldmVsX2NvbmYoIHRva2VuLCBsaW5lICkpID49IDAgKSB7CiAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9TRUNMRVZFTCwgc2VjTGV2ZWwpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJVbmtub3duIHNlY3VyaXR5IGxldmVsOiAlcyIsIGxpbmUpOwotICAgICAgICBidWZbIHNpemVvZihidWYpLTEgXSA9IDA7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoYnVmKTsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigiVW5rbm93biBzZWN1cml0eSBsZXZlbDogJXMiLCBsaW5lKTsKICAgICB9CiB9CiAKIHZvaWQKIG5ldHNubXBfcGFyc2VfaXF1ZXJ5VmVyc2lvbihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKIHsKLSAgICBjaGFyIGJ1ZlsxMDI0XTsKLQogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCiAgICAgaWYgKCFzdHJjbXAoIGxpbmUsICIxIiApKQogICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKQEAgLTQxLDkgKzQ2LDcgQEAKICAgICAgICAgbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1ZFUlNJT04sIFNOTVBfVkVSU0lPTl8zKTsKICAgICBlbHNlIHsKLSAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlVua25vd24gdmVyc2lvbjogJXMiLCBsaW5lKTsKLSAgICAgICAgYnVmWyBzaXplb2YoYnVmKS0xIF0gPSAwOwotICAgICAgICBjb25maWdfcGVycm9yKGJ1Zik7CisJbmV0c25tcF9jb25maWdfZXJyb3IoIlVua25vd24gdmVyc2lvbjogJXMiLCBsaW5lKTsKICAgICB9CiB9CiAKQEAgLTYxLDkgKzY0LDYgQEAKICAgICBpZiAoc2VjTmFtZSkKICAgICAgICAgbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKAogICAgICAgICAgICAgIG5ldHNubXBfaXF1ZXJ5X3VzZXJfc2Vzc2lvbihzZWNOYW1lKSk7Ci0gICAgZWxzZQotICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKLSAgICAgICAgICAgICAgICAgImlxdWVyeVNlY05hbWUgaGFzIG5vdCBiZWVuIGNvbmZpZ3VyZWQgLSBpbnRlcm5hbCBxdWVyaWVzIHdpbGwgZmFpbFxuIik7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIApAQCAtODEsOSArODEsOSBAQAogewogICAgIHVfY2hhciBlSURbU05NUF9NQVhCVUZfU01BTExdOwogICAgIHNpemVfdCBlbGVuOwotICAgIG5ldHNubXBfc2Vzc2lvbiAqcyA9IG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbigpOworICAgIG5ldHNubXBfc2Vzc2lvbiAqcyA9IG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbl91bmNoZWNrZWQoKTsKIAotICAgIGlmIChzICYmIHMtPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCApIHsKKyAgICBpZiAoIHMgJiYgcy0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwICkgewogICAgICAgICBlbGVuID0gc25tcHYzX2dldF9lbmdpbmVJRChlSUQsIHNpemVvZihlSUQpKTsKICAgICAgICAgcy0+c2VjdXJpdHlFbmdpbmVJRCA9IG5ldHNubXBfbWVtZHVwKGVJRCwgZWxlbik7CiAgICAgICAgIHMtPnNlY3VyaXR5RW5naW5lSURMZW4gPSBlbGVuOwpAQCAtMTMwLDYgKzEzMCw3IEBACiAgICAgICoKICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUllfUERVX1NFU1NJT04KIG5ldHNubXBfc2Vzc2lvbiAqbmV0c25tcF9pcXVlcnlfcGR1X3Nlc3Npb24obmV0c25tcF9wZHUqIHBkdSkgewogICAgIGlmICghcGR1KQogICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTQxLDEzICsxNDIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbik7CiAgICAgZWxzZQotICAgICAgICByZXR1cm4gbmV0c25tcF9pcXVlcnlfc2Vzc2lvbiggcGR1LT5jb21tdW5pdHksIAorICAgICAgICByZXR1cm4gbmV0c25tcF9pcXVlcnlfc2Vzc2lvbigoY2hhciAqKSBwZHUtPmNvbW11bml0eSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZlcnNpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZlcnNpb24rMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfU0VDX0xFVkVMX05PQVVUSCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUllfUERVX1NFU1NJT04gKi8KIAogbmV0c25tcF9zZXNzaW9uICpuZXRzbm1wX2lxdWVyeV91c2VyX3Nlc3Npb24oY2hhciogc2VjTmFtZSl7CiAgICAgdV9jaGFyIGVJRFtTTk1QX01BWEJVRl9TTUFMTF07CkBAIC0xNTksNiArMTYxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfU0VDX0xFVkVMX0FVVEhOT1BSSVYsIGVJRCwgZWxlbik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUllfQ09NTVVOSVRZX1NFU1NJT04KIG5ldHNubXBfc2Vzc2lvbiAqbmV0c25tcF9pcXVlcnlfY29tbXVuaXR5X3Nlc3Npb24oIGNoYXIqIGNvbW11bml0eSwgaW50IHZlcnNpb24gKSB7IAogICAgIHVfY2hhciBlSURbU05NUF9NQVhCVUZfU01BTExdOwogICAgIHNpemVfdCBlbGVuID0gc25tcHYzX2dldF9lbmdpbmVJRChlSUQsIHNpemVvZihlSUQpKTsKQEAgLTE2Niw2ICsxNjksNyBAQAogICAgIHJldHVybiBuZXRzbm1wX2lxdWVyeV9zZXNzaW9uKCBjb21tdW5pdHksIHZlcnNpb24sIHZlcnNpb24rMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfU0VDX0xFVkVMX05PQVVUSCwgZUlELCBlbGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0lRVUVSWV9DT01NVU5JVFlfU0VTU0lPTiAqLwogCiBuZXRzbm1wX3Nlc3Npb24gKm5ldHNubXBfaXF1ZXJ5X3Nlc3Npb24oY2hhciogc2VjTmFtZSwgICBpbnQgICB2ZXJzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgIHNlY01vZGVsLCAgaW50ICAgc2VjTGV2ZWwsCkBAIC0yMDIsMyArMjA2LDcgQEAKICAgICByZXR1cm4gc3M7CiB9CiAKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfSVFVRVJZICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGlxdWVyeSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9JUVVFUlkgKi8KKwpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvdXRpbGl0aWVzL292ZXJyaWRlLmMgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYwppbmRleCA3YzcwYTAyLi40OGFjMjgxIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYworKysgYi9hZ2VudC9taWJncm91cC91dGlsaXRpZXMvb3ZlcnJpZGUuYwpAQCAtMTUsOCArMTUsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KIAotI2luY2x1ZGUgInV0aWxfZnVuY3MuaCIKLQogdHlwZWRlZiBzdHJ1Y3Qgb3ZlcnJpZGVfZGF0YV9zIHsKICAgICBpbnQgICAgICAgICAgICAgdHlwZTsKICAgICB2b2lkICAgICAgICAgICAqdmFsdWU7CkBAIC0zNCw3ICszMiw3IEBACiAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKIAotICAgIG92ZXJyaWRlX2RhdGEgICpkYXRhID0gaGFuZGxlci0+bXl2b2lkOworICAgIG92ZXJyaWRlX2RhdGEgICpkYXRhID0gKG92ZXJyaWRlX2RhdGEqKWhhbmRsZXItPm15dm9pZDsKICAgICB2b2lkICp0bXBwdHI7CiAKICAgICBpZiAoIWRhdGEpIHsKQEAgLTUyLDYgKzUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgZGF0YS0+dmFsdWUsIGRhdGEtPnZhbHVlX2xlbik7CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGlmIChyZXF1ZXN0cy0+cmVxdWVzdHZiLT50eXBlICE9IGRhdGEtPnR5cGUpCiAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3RzLCBTTk1QX0VSUl9XUk9OR1RZUEUpOwpAQCAtODksNiArODgsNyBAQAogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgICAgICBTTk1QX0ZSRUUoZGF0YS0+c2V0X3NwYWNlKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgZGVmYXVsdDoKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVuc3VwcG9ydGVkIG1vZGUgaW4gb3ZlcnJpZGUgaGFuZGxlclxuIik7CkBAIC0xODMsNyArMTgzLDYgQEAKICAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSIpOwogICAgICAgICByZXR1cm47CiAgICAgfQotCiAgICAgdGhlZGF0YS0+dHlwZSA9IHR5cGU7CiAKICAgICBzd2l0Y2ggKHR5cGUpIHsKQEAgLTIwNiw3ICsyMDUsNyBAQAogICAgICAgICAgICAgICogaGV4IAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICB0aGVkYXRhLT52YWx1ZV9sZW4gPQotICAgICAgICAgICAgICAgIGhleF90b19iaW5hcnkyKGJ1ZiArIDIsIHN0cmxlbihidWYpIC0gMiwKKyAgICAgICAgICAgICAgICBoZXhfdG9fYmluYXJ5MigodV9jaGFyICopKGJ1ZiArIDIpLCBzdHJsZW4oYnVmKSAtIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZ0aGVkYXRhLT52YWx1ZSk7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB0aGVkYXRhLT52YWx1ZSA9IHN0cmR1cChidWYpOwpAQCAtMjQ5LDcgKzI0OCw3IEBACiAgICAgdGhlX3JlZy0+bW9kZXMgPSAocmVhZHdyaXRlKSA/IEhBTkRMRVJfQ0FOX1JXUklURSA6IEhBTkRMRVJfQ0FOX1JPTkxZOwogICAgIHRoZV9yZWctPmhhbmRsZXIgPQogICAgICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyKCJvdmVycmlkZSIsIG92ZXJyaWRlX2hhbmRsZXIpOwotICAgIHRoZV9yZWctPnJvb3RvaWQgPSBuZXRzbm1wX21lbWR1cChvaWRidWYsIG9pZGJ1Zl9sZW4gKiBzaXplb2Yob2lkKSk7CisgICAgdGhlX3JlZy0+cm9vdG9pZCA9IHNubXBfZHVwbGljYXRlX29iamlkKG9pZGJ1Ziwgb2lkYnVmX2xlbik7CiAgICAgdGhlX3JlZy0+cm9vdG9pZF9sZW4gPSBvaWRidWZfbGVuOwogICAgIGlmICghdGhlX3JlZy0+cm9vdG9pZCB8fCAhdGhlX3JlZy0+aGFuZGxlciB8fCAhdGhlX3JlZy0+aGFuZGxlck5hbWUpIHsKICAgICAgICAgaWYgKHRoZV9yZWctPmhhbmRsZXIpCmRpZmYgLS1naXQgYS9hZ2VudC9taWJncm91cC92ZXJzaW9udGFnIGIvYWdlbnQvbWliZ3JvdXAvdmVyc2lvbnRhZwppbmRleCA5YWE3MWE2Li5jMjRjMjU5IDEwMDc1NQotLS0gYS9hZ2VudC9taWJncm91cC92ZXJzaW9udGFnCisrKyBiL2FnZW50L21pYmdyb3VwL3ZlcnNpb250YWcKQEAgLTEsNiArMSw2IEBACiAjIS9iaW4vc2gKIAotRE9JVD0KK0RPSVQ9ZWNobwogCiBpZiBbICQyID0gInRhZyIgLW8gJDIgPSAidGFyIiBdOwogdGhlbgpkaWZmIC0tZ2l0IGEvYWdlbnQvbWliZ3JvdXAvd2luRXh0RExMLmMgYi9hZ2VudC9taWJncm91cC93aW5FeHRETEwuYwppbmRleCBjMDA4NTc2Li5mNDRmODRmIDEwMDY0NAotLS0gYS9hZ2VudC9taWJncm91cC93aW5FeHRETEwuYworKysgYi9hZ2VudC9taWJncm91cC93aW5FeHRETEwuYwpAQCAtODIsNiArODIsNyBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg+CiAKICNpZmRlZiBVU0lOR19XSU5FWFRETExfTU9EVUxFCkBAIC0xMDEsNiArMTAyLDggQEAKICNpbmNsdWRlICJ1dGlsX2Z1bmNzLmgiCiAjaW5jbHVkZSAid2luRXh0RExMLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG9pZF9pc19zdWJ0cmVlKQorCiAKICNkZWZpbmUgTUFYX1ZBTFVFX05BTUUgICAgICAgICAgMTYzODMKICNkZWZpbmUgTVNfQVNOX1VJTlRFR0VSMzIgTVNfQVNOX1VOU0lHTkVEMzIKQEAgLTc1Myw2ICs3NTYsNzkgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIFRyYW5zbGF0ZSBOZXQtU05NUCByZXF1ZXN0IG1vZGUgaW50byBhbiBTbm1wRXh0ZW5zaW9uUXVlcnkoKSBQRFUgdHlwZQorICogb3IgaW50byBhbiBTbm1wRXh0ZW5zaW9uUXVlcnlFeCgpIHJlcXVlc3QgdHlwZS4KKyAqLworc3RhdGljIGludAorZ2V0X3JlcXVlc3RfdHlwZShpbnQgbW9kZSwgaW50IHJlcXVlc3RfdHlwZSwgVUlOVCAqblJlcXVlc3RUeXBlKQoreworICAgIHN3aXRjaCAocmVxdWVzdF90eXBlKSB7CisgICAgY2FzZSAwOgorICAgICAgICAvKiBTbm1wRXh0ZW5zaW9uUXVlcnkoKSBQRFUgdHlwZSAqLworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX1BEVV9HRVQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9QRFVfR0VUTkVYVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9BQ1RJT046CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgorICAgICAgICAgICAgKm5SZXF1ZXN0VHlwZSA9IFNOTVBfUERVX1NFVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIERFQlVHTVNHKCgid2luRXh0RExMIiwgImludGVybmFsIGVycm9yOiBpbnZhbGlkIG1vZGUgJWQuXG4iLCBtb2RlKSk7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydCgwKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgY2FzZSAxOgorICAgICAgICAvKiBTbm1wRXh0ZW5zaW9uUXVlcnlFeCgpIHJlcXVlc3QgdHlwZSAqLworICAgICAgICBzd2l0Y2ggKG1vZGUpIHsKKyAgICAgICAgY2FzZSBNT0RFX0dFVDoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9HRVQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX0dFVE5FWFQ6CisgICAgICAgICAgICAqblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fR0VUX05FWFQ7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMToKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfVEVTVDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUyOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfQUNUSU9OOgorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfVU5ETzoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfVU5ETzsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfQ09NTUlUOworICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgIGNhc2UgTU9ERV9TRVRfRlJFRToKKyAgICAgICAgICAgICpuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfQ0xFQU5VUDsKKyAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdNU0coKCJ3aW5FeHRETEwiLCAiaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgbW9kZSAlZC5cbiIsIG1vZGUpKTsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KDApOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBERUJVR01TRygoIndpbkV4dERMTCIsICJpbnRlcm5hbCBlcnJvcjogaW52YWxpZCBhcmd1bWVudCAlZC5cbiIsCisgICAgICAgICAgICAgICAgICByZXF1ZXN0X3R5cGUpKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoMCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KK30KKwogc3RhdGljIGludAogdmFyX3dpbkV4dERMTChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAogICAgICAgICAgICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLApAQCAtNzYzLDcgKzgzOSw2IEBACiAgICAgd2luZXh0ZGxsICAgICAgKmV4dF9kbGxfaW5mbzsKICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdDsKICAgICBVSU5UICAgICAgICAgICAgblJlcXVlc3RUeXBlOwotICAgIGNvbnN0IGNoYXIgICAgICptb2RlX25hbWU7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwogCiAgICAgbmV0c25tcF9hc3NlcnQoZXh0X2RsbF92aWV3X2luZm8pOwpAQCAtNzgwLDQzICs4NTUsOCBAQAogICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOwogICAgIH0KIAotICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewotICAgIGNhc2UgTU9ERV9HRVQ6Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJHRVQiOwotICAgICAgICBuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9HRVQ7Ci0gICAgICAgIG5ldHNubXBfYXNzZXJ0KCFjb250ZXh0X2luZm9faGVhZCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9HRVRORVhUOgotICAgICAgICBtb2RlX25hbWUgPSAiR0VUTkVYVCI7Ci0gICAgICAgIG5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX0dFVF9ORVhUOwotICAgICAgICBuZXRzbm1wX2Fzc2VydCghY29udGV4dF9pbmZvX2hlYWQpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PREVfU0VUX1JFU0VSVkUxOgotICAgICAgICBtb2RlX25hbWUgPSAiU0VUX1JFU0VSVkUxIjsKLSAgICAgICAgblJlcXVlc3RUeXBlID0gU05NUF9FWFRFTlNJT05fU0VUX1RFU1Q7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJTRVRfUkVTRVJWRTIiOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKLSAgICAgICAgbW9kZV9uYW1lID0gIlNFVF9BQ1RJT04iOwotICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKLSAgICBjYXNlIE1PREVfU0VUX1VORE86Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJTRVRfVU5ETyI7Ci0gICAgICAgIG5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9VTkRPOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKLSAgICAgICAgbW9kZV9uYW1lID0gIlNFVF9DT01NSVQiOwotICAgICAgICBuUmVxdWVzdFR5cGUgPSBTTk1QX0VYVEVOU0lPTl9TRVRfQ09NTUlUOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIE1PREVfU0VUX0ZSRUU6Ci0gICAgICAgIG1vZGVfbmFtZSA9ICJTRVRfRlJFRSI7Ci0gICAgICAgIG5SZXF1ZXN0VHlwZSA9IFNOTVBfRVhURU5TSU9OX1NFVF9DTEVBTlVQOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBERUJVR01TRygoIndpbkV4dERMTCIsCi0gICAgICAgICAgICAgICAgICAiaW50ZXJuYWwgZXJyb3I6IGludmFsaWQgbW9kZSAlZC5cbiIsIHJlcWluZm8tPm1vZGUpKTsKLSAgICAgICAgbmV0c25tcF9hc3NlcnQoMCk7CisgICAgaWYgKCFnZXRfcmVxdWVzdF90eXBlKHJlcWluZm8tPm1vZGUsICEhZXh0X2RsbF9pbmZvLT5wZlNubXBFeHRlbnNpb25RdWVyeUV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAmblJlcXVlc3RUeXBlKSkgewogICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2FnZW50L29iamVjdF9tb25pdG9yLmMgYi9hZ2VudC9vYmplY3RfbW9uaXRvci5jCmluZGV4IGM4NDkzZTQuLjJhYjhjOWIgMTAwNjQ0Ci0tLSBhL2FnZW50L29iamVjdF9tb25pdG9yLmMKKysrIGIvYWdlbnQvb2JqZWN0X21vbml0b3IuYwpAQCAtMjUsNyArMjUsNyBAQAogCiAjaWYgISBkZWZpbmVkIFRSVUUKICMgIGRlZmluZSBUUlVFIDEKLSNlbGlmIFRSVUUgIT0gMQorI2Vsc2lmIFRSVUUgIT0gMQogZXJyb3IgIlRSVUUgIT0gMSIKICNlbmRpZgogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCmRpZmYgLS1naXQgYS9hZ2VudC9zbm1wX2FnZW50LmMgYi9hZ2VudC9zbm1wX2FnZW50LmMKaW5kZXggNWFhNTU1Mi4uYjk2ZDY1MCAxMDA2NDQKLS0tIGEvYWdlbnQvc25tcF9hZ2VudC5jCisrKyBiL2FnZW50L3NubXBfYWdlbnQuYwpAQCAtNDQsNiArNDQsNyBAQAogICogQHsKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZmRlZiBIQVZFX0xJTUlUU19ICkBAIC01OSwxMSArNjAsNyBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03OSw5ICs3Niw2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaW5jbHVkZSA8ZXJybm8uaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjZGVmaW5lIFNOTVBfTkVFRF9SRVFVRVNUX0xJU1QKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgpAQCAtOTksOCArOTMsNiBAQAogI2VuZGlmCiAKICNpbmNsdWRlICJzbm1wZC5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL3N0cnVjdC5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxfZnVuY3MuaCIKICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CiAKQEAgLTExNiw2ICsxMDgsODcgQEAKICNpbmNsdWRlICJzbXV4L3NtdXguaCIKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9hZ2VudCwgbGlibmV0c25tcGFnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X2RlYnVnZ2luZ191dGlsaXRpZXMsIGxpYm5ldHNubXBhZ2VudCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFsbG9jYXRlX2dsb2JhbGNhY2hlaWQsIHNubXBfYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZnJlZV9hZ2VudF9zbm1wX3Nlc3Npb25fYnlfc2Vzc2lvbiwgc25tcF9hZ2VudCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IsIHNubXBfYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfcmVxdWVzdHNfZXJyb3IsIHNubXBfYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVxdWVzdF9zZXRfZXJyb3JfaWR4LCBzbm1wX2FnZW50KQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNldF9hZ2VudF91cHRpbWUsIHNubXBfYWdlbnQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MsIHNubXBfYWdlbnQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkdW1wX3Nlc3NfbGlzdCwgYWdlbnRfZGVidWdnaW5nX3V0aWxpdGllcykKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFnZW50X3JlbW92ZV9saXN0X2RhdGEsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNldF9hbGxfcmVxdWVzdHNfZXJyb3IsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGFkZHJjYWNoZV9hZ2UsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRlbGV0ZV9zdWJ0cmVlX2NhY2hlLCBuZXRzbm1wX3VudXNlZCkKKworCitORVRTTk1QX0lOTElORSB2b2lkCituZXRzbm1wX2FnZW50X2FkZF9saXN0X2RhdGEobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSkKK3sKKyAgICBpZiAoYXJpKSB7CisJaWYgKGFyaS0+YWdlbnRfZGF0YSkgeworICAgICAgICAgICAgbmV0c25tcF9hZGRfbGlzdF9kYXRhKCZhcmktPmFnZW50X2RhdGEsIG5vZGUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgYXJpLT5hZ2VudF9kYXRhID0gbm9kZTsKKwl9CisgICAgfQorfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRfUkVNT1ZFX0xJU1RfREFUQQorTkVUU05NUF9JTkxJTkUgaW50CituZXRzbm1wX2FnZW50X3JlbW92ZV9saXN0X2RhdGEobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogbmFtZSkKK3sKKyAgICBpZiAoKE5VTEwgPT0gYXJpKSB8fCAoTlVMTCA9PSBhcmktPmFnZW50X2RhdGEpKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUoJmFyaS0+YWdlbnRfZGF0YSwgbmFtZSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9BR0VOVF9SRU1PVkVfTElTVF9EQVRBICovCisKK05FVFNOTVBfSU5MSU5FIHZvaWQgICAgKgorbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBpZiAoYXJpKSB7CisgICAgICAgIHJldHVybiBuZXRzbm1wX2dldF9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhLCBuYW1lKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpKQoreworICAgIGlmIChhcmkpIHsKKyAgICAgICAgbmV0c25tcF9mcmVlX2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEpOworICAgIH0KK30KKworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9mcmVlX2FnZW50X2RhdGFfc2V0cyhuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpKQoreworICAgIGlmIChhcmkpIHsKKyAgICAgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhKTsKKyAgICB9Cit9CisKK05FVFNOTVBfSU5MSU5FIHZvaWQKK25ldHNubXBfZnJlZV9hZ2VudF9yZXF1ZXN0X2luZm8obmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSkKK3sKKyAgICBpZiAoYXJpKSB7CisgICAgICAgIGlmIChhcmktPmFnZW50X2RhdGEpIHsKKyAgICAgICAgICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSk7CisJfQorICAgICAgICBTTk1QX0ZSRUUoYXJpKTsKKyAgICB9Cit9CisKIG9pZCAgICAgIHZlcnNpb25fc3lzb2lkW10gPSB7IE5FVFNOTVBfU1lTVEVNX01JQiB9OwogaW50ICAgICAgdmVyc2lvbl9zeXNvaWRfbGVuID0gT0lEX0xFTkdUSCh2ZXJzaW9uX3N5c29pZCk7CiAKQEAgLTEzMCw3ICsyMDMsNyBAQAogc3RydWN0IGFkZHJDYWNoZSB7CiAgICAgY2hhciAgICAgICAgICAgKmFkZHI7CiAgICAgaW50ICAgICAgICAgICAgc3RhdHVzOwotICAgIHN0cnVjdCB0aW1ldmFsIGxhc3RIaXQ7CisgICAgc3RydWN0IHRpbWV2YWwgbGFzdEhpdE07CiB9OwogCiBzdGF0aWMgc3RydWN0IGFkZHJDYWNoZSBhZGRyQ2FjaGVbU05NUF9BRERSQ0FDSEVfU0laRV07CkBAIC0xNzYsMTEgKzI0OSwxMyBAQAogCiBpbnQgICAgICBuZXRzbm1wX3J1bm5pbmcgPSAxOwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUxMT0NBVEVfR0xPQkFMQ0FDSEVJRAogaW50CiBuZXRzbm1wX2FsbG9jYXRlX2dsb2JhbGNhY2hlaWQodm9pZCkKIHsKICAgICByZXR1cm4gKytjdXJyZW50X2dsb2JhbGlkOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUxMT0NBVEVfR0xPQkFMQ0FDSEVJRCAqLwogCiBpbnQKIG5ldHNubXBfZ2V0X2xvY2FsX2NhY2hpZChuZXRzbm1wX2NhY2hlbWFwICpjYWNoZV9zdG9yZSwgaW50IGdsb2JhbGlkKQpAQCAtMjAwLDE1ICsyNzUsMTcgQEAKICAgICBuZXRzbm1wX2NhY2hlbWFwICp0bXBwOwogCiAgICAgdG1wcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9jYWNoZW1hcCk7Ci0gICAgaWYgKCpjYWNoZV9zdG9yZSkgewotICAgICAgICB0bXBwLT5uZXh0ID0gKmNhY2hlX3N0b3JlOwotICAgICAgICAqY2FjaGVfc3RvcmUgPSB0bXBwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgICpjYWNoZV9zdG9yZSA9IHRtcHA7Ci0gICAgfQorICAgIGlmICh0bXBwICE9IE5VTEwpIHsKKyAgICAgICAgaWYgKCpjYWNoZV9zdG9yZSkgeworICAgICAgICAgICAgdG1wcC0+bmV4dCA9ICpjYWNoZV9zdG9yZTsKKyAgICAgICAgICAgICpjYWNoZV9zdG9yZSA9IHRtcHA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqY2FjaGVfc3RvcmUgPSB0bXBwOworICAgICAgICB9CiAKLSAgICB0bXBwLT5nbG9iYWxpZCA9IGdsb2JhbGlkOwotICAgIHRtcHAtPmNhY2hlaWQgPSBsb2NhbGlkOworICAgICAgICB0bXBwLT5nbG9iYWxpZCA9IGdsb2JhbGlkOworICAgICAgICB0bXBwLT5jYWNoZWlkID0gbG9jYWxpZDsKKyAgICB9CiAgICAgcmV0dXJuIHRtcHA7CiB9CiAKQEAgLTMyMiw3ICszOTksNyBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogSSBkb24ndCB0aGluayB0aGlzIGNhc2Ugc2hvdWxkIGV2ZXIgaGFwcGVuLiBQbGVhc2UgZW1haWwKICAgICAgICAgICAgICAgICAgKiB0aGUgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCBpZiB5b3UgaGF2ZQotICAgICAgICAgICAgICAgICAqIGEgdGVzdCBjYXNlIHRoYXQgaGl0cyB0aGlzIGFzc2VydC4gLS0gcnN0b3J5CisgICAgICAgICAgICAgICAgICogYSB0ZXN0IGNhc2UgdGhhdCBoaXRzIHRoaXMgY29uZGl0aW9uLiAtLSByc3RvcnkKICAgICAgICAgICAgICAgICAgKi8KIAkJaW50IGk7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCA9PSBhc3AtPnJlcXVlc3RzKTsgLyogc2VlIG5vdGUgYWJvdmUgKi8KQEAgLTM0NSw3ICs0MjIsNyBAQAogCSAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogd2hlbiB3b3VsZCB3ZSBub3QgaGF2ZSBzYXZlZCB2YXJpYWJsZXM/IHNvbWVvbmUKLSAgICAgICAgICAgICAgICAgKiBsZXQgbWUga25vdyBpZiB0aGV5IGhpdCB0aGlzIGFzc2VydC4gLS0gcnN0b3J5CisgICAgICAgICAgICAgICAgICogbGV0IG1lIGtub3cgaWYgdGhleSBoaXQgdGhpcyBjb25kaXRpb24uIC0tIHJzdG9yeQogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gcHRyLT5zYXZlZF92YXJzKTsKICAgICAgICAgICAgIH0KQEAgLTU0MSwxNSArNjE4LDcgQEAKICAgICB9CiB9CiAKLQotaW50Ci1nZXROZXh0U2Vzc0lEKCkKLXsKLSAgICBzdGF0aWMgaW50ICAgICAgU2Vzc2lvbklEID0gMDsKLQotICAgIHJldHVybiArK1Nlc3Npb25JRDsKLX0KLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FHRU5UX0NIRUNLX0FORF9QUk9DRVNTCiAvKioKICAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGZvciBwYWNrZXRzIGFycml2aW5nIG9uIHRoZSBTTk1QIHBvcnQgYW5kCiAgKiBwcm9jZXNzZXMgdGhlbShzbm1wX3JlYWQpIGlmIHNvbWUgYXJlIGZvdW5kLCB1c2luZyB0aGUgc2VsZWN0KCkuIElmIGJsb2NrCkBAIC01OTYsNyArNjY1LDcgQEAKICAgICAgICAgdGltZXJjbGVhcih0dnApOwogICAgIH0KIAotICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCAwLCAwLCB0dnApOworICAgIGNvdW50ID0gc2VsZWN0KG51bWZkcywgJmZkc2V0LCBOVUxMLCBOVUxMLCB0dnApOwogCiAgICAgaWYgKGNvdW50ID4gMCkgewogICAgICAgICAvKgpAQCAtNjE5LDYgKzY4OCwxMSBAQAogICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmRpZiAtLSBjb3VudD4wICovCiAKICAgICAvKgorICAgICAqIHNlZSBpZiBwZXJzaXN0ZW50IHN0b3JlIG5lZWRzIHRvIGJlIHNhdmVkCisgICAgICovCisgICAgc25tcF9zdG9yZV9pZl9uZWVkZWQoKTsKKworICAgIC8qCiAgICAgICogUnVuIHJlcXVlc3RlZCBhbGFybXMuICAKICAgICAgKi8KICAgICBydW5fYWxhcm1zKCk7CkBAIC02MjcsNyArNzAxLDcgQEAKIAogICAgIHJldHVybiBjb3VudDsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUdFTlRfQ0hFQ0tfQU5EX1BST0NFU1MgKi8KIAogLyoKICAqIFNldCB1cCB0aGUgYWRkcmVzcyBjYWNoZS4gIApAQCAtNjgzLDcgKzc1Nyw3IEBACiAgICAgLyoKICAgICAgKiBGaXJzdCBnZXQgdGhlIGN1cnJlbnQgYW5kIG9sZGVzdCBhbGxvd2FibGUgdGltZXN0YW1wcwogICAgICAqLwotICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lKikgTlVMTCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3cpOwogICAgIGFnZWQudHZfc2VjID0gbm93LnR2X3NlYyAtIFNOTVBfQUREUkNBQ0hFX01BWEFHRTsKICAgICBhZ2VkLnR2X3VzZWMgPSBub3cudHZfdXNlYzsKIApAQCAtNzAzLDggKzc3Nyw4IEBACiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBmb3VuZCBhIG1hdGNoCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgYWRkckNhY2hlW2ldLmxhc3RIaXQgPSBub3c7Ci0gICAgICAgICAgICAgICAgaWYgKHRpbWVyY21wKCZhZGRyQ2FjaGVbaV0ubGFzdEhpdCwgJmFnZWQsIDwpKQorICAgICAgICAgICAgICAgIGFkZHJDYWNoZVtpXS5sYXN0SGl0TSA9IG5vdzsKKyAgICAgICAgICAgICAgICBpZiAodGltZXJjbXAoJmFkZHJDYWNoZVtpXS5sYXN0SGl0TSwgJmFnZWQsIDwpKQogCQkgICAgcmMgPSAxOyAvKiBzaG91bGQgaGF2ZSBleHBpcmVkLCBzbyBpcyBuZXcgKi8KIAkJZWxzZQogCQkgICAgcmMgPSAwOyAvKiBub3QgZXhwaXJlZCwgc28gaXMgZXhpc3RpbmcgZW50cnkgKi8KQEAgLTcxNCw3ICs3ODgsNyBAQAogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogVXNlZCwgYnV0IG5vdCB0aGlzIGFkZHJlc3MuIGNoZWNrIGlmIGl0J3Mgc3RhbGUuCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaWYgKHRpbWVyY21wKCZhZGRyQ2FjaGVbaV0ubGFzdEhpdCwgJmFnZWQsIDwpKSB7CisgICAgICAgICAgICAgICAgaWYgKHRpbWVyY21wKCZhZGRyQ2FjaGVbaV0ubGFzdEhpdE0sICZhZ2VkLCA8KSkgewogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgKiBTdGFsZSwgcmV1c2UKICAgICAgICAgICAgICAgICAgICAgICovCkBAIC03MzIsOCArODA2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIGlmIChvbGRlc3QgPCAwKQogICAgICAgICAgICAgICAgICAgICAgICAgb2xkZXN0ID0gaTsKLSAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAodGltZXJjbXAoJmFkZHJDYWNoZVtpXS5sYXN0SGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYWRkckNhY2hlW29sZGVzdF0ubGFzdEhpdCwgPCkpCisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRpbWVyY21wKCZhZGRyQ2FjaGVbaV0ubGFzdEhpdE0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRyQ2FjaGVbb2xkZXN0XS5sYXN0SGl0TSwgPCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBvbGRlc3QgPSBpOwogICAgICAgICAgICAgICAgIH0gLyogZnJlc2ggKi8KICAgICAgICAgICAgIH0gLyogdXNlZCwgbm8gbWF0Y2ggKi8KQEAgLTc1MCw3ICs4MjQsNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBhZGRyQ2FjaGVbdW51c2VkXS5hZGRyID0gc3RyZHVwKGFkZHIpOwogICAgICAgICAgICAgYWRkckNhY2hlW3VudXNlZF0uc3RhdHVzID0gU05NUF9BRERSQ0FDSEVfVVNFRDsKLSAgICAgICAgICAgIGFkZHJDYWNoZVt1bnVzZWRdLmxhc3RIaXQgPSBub3c7CisgICAgICAgICAgICBhZGRyQ2FjaGVbdW51c2VkXS5sYXN0SGl0TSA9IG5vdzsKICAgICAgICAgfQogICAgICAgICBlbHNlIHsgLyogT3RoZXJ3aXNlLCByZXBsYWNlIG9sZGVzdCBlbnRyeSAqLwogICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKQEAgLTc2MCw3ICs4MzQsNyBAQAogICAgICAgICAgICAgCiAgICAgICAgICAgICBmcmVlKGFkZHJDYWNoZVtvbGRlc3RdLmFkZHIpOwogICAgICAgICAgICAgYWRkckNhY2hlW29sZGVzdF0uYWRkciA9IHN0cmR1cChhZGRyKTsKLSAgICAgICAgICAgIGFkZHJDYWNoZVtvbGRlc3RdLmxhc3RIaXQgPSBub3c7CisgICAgICAgICAgICBhZGRyQ2FjaGVbb2xkZXN0XS5sYXN0SGl0TSA9IG5vdzsKICAgICAgICAgfQogICAgICAgICByYyA9IDE7CiAgICAgfQpAQCAtNzc4LDExICs4NTIsMTMgQEAKICAqCiAgKiBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eTsgbm90IHVzZWQgYW55d2hlcmUKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FERFJDQUNIRV9BR0UKIHZvaWQKIG5ldHNubXBfYWRkcmNhY2hlX2FnZSh2b2lkKQogewogICAgICh2b2lkKW5ldHNubXBfYWRkcmNhY2hlX2FkZChOVUxMKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FERFJDQUNIRV9BR0UgKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIG5ldHNubXBfYWdlbnRfY2hlY2tfcGFja2V0CkBAIC05MTMsOSArOTg5LDExIEBACiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgUkVTUE9OU0UgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19TRVQ6CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBTRVQgbWVzc2FnZVxuIik7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX1RSQVA6CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBUUkFQIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtOTMzLDYgKzEwMTEsNyBAQAogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgUkVQT1JUIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTE6CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBJTlRFUk5BTCBSRVNFUlZFMSBtZXNzYWdlXG4iKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTk1Niw2ICsxMDM1LDcgQEAKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX1VORE86CiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiICBJTlRFUk5BTCBVTkRPIG1lc3NhZ2VcbiIpOwogICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIiAgVU5LTk9XTiBtZXNzYWdlLCB0eXBlPSUwMlhcbiIsCkBAIC0xMDQ3LDYgKzExMjcsMjcgQEAKIAkJCQkgIE5FVFNOTVBfRFNfQUdFTlRfRkxBR1MpOwogICAgIHMtPmlzQXV0aG9yaXRhdGl2ZSA9IFNOTVBfU0VTU19BVVRIT1JJVEFUSVZFOwogCisgICAgLyogT3B0aW9uYWwgc3VwcGxpbWVudGFsIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZAorICAgICAgIGZpbmFsIGNhbGwgdG8gYWN0dWFsbHkgb3BlbiB0aGUgdHJhbnNwb3J0ICovCisgICAgaWYgKG5ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0KHMtPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLCB0KQorICAgICAgICAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgU05NUF9GUkVFKHMpOworICAgICAgICBTTk1QX0ZSRUUobik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKworICAgIGlmICh0LT5mX29wZW4pCisgICAgICAgIHQgPSB0LT5mX29wZW4odCk7CisKKyAgICBpZiAoTlVMTCA9PSB0KSB7CisgICAgICAgIFNOTVBfRlJFRShzKTsKKyAgICAgICAgU05NUF9GUkVFKG4pOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19PUEVORUQ7CisKICAgICBzcCA9IHNubXBfYWRkKHMsIHQsIG5ldHNubXBfYWdlbnRfY2hlY2tfcGFja2V0LAogICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9jaGVja19wYXJzZSk7CiAgICAgaWYgKHNwID09IE5VTEwpIHsKQEAgLTExODMsNiArMTI4NCw3IEBACiAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qICBObyBlcnJvciBpZiAhIE1BU1RFUl9BR0VOVCAgKi8KICAgICB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAogICAgIC8qCiAgICAgICogSGF2ZSBzcGVjaWZpYyBhZ2VudCBwb3J0cyBiZWVuIHNwZWNpZmllZD8gIAogICAgICAqLwpAQCAtMTI1MSw2ICsxMzUzLDggQEAKIAkJCSJOU0FQXG4iLCBjcHRyKSk7CiAgICAgICAgIH0KICAgICB9IHdoaWxlKHN0ICYmICpzdCAhPSAnXDAnKTsKKyAgICBTTk1QX0ZSRUUoYnVmKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCiAKICNpZmRlZiBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIApAQCAtMTI5MSw3ICsxMzk1LDcgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCJhZ2VudF9zZXNpb24gJTA4cCBjcmVhdGVkXG4iLCBhc3ApKTsKKyAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsImFnZW50X3Nlc2lvbiAlOHAgY3JlYXRlZFxuIiwgYXNwKSk7CiAgICAgYXNwLT5zZXNzaW9uID0gc2Vzc2lvbjsKICAgICBhc3AtPnBkdSA9IHNubXBfY2xvbmVfcGR1KHBkdSk7CiAgICAgYXNwLT5vcmlnX3BkdSA9IHNubXBfY2xvbmVfcGR1KHBkdSk7CkBAIC0xMzE3LDcgKzE0MjEsNyBAQAogICAgIGlmICghYXNwKQogICAgICAgICByZXR1cm47CiAKLSAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsImFnZW50X3Nlc3Npb24gJTA4cCByZWxlYXNlZFxuIiwgYXNwKSk7CisgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCJhZ2VudF9zZXNzaW9uICU4cCByZWxlYXNlZFxuIiwgYXNwKSk7CiAKICAgICBuZXRzbm1wX3JlbW92ZV9mcm9tX2RlbGVnYXRlZChhc3ApOwogICAgIApAQCAtMTMyOSwxMiArMTQzMyw4IEBACiAgICAgICAgIHNubXBfZnJlZV9wZHUoYXNwLT5wZHUpOwogICAgIGlmIChhc3AtPnJlcWluZm8pCiAgICAgICAgIG5ldHNubXBfZnJlZV9hZ2VudF9yZXF1ZXN0X2luZm8oYXNwLT5yZXFpbmZvKTsKLSAgICBpZiAoYXNwLT50cmVlY2FjaGUpIHsKLSAgICAgICAgU05NUF9GUkVFKGFzcC0+dHJlZWNhY2hlKTsKLSAgICB9Ci0gICAgaWYgKGFzcC0+YnVsa2NhY2hlKSB7Ci0gICAgICAgIFNOTVBfRlJFRShhc3AtPmJ1bGtjYWNoZSk7Ci0gICAgfQorICAgIFNOTVBfRlJFRShhc3AtPnRyZWVjYWNoZSk7CisgICAgU05NUF9GUkVFKGFzcC0+YnVsa2NhY2hlKTsKICAgICBpZiAoYXNwLT5yZXF1ZXN0cykgewogICAgICAgICBpbnQgICAgICAgICAgICAgaTsKICAgICAgICAgZm9yIChpID0gMDsgaSA8IGFzcC0+dmJjb3VudDsgaSsrKSB7CkBAIC0xMzg5LDcgKzE0ODksNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBhc3AtPm5leHQgPSBhZ2VudF9kZWxlZ2F0ZWRfbGlzdDsKICAgICAgICAgICAgIGFnZW50X2RlbGVnYXRlZF9saXN0ID0gYXNwOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiZGVsZWdhdGUgc2Vzc2lvbiA9PSAlMDhwXG4iLCBhc3ApKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgImRlbGVnYXRlIHNlc3Npb24gPT0gJThwXG4iLCBhc3ApKTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gMTsKICAgICB9CkBAIC0xNDE2LDcgKzE1MTYsNyBAQAogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZ2VudF9kZWxlZ2F0ZWRfbGlzdCA9IGFzcC0+bmV4dDsKIAotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJyZW1vdmUgZGVsZWdhdGVkIHNlc3Npb24gPT0gJTA4cFxuIiwgYXNwKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInJlbW92ZSBkZWxlZ2F0ZWQgc2Vzc2lvbiA9PSAlOHBcbiIsIGFzcCkpOwogCiAgICAgICAgIHJldHVybiAxOwogICAgIH0KQEAgLTE0NjMsNyArMTU2Myw3IEBACiAgICAgICovCiAgICAgaWYoY291bnQpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAicmVtb3ZlZCAlZCBkZWxlZ2F0ZWQgcmVxdWVzdChzKSBmb3Igc2Vzc2lvbiAiCi0gICAgICAgICAgICAgICAgICAgICIlMDhwXG4iLCBjb3VudCwgc2VzcykpOworICAgICAgICAgICAgICAgICAgICAiJThwXG4iLCBjb3VudCwgc2VzcykpOwogICAgICAgICBuZXRzbm1wX2NoZWNrX291dHN0YW5kaW5nX2FnZW50X3JlcXVlc3RzKCk7CiAgICAgfQogICAgIApAQCAtMTUxOSwxNSArMTYxOSwxMiBAQAogaW50CiBuZXRzbm1wX3dyYXBfdXBfcmVxdWVzdChuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcCwgaW50IHN0YXR1cykKIHsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcl9wdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGk7Ci0KICAgICAvKgogICAgICAqIGlmIHRoaXMgcmVxdWVzdCB3YXMgYSBzZXQsIGNsZWFyIHRoZSBnbG9iYWwgbm93IHRoYXQgd2UgYXJlCiAgICAgICogZG9uZS4KICAgICAgKi8KICAgICBpZiAoYXNwID09IG5ldHNubXBfcHJvY2Vzc2luZ19zZXQpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiU0VUIHJlcXVlc3QgY29tcGxldGUsIGFzcCA9ICUwOHBcbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlNFVCByZXF1ZXN0IGNvbXBsZXRlLCBhc3AgPSAlOHBcbiIsCiAgICAgICAgICAgICAgICAgICAgIGFzcCkpOwogICAgICAgICBuZXRzbm1wX3Byb2Nlc3Npbmdfc2V0ID0gTlVMTDsKICAgICB9CkBAIC0xNTQxLDYgKzE2MzgsNyBAQAogICAgICAgICAgICAgYXNwLT5zdGF0dXMgPSBzdGF0dXM7CiAKICAgICAgICAgc3dpdGNoIChhc3AtPnBkdS0+Y29tbWFuZCkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX0JFR0lOOgogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTE6CiAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMjoKQEAgLTE1NTAsNiArMTY0OCw3IEBACiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgc2F2ZV9zZXRfY2FjaGUoYXNwKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgogICAgICAgICAgICAgICAgIF9maXhfZW5kb2ZtaWJ2aWV3KGFzcCk7CkBAIC0xNTY4LDYgKzE2NjcsNyBAQAogICAgICAgICAgKiB2MSBxdWVyeS4gIFNlZSBSRkMyNTc2IC0gc2VjdGlvbiA0LjMKICAgICAgICAgICovCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmICgoYXNwLT5wZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfU0VUKSAmJgogICAgICAgICAgICAgKGFzcC0+cGR1LT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xKSkgewogICAgICAgICAgICAgc3dpdGNoIChhc3AtPnN0YXR1cykgewpAQCAtMTYwMiw4ICsxNzAyLDEwIEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoKGFzcC0+cGR1LT5jb21tYW5kICE9IFNOTVBfTVNHX1NFVCkgJiYKICAgICAgICAgICAgIChhc3AtPnBkdS0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMSkpIHsKLSAgICAgICAgICAgIGZvciAodmFyX3B0ciA9IGFzcC0+cGR1LT52YXJpYWJsZXMsIGkgPSAxOwotICAgICAgICAgICAgICAgICB2YXJfcHRyICE9IE5VTEw7IHZhcl9wdHIgPSB2YXJfcHRyLT5uZXh0X3ZhcmlhYmxlLCBpKyspIHsKKyAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyX3B0ciA9IGFzcC0+cGR1LT52YXJpYWJsZXM7CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgIGkgPSAxOworCisgICAgICAgICAgICB3aGlsZSAodmFyX3B0ciAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgc3dpdGNoICh2YXJfcHRyLT50eXBlKSB7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU05NUF9OT1NVQ0hPQkpFQ1Q6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU05NUF9OT1NVQ0hJTlNUQU5DRToKQEAgLTE2MTQsOCArMTcxNiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT5pbmRleCA9IGk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgdmFyX3B0ciA9IHZhcl9wdHItPm5leHRfdmFyaWFibGU7CisgICAgICAgICAgICAgICAgKytpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZW5kaWYgLyogc25tcHYxIHN1cHBvcnQgKi8KICAgICB9IC8qKiBpZiBhc3AtPnBkdSAqLwogCkBAIC0xNjYxLDEwICsxNzY2LDE2IEBACiAgICAgfQogCiAgICAgaWYgKChzdGF0dXMgPT0gU05NUF9FUlJfTk9FUlJPUikgJiYgKGFzcC0+cGR1KSkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KChhc3AtPnBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19TRVQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVRfU05NUElOVE9UQUxTRVRWQVJTIDoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUX1NOTVBJTlRPVEFMUkVRVkFSUyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudF92YXJiaW5kcyhhc3AtPnBkdS0+dmFyaWFibGVzKSk7CisjZWxzZSAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KFNUQVRfU05NUElOVE9UQUxSRVFWQVJTLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRfdmFyYmluZHMoYXNwLT5wZHUtPnZhcmlhYmxlcykpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCiAgICAgfSBlbHNlIHsKICAgICAgICAgLyoKICAgICAgICAgICogVXNlIGEgY29weSBvZiB0aGUgb3JpZ2luYWwgcmVxdWVzdApAQCAtMTcwOSw2ICsxODIwLDcgQEAKICAgICByZXR1cm4gMTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RVTVBfU0VTU19MSVNUCiB2b2lkCiBkdW1wX3Nlc3NfbGlzdCh2b2lkKQogewpAQCAtMTcxNiwxNyArMTgyOCwxOCBAQAogCiAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiRFVNUCBhZ2VudF9zZXNzX2xpc3QgLT4gIikpOwogICAgIGZvciAoYSA9IGFnZW50X3Nlc3Npb25fbGlzdDsgYSAhPSBOVUxMOyBhID0gYS0+bmV4dCkgewotICAgICAgICBERUJVR01TRygoInNubXBfYWdlbnQiLCAiJTA4cFtzZXNzaW9uICUwOHBdIC0+ICIsIGEsIGEtPnNlc3Npb24pKTsKKyAgICAgICAgREVCVUdNU0coKCJzbm1wX2FnZW50IiwgIiU4cFtzZXNzaW9uICU4cF0gLT4gIiwgYSwgYS0+c2Vzc2lvbikpOwogICAgIH0KICAgICBERUJVR01TRygoInNubXBfYWdlbnQiLCAiW05JTF1cbiIpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RVTVBfU0VTU19MSVNUICovCiAKIHZvaWQKIG5ldHNubXBfcmVtb3ZlX2FuZF9mcmVlX2FnZW50X3NubXBfc2Vzc2lvbihuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcCkKIHsKICAgICBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmEsICoqcHJldk5leHQgPSAmYWdlbnRfc2Vzc2lvbl9saXN0OwogCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiUkVNT1ZFIHNlc3Npb24gPT0gJTA4cFxuIiwgYXNwKSk7CisgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiUkVNT1ZFIHNlc3Npb24gPT0gJThwXG4iLCBhc3ApKTsKIAogICAgIGZvciAoYSA9IGFnZW50X3Nlc3Npb25fbGlzdDsgYSAhPSBOVUxMOyBhID0gKnByZXZOZXh0KSB7CiAgICAgICAgIGlmIChhID09IGFzcCkgewpAQCAtMTc0OCw2ICsxODYxLDcgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GUkVFX0FHRU5UX1NOTVBfU0VTU0lPTl9CWV9TRVNTSU9OCiB2b2lkCiBuZXRzbm1wX2ZyZWVfYWdlbnRfc25tcF9zZXNzaW9uX2J5X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2VzcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqZnJlZV9yZXF1ZXN0KQpAQCAtMTc1NSw3ICsxODY5LDcgQEAKIHsKICAgICBuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmEsICpuZXh0LCAqKnByZXZOZXh0ID0gJmFnZW50X3Nlc3Npb25fbGlzdDsKIAotICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgIlJFTU9WRSBzZXNzaW9uID09ICUwOHBcbiIsIHNlc3MpKTsKKyAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJSRU1PVkUgc2Vzc2lvbiA9PSAlOHBcbiIsIHNlc3MpKTsKIAogICAgIGZvciAoYSA9IGFnZW50X3Nlc3Npb25fbGlzdDsgYSAhPSBOVUxMOyBhID0gbmV4dCkgewogICAgICAgICBpZiAoYS0+c2Vzc2lvbiA9PSBzZXNzKSB7CkBAIC0xNzY4LDYgKzE4ODIsNyBAQAogICAgICAgICB9CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRlJFRV9BR0VOVF9TTk1QX1NFU1NJT05fQllfU0VTU0lPTiAqLwogCiAvKiogaGFuZGxlcyBhbiBpbmNvbWluZyBTTk1QIHBhY2tldCBpbnRvIHRoZSBhZ2VudCAqLwogaW50CkBAIC0xODc0LDcgKzE5ODksNyBAQAogICAgIC8qCiAgICAgICogZG9uZSAKICAgICAgKi8KLSAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJlbmQgb2YgaGFuZGxlX3NubXBfcGFja2V0LCBhc3AgPSAlMDhwXG4iLAorICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgImVuZCBvZiBoYW5kbGVfc25tcF9wYWNrZXQsIGFzcCA9ICU4cFxuIiwKICAgICAgICAgICAgICAgICBhc3ApKTsKICAgICByZXR1cm4gcmM7CiB9CkBAIC0xODg1LDcgKzIwMDAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N1YnRyZWUgKnRwKQogewogICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0ID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgY2FjaGVpZDsKIAogICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgImFkZF92Yl90b19jYWNoZSglOHAsICVkLCAiLCBhc3AsIHZiY291bnQpKTsKICAgICBERUJVR01TR09JRCgoInNubXBfYWdlbnQiLCB2YXJiaW5kX3B0ci0+bmFtZSwKQEAgLTE5NDksNyArMjA2Myw5IEBACiAgICAgICAgICAgICB2YXJiaW5kX3B0ci0+dHlwZSA9IFNOTVBfRU5ET0ZNSUJWSUVXOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgU05NUF9NU0dfU0VUOgorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKICAgICAgICAgICAgIHZhcmJpbmRfcHRyLT50eXBlID0gU05NUF9OT1NVQ0hPQkpFQ1Q7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE5NTgsNiArMjA3NCw4IEBACiAgICAgICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgIC8qIHNob3VsZG4ndCBnZXQgaGVyZSAqLwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKKyAgICAgICAgaW50IGNhY2hlaWQ7CisKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAidHAtPnN0YXJ0ICIpKTsKICAgICAgICAgREVCVUdNU0dPSUQoKCJzbm1wX2FnZW50IiwgdHAtPnN0YXJ0X2EsIHRwLT5zdGFydF9sZW4pKTsKICAgICAgICAgREVCVUdNU0coKCJzbm1wX2FnZW50IiwgIiwgdHAtPmVuZCAiKSk7CkBAIC0xOTgzLDggKzIxMDEsMTAgQEAKICAgICAgICAgLyoKICAgICAgICAgICogZm9yIG5vbi1TRVQgbW9kZXMsIHNldCB0aGUgdHlwZSB0byBOVUxMIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmICghTU9ERV9JU19TRVQoYXNwLT5wZHUtPmNvbW1hbmQpKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOmFzcCIsICJhc3AgJXAgcmVxaW5mbyAlcCBhc3NpZ25lZCB0byByZXF1ZXN0XG4iLAorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6YXNwIiwgImFzcCAlcCByZXFpbmZvICVwIGFzc2lnbmVkIHRvIHJlcXVlc3RcbiIsCiAgICAgICAgICAgICAgICAgICAgIGFzcCwgYXNwLT5yZXFpbmZvKSk7CiAgICAgICAgICAgICBpZiAodmFyYmluZF9wdHItPnR5cGUgPT0gQVNOX1BSSVZfSU5DTF9SQU5HRSkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInZhcmJpbmQgJWQgaXMgaW5jbHVzaXZlXG4iLApAQCAtMTk5Miw3ICsyMTEyLDkgQEAKICAgICAgICAgICAgICAgICByZXF1ZXN0LT5pbmNsdXNpdmUgPSAxOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgdmFyYmluZF9wdHItPnR5cGUgPSBBU05fTlVMTDsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgICAgICAvKgogICAgICAgICAgKiBwbGFjZSB0aGVtIGluIGEgY2FjaGUgCkBAIC0yMDM1LDcgKzIxNTcsNyBAQAogICAgICAgICAgICAgICAgIGFzcC0+dHJlZWNhY2hlX2xlbiA9CiAgICAgICAgICAgICAgICAgICAgIChhc3AtPnRyZWVjYWNoZV9sZW4gKyBDQUNIRV9HUk9XX1NJWkUpOwogICAgICAgICAgICAgICAgIGFzcC0+dHJlZWNhY2hlID0KLSAgICAgICAgICAgICAgICAgICAgcmVhbGxvYyhhc3AtPnRyZWVjYWNoZSwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfdHJlZV9jYWNoZSAqKXJlYWxsb2MoYXNwLT50cmVlY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfdHJlZV9jYWNoZSkgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+dHJlZWNhY2hlX2xlbik7CiAgICAgICAgICAgICAgICAgaWYgKGFzcC0+dHJlZWNhY2hlID09IE5VTEwpCkBAIC0yMTYzLDcgKzIyODUsNyBAQAogICAgIGlmIChhc3AtPnRyZWVjYWNoZSA9PSBOVUxMICYmIGFzcC0+dHJlZWNhY2hlX2xlbiA9PSAwKSB7CiAgICAgICAgIGFzcC0+dHJlZWNhY2hlX2xlbiA9IFNOTVBfTUFYKDEgKyBhc3AtPnZiY291bnQgLyA0LCAxNik7CiAgICAgICAgIGFzcC0+dHJlZWNhY2hlID0KLSAgICAgICAgICAgIGNhbGxvYyhhc3AtPnRyZWVjYWNoZV9sZW4sIHNpemVvZihuZXRzbm1wX3RyZWVfY2FjaGUpKTsKKyAgICAgICAgICAgIChuZXRzbm1wX3RyZWVfY2FjaGUgKiljYWxsb2MoYXNwLT50cmVlY2FjaGVfbGVuLCBzaXplb2YobmV0c25tcF90cmVlX2NhY2hlKSk7CiAgICAgICAgIGlmIChhc3AtPnRyZWVjYWNoZSA9PSBOVUxMKQogICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKICAgICB9CkBAIC0yMjA0LDggKzIzMjYsOCBAQAogICAgICAgICAgICAgICogcmVzdWx0IHZlY3RvcgogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAobWF4cmVzcG9uc2VzIDwgMCB8fAotICAgICAgICAgICAgICAgIG1heHJlc3BvbnNlcyA+IElOVF9NQVggLyBzaXplb2Yoc3RydWN0IHZhcmJpbmRfbGlzdCAqKSkKLSAgICAgICAgICAgICAgICBtYXhyZXNwb25zZXMgPSBJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCB2YXJiaW5kX2xpc3QgKik7CisgICAgICAgICAgICAgICAgbWF4cmVzcG9uc2VzID4gKGludCkoSU5UX01BWCAvIHNpemVvZihzdHJ1Y3QgdmFyYmluZF9saXN0ICopKSkKKyAgICAgICAgICAgICAgICBtYXhyZXNwb25zZXMgPSAoaW50KShJTlRfTUFYIC8gc2l6ZW9mKHN0cnVjdCB2YXJiaW5kX2xpc3QgKikpOwogCiAgICAgICAgICAgICAvKiBlbnN1cmUgdGhhdCB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVwZXRpdGlvbnMgd2lsbCBmaXQgaW4gdGhlCiAgICAgICAgICAgICAgKiByZXN1bHQgdmVjdG9yCkBAIC0yMzE5LDYgKzI0NDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKICAgICAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKICAgICAgICAgICAgIHZpZXcgPSBpbl9hX3ZpZXcodmFyYmluZF9wdHItPm5hbWUsICZ2YXJiaW5kX3B0ci0+bmFtZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+cGR1LCB2YXJiaW5kX3B0ci0+dHlwZSk7CkBAIC0yMzI3LDYgKzI0NTAsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0FDQ0VTUzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKICAgICAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgpAQCAtMjM3NSw2ICsyNDk5LDEwIEBACiAgICAgYXNwLT50cmVlY2FjaGUgPQogICAgICAgICAobmV0c25tcF90cmVlX2NhY2hlICopIGNhbGxvYyhhc3AtPnRyZWVjYWNoZV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3RyZWVfY2FjaGUpKTsKKworICAgIGlmIChhc3AtPnRyZWVjYWNoZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworCiAgICAgYXNwLT50cmVlY2FjaGVfbnVtID0gLTE7CiAgICAgaWYgKGFzcC0+Y2FjaGVfc3RvcmUpIHsKICAgICAgICAgbmV0c25tcF9mcmVlX2NhY2hlbWFwKGFzcC0+Y2FjaGVfc3RvcmUpOwpAQCAtMjM5MywxMCArMjUyMSw3IEBACiAgICAgICAgICAgICBpZiAoIW5ldHNubXBfYWRkX3ZhcmJpbmRfdG9fY2FjaGUoYXNwLCBhc3AtPnJlcXVlc3RzW2ldLmluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+cmVxdWVzdHNbaV0ucmVxdWVzdHZiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzcC0+cmVxdWVzdHNbaV0uc3VidHJlZS0+bmV4dCkpIHsKLSAgICAgICAgICAgICAgICBpZiAob2xkX3RyZWVjYWNoZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvbGRfdHJlZWNhY2hlKTsKLSAgICAgICAgICAgICAgICAgICAgb2xkX3RyZWVjYWNoZSA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvbGRfdHJlZWNhY2hlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIGlmIChhc3AtPnJlcXVlc3RzW2ldLnJlcXVlc3R2Yi0+dHlwZSA9PSBBU05fUFJJVl9SRVRSWSkgewogICAgICAgICAgICAgLyoKQEAgLTI0MDYsMTcgKzI1MzEsMTIgQEAKICAgICAgICAgICAgIGlmICghbmV0c25tcF9hZGRfdmFyYmluZF90b19jYWNoZShhc3AsIGFzcC0+cmVxdWVzdHNbaV0uaW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT5yZXF1ZXN0c1tpXS5yZXF1ZXN0dmIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwLT5yZXF1ZXN0c1tpXS5zdWJ0cmVlKSkgewotICAgICAgICAgICAgICAgIGlmIChvbGRfdHJlZWNhY2hlICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9sZF90cmVlY2FjaGUpOwotICAgICAgICAgICAgICAgICAgICBvbGRfdHJlZWNhY2hlID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9sZF90cmVlY2FjaGUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKG9sZF90cmVlY2FjaGUgIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUob2xkX3RyZWVjYWNoZSk7Ci0gICAgfQorICAgIFNOTVBfRlJFRShvbGRfdHJlZWNhY2hlKTsKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIApAQCAtMjQyOSw2ICsyNTQ5LDcgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUxFVEVfU1VCVFJFRV9DQUNIRQogdm9pZAogbmV0c25tcF9kZWxldGVfc3VidHJlZV9jYWNoZShuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcCkKIHsKQEAgLTI0NDEsNyArMjU2Miw5IEBACiAgICAgICAgIGFzcC0+dHJlZWNhY2hlX251bS0tOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFTEVURV9TVUJUUkVFX0NBQ0hFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19BTExfUkVRVUVTVFNfRVJST1IKIC8qCiAgKiBjaGVjayBhbGwgcmVxdWVzdHMgZm9yIGVycm9ycwogICoKQEAgLTI0NzIsNyArMjU5NSw5IEBACiAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX0FMTF9SRVFVRVNUU19FUlJPUiAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfUkVRVUVTVFNfRVJST1IKIGludAogbmV0c25tcF9jaGVja19yZXF1ZXN0c19lcnJvcihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CkBAIC0yNDg1LDYgKzI2MTAsNyBAQAogICAgIH0KICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1JFUVVFU1RTX0VSUk9SICovCiAKIGludAogbmV0c25tcF9jaGVja19yZXF1ZXN0c19zdGF0dXMobmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3AsCkBAIC0yNTYwLDYgKzI2ODYsNyBAQAogICAgICAgICAgKiBlcnJvcnMpLgogICAgICAgICAgKi8KICAgICAgICAgc3dpdGNoIChhc3AtPm1vZGUpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgICAgICAgICAgcmV0c3RhdHVzID0gbmV0c25tcF9jaGVja19yZXF1ZXN0c19zdGF0dXMoYXNwLAogCQkJCQkJICAgICAgYXNwLT50cmVlY2FjaGVbaV0uCkBAIC0yNTczLDYgKzI3MDAsNyBAQAogCQkJCQkJICAgICAgcmVxdWVzdHNfYmVnaW4sCiAJCQkJCQkgICAgICBTTk1QX0VSUl9VTkRPRkFJTEVEKTsKICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXRzdGF0dXMgPSBuZXRzbm1wX2NoZWNrX3JlcXVlc3RzX3N0YXR1cyhhc3AsCkBAIC0yNjgzLDYgKzI4MTEsNyBAQAogICAgICAgICAgKiBpZiB0aGUgdG9wIHJlcXVlc3QgaXMgYSBzZXQsIGRvbid0IHBvcCBpdAogICAgICAgICAgKiBvZmYgaWYgdGhlcmUgYXJlIGRlbGVnYXRlZCByZXF1ZXN0cwogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgIGlmICgobmV0c25tcF9hZ2VudF9xdWV1ZWRfbGlzdC0+cGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1NFVCkgJiYKICAgICAgICAgICAgIChhZ2VudF9kZWxlZ2F0ZWRfbGlzdCkpIHsKIApAQCAtMjY5MCw5ICsyODE5LDEwIEBACiAKICAgICAgICAgICAgIG5ldHNubXBfcHJvY2Vzc2luZ19zZXQgPSBuZXRzbm1wX2FnZW50X3F1ZXVlZF9saXN0OwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLCAiU0VUIHJlcXVlc3QgcmVtYWlucyBxdWV1ZWQgd2hpbGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgImRlbGVnYXRlZCByZXF1ZXN0cyBmaW5pc2gsIGFzcCA9ICUwOHBcbiIsIGFzcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgImRlbGVnYXRlZCByZXF1ZXN0cyBmaW5pc2gsIGFzcCA9ICU4cFxuIiwgYXNwKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIHBvcCB0aGUgZmlyc3QgcmVxdWVzdCBhbmQgcHJvY2VzcyBpdApAQCAtMjcwMCw3ICsyODMwLDcgQEAKICAgICAgICAgYXNwID0gbmV0c25tcF9hZ2VudF9xdWV1ZWRfbGlzdDsKICAgICAgICAgbmV0c25tcF9hZ2VudF9xdWV1ZWRfbGlzdCA9IGFzcC0+bmV4dDsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLAotICAgICAgICAgICAgICAgICAgICAicHJvY2Vzc2luZyBxdWV1ZWQgcmVxdWVzdCwgYXNwID0gJTA4cFxuIiwgYXNwKSk7CisgICAgICAgICAgICAgICAgICAgICJwcm9jZXNzaW5nIHF1ZXVlZCByZXF1ZXN0LCBhc3AgPSAlOHBcbiIsIGFzcCkpOwogCiAgICAgICAgIG5ldHNubXBfaGFuZGxlX3JlcXVlc3QoYXNwLCBhc3AtPnN0YXR1cyk7CiAKQEAgLTI3NDMsNyArMjg3Myw3IEBACiB7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1cyA9IFNOTVBfRVJSX05PRVJST1I7CiAKLSAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJwcm9jZXNzaW5nIGRlbGVnYXRlZCByZXF1ZXN0LCBhc3AgPSAlMDhwXG4iLAorICAgIERFQlVHTVNHVEwoKCJzbm1wX2FnZW50IiwgInByb2Nlc3NpbmcgZGVsZWdhdGVkIHJlcXVlc3QsIGFzcCA9ICU4cFxuIiwKICAgICAgICAgICAgICAgICBhc3ApKTsKIAogICAgIHN3aXRjaCAoYXNwLT5tb2RlKSB7CkBAIC0yNzY0LDYgKzI4OTQsNyBAQAogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogICAgICAgICBuZXRzbm1wX2NoZWNrX2FsbF9yZXF1ZXN0c19zdGF0dXMoYXNwLCBTTk1QX0VSUl9DT01NSVRGQUlMRUQpOwogICAgICAgICBnb3RvIHNldHRvcDsKQEAgLTI3OTksNiArMjkzMCw3IEBACiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKICAgICAgICAgfQogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwpAQCAtMjk5Miw5ICszMTI0LDEzIEBACiAgICAgICAgICAgICByZXR1cm4gc3RhdHVzOyAgICAgIC8qIHNob3VsZCBuZXZlciByZWFsbHkgaGFwcGVuICovCiAgICAgICAgIH0KICAgICB9CisgICAgaWYgKCFuZXRzbm1wX3J1bm5pbmcpIHsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICB9CiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiBpbnQKIGhhbmRsZV9zZXQobmV0c25tcF9hZ2VudF9zZXNzaW9uICphc3ApCiB7CkBAIC0zMDkyLDYgKzMyMjgsNyBAQAogICAgIH0KICAgICByZXR1cm4gYXNwLT5zdGF0dXM7CiB9CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIGludAogbmV0c25tcF9oYW5kbGVfcmVxdWVzdChuZXRzbm1wX2FnZW50X3Nlc3Npb24gKmFzcCwgaW50IHN0YXR1cykKQEAgLTMxMTIsMTMgKzMyNDksMTQgQEAKICAgICAgICAgICAgIG5ldHNubXBfYWRkX3F1ZXVlZChhc3ApOwogICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWdlbnQiLAogICAgICAgICAgICAgICAgICAgICAgICAgInJlcXVlc3QgcXVldWVkIHdoaWxlIHByb2Nlc3Npbmcgc2V0LCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAiYXNwID0gJTA4cFxuIiwgYXNwKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiYXNwID0gJThwXG4iLCBhc3ApKTsKICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICB9CiAKICAgICAgICAgLyoKICAgICAgICAgICogY2hlY2sgZm9yIHNldCByZXF1ZXN0CiAgICAgICAgICAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgaWYgKGFzcC0+cGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1NFVCkgewogICAgICAgICAgICAgbmV0c25tcF9wcm9jZXNzaW5nX3NldCA9IGFzcDsKIApAQCAtMzEyOCwxMiArMzI2NiwxMyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBpZiAoYWdlbnRfZGVsZWdhdGVkX2xpc3QpIHsKICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hZ2VudCIsICJTRVQgcmVxdWVzdCBxdWV1ZWQgd2hpbGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxlZ2F0ZWQgcmVxdWVzdHMgZmluaXNoLCBhc3AgPSAlMDhwXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWxlZ2F0ZWQgcmVxdWVzdHMgZmluaXNoLCBhc3AgPSAlOHBcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXNwKSk7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9hZGRfcXVldWVkKGFzcCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAKICAgICAvKgpAQCAtMzE4NSw2ICszMzI0LDcgQEAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFzcC0+cGR1LT5jb21tYW5kKSB7CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTI6CiAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQUNUSU9OOgogICAgIGNhc2UgU05NUF9NU0dfSU5URVJOQUxfU0VUX0NPTU1JVDoKQEAgLTMxOTQsNiArMzMzNCw3IEBACiAgICAgICAgIGlmIChzdGF0dXMgIT0gU05NUF9FUlJfTk9FUlJPUikKICAgICAgICAgICAgIHJldHVybiBzdGF0dXM7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgY2FzZSBTTk1QX01TR19HRVQ6CiAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgpAQCAtMzIxNyw4ICszMzU4LDEwIEBACiAgICAgICAgICAqIGZhbGwgdGhyb3VnaCAKICAgICAgICAgICovCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfQkVHSU46CiAgICAgY2FzZSBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTE6CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgZGVmYXVsdDoKICAgICAgICAgYXNwLT52YmNvdW50ID0gY291bnRfdmFyYmluZHMoYXNwLT5wZHUtPnZhcmlhYmxlcyk7CiAgICAgICAgIGlmIChhc3AtPnZiY291bnQpIC8qIGVmZW5jZSBkb2Vzbid0IGxpa2UgMCBzaXplIGFsbG9jcyAqLwpAQCAtMzMwOCw2ICszNDUxLDcgQEAKICAgICAgICAgc3RhdHVzID0gaGFuZGxlX2dldG5leHRfbG9vcChhc3ApOwogICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKICNpZmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PVFdSSVRBQkxFOwpAQCAtMzMzNiw2ICszNDgwLDcgQEAKICAgICAgICAgICogYXNwIHJlbGF0ZWQgY2FjaGUgaXMgc2F2ZWQgaW4gY2xlYW51cCAKICAgICAgICAgICovCiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOR0VUUkVTUE9OU0VTKTsKQEAgLTMzODUsNyArMzUzMCw3IEBACiAgICAgICAgIGNhc2UgTU9ERV9HRVRORVhUOgogICAgICAgICBjYXNlIE1PREVfR0VUQlVMSzoKICAgICAgICAgICAgIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dHlwZSA9IGVycm9yX3ZhbHVlOwotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogVGhlc2UgYXJlIHRlY2huaWNhbGx5IGlsbGVnYWwgdG8gc2V0IGJ5IHRoZQpAQCAtMzM5OCw5ICszNTQzLDE1IEBACiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9WQUxVRTsKICAgICAgICAgICAgICAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICBjYXNlIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMToKKyAgICAgICAgICAgIHJlcXVlc3QtPnN0YXR1cyA9IFNOTVBfRVJSX05PQ1JFQVRJT047CisgICAgICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmVxdWVzdC0+c3RhdHVzID0gU05NUF9FUlJfTk9TVUNITkFNRTsgICAgICAvKiBXV1c6IGNvcnJlY3Q/ICovCi0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgLyogbmV2ZXIgZ2V0IGhlcmUgKi8KIApAQCAtMzQyMSw3ICszNTcyLDcgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcmVxdWVzdC0+c3RhdHVzID0gZXJyb3JfdmFsdWU7CiAgICAgICAgIH0KLSAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CkBAIC0zNDQwLDYgKzM1OTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfdmFsdWUpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVRVUVTVF9TRVRfRVJST1JfSURYCiAvKiogc2V0IGVycm9yIGZvciBhIHJlcXVlc3Qgd2l0aGluIGEgcmVxdWVzdCBsaXN0CiAgKiBAcGFyYW0gcmVxdWVzdCBoZWFkIG9mIHRoZSByZXF1ZXN0IGxpc3QKICAqIEBwYXJhbSBlcnJvcl92YWx1ZSBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdApAQCAtMzQ2Nyw2ICszNjE5LDcgQEAKICAgICByZXR1cm4gX3JlcXVlc3Rfc2V0X2Vycm9yKHJlcSwgcmVxdWVzdC0+YWdlbnRfcmVxX2luZm8tPm1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJvcl92YWx1ZSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRVFVRVNUX1NFVF9FUlJPUl9JRFggKi8KIAogLyoqIHNldCBlcnJvciBmb3IgYWxsIHJlcXVlc3RzCiAgKiBAcGFyYW0gcmVxdWVzdHMgcmVxdWVzdCBsaXN0CkBAIC0zNTAxLDEwMyArMzY1NCwxMzEgQEAKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1leHRlcm4gc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lOwotCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBSZXR1cm4gdGhlIHZhbHVlIG9mICdzeXNVcFRpbWUnIGF0IHRoZSBnaXZlbiBtYXJrZXIgCi0gICAgICAgICAgICAgICAgICovCisvKioKKyAqIFJldHVybiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHBtIGFuZCB0aGUgYWdlbnQgc3RhcnQgdGltZSBpbiBodW5kcmVkdGhzIG9mCisgKiBhIHNlY29uZC4KKyAqIFxkZXByZWNhdGVkIERvbid0IHVzZSBpbiBuZXcgY29kZS4KKyAqCisgKiBAcGFyYW1baW5dIHBtIEFuIGFic29sdXRlIHRpbWUgYXMgZS5nLiByZXBvcnRlZCBieSBnZXR0aW1lb2ZkYXkoKS4KKyAqLwogdV9sb25nCiBuZXRzbm1wX21hcmtlcl91cHRpbWUobWFya2VyX3QgcG0pCiB7CiAgICAgdV9sb25nICAgICAgICAgIHJlczsKLSAgICBtYXJrZXJfdCAgICAgICAgc3RhcnQgPSAobWFya2VyX3QpICYgc3RhcnR0aW1lOworICAgIGNvbnN0X21hcmtlcl90ICBzdGFydCA9IG5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSgpOwogCiAgICAgcmVzID0gdWF0aW1lX2hkaWZmKHN0YXJ0LCBwbSk7Ci0gICAgcmV0dXJuIHJlczsgICAgICAgICAgICAgICAgIC8qIGF0aW1lX2RpZmYgd29ya3MgaW4gbXNlYywgbm90IGNzZWMgKi8KKyAgICByZXR1cm4gcmVzOwogfQogCi0gICAgICAgICAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAgICAgICAgICogc3RydWN0IHRpbWV2YWwgZXF1aXZhbGVudHMgb2YgdGhlc2UgCi0gICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qKgorICogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdHYgYW5kIHRoZSBhZ2VudCBzdGFydCB0aW1lIGluIGh1bmRyZWR0aHMgb2YKKyAqIGEgc2Vjb25kLgorICoKKyAqIFxkZXByZWNhdGVkIFVzZSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKSBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbVtpbl0gdHYgQW4gYWJzb2x1dGUgdGltZSBhcyBlLmcuIHJlcG9ydGVkIGJ5IGdldHRpbWVvZmRheSgpLgorICovCiB1X2xvbmcKIG5ldHNubXBfdGltZXZhbF91cHRpbWUoc3RydWN0IHRpbWV2YWwgKiB0dikKIHsKICAgICByZXR1cm4gbmV0c25tcF9tYXJrZXJfdXB0aW1lKChtYXJrZXJfdCkgdHYpOwogfQogCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ3N5c1VwVGltZScgCi0gICAgICAgICAgICAgICAgICovCisKK3N0cnVjdCB0aW1ldmFsICBzdGFydHRpbWU7CitzdGF0aWMgc3RydWN0IHRpbWV2YWwgc3RhcnR0aW1lTTsKKworLyoqCisgKiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSB2YXJpYWJsZSBpbiB3aGljaCB0aGUgTmV0LVNOTVAgc3RhcnQgdGltZSBoYXMKKyAqIGJlZW4gc3RvcmVkLgorICoKKyAqIEBub3RlIFVzZSBuZXRzbm1wX2dldF9hZ2VudF9ydW50aW1lKCkgaW5zdGVhZCBvZiB0aGlzIGZ1bmN0aW9uIGlmIHlvdSBuZWVkCisgKiAgIHRvIGtub3cgaG93IG11Y2ggdGltZSBlbGFwc2VkIHNpbmNlIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZSgpIGhhcyBiZWVuCisgKiAgIGNhbGxlZC4KKyAqLworY29uc3RfbWFya2VyX3QgICAgICAgIAorbmV0c25tcF9nZXRfYWdlbnRfc3RhcnR0aW1lKHZvaWQpCit7CisgICAgcmV0dXJuICZzdGFydHRpbWU7Cit9CisKKy8qKgorICogUmVwb3J0IHRoZSB0aW1lIHRoYXQgZWxhcHNlZCBzaW5jZSB0aGUgYWdlbnQgc3RhcnQgdGltZSBpbiBodW5kcmVkdGhzIG9mIGEKKyAqIHNlY29uZC4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZSgpLgorICovCit1aW50NjRfdAorbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSh2b2lkKQoreworICAgIHN0cnVjdCB0aW1ldmFsIG5vdywgZGVsdGE7CisKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CisgICAgTkVUU05NUF9USU1FUlNVQigmbm93LCAmc3RhcnR0aW1lTSwgJmRlbHRhKTsKKyAgICByZXR1cm4gZGVsdGEudHZfc2VjICogKHVpbnQ2NF90KTEwMCArIGRlbHRhLnR2X3VzZWMgLyAxMDAwMDsKK30KKworLyoqCisgKiBTZXQgdGhlIHRpbWUgYXQgd2hpY2ggTmV0LVNOTVAgc3RhcnRlZCBlaXRoZXIgdG8gdGhlIGN1cnJlbnQgdGltZQorICogKGlmIHMgPT0gTlVMTCkgb3IgdG8gKnMgKGlmIHMgaXMgbm90IE5VTEwpLgorICoKKyAqIEBzZWUgU2VlIGFsc28gbmV0c25tcF9zZXRfYWdlbnRfdXB0aW1lKCkuCisgKi8KK3ZvaWQgICAgICAgICAgICAKK25ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZShtYXJrZXJfdCBzKQoreworICAgIGlmIChzKSB7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIG5vd0EsIG5vd007CisKKyAgICAgICAgc3RhcnR0aW1lID0gKihzdHJ1Y3QgdGltZXZhbCopczsKKyAgICAgICAgZ2V0dGltZW9mZGF5KCZub3dBLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZub3dNKTsKKyAgICAgICAgTkVUU05NUF9USU1FUlNVQigmc3RhcnR0aW1lLCAmbm93QSwgJnN0YXJ0dGltZU0pOworICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZzdGFydHRpbWVNLCAmbm93TSwgJnN0YXJ0dGltZU0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGdldHRpbWVvZmRheSgmc3RhcnR0aW1lLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZzdGFydHRpbWVNKTsKKyAgICB9Cit9CisKKworLyoqCisgKiBSZXR1cm4gdGhlIGN1cnJlbnQgdmFsdWUgb2YgJ3N5c1VwVGltZScgCisgKi8KIHVfbG9uZwogbmV0c25tcF9nZXRfYWdlbnRfdXB0aW1lKHZvaWQpCiB7Ci0gICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7CisgICAgc3RydWN0IHRpbWV2YWwgbm93LCBkZWx0YTsKIAotICAgIHJldHVybiBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKCZub3cpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKKyAgICBORVRTTk1QX1RJTUVSU1VCKCZub3csICZzdGFydHRpbWVNLCAmZGVsdGEpOworICAgIHJldHVybiBkZWx0YS50dl9zZWMgKiAxMDBVTCArIGRlbHRhLnR2X3VzZWMgLyAxMDAwMDsKIH0KIAotCi0KLU5FVFNOTVBfSU5MSU5FIHZvaWQKLW5ldHNubXBfYWdlbnRfYWRkX2xpc3RfZGF0YShuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFVF9BR0VOVF9VUFRJTUUKKy8qKgorICogU2V0IHRoZSBzdGFydCB0aW1lIGZyb20gd2hpY2ggJ3N5c1VwVGltZScgaXMgY29tcHV0ZWQuCisgKgorICogQHBhcmFtW2luXSBoc2VjIE5ldyBzeXNVcFRpbWUgaW4gaHVuZHJlZHRocyBvZiBhIHNlY29uZC4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZSgpLgorICovCit2b2lkCituZXRzbm1wX3NldF9hZ2VudF91cHRpbWUodV9sb25nIGhzZWMpCiB7Ci0gICAgaWYgKGFyaSkgewotCWlmIChhcmktPmFnZW50X2RhdGEpIHsKLSAgICAgICAgICAgIG5ldHNubXBfYWRkX2xpc3RfZGF0YSgmYXJpLT5hZ2VudF9kYXRhLCBub2RlKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGFyaS0+YWdlbnRfZGF0YSA9IG5vZGU7Ci0JfQotICAgIH0KLX0KKyAgICBzdHJ1Y3QgdGltZXZhbCAgbm93QSwgbm93TTsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgbmV3X3VwdGltZTsKIAotTkVUU05NUF9JTkxJTkUgaW50Ci1uZXRzbm1wX2FnZW50X3JlbW92ZV9saXN0X2RhdGEobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogbmFtZSkKLXsKLSAgICBpZiAoKE5VTEwgPT0gYXJpKSB8fCAoTlVMTCA9PSBhcmktPmFnZW50X2RhdGEpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIHJldHVybiBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUoJmFyaS0+YWdlbnRfZGF0YSwgbmFtZSk7CisgICAgZ2V0dGltZW9mZGF5KCZub3dBLCBOVUxMKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vd00pOworICAgIG5ld191cHRpbWUudHZfc2VjID0gaHNlYyAvIDEwMDsKKyAgICBuZXdfdXB0aW1lLnR2X3VzZWMgPSAodWludDMyX3QpKGhzZWMgLSBuZXdfdXB0aW1lLnR2X3NlYyAqIDEwMCkgKiAxMDAwMEw7CisgICAgTkVUU05NUF9USU1FUlNVQigmbm93QSwgJm5ld191cHRpbWUsICZzdGFydHRpbWUpOworICAgIE5FVFNOTVBfVElNRVJTVUIoJm5vd00sICZuZXdfdXB0aW1lLCAmc3RhcnR0aW1lTSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRVRfQUdFTlRfVVBUSU1FICovCiAKLU5FVFNOTVBfSU5MSU5FIHZvaWQgICAgKgotbmV0c25tcF9hZ2VudF9nZXRfbGlzdF9kYXRhKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphcmksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSkKLXsKLSAgICBpZiAoYXJpKSB7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX2dldF9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhLCBuYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLU5FVFNOTVBfSU5MSU5FIHZvaWQKLW5ldHNubXBfZnJlZV9hZ2VudF9kYXRhX3NldChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpKQotewotICAgIGlmIChhcmkpIHsKLSAgICAgICAgbmV0c25tcF9mcmVlX2xpc3RfZGF0YShhcmktPmFnZW50X2RhdGEpOwotICAgIH0KLX0KLQotTkVUU05NUF9JTkxJTkUgdm9pZAotbmV0c25tcF9mcmVlX2FnZW50X2RhdGFfc2V0cyhuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpKQotewotICAgIGlmIChhcmkpIHsKLSAgICAgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoYXJpLT5hZ2VudF9kYXRhKTsKLSAgICB9Ci19Ci0KLU5FVFNOTVBfSU5MSU5FIHZvaWQKLW5ldHNubXBfZnJlZV9hZ2VudF9yZXF1ZXN0X2luZm8obmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFyaSkKLXsKLSAgICBpZiAoYXJpKSB7Ci0gICAgICAgIGlmIChhcmktPmFnZW50X2RhdGEpIHsKLSAgICAgICAgICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGFyaS0+YWdlbnRfZGF0YSk7Ci0JfQotICAgICAgICBTTk1QX0ZSRUUoYXJpKTsKLSAgICB9Ci19CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtMzY0Nyw2ICszODI4LDcgQEAKICAqIEBwYXJhbSBlcnJvcl92YWx1ZSBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdHMKICAqIEByZXR1cm4gZXJyb3JfdmFsdWUKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFVF9BTExfUkVRVUVTVFNfRVJST1IKIGludAogbmV0c25tcF9zZXRfYWxsX3JlcXVlc3RzX2Vycm9yKG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICpyZXFpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cywKQEAgLTM2NTUsNCArMzgzNyw1IEBACiAgICAgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwocmVxdWVzdHMsIGVycm9yX3ZhbHVlKTsKICAgICByZXR1cm4gZXJyb3JfdmFsdWU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRVRfQUxMX1JFUVVFU1RTX0VSUk9SICovCiAvKiogQH0gKi8KZGlmZiAtLWdpdCBhL2FnZW50L3NubXBfcGVybC5jIGIvYWdlbnQvc25tcF9wZXJsLmMKaW5kZXggNDgyMWFkMy4uNDhkOTY5NSAxMDA2NDQKLS0tIGEvYWdlbnQvc25tcF9wZXJsLmMKKysrIGIvYWdlbnQvc25tcF9wZXJsLmMKQEAgLTI5LDEwICsyOSwxNCBAQAogdm9pZAogbWF5YmVfc291cmNlX3Blcmxfc3RhcnR1cCh2b2lkKQogewotICAgIGNvbnN0IGNoYXIgICAgICplbWJlZGFyZ3NbXSA9IHsgIiIsICIiIH07CisgICAgaW50ICAgICAgICAgICAgIGFyZ2M7CisgICAgY2hhciAgICAgICAgICAqKmFyZ3Y7CisgICAgY2hhciAgICAgICAgICAqKmVudjsKKyAgICBjaGFyICAgICAgICAgICAqZW1iZWRhcmdzW10gPSB7IE5VTEwsIE5VTEwgfTsKICAgICBjb25zdCBjaGFyICAgICAqcGVybF9pbml0X2ZpbGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKIAkJCQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1BFUkxfSU5JVF9GSUxFKTsKICAgICBjaGFyICAgICAgICAgICAgaW5pdF9maWxlW1NOTVBfTUFYQlVGXTsKKyAgICBpbnQgICAgICAgICAgICAgcmVzOwogCiAgICAgc3RhdGljIGludCAgICAgIGhhdmVfZG9uZV9pbml0ID0gMDsKIApAQCAtNDAsMzEgKzQ0LDU4IEBACiAgICAgICAgIHJldHVybjsKICAgICBoYXZlX2RvbmVfaW5pdCA9IDE7CiAKKyAgICBlbWJlZGFyZ3NbMF0gPSBzdHJkdXAoIiIpOwogICAgIGlmICghcGVybF9pbml0X2ZpbGUpIHsKICAgICAgICAgc25wcmludGYoaW5pdF9maWxlLCBzaXplb2YoaW5pdF9maWxlKSAtIDEsCiAgICAgICAgICAgICAgICAgICIlcy8lcyIsIFNOTVBTSEFSRVBBVEgsICJzbm1wX3BlcmwucGwiKTsKICAgICAgICAgcGVybF9pbml0X2ZpbGUgPSBpbml0X2ZpbGU7CiAgICAgfQotICAgIGVtYmVkYXJnc1sxXSA9IHBlcmxfaW5pdF9maWxlOworICAgIGVtYmVkYXJnc1sxXSA9IHN0cmR1cChwZXJsX2luaXRfZmlsZSk7CiAKICAgICBERUJVR01TR1RMKCgicGVybCIsICJpbml0aWFsaXppbmcgcGVybCAoJXMpXG4iLCBlbWJlZGFyZ3NbMV0pKTsKKyAgICBhcmdjID0gMDsKKyAgICBhcmd2ID0gTlVMTDsKKyAgICBlbnYgPSBOVUxMOworICAgIFBFUkxfU1lTX0lOSVQzKCZhcmdjLCAmYXJndiwgJmVudik7CiAgICAgbXlfcGVybCA9IHBlcmxfYWxsb2MoKTsKLSAgICBpZiAoIW15X3BlcmwpCisgICAgaWYgKCFteV9wZXJsKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlbWJlZGRlZCBwZXJsIHN1cHBvcnQgZmFpbGVkIHRvIGluaXRpYWxpemUgKHBlcmxfYWxsb2MoKSlcbiIpOwogICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgIH0KIAogICAgIHBlcmxfY29uc3RydWN0KG15X3BlcmwpOwotICAgIGlmIChwZXJsX3BhcnNlKG15X3BlcmwsIHhzX2luaXQsIDIsIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiosIGVtYmVkYXJncyksIE5VTEwpKQotICAgICAgICBnb3RvIGJhaWxfb3V0OwogCi0gICAgaWYgKHBlcmxfcnVuKG15X3BlcmwpKQorI2lmZGVmIFBFUkxfRVhJVF9ERVNUUlVDVF9FTkQKKyAgICBQTF9leGl0X2ZsYWdzIHw9IFBFUkxfRVhJVF9ERVNUUlVDVF9FTkQ7CisjZW5kaWYKKworICAgIHJlcyA9IHBlcmxfcGFyc2UobXlfcGVybCwgeHNfaW5pdCwgMiwgZW1iZWRhcmdzLCBOVUxMKTsKKyAgICBpZiAocmVzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlbWJlZGRlZCBwZXJsIHN1cHBvcnQgZmFpbGVkIHRvIGluaXRpYWxpemUgKHBlcmxfcGFyc2UoJXMpIgorICAgICAgICAgICAgICAgICAiIHJldHVybmVkICVkKVxuIiwgZW1iZWRhcmdzWzFdLCByZXMpOwogICAgICAgICBnb3RvIGJhaWxfb3V0OworICAgIH0KKworICAgIHJlcyA9IHBlcmxfcnVuKG15X3BlcmwpOworICAgIGlmIChyZXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVtYmVkZGVkIHBlcmwgc3VwcG9ydCBmYWlsZWQgdG8gaW5pdGlhbGl6ZSAocGVybF9ydW4oKSIKKyAgICAgICAgICAgICAgICAgIiByZXR1cm5lZCAlZClcbiIsIHJlcyk7CisgICAgICAgIGdvdG8gYmFpbF9vdXQ7CisgICAgfQorCisgICAgZnJlZShlbWJlZGFyZ3NbMF0pOworICAgIGZyZWUoZW1iZWRhcmdzWzFdKTsKIAogICAgIERFQlVHTVNHVEwoKCJwZXJsIiwgImRvbmUgaW5pdGlhbGl6aW5nIHBlcmxcbiIpKTsKIAogICAgIHJldHVybjsKIAogICBiYWlsX291dDoKLSAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZW1iZWRkZWQgcGVybCBzdXBwb3J0IGZhaWxlZCB0byBpbml0aWFsaXplXG4iKTsKKyAgICBmcmVlKGVtYmVkYXJnc1swXSk7CisgICAgZnJlZShlbWJlZGFyZ3NbMV0pOwogICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RJU0FCTEVfUEVSTCwgMSk7CiAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYWdlbnQvc25tcF92YXJzLmMgYi9hZ2VudC9zbm1wX3ZhcnMuYwppbmRleCBhYWY5MTdmLi4yZjllNmVmIDEwMDY0NAotLS0gYS9hZ2VudC9zbm1wX3ZhcnMuYworKysgYi9hZ2VudC9zbm1wX3ZhcnMuYwpAQCAtNzcsMTEgKzc3LDcgQEAKICNpbmNsdWRlIDxlcnJuby5oPgogCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC05MCw5ICs4Niw2IEBACiAjICBpbmNsdWRlIDx0aW1lLmg+CiAjIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotIyBpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogIyBpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTE0Myw2ICsxMzYsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaD4KICNpbmNsdWRlICJrZXJuZWwuaCIKIAogI2luY2x1ZGUgIm1pYmdyb3VwL3N0cnVjdC5oIgpAQCAtMTUzLDYgKzE0NywxMiBAQAogI2luY2x1ZGUgImFnZW50X21vZHVsZV9pbmNsdWRlcy5oIgogI2luY2x1ZGUgIm5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgiCiAKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjZW5kaWYKKwogI2luY2x1ZGUgInNubXBfcGVybC5oIgogCiAjaWZuZGVmICBNSU4KQEAgLTIzNiw4ICsyMzYsNiBAQAogdV9jaGFyICAgICAgICAgIHJldHVybl9idWZbMjU2XTsgICAgICAgIC8qIG5lZSA2NCAqLwogI2VuZGlmCiAKLXN0cnVjdCB0aW1ldmFsICBzdGFydHRpbWU7Ci0KIGludCAgICAgICAgICAgICBjYWxsYmFja19tYXN0ZXJfbnVtID0gLTE7CiAKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9DQUxMQkFDS19ET01BSU4KQEAgLTI4NSw5ICsyODMsNyBAQAogICAgIC8qCiAgICAgICogZ2V0IGN1cnJlbnQgdGltZSAoaWUsIHRoZSB0aW1lIHRoZSBhZ2VudCBzdGFydGVkKSAKICAgICAgKi8KLSAgICBnZXR0aW1lb2ZkYXkoJnN0YXJ0dGltZSwgTlVMTCk7Ci0gICAgc3RhcnR0aW1lLnR2X3NlYy0tOwotICAgIHN0YXJ0dGltZS50dl91c2VjICs9IDEwMDAwMDBMOworICAgIG5ldHNubXBfc2V0X2FnZW50X3N0YXJ0dGltZShOVUxMKTsKIAogICAgIC8qCiAgICAgICogd2UgaGFuZGxlIGFsYXJtIHNpZ25hbHMgb3Vyc2VsdmVzIGluIHRoZSBzZWxlY3QgbG9vcCAKQEAgLTMxMiwxNiArMzA4LDE5IEBACiAgICAgbmV0c25tcF9pbml0X2hlbHBlcnMoKTsKICAgICBpbml0X3RyYXBzKCk7CiAgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisgICAgaW5pdF9hZ2VudF9zeXNPUlRhYmxlKCk7CiAKICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpIHx8IGRlZmluZWQoVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUpCiAgICAgLyoKICAgICAgKiBpbml0aWFsaXplIGFnZW50eCBjb25maWdzCiAgICAgICovCiAgICAgYWdlbnR4X2NvbmZpZ19pbml0KCk7CisjaWYgZGVmaW5lZChVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFKQogICAgIGlmKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUk9MRSkgPT0gU1VCX0FHRU5UKQogICAgICAgICBzdWJhZ2VudF9pbml0KCk7CiAjZW5kaWYKKyNlbmRpZgogCiAgICAgLyoKICAgICAgKiBSZWdpc3RlciBjb25maWd1cmF0aW9uIHRva2VucyBmcm9tIHRyYW5zcG9ydCBtb2R1bGVzLiAgCkBAIC0zNDAsNiArMzM5LDExIEBACiAgICAgaW5pdF9wZXJsKCk7CiAjZW5kaWYKIAorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKKyAgICAvKiogaW5pdCBzZWNuYW1lIG1hcHBpbmcgKi8KKyAgICBuZXRzbm1wX2NlcnRzX2FnZW50X2luaXQoKTsKKyNlbmRpZgorCiAjaWZkZWYgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQogICAgIC8qCiAgICAgICogZG9uJ3QgaW5pdCBhZ2VudCBtb2R1bGVzIGZvciBhIHN1Yi1hZ2VudApAQCAtMzY2LDEyICszNzAsMTYgQEAKICAgICBuZXRzbm1wX2NsZWFyX2NhbGxiYWNrX2xpc3QoKTsKICAgICBuZXRzbm1wX2NsZWFyX3Rkb21haW5fbGlzdCgpOwogICAgIG5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0KCk7CisgICAgc2h1dGRvd25fYWdlbnRfc3lzT1JUYWJsZSgpOwogICAgIG5ldHNubXBfY29udGFpbmVyX2ZyZWVfbGlzdCgpOwogICAgIGNsZWFyX3NlY19tb2QoKTsKICAgICBjbGVhcl9zbm1wX2VudW0oKTsKICAgICBjbGVhcl9jYWxsYmFjaygpOwotICAgIGNsZWFyX3VzZXJfbGlzdCgpOworICAgIHNodXRkb3duX3NlY21vZCgpOwogICAgIG5ldHNubXBfYWRkcmNhY2hlX2Rlc3Ryb3koKTsKKyNpZmRlZiBORVRTTk1QX0NBTl9VU0VfTkxJU1QKKyAgICBmcmVlX2ttZW0oKTsKKyNlbmRpZgogCiAgICAgZG9uZV9pbml0X2FnZW50ID0gMDsKIH0KZGlmZiAtLWdpdCBhL2FnZW50L3NubXBkLmMgYi9hZ2VudC9zbm1wZC5jCmluZGV4IGY0Njc1OTIuLmNmYzdiY2UgMTAwNjQ0Ci0tLSBhL2FnZW50L3NubXBkLmMKKysrIGIvYWdlbnQvc25tcGQuYwpAQCAtMzYsNiArMzYsOCBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAogI2lmIEhBVkVfSU9fSAogI2luY2x1ZGUgPGlvLmg+CkBAIC02MSwxMSArNjMsNyBAQAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03OSw4ICs3Nyw2IEBACiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbGlmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgogI2VuZGlmCiAjaWYgSEFWRV9ORVRfSUZfSAogI2luY2x1ZGUgPG5ldC9pZi5oPgpAQCAtMTE2LDYgKzExMiw5IEBACiAjaWYgSEFWRV9HUlBfSAogI2luY2x1ZGUgPGdycC5oPgogI2VuZGlmCisjaWZkZWYgSEFWRV9DUlREQkdfSAorI2luY2x1ZGUgPGNydGRiZy5oPgorI2VuZGlmCiAKICNpZm5kZWYgUEFUSF9NQVgKICMgaWZkZWYgX1BPU0lYX1BBVEhfTUFYCkBAIC0xMzgsMjEgKzEzNywyMCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oPgogCiAjaW5jbHVkZSAibTJtLmgiCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfbW9kdWxlX2NvbmZpZy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmg+CiAKICNpbmNsdWRlICJzbm1wZC5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL3N0cnVjdC5oIgotI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVzLmg+CiAKLSNpbmNsdWRlICJtaWJncm91cC91dGlsX2Z1bmNzLmgiCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWliX21vZHVsZXMuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaD4KLSNpbmNsdWRlICJtaWJfbW9kdWxlX2luY2x1ZGVzLmgiCiAKIC8qCiAgKiBJbmNsdWRlIHdpbnNlcnZpY2UuaCB0byBzdXBwb3J0IFdpbmRvd3MgU2VydmljZQpAQCAtMTY2LDYgKzE2NCwxMCBAQAogCiAjZW5kaWYKIAorbmV0c25tcF9mZWF0dXJlX3dhbnQobG9nZ2luZ19maWxlKQorbmV0c25tcF9mZWF0dXJlX3dhbnQobG9nZ2luZ19zdGRpbykKK25ldHNubXBfZmVhdHVyZV93YW50KGxvZ2dpbmdfc3lzbG9nKQorCiAvKgogICogR2xvYmFscy4KICAqLwpAQCAtMTc2LDcgKzE3OCw3IEBACiAjZGVmaW5lIFRJTUVUSUNLICAgICAgICAgNTAwMDAwTAogCiBpbnQgICAgICAgICAgICAgc25tcF9kdW1wX3BhY2tldDsKLWludCAgICAgICAgICAgICByZWNvbmZpZyA9IDA7CitzdGF0aWMgaW50ICAgICAgcmVjb25maWcgPSAwOwogaW50ICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0RBRU1PTjsKIAogI2lmZGVmIFdJTjMyU0VSVklDRQpAQCAtMTkzLDkgKzE5NSwxMSBAQAogY29uc3QgY2hhciAgICAgKmFwcF9uYW1lID0gInNubXBkIjsKIAogZXh0ZXJuIGludCAgICAgIG5ldHNubXBfcnVubmluZzsKKyNpZmRlZiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFCiBleHRlcm4gY2hhciAgICoqYXJndnJlc3RhcnRwOwogZXh0ZXJuIGNoYXIgICAgKmFyZ3ZyZXN0YXJ0OwogZXh0ZXJuIGNoYXIgICAgKmFyZ3ZyZXN0YXJ0bmFtZTsKKyNlbmRpZiAvKiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFICovCiAKICNpZmRlZiBVU0lOR19TTVVYX01PRFVMRQogI2luY2x1ZGUgPG1pYmdyb3VwL3NtdXgvc211eC5oPgpAQCAtMjYwLDgxICsyNjQsOTIgQEAKIHVzYWdlKGNoYXIgKnByb2cpCiB7CiAjaWZkZWYgV0lOMzJTRVJWSUNFCi0gICAgcHJpbnRmKCJcblVzYWdlOiAgJXMgWy1yZWdpc3Rlcl0gWy1xdWlldF0gW09QVElPTlNdIFtMSVNURU5JTkcgQUREUkVTU0VTXSIsCi0gICAgICAgICAgIHByb2cpOwotICAgIHByaW50ZigiXG4gICAgICAgICVzIFstdW5yZWdpc3Rlcl0gWy1xdWlldF0iLCBwcm9nKTsKKyAgICBwcmludGYoIlxuVXNhZ2U6ICAlcyBbLXJlZ2lzdGVyXSBbLXF1aWV0XSBbT1BUSU9OU10gW0xJU1RFTklORyBBRERSRVNTRVNdIgorICAgICAgICAgICAiXG4gICAgICAgICVzIFstdW5yZWdpc3Rlcl0gWy1xdWlldF0iLCBwcm9nLCBwcm9nKTsKICNlbHNlCiAgICAgcHJpbnRmKCJcblVzYWdlOiAgJXMgW09QVElPTlNdIFtMSVNURU5JTkcgQUREUkVTU0VTXSIsIHByb2cpOwogI2VuZGlmCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIHByaW50ZigiXG5cdFZlcnNpb246ICAlc1xuIiwgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKLSAgICBwcmludGYoIlx0V2ViOiAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL1xuIik7Ci0gICAgcHJpbnRmKCJcdEVtYWlsOiAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iKTsKLSAgICBwcmludGYoIlxuICAtYVx0XHRcdGxvZyBhZGRyZXNzZXNcbiIpOwotICAgIHByaW50ZigiICAtQVx0XHRcdGFwcGVuZCB0byB0aGUgbG9nZmlsZSByYXRoZXIgdGhhbiB0cnVuY2F0aW5nIGl0XG4iKTsKLSAgICBwcmludGYoIiAgLWMgRklMRVssLi4uXVx0XHRyZWFkIEZJTEUocykgYXMgY29uZmlndXJhdGlvbiBmaWxlKHMpXG4iKTsKLSAgICBwcmludGYoIiAgLUNcdFx0XHRkbyBub3QgcmVhZCB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZpbGVzXG4iKTsKLSAgICBwcmludGYoIiAgLWRcdFx0XHRkdW1wIHNlbnQgYW5kIHJlY2VpdmVkIFNOTVAgcGFja2V0c1xuIik7Ci0gICAgcHJpbnRmKCIgIC1EW1RPS0VOWywuLi5dXVx0dHVybiBvbiBkZWJ1Z2dpbmcgb3V0cHV0IGZvciB0aGUgZ2l2ZW4gVE9LRU4ocylcbiIKKyAgICBwcmludGYoIlxuIgorICAgICAgICAgICAiXG5cdFZlcnNpb246ICAlc1xuJXMiCisgICAgICAgICAgICJcdFx0XHQgIChjb25maWcgc2VhcmNoIHBhdGg6ICVzKVxuJXMlcyIsCisgICAgICAgICAgIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSwKKyAgICAgICAgICAgIlx0V2ViOiAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL1xuIgorICAgICAgICAgICAiXHRFbWFpbDogICAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldFxuIgorICAgICAgICAgICAiXG4gIC1hXHRcdFx0bG9nIGFkZHJlc3Nlc1xuIgorICAgICAgICAgICAiICAtQVx0XHRcdGFwcGVuZCB0byB0aGUgbG9nZmlsZSByYXRoZXIgdGhhbiB0cnVuY2F0aW5nIGl0XG4iCisgICAgICAgICAgICIgIC1jIEZJTEVbLC4uLl1cdFx0cmVhZCBGSUxFKHMpIGFzIGNvbmZpZ3VyYXRpb24gZmlsZShzKVxuIgorICAgICAgICAgICAiICAtQ1x0XHRcdGRvIG5vdCByZWFkIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZXNcbiIsCisgICAgICAgICAgIGdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeSgpLAorICAgICAgICAgICAiICAtZFx0XHRcdGR1bXAgc2VudCBhbmQgcmVjZWl2ZWQgU05NUCBwYWNrZXRzXG4iCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERUJVR0dJTkcKKyAgICAgICAgICAgIiAgLURbVE9LRU5bLC4uLl1dXHR0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBnaXZlbiBUT0tFTihzKVxuIgogCSAgICJcdFx0XHQgICh0cnkgQUxMIGZvciBleHRyZW1lbHkgdmVyYm9zZSBvdXRwdXQpXG4iCi0JICAgIlx0XHRcdCAgRG9uJ3QgcHV0IHNwYWNlKHMpIGJldHdlZW4gLUQgYW5kIFRPS0VOKHMpLlxuIik7Ci0gICAgcHJpbnRmKCIgIC1mXHRcdFx0ZG8gbm90IGZvcmsgZnJvbSB0aGUgc2hlbGxcbiIpOwotI2lmIEhBVkVfVU5JU1REX0gKLSAgICBwcmludGYoIiAgLWcgR0lEXHRcdGNoYW5nZSB0byB0aGlzIG51bWVyaWMgZ2lkIGFmdGVyIG9wZW5pbmdcbiIKLQkgICAiXHRcdFx0ICB0cmFuc3BvcnQgZW5kcG9pbnRzXG4iKTsKKwkgICAiXHRcdFx0ICBEb24ndCBwdXQgc3BhY2UocykgYmV0d2VlbiAtRCBhbmQgVE9LRU4ocykuXG4iCiAjZW5kaWYKLSAgICBwcmludGYoIiAgLWgsIC0taGVscFx0XHRkaXNwbGF5IHRoaXMgdXNhZ2UgbWVzc2FnZVxuIik7Ci0gICAgcHJpbnRmKCIgIC1IXHRcdFx0ZGlzcGxheSBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcyB1bmRlcnN0b29kXG4iKTsKLSAgICBwcmludGYoIiAgLUkgWy1dSU5JVExJU1RcdGxpc3Qgb2YgbWliIG1vZHVsZXMgdG8gaW5pdGlhbGl6ZSAob3Igbm90KVxuIik7Ci0gICAgcHJpbnRmKCJcdFx0XHQgIChydW4gc25tcGQgd2l0aCAtRG1pYl9pbml0IGZvciBhIGxpc3QpXG4iKTsKLSAgICBwcmludGYoIiAgLUwgPExPR09QVFM+XHRcdHRvZ2dsZSBvcHRpb25zIGNvbnRyb2xsaW5nIHdoZXJlIHRvIGxvZyB0b1xuIik7CisgICAgICAgICAgICIgIC1mXHRcdFx0ZG8gbm90IGZvcmsgZnJvbSB0aGUgc2hlbGxcbiIsCisjaWYgSEFWRV9VTklTVERfSAorICAgICAgICAgICAiICAtZyBHSURcdFx0Y2hhbmdlIHRvIHRoaXMgbnVtZXJpYyBnaWQgYWZ0ZXIgb3BlbmluZ1xuIgorCSAgICJcdFx0XHQgIHRyYW5zcG9ydCBlbmRwb2ludHNcbiIKKyNlbmRpZgorICAgICAgICAgICAiICAtaCwgLS1oZWxwXHRcdGRpc3BsYXkgdGhpcyB1c2FnZSBtZXNzYWdlXG4iCisgICAgICAgICAgICIgIC1IXHRcdFx0ZGlzcGxheSBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcyB1bmRlcnN0b29kXG4iCisgICAgICAgICAgICIgIC1JIFstXUlOSVRMSVNUXHRsaXN0IG9mIG1pYiBtb2R1bGVzIHRvIGluaXRpYWxpemUgKG9yIG5vdClcbiIKKyAgICAgICAgICAgIlx0XHRcdCAgKHJ1biBzbm1wZCB3aXRoIC1EbWliX2luaXQgZm9yIGEgbGlzdClcbiIKKyAgICAgICAgICAgIiAgLUwgPExPR09QVFM+XHRcdHRvZ2dsZSBvcHRpb25zIGNvbnRyb2xsaW5nIHdoZXJlIHRvIGxvZyB0b1xuIik7CiAgICAgc25tcF9sb2dfb3B0aW9uc191c2FnZSgiXHQiLCBzdGRvdXQpOwotICAgIHByaW50ZigiICAtbSBNSUJMSVNUXHRcdHVzZSBNSUJMSVNUIGluc3RlYWQgb2YgdGhlIGRlZmF1bHQgTUlCIGxpc3RcbiIpOwotICAgIHByaW50ZigiICAtTSBESVJMSVNUXHRcdHVzZSBESVJMSVNUIGFzIHRoZSBsaXN0IG9mIGxvY2F0aW9uc1xuXHRcdFx0ICB0byBsb29rIGZvciBNSUJzXG4iKTsKLSAgICBwcmludGYoIiAgLXAgRklMRVx0XHRzdG9yZSBwcm9jZXNzIGlkIGluIEZJTEVcbiIpOwotICAgIHByaW50ZigiICAtcVx0XHRcdHByaW50IGluZm9ybWF0aW9uIGluIGEgbW9yZSBwYXJzYWJsZSBmb3JtYXRcbiIpOwotICAgIHByaW50ZigiICAtclx0XHRcdGRvIG5vdCBleGl0IGlmIGZpbGVzIG9ubHkgYWNjZXNzaWJsZSB0byByb290XG4iCi0JICAgIlx0XHRcdCAgY2Fubm90IGJlIG9wZW5lZFxuIik7CisgICAgcHJpbnRmKCIgIC1tIE1JQkxJU1RcdFx0dXNlIE1JQkxJU1QgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCBNSUIgbGlzdFxuIgorICAgICAgICAgICAiICAtTSBESVJMSVNUXHRcdHVzZSBESVJMSVNUIGFzIHRoZSBsaXN0IG9mIGxvY2F0aW9ucyB0byBsb29rIGZvciBNSUJzXG4iCisgICAgICAgICAgICJcdFx0XHQgIChkZWZhdWx0ICVzKVxuJXMlcyIsCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORworICAgICAgICAgICBuZXRzbm1wX2dldF9taWJfZGlyZWN0b3J5KCksCisjZWxzZQorICAgICAgICAgICAiTUlCcyBub3QgbG9hZGVkIiwKKyNlbmRpZgorICAgICAgICAgICAiICAtcCBGSUxFXHRcdHN0b3JlIHByb2Nlc3MgaWQgaW4gRklMRVxuIgorICAgICAgICAgICAiICAtcVx0XHRcdHByaW50IGluZm9ybWF0aW9uIGluIGEgbW9yZSBwYXJzYWJsZSBmb3JtYXRcbiIKKyAgICAgICAgICAgIiAgLXJcdFx0XHRkbyBub3QgZXhpdCBpZiBmaWxlcyBvbmx5IGFjY2Vzc2libGUgdG8gcm9vdFxuIgorCSAgICJcdFx0XHQgIGNhbm5vdCBiZSBvcGVuZWRcbiIKICNpZmRlZiBXSU4zMlNFUlZJQ0UKLSAgICBwcmludGYoIiAgLXJlZ2lzdGVyXHRcdHJlZ2lzdGVyIGFzIGEgV2luZG93cyBzZXJ2aWNlXG4iKTsKLSAgICBwcmludGYoIiAgXHRcdFx0ICAoZm9sbG93ZWQgYnkgLXF1aWV0IHRvIHByZXZlbnQgbWVzc2FnZSBwb3B1cHMpXG4iKTsKLSAgICBwcmludGYoIiAgXHRcdFx0ICAoZm9sbG93ZWQgYnkgdGhlIHN0YXJ0dXAgcGFyYW1ldGVyIGxpc3QpXG4iKTsKLSAgICBwcmludGYoIiAgXHRcdFx0ICBOb3RlIHRoYXQgc29tZSBwYXJhbWV0ZXJzIGFyZSBub3QgcmVsZXZhbnQgd2hlbiBydW5uaW5nIGFzIGEgc2VydmljZVxuIik7CisgICAgICAgICAgICIgIC1yZWdpc3Rlclx0XHRyZWdpc3RlciBhcyBhIFdpbmRvd3Mgc2VydmljZVxuIgorICAgICAgICAgICAiICBcdFx0XHQgIChmb2xsb3dlZCBieSAtcXVpZXQgdG8gcHJldmVudCBtZXNzYWdlIHBvcHVwcylcbiIKKyAgICAgICAgICAgIiAgXHRcdFx0ICAoZm9sbG93ZWQgYnkgdGhlIHN0YXJ0dXAgcGFyYW1ldGVyIGxpc3QpXG4iCisgICAgICAgICAgICIgIFx0XHRcdCAgTm90ZSB0aGF0IHNvbWUgcGFyYW1ldGVycyBhcmUgbm90IHJlbGV2YW50IHdoZW4gcnVubmluZyBhcyBhIHNlcnZpY2VcbiIKICNlbmRpZgogI2lmIEhBVkVfVU5JU1REX0gKLSAgICBwcmludGYoIiAgLXUgVUlEXHRcdGNoYW5nZSB0byB0aGlzIHVpZCAobnVtZXJpYyBvciB0ZXh0dWFsKSBhZnRlclxuIgotCSAgICJcdFx0XHQgIG9wZW5pbmcgdHJhbnNwb3J0IGVuZHBvaW50c1xuIik7CisgICAgICAgICAgICIgIC11IFVJRFx0XHRjaGFuZ2UgdG8gdGhpcyB1aWQgKG51bWVyaWMgb3IgdGV4dHVhbCkgYWZ0ZXJcbiIKKwkgICAiXHRcdFx0ICBvcGVuaW5nIHRyYW5zcG9ydCBlbmRwb2ludHNcbiIKICNlbmRpZgogI2lmZGVmIFdJTjMyU0VSVklDRQotICAgIHByaW50ZigiICAtdW5yZWdpc3Rlclx0XHR1bnJlZ2lzdGVyIGFzIGEgV2luZG93cyBzZXJ2aWNlXG4iKTsKLSAgICBwcmludGYoIiAgXHRcdFx0ICAoZm9sbG93ZWQgLXF1aWV0IHRvIHByZXZlbnQgbWVzc2FnZSBwb3B1cHMpXG4iKTsKKyAgICAgICAgICAgIiAgLXVucmVnaXN0ZXJcdFx0dW5yZWdpc3RlciBhcyBhIFdpbmRvd3Mgc2VydmljZVxuIgorICAgICAgICAgICAiICBcdFx0XHQgIChmb2xsb3dlZCAtcXVpZXQgdG8gcHJldmVudCBtZXNzYWdlIHBvcHVwcylcbiIKICNlbmRpZgotICAgIHByaW50ZigiICAtdiwgLS12ZXJzaW9uXHRcdGRpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvblxuIik7Ci0gICAgcHJpbnRmKCIgIC1WXHRcdFx0dmVyYm9zZSBkaXNwbGF5XG4iKTsKKyAgICAgICAgICAgIiAgLXYsIC0tdmVyc2lvblx0XHRkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb25cbiIKKyAgICAgICAgICAgIiAgLVZcdFx0XHR2ZXJib3NlIGRpc3BsYXlcbiIKICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpfHwgZGVmaW5lZChVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRSkKLSAgICBwcmludGYoIiAgLXggQUREUkVTU1x0XHR1c2UgQUREUkVTUyBhcyBBZ2VudFggYWRkcmVzc1xuIik7CisgICAgICAgICAgICIgIC14IEFERFJFU1NcdFx0dXNlIEFERFJFU1MgYXMgQWdlbnRYIGFkZHJlc3NcbiIKICNlbmRpZgogI2lmZGVmIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLSAgICBwcmludGYoIiAgLVhcdFx0XHRydW4gYXMgYW4gQWdlbnRYIHN1YmFnZW50IHJhdGhlciB0aGFuIGFzIGFuXG4iCi0JICAgIlx0XHRcdCAgU05NUCBtYXN0ZXIgYWdlbnRcbiIpOworICAgICAgICAgICAiICAtWFx0XHRcdHJ1biBhcyBhbiBBZ2VudFggc3ViYWdlbnQgcmF0aGVyIHRoYW4gYXMgYW5cbiIKKwkgICAiXHRcdFx0ICBTTk1QIG1hc3RlciBhZ2VudFxuIgogI2VuZGlmCi0KLSAgICBwcmludGYoIlxuRGVwcmVjYXRlZCBvcHRpb25zOlxuIik7Ci0gICAgcHJpbnRmKCIgIC1sIEZJTEVcdFx0dXNlIC1MZiA8RklMRT4gaW5zdGVhZFxuIik7Ci0gICAgcHJpbnRmKCIgIC1QXHRcdFx0dXNlIC1wIGluc3RlYWRcbiIpOwotICAgIHByaW50ZigiICAtc1x0XHRcdHVzZSAtTHNkIGluc3RlYWRcbiIpOwotICAgIHByaW50ZigiICAtUyBkfGl8MC03XHRcdHVzZSAtTHMgPGZhY2lsaXR5PiBpbnN0ZWFkXG4iKTsKLQotICAgIHByaW50ZigiXG4iKTsKKyAgICAgICAgICAgLAorICAgICAgICAgICAiXG5EZXByZWNhdGVkIG9wdGlvbnM6XG4iCisgICAgICAgICAgICIgIC1sIEZJTEVcdFx0dXNlIC1MZiA8RklMRT4gaW5zdGVhZFxuIgorICAgICAgICAgICAiICAtUFx0XHRcdHVzZSAtcCBpbnN0ZWFkXG4iCisgICAgICAgICAgICIgIC1zXHRcdFx0dXNlIC1Mc2QgaW5zdGVhZFxuIgorICAgICAgICAgICAiICAtUyBkfGl8MC03XHRcdHVzZSAtTHMgPGZhY2lsaXR5PiBpbnN0ZWFkXG4iCisgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgKTsKICAgICBleGl0KDEpOwogfQogCiBzdGF0aWMgdm9pZAogdmVyc2lvbih2b2lkKQogewotICAgIHByaW50ZigiXG5ORVQtU05NUCB2ZXJzaW9uOiAgJXNcbiIsIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7Ci0gICAgcHJpbnRmKCJXZWI6ICAgICAgICAgICAgICAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvXG4iKTsKLSAgICBwcmludGYoIkVtYWlsOiAgICAgICAgICAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XG5cbiIpOworICAgIHByaW50ZigiXG5ORVQtU05NUCB2ZXJzaW9uOiAgJXNcbiIKKyAgICAgICAgICAgIldlYjogICAgICAgICAgICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9cbiIKKyAgICAgICAgICAgIkVtYWlsOiAgICAgICAgICAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XG5cbiIsCisgICAgICAgICAgIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7CiAgICAgZXhpdCgwKTsKIH0KIApAQCAtMzc5LDkgKzM5NCwxMyBAQAogewogICAgIC8qIERpc2FibGUgYWxsIGxvZ3MgYW5kIGxvZyB0aGUgZXJyb3IgdmlhIHN5c2xvZyAqLwogICAgIHNubXBfZGlzYWJsZV9sb2coKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgIHNubXBfZW5hYmxlX3N5c2xvZygpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRXhpdGluZyBvbiBzaWduYWwgJWRcbiIsIGEpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgc25tcF9kaXNhYmxlX3N5c2xvZygpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KICAgICBleGl0KDEpOwogfQogCkBAIC00MjEsOSArNDQwLDcgQEAKICAgICBpbnQgICAgICAgICAgICAgYXJnLCBpLCByZXQ7CiAgICAgaW50ICAgICAgICAgICAgIGRvbnRfZm9yayA9IDAsIGRvX2hlbHAgPSAwOwogICAgIGludCAgICAgICAgICAgICBsb2dfc2V0ID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgdWlkID0gMCwgZ2lkID0gMDsKICAgICBpbnQgICAgICAgICAgICAgYWdlbnRfbW9kZSA9IC0xOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqKmFyZ3ZwdHI7CiAgICAgY2hhciAgICAgICAgICAgKnBpZF9maWxlID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAgb3B0aW9uX2NvbXBhdGFiaWxpdHlbXSA9ICItTGUiOwogI2lmIEhBVkVfR0VUUElECkBAIC01MDksMTEgKzUyNiwxMyBAQAogICAgICAgICAgICAgYXJndltpXSA9IG9wdGlvbl9jb21wYXRhYmlsaXR5OyAgICAgICAgICAgIAogICAgIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAjaWZkZWYgV0lOMzIKICAgICBzbm1wX2xvZ19zeXNsb2duYW1lKGFwcF9uYW1lX2xvbmcpOwogI2Vsc2UKICAgICBzbm1wX2xvZ19zeXNsb2duYW1lKGFwcF9uYW1lKTsKICNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFLCBhcHBfbmFtZSk7CiAKQEAgLTU1NywxNCArNTc2LDE5IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgIHNubXBfc2V0X2R1bXBfcGFja2V0KCsrc25tcF9kdW1wX3BhY2tldCk7Ci0gICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfVkVSQk9TRSwgMSk7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc25tcF9kdW1wX3BhY2tldCk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdEJzoKKyNpZmRlZiBORVRTTk1QX0RJU0FCTEVfREVCVUdHSU5HCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRlYnVnZ2luZyBub3QgY29uZmlndXJlZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOworI2Vsc2UKICAgICAgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2VucyhvcHRhcmcpOwogICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKDEpOworI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdmJzoKQEAgLTU3OCwxOSArNjAyLDE4IEBACiAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIGdpZDsKIAogICAgICAgICAgICAgICAgIGdpZCA9IHN0cnRvdWwob3B0YXJnLCAmZWNwLCAxMCk7CisjaWYgSEFWRV9HRVRHUk5BTSAmJiBIQVZFX1BXRF9ICiAgICAgICAgICAgICAgICAgaWYgKCplY3ApIHsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGdyb3VwICAqaW5mbzsKKwogICAgICAgICAgICAgICAgICAgICBpbmZvID0gZ2V0Z3JuYW0ob3B0YXJnKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGluZm8pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGdpZCA9IGluZm8tPmdyX2dpZDsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZ2lkID0gaW5mbyA/IGluZm8tPmdyX2dpZCA6IC0xOworICAgICAgICAgICAgICAgICAgICBlbmRncmVudCgpOworICAgICAgICAgICAgICAgIH0KICNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgZ3JvdXAgaWQ6ICVzXG4iLCBvcHRhcmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKGdpZCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgZ3JvdXAgaWQ6ICVzXG4iLCBvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBnaWQpOwpAQCAtNjE2LDYgKzYzOSw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgICAgICBjYXNlICdsJzoKICAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogLWwgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAtTGYgPGZpbGU+IGluc3RlYWRcbiIpOwogICAgICAgICAgICAgaWYgKG9wdGFyZyAhPSBOVUxMKSB7CkBAIC02MzMsNiArNjU3LDcgQEAKICAgICAgICAgICAgICAgICB1c2FnZShhcmd2WzBdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKICAgICAgICAgY2FzZSAnTCc6CiAJICAgIGlmICAoc25tcF9sb2dfb3B0aW9ucyggb3B0YXJnLCBhcmdjLCBhcmd2ICkgPCAwICkgewpAQCAtNjc4LDcgKzcwMyw4IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdxJzoKLSAgICAgICAgICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KDEpOworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCwgMSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdyJzoKQEAgLTY4Niw2ICs3MTIsNyBAQAogCQkJCSAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MpOwogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogICAgICAgICBjYXNlICdzJzoKICAgICAgICAgICAgIHByaW50ZigiV2FybmluZzogLXMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQsIHVzZSAtTHNkIGluc3RlYWRcbiIpOwogICAgICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nKCk7CkBAIC03MzksNiArNzY2LDcgQEAKICAgICAgICAgICAgICAgICB1c2FnZShhcmd2WzBdKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogICAgICAgICBjYXNlICdVJzoKICAgICAgICAgICAgIG5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCkBAIC03NTIsMTkgKzc4MCwxOCBAQAogICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICB1aWQ7CiAKICAgICAgICAgICAgICAgICB1aWQgPSBzdHJ0b3VsKG9wdGFyZywgJmVjcCwgMTApOworI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAogICAgICAgICAgICAgICAgIGlmICgqZWNwKSB7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICiAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXNzd2QgICppbmZvOworCiAgICAgICAgICAgICAgICAgICAgIGluZm8gPSBnZXRwd25hbShvcHRhcmcpOwotICAgICAgICAgICAgICAgICAgICBpZiAoaW5mbykgewotICAgICAgICAgICAgICAgICAgICAgICAgdWlkID0gaW5mby0+cHdfdWlkOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICB1aWQgPSBpbmZvID8gaW5mby0+cHdfdWlkIDogLTE7CisgICAgICAgICAgICAgICAgICAgIGVuZHB3ZW50KCk7CisgICAgICAgICAgICAgICAgfQogI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCB1c2VyIGlkOiAlc1xuIiwgb3B0YXJnKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0jaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICi0gICAgICAgICAgICAgICAgICAgIH0KLSNlbmRpZgorICAgICAgICAgICAgICAgIGlmICh1aWQgPCAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIHVzZXIgaWQ6ICVzXG4iLCBvcHRhcmcpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQsIHVpZCk7CkBAIC04MjgsNiArODU1LDcgQEAKICAgICB9CiAKICAgICBpZiAob3B0aW5kIDwgYXJnYykgeworI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCiAgICAgICAgIC8qCiAgICAgICAgICAqIFRoZXJlIGFyZSBvcHRpb25hbCB0cmFuc3BvcnQgYWRkcmVzc2VzIG9uIHRoZSBjb21tYW5kIGxpbmUuICAKICAgICAgICAgICovCkBAIC04MzYsNyArODY0LDcgQEAKICAgICAgICAgICAgIGNoYXIgKmMsICphc3RyaW5nOwogICAgICAgICAgICAgaWYgKChjID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAogCQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1BPUlRTKSkpIHsKLSAgICAgICAgICAgICAgICBhc3RyaW5nID0gbWFsbG9jKHN0cmxlbihjKSArIDIgKyBzdHJsZW4oYXJndltpXSkpOworICAgICAgICAgICAgICAgIGFzdHJpbmcgPSAoY2hhciopbWFsbG9jKHN0cmxlbihjKSArIDIgKyBzdHJsZW4oYXJndltpXSkpOwogICAgICAgICAgICAgICAgIGlmIChhc3RyaW5nID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIGFyZ3ZbJWRdXG4iLCBpKTsKICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKQEAgLTg1Myw2OCArODgxLDYyIEBACiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wZC9tYWluIiwgInBvcnQgc3BlYzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCQkJICBORVRTTk1QX0RTX0FHRU5UX1BPUlRTKSkpOworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBzcGVjaWZpZWQgcG9ydHMgdG8gb3BlbjsgdGhpcyBhZ2VudCB3YXMgYnVpbHQgdG8gb25seSBzZW5kIG5vdGlmaWNhdGlvbnNcbiIpOworICAgICAgICBleGl0KDEpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KICAgICB9CiAKICNpZmRlZiBORVRTTk1QX0xPR0ZJTEUKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICBpZiAoMCA9PSBsb2dfc2V0KQogICAgICAgICBzbm1wX2VuYWJsZV9maWxlbG9nKE5FVFNOTVBfTE9HRklMRSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUEVORF9MT0dGSUxFUykpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAjZW5kaWYKIAotICAgIC8qCi0gICAgICogSW5pdGlhbGl6ZSBhIGFyZ3Ygc2V0IHRvIHRoZSBjdXJyZW50IGZvciByZXN0YXJ0aW5nIHRoZSBhZ2VudC4gICAKLSAgICAgKi8KLSAgICBhcmd2cmVzdGFydHAgPSAoY2hhciAqKiltYWxsb2MoKGFyZ2MgKyAyKSAqIHNpemVvZihjaGFyICopKTsKLSAgICBhcmd2cHRyID0gYXJndnJlc3RhcnRwOwotICAgIGZvciAoaSA9IDAsIHJldCA9IDE7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgcmV0ICs9IHN0cmxlbihhcmd2W2ldKSArIDE7CisjaWZkZWYgVVNJTkdfVVRJTF9GVU5DU19SRVNUQVJUX01PRFVMRQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5pdGlhbGl6ZSBhIGFyZ3Ygc2V0IHRvIHRoZSBjdXJyZW50IGZvciByZXN0YXJ0aW5nIHRoZSBhZ2VudC4KKyAgICAgICAgICovCisgICAgICAgIGNoYXIgKmNwdHIsICoqYXJndnB0cjsKKworICAgICAgICBhcmd2cmVzdGFydHAgPSAoY2hhciAqKiltYWxsb2MoKGFyZ2MgKyAyKSAqIHNpemVvZihjaGFyICopKTsKKyAgICAgICAgYXJndnB0ciA9IGFyZ3ZyZXN0YXJ0cDsKKyAgICAgICAgZm9yIChpID0gMCwgcmV0ID0gMTsgaSA8IGFyZ2M7IGkrKykgeworICAgICAgICAgICAgcmV0ICs9IHN0cmxlbihhcmd2W2ldKSArIDE7CisgICAgICAgIH0KKyAgICAgICAgYXJndnJlc3RhcnQgPSAoY2hhciAqKSBtYWxsb2MocmV0KTsKKyAgICAgICAgYXJndnJlc3RhcnRuYW1lID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihhcmd2WzBdKSArIDEpOworICAgICAgICBpZiAoIWFyZ3ZyZXN0YXJ0cCB8fCAhYXJndnJlc3RhcnQgfHwgIWFyZ3ZyZXN0YXJ0bmFtZSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIGFyZ3ZyZXN0YXJ0XG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgc3RyY3B5KGFyZ3ZyZXN0YXJ0bmFtZSwgYXJndlswXSk7CisKKyAgICAgICAgZm9yIChjcHRyID0gYXJndnJlc3RhcnQsIGkgPSAwOyBpIDwgYXJnYzsgaSsrKSB7CisgICAgICAgICAgICBzdHJjcHkoY3B0ciwgYXJndltpXSk7CisgICAgICAgICAgICAqKGFyZ3ZwdHIrKykgPSBjcHRyOworICAgICAgICAgICAgY3B0ciArPSBzdHJsZW4oYXJndltpXSkgKyAxOworICAgICAgICB9CiAgICAgfQotICAgIGFyZ3ZyZXN0YXJ0ID0gKGNoYXIgKikgbWFsbG9jKHJldCk7Ci0gICAgYXJndnJlc3RhcnRuYW1lID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihhcmd2WzBdKSArIDEpOwotICAgIGlmICghYXJndnJlc3RhcnRwIHx8ICFhcmd2cmVzdGFydCB8fCAhYXJndnJlc3RhcnRuYW1lKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyBhcmd2cmVzdGFydFxuIik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIHN0cmNweShhcmd2cmVzdGFydG5hbWUsIGFyZ3ZbMF0pOworI2VuZGlmIC8qIFVTSU5HX1VUSUxfRlVOQ1NfUkVTVEFSVF9NT0RVTEUgKi8KKwogICAgIGlmIChhZ2VudF9tb2RlID09IC0xKSB7Ci0gICAgICAgIGlmIChzdHJzdHIoYXJndnJlc3RhcnRuYW1lLCAiYWdlbnR4ZCIpICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgIGlmIChzdHJzdHIoYXJndlswXSwgImFnZW50eGQiKSAhPSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9ST0xFLCBTVUJfQUdFTlQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUsIE1BU1RFUl9BR0VOVCk7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIAorICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAJCQkgICAgICAgTkVUU05NUF9EU19BR0VOVF9ST0xFLCBhZ2VudF9tb2RlKTsKICAgICB9CiAKLSAgICBmb3IgKGNwdHIgPSBhcmd2cmVzdGFydCwgaSA9IDA7IGkgPCBhcmdjOyBpKyspIHsKLSAgICAgICAgc3RyY3B5KGNwdHIsIGFyZ3ZbaV0pOwotICAgICAgICAqKGFyZ3ZwdHIrKykgPSBjcHRyOwotICAgICAgICBjcHRyICs9IHN0cmxlbihhcmd2W2ldKSArIDE7Ci0gICAgfQotICAgICpjcHRyID0gMDsKLSAgICAqYXJndnB0ciA9IE5VTEw7Ci0KLSNpZmRlZiBCVUZTSVoKLSAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTEJGLCBCVUZTSVopOwotI2VuZGlmCi0gICAgLyoKLSAgICAgKiBJbml0aWFsaXplIHRoZSB3b3JsZC4gIERldGFjaCBmcm9tIHRoZSBzaGVsbC4gIENyZWF0ZSBpbml0aWFsIHVzZXIuICAKLSAgICAgKi8KLSAgICBpZighZG9udF9mb3JrKSB7Ci0gICAgICAgIGludCBxdWl0ID0gISBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfUVVJVF9JTU1FRElBVEVMWSk7Ci0gICAgICAgIHJldCA9IG5ldHNubXBfZGFlbW9uaXplKHF1aXQsIHNubXBfc3RkZXJybG9nX3N0YXR1cygpKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogeHh4LXJrczogZG8gd2UgY2FyZSBpZiBmb3JrIGZhaWxzPyBJIHRoaW5rIHdlIHNob3VsZC4uLgotICAgICAgICAgKi8KLSAgICAgICAgaWYocmV0ICE9IDApCi0gICAgICAgICAgICBFeGl0KDEpOyAgICAgICAgICAgICAgICAvKiAgRXhpdCBsb2dzIGV4aXQgdmFsIGZvciB1cyAgKi8KLSAgICB9Ci0KICAgICBTT0NLX1NUQVJUVVA7CiAgICAgaWYgKGluaXRfYWdlbnQoYXBwX25hbWUpICE9IDApIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkFnZW50IGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7CkBAIC05MzEsNyArOTUzLDMwIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFNvbWUgZXJyb3Igb3BlbmluZyBvbmUgb2YgdGhlIHNwZWNpZmllZCBhZ2VudCB0cmFuc3BvcnRzLiAgCiAgICAgICAgICAqLwotICAgICAgICBFeGl0KDEpOyAgICAgICAgICAgICAgICAvKiAgRXhpdCBsb2dzIGV4aXQgdmFsIGZvciB1cyAgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNlcnZlciBFeGl0aW5nIHdpdGggY29kZSAxXG4iKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpemUgdGhlIHdvcmxkLiAgRGV0YWNoIGZyb20gdGhlIHNoZWxsLiAgQ3JlYXRlIGluaXRpYWwgdXNlci4gIAorICAgICAqLworICAgIGlmKCFkb250X2ZvcmspIHsKKyAgICAgICAgaW50IHF1aXQgPSAhIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9RVUlUX0lNTUVESUFURUxZKTsKKyAgICAgICAgcmV0ID0gbmV0c25tcF9kYWVtb25pemUocXVpdCwKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc3RkZXJybG9nX3N0YXR1cygpCisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLworICAgICAgICAgICAgKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogeHh4LXJrczogZG8gd2UgY2FyZSBpZiBmb3JrIGZhaWxzPyBJIHRoaW5rIHdlIHNob3VsZC4uLgorICAgICAgICAgKi8KKyAgICAgICAgaWYocmV0ICE9IDApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTZXJ2ZXIgRXhpdGluZyB3aXRoIGNvZGUgMVxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CiAgICAgfQogCiAjaWYgSEFWRV9HRVRQSUQKQEAgLTk2NiwxMSArMTAxMSwxNCBAQAogICAgIH0KICNlbmRpZgogCi0jaWYgSEFWRV9VTklTVERfSAorI2lmIGRlZmluZWQoSEFWRV9VTklTVERfSCkgJiYgKGRlZmluZWQoSEFWRV9DSE9XTikgfHwgZGVmaW5lZChIQVZFX1NFVEdJRCkgfHwgZGVmaW5lZChIQVZFX1NFVFVJRCkpCiAgICAgewotICAgIGNvbnN0IGNoYXIgKmNvbnN0IHBlcnNpc3RlbnRfZGlyID0gZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCk7Ci0gICAgbWtkaXJoaWVyKCBwZXJzaXN0ZW50X2RpciwgTkVUU05NUF9BR0VOVF9ESVJFQ1RPUllfTU9ERSwgMCApOworICAgIGNvbnN0IGNoYXIgICAgICpwZXJzaXN0ZW50X2RpcjsKKyAgICBpbnQgICAgICAgICAgICAgdWlkLCBnaWQ7CiAKKyAgICBwZXJzaXN0ZW50X2RpciA9IGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpOworICAgIG1rZGlyaGllciggcGVyc2lzdGVudF9kaXIsIE5FVFNOTVBfQUdFTlRfRElSRUNUT1JZX01PREUsIDAgKTsKKyAgIAogICAgIHVpZCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCSAgICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQpOwogICAgIGdpZCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTk4MCw3ICsxMDI4LDYgQEAKICAgICBpZiAoIHVpZCAhPSAwIHx8IGdpZCAhPSAwICkKICAgICAgICAgY2hvd24oIHBlcnNpc3RlbnRfZGlyLCB1aWQsIGdpZCApOwogI2VuZGlmCi0gICAgfQogCiAjaWZkZWYgSEFWRV9TRVRHSUQKICAgICBpZiAoKGdpZCA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKQEAgLTEwMDIsNiArMTA0OSwyNiBAQAogI2lmZGVmIEhBVkVfU0VUVUlECiAgICAgaWYgKCh1aWQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkJICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCkpID4gMCkgeworI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSCAmJiBIQVZFX0lOSVRHUk9VUFMKKyAgICAgICAgc3RydWN0IHBhc3N3ZCAqaW5mbzsKKworICAgICAgICAvKgorICAgICAgICAgKiBTZXQgc3VwcGxlbWVudGFyeSBncm91cHMgYmVmb3JlIGNoYW5naW5nIFVJRAorICAgICAgICAgKiAgICh3aGljaCBwcm9iYWJseSBpbnZvbHZlcyBnaXZpbmcgdXAgcHJpdmlsZWdlcykKKyAgICAgICAgICovCisgICAgICAgIGluZm8gPSBnZXRwd3VpZCh1aWQpOworICAgICAgICBpZiAoaW5mbykgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkL21haW4iLCAiU3VwcGxlbWVudGFyeSBncm91cHMgZm9yICVzLlxuIiwgaW5mby0+cHdfbmFtZSkpOworICAgICAgICAgICAgaWYgKGluaXRncm91cHMoaW5mby0+cHdfbmFtZSwgKGdpZCAhPSAwID8gKGdpZF90KWdpZCA6IGluZm8tPnB3X2dpZCkpID09IC0xKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJpbml0Z3JvdXBzIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9OT19ST09UX0FDQ0VTUykpIHsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZW5kcHdlbnQoKTsKKyNlbmRpZgogICAgICAgICBERUJVR01TR1RMKCgic25tcGQvbWFpbiIsICJDaGFuZ2luZyB1aWQgdG8gJWQuXG4iLCB1aWQpKTsKICAgICAgICAgaWYgKHNldHVpZCh1aWQpID09IC0xKSB7CiAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInNldHVpZCBmYWlsZWQiKTsKQEAgLTEwMTIsNiArMTA3OSw3IEBACiAgICAgICAgIH0KICAgICB9CiAjZW5kaWYKKyAgICB9CiAjZW5kaWYKIAogICAgIC8qCkBAIC0xMDYxLDkgKzExMjksMTIgQEAKICAgICBhZ2VudF9zdGF0dXMgPSBBR0VOVF9TVE9QUEVEOwogI2VuZGlmCiAKKyNpZmRlZiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFCiAgICAgU05NUF9GUkVFKGFyZ3ZyZXN0YXJ0bmFtZSk7CiAgICAgU05NUF9GUkVFKGFyZ3ZyZXN0YXJ0KTsKICAgICBTTk1QX0ZSRUUoYXJndnJlc3RhcnRwKTsKKyNlbmRpZiAvKiBVU0lOR19VVElMX0ZVTkNTX1JFU1RBUlRfTU9EVUxFICovCisKICAgICBTT0NLX0NMRUFOVVA7CiAgICAgcmV0dXJuIDA7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuZCBtYWluKCkgLS0gc25tcGQgKi8KQEAgLTExMTEsNyArMTE4Miw3IEBACiAgKgkwCU9uIHN1Y2Nlc3MuCiAgKgktMQlTeXN0ZW0gZXJyb3IuCiAgKgotICogSW5maW5pdGUgd2hpbGUtbG9vcCB3aGljaCBtb25pdG9ycyBpbmNvbWluZyBtZXNzZ2VzIGZvciB0aGUgYWdlbnQuCisgKiBJbmZpbml0ZSB3aGlsZS1sb29wIHdoaWNoIG1vbml0b3JzIGluY29taW5nIG1lc3NhZ2VzIGZvciB0aGUgYWdlbnQuCiAgKiBJbnZva2UgdGhlIGVzdGFibGlzaGVkIG1lc3NhZ2UgaGFuZGxlcnMgZm9yIGluY29taW5nIG1lc3NhZ2VzIG9uIGEgcGVyCiAgKiBwb3J0IGJhc2lzLiAgSGFuZGxlIHRpbWVvdXRzLgogICovCkBAIC0xMTE5LDEzICsxMTkwLDE3IEBACiByZWNlaXZlKHZvaWQpCiB7CiAgICAgaW50ICAgICAgICAgICAgIG51bWZkczsKLSAgICBmZF9zZXQgICAgICAgICAgcmVhZGZkcywgd3JpdGVmZHMsIGV4Y2VwdGZkczsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCByZWFkZmRzLCB3cml0ZWZkcywgZXhjZXB0ZmRzOwogICAgIHN0cnVjdCB0aW1ldmFsICB0aW1lb3V0LCAqdHZwID0gJnRpbWVvdXQ7CiAgICAgaW50ICAgICAgICAgICAgIGNvdW50LCBibG9jaywgaTsKICNpZmRlZglVU0lOR19TTVVYX01PRFVMRQogICAgIGludCAgICAgICAgICAgICBzZDsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVVNJTkdfU01VWF9NT0RVTEUgKi8KIAorICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJnJlYWRmZHMsIEZEX1NFVFNJWkUpOworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJndyaXRlZmRzLCBGRF9TRVRTSVpFKTsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZleGNlcHRmZHMsIEZEX1NFVFNJWkUpOworCiAgICAgLyoKICAgICAgKiBpZ25vcmUgZWFybHkgc2lnaHVwIGR1cmluZyBzdGFydHVwCiAgICAgICovCkBAIC0xMTY3LDE4ICsxMjQyLDE4IEBACiAgICAgICAgIHR2cC0+dHZfdXNlYyA9IDA7CiAKICAgICAgICAgbnVtZmRzID0gMDsKLSAgICAgICAgRkRfWkVSTygmcmVhZGZkcyk7Ci0gICAgICAgIEZEX1pFUk8oJndyaXRlZmRzKTsKLSAgICAgICAgRkRfWkVSTygmZXhjZXB0ZmRzKTsKKyAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCZyZWFkZmRzKTsKKyAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9aRVJPKCZ3cml0ZWZkcyk7CisgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfWkVSTygmZXhjZXB0ZmRzKTsKICAgICAgICAgYmxvY2sgPSAwOwotICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKCZudW1mZHMsICZyZWFkZmRzLCB0dnAsICZibG9jayk7CisgICAgICAgIHNubXBfc2VsZWN0X2luZm8yKCZudW1mZHMsICZyZWFkZmRzLCB0dnAsICZibG9jayk7CiAgICAgICAgIGlmIChibG9jayA9PSAxKSB7CiAgICAgICAgICAgICB0dnAgPSBOVUxMOyAgICAgICAgIC8qIGJsb2NrIHdpdGhvdXQgdGltZW91dCAqLwogCX0KIAogI2lmZGVmCVVTSU5HX1NNVVhfTU9EVUxFCiAgICAgICAgIGlmIChzbXV4X2xpc3Rlbl9zZCA+PSAwKSB7Ci0gICAgICAgICAgICBGRF9TRVQoc211eF9saXN0ZW5fc2QsICZyZWFkZmRzKTsKKyAgICAgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfU0VUKHNtdXhfbGlzdGVuX3NkLCAmcmVhZGZkcyk7CiAgICAgICAgICAgICBudW1mZHMgPQogICAgICAgICAgICAgICAgIHNtdXhfbGlzdGVuX3NkID49IG51bWZkcyA/IHNtdXhfbGlzdGVuX3NkICsgMSA6IG51bWZkczsKIApAQCAtMTE4NiwyOCArMTI2MSwzNCBAQAogICAgICAgICAgICAgICAgIHNkID0gc211eF9zbm1wX3NlbGVjdF9saXN0X2dldF9TRF9mcm9tX0xpc3QoaSk7CiAgICAgICAgICAgICAgICAgaWYgKHNkICE9IDApCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgIEZEX1NFVChzZCwgJnJlYWRmZHMpOworICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfU0VUKHNkLCAmcmVhZGZkcyk7CiAgICAgICAgICAgICAgICAgICAgbnVtZmRzID0gc2QgPj0gbnVtZmRzID8gc2QgKyAxIDogbnVtZmRzOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBVU0lOR19TTVVYX01PRFVMRSAqLwogCi0gICAgICAgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbygmbnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSCisgICAgICAgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbzIoJm51bWZkcywgJnJlYWRmZHMsICZ3cml0ZWZkcywgJmV4Y2VwdGZkcyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSICovCiAKICAgICByZXNlbGVjdDoKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9TSUdOQUwKICAgICAgICAgZm9yIChpID0gMDsgaSA8IE5VTV9FWFRFUk5BTF9TSUdTOyBpKyspIHsKICAgICAgICAgICAgIGlmIChleHRlcm5hbF9zaWduYWxfc2NoZWR1bGVkW2ldKSB7CiAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfc2lnbmFsX3NjaGVkdWxlZFtpXS0tOwogICAgICAgICAgICAgICAgIGV4dGVybmFsX3NpZ25hbF9oYW5kbGVyW2ldKGkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUdJU1RFUl9TSUdOQUwgKi8KIAogICAgICAgICBERUJVR01TR1RMKCgic25tcGQvc2VsZWN0IiwgInNlbGVjdCggbnVtZmRzPSVkLCAuLi4sIHR2cD0lcClcbiIsCiAgICAgICAgICAgICAgICAgICAgIG51bWZkcywgdHZwKSk7Ci0gICAgICAgIGlmKHR2cCkKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0aW1lciIsICJ0dnAgJWxkLiVsZFxuIiwgdHZwLT50dl9zZWMsIHR2cC0+dHZfdXNlYykpOwotICAgICAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNlcHRmZHMsIHR2cCk7CisgICAgICAgIGlmICh0dnApCisgICAgICAgICAgICBERUJVR01TR1RMKCgidGltZXIiLCAidHZwICVsZC4lbGRcbiIsIChsb25nKSB0dnAtPnR2X3NlYywKKyAgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSB0dnAtPnR2X3VzZWMpKTsKKyAgICAgICAgY291bnQgPSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9zZWxlY3QobnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzLAorCQkJCSAgICAgdHZwKTsKICAgICAgICAgREVCVUdNU0dUTCgoInNubXBkL3NlbGVjdCIsICJyZXR1cm5lZCwgY291bnQgPSAlZFxuIiwgY291bnQpKTsKIAogICAgICAgICBpZiAoY291bnQgPiAwKSB7CkBAIC0xMjE5LDcgKzEzMDAsNyBAQAogICAgICAgICAgICAgaWYgKHNtdXhfbGlzdGVuX3NkID49IDApIHsKICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc211eF9zbm1wX3NlbGVjdF9saXN0X2dldF9sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgICAgICAgICAgICAgIHNkID0gc211eF9zbm1wX3NlbGVjdF9saXN0X2dldF9TRF9mcm9tX0xpc3QoaSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChGRF9JU1NFVChzZCwgJnJlYWRmZHMpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKHNkLCAmcmVhZGZkcykpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbXV4X3Byb2Nlc3Moc2QpIDwgMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNtdXhfc25tcF9zZWxlY3RfbGlzdF9kZWwoc2QpOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTIyOCw3ICsxMzA5LDcgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIG5ldyBjb25uZWN0aW9uIAogICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIGlmIChGRF9JU1NFVChzbXV4X2xpc3Rlbl9zZCwgJnJlYWRmZHMpKSB7CisgICAgICAgICAgICAgICAgaWYgKE5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoc211eF9saXN0ZW5fc2QsICZyZWFkZmRzKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoKHNkID0gc211eF9hY2NlcHQoc211eF9saXN0ZW5fc2QpKSA+PSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBzbXV4X3NubXBfc2VsZWN0X2xpc3RfYWRkKHNkKTsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTIzNiwxMSArMTMxNywxNSBAQAogICAgICAgICAgICAgfQogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFVTSU5HX1NNVVhfTU9EVUxFICovCi0gICAgICAgICAgICBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cygmY291bnQsICZyZWFkZmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ3cml0ZWZkcywgJmV4Y2VwdGZkcyk7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSCisgICAgICAgICAgICBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50czIoJmNvdW50LCAmcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmd3JpdGVmZHMsICZleGNlcHRmZHMpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUiAqLworCiAgICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgc3RpbGwgZXZlbnRzIGxlZnRvdmVyLCBwcm9jZXNzIHRoZW0gKi8KICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHsKLSAgICAgICAgICAgICAgc25tcF9yZWFkKCZyZWFkZmRzKTsKKyAgICAgICAgICAgICAgc25tcF9yZWFkMigmcmVhZGZkcyk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgc3dpdGNoIChjb3VudCkgewpAQCAtMTI2OCw2ICsxMzUzLDExIEBACiAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgIC8qIGVuZGlmIC0tIGNvdW50PjAgKi8KIAogICAgICAgICAvKgorICAgICAgICAgKiBzZWUgaWYgcGVyc2lzdGVudCBzdG9yZSBuZWVkcyB0byBiZSBzYXZlZAorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zdG9yZV9pZl9uZWVkZWQoKTsKKworICAgICAgICAvKgogICAgICAgICAgKiBydW4gcmVxdWVzdGVkIGFsYXJtcyAKICAgICAgICAgICovCiAgICAgICAgIHJ1bl9hbGFybXMoKTsKQEAgLTEyNzYsNiArMTM2NiwxMCBAQAogCiAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlICovCiAKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZyZWFkZmRzKTsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZ3cml0ZWZkcyk7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmZXhjZXB0ZmRzKTsKKwogI2lmIGRlZmluZWQoV0lOMzIpCiAgICAgam9pbl9zdGRpbl93YWl0ZXJfdGhyZWFkKCk7CiAjZW5kaWYKQEAgLTEzNjYsNiArMTQ2MCwxMCBAQAogICAgIGludCAgICAgICAgICAgICBuUnVuVHlwZSA9IFJVTl9BU19DT05TT0xFOwogICAgIGludCAgICAgICAgICAgICBxdWlldCA9IDA7CiAgICAgCisjaWYgMAorICAgIF9DcnRTZXREYmdGbGFnKF9DUlREQkdfQUxMT0NfTUVNX0RGIHwgX0NSVERCR19MRUFLX0NIRUNLX0RGIC8qfCBfQ1JUREJHX0NIRUNLX0FMV0FZU19ERiovKTsKKyNlbmRpZgorCiAgICAgblJ1blR5cGUgPSBQYXJzZUNtZExpbmVGb3JTZXJ2aWNlT3B0aW9uKGFyZ2MsIGFyZ3YsICZxdWlldCk7CiAKICAgICBzd2l0Y2ggKG5SdW5UeXBlKSB7CmRpZmYgLS1naXQgYS9hZ2VudC9zbm1wZC5oIGIvYWdlbnQvc25tcGQuaAppbmRleCA5MzVjMGU3Li44OWJjZDMxIDEwMDY0NAotLS0gYS9hZ2VudC9zbm1wZC5oCisrKyBiL2FnZW50L3NubXBkLmgKQEAgLTIsNiArMiwxMCBAQAogICogc25tcGQuaAogICovCiAKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwogI2RlZmluZSBNQVNURVJfQUdFTlQgMAogI2RlZmluZSBTVUJfQUdFTlQgICAgMQogZXh0ZXJuIGludCAgICAgIGFnZW50X3JvbGU7CkBAIC0xNywzICsyMSw3IEBACiAgKiBjb25maWcgZmlsZSBwYXJzaW5nIHJvdXRpbmVzIAogICovCiB2b2lkICAgICAgICAgICAgYWdlbnRCb290c19jb25mKGNoYXIgKiwgY2hhciAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FwcHMvTWFrZWZpbGUuZGVwZW5kIGIvYXBwcy9NYWtlZmlsZS5kZXBlbmQKaW5kZXggYjkyNzZlOC4uMTVjYjE3NiAxMDA2NDQKLS0tIGEvYXBwcy9NYWtlZmlsZS5kZXBlbmQKKysrIGIvYXBwcy9NYWtlZmlsZS5kZXBlbmQKQEAgLTEsNjIgKzEsMTQwIEBACiAjIERPIE5PVCBERUxFVEUgVEhJUyBMSU5FIC0tIG1ha2UgZGVwZW5kIGRlcGVuZHMgb24gaXQuCiAKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2FnZW50eHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuaAorLi9hZ2VudHh0cmFwLmxvOiAuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgKKy4vYWdlbnR4dHJhcC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9lbmNvZGVfa2V5Y2hhbmdlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY1LDMyICsxNDMsNTIgQEAKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2VuY29kZV9rZXljaGFuZ2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZW5jb2RlX2tleWNoYW5nZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTk4LDI5ICsxOTYsMTMgQEAKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEyOSw2NCArMjExLDY2IEBACiAuL3NubXBidWxrZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcGJ1bGtnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wYnVsa2dldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTk1LDYyICsyNzksNjUgQEAKIC4vc25tcGJ1bGt3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBidWxrd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wYnVsa3dhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjU5LDYxICszNDYsNjIgQEAKIC4vc25tcGRlbHRhLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBkZWx0YS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wZGVsdGEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMzIyLDMzICs0MTAsNTEgQEAKIC4vc25tcGRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBkZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wZGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaApAQCAtMzU2LDI5ICs0NjIsMTMgQEAKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcGdldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTM4Nyw2MyArNDc3LDY2IEBACiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wZ2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBnZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNDUyLDYxICs1NDUsNjMgQEAKIC4vc25tcGdldG5leHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wZ2V0bmV4dC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBnZXRuZXh0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBzZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01MTUsMzMgKzYxMCw1MSBAQAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHNldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTU0OSwyOSArNjYyLDEzIEBACiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBzdGF0dXMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC01ODAsNjIgKzY3Nyw2NSBAQAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHN0YXR1cy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wc3RhdHVzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTY0NCw2MiArNzQ0LDY0IEBACiAuL3NubXB0YWJsZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdGFibGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHRhYmxlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTcwOCwzMyArODEwLDE2MCBAQAogLi9zbm1wdGVzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0ZXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHRlc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdmFyX3N0cnVjdC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NjYWxhci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc2NhbGFyX2dyb3VwLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tdWx0aXBsZXhlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbnVsbC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZGVidWdfaGFuZGxlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvY2FjaGVfaGFuZGxlci5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvb2xkX2FwaS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvcmVhZF9vbmx5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9yb3dfbWVyZ2UuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NlcmlhbGl6ZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYnVsa190b19uZXh0LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tb2RlX2VuZF9jYWxsLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YS5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfZGF0YXNldC5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKKy4vc25tcHRscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9tZmQuaAorLi9zbm1wdGxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB0bHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaAorLi9zbm1wdGxzLmxvOiAuLi9hZ2VudC9taWJncm91cC90bHN0bS1taWIuaAorLi9zbm1wdGxzLmxvOiAuLi9hZ2VudC9taWJncm91cC90bHN0bS1taWIvc25tcFRsc3RtQWRkclRhYmxlL3NubXBUbHN0bUFkZHJUYWJsZS5oCisuL3NubXB0bHMubG86IC4uL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1QYXJhbXNUYWJsZS9zbm1wVGxzdG1QYXJhbXNUYWJsZS5oCisuL3NubXB0bHMubG86IC4uL2FnZW50L21pYmdyb3VwL3Rsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKQEAgLTc0Nyw2NyArOTc2LDYzIEBACiAuL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHRyYW5zbGF0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0cmFuc2xhdGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhbnNsYXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC04MTYsNjIgKzEwNDEsMTM4IEBACiAuL3NubXB0cmFwLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRyYXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wdHJhcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiBzbm1wdHJhcGRfaGFuZGxlcnMuaCBzbm1wdHJhcGRfYXV0aC5oIHNubXB0cmFwZF9kcy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCisuL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaAorLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtODgwLDYgKzExODEsNyBAQAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtOTE2LDkxICsxMjE4LDQ1IEBACiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCiAuL3NubXB0cmFwZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaAogLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfYXJyYXkuaAotLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmggc25tcHRyYXBkX2hhbmRsZXJzLmgKLS4vc25tcHRyYXBkLmxvOiBzbm1wdHJhcGRfbG9nLmggc25tcHRyYXBkX2RzLmggc25tcHRyYXBkX2F1dGguaAorLi9zbm1wdHJhcGQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWZkLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oCisuL3NubXB0cmFwZC5sbzogc25tcHRyYXBkX2hhbmRsZXJzLmggc25tcHRyYXBkX2xvZy5oIHNubXB0cmFwZF9kcy5oCisuL3NubXB0cmFwZC5sbzogc25tcHRyYXBkX2F1dGguaAogLi9zbm1wdHJhcGQubG86IC4uL2FnZW50L21pYmdyb3VwL25vdGlmaWNhdGlvbi1sb2ctbWliL25vdGlmaWNhdGlvbl9sb2cuaAotLi9zbm1wdHJhcGQubG86IC4uL2FnZW50L21pYmdyb3VwL21pYklJL3ZhY21fY29uZi5oIC4uL2FnZW50L3NubXBfcGVybC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXB0cmFwZF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogc25tcHRyYXBkX2hhbmRsZXJzLmggc25tcHRyYXBkX2F1dGguaCBzbm1wdHJhcGRfZHMuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaAotLi9zbm1wdHJhcGRfYXV0aC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmgKLS4vc25tcHRyYXBkX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfdHJhcC5oCisuL3NubXB0cmFwZC5sbzogLi4vYWdlbnQvbWliZ3JvdXAvdGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgKKy4vc25tcHRyYXBkLmxvOiAuLi9hZ2VudC9taWJncm91cC9taWJJSS92YWNtX2NvbmYuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaApAQCAtMTAwOSwxNiArMTI2NSw2IEBACiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaApAQCAtMTAzNiwxOCArMTI4Miw3IEBACiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMDU2LDYgKzEyOTEsNyBAQAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTA5Myw2NyArMTMyOSw2OSBAQAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5LmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21mZC5oCisuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaAogLi9zbm1wdHJhcGRfaGFuZGxlcnMubG86IC4uL2FnZW50L21pYmdyb3VwL3V0aWxpdGllcy9leGVjdXRlLmgKIC4vc25tcHRyYXBkX2hhbmRsZXJzLmxvOiBzbm1wdHJhcGRfaGFuZGxlcnMuaCBzbm1wdHJhcGRfYXV0aC5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogc25tcHRyYXBkX2xvZy5oIHNubXB0cmFwZF9kcy5oCiAuL3NubXB0cmFwZF9oYW5kbGVycy5sbzogLi4vYWdlbnQvbWliZ3JvdXAvbm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHRyYXBkX2xvZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMTYyLDYyICsxNDAwLDY2IEBACiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHJhcGRfbG9nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB0cmFwZF9sb2cubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggc25tcHRyYXBkX2xvZy5oCiAuL3NubXB0cmFwZF9sb2cubG86IHNubXB0cmFwZF9kcy5oCisuL3NubXB0cmFwZF9zcWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcHRyYXBkX3NxbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMjI2LDYyICsxNDY4LDY0IEBACiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTI5MCw2MiArMTUzNCw2NSBAQAogLi9zbm1wdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXB2YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcHZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTEzNTQsNjQgKzE2MDEsNjcgQEAKIC4vc25tcHdhbGsubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wd2Fsay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXB3YWxrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NzaHRvc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTQyMCwxMzMgKzE2NzAsNjggQEAKIC4vc25tcG5ldHN0YXQvaWYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXBuZXRzdGF0L2lmLmxvOiAuL3NubXBuZXRzdGF0L21haW4uaAogLi9zbm1wbmV0c3RhdC9pZi5sbzogLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3NubXBuZXRzdGF0L2luZXQubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oIC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNTU1LDY1ICsxNzQwLDIwNSBAQAogLi9zbm1wbmV0c3RhdC9pbmV0Ni5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBuZXRzdGF0L2luZXQ2LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcG5ldHN0YXQvaW5ldDYubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oIC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wbmV0c3RhdC9pbmV0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXBuZXRzdGF0L2luZXQubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oIC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wbmV0c3RhdC9pbmV0eC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBuZXRzdGF0L2luZXR4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcG5ldHN0YXQvaW5ldHgubG86IC4vc25tcG5ldHN0YXQvbWFpbi5oIC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xNjIyLDY2ICsxOTQ3LDY3IEBACiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL3NubXBuZXRzdGF0L21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmgKLS4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKKy4vc25tcG5ldHN0YXQvbWFpbi5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmggLi9zbm1wbmV0c3RhdC9uZXRzdGF0LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE2OTAsNjYgKzIwMTYsMTM2IEBACiAuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcG5ldHN0YXQvcm91dGUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wbmV0c3RhdC9yb3V0ZS5sbzogLi9zbm1wbmV0c3RhdC9tYWluLmgKLS4vc25tcG5ldHN0YXQvcm91dGUubG86IC4vc25tcG5ldHN0YXQvbmV0c3RhdC5oCisuL3NubXBuZXRzdGF0L3JvdXRlLmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L3JvdXRleC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wbmV0c3RhdC9yb3V0ZXgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcG5ldHN0YXQvcm91dGV4LmxvOiAuL3NubXBuZXRzdGF0L21haW4uaCAuL3NubXBuZXRzdGF0L25ldHN0YXQuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9zbm1wbmV0c3RhdC93aW5zdHViLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMTc1OCw0ICsyMTU0LDUgQEAKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBuZXRzdGF0L3dpbnN0dWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vc25tcG5ldHN0YXQvd2luc3R1Yi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaApkaWZmIC0tZ2l0IGEvYXBwcy9NYWtlZmlsZS5pbiBiL2FwcHMvTWFrZWZpbGUuaW4KaW5kZXggMTgxZDNmZi4uNzc0MDRkZCAxMDA2NDQKLS0tIGEvYXBwcy9NYWtlZmlsZS5pbgorKysgYi9hcHBzL01ha2VmaWxlLmluCkBAIC00LDYgKzQsNyBAQAogIwogCiB0b3BfYnVpbGRkaXI9Li4KK215c3ViZGlyPWFwcHMKIAogIyB1c2UgR05VIHZwYXRoLCBpZiBhdmFpbGFibGUsIHRvIG9ubHkgc2V0IGEgcGF0aCBmb3Igc291cmNlIGFuZCBoZWFkZXJzCiAjIFZQQVRIIHdpbGwgcGljayB1cCBvYmplY3RzIHRvbywgd2hpY2ggaXMgYmFkIGlmIHlvdSBhcmUgc2hhcmluZyBhCkBAIC0xNywxMCArMTgsMzcgQEAKICMgVGhpbmdzIHRvIGluc3RhbGwKICMKIAorQE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRUBTU0hJTlNUQUxMQklOUFJPRyA9IHNzaHRvc25tcCQoRVhFRVhUKQorQE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0VAU1NISU5TVEFMTEJJTlBST0cgPQorQE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRUBTU0hGRUFUVVJFUFJPRyA9IHNzaHRvc25tcC5mdAorQE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0VAU1NIRkVBVFVSRVBST0cgPQorQE5FVFNOTVBfQlVJTERfVExTX1BST0dfVFJVRUBUTFNJTlNUQUxMQklOUFJPRyA9IHNubXB0bHMkKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFQFRMU0lOU1RBTExCSU5QUk9HID0KK0BORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUVAVExTRkVBVFVSRVBST0cgPSBzbm1wdGxzLmZ0CitATkVUU05NUF9CVUlMRF9UTFNfUFJPR19GQUxTRUBUTFNGRUFUVVJFUFJPRyA9CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFQFVTTUlOU1RBTExCSU5QUk9HID0gc25tcHVzbSQoRVhFRVhUKQorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0VAVVNNSU5TVEFMTEJJTlBST0cgPQorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRUBVU01GRUFUVVJFUFJPRyA9IHNubXB1c20uZnQKK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFQFVTTUZFQVRVUkVQUk9HID0KK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUVARUtDU1RBTExCSU5QUk9HID0gZW5jb2RlX2tleWNoYW5nZSQoRVhFRVhUKQorQE5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0VARUtDU1RBTExCSU5QUk9HID0KK0BORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUVARUtDRkVBVFVSRVBST0cgPSBlbmNvZGVfa2V5Y2hhbmdlLmZ0CitATkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRUBFS0NGRUFUVVJFUFJPRyA9CitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFQFNOTVBTRVRJTlNUQUxMQklOUFJPRyA9IHNubXBzZXQkKEVYRUVYVCkKK0BORVRTTk1QX0JVSUxEX1NFVF9QUk9HX0ZBTFNFQFNOTVBTRVRJTlNUQUxMQklOUFJPRyA9IAorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRUBTTk1QU0VURkVBVFVSRVBST0cgPSBzbm1wc2V0LmZ0CitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRUBTTk1QU0VURkVBVFVSRVBST0cgPSAKK0BORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUVAU05NUFZBQ01JTlNUQUxMQklOUFJPRyA9IHNubXB2YWNtJChFWEVFWFQpCitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRUBTTk1QVkFDTUlOU1RBTExCSU5QUk9HID0gCitATkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFQFNOTVBWQUNNRkVBVFVSRVBST0cgPSBzbm1wdmFjbS5mdAorQE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0VAU05NUFZBQ01GRUFUVVJFUFJPRyA9IAorCitATkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUVAQUdFTlRYVFJBUCA9IGFnZW50eHRyYXAkKEVYRUVYVCkKK0BORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0VAQUdFTlRYVFJBUCA9CisKIElOU1RBTExCSU5QUk9HUwk9IHNubXBnZXQkKEVYRUVYVCkgCQkJXAogCQlzbm1wZ2V0bmV4dCQoRVhFRVhUKSAJCQlcCi0JCXNubXBzZXQkKEVYRUVYVCkgCQkJXAotCQlzbm1wdXNtJChFWEVFWFQpCQkJXAorCQkkKFNOTVBTRVRJTlNUQUxMQklOUFJPRykJICAgICAgICBcCiAJCXNubXB3YWxrJChFWEVFWFQpIAkJCVwKIAkJc25tcGJ1bGt3YWxrJChFWEVFWFQpIAkJCVwKIAkJc25tcHRhYmxlJChFWEVFWFQpCQkJXApAQCAtMzAsOSArNTgsMTEgQEAKIAkJc25tcHN0YXR1cyQoRVhFRVhUKSAJCQlcCiAJCXNubXBkZWx0YSQoRVhFRVhUKSAJCQlcCiAJCXNubXB0ZXN0JChFWEVFWFQpCQkJXAotCQllbmNvZGVfa2V5Y2hhbmdlJChFWEVFWFQpIAkJXAogCQlzbm1wZGYkKEVYRUVYVCkgCQkJXAotCQlzbm1wdmFjbSQoRVhFRVhUKQorCQkkKEFHRU5UWFRSQVApCQkJCVwKKwkJJChTTk1QVkFDTUlOU1RBTExCSU5QUk9HKQkgICAgICAgIFwKKyAgICAgICAgICAgICAgICAkKFNTSElOU1RBTExCSU5QUk9HKSAkKFRMU0lOU1RBTExCSU5QUk9HKSBcCisJCSQoVVNNSU5TVEFMTEJJTlBST0cpICQoRUtDU1RBTExCSU5QUk9HKQogCiBJTlNUQUxMU0JJTlBST0dTID0gc25tcHRyYXBkJChFWEVFWFQpCiAKQEAgLTQwLDQxICs3MCw2OSBAQAogCiBTVUJESVJTCQk9IHNubXBuZXRzdGF0CiAKK0ZFQVRVUkVGSUxFPS4uL2luY2x1ZGUvbmV0LXNubXAvZmVhdHVyZXMtYXBwcy5oCisKICMKICMgYnVpbGQgdmFyaWFibGVzLgogIwogCiAjIFVTRUxJQlMvVVNFQUdFTlRMSUJTIGFyZSBmb3IgZGVwZW5kZW5jaWVzCiBVU0VMSUJTCQk9IC4uL3NubXBsaWIvbGlibmV0c25tcC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTikgCi1IRUxQRVJMSUIgICAgICAgPSAuLi9hZ2VudC9oZWxwZXJzL2xpYm5ldHNubXBoZWxwZXJzLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogQUdFTlRMSUIgICAgICAgID0gLi4vYWdlbnQvbGlibmV0c25tcGFnZW50LiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKQogTUlCTElCICAgICAgICAgID0gLi4vYWdlbnQvbGlibmV0c25tcG1pYnMuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1VU0VBR0VOVExJQlMJPSAkKE1JQkxJQikgJChBR0VOVExJQikgJChIRUxQRVJMSUIpICQoVVNFTElCUykKK1VTRUFHRU5UTElCUwk9ICQoTUlCTElCKSAkKEFHRU5UTElCKSAkKFVTRUxJQlMpCitNWVNRTF9MSUJTCT0gQE1ZU1FMX0xJQlNACitNWVNRTF9JTkNMVURFUwk9IEBNWVNRTF9JTkNMVURFU0AKIAotTElCUwkJPSAkKFVTRUxJQlMpIEBMSUJTQAorVkFMX0xJQlMJPSBAVkFMX0xJQlNACitMSUJTCQk9ICQoVVNFTElCUykgJChWQUxfTElCUykgQExJQlNACiBQRVJMTERPUFRTX0ZPUl9BUFBTID0gQFBFUkxMRE9QVFNfRk9SX0FQUFNACiBQRVJMTERPUFRTX0ZPUl9MSUJTID0gQFBFUkxMRE9QVFNfRk9SX0xJQlNACiAKICMKICMgaGFjayBmb3IgY29tcGlsaW5nIHRyYXBkIHdoZW4gYWdlbnQgaXMgZGlzYWJsZWQKLVRSQVBEV0lUSEFHRU5UICA9ICQoVVNFVFJBUExJQlMpIEBBR0VOVExJQlNACi1UUkFQRFdJVEhPVVRBR0VOVCA9ICQoTElCUykKK1RSQVBEV0lUSEFHRU5UICA9ICQoVVNFVFJBUExJQlMpICQoTVlTUUxfTElCUykgJChWQUxfTElCUykgQEFHRU5UTElCU0AKK1RSQVBEV0lUSE9VVEFHRU5UID0gJChMSUJTKSAkKE1ZU1FMX0xJQlMpICQoVkFMX0xJQlMpCiAKICMgdGhlc2Ugd2lsbCBiZSBzZXQgYnkgY29uZmlndXJlIHRvIG9uZSBvZiB0aGUgYWJvdmUgMiBsaW5lcwogVFJBUExJQlMJPSBAVFJBUExJQlNAICQoUEVSTExET1BUU19GT1JfQVBQUykKIFVTRVRSQVBMSUJTCT0gQFVTRVRSQVBMSUJTQAogCiBDUFBGTEFHUwk9ICQoVE9QX0lOQ0xVREVTKSAtSS4gJChBR0VOVF9JTkNMVURFUykgJChIRUxQRVJfSU5DTFVERVMpIFwKLQkJICAkKE1JQkdST1VQX0lOQ0xVREVTKSAgJChTTk1QTElCX0lOQ0xVREVTKSBAQ1BQRkxBR1NACisJCSAgJChNSUJHUk9VUF9JTkNMVURFUykgIFwKKwkJICAkKFNOTVBMSUJfSU5DTFVERVMpICQoTVlTUUxfSU5DTFVERVMpIEBDUFBGTEFHU0AKIAogT1NVRkZJWAkJPSBsbwogVFJBUERfT0JKRUNUUyAgID0gc25tcHRyYXBkLiQoT1NVRkZJWCkgQG90aGVyX3RyYXBkX29iamVjdHNACiBMSUJUUkFQRF9PQkpTICAgPSBzbm1wdHJhcGRfaGFuZGxlcnMubyAgc25tcHRyYXBkX2xvZy5vIFwKLQkJICBzbm1wdHJhcGRfYXV0aC5vCisJCSAgc25tcHRyYXBkX2F1dGgubyBzbm1wdHJhcGRfc3FsLm8KIExMSUJUUkFQRF9PQkpTICA9IHNubXB0cmFwZF9oYW5kbGVycy5sbyBzbm1wdHJhcGRfbG9nLmxvIFwKLQkJICBzbm1wdHJhcGRfYXV0aC5sbworCQkgIHNubXB0cmFwZF9hdXRoLmxvIHNubXB0cmFwZF9zcWwubG8KK0xJQlRSQVBEX0ZUUyAgICA9IHNubXB0cmFwZF9oYW5kbGVycy5mdCBzbm1wdHJhcGRfbG9nLmZ0IFwKKwkJICBzbm1wdHJhcGRfYXV0aC5mdCBzbm1wdHJhcGRfc3FsLmZ0CiBPQkpTICA9ICoubwogTE9CSlMgPSAqLmxvCitGVE9CSlM9JChMSUJUUkFQRF9GVFMpIFwKKyAgICAgICBzbm1wd2Fsay5mdCBcCisgICAgICAgc25tcGJ1bGt3YWxrLmZ0IFwKKyAgICAgICBzbm1wYnVsa2dldC5mdCBcCisgICAgICAgc25tcHRyYW5zbGF0ZS5mdCBcCisgICAgICAgc25tcHN0YXR1cy5mdCBcCisgICAgICAgc25tcGdldC5mdCBcCisgICAgICAgc25tcGRlbHRhLmZ0IFwKKyAgICAgICBzbm1wdGFibGUuZnQgXAorICAgICAgIHNubXB0ZXN0LmZ0IFwKKyAgICAgICBzbm1wdHJhcGQuZnQgXAorICAgICAgIHNubXB0cmFwLmZ0IFwKKyAgICAgICAkKFNOTVBTRVRGRUFUVVJFUFJPRykgXAorICAgICAgICQoU05NUFZBQ01GRUFUVVJFUFJPRykgXAorICAgICAgICQoVVNNRkVBVFVSRVBST0cpIFwKKyAgICAgICAkKFRMU0ZFQVRVUkVQUk9HKSBcCisgICAgICAgYWdlbnR4dHJhcC5mdCBcCisgICAgICAgc25tcGdldG5leHQuZnQgXAorICAgICAgICQoRUtDRkVBVFVSRVBST0cpIFwKKyAgICAgICBzbm1wZGYuZnQgXAorICAgICAgICQoU1NIRkVBVFVSRVBST0cpCiAKIGFsbDogc3RhbmRhcmRhbGwKIApAQCAtMTMwLDYgKzE4OCwxMiBAQAogc25tcHZhY20kKEVYRUVYVCk6ICAgIHNubXB2YWNtLiQoT1NVRkZJWCkgJChVU0VMSUJTKQogCSQoTElOSykgJHtDRkxBR1N9IC1vICRAIHNubXB2YWNtLiQoT1NVRkZJWCkgJHtMREZMQUdTfSAke0xJQlN9CiAKK3NubXB0bHMkKEVYRUVYVCk6ICAgIHNubXB0bHMuJChPU1VGRklYKSAkKFVTRUxJQlMpCisJJChMSU5LKSAke0NGTEFHU30gLW8gJEAgc25tcHRscy4kKE9TVUZGSVgpICR7TERGTEFHU30gJHtMSUJTfSAKKworYWdlbnR4dHJhcCQoRVhFRVhUKTogICAgYWdlbnR4dHJhcC4kKE9TVUZGSVgpICQoVVNFQUdFTlRMSUJTKQorCSQoTElOSykgJHtDRkxBR1N9IC1vICRAIGFnZW50eHRyYXAuJChPU1VGRklYKSAke0xERkxBR1N9ICQoVVNFQUdFTlRMSUJTKSAkKFBFUkxMRE9QVFNfRk9SX0FQUFMpICR7TElCU30KKwogc25tcGdldG5leHQkKEVYRUVYVCk6ICAgIHNubXBnZXRuZXh0LiQoT1NVRkZJWCkgJChVU0VMSUJTKQogCSQoTElOSykgJHtDRkxBR1N9IC1vICRAIHNubXBnZXRuZXh0LiQoT1NVRkZJWCkgJHtMREZMQUdTfSAke0xJQlN9CiAKQEAgLTE1OCw1ICsyMjIsOSBAQAogCSAgQHJtIC1mICQoSU5TVEFMTF9QUkVGSVgpJChzbm1wbGliZGlyKS9zbm1wX3BlcmxfdHJhcGQucGwKIAkgIEBlY2hvICJyZW1vdmVkIHNubXBfcGVybF90cmFwZC5wbCBmcm9tICQoSU5TVEFMTF9QUkVGSVgpJChzbm1wbGliZGlyKSIKIAorc3NodG9zbm1wJChFWEVFWFQpOiBzc2h0b3NubXAuJChPU1VGRklYKQorCSQoTElOSykgJHtDRkxBR1N9IC1vICRAIHNzaHRvc25tcC4kKE9TVUZGSVgpCisKKwogaW5zdGFsbGRpcnM6CiAJQCQoU0hFTEwpICQoc3JjZGlyKS8uLi9ta2luc3RhbGxkaXJzICQoSU5TVEFMTF9QUkVGSVgpJChzbm1wbGliZGlyKQpkaWZmIC0tZ2l0IGEvYXBwcy9hZ2VudHh0cmFwLmMgYi9hcHBzL2FnZW50eHRyYXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGY0MjNjCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9hZ2VudHh0cmFwLmMKQEAgLTAsMCArMSw2MTIgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpZmRlZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+IC8qIG9wdGluZCwgb3B0YXJnIGFuZCBvcHRvcHQgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oPgorCisjaW5jbHVkZSAiLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L2FnZW50eF9jb25maWcuaCIKKyNpbmNsdWRlICIuLi9hZ2VudC9taWJncm91cC9hZ2VudHgvY2xpZW50LmgiCisjaW5jbHVkZSAiLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmgiCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNubXBfc3BsaXRfcGR1KQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25tcF9yZXNldF92YXJfdHlwZXMpCisKKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgVU5VU0VECisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IG9pZCBzeXN1cHRpbWVfb2lkW107CitleHRlcm4gY29uc3Qgc2l6ZV90IHN5c3VwdGltZV9vaWRfbGVuOworZXh0ZXJuIGNvbnN0IG9pZCBzbm1wdHJhcF9vaWRbXTsKK2V4dGVybiBjb25zdCBzaXplX3Qgc25tcHRyYXBfb2lkX2xlbjsKKworc3RhdGljIHZvaWQKK3VzYWdlKGNvbnN0IGNoYXIqIHByb2duYW1lKQoreworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIlVTQUdFOiAlcyBbT1BUSU9OU10gVFJBUC1QQVJBTUVURVJTXG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiICBWZXJzaW9uOiAgJXNcbiIKKyAgICAgICAgICAgICIgIFdlYjogICAgICBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9cbiIKKyAgICAgICAgICAgICIgIEVtYWlsOiAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XG4iCisgICAgICAgICAgICAiXG4iCisgICAgICAgICAgICAiT1BUSU9OUzpcbiIsIHByb2duYW1lLCBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOworCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiICAtaFx0XHRcdGRpc3BsYXkgdGhpcyBoZWxwIG1lc3NhZ2VcbiIKKyAgICAgICAgICAgICIgIC1WXHRcdFx0ZGlzcGxheSBwYWNrYWdlIHZlcnNpb24gbnVtYmVyXG4iCisgICAgICAgICAgICAiICAtbSBNSUJbIiBFTlZfU0VQQVJBVE9SICIuLi5dXHRcdGxvYWQgZ2l2ZW4gbGlzdCBvZiBNSUJzIChBTEwgbG9hZHMgIgorICAgICAgICAgICAgImV2ZXJ5dGhpbmcpXG4iCisgICAgICAgICAgICAiICAtTSBESVJbIiBFTlZfU0VQQVJBVE9SICIuLi5dXHRcdGxvb2sgaW4gZ2l2ZW4gbGlzdCBvZiBkaXJlY3RvcmllcyBmb3IgTUlCc1xuIgorICAgICAgICAgICAgIiAgLURbVE9LRU5bLC4uLl1dXHR0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBzcGVjaWZpZWQgIgorICAgICAgICAgICAgIlRPS0VOc1xuIgorICAgICAgICAgICAgIlx0XHRcdCAgIChBTEwgZ2l2ZXMgZXh0cmVtZWx5IHZlcmJvc2UgZGVidWdnaW5nIG91dHB1dClcbiIKKyAgICAgICAgICAgICIgIC1kXHRcdFx0ZHVtcCBhbGwgdHJhZmZpY1xuIik7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIiAgLVAgTUlCT1BUU1x0XHRUb2dnbGUgdmFyaW91cyBkZWZhdWx0cyBjb250cm9sbGluZyBtaWIgIgorICAgICAgICAgICAgInBhcnNpbmc6XG4iKTsKKyAgICBzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZSgiXHRcdFx0ICAiLCBzdGRlcnIpOworI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIiAgLUwgTE9HT1BUU1x0XHRUb2dnbGUgdmFyaW91cyBkZWZhdWx0cyBjb250cm9sbGluZyBsb2dnaW5nOlxuIik7CisgICAgc25tcF9sb2dfb3B0aW9uc191c2FnZSgiXHRcdFx0ICAiLCBzdGRlcnIpOworCisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiICAtYyBjb250ZXh0XG4iCisgICAgICAgICAgICAiICAtVSB1cHRpbWVcbiIKKyAgICAgICAgICAgICIgIC14IEFERFJFU1NcdFx0dXNlIEFERFJFU1MgYXMgQWdlbnRYIGFkZHJlc3NcbiIKKyAgICAgICAgICAgICJcbiIKKyAgICAgICAgICAgICJUUkFQLVBBUkFNRVRFUlM6XG4iCisgICAgICAgICAgICAiICB0cmFwb2lkIFtPSUQgVFlQRSBWQUxVRV0gLi4uXG4iKTsKK30KKworc3RydWN0IHRTdGF0ZV9zOwordHlwZWRlZiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MqIHRTdGF0ZTsKK3N0cnVjdCB0U3RhdGVfcyB7CisgICAgdm9pZCAoKmVudHJ5KSh0U3RhdGUgc2VsZik7IC8qKjw8IFN0YXRlIGVudHJ5IGFjdGlvbiAqLworICAgIHZvaWQgKCpleGl0KSh0U3RhdGUgc2VsZik7IC8qKjw8IFN0YXRlIGV4aXQgYWN0aW9uICovCisgICAgLyoqIEhhbmRsZXIgZm9yIEFnZW50WC1SZXNwb25zZS1QRFUncyAqLworICAgIHZvaWQgKCpyZXNwb25zZSkodFN0YXRlIHNlbGYsIG5ldHNubXBfcGR1ICpyZXMpOworICAgIC8qKiBTdGF0ZSB0byBjaGFuZ2UgdG8gaWYgYW4gQWdlbnRYIHRpbWVvdXQgb2NjdXJzIG9yIHRoZSB0aW1lciBydW5zIG91dCAqLworICAgIHRTdGF0ZSB0aW1lb3V0OworICAgIHZvaWQgKCpkaXNjb25uZWN0KSh0U3RhdGUgc2VsZik7IC8qKjw8IEhhbmRsZXIgZm9yIGRpc2Nvbm5lY3QgaW5kaWNhdGlvbnMgKi8KKyAgICAvKiogSGFuZGxlciBmb3IgQ2xvc2UtUERVIGluZGljYXRpb25zICovCisgICAgdm9pZCAoKmNsb3NlKSh0U3RhdGUgc2VsZiwgbmV0c25tcF9wZHUgKnJlcyk7CisgICAgY29uc3QgY2hhciogbmFtZTsgLyoqPDwgTmFtZSBvZiB0aGUgY3VycmVudCBzdGF0ZSAqLworICAgIGludCBpc19vcGVuOyAvKio8PCBJZiB0aGUgY29ubmVjdGlvbiBpcyBvcGVuIGluIHRoaXMgc3RhdGUgKi8KK307CisKK3N0YXRpYyB0U3RhdGUgc3RhdGU7IC8qKjw8IEN1cnJlbnQgc3RhdGUgb2YgdGhlIHN0YXRlIG1hY2hpbmUgKi8KK3N0YXRpYyB0U3RhdGUgbmV4dF9zdGF0ZTsgLyoqPDwgTmV4dCBzdGF0ZSBvZiB0aGUgc3RhdGUgbWFjaGluZSAqLworCitzdGF0aWMgY29uc3QgY2hhciAgKmNvbnRleHQgPSBOVUxMOyAvKio8PCBDb250ZXh0IHRoYXQgZGVsaXZlcnMgdGhlIHRyYXAgKi8KK3N0YXRpYyBzaXplX3QgICAgICAgY29udGV4dExlbjsgLyoqPDwgTGVuZ3RoIG9mIGV2ZW50dWFsIGNvbnRleHQgKi8KK3N0YXRpYyBpbnQgICAgICAgICAgcmVzdWx0ID0gMTsgLyoqPDwgUHJvZ3JhbSByZXR1cm4gdmFsdWUgKi8KK3N0YXRpYyBuZXRzbm1wX3BkdSAqcGR1ID0gTlVMTDsgLyoqPDwgVGhlIHRyYXAgcGR1IHRoYXQgaXMgdG8gYmUgc2VudCAqLworLyoqIFRoZSByZWZlcmVuY2UgbnVtYmVyIG9mIHRoZSBuZXh0IHBhY2tldCAqLworc3RhdGljIGxvbmcgICAgICAgICBwYWNrZXRpZCA9IDA7CisvKiogVGhlIHNlc3Npb24gaWQgb2YgdGhlIHNlc3Npb24gdG8gdGhlIG1hc3RlciAqLworc3RhdGljIGxvbmcgICAgICAgICBzZXNzaW9uOworc3RhdGljIHZvaWQgICAgICAgICpzZXNzcCA9IE5VTEw7IC8qKjw8IFRoZSBjdXJyZW50IGNvbW11bmljYXRpb24gc2Vzc2lvbiAqLworCisjZGVmaW5lIFNUQVRFX0NBTEwobWV0aG9kKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYoIXN0YXRlLT5tZXRob2QpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJObyAiICNtZXRob2QgIiBtZXRob2QgaW4gJXMsIHRlcm1pbmF0aW5nXG4iLCBcCisgICAgICAgICAgICAgICAgIHN0YXRlLT5uYW1lKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGFib3J0KCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHN0YXRlLT5tZXRob2QKKworc3RhdGljIHZvaWQKK2NoYW5nZV9zdGF0ZSh0U3RhdGUgbmV3X3N0YXRlKQoreworICAgIGlmIChuZXh0X3N0YXRlICYmIG5leHRfc3RhdGUgIT0gbmV3X3N0YXRlKQorICAgICAgICBERUJVR01TR1RMKCgicHJvY2VzcyIsICJJZ25vcmUgdHJhbnNpdGlvbiB0byAlc1xuIiwgbmV4dF9zdGF0ZS0+bmFtZSkpOworICAgIG5leHRfc3RhdGUgPSBuZXdfc3RhdGU7Cit9CisKK3N0YXRpYyBpbnQKK2hhbmRsZV9hZ2VudHhfcmVzcG9uc2UoaW50IG9wZXJhdGlvbiwgbmV0c25tcF9zZXNzaW9uICpzcCwgVU5VU0VEIGludCByZXFpZCwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKmFjdCwgVU5VU0VEIHZvaWQgKm1hZ2ljKQoreworICAgIHN3aXRjaChvcGVyYXRpb24pIHsKKyAgICBjYXNlIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRToKKyAgICAgICAgaWYoYWN0LT5jb21tYW5kID09IEFHRU5UWF9NU0dfQ0xFQU5VUFNFVCkgeworICAgICAgICAgICAgLyogRG8gbm90aGluZyAtIG5vIHJlc3BvbnNlIGFuZCBubyBhY3Rpb24gYXMgbm90aGluZyBnZXQKKyAgICAgICAgICAgICAqIGFsbG9jYXRlZCBpbiBhbnkgaGFuZGxlciBoZXJlCisgICAgICAgICAgICAgKi8KKyAgICAgICAgfSBlbHNlIGlmKGFjdC0+Y29tbWFuZCAhPSBBR0VOVFhfTVNHX1JFU1BPTlNFKSB7CisgICAgICAgICAgICAvKiBDb3B5IHRoZSBoZWFkIHRvIGEgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgIG5ldHNubXBfcGR1KiByZXMgPSBzbm1wX3NwbGl0X3BkdShhY3QsIDAsIDApOworICAgICAgICAgICAgcmVzLT5jb21tYW5kID0gQUdFTlRYX01TR19SRVNQT05TRTsKKyAgICAgICAgICAgIGlmIChhY3QtPnNlc3NpZCAhPSBzZXNzaW9uIHx8ICFzdGF0ZS0+aXNfb3BlbikKKyAgICAgICAgICAgICAgICByZXMtPmVycnN0YXQgPSBBR0VOVFhfRVJSX05PVF9PUEVOOworICAgICAgICAgICAgaWYocmVzLT5lcnJzdGF0ID09IEFHRU5UWF9FUlJfTk9FUlJPUikKKyAgICAgICAgICAgICAgICBzd2l0Y2goYWN0LT5jb21tYW5kKSB7CisgICAgICAgICAgICAgICAgY2FzZSBBR0VOVFhfTVNHX0dFVDoKKyAgICAgICAgICAgICAgICAgICAgcmVzLT52YXJpYWJsZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoYWN0LT52YXJpYWJsZXMpOworICAgICAgICAgICAgICAgICAgICBzbm1wX3Jlc2V0X3Zhcl90eXBlcyhyZXMtPnZhcmlhYmxlcywgU05NUF9OT1NVQ0hPQkpFQ1QpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfR0VUTkVYVDoKKyAgICAgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfR0VUQlVMSzoKKyAgICAgICAgICAgICAgICAgICAgcmVzLT52YXJpYWJsZXMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoYWN0LT52YXJpYWJsZXMpOworICAgICAgICAgICAgICAgICAgICBzbm1wX3Jlc2V0X3Zhcl90eXBlcyhyZXMtPnZhcmlhYmxlcywgU05NUF9FTkRPRk1JQlZJRVcpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfVEVTVFNFVDoKKyAgICAgICAgICAgICAgICAgICAgcmVzLT5lcnJzdGF0ID0gU05NUF9FUlJfTk9UV1JJVEFCTEU7CisgICAgICAgICAgICAgICAgICAgIHJlcy0+ZXJyaW5kZXggPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfQ09NTUlUU0VUOgorICAgICAgICAgICAgICAgICAgICByZXMtPmVycnN0YXQgPSBTTk1QX0VSUl9DT01NSVRGQUlMRUQ7CisgICAgICAgICAgICAgICAgICAgIHJlcy0+ZXJyaW5kZXggPSAxOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfVU5ET1NFVDoKKyAgICAgICAgICAgICAgICAgICAgLyogU3VjY2VzcyAtIGNvdWxkIHVuZG8gbm90IHNldHRpbmcgYW55IHZhbHVlIDotKSAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEFHRU5UWF9NU0dfQ0xPU0U6CisgICAgICAgICAgICAgICAgICAgIC8qIEFsd2F5cyBsZXQgdGhlIG1hc3RlciBzdWNjZWVkISAqLworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAvKiBVbmtub3duIGNvbW1hbmQgKi8KKyAgICAgICAgICAgICAgICAgICAgcmVzLT5lcnJzdGF0ID0gQUdFTlRYX0VSUl9QQVJTRV9GQUlMRUQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKHNubXBfc2VuZChzcCwgcmVzKSA9PSAwKQorICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocmVzKTsKKyAgICAgICAgICAgIHN3aXRjaChhY3QtPmNvbW1hbmQpIHsKKyAgICAgICAgICAgIGNhc2UgQUdFTlRYX01TR19DTE9TRToKKyAgICAgICAgICAgICAgICAvKiBUYWtlIGFjdGlvbiBvbmNlIHRoZSBhbnN3ZXIgaXMgc2VudCEgKi8KKyAgICAgICAgICAgICAgICBTVEFURV9DQUxMKGNsb3NlKShzdGF0ZSwgYWN0KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgLyogRG8gbm90aGluZyAqLworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIC8qIFJFU1BPTlNFIGFjdC0+dGltZSwgYWN0LT5lcnJzdGF0LCBhY3QtPmVycmluZGV4LCB2YXJsaXN0ICovCisgICAgICAgICAgICBTVEFURV9DQUxMKHJlc3BvbnNlKShzdGF0ZSwgYWN0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVDoKKyAgICAgICAgY2hhbmdlX3N0YXRlKHN0YXRlLT50aW1lb3V0KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBORVRTTk1QX0NBTExCQUNLX09QX0RJU0NPTk5FQ1Q6CisgICAgICAgIFNUQVRFX0NBTEwoZGlzY29ubmVjdCkoc3RhdGUpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgQ29ubmVjdGluZzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgT3BlbmluZzsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgTm90aWZ5aW5nOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0U3RhdGVfcyBDbG9zaW5nOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0U3RhdGVfcyBEaXNjb25uZWN0aW5nOworZXh0ZXJuIGNvbnN0IHN0cnVjdCB0U3RhdGVfcyBFeGl0OworCitzdGF0aWMgdm9pZAorU3RhdGVEaXNjb25uZWN0KFVOVVNFRCB0U3RhdGUgc2VsZikKK3sKKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVW5leHBlY3RlZCBkaXNjb25uZWN0IGluIHN0YXRlICVzXG4iLCBzZWxmLT5uYW1lKTsKKyAgICBjaGFuZ2Vfc3RhdGUoJkRpc2Nvbm5lY3RpbmcpOworfQorCitzdGF0aWMgdm9pZAorU3RhdGVDbG9zZShVTlVTRUQgdFN0YXRlIHNlbGYsIG5ldHNubXBfcGR1ICphY3QpCit7CisgICAgc25tcF9sb2coTE9HX0VSUiwgIlVuZXhwZWN0ZWQgY2xvc2Ugd2l0aCByZWFzb24gY29kZSAlbGQgaW4gc3RhdGUgJXNcbiIsCisgICAgICAgICAgICAgYWN0LT5lcnJzdGF0LCBzZWxmLT5uYW1lKTsKKyAgICBjaGFuZ2Vfc3RhdGUoJkRpc2Nvbm5lY3RpbmcpOworfQorCitzdGF0aWMgdm9pZAorQ29ubmVjdGluZ0VudHJ5KFVOVVNFRCB0U3RhdGUgc2VsZikKK3sKKyAgICBuZXRzbm1wX3Nlc3Npb24gaW5pdDsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCogdDsKKyAgICB2b2lkKiBzZXNzOworCisgICAgaWYoc2Vzc3ApIHsKKyAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNlc3NwKTsKKyAgICAgICAgc2Vzc3AgPSBOVUxMOworICAgIH0KKworICAgIHNubXBfc2Vzc19pbml0KCZpbml0KTsKKyAgICBpbml0LnZlcnNpb24gPSBBR0VOVFhfVkVSU0lPTl8xOworICAgIGluaXQucmV0cmllcyA9IDA7IC8qIFJldHJpZXMgYXJlIGhhbmRsZWQgYnkgdGhlIHN0YXRlIG1hY2hpbmUgKi8KKyAgICBpbml0LnRpbWVvdXQgPSBTTk1QX0RFRkFVTFRfVElNRU9VVDsKKyAgICBpbml0LmZsYWdzIHw9IFNOTVBfRkxBR1NfU1RSRUFNX1NPQ0tFVDsKKyAgICBpbml0LmNhbGxiYWNrID0gaGFuZGxlX2FnZW50eF9yZXNwb25zZTsKKyAgICBpbml0LmF1dGhlbnRpY2F0b3IgPSBOVUxMOworCisgICAgaWYoISh0ID0gbmV0c25tcF90cmFuc3BvcnRfb3Blbl9jbGllbnQoCisgICAgICAgICAgICAgImFnZW50eCIsIG5ldHNubXBfZHNfZ2V0X3N0cmluZygKKyAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tFVCkpKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGNvbm5lY3QgdG8gQWdlbnRYIHNlcnZlclxuIik7CisgICAgICAgIGNoYW5nZV9zdGF0ZSgmRXhpdCk7CisgICAgfSBlbHNlIGlmKCEoc2VzcyA9IHNubXBfc2Vzc19hZGRfZXgoCisgICAgICAgICAgICAgICAgICAgICZpbml0LCB0LCBOVUxMLCBhZ2VudHhfcGFyc2UsIE5VTEwsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgIGFnZW50eF9yZWFsbG9jX2J1aWxkLCBhZ2VudHhfY2hlY2tfcGFja2V0LCBOVUxMKSkpIHsKKyAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gY3JlYXRlIHNlc3Npb25cbiIpOworICAgICAgICBjaGFuZ2Vfc3RhdGUoJkV4aXQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNlc3NwID0gc2VzczsKKyAgICAgICAgY2hhbmdlX3N0YXRlKCZPcGVuaW5nKTsKKyAgICB9Cit9CisKK2NvbnN0IHN0cnVjdCB0U3RhdGVfcyBDb25uZWN0aW5nID0geworICAgIENvbm5lY3RpbmdFbnRyeSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBTdGF0ZURpc2Nvbm5lY3QsCisgICAgTlVMTCwKKyAgICAiQ29ubm5lY3RpbmciLAorICAgIDAKK307CisKK3N0YXRpYyBuZXRzbm1wX3BkdSoKK3BkdV9jcmVhdGVfb3B0X2NvbnRleHQoaW50IGNvbW1hbmQsIGNvbnN0IGNoYXIqIGNvbnRleHQsIHNpemVfdCBsZW4pCit7CisgICAgbmV0c25tcF9wZHUqIHJlcyA9IHNubXBfcGR1X2NyZWF0ZShjb21tYW5kKTsKKyAgICBpZiAocmVzKQorICAgICAgICBpZiAoY29udGV4dCkgeworICAgICAgICAgICAgaWYgKHNubXBfY2xvbmVfbWVtKCh2b2lkKiopJnJlcy0+Y29udGV4dE5hbWUsIGNvbnRleHQsIGxlbikpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHJlcyk7CisgICAgICAgICAgICAgICAgcmVzID0gTlVMTDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIHJlcy0+Y29udGV4dE5hbWVMZW4gPSBsZW47CisgICAgICAgIH0KKyAgICByZXR1cm4gcmVzOworfQorCitzdGF0aWMgdm9pZAorT3BlbmluZ0VudHJ5KFVOVVNFRCB0U3RhdGUgc2VsZikKK3sKKyAgICBuZXRzbm1wX3BkdSogYWN0ID0KKyAgICAgICAgcGR1X2NyZWF0ZV9vcHRfY29udGV4dChBR0VOVFhfTVNHX09QRU4sIGNvbnRleHQsIGNvbnRleHRMZW4pOworICAgIGlmKGFjdCkgeworICAgICAgICBhY3QtPnNlc3NpZCA9IDA7CisgICAgICAgIGFjdC0+dHJhbnNpZCA9IDA7CisgICAgICAgIGFjdC0+cmVxaWQgPSArK3BhY2tldGlkOworICAgICAgICBhY3QtPnRpbWUgPSAwOworICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUoYWN0LCBOVUxMLCAwLCBBU05fT0NURVRfU1RSLCBOVUxMLCAwKTsKKyAgICAgICAgaWYoc25tcF9zZXNzX3NlbmQoc2Vzc3AsIGFjdCkgPT0gMCkKKyAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoYWN0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitPcGVuaW5nUmVzKFVOVVNFRCB0U3RhdGUgc2VsZiwgbmV0c25tcF9wZHUgKmFjdCkKK3sKKyAgICBpZihhY3QtPmVycnN0YXQgPT0gQUdFTlRYX0VSUl9OT0VSUk9SKSB7CisgICAgICAgIHNlc3Npb24gPSBhY3QtPnNlc3NpZDsKKyAgICAgICAgY2hhbmdlX3N0YXRlKCZOb3RpZnlpbmcpOworICAgIH0gZWxzZSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gb3BlbiBzZXNzaW9uIik7CisgICAgICAgIGNoYW5nZV9zdGF0ZSgmRXhpdCk7CisgICAgfQorfQorCitjb25zdCBzdHJ1Y3QgdFN0YXRlX3MgT3BlbmluZyA9IHsKKyAgICBPcGVuaW5nRW50cnksCisgICAgTlVMTCwKKyAgICBPcGVuaW5nUmVzLAorICAgICZEaXNjb25uZWN0aW5nLAorICAgIFN0YXRlRGlzY29ubmVjdCwKKyAgICBTdGF0ZUNsb3NlLAorICAgICJPcGVuaW5nIiwKKyAgICAwCit9OworCitzdGF0aWMgdm9pZAorTm90aWZ5aW5nRW50cnkoVU5VU0VEIHRTdGF0ZSBzZWxmKQoreworICAgIG5ldHNubXBfcGR1KiBhY3QgPSBzbm1wX2Nsb25lX3BkdShwZHUpOworICAgIGlmKGFjdCkgeworICAgICAgICBhY3QtPnNlc3NpZCA9IHNlc3Npb247CisgICAgICAgIGFjdC0+dHJhbnNpZCA9IDA7CisgICAgICAgIGFjdC0+cmVxaWQgPSArK3BhY2tldGlkOworICAgICAgICBpZihzbm1wX3Nlc3Nfc2VuZChzZXNzcCwgYWN0KSA9PSAwKQorICAgICAgICAgICAgc25tcF9mcmVlX3BkdShhY3QpOworICAgIH0KK30KKworc3RhdGljIHZvaWQKK05vdGlmeWluZ1JlcyhVTlVTRUQgdFN0YXRlIHNlbGYsIG5ldHNubXBfcGR1ICphY3QpCit7CisgICAgaWYoYWN0LT5lcnJzdGF0ID09IEFHRU5UWF9FUlJfTk9FUlJPUikKKyAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJGYWlsZWQgdG8gc2VuZCBub3RpZmljYXRpb24iKTsKKyAgICAvKiogXHRvZG86IFJldHJ5IGhhbmRsaW5nIC0tLSBDbG9zaW5nUmVjb25uZWN0Pz8/ICovCisgICAgY2hhbmdlX3N0YXRlKCZDbG9zaW5nKTsKK30KKworY29uc3Qgc3RydWN0IHRTdGF0ZV9zIE5vdGlmeWluZyA9IHsKKyAgICBOb3RpZnlpbmdFbnRyeSwKKyAgICBOVUxMLAorICAgIE5vdGlmeWluZ1JlcywKKyAgICBOVUxMLCAgICAgICAgICAgIC8qKiBcdG9kbzogUmV0cnkgaGFuZGxpbmc/ICovCisgICAgU3RhdGVEaXNjb25uZWN0LCAvKiogXHRvZG86IFJldHJ5IGhhbmRsaW5nPyAqLworICAgIFN0YXRlQ2xvc2UsCisgICAgIk5vdGlmeWluZyIsCisgICAgMQorfTsKKworc3RhdGljIHZvaWQKK0Nsb3NpbmdFbnRyeShVTlVTRUQgdFN0YXRlIHNlbGYpCit7CisgICAgLyogQ0xPU0UgcGR1LT5lcnJzdGF0ICovCisgICAgbmV0c25tcF9wZHUqIGFjdCA9CisgICAgICAgIHBkdV9jcmVhdGVfb3B0X2NvbnRleHQoQUdFTlRYX01TR19DTE9TRSwgY29udGV4dCwgY29udGV4dExlbik7CisgICAgaWYoYWN0KSB7CisgICAgICAgIGFjdC0+c2Vzc2lkID0gc2Vzc2lvbjsKKyAgICAgICAgYWN0LT50cmFuc2lkID0gMDsKKyAgICAgICAgYWN0LT5yZXFpZCA9ICsrcGFja2V0aWQ7CisgICAgICAgIGFjdC0+ZXJyc3RhdCA9IEFHRU5UWF9DTE9TRV9TSFVURE9XTjsKKyAgICAgICAgaWYoc25tcF9zZXNzX3NlbmQoc2Vzc3AsIGFjdCkgPT0gMCkKKyAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoYWN0KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitDbG9zaW5nUmVzKFVOVVNFRCB0U3RhdGUgc2VsZiwgbmV0c25tcF9wZHUgKmFjdCkKK3sKKyAgICBpZihhY3QtPmVycnN0YXQgIT0gQUdFTlRYX0VSUl9OT0VSUk9SKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJBZ2VudFggZXJyb3Igc3RhdHVzIG9mICVsZFxuIiwgYWN0LT5lcnJzdGF0KTsKKyAgICB9CisgICAgY2hhbmdlX3N0YXRlKCZEaXNjb25uZWN0aW5nKTsKK30KKworc3RhdGljIHZvaWQKK0Nsb3NpbmdEaXNjb25uZWN0KFVOVVNFRCB0U3RhdGUgc2VsZikKK3sKKyAgICBjaGFuZ2Vfc3RhdGUoJkRpc2Nvbm5lY3RpbmcpOworfQorCitzdGF0aWMgdm9pZAorQ2xvc2luZ0Nsb3NlKFVOVVNFRCB0U3RhdGUgc2VsZiwgVU5VU0VEIG5ldHNubXBfcGR1ICphY3QpCit7CisgICAgY2hhbmdlX3N0YXRlKCZEaXNjb25uZWN0aW5nKTsKK30KKworY29uc3Qgc3RydWN0IHRTdGF0ZV9zIENsb3NpbmcgPSB7CisgICAgQ2xvc2luZ0VudHJ5LAorICAgIE5VTEwsCisgICAgQ2xvc2luZ1JlcywKKyAgICAmRGlzY29ubmVjdGluZywKKyAgICBDbG9zaW5nRGlzY29ubmVjdCwKKyAgICBDbG9zaW5nQ2xvc2UsCisgICAgIkNsb3NpbmciLAorICAgIDEKK307CisKK3N0YXRpYyB2b2lkCitEaXNjb25uZWN0aW5nRW50cnkoVU5VU0VEIHRTdGF0ZSBzZWxmKQoreworICAgIHNubXBfc2Vzc19jbG9zZShzZXNzcCk7CisgICAgc2Vzc3AgPSBOVUxMOworICAgIGNoYW5nZV9zdGF0ZSgmRXhpdCk7Cit9CisKK2NvbnN0IHN0cnVjdCB0U3RhdGVfcyBEaXNjb25uZWN0aW5nID0geworICAgIERpc2Nvbm5lY3RpbmdFbnRyeSwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgIkRpc2Nvbm5lY3RpbmciLAorICAgIDAKK307CisKK2NvbnN0IHN0cnVjdCB0U3RhdGVfcyBFeGl0ID0geworICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgTlVMTCwKKyAgICBOVUxMLAorICAgICJFeGl0IiwKKyAgICAwCit9OworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgYXJnOworICAgIGNoYXIgICAgICAgICAgICpwcm9nbmFtOworICAgIGNoYXIgICAgICAgICAgICpjcCA9IE5VTEw7CisKKyAgICBjb25zdCBjaGFyKiAgICAgc3lzVXBUaW1lID0gTlVMTDsKKworICAgIHByb2duYW0gPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJyk7CisgICAgaWYgKHByb2duYW0pCisgICAgICAgICsrcHJvZ25hbTsKKyAgICBlbHNlCisgICAgICAgIHByb2duYW0gPSBhcmd2WzBdOworCisgICAgcHV0ZW52KHN0cmR1cCgiUE9TSVhMWV9DT1JSRUNUPTEiKSk7CisKKyAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKwkJCSAgIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfUEVSU0lTVEVOVF9MT0FELCAxKTsKKyAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKwkJCSAgIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfUEVSU0lTVEVOVF9TQVZFLCAxKTsKKworICAgIHdoaWxlICgoYXJnID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsICI6VmhtOk06RDpkUDpMOlU6Yzp4OiIpKSAhPSAtMSkgeworICAgICAgICBzd2l0Y2ggKGFyZykgeworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHVzYWdlKHByb2duYW0pOworICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgY2FzZSAnbSc6CisgICAgICAgICAgICBzZXRlbnYoIk1JQlMiLCBvcHRhcmcsIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ00nOgorICAgICAgICAgICAgc2V0ZW52KCJNSUJESVJTIiwgb3B0YXJnLCAxKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIGNvbnRleHQgPSBvcHRhcmc7CisgICAgICAgICAgICBjb250ZXh0TGVuID0gc3RybGVuKGNvbnRleHQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKG9wdGFyZyk7CisgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQsIDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1UnOgorICAgICAgICAgICAgc3lzVXBUaW1lID0gb3B0YXJnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1YnOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJORVQtU05NUCB2ZXJzaW9uOiAlc1xuIiwgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKKyAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgRElTQUJMRV9NSUJfTE9BRElORworICAgICAgICBjYXNlICdQJzoKKyAgICAgICAgICAgIGNwID0gc25tcF9taWJfdG9nZ2xlX29wdGlvbnMob3B0YXJnKTsKKyAgICAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIHBhcnNlciBvcHRpb24gdG8gLVA6ICVjLlxuIiwgKmNwKTsKKyAgICAgICAgICAgICAgICB1c2FnZShwcm9nbmFtKTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogRElTQUJMRV9NSUJfTE9BRElORyAqLworICAgICAgICBjYXNlICdMJzoKKyAgICAgICAgICAgIGlmIChzbm1wX2xvZ19vcHRpb25zKG9wdGFyZywgYXJnYywgYXJndikgPCAwKSB7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd4JzoKKyAgICAgICAgICAgIGlmIChvcHRhcmcgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS0VULCBvcHRhcmcpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgdXNhZ2UoYXJndlswXSk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICc6JzoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiT3B0aW9uIC0lYyByZXF1aXJlcyBhbiBvcGVyYW5kXG4iLCBvcHRvcHQpOworICAgICAgICAgICAgdXNhZ2UocHJvZ25hbSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJz8nOgorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbnJlY29nbml6ZWQgb3B0aW9uOiAtJWNcbiIsIG9wdG9wdCk7CisgICAgICAgICAgICB1c2FnZShwcm9nbmFtKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGFyZyA9IG9wdGluZDsKKworICAgIC8qIGluaXRpYWxpemUgdGNwaXAsIGlmIG5lY2Vzc2FyeSAqLworICAgIFNPQ0tfU1RBUlRVUDsKKworICAgIGluaXRfc25tcCgic25tcGFwcCIpOworICAgIGFnZW50eF9jb25maWdfaW5pdCgpOworCisgICAgLyogTk9USUZZIHZhcmxpc3QgKi8KKyAgICBwZHUgPSBwZHVfY3JlYXRlX29wdF9jb250ZXh0KEFHRU5UWF9NU0dfTk9USUZZLCBjb250ZXh0LCBjb250ZXh0TGVuKTsKKworICAgIGlmIChzeXNVcFRpbWUpCisgICAgICAgIHNubXBfYWRkX3ZhcihwZHUsIHN5c3VwdGltZV9vaWQsIHN5c3VwdGltZV9vaWRfbGVuLCAndCcsIHN5c1VwVGltZSk7CisKKyAgICBpZiAoYXJnID09IGFyZ2MpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJNaXNzaW5nIHRyYXAtb2lkIHBhcmFtZXRlclxuIik7CisgICAgICAgIHVzYWdlKHByb2duYW0pOworICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYgKHNubXBfYWRkX3ZhcihwZHUsIHNubXB0cmFwX29pZCwgc25tcHRyYXBfb2lkX2xlbiwgJ28nLCBhcmd2W2FyZ10pKSB7CisgICAgICAgIHNubXBfcGVycm9yKGFyZ3ZbYXJnXSk7CisgICAgICAgIFNPQ0tfQ0xFQU5VUDsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgKythcmc7CisKKyAgICB3aGlsZSAoYXJnIDwgYXJnYykgeworICAgICAgICBvaWQgICAgbmFtZVtNQVhfT0lEX0xFTl07CisgICAgICAgIHNpemVfdCBuYW1lX2xlbmd0aCA9IE1BWF9PSURfTEVOOworICAgICAgICBhcmcgKz0gMzsKKyAgICAgICAgaWYgKGFyZyA+IGFyZ2MpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IE1pc3NpbmcgdHlwZS92YWx1ZSBmb3IgdmFyaWFibGVcbiIsCisgICAgICAgICAgICAgICAgICAgIGFyZ3ZbYXJnIC0gM10pOworICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXNubXBfcGFyc2Vfb2lkKGFyZ3ZbYXJnIC0gM10sIG5hbWUsICZuYW1lX2xlbmd0aCkpIHsKKyAgICAgICAgICAgIHNubXBfcGVycm9yKGFyZ3ZbYXJnIC0gM10pOworICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoc25tcF9hZGRfdmFyKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIGFyZ3ZbYXJnIC0gMl1bMF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgYXJndlthcmcgLSAxXSkgIT0gMCkgeworICAgICAgICAgICAgc25tcF9wZXJyb3IoYXJndlthcmcgLSAzXSk7CisgICAgICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgICAgcGFja2V0aWQgPSAwOworCisgICAgc3RhdGUgPSAmQ29ubmVjdGluZzsKKyAgICBuZXh0X3N0YXRlID0gTlVMTDsKKyAgICBpZihzdGF0ZS0+ZW50cnkpIHN0YXRlLT5lbnRyeShzdGF0ZSk7CisKKyAgICAvKiBtYWluIGxvb3AgaGVyZS4uLiAqLworICAgIGZvcig7OykgeworICAgICAgICBpbnQgYmxvY2sgPSAxOworICAgICAgICBpbnQgbnVtZmRzID0gMDsKKyAgICAgICAgaW50IGNvdW50OworICAgICAgICBmZF9zZXQgZmRzZXQ7CisgICAgICAgIHN0cnVjdCB0aW1ldmFsIHRpbWVvdXQ7CisKKyAgICAgICAgd2hpbGUobmV4dF9zdGF0ZSkgeworICAgICAgICAgICAgaWYoc3RhdGUtPmV4aXQpIHN0YXRlLT5leGl0KHN0YXRlKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwcm9jZXNzIiwgIlN0YXRlIHRyYW5zaXRpb246ICVzIC0+ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUtPm5hbWUsIG5leHRfc3RhdGUtPm5hbWUpKTsKKyAgICAgICAgICAgIHN0YXRlID0gbmV4dF9zdGF0ZTsKKyAgICAgICAgICAgIG5leHRfc3RhdGUgPSBOVUxMOworICAgICAgICAgICAgaWYoc3RhdGUtPmVudHJ5KSBzdGF0ZS0+ZW50cnkoc3RhdGUpOworICAgICAgICB9CisKKyAgICAgICAgaWYoc3RhdGUgPT0gJkV4aXQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBGRF9aRVJPKCZmZHNldCk7CisgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbyhzZXNzcCwgJm51bWZkcywgJmZkc2V0LCAmdGltZW91dCwgJmJsb2NrKTsKKyAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIE5VTEwsIE5VTEwsICFibG9jayA/ICZ0aW1lb3V0IDogTlVMTCk7CisgICAgICAgIGlmIChjb3VudCA+IDApCisgICAgICAgICAgICBzbm1wX3Nlc3NfcmVhZChzZXNzcCwgJmZkc2V0KTsKKyAgICAgICAgZWxzZSBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgIHNubXBfc2Vzc190aW1lb3V0KHNlc3NwKTsKKyAgICAgICAgZWxzZSBpZiAoZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzZWxlY3QgZXJyb3IgWyVzXVxuIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgIGNoYW5nZV9zdGF0ZSgmRXhpdCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBhdCBzaHV0ZG93biB0aW1lICovCisgICAgc25tcF9mcmVlX3BkdShwZHUpOworICAgIHBkdSA9IE5VTEw7CisKKyAgICBzbm1wX3NodXRkb3duKCJzbm1wYXBwIik7CisKKyAgICBTT0NLX0NMRUFOVVA7CisgICAgZXhpdChyZXN1bHQpOworfQpkaWZmIC0tZ2l0IGEvYXBwcy9lbmNvZGVfa2V5Y2hhbmdlLmMgYi9hcHBzL2VuY29kZV9rZXljaGFuZ2UuYwppbmRleCA1YjY4MzhlLi41YmY4ZTRjIDEwMDY0NAotLS0gYS9hcHBzL2VuY29kZV9rZXljaGFuZ2UuYworKysgYi9hcHBzL2VuY29kZV9rZXljaGFuZ2UuYwpAQCAtMzgsMTAgKzM4LDYgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yMzMsOCArMjI5LDggQEAKICAgICAgICAgZW5naW5laWRfbGVuID0gaGV4X3RvX2JpbmFyeTIoZW5naW5laWQgKyAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oKGNoYXIgKikgZW5naW5laWQpIC0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNoYXIgKiopICZlbmdpbmVpZCk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgImVuZ2luZUlETGVuOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgZW5naW5laWRfbGVuKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgImVuZ2luZUlETGVuOiAlbHVcbiIsCisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWVuZ2luZWlkX2xlbikpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGVuZ2luZWlkX2xlbiA9IHNldHVwX2VuZ2luZUlEKCZlbmdpbmVpZCwgKGNoYXIgKikgZW5naW5laWQpOwogCkBAIC0yOTUsMTIgKzI5MSwxMiBAQAogICAgIFFVSVRGVU4ocnZhbCwgbWFpbl9xdWl0KTsKIAogCi0gICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiRUlEICglZCk6ICIsIGVuZ2luZWlkX2xlbikpOworICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIkVJRCAoJWx1KTogIiwgKHVuc2lnbmVkIGxvbmcpZW5naW5laWRfbGVuKSk7CiAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIGVuZ2luZWlkX2xlbjsgaSsrKQogICAgICAgICBERUJVR01TR1RMKCgiZW5jb2RlX2tleWNoYW5nZSIsICIlMDJ4IiwgKGludCkgKGVuZ2luZWlkW2ldKSkpOwogICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIlxuIikpOwogCi0gICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAib2xkIEt1ICglZCkgKGZyb20gJXMpOiAiLCBvbGRLdV9sZW4sCisgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAib2xkIEt1ICglbHUpIChmcm9tICVzKTogIiwgKHVuc2lnbmVkIGxvbmcpb2xkS3VfbGVuLAogICAgICAgICAgICAgICAgIG9sZHBhc3MpKTsKICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgb2xkS3VfbGVuOyBpKyspCiAgICAgICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIiUwMngiLCAoaW50KSAob2xkS3VbaV0pKSk7CkBAIC0zMTIsOCArMzA4LDggQEAKICAgICBRVUlURlVOKHJ2YWwsIG1haW5fcXVpdCk7CiAKIAotICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgImdlbmVyYXRpbmcgb2xkIEt1bCAoJWQpIChmcm9tIEt1KTogIiwKLSAgICAgICAgICAgICAgICBvbGRrdWxfbGVuKSk7CisgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiZ2VuZXJhdGluZyBvbGQgS3VsICglbHUpIChmcm9tIEt1KTogIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylvbGRrdWxfbGVuKSk7CiAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG9sZGt1bF9sZW47IGkrKykKICAgICAgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiJTAyeCIsIChpbnQpIChvbGRrdWxbaV0pKSk7CiAgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiXG4iKSk7CkBAIC0zMjMsOCArMzE5LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIG5ld0t1LCBuZXdLdV9sZW4sIG5ld2t1bCwgJm5ld2t1bF9sZW4pOwogICAgIFFVSVRGVU4ocnZhbCwgbWFpbl9xdWl0KTsKIAotICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgImdlbmVyYXRpbmcgbmV3IEt1bCAoJWQpIChmcm9tIEt1KTogIiwKLSAgICAgICAgICAgICAgICBvbGRrdWxfbGVuKSk7CisgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiZ2VuZXJhdGluZyBuZXcgS3VsICglbHUpIChmcm9tIEt1KTogIiwKKyAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylvbGRrdWxfbGVuKSk7CiAgICAgZm9yIChpID0gMDsgaSA8IChpbnQpIG5ld2t1bF9sZW47IGkrKykKICAgICAgICAgREVCVUdNU0dUTCgoImVuY29kZV9rZXljaGFuZ2UiLCAiJTAyeCIsIG5ld2t1bFtpXSkpOwogICAgIERFQlVHTVNHVEwoKCJlbmNvZGVfa2V5Y2hhbmdlIiwgIlxuIikpOwpAQCAtMzk0LDIyICszOTAsMjIgQEAKIAogICAgIHVzYWdlX3N5bm9wc2lzKG9mcCk7CiAKLSAgICBmcHJpbnRmKG9mcCwgIlxuXAotICAgIE9ubHkgLXQgaXMgbWFuZGF0b3J5LiAgVGhlIHRyYW5zZm9ybSBpcyB1c2VkIHRvIGNvbnZlcnQgUD0+S3UsIGNvbnZlcnRcblwKLSAgICBLdT0+S3VsLCBhbmQgdG8gaGFzaCB0aGUgb2xkIEt1bCB3aXRoIHRoZSByYW5kb20gYml0cy5cblwKLVxuXAotICAgIFBhc3NwaHJhc2Ugd2lsbCBiZSB0YWtlbiBmcm9tIHRoZSBmaXJzdCBzdWNjZXNzZnVsIHNvdXJjZSBhcyBmb2xsb3dzOlxuXAorICAgIGZwcmludGYob2ZwLCAiXG4lc1wKIAlhKSBDb21tYW5kbGluZSBvcHRpb25zLFxuXAogCWIpIFRoZSBmaWxlIFwiJXMvJXNcIixcblwKLQljKSBzdGRpbiAgLW9yLSAgVXNlciBpbnB1dCBmcm9tIHRoZSB0ZXJtaW5hbC5cblwKKwljKSBzdGRpbiAgLW9yLSAgVXNlciBpbnB1dCBmcm9tIHRoZSB0ZXJtaW5hbC5cblxuJXNcCisJCSIgTkwsCisgICAiT25seSAtdCBpcyBtYW5kYXRvcnkuICBUaGUgdHJhbnNmb3JtIGlzIHVzZWQgdG8gY29udmVydCBQPT5LdSwgY29udmVydFxuXAorICAgIEt1PT5LdWwsIGFuZCB0byBoYXNoIHRoZSBvbGQgS3VsIHdpdGggdGhlIHJhbmRvbSBiaXRzLlxuXAogXG5cCi0gICAgLWYgd2lsbCByZXF1aXJlIHJlYWRpbmcgZnJvbSB0aGUgc3RkaW4vdGVybWluYWwsIGlnbm9yaW5nIGEpIGFuZCBiKS5cblwKKyAgICBQYXNzcGhyYXNlIHdpbGwgYmUgdGFrZW4gZnJvbSB0aGUgZmlyc3Qgc3VjY2Vzc2Z1bCBzb3VyY2UgYXMgZm9sbG93czpcbiIsCisgICAgKHMgPSBnZXRlbnYoIkhPTUUiKSkgPyBzIDogIiRIT01FIiwgbG9jYWxfcGFzc3BocmFzZV9maWxlbmFtZSwKKyAgICItZiB3aWxsIHJlcXVpcmUgcmVhZGluZyBmcm9tIHRoZSBzdGRpbi90ZXJtaW5hbCwgaWdub3JpbmcgYSkgYW5kIGIpLlxuXAogICAgIC1QIHdpbGwgcHJldmVudCBwcm9tcHRzIGZvciBwYXNzcGhyYXNlcyB0byBzdGRvdXQgZnJvbSBiZWluZyBwcmludGVkLlxuXAogXG5cCiAgICAgPGVuZ2luZUlEPiBpcyBpbnRlcnByZXRlZCBhcyBhIGhleCBzdHJpbmcgd2hlbiBwcmVjZWVkZWQgYnkgXCIweFwiLFxuXAogICAgIG90aGVyd2lzZSBpdCBpcyBjcmVhdGVkIHRvIGNvbnRhaW4gXCJ0ZXh0XCIuICBJZiBub3RoaW5nIGlzIGdpdmVuLFxuXAotICAgIDxlbmdpbmVJRD4gaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgZmlyc3QgSVAgYWRkcmVzcyBmb3IgdGhlIGxvY2FsIGhvc3QuXG5cCi0JCSIgTkwsIChzID0gZ2V0ZW52KCJIT01FIikpID8gcyA6ICIkSE9NRSIsIGxvY2FsX3Bhc3NwaHJhc2VfZmlsZW5hbWUpOworICAgIDxlbmdpbmVJRD4gaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgZmlyc3QgSVAgYWRkcmVzcyBmb3IgdGhlIGxvY2FsIGhvc3QuXG4iKTsKIAogCiAgICAgLyoKQEAgLTc0NCwxMiArNzQwLDE2IEBACiAgICAgICAgIHRpID0gc25tcF90dHllY2hvKDAsIDApOwogICAgIH0KIAotICAgIGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKTsKKyAgICBidWZwID0gZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pOwogCiAgICAgaWYgKCFidmlzaWJsZSkgewogICAgICAgICB0aSA9IHNubXBfdHR5ZWNobygwLCB0aSk7CiAgICAgICAgIGZwdXRzKCJcbiIsIG9mcCk7CiAgICAgfQorICAgIGlmICghYnVmcCkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkFib3J0ZWQuLi5cbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KIAogCiAgICAgLyoKZGlmZiAtLWdpdCBhL2FwcHMvc25tcGJ1bGtnZXQuYyBiL2FwcHMvc25tcGJ1bGtnZXQuYwppbmRleCBiYzk2ODdjLi4yZTllZTM0IDEwMDY0NAotLS0gYS9hcHBzL3NubXBidWxrZ2V0LmMKKysrIGIvYXBwcy9zbm1wYnVsa2dldC5jCkBAIC00MiwxMSArNDIsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNjAsOSArNTYsNiBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTIwLDcgKzExMyw3IEBACiAgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgb3B0YXJnID0gZW5kcHRyOwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNzcGFjZSgqb3B0YXJnKSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKm9wdGFyZykpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CkBAIC0xNTEsOSArMTQ0LDExIEBACiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CmRpZmYgLS1naXQgYS9hcHBzL3NubXBidWxrd2Fsay5jIGIvYXBwcy9zbm1wYnVsa3dhbGsuYwppbmRleCBiNDZhZjU4Li4zNzlkMmFlIDEwMDY0NAotLS0gYS9hcHBzL3NubXBidWxrd2Fsay5jCisrKyBiL2FwcHMvc25tcGJ1bGt3YWxrLmMKQEAgLTQyLDExICs0Miw3IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02MCw5ICs1Niw2IEBACiAjZW5kaWYKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC0xNTcsNyArMTUwLDcgQEAKICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBvcHRhcmcgPSBlbmRwdHI7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc3NwYWNlKCpvcHRhcmcpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqb3B0YXJnKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTIwOSw5ICsyMDIsMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FwcHMvc25tcGRlbHRhLmMgYi9hcHBzL3NubXBkZWx0YS5jCmluZGV4IDRmMjhmNDcuLjA4ZTJlYmMgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcGRlbHRhLmMKKysrIGIvYXBwcy9zbm1wZGVsdGEuYwpAQCAtNDYsMTEgKzQ2LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02Miw5ICs1OCw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTIyMSw3ICsyMTQsNyBAQAogICAgIC8qCiAgICAgICogTm93IGZpZ3VyZSBvdXQgdGhlIGFtb3VudCBvZiB0aW1lIHRvIHNsZWVwIAogICAgICAqLwotICAgIHRhcmdldCA9IChTZWNvbmRzQXROZXh0SG91ciAtIHR2LT50dl9zZWMpICUgc2Vjb25kczsKKyAgICB0YXJnZXQgPSAoaW50KShTZWNvbmRzQXROZXh0SG91ciAtIHR2LT50dl9zZWMpICUgc2Vjb25kczsKIAogICAgIHJldHVybiB0YXJnZXQ7CiB9CkBAIC0yNTYsNyArMjQ5LDcgQEAKIAogICAgIGZvciAoY3AgPSBidWY7ICpjcDsgY3ArKyk7CiAgICAgd2hpbGUgKGNwID49IGJ1ZikgewotICAgICAgICBpZiAoaXNhbHBoYSgqY3ApKQorICAgICAgICBpZiAoaXNhbHBoYSgodW5zaWduZWQgY2hhcikoKmNwKSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY3AtLTsKICAgICB9CkBAIC0yOTYsNyArMjg5LDcgQEAKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBibGFuayA9IFRSVUU7CiAgICAgICAgIGZvciAoY3AgPSBidWY7ICpjcDsgY3ArKykKLSAgICAgICAgICAgIGlmICghaXNzcGFjZSgqY3ApKSB7CisgICAgICAgICAgICBpZiAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKSB7CiAgICAgICAgICAgICAgICAgYmxhbmsgPSBGQUxTRTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KQEAgLTM1Nyw3ICszNTAsNyBAQAogICAgIH0KICAgICBjb3VudCA9IDE7CiAgICAgd2hpbGUgKGNvdW50ICE9IDApIHsKLSAgICAgICAgY291bnQgPSBzZWxlY3QoMCwgMCwgMCwgMCwgdHYpOworICAgICAgICBjb3VudCA9IHNlbGVjdCgwLCBOVUxMLCBOVUxMLCBOVUxMLCB0dik7CiAgICAgICAgIHN3aXRjaCAoY291bnQpIHsKICAgICAgICAgY2FzZSAwOgogICAgICAgICAgICAgYnJlYWs7CkBAIC00MDgsOSArNDAxLDExIEBACiAgICAgaW50ICAgICAgICAgICAgIGV4aXRfY29kZSA9IDA7CiAKICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgJm9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpAQCAtNDM5LDcgKzQzNCw3IEBACiAJICAgIAlNQVhfQVJHUyk7CiAJICAgIGV4aXQoMSk7CiAJfQotICAgICAgICB2YXJpbmZvW2N1cnJlbnRfbmFtZSsrXS5uYW1lID0gMDsKKyAgICAgICAgdmFyaW5mb1tjdXJyZW50X25hbWUrK10ubmFtZSA9IE5VTEw7CiAgICAgfQogCiAgICAgU09DS19TVEFSVFVQOwpAQCAtNzMxLDEyICs3MjYsMTIgQEAKIAogICAgICAgICB9IGVsc2UgaWYgKHN0YXR1cyA9PSBTVEFUX1RJTUVPVVQpIHsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVGltZW91dDogTm8gUmVzcG9uc2UgZnJvbSAlc1xuIiwgZ2F0ZXdheSk7Ci0gICAgICAgICAgICByZXNwb25zZSA9IDA7CisgICAgICAgICAgICByZXNwb25zZSA9IE5VTEw7CiAgICAgICAgICAgICBleGl0X2NvZGUgPSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIHN0YXR1cyA9PSBTVEFUX0VSUk9SICovCiAgICAgICAgICAgICBzbm1wX3Nlc3NfcGVycm9yKCJzbm1wZGVsdGEiLCBzcyk7Ci0gICAgICAgICAgICByZXNwb25zZSA9IDA7CisgICAgICAgICAgICByZXNwb25zZSA9IE5VTEw7CiAgICAgICAgICAgICBleGl0X2NvZGUgPSAxOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHMvc25tcGRmLmMgYi9hcHBzL3NubXBkZi5jCmluZGV4IGEwZTliOWUuLjE0NGE1MDUgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcGRmLmMKKysrIGIvYXBwcy9zbm1wZGYuYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBzbm1wZGYuYyAtIHNlbmQgc25tcCBHRVQgcmVxdWVzdHMgdG8gYSBuZXR3b3JrIGVudGl0eS4KKyAqIHNubXBkZi5jIC0gZGlzcGxheSBkaXNrIHNwYWNlIHVzYWdlIG9uIGEgbmV0d29yayBlbnRpdHkgdmlhIFNOTVAuCiAgKgogICovCiAKQEAgLTU0LDExICs1NCw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzAsOSArNjYsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC05NCw5ICs4NywxNCBAQAogICAgICAgICAgICAgIlx0LUN1XHRVc2UgVUNELVNOTVAgZHNrVGFibGUgdG8gZG8gdGhlIGNhbGN1bGF0aW9ucy5cbiIpOwogICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIlx0XHRbTm9ybWFsbHkgdGhlIEhPU1QtUkVTT1VSQ0VTLU1JQiBpcyBjb25zdWx0ZWQgZmlyc3QuXVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAiXHQtQ2hcdFByaW50IHVzaW5nIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCAoTWlCLCBHaUIsIFRpQilcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIlx0LUNIXHRQcmludCB1c2luZyBodW1hbiByZWFkYWJsZSBTSSBmb3JtYXQgKE1CLCBHQiwgVEIpXG4iKTsKIH0KIAogaW50ICAgICAgICAgICAgIHVjZF9taWIgPSAwOworaW50ICAgICAgICAgICAgIGh1bWFuX3VuaXRzID0gMDsKIAogc3RhdGljIHZvaWQKIG9wdFByb2MoaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2LCBpbnQgb3B0KQpAQCAtMTA4LDYgKzEwNiwxMiBAQAogICAgICAgICAgICAgY2FzZSAndSc6CiAgICAgICAgICAgICAgICAgdWNkX21pYiA9IDE7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgICAgICBodW1hbl91bml0cyA9IDEwMjQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlICdIJzoKKyAgICAgICAgICAgICAgICBodW1hbl91bml0cyA9IDEwMDA7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gZmxhZyBwYXNzZWQgdG8gLUM6ICVjXG4iLCBvcHRhcmdbLTFdKTsKQEAgLTE3MywxNCArMTc3LDE0IEBACiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgICAgIGlmIChyZXNwb25zZS0+ZXJyc3RhdCAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7Ci0JICAgIGZwcmludGYoc3RkZXJyLCAic25tcGRmOiBFcnJvciBpbiBwYWNrZXQ6ICVzXG4iLAorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzbm1wZGY6IEVycm9yIGluIHBhY2tldDogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgIHNubXBfZXJyc3RyaW5nKHJlc3BvbnNlLT5lcnJzdGF0KSk7CiAgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICB9CiAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWUsCi0JCQkgICAgIFNOTVBfTUlOKGJhc2VfbGVuZ3RoLAotCQkJCSAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoKSwKLQkJCSAgICAgYmFzZSwgYmFzZV9sZW5ndGgpICE9IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTUlOKGJhc2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lX2xlbmd0aCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2UsIGJhc2VfbGVuZ3RoKSAhPSAwKQogICAgICAgICAgICAgcnVubmluZyA9IDA7CiAgICAgICAgIGVsc2UgaWYgKHJlc3BvbnNlLT52YXJpYWJsZXMtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSB8fAogICAgICAgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUIHx8CkBAIC0yMTAsNiArMjE0LDI3IEBACiAgICAgcmV0dXJuIHNhdmVkOwogfQogCisKKworY2hhciAqZm9ybWF0X2h1bWFuKGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbiwgdW5zaWduZWQgbG9uZyBtZW0sIHVuc2lnbmVkIGxvbmcgc2NhbGUpCit7CisgICAgaWYgKG1lbSA+PSBzY2FsZSpzY2FsZSpzY2FsZSpzY2FsZSkKKyAgICAgICAgc25wcmludGYoYnVmLCBsZW4sICIlNC4yZlAlc0IiLCAoZmxvYXQpbWVtLyhzY2FsZSpzY2FsZSpzY2FsZSpzY2FsZSksCisJCXNjYWxlID09IDEwMjQgPyAiaSIgOiAiIik7CisgICAgZWxzZSBpZiAobWVtID49IHNjYWxlKnNjYWxlKnNjYWxlKQorICAgICAgICBzbnByaW50ZihidWYsIGxlbiwgIiU0LjJmVCVzQiIsIChmbG9hdCltZW0vKHNjYWxlKnNjYWxlKnNjYWxlKSwKKwkJc2NhbGUgPT0gMTAyNCA/ICJpIiA6ICIiKTsKKyAgICBlbHNlIGlmIChtZW0gPj0gc2NhbGUqc2NhbGUpCisgICAgICAgIHNucHJpbnRmKGJ1ZiwgbGVuLCAiJTQuMmZHJXNCIiwgKGZsb2F0KW1lbS8oc2NhbGUqc2NhbGUpLAorCQlzY2FsZSA9PSAxMDI0ID8gImkiIDogIiIpOworICAgIGVsc2UgaWYgKG1lbSA+PSBzY2FsZSkKKyAgICAgICAgc25wcmludGYoYnVmLCBsZW4sICIlNC4yZk0lc0IiLCAoZmxvYXQpbWVtL3NjYWxlLAorCQlzY2FsZSA9PSAxMDI0ID8gImkiIDogIiIpOworICAgIGVsc2UKKyAgICAgICAgc25wcmludGYoYnVmLCBsZW4sICIlNC4yZmtCIiwgKGZsb2F0KW1lbSk7CisgICAgcmV0dXJuIGJ1ZjsKK30KKwogLyogQ29tcHV0ZXMgdmFsdWUqdW5pdHMvZGl2aXNvciBpbiBhbiBvdmVyZmxvdy1wcm9vZiB3YXkuCiAgKi8KIHVuc2lnbmVkIGxvbmcKQEAgLTIzNiw5ICsyNjEsMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKQEAgLTI2NSw4ICsyOTIsMTQgQEAKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiAKLSAgICBwcmludGYoIiUtMThzICUxNXMgJTE1cyAlMTVzICU1c1xuIiwgIkRlc2NyaXB0aW9uIiwgInNpemUgKGtCKSIsCisgICAgaWYgKGh1bWFuX3VuaXRzKSB7CisgICAgICAgIHByaW50ZigiJS0xOHMgJTEwcyAlMTBzICUxMHMgJTVzXG4iLCAiRGVzY3JpcHRpb24iLCAiU2l6ZSIsCiAgICAgICAgICAgICJVc2VkIiwgIkF2YWlsYWJsZSIsICJVc2VkJSIpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgcHJpbnRmKCIlLTE4cyAlMTVzICUxNXMgJTE1cyAlNXNcbiIsICJEZXNjcmlwdGlvbiIsICJTaXplIChrQikiLAorICAgICAgICAgICAiVXNlZCIsICJBdmFpbGFibGUiLCAiVXNlZCUiKTsKKyAgICB9CiAgICAgaWYgKHVjZF9taWIgPT0gMCkgewogICAgICAgICAvKgogICAgICAgICAgKiAqIEJlZ2luIGJ5IGZpbmRpbmcgYWxsIHRoZSBzdG9yYWdlIHBpZWNlcyB0aGF0IGFyZSBvZgpAQCAtMzIxLDEyICszNTQsMjYgQEAKICAgICAgICAgICAgIGlmICh2bHAyLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UpIGdvdG8gbmV4dDsKICAgICAgICAgICAgIGhzdXNlZCA9IHZscDItPnZhbC5pbnRlZ2VyID8gKih2bHAyLT52YWwuaW50ZWdlcikgOiAwOwogCi0gICAgICAgICAgICBwcmludGYoIiUtMThzICUxNWx1ICUxNWx1ICUxNWx1ICU0bHUlJVxuIiwgZGVzY3IsCi0gICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzc2l6ZSwgdW5pdHMsIDEwMjQpIDogaHNzaXplLAotICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzdXNlZCwKLSAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHNzaXplLWhzdXNlZCwgdW5pdHMsIDEwMjQpIDogaHNzaXplIC0KLSAgICAgICAgICAgICAgICAgICBoc3VzZWQsIGhzc2l6ZSA/IGNvbnZlcnRfdW5pdHMoaHN1c2VkLCAxMDAsIGhzc2l6ZSkgOgotICAgICAgICAgICAgICAgICAgIGhzdXNlZCk7CisgICAgICAgICAgICBpZiAoaHVtYW5fdW5pdHMpIHsKKyAgICAgICAgICAgICAgICBjaGFyIHNpemVbMTBdLCB1c2VkWzEwXSwgYXZhaWxbMTBdOworICAgICAgICAgICAgICAgIHByaW50ZigiJS0xOHMgJTEwcyAlMTBzICUxMHMgJTRsdSUlXG4iLCBkZXNjciwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2h1bWFuKHNpemUsIHNpemVvZiBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzc2l6ZSwgdW5pdHMsIDEwMjQpIDogaHNzaXplLCBodW1hbl91bml0cyksCisgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9odW1hbih1c2VkLCBzaXplb2YgdXNlZCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzdXNlZCwgaHVtYW5fdW5pdHMpLAorICAgICAgICAgICAgICAgICAgICBmb3JtYXRfaHVtYW4oYXZhaWwsIHNpemVvZiBhdmFpbCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3NpemUtaHN1c2VkLCB1bml0cywgMTAyNCkgOiBoc3NpemUgLQorICAgICAgICAgICAgICAgICAgICBoc3VzZWQsIGh1bWFuX3VuaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgaHNzaXplID8gY29udmVydF91bml0cyhoc3VzZWQsIDEwMCwgaHNzaXplKSA6IGhzdXNlZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmludGYoIiUtMThzICUxNWx1ICUxNWx1ICUxNWx1ICU0bHUlJVxuIiwgZGVzY3IsCisgICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3NpemUsIHVuaXRzLCAxMDI0KSA6IGhzc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzdXNlZCwgdW5pdHMsIDEwMjQpIDogaHN1c2VkLAorICAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHNzaXplLWhzdXNlZCwgdW5pdHMsIDEwMjQpIDogaHNzaXplIC0KKyAgICAgICAgICAgICAgICAgICAgaHN1c2VkLAorICAgICAgICAgICAgICAgICAgICBoc3NpemUgPyBjb252ZXJ0X3VuaXRzKGhzdXNlZCwgMTAwLCBoc3NpemUpIDogaHN1c2VkKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICBuZXh0OgogICAgICAgICAgICAgdmxwID0gdmxwLT5uZXh0X3ZhcmlhYmxlOwpAQCAtMzM2LDcgKzM4Myw2IEBACiAgICAgfQogCiAgICAgaWYgKGNvdW50ID09IDApIHsKLSAgICAgICAgc2l6ZV90ICAgICAgICAgIHVuaXRzID0gMDsKICAgICAgICAgLyoKICAgICAgICAgICogdGhlIGhvc3QgcmVzb3VyY2VzIG1pYiBtdXN0IG5vdCBiZSBzdXBwb3J0ZWQuICBMZXRzIHRyeSB0aGUKICAgICAgICAgICogVUNELVNOTVAtTUlCIGFuZCBpdHMgZHNrVGFibGUgCkBAIC0zODMsMTIgKzQyOSwxOSBAQAogICAgICAgICAgICAgaWYgKHZscDItPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkgZ290byBuZXh0MjsKICAgICAgICAgICAgIGhzdXNlZCA9ICoodmxwMi0+dmFsLmludGVnZXIpOwogCi0gICAgICAgICAgICBwcmludGYoIiUtMThzICUxNWx1ICUxNWx1ICUxNWx1ICU0bHUlJVxuIiwgZGVzY3IsCi0gICAgICAgICAgICAgICAgICAgdW5pdHMgPyBjb252ZXJ0X3VuaXRzKGhzc2l6ZSwgdW5pdHMsIDEwMjQpIDogaHNzaXplLAotICAgICAgICAgICAgICAgICAgIHVuaXRzID8gY29udmVydF91bml0cyhoc3VzZWQsIHVuaXRzLCAxMDI0KSA6IGhzdXNlZCwKLSAgICAgICAgICAgICAgICAgICB1bml0cyA/IGNvbnZlcnRfdW5pdHMoaHNzaXplLWhzdXNlZCwgdW5pdHMsIDEwMjQpIDogaHNzaXplIC0KLSAgICAgICAgICAgICAgICAgICBoc3VzZWQsIGhzc2l6ZSA/IGNvbnZlcnRfdW5pdHMoaHN1c2VkLCAxMDAsIGhzc2l6ZSkgOgotICAgICAgICAgICAgICAgICAgIGhzdXNlZCk7CisgICAgICAgICAgICBpZiAoaHVtYW5fdW5pdHMpIHsKKyAgICAgICAgICAgICAgICBjaGFyIHNpemVbMTBdLCB1c2VkWzEwXSwgYXZhaWxbMTBdOworICAgICAgICAgICAgICAgIHByaW50ZigiJS0xOHMgJTEwcyAlMTBzICUxMHMgJTRsdSUlXG4iLCBkZXNjciwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2h1bWFuKHNpemUsIHNpemVvZiBzaXplLCBoc3NpemUsIGh1bWFuX3VuaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2h1bWFuKHVzZWQsIHNpemVvZiB1c2VkLCBoc3VzZWQsIGh1bWFuX3VuaXRzKSwKKyAgICAgICAgICAgICAgICAgICAgZm9ybWF0X2h1bWFuKGF2YWlsLCBzaXplb2YgYXZhaWwsIGhzc2l6ZSAtIGhzdXNlZCwgaHVtYW5fdW5pdHMpLAorICAgICAgICAgICAgICAgICAgICBoc3NpemUgPyBjb252ZXJ0X3VuaXRzKGhzdXNlZCwgMTAwLCBoc3NpemUpIDogaHN1c2VkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50ZigiJS0xOHMgJTE1bHUgJTE1bHUgJTE1bHUgJTRsdSUlXG4iLCBkZXNjciwKKyAgICAgICAgICAgICAgICAgICAgIGhzc2l6ZSwgaHN1c2VkLCBoc3NpemUgLSBoc3VzZWQsCisgICAgICAgICAgICAgICAgICAgICBoc3NpemUgPyBjb252ZXJ0X3VuaXRzKGhzdXNlZCwgMTAwLCBoc3NpemUpIDogaHN1c2VkKTsKKyAgICAgICAgICAgIH0KIAogICAgICAgICBuZXh0MjoKICAgICAgICAgICAgIHZscCA9IHZscC0+bmV4dF92YXJpYWJsZTsKZGlmZiAtLWdpdCBhL2FwcHMvc25tcGdldC5jIGIvYXBwcy9zbm1wZ2V0LmMKaW5kZXggMTBhNjk2OC4uNzAxZjUzNiAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wZ2V0LmMKKysrIGIvYXBwcy9zbm1wZ2V0LmMKQEAgLTQzLDExICs0Myw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTksOSArNTUsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC0xMjYsMTMgKzExOSwxNiBAQAogICAgIGludCAgICAgICAgICAgICBmYWlsdXJlcyA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGV4aXR2YWwgPSAwOwogCisKICAgICAvKgogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wZ2V0bmV4dC5jIGIvYXBwcy9zbm1wZ2V0bmV4dC5jCmluZGV4IDVmOTFkZWYuLjdkZTEzZjMgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcGdldG5leHQuYworKysgYi9hcHBzL3NubXBnZXRuZXh0LmMKQEAgLTQzLDExICs0Myw3IEBACiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxjdHlwZS5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTksOSArNTUsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC0xMjcsOSArMTIwLDExIEBACiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6IiwgJm9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQgYi9hcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZAppbmRleCBiMDUzNjFhLi5hN2FkMDk1IDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZAorKysgYi9hcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmRlcGVuZApAQCAtNyw1NCArNyw2MyBAQAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtNjMsMTMwICs3Miw3MSBAQAogLi9pZi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2lmLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaWYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vaWYubG86IG1haW4uaAogLi9pZi5sbzogbmV0c3RhdC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCi0uL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKLS4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBtYWluLmggbmV0c3RhdC5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTE5NSw2MyArMTQ1LDIxMSBAQAogLi9pbmV0Ni5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2luZXQ2LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vaW5ldDYubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9pbmV0LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2luZXQubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaW5ldC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBtYWluLmggbmV0c3RhdC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9pbmV0eC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2luZXR4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vaW5ldHgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAogLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtMjYwLDY1ICszNTgsNjkgQEAKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vbWFpbi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vbWFpbi5sbzogbWFpbi5oCi0uL21haW4ubG86IG5ldHN0YXQuaAorLi9tYWluLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21haW4ubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggbWFpbi5oIG5ldHN0YXQuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zMjcsNjYgKzQyOSwxNDAgQEAKIC4vcm91dGUubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL3JvdXRlLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCi0uL3JvdXRlLmxvOiBtYWluLmgKLS4vcm91dGUubG86IG5ldHN0YXQuaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9yb3V0ZS5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBtYWluLmggbmV0c3RhdC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9yb3V0ZXgubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vcm91dGV4LmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3JvdXRleC5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBtYWluLmggbmV0c3RhdC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi93aW5zdHViLmxvOiAuLi8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0zOTUsNCArNTcxLDUgQEAKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3dpbnN0dWIubG86IC4uLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vd2luc3R1Yi5sbzogLi4vLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaApkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiBiL2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW4KaW5kZXggNGEwN2ViYi4uMDRhZWI0MCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbgorKysgYi9hcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluCkBAIC0zLDYgKzMsOCBAQAogIwogCiB0b3BfYnVpbGRkaXI9Li4vLi4KK215c3ViZGlyPWFwcHMvc25tcG5ldHN0YXQKKwogSU5TVEFMTEJJTlBST0dTPXNubXBuZXRzdGF0JChFWEVFWFQpCiAKICMgdXNlIEdOVSB2cGF0aCwgaWYgYXZhaWxhYmxlLCB0byBvbmx5IHNldCBhIHBhdGggZm9yIHNvdXJjZSBhbmQgaGVhZGVycwpAQCAtMTYsMTUgKzE4LDE5IEBACiAjCiAjIGJ1aWxkIGluZm8KICMKLVNSQ1M9CWluZXQuYyBpbmV0Ni5jIGlmLmMgbWFpbi5jIHJvdXRlLmMgd2luc3R1Yi5jIGZmcy5jCi1PQkpTPQlpbmV0Lm8gaW5ldDYubyBpZi5vIG1haW4ubyByb3V0ZS5vIHdpbnN0dWIubyBmZnMubwotTE9CSlM9CWluZXQubG8gaW5ldDYubG8gaWYubG8gbWFpbi5sbyByb3V0ZS5sbyB3aW5zdHViLmxvIGZmcy5sbworU1JDUz0JaW5ldC5jIGluZXQ2LmMgaW5ldHguYyBpZi5jIG1haW4uYyByb3V0ZS5jIHJvdXRleC5jIHdpbnN0dWIuYyBmZnMuYworT0JKUz0JaW5ldC5vIGluZXQ2Lm8gaW5ldHgubyBpZi5vIG1haW4ubyByb3V0ZS5vIHJvdXRleC5vIHdpbnN0dWIubyBmZnMubworTE9CSlM9CWluZXQubG8gaW5ldDYubG8gaW5ldHgubG8gaWYubG8gbWFpbi5sbyByb3V0ZS5sbyByb3V0ZXgubG8gd2luc3R1Yi5sbyBmZnMubG8KK0ZUT0JKUz0JaW5ldC5mdCBpbmV0Ni5mdCBpbmV0eC5mdCBpZi5mdCBtYWluLmZ0IHJvdXRlLmZ0IHJvdXRleC5mdCB3aW5zdHViLmZ0IGZmcy5mdAogVEFSRz0gc25tcG5ldHN0YXQkKEVYRUVYVCkKIAorRkVBVFVSRUZJTEU9Li4vLi4vaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlcy1zbm1wbmV0c3RhdC5oCisKIENQUEZMQUdTPSAkKFRPUF9JTkNMVURFUykgIEBDUFBGTEFHU0AKIAorVkFMX0xJQlMJPSBAVkFMX0xJQlNACiBVU0VMSUJTPSAuLi8uLi9zbm1wbGliL2xpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCi1MSUJTPQkgLi4vLi4vc25tcGxpYi9saWJuZXRzbm1wLiQoTElCX0VYVEVOU0lPTikkKExJQl9WRVJTSU9OKSBATElCU0AKK0xJQlM9CSAuLi8uLi9zbm1wbGliL2xpYm5ldHNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pICQoVkFMX0xJQlMpIEBMSUJTQAogCiBhbGw6IHN0YW5kYXJkYWxsCiAKZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvaWYuYyBiL2FwcHMvc25tcG5ldHN0YXQvaWYuYwppbmRleCA2YThhNTE1Li4xMjVlNmEzIDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L2lmLmMKKysrIGIvYXBwcy9zbm1wbmV0c3RhdC9pZi5jCkBAIC00OSw4ICs0OSwxMiBAQAogI2lmIEhBVkVfTkVUX0lGX0gKICNpbmNsdWRlIDxuZXQvaWYuaD4KICNlbmRpZgotI2RlZmluZSBfX1VTRV9YT1BFTgotI2RlZmluZSBfX1VTRV9YT1BFTl9FWFRFTkRFRAorI2lmbmRlZiBfWE9QRU5fU09VUkNFCisjZGVmaW5lIF9YT1BFTl9TT1VSQ0UgMQorI2VuZGlmCisjaWZuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKKyNkZWZpbmUgX1hPUEVOX1NPVVJDRV9FWFRFTkRFRCAxCisjZW5kaWYKICNpbmNsdWRlIDxzaWduYWwuaD4KIAogI2luY2x1ZGUgIm1haW4uaCIKQEAgLTY5LDcgKzczLDcgQEAKICAgICAgICAgY2hhciAgICAgICAgICAgIGlwWzEyOF0sIHJvdXRlWzEyOF07CiAgICAgICAgIGludCAgICAgICAgICAgICBtdHU7CiAgICAgICAgIGludCAgICAgICAgICAgICBkcm9wczsKLSAgICAgICAgaW50ICAgICAgICAgICAgIGlmaW5kZXg7CisgICAgICAgIHVuc2lnbmVkIGludCAgICBpZmluZGV4OwogICAgICAgICAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgICAgICAgICAqIFNhdmUgImV4cGFuZGFibGUiIGZpZWxkcyBhcyBzdHJpbmcgdmFsdWVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgcmF0aGVyIHRoYW4gaW50ZWdlciBzdGF0aXN0aWNzCkBAIC0xMjgsMTQgKzEzMiwxNSBAQAogICAgICAqLwogICAgIGZvciAodnA9YWRkcl9pZl92YXIsIHZwMj1hZGRyX21hc2tfdmFyOyAgdnA7CiAgICAgICAgICB2cD12cC0+bmV4dF92YXJpYWJsZSwgdnAyPXZwMi0+bmV4dF92YXJpYWJsZSkgewotICAgICAgICBpZiAoIHZwLT52YWwuaW50ZWdlciAmJiAqdnAtPnZhbC5pbnRlZ2VyID09IGN1cl9pZi0+aWZpbmRleCApCisgICAgICAgIGlmICggdnAtPnZhbC5pbnRlZ2VyICYmICp2cC0+dmFsLmludGVnZXIgPT0gKGludCljdXJfaWYtPmlmaW5kZXggKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIGlmICh2cDIpIHsKICAgICAgICAgLyoKICAgICAgICAgICogQWx3YXlzIHdhbnQgYSBudW1lcmljIGludGVyZmFjZSBJUCBhZGRyZXNzCiAgICAgICAgICAqLwotICAgICAgICBzbnByaW50ZiggY3VyX2lmLT5pcCwgMTI4LCAiJWx1LiVsdS4lbHUuJWx1IiwKKyAgICAgICAgc25wcmludGYoIGN1cl9pZi0+aXAsIDEyOCwgIiUiIE5FVFNOTVBfUFJJbyAidS4lIiBORVRTTk1QX1BSSW8gInUuIgorICAgICAgICAgICAgICAgICAgIiUiIE5FVFNOTVBfUFJJbyAidS4lIiBORVRTTk1QX1BSSW8gInUiLAogICAgICAgICAgICAgICAgICAgdnAyLT5uYW1lWzEwXSwKICAgICAgICAgICAgICAgICAgIHZwMi0+bmFtZVsxMV0sCiAgICAgICAgICAgICAgICAgICB2cDItPm5hbWVbMTJdLApAQCAtMTQ2LDE2ICsxNTEsMTYgQEAKICAgICAgICAgICogICBkaXNwbGF5aW5nIHRoZSBsb2NhbCBuZXR3b3JrIGluZm9ybWF0aW9uCiAgICAgICAgICAqLwogICAgICAgICBjcCA9IHRtcEFkZHIuZGF0YTsKLSAgICAgICAgY3BbMF0gPSB2cDItPm5hbWVbIDEwIF0gJiAweGZmOwotICAgICAgICBjcFsxXSA9IHZwMi0+bmFtZVsgMTEgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzJdID0gdnAyLT5uYW1lWyAxMiBdICYgMHhmZjsKLSAgICAgICAgY3BbM10gPSB2cDItPm5hbWVbIDEzIF0gJiAweGZmOworICAgICAgICBjcFswXSA9ICh1aW50OF90KSB2cDItPm5hbWVbMTBdOworICAgICAgICBjcFsxXSA9ICh1aW50OF90KSB2cDItPm5hbWVbMTFdOworICAgICAgICBjcFsyXSA9ICh1aW50OF90KSB2cDItPm5hbWVbMTJdOworICAgICAgICBjcFszXSA9ICh1aW50OF90KSB2cDItPm5hbWVbMTNdOwogICAgICAgICBpZkFkZHIgPSB0bXBBZGRyLmFkZHI7CiAgICAgICAgIGNwID0gdG1wQWRkci5kYXRhOwotICAgICAgICBjcFswXSA9IHZwMi0+dmFsLnN0cmluZ1sgMCBdICYgMHhmZjsKLSAgICAgICAgY3BbMV0gPSB2cDItPnZhbC5zdHJpbmdbIDEgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzJdID0gdnAyLT52YWwuc3RyaW5nWyAyIF0gJiAweGZmOwotICAgICAgICBjcFszXSA9IHZwMi0+dmFsLnN0cmluZ1sgMyBdICYgMHhmZjsKKyAgICAgICAgY3BbMF0gPSAodWludDhfdCkgdnAyLT52YWwuc3RyaW5nWzBdOworICAgICAgICBjcFsxXSA9ICh1aW50OF90KSB2cDItPnZhbC5zdHJpbmdbMV07CisgICAgICAgIGNwWzJdID0gKHVpbnQ4X3QpIHZwMi0+dmFsLnN0cmluZ1syXTsKKyAgICAgICAgY3BbM10gPSAodWludDhfdCkgdnAyLT52YWwuc3RyaW5nWzNdOwogICAgICAgICBtYXNrID0gdG1wQWRkci5hZGRyOwogICAgICAgICBzbnByaW50ZiggY3VyX2lmLT5yb3V0ZSwgMTI4LCAiJXMiLCBuZXRuYW1lKGlmQWRkciwgbWFzaykpOwogICAgIH0KQEAgLTI4Niw3ICsyOTEsNiBAQAogICAgICAgICAgICAgICAgICAqIFhYWCAtIFRyeSB0byByZWNvdmVyID8KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUoIGN1cl9pZiApOwotICAgICAgICAgICAgICAgIGN1cl9pZiA9IE5VTEw7CiAgICAgICAgICAgICAgICAgYnJlYWs7ICAgIC8qIG5vdCBmb3Igbm93LCBubyAqLwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3dpdGNoICggdnAtPm5hbWVbIHZhci0+bmFtZV9sZW5ndGgtMiBdICkgewpAQCAtMzkxLDcgKzM5NSw2IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoIGludHJmYWNlICYmIHN0cmNtcCggY3VyX2lmLT5uYW1lLCBpbnRyZmFjZSkgIT0gMCAmJiBzdHJjbXAoIGN1cl9pZi0+ZGVzY3IsIGludHJmYWNlKSAhPSAwKSB7CiAgICAgICAgICAgICBTTk1QX0ZSRUUoIGN1cl9pZiApOwotICAgICAgICAgICAgY3VyX2lmID0gTlVMTDsKICAgICAgICAgfQogCiAgICAgICAgIC8qCkBAIC01MzcsNyArNTQwLDcgQEAKICAgICBzdHJ1Y3QgaWZ0b3QgKnN1bSA9IE5VTEwsICp0b3RhbCAgPSBOVUxMOyAgICAvKiBvdmVyYWxsIHN1bW1hcnkgICAgKi8KICAgICBpbnQgICAgbGluZTsKICAgICBpbnQgICAgZmlyc3Q7Ci0gICAgaW50ICAgIGk7CisgICAgc2l6ZV90IGk7CiAKICAgICB2YXIgPSBOVUxMOwogICAgIGlmICggaW50cmZhY2UgKSB7CmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L2luZXQuYyBiL2FwcHMvc25tcG5ldHN0YXQvaW5ldC5jCmluZGV4IDdkYzNmZjEuLjA1MzczNDAgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvaW5ldC5jCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvaW5ldC5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKICNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KICNpbmNsdWRlICJ3aW5zdHViLmgiCiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSApAQCAtNjksNyArNjcsNyBAQAogI2luY2x1ZGUgIm5ldHN0YXQuaCIKIAogc3RydWN0IHN0YXRfdGFibGUgewotICAgIGludCAgICAgICAgICAgICBlbnRyeTsgICAgICAvKiBlbnRyeSBudW1iZXIgaW4gdGFibGUgKi8KKyAgICB1bnNpZ25lZCBpbnQgIGVudHJ5OyAgICAgIC8qIGVudHJ5IG51bWJlciBpbiB0YWJsZSAqLwogICAgIC8qCiAgICAgICogZm9ybWF0IHN0cmluZyB0byBwcmludGYoZGVzY3JpcHRpb24sIHZhbHVlKSAKICAgICAgKiB3YXJuaW5nOiB0aGUgJWQgbXVzdCBiZSBiZWZvcmUgdGhlICVzIApAQCAtMTA2LDIwICsxMDQsNjUgQEAKIH07CiAjZGVmaW5lIFRDUF9OU1RBVEVTIDExCiAKLXZvaWQKLXRjcHByb3RvcHIoY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyB2b2lkCit0Y3Bwcm90b3ByaW50X2xpbmUoY29uc3QgY2hhciAqbmFtZSwgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2cCwgaW50ICpmaXJzdCkKIHsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgKnZwOwotICAgIG9pZCAgICB0Y3BDb25uU3RhdGVfb2lkW10gPSB7IDEsMyw2LDEsMiwxLDYsMTMsMSwxIH07Ci0gICAgc2l6ZV90IHRjcENvbm5TdGF0ZV9sZW4gICA9IE9JRF9MRU5HVEgoIHRjcENvbm5TdGF0ZV9vaWQgKTsKICAgICBpbnQgICAgc3RhdGUsIHdpZHRoOworICAgIGNoYXIgICpjcDsKICAgICB1bmlvbiB7CiAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGFkZHI7CiAgICAgICAgIGNoYXIgICAgICBkYXRhWzRdOwogICAgIH0gdG1wQWRkcjsKICAgICBvaWQgICAgbG9jYWxQb3J0LCByZW1vdGVQb3J0OwogICAgIHN0cnVjdCBpbl9hZGRyIGxvY2FsQWRkciwgcmVtb3RlQWRkcjsKLSAgICBjaGFyICAqY3A7CisKKwlzdGF0ZSA9ICp2cC0+dmFsLmludGVnZXI7CisJaWYgKCFhZmxhZyAmJiBzdGF0ZSA9PSBNSUJfVENQQ09OTlNUQVRFX0xJU1RFTikgeworCQlyZXR1cm47CisJfQorCisJaWYgKCpmaXJzdCkgeworCQlwcmludGYoIkFjdGl2ZSBJbnRlcm5ldCAoJXMpIENvbm5lY3Rpb25zIiwgbmFtZSk7CisJCWlmIChhZmxhZykKKwkJCXByaW50ZigiIChpbmNsdWRpbmcgc2VydmVycykiKTsKKwkJcHV0Y2hhcignXG4nKTsKKwkJd2lkdGggPSAyNzsKKwkJcHJpbnRmKCIlLTUuNXMgJSouKnMgJSouKnMgJXNcbiIsCisJCQkgICAiUHJvdG8iLCAtd2lkdGgsIHdpZHRoLCAiTG9jYWwgQWRkcmVzcyIsCisJCQkJCQktd2lkdGgsIHdpZHRoLCAiUmVtb3RlIEFkZHJlc3MiLCAiKHN0YXRlKSIpOworCQkqZmlyc3QgPSAwOworCX0KKwkKKwkvKiBFeHRyYWN0IHRoZSBsb2NhbC9yZW1vdGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5kZXggdmFsdWVzICovCisJY3AgPSB0bXBBZGRyLmRhdGE7CisJY3BbMF0gPSAodWludDhfdCkgdnAtPm5hbWVbMTBdOworCWNwWzFdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzExXTsKKwljcFsyXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxMl07CisJY3BbM10gPSAodWludDhfdCkgdnAtPm5hbWVbMTNdOworCWxvY2FsQWRkci5zX2FkZHIgPSB0bXBBZGRyLmFkZHIuc19hZGRyOworCWxvY2FsUG9ydCAgICAgICAgPSB2cC0+bmFtZVsgMTQgXTsKKwljcCA9IHRtcEFkZHIuZGF0YTsKKwljcFswXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxNV07CisJY3BbMV0gPSAodWludDhfdCkgdnAtPm5hbWVbMTZdOworCWNwWzJdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzE3XTsKKwljcFszXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxOF07CisJcmVtb3RlQWRkci5zX2FkZHIgPSB0bXBBZGRyLmFkZHIuc19hZGRyOworCXJlbW90ZVBvcnQgICAgICAgID0gdnAtPm5hbWVbIDE5IF07CisKKwlwcmludGYoIiUtNS41cyIsIG5hbWUpOworCWluZXRwcmludCgmbG9jYWxBZGRyLCAgbG9jYWxQb3J0LCAgbmFtZSwgMSk7CisJaW5ldHByaW50KCZyZW1vdGVBZGRyLCByZW1vdGVQb3J0LCBuYW1lLCAwKTsKKwlpZiAoc3RhdGUgPCAxIHx8IHN0YXRlID4gVENQX05TVEFURVMpIHsKKwkJcHJpbnRmKCIgJWRcbiIsIHN0YXRlICk7CisJfSBlbHNlIHsKKwkJcHJpbnRmKCIgJXNcbiIsIHRjcHN0YXRlc1tzdGF0ZV0pOworCX0KK30KKworc3RhdGljIHZvaWQKK3RjcHByb3RvcHJfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcm9vdCwgc2l6ZV90IHJvb3RfbGVuKQoreworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCAqdnA7CiAgICAgaW50ICAgIGZpcnN0ID0gMTsKIAogICAgIC8qCkBAIC0xMjcsNTMgKzE3MCwxNyBAQAogICAgICAqICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KICAgICAgKi8KICAgICB2YXIgPSBOVUxMOwotICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIHRjcENvbm5TdGF0ZV9vaWQsIHRjcENvbm5TdGF0ZV9sZW4sCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgcm9vdCwgcm9vdF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9OVUxMLCBOVUxMLCAgMCk7CiAgICAgaWYgKCF2YXIpCiAgICAgICAgIHJldHVybjsKICAgICBpZiAobmV0c25tcF9xdWVyeV93YWxrKCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKICAgICAgICAgcmV0dXJuOworICAgIGlmICgodmFyLT50eXBlICYgMHhGMCkgPT0gMHg4MCkJLyogRXhjZXB0aW9uICovCisJcmV0dXJuOwogCiAgICAgZm9yICh2cCA9IHZhcjsgdnAgOyB2cD12cC0+bmV4dF92YXJpYWJsZSkgewotICAgICAgICBzdGF0ZSA9ICp2cC0+dmFsLmludGVnZXI7Ci0gICAgICAgIGlmICghYWZsYWcgJiYgc3RhdGUgPT0gTUlCX1RDUENPTk5TVEFURV9MSVNURU4pCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZmlyc3QpIHsKLSAgICAgICAgICAgIHByaW50ZigiQWN0aXZlIEludGVybmV0ICglcykgQ29ubmVjdGlvbnMiLCBuYW1lKTsKLSAgICAgICAgICAgIGlmIChhZmxhZykKLSAgICAgICAgICAgICAgICBwcmludGYoIiAoaW5jbHVkaW5nIHNlcnZlcnMpIik7Ci0gICAgICAgICAgICBwdXRjaGFyKCdcbicpOwotICAgICAgICAgICAgd2lkdGggPSBBZmxhZyA/IDE4IDogMjI7Ci0gICAgICAgICAgICBwcmludGYoIiUtNS41cyAlKi4qcyAlKi4qcyAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAiUHJvdG8iLCAtd2lkdGgsIHdpZHRoLCAiTG9jYWwgQWRkcmVzcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLXdpZHRoLCB3aWR0aCwgIlJlbW90ZSBBZGRyZXNzIiwgIihzdGF0ZSkiKTsKLSAgICAgICAgICAgIGZpcnN0PTA7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIC8qIEV4dHJhY3QgdGhlIGxvY2FsL3JlbW90ZSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbmRleCB2YWx1ZXMgKi8KLSAgICAgICAgY3AgPSB0bXBBZGRyLmRhdGE7Ci0gICAgICAgIGNwWzBdID0gdnAtPm5hbWVbIDEwIF0gJiAweGZmOwotICAgICAgICBjcFsxXSA9IHZwLT5uYW1lWyAxMSBdICYgMHhmZjsKLSAgICAgICAgY3BbMl0gPSB2cC0+bmFtZVsgMTIgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzNdID0gdnAtPm5hbWVbIDEzIF0gJiAweGZmOwotICAgICAgICBsb2NhbEFkZHIuc19hZGRyID0gdG1wQWRkci5hZGRyLnNfYWRkcjsKLSAgICAgICAgbG9jYWxQb3J0ICAgICAgICA9IG50b2hzKCh1X3Nob3J0KSh2cC0+bmFtZVsgMTQgXSkpOwotICAgICAgICBjcCA9IHRtcEFkZHIuZGF0YTsKLSAgICAgICAgY3BbMF0gPSB2cC0+bmFtZVsgMTUgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzFdID0gdnAtPm5hbWVbIDE2IF0gJiAweGZmOwotICAgICAgICBjcFsyXSA9IHZwLT5uYW1lWyAxNyBdICYgMHhmZjsKLSAgICAgICAgY3BbM10gPSB2cC0+bmFtZVsgMTggXSAmIDB4ZmY7Ci0gICAgICAgIHJlbW90ZUFkZHIuc19hZGRyID0gdG1wQWRkci5hZGRyLnNfYWRkcjsKLSAgICAgICAgcmVtb3RlUG9ydCAgICAgICAgPSBudG9ocygodV9zaG9ydCkodnAtPm5hbWVbIDE5IF0pKTsKLQotICAgICAgICBwcmludGYoIiUtNS41cyIsIG5hbWUpOwotICAgICAgICBpbmV0cHJpbnQoJmxvY2FsQWRkciwgIGxvY2FsUG9ydCwgIG5hbWUsIDEpOwotICAgICAgICBpbmV0cHJpbnQoJnJlbW90ZUFkZHIsIHJlbW90ZVBvcnQsIG5hbWUsIDApOwotICAgICAgICBpZiAoIHN0YXRlIDwgMSB8fCBzdGF0ZSA+IFRDUF9OU1RBVEVTICkKLSAgICAgICAgICAgIHByaW50ZigiJWRcbiIsIHN0YXRlICk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIHRjcHN0YXRlc1sgc3RhdGUgXSk7CisgICAgICAgIHRjcHByb3RvcHJpbnRfbGluZShuYW1lLCB2cCwgJmZpcnN0KTsKICAgICB9CiAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIHZhciApOwogfQpAQCAtMjA3LDkgKzIxNCwxMSBAQAogICAgICAgICByZXR1cm47CiAgICAgaWYgKG5ldHNubXBfcXVlcnlfd2FsayggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgIHJldHVybjsKKyAgICBpZiAoKHZhci0+dHlwZSAmIDB4RjApID09IDB4ODApCS8qIEV4Y2VwdGlvbiAqLworCXJldHVybjsKIAogICAgIHByaW50ZigiQWN0aXZlIEludGVybmV0ICglcykgQ29ubmVjdGlvbnNcbiIsIG5hbWUpOwotICAgIHByaW50ZigiJS01LjVzICUtMjguMjhzXG4iLCAiUHJvdG8iLCAiTG9jYWwgQWRkcmVzcyIpOworICAgIHByaW50ZigiJS01LjVzICUtMjcuMjdzXG4iLCAiUHJvdG8iLCAiTG9jYWwgQWRkcmVzcyIpOwogICAgIGZvciAodnAgPSB2YXI7IHZwIDsgdnA9dnAtPm5leHRfdmFyaWFibGUpIHsKICAgICAgICAgcHJpbnRmKCIlLTUuNXMiLCBuYW1lKTsKICAgICAgICAgLyoKQEAgLTIxOCwxOCArMjI3LDEyMyBAQAogICAgICAgICAgKiAgIHdlIHdhbGtlZCB1ZHBMb2NhbEFkZHJlc3MgcmF0aGVyIHRoYW4gdWRwTG9jYWxQb3J0KQogICAgICAgICAgKi8KICAgICAgICAgY3AgPSB0bXBBZGRyLmRhdGE7Ci0gICAgICAgIGNwWzBdID0gdnAtPm5hbWVbIDEwIF0gJiAweGZmOwotICAgICAgICBjcFsxXSA9IHZwLT5uYW1lWyAxMSBdICYgMHhmZjsKLSAgICAgICAgY3BbMl0gPSB2cC0+bmFtZVsgMTIgXSAmIDB4ZmY7Ci0gICAgICAgIGNwWzNdID0gdnAtPm5hbWVbIDEzIF0gJiAweGZmOworICAgICAgICBjcFswXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxMF07CisgICAgICAgIGNwWzFdID0gKHVpbnQ4X3QpIHZwLT5uYW1lWzExXTsKKyAgICAgICAgY3BbMl0gPSAodWludDhfdCkgdnAtPm5hbWVbMTJdOworICAgICAgICBjcFszXSA9ICh1aW50OF90KSB2cC0+bmFtZVsxM107CiAgICAgICAgIGxvY2FsQWRkci5zX2FkZHIgPSB0bXBBZGRyLmFkZHIuc19hZGRyOwotICAgICAgICBsb2NhbFBvcnQgICAgICAgID0gbnRvaHMoICh1X3Nob3J0KSh2cC0+bmFtZVsgMTQgXSkpOworICAgICAgICBsb2NhbFBvcnQgICAgICAgID0gdnAtPm5hbWVbIDE0IF07CiAgICAgICAgIGluZXRwcmludCgmbG9jYWxBZGRyLCBsb2NhbFBvcnQsIG5hbWUsIDEpOwogICAgICAgICBwdXRjaGFyKCdcbicpOwogICAgIH0KICAgICBzbm1wX2ZyZWVfdmFyYmluZCggdmFyICk7CiB9CiAKK3ZvaWQKK3RjcHByb3RvcHJfYnVsa2dldChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJvb3QsIHNpemVfdCByb290X2xlbikKK3sKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZwOworCW5ldHNubXBfcGR1ICAgICpwZHUsICpyZXNwb25zZTsKKyAgICBvaWQgICAgICAgICAgICAgdGNwQ29ublN0YXRlX29pZFtNQVhfT0lEX0xFTl07CisJc2l6ZV90ICAgICAgICAgIHRjcENvbm5TdGF0ZV9sZW47CisgICAgaW50ICAgIGZpcnN0ID0gMTsKKyAgICBpbnQgICAgcnVubmluZyA9IDE7CisgICAgaW50ICAgIHN0YXR1czsKKworCS8qCisgICAgICogc2V0dXAgaW5pdGlhbCBvYmplY3QgbmFtZQorICAgICAqLworCW1lbW1vdmUodGNwQ29ublN0YXRlX29pZCwgcm9vdCwgc2l6ZW9mKG9pZCkgKiByb290X2xlbik7CisJdGNwQ29ublN0YXRlX2xlbiA9IHJvb3RfbGVuOworCisgICAgLyoKKyAgICAgKiBXYWxraW5nIHRoZSB0Y3BDb25uU3RhdGUgY29sdW1uIHdpbGwgcHJvdmlkZSBhbGwKKyAgICAgKiAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24uCisgICAgICovCisJd2hpbGUgKHJ1bm5pbmcpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogY3JlYXRlIFBEVSBmb3IgR0VUQlVMSyByZXF1ZXN0IGFuZCBhZGQgb2JqZWN0IG5hbWUgdG8gcmVxdWVzdAorICAgICAgICAgKi8KKyAgICAgICAgcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVEJVTEspOworICAgICAgICBwZHUtPm5vbl9yZXBlYXRlcnMgPSAwOworICAgICAgICBwZHUtPm1heF9yZXBldGl0aW9ucyA9IG1heF9nZXRidWxrOyAgICAvKiBmaWxsIHRoZSBwYWNrZXQgKi8KKyAgICAgICAgc25tcF9hZGRfbnVsbF92YXIocGR1LCB0Y3BDb25uU3RhdGVfb2lkLCB0Y3BDb25uU3RhdGVfbGVuKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBkbyB0aGUgcmVxdWVzdAorICAgICAgICAgKi8KKyAgICAgICAgc3RhdHVzID0gc25tcF9zeW5jaF9yZXNwb25zZShzcywgcGR1LCAmcmVzcG9uc2UpOworICAgICAgICBpZiAoc3RhdHVzID09IFNUQVRfU1VDQ0VTUykgeworICAgICAgICAgICAgaWYgKHJlc3BvbnNlLT5lcnJzdGF0ID09IFNOTVBfRVJSX05PRVJST1IpIHsKKwkJCQlmb3IgKHZwID0gcmVzcG9uc2UtPnZhcmlhYmxlczsgdnAgOyB2cD12cC0+bmV4dF92YXJpYWJsZSkgeworICAgICAgICAgICAgICAgICAgICBpZiAoKHZwLT5uYW1lX2xlbmd0aCA8IHJvb3RfbGVuKSB8fAorCQkJCQkJCShtZW1jbXAocm9vdCwgdnAtPm5hbWUsIHNpemVvZihvaWQpICogcm9vdF9sZW4pICE9IDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgICAgICogbm90IHBhcnQgb2YgdGhpcyBzdWJ0cmVlCisgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJ1bm5pbmcgPSAwOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAoKHZwLT50eXBlICE9IFNOTVBfRU5ET0ZNSUJWSUVXKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHZwLT50eXBlICE9IFNOTVBfTk9TVUNIT0JKRUNUKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgKHZwLT50eXBlICE9IFNOTVBfTk9TVUNISU5TVEFOQ0UpKSB7CisKKwkJCXRjcHByb3RvcHJpbnRfbGluZShuYW1lLCB2cCwgJmZpcnN0KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICAgICAqIENoZWNrIGlmIGxhc3QgdmFyaWFibGUsIGFuZCBpZiBzbywgc2F2ZSBmb3IgbmV4dCByZXF1ZXN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAodnAtPm5leHRfdmFyaWFibGUgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbW1vdmUodGNwQ29ublN0YXRlX29pZCwgdnAtPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+bmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwQ29ublN0YXRlX2xlbiA9IHZwLT5uYW1lX2xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICAgICAgICAgKiBhbiBleGNlcHRpb24gdmFsdWUsIHNvIHN0b3AKKyAgICAgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICAgICAgcnVubmluZyA9IDA7CisgICAgICAgICAgICAgICAgICAgIH0KKwkJCQl9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogZXJyb3IgaW4gcmVzcG9uc2UsIHByaW50IGl0CisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgcnVubmluZyA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdHVzID09IFNUQVRfVElNRU9VVCkgeworICAgICAgICAgICAgcnVubmluZyA9IDA7CisgICAgICAgIH0gZWxzZSB7ICAgICAgICAgICAgICAgIC8qIHN0YXR1cyA9PSBTVEFUX0VSUk9SICovCisgICAgICAgICAgICBydW5uaW5nID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXNwb25zZSkgeworICAgICAgICAgICAgc25tcF9mcmVlX3BkdShyZXNwb25zZSk7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3RjcHByb3RvcHIoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBvaWQgICAgdGNwQ29ublN0YXRlX29pZFtdID0geyAxLDMsNiwxLDIsMSw2LDEzLDEsMSB9OworICAgIHNpemVfdCB0Y3BDb25uU3RhdGVfbGVuICAgPSBPSURfTEVOR1RIKCB0Y3BDb25uU3RhdGVfb2lkICk7CisgICAgaW50ICAgIHVzZV9nZXRidWxrID0gMTsKKworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisgICAgaWYgKHNzLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xKSB7CisgICAgICAgIHVzZV9nZXRidWxrID0gMDsKKyAgICB9CisjZW5kaWYKKworICAgIGlmICh1c2VfZ2V0YnVsaykgeworCSAgICB0Y3Bwcm90b3ByX2J1bGtnZXQobmFtZSwgdGNwQ29ublN0YXRlX29pZCwgdGNwQ29ublN0YXRlX2xlbik7CisgICAgfSBlbHNlIHsKKwkgICAgdGNwcHJvdG9wcl9nZXQobmFtZSwgdGNwQ29ublN0YXRlX29pZCwgdGNwQ29ublN0YXRlX2xlbik7CisgICAgfQorfQorCiAKIAkvKioqKioqKioqKioqKioqKioqKioqCiAJICoKQEAgLTI4Miw3ICszOTYsNiBAQAogICAgICAgICAgKiAgIHRoZW4gb25seSBkaXNwbGF5IG5vbi16ZXJvIHN0YXRzLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCAqdnAtPnZhbC5pbnRlZ2VyID4gMCB8fCBzZmxhZyA9PSAxICkgewotICAgICAgICAgICAgcHV0Y2hhcignXHQnKTsKICAgICAgICAgICAgIHByaW50ZihzcC0+ZGVzY3JpcHRpb24sICp2cC0+dmFsLmludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdXJhbCgqdnAtPnZhbC5pbnRlZ2VyKSk7CiAgICAgICAgICAgICBwdXRjaGFyKCdcbicpOwpAQCAtMzAxLDI0ICs0MTQsMjQgQEAKICAgICBvaWQgICAgICAgICAgICAgICBpcHN0YXRzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAwLCAwIH07CiAgICAgc2l6ZV90ICAgICAgICAgICAgaXBzdGF0c19sZW4gICA9IE9JRF9MRU5HVEgoIGlwc3RhdHNfb2lkICk7CiAgICAgc3RydWN0IHN0YXRfdGFibGUgaXBzdGF0c190YmxbXSA9IHsKLSAgICAgICAgezMsICIlZCB0b3RhbCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHs0LCAiJWQgZGF0YWdyYW0lcyB3aXRoIGhlYWRlciBlcnJvcnMifSwKLSAgICAgICAgezUsICIlZCBkYXRhZ3JhbSVzIHdpdGggYW4gaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIn0sCi0gICAgICAgIHs2LCAiJWQgZGF0YWdyYW0lcyBmb3J3YXJkZWQifSwKLSAgICAgICAgezcsICIlZCBkYXRhZ3JhbSVzIHdpdGggdW5rbm93biBwcm90b2NvbCJ9LAotICAgICAgICB7OCwgIiVkIGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCi0gICAgICAgIHs5LCAiJWQgZGF0YWdyYW0lcyBkZWxpdmVyZWQifSwKLSAgICAgICAgezEwLCAiJWQgb3V0cHV0IGRhdGFncmFtIHJlcXVlc3QlcyJ9LAotICAgICAgICB7MTEsICIlZCBvdXRwdXQgZGF0YWdyYW0lcyBkaXNjYXJkZWQifSwKLSAgICAgICAgezEyLCAiJWQgZGF0YWdyYW0lcyB3aXRoIG5vIHJvdXRlIn0sCi0gICAgICAgIHsxNCwgIiVkIGZyYWdtZW50JXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezE1LCAiJWQgZGF0YWdyYW0lcyByZWFzc2VtYmxlZCJ9LAotICAgICAgICB7MTYsICIlZCByZWFzc2VtYmx5IGZhaWx1cmUlcyJ9LAotICAgICAgICB7MTcsICIlZCBkYXRhZ3JhbSVzIGZyYWdtZW50ZWQifSwKLSAgICAgICAgezE4LCAiJWQgZnJhZ21lbnRhdGlvbiBmYWlsdXJlJXMifSwKLSAgICAgICAgezE5LCAiJWQgZnJhZ21lbnQlcyBjcmVhdGVkIn0sCi0gICAgICAgIHsyMywgIiVkIHJvdXRlJXMgZGlzY2FyZGVkIn0sCi0gICAgICAgIHswLCAiIn0KKyAgICAgICAgeyAzLCAiJTE0ZCB0b3RhbCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsgNCwgIiUxNGQgZGF0YWdyYW0lcyB3aXRoIGhlYWRlciBlcnJvcnMifSwKKyAgICAgICAgeyA1LCAiJTE0ZCBkYXRhZ3JhbSVzIHdpdGggYW4gaW52YWxpZCBkZXN0aW5hdGlvbiBhZGRyZXNzIn0sCisgICAgICAgIHsgNiwgIiUxNGQgZGF0YWdyYW0lcyBmb3J3YXJkZWQifSwKKyAgICAgICAgeyA3LCAiJTE0ZCBkYXRhZ3JhbSVzIHdpdGggdW5rbm93biBwcm90b2NvbCJ9LAorICAgICAgICB7IDgsICIlMTRkIGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCisgICAgICAgIHsgOSwgIiUxNGQgZGF0YWdyYW0lcyBkZWxpdmVyZWQifSwKKyAgICAgICAgezEwLCAiJTE0ZCBvdXRwdXQgZGF0YWdyYW0gcmVxdWVzdCVzIn0sCisgICAgICAgIHsxMSwgIiUxNGQgb3V0cHV0IGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCisgICAgICAgIHsxMiwgIiUxNGQgZGF0YWdyYW0lcyB3aXRoIG5vIHJvdXRlIn0sCisgICAgICAgIHsxNCwgIiUxNGQgZnJhZ21lbnQlcyByZWNlaXZlZCJ9LAorICAgICAgICB7MTUsICIlMTRkIGRhdGFncmFtJXMgcmVhc3NlbWJsZWQifSwKKyAgICAgICAgezE2LCAiJTE0ZCByZWFzc2VtYmx5IGZhaWx1cmUlcyJ9LAorICAgICAgICB7MTcsICIlMTRkIGRhdGFncmFtJXMgZnJhZ21lbnRlZCJ9LAorICAgICAgICB7MTgsICIlMTRkIGZyYWdtZW50YXRpb24gZmFpbHVyZSVzIn0sCisgICAgICAgIHsxOSwgIiUxNGQgZnJhZ21lbnQlcyBjcmVhdGVkIn0sCisgICAgICAgIHsyMywgIiUxNGQgcm91dGUlcyBkaXNjYXJkZWQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwogCiAgICAgX2R1bXBfc3RhdHMoIG5hbWUsIGlwc3RhdHNfb2lkLCBpcHN0YXRzX2xlbiwgaXBzdGF0c190YmwgKTsKQEAgLTMzNCwzOCArNDQ3LDM4IEBACiAgICAgb2lkICAgICAgICAgICAgICAgaWNtcHN0YXRzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA1LCAwLCAwIH07CiAgICAgc2l6ZV90ICAgICAgICAgICAgaWNtcHN0YXRzX2xlbiAgID0gT0lEX0xFTkdUSCggaWNtcHN0YXRzX29pZCApOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGljbXBzdGF0c190YmxbXSA9IHsKLSAgICAgICAgezEsICIlZCB0b3RhbCBtZXNzYWdlJXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezIsICIlZCBtZXNzYWdlJXMgZHJvcHBlZCBkdWUgdG8gZXJyb3JzIn0sCi0gICAgICAgIHsxNCwgIiVkIG91cHV0IG1lc3NhZ2UgcmVxdWVzdCVzIn0sCi0gICAgICAgIHsxNSwgIiVkIG91dHB1dCBtZXNzYWdlJXMgZGlzY2FyZGVkIn0sCi0gICAgICAgIHswLCAiIn0KKyAgICAgICAgeyAxLCAiJTE0ZCB0b3RhbCBtZXNzYWdlJXMgcmVjZWl2ZWQifSwKKyAgICAgICAgeyAyLCAiJTE0ZCBtZXNzYWdlJXMgZHJvcHBlZCBkdWUgdG8gZXJyb3JzIn0sCisgICAgICAgIHsxNCwgIiUxNGQgb3VwdXQgbWVzc2FnZSByZXF1ZXN0JXMifSwKKyAgICAgICAgezE1LCAiJTE0ZCBvdXRwdXQgbWVzc2FnZSVzIGRpc2NhcmRlZCJ9LAorICAgICAgICB7IDAsICIifQogICAgIH07CiAgICAgc3RydWN0IHN0YXRfdGFibGUgaWNtcF9pbmhpc3RvZ3JhbVtdID0gewotICAgICAgICB7MywgIkRlc3RpbmF0aW9uIHVucmVhY2hhYmxlOiAlZCJ9LAotICAgICAgICB7NCwgIlRpbWUgRXhjZWVkZWQ6ICVkIn0sCi0gICAgICAgIHs1LCAiUGFyYW1ldGVyIFByb2JsZW06ICVkIn0sCi0gICAgICAgIHs2LCAiU291cmNlIFF1ZW5jaDogJWQifSwKLSAgICAgICAgezcsICJSZWRpcmVjdDogJWQifSwKLSAgICAgICAgezgsICJFY2hvIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHs5LCAiRWNobyBSZXBseTogJWQifSwKLSAgICAgICAgezEwLCAiVGltZXN0YW1wIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHsxMSwgIlRpbWVzdGFtcCBSZXBseTogJWQifSwKLSAgICAgICAgezEyLCAiQWRkcmVzcyBNYXNrIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHsxMywgIkFkZHJlc3MgTWFzayBSZXBseTogJWQifSwKLSAgICAgICAgezAsICIifQorICAgICAgICB7IDMsICIgICAgICAgIERlc3RpbmF0aW9uIHVucmVhY2hhYmxlOiAlZCJ9LAorICAgICAgICB7IDQsICIgICAgICAgIFRpbWUgRXhjZWVkZWQ6ICVkIn0sCisgICAgICAgIHsgNSwgIiAgICAgICAgUGFyYW1ldGVyIFByb2JsZW06ICVkIn0sCisgICAgICAgIHsgNiwgIiAgICAgICAgU291cmNlIFF1ZW5jaDogJWQifSwKKyAgICAgICAgeyA3LCAiICAgICAgICBSZWRpcmVjdDogJWQifSwKKyAgICAgICAgeyA4LCAiICAgICAgICBFY2hvIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsgOSwgIiAgICAgICAgRWNobyBSZXBseTogJWQifSwKKyAgICAgICAgezEwLCAiICAgICAgICBUaW1lc3RhbXAgUmVxdWVzdDogJWQifSwKKyAgICAgICAgezExLCAiICAgICAgICBUaW1lc3RhbXAgUmVwbHk6ICVkIn0sCisgICAgICAgIHsxMiwgIiAgICAgICAgQWRkcmVzcyBNYXNrIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsxMywgIiAgICAgICAgQWRkcmVzcyBNYXNrIFJlcGx5OiAlZCJ9LAorICAgICAgICB7IDAsICIifQogICAgIH07CiAgICAgc3RydWN0IHN0YXRfdGFibGUgaWNtcF9vdXRoaXN0b2dyYW1bXSA9IHsKLSAgICAgICAgezE2LCAiRGVzdGluYXRpb24gdW5yZWFjaGFibGU6ICVkIn0sCi0gICAgICAgIHsxNywgIlRpbWUgRXhjZWVkZWQ6ICVkIn0sCi0gICAgICAgIHsxOCwgIlBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAotICAgICAgICB7MTksICJTb3VyY2UgUXVlbmNoOiAlZCJ9LAotICAgICAgICB7MjAsICJSZWRpcmVjdDogJWQifSwKLSAgICAgICAgezIxLCAiRWNobyBSZXF1ZXN0OiAlZCJ9LAotICAgICAgICB7MjIsICJFY2hvIFJlcGx5OiAlZCJ9LAotICAgICAgICB7MjMsICJUaW1lc3RhbXAgUmVxdWVzdDogJWQifSwKLSAgICAgICAgezI0LCAiVGltZXN0YW1wIFJlcGx5OiAlZCJ9LAotICAgICAgICB7MjUsICJBZGRyZXNzIE1hc2sgUmVxdWVzdDogJWQifSwKLSAgICAgICAgezI2LCAiQWRkcmVzcyBNYXNrIFJlcGx5OiAlZCJ9LAorICAgICAgICB7MTYsICIgICAgICAgIERlc3RpbmF0aW9uIHVucmVhY2hhYmxlOiAlZCJ9LAorICAgICAgICB7MTcsICIgICAgICAgIFRpbWUgRXhjZWVkZWQ6ICVkIn0sCisgICAgICAgIHsxOCwgIiAgICAgICAgUGFyYW1ldGVyIFByb2JsZW06ICVkIn0sCisgICAgICAgIHsxOSwgIiAgICAgICAgU291cmNlIFF1ZW5jaDogJWQifSwKKyAgICAgICAgezIwLCAiICAgICAgICBSZWRpcmVjdDogJWQifSwKKyAgICAgICAgezIxLCAiICAgICAgICBFY2hvIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsyMiwgIiAgICAgICAgRWNobyBSZXBseTogJWQifSwKKyAgICAgICAgezIzLCAiICAgICAgICBUaW1lc3RhbXAgUmVxdWVzdDogJWQifSwKKyAgICAgICAgezI0LCAiICAgICAgICBUaW1lc3RhbXAgUmVwbHk6ICVkIn0sCisgICAgICAgIHsyNSwgIiAgICAgICAgQWRkcmVzcyBNYXNrIFJlcXVlc3Q6ICVkIn0sCisgICAgICAgIHsyNiwgIiAgICAgICAgQWRkcmVzcyBNYXNrIFJlcGx5OiAlZCJ9LAogICAgICAgICB7MCwgIiJ9CiAgICAgfTsKIApAQCAtMzg2LDE5ICs0OTksMTkgQEAKICAgICBvaWQgICAgICAgICAgICAgICB0Y3BzdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNiwgMCwgMCB9OwogICAgIHNpemVfdCAgICAgICAgICAgIHRjcHN0YXRzX2xlbiAgID0gT0lEX0xFTkdUSCggdGNwc3RhdHNfb2lkICk7CiAgICAgc3RydWN0IHN0YXRfdGFibGUgdGNwc3RhdHNfdGJsW10gPSB7Ci0gICAgICAgIHs1LCAiJWQgYWN0aXZlIG9wZW4lcyJ9LAotICAgICAgICB7NiwgIiVkIHBhc3NpdmUgb3BlbiVzIn0sCi0gICAgICAgIHs3LCAiJWQgZmFpbGVkIGF0dGVtcHQlcyJ9LAotICAgICAgICB7OCwgIiVkIHJlc2V0JXMgb2YgZXN0YWJsaXNoZWQgY29ubmVjdGlvbnMifSwKLSAgICAgICAgezksICIlZCBjdXJyZW50IGVzdGFibGlzaGVkIGNvbm5lY3Rpb24lcyJ9LAotICAgICAgICB7MTAsICIlZCBzZWdtZW50JXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezExLCAiJWQgc2VnbWVudCVzIHNlbnQifSwKLSAgICAgICAgezEyLCAiJWQgc2VnbWVudCVzIHJldHJhbnNtaXR0ZWQifSwKLSAgICAgICAgezE0LCAiJWQgaW52YWxpZCBzZWdtZW50JXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezE1LCAiJWQgcmVzZXQlcyBzZW50In0sCi0gICAgICAgIHswLCAiIn0KKyAgICAgICAgeyA1LCAiJTE0ZCBhY3RpdmUgb3BlbiVzIn0sCisgICAgICAgIHsgNiwgIiUxNGQgcGFzc2l2ZSBvcGVuJXMifSwKKyAgICAgICAgeyA3LCAiJTE0ZCBmYWlsZWQgYXR0ZW1wdCVzIn0sCisgICAgICAgIHsgOCwgIiUxNGQgcmVzZXQlcyBvZiBlc3RhYmxpc2hlZCBjb25uZWN0aW9ucyJ9LAorICAgICAgICB7IDksICIlMTRkIGN1cnJlbnRseSBlc3RhYmxpc2hlZCBjb25uZWN0aW9uJXMifSwKKyAgICAgICAgezEwLCAiJTE0ZCBzZWdtZW50JXMgcmVjZWl2ZWQifSwKKyAgICAgICAgezExLCAiJTE0ZCBzZWdtZW50JXMgc2VudCJ9LAorICAgICAgICB7MTIsICIlMTRkIHNlZ21lbnQlcyByZXRyYW5zbWl0dGVkIn0sCisgICAgICAgIHsxNCwgIiUxNGQgaW52YWxpZCBzZWdtZW50JXMgcmVjZWl2ZWQifSwKKyAgICAgICAgezE1LCAiJTE0ZCByZXNldCVzIHNlbnQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwotICAgIF9kdW1wX3N0YXRzKCBuYW1lLCB0Y3BzdGF0c19vaWQsIHRjcHN0YXRzX2xlbiwgdGNwc3RhdHNfdGJsICk7CisgICAgX2R1bXBfc3RhdHMoICJ0Y3AiLCB0Y3BzdGF0c19vaWQsIHRjcHN0YXRzX2xlbiwgdGNwc3RhdHNfdGJsICk7CiB9CiAKIApAQCAtNDExLDEzICs1MjQsMTMgQEAKICAgICBvaWQgICAgICAgICAgICAgICB1ZHBzdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNywgMCwgMCB9OwogICAgIHNpemVfdCAgICAgICAgICAgIHVkcHN0YXRzX2xlbiAgID0gT0lEX0xFTkdUSCggdWRwc3RhdHNfb2lkICk7CiAgICAgc3RydWN0IHN0YXRfdGFibGUgdWRwc3RhdHNfdGJsW10gPSB7Ci0gICAgICAgIHsxLCAiJWQgdG90YWwgZGF0YWdyYW0lcyByZWNlaXZlZCJ9LAotICAgICAgICB7MiwgIiVkIGRhdGFncmFtJXMgdG8gaW52YWxpZCBwb3J0In0sCi0gICAgICAgIHszLCAiJWQgZGF0YWdyYW0lcyBkcm9wcGVkIGR1ZSB0byBlcnJvcnMifSwKLSAgICAgICAgezQsICIlZCBvdXRwdXQgZGF0YWdyYW0gcmVxdWVzdCVzIn0sCisgICAgICAgIHsxLCAiJTE0ZCB0b3RhbCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsyLCAiJTE0ZCBkYXRhZ3JhbSVzIHRvIGludmFsaWQgcG9ydCJ9LAorICAgICAgICB7MywgIiUxNGQgZGF0YWdyYW0lcyBkcm9wcGVkIGR1ZSB0byBlcnJvcnMifSwKKyAgICAgICAgezQsICIlMTRkIG91dHB1dCBkYXRhZ3JhbSByZXF1ZXN0JXMifSwKICAgICAgICAgezAsICIifQogICAgIH07Ci0gICAgX2R1bXBfc3RhdHMoIG5hbWUsIHVkcHN0YXRzX29pZCwgdWRwc3RhdHNfbGVuLCB1ZHBzdGF0c190YmwgKTsKKyAgICBfZHVtcF9zdGF0cyggInVkcCIsIHVkcHN0YXRzX29pZCwgdWRwc3RhdHNfbGVuLCB1ZHBzdGF0c190YmwgKTsKIH0KIAogCkBAIC00NDksMjQgKzU2MiwyNyBAQAogdm9pZAogaW5ldHByaW50KHN0cnVjdCBpbl9hZGRyICppbiwgaW50IHBvcnQsIGNvbnN0IGNoYXIgKnByb3RvLCBpbnQgbG9jYWwpCiB7Ci0Jc3RydWN0IHNlcnZlbnQgKnNwID0gMDsKKwlzdHJ1Y3Qgc2VydmVudCAqc3AgPSBOVUxMOwogCWNoYXIgbGluZVs4MF0sICpjcDsKLQlpbnQgd2lkdGg7CisJaW50IHdpZHRoID0gMjc7CiAKLQlzbnByaW50ZihsaW5lLCBzaXplb2YgbGluZSwgIiUuKnMuIiwgKEFmbGFnICYmICFuZmxhZykgPyAxMiA6IDE2LAotCSAgICBpbmV0bmFtZShpbikpOworCWlmICh2ZmxhZykKKwkgICAgc25wcmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIlcy4iLCBpbmV0bmFtZShpbikpOworCWVsc2UKKwkgICAgc25wcmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIlLipzLiIsIHdpZHRoLTksIGluZXRuYW1lKGluKSk7CiAJY3AgPSBzdHJjaHIobGluZSwgJ1wwJyk7CiAJaWYgKCFuZmxhZyAmJiBwb3J0KQotCQlzcCA9IGdldHNlcnZieXBvcnQoKGludClwb3J0LCBwcm90byk7CisJCXNwID0gZ2V0c2VydmJ5cG9ydChodG9ucygodWludDE2X3QpIHBvcnQpLCBwcm90byk7CiAJaWYgKHNwIHx8IHBvcnQgPT0gMCkKLQkJc25wcmludGYoY3AsIGxpbmUgKyBzaXplb2YgbGluZSAtIGNwLCAiJS44cyIsCisJCXNucHJpbnRmKGNwLCBsaW5lICsgc2l6ZW9mIGxpbmUgLSBjcCwgdmZsYWcgPyAiJXMiIDogIiUuOHMiLAogCQkgICAgc3AgPyBzcC0+c19uYW1lIDogIioiKTsKICAgICAgLyoKICAgICAgICogVHJhbnNsYXRpb24gb2YgUlBDIHNlcnZpY2UgbmFtZXMgLSBPbWl0dGVkCiAgICAgICAqLwogCWVsc2UKLQkJc25wcmludGYoY3AsIGxpbmUgKyBzaXplb2YgbGluZSAtIGNwLCAiJWQiLCBudG9ocyhwb3J0KSk7Ci0Jd2lkdGggPSBBZmxhZyA/IDE4IDogMjI7CisJCXNucHJpbnRmKGNwLCBsaW5lICsgc2l6ZW9mIGxpbmUgLSBjcCwgIiVkIiwgcG9ydCk7CisJaWYgKHZmbGFnICYmIHdpZHRoIDwgc3RybGVuKGxpbmUpKQorCSAgICB3aWR0aCA9IHN0cmxlbihsaW5lKTsKIAlwcmludGYoIiAlLSouKnMiLCB3aWR0aCwgd2lkdGgsIGxpbmUpOwogfQogCkBAIC00ODksOSArNjA1LDEwIEBACiAjZW5kaWYKIAogCWlmIChmaXJzdCAmJiAhbmZsYWcpIHsKKwkJY2hhciB0bXBbTUFYSE9TVE5BTUVMRU5dOwogCQlmaXJzdCA9IDA7Ci0JCWlmIChnZXRob3N0bmFtZShkb21haW4sIHNpemVvZihkb21haW4pKSA9PSAwICYmCi0JCSAgICAoY3AgPSBzdHJjaHIoZG9tYWluLCAnLicpKSkKKwkJaWYgKGdldGhvc3RuYW1lKHRtcCwgc2l6ZW9mKHRtcCkpID09IDAgJiYKKwkJICAgIChjcCA9IHN0cmNocih0bXAsICcuJykpKQogCQkJKHZvaWQpIHN0cmxjcHkoZG9tYWluLCBjcCArIDEsIHNpemVvZiBkb21haW4pOwogCQllbHNlCiAJCQlkb21haW5bMF0gPSAnXDAnOwpAQCAtNTA3LDcgKzYyNCw4IEBACiAJCQkJY3AgPSBucC0+bl9uYW1lOwogCQl9CiAJCWlmIChjcCA9PSBOVUxMKSB7Ci0JCQlocCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKilpbnAsIHNpemVvZiAoKmlucCksIEFGX0lORVQpOworCQkJaHAgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKGNoYXIgKilpbnAsIHNpemVvZiAoKmlucCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9JTkVUKTsKIAkJCWlmIChocCkgewogCQkJCWlmICgoY3AgPSBzdHJjaHIoaHAtPmhfbmFtZSwgJy4nKSkgJiYKIAkJCQkgICAgIXN0cmNtcChjcCArIDEsIGRvbWFpbikpCkBAIC01MzAsNyArNjQ4LDcgQEAKIAkJc25wcmludGYobGluZSwgc2l6ZW9mIGxpbmUsICIlcyIsIGNwKTsKIAllbHNlIHsKIAkJaW5wLT5zX2FkZHIgPSBudG9obChpbnAtPnNfYWRkcik7Ci0jZGVmaW5lIEMoeCkJKCh4KSAmIDB4ZmYpCisjZGVmaW5lIEMoeCkJKHVuc2lnbmVkKSgoeCkgJiAweGZmKQogCQlzbnByaW50ZihsaW5lLCBzaXplb2YgbGluZSwgIiV1LiV1LiV1LiV1IiwKIAkJICAgIEMoaW5wLT5zX2FkZHIgPj4gMjQpLCBDKGlucC0+c19hZGRyID4+IDE2KSwKIAkJICAgIEMoaW5wLT5zX2FkZHIgPj4gOCksIEMoaW5wLT5zX2FkZHIpKTsKZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvaW5ldDYuYyBiL2FwcHMvc25tcG5ldHN0YXQvaW5ldDYuYwppbmRleCA3OTljOTYxLi43MTA5Yjg3IDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L2luZXQ2LmMKKysrIGIvYXBwcy9zbm1wbmV0c3RhdC9pbmV0Ni5jCkBAIC00Niw4ICs0Niw2IEBACiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYKICNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KICNpbmNsdWRlICJ3aW5zdHViLmgiCiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLRVRfSApAQCAtNzMsNyArNzEsNyBAQAogI2luY2x1ZGUgIm5ldHN0YXQuaCIKIAogc3RydWN0IHN0YXRfdGFibGUgewotICAgIGludCAgICAgICAgICAgICBlbnRyeTsgICAgICAvKiBlbnRyeSBudW1iZXIgaW4gdGFibGUgKi8KKyAgICB1bnNpZ25lZCBpbnQgZW50cnk7ICAgICAgLyogZW50cnkgbnVtYmVyIGluIHRhYmxlICovCiAgICAgLyoKICAgICAgKiBmb3JtYXQgc3RyaW5nIHRvIHByaW50ZihkZXNjcmlwdGlvbiwgdmFsdWUpIAogICAgICAqIHdhcm5pbmc6IHRoZSAlZCBtdXN0IGJlIGJlZm9yZSB0aGUgJXMgCkBAIC0xMjYsNyArMTI0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fTlVMTCwgTlVMTCwgIDApOwogICAgIGlmIChuZXRzbm1wX3F1ZXJ5X3dhbGsoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQogICAgICAgICByZXR1cm47Ci0gICAgaWYgKHZhci0+dHlwZSA9PSBBU05fTlVMTCkgICAgLyogTm8gZW50cmllcyAqLworICAgIGlmICgodmFyLT50eXBlICYgMHhGMCkgPT0gMHg4MCkJCS8qIGV4Y2VwdGlvbiAqLwogICAgICAgICByZXR1cm47CiAKICAgICBmb3IgKHZwID0gdmFyOyB2cCA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlKSB7CkBAIC0xMzksNyArMTM3LDcgQEAKICAgICAgICAgICAgIGlmIChhZmxhZykKICAgICAgICAgICAgICAgICBwcmludGYoIiAoaW5jbHVkaW5nIHNlcnZlcnMpIik7CiAgICAgICAgICAgICBwdXRjaGFyKCdcbicpOwotICAgICAgICAgICAgcHJpbnRmKCIlLTUuNXMgJS0yOC4yOHMgJS0yOC4yOHMgJTRzICVzXG4iLAorICAgICAgICAgICAgcHJpbnRmKCIlLTUuNXMgJS0yNy4yN3MgJS0yNy4yN3MgJTRzICVzXG4iLAogICAgICAgICAgICAgICAgICAgICJQcm90byIsICJMb2NhbCBBZGRyZXNzIiwgIlJlbW90ZSBBZGRyZXNzIiwgIkkvRiIsICIoc3RhdGUpIik7CiAgICAgICAgICAgICBmaXJzdCA9IDA7CiAgICAgICAgIH0KQEAgLTE4NiwxMSArMTg0LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKICAgICBpZiAobmV0c25tcF9xdWVyeV93YWxrKCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKICAgICAgICAgcmV0dXJuOwotICAgIGlmICh2YXItPnR5cGUgPT0gQVNOX05VTEwpICAgIC8qIE5vIGVudHJpZXMgKi8KKyAgICBpZiAoKHZhci0+dHlwZSAmIDB4RjApID09IDB4ODApCQkvKiBleGNlcHRpb24gKi8KICAgICAgICAgcmV0dXJuOwogCiAgICAgcHJpbnRmKCJBY3RpdmUgSW50ZXJuZXQgQ29ubmVjdGlvbnNcbiIpOwotICAgIHByaW50ZigiJS01LjVzICUtMjguMjhzICU0c1xuIiwgIlByb3RvIiwgIkxvY2FsIEFkZHJlc3MiLCAiSS9GIik7CisgICAgcHJpbnRmKCIlLTUuNXMgJS0yNy4yN3MgJTRzXG4iLCAiUHJvdG8iLCAiTG9jYWwgQWRkcmVzcyIsICJJL0YiKTsKICAgICBmb3IgKHZwID0gdmFyOyB2cCA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlKSB7CiAgICAgICAgIHByaW50ZigiJS01LjVzIiwgbmFtZSk7CiAgICAgICAgIC8qCkBAIC0yMjUsMjAgKzIyMywyMSBAQAogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCAqdnA7CiAgICAgc3RydWN0IHN0YXRfdGFibGUgICAgICpzcDsKLSAgICBvaWQgICAqc3RhdHMsIHN0YXQ7Ci0gICAgaW50ICAgIG1heF9zdGF0ID0gMDsKKyAgICBsb25nICAgKnN0YXRzOworICAgIG9pZCBzdGF0OworICAgIHVuc2lnbmVkIGludCBtYXhfc3RhdCA9IDA7CiAgICAgaW50ICAgIGFjdGl2ZSAgID0gMDsKIAogICAgIHZhciA9IE5VTEw7CiAgICAgZm9yIChzcD1zdGFibGU7IHNwLT5lbnRyeTsgc3ArKykgewogICAgICAgICBvaWRfYnVmW2J1Zl9sZW4tMV0gPSBzcC0+ZW50cnk7Ci0gICAgICAgIGlmIChzcC0+ZW50cnk+bWF4X3N0YXQpCisgICAgICAgIGlmIChzcC0+ZW50cnkgPiBtYXhfc3RhdCkKICAgICAgICAgICAgIG1heF9zdGF0ID0gc3AtPmVudHJ5OwogICAgICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCBvaWRfYnVmLCBidWZfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fTlVMTCwgTlVMTCwgIDApOwogICAgIH0KICAgICBvaWRfYnVmW2J1Zl9sZW4tMV0gPSBzdGFibGVbMF0uZW50cnk7Ci0gICAgc3RhdHMgPSAob2lkICopY2FsbG9jKG1heF9zdGF0KzEsIHNpemVvZihvaWQpKTsKKyAgICBzdGF0cyA9IChsb25nICopY2FsbG9jKG1heF9zdGF0KzEsIHNpemVvZihsb25nKSk7CiAgICAgCiAgICAgLyoKICAgICAgKiBXYWxrIHRoZSBzcGVjaWZpZWQgY29sdW1uKHMpLCBhbmQgdG90YWwgdGhlIGluZGl2aWR1YWwgc3RhdGlzdGljcwpAQCAtMjQ2LDYgKzI0NSw4IEBACiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgaWYgKG5ldHNubXBfcXVlcnlfZ2V0bmV4dCggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKCh2YXItPnR5cGUgJiAweEYwKSA9PSAweDgwKQkJLyogZXhjZXB0aW9uICovCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKCBzbm1wX29pZF9jb21wYXJlKCBvaWRfYnVmLCAgIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lLCBidWZfbGVuKSAhPSAwICkKICAgICAgICAgICAgIGJyZWFrOyAgICAvKiBFbmQgb2YgVGFibGUgKi8KQEAgLTI3Miw3ICsyNzMsNiBAQAogICAgICAgICAgKiAgIHRoZW4gb25seSBkaXNwbGF5IG5vbi16ZXJvIHN0YXRzLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKCBzdGF0c1tzcC0+ZW50cnldID4gMCB8fCBzZmxhZyA9PSAxICkgewotICAgICAgICAgICAgcHV0Y2hhcignXHQnKTsKICAgICAgICAgICAgIHByaW50ZihzcC0+ZGVzY3JpcHRpb24sIHN0YXRzW3NwLT5lbnRyeV0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBsdXJhbChzdGF0c1tzcC0+ZW50cnldKSk7CiAgICAgICAgICAgICBwdXRjaGFyKCdcbicpOwpAQCAtMjkyLDI3ICsyOTIsMjcgQEAKICAgICBvaWQgICAgICAgICAgICAgICBpcDZzdGF0c19vaWRbXSA9IHsgMSwgMywgNiwgMSwgMiwgMSwgNTUsIDEsIDYsIDEsIDAgfTsKICAgICBzaXplX3QgICAgICAgICAgICBpcDZzdGF0c19sZW4gICA9IE9JRF9MRU5HVEgoIGlwNnN0YXRzX29pZCApOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGlwNnN0YXRzX3RibFtdID0gewotICAgICAgICB7MSwgIiVkIHRvdGFsIGRhdGFncmFtJXMgcmVjZWl2ZWQifSwKLSAgICAgICAgezIsICIlZCBkYXRhZ3JhbSVzIHdpdGggaGVhZGVyIGVycm9ycyJ9LAotICAgICAgICB7MywgIiVkIG92ZXJzaXplZCBkYXRhZ3JhbSVzIn0sCi0gICAgICAgIHs0LCAiJWQgZGF0YWdyYW0lcyB3aXRoIG5vIHJvdXRlIn0sCi0gICAgICAgIHs1LCAiJWQgZGF0YWdyYW0lcyB3aXRoIGFuIGludmFsaWQgZGVzdGluYXRpb24gYWRkcmVzcyJ9LAotICAgICAgICB7NiwgIiVkIGRhdGFncmFtJXMgd2l0aCB1bmtub3duIHByb3RvY29sIn0sCi0gICAgICAgIHs3LCAiJWQgc2hvcnQgZGF0YWdyYW0lcyBkaXNjYXJkZWQifSwKLSAgICAgICAgezgsICIlZCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAotICAgICAgICB7OSwgIiVkIGRhdGFncmFtJXMgZGVsaXZlcmVkIn0sCi0gICAgICAgIHsxMCwgIiVkIGRhdGFncmFtJXMgZm9yd2FyZGVkIn0sCi0gICAgICAgIHsxMSwgIiVkIG91dHB1dCBkYXRhZ3JhbSByZXF1ZXN0JXMifSwKLSAgICAgICAgezEyLCAiJWQgb3V0cHV0IGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCi0gICAgICAgIHsxMywgIiVkIGRhdGFncmFtJXMgZnJhZ21lbnRlZCJ9LAotICAgICAgICB7MTQsICIlZCBmcmFnbWVudGF0aW9uIGZhaWx1cmUlcyJ9LAotICAgICAgICB7MTUsICIlZCBmcmFnbWVudCVzIGNyZWF0ZWQifSwKLSAgICAgICAgezE2LCAiJWQgZnJhZ21lbnQlcyByZWNlaXZlZCJ9LAotICAgICAgICB7MTcsICIlZCBkYXRhZ3JhbSVzIHJlYXNzZW1ibGVkIn0sCi0gICAgICAgIHsxOCwgIiVkIHJlYXNzZW1ibHkgZmFpbHVyZSVzIn0sCi0gICAgICAgIHsxOSwgIiVkIG11bHRpY2FzdCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsyMCwgIiVkIG11bHRpY2FzdCBkYXRhZ3JhbSVzIHRyYW5zbWl0dGVkIn0sCi0gICAgICAgIHswLCAiIn0KKyAgICAgICAgeyAxLCAiJTE0ZCB0b3RhbCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsgMiwgIiUxNGQgZGF0YWdyYW0lcyB3aXRoIGhlYWRlciBlcnJvcnMifSwKKyAgICAgICAgeyAzLCAiJTE0ZCBvdmVyc2l6ZWQgZGF0YWdyYW0lcyJ9LAorICAgICAgICB7IDQsICIlMTRkIGRhdGFncmFtJXMgd2l0aCBubyByb3V0ZSJ9LAorICAgICAgICB7IDUsICIlMTRkIGRhdGFncmFtJXMgd2l0aCBhbiBpbnZhbGlkIGRlc3RpbmF0aW9uIGFkZHJlc3MifSwKKyAgICAgICAgeyA2LCAiJTE0ZCBkYXRhZ3JhbSVzIHdpdGggdW5rbm93biBwcm90b2NvbCJ9LAorICAgICAgICB7IDcsICIlMTRkIHNob3J0IGRhdGFncmFtJXMgZGlzY2FyZGVkIn0sCisgICAgICAgIHsgOCwgIiUxNGQgZGF0YWdyYW0lcyBkaXNjYXJkZWQifSwKKyAgICAgICAgeyA5LCAiJTE0ZCBkYXRhZ3JhbSVzIGRlbGl2ZXJlZCJ9LAorICAgICAgICB7MTAsICIlMTRkIGRhdGFncmFtJXMgZm9yd2FyZGVkIn0sCisgICAgICAgIHsxMSwgIiUxNGQgb3V0cHV0IGRhdGFncmFtIHJlcXVlc3QlcyJ9LAorICAgICAgICB7MTIsICIlMTRkIG91dHB1dCBkYXRhZ3JhbSVzIGRpc2NhcmRlZCJ9LAorICAgICAgICB7MTMsICIlMTRkIGRhdGFncmFtJXMgZnJhZ21lbnRlZCJ9LAorICAgICAgICB7MTQsICIlMTRkIGZyYWdtZW50YXRpb24gZmFpbHVyZSVzIn0sCisgICAgICAgIHsxNSwgIiUxNGQgZnJhZ21lbnQlcyBjcmVhdGVkIn0sCisgICAgICAgIHsxNiwgIiUxNGQgZnJhZ21lbnQlcyByZWNlaXZlZCJ9LAorICAgICAgICB7MTcsICIlMTRkIGRhdGFncmFtJXMgcmVhc3NlbWJsZWQifSwKKyAgICAgICAgezE4LCAiJTE0ZCByZWFzc2VtYmx5IGZhaWx1cmUlcyJ9LAorICAgICAgICB7MTksICIlMTRkIG11bHRpY2FzdCBkYXRhZ3JhbSVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsyMCwgIiUxNGQgbXVsdGljYXN0IGRhdGFncmFtJXMgdHJhbnNtaXR0ZWQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwogCiAgICAgX2R1bXBfdjZzdGF0cyggbmFtZSwgaXA2c3RhdHNfb2lkLCBpcDZzdGF0c19sZW4sIGlwNnN0YXRzX3RibCApOwpAQCAtMzMyLDQ2ICszMzIsNDYgQEAKICAgICBvaWQgICAgICAgICAgICAgICBpY21wNnN0YXRzX29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA1NiwgMSwgMSwgMSwgMCB9OwogICAgIHNpemVfdCAgICAgICAgICAgIGljbXA2c3RhdHNfbGVuICAgPSBPSURfTEVOR1RIKCBpY21wNnN0YXRzX29pZCApOwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGljbXA2c3RhdHNfdGJsW10gPSB7Ci0gICAgICAgIHsxLCAiJWQgdG90YWwgbWVzc2FnZSVzIHJlY2VpdmVkIn0sCi0gICAgICAgIHsyLCAiJWQgbWVzc2FnZSVzIGRyb3BwZWQgZHVlIHRvIGVycm9ycyJ9LAotICAgICAgICB7MTgsICIlZCBvdXB1dCBtZXNzYWdlIHJlcXVlc3QlcyJ9LAotICAgICAgICB7MTksICIlZCBvdXRwdXQgbWVzc2FnZSVzIGRpc2NhcmRlZCJ9LAotICAgICAgICB7MCwgIiJ9CisgICAgICAgIHsgMSwgIiUxNGQgdG90YWwgbWVzc2FnZSVzIHJlY2VpdmVkIn0sCisgICAgICAgIHsgMiwgIiUxNGQgbWVzc2FnZSVzIGRyb3BwZWQgZHVlIHRvIGVycm9ycyJ9LAorICAgICAgICB7MTgsICIlMTRkIG91cHV0IG1lc3NhZ2UgcmVxdWVzdCVzIn0sCisgICAgICAgIHsxOSwgIiUxNGQgb3V0cHV0IG1lc3NhZ2UlcyBkaXNjYXJkZWQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGljbXA2X2luaGlzdG9ncmFtW10gPSB7Ci0gICAgICAgIHszLCAiRGVzdGluYXRpb24gdW5yZWFjaGFibGU6ICVkIn0sCi0gICAgICAgIHs0LCAiQWRtaW4gUHJvaGliaXQ6ICVkIn0sCi0gICAgICAgIHs1LCAiVGltZSBFeGNlZWRlZDogJWQifSwKLSAgICAgICAgezYsICJQYXJhbWV0ZXIgUHJvYmxlbTogJWQifSwKLSAgICAgICAgezcsICJUb28gQmlnOiAlZCJ9LAotICAgICAgICB7OCwgIkVjaG8gUmVxdWVzdDogJWQifSwKLSAgICAgICAgezksICJFY2hvIFJlcGx5OiAlZCJ9LAotICAgICAgICB7MTAsICJSb3V0ZXIgU29saWNpdDogJWQifSwKLSAgICAgICAgezExLCAiUm91dGVyIEFkdmVydDogJWQifSwKLSAgICAgICAgezEyLCAiTmVpZ2hib3IgU29saWNpdDogJWQifSwKLSAgICAgICAgezEzLCAiTmVpZ2hib3IgQWR2ZXJ0OiAlZCJ9LAotICAgICAgICB7MTQsICJSZWRpcmVjdDogJWQifSwKLSAgICAgICAgezE1LCAiR3JvdXAgTWVtYmVyIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHsxNiwgIkdyb3VwIE1lbWJlciBSZXBseTolZCJ9LAotICAgICAgICB7MTcsICJHcm91cCBNZW1iZXIgUmVkdWNlOiVkIn0sCi0gICAgICAgIHswLCAiIn0KKyAgICAgICAgeyAzLCAiICAgICAgICBEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZTogJWQifSwKKyAgICAgICAgeyA0LCAiICAgICAgICBBZG1pbiBQcm9oaWJpdDogJWQifSwKKyAgICAgICAgeyA1LCAiICAgICAgICBUaW1lIEV4Y2VlZGVkOiAlZCJ9LAorICAgICAgICB7IDYsICIgICAgICAgIFBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAorICAgICAgICB7IDcsICIgICAgICAgIFRvbyBCaWc6ICVkIn0sCisgICAgICAgIHsgOCwgIiAgICAgICAgRWNobyBSZXF1ZXN0OiAlZCJ9LAorICAgICAgICB7IDksICIgICAgICAgIEVjaG8gUmVwbHk6ICVkIn0sCisgICAgICAgIHsxMCwgIiAgICAgICAgUm91dGVyIFNvbGljaXQ6ICVkIn0sCisgICAgICAgIHsxMSwgIiAgICAgICAgUm91dGVyIEFkdmVydDogJWQifSwKKyAgICAgICAgezEyLCAiICAgICAgICBOZWlnaGJvciBTb2xpY2l0OiAlZCJ9LAorICAgICAgICB7MTMsICIgICAgICAgIE5laWdoYm9yIEFkdmVydDogJWQifSwKKyAgICAgICAgezE0LCAiICAgICAgICBSZWRpcmVjdDogJWQifSwKKyAgICAgICAgezE1LCAiICAgICAgICBHcm91cCBNZW1iZXIgUmVxdWVzdDogJWQifSwKKyAgICAgICAgezE2LCAiICAgICAgICBHcm91cCBNZW1iZXIgUmVwbHk6ICVkIn0sCisgICAgICAgIHsxNywgIiAgICAgICAgR3JvdXAgTWVtYmVyIFJlZHVjZTogJWQifSwKKyAgICAgICAgeyAwLCAiIn0KICAgICB9OwogICAgIHN0cnVjdCBzdGF0X3RhYmxlIGljbXA2X291dGhpc3RvZ3JhbVtdID0gewotICAgICAgICB7MjAsICJEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZTogJWQifSwKLSAgICAgICAgezIxLCAiQWRtaW4gUHJvaGliaXQ6ICVkIn0sCi0gICAgICAgIHsyMiwgIlRpbWUgRXhjZWVkZWQ6ICVkIn0sCi0gICAgICAgIHsyMywgIlBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAotICAgICAgICB7MjQsICJUb28gQmlnOiAlZCJ9LAotICAgICAgICB7MjUsICJFY2hvIFJlcXVlc3Q6ICVkIn0sCi0gICAgICAgIHsyNiwgIkVjaG8gUmVwbHk6ICVkIn0sCi0gICAgICAgIHsyNywgIlJvdXRlciBTb2xpY2l0OiAlZCJ9LAotICAgICAgICB7MjgsICJSb3V0ZXIgQWR2ZXJ0OiAlZCJ9LAotICAgICAgICB7MjksICJOZWlnaGJvciBTb2xpY2l0OiAlZCJ9LAotICAgICAgICB7MzAsICJOZWlnaGJvciBBZHZlcnQ6ICVkIn0sCi0gICAgICAgIHszMSwgIlJlZGlyZWN0OiAlZCJ9LAotICAgICAgICB7MzIsICJHcm91cCBNZW1iZXIgUmVxdWVzdDogJWQifSwKLSAgICAgICAgezMzLCAiR3JvdXAgTWVtYmVyIFJlcGx5OiVkIn0sCi0gICAgICAgIHszNCwgIkdyb3VwIE1lbWJlciBSZWR1Y2U6JWQifSwKKyAgICAgICAgezIwLCAiICAgICAgICBEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZTogJWQifSwKKyAgICAgICAgezIxLCAiICAgICAgICBBZG1pbiBQcm9oaWJpdDogJWQifSwKKyAgICAgICAgezIyLCAiICAgICAgICBUaW1lIEV4Y2VlZGVkOiAlZCJ9LAorICAgICAgICB7MjMsICIgICAgICAgIFBhcmFtZXRlciBQcm9ibGVtOiAlZCJ9LAorICAgICAgICB7MjQsICIgICAgICAgIFRvbyBCaWc6ICVkIn0sCisgICAgICAgIHsyNSwgIiAgICAgICAgRWNobyBSZXF1ZXN0OiAlZCJ9LAorICAgICAgICB7MjYsICIgICAgICAgIEVjaG8gUmVwbHk6ICVkIn0sCisgICAgICAgIHsyNywgIiAgICAgICAgUm91dGVyIFNvbGljaXQ6ICVkIn0sCisgICAgICAgIHsyOCwgIiAgICAgICAgUm91dGVyIEFkdmVydDogJWQifSwKKyAgICAgICAgezI5LCAiICAgICAgICBOZWlnaGJvciBTb2xpY2l0OiAlZCJ9LAorICAgICAgICB7MzAsICIgICAgICAgIE5laWdoYm9yIEFkdmVydDogJWQifSwKKyAgICAgICAgezMxLCAiICAgICAgICBSZWRpcmVjdDogJWQifSwKKyAgICAgICAgezMyLCAiICAgICAgICBHcm91cCBNZW1iZXIgUmVxdWVzdDogJWQifSwKKyAgICAgICAgezMzLCAiICAgICAgICBHcm91cCBNZW1iZXIgUmVwbHk6ICVkIn0sCisgICAgICAgIHszNCwgIiAgICAgICAgR3JvdXAgTWVtYmVyIFJlZHVjZTogJWQifSwKICAgICAgICAgezAsICIifQogICAgIH07CiAKQEAgLTQxMywxMiArNDEzLDExIEBACiAJCShyZXQpID0gZ2V0c2VydmJ5cG9ydCgoaW50KShwb3J0KSwgKHByb3RvKSk7IFwKIAl9IHdoaWxlICgwKQogCi0Jc3RydWN0IHNlcnZlbnQgKnNwID0gMDsKKwlzdHJ1Y3Qgc2VydmVudCAqc3AgPSBOVUxMOwogCWNoYXIgbGluZVs4MF0sICpjcDsKLQlpbnQgd2lkdGg7CisJaW50IHdpZHRoID0gMjctOTsKIAlpbnQgbGVuID0gc2l6ZW9mIGxpbmU7CiAKLQl3aWR0aCA9IEFmbGFnID8gMTIgOiAxNjsKIAlpZiAodmZsYWcgJiYgd2lkdGggPCBzdHJsZW4oaW5ldDZuYW1lKGluNikpKQogCQl3aWR0aCA9IHN0cmxlbihpbmV0Nm5hbWUoaW42KSk7CiAJc25wcmludGYobGluZSwgbGVuLCAiJS4qcy4iLCB3aWR0aCwgaW5ldDZuYW1lKGluNikpOwpAQCAtNDI4LDEyICs0MjcsMTIgQEAKIAogCWNwID0gc3RyY2hyKGxpbmUsICdcMCcpOwogCWlmICghbmZsYWcgJiYgcG9ydCAmJiBsb2NhbCkKLQkJR0VUU0VSVkJZUE9SVDYocG9ydCwgcHJvdG8sIHNwKTsKKwkJR0VUU0VSVkJZUE9SVDYoaHRvbnMocG9ydCksIHByb3RvLCBzcCk7CiAJaWYgKHNwIHx8IHBvcnQgPT0gMCkKLQkJc25wcmludGYoY3AsIGxlbiwgIiUuOHMiLCBzcCA/IHNwLT5zX25hbWUgOiAiKiIpOworCQlzbnByaW50ZihjcCwgbGVuLCB2ZmxhZyA/ICIlcyIgOiAiJS44cyIsIHNwID8gc3AtPnNfbmFtZSA6ICIqIik7CiAJZWxzZQotCQlzbnByaW50ZihjcCwgbGVuLCAiJWQiLCBudG9ocygodV9zaG9ydClwb3J0KSk7Ci0Jd2lkdGggPSBBZmxhZyA/IDE4IDogMjI7CisJCXNucHJpbnRmKGNwLCBsZW4sICIlZCIsIHBvcnQpOworCXdpZHRoID0gMjc7CiAJaWYgKHZmbGFnICYmIHdpZHRoIDwgc3RybGVuKGxpbmUpKQogCQl3aWR0aCA9IHN0cmxlbihsaW5lKTsKIGJhaWw6CkBAIC00NjMsMTYgKzQ2MiwxNyBAQAogCiAJaWYgKGZpcnN0ICYmICFuZmxhZykgewogCQlmaXJzdCA9IDA7Ci0JCWlmIChnZXRob3N0bmFtZShkb21haW4sIHNpemVvZihkb21haW4pKSA9PSAwICYmCi0JCSAgICAoY3AgPSBzdHJjaHIoZG9tYWluLCAnLicpKSkKKwkJaWYgKGdldGhvc3RuYW1lKGxpbmUsIHNpemVvZihsaW5lKSkgPT0gMCAmJgorCQkgICAgKGNwID0gc3RyY2hyKGxpbmUsICcuJykpKQogCQkJKHZvaWQpIHN0cmxjcHkoZG9tYWluLCBjcCArIDEsIHNpemVvZiBkb21haW4pOwogCQllbHNlCiAJCQlkb21haW5bMF0gPSAnXDAnOwogCX0KICNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2Ci0JY3AgPSAwOworCWNwID0gTlVMTDsKIAlpZiAoIW5mbGFnICYmICFJTjZfSVNfQUREUl9VTlNQRUNJRklFRChpbjZwKSkgewotCQlocCA9IGdldGhvc3RieWFkZHIoKGNvbnN0IGNoYXIgKilpbjZwLCBzaXplb2YoKmluNnApLCBBRl9JTkVUNik7CisJCWhwID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKChjb25zdCBjaGFyICopaW42cCwgc2l6ZW9mKCppbjZwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBRl9JTkVUNik7CiAJCWlmIChocCkgewogCQkJaWYgKChjcCA9IHN0cmNocihocC0+aF9uYW1lLCAnLicpKSAmJgogCQkJICAgICFzdHJjbXAoY3AgKyAxLCBkb21haW4pKQpAQCAtNDkzLDcgKzQ5Myw3IEBACiAJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoaW42cCkgfHwKIAkJICAgIElONl9JU19BRERSX01DX0xJTktMT0NBTChpbjZwKSkgewogCQkJc2luNi5zaW42X3Njb3BlX2lkID0KLQkJCSAgICBudG9ocygqKGNvbnN0IHVfaW50MTZfdCAqKSZpbjZwLT5zNl9hZGRyWzJdKTsKKwkJCSAgICBudG9ocygqKGNvbnN0IHVpbnQxNl90ICopJmluNnAtPnM2X2FkZHJbMl0pOwogCQkJc2luNi5zaW42X2FkZHIuczZfYWRkclsyXSA9IDA7CiAJCQlzaW42LnNpbjZfYWRkci5zNl9hZGRyWzNdID0gMDsKIAkJfQpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9pbmV0eC5jIGIvYXBwcy9zbm1wbmV0c3RhdC9pbmV0eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NWViZWUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL3NubXBuZXRzdGF0L2luZXR4LmMKQEAgLTAsMCArMSw1ODQgQEAKKy8qCSRPcGVuQlNEOiBpbmV0Ni5jLHYgMS4zMSAyMDA0LzExLzE3IDAxOjQ3OjIwIGl0b2p1biBFeHAgJAkqLworLyoJQlNESSBpbmV0LmMsdiAyLjMgMTk5NS8xMC8yNCAwMjoxOToyOSBwcmIgRXhwCSovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmICBJTkhFUklURURfQ09ERQorI2lmbmRlZiBsaW50CisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWluZXQuYwk4LjQgKEJlcmtlbGV5KSA0LzIwLzk0IjsKKyNlbHNlCisvKl9fUkNTSUQoIiRPcGVuQlNEOiBpbmV0Ni5jLHYgMS4zMSAyMDA0LzExLzE3IDAxOjQ3OjIwIGl0b2p1biBFeHAgJCIpOyovCisvKl9fUkNTSUQoIktBTUUgSWQ6IGluZXQ2LmMsdiAxLjEwIDIwMDAvMDIvMDkgMTA6NDk6MzEgaXRvanVuIEV4cCIpOyovCisjZW5kaWYKKyNlbmRpZiAvKiBub3QgbGludCAqLworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSAid2luc3R1Yi5oIgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgIm1haW4uaCIKKyNpbmNsdWRlICJuZXRzdGF0LmgiCisKK3N0cnVjdCBzdGF0X3RhYmxlIHsKKyAgICB1bnNpZ25lZCBpbnQgZW50cnk7ICAgICAgLyogZW50cnkgbnVtYmVyIGluIHRhYmxlICovCisgICAgLyoKKyAgICAgKiBmb3JtYXQgc3RyaW5nIHRvIHByaW50ZihkZXNjcmlwdGlvbiwgdmFsdWUpIAorICAgICAqIHdhcm5pbmc6IHRoZSAlZCBtdXN0IGJlIGJlZm9yZSB0aGUgJXMgCisgICAgICovCisgICAgY2hhciAgICAgICAgICAgIGRlc2NyaXB0aW9uWzgwXTsKK307CisKK3ZvaWQJaW5ldHhwcmludChpbnQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50KTsKKworLyoKKyAqIFByaW50IGEgc3VtbWFyeSBvZiBUQ1AgY29ubmVjdGlvbnMKKyAqIExpc3RlbmluZyBwcm9jZXNzZXMgYXJlIHN1cHByZXNzZWQgdW5sZXNzIHRoZQorICogICAtYSAoYWxsKSBmbGFnIGlzIHNwZWNpZmllZC4KKyAqLworY29uc3QgY2hhciAgICAgKnRjcHhzdGF0ZXNbXSA9IHsKKyAgICAiIiwKKyAgICAiQ0xPU0VEIiwKKyAgICAiTElTVEVOIiwKKyAgICAiU1lOU0VOVCIsCisgICAgIlNZTlJFQ0VJVkVEIiwKKyAgICAiRVNUQUJMSVNIRUQiLAorICAgICJGSU5XQUlUMSIsCisgICAgIkZJTldBSVQyIiwKKyAgICAiQ0xPU0VXQUlUIiwKKyAgICAiTEFTVEFDSyIsCisgICAgIkNMT1NJTkciLAorICAgICJUSU1FV0FJVCIKK307CisjZGVmaW5lIFRDUF9OU1RBVEVTIDExCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgc3RhdDsKKyAgICBpbnQgaGNzdGF0OworICAgIGNvbnN0IGNoYXIgKnN0cjsKK30gc3lzdGVtc3RhdHNfdDsKKworc3lzdGVtc3RhdHNfdCBzeXN0ZW1zdGF0c1tdID0geworICAgIHsgIDMsICA0LCAiZGF0YWdyYW1zIGlucHV0IiB9LAorICAgIHsgIDUsICA2LCAib2N0ZXRzIHJlY2VpdmVkIiB9LAorICAgIHsgIDcsICAwLCAiaGRyIGVycm9ycyBpbnB1dCIgfSwKKyAgICB7ICA4LCAgMCwgIm5vIHJvdXRlcyBpbnB1dCIgfSwKKyAgICB7ICA5LCAgMCwgImFkZHJlc3MgZXJyb3JzIGlucHV0IiB9LAorICAgIHsgMTAsICAwLCAidW5rbm93biBwcm90b2NvbCBpbnB1dCIgfSwKKyAgICB7IDEyLCAxMywgImlucHV0IGRhdGFncmFtcyBmb3J3YXJkZWQiIH0sCisgICAgeyAxMSwgIDAsICJ0cnVuY2F0ZWQgZGF0YWdyYW1zIGlucHV0IiB9LAorICAgIHsgMTQsICAwLCAiaW5wdXQgcmVhc3NlbWJseSByZXF1aXJlZCIgfSwKKyAgICB7IDE1LCAgMCwgImlucHV0IHJlYXNzZW1sZWQgT0siIH0sCisgICAgeyAxNiwgIDAsICJpbnB1dCByZWFzc2VtYmx5IGZhaWxlZCIgfSwKKyAgICB7IDE3LCAgMCwgImlucHV0IGRhdGFncmFtcyBkaXNjYXJkZWQiIH0sCisgICAgeyAxOCwgMTksICJpbnB1dCBkYXRhZ3JhbXMgcmVjZWl2ZWQiIH0sCisgICAgeyAyMCwgMjEsICJvdXRwdXQgZGF0YWdyYW0gcmVxdWVzdHMiIH0sCisgICAgeyAyMiwgIDAsICJvdXRwdXQgbm8gcm91dGUiIH0sCisgICAgeyAyMywgMjQsICJkYXRhZ3JhbXMgZm9yd2FyZGVkIiB9LAorICAgIHsgMjUsICAwLCAib3V0cHV0IGRhdGFncmFtcyBkaXNjYXJkZWQiIH0sCisgICAgeyAyNiwgIDAsICJvdXRwdXQgZGF0YWdyYW1zIGZyYWdtZW50YXRpb24gcmVxdWlyZWQiIH0sCisgICAgeyAyNywgIDAsICJvdXRwdXQgZGF0YWdyYW1zIGZyYWdtZW50ZWQiIH0sCisgICAgeyAyOCwgIDAsICJvdXRwdXQgZnJhZ21lbnRhdGlvbiBmYWlsZWQiIH0sCisgICAgeyAyOSwgIDAsICJmcmFnbWVudHMgY3JlYXRlZCIgfSwKKyAgICB7IDMwLCAzMSwgImRhdGFncmFtcyB0cmFuc21pdHRlZCIgfSwKKyAgICB7IDMyLCAzMywgIm9jdGV0cyB0cmFuc21pdHRlZCIgfSwKKyAgICB7ICAwIH0KK307CisKK3N5c3RlbXN0YXRzX3QgaWNtcHN0YXRzW10gPSB7CisgICAgeyAgMiwgIDAsICJpbnB1dCBtZXNzYWdlcyIgfSwKKyAgICB7ICAzLCAgMCwgImlucHV0IGVycm9ycyIgfSwKKyAgICB7ICA0LCAgMCwgIm91dHB1dCBtZXNzYWdlcyIgfSwKKyAgICB7ICA1LCAgMCwgIm91dHB1dCBlcnJvcnMiIH0sCisgICAgeyAgMCB9Cit9OworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50IGNvZGU7CisgICAgY29uc3QgY2hhciAqbmFtZTsKK30gY29kZWxpc3RfdDsKKworY29kZWxpc3RfdCBpY21wY29kZXNbXSA9IHsKKyAgICB7ICAgMCwgIkVjaG8gcmVwbHkiIH0sCisgICAgeyAgIDMsICJEZXN0aW5hdGlvbiB1bnJlYWNoYWJsZSIgfSwKKyAgICB7ICAgNCwgIlNvdXJjZSBxdWVuY2giIH0sCisgICAgeyAgIDUsICJSZWRpcmVjdCIgfSwKKyAgICB7ICAgNiwgIkFsdGVybmF0ZSBob3N0IGFkZHJlc3MiIH0sCisgICAgeyAgIDgsICJFY2hvIHJlcXVlc3QiIH0sCisgICAgeyAgIDksICJSb3V0ZXIgYWR2ZXJ0aXNlbWVudCIgfSwKKyAgICB7ICAxMCwgIlJvdXRlciBzZWxlY3Rpb24iIH0sCisgICAgeyAgMTEsICJUaW1lIGV4Y2VlZGVkIiB9LAorICAgIHsgIDEyLCAiUGFyYW1ldGVyIHByb2JsZW0iIH0sCisgICAgeyAgMTMsICJUaW1lc3RhbXAgcmVxdWVzdCIgfSwKKyAgICB7ICAxNCwgIlRpbWVzdGFtcCByZXBseSIgfSwKKyAgICB7ICAxNSwgIkluZm9ybWF0aW9uIHJlcXVlc3QiIH0sCisgICAgeyAgMTYsICJJbmZvcm1hdGlvbiByZXBseSIgfSwKKyAgICB7ICAxNywgIkFkZHJlc3MgbWFzayByZXF1ZXN0IiB9LAorICAgIHsgIDE4LCAiQWRkcmVzcyBtYXNrIHJlcGx5IiB9LAorICAgIHsgMCB9Cit9OworCitjb2RlbGlzdF90IGljbXA2Y29kZXNbXSA9IHsKKyAgICB7ICAgMSwgICAiRGVzdGluYXRpb24gVW5yZWFjaGFibGUiIH0sCisgICAgeyAgIDIsICAgIlBhY2tldCBUb28gQmlnIiB9LAorICAgIHsgICAzLCAgICJUaW1lIEV4Y2VlZGVkIiB9LAorICAgIHsgICA0LCAgICJQYXJhbWV0ZXIgUHJvYmxlbSIgfSwKKyAgICB7IDEwMCwgICAiUHJpdmF0ZSBleHBlcmltZW50YXRpb24gMTAwIiB9LAorICAgIHsgMTAxLCAgICJQcml2YXRlIGV4cGVyaW1lbnRhdGlvbiAxMDEiIH0sCisgICAgeyAxMjcsICAgIlJlc2VydmVkIGZvciBleHBhbnNpb24gb2YgSUNNUHY2IGVycm9yIG1lc3NhZ2VzIiB9LAorICAgIHsgMTI4LCAgICJFY2hvIFJlcXVlc3QiIH0sCisgICAgeyAxMjksICAgIkVjaG8gUmVwbHkiIH0sCisgICAgeyAxMzAsICAgIk11bHRpY2FzdCBMaXN0ZW5lciBRdWVyeSIgfSwKKyAgICB7IDEzMSwgICAiTXVsdGljYXN0IExpc3RlbmVyIFJlcG9ydCIgfSwKKyAgICB7IDEzMiwgICAiTXVsdGljYXN0IExpc3RlbmVyIERvbmUiIH0sCisgICAgeyAxMzMsICAgIlJvdXRlciBTb2xpY2l0YXRpb24iIH0sCisgICAgeyAxMzQsICAgIlJvdXRlciBBZHZlcnRpc2VtZW50IiB9LAorICAgIHsgMTM1LCAgICJOZWlnaGJvciBTb2xpY2l0YXRpb24iIH0sCisgICAgeyAxMzYsICAgIk5laWdoYm9yIEFkdmVydGlzZW1lbnQiIH0sCisgICAgeyAxMzcsICAgIlJlZGlyZWN0IE1lc3NhZ2UiIH0sCisgICAgeyAxMzgsICAgIlJvdXRlciBSZW51bWJlcmluZyIgfSwKKyAgICB7IDEzOSwgICAiSUNNUCBOb2RlIEluZm9ybWF0aW9uIFF1ZXJ5IiB9LAorICAgIHsgMTQwLCAgICJJQ01QIE5vZGUgSW5mb3JtYXRpb24gUmVzcG9uc2UiIH0sCisgICAgeyAxNDEsICAgIkludmVyc2UgTmVpZ2hib3IgRGlzY292ZXJ5IFNvbGljaXRhdGlvbiBNZXNzYWdlIiB9LAorICAgIHsgMTQyLCAgICJJbnZlcnNlIE5laWdoYm9yIERpc2NvdmVyeSBBZHZlcnRpc2VtZW50IE1lc3NhZ2UiIH0sCisgICAgeyAxNDMsICAgIlZlcnNpb24gMiBNdWx0aWNhc3QgTGlzdGVuZXIgUmVwb3J0IiB9LAorICAgIHsgMTQ0LCAgICJIb21lIEFnZW50IEFkZHJlc3MgRGlzY292ZXJ5IFJlcXVlc3QgTWVzc2FnZSIgfSwKKyAgICB7IDE0NSwgICAiSG9tZSBBZ2VudCBBZGRyZXNzIERpc2NvdmVyeSBSZXBseSBNZXNzYWdlIiB9LAorICAgIHsgMTQ2LCAgICJNb2JpbGUgUHJlZml4IFNvbGljaXRhdGlvbiIgfSwKKyAgICB7IDE0NywgICAiTW9iaWxlIFByZWZpeCBBZHZlcnRpc2VtZW50IiB9LAorICAgIHsgMTQ4LCAgICJDZXJ0aWZpY2F0aW9uIFBhdGggU29saWNpdGF0aW9uIE1lc3NhZ2UiIH0sCisgICAgeyAxNDksICAgIkNlcnRpZmljYXRpb24gUGF0aCBBZHZlcnRpc2VtZW50IE1lc3NhZ2UiIH0sCisgICAgeyAxNTEsICAgIk11bHRpY2FzdCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCIgfSwKKyAgICB7IDE1MiwgICAiTXVsdGljYXN0IFJvdXRlciBTb2xpY2l0YXRpb24iIH0sCisgICAgeyAxNTMsICAgIk11bHRpY2FzdCBSb3V0ZXIgVGVybWluYXRpb24iIH0sCisgICAgeyAxNTQsICAgIkZNSVB2NiBNZXNzYWdlcyIgfSwKKyAgICB7IDE1NSwgICAiUlBMIENvbnRyb2wgTWVzc2FnZSIgfSwKKyAgICB7IDAgfQorfTsKKworCit2b2lkCit0Y3B4cHJvdG9wcihjb25zdCBjaGFyICpuYW1lKQoreworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCAqdnAsICpwdmFyOworICAgIG9pZCAgICB0Y3BDb25uZWN0aW9uU3RhdGVfb2lkW10gPSB7IDEsMyw2LDEsMiwxLDYsMTksMSw3IH07CisgICAgc2l6ZV90IHRjcENvbm5lY3Rpb25TdGF0ZV9sZW4gICA9IE9JRF9MRU5HVEgoIHRjcENvbm5lY3Rpb25TdGF0ZV9vaWQgKTsKKyAgICBpbnQgICAgc3RhdGUsIGk7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBsb2NhbEFkZHIsIHJlbW90ZUFkZHI7CisgICAgaW50ICAgIGxvY2FsUG9ydCwgICAgIHJlbW90ZVBvcnQsICBwaWQgPSAwOworICAgIGludCAgICBsb2NhbFR5cGUsICAgIHJlbW90ZVR5cGUsIGlueDsKKyAgICBpbnQgICAgZmlyc3QgPSAxOworICAgIHN0YXRpYyBpbnQgZG9uZSA9IDA7CisKKyAgICBpZiAoZG9uZSsrKSByZXR1cm47CisKKyAgICAvKgorICAgICAqIFdhbGtpbmcgdGhlIHY2IHRjcENvbm5lY3Rpb25TdGF0ZSBjb2x1bW4gd2lsbCBwcm92aWRlIGFsbAorICAgICAqICAgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbi4KKyAgICAgKi8KKyAgICB2YXIgPSBOVUxMOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIHRjcENvbm5lY3Rpb25TdGF0ZV9vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwQ29ubmVjdGlvblN0YXRlX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fTlVMTCwgTlVMTCwgIDApOworICAgIGlmIChuZXRzbm1wX3F1ZXJ5X3dhbGsoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCh2YXItPnR5cGUgJiAweEYwKSA9PSAweDgwKQkvKiBFeGNlcHRpb24gKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgZm9yICh2cCA9IHZhcjsgdnAgOyB2cD12cC0+bmV4dF92YXJpYWJsZSkgeworCWNoYXIgbG5hbWVbNV07CisgICAgICAgIHN0YXRlID0gKnZwLT52YWwuaW50ZWdlcjsKKwlpbnggPSB0Y3BDb25uZWN0aW9uU3RhdGVfbGVuOworCXB2YXIgPSBOVUxMOworCisJdnAtPm5hbWVbaW54LTFdID0gODsKKwlzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmcHZhciwgdnAtPm5hbWUsIHZwLT5uYW1lX2xlbmd0aCwKKwkJCQkJIEFTTl9OVUxMLCBOVUxMLCAgMCk7CisJaWYgKG5ldHNubXBfcXVlcnlfZ2V0KCBwdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpIHsKKwkgICAgc25tcF9mcmVlX3ZhciggcHZhciApOworCSAgICByZXR1cm47CisJfQorCWlmICgocHZhci0+dHlwZSAmIDB4RjApICE9IDB4ODApCS8qIEV4Y2VwdGlvbiAqLworCSAgICBwaWQgPSAqcHZhci0+dmFsLmludGVnZXI7CisgICAgICAgIAorICAgICAgICAvKiBFeHRyYWN0IHRoZSBsb2NhbC9yZW1vdGUgaW5mb3JtYXRpb24gZnJvbSB0aGUgaW5kZXggdmFsdWVzICovCisJbG9jYWxUeXBlID0gdnAtPm5hbWVbaW54KytdOworCWZvciAoaSA9IDA7IGkgPCB2cC0+bmFtZVtpbnhdOyBpKyspCisJICAgIGxvY2FsQWRkci5zaW42X2FkZHIuczZfYWRkcltpXSA9IHZwLT5uYW1lW2lueCtpKzFdOworCWlueCArPSB2cC0+bmFtZVtpbnhdICsgMTsKKyAgICAgICAgbG9jYWxQb3J0ICAgID0gdnAtPm5hbWVbaW54KytdOworCXJlbW90ZVR5cGUgPSB2cC0+bmFtZVtpbngrK107CisJZm9yIChpID0gMDsgaSA8IHZwLT5uYW1lW2lueF07IGkrKykKKwkgICAgcmVtb3RlQWRkci5zaW42X2FkZHIuczZfYWRkcltpXSA9IHZwLT5uYW1lW2lueCtpKzFdOworCWlueCArPSB2cC0+bmFtZVtpbnhdICsgMTsKKyAgICAgICAgcmVtb3RlUG9ydCAgICA9IHZwLT5uYW1lW2lueCsrXTsKKworCXNubXBfZnJlZV92YXJiaW5kKHB2YXIpOworCisJaWYgKGFmID09IEFGX0lORVQgJiYgbG9jYWxUeXBlID09IDIpIGNvbnRpbnVlOworCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsb2NhbFR5cGUgIT0gMikgY29udGludWU7CisKKyAgICAgICAgaWYgKGZpcnN0KSB7CisgICAgICAgICAgICBwcmludGYoIkFjdGl2ZSBJbnRlcm5ldCAoJXMpIENvbm5lY3Rpb25zIiwgInRjcCIpOworICAgICAgICAgICAgcHV0Y2hhcignXG4nKTsKKyAgICAgICAgICAgIHByaW50ZigiJS01LjVzICUtMjcuMjdzICUtMjcuMjdzICUxMS4xMXMgJTUuNXNcbiIsCisgICAgICAgICAgICAgICAgICAgIlByb3RvIiwgIkxvY2FsIEFkZHJlc3MiLCAiUmVtb3RlIEFkZHJlc3MiLCAiU3RhdGUiLCAiUElEIik7CisgICAgICAgICAgICBmaXJzdCA9IDA7CisgICAgICAgIH0KKworCXN0cmNweShsbmFtZSwgInRjcCIpOworCWlmIChsb2NhbFR5cGUgPT0gMikgbG5hbWVbM10gPSAnNic7CisJZWxzZSBsbmFtZVszXSA9ICc0JzsKKwlsbmFtZVs0XSA9IDA7CisgICAgICAgIHByaW50ZigiJS01LjVzIiwgbG5hbWUpOworICAgICAgICBpbmV0eHByaW50KGxvY2FsVHlwZSwgbG9jYWxBZGRyLCAgbG9jYWxQb3J0LCAidGNwIiwgMSk7CisgICAgICAgIGluZXR4cHJpbnQocmVtb3RlVHlwZSwgcmVtb3RlQWRkciwgcmVtb3RlUG9ydCwgInRjcCIsIDApOworICAgICAgICBpZiAoIHN0YXRlIDwgMSB8fCBzdGF0ZSA+IFRDUF9OU1RBVEVTICkKKyAgICAgICAgICAgIHByaW50ZigiICUxMWQgJTVkXG4iLCBzdGF0ZSwgcGlkKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJpbnRmKCIgJTExcyAlNWRcbiIsIHRjcHhzdGF0ZXNbIHN0YXRlIF0sIHBpZCk7CisgICAgfQorICAgIHNubXBfZnJlZV92YXJiaW5kKCB2YXIgKTsKKworICAgIGlmIChhZmxhZykKKwlsaXN0ZW54cHJvdG9wcihuYW1lKTsKK30KKworLyoKKyAqIFByaW50IGEgc3VtbWFyeSBvZiBsaXN0ZW5pbmcgImNvbm5lY3Rpb25zIgorICovCit2b2lkCitsaXN0ZW54cHJvdG9wcihjb25zdCBjaGFyICpuYW1lKQoreworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCAqdnA7CisgICAgb2lkICAgIHRjcExpc3RlbmVyUHJvY2Vzc19vaWRbXSA9IHsgMSwzLDYsMSwyLDEsNiwyMCwxLDQgfTsKKyAgICBzaXplX3QgdGNwTGlzdGVuZXJQcm9jZXNzX2xlbiAgID0gT0lEX0xFTkdUSCggdGNwTGlzdGVuZXJQcm9jZXNzX29pZCApOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbG9jYWxBZGRyOworICAgIGludCAgICBsb2NhbFR5cGUsIGxvY2FsUG9ydCwgcGlkOworICAgIGludCAgICBpLCBpbng7CisKKyAgICAvKgorICAgICAqIFdhbGtpbmcgYSBzaW5nbGUgY29sdW1uIG9mIHRoZSB1ZHBUYWJsZSB3aWxsIHByb3ZpZGUKKyAgICAgKiAgIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gdGhlIGluZGV4IHZhbHVlcy4KKyAgICAgKi8KKyAgICB2YXIgPSBOVUxMOworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIHRjcExpc3RlbmVyUHJvY2Vzc19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwTGlzdGVuZXJQcm9jZXNzX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fTlVMTCwgTlVMTCwgIDApOworICAgIGlmIChuZXRzbm1wX3F1ZXJ5X3dhbGsoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCh2YXItPnR5cGUgJiAweEYwKSA9PSAweDgwKQkvKiBFeGNlcHRpb24gKi8KKyAgICAgICAgcmV0dXJuOworCisgICAgcHJpbnRmKCJMaXN0ZW5pbmcgSW50ZXJuZXQgKCVzKSBDb25uZWN0aW9uc1xuIiwgInRjcCIpOworICAgIHByaW50ZigiJS01LjVzICUtMjcuMjdzICU1c1xuIiwgIlByb3RvIiwgIkxvY2FsIEFkZHJlc3MiLCAiUElEIik7CisgICAgZm9yICh2cCA9IHZhcjsgdnAgOyB2cD12cC0+bmV4dF92YXJpYWJsZSkgeworCWNoYXIgbG5hbWVbNV07CisJaW54ID0gdGNwTGlzdGVuZXJQcm9jZXNzX2xlbjsKKyAgICAgICAgLyoKKyAgICAgICAgICogRXh0cmFjdCB0aGUgbG9jYWwgcG9ydCBmcm9tIHRoZSBpbmRleCB2YWx1ZXMsIGJ1dCB0YWtlCisgICAgICAgICAqICAgdGhlIElQIGFkZHJlc3MgZnJvbSB0aGUgdmFyYmluZCB2YWx1ZSwgKHdoaWNoIGlzIHdoeQorICAgICAgICAgKiAgIHdlIHdhbGtlZCB1ZHBMb2NhbEFkZHJlc3MgcmF0aGVyIHRoYW4gdWRwTG9jYWxQb3J0KQorICAgICAgICAgKi8KKwlsb2NhbFR5cGUgPSB2cC0+bmFtZVtpbngrK107CisJaWYgKGFmID09IEFGX0lORVQgJiYgbG9jYWxUeXBlID09IDIpIGNvbnRpbnVlOworCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsb2NhbFR5cGUgIT0gMikgY29udGludWU7CisKKwlmb3IgKGkgPSAwOyBpIDwgdnAtPm5hbWVbaW54XTsgaSsrKQorCSAgICBsb2NhbEFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gPSB2cC0+bmFtZVtpbngraSsxXTsKKwlpbnggKz0gdnAtPm5hbWVbaW54XSsxOworICAgICAgICBsb2NhbFBvcnQgPSB2cC0+bmFtZVsgaW54KysgXTsKKyAgICAgICAgcGlkICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworCXN0cmNweShsbmFtZSwgInRjcCIpOworCWlmIChsb2NhbFR5cGUgPT0gMikgbG5hbWVbM10gPSAnNic7CisJZWxzZSBsbmFtZVszXSA9ICc0JzsKKwlsbmFtZVs0XSA9IDA7CisgICAgICAgIHByaW50ZigiJS01LjVzIiwgbG5hbWUpOworICAgICAgICBpbmV0eHByaW50KGxvY2FsVHlwZSwgbG9jYWxBZGRyLCBsb2NhbFBvcnQsICJ0Y3AiLCAxKTsKKyAgICAgICAgcHJpbnRmKCIgJTVkXG4iLCBwaWQpOworICAgIH0KKyAgICBzbm1wX2ZyZWVfdmFyYmluZCggdmFyICk7Cit9CisKKy8qCisgKiBQcmludCBhIHN1bW1hcnkgb2YgVURQdjYgImNvbm5lY3Rpb25zIgorICogICAgWFhYIC0gd2hhdCBhYm91dCAibGlzdGVuaW5nIiBzZXJ2aWNlcyA/PworICovCit2b2lkCit1ZHB4cHJvdG9wcihjb25zdCBjaGFyICpuYW1lKQoreworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCAqdnA7CisgICAgb2lkICAgIHVkcEVuZHBvaW50UHJvY2Vzc19vaWRbXSA9IHsgMSwzLDYsMSwyLDEsNyw3LDEsOCB9OworICAgIHNpemVfdCB1ZHBFbmRwb2ludFByb2Nlc3NfbGVuICAgPSBPSURfTEVOR1RIKCB1ZHBFbmRwb2ludFByb2Nlc3Nfb2lkICk7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBsb2NhbEFkZHIsIHJlbW90ZUFkZHI7CisgICAgaW50ICAgIGxvY2FsVHlwZSwgcmVtb3RlVHlwZSwgbG9jYWxQb3J0LCByZW1vdGVQb3J0LCBwaWQ7CisgICAgaW50ICAgIGksIGlueDsKKyAgICBzdGF0aWMgaW50IGRvbmUgPSAwOworCisgICAgaWYgKGRvbmUrKykgcmV0dXJuOworCisgICAgLyoKKyAgICAgKiBXYWxraW5nIGEgc2luZ2xlIGNvbHVtbiBvZiB0aGUgdWRwVGFibGUgd2lsbCBwcm92aWRlCisgICAgICogICBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBpbmRleCB2YWx1ZXMuCisgICAgICovCisgICAgdmFyID0gTlVMTDsKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCB1ZHBFbmRwb2ludFByb2Nlc3Nfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVkcEVuZHBvaW50UHJvY2Vzc19sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKKyAgICBpZiAobmV0c25tcF9xdWVyeV93YWxrKCB2YXIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikKKyAgICAgICAgcmV0dXJuOworICAgIGlmICgodmFyLT50eXBlICYgMHhGMCkgPT0gMHg4MCkJLyogRXhjZXB0aW9uICovCisgICAgICAgIHJldHVybjsKKworICAgIHByaW50ZigiQWN0aXZlIEludGVybmV0ICglcykgQ29ubmVjdGlvbnNcbiIsICJ1ZHAiKTsKKyAgICBwcmludGYoIiUtNS41cyAlLTI3LjI3cyAlLTI3LjI3cyAlNXNcbiIsICJQcm90byIsICJMb2NhbCBBZGRyZXNzIiwgIlJlbW90ZSBBZGRyZXNzIiwgIlBJRCIpOworICAgIGZvciAodnAgPSB2YXI7IHZwIDsgdnA9dnAtPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgY2hhciBsbmFtZVs1XTsKKwlpbnggPSB1ZHBFbmRwb2ludFByb2Nlc3NfbGVuOworICAgICAgICAvKgorICAgICAgICAgKiBFeHRyYWN0IHRoZSBsb2NhbCBwb3J0IGZyb20gdGhlIGluZGV4IHZhbHVlcywgYnV0IHRha2UKKyAgICAgICAgICogICB0aGUgSVAgYWRkcmVzcyBmcm9tIHRoZSB2YXJiaW5kIHZhbHVlLCAod2hpY2ggaXMgd2h5CisgICAgICAgICAqICAgd2Ugd2Fsa2VkIHVkcExvY2FsQWRkcmVzcyByYXRoZXIgdGhhbiB1ZHBMb2NhbFBvcnQpCisgICAgICAgICAqLworCWxvY2FsVHlwZSA9IHZwLT5uYW1lW2lueCsrXTsKKwlpZiAoYWYgPT0gQUZfSU5FVCAmJiBsb2NhbFR5cGUgPT0gMikgY29udGludWU7CisJaWYgKGFmID09IEFGX0lORVQ2ICYmIGxvY2FsVHlwZSAhPSAyKSBjb250aW51ZTsKKwlmb3IgKGkgPSAwOyBpIDwgdnAtPm5hbWVbaW54XTsgaSsrKQorCSAgICBsb2NhbEFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gPSB2cC0+bmFtZVtpbngraSsxXTsKKwlpbnggKz0gdnAtPm5hbWVbaW54XSsxOworICAgICAgICBsb2NhbFBvcnQgPSB2cC0+bmFtZVsgaW54KysgXTsKKwlyZW1vdGVUeXBlID0gdnAtPm5hbWVbaW54KytdOworCWZvciAoaSA9IDA7IGkgPCB2cC0+bmFtZVtpbnhdOyBpKyspCisJICAgIHJlbW90ZUFkZHIuc2luNl9hZGRyLnM2X2FkZHJbaV0gPSB2cC0+bmFtZVtpbngraSsxXTsKKwlpbnggKz0gdnAtPm5hbWVbaW54XSsxOworICAgICAgICByZW1vdGVQb3J0ID0gdnAtPm5hbWVbIGlueCsrIF07CisgICAgICAgIHBpZCAgID0gKnZwLT52YWwuaW50ZWdlcjsKKwlzdHJjcHkobG5hbWUsICJ1ZHAiKTsKKwlpZiAobG9jYWxUeXBlID09IDIpIGxuYW1lWzNdID0gJzYnOworCWVsc2UgbG5hbWVbM10gPSAnNCc7CisJbG5hbWVbNF0gPSAwOworICAgICAgICBwcmludGYoIiUtNS41cyIsIGxuYW1lKTsKKyAgICAgICAgaW5ldHhwcmludChsb2NhbFR5cGUsIGxvY2FsQWRkciwgbG9jYWxQb3J0LCAidWRwIiwgMSk7CisgICAgICAgIGluZXR4cHJpbnQocmVtb3RlVHlwZSwgcmVtb3RlQWRkciwgcmVtb3RlUG9ydCwgInVkcCIsIDEpOworICAgICAgICBwcmludGYoIiAlNWRcbiIsIHBpZCk7CisgICAgfQorICAgIHNubXBfZnJlZV92YXJiaW5kKCB2YXIgKTsKK30KKworc3RhdGljIHZvaWQKK3N0YXRzcHJpbnQoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3lzdGVtc3RhdHNfdCAqc3QsIGludCBwcm90bywKKwljb25zdCBvaWQgKnRibCwgc2l6ZV90IHRibGxlbikKK3sKKyAgICBvaWQgdmFyWzMyXTsKKyAgICBzaXplX3QgbGVuOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmI7CisKKyAgICBtZW1jcHkodmFyLCB0YmwsIHRibGxlbipzaXplb2Yob2lkKSk7CisgICAgdmFyW3RibGxlbisxXSA9IHByb3RvOworICAgIGxlbiA9IHRibGxlbisyOworCisgICAgcHJpbnRmKCIlczpcbiIsIG5hbWUpOworICAgIHdoaWxlIChzdC0+c3RhdCkgeworCXZiID0gTlVMTDsKKwlpZiAoc3QtPmhjc3RhdCkgeworCSAgICB2YXJbdGJsbGVuXSA9IHN0LT5oY3N0YXQ7CisJICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YiwgdmFyLCBsZW4sIEFTTl9OVUxMLCBOVUxMLCAgMCk7CisJICAgIGlmIChuZXRzbm1wX3F1ZXJ5X2dldCggdmIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikgeworCQlzbm1wX2ZyZWVfdmFyKCB2YiApOworCQl2YiA9IE5VTEw7CisJICAgIH0KKwl9CisJaWYgKCF2YikgeworCSAgICB2YXJbdGJsbGVuXSA9IHN0LT5zdGF0OworCSAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmIsIHZhciwgbGVuLCBBU05fTlVMTCwgTlVMTCwgMCk7CisJICAgIGlmIChuZXRzbm1wX3F1ZXJ5X2dldCggdmIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikgeworCQlzbm1wX2ZyZWVfdmFyKCB2YiApOworCQl2YiA9IE5VTEw7CisJICAgIH0KKwl9CisJaWYgKHZiKSB7CisJICAgIGlmICh2Yi0+dHlwZSA9PSBBU05fQ09VTlRFUikgeworCQlpZiAoKnZiLT52YWwuaW50ZWdlciA+IDAgfHwgc2ZsYWcgPT0gMSkKKwkJICAgIHByaW50ZigiJTE0bHUgJXNcbiIsICp2Yi0+dmFsLmludGVnZXIsIHN0LT5zdHIpOworCSAgICB9CisJICAgIGVsc2UgaWYgKHZiLT50eXBlID09IEFTTl9DT1VOVEVSNjQpIHsKKwkJY2hhciBhNjRidWZbSTY0Q0hBUlNaICsgMV07CisJCXByaW50VTY0KGE2NGJ1ZiwgdmItPnZhbC5jb3VudGVyNjQpOworCQlpZiAoc3RyY21wKGE2NGJ1ZiwgIjAiKSAhPSAwIHx8IHNmbGFnID09IDEpCisJCSAgICBwcmludGYoIiUxNHMgJXNcbiIsIGE2NGJ1Ziwgc3QtPnN0cik7CisJICAgIH0KKwkgICAgZWxzZQorCQlwcmludGYoIiUxNHMgJXNcbiIsICItIiwgc3QtPnN0cik7CisJICAgIHNubXBfZnJlZV92YXJiaW5kKHZiKTsKKwl9CisJZWxzZSB7CisJICAgIHByaW50ZigiJTE0cyAlc1xuIiwgIi0iLCBzdC0+c3RyKTsKKwl9CisJc3QrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitwcmhpc3RvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IG9pZCAqdmFyLCBzaXplX3QgbGVuLCBpbnQgdmVyLCBjb2RlbGlzdF90ICpjcykKK3sKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZiID0gTlVMTCwgKnZwOworICAgIGNvZGVsaXN0X3QgKmNwOworICAgIGludCBjb2RlOworICAgIGNoYXIgbm9jb2RlWzMyXTsKKworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YiwgdmFyLCBsZW4sIEFTTl9OVUxMLCBOVUxMLCAgMCk7CisgICAgaWYgKG5ldHNubXBfcXVlcnlfd2FsayggdmIsIHNzICkgIT0gU05NUF9FUlJfTk9FUlJPUikgeworCXNubXBfZnJlZV92YXIoIHZiICk7CisJcmV0dXJuOworICAgIH0KKyAgICBwcmludGYoIiAgICAgJXMgaGlzdG9ncmFtOlxuIiwgbmFtZSk7CisgICAgcHJpbnRmKCIgICAgICUxMHMgJTEwcyAlc1xuIiwgImlucHV0IiwgIm91dHB1dCIsICJ0eXBlIik7CisgICAgZm9yIChjb2RlID0gMDsgY29kZSA8IDI1NjsgY29kZSsrKSB7CisJdW5zaWduZWQgbG9uZyBpbnAgPSAwLCBvdXQgPSAwOworCWludCBmb3VuZCA9IDA7CisJdnAgPSB2YjsKKwl3aGlsZSAodnAgJiYgZm91bmQgIT0gMikgeworCSAgICBpZiAodnAtPm5hbWVbMTFdID09IGNvZGUgJiYgdnAtPm5hbWVbMTBdID09IHZlcikgeworCQlpZiAodnAtPm5hbWVbOV0gPT0gMykgaW5wID0gKnZwLT52YWwuaW50ZWdlcjsKKwkJZWxzZSBvdXQgPSAqdnAtPnZhbC5pbnRlZ2VyOworCQlmb3VuZCsrOworCSAgICB9CisJICAgIHZwID0gdnAtPm5leHRfdmFyaWFibGU7CisJfQorCWlmIChmb3VuZCkgeworCSAgICBjcCA9IGNzOworCSAgICB3aGlsZSAoY3AtPm5hbWUgJiYgY3AtPmNvZGUgIT0gY29kZSkgY3ArKzsKKwkgICAgaWYgKGlucCB8fCBvdXQgfHwgc2ZsYWcgPT0gMSkgeworCQlpZiAoIWNwLT5jb2RlKQorCQkgICAgc25wcmludGYobm9jb2RlLCBzaXplb2Ygbm9jb2RlLCAidHlwZSAlZCIsIGNvZGUpOworCQlwcmludGYoIiAgICAgJTEwbHUgJTEwbHUgJXNcbiIsIGlucCwgb3V0LCBjcC0+bmFtZSA/IGNwLT5uYW1lIDogbm9jb2RlKTsKKwkgICAgfQorCX0KKyAgICB9CisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmIpOworfQorCit2b2lkCitpcHhfc3RhdHMoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBvaWQgaXBzeXNzdGF0X29pZFtdID0geyAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMSwgMSwgMSB9OworICAgIHNpemVfdCBpcHN5c3N0YXRfbGVuID0gc2l6ZW9mKGlwc3lzc3RhdF9vaWQpIC8gc2l6ZW9mKGlwc3lzc3RhdF9vaWRbMF0pOworICAgIHN0YXRpYyBpbnQgZmlyc3QgPSAxOworCisgICAgaWYgKCFmaXJzdCkgcmV0dXJuOworICAgIGZpcnN0ID0gMDsKKworICAgIGlmICghbmFtZSB8fCBzdHJjbXAobmFtZSwgImlwIikgPT0gMCkKKwlzdGF0c3ByaW50KCJpcCIsIHN5c3RlbXN0YXRzLCAxLCBpcHN5c3N0YXRfb2lkLCBpcHN5c3N0YXRfbGVuKTsKKyAgICBpZiAoIW5hbWUgfHwgc3RyY21wKG5hbWUsICJpcDYiKSA9PSAwKQorCXN0YXRzcHJpbnQoImlwNiIsIHN5c3RlbXN0YXRzLCAyLCBpcHN5c3N0YXRfb2lkLCBpcHN5c3N0YXRfbGVuKTsKK30KKwordm9pZAoraWNtcHhfc3RhdHMoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBvaWQgaWNtcHN0YXRfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDUsIDI5LCAxIH07CisgICAgc2l6ZV90IGljbXBzdGF0X2xlbiA9IHNpemVvZihpY21wc3RhdF9vaWQpIC8gc2l6ZW9mKGljbXBzdGF0X29pZFswXSk7CisgICAgb2lkIGljbXBtc2dfb2lkW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDUsIDMwLCAxIH07CisgICAgc2l6ZV90IGljbXBtc2dfbGVuID0gc2l6ZW9mKGljbXBtc2dfb2lkKSAvIHNpemVvZihpY21wbXNnX29pZFswXSk7CisgICAgc3RhdGljIGludCBmaXJzdCA9IDE7CisKKyAgICBpZiAoIWZpcnN0KQorCXJldHVybjsKKyAgICBmaXJzdCA9IDA7CisKKyAgICBpZiAoIW5hbWUgfHwgc3RyY21wKG5hbWUsICJpY21wIikgPT0gMCkgeworCXN0YXRzcHJpbnQoImljbXAiLCBpY21wc3RhdHMsIDEsIGljbXBzdGF0X29pZCwgaWNtcHN0YXRfbGVuKTsKKwlwcmhpc3RvKCJpY21wIiwgaWNtcG1zZ19vaWQsIGljbXBtc2dfbGVuLCAxLCBpY21wY29kZXMpOworICAgIH0KKyAgICBpZiAoIW5hbWUgfHwgc3RyY21wKG5hbWUsICJpY21wNiIpID09IDApIHsKKwlzdGF0c3ByaW50KCJpY21wNiIsIGljbXBzdGF0cywgMiwgaWNtcHN0YXRfb2lkLCBpY21wc3RhdF9sZW4pOworCXByaGlzdG8oImljbXA2IiwgaWNtcG1zZ19vaWQsIGljbXBtc2dfbGVuLCAyLCBpY21wNmNvZGVzKTsKKyAgICB9Cit9CisKKworc3RhdGljIHZvaWQKK3Vua25vd25wcmludCh2b2lkKQoreworICAgIGNoYXIgbGluZVs4MF0sICpjcDsKKyAgICBpbnQgd2lkdGggPSAyNzsKKworICAgIGlmICh2ZmxhZykKKwlzbnByaW50ZihsaW5lLCBzaXplb2YgbGluZSwgIiVzLiIsICIqIik7CisgICAgZWxzZQorCXNucHJpbnRmKGxpbmUsIHNpemVvZiBsaW5lLCAiJS4qcy4iLCB3aWR0aC05LCAiKiIpOworICAgIGNwID0gc3RyY2hyKGxpbmUsICdcMCcpOworICAgIHNucHJpbnRmKGNwLCBsaW5lICsgc2l6ZW9mIGxpbmUgLSBjcCwgdmZsYWcgPyAiJXMiIDogIiUuOHMiLCAiKiIpOworICAgIGlmICh2ZmxhZyAmJiB3aWR0aCA8IHN0cmxlbihsaW5lKSkKKwl3aWR0aCA9IHN0cmxlbihsaW5lKTsKKyAgICBwcmludGYoIiAlLSouKnMiLCB3aWR0aCwgd2lkdGgsIGxpbmUpOworfQorCisvKgorICogUHJldHR5IHByaW50IGFuIEludGVybmV0IGFkZHJlc3MgKG5ldCBhZGRyZXNzICsgcG9ydCkuCisgKiBJZiB0aGUgbmZsYWcgd2FzIHNwZWNpZmllZCwgdXNlIG51bWJlcnMgaW5zdGVhZCBvZiBuYW1lcy4KKyAqLworCit2b2lkCitpbmV0eHByaW50KGludCBwcm90bywgc3RydWN0IHNvY2thZGRyX2luNiBpbjYsIGludCBwb3J0LCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbG9jYWwpCit7CisKKwlpZiAocHJvdG8gPT0gMikKKwkgICAgaW5ldDZwcmludCgodV9jaGFyICopJmluNi5zaW42X2FkZHIuczZfYWRkciwgcG9ydCwgbmFtZSwgbG9jYWwpOworCWVsc2UgaWYgKHByb3RvID09IDEpCisJICAgIGluZXRwcmludCgoc3RydWN0IGluX2FkZHIgKikmaW42LnNpbjZfYWRkci5zNl9hZGRyLCBwb3J0LCBuYW1lLCBsb2NhbCk7CisJZWxzZSBpZiAocHJvdG8gPT0gMCkKKwkgICAgdW5rbm93bnByaW50KCk7CisJZWxzZSBhYm9ydCgpOworfQpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9tYWluLmMgYi9hcHBzL3NubXBuZXRzdGF0L21haW4uYwppbmRleCA5NDdjMDJiLi4wZTk3N2FkIDEwMDY0NAotLS0gYS9hcHBzL3NubXBuZXRzdGF0L21haW4uYworKysgYi9hcHBzL3NubXBuZXRzdGF0L21haW4uYwpAQCAtNTcsMTMgKzU3LDE3IEBACiAjaW5jbHVkZSAibWFpbi5oIgogI2luY2x1ZGUgIm5ldHN0YXQuaCIKIAotaW50CUFmbGFnOwkJLyogc2hvdyBhZGRyZXNzZXMgb2YgcHJvdG9jb2wgY29udHJvbCBibG9jayAqLworI2lmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSAid2luc3R1Yi5oIgorI2VuZGlmCisKIGludAlhZmxhZzsJCS8qIHNob3cgYWxsIHNvY2tldHMgKGluY2x1ZGluZyBzZXJ2ZXJzKSAqLwogaW50CWJmbGFnOwkJLyogc2hvdyBieXRlcyBpbnN0ZWFkIG9mIHBhY2tldHMgKi8KIGludAlkZmxhZzsJCS8qIHNob3cgaS9mIGRyb3BwZWQgcGFja2V0cyAqLwogaW50CWdmbGFnOwkJLyogc2hvdyBncm91cCAobXVsdGljYXN0KSByb3V0aW5nIG9yIHN0YXRzICovCiBpbnQJaWZsYWc7CQkvKiBzaG93IGludGVyZmFjZXMgKi8KIGludAlsZmxhZzsJCS8qIHNob3cgcm91dGluZyB0YWJsZSB3aXRoIHVzZSBhbmQgcmVmICovCitpbnQJTGZsYWc7CQkvKiBMZWdhY3kgbWlicyAqLwogaW50CW1mbGFnOwkJLyogc2hvdyBtZW1vcnkgc3RhdHMgKi8KIGludAluZmxhZzsJCS8qIHNob3cgYWRkcmVzc2VzIG51bWVyaWNhbGx5ICovCiBpbnQJb2ZsYWc7CQkvKiBPcGVuL05ldC1CU0Qgc3R5bGUgb2N0ZXQgb3V0cHV0ICovCkBAIC03NSw0MCArNzksNTYgQEAKIGludAl0ZmxhZzsJCS8qIHNob3cgaS9mIHdhdGNoZG9nIHRpbWVycyAqLwogaW50CXZmbGFnOwkJLyogYmUgdmVyYm9zZSAqLwogCisKIGludAlpbnRlcnZhbDsJLyogcmVwZWF0IGludGVydmFsIGZvciBpL2Ygc3RhdHMgKi8KIGNoYXIJKmludHJmYWNlOwkvKiBkZXNpcmVkIGkvZiBmb3Igc3RhdHMsIG9yIE5VTEwgZm9yIGFsbCBpL2ZzICovCiBpbnQJYWY7CQkvKiBhZGRyZXNzIGZhbWlseSAqLworaW50ICAgICBtYXhfZ2V0YnVsayA9IDMyOyAgLyogc3BlY2lmaWVzIHRoZSBtYXgtcmVwZWF0ZXJzIHZhbHVlIHRvIHVzZSB3aXRoIEdFVEJVTEsgcmVxdWVzdHMgKi8KIAogY2hhciAgICAqcHJvZ25hbWUgPSBOVUxMOwotCitjb25zdCBjaGFyICpwbmFtZTsKICAgICAvKgogICAgICAqIHN0cnVjdCBubGlzdCBubFtdIC0gT21pdHRlZAogICAgICAqLwogCit0eXBlZGVmIHZvaWQgKHN0cmluZ2Z1bikoY29uc3QgY2hhciopOworCiBzdHJ1Y3QgcHJvdG94IHsKICAgICAgICAgLyogcHJfaW5kZXgvcHJfc2luZGV4IC0gT21pdHRlZCAqLyAKLQlpbnQJcHJfd2FudGVkOwkJCS8qIDEgaWYgd2FudGVkLCAwIG90aGVyd2lzZSAqLwotCXZvaWQJKCpwcl9jYmxvY2tzKShjb25zdCBjaGFyICopOwkvKiBjb250cm9sIGJsb2NrcyBwcmludGluZyByb3V0aW5lICovCi0Jdm9pZAkoKnByX3N0YXRzKShjb25zdCBjaGFyICopOwkvKiBzdGF0aXN0aWNzIHByaW50aW5nIHJvdXRpbmUgKi8KLSAgY29uc3QgY2hhcgkqcHJfbmFtZTsJCQkvKiB3ZWxsLWtub3duIG5hbWUgKi8KLX0gcHJvdG94W10gPSB7CisJaW50CQlwcl93YW50ZWQ7CS8qIDEgaWYgd2FudGVkLCAwIG90aGVyd2lzZSAqLworCXN0cmluZ2Z1bgkqcHJfY2Jsb2NrczsJLyogY29udHJvbCBibG9ja3MgcHJpbnRpbmcgcm91dGluZSAqLworCXN0cmluZ2Z1bgkqcHJfc3RhdHM7CS8qIHN0YXRpc3RpY3MgcHJpbnRpbmcgcm91dGluZSAqLworCWNvbnN0IGNoYXIJKnByX25hbWU7CS8qIHdlbGwta25vd24gbmFtZSAqLworfTsKKworc3RydWN0IHByb3RveCBwcm90b3hbXSA9IHsKIAl7IDEsCXRjcHByb3RvcHIsCXRjcF9zdGF0cywJInRjcCIgfSwJCiAJeyAxLAl1ZHBwcm90b3ByLAl1ZHBfc3RhdHMsCSJ1ZHAiIH0sCQogCi0JeyAxLAkwLAlpcF9zdGF0cywJImlwIiB9LAkJLyogcHJvdG9wciBPbWl0dGVkICovCi0JeyAxLAkwLAlpY21wX3N0YXRzLAkiaWNtcCIgfSwJCisJeyAxLAkoc3RyaW5nZnVuKikwLAlpcF9zdGF0cywJImlwIiB9LAkvKiBwcm90b3ByIE9taXR0ZWQgKi8KKwl7IDEsCShzdHJpbmdmdW4qKTAsCWljbXBfc3RhdHMsCSJpY21wIiB9LAogCS8qIGlnbXAvYWgvZXNwL2lwZW5jYXAvZXRoZXJpcC9pcGNvbXAvY2FycC9wZnN5bmMvcGltIC0gT21pdHRlZCAqLwotCXsgMCwJMCwJMCwJCTAgfQorCXsgMCwJKHN0cmluZ2Z1biopMCwJKHN0cmluZ2Z1biopMCwJTlVMTCB9CiB9OwogCiBzdHJ1Y3QgcHJvdG94IGlwNnByb3RveFtdID0gewotCXsgMSwJdGNwNnByb3RvcHIsCTAsCSJ0Y3A2IiB9LAotCXsgMSwJdWRwNnByb3RvcHIsCTAsCSJ1ZHA2IiB9LAkKKwl7IDEsCXRjcDZwcm90b3ByLAkoc3RyaW5nZnVuKikwLAkidGNwNiIgfSwKKwl7IDEsCXVkcDZwcm90b3ByLAkoc3RyaW5nZnVuKikwLAkidWRwNiIgfSwKIAotCXsgMSwJMCwJaXA2X3N0YXRzLAkiaXA2IiB9LAkvKiBpcDZwcm90b3ByIE9taXR0ZWQgKi8KLQl7IDEsCTAsCWljbXA2X3N0YXRzLAkiaWNtcDYiIH0sCQorCXsgMSwJKHN0cmluZ2Z1biopMCwJaXA2X3N0YXRzLAkiaXA2IiB9LC8qIGlwNnByb3RvcHIgT21pdHRlZCAqLworCXsgMSwJKHN0cmluZ2Z1biopMCwJaWNtcDZfc3RhdHMsCSJpY21wNiIgfSwKIAkvKiBwaW02L3JpcDYgLSBPbWl0dGVkICovCi0JeyAwLAkwLAkwLAkJMCB9CisJeyAwLAkoc3RyaW5nZnVuKikwLAkoc3RyaW5nZnVuKikwLAlOVUxMIH0KK307CisKK3N0cnVjdCBwcm90b3ggaXB4cHJvdG94W10gPSB7CisJeyAxLAl0Y3B4cHJvdG9wciwJdGNwX3N0YXRzLAkidGNwIiB9LAkKKwl7IDEsCXVkcHhwcm90b3ByLAl1ZHBfc3RhdHMsCSJ1ZHAiIH0sCQorCXsgMSwJKHN0cmluZ2Z1biopMCwJaXB4X3N0YXRzLAkiaXAiIH0sLyogaXA2cHJvdG9wciBPbWl0dGVkICovCisJeyAxLAkoc3RyaW5nZnVuKikwLAlpcHhfc3RhdHMsCSJpcDYiIH0sLyogaXA2cHJvdG9wciBPbWl0dGVkICovCisJeyAxLAkoc3RyaW5nZnVuKikwLAlpY21weF9zdGF0cywJImljbXAiIH0sCisJeyAxLAkoc3RyaW5nZnVuKikwLAlpY21weF9zdGF0cywJImljbXA2IiB9LAorCXsgMCwJKHN0cmluZ2Z1biopMCwJKHN0cmluZ2Z1biopMCwJTlVMTCB9CiB9OwogCiAJLyoge2lweCxucyxhdGFsa31wcm90b3ggT21pdHRlZCAqLwpAQCAtMTMyLDExICsxNTIsNiBAQAogICAgIGNhc2UgJ0MnOgogICAgICAgICB3aGlsZSAoKm9wdGFyZykgewogICAgICAgICAgICAgc3dpdGNoICgqb3B0YXJnKyspIHsKLQkgICAgLyoJY2FzZSAnQSc6CQkqQlNEOiAgZGlzcGxheSBQQ0IgYWRkcmVzc2VzCi0JCQkJCUxpbnV4OiBwcm90b2NvbCBmYW1pbHkKLQkJCUFmbGFnID0gMTsKLQkJCWJyZWFrOwotCSAgICAgKi8KIAkJY2FzZSAnYSc6CiAJCQlhZmxhZyA9IDE7CiAJCQlicmVhazsKQEAgLTE4Niw2ICsyMDEsOSBAQAogCQljYXNlICdpJzoKIAkJCWlmbGFnID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdMJzoKKwkJCUxmbGFnID0gMTsKKwkJCWJyZWFrOwogCSAgICAvKiAgY2FzZSAnTCc6CQlGcmVlQlNEOiBEaXNwbGF5IGxpc3RlbiBxdWV1ZSBsZW5ndGhzCiAJCQkJCU5ldEJTRDogIFN1cHByZXNzIGxpbmstbGV2ZWwgcm91dGVzICovCiAJICAgIC8qCWNhc2UgJ2wnOgkJT3BlbkJTRDogV2lkZXIgSVB2NiBkaXNwbGF5CkBAIC0yMjIsNiArMjQwLDcgQEAKIAkJCQlleGl0KDEpOwogCQkJfQogCQkJcGZsYWcgPSAxOworCQkJcG5hbWUgPSB0cC0+cHJfbmFtZTsKIAkJCXJldHVybjsKIAkgICAgLyoJY2FzZSAncSc6CQlOZXRCU0Q6ICBJUlEgaW5mb3JtYXRpb24KIAkJCQkJT3BlbkJTRDogU3VwcHJlc3MgaW5hY3RpdmUgSS9GcwpAQCAtMjMxLDYgKzI1MCwyNCBAQAogCQljYXNlICdyJzoKIAkJCXJmbGFnID0gMTsKIAkJCWJyZWFrOworCQljYXNlICdSJzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFyZ3Zbb3B0aW5kXSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhfZ2V0YnVsayA9IGF0b2koYXJndltvcHRpbmRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heF9nZXRidWxrID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlKCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ1Igb3B0aW9uOiAlc1xuIiwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyZ3Zbb3B0aW5kXSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIC1DUiBvcHRpb246IG5vIGFyZ3VtZW50IGdpdmVuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW5kKys7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAkJY2FzZSAnUyc6CSAgICAgLyogRnJlZUJTRDoKIAkJCQkJTmV0QlNEOiAgU2VtaS1udW1lcmljIGRpc3BsYXkKIAkJCQkJT3BlbkJTRDogU2hvdyByb3V0ZSBzb3VyY2Ugc2VsZWN0b3IgKi8KQEAgLTI5NCwxMSArMzMxLDEzIEBACiAgICAgICAgICAgICBwcm9nbmFtZSA9IGFyZ3ZbMF07CiAKIAlzd2l0Y2ggKHNubXBfcGFyc2VfYXJncyggYXJnYywgYXJndiwgJnNlc3Npb24sICJDOmlScyIsIG9wdFByb2MpKSB7Ci0JY2FzZSAtMjoKKwljYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKwkgICAgZXhpdCgxKTsKKwljYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAJICAgIGV4aXQoMCk7Ci0JY2FzZSAtMToKKwljYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKIAkgICAgdXNhZ2UoKTsKLQkgICAgZXhpdCgwKTsKKwkgICAgZXhpdCgxKTsKIAlkZWZhdWx0OgogCSAgICBicmVhazsKIAl9CkBAIC0zMzAsNiArMzY5LDcgQEAKIAkgKiAgICAgS2VybmVsIG5hbWVsaXMgaGFuZGxpbmcKIAkgKi8KIAorI2lmIDAKIAlpZiAobWZsYWcpIHsKICAgICAgICAgICAgIC8qCiAJCW1icHIobmxbTl9NQlNUQVRdLm5fdmFsdWUsIG5sW05fTUJQT09MXS5uX3ZhbHVlLApAQCAtMzQxLDYgKzM4MSw3IEBACiAJCXByaW50cHJvdG8odHAsIHRwLT5wcl9uYW1lKTsKIAkJZXhpdCgwKTsKIAl9CisjZW5kaWYKIAkvKgogCSAqIEtlZXAgZmlsZSBkZXNjcmlwdG9ycyBvcGVuIHRvIGF2b2lkIG92ZXJoZWFkCiAJICogb2Ygb3Blbi9jbG9zZSBvbiBlYWNoIGNhbGwgdG8gZ2V0KiByb3V0aW5lcy4KQEAgLTM1Nyw3ICszOTgsMTAgQEAKIAkJCXJ0X3N0YXRzKCk7CiAJCWVsc2UKICAgICAgICAgICAgICAgKi8KLQkJCXJvdXRlcHIoKTsKKwkJaWYgKExmbGFnIHx8IHJvdXRleHByKGFmKSA9PSAwKSB7CisJCSAgICBpZiAocm91dGU0cHIoYWYpID09IDAgJiYgYWYgPT0gQUZfSU5FVCkgcm91dGVwcigpOworCQkgICAgcm91dGU2cHIoYWYpOworCQl9CiAJCWV4aXQoMCk7CiAJfQogICAgICAvKgpAQCAtMzg4LDIzICs0MzIsMzMgQEAKIAkJZXhpdCgwKTsKIAl9CiAgICAgICovCi0JaWYgKGFmID09IEFGX0lORVQgfHwgYWYgPT0gQUZfVU5TUEVDKSB7CisJc2V0c2VydmVudCgxKTsKKyAgICAgICAgaWYgKExmbGFnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKGFmKSB7CisgICAgICAgICAgICBjYXNlIEFGX1VOU1BFQzoKIAkJc2V0cHJvdG9lbnQoMSk7Ci0JCXNldHNlcnZlbnQoMSk7CiAJCS8qIHVnaCwgdGhpcyBpcyBPKE1OKSAuLi4gd2h5IGRvIHdlIGRvIHRoaXM/ICovCiAJCXdoaWxlICgocCA9IGdldHByb3RvZW50KCkpKSB7CiAJCQlmb3IgKHRwID0gcHJvdG94OyB0cC0+cHJfbmFtZTsgdHArKykKIAkJCQlpZiAoc3RyY21wKHRwLT5wcl9uYW1lLCBwLT5wX25hbWUpID09IDApCi0JCQkJCWJyZWFrOwotCQkJaWYgKHRwLT5wcl9uYW1lID09IDAgfHwgdHAtPnByX3dhbnRlZCA9PSAwKQotCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRwcm90byh0cCwgcC0+cF9uYW1lKTsKKwkJCQkJaWYgKHRwLT5wcl9uYW1lICYmIHRwLT5wcl93YW50ZWQpCisJCQkJCSAgICBwcmludHByb3RvKHRwLCBwLT5wX25hbWUpOwogCQl9CiAJCWVuZHByb3RvZW50KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICAgICAgICAgIGZvciAodHAgPSBwcm90b3g7IHRwLT5wcl9uYW1lOyB0cCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50cHJvdG8odHAsIHRwLT5wcl9uYW1lKTsKKyAgICAgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICAgICAgICAgIGZvciAodHAgPSBpcDZwcm90b3g7IHRwLT5wcl9uYW1lOyB0cCsrKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50cHJvdG8odHAsIHRwLT5wcl9uYW1lKTsKKyAgICAgICAgICAgIH0KIAl9Ci0JaWYgKGFmID09IEFGX0lORVQ2IHx8IGFmID09IEFGX1VOU1BFQykKLQkJZm9yICh0cCA9IGlwNnByb3RveDsgdHAtPnByX25hbWU7IHRwKyspCi0JCQlwcmludHByb3RvKHRwLCB0cC0+cHJfbmFtZSk7CisgICAgICAgIGVsc2UgeworCSAgICBmb3IgKHRwID0gaXB4cHJvdG94OyB0cC0+cHJfbmFtZTsgdHArKykKKwkJaWYgKCFwbmFtZSB8fCBzdHJjbXAocG5hbWUsdHAtPnByX25hbWUpID09IDApCisJCSAgICBwcmludHByb3RvKHRwLCBwbmFtZSk7CisJfQogICAgIC8qCiAJaWYgKGFmID09IEFGX0lQWCB8fCBhZiA9PSBBRl9VTlNQRUMpCiAJCWZvciAodHAgPSBpcHhwcm90b3g7IHRwLT5wcl9uYW1lOyB0cCsrKQpAQCAtNDQ5LDEyICs1MDMsNiBAQAogCXJldHVybiAobiAhPSAxID8gInMiIDogIiIpOwogfQogCi1jb25zdCBjaGFyICoKLXBsdXJhbGVzKGludCBuKQotewotCXJldHVybiAobiAhPSAxID8gImVzIiA6ICIiKTsKLX0KLQogLyoKICAqIEZpbmQgdGhlIHByb3RveCBmb3IgdGhlIGdpdmVuICJ3ZWxsLWtub3duIiBuYW1lLgogICovCkBAIC00ODksNyArNTM3LDcgQEAKIAogCXNldHByb3RvZW50KDEpOwkJCS8qIG1ha2UgcHJvdG9jb2wgbG9va3VwIGNoZWFwZXIgKi8KIAl3aGlsZSAoKHAgPSBnZXRwcm90b2VudCgpKSkgewotCQkvKiBhc3NlcnQ6IG5hbWUgbm90IHNhbWUgYXMgcC0+bmFtZSAqLworCQkvKiBuZXRzbm1wX2Fzc2VydDogbmFtZSBub3Qgc2FtZSBhcyBwLT5uYW1lICovCiAJCWZvciAoYWxpYXMgPSBwLT5wX2FsaWFzZXM7ICphbGlhczsgYWxpYXMrKykKIAkJCWlmIChzdHJjbXAobmFtZSwgKmFsaWFzKSA9PSAwKSB7CiAJCQkJZW5kcHJvdG9lbnQoKTsKQEAgLTUwNCwxNCArNTUyLDEyIEBACiB1c2FnZSh2b2lkKQogewogCSh2b2lkKWZwcmludGYoc3RkZXJyLAotInVzYWdlOiAlcyBbc25tcF9vcHRzXSBbLUNhbl0gWy1DZiBhZGRyZXNzX2ZhbWlseV1cbiIsIHByb2duYW1lKTsKKyJ1c2FnZTogJXMgW3NubXBfb3B0c10gWy1DYW52XSBbLUNmIGFkZHJlc3NfZmFtaWx5XVxuIiwgcHJvZ25hbWUpOwogCSh2b2lkKWZwcmludGYoc3RkZXJyLAotIiAgICAgICAlcyBbc25tcF9vcHRzXSBbLUNiZGdpbW5yU3NdIFstQ2YgYWRkcmVzc19mYW1pbHldXG4iLCBwcm9nbmFtZSk7CisiICAgICAgICVzIFtzbm1wX29wdHNdIFstQ2lib2Rudl0gWy1DSSBpbnRlcmZhY2VdIFstQ3cgd2FpdF1cbiIsIHByb2duYW1lKTsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwKLSIgICAgICAgJXMgW3NubXBfb3B0c10gWy1DYmRuXSBbLUNJIGludGVyZmFjZV0gWy1DdyB3YWl0XVxuIiwgcHJvZ25hbWUpOworIiAgICAgICAlcyBbc25tcF9vcHRzXSBbLUNzW3NdXSBbLUNwIHByb3RvY29sXVxuIiwgcHJvZ25hbWUpOwogCSh2b2lkKWZwcmludGYoc3RkZXJyLAotIiAgICAgICAlcyBbc25tcF9vcHRzXSBbLUNzXSBbLUNwIHByb3RvY29sXVxuIiwgcHJvZ25hbWUpOwotCSh2b2lkKWZwcmludGYoc3RkZXJyLAotIiAgICAgICAlcyBbc25tcF9vcHRzXSBbLUNhXSBbLUNmIGFkZHJlc3NfZmFtaWx5XSBbLUNpIHwgLUNJIGludGVyZmFjZV1cbiIsIHByb2duYW1lKTsKKyIgICAgICAgJXMgW3NubXBfb3B0c10gWy1Dcm52XSBbLUNmIGFkZHJlc3NfZmFtaWx5XVxuIiwgcHJvZ25hbWUpOwogCWV4aXQoMSk7CiB9CmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L21haW4uaCBiL2FwcHMvc25tcG5ldHN0YXQvbWFpbi5oCmluZGV4IDcxZTdhNjUuLjEyNzIzMjEgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvbWFpbi5oCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvbWFpbi5oCkBAIC00LDEwICs0LDEzIEBACiAjZW5kaWYKIAogZXh0ZXJuICBuZXRzbm1wX3Nlc3Npb24gKnNzOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X2dldCggICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgKnNlc3Npb24pOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X2dldG5leHQobmV0c25tcF92YXJpYWJsZV9saXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgKnNlc3Npb24pOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X3dhbGsoICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpsaXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgKnNlc3Npb24pOwogCmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L25ldHN0YXQuaCBiL2FwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oCmluZGV4IDI3NjI1NjguLmJhNjFlYjMgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvbmV0c3RhdC5oCkBAIC0zOSwxMyArMzksMTMgQEAKIC8qIFdoYXQgaXMgdGhlIG1heCBsZW5ndGggb2YgYSBwb2ludGVyIHByaW50ZWQgd2l0aCAlcCAoaW5jbHVkaW5nIDB4KT8gKi8KICNkZWZpbmUgUExFTgkoTE9OR19CSVQgLyA0ICsgMikKIAotZXh0ZXJuIGludAlBZmxhZzsJCS8qIHNob3cgYWRkcmVzc2VzIG9mIHByb3RvY29sIGNvbnRyb2wgYmxvY2sgKi8KIGV4dGVybiBpbnQJYWZsYWc7CQkvKiBzaG93IGFsbCBzb2NrZXRzIChpbmNsdWRpbmcgc2VydmVycykgKi8KIGV4dGVybiBpbnQJYmZsYWc7CQkvKiBzaG93IGJ5dGVzIGluc3RlYWQgb2YgcGFja2V0cyAqLwogZXh0ZXJuIGludAlkZmxhZzsJCS8qIHNob3cgaS9mIGRyb3BwZWQgcGFja2V0cyAqLwogZXh0ZXJuIGludAlnZmxhZzsJCS8qIHNob3cgZ3JvdXAgKG11bHRpY2FzdCkgcm91dGluZyBvciBzdGF0cyAqLwogZXh0ZXJuIGludAlpZmxhZzsJCS8qIHNob3cgaW50ZXJmYWNlcyAqLwogZXh0ZXJuIGludAlsZmxhZzsJCS8qIHNob3cgcm91dGluZyB0YWJsZSB3aXRoIHVzZSBhbmQgcmVmICovCitleHRlcm4gaW50CUxmbGFnOwkJLyogTGVnYWN5IG1pYnMgKi8KIGV4dGVybiBpbnQJbWZsYWc7CQkvKiBzaG93IG1lbW9yeSBzdGF0cyAqLwogZXh0ZXJuIGludAluZmxhZzsJCS8qIHNob3cgYWRkcmVzc2VzIG51bWVyaWNhbGx5ICovCiBleHRlcm4gaW50CW9mbGFnOwkJLyogT3Blbi9OZXQtQlNEIHN0eWxlIG9jdGV0IG91dHB1dCAqLwpAQCAtNjIsMTEgKzYyLDExIEBACiBleHRlcm4gY2hhcgkqaW50cmZhY2U7CS8qIGRlc2lyZWQgaS9mIGZvciBzdGF0cywgb3IgTlVMTCBmb3IgYWxsIGkvZnMgKi8KIAogZXh0ZXJuIGludAlhZjsJCS8qIGFkZHJlc3MgZmFtaWx5ICovCitleHRlcm4gaW50ICBtYXhfZ2V0YnVsazsgIC8qIHNwZWNpZmllcyB0aGUgbWF4LXJlcGVhdGVycyB2YWx1ZSB0byB1c2Ugd2l0aCBHRVRCVUxLIHJlcXVlc3RzICovCiAKIGV4dGVybgljaGFyICpfX3Byb2duYW1lOyAvKiBwcm9ncmFtIG5hbWUsIGZyb20gY3J0MC5vICovCiAKIGNvbnN0IGNoYXIJKnBsdXJhbChpbnQpOwotY29uc3QgY2hhcgkqcGx1cmFsZXMoaW50KTsKIAogdm9pZAl0Y3Bwcm90b3ByKGNvbnN0IGNoYXIgKik7CiB2b2lkCXVkcHByb3RvcHIoY29uc3QgY2hhciAqKTsKQEAgLTgwLDE1ICs4MCwyNiBAQAogdm9pZAlpcDZfc3RhdHMoICBjb25zdCBjaGFyICopOwogdm9pZAlpY21wNl9zdGF0cyhjb25zdCBjaGFyICopOwogCit2b2lkCXRjcHhwcm90b3ByKGNvbnN0IGNoYXIgKik7Cit2b2lkCXVkcHhwcm90b3ByKGNvbnN0IGNoYXIgKik7Cit2b2lkCWxpc3Rlbnhwcm90b3ByKGNvbnN0IGNoYXIgKik7Cit2b2lkCWlweF9zdGF0cyhjb25zdCBjaGFyICopOwordm9pZAlpY21weF9zdGF0cyhjb25zdCBjaGFyICopOworCiB2b2lkCXByX3J0aGRyKGludCk7CiB2b2lkCXByX2VuY2FwaGRyKHZvaWQpOwogdm9pZAlwcl9mYW1pbHkoaW50KTsKIHZvaWQJcnRfc3RhdHModm9pZCk7CiAKK3ZvaWQgICAgZ2V0X2lmbmFtZShjaGFyICosIGludCk7CiBjaGFyCSpyb3V0ZW5hbWUoaW5fYWRkcl90KTsKIGNoYXIJKm5ldG5hbWUoaW5fYWRkcl90LCBpbl9hZGRyX3QpOwogY2hhcgkqbnNfcHJpbnQoc3RydWN0IHNvY2thZGRyICopOwogdm9pZAlyb3V0ZXByKHZvaWQpOworaW50ICAgICByb3V0ZTRwcihpbnQpOworaW50ICAgICByb3V0ZTZwcihpbnQpOworaW50ICAgICByb3V0ZXhwcihpbnQpOwogCiB2b2lkCWludHByKGludCk7Ci0KK3ZvaWQJaW5ldHByaW50KHN0cnVjdCBpbl9hZGRyICosIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwordm9pZAlpbmV0NnByaW50KHVuc2lnbmVkIGNoYXIgKiwgaW50LCBjb25zdCBjaGFyICosIGludCk7CmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMgYi9hcHBzL3NubXBuZXRzdGF0L3JvdXRlLmMKaW5kZXggOThhOWMwYy4uMWRiYTc0ZCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZS5jCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvcm91dGUuYwpAQCAtODAsMTMgKzgwLDEzIEBACiAjZGVmaW5lIFNFVF9BTEwgIDB4MWYKIAogc3RydWN0IHJvdXRlX2VudHJ5IHsKLSAgICBvaWQgICAgICAgICAgICAgaW5zdGFuY2VbNF07CiAgICAgaW5fYWRkcl90ICAgICAgIGRlc3RpbmF0aW9uOwogICAgIGluX2FkZHJfdCAgICAgICBtYXNrOwogICAgIGluX2FkZHJfdCAgICAgICBnYXRld2F5OwogICAgIGludCAgICAgICAgICAgICBpZk51bWJlcjsKICAgICBpbnQgICAgICAgICAgICAgdHlwZTsKICAgICBpbnQgICAgICAgICAgICAgcHJvdG87CisgICAgaW50ICAgICAgICAgICAgIGFmOwogICAgIGludCAgICAgICAgICAgICBzZXRfYml0czsKICAgICBjaGFyICAgICAgICAgICAgaWZuYW1lWzY0XTsKIH07CkBAIC0xMTAsNyArMTEwLDcgQEAKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcj1OVUxMLCAqdnA7CiAgICAgY2hhciAgKmNwOwogICAgIAotICAgIHByaW50ZigiUm91dGluZyB0YWJsZXNcbiIpOworICAgIHByaW50ZigiUm91dGluZyB0YWJsZXMgKGlwUm91dGVUYWJsZSlcbiIpOwogICAgIHByX3J0aGRyKEFGX0lORVQpOwogCiAjZGVmaW5lIEFERF9SVFZBUiggeCApIHJ0Y29sX29pZFsgcnRjb2xfbGVuLTEgXSA9IHg7IFwKQEAgLTEzMiw2ICsxMzIsMTAgQEAKICAgICAgICAgaWYgKCBzbm1wX29pZF9jb21wYXJlKCBydGNvbF9vaWQsIHJ0Y29sX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWUsIHJ0Y29sX2xlbikgIT0gMCApCiAgICAgICAgICAgICBicmVhazsgICAgLyogRW5kIG9mIFRhYmxlICovCisJaWYgKHZhci0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCB8fAorICAgICAgICAgICAgICAgIHZhci0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFIHx8CisgICAgICAgICAgICAgICAgdmFyLT50eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKQorCSAgICBicmVhazsKICAgICAgICAgbWVtc2V0KCAmcm91dGUsIDAsIHNpemVvZiggc3RydWN0IHJvdXRlX2VudHJ5ICkpOwogICAgICAgICAvKiBFeHRyYWN0IGlwUm91dGVEZXN0IGluZGV4IHZhbHVlICovCiAgICAgICAgIGNwID0gdG1wQWRkci5kYXRhOwpAQCAtMTc0LDYgKzE3OCwxMDQgQEAKIH0KIAogCitpbnQKK3JvdXRlNHByKGludCBhZikKK3sKKyAgICBzdHJ1Y3Qgcm91dGVfZW50cnkgIHJvdXRlLCAqcnAgPSAmcm91dGU7CisgICAgb2lkICAgIHJ0Y29sX29pZFtdICA9IHsgMSwzLDYsMSwyLDEsNCwyNCw0LDEsMCB9OyAvKiBpcENpZHJSb3V0ZUVudHJ5ICovCisgICAgc2l6ZV90IHJ0Y29sX2xlbiAgICA9IE9JRF9MRU5HVEgoIHJ0Y29sX29pZCApOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyID0gTlVMTCwgKnZwOworICAgIHVuaW9uIHsKKyAgICAgICAgaW5fYWRkcl90IGFkZHI7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgZGF0YVs0XTsKKyAgICB9IHRtcEFkZHI7CisgICAgaW50IHByaW50ZWQgPSAwOworICAgIGludCBoZHJfYWYgPSBBRl9VTlNQRUM7CisKKyAgICBpZiAoYWYgIT0gQUZfVU5TUEVDICYmIGFmICE9IEFGX0lORVQpCisgICAgICAgIHJldHVybiAwOworCisjZGVmaW5lIEFERF9SVFZBUiggeCApIHJ0Y29sX29pZFsgcnRjb2xfbGVuLTEgXSA9IHg7IFwKKyAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCBydGNvbF9vaWQsIHJ0Y29sX2xlbiwgQVNOX05VTEwsIE5VTEwsICAwKQorICAgIEFERF9SVFZBUiggNSApOyAgICAgICAgICAgICAgICAgLyogaXBDaWRyUm91dGVJZkluZGV4ICovCisgICAgQUREX1JUVkFSKCA2ICk7ICAgICAgICAgICAgICAgICAvKiBpcENpZHJSb3V0ZVR5cGUgICAgKi8KKyAgICBBRERfUlRWQVIoIDcgKTsgICAgICAgICAgICAgICAgIC8qIGlwQ2lkclJvdXRlUHJvdG8gICAqLworI3VuZGVmIEFERF9SVFZBUgorCisgICAgLyoKKyAgICAgKiBOb3cgd2FsayB0aGUgaXBDaWRyUm91dGVUYWJsZSwgcmVwb3J0aW5nIHRoZSB2YXJpb3VzIHJvdXRlIGVudHJpZXMKKyAgICAgKi8KKyAgICB3aGlsZSAoIDEgKSB7CisgICAgICAgIG9pZCAqb3A7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgKmNwOworCisgICAgICAgIGlmIChuZXRzbm1wX3F1ZXJ5X2dldG5leHQoIHZhciwgc3MgKSAhPSBTTk1QX0VSUl9OT0VSUk9SKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIHJ0Y29sX29pZFsgcnRjb2xfbGVuLTEgXSA9IDU7ICAgICAgICAvKiBpcFJvdXRlSWZJbmRleCAqLworICAgICAgICBpZiAoIHNubXBfb2lkX2NvbXBhcmUoIHJ0Y29sX29pZCwgcnRjb2xfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+bmFtZSwgcnRjb2xfbGVuKSAhPSAwICkKKyAgICAgICAgICAgIGJyZWFrOyAgICAvKiBFbmQgb2YgVGFibGUgKi8KKyAgICAgICAgaWYgKHZhci0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCB8fAorICAgICAgICAgICAgICAgIHZhci0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFIHx8CisgICAgICAgICAgICAgICAgdmFyLT50eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIG1lbXNldCggJnJvdXRlLCAwLCBzaXplb2YoIHN0cnVjdCByb3V0ZV9lbnRyeSApKTsKKwlycC0+YWYgPSBBRl9JTkVUOworCW9wID0gdmFyLT5uYW1lK3J0Y29sX2xlbjsKKyAgICAgICAgY3AgPSB0bXBBZGRyLmRhdGE7CisgICAgICAgIGNwWzBdID0gKm9wKysgJiAweGZmOworICAgICAgICBjcFsxXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgY3BbMl0gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIGNwWzNdID0gKm9wKysgJiAweGZmOworICAgICAgICBycC0+ZGVzdGluYXRpb24gPSB0bXBBZGRyLmFkZHI7CisgICAgICAgIGNwID0gdG1wQWRkci5kYXRhOworICAgICAgICBjcFswXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgY3BbMV0gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIGNwWzJdID0gKm9wKysgJiAweGZmOworICAgICAgICBjcFszXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgcnAtPm1hc2sgPSB0bXBBZGRyLmFkZHI7CisJb3ArKzsgLyogaXBDaWRyUm91dGVUb3MgKi8KKyAgICAgICAgY3AgPSB0bXBBZGRyLmRhdGE7CisgICAgICAgIGNwWzBdID0gKm9wKysgJiAweGZmOworICAgICAgICBjcFsxXSA9ICpvcCsrICYgMHhmZjsKKyAgICAgICAgY3BbMl0gPSAqb3ArKyAmIDB4ZmY7CisgICAgICAgIGNwWzNdID0gKm9wKysgJiAweGZmOworICAgICAgICBycC0+Z2F0ZXdheSA9IHRtcEFkZHIuYWRkcjsKKwlycC0+c2V0X2JpdHMgPSBTRVRfTUFTSyB8IFNFVF9HV0FZOworCisgICAgICAgIGZvciAoIHZwPXZhcjsgdnA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlICkgeworICAgICAgICAgICAgc3dpdGNoICggdnAtPm5hbWVbIHJ0Y29sX2xlbiAtIDEgXSApIHsKKyAgICAgICAgICAgIGNhc2UgNTogICAgIC8qIGlwQ2lkclJvdXRlSWZJbmRleCAqLworICAgICAgICAgICAgICAgIHJwLT5pZk51bWJlciAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfSUZOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNjogICAgIC8qIGlwQ2lkclJvdXRlVHlwZSAgICAqLworICAgICAgICAgICAgICAgIHJwLT50eXBlICAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfVFlQRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNzogICAgIC8qIGlwQ2lkclJvdXRlUHJvdG8gICAqLworICAgICAgICAgICAgICAgIHJwLT5wcm90byAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfUFJUTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocnAtPnNldF9iaXRzICE9IFNFVF9BTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIEluY29tcGxldGUgcXVlcnkgKi8KKyAgICAgICAgfQorCisgICAgICAgIGlmIChoZHJfYWYgIT0gcnAtPmFmKSB7CisgICAgICAgICAgICBpZiAoaGRyX2FmICE9IEFGX1VOU1BFQykKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBoZHJfYWYgPSBycC0+YWY7CisJICAgIHByaW50ZigiUm91dGluZyB0YWJsZXMgKGlwQ2lkclJvdXRlVGFibGUpXG4iKTsKKyAgICAgICAgICAgIHByX3J0aGRyKGhkcl9hZik7CisgICAgICAgIH0KKyAgICAgICAgcF9ydG5vZGUoIHJwICk7CisgICAgICAgIHByaW50ZWQrKzsKKyAgICB9CisgICAgcmV0dXJuIHByaW50ZWQ7Cit9CisKIAogc3RydWN0IGlmbGlzdCB7CiAgICAgaW50ICAgICAgICAgICAgIGluZGV4OwpAQCAtMTg2LDYgKzI4OCw4IEBACiB7CiAgICAgb2lkICAgIGlmZGVzY3Jfb2lkW10gID0geyAxLDMsNiwxLDIsMSwyLDIsMSwyLDAgfTsKICAgICBzaXplX3QgaWZkZXNjcl9sZW4gICAgPSBPSURfTEVOR1RIKCBpZmRlc2NyX29pZCApOworICAgIG9pZCAgICBpZnhjb2xfb2lkW10gPSB7IDEsMyw2LDEsMiwxLDMxLDEsMSwxLDEsMCB9OworICAgIHNpemVfdCBpZnhjb2xfbGVuICAgPSBPSURfTEVOR1RIKCBpZnhjb2xfb2lkICk7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIgPSBOVUxMOwogICAgIHN0cnVjdCBpZmxpc3QgICAgICAgICAqaXA7CiAKQEAgLTIwNCw2ICszMDgsMTggQEAKICAgICBJZmxpc3QgPSBpcDsKICAgICBpcC0+aW5kZXggPSBpZkluZGV4OwogCisgICAgaWZ4Y29sX29pZFsgaWZ4Y29sX2xlbi0xIF0gPSBpZkluZGV4OworICAgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoICZ2YXIsIGlmeGNvbF9vaWQsIGlmeGNvbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKKyAgICBpZiAobmV0c25tcF9xdWVyeV9nZXQoIHZhciwgc3MgKSA9PSBTTk1QX0VSUl9OT0VSUk9SKSB7CisgICAgICAgIGlmICh2YXItPnZhbF9sZW4gPj0gc2l6ZW9mKGlwLT5uYW1lKSkKKyAgICAgICAgICAgIHZhci0+dmFsX2xlbiAgPSBzaXplb2YoaXAtPm5hbWUpIC0gMTsKKyAgICAgICAgbWVtbW92ZShpcC0+bmFtZSwgdmFyLT52YWwuc3RyaW5nLCB2YXItPnZhbF9sZW4pOworICAgICAgICBpcC0+bmFtZVt2YXItPnZhbF9sZW5dID0gJ1wwJzsKKwlzdHJjcHkobmFtZSwgaXAtPm5hbWUpOworCXJldHVybjsKKyAgICB9CisKICAgICBpZmRlc2NyX29pZFsgaWZkZXNjcl9sZW4tMSBdID0gaWZJbmRleDsKICAgICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCAmdmFyLCBpZmRlc2NyX29pZCwgaWZkZXNjcl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX05VTEwsIE5VTEwsICAwKTsKQEAgLTIxOCw1MCArMzM0LDYgQEAKICAgICBzdHJjcHkobmFtZSwgaXAtPm5hbWUpOwogfQogCi0vKgotICogUHJpbnQgYWRkcmVzcyBmYW1pbHkgaGVhZGVyIGJlZm9yZSBhIHNlY3Rpb24gb2YgdGhlIHJvdXRpbmcgdGFibGUuCi0gKi8KLXZvaWQKLXByX2ZhbWlseShpbnQgYWYpCi17Ci0JY29uc3QgY2hhciAqYWZuYW1lOwotCi0Jc3dpdGNoIChhZikgewotCWNhc2UgQUZfSU5FVDoKLQkJYWZuYW1lID0gIkludGVybmV0IjsKLQkJYnJlYWs7Ci0jaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgotCWNhc2UgQUZfSU5FVDY6Ci0JCWFmbmFtZSA9ICJJbnRlcm5ldDYiOwotCQlicmVhazsKLSNlbmRpZgotICAgIC8qCi0JY2FzZSBBRl9OUzoKLQkJYWZuYW1lID0gIlhOUyI7Ci0JCWJyZWFrOwotCWNhc2UgQUZfSVBYOgotCQlhZm5hbWUgPSAiSVBYIjsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9DQ0lUVDoKLQkJYWZuYW1lID0gIlguMjUiOwotCQlicmVhazsKLQljYXNlIFBGX0tFWToKLQkJYWZuYW1lID0gIkVuY2FwIjsKLQkJYnJlYWs7Ci0JY2FzZSBBRl9BUFBMRVRBTEs6Ci0JCWFmbmFtZSA9ICJBcHBsZVRhbGsiOwotCQlicmVhazsKLSAgICAgKi8KLQlkZWZhdWx0OgotCQlhZm5hbWUgPSBOVUxMOwotCQlicmVhazsKLQl9Ci0JaWYgKGFmbmFtZSkKLQkJcHJpbnRmKCJcbiVzOlxuIiwgYWZuYW1lKTsKLQllbHNlCi0JCXByaW50ZigiXG5Qcm90b2NvbCBGYW1pbHkgJWQ6XG4iLCBhZik7Ci19Ci0KIC8qIGNvbHVtbiB3aWR0aHM7IGVhY2ggZm9sbG93ZWQgYnkgb25lIHNwYWNlICovCiAjaWZuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKICNkZWZpbmUJV0lEX0RTVChhZikJMjYJLyogd2lkdGggb2YgZGVzdGluYXRpb24gY29sdW1uICovCkBAIC0zMjMsMTUgKzM5NSwxNSBAQAogCiAJaWYgKGZpcnN0KSB7CiAJCWZpcnN0ID0gMDsKLQkJaWYgKGdldGhvc3RuYW1lKGRvbWFpbiwgc2l6ZW9mIGRvbWFpbikgPT0gMCAmJgotCQkgICAgKGNwID0gc3RyY2hyKGRvbWFpbiwgJy4nKSkpCisJCWlmIChnZXRob3N0bmFtZShsaW5lLCBzaXplb2YgbGluZSkgPT0gMCAmJgorCQkgICAgKGNwID0gc3RyY2hyKGxpbmUsICcuJykpKQogCQkJKHZvaWQpIHN0cmxjcHkoZG9tYWluLCBjcCArIDEsIHNpemVvZiBkb21haW4pOwogCQllbHNlCiAJCQlkb21haW5bMF0gPSAnXDAnOwogCX0KIAljcCA9IE5VTEw7CiAJaWYgKCFuZmxhZykgewotCQlocCA9IGdldGhvc3RieWFkZHIoKGNoYXIgKikmaW4sIHNpemVvZiAoc3RydWN0IGluX2FkZHIpLAorCQlocCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZpbiwgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkciksCiAJCSAgICBBRl9JTkVUKTsKIAkJaWYgKGhwKSB7CiAJCQlpZiAoKGNwID0gc3RyY2hyKGhwLT5oX25hbWUsICcuJykpICYmCkBAIC00OTksNyArNTcxLDYgQEAKICAgICBzdGF0aWMgY2hhciBmbGFnX2J1ZlsxMF07CiAgICAgY2hhciAgKmNwID0gZmxhZ19idWY7CiAKLSAgICBtZW1zZXQoIGZsYWdfYnVmLCAwLCBzaXplb2YoZmxhZ19idWYpKTsKICAgICAqY3ArKyA9ICc8JzsKICAgICAqY3ArKyA9ICdVJzsgICAvKiByb3V0ZSBpcyBpbiB1c2UgKi8KICAgICBpZiAocnAtPm1hc2sgID09IDB4ZmZmZmZmZmYpCkBAIC01MDksNiArNTgwLDcgQEAKICAgICBpZiAocnAtPnR5cGUgID09IDQpCiAgICAgICAgICpjcCsrID0gJ0cnOyAgIC8qIHJlbW90ZSBkZXN0aW5hdGlvbi9uZXQgKi8KICAgICAqY3ArKyA9ICc+JzsKKyAgICAqY3AgPSAwOwogICAgIHJldHVybiBmbGFnX2J1ZjsKIH0KIApkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wbmV0c3RhdC9yb3V0ZXguYyBiL2FwcHMvc25tcG5ldHN0YXQvcm91dGV4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUwNmQyNQotLS0gL2Rldi9udWxsCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvcm91dGV4LmMKQEAgLTAsMCArMSw1NTggQEAKKy8qICAgICAgICAkT3BlbkJTRDogcm91dGUuYyx2IDEuNjYgMjAwNC8xMS8xNyAwMTo0NzoyMCBpdG9qdW4gRXhwICQgICAgICAgICovCisvKiAgICAgICAgJE5ldEJTRDogcm91dGUuYyx2IDEuMTUgMTk5Ni8wNS8wNyAwMjo1NTowNiB0aG9ycGVqIEV4cCAkICAgICAgICAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg4LCAxOTkzCisgKiAgICAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZmRlZiAgSU5IRVJJVEVEX0NPREUKKyNpZm5kZWYgbGludAorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gImZyb206IEAoIylyb3V0ZS5jICAgICAgICA4LjMgKEJlcmtlbGV5KSAzLzkvOTQiOworI2Vsc2UKK3N0YXRpYyBjaGFyICpyY3NpZCA9ICIkT3BlbkJTRDogcm91dGUuYyx2IDEuNjYgMjAwNC8xMS8xNyAwMTo0NzoyMCBpdG9qdW4gRXhwICQiOworI2VuZGlmCisjZW5kaWYgLyogbm90IGxpbnQgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCisjaWZuZGVmIElORVQKKyNkZWZpbmUgSU5FVAorI2VuZGlmCisKKyNpbmNsdWRlICJtYWluLmgiCisjaW5jbHVkZSAibmV0c3RhdC5oIgorI2lmIEhBVkVfV0lOU09DS19ICisjaW5jbHVkZSAid2luc3R1Yi5oIgorI2VuZGlmCisKKy8qIGluZXRDaWRyUm91dGVUYWJsZSAqLworI2RlZmluZSBTRVRfSUZOTyAweDAxCisjZGVmaW5lIFNFVF9UWVBFIDB4MDIKKyNkZWZpbmUgU0VUX1BSVE8gMHgwNAorI2RlZmluZSBTRVRfQUdFICAweDA4CisjZGVmaW5lIFNFVF9BUyAgIDB4MTAKKyNkZWZpbmUgU0VUX01FVDEgMHgyMAorI2RlZmluZSBTRVRfQUxMICAweDNmCisKKy8qIGlwNlJvdXRlVGFibGUgKi8KKyNkZWZpbmUgU0VUX0hPUCAgICAgMHg0MAorI2RlZmluZSBTRVRfSU5WQUxJRCAweDgwCisjZGVmaW5lIFNFVF9BTEw2ICAgIDB4NjcKKy8qIG5vdCBpbnZhbGlkLCBhbmQgb25seSB0aGUgY29sdW1ucyB0aGF0IHdlIGZldGNoICovCisKK3N0cnVjdCByb3V0ZV9lbnRyeSB7CisgICAgaW50ICAgICAgICAgICAgIGFmOworICAgIHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGRzdDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBob3A7CisgICAgaW50ICAgICAgICAgICAgIG1hc2s7CisgICAgaW50ICAgICAgICAgICAgIGlmTnVtYmVyOworICAgIGludCAgICAgICAgICAgICB0eXBlOworICAgIGludCAgICAgICAgICAgICBwcm90bzsKKyAgICBpbnQgICAgICAgICAgICAgYWdlOworICAgIGludCAgICAgICAgICAgICBhczsKKyAgICBpbnQgICAgICAgICAgICAgbWV0cmljMTsKKyAgICBpbnQgICAgICAgICAgICAgc2V0X2JpdHM7CisgICAgY2hhciAgICAgICAgICAgIGlmbmFtZVs2NF07Cit9OworCisKK3N0YXRpYyB2b2lkIHByX3J0eGhkcihpbnQgYWYsIGNvbnN0IGNoYXIgKnRhYmxlKTsKK3N0YXRpYyB2b2lkIHBfcnRub2RleCggc3RydWN0IHJvdXRlX2VudHJ5ICpycCApOworCisvKgorICogUHJpbnQgcm91dGluZyB0YWJsZXMuCisgKi8KK2ludAorcm91dGV4cHIoaW50IGFmKQoreworICAgIHN0cnVjdCByb3V0ZV9lbnRyeSAgcm91dGUsICpycCA9ICZyb3V0ZTsKKyAgICBvaWQgICAgcnRjb2xfb2lkW10gID0geyAxLDMsNiwxLDIsMSw0LDI0LDcsMSwwIH07IC8qIGluZXRDaWRyUm91dGVFbnRyeSAqLworICAgIHNpemVfdCBydGNvbF9sZW4gICAgPSBPSURfTEVOR1RIKCBydGNvbF9vaWQgKTsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciA9IE5VTEwsICp2cDsKKyAgICBpbnQgaGRyX2FmID0gQUZfVU5TUEVDOworICAgIGludCBwcmludGVkID0gMDsKKworI2RlZmluZSBBRERfUlRWQVIoIHggKSBydGNvbF9vaWRbIHJ0Y29sX2xlbi0xIF0gPSB4OyBcCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgcnRjb2xfb2lkLCBydGNvbF9sZW4sIEFTTl9OVUxMLCBOVUxMLCAgMCkKKyAgICBBRERfUlRWQVIoIDcgKTsgICAgICAgICAgICAgICAgIC8qIGluZXRDaWRyUm91dGVJZkluZGV4ICovCisgICAgQUREX1JUVkFSKCA4ICk7ICAgICAgICAgICAgICAgICAvKiBpbmV0Q2lkclJvdXRlVHlwZSAgICAqLworICAgIEFERF9SVFZBUiggOSApOyAgICAgICAgICAgICAgICAgLyogaW5ldENpZHJSb3V0ZVByb3RvICAgKi8KKyAgICBBRERfUlRWQVIoIDEwICk7ICAgICAgICAgICAgICAgIC8qIGluZXRDaWRyUm91dGVBZ2UgICAqLworICAgIEFERF9SVFZBUiggMTEgKTsgICAgICAgICAgICAgICAgLyogaW5ldENpZHJSb3V0ZU5leHRIb3BBUyAgICovCisgICAgQUREX1JUVkFSKCAxMiApOyAgICAgICAgICAgICAgICAvKiBpbmV0Q2lkclJvdXRlTWV0cmljMSAgICovCisjdW5kZWYgQUREX1JUVkFSCisKKyAgICAvKgorICAgICAqIE5vdyB3YWxrIHRoZSBpbmV0Q2lkclJvdXRlVGFibGUsIHJlcG9ydGluZyB0aGUgdmFyaW91cyByb3V0ZSBlbnRyaWVzCisgICAgICovCisgICAgd2hpbGUgKCAxICkgeworICAgICAgICBvaWQgKm9wOworICAgICAgICB1bnNpZ25lZCBjaGFyICpjcDsKKyAgICAgICAgaW50IGk7CisKKyAgICAgICAgaWYgKG5ldHNubXBfcXVlcnlfZ2V0bmV4dCggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcnRjb2xfb2lkWyBydGNvbF9sZW4tMSBdID0gNzsgICAgICAgIC8qIGlmUm91dGVJZkluZGV4ICovCisgICAgICAgIGlmICggc25tcF9vaWRfY29tcGFyZSggcnRjb2xfb2lkLCBydGNvbF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lLCBydGNvbF9sZW4pICE9IDAgKQorICAgICAgICAgICAgYnJlYWs7ICAgIC8qIEVuZCBvZiBUYWJsZSAqLworICAgICAgICBpZiAodmFyLT50eXBlID09IFNOTVBfTk9TVUNIT0JKRUNUIHx8CisgICAgICAgICAgICAgICAgdmFyLT50eXBlID09IFNOTVBfTk9TVUNISU5TVEFOQ0UgfHwKKyAgICAgICAgICAgICAgICB2YXItPnR5cGUgPT0gU05NUF9FTkRPRk1JQlZJRVcpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgbWVtc2V0KCAmcm91dGUsIDAsIHNpemVvZiggc3RydWN0IHJvdXRlX2VudHJ5ICkpOworICAgICAgICAvKiBFeHRyYWN0IGluZXRDaWRyUm91dGVEZXN0LCBpbmV0Q2lkclJvdXRlUGZ4TGVuLAorICAgICAgICAgKiBpbmV0Q2lkclJvdXRlTmV4dEhvcCBmcm9tIGluZGV4ICovCisgICAgICAgIHN3aXRjaCAodmFyLT5uYW1lW3J0Y29sX2xlbl0pIHsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgeyAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSZyb3V0ZS5kc3Q7CisgICAgICAgICAgICAgICAgaW50IGxlbjsKKyAgICAgICAgICAgICAgICByb3V0ZS5hZiA9IEFGX0lORVQ7CisgICAgICAgICAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgICAgICAgICBvcCA9IHZhci0+bmFtZStydGNvbF9sZW4rMTsKKyAgICAgICAgICAgICAgICBsZW4gPSAqb3ArKzsKKyAgICAgICAgICAgICAgICBjcCA9ICh1bnNpZ25lZCBjaGFyICopJnNpbi0+c2luX2FkZHI7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSAqY3ArKyA9ICpvcCsrOworICAgICAgICAgICAgICAgIHJvdXRlLm1hc2sgPSAqb3ArKzsKKyAgICAgICAgICAgICAgICBvcCArPSAqb3ArMTsKKyAgICAgICAgICAgICAgICBvcCsrOyAvKiBhZGRyVHlwZSAqLworICAgICAgICAgICAgICAgIG9wKys7IC8qIGFkZHJMZW4gKi8KKyAgICAgICAgICAgICAgICBzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJnJvdXRlLmhvcDsKKyAgICAgICAgICAgICAgICBzaW4tPnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICAgICAgICAgIGNwID0gKHVuc2lnbmVkIGNoYXIgKikmc2luLT5zaW5fYWRkcjsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspICpjcCsrID0gKm9wKys7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHsgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcm91dGUuZHN0OworICAgICAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICAgICAgcm91dGUuYWYgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICBzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgICAgICAgIG9wID0gdmFyLT5uYW1lK3J0Y29sX2xlbisxOworICAgICAgICAgICAgICAgIGxlbiA9ICpvcCsrOworICAgICAgICAgICAgICAgIGNwID0gKHVuc2lnbmVkIGNoYXIgKikmc2luNi0+c2luNl9hZGRyOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgKmNwKysgPSAqb3ArKzsKKyAgICAgICAgICAgICAgICByb3V0ZS5tYXNrID0gKm9wKys7CisgICAgICAgICAgICAgICAgb3AgKz0gKm9wKzE7CisgICAgICAgICAgICAgICAgb3ArKzsgLyogYWRkclR5cGUgKi8KKyAgICAgICAgICAgICAgICBvcCsrOyAvKiBhZGRyTGVuICovCisgICAgICAgICAgICAgICAgc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJvdXRlLmhvcDsKKyAgICAgICAgICAgICAgICBzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgICAgICAgIGNwID0gKHVuc2lnbmVkIGNoYXIgKikmc2luNi0+c2luNl9hZGRyOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykgKmNwKysgPSAqb3ArKzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIGFkZHJlc3MgdHlwZTogJWRcbiIsIChpbnQpdmFyLT5uYW1lW3J0Y29sX2xlbl0pOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAgICAvKiBFeHRyYWN0IGlwUm91dGVEZXN0IGluZGV4IHZhbHVlICovCisKKyAgICAgICAgZm9yICggdnA9dmFyOyB2cDsgdnA9dnAtPm5leHRfdmFyaWFibGUgKSB7CisgICAgICAgICAgICBzd2l0Y2ggKCB2cC0+bmFtZVsgcnRjb2xfbGVuIC0gMSBdICkgeworICAgICAgICAgICAgY2FzZSA3OiAgICAgLyogaW5ldENpZHJSb3V0ZUlmSW5kZXggKi8KKyAgICAgICAgICAgICAgICBycC0+aWZOdW1iZXIgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0lGTk87CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDg6ICAgICAvKiBpbmV0Q2lkclJvdXRlVHlwZSAgICAqLworICAgICAgICAgICAgICAgIHJwLT50eXBlICAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfVFlQRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgOTogICAgIC8qIGluZXRDaWRyUm91dGVQcm90byAgICovCisgICAgICAgICAgICAgICAgcnAtPnByb3RvICAgICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9QUlRPOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxMDogICAgIC8qIGluZXRDaWRyUm91dGVBZ2UgICAqLworICAgICAgICAgICAgICAgIHJwLT5hZ2UgICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0FHRTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTE6ICAgICAvKiBpbmV0Q2lkclJvdXRlTmV4dEhvcEFTICAgKi8KKyAgICAgICAgICAgICAgICBycC0+YXMgICAgID0gKnZwLT52YWwuaW50ZWdlcjsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0FTOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxMjogICAgIC8qIGluZXRDaWRyUm91dGVNZXRyaWMxICAgKi8KKyAgICAgICAgICAgICAgICBycC0+bWV0cmljMSAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfTUVUMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAocnAtPnNldF9iaXRzICE9IFNFVF9BTEwpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOyAgIC8qIEluY29tcGxldGUgcXVlcnkgKi8KKyAgICAgICAgfQorICAgIAorICAgICAgICBpZiAoYWYgIT0gQUZfVU5TUEVDICYmIHJwLT5hZiAhPSBhZikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmIChoZHJfYWYgIT0gcnAtPmFmKSB7CisgICAgICAgICAgICBpZiAoaGRyX2FmICE9IEFGX1VOU1BFQykKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBoZHJfYWYgPSBycC0+YWY7CisgICAgICAgICAgICBwcl9ydHhoZHIoaGRyX2FmLCAiaW5ldENpZHJSb3V0ZVRhYmxlIik7CisgICAgICAgIH0KKyAgICAgICAgcF9ydG5vZGV4KCBycCApOworICAgICAgICBwcmludGVkKys7CisgICAgfQorICAgIHJldHVybiBwcmludGVkOworfQorCisvKgorICogQmFja3dhcmRzLWNvbXBhdGliaWxpdHkgZm9yIHRoZSBJUFY2LU1JQgorICovCitpbnQKK3JvdXRlNnByKGludCBhZikKK3sKKyAgICBzdHJ1Y3Qgcm91dGVfZW50cnkgIHJvdXRlLCAqcnAgPSAmcm91dGU7CisgICAgb2lkICAgIHJ0Y29sX29pZFtdICA9IHsgMSwzLDYsMSwyLDEsNTUsMSwxMSwxLDAgfTsgLyogaXB2NlJvdXRlRW50cnkgKi8KKyAgICBzaXplX3QgcnRjb2xfbGVuICAgID0gT0lEX0xFTkdUSCggcnRjb2xfb2lkICk7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIgPSBOVUxMLCAqdnA7CisgICAgaW50IHByaW50ZWQgPSAwOworICAgIGludCBoZHJfYWYgPSBBRl9VTlNQRUM7CisgICAgaW50IGk7CisKKyAgICBpZiAoYWYgIT0gQUZfVU5TUEVDICYmIGFmICE9IEFGX0lORVQ2KQorICAgICAgICByZXR1cm4gMDsKKworI2RlZmluZSBBRERfUlRWQVIoIHggKSBydGNvbF9vaWRbIHJ0Y29sX2xlbi0xIF0gPSB4OyBcCisgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSggJnZhciwgcnRjb2xfb2lkLCBydGNvbF9sZW4sIEFTTl9OVUxMLCBOVUxMLCAgMCkKKyAgICBBRERfUlRWQVIoIDQgKTsgICAgICAgICAgICAgICAgIC8qIGlwdjZSb3V0ZUlmSW5kZXggKi8KKyAgICBBRERfUlRWQVIoIDUgKTsgICAgICAgICAgICAgICAgIC8qIGlwdjZSb3V0ZU5leHRIb3AgKi8KKyAgICBBRERfUlRWQVIoIDYgKTsgICAgICAgICAgICAgICAgIC8qIGlwdjZSb3V0ZVR5cGUgICAgKi8KKyAgICBBRERfUlRWQVIoIDcgKTsgICAgICAgICAgICAgICAgIC8qIGlwdjZSb3V0ZVByb3RvICAgKi8KKyAgICBBRERfUlRWQVIoIDExICk7ICAgICAgICAgICAgICAgIC8qIGlwdjZSb3V0ZU1ldHJpYyAgKi8KKyAgICBBRERfUlRWQVIoIDE0ICk7ICAgICAgICAgICAgICAgIC8qIGlwdjZSb3V0ZVZhbGlkICAgKi8KKyN1bmRlZiBBRERfUlRWQVIKKworICAgIC8qCisgICAgICogTm93IHdhbGsgdGhlIGlwdjZSb3V0ZVRhYmxlLCByZXBvcnRpbmcgdGhlIHZhcmlvdXMgcm91dGUgZW50cmllcworICAgICAqLworICAgIHdoaWxlICggMSApIHsKKyAgICAgICAgb2lkICpvcDsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqY3AsICpjcDE7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSZyb3V0ZS5kc3Q7CisKKyAgICAgICAgaWYgKG5ldHNubXBfcXVlcnlfZ2V0bmV4dCggdmFyLCBzcyApICE9IFNOTVBfRVJSX05PRVJST1IpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgcnRjb2xfb2lkWyBydGNvbF9sZW4tMSBdID0gNDsgICAgICAgIC8qIGlwdjZSb3V0ZUlmSW5kZXggKi8KKyAgICAgICAgaWYgKCBzbm1wX29pZF9jb21wYXJlKCBydGNvbF9vaWQsIHJ0Y29sX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWUsIHJ0Y29sX2xlbikgIT0gMCApCisgICAgICAgICAgICBicmVhazsgICAgLyogRW5kIG9mIFRhYmxlICovCisgICAgICAgIGlmICh2YXItPnR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QgfHwKKyAgICAgICAgICAgICAgICB2YXItPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSB8fAorICAgICAgICAgICAgICAgIHZhci0+dHlwZSA9PSBTTk1QX0VORE9GTUlCVklFVykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBtZW1zZXQoICZyb3V0ZSwgMCwgc2l6ZW9mKCBzdHJ1Y3Qgcm91dGVfZW50cnkgKSk7CisgICAgICAgIHJwLT5hZiA9IEFGX0lORVQ2OworICAgICAgICBzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBvcCA9IHZhci0+bmFtZStydGNvbF9sZW47CisgICAgICAgIGNwID0gKHVuc2lnbmVkIGNoYXIgKikmc2luNi0+c2luNl9hZGRyOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgKmNwKysgPSAqb3ArKzsKKyAgICAgICAgcm91dGUubWFzayA9ICpvcCsrOworCisgICAgICAgIGZvciAoIHZwPXZhcjsgdnA7IHZwPXZwLT5uZXh0X3ZhcmlhYmxlICkgeworICAgICAgICAgICAgc3dpdGNoICggdnAtPm5hbWVbIHJ0Y29sX2xlbiAtIDEgXSApIHsKKyAgICAgICAgICAgIGNhc2UgNDogICAgIC8qIGlwdjZSb3V0ZUlmSW5kZXggICovCisgICAgICAgICAgICAgICAgcnAtPmlmTnVtYmVyICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGlzIGlzLCB0ZWNobmljYWxseSwgYW4gSXB2NklmSW5kZXgsIHdoaWNoCisgICAgICAgICAgICAgICAgICogY291bGQgbWF5YmUgYmUgZGlmZmVyZW50IHRoYW4gdGhlIElmSW5kZXgKKyAgICAgICAgICAgICAgICAgKiBmb3IgdGhlIHNhbWUgaW50ZXJmYWNlLiAgV2UgaWdub3JlIHRoaXMKKyAgICAgICAgICAgICAgICAgKiBwb3NzaWJpbGl0eSBmb3Igbm93LCBpbiB0aGUgaG9wZXMgdGhhdAorICAgICAgICAgICAgICAgICAqIG5vYm9keSBhY3R1YWxseSBhbGxvY2F0ZXMgdGhlc2UgbnVtYmVycworICAgICAgICAgICAgICAgICAqIGRpZmZlcmVudGx5LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfSUZOTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgNTogICAgIC8qIGlwdjZSb3V0ZU5leHRIb3AgICovCisgICAgICAgICAgICAgICAgY3AxID0gKHVuc2lnbmVkIGNoYXIgKil2cC0+dmFsLnN0cmluZzsKKyAgICAgICAgICAgICAgICBzaW42ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikmcnAtPmhvcDsKKyAgICAgICAgICAgICAgICBzaW42LT5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgICAgICAgIGNwID0gKHVuc2lnbmVkIGNoYXIgKikmc2luNi0+c2luNl9hZGRyOworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSAqY3ArKyA9ICpjcDErKzsKKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0hPUDsKKyAgICAgICAgICAgIGNhc2UgNjogICAgIC8qIGlwdjZSb3V0ZVR5cGUgICAgICovCisgICAgICAgICAgICAgICAgcnAtPnR5cGUgICAgICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgLyogVGhpcyBlbnVtIG1hcHMgdG8gc2ltaWxhciB2YWx1ZXMgaW4gaW5ldENpZHJSb3V0ZVR5cGUgKi8KKyAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX1RZUEU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDc6ICAgICAvKiBpcHY2Um91dGVQcm90b2NvbCAqLworICAgICAgICAgICAgICAgIHJwLT5wcm90byAgICAgPSAqdnAtPnZhbC5pbnRlZ2VyOworICAgICAgICAgICAgICAgIC8qIFRPRE86IHRoaXMgZG9lcyBub3QgbWFwIGRpcmVjdGx5IHRvIHRoZQorICAgICAgICAgICAgICAgICAqIGluZXRDaWRyUm91dGVQcm90b2NvbCB2YWx1ZXMuICBJZiB3ZSB1c2UKKyAgICAgICAgICAgICAgICAgKiBycC0+cHJvdG8gbW9yZSwgd2Ugd2lsbCBoYXZlIHRvIG1hbmFnZSB0aGlzLiAqLworICAgICAgICAgICAgICAgIHJwLT5zZXRfYml0cyB8PSBTRVRfUFJUTzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgMTE6ICAgIC8qIGlwdjZSb3V0ZU1ldHJpYyAgICovCisgICAgICAgICAgICAgICAgcnAtPm1ldHJpYzEgICA9ICp2cC0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgcnAtPnNldF9iaXRzIHw9IFNFVF9NRVQxOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSAxNDogICAgLyogaXB2NlJvdXRlVmFsaWQgICAgKi8KKyAgICAgICAgICAgICAgICBpZiAoKnZwLT52YWwuaW50ZWdlciA9PSAyKQorICAgICAgICAgICAgICAgICAgICBycC0+c2V0X2JpdHMgfD0gU0VUX0lOVkFMSUQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJwLT5zZXRfYml0cyAhPSBTRVRfQUxMNikgeworICAgICAgICAgICAgY29udGludWU7ICAgLyogSW5jb21wbGV0ZSBxdWVyeSAqLworICAgICAgICB9CisgICAgCisgICAgICAgIGlmIChoZHJfYWYgIT0gcnAtPmFmKSB7CisgICAgICAgICAgICBpZiAoaGRyX2FmICE9IEFGX1VOU1BFQykKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuIik7CisgICAgICAgICAgICBoZHJfYWYgPSBycC0+YWY7CisgICAgICAgICAgICBwcl9ydHhoZHIoQUZfSU5FVDYsICJpcDZSb3V0ZVRhYmxlIik7CisgICAgICAgIH0KKyAgICAgICAgcF9ydG5vZGV4KCBycCApOworICAgICAgICBwcmludGVkKys7CisgICAgfQorICAgIHJldHVybiBwcmludGVkOworfQorCisKKy8qIGNvbHVtbiB3aWR0aHM7IGVhY2ggZm9sbG93ZWQgYnkgb25lIHNwYWNlICovCisjaWZuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKyNkZWZpbmUgICAgICAgIFdJRF9EU1QoYWYpICAgICAgICAyNiAgICAgICAgLyogd2lkdGggb2YgZGVzdGluYXRpb24gY29sdW1uICovCisjZGVmaW5lICAgICAgICBXSURfR1coYWYpICAgICAgICAxOCAgICAgICAgLyogd2lkdGggb2YgZ2F0ZXdheSBjb2x1bW4gKi8KKyNlbHNlCisvKiB3aWR0aCBvZiBkZXN0aW5hdGlvbi9nYXRld2F5IGNvbHVtbiAqLworLyogc3RybGVuKCJmZTgwOjphYWFhOmJiYmI6Y2NjYzpkZGRkQGdpZjAiKSA9PSAzMCwgc3RybGVuKCIvMTI4IikgPT0gNCAqLworI2RlZmluZSAgICAgICAgV0lEX0RTVChhZikgICAgICAgICgoYWYpID09IEFGX0lORVQ2ID8gKG5mbGFnID8gMzQgOiAyNikgOiAyNikKKyNkZWZpbmUgICAgICAgIFdJRF9HVyhhZikgICAgICAgICgoYWYpID09IEFGX0lORVQ2ID8gKG5mbGFnID8gMzkgOiAyNikgOiAyNikKKyNlbmRpZiAvKiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisKKy8qCisgKiBQcmludCBoZWFkZXIgZm9yIHJvdXRpbmcgdGFibGUgY29sdW1ucy4KKyAqLworc3RhdGljIHZvaWQKK3ByX3J0eGhkcihpbnQgYWYsIGNvbnN0IGNoYXIgKnRhYmxlKQoreworICAgIHN3aXRjaCAoYWYpIHsKKyAgICBjYXNlIEFGX0lORVQ6CisJcHJpbnRmKCJJUHY0IFJvdXRpbmcgdGFibGVzIChpbmV0Q2lkclJvdXRlVGFibGUpXG4iKTsKKwlicmVhazsKKyAgICBjYXNlIEFGX0lORVQ2OgorCXByaW50ZigiSVB2NiBSb3V0aW5nIHRhYmxlcyAoJXMpXG4iLCB0YWJsZSk7CisJYnJlYWs7CisgICAgfQorICAgIHByaW50ZigiJS0qLipzICIsCisJV0lEX0RTVChhZiksIFdJRF9EU1QoYWYpLCAiRGVzdGluYXRpb24iKTsKKyAgICBwcmludGYoIiUtKi4qcyAlLTYuNnMgICVzXG4iLAorCVdJRF9HVyhhZiksIFdJRF9HVyhhZiksICJHYXRld2F5IiwKKwkiRmxhZ3MiLCAiSW50ZXJmYWNlIik7Cit9CisKKyNpZm5kZWYgSEFWRV9JTkVUX05UT1AKKy8qIE1TVkMgYW5kIE1pbkdXICovCisjZGVmaW5lIGluZXRfbnRvcCBuZXRzbm1wX2luZXRfbnRvcAorc3RhdGljIGNvbnN0IGNoYXIgKgorbmV0c25tcF9pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisgICAgRFdPUkQgb3V0X2xlbiA9IHNpemU7CisKKyAgICBzd2l0Y2ggKGFmKSB7CisgICAgY2FzZSBBRl9JTkVUOgorCXsKKwkgICAgc3RydWN0IHNvY2thZGRyX2luIGluOworCisJICAgIG1lbXNldCgmaW4sIDAsIHNpemVvZihpbikpOworCSAgICBpbi5zaW5fZmFtaWx5ID0gYWY7CisJICAgIG1lbWNweSgmaW4uc2luX2FkZHIsIHNyYywgNCk7CisJICAgIGlmIChXU0FBZGRyZXNzVG9TdHJpbmcoKHN0cnVjdCBzb2NrYWRkciAqKSZpbiwgc2l6ZW9mKGluKSwgTlVMTCwgZHN0LAorCQkJCSAgICZvdXRfbGVuKSA9PSAwKQorCQlyZXR1cm4gZHN0OworCX0KKwlicmVhazsKKyAgICBjYXNlIEFGX0lORVQ2OgorCXsKKwkgICAgc3RydWN0IHNvY2thZGRyX2luNiBpbjY7CisKKwkgICAgbWVtc2V0KCZpbjYsIDAsIHNpemVvZihpbjYpKTsKKwkgICAgaW42LnNpbjZfZmFtaWx5ID0gYWY7CisJICAgIG1lbWNweSgmaW42LnNpbjZfYWRkciwgc3JjLCAxNik7CisJICAgIGlmIChXU0FBZGRyZXNzVG9TdHJpbmcoKHN0cnVjdCBzb2NrYWRkciAqKSZpbjYsIHNpemVvZihpbjYpLCBOVUxMLCBkc3QsCisJCQkJICAgJm91dF9sZW4pID09IDApCisJCXJldHVybiBkc3Q7CisJfQorCWJyZWFrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisvKgorICogUmV0dXJuIHRoZSBuYW1lIG9mIHRoZSBuZXR3b3JrIHdob3NlIGFkZHJlc3MgaXMgZ2l2ZW4uCisgKiBUaGUgYWRkcmVzcyBpcyBhc3N1bWVkIHRvIGJlIHRoYXQgb2YgYSBuZXQgb3Igc3VibmV0LCBub3QgYSBob3N0LgorICovCitzdGF0aWMgY2hhciAqCituZXR4bmFtZShzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaW4sIGludCBtYXNrKQoreworICAgIHN0YXRpYyBjaGFyIGhvc3RbTUFYSE9TVE5BTUVMRU5dOworICAgIHN0YXRpYyBjaGFyIGxpbmVbTUFYSE9TVE5BTUVMRU5dOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWluOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWluOworCisgICAgc3dpdGNoIChpbi0+c3NfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICBpbmV0X250b3AoaW4tPnNzX2ZhbWlseSwgJnNpbi0+c2luX2FkZHIsIGhvc3QsIHNpemVvZihob3N0KSk7CisgICAgICAgIGlmIChtYXNrID09IDMyKSBzdHJjcHkobGluZSwgaG9zdCk7CisgICAgICAgIGVsc2Ugc25wcmludGYobGluZSwgc2l6ZW9mKGxpbmUpLCAiJXMvJWQiLCBob3N0LCBtYXNrKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgaW5ldF9udG9wKGluLT5zc19mYW1pbHksICZzaW42LT5zaW42X2FkZHIsIGhvc3QsIHNpemVvZihob3N0KSk7CisgICAgICAgIGlmIChtYXNrID09IDEyOCkgc3RyY3B5KGxpbmUsIGhvc3QpOworICAgICAgICBlbHNlIHNucHJpbnRmKGxpbmUsIHNpemVvZihsaW5lKSwgIiVzLyVkIiwgaG9zdCwgbWFzayk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gbGluZTsKK30KKworc3RhdGljIGNoYXIgKgorcm91dGV4bmFtZShzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqaW4pCit7CisgICAgY2hhciAqY3A7CisgICAgc3RhdGljIGNoYXIgbGluZVtNQVhIT1NUTkFNRUxFTl07CisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciBkb21haW5bTUFYSE9TVE5BTUVMRU5dOworICAgIHN0YXRpYyBpbnQgZmlyc3QgPSAxOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWluOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKWluOworCisgICAgaWYgKGZpcnN0KSB7CisgICAgICAgIGZpcnN0ID0gMDsKKyAgICAgICAgaWYgKGdldGhvc3RuYW1lKGxpbmUsIHNpemVvZiBsaW5lKSA9PSAwICYmCisgICAgICAgICAgICAoY3AgPSBzdHJjaHIobGluZSwgJy4nKSkpCisgICAgICAgICAgICAodm9pZCkgc3RybGNweShkb21haW4sIGNwICsgMSwgc2l6ZW9mIGRvbWFpbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGRvbWFpblswXSA9ICdcMCc7CisgICAgfQorICAgIGNwID0gTlVMTDsKKyAgICBpZiAoIW5mbGFnKSB7CisgICAgICAgIHN3aXRjaCAoaW4tPnNzX2ZhbWlseSkgeworICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICBocCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigmc2luLT5zaW5fYWRkciwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mIChzdHJ1Y3QgaW5fYWRkciksIEFGX0lORVQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICBocCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigmc2luNi0+c2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YgKHN0cnVjdCBpbjZfYWRkciksIEFGX0lORVQ2KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlmIChocCkgeworICAgICAgICAgICAgaWYgKChjcCA9IHN0cmNocihocC0+aF9uYW1lLCAnLicpKSAmJiAhc3RyY21wKGNwICsgMSwgZG9tYWluKSkKKyAgICAgICAgICAgICAgICAqY3AgPSAnXDAnOworICAgICAgICAgICAgY3AgPSBocC0+aF9uYW1lOworICAgICAgICB9CisgICAgfQorICAgIGlmIChjcCkgeworICAgICAgICBzdHJsY3B5KGxpbmUsIGNwLCBzaXplb2YobGluZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN3aXRjaCAoaW4tPnNzX2ZhbWlseSkgeworICAgICAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgICAgICBpbmV0X250b3Aoc2luLT5zaW5fZmFtaWx5LCAmc2luLT5zaW5fYWRkciwgbGluZSwgc2l6ZW9mKGxpbmUpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICAgICAgaW5ldF9udG9wKHNpbjYtPnNpbjZfZmFtaWx5LCAmc2luNi0+c2luNl9hZGRyLCBsaW5lLCBzaXplb2YobGluZSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIChsaW5lKTsKK30KKworCitzdGF0aWMgY2hhciAqCitzX3J0ZmxhZ3N4KCBzdHJ1Y3Qgcm91dGVfZW50cnkgKnJwICkKK3sKKyAgICBzdGF0aWMgY2hhciBmbGFnX2J1ZlsxMF07CisgICAgY2hhciAgKmNwID0gZmxhZ19idWY7CisKKyAgICAqY3ArKyA9ICc8JzsKKyAgICAqY3ArKyA9ICdVJzsgICAvKiByb3V0ZSBpcyBpbiB1c2UgKi8KKyAgICBpZiAoKHJwLT5hZiA9PSBBRl9JTkVUICYmIHJwLT5tYXNrID09IDMyKSB8fAorICAgICAgICAgICAgKHJwLT5hZiA9PSBBRl9JTkVUNiAmJiBycC0+bWFzayA9PSAxMjgpKQorICAgICAgICAqY3ArKyA9ICdIJzsgICAvKiBob3N0ICovCisgICAgaWYgKHJwLT5wcm90byA9PSA0KQorICAgICAgICAqY3ArKyA9ICdEJzsgICAvKiBJQ01QIHJlZGlyZWN0ICovCisgICAgaWYgKHJwLT50eXBlICA9PSA0KQorICAgICAgICAqY3ArKyA9ICdHJzsgICAvKiByZW1vdGUgZGVzdGluYXRpb24vbmV0ICovCisgICAgKmNwKysgPSAnPic7CisgICAgKmNwID0gMDsKKyAgICByZXR1cm4gZmxhZ19idWY7Cit9CisKK3N0YXRpYyB2b2lkCitwX3J0bm9kZXgoIHN0cnVjdCByb3V0ZV9lbnRyeSAqcnAgKQoreworICAgIGdldF9pZm5hbWUocnAtPmlmbmFtZSwgcnAtPmlmTnVtYmVyKTsKKyAgICBpZiAocnAtPmFmID09IEFGX0lORVQpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICpzaW4gPSAoc3RydWN0IHNvY2thZGRyX2luICopJnJwLT5kc3Q7CisgICAgICAgIHByaW50ZigiJS0qcyAiLAorICAgICAgICAgICAgV0lEX0RTVChBRl9JTkVUKSwKKyAgICAgICAgICAgICAgICAoc2luLT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSkgPyAiZGVmYXVsdCIgOgorICAgICAgICAgICAgICAgIChycC0+bWFzayA9PSAzMiA/CisgICAgICAgICAgICAgICAgICAgIHJvdXRleG5hbWUoJnJwLT5kc3QpIDoKKyAgICAgICAgICAgICAgICAgICAgbmV0eG5hbWUoJnJwLT5kc3QsIHJwLT5tYXNrKSkpOworICAgIH0KKyAgICBlbHNlIGlmIChycC0+YWYgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAqc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopJnJwLT5kc3Q7CisgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpbjZfYWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOworICAgICAgICBwcmludGYoIiUtKnMgIiwKKyAgICAgICAgICAgIFdJRF9EU1QoQUZfSU5FVDYpLAorICAgICAgICAgICAgICAgIG1lbWNtcCgmc2luNi0+c2luNl9hZGRyLCAmaW42X2FkZHJfYW55LCBzaXplb2YoaW42X2FkZHJfYW55KSkgPT0gMCA/ICJkZWZhdWx0IiA6CisgICAgICAgICAgICAgICAgKHJwLT5tYXNrID09IDEyOCA/CisgICAgICAgICAgICAgICAgICAgIHJvdXRleG5hbWUoJnJwLT5kc3QpIDoKKyAgICAgICAgICAgICAgICAgICAgbmV0eG5hbWUoJnJwLT5kc3QsIHJwLT5tYXNrKSkpOworICAgIH0KKyAgICBwcmludGYoIiUtKnMgJS02LjZzICAlcyIsCisgICAgICAgIFdJRF9HVyhycC0+YWYpLAorICAgICAgICAxID8gcm91dGV4bmFtZSgmcnAtPmhvcCkgOiAiKiIsCisgICAgICAgIHNfcnRmbGFnc3gocnApLCBycC0+aWZuYW1lKTsKKyAgICBpZiAoKHJwLT5zZXRfYml0cyAmIFNFVF9BUykgJiYgcnAtPmFzICE9IDApCisgICAgICAgIHByaW50ZigiIChBUyAlZCkiLCBycC0+YXMpOworICAgIHByaW50ZigiXG4iKTsKK30KZGlmZiAtLWdpdCBhL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5jIGIvYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmMKaW5kZXggZmZkNTk2Ni4uNWUyZGQ2NCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmMKKysrIGIvYXBwcy9zbm1wbmV0c3RhdC93aW5zdHViLmMKQEAgLTI1LDkgKzI1LDYgQEAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCmRpZmYgLS1naXQgYS9hcHBzL3NubXBuZXRzdGF0L3dpbnN0dWIuaCBiL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5oCmluZGV4IGVhNDA0NTAuLjhmYzUxZGQgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5oCisrKyBiL2FwcHMvc25tcG5ldHN0YXQvd2luc3R1Yi5oCkBAIC0yLDYgKzIsOCBAQAogI2lmbmRlZiBfV0lOU1RVQl9IXwogI2RlZmluZSBfV0lOU1RVQl9IXwogCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKwogI2lmIChkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKGN5Z3dpbikpCiAKIC8qCmRpZmYgLS1naXQgYS9hcHBzL3NubXBzZXQuYyBiL2FwcHMvc25tcHNldC5jCmluZGV4IGZhZWRhOTUuLjFiMjlhNmMgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHNldC5jCisrKyBiL2FwcHMvc25tcHNldC5jCkBAIC00MywxMSArNDMsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU5LDkgKzU1LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTQyLDkgKzEzNSwxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wc3RhdHVzLmMgYi9hcHBzL3NubXBzdGF0dXMuYwppbmRleCBhZTA4MzY5Li4wNDQzYzRkIDEwMDY0NAotLS0gYS9hcHBzL3NubXBzdGF0dXMuYworKysgYi9hcHBzL3NubXBzdGF0dXMuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCi0gKiBzbm1wc3RhdHVzLmMgLSBzZW5kIHNubXAgR0VUIHJlcXVlc3RzIHRvIGEgbmV0d29yayBlbnRpdHkuCisgKiBzbm1wc3RhdHVzLmMgLSByZXRyaWV2ZXMgYSBmaXhlZCBzZXQgb2YgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiBmcm9tCisgKiBhIG5ldHdvcmsgZW50aXR5LgogICoKICAqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC00MywxMSArNDQsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTU5LDkgKzU2LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTU5LDkgKzE1MywxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsICZvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHRhYmxlLmMgYi9hcHBzL3NubXB0YWJsZS5jCmluZGV4IDM5NzBlOTcuLmM5YzdkMjYgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRhYmxlLmMKKysrIGIvYXBwcy9zbm1wdGFibGUuYwpAQCAtNDMsMTEgKzQzLDcgQEAKICMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02MCw5ICs1Niw2IEBACiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTIwOCw2ICsyMDEsNyBAQAogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBvcHRpb24gYWZ0ZXIgLUM6ICVjXG4iLCBvcHRhcmdbLTFdKTsKICAgICAgICAgICAgICAgICB1c2FnZSgpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0yNTYsNyArMjUwLDggQEAKICAgICBuZXRzbm1wX3Nlc3Npb24gc2Vzc2lvbiwgKnNzOwogICAgIGludCAgICAgICAgICAgIHRvdGFsX2VudHJpZXMgPSAwOwogCi0gICAgc2V0dmJ1ZihzdGRvdXQsIE5VTEwsIF9JT0xCRiwgMTAyNCk7CisgICAgbmV0c25tcF9zZXRfbGluZV9idWZmZXJpbmcoc3Rkb3V0KTsKKwogICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCAxKTsKIApAQCAtMjY0LDkgKzI1OSwxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpAQCAtNjY5LDcgKzY2Niw3IEBACiAgICAgICAgICAgICAgICAgICAgIGNvbCsrOwogICAgICAgICAgICAgICAgICAgICBuYW1lW3Jvb3RsZW5dID0gY29sdW1uW2NvbF0uc3ViaWQ7CiAgICAgICAgICAgICAgICAgICAgIGlmICgodmFycy0+bmFtZV9sZW5ndGggPCBuYW1lX2xlbmd0aCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICgoaW50KSB2YXJzLT5uYW1lW3Jvb3RsZW5dICE9IGNvbHVtbltjb2xdLnN1YmlkKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgKHZhcnMtPm5hbWVbcm9vdGxlbl0gIT0gY29sdW1uW2NvbF0uc3ViaWQpIHx8CiAgICAgICAgICAgICAgICAgICAgICAgICBtZW1jbXAobmFtZSwgdmFycy0+bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKSAhPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJzLT50eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKSB7CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0ZXN0LmMgYi9hcHBzL3NubXB0ZXN0LmMKaW5kZXggNDk5YmFjZi4uMjRkZTQ3YiAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wdGVzdC5jCisrKyBiL2FwcHMvc25tcHRlc3QuYwpAQCAtNDUsMTEgKzQ1LDcgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC02MSw5ICs1Nyw2IEBACiAjaWYgSEFWRV9TWVNfU0VMRUNUX0gKICNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTEwMiw5ICs5NSwxMSBAQAogICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCiAgICAgICovCiAgICAgc3dpdGNoIChzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sIE5VTEwsIE5VTEwpKSB7Ci0gICAgY2FzZSAtMjoKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUjoKKyAgICAgICAgZXhpdCgxKTsKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQ6CiAgICAgICAgIGV4aXQoMCk7Ci0gICAgY2FzZSAtMToKKyAgICBjYXNlIE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRToKICAgICAgICAgdXNhZ2UoKTsKICAgICAgICAgZXhpdCgxKTsKICAgICBkZWZhdWx0OgpAQCAtMTI3LDcgKzEyMiw3IEBACiAgICAgfQogCiAgICAgdmFyY291bnQgPSAwOwotICAgIHdoaWxlICgxKSB7CisgICAgZm9yKDs7KSB7CiAgICAgICAgIHZhcnMgPSBOVUxMOwogICAgICAgICBmb3IgKHJldCA9IDE7IHJldCAhPSAwOykgewogICAgICAgICAgICAgdnAgPSAobmV0c25tcF92YXJpYWJsZV9saXN0ICopCkBAIC0xNjgsNyArMTYzLDExIEBACiAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIldoYXQgcmVwZWF0IGNvdW50PyAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZmdldHMoaW5wdXQsIHNpemVvZihpbnB1dCksIHN0ZGluKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ZigiUXVpdHRpbmcsICBHb29kYnllXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIG1heFJlcGV0aXRpb25zID0gYXRvaShpbnB1dCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPm5vbl9yZXBlYXRlcnMgPSBub25SZXBlYXRlcnM7CiAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPm1heF9yZXBldGl0aW9ucyA9IG1heFJlcGV0aXRpb25zOwpAQCAtMjExLDkgKzIxMCwxMSBAQAogICAgICAgICAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWNlaXZlZCBHZXQgUmVzcG9uc2UgIik7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgU05NUF9NU0dfU0VUOgogICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJSZWNlaXZlZCBTZXQgUmVxdWVzdCAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgICAgICAgICAgICAgICAgICBjYXNlIFNOTVBfTVNHX1RSQVA6CiAgICAgICAgICAgICAgICAgICAgICAgICBwcmludGYoIlJlY2VpdmVkIFRyYXAgUmVxdWVzdCAiKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjc3LDggKzI3OCw3IEBACiAgICAgICAgIHZhcmNvdW50ID0gMDsKICAgICAgICAgbm9uUmVwZWF0ZXJzID0gLTE7CiAgICAgfQotICAgIFNPQ0tfQ0xFQU5VUDsKLSAgICByZXR1cm4gMDsKKyAgICAvKiBOT1RSRUFDSEVEICovCiB9CiAKIGludApAQCAtMjg2LDggKzI4Niw3IEBACiB7CiAgICAgY2hhciAgICAgICAgICAgIGJ1ZlsyNTZdOwogICAgIHNpemVfdCAgICAgICAgICB2YWxfbGVuOwotICAgIHVfY2hhciAgICAgICAgICB2YWx1ZVsyNTZdLCBjaDsKLSAgICBvaWQgICAgICAgICAgICAgbmFtZVtNQVhfT0lEX0xFTl07CisgICAgdV9jaGFyICAgICAgICAgIGNoOwogCiAgICAgcHJpbnRmKCJWYXJpYWJsZTogIik7CiAgICAgZmZsdXNoKHN0ZG91dCk7CkBAIC0zMDUsNyArMzA0LDcgQEAKICAgICBpZiAoYnVmW3ZhbF9sZW4gLSAxXSA9PSAnXG4nKQogICAgICAgICBidWZbLS12YWxfbGVuXSA9IDA7CiAgICAgaWYgKCpidWYgPT0gJyQnKSB7Ci0gICAgICAgIHN3aXRjaCAodG91cHBlcihidWZbMV0pKSB7CisgICAgICAgIHN3aXRjaCAodG91cHBlcigodW5zaWduZWQgY2hhcikoYnVmWzFdKSkpIHsKICAgICAgICAgY2FzZSAnRyc6CiAgICAgICAgICAgICBjb21tYW5kID0gU05NUF9NU0dfR0VUOwogICAgICAgICAgICAgcHJpbnRmKCJSZXF1ZXN0IHR5cGUgaXMgR2V0IFJlcXVlc3RcbiIpOwpAQCAtMzE0LDEwICszMTMsMTIgQEAKICAgICAgICAgICAgIGNvbW1hbmQgPSBTTk1QX01TR19HRVRORVhUOwogICAgICAgICAgICAgcHJpbnRmKCJSZXF1ZXN0IHR5cGUgaXMgR2V0bmV4dCBSZXF1ZXN0XG4iKTsKICAgICAgICAgICAgIGJyZWFrOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgY2FzZSAnUyc6CiAgICAgICAgICAgICBjb21tYW5kID0gU05NUF9NU0dfU0VUOwogICAgICAgICAgICAgcHJpbnRmKCJSZXF1ZXN0IHR5cGUgaXMgU2V0IFJlcXVlc3RcbiIpOwogICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgICAgIGNhc2UgJ0InOgogICAgICAgICAgICAgY29tbWFuZCA9IFNOTVBfTVNHX0dFVEJVTEs7CiAgICAgICAgICAgICBwcmludGYoIlJlcXVlc3QgdHlwZSBpcyBCdWxrIFJlcXVlc3RcbiIpOwpAQCAtMzM2LDE2ICszMzcsMTkgQEAKICAgICAgICAgICAgIHByaW50ZigiKEFyZSB5b3Ugc2VuZGluZyB0byB0aGUgcmlnaHQgcG9ydD8pXG4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlICdEJzoKLSAgICAgICAgICAgIGlmIChzbm1wX2dldF9kdW1wX3BhY2tldCgpKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9zZXRfZHVtcF9wYWNrZXQoMCk7CisgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQpKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQsIDApOwogICAgICAgICAgICAgICAgIHByaW50ZigiVHVybmVkIHBhY2tldCBkdW1wIG9mZlxuIik7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNubXBfc2V0X2R1bXBfcGFja2V0KDEpOworICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULCAxKTsKICAgICAgICAgICAgICAgICBwcmludGYoIlR1cm5lZCBwYWNrZXQgZHVtcCBvblxuIik7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSAnUSc6Ci0gICAgICAgICAgICBzd2l0Y2ggKCh0b3VwcGVyKGJ1ZlsyXSkpKSB7CisgICAgICAgICAgICBzd2l0Y2ggKCh0b3VwcGVyKCh1bnNpZ25lZCBjaGFyKShidWZbMl0pKSkpIHsKICAgICAgICAgICAgIGNhc2UgJ1xuJzoKICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICBwcmludGYoIlF1aXR0aW5nLCAgR29vZGJ5ZVxuIik7CkBAIC0zNTMsMTEgKzM1NywxNCBAQAogICAgICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdQJzoKLSAgICAgICAgICAgICAgICBpZiAoc25tcF9nZXRfcXVpY2tfcHJpbnQoKSkgewotICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF9xdWlja19wcmludCgwKTsKKyAgICAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5UKSkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQsIDApOwogICAgICAgICAgICAgICAgICAgICBwcmludGYoIlR1cm5lZCBxdWljayBwcmludGluZyBvZmZcbiIpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KDEpOworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQsIDEpOwogICAgICAgICAgICAgICAgICAgICBwcmludGYoIlR1cm5lZCBxdWljayBwcmludGluZyBvblxuIik7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzY4LDE5ICszNzUsMjkgQEAKICAgICAgICAgfQogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQotICAgIHZwLT5uYW1lX2xlbmd0aCA9IE1BWF9PSURfTEVOOwotICAgIGlmICghc25tcF9wYXJzZV9vaWQoYnVmLCBuYW1lLCAmdnAtPm5hbWVfbGVuZ3RoKSkgewotICAgICAgICBzbm1wX3BlcnJvcihidWYpOwotICAgICAgICByZXR1cm4gLTE7CisgICAgeworCW9pZCAgICAgbmFtZVtNQVhfT0lEX0xFTl07CisJdnAtPm5hbWVfbGVuZ3RoID0gTUFYX09JRF9MRU47CisJaWYgKCFzbm1wX3BhcnNlX29pZChidWYsIG5hbWUsICZ2cC0+bmFtZV9sZW5ndGgpKSB7CisJICAgIHNubXBfcGVycm9yKGJ1Zik7CisJICAgIHJldHVybiAtMTsKKwl9CisJdnAtPm5hbWUgPSBzbm1wX2R1cGxpY2F0ZV9vYmppZChuYW1lLCB2cC0+bmFtZV9sZW5ndGgpOwogICAgIH0KLSAgICB2cC0+bmFtZSA9IChvaWQgKikgbWFsbG9jKHZwLT5uYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKLSAgICBtZW1tb3ZlKHZwLT5uYW1lLCBuYW1lLCB2cC0+bmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CiAKLSAgICBpZiAoY29tbWFuZCA9PSBTTk1QX01TR19TRVQgfHwgY29tbWFuZCA9PSBTTk1QX01TR19JTkZPUk0KLSAgICAgICAgfHwgY29tbWFuZCA9PSBTTk1QX01TR19UUkFQMikgeworICAgIGlmIChjb21tYW5kID09IFNOTVBfTVNHX0lORk9STQorICAgICAgICB8fCBjb21tYW5kID09IFNOTVBfTVNHX1RSQVAyCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorICAgICAgICB8fCBjb21tYW5kID09IFNOTVBfTVNHX1NFVAorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworICAgICAgICApIHsKICAgICAgICAgcHJpbnRmKCJUeXBlIFtpfHV8c3x4fGR8bnxvfHR8YV06ICIpOwogICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICAgICAgZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pOworICAgICAgICBpZiAoIWZnZXRzKGJ1Ziwgc2l6ZW9mKGJ1ZiksIHN0ZGluKSkgeworICAgICAgICAgICAgcHJpbnRmKCJRdWl0dGluZywgIEdvb2RieWVcbiIpOworICAgICAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgfQogICAgICAgICBjaCA9ICpidWY7CiAgICAgICAgIHN3aXRjaCAoY2gpIHsKICAgICAgICAgY2FzZSAnaSc6CkBAIC00MTksNyArNDM2LDExIEBACiAgICAgICBnZXRWYWx1ZToKICAgICAgICAgcHJpbnRmKCJWYWx1ZTogIik7CiAgICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgICAgICBmZ2V0cyhidWYsIHNpemVvZihidWYpLCBzdGRpbik7CisgICAgICAgIGlmICghZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgc3RkaW4pKSB7CisgICAgICAgICAgICBwcmludGYoIlF1aXR0aW5nLCAgR29vZGJ5ZVxuIik7CisgICAgICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgICAgICBleGl0KDApOworICAgICAgICB9CiAgICAgICAgIHN3aXRjaCAodnAtPnR5cGUpIHsKICAgICAgICAgY2FzZSBBU05fSU5URUdFUjoKICAgICAgICAgICAgIHZwLT52YWwuaW50ZWdlciA9IChsb25nICopIG1hbGxvYyhzaXplb2YobG9uZykpOwpAQCAtNDgxLDE0ICs1MDIsMTYgQEAKICAgICAgICAgY2FzZSBBU05fT0JKRUNUX0lEOgogICAgICAgICAgICAgaWYgKCdcbicgPT0gYnVmW3N0cmxlbihidWYpIC0gMV0pCiAgICAgICAgICAgICAgICAgYnVmW3N0cmxlbihidWYpIC0gMV0gPSAnXDAnOwotICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBNQVhfT0lEX0xFTjs7Ci0gICAgICAgICAgICBpZiAoMCA9PSByZWFkX29iamlkKGJ1ZiwgKG9pZCAqKSB2YWx1ZSwgJnZwLT52YWxfbGVuKSkgewotICAgICAgICAgICAgICAgIHByaW50ZigiVW5yZWNvZ25pc2VkIE9JRCB2YWx1ZVxuIik7Ci0gICAgICAgICAgICAgICAgZ290byBnZXRWYWx1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHZwLT52YWxfbGVuICo9IHNpemVvZihvaWQpOwotICAgICAgICAgICAgdnAtPnZhbC5vYmppZCA9IChvaWQgKikgbWFsbG9jKHZwLT52YWxfbGVuKTsKLSAgICAgICAgICAgIG1lbW1vdmUodnAtPnZhbC5vYmppZCwgdmFsdWUsIHZwLT52YWxfbGVuKTsKKwkgICAgZWxzZSB7CisJCW9pZCB2YWx1ZVtNQVhfT0lEX0xFTl07CisJCXZwLT52YWxfbGVuID0gTUFYX09JRF9MRU47CisJCWlmICgwID09IHJlYWRfb2JqaWQoYnVmLCB2YWx1ZSwgJnZwLT52YWxfbGVuKSkgeworCQkgICAgcHJpbnRmKCJVbnJlY29nbmlzZWQgT0lEIHZhbHVlXG4iKTsKKwkJICAgIGdvdG8gZ2V0VmFsdWU7CisJCX0KKwkJdnAtPnZhbC5vYmppZCA9IHNubXBfZHVwbGljYXRlX29iamlkKHZhbHVlLCB2cC0+dmFsX2xlbik7CisJCXZwLT52YWxfbGVuICo9IHNpemVvZihvaWQpOworCSAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBU05fVElNRVRJQ0tTOgogICAgICAgICAgICAgdnAtPnZhbC5pbnRlZ2VyID0gKGxvbmcgKikgbWFsbG9jKHNpemVvZihsb25nKSk7CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0bHMuYyBiL2FwcHMvc25tcHRscy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0YzVmYmUKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL3NubXB0bHMuYwpAQCAtMCwwICsxLDU1OSBAQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJAorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorI3VuZGVmIE5FVFNOTVBfVVNFX0FTU0VSVAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodGxzX2ZpbmdlcnByaW50X2J1aWxkKQorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8b3BlbnNzbC94NTA5Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKworI2luY2x1ZGUgInRsc3RtLW1pYi5oIgorI2luY2x1ZGUgInRsc3RtLW1pYi9zbm1wVGxzdG1BZGRyVGFibGUvc25tcFRsc3RtQWRkclRhYmxlLmgiCisjaW5jbHVkZSAidGxzdG0tbWliL3NubXBUbHN0bVBhcmFtc1RhYmxlL3NubXBUbHN0bVBhcmFtc1RhYmxlLmgiCisjaW5jbHVkZSAidGxzdG0tbWliL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlL3NubXBUbHN0bUNlcnRUb1RTTlRhYmxlLmgiCisKKworCisvKgorI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0lEICAgICAgICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fRklOR0VSUFJJTlQgICAgICAgICAgICAgIDIKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9NQVBUWVBFICAgICAgICAgICAgICAgICAgMworI2RlZmluZSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEEgICAgICAgICAgICAgICAgICAgICA0CisjZGVmaW5lIENPTF9TTk1QVExTVE1DRVJUVE9UU05fU1RPUkFHRVRZUEUgICAgICAgICAgICAgIDUKKyNkZWZpbmUgQ09MX1NOTVBUTFNUTUNFUlRUT1RTTl9ST1dTVEFUVVMgICAgICAgICAgICAgICAgNgorKi8KK2NvbnN0IG9pZCBjZXJ0TnVtW10gPSB7IFNOTVBfVExTX1RNX0NFUlRfQ09VTlQgfTsKK2NvbnN0IG9pZCBjZXJ0Q2hnW10gPSB7IFNOTVBfVExTX1RNX0NFUlRfQ0hBTkdFRCB9OworY29uc3Qgb2lkIGNlcnRUYmxbXSA9IHsgU05NUF9UTFNfVE1fQ0VSVF9UQUJMRSB9OworCisvKgorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQgICAgMQorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TU1RPUkFHRVRZUEUgICAgMgorI2RlZmluZSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TUk9XU1RBVFVTICAgIDMKKyovCisKK2NvbnN0IG9pZCBwYXJhbXNOdW1bXSA9IHsgU05NUF9UTFNfVE1fUEFSQU1TX0NPVU5UIH07Citjb25zdCBvaWQgcGFyYW1zQ2hnW10gPSB7IFNOTVBfVExTX1RNX1BBUkFNU19DSEFOR0VEIH07Citjb25zdCBvaWQgcGFyYW1zVGJsW10gPSB7IFNOTVBfVExTX1RNX1BBUkFNU19UQUJMRSB9OworCitjb25zdCBvaWQgYWRkck51bVtdID0geyBTTk1QX1RMU19UTV9BRERSX0NPVU5UIH07Citjb25zdCBvaWQgYWRkckNoZ1tdID0geyBTTk1QX1RMU19UTV9BRERSX0NIQU5HRUQgfTsKK2NvbnN0IG9pZCBhZGRyVGJsW10gPSB7IFNOTVBfVExTX1RNX0FERFJfVEFCTEUgfTsKKworCitjb25zdCBvaWQgdGxzdG1DZXJ0U3BlY2lmaWVkW10gICAgID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCAxIH07Citjb25zdCBvaWQgdGxzdG1DZXJ0U0FOUkZDODIyTmFtZVtdID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCAyIH07Citjb25zdCBvaWQgdGxzdG1DZXJ0U0FORE5TTmFtZVtdICAgID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCAzIH07Citjb25zdCBvaWQgdGxzdG1DZXJ0U0FOSXBBZGRyZXNzW10gID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCA0IH07Citjb25zdCBvaWQgdGxzdG1DZXJ0U0FOQW55W10gICAgICAgID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCA1IH07Citjb25zdCBvaWQgdGxzdG1DZXJ0Q29tbW9uTmFtZVtdICAgID0geyBTTk1QX1RMU19UTV9CQVNFLCAxLCAxLCA2IH07CisKK2NvbnN0IG9pZCAqY2VydE1hcFR5cGVzW1RTTk1fdGxzdG1DZXJ0X01BWCArIDFdID0geworICAgIDAsIHRsc3RtQ2VydFNwZWNpZmllZCwgdGxzdG1DZXJ0U0FOUkZDODIyTmFtZSwgdGxzdG1DZXJ0U0FORE5TTmFtZSwKKyAgICB0bHN0bUNlcnRTQU5JcEFkZHJlc3MsIHRsc3RtQ2VydFNBTkFueSwgdGxzdG1DZXJ0Q29tbW9uTmFtZSB9OworCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiBjZXJ0IHJvd3MKKyAqCisgKi8KK25ldHNubXBfdmFyaWFibGVfbGlzdCAqCitjZXJ0X3Jvd19jcmVhdGUodWludDMyX3QgcHJpb3JpdHksIGludCBoYXNoX3R5cGUsIGNvbnN0IGNoYXIgKmZwLAorICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqbWFwX3R5cGUsIGludCBtYXBfdHlwZV9sZW4sIGNvbnN0IHVfY2hhciAqZGF0YSwKKyAgICAgICAgICAgICAgICBpbnQgZGF0YV9sZW4sIHVpbnQzMl90IHN0LCBpbnQgKnJvd19zdGF0dXNfaW5kZXgpCit7CisgICAgb2lkICAgICAgICAgICAgICAgICAgICBuYW1lW10gPSB7IFNOTVBfVExTX1RNX0NFUlRfVEFCTEUsIDEsIC0xLCAtMSB9OworICAgIGludCAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4gPSBPSURfTEVOR1RIKG5hbWUpLCBjb2xfcG9zID0gbmFtZV9sZW4gLSAyOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcnNfaW5kZXggPSA0OworICAgIHVfY2hhciAgICAgICAgICAgICAgICAgYmluX2ZwW1NOTVBfTUFYQlVGX1NNQUxMXSwgKmJpbl9mcF9wdHIgPSBiaW5fZnA7CisgICAgdV9pbnQgICAgICAgICAgICAgICAgICByczsKKyAgICBzaXplX3QgICAgICAgICAgICAgICAgIGJpbl9mcF9sZW47CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2bCA9IE5VTEwsICp2YjsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBmcCwgTlVMTCApOworCisgICAgREVCVUdNU0dUKCgiY2VydDpjcmVhdGUiLCAiY3JlYXRpbmcgdmFyYmluZHMgZm9yIHByaSAlZCwgZnAgJXNcbiIsIHByaW9yaXR5LAorICAgICAgICAgICAgICAgZnApKTsKKworICAgIGJpbl9mcF9sZW4gPSBzaXplb2YoYmluX2ZwKTsKKyAgICBuZXRzbm1wX3Rsc19maW5nZXJwcmludF9idWlsZChoYXNoX3R5cGUsIGZwLCAmYmluX2ZwX3B0ciwgJmJpbl9mcF9sZW4sIDApOworCisgICAgbmFtZVtuYW1lX2xlbi0xXSA9IHByaW9yaXR5OworICAgIG5hbWVbY29sX3Bvc10gPSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0ZJTkdFUlBSSU5UOworICAgIHZsID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYmluX2ZwLCBiaW5fZnBfbGVuKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2bCwgTlVMTCk7CisKKyAgICBpZiAobWFwX3R5cGVfbGVuICYmIG1hcF90eXBlKSB7CisgICAgICAgIG5hbWVbY29sX3Bvc10gPSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX01BUFRZUEU7CisgICAgICAgIHZiID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fT0JKRUNUX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFwX3R5cGUsIG1hcF90eXBlX2xlbiAqIHNpemVvZihvaWQpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdmIpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIGlmIChkYXRhKSB7CisgICAgICAgIG5hbWVbY29sX3Bvc10gPSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX0RBVEE7CisgICAgICAgIHZiID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmwsIG5hbWUsIG5hbWVfbGVuLCBBU05fT0NURVRfU1RSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YSwgZGF0YV9sZW4pOworICAgICAgICBpZiAoTlVMTCA9PSB2YikgeworICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmwpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICAtLXJzX2luZGV4OworCisgICAgaWYgKHN0KSB7CisgICAgICAgIG5hbWVbY29sX3Bvc10gPSBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFOworICAgICAgICB2YiA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3QsIHNpemVvZihzdCkpOworICAgICAgICBpZiAoTlVMTCA9PSB2YikgeworICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmwpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICAtLXJzX2luZGV4OworCisgICAgbmFtZVtjb2xfcG9zXSA9IENPTF9TTk1QVExTVE1DRVJUVE9UU05fUk9XU1RBVFVTOworICAgIHJzID0gUlNfQ1JFQVRFQU5ER087CisgICAgdmIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnMsIHNpemVvZihycykpOworICAgIGlmIChOVUxMID09IHZiKSB7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHJvd19zdGF0dXNfaW5kZXgpCisgICAgICAgICpyb3dfc3RhdHVzX2luZGV4ID0gcnNfaW5kZXg7CisKKyAgICByZXR1cm4gdmw7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHBhcmFtIHJvd3MKKyAqCisgKi8KK25ldHNubXBfdmFyaWFibGVfbGlzdCAqCitwYXJhbXNfcm93X2NyZWF0ZShjb25zdCBjaGFyICpwYXJhbV9uYW1lLCBpbnQgaGFzaF90eXBlLCBjb25zdCBjaGFyICpmcCwKKyAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHN0LCBpbnQgKnJvd19zdGF0dXNfaW5kZXgpCit7CisgICAgb2lkICAgICAgICAgICAgICAgICAgICBuYW1lW01BWF9PSURfTEVOXTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIG5hbWVfbGVuLCBjb2xfcG9zLCByc19pbmRleCA9IDI7CisgICAgdV9jaGFyICAgICAgICAgICAgICAgICBiaW5fZnBbU05NUF9NQVhCVUZfU01BTExdLCAqYmluX2ZwX3B0ciA9IGJpbl9mcDsKKyAgICB1X2ludCAgICAgICAgICAgICAgICAgIHJzOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgYmluX2ZwX2xlbjsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZsID0gTlVMTCwgKnZiOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHBhcmFtX25hbWUsIE5VTEwgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggZnAsIE5VTEwgKTsKKworICAgIERFQlVHTVNHVCgoInBhcmFtczpjcmVhdGUiLCAiY3JlYXRpbmcgdmFyYmluZHMgZm9yICVzIHBhcmFtcywgZnAgJXNcbiIsCisgICAgICAgICAgICAgICBwYXJhbV9uYW1lLCBmcCkpOworCisgICAgLyoKKyAgICAgKiBidWlsZCBiYXNlIG5hbWUKKyAgICAgKi8KKyAgICBuYW1lX2xlbiA9IE9JRF9MRU5HVEgocGFyYW1zVGJsKTsKKyAgICBtZW1jcHkobmFtZSwgcGFyYW1zVGJsLCBzaXplb2YocGFyYW1zVGJsKSk7CisgICAgbmFtZVtuYW1lX2xlbisrXSA9IDE7IC8qIGVudHJ5ICovCisgICAgY29sX3BvcyA9IG5hbWVfbGVuKys7IC8qIGNvbHVtbiAqLworICAgIHdoaWxlICgqcGFyYW1fbmFtZSkKKyAgICAgICAgbmFtZVtuYW1lX2xlbisrXSA9ICpwYXJhbV9uYW1lKys7CisKKyAgICBiaW5fZnBfbGVuID0gc2l6ZW9mKGJpbl9mcCk7CisgICAgbmV0c25tcF90bHNfZmluZ2VycHJpbnRfYnVpbGQoaGFzaF90eXBlLCBmcCwgJmJpbl9mcF9wdHIsICZiaW5fZnBfbGVuLCAwKTsKKworICAgIG5hbWVbY29sX3Bvc10gPSBDT0xVTU5fU05NUFRMU1RNUEFSQU1TQ0xJRU5URklOR0VSUFJJTlQ7CisgICAgdmwgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaW5fZnAsIGJpbl9mcF9sZW4pOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHZsLCBOVUxMKTsKKworICAgIGlmIChzdCkgeworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MVU1OX1NOTVBUTFNUTVBBUkFNU1NUT1JBR0VUWVBFOworICAgICAgICB2YiA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3QsIHNpemVvZihzdCkpOworICAgICAgICBpZiAoTlVMTCA9PSB2YikgeworICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmwpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICAtLXJzX2luZGV4OworCisgICAgbmFtZVtjb2xfcG9zXSA9IENPTFVNTl9TTk1QVExTVE1QQVJBTVNST1dTVEFUVVM7CisgICAgcnMgPSBSU19DUkVBVEVBTkRHTzsKKyAgICB2YiA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZycywgc2l6ZW9mKHJzKSk7CisgICAgaWYgKE5VTEwgPT0gdmIpIHsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmwpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAocm93X3N0YXR1c19pbmRleCkKKyAgICAgICAgKnJvd19zdGF0dXNfaW5kZXggPSByc19pbmRleDsKKworICAgIHJldHVybiB2bDsKK30KKworLyoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogYWRkciByb3dzCisgKgorICovCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorYWRkcl9yb3dfY3JlYXRlKGNvbnN0IGNoYXIgKnRhcmdldF9uYW1lLCBpbnQgaGFzaF90eXBlLCBjb25zdCBjaGFyICpmcCwKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZGVudGl0eSwgdWludDMyX3Qgc3QsIGludCAqcm93X3N0YXR1c19pbmRleCkKK3sKKyAgICBvaWQgICAgICAgICAgICAgICAgICAgIG5hbWVbTUFYX09JRF9MRU5dOworICAgIGludCAgICAgICAgICAgICAgICAgICAgbmFtZV9sZW4sIGNvbF9wb3MsIHJzX2luZGV4ID0gMzsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgIGJpbl9mcFtTTk1QX01BWEJVRl9TTUFMTF0sICpiaW5fZnBfcHRyID0gYmluX2ZwOworICAgIHVfaW50ICAgICAgICAgICAgICAgICAgcnM7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICBiaW5fZnBfbGVuOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmwgPSBOVUxMLCAqdmI7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggdGFyZ2V0X25hbWUsIE5VTEwgKTsKKworICAgIERFQlVHTVNHVCgoImFkZHI6Y3JlYXRlIiwgImNyZWF0aW5nIHZhcmJpbmRzIGZvciAlcyBhZGRyLCBmcCAlcywgaWQgJXNcbiIsCisgICAgICAgICAgICAgICB0YXJnZXRfbmFtZSwgZnAsIGlkZW50aXR5KSk7CisKKyAgICAvKgorICAgICAqIGJ1aWxkIGJhc2UgbmFtZQorICAgICAqLworICAgIG5hbWVfbGVuID0gT0lEX0xFTkdUSChhZGRyVGJsKTsKKyAgICBtZW1jcHkobmFtZSwgYWRkclRibCwgc2l6ZW9mKGFkZHJUYmwpKTsKKyAgICBuYW1lW25hbWVfbGVuKytdID0gMTsgLyogZW50cnkgKi8KKyAgICBjb2xfcG9zID0gbmFtZV9sZW4rKzsgLyogY29sdW1uICovCisgICAgd2hpbGUgKCp0YXJnZXRfbmFtZSkKKyAgICAgICAgbmFtZVtuYW1lX2xlbisrXSA9ICp0YXJnZXRfbmFtZSsrOworCisgICAgaWYgKGZwKSB7CisgICAgICAgIGJpbl9mcF9sZW4gPSBzaXplb2YoYmluX2ZwKTsKKyAgICAgICAgbmV0c25tcF90bHNfZmluZ2VycHJpbnRfYnVpbGQoaGFzaF90eXBlLCBmcCwgJmJpbl9mcF9wdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJpbl9mcF9sZW4sIDApOworCisgICAgICAgIG5hbWVbY29sX3Bvc10gPSBDT0xVTU5fU05NUFRMU1RNQUREUlNFUlZFUkZJTkdFUlBSSU5UOworICAgICAgICB2bCA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZiaW5fZnAsIGJpbl9mcF9sZW4pOworICAgICAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2bCwgTlVMTCk7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgLS1yc19pbmRleDsKKworICAgIGlmIChpZGVudGl0eSkgeworICAgICAgICBuYW1lW2NvbF9wb3NdID0gQ09MVU1OX1NOTVBUTFNUTUFERFJTRVJWRVJJREVOVElUWTsKKyAgICAgICAgdmwgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9PQ1RFVF9TVFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZGVudGl0eSwgc3RybGVuKGlkZW50aXR5KSk7CisgICAgICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHZsLCBOVUxMKTsKKyAgICB9CisgICAgZWxzZQorICAgICAgICAtLXJzX2luZGV4OworCisgICAgaWYgKHN0KSB7CisgICAgICAgIG5hbWVbY29sX3Bvc10gPSBDT0xVTU5fU05NUFRMU1RNQUREUlNUT1JBR0VUWVBFOworICAgICAgICB2YiA9IHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoJnZsLCBuYW1lLCBuYW1lX2xlbiwgQVNOX0lOVEVHRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3QsIHNpemVvZihzdCkpOworICAgICAgICBpZiAoTlVMTCA9PSB2YikgeworICAgICAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmwpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZQorICAgICAgICAtLXJzX2luZGV4OworCisgICAgbmFtZVtjb2xfcG9zXSA9IENPTFVNTl9TTk1QVExTVE1BRERSUk9XU1RBVFVTOworICAgIHJzID0gUlNfQ1JFQVRFQU5ER087CisgICAgdmIgPSBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKCZ2bCwgbmFtZSwgbmFtZV9sZW4sIEFTTl9JTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcnMsIHNpemVvZihycykpOworICAgIGlmIChOVUxMID09IHZiKSB7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZsKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKHJvd19zdGF0dXNfaW5kZXgpCisgICAgICAgICpyb3dfc3RhdHVzX2luZGV4ID0gcnNfaW5kZXg7CisKKyAgICByZXR1cm4gdmw7Cit9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGFwcGxpY2F0aW9uIGNvZGUKKyAqCisgKi8KK3N0YXRpYyBjaGFyICAgICAgICAgKl9kYXRhID0gTlVMTCwgKl9tYXBfdHlwZV9zdHIgPSBOVUxMLCAqX2lkX3N0ciA9IE5VTEw7CitzdGF0aWMgY2hhciAgICAgICAgICpfc3RvcmFnZV90eXBlX3N0ciA9IE5VTEwsICpfZnBfc3RyID0gTlVMTDsKK3N0YXRpYyBpbnQgICAgICAgICAgIF9zdG9yYWdlX3R5cGUgPSBTVF9OT05FLCBfaGFzaF90eXBlID0gTlNfSEFTSF9OT05FOworc3RhdGljIHNpemVfdCAgICAgICAgX2RhdGFfbGVuOworCitzdGF0aWMgdm9pZAorb3B0UHJvYyhpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YsIGludCBvcHQpCit7CisgICAgaWYgKCdDJyAhPSBvcHQpCisgICAgICAgIHJldHVybjsKKworICAgIHdoaWxlICgqb3B0YXJnKSB7CisgICAgICAgIHN3aXRjaCAoKm9wdGFyZysrKSB7CisgICAgICAgICAgICBjYXNlICdtJzoKKyAgICAgICAgICAgICAgICBpZiAob3B0aW5kIDwgYXJnYykKKyAgICAgICAgICAgICAgICAgICAgX21hcF90eXBlX3N0ciA9IGFyZ3Zbb3B0aW5kKytdOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ20gb3B0aW9uOiBubyBhcmd1bWVudCBnaXZlblxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICAgICAgX2RhdGEgPSBhcmd2W29wdGluZCsrXTsKKyAgICAgICAgICAgICAgICAgICAgX2RhdGFfbGVuID0gc3RybGVuKF9kYXRhKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIC1DZCBvcHRpb246IG5vIGFyZ3VtZW50IGdpdmVuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKwkgICAgY2FzZSAncyc6CisgICAgICAgICAgICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoMHhGRiAmIGFyZ3Zbb3B0aW5kXVswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBfc3RvcmFnZV90eXBlID0gYXRvaShhcmd2W29wdGluZCsrXSk7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIF9zdG9yYWdlX3R5cGVfc3RyID0gYXJndltvcHRpbmQrK107CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ3Mgb3B0aW9uOiBubyBhcmd1bWVudCBnaXZlblxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICAKKwkgICAgY2FzZSAnaCc6CisgICAgICAgICAgICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGlzZGlnaXQoMHhGRiAmIGFyZ3Zbb3B0aW5kXVswXSkpCisgICAgICAgICAgICAgICAgICAgICAgICBfaGFzaF90eXBlID0gYXRvaShhcmd2W29wdGluZCsrXSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCAtQ2ggb3B0aW9uOiBubyBhcmd1bWVudCBnaXZlblxuIik7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICAgICAgfQorCQlicmVhazsKKyAgICAgICAgICAgICAgICAKKwkgICAgY2FzZSAnZic6CisgICAgICAgICAgICAgICAgaWYgKG9wdGluZCA8IGFyZ2MpCisgICAgICAgICAgICAgICAgICAgIF9mcF9zdHIgPSBhcmd2W29wdGluZCsrXTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgLUNmIG9wdGlvbjogbm8gYXJndW1lbnQgZ2l2ZW5cbiIpOworICAgICAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgICAgIH0KKwkJYnJlYWs7CisgICAgICAgICAgICAgICAgCisJICAgIGNhc2UgJ2knOgorICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKQorICAgICAgICAgICAgICAgICAgICBfaWRfc3RyID0gYXJndltvcHRpbmQrK107CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIC1DaSBvcHRpb246IG5vIGFyZ3VtZW50IGdpdmVuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgICAgICB9CisJCWJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZmxhZyBwYXNzZWQgdG8gLUM6ICVjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgb3B0YXJnWy0xXSk7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZAorX3BhcnNlX3N0b3JhZ2VfdHlwZShjb25zdCBjaGFyICphcmcpCit7CisgICAgbmV0c25tcF9wZHUgZHVtbXk7CisgICAgb2lkIG5hbWVbXSA9IHsgU05NUF9UTFNfVE1fQ0VSVF9UQUJMRSwgMSwKKyAgICAgICAgICAgICAgICAgICBDT0xfU05NUFRMU1RNQ0VSVFRPVFNOX1NUT1JBR0VUWVBFIH07CisgICAgaW50IG5hbWVfbGVuID0gT0lEX0xFTkdUSChuYW1lKTsKKworICAgIGlmIChOVUxMID09IGFyZykKKyAgICAgICAgcmV0dXJuOworCisgICAgbWVtc2V0KCZkdW1teSwgMHgwMCwgc2l6ZW9mKGR1bW15KSk7CisgICAgc25tcF9hZGRfdmFyKCZkdW1teSwgbmFtZSwgbmFtZV9sZW4sICdpJywgYXJnKTsKKyAgICBpZiAoZHVtbXkudmFyaWFibGVzKSB7CisgICAgICAgIF9zdG9yYWdlX3R5cGUgPSAqZHVtbXkudmFyaWFibGVzLT52YWwuaW50ZWdlcjsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoZHVtbXkudmFyaWFibGVzKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAidW5rbm93biBzdG9yYWdlIHR5cGUgJXMgZm9yIC1Dc1xuIiwgYXJnKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICByZXR1cm47Cit9CisKK3ZvaWQKK3VzYWdlKHZvaWQpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJVU0FHRTogc25tcHRscyBbLUNtIG1hcFR5cGVPSURdIFstQ2QgZGF0YV0gWy1DcyBzdG9yYWdlVHlwZV0gIik7CisgICAgc25tcF9wYXJzZV9hcmdzX3VzYWdlKHN0ZGVycik7CisgICAgZnByaW50ZihzdGRlcnIsICI8Y29tbWFuZD4gW2NvbW1hbmQgb3B0aW9uc11cblxuIik7CisgICAgc25tcF9wYXJzZV9hcmdzX2Rlc2NyaXB0aW9ucyhzdGRlcnIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gICBjZXJ0VG9TZWNOYW1lIGFkZCA8cHJpb3JpdHk+IDxoYXNoVHlwZT4gPGZpbmdlcnByaW50PlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdC1DbVx0XHRNYXB0eXBlOyBbc25tcFRsc3RtQ2VydENvbW1vbk5hbWV8c25tcFRsc3RtQ2VydFNBTlJGQzgyMk5hbWV8c25tcFRsc3RtQ2VydFNBTklwQWRkcmVzc3xzbm1wVGxzdG1DZXJ0U0FORE5TTmFtZXxzbm1wVGxzdG1DZXJ0U3BlY2lmaWVkXVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdFx0XHQoZGVmYXVsdCBpcyBzbm1wVGxzdG1DZXJ0U3BlY2lmaWVkKVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdC1DZFx0XHREYXRhOyBkYXRhIGZvciBzbm1wVGxzdG1DZXJ0U3BlY2lmaWVkLlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdC1Dc1x0XHRzdG9yYWdlVHlwZTsgZGVmYXVsdCBpcyBub25Wb2xhdGlsZS5cbiIpOworCisgICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSAgIHRhcmdldFBhcmFtc0ZpbmdlcnByaW50IGFkZCA8cGFyYW1zLW5hbWU+IDxoYXNoVHlwZT4gPGZpbmdlcnByaW50PlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdC1Dc1x0XHRzdG9yYWdlVHlwZTsgZGVmYXVsdCBpcyBub25Wb2xhdGlsZS5cbiIpOworCisgICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSAgIHRhcmdldEFkZHIgYWRkIDx0YXJnZXQtbmFtZT4gPGhhc2hUeXBlPiBbPGhhc2hfdHlwZT4gPHJlbW90ZS1maW5nZXJwcmludD5dIFtzZXJ2ZXItaWRlbnRpdHldXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIlx0LUNzXHRcdHN0b3JhZ2VUeXBlOyBkZWZhdWx0IGlzIG5vblZvbGF0aWxlLlxuIik7CisKKyAgICBleGl0KDEpOworfQorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIG5ldHNubXBfc2Vzc2lvbiAgICAgICAgc2Vzc2lvbiwgKnNzOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyX2xpc3QgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICAgICAgICAgYXJnLCByc19pZHggPSAwOworICAgIHVfaW50ICAgICAgICAgICAgICAgICAgaGFzaF90eXBlOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAqZmluZ2VycHJpbnQsICp0bXA7CisKKyAgICAvKgorICAgICAqIGdldCB0aGUgY29tbW9uIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgCisgICAgICovCisgICAgc3dpdGNoIChhcmcgPSBzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgJnNlc3Npb24sICJDOiIsIG9wdFByb2MpKSB7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgorICAgICAgICBleGl0KDApOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgorICAgICAgICB1c2FnZSgpOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIC8qCisgICAgICogT3BlbiBhbiBTTk1QIHNlc3Npb24uCisgICAgICovCisgICAgU09DS19TVEFSVFVQOworICAgIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKyAgICBpZiAoc3MgPT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBkaWFnbm9zZSBzbm1wX29wZW4gZXJyb3JzIHdpdGggdGhlIGlucHV0IG5ldHNubXBfc2Vzc2lvbiBwb2ludGVyIAorICAgICAgICAgKi8KKyAgICAgICAgc25tcF9zZXNzX3BlcnJvcigic25tcHRscyIsICZzZXNzaW9uKTsKKyAgICAgICAgU09DS19DTEVBTlVQOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmIChzdHJjbXAoYXJndlthcmddLCAiY2VydFRvU2VjTmFtZSIpID09IDApIHsKKworICAgICAgICBvaWQgICAgICAgICAgIG1hcF90eXBlW01BWF9PSURfTEVOXTsKKyAgICAgICAgdV9pbnQgICAgICAgICBwcmk7CisgICAgICAgIHNpemVfdCAgICAgICAgbWFwX3R5cGVfbGVuID0gMDsKKworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbKythcmddLCAiYWRkIikgIT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvbmx5IGFkZCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBwcmkgPSBhdG9pKGFyZ3ZbKythcmddKTsKKyAgICAgICAgdG1wID0gYXJndlsrK2FyZ107CisgICAgICAgIGhhc2hfdHlwZSA9IGF0b2kodG1wKTsKKyAgICAgICAgZmluZ2VycHJpbnQgPSBhcmd2WysrYXJnXTsKKworICAgICAgICBERUJVR01TR1QoKCJzbm1wdGxzIiwKKyAgICAgICAgICAgICAgICAgICAiY3JlYXRlIHByaSAlZCwgaGFzaCB0eXBlICVkLCBmcCAlcyIsCisgICAgICAgICAgICAgICAgICAgcHJpLCBoYXNoX3R5cGUsIGZpbmdlcnByaW50KSk7CisgICAgICAgIGlmIChfbWFwX3R5cGVfc3RyKSB7CisgICAgICAgICAgICBtYXBfdHlwZV9sZW4gPSBNQVhfT0lEX0xFTjsKKyAgICAgICAgICAgIGlmIChzbm1wX3BhcnNlX29pZChfbWFwX3R5cGVfc3RyLCBtYXBfdHlwZSwgJm1hcF90eXBlX2xlbikgCisgICAgICAgICAgICAgICAgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNubXBfcGVycm9yKF9tYXBfdHlwZV9zdHIpOworICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR01TRygoInNubXB0bHMiLCAiLCBtYXAgdHlwZSAiKSk7CisgICAgICAgICAgICBERUJVR01TR09JRCgoInNubXB0bHMiLCBtYXBfdHlwZSwgbWFwX3R5cGVfbGVuKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKF9kYXRhKQorICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wdGxzIiwgIiwgZGF0YSAlcyIsIF9kYXRhKSk7CisKKyAgICAgICAgX3BhcnNlX3N0b3JhZ2VfdHlwZShfc3RvcmFnZV90eXBlX3N0cik7CisKKyAgICAgICAgREVCVUdNU0coKCJzbm1wdGxzIiwgIlxuIikpOworICAgICAgICB2YXJfbGlzdCA9IGNlcnRfcm93X2NyZWF0ZShwcmksIGhhc2hfdHlwZSwgZmluZ2VycHJpbnQsIG1hcF90eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXBfdHlwZV9sZW4sICh1X2NoYXIqKV9kYXRhLCBfZGF0YV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdG9yYWdlX3R5cGUsICZyc19pZHgpOworICAgIH0KKyAgICBlbHNlIGlmIChzdHJjbXAoYXJndlthcmddLCAidGFyZ2V0UGFyYW1zRmluZ2VycHJpbnQiKSA9PSAwKSB7CisKKyAgICAgICAgY2hhciAqIHBhcmFtc19uYW1lOworCisgICAgICAgIGlmIChzdHJjbXAoYXJndlsrK2FyZ10sICJhZGQiKSAhPSAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm9ubHkgYWRkIGlzIHN1cHBvcnRlZCBhdCB0aGlzIHRpbWVcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorCisgICAgICAgIHBhcmFtc19uYW1lID0gYXJndlsrK2FyZ107CisgICAgICAgIGhhc2hfdHlwZSA9IGF0b2koYXJndlsrK2FyZ10pOworICAgICAgICBmaW5nZXJwcmludCA9IGFyZ3ZbKythcmddOworICAgICAgICAKKyAgICAgICAgX3BhcnNlX3N0b3JhZ2VfdHlwZShfc3RvcmFnZV90eXBlX3N0cik7CisKKyAgICAgICAgREVCVUdNU0dUKCgic25tcHRscyIsCisgICAgICAgICAgICAgICAgICAgImNyZWF0ZSAlcyBwYXJhbSBmcCwgaGFzaCB0eXBlICVkLCBmcCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBwYXJhbXNfbmFtZSwgaGFzaF90eXBlLCBmaW5nZXJwcmludCkpOworCisgICAgICAgIHZhcl9saXN0ID0gcGFyYW1zX3Jvd19jcmVhdGUocGFyYW1zX25hbWUsIGhhc2hfdHlwZSwgZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3N0b3JhZ2VfdHlwZSwgJnJzX2lkeCk7CisgICAgfQorCisgICAgZWxzZSBpZiAoc3RyY21wKGFyZ3ZbYXJnXSwgInRhcmdldEFkZHIiKSA9PSAwKSB7CisKKyAgICAgICAgY2hhciAqIGFkZHJfbmFtZTsKKworICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbKythcmddLCAiYWRkIikgIT0gMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJvbmx5IGFkZCBpcyBzdXBwb3J0ZWQgYXQgdGhpcyB0aW1lXG4iKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKworICAgICAgICBhZGRyX25hbWUgPSBhcmd2WysrYXJnXTsKKyAgICAgICAgCisgICAgICAgIF9wYXJzZV9zdG9yYWdlX3R5cGUoX3N0b3JhZ2VfdHlwZV9zdHIpOworCisgICAgICAgIERFQlVHTVNHVCgoInNubXB0bHMiLAorICAgICAgICAgICAgICAgICAgICJjcmVhdGUgJXMgYWRkciBmcCwgaGFzaCB0eXBlICVkLCBmcCAlcywgaWQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgYWRkcl9uYW1lLCBfaGFzaF90eXBlLCBfZnBfc3RyLCBfaWRfc3RyKSk7CisKKyAgICAgICAgdmFyX2xpc3QgPSBhZGRyX3Jvd19jcmVhdGUoYWRkcl9uYW1lLCBfaGFzaF90eXBlLCBfZnBfc3RyLCBfaWRfc3RyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zdG9yYWdlX3R5cGUsICZyc19pZHgpOworICAgIH0KKworICAgIGlmICghIHZhcl9saXN0KSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gY29tbWFuZCBzcGVjaWZpZWRcbiIpOworICAgICAgICB1c2FnZSgpOworICAgIH0KKworICAgIG5ldHNubXBfcm93X2NyZWF0ZShzcywgdmFyX2xpc3QsIHJzX2lkeCk7CisKKyAgICBTT0NLX0NMRUFOVVA7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFuc2xhdGUuYyBiL2FwcHMvc25tcHRyYW5zbGF0ZS5jCmluZGV4IDFlZjkxOTMuLjJiMTk3NzcgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYW5zbGF0ZS5jCisrKyBiL2FwcHMvc25tcHRyYW5zbGF0ZS5jCkBAIC01MSwxMSArNTEsNiBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL21pYl9hcGkuaD4KQEAgLTIwNyw3ICsyMDIsOCBAQAogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwogICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgogICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdGlvbiA9IDE7Ci0gICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKDEpOworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU0FWRV9NSUJfREVTQ1JTLCAxKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSAnQic6CiAgICAgICAgICAgICAgICAgICAgIGZpbmRfYWxsID0gMTsKQEAgLTI2Niw3ICsyNjIsOCBAQAogCiAgICAgZG8gewogICAgICAgICBuYW1lX2xlbmd0aCA9IE1BWF9PSURfTEVOOwotICAgICAgICBpZiAoc25tcF9nZXRfcmFuZG9tX2FjY2VzcygpKSB7CisgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisJCQkJICBORVRTTk1QX0RTX0xJQl9SQU5ET01fQUNDRVNTKSkgewogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKICAgICAgICAgICAgIGlmICghZ2V0X25vZGUoY3VycmVudF9uYW1lLCBuYW1lLCAmbmFtZV9sZW5ndGgpKSB7CiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwLmMgYi9hcHBzL3NubXB0cmFwLmMKaW5kZXggZDE2ZDJmYS4uN2MwODZkYiAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wdHJhcC5jCisrKyBiL2FwcHMvc25tcHRyYXAuYwpAQCAtNDEsMTEgKzQxLDcgQEAKICMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OCw5ICs1NCw2IEBACiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCkBAIC0xMDQsMjYgKzk3LDYgQEAKICAgICByZXR1cm4gMTsKIH0KIAotaW5fYWRkcl90Ci1wYXJzZV9hZGRyZXNzKGNoYXIgKmFkZHJlc3MpCi17Ci0gICAgaW5fYWRkcl90ICAgICAgIGFkZHI7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHNhZGRyOwotICAgIHN0cnVjdCBob3N0ZW50ICpocDsKLQotICAgIGlmICgoYWRkciA9IGluZXRfYWRkcihhZGRyZXNzKSkgIT0gLTEpCi0gICAgICAgIHJldHVybiBhZGRyOwotICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShhZGRyZXNzKTsKLSAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gaG9zdDogJXNcbiIsIGFkZHJlc3MpOwotICAgICAgICBleGl0KDEpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1lbWNweSgmc2FkZHIuc2luX2FkZHIsIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7Ci0gICAgICAgIHJldHVybiBzYWRkci5zaW5fYWRkci5zX2FkZHI7Ci0gICAgfQotCi19Ci0KIHN0YXRpYyB2b2lkCiBvcHRQcm9jKGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndiwgaW50IG9wdCkKIHsKQEAgLTE3Miw5ICsxNDUsMTEgQEAKICAgICBpZiAoc3RyY21wKHByb2duYW0sICJzbm1waW5mb3JtIikgPT0gMCkKICAgICAgICAgaW5mb3JtID0gMTsKICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CkBAIC0yOTgsNyArMjczLDExIEBACiAgICAgICAgIH0KICAgICAgICAgYWdlbnQgPSBhcmd2W2FyZ107CiAgICAgICAgIGlmIChhZ2VudCAhPSBOVUxMICYmIHN0cmxlbihhZ2VudCkgIT0gMCkgewotICAgICAgICAgICAgKnBkdV9pbl9hZGRyX3QgPSBwYXJzZV9hZGRyZXNzKGFnZW50KTsKKyAgICAgICAgICAgIGludCByZXQgPSBuZXRzbm1wX2dldGhvc3RieW5hbWVfdjQoYWdlbnQsIHBkdV9pbl9hZGRyX3QpOworICAgICAgICAgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVua25vd24gaG9zdDogJXNcbiIsIGFnZW50KTsKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgKnBkdV9pbl9hZGRyX3QgPSBnZXRfbXlhZGRyKCk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL2FwcHMvc25tcHRyYXBkLmMgYi9hcHBzL3NubXB0cmFwZC5jCmluZGV4IGI3YzRjZTQuLmJjZTBkNDcgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYXBkLmMKKysrIGIvYXBwcy9zbm1wdHJhcGQuYwpAQCAtNDAsOSArNDAsNyBAQAogI2lmIEhBVkVfU1lTX1dBSVRfSAogI2luY2x1ZGUgPHN5cy93YWl0Lmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19TT0NLSU9fSApAQCAtMTAzLDYgKzEwMSw3IEBACiAjaW5jbHVkZSAic25tcHRyYXBkX2xvZy5oIgogI2luY2x1ZGUgInNubXB0cmFwZF9hdXRoLmgiCiAjaW5jbHVkZSAibm90aWZpY2F0aW9uLWxvZy1taWIvbm90aWZpY2F0aW9uX2xvZy5oIgorI2luY2x1ZGUgInRsc3RtLW1pYi9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS9zbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS5oIgogI2luY2x1ZGUgIm1pYklJL3ZhY21fY29uZi5oIgogI2lmZGVmIE5FVFNOTVBfRU1CRURERURfUEVSTAogI2luY2x1ZGUgInNubXBfcGVybC5oIgpAQCAtMTI0LDYgKzEyMyw4IEBACiAjaW5jbHVkZSA8dGNwZC5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiAjaWZuZGVmIEJTRDRfMwogI2RlZmluZSBCU0Q0XzIKICNlbmRpZgpAQCAtMTM5LDIyICsxNDAsMjcgQEAKICNkZWZpbmUgRkRfWkVSTyhwKSAgICAgIG1lbXNldCgocCksIDAsIHNpemVvZigqKHApKSkKICNlbmRpZgogCi1jaGFyICAgICAgICAgICAqbG9nZmlsZSA9IDA7Ci1pbnQgICAgICAgICAgICAgU3lzbG9nVHJhcCA9IDA7Ci1pbnQgICAgICAgICAgICAgRXZlbnQgPSAwOwotaW50ICAgICAgICAgICAgIGRyb3BhdXRoID0gMDsKLWludCAgICAgICAgICAgICByZWNvbmZpZyA9IDA7CitjaGFyICAgICAgICAgICAqbG9nZmlsZSA9IE5VTEw7CitleHRlcm4gaW50ICAgICAgU3lzbG9nVHJhcDsKK2V4dGVybiBpbnQgICAgICBkcm9wYXV0aDsKK3N0YXRpYyBpbnQgICAgICByZWNvbmZpZyA9IDA7CiBjaGFyICAgICAgICAgICAgZGRlZmF1bHRfcG9ydFtdID0gInVkcDoxNjIiOwkvKiBEZWZhdWx0IGRlZmF1bHQgcG9ydCAqLwogY2hhciAgICAgICAgICAgKmRlZmF1bHRfcG9ydCA9IGRkZWZhdWx0X3BvcnQ7CiAjaWYgSEFWRV9HRVRQSUQKICAgICBGSUxFICAgICAgICAgICAqUElEOwogICAgIGNoYXIgICAgICAgICAgICpwaWRfZmlsZSA9IE5VTEw7CiAjZW5kaWYKK2V4dGVybiB2b2lkIHBhcnNlX2Zvcm1hdChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CiBjaGFyICAgICAgICAgICAqdHJhcDFfZm10X3N0cl9yZW1lbWJlciA9IE5VTEw7CiBpbnQgICAgICAgICAgICAgZG9mb3JrID0gMTsKIAogZXh0ZXJuIGludCAgICAgIG5ldHNubXBfcnVubmluZzsKIAorI2lmZGVmIE5FVFNOTVBfVVNFX01ZU1FMCitleHRlcm4gaW50ICAgICAgbmV0c25tcF9teXNxbF9pbml0KHZvaWQpOworZXh0ZXJuIHZvaWQgICAgIHNubXB0cmFwZF9yZWdpc3Rlcl9zcWxfY29uZmlncyggdm9pZCApOworI2VuZGlmCisKIC8qCiAgKiBUaGVzZSBkZWZpbml0aW9ucyBoYW5kbGUgNC4yIHN5c3RlbXMgd2l0aG91dCBhZGRpdGlvbmFsIHN5c2xvZyBmYWNpbGl0aWVzLgogICovCkBAIC0yMDUsMjAgKzIxMSwxNCBAQAogI2RlZmluZSBTTk1QVFJBUERfUlVOTklORyAxCiAjZGVmaW5lIFNOTVBUUkFQRF9TVE9QUEVEIDAKIGludCAgICAgICAgICAgICB0cmFwZF9zdGF0dXMgPSBTTk1QVFJBUERfU1RPUFBFRDsKLS8qIGFwcF9uYW1lX2xvbmcgdXNlZCBmb3IgRXZlbnQgTG9nIChzeXNsb2cpLCBTQ00sIHJlZ2lzdHJ5IGV0YyAqLworLyogYXBwX25hbWVfbG9uZyB1c2VkIGZvciBTQ00sIHJlZ2lzdHJ5IGV0YyAqLwogTFBDVFNUUiAgICAgICAgIGFwcF9uYW1lX2xvbmcgPSBfVCgiTmV0LVNOTVAgVHJhcCBIYW5kbGVyIik7ICAgICAvKiBBcHBsaWNhdGlvbiBOYW1lICovCiAjZW5kaWYKIAogY29uc3QgY2hhciAgICAgKmFwcF9uYW1lID0gInNubXB0cmFwZCI7CiAKLXN0cnVjdCB0aW1ldmFsICBOb3c7Ci0KIHZvaWQgICAgICAgICAgICB0cmFwZF91cGRhdGVfY29uZmlnKHZvaWQpOwogCi1zdGF0aWMgb2lkICAgICAgcmlzaW5nQWxhcm1bXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMiwgMSwgMSwgMywgMSB9Owotc3RhdGljIG9pZCAgICAgIGZhbGxpbmdBbGFybVtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAyLCAxLCAxLCAzLCAyIH07Ci1zdGF0aWMgb2lkICAgICAgdW5hdmFpbGFibGVBbGFybVtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAyLCAxLCAxLCAzLCAzIH07Ci0KICNpZmRlZiBXSU4zMlNFUlZJQ0UKIHZvaWQgICAgICAgICAgICBTdG9wU25tcFRyYXBkKHZvaWQpOwogaW50ICAgICAgICAgICAgIFNubXBUcmFwZE1haW4oaW50IGFyZ2MsIFRDSEFSICogYXJndltdKTsKQEAgLTIzMSw3MCArMjMxLDYgQEAKIGV4dGVybiB2b2lkICAgICAgICAgICAgc3ViYWdlbnRfaW5pdCh2b2lkKTsKICNlbmRpZgogCi12b2lkCi1ldmVudF9pbnB1dChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2cCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgZXZlbnRpZCA9IDA7Ci0gICAgb2lkICAgICAgICAgICAgIHZhcmlhYmxlW01BWF9PSURfTEVOXTsKLSAgICB1X2xvbmcgICAgICAgICAgZGVzdGlwID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgc2FtcGxldHlwZSA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIHZhbHVlID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgdGhyZXNob2xkID0gMDsKLSAgICBpbnQgICAgICAgICAgICAgaTsKLSAgICBpbnQgICAgICAgICAgICAgbnZhcnMgPSAwOwotCi0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0CSp2cDIgPSB2cDsKLSAgICAKLSAgICBvaWQgICAgICAgICAgICAqb3AgPSBOVUxMOwotCi0gICAgLyogTWFrZSBzdXJlIHRoZXJlIGFyZSA1IHZhcmlhYmxlcy4gIE90aGVyd2lzZSwgZG9uJ3QgYm90aGVyICovCi0gICAgZm9yIChpPTE7IGkgPD0gNTsgaSsrKSB7Ci0gICAgICB2cDIgPSB2cDItPm5leHRfdmFyaWFibGU7Ci0gICAgICBpZiAoIXZwMikgewotCW52YXJzID0gLTE7Ci0JYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChudmFycyAhPSAtMSkKLSAgICB7Ci0gICAgICB2cCA9IHZwLT5uZXh0X3ZhcmlhYmxlOyAgICAgLyogc2tpcCBzeXNVcHRpbWUgKi8KLSAgICAgIGlmICh2cC0+dmFsX2xlbiAhPSBzaXplb2YocmlzaW5nQWxhcm0pIHx8Ci0JICAhbWVtY21wKHZwLT52YWwub2JqaWQsIHJpc2luZ0FsYXJtLCBzaXplb2YocmlzaW5nQWxhcm0pKSkKLQlldmVudGlkID0gMTsKLSAgICAgIGVsc2UgaWYgKHZwLT52YWxfbGVuICE9IHNpemVvZihyaXNpbmdBbGFybSkgfHwKLQkgICFtZW1jbXAodnAtPnZhbC5vYmppZCwgZmFsbGluZ0FsYXJtLCBzaXplb2YoZmFsbGluZ0FsYXJtKSkpCi0JZXZlbnRpZCA9IDI7Ci0gICAgICBlbHNlIGlmICh2cC0+dmFsX2xlbiAhPSBzaXplb2YocmlzaW5nQWxhcm0pIHx8Ci0JICAhbWVtY21wKHZwLT52YWwub2JqaWQsIHVuYXZhaWxhYmxlQWxhcm0sIHNpemVvZih1bmF2YWlsYWJsZUFsYXJtKSkpCi0JZXZlbnRpZCA9IDM7Ci0gICAgICBlbHNlIHsKLQlmcHJpbnRmKHN0ZGVyciwgInVua25vd24gZXZlbnRcbiIpOwotCWV2ZW50aWQgPSAwOwotICAgICAgfQotICAgICAgCi0gICAgICB2cCA9IHZwLT5uZXh0X3ZhcmlhYmxlOwotICAgICAgbWVtbW92ZSh2YXJpYWJsZSwgdnAtPnZhbC5vYmppZCwgdnAtPnZhbF9sZW4gKiBzaXplb2Yob2lkKSk7Ci0gICAgICBvcCA9IHZwLT5uYW1lICsgMjI7Ci0gICAgICBkZXN0aXAgPSAwOwotICAgICAgZGVzdGlwIHw9ICgqb3ArKykgPDwgMjQ7Ci0gICAgICBkZXN0aXAgfD0gKCpvcCsrKSA8PCAxNjsKLSAgICAgIGRlc3RpcCB8PSAoKm9wKyspIDw8IDg7Ci0gICAgICBkZXN0aXAgfD0gKm9wKys7Ci0gICAgICAKLSAgICAgIHZwID0gdnAtPm5leHRfdmFyaWFibGU7Ci0gICAgICBzYW1wbGV0eXBlID0gKnZwLT52YWwuaW50ZWdlcjsKLSAgICAgIAotICAgICAgdnAgPSB2cC0+bmV4dF92YXJpYWJsZTsKLSAgICAgIHZhbHVlID0gKnZwLT52YWwuaW50ZWdlcjsKLSAgICAgIAotICAgICAgdnAgPSB2cC0+bmV4dF92YXJpYWJsZTsKLSAgICAgIHRocmVzaG9sZCA9ICp2cC0+dmFsLmludGVnZXI7Ci0gICAgfQotICAgIHByaW50ZigiJWQ6IDB4JTAybFggJWQgJWQgJWRcbiIsIGV2ZW50aWQsIGRlc3RpcCwgc2FtcGxldHlwZSwgdmFsdWUsCi0JdGhyZXNob2xkKTsKLX0KLQogCiB2b2lkCiB1c2FnZSh2b2lkKQpAQCAtMzE1LDkgKzI1MSw3IEBACiAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAiICAtQ1x0XHRcdGRvIG5vdCByZWFkIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gZmlsZXNcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiICAtZFx0XHRcdGR1bXAgc2VudCBhbmQgcmVjZWl2ZWQgU05NUCBwYWNrZXRzXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLURbVE9LRU5bLC4uLl1dXHRcdHR1cm4gb24gZGVidWdnaW5nIG91dHB1dFxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiICAtZVx0XHRcdHByaW50IGV2ZW50ICMgKHJpc2luZy9mYWxsaW5nIGFsYXJtLCBldGMuKVxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICIgIC1EW1RPS0VOWywuLi5dXVx0XHR0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBzcGVjaWZpZWQgVE9LRU5zXG5cdFx0XHQgICAoQUxMIGdpdmVzIGV4dHJlbWVseSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQpXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLWZcdFx0XHRkbyBub3QgZm9yayBmcm9tIHRoZSBzaGVsbFxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAiICAtRiBGT1JNQVRcdFx0dXNlIHNwZWNpZmllZCBmb3JtYXQgZm9yIGxvZ2dpbmcgdG8gc3RhbmRhcmQgZXJyb3JcbiIpOwpAQCAtMzU1LDYgKzI4OSw3IEBACiAgICAgZnByaW50ZihzdGRlcnIsICIgIC12LCAtLXZlcnNpb25cdFx0ZGlzcGxheSB2ZXJzaW9uIGluZm9ybWF0aW9uXG4iKTsKICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpICYmICFkZWZpbmVkKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYKQogICAgIGZwcmludGYoc3RkZXJyLCAiICAteCBBRERSRVNTXHRcdHVzZSBBRERSRVNTIGFzIEFnZW50WCBhZGRyZXNzXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgLVhcdFx0XHRkb24ndCBiZWNvbWUgYSBzdWJhZ2VudFxuIik7CiAjZW5kaWYKICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICIgIC1PIDxPVVRPUFRTPlx0XHR0b2dnbGUgb3B0aW9ucyBjb250cm9sbGluZyBvdXRwdXQgZGlzcGxheVxuIik7CkBAIC0zNjIsMTEgKzI5Nyw2IEBACiAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAiICAtTCA8TE9HT1BUUz5cdFx0dG9nZ2xlIG9wdGlvbnMgY29udHJvbGxpbmcgd2hlcmUgdG8gbG9nIHRvXG4iKTsKICAgICBzbm1wX2xvZ19vcHRpb25zX3VzYWdlKCJcdFx0XHQiLCBzdGRlcnIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiXG4gIERlcHJlY2F0ZWQgb3B0aW9uczpcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICAtbyBGSUxFXHRcdHVzZSAtTGYgPEZJTEU+IGluc3RlYWRcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICAtUFx0XHRcdHVzZSAtZiAtTGUgIGluc3RlYWRcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICAtc1x0XHRcdHVzZSAtTHNkIGluc3RlYWRcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICAtUyBkfGl8MC03XHRcdHVzZSAtTHMgPGZhY2lsaXR5PiBpbnN0ZWFkXG4iKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTM4NSw2ICszMTUsNyBAQAogICAgIGV4dGVybiBuZXRzbm1wX3Nlc3Npb24gKm1haW5fc2Vzc2lvbjsKICNlbmRpZgogICAgIG5ldHNubXBfcnVubmluZyA9IDA7CisKICNpZmRlZiBXSU4zMlNFUlZJQ0UKICAgICAvKgogICAgICAqIEluIGNhc2Ugb2Ygd2luZG93cywgc2VsZWN0KCkgaW4gcmVjZWl2ZSgpIGZ1bmN0aW9uIHdpbGwgbm90IHJldHVybiAKQEAgLTUxMyw2ICs0NDQsNyBAQAogewogICAgIGlmIChkZWZhdWx0X3BvcnQgIT0gZGRlZmF1bHRfcG9ydCkgewogICAgICAgICBmcmVlKGRlZmF1bHRfcG9ydCk7CisgICAgICAgIGRlZmF1bHRfcG9ydCA9IGRkZWZhdWx0X3BvcnQ7CiAgICAgfQogfQogCkBAIC01NDIsMTMgKzQ3NCwxMCBAQAogdm9pZAogcGFyc2VfY29uZmlnX2FnZW50dXNlcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSNpZiBkZWZpbmVkKEhBVkVfR0VUUFdOQU0pICYmIGRlZmluZWQoSEFWRV9QV0RfSCkKLSAgICBzdHJ1Y3QgcGFzc3dkICAqaW5mbzsKLSNlbmRpZgotCiAgICAgaWYgKGNwdHJbMF0gPT0gJyMnKSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICplY3A7CiAgICAgICAgIGludCAgICAgICAgICAgICB1aWQ7CisKICAgICAgICAgdWlkID0gc3RydG91bChjcHRyICsgMSwgJmVjcCwgMTApOwogICAgICAgICBpZiAoKmVjcCAhPSAwKSB7CiAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJCYWQgbnVtYmVyIik7CkBAIC01NTYsNTcgKzQ4NSw1MSBAQAogCSAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkgICAgICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQsIHVpZCk7CiAJfQotICAgIH0KICNpZiBkZWZpbmVkKEhBVkVfR0VUUFdOQU0pICYmIGRlZmluZWQoSEFWRV9QV0RfSCkKLSAgICBlbHNlIGlmICgoaW5mbyA9IGdldHB3bmFtKGNwdHIpKSAhPSBOVUxMKSB7Ci0gICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKLQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfVVNFUklELCBpbmZvLT5wd191aWQpOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIlVzZXIgbm90IGZvdW5kIGluIHBhc3N3ZCBkYXRhYmFzZSIpOwotICAgIH0KLSAgICBlbmRwd2VudCgpOworICAgICAgICBzdHJ1Y3QgcGFzc3dkICppbmZvOworCisgICAgICAgIGluZm8gPSBnZXRwd25hbShjcHRyKTsKKyAgICAgICAgaWYgKGluZm8pCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQsIGluZm8tPnB3X3VpZCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIlVzZXIgbm90IGZvdW5kIGluIHBhc3N3ZCBkYXRhYmFzZSIpOworICAgICAgICBlbmRwd2VudCgpOwogI2VuZGlmCisgICAgfQogfQogCiB2b2lkCiBwYXJzZV9jb25maWdfYWdlbnRncm91cChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKLSNpZiBkZWZpbmVkKEhBVkVfR0VUR1JOQU0pICYmIGRlZmluZWQoSEFWRV9HUlBfSCkKLSAgICBzdHJ1Y3QgZ3JvdXAgICAqaW5mbzsKLSNlbmRpZgotCiAgICAgaWYgKGNwdHJbMF0gPT0gJyMnKSB7CiAgICAgICAgIGNoYXIgICAgICAgICAgICplY3A7CiAgICAgICAgIGludCAgICAgICAgICAgICBnaWQgPSBzdHJ0b3VsKGNwdHIgKyAxLCAmZWNwLCAxMCk7CisKICAgICAgICAgaWYgKCplY3AgIT0gMCkgewogICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiQmFkIG51bWJlciIpOwogCX0gZWxzZSB7CiAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAJCQkgICAgICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBnaWQpOwogCX0KLSAgICB9CiAjaWYgZGVmaW5lZChIQVZFX0dFVEdSTkFNKSAmJiBkZWZpbmVkKEhBVkVfR1JQX0gpCi0gICAgZWxzZSBpZiAoKGluZm8gPSBnZXRncm5hbShjcHRyKSkgIT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCi0JCQkgICBORVRTTk1QX0RTX0FHRU5UX0dST1VQSUQsIGluZm8tPmdyX2dpZCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigiR3JvdXAgbm90IGZvdW5kIGluIGdyb3VwIGRhdGFiYXNlIik7CisgICAgICAgIHN0cnVjdCBncm91cCAgICppbmZvOworCisgICAgICAgIGluZm8gPSBnZXRncm5hbShjcHRyKTsKKyAgICAgICAgaWYgKGluZm8pCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9HUk9VUElELCBpbmZvLT5ncl9naWQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJHcm91cCBub3QgZm91bmQgaW4gZ3JvdXAgZGF0YWJhc2UiKTsKKyAgICAgICAgZW5kZ3JlbnQoKTsKKyNlbmRpZgogICAgIH0KLSAgICBlbmRwd2VudCgpOwotI2VuZGlmCiB9CiAjZW5kaWYKIAogdm9pZAotcGFyc2VfY29uZmlnX2xvZ09wdGlvbihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKLXsKLSAgaW50IG15X2FyZ2MgPSAwIDsKLSAgY2hhciAqKm15X2FyZ3YgPSBOVUxMOwotCi0gIHNubXBfbG9nX29wdGlvbnMoIGNwdHIsIG15X2FyZ2MsIG15X2FyZ3YgKTsKLX0KLQotdm9pZAogcGFyc2VfY29uZmlnX2RvTm90Rm9yayhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKIHsKICAgaWYgKG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbihjcHRyKSA9PSAxKQpAQCAtNjE0LDEzICs1MzcsNiBAQAogfQogCiB2b2lkCi1wYXJzZV9jb25maWdfcHJpbnRFdmVudE51bWJlcnMoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCi17Ci0gIGlmIChuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4oY3B0cikgPT0gMSkKLSAgICBFdmVudCsrOwotfQotCi12b2lkCiBwYXJzZV9jb25maWdfaWdub3JlQXV0aEZhaWx1cmUoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpCiB7CiAgIGlmIChuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4oY3B0cikgPT0gMSkKQEAgLTYzOSw2ICs1NTUsNzQgQEAKICAgfQogfQogCitzdGF0aWMgdm9pZAorc25tcHRyYXBkX21haW5fbG9vcCh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBjb3VudCwgbnVtZmRzLCBibG9jazsKKyAgICBmZF9zZXQgICAgICAgICAgcmVhZGZkcyx3cml0ZWZkcyxleGNlcHRmZHM7CisgICAgc3RydWN0IHRpbWV2YWwgIHRpbWVvdXQsICp0dnA7CisKKyAgICB3aGlsZSAobmV0c25tcF9ydW5uaW5nKSB7CisgICAgICAgIGlmIChyZWNvbmZpZykgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogSWYgd2UgYXJlIGxvZ2dpbmcgdG8gYSBmaWxlLCByZWNlaXB0IG9mIFNJR0hVUCBhbHNvCisgICAgICAgICAgICAgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIGxvZyBmaWxlIHNob3VsZCBiZSBjbG9zZWQgYW5kCisgICAgICAgICAgICAgICAgICogcmUtb3BlbmVkLiAgVGhpcyBpcyB1c2VmdWwgZm9yIHVzZXJzIHRoYXQgd2FudCB0bworICAgICAgICAgICAgICAgICAqIHJvdGF0ZSBsb2dzIGluIGEgbW9yZSBwcmVkaWN0YWJsZSBtYW5uZXIuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQoKTsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIk5FVC1TTk1QIHZlcnNpb24gJXMgcmVzdGFydGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7CisgICAgICAgICAgICB0cmFwZF91cGRhdGVfY29uZmlnKCk7CisgICAgICAgICAgICBpZiAodHJhcDFfZm10X3N0cl9yZW1lbWJlcikgeworICAgICAgICAgICAgICAgIHBhcnNlX2Zvcm1hdCggTlVMTCwgdHJhcDFfZm10X3N0cl9yZW1lbWJlciApOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVjb25maWcgPSAwOworICAgICAgICB9CisgICAgICAgIG51bWZkcyA9IDA7CisgICAgICAgIEZEX1pFUk8oJnJlYWRmZHMpOworICAgICAgICBGRF9aRVJPKCZ3cml0ZWZkcyk7CisgICAgICAgIEZEX1pFUk8oJmV4Y2VwdGZkcyk7CisgICAgICAgIGJsb2NrID0gMDsKKyAgICAgICAgdHZwID0gJnRpbWVvdXQ7CisgICAgICAgIHRpbWVyY2xlYXIodHZwKTsKKyAgICAgICAgdHZwLT50dl9zZWMgPSA1OworICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKCZudW1mZHMsICZyZWFkZmRzLCB0dnAsICZibG9jayk7CisgICAgICAgIGlmIChibG9jayA9PSAxKQorICAgICAgICAgICAgdHZwID0gTlVMTDsgICAgICAgICAvKiBibG9jayB3aXRob3V0IHRpbWVvdXQgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSCisgICAgICAgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbygmbnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZEX0VWRU5UX01BTkFHRVIgKi8KKyAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmcmVhZGZkcywgJndyaXRlZmRzLCAmZXhjZXB0ZmRzLCB0dnApOworICAgICAgICBpZiAoY291bnQgPiAwKSB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUgorICAgICAgICAgICAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMoJmNvdW50LCAmcmVhZGZkcywgJndyaXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2VwdGZkcyk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GRF9FVkVOVF9NQU5BR0VSICovCisgICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgYW55IG1vcmUgZXZlbnRzIGFmdGVyIGV4dGVybmFsIGV2ZW50cywgdGhlbgorICAgICAgICAgICAgICogdHJ5IFNOTVAgZXZlbnRzLiAqLworICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICAgICAgICAgIHNubXBfcmVhZCgmcmVhZGZkcyk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzd2l0Y2ggKGNvdW50KSB7CisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgc25tcF90aW1lb3V0KCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIC0xOgorICAgICAgICAgICAgICAgIGlmIChlcnJubyA9PSBFSU5UUikKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJzZWxlY3QiKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3J1bm5pbmcgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInNlbGVjdCByZXR1cm5lZCAlZFxuIiwgY291bnQpOworICAgICAgICAgICAgICAgIG5ldHNubXBfcnVubmluZyA9IDA7CisgICAgICAgICAgICB9CisJfQorCXJ1bl9hbGFybXMoKTsKKyAgICB9Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBtYWluIC0gTm9uIFdpbmRvd3MKQEAgLTY2MywyMCArNjQ3LDE4IEBACiBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiAjZW5kaWYKIHsKLSAgICBjaGFyICAgICAgICAgICAgb3B0aW9uc1sxMjhdID0gImFBYzpDZEQ6OmVmRjpnOmhISTpMOm06TTpubzpPOlBxc1M6dHU6dng6LToiOworICAgIGNoYXIgICAgICAgICAgICBvcHRpb25zWzEyOF0gPSAiYUFjOkNkRDo6ZWZGOmc6aEhJOkw6bTpNOm5vOk86UHR1OnZ4OlgtOiI7CiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzX2xpc3QgPSBOVUxMLCAqc3MgPSBOVUxMOwogICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBhcmcsIGkgPSAwLCBkZXBtc2cgPSAwOworICAgIGludCAgICAgICAgICAgICBhcmcsIGkgPSAwOwogICAgIGludCAgICAgICAgICAgICB1aWQgPSAwLCBnaWQgPSAwOwotICAgIGludCAgICAgICAgICAgICBjb3VudCwgbnVtZmRzLCBibG9jazsKLSAgICBmZF9zZXQgICAgICAgICAgcmVhZGZkcyx3cml0ZWZkcyxleGNlcHRmZHM7Ci0gICAgc3RydWN0IHRpbWV2YWwgIHRpbWVvdXQsICp0dnA7CiAgICAgY2hhciAgICAgICAgICAgKmNwLCAqbGlzdGVuX3BvcnRzID0gTlVMTDsKICNpZiBkZWZpbmVkKFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUpICYmICFkZWZpbmVkKE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYKQogICAgIGludCAgICAgICAgICAgICBhZ2VudHhfc3ViYWdlbnQgPSAxOwogI2VuZGlmCiAgICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICp0cmFwaDsKIAorCiAjaWZuZGVmIFdJTjMyCiAgICAgLyoKICAgICAgKiBjbG9zZSBhbGwgbm9uLXN0YW5kYXJkIGZpbGUgZGVzY3JpcHRvcnMgd2UgbWF5IGhhdmUKQEAgLTY5Myw2ICs2NzUsNyBAQAogI2lmZGVmIFNJR0hVUAogICAgIHNpZ25hbChTSUdIVVAsIFNJR19JR04pOyAgIC8qIGRvIG5vdCB0ZXJtaW5hdGUgb24gZWFybHkgU0lHSFVQICovCiAjZW5kaWYKKwogI2lmZGVmIFNJR0lOVAogICAgIHNpZ25hbChTSUdJTlQsIHRlcm1faGFuZGxlcik7CiAjZW5kaWYKQEAgLTcwMCwxNSArNjgzLDE2IEBACiAgICAgc2lnbmFsKFNJR1BJUEUsIFNJR19JR04pOyAgIC8qICdJbmxpbmUnIGZhaWx1cmUgb2Ygd2F5d2FyZCByZWFkZXJzICovCiAjZW5kaWYKIAotI2lmZGVmIFNJR0hVUAotICAgIHNpZ25hbChTSUdIVVAsIFNJR19JR04pOyAgIC8qIGRvIG5vdCB0ZXJtaW5hdGUgb24gZWFybHkgU0lHSFVQICovCi0jZW5kaWYKLQogICAgIC8qCiAgICAgICogcmVnaXN0ZXIgb3VyIGNvbmZpZ3VyYXRpb24gaGFuZGxlcnMgbm93IHNvIC1IIHByb3Blcmx5IGRpc3BsYXlzIHRoZW0gCiAgICAgICovCiAgICAgc25tcHRyYXBkX3JlZ2lzdGVyX2NvbmZpZ3MoICk7CisjaWZkZWYgTkVUU05NUF9VU0VfTVlTUUwKKyAgICBzbm1wdHJhcGRfcmVnaXN0ZXJfc3FsX2NvbmZpZ3MoICk7CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KICAgICBpbml0X3VzbV9jb25mKCAic25tcHRyYXBkIiApOworI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLwogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAic25tcFRyYXBkQWRkciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfdHJhcGRfYWRkcmVzcywgZnJlZV90cmFwZF9hZGRyZXNzLCAic3RyaW5nIik7CiAKQEAgLTcyNSwyNyArNzA5LDE1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfY29uZmlnX2FnZW50Z3JvdXAsIE5VTEwsICJncm91cGlkIik7CiAjZW5kaWYKICAgICAKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgImxvZ09wdGlvbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfY29uZmlnX2xvZ09wdGlvbiwgTlVMTCwgInN0cmluZyIpOwotCiAgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXB0cmFwZCIsICJkb05vdEZvcmsiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19kb05vdEZvcmssIE5VTEwsICIoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIpOwogCi0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXB0cmFwZCIsICJwcmludEV2ZW50TnVtYmVycyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfY29uZmlnX3ByaW50RXZlbnROdW1iZXJzLCBOVUxMLCAiKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiKTsKLQogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAiaWdub3JlQXV0aEZhaWx1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19pZ25vcmVBdXRoRmFpbHVyZSwgTlVMTCwgIigxfHllc3x0cnVlfDB8bm98ZmFsc2UpIik7CiAKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgIm91dHB1dE9wdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfY29uZmlnX291dHB1dE9wdGlvbiwgTlVMTCwgInN0cmluZyIpOwogCi0jaWZkZWYgV0lOMzIKLSAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCBCVUZTSVopOwotI2Vsc2UKLSAgICBzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTEJGLCBCVUZTSVopOwotI2VuZGlmCi0KICAgICAvKgogICAgICAqIEFkZCBzb21lIG9wdGlvbnMgaWYgdGhleSBhcmUgYXZhaWxhYmxlLiAgCiAgICAgICovCkBAIC03NTMsMTEgKzcyNSwxMyBAQAogICAgIHN0cmNhdChvcHRpb25zLCAicDoiKTsKICNlbmRpZgogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICNpZmRlZiBXSU4zMgogICAgIHNubXBfbG9nX3N5c2xvZ25hbWUoYXBwX25hbWVfbG9uZyk7CiAjZWxzZQogICAgIHNubXBfbG9nX3N5c2xvZ25hbWUoYXBwX25hbWUpOwogI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiAgICAgLyoKICAgICAgKiBOb3cgcHJvY2VzcyBvcHRpb25zIG5vcm1hbGx5LiAgCkBAIC04MDMsNyArNzc3LDggQEAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ2QnOgotICAgICAgICAgICAgc25tcF9zZXRfZHVtcF9wYWNrZXQoMSk7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULCAxKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ0QnOgpAQCAtODExLDE3ICs3ODYsMjUgQEAKICAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKICAgICAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgRXZlbnQrKzsKLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGNhc2UgJ2YnOgogICAgICAgICAgICAgZG9mb3JrID0gMDsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ0YnOgogICAgICAgICAgICAgaWYgKG9wdGFyZyAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdHJhcDFfZm10X3N0cl9yZW1lbWJlciA9IG9wdGFyZzsKKyAgICAgICAgICAgICAgICBpZiAoKCBzdHJuY21wKCBvcHRhcmcsICJwcmludCIsICAgNSApID09IDAgKSB8fAorICAgICAgICAgICAgICAgICAgICAoIHN0cm5jbXAoIG9wdGFyZywgInN5c2xvZyIsICA2ICkgPT0gMCApIHx8CisgICAgICAgICAgICAgICAgICAgICggc3RybmNtcCggb3B0YXJnLCAiZXhlY3V0ZSIsIDcgKSA9PSAwICkpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogTmV3IHN0eWxlOiAidHlwZT1mb3JtYXQiICovCisgICAgICAgICAgICAgICAgICAgIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIgPSBzdHJkdXAob3B0YXJnKTsKKyAgICAgICAgICAgICAgICAgICAgY3AgPSBzdHJjaHIoIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIsICc9JyApOworICAgICAgICAgICAgICAgICAgICBpZiAoY3ApCisgICAgICAgICAgICAgICAgICAgICAgICAqY3AgPSAnICc7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgLyogT2xkIHN0eWxlOiBpbXBsaWNpdGx5ICJwcmludD1mb3JtYXQiICovCisgICAgICAgICAgICAgICAgICAgIHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIgPSBtYWxsb2Moc3RybGVuKG9wdGFyZykgKyA3KTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50ZiggdHJhcDFfZm10X3N0cl9yZW1lbWJlciwgInByaW50ICVzIiwgb3B0YXJnICk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICB1c2FnZSgpOwogICAgICAgICAgICAgICAgIGV4aXQoMSk7CkBAIC04NjcsNTIgKzg1MCw4IEBACiAKIAljYXNlICdTJzoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAotICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogLVMgb3B0aW9uIGlzIGRlcHJlY2F0ZWQ7IHVzZSAtTHMgPGZhY2lsaXR5PiBpbnN0ZWFkXG4iKTsKLSAgICAgICAgICAgIGRlcG1zZyA9IDE7Ci0gICAgICAgICAgICBpZiAob3B0YXJnICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzd2l0Y2ggKCpvcHRhcmcpIHsKLSAgICAgICAgICAgICAgICBjYXNlICdkJzoKLSAgICAgICAgICAgICAgICBjYXNlICdEJzoKLSAgICAgICAgICAgICAgICAgICAgRmFjaWxpdHkgPSBMT0dfREFFTU9OOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICdpJzoKLSAgICAgICAgICAgICAgICBjYXNlICdJJzoKLSAgICAgICAgICAgICAgICAgICAgRmFjaWxpdHkgPSBMT0dfSU5GTzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMCc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMMDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMSc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMMTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMic6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMMjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnMyc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMMzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnNCc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMNDsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnNSc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMNTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnNic6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMNjsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgY2FzZSAnNyc6Ci0gICAgICAgICAgICAgICAgICAgIEZhY2lsaXR5ID0gTE9HX0xPQ0FMNzsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJpbnZhbGlkIHN5c2xvZyBmYWNpbGl0eTogLVMlY1xuIiwqb3B0YXJnKTsKLSAgICAgICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAibm8gc3lzbG9nIGZhY2lsaXR5IHNwZWNpZmllZFxuIik7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogLVMgb3B0aW9uIGhhcyBiZWVuIHdpdGhkcmF3bjsgdXNlIC1McyA8ZmFjaWxpdHk+IGluc3RlYWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ20nOgpAQCAtOTQwLDE2ICs4NzksOCBAQAogCiAgICAgICAgIGNhc2UgJ28nOgogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAtbyBvcHRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIC1MZiA8ZmlsZT4gaW5zdGVhZFxuIik7Ci0gICAgICAgICAgICBpZiAob3B0YXJnICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBsb2dmaWxlID0gb3B0YXJnOwotICAgICAgICAgICAgICAgIHNubXBfZW5hYmxlX2ZpbGVsb2cob3B0YXJnLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBFTkRfTE9HRklMRVMpKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdXNhZ2UoKTsKLSAgICAgICAgICAgICAgICBleGl0KDEpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAiV2FybmluZzogLW8gb3B0aW9uIGhhcyBiZWVuIHdpdGhkcmF3bjsgdXNlIC1MZiA8ZmlsZT4gaW5zdGVhZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnTyc6CkBAIC05ODIsMjAgKzkxMywxNCBAQAogCiAgICAgICAgIGNhc2UgJ1AnOgogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAgICAgICAgICJXYXJuaW5nOiAtUCBvcHRpb24gaXMgZGVwcmVjYXRlZDsgdXNlIC1mIC1MZSBpbnN0ZWFkXG4iKTsKLSAgICAgICAgICAgIGRvZm9yayA9IDA7Ci0gICAgICAgICAgICBzbm1wX2VuYWJsZV9zdGRlcnJsb2coKTsKKyAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IC1QIG9wdGlvbiBoYXMgYmVlbiB3aXRoZHJhd247IHVzZSAtZiAtTGUgaW5zdGVhZFxuIik7CisgICAgICAgICAgICBleGl0KDEpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAncyc6CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IC1zIG9wdGlvbiBpcyBkZXByZWNhdGVkOyB1c2UgLUxzZCBpbnN0ZWFkXG4iKTsKLSAgICAgICAgICAgIGRlcG1zZyA9IDE7Ci0jaWZkZWYgV0lOMzIKLSAgICAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChhcHBfbmFtZV9sb25nLCBGYWNpbGl0eSk7Ci0jZWxzZQotICAgICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KGFwcF9uYW1lLCBGYWNpbGl0eSk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgIldhcm5pbmc6IC1zIG9wdGlvbiBoYXMgYmVlbiB3aXRoZHJhd247IHVzZSAtTHNkIGluc3RlYWRcbiIpOworICAgICAgICAgICAgZXhpdCgxKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3QnOgpAQCAtMTAwOCwxOSArOTMzLDE4IEBACiAgICAgICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmVjcDsKIAogICAgICAgICAgICAgICAgIHVpZCA9IHN0cnRvdWwob3B0YXJnLCAmZWNwLCAxMCk7CisjaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICiAgICAgICAgICAgICAgICAgaWYgKCplY3ApIHsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHBhc3N3ZCAgKmluZm87CisKICAgICAgICAgICAgICAgICAgICAgaW5mbyA9IGdldHB3bmFtKG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmZvKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB1aWQgPSBpbmZvLT5wd191aWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHVpZCA9IGluZm8gPyBpbmZvLT5wd191aWQgOiAtMTsKKyAgICAgICAgICAgICAgICAgICAgZW5kcHdlbnQoKTsKKyAgICAgICAgICAgICAgICB9CiAjZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiQmFkIHVzZXIgaWQ6ICVzXG4iLCBvcHRhcmcpOwotICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgxKTsKLSNpZiBIQVZFX0dFVFBXTkFNICYmIEhBVkVfUFdEX0gKLSAgICAgICAgICAgICAgICAgICAgfQotI2VuZGlmCisgICAgICAgICAgICAgICAgaWYgKHVpZCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgdXNlciBpZDogJXNcbiIsIG9wdGFyZyk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1VTRVJJRCwgdWlkKTsKQEAgLTEwMzYsNiArOTYwLDcgQEAKICAgICAgICAgICAgIGV4aXQoMCk7CiAgICAgICAgICAgICBicmVhazsKIAorI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkgJiYgIWRlZmluZWQoTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgpCiAgICAgICAgIGNhc2UgJ3gnOgogICAgICAgICAgICAgaWYgKG9wdGFyZyAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCkBAIC0xMDQ2LDYgKzk3MSwxMSBAQAogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgIGNhc2UgJ1gnOgorICAgICAgICAgICAgYWdlbnR4X3N1YmFnZW50ID0gMDsKKyAgICAgICAgICAgIGJyZWFrOworI2VuZGlmCisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiaW52YWxpZCBvcHRpb246IC0lY1xuIiwgYXJnKTsKICAgICAgICAgICAgIHVzYWdlKCk7CkBAIC0xMDg3LDM0ICsxMDE3LDI1IEBACiAgICAgICogRG9uJ3QgdHJ5IHRoaXMgYXQgaG9tZSwgY2hpbGRyZW4hCiAgICAgICovCiAgICAgaWYgKDAgPT0gc25tcF9nZXRfZG9fbG9nZ2luZygpKSB7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX1BSRV9IQU5ETEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXNsb2dfaGFuZGxlcik7CiAgICAgICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfTE9HOwogICAgICAgICBzbm1wX2VuYWJsZV9zeXNsb2coKTsKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCisgICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfZ2xvYmFsX3RyYXBoYW5kbGVyKE5FVFNOTVBUUkFQRF9QUkVfSEFORExFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRfaGFuZGxlcik7CisgICAgICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfTE9HOworICAgICAgICBzbm1wX2VuYWJsZV9zdGRlcnIoKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgfSBlbHNlIHsKICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX1BSRV9IQU5ETEVSLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9oYW5kbGVyKTsKICAgICAgICAgdHJhcGgtPmF1dGh0eXBlcyA9IFRSQVBfQVVUSF9MT0c7CiAgICAgfQogCi0gICAgaWYgKEV2ZW50KSB7Ci0gICAgICAgIHRyYXBoID0gbmV0c25tcF9hZGRfdHJhcGhhbmRsZXIoZXZlbnRfaGFuZGxlciwgcmlzaW5nQWxhcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSChyaXNpbmdBbGFybSkpOwotICAgICAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0xPRzsKLQotICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX3RyYXBoYW5kbGVyKGV2ZW50X2hhbmRsZXIsIGZhbGxpbmdBbGFybSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKGZhbGxpbmdBbGFybSkpOwotICAgICAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0xPRzsKLQotICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX3RyYXBoYW5kbGVyKGV2ZW50X2hhbmRsZXIsIHVuYXZhaWxhYmxlQWxhcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1bmF2YWlsYWJsZUFsYXJtKSk7Ci0gICAgICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfTE9HOwotCS8qIFhYWCAtIG1pZ2h0IGJlIHdvcnRoIHNldHRpbmcgc29tZSAibWFnaWMgZGF0YSIKLQkgKiBpbiB0aGUgdHJhcGhhbmRsZXIgc3RydWN0dXJlIHRoYXQgJ2V2ZW50X2hhbmRsZXInCi0JICogY2FuIHVzZSB0byBhdm9pZCBjaGVja2luZyB0aGUgdHJhcCBPSUQgdmFsdWVzLgotCSAqLwotICAgIH0KLQogI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkgJiYgIWRlZmluZWQoTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgpCiAgICAgLyoKICAgICAgKiB3ZSdyZSBhbiBhZ2VudHggc3ViYWdlbnQ/IApAQCAtMTE0NSw2ICsxMDY2LDkgQEAKICAgICBpbml0X2FnZW50KCJzbm1wdHJhcGQiKTsKIAogI2lmIGRlZmluZWQoVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRSkgJiYgIWRlZmluZWQoTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgpCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HCisgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocmVnaXN0ZXJfc25tcEVuZ2luZV9zY2FsYXJzX2NvbnRleHQpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HICovCiAgICAgLyoKICAgICAgKiBpbml0aWFsaXplIGxvY2FsIG1vZHVsZXMgCiAgICAgICovCkBAIC0xMTg1LDYgKzExMDksOSBAQAogICAgICAgICBleHRlcm4gdm9pZCBpbml0X3JlZ2lzdGVyX25zVmFjbV9jb250ZXh0KGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKICNpZmRlZiBVU0lOR19TTk1QVjNfVVNNVVNFUl9NT0RVTEUKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcKKyAgICAgICAgbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoaW5pdF9yZWdpc3Rlcl91c21Vc2VyX2NvbnRleHQpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HICovCiAgICAgICAgIGV4dGVybiB2b2lkIGluaXRfcmVnaXN0ZXJfdXNtVXNlcl9jb250ZXh0KGNvbnN0IGNoYXIgKik7CiAgICAgICAgIC8qIHJlZ2lzdGVyIG91cnNlbHZlcyBhcyBoYXZpbmcgYSBVU00gdXNlciBkYXRhYmFzZSAqLwogICAgICAgICBpbml0X3JlZ2lzdGVyX3VzbVVzZXJfY29udGV4dCgic25tcHRyYXBkIik7CkBAIC0xMTkzLDYgKzExMjAsOSBAQAogICAgICAgICAvKiByZWdpc3RlciBuZXQtc25tcCB2YWNtIGV4dGVuc2lvbnMgKi8KICAgICAgICAgaW5pdF9yZWdpc3Rlcl9uc1ZhY21fY29udGV4dCgic25tcHRyYXBkIik7CiAjZW5kaWYKKyNpZmRlZiBVU0lOR19UTFNUTV9NSUJfU05NUFRMU1RNQ0VSVFRPVFNOVEFCTEVfTU9EVUxFCisgICAgICAgIGluaXRfc25tcFRsc3RtQ2VydFRvVFNOVGFibGVfY29udGV4dCgic25tcHRyYXBkIik7CisjZW5kaWYKICAgICB9CiAjZW5kaWYKIApAQCAtMTIxOSwxMCArMTE0OSw3IEBACiAjZW5kaWYKIAogICAgIGlmICh0cmFwMV9mbXRfc3RyX3JlbWVtYmVyKSB7Ci0gICAgICAgIGZyZWVfdHJhcDFfZm10KCk7Ci0gICAgICAgIGZyZWVfdHJhcDJfZm10KCk7Ci0gICAgICAgIHByaW50X2Zvcm1hdDEgPSBzdHJkdXAodHJhcDFfZm10X3N0cl9yZW1lbWJlcik7Ci0gICAgICAgIHByaW50X2Zvcm1hdDIgPSBzdHJkdXAodHJhcDFfZm10X3N0cl9yZW1lbWJlcik7CisgICAgICAgIHBhcnNlX2Zvcm1hdCggTlVMTCwgdHJhcDFfZm10X3N0cl9yZW1lbWJlciApOwogICAgIH0KIAogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIApAQCAtMTIzOCwxMyArMTE2NSw3MSBAQAogICAgICAqIGlmIG5vIGxvZ2dpbmcgb3B0aW9ucyBvbiBjb21tYW5kIGxpbmUgb3IgaW4gY29uZiBmaWxlcywgdXNlIHN5c2xvZwogICAgICAqLwogICAgIGlmICgwID09IHNubXBfZ2V0X2RvX2xvZ2dpbmcoKSkgeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAjaWZkZWYgV0lOMzIKICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KGFwcF9uYW1lX2xvbmcsIEZhY2lsaXR5KTsKICNlbHNlCiAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChhcHBfbmFtZSwgRmFjaWxpdHkpOwogI2VuZGlmICAgICAgICAKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgfQogCisgICAgaWYgKGxpc3Rlbl9wb3J0cykKKyAgICAgICAgY3AgPSBsaXN0ZW5fcG9ydHM7CisgICAgZWxzZQorICAgICAgICBjcCA9IGRlZmF1bHRfcG9ydDsKKworICAgIHdoaWxlIChjcCAhPSBOVUxMKSB7CisgICAgICAgIGNoYXIgKnNlcCA9IHN0cmNocihjcCwgJywnKTsKKworICAgICAgICBpZiAoc2VwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICpzZXAgPSAwOworICAgICAgICB9CisKKyAgICAgICAgdHJhbnNwb3J0ID0gbmV0c25tcF90cmFuc3BvcnRfb3Blbl9zZXJ2ZXIoInNubXB0cmFwIiwgY3ApOworICAgICAgICBpZiAodHJhbnNwb3J0ID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBvcGVuICVzIC0tIGVycm5vICVkIChcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgY3AsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgc25tcHRyYXBkX2Nsb3NlX3Nlc3Npb25zKHNlc3NfbGlzdCk7CisgICAgICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc3MgPSBzbm1wdHJhcGRfYWRkX3Nlc3Npb24odHJhbnNwb3J0KTsKKyAgICAgICAgICAgIGlmIChzcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBTaG91bGRuJ3QgaGFwcGVuPyAgV2UgaGF2ZSBhbHJlYWR5IG9wZW5lZCB0aGUgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICogc3VjY2Vzc2Z1bGx5IHNvIHdoYXQgY291bGQgaGF2ZSBnb25lIHdyb25nPyAgCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgc25tcHRyYXBkX2Nsb3NlX3Nlc3Npb25zKHNlc3NfbGlzdCk7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkbid0IG9wZW4gc25tcCAtICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgICAgICAgICBTT0NLX0NMRUFOVVA7CisgICAgICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgc3MtPm5leHQgPSBzZXNzX2xpc3Q7CisgICAgICAgICAgICAgICAgc2Vzc19saXN0ID0gc3M7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBQcm9jZXNzIG5leHQgbGlzdGVuIGFkZHJlc3MsIGlmIHRoZXJlIGlzIG9uZS4gIAorICAgICAgICAgKi8KKworICAgICAgICBpZiAoc2VwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICpzZXAgPSAnLCc7CisgICAgICAgICAgICBjcCA9IHNlcCArIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjcCA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgU05NUF9GUkVFKGxpc3Rlbl9wb3J0cyk7IC8qIGRvbmUgd2l0aCB0aGVtICovCisKKyNpZmRlZiBORVRTTk1QX1VTRV9NWVNRTAorICAgIGlmKCBuZXRzbm1wX215c3FsX2luaXQoKSApIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJNeVNRTCBpbml0aWFsaXphdGlvbiBmYWlsZWRcbiIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyNlbmRpZgorCiAjaWZuZGVmIFdJTjMyCiAgICAgLyoKICAgICAgKiBmb3JrIHRoZSBwcm9jZXNzIHRvIHRoZSBiYWNrZ3JvdW5kIGlmIHdlIGFyZSBub3QgcHJpbnRpbmcgdG8gc3RkZXJyIApAQCAtMTI5NCw1OCArMTI3OSw2IEBACiAjZW5kaWYKIAogICAgIHNubXBfbG9nKExPR19JTkZPLCAiTkVULVNOTVAgdmVyc2lvbiAlc1xuIiwgbmV0c25tcF9nZXRfdmVyc2lvbigpKTsKLSAgICBpZiAoZGVwbXNnKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiLXMgYW5kIC1TIG9wdGlvbnMgYXJlIGRlcHJlY2F0ZWQ7IHVzZSAtTHMgPGZhY2lsaXR5PiBpbnN0ZWFkXG4iKTsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3Rlbl9wb3J0cykKLSAgICAgICAgY3AgPSBsaXN0ZW5fcG9ydHM7Ci0gICAgZWxzZQotICAgICAgICBjcCA9IGRlZmF1bHRfcG9ydDsKLQotICAgIHdoaWxlIChjcCAhPSBOVUxMKSB7Ci0gICAgICAgIGNoYXIgKnNlcCA9IHN0cmNocihjcCwgJywnKTsKLQotICAgICAgICBpZiAoc2VwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpzZXAgPSAwOwotICAgICAgICB9Ci0KLSAgICAgICAgdHJhbnNwb3J0ID0gbmV0c25tcF90cmFuc3BvcnRfb3Blbl9zZXJ2ZXIoInNubXB0cmFwIiwgY3ApOwotICAgICAgICBpZiAodHJhbnNwb3J0ID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBvcGVuICVzIC0tIGVycm5vICVkIChcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgY3AsIGVycm5vLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICAgICAgc25tcHRyYXBkX2Nsb3NlX3Nlc3Npb25zKHNlc3NfbGlzdCk7Ci0gICAgICAgICAgICBTT0NLX0NMRUFOVVA7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3MgPSBzbm1wdHJhcGRfYWRkX3Nlc3Npb24odHJhbnNwb3J0KTsKLSAgICAgICAgICAgIGlmIChzcyA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBTaG91bGRuJ3QgaGFwcGVuPyAgV2UgaGF2ZSBhbHJlYWR5IG9wZW5lZCB0aGUgdHJhbnNwb3J0Ci0gICAgICAgICAgICAgICAgICogc3VjY2Vzc2Z1bGx5IHNvIHdoYXQgY291bGQgaGF2ZSBnb25lIHdyb25nPyAgCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgc25tcHRyYXBkX2Nsb3NlX3Nlc3Npb25zKHNlc3NfbGlzdCk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0cmFuc3BvcnQpOwotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZG4ndCBvcGVuIHNubXAgLSAlcyIsIHN0cmVycm9yKGVycm5vKSk7Ci0gICAgICAgICAgICAgICAgU09DS19DTEVBTlVQOwotICAgICAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNzLT5uZXh0ID0gc2Vzc19saXN0OwotICAgICAgICAgICAgICAgIHNlc3NfbGlzdCA9IHNzOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogUHJvY2VzcyBuZXh0IGxpc3RlbiBhZGRyZXNzLCBpZiB0aGVyZSBpcyBvbmUuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgaWYgKHNlcCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAqc2VwID0gJywnOwotICAgICAgICAgICAgY3AgPSBzZXAgKyAxOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgY3AgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfQogCiAgICAgLyoKICAgICAgKiBpZ25vcmUgZWFybHkgc2lnaHVwIGR1cmluZyBzdGFydHVwCkBAIC0xMzg4LDY1ICsxMzIxLDggQEAKICNpZmRlZiBXSU4zMlNFUlZJQ0UKICAgICB0cmFwZF9zdGF0dXMgPSBTTk1QVFJBUERfUlVOTklORzsKICNlbmRpZgotICAgIHdoaWxlIChuZXRzbm1wX3J1bm5pbmcpIHsKLSAgICAgICAgaWYgKHJlY29uZmlnKSB7Ci0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBJZiB3ZSBhcmUgbG9nZ2luZyB0byBhIGZpbGUsIHJlY2VpcHQgb2YgU0lHSFVQIGFsc28KLSAgICAgICAgICAgICAgICAgKiBpbmRpY2F0ZXMgdGhlIHRoZSBsb2cgZmlsZSBzaG91bGQgYmUgY2xvc2VkIGFuZAotICAgICAgICAgICAgICAgICAqIHJlLW9wZW5lZC4gIFRoaXMgaXMgdXNlZnVsIGZvciB1c2VycyB0aGF0IHdhbnQgdG8KLSAgICAgICAgICAgICAgICAgKiByb3RhdGUgbG9ncyBpbiBhIG1vcmUgcHJlZGljdGFibGUgbWFubmVyLgotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0KCk7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0lORk8sICJORVQtU05NUCB2ZXJzaW9uICVzIHJlc3RhcnRlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF92ZXJzaW9uKCkpOwotICAgICAgICAgICAgdHJhcGRfdXBkYXRlX2NvbmZpZygpOwotICAgICAgICAgICAgaWYgKHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIpIHsKLSAgICAgICAgICAgICAgICBmcmVlX3RyYXAxX2ZtdCgpOwotICAgICAgICAgICAgICAgIGZyZWVfdHJhcDJfZm10KCk7Ci0gICAgICAgICAgICAgICAgcHJpbnRfZm9ybWF0MSA9IHN0cmR1cCh0cmFwMV9mbXRfc3RyX3JlbWVtYmVyKTsKLSAgICAgICAgICAgICAgICBwcmludF9mb3JtYXQyID0gc3RyZHVwKHRyYXAxX2ZtdF9zdHJfcmVtZW1iZXIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmVjb25maWcgPSAwOwotICAgICAgICB9Ci0gICAgICAgIG51bWZkcyA9IDA7Ci0gICAgICAgIEZEX1pFUk8oJnJlYWRmZHMpOwotICAgICAgICBGRF9aRVJPKCZ3cml0ZWZkcyk7Ci0gICAgICAgIEZEX1pFUk8oJmV4Y2VwdGZkcyk7Ci0gICAgICAgIGJsb2NrID0gMDsKLSAgICAgICAgdHZwID0gJnRpbWVvdXQ7Ci0gICAgICAgIHRpbWVyY2xlYXIodHZwKTsKLSAgICAgICAgdHZwLT50dl9zZWMgPSA1OwotICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKCZudW1mZHMsICZyZWFkZmRzLCB0dnAsICZibG9jayk7Ci0gICAgICAgIGlmIChibG9jayA9PSAxKQotICAgICAgICAgICAgdHZwID0gTlVMTDsgICAgICAgICAvKiBibG9jayB3aXRob3V0IHRpbWVvdXQgKi8KLSAgICAgICAgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvKCZudW1mZHMsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNlcHRmZHMpOwotICAgICAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZyZWFkZmRzLCAmd3JpdGVmZHMsICZleGNlcHRmZHMsIHR2cCk7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmTm93LCAwKTsKLSAgICAgICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICAgICAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMoJmNvdW50LCAmcmVhZGZkcywgJndyaXRlZmRzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmV4Y2VwdGZkcyk7Ci0gICAgICAgICAgICAvKiBJZiB0aGVyZSBhcmUgYW55IG1vcmUgZXZlbnRzIGFmdGVyIGV4dGVybmFsIGV2ZW50cywgdGhlbgotICAgICAgICAgICAgICogdHJ5IFNOTVAgZXZlbnRzLiAqLwotICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkgewotICAgICAgICAgICAgICAgIHNubXBfcmVhZCgmcmVhZGZkcyk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgc3dpdGNoIChjb3VudCkgewotICAgICAgICAgICAgY2FzZSAwOgotICAgICAgICAgICAgICAgIHNubXBfdGltZW91dCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAtMToKLSAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRUlOVFIpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigic2VsZWN0Iik7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF9ydW5uaW5nID0gMDsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzZWxlY3QgcmV0dXJuZWQgJWRcbiIsIGNvdW50KTsKLSAgICAgICAgICAgICAgICBuZXRzbm1wX3J1bm5pbmcgPSAwOwotICAgICAgICAgICAgfQotCXJ1bl9hbGFybXMoKTsKLSAgICB9CisKKyAgICBzbm1wdHJhcGRfbWFpbl9sb29wKCk7CiAKICAgICBpZiAoc25tcF9nZXRfZG9fbG9nZ2luZygpKSB7CiAgICAgICAgIHN0cnVjdCB0bSAgICAgICp0bTsKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHRyYXBkX2F1dGguYyBiL2FwcHMvc25tcHRyYXBkX2F1dGguYwppbmRleCAxMTlkZTU4Li5iZTIxZTVlIDEwMDY0NAotLS0gYS9hcHBzL3NubXB0cmFwZF9hdXRoLmMKKysrIGIvYXBwcy9zbm1wdHJhcGRfYXV0aC5jCkBAIC00LDExICs0LDEzIEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2Vsc2UKKyNpZiBIQVZFX1NZU19UWVBFU19ICiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKIApAQCAtMTI2LDggKzEyOCwxMCBAQAogICAgICAgICAvKiBwYXNzIHRoZSBQRFUgdG8gdGhlIFZBQ00gcm91dGluZSBmb3IgaGFuZGxpbmcgYXV0aG9yaXphdGlvbiAqLwogICAgICAgICBERUJVR01TR1RMKCgic25tcHRyYXBkOmF1dGgiLCAiQ2FsbGluZyBWQUNNIGZvciBjaGVja2luZyBwaGFzZSAlZDolc1xuIiwKICAgICAgICAgICAgICAgICAgICAgaSwgc2VfZmluZF9sYWJlbF9pbl9zbGlzdChWQUNNX1ZJRVdfRU5VTV9OQU1FLCBpKSkpOwotICAgICAgICBpZiAodmFjbV9jaGVja192aWV3KG5ld3BkdSwgdmFyLT52YWwub2JqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyLT52YWxfbGVuL3NpemVvZihvaWQpLCAwLCBpKSA9PSBWQUNNX1NVQ0NFU1MpIHsKKyAgICAgICAgaWYgKHZhY21fY2hlY2tfdmlld19jb250ZW50cyhuZXdwZHUsIHZhci0+dmFsLm9iamlkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhci0+dmFsX2xlbi9zaXplb2Yob2lkKSwgMCwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUNNX0NIRUNLX1ZJRVdfQ09OVEVOVFNfRE5FX0NPTlRFWFRfT0spCisgICAgICAgICAgICA9PSBWQUNNX1NVQ0NFU1MpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdHJhcGQ6YXV0aCIsICIgIHJlc3VsdDogYXV0aG9yaXplZFxuIikpOwogICAgICAgICAgICAgcmV0IHw9IDEgPDwgaTsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHRyYXBkX2RzLmggYi9hcHBzL3NubXB0cmFwZF9kcy5oCmluZGV4IDU1YzEyMjYuLjAzZWJhMTQgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYXBkX2RzLmgKKysrIGIvYXBwcy9zbm1wdHJhcGRfZHMuaApAQCAtMSw3ICsxLDEyIEBACiAjaWZuZGVmIFNOTVBUUkFQRF9EU19ICiAjZGVmaW5lIFNOTVBUUkFQRF9EU19ICiAKLS8qIHRoZXNlIG11c3Qgbm90IGNvbmZsaWN0IHdpdGggYWdlbnQncyBEUyBib29sZWFucyAqLworLyogYm9vbGVhbnMKKyAqCisgKiBXQVJOSU5HOiBUaGVzZSBtdXN0IG5vdCBjb25mbGljdCB3aXRoIHRoZSBhZ2VudCdzIERTIGJvb2xlYW5zCisgKiBJZiB5b3UgZGVmaW5lIGFkZGl0aW9uYWwgZW50cmllcyBoZXJlLCBjaGVjayBpbiA8YWdlbnQvZHNfYWdlbnQuaD4gZmlyc3QKKyAqICAoYW5kIGNvbnNpZGVyIHJlcGVhdGluZyB0aGUgZGVmaW5pdGlvbnMgdGhlcmUpICovCisKICNkZWZpbmUgTkVUU05NUF9EU19BUFBfTlVNRVJJQ19JUCAgICAgICAxNgogI2RlZmluZSBORVRTTk1QX0RTX0FQUF9OT19BVVRIT1JJWkFUSU9OIDE3CiAKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMgYi9hcHBzL3NubXB0cmFwZF9oYW5kbGVycy5jCmluZGV4IDM3Y2E1YWIuLjVhOGUzYzggMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmMKKysrIGIvYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtMTQsMTAgKzE1LDEwIEBACiAjZW5kaWYKICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2Vsc2UKKyNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKICNpZiBIQVZFX1NZU19XQUlUX0gKQEAgLTM3LDEwICszOCwxNyBAQAogI2luY2x1ZGUgInNubXB0cmFwZF9sb2cuaCIKICNpbmNsdWRlICJub3RpZmljYXRpb24tbG9nLW1pYi9ub3RpZmljYXRpb25fbG9nLmgiCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihhZGRfZGVmYXVsdF90cmFwaGFuZGxlciwgc25tcHRyYXBkKQorCiBjaGFyICpzeXNsb2dfZm9ybWF0MSA9IE5VTEw7CiBjaGFyICpzeXNsb2dfZm9ybWF0MiA9IE5VTEw7CiBjaGFyICpwcmludF9mb3JtYXQxICA9IE5VTEw7CiBjaGFyICpwcmludF9mb3JtYXQyICA9IE5VTEw7CitjaGFyICpleGVjX2Zvcm1hdDEgICA9IE5VTEw7CitjaGFyICpleGVjX2Zvcm1hdDIgICA9IE5VTEw7CisKK2ludCAgIFN5c2xvZ1RyYXAgPSAwOworaW50ICAgZHJvcGF1dGggPSAwOwogCiBjb25zdCBjaGFyICAgICAqdHJhcDFfc3RkX3N0ciA9ICIlLjR5LSUuMm0tJS4ybCAlLjJoOiUuMmo6JS4yayAlQiBbJWJdICh2aWEgJUEgWyVhXSk6ICVOXG5cdCVXIFRyYXAgKCVxKSBVcHRpbWU6ICUjVFxuJXZcbiI7CiBjb25zdCBjaGFyICAgICAqdHJhcDJfc3RkX3N0ciA9ICIlLjR5LSUuMm0tJS4ybCAlLjJoOiUuMmo6JS4yayAlQiBbJWJdOlxuJXZcbiI7CkBAIC04MSwxOSArODksMjcgQEAKICAgICBjaGFyICAgICAgICAgICAqY3B0ciwgKmNwOwogICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7CiAgICAgaW50ICAgICAgICAgICAgIGZsYWdzID0gMDsKKyAgICBjaGFyICAgICAgICAgICAqZm9ybWF0ID0gTlVMTDsKIAogICAgIG1lbXNldCggYnVmLCAwLCBzaXplb2YoYnVmKSk7CiAgICAgbWVtc2V0KG9idWYsIDAsIHNpemVvZihvYnVmKSk7CiAgICAgY3B0ciA9IGNvcHlfbndvcmQobGluZSwgYnVmLCBzaXplb2YoYnVmKSk7CisKKyAgICBpZiAoIGJ1ZlswXSA9PSAnLScgJiYgYnVmWzFdID09ICdGJyApIHsKKyAgICAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGZvcm1hdCA9IHN0cmR1cCggYnVmICk7CisgICAgICAgIGNwdHIgPSBjb3B5X253b3JkKGNwdHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgIH0KICAgICBpZiAoICFjcHRyICkgewotICAgICAgICBjb25maWdfcGVycm9yKCJNaXNzaW5nIHRyYXBoYW5kbGUgY29tbWFuZCIpOworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiTWlzc2luZyB0cmFwaGFuZGxlIGNvbW1hbmQgKCVzKSIsIGJ1Zik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6dHJhcGhhbmRsZSIsICJyZWdpc3RlcmluZyBoYW5kbGVyIGZvcjogIikpOwogICAgIGlmICghc3RyY21wKGJ1ZiwgImRlZmF1bHQiKSkgewogICAgICAgICBERUJVR01TRygoInJlYWRfY29uZmlnOnRyYXBoYW5kbGUiLCAiZGVmYXVsdCIpKTsKLSAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9kZWZhdWx0X3RyYXBoYW5kbGVyKCBjb21tYW5kX2hhbmRsZXIgKTsKKyAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX0RFRkFVTFRfSEFORExFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZF9oYW5kbGVyICk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY3AgPSBidWYrc3RybGVuKGJ1ZiktMTsKICAgICAgICAgaWYgKCAqY3AgPT0gJyonICkgewpAQCAtMTA4LDExICsxMjQsOCBAQAogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGlmICghcmVhZF9vYmppZChidWYsIG9idWYsICZvbGVuKSkgewotICAgICAgICAgICAgY2hhciAgICAgICAgICAgIGJ1ZjFbU1RSSU5HTUFYXTsKLSAgICAgICAgICAgIHNucHJpbnRmKGJ1ZjEsICBzaXplb2YoYnVmMSksCi0gICAgICAgICAgICAgICAgICAgICJCYWQgdHJhcCBPSUQgaW4gdHJhcGhhbmRsZSBkaXJlY3RpdmU6ICVzIiwgYnVmKTsKLSAgICAgICAgICAgIGJ1ZjFbIHNpemVvZihidWYxKS0xIF0gPSAwOwotICAgICAgICAgICAgY29uZmlnX3BlcnJvcihidWYxKTsKKwkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkJhZCB0cmFwIE9JRCBpbiB0cmFwaGFuZGxlIGRpcmVjdGl2ZTogJXMiLAorCQkJCSBidWYpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgIERFQlVHTVNHT0lEKCgicmVhZF9jb25maWc6dHJhcGhhbmRsZSIsIG9idWYsIG9sZW4pKTsKQEAgLTEyNSw2ICsxMzgsOCBAQAogICAgICAgICB0cmFwaC0+ZmxhZ3MgPSBmbGFnczsKICAgICAgICAgdHJhcGgtPmF1dGh0eXBlcyA9IFRSQVBfQVVUSF9FWEU7CiAgICAgICAgIHRyYXBoLT50b2tlbiA9IHN0cmR1cChjcHRyKTsKKyAgICAgICAgaWYgKGZvcm1hdCkKKyAgICAgICAgICAgIHRyYXBoLT5mb3JtYXQgPSBmb3JtYXQ7CiAgICAgfQogfQogCkBAIC0xMzgsMTcgKzE1MywyNiBAQAogICAgIGNoYXIgICAgICAgICAgICpjcHRyLCAqY3A7CiAgICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICp0cmFwaDsKICAgICBpbnQgICAgICAgICAgICAgZmxhZ3MgPSAwOworICAgIGNoYXIgICAgICAgICAgICpmb3JtYXQgPSBOVUxMOwogCiAgICAgbWVtc2V0KCBidWYsIDAsIHNpemVvZihidWYpKTsKICAgICBtZW1zZXQob2J1ZiwgMCwgc2l6ZW9mKG9idWYpKTsKICAgICBjcHRyID0gY29weV9ud29yZChsaW5lLCBidWYsIHNpemVvZihidWYpKTsKKworICAgIGlmICggYnVmWzBdID09ICctJyAmJiBidWZbMV0gPT0gJ0YnICkgeworICAgICAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgZm9ybWF0ID0gc3RyZHVwKCBidWYgKTsKKyAgICAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgfQogICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpmb3J3YXJkIiwgInJlZ2lzdGVyaW5nIGZvcndhcmQgZm9yOiAiKSk7CiAgICAgaWYgKCFzdHJjbXAoYnVmLCAiZGVmYXVsdCIpKSB7CiAgICAgICAgIERFQlVHTVNHKCgicmVhZF9jb25maWc6Zm9yd2FyZCIsICJkZWZhdWx0IikpOwogICAgICAgICBpZiAoICFzdHJjbXAoIGNwdHIsICJhZ2VudHgiICkpCi0gICAgICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIoIGF4Zm9yd2FyZF9oYW5kbGVyICk7CisgICAgICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX2dsb2JhbF90cmFwaGFuZGxlcihORVRTTk1QVFJBUERfREVGQVVMVF9IQU5ETEVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBheGZvcndhcmRfaGFuZGxlciApOwogICAgICAgICBlbHNlCi0gICAgICAgICAgICB0cmFwaCA9IG5ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIoIGZvcndhcmRfaGFuZGxlciApOworICAgICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX0RFRkFVTFRfSEFORExFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9oYW5kbGVyICk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgY3AgPSBidWYrc3RybGVuKGJ1ZiktMTsKICAgICAgICAgaWYgKCAqY3AgPT0gJyonICkgewpAQCAtMTY0LDExICsxODgsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgaWYgKCFyZWFkX29iamlkKGJ1Ziwgb2J1ZiwgJm9sZW4pKSB7Ci0gICAgICAgICAgICBjaGFyICAgICAgICAgICAgYnVmMVtTVFJJTkdNQVhdOwotICAgICAgICAgICAgc25wcmludGYoYnVmMSwgIHNpemVvZihidWYxKSwKLSAgICAgICAgICAgICAgICAgICAgIkJhZCB0cmFwIE9JRCBpbiBmb3J3YXJkIGRpcmVjdGl2ZTogJXMiLCBidWYpOwotICAgICAgICAgICAgYnVmMVsgc2l6ZW9mKGJ1ZjEpLTEgXSA9IDA7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKGJ1ZjEpOworCSAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQmFkIHRyYXAgT0lEIGluIGZvcndhcmQgZGlyZWN0aXZlOiAlcyIsIGJ1Zik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgREVCVUdNU0dPSUQoKCJyZWFkX2NvbmZpZzpmb3J3YXJkIiwgb2J1Ziwgb2xlbikpOwpAQCAtMTg0LDIxICsyMDQsMjMgQEAKICAgICAgICAgdHJhcGgtPmZsYWdzID0gZmxhZ3M7CiAgICAgICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfTkVUOwogICAgICAgICB0cmFwaC0+dG9rZW4gPSBzdHJkdXAoY3B0cik7CisgICAgICAgIGlmIChmb3JtYXQpCisgICAgICAgICAgICB0cmFwaC0+Zm9ybWF0ID0gZm9ybWF0OwogICAgIH0KIH0KIAogCi1zdGF0aWMgdm9pZAordm9pZAogcGFyc2VfZm9ybWF0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQogewotICAgIGNoYXIgKmNwOworICAgIGNoYXIgKmNwLCAqc2VwOwogCiAgICAgLyoKICAgICAgKiBFeHRyYWN0IHRoZSBmaXJzdCB0b2tlbiBmcm9tIHRoZSB2YWx1ZQogICAgICAqIHdoaWNoIHRlbGxzIHVzIHdoaWNoIHN0eWxlIG9mIGZvcm1hdCB0aGlzIGlzCiAgICAgICovCiAgICAgY3AgPSBsaW5lOwotICAgIHdoaWxlICgqY3AgJiYgIWlzc3BhY2UoKmNwKSkKKyAgICB3aGlsZSAoKmNwICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkKICAgICAgICAgY3ArKzsKICAgICBpZiAoISgqY3ApKSB7CiAgICAgICAgIC8qCkBAIC0yMDksOCArMjMxLDkgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAorICAgIHNlcCA9IGNwOwogICAgICooY3ArKykgPSAnXDAnOwotICAgIHdoaWxlICgqY3AgJiYgIWlzc3BhY2UoKmNwKSkKKyAgICB3aGlsZSAoKmNwICYmIGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpjcCkpKQogICAgICAgICBjcCsrOwogCiAgICAgLyoKQEAgLTI0MCw3ICsyNjMsMjAgQEAKICAgICAgICAgU05NUF9GUkVFKCBzeXNsb2dfZm9ybWF0MiApOwogICAgICAgICBzeXNsb2dfZm9ybWF0MSA9IHN0cmR1cChjcCk7CiAgICAgICAgIHN5c2xvZ19mb3JtYXQyID0gc3RyZHVwKGNwKTsKKyAgICB9IGVsc2UgaWYgKCFzdHJjbXAoIGxpbmUsICJleGVjdXRlMSIpKSB7CisgICAgICAgIFNOTVBfRlJFRSggZXhlY19mb3JtYXQxICk7CisgICAgICAgIGV4ZWNfZm9ybWF0MSA9IHN0cmR1cChjcCk7CisgICAgfSBlbHNlIGlmICghc3RyY21wKCBsaW5lLCAiZXhlY3V0ZTIiKSkgeworICAgICAgICBTTk1QX0ZSRUUoIGV4ZWNfZm9ybWF0MiApOworICAgICAgICBleGVjX2Zvcm1hdDIgPSBzdHJkdXAoY3ApOworICAgIH0gZWxzZSBpZiAoIXN0cmNtcCggbGluZSwgImV4ZWN1dGUiKSkgeworICAgICAgICBTTk1QX0ZSRUUoIGV4ZWNfZm9ybWF0MSApOworICAgICAgICBTTk1QX0ZSRUUoIGV4ZWNfZm9ybWF0MiApOworICAgICAgICBleGVjX2Zvcm1hdDEgPSBzdHJkdXAoY3ApOworICAgICAgICBleGVjX2Zvcm1hdDIgPSBzdHJkdXAoY3ApOwogICAgIH0KKworICAgICpzZXAgPSAnICc7CiB9CiAKIApAQCAtMjg5LDcgKzMyNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfdHJhcDJfZm10LCBmcmVlX3RyYXAyX2ZtdCwgImZvcm1hdCIpOwogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAiZm9ybWF0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZV9mb3JtYXQsIE5VTEwsCi0JCQkgICAgIltwcmludHssMSwyfXxzeXNsb2d7LDEsMn1dIGZvcm1hdCIpOworCQkJICAgICJbcHJpbnR7LDEsMn18c3lzbG9neywxLDJ9fGV4ZWN1dGV7LDEsMn1dIGZvcm1hdCIpOwogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAiZm9yd2FyZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VfZm9yd2FyZCwgTlVMTCwgIk9JRHxcImRlZmF1bHRcIiBkZXN0aW5hdGlvbiIpOwogfQpAQCAtMzA4LDEyICszNDQsMjYgQEAKIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVycyAgPSBOVUxMOwogbmV0c25tcF90cmFwZF9oYW5kbGVyICpuZXRzbm1wX3NwZWNpZmljX3RyYXBoYW5kbGVycyA9IE5VTEw7CiAKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfaGFuZGxlcl9tYXBfdCB7CisgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKipoYW5kbGVyOworICAgY29uc3QgY2hhciAgICAgICAgICAgICAqZGVzY3I7Cit9IG5ldHNubXBfaGFuZGxlcl9tYXA7CisKK3N0YXRpYyBuZXRzbm1wX2hhbmRsZXJfbWFwIGhhbmRsZXJzW10gPSB7CisgICAgeyAmbmV0c25tcF9hdXRoX2dsb2JhbF90cmFwaGFuZGxlcnMsICJhdXRoIHRyYXAiIH0sCisgICAgeyAmbmV0c25tcF9wcmVfZ2xvYmFsX3RyYXBoYW5kbGVycywgInByZS1nbG9iYWwgdHJhcCIgfSwKKyAgICB7IE5VTEwsICJ0cmFwIHNwZWNpZmljIiB9LAorICAgIHsgJm5ldHNubXBfcG9zdF9nbG9iYWxfdHJhcGhhbmRsZXJzLCAiZ2xvYmFsIiB9LAorICAgIHsgTlVMTCwgTlVMTCB9Cit9OworCiAvKgogICogUmVnaXN0ZXIgYSBuZXcgImdsb2JhbCIgdHJhcGhhbmRsZXIsCiAgKiB0byBiZSBhcHBsaWVkIHRvICphbGwqIGluY29taW5nIHRyYXBzCiAgKi8KIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqCi1uZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoaW50IGxpc3QsIE5ldHNubXBfVHJhcF9IYW5kbGVyKiBoYW5kbGVyKSB7CituZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoaW50IGxpc3QsIE5ldHNubXBfVHJhcF9IYW5kbGVyICpoYW5kbGVyKQorewogICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7CiAKICAgICBpZiAoICFoYW5kbGVyICkKQEAgLTMyNCw3ICszNzQsNyBAQAogICAgICAgICByZXR1cm4gTlVMTDsKIAogICAgIC8qCi0gICAgICogQWRkIHRoaXMgbmV3IGhhbmRsZXIgdG8gdGhlIGZyb250IG9mIHRoZSBhcHByb3ByaWF0ZSBnbG9iYWwgbGlzdAorICAgICAqIEFkZCB0aGlzIG5ldyBoYW5kbGVyIHRvIHRoZSBmcm9udCBvZiB0aGUgYXBwcm9wcmlhdGUgbGlzdAogICAgICAqICAgKG9yIHNob3VsZCBpdCBnbyBvbiB0aGUgZW5kPykKICAgICAgKi8KICAgICB0cmFwaC0+aGFuZGxlciA9IGhhbmRsZXI7CkBAIC0zNDIsNiArMzkyLDEwIEBACiAgICAgICAgIHRyYXBoLT5uZXh0aCAgID0gbmV0c25tcF9wb3N0X2dsb2JhbF90cmFwaGFuZGxlcnM7CiAgICAgICAgIG5ldHNubXBfcG9zdF9nbG9iYWxfdHJhcGhhbmRsZXJzID0gdHJhcGg7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgTkVUU05NUFRSQVBEX0RFRkFVTFRfSEFORExFUjoKKyAgICAgICAgdHJhcGgtPm5leHRoICAgPSBuZXRzbm1wX2RlZmF1bHRfdHJhcGhhbmRsZXJzOworICAgICAgICBuZXRzbm1wX2RlZmF1bHRfdHJhcGhhbmRsZXJzID0gdHJhcGg7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIGZyZWUoIHRyYXBoICk7CiAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMzQ5LDMyICs0MDMsMTcgQEAKICAgICByZXR1cm4gdHJhcGg7CiB9CiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0FERF9ERUZBVUxUX1RSQVBIQU5ETEVSCiAvKgogICogUmVnaXN0ZXIgYSBuZXcgImRlZmF1bHQiIHRyYXBoYW5kbGVyLCB0byBiZSBhcHBsaWVkIHRvIGFsbAogICogdHJhcHMgd2l0aCBubyBzcGVjaWZpYyB0cmFwIGhhbmRsZXJzIG9mIHRoZWlyIG93bi4KICAqLwogbmV0c25tcF90cmFwZF9oYW5kbGVyICoKLW5ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIoIE5ldHNubXBfVHJhcF9IYW5kbGVyKiBoYW5kbGVyKSB7Ci0gICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICp0cmFwaDsKLQotICAgIGlmICggIWhhbmRsZXIgKQotICAgICAgICByZXR1cm4gTlVMTDsKLQotICAgIHRyYXBoID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RyYXBkX2hhbmRsZXIpOwotICAgIGlmICggIXRyYXBoICkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgotICAgICAqIEFkZCB0aGlzIG5ldyBoYW5kbGVyIHRvIHRoZSBmcm9udCBvZiB0aGUgZGVmYXVsdCBsaXN0Ci0gICAgICogICAob3Igc2hvdWxkIGl0IGdvIG9uIHRoZSBlbmQ/KQotICAgICAqLwotICAgIHRyYXBoLT5hdXRodHlwZXMgPSBUUkFQX0FVVEhfQUxMOyAvKiBjYWxsZXJzIHdpbGwgbGlrZWx5IGNoYW5nZSB0aGlzICovCi0gICAgdHJhcGgtPmhhbmRsZXIgPSBoYW5kbGVyOwotICAgIHRyYXBoLT5uZXh0aCAgID0gbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVyczsKLSAgICBuZXRzbm1wX2RlZmF1bHRfdHJhcGhhbmRsZXJzID0gdHJhcGg7Ci0gICAgcmV0dXJuIHRyYXBoOworbmV0c25tcF9hZGRfZGVmYXVsdF90cmFwaGFuZGxlcihOZXRzbm1wX1RyYXBfSGFuZGxlciAqaGFuZGxlcikgeworICAgIHJldHVybiBuZXRzbm1wX2FkZF9nbG9iYWxfdHJhcGhhbmRsZXIoTkVUU05NUFRSQVBEX0RFRkFVTFRfSEFORExFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhbmRsZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQUREX0RFRkFVTFRfVFJBUEhBTkRMRVIgKi8KIAogCiAvKgpAQCAtMzk5LDcgKzQzOCw3IEBACiAgICAgdHJhcGgtPmF1dGh0eXBlcyAgID0gVFJBUF9BVVRIX0FMTDsgLyogY2FsbGVycyB3aWxsIGxpa2VseSBjaGFuZ2UgdGhpcyAqLwogICAgIHRyYXBoLT5oYW5kbGVyICAgICA9IGhhbmRsZXI7CiAgICAgdHJhcGgtPnRyYXBvaWRfbGVuID0gdHJhcE9pZExlbjsKLSAgICB0cmFwaC0+dHJhcG9pZCA9IG5ldHNubXBfbWVtZHVwKHRyYXBPaWQsIHNpemVvZihvaWQpICogdHJhcE9pZExlbik7CisgICAgdHJhcGgtPnRyYXBvaWQgICAgID0gc25tcF9kdXBsaWNhdGVfb2JqaWQodHJhcE9pZCwgdHJhcE9pZExlbik7CiAKICAgICAvKgogICAgICAqIE5vdyB0cnkgdG8gZmluZCB0aGUgYXBwcm9wcmlhdGUgcGxhY2UgaW4gdGhlIHRyYXAtc3BlY2lmaWMKQEAgLTUxNCw4ICs1NTMsMTMgQEAKIG5ldHNubXBfZ2V0X3RyYXBoYW5kbGVyKCBvaWQgKnRyYXBPaWQsIGludCB0cmFwT2lkTGVuICkgewogICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqdHJhcGg7CiAgICAgCi0gICAgaWYgKCF0cmFwT2lkIHx8ICF0cmFwT2lkTGVuKQorICAgIGlmICghdHJhcE9pZCB8fCAhdHJhcE9pZExlbikgeworICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZDpsb29rdXAiLCAiZ2V0X3RyYXBoYW5kbGVyIG5vIE9JRCFcbiIpKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkOmxvb2t1cCIsICJMb29raW5nIHVwIFRyYXAgT0lEOiAiKSk7CisgICAgREVCVUdNU0dPSUQoKCJzbm1wdHJhcGQ6bG9va3VwIiwgdHJhcE9pZCwgdHJhcE9pZExlbikpOworICAgIERFQlVHTVNHKCggInNubXB0cmFwZDpsb29rdXAiLCAiXG4iKSk7CiAKICAgICAvKgogICAgICAqIExvb2sgZm9yIGEgbWF0Y2hpbmcgT0lELCBhbmQgcmV0dXJuIHRoYXQgbGlzdC4uLgpAQCAtNTMwLDcgKzU3NCw4IEBACiAgICAgICAgIGlmICghKHRyYXBoLT5mbGFncyAmIE5FVFNOTVBfVFJBUEhBTkRMRVJfRkxBR19NQVRDSF9UUkVFKSkgewogICAgICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUodHJhcGgtPnRyYXBvaWQsIHRyYXBoLT50cmFwb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBPaWQsIHRyYXBPaWRMZW4pID09IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJnZXRfdHJhcGhhbmRsZXIgZXhhY3QgbWF0Y2ggKCV4KVxuIiwgdHJhcGgpKTsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZDpsb29rdXAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZ2V0X3RyYXBoYW5kbGVyIGV4YWN0IG1hdGNoICglcClcbiIsIHRyYXBoKSk7CiAJICAgICAgICByZXR1cm4gdHJhcGg7CiAgICAgICAgICAgICB9CiAJfSBlbHNlIHsKQEAgLTU0OCwxMSArNTkzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBpZiAoc25tcF9vaWRfY29tcGFyZSh0cmFwaC0+dHJhcG9pZCwgdHJhcGgtPnRyYXBvaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwT2lkLCB0cmFwT2lkTGVuKSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJnZXRfdHJhcGhhbmRsZXIgc3RyaWN0IHN1YnRyZWUgbWF0Y2ggKCV4KVxuIiwgdHJhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkOmxvb2t1cCIsICJnZXRfdHJhcGhhbmRsZXIgc3RyaWN0IHN1YnRyZWUgbWF0Y2ggKCVwKVxuIiwgdHJhcGgpKTsKIAkgICAgICAgICAgICAgICAgcmV0dXJuIHRyYXBoOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZ2V0X3RyYXBoYW5kbGVyIHN1YnRyZWUgbWF0Y2ggKCV4KVxuIiwgdHJhcGgpKTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQ6bG9va3VwIiwgImdldF90cmFwaGFuZGxlciBzdWJ0cmVlIG1hdGNoICglcClcbiIsIHRyYXBoKSk7CiAJICAgICAgICAgICAgcmV0dXJuIHRyYXBoOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KQEAgLTU2Miw3ICs2MDcsNyBAQAogICAgIC8qCiAgICAgICogLi4uLiBvciBmYWlsaW5nIHRoYXQsIHJldHVybiB0aGUgImRlZmF1bHQiIGxpc3QgKHdoaWNoIG1heSBiZSBOVUxMKQogICAgICAqLwotICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgImdldF90cmFwaGFuZGxlciBkZWZhdWx0ICgleClcbiIsCisgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQ6bG9va3VwIiwgImdldF90cmFwaGFuZGxlciBkZWZhdWx0ICglcClcbiIsCiAJCQkgICAgbmV0c25tcF9kZWZhdWx0X3RyYXBoYW5kbGVycykpOwogICAgIHJldHVybiBuZXRzbm1wX2RlZmF1bHRfdHJhcGhhbmRsZXJzOwogfQpAQCAtNTg3LDcgKzYzMiw2IEBACiAgICAgdV9jaGFyICAgICAgICAgKnJidWYgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICByX2xlbiA9IDY0LCBvX2xlbiA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIHRydW5jID0gMDsKLSAgICBleHRlcm4gaW50ICAgICAgU3lzbG9nVHJhcDsKIAogICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgInN5c2xvZ19oYW5kbGVyXG4iKSk7CiAKQEAgLTY3MCw3ICs3MTQsNiBAQAogICAgIHVfY2hhciAgICAgICAgICpyYnVmID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgcl9sZW4gPSA2NCwgb19sZW4gPSAwOwogICAgIGludCAgICAgICAgICAgICB0cnVuYyA9IDA7Ci0gICAgZXh0ZXJuIGludCAgICAgIGRyb3BhdXRoOwogCiAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAicHJpbnRfaGFuZGxlclxuIikpOwogCkBAIC03MzgsMTYzICs3ODEsMjAgQEAKIH0KIAogCisjZGVmaW5lIEVYRUNVVEVfRk9STUFUCSIlQlxuJWJcbiVWXG4ldlxuIgorCiAvKgogICogIFRyYXAgaGFuZGxlciBmb3IgaW52b2tpbmcgYSBzdWl0YWJsZSBzY3JpcHQKICAqLwotdm9pZAotc2VuZF9oYW5kbGVyX2RhdGEoRklMRSAqIGZpbGUsIHN0cnVjdCBob3N0ZW50ICpob3N0LAotICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCkKLXsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdG1wdmFyLCAqdmFyczsKLSAgICBzdGF0aWMgb2lkICAgICAgdHJhcG9pZHNbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNSwgMCB9OwotICAgIHN0YXRpYyBvaWQgICAgICBzbm1wc3lzdXB0aW1lW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEsIDEsIDMsIDAgfTsKLSAgICBzdGF0aWMgb2lkICAgICAgc25tcHRyYXBvaWRbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNCwgMSwgMCB9OwotICAgIHN0YXRpYyBvaWQgICAgICBzbm1wdHJhcGVudFtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxLCAxLCA0LCAzLCAwIH07Ci0gICAgc3RhdGljIG9pZCAgICAgIHNubXB0cmFwYWRkcltdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxOCwgMSwgMywgMCB9OwotICAgIHN0YXRpYyBvaWQgICAgICBzbm1wdHJhcGNvbVtdID0geyAxLCAzLCA2LCAxLCA2LCAzLCAxOCwgMSwgNCwgMCB9OwotICAgIG9pZCAgICAgICAgICAgICBlbnR0cmFwb2lkW01BWF9PSURfTEVOXTsKLSAgICBpbnQgICAgICAgICAgICAgZW50dHJhcGxlbiA9IHBkdS0+ZW50ZXJwcmlzZV9sZW5ndGg7Ci0KLSAgICBpZiAodHJhbnNwb3J0ICE9IE5VTEwgJiYgdHJhbnNwb3J0LT5mX2ZtdGFkZHIgIT0gTlVMTCkgewotICAgICAgICBjaGFyICp0c3RyID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwotICAgICAgICBpZiAodHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKGZpbGUsICIlc1xuJXNcbiIsIGhvc3QgPyBob3N0LT5oX25hbWUgOiB0c3RyLCB0c3RyKTsKLSAgICAgICAgICAgIGZyZWUodHN0cik7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBmcHJpbnRmKGZpbGUsICIlc1xuPFVOS05PV04+XG4iLCBob3N0ID8gaG9zdC0+aF9uYW1lIDogIjxVTktOT1dOPiIpOwotICAgIH0KLSAgICBpZiAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1RSQVApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogY29udmVydCBhIHYxIHRyYXAgdG8gYSB2MiB2YXJpYWJsZSBiaW5kaW5nIGxpc3Q6Ci0gICAgICAgICAqIFRoZSB1cHRpbWUgYW5kIHRyYXBPSUQgZ28gZmlyc3QgaW4gdGhlIGxpc3QuIAotICAgICAgICAgKi8KLSAgICAgICAgdG1wdmFyLnZhbC5pbnRlZ2VyID0gKGxvbmcgKikgJnBkdS0+dGltZTsKLSAgICAgICAgdG1wdmFyLnZhbF9sZW4gPSBzaXplb2YocGR1LT50aW1lKTsKLSAgICAgICAgdG1wdmFyLnR5cGUgPSBBU05fVElNRVRJQ0tTOwotICAgICAgICBmcHJpbnRfdmFyaWFibGUoZmlsZSwgc25tcHN5c3VwdGltZSwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzbm1wc3lzdXB0aW1lKSAvIHNpemVvZihvaWQpLCAmdG1wdmFyKTsKLSAgICAgICAgdG1wdmFyLnR5cGUgPSBBU05fT0JKRUNUX0lEOwotICAgICAgICBpZiAocGR1LT50cmFwX3R5cGUgPT0gU05NUF9UUkFQX0VOVEVSUFJJU0VTUEVDSUZJQykgewotICAgICAgICAgICAgbWVtY3B5KGVudHRyYXBvaWQsIHBkdS0+ZW50ZXJwcmlzZSwgc2l6ZW9mKG9pZCkgKiBlbnR0cmFwbGVuKTsKLSAgICAgICAgICAgIGlmIChlbnR0cmFwb2lkW2VudHRyYXBsZW4gLSAxXSAhPSAwKQotICAgICAgICAgICAgICAgIGVudHRyYXBvaWRbZW50dHJhcGxlbisrXSA9IDA7Ci0gICAgICAgICAgICBlbnR0cmFwb2lkW2VudHRyYXBsZW4rK10gPSBwZHUtPnNwZWNpZmljX3R5cGU7Ci0gICAgICAgICAgICB0bXB2YXIudmFsLm9iamlkID0gZW50dHJhcG9pZDsKLSAgICAgICAgICAgIHRtcHZhci52YWxfbGVuID0gZW50dHJhcGxlbiAqIHNpemVvZihvaWQpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgdHJhcG9pZHNbOV0gPSBwZHUtPnRyYXBfdHlwZSArIDE7Ci0gICAgICAgICAgICB0bXB2YXIudmFsLm9iamlkID0gdHJhcG9pZHM7Ci0gICAgICAgICAgICB0bXB2YXIudmFsX2xlbiA9IDEwICogc2l6ZW9mKG9pZCk7Ci0gICAgICAgIH0KLSAgICAgICAgZnByaW50X3ZhcmlhYmxlKGZpbGUsIHNubXB0cmFwb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHNubXB0cmFwb2lkKSAvIHNpemVvZihvaWQpLCAmdG1wdmFyKTsKLSAgICB9Ci0gICAgLyoKLSAgICAgKiBkbyB0aGUgdmFyaWFibGVzIGluIHRoZSBwZHUgCi0gICAgICovCi0gICAgZm9yICh2YXJzID0gcGR1LT52YXJpYWJsZXM7IHZhcnM7IHZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlKSB7Ci0gICAgICAgIGZwcmludF92YXJpYWJsZShmaWxlLCB2YXJzLT5uYW1lLCB2YXJzLT5uYW1lX2xlbmd0aCwgdmFycyk7Ci0gICAgfQotICAgIGlmIChwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfVFJBUCkgewotICAgICAgICAvKgotICAgICAgICAgKiBjb252ZXJ0IGEgdjEgdHJhcCB0byBhIHYyIHZhcmlhYmxlIGJpbmRpbmcgbGlzdDoKLSAgICAgICAgICogVGhlIGVudGVycHJpc2UgZ29lcyBsYXN0LiAKLSAgICAgICAgICovCi0gICAgICAgIHRtcHZhci52YWwuc3RyaW5nID0gcGR1LT5hZ2VudF9hZGRyOwotICAgICAgICB0bXB2YXIudmFsX2xlbiA9IDQ7Ci0gICAgICAgIHRtcHZhci50eXBlID0gQVNOX0lQQUREUkVTUzsKLSAgICAgICAgZnByaW50X3ZhcmlhYmxlKGZpbGUsIHNubXB0cmFwYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzbm1wdHJhcGFkZHIpIC8gc2l6ZW9mKG9pZCksICZ0bXB2YXIpOwotICAgICAgICB0bXB2YXIudmFsLnN0cmluZyA9IHBkdS0+Y29tbXVuaXR5OwotICAgICAgICB0bXB2YXIudmFsX2xlbiA9IHBkdS0+Y29tbXVuaXR5X2xlbjsKLSAgICAgICAgdG1wdmFyLnR5cGUgPSBBU05fT0NURVRfU1RSOwotICAgICAgICBmcHJpbnRfdmFyaWFibGUoZmlsZSwgc25tcHRyYXBjb20sCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc25tcHRyYXBjb20pIC8gc2l6ZW9mKG9pZCksICZ0bXB2YXIpOwotICAgICAgICB0bXB2YXIudmFsLm9iamlkID0gcGR1LT5lbnRlcnByaXNlOwotICAgICAgICB0bXB2YXIudmFsX2xlbiA9IHBkdS0+ZW50ZXJwcmlzZV9sZW5ndGggKiBzaXplb2Yob2lkKTsKLSAgICAgICAgdG1wdmFyLnR5cGUgPSBBU05fT0JKRUNUX0lEOwotICAgICAgICBmcHJpbnRfdmFyaWFibGUoZmlsZSwgc25tcHRyYXBlbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc25tcHRyYXBlbnQpIC8gc2l6ZW9mKG9pZCksICZ0bXB2YXIpOwotICAgIH0KLX0KLQotdm9pZAotZG9fZXh0ZXJuYWwoY2hhciAqY21kLCBzdHJ1Y3QgaG9zdGVudCAqaG9zdCwKLSAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCi17Ci0gICAgRklMRSAgICAgICAgICAgKmZpbGU7Ci0gICAgaW50ICAgICAgICAgICAgIG9sZHF1aWNrLCByZXN1bHQ7Ci0KLSAgICBERUJVR01TR1RMKCgic25tcHRyYXBkIiwgIlJ1bm5pbmc6ICVzXG4iLCBjbWQpKTsKLSAgICBvbGRxdWljayA9IHNubXBfZ2V0X3F1aWNrX3ByaW50KCk7Ci0gICAgc25tcF9zZXRfcXVpY2tfcHJpbnQoMSk7Ci0gICAgaWYgKGNtZCkgewotI2lmbmRlZiBXSU4zMgotICAgICAgICBpbnQgICAgICAgICAgICAgZmRbMl07Ci0gICAgICAgIGludCAgICAgICAgICAgICBwaWQ7Ci0KLSAgICAgICAgaWYgKHBpcGUoZmQpKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoInBpcGUiKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoKHBpZCA9IGZvcmsoKSkgPT0gMCkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIGNoaWxkIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjbG9zZSgwKTsKLSAgICAgICAgICAgIGlmIChkdXAoZmRbMF0pICE9IDApIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoImR1cCIpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY2xvc2UoZmRbMV0pOwotICAgICAgICAgICAgY2xvc2UoZmRbMF0pOwotICAgICAgICAgICAgc3lzdGVtKGNtZCk7Ci0gICAgICAgICAgICBleGl0KDApOwotICAgICAgICB9IGVsc2UgaWYgKHBpZCA+IDApIHsKLSAgICAgICAgICAgIGZpbGUgPSBmZG9wZW4oZmRbMV0sICJ3Iik7Ci0gICAgICAgICAgICBzZW5kX2hhbmRsZXJfZGF0YShmaWxlLCBob3N0LCBwZHUsIHRyYW5zcG9ydCk7Ci0gICAgICAgICAgICBmY2xvc2UoZmlsZSk7Ci0gICAgICAgICAgICBjbG9zZShmZFswXSk7Ci0gICAgICAgICAgICBjbG9zZShmZFsxXSk7Ci0gICAgICAgICAgICBpZiAod2FpdHBpZChwaWQsICZyZXN1bHQsIDApIDwgMCkgewotICAgICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcigid2FpdHBpZCIpOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKCJmb3JrIik7Ci0gICAgICAgIH0KLSNlbHNlCi0gICAgICAgIGNoYXIgICAgICAgICAgICBjb21tYW5kX2J1ZlsxMjhdOwotICAgICAgICBjaGFyICAgICAgICAgICAgZmlsZV9idWZbTF90bXBuYW1dOwotCi0gICAgICAgIHRtcG5hbShmaWxlX2J1Zik7Ci0gICAgICAgIGZpbGUgPSBmb3BlbihmaWxlX2J1ZiwgInciKTsKLSAgICAgICAgaWYgKCFmaWxlKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZvcGVuOiAlczogJXNcbiIsIGZpbGVfYnVmLCBzdHJlcnJvcihlcnJubykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc2VuZF9oYW5kbGVyX2RhdGEoZmlsZSwgaG9zdCwgcGR1LCB0cmFuc3BvcnQpOwotICAgICAgICAgICAgZmNsb3NlKGZpbGUpOwotICAgICAgICAgICAgc25wcmludGYoY29tbWFuZF9idWYsIHNpemVvZihjb21tYW5kX2J1ZiksCi0gICAgICAgICAgICAgICAgICAgICAiJXMgPCAlcyIsIGNtZCwgZmlsZV9idWYpOwotICAgICAgICAgICAgY29tbWFuZF9idWZbIHNpemVvZihjb21tYW5kX2J1ZiktMSBdID0gMDsKLSAgICAgICAgICAgIHJlc3VsdCA9IHN5c3RlbShjb21tYW5kX2J1Zik7Ci0gICAgICAgICAgICBpZiAocmVzdWx0ID09IC0xKQotICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3lzdGVtOiAlczogJXNcbiIsIGNvbW1hbmRfYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHJlc3VsdCkKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbTogJXM6ICVkXG4iLCBjb21tYW5kX2J1ZiwgcmVzdWx0KTsKLSAgICAgICAgICAgIHJlbW92ZShmaWxlX2J1Zik7Ci0gICAgICAgIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogV0lOMzIgKi8KLSAgICB9Ci0gICAgc25tcF9zZXRfcXVpY2tfcHJpbnQob2xkcXVpY2spOwotfQotCi0jZGVmaW5lIEVYRUNVVEVfRk9STUFUCSIlQlxuJWJcbiVWXG4ldlxuIgotCiBpbnQgICBjb21tYW5kX2hhbmRsZXIoIG5ldHNubXBfcGR1ICAgICAgICAgICAqcGR1LAogICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAgICAgKnRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICpoYW5kbGVyKQogeworI2lmbmRlZiBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUKKyAgICBORVRTTk1QX0xPR09OQ0UoKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgInN1cHBvcnQgZm9yIHJ1bl9zaGVsbF9jb21tYW5kIG5vdCBhdmFpbGFibGVcbiIpKTsKKyAgICByZXR1cm4gTkVUU05NUFRSQVBEX0hBTkRMRVJfRkFJTDsKKyNlbHNlCiAgICAgdV9jaGFyICAgICAgICAgKnJidWYgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICByX2xlbiA9IDY0LCBvX2xlbiA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIG9sZHF1aWNrOwpAQCAtOTA3LDggKzgwNywxMCBAQAogCSAgICB2Ml9wZHUgPSBjb252ZXJ0X3YxcGR1X3RvX3YyKHBkdSk7CiAJZWxzZQogCSAgICB2Ml9wZHUgPSBwZHU7Ci0gICAgICAgIG9sZHF1aWNrID0gc25tcF9nZXRfcXVpY2tfcHJpbnQoKTsKLSAgICAgICAgc25tcF9zZXRfcXVpY2tfcHJpbnQoMSk7CisgICAgICAgIG9sZHF1aWNrID0gbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQpOworICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQsIDEpOwogCiAgICAgICAgIC8qCiAJICogRm9ybWF0IHRoZSB0cmFwIGFuZCBwYXNzIHRoaXMgc3RyaW5nIHRvIHRoZSBleHRlcm5hbCBjb21tYW5kCkBAIC05MjgsNDUgKzgzMCwzOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlci0+Zm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdjJfcGR1LCB0cmFuc3BvcnQpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZXhlY3V0ZSBmb3JtYXRcbiIpKTsKLSAgICAgICAgICAgIHJlYWxsb2NfZm9ybWF0X3RyYXAoJnJidWYsICZyX2xlbiwgJm9fbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhFQ1VURV9GT1JNQVQsCisJICAgIGlmICggcGR1LT5jb21tYW5kID09IFNOTVBfTVNHX1RSQVAgJiYgZXhlY19mb3JtYXQxICkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCAic25tcHRyYXBkIiwgImV4ZWMgdjEgPSAnJXMnXG4iLCBleGVjX2Zvcm1hdDEpKTsKKyAgICAgICAgICAgICAgICByZWFsbG9jX2Zvcm1hdF90cmFwKCZyYnVmLCAmcl9sZW4sICZvX2xlbiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4ZWNfZm9ybWF0MSwgcGR1LCB0cmFuc3BvcnQpOworCSAgICB9IGVsc2UgaWYgKCBwZHUtPmNvbW1hbmQgIT0gU05NUF9NU0dfVFJBUCAmJiBleGVjX2Zvcm1hdDIgKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoICJzbm1wdHJhcGQiLCAiZXhlYyB2Mi8zID0gJyVzJ1xuIiwgZXhlY19mb3JtYXQyKSk7CisgICAgICAgICAgICAgICAgcmVhbGxvY19mb3JtYXRfdHJhcCgmcmJ1ZiwgJnJfbGVuLCAmb19sZW4sIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleGVjX2Zvcm1hdDIsIHBkdSwgdHJhbnNwb3J0KTsKKwkgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJleGVjdXRlIGZvcm1hdFxuIikpOworICAgICAgICAgICAgICAgIHJlYWxsb2NfZm9ybWF0X3RyYXAoJnJidWYsICZyX2xlbiwgJm9fbGVuLCAxLCBFWEVDVVRFX0ZPUk1BVCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHYyX3BkdSwgdHJhbnNwb3J0KTsKKyAgICAgICAgICAgIH0KIAl9CiAKICAgICAgICAgLyoKICAgICAgICAgICogIGFuZCBwYXNzIHRoaXMgZm9ybWF0dGVkIHN0cmluZyB0byB0aGUgY29tbWFuZCBzcGVjaWZpZWQKICAgICAgICAgICovCi0gICAgICAgIHJ1bl9zaGVsbF9jb21tYW5kKGhhbmRsZXItPnRva2VuLCAoY2hhciopcmJ1ZiwgTlVMTCwgMCk7ICAgLyogTm90IGludGVyZXN0ZWQgaW4gb3V0cHV0ICovCi0gICAgICAgIHNubXBfc2V0X3F1aWNrX3ByaW50KG9sZHF1aWNrKTsKKyAgICAgICAgcnVuX3NoZWxsX2NvbW1hbmQoaGFuZGxlci0+dG9rZW4sIChjaGFyKilyYnVmLCBOVUxMLCBOVUxMKTsgICAvKiBOb3QgaW50ZXJlc3RlZCBpbiBvdXRwdXQgKi8KKyAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1FVSUNLX1BSSU5ULCBvbGRxdWljayk7CiAgICAgICAgIGlmIChwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfVFJBUCkKICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUodjJfcGR1KTsKICAgICAgICAgZnJlZShyYnVmKTsKICAgICB9CiAgICAgcmV0dXJuIE5FVFNOTVBUUkFQRF9IQU5ETEVSX09LOworI2VuZGlmIC8qICFkZWYgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFICovCiB9CiAKIAogCiAKIC8qCi0gKiAgVHJhcCBoYW5kbGVyIGZvciBkb2luZyBzb21ldGhpbmcgd2l0aCAiZXZlbnQiIHRyYXBzCi0gKiAgICAgIChub3QgZW50aXJlbHkgY2xlYXIgd2hhdCB0aGlzIGlzIGFib3V0ID8/PykKLSAqLwotCS8qIFhYWCAtIGluIHNubXB0cmFwZC5jICovCi12b2lkIGV2ZW50X2lucHV0KG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZwKTsKLQotaW50ICAgZXZlbnRfaGFuZGxlciggbmV0c25tcF9wZHUgICAgICAgICAgICpwZHUsCi0gICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAgICAgKnRyYW5zcG9ydCwKLSAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqaGFuZGxlcikKLXsKLSAgICBERUJVR01TR1RMKCggInNubXB0cmFwZCIsICJldmVudF9oYW5kbGVyXG4iKSk7Ci0gICAgZXZlbnRfaW5wdXQocGR1LT52YXJpYWJsZXMpOwotICAgIHJldHVybiBORVRTTk1QVFJBUERfSEFORExFUl9PSzsKLX0KLQotCi0vKgogICogIFRyYXAgaGFuZGxlciBmb3IgZm9yd2FyZGluZyB0byB0aGUgQWdlbnRYIG1hc3RlciBhZ2VudAogICovCiBpbnQgYXhmb3J3YXJkX2hhbmRsZXIoIG5ldHNubXBfcGR1ICAgICAgICAgICAqcGR1LApAQCAtMTA1NSwxMSArOTUxLDcgQEAKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnM7CiAgICAgbmV0c25tcF90cmFwZF9oYW5kbGVyICp0cmFwaDsKICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hZ2ljOwotICAgIGludCByZXQ7Ci0gICAgZXh0ZXJuIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqbmV0c25tcF9hdXRoX2dsb2JhbF90cmFwaGFuZGxlcnM7Ci0gICAgZXh0ZXJuIG5ldHNubXBfdHJhcGRfaGFuZGxlciAqbmV0c25tcF9wcmVfZ2xvYmFsX3RyYXBoYW5kbGVyczsKLSAgICBleHRlcm4gbmV0c25tcF90cmFwZF9oYW5kbGVyICpuZXRzbm1wX3Bvc3RfZ2xvYmFsX3RyYXBoYW5kbGVyczsKLQorICAgIGludCByZXQsIGlkeDsKIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBjYXNlIE5FVFNOTVBfQ0FMTEJBQ0tfT1BfUkVDRUlWRURfTUVTU0FHRToKQEAgLTExNTYsNzcgKzEwNDgsMjYgQEAKICAgICAgICAgICogIE9LIC0gRW5vdWdoIHdhZmZsaW5nLCBsZXQncyBnZXQgdG8gd29yay4uLi4uCiAJICovCiAKLSAgICAgICAgLyoKLQkgKiAgYSkgYXV0aGVudGljYXRpb24gaGFuZGxlcnMKLQkgKi8KLSAgICAgICAgdHJhcGggPSBuZXRzbm1wX2F1dGhfZ2xvYmFsX3RyYXBoYW5kbGVyczsKLSAgICAgICAgREVCVUdNU0dUTCgoInNubXB0cmFwZCIsICJSdW5uaW5nIGF1dGggdHJhcCBoYW5kbGVyc1xuIikpOwotCXdoaWxlICh0cmFwaCkgewotICAgICAgICAgICAgaWYgKCFuZXRzbm1wX3RyYXBkX2NoZWNrX2F1dGgodHJhcGgtPmF1dGh0eXBlcykpIHsKLSAgICAgICAgICAgICAgICB0cmFwaCA9IHRyYXBoLT5uZXh0aDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogd2UgY29udGludWUgb24gYW5kIHNraXAgdGhpcyBvbmUgKi8KLSAgICAgICAgICAgIH0KLQkgICAgcmV0ID0gKCoodHJhcGgtPmhhbmRsZXIpKShwZHUsIHRyYW5zcG9ydCwgdHJhcGgpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9GSU5JU0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAocmV0ID09IE5FVFNOTVBUUkFQRF9IQU5ETEVSX0JSRUFLKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICB0cmFwaCA9IHRyYXBoLT5uZXh0aDsKLQl9CisgICAgICAgIGZvciggaWR4ID0gMDsgaGFuZGxlcnNbaWR4XS5kZXNjcjsgKytpZHggKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcHRyYXBkIiwgIlJ1bm5pbmcgJXMgaGFuZGxlcnNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyc1tpZHhdLmRlc2NyKSk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBoYW5kbGVyc1tpZHhdLmhhbmRsZXIpIC8qIHNwZWNpZmljICovCisgICAgICAgICAgICAgICAgdHJhcGggPSBuZXRzbm1wX2dldF90cmFwaGFuZGxlcih0cmFwT2lkLCB0cmFwT2lkTGVuKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICB0cmFwaCA9ICpoYW5kbGVyc1tpZHhdLmhhbmRsZXI7CiAKLSAgICAgICAgLyoKLQkgKiAgYikgcHJlLXNwZWNpZmljIGdsb2JhbCBoYW5kbGVycwotCSAqLwotICAgICAgICB0cmFwaCA9IG5ldHNubXBfcHJlX2dsb2JhbF90cmFwaGFuZGxlcnM7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdHJhcGQiLCAiUnVubmluZyBwcmUtZ2xvYmFsIHRyYXAgaGFuZGxlcnNcbiIpKTsKLQl3aGlsZSAodHJhcGgpIHsKLSAgICAgICAgICAgIGlmICghbmV0c25tcF90cmFwZF9jaGVja19hdXRoKHRyYXBoLT5hdXRodHlwZXMpKSB7Ci0gICAgICAgICAgICAgICAgdHJhcGggPSB0cmFwaC0+bmV4dGg7Ci0gICAgICAgICAgICAgICAgY29udGludWU7IC8qIHdlIGNvbnRpbnVlIG9uIGFuZCBza2lwIHRoaXMgb25lICovCi0gICAgICAgICAgICB9Ci0JICAgIHJldCA9ICgqKHRyYXBoLT5oYW5kbGVyKSkocGR1LCB0cmFuc3BvcnQsIHRyYXBoKTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gTkVUU05NUFRSQVBEX0hBTkRMRVJfRklOSVNIKQotICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9CUkVBSykKLSAgICAgICAgICAgICAgICBicmVhazsKLQkgICAgdHJhcGggPSB0cmFwaC0+bmV4dGg7Ci0JfQorICAgICAgICAgICAgZm9yKCA7IHRyYXBoOyB0cmFwaCA9IHRyYXBoLT5uZXh0aCkgeworICAgICAgICAgICAgICAgIGlmICghbmV0c25tcF90cmFwZF9jaGVja19hdXRoKHRyYXBoLT5hdXRodHlwZXMpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogd2UgY29udGludWUgb24gYW5kIHNraXAgdGhpcyBvbmUgKi8KIAotICAgICAgICAvKgotCSAqICBjKSB0cmFwLXNwZWNpZmljIGhhbmRsZXJzCi0JICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdHJhcGQiLCAiUnVubmluZyB0cmFwIHNwZWNpZmljIGhhbmRsZXJzXG4iKSk7Ci0gICAgICAgIHRyYXBoID0gbmV0c25tcF9nZXRfdHJhcGhhbmRsZXIodHJhcE9pZCwgdHJhcE9pZExlbik7Ci0Jd2hpbGUgKHRyYXBoKSB7Ci0gICAgICAgICAgICBpZiAoIW5ldHNubXBfdHJhcGRfY2hlY2tfYXV0aCh0cmFwaC0+YXV0aHR5cGVzKSkgewotICAgICAgICAgICAgICAgIHRyYXBoID0gdHJhcGgtPm5leHRoOwotICAgICAgICAgICAgICAgIGNvbnRpbnVlOyAvKiB3ZSBjb250aW51ZSBvbiBhbmQgc2tpcCB0aGlzIG9uZSAqLwotICAgICAgICAgICAgfQotCSAgICByZXQgPSAoKih0cmFwaC0+aGFuZGxlcikpKHBkdSwgdHJhbnNwb3J0LCB0cmFwaCk7Ci0gICAgICAgICAgICBpZiAocmV0ID09IE5FVFNOTVBUUkFQRF9IQU5ETEVSX0ZJTklTSCkKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIGlmIChyZXQgPT0gTkVUU05NUFRSQVBEX0hBTkRMRVJfQlJFQUspCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0JICAgIHRyYXBoID0gdHJhcGgtPm5leHRoOwotCX0KKyAgICAgICAgICAgICAgICByZXQgPSAoKih0cmFwaC0+aGFuZGxlcikpKHBkdSwgdHJhbnNwb3J0LCB0cmFwaCk7CisgICAgICAgICAgICAgICAgaWYoTkVUU05NUFRSQVBEX0hBTkRMRVJfRklOSVNIID09IHJldCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9CUkVBSykKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7IC8qIG1vdmUgb24gdG8gbmV4dCB0eXBlICovCisgICAgICAgICAgICB9IC8qIHRyYXBoICovCisgICAgICAgIH0gLyogaGFuZGxlcnMgKi8KIAotICAgICAgICAvKgotCSAqICBkKSBvdGhlciBnbG9iYWwgaGFuZGxlcnMKLQkgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInNubXB0cmFwZCIsICJSdW5uaW5nIGdsb2JhbCBoYW5kbGVyc1xuIikpOwotICAgICAgICB0cmFwaCA9IG5ldHNubXBfcG9zdF9nbG9iYWxfdHJhcGhhbmRsZXJzOwotCXdoaWxlICh0cmFwaCkgewotICAgICAgICAgICAgaWYgKCFuZXRzbm1wX3RyYXBkX2NoZWNrX2F1dGgodHJhcGgtPmF1dGh0eXBlcykpIHsKLSAgICAgICAgICAgICAgICB0cmFwaCA9IHRyYXBoLT5uZXh0aDsKLSAgICAgICAgICAgICAgICBjb250aW51ZTsgLyogd2UgY29udGludWUgb24gYW5kIHNraXAgdGhpcyBvbmUgKi8KLSAgICAgICAgICAgIH0KLQkgICAgcmV0ID0gKCoodHJhcGgtPmhhbmRsZXIpKShwZHUsIHRyYW5zcG9ydCwgdHJhcGgpOwotICAgICAgICAgICAgaWYgKHJldCA9PSBORVRTTk1QVFJBUERfSEFORExFUl9GSU5JU0gpCi0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICBpZiAocmV0ID09IE5FVFNOTVBUUkFQRF9IQU5ETEVSX0JSRUFLKQotICAgICAgICAgICAgICAgIGJyZWFrOwotCSAgICB0cmFwaCA9IHRyYXBoLT5uZXh0aDsKLQl9CiAKIAlpZiAocGR1LT5jb21tYW5kID09IFNOTVBfTVNHX0lORk9STSkgewogCSAgICBuZXRzbm1wX3BkdSAqcmVwbHkgPSBzbm1wX2Nsb25lX3BkdShwZHUpOwpkaWZmIC0tZ2l0IGEvYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaCBiL2FwcHMvc25tcHRyYXBkX2hhbmRsZXJzLmgKaW5kZXggOTIxMmQxMi4uMDk3YzAyZCAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wdHJhcGRfaGFuZGxlcnMuaAorKysgYi9hcHBzL3NubXB0cmFwZF9oYW5kbGVycy5oCkBAIC0zNSw2ICszNSw3IEBACiBOZXRzbm1wX1RyYXBfSGFuZGxlciAgIGZvcndhcmRfaGFuZGxlcjsKIE5ldHNubXBfVHJhcF9IYW5kbGVyICAgYXhmb3J3YXJkX2hhbmRsZXI7CiBOZXRzbm1wX1RyYXBfSGFuZGxlciAgIG5vdGlmaWNhdGlvbl9oYW5kbGVyOworTmV0c25tcF9UcmFwX0hhbmRsZXIgICBteXNxbF9oYW5kbGVyOwogCiB2b2lkIGZyZWVfdHJhcDFfZm10KHZvaWQpOwogdm9pZCBmcmVlX3RyYXAyX2ZtdCh2b2lkKTsKQEAgLTQ0LDYgKzQ1LDcgQEAKICNkZWZpbmUgTkVUU05NUFRSQVBEX0FVVEhfSEFORExFUiAgICAxCiAjZGVmaW5lIE5FVFNOTVBUUkFQRF9QUkVfSEFORExFUiAgICAgMgogI2RlZmluZSBORVRTTk1QVFJBUERfUE9TVF9IQU5ETEVSICAgIDMKKyNkZWZpbmUgTkVUU05NUFRSQVBEX0RFRkFVTFRfSEFORExFUiA0CiAKICNkZWZpbmUgTkVUU05NUFRSQVBEX0hBTkRMRVJfT0sgICAgICAxCS8qIFN1Y2NlZWQsICYga2VlcCBnb2luZyAqLwogI2RlZmluZSBORVRTTk1QVFJBUERfSEFORExFUl9GQUlMICAgIDIJLyogRmFpbGVkIGJ1dCBrZWVwIGdvaW5nICovCmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwZF9sb2cuYyBiL2FwcHMvc25tcHRyYXBkX2xvZy5jCmluZGV4IGJjMGIxZTMuLjc3NGY3OTcgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHRyYXBkX2xvZy5jCisrKyBiL2FwcHMvc25tcHRyYXBkX2xvZy5jCkBAIC00MCw5ICs0MCw3IEBACiAjaWYgSEFWRV9TWVNfV0FJVF9ICiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2Vsc2UKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tJT19ICkBAIC0xMDYsNyArMTA0LDcgQEAKIHR5cGVkZWYgc3RydWN0IHsKICAgICBjaGFyICAgICAgICAgICAgY21kOyAgICAgICAgLyogdGhlIGZvcm1hdCBjb21tYW5kIGl0c2VsZiAqLwogICAgIHNpemVfdCAgICAgICAgICB3aWR0aDsgICAgICAvKiB0aGUgZmllbGQncyBtaW5pbXVtIHdpZHRoICovCi0gICAgc2l6ZV90ICAgICAgICAgIHByZWNpc2lvbjsgIC8qIHRoZSBmaWVsZCdzIHByZWNpc2lvbiAqLworICAgIGludCAgICAgICAgICAgICBwcmVjaXNpb247ICAvKiB0aGUgZmllbGQncyBwcmVjaXNpb24gKi8KICAgICBpbnQgICAgICAgICAgICAgbGVmdF9qdXN0aWZ5OyAgICAgICAvKiBpZiB0cnVlLCBsZWZ0IGp1c3RpZnkgdGhpcyBmaWVsZCAqLwogICAgIGludCAgICAgICAgICAgICBhbHRfZm9ybWF0OyAvKiBpZiB0cnVlLCBkaXNwbGF5IGluIGFsdGVybmF0ZSBmb3JtYXQgKi8KICAgICBpbnQgICAgICAgICAgICAgbGVhZGluZ196ZXJvZXM7ICAgICAvKiBpZiB0cnVlLCBkaXNwbGF5IHdpdGggbGVhZGluZyB6ZXJvZXMgKi8KQEAgLTM3MCw3ICszNjgsNyBAQAogICAgIHRlbXBfdG9fd3JpdGUgPSB0ZW1wX2xlbjsKIAogICAgIGlmIChvcHRpb25zLT5wcmVjaXNpb24gIT0gVU5ERUZfUFJFQ0lTSU9OICYmCi0gICAgICAgIHRlbXBfdG9fd3JpdGUgPiBvcHRpb25zLT5wcmVjaXNpb24pIHsKKyAgICAgICAgdGVtcF90b193cml0ZSA+IChzaXplX3Qpb3B0aW9ucy0+cHJlY2lzaW9uKSB7CiAgICAgICAgIHRlbXBfdG9fd3JpdGUgPSBvcHRpb25zLT5wcmVjaXNpb247CiAgICAgfQogCkBAIC02MTksOCArNjE3LDEwIEBACiAgICAgY2hhciAgICAgICAgICAgIGZtdF9jbWQgPSBvcHRpb25zLT5jbWQ7ICAgICAvKiB3aGF0IHdlJ3JlIGZvcm1hdHRpbmcgKi8KICAgICB1X2NoYXIgICAgICAgICAqdGVtcF9idWYgPSBOVUxMOwogICAgIHNpemVfdCAgICAgICAgICB0ZW1wX2J1Zl9sZW4gPSA2NCwgdGVtcF9vdXRfbGVuID0gMDsKKyAgICBjaGFyICAgICAgICAgICAqdHN0cjsKKyAgICB1bnNpZ25lZCBpbnQgICAgb2ZsYWdzOwogCi0gICAgaWYgKCh0ZW1wX2J1ZiA9IGNhbGxvYyh0ZW1wX2J1Zl9sZW4sIDEpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0ZW1wX2J1ZiA9ICh1X2NoYXIqKWNhbGxvYyh0ZW1wX2J1Zl9sZW4sIDEpKSA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNjQ4LDExICs2NDgsMTEgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQX05VTUVSSUNfSVApKSB7Ci0gICAgICAgICAgICBob3N0ID0gZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSBwZHUtPmFnZW50X2FkZHIsIDQsIEFGX0lORVQpOworICAgICAgICAgICAgaG9zdCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSBwZHUtPmFnZW50X2FkZHIsIDQsIEFGX0lORVQpOwogICAgICAgICB9CiAgICAgICAgIGlmIChob3N0ICE9IE5VTEwpIHsKICAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopaG9zdC0+aF9uYW1lKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyICopaG9zdC0+aF9uYW1lKSkgewogICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwogICAgICAgICAgICAgICAgIH0KQEAgLTY3NCwxMzAgKzY3NCw1OSBAQAogICAgICAgICAgKiBXcml0ZSB0aGUgbnVtZXJpY2FsIHRyYW5zcG9ydCBpbmZvcm1hdGlvbi4gIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKHRyYW5zcG9ydCAhPSBOVUxMICYmIHRyYW5zcG9ydC0+Zl9mbXRhZGRyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICp0c3RyID0KLSAgICAgICAgICAgICAgICB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHBkdS0+dHJhbnNwb3J0X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdAotICAgICAgICAgICAgICAgICgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sIDEsICh1X2NoYXIgKil0c3RyKSkgewotICAgICAgICAgICAgICAgIGlmICh0c3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh0c3RyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXBfYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh0ZW1wX2J1Zik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgb2ZsYWdzID0gdHJhbnNwb3J0LT5mbGFnczsKKyAgICAgICAgICAgIHRyYW5zcG9ydC0+ZmxhZ3MgJj0gfk5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfSE9TVE5BTUU7CisgICAgICAgICAgICB0c3RyID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKKyAgICAgICAgICAgIHRyYW5zcG9ydC0+ZmxhZ3MgPSBvZmxhZ3M7CisgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXRzdHIpIGdvdG8gbm9pcDsKKyAgICAgICAgICAgIGlmICghc25tcF9zdHJjYXQoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAodV9jaGFyICopdHN0cikpIHsKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodGVtcF9idWYpOworICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0c3RyKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmICh0c3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBmcmVlKHRzdHIpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgU05NUF9GUkVFKHRzdHIpOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdAotICAgICAgICAgICAgICAgICgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sIDEsCi0gICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSI8VU5LTk9XTj4iKSkgewotICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwotICAgICAgICAgICAgICAgIH0KK25vaXA6CisgICAgICAgICAgICBpZiAoIXNubXBfc3RyY2F0KCZ0ZW1wX2J1ZiwgJnRlbXBfYnVmX2xlbiwgJnRlbXBfb3V0X2xlbiwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciopIjxVTktOT1dOPiIpKSB7CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRlbXBfYnVmKTsKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBicmVhazsKIAotICAgICAgICAvKgotICAgICAgICAgKiBXcml0ZSBhIGhvc3QgbmFtZS4gIAotICAgICAgICAgKi8KICAgICBjYXNlIENIUl9QRFVfTkFNRToKICAgICAgICAgLyoKLSAgICAgICAgICogUmlnaHQsIGFwcGFyZW50bHkgYSBuYW1lIGxvb2t1cCBpcyB3YW50ZWQuICBUaGlzIGlzIG9ubHkgcmVhc29uYWJsZQotICAgICAgICAgKiBmb3IgdGhlIFVEUCBhbmQgVENQIHRyYW5zcG9ydCBkb21haW5zICh3ZSBkb24ndCB3YW50IHRvIHRyeSB0byBiZQotICAgICAgICAgKiB0b28gY2xldmVyIGhlcmUpLiAgCisgICAgICAgICAqIFRyeSB0byBjb252ZXJ0IHRoZSBudW1lcmljYWwgdHJhbnNwb3J0IGluZm9ybWF0aW9uCisgICAgICAgICAqICBpbnRvIGEgaG9zdG5hbWUuICBPciByYXRoZXIsIGhhdmUgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYworICAgICAgICAgKiAgYWRkcmVzcyBmb3JtYXR0aW5nIHJvdXRpbmUgZG8gdGhpcy4KKyAgICAgICAgICogT3RoZXJ3aXNlIGZhbGxzIGJhY2sgdG8gdGhlIG51bWVyaWMgYWRkcmVzcyBmb3JtYXQuCiAgICAgICAgICAqLwotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KLSAgICAgICAgaWYgKHRyYW5zcG9ydCAhPSBOVUxMICYmICh0cmFuc3BvcnQtPmRvbWFpbiA9PSBuZXRzbm1wVURQRG9tYWluIHx8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0LT5kb21haW4gPT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NubXBUQ1BEb21haW4pKSB7Ci0jZWxzZQotICAgICAgICBpZiAodHJhbnNwb3J0ICE9IE5VTEwgJiYgdHJhbnNwb3J0LT5kb21haW4gPT0gbmV0c25tcFVEUERvbWFpbikgewotI2VuZGlmCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGhpcyBpcyBraW5kIG9mIGJsZXRjaGVyb3VzIC0tIGl0IGJyZWFrcyB0aGUgb3BhY2l0eSBvZgotICAgICAgICAgICAgICogdHJhbnNwb3J0X2RhdGEgYnV0IG5ldmVyIG1pbmQgLS0gdGhlIGFsdGVybmF0aXZlIGlzIGEgbG90IG9mCi0gICAgICAgICAgICAgKiBtdW5naW5nIHN0cmluZ3MgZnJvbSBmX2ZtdGFkZHIuICAKLSAgICAgICAgICAgICAqLwotdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF91ZHBfYWRkcl9wYWlyX3MgeyAgIC8qIEZyb20gc25tcFVEUERvbWFpbi5jICovCi0gICAgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZV9hZGRyOwotICAgIHN0cnVjdCBpbl9hZGRyIGxvY2FsX2FkZHI7Ci19IG5ldHNubXBfdWRwX2FkZHJfcGFpcjsKLQotICAgICAgICAgICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyID0KLSAgICAgICAgICAgICAgICAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIHBkdS0+dHJhbnNwb3J0X2RhdGE7Ci0gICAgICAgICAgICBpZiAoYWRkciAhPSBOVUxMCi0gICAgICAgICAgICAgICAgJiYgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGggPT0KLSAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSkgewotICAgICAgICAgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BUFBfTlVNRVJJQ19JUCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaG9zdCA9Ci0gICAgICAgICAgICAgICAgICAgICAgICBnZXRob3N0YnlhZGRyKChjaGFyICopICYoYWRkci0+cmVtb3RlX2FkZHIuc2luX2FkZHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBBRl9JTkVUKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKGhvc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXNubXBfc3RyY2F0Ci0gICAgICAgICAgICAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKilob3N0LT5oX25hbWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAodGVtcF9idWYgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBpZiAoIXNubXBfc3RyY2F0Ci0gICAgICAgICAgICAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKilpbmV0X250b2EoYWRkci0+cmVtb3RlX2FkZHIuc2luX2FkZHIpKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBfYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKHRlbXBfYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBpZiAoIXNubXBfc3RyY2F0Ci0gICAgICAgICAgICAgICAgICAgICgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sIDEsCi0gICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyKikiPFVOS05PV04+IikpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRlbXBfYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICh0cmFuc3BvcnQgIT0gTlVMTCAmJiB0cmFuc3BvcnQtPmZfZm10YWRkciAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogU29tZSBvdGhlciBkb21haW4gZm9yIHdoaWNoIHdlIGRvIG5vdCBrbm93IGhvdyB0byBkbyBhIG5hbWUKLSAgICAgICAgICAgICAqIGxvb2t1cC4gIEZhbGwgYmFjayB0byB0aGUgZm9ybWF0dGVkIHRyYW5zcG9ydCBhZGRyZXNzLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICp0c3RyID0KLSAgICAgICAgICAgICAgICB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHBkdS0+dHJhbnNwb3J0X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdAotICAgICAgICAgICAgICAgICgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sIDEsICh1X2NoYXIgKil0c3RyKSkgewotICAgICAgICAgICAgICAgIGlmICh0c3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh0c3RyKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgaWYgKHRlbXBfYnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgZnJlZSh0ZW1wX2J1Zik7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICBpZiAodHJhbnNwb3J0ICE9IE5VTEwgJiYgdHJhbnNwb3J0LT5mX2ZtdGFkZHIgIT0gTlVMTCkgeworICAgICAgICAgICAgb2ZsYWdzID0gdHJhbnNwb3J0LT5mbGFnczsKKyAgICAgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUF9OVU1FUklDX0lQKSkKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfSE9TVE5BTUU7CisgICAgICAgICAgICB0c3RyID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKTsKKyAgICAgICAgICAgIHRyYW5zcG9ydC0+ZmxhZ3MgPSBvZmxhZ3M7CisgICAgICAgICAgCisgICAgICAgICAgICBpZiAoIXRzdHIpIGdvdG8gbm9ob3N0OworICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdCgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEsICh1X2NoYXIgKil0c3RyKSkgeworICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0ZW1wX2J1Zik7CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKHRzdHIpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKHRzdHIgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGZyZWUodHN0cik7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBTTk1QX0ZSRUUodHN0cik7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogV2UgYXJlIGtpbmQgb2Ygc3R1Y2shICAKLSAgICAgICAgICAgICAqLworbm9ob3N0OgogICAgICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdCgmdGVtcF9idWYsICZ0ZW1wX2J1Zl9sZW4sICZ0ZW1wX291dF9sZW4sIDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIqKSI8VU5LTk9XTj4iKSkgewotICAgICAgICAgICAgICAgIGlmICh0ZW1wX2J1ZiAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodGVtcF9idWYpOwogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC04NjQsNyArNzkzLDcgQEAKICAgICAgICAgLyoKICAgICAgICAgICogV3JpdGUgdGhlIGNvbnRleHQgb2lkLiAgCiAgICAgICAgICAqLwotICAgICAgICBpZiAoIXNwcmludF9yZWFsbG9jX29iamlkCisgICAgICAgIGlmICghc3ByaW50X3JlYWxsb2NfaGV4c3RyaW5nCiAgICAgICAgICAgICAoJnRlbXBfYnVmLCAmdGVtcF9idWZfbGVuLCAmdGVtcF9vdXRfbGVuLCAxLCBwZHUtPmNvbnRleHRFbmdpbmVJRCwKICAgICAgICAgICAgICBwZHUtPmNvbnRleHRFbmdpbmVJRExlbikpIHsKICAgICAgICAgICAgIGZyZWUodGVtcF9idWYpOwpAQCAtMTA2NCw5ICs5OTMsOSBAQAogICAgIGNoYXIgICAgICAgICAgICBmbXRfY21kID0gb3B0aW9ucy0+Y21kOyAgICAgLyogd2hhdCB3ZSdyZSBvdXRwdXR0aW5nICovCiAgICAgdV9jaGFyICAgICAgICAgKnRlbXBfYnVmID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgdGJ1Zl9sZW4gPSA2NDsKLSAgICBpbnQgICAgICAgICAgICAgaTsKKyAgICB1bnNpZ25lZCBpbnQgICAgaTsKIAotICAgIGlmICgodGVtcF9idWYgPSBjYWxsb2ModGJ1Zl9sZW4sIDEpKSA9PSBOVUxMKSB7CisgICAgaWYgKCh0ZW1wX2J1ZiA9ICh1X2NoYXIqKWNhbGxvYyh0YnVmX2xlbiwgMSkpID09IE5VTEwpIHsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQogCkBAIC0xMjMwLDcgKzExNTksNyBAQAogICAgICAgICB9CiAKICAgICAgICAgZm9yIChpID0gMDsgaSA8IHBkdS0+c2VjdXJpdHlOYW1lTGVuOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpc3ByaW50KHBkdS0+c2VjdXJpdHlOYW1lW2ldKSkgeworICAgICAgICAgICAgaWYgKGlzcHJpbnQoKHVuc2lnbmVkIGNoYXIpKHBkdS0+c2VjdXJpdHlOYW1lW2ldKSkpIHsKICAgICAgICAgICAgICAgICAqKCpidWYgKyAqb3V0X2xlbikgPSBwZHUtPnNlY3VyaXR5TmFtZVtpXTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgKigqYnVmICsgKm91dF9sZW4pID0gJy4nOwpAQCAtMTI1Miw3ICsxMTgxLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwZHUtPmNvbnRleHROYW1lTGVuOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChpc3ByaW50KHBkdS0+Y29udGV4dE5hbWVbaV0pKSB7CisgICAgICAgICAgICBpZiAoaXNwcmludCgodW5zaWduZWQgY2hhcikocGR1LT5jb250ZXh0TmFtZVtpXSkpKSB7CiAgICAgICAgICAgICAgICAgKigqYnVmICsgKm91dF9sZW4pID0gcGR1LT5jb250ZXh0TmFtZVtpXTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgKigqYnVmICsgKm91dF9sZW4pID0gJy4nOwpAQCAtMTQzOSw3ICsxMzY4LDcgQEAKICAgICAgKi8KICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQX05VTUVSSUNfSVApKSB7Ci0gICAgICAgIGhvc3QgPSBnZXRob3N0YnlhZGRyKChjaGFyICopIHBkdS0+YWdlbnRfYWRkciwgNCwgQUZfSU5FVCk7CisgICAgICAgIGhvc3QgPSBuZXRzbm1wX2dldGhvc3RieWFkZHIoKGNoYXIgKikgcGR1LT5hZ2VudF9hZGRyLCA0LCBBRl9JTkVUKTsKICAgICB9CiAgICAgaWYgKGhvc3QgIT0gKHN0cnVjdCBob3N0ZW50ICopIE5VTEwpIHsKICAgICAgICAgaWYgKCFzbm1wX3N0cmNhdApAQCAtMTc4OCw3ICsxNzE3LDcgQEAKICAgICAgICAgICAgICAqIFBhcnNpbmcgYSB3aWR0aCBmaWVsZC4gIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICByZXNldF9vcHRpb25zID0gVFJVRTsKLSAgICAgICAgICAgIGlmIChpc2RpZ2l0KG5leHRfY2hyKSkgeworICAgICAgICAgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKG5leHRfY2hyKSkpIHsKICAgICAgICAgICAgICAgICBvcHRpb25zLndpZHRoICo9IDEwOwogICAgICAgICAgICAgICAgIG9wdGlvbnMud2lkdGggKz0KICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5leHRfY2hyIC0gKHVuc2lnbmVkIGxvbmcpICcwJzsKQEAgLTE4MTksNyArMTc0OCw3IEBACiAgICAgICAgICAgICAgKiBQYXJzaW5nIGEgcHJlY2lzaW9uIGZpZWxkLiAgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJlc2V0X29wdGlvbnMgPSBUUlVFOwotICAgICAgICAgICAgaWYgKGlzZGlnaXQobmV4dF9jaHIpKSB7CisgICAgICAgICAgICBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikobmV4dF9jaHIpKSkgewogICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLnByZWNpc2lvbiA9PSBVTkRFRl9QUkVDSVNJT04pIHsKICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5wcmVjaXNpb24gPQogICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIG5leHRfY2hyIC0gKHVuc2lnbmVkIGxvbmcpICcwJzsKQEAgLTE4MzAsOCArMTc1OSw5IEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIGlmIChpc19mbXRfY21kKG5leHRfY2hyKSkgewogICAgICAgICAgICAgICAgIG9wdGlvbnMuY21kID0gbmV4dF9jaHI7Ci0gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMud2lkdGggPCBvcHRpb25zLnByZWNpc2lvbikgewotICAgICAgICAgICAgICAgICAgICBvcHRpb25zLndpZHRoID0gb3B0aW9ucy5wcmVjaXNpb247CisgICAgICAgICAgICAgICAgaWYgKChvcHRpb25zLnByZWNpc2lvbiAhPSBVTkRFRl9QUkVDSVNJT04pICYmCisgICAgICAgICAgICAgICAgICAgIChvcHRpb25zLndpZHRoIDwgKHNpemVfdClvcHRpb25zLnByZWNpc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy53aWR0aCA9IChzaXplX3Qpb3B0aW9ucy5wcmVjaXNpb247CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlmICghcmVhbGxvY19kaXNwYXRjaF9mb3JtYXRfY21kCiAgICAgICAgICAgICAgICAgICAgIChidWYsIGJ1Zl9sZW4sIG91dF9sZW4sIGFsbG93X3JlYWxsb2MsICZvcHRpb25zLCBwZHUsCmRpZmYgLS1naXQgYS9hcHBzL3NubXB0cmFwZF9zcWwuYyBiL2FwcHMvc25tcHRyYXBkX3NxbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWU1NDIKLS0tIC9kZXYvbnVsbAorKysgYi9hcHBzL3NubXB0cmFwZF9zcWwuYwpAQCAtMCwwICsxLDExMjAgQEAKKy8qCisgKiBGaWxlICAgICAgIDogc25tcHRyYXBkX3NxbAorICogQXV0aG9yICAgICA6IFJvYmVydCBTdG9yeQorICoKKyAqIENvcHlyaWdodCDCqSAyMDA5IFNjaWVuY2UgTG9naWMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKgorICogVGhpcyBmaWxlIGltcGxlbWVudHMgYSBoYW5kbGVyIGZvciBzbm1wdHJhcGQgd2hpY2ggd2lsbCBjYWNoZSBpbmNvbWluZworICogdHJhcHMgYW5kIHRoZW4gd3JpdGUgdGhlbSB0byBhIE15U1FMIGRhdGFiYXNlLgorICoKKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpZmRlZiBORVRTTk1QX1VTRV9NWVNRTAorCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSAic25tcHRyYXBkX2hhbmRsZXJzLmgiCisjaW5jbHVkZSAic25tcHRyYXBkX2F1dGguaCIKKyNpbmNsdWRlICJzbm1wdHJhcGRfbG9nLmgiCisKKy8qCisgKiBTUUwgaW5jbHVkZXMKKyAqLworI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisjdW5kZWYgUEFDS0FHRV9OQU1FCisjdW5kZWYgUEFDS0FHRV9TVFJJTkcKKyN1bmRlZiBQQUNLQUdFX1RBUk5BTUUKKyN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KKyNpbmNsdWRlIDxteV9nbG9iYWwuaD4KKyNpbmNsdWRlIDxteV9zeXMuaD4KKyNpbmNsdWRlIDxteXNxbC5oPgorI2luY2x1ZGUgPGVycm1zZy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfZmlmbykKKworLyoKKyAqIGRlZmluZSBhIHN0cnVjdHVyZSB0byBob2xkIGFsbCB0aGUgZmlsZSBnbG9iYWxzCisgKi8KK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfc3FsX2dsb2JhbHNfdCB7CisgICAgY2hhciAgICAgICAgKmhvc3RfbmFtZTsgICAgICAgLyogc2VydmVyIGhvc3QgKGRlZj1sb2NhbGhvc3QpICovCisgICAgY2hhciAgICAgICAgKnVzZXJfbmFtZTsgICAgICAgLyogdXNlcm5hbWUgKGRlZj1sb2dpbiBuYW1lKSAqLworICAgIGNoYXIgICAgICAgICpwYXNzd29yZDsgICAgICAgIC8qIHBhc3N3b3JkIChkZWY9bm9uZSkgKi8KKyAgICB1X2ludCAgICAgICAgcG9ydF9udW07ICAgICAgICAvKiBwb3J0IG51bWJlciAoYnVpbHQtaW4gdmFsdWUpICovCisgICAgY2hhciAgICAgICAgKnNvY2tldF9uYW1lOyAgICAgLyogc29ja2V0IG5hbWUgKGJ1aWx0LWluIHZhbHVlKSAqLworICAgIGNvbnN0IGNoYXIgICpkYl9uYW1lOyAgICAgICAgIC8qIGRhdGFiYXNlIG5hbWUgKGRlZj1ub25lKSAqLworICAgIHVfaW50ICAgICAgICBmbGFnczsgICAgICAgICAgIC8qIGNvbm5lY3Rpb24gZmxhZ3MgKG5vbmUpICovCisgICAgTVlTUUwgICAgICAgKmNvbm47ICAgICAgICAgICAgLyogY29ubmVjdGlvbiAqLworICAgIHVfY2hhciAgICAgICBjb25uZWN0ZWQ7ICAgICAgIC8qIGNvbm5lY3RlZCBmbGFnICovCisgICAgY29uc3QgY2hhciAgKmdyb3Vwc1szXTsKKyAgICBNWVNRTF9TVE1UICAqdHJhcF9zdG10LCAqdmJfc3RtdDsgLyogcHJlcGFyZWQgc3RhdGVtZW50cyAqLworICAgIHVfaW50ICAgICAgICBhbGFybV9pZDsgICAgICAgIC8qIGlkIG9mIHBlcmlvZGljIHNhdmUgYWxhcm0gKi8KKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqcXVldWU7ICAgICAvKiBjb250YWluZXI7IHRyYXBzIHBlbmRpbmcgZGF0YWJhc2Ugd3JpdGUgKi8KKyAgICB1X2ludCAgICAgICAgcXVldWVfbWF4OyAgICAgICAvKiBhdXRvIHNhdmUgcXVldWUgd2hlbiBpdCBnZXRzIHRoaXMgYmlnICovCisgICAgaW50ICAgICAgICAgIHF1ZXVlX2ludGVydmFsOyAgLyogYXV0byBzYXZlIGV2ZXJ5IE4gc2Vjb25kcyAqLworfSBuZXRzbm1wX3NxbF9nbG9iYWxzOworCitzdGF0aWMgbmV0c25tcF9zcWxfZ2xvYmFscyBfc3FsID0geworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogaG9zdCAqLworICAgIE5VTEwsICAgICAgICAgICAgICAgICAgLyogdXNlcm5hbWUgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIHBhc3N3b3JkICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBwb3J0ICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBzb2NrZXQgKi8KKyAgICAibmV0X3NubXAiLCAgICAgICAgICAgIC8qIGRhdGFiYXNlICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBjb25uIGZsYWdzICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0aW9uICovCisgICAgMCwgICAgICAgICAgICAgICAgICAgICAvKiBjb25uZWN0ZWQgKi8KKyAgICB7ICJjbGllbnQiLCAic25tcHRyYXBkIiwgTlVMTCB9LCAgLyogZ3JvdXBzIHRvIHJlYWQgZnJvbSAubXkuY25mICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiB0cmFwX3N0bXQgKi8KKyAgICBOVUxMLCAgICAgICAgICAgICAgICAgIC8qIHZiX3N0bXQgKi8KKyAgICAwLCAgICAgICAgICAgICAgICAgICAgIC8qIGFsYXJtX2lkICovCisgICAgTlVMTCwgICAgICAgICAgICAgICAgICAvKiBxdWV1ZSAqLworICAgIDEsICAgICAgICAgICAgICAgICAgICAgLyogcXVldWVfbWF4ICovCisgICAgLTEgICAgICAgICAgICAgICAgICAgICAvKiBxdWV1ZV9pbnRlcnZhbCAqLworfTsKKworLyoKKyAqIGxvZyB0cmFwcyBhcyB0ZXh0LCBvciBiaW5hcnkgYmxvYnM/CisgKi8KKyNkZWZpbmUgTkVUU05NUF9NWVNRTF9UUkFQX1ZBTFVFX1RFWFQgMQorCisvKgorICogV2Ugd2lsbCBiZSB1c2luZyBwcmVwYXJlZCBzdGF0ZW1lbnRzIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzCisgKiByZXF1aXJlcyBhIHNxbCBiaW5kIHN0cnVjdHVyZSBmb3IgZWFjaCBjZWxsIHRvIGJlIGluc2VydGVkIGluIHRoZQorICogZGF0YWJhc2UuIFdlIHdpbGwgYmUgdXNpbmcgMiBnbG9iYWwgc3RhdGljIHN0cnVjdHVyZXMgdG8gYmluZCB0bywKKyAqIGFuZCBhIG5ldHNubXAgY29udGFpbmVyIHRvIHN0b3JlIHRoZSBuZWNlc3NhcnkgZGF0YSB1bnRpbCBpdCBpcworICogd3JpdHRlbiB0byB0aGUgZGF0YWJhc2UuIEZpeGVkIHNpemUgYnVmZmVycyBhcmUgYWxzbyB1c2VkIHRvCisgKiBzaW1wbGlmeSBtZW1vcnkgbWFuYWdlbWVudC4KKyAqLworLyoqIGVudW1zIGZvciB0aGUgdHJhcCBmaWVsZHMgdG8gYmUgYm91bmQgKi8KK2VudW17CisgICAgVEJJTkRfREFURSA9IDAsICAgICAgICAgICAvKiB0aW1lIHJlY2VpdmVkICovCisgICAgVEJJTkRfSE9TVCwgICAgICAgICAgICAgICAvKiBzcmMgaXAgKi8KKyAgICBUQklORF9VU0VSLCAgICAgICAgICAgICAgIC8qIGF1dGgvdXNlciBpbmZvcm1hdGlvbiAqLworICAgIFRCSU5EX1RZUEUsICAgICAgICAgICAgICAgLyogcGR1IHR5cGUgKi8KKyAgICBUQklORF9WRVIsICAgICAgICAgICAgICAgIC8qIHNubXAgdmVyc2lvbiAqLworICAgIFRCSU5EX1JFUUlELCAgICAgICAgICAgICAgLyogcmVxdWVzdCBpZCAqLworICAgIFRCSU5EX09JRCwgICAgICAgICAgICAgICAgLyogdHJhcCBPSUQgKi8KKyAgICBUQklORF9UUkFOU1BPUlQsICAgICAgICAgIC8qIHRyYW5zcG9ydCAqLworICAgIFRCSU5EX1NFQ1VSSVRZX01PREVMLCAgICAgLyogc2VjdXJpdHkgbW9kZWwgKi8KKyAgICBUQklORF92M19NU0dJRCwgICAgICAgICAgIC8qIHYzIG1zZyBpZCAqLworICAgIFRCSU5EX3YzX1NFQ1VSSVRZX0xFVkVMLCAgLyogc2VjdXJpdHkgbGV2ZWwgKi8KKyAgICBUQklORF92M19DT05URVhUX05BTUUsICAgIC8qIGNvbnRleHQgKi8KKyAgICBUQklORF92M19DT05URVhUX0VOR0lORSwgIC8qIGNvbnRleHQgZW5naW5lIGlkICovCisgICAgVEJJTkRfdjNfU0VDVVJJVFlfTkFNRSwgICAvKiBzZWN1cml0eSBuYW1lICovCisgICAgVEJJTkRfdjNfU0VDVVJJVFlfRU5HSU5FLCAvKiBzZWN1cml0eSBlbmdpbmUgaWQgKi8KKyAgICBUQklORF9NQVgKK307CisKKy8qKiBlbnVtcyBmb3IgdGhlIHZhcmJpbmQgZmllbGRzIHRvIGJlIGJvdW5kICovCitlbnVtIHsKKyAgICBWQklORF9JRCA9IDAsICAgICAgICAgICAgIC8qIHRyYXBfaWQgKi8KKyAgICBWQklORF9PSUQsICAgICAgICAgICAgICAgIC8qIHZhcmJpbmQgb2lkICovCisgICAgVkJJTkRfVFlQRSwgICAgICAgICAgICAgICAvKiB2YXJiaW5kIHR5cGUgKi8KKyAgICBWQklORF9WQUwsICAgICAgICAgICAgICAgIC8qIHZhcmJpbmQgdmFsdWUgKi8KKyAgICBWQklORF9NQVgKK307CisKKy8qKiBidWZmZXIgc3RydWN0IGZvciB2YXJiaW5kIGRhdGEgKi8KK3R5cGVkZWYgc3RydWN0IHNxbF92Yl9idWZfdCB7CisKKyAgICBjaGFyICAgICAgKm9pZDsKKyAgICB1X2xvbmcgICAgIG9pZF9sZW47CisKKyAgICB1X2NoYXIgICAgKnZhbDsKKyAgICB1X2xvbmcgICAgIHZhbF9sZW47CisKKyAgICB1aW50MTZfdCAgIHR5cGU7CisKK30gc3FsX3ZiX2J1ZjsKKworLyoqIGJ1ZmZlciBzdHJ1Y3QgZm9yIHRyYXAgZGF0YSAqLwordHlwZWRlZiBzdHJ1Y3Qgc3FsX2J1Zl90IHsKKyAgICBjaGFyICAgICAgKmhvc3Q7CisgICAgdV9sb25nICAgICBob3N0X2xlbjsKKworICAgIGNoYXIgICAgICAqb2lkOworICAgIHVfbG9uZyAgICAgb2lkX2xlbjsKKworICAgIGNoYXIgICAgICAqdXNlcjsKKyAgICB1X2xvbmcgICAgIHVzZXJfbGVuOworCisgICAgTVlTUUxfVElNRSB0aW1lOworICAgIHVpbnQxNl90ICAgdmVyc2lvbiwgdHlwZTsKKyAgICB1aW50MzJfdCAgIHJlcWlkOworCisgICAgY2hhciAgICAgICp0cmFuc3BvcnQ7CisgICAgdV9sb25nICAgICB0cmFuc3BvcnRfbGVuOworCisgICAgdWludDE2X3QgICBzZWN1cml0eV9sZXZlbCwgc2VjdXJpdHlfbW9kZWw7CisgICAgdWludDMyX3QgICBtc2dpZDsKKworICAgIGNoYXIgICAgICAqY29udGV4dDsKKyAgICB1X2xvbmcgICAgIGNvbnRleHRfbGVuOworCisgICAgY2hhciAgICAgICpjb250ZXh0X2VuZ2luZTsKKyAgICB1X2xvbmcgICAgIGNvbnRleHRfZW5naW5lX2xlbjsKKworICAgIGNoYXIgICAgICAqc2VjdXJpdHlfbmFtZTsKKyAgICB1X2xvbmcgICAgIHNlY3VyaXR5X25hbWVfbGVuOworCisgICAgY2hhciAgICAgICpzZWN1cml0eV9lbmdpbmU7CisgICAgdV9sb25nICAgICBzZWN1cml0eV9lbmdpbmVfbGVuOworCisgICAgbmV0c25tcF9jb250YWluZXIgKnZhcmJpbmRzOworCisgICAgY2hhciAgICAgICBsb2dnZWQ7Cit9IHNxbF9idWY7CisKKy8qCisgKiBzdGF0aWMgYmluZCBzdHJ1Y3R1cmVzLCBwbHVzIDIgc3RhdGljIGJ1ZmZlcnMgdG8gYmluZCB0by4KKyAqLworc3RhdGljIE1ZU1FMX0JJTkQgX3RiaW5kW1RCSU5EX01BWF0sIF92YmluZFtWQklORF9NQVhdOworc3RhdGljIG15X2Jvb2wgICAgX25vX3YzOworCitzdGF0aWMgdm9pZCBfc3FsX3Byb2Nlc3NfcXVldWUodV9pbnQgZG9udGNhcmUsIHZvaWQgKm1lZWl0aGVyKTsKKworLyoKKyAqIHBhcnNlIHRoZSBzcWxNYXhRdWV1ZSBjb25maWd1cmF0aW9uIHRva2VuCisgKi8KK3N0YXRpYyB2b2lkCitfcGFyc2VfcXVldWVfZm10KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworICAgIF9zcWwucXVldWVfbWF4ID0gYXRvaShjcHRyKTsKKyAgICBERUJVR01TR1RMKCgic3FsOnF1ZXVlIiwicXVldWUgbWF4IG5vdyAlZFxuIiwgX3NxbC5xdWV1ZV9tYXgpKTsKK30KKworLyoKKyAqIHBhcnNlIHRoZSBzcWxTYXZlSW50ZXJ2YWwgY29uZmlndXJhdGlvbiB0b2tlbgorICovCitzdGF0aWMgdm9pZAorX3BhcnNlX2ludGVydmFsX2ZtdChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikKK3sKKyAgICBfc3FsLnF1ZXVlX2ludGVydmFsID0gYXRvaShjcHRyKTsKKyAgICBERUJVR01TR1RMKCgic3FsOnF1ZXVlIiwicXVldWUgaW50ZXJ2YWwgbm93ICVkIHNlY29uZHNcbiIsCisgICAgICAgICAgICAgICAgX3NxbC5xdWV1ZV9pbnRlcnZhbCkpOworfQorCisvKgorICogcmVnaXN0ZXIgc3FsIHJlbGF0ZWQgY29uZmlndXJhdGlvbiB0b2tlbnMKKyAqLwordm9pZAorc25tcHRyYXBkX3JlZ2lzdGVyX3NxbF9jb25maWdzKCB2b2lkICkKK3sKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcHRyYXBkIiwgInNxbE1heFF1ZXVlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFyc2VfcXVldWVfZm10LCBOVUxMLCAiaW50ZWdlciIpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wdHJhcGQiLCAic3FsU2F2ZUludGVydmFsIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBfcGFyc2VfaW50ZXJ2YWxfZm10LCBOVUxMLCAic2Vjb25kcyIpOworfQorCitzdGF0aWMgdm9pZAorbmV0c25tcF9zcWxfZGlzY29ubmVjdGVkKHZvaWQpCit7CisgICAgREVCVUdNU0dUTCgoInNxbDpjb25uZWN0aW9uIiwiZGlzY29ubmVjdGVkXG4iKSk7CisKKyAgICBfc3FsLmNvbm5lY3RlZCA9IDA7CisKKyAgICAvKiogcmVsZWFzZSBwcmVwYXJlZCBzdGF0ZW1lbnRzICovCisgICAgaWYgKF9zcWwudHJhcF9zdG10KSB7CisgICAgICAgIG15c3FsX3N0bXRfY2xvc2UoX3NxbC50cmFwX3N0bXQpOworICAgICAgICBfc3FsLnRyYXBfc3RtdCA9IE5VTEw7CisgICAgfQorICAgIGlmIChfc3FsLnZiX3N0bXQpIHsKKyAgICAgICAgbXlzcWxfc3RtdF9jbG9zZShfc3FsLnZiX3N0bXQpOworICAgICAgICBfc3FsLnZiX3N0bXQgPSBOVUxMOworICAgIH0KK30KKworLyoKKyAqIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRvIGxvZyBteXNxbCBlcnJvcnMKKyAqLworc3RhdGljIHZvaWQKK25ldHNubXBfc3FsX2Vycm9yKGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisgICAgdV9pbnQgZXJyID0gbXlzcWxfZXJybm8oX3NxbC5jb25uKTsKKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXNcbiIsIG1lc3NhZ2UpOworICAgIGlmIChfc3FsLmNvbm4gIT0gTlVMTCkgeworI2lmIE1ZU1FMX1ZFUlNJT05fSUQgPj0gNDAxMDEKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkVycm9yICV1ICglcyk6ICVzXG4iLAorICAgICAgICAgICAgICAgICBlcnIsIG15c3FsX3NxbHN0YXRlKF9zcWwuY29ubiksIG15c3FsX2Vycm9yKF9zcWwuY29ubikpOworI2Vsc2UKKyAgICAgICAgc25tcChMT0dfRVJSLCAiRXJyb3IgJXU6ICVzXG4iLAorICAgICAgICAgICAgIG15c3FsX2Vycm5vKF9zcWwuY29ubiksIG15c3FsX2Vycm9yKF9zcWwuY29ubikpOworI2VuZGlmCisgICAgfQorICAgIGlmIChDUl9TRVJWRVJfR09ORV9FUlJPUiA9PSBlcnIpCisgICAgICAgIG5ldHNubXBfc3FsX2Rpc2Nvbm5lY3RlZCgpOworfQorCisvKgorICogY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gbG9nIG15c3FsIHN0YXRlbWVudCBlcnJvcnMKKyAqLworc3RhdGljIHZvaWQKK25ldHNubXBfc3FsX3N0bXRfZXJyb3IgKE1ZU1FMX1NUTVQgKnN0bXQsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisgICAgdV9pbnQgZXJyID0gbXlzcWxfZXJybm8oX3NxbC5jb25uKTsKKworICAgIHNubXBfbG9nKExPR19FUlIsICIlc1xuIiwgbWVzc2FnZSk7CisgICAgaWYgKHN0bXQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlNRTCBFcnJvciAldSAoJXMpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgbXlzcWxfc3RtdF9lcnJubyhzdG10KSwgbXlzcWxfc3RtdF9zcWxzdGF0ZShzdG10KSwKKyAgICAgICAgICAgICAgICAgbXlzcWxfc3RtdF9lcnJvcihzdG10KSk7CisgICAgfQorICAgIAorICAgIGlmIChDUl9TRVJWRVJfR09ORV9FUlJPUiA9PSBlcnIpCisgICAgICAgIG5ldHNubXBfc3FsX2Rpc2Nvbm5lY3RlZCgpOworfQorCisvKgorICogc3FsIGNsZWFudXAgZnVuY3Rpb24sIGNhbGxlZCBhdCBleGl0CisgKi8KK3N0YXRpYyB2b2lkCituZXRzbm1wX215c3FsX2NsZWFudXAodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgic3FsOmNsZWFudXAiLCIgY2FsbGVkXG4iKSk7CisKKyAgICAvKiogdW5yZWdpc3RlciBhbGFybSAqLworICAgIGlmIChfc3FsLmFsYXJtX2lkKQorICAgICAgICBzbm1wX2FsYXJtX3VucmVnaXN0ZXIoX3NxbC5hbGFybV9pZCk7CisKKyAgICAvKiogc2F2ZSBhbnkgcXVldWVkIHRyYXBzICovCisgICAgaWYgKENPTlRBSU5FUl9TSVpFKF9zcWwucXVldWUpKQorICAgICAgICBfc3FsX3Byb2Nlc3NfcXVldWUoMCxOVUxMKTsKKworICAgIENPTlRBSU5FUl9GUkVFKF9zcWwucXVldWUpOworICAgIF9zcWwucXVldWUgPSBOVUxMOworCisgICAgaWYgKF9zcWwudHJhcF9zdG10KSB7CisgICAgICAgIG15c3FsX3N0bXRfY2xvc2UoX3NxbC50cmFwX3N0bXQpOworICAgICAgICBfc3FsLnRyYXBfc3RtdCA9IE5VTEw7CisgICAgfQorICAgIGlmIChfc3FsLnZiX3N0bXQpIHsKKyAgICAgICAgbXlzcWxfc3RtdF9jbG9zZShfc3FsLnZiX3N0bXQpOworICAgICAgICBfc3FsLnZiX3N0bXQgPSBOVUxMOworICAgIH0KKyAgICAKKyAgICAvKiogZGlzY29ubmVjdCBmcm9tIHNlcnZlciAqLworICAgIG5ldHNubXBfc3FsX2Rpc2Nvbm5lY3RlZCgpOworCisgICAgaWYgKF9zcWwuY29ubikgeworICAgICAgICBteXNxbF9jbG9zZShfc3FsLmNvbm4pOworICAgICAgICBfc3FsLmNvbm4gPSBOVUxMOworICAgIH0KKworICAgIG15c3FsX2xpYnJhcnlfZW5kKCk7Cit9CisKKy8qCisgKiBzZXR1cCAoaW5pdGlhbGl6ZSwgcHJlcGFyZSBhbmQgYmluZCkgYSBwcmVwYXJlZCBzdGF0ZW1lbnQKKyAqLworc3RhdGljIGludAorbmV0c25tcF9teXNxbF9iaW5kKGNvbnN0IGNoYXIgKnRleHQsIHNpemVfdCB0ZXh0X3NpemUsIE1ZU1FMX1NUTVQgKipzdG10LAorICAgICAgICAgICAgICAgICAgIE1ZU1FMX0JJTkQgKmJpbmQpCit7CisgICAgaWYgKChOVUxMID09IHRleHQpIHx8IChOVUxMID09IHN0bXQpIHx8IChOVUxMID09IGJpbmQpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImludmFsaWQgcGFyYW1hdGVycyB0byBuZXRzbm1wX215c3FsX2JpbmQoKVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqc3RtdCA9IG15c3FsX3N0bXRfaW5pdChfc3FsLmNvbm4pOworICAgIGlmIChOVUxMID09ICpzdG10KSB7CisgICAgICAgIG5ldHNubXBfc3FsX2Vycm9yKCJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0cmFwIHN0YXRlbWVudCBoYW5kbGVyIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAobXlzcWxfc3RtdF9wcmVwYXJlKCpzdG10LCB0ZXh0LCB0ZXh0X3NpemUpICE9IDApIHsKKyAgICAgICAgbmV0c25tcF9zcWxfc3RtdF9lcnJvcigqc3RtdCwgIkNvdWxkIG5vdCBwcmVwYXJlIElOU0VSVCIpOworICAgICAgICBteXNxbF9zdG10X2Nsb3NlKCpzdG10KTsKKyAgICAgICAgKnN0bXQgPSBOVUxMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSBhbmQgZG8gaW5pdGlhbCBzZXR1cAorICovCitzdGF0aWMgaW50CituZXRzbm1wX215c3FsX2Nvbm5lY3Qodm9pZCkKK3sKKyAgICBjaGFyIHRyYXBfc3RtdFtdID0gIklOU0VSVCBJTlRPIG5vdGlmaWNhdGlvbnMgIgorICAgICAgICAiKGRhdGVfdGltZSwgaG9zdCwgYXV0aCwgdHlwZSwgdmVyc2lvbiwgcmVxdWVzdF9pZCwgc25tcFRyYXBPSUQsIHRyYW5zcG9ydCwgc2VjdXJpdHlfbW9kZWwsIHYzbXNnaWQsIHYzc2VjdXJpdHlfbGV2ZWwsIHYzY29udGV4dF9uYW1lLCB2M2NvbnRleHRfZW5naW5lLCB2M3NlY3VyaXR5X25hbWUsIHYzc2VjdXJpdHlfZW5naW5lKSAiCisgICAgICAgICJWQUxVRVMoPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8sPyw/LD8pIjsKKyAgICBjaGFyIHZiX3N0bXRbXSA9ICJJTlNFUlQgSU5UTyB2YXJiaW5kcyAiCisgICAgICAgICIodHJhcF9pZCwgb2lkLCB0eXBlLCB2YWx1ZSkgVkFMVUVTICg/LD8sPyw/KSI7CisKKyAgICAvKiogaW5pdGlhbGl6ZSBjb25uZWN0aW9uIGhhbmRsZXIgKi8KKyAgICBpZiAoX3NxbC5jb25uZWN0ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgREVCVUdNU0dUTCgoInNxbDpjb25uZWN0aW9uIiwiY29ubmVjdGluZ1xuIikpOworCisgICAgLyoqIGNvbm5lY3QgdG8gc2VydmVyICovCisgICAgaWYgKG15c3FsX3JlYWxfY29ubmVjdCAoX3NxbC5jb25uLCBfc3FsLmhvc3RfbmFtZSwgX3NxbC51c2VyX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NxbC5wYXNzd29yZCwgX3NxbC5kYl9uYW1lLCBfc3FsLnBvcnRfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9zcWwuc29ja2V0X25hbWUsIF9zcWwuZmxhZ3MpID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF9zcWxfZXJyb3IoIm15c3FsX3JlYWxfY29ubmVjdCgpIGZhaWxlZCIpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisgICAgX3NxbC5jb25uZWN0ZWQgPSAxOworCisgICAgLyoqIGRpc2FibGUgYXV0b2NvbW1pdCAqLworICAgIGlmKDAgIT0gbXlzcWxfYXV0b2NvbW1pdChfc3FsLmNvbm4sIDApKSB7CisgICAgICAgIG5ldHNubXBfc3FsX2Vycm9yKCJteXNxbF9hdXRvY29tbWl0KDApIGZhaWxlZCIpOworICAgICAgICBnb3RvIGVycjsKKyAgICB9CisKKyAgICBuZXRzbm1wX2Fzc2VydCgoX3NxbC50cmFwX3N0bXQgPT0gTlVMTCkgJiYgKF9zcWwudmJfc3RtdCA9PSBOVUxMKSk7CisKKyAgICAvKiogcHJlcGFyZWQgc3RhdGVtZW50IGZvciBpbnNlcnRzICovCisgICAgaWYgKDAgIT0gbmV0c25tcF9teXNxbF9iaW5kKHRyYXBfc3RtdCxzaXplb2YodHJhcF9zdG10KSwgJl9zcWwudHJhcF9zdG10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGJpbmQpKQorICAgICAgICBnb3RvIGVycjsKKworICAgIGlmICgwICE9IG5ldHNubXBfbXlzcWxfYmluZCh2Yl9zdG10LHNpemVvZih2Yl9zdG10KSwmX3NxbC52Yl9zdG10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdmJpbmQpKSB7CisgICAgICAgIG15c3FsX3N0bXRfY2xvc2UoX3NxbC50cmFwX3N0bXQpOworICAgICAgICBfc3FsLnRyYXBfc3RtdCA9IE5VTEw7CisgICAgICAgIGdvdG8gZXJyOworICAgIH0KKworICAgIHJldHVybiAwOworCisgIGVycjoKKyAgICBpZiAoX3NxbC5jb25uZWN0ZWQpCisgICAgICAgIF9zcWwuY29ubmVjdGVkID0gMDsKKworICAgIHJldHVybiAtMTsKK30KKworLyoqIG9uZS10aW1lIGluaXRpYWxpemF0aW9uIGZvciBteXNxbCAqLworaW50CituZXRzbm1wX215c3FsX2luaXQodm9pZCkKK3sKKyAgICBpbnQgbm90X2FyZ2MgPSAwLCBpOworICAgIGNoYXIgKm5vdF9hcmdzW10gPSB7IE5VTEwgfTsKKyAgICBjaGFyICoqbm90X2FyZ3YgPSBub3RfYXJnczsKKyAgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKnRyYXBoOworCisgICAgREVCVUdNU0dUTCgoInNxbDppbml0IiwiY2FsbGVkXG4iKSk7CisKKyAgICAvKiogbmVnYXRpdmUgb3IgMCBpbnRlcnZhbCBkaXNhYmxlcyBzcWwgbG9nZ2luZyAqLworICAgIGlmIChfc3FsLnF1ZXVlX2ludGVydmFsIDw9IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNxbDppbml0IiwKKyAgICAgICAgICAgICAgICAgICAgIm15c3FsIG5vdCBlbmFibGVkIChzcWxTYXZlSW50ZXJ2YWwgaXMgPD0gMClcbiIpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyoqIGNyZWF0ZSBxdWV1ZSBmb3Igc3RvcmluZyB0cmFwcyB0aWwgdGhleSBhcmUgd3JpdHRlbiB0byB0aGUgZGIgKi8KKyAgICBfc3FsLnF1ZXVlID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZmlmbyIpOworICAgIGlmIChOVUxMID09IF9zcWwucXVldWUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzcWwgYnVmIGNvbnRhaW5lclxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyNpZmRlZiBIQVZFX0JST0tFTl9MSUJNWVNRTENMSUVOVAorICAgIG15X2luaXQoKTsKKyNlbHNlCisgICAgTVlfSU5JVCgic25tcHRyYXBkIik7CisjZW5kaWYKKworICAgIC8qKiBsb2FkIC5teS5jbmYgdmFsdWVzICovCisgICAgbG9hZF9kZWZhdWx0cyAoIm15IiwgX3NxbC5ncm91cHMsICZub3RfYXJnYywgJm5vdF9hcmd2KTsKKyAgICBmb3IoaT0wOyBpIDwgbm90X2FyZ2M7ICsraSkgeworICAgICAgICBpZiAoTlVMTCA9PSBub3RfYXJndltpXSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc3RybmNtcChub3RfYXJndltpXSwiLS1wYXNzd29yZD0iLDExKSA9PSAwKQorICAgICAgICAgICAgX3NxbC5wYXNzd29yZCA9ICZub3RfYXJndltpXVsxMV07CisgICAgICAgIGVsc2UgaWYgKHN0cm5jbXAobm90X2FyZ3ZbaV0sIi0taG9zdD0iLDcpID09IDApCisgICAgICAgICAgICBfc3FsLmhvc3RfbmFtZSA9ICZub3RfYXJndltpXVs3XTsKKyAgICAgICAgZWxzZSBpZiAoc3RybmNtcChub3RfYXJndltpXSwiLS11c2VyPSIsNykgPT0gMCkKKyAgICAgICAgICAgIF9zcWwudXNlcl9uYW1lID0gJm5vdF9hcmd2W2ldWzddOworICAgICAgICBlbHNlIGlmIChzdHJuY21wKG5vdF9hcmd2W2ldLCItLXBvcnQ9Iiw3KSA9PSAwKQorICAgICAgICAgICAgX3NxbC5wb3J0X251bSA9IGF0b2koJm5vdF9hcmd2W2ldWzddKTsKKyAgICAgICAgZWxzZSBpZiAoc3RybmNtcChub3RfYXJndltpXSwiLS1zb2NrZXQ9Iiw5KSA9PSAwKQorICAgICAgICAgICAgX3NxbC5zb2NrZXRfbmFtZSA9ICZub3RfYXJndltpXVs5XTsKKyAgICAgICAgZWxzZSBpZiAoc3RybmNtcChub3RfYXJndltpXSwiLS1kYXRhYmFzZT0iLDExKSA9PSAwKQorICAgICAgICAgICAgX3NxbC5kYl9uYW1lID0gJm5vdF9hcmd2W2ldWzExXTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJ1bmtub3duIGFyZ3VtZW50WyVkXSAlc1xuIiwgaSwgbm90X2FyZ3ZbaV0pOworICAgIH0KKworICAgIC8qKiBpbml0IGJpbmQgc3RydWN0dXJlcyAqLworICAgIG1lbXNldChfdGJpbmQsIDB4MCwgc2l6ZW9mKF90YmluZCkpOworICAgIG1lbXNldChfdmJpbmQsIDB4MCwgc2l6ZW9mKF92YmluZCkpOworCisgICAgLyoqIHRyYXAgc3RhdGljIGJpbmRpbmdzICovCisgICAgX3RiaW5kW1RCSU5EX0hPU1RdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX0hPU1RdLmxlbmd0aCA9ICZfdGJpbmRbVEJJTkRfSE9TVF0uYnVmZmVyX2xlbmd0aDsKKworICAgIF90YmluZFtUQklORF9PSURdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX09JRF0ubGVuZ3RoID0gJl90YmluZFtUQklORF9PSURdLmJ1ZmZlcl9sZW5ndGg7CisKKyAgICBfdGJpbmRbVEJJTkRfUkVRSURdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9MT05HOworICAgIF90YmluZFtUQklORF9SRVFJRF0uaXNfdW5zaWduZWQgPSAxOworCisgICAgX3RiaW5kW1RCSU5EX1ZFUl0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NIT1JUOworICAgIF90YmluZFtUQklORF9WRVJdLmlzX3Vuc2lnbmVkID0gMTsKKworICAgIF90YmluZFtUQklORF9UWVBFXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU0hPUlQ7CisgICAgX3RiaW5kW1RCSU5EX1RZUEVdLmlzX3Vuc2lnbmVkID0gMTsKKworICAgIF90YmluZFtUQklORF9EQVRFXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfREFURVRJTUU7CisKKyAgICBfdGJpbmRbVEJJTkRfVVNFUl0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyAgICBfdGJpbmRbVEJJTkRfVVNFUl0ubGVuZ3RoID0gJl90YmluZFtUQklORF9VU0VSXS5idWZmZXJfbGVuZ3RoOworCisgICAgX3RiaW5kW1RCSU5EX1RSQU5TUE9SVF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyAgICBfdGJpbmRbVEJJTkRfVFJBTlNQT1JUXS5sZW5ndGggPSAmX3RiaW5kW1RCSU5EX1RSQU5TUE9SVF0uYnVmZmVyX2xlbmd0aDsKKworICAgIF90YmluZFtUQklORF9TRUNVUklUWV9NT0RFTF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NIT1JUOworICAgIF90YmluZFtUQklORF9TRUNVUklUWV9NT0RFTF0uaXNfdW5zaWduZWQgPSAxOworCisgICAgX3RiaW5kW1RCSU5EX3YzX01TR0lEXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfTE9ORzsKKyAgICBfdGJpbmRbVEJJTkRfdjNfTVNHSURdLmlzX3Vuc2lnbmVkID0gMTsKKyAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTEVWRUxdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TSE9SVDsKKyAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTEVWRUxdLmlzX3Vuc2lnbmVkID0gMTsKKyAgICBfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9OQU1FXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU1RSSU5HOworICAgIF90YmluZFtUQklORF92M19DT05URVhUX0VOR0lORV0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTkFNRV0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX1NUUklORzsKKyAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfTkFNRV0ubGVuZ3RoID0KKyAgICAgICAgJl90YmluZFtUQklORF92M19TRUNVUklUWV9OQU1FXS5idWZmZXJfbGVuZ3RoOworICAgIF90YmluZFtUQklORF92M19DT05URVhUX05BTUVdLmxlbmd0aCA9CisgICAgICAgICZfdGJpbmRbVEJJTkRfdjNfQ09OVEVYVF9OQU1FXS5idWZmZXJfbGVuZ3RoOworICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9FTkdJTkVdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TVFJJTkc7CisgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0VOR0lORV0ubGVuZ3RoID0KKyAgICAgICAgJl90YmluZFtUQklORF92M19TRUNVUklUWV9FTkdJTkVdLmJ1ZmZlcl9sZW5ndGg7CisgICAgX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfRU5HSU5FXS5sZW5ndGggPQorICAgICAgICAmX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfRU5HSU5FXS5idWZmZXJfbGVuZ3RoOworCisgICAgX3RiaW5kW1RCSU5EX3YzX01TR0lEXS5pc19udWxsID0KKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0xFVkVMXS5pc19udWxsID0KKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfTkFNRV0uaXNfbnVsbCA9CisgICAgICAgIF90YmluZFtUQklORF92M19DT05URVhUX0VOR0lORV0uaXNfbnVsbCA9CisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9OQU1FXS5pc19udWxsID0KKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0VOR0lORV0uaXNfbnVsbCA9ICZfbm9fdjM7CisgICAgCisgICAgLyoqIHZhcmlhYmxlIHN0YXRpYyBiaW5kaW5ncyAqLworICAgIF92YmluZFtWQklORF9JRF0uYnVmZmVyX3R5cGUgPSBNWVNRTF9UWVBFX0xPTkc7CisgICAgX3ZiaW5kW1ZCSU5EX0lEXS5pc191bnNpZ25lZCA9IDE7CisKKyAgICBfdmJpbmRbVkJJTkRfT0lEXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU1RSSU5HOworICAgIF92YmluZFtWQklORF9PSURdLmxlbmd0aCA9ICZfdmJpbmRbVkJJTkRfT0lEXS5idWZmZXJfbGVuZ3RoOworCisgICAgX3ZiaW5kW1ZCSU5EX1RZUEVdLmJ1ZmZlcl90eXBlID0gTVlTUUxfVFlQRV9TSE9SVDsKKyAgICBfdmJpbmRbVkJJTkRfVFlQRV0uaXNfdW5zaWduZWQgPSAxOworCisjaWZkZWYgTkVUU05NUF9NWVNRTF9UUkFQX1ZBTFVFX1RFWFQKKyAgICBfdmJpbmRbVkJJTkRfVkFMXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfU1RSSU5HOworI2Vsc2UKKyAgICBfdmJpbmRbVkJJTkRfVkFMXS5idWZmZXJfdHlwZSA9IE1ZU1FMX1RZUEVfQkxPQjsKKyNlbmRpZgorICAgIF92YmluZFtWQklORF9WQUxdLmxlbmd0aCA9ICZfdmJpbmRbVkJJTkRfVkFMXS5idWZmZXJfbGVuZ3RoOworCisgICAgX3NxbC5jb25uID0gbXlzcWxfaW5pdCAoTlVMTCk7CisgICAgaWYgKF9zcWwuY29ubiA9PSBOVUxMKSB7CisgICAgICAgIG5ldHNubXBfc3FsX2Vycm9yKCJteXNxbF9pbml0KCkgZmFpbGVkIChvdXQgb2YgbWVtb3J5PykiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiB0cnkgdG8gY29ubmVjdDsgd2UnbGwgdHJ5IGFnYWluIGxhdGVyIGlmIHdlIGZhaWwgKi8KKyAgICAodm9pZCkgbmV0c25tcF9teXNxbF9jb25uZWN0KCk7CisKKyAgICAvKiogcmVnaXN0ZXIgcGVyaW9kaWMgcXVldWUgc2F2ZSAqLworICAgIF9zcWwuYWxhcm1faWQgPSBzbm1wX2FsYXJtX3JlZ2lzdGVyKF9zcWwucXVldWVfaW50ZXJ2YWwsIC8qIHNlY29uZHMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAgICAgICAgICAgICAgICAgICAvKiByZXBlYXQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3FsX3Byb2Nlc3NfcXVldWUsICAvKiBmdW5jdGlvbiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOyAgICAgICAgICAgICAgIC8qIGNsaWVudCBhcmdzICovCisKKyAgICAvKiogYWRkIGhhbmRsZXIgKi8KKyAgICB0cmFwaCA9IG5ldHNubXBfYWRkX2dsb2JhbF90cmFwaGFuZGxlcihORVRTTk1QVFJBUERfUFJFX0hBTkRMRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlzcWxfaGFuZGxlcik7CisgICAgaWYgKE5VTEwgPT0gdHJhcGgpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCBhbGxvY2F0ZSBzcWwgdHJhcCBoYW5kbGVyXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB0cmFwaC0+YXV0aHR5cGVzID0gVFJBUF9BVVRIX0xPRzsKKworICAgIGF0ZXhpdChuZXRzbm1wX215c3FsX2NsZWFudXApOworICAgIHJldHVybiAwOworfQorCisvKgorICogbG9nIENTViB2ZXJzaW9uIG9mIHRyYXAuCisgKiBkb250Y2FyZSBwYXJhbSBpcyB0aGVyZSBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkKKyAqIHRvIENPTlRBSU5FUl9GT1JfRUFDSC4KKyAqLworc3RhdGljIHZvaWQKK19zcWxfbG9nKHNxbF9idWYgKnNxbGIsIHZvaWQqIGRvbnRjYXJlKQoreworICAgIG5ldHNubXBfaXRlcmF0b3IgICAgICppdDsKKyAgICBzcWxfdmJfYnVmICAgICAgICAgICAqc3FsdmI7CisKKyAgICBpZiAoKE5VTEwgPT0gc3FsYikgfHwgc3FsYi0+bG9nZ2VkKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIGxvZyB0cmFwIGluZm8KKyAgICAgKiBub3RoaW5nIGRvbmUgdG8gcHJvdGVjdCBhZ2FpbnN0IGRhdGEgaW5zZXJ0aW9uIGF0dGFja3Mgd2l0aAorICAgICAqIHJlc3BlY3QgdG8gYmFkIGRhdGEgKGNvbW1hcywgbmV3bGluZXMsIGV0YykKKyAgICAgKi8KKyAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICJ0cmFwOiVkLSVkLSVkICVkOiVkOiVkLCVzLCVkLCVkLCVkLCVzLCVzLCVkLCVkLCVkLCVzLCVzLCVzLCVzXG4iLAorICAgICAgICAgICAgIHNxbGItPnRpbWUueWVhcixzcWxiLT50aW1lLm1vbnRoLHNxbGItPnRpbWUuZGF5LAorICAgICAgICAgICAgIHNxbGItPnRpbWUuaG91cixzcWxiLT50aW1lLm1pbnV0ZSxzcWxiLT50aW1lLnNlY29uZCwKKyAgICAgICAgICAgICBzcWxiLT51c2VyLAorICAgICAgICAgICAgIHNxbGItPnR5cGUsIHNxbGItPnZlcnNpb24sIHNxbGItPnJlcWlkLCBzcWxiLT5vaWQsCisgICAgICAgICAgICAgc3FsYi0+dHJhbnNwb3J0LCBzcWxiLT5zZWN1cml0eV9tb2RlbCwgc3FsYi0+bXNnaWQsCisgICAgICAgICAgICAgc3FsYi0+c2VjdXJpdHlfbGV2ZWwsIHNxbGItPmNvbnRleHQsCisgICAgICAgICAgICAgc3FsYi0+Y29udGV4dF9lbmdpbmUsIHNxbGItPnNlY3VyaXR5X25hbWUsCisgICAgICAgICAgICAgc3FsYi0+c2VjdXJpdHlfZW5naW5lKTsKKworICAgIHNxbGItPmxvZ2dlZCA9IDE7IC8qIHByZXZlbnQgbXVsdGlwbGUgbG9nZ2luZyAqLworCisgICAgaXQgPSBDT05UQUlORVJfSVRFUkFUT1Ioc3FsYi0+dmFyYmluZHMpOworICAgIGlmIChOVUxMID09IGl0KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBpdGVyYXRvcjsgaW5jb21wbGV0ZSB0cmFwIGxvZ2dlZFxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiogbG9nIHZhcmJpbmQgaW5mbyAqLworICAgIGZvciggc3FsdmIgPSBJVEVSQVRPUl9GSVJTVChpdCk7IHNxbHZiOyBzcWx2YiA9IElURVJBVE9SX05FWFQoaXQpKSB7CisjaWZkZWYgTkVUU05NUF9NWVNRTF9UUkFQX1ZBTFVFX1RFWFQKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwidmFyYmluZDolcywlc1xuIiwgc3FsdmItPm9pZCwgc3FsdmItPnZhbCk7CisjZWxzZQorICAgICAgICBjaGFyICpoZXg7CisgICAgICAgIGludCBsZW4gPSBiaW5hcnlfdG9faGV4KHNxbHZiLT52YWwsIHNxbHZiLT52YWxfbGVuLCAmaGV4KTsKKyAgICAgICAgaWYgKGhleCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwidmFyYmluZDolZCwlcywlc1xuIiwgc3FsdmItPm9pZCwgaGV4KTsKKyAgICAgICAgICAgIGZyZWUoaGV4KTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIm1hbGxvYyBmYWlsZWQgZm9yIHZhcmJpbmQgaGV4IHZhbHVlXG4iKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsInZhcmJpbmQ6JXMsXG4iLCBzcWx2Yi0+b2lkKTsKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworICAgCit9CisKKy8qCisgKiBmcmVlIGEgYnVmZmVyCisgKiBkb250Y2FyZSBwYXJhbSBpcyB0aGVyZSBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkKKyAqIHRvIENPTlRBSU5FUl9GT1JfRUFDSC4KKyAqLworc3RhdGljIHZvaWQKK19zcWxfdmJfYnVmX2ZyZWUoc3FsX3ZiX2J1ZiAqc3FsdmIsIHZvaWQqIGRvbnRjYXJlKQoreworICAgIGlmIChOVUxMID09IHNxbHZiKQorICAgICAgICByZXR1cm47CisKKyAgICBTTk1QX0ZSRUUoc3FsdmItPm9pZCk7CisgICAgU05NUF9GUkVFKHNxbHZiLT52YWwpOworCisgICAgZnJlZShzcWx2Yik7Cit9CisKKy8qCisgKiBmcmVlIGEgYnVmZmVyCisgKiBkb250Y2FyZSBwYXJhbSBpcyB0aGVyZSBzbyB0aGlzIGZ1bmN0aW9uIGNhbiBiZSBwYXNzZWQgZGlyZWN0bHkKKyAqIHRvIENPTlRBSU5FUl9GT1JfRUFDSC4KKyAqLworc3RhdGljIHZvaWQKK19zcWxfYnVmX2ZyZWUoc3FsX2J1ZiAqc3FsYiwgdm9pZCogZG9udGNhcmUpCit7CisgICAgaWYgKE5VTEwgPT0gc3FsYikKKyAgICAgICAgcmV0dXJuOworCisgICAgLyoqIGRvIHZhcmJpbmRzIGZpcnN0ICovCisgICAgaWYgKHNxbGItPnZhcmJpbmRzKSB7CisgICAgICAgIENPTlRBSU5FUl9DTEVBUihzcWxiLT52YXJiaW5kcywKKyAgICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX3NxbF92Yl9idWZfZnJlZSwgTlVMTCk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKHNxbGItPnZhcmJpbmRzKTsKKyAgICB9CisKKyAgICBTTk1QX0ZSRUUoc3FsYi0+aG9zdCk7CisgICAgU05NUF9GUkVFKHNxbGItPm9pZCk7CisgICAgU05NUF9GUkVFKHNxbGItPnVzZXIpOworCisgICAgU05NUF9GUkVFKHNxbGItPmNvbnRleHQpOworICAgIFNOTVBfRlJFRShzcWxiLT5zZWN1cml0eV9uYW1lKTsKKyAgICBTTk1QX0ZSRUUoc3FsYi0+Y29udGV4dF9lbmdpbmUpOworICAgIFNOTVBfRlJFRShzcWxiLT5zZWN1cml0eV9lbmdpbmUpOworICAgIFNOTVBfRlJFRShzcWxiLT50cmFuc3BvcnQpOworCisgICAgZnJlZShzcWxiKTsKK30KKworLyoKKyAqIGFsbG9jYXRlIGJ1ZmZlciB0byBzdG9yZSB0cmFwIGFuZCB2YXJiaW5kcworICovCitzdGF0aWMgc3FsX2J1ZiAqCitfc3FsX2J1Zl9nZXQodm9pZCkKK3sKKyAgICBzcWxfYnVmICpzcWxiOworCisgICAgLyoqIGJ1ZmZlciBmb3IgdHJhcCBpbmZvICovCisgICAgc3FsYiA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3FsX2J1Zik7CisgICAgaWYgKE5VTEwgPT0gc3FsYikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgLyoqIGZpZm8gZm9yIHZhcmJpbmRzICovCisgICAgc3FsYi0+dmFyYmluZHMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJmaWZvIik7CisgICAgaWYgKE5VTEwgPT0gc3FsYi0+dmFyYmluZHMpIHsKKyAgICAgICAgZnJlZShzcWxiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIHNxbGI7Cit9CisKKy8qCisgKiBzYXZlIGluZm8gZnJvbSBpbmNvbWluZyB0cmFwCisgKgorICogcmV0dXJuIDAgb24gc3VjY2VzcywgYW55dGhpbmcgZWxzZSBpcyBhbiBlcnJvcgorICovCitzdGF0aWMgaW50Citfc3FsX3NhdmVfdHJhcF9pbmZvKHNxbF9idWYgKnNxbGIsIG5ldHNubXBfcGR1ICAqcGR1LAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAgICAgKnRyYW5zcG9ydCkKK3sKKyAgICBzdGF0aWMgb2lkICAgdHJhcG9pZHNbXSA9IHsgMSwgMywgNiwgMSwgNiwgMywgMSwgMSwgNSwgMCB9OworICAgIG9pZCAgICAgICAgICp0cmFwX29pZCwgdG1wX29pZFtNQVhfT0lEX0xFTl07CisgICAgdGltZV90ICAgICAgIG5vdzsKKyAgICBzdHJ1Y3QgdG0gICAqY3VyX3RpbWU7CisgICAgc2l6ZV90ICAgICAgIHRtcF9zaXplOworICAgIHNpemVfdCAgICAgICBidWZfaG9zdF9sZW5fdCwgYnVmX29pZF9sZW5fdCwgYnVmX3VzZXJfbGVuX3Q7CisgICAgaW50ICAgICAgICAgIG9pZF9vdmVyZmxvdywgdHJhcF9vaWRfbGVuOworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyczsKKworICAgIGlmICgoTlVMTCA9PSBzcWxiKSB8fCAoTlVMTCA9PSBwZHUpIHx8IChOVUxMID09IHRyYW5zcG9ydCkpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVEwoKCJzcWw6cXVldWUiLCAicXVldWVpbmcgaW5jb21pbmcgdHJhcFxuIikpOworCisgICAgLyoqIHRpbWUgKi8KKyAgICAodm9pZCkgdGltZSgmbm93KTsKKyAgICBjdXJfdGltZSA9IGxvY2FsdGltZSgmbm93KTsKKyAgICBzcWxiLT50aW1lLnllYXIgPSBjdXJfdGltZS0+dG1feWVhciArIDE5MDA7CisgICAgc3FsYi0+dGltZS5tb250aCA9IGN1cl90aW1lLT50bV9tb24gKyAxOworICAgIHNxbGItPnRpbWUuZGF5ID0gY3VyX3RpbWUtPnRtX21kYXk7CisgICAgc3FsYi0+dGltZS5ob3VyID0gY3VyX3RpbWUtPnRtX2hvdXI7CisgICAgc3FsYi0+dGltZS5taW51dGUgPSBjdXJfdGltZS0+dG1fbWluOworICAgIHNxbGItPnRpbWUuc2Vjb25kID0gY3VyX3RpbWUtPnRtX3NlYzsKKyAgICBzcWxiLT50aW1lLnNlY29uZF9wYXJ0ID0gMDsKKyAgICBzcWxiLT50aW1lLm5lZyA9IDA7CisKKyAgICAvKiogaG9zdCBuYW1lICovCisgICAgYnVmX2hvc3RfbGVuX3QgPSAwOworICAgIHRtcF9zaXplID0gMDsKKyAgICByZWFsbG9jX2Zvcm1hdF90cmFwKCh1X2NoYXIqKikmc3FsYi0+aG9zdCwgJnRtcF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl9ob3N0X2xlbl90LCAxLCAiJUIiLCBwZHUsIHRyYW5zcG9ydCk7CisgICAgc3FsYi0+aG9zdF9sZW4gPSBidWZfaG9zdF9sZW5fdDsKKworICAgIC8qIHNubXBUcmFwT0lEICovCisgICAgaWYgKHBkdS0+Y29tbWFuZCA9PSBTTk1QX01TR19UUkFQKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNvbnZlcnQgYSB2MSB0cmFwIHRvIGEgdjIgdmFyYmluZAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKHBkdS0+dHJhcF90eXBlID09IFNOTVBfVFJBUF9FTlRFUlBSSVNFU1BFQ0lGSUMpIHsKKyAgICAgICAgICAgIHRyYXBfb2lkX2xlbiA9IHBkdS0+ZW50ZXJwcmlzZV9sZW5ndGg7CisgICAgICAgICAgICBtZW1jcHkodG1wX29pZCwgcGR1LT5lbnRlcnByaXNlLCBzaXplb2Yob2lkKSAqIHRyYXBfb2lkX2xlbik7CisgICAgICAgICAgICBpZiAodG1wX29pZFt0cmFwX29pZF9sZW4gLSAxXSAhPSAwKQorICAgICAgICAgICAgICAgIHRtcF9vaWRbdHJhcF9vaWRfbGVuKytdID0gMDsKKyAgICAgICAgICAgIHRtcF9vaWRbdHJhcF9vaWRfbGVuKytdID0gcGR1LT5zcGVjaWZpY190eXBlOworICAgICAgICAgICAgdHJhcF9vaWQgPSB0bXBfb2lkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJhcG9pZHNbOV0gPSBwZHUtPnRyYXBfdHlwZSArIDE7CisgICAgICAgICAgICB0cmFwX29pZCA9IHRyYXBvaWRzOworICAgICAgICAgICAgdHJhcF9vaWRfbGVuID0gT0lEX0xFTkdUSCh0cmFwb2lkcyk7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIHZhcnMgPSBwZHUtPnZhcmlhYmxlczsKKyAgICAgICAgaWYgKHZhcnMgJiYgdmFycy0+bmV4dF92YXJpYWJsZSkgeworICAgICAgICAgICAgdHJhcF9vaWRfbGVuID0gdmFycy0+bmV4dF92YXJpYWJsZS0+dmFsX2xlbiAvIHNpemVvZihvaWQpOworICAgICAgICAgICAgdHJhcF9vaWQgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlLT52YWwub2JqaWQ7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzdGF0aWMgb2lkIG51bGxfb2lkW10gPSB7IDAsIDAgfTsKKyAgICAgICAgICAgIHRyYXBfb2lkX2xlbiA9IE9JRF9MRU5HVEgobnVsbF9vaWQpOworICAgICAgICAgICAgdHJhcF9vaWQgPSBudWxsX29pZDsKKyAgICAgICAgfQorICAgIH0KKyAgICB0bXBfc2l6ZSA9IDA7CisgICAgYnVmX29pZF9sZW5fdCA9IG9pZF9vdmVyZmxvdyA9IDA7CisgICAgbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCh1X2NoYXIqKikmc3FsYi0+b2lkLCZ0bXBfc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl9vaWRfbGVuX3QsIDEsICZvaWRfb3ZlcmZsb3csCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYXBfb2lkLCB0cmFwX29pZF9sZW4pOworICAgIHNxbGItPm9pZF9sZW4gPSBidWZfb2lkX2xlbl90OworICAgIGlmIChvaWRfb3ZlcmZsb3cpCisgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCJPSUQgdHJ1bmNhdGVkIGluIHNxbCBidWZmZXJcbiIpOworCisgICAgLyoqIHJlcXVlc3QgaWQgKi8KKyAgICBzcWxiLT5yZXFpZCA9IHBkdS0+cmVxaWQ7CisKKyAgICAvKiogdmVyc2lvbiAoY29udmVydCB0byAxIGJhc2VkLCBmb3Igc3FsIGVudW0pICovCisgICAgc3FsYi0+dmVyc2lvbiA9IHBkdS0+dmVyc2lvbiArIDE7CisKKyAgICAvKiogY29tbWFuZCB0eXBlIChjb252ZXJ0IHRvIDEgYmFzZWQsIGZvciBzcWwgZW51bSkgKi8KKyAgICBzcWxiLT50eXBlID0gcGR1LT5jb21tYW5kIC0gMTU5OworCisgICAgLyoqIGNvbW11bml0eSBzdHJpbmcvdXNlciBuYW1lICovCisgICAgdG1wX3NpemUgPSAwOworICAgIGJ1Zl91c2VyX2xlbl90ID0gMDsKKyAgICByZWFsbG9jX2Zvcm1hdF90cmFwKCh1X2NoYXIqKikmc3FsYi0+dXNlciwgJnRtcF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl91c2VyX2xlbl90LCAxLCAiJXUiLCBwZHUsIHRyYW5zcG9ydCk7CisgICAgc3FsYi0+dXNlcl9sZW4gPSBidWZfdXNlcl9sZW5fdDsKKworICAgIC8qKiB0cmFuc3BvcnQgKi8KKyAgICBzcWxiLT50cmFuc3BvcnQgPSB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHBkdS0+dHJhbnNwb3J0X2RhdGEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOworCisgICAgLyoqIHNlY3VyaXR5IG1vZGVsICovCisgICAgc3FsYi0+c2VjdXJpdHlfbW9kZWwgPSBwZHUtPnNlY3VyaXR5TW9kZWw7CisKKyAgICBpZiAoKFNOTVBfTVBfTU9ERUxfU05NUHYzKzEpID09IHNxbGItPnZlcnNpb24pIHsKKworICAgICAgICBzcWxiLT5tc2dpZCA9IHBkdS0+bXNnaWQ7CisgICAgICAgIHNxbGItPnNlY3VyaXR5X2xldmVsID0gcGR1LT5zZWN1cml0eUxldmVsOworCisgICAgICAgIGlmIChwZHUtPmNvbnRleHROYW1lKSB7CisgICAgICAgICAgICBzcWxiLT5jb250ZXh0ID0gbmV0c25tcF9zdHJkdXBfYW5kX251bGwoKHVfY2hhciopcGR1LT5jb250ZXh0TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPmNvbnRleHROYW1lTGVuKTsKKyAgICAgICAgICAgIHNxbGItPmNvbnRleHRfbGVuID0gcGR1LT5jb250ZXh0TmFtZUxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGR1LT5jb250ZXh0RW5naW5lSUQpIHsKKyAgICAgICAgICAgIHNxbGItPmNvbnRleHRfZW5naW5lX2xlbiA9IAorICAgICAgICAgICAgICAgIGJpbmFyeV90b19oZXgocGR1LT5jb250ZXh0RW5naW5lSUQsIHBkdS0+Y29udGV4dEVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNxbGItPmNvbnRleHRfZW5naW5lKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZSkgeworICAgICAgICAgICAgc3FsYi0+c2VjdXJpdHlfbmFtZSA9CisgICAgICAgICAgICAgICAgbmV0c25tcF9zdHJkdXBfYW5kX251bGwoKHVfY2hhciopcGR1LT5zZWN1cml0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4pOworICAgICAgICAgICAgc3FsYi0+c2VjdXJpdHlfbmFtZV9sZW4gPSBwZHUtPnNlY3VyaXR5TmFtZUxlbjsKKyAgICAgICAgfQorICAgICAgICBpZiAocGR1LT5zZWN1cml0eUVuZ2luZUlEKSB7CisgICAgICAgICAgICBzcWxiLT5zZWN1cml0eV9lbmdpbmVfbGVuID0gCisgICAgICAgICAgICAgICAgYmluYXJ5X3RvX2hleChwZHUtPnNlY3VyaXR5RW5naW5lSUQsIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzcWxiLT5zZWN1cml0eV9lbmdpbmUpOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzYXZlIHZhcmJpbmQgaW5mbyBmcm9tIGluY29taW5nIHRyYXAKKyAqCisgKiByZXR1cm4gMCBvbiBzdWNjZXNzLCBhbnl0aGluZyBlbHNlIGlzIGFuIGVycm9yCisgKi8KK3N0YXRpYyBpbnQKK19zcWxfc2F2ZV92YXJiaW5kX2luZm8oc3FsX2J1ZiAqc3FsYiwgbmV0c25tcF9wZHUgICpwZHUpCit7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXI7CisgICAgc3FsX3ZiX2J1ZiAgICAgICAqc3FsdmI7CisgICAgc2l6ZV90ICAgICAgICAgICAgdG1wX3NpemUsIGJ1Zl9vaWRfbGVuX3Q7CisgICAgaW50ICAgICAgICAgICAgICAgb2lkX292ZXJmbG93LCByYzsKKyNpZmRlZiBORVRTTk1QX01ZU1FMX1RSQVBfVkFMVUVfVEVYVAorICAgIHNpemVfdCAgICAgICAgICAgIGJ1Zl92YWxfbGVuX3Q7CisjZW5kaWYKKworICAgIGlmICgoTlVMTCA9PSBzcWxiKSB8fCAoTlVMTCA9PSBwZHUpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB2YXIgPSBwZHUtPnZhcmlhYmxlczsKKyAgICB3aGlsZSh2YXIpIHsKKyAgICAgICAgc3FsdmIgPSBTTk1QX01BTExPQ19UWVBFREVGKHNxbF92Yl9idWYpOworICAgICAgICBpZiAoTlVMTCA9PSBzcWx2YikKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIC8qKiBPSUQgKi8KKyAgICAgICAgdG1wX3NpemUgPSAwOworICAgICAgICBidWZfb2lkX2xlbl90ID0gb2lkX292ZXJmbG93ID0gMDsKKyAgICAgICAgbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlKCh1X2NoYXIqKikmc3FsdmItPm9pZCwgJnRtcF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl9vaWRfbGVuX3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLCAmb2lkX292ZXJmbG93LCB2YXItPm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXItPm5hbWVfbGVuZ3RoKTsKKyAgICAgICAgc3FsdmItPm9pZF9sZW4gPSBidWZfb2lkX2xlbl90OworICAgICAgICBpZiAob2lkX292ZXJmbG93KQorICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsIk9JRCB0cnVuY2F0ZWQgaW4gc3FsIGluc2VydFxuIik7CisgICAgICAgIAorICAgICAgICAvKiogdHlwZSAqLworICAgICAgICBpZiAodmFyLT50eXBlID4gQVNOX09CSkVDVF9JRCkKKyAgICAgICAgICAgIC8qKiBjb252ZXJ0IGFwcGxpY2F0aW9uIHR5cGVzIHRvIHNxbCBlbnVtICovCisgICAgICAgICAgICBzcWx2Yi0+dHlwZSA9IEFTTl9PQkpFQ1RfSUQgKyAxICsgKHZhci0+dHlwZSAmIH5BU05fQVBQTElDQVRJT04pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzcWx2Yi0+dHlwZSA9IHZhci0+dHlwZTsKKworICAgICAgICAvKiogdmFsdWUgKi8KKyNpZmRlZiBORVRTTk1QX01ZU1FMX1RSQVBfVkFMVUVfVEVYVAorICAgICAgICB0bXBfc2l6ZSA9IDA7CisgICAgICAgIGJ1Zl92YWxfbGVuX3QgPSAwOworICAgICAgICBzcHJpbnRfcmVhbGxvY19ieV90eXBlKCh1X2NoYXIqKikmc3FsdmItPnZhbCwgJnRtcF9zaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZidWZfdmFsX2xlbl90LCAxLCB2YXIsIDAsIDAsIDApOworICAgICAgICBzcWx2Yi0+dmFsX2xlbiA9IGJ1Zl92YWxfbGVuX3Q7CisjZWxzZQorICAgICAgICBzcWx2Yi0+dmFsID0gbmV0c25tcF9tZW1kdXAodmFyLT52YWwuc3RyaW5nLCB2YXItPnZhbF9sZW4pOworICAgICAgICBzcWx2Yi0+dmFsX2xlbiA9IHZhci0+dmFsX2xlbjsKKyNlbmRpZgorCisgICAgICAgIHZhciA9IHZhci0+bmV4dF92YXJpYWJsZTsKKworICAgICAgICAvKiogaW5zZXJ0IGludG8gY29udGFpbmVyICovCisgICAgICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChzcWxiLT52YXJiaW5kcyxzcWx2Yik7CisgICAgICAgIGlmKHJjKQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkbid0IGluc2VydCB2YXJiaW5kIGludG8gdHJhcCBjb250YWluZXJcbiIpOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKgorICogc3FsIHRyYXAgaGFuZGxlcgorICovCitpbnQKK215c3FsX2hhbmRsZXIobmV0c25tcF9wZHUgICAgICAgICAgICpwZHUsCisgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0ICAgICAqdHJhbnNwb3J0LAorICAgICAgICAgICAgICBuZXRzbm1wX3RyYXBkX2hhbmRsZXIgKmhhbmRsZXIpCit7CisgICAgc3FsX2J1ZiAgICAgKnNxbGI7CisgICAgaW50ICAgICAgICAgIG9sZF9mb3JtYXQsIHJjOworCisgICAgREVCVUdNU0dUTCgoInNxbDpoYW5kbGVyIiwgImNhbGxlZFxuIikpOworCisgICAgLyoqIGFsbG9jYXRlIGEgYnVmZmVyIHRvIHNhdmUgZGF0YSAqLworICAgIHNxbGIgPSBfc3FsX2J1Zl9nZXQoKTsKKyAgICBpZiAoTlVMTCA9PSBzcWxiKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3QgYWxsb2NhdGUgdHJhcCBzcWwgYnVmZmVyXG4iKTsKKyAgICAgICAgcmV0dXJuIHN5c2xvZ19oYW5kbGVyKCBwZHUsIHRyYW5zcG9ydCwgaGFuZGxlciApOworICAgIH0KKworICAgIC8qKiBzYXZlIE9JRCBvdXRwdXQgZm9ybWF0IGFuZCBjaGFuZ2UgdG8gbnVtZXJpYyAqLworICAgIG9sZF9mb3JtYXQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQpOworICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX09JRF9PVVRQVVRfTlVNRVJJQyk7CisKKworICAgIHJjID0gX3NxbF9zYXZlX3RyYXBfaW5mbyhzcWxiLCBwZHUsIHRyYW5zcG9ydCk7CisgICAgcmMgPSBfc3FsX3NhdmVfdmFyYmluZF9pbmZvKHNxbGIsIHBkdSk7CisKKyAgICAvKiogcmVzdG9yZSBwcmV2aW91cyBPSUQgb3V0cHV0IGZvcm1hdCAqLworICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFULAorICAgICAgICAgICAgICAgICAgICAgICBvbGRfZm9ybWF0KTsKKworICAgIC8qKiBpbnNlcnQgaW50byBxdWV1ZSAqLworICAgIHJjID0gQ09OVEFJTkVSX0lOU0VSVChfc3FsLnF1ZXVlLCBzcWxiKTsKKyAgICBpZihyYykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQ291bGQgbm90IGxvZyBxdWV1ZSBzcWwgdHJhcCBidWZmZXJcbiIpOworICAgICAgICBfc3FsX2xvZyhzcWxiLCBOVUxMKTsKKyAgICAgICAgX3NxbF9idWZfZnJlZShzcWxiLCAwKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qKiBzYXZlIHF1ZXVlIGlmIHNpemUgaXMgPiBtYXggKi8KKyAgICBpZiAoQ09OVEFJTkVSX1NJWkUoX3NxbC5xdWV1ZSkgPj0gX3NxbC5xdWV1ZV9tYXgpCisgICAgICAgIF9zcWxfcHJvY2Vzc19xdWV1ZSgwLE5VTEwpOworCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBzYXZlIGEgYnVmZmVyZWQgdHJhcCB0byBzcWwgZGF0YWJhc2UKKyAqLworc3RhdGljIHZvaWQKK19zcWxfc2F2ZShzcWxfYnVmICpzcWxiLCB2b2lkICpkb250Y2FyZSkKK3sKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAgICAqaXQ7CisgICAgc3FsX3ZiX2J1ZiAgICAgICAgICAgKnNxbHZiOworICAgIHVfbG9uZyAgICAgICAgICAgICAgICB0cmFwX2lkOworCisgICAgLyoKKyAgICAgKiBkb24ndCBldmVuIHRyeSBpZiB3ZSBkb24ndCBoYXZlIGEgZGF0YWJhc2UgY29ubmVjdGlvbgorICAgICAqLworICAgIGlmICgwID09IF9zcWwuY29ubmVjdGVkKSB7CisgICAgICAgIF9zcWxfbG9nKHNxbGIsIE5VTEwpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiB0aGUgcHJlcGFyZWQgc3RhdGVtZW50cyBhcmUgYm91bmQgdG8gdGhlIHN0YXRpYyBidWZmZXIgb2JqZWN0cywKKyAgICAgKiBzbyBjb3B5IHRoZSBxdWV1ZWQgZGF0YSB0byB0aGUgc3RhdGljIHZlcnNpb24uCisgICAgICovCisgICAgX3RiaW5kW1RCSU5EX0hPU1RdLmJ1ZmZlciA9IHNxbGItPmhvc3Q7CisgICAgX3RiaW5kW1RCSU5EX0hPU1RdLmJ1ZmZlcl9sZW5ndGggPSBzcWxiLT5ob3N0X2xlbjsKKworICAgIF90YmluZFtUQklORF9PSURdLmJ1ZmZlciA9IHNxbGItPm9pZDsKKyAgICBfdGJpbmRbVEJJTkRfT0lEXS5idWZmZXJfbGVuZ3RoID0gc3FsYi0+b2lkX2xlbjsKKworICAgIF90YmluZFtUQklORF9SRVFJRF0uYnVmZmVyID0gKHZvaWQgKikmc3FsYi0+cmVxaWQ7CisgICAgX3RiaW5kW1RCSU5EX1ZFUl0uYnVmZmVyID0gKHZvaWQgKikmc3FsYi0+dmVyc2lvbjsKKyAgICBfdGJpbmRbVEJJTkRfVFlQRV0uYnVmZmVyID0gKHZvaWQgKikmc3FsYi0+dHlwZTsKKyAgICBfdGJpbmRbVEJJTkRfU0VDVVJJVFlfTU9ERUxdLmJ1ZmZlciA9ICh2b2lkICopJnNxbGItPnNlY3VyaXR5X21vZGVsOworCisgICAgX3RiaW5kW1RCSU5EX0RBVEVdLmJ1ZmZlciA9ICh2b2lkICopJnNxbGItPnRpbWU7CisKKyAgICBfdGJpbmRbVEJJTkRfVVNFUl0uYnVmZmVyID0gc3FsYi0+dXNlcjsKKyAgICBfdGJpbmRbVEJJTkRfVVNFUl0uYnVmZmVyX2xlbmd0aCA9IHNxbGItPnVzZXJfbGVuOworCisgICAgX3RiaW5kW1RCSU5EX1RSQU5TUE9SVF0uYnVmZmVyID0gc3FsYi0+dHJhbnNwb3J0OworICAgIGlmIChzcWxiLT50cmFuc3BvcnQpCisgICAgICAgIF90YmluZFtUQklORF9UUkFOU1BPUlRdLmJ1ZmZlcl9sZW5ndGggPSBzdHJsZW4oc3FsYi0+dHJhbnNwb3J0KTsKKyAgICBlbHNlCisgICAgICAgIF90YmluZFtUQklORF9UUkFOU1BPUlRdLmJ1ZmZlcl9sZW5ndGggPSAwOworCisKKyAgICBpZiAoKFNOTVBfTVBfTU9ERUxfU05NUHYzKzEpID09IHNxbGItPnZlcnNpb24pIHsKKyAgICAgICAgX25vX3YzID0gMDsKKworICAgICAgICBfdGJpbmRbVEJJTkRfdjNfTVNHSURdLmJ1ZmZlciA9ICZzcWxiLT5tc2dpZDsKKyAgICAgICAgCisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9MRVZFTF0uYnVmZmVyID0gJnNxbGItPnNlY3VyaXR5X2xldmVsOworICAgICAgICAKKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfTkFNRV0uYnVmZmVyID0gc3FsYi0+Y29udGV4dDsKKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX0NPTlRFWFRfTkFNRV0uYnVmZmVyX2xlbmd0aCA9IHNxbGItPmNvbnRleHRfbGVuOworCisgICAgICAgIF90YmluZFtUQklORF92M19DT05URVhUX0VOR0lORV0uYnVmZmVyID0gc3FsYi0+Y29udGV4dF9lbmdpbmU7CisgICAgICAgIF90YmluZFtUQklORF92M19DT05URVhUX0VOR0lORV0uYnVmZmVyX2xlbmd0aCA9CisgICAgICAgICAgICBzcWxiLT5jb250ZXh0X2VuZ2luZV9sZW47CisKKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX05BTUVdLmJ1ZmZlciA9IHNxbGItPnNlY3VyaXR5X25hbWU7CisgICAgICAgIF90YmluZFtUQklORF92M19TRUNVUklUWV9OQU1FXS5idWZmZXJfbGVuZ3RoID0gc3FsYi0+c2VjdXJpdHlfbmFtZV9sZW47CisKKyAgICAgICAgX3RiaW5kW1RCSU5EX3YzX1NFQ1VSSVRZX0VOR0lORV0uYnVmZmVyID0gc3FsYi0+c2VjdXJpdHlfZW5naW5lOworICAgICAgICBfdGJpbmRbVEJJTkRfdjNfU0VDVVJJVFlfRU5HSU5FXS5idWZmZXJfbGVuZ3RoID0KKyAgICAgICAgICAgIHNxbGItPnNlY3VyaXR5X2VuZ2luZV9sZW47CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBfbm9fdjMgPSAxOworICAgIH0KKworICAgIGlmIChteXNxbF9zdG10X2JpbmRfcGFyYW0oX3NxbC50cmFwX3N0bXQsIF90YmluZCkgIT0gMCkgeworICAgICAgICBuZXRzbm1wX3NxbF9zdG10X2Vycm9yKF9zcWwudHJhcF9zdG10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgYmluZCBwYXJhbWV0ZXJzIGZvciBJTlNFUlQiKTsKKyAgICAgICAgX3NxbF9sb2coc3FsYiwgTlVMTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiogZXhlY3V0ZSB0aGUgcHJlcGFyZWQgc3RhdGVtZW50ICovCisgICAgaWYgKG15c3FsX3N0bXRfZXhlY3V0ZShfc3FsLnRyYXBfc3RtdCkgIT0gMCkgeworICAgICAgICBuZXRzbm1wX3NxbF9zdG10X2Vycm9yKF9zcWwudHJhcF9zdG10LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZXhlY3V0ZSBpbnNlcnQgc3RhdGVtZW50IGZvciB0cmFwIik7CisgICAgICAgIF9zcWxfbG9nKHNxbGIsIE5VTEwpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHRyYXBfaWQgPSBteXNxbF9pbnNlcnRfaWQoX3NxbC5jb25uKTsKKworICAgIC8qCisgICAgICogaXRlcmF0ZSBvdmVyIHRoZSB2YXJiaW5kcywgY29weSBkYXRhIGFuZCBpbnNlcnQKKyAgICAgKi8KKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihzcWxiLT52YXJiaW5kcyk7CisgICAgaWYgKE5VTEwgPT0gaXQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiQ291bGQgbm90IGFsbG9jYXRlIGl0ZXJhdG9yXG4iKTsKKyAgICAgICAgX3NxbF9sb2coc3FsYiwgTlVMTCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBmb3IoIHNxbHZiID0gSVRFUkFUT1JfRklSU1QoaXQpOyBzcWx2Yjsgc3FsdmIgPSBJVEVSQVRPUl9ORVhUKGl0KSkgeworCisgICAgICAgIF92YmluZFtWQklORF9JRF0uYnVmZmVyID0gKHZvaWQgKikmdHJhcF9pZDsKKyAgICAgICAgX3ZiaW5kW1ZCSU5EX1RZUEVdLmJ1ZmZlciA9ICh2b2lkICopJnNxbHZiLT50eXBlOworCisgICAgICAgIF92YmluZFtWQklORF9PSURdLmJ1ZmZlciA9IHNxbHZiLT5vaWQ7CisgICAgICAgIF92YmluZFtWQklORF9PSURdLmJ1ZmZlcl9sZW5ndGggPSBzcWx2Yi0+b2lkX2xlbjsKKworICAgICAgICBfdmJpbmRbVkJJTkRfVkFMXS5idWZmZXIgPSBzcWx2Yi0+dmFsOworICAgICAgICBfdmJpbmRbVkJJTkRfVkFMXS5idWZmZXJfbGVuZ3RoID0gc3FsdmItPnZhbF9sZW47CisKKyAgICAgICAgaWYgKG15c3FsX3N0bXRfYmluZF9wYXJhbShfc3FsLnZiX3N0bXQsIF92YmluZCkgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zcWxfc3RtdF9lcnJvcihfc3FsLnZiX3N0bXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgYmluZCBwYXJhbWV0ZXJzIGZvciBJTlNFUlQiKTsKKyAgICAgICAgICAgIF9zcWxfbG9nKHNxbGIsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBpZiAobXlzcWxfc3RtdF9leGVjdXRlKF9zcWwudmJfc3RtdCkgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zcWxfc3RtdF9lcnJvcihfc3FsLnZiX3N0bXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgZXhlY3V0ZSBpbnNlcnQgc3RhdGVtZW50IGZvciB2YXJiaW5kIik7CisgICAgICAgICAgICBfc3FsX2xvZyhzcWxiLCBOVUxMKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXQpOworfQorCisvKgorICogcHJvY2VzcyAoc2F2ZSkgcXVldWVkIGl0ZW1zIHRvIHNxbCBkYXRhYmFzZS4KKyAqCisgKiBkb250Y2FyZSAmIG1lZWl0aGVyIGFyZSBkdW1teSBwYXJhbXMgc28gdGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZAorICogYXMgYSBuZXRzbm1wX2FsYXJtIGNhbGxiYWNrIGZ1bmN0aW9uLgorICovCitzdGF0aWMgdm9pZAorX3NxbF9wcm9jZXNzX3F1ZXVlKHVfaW50IGRvbnRjYXJlLCB2b2lkICptZWVpdGhlcikKK3sKKyAgICBpbnQgICAgICAgIHJjOworCisgICAgLyoqIGJhaWwgaWYgdGhlIHF1ZXVlIGlzIGVtcHR5ICovCisgICAgaWYoIDAgPT0gQ09OVEFJTkVSX1NJWkUoX3NxbC5xdWV1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoInNxbDpwcm9jZXNzIiwgInByb2Nlc3NpbmcgJWQgcXVldWVkIHRyYXBzXG4iLAorICAgICAgICAgICAgICAgKGludClDT05UQUlORVJfU0laRShfc3FsLnF1ZXVlKSkpOworCisgICAgLyoKKyAgICAgKiBpZiB3ZSBkb24ndCBoYXZlIGEgZGF0YWJhc2UgY29ubmVjdGlvbiwgdHJ5IHRvIHJlY29ubmVjdC4gV2UKKyAgICAgKiBkb24ndCBjYXJlIGlmIHdlIGZhaWwgLSB0cmFwcyB3aWxsIGJlIGxvZ2dlZCBpbiB0aGF0IGNhc2UuCisgICAgICovCisgICAgaWYgKDAgPT0gX3NxbC5jb25uZWN0ZWQpIHsKKyAgICAgICAgREVCVUdNU0dUKCgic3FsOnByb2Nlc3MiLCAibm8gc3FsIGNvbm5lY3Rpb247IHJlY29ubmVjdGluZ1xuIikpOworICAgICAgICAodm9pZCkgbmV0c25tcF9teXNxbF9jb25uZWN0KCk7CisgICAgfQorCisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKF9zcWwucXVldWUsIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX3NxbF9zYXZlLAorICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIGlmIChfc3FsLmNvbm5lY3RlZCkgeworICAgICAgICByYyA9IG15c3FsX2NvbW1pdChfc3FsLmNvbm4pOworICAgICAgICBpZiAocmMpIHsgLyogbnV0cy4uLiBub3cgd2hhdD8gKi8KKyAgICAgICAgICAgIG5ldHNubXBfc3FsX2Vycm9yKCJjb21taXQgZmFpbGVkIik7CisgICAgICAgICAgICBDT05UQUlORVJfRk9SX0VBQ0goX3NxbC5xdWV1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9zcWxfbG9nLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICB9CisgICAgfQorCisgICAgQ09OVEFJTkVSX0NMRUFSKF9zcWwucXVldWUsIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopX3NxbF9idWZfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9CisKKyNlbHNlCitpbnQgdW51c2VkOwkvKiBTdXBwcmVzcyAiZW1wdHkgdHJhbnNsYXRpb24gdW5pdCIgd2FybmluZyAqLworI2VuZGlmIC8qIE5FVFNOTVBfVVNFX01ZU1FMICovCmRpZmYgLS1naXQgYS9hcHBzL3NubXB1c20uYyBiL2FwcHMvc25tcHVzbS5jCmluZGV4IGQxY2JhODcuLjQyOTE5YmQgMTAwNjQ0Ci0tLSBhL2FwcHMvc25tcHVzbS5jCisrKyBiL2FwcHMvc25tcHVzbS5jCkBAIC0zNiwxMSArMzYsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTUyLDkgKzQ4LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtMTI5LDYgKzEyMiw3IEBACiBzaXplX3QgICAgICAgICAgdXNtVXNlckVuZ2luZUlETGVuID0gMDsKIHVfY2hhciAgICAgICAgICp1c21Vc2VyRW5naW5lSUQgPSBOVUxMOwogY2hhciAgICAgICAgICAgKnVzbVVzZXJQdWJsaWNfdmFsID0gTlVMTDsKK2ludCAgICAgICAgICAgICBkb2NyZWF0ZWFuZHdhaXQgPSAwOwogCiAKIHZvaWQKQEAgLTEzOSwxOSArMTMzLDIxIEBACiAgICAgZnByaW50ZihzdGRlcnIsICIgQ09NTUFORFxuXG4iKTsKICAgICBzbm1wX3BhcnNlX2FyZ3NfZGVzY3JpcHRpb25zKHN0ZGVycik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcbnNubXB1c20gY29tbWFuZHM6XG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdIGNyZWF0ZSAgICAgVVNFUiBbQ0xPTkVGUk9NLVVTRVJdXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdIGRlbGV0ZSAgICAgVVNFUlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSBjbG9uZUZyb20gIFVTRVIgQ0xPTkVGUk9NLVVTRVJcbiIpOwotICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gYWN0aXZhdGUgICBVU0VSXG4iKTsKLSAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdIGRlYWN0aXZhdGUgVVNFUlxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIsICIgIFtvcHRpb25zXSBbLUNhXSBbLUN4XSBjaGFuZ2VrZXkgW1VTRVJdXG4iKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgIiAgW29wdGlvbnNdICAgICAgICAgICAgICAgY3JlYXRlICAgICBVU0VSIFtDTE9ORUZST00tVVNFUl1cbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gICAgICAgICAgICAgICBkZWxldGUgICAgIFVTRVJcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gICAgICAgICAgICAgICBhY3RpdmF0ZSAgIFVTRVJcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gICAgICAgICAgICAgICBkZWFjdGl2YXRlIFVTRVJcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gWy1Dd10gICAgICAgICBjbG9uZUZyb20gIFVTRVIgQ0xPTkVGUk9NLVVTRVJcbiIpOworICAgIGZwcmludGYoc3RkZXJyLCAiICBbb3B0aW9uc10gWy1DYV0gWy1DeF0gICBjaGFuZ2VrZXkgIFtVU0VSXVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiICBbb3B0aW9uc10gWy1DYV0gWy1DeF0gcGFzc3dkIE9MRC1QQVNTUEhSQVNFIE5FVy1QQVNTUEhSQVNFIFtVU0VSXVxuIik7CisgICAgICAgICAgICAiICBbb3B0aW9uc10gWy1DYV0gWy1DeF0gICBwYXNzd2QgICAgIE9MRC1QQVNTUEhSQVNFIE5FVy1QQVNTUEhSQVNFIFtVU0VSXVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsCi0gICAgICAgICAgICAiICBbb3B0aW9uc10gKC1DYXwtQ3gpIC1DayBwYXNzd2QgT0xELUtFWS1PUi1QQVNTUEhSQVNFIE5FVy1LRVktT1ItUEFTU1BIUkFTRSBbVVNFUl1cbiIpOworICAgICAgICAgICAgIiAgW29wdGlvbnNdICgtQ2F8LUN4KSAtQ2sgcGFzc3dkICAgICBPTEQtS0VZLU9SLVBBU1MgTkVXLUtFWS1PUi1QQVNTIFtVU0VSXVxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcbnNubXB1c20gb3B0aW9uczpcbiIpOwogICAgIGZwcmludGYoc3RkZXJyLCAiXHQtQ0UgRU5HSU5FLUlEXHRTZXQgdXNtVXNlckVuZ2luZUlEIChlLmcuIDgwMDAwMDAyMDEwOTg0MDMwMSkuXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0LUNwIFNUUklOR1x0U2V0IHVzbVVzZXJQdWJsaWMgdmFsdWUgdG8gU1RSSU5HLlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdC1Dd1x0XHRDcmVhdGUgdGhlIHVzZXIgd2l0aCBjcmVhdGVBbmRXYWl0LlxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdFx0XHQoaXQgd29uJ3QgYmUgYWN0aXZlIHVudGlsIHlvdSBhY3RpdmUgaXQpXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0LUN4XHRcdENoYW5nZSB0aGUgcHJpdmFjeSBrZXkuXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwgIlx0LUNhXHRcdENoYW5nZSB0aGUgYXV0aGVudGljYXRpb24ga2V5LlxuIik7CiAgICAgZnByaW50ZihzdGRlcnIsICJcdC1Da1x0XHRBbGxvd3MgdG8gdXNlIGxvY2FsaXplZCBrZXkgKG11c3Qgc3RhcnQgd2l0aCAweClcbiIpOwpAQCAtMTk3LDcgKzE5Myw2IEBACiAgICAgQklHTlVNICpvdGhlcl9wdWI7CiAgICAgdV9jaGFyICprZXk7CiAgICAgc2l6ZV90IGtleV9sZW47Ci0gICAgdW5zaWduZWQgY2hhciAqY3A7CiAgICAgICAgICAgICAKICAgICBkaGtleWNoYW5nZSA9ICh1X2NoYXIgKikgbWFsbG9jKDIgKiB2YXJzLT52YWxfbGVuICogc2l6ZW9mKGNoYXIpKTsKICAgICBpZiAoIWRoa2V5Y2hhbmdlKQpAQCAtMjA1LDkgKzIwMCwxMCBAQAogICAgIAogICAgIG1lbWNweShkaGtleWNoYW5nZSwgdmFycy0+dmFsLnN0cmluZywgdmFycy0+dmFsX2xlbik7CiAKLSAgICBjcCA9IGRodmFyLT52YWwuc3RyaW5nOwotICAgIGRoID0gZDJpX0RIcGFyYW1zKE5VTEwsIChjb25zdCB1bnNpZ25lZCBjaGFyICoqKSAmY3AsCi0gICAgICAgICAgICAgICAgICAgICAgZGh2YXItPnZhbF9sZW4pOworICAgIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY3AgPSBkaHZhci0+dmFsLnN0cmluZzsKKyAgICAgICAgZGggPSBkMmlfREhwYXJhbXMoTlVMTCwgJmNwLCBkaHZhci0+dmFsX2xlbik7CisgICAgfQogCiAgICAgaWYgKCFkaCB8fCAhZGgtPmcgfHwgIWRoLT5wKSB7CiAgICAgICAgIFNOTVBfRlJFRShkaGtleWNoYW5nZSk7CkBAIC0yMjAsNyArMjE2LDcgQEAKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KICAgICAgICAgICAgIAotICAgIGlmICh2YXJzLT52YWxfbGVuICE9IEJOX251bV9ieXRlcyhkaC0+cHViX2tleSkpIHsKKyAgICBpZiAodmFycy0+dmFsX2xlbiAhPSAodW5zaWduZWQgaW50KUJOX251bV9ieXRlcyhkaC0+cHViX2tleSkpIHsKICAgICAgICAgU05NUF9GUkVFKGRoa2V5Y2hhbmdlKTsKICAgICAgICAgZnByaW50ZihzdGRlcnIsImluY29ycmVjdCBkaWZmaWUtaGVsbWFuIGxlbmd0aHMgKCVsdSAhPSAlZClcbiIsCiAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpdmFycy0+dmFsX2xlbiwgQk5fbnVtX2J5dGVzKGRoLT5wdWJfa2V5KSk7CkBAIC0yNTMsNyArMjQ5LDcgQEAKIAogICAgICAgICBwcmludGYoIm5ldyAlcyBrZXk6IDB4Iiwga2V5bmFtZSk7CiAgICAgICAgIGZvcihrcCA9IGtleSArIGtleV9sZW4gLSBvdXRrZXlfbGVuOwotICAgICAgICAgICAga3AgLSBrZXkgPCBrZXlfbGVuOyAga3ArKykgeworICAgICAgICAgICAga3AgLSBrZXkgPCAoaW50KWtleV9sZW47ICBrcCsrKSB7CiAgICAgICAgICAgICBwcmludGYoIiUwMngiLCAodW5zaWduZWQgY2hhcikgKmtwKTsKICAgICAgICAgfQogICAgICAgICBwcmludGYoIlxuIik7CkBAIC0zMDAsOCArMjk2LDEyIEBACiAgICAgICAgICAgICAgICAgb3B0aW5kKys7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgIGNhc2UgJ3cnOgorICAgICAgICAgICAgICAgIGRvY3JlYXRlYW5kd2FpdCA9IDE7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKIAkgICAgY2FzZSAnRSc6IHsKLQkgICAgICAgIHNpemVfdCBlYnVmX2xlbiA9IDMyOyAvKiBYWFg6IE1BWF9FTkdJTkVJRF9MRU5HVEggKi8KKwkgICAgICAgIHNpemVfdCBlYnVmX2xlbiA9IE1BWF9FTkdJTkVJRF9MRU5HVEg7CiAgICAgICAgICAgICAgICAgdV9jaGFyICplYnVmOwogICAgICAgICAgICAgICAgIGlmIChvcHRpbmQgPCBhcmdjKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmIChhcmd2W29wdGluZF0pIHsKQEAgLTM4Miw5ICszODIsMTEgQEAKICAgICAgKiBnZXQgdGhlIGNvbW1vbiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIAogICAgICAqLwogICAgIHN3aXRjaCAoYXJnID0gc25tcF9wYXJzZV9hcmdzKGFyZ2MsIGFyZ3YsICZzZXNzaW9uLCAiQzoiLCBvcHRQcm9jKSkgewotICAgIGNhc2UgLTI6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1I6CisgICAgICAgIGV4aXQoMSk7CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUOgogICAgICAgICBleGl0KDApOwotICAgIGNhc2UgLTE6CisgICAgY2FzZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0U6CiAgICAgICAgIHVzYWdlKCk7CiAgICAgICAgIGV4aXQoMSk7CiAgICAgZGVmYXVsdDoKQEAgLTcxMCw3ICs3MTIsMTEgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgc2V0dXBfb2lkKHVzbVVzZXJTdGF0dXMsICZuYW1lX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICB1c21Vc2VyRW5naW5lSUQsIHVzbVVzZXJFbmdpbmVJRExlbiwgYXJndlthcmctMV0pOwotICAgICAgICAgICAgbG9uZ3ZhciA9IFJTX0NSRUFURUFOREdPOworICAgICAgICAgICAgaWYgKGRvY3JlYXRlYW5kd2FpdCkgeworICAgICAgICAgICAgICAgIGxvbmd2YXIgPSBSU19DUkVBVEVBTkRXQUlUOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBsb25ndmFyID0gUlNfQ1JFQVRFQU5ER087CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCB1c21Vc2VyU3RhdHVzLCBuYW1lX2xlbmd0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgKHVfY2hhciAqKSAmIGxvbmd2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGxvbmd2YXIpKTsKZGlmZiAtLWdpdCBhL2FwcHMvc25tcHZhY20uYyBiL2FwcHMvc25tcHZhY20uYwppbmRleCBjZjA3MWYyLi5mODhlZGU2IDEwMDY0NAotLS0gYS9hcHBzL3NubXB2YWNtLmMKKysrIGIvYXBwcy9zbm1wdmFjbS5jCkBAIC0yMywxMSArMjMsNyBAQAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTM5LDkgKzM1LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgpAQCAtOTAsMTkgKzgzLDE1IEBACiAKIHN0YXRpYyBvaWQgICAgICB2YWNtR3JvdXBOYW1lW01BWF9PSURfTEVOXSA9CiAgICAgeyAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgMiwgMSwgMyB9LAotICAgIHZhY21TZWMyR3JvdXBTdG9yYWdlVHlwZVtNQVhfT0lEX0xFTl0gPSB7Ci0xLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgMiwgMSwgNH0sIHZhY21TZWMyR3JvdXBTdGF0dXNbTUFYX09JRF9MRU5dID0geworICAgIHZhY21TZWMyR3JvdXBTdGF0dXNbTUFYX09JRF9MRU5dID0gewogMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDIsIDEsIDV9LCB2YWNtQWNjZXNzQ29udGV4dE1hdGNoW01BWF9PSURfTEVOXSA9IHsKIDEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA0LCAxLCA0fSwgdmFjbUFjY2Vzc1JlYWRWaWV3TmFtZVtNQVhfT0lEX0xFTl0gPSB7CiAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNCwgMSwgNX0sIHZhY21BY2Nlc3NXcml0ZVZpZXdOYW1lW01BWF9PSURfTEVOXSA9IHsKIDEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA0LCAxLCA2fSwgdmFjbUFjY2Vzc05vdGlmeVZpZXdOYW1lW01BWF9PSURfTEVOXSA9IHsKLTEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA0LCAxLCA3fSwgdmFjbUFjY2Vzc1N0b3JhZ2VUeXBlW01BWF9PSURfTEVOXSA9IHsKLTEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA0LCAxLCA4fSwgdmFjbUFjY2Vzc1N0YXR1c1tNQVhfT0lEX0xFTl0gPSB7CisxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNCwgMSwgN30sIHZhY21BY2Nlc3NTdGF0dXNbTUFYX09JRF9MRU5dID0gewogMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDQsIDEsIDl9LCB2YWNtVmlld1RyZWVGYW1pbHlNYXNrW01BWF9PSURfTEVOXSA9IHsKIDEsIDMsIDYsIDEsIDYsIDMsIDE2LCAxLCA1LCAyLCAxLCAzfSwgdmFjbVZpZXdUcmVlRmFtaWx5VHlwZVtNQVhfT0lEX0xFTl0gPSB7CiAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNSwgMiwgMSwgNH0sCi0gICAgdmFjbVZpZXdUcmVlRmFtaWx5U3RvcmFnZVR5cGVbTUFYX09JRF9MRU5dID0gewotMSwgMywgNiwgMSwgNiwgMywgMTYsIDEsIDUsIDIsIDEsIDV9LAogICAgIHZhY21WaWV3VHJlZUZhbWlseVN0YXR1c1tNQVhfT0lEX0xFTl0gPSB7CiAxLCAzLCA2LCAxLCA2LCAzLCAxNiwgMSwgNSwgMiwgMSwgNn0KIApAQCAtMTExLDcgKzEwMCw2IEBACiAjZGVmaW5lIE5TVkFDTUFDQ0VTU1RBQkxFICAgIDEsIDMsIDYsIDEsIDQsIDEsIDgwNzIsIDEsIDksIDEKIHN0YXRpYyBvaWQgbnNWYWNtQ29udGV4dFBmeFtNQVhfT0lEX0xFTl0gID0geyBOU1ZBQ01BQ0NFU1NUQUJMRSwgMSwgMiB9Owogc3RhdGljIG9pZCBuc1ZhY21WaWV3TmFtZVtNQVhfT0lEX0xFTl0gICAgPSB7IE5TVkFDTUFDQ0VTU1RBQkxFLCAxLCAzIH07Ci1zdGF0aWMgb2lkIG5zVmFjbVN0b3JhZ2VUeXBlW01BWF9PSURfTEVOXSA9IHsgTlNWQUNNQUNDRVNTVEFCTEUsIDEsIDQgfTsKIHN0YXRpYyBvaWQgbnNWYWNtUm93U3RhdHVzW01BWF9PSURfTEVOXSAgID0geyBOU1ZBQ01BQ0NFU1NUQUJMRSwgMSwgNSB9OwogCiBpbnQgICAgICAgICAgICAgdmlld1RyZWVGYW1pbHlUeXBlID0gMTsKQEAgLTI4NCw3ICsyNzIsOCBAQAogICAgIGludCAgICAgICAgICAgICBleGl0dmFsID0gMDsKICAgICBpbnQgICAgICAgICAgICAgY29tbWFuZCA9IDA7CiAgICAgbG9uZyAgICAgICAgICAgIGxvbmd2YXI7Ci0gICAgaW50ICAgICAgICAgICAgIHNlY01vZGVsLCBzZWNMZXZlbCwgY29udGV4dE1hdGNoLCB2YWwsIGkgPSAwOworICAgIGludCAgICAgICAgICAgICBzZWNNb2RlbCwgc2VjTGV2ZWwsIGNvbnRleHRNYXRjaDsKKyAgICB1bnNpZ25lZCBpbnQgICAgdmFsLCBpID0gMDsKICAgICBjaGFyICAgICAgICAgICAqbWFzaywgKmdyb3VwTmFtZSwgKnByZWZpeCwgKmF1dGh0eXBlOwogICAgIHVfY2hhciAgICAgICAgICB2aWV3TWFza1tWQUNNU1RSSU5HTEVOXTsKICAgICBjaGFyICAgICAgICAgICAqc3Q7CkBAIC0yOTQsOSArMjgzLDExIEBACiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CkBAIC0zOTMsNyArMzg0LDcgQEAKICAgICAgICAgICAgICAgICBpKys7CiAgICAgICAgICAgICB9CiAJfSBlbHNlIHsKLSAgICAgICAgICAgIGZvciAoaT0wIDsgaSA8ICgoaW50KW5hbWVfbGVuZ3RoKzcpLzg7IGkrKykKKyAgICAgICAgICAgIGZvciAoaT0wIDsgaSA8IChuYW1lX2xlbmd0aCs3KS84OyBpKyspCiAgICAgICAgICAgICAgICAgdmlld01hc2tbaV0gPSAodV9jaGFyKTB4ZmY7CiAgICAgICAgIH0KICAgICAgICAgdmlld19vaWQodmFjbVZpZXdUcmVlRmFtaWx5TWFzaywgJm5hbWVfbGVuZ3RoLCBhcmd2W2FyZ10sCmRpZmYgLS1naXQgYS9hcHBzL3NubXB3YWxrLmMgYi9hcHBzL3NubXB3YWxrLmMKaW5kZXggMzYxMzQxYS4uNjU5ZDdkZSAxMDA2NDQKLS0tIGEvYXBwcy9zbm1wd2Fsay5jCisrKyBiL2FwcHMvc25tcHdhbGsuYwpAQCAtNDIsMTEgKzQyLDcgQEAKICMgaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OSw5ICs1NSw2IEBACiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfTkVUREJfSAogI2luY2x1ZGUgPG5ldGRiLmg+CiAjZW5kaWYKQEAgLTc2LDEwICs2OSwxMyBAQAogI2RlZmluZSBORVRTTk1QX0RTX1dBTEtfRE9OVF9DSEVDS19MRVhJQ09HUkFQSElDCTMKICNkZWZpbmUgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUUyAgICAgCSAgICAgICAgNAogI2RlZmluZSBORVRTTk1QX0RTX1dBTEtfRE9OVF9HRVRfUkVRVUVTVEVECSAgICAgICAgNQorI2RlZmluZSBORVRTTk1QX0RTX1dBTEtfVElNRV9SRVNVTFRTX1NJTkdMRQkgICAgICAgIDYKIAogb2lkICAgICAgICAgICAgIG9iamlkX21pYltdID0geyAxLCAzLCA2LCAxLCAyLCAxIH07CiBpbnQgICAgICAgICAgICAgbnVtcHJpbnRlZCA9IDA7CiAKK2NoYXIgICAgICAgICAgICplbmRfbmFtZSA9IE5VTEw7CisKIHZvaWQKIHVzYWdlKHZvaWQpCiB7CkBAIC05NSw3ICs5MSwxMCBAQAogICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgIlx0XHRcdCAgYzogIGRvIG5vdCBjaGVjayByZXR1cm5lZCBPSURzIGFyZSBpbmNyZWFzaW5nXG4iKTsKICAgICBmcHJpbnRmKHN0ZGVyciwKLSAgICAgICAgICAgICJcdFx0XHQgIHQ6ICBEaXNwbGF5IHdhbGwtY2xvY2sgdGltZSB0byBjb21wbGV0ZSB0aGUgcmVxdWVzdFxuIik7CisgICAgICAgICAgICAiXHRcdFx0ICB0OiAgRGlzcGxheSB3YWxsLWNsb2NrIHRpbWUgdG8gY29tcGxldGUgdGhlIHdhbGtcbiIpOworICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgIlx0XHRcdCAgVDogIERpc3BsYXkgd2FsbC1jbG9jayB0aW1lIHRvIGNvbXBsZXRlIGVhY2ggcmVxdWVzdFxuIik7CisgICAgZnByaW50ZihzdGRlcnIsICJcdFx0XHQgIEUge09JRH06ICBFbmQgdGhlIHdhbGsgYXQgdGhlIHNwZWNpZmllZCBPSURcbiIpOwogfQogCiB2b2lkCkBAIC0xNTEsNiArMTUwLDE1IEBACiAgICAgICAgICAgICAgICAgbmV0c25tcF9kc190b2dnbGVfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUUyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ0UnOgorICAgICAgICAgICAgICAgIGVuZF9uYW1lID0gYXJndltvcHRpbmQrK107CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgJ1QnOgorICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFNfU0lOR0xFKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIGZsYWcgcGFzc2VkIHRvIC1DOiAlY1xuIiwKQEAgLTE3MywxMiArMTgxLDE0IEBACiAgICAgc2l6ZV90ICAgICAgICAgIG5hbWVfbGVuZ3RoOwogICAgIG9pZCAgICAgICAgICAgICByb290W01BWF9PSURfTEVOXTsKICAgICBzaXplX3QgICAgICAgICAgcm9vdGxlbjsKKyAgICBvaWQgICAgICAgICAgICAgZW5kX29pZFtNQVhfT0lEX0xFTl07CisgICAgc2l6ZV90ICAgICAgICAgIGVuZF9sZW4gPSAwOwogICAgIGludCAgICAgICAgICAgICBjb3VudDsKICAgICBpbnQgICAgICAgICAgICAgcnVubmluZzsKICAgICBpbnQgICAgICAgICAgICAgc3RhdHVzID0gU1RBVF9FUlJPUjsKICAgICBpbnQgICAgICAgICAgICAgY2hlY2s7CiAgICAgaW50ICAgICAgICAgICAgIGV4aXR2YWwgPSAwOwotICAgIHN0cnVjdCB0aW1ldmFsICB0djEsIHR2MjsKKyAgICBzdHJ1Y3QgdGltZXZhbCAgdHYxLCB0djIsIHR2X2EsIHR2X2I7CiAKICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXB3YWxrIiwgImluY2x1ZGVSZXF1ZXN0ZWQiLAogCQkJICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIApAQCAtMTk4LDE1ICsyMDgsMjEgQEAKIAogICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCAic25tcHdhbGsiLCAidGltZVJlc3VsdHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCi0JCQkgICAgICAgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUUyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUUyk7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXB3YWxrIiwgInRpbWVSZXN1bHRzU2luZ2xlIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFNfU0lOR0xFKTsKIAogICAgIC8qCiAgICAgICogZ2V0IHRoZSBjb21tb24gY29tbWFuZCBsaW5lIGFyZ3VtZW50cyAKICAgICAgKi8KICAgICBzd2l0Y2ggKGFyZyA9IHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCAmc2Vzc2lvbiwgIkM6Iiwgb3B0UHJvYykpIHsKLSAgICBjYXNlIC0yOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOgorICAgICAgICBleGl0KDEpOworICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVDoKICAgICAgICAgZXhpdCgwKTsKLSAgICBjYXNlIC0xOgorICAgIGNhc2UgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFOgogICAgICAgICB1c2FnZSgpOwogICAgICAgICBleGl0KDEpOwogICAgIGRlZmF1bHQ6CkBAIC0yMzMsNiArMjQ5LDIzIEBACiAgICAgICAgIHJvb3RsZW4gPSBzaXplb2Yob2JqaWRfbWliKSAvIHNpemVvZihvaWQpOwogICAgIH0KIAorICAgIC8qCisgICAgICogSWYgd2UndmUgYmVlbiBnaXZlbiBhbiBleHBsaWNpdCBlbmQgcG9pbnQsCisgICAgICogIHRoZW4gY29udmVydCB0aGlzIHRvIGFuIE9JRCwgb3RoZXJ3aXNlCisgICAgICogIG1vdmUgdG8gdGhlIG5leHQgc2libGluZyBvZiB0aGUgc3RhcnQuCisgICAgICovCisgICAgaWYgKCBlbmRfbmFtZSApIHsKKyAgICAgICAgZW5kX2xlbiA9IE1BWF9PSURfTEVOOworICAgICAgICBpZiAoc25tcF9wYXJzZV9vaWQoZW5kX25hbWUsIGVuZF9vaWQsICZlbmRfbGVuKSA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX3BlcnJvcihlbmRfbmFtZSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbWVtbW92ZShlbmRfb2lkLCByb290LCByb290bGVuKnNpemVvZihvaWQpKTsKKyAgICAgICAgZW5kX2xlbiA9IHJvb3RsZW47CisgICAgICAgIGVuZF9vaWRbZW5kX2xlbi0xXSsrOworICAgIH0KKwogICAgIFNPQ0tfU1RBUlRVUDsKIAogICAgIC8qCkBAIC0yNjUsNyArMjk4LDcgQEAKIAogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUUykpCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHYxLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0djEpOwogICAgIHdoaWxlIChydW5uaW5nKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGNyZWF0ZSBQRFUgZm9yIEdFVE5FWFQgcmVxdWVzdCBhbmQgYWRkIG9iamVjdCBuYW1lIHRvIHJlcXVlc3QgCkBAIC0yNzYsMTcgKzMwOSwyMCBAQAogICAgICAgICAvKgogICAgICAgICAgKiBkbyB0aGUgcmVxdWVzdCAKICAgICAgICAgICovCisgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFNfU0lOR0xFKSkKKyAgICAgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHZfYSk7CiAgICAgICAgIHN0YXR1cyA9IHNubXBfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgJnJlc3BvbnNlKTsKICAgICAgICAgaWYgKHN0YXR1cyA9PSBTVEFUX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsIE5FVFNOTVBfRFNfV0FMS19USU1FX1JFU1VMVFNfU0lOR0xFKSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnR2X2IpOwogICAgICAgICAgICAgaWYgKHJlc3BvbnNlLT5lcnJzdGF0ID09IFNOTVBfRVJSX05PRVJST1IpIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIGNoZWNrIHJlc3VsdGluZyB2YXJpYWJsZXMgCiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgZm9yICh2YXJzID0gcmVzcG9uc2UtPnZhcmlhYmxlczsgdmFyczsKICAgICAgICAgICAgICAgICAgICAgIHZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodmFycy0+bmFtZV9sZW5ndGggPCByb290bGVuKQotICAgICAgICAgICAgICAgICAgICAgICAgfHwgKG1lbWNtcChyb290LCB2YXJzLT5uYW1lLCByb290bGVuICogc2l6ZW9mKG9pZCkpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIT0gMCkpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNubXBfb2lkX2NvbXBhcmUoZW5kX29pZCwgZW5kX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycy0+bmFtZSwgdmFycy0+bmFtZV9sZW5ndGgpIDw9IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBub3QgcGFydCBvZiB0aGlzIHN1YnRyZWUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTI5NCw2ICszMzAsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIG51bXByaW50ZWQrKzsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUU19TSU5HTEUpKQorICAgICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICIlZiBzOiAiLCAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkb3VibGUpICh0dl9iLnR2X3VzZWMgLSB0dl9hLnR2X3VzZWMpLzEwMDAwMDAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZG91YmxlKSAodHZfYi50dl9zZWMgLSB0dl9hLnR2X3NlYykpOwogICAgICAgICAgICAgICAgICAgICBwcmludF92YXJpYWJsZSh2YXJzLT5uYW1lLCB2YXJzLT5uYW1lX2xlbmd0aCwgdmFycyk7CiAgICAgICAgICAgICAgICAgICAgIGlmICgodmFycy0+dHlwZSAhPSBTTk1QX0VORE9GTUlCVklFVykgJiYKICAgICAgICAgICAgICAgICAgICAgICAgICh2YXJzLT50eXBlICE9IFNOTVBfTk9TVUNIT0JKRUNUKSAmJgpAQCAtMzYyLDcgKzQwMiw3IEBACiAgICAgfQogICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19XQUxLX1RJTUVfUkVTVUxUUykpCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHYyLCBOVUxMKTsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0djIpOwogCiAgICAgaWYgKG51bXByaW50ZWQgPT0gMCAmJiBzdGF0dXMgPT0gU1RBVF9TVUNDRVNTKSB7CiAgICAgICAgIC8qCmRpZmYgLS1naXQgYS9hcHBzL3NzaHRvc25tcC5jIGIvYXBwcy9zc2h0b3NubXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjYwNjdkCi0tLSAvZGV2L251bGwKKysrIGIvYXBwcy9zc2h0b3NubXAuYwpAQCAtMCwwICsxLDIzMyBAQAorLyogQ29weXJpZ2h0IDIwMDkgU1BBUlRBLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQKKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworLyoKKyAqIFRoaXMgaXMgbWVyZWx5IGEgd3JhcHBlciBhcm91bmQgc3RkaW4vb3V0IGZvciBzc2hkIHRvIGNhbGwuICBJdAorICogc2ltcGx5IHBhc3NlcyB0cmFmZmljIHRvIHRoZSBydW5uaW5nIHNubXBkIHRocm91Z2ggYSB1bml4IGRvbWFpbgorICogc29ja2V0IGFmdGVyIGZpcnN0IHBhc3NpbmcgYW55IG5lZWRlZCBTU0ggRG9tYWluIGluZm9ybWF0aW9uLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVU5fSAorI2luY2x1ZGUgPHN5cy91bi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZuZGVmIE1BWFBBVEhMRU4KKyN3YXJuIG5vIHN5c3RlbSBtYXggcGF0aCBsZW5ndGggZGV0ZWN0ZWQKKyNkZWZpbmUgTUFYUEFUSExFTiAyMDQ4CisjZW5kaWYKKworI2RlZmluZSBERUZBVUxUX1NPQ0tfUEFUSCAiL3Zhci9uZXQtc25tcC9zc2hkb21haW5zb2NrZXQiCisKKyNkZWZpbmUgTkVUU05NUF9TU0hUT1NOTVBfVkVSU0lPTl9OVU1CRVIgMQorCisKKworLyoKKyAqIEV4dHJhIGRlYnVnZ2luZyBvdXRwdXQgZm9yLCB1bSwgZGVidWdnaW5nLgorICovCisKKyN1bmRlZiBERUJVR0dJTkcKKworI2lmZGVmIERFQlVHR0lORworI2RlZmluZSBERUJVRyh4KSBkZWIoeCkKK0ZJTEUgKmRlYmYgPSBOVUxMOwordm9pZAorZGViKGNvbnN0IGNoYXIgKnN0cmluZykgeworICAgIGlmIChOVUxMID09IGRlYmYpIHsKKyAgICAgICAgZGViZiA9IGZvcGVuKCIvdG1wL3NzaHRvc25tcC5sb2ciLCAiYSIpOworICAgIH0KKyAgICBpZiAoTlVMTCAhPSBkZWJmKSB7CisgICAgICAgIGZwcmludGYoZGViZiwgIiVzXG4iLCBzdHJpbmcpOworICAgICAgICBmZmx1c2goZGViZik7CisgICAgfQorfQorI2Vsc2UgIC8qICFERUJVR0dJTkcgKi8KKyNkZWZpbmUgREVCVUcoeCkKKyNlbmRpZiAvKiBERUJVR0dJTkcgY29kZSAqLworCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KSB7CisKKyAgICBpbnQgc29jazsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gYWRkcjsKKyAgICB1X2NoYXIgYnVmWzQwOTZdOworICAgIHNpemVfdCBidWZfbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgaW50IHJjID0gMCwgcGt0c2l6ZSA9IDA7CisKKyAgICBmZF9zZXQgcmVhZF9zZXQ7CisKKyAgICBERUJVRygiLS0tLS0tLS0tLVxuc3RhcnRpbmcgdXAiKTsKKworICAgIC8qIE9wZW4gYSBjb25uZWN0aW9uIHRvIHRoZSBVTklYIGRvbWFpbiBzb2NrZXQgb3IgZmFpbCAqLworCisgICAgYWRkci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKKyAgICBpZiAoYXJnYyA+IDEpIHsKKyAgICAgICAgc3RyY3B5KGFkZHIuc3VuX3BhdGgsIGFyZ3ZbMV0pOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cmNweShhZGRyLnN1bl9wYXRoLCBERUZBVUxUX1NPQ0tfUEFUSCk7CisgICAgfQorCisgICAgc29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CisgICAgREVCVUcoImNyZWF0ZWQgc29ja2V0Iik7CisgICAgaWYgKHNvY2sgPD0gMCkgeworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIC8qIHNldCB0aGUgU09fUEFTU0NSRUQgb3B0aW9uIHNvIHdlIGNhbiBwYXNzIHVpZCAqLworICAgIC8qIFhYWDogYWNjb3JkaW5nIHRvIHRoZSB1bml4KDEpIG1hbnVhbCB0aGlzIHNob3VsZG4ndCBiZSBuZWVkZWQKKyAgICAgICBvbiB0aGUgc2VuZGluZyBzaWRlPyAqLworICAgIHsKKyAgICAgICAgaW50IG9uZSA9IDE7CisgICAgICAgIHNldHNvY2tvcHQoc29jaywgU09MX1NPQ0tFVCwgU09fUEFTU0NSRUQsICh2b2lkICopICZvbmUsCisgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9uZSkpOworICAgIH0KKworICAgIGlmIChjb25uZWN0KHNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHIsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpICE9IDApIHsKKyAgICAgICAgREVCVUcoIkZBSUwgQ09OTkVDVCIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIERFQlVHKCJvcGVuZWQgc29ja2V0Iik7CisKKyAgICAvKgorICAgICAqIHdlIGFyZSBydW5uaW5nIGFzIHRoZSB1c2VyIHRoYXQgc3NoIGF1dGhlbnRpY2F0ZWQgdXMgYXMsIGFuZCB0aGlzCisgICAgICogaXMgdGhlIG5hbWUvdWlkIHRoYXQgdGhlIGFnZW50IG5lZWRzIGZvciBwcm9jZXNzaW5nIGFzIGEgU05NUHYzCisgICAgICogc2VjdXJpdHkgbmFtZS4gIFNvIHRoaXMgaXMgdGhlIG9ubHkgdGhpbmcgbmVlZGVkIHRvIHBhc3MgdG8gdGhlCisgICAgICogYWdlbnQuCisgICAgICovCisKKyAgICAvKiB2ZXJzaW9uIDEgb2Ygb3VyIGludGVybmFsIHNzaCB0byBzbm1wIHdyYXBwZXIgaXMganVzdCBhIHNpbmdsZQorICAgICAgIGJ5dGUgdmVyc2lvbiBudW1iZXIgYW5kIGluZGljYXRlcyB3ZSdyZSBhbHNvIHBhc3NpbmcgdW5peAorICAgICAgIHNvY2tldCBjcmVkZW50aWFscyBjb250YWluaW5nIG91ciB1c2VyIGlkICovCisKKyAgICAvKiBJbiBjYXNlIG9mIGZ1dHVyZSBjaGFuZ2VzLCB3ZSdsbCBwYXNzIGEgdmVyc2lvbiBudW1iZXIgZmlyc3QgKi8KKworICAgIGJ1ZlswXSA9IE5FVFNOTVBfU1NIVE9TTk1QX1ZFUlNJT05fTlVNQkVSOworICAgIGJ1Zl9sZW4gPSAxOworICAgIAorICAgIC8qIHNlbmQgdGhlIHByZWxpbSBtZXNzYWdlIGFuZCB0aGUgY3JlZGVudGlhbHMgdG9nZXRoZXIgdXNpbmcgc2VuZG1zZygpICovCisgICAgeworICAgICAgICBzdHJ1Y3QgbXNnaGRyIG07CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgIHN0cnVjdCBjbXNnaGRyIGNtOworICAgICAgICAgICBzdHJ1Y3QgdWNyZWQgb3VydXNlcjsKKyAgICAgICAgfSBjbXNnOworICAgICAgICBzdHJ1Y3QgaW92ZWMgaW92ID0geyBidWYsIGJ1Zl9sZW4gfTsKKworICAgICAgICAvKiBNYWtlIHN1cmUgdGhhdCBldmVuIHBhZGRpbmcgZmllbGRzIGdldCBpbml0aWFsaXplZC4qLworICAgICAgICBtZW1zZXQoJmNtc2csIDAsIHNpemVvZihjbXNnKSk7CisgICAgICAgIG1lbXNldCgmbSwgMCwgc2l6ZW9mKG0pKTsKKworICAgICAgICAvKiBzZXQgdXAgdGhlIGJhc2ljIG1lc3NhZ2UgKi8KKyAgICAgICAgY21zZy5jbS5jbXNnX2xlbiA9IHNpemVvZihzdHJ1Y3QgY21zZ2hkcikgKyBzaXplb2Yoc3RydWN0IHVjcmVkKTsKKyAgICAgICAgY21zZy5jbS5jbXNnX2xldmVsID0gU09MX1NPQ0tFVDsKKyAgICAgICAgY21zZy5jbS5jbXNnX3R5cGUgPSBTQ01fQ1JFREVOVElBTFM7CisKKyAgICAgICAgY21zZy5vdXJ1c2VyLnVpZCA9IGdldHVpZCgpOworICAgICAgICBjbXNnLm91cnVzZXIuZ2lkID0gZ2V0Z2lkKCk7CisgICAgICAgIGNtc2cub3VydXNlci5waWQgPSBnZXRwaWQoKTsKKworICAgICAgICBtLm1zZ19pb3YgICAgICAgICAgICAgICA9ICZpb3Y7CisgICAgICAgIG0ubXNnX2lvdmxlbiAgICAgICAgICAgID0gMTsKKyAgICAgICAgbS5tc2dfY29udHJvbCAgICAgICAgICAgPSAmY21zZzsKKyAgICAgICAgbS5tc2dfY29udHJvbGxlbiAgICAgICAgPSBzaXplb2YoY21zZyk7CisgICAgICAgIG0ubXNnX2ZsYWdzICAgICAgICAgICAgID0gMDsKKyAgICAgICAgCisgICAgICAgIERFQlVHKCJzZW5kaW5nIHRvIHNvY2siKTsKKyAgICAgICAgcmMgPSBzZW5kbXNnKHNvY2ssICZtLCBNU0dfTk9TSUdOQUx8TVNHX0RPTlRXQUlUKTsKKyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJmYWlsZWQgdG8gc2VuZCBzdGFydHVwIG1lc3NhZ2VcbiIpOworICAgICAgICAgICAgREVCVUcoImZhaWxlZCB0byBzZW5kIHN0YXJ0dXAgbWVzc2FnZVxuIik7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUcoInNlbnQgbmFtZSIpOworICAgIAorICAgIC8qIG5vdyB3ZSBqdXN0IHNlbmQgYW5kIHJlY2VpdmUgZnJvbSBib3RoIHRoZSBzb2NrZXQgYW5kIHN0ZGluL3N0ZG91dCAqLworCisgICAgd2hpbGUoMSkgeworICAgICAgICAvKiByZWFkIGZyb20gc3RkaW4gYW5kIHRoZSBzb2NrZXQgKi8KKyAgICAgICAgRkRfU0VUKHNvY2ssICZyZWFkX3NldCk7CisgICAgICAgIEZEX1NFVChTVERJTl9GSUxFTk8sICZyZWFkX3NldCk7CisKKyAgICAgICAgLyogYmxvY2tpbmcgd2l0aG91dCBhIHRpbWVvdXQgYmUgZmluZSBmaW5lICovCisgICAgICAgIHNlbGVjdChzb2NrKzEsICZyZWFkX3NldCwgTlVMTCwgTlVMTCwgTlVMTCk7CisKKyAgICAgICAgaWYgKEZEX0lTU0VUKFNURElOX0ZJTEVOTywgJnJlYWRfc2V0KSkgeworICAgICAgICAgICAgLyogcmVhZCBmcm9tIHN0ZGluIHRvIGdldCBzdHVmZiBmcm9tIHNzaGQgdG8gc2VuZCB0byB0aGUgYWdlbnQgKi8KKyAgICAgICAgICAgIERFQlVHKCJkYXRhIGZyb20gc3RkaW4iKTsKKyAgICAgICAgICAgIHJjID0gcmVhZChTVERJTl9GSUxFTk8sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgICAgICAgICAgICBpZiAocmMgPD0gMCkgeworICAgICAgICAgICAgICAgIC8qIGVuZC1vZi1maWxlICovCisjaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKKyAgICAgICAgICAgICAgICByYyA9IGNsb3NlKHNvY2spOworI2Vsc2UKKyAgICAgICAgICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHNvY2spOworI2VuZGlmCisgICAgICAgICAgICAgICAgZXhpdCgwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHKCJyZWFkIGZyb20gc3RkaW4iKTsKKworICAgICAgICAgICAgLyogc2VuZCBpdCB1cCB0aGUgcGlwZSAqLworICAgICAgICAgICAgcGt0c2l6ZSA9IHJjOworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICBERUJVRygic2VuZGluZyB0byBzb2NrZXQiKTsKKyAgICAgICAgICAgICAgICByYyA9IHNlbmR0byhzb2NrLCBidWYsIHBrdHNpemUsIDAsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIERFQlVHKCJiYWNrIGZyb20gc2VuZHRvIik7CisgICAgICAgICAgICAgICAgaWYgKHJjIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgREVCVUcoInNlbnR0byBmYWlsZWQiKTsKKyAgICAgICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyYyA+IDApCisgICAgICAgICAgICAgICAgREVCVUcoInNlbnQgdG8gc29ja2V0Iik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgREVCVUcoImZhaWxlZCB0byBzZW5kIHRvIHNvY2tldCEhIik7CisgICAgICAgIH0KKworICAgICAgICBpZiAoRkRfSVNTRVQoc29jaywgJnJlYWRfc2V0KSkgeworICAgICAgICAgICAgLyogcmVhZCBmcm9tIHRoZSBzb2NrZXQgYW5kIHNlbmQgdG8gdG8gc3Rkb3V0IHdoaWNoIGdvZXMgdG8gc3NoZCAqLworICAgICAgICAgICAgREVCVUcoImRhdGEgb24gdW5peCBzb2NrZXQiKTsKKworICAgICAgICAgICAgcmMgPSAtMTsKKyAgICAgICAgICAgIHdoaWxlIChyYyA8IDApIHsKKyAgICAgICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHNvY2ssIGJ1Ziwgc2l6ZW9mKGJ1ZiksIDAsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xvc2Uoc29jayk7CisgICAgICAgICAgICAgICAgICAgIGV4aXQoMCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUcoInJlYWQgZnJvbSBzb2NrZXQiKTsKKworICAgICAgICAgICAgcGt0c2l6ZSA9IHJjOworICAgICAgICAgICAgcmMgPSB3cml0ZShTVERPVVRfRklMRU5PLCBidWYsIHBrdHNpemUpOworICAgICAgICAgICAgLyogWFhYOiBjaGVjayB0aGF0IGNvdW50cyBtYXRjaCAqLworICAgICAgICAgICAgaWYgKHJjID4gMCkgeworICAgICAgICAgICAgICAgIERFQlVHKCJ3cm90ZSB0byBzdGRvdXQiKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUcoImZhaWxlZCB0byB3cml0ZSB0byBzdGRvdXQiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL2NvbmZpZy5ndWVzcyBiL2NvbmZpZy5ndWVzcwppbmRleCBmMzIwNzlhLi4yODUyMzc4IDEwMDc1NQotLS0gYS9jb25maWcuZ3Vlc3MKKysrIGIvY29uZmlnLmd1ZXNzCkBAIC0xLDEwICsxLDEwIEBACiAjISAvYmluL3NoCiAjIEF0dGVtcHQgdG8gZ3Vlc3MgYSBjYW5vbmljYWwgc3lzdGVtIG5hbWUuCiAjICAgQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LAotIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgKKyMgICAyMDAwLCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwCiAjICAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKLXRpbWVzdGFtcD0nMjAwOC0wMS0yMycKK3RpbWVzdGFtcD0nMjAxMC0wOC0yMScKIAogIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdAogIyB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMjcsMTYgKzI3LDE2IEBACiAjIHRoZSBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KIAogCi0jIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lciA8cGVyQGJvdGhuZXIuY29tPi4KLSMgUGxlYXNlIHNlbmQgcGF0Y2hlcyB0byA8Y29uZmlnLXBhdGNoZXNAZ251Lm9yZz4uICBTdWJtaXQgYSBjb250ZXh0Ci0jIGRpZmYgYW5kIGEgcHJvcGVybHkgZm9ybWF0dGVkIENoYW5nZUxvZyBlbnRyeS4KKyMgT3JpZ2luYWxseSB3cml0dGVuIGJ5IFBlciBCb3RobmVyLiAgUGxlYXNlIHNlbmQgcGF0Y2hlcyAoY29udGV4dAorIyBkaWZmIGZvcm1hdCkgdG8gPGNvbmZpZy1wYXRjaGVzQGdudS5vcmc+IGFuZCBpbmNsdWRlIGEgQ2hhbmdlTG9nCisjIGVudHJ5LgogIwogIyBUaGlzIHNjcmlwdCBhdHRlbXB0cyB0byBndWVzcyBhIGNhbm9uaWNhbCBzeXN0ZW0gbmFtZSBzaW1pbGFyIHRvCiAjIGNvbmZpZy5zdWIuICBJZiBpdCBzdWNjZWVkcywgaXQgcHJpbnRzIHRoZSBzeXN0ZW0gbmFtZSBvbiBzdGRvdXQsIGFuZAogIyBleGl0cyB3aXRoIDAuICBPdGhlcndpc2UsIGl0IGV4aXRzIHdpdGggMS4KICMKLSMgVGhlIHBsYW4gaXMgdGhhdCB0aGlzIGNhbiBiZSBjYWxsZWQgYnkgY29uZmlndXJlIHNjcmlwdHMgaWYgeW91Ci0jIGRvbid0IHNwZWNpZnkgYW4gZXhwbGljaXQgYnVpbGQgc3lzdGVtIHR5cGUuCisjIFlvdSBjYW4gZ2V0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIHNjcmlwdCBmcm9tOgorIyBodHRwOi8vZ2l0LnNhdmFubmFoLmdudS5vcmcvZ2l0d2ViLz9wPWNvbmZpZy5naXQ7YT1ibG9iX3BsYWluO2Y9Y29uZmlnLmd1ZXNzO2hiPUhFQUQKIAogbWU9YGVjaG8gIiQwIiB8IHNlZCAtZSAncywuKi8sLCdgCiAKQEAgLTU2LDggKzU2LDkgQEAKIEdOVSBjb25maWcuZ3Vlc3MgKCR0aW1lc3RhbXApCiAKIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBQZXIgQm90aG5lci4KLUNvcHlyaWdodCAoQykgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwKLTIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDggRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCitDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAogVGhpcyBpcyBmcmVlIHNvZnR3YXJlOyBzZWUgdGhlIHNvdXJjZSBmb3IgY29weWluZyBjb25kaXRpb25zLiAgVGhlcmUgaXMgTk8KIHdhcnJhbnR5OyBub3QgZXZlbiBmb3IgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiIKQEAgLTkxLDcgKzkyLDcgQEAKICAgZXhpdCAxCiBmaQogCi10cmFwICdleGl0IDEnIDEgMiAxNQordHJhcCAnZXhpdCAxJyBIVVAgSU5UIFRFUk0KIAogIyBDQ19GT1JfQlVJTEQgLS0gY29tcGlsZXIgdXNlZCBieSB0aGlzIHNjcmlwdC4gTm90ZSB0aGF0IHRoZSB1c2Ugb2YgYQogIyBjb21waWxlciB0byBhaWQgaW4gc3lzdGVtIGRldGVjdGlvbiBpcyBkaXNjb3VyYWdlZCBhcyBpdCByZXF1aXJlcwpAQCAtMTA1LDcgKzEwNiw3IEBACiAKIHNldF9jY19mb3JfYnVpbGQ9JwogdHJhcCAiZXhpdGNvZGU9XCQ/OyAocm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGwpICYmIGV4aXQgXCRleGl0Y29kZSIgMCA7Ci10cmFwICJybSAtZiBcJHRtcGZpbGVzIDI+L2Rldi9udWxsOyBybWRpciBcJHRtcCAyPi9kZXYvbnVsbDsgZXhpdCAxIiAxIDIgMTMgMTUgOwordHJhcCAicm0gLWYgXCR0bXBmaWxlcyAyPi9kZXYvbnVsbDsgcm1kaXIgXCR0bXAgMj4vZGV2L251bGw7IGV4aXQgMSIgSFVQIElOVCBQSVBFIFRFUk0gOwogOiAke1RNUERJUj0vdG1wfSA7CiAgeyB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kICIkVE1QRElSL2NnWFhYWFhYIikgMj4vZGV2L251bGxgICYmIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiIDsgfSB8fAogIHsgdGVzdCAtbiAiJFJBTkRPTSIgJiYgdG1wPSRUTVBESVIvY2ckJC0kUkFORE9NICYmICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkgOyB9IHx8CkBAIC0xNzAsNyArMTcxLDcgQEAKIAkgICAgYXJtKnxpMzg2fG02OGt8bnMzMmt8c2gzKnxzcGFyY3x2YXgpCiAJCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAkJaWYgZWNobyBfX0VMRl9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKLQkJCXwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGwKKwkJCXwgZ3JlcCAtcSBfX0VMRl9fCiAJCXRoZW4KIAkJICAgICMgT25jZSBhbGwgdXRpbGl0aWVzIGNhbiBiZSBFQ09GRiAobmV0YnNkZWNvZmYpIG9yIGEub3V0IChuZXRic2Rhb3V0KS4KIAkJICAgICMgUmV0dXJuIG5ldGJzZCBmb3IgZWl0aGVyLiAgRklYPwpAQCAtMzI0LDE0ICszMjUsMzMgQEAKIAljYXNlIGAvdXNyL2Jpbi91bmFtZSAtcGAgaW4KIAkgICAgc3BhcmMpIGVjaG8gc3BhcmMtaWNsLW54NzsgZXhpdCA7OwogCWVzYWMgOzsKKyAgICBzMzkweDpTdW5PUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAorCWV4aXQgOzsKICAgICBzdW40SDpTdW5PUzo1Lio6KikKIAllY2hvIHNwYXJjLWhhbC1zb2xhcmlzMmBlY2hvICR7VU5BTUVfUkVMRUFTRX18c2VkIC1lICdzL1teLl0qLy8nYAogCWV4aXQgOzsKICAgICBzdW40KjpTdW5PUzo1Lio6KiB8IHRhZHBvbGUqOlN1bk9TOjUuKjoqKQogCWVjaG8gc3BhcmMtc3VuLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCiAJZXhpdCA7OworICAgIGk4NnBjOkF1cm9yYVVYOjUuKjoqIHwgaTg2eGVuOkF1cm9yYVVYOjUuKjoqKQorCWVjaG8gaTM4Ni1wYy1hdXJvcmF1eCR7VU5BTUVfUkVMRUFTRX0KKwlleGl0IDs7CiAgICAgaTg2cGM6U3VuT1M6NS4qOiogfCBpODZ4ZW46U3VuT1M6NS4qOiopCi0JZWNobyBpMzg2LXBjLXNvbGFyaXMyYGVjaG8gJHtVTkFNRV9SRUxFQVNFfXxzZWQgLWUgJ3MvW14uXSovLydgCisJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAorCVNVTl9BUkNIPSJpMzg2IgorCSMgSWYgdGhlcmUgaXMgYSBjb21waWxlciwgc2VlIGlmIGl0IGlzIGNvbmZpZ3VyZWQgZm9yIDY0LWJpdCBvYmplY3RzLgorCSMgTm90ZSB0aGF0IHRoZSBTdW4gY2MgZG9lcyBub3QgdHVybiBfX0xQNjRfXyBpbnRvIDEgbGlrZSBnY2MgZG9lcy4KKwkjIFRoaXMgdGVzdCB3b3JrcyBmb3IgYm90aCBjb21waWxlcnMuCisJaWYgWyAiJENDX0ZPUl9CVUlMRCIgIT0gJ25vX2NvbXBpbGVyX2ZvdW5kJyBdOyB0aGVuCisJICAgIGlmIChlY2hvICcjaWZkZWYgX19hbWQ2NCc7IGVjaG8gSVNfNjRCSVRfQVJDSDsgZWNobyAnI2VuZGlmJykgfCBcCisJCShDQ09QVFM9ICRDQ19GT1JfQlVJTEQgLUUgLSAyPi9kZXYvbnVsbCkgfCBcCisJCWdyZXAgSVNfNjRCSVRfQVJDSCA+L2Rldi9udWxsCisJICAgIHRoZW4KKwkJU1VOX0FSQ0g9Ing4Nl82NCIKKwkgICAgZmkKKwlmaQorCWVjaG8gJHtTVU5fQVJDSH0tcGMtc29sYXJpczJgZWNobyAke1VOQU1FX1JFTEVBU0V9fHNlZCAtZSAncy9bXi5dKi8vJ2AKIAlleGl0IDs7CiAgICAgc3VuNCo6U3VuT1M6Nio6KikKIAkjIEFjY29yZGluZyB0byBjb25maWcuc3ViLCB0aGlzIGlzIHRoZSBwcm9wZXIgd2F5IHRvIGNhbm9uaWNhbGl6ZQpAQCAtNTMyLDcgKzU1Miw3IEBACiAJCWVjaG8gcnM2MDAwLWlibS1haXgzLjIKIAlmaQogCWV4aXQgOzsKLSAgICAqOkFJWDoqOls0NTZdKQorICAgICo6QUlYOio6WzQ1NjddKQogCUlCTV9DUFVfSUQ9YC91c3Ivc2Jpbi9sc2RldiAtQyAtYyBwcm9jZXNzb3IgLVMgYXZhaWxhYmxlIHwgc2VkIDFxIHwgYXdrICd7IHByaW50ICQxIH0nYAogCWlmIC91c3Ivc2Jpbi9sc2F0dHIgLUVsICR7SUJNX0NQVV9JRH0gfCBncmVwICcgUE9XRVInID4vZGV2L251bGwgMj4mMTsgdGhlbgogCQlJQk1fQVJDSD1yczYwMDAKQEAgLTY0MCw3ICs2NjAsNyBAQAogCSAgICAjID0+IGhwcGE2NC1ocC1ocHV4MTEuMjMKIAogCSAgICBpZiBlY2hvIF9fTFA2NF9fIHwgKENDT1BUUz0gJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsKSB8Ci0JCWdyZXAgX19MUDY0X18gPi9kZXYvbnVsbAorCQlncmVwIC1xIF9fTFA2NF9fCiAJICAgIHRoZW4KIAkJSFBfQVJDSD0iaHBwYTIuMHciCiAJICAgIGVsc2UKQEAgLTc5MSwxMiArODExLDEyIEBACiAgICAgaSo6UFcqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLXB3MzIKIAlleGl0IDs7Ci0gICAgKjpJbnRlcml4KjpbMzQ1Nl0qKQorICAgICo6SW50ZXJpeCo6KikKICAgICAJY2FzZSAke1VOQU1FX01BQ0hJTkV9IGluCiAJICAgIHg4NikKIAkJZWNobyBpNTg2LXBjLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CiAJCWV4aXQgOzsKLQkgICAgRU02NFQgfCBhdXRoZW50aWNhbWQpCisJICAgIGF1dGhlbnRpY2FtZCB8IGdlbnVpbmVpbnRlbCB8IEVNNjRUKQogCQllY2hvIHg4Nl82NC11bmtub3duLWludGVyaXgke1VOQU1FX1JFTEVBU0V9CiAJCWV4aXQgOzsKIAkgICAgSUE2NCkKQEAgLTgwNiw2ICs4MjYsOSBAQAogICAgIFszNDVdODY6V2luZG93c185NToqIHwgWzM0NV04NjpXaW5kb3dzXzk4OiogfCBbMzQ1XTg2OldpbmRvd3NfTlQ6KikKIAllY2hvIGkke1VOQU1FX01BQ0hJTkV9LXBjLW1rcwogCWV4aXQgOzsKKyAgICA4NjY0OldpbmRvd3NfTlQ6KikKKwllY2hvIHg4Nl82NC1wYy1ta3MKKwlleGl0IDs7CiAgICAgaSo6V2luZG93c19OVCo6KiB8IFBlbnRpdW0qOldpbmRvd3NfTlQqOiopCiAJIyBIb3cgZG8gd2Uga25vdyBpdCdzIEludGVyaXggcmF0aGVyIHRoYW4gdGhlIGdlbmVyaWMgUE9TSVggc3Vic3lzdGVtPwogCSMgSXQgYWxzbyBjb25mbGljdHMgd2l0aCBwcmUtMi4wIHZlcnNpb25zIG9mIEFUJlQgVVdJTi4gU2hvdWxkIHdlCkBAIC04MzUsNiArODU4LDIwIEBACiAgICAgaSo4NjpNaW5peDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLW1pbml4CiAJZXhpdCA7OworICAgIGFscGhhOkxpbnV4Oio6KikKKwljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgorCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKKwkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OworCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OworCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKKwkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OworCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7CisgICAgICAgIGVzYWMKKwlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIC1xIGxkLnNvLjEKKwlpZiB0ZXN0ICIkPyIgPSAwIDsgdGhlbiBMSUJDPSJsaWJjMSIgOyBlbHNlIExJQkM9IiIgOyBmaQorCWVjaG8gJHtVTkFNRV9NQUNISU5FfS11bmtub3duLWxpbnV4LWdudSR7TElCQ30KKwlleGl0IDs7CiAgICAgYXJtKjpMaW51eDoqOiopCiAJZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAogCWlmIGVjaG8gX19BUk1fRUFCSV9fIHwgJENDX0ZPUl9CVUlMRCAtRSAtIDI+L2Rldi9udWxsIFwKQEAgLTg1Nyw2ICs4OTQsMTcgQEAKICAgICBmcnY6TGludXg6KjoqKQogICAgIAllY2hvIGZydi11bmtub3duLWxpbnV4LWdudQogCWV4aXQgOzsKKyAgICBpKjg2OkxpbnV4Oio6KikKKwlMSUJDPWdudQorCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKKwlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYworCSNpZmRlZiBfX2RpZXRsaWJjX18KKwlMSUJDPWRpZXRsaWJjCisJI2VuZGlmCitFT0YKKwlldmFsIGAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgZ3JlcCAnXkxJQkMnYAorCWVjaG8gIiR7VU5BTUVfTUFDSElORX0tcGMtbGludXgtJHtMSUJDfSIKKwlleGl0IDs7CiAgICAgaWE2NDpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwpAQCAtODY2LDc0ICs5MTQsMzMgQEAKICAgICBtNjgqOkxpbnV4Oio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7Ci0gICAgbWlwczpMaW51eDoqOiopCisgICAgbWlwczpMaW51eDoqOiogfCBtaXBzNjQ6TGludXg6KjoqKQogCWV2YWwgJHNldF9jY19mb3JfYnVpbGQKIAlzZWQgJ3MvXgkvLycgPDwgRU9GID4kZHVtbXkuYwogCSN1bmRlZiBDUFUKLQkjdW5kZWYgbWlwcwotCSN1bmRlZiBtaXBzZWwKKwkjdW5kZWYgJHtVTkFNRV9NQUNISU5FfQorCSN1bmRlZiAke1VOQU1FX01BQ0hJTkV9ZWwKIAkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQotCUNQVT1taXBzZWwKKwlDUFU9JHtVTkFNRV9NQUNISU5FfWVsCiAJI2Vsc2UKIAkjaWYgZGVmaW5lZChfX01JUFNFQl9fKSB8fCBkZWZpbmVkKF9fTUlQU0VCKSB8fCBkZWZpbmVkKF9NSVBTRUIpIHx8IGRlZmluZWQoTUlQU0VCKQotCUNQVT1taXBzCisJQ1BVPSR7VU5BTUVfTUFDSElORX0KIAkjZWxzZQogCUNQVT0KIAkjZW5kaWYKIAkjZW5kaWYKIEVPRgotCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKLQkgICAgL15DUFUvewotCQlzOiA6OmcKLQkJcAotCSAgICB9J2AiCi0JdGVzdCB4IiR7Q1BVfSIgIT0geCAmJiB7IGVjaG8gIiR7Q1BVfS11bmtub3duLWxpbnV4LWdudSI7IGV4aXQ7IH0KLQk7OwotICAgIG1pcHM2NDpMaW51eDoqOiopCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCi0JI3VuZGVmIENQVQotCSN1bmRlZiBtaXBzNjQKLQkjdW5kZWYgbWlwczY0ZWwKLQkjaWYgZGVmaW5lZChfX01JUFNFTF9fKSB8fCBkZWZpbmVkKF9fTUlQU0VMKSB8fCBkZWZpbmVkKF9NSVBTRUwpIHx8IGRlZmluZWQoTUlQU0VMKQotCUNQVT1taXBzNjRlbAotCSNlbHNlCi0JI2lmIGRlZmluZWQoX19NSVBTRUJfXykgfHwgZGVmaW5lZChfX01JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKE1JUFNFQikKLQlDUFU9bWlwczY0Ci0JI2Vsc2UKLQlDUFU9Ci0JI2VuZGlmCi0JI2VuZGlmCi1FT0YKLQlldmFsICJgJENDX0ZPUl9CVUlMRCAtRSAkZHVtbXkuYyAyPi9kZXYvbnVsbCB8IHNlZCAtbiAnCi0JICAgIC9eQ1BVL3sKLQkJczogOjpnCi0JCXAKLQkgICAgfSdgIgorCWV2YWwgYCRDQ19GT1JfQlVJTEQgLUUgJGR1bW15LmMgMj4vZGV2L251bGwgfCBncmVwICdeQ1BVJ2AKIAl0ZXN0IHgiJHtDUFV9IiAhPSB4ICYmIHsgZWNobyAiJHtDUFV9LXVua25vd24tbGludXgtZ251IjsgZXhpdDsgfQogCTs7CiAgICAgb3IzMjpMaW51eDoqOiopCiAJZWNobyBvcjMyLXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OwotICAgIHBwYzpMaW51eDoqOiopCi0JZWNobyBwb3dlcnBjLXVua25vd24tbGludXgtZ251CisgICAgcGFkcmU6TGludXg6KjoqKQorCWVjaG8gc3BhcmMtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7Ci0gICAgcHBjNjQ6TGludXg6KjoqKQotCWVjaG8gcG93ZXJwYzY0LXVua25vd24tbGludXgtZ251Ci0JZXhpdCA7OwotICAgIGFscGhhOkxpbnV4Oio6KikKLQljYXNlIGBzZWQgLW4gJy9eY3B1IG1vZGVsL3MvXi4qOiBcKC4qXCkvXDEvcCcgPCAvcHJvYy9jcHVpbmZvYCBpbgotCSAgRVY1KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjUgOzsKLQkgIEVWNTYpICBVTkFNRV9NQUNISU5FPWFscGhhZXY1NiA7OwotCSAgUENBNTYpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgUENBNTcpIFVOQU1FX01BQ0hJTkU9YWxwaGFwY2E1NiA7OwotCSAgRVY2KSAgIFVOQU1FX01BQ0hJTkU9YWxwaGFldjYgOzsKLQkgIEVWNjcpICBVTkFNRV9NQUNISU5FPWFscGhhZXY2NyA7OwotCSAgRVY2OCopIFVOQU1FX01BQ0hJTkU9YWxwaGFldjY4IDs7Ci0gICAgICAgIGVzYWMKLQlvYmpkdW1wIC0tcHJpdmF0ZS1oZWFkZXJzIC9iaW4vc2ggfCBncmVwIGxkLnNvLjEgPi9kZXYvbnVsbAotCWlmIHRlc3QgIiQ/IiA9IDAgOyB0aGVuIExJQkM9ImxpYmMxIiA7IGVsc2UgTElCQz0iIiA7IGZpCi0JZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251JHtMSUJDfQorICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCisJZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CiAgICAgcGFyaXNjOkxpbnV4Oio6KiB8IGhwcGE6TGludXg6KjoqKQogCSMgTG9vayBmb3IgQ1BVIGxldmVsCkBAIC05NDMsOCArOTUwLDExIEBACiAJICAqKSAgICBlY2hvIGhwcGEtdW5rbm93bi1saW51eC1nbnUgOzsKIAllc2FjCiAJZXhpdCA7OwotICAgIHBhcmlzYzY0OkxpbnV4Oio6KiB8IGhwcGE2NDpMaW51eDoqOiopCi0JZWNobyBocHBhNjQtdW5rbm93bi1saW51eC1nbnUKKyAgICBwcGM2NDpMaW51eDoqOiopCisJZWNobyBwb3dlcnBjNjQtdW5rbm93bi1saW51eC1nbnUKKwlleGl0IDs7CisgICAgcHBjOkxpbnV4Oio6KikKKwllY2hvIHBvd2VycGMtdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7CiAgICAgczM5MDpMaW51eDoqOiogfCBzMzkweDpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LWlibS1saW51eApAQCAtOTU4LDYgKzk2OCw5IEBACiAgICAgc3BhcmM6TGludXg6KjoqIHwgc3BhcmM2NDpMaW51eDoqOiopCiAJZWNobyAke1VOQU1FX01BQ0hJTkV9LXVua25vd24tbGludXgtZ251CiAJZXhpdCA7OworICAgIHRpbGUqOkxpbnV4Oio6KikKKwllY2hvICR7VU5BTUVfTUFDSElORX0tdGlsZXJhLWxpbnV4LWdudQorCWV4aXQgOzsKICAgICB2YXg6TGludXg6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1kZWMtbGludXgtZ251CiAJZXhpdCA7OwpAQCAtOTY3LDY5ICs5ODAsNiBAQAogICAgIHh0ZW5zYSo6TGludXg6KjoqKQogICAgIAllY2hvICR7VU5BTUVfTUFDSElORX0tdW5rbm93bi1saW51eC1nbnUKIAlleGl0IDs7Ci0gICAgaSo4NjpMaW51eDoqOiopCi0JIyBUaGUgQkZEIGxpbmtlciBrbm93cyB3aGF0IHRoZSBkZWZhdWx0IG9iamVjdCBmaWxlIGZvcm1hdCBpcywgc28KLQkjIGZpcnN0IHNlZSBpZiBpdCB3aWxsIHRlbGwgdXMuIGNkIHRvIHRoZSByb290IGRpcmVjdG9yeSB0byBwcmV2ZW50Ci0JIyBwcm9ibGVtcyB3aXRoIG90aGVyIHByb2dyYW1zIG9yIGRpcmVjdG9yaWVzIGNhbGxlZCBgbGQnIGluIHRoZSBwYXRoLgotCSMgU2V0IExDX0FMTD1DIHRvIGVuc3VyZSBsZCBvdXRwdXRzIG1lc3NhZ2VzIGluIEVuZ2xpc2guCi0JbGRfc3VwcG9ydGVkX3RhcmdldHM9YGNkIC87IExDX0FMTD1DIGxkIC0taGVscCAyPiYxIFwKLQkJCSB8IHNlZCAtbmUgJy9zdXBwb3J0ZWQgdGFyZ2V0czovIWQKLQkJCQkgICAgcy9bIAldWyAJXSovIC9nCi0JCQkJICAgIHMvLipzdXBwb3J0ZWQgdGFyZ2V0czogKi8vCi0JCQkJICAgIHMvIC4qLy8KLQkJCQkgICAgcCdgCi0gICAgICAgIGNhc2UgIiRsZF9zdXBwb3J0ZWRfdGFyZ2V0cyIgaW4KLQkgIGVsZjMyLWkzODYpCi0JCVRFTlRBVElWRT0iJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnUiCi0JCTs7Ci0JICBhLm91dC1pMzg2LWxpbnV4KQotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudWFvdXQiCi0JCWV4aXQgOzsKLQkgIGNvZmYtaTM4NikKLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC1nbnVjb2ZmIgotCQlleGl0IDs7Ci0JICAiIikKLQkJIyBFaXRoZXIgYSBwcmUtQkZEIGEub3V0IGxpbmtlciAobGludXgtZ251b2xkbGQpIG9yCi0JCSMgb25lIHRoYXQgZG9lcyBub3QgZ2l2ZSB1cyB1c2VmdWwgLS1oZWxwLgotCQllY2hvICIke1VOQU1FX01BQ0hJTkV9LXBjLWxpbnV4LWdudW9sZGxkIgotCQlleGl0IDs7Ci0JZXNhYwotCSMgRGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGRlZmF1bHQgY29tcGlsZXIgaXMgYS5vdXQgb3IgZWxmCi0JZXZhbCAkc2V0X2NjX2Zvcl9idWlsZAotCXNlZCAncy9eCS8vJyA8PCBFT0YgPiRkdW1teS5jCi0JI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0JI2lmZGVmIF9fRUxGX18KLQkjIGlmZGVmIF9fR0xJQkNfXwotCSMgIGlmIF9fR0xJQkNfXyA+PSAyCi0JTElCQz1nbnUKLQkjICBlbHNlCi0JTElCQz1nbnVsaWJjMQotCSMgIGVuZGlmCi0JIyBlbHNlCi0JTElCQz1nbnVsaWJjMQotCSMgZW5kaWYKLQkjZWxzZQotCSNpZiBkZWZpbmVkKF9fSU5URUxfQ09NUElMRVIpIHx8IGRlZmluZWQoX19QR0kpIHx8IGRlZmluZWQoX19TVU5QUk9fQykgfHwgZGVmaW5lZChfX1NVTlBST19DQykKLQlMSUJDPWdudQotCSNlbHNlCi0JTElCQz1nbnVhb3V0Ci0JI2VuZGlmCi0JI2VuZGlmCi0JI2lmZGVmIF9fZGlldGxpYmNfXwotCUxJQkM9ZGlldGxpYmMKLQkjZW5kaWYKLUVPRgotCWV2YWwgImAkQ0NfRk9SX0JVSUxEIC1FICRkdW1teS5jIDI+L2Rldi9udWxsIHwgc2VkIC1uICcKLQkgICAgL15MSUJDL3sKLQkJczogOjpnCi0JCXAKLQkgICAgfSdgIgotCXRlc3QgeCIke0xJQkN9IiAhPSB4ICYmIHsKLQkJZWNobyAiJHtVTkFNRV9NQUNISU5FfS1wYy1saW51eC0ke0xJQkN9IgotCQlleGl0Ci0JfQotCXRlc3QgeCIke1RFTlRBVElWRX0iICE9IHggJiYgeyBlY2hvICIke1RFTlRBVElWRX0iOyBleGl0OyB9Ci0JOzsKICAgICBpKjg2OkRZTklYL3B0eDo0KjoqKQogCSMgcHR4IDQuMCBkb2VzIHVuYW1lIC1zIGNvcnJlY3RseSwgd2l0aCBEWU5JWC9wdHggaW4gdGhlcmUuCiAJIyBlYXJsaWVyIHZlcnNpb25zIGFyZSBtZXNzZWQgdXAgYW5kIHB1dCB0aGUgbm9kZW5hbWUgaW4gYm90aApAQCAtMTA1OCw3ICsxMDA4LDcgQEAKICAgICBpKjg2OnN5bGxhYmxlOio6KikKIAllY2hvICR7VU5BTUVfTUFDSElORX0tcGMtc3lsbGFibGUKIAlleGl0IDs7Ci0gICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LjAqOiopCisgICAgaSo4NjpMeW54T1M6Mi4qOiogfCBpKjg2Okx5bnhPUzozLlswMV0qOiogfCBpKjg2Okx5bnhPUzo0LlswMl0qOiopCiAJZWNobyBpMzg2LXVua25vd24tbHlueG9zJHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKICAgICBpKjg2OipET1M6KjoqKQpAQCAtMTEwMiw4ICsxMDUyLDExIEBACiAgICAgcGM6KjoqOiopCiAJIyBMZWZ0IGhlcmUgZm9yIGNvbXBhdGliaWxpdHk6CiAgICAgICAgICMgdW5hbWUgLW0gcHJpbnRzIGZvciBESkdQUCBhbHdheXMgJ3BjJywgYnV0IGl0IHByaW50cyBub3RoaW5nIGFib3V0Ci0gICAgICAgICMgdGhlIHByb2Nlc3Nvciwgc28gd2UgcGxheSBzYWZlIGJ5IGFzc3VtaW5nIGkzODYuCi0JZWNobyBpMzg2LXBjLW1zZG9zZGpncHAKKyAgICAgICAgIyB0aGUgcHJvY2Vzc29yLCBzbyB3ZSBwbGF5IHNhZmUgYnkgYXNzdW1pbmcgaTU4Ni4KKwkjIE5vdGU6IHdoYXRldmVyIHRoaXMgaXMsIGl0IE1VU1QgYmUgdGhlIHNhbWUgYXMgd2hhdCBjb25maWcuc3ViCisJIyBwcmludHMgZm9yIHRoZSAiZGpncHAiIGhvc3QsIG9yIGVsc2UgR0RCIGNvbmZpZ3VyeSB3aWxsIGRlY2lkZSB0aGF0CisJIyB0aGlzIGlzIGEgY3Jvc3MtYnVpbGQuCisJZWNobyBpNTg2LXBjLW1zZG9zZGpncHAKICAgICAgICAgZXhpdCA7OwogICAgIEludGVsOk1hY2g6Myo6KikKIAllY2hvIGkzODYtcGMtbWFjaDMKQEAgLTExNDEsNiArMTA5NCwxNiBAQAogICAgIDNbMzRdPz86Kjo0LjA6KiB8IDNbMzRdPz8sKjoqOjQuMDoqKQogICAgICAgICAvYmluL3VuYW1lIC1wIDI+L2Rldi9udWxsIHwgZ3JlcCA4NiA+L2Rldi9udWxsIFwKICAgICAgICAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQ7IGV4aXQ7IH0gOzsKKyAgICBOQ1IqOio6NC4yOiogfCBNUFJBUyo6Kjo0LjI6KikKKwlPU19SRUw9Jy4zJworCXRlc3QgLXIgL2V0Yy8ucmVsaWQgXAorCSAgICAmJiBPU19SRUw9LmBzZWQgLW4gJ3MvW14gXSogW14gXSogXChbMC05XVswLTldXCkuKi9cMS9wJyA8IC9ldGMvLnJlbGlkYAorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCBncmVwIDg2ID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTQ4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgZW50aXVtID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfQorCS9iaW4vdW5hbWUgLXAgMj4vZGV2L251bGwgfCAvYmluL2dyZXAgcHRlcm9uID4vZGV2L251bGwgXAorCSAgICAmJiB7IGVjaG8gaTU4Ni1uY3Itc3lzdjQuMyR7T1NfUkVMfTsgZXhpdDsgfSA7OwogICAgIG02OCo6THlueE9TOjIuKjoqIHwgbTY4KjpMeW54T1M6My4wKjoqKQogCWVjaG8gbTY4ay11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CkBAIC0xMTUzLDcgKzExMTYsNyBAQAogICAgIHJzNjAwMDpMeW54T1M6Mi4qOiopCiAJZWNobyByczYwMDAtdW5rbm93bi1seW54b3Mke1VOQU1FX1JFTEVBU0V9CiAJZXhpdCA7OwotICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC4wKjoqKQorICAgIFBvd2VyUEM6THlueE9TOjIuKjoqIHwgUG93ZXJQQzpMeW54T1M6My5bMDFdKjoqIHwgUG93ZXJQQzpMeW54T1M6NC5bMDJdKjoqKQogCWVjaG8gcG93ZXJwYy11bmtub3duLWx5bnhvcyR7VU5BTUVfUkVMRUFTRX0KIAlleGl0IDs7CiAgICAgU01bQkVdUzpVTklYX1NWOio6KikKQEAgLTEyMTYsNiArMTE3OSw5IEBACiAgICAgQmVQQzpCZU9TOio6KikJIyBCZU9TIHJ1bm5pbmcgb24gSW50ZWwgUEMgY29tcGF0aWJsZS4KIAllY2hvIGk1ODYtcGMtYmVvcwogCWV4aXQgOzsKKyAgICBCZVBDOkhhaWt1Oio6KikJIyBIYWlrdSBydW5uaW5nIG9uIEludGVsIFBDIGNvbXBhdGlibGUuCisJZWNobyBpNTg2LXBjLWhhaWt1CisJZXhpdCA7OwogICAgIFNYLTQ6U1VQRVItVVg6KjoqKQogCWVjaG8gc3g0LW5lYy1zdXBlcnV4JHtVTkFNRV9SRUxFQVNFfQogCWV4aXQgOzsKQEAgLTEyNDMsNiArMTIwOSwxNiBAQAogICAgICo6RGFyd2luOio6KikKIAlVTkFNRV9QUk9DRVNTT1I9YHVuYW1lIC1wYCB8fCBVTkFNRV9QUk9DRVNTT1I9dW5rbm93bgogCWNhc2UgJFVOQU1FX1BST0NFU1NPUiBpbgorCSAgICBpMzg2KQorCQlldmFsICRzZXRfY2NfZm9yX2J1aWxkCisJCWlmIFsgIiRDQ19GT1JfQlVJTEQiICE9ICdub19jb21waWxlcl9mb3VuZCcgXTsgdGhlbgorCQkgIGlmIChlY2hvICcjaWZkZWYgX19MUDY0X18nOyBlY2hvIElTXzY0QklUX0FSQ0g7IGVjaG8gJyNlbmRpZicpIHwgXAorCQkgICAgICAoQ0NPUFRTPSAkQ0NfRk9SX0JVSUxEIC1FIC0gMj4vZGV2L251bGwpIHwgXAorCQkgICAgICBncmVwIElTXzY0QklUX0FSQ0ggPi9kZXYvbnVsbAorCQkgIHRoZW4KKwkJICAgICAgVU5BTUVfUFJPQ0VTU09SPSJ4ODZfNjQiCisJCSAgZmkKKwkJZmkgOzsKIAkgICAgdW5rbm93bikgVU5BTUVfUFJPQ0VTU09SPXBvd2VycGMgOzsKIAllc2FjCiAJZWNobyAke1VOQU1FX1BST0NFU1NPUn0tYXBwbGUtZGFyd2luJHtVTkFNRV9SRUxFQVNFfQpAQCAtMTMyNCw2ICsxMzAwLDkgQEAKICAgICBpKjg2OnJkb3M6KjoqKQogCWVjaG8gJHtVTkFNRV9NQUNISU5FfS1wYy1yZG9zCiAJZXhpdCA7OworICAgIGkqODY6QVJPUzoqOiopCisJZWNobyAke1VOQU1FX01BQ0hJTkV9LXBjLWFyb3MKKwlleGl0IDs7CiBlc2FjCiAKICNlY2hvICcoTm8gdW5hbWUgY29tbWFuZCBvciB1bmFtZSBvdXRwdXQgbm90IHJlY29nbml6ZWQuKScgMT4mMgpkaWZmIC0tZ2l0IGEvY29uZmlnLnN1YiBiL2NvbmZpZy5zdWIKaW5kZXggNjc1OTgyNS4uMzIwZTMwMyAxMDA3NTUKLS0tIGEvY29uZmlnLnN1YgorKysgYi9jb25maWcuc3ViCkBAIC0xLDEwICsxLDEwIEBACiAjISAvYmluL3NoCiAjIENvbmZpZ3VyYXRpb24gdmFsaWRhdGlvbiBzdWJyb3V0aW5lIHNjcmlwdC4KICMgICBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksCi0jICAgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAorIyAgIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAKICMgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIAotdGltZXN0YW1wPScyMDA4LTAxLTE2JwordGltZXN0YW1wPScyMDEwLTA5LTExJwogCiAjIFRoaXMgZmlsZSBpcyAoaW4gcHJpbmNpcGxlKSBjb21tb24gdG8gQUxMIEdOVSBzb2Z0d2FyZS4KICMgVGhlIHByZXNlbmNlIG9mIGEgbWFjaGluZSBpbiB0aGlzIGZpbGUgc3VnZ2VzdHMgdGhhdCBTT01FIEdOVSBzb2Z0d2FyZQpAQCAtMzIsMTMgKzMyLDE2IEBACiAKIAogIyBQbGVhc2Ugc2VuZCBwYXRjaGVzIHRvIDxjb25maWctcGF0Y2hlc0BnbnUub3JnPi4gIFN1Ym1pdCBhIGNvbnRleHQKLSMgZGlmZiBhbmQgYSBwcm9wZXJseSBmb3JtYXR0ZWQgQ2hhbmdlTG9nIGVudHJ5LgorIyBkaWZmIGFuZCBhIHByb3Blcmx5IGZvcm1hdHRlZCBHTlUgQ2hhbmdlTG9nIGVudHJ5LgogIwogIyBDb25maWd1cmF0aW9uIHN1YnJvdXRpbmUgdG8gdmFsaWRhdGUgYW5kIGNhbm9uaWNhbGl6ZSBhIGNvbmZpZ3VyYXRpb24gdHlwZS4KICMgU3VwcGx5IHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiB0eXBlIGFzIGFuIGFyZ3VtZW50LgogIyBJZiBpdCBpcyBpbnZhbGlkLCB3ZSBwcmludCBhbiBlcnJvciBtZXNzYWdlIG9uIHN0ZGVyciBhbmQgZXhpdCB3aXRoIGNvZGUgMS4KICMgT3RoZXJ3aXNlLCB3ZSBwcmludCB0aGUgY2Fub25pY2FsIGNvbmZpZyB0eXBlIG9uIHN0ZG91dCBhbmQgc3VjY2VlZC4KIAorIyBZb3UgY2FuIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBzY3JpcHQgZnJvbToKKyMgaHR0cDovL2dpdC5zYXZhbm5haC5nbnUub3JnL2dpdHdlYi8/cD1jb25maWcuZ2l0O2E9YmxvYl9wbGFpbjtmPWNvbmZpZy5zdWI7aGI9SEVBRAorCiAjIFRoaXMgZmlsZSBpcyBzdXBwb3NlZCB0byBiZSB0aGUgc2FtZSBmb3IgYWxsIEdOVSBwYWNrYWdlcwogIyBhbmQgcmVjb2duaXplIGFsbCB0aGUgQ1BVIHR5cGVzLCBzeXN0ZW0gdHlwZXMgYW5kIGFsaWFzZXMKICMgdGhhdCBhcmUgbWVhbmluZ2Z1bCB3aXRoICphbnkqIEdOVSBzb2Z0d2FyZS4KQEAgLTcyLDggKzc1LDkgQEAKIHZlcnNpb249IlwKIEdOVSBjb25maWcuc3ViICgkdGltZXN0YW1wKQogCi1Db3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCi0yMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorQ29weXJpZ2h0IChDKSAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLAorMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCwgMjAwOSwgMjAxMCBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCiAKIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCiB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCkBAIC0xMjAsOCArMTI0LDEwIEBACiAjIEhlcmUgd2UgbXVzdCByZWNvZ25pemUgYWxsIHRoZSB2YWxpZCBLRVJORUwtT1MgY29tYmluYXRpb25zLgogbWF5YmVfb3M9YGVjaG8gJDEgfCBzZWQgJ3MvXlwoLipcKS1cKFteLV0qLVteLV0qXCkkL1wyLydgCiBjYXNlICRtYXliZV9vcyBpbgotICBudG8tcW54KiB8IGxpbnV4LWdudSogfCBsaW51eC1kaWV0bGliYyB8IGxpbnV4LW5ld2xpYiogfCBsaW51eC11Y2xpYmMqIHwgXAotICB1Y2xpbnV4LXVjbGliYyogfCB1Y2xpbnV4LWdudSogfCBrZnJlZWJzZCotZ251KiB8IGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIG50by1xbngqIHwgbGludXgtZ251KiB8IGxpbnV4LWFuZHJvaWQqIHwgbGludXgtZGlldGxpYmMgfCBsaW51eC1uZXdsaWIqIHwgXAorICBsaW51eC11Y2xpYmMqIHwgdWNsaW51eC11Y2xpYmMqIHwgdWNsaW51eC1nbnUqIHwga2ZyZWVic2QqLWdudSogfCBcCisgIGtuZXRic2QqLWdudSogfCBuZXRic2QqLWdudSogfCBcCisgIGtvcGVuc29sYXJpcyotZ251KiB8IFwKICAgc3Rvcm0tY2hhb3MqIHwgb3MyLWVteCogfCBydG1rLW5vdmEqKQogICAgIG9zPS0kbWF5YmVfb3MKICAgICBiYXNpY19tYWNoaW5lPWBlY2hvICQxIHwgc2VkICdzL15cKC4qXCktXChbXi1dKi1bXi1dKlwpJC9cMS8nYApAQCAtMTQ4LDEwICsxNTQsMTMgQEAKIAktY29udmVyZ2VudCogfCAtbmNyKiB8IC1uZXdzIHwgLTMyKiB8IC0zNjAwKiB8IC0zMTAwKiB8IC1oaXRhY2hpKiB8XAogCS1jWzEyM10qIHwgLWNvbnZleCogfCAtc3VuIHwgLWNyZHMgfCAtb21yb24qIHwgLWRnIHwgLXVsdHJhIHwgLXR0aSogfCBcCiAJLWhhcnJpcyB8IC1kb2xwaGluIHwgLWhpZ2hsZXZlbCB8IC1nb3VsZCB8IC1jYm0gfCAtbnMgfCAtbWFzc2NvbXAgfCBcCi0JLWFwcGxlIHwgLWF4aXMgfCAta251dGggfCAtY3JheSkKKwktYXBwbGUgfCAtYXhpcyB8IC1rbnV0aCB8IC1jcmF5IHwgLW1pY3JvYmxhemUpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCiAJCTs7CisgICAgICAgIC1ibHVlZ2VuZSopCisJICAgICAgICBvcz0tY25rCisJCTs7CiAJLXNpbSB8IC1jaXNjbyB8IC1va2kgfCAtd2VjIHwgLXdpbmJvbmQpCiAJCW9zPQogCQliYXNpY19tYWNoaW5lPSQxCkBAIC0yNDksMTMgKzI1OCwxNiBAQAogCXwgaDgzMDAgfCBoODUwMCB8IGhwcGEgfCBocHBhMS5bMDFdIHwgaHBwYTIuMCB8IGhwcGEyLjBbbnddIHwgaHBwYTY0IFwKIAl8IGkzNzAgfCBpODYwIHwgaTk2MCB8IGlhNjQgXAogCXwgaXAyayB8IGlxMjAwMCBcCisJfCBsbTMyIFwKIAl8IG0zMmMgfCBtMzJyIHwgbTMycmxlIHwgbTY4MDAwIHwgbTY4ayB8IG04OGsgXAotCXwgbWF4cSB8IG1iIHwgbWljcm9ibGF6ZSB8IG1jb3JlIHwgbWVwIFwKKwl8IG1heHEgfCBtYiB8IG1pY3JvYmxhemUgfCBtY29yZSB8IG1lcCB8IG1ldGFnIFwKIAl8IG1pcHMgfCBtaXBzYmUgfCBtaXBzZWIgfCBtaXBzZWwgfCBtaXBzbGUgXAogCXwgbWlwczE2IFwKIAl8IG1pcHM2NCB8IG1pcHM2NGVsIFwKLQl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCisJfCBtaXBzNjRvY3Rlb24gfCBtaXBzNjRvY3Rlb25lbCBcCiAJfCBtaXBzNjRvcmlvbiB8IG1pcHM2NG9yaW9uZWwgXAorCXwgbWlwczY0cjU5MDAgfCBtaXBzNjRyNTkwMGVsIFwKKwl8IG1pcHM2NHZyIHwgbWlwczY0dnJlbCBcCiAJfCBtaXBzNjR2cjQxMDAgfCBtaXBzNjR2cjQxMDBlbCBcCiAJfCBtaXBzNjR2cjQzMDAgfCBtaXBzNjR2cjQzMDBlbCBcCiAJfCBtaXBzNjR2cjUwMDAgfCBtaXBzNjR2cjUwMDBlbCBcCkBAIC0yNjgsMjggKzI4MCw0MSBAQAogCXwgbWlwc2lzYTY0c3I3MWsgfCBtaXBzaXNhNjRzcjcxa2VsIFwKIAl8IG1pcHN0eDM5IHwgbWlwc3R4MzllbCBcCiAJfCBtbjEwMjAwIHwgbW4xMDMwMCBcCisJfCBtb3hpZSBcCiAJfCBtdCBcCiAJfCBtc3A0MzAgXAorCXwgbmRzMzIgfCBuZHMzMmxlIHwgbmRzMzJiZSBcCiAJfCBuaW9zIHwgbmlvczIgXAogCXwgbnMxNmsgfCBuczMyayBcCiAJfCBvcjMyIFwKIAl8IHBkcDEwIHwgcGRwMTEgfCBwaiB8IHBqbCBcCiAJfCBwb3dlcnBjIHwgcG93ZXJwYzY0IHwgcG93ZXJwYzY0bGUgfCBwb3dlcnBjbGUgfCBwcGNiZSBcCiAJfCBweXJhbWlkIFwKKwl8IHJ4IFwKIAl8IHNjb3JlIFwKLQl8IHNoIHwgc2hbMTIzNF0gfCBzaFsyNF1hIHwgc2hbMjNdZSB8IHNoWzM0XWViIHwgc2hlYiB8IHNoYmUgfCBzaGxlIHwgc2hbMTIzNF1sZSB8IHNoM2VsZSBcCisJfCBzaCB8IHNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzI0XWFlYiB8IHNoWzIzXWUgfCBzaFszNF1lYiB8IHNoZWIgfCBzaGJlIHwgc2hsZSB8IHNoWzEyMzRdbGUgfCBzaDNlbGUgXAogCXwgc2g2NCB8IHNoNjRsZSBcCiAJfCBzcGFyYyB8IHNwYXJjNjQgfCBzcGFyYzY0YiB8IHNwYXJjNjR2IHwgc3BhcmM4NnggfCBzcGFyY2xldCB8IHNwYXJjbGl0ZSBcCiAJfCBzcGFyY3Y4IHwgc3BhcmN2OSB8IHNwYXJjdjliIHwgc3BhcmN2OXYgXAogCXwgc3B1IHwgc3Ryb25nYXJtIFwKLQl8IHRhaG9lIHwgdGh1bWIgfCB0aWM0eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB0YWhvZSB8IHRodW1iIHwgdGljNHggfCB0aWM1NHggfCB0aWM1NXggfCB0aWM2eCB8IHRpYzgwIHwgdHJvbiBcCisJfCB1Ymljb20zMiBcCiAJfCB2ODUwIHwgdjg1MGUgXAogCXwgd2UzMmsgXAogCXwgeDg2IHwgeGMxNnggfCB4c2NhbGUgfCB4c2NhbGVlW2JsXSB8IHhzdG9ybXkxNiB8IHh0ZW5zYSBcCi0JfCB6OGspCisJfCB6OGsgfCB6ODApCiAJCWJhc2ljX21hY2hpbmU9JGJhc2ljX21hY2hpbmUtdW5rbm93bgogCQk7OwotCW02ODExIHwgbTY4aGMxMSB8IG02ODEyIHwgbTY4aGMxMikKKwljNTR4KQorCQliYXNpY19tYWNoaW5lPXRpYzU0eC11bmtub3duCisJCTs7CisJYzU1eCkKKwkJYmFzaWNfbWFjaGluZT10aWM1NXgtdW5rbm93bgorCQk7OworCWM2eCkKKwkJYmFzaWNfbWFjaGluZT10aWM2eC11bmtub3duCisJCTs7CisJbTY4MTEgfCBtNjhoYzExIHwgbTY4MTIgfCBtNjhoYzEyIHwgcGljb2NoaXApCiAJCSMgTW90b3JvbGEgNjhIQzExLzEyLgogCQliYXNpY19tYWNoaW5lPSRiYXNpY19tYWNoaW5lLXVua25vd24KIAkJb3M9LW5vbmUKQEAgLTMyMCw3ICszNDUsNyBAQAogCXwgYXJtLSogIHwgYXJtYmUtKiB8IGFybWxlLSogfCBhcm1lYi0qIHwgYXJtdiotKiBcCiAJfCBhdnItKiB8IGF2cjMyLSogXAogCXwgYmZpbi0qIHwgYnMyMDAwLSogXAotCXwgY1sxMjNdKiB8IGMzMC0qIHwgW2NqdF05MC0qIHwgYzR4LSogfCBjNTR4LSogfCBjNTV4LSogfCBjNngtKiBcCisJfCBjWzEyM10qIHwgYzMwLSogfCBbY2p0XTkwLSogfCBjNHgtKiBcCiAJfCBjbGlwcGVyLSogfCBjcmF5bnYtKiB8IGN5ZHJhLSogXAogCXwgZDEwdi0qIHwgZDMwdi0qIHwgZGx4LSogXAogCXwgZWx4c2ktKiBcCkBAIC0zMjksMTQgKzM1NCwxNyBAQAogCXwgaHBwYS0qIHwgaHBwYTEuWzAxXS0qIHwgaHBwYTIuMC0qIHwgaHBwYTIuMFtud10tKiB8IGhwcGE2NC0qIFwKIAl8IGkqODYtKiB8IGk4NjAtKiB8IGk5NjAtKiB8IGlhNjQtKiBcCiAJfCBpcDJrLSogfCBpcTIwMDAtKiBcCisJfCBsbTMyLSogXAogCXwgbTMyYy0qIHwgbTMyci0qIHwgbTMycmxlLSogXAogCXwgbTY4MDAwLSogfCBtNjgwWzAxMjM0Nl0wLSogfCBtNjgzNjAtKiB8IG02ODM/Mi0qIHwgbTY4ay0qIFwKLQl8IG04ODExMC0qIHwgbTg4ay0qIHwgbWF4cS0qIHwgbWNvcmUtKiBcCisJfCBtODgxMTAtKiB8IG04OGstKiB8IG1heHEtKiB8IG1jb3JlLSogfCBtZXRhZy0qIHwgbWljcm9ibGF6ZS0qIFwKIAl8IG1pcHMtKiB8IG1pcHNiZS0qIHwgbWlwc2ViLSogfCBtaXBzZWwtKiB8IG1pcHNsZS0qIFwKIAl8IG1pcHMxNi0qIFwKIAl8IG1pcHM2NC0qIHwgbWlwczY0ZWwtKiBcCi0JfCBtaXBzNjR2ci0qIHwgbWlwczY0dnJlbC0qIFwKKwl8IG1pcHM2NG9jdGVvbi0qIHwgbWlwczY0b2N0ZW9uZWwtKiBcCiAJfCBtaXBzNjRvcmlvbi0qIHwgbWlwczY0b3Jpb25lbC0qIFwKKwl8IG1pcHM2NHI1OTAwLSogfCBtaXBzNjRyNTkwMGVsLSogXAorCXwgbWlwczY0dnItKiB8IG1pcHM2NHZyZWwtKiBcCiAJfCBtaXBzNjR2cjQxMDAtKiB8IG1pcHM2NHZyNDEwMGVsLSogXAogCXwgbWlwczY0dnI0MzAwLSogfCBtaXBzNjR2cjQzMDBlbC0qIFwKIAl8IG1pcHM2NHZyNTAwMC0qIHwgbWlwczY0dnI1MDAwZWwtKiBcCkBAIC0zNTEsMjcgKzM3OSwzMCBAQAogCXwgbW1peC0qIFwKIAl8IG10LSogXAogCXwgbXNwNDMwLSogXAorCXwgbmRzMzItKiB8IG5kczMybGUtKiB8IG5kczMyYmUtKiBcCiAJfCBuaW9zLSogfCBuaW9zMi0qIFwKIAl8IG5vbmUtKiB8IG5wMS0qIHwgbnMxNmstKiB8IG5zMzJrLSogXAogCXwgb3Jpb24tKiBcCiAJfCBwZHAxMC0qIHwgcGRwMTEtKiB8IHBqLSogfCBwamwtKiB8IHBuLSogfCBwb3dlci0qIFwKIAl8IHBvd2VycGMtKiB8IHBvd2VycGM2NC0qIHwgcG93ZXJwYzY0bGUtKiB8IHBvd2VycGNsZS0qIHwgcHBjYmUtKiBcCiAJfCBweXJhbWlkLSogXAotCXwgcm9tcC0qIHwgcnM2MDAwLSogXAotCXwgc2gtKiB8IHNoWzEyMzRdLSogfCBzaFsyNF1hLSogfCBzaFsyM11lLSogfCBzaFszNF1lYi0qIHwgc2hlYi0qIHwgc2hiZS0qIFwKKwl8IHJvbXAtKiB8IHJzNjAwMC0qIHwgcngtKiBcCisJfCBzaC0qIHwgc2hbMTIzNF0tKiB8IHNoWzI0XWEtKiB8IHNoWzI0XWFlYi0qIHwgc2hbMjNdZS0qIHwgc2hbMzRdZWItKiB8IHNoZWItKiB8IHNoYmUtKiBcCiAJfCBzaGxlLSogfCBzaFsxMjM0XWxlLSogfCBzaDNlbGUtKiB8IHNoNjQtKiB8IHNoNjRsZS0qIFwKIAl8IHNwYXJjLSogfCBzcGFyYzY0LSogfCBzcGFyYzY0Yi0qIHwgc3BhcmM2NHYtKiB8IHNwYXJjODZ4LSogfCBzcGFyY2xldC0qIFwKIAl8IHNwYXJjbGl0ZS0qIFwKIAl8IHNwYXJjdjgtKiB8IHNwYXJjdjktKiB8IHNwYXJjdjliLSogfCBzcGFyY3Y5di0qIHwgc3Ryb25nYXJtLSogfCBzdjEtKiB8IHN4Py0qIFwKIAl8IHRhaG9lLSogfCB0aHVtYi0qIFwKIAl8IHRpYzMwLSogfCB0aWM0eC0qIHwgdGljNTR4LSogfCB0aWM1NXgtKiB8IHRpYzZ4LSogfCB0aWM4MC0qIFwKKwl8IHRpbGUtKiB8IHRpbGVneC0qIFwKIAl8IHRyb24tKiBcCisJfCB1Ymljb20zMi0qIFwKIAl8IHY4NTAtKiB8IHY4NTBlLSogfCB2YXgtKiBcCiAJfCB3ZTMyay0qIFwKIAl8IHg4Ni0qIHwgeDg2XzY0LSogfCB4YzE2eC0qIHwgeHBzMTAwLSogfCB4c2NhbGUtKiB8IHhzY2FsZWVbYmxdLSogXAogCXwgeHN0b3JteTE2LSogfCB4dGVuc2EqLSogXAogCXwgeW1wLSogXAotCXwgejhrLSopCisJfCB6OGstKiB8IHo4MC0qKQogCQk7OwogCSMgUmVjb2duaXplIHRoZSBiYXNpYyBDUFUgdHlwZXMgd2l0aG91dCBjb21wYW55IG5hbWUsIHdpdGggZ2xvYiBtYXRjaC4KIAl4dGVuc2EqKQpAQCAtNDM5LDYgKzQ3MCwxMCBAQAogCQliYXNpY19tYWNoaW5lPW02OGstYXBvbGxvCiAJCW9zPS1ic2QKIAkJOzsKKwlhcm9zKQorCQliYXNpY19tYWNoaW5lPWkzODYtcGMKKwkJb3M9LWFyb3MKKwkJOzsKIAlhdXgpCiAJCWJhc2ljX21hY2hpbmU9bTY4ay1hcHBsZQogCQlvcz0tYXV4CkBAIC00NTUsMTAgKzQ5MCwyNyBAQAogCQliYXNpY19tYWNoaW5lPWJmaW4tYGVjaG8gJGJhc2ljX21hY2hpbmUgfCBzZWQgJ3MvXlteLV0qLS8vJ2AKIAkJb3M9LWxpbnV4CiAJCTs7CisJYmx1ZWdlbmUqKQorCQliYXNpY19tYWNoaW5lPXBvd2VycGMtaWJtCisJCW9zPS1jbmsKKwkJOzsKKwljNTR4LSopCisJCWJhc2ljX21hY2hpbmU9dGljNTR4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CisJYzU1eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzU1eC1gZWNobyAkYmFzaWNfbWFjaGluZSB8IHNlZCAncy9eW14tXSotLy8nYAorCQk7OworCWM2eC0qKQorCQliYXNpY19tYWNoaW5lPXRpYzZ4LWBlY2hvICRiYXNpY19tYWNoaW5lIHwgc2VkICdzL15bXi1dKi0vLydgCisJCTs7CiAJYzkwKQogCQliYXNpY19tYWNoaW5lPWM5MC1jcmF5CiAJCW9zPS11bmljb3MKIAkJOzsKKyAgICAgICAgY2VnY2MpCisJCWJhc2ljX21hY2hpbmU9YXJtLXVua25vd24KKwkJb3M9LWNlZ2NjCisJCTs7CiAJY29udmV4LWMxKQogCQliYXNpY19tYWNoaW5lPWMxLWNvbnZleAogCQlvcz0tYnNkCkBAIC01MjYsNiArNTc4LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9bTg4ay1tb3Rvcm9sYQogCQlvcz0tc3lzdjMKIAkJOzsKKwlkaWNvcykKKwkJYmFzaWNfbWFjaGluZT1pNjg2LXBjCisJCW9zPS1kaWNvcworCQk7OwogCWRqZ3BwKQogCQliYXNpY19tYWNoaW5lPWk1ODYtcGMKIAkJb3M9LW1zZG9zZGpncHAKQEAgLTY5OSw2ICs3NTUsOSBAQAogCQliYXNpY19tYWNoaW5lPW5zMzJrLXV0ZWsKIAkJb3M9LXN5c3YKIAkJOzsKKyAgICAgICAgbWljcm9ibGF6ZSkKKwkJYmFzaWNfbWFjaGluZT1taWNyb2JsYXplLXhpbGlueAorCQk7OwogCW1pbmd3MzIpCiAJCWJhc2ljX21hY2hpbmU9aTM4Ni1wYwogCQlvcz0tbWluZ3czMgpAQCAtODAzLDYgKzg2MiwxMiBAQAogCW5wMSkKIAkJYmFzaWNfbWFjaGluZT1ucDEtZ291bGQKIAkJOzsKKyAgICAgICAgbmVvLXRhbmRlbSkKKwkJYmFzaWNfbWFjaGluZT1uZW8tdGFuZGVtCisJCTs7CisgICAgICAgIG5zZS10YW5kZW0pCisJCWJhc2ljX21hY2hpbmU9bnNlLXRhbmRlbQorCQk7OwogCW5zci10YW5kZW0pCiAJCWJhc2ljX21hY2hpbmU9bnNyLXRhbmRlbQogCQk7OwpAQCAtMTAzNywxNyArMTEwMiwxMCBAQAogCQliYXNpY19tYWNoaW5lPXQ5MC1jcmF5CiAJCW9zPS11bmljb3MKIAkJOzsKLQl0aWM1NHggfCBjNTR4KikKLQkJYmFzaWNfbWFjaGluZT10aWM1NHgtdW5rbm93bgotCQlvcz0tY29mZgotCQk7OwotCXRpYzU1eCB8IGM1NXgqKQotCQliYXNpY19tYWNoaW5lPXRpYzU1eC11bmtub3duCi0JCW9zPS1jb2ZmCi0JCTs7Ci0JdGljNnggfCBjNngqKQotCQliYXNpY19tYWNoaW5lPXRpYzZ4LXVua25vd24KLQkJb3M9LWNvZmYKKyAgICAgICAgIyBUaGlzIG11c3QgYmUgbWF0Y2hlZCBiZWZvcmUgdGlsZSouCisgICAgICAgIHRpbGVneCopCisJCWJhc2ljX21hY2hpbmU9dGlsZWd4LXVua25vd24KKwkJb3M9LWxpbnV4LWdudQogCQk7OwogCXRpbGUqKQogCQliYXNpY19tYWNoaW5lPXRpbGUtdW5rbm93bgpAQCAtMTEyOCw2ICsxMTg2LDEwIEBACiAJCWJhc2ljX21hY2hpbmU9ejhrLXVua25vd24KIAkJb3M9LXNpbQogCQk7OworCXo4MC0qLWNvZmYpCisJCWJhc2ljX21hY2hpbmU9ejgwLXVua25vd24KKwkJb3M9LXNpbQorCQk7OwogCW5vbmUpCiAJCWJhc2ljX21hY2hpbmU9bm9uZS1ub25lCiAJCW9zPS1ub25lCkBAIC0xMTY2LDcgKzEyMjgsNyBAQAogCXdlMzJrKQogCQliYXNpY19tYWNoaW5lPXdlMzJrLWF0dAogCQk7OwotCXNoWzEyMzRdIHwgc2hbMjRdYSB8IHNoWzM0XWViIHwgc2hbMTIzNF1sZSB8IHNoWzIzXWVsZSkKKwlzaFsxMjM0XSB8IHNoWzI0XWEgfCBzaFsyNF1hZWIgfCBzaFszNF1lYiB8IHNoWzEyMzRdbGUgfCBzaFsyM11lbGUpCiAJCWJhc2ljX21hY2hpbmU9c2gtdW5rbm93bgogCQk7OwogCXNwYXJjIHwgc3BhcmN2OCB8IHNwYXJjdjkgfCBzcGFyY3Y5YiB8IHNwYXJjdjl2KQpAQCAtMTIxNiw2ICsxMjc4LDkgQEAKICAgICAgICAgIyBGaXJzdCBtYXRjaCBzb21lIHN5c3RlbSB0eXBlIGFsaWFzZXMKICAgICAgICAgIyB0aGF0IG1pZ2h0IGdldCBjb25mdXNlZCB3aXRoIHZhbGlkIHN5c3RlbSB0eXBlcy4KIAkjIC1zb2xhcmlzKiBpcyBhIGJhc2ljIHN5c3RlbSB0eXBlLCB3aXRoIHRoaXMgb25lIGV4Y2VwdGlvbi4KKyAgICAgICAgLWF1cm9yYXV4KQorCSAgICAgICAgb3M9LWF1cm9yYXV4CisJCTs7CiAJLXNvbGFyaXMxIHwgLXNvbGFyaXMxLiopCiAJCW9zPWBlY2hvICRvcyB8IHNlZCAtZSAnc3xzb2xhcmlzMXxzdW5vczR8J2AKIAkJOzsKQEAgLTEyMzYsMTAgKzEzMDEsMTEgQEAKIAkjIEVhY2ggYWx0ZXJuYXRpdmUgTVVTVCBFTkQgSU4gQSAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCSMgLXN5c3YqIGlzIG5vdCBoZXJlIGJlY2F1c2UgaXQgY29tZXMgbGF0ZXIsIGFmdGVyIHN5c3ZyNC4KIAktZ251KiB8IC1ic2QqIHwgLW1hY2gqIHwgLW1pbml4KiB8IC1nZW5peCogfCAtdWx0cml4KiB8IC1pcml4KiBcCi0JICAgICAgfCAtKnZtcyogfCAtc2NvKiB8IC1lc2l4KiB8IC1pc2MqIHwgLWFpeCogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKLQkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLXNvbGFyaXMqIHwgLXN5bSogXAorCSAgICAgIHwgLSp2bXMqIHwgLXNjbyogfCAtZXNpeCogfCAtaXNjKiB8IC1haXgqIHwgLWNuayogfCAtc3Vub3MgfCAtc3Vub3NbMzRdKlwKKwkgICAgICB8IC1ocHV4KiB8IC11bm9zKiB8IC1vc2YqIHwgLWx1bmEqIHwgLWRndXgqIHwgLWF1cm9yYXV4KiB8IC1zb2xhcmlzKiBcCisJICAgICAgfCAtc3ltKiB8IC1rb3BlbnNvbGFyaXMqIFwKIAkgICAgICB8IC1hbWlnYW9zKiB8IC1hbWlnYWRvcyogfCAtbXNkb3MqIHwgLW5ld3NvcyogfCAtdW5pY29zKiB8IC1hb2YqIFwKLQkgICAgICB8IC1hb3MqIFwKKwkgICAgICB8IC1hb3MqIHwgLWFyb3MqIFwKIAkgICAgICB8IC1uaW5keSogfCAtdnhzaW0qIHwgLXZ4d29ya3MqIHwgLWVibW9uKiB8IC1obXMqIHwgLW12cyogXAogCSAgICAgIHwgLWNsaXgqIHwgLXJpc2NvcyogfCAtdW5pcGx1cyogfCAtaXJpcyogfCAtcnR1KiB8IC14ZW5peCogXAogCSAgICAgIHwgLWhpdXgqIHwgLTM4NmJzZCogfCAta25ldGJzZCogfCAtbWlyYnNkKiB8IC1uZXRic2QqIFwKQEAgLTEyNDgsOSArMTMxNCwxMCBAQAogCSAgICAgIHwgLWJvc3gqIHwgLW5leHRzdGVwKiB8IC1jeHV4KiB8IC1hb3V0KiB8IC1lbGYqIHwgLW9hYmkqIFwKIAkgICAgICB8IC1wdHgqIHwgLWNvZmYqIHwgLWVjb2ZmKiB8IC13aW5udCogfCAtZG9tYWluKiB8IC12c3RhKiBcCiAJICAgICAgfCAtdWRpKiB8IC1lYWJpKiB8IC1saXRlcyogfCAtaWVlZSogfCAtZ28zMiogfCAtYXV4KiBcCi0JICAgICAgfCAtY2hvcnVzb3MqIHwgLWNob3J1c3JkYiogXAorCSAgICAgIHwgLWNob3J1c29zKiB8IC1jaG9ydXNyZGIqIHwgLWNlZ2NjKiBcCiAJICAgICAgfCAtY3lnd2luKiB8IC1wZSogfCAtcHNvcyogfCAtbW9zcyogfCAtcHJvZWxmKiB8IC1ydGVtcyogXAotCSAgICAgIHwgLW1pbmd3MzIqIHwgLWxpbnV4LWdudSogfCAtbGludXgtbmV3bGliKiB8IC1saW51eC11Y2xpYmMqIFwKKwkgICAgICB8IC1taW5ndzMyKiB8IC1saW51eC1nbnUqIHwgLWxpbnV4LWFuZHJvaWQqIFwKKwkgICAgICB8IC1saW51eC1uZXdsaWIqIHwgLWxpbnV4LXVjbGliYyogXAogCSAgICAgIHwgLXV4cHYqIHwgLWJlb3MqIHwgLW1wZWl4KiB8IC11ZGsqIFwKIAkgICAgICB8IC1pbnRlcml4KiB8IC11d2luKiB8IC1ta3MqIHwgLXJoYXBzb2R5KiB8IC1kYXJ3aW4qIHwgLW9wZW5lZCogXAogCSAgICAgIHwgLW9wZW5zdGVwKiB8IC1vc2tpdCogfCAtY29uaXgqIHwgLXB3MzIqIHwgLW5vbnN0b3B1eCogXApAQCAtMTI1OCw3ICsxMzI1LDcgQEAKIAkgICAgICB8IC1vczIqIHwgLXZvcyogfCAtcGFsbW9zKiB8IC11Y2xpbnV4KiB8IC1udWNsZXVzKiBcCiAJICAgICAgfCAtbW9ycGhvcyogfCAtc3VwZXJ1eCogfCAtcnRtayogfCAtcnRtay1ub3ZhKiB8IC13aW5kaXNzKiBcCiAJICAgICAgfCAtcG93ZXJtYXgqIHwgLWRuaXgqIHwgLW54NiB8IC1ueDcgfCAtc2VpKiB8IC1kcmFnb25mbHkqIFwKLQkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKikKKwkgICAgICB8IC1za3lvcyogfCAtaGFpa3UqIHwgLXJkb3MqIHwgLXRvcHBlcnMqIHwgLWRyb3BzKiB8IC1lcyopCiAJIyBSZW1lbWJlciwgZWFjaCBhbHRlcm5hdGl2ZSBNVVNUIEVORCBJTiAqLCB0byBtYXRjaCBhIHZlcnNpb24gbnVtYmVyLgogCQk7OwogCS1xbngqKQpAQCAtMTM4OCw2ICsxNDU1LDExIEBACiAJLXp2bW9lKQogCQlvcz0tenZtb2UKIAkJOzsKKwktZGljb3MqKQorCQlvcz0tZGljb3MKKwkJOzsKKyAgICAgICAgLW5hY2wqKQorCSAgICAgICAgOzsKIAktbm9uZSkKIAkJOzsKIAkqKQpAQCAtMTQyOCw2ICsxNTAwLDE1IEBACiAgICAgICAgIGM0eC0qIHwgdGljNHgtKikKICAgICAgICAgCW9zPS1jb2ZmCiAJCTs7CisJdGljNTR4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNTV4LSopCisJCW9zPS1jb2ZmCisJCTs7CisJdGljNngtKikKKwkJb3M9LWNvZmYKKwkJOzsKIAkjIFRoaXMgbXVzdCBjb21lIGJlZm9yZSB0aGUgKi1kZWMgZW50cnkuCiAJcGRwMTAtKikKIAkJb3M9LXRvcHMyMApAQCAtMTU4NSw3ICsxNjY2LDcgQEAKIAkJCS1zdW5vcyopCiAJCQkJdmVuZG9yPXN1bgogCQkJCTs7Ci0JCQktYWl4KikKKwkJCS1jbmsqfC1haXgqKQogCQkJCXZlbmRvcj1pYm0KIAkJCQk7OwogCQkJLWJlb3MqKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IGYwYWRlYWYuLmViYmYxMTIgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTEsODQgKzEsNDM1IEBACiAjISAvYmluL3NoCi0jIEZyb20gY29uZmlndXJlLmluIFJldmlzaW9uLgorIyBGcm9tIGNvbmZpZ3VyZS5hYyBSZXZpc2lvbi4KICMgR3Vlc3MgdmFsdWVzIGZvciBzeXN0ZW0tZGVwZW5kZW50IHZhcmlhYmxlcyBhbmQgY3JlYXRlIE1ha2VmaWxlcy4KLSMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjU5IGZvciBOZXQtU05NUCA1LjQuNC4KKyMgR2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4IGZvciBOZXQtU05NUCA1LjcuMy5yYzEuCiAjCiAjIFJlcG9ydCBidWdzIHRvIDxuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0Pi4KICMKLSMgQ29weXJpZ2h0IChDKSAyMDAzIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIworIyBDb3B5cmlnaHQgKEMpIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsCisjIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZQorIyBGb3VuZGF0aW9uLCBJbmMuCisjCisjCiAjIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiAjIGdpdmVzIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4KLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgTTRzaCBJbml0aWFsaXphdGlvbi4gICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotIyBCZSBCb3VybmUgY29tcGF0aWJsZQotaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIEJlIG1vcmUgQm91cm5lIGNvbXBhdGlibGUKK0RVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKK2lmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06Ci0gICMgWnNoIDMueCBhbmQgNC54IHBlcmZvcm1zIHdvcmQgc3BsaXR0aW5nIG9uICR7MSsiJEAifSwgd2hpY2gKKyAgIyBQcmUtNC4yIHZlcnNpb25zIG9mIFpzaCBkbyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCiAgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCiAgIGFsaWFzIC1nICckezErIiRAIn0nPSciJEAiJwotZWxpZiB0ZXN0IC1uICIke0JBU0hfVkVSU0lPTitzZXR9IiAmJiAoc2V0IC1vIHBvc2l4KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgc2V0IC1vIHBvc2l4Ci1maQotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIFN1cHBvcnQgdW5zZXQgd2hlbiBwb3NzaWJsZS4KLWlmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc191bnNldD11bnNldAorICBzZXRvcHQgTk9fR0xPQl9TVUJTVAogZWxzZQotICBhc191bnNldD1mYWxzZQorICBjYXNlIGAoc2V0IC1vKSAyPi9kZXYvbnVsbGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCiBmaQogCiAKLSMgV29yayBhcm91bmQgYnVncyBpbiBwcmUtMy4wIFVXSU4ga3NoLgotJGFzX3Vuc2V0IEVOViBNQUlMIE1BSUxQQVRICithc19ubD0nCisnCitleHBvcnQgYXNfbmwKKyMgUHJpbnRpbmcgYSBsb25nIHN0cmluZyBjcmFzaGVzIFNvbGFyaXMgNyAvdXNyL2Jpbi9wcmludGYuCithc19lY2hvPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvCithc19lY2hvPSRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworIyBQcmVmZXIgYSBrc2ggc2hlbGwgYnVpbHRpbiBvdmVyIGFuIGV4dGVybmFsIHByaW50ZiBwcm9ncmFtIG9uIFNvbGFyaXMsCisjIGJ1dCB3aXRob3V0IHdhc3RpbmcgZm9ya3MgZm9yIGJhc2ggb3IgenNoLgoraWYgdGVzdCAteiAiJEJBU0hfVkVSU0lPTiRaU0hfVkVSU0lPTiIgXAorICAgICYmICh0ZXN0ICJYYHByaW50IC1yIC0tICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnQgLXIgLS0nCisgIGFzX2VjaG9fbj0ncHJpbnQgLXJuIC0tJworZWxpZiAodGVzdCAiWGBwcmludGYgJXMgJGFzX2VjaG9gIiA9ICJYJGFzX2VjaG8iKSAyPi9kZXYvbnVsbDsgdGhlbgorICBhc19lY2hvPSdwcmludGYgJXNcbicKKyAgYXNfZWNob19uPSdwcmludGYgJXMnCitlbHNlCisgIGlmIHRlc3QgIlhgKC91c3IvdWNiL2VjaG8gLW4gLW4gJGFzX2VjaG8pIDI+L2Rldi9udWxsYCIgPSAiWC1uICRhc19lY2hvIjsgdGhlbgorICAgIGFzX2VjaG9fYm9keT0nZXZhbCAvdXNyL3VjYi9lY2hvIC1uICIkMSRhc19ubCInCisgICAgYXNfZWNob19uPScvdXNyL3VjYi9lY2hvIC1uJworICBlbHNlCisgICAgYXNfZWNob19ib2R5PSdldmFsIGV4cHIgIlgkMSIgOiAiWFxcKC4qXFwpIicKKyAgICBhc19lY2hvX25fYm9keT0nZXZhbAorICAgICAgYXJnPSQxOworICAgICAgY2FzZSAkYXJnIGluICMoCisgICAgICAqIiRhc19ubCIqKQorCWV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkkYXNfbmwiOworCWFyZz1gZXhwciAiWCRhcmciIDogIi4qJGFzX25sXFwoLipcXCkiYDs7CisgICAgICBlc2FjOworICAgICAgZXhwciAiWCRhcmciIDogIlhcXCguKlxcKSIgfCB0ciAtZCAiJGFzX25sIgorICAgICcKKyAgICBleHBvcnQgYXNfZWNob19uX2JvZHkKKyAgICBhc19lY2hvX249J3NoIC1jICRhc19lY2hvX25fYm9keSBhc19lY2hvJworICBmaQorICBleHBvcnQgYXNfZWNob19ib2R5CisgIGFzX2VjaG89J3NoIC1jICRhc19lY2hvX2JvZHkgYXNfZWNobycKK2ZpCisKKyMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgoraWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KKyAgUEFUSF9TRVBBUkFUT1I9OgorICAoUEFUSD0nL2JpbjsvYmluJzsgRlBBVEg9JFBBVEg7IHNoIC1jIDopID4vZGV2L251bGwgMj4mMSAmJiB7CisgICAgKFBBVEg9Jy9iaW46L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgfHwKKyAgICAgIFBBVEhfU0VQQVJBVE9SPSc7JworICB9CitmaQorCisKKyMgSUZTCisjIFdlIG5lZWQgc3BhY2UsIHRhYiBhbmQgbmV3IGxpbmUsIGluIHByZWNpc2VseSB0aGF0IG9yZGVyLiAgUXVvdGluZyBpcworIyB0aGVyZSB0byBwcmV2ZW50IGVkaXRvcnMgZnJvbSBjb21wbGFpbmluZyBhYm91dCBzcGFjZS10YWIuCisjIChJZiBfQVNfUEFUSF9XQUxLIHdlcmUgY2FsbGVkIHdpdGggSUZTIHVuc2V0LCBpdCB3b3VsZCBkaXNhYmxlIHdvcmQKKyMgc3BsaXR0aW5nIGJ5IHNldHRpbmcgSUZTIHRvIGVtcHR5IHZhbHVlLikKK0lGUz0iICIiCSRhc19ubCIKKworIyBGaW5kIHdobyB3ZSBhcmUuICBMb29rIGluIHRoZSBwYXRoIGlmIHdlIGNvbnRhaW4gbm8gZGlyZWN0b3J5IHNlcGFyYXRvci4KK2FzX215c2VsZj0KK2Nhc2UgJDAgaW4gIygoCisgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKKyAgKikgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICAgICA7OworZXNhYworIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJworIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCitpZiB0ZXN0ICJ4JGFzX215c2VsZiIgPSB4OyB0aGVuCisgIGFzX215c2VsZj0kMAorZmkKK2lmIHRlc3QgISAtZiAiJGFzX215c2VsZiI7IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19teXNlbGY6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgZmlsZSBuYW1lIiA+JjIKKyAgZXhpdCAxCitmaQorCisjIFVuc2V0IHZhcmlhYmxlcyB0aGF0IHdlIGRvIG5vdCBuZWVkIGFuZCB3aGljaCBjYXVzZSBidWdzIChlLmcuIGluCisjIHByZS0zLjAgVVdJTiBrc2gpLiAgQnV0IGRvIG5vdCBjYXVzZSBidWdzIGluIGJhc2ggMi4wMTsgdGhlICJ8fCBleGl0IDEiCisjIHN1cHByZXNzZXMgYW55ICJTZWdtZW50YXRpb24gZmF1bHQiIG1lc3NhZ2UgdGhlcmUuICAnKCgnIGNvdWxkCisjIHRyaWdnZXIgYSBidWcgaW4gcGRrc2ggNS4yLjE0LgorZm9yIGFzX3ZhciBpbiBCQVNIX0VOViBFTlYgTUFJTCBNQUlMUEFUSAorZG8gZXZhbCB0ZXN0IHhcJHskYXNfdmFyK3NldH0gPSB4c2V0IFwKKyAgJiYgKCAodW5zZXQgJGFzX3ZhcikgfHwgZXhpdCAxKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgJGFzX3ZhciB8fCA6Citkb25lCiBQUzE9JyQgJwogUFMyPSc+ICcKIFBTND0nKyAnCiAKICMgTkxTIG51aXNhbmNlcy4KLWZvciBhc192YXIgaW4gXAotICBMQU5HIExBTkdVQUdFIExDX0FERFJFU1MgTENfQUxMIExDX0NPTExBVEUgTENfQ1RZUEUgTENfSURFTlRJRklDQVRJT04gXAotICBMQ19NRUFTVVJFTUVOVCBMQ19NRVNTQUdFUyBMQ19NT05FVEFSWSBMQ19OQU1FIExDX05VTUVSSUMgTENfUEFQRVIgXAotICBMQ19URUxFUEhPTkUgTENfVElNRQotZG8KLSAgaWYgKHNldCAreDsgdGVzdCAteiAiYChldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIpIDI+JjFgIik7IHRoZW4KLSAgICBldmFsICRhc192YXI9QzsgZXhwb3J0ICRhc192YXIKLSAgZWxzZQotICAgICRhc191bnNldCAkYXNfdmFyCi0gIGZpCi1kb25lCitMQ19BTEw9QworZXhwb3J0IExDX0FMTAorTEFOR1VBR0U9QworZXhwb3J0IExBTkdVQUdFCiAKLSMgUmVxdWlyZWQgdG8gdXNlIGJhc2VuYW1lLgotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyMgQ0RQQVRILgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitpZiB0ZXN0ICJ4JENPTkZJR19TSEVMTCIgPSB4OyB0aGVuCisgIGFzX2JvdXJuZV9jb21wYXRpYmxlPSJpZiB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwiICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFByZS00LjIgdmVyc2lvbnMgb2YgWnNoIGRvIHdvcmQgc3BsaXR0aW5nIG9uIFwkezErXCJcJEBcIn0sIHdoaWNoCisgICMgaXMgY29udHJhcnkgdG8gb3VyIHVzYWdlLiAgRGlzYWJsZSB0aGlzIGZlYXR1cmUuCisgIGFsaWFzIC1nICdcJHsxK1wiXCRAXCJ9Jz0nXCJcJEBcIicKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2Vsc2UKKyAgY2FzZSBcYChzZXQgLW8pIDI+L2Rldi9udWxsXGAgaW4gIygKKyAgKnBvc2l4KikgOgorICAgIHNldCAtbyBwb3NpeCA7OyAjKAorICAqKSA6CisgICAgIDs7Citlc2FjCitmaQorIgorICBhc19yZXF1aXJlZD0iYXNfZm5fcmV0dXJuICgpIHsgKGV4aXQgXCQxKTsgfQorYXNfZm5fc3VjY2VzcyAoKSB7IGFzX2ZuX3JldHVybiAwOyB9Cithc19mbl9mYWlsdXJlICgpIHsgYXNfZm5fcmV0dXJuIDE7IH0KK2FzX2ZuX3JldF9zdWNjZXNzICgpIHsgcmV0dXJuIDA7IH0KK2FzX2ZuX3JldF9mYWlsdXJlICgpIHsgcmV0dXJuIDE7IH0KKworZXhpdGNvZGU9MAorYXNfZm5fc3VjY2VzcyB8fCB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9mYWlsdXJlICYmIHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9mYWlsdXJlIHN1Y2NlZWRlZC47IH0KK2FzX2ZuX3JldF9zdWNjZXNzIHx8IHsgZXhpdGNvZGU9MTsgZWNobyBhc19mbl9yZXRfc3VjY2VzcyBmYWlsZWQuOyB9Cithc19mbl9yZXRfZmFpbHVyZSAmJiB7IGV4aXRjb2RlPTE7IGVjaG8gYXNfZm5fcmV0X2ZhaWx1cmUgc3VjY2VlZGVkLjsgfQoraWYgKCBzZXQgeDsgYXNfZm5fcmV0X3N1Y2Nlc3MgeSAmJiB0ZXN0IHggPSBcIlwkMVwiICk7IHRoZW4gOgorCitlbHNlCisgIGV4aXRjb2RlPTE7IGVjaG8gcG9zaXRpb25hbCBwYXJhbWV0ZXJzIHdlcmUgbm90IHNhdmVkLgorZmkKK3Rlc3QgeFwkZXhpdGNvZGUgPSB4MCB8fCBleGl0IDEiCisgIGFzX3N1Z2dlc3RlZD0iICBhc19saW5lbm9fMT0iO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkJExJTkVOTzthc19zdWdnZXN0ZWQ9JGFzX3N1Z2dlc3RlZCIgYXNfbGluZW5vXzFhPVwkTElORU5PCisgIGFzX2xpbmVub18yPSI7YXNfc3VnZ2VzdGVkPSRhc19zdWdnZXN0ZWQkTElORU5PO2FzX3N1Z2dlc3RlZD0kYXNfc3VnZ2VzdGVkIiBhc19saW5lbm9fMmE9XCRMSU5FTk8KKyAgZXZhbCAndGVzdCBcInhcJGFzX2xpbmVub18xJ1wkYXNfcnVuJ1wiICE9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCIgJiYKKyAgdGVzdCBcInhcYGV4cHIgXCRhc19saW5lbm9fMSdcJGFzX3J1bicgKyAxXGBcIiA9IFwieFwkYXNfbGluZW5vXzInXCRhc19ydW4nXCInIHx8IGV4aXQgMQordGVzdCBcJCgoIDEgKyAxICkpID0gMiB8fCBleGl0IDEKKworICB0ZXN0IC1uIFwiXCR7WlNIX1ZFUlNJT04rc2V0fVwke0JBU0hfVkVSU0lPTitzZXR9XCIgfHwgKAorICAgIEVDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworICAgIEVDSE89XCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPXCRFQ0hPCisgICAgRUNITz1cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE9cJEVDSE8KKyAgICBQQVRIPS9lbXB0eSBGUEFUSD0vZW1wdHk7IGV4cG9ydCBQQVRIIEZQQVRICisgICAgdGVzdCBcIlhcYHByaW50ZiAlcyBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgXFwKKyAgICAgIHx8IHRlc3QgXCJYXGBwcmludCAtciAtLSBcJEVDSE9cYFwiID0gXCJYXCRFQ0hPXCIgKSB8fCBleGl0IDEiCisgIGlmIChldmFsICIkYXNfcmVxdWlyZWQiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGFzX2hhdmVfcmVxdWlyZWQ9eWVzCitlbHNlCisgIGFzX2hhdmVfcmVxdWlyZWQ9bm8KK2ZpCisgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geHllcyAmJiAoZXZhbCAiJGFzX3N1Z2dlc3RlZCIpIDI+L2Rldi9udWxsOyB0aGVuIDoKKworZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCithc19mb3VuZD1mYWxzZQorZm9yIGFzX2RpciBpbiAvYmluJFBBVEhfU0VQQVJBVE9SL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICBhc19mb3VuZD06CisgIGNhc2UgJGFzX2RpciBpbiAjKAorCSAvKikKKwkgICBmb3IgYXNfYmFzZSBpbiBzaCBiYXNoIGtzaCBzaDU7IGRvCisJICAgICAjIFRyeSBvbmx5IHNoZWxscyB0aGF0IGV4aXN0LCB0byBzYXZlIHNldmVyYWwgZm9ya3MuCisJICAgICBhc19zaGVsbD0kYXNfZGlyLyRhc19iYXNlCisJICAgICBpZiB7IHRlc3QgLWYgIiRhc19zaGVsbCIgfHwgdGVzdCAtZiAiJGFzX3NoZWxsLmV4ZSI7IH0gJiYKKwkJICAgIHsgJGFzX2VjaG8gIiRhc19ib3VybmVfY29tcGF0aWJsZSIiJGFzX3JlcXVpcmVkIiB8IGFzX3J1bj1hICIkYXNfc2hlbGwiOyB9IDI+L2Rldi9udWxsOyB0aGVuIDoKKyAgQ09ORklHX1NIRUxMPSRhc19zaGVsbCBhc19oYXZlX3JlcXVpcmVkPXllcworCQkgICBpZiB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19zdWdnZXN0ZWQiIHwgYXNfcnVuPWEgIiRhc19zaGVsbCI7IH0gMj4vZGV2L251bGw7IHRoZW4gOgorICBicmVhayAyCitmaQorZmkKKwkgICBkb25lOzsKKyAgICAgICBlc2FjCisgIGFzX2ZvdW5kPWZhbHNlCitkb25lCiskYXNfZm91bmQgfHwgeyBpZiB7IHRlc3QgLWYgIiRTSEVMTCIgfHwgdGVzdCAtZiAiJFNIRUxMLmV4ZSI7IH0gJiYKKwkgICAgICB7ICRhc19lY2hvICIkYXNfYm91cm5lX2NvbXBhdGlibGUiIiRhc19yZXF1aXJlZCIgfCBhc19ydW49YSAiJFNIRUxMIjsgfSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIENPTkZJR19TSEVMTD0kU0hFTEwgYXNfaGF2ZV9yZXF1aXJlZD15ZXMKK2ZpOyB9CitJRlM9JGFzX3NhdmVfSUZTCisKKworICAgICAgaWYgdGVzdCAieCRDT05GSUdfU0hFTEwiICE9IHg7IHRoZW4gOgorICAjIFdlIGNhbm5vdCB5ZXQgYXNzdW1lIGEgZGVjZW50IHNoZWxsLCBzbyB3ZSBoYXZlIHRvIHByb3ZpZGUgYQorCSMgbmV1dHJhbGl6YXRpb24gdmFsdWUgZm9yIHNoZWxscyB3aXRob3V0IHVuc2V0OyBhbmQgdGhpcyBhbHNvCisJIyB3b3JrcyBhcm91bmQgc2hlbGxzIHRoYXQgY2Fubm90IHVuc2V0IG5vbmV4aXN0ZW50IHZhcmlhYmxlcy4KKwkjIFByZXNlcnZlIC12IGFuZCAteCB0byB0aGUgcmVwbGFjZW1lbnQgc2hlbGwuCisJQkFTSF9FTlY9L2Rldi9udWxsCisJRU5WPS9kZXYvbnVsbAorCSh1bnNldCBCQVNIX0VOVikgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IEJBU0hfRU5WIEVOVgorCWV4cG9ydCBDT05GSUdfU0hFTEwKKwljYXNlICQtIGluICMgKCgoKAorCSAgKnYqeCogfCAqeCp2KiApIGFzX29wdHM9LXZ4IDs7CisJICAqdiogKSBhc19vcHRzPS12IDs7CisJICAqeCogKSBhc19vcHRzPS14IDs7CisJICAqICkgYXNfb3B0cz0gOzsKKwllc2FjCisJZXhlYyAiJENPTkZJR19TSEVMTCIgJGFzX29wdHMgIiRhc19teXNlbGYiICR7MSsiJEAifQorZmkKKworICAgIGlmIHRlc3QgeCRhc19oYXZlX3JlcXVpcmVkID0geG5vOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiQwOiBUaGlzIHNjcmlwdCByZXF1aXJlcyBhIHNoZWxsIG1vcmUgbW9kZXJuIHRoYW4gYWxsIgorICAkYXNfZWNobyAiJDA6IHRoZSBzaGVsbHMgdGhhdCBJIGZvdW5kIG9uIHlvdXIgc3lzdGVtLiIKKyAgaWYgdGVzdCB4JHtaU0hfVkVSU0lPTitzZXR9ID0geHNldCA7IHRoZW4KKyAgICAkYXNfZWNobyAiJDA6IEluIHBhcnRpY3VsYXIsIHpzaCAkWlNIX1ZFUlNJT04gaGFzIGJ1Z3MgYW5kIHNob3VsZCIKKyAgICAkYXNfZWNobyAiJDA6IGJlIHVwZ3JhZGVkIHRvIHpzaCA0LjMuNCBvciBsYXRlci4iCisgIGVsc2UKKyAgICAkYXNfZWNobyAiJDA6IFBsZWFzZSB0ZWxsIGJ1Zy1hdXRvY29uZkBnbnUub3JnIGFuZAorJDA6IG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgYWJvdXQgeW91cgorJDA6IHN5c3RlbSwgaW5jbHVkaW5nIGFueSBlcnJvciBwb3NzaWJseSBvdXRwdXQgYmVmb3JlIHRoaXMKKyQwOiBtZXNzYWdlLiBUaGVuIGluc3RhbGwgYSBtb2Rlcm4gc2hlbGwsIG9yIG1hbnVhbGx5IHJ1bgorJDA6IHRoZSBzY3JpcHQgdW5kZXIgc3VjaCBhIHNoZWxsIGlmIHlvdSBkbyBoYXZlIG9uZS4iCisgIGZpCisgIGV4aXQgMQorZmkKK2ZpCitmaQorU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH0KK2V4cG9ydCBTSEVMTAorIyBVbnNldCBtb3JlIHZhcmlhYmxlcyBrbm93biB0byBpbnRlcmZlcmUgd2l0aCBiZWhhdmlvciBvZiBjb21tb24gdG9vbHMuCitDTElDT0xPUl9GT1JDRT0gR1JFUF9PUFRJT05TPQordW5zZXQgQ0xJQ09MT1JfRk9SQ0UgR1JFUF9PUFRJT05TCisKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTTRzaCBTaGVsbCBGdW5jdGlvbnMuICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMgYXNfZm5fdW5zZXQgVkFSCisjIC0tLS0tLS0tLS0tLS0tLQorIyBQb3J0YWJseSB1bnNldCBWQVIuCithc19mbl91bnNldCAoKQoreworICB7IGV2YWwgJDE9OyB1bnNldCAkMTt9Cit9Cithc191bnNldD1hc19mbl91bnNldAorCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl9ta2Rpcl9wCisjIC0tLS0tLS0tLS0tLS0KKyMgQ3JlYXRlICIkYXNfZGlyIiBhcyBhIGRpcmVjdG9yeSwgaW5jbHVkaW5nIHBhcmVudHMgaWYgbmVjZXNzYXJ5LgorYXNfZm5fbWtkaXJfcCAoKQoreworCisgIGNhc2UgJGFzX2RpciBpbiAjKAorICAtKikgYXNfZGlyPS4vJGFzX2Rpcjs7CisgIGVzYWMKKyAgdGVzdCAtZCAiJGFzX2RpciIgfHwgZXZhbCAkYXNfbWtkaXJfcCB8fCB7CisgICAgYXNfZGlycz0KKyAgICB3aGlsZSA6OyBkbworICAgICAgY2FzZSAkYXNfZGlyIGluICMoCisgICAgICAqXCcqKSBhc19xZGlyPWAkYXNfZWNobyAiJGFzX2RpciIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyAjJygKKyAgICAgICopIGFzX3FkaXI9JGFzX2Rpcjs7CisgICAgICBlc2FjCisgICAgICBhc19kaXJzPSInJGFzX3FkaXInICRhc19kaXJzIgorICAgICAgYXNfZGlyPWAkYXNfZGlybmFtZSAtLSAiJGFzX2RpciIgfHwKKyRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYIiRhc19kaXIiIHwKKyAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXClbXi9dLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwoXC9cKS4qL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIHMvLiovLi87IHEnYAorICAgICAgdGVzdCAtZCAiJGFzX2RpciIgJiYgYnJlYWsKKyAgICBkb25lCisgICAgdGVzdCAteiAiJGFzX2RpcnMiIHx8IGV2YWwgIm1rZGlyICRhc19kaXJzIgorICB9IHx8IHRlc3QgLWQgIiRhc19kaXIiIHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSAkYXNfZGlyIgorCisKK30gIyBhc19mbl9ta2Rpcl9wCisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworIyBhc19mbl9lcnJvciBTVEFUVVMgRVJST1IgW0xJTkVOTyBMT0dfRkRdCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgT3V0cHV0ICJgYmFzZW5hbWUgJDBgOiBlcnJvcjogRVJST1IiIHRvIHN0ZGVyci4gSWYgTElORU5PIGFuZCBMT0dfRkQgYXJlCisjIHByb3ZpZGVkLCBhbHNvIG91dHB1dCB0aGUgZXJyb3IgdG8gTE9HX0ZELCByZWZlcmVuY2luZyBMSU5FTk8uIFRoZW4gZXhpdCB0aGUKKyMgc2NyaXB0IHdpdGggU1RBVFVTLCB1c2luZyAxIGlmIHRoYXQgd2FzIDAuCithc19mbl9lcnJvciAoKQoreworICBhc19zdGF0dXM9JDE7IHRlc3QgJGFzX3N0YXR1cyAtZXEgMCAmJiBhc19zdGF0dXM9MQorICBpZiB0ZXN0ICIkNCI7IHRoZW4KKyAgICBhc19saW5lbm89JHthc19saW5lbm8tIiQzIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6ICQyIiA+JiQ0CisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiAkMiIgPiYyCisgIGFzX2ZuX2V4aXQgJGFzX3N0YXR1cworfSAjIGFzX2ZuX2Vycm9yCisKK2lmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxICYmCisgICB0ZXN0ICJYYGV4cHIgMDAwMDEgOiAnLipcKC4uLlwpJ2AiID0gWDAwMTsgdGhlbgogICBhc19leHByPWV4cHIKIGVsc2UKICAgYXNfZXhwcj1mYWxzZQogZmkKIAotaWYgKGJhc2VuYW1lIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC8gMj4mMWAiID0gIlgvIjsgdGhlbgoraWYgKGJhc2VuYW1lIC0tIC8pID4vZGV2L251bGwgMj4mMSAmJiB0ZXN0ICJYYGJhc2VuYW1lIC0tIC8gMj4mMWAiID0gIlgvIjsgdGhlbgogICBhc19iYXNlbmFtZT1iYXNlbmFtZQogZWxzZQogICBhc19iYXNlbmFtZT1mYWxzZQogZmkKIAoraWYgKGFzX2Rpcj1gZGlybmFtZSAtLSAvYCAmJiB0ZXN0ICJYJGFzX2RpciIgPSBYLykgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgIGFzX2Rpcm5hbWU9ZGlybmFtZQorZWxzZQorICBhc19kaXJuYW1lPWZhbHNlCitmaQogCi0jIE5hbWUgb2YgdGhlIGV4ZWN1dGFibGUuCi1hc19tZT1gJGFzX2Jhc2VuYW1lICIkMCIgfHwKK2FzX21lPWAkYXNfYmFzZW5hbWUgLS0gIiQwIiB8fAogJGFzX2V4cHIgWC8iJDAiIDogJy4qL1woW14vXVteL10qXCkvKiQnIFx8IFwKIAkgWCIkMCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkMCIgOiAnWFwoL1wpJCcgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWC8iJDAiIHwKLSAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwvXChcL1wpLioveyBzLy9cMS87IHE7IH0KLSAgCSAgcy8uKi8uLzsgcSdgCisJIFgiJDAiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWC8iJDAiIHwKKyAgICBzZWQgJy9eLipcL1woW14vXVteL10qXClcLyokL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wvXCkkL3sKKwkgICAgcy8vXDEvCisJICAgIHEKKwkgIH0KKwkgIC9eWFwvXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAKLQotIyBQQVRIIG5lZWRzIENSLCBhbmQgTElORU5PIG5lZWRzIENSIGFuZCBQQVRILgogIyBBdm9pZCBkZXBlbmRpbmcgdXBvbiBDaGFyYWN0ZXIgUmFuZ2VzLgogYXNfY3JfbGV0dGVycz0nYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonCiBhc19jcl9MRVRURVJTPSdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicKQEAgLTg2LDE0NiArNDM3LDEwNyBAQAogYXNfY3JfZGlnaXRzPScwMTIzNDU2Nzg5JwogYXNfY3JfYWxudW09JGFzX2NyX0xldHRlcnMkYXNfY3JfZGlnaXRzCiAKLSMgVGhlIHVzZXIgaXMgYWx3YXlzIHJpZ2h0LgotaWYgdGVzdCAiJHtQQVRIX1NFUEFSQVRPUitzZXR9IiAhPSBzZXQ7IHRoZW4KLSAgZWNobyAiIyEgL2Jpbi9zaCIgPmNvbmYkJC5zaAotICBlY2hvICAiZXhpdCAwIiAgID4+Y29uZiQkLnNoCi0gIGNobW9kICt4IGNvbmYkJC5zaAotICBpZiAoUEFUSD0iL25vbmV4aXN0ZW50Oy4iOyBjb25mJCQuc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIFBBVEhfU0VQQVJBVE9SPSc7JwotICBlbHNlCi0gICAgUEFUSF9TRVBBUkFUT1I9OgotICBmaQotICBybSAtZiBjb25mJCQuc2gKLWZpCiAKLQotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICB8fCB7Ci0gICMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIHBhdGggYXQgYWxsCi0gICMgcmVsYXRpdmUgb3Igbm90LgotICBjYXNlICQwIGluCi0gICAgKltcXC9dKiApIGFzX215c2VsZj0kMCA7OwotICAgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgdGVzdCAtciAiJGFzX2Rpci8kMCIgJiYgYXNfbXlzZWxmPSRhc19kaXIvJDAgJiYgYnJlYWsKLWRvbmUKLQotICAgICAgIDs7Ci0gIGVzYWMKLSAgIyBXZSBkaWQgbm90IGZpbmQgb3Vyc2VsdmVzLCBtb3N0IHByb2JhYmx5IHdlIHdlcmUgcnVuIGFzIGBzaCBDT01NQU5EJwotICAjIGluIHdoaWNoIGNhc2Ugd2UgYXJlIG5vdCB0byBiZSBmb3VuZCBpbiB0aGUgcGF0aC4KLSAgaWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgotICAgIGFzX215c2VsZj0kMAotICBmaQotICBpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBteXNlbGY7IHJlcnVuIHdpdGggYW4gYWJzb2x1dGUgcGF0aCIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKLSAgY2FzZSAkQ09ORklHX1NIRUxMIGluCi0gICcnKQotICAgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gL2JpbiRQQVRIX1NFUEFSQVRPUi91c3IvYmluJFBBVEhfU0VQQVJBVE9SJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFzX2Jhc2UgaW4gc2ggYmFzaCBrc2ggc2g1OyBkbwotCSBjYXNlICRhc19kaXIgaW4KLQkgLyopCi0JICAgaWYgKCIkYXNfZGlyLyRhc19iYXNlIiAtYyAnCi0gIGFzX2xpbmVub18xPSRMSU5FTk8KLSAgYXNfbGluZW5vXzI9JExJTkVOTwotICBhc19saW5lbm9fMz1gKGV4cHIgJGFzX2xpbmVub18xICsgMSkgMj4vZGV2L251bGxgCi0gIHRlc3QgIngkYXNfbGluZW5vXzEiICE9ICJ4JGFzX2xpbmVub18yIiAmJgotICB0ZXN0ICJ4JGFzX2xpbmVub18zIiAgPSAieCRhc19saW5lbm9fMiIgJykgMj4vZGV2L251bGw7IHRoZW4KLQkgICAgICRhc191bnNldCBCQVNIX0VOViB8fCB0ZXN0ICIke0JBU0hfRU5WK3NldH0iICE9IHNldCB8fCB7IEJBU0hfRU5WPTsgZXhwb3J0IEJBU0hfRU5WOyB9Ci0JICAgICAkYXNfdW5zZXQgRU5WIHx8IHRlc3QgIiR7RU5WK3NldH0iICE9IHNldCB8fCB7IEVOVj07IGV4cG9ydCBFTlY7IH0KLQkgICAgIENPTkZJR19TSEVMTD0kYXNfZGlyLyRhc19iYXNlCi0JICAgICBleHBvcnQgQ09ORklHX1NIRUxMCi0JICAgICBleGVjICIkQ09ORklHX1NIRUxMIiAiJDAiICR7MSsiJEAifQotCSAgIGZpOzsKLQkgZXNhYwotICAgICAgIGRvbmUKLWRvbmUKLTs7Ci0gIGVzYWMKLQotICAjIENyZWF0ZSAkYXNfbWUubGluZW5vIGFzIGEgY29weSBvZiAkYXNfbXlzZWxmLCBidXQgd2l0aCAkTElORU5PCi0gICMgdW5pZm9ybWx5IHJlcGxhY2VkIGJ5IHRoZSBsaW5lIG51bWJlci4gIFRoZSBmaXJzdCAnc2VkJyBpbnNlcnRzIGEKLSAgIyBsaW5lLW51bWJlciBsaW5lIGJlZm9yZSBlYWNoIGxpbmU7IHRoZSBzZWNvbmQgJ3NlZCcgZG9lcyB0aGUgcmVhbAotICAjIHdvcmsuICBUaGUgc2Vjb25kIHNjcmlwdCB1c2VzICdOJyB0byBwYWlyIGVhY2ggbGluZS1udW1iZXIgbGluZQotICAjIHdpdGggdGhlIG51bWJlcmVkIGxpbmUsIGFuZCBhcHBlbmRzIHRyYWlsaW5nICctJyBkdXJpbmcKLSAgIyBzdWJzdGl0dXRpb24gc28gdGhhdCAkTElORU5PIGlzIG5vdCBhIHNwZWNpYWwgY2FzZSBhdCBsaW5lIGVuZC4KLSAgIyAoUmFqYSBSIEhhcmluYXRoIHN1Z2dlc3RlZCBzZWQgJz0nLCBhbmQgUGF1bCBFZ2dlcnQgd3JvdGUgdGhlCi0gICMgc2Vjb25kICdzZWQnIHNjcmlwdC4gIEJsYW1lIExlZSBFLiBNY01haG9uIGZvciBzZWQncyBzeW50YXguICA6LSkKLSAgc2VkICc9JyA8JGFzX215c2VsZiB8CisgIGFzX2xpbmVub18xPSRMSU5FTk8gYXNfbGluZW5vXzFhPSRMSU5FTk8KKyAgYXNfbGluZW5vXzI9JExJTkVOTyBhc19saW5lbm9fMmE9JExJTkVOTworICBldmFsICd0ZXN0ICJ4JGFzX2xpbmVub18xJyRhc19ydW4nIiAhPSAieCRhc19saW5lbm9fMickYXNfcnVuJyIgJiYKKyAgdGVzdCAieGBleHByICRhc19saW5lbm9fMSckYXNfcnVuJyArIDFgIiA9ICJ4JGFzX2xpbmVub18yJyRhc19ydW4nIicgfHwgeworICAjIEJsYW1lIExlZSBFLiBNY01haG9uICgxOTMxLTE5ODkpIGZvciBzZWQncyBzeW50YXguICA6LSkKKyAgc2VkIC1uICcKKyAgICBwCisgICAgL1skXUxJTkVOTy89CisgICcgPCRhc19teXNlbGYgfAogICAgIHNlZCAnCisgICAgICBzL1skXUxJTkVOTy4qLyYtLworICAgICAgdCBsaW5lbm8KKyAgICAgIGIKKyAgICAgIDpsaW5lbm8KICAgICAgIE4KLSAgICAgIHMsJCwtLAotICAgICAgOiBsb29wCi0gICAgICBzLF5cKFsnJGFzX2NyX2RpZ2l0cyddKlwpXCguKlwpWyRdTElORU5PXChbXickYXNfY3JfYWxudW0nX11cKSxcMVwyXDFcMywKKyAgICAgIDpsb29wCisgICAgICBzL1skXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dLipcblwpXCguKlwpL1wyXDFcMi8KICAgICAgIHQgbG9vcAotICAgICAgcywtJCwsCi0gICAgICBzLF5bJyRhc19jcl9kaWdpdHMnXSpcbiwsCisgICAgICBzLy1cbi4qLy8KICAgICAnID4kYXNfbWUubGluZW5vICYmCi0gIGNobW9kICt4ICRhc19tZS5saW5lbm8gfHwKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBjaG1vZCAreCAiJGFzX21lLmxpbmVubyIgfHwKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlICRhc19tZS5saW5lbm87IHJlcnVuIHdpdGggYSBQT1NJWCBzaGVsbCIgPiYyOyBhc19mbl9leGl0IDE7IH0KIAogICAjIERvbid0IHRyeSB0byBleGVjIGFzIGl0IGNoYW5nZXMgJFswXSwgY2F1c2luZyBhbGwgc29ydCBvZiBwcm9ibGVtcwogICAjICh0aGUgZGlybmFtZSBvZiAkWzBdIGlzIG5vdCB0aGUgcGxhY2Ugd2hlcmUgd2UgbWlnaHQgZmluZCB0aGUKLSAgIyBvcmlnaW5hbCBhbmQgc28gb24uICBBdXRvY29uZiBpcyBlc3BlY2lhbGx5IHNlbnNpYmxlIHRvIHRoaXMpLgotICAuIC4vJGFzX21lLmxpbmVubworICAjIG9yaWdpbmFsIGFuZCBzbyBvbi4gIEF1dG9jb25mIGlzIGVzcGVjaWFsbHkgc2Vuc2l0aXZlIHRvIHRoaXMpLgorICAuICIuLyRhc19tZS5saW5lbm8iCiAgICMgRXhpdCBzdGF0dXMgaXMgdGhhdCBvZiB0aGUgbGFzdCBjb21tYW5kLgogICBleGl0CiB9CiAKLQotY2FzZSBgZWNobyAidGVzdGluZ1xjIjsgZWNobyAxLDIsM2AsYGVjaG8gLW4gdGVzdGluZzsgZWNobyAxLDIsM2AgaW4KLSAgKmMqLC1uKikgRUNIT19OPSBFQ0hPX0M9JwotJyBFQ0hPX1Q9JwknIDs7Ci0gICpjKiwqICApIEVDSE9fTj0tbiBFQ0hPX0M9IEVDSE9fVD0gOzsKLSAgKikgICAgICAgRUNIT19OPSBFQ0hPX0M9J1xjJyBFQ0hPX1Q9IDs7CitFQ0hPX0M9IEVDSE9fTj0gRUNIT19UPQorY2FzZSBgZWNobyAtbiB4YCBpbiAjKCgoKCgKKy1uKikKKyAgY2FzZSBgZWNobyAneHlcYydgIGluCisgICpjKikgRUNIT19UPScJJzs7CSMgRUNIT19UIGlzIHNpbmdsZSB0YWIgY2hhcmFjdGVyLgorICB4eSkgIEVDSE9fQz0nXGMnOzsKKyAgKikgICBlY2hvIGBlY2hvIGtzaDg4IGJ1ZyBvbiBBSVggNi4xYCA+IC9kZXYvbnVsbAorICAgICAgIEVDSE9fVD0nCSc7OworICBlc2FjOzsKKyopCisgIEVDSE9fTj0nLW4nOzsKIGVzYWMKIAotaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfZXhwcj1leHByCi1lbHNlCi0gIGFzX2V4cHI9ZmFsc2UKLWZpCi0KIHJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCi1lY2hvID5jb25mJCQuZmlsZQotaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gICMgV2UgY291bGQganVzdCBjaGVjayBmb3IgREpHUFA7IGJ1dCB0aGlzIHRlc3QgYSkgd29ya3MgYikgaXMgbW9yZSBnZW5lcmljCi0gICMgYW5kIGMpIHdpbGwgcmVtYWluIHZhbGlkIG9uY2UgREpHUFAgc3VwcG9ydHMgc3ltbGlua3MgKERKR1BQIDIuMDQpLgotICBpZiB0ZXN0IC1mIGNvbmYkJC5leGU7IHRoZW4KLSAgICAjIERvbid0IHVzZSBsbiBhdCBhbGw7IHdlIGRvbid0IGhhdmUgYW55IGxpbmtzCi0gICAgYXNfbG5fcz0nY3AgLXAnCi0gIGVsc2UKK2lmIHRlc3QgLWQgY29uZiQkLmRpcjsgdGhlbgorICBybSAtZiBjb25mJCQuZGlyL2NvbmYkJC5maWxlCitlbHNlCisgIHJtIC1mIGNvbmYkJC5kaXIKKyAgbWtkaXIgY29uZiQkLmRpciAyPi9kZXYvbnVsbAorZmkKK2lmIChlY2hvID5jb25mJCQuZmlsZSkgMj4vZGV2L251bGw7IHRoZW4KKyAgaWYgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCiAgICAgYXNfbG5fcz0nbG4gLXMnCisgICAgIyAuLi4gYnV0IHRoZXJlIGFyZSB0d28gZ290Y2hhczoKKyAgICAjIDEpIE9uIE1TWVMsIGJvdGggYGxuIC1zIGZpbGUgZGlyJyBhbmQgYGxuIGZpbGUgZGlyJyBmYWlsLgorICAgICMgMikgREpHUFAgPCAyLjA0IGhhcyBubyBzeW1saW5rczsgYGxuIC1zJyBjcmVhdGVzIGEgd3JhcHBlciBleGVjdXRhYmxlLgorICAgICMgSW4gYm90aCBjYXNlcywgd2UgaGF2ZSB0byBkZWZhdWx0IHRvIGBjcCAtcCcuCisgICAgbG4gLXMgY29uZiQkLmZpbGUgY29uZiQkLmRpciAyPi9kZXYvbnVsbCAmJiB0ZXN0ICEgLWYgY29uZiQkLmV4ZSB8fAorICAgICAgYXNfbG5fcz0nY3AgLXAnCisgIGVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCisgICAgYXNfbG5fcz1sbgorICBlbHNlCisgICAgYXNfbG5fcz0nY3AgLXAnCiAgIGZpCi1lbGlmIGxuIGNvbmYkJC5maWxlIGNvbmYkJCAyPi9kZXYvbnVsbDsgdGhlbgotICBhc19sbl9zPWxuCiBlbHNlCiAgIGFzX2xuX3M9J2NwIC1wJwogZmkKLXJtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5maWxlCitybSAtZiBjb25mJCQgY29uZiQkLmV4ZSBjb25mJCQuZGlyL2NvbmYkJC5maWxlIGNvbmYkJC5maWxlCitybWRpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCiAKIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06CisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKIGVsc2UKICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICAgYXNfbWtkaXJfcD1mYWxzZQogZmkKIAotYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgoraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCkBAIC0yMzMsMjQ1ICs1NDUsNTE3IEBACiAjIFNlZCBleHByZXNzaW9uIHRvIG1hcCBhIHN0cmluZyBvbnRvIGEgdmFsaWQgdmFyaWFibGUgbmFtZS4KIGFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCiAKLQotIyBJRlMKLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCi1hc19ubD0nCi0nCi1JRlM9IiAJJGFzX25sIgotCi0jIENEUEFUSC4KLSRhc191bnNldCBDRFBBVEgKLQotCi0KLSMgQ2hlY2sgdGhhdCB3ZSBhcmUgcnVubmluZyB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KIFNIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9CiAKLWNhc2UgWCRFQ0hPIGluCi1YKi0tZmFsbGJhY2stZWNobykKLSAgIyBSZW1vdmUgb25lIGxldmVsIG9mIHF1b3RhdGlvbiAod2hpY2ggd2FzIHJlcXVpcmVkIGZvciBNYWtlKS4KLSAgRUNITz1gZWNobyAiJEVDSE8iIHwgc2VkICdzLFxcXFxcJFxcJDAsJyQwJywnYAotICA7OwotZXNhYwogCi1lY2hvPSR7RUNITy1lY2hvfQotaWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgotICA6Ci1lbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyA7IHRoZW4KLSAgIyBZaXBwZWUsICRlY2hvIHdvcmtzIQotICA6Ci1lbHNlCi0gICMgUmVzdGFydCB1bmRlciB0aGUgY29ycmVjdCBzaGVsbC4KLSAgZXhlYyAkU0hFTEwgIiQwIiAtLW5vLXJlZXhlYyAkezErIiRAIn0KLWZpCi0KLWlmIHRlc3QgIlgkMSIgPSBYLS1mYWxsYmFjay1lY2hvOyB0aGVuCi0gICMgdXNlZCBhcyBmYWxsYmFjayBlY2hvCi0gIHNoaWZ0Ci0gIGNhdCA8PEVPRgotJCoKLUVPRgotICBleGl0IDAKLWZpCi0KLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICi0KLWlmIHRlc3QgLXogIiRFQ0hPIjsgdGhlbgotaWYgdGVzdCAiWCR7ZWNob190ZXN0X3N0cmluZytzZXR9IiAhPSBYc2V0OyB0aGVuCi0jIGZpbmQgYSBzdHJpbmcgYXMgbGFyZ2UgYXMgcG9zc2libGUsIGFzIGxvbmcgYXMgdGhlIHNoZWxsIGNhbiBjb3BlIHdpdGggaXQKLSAgZm9yIGNtZCBpbiAnc2VkIDUwcSAiJDAiJyAnc2VkIDIwcSAiJDAiJyAnc2VkIDEwcSAiJDAiJyAnc2VkIDJxICIkMCInICdlY2hvIHRlc3QnOyBkbwotICAgICMgZXhwZWN0ZWQgc2l6ZXM6IGxlc3MgdGhhbiAya0IsIDFrQiwgNTEyIGJ5dGVzLCAxNiBieXRlcywgLi4uCi0gICAgaWYgKGVjaG9fdGVzdF9zdHJpbmc9YGV2YWwgJGNtZGApIDI+L2Rldi9udWxsICYmCi0gICAgICAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkY21kYCAmJgotICAgICAgICh0ZXN0ICJYJGVjaG9fdGVzdF9zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgYnJlYWsKLSAgICBmaQotICBkb25lCi1maQotCi1pZiB0ZXN0ICJYYCgkZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAiID0gJ1hcdCcgJiYKLSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICA6Ci1lbHNlCi0gICMgVGhlIFNvbGFyaXMsIEFJWCwgYW5kIERpZ2l0YWwgVW5peCBkZWZhdWx0IGVjaG8gcHJvZ3JhbXMgdW5xdW90ZQotICAjIGJhY2tzbGFzaGVzLiAgVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIHF1b3RlIGJhY2tzbGFzaGVzIHVzaW5nCi0gICMgICBlY2hvICIkc29tZXRoaW5nIiB8IHNlZCAncy9cXC9cXFxcL2cnCi0gICMKLSAgIyBTbywgZmlyc3Qgd2UgbG9vayBmb3IgYSB3b3JraW5nIGVjaG8gaW4gdGhlIHVzZXIncyBQQVRILgotCi0gIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgotICBmb3IgZGlyIGluICRQQVRIIC91c3IvdWNiOyBkbwotICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgIGlmICh0ZXN0IC1mICRkaXIvZWNobyB8fCB0ZXN0IC1mICRkaXIvZWNobyRhY19leGVleHQpICYmCi0gICAgICAgdGVzdCAiWGAoJGRpci9lY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JyAmJgotICAgICAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZGlyL2VjaG8gIiRlY2hvX3Rlc3Rfc3RyaW5nIikgMj4vZGV2L251bGxgICYmCi0gICAgICAgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0gICAgICBlY2hvPSIkZGlyL2VjaG8iCi0gICAgICBicmVhawotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgaWYgdGVzdCAiWCRlY2hvIiA9IFhlY2hvOyB0aGVuCi0gICAgIyBXZSBkaWRuJ3QgZmluZCBhIGJldHRlciBlY2hvLCBzbyBsb29rIGZvciBhbHRlcm5hdGl2ZXMuCi0gICAgaWYgdGVzdCAiWGAocHJpbnQgLXIgJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0gICAgICAgZWNob190ZXN0aW5nX3N0cmluZz1gKHByaW50IC1yICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotICAgICAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotICAgICAgIyBUaGlzIHNoZWxsIGhhcyBhIGJ1aWx0aW4gcHJpbnQgLXIgdGhhdCBkb2VzIHRoZSB0cmljay4KLSAgICAgIGVjaG89J3ByaW50IC1yJwotICAgIGVsaWYgKHRlc3QgLWYgL2Jpbi9rc2ggfHwgdGVzdCAtZiAvYmluL2tzaCRhY19leGVleHQpICYmCi0JIHRlc3QgIlgkQ09ORklHX1NIRUxMIiAhPSBYL2Jpbi9rc2g7IHRoZW4KLSAgICAgICMgSWYgd2UgaGF2ZSBrc2gsIHRyeSBydW5uaW5nIGNvbmZpZ3VyZSBhZ2FpbiB3aXRoIGl0LgotICAgICAgT1JJR0lOQUxfQ09ORklHX1NIRUxMPSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9Ci0gICAgICBleHBvcnQgT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0gICAgICBDT05GSUdfU0hFTEw9L2Jpbi9rc2gKLSAgICAgIGV4cG9ydCBDT05GSUdfU0hFTEwKLSAgICAgIGV4ZWMgJENPTkZJR19TSEVMTCAiJDAiIC0tbm8tcmVleGVjICR7MSsiJEAifQotICAgIGVsc2UKLSAgICAgICMgVHJ5IHVzaW5nIHByaW50Zi4KLSAgICAgIGVjaG89J3ByaW50ZiAlc1xuJwotICAgICAgaWYgdGVzdCAiWGAoJGVjaG8gJ1x0JykgMj4vZGV2L251bGxgIiA9ICdYXHQnICYmCi0JIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgdGVzdCAiWCRlY2hvX3Rlc3Rpbmdfc3RyaW5nIiA9ICJYJGVjaG9fdGVzdF9zdHJpbmciOyB0aGVuCi0JIyBDb29sLCBwcmludGYgd29ya3MKLQk6Ci0gICAgICBlbGlmIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICdcdCcpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAnWFx0JyAmJgotCSAgIGVjaG9fdGVzdGluZ19zdHJpbmc9YCgkT1JJR0lOQUxfQ09ORklHX1NIRUxMICIkMCIgLS1mYWxsYmFjay1lY2hvICIkZWNob190ZXN0X3N0cmluZyIpIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIlgkZWNob190ZXN0aW5nX3N0cmluZyIgPSAiWCRlY2hvX3Rlc3Rfc3RyaW5nIjsgdGhlbgotCUNPTkZJR19TSEVMTD0kT1JJR0lOQUxfQ09ORklHX1NIRUxMCi0JZXhwb3J0IENPTkZJR19TSEVMTAotCVNIRUxMPSIkQ09ORklHX1NIRUxMIgotCWV4cG9ydCBTSEVMTAotCWVjaG89IiRDT05GSUdfU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvIgotICAgICAgZWxpZiBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAnXHQnKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gJ1hcdCcgJiYKLQkgICBlY2hvX3Rlc3Rpbmdfc3RyaW5nPWAoJENPTkZJR19TSEVMTCAiJDAiIC0tZmFsbGJhY2stZWNobyAiJGVjaG9fdGVzdF9zdHJpbmciKSAyPi9kZXYvbnVsbGAgJiYKLQkgICB0ZXN0ICJYJGVjaG9fdGVzdGluZ19zdHJpbmciID0gIlgkZWNob190ZXN0X3N0cmluZyI7IHRoZW4KLQllY2hvPSIkQ09ORklHX1NIRUxMICQwIC0tZmFsbGJhY2stZWNobyIKLSAgICAgIGVsc2UKLQkjIG1heWJlIHdpdGggYSBzbWFsbGVyIHN0cmluZy4uLgotCXByZXY9OgotCi0JZm9yIGNtZCBpbiAnZWNobyB0ZXN0JyAnc2VkIDJxICIkMCInICdzZWQgMTBxICIkMCInICdzZWQgMjBxICIkMCInICdzZWQgNTBxICIkMCInOyBkbwotCSAgaWYgKHRlc3QgIlgkZWNob190ZXN0X3N0cmluZyIgPSAiWGBldmFsICRjbWRgIikgMj4vZGV2L251bGwKLQkgIHRoZW4KLQkgICAgYnJlYWsKLQkgIGZpCi0JICBwcmV2PSIkY21kIgotCWRvbmUKLQotCWlmIHRlc3QgIiRwcmV2IiAhPSAnc2VkIDUwcSAiJDAiJzsgdGhlbgotCSAgZWNob190ZXN0X3N0cmluZz1gZXZhbCAkcHJldmAKLQkgIGV4cG9ydCBlY2hvX3Rlc3Rfc3RyaW5nCi0JICBleGVjICR7T1JJR0lOQUxfQ09ORklHX1NIRUxMLSR7Q09ORklHX1NIRUxMLS9iaW4vc2h9fSAiJDAiICR7MSsiJEAifQotCWVsc2UKLQkgICMgT29wcy4gIFdlIGxvc3QgY29tcGxldGVseSwgc28ganVzdCBzdGljayB3aXRoIGVjaG8uCi0JICBlY2hvPWVjaG8KLQlmaQotICAgICAgZmkKLSAgICBmaQotICBmaQotZmkKLWZpCi0KLSMgQ29weSBlY2hvIGFuZCBxdW90ZSB0aGUgY29weSBzdWl0YWJseSBmb3IgcGFzc2luZyB0byBsaWJ0b29sIGZyb20KLSMgdGhlIE1ha2VmaWxlLCBpbnN0ZWFkIG9mIHF1b3RpbmcgdGhlIG9yaWdpbmFsLCB3aGljaCBpcyB1c2VkIGxhdGVyLgotRUNITz0kZWNobwotaWYgdGVzdCAiWCRFQ0hPIiA9ICJYJENPTkZJR19TSEVMTCAkMCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCi0gICBFQ0hPPSIkQ09ORklHX1NIRUxMIFxcXCRcJDAgLS1mYWxsYmFjay1lY2hvIgotZmkKLQotCi0KLQotdGFnbmFtZXM9JHt0YWduYW1lcyske3RhZ25hbWVzfSx9Q1hYCi0KLXRhZ25hbWVzPSR7dGFnbmFtZXMrJHt0YWduYW1lc30sfUY3NwordGVzdCAtbiAiJERKRElSIiB8fCBleGVjIDc8JjAgPC9kZXYvbnVsbAorZXhlYyA2PiYxCiAKICMgTmFtZSBvZiB0aGUgaG9zdC4KLSMgaG9zdG5hbWUgb24gc29tZSBzeXN0ZW1zIChTVlIzLjIsIExpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCisjIGhvc3RuYW1lIG9uIHNvbWUgc3lzdGVtcyAoU1ZSMy4yLCBvbGQgR05VL0xpbnV4KSByZXR1cm5zIGEgYm9ndXMgZXhpdCBzdGF0dXMsCiAjIHNvIHVuYW1lIGdldHMgcnVuIHRvby4KIGFjX2hvc3RuYW1lPWAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYAogCi1leGVjIDY+JjEKLQogIwogIyBJbml0aWFsaXphdGlvbnMuCiAjCiBhY19kZWZhdWx0X3ByZWZpeD0vdXNyL2xvY2FsCithY19jbGVhbl9maWxlcz0KIGFjX2NvbmZpZ19saWJvYmpfZGlyPS4KK0xJQk9CSlM9CiBjcm9zc19jb21waWxpbmc9bm8KIHN1YmRpcnM9CiBNRkxBR1M9CiBNQUtFRkxBR1M9Ci1TSEVMTD0ke0NPTkZJR19TSEVMTC0vYmluL3NofQotCi0jIE1heGltdW0gbnVtYmVyIG9mIGxpbmVzIHRvIHB1dCBpbiBhIHNoZWxsIGhlcmUgZG9jdW1lbnQuCi0jIFRoaXMgdmFyaWFibGUgc2VlbXMgb2Jzb2xldGUuICBJdCBzaG91bGQgcHJvYmFibHkgYmUgcmVtb3ZlZCwgYW5kCi0jIG9ubHkgYWNfbWF4X3NlZF9saW5lcyBzaG91bGQgYmUgdXNlZC4KLTogJHthY19tYXhfaGVyZV9saW5lcz0zOH0KIAogIyBJZGVudGl0eSBvZiB0aGlzIHBhY2thZ2UuCiBQQUNLQUdFX05BTUU9J05ldC1TTk1QJwogUEFDS0FHRV9UQVJOQU1FPSduZXQtc25tcCcKLVBBQ0tBR0VfVkVSU0lPTj0nNS40LjQnCi1QQUNLQUdFX1NUUklORz0nTmV0LVNOTVAgNS40LjQnCitQQUNLQUdFX1ZFUlNJT049JzUuNy4zLnJjMScKK1BBQ0tBR0VfU1RSSU5HPSdOZXQtU05NUCA1LjcuMy5yYzEnCiBQQUNLQUdFX0JVR1JFUE9SVD0nbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCcKK1BBQ0tBR0VfVVJMPScnCiAKLWFjX3VuaXF1ZV9maWxlPSJhZ2VudC9taWJncm91cC91Y2Qtc25tcC9leHRlbnNpYmxlLmMiCithY191bmlxdWVfZmlsZT0iYWdlbnQvc25tcGQuYyIKICMgRmFjdG9yaW5nIGRlZmF1bHQgaGVhZGVycyBmb3IgbW9zdCB0ZXN0cy4KIGFjX2luY2x1ZGVzX2RlZmF1bHQ9IlwKICNpbmNsdWRlIDxzdGRpby5oPgotI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICiAjIGluY2x1ZGUgPHN5cy90eXBlcy5oPgogI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVF9ICisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICiAjIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKLSNpZiBTVERDX0hFQURFUlMKKyNpZmRlZiBTVERDX0hFQURFUlMKICMgaW5jbHVkZSA8c3RkbGliLmg+CiAjIGluY2x1ZGUgPHN0ZGRlZi5oPgogI2Vsc2UKLSMgaWYgSEFWRV9TVERMSUJfSAorIyBpZmRlZiBIQVZFX1NURExJQl9ICiAjICBpbmNsdWRlIDxzdGRsaWIuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfU1RSSU5HX0gKLSMgaWYgIVNURENfSEVBREVSUyAmJiBIQVZFX01FTU9SWV9ICisjaWZkZWYgSEFWRV9TVFJJTkdfSAorIyBpZiAhZGVmaW5lZCBTVERDX0hFQURFUlMgJiYgZGVmaW5lZCBIQVZFX01FTU9SWV9ICiAjICBpbmNsdWRlIDxtZW1vcnkuaD4KICMgZW5kaWYKICMgaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1NUUklOR1NfSAorI2lmZGVmIEhBVkVfU1RSSU5HU19ICiAjIGluY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgotI2lmIEhBVkVfSU5UVFlQRVNfSAorI2lmZGVmIEhBVkVfSU5UVFlQRVNfSAogIyBpbmNsdWRlIDxpbnR0eXBlcy5oPgotI2Vsc2UKLSMgaWYgSEFWRV9TVERJTlRfSAotIyAgaW5jbHVkZSA8c3RkaW50Lmg+Ci0jIGVuZGlmCiAjZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICisjaWZkZWYgSEFWRV9TVERJTlRfSAorIyBpbmNsdWRlIDxzdGRpbnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfVU5JU1REX0gKICMgaW5jbHVkZSA8dW5pc3RkLmg+CiAjZW5kaWYiCiAKLWFjX3N1YnN0X3ZhcnM9J1NIRUxMIFBBVEhfU0VQQVJBVE9SIFBBQ0tBR0VfTkFNRSBQQUNLQUdFX1RBUk5BTUUgUEFDS0FHRV9WRVJTSU9OIFBBQ0tBR0VfU1RSSU5HIFBBQ0tBR0VfQlVHUkVQT1JUIGV4ZWNfcHJlZml4IHByZWZpeCBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YWRpciBzeXNjb25mZGlyIHNoYXJlZHN0YXRlZGlyIGxvY2Fsc3RhdGVkaXIgbGliZGlyIGluY2x1ZGVkaXIgb2xkaW5jbHVkZWRpciBpbmZvZGlyIG1hbmRpciBidWlsZF9hbGlhcyBob3N0X2FsaWFzIHRhcmdldF9hbGlhcyBERUZTIEVDSE9fQyBFQ0hPX04gRUNIT19UIExJQlMgQ09ORklHVVJFX09QVElPTlMgTElCVE9PTEZMQUdTIElOU1RBTExfUFJFRklYIFNOTVBEIFRSQVBMSUJTIFVTRVRSQVBMSUJTIE1BSU5TVUJTIEhBVkVfRE1BTExPQ19IIGluc3RhbGx1Y2RoZWFkZXJzIGluc3RhbGx1Y2RsaWJzIENDIENGTEFHUyBMREZMQUdTIENQUEZMQUdTIGFjX2N0X0NDIEVYRUVYVCBPQkpFWFQgQ1BQIExJTktDQyBFR1JFUCBidWlsZCBidWlsZF9jcHUgYnVpbGRfdmVuZG9yIGJ1aWxkX29zIGhvc3QgaG9zdF9jcHUgaG9zdF92ZW5kb3IgaG9zdF9vcyB0YXJnZXQgdGFyZ2V0X2NwdSB0YXJnZXRfdmVuZG9yIHRhcmdldF9vcyBTRUQgTE5fUyBFQ0hPIEFSIGFjX2N0X0FSIFJBTkxJQiBhY19jdF9SQU5MSUIgU1RSSVAgYWNfY3RfU1RSSVAgRFNZTVVUSUwgYWNfY3RfRFNZTVVUSUwgTk1FRElUIGFjX2N0X05NRURJVCBETExUT09MIGFjX2N0X0RMTFRPT0wgQVMgYWNfY3RfQVMgT0JKRFVNUCBhY19jdF9PQkpEVU1QIENYWCBDWFhGTEFHUyBhY19jdF9DWFggQ1hYQ1BQIEY3NyBGRkxBR1MgYWNfY3RfRjc3IExJQlRPT0wgTElCVE9PTF9ERVBTIElOU1RBTExfUFJPR1JBTSBJTlNUQUxMX1NDUklQVCBJTlNUQUxMX0RBVEEgU0VUX01BS0UgUFNQUk9HIFBFUkxQUk9HIFBZVEhPTlBST0cgV0hPQU1JIEZJTkQgQVVUT0NPTkYgQVVUT0hFQURFUiBVTkFNRVBST0cgVkVSU0lPTiBSRUxFQVNFVkVSU0lPTiBERVZGTEFHUyBUT1BfSU5DTFVERVMgU05NUExJQl9JTkNMVURFUyBBR0VOVF9JTkNMVURFUyBIRUxQRVJfSU5DTFVERVMgTUlCR1JPVVBfSU5DTFVERVMgR05VX3ZwYXRoIE5PTl9HTlVfVlBBVEggQ0NQQVRIIEVYVFJBQ1BQRkxBR1MgU05NUExJQlBBVEggU05NUFNIQVJFUEFUSCBORVRTTk1QX0RFRkFVTFRfTUlCRElSUyBTTk1QQ09ORlBBVEggb3RoZXJfc3JjX2xpc3Qgb3RoZXJfb2Jqc19saXN0IG90aGVyX2xvYmpzX2xpc3Qgb3RoZXJfYWdlbnRvYmpzIG90aGVyX2xhZ2VudG9ianMgb3RoZXJfdHJhcGRfb2JqZWN0cyB0cmFuc3BvcnRfaGRyX2xpc3QgdHJhbnNwb3J0X3NyY19saXN0IHRyYW5zcG9ydF9vYmpfbGlzdCB0cmFuc3BvcnRfbG9ial9saXN0IHNlY3VyaXR5X3NyY19saXN0IHNlY3VyaXR5X2hkcl9saXN0IHNlY3VyaXR5X29ial9saXN0IHNlY3VyaXR5X2xvYmpfbGlzdCBrcmI1X2NvbmZpZyBkZWZhdWx0X21pYnNfaW5zdGFsbCBkbGxjbGVhbnMgRU5WX1NFUEFSQVRPUiBORVRTTk1QX0RFRkFVTFRfTUlCUyBFTUJFRFBFUkxJTlNUQUxMIEVNQkVEUEVSTFVOSU5TVEFMTCBQRVJMTERPUFRTX0ZPUl9MSUJTIFBFUkxMRE9QVFNfRk9SX0FQUFMgUEVSTFRBUkdTIFBFUkxJTlNUQUxMVEFSR1MgUEVSTFVOSU5TVEFMTFRBUkdTIFBFUkxBUkdTIFBZVEhPTlRBUkdTIFBZVEhPTklOU1RBTExUQVJHUyBQWVRIT05VTklOU1RBTExUQVJHUyBQWVRIT05DTEVBTlRBUkdTIFBZVEhPTkFSR1MgTFBTVEFUX1BBVEggTE5FVFNOTVBMSUJTIExBR0VOVExJQlMgUFNDTUQgQUxMT0NBIExJQk9CSlMgTE1JQkxJQlMgQUdFTlRMSUJTIE9USEVSQUdFTlRMSUJPQkpTIE9USEVSQUdFTlRMSUJMT0JKUyBQRVJTSVNURU5UX0RJUkVDVE9SWSBVQ0RQRVJTSVNURU5UX0RJUkVDVE9SWSBDT1BZX1BFUlNJU1RFTlRfRklMRVMgRExMSUJTIExUTElCT0JKUycKLWFjX3N1YnN0X2ZpbGVzPSdNT0RVTEVfTElTVCBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3QgbW9kdWxlX3J1bGVzIG1vZHVsZV9saXN0X2RlcHMgbWliX21vZHVsZV9saXN0X2RlcHMgYWdlbnRfbW9kdWxlX2xpc3RfZGVwcycKK2FjX2NvbmZpZ19saWJvYmpfZGlyPXNubXBsaWIKK2FjX3N1YnN0X3ZhcnM9J0xUTElCT0JKUworYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFCitQQVJUSUFMVEFSR0VURkxBR1MKK0RMTElCUworT1RIRVJBR0VOVExJQkxGVFMKK09USEVSQUdFTlRMSUJMT0JKUworT1RIRVJBR0VOVExJQk9CSlMKK0FHRU5UTElCUworTE1JQkxJQlMKK1BTQ01ECitMUFNUQVRfUEFUSAorTElCT0JKUworQUxMT0NBCitWQUxfTElCUworTEFHRU5UTElCUworTE5FVFNOTVBMSUJTCitQWVRIT05GRUFUVVJFUworUFlUSE9OQVJHUworUFlUSE9OQ0xFQU5UQVJHUworUFlUSE9OVU5JTlNUQUxMVEFSR1MKK1BZVEhPTklOU1RBTExUQVJHUworUFlUSE9OVEFSR1MKK1BFUkxGRUFUVVJFUworUEVSTEFSR1MKK1BFUkxVTklOU1RBTExUQVJHUworUEVSTElOU1RBTExUQVJHUworUEVSTFRBUkdTCitQRVJMTERPUFRTX0ZPUl9BUFBTCitQRVJMTERPUFRTX0ZPUl9MSUJTCitFTUJFRFBFUkxVTklOU1RBTEwKK0VNQkVEUEVSTElOU1RBTEwKK01ZU1FMX0lOQ0xVREVTCitNWVNRTF9MSUJTCitNWVNRTENPTkZJRworY3J5cHRvX2ZpbGVzX2xvCitjcnlwdG9fZmlsZXNfbworY3J5cHRvX2ZpbGVzX2MKK05FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0UKK05FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRQorTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRQorTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFCitORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFCitORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUUKK05FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0UKK05FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRQorTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFCitORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRQorTkVUU05NUF9ERUZBVUxUX01JQlMKK0VOVl9TRVBBUkFUT1IKK2RsbGNsZWFucworZGVmYXVsdF9taWJzX2luc3RhbGwKK2tyYjVfY29uZmlnCitzZWN1cml0eV9mdG9ial9saXN0CitzZWN1cml0eV9sb2JqX2xpc3QKK3NlY3VyaXR5X29ial9saXN0CitzZWN1cml0eV9oZHJfbGlzdAorc2VjdXJpdHlfc3JjX2xpc3QKK3RyYW5zcG9ydF9mdG9ial9saXN0Cit0cmFuc3BvcnRfbG9ial9saXN0Cit0cmFuc3BvcnRfb2JqX2xpc3QKK3RyYW5zcG9ydF9zcmNfbGlzdAordHJhbnNwb3J0X2hkcl9saXN0CitvdGhlcl90cmFwZF9vYmplY3RzCitvdGhlcl9mdGFnZW50b2Jqcworb3RoZXJfbGFnZW50b2Jqcworb3RoZXJfYWdlbnRvYmpzCitvdGhlcl9mdG9ianNfbGlzdAorb3RoZXJfbG9ianNfbGlzdAorb3RoZXJfb2Jqc19saXN0CitvdGhlcl9zcmNfbGlzdAorU05NUENPTkZQQVRICitORVRTTk1QX0RFRkFVTFRfTUlCRElSUworU05NUFNIQVJFUEFUSAorU05NUExJQlBBVEgKK1ZFUlNJT04KK0RQS0dfUVVFUllfUEFUSAorQ0NQQVRICitFWFRSQUNQUEZMQUdTCitMRF9OT19VTkRFRklORUQKK3RhcmdldF9vcwordGFyZ2V0X3ZlbmRvcgordGFyZ2V0X2NwdQordGFyZ2V0CitOT05fR05VX1ZQQVRICitHTlVfdnBhdGgKK0VYVEVSTkFMX01JQkdST1VQX0lOQ0xVREVTCitNSUJHUk9VUF9JTkNMVURFUworSEVMUEVSX0lOQ0xVREVTCitBR0VOVF9JTkNMVURFUworU05NUExJQl9JTkNMVURFUworVE9QX0lOQ0xVREVTCitERVZGTEFHUworTElCVE9PTF9ERVBTCitPVE9PTDY0CitPVE9PTAorTElQTworTk1FRElUCitEU1lNVVRJTAorTUFOSUZFU1RfVE9PTAorQVdLCitSQU5MSUIKK1NUUklQCithY19jdF9BUgorQVIKK05NCithY19jdF9EVU1QQklOCitEVU1QQklOCitMRAorRkdSRVAKK2hvc3Rfb3MKK2hvc3RfdmVuZG9yCitob3N0X2NwdQoraG9zdAorYnVpbGRfb3MKK2J1aWxkX3ZlbmRvcgorYnVpbGRfY3B1CitidWlsZAorTElCVE9PTAorT0JKRFVNUAorRExMVE9PTAorQVMKK0xJTktDQworQ1BQCitPQkpFWFQKK0VYRUVYVAorYWNfY3RfQ0MKK0NQUEZMQUdTCitMREZMQUdTCitDRkxBR1MKK0NDCitQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMCitVTkFNRVBST0cKK1BZVEhPTlBST0cKK1BTUFJPRworUEVSTFBST0cKK0FVVE9IRUFERVIKK0FVVE9DT05GCitXSE9BTUkKK0ZJTkQKK0ZJTEUKK1NFRAorU0VUX01BS0UKK0xOX1MKK0lOU1RBTExfREFUQQorSU5TVEFMTF9TQ1JJUFQKK0lOU1RBTExfUFJPR1JBTQorRUdSRVAKK0dSRVAKK0NPUFlfUEVSU0lTVEVOVF9GSUxFUworVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlkKK1BFUlNJU1RFTlRfRElSRUNUT1JZCitGRUFUVVJFSEVBREVSUworRkVBVFVSRVRBUkdTCitGRUFUVVJFX1JFTU9WRV9GTEFHUworRkVBVFVSRV9BRERfRkxBR1MKK2luc3RhbGx1Y2RsaWJzCitpbnN0YWxsdWNkaGVhZGVycworRlRNQUlOU1VCUworTUFJTlNVQlMKK1VTRVRSQVBMSUJTCitUUkFQTElCUworU05NUEQKK0lOU1RBTExfUFJFRklYCitMSUJUT09MRkxBR1MKK0NPTkZJR1VSRV9PUFRJT05TCit0YXJnZXRfYWxpYXMKK2hvc3RfYWxpYXMKK2J1aWxkX2FsaWFzCitMSUJTCitFQ0hPX1QKK0VDSE9fTgorRUNIT19DCitERUZTCittYW5kaXIKK2xvY2FsZWRpcgorbGliZGlyCitwc2RpcgorcGRmZGlyCitkdmlkaXIKK2h0bWxkaXIKK2luZm9kaXIKK2RvY2Rpcgorb2xkaW5jbHVkZWRpcgoraW5jbHVkZWRpcgorbG9jYWxzdGF0ZWRpcgorc2hhcmVkc3RhdGVkaXIKK3N5c2NvbmZkaXIKK2RhdGFkaXIKK2RhdGFyb290ZGlyCitsaWJleGVjZGlyCitzYmluZGlyCitiaW5kaXIKK3Byb2dyYW1fdHJhbnNmb3JtX25hbWUKK3ByZWZpeAorZXhlY19wcmVmaXgKK1BBQ0tBR0VfVVJMCitQQUNLQUdFX0JVR1JFUE9SVAorUEFDS0FHRV9TVFJJTkcKK1BBQ0tBR0VfVkVSU0lPTgorUEFDS0FHRV9UQVJOQU1FCitQQUNLQUdFX05BTUUKK1BBVEhfU0VQQVJBVE9SCitTSEVMTCcKK2FjX3N1YnN0X2ZpbGVzPSdNT0RVTEVfTElTVAorbW9kdWxlX2xpc3RfYworbW9kdWxlX2xpc3RfbworbW9kdWxlX2xpc3RfbG8KK21vZHVsZV9saXN0X2Z0CittaWJfbW9kdWxlX2xpc3RfYworbWliX21vZHVsZV9saXN0X28KK21pYl9tb2R1bGVfbGlzdF9sbworbWliX21vZHVsZV9saXN0X2Z0CithZ2VudF9tb2R1bGVfbGlzdF9jCithZ2VudF9tb2R1bGVfbGlzdF9vCithZ2VudF9tb2R1bGVfbGlzdF9sbworYWdlbnRfbW9kdWxlX2xpc3RfZnQKK21pYmdyb3VwX2xpc3RfbworbWliZ3JvdXBfbGlzdF9sbworbWliZ3JvdXBfbGlzdF9mdAorYWdlbnRncm91cF9saXN0X28KK2FnZW50Z3JvdXBfbGlzdF9sbworYWdlbnRncm91cF9saXN0X2Z0Cittb2R1bGVfcnVsZXMKK21vZHVsZV9saXN0X2RlcHMKK21pYl9tb2R1bGVfbGlzdF9kZXBzCithZ2VudF9tb2R1bGVfbGlzdF9kZXBzJworYWNfdXNlcl9vcHRzPScKK2VuYWJsZV9vcHRpb25fY2hlY2tpbmcKK3dpdGhfY2MKK3dpdGhfbGlua2NjCit3aXRoX2FyCit3aXRoX2VuZGlhbm5lc3MKK3dpdGhfY2ZsYWdzCit3aXRoX2xkZmxhZ3MKK2VuYWJsZV9hc19uZWVkZWQKK3dpdGhfbGlicworZW5hYmxlX3NpbGVudF9saWJ0b29sCit3aXRoX2RtYWxsb2MKK2VuYWJsZV9kbWFsbG9jCit3aXRoX2VmZW5jZQorZW5hYmxlX2VmZW5jZQord2l0aF9yc2FyZWYKK2VuYWJsZV9yc2FyZWYKK3dpdGhfb3BlbnNzbAorZW5hYmxlX29wZW5zc2wKK3dpdGhfc3NsCitlbmFibGVfc3NsCit3aXRoX3BrY3MKK2VuYWJsZV9wa2NzCit3aXRoX2tyYjUKK2VuYWJsZV9rcmI1Cit3aXRoX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uCitlbmFibGVfZG5zc2VjX2xvY2FsX3ZhbGlkYXRpb24KK3dpdGhfZG5zc2VjCitlbmFibGVfZG5zc2VjCit3aXRoX3JwbQorZW5hYmxlX3JwbQord2l0aF9pbnN0YWxsX3ByZWZpeAorZW5hYmxlX2FnZW50Cit3aXRoX2FnZW50CitlbmFibGVfYXBwbGljYXRpb25zCit3aXRoX2FwcGxpY2F0aW9ucworZW5hYmxlX21hbnVhbHMKK3dpdGhfbWFudWFscworZW5hYmxlX3NjcmlwdHMKK3dpdGhfc2NyaXB0cworZW5hYmxlX21pYnMKK2VuYWJsZV9taWJfY29uZmlnX2NoZWNraW5nCit3aXRoX21pYl9jb25maWdfY2hlY2tpbmcKK2VuYWJsZV9taWJfY29uZmlnX2RlYnVnCit3aXRoX21pYl9jb25maWdfZGVidWcKK2VuYWJsZV9uZXdfZmVhdHVyZXMKK2VuYWJsZV9vbGRfZmVhdHVyZXMKK3dpdGhfZmVhdHVyZXNfb2YKK3dpdGhfZGVmYXVsdHMKK2VuYWJsZV9kZWZhdWx0cworZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkKK3dpdGhfdWNkX3NubXBfY29tcGF0aWJpbGl0eQorZW5hYmxlX21pYl9sb2FkaW5nCit3aXRoX21pYl9sb2FkaW5nCit3aXRoX21pYmRpcnMKK2VuYWJsZV9taWJkaXJzCit3aXRoX21pYnMKK3dpdGhfbWliZmlsZXMKK2VuYWJsZV9taWJmaWxlcworZW5hYmxlX2Rlcword2l0aF9kZXMKK2VuYWJsZV9wcml2YWN5Cit3aXRoX3ByaXZhY3kKK2VuYWJsZV9tZDUKK3dpdGhfbWQ1CitlbmFibGVfaW50ZXJuYWxfbWQ1Cit3aXRoX2ludGVybmFsX21kNQord2l0aF9vcGFxdWVfc3BlY2lhbF90eXBlcworZW5hYmxlX29wYXF1ZV9zcGVjaWFsX3R5cGVzCitlbmFibGVfaXB2Ngord2l0aF9pcHY2Cit3aXRoX2xvZ2ZpbGUKK2VuYWJsZV9sb2dmaWxlCit3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5CitlbmFibGVfcGVyc2lzdGVudF9kaXJlY3RvcnkKK3dpdGhfcGVyc2lzdGVudF9tYXNrCitlbmFibGVfcGVyc2lzdGVudF9tYXNrCit3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcworZW5hYmxlX2NvcHlfcGVyc2lzdGVudF9maWxlcword2l0aF90ZW1wX2ZpbGVfcGF0dGVybgorZW5hYmxlX3RlbXBfZmlsZV9wYXR0ZXJuCitlbmFibGVfc25tcHYxCit3aXRoX3NubXB2MQorZW5hYmxlX3NubXB2MmMKK3dpdGhfc25tcHYyYword2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbgorZW5hYmxlX2RlZmF1bHRfc25tcF92ZXJzaW9uCit3aXRoX3RyYW5zcG9ydHMKK3dpdGhfb3V0X3RyYW5zcG9ydHMKK3dpdGhfdHJhbnNwb3J0Cit3aXRoX291dF90cmFuc3BvcnQKK3dpdGhfc2VjdXJpdHlfbW9kdWxlcworZW5hYmxlX3NlY3VyaXR5X21vZHVsZXMKK3dpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXMKK2VuYWJsZV9vdXRfc2VjdXJpdHlfbW9kdWxlcworZW5hYmxlX2RlYnVnZ2luZword2l0aF9kZWJ1Z2dpbmcKK2VuYWJsZV9kZXZlbG9wZXIKK3dpdGhfZGV2ZWxvcGVyCitlbmFibGVfdGVzdGluZ19jb2RlCit3aXRoX3Rlc3RpbmdfY29kZQorZW5hYmxlX3JlZW50cmFudAord2l0aF9yZWVudHJhbnQKK2VuYWJsZV9kZXByZWNhdGVkCit3aXRoX2RlcHJlY2F0ZWQKK3dpdGhfcm9vdF9hY2Nlc3MKK2VuYWJsZV9yb290X2FjY2Vzcword2l0aF9rbWVtX3VzYWdlCitlbmFibGVfa21lbV91c2FnZQord2l0aF9kdW1teV92YWx1ZXMKK2VuYWJsZV9kdW1teV92YWx1ZXMKK2VuYWJsZV9zZXRfc3VwcG9ydAord2l0aF9zZXRfc3VwcG9ydAord2l0aF9zeXNfY29udGFjdAorZW5hYmxlX3N5c19jb250YWN0Cit3aXRoX3N5c19sb2NhdGlvbgorZW5hYmxlX3N5c19sb2NhdGlvbgorZW5hYmxlX2xvY2FsX3NtdXgKK3dpdGhfbG9jYWxfc211eAorZW5hYmxlX2FnZW50eF9kb21fc29ja19vbmx5Cit3aXRoX2FnZW50eF9kb21fc29ja19vbmx5CitlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50Cit3aXRoX3NubXB0cmFwZF9zdWJhZ2VudAord2l0aF9hZ2VudHhfc29ja2V0CitlbmFibGVfYWdlbnR4X3NvY2tldAord2l0aF9mZWF0dXJlcworZW5hYmxlX2ZlYXR1cmVzCit3aXRoX291dF9mZWF0dXJlcworZW5hYmxlX291dF9mZWF0dXJlcword2l0aF9mZWF0dXJlCit3aXRoX291dF9mZWF0dXJlCitlbmFibGVfbWluaW1hbGlzdAord2l0aF9taW5pbWFsaXN0CitlbmFibGVfbm90aWZ5X29ubHkKK3dpdGhfbm90aWZ5X29ubHkKK2VuYWJsZV9ub3RpZnlvbmx5CitlbmFibGVfbm9fbGlzdGVuCit3aXRoX25vX2xpc3RlbgorZW5hYmxlX25vbGlzdGVuCitlbmFibGVfcmVhZF9vbmx5Cit3aXRoX3JlYWRfb25seQorZW5hYmxlX3JlYWRvbmx5CitlbmFibGVfbWluaV9hZ2VudAord2l0aF9taW5pX2FnZW50Cit3aXRoX21pbmlhZ2VudAorZW5hYmxlX21pbmlhZ2VudAorZW5hYmxlX21mZF9yZXdyaXRlcword2l0aF9tZmRfcmV3cml0ZXMKK3dpdGhfbWliX21vZHVsZXMKK2VuYWJsZV9taWJfbW9kdWxlcword2l0aF9vdXRfbWliX21vZHVsZXMKK2VuYWJsZV9vdXRfbWliX21vZHVsZXMKK3dpdGhfbWliX21vZHVsZQord2l0aF9tb2R1bGUKK3dpdGhfbW9kdWxlcword2l0aF9vdXRfbWliX21vZHVsZQord2l0aF9vdXRfbW9kdWxlCit3aXRoX291dF9tb2R1bGVzCit3aXRoX2VudGVycHJpc2Vfb2lkCitlbmFibGVfZW50ZXJwcmlzZV9vaWQKK3dpdGhfZW50ZXJwcmlzZV9zeXNvaWQKK2VuYWJsZV9lbnRlcnByaXNlX3N5c29pZAord2l0aF9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQKK2VuYWJsZV9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQKK3dpdGhfcGVybF9tb2R1bGVzCitlbmFibGVfcGVybF9tb2R1bGVzCitlbmFibGVfZW1iZWRkZWRfcGVybAord2l0aF9lbWJlZGRlZF9wZXJsCitlbmFibGVfcGVybF9jY19jaGVja3MKK3dpdGhfcGVybF9jY19jaGVja3MKK3dpdGhfcHl0aG9uX21vZHVsZXMKK3dpdGhfc2VydmVyX3NlbmRfYnVmCitlbmFibGVfc2VydmVyX3NlbmRfYnVmCit3aXRoX3NlcnZlcl9yZWN2X2J1ZgorZW5hYmxlX3NlcnZlcl9yZWN2X2J1Zgord2l0aF9jbGllbnRfc2VuZF9idWYKK2VuYWJsZV9jbGllbnRfc2VuZF9idWYKK3dpdGhfY2xpZW50X3JlY3ZfYnVmCitlbmFibGVfY2xpZW50X3JlY3ZfYnVmCit3aXRoX2VsZgorZW5hYmxlX2VsZgord2l0aF9ubAorZW5hYmxlX25sCit3aXRoX2xpYndyYXAKK2VuYWJsZV9saWJ3cmFwCit3aXRoX3psaWIKK2VuYWJsZV96bGliCit3aXRoX2J6aXAyCit3aXRoX21udHRhYgorZW5hYmxlX21udHRhYgord2l0aF9teXNxbAorZW5hYmxlX215c3FsCitlbmFibGVfc2hhcmVkCitlbmFibGVfc3RhdGljCit3aXRoX3BpYworZW5hYmxlX2Zhc3RfaW5zdGFsbAord2l0aF9nbnVfbGQKK3dpdGhfc3lzcm9vdAorZW5hYmxlX2xpYnRvb2xfbG9jaworJworICAgICAgYWNfcHJlY2lvdXNfdmFycz0nYnVpbGRfYWxpYXMKK2hvc3RfYWxpYXMKK3RhcmdldF9hbGlhcworQ0MKK0NGTEFHUworTERGTEFHUworTElCUworQ1BQRkxBR1MKK0NQUCcKKwogCiAjIEluaXRpYWxpemUgc29tZSB2YXJpYWJsZXMgc2V0IGJ5IG9wdGlvbnMuCiBhY19pbml0X2hlbHA9CiBhY19pbml0X3ZlcnNpb249ZmFsc2UKK2FjX3VucmVjb2duaXplZF9vcHRzPQorYWNfdW5yZWNvZ25pemVkX3NlcD0KICMgVGhlIHZhcmlhYmxlcyBoYXZlIHRoZSBzYW1lIG5hbWVzIGFzIHRoZSBvcHRpb25zLCB3aXRoCiAjIGRhc2hlcyBjaGFuZ2VkIHRvIHVuZGVybGluZXMuCiBjYWNoZV9maWxlPS9kZXYvbnVsbApAQCAtNDk0LDM0ICsxMDc4LDQ5IEBACiAjIGFuZCBhbGwgdGhlIHZhcmlhYmxlcyB0aGF0IGFyZSBzdXBwb3NlZCB0byBiZSBiYXNlZCBvbiBleGVjX3ByZWZpeAogIyBieSBkZWZhdWx0IHdpbGwgYWN0dWFsbHkgY2hhbmdlLgogIyBVc2UgYnJhY2VzIGluc3RlYWQgb2YgcGFyZW5zIGJlY2F1c2Ugc2gsIHBlcmwsIGV0Yy4gYWxzbyBhY2NlcHQgdGhlbS4KKyMgKFRoZSBsaXN0IGZvbGxvd3MgdGhlIHNhbWUgb3JkZXIgYXMgdGhlIEdOVSBDb2RpbmcgU3RhbmRhcmRzLikKIGJpbmRpcj0nJHtleGVjX3ByZWZpeH0vYmluJwogc2JpbmRpcj0nJHtleGVjX3ByZWZpeH0vc2JpbicKIGxpYmV4ZWNkaXI9JyR7ZXhlY19wcmVmaXh9L2xpYmV4ZWMnCi1kYXRhZGlyPScke3ByZWZpeH0vc2hhcmUnCitkYXRhcm9vdGRpcj0nJHtwcmVmaXh9L3NoYXJlJworZGF0YWRpcj0nJHtkYXRhcm9vdGRpcn0nCiBzeXNjb25mZGlyPScke3ByZWZpeH0vZXRjJwogc2hhcmVkc3RhdGVkaXI9JyR7cHJlZml4fS9jb20nCiBsb2NhbHN0YXRlZGlyPScke3ByZWZpeH0vdmFyJwotbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCiBpbmNsdWRlZGlyPScke3ByZWZpeH0vaW5jbHVkZScKIG9sZGluY2x1ZGVkaXI9Jy91c3IvaW5jbHVkZScKLWluZm9kaXI9JyR7cHJlZml4fS9pbmZvJwotbWFuZGlyPScke3ByZWZpeH0vbWFuJworZG9jZGlyPScke2RhdGFyb290ZGlyfS9kb2MvJHtQQUNLQUdFX1RBUk5BTUV9JworaW5mb2Rpcj0nJHtkYXRhcm9vdGRpcn0vaW5mbycKK2h0bWxkaXI9JyR7ZG9jZGlyfScKK2R2aWRpcj0nJHtkb2NkaXJ9JworcGRmZGlyPScke2RvY2Rpcn0nCitwc2Rpcj0nJHtkb2NkaXJ9JworbGliZGlyPScke2V4ZWNfcHJlZml4fS9saWInCitsb2NhbGVkaXI9JyR7ZGF0YXJvb3RkaXJ9L2xvY2FsZScKK21hbmRpcj0nJHtkYXRhcm9vdGRpcn0vbWFuJwogCiBhY19wcmV2PQorYWNfZGFzaGRhc2g9CiBmb3IgYWNfb3B0aW9uCiBkbwogICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KICAgaWYgdGVzdCAtbiAiJGFjX3ByZXYiOyB0aGVuCi0gICAgZXZhbCAiJGFjX3ByZXY9XCRhY19vcHRpb24iCisgICAgZXZhbCAkYWNfcHJldj1cJGFjX29wdGlvbgogICAgIGFjX3ByZXY9CiAgICAgY29udGludWUKICAgZmkKIAotICBhY19vcHRhcmc9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgY2FzZSAkYWNfb3B0aW9uIGluCisgICo9PyopIGFjX29wdGFyZz1gZXhwciAiWCRhY19vcHRpb24iIDogJ1tePV0qPVwoLipcKSdgIDs7CisgICo9KSAgIGFjX29wdGFyZz0gOzsKKyAgKikgICAgYWNfb3B0YXJnPXllcyA7OworICBlc2FjCiAKICAgIyBBY2NlcHQgdGhlIGltcG9ydGFudCBDeWdudXMgY29uZmlndXJlIG9wdGlvbnMsIHNvIHdlIGNhbiBkaWFnbm9zZSB0eXBvcy4KIAotICBjYXNlICRhY19vcHRpb24gaW4KKyAgY2FzZSAkYWNfZGFzaGRhc2gkYWNfb3B0aW9uIGluCisgIC0tKQorICAgIGFjX2Rhc2hkYXNoPXllcyA7OwogCiAgIC1iaW5kaXIgfCAtLWJpbmRpciB8IC0tYmluZGkgfCAtLWJpbmQgfCAtLWJpbiB8IC0tYmkpCiAgICAgYWNfcHJldj1iaW5kaXIgOzsKQEAgLTU0MywzMyArMTE0Miw1OSBAQAogICAtLWNvbmZpZy1jYWNoZSB8IC1DKQogICAgIGNhY2hlX2ZpbGU9Y29uZmlnLmNhY2hlIDs7CiAKLSAgLWRhdGFkaXIgfCAtLWRhdGFkaXIgfCAtLWRhdGFkaSB8IC0tZGF0YWQgfCAtLWRhdGEgfCAtLWRhdCB8IC0tZGEpCisgIC1kYXRhZGlyIHwgLS1kYXRhZGlyIHwgLS1kYXRhZGkgfCAtLWRhdGFkKQogICAgIGFjX3ByZXY9ZGF0YWRpciA7OwotICAtZGF0YWRpcj0qIHwgLS1kYXRhZGlyPSogfCAtLWRhdGFkaT0qIHwgLS1kYXRhZD0qIHwgLS1kYXRhPSogfCAtLWRhdD0qIFwKLSAgfCAtLWRhPSopCisgIC1kYXRhZGlyPSogfCAtLWRhdGFkaXI9KiB8IC0tZGF0YWRpPSogfCAtLWRhdGFkPSopCiAgICAgZGF0YWRpcj0kYWNfb3B0YXJnIDs7CiAKKyAgLWRhdGFyb290ZGlyIHwgLS1kYXRhcm9vdGRpciB8IC0tZGF0YXJvb3RkaSB8IC0tZGF0YXJvb3RkIHwgLS1kYXRhcm9vdCBcCisgIHwgLS1kYXRhcm9vIHwgLS1kYXRhcm8gfCAtLWRhdGFyKQorICAgIGFjX3ByZXY9ZGF0YXJvb3RkaXIgOzsKKyAgLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGlyPSogfCAtLWRhdGFyb290ZGk9KiB8IC0tZGF0YXJvb3RkPSogXAorICB8IC0tZGF0YXJvb3Q9KiB8IC0tZGF0YXJvbz0qIHwgLS1kYXRhcm89KiB8IC0tZGF0YXI9KikKKyAgICBkYXRhcm9vdGRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWRpc2FibGUtKiB8IC0tZGlzYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSpkaXNhYmxlLVwoLipcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKmRpc2FibGUtXCguKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19mZWF0dXJlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgZmVhdHVyZSBuYW1lOiAkYWNfZmVhdHVyZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19mZWF0dXJlPWBlY2hvICRhY19mZWF0dXJlIHwgc2VkICdzLy0vXy9nJ2AKLSAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9bm8iIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJlbmFibGVfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0tZGlzYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OworICAgIGVzYWMKKyAgICBldmFsIGVuYWJsZV8kYWNfdXNlcm9wdD1ubyA7OworCisgIC1kb2NkaXIgfCAtLWRvY2RpciB8IC0tZG9jZGkgfCAtLWRvYyB8IC0tZG8pCisgICAgYWNfcHJldj1kb2NkaXIgOzsKKyAgLWRvY2Rpcj0qIHwgLS1kb2NkaXI9KiB8IC0tZG9jZGk9KiB8IC0tZG9jPSogfCAtLWRvPSopCisgICAgZG9jZGlyPSRhY19vcHRhcmcgOzsKKworICAtZHZpZGlyIHwgLS1kdmlkaXIgfCAtLWR2aWRpIHwgLS1kdmlkIHwgLS1kdmkgfCAtLWR2KQorICAgIGFjX3ByZXY9ZHZpZGlyIDs7CisgIC1kdmlkaXI9KiB8IC0tZHZpZGlyPSogfCAtLWR2aWRpPSogfCAtLWR2aWQ9KiB8IC0tZHZpPSogfCAtLWR2PSopCisgICAgZHZpZGlyPSRhY19vcHRhcmcgOzsKIAogICAtZW5hYmxlLSogfCAtLWVuYWJsZS0qKQotICAgIGFjX2ZlYXR1cmU9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSplbmFibGUtXChbXj1dKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qZW5hYmxlLVwoW149XSpcKSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZmVhdHVyZSIgOiAiLipbXi1fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgotICAgICAgeyBlY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGZlYXR1cmUgbmFtZTogJGFjX2ZlYXR1cmUiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgYWNfZmVhdHVyZT1gZWNobyAkYWNfZmVhdHVyZSB8IHNlZCAncy8tL18vZydgCi0gICAgY2FzZSAkYWNfb3B0aW9uIGluCi0gICAgICAqPSopIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OwotICAgICAgKikgYWNfb3B0YXJnPXllcyA7OworICAgIGV4cHIgIngkYWNfdXNlcm9wdCIgOiAiLipbXi0rLl8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCisgICAgICBhc19mbl9lcnJvciAkPyAiaW52YWxpZCBmZWF0dXJlIG5hbWU6ICRhY191c2Vyb3B0IgorICAgIGFjX3VzZXJvcHRfb3JpZz0kYWNfdXNlcm9wdAorICAgIGFjX3VzZXJvcHQ9YCRhc19lY2hvICIkYWNfdXNlcm9wdCIgfCBzZWQgJ3MvWy0rLl0vXy9nJ2AKKyAgICBjYXNlICRhY191c2VyX29wdHMgaW4KKyAgICAgICoiCisiZW5hYmxlXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLWVuYWJsZS0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwogICAgIGVzYWMKLSAgICBldmFsICJlbmFibGVfJGFjX2ZlYXR1cmU9JyRhY19vcHRhcmcnIiA7OworICAgIGV2YWwgZW5hYmxlXyRhY191c2Vyb3B0PVwkYWNfb3B0YXJnIDs7CiAKICAgLWV4ZWMtcHJlZml4IHwgLS1leGVjX3ByZWZpeCB8IC0tZXhlYy1wcmVmaXggfCAtLWV4ZWMtcHJlZmkgXAogICB8IC0tZXhlYy1wcmVmIHwgLS1leGVjLXByZSB8IC0tZXhlYy1wciB8IC0tZXhlYy1wIHwgLS1leGVjLSBcCkBAIC01OTYsNiArMTIyMSwxMiBAQAogICAtaG9zdD0qIHwgLS1ob3N0PSogfCAtLWhvcz0qIHwgLS1obz0qKQogICAgIGhvc3RfYWxpYXM9JGFjX29wdGFyZyA7OwogCisgIC1odG1sZGlyIHwgLS1odG1sZGlyIHwgLS1odG1sZGkgfCAtLWh0bWxkIHwgLS1odG1sIHwgLS1odG0gfCAtLWh0KQorICAgIGFjX3ByZXY9aHRtbGRpciA7OworICAtaHRtbGRpcj0qIHwgLS1odG1sZGlyPSogfCAtLWh0bWxkaT0qIHwgLS1odG1sZD0qIHwgLS1odG1sPSogfCAtLWh0bT0qIFwKKyAgfCAtLWh0PSopCisgICAgaHRtbGRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaXIgfCAtLWluY2x1ZGVkaSB8IC0taW5jbHVkZWQgfCAtLWluY2x1ZGUgXAogICB8IC0taW5jbHVkIHwgLS1pbmNsdSB8IC0taW5jbCB8IC0taW5jKQogICAgIGFjX3ByZXY9aW5jbHVkZWRpciA7OwpAQCAtNjIwLDEzICsxMjUxLDE2IEBACiAgIHwgLS1saWJleGU9KiB8IC0tbGliZXg9KiB8IC0tbGliZT0qKQogICAgIGxpYmV4ZWNkaXI9JGFjX29wdGFyZyA7OwogCisgIC1sb2NhbGVkaXIgfCAtLWxvY2FsZWRpciB8IC0tbG9jYWxlZGkgfCAtLWxvY2FsZWQgfCAtLWxvY2FsZSkKKyAgICBhY19wcmV2PWxvY2FsZWRpciA7OworICAtbG9jYWxlZGlyPSogfCAtLWxvY2FsZWRpcj0qIHwgLS1sb2NhbGVkaT0qIHwgLS1sb2NhbGVkPSogfCAtLWxvY2FsZT0qKQorICAgIGxvY2FsZWRpcj0kYWNfb3B0YXJnIDs7CisKICAgLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaXIgfCAtLWxvY2Fsc3RhdGVkaSB8IC0tbG9jYWxzdGF0ZWQgXAotICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCBcCi0gIHwgLS1sb2NhbHMgfCAtLWxvY2FsIHwgLS1sb2NhIHwgLS1sb2MgfCAtLWxvKQorICB8IC0tbG9jYWxzdGF0ZSB8IC0tbG9jYWxzdGF0IHwgLS1sb2NhbHN0YSB8IC0tbG9jYWxzdCB8IC0tbG9jYWxzKQogICAgIGFjX3ByZXY9bG9jYWxzdGF0ZWRpciA7OwogICAtbG9jYWxzdGF0ZWRpcj0qIHwgLS1sb2NhbHN0YXRlZGlyPSogfCAtLWxvY2Fsc3RhdGVkaT0qIHwgLS1sb2NhbHN0YXRlZD0qIFwKLSAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiBcCi0gIHwgLS1sb2NhbHM9KiB8IC0tbG9jYWw9KiB8IC0tbG9jYT0qIHwgLS1sb2M9KiB8IC0tbG89KikKKyAgfCAtLWxvY2Fsc3RhdGU9KiB8IC0tbG9jYWxzdGF0PSogfCAtLWxvY2Fsc3RhPSogfCAtLWxvY2Fsc3Q9KiB8IC0tbG9jYWxzPSopCiAgICAgbG9jYWxzdGF0ZWRpcj0kYWNfb3B0YXJnIDs7CiAKICAgLW1hbmRpciB8IC0tbWFuZGlyIHwgLS1tYW5kaSB8IC0tbWFuZCB8IC0tbWFuIHwgLS1tYSB8IC0tbSkKQEAgLTY5MSw2ICsxMzI1LDE2IEBACiAgIHwgLS1wcm9nci10cmE9KiB8IC0tcHJvZ3JhbS10cj0qIHwgLS1wcm9ncmFtLXQ9KikKICAgICBwcm9ncmFtX3RyYW5zZm9ybV9uYW1lPSRhY19vcHRhcmcgOzsKIAorICAtcGRmZGlyIHwgLS1wZGZkaXIgfCAtLXBkZmRpIHwgLS1wZGZkIHwgLS1wZGYgfCAtLXBkKQorICAgIGFjX3ByZXY9cGRmZGlyIDs7CisgIC1wZGZkaXI9KiB8IC0tcGRmZGlyPSogfCAtLXBkZmRpPSogfCAtLXBkZmQ9KiB8IC0tcGRmPSogfCAtLXBkPSopCisgICAgcGRmZGlyPSRhY19vcHRhcmcgOzsKKworICAtcHNkaXIgfCAtLXBzZGlyIHwgLS1wc2RpIHwgLS1wc2QgfCAtLXBzKQorICAgIGFjX3ByZXY9cHNkaXIgOzsKKyAgLXBzZGlyPSogfCAtLXBzZGlyPSogfCAtLXBzZGk9KiB8IC0tcHNkPSogfCAtLXBzPSopCisgICAgcHNkaXI9JGFjX29wdGFyZyA7OworCiAgIC1xIHwgLXF1aWV0IHwgLS1xdWlldCB8IC0tcXVpZSB8IC0tcXVpIHwgLS1xdSB8IC0tcSBcCiAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQogICAgIHNpbGVudD15ZXMgOzsKQEAgLTc0MSwyNiArMTM4NSwzNiBAQAogICAgIGFjX2luaXRfdmVyc2lvbj06IDs7CiAKICAgLXdpdGgtKiB8IC0td2l0aC0qKQotICAgIGFjX3BhY2thZ2U9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4LSp3aXRoLVwoW149XSpcKSdgCisgICAgYWNfdXNlcm9wdD1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGgtXChbXj1dKlwpJ2AKICAgICAjIFJlamVjdCBuYW1lcyB0aGF0IGFyZSBub3QgdmFsaWQgc2hlbGwgdmFyaWFibGUgbmFtZXMuCi0gICAgZXhwciAieCRhY19wYWNrYWdlIiA6ICIuKlteLV8kYXNfY3JfYWxudW1dIiA+L2Rldi9udWxsICYmCi0gICAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfcGFja2FnZSIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICBhY19wYWNrYWdlPWBlY2hvICRhY19wYWNrYWdlfCBzZWQgJ3MvLS9fL2cnYAotICAgIGNhc2UgJGFjX29wdGlvbiBpbgotICAgICAgKj0qKSBhY19vcHRhcmc9YGVjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgOzsKLSAgICAgICopIGFjX29wdGFyZz15ZXMgOzsKKyAgICBleHByICJ4JGFjX3VzZXJvcHQiIDogIi4qW14tKy5fJGFzX2NyX2FsbnVtXSIgPi9kZXYvbnVsbCAmJgorICAgICAgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgcGFja2FnZSBuYW1lOiAkYWNfdXNlcm9wdCIKKyAgICBhY191c2Vyb3B0X29yaWc9JGFjX3VzZXJvcHQKKyAgICBhY191c2Vyb3B0PWAkYXNfZWNobyAiJGFjX3VzZXJvcHQiIHwgc2VkICdzL1stKy5dL18vZydgCisgICAgY2FzZSAkYWNfdXNlcl9vcHRzIGluCisgICAgICAqIgorIndpdGhfJGFjX3VzZXJvcHQiCisiKikgOzsKKyAgICAgICopIGFjX3VucmVjb2duaXplZF9vcHRzPSIkYWNfdW5yZWNvZ25pemVkX29wdHMkYWNfdW5yZWNvZ25pemVkX3NlcC0td2l0aC0kYWNfdXNlcm9wdF9vcmlnIgorCSBhY191bnJlY29nbml6ZWRfc2VwPScsICc7OwogICAgIGVzYWMKLSAgICBldmFsICJ3aXRoXyRhY19wYWNrYWdlPSckYWNfb3B0YXJnJyIgOzsKKyAgICBldmFsIHdpdGhfJGFjX3VzZXJvcHQ9XCRhY19vcHRhcmcgOzsKIAogICAtd2l0aG91dC0qIHwgLS13aXRob3V0LSopCi0gICAgYWNfcGFja2FnZT1gZXhwciAieCRhY19vcHRpb24iIDogJ3gtKndpdGhvdXQtXCguKlwpJ2AKKyAgICBhY191c2Vyb3B0PWBleHByICJ4JGFjX29wdGlvbiIgOiAneC0qd2l0aG91dC1cKC4qXCknYAogICAgICMgUmVqZWN0IG5hbWVzIHRoYXQgYXJlIG5vdCB2YWxpZCBzaGVsbCB2YXJpYWJsZSBuYW1lcy4KLSAgICBleHByICJ4JGFjX3BhY2thZ2UiIDogIi4qW14tXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCBwYWNrYWdlIG5hbWU6ICRhY19wYWNrYWdlIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX3BhY2thZ2U9YGVjaG8gJGFjX3BhY2thZ2UgfCBzZWQgJ3MvLS9fL2cnYAotICAgIGV2YWwgIndpdGhfJGFjX3BhY2thZ2U9bm8iIDs7CisgICAgZXhwciAieCRhY191c2Vyb3B0IiA6ICIuKlteLSsuXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHBhY2thZ2UgbmFtZTogJGFjX3VzZXJvcHQiCisgICAgYWNfdXNlcm9wdF9vcmlnPSRhY191c2Vyb3B0CisgICAgYWNfdXNlcm9wdD1gJGFzX2VjaG8gIiRhY191c2Vyb3B0IiB8IHNlZCAncy9bLSsuXS9fL2cnYAorICAgIGNhc2UgJGFjX3VzZXJfb3B0cyBpbgorICAgICAgKiIKKyJ3aXRoXyRhY191c2Vyb3B0IgorIiopIDs7CisgICAgICAqKSBhY191bnJlY29nbml6ZWRfb3B0cz0iJGFjX3VucmVjb2duaXplZF9vcHRzJGFjX3VucmVjb2duaXplZF9zZXAtLXdpdGhvdXQtJGFjX3VzZXJvcHRfb3JpZyIKKwkgYWNfdW5yZWNvZ25pemVkX3NlcD0nLCAnOzsKKyAgICBlc2FjCisgICAgZXZhbCB3aXRoXyRhY191c2Vyb3B0PW5vIDs7CiAKICAgLS14KQogICAgICMgT2Jzb2xldGU7IHVzZSAtLXdpdGgteC4KQEAgLTc4MCwyNyArMTQzNCwyNiBAQAogICB8IC0teC1saWJyYXI9KiB8IC0teC1saWJyYT0qIHwgLS14LWxpYnI9KiB8IC0teC1saWI9KiB8IC0teC1saT0qIHwgLS14LWw9KikKICAgICB4X2xpYnJhcmllcz0kYWNfb3B0YXJnIDs7CiAKLSAgLSopIHsgZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJGFjX29wdGlvbgotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkYWNfb3B0aW9uJworVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiIKICAgICA7OwogCiAgICo9KikKICAgICBhY19lbnZ2YXI9YGV4cHIgIngkYWNfb3B0aW9uIiA6ICd4XChbXj1dKlwpPSdgCiAgICAgIyBSZWplY3QgbmFtZXMgdGhhdCBhcmUgbm90IHZhbGlkIHNoZWxsIHZhcmlhYmxlIG5hbWVzLgotICAgIGV4cHIgIngkYWNfZW52dmFyIiA6ICIuKlteXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIHsgZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB2YXJpYWJsZSBuYW1lOiAkYWNfZW52dmFyIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGFjX29wdGFyZz1gZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAKLSAgICBldmFsICIkYWNfZW52dmFyPSckYWNfb3B0YXJnJyIKKyAgICBjYXNlICRhY19lbnZ2YXIgaW4gIygKKyAgICAgICcnIHwgWzAtOV0qIHwgKlshXyRhc19jcl9hbG51bV0qICkKKyAgICAgIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhcmlhYmxlIG5hbWU6IFxgJGFjX2VudnZhciciIDs7CisgICAgZXNhYworICAgIGV2YWwgJGFjX2VudnZhcj1cJGFjX29wdGFyZwogICAgIGV4cG9ydCAkYWNfZW52dmFyIDs7CiAKICAgKikKICAgICAjIEZJWE1FOiBzaG91bGQgYmUgcmVtb3ZlZCBpbiBhdXRvY29uZiAzLjAuCi0gICAgZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB5b3Ugc2hvdWxkIHVzZSAtLWJ1aWxkLCAtLWhvc3QsIC0tdGFyZ2V0IiA+JjIKICAgICBleHByICJ4JGFjX29wdGlvbiIgOiAiLipbXi0uXyRhc19jcl9hbG51bV0iID4vZGV2L251bGwgJiYKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogaW52YWxpZCBob3N0IHR5cGU6ICRhY19vcHRpb24iID4mMgotICAgIDogJHtidWlsZF9hbGlhcz0kYWNfb3B0aW9ufSAke2hvc3RfYWxpYXM9JGFjX29wdGlvbn0gJHt0YXJnZXRfYWxpYXM9JGFjX29wdGlvbn0KKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGludmFsaWQgaG9zdCB0eXBlOiAkYWNfb3B0aW9uIiA+JjIKKyAgICA6ICIke2J1aWxkX2FsaWFzPSRhY19vcHRpb259ICR7aG9zdF9hbGlhcz0kYWNfb3B0aW9ufSAke3RhcmdldF9hbGlhcz0kYWNfb3B0aW9ufSIKICAgICA7OwogCiAgIGVzYWMKQEAgLTgwOCwzMSArMTQ2MSwzNiBAQAogCiBpZiB0ZXN0IC1uICIkYWNfcHJldiI7IHRoZW4KICAgYWNfb3B0aW9uPS0tYGVjaG8gJGFjX3ByZXYgfCBzZWQgJ3MvXy8tL2cnYAotICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IG1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgYXNfZm5fZXJyb3IgJD8gIm1pc3NpbmcgYXJndW1lbnQgdG8gJGFjX29wdGlvbiIKIGZpCiAKLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBleGVjX3ByZWZpeCBwcmVmaXgKLWRvCi0gIGV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogfCBOT05FIHwgJycgKSA7OwotICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyI7IHRoZW4KKyAgY2FzZSAkZW5hYmxlX29wdGlvbl9jaGVja2luZyBpbgorICAgIG5vKSA7OworICAgIGZhdGFsKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgOzsKKyAgICAqKSAgICAgJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiYyIDs7CiAgIGVzYWMKLWRvbmUKK2ZpCiAKLSMgQmUgc3VyZSB0byBoYXZlIGFic29sdXRlIHBhdGhzLgotZm9yIGFjX3ZhciBpbiBiaW5kaXIgc2JpbmRpciBsaWJleGVjZGlyIGRhdGFkaXIgc3lzY29uZmRpciBzaGFyZWRzdGF0ZWRpciBcCi0JICAgICAgbG9jYWxzdGF0ZWRpciBsaWJkaXIgaW5jbHVkZWRpciBvbGRpbmNsdWRlZGlyIGluZm9kaXIgbWFuZGlyCisjIENoZWNrIGFsbCBkaXJlY3RvcnkgYXJndW1lbnRzIGZvciBjb25zaXN0ZW5jeS4KK2ZvciBhY192YXIgaW4JZXhlY19wcmVmaXggcHJlZml4IGJpbmRpciBzYmluZGlyIGxpYmV4ZWNkaXIgZGF0YXJvb3RkaXIgXAorCQlkYXRhZGlyIHN5c2NvbmZkaXIgc2hhcmVkc3RhdGVkaXIgbG9jYWxzdGF0ZWRpciBpbmNsdWRlZGlyIFwKKwkJb2xkaW5jbHVkZWRpciBkb2NkaXIgaW5mb2RpciBodG1sZGlyIGR2aWRpciBwZGZkaXIgcHNkaXIgXAorCQlsaWJkaXIgbG9jYWxlZGlyIG1hbmRpcgogZG8KLSAgZXZhbCBhY192YWw9JGBlY2hvICRhY192YXJgCisgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAjIFJlbW92ZSB0cmFpbGluZyBzbGFzaGVzLgogICBjYXNlICRhY192YWwgaW4KLSAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSA7OwotICAgICopICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGV4cGVjdGVkIGFuIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIGZvciAtLSRhY192YXI6ICRhY192YWwiID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OzsKKyAgICAqLyApCisgICAgICBhY192YWw9YGV4cHIgIlgkYWNfdmFsIiA6ICdYXCguKlteL11cKScgXHwgIlgkYWNfdmFsIiA6ICdYXCguKlwpJ2AKKyAgICAgIGV2YWwgJGFjX3Zhcj1cJGFjX3ZhbDs7CiAgIGVzYWMKKyAgIyBCZSBzdXJlIHRvIGhhdmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWVzLgorICBjYXNlICRhY192YWwgaW4KKyAgICBbXFwvJF0qIHwgPzpbXFwvXSogKSAgY29udGludWU7OworICAgIE5PTkUgfCAnJyApIGNhc2UgJGFjX3ZhciBpbiAqcHJlZml4ICkgY29udGludWU7OyBlc2FjOzsKKyAgZXNhYworICBhc19mbl9lcnJvciAkPyAiZXhwZWN0ZWQgYW4gYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgZm9yIC0tJGFjX3ZhcjogJGFjX3ZhbCIKIGRvbmUKIAogIyBUaGVyZSBtaWdodCBiZSBwZW9wbGUgd2hvIGRlcGVuZCBvbiB0aGUgb2xkIGJyb2tlbiBiZWhhdmlvcjogYCRob3N0JwpAQCAtODQ2LDggKzE1MDQsOCBAQAogaWYgdGVzdCAieCRob3N0X2FsaWFzIiAhPSB4OyB0aGVuCiAgIGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiID0geDsgdGhlbgogICAgIGNyb3NzX2NvbXBpbGluZz1tYXliZQotICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogSWYgeW91IHdhbnRlZCB0byBzZXQgdGhlIC0tYnVpbGQgdHlwZSwgZG9uJ3QgdXNlIC0taG9zdC4KLSAgICBJZiBhIGNyb3NzIGNvbXBpbGVyIGlzIGRldGVjdGVkIHRoZW4gY3Jvc3MgY29tcGlsZSBtb2RlIHdpbGwgYmUgdXNlZC4iID4mMgorICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGlmIHlvdSB3YW50ZWQgdG8gc2V0IHRoZSAtLWJ1aWxkIHR5cGUsIGRvbid0IHVzZSAtLWhvc3QuCisgICAgSWYgYSBjcm9zcyBjb21waWxlciBpcyBkZXRlY3RlZCB0aGVuIGNyb3NzIGNvbXBpbGUgbW9kZSB3aWxsIGJlIHVzZWQiID4mMgogICBlbGlmIHRlc3QgIngkYnVpbGRfYWxpYXMiICE9ICJ4JGhvc3RfYWxpYXMiOyB0aGVuCiAgICAgY3Jvc3NfY29tcGlsaW5nPXllcwogICBmaQpAQCAtODU5LDk0ICsxNTE3LDcyIEBACiB0ZXN0ICIkc2lsZW50IiA9IHllcyAmJiBleGVjIDY+L2Rldi9udWxsCiAKIAorYWNfcHdkPWBwd2RgICYmIHRlc3QgLW4gIiRhY19wd2QiICYmCithY19sc19kaT1gbHMgLWRpIC5gICYmCithY19wd2RfbHNfZGk9YGNkICIkYWNfcHdkIiAmJiBscyAtZGkgLmAgfHwKKyAgYXNfZm5fZXJyb3IgJD8gIndvcmtpbmcgZGlyZWN0b3J5IGNhbm5vdCBiZSBkZXRlcm1pbmVkIgordGVzdCAiWCRhY19sc19kaSIgPSAiWCRhY19wd2RfbHNfZGkiIHx8CisgIGFzX2ZuX2Vycm9yICQ/ICJwd2QgZG9lcyBub3QgcmVwb3J0IG5hbWUgb2Ygd29ya2luZyBkaXJlY3RvcnkiCisKKwogIyBGaW5kIHRoZSBzb3VyY2UgZmlsZXMsIGlmIGxvY2F0aW9uIHdhcyBub3Qgc3BlY2lmaWVkLgogaWYgdGVzdCAteiAiJHNyY2RpciI7IHRoZW4KICAgYWNfc3JjZGlyX2RlZmF1bHRlZD15ZXMKLSAgIyBUcnkgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoaXMgc2NyaXB0LCB0aGVuIGl0cyBwYXJlbnQuCi0gIGFjX2NvbmZkaXI9YChkaXJuYW1lICIkMCIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiQwIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCknIFx8IFwKLQkgLiAgICAgOiAnXCguXCknIDI+L2Rldi9udWxsIHx8Ci1lY2hvIFgiJDAiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAorICAjIFRyeSB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhpcyBzY3JpcHQsIHRoZW4gdGhlIHBhcmVudCBkaXJlY3RvcnkuCisgIGFjX2NvbmZkaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfbXlzZWxmIiB8fAorJGFzX2V4cHIgWCIkYXNfbXlzZWxmIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19teXNlbGYiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX215c2VsZiIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfbXlzZWxmIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX215c2VsZiIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCiAgIHNyY2Rpcj0kYWNfY29uZmRpcgotICBpZiB0ZXN0ICEgLXIgJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGU7IHRoZW4KKyAgaWYgdGVzdCAhIC1yICIkc3JjZGlyLyRhY191bmlxdWVfZmlsZSI7IHRoZW4KICAgICBzcmNkaXI9Li4KICAgZmkKIGVsc2UKICAgYWNfc3JjZGlyX2RlZmF1bHRlZD1ubwogZmkKLWlmIHRlc3QgISAtciAkc3JjZGlyLyRhY191bmlxdWVfZmlsZTsgdGhlbgotICBpZiB0ZXN0ICIkYWNfc3JjZGlyX2RlZmF1bHRlZCIgPSB5ZXM7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJGFjX2NvbmZkaXIgb3IgLi4iID4mMgotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGVsc2UKLSAgICB7IGVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIHNvdXJjZXMgKCRhY191bmlxdWVfZmlsZSkgaW4gJHNyY2RpciIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgZmkKK2lmIHRlc3QgISAtciAiJHNyY2Rpci8kYWNfdW5pcXVlX2ZpbGUiOyB0aGVuCisgIHRlc3QgIiRhY19zcmNkaXJfZGVmYXVsdGVkIiA9IHllcyAmJiBzcmNkaXI9IiRhY19jb25mZGlyIG9yIC4uIgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGZpbmQgc291cmNlcyAoJGFjX3VuaXF1ZV9maWxlKSBpbiAkc3JjZGlyIgogZmkKLShjZCAkc3JjZGlyICYmIHRlc3QgLXIgLi8kYWNfdW5pcXVlX2ZpbGUpIDI+L2Rldi9udWxsIHx8Ci0gIHsgZWNobyAiJGFzX21lOiBlcnJvcjogc291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIgPiYyCi0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLXNyY2Rpcj1gZWNobyAiJHNyY2RpciIgfCBzZWQgJ3MlXChbXlxcL11cKVtcXC9dKiQlXDElJ2AKLWFjX2Vudl9idWlsZF9hbGlhc19zZXQ9JHtidWlsZF9hbGlhcytzZXR9Ci1hY19lbnZfYnVpbGRfYWxpYXNfdmFsdWU9JGJ1aWxkX2FsaWFzCi1hY19jdl9lbnZfYnVpbGRfYWxpYXNfc2V0PSR7YnVpbGRfYWxpYXMrc2V0fQotYWNfY3ZfZW52X2J1aWxkX2FsaWFzX3ZhbHVlPSRidWlsZF9hbGlhcwotYWNfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9Ci1hY19lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcwotYWNfY3ZfZW52X2hvc3RfYWxpYXNfc2V0PSR7aG9zdF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfaG9zdF9hbGlhc192YWx1ZT0kaG9zdF9hbGlhcwotYWNfZW52X3RhcmdldF9hbGlhc19zZXQ9JHt0YXJnZXRfYWxpYXMrc2V0fQotYWNfZW52X3RhcmdldF9hbGlhc192YWx1ZT0kdGFyZ2V0X2FsaWFzCi1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3NldD0ke3RhcmdldF9hbGlhcytzZXR9Ci1hY19jdl9lbnZfdGFyZ2V0X2FsaWFzX3ZhbHVlPSR0YXJnZXRfYWxpYXMKLWFjX2Vudl9DQ19zZXQ9JHtDQytzZXR9Ci1hY19lbnZfQ0NfdmFsdWU9JENDCi1hY19jdl9lbnZfQ0Nfc2V0PSR7Q0Mrc2V0fQotYWNfY3ZfZW52X0NDX3ZhbHVlPSRDQwotYWNfZW52X0NGTEFHU19zZXQ9JHtDRkxBR1Mrc2V0fQotYWNfZW52X0NGTEFHU192YWx1ZT0kQ0ZMQUdTCi1hY19jdl9lbnZfQ0ZMQUdTX3NldD0ke0NGTEFHUytzZXR9Ci1hY19jdl9lbnZfQ0ZMQUdTX3ZhbHVlPSRDRkxBR1MKLWFjX2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQotYWNfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKLWFjX2N2X2Vudl9MREZMQUdTX3NldD0ke0xERkxBR1Mrc2V0fQotYWNfY3ZfZW52X0xERkxBR1NfdmFsdWU9JExERkxBR1MKLWFjX2Vudl9DUFBGTEFHU19zZXQ9JHtDUFBGTEFHUytzZXR9Ci1hY19lbnZfQ1BQRkxBR1NfdmFsdWU9JENQUEZMQUdTCi1hY19jdl9lbnZfQ1BQRkxBR1Nfc2V0PSR7Q1BQRkxBR1Mrc2V0fQotYWNfY3ZfZW52X0NQUEZMQUdTX3ZhbHVlPSRDUFBGTEFHUwotYWNfZW52X0NQUF9zZXQ9JHtDUFArc2V0fQotYWNfZW52X0NQUF92YWx1ZT0kQ1BQCi1hY19jdl9lbnZfQ1BQX3NldD0ke0NQUCtzZXR9Ci1hY19jdl9lbnZfQ1BQX3ZhbHVlPSRDUFAKLWFjX2Vudl9DWFhfc2V0PSR7Q1hYK3NldH0KLWFjX2Vudl9DWFhfdmFsdWU9JENYWAotYWNfY3ZfZW52X0NYWF9zZXQ9JHtDWFgrc2V0fQotYWNfY3ZfZW52X0NYWF92YWx1ZT0kQ1hYCi1hY19lbnZfQ1hYRkxBR1Nfc2V0PSR7Q1hYRkxBR1Mrc2V0fQotYWNfZW52X0NYWEZMQUdTX3ZhbHVlPSRDWFhGTEFHUwotYWNfY3ZfZW52X0NYWEZMQUdTX3NldD0ke0NYWEZMQUdTK3NldH0KLWFjX2N2X2Vudl9DWFhGTEFHU192YWx1ZT0kQ1hYRkxBR1MKLWFjX2Vudl9DWFhDUFBfc2V0PSR7Q1hYQ1BQK3NldH0KLWFjX2Vudl9DWFhDUFBfdmFsdWU9JENYWENQUAotYWNfY3ZfZW52X0NYWENQUF9zZXQ9JHtDWFhDUFArc2V0fQotYWNfY3ZfZW52X0NYWENQUF92YWx1ZT0kQ1hYQ1BQCi1hY19lbnZfRjc3X3NldD0ke0Y3NytzZXR9Ci1hY19lbnZfRjc3X3ZhbHVlPSRGNzcKLWFjX2N2X2Vudl9GNzdfc2V0PSR7Rjc3K3NldH0KLWFjX2N2X2Vudl9GNzdfdmFsdWU9JEY3NwotYWNfZW52X0ZGTEFHU19zZXQ9JHtGRkxBR1Mrc2V0fQotYWNfZW52X0ZGTEFHU192YWx1ZT0kRkZMQUdTCi1hY19jdl9lbnZfRkZMQUdTX3NldD0ke0ZGTEFHUytzZXR9Ci1hY19jdl9lbnZfRkZMQUdTX3ZhbHVlPSRGRkxBR1MKK2FjX21zZz0ic291cmNlcyBhcmUgaW4gJHNyY2RpciwgYnV0IFxgY2QgJHNyY2RpcicgZG9lcyBub3Qgd29yayIKK2FjX2Fic19jb25mZGlyPWAoCisJY2QgIiRzcmNkaXIiICYmIHRlc3QgLXIgIi4vJGFjX3VuaXF1ZV9maWxlIiB8fCBhc19mbl9lcnJvciAkPyAiJGFjX21zZyIKKwlwd2QpYAorIyBXaGVuIGJ1aWxkaW5nIGluIHBsYWNlLCBzZXQgc3JjZGlyPS4KK2lmIHRlc3QgIiRhY19hYnNfY29uZmRpciIgPSAiJGFjX3B3ZCI7IHRoZW4KKyAgc3JjZGlyPS4KK2ZpCisjIFJlbW92ZSB1bm5lY2Vzc2FyeSB0cmFpbGluZyBzbGFzaGVzIGZyb20gc3JjZGlyLgorIyBEb3VibGUgc2xhc2hlcyBpbiBmaWxlIG5hbWVzIGluIG9iamVjdCBmaWxlIGRlYnVnZ2luZyBpbmZvCisjIG1lc3MgdXAgTS14IGdkYiBpbiBFbWFjcy4KK2Nhc2UgJHNyY2RpciBpbgorKi8pIHNyY2Rpcj1gZXhwciAiWCRzcmNkaXIiIDogJ1hcKC4qW14vXVwpJyBcfCAiWCRzcmNkaXIiIDogJ1hcKC4qXCknYDs7Citlc2FjCitmb3IgYWNfdmFyIGluICRhY19wcmVjaW91c192YXJzOyBkbworICBldmFsIGFjX2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorICBldmFsIGFjX2N2X2Vudl8ke2FjX3Zhcn1fc2V0PVwkeyR7YWNfdmFyfStzZXR9CisgIGV2YWwgYWNfY3ZfZW52XyR7YWNfdmFyfV92YWx1ZT1cJCR7YWNfdmFyfQorZG9uZQogCiAjCiAjIFJlcG9ydCB0aGUgLS1oZWxwIG1lc3NhZ2UuCkBAIC05NTUsNyArMTU5MSw3IEBACiAgICMgT21pdCBzb21lIGludGVybmFsIG9yIG9ic29sZXRlIG9wdGlvbnMgdG8gbWFrZSB0aGUgbGlzdCBsZXNzIGltcG9zaW5nLgogICAjIFRoaXMgbWVzc2FnZSBpcyB0b28gbG9uZyB0byBiZSBhIHN0cmluZyBpbiB0aGUgQS9VWCAzLjEgc2guCiAgIGNhdCA8PF9BQ0VPRgotXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgTmV0LVNOTVAgNS40LjQgdG8gYWRhcHQgdG8gbWFueSBraW5kcyBvZiBzeXN0ZW1zLgorXGBjb25maWd1cmUnIGNvbmZpZ3VyZXMgTmV0LVNOTVAgNS43LjMucmMxIHRvIGFkYXB0IHRvIG1hbnkga2luZHMgb2Ygc3lzdGVtcy4KIAogVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFtWQVI9VkFMVUVdLi4uCiAKQEAgLTk2OSwyMCArMTYwNSwxNyBAQAogICAgICAgLS1oZWxwPXNob3J0ICAgICAgICBkaXNwbGF5IG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhpcyBwYWNrYWdlCiAgICAgICAtLWhlbHA9cmVjdXJzaXZlICAgIGRpc3BsYXkgdGhlIHNob3J0IGhlbHAgb2YgYWxsIHRoZSBpbmNsdWRlZCBwYWNrYWdlcwogICAtViwgLS12ZXJzaW9uICAgICAgICAgICBkaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gYW5kIGV4aXQKLSAgLXEsIC0tcXVpZXQsIC0tc2lsZW50ICAgZG8gbm90IHByaW50IFxgY2hlY2tpbmcuLi4nIG1lc3NhZ2VzCisgIC1xLCAtLXF1aWV0LCAtLXNpbGVudCAgIGRvIG5vdCBwcmludCBcYGNoZWNraW5nIC4uLicgbWVzc2FnZXMKICAgICAgIC0tY2FjaGUtZmlsZT1GSUxFICAgY2FjaGUgdGVzdCByZXN1bHRzIGluIEZJTEUgW2Rpc2FibGVkXQogICAtQywgLS1jb25maWctY2FjaGUgICAgICBhbGlhcyBmb3IgXGAtLWNhY2hlLWZpbGU9Y29uZmlnLmNhY2hlJwogICAtbiwgLS1uby1jcmVhdGUgICAgICAgICBkbyBub3QgY3JlYXRlIG91dHB1dCBmaWxlcwogICAgICAgLS1zcmNkaXI9RElSICAgICAgICBmaW5kIHRoZSBzb3VyY2VzIGluIERJUiBbY29uZmlndXJlIGRpciBvciBcYC4uJ10KIAotX0FDRU9GCi0KLSAgY2F0IDw8X0FDRU9GCiBJbnN0YWxsYXRpb24gZGlyZWN0b3JpZXM6CiAgIC0tcHJlZml4PVBSRUZJWCAgICAgICAgIGluc3RhbGwgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGZpbGVzIGluIFBSRUZJWAotCQkJICBbJGFjX2RlZmF1bHRfcHJlZml4XQorICAgICAgICAgICAgICAgICAgICAgICAgICBbJGFjX2RlZmF1bHRfcHJlZml4XQogICAtLWV4ZWMtcHJlZml4PUVQUkVGSVggICBpbnN0YWxsIGFyY2hpdGVjdHVyZS1kZXBlbmRlbnQgZmlsZXMgaW4gRVBSRUZJWAotCQkJICBbUFJFRklYXQorICAgICAgICAgICAgICAgICAgICAgICAgICBbUFJFRklYXQogCiBCeSBkZWZhdWx0LCBcYG1ha2UgaW5zdGFsbCcgd2lsbCBpbnN0YWxsIGFsbCB0aGUgZmlsZXMgaW4KIFxgJGFjX2RlZmF1bHRfcHJlZml4L2JpbicsIFxgJGFjX2RlZmF1bHRfcHJlZml4L2xpYicgZXRjLiAgWW91IGNhbiBzcGVjaWZ5CkBAIC05OTIsMTggKzE2MjUsMjUgQEAKIEZvciBiZXR0ZXIgY29udHJvbCwgdXNlIHRoZSBvcHRpb25zIGJlbG93LgogCiBGaW5lIHR1bmluZyBvZiB0aGUgaW5zdGFsbGF0aW9uIGRpcmVjdG9yaWVzOgotICAtLWJpbmRpcj1ESVIgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQotICAtLXNiaW5kaXI9RElSICAgICAgICAgIHN5c3RlbSBhZG1pbiBleGVjdXRhYmxlcyBbRVBSRUZJWC9zYmluXQotICAtLWxpYmV4ZWNkaXI9RElSICAgICAgIHByb2dyYW0gZXhlY3V0YWJsZXMgW0VQUkVGSVgvbGliZXhlY10KLSAgLS1kYXRhZGlyPURJUiAgICAgICAgICByZWFkLW9ubHkgYXJjaGl0ZWN0dXJlLWluZGVwZW5kZW50IGRhdGEgW1BSRUZJWC9zaGFyZV0KLSAgLS1zeXNjb25mZGlyPURJUiAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KLSAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICBtb2RpZmlhYmxlIGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtQUkVGSVgvY29tXQotICAtLWxvY2Fsc3RhdGVkaXI9RElSICAgIG1vZGlmaWFibGUgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL3Zhcl0KLSAgLS1saWJkaXI9RElSICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQotICAtLWluY2x1ZGVkaXI9RElSICAgICAgIEMgaGVhZGVyIGZpbGVzIFtQUkVGSVgvaW5jbHVkZV0KLSAgLS1vbGRpbmNsdWRlZGlyPURJUiAgICBDIGhlYWRlciBmaWxlcyBmb3Igbm9uLWdjYyBbL3Vzci9pbmNsdWRlXQotICAtLWluZm9kaXI9RElSICAgICAgICAgIGluZm8gZG9jdW1lbnRhdGlvbiBbUFJFRklYL2luZm9dCi0gIC0tbWFuZGlyPURJUiAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW1BSRUZJWC9tYW5dCisgIC0tYmluZGlyPURJUiAgICAgICAgICAgIHVzZXIgZXhlY3V0YWJsZXMgW0VQUkVGSVgvYmluXQorICAtLXNiaW5kaXI9RElSICAgICAgICAgICBzeXN0ZW0gYWRtaW4gZXhlY3V0YWJsZXMgW0VQUkVGSVgvc2Jpbl0KKyAgLS1saWJleGVjZGlyPURJUiAgICAgICAgcHJvZ3JhbSBleGVjdXRhYmxlcyBbRVBSRUZJWC9saWJleGVjXQorICAtLXN5c2NvbmZkaXI9RElSICAgICAgICByZWFkLW9ubHkgc2luZ2xlLW1hY2hpbmUgZGF0YSBbUFJFRklYL2V0Y10KKyAgLS1zaGFyZWRzdGF0ZWRpcj1ESVIgICAgbW9kaWZpYWJsZSBhcmNoaXRlY3R1cmUtaW5kZXBlbmRlbnQgZGF0YSBbUFJFRklYL2NvbV0KKyAgLS1sb2NhbHN0YXRlZGlyPURJUiAgICAgbW9kaWZpYWJsZSBzaW5nbGUtbWFjaGluZSBkYXRhIFtQUkVGSVgvdmFyXQorICAtLWxpYmRpcj1ESVIgICAgICAgICAgICBvYmplY3QgY29kZSBsaWJyYXJpZXMgW0VQUkVGSVgvbGliXQorICAtLWluY2x1ZGVkaXI9RElSICAgICAgICBDIGhlYWRlciBmaWxlcyBbUFJFRklYL2luY2x1ZGVdCisgIC0tb2xkaW5jbHVkZWRpcj1ESVIgICAgIEMgaGVhZGVyIGZpbGVzIGZvciBub24tZ2NjIFsvdXNyL2luY2x1ZGVdCisgIC0tZGF0YXJvb3RkaXI9RElSICAgICAgIHJlYWQtb25seSBhcmNoLi1pbmRlcGVuZGVudCBkYXRhIHJvb3QgW1BSRUZJWC9zaGFyZV0KKyAgLS1kYXRhZGlyPURJUiAgICAgICAgICAgcmVhZC1vbmx5IGFyY2hpdGVjdHVyZS1pbmRlcGVuZGVudCBkYXRhIFtEQVRBUk9PVERJUl0KKyAgLS1pbmZvZGlyPURJUiAgICAgICAgICAgaW5mbyBkb2N1bWVudGF0aW9uIFtEQVRBUk9PVERJUi9pbmZvXQorICAtLWxvY2FsZWRpcj1ESVIgICAgICAgICBsb2NhbGUtZGVwZW5kZW50IGRhdGEgW0RBVEFST09URElSL2xvY2FsZV0KKyAgLS1tYW5kaXI9RElSICAgICAgICAgICAgbWFuIGRvY3VtZW50YXRpb24gW0RBVEFST09URElSL21hbl0KKyAgLS1kb2NkaXI9RElSICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiByb290IFtEQVRBUk9PVERJUi9kb2MvbmV0LXNubXBdCisgIC0taHRtbGRpcj1ESVIgICAgICAgICAgIGh0bWwgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLWR2aWRpcj1ESVIgICAgICAgICAgICBkdmkgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBkZmRpcj1ESVIgICAgICAgICAgICBwZGYgZG9jdW1lbnRhdGlvbiBbRE9DRElSXQorICAtLXBzZGlyPURJUiAgICAgICAgICAgICBwcyBkb2N1bWVudGF0aW9uIFtET0NESVJdCiBfQUNFT0YKIAogICBjYXQgPDxcX0FDRU9GCkBAIC0xMDE3LDM1ICsxNjU3LDQ3IEBACiAKIGlmIHRlc3QgLW4gIiRhY19pbml0X2hlbHAiOyB0aGVuCiAgIGNhc2UgJGFjX2luaXRfaGVscCBpbgotICAgICBzaG9ydCB8IHJlY3Vyc2l2ZSApIGVjaG8gIkNvbmZpZ3VyYXRpb24gb2YgTmV0LVNOTVAgNS40LjQ6Ijs7CisgICAgIHNob3J0IHwgcmVjdXJzaXZlICkgZWNobyAiQ29uZmlndXJhdGlvbiBvZiBOZXQtU05NUCA1LjcuMy5yYzE6Ijs7CiAgICBlc2FjCiAgIGNhdCA8PFxfQUNFT0YKIAogT3B0aW9uYWwgRmVhdHVyZXM6CisgIC0tZGlzYWJsZS1vcHRpb24tY2hlY2tpbmcgIGlnbm9yZSB1bnJlY29nbml6ZWQgLS1lbmFibGUvLS13aXRoIG9wdGlvbnMKICAgLS1kaXNhYmxlLUZFQVRVUkUgICAgICAgZG8gbm90IGluY2x1ZGUgRkVBVFVSRSAoc2FtZSBhcyAtLWVuYWJsZS1GRUFUVVJFPW5vKQogICAtLWVuYWJsZS1GRUFUVVJFWz1BUkddICBpbmNsdWRlIEZFQVRVUkUgW0FSRz15ZXNdCi0gIC0tZW5hYmxlLWFzLW5lZWRlZCAgICAgICAgICAgICAgTGluayBsaWJwZXJsIGFnYWluc3QgTmV0LVNOTVAgbGlicmFyaWVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gYXBwbGljYXRpb25zLiBXZSByZWNvbW1lbmQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhpcyBvcHRpb24gaWYgaXQgd29ya3MuCisgIC0tZGlzYWJsZS1hcy1uZWVkZWQgICAgICAgICAgICAgTGluayBsaWJwZXJsIGFnYWluc3QgYXBwbGljYXRpb25zIHJhdGhlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYW4gTmV0LVNOTVAgbGlicmFyaWVzLiBVc2Ugb25seSBpZiB0aGUgb3RoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3YXkgZG9lc24ndCB3b3JrLgogICAtLWVuYWJsZS1zaWxlbnQtbGlidG9vbCAgICAgICAgIFBhc3MgLS1zaWxlbnQgdG8gbGlidG9vbC4KIAotICAtLWVuYWJsZS1taW5pLWFnZW50ICAgICAgICAgICAgIEJ1aWxkIGEgbWluaW1hbCBhZ2VudC4KICAgLS1kaXNhYmxlLWFnZW50ICAgICAgICAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFnZW50IChzbm1wZCkuCiAgIC0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhcHBzIChzbm1wZ2V0LCAuLi4pLgogICAtLWRpc2FibGUtbWFudWFscyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtYW51YWxzLgogICAtLWRpc2FibGUtc2NyaXB0cyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBzY3JpcHRzIChtaWIyYywgLi4uKS4KICAgLS1kaXNhYmxlLW1pYnMgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWliIGZpbGVzLgorICAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nICAgIFR1cm5zIG9uIGV4dHJhIGNoZWNrcyBkdXJpbmcgY29uZmlndXJhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG1pYiBtb2R1bGVzLiBBbnkgY29uZmxpY3RzIHdpbGwgY2F1c2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgdG8gYWJvcnQgKGRlZmF1bHQgaXMgdG8gaXNzdWUgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLikKKyAgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZyAgICAgICBUdXJucyBvbiB2ZXJib3NlIG91dHB1dCBkdXJpbmcgbWliIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBwcm9jZXNzaW5nLgorICAtLWVuYWJsZS1uZXctZmVhdHVyZXMgICBDb21waWxlIGluIG5ldyBNSUIgbW9kdWxlcyBhbmQgb3RoZXIgZXhwZXJpbWVudGFsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZlYXR1cmVzIHdoaWNoIGFyZSBkdWUgdG8gYmUgaW5jbHVkZWQgaW4gZnV0dXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VzLgorICAtLWVuYWJsZS1vbGQtZmVhdHVyZXMgICBDb21waWxlIGluIG9sZCBNSUIgbW9kdWxlcyBhbmQgb3RoZXIgZGVwcmVjYXRlZAorICAgICAgICAgICAgICAgICAgICAgICAgICBmZWF0dXJlcyB3aGljaCB3ZXJlIHJlcGxhY2VkIGluIHRoZSBkZWZhdWx0IGJ1aWxkIG9mCisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMgcmVsZWFzZS4KKyAgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBJbnN0YWxsIHVjZC1zbm1wIGxvb2stYWxpa2UgaGVhZGVycyBhbmQgbGlicy4KKwogICAtLWRpc2FibGUtbWliLWxvYWRpbmcgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBwYXJzZXMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZXMgdGhlIG1pYiBmaWxlcy4KLSAgLS1kaXNhYmxlLXNubXB2MSAgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjEuCi0gIC0tZGlzYWJsZS1zbm1wdjJjICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYyYy4KLSAgLS1kaXNhYmxlLXNldC1zdXBwb3J0ICAgICAgICAgICBEbyBub3QgYWxsb3cgU05NUCBzZXQgcmVxdWVzdHMgdG8gdGhlIGFnZW50LgogICAtLWRpc2FibGUtZGVzICAgICAgICAgICAgICAgICAgIERvIG5vdCBzdXBwb3J0IERFUyBlbmNyeXB0aW9uLgogICAtLWRpc2FibGUtcHJpdmFjeSAgICAgICAgICAgICAgIERvbid0IGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgcHJpdmFjeSAoZW5jcnlwdGlvbikuCiAgIC0tZGlzYWJsZS1tZDUgICAgICAgICAgICAgICAgICAgRG8gbm90IHN1cHBvcnQgTUQ1IGF1dGhlbnRpY2F0aW9uLgogICAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgICAgICAgICAgIFVzZSB0aGUgaW50ZXJuYWwgTUQ1IHN1cHBvcnQuCiAgIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgSVB2NiByZWFkeSB2ZXJzaW9uLgotICAtLWVuYWJsZS1sb2NhbC1zbXV4ICAgICAgICAgICAgIFJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0IChieSBkZWZhdWx0KS4KKyAgLS1kaXNhYmxlLXNubXB2MSAgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjEuCisgIC0tZGlzYWJsZS1zbm1wdjJjICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYyYy4KICAgLS1lbmFibGUtZGVidWdnaW5nICAgICAgICAgICAgICBPdXRwdXRzIGV4dHJhIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhdCBhbGwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcy4gIE5vcm1hbGx5LCB5b3Ugc2hvdWxkIG5vdCBlbmFibGUgdGhpcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgaW5zdGVhZCB1c2UgdGhlIC1EIGZsYWcgb2YgdGhlIGNvbW1hbmRzLApAQCAtMTA1NCwxNyArMTcwNiw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtaWdodCBwcm92aWRlIHNvbWUgc3BlZWQgYmVuZWZpdHMuCiAgIC0tZW5hYmxlLWRldmVsb3BlciAgICAgICAgICAgICAgVHVybnMgb24gc3VwZXItZHVwZXItZXh0cmEtY29tcGlsZS13YXJuaW5ncwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdXNpbmcgZ2NjLgotICAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSAgIERpc2FibGUgVURQL1RDUCB0cmFuc3BvcnRzIGZvciBhZ2VudHguCi0gIC0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgICAgRGlzYWJsZSBhZ2VudHggc3ViYWdlbnQgY29kZSBpbiBzbm1wdHJhcGQuCi0gIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcgICAgVHVybnMgb24gZXh0cmEgY2hlY2tzIGR1cmluZyBjb25maWd1cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWliIG1vZHVsZXMuIEFueSBjb25mbGljdHMgd2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0byBhYm9ydCAoZGVmYXVsdCBpcyB0byBpc3N1ZSBhCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyBhbmQgY29udGludWUuKQotICAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnICAgICAgIFR1cm5zIG9uIHZlcmJvc2Ugb3V0cHV0IGR1cmluZyBtaWIgbW9kdWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHByb2Nlc3NpbmcuKQotICAtLWVuYWJsZS1tZmQtcmV3cml0ZXMgICAgICAgICAgIFVzZSBuZXcgTUZEIHJld3JpdGVzIG9mIG1pYiBtb2R1bGVzLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGF2YWlsYWJsZS4gKGRlZmF1bHQgaXMgdG8gdXNlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgbWliIG1vZHVsZSBjb2RlKS4KICAgLS1lbmFibGUtdGVzdGluZy1jb2RlICAgICAgICAgICBFbmFibGVzIHNvbWUgY29kZSBzZWN0aW9ucyB0aGF0IHNob3VsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZyBvZiBjZXJ0YWluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBmdW5jdGlvbmFsaXRpZXMuICBUaGlzIHNob3VsZCAqbm90KgpAQCAtMTA3NCwxNyArMTcxNSwyNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50cy4gIFRoaXMgZG9lcyBub3QgZ3VhcmFudGVlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLXNhZmUgb3BlcmF0aW9uLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBhbiBleHBlcmltZW50YWwgc2V0dGluZy4KKyAgLS1kaXNhYmxlLWRlcHJlY2F0ZWQgICAgICAgICAgICBEb24ndCBjb21waWxlIGluIGRlcHJlY2F0ZWQgZnVuY3Rpb25zLgorICAtLWRpc2FibGUtc2V0LXN1cHBvcnQgICAgICAgICAgIERvIG5vdCBhbGxvdyBTTk1QIHNldCByZXF1ZXN0cy4KKyAgLS1lbmFibGUtbG9jYWwtc211eCAgICAgICAgICAgICBSZXN0cmljdCBTTVVYIGNvbm5lY3Rpb25zIHRvIGxvY2FsaG9zdCAoYnkgZGVmYXVsdCkuCisgIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5ICAgRGlzYWJsZSBVRFAvVENQIHRyYW5zcG9ydHMgZm9yIGFnZW50eC4KKyAgLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCAgICBEaXNhYmxlIGFnZW50eCBzdWJhZ2VudCBjb2RlIGluIHNubXB0cmFwZC4KKyAgLS1lbmFibGUtbWluaW1hbGlzdCAgICAgICAgICAgICBSZW1vdmUgYWxsIG5vbi1lc3NlbnRpYWwgY29kZSBmZWF0dXJlcy4KKyAgLS1lbmFibGUtbm90aWZ5LW9ubHkgICAgICAgICAgICBCdWlsZCB0b29scyB0aGF0IGNhbiBvbmx5IHNlbmQgbm90aWZpY2F0aW9ucy4KKyAgLS1lbmFibGUtbm8tbGlzdGVuICAgICAgICAgICAgICBCdWlsZCB0b29scyB0aGF0IGNhbid0IGxpc3RlbiB0byBwb3J0cy4KKyAgLS1lbmFibGUtcmVhZC1vbmx5ICAgICAgICAgICAgICBSZW1vdmUgYWxsIFNFVCBzdXBwb3J0IGZyb20gdGhlIGNvZGUuCisgIC0tZW5hYmxlLW1pbmktYWdlbnQgICAgICAgICAgICAgQnVpbGQgYSBtaW5pbWFsIGFnZW50LgorICAtLWVuYWJsZS1tZmQtcmV3cml0ZXMgICAgICAgICAgIFVzZSBuZXcgTUZEIHJld3JpdGVzIG9mIG1pYiBtb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGF2YWlsYWJsZS4gKGRlZmF1bHQgaXMgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgbWliIG1vZHVsZSBjb2RlKS4KICAgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgICAgICAgICBEaXNhYmxlIGVtYmVkZGVkIFBlcmwgaW4gdGhlIFNOTVAgYWdlbnQgYW5kCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcHRyYXBkLiBlbmFibGVkIGJ5IGRlZmF1bHQKICAgLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzICAgICAgICBEaXNhYmxlIGNvbmZpZ3VyZSBjaGVja3MgZm9yIHdoZXRoZXIgUGVybCdzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyBDb21waWxlciBpcyBjb21wYXRpYmxlIHdpdGggb3VycyB3aGVuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgUGVybCBpcyBlbmFibGVkLgotICAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IEluc3RhbGwgdWNkLXNubXAgbG9vay1hbGlrZSBoZWFkZXJzIGFuZCBsaWJzLgotCi0gIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCi0gIC0tZW5hYmxlLXN0YXRpY1s9UEtHU10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgYnVpbGQgc3RhdGljIGxpYnJhcmllcyBbZGVmYXVsdD15ZXNdCisgIC0tZW5hYmxlLXNoYXJlZFs9UEtHU10gIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMgW2RlZmF1bHQ9eWVzXQorICAtLWVuYWJsZS1zdGF0aWNbPVBLR1NdICBidWlsZCBzdGF0aWMgbGlicmFyaWVzIFtkZWZhdWx0PXllc10KICAgLS1lbmFibGUtZmFzdC1pbnN0YWxsWz1QS0dTXQogICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gW2RlZmF1bHQ9eWVzXQogICAtLWRpc2FibGUtbGlidG9vbC1sb2NrICBhdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpCkBAIC0xMTAzLDE5ICsxNzUzLDM5IEBACiAgIC0td2l0aC1jZmxhZ3M9Q0ZMQUdTICAgICAgICAgICAgdXNlIENGTEFHUyBhcyBjb21waWxlIHRpbWUgYXJndW1lbnRzLgogICAtLXdpdGgtbGRmbGFncz1MREZMQUdTICAgICAgICAgIHVzZSBMREZMQUdTIGFzIGxpbmsgdGltZSBhcmd1bWVudHMgdG8gbGQuCiAgIC0td2l0aC1saWJzPUxJQlMgICAgICAgICAgICAgICAgdXNlIExJQlMgYXMgbGluayB0aW1lIGFyZ3VtZW50cyB0byBsZC4KKyAgLS13aXRoLWRtYWxsb2M9UEFUSCAgICAgVXNlIGRtYWxsb2MgbGlicmFyeSAod3d3LmRtYWxsb2MuY29tKQorICAtLXdpdGgtZWZlbmNlICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGFuZCB1c2UgbGliZWZlbmNlIChtYWxsb2MpLgorICAtLXdpdGgtcnNhcmVmPVBBVEggICAgICAgICAgICAgIExvb2sgZm9yIGxpYnJzYXJlZiBpbiBQQVRIL2xpYi4KKyAgLS13aXRoLW9wZW5zc2w9UEFUSCAgICAgICAgICAgICBMb29rIGZvciBvcGVuc3NsIGluIFBBVEgvbGliLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIFBBVEggbWF5IGJlICJpbnRlcm5hbCIgdG8gYnVpbGQgd2l0aAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbmltYWwgY29waWVkIE9wZW5TU0wgY29kZSBmb3IgVVNNIG9ubHkuCisKKyAgLS13aXRoLXBrY3M9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBwa2NzMTEgaW4gUEFUSC9saWIuCisgIC0td2l0aC1rcmI1PVBBVEggICAgICAgICAgICAgICAgTG9vayBmb3Iga3JiNSBpbiBQQVRIL2xpYi4KKyAgLS13aXRoLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIEVuYWJsZSBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiB1c2luZyBsaWJ2YWwgKG5vKQorICAtLXdpdGhvdXQtcnBtICAgICAgICAgICAgICAgICAgIERvbid0IGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFJQTSBwYWNrYWdlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuYWdlbWVudCBzeXN0ZW0gd2hlbiBidWlsZGluZyB0aGUgaG9zdCBNSUIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUuCiAgIC0td2l0aC1pbnN0YWxsLXByZWZpeD1QQVRIICAgICAgSnVzdCBmb3IgaW5zdGFsbGluZywgcHJlZml4IGFsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcmVjdG9yaWVzIHdpdGggUEFUSC4gIFRoaXMgaXMga25vd24gbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gd29yayBvbiBzb21lIHN5c3RlbXMgd2l0aCBzaGFyZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJpZXMgKGVnLCBIUFVYKQorICAtLXdpdGgtZmVhdHVyZXMtb2Y9dmVyc2lvbgorICAgICAgICAgICAgICAgICAgICAgICAgICBDb21waWxlIGluIE1JQiBtb2R1bGVzIGFuZCBvdGhlciBmZWF0dXJlcyBhcyBpZiB0aGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcyByZWxlYXNlICJ2ZXJzaW9uIiAoZGVmYXVsdCBpcyA1LjcuMy5yYzEpLgogCi0gIC0td2l0aC1kbWFsbG9jPVBBVEggICAgICAgICAgICAgVXNlIGRtYWxsb2MgbGlicmFyeSAod3d3LmRtYWxsb2MuY29tKQotICAtLXdpdGgtZWZlbmNlICAgICAgICAgICAgICAgICAgIExvb2sgZm9yIGFuZCB1c2UgbGliZWZlbmNlIChtYWxsb2MpLgotICAtLXdpdGgtcnNhcmVmPVBBVEggICAgICAgICAgICAgIExvb2sgZm9yIGxpYnJzYXJlZiBpbiBQQVRIL2xpYi4KLSAgLS13aXRoLW9wZW5zc2w9UEFUSCAgICAgICAgICAgICBMb29rIGZvciBvcGVuc3NsIGluIFBBVEgvbGliLgotICAtLXdpdGgta3JiNT1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIGtyYjUgaW4gUEFUSC9saWIuCi0gIC0td2l0aG91dC1ycG0gICAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUlBNIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN5c3RlbSB3aGVuIGJ1aWxkaW5nIHRoZSBob3N0IE1JQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS4KK01pc2NlbGxhbmVvdXM6CisgIC0td2l0aC1kZWZhdWx0cyAgICAgICAgIFVzZSBkZWZhdWx0cyBmb3IgcHJvbXB0ZWQgdmFsdWVzLgorICAtLXdpdGgtbWliZGlycz0iZGlyMTpkaXIyOiIgICBEZWZhdWx0IGRpcmVjdG9yaWVzIHRvIGxvb2sgZm9yIG1pYnMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IFwkSE9NRS8uc25tcC9taWJzOkRBVEFESVIvc25tcC9taWJzKQorICAtLXdpdGgtbWlicz0iaXRlbTE6aXRlbTI6IiAgICBEZWZhdWx0IG1pYiBJRHMgdG8gcmVhZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVGhlIGRlZmF1bHQgbGlzdCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aXRoIHRoZSBhZGRpdGlvbiBvZiBhbnkgbWlicyB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnkgdGhlIG1pYiBtb2R1bGVzIHRoZSBhZ2VudCBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZWQgd2l0aCkKKyAgLS13aXRoLW1pYmZpbGVzPSJmaWxlMTpmaWxlMiIgRGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogIG5vbmUuICB1c2VzIElEcyBhYm92ZSBpbnN0ZWFkLikKICAgLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzICBEb24ndCB1c2Ugc3BlY2lhbCBvcGFxdWUgZW5jb2RpbmdzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgbm9ybWFsbHkgY2Fubm90IGhhbmRsZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIG51bWJlcnMsIG5vciBsYXJnZSA2NCBiaXQKQEAgLTExMjMsMTcgKzE3OTMsNjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXQtc25tcCBwYWNrYWdlIGNvbXBpbGVzIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlc2UgZXh0cmEgZGF0YXR5cGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGluIGEgbGVnYWwgd2F5KQotICAtLXdpdGgtbWliZGlycz0iZGlyMTpkaXIyOiIgICBEZWZhdWx0IGRpcmVjdG9yaWVzIHRvIGxvb2sgZm9yIG1pYnMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IFwkSE9NRS8uc25tcC9taWJzOkRBVEFESVIvc25tcC9taWJzKQotICAtLXdpdGgtbWlicz0iaXRlbTE6aXRlbTI6IiAgICBEZWZhdWx0IG1pYiBJRHMgdG8gcmVhZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVGhlIGRlZmF1bHQgbGlzdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTTk1QdjItTUlCOklGLU1JQjpJUC1NSUI6VENQLU1JQjpVRFAtTUlCIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGFueSBtaWJzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgbWliIG1vZHVsZXMgdGhlIGFnZW50IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB3aXRoKQotICAtLXdpdGgtbWliZmlsZXM9ImZpbGUxOmZpbGUyIiBEZWZhdWx0IG1pYiBmaWxlcyB0byBsb2FkLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiAgbm9uZS4gIHVzZXMgSURzIGFib3ZlIGluc3RlYWQuKQotICAtLXdpdGgtcGtjcz1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIHBrY3MxMSBpbiBQQVRIL2xpYi4KKyAgLS13aXRoLWxvZ2ZpbGU9ImxvY2F0aW9uIiAgICAgICBEZWZhdWx0IGxvZyBmaWxlIGxvY2F0aW9uIGZvciBzbm1wZC4KKyAgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PSJkaXJlY3RvcnkiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVmYXVsdCBkaXJlY3RvcnkgZm9yIHBlcnNpc3RlbnQgZGF0YSBzdG9yYWdlLgorICAtLXdpdGgtcGVyc2lzdGVudC1tYXNrPSJtYXNrIiAgRGVmYXVsdCBtYXNrIGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMDc3KQorICAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPSJubyIgRG9uJ3QgY29weSBwZXJzaXN0ZW50IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHVzZSAieWVzIiB0byBjb3B5IHRoZW0pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiB5ZXMpCisgIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybj1QQVRURVJOICBQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlcyAoRGVmYXVsdDogL3RtcC9zbm1wZFhYWFhYWCkKKyAgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPSIzIiBEZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlZ2FsIHZhbHVlczogMSwgMiAoZm9yIFNOTVB2MmMpIG9yIDMuCisgIC0td2l0aC10cmFuc3BvcnRzPSJ0MSB0MiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS4KKyAgLS13aXRoLW91dC10cmFuc3BvcnRzPSJ0MSAuLi4iICBFeGNsdWRlIGxpc3RlZCBTTk1QIHRyYW5zcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuCisKKyAgQXZhaWxhYmxlIFNOTVAgdHJhbnNwb3J0IG1vZHVsZXMgYXJlOgorCisgICAgVURQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhbHdheXMgY29tcGlsZWQgaW4uCisgICAgVURQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCisgICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGlmIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgorICAgIFRDUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAorICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBpZiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKyAgICBUQ1AgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVENQL0lQLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQsIGJ1dCBtYXkgYmUgb21pdHRlZC4KKyAgICBVbml4ICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVW5peCBkb21haW4gcHJvdG9jb2xzLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgZXhjZXB0IG9uIFdpbjMyCisgICAgICAgICAgICAgICAgcGxhdGZvcm1zLCBhbmQgbWF5IGJlIG9taXR0ZWQuCisgICAgQ2FsbGJhY2sgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIGFuIGludGVybmFsIGxvY2FsbHkgY29ubmVjdGVkIHBhaXIKKyAgICAgICAgICAgICAgICBvZiBzbm1wX3Nlc3Npb25zLgorICAgIEFsaWFzICAgICAgIFRoZSBhbGlhcyB0cmFuc3BvcnQgc2ltcGx5IGxldHMgeW91IGRlZmluZSBtb3JlIGNvbXBsZXgKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQgc3RyaW5ncyBhbmQgYWxpYXMgdGhlbSB0byBzaW1wbGUgbmFtZXMgaW4KKyAgICAgICAgICAgICAgICB0aGUgc25tcC5jb25mIGZpbGUuCisgICAgQUFMNVBWQyAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIEFBTDUgUFZDcy4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAorICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIElQWCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBJUFggcGVyIFJGQyAxNDIwLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCisgICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCisgICAgRFRMU1VEUCAgICAgc3VwcG9ydCBmb3IgdHVubmVsaW5nIFNOTVAgb3ZlciBEVExTL1VEUAorICAgIFRMU1RDUCAgICAgIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgVExTL1RDUAorICAgIFNTSCAgICAgICAgIChhbHBoYSkgc3VwcG9ydCBmb3IgdHVubmVsaW5nIFNOTVAgb3ZlciBTU0gKKworICAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgorCisgIEF2YWlsYWJsZSBTTk1QIHNlY3VyaXR5IHNlcnZpY2VzOgorCisgICAgICAgIHVzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB1c2VyIGJhc2VkIFNOTVAgc2VjdXJpdHkKKyAgICAgICAga3NtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIGtlcmJlcm9zIGJhc2VkIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgdHNtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBUcmFuc3BvcnQtYmFzZWQgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChmb3IgdXNlIHdpdGggdGhlIFNTSCwgRFRMU1VEUCBhbmQgVExTVENQIHRyYW5zcG9ydHMpCisKKyAgLS13aXRoLW91dC1zZWN1cml0eS1tb2R1bGVzPSJzMSBzMiAuLi4iICAgUmVtb3ZlcyB0aGUgZ2l2ZW4gU05NUCBzZWN1cml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlIHNlcnZpY2VzIGZyb20gdGhlIGRlZmF1bHQgbGlzdC4KKwogCiBDb25maWd1cmluZyB0aGUgYWdlbnQ6CiAgIC0td2l0aG91dC1yb290LWFjY2VzcyAgICAgICAgICAgVGhlIHNubXBkIGFnZW50IHdvbid0IHJlcXVpcmUgcm9vdCBhY2Nlc3MgdG8KQEAgLTExNDYsNjMgKzE4NjcsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRlY2huaWNhbGx5IG5vdCBjb21wbGlhbnQgd2l0aCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIHNwZWNpZmljYXRpb25zLCBidXQgd2FzIGhvdyB0aGUgYWdlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRlZCBmb3IgdmVyc2lvbnMgPCA0LjAuCi0gIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0iZGlyZWN0b3J5IgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgZGlyZWN0b3J5IGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS4KLSAgLS13aXRoLXBlcnNpc3RlbnQtbWFzaz0ibWFzayIgIERlZmF1bHQgbWFzayBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDA3NykKLSAgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz0ibm8iIERvbid0IGNvcHkgcGVyc2lzdGVudCBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB1c2UgInllcyIgdG8gY29weSB0aGVtKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogeWVzKQotICAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm49UEFUVEVSTiAgUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXMgKERlZmF1bHQ6IC90bXAvc25tcGRYWFhYWFgpCi0gIC0td2l0aC1hZ2VudHgtc29ja2V0PUZJTEUgICAgICAgICBBZ2VudFggc29ja2V0IChEZWZhdWx0OiAvdmFyL2FnZW50eC9tYXN0ZXIgYXMgc3BlY2lmaWVkIGluIFJGQzI3NDEpCi0gIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj0iMyIgRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDMpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMZWdhbCB2YWx1ZXM6IDEsIDIgKGZvciBTTk1QdjJjKSBvciAzLgogICAtLXdpdGgtc3lzLWNvbnRhY3Q9Indob0B3aGVyZSIgIERlZmF1bHQgc3lzdGVtIGNvbnRhY3QuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogTE9HSU5ARE9NQUlOTkFNRSkKICAgLS13aXRoLXN5cy1sb2NhdGlvbj0ibG9jYXRpb24iICBEZWZhdWx0IHN5c3RlbSBsb2NhdGlvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBVbmtub3duKQotICAtLXdpdGgtbG9nZmlsZT0ibG9jYXRpb24iICAgICAgIERlZmF1bHQgbG9nIGZpbGUgbG9jYXRpb24gZm9yIHNubXBkLgotICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBzZXBhcmF0ZWQgbGlzdCkuCi0gIC0td2l0aC1vdXQtdHJhbnNwb3J0cz0idDEgLi4uIiAgRXhjbHVkZSBsaXN0ZWQgU05NUCB0cmFuc3BvcnRzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgotCi0gIEF2YWlsYWJsZSBTTk1QIHRyYW5zcG9ydCBtb2R1bGVzIGFyZToKLQotICAgIFVEUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYWx3YXlzIGNvbXBpbGVkIGluLgotICAgIFVEUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAotICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCi0gICAgICAgICAgICAgICAgSXQgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdC4KLSAgICBUQ1BJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKLSAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgotICAgICAgICAgICAgICAgIEl0IGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQuCi0gICAgVENQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFRDUC9JUC4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0LCBidXQgbWF5IGJlIG9taXR0ZWQuCi0gICAgVW5peCAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVuaXggZG9tYWluIHByb3RvY29scy4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGV4Y2VwdCBvbiBXaW4zMgotICAgICAgICAgICAgICAgIHBsYXRmb3JtcywgYW5kIG1heSBiZSBvbWl0dGVkLgotICAgIENhbGxiYWNrICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBhbiBpbnRlcm5hbCBsb2NhbGx5IGNvbm5lY3RlZCBwYWlyCi0gICAgICAgICAgICAgICAgb2Ygc25tcF9zZXNzaW9ucy4KLSAgICBBQUw1UFZDICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgQUFMNSBQVkNzLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCi0gICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCi0gICAgSVBYICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIElQWCBwZXIgUkZDIDE0MjAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgcHJlc2VudGx5IG9ubHkgYXZhaWxhYmxlIGZvciBMaW51eCwKLSAgICAgICAgICAgICAgICBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0IGFuZCBtYXkgYmUgb21pdHRlZC4KLQotICAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyAoc3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgotCi0gIEF2YWlsYWJsZSBTTk1QIHNlY3VyaXR5IHNlcnZpY2VzOgotCi0gICAgICAgIHVzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB1c2VyIGJhc2VkIFNOTVAgc2VjdXJpdHkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZXF1aXJlZCBhbmQgYWx3YXlzIGNvbXBpbGVkIGluKQotICAgICAgICBrc20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3Iga2VyYmVyb3MgYmFzZWQgU05NUCBzZWN1cml0eQotCisgIC0td2l0aC1hZ2VudHgtc29ja2V0PUZJTEUgICAgICAgICBBZ2VudFggc29ja2V0IChEZWZhdWx0OiAvdmFyL2FnZW50eC9tYXN0ZXIgYXMgc3BlY2lmaWVkIGluIFJGQzI3NDEpCisgIC0td2l0aC1mZWF0dXJlcz0iZmVhdDEgZmVhdDIiICAgUmVxdWVzdCBleHRyYSBmZWF0dXJlcyB0byBiZSB0dXJuZWQgb24uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IHVzZWZ1bCB3aXRoIC0tZW5hYmxlLW1pbmltYWxpc3QpCisgIC0td2l0aC1vdXQtZmVhdHVyZXM9ImZlYXQxLi4uIiAgUmVtb3ZlIHNwZWNpZmljIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1wbGllcyAtLWVuYWJsZS1taW5pbWFsaXN0KQogICAtLXdpdGgtbWliLW1vZHVsZXM9Iml0ZW0xIC4uLiIgIENvbXBpbGUgd2l0aCBhZGRpdGlvbmFsIG1pYiBtb2R1bGVzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3BhY2Ugc2VwYXJhdGVkIGxpc3QpLgogICAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzPSJsaXN0IiAgIENvbXBpbGUgd2l0aG91dCB0aGVzZSBtaWIgbW9kdWxlcy4KQEAgLTEyNDMsNiArMTkxNiw3IEBACiAgICAgICBpcGZ3Y2hhaW5zL2lwZndjaGFpbnMgIGZpcmV3YWxsIGNoYWlucyB1bmRlciBpcGZ3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgYWdlbnQvbWliZ3JvdXAvaXBmd2NoYWlucy9SRUFETUUpCiAgICAgICBzY3RwLW1pYiAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgU0NUUC1NSUIKKyAgICAgIGV0aGVybGlrZS1taWIgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBFdGhlckxpa2UtTUlCCiAKICAgICBTb2xhcmlzCiAgICAgICB1Y2Qtc25tcC9sbVNlbnNvcnMgICBoYXJkd2FyZSBtb25pdG9yaW5nIChMTS1TRU5TT1JTLU1JQikKQEAgLTEzMDgsMTUwICsxOTgyLDkzNSBAQAogICAtLXdpdGgtY2xpZW50LXNlbmQtYnVmPUFSRyAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbnMsIGJ1dCBmb3IgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVjZWl2ZSBidWZmZXIgb2YgY2xpZW50IHNvY2tldHMKICAgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zj1BUkcgICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZSBzZW5kIGJ1ZmZlcgotCi1NaXNjZWxsYW5lb3VzOgotICAtLXdpdGgtZGVmYXVsdHMgICAgICAgICBVc2UgZGVmYXVsdHMgZm9yIHByb21wdGVkIHZhbHVlcy4KLSAgLS13aXRoLWdudS1sZCAgICAgICAgICAgYXNzdW1lIHRoZSBDIGNvbXBpbGVyIHVzZXMgR05VIGxkIFtkZWZhdWx0PW5vXQorICAtLXdpdGhvdXQtZWxmICAgICAgICAgICB1c2UgZWxmIGxpYnJhcmllcworICAtLXdpdGgtbmwgICAgICAgICAgICAgICB1c2UgbGlibmwgdG8gZ2V0IG5ldGxpbmsgZGF0YSAobGludXggb25seSkuCisgIC0td2l0aC1saWJ3cmFwPUxJQlBBVEggIENvbXBpbGUgaW4gbGlid3JhcCAodGNwX3dyYXBwZXJzKSBzdXBwb3J0LgorICAtLXdpdGgtemxpYj1ESVIgICAgICAgICB1c2UgbGlieiBpbiBESVIKKyAgLS13aXRoLWJ6aXAyPURJUiAgICAgICAgdXNlIGxpYmJ6MiBpbiBESVIKKyAgLS13aXRoLW1udHRhYj0iL2V0Yy9tbnR0YWIiCisgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdW50IHRhYmxlIGxvY2F0aW9uLiBUaGUgZGVmYXVsdCBpcyB0byBhdXRvZGV0ZWN0CisgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuCisgIC0td2l0aC1teXNxbCAgICAgICAgICAgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTXlTUUwuCiAgIC0td2l0aC1waWMgICAgICAgICAgICAgIHRyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIFtkZWZhdWx0PXVzZQogICAgICAgICAgICAgICAgICAgICAgICAgICBib3RoXQotICAtLXdpdGgtdGFnc1s9VEFHU10KLSAgICAgICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSBhZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb25zIFthdXRvbWF0aWNdCi0gIC0td2l0aG91dC1lbGYgICAgICAgICAgIHVzZSBlbGYgbGlicmFyaWVzCi0gIC0td2l0aC1saWJ3cmFwPUxJQlBBVEggIENvbXBpbGUgaW4gbGlid3JhcCAodGNwX3dyYXBwZXJzKSBzdXBwb3J0LgorICAtLXdpdGgtZ251LWxkICAgICAgICAgICBhc3N1bWUgdGhlIEMgY29tcGlsZXIgdXNlcyBHTlUgbGQgW2RlZmF1bHQ9bm9dCisgIC0td2l0aC1zeXNyb290PURJUiBTZWFyY2ggZm9yIGRlcGVuZGVudCBsaWJyYXJpZXMgd2l0aGluIERJUgorICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHRoZSBjb21waWxlcidzIHN5c3Jvb3QgaWYgbm90IHNwZWNpZmllZCkuCiAKIFNvbWUgaW5mbHVlbnRpYWwgZW52aXJvbm1lbnQgdmFyaWFibGVzOgogICBDQyAgICAgICAgICBDIGNvbXBpbGVyIGNvbW1hbmQKICAgQ0ZMQUdTICAgICAgQyBjb21waWxlciBmbGFncwogICBMREZMQUdTICAgICBsaW5rZXIgZmxhZ3MsIGUuZy4gLUw8bGliIGRpcj4gaWYgeW91IGhhdmUgbGlicmFyaWVzIGluIGEKICAgICAgICAgICAgICAgbm9uc3RhbmRhcmQgZGlyZWN0b3J5IDxsaWIgZGlyPgotICBDUFBGTEFHUyAgICBDL0MrKyBwcmVwcm9jZXNzb3IgZmxhZ3MsIGUuZy4gLUk8aW5jbHVkZSBkaXI+IGlmIHlvdSBoYXZlCi0gICAgICAgICAgICAgIGhlYWRlcnMgaW4gYSBub25zdGFuZGFyZCBkaXJlY3RvcnkgPGluY2x1ZGUgZGlyPgorICBMSUJTICAgICAgICBsaWJyYXJpZXMgdG8gcGFzcyB0byB0aGUgbGlua2VyLCBlLmcuIC1sPGxpYnJhcnk+CisgIENQUEZMQUdTICAgIChPYmplY3RpdmUpIEMvQysrIHByZXByb2Nlc3NvciBmbGFncywgZS5nLiAtSTxpbmNsdWRlIGRpcj4gaWYKKyAgICAgICAgICAgICAgeW91IGhhdmUgaGVhZGVycyBpbiBhIG5vbnN0YW5kYXJkIGRpcmVjdG9yeSA8aW5jbHVkZSBkaXI+CiAgIENQUCAgICAgICAgIEMgcHJlcHJvY2Vzc29yCi0gIENYWCAgICAgICAgIEMrKyBjb21waWxlciBjb21tYW5kCi0gIENYWEZMQUdTICAgIEMrKyBjb21waWxlciBmbGFncwotICBDWFhDUFAgICAgICBDKysgcHJlcHJvY2Vzc29yCi0gIEY3NyAgICAgICAgIEZvcnRyYW4gNzcgY29tcGlsZXIgY29tbWFuZAotICBGRkxBR1MgICAgICBGb3J0cmFuIDc3IGNvbXBpbGVyIGZsYWdzCiAKIFVzZSB0aGVzZSB2YXJpYWJsZXMgdG8gb3ZlcnJpZGUgdGhlIGNob2ljZXMgbWFkZSBieSBgY29uZmlndXJlJyBvciB0byBoZWxwCiBpdCB0byBmaW5kIGxpYnJhcmllcyBhbmQgcHJvZ3JhbXMgd2l0aCBub25zdGFuZGFyZCBuYW1lcy9sb2NhdGlvbnMuCiAKIFJlcG9ydCBidWdzIHRvIDxuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0Pi4KIF9BQ0VPRgorYWNfc3RhdHVzPSQ/CiBmaQogCiBpZiB0ZXN0ICIkYWNfaW5pdF9oZWxwIiA9ICJyZWN1cnNpdmUiOyB0aGVuCiAgICMgSWYgdGhlcmUgYXJlIHN1YmRpcnMsIHJlcG9ydCB0aGVpciBzcGVjaWZpYyAtLWhlbHAuCi0gIGFjX3BvcGRpcj1gcHdkYAogICBmb3IgYWNfZGlyIGluIDogJGFjX3N1YmRpcnNfYWxsOyBkbyB0ZXN0ICJ4JGFjX2RpciIgPSB4OiAmJiBjb250aW51ZQotICAgIHRlc3QgLWQgJGFjX2RpciB8fCBjb250aW51ZQorICAgIHRlc3QgLWQgIiRhY19kaXIiIHx8CisgICAgICB7IGNkICIkc3JjZGlyIiAmJiBhY19wd2Q9YHB3ZGAgJiYgc3JjZGlyPS4gJiYgdGVzdCAtZCAiJGFjX2RpciI7IH0gfHwKKyAgICAgIGNvbnRpbnVlCiAgICAgYWNfYnVpbGRkaXI9LgogCi1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAotZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9Ci1maQorY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKIAogY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgogICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCiAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CiBlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CiAKLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi0KLSAgICBjZCAkYWNfZGlyCi0gICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmU7IG90aGVyd2lzZSBnZXQgQ3lnbnVzIHN0eWxlIGNvbmZpZ3VyZS4KLSAgICBpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmdudTsgdGhlbgotICAgICAgZWNobwotICAgICAgJFNIRUxMICRhY19zcmNkaXIvY29uZmlndXJlLmdudSAgLS1oZWxwPXJlY3Vyc2l2ZQotICAgIGVsaWYgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZTsgdGhlbgotICAgICAgZWNobwotICAgICAgJFNIRUxMICRhY19zcmNkaXIvY29uZmlndXJlICAtLWhlbHA9cmVjdXJzaXZlCi0gICAgZWxpZiB0ZXN0IC1mICRhY19zcmNkaXIvY29uZmlndXJlLmFjIHx8Ci0JICAgdGVzdCAtZiAkYWNfc3JjZGlyL2NvbmZpZ3VyZS5pbjsgdGhlbgotICAgICAgZWNobwotICAgICAgJGFjX2NvbmZpZ3VyZSAtLWhlbHAKKyAgICBjZCAiJGFjX2RpciIgfHwgeyBhY19zdGF0dXM9JD87IGNvbnRpbnVlOyB9CisgICAgIyBDaGVjayBmb3IgZ3Vlc3RlZCBjb25maWd1cmUuCisgICAgaWYgdGVzdCAtZiAiJGFjX3NyY2Rpci9jb25maWd1cmUuZ251IjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZS5nbnUiIC0taGVscD1yZWN1cnNpdmUKKyAgICBlbGlmIHRlc3QgLWYgIiRhY19zcmNkaXIvY29uZmlndXJlIjsgdGhlbgorICAgICAgZWNobyAmJgorICAgICAgJFNIRUxMICIkYWNfc3JjZGlyL2NvbmZpZ3VyZSIgLS1oZWxwPXJlY3Vyc2l2ZQogICAgIGVsc2UKLSAgICAgIGVjaG8gIiRhc19tZTogV0FSTklORzogbm8gY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBpcyBpbiAkYWNfZGlyIiA+JjIKLSAgICBmaQotICAgIGNkICRhY19wb3BkaXIKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG5vIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gaXMgaW4gJGFjX2RpciIgPiYyCisgICAgZmkgfHwgYWNfc3RhdHVzPSQ/CisgICAgY2QgIiRhY19wd2QiIHx8IHsgYWNfc3RhdHVzPSQ/OyBicmVhazsgfQogICBkb25lCiBmaQogCi10ZXN0IC1uICIkYWNfaW5pdF9oZWxwIiAmJiBleGl0IDAKK3Rlc3QgLW4gIiRhY19pbml0X2hlbHAiICYmIGV4aXQgJGFjX3N0YXR1cwogaWYgJGFjX2luaXRfdmVyc2lvbjsgdGhlbgogICBjYXQgPDxcX0FDRU9GCi1OZXQtU05NUCBjb25maWd1cmUgNS40LjQKLWdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi41OQorTmV0LVNOTVAgY29uZmlndXJlIDUuNy4zLnJjMQorZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4CiAKLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlndXJlIHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCiBnaXZlcyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZCBtb2RpZnkgaXQuCiBfQUNFT0YKLSAgZXhpdCAwCisgIGV4aXQKIGZpCi1leGVjIDU+Y29uZmlnLmxvZwotY2F0ID4mNSA8PF9BQ0VPRgorCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEF1dG9jb25mIGluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKyMgYWNfZm5fY190cnlfY29tcGlsZSBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGNvbXBpbGUgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2NvbXBpbGUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlIikgMj5jb25mdGVzdC5lcnIKKyAgYWNfc3RhdHVzPSQ/CisgIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCisgICAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICAgIG12IC1mIGNvbmZ0ZXN0LmVyMSBjb25mdGVzdC5lcnIKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeworCSB0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIgfHwKKwkgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycgorICAgICAgIH0gJiYgdGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY29tcGlsZQorCisjIGFjX2ZuX2NfdHJ5X2NwcCBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcnkgdG8gcHJlcHJvY2VzcyBjb25mdGVzdC4kYWNfZXh0LCBhbmQgcmV0dXJuIHdoZXRoZXIgdGhpcyBzdWNjZWVkZWQuCithY19mbl9jX3RyeV9jcHAgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiB7IHsgYWNfdHJ5PSIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ID4gY29uZnRlc3QuaSAmJiB7CisJIHRlc3QgLXogIiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKyAgICBhY19yZXR2YWw9MQorZmkKKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisgIGFzX2ZuX3NldF9zdGF0dXMgJGFjX3JldHZhbAorCit9ICMgYWNfZm5fY190cnlfY3BwCisKKyMgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCBMSU5FTk8gSEVBREVSIFZBUiBJTkNMVURFUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgSEVBREVSIGV4aXN0cywgZ2l2aW5nIGEgd2FybmluZyBpZiBpdCBjYW5ub3QgYmUgY29tcGlsZWQgdXNpbmcKKyMgdGhlIGluY2x1ZGUgZmlsZXMgaW4gSU5DTFVERVMgYW5kIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KK2Vsc2UKKyAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHVzYWJpbGl0eSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkMiB1c2FiaWxpdHkuLi4gIiA+JjY7IH0KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcworZWxzZQorICBhY19oZWFkZXJfY29tcGlsZXI9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjY7IH0KKworIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICQyIHByZXNlbmNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nICQyIHByZXNlbmNlLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKK2Vsc2UKKyAgYWNfaGVhZGVyX3ByZXByb2M9bm8KK2ZpCitybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuaSBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKKyRhc19lY2hvICIkYWNfaGVhZGVyX3ByZXByb2MiID4mNjsgfQorCisjIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KK2Nhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4gIygoCisgIHllczpubzogKQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KKyAgICA7OworICBubzp5ZXM6KiApCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkMjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICQyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogJDI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9CisoICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjIgorICAgICApIHwgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCisgICAgOzsKK2VzYWMKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9XCRhY19oZWFkZXJfY29tcGlsZXIiCitmaQorZXZhbCBhY19yZXM9XCQkMworCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitmaQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwKKworIyBhY19mbl9jX3RyeV9ydW4gTElORU5PCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLiBBc3N1bWVzCisjIHRoYXQgZXhlY3V0YWJsZXMgKmNhbiogYmUgcnVuLgorYWNfZm5fY190cnlfcnVuICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgaWYgeyB7IGFjX3RyeT0iJGFjX2xpbmsiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19saW5rIikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JworICB7IHsgY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfdHJ5IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IH07IHRoZW4gOgorICBhY19yZXR2YWw9MAorZWxzZQorICAkYXNfZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKKyAgICAgICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKK3NlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKworICAgICAgIGFjX3JldHZhbD0kYWNfc3RhdHVzCitmaQorICBybSAtcmYgY29uZnRlc3QuZFNZTSBjb25mdGVzdF9pcGE4X2NvbmZ0ZXN0Lm9vCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfdHJ5X3J1bgorCisjIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgTElORU5PIEhFQURFUiBWQVIgSU5DTFVERVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIEhFQURFUiBleGlzdHMgYW5kIGNhbiBiZSBjb21waWxlZCB1c2luZyB0aGUgaW5jbHVkZSBmaWxlcyBpbgorIyBJTkNMVURFUywgc2V0dGluZyB0aGUgY2FjaGUgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CisjaW5jbHVkZSA8JDI+CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlCisKKyMgYWNfZm5fY190cnlfbGluayBMSU5FTk8KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJ5IHRvIGxpbmsgY29uZnRlc3QuJGFjX2V4dCwgYW5kIHJldHVybiB3aGV0aGVyIHRoaXMgc3VjY2VlZGVkLgorYWNfZm5fY190cnlfbGluayAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+Y29uZnRlc3QuZXJyCisgIGFjX3N0YXR1cz0kPworICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgorICAgIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIxCisgICAgY2F0IGNvbmZ0ZXN0LmVyMSA+JjUKKyAgICBtdiAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgIGZpCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHsKKwkgdGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciIHx8CisJIHRlc3QgISAtcyBjb25mdGVzdC5lcnIKKyAgICAgICB9ICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0ICYmIHsKKwkgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgfHwKKwkgJGFzX3Rlc3RfeCBjb25mdGVzdCRhY19leGVleHQKKyAgICAgICB9OyB0aGVuIDoKKyAgYWNfcmV0dmFsPTAKK2Vsc2UKKyAgJGFzX2VjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CitzZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisKKwlhY19yZXR2YWw9MQorZmkKKyAgIyBEZWxldGUgdGhlIElQQS9JUE8gKEludGVyIFByb2NlZHVyYWwgQW5hbHlzaXMvT3B0aW1pemF0aW9uKSBpbmZvcm1hdGlvbgorICAjIGNyZWF0ZWQgYnkgdGhlIFBHSSBjb21waWxlciAoY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbyksIGFzIGl0IHdvdWxkCisgICMgaW50ZXJmZXJlIHdpdGggdGhlIG5leHQgbGluayBjb21tYW5kOyBhbHNvIGRlbGV0ZSBhIGRpcmVjdG9yeSB0aGF0IGlzCisgICMgbGVmdCBiZWhpbmQgYnkgQXBwbGUncyBjb21waWxlci4gIFdlIGRvIHRoaXMgYmVmb3JlIGV4ZWN1dGluZyB0aGUgYWN0aW9ucy4KKyAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0gY29uZnRlc3RfaXBhOF9jb25mdGVzdC5vbworICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKyAgYXNfZm5fc2V0X3N0YXR1cyAkYWNfcmV0dmFsCisKK30gIyBhY19mbl9jX3RyeV9saW5rCisKKyMgYWNfZm5fY19jaGVja19mdW5jIExJTkVOTyBGVU5DIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRlc3RzIHdoZXRoZXIgRlVOQyBleGlzdHMsIHNldHRpbmcgdGhlIGNhY2hlIHZhcmlhYmxlIFZBUiBhY2NvcmRpbmdseQorYWNfZm5fY19jaGVja19mdW5jICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworLyogRGVmaW5lICQyIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJDIuCisgICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KKyNkZWZpbmUgJDIgaW5ub2N1b3VzXyQyCisKKy8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKKyAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICQyICgpOyBiZWxvdy4KKyAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCisgICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KKworI2lmZGVmIF9fU1REQ19fCisjIGluY2x1ZGUgPGxpbWl0cy5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8YXNzZXJ0Lmg+CisjZW5kaWYKKworI3VuZGVmICQyCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgJDIgKCk7CisvKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCisgICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKKyAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KKyNpZiBkZWZpbmVkIF9fc3R1Yl8kMiB8fCBkZWZpbmVkIF9fc3R1Yl9fXyQyCitjaG9rZSBtZQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuICQyICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiQzPXllcyIKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2Z1bmMKKworIyBhY19mbl9jX2NoZWNrX21lbWJlciBMSU5FTk8gQUdHUiBNRU1CRVIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVHJpZXMgdG8gZmluZCBpZiB0aGUgZmllbGQgTUVNQkVSIGV4aXN0cyBpbiB0eXBlIEFHR1IsIGFmdGVyIGluY2x1ZGluZworIyBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX21lbWJlciAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICQyLiQzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkMi4kMy4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskNCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKGFjX2FnZ3IuJDMpCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkND15ZXMiCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ1CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyAkMiBhY19hZ2dyOworaWYgKHNpemVvZiBhY19hZ2dyLiQzKQorcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDQ9eWVzIgorZWxzZQorICBldmFsICIkND1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQ0CisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX21lbWJlcgorCisjIGFjX2ZuX2NfY29tcHV0ZV9pbnQgTElORU5PIEVYUFIgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFRyaWVzIHRvIGZpbmQgdGhlIGNvbXBpbGUtdGltZSB2YWx1ZSBvZiBFWFBSIGluIGEgcHJvZ3JhbSB0aGF0IGluY2x1ZGVzCisjIElOQ0xVREVTLCBzZXR0aW5nIFZBUiBhY2NvcmRpbmdseS4gUmV0dXJucyB3aGV0aGVyIHRoZSB2YWx1ZSBjb3VsZCBiZQorIyBjb21wdXRlZAorYWNfZm5fY19jb21wdXRlX2ludCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCisgICAgIyBEZXBlbmRpbmcgdXBvbiB0aGUgc2l6ZSwgY29tcHV0ZSB0aGUgbG8gYW5kIGhpIGJvdW5kcy4KK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPj0gMCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0wIGFjX21pZD0wCisgIHdoaWxlIDo7IGRvCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCQyKSA8PSAkYWNfbWlkKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPSRhY19taWQ7IGJyZWFrCitlbHNlCisgIGFzX2ZuX2FyaXRoICRhY19taWQgKyAxICYmIGFjX2xvPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICsgMSAmJiBhY19taWQ9JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICBkb25lCitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPCAwKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2hpPS0xIGFjX21pZD0tMQorICB3aGlsZSA6OyBkbworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPj0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19sbz0kYWNfbWlkOyBicmVhaworZWxzZQorICBhc19mbl9hcml0aCAnKCcgJGFjX21pZCAnKScgLSAxICYmIGFjX2hpPSRhc192YWwKKwkJCWlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCisJCQkgIGFjX2xvPSBhY19oaT0KKwkJCSAgYnJlYWsKKwkJCWZpCisJCQlhc19mbl9hcml0aCAyICcqJyAkYWNfbWlkICYmIGFjX21pZD0kYXNfdmFsCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGRvbmUKK2Vsc2UKKyAgYWNfbG89IGFjX2hpPQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KK3doaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KKyAgYXNfZm5fYXJpdGggJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvICYmIGFjX21pZD0kYXNfdmFsCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkMikgPD0gJGFjX21pZCldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19oaT0kYWNfbWlkCitlbHNlCisgIGFzX2ZuX2FyaXRoICcoJyAkYWNfbWlkICcpJyArIDEgJiYgYWNfbG89JGFzX3ZhbAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZG9uZQorY2FzZSAkYWNfbG8gaW4gIygoCis/KikgZXZhbCAiJDM9XCRhY19sbyI7IGFjX3JldHZhbD0wIDs7CisnJykgYWNfcmV0dmFsPTEgOzsKK2VzYWMKKyAgZWxzZQorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitzdGF0aWMgbG9uZyBpbnQgbG9uZ3ZhbCAoKSB7IHJldHVybiAkMjsgfQorc3RhdGljIHVuc2lnbmVkIGxvbmcgaW50IHVsb25ndmFsICgpIHsgcmV0dXJuICQyOyB9CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KK2ludAorbWFpbiAoKQoreworCisgIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7CisgIGlmICghIGYpCisgICAgcmV0dXJuIDE7CisgIGlmICgoJDIpIDwgMCkKKyAgICB7CisgICAgICBsb25nIGludCBpID0gbG9uZ3ZhbCAoKTsKKyAgICAgIGlmIChpICE9ICgkMikpCisJcmV0dXJuIDE7CisgICAgICBmcHJpbnRmIChmLCAiJWxkIiwgaSk7CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgdW5zaWduZWQgbG9uZyBpbnQgaSA9IHVsb25ndmFsICgpOworICAgICAgaWYgKGkgIT0gKCQyKSkKKwlyZXR1cm4gMTsKKyAgICAgIGZwcmludGYgKGYsICIlbHUiLCBpKTsKKyAgICB9CisgIC8qIERvIG5vdCBvdXRwdXQgYSB0cmFpbGluZyBuZXdsaW5lLCBhcyB0aGlzIGNhdXNlcyBcclxuIGNvbmZ1c2lvbgorICAgICBvbiBzb21lIHBsYXRmb3Jtcy4gICovCisgIHJldHVybiBmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKKyAgZWNobyA+PmNvbmZ0ZXN0LnZhbDsgcmVhZCAkMyA8Y29uZnRlc3QudmFsOyBhY19yZXR2YWw9MAorZWxzZQorICBhY19yZXR2YWw9MQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LnZhbAorCisgIGZpCisgIGV2YWwgJGFzX2xpbmVub19zdGFjazsgJHthc19saW5lbm9fc3RhY2s6Kzp9IHVuc2V0IGFzX2xpbmVubworICBhc19mbl9zZXRfc3RhdHVzICRhY19yZXR2YWwKKworfSAjIGFjX2ZuX2NfY29tcHV0ZV9pbnQKKworIyBhY19mbl9jX2ZpbmRfaW50WF90IExJTkVOTyBCSVRTIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kcyBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgd2l0aCB3aWR0aCBCSVRTLCBzZXR0aW5nIGNhY2hlIHZhcmlhYmxlIFZBUgorIyBhY2NvcmRpbmdseS4KK2FjX2ZuX2NfZmluZF9pbnRYX3QgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBpbnQkMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbnQkMl90Li4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgICAgICMgT3JkZXIgaXMgaW1wb3J0YW50IC0gbmV2ZXIgY2hlY2sgYSB0eXBlIHRoYXQgaXMgcG90ZW50aWFsbHkgc21hbGxlcgorICAgICAjIHRoYW4gaGFsZiBvZiB0aGUgZXhwZWN0ZWQgdGFyZ2V0IHdpZHRoLgorICAgICBmb3IgYWNfdHlwZSBpbiBpbnQkMl90ICdpbnQnICdsb25nIGludCcgXAorCSAnbG9uZyBsb25nIGludCcgJ3Nob3J0IGludCcgJ3NpZ25lZCBjaGFyJzsgZG8KKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCSAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKDAgPCAoJGFjX3R5cGUpICgoKCgoJGFjX3R5cGUpIDEgPDwgTikgPDwgTikgLSAxKSAqIDIgKyAxKSldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorCSAgICAgICAgZW51bSB7IE4gPSAkMiAvIDIgLSAxIH07CitpbnQKK21haW4gKCkKK3sKK3N0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDEpCisJCSA8ICgkYWNfdHlwZSkgKCgoKCgkYWNfdHlwZSkgMSA8PCBOKSA8PCBOKSAtIDEpICogMiArIDIpKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgY2FzZSAkYWNfdHlwZSBpbiAjKAorICBpbnQkMl90KSA6CisgICAgZXZhbCAiJDM9eWVzIiA7OyAjKAorICAqKSA6CisgICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OworZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKKworZWxzZQorICBicmVhaworZmkKKyAgICAgZG9uZQorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfZmluZF9pbnRYX3QKKworIyBhY19mbl9jX2NoZWNrX3R5cGUgTElORU5PIFRZUEUgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgVGVzdHMgd2hldGhlciBUWVBFIGV4aXN0cyBhZnRlciBoYXZpbmcgaW5jbHVkZWQgSU5DTFVERVMsIHNldHRpbmcgY2FjaGUKKyMgdmFyaWFibGUgVkFSIGFjY29yZGluZ2x5LgorYWNfZm5fY19jaGVja190eXBlICgpCit7CisgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDEifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJDIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICQyLi4uICIgPiY2OyB9CitpZiBldmFsIFwkeyQzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZXZhbCAiJDM9bm8iCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyQ0CitpbnQKK21haW4gKCkKK3sKK2lmIChzaXplb2YgKCQyKSkKKwkgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJDQKK2ludAorbWFpbiAoKQoreworaWYgKHNpemVvZiAoKCQyKSkpCisJICAgIHJldHVybiAwOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgZXZhbCAiJDM9eWVzIgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfY2hlY2tfdHlwZQorCisjIGFjX2ZuX2NfZmluZF91aW50WF90IExJTkVOTyBCSVRTIFZBUgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmluZHMgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpdGggd2lkdGggQklUUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2ZpbmRfdWludFhfdCAoKQoreworICBhc19saW5lbm89JHthc19saW5lbm8tIiQxIn0gYXNfbGluZW5vX3N0YWNrPWFzX2xpbmVub19zdGFjaz0kYXNfbGluZW5vX3N0YWNrCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHVpbnQkMl90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1aW50JDJfdC4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGV2YWwgIiQzPW5vIgorICAgICAjIE9yZGVyIGlzIGltcG9ydGFudCAtIG5ldmVyIGNoZWNrIGEgdHlwZSB0aGF0IGlzIHBvdGVudGlhbGx5IHNtYWxsZXIKKyAgICAgIyB0aGFuIGhhbGYgb2YgdGhlIGV4cGVjdGVkIHRhcmdldCB3aWR0aC4KKyAgICAgZm9yIGFjX3R5cGUgaW4gdWludCQyX3QgJ3Vuc2lnbmVkIGludCcgJ3Vuc2lnbmVkIGxvbmcgaW50JyBcCisJICd1bnNpZ25lZCBsb25nIGxvbmcgaW50JyAndW5zaWduZWQgc2hvcnQgaW50JyAndW5zaWduZWQgY2hhcic7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKCgkYWNfdHlwZSkgLTEgPj4gKCQyIC8gMiAtIDEpKSA+PiAoJDIgLyAyIC0gMSkgPT0gMyldOwordGVzdF9hcnJheSBbMF0gPSAwCisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBjYXNlICRhY190eXBlIGluICMoCisgIHVpbnQkMl90KSA6CisgICAgZXZhbCAiJDM9eWVzIiA7OyAjKAorICAqKSA6CisgICAgZXZhbCAiJDM9XCRhY190eXBlIiA7OworZXNhYworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIGlmIGV2YWwgdGVzdCBcInhcJCIkMyJcIiA9IHgibm8iOyB0aGVuIDoKKworZWxzZQorICBicmVhaworZmkKKyAgICAgZG9uZQorZmkKK2V2YWwgYWNfcmVzPVwkJDMKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQorICBldmFsICRhc19saW5lbm9fc3RhY2s7ICR7YXNfbGluZW5vX3N0YWNrOis6fSB1bnNldCBhc19saW5lbm8KKworfSAjIGFjX2ZuX2NfZmluZF91aW50WF90CisKKyMgYWNfZm5fY19jaGVja19kZWNsIExJTkVOTyBTWU1CT0wgVkFSIElOQ0xVREVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUZXN0cyB3aGV0aGVyIFNZTUJPTCBpcyBkZWNsYXJlZCBpbiBJTkNMVURFUywgc2V0dGluZyBjYWNoZSB2YXJpYWJsZSBWQVIKKyMgYWNjb3JkaW5nbHkuCithY19mbl9jX2NoZWNrX2RlY2wgKCkKK3sKKyAgYXNfbGluZW5vPSR7YXNfbGluZW5vLSIkMSJ9IGFzX2xpbmVub19zdGFjaz1hc19saW5lbm9fc3RhY2s9JGFzX2xpbmVub19zdGFjaworICBhc19kZWNsX25hbWU9YGVjaG8gJDJ8c2VkICdzLyAqKC4qLy8nYAorICBhc19kZWNsX3VzZT1gZWNobyAkMnxzZWQgLWUgJ3MvKC8oKC8nIC1lICdzLykvKSAwJi8nIC1lICdzLywvKSAwJiAoL2cnYAorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJGFzX2RlY2xfbmFtZSBpcyBkZWNsYXJlZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyICRhc19kZWNsX25hbWUgaXMgZGVjbGFyZWQuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JDMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiskNAoraW50CittYWluICgpCit7CisjaWZuZGVmICRhc19kZWNsX25hbWUKKyNpZmRlZiBfX2NwbHVzcGx1cworICAodm9pZCkgJGFzX2RlY2xfdXNlOworI2Vsc2UKKyAgKHZvaWQpICRhc19kZWNsX25hbWU7CisjZW5kaWYKKyNlbmRpZgorCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJDM9eWVzIgorZWxzZQorICBldmFsICIkMz1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCQzCisJICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfcmVzIiA+JjUKKyRhc19lY2hvICIkYWNfcmVzIiA+JjY7IH0KKyAgZXZhbCAkYXNfbGluZW5vX3N0YWNrOyAke2FzX2xpbmVub19zdGFjazorOn0gdW5zZXQgYXNfbGluZW5vCisKK30gIyBhY19mbl9jX2NoZWNrX2RlY2wKK2NhdCA+Y29uZmlnLmxvZyA8PF9BQ0VPRgogVGhpcyBmaWxlIGNvbnRhaW5zIGFueSBtZXNzYWdlcyBwcm9kdWNlZCBieSBjb21waWxlcnMgd2hpbGUKIHJ1bm5pbmcgY29uZmlndXJlLCB0byBhaWQgZGVidWdnaW5nIGlmIGNvbmZpZ3VyZSBtYWtlcyBhIG1pc3Rha2UuCiAKLUl0IHdhcyBjcmVhdGVkIGJ5IE5ldC1TTk1QICRhc19tZSA1LjQuNCwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKK0l0IHdhcyBjcmVhdGVkIGJ5IE5ldC1TTk1QICRhc19tZSA1LjcuMy5yYzEsIHdoaWNoIHdhcworZ2VuZXJhdGVkIGJ5IEdOVSBBdXRvY29uZiAyLjY4LiAgSW52b2NhdGlvbiBjb21tYW5kIGxpbmUgd2FzCiAKICAgJCAkMCAkQAogCiBfQUNFT0YKK2V4ZWMgNT4+Y29uZmlnLmxvZwogewogY2F0IDw8X0FTVU5BTUUKICMjIC0tLS0tLS0tLSAjIwpAQCAtMTQ3MCw3ICsyOTI5LDcgQEAKIC9iaW4vYXJjaCAgICAgICAgICAgICAgPSBgKC9iaW4vYXJjaCkgMj4vZGV2L251bGwgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKIC91c3IvYmluL2FyY2ggLWsgICAgICAgPSBgKC91c3IvYmluL2FyY2ggLWspIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKIC91c3IvY29udmV4L2dldHN5c2luZm8gPSBgKC91c3IvY29udmV4L2dldHN5c2luZm8pIDI+L2Rldi9udWxsIHx8IGVjaG8gdW5rbm93bmAKLWhvc3RpbmZvICAgICAgICAgICAgICAgPSBgKGhvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKKy91c3IvYmluL2hvc3RpbmZvICAgICAgPSBgKC91c3IvYmluL2hvc3RpbmZvKSAyPi9kZXYvbnVsbCAgICAgIHx8IGVjaG8gdW5rbm93bmAKIC9iaW4vbWFjaGluZSAgICAgICAgICAgPSBgKC9iaW4vbWFjaGluZSkgMj4vZGV2L251bGwgICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKIC91c3IvYmluL29zbGV2ZWwgICAgICAgPSBgKC91c3IvYmluL29zbGV2ZWwpIDI+L2Rldi9udWxsICAgICAgIHx8IGVjaG8gdW5rbm93bmAKIC9iaW4vdW5pdmVyc2UgICAgICAgICAgPSBgKC9iaW4vdW5pdmVyc2UpIDI+L2Rldi9udWxsICAgICAgICAgIHx8IGVjaG8gdW5rbm93bmAKQEAgLTE0ODIsOCArMjk0MSw5IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGVjaG8gIlBBVEg6ICRhc19kaXIiCi1kb25lCisgICAgJGFzX2VjaG8gIlBBVEg6ICRhc19kaXIiCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKIAogfSA+JjUKIApAQCAtMTUwNSw3ICsyOTY1LDYgQEAKIGFjX2NvbmZpZ3VyZV9hcmdzPQogYWNfY29uZmlndXJlX2FyZ3MwPQogYWNfY29uZmlndXJlX2FyZ3MxPQotYWNfc2VwPQogYWNfbXVzdF9rZWVwX25leHQ9ZmFsc2UKIGZvciBhY19wYXNzIGluIDEgMgogZG8KQEAgLTE1MTYsMTMgKzI5NzUsMTMgQEAKICAgICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICAgIHwgLXNpbGVudCB8IC0tc2lsZW50IHwgLS1zaWxlbiB8IC0tc2lsZSB8IC0tc2lsKQogICAgICAgY29udGludWUgOzsKLSAgICAqIiAiKnwqIgkiKnwqW1xbXF1cflwjXCRcXlwmXCpcKFwpXHtcfVxcXHxcO1w8XD5cP1wiXCddKikKLSAgICAgIGFjX2FyZz1gZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICAqXCcqKQorICAgICAgYWNfYXJnPWAkYXNfZWNobyAiJGFjX2FyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKICAgICBlc2FjCiAgICAgY2FzZSAkYWNfcGFzcyBpbgotICAgIDEpIGFjX2NvbmZpZ3VyZV9hcmdzMD0iJGFjX2NvbmZpZ3VyZV9hcmdzMCAnJGFjX2FyZyciIDs7CisgICAgMSkgYXNfZm5fYXBwZW5kIGFjX2NvbmZpZ3VyZV9hcmdzMCAiICckYWNfYXJnJyIgOzsKICAgICAyKQotICAgICAgYWNfY29uZmlndXJlX2FyZ3MxPSIkYWNfY29uZmlndXJlX2FyZ3MxICckYWNfYXJnJyIKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJnczEgIiAnJGFjX2FyZyciCiAgICAgICBpZiB0ZXN0ICRhY19tdXN0X2tlZXBfbmV4dCA9IHRydWU7IHRoZW4KIAlhY19tdXN0X2tlZXBfbmV4dD1mYWxzZSAjIEdvdCB2YWx1ZSwgYmFjayB0byBub3JtYWwuCiAgICAgICBlbHNlCkBAIC0xNTM4LDEwNCArMjk5NywxMTUgQEAKIAkgIC0qICkgYWNfbXVzdF9rZWVwX25leHQ9dHJ1ZSA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBhY19jb25maWd1cmVfYXJncz0iJGFjX2NvbmZpZ3VyZV9hcmdzJGFjX3NlcCckYWNfYXJnJyIKLSAgICAgICMgR2V0IHJpZCBvZiB0aGUgbGVhZGluZyBzcGFjZS4KLSAgICAgIGFjX3NlcD0iICIKKyAgICAgIGFzX2ZuX2FwcGVuZCBhY19jb25maWd1cmVfYXJncyAiICckYWNfYXJnJyIKICAgICAgIDs7CiAgICAgZXNhYwogICBkb25lCiBkb25lCi0kYXNfdW5zZXQgYWNfY29uZmlndXJlX2FyZ3MwIHx8IHRlc3QgIiR7YWNfY29uZmlndXJlX2FyZ3MwK3NldH0iICE9IHNldCB8fCB7IGFjX2NvbmZpZ3VyZV9hcmdzMD07IGV4cG9ydCBhY19jb25maWd1cmVfYXJnczA7IH0KLSRhc191bnNldCBhY19jb25maWd1cmVfYXJnczEgfHwgdGVzdCAiJHthY19jb25maWd1cmVfYXJnczErc2V0fSIgIT0gc2V0IHx8IHsgYWNfY29uZmlndXJlX2FyZ3MxPTsgZXhwb3J0IGFjX2NvbmZpZ3VyZV9hcmdzMTsgfQoreyBhY19jb25maWd1cmVfYXJnczA9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczA7fQoreyBhY19jb25maWd1cmVfYXJnczE9OyB1bnNldCBhY19jb25maWd1cmVfYXJnczE7fQogCiAjIFdoZW4gaW50ZXJydXB0ZWQgb3IgZXhpdCdkLCBjbGVhbnVwIHRlbXBvcmFyeSBmaWxlcywgYW5kIGNvbXBsZXRlCiAjIGNvbmZpZy5sb2cuICBXZSByZW1vdmUgY29tbWVudHMgYmVjYXVzZSBhbnl3YXkgdGhlIHF1b3RlcyBpbiB0aGVyZQogIyB3b3VsZCBjYXVzZSBwcm9ibGVtcyBvciBsb29rIHVnbHkuCi0jIFdBUk5JTkc6IEJlIHN1cmUgbm90IHRvIHVzZSBzaW5nbGUgcXVvdGVzIGluIHRoZXJlLCBhcyBzb21lIHNoZWxscywKLSMgc3VjaCBhcyBvdXIgRFUgNS4wIGZyaWVuZCwgd2lsbCB0aGVuIGBjbG9zZScgdGhlIHRyYXAuCisjIFdBUk5JTkc6IFVzZSAnXCcnIHRvIHJlcHJlc2VudCBhbiBhcG9zdHJvcGhlIHdpdGhpbiB0aGUgdHJhcC4KKyMgV0FSTklORzogRG8gbm90IHN0YXJ0IHRoZSB0cmFwIGNvZGUgd2l0aCBhIG5ld2xpbmUsIGR1ZSB0byBhIEZyZWVCU0QgNC4wIGJ1Zy4KIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CiAgICMgU2F2ZSBpbnRvIGNvbmZpZy5sb2cgc29tZSBpbmZvcm1hdGlvbiB0aGF0IG1pZ2h0IGhlbHAgaW4gZGVidWdnaW5nLgogICB7CiAgICAgZWNobwogCi0gICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLSAjIworICAgICRhc19lY2hvICIjIyAtLS0tLS0tLS0tLS0tLS0tICMjCiAjIyBDYWNoZSB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKKyMjIC0tLS0tLS0tLS0tLS0tLS0gIyMiCiAgICAgZWNobwogICAgICMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCi17CisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ1wnJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnXCcnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQogICAoc2V0KSAyPiYxIHwKLSAgICBjYXNlIGAoYWNfc3BhY2U9JyInIicgJyInIic7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCi0gICAgKmFjX3NwYWNlPVwgKikKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9J1wnJyAnXCcnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQogICAgICAgc2VkIC1uIFwKLQkicy8nIiciJy8nIiciJ1xcXFwnIiciJyciJyInL2c7Ci0JICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSciJyInXFwyJyInIicvcCIKLSAgICAgIDs7CisJInMvJ1wnJy8nXCcnXFxcXCdcJycnXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcJydcXDInXCcnL3AiCisgICAgICA7OyAjKAogICAgICopCi0gICAgICBzZWQgLW4gXAotCSJzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPVxcMi9wIgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKICAgICAgIDs7Ci0gICAgZXNhYzsKLX0KKyAgICBlc2FjIHwKKyAgICBzb3J0CispCiAgICAgZWNobwogCi0gICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKICMjIE91dHB1dCB2YXJpYWJsZXMuICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICBlY2hvCiAgICAgZm9yIGFjX3ZhciBpbiAkYWNfc3Vic3RfdmFycwogICAgIGRvCi0gICAgICBldmFsIGFjX3ZhbD0kYGVjaG8gJGFjX3ZhcmAKLSAgICAgIGVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisgICAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICAgIGNhc2UgJGFjX3ZhbCBpbgorICAgICAgKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworICAgICAgZXNhYworICAgICAgJGFzX2VjaG8gIiRhY192YXI9J1wnJyRhY192YWwnXCcnIgogICAgIGRvbmUgfCBzb3J0CiAgICAgZWNobwogCiAgICAgaWYgdGVzdCAtbiAiJGFjX3N1YnN0X2ZpbGVzIjsgdGhlbgotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLSAjIwotIyMgT3V0cHV0IGZpbGVzLiAjIwotIyMgLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgRmlsZSBzdWJzdGl0dXRpb25zLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLSAjIyIKICAgICAgIGVjaG8KICAgICAgIGZvciBhY192YXIgaW4gJGFjX3N1YnN0X2ZpbGVzCiAgICAgICBkbwotCWV2YWwgYWNfdmFsPSRgZWNobyAkYWNfdmFyYAotCWVjaG8gIiRhY192YXI9JyInIickYWNfdmFsJyInIiciCisJZXZhbCBhY192YWw9XCQkYWNfdmFyCisJY2FzZSAkYWNfdmFsIGluCisJKlwnXCcnKikgYWNfdmFsPWAkYXNfZWNobyAiJGFjX3ZhbCIgfCBzZWQgInMvJ1wnJy8nXCcnXFxcXFxcXFwnXCcnJ1wnJy9nImA7OworCWVzYWMKKwkkYXNfZWNobyAiJGFjX3Zhcj0nXCcnJGFjX3ZhbCdcJyciCiAgICAgICBkb25lIHwgc29ydAogICAgICAgZWNobwogICAgIGZpCiAKICAgICBpZiB0ZXN0IC1zIGNvbmZkZWZzLmg7IHRoZW4KLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tICMjCisgICAgICAkYXNfZWNobyAiIyMgLS0tLS0tLS0tLS0gIyMKICMjIGNvbmZkZWZzLmguICMjCi0jIyAtLS0tLS0tLS0tLSAjIwotX0FTQk9YCisjIyAtLS0tLS0tLS0tLSAjIyIKICAgICAgIGVjaG8KLSAgICAgIHNlZCAiL14kL2QiIGNvbmZkZWZzLmggfCBzb3J0CisgICAgICBjYXQgY29uZmRlZnMuaAogICAgICAgZWNobwogICAgIGZpCiAgICAgdGVzdCAiJGFjX3NpZ25hbCIgIT0gMCAmJgotICAgICAgZWNobyAiJGFzX21lOiBjYXVnaHQgc2lnbmFsICRhY19zaWduYWwiCi0gICAgZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKKyAgICAgICRhc19lY2hvICIkYXNfbWU6IGNhdWdodCBzaWduYWwgJGFjX3NpZ25hbCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiBleGl0ICRleGl0X3N0YXR1cyIKICAgfSA+JjUKLSAgcm0gLWYgY29yZSAqLmNvcmUgJiYKLSAgcm0gLXJmIGNvbmZ0ZXN0KiBjb25mZGVmcyogY29uZiQkKiAkYWNfY2xlYW5fZmlsZXMgJiYKKyAgcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qICYmCisgICAgcm0gLWYgLXIgY29uZnRlc3QqIGNvbmZkZWZzKiBjb25mJCQqICRhY19jbGVhbl9maWxlcyAmJgogICAgIGV4aXQgJGV4aXRfc3RhdHVzCi0gICAgICcgMAorJyAwCiBmb3IgYWNfc2lnbmFsIGluIDEgMiAxMyAxNTsgZG8KLSAgdHJhcCAnYWNfc2lnbmFsPSckYWNfc2lnbmFsJzsgeyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAkYWNfc2lnbmFsCisgIHRyYXAgJ2FjX3NpZ25hbD0nJGFjX3NpZ25hbCc7IGFzX2ZuX2V4aXQgMScgJGFjX3NpZ25hbAogZG9uZQogYWNfc2lnbmFsPTAKIAogIyBjb25mZGVmcy5oIGF2b2lkcyBPUyBjb21tYW5kIGxpbmUgbGVuZ3RoIGxpbWl0cyB0aGF0IERFRlMgY2FuIGV4Y2VlZC4KLXJtIC1yZiBjb25mdGVzdCogY29uZmRlZnMuaAotIyBBSVggY3BwIGxvc2VzIG9uIGFuIGVtcHR5IGZpbGUsIHNvIG1ha2Ugc3VyZSBpdCBjb250YWlucyBhdCBsZWFzdCBhIG5ld2xpbmUuCi1lY2hvID5jb25mZGVmcy5oCitybSAtZiAtciBjb25mdGVzdCogY29uZmRlZnMuaAorCiskYXNfZWNobyAiLyogY29uZmRlZnMuaCAqLyIgPiBjb25mZGVmcy5oCiAKICMgUHJlZGVmaW5lZCBwcmVwcm9jZXNzb3IgdmFyaWFibGVzLgogCkBAIC0xNjQzLDExMiArMzExMywxMzcgQEAKICNkZWZpbmUgUEFDS0FHRV9OQU1FICIkUEFDS0FHRV9OQU1FIgogX0FDRU9GCiAKLQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBQQUNLQUdFX1RBUk5BTUUgIiRQQUNLQUdFX1RBUk5BTUUiCiBfQUNFT0YKIAotCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFBBQ0tBR0VfVkVSU0lPTiAiJFBBQ0tBR0VfVkVSU0lPTiIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9TVFJJTkcgIiRQQUNLQUdFX1NUUklORyIKIF9BQ0VPRgogCi0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUEFDS0FHRV9CVUdSRVBPUlQgIiRQQUNLQUdFX0JVR1JFUE9SVCIKIF9BQ0VPRgogCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFBBQ0tBR0VfVVJMICIkUEFDS0FHRV9VUkwiCitfQUNFT0YKKwogCiAjIExldCB0aGUgc2l0ZSBmaWxlIHNlbGVjdCBhbiBhbHRlcm5hdGUgY2FjaGUgZmlsZSBpZiBpdCB3YW50cyB0by4KLSMgUHJlZmVyIGV4cGxpY2l0bHkgc2VsZWN0ZWQgZmlsZSB0byBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIG9uZXMuCi1pZiB0ZXN0IC16ICIkQ09ORklHX1NJVEUiOyB0aGVuCi0gIGlmIHRlc3QgIngkcHJlZml4IiAhPSB4Tk9ORTsgdGhlbgotICAgIENPTkZJR19TSVRFPSIkcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlICRwcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgotICBlbHNlCi0gICAgQ09ORklHX1NJVEU9IiRhY19kZWZhdWx0X3ByZWZpeC9zaGFyZS9jb25maWcuc2l0ZSAkYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlIgotICBmaQorIyBQcmVmZXIgYW4gZXhwbGljaXRseSBzZWxlY3RlZCBmaWxlIHRvIGF1dG9tYXRpY2FsbHkgc2VsZWN0ZWQgb25lcy4KK2FjX3NpdGVfZmlsZTE9Tk9ORQorYWNfc2l0ZV9maWxlMj1OT05FCitpZiB0ZXN0IC1uICIkQ09ORklHX1NJVEUiOyB0aGVuCisgICMgV2UgZG8gbm90IHdhbnQgYSBQQVRIIHNlYXJjaCBmb3IgY29uZmlnLnNpdGUuCisgIGNhc2UgJENPTkZJR19TSVRFIGluICMoKAorICAgIC0qKSAgYWNfc2l0ZV9maWxlMT0uLyRDT05GSUdfU0lURTs7CisgICAgKi8qKSBhY19zaXRlX2ZpbGUxPSRDT05GSUdfU0lURTs7CisgICAgKikgICBhY19zaXRlX2ZpbGUxPS4vJENPTkZJR19TSVRFOzsKKyAgZXNhYworZWxpZiB0ZXN0ICJ4JHByZWZpeCIgIT0geE5PTkU7IHRoZW4KKyAgYWNfc2l0ZV9maWxlMT0kcHJlZml4L3NoYXJlL2NvbmZpZy5zaXRlCisgIGFjX3NpdGVfZmlsZTI9JHByZWZpeC9ldGMvY29uZmlnLnNpdGUKK2Vsc2UKKyAgYWNfc2l0ZV9maWxlMT0kYWNfZGVmYXVsdF9wcmVmaXgvc2hhcmUvY29uZmlnLnNpdGUKKyAgYWNfc2l0ZV9maWxlMj0kYWNfZGVmYXVsdF9wcmVmaXgvZXRjL2NvbmZpZy5zaXRlCiBmaQotZm9yIGFjX3NpdGVfZmlsZSBpbiAkQ09ORklHX1NJVEU7IGRvCi0gIGlmIHRlc3QgLXIgIiRhY19zaXRlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKLWVjaG8gIiRhc19tZTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjY7fQorZm9yIGFjX3NpdGVfZmlsZSBpbiAiJGFjX3NpdGVfZmlsZTEiICIkYWNfc2l0ZV9maWxlMiIKK2RvCisgIHRlc3QgIngkYWNfc2l0ZV9maWxlIiA9IHhOT05FICYmIGNvbnRpbnVlCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkYWNfc2l0ZV9maWxlIiAmJiB0ZXN0IC1yICIkYWNfc2l0ZV9maWxlIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogbG9hZGluZyBzaXRlIHNjcmlwdCAkYWNfc2l0ZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgc2l0ZSBzY3JpcHQgJGFjX3NpdGVfZmlsZSIgPiY2O30KICAgICBzZWQgJ3MvXi98IC8nICIkYWNfc2l0ZV9maWxlIiA+JjUKLSAgICAuICIkYWNfc2l0ZV9maWxlIgorICAgIC4gIiRhY19zaXRlX2ZpbGUiIFwKKyAgICAgIHx8IHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImZhaWxlZCB0byBsb2FkIHNpdGUgc2NyaXB0ICRhY19zaXRlX2ZpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAgIGZpCiBkb25lCiAKIGlmIHRlc3QgLXIgIiRjYWNoZV9maWxlIjsgdGhlbgotICAjIFNvbWUgdmVyc2lvbnMgb2YgYmFzaCB3aWxsIGZhaWwgdG8gc291cmNlIC9kZXYvbnVsbCAoc3BlY2lhbAotICAjIGZpbGVzIGFjdHVhbGx5KSwgc28gd2UgYXZvaWQgZG9pbmcgdGhhdC4KLSAgaWYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogbG9hZGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICMgU29tZSB2ZXJzaW9ucyBvZiBiYXNoIHdpbGwgZmFpbCB0byBzb3VyY2UgL2Rldi9udWxsIChzcGVjaWFsIGZpbGVzCisgICMgYWN0dWFsbHkpLCBzbyB3ZSBhdm9pZCBkb2luZyB0aGF0LiAgREpHUFAgZW11bGF0ZXMgaXQgYXMgYSByZWd1bGFyIGZpbGUuCisgIGlmIHRlc3QgL2Rldi9udWxsICE9ICIkY2FjaGVfZmlsZSIgJiYgdGVzdCAtZiAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBsb2FkaW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGxvYWRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CiAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbgotICAgICAgW1xcL10qIHwgPzpbXFwvXSogKSAuICRjYWNoZV9maWxlOzsKLSAgICAgICopICAgICAgICAgICAgICAgICAgICAgIC4gLi8kY2FjaGVfZmlsZTs7CisgICAgICBbXFwvXSogfCA/OltcXC9dKiApIC4gIiRjYWNoZV9maWxlIjs7CisgICAgICAqKSAgICAgICAgICAgICAgICAgICAgICAuICIuLyRjYWNoZV9maWxlIjs7CiAgICAgZXNhYwogICBmaQogZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICA+JGNhY2hlX2ZpbGUKIGZpCiAKICMgQ2hlY2sgdGhhdCB0aGUgcHJlY2lvdXMgdmFyaWFibGVzIHNhdmVkIGluIHRoZSBjYWNoZSBoYXZlIGtlcHQgdGhlIHNhbWUKICMgdmFsdWUuCiBhY19jYWNoZV9jb3JydXB0ZWQ9ZmFsc2UKLWZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfAotCSAgICAgICBzZWQgLW4gJ3MvXmFjX2Vudl9cKFthLXpBLVpfMC05XSpcKV9zZXQ9LiovXDEvcCdgOyBkbworZm9yIGFjX3ZhciBpbiAkYWNfcHJlY2lvdXNfdmFyczsgZG8KICAgZXZhbCBhY19vbGRfc2V0PVwkYWNfY3ZfZW52XyR7YWNfdmFyfV9zZXQKICAgZXZhbCBhY19uZXdfc2V0PVwkYWNfZW52XyR7YWNfdmFyfV9zZXQKLSAgZXZhbCBhY19vbGRfdmFsPSJcJGFjX2N2X2Vudl8ke2FjX3Zhcn1fdmFsdWUiCi0gIGV2YWwgYWNfbmV3X3ZhbD0iXCRhY19lbnZfJHthY192YXJ9X3ZhbHVlIgorICBldmFsIGFjX29sZF92YWw9XCRhY19jdl9lbnZfJHthY192YXJ9X3ZhbHVlCisgIGV2YWwgYWNfbmV3X3ZhbD1cJGFjX2Vudl8ke2FjX3Zhcn1fdmFsdWUKICAgY2FzZSAkYWNfb2xkX3NldCwkYWNfbmV3X3NldCBpbgogICAgIHNldCwpCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIHdhcyBzZXQgdG8gXGAkYWNfb2xkX3ZhbCcgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgc2V0IHRvIFxgJGFjX29sZF92YWwnIGluIHRoZSBwcmV2aW91cyBydW4iID4mMjt9CiAgICAgICBhY19jYWNoZV9jb3JydXB0ZWQ9OiA7OwogICAgICxzZXQpCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IFxgJGFjX3Zhcicgd2FzIG5vdCBzZXQgaW4gdGhlIHByZXZpb3VzIHJ1biIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogXGAkYWNfdmFyJyB3YXMgbm90IHNldCBpbiB0aGUgcHJldmlvdXMgcnVuIiA+JjI7fQogICAgICAgYWNfY2FjaGVfY29ycnVwdGVkPTogOzsKICAgICAsKTs7CiAgICAgKikKICAgICAgIGlmIHRlc3QgIngkYWNfb2xkX3ZhbCIgIT0gIngkYWNfbmV3X3ZhbCI7IHRoZW4KLQl7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogXGAkYWNfdmFyJyBoYXMgY2hhbmdlZCBzaW5jZSB0aGUgcHJldmlvdXMgcnVuOiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgZm9ybWVyIHZhbHVlOiAgJGFjX29sZF92YWwiID4mNQotZWNobyAiJGFzX21lOiAgIGZvcm1lciB2YWx1ZTogICRhY19vbGRfdmFsIiA+JjI7fQotCXsgZWNobyAiJGFzX21lOiRMSU5FTk86ICAgY3VycmVudCB2YWx1ZTogJGFjX25ld192YWwiID4mNQotZWNobyAiJGFzX21lOiAgIGN1cnJlbnQgdmFsdWU6ICRhY19uZXdfdmFsIiA+JjI7fQotCWFjX2NhY2hlX2NvcnJ1cHRlZD06CisJIyBkaWZmZXJlbmNlcyBpbiB3aGl0ZXNwYWNlIGRvIG5vdCBsZWFkIHRvIGZhaWx1cmUuCisJYWNfb2xkX3ZhbF93PWBlY2hvIHggJGFjX29sZF92YWxgCisJYWNfbmV3X3ZhbF93PWBlY2hvIHggJGFjX25ld192YWxgCisJaWYgdGVzdCAiJGFjX29sZF92YWxfdyIgIT0gIiRhY19uZXdfdmFsX3ciOyB0aGVuCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBcYCRhY192YXInIGhhcyBjaGFuZ2VkIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgYWNfY2FjaGVfY29ycnVwdGVkPToKKwllbHNlCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IHdhcm5pbmc6IGlnbm9yaW5nIHdoaXRlc3BhY2UgY2hhbmdlcyBpbiBcYCRhY192YXInIHNpbmNlIHRoZSBwcmV2aW91cyBydW46IiA+JjI7fQorCSAgZXZhbCAkYWNfdmFyPVwkYWNfb2xkX3ZhbAorCWZpCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGZvcm1lciB2YWx1ZTogIFxgJGFjX29sZF92YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgZm9ybWVyIHZhbHVlOiAgXGAkYWNfb2xkX3ZhbCciID4mMjt9CisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAgIGN1cnJlbnQgdmFsdWU6IFxgJGFjX25ld192YWwnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6ICAgY3VycmVudCB2YWx1ZTogXGAkYWNfbmV3X3ZhbCciID4mMjt9CiAgICAgICBmaTs7CiAgIGVzYWMKICAgIyBQYXNzIHByZWNpb3VzIHZhcmlhYmxlcyB0byBjb25maWcuc3RhdHVzLgogICBpZiB0ZXN0ICIkYWNfbmV3X3NldCIgPSBzZXQ7IHRoZW4KICAgICBjYXNlICRhY19uZXdfdmFsIGluCi0gICAgKiIgIip8KiIJIip8KltcW1xdXH5cI1wkXF5cJlwqXChcKVx7XH1cXFx8XDtcPFw+XD9cIlwnXSopCi0gICAgICBhY19hcmc9JGFjX3Zhcj1gZWNobyAiJGFjX25ld192YWwiIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgKlwnKikgYWNfYXJnPSRhY192YXI9YCRhc19lY2hvICIkYWNfbmV3X3ZhbCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKICAgICAqKSBhY19hcmc9JGFjX3Zhcj0kYWNfbmV3X3ZhbCA7OwogICAgIGVzYWMKICAgICBjYXNlICIgJGFjX2NvbmZpZ3VyZV9hcmdzICIgaW4KICAgICAgICoiICckYWNfYXJnJyAiKikgOzsgIyBBdm9pZCBkdXBzLiAgVXNlIG9mIHF1b3RlcyBlbnN1cmVzIGFjY3VyYWN5LgotICAgICAgKikgYWNfY29uZmlndXJlX2FyZ3M9IiRhY19jb25maWd1cmVfYXJncyAnJGFjX2FyZyciIDs7CisgICAgICAqKSBhc19mbl9hcHBlbmQgYWNfY29uZmlndXJlX2FyZ3MgIiAnJGFjX2FyZyciIDs7CiAgICAgZXNhYwogICBmaQogZG9uZQogaWYgJGFjX2NhY2hlX2NvcnJ1cHRlZDsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNoYW5nZXMgaW4gdGhlIGVudmlyb25tZW50IGNhbiBjb21wcm9taXNlIHRoZSBidWlsZCIgPiYyO30KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogcnVuIFxgbWFrZSBkaXN0Y2xlYW4nIGFuZC9vciBcYHJtICRjYWNoZV9maWxlJyBhbmQgc3RhcnQgb3ZlciIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogY2hhbmdlcyBpbiB0aGUgZW52aXJvbm1lbnQgY2FuIGNvbXByb21pc2UgdGhlIGJ1aWxkIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBjaGFuZ2VzIGluIHRoZSBlbnZpcm9ubWVudCBjYW4gY29tcHJvbWlzZSB0aGUgYnVpbGQiID4mMjt9CisgIGFzX2ZuX2Vycm9yICQ/ICJydW4gXGBtYWtlIGRpc3RjbGVhbicgYW5kL29yIFxgcm0gJGNhY2hlX2ZpbGUnIGFuZCBzdGFydCBvdmVyIiAiJExJTkVOTyIgNQogZmkKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWluIGJvZHkgb2Ygc2NyaXB0LiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCkBAIC0xNzYyLDMxICszMjU3LDcgQEAKIAogCiAKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLSAgICAgICAgICBhY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiCithY19jb25maWdfaGVhZGVycz0iJGFjX2NvbmZpZ19oZWFkZXJzIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiCiAKIAogCkBAIC0xNzk2LDU3MCArMzI2NywxMzcgQEAKICMKICMgc2F2ZSB0aGUgY29uZmlndXJlIGFyZ3VtZW50cwogIworCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMgIiRhY19jb25maWd1cmVfYXJncyIKIF9BQ0VPRgogCi1DT05GSUdVUkVfT1BUSU9OUz0iXCIkYWNfY29uZmlndXJlX2FyZ3MiXCIKK0NPTkZJR1VSRV9PUFRJT05TPSJcIiRhY19jb25maWd1cmVfYXJnc1wiIgogCiAKLSMKLSMgQ29tcGlsYXRpb24gc2V0dXAKLSMKKyMjCisjIyBSZWNvbW1lbmRlZCBzdHJ1Y3R1cmU6CisjIworIyAgICAgaW5mb3JtYXRpb24gb24gdGhlIHBhY2thZ2UKKyMgICAgIGNoZWNrcyBmb3IgcHJvZ3JhbXMKKyMgICAgIGNoZWNrcyBmb3IgbGlicmFyaWVzCisjICAgICBjaGVja3MgZm9yIGhlYWRlciBmaWxlcworIyAgICAgY2hlY2tzIGZvciB0eXBlcworIyAgICAgY2hlY2tzIGZvciBzdHJ1Y3R1cmVzCisjICAgICBjaGVja3MgZm9yIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcworIyAgICAgY2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucworIyAgICAgY2hlY2tzIGZvciBzeXN0ZW0gc2VydmljZXMKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jYyBvciAtLXdpdGhvdXQtY2Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2NjK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2NjIgotICBDQz0kd2l0aF9jYztleHBvcnQgQ0MKLWZpOworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgICBDb21tYW5kLWxpbmUgcHJvY2Vzc2luZyAtIC0td2l0aC8tLWVuYWJsZQorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3lzdGVtOiBDb21waWxlciBzZXR0aW5ncworIyMKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpbmtjYyBvciAtLXdpdGhvdXQtbGlua2NjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9saW5rY2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbGlua2NjIgotICBMSU5LQ0M9JHdpdGhfbGlua2NjO2V4cG9ydCBMSU5LQ0MKLWZpOworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2NjOyBDQz0kd2l0aF9jYztleHBvcnQgQ0MKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hciBvciAtLXdpdGhvdXQtYXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2FyK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2FyIgotICBBUj0kd2l0aF9hcjsgZXhwb3J0IEFSCi1maTsKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saW5rY2Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xpbmtjYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbGlua2NjOyBMSU5LQ0M9JHdpdGhfbGlua2NjO2V4cG9ydCBMSU5LQ0MKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbmRpYW5uZXNzIG9yIC0td2l0aG91dC1lbmRpYW5uZXNzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lbmRpYW5uZXNzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VuZGlhbm5lc3MiCi0gIGlmIHRlc3QgJHdpdGhfZW5kaWFubmVzcyAhPSAiYmlnIiAtYSAkd2l0aF9lbmRpYW5uZXNzICE9ICJsaXR0bGUiIDsgdGhlbgotICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEVuZGlhbm5lc3MgbXVzdCBiZSBiaWcgb3IgbGl0dGxlLCBub3QgXCIkd2l0aF9lbmRpYW5uZXNzXCIuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEVuZGlhbm5lc3MgbXVzdCBiZSBiaWcgb3IgbGl0dGxlLCBub3QgXCIkd2l0aF9lbmRpYW5uZXNzXCIuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYXI7IEFSPSR3aXRoX2FyOyBleHBvcnQgQVIKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVuZGlhbm5lc3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VuZGlhbm5lc3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VuZGlhbm5lc3M7IGlmIHRlc3QgJHdpdGhfZW5kaWFubmVzcyAhPSAiYmlnIiAtYSAkd2l0aF9lbmRpYW5uZXNzICE9ICJsaXR0bGUiIDsgdGhlbgorICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJFbmRpYW5uZXNzIG11c3QgYmUgYmlnIG9yIGxpdHRsZSwgbm90IFwiJHdpdGhfZW5kaWFubmVzc1wiLiIgIiRMSU5FTk8iIDU7CiAgICAgIGZpCiAKLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2ZsYWdzIG9yIC0td2l0aG91dC1jZmxhZ3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2NmbGFncytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9jZmxhZ3MiCi0gIENGTEFHUz0kd2l0aF9jZmxhZ3M7IGV4cG9ydCBDRkxBR1MKLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGRmbGFncyBvciAtLXdpdGhvdXQtbGRmbGFncyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGRmbGFncytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9sZGZsYWdzIgotICBMREZMQUdTPSR3aXRoX2xkZmxhZ3M7IGV4cG9ydCBMREZMQUdTCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFzLW5lZWRlZCBvciAtLWRpc2FibGUtYXMtbmVlZGVkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FzX25lZWRlZCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfYXNfbmVlZGVkIgotCi1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWxpYnMgb3IgLS13aXRob3V0LWxpYnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2xpYnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbGlicyIKLSAgTElCUz0kd2l0aF9saWJzOyBleHBvcnQgTElCUwotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtbGlidG9vbCBvciAtLWRpc2FibGUtc2lsZW50LWxpYnRvb2wgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2lsZW50X2xpYnRvb2wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NpbGVudF9saWJ0b29sIgotICBMSUJUT09MRkxBR1M9LS1zaWxlbnQKLWZpOwotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pbnN0YWxsLXByZWZpeCBvciAtLXdpdGhvdXQtaW5zdGFsbC1wcmVmaXggd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2luc3RhbGxfcHJlZml4K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2luc3RhbGxfcHJlZml4IgotICBJTlNUQUxMX1BSRUZJWD0iJHdpdGh2YWwiCi1maTsKLQotaWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieHllcyIgOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IC0td2l0aC1pbnN0YWxsLXByZWZpeCByZXF1aXJlcyBhbiBhcmd1bWVudCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAtLXdpdGgtaW5zdGFsbC1wcmVmaXggcmVxdWlyZXMgYW4gYXJndW1lbnQiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1pZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4bm8iIDsgdGhlbgotICBJTlNUQUxMX1BSRUZJWD0iIgogZmkKIAogCi0jIGNoZWNrIGZvciBlcnJvcnMgaW4gYXJncyB0aGF0IHJ1biBhZnRlciBtb2R1bGUgcHJvY2Vzc2luZyBoZXJlLCBzbwotIyB0aGV5IGZhaWwgYmVmb3JlIG1vZHVsZSBwcm9jZXNzaW5nLi4uCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlid3JhcCBvciAtLWRpc2FibGUtbGlid3JhcCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJ3cmFwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9saWJ3cmFwIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbGlid3JhcC8tLXdpdGhvdXQtbGlid3JhcCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbGlid3JhcC8tLXdpdGhvdXQtbGlid3JhcCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS16bGliIG9yIC0tZGlzYWJsZS16bGliIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3psaWIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3psaWIiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC16bGliLy0td2l0aG91dC16bGliIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC16bGliLy0td2l0aG91dC16bGliIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pbmlfYWdlbnQgb3IgLS1kaXNhYmxlLW1pbmlfYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWluaV9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWluaV9hZ2VudCIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9taW5pX2FnZW50IiA9ICJ4eWVzIjsgdGhlbgotICAgIG1pbmlfYWdlbnQ9InllcyIKLWVsc2UKLSAgICBtaW5pX2FnZW50PSJubyIKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2ZsYWdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2NmbGFnczsgQ0ZMQUdTPSR3aXRoX2NmbGFnczsgZXhwb3J0IENGTEFHUwogZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taW5pX2FnZW50IG9yIC0td2l0aG91dC1taW5pX2FnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taW5pX2FnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pbmlfYWdlbnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWluaWFnZW50IG9yIC0td2l0aG91dC1taW5pYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pbmlhZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taW5pYWdlbnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWluaWFnZW50IG9yIC0tZGlzYWJsZS1taW5pYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWluaWFnZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taW5pYWdlbnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmktYWdlbnQvLS1kaXNhYmxlLW1pbmktYWdlbnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZ2VudCBvciAtLWRpc2FibGUtYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2FnZW50IgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sZGZsYWdzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9sZGZsYWdzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9sZGZsYWdzOyBMREZMQUdTPSR3aXRoX2xkZmxhZ3M7IGV4cG9ydCBMREZMQUdTCitmaQogCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX2FnZW50IiAhPSAieG5vIjsgdGhlbgotICAgU05NUEQ9J3NubXBkJChFWEVFWFQpJwotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKLSAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKLSAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCi1lbHNlCi0gICBTTk1QRD0iIgotICAgIyB3ZSBzdGlsbCBuZWVkL3dhbnQgdGhlIGFnZW50bGlicyAoZm9yIHN1YmFnZW50cywgZS5nLiBzbm1wdHJhcGQpCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgotICAgIyBidWlsZGluZyBzbm1wdHJhcGQgdy9vIGFnZW50bGlicyBkb2Vzbid0IHdvcmsgYXRtCi0gICAjVFJBUExJQlM9JyQoVFJBUERXSVRIT1VUQUdFTlQpJwotICAgI1VTRVRSQVBMSUJTPSckKFVTRUxJQlMpJwotICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJwotICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFzLW5lZWRlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hc19uZWVkZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hc19uZWVkZWQ7CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saWJzOyBMSUJTPSR3aXRoX2xpYnM7IGV4cG9ydCBMSUJTCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaWxlbnQtbGlidG9vbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaWxlbnRfbGlidG9vbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NpbGVudF9saWJ0b29sOyBMSUJUT09MRkxBR1M9LS1zaWxlbnQKIGZpCiAKIAogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWdlbnQgb3IgLS13aXRob3V0LWFnZW50IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9hZ2VudCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnQvLS1kaXNhYmxlLWFnZW50IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50Ly0tZGlzYWJsZS1hZ2VudCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisjIworIyAgIFN5c3RlbTogTGlicmFyeSBzZXR0aW5ncworIyMKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFwcGxpY2F0aW9ucyBvciAtLWRpc2FibGUtYXBwbGljYXRpb25zIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FwcGxpY2F0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfYXBwbGljYXRpb25zIgogCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX2FwcGxpY2F0aW9ucyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYXBwcyIKLWZpCi0jIENvbW1vbiBtaXN0YWtlcwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWFwcGxpY2F0aW9ucyBvciAtLXdpdGhvdXQtYXBwbGljYXRpb25zIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hcHBsaWNhdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfYXBwbGljYXRpb25zIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hcHBsaWNhdGlvbnMvLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hcHBsaWNhdGlvbnMvLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYW51YWxzIG9yIC0tZGlzYWJsZS1tYW51YWxzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21hbnVhbHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21hbnVhbHMiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfbWFudWFscyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWFuIgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kbWFsbG9jIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kbWFsbG9jK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kbWFsbG9jOwogZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tYW51YWxzIG9yIC0td2l0aG91dC1tYW51YWxzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9tYW51YWxzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21hbnVhbHMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1hbnVhbHMvLS1kaXNhYmxlLW1hbnVhbHMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWFudWFscy8tLWRpc2FibGUtbWFudWFscyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zY3JpcHRzIG9yIC0tZGlzYWJsZS1zY3JpcHRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NjcmlwdHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NjcmlwdHMiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfc2NyaXB0cyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbG9jYWwiCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNjcmlwdHMgb3IgLS13aXRob3V0LXNjcmlwdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NjcmlwdHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc2NyaXB0cyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2NyaXB0cy8tLWRpc2FibGUtc2NyaXB0cyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zY3JpcHRzLy0tZGlzYWJsZS1zY3JpcHRzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYnMgb3IgLS1kaXNhYmxlLW1pYnMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWlicytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWlicyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9taWJzIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtaWJzIgotZmkKLSMgd2l0aC1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoYXQgdG8gYnVpbGQgYW5kIGluc3RhbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGF0IHRvIGJ1aWxkIGFuZCBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BSU5TVUJTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRNQUlOU1VCUyIgPiY2Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWItbG9hZGluZyBvciAtLWRpc2FibGUtbWliLWxvYWRpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWliX2xvYWRpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21pYl9sb2FkaW5nIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX21pYl9sb2FkaW5nIiA9ICJ4bm8iOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAxCi1fQUNFT0YKLQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItbG9hZGluZyBvciAtLXdpdGhvdXQtbWliLWxvYWRpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYl9sb2FkaW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYl9sb2FkaW5nIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItbG9hZGluZy8tLWRpc2FibGUtbWliLWxvYWRpbmcgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWxvYWRpbmcvLS1kaXNhYmxlLW1pYi1sb2FkaW5nIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIwotU05NUF9WRVJTSU9OUz0iIgotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNubXB2MSBvciAtLWRpc2FibGUtc25tcHYxIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NubXB2MStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc25tcHYxIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX3NubXB2MSIgPSAieG5vIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfU05NUFYxIDEKLV9BQ0VPRgotCi1lbHNlCi0gIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDEiCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNubXB2MSBvciAtLXdpdGhvdXQtc25tcHYxIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zbm1wdjErc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc25tcHYxIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjEvLS1kaXNhYmxlLXNubXB2MSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjEvLS1kaXNhYmxlLXNubXB2MSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbm1wdjJjIG9yIC0tZGlzYWJsZS1zbm1wdjJjIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NubXB2MmMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NubXB2MmMiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfc25tcHYyYyIgPSAieG5vIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfU05NUFYyQyAxCi1fQUNFT0YKLQotZWxzZQotICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAyYyIKLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc25tcHYyYyBvciAtLXdpdGhvdXQtc25tcHYyYyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc25tcHYyYytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zbm1wdjJjIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjJjLy0tZGlzYWJsZS1zbm1wdjJjIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MmMvLS1kaXNhYmxlLXNubXB2MmMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi1TTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAzIgotCi0gIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKLSAgU05NUCBWZXJzaW9ucyBTdXBwb3J0ZWQ6ICAgJFNOTVBfVkVSU0lPTlMKLUVPRgotCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZXQtc3VwcG9ydCBvciAtLWRpc2FibGUtc2V0LXN1cHBvcnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2V0X3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NldF9zdXBwb3J0IgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX3NldF9zdXBwb3J0IiA9ICJ4bm8iOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAxCi1fQUNFT0YKLQotZmkKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZXQtc3VwcG9ydCBvciAtLXdpdGhvdXQtc2V0LXN1cHBvcnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NldF9zdXBwb3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NldF9zdXBwb3J0IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zZXQtc3VwcG9ydC8tLWRpc2FibGUtc2V0LXN1cHBvcnQgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2V0LXN1cHBvcnQvLS1kaXNhYmxlLXNldC1zdXBwb3J0IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRlcyBvciAtLWRpc2FibGUtZGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZGVzIgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX2RlcyIgPSAieG5vIjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfREVTIDEKLV9BQ0VPRgotCi1maQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlcyBvciAtLXdpdGhvdXQtZGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXMvLS1kaXNhYmxlLWRlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXMvLS1kaXNhYmxlLWRlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wcml2YWN5IG9yIC0tZGlzYWJsZS1wcml2YWN5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3ByaXZhY3krc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3ByaXZhY3kiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYgMQotX0FDRU9GCi0KLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcHJpdmFjeSBvciAtLXdpdGhvdXQtcHJpdmFjeSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcHJpdmFjeStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9wcml2YWN5IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wcml2YWN5Ly0tZGlzYWJsZS1wcml2YWN5IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXByaXZhY3kvLS1kaXNhYmxlLXByaXZhY3kgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWQ1IG9yIC0tZGlzYWJsZS1tZDUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWQ1K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9tZDUiCi0KLWZpOwotaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9NRDUgMQotX0FDRU9GCi0KLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWQ1IG9yIC0td2l0aG91dC1tZDUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21kNStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9tZDUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1kNS8tLWRpc2FibGUtbWQ1IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1kNS8tLWRpc2FibGUtbWQ1IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWludGVybmFsLW1kNSBvciAtLWRpc2FibGUtaW50ZXJuYWwtbWQ1IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2ludGVybmFsX21kNStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfaW50ZXJuYWxfbWQ1IgotCi1maTsKLWlmIHRlc3QgIngkZW5hYmxlX2ludGVybmFsX21kNSIgPSAieHllcyI7IHRoZW4KLSAgaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogWW91IGNhbiBub3Qgc3BlY2lmeSBib3RoIC0tZW5hYmxlLWludGVybmFsLW1kNSBhbmQgLS1kaXNhYmxlLW1kNSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBZb3UgY2FuIG5vdCBzcGVjaWZ5IGJvdGggLS1lbmFibGUtaW50ZXJuYWwtbWQ1IGFuZCAtLWRpc2FibGUtbWQ1IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGVsc2UKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUgMQotX0FDRU9GCi0KLSAgZmkKLWZpCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaW50ZXJuYWwtbWQ1IG9yIC0td2l0aG91dC1pbnRlcm5hbC1tZDUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2ludGVybmFsX21kNStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9pbnRlcm5hbF9tZDUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWludGVybmFsLW1kNS8tLWRpc2FibGUtaW50ZXJuYWwtbWQ1IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWludGVybmFsLW1kNS8tLWRpc2FibGUtaW50ZXJuYWwtbWQ1IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWlwdjYgb3IgLS1kaXNhYmxlLWlwdjYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfaXB2NitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfaXB2NiIKLSAgaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lQVjYgMQotX0FDRU9GCi0KLSAgICBmaQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtaXB2NiBvciAtLXdpdGhvdXQtaXB2NiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfaXB2NitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9pcHY2IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pcHY2Ly0tZGlzYWJsZS1pcHY2IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWlwdjYvLS1kaXNhYmxlLWlwdjYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbG9jYWwtc211eCBvciAtLWRpc2FibGUtbG9jYWwtc211eCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9sb2NhbF9zbXV4K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9sb2NhbF9zbXV4IgotICBpZiB0ZXN0ICJ4JGVuYWJsZV9sb2NhbF9zbXV4IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWCAxCi1fQUNFT0YKLQotICAgIGZpCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sb2NhbC1zbXV4IG9yIC0td2l0aG91dC1sb2NhbC1zbXV4IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9sb2NhbF9zbXV4K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2xvY2FsX3NtdXgiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWxvY2FsLXNtdXgvLS1kaXNhYmxlLWxvY2FsLXNtdXggaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbG9jYWwtc211eC8tLWRpc2FibGUtbG9jYWwtc211eCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWJ1Z2dpbmcgb3IgLS1kaXNhYmxlLWRlYnVnZ2luZyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZWJ1Z2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlYnVnZ2luZyIKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9BTFdBWVNfREVCVUcgMQotX0FDRU9GCi0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlYnVnZ2luZyBvciAtLXdpdGhvdXQtZGVidWdnaW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9kZWJ1Z2dpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZGVidWdnaW5nIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZWJ1Z2dpbmcvLS1kaXNhYmxlLWRlYnVnZ2luZyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZWJ1Z2dpbmcvLS1kaXNhYmxlLWRlYnVnZ2luZyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXZlbG9wZXIgb3IgLS1kaXNhYmxlLWRldmVsb3BlciB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9kZXZlbG9wZXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RldmVsb3BlciIKLSAgZGV2ZWxvcGVyPXllcwotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZGV2ZWxvcGVyIG9yIC0td2l0aG91dC1kZXZlbG9wZXIgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RldmVsb3BlcitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9kZXZlbG9wZXIiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRldmVsb3Blci8tLWRpc2FibGUtZGV2ZWxvcGVyIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRldmVsb3Blci8tLWRpc2FibGUtZGV2ZWxvcGVyIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotaWYgdGVzdCAieCRlbmFibGVfZGVidWdnaW5nIiA9ICJ4bm8iOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9OT19ERUJVR0dJTkcgMQotX0FDRU9GCi0KKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kbWFsbG9jIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kbWFsbG9jOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG1hbGxvYy8tLXdpdGhvdXQtZG1hbGxvYyBpbnN0ZWFkIiAiJExJTkVOTyIgNQogZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRtYWxsb2Mgb3IgLS13aXRob3V0LWRtYWxsb2Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZG1hbGxvYyIKLSAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgTElCUz0iJExJQlMgLWxkbWFsbG9jIgotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ETUFMTE9DX0ggMQotX0FDRU9GCiAKLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lZmVuY2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VmZW5jZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZWZlbmNlOyB1c2VfZWZlbmNlPSIkd2l0aHZhbCIKK2ZpCiAKLSAgaWYgdGVzdCAieCR3aXRodmFsIiAhPSB4IC1hIC1kICR3aXRodmFsOyB0aGVuCi0gICAgIGlmIHRlc3QgLWQgJHdpdGh2YWwvbGliOyB0aGVuCi0gICAgICAgTERGTEFHUz0iLUwkd2l0aHZhbC9saWIgJExERkxBR1MiCi0gICAgIGZpCi0gICAgIGlmIHRlc3QgLWQgJHdpdGh2YWwvaW5jbHVkZTsgdGhlbgotCUNQUEZMQUdTPSItSSR3aXRodmFsL2luY2x1ZGUgJENQUEZMQUdTIgotICAgICBmaQotICBmaQorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVmZW5jZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lZmVuY2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lZmVuY2U7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lZmVuY2UvLS13aXRob3V0LWVmZW5jZSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAotICAgICAgTElCUz0iJExJQlMgLWxkbWFsbG9jIgotICAgICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9ETUFMTE9DX0ggMQotX0FDRU9GCi0KLSAgICBmaQotCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRtYWxsb2Mgb3IgLS1kaXNhYmxlLWRtYWxsb2Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZG1hbGxvYytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfZG1hbGxvYyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRtYWxsb2MvLS13aXRob3V0LWRtYWxsb2MgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRtYWxsb2MvLS13aXRob3V0LWRtYWxsb2MgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZWZlbmNlIG9yIC0td2l0aG91dC1lZmVuY2Ugd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VmZW5jZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lZmVuY2UiCi0gIHVzZV9lZmVuY2U9IiR3aXRodmFsIgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZWZlbmNlIG9yIC0tZGlzYWJsZS1lZmVuY2Ugd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZWZlbmNlK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9lZmVuY2UiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lZmVuY2UvLS13aXRob3V0LWVmZW5jZSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZWZlbmNlLy0td2l0aG91dC1lZmVuY2UgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCiB0cnlyc2FyZWY9bm8KIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yc2FyZWYgb3IgLS13aXRob3V0LXJzYXJlZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcnNhcmVmK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3JzYXJlZiIKLSAgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yc2FyZWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JzYXJlZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcnNhcmVmOyBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCiAgICAgICB0cnlyc2FyZWY9eWVzCiAgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KICAgICAgIHRyeXJzYXJlZj1ubwpAQCAtMjM3NiwyNyArMzQxNCwzMiBAQAogCiAgICAgICB0cnlyc2FyZWY9eWVzCiAgICAgZmkKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJzYXJlZiBvciAtLWRpc2FibGUtcnNhcmVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3JzYXJlZitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcnNhcmVmIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnNhcmVmLy0td2l0aG91dC1yc2FyZWYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJzYXJlZi8tLXdpdGhvdXQtcnNhcmVmIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yc2FyZWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcnNhcmVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcnNhcmVmOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnNhcmVmLy0td2l0aG91dC1yc2FyZWYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKIAogdHJ5b3BlbnNzbD1kZWZhdWx0eWVzCiBhc2tlZG9wZW5zc2w9bm8KIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vcGVuc3NsIG9yIC0td2l0aG91dC1vcGVuc3NsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vcGVuc3NsK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX29wZW5zc2wiCi0gIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3BlbnNzbCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3BlbnNzbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3BlbnNzbDsgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgogICAgICAgdHJ5b3BlbnNzbD15ZXMKICAgICAgIGFza2Vkb3BlbnNzbD15ZXMKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieGludGVybmFsIjsgdGhlbgorICAgICAgdHJ5b3BlbnNzbD1pbnRlcm5hbAorICAgICAgYXNrZWRvcGVuc3NsPWludGVybmFsCiAgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KICAgICAgIHRyeW9wZW5zc2w9bm8KICAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgorICAgICAgaWYgdGVzdCAtZCAiJHdpdGh2YWwvbGliL01pbkdXIjsgdGhlbgorICAgICAgICBMREZMQUdTPSItTCR3aXRodmFsL2xpYi9NaW5HVyAkTERGTEFHUyIKKyAgICAgICAgQ1BQRkxBR1M9Ii1JJHdpdGh2YWwvaW5jbHVkZSAkQ1BQRkxBR1MiCisgICAgICBlbHNlCiAKICAgaWYgdGVzdCAieCR3aXRodmFsIiAhPSB4IC1hIC1kICR3aXRodmFsOyB0aGVuCiAgICAgIGlmIHRlc3QgLWQgJHdpdGh2YWwvbGliOyB0aGVuCkBAIC0yNDA3LDEwICszNDUwLDE3IEBACiAgICAgIGZpCiAgIGZpCiAKKyAgICAgIGZpCiAgICAgICB0cnlvcGVuc3NsPXllcwogICAgICAgYXNrZWRvcGVuc3NsPXllcwogICAgIGZpCi1maTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vcGVuc3NsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX29wZW5zc2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vcGVuc3NsOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKwogaWYgdGVzdCAieCR0cnlvcGVuc3NsIiA9ICJ4ZGVmYXVsdHllcyI7IHRoZW4KIAogICBpZiB0ZXN0ICJ4L3Vzci9sb2NhbC9zc2wiICE9IHggLWEgLWQgL3Vzci9sb2NhbC9zc2w7IHRoZW4KQEAgLTI0MjQsMjI2ICszNDc0LDIzIEBACiAKICAgICAgIHRyeW9wZW5zc2w9eWVzCiBmaQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wZW5zc2wgb3IgLS1kaXNhYmxlLW9wZW5zc2wgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfb3BlbnNzbCtzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfb3BlbnNzbCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXNzbCBvciAtLXdpdGhvdXQtc3NsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zc2wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfc3NsIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3NsIG9yIC0tZGlzYWJsZS1zc2wgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3NsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zc2wiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGVuc3NsLy0td2l0aG91dC1vcGVuc3NsIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotdHJ5a3JiNT1kZWZhdWx0eWVzCi1hc2tlZGtyYjU9bm8KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1rcmI1IG9yIC0td2l0aG91dC1rcmI1IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9rcmI1K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2tyYjUiCi0gIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIHRyeWtyYjU9eWVzCi0gICAgICBhc2tlZGtyYjU9eWVzCi0gICAgICBrcmI1cGF0aD11bmRlZgotICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCi0gICAgICB0cnlrcmI1PW5vCi0gICAgICBrcmI1cGF0aD11bmRlZgotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCi0gICAgICB0cnlrcmI1PXllcwotICAgICAgYXNrZWRrcmI1PXllcwotICAgICAga3JiNXBhdGg9JHdpdGh2YWwKLSAgICBmaQotZmk7Ci1pZiB0ZXN0ICJ4JHRyeWtyYjUiID0gInhkZWZhdWx0eWVzIjsgdGhlbgotICAgICAgdHJ5a3JiNT15ZXMKLSAgICAgIGtyYjVwYXRoPS91c3Iva2VyYmVyb3MKLWZpCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUta3JiNSBvciAtLWRpc2FibGUta3JiNSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9rcmI1K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9rcmI1IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta3JiNS8tLXdpdGhvdXQta3JiNSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgta3JiNS8tLXdpdGhvdXQta3JiNSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ycG0gb3IgLS13aXRob3V0LXJwbSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcnBtK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3JwbSIKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcnBtIG9yIC0tZGlzYWJsZS1ycG0gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcnBtK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9ycG0iCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1ycG0vLS13aXRob3V0LXJwbSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnBtLy0td2l0aG91dC1ycG0gaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgb3IgLS1kaXNhYmxlLWFnZW50eC1kb20tc29jay1vbmx5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FnZW50eF9kb21fc29ja19vbmx5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9hZ2VudHhfZG9tX3NvY2tfb25seSIKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9BR0VOVFhfRE9NX1NPQ0tfT05MWSAxCi1fQUNFT0YKLQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWdlbnR4LWRvbS1zb2NrLW9ubHkgb3IgLS13aXRob3V0LWFnZW50eC1kb20tc29jay1vbmx5IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hZ2VudHhfZG9tX3NvY2tfb25seStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9hZ2VudHhfZG9tX3NvY2tfb25seSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkvLS1kaXNhYmxlLWFnZW50eC1kb20tc29jay1vbmx5IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5Ly0tZGlzYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgb3IgLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdHJhcGRfc3ViYWdlbnQiID0gInhubyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFggMQotX0FDRU9GCi0KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3NsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zc2wrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NzbDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCIgIiRMSU5FTk8iIDUKIGZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc25tcHRyYXBkLXN1YmFnZW50IG9yIC0td2l0aG91dC1zbm1wdHJhcGQtc3ViYWdlbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NubXB0cmFwZF9zdWJhZ2VudCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zbm1wdHJhcGRfc3ViYWdlbnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB0cmFwZC1zdWJhZ2VudC8tLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB0cmFwZC1zdWJhZ2VudC8tLWRpc2FibGUtc25tcHRyYXBkLXN1YmFnZW50IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW9wYXF1ZS1zcGVjaWFsLXR5cGVzIG9yIC0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMiCi0KLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wYXF1ZS1zcGVjaWFsLXR5cGVzIG9yIC0tZGlzYWJsZS1vcGFxdWUtc3BlY2lhbC10eXBlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9vcGFxdWVfc3BlY2lhbF90eXBlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfb3BhcXVlX3NwZWNpYWxfdHlwZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGFxdWUtc3BlY2lhbC10eXBlcy8tLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wYXF1ZS1zcGVjaWFsLXR5cGVzLy0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJkaXJzIG9yIC0td2l0aG91dC1taWJkaXJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJkaXJzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYmRpcnMiCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPSIkd2l0aF9taWJkaXJzIgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMgIiR3aXRoX21pYmRpcnMiCi1fQUNFT0YKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliZGlycyBvciAtLWRpc2FibGUtbWliZGlycyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9taWJkaXJzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJkaXJzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZGlycy8tLXdpdGhvdXQtbWliZGlycyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZGlycy8tLXdpdGhvdXQtbWliZGlycyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJzIG9yIC0td2l0aG91dC1taWJzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYnMiCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkd2l0aF9taWJzIgotZmk7Ci0jIGVuYWJsZS1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJmaWxlcyBvciAtLXdpdGhvdXQtbWliZmlsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYmZpbGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYmZpbGVzIgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJGSUxFUyAiJHdpdGhfbWliZmlsZXMiCi1fQUNFT0YKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliZmlsZXMgb3IgLS1kaXNhYmxlLW1pYmZpbGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYmZpbGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJmaWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmZpbGVzLy0td2l0aG91dC1taWJmaWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZmlsZXMvLS13aXRob3V0LW1pYmZpbGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcgb3IgLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWliX2NvbmZpZ19jaGVja2luZytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWliX2NvbmZpZ19jaGVja2luZyIKLSAgd2l0aF9taWJfY2ZnX2NoZWNrcz0ieWVzIgotZWxzZQotICB3aXRoX21pYl9jZmdfY2hlY2tzPSJubyIKLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1jb25maWctY2hlY2tpbmcgb3IgLS13aXRob3V0LW1pYi1jb25maWctY2hlY2tpbmcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21pYl9jb25maWdfY2hlY2tpbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbWliX2NvbmZpZ19jaGVja2luZyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcgb3IgLS1kaXNhYmxlLW1pYi1jb25maWctZGVidWcgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbWliX2NvbmZpZ19kZWJ1ZytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfbWliX2NvbmZpZ19kZWJ1ZyIKLSAgd2l0aF9taWJfY2ZnX2RlYnVnPSJ5ZXMiCi1lbHNlCi0gIHdpdGhfbWliX2NmZ19kZWJ1Zz0ibm8iCi1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWItY29uZmlnLWNoZWNraW5nIG9yIC0td2l0aG91dC1taWItY29uZmlnLWNoZWNraW5nIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJfY29uZmlnX2NoZWNraW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21pYl9jb25maWdfY2hlY2tpbmciCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcvLS1kaXNhYmxlLW1pYi1jb25maWctY2hlY2tpbmcgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tZmQtcmV3cml0ZXMgb3IgLS1kaXNhYmxlLW1mZC1yZXdyaXRlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9tZmRfcmV3cml0ZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX21mZF9yZXdyaXRlcyIKLQotZmk7Ci1pZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCi0gICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMgMQotX0FDRU9GCi0KKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zc2wgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3NsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc3NsOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkIiAiJExJTkVOTyIgNQogZmkKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tZmQtcmV3cml0ZXMgb3IgLS13aXRob3V0LW1mZC1yZXdyaXRlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWZkX3Jld3JpdGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX21mZF9yZXdyaXRlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWZkLXJld3JpdGVzLy0tZGlzYWJsZS1tZmQtcmV3cml0ZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWZkLXJld3JpdGVzLy0tZGlzYWJsZS1tZmQtcmV3cml0ZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCiBhc2tlZHBrY3M9bm8KIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wa2NzIG9yIC0td2l0aG91dC1wa2NzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wa2NzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3BrY3MiCi0gIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGtjcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGtjcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGtjczsgaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4eWVzIjsgdGhlbgogICAgICAgYXNrZWRwa2NzPXllcwogICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCiAgICAgICBhc2tlZHBrY3M9bm8KQEAgLTI2NjAsMzk2ICszNTA3LDEzMzggQEAKIAogICAgICAgYXNrZWRwa2NzPXllcwogICAgIGZpCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wa2NzIG9yIC0tZGlzYWJsZS1wa2NzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BrY3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3BrY3MiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wa2NzLy0td2l0aG91dC1wa2NzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wa2NzLy0td2l0aG91dC1wa2NzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS10ZXN0aW5nLWNvZGUgb3IgLS1kaXNhYmxlLXRlc3RpbmctY29kZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV90ZXN0aW5nX2NvZGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3Rlc3RpbmdfY29kZSIKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFIDEKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wa2NzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BrY3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wa2NzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGtjcy8tLXdpdGhvdXQtcGtjcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCit0cnlrcmI1PWRlZmF1bHR5ZXMKK2Fza2Vka3JiNT1ubworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWtyYjUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2tyYjUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2tyYjU7IGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyAgICAgIHRyeWtyYjU9eWVzCisgICAgICBhc2tlZGtyYjU9eWVzCisgICAgICBrcmI1cGF0aD11bmRlZgorICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCisgICAgICB0cnlrcmI1PW5vCisgICAgICBrcmI1cGF0aD11bmRlZgorICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisgICAgICB0cnlrcmI1PXllcworICAgICAgYXNrZWRrcmI1PXllcworICAgICAga3JiNXBhdGg9JHdpdGh2YWwKKyAgICBmaQorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWtyYjUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfa3JiNStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2tyYjU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1rcmI1Ly0td2l0aG91dC1rcmI1IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JHRyeWtyYjUiID0gInhkZWZhdWx0eWVzIjsgdGhlbgorICAgICAgdHJ5a3JiNT15ZXMKKyAgICAgIGtyYjVwYXRoPS91c3Iva2VyYmVyb3MKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZG5zc2VjX2xvY2FsX3ZhbGlkYXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uOyB3YW50X2Ruc3NlYz0kd2l0aHZhbAorZWxzZQorICB3YW50X2Ruc3NlYz1ubworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Ruc3NlY19sb2NhbF92YWxpZGF0aW9uK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZG5zc2VjX2xvY2FsX3ZhbGlkYXRpb247IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbi8tLXdpdGhvdXQtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kbnNzZWMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2Ruc3NlYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZG5zc2VjOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24vLS13aXRob3V0LWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZG5zc2VjIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Ruc3NlYytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Ruc3NlYzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRuc3NlYy1sb2NhbC12YWxpZGF0aW9uLy0td2l0aG91dC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcnBtIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ycG0rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3JwbTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ycG0gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcnBtK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcnBtOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcnBtLy0td2l0aG91dC1ycG0gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IEJ1aWxkIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyMjCisKKyMgICAgICAgSW5zdGFsbCBwcmVmaXgKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1pbnN0YWxsLXByZWZpeCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaW5zdGFsbF9wcmVmaXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2luc3RhbGxfcHJlZml4OyBJTlNUQUxMX1BSRUZJWD0iJHdpdGh2YWwiCitmaQorCisKK2lmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInh5ZXMiIDsgdGhlbgorICBhc19mbl9lcnJvciAkPyAiLS13aXRoLWluc3RhbGwtcHJlZml4IHJlcXVpcmVzIGFuIGFyZ3VtZW50IiAiJExJTkVOTyIgNQorZmkKK2lmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInhubyIgOyB0aGVuCisgIElOU1RBTExfUFJFRklYPSIiCitmaQorCisKKworIworIyAgIFN1YnN5c3RlbXMgdG8gYnVpbGQ6CisjICAgICAgIExpYnJhcnkKKyMKK0ZFQVRVUkVIRUFERVJTPSJsaWJyYXJ5L2ZlYXR1cmVzLmgiCitGVE1BSU5TVUJTPSIiCisKKyMKKyMgICAgICAgQWdlbnQKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZ2VudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2FnZW50OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYWdlbnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50Ly0tZGlzYWJsZS1hZ2VudCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfYWdlbnQiICE9ICJ4bm8iOyB0aGVuCisgICBTTk1QRD0nc25tcGQkKEVYRUVYVCknCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIGFnZW50IgorICAgRkVBVFVSRUhFQURFUlM9IiRGRUFUVVJFSEVBREVSUyBhZ2VudC9mZWF0dXJlcy1taWJncm91cHMuaCBhZ2VudC9mZWF0dXJlcy5oIgorICAgRlRNQUlOU1VCUz0iYWdlbnQgJEZUTUFJTlNVQlMiCisgICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCisgICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJworZWxzZQorICAgU05NUEQ9IiIKKyAgICMgd2Ugc3RpbGwgbmVlZC93YW50IHRoZSBhZ2VudGxpYnMgKGZvciBzdWJhZ2VudHMsIGUuZy4gc25tcHRyYXBkKQorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKKyAgICMgYnVpbGRpbmcgc25tcHRyYXBkIHcvbyBhZ2VudGxpYnMgZG9lc24ndCB3b3JrIGF0bQorICAgI1RSQVBMSUJTPSckKFRSQVBEV0lUSE9VVEFHRU5UKScKKyAgICNVU0VUUkFQTElCUz0nJChVU0VMSUJTKScKKyAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKKyAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9BR0VOVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKworCisjICAgICAgIEFwcGxpY2F0aW9ucworIworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWFwcGxpY2F0aW9ucyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hcHBsaWNhdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9hcHBsaWNhdGlvbnM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYXBwbGljYXRpb25zIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hcHBsaWNhdGlvbnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2FwcGxpY2F0aW9uczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtYXBwbGljYXRpb25zLy0tZGlzYWJsZS1hcHBsaWNhdGlvbnMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX2FwcGxpY2F0aW9ucyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYXBwcyIKKyAgIEZFQVRVUkVIRUFERVJTPSIkRkVBVFVSRUhFQURFUlMgZmVhdHVyZXMtc25tcG5ldHN0YXQuaCBmZWF0dXJlcy1hcHBzLmgiCisgICBGVE1BSU5TVUJTPSJhcHBzICRGVE1BSU5TVUJTIgorZWxzZQorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfQVBQUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyAgICAgICBNYW51YWwgcGFnZXMKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tYW51YWxzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21hbnVhbHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9tYW51YWxzOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1hbnVhbHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21hbnVhbHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21hbnVhbHM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1hbnVhbHMvLS1kaXNhYmxlLW1hbnVhbHMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21hbnVhbHMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1hbiIKK2ZpCisKKyMgICAgICAgU3VwcG9ydGluZyBzY3JpcHRzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2NyaXB0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zY3JpcHRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2NyaXB0czsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zY3JpcHRzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zY3JpcHRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zY3JpcHRzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zY3JpcHRzLy0tZGlzYWJsZS1zY3JpcHRzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9zY3JpcHRzIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBsb2NhbCIKK2ZpCisKKyMgICAgICAgTUlCIGZpbGVzCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWlicyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliczsKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21pYnMiICE9ICJ4bm8iOyB0aGVuCisgICBNQUlOU1VCUz0iJE1BSU5TVUJTIG1pYnMiCitmaQorIyB3aXRoLW1pYnMgaXMgdmFsaWQgdG9vLCBidXQgbWVhbnMgc29tZXRoaW5nIGVsc2UKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hhdCB0byBidWlsZCBhbmQgaW5zdGFsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGF0IHRvIGJ1aWxkIGFuZCBpbnN0YWxsLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1BSU5TVUJTIiA+JjUKKyRhc19lY2hvICIkTUFJTlNVQlMiID4mNjsgfQorCisKKyMgICAgICAgTUlCIG1vZHVsZSB2YWxpZGF0aW9uIChkdXJpbmcgImNvbmZpZ3VyZSIpCisjCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJfY29uZmlnX2NoZWNraW5nK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliX2NvbmZpZ19jaGVja2luZzsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgLW8gIiRlbmFibGV2YWwiID0gbm8gOyB0aGVuCisgICAgIHdpdGhfbWliX2NmZ19jaGVja3M9IiRlbmFibGV2YWwiCisgICBlbHNlCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIiAiJExJTkVOTyIgNQorICAgZmkKK2Vsc2UKKyAgd2l0aF9taWJfY2ZnX2NoZWNrcz0ibm8iCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLWNvbmZpZy1jaGVja2luZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliX2NvbmZpZ19jaGVja2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliX2NvbmZpZ19jaGVja2luZzsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWNvbmZpZy1jaGVja2luZy8tLWRpc2FibGUtbWliLWNvbmZpZy1jaGVja2luZyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJfY29uZmlnX2RlYnVnK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliX2NvbmZpZ19kZWJ1ZzsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgLW8gIiRlbmFibGV2YWwiID0gbm8gOyB0aGVuCisgICAgIHdpdGhfbWliX2NmZ19kZWJ1Zz0iJGVuYWJsZXZhbCIKKyAgIGVsc2UKKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLW1pYi1jb25maWctZGVidWciICIkTElORU5PIiA1CisgICBmaQorZWxzZQorICB3aXRoX21pYl9jZmdfZGVidWc9Im5vIgorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1jb25maWctZGVidWcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYl9jb25maWdfZGVidWcrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYl9jb25maWdfZGVidWc7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1jb25maWctZGVidWcvLS1kaXNhYmxlLW1pYi1jb25maWctZGVidWcgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjICAgICAgIFZlcnNpb24tc3BlY2lmaWMgZmVhdHVyZXMKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1uZXctZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbmV3X2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbmV3X2ZlYXR1cmVzOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtb2xkLWZlYXR1cmVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX29sZF9mZWF0dXJlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX29sZF9mZWF0dXJlczsKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWZlYXR1cmVzLW9mIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9mZWF0dXJlc19vZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZmVhdHVyZXNfb2Y7CitlbHNlCisgIHdpdGhfZmVhdHVyZXNfb2Y9JFBBQ0tBR0VfVkVSU0lPTgorZmkKKworCisKKyMgICAgICAgTWFudWFsIHByb21wdGluZyBkdXJpbmcgImNvbmZpZ3VyZSIKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0cyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGVmYXVsdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RlZmF1bHRzOyBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgLW8gIiR3aXRodmFsIiA9IG5vIDsgdGhlbgorICAgICBkZWZhdWx0cz0iJHdpdGh2YWwiCisgICBlbHNlCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJQbGVhc2UgdXNlIC0td2l0aC8tLXdpdGhvdXQtZGVmYXVsdHMiICIkTElORU5PIiA1CisgICBmaQorZWxzZQorICBkZWZhdWx0cz0ibm8iCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVmYXVsdHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGVmYXVsdHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kZWZhdWx0czsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHRzLy0td2l0aG91dC1kZWZhdWx0cyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgICAgICAgVUNEIGNvbXBhdGFiaWxpdHkKKyMKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3VjZF9zbm1wX2NvbXBhdGliaWxpdHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkvLS1kaXNhYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworaWYgdGVzdCAieCRlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eSIgPSAieHllcyIgOyB0aGVuCisgIGluc3RhbGx1Y2RoZWFkZXJzPWluc3RhbGx1Y2RoZWFkZXJzCisgIGluc3RhbGx1Y2RsaWJzPWluc3RhbGx1Y2RsaWJzCisKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBVQ0QtU05NUCBjb21wYXRhYmlsaXR5OiAgICAgZW5hYmxlZAorRU9GCisKK2ZpCisKKworCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogTUlCIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyMjCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWItbG9hZGluZyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9taWJfbG9hZGluZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pYl9sb2FkaW5nOworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1sb2FkaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJfbG9hZGluZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliX2xvYWRpbmc7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pYi1sb2FkaW5nLy0tZGlzYWJsZS1taWItbG9hZGluZyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWliX2xvYWRpbmciID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliZGlycyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliZGlycytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliZGlyczsgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IiR3aXRoX21pYmRpcnMiCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMgIiR3aXRoX21pYmRpcnMiCiBfQUNFT0YKIAotZmk7CitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRlc3RpbmctY29kZSBvciAtLXdpdGhvdXQtdGVzdGluZy1jb2RlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF90ZXN0aW5nX2NvZGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfdGVzdGluZ19jb2RlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS10ZXN0aW5nLWNvZGUvLS1kaXNhYmxlLXRlc3RpbmctY29kZSBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS10ZXN0aW5nLWNvZGUvLS1kaXNhYmxlLXRlc3RpbmctY29kZSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1yZWVudHJhbnQgb3IgLS1kaXNhYmxlLXJlZW50cmFudCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9yZWVudHJhbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3JlZW50cmFudCIKLSAgd2l0aF9yZXNfbG9ja3M9InllcyIKLWVsc2UKLSAgd2l0aF9yZXNfbG9ja3M9Im5vIgotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcmVlbnRyYW50IG9yIC0td2l0aG91dC1yZWVudHJhbnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3JlZW50cmFudCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9yZWVudHJhbnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlZW50cmFudC8tLWRpc2FibGUtcmVlbnRyYW50IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlZW50cmFudC8tLWRpc2FibGUtcmVlbnRyYW50IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taWJkaXJzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYmRpcnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJkaXJzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZGlycy8tLXdpdGhvdXQtbWliZGlycyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXJvb3QtYWNjZXNzIG9yIC0td2l0aG91dC1yb290LWFjY2VzcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcm9vdF9hY2Nlc3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcm9vdF9hY2Nlc3MiCiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJvb3QtYWNjZXNzIG9yIC0tZGlzYWJsZS1yb290LWFjY2VzcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9yb290X2FjY2VzcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcm9vdF9hY2Nlc3MiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yb290LWFjY2Vzcy8tLXdpdGhvdXQtcm9vdC1hY2Nlc3MgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJvb3QtYWNjZXNzLy0td2l0aG91dC1yb290LWFjY2VzcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYnMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYnMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYnM7IE5FVFNOTVBfREVGQVVMVF9NSUJTPSIkd2l0aF9taWJzIgorZmkKKworIyBlbmFibGUtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgta21lbS11c2FnZSBvciAtLXdpdGhvdXQta21lbS11c2FnZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfa21lbV91c2FnZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9rbWVtX3VzYWdlIgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taWJmaWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWliZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYmZpbGVzOworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCRklMRVMgIiR3aXRoX21pYmZpbGVzIgorX0FDRU9GCiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWttZW0tdXNhZ2Ugb3IgLS1kaXNhYmxlLWttZW0tdXNhZ2Ugd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfa21lbV91c2FnZStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfa21lbV91c2FnZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWttZW0tdXNhZ2UvLS13aXRob3V0LWttZW0tdXNhZ2UgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWttZW0tdXNhZ2UvLS13aXRob3V0LWttZW0tdXNhZ2UgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pYmZpbGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pYmZpbGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbWliZmlsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWJmaWxlcy8tLXdpdGhvdXQtbWliZmlsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kdW1teS12YWx1ZXMgb3IgLS13aXRob3V0LWR1bW15LXZhbHVlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZHVtbXlfdmFsdWVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2R1bW15X3ZhbHVlcyIKIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZHVtbXktdmFsdWVzIG9yIC0tZGlzYWJsZS1kdW1teS12YWx1ZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZHVtbXlfdmFsdWVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kdW1teV92YWx1ZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kdW1teS12YWx1ZXMvLS13aXRob3V0LWR1bW15LXZhbHVlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZHVtbXktdmFsdWVzLy0td2l0aG91dC1kdW1teS12YWx1ZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBTZWN1cml0eSBjb25maWd1cmF0aW9uCisjIworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlczsKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeSBvciAtLXdpdGhvdXQtcGVyc2lzdGVudC1kaXJlY3Rvcnkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5IgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPSIkd2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeSIKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcnNpc3RlbnQtZGlyZWN0b3J5IG9yIC0tZGlzYWJsZS1wZXJzaXN0ZW50LWRpcmVjdG9yeSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9wZXJzaXN0ZW50X2RpcmVjdG9yeStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcGVyc2lzdGVudF9kaXJlY3RvcnkiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeS8tLXdpdGhvdXQtcGVyc2lzdGVudC1kaXJlY3RvcnkgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5Ly0td2l0aG91dC1wZXJzaXN0ZW50LWRpcmVjdG9yeSBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRlcy8tLWRpc2FibGUtZGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCi1kZWZhdWx0X3BlcnNpc3RlbnRfbWFzaz0wNzcKK2lmIHRlc3QgIngkZW5hYmxlX2RlcyIgPSAieG5vIjsgdGhlbgogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcnNpc3RlbnQtbWFzayBvciAtLXdpdGhvdXQtcGVyc2lzdGVudC1tYXNrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wZXJzaXN0ZW50X21hc2src2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcGVyc2lzdGVudF9tYXNrIgorJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX0RFUyAxIiA+PmNvbmZkZWZzLmgKIAotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBtYXNrIHZhbHVlICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBtYXNrIHZhbHVlICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wcml2YWN5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3ByaXZhY3krc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wcml2YWN5OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXByaXZhY3kgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3ByaXZhY3krc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3ByaXZhY3k7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXByaXZhY3kvLS1kaXNhYmxlLXByaXZhY3kgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWQ1IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21kNStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21kNTsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tZDUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21kNStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWQ1OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZDUvLS1kaXNhYmxlLW1kNSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9NRDUgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaW50ZXJuYWxfbWQ1K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfaW50ZXJuYWxfbWQ1OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWludGVybmFsLW1kNSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfaW50ZXJuYWxfbWQ1K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9pbnRlcm5hbF9tZDU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWludGVybmFsLW1kNS8tLWRpc2FibGUtaW50ZXJuYWwtbWQ1IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9pbnRlcm5hbF9tZDUiID0gInh5ZXMiOyB0aGVuCisgIGlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJZb3UgY2FuIG5vdCBzcGVjaWZ5IGJvdGggLS1lbmFibGUtaW50ZXJuYWwtbWQ1IGFuZCAtLWRpc2FibGUtbWQ1IiAiJExJTkVOTyIgNQorICBlbHNlCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSAxIiA+PmNvbmZkZWZzLmgKKwogICBmaQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKK2ZpCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBNaXNjIGNvbmZpZ3VyYXRpb24KKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vcGFxdWUtc3BlY2lhbC10eXBlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW9wYXF1ZS1zcGVjaWFsLXR5cGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX29wYXF1ZV9zcGVjaWFsX3R5cGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3BhcXVlX3NwZWNpYWxfdHlwZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vcGFxdWUtc3BlY2lhbC10eXBlcy8tLXdpdGhvdXQtb3BhcXVlLXNwZWNpYWwtdHlwZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCitpZiB0ZXN0ICJ4JHdpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMiICE9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWlwdjYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfaXB2NitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2lwdjY7IGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lQVjYgMSIgPj5jb25mZGVmcy5oCisKKyAgICBmaQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWlwdjYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2lwdjYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2lwdjY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWlwdjYvLS1kaXNhYmxlLWlwdjYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWxvZ2ZpbGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2xvZ2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2xvZ2ZpbGU7IGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0iJHdpdGhfbG9nZmlsZSIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sb2dmaWxlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xvZ2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9sb2dmaWxlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbG9nZmlsZS8tLXdpdGhvdXQtbG9nZmlsZSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAibm8iOyB0aGVuCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSJub25lIgorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGVyc2lzdGVudF9kaXJlY3Rvcnk7IGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9IiR3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5IgorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcnNpc3RlbnQtZGlyZWN0b3J5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BlcnNpc3RlbnRfZGlyZWN0b3J5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGVyc2lzdGVudF9kaXJlY3Rvcnk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeS8tLXdpdGhvdXQtcGVyc2lzdGVudC1kaXJlY3RvcnkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBlcnNpc3RlbnQtbWFzayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGVyc2lzdGVudF9tYXNrK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wZXJzaXN0ZW50X21hc2s7IGlmIHRlc3QgYGV4cHIgIlgkd2l0aHZhbCIgOiAnWFswLTddKiQnYCAtZXEgNCA7IHRoZW4KKyAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsIiA+JjY7IH0KKyAgICAgd2l0aHZhbD0iMCR3aXRodmFsIgorICAgZWxzZQorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHByb3ZpZGUgYSB0aHJlZSBkaWdpdCBvY3RhbCBwZXJzaXN0ZW50IG1hc2sgdmFsdWUiICIkTElORU5PIiA1CisgICBmaQorZWxzZQorICB3aXRodmFsPTA3NworICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbCIgPiY2OyB9CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcGVyc2lzdGVudC1tYXNrIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BlcnNpc3RlbnRfbWFzaytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3BlcnNpc3RlbnRfbWFzazsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtbWFzay8tLXdpdGhvdXQtcGVyc2lzdGVudC1tYXNrIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX01BU0sgJHdpdGh2YWwKIF9BQ0VPRgogCiAKLWVsc2UKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkZGVmYXVsdF9wZXJzaXN0ZW50X21hc2siID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCBwZXJzaXN0ZW50IG1hc2sgJGRlZmF1bHRfcGVyc2lzdGVudF9tYXNrIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfTUFTSyAkZGVmYXVsdF9wZXJzaXN0ZW50X21hc2sKLV9BQ0VPRgorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzOyBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9IiR3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcyIKK2ZpCiAKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfY29weV9wZXJzaXN0ZW50X2ZpbGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfY29weV9wZXJzaXN0ZW50X2ZpbGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY29weV9wZXJzaXN0ZW50X2ZpbGVzLy0td2l0aG91dC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcnNpc3RlbnQtbWFzayBvciAtLWRpc2FibGUtcGVyc2lzdGVudC1tYXNrIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BlcnNpc3RlbnRfbWFzaytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcGVyc2lzdGVudF9tYXNrIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVyc2lzdGVudC1tYXNrIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LW1hc2sgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY29weV9wZXJzaXN0ZW50X2ZpbGVzIG9yIC0td2l0aG91dC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMiCi0gIGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0iJHdpdGhfY29weV9wZXJzaXN0ZW50X2ZpbGVzIgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY29weV9wZXJzaXN0ZW50X2ZpbGVzIG9yIC0tZGlzYWJsZS1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfY29weV9wZXJzaXN0ZW50X2ZpbGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9jb3B5X3BlcnNpc3RlbnRfZmlsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMvLS13aXRob3V0LWNvcHlfcGVyc2lzdGVudF9maWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY29weV9wZXJzaXN0ZW50X2ZpbGVzLy0td2l0aG91dC1jb3B5X3BlcnNpc3RlbnRfZmlsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCiBkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuPSIvdG1wL3NubXBkWFhYWFhYIgogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIG9yIC0td2l0aG91dC10ZW1wLWZpbGUtcGF0dGVybiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdGVtcF9maWxlX3BhdHRlcm4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfdGVtcF9maWxlX3BhdHRlcm4iCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90ZW1wX2ZpbGVfcGF0dGVybitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfdGVtcF9maWxlX3BhdHRlcm47IGlmIHRlc3QgYGV4cHIgIlgkd2l0aHZhbCIgOiAiLipYWFhYWFgkImAgLW5lIDAgOyB0aGVuCisgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsIiA+JjUKKyRhc19lY2hvICJ1c2luZyB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsIiA+JjY7IH0KKyAgIGVsc2UKKyAgICAgYXNfZm5fZXJyb3IgJD8gInRlbXBvcmFyeSBmaWxlIHBhdHRlbnMgbXVzdCBlbmQgd2l0aCA2IFgncyIgIiRMSU5FTk8iIDUKKyAgIGZpCitlbHNlCisgIHdpdGh2YWw9IiRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuIgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAidXNpbmcgZGVmYXVsdCB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsIiA+JjY7IH0KK2ZpCiAKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcGF0dGVybiAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcGF0dGVybiAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07Ci0gIGZpCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkd2l0aHZhbCIgPiY2CisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVtcC1maWxlLXBhdHRlcm4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfdGVtcF9maWxlX3BhdHRlcm4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV90ZW1wX2ZpbGVfcGF0dGVybjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuLy0td2l0aG91dC10ZW1wLWZpbGUtcGF0dGVybiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKwogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4gIiR3aXRodmFsIgogX0FDRU9GCiAKIAorCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFZlcnNpb24gY29uZmlndXJhdGlvbgorIyMKKworU05NUF9WRVJTSU9OUz0iIgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNubXB2MSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zbm1wdjErc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zbm1wdjE7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc25tcHYxIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zbm1wdjErc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NubXB2MTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHYxLy0tZGlzYWJsZS1zbm1wdjEgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3NubXB2MSIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0RJU0FCTEVfU05NUFYxIDEiID4+Y29uZmRlZnMuaAorCiBlbHNlCisgIFNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDEiCitmaQogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgdGVtcG9yYXJ5IGZpbGUgcGF0dGVybiAkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybiIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBkZWZhdWx0IHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4iID4mNgotCi1jYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4gIiRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuIgotX0FDRU9GCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc25tcHYyYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zbm1wdjJjK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc25tcHYyYzsKK2ZpCiAKIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVtcC1maWxlLXBhdHRlcm4gb3IgLS1kaXNhYmxlLXRlbXAtZmlsZS1wYXR0ZXJuIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3RlbXBfZmlsZV9wYXR0ZXJuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV90ZW1wX2ZpbGVfcGF0dGVybiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNubXB2MmMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NubXB2MmMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NubXB2MmM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MmMvLS1kaXNhYmxlLXNubXB2MmMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3NubXB2MmMiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMmMiCitmaQorCitTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAzIgorCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgU05NUCBWZXJzaW9ucyBTdXBwb3J0ZWQ6ICAgJFNOTVBfVkVSU0lPTlMKK0VPRgorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uOyBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIkd2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbiIKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWZhdWx0LXNubXAtdmVyc2lvbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZWZhdWx0X3NubXBfdmVyc2lvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlZmF1bHRfc25tcF92ZXJzaW9uOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24vLS13aXRob3V0LWRlZmF1bHQtc25tcC12ZXJzaW9uIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgd2UgdGVzdCB0aGlzIG5vdyBhbmQgbGF0ZXIgYXMgd2VsbC4gIHdlIHRlc3QgaXQgbm93IHNvIGNvbmZpZ3VyZSBjYW4gZGllCisjIGVhcmx5IG9uIHdpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gd2FpdGluZyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KK2Nhc2UgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTi0zfSIgaW4KKyAgWzEyM10pIDs7CisgIDJjKSBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPTIgOzsKKyAgKikKKyAgICBhc19mbl9lcnJvciAkPyAiSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuIiAiJExJTkVOTyIgNQorICAgIDs7Citlc2FjCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBUcmFuc3BvcnQgbW9kdWxlcworIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXRyYW5zcG9ydHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RyYW5zcG9ydHMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3RyYW5zcG9ydHM7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0X3RyYW5zcG9ydHMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF90cmFuc3BvcnRzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfdHJhbnNwb3J0czsKK2ZpCisKKworIworIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gdHJhbnNwb3J0IG9wdGlvbnMKKyMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC10cmFuc3BvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3RyYW5zcG9ydCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfdHJhbnNwb3J0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdHJhbnNwb3J0cy8tLXdpdGhvdXQtdHJhbnNwb3J0cyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC10cmFuc3BvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF90cmFuc3BvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF90cmFuc3BvcnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtdHJhbnNwb3J0cy8tLXdpdGhvdXQtb3V0LXRyYW5zcG9ydHMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IFNlY3VyaXR5IG1vZHVsZXMKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zZWN1cml0eV9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zZWN1cml0eV9tb2R1bGVzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNlY3VyaXR5LW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2VjdXJpdHlfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NlY3VyaXR5X21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzLy0td2l0aG91dC1zZWN1cml0eS1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtc2VjdXJpdHktbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW91dC1zZWN1cml0eS1tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX291dF9zZWN1cml0eV9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3V0X3NlY3VyaXR5X21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtc2VjdXJpdHktbW9kdWxlcy8tLXdpdGhvdXQtb3V0LXNlY3VyaXR5LW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IERldmVsb3Blci1yZWxhdGVkIHNldHRpbmdzCisjIworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVidWdnaW5nIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2RlYnVnZ2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2RlYnVnZ2luZzsgJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9BTFdBWVNfREVCVUcgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZWJ1Z2dpbmcgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RlYnVnZ2luZytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGVidWdnaW5nOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZWJ1Z2dpbmcvLS1kaXNhYmxlLWRlYnVnZ2luZyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfZGVidWdnaW5nIiA9ICJ4bm8iOyB0aGVuCisgICAgJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19ERUJVR0dJTkcgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZXZlbG9wZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZGV2ZWxvcGVyK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGV2ZWxvcGVyOyBpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyA7IHRoZW4KKyAgICAgZGV2ZWxvcGVyPSJ5ZXMiCisgICBlbGlmIHRlc3QgIiRlbmFibGV2YWwiICE9IG5vIDsgdGhlbgorICAgICBhc19mbl9lcnJvciAkPyAiUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtZGV2ZWxvcGVyIiAiJExJTkVOTyIgNQorICAgZWxzZQorICAgICBkZXZlbG9wZXI9Im5vIgorICAgZmkKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXZlbG9wZXIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2RldmVsb3BlcitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZGV2ZWxvcGVyOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXZlbG9wZXIvLS1kaXNhYmxlLWRldmVsb3BlciBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtdGVzdGluZy1jb2RlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Rlc3RpbmdfY29kZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3Rlc3RpbmdfY29kZTsgaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAxIiA+PmNvbmZkZWZzLmgKKworICAgZWxpZiB0ZXN0ICIkZW5hYmxldmFsIiAhPSBubyA7IHRoZW4KKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLXRlc3RpbmctY29kZSIgIiRMSU5FTk8iIDUKKyAgIGZpCitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdGVzdGluZy1jb2RlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF90ZXN0aW5nX2NvZGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3Rlc3RpbmdfY29kZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtdGVzdGluZy1jb2RlLy0tZGlzYWJsZS10ZXN0aW5nLWNvZGUgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlZW50cmFudCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZWVudHJhbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yZWVudHJhbnQ7IGlmIHRlc3QgIiRlbmFibGV2YWwiID0geWVzIC1vICIkZW5hYmxldmFsIiA9IG5vIDsgdGhlbgorICAgICB3aXRoX3Jlc19sb2Nrcz0iJGVuYWJsZXZhbCIKKyAgIGVsc2UKKyAgICAgYXNfZm5fZXJyb3IgJD8gIlBsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLXJlZW50cmFudCIgIiRMSU5FTk8iIDUKKyAgIGZpCitlbHNlCisgIHdpdGhfcmVzX2xvY2tzPSJubyIKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yZWVudHJhbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3JlZW50cmFudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcmVlbnRyYW50OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1yZWVudHJhbnQvLS1kaXNhYmxlLXJlZW50cmFudCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVwcmVjYXRlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kZXByZWNhdGVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZGVwcmVjYXRlZDsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kZXByZWNhdGVkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9kZXByZWNhdGVkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9kZXByZWNhdGVkOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXByZWNhdGVkLy0tZGlzYWJsZS1kZXByZWNhdGVkIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICIkZW5hYmxlX2RlcHJlY2F0ZWQiID0gbm8gOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fREVQUkVDQVRFRF9GVU5DVElPTlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IEFnZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1yb290LWFjY2VzcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcm9vdF9hY2Nlc3Mrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3Jvb3RfYWNjZXNzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJvb3QtYWNjZXNzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3Jvb3RfYWNjZXNzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcm9vdF9hY2Nlc3M7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yb290LWFjY2Vzcy8tLXdpdGhvdXQtcm9vdC1hY2Nlc3MgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCitpZiB0ZXN0ICJ4JHdpdGhfcm9vdF9hY2Nlc3MiID0gInhubyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19ST09UX0FDQ0VTUyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWttZW0tdXNhZ2Ugd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ttZW1fdXNhZ2Urc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2ttZW1fdXNhZ2U7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUta21lbS11c2FnZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9rbWVtX3VzYWdlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfa21lbV91c2FnZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWttZW0tdXNhZ2UvLS13aXRob3V0LWttZW0tdXNhZ2UgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCitpZiB0ZXN0ICJ4JHdpdGhfa21lbV91c2FnZSIgPSAieG5vIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX0tNRU1fVVNBR0UgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1kdW1teS12YWx1ZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2R1bW15X3ZhbHVlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZHVtbXlfdmFsdWVzOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWR1bW15LXZhbHVlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9kdW1teV92YWx1ZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9kdW1teV92YWx1ZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kdW1teS12YWx1ZXMvLS13aXRob3V0LWR1bW15LXZhbHVlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworIyBEZWZpbmUgdW5sZXNzIHNwZWNpZmljYWxseSBzdXBwcmVzc2VkIChpLmUuLCBvcHRpb24gZGVmYXVsdHMgdG8gZmFsc2UpLgoraWYgdGVzdCAieCR3aXRoX2R1bW15X3ZhbHVlcyIgIT0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2V0LXN1cHBvcnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2V0X3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zZXRfc3VwcG9ydDsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZXQtc3VwcG9ydCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2V0X3N1cHBvcnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3NldF9zdXBwb3J0OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zZXQtc3VwcG9ydC8tLWRpc2FibGUtc2V0LXN1cHBvcnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3NldF9zdXBwb3J0IiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzX2NvbnRhY3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3N5c19jb250YWN0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zeXNfY29udGFjdDsgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVD0iJHdpdGhfc3lzX2NvbnRhY3QiCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3lzX2NvbnRhY3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc3lzX2NvbnRhY3Qrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zeXNfY29udGFjdDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5c19jb250YWN0Ly0td2l0aG91dC1zeXNfY29udGFjdCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzX2xvY2F0aW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9zeXNfbG9jYXRpb24rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3N5c19sb2NhdGlvbjsgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DPSIkd2l0aF9zeXNfbG9jYXRpb24iCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3lzX2xvY2F0aW9uIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3N5c19sb2NhdGlvbitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3N5c19sb2NhdGlvbjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXN5c19sb2NhdGlvbi8tLXdpdGhvdXQtc3lzX2xvY2F0aW9uIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworCisjIworIyAgIFByb2plY3Q6IEFnZW50OiBFeHRlbnNpYmlsaXR5IGNvbmZpZ3VyYXRpb24KKyMjCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sb2NhbC1zbXV4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xvY2FsX3NtdXgrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9sb2NhbF9zbXV4OyBpZiB0ZXN0ICJ4JGVuYWJsZV9sb2NhbF9zbXV4IiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0VOQUJMRV9MT0NBTF9TTVVYIDEiID4+Y29uZmRlZnMuaAorCisgICAgZmkKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1sb2NhbC1zbXV4IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9sb2NhbF9zbXV4K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9sb2NhbF9zbXV4OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1sb2NhbC1zbXV4Ly0tZGlzYWJsZS1sb2NhbC1zbXV4IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hZ2VudHhfZG9tX3NvY2tfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2FnZW50eF9kb21fc29ja19vbmx5OworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9BR0VOVFhfRE9NX1NPQ0tfT05MWSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWFnZW50eC1kb20tc29jay1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9hZ2VudHhfZG9tX3NvY2tfb25seStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYWdlbnR4X2RvbV9zb2NrX29ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWFnZW50eC1kb20tc29jay1vbmx5Ly0tZGlzYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seSBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc25tcHRyYXBkLXN1YmFnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudDsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zbm1wdHJhcGQtc3ViYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NubXB0cmFwZF9zdWJhZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc25tcHRyYXBkX3N1YmFnZW50OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQvLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50IiA9ICJ4bm8iOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYIDEiID4+Y29uZmRlZnMuaAorCitmaQogCiBkZWZhdWx0X2FnZW50eF9zb2NrZXQ9Ii92YXIvYWdlbnR4L21hc3RlciIKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1hZ2VudHgtc29ja2V0IG9yIC0td2l0aG91dC1hZ2VudHgtc29ja2V0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9hZ2VudHhfc29ja2V0K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2FnZW50eF9zb2NrZXQiCi0KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtYWdlbnR4LXNvY2tldCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfYWdlbnR4X3NvY2tldCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYWdlbnR4X3NvY2tldDsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgZnVsbCBwYXRoICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBmdWxsIHBhdGggIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OworICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBmdWxsIHBhdGggIiAiJExJTkVOTyIgNTsKICAgZmkKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgQWdlbnRYIHNvY2tldCAkd2l0aHZhbCIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBBZ2VudFggc29ja2V0ICR3aXRodmFsIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIEFnZW50WCBzb2NrZXQgJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIEFnZW50WCBzb2NrZXQgJHdpdGh2YWwiID4mNjsgfQorCitlbHNlCisKKyAgd2l0aHZhbD0kZGVmYXVsdF9hZ2VudHhfc29ja2V0CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBkZWZhdWx0IEFnZW50WCBzb2NrZXQgJGRlZmF1bHRfYWdlbnR4X3NvY2tldCIgPiY1CiskYXNfZWNobyAidXNpbmcgZGVmYXVsdCBBZ2VudFggc29ja2V0ICRkZWZhdWx0X2FnZW50eF9zb2NrZXQiID4mNjsgfQorCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtYWdlbnR4LXNvY2tldCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9hZ2VudHhfc29ja2V0K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfYWdlbnR4X3NvY2tldDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWFnZW50eC1zb2NrZXQvLS13aXRob3V0LWFnZW50eC1zb2NrZXQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0FHRU5UWF9TT0NLRVQgIiR3aXRodmFsIgogX0FDRU9GCiAKIAotZWxzZQotCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgQWdlbnRYIHNvY2tldCAkZGVmYXVsdF9hZ2VudHhfc29ja2V0IiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGRlZmF1bHQgQWdlbnRYIHNvY2tldCAkZGVmYXVsdF9hZ2VudHhfc29ja2V0IiA+JjYKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0FHRU5UWF9TT0NLRVQgIiRkZWZhdWx0X2FnZW50eF9zb2NrZXQiCi1fQUNFT0YKLQotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1hZ2VudHgtc29ja2V0IG9yIC0tZGlzYWJsZS1hZ2VudHgtc29ja2V0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2FnZW50eF9zb2NrZXQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2FnZW50eF9zb2NrZXQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1hZ2VudHgtc29ja2V0IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1hZ2VudHgtc29ja2V0IGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uIG9yIC0td2l0aG91dC1kZWZhdWx0LXNubXAtdmVyc2lvbiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZGVmYXVsdF9zbm1wX3ZlcnNpb24iCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IiR3aXRoX2RlZmF1bHRfc25tcF92ZXJzaW9uIgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZGVmYXVsdC1zbm1wLXZlcnNpb24gb3IgLS1kaXNhYmxlLWRlZmF1bHQtc25tcC12ZXJzaW9uIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2RlZmF1bHRfc25tcF92ZXJzaW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9kZWZhdWx0X3NubXBfdmVyc2lvbiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uLy0td2l0aG91dC1kZWZhdWx0LXNubXAtdmVyc2lvbiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24vLS13aXRob3V0LWRlZmF1bHQtc25tcC12ZXJzaW9uIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyB3ZSB0ZXN0IHRoaXMgbm93IGFuZCBsYXRlciBhcyB3ZWxsLiAgd2UgdGVzdCBpdCBub3cgc28gY29uZmlndXJlIGNhbiBkaWUKLSMgZWFybHkgb24gd2l0aCBhbiBlcnJvciByYXRoZXIgdGhhbiB3YWl0aW5nIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NyaXB0LgotaWYgdGVzdCAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAieCI7IHRoZW4KLSAgaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIjJjIjsgdGhlbgotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IjIiCi0gIGZpCi0gIGlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMSIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMiIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMyI7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJbGxlZ2FsIHZlcnNpb24gbnVtYmVyIHBhc3NlZCB0byAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb24iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSWxsZWdhbCB2ZXJzaW9uIG51bWJlciBwYXNzZWQgdG8gLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi1maQotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzX2NvbnRhY3Qgb3IgLS13aXRob3V0LXN5c19jb250YWN0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9zeXNfY29udGFjdCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zeXNfY29udGFjdCIKLSAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVD0iJHdpdGhfc3lzX2NvbnRhY3QiCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zeXNfY29udGFjdCBvciAtLWRpc2FibGUtc3lzX2NvbnRhY3Qgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3lzX2NvbnRhY3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3N5c19jb250YWN0IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzLWNvbnRhY3QvLS13aXRob3V0LXN5cy1jb250YWN0IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXMtY29udGFjdC8tLXdpdGhvdXQtc3lzLWNvbnRhY3QgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzX2xvY2F0aW9uIG9yIC0td2l0aG91dC1zeXNfbG9jYXRpb24gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3N5c19sb2NhdGlvbitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zeXNfbG9jYXRpb24iCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQz0iJHdpdGhfc3lzX2xvY2F0aW9uIgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc3lzX2xvY2F0aW9uIG9yIC0tZGlzYWJsZS1zeXNfbG9jYXRpb24gd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc3lzX2xvY2F0aW9uK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zeXNfbG9jYXRpb24iCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXMtbG9jYXRpb24vLS13aXRob3V0LXN5cy1sb2NhdGlvbiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc3lzLWxvY2F0aW9uLy0td2l0aG91dC1zeXMtbG9jYXRpb24gaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbG9nZmlsZSBvciAtLXdpdGhvdXQtbG9nZmlsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbG9nZmlsZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9sb2dmaWxlIgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9IiR3aXRoX2xvZ2ZpbGUiCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1sb2dmaWxlIG9yIC0tZGlzYWJsZS1sb2dmaWxlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2xvZ2ZpbGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2xvZ2ZpbGUiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1sb2dmaWxlLy0td2l0aG91dC1sb2dmaWxlIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1sb2dmaWxlLy0td2l0aG91dC1sb2dmaWxlIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIm5vIjsgdGhlbgotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT0ibm9uZSIKLWZpCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC10cmFuc3BvcnRzIG9yIC0td2l0aG91dC10cmFuc3BvcnRzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF90cmFuc3BvcnRzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3RyYW5zcG9ydHMiCi0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dF90cmFuc3BvcnRzIG9yIC0td2l0aG91dC1vdXRfdHJhbnNwb3J0cyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfb3V0X3RyYW5zcG9ydHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3V0X3RyYW5zcG9ydHMiCi0KLWZpOwotCiAjCi0jIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiB0cmFuc3BvcnQgb3B0aW9ucworIyBmZWF0dXJlIGFkZGl0aW9uL3JlbW92YWwgYW5kIG1pbmltaWFsaXN0IHN1cHBvcnQKICMKK0ZFQVRVUkVfQUREX0ZMQUdTPSIiCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdHJhbnNwb3J0IG9yIC0td2l0aG91dC10cmFuc3BvcnQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3RyYW5zcG9ydCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF90cmFuc3BvcnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10cmFuc3BvcnRzLy0td2l0aG91dC10cmFuc3BvcnRzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10cmFuc3BvcnRzLy0td2l0aG91dC10cmFuc3BvcnRzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtdHJhbnNwb3J0IG9yIC0td2l0aG91dC1vdXQtdHJhbnNwb3J0IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vdXRfdHJhbnNwb3J0K3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX291dF90cmFuc3BvcnQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtdHJhbnNwb3J0cy8tLXdpdGhvdXQtb3V0LXRyYW5zcG9ydHMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC10cmFuc3BvcnRzLy0td2l0aG91dC1vdXQtdHJhbnNwb3J0cyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMKLSMgc2VjdXJpdHkgbW9kdWxlcwotIwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2VjdXJpdHktbW9kdWxlcyBvciAtLXdpdGhvdXQtc2VjdXJpdHktbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc2VjdXJpdHlfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zZWN1cml0eV9tb2R1bGVzIgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZWN1cml0eS1tb2R1bGVzIG9yIC0tZGlzYWJsZS1zZWN1cml0eS1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3NlY3VyaXR5X21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NlY3VyaXR5X21vZHVsZXMiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzLy0td2l0aG91dC1zZWN1cml0eS1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzLy0td2l0aG91dC1zZWN1cml0eS1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIwotIyBtaWIgbW9kdWxlcwotIwotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliX21vZHVsZXMgb3IgLS13aXRob3V0LW1pYl9tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJfbW9kdWxlcyIKLQotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliX21vZHVsZXMgb3IgLS1kaXNhYmxlLW1pYl9tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9taWJfbW9kdWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzLy0td2l0aG91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMvLS13aXRob3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dF9taWJfbW9kdWxlcyBvciAtLXdpdGhvdXQtb3V0X21pYl9tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vdXRfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3V0X21pYl9tb2R1bGVzIgotCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vdXRfbWliX21vZHVsZXMgb3IgLS1kaXNhYmxlLW91dF9taWJfbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9vdXRfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX291dF9taWJfbW9kdWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcy8tLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMvLS13aXRob3V0LW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLQotIwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWVudGVycHJpc2Utb2lkIG9yIC0td2l0aG91dC1lbnRlcnByaXNlLW9pZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZW50ZXJwcmlzZV9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZW50ZXJwcmlzZV9vaWQiCi0KKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZmVhdHVyZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9mZWF0dXJlczsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBlbnRlcnByaXNlIG51bWJlciAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBlbnRlcnByaXNlIG51bWJlciAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIGxpc3Qgb2YgZmVhdHVyZXMgIiAiJExJTkVOTyIgNTsKKyAgZmkKKyAgRkVBVFVSRV9BRERfRkxBR1M9Ii0tYWRkICR3aXRodmFsIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogYWRkaW5nIGluIGZlYXR1cmVzOiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAiYWRkaW5nIGluIGZlYXR1cmVzOiAkd2l0aHZhbCIgPiY2OyB9CisKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1mZWF0dXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9mZWF0dXJlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2ZlYXR1cmVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZmVhdHVyZXMvLS13aXRob3V0LWZlYXR1cmVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworCitGRUFUVVJFX1JFTU9WRV9GTEFHUz0iIgorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1mZWF0dXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X2ZlYXR1cmVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfZmVhdHVyZXM7CisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBsaXN0IG9mIGZlYXR1cmVzICIgIiRMSU5FTk8iIDU7CisgIGZpCisgIEZFQVRVUkVfUkVNT1ZFX0ZMQUdTPSItLXJlbW92ZSAkd2l0aHZhbCIKKyAgRkVBVFVSRVRBUkdTPSJmZWF0dXJlcyIKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9NSU5JTUFMX0NPREUgMSIgPj5jb25mZGVmcy5oCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHJlbW92aW5nIGZlYXR1cmVzOiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAicmVtb3ZpbmcgZmVhdHVyZXM6ICR3aXRodmFsIiA+JjY7IH0KKworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW91dC1mZWF0dXJlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9vdXRfZmVhdHVyZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9vdXRfZmVhdHVyZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtZmVhdHVyZXMvLS13aXRob3V0LW91dC1mZWF0dXJlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKworIyBDYXRjaCBjb21tb24gbWlzdGFrZXMKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1mZWF0dXJlIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9mZWF0dXJlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9mZWF0dXJlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZmVhdHVyZXMvLS13aXRob3V0LWZlYXR1cmVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LWZlYXR1cmUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9mZWF0dXJlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfZmVhdHVyZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1mZWF0dXJlcy8tLXdpdGhvdXQtb3V0LWZlYXR1cmVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKK0ZFQVRVUkVUQVJHUz0iIgorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW1pbmltYWxpc3Qgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWluaW1hbGlzdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pbmltYWxpc3Q7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWluaW1hbGlzdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWluaW1hbGlzdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWluaW1hbGlzdDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaW1hbGlzdC8tLWRpc2FibGUtbWluaW1hbGlzdCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWluaW1hbGlzdCIgPSAieHllcyI7IHRoZW4KKyAgICMgd2UnbGwgYXNzdW1lIHRoZSBtaW5pIGFnZW50IGlzIGRlc2lyZWQgaGVyZSBhcyB3ZWxsCisgICBtaW5pX2FnZW50PSJ5ZXMiCisgICBGRUFUVVJFVEFSR1M9ImZlYXR1cmVzIgorCisgICAjIG5lZWRlZCB0byBib290c3RyYXAgbGF0ZXIgY2hlY2tzCisgICBlY2hvICIiID4gaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaAorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX01JTklNQUxfQ09ERSAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICAgRkVBVFVSRUhFQURFUlM9IiIKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWluaW1hbGlzdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbWluaW1hbGlzdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWluaW1hbGlzdDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaW1hbGlzdC8tLWRpc2FibGUtbWluaW1hbGlzdCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5vdGlmeS1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25vdGlmeV9vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbm90aWZ5X29ubHk7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbm90aWZ5LW9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25vdGlmeV9vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ub3RpZnlfb25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbm90aWZ5LW9ubHkvLS1kaXNhYmxlLW5vdGlmeS1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCitpZiB0ZXN0ICJ4JGVuYWJsZV9ub3RpZnlfb25seSIgPSAieHllcyI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT1RJRllfT05MWSAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1ub3RpZnktb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbm90aWZ5X29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX25vdGlmeV9vbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1ub3RpZnktb25seS8tLWRpc2FibGUtbm90aWZ5LW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ub3RpZnlvbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX25vdGlmeW9ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ub3RpZnlvbmx5OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1ub3RpZnktb25seS8tLWRpc2FibGUtbm90aWZ5LW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLW5vLWxpc3RlbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ub19saXN0ZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ub19saXN0ZW47CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbm8tbGlzdGVuIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9ub19saXN0ZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX25vX2xpc3RlbjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbm8tbGlzdGVuLy0tZGlzYWJsZS1uby1saXN0ZW4gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX25vX2xpc3RlbiIgPSAieHllcyIgLW8gIngkZW5hYmxlX25vdGlmeV9vbmx5IiA9ICJ4eWVzIjsgdGhlbgorICAgZW5hYmxlX25vX2xpc3Rlbj0ieWVzIgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW5vLWxpc3RlbiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbm9fbGlzdGVuK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ub19saXN0ZW47IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW5vLWxpc3Rlbi8tLWRpc2FibGUtbm8tbGlzdGVuIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbm9saXN0ZW4gd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbm9saXN0ZW4rc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9ub2xpc3RlbjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbm8tbGlzdGVuLy0tZGlzYWJsZS1uby1saXN0ZW4gaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXJlYWQtb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9yZWFkX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yZWFkX29ubHk7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcmVhZC1vbmx5IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9yZWFkX29ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3JlYWRfb25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVhZC1vbmx5Ly0tZGlzYWJsZS1yZWFkLW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX3JlYWRfb25seSIgPSAieHllcyIgLW8gIngkZW5hYmxlX25vdGlmeV9vbmx5IiA9ICJ4eWVzIiA7IHRoZW4KKyAgIGVuYWJsZV9yZWFkX29ubHk9InllcyIKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9OT19XUklURV9TVVBQT1JUIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXJlYWQtb25seSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcmVhZF9vbmx5K3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9yZWFkX29ubHk7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlYWQtb25seS8tLWRpc2FibGUtcmVhZC1vbmx5IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtcmVhZG9ubHkgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfcmVhZG9ubHkrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9yZWFkb25seTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcmVhZC1vbmx5Ly0tZGlzYWJsZS1yZWFkLW9ubHkgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIworIyAgIFByb2plY3Q6IEFnZW50OiBNSUIgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKyMjCisKKyMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1taW5pX2FnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pbmlfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taW5pX2FnZW50OworZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pbmlfYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pbmlfYWdlbnQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pbmlfYWdlbnQ7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1pbmlfYWdlbnQvLS1kaXNhYmxlLW1pbmlfYWdlbnQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2lmIHRlc3QgIngkZW5hYmxlX21pbmlfYWdlbnQiID0gInh5ZXMiOyB0aGVuCisgICAgbWluaV9hZ2VudD0ieWVzIgorZWxzZQorICAgIG1pbmlfYWdlbnQ9Im5vIgorZmkKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1taW5pYWdlbnQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pbmlhZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWluaWFnZW50OyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWluaWFnZW50IHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21pbmlhZ2VudCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21pbmlhZ2VudDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWZkLXJld3JpdGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX21mZF9yZXdyaXRlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX21mZF9yZXdyaXRlczsKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tZmQtcmV3cml0ZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21mZF9yZXdyaXRlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWZkX3Jld3JpdGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZmQtcmV3cml0ZXMvLS1kaXNhYmxlLW1mZC1yZXdyaXRlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYl9tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9taWJfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbWliX21vZHVsZXM7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbWliX21vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9taWJfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYl9tb2R1bGVzLy0td2l0aG91dC1taWJfbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0X21pYl9tb2R1bGVzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9vdXRfbWliX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX291dF9taWJfbW9kdWxlczsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1vdXRfbWliX21vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfb3V0X21pYl9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfb3V0X21pYl9tb2R1bGVzOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3V0X21pYl9tb2R1bGVzLy0td2l0aG91dC1vdXRfbWliX21vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjCisjIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiBjb25maWd1cmUgb3B0aW9ucworIworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW1pYi1tb2R1bGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21pYl9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21pYl9tb2R1bGU7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWItbW9kdWxlcy8tLXdpdGhvdXQtbWliLW1vZHVsZXMgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1tb2R1bGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX21vZHVsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbW9kdWxlOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMvLS13aXRob3V0LW1pYi1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzLy0td2l0aG91dC1taWItbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LW1pYi1tb2R1bGUgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9taWJfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfbWliX21vZHVsZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcy8tLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LW1vZHVsZSB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfb3V0X21vZHVsZStzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfb3V0X21vZHVsZTsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcy8tLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX291dF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9vdXRfbW9kdWxlczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcy8tLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBFbnRlcnByaXNlIHNldHRpbmdzCSg/IEFnZW50L0xpYnJhcnkvQm90aD8pCisjIworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW50ZXJwcmlzZS1vaWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VudGVycHJpc2Vfb2lkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9lbnRlcnByaXNlX29pZDsKKyAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgZW50ZXJwcmlzZSBudW1iZXIgIiAiJExJTkVOTyIgNTsKICAgZmkKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0VOVEVSUFJJU0VfT0lEICR3aXRodmFsCkBAIC0zMDY1LDMyICs0ODU0LDI4IEBACiAjZGVmaW5lIE5FVFNOTVBfRU5URVJQUklTRV9ET1RfTUlCICRlbnRfZG90X29pZAogX0FDRU9GCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZW50ZXJwcmlzZSBudW1iZXIgJHdpdGh2YWwiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZW50ZXJwcmlzZSBudW1iZXIgJHdpdGh2YWwiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZW50ZXJwcmlzZSBudW1iZXIgJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIGVudGVycHJpc2UgbnVtYmVyICR3aXRodmFsIiA+JjY7IH0KIAogZWxzZQogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgXCJlbnRlcnByaXNlLm5ldC1zbm1wXCIiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCBcImVudGVycHJpc2UubmV0LXNubXBcIiIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBkZWZhdWx0IFwiZW50ZXJwcmlzZS5uZXQtc25tcFwiIiA+JjUKKyRhc19lY2hvICJ1c2luZyBkZWZhdWx0IFwiZW50ZXJwcmlzZS5uZXQtc25tcFwiIiA+JjY7IH0KIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW50ZXJwcmlzZS1vaWQgb3IgLS1kaXNhYmxlLWVudGVycHJpc2Utb2lkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VudGVycHJpc2Vfb2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9lbnRlcnByaXNlX29pZCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW9pZCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utb2lkIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbnRlcnByaXNlLW9pZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lbnRlcnByaXNlX29pZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VudGVycHJpc2Vfb2lkOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utb2lkIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQgb3IgLS13aXRob3V0LWVudGVycHJpc2Utc3lzb2lkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lbnRlcnByaXNlX3N5c29pZCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lbnRlcnByaXNlX3N5c29pZCIKIAorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZW50ZXJwcmlzZV9zeXNvaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VudGVycHJpc2Vfc3lzb2lkOwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9OworICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSAiICIkTElORU5PIiA1OwogICBmaQogICBzeXNfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nIHwgc2VkICdzL1wuL1wsL2cnYAogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0zMTA3LDMyICs0ODkyLDI4IEBACiAjZGVmaW5lIE5FVFNOTVBfU1lTVEVNX0RPVF9NSUJfTEVOR1RIICRzeXNvaWRfbGVuCiBfQUNFT0YKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBlbnRlcnByaXNlIHN5c09JRCAkd2l0aHZhbCAuLi4uIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGVudGVycHJpc2Ugc3lzT0lEICR3aXRodmFsIC4uLi4iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgZW50ZXJwcmlzZSBzeXNPSUQgJHdpdGh2YWwgLi4uLiIgPiY1CiskYXNfZWNobyAidXNpbmcgZW50ZXJwcmlzZSBzeXNPSUQgJHdpdGh2YWwgLi4uLiIgPiY2OyB9CiAKIGVsc2UKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IGVudGVycHJpc2Ugc3lzT0lEIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wQWdlbnRPSURzLi4uXCIiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCBlbnRlcnByaXNlIHN5c09JRCBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcEFnZW50T0lEcy4uLlwiIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgZW50ZXJwcmlzZSBzeXNPSUQgXCJORVQtU05NUC1NSUI6Om5ldFNubXBBZ2VudE9JRHMuLi5cIiIgPiY1CiskYXNfZWNobyAidXNpbmcgZGVmYXVsdCBlbnRlcnByaXNlIHN5c09JRCBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcEFnZW50T0lEcy4uLlwiIiA+JjY7IH0KIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW50ZXJwcmlzZS1zeXNvaWQgb3IgLS1kaXNhYmxlLWVudGVycHJpc2Utc3lzb2lkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2VudGVycHJpc2Vfc3lzb2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9lbnRlcnByaXNlX3N5c29pZCIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utc3lzb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLXN5c29pZCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQvLS13aXRob3V0LWVudGVycHJpc2Utc3lzb2lkIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbnRlcnByaXNlLXN5c29pZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lbnRlcnByaXNlX3N5c29pZCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2VudGVycHJpc2Vfc3lzb2lkOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQvLS13aXRob3V0LWVudGVycHJpc2Utc3lzb2lkIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIG9yIC0td2l0aG91dC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQiCiAKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VudGVycHJpc2Vfbm90aWZpY2F0aW9uX29pZDsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsKKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgIiAiJExJTkVOTyIgNTsKICAgZmkKICAgbm90aWZpY2F0aW9uX29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJyB8IHNlZCAncy9cLi9cLC9nJ2AKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtMzE0OSw4MyArNDkzMCwzMSBAQAogI2RlZmluZSBORVRTTk1QX05PVElGSUNBVElPTl9ET1RfTUlCX0xFTkdUSCAkbm90aWZpY2F0aW9ub2lkX2xlbgogX0FDRU9GCiAKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgZW50ZXJwcmlzZSBub3RpZmljYXRpb25zICR3aXRodmFsIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIGVudGVycHJpc2Ugbm90aWZpY2F0aW9ucyAkd2l0aHZhbCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBlbnRlcnByaXNlIG5vdGlmaWNhdGlvbnMgJHdpdGh2YWwiID4mNQorJGFzX2VjaG8gInVzaW5nIGVudGVycHJpc2Ugbm90aWZpY2F0aW9ucyAkd2l0aHZhbCIgPiY2OyB9CiAKIGVsc2UKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBkZWZhdWx0IG5vdGlmaWNhdGlvbnMgXCJORVQtU05NUC1NSUI6Om5ldFNubXBOb3RpZmljYXRpb25zXCIiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgZGVmYXVsdCBub3RpZmljYXRpb25zIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wTm90aWZpY2F0aW9uc1wiIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIGRlZmF1bHQgbm90aWZpY2F0aW9ucyBcIk5FVC1TTk1QLU1JQjo6bmV0U25tcE5vdGlmaWNhdGlvbnNcIiIgPiY1CiskYXNfZWNobyAidXNpbmcgZGVmYXVsdCBub3RpZmljYXRpb25zIFwiTkVULVNOTVAtTUlCOjpuZXRTbm1wTm90aWZpY2F0aW9uc1wiIiA+JjY7IH0KIAotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkIG9yIC0tZGlzYWJsZS1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9lbnRlcnByaXNlX25vdGlmaWNhdGlvbl9vaWQiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotIwotIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gY29uZmlndXJlIG9wdGlvbnMKLSMKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbWliLW1vZHVsZSBvciAtLXdpdGhvdXQtbWliLW1vZHVsZSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbWliX21vZHVsZStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9taWJfbW9kdWxlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24xLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjEuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1vZHVsZSBvciAtLXdpdGhvdXQtbW9kdWxlIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbW9kdWxlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24zLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbjMuIFVzZSAtLXdpdGgtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW1vZHVsZXMgb3IgLS13aXRob3V0LW1vZHVsZXMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfbW9kdWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uNC4gVXNlIC0td2l0aC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb240LiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZW50ZXJwcmlzZV9ub3RpZmljYXRpb25fb2lkOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1vdXQtbWliLW1vZHVsZSBvciAtLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX291dF9taWJfbW9kdWxlK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX291dF9taWJfbW9kdWxlIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb241LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb241LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtb3V0LW1vZHVsZXMgb3IgLS13aXRob3V0LW91dC1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9vdXRfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9vdXRfbW9kdWxlcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uNy4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uNy4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworIyMKKyMgICBQcm9qZWN0OiBQZXJsIHNldHRpbmdzCisjIwogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLW91dC1tb2R1bGUgb3IgLS13aXRob3V0LW91dC1tb2R1bGUgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX291dF9tb2R1bGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfb3V0X21vZHVsZSIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uOC4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uOC4gVXNlIC0td2l0aC1vdXQtbWliLW1vZHVsZXMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCi0jCi0jIFBlcmwgc3BlY2lmaWMKLSMKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJsLW1vZHVsZXMgb3IgLS13aXRob3V0LXBlcmwtbW9kdWxlcyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfcGVybF9tb2R1bGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3BlcmxfbW9kdWxlcyIKLQorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1wZXJsLW1vZHVsZXMgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BlcmxfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfcGVybF9tb2R1bGVzOwogICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KICAgICAgIGluc3RhbGxfcGVybD0ibm8iCiAgICAgZWxzZQpAQCAtMzIzNyw1NiArNDk2Niw0OSBAQAogCiBlbHNlCiAgIGluc3RhbGxfcGVybD0idHJ5IgotZmk7CitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW1iZWRkZWQtcGVybCBvciAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9lbWJlZGRlZF9wZXJsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9lbWJlZGRlZF9wZXJsIgotICBlbWJlZF9wZXJsPSIkZW5hYmxldmFsIgorICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcmwtbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9wZXJsX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9wZXJsX21vZHVsZXM7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJsLW1vZHVsZXMvLS13aXRob3V0LXBlcmwtbW9kdWxlcyBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZW1iZWRkZWQtcGVybCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lbWJlZGRlZF9wZXJsK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfZW1iZWRkZWRfcGVybDsgZW1iZWRfcGVybD0iJGVuYWJsZXZhbCIKIGVsc2UKICAgZW1iZWRfcGVybD0idHJ5IgotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1wZXJsLWNjLWNoZWNrcyBvciAtLWRpc2FibGUtcGVybC1jYy1jaGVja3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfcGVybF9jY19jaGVja3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3BlcmxfY2NfY2hlY2tzIgotCi1maTsKLQotIyBDb21tb24gcGVybCBtaXN0YWtlcwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcmwtbW9kdWxlcyBvciAtLWRpc2FibGUtcGVybC1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3BlcmxfbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfcGVybF9tb2R1bGVzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcGVybC1tb2R1bGVzLy0td2l0aG91dC1wZXJsLW1vZHVsZXMgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcmwtbW9kdWxlcy8tLXdpdGhvdXQtcGVybC1tb2R1bGVzIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbWJlZGRlZC1wZXJsIG9yIC0td2l0aG91dC1lbWJlZGRlZC1wZXJsIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9lbWJlZGRlZF9wZXJsK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VtYmVkZGVkX3BlcmwiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwvLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZW1iZWRkZWQtcGVybC8tLWRpc2FibGUtZW1iZWRkZWQtcGVybCBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVybC1jYy1jaGVja3Mgb3IgLS13aXRob3V0LXBlcmwtY2MtY2hlY2tzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9wZXJsX2NjX2NoZWNrcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9wZXJsX2NjX2NoZWNrcyIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcGVybC1jYy1jaGVja3MvLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXBlcmwtY2MtY2hlY2tzLy0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CitmaQogCiAKLSMKLSMgUHl0aG9uIHNwZWNpZmljCi0jCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWVtYmVkZGVkLXBlcmwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VtYmVkZGVkX3Blcmwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2VtYmVkZGVkX3Blcmw7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwvLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcHl0aG9uLW1vZHVsZXMgb3IgLS13aXRob3V0LXB5dGhvbi1tb2R1bGVzIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9weXRob25fbW9kdWxlcytzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9weXRob25fbW9kdWxlcyIKIAorIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXBlcmwtY2MtY2hlY2tzIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3BlcmxfY2NfY2hlY2tzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfcGVybF9jY19jaGVja3M7CitmaQorCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtcGVybC1jYy1jaGVja3Mgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3BlcmxfY2NfY2hlY2tzK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9wZXJsX2NjX2NoZWNrczsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtcGVybC1jYy1jaGVja3MvLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyMKKyMgICBQcm9qZWN0OiBQeXRob24gc2V0dGluZ3MKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1weXRob24tbW9kdWxlcyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcHl0aG9uX21vZHVsZXMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3B5dGhvbl9tb2R1bGVzOwogICAgIGluc3RhbGxfcHl0aG9uPSJ5ZXMiCiAgICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gInllcyI7IHRoZW4KICAgICAgIFBZVEhPTkFSR1M9IiIKQEAgLTMyOTksMjA3ICs1MDIxLDYzNSBAQAogCiBlbHNlCiAgIGluc3RhbGxfcHl0aG9uPSJubyIKLWZpOwotCi0jIG90aGVyIGZsYWdzCitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc2VydmVyLXNlbmQtYnVmIG9yIC0td2l0aG91dC1zZXJ2ZXItc2VuZC1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3NlcnZlcl9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9zZXJ2ZXJfc2VuZF9idWYiCiAKKyMjCisjICAgUHJvamVjdDogTGlicmFyeSBzZXR0aW5ncworIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXNlcnZlci1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc2VydmVyX3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9zZXJ2ZXJfc2VuZF9idWY7CiAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgc2VuZCBidWZmZXIgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciBzZW5kIGJ1ZmZlciAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHNlbmQgYnVmZmVyICIgIiRMSU5FTk8iIDUKICAgIGZpCiAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUYgJHdpdGh2YWwKIF9BQ0VPRgogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY2Ci1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZXJ2ZXItc2VuZC1idWYgb3IgLS1kaXNhYmxlLXNlcnZlci1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zZXJ2ZXJfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NlcnZlcl9zZW5kX2J1ZiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1zZW5kLWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXNlbmQtYnVmIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItc2VuZC1idWYvLS13aXRob3V0LXNlcnZlci1zZW5kLWJ1ZiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjUKKyRhc19lY2hvICJ1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjY7IH0KK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zZXJ2ZXItc2VuZC1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfc2VydmVyX3NlbmRfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfc2VydmVyX3NlbmRfYnVmOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXNlbmQtYnVmLy0td2l0aG91dC1zZXJ2ZXItc2VuZC1idWYgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCiAKIAotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZXJ2ZXItcmVjdi1idWYgb3IgLS13aXRob3V0LXNlcnZlci1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfc2VydmVyX3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX3NlcnZlcl9yZWN2X2J1ZiIKIAorIyBDaGVjayB3aGV0aGVyIC0td2l0aC1zZXJ2ZXItcmVjdi1idWYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3NlcnZlcl9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc2VydmVyX3JlY3ZfYnVmOwogICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBzZXJ2ZXIgcmVjdiBidWZmZXIgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciByZWN2IGJ1ZmZlciAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICBhc19mbl9lcnJvciAkPyAiIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHJlY3YgYnVmZmVyICIgIiRMSU5FTk8iIDUKICAgZmkKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1JFQ1ZfQlVGICR3aXRodmFsCiBfQUNFT0YKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3Igc2VydmVyIHNvY2tldHMiID4mNgotZmk7Ci0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2VydmVyLXJlY3YtYnVmIG9yIC0tZGlzYWJsZS1zZXJ2ZXItcmVjdi1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfc2VydmVyX3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9zZXJ2ZXJfcmVjdl9idWYiCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zZXJ2ZXItcmVjdi1idWYvLS13aXRob3V0LXNlcnZlci1yZWN2LWJ1ZiBpbnN0ZWFkICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtc2VydmVyLXJlY3YtYnVmLy0td2l0aG91dC1zZXJ2ZXItcmVjdi1idWYgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY1CiskYXNfZWNobyAidXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0cyIgPiY2OyB9CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtc2VydmVyLXJlY3YtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX3NlcnZlcl9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX3NlcnZlcl9yZWN2X2J1ZjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1yZWN2LWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXJlY3YtYnVmIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2xpZW50LXNlbmQtYnVmIG9yIC0td2l0aG91dC1jbGllbnQtc2VuZC1idWYgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2NsaWVudF9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9jbGllbnRfc2VuZF9idWYiCiAKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtY2xpZW50LXNlbmQtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9jbGllbnRfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX2NsaWVudF9zZW5kX2J1ZjsKICAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHNlbmQgYnVmZmVyICIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgc2VuZCBidWZmZXIgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIiBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCBzZW5kIGJ1ZmZlciAiICIkTElORU5PIiA1CiAgIGZpCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9TRU5EX0JVRiAkd2l0aHZhbAogX0FDRU9GCiAKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY1Ci1lY2hvICIke0VDSE9fVH11c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjYKLWZpOwotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNsaWVudC1zZW5kLWJ1ZiBvciAtLWRpc2FibGUtY2xpZW50LXNlbmQtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2NsaWVudF9zZW5kX2J1ZitzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfY2xpZW50X3NlbmRfYnVmIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtY2xpZW50LXNlbmQtYnVmLy0td2l0aG91dC1jbGllbnQtc2VuZC1idWYgaW5zdGVhZCAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1zZW5kLWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXNlbmQtYnVmIGluc3RlYWQgIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maTsKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNQorJGFzX2VjaG8gInVzaW5nIE9TIGRlZmF1bHQgc2VuZCBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNjsgfQorZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWNsaWVudC1zZW5kLWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9jbGllbnRfc2VuZF9idWYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9jbGllbnRfc2VuZF9idWY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtc2VuZC1idWYvLS13aXRob3V0LWNsaWVudC1zZW5kLWJ1ZiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWNsaWVudC1yZWN2LWJ1ZiBvciAtLXdpdGhvdXQtY2xpZW50LXJlY3YtYnVmIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9jbGllbnRfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfY2xpZW50X3JlY3ZfYnVmIgogCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWNsaWVudC1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfY2xpZW50X3JlY3ZfYnVmK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9jbGllbnRfcmVjdl9idWY7CiAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCByZWN2IGJ1ZmZlciAiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHJlY3YgYnVmZmVyICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgIGFzX2ZuX2Vycm9yICQ/ICIgUGxlYXNlIHByb3ZpZGUgYSBwb3NpdGl2ZSBudW1iZXIgZm9yIHRoZSBjbGllbnQgcmVjdiBidWZmZXIgIiAiJExJTkVOTyIgNQogICBmaQogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9DTElFTlRfUkVDVl9CVUYgJHdpdGh2YWwKIF9BQ0VPRgogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHVzaW5nIE9TIGRlZmF1bHQgcmVjdiBidWZmZXIgc2l6ZSBmb3IgY2xpZW50IHNvY2tldHMiID4mNQotZWNobyAiJHtFQ0hPX1R9dXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0cyIgPiY2Ci1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1jbGllbnQtcmVjdi1idWYgb3IgLS1kaXNhYmxlLWNsaWVudC1yZWN2LWJ1ZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9jbGllbnRfcmVjdl9idWYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2NsaWVudF9yZWN2X2J1ZiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXJlY3YtYnVmIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtcmVjdi1idWYvLS13aXRob3V0LWNsaWVudC1yZWN2LWJ1ZiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjUKKyRhc19lY2hvICJ1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzIiA+JjY7IH0KK2ZpCiAKLSMKLSMgb3RoZXJ3aXNlIHByb21wdGVkIGluZm9ybWF0aW9uCi0jCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtY2xpZW50LXJlY3YtYnVmIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2NsaWVudF9yZWN2X2J1ZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2NsaWVudF9yZWN2X2J1ZjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXJlY3YtYnVmIGluc3RlYWQiICIkTElORU5PIiA1CitmaQogCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWRlZmF1bHRzIG9yIC0td2l0aG91dC1kZWZhdWx0cyB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZGVmYXVsdHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZGVmYXVsdHMiCi0gIGRlZmF1bHRzPSJ5ZXMiCisKKyMjCisjICAgU3lzdGVtOiBsaWJyYXJ5IHNldHRpbmdzICAobW9yZSkKKyMjCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbGYgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX2VsZitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfZWxmOworZmkKKworICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWVsZiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9lbGYrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9lbGY7IGFzX2ZuX2Vycm9yICQ/ICJJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbGYvLS13aXRob3V0LWVsZiBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbmwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX25sK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9ubDsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1ubCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9ubCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX25sOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbmwvLS13aXRob3V0LW5sIGluc3RlYWQiICIkTElORU5PIiA1CitmaQorCisKKworIyBDaGVjayB3aGV0aGVyIC0td2l0aC1saWJ3cmFwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9saWJ3cmFwK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9saWJ3cmFwOwogZWxzZQotICBkZWZhdWx0cz0ibm8iCi1maTsKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1kZWZhdWx0cyBvciAtLWRpc2FibGUtZGVmYXVsdHMgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZGVmYXVsdHMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2RlZmF1bHRzIgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZGVmYXVsdHMvLS13aXRob3V0LWRlZmF1bHRzIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0cy8tLXdpdGhvdXQtZGVmYXVsdHMgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOworICB3aXRoX2xpYndyYXA9Im5vIgorZmkKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgb3IgLS1kaXNhYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eStzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eSIKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ3cmFwIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2xpYndyYXArc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ3cmFwOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbGlid3JhcC8tLXdpdGhvdXQtbGlid3JhcCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKIAotZmk7CiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBvciAtLXdpdGhvdXQtdWNkLXNubXAtY29tcGF0aWJpbGl0eSB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfdWNkX3NubXBfY29tcGF0aWJpbGl0eStzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF91Y2Rfc25tcF9jb21wYXRpYmlsaXR5IgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5Ly0tZGlzYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkvLS1kaXNhYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgaW5zdGVhZCAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpOwogCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXpsaWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHt3aXRoX3psaWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX3psaWI7CitlbHNlCisgIHdpdGhfemxpYj0ibm8iCitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtemxpYiB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV96bGliK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfemxpYjsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXpsaWIvLS13aXRob3V0LXpsaWIgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWJ6aXAyIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9iemlwMitzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfYnppcDI7CitlbHNlCisgIHdpdGhfYnppcDI9Im5vIgorZmkKKworCisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbW50dGFiIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9tbnR0YWIrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICB3aXRodmFsPSR3aXRoX21udHRhYjsKK2ZpCisKKyAgICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1tbnR0YWIgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbW50dGFiK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgZW5hYmxldmFsPSRlbmFibGVfbW50dGFiOyBhc19mbl9lcnJvciAkPyAiSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbW50dGFiLy0td2l0aG91dC1tbnR0YWIgaW5zdGVhZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworIyMKKyMgICBQcm9qZWN0OiBteXNxbAorIyMKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLW15c3FsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7d2l0aF9teXNxbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfbXlzcWw7CitmaQorCisgICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbXlzcWwgd2FzIGdpdmVuLgoraWYgdGVzdCAiJHtlbmFibGVfbXlzcWwrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9teXNxbDsgYXNfZm5fZXJyb3IgJD8gIkludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW15c3FsLy0td2l0aG91dC1teXNxbCBpbnN0ZWFkIiAiJExJTkVOTyIgNQorZmkKKworaWYgdGVzdCAieCR3aXRoX215c3FsIiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9NWVNRTCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyAtKi0gYXV0b2NvbmYgLSotCiAjCi0jIHNldHVwIGluc3RhbGwgdGFyZ2V0cworIyBQcm9tcHQgZm9yIHZhcmlvdXMgYml0cyBvZiB1c2VyIGluZm9ybWF0aW9uCiAjCi1pZiB0ZXN0ICJ4JGVuYWJsZV91Y2Rfc25tcF9jb21wYXRpYmlsaXR5IiA9ICJ4eWVzIiA7IHRoZW4KLSAgaW5zdGFsbHVjZGhlYWRlcnM9aW5zdGFsbHVjZGhlYWRlcnMKLSAgaW5zdGFsbHVjZGxpYnM9aW5zdGFsbHVjZGxpYnMKIAotICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCi0gIFVDRC1TTk1QIGNvbXBhdGFiaWxpdHk6ICAgICBlbmFibGVkCi1FT0YKK2lmIHRlc3QgIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIngiOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gcHJvbXB0IGZvciB2YWx1ZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0byBwcm9tcHQgZm9yIHZhbHVlcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX3dhcm5lZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCiAKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfToKKworCSAqKioqKioqKioqKioqKiBDb25maWd1cmF0aW9uIFNlY3Rpb24gKioqKioqKioqKioqKioKKworCVlvdSBhcmUgYWJvdXQgdG8gYmUgcHJvbXB0ZWQgd2l0aCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuICBBbnN3ZXIKK3RoZW0gY2FyZWZ1bGx5LCBhcyB0aGV5IGRldGVybWluZSBob3cgdGhlIFNOTVAgYWdlbnQgYW5kIHJlbGF0ZWQKK2FwcGxpY2F0aW9ucyBhcmUgdG8gZnVuY3Rpb24uCisKKwlBZnRlciB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5pc2hlcywgeW91IGNhbiBicm93c2UgdGhlIG5ld2x5CitjcmVhdGVkIG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgZm9yIGZ1cnRoZXIgLSBsZXNzIGltcG9ydGFudCAtIHBhcmFtZXRlcnMgdG8KK21vZGlmeS4gIEJlIGNhcmVmdWwgaWYgeW91IHJlLXJ1biBjb25maWd1cmUgdGhvdWdoLCBzaW5jZSBuZXQtc25tcC1jb25maWcuaAord2lsbCBiZSBvdmVyd3JpdHRlbi4KKworLVByZXNzIHJldHVybiB0byBjb250aW51ZS0KKyIgPiY1CiskYXNfZWNobyAiJGFzX21lOgorCisJICoqKioqKioqKioqKioqIENvbmZpZ3VyYXRpb24gU2VjdGlvbiAqKioqKioqKioqKioqKgorCisJWW91IGFyZSBhYm91dCB0byBiZSBwcm9tcHRlZCB3aXRoIGEgc2VyaWVzIG9mIHF1ZXN0aW9ucy4gIEFuc3dlcgordGhlbSBjYXJlZnVsbHksIGFzIHRoZXkgZGV0ZXJtaW5lIGhvdyB0aGUgU05NUCBhZ2VudCBhbmQgcmVsYXRlZAorYXBwbGljYXRpb25zIGFyZSB0byBmdW5jdGlvbi4KKworCUFmdGVyIHRoZSBjb25maWd1cmUgc2NyaXB0IGZpbmlzaGVzLCB5b3UgY2FuIGJyb3dzZSB0aGUgbmV3bHkKK2NyZWF0ZWQgbmV0LXNubXAtY29uZmlnLmggZmlsZSBmb3IgZnVydGhlciAtIGxlc3MgaW1wb3J0YW50IC0gcGFyYW1ldGVycyB0bworbW9kaWZ5LiAgQmUgY2FyZWZ1bCBpZiB5b3UgcmUtcnVuIGNvbmZpZ3VyZSB0aG91Z2gsIHNpbmNlIG5ldC1zbm1wLWNvbmZpZy5oCit3aWxsIGJlIG92ZXJ3cml0dGVuLgorCistUHJlc3MgcmV0dXJuIHRvIGNvbnRpbnVlLQorIiA+JjY7fQorCityZWFkIHRtcGlucHV0IDwmNworYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV93YXJuZWQ9Im5vIgorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV93YXJuZWQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oYXZlX3dhcm5lZCIgPiY2OyB9CitlbHNlCisgIGFjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCitmaQorCitNRT1gJFdIT0FNSWAKK2lmIHRlc3QgLWYgL2V0Yy9yZXNvbHYuY29uZjsgdGhlbgorICBMT0M9YGF3ayAnL15kb21haW4ve2xvYz0kTkZ9RU5Ee3ByaW50IGxvY30nIC9ldGMvcmVzb2x2LmNvbmZgCitmaQoraWYgdGVzdCAieCRMT0MiID0geDsgdGhlbgorICBMT0M9IkBuby53aGVyZSIKIGZpCiAKIAorTVNHX0NIRUNLPSJEZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAiID4mNjsgfQoraWYgJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZWNobyAiIiA+JjYKIAotIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KLWlmIHRlc3QgIngkd2l0aF9yb290X2FjY2VzcyIgPSAieG5vIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX05PX1JPT1RfQUNDRVNTIDEKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiCisKKyoqKiBEZWZhdWx0IFNOTVAgVmVyc2lvbjoKKworCVN0YXJ0aW5nIHdpdGggTmV0LVNOTVAgNS4wLCB5b3UgY2FuIGNob29zZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mCit0aGUgU05NUCBwcm90b2NvbCB0byB1c2Ugd2hlbiBubyB2ZXJzaW9uIGlzIGdpdmVuIGV4cGxpY2l0bHkgb24gdGhlCitjb21tYW5kIGxpbmUsIG9yIHZpYSBhbiAnc25tcC5jb25mJyBmaWxlLiAgSW4gdGhlIHBhc3QgdGhpcyB3YXMgc2V0IHRvCitTTk1QdjEsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvIHN3aXRjaCB0byBTTk1QdjMgaWYgZGVzaXJlZC4gIFNOTVB2Mword2lsbCBwcm92aWRlIGEgbW9yZSBzZWN1cmUgbWFuYWdlbWVudCBlbnZpcm9ubWVudCAoYW5kIHRodXMgeW91J3JlCitlbmNvdXJhZ2VkIHRvIHN3aXRjaCB0byBTTk1QdjMpLCBidXQgbWF5IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMgdGhhdAorcmVseSBvbiB0aGUgb2xkIGJlaGF2aW91ci4gIChUaG91Z2ggc3VjaCBzY3JpcHRzIHdpbGwgcHJvYmFibHkgbmVlZCB0bworYmUgY2hhbmdlZCB0byB1c2UgdGhlICctYycgY29tbXVuaXR5IGZsYWcgYW55d2F5LCBhcyB0aGUgU05NUHYxCitjb21tYW5kIGxpbmUgdXNhZ2UgaGFzIGNoYW5nZWQgYXMgd2VsbC4pLgorICAgQXQgdGhpcyBwcm9tcHQgeW91IGNhbiBzZWxlY3QgXCIxXCIsIFwiMlwiIChmb3IgU05NUHYyYyksIG9yIFwiM1wiIGFzCit0aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgY29tbWFuZCB0b29scyAoc25tcGdldCwgLi4uKSB0byB1c2UuICBUaGlzCitjYW4gYWx3YXlzIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgLXYgZmxhZyB0byB0aGUgdG9vbHMsIG9yCitieSB1c2luZyB0aGUgXCJkZWZWZXJzaW9uXCIgdG9rZW4gaW4geW91ciBzbm1wLmNvbmYgZmlsZS4KKyAgIFByb3ZpZGluZyB0aGUgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPVwieFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlICgzKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCY3CitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIjMiICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSIzIgorZmkKK2V2YWwgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iMyIKK2V2YWwgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj1cIiR0bXBpbnB1dFwiCitmaQorCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049XCRORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OCitlY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID4mNQorJGFzX2VjaG8gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAibm9uZSI7IHRoZW4KKyAgaWYgdGVzdCAieHVucXVvdGVkIiA9ICJ4cXVvdGVkIiAtbyAieHVucXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iCiBfQUNFT0YKIAotZmkKLQotIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KLWlmIHRlc3QgIngkd2l0aF9rbWVtX3VzYWdlIiA9ICJ4bm8iOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfTk9fS01FTV9VU0FHRSAxCisgIGVsc2UKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04gJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04KIF9BQ0VPRgogCisgIGZpCiBmaQogCi0jIERlZmluZSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHN1cHByZXNzZWQgKGkuZS4sIG9wdGlvbiBkZWZhdWx0cyB0byBmYWxzZSkuCi1pZiB0ZXN0ICJ4JHdpdGhfZHVtbXlfdmFsdWVzIiAhPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMgMQorCisjIHdlIHRlc3RlZCB0aGlzIGFib3ZlIGJlZm9yZSB0aGUgcHJvbXB0LCBidXQgdGhlIHByb21wdCBtYXkgZ2l2ZSBhIG5ldyB2YWx1ZS4KK2Nhc2UgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTn0iIGluCisgIFsxMjNdKSA7OworICAyYykgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTj0yIDs7CisgICopCisgICAgYXNfZm5fZXJyb3IgJD8gIklsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLiIgIiRMSU5FTk8iIDUKKyAgICA7OworZXNhYworCisKK01TR19DSEVDSz0iU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb24iCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAiID4mNjsgfQoraWYgJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgZWNobyAiIiA+JjYKKworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorZWNobyAkRUNIT19OICIKKworKioqIFN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uOgorCisJRGVzY3JpYmVzIHdobyBzaG91bGQgYmUgY29udGFjdGVkIGFib3V0IHRoZSBob3N0IHRoZSBhZ2VudCBpcworcnVubmluZyBvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIFRoaXMKK2NhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZSBcInN5c2NvbnRhY3RcIiBzeW50YXggaW4gdGhlIGFnZW50J3MKK2NvbmZpZ3VyYXRpb24gZmlsZXMuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1jb250YWN0PVwiY29udGFjdFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb24gKCRNRUAkTE9DKTogJEVDSE9fQyIKK3JlYWQgdG1waW5wdXQgPCY3CitpZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiRNRUAkTE9DIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iJE1FQCRMT0MiCitmaQorZXZhbCBORVRTTk1QX1NZU19DT05UQUNUPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSIkTUVAJExPQyIKK2V2YWwgTkVUU05NUF9TWVNfQ09OVEFDVD1cIiR0bXBpbnB1dFwiCitmaQorCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1Q9XCRORVRTTk1QX1NZU19DT05UQUNUCitlY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2CisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID4mNQorJGFzX2VjaG8gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA+JjY7IH0KK2lmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiAhPSAibm9uZSI7IHRoZW4KKyAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1NZU19DT05UQUNUICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIKIF9BQ0VPRgogCi1maQotCi0jIE9ubHkgZGVmaW5lIGlmIHNwZWNpZmljYWxseSBjaG9zZW4gYXMgLS13aXRob3V0IChpLmUuLCBkZWZhdWx0IHRvIHRydWUpLgotaWYgdGVzdCAieCR3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzIiAhPSAieG5vIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMgMQorICBlbHNlCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1NZU19DT05UQUNUICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUCiBfQUNFT0YKIAorICBmaQogZmkKIAogCi0jIG92ZXJmbG93IHByb2JsZW1zIHdpdGggaHB1eCdzIHNoCi0jIHRha2VuIGZyb20gUGVybCdzIENvbmZpZ3VyZSBzY3JpcHQKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIEkgbmVlZCB0byBmZWVkIG15c2VsZiB0byBrc2giID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBJIG5lZWQgdG8gZmVlZCBteXNlbGYgdG8ga3NoLi4uICRFQ0hPX0MiID4mNgorTVNHX0NIRUNLPSJTeXN0ZW0gTG9jYXRpb24iCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgJE1TR19DSEVDSy4uLiAiID4mNjsgfQoraWYgJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBlY2hvICIiID4mNgorCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIgorCisqKiogU3lzdGVtIExvY2F0aW9uOgorCisJRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLiAgVGhpcyBpbmZvcm1hdGlvbiBpcworYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIHRoaXMgY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlCitcInN5c2xvY2F0aW9uXCIgc3ludGF4IGluIHRoZSBhZ2VudCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1sb2NhdGlvbj1cImxvY2F0aW9uXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCit3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitTeXN0ZW0gTG9jYXRpb24gKFVua25vd24pOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JjcKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiVW5rbm93biIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IlVua25vd24iCitmaQorZXZhbCBORVRTTk1QX1NZU19MT0M9XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IlVua25vd24iCitldmFsIE5FVFNOTVBfU1lTX0xPQz1cIiR0bXBpbnB1dFwiCitmaQorCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQz1cJE5FVFNOTVBfU1lTX0xPQworZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID4mNQorJGFzX2VjaG8gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgIT0gIm5vbmUiOyB0aGVuCisgIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9TWVNfTE9DICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIgorX0FDRU9GCisKKyAgZWxzZQorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9TWVNfTE9DICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MKK19BQ0VPRgorCisgIGZpCitmaQorCisKK2lmIHRlc3QgLWQgL3Zhci9sb2c7IHRoZW4KKyAgZGVmYXVsdGxvZz0iL3Zhci9sb2cvc25tcGQubG9nIgorZWxzZQorICBkZWZhdWx0bG9nPSIvdXNyL2FkbS9zbm1wZC5sb2ciCitmaQorCisKK01TR19DSEVDSz0iTG9jYXRpb24gdG8gd3JpdGUgbG9nZmlsZSIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGVjaG8gIiIgPiY2CisKK2lmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KK2VjaG8gJEVDSE9fTiAiCisKKyoqKiBMb2dmaWxlIGxvY2F0aW9uOgorCisJRW50ZXIgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBzbm1wZCBhZ2VudCB0byBkdW1wCitpbmZvcm1hdGlvbiAmIGVycm9ycyB0by4gIElmIG5vdCBkZWZpbmVkIChlbnRlciB0aGUga2V5d29yZCBcIm5vbmVcIgorYXQgdGhlIHByb21wdCBiZWxvdykgdGhlIGFnZW50IHdpbGwgdXNlIHN0ZG91dCBhbmQgc3RkZXJyIGluc3RlYWQuCisoTm90ZTogVGhpcyB2YWx1ZSBjYW4gYmUgb3Zlci1yaWRkZW4gdXNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuKQorICBQcm92aWRpbmcgdGhlIC0td2l0aC1sb2dmaWxlPVwicGF0aFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworTG9jYXRpb24gdG8gd3JpdGUgbG9nZmlsZSAoJGRlZmF1bHRsb2cpOiAkRUNIT19DIgorcmVhZCB0bXBpbnB1dCA8JjcKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJGRlZmF1bHRsb2ciICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSIkZGVmYXVsdGxvZyIKK2ZpCitldmFsIE5FVFNOTVBfTE9HRklMRT1cIiR0bXBpbnB1dFwiCitlbHNlCit0bXBpbnB1dD0iJGRlZmF1bHRsb2ciCitldmFsIE5FVFNOTVBfTE9HRklMRT1cIiR0bXBpbnB1dFwiCitmaQorCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRT1cJE5FVFNOTVBfTE9HRklMRQorZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID4mNQorJGFzX2VjaG8gIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID4mNjsgfQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgIT0gIm5vbmUiOyB0aGVuCisgIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9MT0dGSUxFICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIgorX0FDRU9GCisKKyAgZWxzZQorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9MT0dGSUxFICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUKK19BQ0VPRgorCisgIGZpCitmaQorCisKK2lmIHRlc3QgLWQgL3ZhcjsgdGhlbgorICBkZWZhdWx0c3RvcmU9Ii92YXIvbmV0LXNubXAiCisgIHVjZGRlZmF1bHRzdG9yZT0iL3Zhci91Y2Qtc25tcCIKK2Vsc2UKKyAgZGVmYXVsdHN0b3JlPSIvZXRjL25ldC1zbm1wIgorICB1Y2RkZWZhdWx0c3RvcmU9Ii9ldGMvdWNkLXNubXAiCitmaQorCisKK01TR19DSEVDSz0iTG9jYXRpb24gdG8gd3JpdGUgcGVyc2lzdGVudCBpbmZvcm1hdGlvbiIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBlY2hvICIiID4mNgorCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIgorCisqKiogc25tcGQgcGVyc2lzdGVudCBzdG9yYWdlIGxvY2F0aW9uOgorCisJRW50ZXIgYSBkaXJlY3RvcnkgZm9yIHRoZSBTTk1QIGxpYnJhcnkgdG8gc3RvcmUgcGVyc2lzdGVudAorZGF0YSBpbiB0aGUgZm9ybSBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgZGVmYXVsdCBsb2NhdGlvbiBpcworZGlmZmVyZW50IHRoYW4gdGhlIG9sZCBkZWZhdWx0IGxvY2F0aW9uICh3aGljaCB3YXMgZm9yIHVjZC1zbm1wKS4gIElmCit5b3Ugc3RheSB3aXRoIHRoZSBuZXcgcGF0aCwgSSdsbCBhc2sgeW91IGluIGEgc2Vjb25kIGlmIHlvdSB3aXNoIHRvCitjb3B5IHlvdXIgZmlsZXMgb3ZlciB0byB0aGUgbmV3IGxvY2F0aW9uIChvbmNlIG9ubHkpLiAgSWYgeW91IHBpY2sKK3NvbWUgb3RoZXIgcGF0aCB0aGFuIHRoZSBkZWZhdWx0LCB5b3UnbGwgaGF2ZSB0byBjb3B5IHRoZW0geW91cnNlbGYuCitUaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggcGlja2luZyB0aGUgb2xkIHBhdGggKCR1Y2RkZWZhdWx0c3RvcmUpIGlmCit5b3UnZCByYXRoZXIuCisgIFByb3ZpZGluZyB0aGUgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PVwicGF0aFwiIHBhcmFtZXRlciB0bworLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworTG9jYXRpb24gdG8gd3JpdGUgcGVyc2lzdGVudCBpbmZvcm1hdGlvbiAoJGRlZmF1bHRzdG9yZSk6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmNworaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkZGVmYXVsdHN0b3JlIiAhPSAiIjsgdGhlbgorICB0bXBpbnB1dD0iJGRlZmF1bHRzdG9yZSIKK2ZpCitldmFsIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9XCIkdG1waW5wdXRcIgorZWxzZQordG1waW5wdXQ9IiRkZWZhdWx0c3RvcmUiCitldmFsIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9XCIkdG1waW5wdXRcIgorZmkKKworZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPVwkTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQorZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIgPiY2OyB9CitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIgIT0gIm5vbmUiOyB0aGVuCisgIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiCitfQUNFT0YKKworICBlbHNlCisgICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCitfQUNFT0YKKworICBmaQorZmkKKworCitQRVJTSVNURU5UX0RJUkVDVE9SWT0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQorCitVQ0RQRVJTSVNURU5UX0RJUkVDVE9SWT0kdWNkZGVmYXVsdHN0b3JlCisKKworaWYgdGVzdCAkUEVSU0lTVEVOVF9ESVJFQ1RPUlkgPSAiJGRlZmF1bHRzdG9yZSIgLWEgLWQgIiR1Y2RkZWZhdWx0c3RvcmUiIC1hICEgLWQgIiRkZWZhdWx0c3RvcmUiIDsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBJZiB3ZSBzaG91bGQgY29weSB0aGUgb2xkIHBlcnNpc3RlbnQgZGlyZWN0b3J5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIElmIHdlIHNob3VsZCBjb3B5IHRoZSBvbGQgcGVyc2lzdGVudCBkaXJlY3RvcnkuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKworCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIgorCisqKiogQ29weWluZyBvbGQgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcyB0byBuZXQtc25tcCBwZXJzaXN0ZW50IGRpcmVjdG9yeToKKworCVdvdWxkIHlvdSBsaWtlIHRvIGNvcHkgdGhlIG9sZGVyIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMKK2ludG8geW91ciBuZXcgbmV0LXNubXAgcGVyc2lzdGVudCBmaWxlIHBhdGg/ICBUaGlzIHdpbGwgZnVuY3Rpb25hbGx5CitzYXZlIGFsbCB5b3VyIHVjZC1zbm1wIGRhdGEgYW5kIGxldCBpdCBiZSB1c2VkIHdpdGhpbiB0aGUgbmV0LXNubXAKK3Rvb2xzLiAgVGhpcyB3aWxsIG9ubHkgYmUgZG9uZSBvbmNlIHdoZW4geW91IHJ1biBtYWtlIGluc3RhbGwuICBJZiB5b3UKK3dpc2ggdG8gZG8gdGhpcywgZW50ZXIgInllcyIgYXQgdGhlIHByb21wdC4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPVwibm9cIiAob3IgXCJ5ZXNcIikKK3BhcmFtZXRlcnMgdG8gLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworQ29weSB1Y2Qtc25tcCBkYXRhIGludG8gdGhlIG5ldC1zbm1wIGRhdGEgZGlyZWN0b3J5ICgieWVzIik6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmNworaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIieWVzIiIgIT0gIiI7IHRoZW4KKyAgdG1waW5wdXQ9IiJ5ZXMiIgorZmkKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSIieWVzIiIKK2V2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPVwiJHRtcGlucHV0XCIKK2ZpCisKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIiA+JjY7IH0KK2Vsc2UKK2FjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0ibm8iCitmaQorQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIgorCisKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgcHJvZ3JhbXMKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFNoZWxsIGNoZWNrczoKKyMjCisKKyMgICAgICAgQ2hlY2sgZm9yICdzaCcgb3ZlcmZsb3cgICAgICAgICAgICAgICAgICAgICAgICAgKEhQLVVYKQorIyAgICAgICAgICh0YWtlbiBmcm9tIFBlcmwncyBjb25maWd1cmUgc2NyaXB0KQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBJIG5lZWQgdG8gZmVlZCBteXNlbGYgdG8ga3NoIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIEkgbmVlZCB0byBmZWVkIG15c2VsZiB0byBrc2guLi4gIiA+JjY7IH0KIGlmIHRlc3QgLWYgL2hwLXV4IC1hIC1mIC9iaW4va3NoOyB0aGVuCiAgIGlmIChQQVRIPS47IGFsaWFzIC14KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAgIGVsc2UKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogICAgIGlmIHRlc3QgIngkMSIgPSAieCI7IHRoZW4KICAgICAgIGV4ZWMgL2Jpbi9rc2ggJDAKICAgICBlbHNlCkBAIC0zNTA3LDE1ICs1NjU3LDg2NCBAQAogICAgIGZpCiAgIGZpCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi1pZiB0ZXN0ICJ4JGRldmVsb3BlciIgIT0gInhubyIgLWEgLWYgJHNyY2Rpci9yZW1vdmUtZmlsZXM7IHRoZW4KLSAgIyB0dXJuIG9uIHRoZSBkZXZlbG9wZXIgZmxhZyB3aGVuIHRha2VuIGZyb20gYSBTVk4gY2hlY2tvdXQgKG5vdCBhIHJlbGVhc2UpCi0gIGRldmVsb3Blcj0ieWVzIgorCisjIworIyAgIFN0YW5kYXJkIGFuZCBwYXRoIHByb2dyYW0gY2hlY2tzOgorIyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZ3JlcCB0aGF0IGhhbmRsZXMgbG9uZyBsaW5lcyBhbmQgLWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLXogIiRHUkVQIjsgdGhlbgorICBhY19wYXRoX0dSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBncmVwIGdncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9HUkVQPSIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgeyB0ZXN0IC1mICIkYWNfcGF0aF9HUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9HUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfR1JFUCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICAjIENoZWNrIGZvciBHTlUgJGFjX3BhdGhfR1JFUAorY2FzZSBgIiRhY19wYXRoX0dSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfR1JFUD0iJGFjX3BhdGhfR1JFUCIgYWNfcGF0aF9HUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdHUkVQJyA+PiAiY29uZnRlc3QubmwiCisgICAgIiRhY19wYXRoX0dSRVAiIC1lICdHUkVQJCcgLWUgJy0oY2Fubm90IG1hdGNoKS0nIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9HUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiCisgICAgICBhY19wYXRoX0dSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9HUkVQX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9HUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0dSRVA9JEdSRVAKIGZpCiAKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfR1JFUCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BhdGhfR1JFUCIgPiY2OyB9CisgR1JFUD0iJGFjX2N2X3BhdGhfR1JFUCIKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBlZ3JlcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZWdyZXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9FR1JFUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGVjaG8gYSB8ICRHUkVQIC1FICcoYXxiKScgPi9kZXYvbnVsbCAyPiYxCisgICB0aGVuIGFjX2N2X3BhdGhfRUdSRVA9IiRHUkVQIC1FIgorICAgZWxzZQorICAgICBpZiB0ZXN0IC16ICIkRUdSRVAiOyB0aGVuCisgIGFjX3BhdGhfRUdSRVBfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSCRQQVRIX1NFUEFSQVRPUi91c3IveHBnNC9iaW4KK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfcHJvZyBpbiBlZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfRUdSRVA9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX0VHUkVQIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9FR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0VHUkVQIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9FR1JFUAorY2FzZSBgIiRhY19wYXRoX0VHUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0VHUkVQPSIkYWNfcGF0aF9FR1JFUCIgYWNfcGF0aF9FR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnRUdSRVAnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfRUdSRVAiICdFR1JFUCQnIDwgImNvbmZ0ZXN0Lm5sIiA+ImNvbmZ0ZXN0Lm91dCIgMj4vZGV2L251bGwgfHwgYnJlYWsKKyAgICBkaWZmICJjb25mdGVzdC5vdXQiICJjb25mdGVzdC5ubCIgPi9kZXYvbnVsbCAyPiYxIHx8IGJyZWFrCisgICAgYXNfZm5fYXJpdGggJGFjX2NvdW50ICsgMSAmJiBhY19jb3VudD0kYXNfdmFsCisgICAgaWYgdGVzdCAkYWNfY291bnQgLWd0ICR7YWNfcGF0aF9FR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9FR1JFUD0iJGFjX3BhdGhfRUdSRVAiCisgICAgICBhY19wYXRoX0VHUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfRUdSRVBfZm91bmQgJiYgYnJlYWsgMworICAgIGRvbmUKKyAgZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisgIGlmIHRlc3QgLXogIiRhY19jdl9wYXRoX0VHUkVQIjsgdGhlbgorICAgIGFzX2ZuX2Vycm9yICQ/ICJubyBhY2NlcHRhYmxlIGVncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9FR1JFUD0kRUdSRVAKK2ZpCisKKyAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0VHUkVQIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcGF0aF9FR1JFUCIgPiY2OyB9CisgRUdSRVA9IiRhY19jdl9wYXRoX0VHUkVQIgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGdyZXAgdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMgYW5kIC1lIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBncmVwIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzIGFuZCAtZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0dSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC16ICIkR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9HUkVQX2ZvdW5kPWZhbHNlCisgICMgTG9vcCB0aHJvdWdoIHRoZSB1c2VyJ3MgcGF0aCBhbmQgdGVzdCBmb3IgZWFjaCBvZiBQUk9HTkFNRS1MSVNUCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluCitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX3Byb2cgaW4gZ3JlcCBnZ3JlcDsgZG8KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgICAgIGFjX3BhdGhfR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfR1JFUCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfR1JFUCI7IH0gfHwgY29udGludWUKKyMgQ2hlY2sgZm9yIEdOVSBhY19wYXRoX0dSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0dSRVAKK2Nhc2UgYCIkYWNfcGF0aF9HUkVQIiAtLXZlcnNpb24gMj4mMWAgaW4KKypHTlUqKQorICBhY19jdl9wYXRoX0dSRVA9IiRhY19wYXRoX0dSRVAiIGFjX3BhdGhfR1JFUF9mb3VuZD06OzsKKyopCisgIGFjX2NvdW50PTAKKyAgJGFzX2VjaG9fbiAwMTIzNDU2Nzg5ID4iY29uZnRlc3QuaW4iCisgIHdoaWxlIDoKKyAgZG8KKyAgICBjYXQgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QuaW4iID4iY29uZnRlc3QudG1wIgorICAgIG12ICJjb25mdGVzdC50bXAiICJjb25mdGVzdC5pbiIKKyAgICBjcCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5ubCIKKyAgICAkYXNfZWNobyAnR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9HUkVQIiAtZSAnR1JFUCQnIC1lICctKGNhbm5vdCBtYXRjaCktJyA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfR1JFUF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9HUkVQPSIkYWNfcGF0aF9HUkVQIgorICAgICAgYWNfcGF0aF9HUkVQX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfR1JFUCI7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAibm8gYWNjZXB0YWJsZSBncmVwIGNvdWxkIGJlIGZvdW5kIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbiIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9HUkVQPSRHUkVQCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wYXRoX0dSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0dSRVAiID4mNjsgfQorIEdSRVA9IiRhY19jdl9wYXRoX0dSRVAiCisKKworYWNfYXV4X2Rpcj0KK2ZvciBhY19kaXIgaW4gIiRzcmNkaXIiICIkc3JjZGlyLy4uIiAiJHNyY2Rpci8uLi8uLiI7IGRvCisgIGlmIHRlc3QgLWYgIiRhY19kaXIvaW5zdGFsbC1zaCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgorICAgIGJyZWFrCisgIGVsaWYgdGVzdCAtZiAiJGFjX2Rpci9pbnN0YWxsLnNoIjsgdGhlbgorICAgIGFjX2F1eF9kaXI9JGFjX2RpcgorICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL2luc3RhbGwuc2ggLWMiCisgICAgYnJlYWsKKyAgZWxpZiB0ZXN0IC1mICIkYWNfZGlyL3NodG9vbCI7IHRoZW4KKyAgICBhY19hdXhfZGlyPSRhY19kaXIKKyAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9zaHRvb2wgaW5zdGFsbCAtYyIKKyAgICBicmVhaworICBmaQorZG9uZQoraWYgdGVzdCAteiAiJGFjX2F1eF9kaXIiOyB0aGVuCisgIGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgZmluZCBpbnN0YWxsLXNoLCBpbnN0YWxsLnNoLCBvciBzaHRvb2wgaW4gXCIkc3JjZGlyXCIgXCIkc3JjZGlyLy4uXCIgXCIkc3JjZGlyLy4uLy4uXCIiICIkTElORU5PIiA1CitmaQorCisjIFRoZXNlIHRocmVlIHZhcmlhYmxlcyBhcmUgdW5kb2N1bWVudGVkIGFuZCB1bnN1cHBvcnRlZCwKKyMgYW5kIGFyZSBpbnRlbmRlZCB0byBiZSB3aXRoZHJhd24gaW4gYSBmdXR1cmUgQXV0b2NvbmYgcmVsZWFzZS4KKyMgVGhleSBjYW4gY2F1c2Ugc2VyaW91cyBwcm9ibGVtcyBpZiBhIGJ1aWxkZXIncyBzb3VyY2UgdHJlZSBpcyBpbiBhIGRpcmVjdG9yeQorIyB3aG9zZSBmdWxsIG5hbWUgY29udGFpbnMgdW51c3VhbCBjaGFyYWN0ZXJzLgorYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIiAgIyBQbGVhc2UgZG9uJ3QgdXNlIHRoaXMgdmFyLgorYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCithY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICAjIFBsZWFzZSBkb24ndCB1c2UgdGhpcyB2YXIuCisKKworIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCisjIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKKyMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgorIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKKyMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAorIyBJUklYIC9zYmluL2luc3RhbGwKKyMgQUlYIC9iaW4vaW5zdGFsbAorIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCisjIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZworIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCisjIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCisjIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKKyMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgorIyBSZWplY3QgaW5zdGFsbCBwcm9ncmFtcyB0aGF0IGNhbm5vdCBpbnN0YWxsIG11bHRpcGxlIGZpbGVzLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLXogIiRJTlNUQUxMIjsgdGhlbgoraWYgJHthY19jdl9wYXRoX2luc3RhbGwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgIyBBY2NvdW50IGZvciBwZW9wbGUgd2hvIHB1dCB0cmFpbGluZyBzbGFzaGVzIGluIFBBVEggZWxlbWVudHMuCitjYXNlICRhc19kaXIvIGluICMoKAorICAuLyB8IC4vLyB8IC9bY0NdLyogfCBcCisgIC9ldGMvKiB8IC91c3Ivc2Jpbi8qIHwgL3Vzci9ldGMvKiB8IC9zYmluLyogfCAvdXNyL2Fmc3dzL2Jpbi8qIHwgXAorICA/OltcXC9db3MyW1xcL11pbnN0YWxsW1xcL10qIHwgPzpbXFwvXU9TMltcXC9dSU5TVEFMTFtcXC9dKiB8IFwKKyAgL3Vzci91Y2IvKiApIDs7CisgICopCisgICAgIyBPU0YxIGFuZCBTQ08gT0RUIDMuMCBoYXZlIHRoZWlyIG93biBuYW1lcyBmb3IgaW5zdGFsbC4KKyAgICAjIERvbid0IHVzZSBpbnN0YWxsYnNkIGZyb20gT1NGIHNpbmNlIGl0IGluc3RhbGxzIHN0dWZmIGFzIHJvb3QKKyAgICAjIGJ5IGRlZmF1bHQuCisgICAgZm9yIGFjX3Byb2cgaW4gZ2luc3RhbGwgc2NvaW5zdCBpbnN0YWxsOyBkbworICAgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisJaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorCSAgaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBkc3Btc2cgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIEFJWCBpbnN0YWxsLiAgSXQgaGFzIGFuIGluY29tcGF0aWJsZSBjYWxsaW5nIGNvbnZlbnRpb24uCisJICAgIDoKKwkgIGVsaWYgdGVzdCAkYWNfcHJvZyA9IGluc3RhbGwgJiYKKwkgICAgZ3JlcCBwd3BsdXMgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiID4vZGV2L251bGwgMj4mMTsgdGhlbgorCSAgICAjIHByb2dyYW0tc3BlY2lmaWMgaW5zdGFsbCBzY3JpcHQgdXNlZCBieSBIUCBwd3BsdXMtLWRvbid0IHVzZS4KKwkgICAgOgorCSAgZWxzZQorCSAgICBybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKwkgICAgZWNobyBvbmUgPiBjb25mdGVzdC5vbmUKKwkgICAgZWNobyB0d28gPiBjb25mdGVzdC50d28KKwkgICAgbWtkaXIgY29uZnRlc3QuZGlyCisJICAgIGlmICIkYXNfZGlyLyRhY19wcm9nJGFjX2V4ZWNfZXh0IiAtYyBjb25mdGVzdC5vbmUgY29uZnRlc3QudHdvICJgcHdkYC9jb25mdGVzdC5kaXIiICYmCisJICAgICAgdGVzdCAtcyBjb25mdGVzdC5vbmUgJiYgdGVzdCAtcyBjb25mdGVzdC50d28gJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC5vbmUgJiYKKwkgICAgICB0ZXN0IC1zIGNvbmZ0ZXN0LmRpci9jb25mdGVzdC50d28KKwkgICAgdGhlbgorCSAgICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKKwkgICAgICBicmVhayAzCisJICAgIGZpCisJICBmaQorCWZpCisgICAgICBkb25lCisgICAgZG9uZQorICAgIDs7Citlc2FjCisKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitybSAtcmYgY29uZnRlc3Qub25lIGNvbmZ0ZXN0LnR3byBjb25mdGVzdC5kaXIKKworZmkKKyAgaWYgdGVzdCAiJHthY19jdl9wYXRoX2luc3RhbGwrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgICBJTlNUQUxMPSRhY19jdl9wYXRoX2luc3RhbGwKKyAgZWxzZQorICAgICMgQXMgYSBsYXN0IHJlc29ydCwgdXNlIHRoZSBzbG93IHNoZWxsIHNjcmlwdC4gIERvbid0IGNhY2hlIGEKKyAgICAjIHZhbHVlIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCisgICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKKyAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSB2YWx1ZSBpcyBhIHJlbGF0aXZlIG5hbWUuCisgICAgSU5TVEFMTD0kYWNfaW5zdGFsbF9zaAorICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkSU5TVEFMTCIgPiY1CiskYXNfZWNobyAiJElOU1RBTEwiID4mNjsgfQorCisjIFVzZSB0ZXN0IC16IGJlY2F1c2UgU3VuT1M0IHNoIG1pc2hhbmRsZXMgYnJhY2VzIGluICR7dmFyLXZhbH0uCisjIEl0IHRoaW5rcyB0aGUgZmlyc3QgY2xvc2UgYnJhY2UgZW5kcyB0aGUgdmFyaWFibGUgc3Vic3RpdHV0aW9uLgordGVzdCAteiAiJElOU1RBTExfUFJPR1JBTSIgJiYgSU5TVEFMTF9QUk9HUkFNPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9TQ1JJUFQiICYmIElOU1RBTExfU0NSSVBUPScke0lOU1RBTEx9JworCit0ZXN0IC16ICIkSU5TVEFMTF9EQVRBIiAmJiBJTlNUQUxMX0RBVEE9JyR7SU5TVEFMTH0gLW0gNjQ0JworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAiID4mNjsgfQorTE5fUz0kYXNfbG5fcworaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8sIHVzaW5nICRMTl9TIiA+JjUKKyRhc19lY2hvICJubywgdXNpbmcgJExOX1MiID4mNjsgfQorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkuLi4gIiA+JjY7IH0KK3NldCB4ICR7TUFLRS1tYWtlfQorYWNfbWFrZT1gJGFzX2VjaG8gIiQyIiB8IHNlZCAncy8rL3AvZzsgcy9bXmEtekEtWjAtOV9dL18vZydgCitpZiBldmFsIFwke2FjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCA+Y29uZnRlc3QubWFrZSA8PFxfQUNFT0YKK1NIRUxMID0gL2Jpbi9zaAorYWxsOgorCUBlY2hvICdAQEAlJSU9JChNQUtFKT1AQEAlJSUnCitfQUNFT0YKKyMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcgLi4uIiwgd2hpY2ggd291bGQgY29uZnVzZSB1cy4KK2Nhc2UgYCR7TUFLRS1tYWtlfSAtZiBjb25mdGVzdC5tYWtlIDI+L2Rldi9udWxsYCBpbgorICAqQEBAJSUlPT8qPUBAQCUlJSopCisgICAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9eWVzOzsKKyAgKikKKyAgICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD1ubzs7Citlc2FjCitybSAtZiBjb25mdGVzdC5tYWtlCitmaQoraWYgZXZhbCB0ZXN0IFwkYWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0ID0geWVzOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisgIFNFVF9NQUtFPQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgU0VUX01BS0U9Ik1BS0U9JHtNQUtFLW1ha2V9IgorZmkKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorICAgICBkb25lCisgICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKyAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9TRUQ9IiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiCisgICAgICB7IHRlc3QgLWYgIiRhY19wYXRoX1NFRCIgJiYgJGFzX3Rlc3RfeCAiJGFjX3BhdGhfU0VEIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfU0VEIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCisgICMgQ2hlY2sgZm9yIEdOVSAkYWNfcGF0aF9TRUQKK2Nhc2UgYCIkYWNfcGF0aF9TRUQiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfU0VEPSIkYWNfcGF0aF9TRUQiIGFjX3BhdGhfU0VEX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICcnID4+ICJjb25mdGVzdC5ubCIKKyAgICAiJGFjX3BhdGhfU0VEIiAtZiBjb25mdGVzdC5zZWQgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX1NFRF9tYXgtMH07IHRoZW4KKyAgICAgICMgQmVzdCBvbmUgc28gZmFyLCBzYXZlIGl0IGJ1dCBrZWVwIGxvb2tpbmcgZm9yIGEgYmV0dGVyIG9uZQorICAgICAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIKKyAgICAgIGFjX3BhdGhfU0VEX21heD0kYWNfY291bnQKKyAgICBmaQorICAgICMgMTAqKDJeMTApIGNoYXJzIGFzIGlucHV0IHNlZW1zIG1vcmUgdGhhbiBlbm91Z2gKKyAgICB0ZXN0ICRhY19jb3VudCAtZ3QgMTAgJiYgYnJlYWsKKyAgZG9uZQorICBybSAtZiBjb25mdGVzdC5pbiBjb25mdGVzdC50bXAgY29uZnRlc3QubmwgY29uZnRlc3Qub3V0OzsKK2VzYWMKKworICAgICAgJGFjX3BhdGhfU0VEX2ZvdW5kICYmIGJyZWFrIDMKKyAgICBkb25lCisgIGRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAorZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAorCisKK2ZvciBhY19wcm9nIGluIGZpbGUKK2RvCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19GSUxFKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEZJTEUiOyB0aGVuCisgIGFjX2N2X3Byb2dfRklMRT0iJEZJTEUiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19GSUxFPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitGSUxFPSRhY19jdl9wcm9nX0ZJTEUKK2lmIHRlc3QgLW4gIiRGSUxFIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJEZJTEUiID4mNQorJGFzX2VjaG8gIiRGSUxFIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEZJTEUiICYmIGJyZWFrCitkb25lCisKK2lmIHRlc3QgeCRhY19jdl9wcm9nX0ZJTEUgPSB4OyB0aGVuCisgICMgVGhlIGZpbGUgcHJvZ3JhbSBpcyBub3QgaW5jbHVkZWQgaW4gdGhlIGRlZmF1bHQgQ3lnd2luIHNldHVwLCBhbHRob3VnaAorICAjIHRoaXMgcHJvZ3JhbSBpcyBlc3NlbnRpYWwgZm9yIGxpYnRvb2wgdG8gd29yayBwcm9wZXJseS4gSXQgaXMgbm9udHJpdmlhbAorICAjIHRvIGRlZHVjZSBmcm9tIHRoZSBtZXNzYWdlIHByaW50ZWQgYnkgbGlidG9vbCB0aGF0IHRoZSAnZmlsZScgdG9vbCBpcworICAjIG1pc3NpbmcgYW5kIGxpYnRvb2wgZG9lcyBub3QgYWJvcnQgd2hlbiB0aGUgZmlsZSBwcm9ncmFtIGlzIG5vdCBmb3VuZC4gU28KKyAgIyBzdG9wIG5vdyBpZiB0aGUgZmlsZSBwcm9ncmFtIGhhcyBub3QgYmVlbiBmb3VuZC4KKyAgYXNfZm5fZXJyb3IgMSAiZmlsZSBwcm9ncmFtIG5vdCBmb3VuZCBhbHRob3VnaCBpdCBpcyBuZWVkZWQgYnkgbGlidG9vbC4iICIkTElORU5PIiA1CitmaQorCitmb3IgYWNfcHJvZyBpbiBmaW5kCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfRklORCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRGSU5EIjsgdGhlbgorICBhY19jdl9wcm9nX0ZJTkQ9IiRGSU5EIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRklORD0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRklORD0kYWNfY3ZfcHJvZ19GSU5ECitpZiB0ZXN0IC1uICIkRklORCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRGSU5EIiA+JjUKKyRhc19lY2hvICIkRklORCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRGSU5EIiAmJiBicmVhaworZG9uZQorCitmb3IgYWNfcHJvZyBpbiB3aG9hbWkgbG9nbmFtZQorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX1dIT0FNSSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRXSE9BTUkiOyB0aGVuCisgIGFjX2N2X3Byb2dfV0hPQU1JPSIkV0hPQU1JIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfV0hPQU1JPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitXSE9BTUk9JGFjX2N2X3Byb2dfV0hPQU1JCitpZiB0ZXN0IC1uICIkV0hPQU1JIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFdIT0FNSSIgPiY1CiskYXNfZWNobyAiJFdIT0FNSSIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisgIHRlc3QgLW4gIiRXSE9BTUkiICYmIGJyZWFrCitkb25lCit0ZXN0IC1uICIkV0hPQU1JIiB8fCBXSE9BTUk9Indob2FtaSIKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImF1dG9jb25mIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBhdXRvY29uZjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfQVVUT0NPTkYrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRBVVRPQ09ORiBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9BVVRPQ09ORj0iJEFVVE9DT05GIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9BVVRPQ09ORj0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0FVVE9DT05GPSRhY19jdl9wYXRoX0FVVE9DT05GCitpZiB0ZXN0IC1uICIkQVVUT0NPTkYiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVVUT0NPTkYiID4mNQorJGFzX2VjaG8gIiRBVVRPQ09ORiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImF1dG9oZWFkZXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGF1dG9oZWFkZXI7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0FVVE9IRUFERVIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRBVVRPSEVBREVSIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX0FVVE9IRUFERVI9IiRBVVRPSEVBREVSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9BVVRPSEVBREVSPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorQVVUT0hFQURFUj0kYWNfY3ZfcGF0aF9BVVRPSEVBREVSCitpZiB0ZXN0IC1uICIkQVVUT0hFQURFUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBVVRPSEVBREVSIiA+JjUKKyRhc19lY2hvICIkQVVUT0hFQURFUiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBlcmwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHBlcmw7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BFUkxQUk9HKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkUEVSTFBST0cgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfUEVSTFBST0c9IiRQRVJMUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfUEVSTFBST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitQRVJMUFJPRz0kYWNfY3ZfcGF0aF9QRVJMUFJPRworaWYgdGVzdCAtbiAiJFBFUkxQUk9HIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBFUkxQUk9HIiA+JjUKKyRhc19lY2hvICIkUEVSTFBST0ciID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgcHM7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BTUFJPRys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJFBTUFJPRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9QU1BST0c9IiRQU1BST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX1BTUFJPRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK1BTUFJPRz0kYWNfY3ZfcGF0aF9QU1BST0cKK2lmIHRlc3QgLW4gIiRQU1BST0ciOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkUFNQUk9HIiA+JjUKKyRhc19lY2hvICIkUFNQUk9HIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicHl0aG9uIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBweXRob247IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX1BZVEhPTlBST0crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRQWVRIT05QUk9HIGluCisgIFtcXC9dKiB8ID86W1xcL10qKQorICBhY19jdl9wYXRoX1BZVEhPTlBST0c9IiRQWVRIT05QUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9QWVRIT05QUk9HPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCisgIDs7Citlc2FjCitmaQorUFlUSE9OUFJPRz0kYWNfY3ZfcGF0aF9QWVRIT05QUk9HCitpZiB0ZXN0IC1uICIkUFlUSE9OUFJPRyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQWVRIT05QUk9HIiA+JjUKKyRhc19lY2hvICIkUFlUSE9OUFJPRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAidW5hbWUiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHVuYW1lOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9VTkFNRVBST0crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRVTkFNRVBST0cgaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfVU5BTUVQUk9HPSIkVU5BTUVQUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9VTkFNRVBST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitVTkFNRVBST0c9JGFjX2N2X3BhdGhfVU5BTUVQUk9HCitpZiB0ZXN0IC1uICIkVU5BTUVQUk9HIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFVOQU1FUFJPRyIgPiY1CiskYXNfZWNobyAiJFVOQU1FUFJPRyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgVU5BTUVQUk9HICIkVU5BTUVQUk9HIgorX0FDRU9GCisKKworaWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9DT05GIiA9ICJ4IjsgdGhlbgorCUFVVE9DT05GPSI6IgorCitmaQoraWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9IRUFERVIiID0gIngiOyB0aGVuCisJQVVUT0hFQURFUj0iOiIKKworZmkKKworTUFLRT0ke01BS0UtIm1ha2UifQorJE1BS0UgLXYgLWYgL2Rldi9udWxsIDI+L2Rldi9udWxsIHwgJEdSRVAgR05VID4vZGV2L251bGwKK2hhdmVfZ251X21ha2U9JD8KKworCisjIworIyAgIFRoZSBQZXJsIGZ1bmN0aW9uIHN5c3RlbSgpIGlzIHVzZWQgZm9yIHJ1bm5pbmcgdGhlIE5ldC1TTk1QIHJlZ3Jlc3Npb24KKyMgICB0ZXN0cy4gRmluZCBvdXQgd2hldGhlciB0aGF0IGZ1bmN0aW9uIGludm9rZXMgYSBQT1NJWCBzaGVsbCwgd2hpY2ggaXMKKyMgICBuZWNlc3NhcnkgaW4gb3JkZXIgdG8gcnVuIHRoZSByZWdyZXNzaW9uIHRlc3RzLiBXaGVuIHVzaW5nIFdpbmRvd3MgKyBNU1lTCisjICAgKyBBY3RpdmVTdGF0ZSBQZXJsLCBQZXJsJ3Mgc3lzdGVtKCkgZnVuY3Rpb24gZG9lcyBpbnZva2UgV2luZG93cycgY21kLmV4ZQorIyAgIHdoaWNoIGlzIG5vdCBhIFBPU0lYIHNoZWxsLgorIyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBQZXJsIGZ1bmN0aW9uIHN5c3RlbSgpIGludm9rZXMgYSBQT1NJWCBzaGVsbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBQZXJsIGZ1bmN0aW9uIHN5c3RlbSgpIGludm9rZXMgYSBQT1NJWCBzaGVsbC4uLiAiID4mNjsgfQoraWYgdGVzdCAieCRQRVJMUFJPRyIgIT0gJ3gnICYmIHRlc3QgLXggIiRQRVJMUFJPRyIgJiYgdGVzdCAieGAkUEVSTFBST0cgLWUgJ3N5c3RlbSgnXCcnZWNobyAkT1NUWVBFJ1wnJyk7J2AiICE9ICd4JE9TVFlQRSc7IHRoZW4KKyAgICBQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMPXllcworZWxzZQorICAgIFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTEw9bm8KK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTEwiID4mNQorJGFzX2VjaG8gIiRQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMIiA+JjY7IH0KKworCisKKyMjCisjICAgQ29tcGlsYXRpb24tcmVsYXRlZCBwcm9ncmFtIGNoZWNrczoKKyMjCisKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtMzUzMCwxMCArNjUyOSwxMCBAQAogaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9Z2NjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWdjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0zNTQzLDM1ICs2NTQyLDM3IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1nY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiBmaQogaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCiAgIGFjX2N0X0NDPSRDQwogICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImdjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgZ2NjOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTM1ODEsMzkgKzY1ODIsNTAgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSJnY2MiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQogICAgIGJyZWFrIDIKICAgZmkKIGRvbmUKLWRvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUwogCiBmaQogZmkKIGFjX2N0X0NDPSRhY19jdl9wcm9nX2FjX2N0X0NDCiBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9DQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotICBDQz0kYWNfY3RfQ0MKKyAgaWYgdGVzdCAieCRhY19jdF9DQyIgPSB4OyB0aGVuCisgICAgQ0M9IiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBDQz0kYWNfY3RfQ0MKKyAgZmkKIGVsc2UKICAgQ0M9IiRhY19jdl9wcm9nX0NDIgogZmkKIAogaWYgdGVzdCAteiAiJENDIjsgdGhlbgotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCisgICAgICAgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1jYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1jYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQ0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCiAgIGFjX2N2X3Byb2dfQ0M9IiRDQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCkBAIC0zNjIzLDc3ICs2NjM1LDM3IEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcHJvZ19DQz0iJHthY190b29sX3ByZWZpeH1jYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCi1maQotaWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfQ0MiOyB0aGVuCi0gIGFjX2N0X0NDPSRDQwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImNjIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBjYzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9DQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfQ0MiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ0M9IiRhY19jdF9DQyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfQ0M9ImNjIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCisKICAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1hY19jdF9DQz0kYWNfY3ZfcHJvZ19hY19jdF9DQwotaWYgdGVzdCAtbiAiJGFjX2N0X0NDIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0NDIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBDQz0kYWNfY3RfQ0MKLWVsc2UKLSAgQ0M9IiRhY19jdl9wcm9nX0NDIgotZmkKLQogZmkKIGlmIHRlc3QgLXogIiRDQyI7IHRoZW4KICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJjYyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCiBzZXQgZHVtbXkgY2M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0NDKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJENDIjsgdGhlbgogICBhY19jdl9wcm9nX0NDPSIkQ0MiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgpAQCAtMzcwNCwxOCArNjY3NiwxOSBAQAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgogICAgIGlmIHRlc3QgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID0gIi91c3IvdWNiL2NjIjsgdGhlbgogICAgICAgIGFjX3Byb2dfcmVqZWN0ZWQ9eWVzCiAgICAgICAgY29udGludWUKICAgICAgZmkKICAgICBhY19jdl9wcm9nX0NDPSJjYyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGlmIHRlc3QgJGFjX3Byb2dfcmVqZWN0ZWQgPSB5ZXM7IHRoZW4KICAgIyBXZSBmb3VuZCBhIGJvZ29uIGluIHRoZSBwYXRoLCBzbyBtYWtlIHN1cmUgd2UgbmV2ZXIgdXNlIGl0LgpAQCAtMzczMywyNCArNjcwNiwyNSBAQAogZmkKIENDPSRhY19jdl9wcm9nX0NDCiBpZiB0ZXN0IC1uICIkQ0MiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENDIiA+JjUKKyRhc19lY2hvICIkQ0MiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCiBmaQogaWYgdGVzdCAteiAiJENDIjsgdGhlbgogICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluIGNsCisgIGZvciBhY19wcm9nIGluIGNsLmV4ZQogICBkbwogICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY190b29sX3ByZWZpeCRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19DQz0iJENDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTM3NjAsMzkgKzY3MzQsNDEgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX0NDPSIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogQ0M9JGFjX2N2X3Byb2dfQ0MKIGlmIHRlc3QgLW4gIiRDQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRDQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0MiID4mNQorJGFzX2VjaG8gIiRDQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKICAgICB0ZXN0IC1uICIkQ0MiICYmIGJyZWFrCiAgIGRvbmUKIGZpCiBpZiB0ZXN0IC16ICIkQ0MiOyB0aGVuCiAgIGFjX2N0X0NDPSRDQwotICBmb3IgYWNfcHJvZyBpbiBjbAorICBmb3IgYWNfcHJvZyBpbiBjbC5leGUKIGRvCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NDK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9DQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KICAgYWNfY3ZfcHJvZ19hY19jdF9DQz0iJGFjX2N0X0NDIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTM4MDIsNjYgKzY3NzgsNzggQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wcm9nX2FjX2N0X0NDPSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQogYWNfY3RfQ0M9JGFjX2N2X3Byb2dfYWNfY3RfQ0MKIGlmIHRlc3QgLW4gIiRhY19jdF9DQyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NDIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9DQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQ0MiID4mNQorJGFzX2VjaG8gIiRhY19jdF9DQyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKICAgdGVzdCAtbiAiJGFjX2N0X0NDIiAmJiBicmVhawogZG9uZQogCi0gIENDPSRhY19jdF9DQworICBpZiB0ZXN0ICJ4JGFjX2N0X0NDIiA9IHg7IHRoZW4KKyAgICBDQz0iIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIENDPSRhY19jdF9DQworICBmaQogZmkKIAogZmkKIAogCi10ZXN0IC16ICIkQ0MiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Cit0ZXN0IC16ICIkQ0MiICYmIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgQyBjb21waWxlciBmb3VuZCBpbiBcJFBBVEgKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiAKICMgUHJvdmlkZSBzb21lIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjb21waWxlci4KLWVjaG8gIiRhc19tZTokTElORU5POiIgXAotICAgICAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgdmVyc2lvbiIgPiY1Ci1hY19jb21waWxlcj1gc2V0IFggJGFjX2NvbXBpbGU7IGVjaG8gJDJgCi17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1KSAyPiY1CiskYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciB2ZXJzaW9uIiA+JjUKK3NldCBYICRhY19jb21waWxlCithY19jb21waWxlcj0kMgorZm9yIGFjX29wdGlvbiBpbiAtLXZlcnNpb24gLXYgLVYgLXF2ZXJzaW9uOyBkbworICB7IHsgYWNfdHJ5PSIkYWNfY29tcGlsZXIgJGFjX29wdGlvbiA+JjUiCitjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY19jb21waWxlciAkYWNfb3B0aW9uID4mNSIpIDI+Y29uZnRlc3QuZXJyCiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtdiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLVYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KKyAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICBzZWQgJzEwYVwKKy4uLiByZXN0IG9mIHN0ZGVyciBvdXRwdXQgZGVsZXRlZCAuLi4KKyAgICAgICAgIDEwcScgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjEKKyAgICBjYXQgY29uZnRlc3QuZXIxID4mNQorICBmaQorICBybSAtZiBjb25mdGVzdC5lcjEgY29uZnRlc3QuZXJyCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9Citkb25lCiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTM4NzMsMTEyICs2ODYxLDEwOCBAQAogfQogX0FDRU9GCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwotYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyBhLm91dCBhLmV4ZSBiLm91dCIKK2FjX2NsZWFuX2ZpbGVzPSIkYWNfY2xlYW5fZmlsZXMgYS5vdXQgYS5vdXQuZFNZTSBhLmV4ZSBiLm91dCIKICMgVHJ5IHRvIGNyZWF0ZSBhbiBleGVjdXRhYmxlIHdpdGhvdXQgLW8gZmlyc3QsIGRpc3JlZ2FyZCBhLm91dC4KICMgSXQgd2lsbCBoZWxwIHVzIGRpYWdub3NlIGJyb2tlbiBjb21waWxlcnMsIGFuZCBmaW5kaW5nIG91dCBhbiBpbnR1aXRpb24KICMgb2YgZXhlZXh0LgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDIGNvbXBpbGVyIGRlZmF1bHQgb3V0cHV0IGZpbGUgbmFtZS4uLiAkRUNIT19DIiA+JjYKLWFjX2xpbmtfZGVmYXVsdD1gZWNobyAiJGFjX2xpbmsiIHwgc2VkICdzLyAtbyAqY29uZnRlc3RbXiBdKi8vJ2AKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtfZGVmYXVsdFwiIikgPiY1Ci0gIChldmFsICRhY19saW5rX2RlZmF1bHQpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIyBGaW5kIHRoZSBvdXRwdXQsIHN0YXJ0aW5nIGZyb20gdGhlIG1vc3QgbGlrZWx5LiAgVGhpcyBzY2hlbWUgaXMKLSMgbm90IHJvYnVzdCB0byBqdW5rIGluIGAuJywgaGVuY2UgZ28gdG8gd2lsZGNhcmRzIChhLiopIG9ubHkgYXMgYSBsYXN0Ci0jIHJlc29ydC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICIgPiY2OyB9CithY19saW5rX2RlZmF1bHQ9YCRhc19lY2hvICIkYWNfbGluayIgfCBzZWQgJ3MvIC1vICpjb25mdGVzdFteIF0qLy8nYAogCi0jIEJlIGNhcmVmdWwgdG8gaW5pdGlhbGl6ZSB0aGlzIHZhcmlhYmxlLCBzaW5jZSBpdCB1c2VkIHRvIGJlIGNhY2hlZC4KLSMgT3RoZXJ3aXNlIGFuIG9sZCBjYWNoZSB2YWx1ZSBvZiBgbm8nIGxlZCB0byBgRVhFRVhUID0gbm8nIGluIGEgTWFrZWZpbGUuCi1hY19jdl9leGVleHQ9Ci0jIGIub3V0IGlzIGNyZWF0ZWQgYnkgaTk2MCBjb21waWxlcnMuCi1mb3IgYWNfZmlsZSBpbiBhX291dC5leGUgYS5leGUgY29uZnRlc3QuZXhlIGEub3V0IGNvbmZ0ZXN0IGEuKiBjb25mdGVzdC4qIGIub3V0CisjIFRoZSBwb3NzaWJsZSBvdXRwdXQgZmlsZXM6CithY19maWxlcz0iYS5vdXQgY29uZnRlc3QuZXhlIGNvbmZ0ZXN0IGEuZXhlIGFfb3V0LmV4ZSBiLm91dCBjb25mdGVzdC4qIgorCithY19ybWZpbGVzPQorZm9yIGFjX2ZpbGUgaW4gJGFjX2ZpbGVzCitkbworICBjYXNlICRhY19maWxlIGluCisgICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm1hcCB8ICouaW5mIHwgKi5kU1lNIHwgKi5vIHwgKi5vYmogKSA7OworICAgICogKSBhY19ybWZpbGVzPSIkYWNfcm1maWxlcyAkYWNfZmlsZSI7OworICBlc2FjCitkb25lCitybSAtZiAkYWNfcm1maWxlcworCitpZiB7IHsgYWNfdHJ5PSIkYWNfbGlua19kZWZhdWx0IgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGlua19kZWZhdWx0IikgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgorICAjIEF1dG9jb25mLTIuMTMgY291bGQgc2V0IHRoZSBhY19jdl9leGVleHQgdmFyaWFibGUgdG8gYG5vJy4KKyMgU28gaWdub3JlIGEgdmFsdWUgb2YgYG5vJywgb3RoZXJ3aXNlIHRoaXMgd291bGQgbGVhZCB0byBgRVhFRVhUID0gbm8nCisjIGluIGEgTWFrZWZpbGUuICBXZSBzaG91bGQgbm90IG92ZXJyaWRlIGFjX2N2X2V4ZWV4dCBpZiBpdCB3YXMgY2FjaGVkLAorIyBzbyB0aGF0IHRoZSB1c2VyIGNhbiBzaG9ydC1jaXJjdWl0IHRoaXMgdGVzdCBmb3IgY29tcGlsZXJzIHVua25vd24gdG8KKyMgQXV0b2NvbmYuCitmb3IgYWNfZmlsZSBpbiAkYWNfZmlsZXMgJycKIGRvCiAgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZQogICBjYXNlICRhY19maWxlIGluCi0gICAgKi4kYWNfZXh0IHwgKi54Y29mZiB8ICoudGRzIHwgKi5kIHwgKi5wZGIgfCAqLnhTWU0gfCAqLmJiIHwgKi5iYmcgfCAqLm8gfCAqLm9iaiApCi0JOzsKLSAgICBjb25mdGVzdC4kYWNfZXh0ICkKLQkjIFRoaXMgaXMgdGhlIHNvdXJjZSBmaWxlLgorICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkKIAk7OwogICAgIFthYl0ub3V0ICkKIAkjIFdlIGZvdW5kIHRoZSBkZWZhdWx0IGV4ZWN1dGFibGUsIGJ1dCBleGVleHQ9JycgaXMgbW9zdAogCSMgY2VydGFpbmx5IHJpZ2h0LgogCWJyZWFrOzsKICAgICAqLiogKQotCWFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAotCSMgRklYTUU6IEkgYmVsaWV2ZSB3ZSBleHBvcnQgYWNfY3ZfZXhlZXh0IGZvciBMaWJ0b29sLAotCSMgYnV0IGl0IHdvdWxkIGJlIGNvb2wgdG8gZmluZCBvdXQgaWYgaXQncyB0cnVlLiAgRG9lcyBhbnlib2R5Ci0JIyBtYWludGFpbiBMaWJ0b29sPyAtLWFraW0uCi0JZXhwb3J0IGFjX2N2X2V4ZWV4dAorCWlmIHRlc3QgIiR7YWNfY3ZfZXhlZXh0K3NldH0iID0gc2V0ICYmIHRlc3QgIiRhY19jdl9leGVleHQiICE9IG5vOworCXRoZW4gOjsgZWxzZQorCSAgIGFjX2N2X2V4ZWV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJ1teLl0qXChcLi4qXCknYAorCWZpCisJIyBXZSBzZXQgYWNfY3ZfZXhlZXh0IGhlcmUgYmVjYXVzZSB0aGUgbGF0ZXIgdGVzdCBmb3IgaXQgaXMgbm90CisJIyBzYWZlOiBjcm9zcyBjb21waWxlcnMgbWF5IG5vdCBhZGQgdGhlIHN1ZmZpeCBpZiBnaXZlbiBhbiBgLW8nCisJIyBhcmd1bWVudCwgc28gd2UgbWF5IG5lZWQgdG8ga25vdyBpdCBhdCB0aGF0IHBvaW50IGFscmVhZHkuCisJIyBFdmVuIGlmIHRoaXMgc2VjdGlvbiBsb29rcyBjcnVmdHk6IGl0IGhhcyB0aGUgYWR2YW50YWdlIG9mCisJIyBhY3R1YWxseSB3b3JraW5nLgogCWJyZWFrOzsKICAgICAqICkKIAlicmVhazs7CiAgIGVzYWMKIGRvbmUKK3Rlc3QgIiRhY19jdl9leGVleHQiID0gbm8gJiYgYWNfY3ZfZXhlZXh0PQorCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1CisgIGFjX2ZpbGU9JycKK2ZpCitpZiB0ZXN0IC16ICIkYWNfZmlsZSI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyRhc19lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQogc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDIGNvbXBpbGVyIGNhbm5vdCBjcmVhdGUgZXhlY3V0YWJsZXMKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEMgY29tcGlsZXIgY2Fubm90IGNyZWF0ZSBleGVjdXRhYmxlcwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDc3KTsgZXhpdCA3NzsgfTsgfQoreyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiQyBjb21waWxlciBjYW5ub3QgY3JlYXRlIGV4ZWN1dGFibGVzCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZmkKLQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgQyBjb21waWxlciBkZWZhdWx0IG91dHB1dCBmaWxlIG5hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEMgY29tcGlsZXIgZGVmYXVsdCBvdXRwdXQgZmlsZSBuYW1lLi4uICIgPiY2OyB9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhY19maWxlIiA+JjY7IH0KIGFjX2V4ZWV4dD0kYWNfY3ZfZXhlZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfZmlsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfZmlsZSIgPiY2CiAKLSMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgotIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotIyBGSVhNRTogVGhlc2UgY3Jvc3MgY29tcGlsZXIgaGFja3Mgc2hvdWxkIGJlIHJlbW92ZWQgZm9yIEF1dG9jb25mIDMuMAotIyBJZiBub3QgY3Jvc3MgY29tcGlsaW5nLCBjaGVjayB0aGF0IHdlIGNhbiBydW4gYSBzaW1wbGUgcHJvZ3JhbS4KLWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgotICBpZiB7IGFjX3RyeT0nLi8kYWNfZmlsZScKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICAgIGNyb3NzX2NvbXBpbGluZz1ubwotICBlbHNlCi0gICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgotCWNyb3NzX2NvbXBpbGluZz15ZXMKLSAgICBlbHNlCi0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgotSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuIEMgY29tcGlsZWQgcHJvZ3JhbXMuCi1JZiB5b3UgbWVhbnQgdG8gY3Jvc3MgY29tcGlsZSwgdXNlIFxgLS1ob3N0Jy4KLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgZmkKLSAgZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLQotcm0gLWYgYS5vdXQgYS5leGUgY29uZnRlc3QkYWNfY3ZfZXhlZXh0IGIub3V0CitybSAtZiAtciBhLm91dCBhLm91dC5kU1lNIGEuZXhlIGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBiLm91dAogYWNfY2xlYW5fZmlsZXM9JGFjX2NsZWFuX2ZpbGVzX3NhdmUKLSMgQ2hlY2sgdGhlIGNvbXBpbGVyIHByb2R1Y2VzIGV4ZWN1dGFibGVzIHdlIGNhbiBydW4uICBJZiBub3QsIGVpdGhlcgotIyB0aGUgY29tcGlsZXIgaXMgYnJva2VuLCBvciB3ZSBjcm9zcyBjb21waWxlLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZy4uLiAkRUNIT19DIiA+JjYKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGNyb3NzX2NvbXBpbGluZyIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBleGVjdXRhYmxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc3VmZml4IG9mIGV4ZWN1dGFibGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2YgZXhlY3V0YWJsZXMuLi4gIiA+JjY7IH0KK2lmIHsgeyBhY190cnk9IiRhY19saW5rIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfbGluayIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4gOgogICAjIElmIGJvdGggYGNvbmZ0ZXN0LmV4ZScgYW5kIGBjb25mdGVzdCcgYXJlIGBwcmVzZW50JyAod2VsbCwgb2JzZXJ2YWJsZSkKICMgY2F0Y2ggYGNvbmZ0ZXN0LmV4ZScuICBGb3IgaW5zdGFuY2Ugd2l0aCBDeWd3aW4sIGBscyBjb25mdGVzdCcgd2lsbAogIyB3b3JrIHByb3Blcmx5IChpLmUuLCByZWZlciB0byBgY29uZnRlc3QuZXhlJyksIHdoaWxlIGl0IHdvbid0IHdpdGgKQEAgLTM5ODYsMzggKzY5NzAsOTAgQEAKIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0LmV4ZSBjb25mdGVzdCBjb25mdGVzdC4qOyBkbwogICB0ZXN0IC1mICIkYWNfZmlsZSIgfHwgY29udGludWUKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5vIHwgKi5vYmogKSA7OworICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnIHwgKi5tYXAgfCAqLmluZiB8ICouZFNZTSB8ICoubyB8ICoub2JqICkgOzsKICAgICAqLiogKSBhY19jdl9leGVleHQ9YGV4cHIgIiRhY19maWxlIiA6ICdbXi5dKlwoXC4uKlwpJ2AKLQkgIGV4cG9ydCBhY19jdl9leGVleHQKIAkgIGJyZWFrOzsKICAgICAqICkgYnJlYWs7OwogICBlc2FjCiBkb25lCiBlbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBleGVjdXRhYmxlczogY2Fubm90IGNvbXBpbGUgYW5kIGxpbmsKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQotCi1ybSAtZiBjb25mdGVzdCRhY19jdl9leGVleHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9leGVleHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2V4ZWV4dCIgPiY2CitybSAtZiBjb25mdGVzdCBjb25mdGVzdCRhY19jdl9leGVleHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZXhlZXh0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfZXhlZXh0IiA+JjY7IH0KIAogcm0gLWYgY29uZnRlc3QuJGFjX2V4dAogRVhFRVhUPSRhY19jdl9leGVleHQKIGFjX2V4ZWV4dD0kRVhFRVhUCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3VmZml4IG9mIG9iamVjdCBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfb2JqZXh0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkaW8uaD4KK2ludAorbWFpbiAoKQoreworRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3Qub3V0IiwgInciKTsKKyByZXR1cm4gZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDA7CisKKyAgOworICByZXR1cm4gMDsKK30KIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCithY19jbGVhbl9maWxlcz0iJGFjX2NsZWFuX2ZpbGVzIGNvbmZ0ZXN0Lm91dCIKKyMgQ2hlY2sgdGhhdCB0aGUgY29tcGlsZXIgcHJvZHVjZXMgZXhlY3V0YWJsZXMgd2UgY2FuIHJ1bi4gIElmIG5vdCwgZWl0aGVyCisjIHRoZSBjb21waWxlciBpcyBicm9rZW4sIG9yIHdlIGNyb3NzIGNvbXBpbGUuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSBjcm9zcyBjb21waWxpbmcuLi4gIiA+JjY7IH0KK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciICE9IHllczsgdGhlbgorICB7IHsgYWNfdHJ5PSIkYWNfbGluayIKK2Nhc2UgIigoJGFjX3RyeSIgaW4KKyAgKlwiKiB8ICpcYCogfCAqXFwqKSBhY190cnlfZWNobz1cJGFjX3RyeTs7CisgICopIGFjX3RyeV9lY2hvPSRhY190cnk7OworZXNhYworZXZhbCBhY190cnlfZWNobz0iXCJcJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiAkYWNfdHJ5X2VjaG9cIiIKKyRhc19lY2hvICIkYWNfdHJ5X2VjaG8iOyB9ID4mNQorICAoZXZhbCAiJGFjX2xpbmsiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICBpZiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19jdl9leGVleHQnCisgIHsgeyBjYXNlICIoKCRhY190cnkiIGluCisgICpcIiogfCAqXGAqIHwgKlxcKikgYWNfdHJ5X2VjaG89XCRhY190cnk7OworICAqKSBhY190cnlfZWNobz0kYWNfdHJ5OzsKK2VzYWMKK2V2YWwgYWNfdHJ5X2VjaG89IlwiXCRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogJGFjX3RyeV9lY2hvXCIiCiskYXNfZWNobyAiJGFjX3RyeV9lY2hvIjsgfSA+JjUKKyAgKGV2YWwgIiRhY190cnkiKSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgfTsgdGhlbgorICAgIGNyb3NzX2NvbXBpbGluZz1ubworICBlbHNlCisgICAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSBtYXliZTsgdGhlbgorCWNyb3NzX2NvbXBpbGluZz15ZXMKKyAgICBlbHNlCisJeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biBDIGNvbXBpbGVkIHByb2dyYW1zLgorSWYgeW91IG1lYW50IHRvIGNyb3NzIGNvbXBpbGUsIHVzZSBcYC0taG9zdCcuCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgIGZpCisgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRjcm9zc19jb21waWxpbmciID4mNQorJGFzX2VjaG8gIiRjcm9zc19jb21waWxpbmciID4mNjsgfQorCitybSAtZiBjb25mdGVzdC4kYWNfZXh0IGNvbmZ0ZXN0JGFjX2N2X2V4ZWV4dCBjb25mdGVzdC5vdXQKK2FjX2NsZWFuX2ZpbGVzPSRhY19jbGVhbl9maWxlc19zYXZlCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdWZmaXggb2Ygb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X29iamV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC00MDI5LDQ1ICs3MDY1LDQ2IEBACiB9CiBfQUNFT0YKIHJtIC1mIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKK2lmIHsgeyBhY190cnk9IiRhY19jb21waWxlIgorY2FzZSAiKCgkYWNfdHJ5IiBpbgorICAqXCIqIHwgKlxgKiB8ICpcXCopIGFjX3RyeV9lY2hvPVwkYWNfdHJ5OzsKKyAgKikgYWNfdHJ5X2VjaG89JGFjX3RyeTs7Citlc2FjCitldmFsIGFjX3RyeV9lY2hvPSJcIlwkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY190cnlfZWNob1wiIgorJGFzX2VjaG8gIiRhY190cnlfZWNobyI7IH0gPiY1CisgIChldmFsICIkYWNfY29tcGlsZSIpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgZm9yIGFjX2ZpbGUgaW4gYChscyBjb25mdGVzdC5vIGNvbmZ0ZXN0Lm9iajsgbHMgY29uZnRlc3QuKikgMj4vZGV2L251bGxgOyBkbworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfTsgdGhlbiA6CisgIGZvciBhY19maWxlIGluIGNvbmZ0ZXN0Lm8gY29uZnRlc3Qub2JqIGNvbmZ0ZXN0Lio7IGRvCisgIHRlc3QgLWYgIiRhY19maWxlIiB8fCBjb250aW51ZTsKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgICouJGFjX2V4dCB8ICoueGNvZmYgfCAqLnRkcyB8ICouZCB8ICoucGRiIHwgKi54U1lNIHwgKi5iYiB8ICouYmJnICkgOzsKKyAgICAqLiRhY19leHQgfCAqLnhjb2ZmIHwgKi50ZHMgfCAqLmQgfCAqLnBkYiB8ICoueFNZTSB8ICouYmIgfCAqLmJiZyB8ICoubWFwIHwgKi5pbmYgfCAqLmRTWU0gKSA7OwogICAgICopIGFjX2N2X29iamV4dD1gZXhwciAiJGFjX2ZpbGUiIDogJy4qXC5cKC4qXCknYAogICAgICAgIGJyZWFrOzsKICAgZXNhYwogZG9uZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQorICAkYXNfZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKIHNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAoteyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHN1ZmZpeCBvZiBvYmplY3QgZmlsZXM6IGNhbm5vdCBjb21waWxlCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQoreyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciAkPyAiY2Fubm90IGNvbXB1dGUgc3VmZml4IG9mIG9iamVjdCBmaWxlczogY2Fubm90IGNvbXBpbGUKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQotCiBybSAtZiBjb25mdGVzdC4kYWNfY3Zfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfb2JqZXh0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9vYmpleHQiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vYmpleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9vYmpleHQiID4mNjsgfQogT0JKRVhUPSRhY19jdl9vYmpleHQKIGFjX29iamV4dD0kT0JKRVhUCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX2NvbXBpbGVyX2dudStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMgY29tcGlsZXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB3ZSBhcmUgdXNpbmcgdGhlIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29tcGlsZXJfZ251Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC00MDgxLDU1ICs3MTE4LDM0IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2NvbXBpbGVyX2dudT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCisgIGFjX2NvbXBpbGVyX2dudT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogYWNfY3ZfY19jb21waWxlcl9nbnU9JGFjX2NvbXBpbGVyX2dudQogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2Ci1HQ0M9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19jb21waWxlcl9nbnUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbXBpbGVyX2dudSIgPiY2OyB9CitpZiB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KKyAgR0NDPXllcworZWxzZQorICBHQ0M9CitmaQogYWNfdGVzdF9DRkxBR1M9JHtDRkxBR1Mrc2V0fQogYWNfc2F2ZV9DRkxBR1M9JENGTEFHUwotQ0ZMQUdTPSItZyIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRDQyBhY2NlcHRzIC1nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19jY19nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJENDIGFjY2VwdHMgLWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgYWNjZXB0cyAtZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2crOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgYWNfc2F2ZV9jX3dlcnJvcl9mbGFnPSRhY19jX3dlcnJvcl9mbGFnCisgICBhY19jX3dlcnJvcl9mbGFnPXllcworICAgYWNfY3ZfcHJvZ19jY19nPW5vCisgICBDRkxBR1M9Ii1nIgorICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKQEAgLTQxNDAsMzkgKzcxNTYsNDkgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfcHJvZ19jY19nPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBDRkxBR1M9IiIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotYWNfY3ZfcHJvZ19jY19nPW5vCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCisJIENGTEFHUz0iLWciCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9wcm9nX2NjX2c9eWVzCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfZyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19jY19nIiA+JjYKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgYWNfY193ZXJyb3JfZmxhZz0kYWNfc2F2ZV9jX3dlcnJvcl9mbGFnCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wcm9nX2NjX2ciID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2NjX2ciID4mNjsgfQogaWYgdGVzdCAiJGFjX3Rlc3RfQ0ZMQUdTIiA9IHNldDsgdGhlbgogICBDRkxBR1M9JGFjX3NhdmVfQ0ZMQUdTCiBlbGlmIHRlc3QgJGFjX2N2X3Byb2dfY2NfZyA9IHllczsgdGhlbgpAQCAtNDE4OCwxOCArNzIxNCwxNCBAQAogICAgIENGTEFHUz0KICAgZmkKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRDQyBvcHRpb24gdG8gYWNjZXB0IEFOU0kgQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkQ0Mgb3B0aW9uIHRvIGFjY2VwdCBBTlNJIEMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY2Nfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJENDIG9wdGlvbiB0byBhY2NlcHQgSVNPIEM4OS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2NjX2M4OSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2N2X3Byb2dfY2Nfc3RkYz1ubworICBhY19jdl9wcm9nX2NjX2M4OT1ubwogYWNfc2F2ZV9DQz0kQ0MKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN0ZGFyZy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC00MjI3LDEyICs3MjQ5LDE3IEBACiAvKiBPU0YgNC4wIENvbXBhcSBjYyBpcyBzb21lIHNvcnQgb2YgYWxtb3N0LUFOU0kgYnkgZGVmYXVsdC4gIEl0IGhhcwogICAgZnVuY3Rpb24gcHJvdG90eXBlcyBhbmQgc3R1ZmYsIGJ1dCBub3QgJ1x4SEgnIGhleCBjaGFyYWN0ZXIgY29uc3RhbnRzLgogICAgVGhlc2UgZG9uJ3QgcHJvdm9rZSBhbiBlcnJvciB1bmZvcnR1bmF0ZWx5LCBpbnN0ZWFkIGFyZSBzaWxlbnRseSB0cmVhdGVkCi0gICBhcyAneCcuICBUaGUgZm9sbG93aW5nIGluZHVjZXMgYW4gZXJyb3IsIHVudGlsIC1zdGQxIGlzIGFkZGVkIHRvIGdldAorICAgYXMgJ3gnLiAgVGhlIGZvbGxvd2luZyBpbmR1Y2VzIGFuIGVycm9yLCB1bnRpbCAtc3RkIGlzIGFkZGVkIHRvIGdldAogICAgcHJvcGVyIEFOU0kgbW9kZS4gIEN1cmlvdXNseSAnXHgwMCchPSd4JyBhbHdheXMgY29tZXMgb3V0IHRydWUsIGZvciBhbgogICAgYXJyYXkgc2l6ZSBhdCBsZWFzdC4gIEl0J3MgbmVjZXNzYXJ5IHRvIHdyaXRlICdceDAwJz09MCB0byBnZXQgc29tZXRoaW5nCi0gICB0aGF0J3MgdHJ1ZSBvbmx5IHdpdGggLXN0ZDEuICAqLworICAgdGhhdCdzIHRydWUgb25seSB3aXRoIC1zdGQuICAqLwogaW50IG9zZjRfY2NfYXJyYXkgWydceDAwJyA9PSAwID8gMSA6IC0xXTsKIAorLyogSUJNIEMgNiBmb3IgQUlYIGlzIGFsbW9zdC1BTlNJIGJ5IGRlZmF1bHQsIGJ1dCBpdCByZXBsYWNlcyBtYWNybyBwYXJhbWV0ZXJzCisgICBpbnNpZGUgc3RyaW5ncyBhbmQgY2hhcmFjdGVyIGNvbnN0YW50cy4gICovCisjZGVmaW5lIEZPTyh4KSAneCcKK2ludCB4bGM2X2NjX2FycmF5W0ZPTyhhKSA9PSAneCcgPyAxIDogLTFdOworCiBpbnQgdGVzdCAoaW50IGksIGRvdWJsZSB4KTsKIHN0cnVjdCBzMSB7aW50ICgqZikgKGludCBhKTt9Owogc3RydWN0IHMyIHtpbnQgKCpmKSAoZG91YmxlIGEpO307CkBAIC00MjQ3LDIwNSArNzI3NCwzNyBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotIyBEb24ndCB0cnkgZ2NjIC1hbnNpOyB0aGF0IHR1cm5zIG9mZiB1c2VmdWwgZXh0ZW5zaW9ucyBhbmQKLSMgYnJlYWtzIHNvbWUgc3lzdGVtcycgaGVhZGVyIGZpbGVzLgotIyBBSVgJCQktcWxhbmdsdmw9YW5zaQotIyBVbHRyaXggYW5kIE9TRi8xCS1zdGQxCi0jIEhQLVVYIDEwLjIwIGFuZCBsYXRlcgktQWUKLSMgSFAtVVggb2xkZXIgdmVyc2lvbnMJLUFhIC1EX0hQVVhfU09VUkNFCi0jIFNWUjQJCQktWGMgLURfX0VYVEVOU0lPTlNfXwotZm9yIGFjX2FyZyBpbiAiIiAtcWxhbmdsdmw9YW5zaSAtc3RkMSAtQWUgIi1BYSAtRF9IUFVYX1NPVVJDRSIgIi1YYyAtRF9fRVhURU5TSU9OU19fIgorZm9yIGFjX2FyZyBpbiAnJyAtcWxhbmdsdmw9ZXh0Yzg5IC1xbGFuZ2x2bD1hbnNpIC1zdGQgXAorCS1BZSAiLUFhIC1EX0hQVVhfU09VUkNFIiAiLVhjIC1EX19FWFRFTlNJT05TX18iCiBkbwogICBDQz0iJGFjX3NhdmVfQ0MgJGFjX2FyZyIKLSAgcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9wcm9nX2NjX3N0ZGM9JGFjX2FyZwotYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQorICBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3Byb2dfY2NfYzg5PSRhY19hcmcKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dAorICB0ZXN0ICJ4JGFjX2N2X3Byb2dfY2NfYzg5IiAhPSAieG5vIiAmJiBicmVhawogZG9uZQotcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBjb25mdGVzdC4kYWNfb2JqZXh0CitybSAtZiBjb25mdGVzdC4kYWNfZXh0CiBDQz0kYWNfc2F2ZV9DQwogCiBmaQotCi1jYXNlICJ4JGFjX2N2X3Byb2dfY2Nfc3RkYyIgaW4KLSAgeHx4bm8pCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSBuZWVkZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9bm9uZSBuZWVkZWQiID4mNiA7OworIyBBQ19DQUNIRV9WQUwKK2Nhc2UgIngkYWNfY3ZfcHJvZ19jY19jODkiIGluCisgIHgpCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUgbmVlZGVkIiA+JjUKKyRhc19lY2hvICJub25lIG5lZWRlZCIgPiY2OyB9IDs7CisgIHhubykKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogdW5zdXBwb3J0ZWQiID4mNQorJGFzX2VjaG8gInVuc3VwcG9ydGVkIiA+JjY7IH0gOzsKICAgKikKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19jY19zdGRjIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2NjX3N0ZGMiID4mNgotICAgIENDPSIkQ0MgJGFjX2N2X3Byb2dfY2Nfc3RkYyIgOzsKKyAgICBDQz0iJENDICRhY19jdl9wcm9nX2NjX2M4OSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Byb2dfY2NfYzg5IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfcHJvZ19jY19jODkiID4mNjsgfSA7OwogZXNhYwotCi0jIFNvbWUgcGVvcGxlIHVzZSBhIEMrKyBjb21waWxlciB0byBjb21waWxlIEMuICBTaW5jZSB3ZSB1c2UgYGV4aXQnLAotIyBpbiBDKysgd2UgbmVlZCB0byBkZWNsYXJlIGl0LiAgSW4gY2FzZSBzb21lb25lIHVzZXMgdGhlIHNhbWUgY29tcGlsZXIKLSMgZm9yIGJvdGggY29tcGlsaW5nIEMgYW5kIEMrKyB3ZSBuZWVkIHRvIGhhdmUgdGhlIEMrKyBjb21waWxlciBkZWNpZGUKLSMgdGhlIGRlY2xhcmF0aW9uIG9mIGV4aXQsIHNpbmNlIGl0J3MgdGhlIG1vc3QgZGVtYW5kaW5nIGVudmlyb25tZW50LgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi0gIGNob2tlIG1lCi0jZW5kaWYKLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBmb3IgYWNfZGVjbGFyYXRpb24gaW4gXAotICAgJycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBzdGQ6OmV4aXQgKGludCkgdGhyb3cgKCk7IHVzaW5nIHN0ZDo6ZXhpdDsnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCkgdGhyb3cgKCk7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7JyBcCi0gICAndm9pZCBleGl0IChpbnQpOycKLWRvCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2RlY2xhcmF0aW9uCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLWV4aXQgKDQyKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19jY19jODkiICE9IHhubzsgdGhlbiA6CiAKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1ybSAtZiBjb25mdGVzdCoKLWlmIHRlc3QgLW4gIiRhY19kZWNsYXJhdGlvbiI7IHRoZW4KLSAgZWNobyAnI2lmZGVmIF9fY3BsdXNwbHVzJyA+PmNvbmZkZWZzLmgKLSAgZWNobyAkYWNfZGVjbGFyYXRpb24gICAgICA+PmNvbmZkZWZzLmgKLSAgZWNobyAnI2VuZGlmJyAgICAgICAgICAgICA+PmNvbmZkZWZzLmgKLWZpCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGFjX2V4dD1jCiBhY19jcHA9JyRDUFAgJENQUEZMQUdTJwogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwpAQCAtNDQ1NywxNSArNzMxNiwxNSBAQAogYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwogYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKIGFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMgcHJlcHJvY2Vzc29yLi4uICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3NvciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcnVuIHRoZSBDIHByZXByb2Nlc3Nvci4uLiAiID4mNjsgfQogIyBPbiBTdW5zLCBzb21ldGltZXMgJENQUCBuYW1lcyBhIGRpcmVjdG9yeS4KIGlmIHRlc3QgLW4gIiRDUFAiICYmIHRlc3QgLWQgIiRDUFAiOyB0aGVuCiAgIENQUD0KIGZpCiBpZiB0ZXN0IC16ICIkQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIGlmICR7YWNfY3ZfcHJvZ19DUFArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICAgICAgIyBEb3VibGUgcXVvdGVzIGJlY2F1c2UgQ1BQIG5lZWRzIHRvIGJlIGV4cGFuZGVkCiAgICAgZm9yIENQUCBpbiAiJENDIC1FIiAiJENDIC1FIC10cmFkaXRpb25hbC1jcHAiICIvbGliL2NwcCIKQEAgLTQ0NzksMTEgKzczMzgsNyBAQAogICAjIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4KICAgIyBPbiB0aGUgTmVYVCwgY2MgLUUgcnVucyB0aGUgY29kZSB0aHJvdWdoIHRoZSBjb21waWxlcidzIHBhcnNlciwKICAgIyBub3QganVzdCB0aHJvdWdoIGNwcC4gIlN5bnRheCBlcnJvciIgaXMgaGVyZSB0byBjYXRjaCB0aGlzIGNhc2UuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaWZkZWYgX19TVERDX18KICMgaW5jbHVkZSA8bGltaXRzLmg+CkBAIC00NDkyLDc4ICs3MzQ3LDM0IEBACiAjZW5kaWYKIAkJICAgICBTeW50YXggZXJyb3IKIF9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAKK2Vsc2UKICAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgogY29udGludWUKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycworICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uZXhpc3RlbnQgaGVhZGVycwogICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGFjX25vbmV4aXN0ZW50Lmg+CiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCitpZiBhY19mbl9jX3RyeV9jcHAgIiRMSU5FTk8iOyB0aGVuIDoKICAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KICAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KIGFjX3ByZXByb2Nfb2s9OgogYnJlYWsKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LmkgY29uZnRlc3QuJGFjX2V4dAogCiBkb25lCiAjIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgogICBicmVhawogZmkKIApAQCAtNDU3NSw4ICs3Mzg2LDggQEAKIGVsc2UKICAgYWNfY3ZfcHJvZ19DUFA9JENQUAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDUFAiID4mNQotZWNobyAiJHtFQ0hPX1R9JENQUCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJENQUCIgPiY1CiskYXNfZWNobyAiJENQUCIgPiY2OyB9CiBhY19wcmVwcm9jX29rPWZhbHNlCiBmb3IgYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbiAnJyB5ZXMKIGRvCkBAIC00NTg2LDExICs3Mzk3LDcgQEAKICAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCiAgICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCiAgICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fU1REQ19fCiAjIGluY2x1ZGUgPGxpbWl0cy5oPgpAQCAtNDU5OSw4NSArNzQwNiw0MCBAQAogI2VuZGlmCiAJCSAgICAgU3ludGF4IGVycm9yCiBfQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NwcCAiJExJTkVOTyI7IHRoZW4gOgogCitlbHNlCiAgICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KIGNvbnRpbnVlCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKKyAgIyBPSywgd29ya3Mgb24gc2FuZSBjYXNlcy4gIE5vdyBjaGVjayB3aGV0aGVyIG5vbmV4aXN0ZW50IGhlYWRlcnMKICAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgogX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgoraWYgYWNfZm5fY190cnlfY3BwICIkTElORU5PIjsgdGhlbiA6CiAgICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCiBjb250aW51ZQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCiAgICMgUGFzc2VzIGJvdGggdGVzdHMuCiBhY19wcmVwcm9jX29rPToKIGJyZWFrCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC5pIGNvbmZ0ZXN0LiRhY19leHQKIAogZG9uZQogIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgorcm0gLWYgY29uZnRlc3QuaSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAoraWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4gOgorCiBlbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEMgcHJlcHJvY2Vzc29yIFwiJENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQyBwcmVwcm9jZXNzb3IgXCIkQ1BQXCIgZmFpbHMgc2FuaXR5IGNoZWNrCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yICQ/ICJDIHByZXByb2Nlc3NvciBcIiRDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CiBmaQogCiBhY19leHQ9YwpAQCAtNDY5MCwzNTggKzc0NTIsNjcwIEBACiAKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGVncmVwIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGVncmVwLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2VncmVwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGVhZGVyX3N0ZGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiBlY2hvIGEgfCAoZ3JlcCAtRSAnKGF8YiknKSA+L2Rldi9udWxsIDI+JjEKLSAgICB0aGVuIGFjX2N2X3Byb2dfZWdyZXA9J2dyZXAgLUUnCi0gICAgZWxzZSBhY19jdl9wcm9nX2VncmVwPSdlZ3JlcCcKLSAgICBmaQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2VncmVwIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2VncmVwIiA+JjYKLSBFR1JFUD0kYWNfY3ZfcHJvZ19lZ3JlcAotCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBBSVgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQUlYLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfQUlYCi0gIHllcwotI2VuZGlmCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgX0FMTF9TT1VSQ0UgMQotX0FDRU9GCisgICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KIGZpCiBybSAtZiBjb25mdGVzdCoKIAorZmkKIAoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBJU0MgMi4wLjIgc3RkbGliLmggZG9lcyBub3QgZGVjbGFyZSBmcmVlLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSMgc3lzdGVtIGNoZWNrCi1hY19hdXhfZGlyPQotZm9yIGFjX2RpciBpbiAkc3JjZGlyICRzcmNkaXIvLi4gJHNyY2Rpci8uLi8uLjsgZG8KLSAgaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwtc2g7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLXNoIC1jIgotICAgIGJyZWFrCi0gIGVsaWYgdGVzdCAtZiAkYWNfZGlyL2luc3RhbGwuc2g7IHRoZW4KLSAgICBhY19hdXhfZGlyPSRhY19kaXIKLSAgICBhY19pbnN0YWxsX3NoPSIkYWNfYXV4X2Rpci9pbnN0YWxsLnNoIC1jIgotICAgIGJyZWFrCi0gIGVsaWYgdGVzdCAtZiAkYWNfZGlyL3NodG9vbDsgdGhlbgotICAgIGFjX2F1eF9kaXI9JGFjX2RpcgotICAgIGFjX2luc3RhbGxfc2g9IiRhY19hdXhfZGlyL3NodG9vbCBpbnN0YWxsIC1jIgotICAgIGJyZWFrCi0gIGZpCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29uZnRlc3QqCisKK2ZpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zdGRjID0geWVzOyB0aGVuCisgICMgL2Jpbi9jYyBpbiBJcml4LTQuMC41IGdldHMgbm9uLUFOU0kgY3R5cGUgbWFjcm9zIHVubGVzcyB1c2luZyAtYW5zaS4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICA6CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2lmICgoJyAnICYgMHgwRkYpID09IDB4MDIwKQorIyBkZWZpbmUgSVNMT1dFUihjKSAoJ2EnIDw9IChjKSAmJiAoYykgPD0gJ3onKQorIyBkZWZpbmUgVE9VUFBFUihjKSAoSVNMT1dFUihjKSA/ICdBJyArICgoYykgLSAnYScpIDogKGMpKQorI2Vsc2UKKyMgZGVmaW5lIElTTE9XRVIoYykgXAorCQkgICAoKCdhJyA8PSAoYykgJiYgKGMpIDw9ICdpJykgXAorCQkgICAgIHx8ICgnaicgPD0gKGMpICYmIChjKSA8PSAncicpIFwKKwkJICAgICB8fCAoJ3MnIDw9IChjKSAmJiAoYykgPD0gJ3onKSkKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAoKGMpIHwgMHg0MCkgOiAoYykpCisjZW5kaWYKKworI2RlZmluZSBYT1IoZSwgZikgKCgoZSkgJiYgIShmKSkgfHwgKCEoZSkgJiYgKGYpKSkKK2ludAorbWFpbiAoKQoreworICBpbnQgaTsKKyAgZm9yIChpID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIGlmIChYT1IgKGlzbG93ZXIgKGkpLCBJU0xPV0VSIChpKSkKKwl8fCB0b3VwcGVyIChpKSAhPSBUT1VQUEVSIChpKSkKKyAgICAgIHJldHVybiAyOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3ZfaGVhZGVyX3N0ZGM9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQorCitmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9oZWFkZXJfc3RkYyIgPiY2OyB9CitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBTVERDX0hFQURFUlMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgT24gSVJJWCA1LjMsIHN5cy90eXBlcyBhbmQgaW50dHlwZXMuaCBhcmUgY29uZmxpY3RpbmcuCitmb3IgYWNfaGVhZGVyIGluIHN5cy90eXBlcy5oIHN5cy9zdGF0Lmggc3RkbGliLmggc3RyaW5nLmggbWVtb3J5Lmggc3RyaW5ncy5oIFwKKwkJICBpbnR0eXBlcy5oIHN0ZGludC5oIHVuaXN0ZC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKIGRvbmUKLWlmIHRlc3QgLXogIiRhY19hdXhfZGlyIjsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnN0YWxsLXNoIG9yIGluc3RhbGwuc2ggaW4gJHNyY2RpciAkc3JjZGlyLy4uICRzcmNkaXIvLi4vLi4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5zdGFsbC1zaCBvciBpbnN0YWxsLnNoIGluICRzcmNkaXIgJHNyY2Rpci8uLiAkc3JjZGlyLy4uLy4uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotYWNfY29uZmlnX2d1ZXNzPSIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzIgotYWNfY29uZmlnX3N1Yj0iJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIiCi1hY19jb25maWd1cmU9IiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWd1cmUiICMgVGhpcyBzaG91bGQgYmUgQ3lnbnVzIGNvbmZpZ3VyZS4KIAotIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgotJGFjX2NvbmZpZ19zdWIgc3VuNCA+L2Rldi9udWxsIDI+JjEgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IHJ1biAkYWNfY29uZmlnX3N1YiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgcnVuICRhY19jb25maWdfc3ViIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGJ1aWxkIHN5c3RlbSB0eXBlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9idWlsZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJtaW5peC9jb25maWcuaCIgImFjX2N2X2hlYWRlcl9taW5peF9jb25maWdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbWluaXhfY29uZmlnX2giID0geHllczsgdGhlbiA6CisgIE1JTklYPXllcwogZWxzZQotICBhY19jdl9idWlsZF9hbGlhcz0kYnVpbGRfYWxpYXMKLXRlc3QgLXogIiRhY19jdl9idWlsZF9hbGlhcyIgJiYKLSAgYWNfY3ZfYnVpbGRfYWxpYXM9YCRhY19jb25maWdfZ3Vlc3NgCi10ZXN0IC16ICIkYWNfY3ZfYnVpbGRfYWxpYXMiICYmCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBndWVzcyBidWlsZCB0eXBlOyB5b3UgbXVzdCBzcGVjaWZ5IG9uZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZ3Vlc3MgYnVpbGQgdHlwZTsgeW91IG11c3Qgc3BlY2lmeSBvbmUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWFjX2N2X2J1aWxkPWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfYnVpbGRfYWxpYXNgIHx8Ci0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9idWlsZF9hbGlhcyBmYWlsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2J1aWxkX2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCisgIE1JTklYPQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfYnVpbGQiID4mNgotYnVpbGQ9JGFjX2N2X2J1aWxkCi1idWlsZF9jcHU9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLWJ1aWxkX3ZlbmRvcj1gZWNobyAkYWNfY3ZfYnVpbGQgfCBzZWQgJ3MvXlwoW14tXSpcKS1cKFteLV0qXCktXCguKlwpJC9cMi8nYAotYnVpbGRfb3M9YGVjaG8gJGFjX2N2X2J1aWxkIHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hvc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgaWYgdGVzdCAiJE1JTklYIiA9IHllczsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBfUE9TSVhfU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisKKyRhc19lY2hvICIjZGVmaW5lIF9QT1NJWF8xX1NPVVJDRSAyIiA+PmNvbmZkZWZzLmgKKworCiskYXNfZWNobyAiI2RlZmluZSBfTUlOSVggMSIgPj5jb25mZGVmcy5oCisKKyAgZmkKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBpdCBpcyBzYWZlIHRvIGRlZmluZSBfX0VYVEVOU0lPTlNfXyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGl0IGlzIHNhZmUgdG8gZGVmaW5lIF9fRVhURU5TSU9OU19fLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY3ZfaG9zdF9hbGlhcz0kaG9zdF9hbGlhcwotdGVzdCAteiAiJGFjX2N2X2hvc3RfYWxpYXMiICYmCi0gIGFjX2N2X2hvc3RfYWxpYXM9JGFjX2N2X2J1aWxkX2FsaWFzCi1hY19jdl9ob3N0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfaG9zdF9hbGlhc2AgfHwKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogJGFjX2NvbmZpZ19zdWIgJGFjX2N2X2hvc3RfYWxpYXMgZmFpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICRhY19jb25maWdfc3ViICRhY19jdl9ob3N0X2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaG9zdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaG9zdCIgPiY2Ci1ob3N0PSRhY19jdl9ob3N0Ci1ob3N0X2NwdT1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wxLydgCi1ob3N0X3ZlbmRvcj1gZWNobyAkYWNfY3ZfaG9zdCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCi1ob3N0X29zPWBlY2hvICRhY19jdl9ob3N0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDMvJ2AKKyMJICBkZWZpbmUgX19FWFRFTlNJT05TX18gMQorCSAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQorewogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3RhcmdldCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fPXllcwogZWxzZQotICBhY19jdl90YXJnZXRfYWxpYXM9JHRhcmdldF9hbGlhcwotdGVzdCAieCRhY19jdl90YXJnZXRfYWxpYXMiID0gIngiICYmCi0gIGFjX2N2X3RhcmdldF9hbGlhcz0kYWNfY3ZfaG9zdF9hbGlhcwotYWNfY3ZfdGFyZ2V0PWAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfdGFyZ2V0X2FsaWFzYCB8fAotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfdGFyZ2V0X2FsaWFzIGZhaWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkYWNfY29uZmlnX3N1YiAkYWNfY3ZfdGFyZ2V0X2FsaWFzIGZhaWxlZCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2FmZV90b19kZWZpbmVfX19leHRlbnNpb25zX18iID4mNQorJGFzX2VjaG8gIiRhY19jdl9zYWZlX3RvX2RlZmluZV9fX2V4dGVuc2lvbnNfXyIgPiY2OyB9CisgIHRlc3QgJGFjX2N2X3NhZmVfdG9fZGVmaW5lX19fZXh0ZW5zaW9uc19fID0geWVzICYmCisgICAgJGFzX2VjaG8gIiNkZWZpbmUgX19FWFRFTlNJT05TX18gMSIgPj5jb25mZGVmcy5oCisKKyAgJGFzX2VjaG8gIiNkZWZpbmUgX0FMTF9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKyAgJGFzX2VjaG8gIiNkZWZpbmUgX0dOVV9TT1VSQ0UgMSIgPj5jb25mZGVmcy5oCisKKyAgJGFzX2VjaG8gIiNkZWZpbmUgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTIDEiID4+Y29uZmRlZnMuaAorCisgICRhc19lY2hvICIjZGVmaW5lIF9UQU5ERU1fU09VUkNFIDEiID4+Y29uZmRlZnMuaAorCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYW4gQU5TSSBDLWNvbmZvcm1pbmcgY29uc3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfY29uc3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworLyogRklYTUU6IEluY2x1ZGUgdGhlIGNvbW1lbnRzIHN1Z2dlc3RlZCBieSBQYXVsLiAqLworI2lmbmRlZiBfX2NwbHVzcGx1cworICAvKiBVbHRyaXggbWlwcyBjYyByZWplY3RzIHRoaXMuICAqLworICB0eXBlZGVmIGludCBjaGFyc2V0WzJdOworICBjb25zdCBjaGFyc2V0IGNzOworICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLworICBjaGFyIGNvbnN0ICpjb25zdCAqcGNwY2M7CisgIGNoYXIgKipwcGM7CisgIC8qIE5FQyBTVlI0LjAuMiBtaXBzIGNjIHJlamVjdHMgdGhpcy4gICovCisgIHN0cnVjdCBwb2ludCB7aW50IHgsIHk7fTsKKyAgc3RhdGljIHN0cnVjdCBwb2ludCBjb25zdCB6ZXJvID0gezAsMH07CisgIC8qIEFJWCBYTCBDIDEuMDIuMC4wIHJlamVjdHMgdGhpcy4KKyAgICAgSXQgZG9lcyBub3QgbGV0IHlvdSBzdWJ0cmFjdCBvbmUgY29uc3QgWCogcG9pbnRlciBmcm9tIGFub3RoZXIgaW4KKyAgICAgYW4gYXJtIG9mIGFuIGlmLWV4cHJlc3Npb24gd2hvc2UgaWYtcGFydCBpcyBub3QgYSBjb25zdGFudAorICAgICBleHByZXNzaW9uICovCisgIGNvbnN0IGNoYXIgKmcgPSAic3RyaW5nIjsKKyAgcGNwY2MgPSAmZyArIChnID8gZy1nIDogMCk7CisgIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCisgICsrcGNwY2M7CisgIHBwYyA9IChjaGFyKiopIHBjcGNjOworICBwY3BjYyA9IChjaGFyIGNvbnN0ICpjb25zdCAqKSBwcGM7CisgIHsgLyogU0NPIDMuMnY0IGNjIHJlamVjdHMgdGhpcy4gICovCisgICAgY2hhciAqdDsKKyAgICBjaGFyIGNvbnN0ICpzID0gMCA/IChjaGFyICopIDAgOiAoY2hhciBjb25zdCAqKSAwOworCisgICAgKnQrKyA9IDA7CisgICAgaWYgKHMpIHJldHVybiAwOworICB9CisgIHsgLyogU29tZW9uZSB0aGlua3MgdGhlIFN1biBzdXBwb3NlZGx5LUFOU0kgY29tcGlsZXIgd2lsbCByZWplY3QgdGhpcy4gICovCisgICAgaW50IHhbXSA9IHsyNSwgMTd9OworICAgIGNvbnN0IGludCAqZm9vID0gJnhbMF07CisgICAgKytmb287CisgIH0KKyAgeyAvKiBTdW4gU0MxLjAgQU5TSSBjb21waWxlciByZWplY3RzIHRoaXMgLS0gYnV0IG5vdCB0aGUgYWJvdmUuICovCisgICAgdHlwZWRlZiBjb25zdCBpbnQgKmlwdHI7CisgICAgaXB0ciBwID0gMDsKKyAgICArK3A7CisgIH0KKyAgeyAvKiBBSVggWEwgQyAxLjAyLjAuMCByZWplY3RzIHRoaXMgc2F5aW5nCisgICAgICAgImsuYyIsIGxpbmUgMi4yNzogMTUwNi0wMjUgKFMpIE9wZXJhbmQgbXVzdCBiZSBhIG1vZGlmaWFibGUgbHZhbHVlLiAqLworICAgIHN0cnVjdCBzIHsgaW50IGo7IGNvbnN0IGludCAqYXBbM107IH07CisgICAgc3RydWN0IHMgKmI7IGItPmogPSA1OworICB9CisgIHsgLyogVUxUUklYLTMyIFYzLjEgKFJldiA5KSB2Y2MgcmVqZWN0cyB0aGlzICovCisgICAgY29uc3QgaW50IGZvbyA9IDEwOworICAgIGlmICghZm9vKSByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gIWNzWzBdICYmICF6ZXJvLng7CisjZW5kaWYKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfY29uc3Q9eWVzCitlbHNlCisgIGFjX2N2X2NfY29uc3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfY29uc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX2NvbnN0IiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBjb25zdCAvKiovIiA+PmNvbmZkZWZzLmgKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90YXJnZXQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3RhcmdldCIgPiY2Ci10YXJnZXQ9JGFjX2N2X3RhcmdldAotdGFyZ2V0X2NwdT1gZWNobyAkYWNfY3ZfdGFyZ2V0IHwgc2VkICdzL15cKFteLV0qXCktXChbXi1dKlwpLVwoLipcKSQvXDEvJ2AKLXRhcmdldF92ZW5kb3I9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wyLydgCi10YXJnZXRfb3M9YGVjaG8gJGFjX2N2X3RhcmdldCB8IHNlZCAncy9eXChbXi1dKlwpLVwoW14tXSpcKS1cKC4qXCkkL1wzLydgCiAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGlubGluZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5saW5lLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfaW5saW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfY19pbmxpbmU9bm8KK2ZvciBhY19rdyBpbiBpbmxpbmUgX19pbmxpbmVfXyBfX2lubGluZTsgZG8KKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZiBpbnQgZm9vX3Q7CitzdGF0aWMgJGFjX2t3IGZvb190IHN0YXRpY19mb28gKCkge3JldHVybiAwOyB9CiskYWNfa3cgZm9vX3QgZm9vICgpIHtyZXR1cm4gMDsgfQorI2VuZGlmCiAKLSMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KLSMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KLXRlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCi0gIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKLSAgICBOT05FTk9ORXMseCx4LCAmJgotICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCi0KLVBBUlRJQUxUQVJHRVRPUz1gZWNobyAkdGFyZ2V0X29zIHwgc2VkICdzL1stLl9dLiovLydgCi0KLQotIyBwbGF0Zm9ybS1zcGVjaWZpYyBjb21waWxlciBmbGFncwotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLQlDRkxBR1M9IiRDRkxBR1MgLURtaW5ndzMyIgorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2NfaW5saW5lPSRhY19rdwogZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICB0ZXN0ICIkYWNfY3ZfY19pbmxpbmUiICE9IG5vICYmIGJyZWFrCitkb25lCiAKLSMgcGxhdGZvcm0tc3BlY2lmaWMgbGlua2VyIGZsYWdzCi1jYXNlICR0YXJnZXRfb3MgaW4KLSAgICBhaXg0LjIqfGFpeDQuMyp8YWl4NSp8YWl4NiopCi0gICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGF0IGxpbmtlciBmbGFncyB0byBhZGQgdG8gZW5hYmxlIHJ1bnRpbWUgbGlua2luZyBvbiBBSVgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGF0IGxpbmtlciBmbGFncyB0byBhZGQgdG8gZW5hYmxlIHJ1bnRpbWUgbGlua2luZyBvbiBBSVguLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbwotICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KLSAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vaz15ZXMKLSAgICAgICAgICAgICAgICBicmVhawotICAgICAgICAgICAgZmkKLSAgICAgICAgZG9uZQotICAgICAgICBpZiB0ZXN0ICJYJG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rIiAhPSAiWHllcyI7IHRoZW4KLQkgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCi0JICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItV2wsLWJydGwiCi0JICAgIGVsc2UKLSAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItYnJ0bCIKLQkgICAgZmkKLSAgICAgICAgICAgIExERkxBR1M9IiRuZXRzbm1wX2FpeF9sZGZsYWdzICRMREZMQUdTIgotCSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbmV0c25tcF9haXhfbGRmbGFncyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbmV0c25tcF9haXhfbGRmbGFncyIgPiY2Ci0JZWxzZQotCSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vbmUiID4mNgotCWZpCi0JOzsKLSAgICBkYXJ3aW44KnxkYXJ3aW45KikKLSAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgZGFyd2luIGxkIG1pZ2h0IG5lZWQgLWZsYXRfbmFtZXNwYWNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBkYXJ3aW4gbGQgbWlnaHQgbmVlZCAtZmxhdF9uYW1lc3BhY2UuLi4gJEVDSE9fQyIgPiY2Ci0JaWYgdGVzdCAteiAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCI7IHRoZW4KLQkJTERGTEFHUz0iLWZsYXRfbmFtZXNwYWNlICRMREZMQUdTIgotCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLQllbHNlCi0JCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLQlmaQotCTs7Ci0gICAgKikKLSAgICAgICAgOzsKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfaW5saW5lIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19pbmxpbmUiID4mNjsgfQorCitjYXNlICRhY19jdl9jX2lubGluZSBpbgorICBpbmxpbmUgfCB5ZXMpIDs7CisgICopCisgICAgY2FzZSAkYWNfY3ZfY19pbmxpbmUgaW4KKyAgICAgIG5vKSBhY192YWw9OzsKKyAgICAgICopIGFjX3ZhbD0kYWNfY3ZfY19pbmxpbmU7OworICAgIGVzYWMKKyAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIGlubGluZSAkYWNfdmFsCisjZW5kaWYKK19BQ0VPRgorICAgIDs7CiBlc2FjCiAKLSMgbGlidG9vbCBzdHVmZiBmb3Igc2hhcmVkL3N0YXRpYyBsaWJyYXJpZXMuCisKKyMgICAgICAgbGlidG9vbCBzdHVmZiBmb3Igc2hhcmVkL3N0YXRpYyBsaWJyYXJpZXMuCisjCisKK2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBMaWJ0b29sIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHdoaXRlc3BhY2UgaW4gXGBwd2RcYCIgPiYyO30gOzsKK2VzYWMKKworCisKK21hY3JvX3ZlcnNpb249JzIuNCcKK21hY3JvX3JldmlzaW9uPScxLjMyOTMnCiAKIAogCiAKLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1zaGFyZWQgb3IgLS1kaXNhYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX3NoYXJlZCIKLSAgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KLSAgICBjYXNlICRlbmFibGV2YWwgaW4KLSAgICB5ZXMpIGVuYWJsZV9zaGFyZWQ9eWVzIDs7Ci0gICAgbm8pIGVuYWJsZV9zaGFyZWQ9bm8gOzsKLSAgICAqKQotICAgICAgZW5hYmxlX3NoYXJlZD1ubwotICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgotICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCi0JSUZTPSIkbHRfc2F2ZV9pZnMiCi0JaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KLQkgIGVuYWJsZV9zaGFyZWQ9eWVzCi0JZmkKLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgotICAgICAgOzsKLSAgICBlc2FjCisKKworCisKKworCisKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworIyBNYWtlIHN1cmUgd2UgY2FuIHJ1biBjb25maWcuc3ViLgorJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiBzdW40ID4vZGV2L251bGwgMj4mMSB8fAorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IHJ1biAkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgIiRMSU5FTk8iIDUKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBidWlsZCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9idWlsZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGVuYWJsZV9zaGFyZWQ9eWVzCi1maTsKKyAgYWNfYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCit0ZXN0ICJ4JGFjX2J1aWxkX2FsaWFzIiA9IHggJiYKKyAgYWNfYnVpbGRfYWxpYXM9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLmd1ZXNzImAKK3Rlc3QgIngkYWNfYnVpbGRfYWxpYXMiID0geCAmJgorICBhc19mbl9lcnJvciAkPyAiY2Fubm90IGd1ZXNzIGJ1aWxkIHR5cGU7IHlvdSBtdXN0IHNwZWNpZnkgb25lIiAiJExJTkVOTyIgNQorYWNfY3ZfYnVpbGQ9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGFjX2J1aWxkX2FsaWFzYCB8fAorICBhc19mbl9lcnJvciAkPyAiJFNIRUxMICRhY19hdXhfZGlyL2NvbmZpZy5zdWIgJGFjX2J1aWxkX2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKIAotIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyBvciAtLWRpc2FibGUtc3RhdGljIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX3N0YXRpYytzZXR9IiA9IHNldDsgdGhlbgotICBlbmFibGV2YWw9IiRlbmFibGVfc3RhdGljIgotICBwPSR7UEFDS0FHRS1kZWZhdWx0fQotICAgIGNhc2UgJGVuYWJsZXZhbCBpbgotICAgIHllcykgZW5hYmxlX3N0YXRpYz15ZXMgOzsKLSAgICBubykgZW5hYmxlX3N0YXRpYz1ubyA7OwotICAgICopCi0gICAgIGVuYWJsZV9zdGF0aWM9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfc3RhdGljPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfc3RhdGljPXllcwotZmk7CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9idWlsZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2J1aWxkIiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2J1aWxkIGluCisqLSotKikgOzsKKyopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIHZhbHVlIG9mIGNhbm9uaWNhbCBidWlsZCIgIiRMSU5FTk8iIDU7OworZXNhYworYnVpbGQ9JGFjX2N2X2J1aWxkCithY19zYXZlX0lGUz0kSUZTOyBJRlM9Jy0nCitzZXQgeCAkYWNfY3ZfYnVpbGQKK3NoaWZ0CitidWlsZF9jcHU9JDEKK2J1aWxkX3ZlbmRvcj0kMgorc2hpZnQ7IHNoaWZ0CisjIFJlbWVtYmVyLCB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIElGUyBpcyB1c2VkIHRvIGNyZWF0ZSAkKiwKKyMgZXhjZXB0IHdpdGggb2xkIHNoZWxsczoKK2J1aWxkX29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICRidWlsZF9vcyBpbiAqXCAqKSBidWlsZF9vcz1gZWNobyAiJGJ1aWxkX29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYwogCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIG9yIC0tZGlzYWJsZS1mYXN0LWluc3RhbGwgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfZmFzdF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9mYXN0X2luc3RhbGwiCi0gIHA9JHtQQUNLQUdFLWRlZmF1bHR9Ci0gICAgY2FzZSAkZW5hYmxldmFsIGluCi0gICAgeWVzKSBlbmFibGVfZmFzdF9pbnN0YWxsPXllcyA7OwotICAgIG5vKSBlbmFibGVfZmFzdF9pbnN0YWxsPW5vIDs7Ci0gICAgKikKLSAgICAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLSAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KLSAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgotICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbwotCUlGUz0iJGx0X3NhdmVfaWZzIgotCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCi0JICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotCWZpCi0gICAgICBkb25lCi0gICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAgIDs7Ci0gICAgZXNhYwotZWxzZQotICBlbmFibGVfZmFzdF9pbnN0YWxsPXllcwotZmk7CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfU0VEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvc3Qgc3lzdGVtIHR5cGUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG9zdCBzeXN0ZW0gdHlwZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9ob3N0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCi0jIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCisgIGlmIHRlc3QgIngkaG9zdF9hbGlhcyIgPSB4OyB0aGVuCisgIGFjX2N2X2hvc3Q9JGFjX2N2X2J1aWxkCitlbHNlCisgIGFjX2N2X2hvc3Q9YCRTSEVMTCAiJGFjX2F1eF9kaXIvY29uZmlnLnN1YiIgJGhvc3RfYWxpYXNgIHx8CisgICAgYXNfZm5fZXJyb3IgJD8gIiRTSEVMTCAkYWNfYXV4X2Rpci9jb25maWcuc3ViICRob3N0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hvc3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ob3N0IiA+JjY7IH0KK2Nhc2UgJGFjX2N2X2hvc3QgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIGhvc3QiICIkTElORU5PIiA1OzsKK2VzYWMKK2hvc3Q9JGFjX2N2X2hvc3QKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl9ob3N0CitzaGlmdAoraG9zdF9jcHU9JDEKK2hvc3RfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgoraG9zdF9vcz0kKgorSUZTPSRhY19zYXZlX0lGUworY2FzZSAkaG9zdF9vcyBpbiAqXCAqKSBob3N0X29zPWBlY2hvICIkaG9zdF9vcyIgfCBzZWQgJ3MvIC8tL2cnYDs7IGVzYWMKKworCisjIEJhY2tzbGFzaGlmeSBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluCisjIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KK3NlZF9xdW90ZV9zdWJzdD0ncy9cKFsiYCRcXF1cKS9cXFwxL2cnCisKKyMgU2FtZSBhcyBhYm92ZSwgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZG91YmxlX3F1b3RlX3N1YnN0PSdzL1woWyJgXFxdXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCisKK0VDSE89J1xcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFwnCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KK0VDSE89JEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50IHN0cmluZ3MuLi4gIiA+JjY7IH0KKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyQxCitfTFRFQ0hPX0VPRicKKyAgfQorICBFQ0hPPSdmdW5jX2ZhbGxiYWNrX2VjaG8nCitmaQorCisjIGZ1bmNfZWNob19hbGwgYXJnLi4uCisjIEludm9rZSAkRUNITyB3aXRoIGFsbCBhcmdzLCBzcGFjZS1zZXBhcmF0ZWQuCitmdW5jX2VjaG9fYWxsICgpCit7CisgICAgJEVDSE8gIiIKK30KKworY2FzZSAiJEVDSE8iIGluCisgIHByaW50ZiopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBwcmludGYiID4mNQorJGFzX2VjaG8gInByaW50ZiIgPiY2OyB9IDs7CisgIHByaW50KikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHByaW50IC1yIiA+JjUKKyRhc19lY2hvICJwcmludCAtciIgPiY2OyB9IDs7CisgICopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBjYXQiID4mNQorJGFzX2VjaG8gImNhdCIgPiY2OyB9IDs7Citlc2FjCisKKworCisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYSBzZWQgdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGEgc2VkIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfU0VEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgICAgICAgICAgIGFjX3NjcmlwdD1zL2FhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhL2JiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYmJiYi8KKyAgICAgZm9yIGFjX2kgaW4gMSAyIDMgNCA1IDYgNzsgZG8KKyAgICAgICBhY19zY3JpcHQ9IiRhY19zY3JpcHQkYXNfbmwkYWNfc2NyaXB0IgorICAgICBkb25lCisgICAgIGVjaG8gIiRhY19zY3JpcHQiIDI+L2Rldi9udWxsIHwgc2VkIDk5cSA+Y29uZnRlc3Quc2VkCisgICAgIHsgYWNfc2NyaXB0PTsgdW5zZXQgYWNfc2NyaXB0O30KKyAgICAgaWYgdGVzdCAteiAiJFNFRCI7IHRoZW4KKyAgYWNfcGF0aF9TRURfZm91bmQ9ZmFsc2UKKyAgIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBlYWNoIG9mIFBST0dOQU1FLUxJU1QKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgbHRfYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KKyAgICBmb3IgYWNfcHJvZyBpbiBzZWQgZ3NlZDsgZG8KICAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgICAgIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGx0X2FjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCi0gICAgICAgIGx0X2FjX3NlZF9saXN0PSIkbHRfYWNfc2VkX2xpc3QgJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCIKLSAgICAgIGZpCisgICAgICBhY19wYXRoX1NFRD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfU0VEIiAmJiAkYXNfdGVzdF94ICIkYWNfcGF0aF9TRUQiOyB9IHx8IGNvbnRpbnVlCisjIENoZWNrIGZvciBHTlUgYWNfcGF0aF9TRUQgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX1NFRAorY2FzZSBgIiRhY19wYXRoX1NFRCIgLS12ZXJzaW9uIDI+JjFgIGluCisqR05VKikKKyAgYWNfY3ZfcGF0aF9TRUQ9IiRhY19wYXRoX1NFRCIgYWNfcGF0aF9TRURfZm91bmQ9Ojs7CisqKQorICBhY19jb3VudD0wCisgICRhc19lY2hvX24gMDEyMzQ1Njc4OSA+ImNvbmZ0ZXN0LmluIgorICB3aGlsZSA6CisgIGRvCisgICAgY2F0ICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0LmluIiA+ImNvbmZ0ZXN0LnRtcCIKKyAgICBtdiAiY29uZnRlc3QudG1wIiAiY29uZnRlc3QuaW4iCisgICAgY3AgImNvbmZ0ZXN0LmluIiAiY29uZnRlc3QubmwiCisgICAgJGFzX2VjaG8gJycgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9TRUQiIC1mIGNvbmZ0ZXN0LnNlZCA8ICJjb25mdGVzdC5ubCIgPiJjb25mdGVzdC5vdXQiIDI+L2Rldi9udWxsIHx8IGJyZWFrCisgICAgZGlmZiAiY29uZnRlc3Qub3V0IiAiY29uZnRlc3QubmwiID4vZGV2L251bGwgMj4mMSB8fCBicmVhaworICAgIGFzX2ZuX2FyaXRoICRhY19jb3VudCArIDEgJiYgYWNfY291bnQ9JGFzX3ZhbAorICAgIGlmIHRlc3QgJGFjX2NvdW50IC1ndCAke2FjX3BhdGhfU0VEX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX1NFRD0iJGFjX3BhdGhfU0VEIgorICAgICAgYWNfcGF0aF9TRURfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9TRURfZm91bmQgJiYgYnJlYWsgMwogICAgIGRvbmUKICAgZG9uZQotZG9uZQotSUZTPSRhc19zYXZlX0lGUwotbHRfYWNfbWF4PTAKLWx0X2FjX2NvdW50PTAKLSMgQWRkIC91c3IveHBnNC9iaW4vc2VkIGFzIGl0IGlzIHR5cGljYWxseSBmb3VuZCBvbiBTb2xhcmlzCi0jIGFsb25nIHdpdGggL2Jpbi9zZWQgdGhhdCB0cnVuY2F0ZXMgb3V0cHV0LgotZm9yIGx0X2FjX3NlZCBpbiAkbHRfYWNfc2VkX2xpc3QgL3Vzci94cGc0L2Jpbi9zZWQ7IGRvCi0gIHRlc3QgISAtZiAkbHRfYWNfc2VkICYmIGNvbnRpbnVlCi0gIGNhdCAvZGV2L251bGwgPiBjb25mdGVzdC5pbgotICBsdF9hY19jb3VudD0wCi0gIGVjaG8gJEVDSE9fTiAiMDEyMzQ1Njc4OSRFQ0hPX0MiID5jb25mdGVzdC5pbgotICAjIENoZWNrIGZvciBHTlUgc2VkIGFuZCBzZWxlY3QgaXQgaWYgaXQgaXMgZm91bmQuCi0gIGlmICIkbHRfYWNfc2VkIiAtLXZlcnNpb24gMj4mMSA8IC9kZXYvbnVsbCB8IGdyZXAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KLSAgICBsdF9jdl9wYXRoX1NFRD0kbHRfYWNfc2VkCi0gICAgYnJlYWsKLSAgZmkKLSAgd2hpbGUgdHJ1ZTsgZG8KLSAgICBjYXQgY29uZnRlc3QuaW4gY29uZnRlc3QuaW4gPmNvbmZ0ZXN0LnRtcAotICAgIG12IGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5pbgotICAgIGNwIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0Lm5sCi0gICAgZWNobyA+PmNvbmZ0ZXN0Lm5sCi0gICAgJGx0X2FjX3NlZCAtZSAncy9hJC8vJyA8IGNvbmZ0ZXN0Lm5sID5jb25mdGVzdC5vdXQgfHwgYnJlYWsKLSAgICBjbXAgLXMgY29uZnRlc3Qub3V0IGNvbmZ0ZXN0Lm5sIHx8IGJyZWFrCi0gICAgIyAxMDAwMCBjaGFycyBhcyBpbnB1dCBzZWVtcyBtb3JlIHRoYW4gZW5vdWdoCi0gICAgdGVzdCAkbHRfYWNfY291bnQgLWd0IDEwICYmIGJyZWFrCi0gICAgbHRfYWNfY291bnQ9YGV4cHIgJGx0X2FjX2NvdW50ICsgMWAKLSAgICBpZiB0ZXN0ICRsdF9hY19jb3VudCAtZ3QgJGx0X2FjX21heDsgdGhlbgotICAgICAgbHRfYWNfbWF4PSRsdF9hY19jb3VudAotICAgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAotICAgIGZpCiAgIGRvbmUKLWRvbmUKLQorSUZTPSRhc19zYXZlX0lGUworICBpZiB0ZXN0IC16ICIkYWNfY3ZfcGF0aF9TRUQiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgc2VkIGNvdWxkIGJlIGZvdW5kIGluIFwkUEFUSCIgIiRMSU5FTk8iIDUKKyAgZmkKK2Vsc2UKKyAgYWNfY3ZfcGF0aF9TRUQ9JFNFRAogZmkKIAotU0VEPSRsdF9jdl9wYXRoX1NFRAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcGF0aF9TRUQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX1NFRCIgPiY2OyB9CisgU0VEPSIkYWNfY3ZfcGF0aF9TRUQiCisgIHJtIC1mIGNvbmZ0ZXN0LnNlZAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTRUQiID4mNgordGVzdCAteiAiJFNFRCIgJiYgU0VEPXNlZAorWHNlZD0iJFNFRCAtZSAxcy9eWC8vIgogCiAKLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtZ251LWxkIG9yIC0td2l0aG91dC1nbnUtbGQgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX2dudV9sZCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9nbnVfbGQiCi0gIHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZmdyZXAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGZncmVwLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3BhdGhfRkdSRVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBlY2hvICdhYipjJyB8ICRHUkVQIC1GICdhYipjJyA+L2Rldi9udWxsIDI+JjEKKyAgIHRoZW4gYWNfY3ZfcGF0aF9GR1JFUD0iJEdSRVAgLUYiCisgICBlbHNlCisgICAgIGlmIHRlc3QgLXogIiRGR1JFUCI7IHRoZW4KKyAgYWNfcGF0aF9GR1JFUF9mb3VuZD1mYWxzZQorICAjIExvb3AgdGhyb3VnaCB0aGUgdXNlcidzIHBhdGggYW5kIHRlc3QgZm9yIGVhY2ggb2YgUFJPR05BTUUtTElTVAorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRIJFBBVEhfU0VQQVJBVE9SL3Vzci94cGc0L2JpbgorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19wcm9nIGluIGZncmVwOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgYWNfcGF0aF9GR1JFUD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIKKyAgICAgIHsgdGVzdCAtZiAiJGFjX3BhdGhfRkdSRVAiICYmICRhc190ZXN0X3ggIiRhY19wYXRoX0ZHUkVQIjsgfSB8fCBjb250aW51ZQorIyBDaGVjayBmb3IgR05VIGFjX3BhdGhfRkdSRVAgYW5kIHNlbGVjdCBpdCBpZiBpdCBpcyBmb3VuZC4KKyAgIyBDaGVjayBmb3IgR05VICRhY19wYXRoX0ZHUkVQCitjYXNlIGAiJGFjX3BhdGhfRkdSRVAiIC0tdmVyc2lvbiAyPiYxYCBpbgorKkdOVSopCisgIGFjX2N2X3BhdGhfRkdSRVA9IiRhY19wYXRoX0ZHUkVQIiBhY19wYXRoX0ZHUkVQX2ZvdW5kPTo7OworKikKKyAgYWNfY291bnQ9MAorICAkYXNfZWNob19uIDAxMjM0NTY3ODkgPiJjb25mdGVzdC5pbiIKKyAgd2hpbGUgOgorICBkbworICAgIGNhdCAiY29uZnRlc3QuaW4iICJjb25mdGVzdC5pbiIgPiJjb25mdGVzdC50bXAiCisgICAgbXYgImNvbmZ0ZXN0LnRtcCIgImNvbmZ0ZXN0LmluIgorICAgIGNwICJjb25mdGVzdC5pbiIgImNvbmZ0ZXN0Lm5sIgorICAgICRhc19lY2hvICdGR1JFUCcgPj4gImNvbmZ0ZXN0Lm5sIgorICAgICIkYWNfcGF0aF9GR1JFUCIgRkdSRVAgPCAiY29uZnRlc3QubmwiID4iY29uZnRlc3Qub3V0IiAyPi9kZXYvbnVsbCB8fCBicmVhaworICAgIGRpZmYgImNvbmZ0ZXN0Lm91dCIgImNvbmZ0ZXN0Lm5sIiA+L2Rldi9udWxsIDI+JjEgfHwgYnJlYWsKKyAgICBhc19mbl9hcml0aCAkYWNfY291bnQgKyAxICYmIGFjX2NvdW50PSRhc192YWwKKyAgICBpZiB0ZXN0ICRhY19jb3VudCAtZ3QgJHthY19wYXRoX0ZHUkVQX21heC0wfTsgdGhlbgorICAgICAgIyBCZXN0IG9uZSBzbyBmYXIsIHNhdmUgaXQgYnV0IGtlZXAgbG9va2luZyBmb3IgYSBiZXR0ZXIgb25lCisgICAgICBhY19jdl9wYXRoX0ZHUkVQPSIkYWNfcGF0aF9GR1JFUCIKKyAgICAgIGFjX3BhdGhfRkdSRVBfbWF4PSRhY19jb3VudAorICAgIGZpCisgICAgIyAxMCooMl4xMCkgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGFjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICBkb25lCisgIHJtIC1mIGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LnRtcCBjb25mdGVzdC5ubCBjb25mdGVzdC5vdXQ7OworZXNhYworCisgICAgICAkYWNfcGF0aF9GR1JFUF9mb3VuZCAmJiBicmVhayAzCisgICAgZG9uZQorICBkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKyAgaWYgdGVzdCAteiAiJGFjX2N2X3BhdGhfRkdSRVAiOyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgZmdyZXAgY291bGQgYmUgZm91bmQgaW4gJFBBVEgkUEFUSF9TRVBBUkFUT1IvdXNyL3hwZzQvYmluIiAiJExJTkVOTyIgNQorICBmaQorZWxzZQorICBhY19jdl9wYXRoX0ZHUkVQPSRGR1JFUAorZmkKKworICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3BhdGhfRkdSRVAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wYXRoX0ZHUkVQIiA+JjY7IH0KKyBGR1JFUD0iJGFjX2N2X3BhdGhfRkdSRVAiCisKKwordGVzdCAteiAiJEdSRVAiICYmIEdSRVA9Z3JlcAorCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfZ251X2xkK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9nbnVfbGQ7IHRlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllcwogZWxzZQogICB3aXRoX2dudV9sZD1ubwotZmk7CitmaQorCiBhY19wcm9nPWxkCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogICAjIENoZWNrIGlmIGdjYyAtcHJpbnQtcHJvZy1uYW1lPWxkIGdpdmVzIGEgcGF0aC4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsZCB1c2VkIGJ5ICRDQy4uLiAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxkIHVzZWQgYnkgJENDLi4uICIgPiY2OyB9CiAgIGNhc2UgJGhvc3QgaW4KICAgKi0qLW1pbmd3KikKICAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3CkBAIC01MDU0LDkgKzgxMjgsOSBAQAogICAgIFtcXC9dKiB8ID86W1xcL10qKQogICAgICAgcmVfZGlyZWx0PScvW14vXVteL10qL1wuXC4vJwogICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCi0gICAgICBhY19wcm9nPWBlY2hvICRhY19wcm9nfCAkU0VEICdzJVxcXFwlLyVnJ2AKLSAgICAgIHdoaWxlIGVjaG8gJGFjX3Byb2cgfCBncmVwICIkcmVfZGlyZWx0IiA+IC9kZXYvbnVsbCAyPiYxOyBkbwotCWFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgInMlJHJlX2RpcmVsdCUvJSJgCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKICAgICAgIGRvbmUKICAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgogICAgICAgOzsKQEAgLTUwNzAsMTQgKzgxNDQsMTQgQEAKICAgICA7OwogICBlc2FjCiBlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEdOVSBsZC4uLiAiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igbm9uLUdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAiID4mNjsgfQogZmkKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9MRCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoraWYgJHtsdF9jdl9wYXRoX0xEKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgogICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKQEAgLTUxMDcsMTkgKzgxODEsMTcgQEAKIAogTEQ9IiRsdF9jdl9wYXRoX0xEIgogaWYgdGVzdCAtbiAiJExEIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTEQiID4mNQotZWNobyAiJHtFQ0hPX1R9JExEIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMRCIgPiY1CiskYXNfZWNobyAiJExEIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCi10ZXN0IC16ICIkTEQiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3Rlc3QgLXogIiRMRCIgJiYgYXNfZm5fZXJyb3IgJD8gIm5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiAiJExJTkVOTyIgNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2dudV9sZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICMgSSdkIHJhdGhlciB1c2UgLS12ZXJzaW9uIGhlcmUsIGJ1dCBhcHBhcmVudGx5IHNvbWUgR05VIGxkcyBvbmx5IGFjY2VwdCAtdi4KIGNhc2UgYCRMRCAtdiAyPiYxIDwvZGV2L251bGxgIGluCkBAIC01MTMxLDQwICs4MjAzLDIyIEBACiAgIDs7CiBlc2FjCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19nbnVfbGQiID4mNjsgfQogd2l0aF9nbnVfbGQ9JGx0X2N2X3Byb2dfZ251X2xkCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9sZF9yZWxvYWRfZmxhZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9sZF9yZWxvYWRfZmxhZz0nLXInCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2xkX3JlbG9hZF9mbGFnIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2Ci1yZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKLWNhc2UgJHJlbG9hZF9mbGFnIGluCi0iIiB8ICIgIiopIDs7Ci0qKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKLWVzYWMKLXJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgZGFyd2luKikKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgICAgcmVsb2FkX2NtZHM9JyRMVENDICRMVENGTEFHUyAtbm9zdGRsaWIgJHt3bH0tciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotICAgIGVsc2UKLSAgICAgIHJlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLSAgICBmaQotICAgIDs7Ci1lc2FjCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQlNELWNvbXBhdGlibGUgbm0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTk0rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3RlciAobm0pIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIgKG5tKS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wYXRoX05NKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAtbiAiJE5NIjsgdGhlbgogICAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KQEAgLTUyMDcsMTkxOSArODI2MSwxNjcgQEAKICAgICBkb25lCiAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCiAgIGRvbmUKLSAgdGVzdCAteiAiJGx0X2N2X3BhdGhfTk0iICYmIGx0X2N2X3BhdGhfTk09bm0KKyAgOiAke2x0X2N2X3BhdGhfTk09bm99CiBmaQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wYXRoX05NIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wYXRoX05NIiA+JjYKLU5NPSIkbHRfY3ZfcGF0aF9OTSIKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgbG4gLXMgd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotTE5fUz0kYXNfbG5fcwotaWYgdGVzdCAiJExOX1MiID0gImxuIC1zIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcGF0aF9OTSIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfTk0iID4mNjsgfQoraWYgdGVzdCAiJGx0X2N2X3BhdGhfTk0iICE9ICJubyI7IHRoZW4KKyAgTk09IiRsdF9jdl9wYXRoX05NIgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubywgdXNpbmcgJExOX1MiID4mNQotZWNobyAiJHtFQ0hPX1R9bm8sIHVzaW5nICRMTl9TIiA+JjYKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gcmVjb2duaXplIGRlcGVuZGVudCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJwotbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9Ci1sdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKLSMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAotIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgotIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCi0jIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KLSMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KLSMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KLSMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKLSMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCi0jIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKLSMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeFs0LTldKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotYmVvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJwotICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KLSAgOzsKLQotY3lnd2luKikKLSAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCi0gIDs7Ci0KLW1pbmd3KiB8IHB3MzIqKQotICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5Ci0gICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAotICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgotICBpZiAoIGZpbGUgLyApID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgICMgRGlkbid0IGZpbmQgYW55IEJTRCBjb21wYXRpYmxlIG5hbWUgbGlzdGVyLCBsb29rIGZvciBkdW1wYmluLgorICBpZiB0ZXN0IC1uICIkRFVNUEJJTiI7IHRoZW4gOgorICAgICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogICBlbHNlCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJwotICBmaQotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCi0gICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICBpKjg2ICkKLSAgICAgICMgTm90IHN1cmUgd2hldGhlciB0aGUgcHJlc2VuY2Ugb2YgT3BlbkJTRCBoZXJlIHdhcyBhIG1pc3Rha2UuCi0gICAgICAjIExldCdzIGFjY2VwdCBib3RoIG9mIHRoZW0gdW50aWwgdGhpcyBpcyBjbGVhcmVkIHVwLgotICAgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKEZyZWVCU0R8T3BlbkJTRHxEcmFnb25GbHkpL2lbMy05XTg2IChjb21wYWN0ICk/ZGVtYW5kIHBhZ2VkIHNoYXJlZCBsaWJyYXJ5JwotICAgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICAgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zby4qYAotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICBmaQotICA7OwotCi1nbnUqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1ocHV4MTAuMjAqIHwgaHB1eDExKikKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBjYXNlICRob3N0X2NwdSBpbgotICBpYTY0KikKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbwotICAgIDs7Ci0gIGhwcGEqNjQqKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRi1bMC05XVswLTldKSBzaGFyZWQgb2JqZWN0IGZpbGUgLSBQQS1SSVNDIFswLTldLlswLTldJwotICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL3BhMjBfNjQvbGliYy5zbAotICAgIDs7Ci0gICopCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18UEEtUklTQ1swLTldLlswLTldKSBzaGFyZWQgbGlicmFyeScKLSAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICAjIFBJQyBjb2RlIGlzIGJyb2tlbiBvbiBJbnRlcml4IDMueCwgdGhhdCdzIHdoeSB8XC5hIG5vdCB8X3BpY1wuYSBoZXJlCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfFwuYSkkJwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRMRCBpbgotICAqLTMyfCoiLTMyICIpIGxpYm1hZ2ljPTMyLWJpdDs7Ci0gICotbjMyfCoiLW4zMiAiKSBsaWJtYWdpYz1OMzI7OwotICAqLTY0fCoiLTY0ICIpIGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICopIGxpYm1hZ2ljPW5ldmVyLW1hdGNoOzsKLSAgZXNhYwotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1uZXRic2QqKQotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCi0gIGVsc2UKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW14vXSsoXC5zb3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW5ld29zNiopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW01MXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKLSAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQotICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KLSAgOzsKLQotbnRvLXFueCopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KLSAgOzsKLQotb3BlbmJzZCopCi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKLSAgZWxzZQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCi0gIGZpCi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLQotcmRvcyopCi0gIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICBjYXNlICRob3N0X3ZlbmRvciBpbgotICBtb3Rvcm9sYSkKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtNTF1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYikgTVswLTldWzAtOV0qIFZlcnNpb24gWzAtOV0nCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9YGVjaG8gL3Vzci9saWIvbGliYy5zbypgCi0gICAgOzsKLSAgbmNyKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgc2VxdWVudCkKLSAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJwotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliICknCi0gICAgOzsKLSAgc25pKQotICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCi0gICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9ImZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTE1dU0IgZHluYW1pYyBsaWIiCi0gICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L2xpYi9saWJjLnNvCi0gICAgOzsKLSAgc2llbWVucykKLSAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAotICAgIDs7Ci0gIHBjKQotICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKLSAgOzsKLWVzYWMKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNgotZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKLXRlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgotCi0KLQotCi0jIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgotTFRDQz0ke0xUQ0MtIiRDQyJ9Ci0KLSMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KLUxUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotY29tcGlsZXI9JENDCi0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1saWJ0b29sLWxvY2sgb3IgLS1kaXNhYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2xpYnRvb2xfbG9jayIKLQotZmk7Ci10ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcwotCi0jIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKLSMgbGlidG9vbCBzdXBwb3J0LgotY2FzZSAkaG9zdCBpbgotaWE2NC0qLWhwdXgqKQotICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCi0gIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0Ci0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgdGhlbgotICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KLSAgICAqRUxGLTMyKikKLSAgICAgIEhQVVhfSUE2NF9NT0RFPSIzMiIKLSAgICAgIDs7Ci0gICAgKkVMRi02NCopCi0gICAgICBIUFVYX0lBNjRfTU9ERT0iNjQiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgcm0gLXJmIGNvbmZ0ZXN0KgotICA7OwotKi0qLWlyaXg2KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICcjbGluZSA1NDYzICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCi0gICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgotICAgICAgOzsKLSAgICBlc2FjCi0gICBlbHNlCi0gICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgotICAgICozMi1iaXQqKQotICAgICAgTEQ9IiR7TEQtbGR9IC0zMiIKLSAgICAgIDs7Ci0gICAgKk4zMiopCi0gICAgICBMRD0iJHtMRC1sZH0gLW4zMiIKLSAgICAgIDs7Ci0gICAgKjY0LWJpdCopCi0gICAgICBMRD0iJHtMRC1sZH0gLTY0IgotICAgICAgOzsKLSAgICBlc2FjCi0gICBmaQotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLXg4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAotczM5MCotKmxpbnV4KnxzcGFyYyotKmxpbnV4KikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjMyLWJpdCopCi0gICAgICBjYXNlICRob3N0IGluCi0gICAgICAgIHg4Nl82NC0qa2ZyZWVic2QqLWdudSkKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKLSAgICAgICAgICA7OwotICAgICAgICB4ODZfNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCi0gICAgICAgICAgOzsKLSAgICAgICAgcHBjNjQtKmxpbnV4Knxwb3dlcnBjNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKLSAgICAgICAgICA7OwotICAgICAgICBzMzkweC0qbGludXgqKQotICAgICAgICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYzY0LSpsaW51eCopCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICo2NC1iaXQqKQotICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICB4ODZfNjQtKmtmcmVlYnNkKi1nbnUpCi0gICAgICAgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZl94ODZfNjRfZmJzZCIKLSAgICAgICAgICA7OwotICAgICAgICB4ODZfNjQtKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NCIKLSAgICAgICAgICA7OwotICAgICAgICBwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRwcGMiCi0gICAgICAgICAgOzsKLSAgICAgICAgczM5MCotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfczM5MCIKLSAgICAgICAgICA7OwotICAgICAgICBzcGFyYyotKmxpbnV4KikKLSAgICAgICAgICBMRD0iJHtMRC1sZH0gLW0gZWxmNjRfc3BhcmMiCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLSotKi1zY28zLjJ2NSopCi0gICMgT24gU0NPIE9wZW5TZXJ2ZXIgNSwgd2UgbmVlZCAtYmVsZiB0byBnZXQgZnVsbC1mZWF0dXJlZCBiaW5hcmllcy4KLSAgU0FWRV9DRkxBR1M9IiRDRkxBR1MiCi0gIENGTEFHUz0iJENGTEFHUyAtYmVsZiIKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBDIGNvbXBpbGVyIG5lZWRzIC1iZWxmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9jY19uZWVkc19iZWxmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotICAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotaW50Ci1tYWluICgpCi17Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBsdF9jdl9jY19uZWVkc19iZWxmPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1sdF9jdl9jY19uZWVkc19iZWxmPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgICAgYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2NjX25lZWRzX2JlbGYiID4mNgotICBpZiB0ZXN0IHgiJGx0X2N2X2NjX25lZWRzX2JlbGYiICE9IHgieWVzIjsgdGhlbgotICAgICMgdGhpcyBpcyBwcm9iYWJseSBnY2MgMi44LjAsIGVnY3MgMS4wIG9yIG5ld2VyOyBubyBuZWVkIGZvciAtYmVsZgotICAgIENGTEFHUz0iJFNBVkVfQ0ZMQUdTIgotICBmaQotICA7Owotc3BhcmMqLSpzb2xhcmlzKikKLSAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgotICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCi0gICAgKjY0LWJpdCopCi0gICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgotICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OwotICAgICAgKikKLSAgICAgICAgaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICBMRD0iJHtMRC1sZH0gLTY0IgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICBybSAtcmYgY29uZnRlc3QqCi0gIDs7Ci0KLSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKikKLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0gIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0RMTFRPT0w9IiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLURMTFRPT0w9JGFjX2N2X3Byb2dfRExMVE9PTAotaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRETExUT09MIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRETExUT09MIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RMTFRPT0wiOyB0aGVuCi0gIGFjX2N0X0RMTFRPT0w9JERMTFRPT0wKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkbGx0b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBkbGx0b29sOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RMTFRPT0wiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfRExMVE9PTD0iJGFjX2N0X0RMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MIiAmJiBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImZhbHNlIgotZmkKLWZpCi1hY19jdF9ETExUT09MPSRhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wKLWlmIHRlc3QgLW4gIiRhY19jdF9ETExUT09MIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRExMVE9PTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfRExMVE9PTCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgRExMVE9PTD0kYWNfY3RfRExMVE9PTAotZWxzZQotICBETExUT09MPSIkYWNfY3ZfcHJvZ19ETExUT09MIgotZmkKLQotICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1hcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1hczsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19BUytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkQVMiOyB0aGVuCi0gIGFjX2N2X3Byb2dfQVM9IiRBUyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1BUz0kYWNfY3ZfcHJvZ19BUwotaWYgdGVzdCAtbiAiJEFTIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkQVMiID4mNQotZWNobyAiJHtFQ0hPX1R9JEFTIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0FTIjsgdGhlbgotICBhY19jdF9BUz0kQVMKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJhcyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgYXM7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfQVMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0FTIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0FTPSIkYWNfY3RfQVMiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0FTPSJhcyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0FTIiAmJiBhY19jdl9wcm9nX2FjX2N0X0FTPSJmYWxzZSIKLWZpCi1maQotYWNfY3RfQVM9JGFjX2N2X3Byb2dfYWNfY3RfQVMKLWlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0FTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9BUyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgQVM9JGFjX2N0X0FTCi1lbHNlCi0gIEFTPSIkYWNfY3ZfcHJvZ19BUyIKLWZpCi0KLSAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX09CSkRVTVA9IiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLU9CSkRVTVA9JGFjX2N2X3Byb2dfT0JKRFVNUAotaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRPQkpEVU1QIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX09CSkRVTVAiOyB0aGVuCi0gIGFjX2N0X09CSkRVTVA9JE9CSkRVTVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvYmpkdW1wIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBvYmpkdW1wOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X09CSkRVTVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfT0JKRFVNUD0iJGFjX2N0X09CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QIiAmJiBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9ImZhbHNlIgotZmkKLWZpCi1hY19jdF9PQkpEVU1QPSRhY19jdl9wcm9nX2FjX2N0X09CSkRVTVAKLWlmIHRlc3QgLW4gIiRhY19jdF9PQkpEVU1QIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfT0JKRFVNUCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfT0JKRFVNUCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgT0JKRFVNUD0kYWNfY3RfT0JKRFVNUAotZWxzZQotICBPQkpEVU1QPSIkYWNfY3ZfcHJvZ19PQkpEVU1QIgotZmkKLQotICA7OwotCi1lc2FjCi0KLW5lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3RkYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxmbG9hdC5oPgotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2hlYWRlcl9zdGRjPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKLSMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKLSNlbHNlCi0jIGRlZmluZSBJU0xPV0VSKGMpIFwKLQkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKLQkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCi0JCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQotI2VuZGlmCi0KLSNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCi1pbnQKLW1haW4gKCkKLXsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCi0JfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCi0gICAgICBleGl0KDIpOwotICBleGl0ICgwKTsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLV9BQ0VPRgotCi1maQotCi0jIE9uIElSSVggNS4zLCBzeXMvdHlwZXMgYW5kIGludHR5cGVzLmggYXJlIGNvbmZsaWN0aW5nLgotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvdHlwZXMuaCBzeXMvc3RhdC5oIHN0ZGxpYi5oIHN0cmluZy5oIG1lbW9yeS5oIHN0cmluZ3MuaCBcCi0JCSAgaW50dHlwZXMuaCBzdGRpbnQuaCB1bmlzdGQuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gIGZvciBhY19wcm9nIGluICRDQ0MgZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKICAgZG8KICAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0RVTVBCSU4rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0IC1uICIkQ1hYIjsgdGhlbgotICBhY19jdl9wcm9nX0NYWD0iJENYWCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbgorICBhY19jdl9wcm9nX0RVTVBCSU49IiREVU1QQklOIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KIGVsc2UKIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKIGZvciBhc19kaXIgaW4gJFBBVEgKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19DWFg9IiRhY190b29sX3ByZWZpeCRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFVNUEJJTj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKIGZpCiBmaQotQ1hYPSRhY19jdl9wcm9nX0NYWAotaWYgdGVzdCAtbiAiJENYWCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJENYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQ1hYIiA+JjYKK0RVTVBCSU49JGFjX2N2X3Byb2dfRFVNUEJJTgoraWYgdGVzdCAtbiAiJERVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJERVTVBCSU4iID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAotICAgIHRlc3QgLW4gIiRDWFgiICYmIGJyZWFrCisKKyAgICB0ZXN0IC1uICIkRFVNUEJJTiIgJiYgYnJlYWsKICAgZG9uZQogZmkKLWlmIHRlc3QgLXogIiRDWFgiOyB0aGVuCi0gIGFjX2N0X0NYWD0kQ1hYCi0gIGZvciBhY19wcm9nIGluICRDQ0MgZysrIGMrKyBncHAgYUNDIENDIGN4eCBjYysrIGNsIEZDQyBLQ0MgUkNDIHhsQ19yIHhsQworaWYgdGVzdCAteiAiJERVTVBCSU4iOyB0aGVuCisgIGFjX2N0X0RVTVBCSU49JERVTVBCSU4KKyAgZm9yIGFjX3Byb2cgaW4gZHVtcGJpbiAibGluayAtZHVtcCIKIGRvCiAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9DWFgiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfQ1hYPSIkYWNfY3RfQ1hYIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTj0iJGFjX2N0X0RVTVBCSU4iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgogZWxzZQogYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgogZm9yIGFzX2RpciBpbiAkUEFUSAogZG8KICAgSUZTPSRhc19zYXZlX0lGUwogICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0NYWD0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9EVU1QQklOPSIkYWNfcHJvZyIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKICAgICBicmVhayAyCiAgIGZpCiBkb25lCi1kb25lCi0KLWZpCi1maQotYWNfY3RfQ1hYPSRhY19jdl9wcm9nX2FjX2N0X0NYWAotaWYgdGVzdCAtbiAiJGFjX2N0X0NYWCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X0NYWCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQ1hYIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkYWNfY3RfQ1hYIiAmJiBicmVhawotZG9uZQotdGVzdCAtbiAiJGFjX2N0X0NYWCIgfHwgYWNfY3RfQ1hYPSJnKysiCi0KLSAgQ1hYPSRhY19jdF9DWFgKLWZpCi0KLQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IiBcCi0gICAgICJjaGVja2luZyBmb3IgQysrIGNvbXBpbGVyIHZlcnNpb24iID4mNQotYWNfY29tcGlsZXI9YHNldCBYICRhY19jb21waWxlOyBlY2hvICQyYAoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLS12ZXJzaW9uIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQoteyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZXIgLXYgPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC1WIDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEMrKyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgd2UgYXJlIHVzaW5nIHRoZSBHTlUgQysrIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jeHhfY29tcGlsZXJfZ251K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgX19HTlVDX18KLSAgICAgICBjaG9rZSBtZQotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2NvbXBpbGVyX2dudT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY29tcGlsZXJfZ251PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotYWNfY3ZfY3h4X2NvbXBpbGVyX2dudT0kYWNfY29tcGlsZXJfZ251Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY3h4X2NvbXBpbGVyX2dudSIgPiY2Ci1HWFg9YHRlc3QgJGFjX2NvbXBpbGVyX2dudSA9IHllcyAmJiBlY2hvIHllc2AKLWFjX3Rlc3RfQ1hYRkxBR1M9JHtDWFhGTEFHUytzZXR9Ci1hY19zYXZlX0NYWEZMQUdTPSRDWFhGTEFHUwotQ1hYRkxBR1M9Ii1nIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJENYWCBhY2NlcHRzIC1nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ1hYIGFjY2VwdHMgLWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfY3h4X2crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9wcm9nX2N4eF9nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9wcm9nX2N4eF9nPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9wcm9nX2N4eF9nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wcm9nX2N4eF9nIiA+JjYKLWlmIHRlc3QgIiRhY190ZXN0X0NYWEZMQUdTIiA9IHNldDsgdGhlbgotICBDWFhGTEFHUz0kYWNfc2F2ZV9DWFhGTEFHUwotZWxpZiB0ZXN0ICRhY19jdl9wcm9nX2N4eF9nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgQ1hYRkxBR1M9Ii1nIC1PMiIKLSAgZWxzZQotICAgIENYWEZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgICBDWFhGTEFHUz0iLU8yIgotICBlbHNlCi0gICAgQ1hYRkxBR1M9Ci0gIGZpCi1maQotZm9yIGFjX2RlY2xhcmF0aW9uIGluIFwKLSAgICcnIFwKLSAgICdleHRlcm4gIkMiIHZvaWQgc3RkOjpleGl0IChpbnQpIHRocm93ICgpOyB1c2luZyBzdGQ6OmV4aXQ7JyBcCi0gICAnZXh0ZXJuICJDIiB2b2lkIHN0ZDo6ZXhpdCAoaW50KTsgdXNpbmcgc3RkOjpleGl0OycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpIHRocm93ICgpOycgXAotICAgJ2V4dGVybiAiQyIgdm9pZCBleGl0IChpbnQpOycgXAotICAgJ3ZvaWQgZXhpdCAoaW50KTsnCi1kbwotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19kZWNsYXJhdGlvbgotaW50Ci1tYWluICgpCi17Ci1leGl0ICg0Mik7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY3h4X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZG9uZQotcm0gLWYgY29uZnRlc3QqCi1pZiB0ZXN0IC1uICIkYWNfZGVjbGFyYXRpb24iOyB0aGVuCi0gIGVjaG8gJyNpZmRlZiBfX2NwbHVzcGx1cycgPj5jb25mZGVmcy5oCi0gIGVjaG8gJGFjX2RlY2xhcmF0aW9uICAgICAgPj5jb25mZGVmcy5oCi0gIGVjaG8gJyNlbmRpZicgICAgICAgICAgICAgPj5jb25mZGVmcy5oCi1maQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLQotCi1pZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgotICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgotICBhY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIHJ1biB0aGUgQysrIHByZXByb2Nlc3NvciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBydW4gdGhlIEMrKyBwcmVwcm9jZXNzb3IuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0IC16ICIkQ1hYQ1BQIjsgdGhlbgotICBpZiB0ZXN0ICIke2FjX2N2X3Byb2dfQ1hYQ1BQK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICAgICAjIERvdWJsZSBxdW90ZXMgYmVjYXVzZSBDWFhDUFAgbmVlZHMgdG8gYmUgZXhwYW5kZWQKLSAgICBmb3IgQ1hYQ1BQIGluICIkQ1hYIC1FIiAiL2xpYi9jcHAiCi0gICAgZG8KLSAgICAgIGFjX3ByZXByb2Nfb2s9ZmFsc2UKLWZvciBhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcgaW4gJycgeWVzCi1kbwotICAjIFVzZSBhIGhlYWRlciBmaWxlIHRoYXQgY29tZXMgd2l0aCBnY2MsIHNvIGNvbmZpZ3VyaW5nIGdsaWJjCi0gICMgd2l0aCBhIGZyZXNoIGNyb3NzLWNvbXBpbGVyIHdvcmtzLgotICAjIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgIyA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuCi0gICMgT24gdGhlIE5lWFQsIGNjIC1FIHJ1bnMgdGhlIGNvZGUgdGhyb3VnaCB0aGUgY29tcGlsZXIncyBwYXJzZXIsCi0gICMgbm90IGp1c3QgdGhyb3VnaCBjcHAuICJTeW50YXggZXJyb3IiIGlzIGhlcmUgdG8gY2F0Y2ggdGhpcyBjYXNlLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0JCSAgICAgU3ludGF4IGVycm9yCi1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2N4eF9wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY3h4X3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICA6Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBCcm9rZW46IGZhaWxzIG9uIHZhbGlkIGlucHV0LgotY29udGludWUKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi0gICMgT0ssIHdvcmtzIG9uIHNhbmUgY2FzZXMuICBOb3cgY2hlY2sgd2hldGhlciBub24tZXhpc3RlbnQgaGVhZGVycwotICAjIGNhbiBiZSBkZXRlY3RlZCBhbmQgaG93LgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxhY19ub25leGlzdGVudC5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgIyBCcm9rZW46IHN1Y2Nlc3Mgb24gaW52YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgIyBQYXNzZXMgYm90aCB0ZXN0cy4KLWFjX3ByZXByb2Nfb2s9OgotYnJlYWsKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotCi1kb25lCi0jIEJlY2F1c2Ugb2YgYGJyZWFrJywgX0FDX1BSRVBST0NfSUZFTFNFJ3MgY2xlYW5pbmcgY29kZSB3YXMgc2tpcHBlZC4KLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1pZiAkYWNfcHJlcHJvY19vazsgdGhlbgotICBicmVhawotZmkKLQotICAgIGRvbmUKLSAgICBhY19jdl9wcm9nX0NYWENQUD0kQ1hYQ1BQCi0KLWZpCi0gIENYWENQUD0kYWNfY3ZfcHJvZ19DWFhDUFAKLWVsc2UKLSAgYWNfY3ZfcHJvZ19DWFhDUFA9JENYWENQUAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDWFhDUFAiID4mNQotZWNobyAiJHtFQ0hPX1R9JENYWENQUCIgPiY2Ci1hY19wcmVwcm9jX29rPWZhbHNlCi1mb3IgYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnIGluICcnIHllcwotZG8KLSAgIyBVc2UgYSBoZWFkZXIgZmlsZSB0aGF0IGNvbWVzIHdpdGggZ2NjLCBzbyBjb25maWd1cmluZyBnbGliYwotICAjIHdpdGggYSBmcmVzaCBjcm9zcy1jb21waWxlciB3b3Jrcy4KLSAgIyBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICMgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLgotICAjIE9uIHRoZSBOZVhULCBjYyAtRSBydW5zIHRoZSBjb2RlIHRocm91Z2ggdGhlIGNvbXBpbGVyJ3MgcGFyc2VyLAotICAjIG5vdCBqdXN0IHRocm91Z2ggY3BwLiAiU3ludGF4IGVycm9yIiBpcyBoZXJlIHRvIGNhdGNoIHRoaXMgY2FzZS4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCQkgICAgIFN5bnRheCBlcnJvcgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jeHhfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2N4eF93ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgOgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgQnJva2VuOiBmYWlscyBvbiB2YWxpZCBpbnB1dC4KLWNvbnRpbnVlCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotICAjIE9LLCB3b3JrcyBvbiBzYW5lIGNhc2VzLiAgTm93IGNoZWNrIHdoZXRoZXIgbm9uLWV4aXN0ZW50IGhlYWRlcnMKLSAgIyBjYW4gYmUgZGV0ZWN0ZWQgYW5kIGhvdy4KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8YWNfbm9uZXhpc3RlbnQuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY3h4X3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jeHhfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gICMgQnJva2VuOiBzdWNjZXNzIG9uIGludmFsaWQgaW5wdXQuCi1jb250aW51ZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gICMgUGFzc2VzIGJvdGggdGVzdHMuCi1hY19wcmVwcm9jX29rPToKLWJyZWFrCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLQotZG9uZQotIyBCZWNhdXNlIG9mIGBicmVhaycsIF9BQ19QUkVQUk9DX0lGRUxTRSdzIGNsZWFuaW5nIGNvZGUgd2FzIHNraXBwZWQuCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotaWYgJGFjX3ByZXByb2Nfb2s7IHRoZW4KLSAgOgotZWxzZQotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDKysgcHJlcHJvY2Vzc29yIFwiJENYWENQUFwiIGZhaWxzIHNhbml0eSBjaGVjawotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQysrIHByZXByb2Nlc3NvciBcIiRDWFhDUFBcIiBmYWlscyBzYW5pdHkgY2hlY2sKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi1hY19leHQ9Y2MKLWFjX2NwcD0nJENYWENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ1hYIC1jICRDWFhGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ1hYIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ1hYRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jeHhfY29tcGlsZXJfZ251Ci0KLWZpCi0KLQotYWNfZXh0PWYKLWFjX2NvbXBpbGU9JyRGNzcgLWMgJEZGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRGNzcgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRGRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2Y3N19jb21waWxlcl9nbnUKLWlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgZm9yIGFjX3Byb2cgaW4gZzc3IGY3NyB4bGYgZnJ0IHBnZjc3IGZvcnQ3NyBmbDMyIGFmNzcgZjkwIHhsZjkwIHBnZjkwIGVwY2Y5MCBmOTUgZm9ydCB4bGY5NSBpZmMgZWZjIHBnZjk1IGxmOTUgZ2ZvcnRyYW4KLSAgZG8KLSAgICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY190b29sX3ByZWZpeCRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEY3NyI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19GNzc9IiRGNzciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0Y3Nz0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1GNzc9JGFjX2N2X3Byb2dfRjc3Ci1pZiB0ZXN0IC1uICIkRjc3IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRGNzciID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gICAgdGVzdCAtbiAiJEY3NyIgJiYgYnJlYWsKICAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCiBmaQotaWYgdGVzdCAteiAiJEY3NyI7IHRoZW4KLSAgYWNfY3RfRjc3PSRGNzcKLSAgZm9yIGFjX3Byb2cgaW4gZzc3IGY3NyB4bGYgZnJ0IHBnZjc3IGZvcnQ3NyBmbDMyIGFmNzcgZjkwIHhsZjkwIHBnZjkwIGVwY2Y5MCBmOTUgZm9ydCB4bGY5NSBpZmMgZWZjIHBnZjk1IGxmOTUgZ2ZvcnRyYW4KLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorZmkKK2FjX2N0X0RVTVBCSU49JGFjX2N2X3Byb2dfYWNfY3RfRFVNUEJJTgoraWYgdGVzdCAtbiAiJGFjX2N0X0RVTVBCSU4iOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFVNUEJJTiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0RVTVBCSU4iID4mNjsgfQogZWxzZQotICBpZiB0ZXN0IC1uICIkYWNfY3RfRjc3IjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0Y3Nz0iJGFjX2N0X0Y3NyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfYWNfY3RfRjc3PSIkYWNfcHJvZyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworICB0ZXN0IC1uICIkYWNfY3RfRFVNUEJJTiIgJiYgYnJlYWsKIGRvbmUKIAotZmkKLWZpCi1hY19jdF9GNzc9JGFjX2N2X3Byb2dfYWNfY3RfRjc3Ci1pZiB0ZXN0IC1uICIkYWNfY3RfRjc3IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdF9GNzciID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRhY19jdF9GNzciICYmIGJyZWFrCi1kb25lCi0KLSAgRjc3PSRhY19jdF9GNzcKLWZpCi0KLQotIyBQcm92aWRlIHNvbWUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGNvbXBpbGVyLgotZWNobyAiJGFzX21lOjY5NzE6IiBcCi0gICAgICJjaGVja2luZyBmb3IgRm9ydHJhbiA3NyBjb21waWxlciB2ZXJzaW9uIiA+JjUKLWFjX2NvbXBpbGVyPWBzZXQgWCAkYWNfY29tcGlsZTsgZWNobyAkMmAKLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC0tdmVyc2lvbiA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtLXZlcnNpb24gPC9kZXYvbnVsbCA+JjUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLXsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGVyIC12IDwvZGV2L251bGwgPiY1KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9Ci17IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlciAtViA8L2Rldi9udWxsID4mNSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotcm0gLWYgYS5vdXQKLQotIyBJZiB3ZSBkb24ndCB1c2UgYC5GJyBhcyBleHRlbnNpb24sIHRoZSBwcmVwcm9jZXNzb3IgaXMgbm90IHJ1biBvbiB0aGUKLSMgaW5wdXQgZmlsZS4gIChOb3RlIHRoYXQgdGhpcyBvbmx5IG5lZWRzIHRvIHdvcmsgZm9yIEdOVSBjb21waWxlcnMuKQotYWNfc2F2ZV9leHQ9JGFjX2V4dAotYWNfZXh0PUYKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGFyZSB1c2luZyB0aGUgR05VIEZvcnRyYW4gNzcgY29tcGlsZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Y3N19jb21waWxlcl9nbnUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLSNpZm5kZWYgX19HTlVDX18KLSAgICAgICBjaG9rZSBtZQotI2VuZGlmCi0KLSAgICAgIGVuZAotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY29tcGlsZXJfZ251PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jb21waWxlcl9nbnU9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1hY19jdl9mNzdfY29tcGlsZXJfZ251PSRhY19jb21waWxlcl9nbnUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA+JjYKLWFjX2V4dD0kYWNfc2F2ZV9leHQKLWFjX3Rlc3RfRkZMQUdTPSR7RkZMQUdTK3NldH0KLWFjX3NhdmVfRkZMQUdTPSRGRkxBR1MKLUZGTEFHUz0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRGNzcgYWNjZXB0cyAtZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJEY3NyBhY2NlcHRzIC1nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2Y3N19nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIEZGTEFHUz0tZwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfZjc3X3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9wcm9nX2Y3N19nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9wcm9nX2Y3N19nPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3Byb2dfZjc3X2ciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZjc3X2ciID4mNgotaWYgdGVzdCAiJGFjX3Rlc3RfRkZMQUdTIiA9IHNldDsgdGhlbgotICBGRkxBR1M9JGFjX3NhdmVfRkZMQUdTCi1lbGlmIHRlc3QgJGFjX2N2X3Byb2dfZjc3X2cgPSB5ZXM7IHRoZW4KLSAgaWYgdGVzdCAieCRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA9IHh5ZXM7IHRoZW4KLSAgICBGRkxBR1M9Ii1nIC1PMiIKKyAgaWYgdGVzdCAieCRhY19jdF9EVU1QQklOIiA9IHg7IHRoZW4KKyAgICBEVU1QQklOPSI6IgogICBlbHNlCi0gICAgRkZMQUdTPSItZyIKLSAgZmkKLWVsc2UKLSAgaWYgdGVzdCAieCRhY19jdl9mNzdfY29tcGlsZXJfZ251IiA9IHh5ZXM7IHRoZW4KLSAgICBGRkxBR1M9Ii1PMiIKLSAgZWxzZQotICAgIEZGTEFHUz0KKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgRFVNUEJJTj0kYWNfY3RfRFVNUEJJTgogICBmaQogZmkKIAotRzc3PWB0ZXN0ICRhY19jb21waWxlcl9nbnUgPSB5ZXMgJiYgZWNobyB5ZXNgCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251CisgICAgY2FzZSBgJERVTVBCSU4gLXN5bWJvbHMgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKyAgICAqQ09GRiopCisgICAgICBEVU1QQklOPSIkRFVNUEJJTiAtc3ltYm9scyIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIERVTVBCSU49OgorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisKKyAgaWYgdGVzdCAiJERVTVBCSU4iICE9ICI6IjsgdGhlbgorICAgIE5NPSIkRFVNUEJJTiIKKyAgZmkKK2ZpCit0ZXN0IC16ICIkTk0iICYmIE5NPW5tCiAKIAogCi0jIEF1dG9jb25mIDIuMTMncyBBQ19PQkpFWFQgYW5kIEFDX0VYRUVYVCBtYWNyb3Mgb25seSB3b3JrcyBmb3IgQyBjb21waWxlcnMhCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRoZSBuYW1lIGxpc3RlciAoJE5NKSBpbnRlcmZhY2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG5hbWUgbGlzdGVyICgkTk0pIGludGVyZmFjZS4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9ubV9pbnRlcmZhY2UrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JjUpCisgIChldmFsICIkYWNfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkTk0gXFxcImNvbmZ0ZXN0LiRhY19vYmpleHRcXFwiXCIiID4mNSkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiBvdXRwdXRcIiIgPiY1KQorICBjYXQgY29uZnRlc3Qub3V0ID4mNQorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9ubV9pbnRlcmZhY2UiID4mNjsgfQorCiAjIGZpbmQgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0aGUgbWF4aW11bSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbWF4X2NtZF9sZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc3lzX21heF9jbWRfbGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgICBpPTAKICAgdGVzdHN0cmluZz0iQUJDRCIKQEAgLTcxNDAsNyArODQ0Miw3IEBACiAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xOwogICAgIDs7CiAKLSAgY3lnd2luKiB8IG1pbmd3KikKKyAgY3lnd2luKiB8IG1pbmd3KiB8IGNlZ2NjKikKICAgICAjIE9uIFdpbjl4L01FLCB0aGlzIHRlc3QgYmxvd3MgdXAgLS0gaXQgc3VjY2VlZHMsIGJ1dCB0YWtlcwogICAgICMgYWJvdXQgNSBtaW51dGVzIGFzIHRoZSB0ZXN0c3RyaW5nIGdyb3dzIGV4cG9uZW50aWFsbHkuCiAgICAgIyBXb3JzZSwgc2luY2UgOXgvTUUgYXJlIG5vdCBwcmUtZW1wdGl2ZWx5IG11bHRpdGFza2luZywKQEAgLTcxNTEsNiArODQ1MywxMSBAQAogICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOwogICAgIDs7CiAKKyAgbWludCopCisgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKICAgYW1pZ2FvcyopCiAgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgogICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCkBAIC03MTk1LDcgKzg1MDIsNyBAQAogICBzeXN2NSogfCBzY281djYqIHwgc3lzdjQuMnV3MiopCiAgICAga2FyZ21heD1gZ3JlcCBBUkdfTUFYIC9ldGMvY29uZi9jZi5kL3N0dW5lIDI+L2Rldi9udWxsYAogICAgIGlmIHRlc3QgLW4gIiRrYXJnbWF4IjsgdGhlbgotICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBlY2hvICRrYXJnbWF4IHwgc2VkICdzLy4qWyAJXS8vJ2AKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZWNobyAka2FyZ21heCB8IHNlZCAncy8uKlsJIF0vLydgCiAgICAgZWxzZQogICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CiAgICAgZmkKQEAgLTcyMDYsMjAgKzg1MTMsMjggQEAKICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDRgCiAgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcKiAzYAogICAgIGVsc2UKKyAgICAgICMgTWFrZSB0ZXN0c3RyaW5nIGEgbGl0dGxlIGJpZ2dlciBiZWZvcmUgd2UgZG8gYW55dGhpbmcgd2l0aCBpdC4KKyAgICAgICMgYSAxSyBzdHJpbmcgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydC4KKyAgICAgIGZvciBpIGluIDEgMiAzIDQgNSA2IDcgOCA7IGRvCisgICAgICAgIHRlc3RzdHJpbmc9JHRlc3RzdHJpbmckdGVzdHN0cmluZworICAgICAgZG9uZQogICAgICAgU0hFTEw9JHtTSEVMTC0ke0NPTkZJR19TSEVMTC0vYmluL3NofX0KLSAgICAgIHdoaWxlICh0ZXN0ICJYImAkU0hFTEwgJDAgLS1mYWxsYmFjay1lY2hvICJYJHRlc3RzdHJpbmciIDI+L2Rldi9udWxsYCBcCi0JICAgICAgID0gIlhYJHRlc3RzdHJpbmciKSA+L2Rldi9udWxsIDI+JjEgJiYKLQkgICAgICBuZXdfcmVzdWx0PWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYCAmJgotCSAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0kbmV3X3Jlc3VsdCAmJgorICAgICAgIyBJZiB0ZXN0IGlzIG5vdCBhIHNoZWxsIGJ1aWx0LWluLCB3ZSdsbCBwcm9iYWJseSBlbmQgdXAgY29tcHV0aW5nIGEKKyAgICAgICMgbWF4aW11bSBsZW5ndGggdGhhdCBpcyBvbmx5IGhhbGYgb2YgdGhlIGFjdHVhbCBtYXhpbXVtIGxlbmd0aCwgYnV0CisgICAgICAjIHdlIGNhbid0IHRlbGwuCisgICAgICB3aGlsZSB7IHRlc3QgIlgiYGZ1bmNfZmFsbGJhY2tfZWNobyAiJHRlc3RzdHJpbmckdGVzdHN0cmluZyIgMj4vZGV2L251bGxgIFwKKwkgICAgICAgICA9ICJYJHRlc3RzdHJpbmckdGVzdHN0cmluZyI7IH0gPi9kZXYvbnVsbCAyPiYxICYmCiAJICAgICAgdGVzdCAkaSAhPSAxNyAjIDEvMiBNQiBzaG91bGQgYmUgZW5vdWdoCiAgICAgICBkbwogICAgICAgICBpPWBleHByICRpICsgMWAKICAgICAgICAgdGVzdHN0cmluZz0kdGVzdHN0cmluZyR0ZXN0c3RyaW5nCiAgICAgICBkb25lCisgICAgICAjIE9ubHkgY2hlY2sgdGhlIHN0cmluZyBsZW5ndGggb3V0c2lkZSB0aGUgbG9vcC4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAiWCR0ZXN0c3RyaW5nIiA6ICIuKiIgMj4mMWAKICAgICAgIHRlc3RzdHJpbmc9Ci0gICAgICAjIEFkZCBhIHNpZ25pZmljYW50IHNhZmV0eSBmYWN0b3IgYmVjYXVzZSBDKysgY29tcGlsZXJzIGNhbiB0YWNrIG9uIG1hc3NpdmUKLSAgICAgICMgYW1vdW50cyBvZiBhZGRpdGlvbmFsIGFyZ3VtZW50cyBiZWZvcmUgcGFzc2luZyB0aGVtIHRvIHRoZSBsaW5rZXIuCi0gICAgICAjIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KICAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCiAgICAgZmkKICAgICA7OwpAQCAtNzIyOCwyMiArODU0MywxMTU5IEBACiBmaQogCiBpZiB0ZXN0IC1uICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3N5c19tYXhfY21kX2xlbiIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjUKKyRhc19lY2hvICIkbHRfY3Zfc3lzX21heF9jbWRfbGVuIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm9uZSIgPiY1Ci1lY2hvICIke0VDSE9fVH1ub25lIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUiID4mNQorJGFzX2VjaG8gIm5vbmUiID4mNjsgfQorZmkKK21heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KKworCisKKworCisKKzogJHtDUD0iY3AgLWYifQorOiAke01WPSJtdiAtZiJ9Cis6ICR7Uk09InJtIC1mIn0KKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIHNvbWUgWFNJIGNvbnN0cnVjdHMuLi4gIiA+JjY7IH0KKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkeHNpX3NoZWxsIiA+JjUKKyRhc19lY2hvICIkeHNpX3NoZWxsIiA+JjY7IH0KKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzIFwiKz1cIiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBcIis9XCIuLi4gIiA+JjY7IH0KK2x0X3NoZWxsX2FwcGVuZD1ubworKCBmb289YmFyOyBzZXQgZm9vIGJhejsgZXZhbCAiJDErPVwkMiIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9zaGVsbF9hcHBlbmQiID4mNQorJGFzX2VjaG8gIiRsdF9zaGVsbF9hcHBlbmQiID4mNjsgfQorCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQogZmkKIAogCiAKIAogCisjIHRlc3QgRUJDRElDIG9yIEFTQ0lJCitjYXNlIGBlY2hvIFh8dHIgWCAnXDEwMSdgIGluCisgQSkgIyBBU0NJSSBiYXNlZCBzeXN0ZW0KKyAgICAjIFxuIGlzIG5vdCBpbnRlcnByZXRlZCBjb3JyZWN0bHkgYnkgU29sYXJpcyA4IC91c3IvdWNiL3RyCisgIGx0X1NQMk5MPSd0ciBcMDQwIFwwMTInCisgIGx0X05MMlNQPSd0ciBcMDE1XDAxMiBcMDQwXDA0MCcKKyAgOzsKKyAqKSAjIEVCQ0RJQyBiYXNlZCBzeXN0ZW0KKyAgbHRfU1AyTkw9J3RyIFwxMDAgXG4nCisgIGx0X05MMlNQPSd0ciBcclxuIFwxMDBcMTAwJworICA7OworZXNhYworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byAkaG9zdCBmb3JtYXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIGNvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3RvX2hvc3RfZmlsZV9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKKworZmkKKwordG9faG9zdF9maWxlX2NtZD0kbHRfY3ZfdG9faG9zdF9maWxlX2NtZAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfdG9faG9zdF9maWxlX2NtZCIgPiY2OyB9CisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfdG9fdG9vbF9maWxlX2NtZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgICNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCisKK2ZpCisKK3RvX3Rvb2xfZmlsZV9jbWQ9JGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfdG9fdG9vbF9maWxlX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiID4mNjsgfQorCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRMRCBvcHRpb24gdG8gcmVsb2FkIG9iamVjdCBmaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJExEIG9wdGlvbiB0byByZWxvYWQgb2JqZWN0IGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX3JlbG9hZF9mbGFnKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfbGRfcmVsb2FkX2ZsYWc9Jy1yJworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfcmVsb2FkX2ZsYWciID4mNQorJGFzX2VjaG8gIiRsdF9jdl9sZF9yZWxvYWRfZmxhZyIgPiY2OyB9CityZWxvYWRfZmxhZz0kbHRfY3ZfbGRfcmVsb2FkX2ZsYWcKK2Nhc2UgJHJlbG9hZF9mbGFnIGluCisiIiB8ICIgIiopIDs7CisqKSByZWxvYWRfZmxhZz0iICRyZWxvYWRfZmxhZyIgOzsKK2VzYWMKK3JlbG9hZF9jbWRzPSckTEQkcmVsb2FkX2ZsYWcgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKK2Nhc2UgJGhvc3Rfb3MgaW4KKyAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgIGlmIHRlc3QgIiRHQ0MiICE9IHllczsgdGhlbgorICAgICAgcmVsb2FkX2NtZHM9ZmFsc2UKKyAgICBmaQorICAgIDs7CisgIGRhcndpbiopCisgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPSckTFRDQyAkTFRDRkxBR1MgLW5vc3RkbGliICR7d2x9LXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKKyAgICBlbHNlCisgICAgICByZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZmkKKyAgICA7OworZXNhYworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKK3Rlc3QgLXogIiRPQkpEVU1QIiAmJiBPQkpEVU1QPW9iamR1bXAKKworCisKKworCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byByZWNvZ25pemUgZGVwZW5kZW50IGxpYnJhcmllcy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFs0LTldKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYmVvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK2JzZGlbNDVdKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL3Vzci9iaW4vZmlsZSAtTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3NobGliL2xpYmMuc28KKyAgOzsKKworY3lnd2luKikKKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGlzIGEgc2hlbGwgZnVuY3Rpb24gZGVmaW5lZCBpbiBsdG1haW4uc2gKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9J2Z1bmNfd2luMzJfbGliaWQnCisgIDs7CisKK21pbmd3KiB8IHB3MzIqKQorICAjIEJhc2UgTVNZUy9NaW5HVyBkbyBub3QgcHJvdmlkZSB0aGUgJ2ZpbGUnIGNvbW1hbmQgbmVlZGVkIGJ5CisgICMgZnVuY193aW4zMl9saWJpZCBzaGVsbCBmdW5jdGlvbiwgc28gdXNlIGEgd2Vha2VyIHRlc3QgYmFzZWQgb24gJ29iamR1bXAnLAorICAjIHVubGVzcyB3ZSBmaW5kICdmaWxlJywgZm9yIGV4YW1wbGUgYmVjYXVzZSB3ZSBhcmUgY3Jvc3MtY29tcGlsaW5nLgorICAjIGZ1bmNfd2luMzJfbGliaWQgYXNzdW1lcyBCU0Qgbm0sIHNvIGRpc2FsbG93IGl0IGlmIHVzaW5nIE1TIGR1bXBiaW4uCisgIGlmICggdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiQlNEIG5tIiAmJiBmaWxlIC8gKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBeeDg2IGFyY2hpdmUgaW1wb3J0fF54ODYgRExMJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICBlbHNlCisgICAgIyBLZWVwIHRoaXMgcGF0dGVybiBpbiBzeW5jIHdpdGggdGhlIG9uZSBpbiBmdW5jX3dpbjMyX2xpYmlkLgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IChwZWkqLWkzODYoLiphcmNoaXRlY3R1cmU6IGkzODYpP3xwZS1hcm0td2luY2V8cGUteDg2LTY0KScKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nJE9CSkRVTVAgLWYnCisgIGZpCisgIDs7CisKK2NlZ2NjKikKKyAgIyB1c2UgdGhlIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJy4gU2VlIG1pbmd3Ki4KKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgZmlsZSBmb3JtYXQgcGUtYXJtLS4qbGl0dGxlKC4qYXJjaGl0ZWN0dXJlOiBhcm0pPycKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgaSo4NiApCisgICAgICAjIE5vdCBzdXJlIHdoZXRoZXIgdGhlIHByZXNlbmNlIG9mIE9wZW5CU0QgaGVyZSB3YXMgYSBtaXN0YWtlLgorICAgICAgIyBMZXQncyBhY2NlcHQgYm90aCBvZiB0aGVtIHVudGlsIHRoaXMgaXMgY2xlYXJlZCB1cC4KKyAgICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChGcmVlQlNEfE9wZW5CU0R8RHJhZ29uRmx5KS9pWzMtOV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1swLTldWzAtOV1bMC05XXxFTEYtWzAtOV1bMC05XSkgc2hhcmVkIG9iamVjdCBmaWxlIC0gSUE2NCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9ocHV4MzIvbGliYy5zbworICAgIDs7CisgIGhwcGEqNjQqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfEVMRlsgLV1bMC05XVswLTldKSgtYml0KT8oIFtMTV1TQik/IHNoYXJlZCBvYmplY3QoIGZpbGUpP1ssIC1dKiBQQS1SSVNDIFswLTldXC5bMC05XScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzWzAtOV1bMC05XVswLTldfFBBLVJJU0NbMC05XVwuWzAtOV0pIHNoYXJlZCBsaWJyYXJ5JworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYmMuc2wKKyAgICA7OworICBlc2FjCisgIDs7CisKK2ludGVyaXhbMy05XSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc298XC5hKSQnCisgIDs7CisKK2lyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgIGNhc2UgJExEIGluCisgICotMzJ8KiItMzIgIikgbGlibWFnaWM9MzItYml0OzsKKyAgKi1uMzJ8KiItbjMyICIpIGxpYm1hZ2ljPU4zMjs7CisgICotNjR8KiItNjQgIikgbGlibWFnaWM9NjQtYml0OzsKKyAgKikgbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICBlc2FjCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKKyMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KK2xpbnV4KiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworbmV0YnNkKikKKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYlteL10rKFwuc29cLlswLTldK1wuWzAtOV0rfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvfF9waWNcLmEpJCcKKyAgZmkKKyAgOzsKKworbmV3b3M2KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKGV4ZWN1dGFibGV8ZHluYW1pYyBsaWIpJworICBsdF9jdl9maWxlX21hZ2ljX2NtZD0vdXNyL2Jpbi9maWxlCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS91c3IvbGliL2xpYm5scy5zbworICA7OworCisqbnRvKiB8ICpxbngqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitvcGVuYnNkKikKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xcLnNvfF9waWNcLmEpJCcKKyAgZWxzZQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdtYXRjaF9wYXR0ZXJuIC9saWJbXi9dKyhcLnNvXC5bMC05XStcLlswLTldK3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworcmRvcyopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3NvbGFyaXMqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjQgfCBzeXN2NC4zKikKKyAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KKyAgbW90b3JvbGEpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFswLTldWzAtOV0qLWJpdCBbTUxdU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIpIE1bMC05XVswLTldKiBWZXJzaW9uIFswLTldJworICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28qYAorICAgIDs7CisgIG5jcikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIHNlcXVlbnQpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBFTEYgWzAtOV1bMC05XSotYml0IFtMTV1TQiAoc2hhcmVkIG9iamVjdHxkeW5hbWljIGxpYiApJworICAgIDs7CisgIHNuaSkKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nL2Jpbi9maWxlJworICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSJmaWxlX21hZ2ljIEVMRiBbMC05XVswLTldKi1iaXQgW0xNXVNCIGR5bmFtaWMgbGliIgorICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9saWIvbGliYy5zbworICAgIDs7CisgIHNpZW1lbnMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBwYykKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICAgIDs7CisgIGVzYWMKKyAgOzsKKwordHBmKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKK2VzYWMKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZCIgPiY2OyB9CisKK2ZpbGVfbWFnaWNfZ2xvYj0KK3dhbnRfbm9jYXNlZ2xvYj1ubworaWYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBtaW5ndyogfCBwdzMyKikKKyAgICBpZiAoIHNob3B0IHwgZ3JlcCBub2Nhc2VnbG9iICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB3YW50X25vY2FzZWdsb2I9eWVzCisgICAgZWxzZQorICAgICAgZmlsZV9tYWdpY19nbG9iPWBlY2hvIGFBYkJjQ2REZUVmRmdHaEhpSWpKa0tsTG1Nbk5vT3BQcVFyUnNTdFR1VXZWd1d4WHlZelogfCAkU0VEIC1lICJzL1woLi5cKS9zXC9bXDFdXC9bXDFdXC9nOy9nImAKKyAgICBmaQorICAgIDs7CisgIGVzYWMKK2ZpCisKK2ZpbGVfbWFnaWNfY21kPSRsdF9jdl9maWxlX21hZ2ljX2NtZAorZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kCit0ZXN0IC16ICIkZGVwbGlic19jaGVja19tZXRob2QiICYmIGRlcGxpYnNfY2hlY2tfbWV0aG9kPXVua25vd24KKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gYXNzb2NpYXRlIHJ1bnRpbWUgYW5kIGxpbmsgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0ndW5rbm93bicKKworY2FzZSAkaG9zdF9vcyBpbgorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAjIHR3byBkaWZmZXJlbnQgc2hlbGwgZnVuY3Rpb25zIGRlZmluZWQgaW4gbHRtYWluLnNoCisgICMgZGVjaWRlIHdoaWNoIHRvIHVzZSBiYXNlZCBvbiBjYXBhYmlsaXRpZXMgb2YgJERMTFRPT0wKKyAgY2FzZSBgJERMTFRPT0wgLS1oZWxwIDI+JjFgIGluCisgICotLWlkZW50aWZ5LXN0cmljdCopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliCisgICAgOzsKKyAgKikKKyAgICBsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD1mdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2sKKyAgICA7OworICBlc2FjCisgIDs7CisqKQorICAjIGZhbGxiYWNrOiBhc3N1bWUgbGlua2xpYiBJUyBzaGFyZWRsaWIKKyAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9IiRFQ0hPIgorICA7OworZXNhYworCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiA+JjY7IH0KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9jdl9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAordGVzdCAteiAiJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kIiAmJiBzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kRUNITworCisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgIGZvciBhY19wcm9nIGluIGFyCisgIGRvCisgICAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfdG9vbF9wcmVmaXgkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgorICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BUj0iJGFjX3Rvb2xfcHJlZml4JGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVI9JGFjX2N2X3Byb2dfQVIKK2lmIHRlc3QgLW4gIiRBUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUiIgPiY1CiskYXNfZWNobyAiJEFSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgICB0ZXN0IC1uICIkQVIiICYmIGJyZWFrCisgIGRvbmUKK2ZpCitpZiB0ZXN0IC16ICIkQVIiOyB0aGVuCisgIGFjX2N0X0FSPSRBUgorICBmb3IgYWNfcHJvZyBpbiBhcgorZG8KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0FSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X0FSIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X0FSPSIkYWNfY3RfQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX3Byb2ciCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfQVI9JGFjX2N2X3Byb2dfYWNfY3RfQVIKK2lmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X0FSIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJGFjX2N0X0FSIiAmJiBicmVhaworZG9uZQorCisgIGlmIHRlc3QgIngkYWNfY3RfQVIiID0geDsgdGhlbgorICAgIEFSPSJmYWxzZSIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBBUj0kYWNfY3RfQVIKKyAgZmkKK2ZpCisKKzogJHtBUj1hcn0KKzogJHtBUl9GTEFHUz1jcnV9CisKKworCisKKworCisKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgYXJjaGl2ZXIgQEZJTEUgc3VwcG9ydC4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9hcl9hdF9maWxlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGVjaG8gY29uZnRlc3QuJGFjX29iamV4dCA+IGNvbmZ0ZXN0LmxzdAorICAgICAgbHRfYXJfdHJ5PSckQVIgJEFSX0ZMQUdTIGxpYmNvbmZ0ZXN0LmEgQGNvbmZ0ZXN0LmxzdCA+JjUnCisgICAgICB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkbHRfYXJfdHJ5XCIiOyB9ID4mNQorICAoZXZhbCAkbHRfYXJfdHJ5KSAyPiY1CisgIGFjX3N0YXR1cz0kPworICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCXsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRsdF9hcl90cnlcIiI7IH0gPiY1CisgIChldmFsICRsdF9hcl90cnkpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9CisJaWYgdGVzdCAiJGFjX3N0YXR1cyIgLW5lIDA7IHRoZW4KKyAgICAgICAgICBsdF9jdl9hcl9hdF9maWxlPUAKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICBybSAtZiBjb25mdGVzdC4qIGxpYmNvbmZ0ZXN0LmEKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcl9hdF9maWxlIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfYXJfYXRfZmlsZSIgPiY2OyB9CisKK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCisKKworCisKKworCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fXN0cmlwIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fXN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19TVFJJUD0iJFNUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorU1RSSVA9JGFjX2N2X3Byb2dfU1RSSVAKK2lmIHRlc3QgLW4gIiRTVFJJUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRTVFJJUCIgPiY1CiskYXNfZWNobyAiJFNUUklQIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19TVFJJUCI7IHRoZW4KKyAgYWNfY3RfU1RSSVA9JFNUUklQCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAic3RyaXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHN0cmlwOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9TVFJJUCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9TVFJJUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9TVFJJUD0iJGFjX2N0X1NUUklQIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfU1RSSVA9InN0cmlwIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X1NUUklQPSRhY19jdl9wcm9nX2FjX2N0X1NUUklQCitpZiB0ZXN0IC1uICIkYWNfY3RfU1RSSVAiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQorJGFzX2VjaG8gIiRhY19jdF9TVFJJUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1NUUklQIiA9IHg7IHRoZW4KKyAgICBTVFJJUD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBTVFJJUD0kYWNfY3RfU1RSSVAKKyAgZmkKK2Vsc2UKKyAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgorZmkKKwordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CisKKworCisKKworCitpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19SQU5MSUIrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX1JBTkxJQj0iJHthY190b29sX3ByZWZpeH1yYW5saWIiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorUkFOTElCPSRhY19jdl9wcm9nX1JBTkxJQgoraWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRSQU5MSUIiID4mNQorJGFzX2VjaG8gIiRSQU5MSUIiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX1JBTkxJQiI7IHRoZW4KKyAgYWNfY3RfUkFOTElCPSRSQU5MSUIKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJyYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IHJhbmxpYjsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X1JBTkxJQiI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IiRhY19jdF9SQU5MSUIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCithY19jdF9SQU5MSUI9JGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCCitpZiB0ZXN0IC1uICIkYWNfY3RfUkFOTElCIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N0X1JBTkxJQiIgPiY1CiskYXNfZWNobyAiJGFjX2N0X1JBTkxJQiIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X1JBTkxJQiIgPSB4OyB0aGVuCisgICAgUkFOTElCPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIFJBTkxJQj0kYWNfY3RfUkFOTElCCisgIGZpCitlbHNlCisgIFJBTkxJQj0iJGFjX2N2X3Byb2dfUkFOTElCIgorZmkKKwordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKKworCisKKworCisKKyMgRGV0ZXJtaW5lIGNvbW1hbmRzIHRvIGNyZWF0ZSBvbGQtc3R5bGUgc3RhdGljIGFyY2hpdmVzLgorb2xkX2FyY2hpdmVfY21kcz0nJEFSICRBUl9GTEFHUyAkb2xkbGliJG9sZG9ianMnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNjQ0ICRvbGRsaWInCitvbGRfcG9zdHVuaW5zdGFsbF9jbWRzPQorCitpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgIG9wZW5ic2QqKQorICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzPSIkb2xkX3Bvc3RpbnN0YWxsX2NtZHN+XCRSQU5MSUIgLXQgXCRvbGRsaWIiCisgICAgOzsKKyAgKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorICAgIDs7CisgIGVzYWMKKyAgb2xkX2FyY2hpdmVfY21kcz0iJG9sZF9hcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRvbGRsaWIiCitmaQorCitjYXNlICRob3N0X29zIGluCisgIGRhcndpbiopCisgICAgbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uPXllcyA7OworICAqKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj1ubyA7OworZXNhYworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworZm9yIGFjX3Byb2cgaW4gZ2F3ayBtYXdrIG5hd2sgYXdrCitkbworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfQVdLKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJEFXSyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BV0s9IiRBV0siICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19BV0s9IiRhY19wcm9nIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK0FXSz0kYWNfY3ZfcHJvZ19BV0sKK2lmIHRlc3QgLW4gIiRBV0siOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQVdLIiA+JjUKKyRhc19lY2hvICIkQVdLIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKKyAgdGVzdCAtbiAiJEFXSyIgJiYgYnJlYWsKK2RvbmUKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KK0xUQ0M9JHtMVENDLSIkQ0MifQorCisjIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCitMVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2NvbXBpbGVyPSRDQworCisKICMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGNvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgY29tbWFuZCB0byBwYXJzZSAkTk0gb3V0cHV0IGZyb20gJGNvbXBpbGVyIG9iamVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBjb21tYW5kIHRvIHBhcnNlICROTSBvdXRwdXQgZnJvbSAkY29tcGlsZXIgb2JqZWN0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogCiAjIFRoZXNlIGFyZSBzYW5lIGRlZmF1bHRzIHRoYXQgd29yayBvbiBhdCBsZWFzdCBhIGZldyBvbGQgc3lzdGVtcy4KQEAgLTcyNTUsMzMgKzk3MDcsMTggQEAKICMgUmVnZXhwIHRvIG1hdGNoIHN5bWJvbHMgdGhhdCBjYW4gYmUgYWNjZXNzZWQgZGlyZWN0bHkgZnJvbSBDLgogc3ltcGF0PSdcKFtfQS1aYS16XVtfQS1aYS16MC05XSpcKScKIAotIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eLiAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDE7L3AnIgotCi0jIFRyYW5zZm9ybSBhbiBleHRyYWN0ZWQgc3ltYm9sIGxpbmUgaW50byBzeW1ib2wgbmFtZSBhbmQgc3ltYm9sIGFkZHJlc3MKLWx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSBcKFteIF0qXCkgXChbXiBdKlwpJC8gIHtcIlwyXCIsIChsdF9wdHIpIFwmXDJ9LC9wJyIKLQogIyBEZWZpbmUgc3lzdGVtLXNwZWNpZmljIHZhcmlhYmxlcy4KIGNhc2UgJGhvc3Rfb3MgaW4KIGFpeCopCiAgIHN5bWNvZGU9J1tCQ0RUXScKICAgOzsKLWN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgc3ltY29kZT0nW0FCQ0RHSVNUV10nCiAgIDs7Ci1ocHV4KikgIyBJdHMgbGlua2VyIGRpc3Rpbmd1aXNoZXMgZGF0YSBmcm9tIGNvZGUgc3ltYm9scworaHB1eCopCiAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCiAgICAgc3ltY29kZT0nW0FCQ0RFR1JTVF0nCiAgIGZpCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSJzZWQgLW4gLWUgJ3MvXlQgLiogXCguKlwpJC9leHRlcm4gaW50IFwxKCk7L3AnIC1lICdzL14kc3ltY29kZSogLiogXCguKlwpJC9leHRlcm4gY2hhciBcMTsvcCciCi0gIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0gIDs7Ci1saW51eCogfCBrKmJzZCotZ251KQotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgIHN5bWNvZGU9J1tBQkNER0lSU1RXXScKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0ic2VkIC1uIC1lICdzL15UIC4qIFwoLipcKSQvZXh0ZXJuIGludCBcMSgpOy9wJyAtZSAncy9eJHN5bWNvZGUqIC4qIFwoLipcKSQvZXh0ZXJuIGNoYXIgXDE7L3AnIgotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSJzZWQgLW4gLWUgJ3MvXjogXChbXiBdKlwpICQvICB7XFxcIlwxXFxcIiwgKGx0X3B0cikgMH0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJcMlwiLCAobHRfcHRyKSBcJlwyfSwvcCciCi0gIGZpCiAgIDs7CiBpcml4KiB8IG5vbnN0b3B1eCopCiAgIHN5bWNvZGU9J1tCQ0RFR1JTVF0nCkBAIC03MzA2LDU3ICs5NzQzLDg2IEBACiAgIDs7CiBlc2FjCiAKLSMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgotb3B0X2NyPQotY2FzZSAkYnVpbGRfb3MgaW4KLW1pbmd3KikKLSAgb3B0X2NyPWBlY2hvICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCi0gIDs7Ci1lc2FjCi0KICMgSWYgd2UncmUgdXNpbmcgR05VIG5tLCB0aGVuIHVzZSBpdHMgc3RhbmRhcmQgc3ltYm9sIGNvZGVzLgogY2FzZSBgJE5NIC1WIDI+JjFgIGluCiAqR05VKiB8ICond2l0aCBCRkQnKikKICAgc3ltY29kZT0nW0FCQ0RHSVJTVFddJyA7OwogZXNhYwogCi0jIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyY29yZSwgdGhlbiB3aXRoIGl0LgorIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKFteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0ic2VkIC1uIC1lICdzL146IFwoW14gXSpcKVsgXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW14gXSpcKSBcKGxpYlteIF0qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sL3AnIC1lICdzL14kc3ltY29kZSogXChbXiBdKlwpIFwoW14gXSpcKSQvICB7XCJsaWJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCisKKyMgSGFuZGxlIENSTEYgaW4gbWluZ3cgdG9vbCBjaGFpbgorb3B0X2NyPQorY2FzZSAkYnVpbGRfb3MgaW4KK21pbmd3KikKKyAgb3B0X2NyPWAkRUNITyAneFx7MCwxXH0nIHwgdHIgeCAnXDAxNSdgICMgb3B0aW9uIGNyIGluIHJlZ2V4cAorICA7OworZXNhYworCisjIFRyeSB3aXRob3V0IGEgcHJlZml4IHVuZGVyc2NvcmUsIHRoZW4gd2l0aCBpdC4KIGZvciBhY19zeW1wcmZ4IGluICIiICJfIjsgZG8KIAogICAjIFRyYW5zZm9ybSBzeW1jb2RlLCBzeW1wYXQsIGFuZCBzeW1wcmZ4IGludG8gYSByYXcgc3ltYm9sIGFuZCBhIEMgc3ltYm9sLgogICBzeW14ZnJtPSJcXDEgJGFjX3N5bXByZnhcXDIgXFwyIgogCiAgICMgV3JpdGUgdGhlIHJhdyBhbmQgQyBpZGVudGlmaWVycy4KLSAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsgCV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbIAldWyAJXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgaWYgdGVzdCAiJGx0X2N2X25tX2ludGVyZmFjZSIgPSAiTVMgZHVtcGJpbiI7IHRoZW4KKyAgICAjIEZha2UgaXQgZm9yIGR1bXBiaW4gYW5kIHNheSBUIGZvciBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbgorICAgICMgYW5kIEQgZm9yIGFueSBnbG9iYWwgdmFyaWFibGUuCisgICAgIyBBbHNvIGZpbmQgQysrIGFuZCBfX2Zhc3RjYWxsIHN5bWJvbHMgZnJvbSBNU1ZDKyssCisgICAgIyB3aGljaCBzdGFydCB3aXRoIEAgb3IgPy4KKyAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlPSIkQVdLICciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4IgorICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0ic2VkIC1uIC1lICdzL14uKlsJIF1cKCRzeW1jb2RlJHN5bWNvZGUqXClbCSBdWwkgXSokYWNfc3ltcHJmeCRzeW1wYXQkb3B0X2NyJC8kc3lteGZybS9wJyIKKyAgZmkKKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0iJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgfCBzZWQgJy8gX19nbnVfbHRvL2QnIgogCiAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIHBpcGUgd29ya3MgY29ycmVjdGx5LgogICBwaXBlX3dvcmtzPW5vCiAKICAgcm0gLWYgY29uZnRlc3QqCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIGNoYXIgbm1fdGVzdF92YXI7Ci12b2lkIG5tX3Rlc3RfZnVuYygpe30KK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKIGludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9Ci1FT0YKK19MVF9FT0YKIAotICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKKyAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2NvbXBpbGVcIiI7IH0gPiY1CiAgIChldmFsICRhY19jb21waWxlKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCiAgICAgIyBOb3cgdHJ5IHRvIGdyYWIgdGhlIHN5bWJvbHMuCiAgICAgbmxpc3Q9Y29uZnRlc3Qubm0KLSAgICBpZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdFwiIikgPiY1Ci0gIChldmFsICROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIFw+ICRubGlzdCkgMj4mNQorICAgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiROTSBjb25mdGVzdC4kYWNfb2JqZXh0IFx8ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgXD4gJG5saXN0XCIiOyB9ID4mNQorICAoZXZhbCAkTk0gY29uZnRlc3QuJGFjX29iamV4dCBcfCAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUiIFw+ICRubGlzdCkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zICIkbmxpc3QiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KICAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCiAgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgogCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgpAQCAtNzM2NSw1NyArOTgzMSw3MSBAQAogICAgICAgZmkKIAogICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgotICAgICAgaWYgZ3JlcCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgotCWlmIGdyZXAgJyBubV90ZXN0X2Z1bmMkJyAiJG5saXN0IiA+L2Rldi9udWxsOyB0aGVuCi0JICBjYXQgPDxFT0YgPiBjb25mdGVzdC4kYWNfZXh0CisgICAgICBpZiAkR1JFUCAnIG5tX3Rlc3RfdmFyJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCWlmICRHUkVQICcgbm1fdGVzdF9mdW5jJCcgIiRubGlzdCIgPi9kZXYvbnVsbDsgdGhlbgorCSAgY2F0IDw8X0xUX0VPRiA+IGNvbmZ0ZXN0LiRhY19leHQKKy8qIEtlZXAgdGhpcyBjb2RlIGluIHN5bmMgYmV0d2VlbiBsaWJ0b29sLm00LCBsdG1haW4sIGx0X3N5c3RlbS5oLCBhbmQgdGVzdHMuICAqLworI2lmIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkKKy8qIERBVEEgaW1wb3J0cyBmcm9tIERMTHMgb24gV0lOMzIgY29uJ3QgYmUgY29uc3QsIGJlY2F1c2UgcnVudGltZQorICAgcmVsb2NhdGlvbnMgYXJlIHBlcmZvcm1lZCAtLSBzZWUgbGQncyBkb2N1bWVudGF0aW9uIG9uIHBzZXVkby1yZWxvY3MuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbGlmIGRlZmluZWQoX19vc2ZfXykKKy8qIFRoaXMgc3lzdGVtIGRvZXMgbm90IGNvcGUgd2VsbCB3aXRoIHJlbG9jYXRpb25zIGluIGNvbnN0IGRhdGEuICAqLworIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVF9ETFNZTV9DT05TVCBjb25zdAorI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotRU9GCitfTFRfRU9GCiAJICAjIE5vdyBnZW5lcmF0ZSB0aGUgc3ltYm9sIGZpbGUuCi0JICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgZ3JlcCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisJICBldmFsICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiJyA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0JwogCi0JICBjYXQgPDxFT0YgPj4gY29uZnRlc3QuJGFjX2V4dAotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotIyBkZWZpbmUgbHRfcHRyX3Qgdm9pZCAqCi0jZWxzZQotIyBkZWZpbmUgbHRfcHRyX3QgY2hhciAqCi0jIGRlZmluZSBjb25zdAotI2VuZGlmCisJICBjYXQgPDxfTFRfRU9GID4+IGNvbmZ0ZXN0LiRhY19leHQKIAotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCi1jb25zdCBzdHJ1Y3QgeworLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICAqLworTFRfRExTWU1fQ09OU1Qgc3RydWN0IHsKICAgY29uc3QgY2hhciAqbmFtZTsKLSAgbHRfcHRyX3QgYWRkcmVzczsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKIH0KLWx0X3ByZWxvYWRlZF9zeW1ib2xzW10gPQorbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KIHsKLUVPRgotCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAobHRfcHRyX3QpIFwmXDJ9LC8iIDwgIiRubGlzdCIgfCBncmVwIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAotCSAgY2F0IDw8XEVPRiA+PiBjb25mdGVzdC4kYWNfZXh0Ci0gIHswLCAobHRfcHRyX3QpIDB9CisgIHsgIkBQUk9HUkFNQCIsICh2b2lkICopIDAgfSwKK19MVF9FT0YKKwkgICRTRUQgInMvXiRzeW1jb2RlJHN5bWNvZGUqIFwoLipcKSBcKC4qXCkkLyAge1wiXDJcIiwgKHZvaWQgKikgXCZcMn0sLyIgPCAiJG5saXN0IiB8ICRHUkVQIC12IG1haW4gPj4gY29uZnRlc3QuJGFjX2V4dAorCSAgY2F0IDw8XF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorICB7MCwgKHZvaWQgKikgMH0KIH07CiAKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKLUVPRgorX0xUX0VPRgogCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KIAkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAotCSAgbHRfc2F2ZV9MSUJTPSIkTElCUyIKLQkgIGx0X3NhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUwogCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKIAkgIENGTEFHUz0iJENGTEFHUyRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyIKLQkgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorCSAgaWYgeyB7IGV2YWwgZWNobyAiXCJcJGFzX21lXCI6JHthc19saW5lbm8tJExJTkVOT306IFwiJGFjX2xpbmtcIiI7IH0gPiY1CiAgIChldmFsICRhY19saW5rKSAyPiY1CiAgIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH07IHRoZW4KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fTsgdGhlbgogCSAgICBwaXBlX3dvcmtzPXllcwogCSAgZmkKLQkgIExJQlM9IiRsdF9zYXZlX0xJQlMiCi0JICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKKwkgIExJQlM9JGx0X2dsb2JzeW1fc2F2ZV9MSUJTCisJICBDRkxBR1M9JGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1MKIAllbHNlCiAJICBlY2hvICJjYW5ub3QgZmluZCBubV90ZXN0X2Z1bmMgaW4gJG5saXN0IiA+JjUKIAlmaQpAQCAtNzQ0NSwxNyArOTkyNSwxNTAxIEBACiAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPQogZmkKIGlmIHRlc3QgLXogIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBmYWlsZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9ZmFpbGVkIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGZhaWxlZCIgPiY1CiskYXNfZWNobyAiZmFpbGVkIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogb2siID4mNQotZWNobyAiJHtFQ0hPX1R9b2siID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogb2siID4mNQorJGFzX2VjaG8gIm9rIiA+JjY7IH0KIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2JqZGlyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9iamRpci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3Zfb2JqZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIFJlc3BvbnNlIGZpbGUgc3VwcG9ydC4KK2lmIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIk1TIGR1bXBiaW4iOyB0aGVuCisgIG5tX2ZpbGVfbGlzdF9zcGVjPSdAJworZWxpZiAkTk0gLS1oZWxwIDI+L2Rldi9udWxsIHwgZ3JlcCAnW0BdRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXNyb290IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXNyb290Li4uICIgPiY2OyB9CisKKyMgQ2hlY2sgd2hldGhlciAtLXdpdGgtc3lzcm9vdCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfc3lzcm9vdCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIHdpdGh2YWw9JHdpdGhfc3lzcm9vdDsKK2Vsc2UKKyAgd2l0aF9zeXNyb290PW5vCitmaQorCisKK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJHt3aXRoX3N5c3Jvb3R9IiA+JjUKKyRhc19lY2hvICIke3dpdGhfc3lzcm9vdH0iID4mNjsgfQorICAgYXNfZm5fZXJyb3IgJD8gIlRoZSBzeXNyb290IG11c3QgYmUgYW4gYWJzb2x1dGUgcGF0aC4iICIkTElORU5PIiA1CisgICA7OworZXNhYworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICR7bHRfc3lzcm9vdDotbm99IiA+JjUKKyRhc19lY2hvICIke2x0X3N5c3Jvb3Q6LW5vfSIgPiY2OyB9CisKKworCisKKworIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLWxpYnRvb2wtbG9jayB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9saWJ0b29sX2xvY2src2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9saWJ0b29sX2xvY2s7CitmaQorCit0ZXN0ICJ4JGVuYWJsZV9saWJ0b29sX2xvY2siICE9IHhubyAmJiBlbmFibGVfbGlidG9vbF9sb2NrPXllcworCisjIFNvbWUgZmxhZ3MgbmVlZCB0byBiZSBwcm9wYWdhdGVkIHRvIHRoZSBjb21waWxlciBvciBsaW5rZXIgZm9yIGdvb2QKKyMgbGlidG9vbCBzdXBwb3J0LgorY2FzZSAkaG9zdCBpbgoraWE2NC0qLWhwdXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisgICAgICAqRUxGLTMyKikKKwlIUFVYX0lBNjRfTU9ERT0iMzIiCisJOzsKKyAgICAgICpFTEYtNjQqKQorCUhQVVhfSUE2NF9NT0RFPSI2NCIKKwk7OworICAgIGVzYWMKKyAgZmkKKyAgcm0gLXJmIGNvbmZ0ZXN0KgorICA7OworKi0qLWlyaXg2KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICcjbGluZSAnJExJTkVOTycgImNvbmZpZ3VyZSInID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmMzJic21pcCIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJtaXBuMzIiCisJICA7OworCSo2NC1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC1tZWxmNjRibWlwIgorCTs7CisgICAgICBlc2FjCisgICAgZWxzZQorICAgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC4kYWNfb2JqZXh0YCBpbgorCSozMi1iaXQqKQorCSAgTEQ9IiR7TEQtbGR9IC0zMiIKKwkgIDs7CisJKk4zMiopCisJICBMRD0iJHtMRC1sZH0gLW4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisKK3g4Nl82NC0qa2ZyZWVic2QqLWdudXx4ODZfNjQtKmxpbnV4KnxwcGMqLSpsaW51eCp8cG93ZXJwYyotKmxpbnV4KnwgXAorczM5MCotKmxpbnV4KnxzMzkwKi0qdHBmKnxzcGFyYyotKmxpbnV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfY29tcGlsZVwiIjsgfSA+JjUKKyAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKKyAgYWNfc3RhdHVzPSQ/CisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9OyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIEMgY29tcGlsZXIgbmVlZHMgLWJlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZi4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9jY19uZWVkc19iZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9jY19uZWVkc19iZWxmPXllcworZWxzZQorICBsdF9jdl9jY19uZWVkc19iZWxmPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgYWNfZXh0PWMKK2FjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCithY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCithY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JworYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9jY19uZWVkc19iZWxmIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgPiY2OyB9CisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CitzcGFyYyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQorICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQorICBhY19zdGF0dXM9JD8KKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH07IHRoZW4KKyAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0Lm9gIGluCisgICAgKjY0LWJpdCopCisgICAgICBjYXNlICRsdF9jdl9wcm9nX2dudV9sZCBpbgorICAgICAgeWVzKikgTEQ9IiR7TEQtbGR9IC1tIGVsZjY0X3NwYXJjIiA7OworICAgICAgKikKKwlpZiAke0xELWxkfSAtNjQgLXIgLW8gY29uZnRlc3QyLm8gY29uZnRlc3QubyA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkgIExEPSIke0xELWxkfSAtNjQiCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKK2VzYWMKKworbmVlZF9sb2Nrcz0iJGVuYWJsZV9saWJ0b29sX2xvY2siCisKK2lmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW10Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW10OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTD0iJE1BTklGRVNUX1RPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19NQU5JRkVTVF9UT09MPSIke2FjX3Rvb2xfcHJlZml4fW10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJE1BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJE1BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX01BTklGRVNUX1RPT0wiOyB0aGVuCisgIGFjX2N0X01BTklGRVNUX1RPT0w9JE1BTklGRVNUX1RPT0wKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJtdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTUFOSUZFU1RfVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9NQU5JRkVTVF9UT09MPSIkYWNfY3RfTUFOSUZFU1RfVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X01BTklGRVNUX1RPT0w9Im10IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X01BTklGRVNUX1RPT0w9JGFjX2N2X3Byb2dfYWNfY3RfTUFOSUZFU1RfVE9PTAoraWYgdGVzdCAtbiAiJGFjX2N0X01BTklGRVNUX1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTUFOSUZFU1RfVE9PTCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X01BTklGRVNUX1RPT0wiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9NQU5JRkVTVF9UT09MIiA9IHg7IHRoZW4KKyAgICBNQU5JRkVTVF9UT09MPSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE1BTklGRVNUX1RPT0w9JGFjX2N0X01BTklGRVNUX1RPT0wKKyAgZmkKK2Vsc2UKKyAgTUFOSUZFU1RfVE9PTD0iJGFjX2N2X3Byb2dfTUFOSUZFU1RfVE9PTCIKK2ZpCisKK3Rlc3QgLXogIiRNQU5JRkVTVF9UT09MIiAmJiBNQU5JRkVTVF9UT09MPW10Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRNQU5JRkVTVF9UT09MIGlzIGEgbWFuaWZlc3QgdG9vbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9tYWluZmVzdF90b29sKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPW5vCisgIGVjaG8gIiRhc19tZTokTElORU5POiAkTUFOSUZFU1RfVE9PTCAnLT8nIiA+JjUKKyAgJE1BTklGRVNUX1RPT0wgJy0/JyAyPmNvbmZ0ZXN0LmVyciA+IGNvbmZ0ZXN0Lm91dAorICBjYXQgY29uZnRlc3QuZXJyID4mNQorICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworICBmaQorICBybSAtZiBjb25mdGVzdCoKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGx0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbCIgIT0geHllczsgdGhlbgorICBNQU5JRkVTVF9UT09MPToKK2ZpCisKKworCisKKworCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19EU1lNVVRJTD0iJERTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRFNZTVVUSUw9JGFjX2N2X3Byb2dfRFNZTVVUSUwKK2lmIHRlc3QgLW4gIiREU1lNVVRJTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICREU1lNVVRJTCIgPiY1CiskYXNfZWNobyAiJERTWU1VVElMIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3RfRFNZTVVUSUw9JERTWU1VVElMCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiZHN5bXV0aWwiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRzeW11dGlsOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9EU1lNVVRJTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTD0iJGFjX2N0X0RTWU1VVElMIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUw9ImRzeW11dGlsIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0RTWU1VVElMPSRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMCitpZiB0ZXN0IC1uICIkYWNfY3RfRFNZTVVUSUwiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQorJGFzX2VjaG8gIiRhY19jdF9EU1lNVVRJTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RTWU1VVElMIiA9IHg7IHRoZW4KKyAgICBEU1lNVVRJTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKKyAgZmkKK2Vsc2UKKyAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX05NRURJVCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCisgIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfTk1FRElUPSIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworZmkKK2ZpCitOTUVESVQ9JGFjX2N2X3Byb2dfTk1FRElUCitpZiB0ZXN0IC1uICIkTk1FRElUIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE5NRURJVCIgPiY1CiskYXNfZWNobyAiJE5NRURJVCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTk1FRElUIjsgdGhlbgorICBhY19jdF9OTUVESVQ9JE5NRURJVAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgbm1lZGl0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTk1FRElUIjsgdGhlbgorICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iJGFjX2N0X05NRURJVCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X05NRURJVD0kYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQKK2lmIHRlc3QgLW4gIiRhY19jdF9OTUVESVQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfTk1FRElUIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTk1FRElUIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisgIGlmIHRlc3QgIngkYWNfY3RfTk1FRElUIiA9IHg7IHRoZW4KKyAgICBOTUVESVQ9IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTk1FRElUPSRhY19jdF9OTUVESVQKKyAgZmkKK2Vsc2UKKyAgTk1FRElUPSIkYWNfY3ZfcHJvZ19OTUVESVQiCitmaQorCisgICAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9bGlwbyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1saXBvOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19MSVBPKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJExJUE8iOyB0aGVuCisgIGFjX2N2X3Byb2dfTElQTz0iJExJUE8iICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19MSVBPPSIke2FjX3Rvb2xfcHJlZml4fWxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorTElQTz0kYWNfY3ZfcHJvZ19MSVBPCitpZiB0ZXN0IC1uICIkTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRMSVBPIiA+JjUKKyRhc19lY2hvICIkTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfTElQTyI7IHRoZW4KKyAgYWNfY3RfTElQTz0kTElQTworICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImxpcG8iLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGxpcG87IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0xJUE8rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9MSVBPPSIkYWNfY3RfTElQTyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0xJUE89ImxpcG8iCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfTElQTz0kYWNfY3ZfcHJvZ19hY19jdF9MSVBPCitpZiB0ZXN0IC1uICIkYWNfY3RfTElQTyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9MSVBPIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfTElQTyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0xJUE8iID0geDsgdGhlbgorICAgIExJUE89IjoiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgTElQTz0kYWNfY3RfTElQTworICBmaQorZWxzZQorICBMSVBPPSIkYWNfY3ZfcHJvZ19MSVBPIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fW90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19PVE9PTD0iJE9UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w9IiR7YWNfdG9vbF9wcmVmaXh9b3Rvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT1RPT0w9JGFjX2N2X3Byb2dfT1RPT0wKK2lmIHRlc3QgLW4gIiRPVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPVE9PTCIgPiY1CiskYXNfZWNobyAiJE9UT09MIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19PVE9PTCI7IHRoZW4KKyAgYWNfY3RfT1RPT0w9JE9UT09MCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAib3Rvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG90b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9PVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTD0iJGFjX2N0X09UT09MIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w9Im90b29sIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MPSRhY19jdl9wcm9nX2FjX2N0X09UT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfT1RPT0wiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0wiID4mNQorJGFzX2VjaG8gIiRhY19jdF9PVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09UT09MIiA9IHg7IHRoZW4KKyAgICBPVE9PTD0iOiIKKyAgZWxzZQorICAgIGNhc2UgJGNyb3NzX2NvbXBpbGluZzokYWNfdG9vbF93YXJuZWQgaW4KK3llczopCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mMjt9CithY190b29sX3dhcm5lZD15ZXMgOzsKK2VzYWMKKyAgICBPVE9PTD0kYWNfY3RfT1RPT0wKKyAgZmkKK2Vsc2UKKyAgT1RPT0w9IiRhY19jdl9wcm9nX09UT09MIgorZmkKKworICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW90b29sNjQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9b3Rvb2w2NDsgYWNfd29yZD0kMgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3Byb2dfT1RPT0w2NCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRPVE9PTDY0IjsgdGhlbgorICBhY19jdl9wcm9nX09UT09MNjQ9IiRPVE9PTDY0IiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfT1RPT0w2ND0iJHthY190b29sX3ByZWZpeH1vdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK09UT09MNjQ9JGFjX2N2X3Byb2dfT1RPT0w2NAoraWYgdGVzdCAtbiAiJE9UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJE9UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworZmkKK2lmIHRlc3QgLXogIiRhY19jdl9wcm9nX09UT09MNjQiOyB0aGVuCisgIGFjX2N0X09UT09MNjQ9JE9UT09MNjQKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJvdG9vbDY0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBvdG9vbDY0OyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2ND0iJGFjX2N0X09UT09MNjQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19hY19jdF9PVE9PTDY0PSJvdG9vbDY0IgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X09UT09MNjQ9JGFjX2N2X3Byb2dfYWNfY3RfT1RPT0w2NAoraWYgdGVzdCAtbiAiJGFjX2N0X09UT09MNjQiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfT1RPT0w2NCIgPiY1CiskYXNfZWNobyAiJGFjX2N0X09UT09MNjQiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKyAgaWYgdGVzdCAieCRhY19jdF9PVE9PTDY0IiA9IHg7IHRoZW4KKyAgICBPVE9PTDY0PSI6IgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9UT09MNjQ9JGFjX2N0X09UT09MNjQKKyAgZmkKK2Vsc2UKKyAgT1RPT0w2ND0iJGFjX2N2X3Byb2dfT1RPT0w2NCIKK2ZpCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1zaW5nbGVfbW9kdWxlIGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mNQorCSRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBsaWJjb25mdGVzdC5keWxpYiBcCisJICAtZHluYW1pY2xpYiAtV2wsLXNpbmdsZV9tb2R1bGUgY29uZnRlc3QuYyAyPmNvbmZ0ZXN0LmVycgorICAgICAgICBfbHRfcmVzdWx0PSQ/CisJaWYgdGVzdCAtZiBsaWJjb25mdGVzdC5keWxpYiAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwOyB0aGVuCisJICBsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPXllcworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgPiY1CisJZmkKKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJcm0gLWYgY29uZnRlc3QuKgorICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9eWVzCitlbHNlCisgIGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA+JjY7IH0KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAtZm9yY2VfbG9hZCBsaW5rZXIgZmxhZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWcuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfbGRfZm9yY2VfbG9hZCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X2xkX2ZvcmNlX2xvYWQ9bm8KKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IGZvcmNlZF9sb2FkZWQoKSB7IHJldHVybiAyO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAtYyAtbyBjb25mdGVzdC5vIGNvbmZ0ZXN0LmMiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1jIC1vIGNvbmZ0ZXN0Lm8gY29uZnRlc3QuYyAyPiY1CisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiY1CisgICAgICAkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyAyPiY1CisgICAgICBlY2hvICIkUkFOTElCIGxpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JjUKKyAgICAgIGNhdCA+IGNvbmZ0ZXN0LmMgPDwgX0xUX0VPRgoraW50IG1haW4oKSB7IHJldHVybiAwO30KK19MVF9FT0YKKyAgICAgIGVjaG8gIiRMVENDICRMVENGTEFHUyAkTERGTEFHUyAtbyBjb25mdGVzdCBjb25mdGVzdC5jIC1XbCwtZm9yY2VfbG9hZCwuL2xpYmNvbmZ0ZXN0LmEiID4mNQorICAgICAgJExUQ0MgJExUQ0ZMQUdTICRMREZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgLVdsLC1mb3JjZV9sb2FkLC4vbGliY29uZnRlc3QuYSAyPmNvbmZ0ZXN0LmVycgorICAgICAgX2x0X3Jlc3VsdD0kPworICAgICAgaWYgdGVzdCAtZiBjb25mdGVzdCAmJiB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyICYmIHRlc3QgJF9sdF9yZXN1bHQgPSAwICYmICRHUkVQIGZvcmNlZF9sb2FkIGNvbmZ0ZXN0IDI+JjEgPi9kZXYvbnVsbDsgdGhlbgorCWx0X2N2X2xkX2ZvcmNlX2xvYWQ9eWVzCisgICAgICBlbHNlCisJY2F0IGNvbmZ0ZXN0LmVyciA+JjUKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID4mNjsgfQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbjEuKikKKyAgICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKyAgICBkYXJ3aW4qKSAjIGRhcndpbiA1Lnggb24KKyAgICAgICMgaWYgcnVubmluZyBvbiAxMC41IG9yIGxhdGVyLCB0aGUgZGVwbG95bWVudCB0YXJnZXQgZGVmYXVsdHMKKyAgICAgICMgdG8gdGhlIE9TIHZlcnNpb24sIGlmIG9uIHg4NiwgYW5kIDEwLjQsIHRoZSBkZXBsb3ltZW50CisgICAgICAjIHRhcmdldCBkZWZhdWx0cyB0byAxMC40LiBEb24ndCB5b3UgbG92ZSBpdD8KKyAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQtMTAuMH0sJGhvc3QgaW4KKwkxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworCTEwLlswMTJdKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworCitmb3IgYWNfaGVhZGVyIGluIGRsZmNuLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImRsZmNuLmgiICJhY19jdl9oZWFkZXJfZGxmY25faCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9kbGZjbl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfRExGQ05fSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKworCisKKyMgU2V0IG9wdGlvbnMKK2VuYWJsZV93aW4zMl9kbGw9eWVzCisKK2Nhc2UgJGhvc3QgaW4KKyotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1jZWdjYyopCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fWFzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSAke2FjX3Rvb2xfcHJlZml4fWFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19BUz0iJEFTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfQVM9IiR7YWNfdG9vbF9wcmVmaXh9YXMiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorQVM9JGFjX2N2X3Byb2dfQVMKK2lmIHRlc3QgLW4gIiRBUyI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRBUyIgPiY1CiskYXNfZWNobyAiJEFTIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2ZpCitpZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUyI7IHRoZW4KKyAgYWNfY3RfQVM9JEFTCisgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXMiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGFzOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19hY19jdF9BUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgLW4gIiRhY19jdF9BUyI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9BUz0iJGFjX2N0X0FTIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KK2Vsc2UKK2FzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3Byb2dfYWNfY3RfQVM9ImFzIgorICAgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQorICAgIGJyZWFrIDIKKyAgZmkKK2RvbmUKKyAgZG9uZQorSUZTPSRhc19zYXZlX0lGUworCitmaQorZmkKK2FjX2N0X0FTPSRhY19jdl9wcm9nX2FjX2N0X0FTCitpZiB0ZXN0IC1uICIkYWNfY3RfQVMiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3RfQVMiID4mNQorJGFzX2VjaG8gIiRhY19jdF9BUyIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0FTIiA9IHg7IHRoZW4KKyAgICBBUz0iZmFsc2UiCisgIGVsc2UKKyAgICBjYXNlICRjcm9zc19jb21waWxpbmc6JGFjX3Rvb2xfd2FybmVkIGluCit5ZXM6KQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiB1c2luZyBjcm9zcyB0b29scyBub3QgcHJlZml4ZWQgd2l0aCBob3N0IHRyaXBsZXQiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjI7fQorYWNfdG9vbF93YXJuZWQ9eWVzIDs7Citlc2FjCisgICAgQVM9JGFjX2N0X0FTCisgIGZpCitlbHNlCisgIEFTPSIkYWNfY3ZfcHJvZ19BUyIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9ZGxsdG9vbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kbGx0b29sOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19ETExUT09MKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJERMTFRPT0wiOyB0aGVuCisgIGFjX2N2X3Byb2dfRExMVE9PTD0iJERMTFRPT0wiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19ETExUT09MPSIke2FjX3Rvb2xfcHJlZml4fWRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorRExMVE9PTD0kYWNfY3ZfcHJvZ19ETExUT09MCitpZiB0ZXN0IC1uICIkRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRETExUT09MIiA+JjUKKyRhc19lY2hvICIkRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3RfRExMVE9PTD0kRExMVE9PTAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRsbHRvb2wiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRsbHRvb2w7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X0RMTFRPT0wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MPSIkYWNfY3RfRExMVE9PTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X0RMTFRPT0w9ImRsbHRvb2wiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfRExMVE9PTD0kYWNfY3ZfcHJvZ19hY19jdF9ETExUT09MCitpZiB0ZXN0IC1uICIkYWNfY3RfRExMVE9PTCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9ETExUT09MIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfRExMVE9PTCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X0RMTFRPT0wiID0geDsgdGhlbgorICAgIERMTFRPT0w9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIERMTFRPT0w9JGFjX2N0X0RMTFRPT0wKKyAgZmkKK2Vsc2UKKyAgRExMVE9PTD0iJGFjX2N2X3Byb2dfRExMVE9PTCIKK2ZpCisKKyAgaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9b2JqZHVtcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1vYmpkdW1wOyBhY193b3JkPSQyCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcHJvZ19PQkpEVU1QKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgaWYgdGVzdCAtbiAiJE9CSkRVTVAiOyB0aGVuCisgIGFjX2N2X3Byb2dfT0JKRFVNUD0iJE9CSkRVTVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgorZWxzZQorYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcHJvZ19PQkpEVU1QPSIke2FjX3Rvb2xfcHJlZml4fW9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorT0JKRFVNUD0kYWNfY3ZfcHJvZ19PQkpEVU1QCitpZiB0ZXN0IC1uICIkT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRPQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworCitmaQoraWYgdGVzdCAteiAiJGFjX2N2X3Byb2dfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3RfT0JKRFVNUD0kT0JKRFVNUAorICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIm9iamR1bXAiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IG9iamR1bXA7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2FjX2N0X09CSkRVTVArOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QPSIkYWNfY3RfT0JKRFVNUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCitlbHNlCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wcm9nX2FjX2N0X09CSkRVTVA9Im9iamR1bXAiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKK2ZpCitmaQorYWNfY3RfT0JKRFVNUD0kYWNfY3ZfcHJvZ19hY19jdF9PQkpEVU1QCitpZiB0ZXN0IC1uICIkYWNfY3RfT0JKRFVNUCI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdF9PQkpEVU1QIiA+JjUKKyRhc19lY2hvICIkYWNfY3RfT0JKRFVNUCIgPiY2OyB9CitlbHNlCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKKworICBpZiB0ZXN0ICJ4JGFjX2N0X09CSkRVTVAiID0geDsgdGhlbgorICAgIE9CSkRVTVA9ImZhbHNlIgorICBlbHNlCisgICAgY2FzZSAkY3Jvc3NfY29tcGlsaW5nOiRhY190b29sX3dhcm5lZCBpbgoreWVzOikKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNpbmcgY3Jvc3MgdG9vbHMgbm90IHByZWZpeGVkIHdpdGggaG9zdCB0cmlwbGV0IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIGNyb3NzIHRvb2xzIG5vdCBwcmVmaXhlZCB3aXRoIGhvc3QgdHJpcGxldCIgPiYyO30KK2FjX3Rvb2xfd2FybmVkPXllcyA7OworZXNhYworICAgIE9CSkRVTVA9JGFjX2N0X09CSkRVTVAKKyAgZmkKK2Vsc2UKKyAgT0JKRFVNUD0iJGFjX2N2X3Byb2dfT0JKRFVNUCIKK2ZpCisKKyAgOzsKK2VzYWMKKwordGVzdCAteiAiJEFTIiAmJiBBUz1hcworCisKKworCisKK3Rlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKKworCisKKworCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCisKKworCisKKworCisKKyAgICAgICAgZW5hYmxlX2Rsb3Blbj1ubworCisKKworICAgICAgICAgICAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXNoYXJlZCB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zaGFyZWQrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zaGFyZWQ7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc2hhcmVkPXllcyA7OworICAgIG5vKSBlbmFibGVfc2hhcmVkPW5vIDs7CisgICAgKikKKyAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KKyAgICAgICMgTG9vayBhdCB0aGUgYXJndW1lbnQgd2UgZ290LiAgV2UgdXNlIGFsbCB0aGUgY29tbW9uIGxpc3Qgc2VwYXJhdG9ycy4KKyAgICAgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSIke0lGU30kUEFUSF9TRVBBUkFUT1IsIgorICAgICAgZm9yIHBrZyBpbiAkZW5hYmxldmFsOyBkbworCUlGUz0iJGx0X3NhdmVfaWZzIgorCWlmIHRlc3QgIlgkcGtnIiA9ICJYJHAiOyB0aGVuCisJICBlbmFibGVfc2hhcmVkPXllcworCWZpCisgICAgICBkb25lCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIDs7CisgICAgZXNhYworZWxzZQorICBlbmFibGVfc2hhcmVkPXllcworZmkKKworCisKKworCisKKworCisKKyAgIyBDaGVjayB3aGV0aGVyIC0tZW5hYmxlLXN0YXRpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke2VuYWJsZV9zdGF0aWMrc2V0fSIgPSBzZXQ7IHRoZW4gOgorICBlbmFibGV2YWw9JGVuYWJsZV9zdGF0aWM7IHA9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9zdGF0aWM9eWVzCitmaQorCisKKworCisKKworCisKKworCisjIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyB3YXMgZ2l2ZW4uCitpZiB0ZXN0ICIke3dpdGhfcGljK3NldH0iID0gc2V0OyB0aGVuIDoKKyAgd2l0aHZhbD0kd2l0aF9waWM7IHBpY19tb2RlPSIkd2l0aHZhbCIKK2Vsc2UKKyAgcGljX21vZGU9ZGVmYXVsdAorZmkKKworCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPWRlZmF1bHQKKworCisKKworCisKKworICAjIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtZmFzdC1pbnN0YWxsIHdhcyBnaXZlbi4KK2lmIHRlc3QgIiR7ZW5hYmxlX2Zhc3RfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbiA6CisgIGVuYWJsZXZhbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbDsgcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjCitlbHNlCisgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCitmaQorCisKKworCisKKworCisKKworCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKK3Rlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKKworCisKKworCisKKworCisKKworCisKKworCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG9iamRpciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igb2JqZGlyLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X29iamRpcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIHJtIC1mIC5saWJzIDI+L2Rldi9udWxsCiBta2RpciAubGlicyAyPi9kZXYvbnVsbApAQCAtNzQ2NywxNCArMTE0MzEsMjEgQEAKIGZpCiBybWRpciAubGlicyAyPi9kZXYvbnVsbAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9vYmpkaXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X29iamRpciIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X29iamRpciIgPiY1CiskYXNfZWNobyAiJGx0X2N2X29iamRpciIgPiY2OyB9CiBvYmpkaXI9JGx0X2N2X29iamRpcgogCiAKIAogCiAKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTFRfT0JKRElSICIkbHRfY3Zfb2JqZGlyLyIKK19BQ0VPRgorCisKKworCiBjYXNlICRob3N0X29zIGluCiBhaXgzKikKICAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCkBAIC03NDg3LDMxNCArMTE0NTgsMjYgQEAKICAgOzsKIGVzYWMKIAotIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgaGVscHMgdXMgZG8gcm9idXN0IHF1b3RpbmcuICBJdCBiYWNrc2xhc2hpZmllcwotIyBtZXRhY2hhcmFjdGVycyB0aGF0IGFyZSBzdGlsbCBhY3RpdmUgd2l0aGluIGRvdWJsZS1xdW90ZWQgc3RyaW5ncy4KLVhzZWQ9J3NlZCAtZSAxcy9eWC8vJwotc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcIlxcYCRcXFxcXVwpL1xcXDEvZycKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCi1kb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbXFwiXFxgXFxcXF1cKS9cXFwxL2cnCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0byBkZWxheSBleHBhbnNpb24gb2YgYW4gZXNjYXBlZCBzaGVsbCB2YXJpYWJsZSBpbiBhCi0jIGRvdWJsZV9xdW90ZV9zdWJzdCdlZCBzdHJpbmcuCi1kZWxheV92YXJpYWJsZV9zdWJzdD0ncy9cXFxcXFxcXFxcXCQvXFxcXFxcJC9nJwotCi0jIFNlZCBzdWJzdGl0dXRpb24gdG8gYXZvaWQgYWNjaWRlbnRhbCBnbG9iYmluZyBpbiBldmFsZWQgZXhwcmVzc2lvbnMKLW5vX2dsb2Jfc3Vic3Q9J3MvXCovXFxcKi9nJwotCi0jIENvbnN0YW50czoKLXJtPSJybSAtZiIKLQogIyBHbG9iYWwgdmFyaWFibGVzOgotZGVmYXVsdF9vZmlsZT1saWJ0b29sCitvZmlsZT1saWJ0b29sCiBjYW5fYnVpbGRfc2hhcmVkPXllcwogCiAjIEFsbCBrbm93biBsaW5rZXJzIHJlcXVpcmUgYSBgLmEnIGFyY2hpdmUgZm9yIHN0YXRpYyBsaW5raW5nIChleGNlcHQgTVNWQywKICMgd2hpY2ggbmVlZHMgJy5saWInKS4KIGxpYmV4dD1hCi1sdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKLW9maWxlPSIkZGVmYXVsdF9vZmlsZSIKKwogd2l0aF9nbnVfbGQ9IiRsdF9jdl9wcm9nX2dudV9sZCIKIAotaWYgdGVzdCAtbiAiJGFjX3Rvb2xfcHJlZml4IjsgdGhlbgotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiR7YWNfdG9vbF9wcmVmaXh9YXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9YXI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfQVIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEFSIjsgdGhlbgotICBhY19jdl9wcm9nX0FSPSIkQVIiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0FSPSIke2FjX3Rvb2xfcHJlZml4fWFyIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotQVI9JGFjX2N2X3Byb2dfQVIKLWlmIHRlc3QgLW4gIiRBUiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFSIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRBUiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19BUiI7IHRoZW4KLSAgYWNfY3RfQVI9JEFSCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiYXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGFyOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2FjX2N0X0FSK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9BUiI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iJGFjX2N0X0FSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9BUj0iYXIiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19hY19jdF9BUiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9BUj0iZmFsc2UiCi1maQotZmkKLWFjX2N0X0FSPSRhY19jdl9wcm9nX2FjX2N0X0FSCi1pZiB0ZXN0IC1uICIkYWNfY3RfQVIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9BUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfQVIiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIEFSPSRhY19jdF9BUgotZWxzZQotICBBUj0iJGFjX2N2X3Byb2dfQVIiCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1yYW5saWIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICR7YWNfdG9vbF9wcmVmaXh9cmFubGliOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX1JBTkxJQitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICBhY19jdl9wcm9nX1JBTkxJQj0iJFJBTkxJQiIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfUkFOTElCPSIke2FjX3Rvb2xfcHJlZml4fXJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi1maQotZmkKLVJBTkxJQj0kYWNfY3ZfcHJvZ19SQU5MSUIKLWlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRSQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JFJBTkxJQiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3ZfcHJvZ19SQU5MSUIiOyB0aGVuCi0gIGFjX2N0X1JBTkxJQj0kUkFOTElCCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicmFubGliIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSByYW5saWI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfUkFOTElCK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIGFjX2N2X3Byb2dfYWNfY3RfUkFOTElCPSIkYWNfY3RfUkFOTElCIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9InJhbmxpYiIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1JBTkxJQiIgJiYgYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUI9IjoiCi1maQotZmkKLWFjX2N0X1JBTkxJQj0kYWNfY3ZfcHJvZ19hY19jdF9SQU5MSUIKLWlmIHRlc3QgLW4gIiRhY19jdF9SQU5MSUIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdF9SQU5MSUIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1JBTkxJQiIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSAgUkFOTElCPSRhY19jdF9SQU5MSUIKLWVsc2UKLSAgUkFOTElCPSIkYWNfY3ZfcHJvZ19SQU5MSUIiCi1maQotCi1pZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1zdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1zdHJpcDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TVFJJUCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkU1RSSVAiOyB0aGVuCi0gIGFjX2N2X3Byb2dfU1RSSVA9IiRTVFJJUCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfU1RSSVA9IiR7YWNfdG9vbF9wcmVmaXh9c3RyaXAiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1TVFJJUD0kYWNfY3ZfcHJvZ19TVFJJUAotaWYgdGVzdCAtbiAiJFNUUklQIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JFNUUklQIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX1NUUklQIjsgdGhlbgotICBhY19jdF9TVFJJUD0kU1RSSVAKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJzdHJpcCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgc3RyaXA7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfU1RSSVArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSIkYWNfY3RfU1RSSVAiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSJzdHJpcCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X1NUUklQIiAmJiBhY19jdl9wcm9nX2FjX2N0X1NUUklQPSI6IgotZmkKLWZpCi1hY19jdF9TVFJJUD0kYWNfY3ZfcHJvZ19hY19jdF9TVFJJUAotaWYgdGVzdCAtbiAiJGFjX2N0X1NUUklQIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfU1RSSVAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X1NUUklQIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBTVFJJUD0kYWNfY3RfU1RSSVAKLWVsc2UKLSAgU1RSSVA9IiRhY19jdl9wcm9nX1NUUklQIgotZmkKLQotCiBvbGRfQ0M9IiRDQyIKIG9sZF9DRkxBR1M9IiRDRkxBR1MiCiAKICMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCi10ZXN0IC16ICIkQVIiICYmIEFSPWFyCi10ZXN0IC16ICIkQVJfRkxBR1MiICYmIEFSX0ZMQUdTPWNydQotdGVzdCAteiAiJEFTIiAmJiBBUz1hcwogdGVzdCAteiAiJENDIiAmJiBDQz1jYwogdGVzdCAteiAiJExUQ0MiICYmIExUQ0M9JENDCiB0ZXN0IC16ICIkTFRDRkxBR1MiICYmIExUQ0ZMQUdTPSRDRkxBR1MKLXRlc3QgLXogIiRETExUT09MIiAmJiBETExUT09MPWRsbHRvb2wKIHRlc3QgLXogIiRMRCIgJiYgTEQ9bGQKLXRlc3QgLXogIiRMTl9TIiAmJiBMTl9TPSJsbiAtcyIKLXRlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCi10ZXN0IC16ICIkTk0iICYmIE5NPW5tCi10ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCi10ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCi10ZXN0IC16ICIkUkFOTElCIiAmJiBSQU5MSUI9OgotdGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CiB0ZXN0IC16ICIkYWNfb2JqZXh0IiAmJiBhY19vYmpleHQ9bwogCi0jIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KLW9sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJwotb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KLQotaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBvcGVuYnNkKikKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgotICAgIDs7Ci0gICopCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKLSAgICA7OwotICBlc2FjCi0gIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgotZmkKLQogZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCiAgIGNhc2UgJGNjX3RlbXAgaW4KICAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7CkBAIC03ODAzLDE3ICsxMTQ4NiwxOCBAQAogICAgICopIGJyZWFrOzsKICAgZXNhYwogZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCitjY19iYXNlbmFtZT1gJEVDSE8gIiRjY190ZW1wIiB8ICRTRUQgInMlLiovJSU7IHMlXiRob3N0X2FsaWFzLSUlImAKIAogCiAjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCiBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgogZmlsZV9tYWdpYyopCiAgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICR7YWNfdG9vbF9wcmVmaXh9ZmlsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTUFHSUNfQ01EK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJHthY190b29sX3ByZWZpeH1maWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAke2FjX3Rvb2xfcHJlZml4fWZpbGUuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRNQUdJQ19DTUQgaW4KIFtcXC8qXSB8ICA/OltcXC9dKikKQEAgLTc4MzcsNyArMTE1MjEsNyBAQAogCSAgICAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgogCSAgICA6CiAJICBlbHNlCi0JICAgIGNhdCA8PEVPRiAxPiYyCisJICAgIGNhdCA8PF9MVF9FT0YgMT4mMgogCiAqKiogV2FybmluZzogdGhlIGNvbW1hbmQgbGlidG9vbCB1c2VzIHRvIGRldGVjdCBzaGFyZWQgbGlicmFyaWVzLAogKioqICRmaWxlX21hZ2ljX2NtZCwgcHJvZHVjZXMgb3V0cHV0IHRoYXQgbGlidG9vbCBjYW5ub3QgcmVjb2duaXplLgpAQCAtNzg0OCw3ICsxMTUzMiw3IEBACiAqKiogbWF5IHdhbnQgdG8gcmVwb3J0IHRoZSBwcm9ibGVtIHRvIHlvdXIgc3lzdGVtIG1hbmFnZXIgYW5kL29yIHRvCiAqKiogYnVnLWxpYnRvb2xAZ251Lm9yZwogCi1FT0YKK19MVF9FT0YKIAkgIGZpIDs7CiAJZXNhYwogICAgICAgZmkKQEAgLTc4NjMsMTkgKzExNTQ3LDIzIEBACiAKIE1BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgogaWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE1BR0lDX0NNRCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTUFHSUNfQ01EIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQorJGFzX2VjaG8gIiRNQUdJQ19DTUQiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogZmkKIAorCisKKworCiBpZiB0ZXN0IC16ICIkbHRfY3ZfcGF0aF9NQUdJQ19DTUQiOyB0aGVuCiAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGZpbGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZmlsZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcGF0aF9NQUdJQ19DTUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBmaWxlLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3BhdGhfTUFHSUNfQ01EKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgY2FzZSAkTUFHSUNfQ01EIGluCiBbXFwvKl0gfCAgPzpbXFwvXSopCkBAIC03ODk5LDcgKzExNTg3LDcgQEAKIAkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgOgogCSAgZWxzZQotCSAgICBjYXQgPDxFT0YgMT4mMgorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKIAogKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKICoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KQEAgLTc5MTAsNyArMTE1OTgsNyBAQAogKioqIG1heSB3YW50IHRvIHJlcG9ydCB0aGUgcHJvYmxlbSB0byB5b3VyIHN5c3RlbSBtYW5hZ2VyIGFuZC9vciB0bwogKioqIGJ1Zy1saWJ0b29sQGdudS5vcmcKIAotRU9GCitfTFRfRU9GCiAJICBmaSA7OwogCWVzYWMKICAgICAgIGZpCkBAIC03OTI1LDEzICsxMTYxMywxNCBAQAogCiBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKIGlmIHRlc3QgLW4gIiRNQUdJQ19DTUQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRNQUdJQ19DTUQiID4mNQotZWNobyAiJHtFQ0hPX1R9JE1BR0lDX0NNRCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTUFHSUNfQ01EIiA+JjUKKyRhc19lY2hvICIkTUFHSUNfQ01EIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKwogICBlbHNlCiAgICAgTUFHSUNfQ01EPToKICAgZmkKQEAgLTc5NDEsMzExICsxMTYzMCw4IEBACiAgIDs7CiBlc2FjCiAKLQotICBjYXNlICRob3N0X29zIGluCi0gICAgcmhhcHNvZHkqIHwgZGFyd2luKikKLSAgICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJHthY190b29sX3ByZWZpeH1kc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1kc3ltdXRpbDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19EU1lNVVRJTCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBpZiB0ZXN0IC1uICIkRFNZTVVUSUwiOyB0aGVuCi0gIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiREU1lNVVRJTCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCi1lbHNlCi1hc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3Byb2dfRFNZTVVUSUw9IiR7YWNfdG9vbF9wcmVmaXh9ZHN5bXV0aWwiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1EU1lNVVRJTD0kYWNfY3ZfcHJvZ19EU1lNVVRJTAotaWYgdGVzdCAtbiAiJERTWU1VVElMIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRFNZTVVUSUwiID4mNQotZWNobyAiJHtFQ0hPX1R9JERTWU1VVElMIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX0RTWU1VVElMIjsgdGhlbgotICBhY19jdF9EU1lNVVRJTD0kRFNZTVVUSUwKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJkc3ltdXRpbCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgZHN5bXV0aWw7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfYWNfY3RfRFNZTVVUSUwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgotICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSIkYWNfY3RfRFNZTVVUSUwiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSJkc3ltdXRpbCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1Ci0gICAgYnJlYWsgMgotICBmaQotZG9uZQotZG9uZQotCi0gIHRlc3QgLXogIiRhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMIiAmJiBhY19jdl9wcm9nX2FjX2N0X0RTWU1VVElMPSI6IgotZmkKLWZpCi1hY19jdF9EU1lNVVRJTD0kYWNfY3ZfcHJvZ19hY19jdF9EU1lNVVRJTAotaWYgdGVzdCAtbiAiJGFjX2N0X0RTWU1VVElMIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3RfRFNZTVVUSUwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N0X0RTWU1VVElMIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBEU1lNVVRJTD0kYWNfY3RfRFNZTVVUSUwKLWVsc2UKLSAgRFNZTVVUSUw9IiRhY19jdl9wcm9nX0RTWU1VVElMIgotZmkKLQotICAgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCI7IHRoZW4KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIke2FjX3Rvb2xfcHJlZml4fW5tZWRpdCIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJHthY190b29sX3ByZWZpeH1ubWVkaXQ7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfTk1FRElUK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiROTUVESVQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfTk1FRElUPSIkTk1FRElUIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19OTUVESVQ9IiR7YWNfdG9vbF9wcmVmaXh9bm1lZGl0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotTk1FRElUPSRhY19jdl9wcm9nX05NRURJVAotaWYgdGVzdCAtbiAiJE5NRURJVCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJE5NRURJVCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTk1FRElUIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotZmkKLWlmIHRlc3QgLXogIiRhY19jdl9wcm9nX05NRURJVCI7IHRoZW4KLSAgYWNfY3RfTk1FRElUPSROTUVESVQKLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJubWVkaXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IG5tZWRpdDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19hY19jdF9OTUVESVQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19hY19jdF9OTUVESVQ9IiRhY19jdF9OTUVESVQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0ibm1lZGl0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgdGVzdCAteiAiJGFjX2N2X3Byb2dfYWNfY3RfTk1FRElUIiAmJiBhY19jdl9wcm9nX2FjX2N0X05NRURJVD0iOiIKLWZpCi1maQotYWNfY3RfTk1FRElUPSRhY19jdl9wcm9nX2FjX2N0X05NRURJVAotaWYgdGVzdCAtbiAiJGFjX2N0X05NRURJVCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N0X05NRURJVCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3RfTk1FRElUIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICBOTUVESVQ9JGFjX2N0X05NRURJVAotZWxzZQotICBOTUVESVQ9IiRhY19jdl9wcm9nX05NRURJVCIKLWZpCi0KLQotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD1ubwotICAgICAgaWYgdGVzdCAteiAiJHtMVF9NVUxUSV9NT0RVTEV9IjsgdGhlbgotICAgIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCi0gICAjIGJ5IGVpdGhlciBzZXR0aW5nIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBMVF9NVUxUSV9NT0RVTEUKLSAgICMgbm9uLWVtcHR5IGF0IGNvbmZpZ3VyZSB0aW1lLCBvciBieSBhZGRpbmcgLW11bHRpX21vZHVsZSB0byB0aGUKLSAgICMgbGluayBmbGFncy4KLSAgIGVjaG8gImludCBmb28odm9pZCl7cmV0dXJuIDE7fSIgPiBjb25mdGVzdC5jCi0gICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAotICAgICAtZHluYW1pY2xpYiAke3dsfS1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMKLSAgIGlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWI7IHRoZW4KLSAgICAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKLSAgICAgcm0gLXJmIGxpYmNvbmZ0ZXN0LmR5bGliKgotICAgZmkKLSAgIHJtIGNvbmZ0ZXN0LmMKLSAgICAgIGZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID4mNgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBsaW5rZXIgZmxhZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PW5vCi0gICAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKLSAgICAgIGVjaG8gIl9tYWluIiA+IGNvbmZ0ZXN0LnN5bQotICAgICAgTERGTEFHUz0iJExERkxBR1MgLVdsLC1leHBvcnRlZF9zeW1ib2xzX2xpc3QsY29uZnRlc3Quc3ltIgotICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1sdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdCIgPiY2Ci0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIHJoYXBzb2R5KiB8IGRhcndpbjEuWzAxMjNdKQotICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbjEuKikKLSAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OwotICAgIGRhcndpbiopCi0gICAgICAjIGlmIHJ1bm5pbmcgb24gMTAuNSBvciBsYXRlciwgdGhlIGRlcGxveW1lbnQgdGFyZ2V0IGRlZmF1bHRzCi0gICAgICAjIHRvIHRoZSBPUyB2ZXJzaW9uLCBpZiBvbiB4ODYsIGFuZCAxMC40LCB0aGUgZGVwbG95bWVudAotICAgICAgIyB0YXJnZXQgZGVmYXVsdHMgdG8gMTAuNC4gRG9uJ3QgeW91IGxvdmUgaXQ/Ci0gICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VULTEwLjB9LCRob3N0IGluCi0gICAxMC4wLCo4NiotZGFyd2luOCp8MTAuMCwqLWRhcndpbls5MV0qKQotICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9ZHluYW1pY19sb29rdXAnIDs7Ci0gICAxMC5bMDEyXSopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKLSAgIDEwLiopCi0gICAgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKLSAgICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gICAgaWYgdGVzdCAiJGx0X2N2X2FwcGxlX2NjX3NpbmdsZV9tb2QiID0gInllcyI7IHRoZW4KLSAgICAgIF9sdF9kYXJfc2luZ2xlX21vZD0nJHNpbmdsZV9tb2R1bGUnCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0IiA9ICJ5ZXMiOyB0aGVuCi0gICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPScgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sc19saXN0LCRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0nCi0gICAgZWxzZQotICAgICAgX2x0X2Rhcl9leHBvcnRfc3ltcz0ifiROTUVESVQgLXMgXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltIFwke2xpYn0iCi0gICAgZmkKLSAgICBpZiB0ZXN0ICIkRFNZTVVUSUwiICE9ICI6IjsgdGhlbgotICAgICAgX2x0X2RzeW11dGlsPSJ+JERTWU1VVElMIFwkbGliIHx8IDoiCi0gICAgZWxzZQotICAgICAgX2x0X2RzeW11dGlsPQotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotCi0KLWVuYWJsZV9kbG9wZW49eWVzCi1lbmFibGVfd2luMzJfZGxsPXllcwotCi0jIENoZWNrIHdoZXRoZXIgLS1lbmFibGUtbGlidG9vbC1sb2NrIG9yIC0tZGlzYWJsZS1saWJ0b29sLWxvY2sgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHtlbmFibGVfbGlidG9vbF9sb2NrK3NldH0iID0gc2V0OyB0aGVuCi0gIGVuYWJsZXZhbD0iJGVuYWJsZV9saWJ0b29sX2xvY2siCi0KLWZpOwotdGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXBpYyBvciAtLXdpdGhvdXQtcGljIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9waWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfcGljIgotICBwaWNfbW9kZT0iJHdpdGh2YWwiCi1lbHNlCi0gIHBpY19tb2RlPWRlZmF1bHQKLWZpOwotdGVzdCAteiAiJHBpY19tb2RlIiAmJiBwaWNfbW9kZT1kZWZhdWx0Ci0KICMgVXNlIEMgZm9yIHRoZSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gaW4gdGhlIGxpYnRvb2wgc2NyaXB0Ci10YWduYW1lPQorCiBsdF9zYXZlX0NDPSIkQ0MiCiBhY19leHQ9YwogYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKQEAgLTgyNjgsNiArMTE2NTQsMTEgQEAKIGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0naW50IG1haW4oKXtyZXR1cm4oMCk7fScKIAogCisKKworCisKKwogIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KIExUQ0M9JHtMVENDLSIkQ0MifQogCkBAIC04Mjc3LDM1ICsxMTY2OCw0NyBAQAogIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KIGNvbXBpbGVyPSRDQwogCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKIAogIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAogZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKIGV2YWwgIiRhY19jb21waWxlIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgogX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIGNvbmZ0ZXN0KgorJFJNIGNvbmZ0ZXN0KgogCiBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CiBldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKIF9sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gLXIgY29uZnRlc3QqCiskUk0gLXIgY29uZnRlc3QqCiAKIAorIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCiAKIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnPQogCiBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgbnZjYyopCisgICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9JyAtWGNvbXBpbGVyIC1mbm8tYnVpbHRpbicgOzsKKyAgKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYwogCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgbHRfY29tcGlsZXJfZmxhZz0iLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKICAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCkBAIC04MzE3LDI1ICsxMTcyMCwyNSBAQAogICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAogICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAogICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZTo4MzIwOiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogJGx0X2NvbXBpbGVcIiIgPiY1KQogICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZTo4MzI0OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKICAgIGlmIChleGl0ICRhY19zdGF0dXMpICYmIHRlc3QgLXMgIiRhY19vdXRmaWxlIjsgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3Mgb3RoZXIgdGhhbiB0aGUgdXN1YWwgb3V0cHV0LgotICAgICAkZWNobyAiWCRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+Y29uZnRlc3QuZXhwCiAgICAgICRTRUQgJy9eJC9kOyAvXiAqKy9kJyBjb25mdGVzdC5lcnIgPmNvbmZ0ZXN0LmVyMgogICAgICBpZiB0ZXN0ICEgLXMgY29uZnRlc3QuZXIyIHx8IGRpZmYgY29uZnRlc3QuZXhwIGNvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCiAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnM9eWVzCiAgICAgIGZpCiAgICBmaQotICAgJHJtIGNvbmZ0ZXN0KgorICAgJFJNIGNvbmZ0ZXN0KgogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNjsgfQogCiBpZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KICAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMiCkBAIC04MzQ1LDEyICsxMTc0OCwxNSBAQAogCiBmaQogCi1sdF9wcm9nX2NvbXBpbGVyX3dsPQorCisKKworCisKKyAgbHRfcHJvZ19jb21waWxlcl93bD0KIGx0X3Byb2dfY29tcGlsZXJfcGljPQogbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDLi4uICRFQ0hPX0MiID4mNgogCiAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgICAgbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKQEAgLTgzNjYsMTcgKzExNzcyLDI1IEBACiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JworICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLWZQSUMnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAorICAgICAgICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCisgICAgICAgICAgICAjIGxpa2UgYC1tNjgwNDAnLgorICAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCiAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KICAgICAgIDs7CiAKLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQorICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCiAgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgogICAgICAgIyBBbHRob3VnaCB0aGUgY3lnd2luIGdjYyBpZ25vcmVzIC1mUElDLCBzdGlsbCBuZWVkIHRoaXMgZm9yIG9sZC1zdHlsZQpAQCAtODM5MCw2ICsxMTgwNCwyNiBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mbm8tY29tbW9uJwogICAgICAgOzsKIAorICAgIGhhaWt1KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBIYWlrdS4KKyAgICAgICMgVGhlICItc3RhdGljIiBmbGFnIGV4aXN0cywgYnV0IGlzIGJyb2tlbi4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKwogICAgIGludGVyaXhbMy05XSopCiAgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgogICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCkBAIC04NDAyLDI5ICsxMTgzNiwyOSBAQAogICAgICAgZW5hYmxlX3NoYXJlZD1ubwogICAgICAgOzsKIAorICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworCiAgICAgc3lzdjQqTVAqKQogICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgogCWx0X3Byb2dfY29tcGlsZXJfcGljPS1LY29uZm9ybV9waWMKICAgICAgIGZpCiAgICAgICA7OwogCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWM9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCiAgICAgKikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKICAgICAgIDs7CiAgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1YbGlua2VyICcKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctWGNvbXBpbGVyIC1mUElDJworICAgICAgOzsKKyAgICBlc2FjCiAgIGVsc2UKICAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCiAgICAgY2FzZSAkaG9zdF9vcyBpbgpAQCAtODQzNywxOCArMTE4NzEsOCBAQAogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCiAgICAgICBmaQogICAgICAgOzsKLSAgICAgIGRhcndpbiopCi0gICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICB4bGMqKQotICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKIAotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCisgICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKiB8IGNlZ2NjKikKICAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKICAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCiAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLURETExfRVhQT1JUJwpAQCAtODQ3NiwxOSArMTE5MDAsMzQgQEAKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctbm9uX3NoYXJlZCcKICAgICAgIDs7CiAKLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGljYyogfCBlY2MqKQorICAgICAgIyBvbGQgSW50ZWwgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisgICAgICBlY2MqKQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAJbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctc3RhdGljJwogICAgICAgICA7OwotICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSopCisgICAgICAjIGljYyB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKyAgICAgICMgSUNDIDEwIGRvZXNuJ3QgYWNjZXB0IC1LUElDIGFueSBtb3JlLgorICAgICAgaWNjKiB8IGlmb3J0KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgTGFoZXkgRm9ydHJhbiA4LjEuCisgICAgICBsZjk1KikKKwlsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJworCWx0X3Byb2dfY29tcGlsZXJfcGljPSctLXNoYXJlZCcKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLS1zdGF0aWMnCisJOzsKKyAgICAgIG5hZ2ZvciopCisJIyBOQUcgRm9ydHJhbiBjb21waWxlcgorCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwtV2wsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLVBJQycKKwlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCisJOzsKKyAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKICAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKIAkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQogCWx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCkBAIC04NTAwLDI1ICsxMTkzOSw0MiBAQAogICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KICAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1ub25fc2hhcmVkJwogICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCcKKwlsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLXFwaWMnCisJbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1xc3RhdGljbGluaycKKwk7OwogICAgICAgKikKLSAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJKlN1blwgRiogfCAqU3VuKkZvcnRyYW4qKQorCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgorCSAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJworCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJworCSAgbHRfcHJvZ19jb21waWxlcl93bD0nJworCSAgOzsKIAkqU3VuXCBDKikKIAkgICMgU3VuIEMgNS45CiAJICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0nLUtQSUMnCiAJICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYz0nLUJzdGF0aWMnCiAJICBsdF9wcm9nX2NvbXBpbGVyX3dsPSctV2wsJwogCSAgOzsKLQkqU3VuXCBGKikKLQkgICMgU3VuIEZvcnRyYW4gOC4zIHBhc3NlcyBhbGwgdW5yZWNvZ25pemVkIGZsYWdzIHRvIHRoZSBsaW5rZXIKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2w9JycKLQkgIDs7CiAJZXNhYwogCTs7CiAgICAgICBlc2FjCiAgICAgICA7OwogCisgICAgbmV3c29zNikKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctS1BJQycKKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKwogICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2w9Jy1XbCwnCiAgICAgICAjIEFsbCBPU0YvMSBjb2RlIGlzIFBJQy4KQEAgLTg1MzMsNyArMTE5ODksNyBAQAogICAgICAgbHRfcHJvZ19jb21waWxlcl9waWM9Jy1LUElDJwogICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWM9Jy1Cc3RhdGljJwogICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKKyAgICAgIGY3NyogfCBmOTAqIHwgZjk1KiB8IHN1bmY3NyogfCBzdW5mOTAqIHwgc3VuZjk1KikKIAlsdF9wcm9nX2NvbXBpbGVyX3dsPSctUW9wdGlvbiBsZCAnOzsKICAgICAgICopCiAJbHRfcHJvZ19jb21waWxlcl93bD0nLVdsLCc7OwpAQCAtODU4MSwyMSArMTIwMzcsMzggQEAKICAgICBlc2FjCiAgIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWMiID4mNgorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0KKyAgICA7OworICAqKQorICAgIGx0X3Byb2dfY29tcGlsZXJfcGljPSIkbHRfcHJvZ19jb21waWxlcl9waWMgLURQSUMiCisgICAgOzsKK2VzYWMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGNvbXBpbGVyIG9wdGlvbiB0byBwcm9kdWNlIFBJQy4uLiAiID4mNjsgfQoraWYgJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljPSRsdF9wcm9nX2NvbXBpbGVyX3BpYworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWMiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYyIgPiY2OyB9CitsdF9wcm9nX2NvbXBpbGVyX3BpYz0kbHRfY3ZfcHJvZ19jb21waWxlcl9waWMKIAogIwogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGFjdHVhbGx5IHdvcmtzLgogIwogaWYgdGVzdCAtbiAiJGx0X3Byb2dfY29tcGlsZXJfcGljIjsgdGhlbgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWMgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpYyB3b3JrcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3M9bm8KLSAgYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CisgICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKICAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAogICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgogICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKQEAgLTg2MDcsMjUgKzEyMDgwLDI1IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjg2MTA6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQogICAgYWNfc3RhdHVzPSQ/CiAgICBjYXQgY29uZnRlc3QuZXJyID4mNQotICAgZWNobyAiJGFzX21lOjg2MTQ6IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQogICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCiAgICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCiAgICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCiAgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KICAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrcz15ZXMKICAgICAgZmkKICAgIGZpCi0gICAkcm0gY29uZnRlc3QqCisgICAkUk0gY29uZnRlc3QqCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcyIgPiY2OyB9CiAKIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3MiID0geHllczsgdGhlbgogICAgIGNhc2UgJGx0X3Byb2dfY29tcGlsZXJfcGljIGluCkBAIC04NjM4LDI0ICsxMjExMSwyNSBAQAogZmkKIAogZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWM9Ci0gICAgOzsKLSAgKikKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpYz0iJGx0X3Byb2dfY29tcGlsZXJfcGljIC1EUElDIgotICAgIDs7Ci1lc2FjCisKKworCisKKworCisKKworCisKIAogIwogIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgogIwogd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBsdF90bXBfc3RhdGljX2ZsYWc9XCIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9bm8KICAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCkBAIC04NjY3LDcgKzEyMTQxLDcgQEAKICAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KICAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgogICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgICRlY2hvICJYJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFhzZWQgLWUgJy9eJC9kJyA+IGNvbmZ0ZXN0LmV4cAorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKICAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKICAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3M9eWVzCkBAIC04Njc2LDEyICsxMjE1MCwxMiBAQAogICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzPXllcwogICAgICBmaQogICAgZmkKLSAgICRybSAtciBjb25mdGVzdCoKKyAgICRSTSAtciBjb25mdGVzdCoKICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCiAKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID4mNQorJGFzX2VjaG8gIiRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3JrcyIgPiY2OyB9CiAKIGlmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3MiID0geHllczsgdGhlbgogICAgIDoKQEAgLTg2OTAsMTMgKzEyMTY0LDE4IEBACiBmaQogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1jIC1vIGZpbGUuJGFjX29iamV4dCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICIgPiY2OyB9CitpZiAke2x0X2N2X3Byb2dfY29tcGlsZXJfY19vKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289bm8KLSAgICRybSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCiAgICBta2RpciBjb25mdGVzdAogICAgY2QgY29uZnRlc3QKICAgIG1rZGlyIG91dApAQCAtODcxMSw4MyArMTIxOTAsMTQ4IEBACiAgICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCiAgICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCiAgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjg3MTQ6ICRsdF9jb21waWxlXCIiID4mNSkKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCiAgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKICAgIGFjX3N0YXR1cz0kPwogICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6ODcxODogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CiAgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAogICAgdGhlbgogICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAogICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPiBvdXQvY29uZnRlc3QuZXhwCisgICAgICRFQ0hPICIkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRTRUQgJy9eJC9kJyA+IG91dC9jb25mdGVzdC5leHAKICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIG91dC9jb25mdGVzdC5lcnIgPm91dC9jb25mdGVzdC5lcjIKICAgICAgaWYgdGVzdCAhIC1zIG91dC9jb25mdGVzdC5lcjIgfHwgZGlmZiBvdXQvY29uZnRlc3QuZXhwIG91dC9jb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgogICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vPXllcwogICAgICBmaQogICAgZmkKICAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKKyAgICRSTSBjb25mdGVzdCoKICAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKICAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAorICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJFJNIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcworICAgJFJNIG91dC8qICYmIHJtZGlyIG91dAogICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjY7IH0KKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9jX28rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz1ubworICAgJFJNIC1yIGNvbmZ0ZXN0IDI+L2Rldi9udWxsCisgICBta2RpciBjb25mdGVzdAorICAgY2QgY29uZnRlc3QKKyAgIG1rZGlyIG91dAorICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9Ii1vIG91dC9jb25mdGVzdDIuJGFjX29iamV4dCIKKyAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCisgICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgorICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucworICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JjUpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKKyAgIGFjX3N0YXR1cz0kPworICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1CisgICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX289eWVzCisgICAgIGZpCisgICBmaQorICAgY2htb2QgdSt3IC4gMj4mNQorICAgJFJNIGNvbmZ0ZXN0KgorICAgIyBTR0kgQysrIGNvbXBpbGVyIHdpbGwgY3JlYXRlIGRpcmVjdG9yeSBvdXQvaWlfZmlsZXMvIGZvcgorICAgIyB0ZW1wbGF0ZSBpbnN0YW50aWF0aW9uCisgICB0ZXN0IC1kIG91dC9paV9maWxlcyAmJiAkUk0gb3V0L2lpX2ZpbGVzLyogJiYgcm1kaXIgb3V0L2lpX2ZpbGVzCisgICAkUk0gb3V0LyogJiYgcm1kaXIgb3V0CisgICBjZCAuLgorICAgJFJNIC1yIGNvbmZ0ZXN0CisgICAkUk0gY29uZnRlc3QqCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID4mNjsgfQorCisKIAogCiBoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCiBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCiAgICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBsb2NrIHdpdGggaGFyZCBsaW5rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3MuLi4gIiA+JjY7IH0KICAgaGFyZF9saW5rcz15ZXMKLSAgJHJtIGNvbmZ0ZXN0KgorICAkUk0gY29uZnRlc3QqCiAgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCiAgIHRvdWNoIGNvbmZ0ZXN0LmEKICAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwogICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1CiskYXNfZWNobyAiJGhhcmRfbGlua3MiID4mNjsgfQogICBpZiB0ZXN0ICIkaGFyZF9saW5rcyIgPSBubzsgdGhlbgotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBcYCRDQycgZG9lcyBub3Qgc3VwcG9ydCBcYC1jIC1vJywgc28gXGBtYWtlIC1qJyBtYXkgYmUgdW5zYWZlIiA+JjI7fQogICAgIG5lZWRfbG9ja3M9d2FybgogICBmaQogZWxzZQogICBuZWVkX2xvY2tzPW5vCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgorCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgJGNvbXBpbGVyIGxpbmtlciAoJExEKSBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CiAKICAgcnVucGF0aF92YXI9CiAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPQotICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPW5vCisgIGFsd2F5c19leHBvcnRfc3ltYm9scz1ubwogICBhcmNoaXZlX2NtZHM9CiAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9Ci0gIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHM9Ci0gIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPQorICBjb21waWxlcl9uZWVkc19vYmplY3Q9bm8KKyAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcz1ubwogICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQotICB0aHJlYWRfc2FmZV9mbGFnX3NwZWM9CisgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgaGFyZGNvZGVfYXV0b21hdGljPW5vCisgIGhhcmRjb2RlX2RpcmVjdD1ubworICBoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9bm8KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0KICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0KLSAgaGFyZGNvZGVfZGlyZWN0PW5vCiAgIGhhcmRjb2RlX21pbnVzX0w9bm8KICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpbmhlcml0X3JwYXRoPW5vCiAgIGxpbmtfYWxsX2RlcGxpYnM9dW5rbm93bgotICBoYXJkY29kZV9hdXRvbWF0aWM9bm8KICAgbW9kdWxlX2NtZHM9CiAgIG1vZHVsZV9leHBzeW1fY21kcz0KLSAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzPW5vCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0KKyAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9CisgIHRocmVhZF9zYWZlX2ZsYWdfc3BlYz0KKyAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9CiAgICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKICAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKICAgaW5jbHVkZV9leHBzeW1zPQpAQCAtODgwMywxOSArMTIzNDcsOSBAQAogICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgogICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCiAgIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCiAKICAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKICAgICAjIEZJWE1FOiB0aGUgTVNWQysrIHBvcnQgaGFzbid0IGJlZW4gdGVzdGVkIGluIGEgbG9vb29uZyB0aW1lCiAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgpAQCAtODgzMyw3ICsxMjM2NywzMyBAQAogICBlc2FjCiAKICAgbGRfc2hsaWJzPXllcworCisgICMgT24gc29tZSB0YXJnZXRzLCBHTlUgbGQgaXMgY29tcGF0aWJsZSBlbm91Z2ggd2l0aCB0aGUgbmF0aXZlIGxpbmtlcgorICAjIHRoYXQgd2UncmUgYmV0dGVyIG9mZiB1c2luZyB0aGUgbmF0aXZlIGludGVyZmFjZSBmb3IgYm90aC4KKyAgbHRfdXNlX2dudV9sZF9pbnRlcmZhY2U9bm8KICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIGFpeCopCisJIyBUaGUgQUlYIHBvcnQgb2YgR05VIGxkIGhhcyBhbHdheXMgYXNwaXJlZCB0byBjb21wYXRpYmlsaXR5CisJIyB3aXRoIHRoZSBuYXRpdmUgbGlua2VyLiAgSG93ZXZlciwgYXMgdGhlIHdhcm5pbmcgaW4gdGhlIEdOVSBsZAorCSMgYmxvY2sgc2F5cywgdmVyc2lvbnMgYmVmb3JlIDIuMTkuNSogY291bGRuJ3QgcmVhbGx5IGNyZWF0ZSB3b3JraW5nCisJIyBzaGFyZWQgbGlicmFyaWVzLCByZWdhcmRsZXNzIG9mIHRoZSBpbnRlcmZhY2UgdXNlZC4KKwljYXNlIGAkTEQgLXYgMj4mMWAgaW4KKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCAyLjE5LjUqKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuWzItOV0qKSA7OworCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIFszLTldKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCiAgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKICAgICB3bGFyYz0nJHt3bH0nCiAKQEAgLTg4NDEsMTYgKzEyNDAxLDE3IEBACiAgICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCiAgICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgogICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCiAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCiAgICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCi0gICAgICBlbHNlCi0gIAl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgIGVsc2UKKyAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQogICAgIGZpCiAgICAgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPW5vCi0gICAgY2FzZSBgJExEIC12IDI+L2Rldi9udWxsYCBpbgorICAgIGNhc2UgYCRMRCAtdiAyPiYxYCBpbgorICAgICAgKkdOVVwgZ29sZCopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsKICAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKICAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCiAgICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCkBAIC04ODY0LDM0ICsxMjQyNSwzNiBAQAogICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgogICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCiAJbGRfc2hsaWJzPW5vCi0JY2F0IDw8RU9GIDE+JjIKKwljYXQgPDxfTFRfRU9GIDE+JjIKIAotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAorKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuMTksIGlzIHJlcG9ydGVkCiAqKiogdG8gYmUgdW5hYmxlIHRvIHJlbGlhYmx5IGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIEFJWC4KICoqKiBUaGVyZWZvcmUsIGxpYnRvb2wgaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIElmIHlvdQotKioqIHJlYWxseSBjYXJlIGZvciBzaGFyZWQgbGlicmFyaWVzLCB5b3UgbWF5IHdhbnQgdG8gbW9kaWZ5IHlvdXIgUEFUSAotKioqIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZCwgYW5kIHRoZW4gcmVzdGFydC4KKyoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIGluc3RhbGwgYmludXRpbHMKKyoqKiAyLjIwIG9yIGFib3ZlLCBvciBtb2RpZnkgeW91ciBQQVRIIHNvIHRoYXQgYSBub24tR05VIGxpbmtlciBpcyBmb3VuZC4KKyoqKiBZb3Ugd2lsbCB0aGVuIG5lZWQgdG8gcmVzdGFydCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLgogCi1FT0YKK19MVF9FT0YKICAgICAgIGZpCiAgICAgICA7OwogCiAgICAgYW1pZ2FvcyopCi0gICAgICBhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MPXllcwotCi0gICAgICAjIFNhbXVlbCBBLiBGYWx2byBJSSA8a2M1dGphQGRvbHBoaW4ub3BlbnByb2plY3RzLm5ldD4gcmVwb3J0cwotICAgICAgIyB0aGF0IHRoZSBzZW1hbnRpY3Mgb2YgZHluYW1pYyBsaWJyYXJpZXMgb24gQW1pZ2FPUywgYXQgbGVhc3QgdXAKLSAgICAgICMgdG8gdmVyc2lvbiA0LCBpcyB0byBzaGFyZSBkYXRhIGFtb25nIG11bHRpcGxlIHByb2dyYW1zIGxpbmtlZAotICAgICAgIyB3aXRoIHRoZSBzYW1lIGR5bmFtaWMgbGlicmFyeS4gIFNpbmNlIHRoaXMgZG9lc24ndCBtYXRjaCB0aGUKLSAgICAgICMgYmVoYXZpb3Igb2Ygc2hhcmVkIGxpYnJhcmllcyBvbiBvdGhlciBwbGF0Zm9ybXMsIHdlIGNhbid0IHVzZQotICAgICAgIyB0aGVtLgotICAgICAgbGRfc2hsaWJzPW5vCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgcG93ZXJwYykKKyAgICAgICAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgQW1pZ2FPUzQgLnNvIHN1cHBvcnQKKyAgICAgICAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBOQU1FICRsaWJuYW1lIiA+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTElCUkFSWV9JRCAxIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFZFUlNJT04gJG1ham9yIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIFJFVklTSU9OICRyZXZpc2lvbiIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kQVIgJEFSX0ZMQUdTICRsaWIgJGxpYm9ianN+JFJBTkxJQiAkbGlifihjZCAkb3V0cHV0X29iamRpciAmJiBhMml4bGlicmFyeSAtMzIpJworICAgICAgICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nLUwkbGliZGlyJworICAgICAgICAgICAgaGFyZGNvZGVfbWludXNfTD15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKICAgICAgIDs7CiAKICAgICBiZW9zKikKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYwogCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKQEAgLTg5MDEsMTYgKzEyNDY0LDE4IEBACiAgICAgICBmaQogICAgICAgOzsKIAotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCApIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCApIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAogICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKKyAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tLWV4cG9ydC1hbGwtc3ltYm9scycKICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCiAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9bm8KICAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCi0gICAgICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW0JDREdSU11bIF0vcy8uKlsgXVwoW14gXSpcKS9cMSBEQVRBLydcJycgLWUgJ1wnJy9eW0FJVFddWyBdL3MvLipbIF0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvO3MvXi4qWyBdX19ubV9fXChbXiBdKlwpWyBdW14gXSovXDEgREFUQS87L15JWyBdL2Q7L15bQUlUV11bIF0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIGV4Y2x1ZGVfZXhwc3ltcz0nW19dK0dMT0JBTF9PRkZTRVRfVEFCTEVffFtfXStHTE9CQUxfX1tGSURdXy4qfFtfXStoZWFkX1tBLVphLXowLTlfXStfZGxsfFtBLVphLXowLTlfXStfZGxsX2luYW1lJwogCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKIAkjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCiAJIyBpcyBFWFBPUlRTKSwgdXNlIGl0IGFzIGlzOyBvdGhlcndpc2UsIHByZXBlbmQuLi4KQEAgLTg5MjYsNiArMTI0OTEsMTEgQEAKICAgICAgIGZpCiAgICAgICA7OwogCisgICAgaGFpa3UqKQorICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICA7OworCiAgICAgaW50ZXJpeFszLTldKikKICAgICAgIGhhcmRjb2RlX2RpcmVjdD1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwpAQCAtODk0MSw2MCArMTI1MTEsOTUgQEAKICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCiAgICAgICA7OwogCi0gICAgZ251KiB8IGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQl0bXBfYWRkZmxhZz0KKyAgICBnbnUqIHwgbGludXgqIHwgdHBmKiB8IGsqYnNkKi1nbnUgfCBrb3BlbnNvbGFyaXMqLWdudSkKKyAgICAgIHRtcF9kaWV0PW5vCisgICAgICBpZiB0ZXN0ICIkaG9zdF9vcyIgPSBsaW51eC1kaWV0bGliYzsgdGhlbgorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBkaWV0XCAqKSB0bXBfZGlldD15ZXM7OwkjIGxpbnV4LWRpZXRsaWJjIHdpdGggc3RhdGljIGxpbmtpbmcgKCFkaWV0LWR5bikKKwllc2FjCisgICAgICBmaQorICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgJEVHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGwgXAorCSAmJiB0ZXN0ICIkdG1wX2RpZXQiID0gbm8KKyAgICAgIHRoZW4KKwl0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwl0bXBfc2hhcmVkZmxhZz0nLXNoYXJlZCcKIAljYXNlICRjY19iYXNlbmFtZSwkaG9zdF9jcHUgaW4KLQlwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBwZ2NjKikJCQkJIyBQb3J0bGFuZCBHcm91cCBDIGNvbXBpbGVyCisJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCiAJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKIAkgIDs7Ci0JcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwlwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorCQkJCQkjIFBvcnRsYW5kIEdyb3VwIGY3NyBhbmQgZjkwIGNvbXBpbGVycworCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwogCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAorCWVjYyosaWE2NCogfCBpY2MqLGlhNjQqKQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAogCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwogCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0CiAJICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7CiAJaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKIAkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7CisJbGY5NSopCQkJCSMgTGFoZXkgRm9ydHJhbiA4LjEKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPQorCSAgdG1wX3NoYXJlZGZsYWc9Jy0tc2hhcmVkJyA7OworCXhsW2NDXSogfCBiZ3hsW2NDXSogfCBtcGl4bFtjQ10qKSAjIElCTSBYTCBDIDguMCBvbiBQUEMgKGRlYWwgd2l0aCB4bGYgYmVsb3cpCisJICB0bXBfc2hhcmVkZmxhZz0nLXFta3Nocm9iaicKKwkgIHRtcF9hZGRmbGFnPSA7OworCW52Y2MqKQkjIEN1ZGEgQ29tcGlsZXIgRHJpdmVyIDIuMgorCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcworCSAgOzsKIAllc2FjCiAJY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCiAJKlN1blwgQyopCQkJIyBTdW4gQyA1LjkKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgY29tcGlsZXJfbmVlZHNfb2JqZWN0PXllcwogCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwogCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCiAJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwogCWVzYWMKIAlhcmNoaXZlX2NtZHM9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCiAKLQlpZiB0ZXN0ICRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmcgPSB5ZXM7IHRoZW4KLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gICRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLQkgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCi0JZmkKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgICRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXZlcnNpb24tc2NyaXB0ICR7d2x9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisgICAgICAgIGZpCisKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCXhsZiogfCBiZ2YqIHwgYmd4bGYqIHwgbXBpeGxmKikKKwkgICMgSUJNIFhMIEZvcnRyYW4gMTAuMSBvbiBQUEMgY2Fubm90IGNyZWF0ZSBzaGFyZWQgbGlicyBpdHNlbGYKKwkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSctLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgLS1uby13aG9sZS1hcmNoaXZlJworCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0KKwkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCSAgYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtbyAkbGliJworCSAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCiAgICAgICBlbHNlCi0JbGRfc2hsaWJzPW5vCisgICAgICAgIGxkX3NobGlicz1ubwogICAgICAgZmkKICAgICAgIDs7CiAKICAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1vICRsaWInCiAJd2xhcmM9CiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQogICAgICAgOzsKIAogICAgIHNvbGFyaXMqKQotICAgICAgaWYgJExEIC12IDI+JjEgfCBncmVwICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmICRMRCAtdiAyPiYxIHwgJEdSRVAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgogCWxkX3NobGlicz1ubwotCWNhdCA8PEVPRiAxPiYyCisJY2F0IDw8X0xUX0VPRiAxPiYyCiAKICoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CiAqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCkBAIC05MDAzLDEwICsxMjYwOCwxMCBAQAogKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKICoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgogCi1FT0YKLSAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKK19MVF9FT0YKKyAgICAgIGVsaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlsZF9zaGxpYnM9bm8KICAgICAgIGZpCkBAIC05MDI4LDEwICsxMjYzMywxNCBAQAogX0xUX0VPRgogCTs7CiAJKikKLQkgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tcnBhdGgsJGxpYmRpcmAnCi0JICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lLC1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cworCSAgIyB1c2UgYWJzb2x1dGUgcGF0aHMgZm9yIG5hbWluZyBzaGFyZWQgbGlicmFyaWVzLCBhbmQgZXhjbHVkZSB0aGUKKwkgICMgRFRfUlVOUEFUSCB0YWcgZnJvbSBleGVjdXRhYmxlcyBhbmQgbGlicmFyaWVzLiAgQnV0IGRvaW5nIHNvCisJICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgorCSAgaWYgJExEIC0taGVscCAyPiYxIHwgJEdSRVAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwogCSAgZWxzZQogCSAgICBsZF9zaGxpYnM9bm8KIAkgIGZpCkBAIC05MDQ3LDkgKzEyNjU2LDkgQEAKICAgICAgIDs7CiAKICAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBlbHNlCiAJbGRfc2hsaWJzPW5vCiAgICAgICBmaQpAQCAtOTA4OSwxMCArMTI2OTgsMTIgQEAKICAgICAgIGVsc2UKIAkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KIAkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwkjIEFsc28sIEFJWCBubSB0cmVhdHMgd2VhayBkZWZpbmVkIHN5bWJvbHMgbGlrZSBvdGhlciBnbG9iYWwKKwkjIGRlZmluZWQgc3ltYm9scywgd2hlcmVhcyBHTlUgbm0gbWFya3MgdGhlbSBhcyAiVyIuCisJaWYgJE5NIC1WIDI+JjEgfCAkR1JFUCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkIDIgPT0gIlQiKSB8fCAoXCQgMiA9PSAiRCIpIHx8IChcJCAyID09ICJCIikgfHwgKFwkIDIgPT0gIlciKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwogCWVsc2UKLQkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwkgIGV4cG9ydF9zeW1ib2xzX2NtZHM9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJCAzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJCAzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwogCWZpCiAJYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwogCkBAIC05MTAxLDEwICsxMjcxMiwxMCBAQAogCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCiAJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQogCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQorCSAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKwkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgYnJlYWsKKwkgIGZpCiAJICBkb25lCiAJICA7OwogCWVzYWMKQEAgLTkxMjEsMjggKzEyNzMyLDMwIEBACiAKICAgICAgIGFyY2hpdmVfY21kcz0nJwogICAgICAgaGFyZGNvZGVfZGlyZWN0PXllcworICAgICAgaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPXllcwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0nOicKICAgICAgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgICAgICBmaWxlX2xpc3Rfc3BlYz0nJHt3bH0tZiwnCiAKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKIAkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKIAkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKIAkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmCisJICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKIAkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKKwkgICMgV2UgaGF2ZSByZXdvcmtlZCBjb2xsZWN0MgorCSAgOgogCSAgZWxzZQotICAJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0gIAkgIGhhcmRjb2RlX2RpcmVjdD11bnN1cHBvcnRlZAotICAJICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0gIAkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCi0gIAkgICMgdG8gdW5zdXBwb3J0ZWQgZm9yY2VzIHJlbGlua2luZwotICAJICBoYXJkY29kZV9taW51c19MPXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCi0gIAkgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9CisJICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCisJICBoYXJkY29kZV9kaXJlY3Q9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIGhhcmRjb2RlX21pbnVzX0w9eWVzCisJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPQogCSAgZmkKIAkgIDs7CiAJZXNhYwpAQCAtOTE1Myw4ICsxMjc2Niw4IEBACiAgICAgICBlbHNlCiAJIyBub3QgdXNpbmcgZ2NjCiAJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKIAkgIHNoYXJlZF9mbGFnPSctRycKIAllbHNlCiAJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KQEAgLTkxNjUsNiArMTI3NzgsNyBAQAogCWZpCiAgICAgICBmaQogCisgICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LWJleHBhbGwnCiAgICAgICAjIEl0IHNlZW1zIHRoYXQgLWJleHBhbGwgZG9lcyBub3QgZXhwb3J0IHN5bWJvbHMgYmVnaW5uaW5nIHdpdGgKICAgICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCiAgICAgICBhbHdheXNfZXhwb3J0X3N5bWJvbHM9eWVzCkBAIC05MTcyLDEyICsxMjc4NiwxNSBAQAogCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAogCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KIAlhbGxvd191bmRlZmluZWRfZmxhZz0nLWJlcm9rJwotICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotICAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKyAgICAgICAgIyBlbXB0eSBleGVjdXRhYmxlLgorICAgICAgICBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC05MTg4LDY0ICsxMjgwNSw0OSBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQogZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQogCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQogCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBlY2hvICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgotICAgICAgIGVsc2UKKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoXworZmkKKworICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQogCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCiAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKIAkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIteiBub2RlZnMiCiAJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgogCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4KKwkgIyBlbXB0eSBleGVjdXRhYmxlLgorCSBpZiB0ZXN0ICIke2x0X2N2X2FpeF9saWJwYXRoK3NldH0iID0gc2V0OyB0aGVuCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aAorZWxzZQorICBpZiAke2x0X2N2X2FpeF9saWJwYXRoXys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC05MjU2LDU3ICsxMjg1OCw0NCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgbHRfYWl4X2xpYnBhdGhfc2VkPScKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfScKKyAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICBmaQogZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgIGlmIHRlc3QgLXogIiRsdF9jdl9haXhfbGlicGF0aF8iOyB0aGVuCisgICAgbHRfY3ZfYWl4X2xpYnBhdGhfPSIvdXNyL2xpYjovbGliIgorICBmaQogCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQorCisgIGFpeF9saWJwYXRoPSRsdF9jdl9haXhfbGlicGF0aF8KK2ZpCiAKIAkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKIAkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCiAJICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCiAJICBub191bmRlZmluZWRfZmxhZz0nICR7d2x9LWJlcm5vdG9rJwogCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1iZXJvaycKLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyR7d2x9LS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgZWxzZQorCSAgICAjIEV4cG9ydGVkIHN5bWJvbHMgY2FuIGJlIHB1bGxlZCBpbnRvIHNoYXJlZCBvYmplY3RzIGZyb20gYXJjaGl2ZXMKKwkgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JyRjb252ZW5pZW5jZScKKwkgIGZpCiAJICBhcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKIAkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCiAJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJHt3bH0tYm5vZW50cnkgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWJFOiRleHBvcnRfc3ltYm9scyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9fiRBUiAkQVJfRkxBR1MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUkcmVsZWFzZS5hICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCkBAIC05MzE1LDg1ICsxMjkwNCwxMTcgQEAKICAgICAgIDs7CiAKICAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kcz0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX21pbnVzX0w9eWVzCi0gICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCi0gICAgICBsZF9zaGxpYnM9bm8KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHM9JycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICBhcmNoaXZlX2NtZHM9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCisgICAgICAgICAgICBoYXJkY29kZV9taW51c19MPXllcworICAgICAgICA7OworICAgICAgZXNhYwogICAgICAgOzsKIAogICAgIGJzZGlbNDVdKikKICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0tcmR5bmFtaWMKICAgICAgIDs7CiAKLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKICAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCiAgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCiAgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1vICRsaWIgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzIGBlY2hvICIkZGVwbGlicyIgfCAkU0VEIC1lICdcJydzLyAtbGMkLy8nXCcnYCAtbGluayAtZGxsfmxpbmtuYW1lcz0nCi0gICAgICAjIFRoZSBsaW5rZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgLmxpYiBmaWxlIGlmIHdlIGJ1aWxkIGEgRExMLgotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0ndHJ1ZScKLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBvbGRfYXJjaGl2ZV9jbWRzPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBmaXhfc3JjZmlsZV9wYXRoPSdgY3lncGF0aCAtdyAiJHNyY2ZpbGUiYCcKLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgY2wqKQorCSMgTmF0aXZlIE1TVkMKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScgJworCWFsbG93X3VuZGVmaW5lZF9mbGFnPXVuc3VwcG9ydGVkCisJYWx3YXlzX2V4cG9ydF9zeW1ib2xzPXllcworCWZpbGVfbGlzdF9zcGVjPSdAJworCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICAgIHNlZCAtbiAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIC1lICcxXFxcIXAnIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICBlbHNlCisJICAgIHNlZCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICBmaX4KKwkgICRDQyAtbyAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgIkAkdG9vbF9vdXRwdXRfb2JqZGlyJHNvbmFtZS5leHAiIC1XbCwtRExMLC1JTVBMSUI6IiR0b29sX291dHB1dF9vYmpkaXIkbGlibmFtZS5kbGwubGliIn4KKwkgIGxpbmtuYW1lcz0nCisJIyBUaGUgbGlua2VyIHdpbGwgbm90IGF1dG9tYXRpY2FsbHkgYnVpbGQgYSBzdGF0aWMgbGliIGlmIHdlIGJ1aWxkIGEgRExMLgorCSMgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCApPSd0cnVlJworCWVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9eWVzCisJZXhwb3J0X3N5bWJvbHNfY21kcz0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltCQ0RHUlNdWyBdL3MvLipbIF1cKFteIF0qXCkvXDEsREFUQS8nXCcnIHwgJFNFRCAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworCSMgRG9uJ3QgdXNlIHJhbmxpYgorCW9sZF9wb3N0aW5zdGFsbF9jbWRzPSdjaG1vZCA2NDQgJG9sZGxpYicKKwlwb3N0bGlua19jbWRzPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAqLmV4ZXwqLkVYRSkgOzsKKwkgICAgKikKKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICA7OworCSAgZXNhY34KKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgZmknCisJOzsKKyAgICAgICopCisJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nICcKKwlhbGxvd191bmRlZmluZWRfZmxhZz11bnN1cHBvcnRlZAorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAubGliIGZpbGVzLCBub3QgLmEgZmlsZXMuCisJbGliZXh0PWxpYgorCSMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCXNocmV4dF9jbWRzPSIuZGxsIgorCSMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisJb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0ndHJ1ZScKKwkjIEZJWE1FOiBTaG91bGQgbGV0IHRoZSB1c2VyIHNwZWNpZnkgdGhlIGxpYiBwcm9ncmFtLgorCW9sZF9hcmNoaXZlX2NtZHM9J2xpYiAtT1VUOiRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicycKKwllbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzPXllcworCTs7CisgICAgICBlc2FjCiAgICAgICA7OwogCiAgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgZWxzZQotICAgICAgICAgICBjYXNlICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSBpbgotICAgICAgICAgICAgIDEwLlswMTJdKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwotICAgICAgaGFyZGNvZGVfZGlyZWN0PW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWM9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPXVuc3VwcG9ydGVkCi0gICAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJwotICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kcz0iXCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJF9sdF9kYXJfc2luZ2xlX21vZCR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgbW9kdWxlX2NtZHM9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHM9InNlZCAtZSAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICBlbHNlCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICB4bGMqKQotICAgICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIG1vZHVsZV9jbWRzPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taW5zdGFsbF9uYW1lICR7d2x9JHJwYXRoLyRzb25hbWUgJHhsY3ZlcnN0cmluZ35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQorCisKKyAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KKyAgaGFyZGNvZGVfZGlyZWN0PW5vCisgIGhhcmRjb2RlX2F1dG9tYXRpYz15ZXMKKyAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj11bnN1cHBvcnRlZAorICBpZiB0ZXN0ICIkbHRfY3ZfbGRfZm9yY2VfbG9hZCIgPSAieWVzIjsgdGhlbgorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPSdgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UgJHt3bH0tZm9yY2VfbG9hZCwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCcKKyAgZWxzZQorICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjPScnCisgIGZpCisgIGxpbmtfYWxsX2RlcGxpYnM9eWVzCisgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkX2x0X2Rhcl9hbGxvd191bmRlZmluZWQiCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgIGlmb3J0KikgX2x0X2Rhcl9jYW5fc2hhcmVkPXllcyA7OworICAgICAqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9JEdDQyA7OworICBlc2FjCisgIGlmIHRlc3QgIiRfbHRfZGFyX2Nhbl9zaGFyZWQiID0gInllcyI7IHRoZW4KKyAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1mdW5jX2VjaG9fYWxsCisgICAgYXJjaGl2ZV9jbWRzPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9jbWRzPSJcJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kc3ltdXRpbH0iCisgICAgYXJjaGl2ZV9leHBzeW1fY21kcz0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG1vZHVsZV9leHBzeW1fY21kcz0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorCisgIGVsc2UKKyAgbGRfc2hsaWJzPW5vCisgIGZpCisKICAgICAgIDs7CiAKICAgICBkZ3V4KikKQEAgLTk0MjcsNyArMTMwNDgsNyBAQAogCiAgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgogICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIGFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9Jy1SJGxpYmRpcicKICAgICAgIGhhcmRjb2RlX2RpcmVjdD15ZXMKICAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KQEAgLTk0MzUsOSArMTMwNTYsOSBAQAogCiAgICAgaHB1eDkqKQogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCisJYXJjaGl2ZV9jbWRzPSckUk0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKICAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHM9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworCWFyY2hpdmVfY21kcz0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCiAgICAgICBmaQogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0rYiAke3dsfSRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKQEAgLTk0NTAsMTggKzEzMDcxLDE4IEBACiAgICAgICA7OwogCiAgICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogICAgICAgZWxzZQogCWFyY2hpdmVfY21kcz0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfStiICR7d2x9JGxpYmRpcicKKwloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPScrYiAkbGliZGlyJwogCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9OgotCiAJaGFyZGNvZGVfZGlyZWN0PXllcworCWhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKIAlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUUnCi0KIAkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAogCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgogCWhhcmRjb2RlX21pbnVzX0w9eWVzCkBAIC05NDY5LDE2ICsxMzA5MCwxNiBAQAogICAgICAgOzsKIAogICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KIAljYXNlICRob3N0X2NwdSBpbgogCWhwcGEqNjQqKQogCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJaWE2NCopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICA7OwogCSopCi0JICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwogCSAgOzsKIAllc2FjCiAgICAgICBlbHNlCkBAIC05NDkwLDcgKzEzMTExLDQ2IEBACiAJICBhcmNoaXZlX2NtZHM9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKIAkgIDs7CiAJKikKLQkgIGFyY2hpdmVfY21kcz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmICRDQyB1bmRlcnN0YW5kcyAtYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiAkQ0MgdW5kZXJzdGFuZHMgLWIuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfcHJvZ19jb21waWxlcl9fYis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGx0X2N2X3Byb2dfY29tcGlsZXJfX2I9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAtYiIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorICAgICAgICRFQ0hPICIkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkU0VEICcvXiQvZCcgPiBjb25mdGVzdC5leHAKKyAgICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKKyAgICAgICBpZiBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgICBmaQorICAgICBlbHNlCisgICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9fYj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX19iIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPiY2OyB9CisKK2lmIHRlc3QgeCIkbHRfY3ZfcHJvZ19jb21waWxlcl9fYiIgPSB4eWVzOyB0aGVuCisgICAgYXJjaGl2ZV9jbWRzPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKK2Vsc2UKKyAgICBhcmNoaXZlX2NtZHM9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCitmaQorCiAJICA7OwogCWVzYWMKICAgICAgIGZpCkBAIC05NTAwLDEyICsxMzE2MCwxMiBAQAogCiAJY2FzZSAkaG9zdF9jcHUgaW4KIAlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JytiICRsaWJkaXInCiAJICBoYXJkY29kZV9kaXJlY3Q9bm8KIAkgIGhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KIAkgIDs7CiAJKikKIAkgIGhhcmRjb2RlX2RpcmVjdD15ZXMKKwkgIGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT15ZXMKIAkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tRScKIAogCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKQEAgLTk1MTgsMTggKzEzMTc4LDQ5IEBACiAKICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkjIFRyeSB0byB1c2UgdGhlIC1leHBvcnRlZF9zeW1ib2wgbGQgb3B0aW9uLCBpZiBpdCBkb2VzIG5vdAorCSMgd29yaywgYXNzdW1lIHRoYXQgLWV4cG9ydHNfZmlsZSBkb2VzIG5vdCB3b3JrIGVpdGhlciBhbmQKKwkjIGltcGxpY2l0bHkgZXhwb3J0IGFsbCBzeW1ib2xzLgorCSMgVGhpcyBzaG91bGQgYmUgdGhlIHNhbWUgZm9yIGFsbCBsYW5ndWFnZXMsIHNvIG5vIHBlci10YWcgY2FjaGUgdmFyaWFibGUuCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSAkaG9zdF9vcyBsaW5rZXIgYWNjZXB0cyAtZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlICRob3N0X29zIGxpbmtlciBhY2NlcHRzIC1leHBvcnRlZF9zeW1ib2wuLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorCSAgIExERkxBR1M9IiRMREZMQUdTIC1zaGFyZWQgJHt3bH0tZXhwb3J0ZWRfc3ltYm9sICR7d2x9Zm9vICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfS9kZXYvbnVsbCIKKwkgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitpbnQgZm9vICh2b2lkKSB7IHJldHVybiAwOyB9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzCitlbHNlCisgIGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICAgTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA+JjUKKyRhc19lY2hvICIkbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2wiID4mNjsgfQorCWlmIHRlc3QgIiRsdF9jdl9pcml4X2V4cG9ydGVkX3N5bWJvbCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9Jy1ycGF0aCAkbGliZGlyJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1leHBvcnRzX2ZpbGUgJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCiAgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CisgICAgICBpbmhlcml0X3JwYXRoPXllcwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKICAgICAgIDs7CiAKICAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KIAlhcmNoaXZlX2NtZHM9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0CiAgICAgICBlbHNlCiAJYXJjaGl2ZV9jbWRzPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKQEAgLTk1NDcsMTEgKzEzMjM4LDE1IEBACiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCiAgICAgICA7OwogCisgICAgKm50byogfCAqcW54KikKKyAgICAgIDs7CisKICAgICBvcGVuYnNkKikKICAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCiAJaGFyZGNvZGVfZGlyZWN0PXllcwogCWhhcmRjb2RlX3NobGlicGF0aF92YXI9bm8KLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwloYXJkY29kZV9kaXJlY3RfYWJzb2x1dGU9eWVzCisJaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgogCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAJICBhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCiAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwpAQCAtOTU2Nyw3ICsxMzI2Miw3IEBACiAJICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1ycGF0aCwkbGliZGlyJwogCSAgICAgOzsKIAkgIGVzYWMKLSAgICAgICAgZmkKKwlmaQogICAgICAgZWxzZQogCWxkX3NobGlicz1ubwogICAgICAgZmkKQEAgLTk1NzcsMTggKzEzMjcyLDE5IEBACiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctTCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9taW51c19MPXllcwogICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWc9dW5zdXBwb3J0ZWQKLSAgICAgIGFyY2hpdmVfY21kcz0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kcz0nZW14aW1wIC1vICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmEgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgYXJjaGl2ZV9jbWRzPSckRUNITyAiTElCUkFSWSAkbGlibmFtZSBJTklUSU5TVEFOQ0UiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRFQ0hPICJERVNDUklQVElPTiBcIiRsaWJuYW1lXCIiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBFWFBPUlRTID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lbXhleHAgJGxpYm9ianMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRDQyAtWmRsbCAtWmNydGRsbCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCisgICAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCiAgICAgICA7OwogCiAgICAgb3NmMyopCiAgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKICAgICAgIGVsc2UKIAlhbGxvd191bmRlZmluZWRfZmxhZz0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHM9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAgICAgICBmaQorICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9J25vJwogICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj06CiAgICAgICA7OwpAQCAtOTU5NiwzMiArMTMyOTIsNDMgQEAKICAgICBvc2Y0KiB8IG9zZjUqKQkjIGFzIG9zZjMqIHdpdGggdGhlIGFkZGl0aW9uIG9mIC1tc3ltIGZsYWcKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCiAJaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwogICAgICAgZWxzZQogCWFsbG93X3VuZGVmaW5lZF9mbGFnPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kcz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKIAogCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKIAloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctcnBhdGggJGxpYmRpcicKICAgICAgIGZpCisgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz0nbm8nCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPToKICAgICAgIDs7CiAKICAgICBzb2xhcmlzKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogdGV4dCcKKyAgICAgIG5vX3VuZGVmaW5lZF9mbGFnPScgLXogZGVmcycKICAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJd2xhcmM9JyR7d2x9JwotCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJworCWFyY2hpdmVfY21kcz0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9LXogJHt3bH10ZXh0ICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCWFyY2hpdmVfZXhwc3ltX2NtZHM9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJwogICAgICAgZWxzZQotCXdsYXJjPScnCi0JYXJjaGl2ZV9jbWRzPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLSAgCSRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRybSAkbGliLmV4cCcKKwljYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkqIkNvbXBpbGVycyA1LjAiKikKKwkgIHdsYXJjPScnCisJICBhcmNoaXZlX2NtZHM9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCSAgOzsKKwkqKQorCSAgd2xhcmM9JyR7d2x9JworCSAgYXJjaGl2ZV9jbWRzPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgYXJjaGl2ZV9leHBzeW1fY21kcz0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKICAgICAgIGZpCiAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPSctUiRsaWJkaXInCiAgICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyPW5vCkBAIC05NjMxLDcgKzEzMzM4LDcgQEAKIAkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAogCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKIAkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLSAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKKwkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQogCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAJICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwogCWVsc2UKQEAgLTk3MjAsMTggKzEzNDI3LDE4IEBACiAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0nJHt3bH0teixub2RlZnMnCiAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sYz1ubwogICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj1ubwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCisgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjPScke3dsfS1SLCRsaWJkaXInCiAgICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSc6JwogICAgICAgbGlua19hbGxfZGVwbGlicz15ZXMKICAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmV4cG9ydCcKICAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKIAogICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCiAgICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzPSckQ0MgLUcgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzPSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlhcmNoaXZlX2NtZHM9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJYXJjaGl2ZV9leHBzeW1fY21kcz0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKICAgICAgIGZpCiAgICAgICA7OwogCkBAIC05NzQ1LDEyICsxMzQ1MiwzNiBAQAogICAgICAgbGRfc2hsaWJzPW5vCiAgICAgICA7OwogICAgIGVzYWMKKworICAgIGlmIHRlc3QgeCRob3N0X3ZlbmRvciA9IHhzbmk7IHRoZW4KKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKiB8IHN5c3Y1KikKKwlleHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCiAgIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlicyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGxkX3NobGlicyIgPiY1CiskYXNfZWNobyAiJGxkX3NobGlicyIgPiY2OyB9CiB0ZXN0ICIkbGRfc2hsaWJzIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAord2l0aF9nbnVfbGQ9JHdpdGhfZ251X2xkCisKKworCisKKworCisKKworCisKKworCisKKworCiAjCiAjIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/CiAjCkBAIC05NzY4LDgzICsxMzQ5OSwyMzkgQEAKICAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKICAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwogICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNgotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgLWxjIHNob3VsZCBiZSBleHBsaWNpdGx5IGxpbmtlZCBpbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gIiA+JjY7IH0KK2lmICR7bHRfY3ZfYXJjaGl2ZV9jbWRzX25lZWRfbGMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICAkUk0gY29uZnRlc3QqCisJZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0CiAKLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQorCWlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19jb21waWxlXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpYwotICAgICAgICBjb21waWxlcl9mbGFncz0tdgotICAgICAgICBsaW5rZXJfZmxhZ3M9LXYKLSAgICAgICAgdmVyc3RyaW5nPQotICAgICAgICBvdXRwdXRfb2JqZGlyPS4KLSAgICAgICAgbGlibmFtZT1jb25mdGVzdAotICAgICAgICBsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnPSRhbGxvd191bmRlZmluZWRfZmxhZwotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZz0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiIpID4mNQotICAoZXZhbCAkYXJjaGl2ZV9jbWRzIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKKyAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1CisgIHRlc3QgJGFjX3N0YXR1cyA9IDA7IH0gMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kbHRfcHJvZ19jb21waWxlcl93bAorCSAgcGljX2ZsYWc9JGx0X3Byb2dfY29tcGlsZXJfcGljCisJICBjb21waWxlcl9mbGFncz0tdgorCSAgbGlua2VyX2ZsYWdzPS12CisJICB2ZXJzdHJpbmc9CisJICBvdXRwdXRfb2JqZGlyPS4KKwkgIGxpYm5hbWU9Y29uZnRlc3QKKwkgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0KKwkgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjFcIiI7IH0gPiY1CisgIChldmFsICRhcmNoaXZlX2NtZHMgMlw+XCYxIFx8ICRHUkVQIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgICAgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGM9eWVzCi0gICAgICAgIGZpCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGMiID4mNgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfQorCSAgdGhlbgorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz1ubworCSAgZWxzZQorCSAgICBsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYz15ZXMKKwkgIGZpCisJICBhbGxvd191bmRlZmluZWRfZmxhZz0kbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZworCWVsc2UKKwkgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQorCWZpCisJJFJNIGNvbmZ0ZXN0KgorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2FyY2hpdmVfY21kc19uZWVkX2xjIiA+JjY7IH0KKyAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjPSRsdF9jdl9hcmNoaXZlX2NtZHNfbmVlZF9sYwogICAgICAgOzsKICAgICBlc2FjCiAgIGZpCiAgIDs7CiBlc2FjCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MuLi4gJEVDSE9fQyIgPiY2Ci1saWJyYXJ5X25hbWVzX3NwZWM9Ci1saWJuYW1lX3NwZWM9J2xpYiRuYW1lJwotc29uYW1lX3NwZWM9Ci1zaHJleHRfY21kcz0iLnNvIgotcG9zdGluc3RhbGxfY21kcz0KLXBvc3R1bmluc3RhbGxfY21kcz0KLWZpbmlzaF9jbWRzPQotZmluaXNoX2V2YWw9Ci1zaGxpYnBhdGhfdmFyPQotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXVua25vd24KLXZlcnNpb25fdHlwZT1ub25lCi1keW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiIKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBkeW5hbWljIGxpbmtlciBjaGFyYWN0ZXJpc3RpY3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICIgPiY2OyB9CiAKIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CiAgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKICAgZXNhYwotICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgYXdrICRsdF9hd2tfYXJnIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICBpZiBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7JyA+L2Rldi9udWxsIDsgdGhlbgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW0EtWmEtel06XCksXDEsZyIgOzsKKyAgICAqKSBsdF9zZWRfc3RyaXBfZXE9InMsPS8sLyxnIiA7OworICBlc2FjCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBhd2sgJGx0X2F3a19hcmcgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICRsdF9zZWRfc3RyaXBfZXFgCisgIGNhc2UgJGx0X3NlYXJjaF9wYXRoX3NwZWMgaW4KKyAgKlw7KikKICAgICAjIGlmIHRoZSBwYXRoIGNvbnRhaW5zICI7IiB0aGVuIHdlIGFzc3VtZSBpdCB0byBiZSB0aGUgc2VwYXJhdG9yCiAgICAgIyBvdGhlcndpc2UgZGVmYXVsdCB0byB0aGUgc3RhbmRhcmQgcGF0aCBzZXBhcmF0b3IgKGkuZS4gIjoiKSAtIGl0IGlzCiAgICAgIyBhc3N1bWVkIHRoYXQgbm8gcGFydCBvZiBhIG5vcm1hbCBwYXRobmFtZSBjb250YWlucyAiOyIgYnV0IHRoYXQgc2hvdWxkCiAgICAgIyBva2F5IGluIHRoZSByZWFsIHdvcmxkIHdoZXJlICI7IiBpbiBkaXJwYXRocyBpcyBpdHNlbGYgcHJvYmxlbWF0aWMuCi0gICAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gIGVsc2UKLSAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkbHRfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgZmkKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCiAgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CiAgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgogICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KQEAgLTk4NTcsNyArMTM3NDQsNyBAQAogCWx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgJGx0X3N5c19wYXRoIgogICAgIGZpCiAgIGRvbmUKLSAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMgfCBhd2sgJworICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjIiB8IGF3ayAnCiBCRUdJTiB7UlM9IiAiOyBGUz0iL3xcbiI7fSB7CiAgIGx0X2Zvbz0iIjsKICAgbHRfY291bnQ9MDsKQEAgLTk4NzcsMTAgKzEzNzY0LDI5IEBACiAgIGlmIChsdF9mb28gIT0gIiIpIHsgbHRfZnJlcVtsdF9mb29dKys7IH0KICAgaWYgKGx0X2ZyZXFbbHRfZm9vXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQogfSdgCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAkbHRfc2VhcmNoX3BhdGhfc3BlY2AKKyAgIyBBV0sgcHJvZ3JhbSBhYm92ZSBlcnJvbmVvdXNseSBwcmVwZW5kcyAnLycgdG8gQzovZG9zL3BhdGhzCisgICMgZm9yIHRoZXNlIGhvc3RzLgorICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHxcCisgICAgICAkU0VEICdzLC9cKFtBLVphLXpdOlwpLFwxLGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKIGVsc2UKICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgogZmkKK2xpYnJhcnlfbmFtZXNfc3BlYz0KK2xpYm5hbWVfc3BlYz0nbGliJG5hbWUnCitzb25hbWVfc3BlYz0KK3NocmV4dF9jbWRzPSIuc28iCitwb3N0aW5zdGFsbF9jbWRzPQorcG9zdHVuaW5zdGFsbF9jbWRzPQorZmluaXNoX2NtZHM9CitmaW5pc2hfZXZhbD0KK3NobGlicGF0aF92YXI9CitzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgordmVyc2lvbl90eXBlPW5vbmUKK2R5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgogbmVlZF9saWJfcHJlZml4PXVua25vd24KIGhhcmRjb2RlX2ludG9fbGlicz1ubwogCkBAIC05OTE3LDcgKzEzODIzLDcgQEAKICAgICAgIGFpeDQgfCBhaXg0LlswMV0gfCBhaXg0LlswMV0uKikKICAgICAgIGlmIHsgZWNobyAnI2lmIF9fR05VQ19fID4gMiB8fCAoX19HTlVDX18gPT0gMiAmJiBfX0dOVUNfTUlOT1JfXyA+PSA5NyknCiAJICAgZWNobyAnIHllcyAnCi0JICAgZWNobyAnI2VuZGlmJzsgfSB8ICR7Q0N9IC1FIC0gfCBncmVwIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgJEdSRVAgeWVzID4gL2Rldi9udWxsOyB0aGVuCiAJOgogICAgICAgZWxzZQogCWNhbl9idWlsZF9zaGFyZWQ9bm8KQEAgLTk5NDMsOSArMTM4NDksMTggQEAKICAgOzsKIAogYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJworICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkUk0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCisgICAgOzsKKyAgZXNhYwogICA7OwogCiBiZW9zKikKQEAgLTk5NjgsNjEgKzEzODgzLDExMiBAQAogICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKICAgOzsKIAotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQorY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQogICB2ZXJzaW9uX3R5cGU9d2luZG93cwogICBzaHJleHRfY21kcz0iLmRsbCIKICAgbmVlZF92ZXJzaW9uPW5vCiAgIG5lZWRfbGliX3ByZWZpeD1ubwogCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCisgIGNhc2UgJEdDQywkY2NfYmFzZW5hbWUgaW4KKyAgeWVzLCopCisgICAgIyBnY2MKICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwogICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKICAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CiAgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CiAgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KICAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKICAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgogICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCisgICAgICAgJFJNIFwkZGxwYXRoJwogICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKIAogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICBjeWd3aW4qKQogICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCiAgICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCisKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvdXNyL2xpYi93MzJhcGkiCiAgICAgICA7OwotICAgIG1pbmd3KikKKyAgICBtaW5ndyogfCBjZWdjYyopCiAgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAogICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkQ0MgLXByaW50LXNlYXJjaC1kaXJzIHwgZ3JlcCAiXmxpYnJhcmllczoiIHwgJFNFRCAtZSAicy9ebGlicmFyaWVzOi8vIiAtZSAicyw9LywvLGciYAotICAgICAgaWYgZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBncmVwICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRIIHByaW50ZWQgYnkKLSAgICAgICAgIyBtaW5ndyBnY2MsIGJ1dCB3ZSBhcmUgcnVubmluZyBvbiBDeWd3aW4uIEdjYyBwcmludHMgaXRzIHNlYXJjaAotICAgICAgICAjIHBhdGggd2l0aCA7IHNlcGFyYXRvcnMsIGFuZCB3aXRoIGRyaXZlIGxldHRlcnMuIFdlIGNhbiBoYW5kbGUgdGhlCi0gICAgICAgICMgZHJpdmUgbGV0dGVycyAoY3lnd2luIGZpbGV1dGlscyB1bmRlcnN0YW5kcyB0aGVtKSwgc28gbGVhdmUgdGhlbSwKLSAgICAgICAgIyBlc3BlY2lhbGx5IGFzIHdlIG1pZ2h0IHBhc3MgZmlsZXMgZm91bmQgdGhlcmUgdG8gYSBtaW5ndyBvYmpkdW1wLAotICAgICAgICAjIHdoaWNoIHdvdWxkbid0IHVuZGVyc3RhbmQgYSBjeWd3aW5pZmllZCBwYXRoLiBBaGguCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEIC1lICdzLzsvIC9nJ2AKLSAgICAgIGVsc2UKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgIC1lICJzLyRQQVRIX1NFUEFSQVRPUi8gL2ciYAotICAgICAgZmkKICAgICAgIDs7CiAgICAgcHczMiopCiAgICAgICAjIHB3MzIgRExMcyB1c2UgJ3B3JyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKICAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL3B3LydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKICAgICAgIDs7CiAgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9LmRsbC5saWInCisKKyAgICBjYXNlICRidWlsZF9vcyBpbgorICAgIG1pbmd3KikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0KKyAgICAgIGx0X3NhdmVfaWZzPSRJRlMKKyAgICAgIElGUz0nOycKKyAgICAgIGZvciBsdF9wYXRoIGluICRMSUIKKyAgICAgIGRvCisgICAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICAgIyBMZXQgRE9TIHZhcmlhYmxlIGV4cGFuc2lvbiBwcmludCB0aGUgc2hvcnQgOC4zIHN0eWxlIGZpbGUgbmFtZS4KKyAgICAgICAgbHRfcGF0aD1gY2QgIiRsdF9wYXRoIiAyPi9kZXYvbnVsbCAmJiBjbWQgLy9DICJmb3IgJWkgaW4gKCIuIikgZG8gQGVjaG8gJX5zaSJgCisgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAkbHRfcGF0aCIKKyAgICAgIGRvbmUKKyAgICAgIElGUz0kbHRfc2F2ZV9pZnMKKyAgICAgICMgQ29udmVydCB0byBNU1lTIHN0eWxlLgorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBzZWQgLWUgJ3N8XFxcXHwvfGcnIC1lICdzfCBcXChbYS16QS1aXVxcKTp8IC9cXDF8ZycgLWUgJ3N8XiB8fCdgCisgICAgICA7OworICAgIGN5Z3dpbiopCisgICAgICAjIENvbnZlcnQgdG8gdW5peCBmb3JtLCB0aGVuIHRvIGRvcyBmb3JtLCB0aGVuIGJhY2sgdG8gdW5peCBmb3JtCisgICAgICAjIGJ1dCB0aGlzIHRpbWUgZG9zIHN0eWxlIChubyBzcGFjZXMhKSBzbyB0aGF0IHRoZSB1bml4IGZvcm0gbG9va3MKKyAgICAgICMgbGlrZSAvY3lnZHJpdmUvYy9QUk9HUkF+MTovY3lnZHIuLi4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkTElCImAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS1kb3MgIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIDI+L2Rldi9udWxsYAorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBjeWdwYXRoIC0tcGF0aCAtLXVuaXggIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICAgIDs7CisgICAgKikKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJExJQiIKKyAgICAgIGlmICRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRHUkVQICc7W2MtekMtWl06LycgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKICAgICA7OwogCiAgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCiAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCisgICAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKICAgICA7OwogICBlc2FjCi0gIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCiAgICMgRklYTUU6IGZpcnN0IHdlIHNob3VsZCBzZWFyY2ggLiBhbmQgdGhlIGRpcmVjdG9yeSB0aGUgZXhlY3V0YWJsZSBpcyBpbgogICBzaGxpYnBhdGhfdmFyPVBBVEgKICAgOzsKQEAgLTEwMDMyLDcgKzEzOTk4LDcgQEAKICAgdmVyc2lvbl90eXBlPWRhcndpbgogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCiAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSApAQCAtMTAxMDksNiArMTQwNzUsMTkgQEAKICAgaGFyZGNvZGVfaW50b19saWJzPXllcwogICA7OwogCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQogICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCiAgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgpAQCAtMTAxMzEsMTggKzE0MTEwLDE4IEBACiAgICAgZmkKICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCiAgICAgOzsKLSAgIGhwcGEqNjQqKQotICAgICBzaHJleHRfY21kcz0nLnNsJwotICAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRIICMgSG93IHNob3VsZCB3ZSBoYW5kbGUgU0hMSUJfUEFUSAotICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCi0gICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICAgOzsKLSAgICopCisgIGhwcGEqNjQqKQorICAgIHNocmV4dF9jbWRzPScuc2wnCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgorICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKyAgICA7OworICAqKQogICAgIHNocmV4dF9jbWRzPScuc2wnCiAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKICAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKQEAgLTEwMTUxLDggKzE0MTMwLDEwIEBACiAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgICA7OwogICBlc2FjCi0gICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LgorICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NSwgLi4uCiAgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJworICAjIG9yIGZhaWxzIG91dHJpZ2h0LCBzbyBvdmVycmlkZSBhdG9taWNhbGx5OgorICBpbnN0YWxsX292ZXJyaWRlX21vZGU9NTU1CiAgIDs7CiAKIGludGVyaXhbMy05XSopCkBAIC0xMDIxMCw3ICsxNDE5MSw3IEBACiAgIDs7CiAKICMgVGhpcyBtdXN0IGJlIExpbnV4IEVMRi4KLWxpbnV4KiB8IGsqYnNkKi1nbnUpCitsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCiAgIHZlcnNpb25fdHlwZT1saW51eAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCkBAIC0xMDIxOSw2ICsxNDIwMCw0MSBAQAogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbiAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAogICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKworICAjIFNvbWUgYmludXRpbHMgbGQgYXJlIHBhdGNoZWQgdG8gc2V0IERUX1JVTlBBVEgKKyAgaWYgJHtsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgICBzYXZlX0xERkxBR1M9JExERkxBR1MKKyAgICBzYXZlX2xpYmRpcj0kbGliZGlyCisgICAgZXZhbCAibGliZGlyPS9mb287IHdsPVwiJGx0X3Byb2dfY29tcGlsZXJfd2xcIjsgXAorCSBMREZMQUdTPVwiXCRMREZMQUdTICRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIiCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGlmICAoJE9CSkRVTVAgLXAgY29uZnRlc3QkYWNfZXhlZXh0KSAyPi9kZXYvbnVsbCB8IGdyZXAgIlJVTlBBVEguKiRsaWJkaXIiID4vZGV2L251bGw7IHRoZW4gOgorICBsdF9jdl9zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCitmaQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorCitmaQorCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKICAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCiAgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAogICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgpAQCAtMTAyMjYsNyArMTQyNDIsNyBAQAogCiAgICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCiAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAorICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWwkgXSpod2NhcFsJIF0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZztzLyIvL2c7L14kL2QnIHwgdHIgJ1xuJyAnICdgCiAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIgJGx0X2xkX2V4dHJhIgogICBmaQogCkBAIC0xMDI0Myw3ICsxNDI1OSw3IEBACiAgIHZlcnNpb25fdHlwZT1zdW5vcwogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCi0gIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwogICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCiAgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJwpAQCAtMTAyNjQsMTQgKzE0MjgwLDE2IEBACiAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgOzsKIAotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAorKm50byogfCAqcW54KikKKyAgdmVyc2lvbl90eXBlPXFueAogICBuZWVkX2xpYl9wcmVmaXg9bm8KICAgbmVlZF92ZXJzaW9uPW5vCiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwogICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGR5bmFtaWNfbGlua2VyPSdsZHFueC5zbycKICAgOzsKIAogb3BlbmJzZCopCkBAIC0xMDI4MCwxMyArMTQyOTgsMTMgQEAKICAgbmVlZF9saWJfcHJlZml4PW5vCiAgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopIG5lZWRfdmVyc2lvbj15ZXMgOzsKLSAgICAqKSAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkX3ZlcnNpb249bm8gIDs7CisgICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikJbmVlZF92ZXJzaW9uPXllcyA7OworICAgICopCQkJCW5lZWRfdmVyc2lvbj1ubyAgOzsKICAgZXNhYwogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwogICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwogICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgogICAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCiAJc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCkBAIC0xMDM1OCw3ICsxNDM3Niw2IEBACiAgICAgc25pKQogICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCiAgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwogICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKICAgICAgIDs7CiAgICAgc2llbWVucykKQEAgLTEwMzg5LDEzICsxNDQwNiwxMiBAQAogICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwogICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCiAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KICAgZWxzZQogICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKICAgICBjYXNlICRob3N0X29zIGluCiAgICAgICBzY28zLjJ2NSopCiAgICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgpAQCAtMTA0MDUsNiArMTQ0MjEsMTcgQEAKICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbGliJwogICA7OwogCit0cGYqKQorICAjIFRQRiBpcyBhIGNyb3NzLXRhcmdldCBvbmx5LiAgUHJlZmVycmVkIGNyb3NzLWhvc3QgPSBHTlUvTGludXguCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCiB1dHM0KikKICAgdmVyc2lvbl90eXBlPWxpbnV4CiAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwpAQCAtMTA0MTYsNDMgKzE0NDQzLDEyNiBAQAogICBkeW5hbWljX2xpbmtlcj1ubwogICA7OwogZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRkeW5hbWljX2xpbmtlciIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGR5bmFtaWNfbGlua2VyIiA+JjUKKyRhc19lY2hvICIkZHluYW1pY19saW5rZXIiID4mNjsgfQogdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KIAotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLQogdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgogaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KICAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2CitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiCitmaQoraWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgorZmkKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICIgPiY2OyB9CiBoYXJkY29kZV9hY3Rpb249Ci1pZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyIiB8fCBcCitpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyIgfHwKKyAgIHRlc3QgLW4gIiRydW5wYXRoX3ZhciIgfHwKICAgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9ICJYeWVzIiA7IHRoZW4KIAotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCisgICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGVudCBkaXJlY3Rvcmllcy4KICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0gbm8gJiYKICAgICAgIyBJZiB0aGUgb25seSBtZWNoYW5pc20gdG8gYXZvaWQgaGFyZGNvZGluZyBpcyBzaGxpYnBhdGhfdmFyLCB3ZQogICAgICAjIGhhdmUgdG8gcmVsaW5rLCBvdGhlcndpc2Ugd2UgbWlnaHQgbGluayB3aXRoIGFuIGluc3RhbGxlZCBsaWJyYXJ5CiAgICAgICMgd2hlbiB3ZSBzaG91bGQgYmUgbGlua2luZyB3aXRoIGEgeWV0LXRvLWJlLWluc3RhbGxlZCBvbmUKLSAgICAgIyMgdGVzdCAiJF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKKyAgICAgIyMgdGVzdCAiJF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgKSIgIT0gbm8gJiYKICAgICAgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IG5vOyB0aGVuCiAgICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KICAgICBoYXJkY29kZV9hY3Rpb249cmVsaW5rCkBAIC0xMDQ2NSwxMCArMTQ1NzUsMTEgQEAKICAgIyBkaXJlY3Rvcmllcy4KICAgaGFyZGNvZGVfYWN0aW9uPXVuc3VwcG9ydGVkCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uIiA+JjUKKyRhc19lY2hvICIkaGFyZGNvZGVfYWN0aW9uIiA+JjY7IH0KIAotaWYgdGVzdCAiJGhhcmRjb2RlX2FjdGlvbiIgPSByZWxpbms7IHRoZW4KK2lmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb24iID0gcmVsaW5rIHx8CisgICB0ZXN0ICIkaW5oZXJpdF9ycGF0aCIgPSB5ZXM7IHRoZW4KICAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCiAgIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KIGVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKQEAgLTEwNDc3LDM3ICsxNDU4OCwxMiBAQAogICBlbmFibGVfZmFzdF9pbnN0YWxsPW5lZWRsZXNzCiBmaQogCi1zdHJpcGxpYj0KLW9sZF9zdHJpcGxpYj0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0IC1uICIkU1RSSVAiICYmICRTVFJJUCAtViAyPiYxIHwgZ3JlcCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCi0gIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCi0gIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLWVsc2UKLSMgRklYTUUgLSBpbnNlcnQgc29tZSByZWFsIHRlc3RzLCBob3N0X29zIGlzbid0IHJlYWxseSBnb29kIGVub3VnaAotICBjYXNlICRob3N0X29zIGluCi0gICBkYXJ3aW4qKQotICAgICAgIGlmIHRlc3QgLW4gIiRTVFJJUCIgOyB0aGVuCi0gICAgICAgICBzdHJpcGxpYj0iJFNUUklQIC14IgotICAgICAgICAgb2xkX3N0cmlwbGliPSIkU1RSSVAgLVMiCi0gICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgICAgICBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0gICAgICAgOzsKLSAgICopCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLSAgICA7OwotICBlc2FjCi1maQogCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KKworCisKKworICBpZiB0ZXN0ICJ4JGVuYWJsZV9kbG9wZW4iICE9IHh5ZXM7IHRoZW4KICAgZW5hYmxlX2Rsb3Blbj11bmtub3duCiAgIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duCiAgIGVuYWJsZV9kbG9wZW5fc2VsZl9zdGF0aWM9dW5rbm93bgpAQCAtMTA1MjIsODMgKzE0NjA4LDU1IEBACiAgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCiAgICAgOzsKIAotICBtaW5ndyogfCBwdzMyKikKKyAgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCiAgICAgbHRfY3ZfZGxvcGVuPSJMb2FkTGlicmFyeSIKICAgICBsdF9jdl9kbG9wZW5fbGlicz0KLSAgIDs7CisgICAgOzsKIAogICBjeWd3aW4qKQogICAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIgogICAgIGx0X2N2X2Rsb3Blbl9saWJzPQotICAgOzsKKyAgICA7OwogCiAgIGRhcndpbiopCiAgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0Ci0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbGRsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxfZGxvcGVuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGRsb3BlbiAoKTsKIGludAogbWFpbiAoKQogewotZGxvcGVuICgpOworcmV0dXJuIGRsb3BlbiAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGxfZGxvcGVuPW5vCisgIGFjX2N2X2xpYl9kbF9kbG9wZW49bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIgogZWxzZQogCkBAIC0xMDYwOCw0NjEgKzE0NjY2LDE3MSBAQAogCiBmaQogCi0gICA7OworICAgIDs7CiAKICAgKikKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIHNobF9sb2FkIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgc2hsX2xvYWQuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgc2hsX2xvYWQgaW5ub2N1b3VzX3NobF9sb2FkCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIHNobF9sb2FkICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIHNobF9sb2FkCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgc2hsX2xvYWQgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfc2hsX2xvYWQpIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3NobF9sb2FkKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBzaGxfbG9hZDsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBzaGxfbG9hZDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX3NobF9sb2FkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX3NobF9sb2FkPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19zaGxfbG9hZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19zaGxfbG9hZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX3NobF9sb2FkID0geWVzOyB0aGVuCisgICAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic2hsX2xvYWQiICJhY19jdl9mdW5jX3NobF9sb2FkIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3NobF9sb2FkIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49InNobF9sb2FkIgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGxkX3NobF9sb2FkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHNobF9sb2FkIGluIC1sZGxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzaGxfbG9hZCBpbiAtbGRsZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZGxkX3NobF9sb2FkKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxkbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBzaGxfbG9hZCAoKTsKIGludAogbWFpbiAoKQogewotc2hsX2xvYWQgKCk7CityZXR1cm4gc2hsX2xvYWQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RsZF9zaGxfbG9hZD1ubworICBhY19jdl9saWJfZGxkX3NobF9sb2FkPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxkX3NobF9sb2FkIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsZF9zaGxfbG9hZCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbGRfc2hsX2xvYWQiID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBkbG9wZW4gdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBkbG9wZW4uCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgZGxvcGVuIGlubm9jdW91c19kbG9wZW4KLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgZGxvcGVuICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIGRsb3BlbgotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGRsb3BlbiAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9kbG9wZW4pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX2Rsb3BlbikKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZGxvcGVuOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGRsb3BlbjsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2Rsb3Blbj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19kbG9wZW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19kbG9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19kbG9wZW4gPSB5ZXM7IHRoZW4KKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZGxvcGVuIiAiYWNfY3ZfZnVuY19kbG9wZW4iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZGxvcGVuIiA9IHh5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2RsX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxkbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2RsX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sZGwgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBkbG9wZW4gKCk7CiBpbnQKIG1haW4gKCkKIHsKLWRsb3BlbiAoKTsKK3JldHVybiBkbG9wZW4gKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2RsX2Rsb3Blbj15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RsX2Rsb3Blbj1ubworICBhY19jdl9saWJfZGxfZGxvcGVuPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9kbF9kbG9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RsX2Rsb3BlbiA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZGxfZGxvcGVuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9kbF9kbG9wZW4iID0geHllczsgdGhlbiA6CiAgIGx0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCIKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3BlbiBpbiAtbHN2bGQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zdmxkX2Rsb3BlbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkbG9wZW4gaW4gLWxzdmxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zdmxkX2Rsb3Blbis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sc3ZsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGRsb3BlbiAoKTsKIGludAogbWFpbiAoKQogewotZGxvcGVuICgpOworcmV0dXJuIGRsb3BlbiAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfc3ZsZF9kbG9wZW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9zdmxkX2Rsb3Blbj1ubworICBhY19jdl9saWJfc3ZsZF9kbG9wZW49bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc3ZsZF9kbG9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3N2bGRfZGxvcGVuID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9zdmxkX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbHN2bGQiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZGxkX2xpbmsgaW4gLWxkbGQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRsZF9saW5rIGluIC1sZGxkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9kbGRfZGxkX2xpbmsrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGRsZCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIGRsZF9saW5rICgpOwogaW50CiBtYWluICgpCiB7Ci1kbGRfbGluayAoKTsKK3JldHVybiBkbGRfbGluayAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfZGxkX2RsZF9saW5rPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGxkX2RsZF9saW5rPW5vCisgIGFjX2N2X2xpYl9kbGRfZGxkX2xpbms9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxkX2RsZF9saW5rID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9kbGRfZGxkX2xpbmsiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZGxkX2RsZF9saW5rIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX2RsZF9kbGRfbGluayIgPSB4eWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuPSJkbGRfbGluayIgbHRfY3ZfZGxvcGVuX2xpYnM9Ii1sZGxkIgogZmkKIApAQCAtMTExMDEsMTggKzE0ODY5LDE4IEBACiAgICAgc2F2ZV9MSUJTPSIkTElCUyIKICAgICBMSUJTPSIkbHRfY3ZfZGxvcGVuX2xpYnMgJExJQlMiCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2Rsb3Blbl9zZWxmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgCSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBsdF9jdl9kbG9wZW5fc2VsZj1jcm9zcwogZWxzZQogICBsdF9kbHVua25vd249MDsgbHRfZGxub191c2NvcmU9MTsgbHRfZGxuZWVkX3VzY29yZT0yCiAgIGx0X3N0YXR1cz0kbHRfZGx1bmtub3duCi0gIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLSNsaW5lIDExMTE1ICJjb25maWd1cmUiCisgIGNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxfTFRfRU9GCisjbGluZSAkTElORU5PICJjb25maWd1cmUiCiAjaW5jbHVkZSAiY29uZmRlZnMuaCIKIAogI2lmIEhBVkVfRExGQ05fSApAQCAtMTExNTMsMTEgKzE0OTIxLDEzIEBACiAjICBlbmRpZgogI2VuZGlmCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIiB2b2lkIGV4aXQgKGludCk7CisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKICNlbmRpZgogCi12b2lkIGZub3JkKCkgeyBpbnQgaT00Mjt9CitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KIGludCBtYWluICgpCiB7CiAgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOwpAQCAtMTExNjYsMjAgKzE0OTM2LDI0IEBACiAgIGlmIChzZWxmKQogICAgIHsKICAgICAgIGlmIChkbHN5bSAoc2VsZiwiZm5vcmQiKSkgICAgICAgc3RhdHVzID0gJGx0X2Rsbm9fdXNjb3JlOwotICAgICAgZWxzZSBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSBzdGF0dXMgPSAkbHRfZGxuZWVkX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQogICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCiAgICAgfQogICBlbHNlCiAgICAgcHV0cyAoZGxlcnJvciAoKSk7CiAKLSAgICBleGl0IChzdGF0dXMpOworICByZXR1cm4gc3RhdHVzOwogfQotRU9GCi0gIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQorX0xUX0VPRgorICBpZiB7IHsgZXZhbCBlY2hvICJcIlwkYXNfbWVcIjoke2FzX2xpbmVuby0kTElORU5PfTogXCIkYWNfbGlua1wiIjsgfSA+JjUKICAgKGV2YWwgJGFjX2xpbmspIDI+JjUKICAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgdGVzdCAtcyBjb25mdGVzdCR7YWNfZXhlZXh0fSAyPi9kZXYvbnVsbDsgdGhlbgorICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKKyAgdGVzdCAkYWNfc3RhdHVzID0gMDsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCiAgICAgKC4vY29uZnRlc3Q7IGV4aXQ7ICkgPiY1IDI+L2Rldi9udWxsCiAgICAgbHRfc3RhdHVzPSQ/CiAgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgpAQCAtMTExOTYsMjMgKzE0OTcwLDIzIEBACiAKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfZGxvcGVuX3NlbGYiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZiIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmIiA+JjY7IH0KIAogICAgIGlmIHRlc3QgIngkbHRfY3ZfZGxvcGVuX3NlbGYiID0geHllczsgdGhlbgogICAgICAgd2w9JGx0X3Byb2dfY29tcGlsZXJfd2wgZXZhbCBMREZMQUdTPVwiXCRMREZMQUdTICRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY1wiCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBhIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW0gY2FuIGRsb3BlbiBpdHNlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIGEgc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbSBjYW4gZGxvcGVuIGl0c2VsZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmLi4uICIgPiY2OyB9CitpZiAke2x0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIAkgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzCiBlbHNlCiAgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKICAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KLSAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PEVPRgotI2xpbmUgMTEyMTUgImNvbmZpZ3VyZSIKKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyNsaW5lICRMSU5FTk8gImNvbmZpZ3VyZSIKICNpbmNsdWRlICJjb25mZGVmcy5oIgogCiAjaWYgSEFWRV9ETEZDTl9ICkBAIC0xMTI1MywxMSArMTUwMjcsMTMgQEAKICMgIGVuZGlmCiAjZW5kaWYKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiIHZvaWQgZXhpdCAoaW50KTsKKy8qIFdoZW4gLWZ2aXNiaWxpdHk9aGlkZGVuIGlzIHVzZWQsIGFzc3VtZSB0aGUgY29kZSBoYXMgYmVlbiBhbm5vdGF0ZWQKKyAgIGNvcnJlc3BvbmRpbmdseSBmb3IgdGhlIHN5bWJvbHMgbmVlZGVkLiAgKi8KKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAoKChfX0dOVUNfXyA9PSAzKSAmJiAoX19HTlVDX01JTk9SX18gPj0gMykpIHx8IChfX0dOVUNfXyA+IDMpKQoraW50IGZub3JkICgpIF9fYXR0cmlidXRlX18oKHZpc2liaWxpdHkoImRlZmF1bHQiKSkpOwogI2VuZGlmCiAKLXZvaWQgZm5vcmQoKSB7IGludCBpPTQyO30KK2ludCBmbm9yZCAoKSB7IHJldHVybiA0MjsgfQogaW50IG1haW4gKCkKIHsKICAgdm9pZCAqc2VsZiA9IGRsb3BlbiAoMCwgTFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PVyk7CkBAIC0xMTI2NiwyMCArMTUwNDIsMjQgQEAKICAgaWYgKHNlbGYpCiAgICAgewogICAgICAgaWYgKGRsc3ltIChzZWxmLCJmbm9yZCIpKSAgICAgICBzdGF0dXMgPSAkbHRfZGxub191c2NvcmU7Ci0gICAgICBlbHNlIGlmIChkbHN5bSggc2VsZiwiX2Zub3JkIikpIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgZWxzZQorICAgICAgICB7CisJICBpZiAoZGxzeW0oIHNlbGYsIl9mbm9yZCIpKSAgc3RhdHVzID0gJGx0X2RsbmVlZF91c2NvcmU7CisgICAgICAgICAgZWxzZSBwdXRzIChkbGVycm9yICgpKTsKKwl9CiAgICAgICAvKiBkbGNsb3NlIChzZWxmKTsgKi8KICAgICB9CiAgIGVsc2UKICAgICBwdXRzIChkbGVycm9yICgpKTsKIAotICAgIGV4aXQgKHN0YXR1cyk7CisgIHJldHVybiBzdGF0dXM7CiB9Ci1FT0YKLSAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1CitfTFRfRU9GCisgIGlmIHsgeyBldmFsIGVjaG8gIlwiXCRhc19tZVwiOiR7YXNfbGluZW5vLSRMSU5FTk99OiBcIiRhY19saW5rXCIiOyB9ID4mNQogICAoZXZhbCAkYWNfbGluaykgMj4mNQogICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9IDI+L2Rldi9udWxsOyB0aGVuCisgICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFwkPyA9ICRhY19zdGF0dXMiID4mNQorICB0ZXN0ICRhY19zdGF0dXMgPSAwOyB9ICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KICAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JjUgMj4vZGV2L251bGwKICAgICBsdF9zdGF0dXM9JD8KICAgICBjYXNlIHgkbHRfc3RhdHVzIGluCkBAIC0xMTI5Niw4ICsxNTA3Niw4IEBACiAKIAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY1CiskYXNfZWNobyAiJGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYyIgPiY2OyB9CiAgICAgZmkKIAogICAgIENQUEZMQUdTPSIkc2F2ZV9DUFBGTEFHUyIKQEAgLTExMzE4LDYyMDUgKzE1MDk4LDEwMyBAQAogZmkKIAogCi0jIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY2FuX2J1aWxkX3NoYXJlZCIgPiY2CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci10ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAotIyBPbiBBSVgsIHNoYXJlZCBsaWJyYXJpZXMgYW5kIHN0YXRpYyBsaWJyYXJpZXMgdXNlIHRoZSBzYW1lIG5hbWVzcGFjZSwgYW5kCi0jIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KLSAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KLSAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCi0gICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJwotICBmaQotICA7OwogCi1haXhbNC05XSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KLSAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQorCisKKworCisKKworCisKKworCisKKworc3RyaXBsaWI9CitvbGRfc3RyaXBsaWI9Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RyaXBwaW5nIGxpYnJhcmllcyBpcyBwb3NzaWJsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHN0cmlwcGluZyBsaWJyYXJpZXMgaXMgcG9zc2libGUuLi4gIiA+JjY7IH0KK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKyAgICBlbHNlCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICBmaQogICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZW5hYmxlX3NoYXJlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZW5hYmxlX3NoYXJlZCIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci0jIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KLXRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zdGF0aWMiID4mNgotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXIgXAotICAgIENDIFwKLSAgICBMRCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZyBcCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWMgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKLSAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIFwKLSAgICBwcmVkZXBfb2JqZWN0cyBcCi0gICAgcG9zdGRlcF9vYmplY3RzIFwKLSAgICBwcmVkZXBzIFwKLSAgICBwb3N0ZGVwcyBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgXAotICAgIGFyY2hpdmVfY21kcyBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kcyBcCi0gICAgcG9zdGluc3RhbGxfY21kcyBcCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcyBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWcgXAotICAgIG5vX3VuZGVmaW5lZF9mbGFnIFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkIFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWMgXAotICAgIG1vZHVsZV9jbWRzIFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHMgXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vIFwKLSAgICBmaXhfc3JjZmlsZV9wYXRoIFwKLSAgICBleGNsdWRlX2V4cHN5bXMgXAotICAgIGluY2x1ZGVfZXhwc3ltczsgZG8KLQotICAgIGNhc2UgJHZhciBpbgotICAgIG9sZF9hcmNoaXZlX2NtZHMgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcyB8IFwKLSAgICBhcmNoaXZlX2NtZHMgfCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kcyB8IFwKLSAgICBtb2R1bGVfY21kcyB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHMgfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kcyB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKKyAgKikKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgICA7OwogICBlc2FjCitmaQogCi1jZmdmaWxlPSIke29maWxlfVQiCi0gIHRyYXAgIiRybSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1Ci0gICRybSAtZiAiJGNmZ2ZpbGUiCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRvZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRvZmlsZSIgPiY2O30KIAotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMhICRTSEVMTAogCi0jIGAkZWNobyAiJGNmZ2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCi0jIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QKQotIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCi0jCi0jIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOAotIyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLSMKLSMgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2w6Ci0jIE9yaWdpbmFsbHkgYnkgR29yZG9uIE1hdHppZ2tlaXQgPGdvcmRAZ251LmFpLm1pdC5lZHU+LCAxOTk2Ci0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0jIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0jIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCi0jIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0jCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKLSMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0jCi0jIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgotIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCiAKLSMgQSBzZWQgcHJvZ3JhbSB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dC4KLVNFRD0kbHRfU0VECiAKLSMgU2VkIHRoYXQgaGVscHMgdXMgYXZvaWQgYWNjaWRlbnRhbGx5IHRyaWdnZXJpbmcgZWNobygxKSBvcHRpb25zIGxpa2UgLW4uCi1Yc2VkPSIkU0VEIC1lIDFzL15YLy8iCiAKLSMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0Ci0jIGlmIENEUEFUSCBpcyBzZXQuCi0odW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICiAKLSMgVGhlIG5hbWVzIG9mIHRoZSB0YWdnZWQgY29uZmlndXJhdGlvbnMgc3VwcG9ydGVkIGJ5IHRoaXMgc2NyaXB0LgotYXZhaWxhYmxlX3RhZ3M9CiAKLSMgIyMjIEJFR0lOIExJQlRPT0wgQ09ORklHCiAKLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKIAotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCiAKLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYworICAjIFJlcG9ydCB3aGljaCBsaWJyYXJ5IHR5cGVzIHdpbGwgYWN0dWFsbHkgYmUgYnVpbHQKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLi4uICIgPiY2OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkY2FuX2J1aWxkX3NoYXJlZCIgPiY1CiskYXNfZWNobyAiJGNhbl9idWlsZF9zaGFyZWQiID4mNjsgfQogCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAiID4mNjsgfQorICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KIAotIyBXaGV0aGVyIG9yIG5vdCB0byBkaXNhbGxvdyBzaGFyZWQgbGlicyB3aGVuIHJ1bnRpbWUgbGlicyBhcmUgc3RhdGljCi1hbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXIKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQwotCi0jIEFuIEVSRSBtYXRjaGVyLgotRUdSRVA9JGx0X0VHUkVQCi0KLSMgVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllcy4KLUxEPSRsdF9MRAotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2wKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljCi1waWNfbW9kZT0kcGljX21vZGUKLQotIyBXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/Ci1tYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCi0KLSMgRG9lcyBjb21waWxlciBzaW11bHRhbmVvdXNseSBzdXBwb3J0IC1jIGFuZCAtbyBvcHRpb25zPwotY29tcGlsZXJfY19vPSRsdF9sdF9jdl9wcm9nX2NvbXBpbGVyX2NfbwotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBhbGxvdyByZWZsZXhpdmUgZGxvcGVucy4KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0kbHRfZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWMKLQotIyBMaWJyYXJ5IHZlcnNpb25pbmcgdHlwZS4KLXZlcnNpb25fdHlwZT0kdmVyc2lvbl90eXBlCi0KLSMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCi1saWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYwotCi0jIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCi0jIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUuCi1saWJyYXJ5X25hbWVzX3NwZWM9JGx0X2xpYnJhcnlfbmFtZXNfc3BlYwotCi0jIFRoZSBjb2RlZCBuYW1lIG9mIHRoZSBsaWJyYXJ5LCBpZiBkaWZmZXJlbnQgZnJvbSB0aGUgcmVhbCBuYW1lLgotc29uYW1lX3NwZWM9JGx0X3NvbmFtZV9zcGVjCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KLVJBTkxJQj0kbHRfUkFOTElCCi1vbGRfYXJjaGl2ZV9jbWRzPSRsdF9vbGRfYXJjaGl2ZV9jbWRzCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYSBzaGFyZWQgYXJjaGl2ZS4KLWFyY2hpdmVfY21kcz0kbHRfYXJjaGl2ZV9jbWRzCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcwotbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcHM9JGx0X3ByZWRlcHMKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzCi0KLSMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZAotIyBsaWJyYXJ5Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlycwotCi0jIFRoZSBsaWJyYXJ5IHNlYXJjaCBwYXRoIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgY29tcGlsZXIgd2hlbiBsaW5raW5nCi0jIGEgc2hhcmVkIGxpYnJhcnkuCi1jb21waWxlcl9saWJfc2VhcmNoX3BhdGg9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5LgotZmluaXNoX2NtZHM9JGx0X2ZpbmlzaF9jbWRzCi0KLSMgU2FtZSBhcyBhYm92ZSwgYnV0IGEgc2luZ2xlIHNjcmlwdCBmcmFnbWVudCB0byBiZSBldmFsZWQgYnV0IG5vdCBzaG93bi4KLWZpbmlzaF9ldmFsPSRsdF9maW5pc2hfZXZhbAotCi0jIFRha2UgdGhlIG91dHB1dCBvZiBubSBhbmQgcHJvZHVjZSBhIGxpc3Rpbmcgb2YgcmF3IHN5bWJvbHMgYW5kIEMgbmFtZXMuCi1nbG9iYWxfc3ltYm9sX3BpcGU9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIHByb3BlciBDIGRlY2xhcmF0aW9uCi1nbG9iYWxfc3ltYm9sX3RvX2NkZWNsPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbAotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpcgotZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCi1ydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKLQotIyBUaGlzIGlzIHRoZSBzaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgotc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgotCi0jIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCi0KLSMgSG93IHRvIGhhcmRjb2RlIGEgc2hhcmVkIGxpYnJhcnkgcGF0aCBpbnRvIGFuIGV4ZWN1dGFibGUuCi1oYXJkY29kZV9hY3Rpb249JGhhcmRjb2RlX2FjdGlvbgotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAotCi0jIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAtcnBhdGggZmxhZyB3aXRoIGEgc2VwYXJhdGVkIGFyZ3VtZW50LgotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcj0kbHRfaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8KLSMgdGhlIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWMKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKLQotIyBDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0KLSMgUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXMKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYwotCi0jIEZpeCB0aGUgc2hlbGwgdmFyaWFibGUgXCRzcmNmaWxlIGZvciB0aGUgY29tcGlsZXIuCi1maXhfc3JjZmlsZV9wYXRoPSRsdF9maXhfc3JjZmlsZV9wYXRoCi0KLSMgU2V0IHRvIHllcyBpZiBleHBvcnRlZCBzeW1ib2xzIGFyZSByZXF1aXJlZC4KLWFsd2F5c19leHBvcnRfc3ltYm9scz0kYWx3YXlzX2V4cG9ydF9zeW1ib2xzCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHMKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCi0KLSMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgotaW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKLQotIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHCi0KLV9fRU9GX18KLQotCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCiAgIGNhc2UgJGhvc3Rfb3MgaW4KICAgYWl4MyopCi0gICAgY2F0IDw8XEVPRiA+PiAiJGNmZ2ZpbGUiCi0KLSMgQUlYIHNvbWV0aW1lcyBoYXMgcHJvYmxlbXMgd2l0aCB0aGUgR0NDIGNvbGxlY3QyIHByb2dyYW0uICBGb3Igc29tZQotIyByZWFzb24sIGlmIHdlIHNldCB0aGUgQ09MTEVDVF9OQU1FUyBlbnZpcm9ubWVudCB2YXJpYWJsZSwgdGhlIHByb2JsZW1zCi0jIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCi1pZiB0ZXN0ICJYJHtDT0xMRUNUX05BTUVTK3NldH0iICE9IFhzZXQ7IHRoZW4KLSAgQ09MTEVDVF9OQU1FUz0KLSAgZXhwb3J0IENPTExFQ1RfTkFNRVMKLWZpCi1FT0YKLSAgICA7OwotICBlc2FjCi0KLSAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCi0gICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KLSAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KLSAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KLSAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKLQotICBtdiAtZiAiJGNmZ2ZpbGUiICIkb2ZpbGUiIHx8IFwKLSAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQotICBjaG1vZCAreCAiJG9maWxlIgotCi1lbHNlCi0gICMgSWYgdGhlcmUgaXMgbm8gTWFrZWZpbGUgeWV0LCB3ZSByZWx5IG9uIGEgbWFrZSBydWxlIHRvIGV4ZWN1dGUKLSAgIyBgY29uZmlnLnN0YXR1cyAtLXJlY2hlY2snIHRvIHJlcnVuIHRoZXNlIHRlc3RzIGFuZCBjcmVhdGUgdGhlCi0gICMgbGlidG9vbCBzY3JpcHQgdGhlbi4KLSAgbHRtYWluX2luPWBlY2hvICRsdG1haW4gfCBzZWQgLWUgJ3MvXC5zaCQvLmluLydgCi0gIGlmIHRlc3QgLWYgIiRsdG1haW5faW4iOyB0aGVuCi0gICAgdGVzdCAtZiBNYWtlZmlsZSAmJiBtYWtlICIkbHRtYWluIgotICBmaQotZmkKLQotCi1hY19leHQ9YwotYWNfY3BwPSckQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDQyAtYyAkQ0ZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDQyAtbyBjb25mdGVzdCRhY19leGVleHQgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2NfY29tcGlsZXJfZ251Ci0KLUNDPSIkbHRfc2F2ZV9DQyIKLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLXRhZ3Mgb3IgLS13aXRob3V0LXRhZ3Mgd2FzIGdpdmVuLgotaWYgdGVzdCAiJHt3aXRoX3RhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfdGFncyIKLSAgdGFnbmFtZXM9IiR3aXRodmFsIgotZmk7Ci0KLWlmIHRlc3QgLWYgIiRsdG1haW4iICYmIHRlc3QgLW4gIiR0YWduYW1lcyI7IHRoZW4KLSAgaWYgdGVzdCAhIC1mICIke29maWxlfSI7IHRoZW4KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBvdXRwdXQgZmlsZSBcYCRvZmlsZScgZG9lcyBub3QgZXhpc3QiID4mMjt9Ci0gIGZpCi0KLSAgaWYgdGVzdCAteiAiJExUQ0MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENDPSdgIgotICAgIGlmIHRlc3QgLXogIiRMVENDIjsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogb3V0cHV0IGZpbGUgXGAkb2ZpbGUnIGRvZXMgbm90IGxvb2sgbGlrZSBhIGxpYnRvb2wgc2NyaXB0IiA+JjI7fQotICAgIGVsc2UKLSAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzaW5nIFxgTFRDQz0kTFRDQycsIGV4dHJhY3RlZCBmcm9tIFxgJG9maWxlJyIgPiYyO30KLSAgICBmaQotICBmaQotICBpZiB0ZXN0IC16ICIkTFRDRkxBR1MiOyB0aGVuCi0gICAgZXZhbCAiYCRTSEVMTCAke29maWxlfSAtLWNvbmZpZyB8IGdyZXAgJ15MVENGTEFHUz0nYCIKLSAgZmkKLQotICAjIEV4dHJhY3QgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIGluICRvZmlsZS4KLSAgIyBOb3RlIHRoYXQgdGhpcyBhc3N1bWVzIHRoZSBlbnRpcmUgbGlzdCBpcyBvbiBvbmUgbGluZS4KLSAgYXZhaWxhYmxlX3RhZ3M9YGdyZXAgIl5hdmFpbGFibGVfdGFncz0iICIke29maWxlfSIgfCAkU0VEIC1lICdzL2F2YWlsYWJsZV90YWdzPVwoLiokXCkvXDEvJyAtZSAncy9cIi8vZydgCi0KLSAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCi0gIGZvciB0YWduYW1lIGluICR0YWduYW1lczsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICAjIENoZWNrIHdoZXRoZXIgdGFnbmFtZSBjb250YWlucyBvbmx5IHZhbGlkIGNoYXJhY3RlcnMKLSAgICBjYXNlIGAkZWNobyAiWCR0YWduYW1lIiB8ICRYc2VkIC1lICdzOlstX0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoxMjM0NTY3ODkwLC9dOjpnJ2AgaW4KLSAgICAiIikgOzsKLSAgICAqKSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogaW52YWxpZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQk7OwotICAgIGVzYWMKLQotICAgIGlmIGdyZXAgIl4jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJCIgPCAiJHtvZmlsZX0iID4gL2Rldi9udWxsCi0gICAgdGhlbgotICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdGFnIG5hbWUgXCIkdGFnbmFtZVwiIGFscmVhZHkgZXhpc3RzIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHRhZyBuYW1lIFwiJHRhZ25hbWVcIiBhbHJlYWR5IGV4aXN0cyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgIGZpCi0KLSAgICAjIFVwZGF0ZSB0aGUgbGlzdCBvZiBhdmFpbGFibGUgdGFncy4KLSAgICBpZiB0ZXN0IC1uICIkdGFnbmFtZSI7IHRoZW4KLSAgICAgIGVjaG8gYXBwZW5kaW5nIGNvbmZpZ3VyYXRpb24gdGFnIFwiJHRhZ25hbWVcIiB0byAkb2ZpbGUKLQotICAgICAgY2FzZSAkdGFnbmFtZSBpbgotICAgICAgQ1hYKQotCWlmIHRlc3QgLW4gIiRDWFgiICYmICggdGVzdCAiWCRDWFgiICE9ICJYbm8iICYmCi0JICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAotCSAgICAodGVzdCAiWCRDWFgiICE9ICJYZysrIikpKSA7IHRoZW4KLQkgIGFjX2V4dD1jYwotYWNfY3BwPSckQ1hYQ1BQICRDUFBGTEFHUycKLWFjX2NvbXBpbGU9JyRDWFggLWMgJENYWEZMQUdTICRDUFBGTEFHUyBjb25mdGVzdC4kYWNfZXh0ID4mNScKLWFjX2xpbms9JyRDWFggLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDWFhGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1MgY29uZnRlc3QuJGFjX2V4dCAkTElCUyA+JjUnCi1hY19jb21waWxlcl9nbnU9JGFjX2N2X2N4eF9jb21waWxlcl9nbnUKLQotCi0KLQotYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi1hbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ci1hbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYPW5vCi1hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0KLWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9Ci1oYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYPQotaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9Ci1oYXJkY29kZV9taW51c19MX0NYWD1ubwotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9dW5zdXBwb3J0ZWQKLWhhcmRjb2RlX2F1dG9tYXRpY19DWFg9bm8KLW1vZHVsZV9jbWRzX0NYWD0KLW1vZHVsZV9leHBzeW1fY21kc19DWFg9Ci1saW5rX2FsbF9kZXBsaWJzX0NYWD11bmtub3duCi1vbGRfYXJjaGl2ZV9jbWRzX0NYWD0kb2xkX2FyY2hpdmVfY21kcwotbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPQotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPQotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFg9bm8KLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0IGJlaW5nIGxpbmtlZDoKLXByZWRlcF9vYmplY3RzX0NYWD0KLXBvc3RkZXBfb2JqZWN0c19DWFg9Ci1wcmVkZXBzX0NYWD0KLXBvc3RkZXBzX0NYWD0KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYPQotCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgQysrIHRlc3Qgc291cmNlcy4KLWFjX2V4dD1jcHAKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMrKyB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0NYWD0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImludCBzb21lX3ZhcmlhYmxlID0gMDsiCi0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBsaW5rIHRlc3RzCi1sdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW10pIHsgcmV0dXJuKDApOyB9JwotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSAtciBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0kQ0MKLWx0X3NhdmVfTEQ9JExECi1sdF9zYXZlX0dDQz0kR0NDCi1HQ0M9JEdYWAotbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKLWx0X3NhdmVfcGF0aF9MRD0kbHRfY3ZfcGF0aF9MRAotaWYgdGVzdCAtbiAiJHtsdF9jdl9wcm9nX2dudV9sZGN4eCtzZXR9IjsgdGhlbgotICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3Byb2dfZ251X2xkCi1maQotaWYgdGVzdCAtbiAiJHtsdF9jdl9wYXRoX0xEQ1hYK3NldH0iOyB0aGVuCi0gIGx0X2N2X3BhdGhfTEQ9JGx0X2N2X3BhdGhfTERDWFgKLWVsc2UKLSAgJGFzX3Vuc2V0IGx0X2N2X3BhdGhfTEQKLWZpCi10ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAotQ0M9JHtDWFgtImMrKyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0NYWD0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLQotIyBXZSBkb24ndCB3YW50IC1mbm8tZXhjZXB0aW9uIHdlbiBjb21waWxpbmcgQysrIGNvZGUsIHNvIHNldCB0aGUKLSMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKLWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0NYWD0nIC1mbm8tYnVpbHRpbicKLWVsc2UKLSAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYPQotZmkKLQotaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KLSAgIyBTZXQgdXAgZGVmYXVsdCBHTlUgQysrIGNvbmZpZ3VyYXRpb24KLQotCi0jIENoZWNrIHdoZXRoZXIgLS13aXRoLWdudS1sZCBvciAtLXdpdGhvdXQtZ251LWxkIHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7d2l0aF9nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgd2l0aHZhbD0iJHdpdGhfZ251X2xkIgotICB0ZXN0ICIkd2l0aHZhbCIgPSBubyB8fCB3aXRoX2dudV9sZD15ZXMKLWVsc2UKLSAgd2l0aF9nbnVfbGQ9bm8KLWZpOwotYWNfcHJvZz1sZAotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGQgdXNlZCBieSAkQ0MuLi4gJEVDSE9fQyIgPiY2Ci0gIGNhc2UgJGhvc3QgaW4KLSAgKi0qLW1pbmd3KikKLSAgICAjIGdjYyBsZWF2ZXMgYSB0cmFpbGluZyBjYXJyaWFnZSByZXR1cm4gd2hpY2ggdXBzZXRzIG1pbmd3Ci0gICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1IHwgdHIgLWQgJ1wwMTUnYCA7OwotICAqKQotICAgIGFjX3Byb2c9YCgkQ0MgLXByaW50LXByb2ctbmFtZT1sZCkgMj4mNWAgOzsKLSAgZXNhYwotICBjYXNlICRhY19wcm9nIGluCi0gICAgIyBBY2NlcHQgYWJzb2x1dGUgcGF0aHMuCi0gICAgW1xcL10qIHwgPzpbXFwvXSopCi0gICAgICByZV9kaXJlbHQ9Jy9bXi9dW14vXSovXC5cLi8nCi0gICAgICAjIENhbm9uaWNhbGl6ZSB0aGUgcGF0aG5hbWUgb2YgbGQKLSAgICAgIGFjX3Byb2c9YGVjaG8gJGFjX3Byb2d8ICRTRUQgJ3MlXFxcXCUvJWcnYAotICAgICAgd2hpbGUgZWNobyAkYWNfcHJvZyB8IGdyZXAgIiRyZV9kaXJlbHQiID4gL2Rldi9udWxsIDI+JjE7IGRvCi0JYWNfcHJvZz1gZWNobyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKLSAgICAgIGRvbmUKLSAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgotICAgICAgOzsKLSAgIiIpCi0gICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCi0gICAgYWNfcHJvZz1sZAotICAgIDs7Ci0gICopCi0gICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgotICAgIHdpdGhfZ251X2xkPXVua25vd24KLSAgICA7OwotICBlc2FjCi1lbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBHTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgR05VIGxkLi4uICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5vbi1HTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbm9uLUdOVSBsZC4uLiAkRUNIT19DIiA+JjYKLWZpCi1pZiB0ZXN0ICIke2x0X2N2X3BhdGhfTEQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAteiAiJExEIjsgdGhlbgotICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKLSAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KLSAgICBJRlM9IiRsdF9zYXZlX2lmcyIKLSAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgotICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgotICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKLSAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKLSAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCi0gICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KLSAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgotICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCi0JdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhawotCTs7Ci0gICAgICAqKQotCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCi0JOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICBkb25lCi0gIElGUz0iJGx0X3NhdmVfaWZzIgotZWxzZQotICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotZmkKLWZpCi0KLUxEPSIkbHRfY3ZfcGF0aF9MRCIKLWlmIHRlc3QgLW4gIiRMRCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJExEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRMRCIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi10ZXN0IC16ICIkTEQiICYmIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG5vIGFjY2VwdGFibGUgbGQgZm91bmQgaW4gXCRQQVRIIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgdGhlIGxpbmtlciAoJExEKSBpcyBHTlUgbGQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB0aGUgbGlua2VyICgkTEQpIGlzIEdOVSBsZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19nbnVfbGQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgotY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KLSpHTlUqIHwgKid3aXRoIEJGRCcqKQotICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKLSAgOzsKLSopCi0gIGx0X2N2X3Byb2dfZ251X2xkPW5vCi0gIDs7Ci1lc2FjCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X2N2X3Byb2dfZ251X2xkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2dudV9sZCIgPiY2Ci13aXRoX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGQKLQotCi0KLSAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCi0gICMgYXJjaGl2aW5nIGNvbW1hbmRzIGJlbG93IGFzc3VtZSB0aGF0IEdOVSBsZCBpcyBiZWluZyB1c2VkLgotICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KLSAgICAjICAgICBpbnZlc3RpZ2F0ZSBpdCBhIGxpdHRsZSBiaXQgbW9yZS4gKE1NKQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiBldmFsICJgJENDIC1wcmludC1wcm9nLW5hbWU9bGRgIC0taGVscCAyPiYxIiB8IFwKLQlncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgIGVsc2UKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0KLSAgICBmaQotICBlbHNlCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICB3bGFyYz0KLQotICAgICMgQSBnZW5lcmljIGFuZCB2ZXJ5IHNpbXBsZSBkZWZhdWx0IHNoYXJlZCBsaWJyYXJ5IGNyZWF0aW9uCi0gICAgIyBjb21tYW5kIGZvciBHTlUgQysrIGZvciB0aGUgY2FzZSB3aGVyZSBpdCB1c2VzIHRoZSBuYXRpdmUKLSAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAotICAgICMgb3ZlcnJpZGRlbiB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgbmF0aXZlIGxpbmtlciBmZWF0dXJlcyBvbgotICAgICMgdGhlIHBsYXRmb3JtIGl0IGlzIGJlaW5nIHVzZWQgb24uCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICBmaQotCi0gICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0gICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi1lbHNlCi0gIEdYWD1ubwotICB3aXRoX2dudV9sZD1ubwotICB3bGFyYz0KLWZpCi0KLSMgUE9SVE1FOiBmaWxsIGluIGEgZGVzY3JpcHRpb24gb2YgeW91ciBzeXN0ZW0ncyBDKysgbGluayBjaGFyYWN0ZXJpc3RpY3MKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci1sZF9zaGxpYnNfQ1hYPXllcwotY2FzZSAkaG9zdF9vcyBpbgotICBhaXgzKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgYWl4WzQtOV0qKQotICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0Ci0gICAgICAjIGhhdmUgdG8gZG8gYW55dGhpbmcgc3BlY2lhbC4KLSAgICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLSAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSIiCi0gICAgZWxzZQotICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubwotCi0gICAgICAjIFRlc3QgaWYgd2UgYXJlIHRyeWluZyB0byB1c2UgcnVuIHRpbWUgbGlua2luZyBvciBub3JtYWwKLSAgICAgICMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4gYWl4NC5bMjNdfGFpeDQuWzIzXS4qfGFpeFs1LTldKikKLQlmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLQkgIGNhc2UgJGxkX2ZsYWcgaW4KLQkgICotYnJ0bCopCi0JICAgIGFpeF91c2VfcnVudGltZWxpbmtpbmc9eWVzCi0JICAgIGJyZWFrCi0JICAgIDs7Ci0JICBlc2FjCi0JZG9uZQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCi0gICAgICBub19lbnRyeV9mbGFnPSctYm5vZW50cnknCi0gICAgZmkKLQotICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKLSAgICAjIG9yIHByb2dyYW0gcmVzdWx0cyBpbiAiZXJyb3IgVE9DIG92ZXJmbG93IiBhZGQgLW1taW5pbWFsLXRvYyB0bwotICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCi0KLSAgICBhcmNoaXZlX2NtZHNfQ1hYPScnCi0gICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKLSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLQotICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuWzAxMl18YWl4NC5bMDEyXS4qKQotICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCi0gICAgICAjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQljb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCi0JaWYgdGVzdCAtZiAiJGNvbGxlY3QybmFtZSIgJiYgXAotCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQl0aGVuCi0JICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKLQkgIDoKLQllbHNlCi0JICAjIFdlIGhhdmUgb2xkIGNvbGxlY3QyCi0JICBoYXJkY29kZV9kaXJlY3RfQ1hYPXVuc3VwcG9ydGVkCi0JICAjIEl0IGZhaWxzIHRvIGZpbmQgdW5pbnN0YWxsZWQgbGlicmFyaWVzIHdoZW4gdGhlIHVuaW5zdGFsbGVkCi0JICAjIHBhdGggaXMgbm90IGxpc3RlZCBpbiB0aGUgbGlicGF0aC4gIFNldHRpbmcgaGFyZGNvZGVfbWludXNfTAotCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0JICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0JICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0KLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLSAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCXNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICAjIG5vdCB1c2luZyBnY2MKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBWaXN1YWxBZ2UgQysrLCBWZXJzaW9uIDUuNSBmb3IgQUlYIDVMIGZvciBJQS02NCwgQmV0YSAzIFJlbGVhc2UKLQkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCXNoYXJlZF9mbGFnPSctRycKLSAgICAgIGVsc2UKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPScke3dsfS1HJwotCWVsc2UKLQkgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCi0JZmkKLSAgICAgIGZpCi0gICAgZmkKLQotICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICMgdW5kZXJzY29yZSAoXyksIHNvIGl0IGlzIGJldHRlciB0byBnZW5lcmF0ZSBhIGxpc3Qgb2Ygc3ltYm9scyB0byBleHBvcnQuCi0gICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD15ZXMKLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAotICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSctYmVyb2snCi0gICAgICAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJGxpYmRpcjovdXNyL2xpYjovbGliJwotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0iLXogbm9kZWZzIgotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotICAgICAgZWxzZQotCSMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eSBleGVjdXRhYmxlLgotCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jeHhfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVuIHRpbWUgbG9hZGluZyBmbGFncywKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0Jbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tYmVybm90b2snCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tYmVyb2snCi0JIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSckY29udmVuaWVuY2UnCi0JYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCSMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgIGZpCi0gICAgZmkKLSAgICA7OwotCi0gIGJlb3MqKQotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0gICAgICAjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0gICAgICAjIHN1cHBvcnQgLS11bmRlZmluZWQuICBUaGlzIGRlc2VydmVzIHNvbWUgaW52ZXN0aWdhdGlvbi4gIEZJWE1FCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0gICAgZWxzZQotICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIGZpCi0gICAgOzsKLQotICBjaG9ydXMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotCi0gIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAjIF9MVF9BQ19UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgQ1hYKSBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywKLSAgICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctTCRsaWJkaXInCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPXVuc3VwcG9ydGVkCi0gICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0NYWD1ubwotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYPXllcwotCi0gICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0gICAgICAjIElmIHRoZSBleHBvcnQtc3ltYm9scyBmaWxlIGFscmVhZHkgaXMgYSAuZGVmIGZpbGUgKDFzdCBsaW5lCi0gICAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgotICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JY3AgJGV4cG9ydF9zeW1ib2xzICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotICAgICAgZWxzZQotCWVjaG8gRVhQT1JUUyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWNhdCAkZXhwb3J0X3N5bWJvbHMgPj4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0gICAgICBmaX4KLSAgICAgICRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKLSAgICBlbHNlCi0gICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgZmkKLSAgOzsKLSAgICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19DWFg9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0iJF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkIgotICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXMgOyB0aGVuCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgIGFyY2hpdmVfY21kc19DWFg9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgICBtb2R1bGVfY21kc19DWFg9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgIT0gInllcyI7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgICBmaQotICAgICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtcW1rc2hyb2JqICR7d2x9LXNpbmdsZV9tb2R1bGUgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgIG1vZHVsZV9jbWRzX0NYWD0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkIC1lICJzLCMuKiwsIiAtZSAicyxeWyAgICBdKiwsIiAtZSAicyxeXCguLipcKSxfJiwiIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX4kQ0MgLXFta3Nocm9iaiAke3dsfS1zaW5nbGVfbW9kdWxlICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYPSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBmaQotICAgICAgICA7OwotCi0gIGRndXgqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBlYysrKikKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGdoY3gqKQotCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBmcmVlYnNkWzEyXSopCi0gICAgIyBDKysgc2hhcmVkIGxpYnJhcmllcyByZXBvcnRlZCB0byBiZSBmYWlybHkgYnJva2VuIGJlZm9yZSBzd2l0Y2ggdG8gRUxGCi0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIGZyZWVic2QtZWxmKikKLSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICA7OwotICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgIyBGcmVlQlNEIDMgYW5kIGxhdGVyIHVzZSBHTlUgQysrIGFuZCBHTlUgbGQgd2l0aCBzdGFuZGFyZCBFTEYKLSAgICAjIGNvbnZlbnRpb25zCi0gICAgbGRfc2hsaWJzX0NYWD15ZXMKLSAgICA7OwotICBnbnUqKQotICAgIDs7Ci0gIGhwdXg5KikKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0gICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICBoYXJkY29kZV9taW51c19MX0NYWD15ZXMgIyBOb3QgaW4gdGhlIHNlYXJjaCBQQVRILAotCQkJCSMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgQ0MqKQotICAgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgICA7OwotICAgIGFDQyopCi0gICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kQ0MgLWIgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLSAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0gICAgICAjCi0gICAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCi0gICAgICAjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotICAgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotICAgICAgIyBkZXBlbmRlbmNpZXMuCi0gICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiWy1dTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0gICAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJwotICAgICAgZWxzZQotICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICAgICAgbGRfc2hsaWJzX0NYWD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGhwdXgxMCp8aHB1eDExKikKLSAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikgOzsKLSAgICAgICopCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0NYWD0nJHt3bH0tRScKLSAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgaHBwYSo2NCp8aWE2NCopCi0gICAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgICAgOzsKLSAgICAqKQotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfQ1hYPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JCQkJCSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0Ci0JCQkJCSAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBhQ0MqKQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCgkQ0MgLWIgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEpIHwgZ3JlcCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCi0JICAgIGNhc2UgJGhvc3RfY3B1IGluCi0JICAgIGhwcGEqNjQqKQotCSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICBpYTY0KikKLQkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rbm9kZWZhdWx0cnBhdGggLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICAgICAgOzsKLQkgICAgKikKLQkgICAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICBmaQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgbGRfc2hsaWJzX0NYWD1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgaW50ZXJpeFszLTldKikKLSAgICBoYXJkY29kZV9kaXJlY3RfQ1hYPW5vCi0gICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1FJwotICAgICMgSGFjazogT24gSW50ZXJpeCAzLngsIHdlIGNhbm5vdCBjb21waWxlIFBJQyBiZWNhdXNlIG9mIGEgYnJva2VuIGdjYy4KLSAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQotICAgICMgY29uc3VtaW5nIGFuZCBmcmFnbWVudGluZyBwcm9jZXNzLiAgVG8gYXZvaWQgdGhpcywgd2UgcGljayBhIHJhbmRvbSwKLSAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCi0gICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICA7OwotICBpcml4NSogfCBpcml4NiopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFNHSSBDKysKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAtYWxsIC1tdWx0aWdvdCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtYXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBJUklYIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkjIGluIHRoZSBhcmNoaXZlLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLWFyIC1XUiwtdSAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCi0JICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgLW8gJGxpYicKLQkgIGZpCi0JZmkKLQlsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLQk7OwotICAgIGVzYWMKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLSAgICA7OwotICBsaW51eCogfCBrKmJzZCotZ251KQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWIgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHM7IG12IFwkdGVtcGxpYiAkbGliJwotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEgfCBncmVwICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZWNobyAkbGlzdCcKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGgsJGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAtQnN0YXRpYyIsIHdoZXJlICJDQyIgaXMgdGhlIEtBSSBDKysgY29tcGlsZXIuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBpY3BjKikKLQkjIEludGVsIEMrKwotCXdpdGhfZ251X2xkPXllcwotCSMgdmVyc2lvbiA4LjAgYW5kIGFib3ZlIG9mIGljcGMgY2hva2Ugb24gbXVsdGlwbHkgZGVmaW5lZCBzeW1ib2xzCi0JIyBpZiB3ZSBhZGQgJHByZWRlcF9vYmplY3RzIGFuZCAkcG9zdGRlcF9vYmplY3RzLCBob3dldmVyIDcuMSBhbmQKLQkjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgotCWNhc2UgYCRDQyAtViAyPiYxYCBpbgotCSoiVmVyc2lvbiA3LiIqKQotICAJICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgCSAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCSAgOzsKLQkqKSAgIyBWZXJzaW9uIDguMCBvciBuZXdlcgotCSAgdG1wX2lkeW49Ci0JICBjYXNlICRob3N0X2NwdSBpbgotCSAgICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7Ci0JICBlc2FjCi0gIAkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCciJHRtcF9pZHluIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCi0JICA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQlleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQk7OwotICAgICAgcGdDQyogfCBwZ2NwcCopCi0gICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCi0gIAlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS0tcnBhdGggJHt3bH0kbGliZGlyJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKLQl3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgICAgOzsKLSAgICAgIGN4eCopCi0JIyBDb21wYXEgQysrCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKLQotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9Jy1ycGF0aCAkbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfQ1hYPToKLQotCSMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KLQkjCi0JIyBUaGVyZSBkb2Vzbid0IGFwcGVhciB0byBiZSBhIHdheSB0byBwcmV2ZW50IHRoaXMgY29tcGlsZXIgZnJvbQotCSMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCi0JIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQotCSMgZGVwZW5kZW5jaWVzLgotCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJsZCJgOyB0ZW1wbGlzdD1gZWNobyAkdGVtcGxpc3QgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGVjaG8gJGxpc3QnCi0JOzsKLSAgICAgICopCi0JY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDKysgNS45Ci0JICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAtemRlZnMnCi0JICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPScke3dsfS0td2hvbGUtYXJjaGl2ZWBuZXdfY29udmVuaWVuY2U9OyBmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0IC16IFwiJGNvbnZcIiB8fCBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7ICRlY2hvIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKLQotCSAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgotCSAgIyAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMQotCSAgIyB3b3VsZCBiZSBiZXR0ZXIuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLQotCSAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAotCSAgIyBpbiB0aGUgYXJjaGl2ZS4KLQkgIG9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgbHlueG9zKikKLSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgbTg4ayopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIG12cyopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGN4eCopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICAqKQotCSMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCWxkX3NobGlic19DWFg9bm8KLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBuZXRic2QqKQotICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLSAgICAgIGFyY2hpdmVfY21kc19DWFg9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0NYWD15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYPW5vCi0gICAgZmkKLSAgICAjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCi0gICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBjb25mdGVzdC4kb2JqZXh0IHwgJFNFRCAtZSAiczotbGdjYyAtbGMgLWxnY2M6OiInCi0gICAgOzsKLSAgb3BlbmJzZDIqKQotICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGZhaXJseSBicm9rZW4KLSAgICBsZF9zaGxpYnNfQ1hYPW5vCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgaWYgdGVzdCAtZiAvdXNyL2xpYmV4ZWMvbGQuc287IHRoZW4KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9DWFg9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0gICAgICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19DWFg9JyR7d2x9LUUnCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfQ1hYPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZmkKLSAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgIGVsc2UKLSAgICAgIGxkX3NobGlic19DWFg9bm8KLSAgICBmaQotICAgIDs7Ci0gIG9zZjMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyAiQ0MgLUJzdGF0aWMiLCB3aGVyZSAiQ0MiIGlzIHRoZSBLQUkgQysrIGNvbXBpbGVyLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUJzdGF0aWMgLW8gJG9sZGxpYiAkb2xkb2JqcycKLQotCTs7Ci0gICAgICBSQ0MqKQotCSMgUmF0aW9uYWwgQysrIDIuNC4xCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBjeHgqKQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWD0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgIGFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0JICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgotCSAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCBncmVwICJcLUwiJwotCi0JZWxzZQotCSAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JICBsZF9zaGxpYnNfQ1hYPW5vCi0JZmkKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBvc2Y0KiB8IG9zZjUqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBLQ0MqKQotCSMgS3VjayBhbmQgQXNzb2NpYXRlcywgSW5jLiAoS0FJKSBDKysgQ29tcGlsZXIKLQotCSMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKLQkjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5Ci0JIyB0byBpdHMgcHJvcGVyIG5hbWUgKHdpdGggdmVyc2lvbikgYWZ0ZXIgbGlua2luZy4KLQlhcmNoaXZlX2NtZHNfQ1hYPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFteKCkwLTlBLVphLXp7fV1cKS9cXFxcXDEvZydcJydgOyB0ZW1wbGliPWBlY2hvICRsaWIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJwotCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCi0JIyB0aGUgS0FJIEMrKyBjb21waWxlci4KLQlvbGRfYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1vICRvbGRsaWIgJG9sZG9ianMnCi0JOzsKLSAgICAgIFJDQyopCi0JIyBSYXRpb25hbCBDKysgMi40LjEKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgIGN4eCopCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfQ1hYPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+Ci0JICBlY2hvICItaGlkZGVuIj4+ICRsaWIuZXhwfgotCSAgJENDIC1zaGFyZWQkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSAtV2wsLWlucHV0IC1XbCwkbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uCSR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KLQkgICRybSAkbGliLmV4cCcKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctcnBhdGggJGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD06Ci0KLQkjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JIwotCSMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KLQkjIGV4cGxpY2l0bHkgbGlua2luZyBzeXN0ZW0gb2JqZWN0IGZpbGVzIHNvIHdlIG5lZWQgdG8gc3RyaXAgdGhlbQotCSMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKLQkjIGRlcGVuZGVuY2llcy4KLQlvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0ndGVtcGxpc3Q9YCRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAibGQiIHwgZ3JlcCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBlY2hvICR0ZW1wbGlzdCB8ICRTRUQgInMvXCheLipsZC4qXClcKCAuKmxkLiokXCkvXDEvImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBlY2hvICRsaXN0JwotCTs7Ci0gICAgICAqKQotCWlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCSAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQkgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWD0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotCSAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9DWFg9OgotCi0JICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCi0JICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCAiXC1MIicKLQotCWVsc2UKLQkgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotCSAgbGRfc2hsaWJzX0NYWD1ubwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgcHNvcyopCi0gICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0gICAgbGRfc2hsaWJzX0NYWD1ubwotICAgIDs7Ci0gIHN1bm9zNCopCi0gICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIENDKikKLQkjIFN1biBDKysgNC54Ci0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgICBsY2MqKQotCSMgTHVjaWQKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHNvbGFyaXMqKQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JIyBTdW4gQysrIDQuMiwgNS54IGFuZCBDZW50ZXJsaW5lIEMrKwotICAgICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9eWVzCi0Jbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScgLXpkZWZzJwotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCSRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICAke3dsfS1NICR7d2x9JGxpYi5leHAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRybSAkbGliLmV4cCcKLQotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSctUiRsaWJkaXInCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9DWFg9bm8KLQljYXNlICRob3N0X29zIGluCi0JICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0JICAqKQotCSAgICAjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSAgICAjIGJ1dCB1bmRlcnN0YW5kcyBgLXogbGlua2VyX2ZsYWcnLgotCSAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFg9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JICAgIDs7Ci0JZXNhYwotCWxpbmtfYWxsX2RlcGxpYnNfQ1hYPXllcwotCi0Jb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0KLQkjIEFyY2hpdmVzIGNvbnRhaW5pbmcgQysrIG9iamVjdCBmaWxlcyBtdXN0IGJlIGNyZWF0ZWQgdXNpbmcKLQkjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKLQkjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKLQkjIGluIHRoZSBhcmNoaXZlLgotCW9sZF9hcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICBnY3gqKQotCSMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWggJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JIyBUaGUgQysrIGNvbXBpbGVyIG11c3QgYmUgdXNlZCB0byBjcmVhdGUgdGhlIGFyY2hpdmUuCi0Jb2xkX2FyY2hpdmVfY21kc19DWFg9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJwotCTs7Ci0gICAgICAqKQotCSMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCi0JaWYgdGVzdCAiJEdYWCIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JICBub191bmRlZmluZWRfZmxhZ19DWFg9JyAke3dsfS16ICR7d2x9ZGVmcycKLQkgIGlmICRDQyAtLXZlcnNpb24gfCBncmVwIC12ICdeMlwuNycgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkkQ0MgLXNoYXJlZCAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0KLQkgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cwotCSAgICAjIHdoYXQgImhpZGRlbiIgbGlicmFyaWVzLCBvYmplY3QgZmlsZXMgYW5kIGZsYWdzIGFyZSB1c2VkIHdoZW4KLQkgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCi0JICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSIkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8IGdyZXAgXCJcLUxcIiIKLQkgIGVsc2UKLQkgICAgIyBnKysgMi43IGFwcGVhcnMgdG8gcmVxdWlyZSBgLUcnIE5PVCBgLXNoYXJlZCcgb24gdGhpcwotCSAgICAjIHBsYXRmb3JtLgotCSAgICBhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLUcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKLQkgICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotCQkkQ0MgLUcgLW5vc3RkbGliICR7d2x9LU0gJHdsJGxpYi5leHAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotCi0JICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKLQkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCi0JICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgotCSAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0iJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgZ3JlcCBcIlwtTFwiIgotCSAgZmkKLQotCSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFg9JyR7d2x9LVIgJHdsJGxpYmRpcicKLQkgIGNhc2UgJGhvc3Rfb3MgaW4KLQkgIHNvbGFyaXMyLlswLTVdIHwgc29sYXJpczIuWzAtNV0uKikgOzsKLQkgICopCi0JICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWD0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JwotCSAgICA7OwotCSAgZXNhYwotCWZpCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICBub191bmRlZmluZWRfZmxhZ19DWFg9JyR7d2x9LXosdGV4dCcKLSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgICAgKikKLQlhcmNoaXZlX2NtZHNfQ1hYPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQk7OwotICAgIGVzYWMKLSAgICA7OwotICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90Ci0gICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKLSAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAjIGFzIC16IGRlZnMuCi0gICAgIyBGb3Igc2VjdXJpdHkgcmVhc29ucywgaXQgaXMgaGlnaGx5IHJlY29tbWVuZGVkIHRoYXQgeW91IGFsd2F5cwotICAgICMgdXNlIGFic29sdXRlIHBhdGhzIGZvciBuYW1pbmcgc2hhcmVkIGxpYnJhcmllcywgYW5kIGV4Y2x1ZGUgdGhlCi0gICAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KLSAgICAjIHJlcXVpcmVzIHRoYXQgeW91IGNvbXBpbGUgZXZlcnl0aGluZyB0d2ljZSwgd2hpY2ggaXMgYSBwYWluLgotICAgICMgU28gdGhhdCBiZWhhdmlvdXIgaXMgb25seSBlbmFibGVkIGlmIFNDT0FCU1BBVEggaXMgc2V0IHRvIGEKLSAgICAjIG5vbi1lbXB0eSB2YWx1ZSBpbiB0aGUgZW52aXJvbm1lbnQuICBNb3N0IGxpa2VseSBvbmx5IHVzZWZ1bCBmb3IKLSAgICAjIGNyZWF0aW5nIG9mZmljaWFsIGRpc3RyaWJ1dGlvbnMgb2YgcGFja2FnZXMuCi0gICAgIyBUaGlzIGlzIGEgaGFjayB1bnRpbCBsaWJ0b29sIG9mZmljaWFsbHkgc3VwcG9ydHMgYWJzb2x1dGUgcGF0aAotICAgICMgbmFtZXMgZm9yIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LHRleHQnCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPScke3dsfS16LG5vZGVmcycKLSAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFg9bm8KLSAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0NYWD1ubwotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWD0nOicKLSAgICBsaW5rX2FsbF9kZXBsaWJzX0NYWD15ZXMKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYPScke3dsfS1CZXhwb3J0JwotICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBDQyopCi0JYXJjaGl2ZV9jbWRzX0NYWD0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCTs7Ci0gICAgICAqKQotCWFyY2hpdmVfY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19DWFg9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JOzsKLSAgICBlc2FjCi0gICAgOzsKLSAgdGFuZGVtKikKLSAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgTkNDKikKLQkjIE5vblN0b3AtVVggTkNDIDMuMjAKLQkjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKLQlsZF9zaGxpYnNfQ1hYPW5vCi0JOzsKLSAgICAgICopCi0JIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0Ci0JbGRfc2hsaWJzX0NYWD1ubwotCTs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIHZ4d29ya3MqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotICAqKQotICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAotICAgIGxkX3NobGlic19DWFg9bm8KLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19DWFgiID4mNgotdGVzdCAiJGxkX3NobGlic19DWFgiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi1HQ0NfQ1hYPSIkR1hYIgotTERfQ1hYPSIkTEQiCi0KLWNhdCA+IGNvbmZ0ZXN0LiRhY19leHQgPDxFT0YKLWNsYXNzIEZvbwotewotcHVibGljOgotICBGb28gKHZvaWQpIHsgYSA9IDA7IH0KLXByaXZhdGU6Ci0gIGludCBhOwotfTsKLUVPRgotCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IHRoZW4KLSAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKLSAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCi0KLSAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQotICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KLSAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubwotCi0gICMgVGhlIGAqJyBpbiB0aGUgY2FzZSBtYXRjaGVzIGZvciBhcmNoaXRlY3R1cmVzIHRoYXQgdXNlIGBjYXNlJyBpbgotICAjICRvdXRwdXRfdmVyYm9zZV9jbWQgY2FuIHRyaWdnZXIgZ2xvYiBleHBhbnNpb24gZHVyaW5nIHRoZSBsb29wCi0gICMgZXZhbCB3aXRob3V0IHRoaXMgc3Vic3RpdHV0aW9uLgotICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD1gJGVjaG8gIlgkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiIHwgJFhzZWQgLWUgIiRub19nbG9iX3N1YnN0ImAKLQotICBmb3IgcCBpbiBgZXZhbCAkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWRgOyBkbwotICAgIGNhc2UgJHAgaW4KLQotICAgIC1MKiB8IC1SKiB8IC1sKikKLSAgICAgICAjIFNvbWUgY29tcGlsZXJzIHBsYWNlIHNwYWNlIGJldHdlZW4gIi17TCxSfSIgYW5kIHRoZSBwYXRoLgotICAgICAgICMgUmVtb3ZlIHRoZSBzcGFjZS4KLSAgICAgICBpZiB0ZXN0ICRwID0gIi1MIiBcCi0JICB8fCB0ZXN0ICRwID0gIi1SIjsgdGhlbgotCSBwcmV2PSRwCi0JIGNvbnRpbnVlCi0gICAgICAgZWxzZQotCSBwcmV2PQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBjYXNlICRwIGluCi0JIC1MKiB8IC1SKikKLQkgICAjIEludGVybmFsIGNvbXBpbGVyIGxpYnJhcnkgcGF0aHMgc2hvdWxkIGNvbWUgYWZ0ZXIgdGhvc2UKLQkgICAjIHByb3ZpZGVkIHRoZSB1c2VyLiAgVGhlIHBvc3RkZXBzIGFscmVhZHkgY29tZSBhZnRlciB0aGUKLQkgICAjIHVzZXIgc3VwcGxpZWQgbGlicyBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIHByb2Nlc3MgdGhlbS4KLQkgICBpZiB0ZXN0IC16ICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7cHJldn0ke3B9IgotCSAgIGVsc2UKLQkgICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF9DWFg9IiR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0gJHtwcmV2fSR7cH0iCi0JICAgZmkKLQkgICA7OwotCSAjIFRoZSAiLWwiIGNhc2Ugd291bGQgbmV2ZXIgY29tZSBiZWZvcmUgdGhlIG9iamVjdCBiZWluZwotCSAjIGxpbmtlZCwgc28gZG9uJ3QgYm90aGVyIGhhbmRsaW5nIHRoaXMgY2FzZS4KLQkgZXNhYwotICAgICAgIGVsc2UKLQkgaWYgdGVzdCAteiAiJHBvc3RkZXBzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwc19DWFg9IiR7cHJldn0ke3B9IgotCSBlbHNlCi0JICAgcG9zdGRlcHNfQ1hYPSIke3Bvc3RkZXBzX0NYWH0gJHtwcmV2fSR7cH0iCi0JIGZpCi0gICAgICAgZmkKLSAgICAgICA7OwotCi0gICAgKi4kb2JqZXh0KQotICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAotICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgotICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgotCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcwotCSBjb250aW51ZQotICAgICAgIGZpCi0KLSAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgotCSBpZiB0ZXN0IC16ICIkcHJlZGVwX29iamVjdHNfQ1hYIjsgdGhlbgotCSAgIHByZWRlcF9vYmplY3RzX0NYWD0iJHAiCi0JIGVsc2UKLQkgICBwcmVkZXBfb2JqZWN0c19DWFg9IiRwcmVkZXBfb2JqZWN0c19DWFggJHAiCi0JIGZpCi0gICAgICAgZWxzZQotCSBpZiB0ZXN0IC16ICIkcG9zdGRlcF9vYmplY3RzX0NYWCI7IHRoZW4KLQkgICBwb3N0ZGVwX29iamVjdHNfQ1hYPSIkcCIKLQkgZWxzZQotCSAgIHBvc3RkZXBfb2JqZWN0c19DWFg9IiRwb3N0ZGVwX29iamVjdHNfQ1hYICRwIgotCSBmaQotICAgICAgIGZpCi0gICAgICAgOzsKLQotICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgotCi0gICAgZXNhYwotICBkb25lCi0KLSAgIyBDbGVhbiB1cC4KLSAgcm0gLWYgYS5vdXQgYS5leGUKLWVsc2UKLSAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nIENYWCB0ZXN0IHByb2dyYW0iCi1maQotCi0kcm0gLWYgY29uZmVzdC4kb2JqZXh0Ci0KLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19DWFg9Ci1pZiB0ZXN0IC1uICIkY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCI7IHRoZW4KLSAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWD1gZWNobyAiICR7Y29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWH0iIHwgJHtTRUR9IC1lICdzISAtTCEgIWcnIC1lICdzIV4gISEnYAotZmkKLQotIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KLWNhc2UgJGhvc3Rfb3MgaW4KLWludGVyaXhbMy05XSopCi0gICMgSW50ZXJpeCAzLjUgaW5zdGFsbHMgY29tcGxldGVseSBob3NlZCAubGEgZmlsZXMgZm9yIEMrKywgc28gcmF0aGVyIHRoYW4KLSAgIyBoYWNrIGFsbCBhcm91bmQgaXQsIGxldCdzIGp1c3QgdHJ1c3QgImcrKyIgdG8gRFRSVC4KLSAgcHJlZGVwX29iamVjdHNfQ1hYPQotICBwb3N0ZGVwX29iamVjdHNfQ1hYPQotICBwb3N0ZGVwc19DWFg9Ci0gIDs7Ci0KLWxpbnV4KikKLSAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0gICpTdW5cIEMqKQotICAgICMgU3VuIEMrKyA1LjkKLSAgICAjCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLSAgICBpZiB0ZXN0ICIkc29sYXJpc191c2Vfc3RscG9ydDQiICE9IHllczsgdGhlbgotICAgICAgcG9zdGRlcHNfQ1hYPSctbGlicmFyeT1Dc3RkIC1saWJyYXJ5PUNydW4nCi0gICAgZmkKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXNvbGFyaXMqKQotICBjYXNlICRjY19iYXNlbmFtZSBpbgotICBDQyopCi0gICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCi0gICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCi0gICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcwotICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KLSAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgotICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQotICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgICMgQWRkaW5nIHRoaXMgcmVxdWlyZXMgYSBrbm93bi1nb29kIHNldHVwIG9mIHNoYXJlZCBsaWJyYXJpZXMgZm9yCi0gICAgIyBTdW4gY29tcGlsZXIgdmVyc2lvbnMgYmVmb3JlIDUuNiwgZWxzZSBQSUMgb2JqZWN0cyBmcm9tIGFuIG9sZAotICAgICMgYXJjaGl2ZSB3aWxsIGJlIGxpbmtlZCBpbnRvIHRoZSBvdXRwdXQsIGxlYWRpbmcgdG8gc3VidGxlIGJ1Z3MuCi0gICAgaWYgdGVzdCAiJHNvbGFyaXNfdXNlX3N0bHBvcnQ0IiAhPSB5ZXM7IHRoZW4KLSAgICAgIHBvc3RkZXBzX0NYWD0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJwotICAgIGZpCi0gICAgOzsKLSAgZXNhYwotICA7OwotZXNhYwotCi1jYXNlICIgJHBvc3RkZXBzX0NYWCAiIGluCi0qIiAtbGMgIiopIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD1ubyA7OwotZXNhYwotCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2Ci0KLSAgIyBDKysgc3BlY2lmaWMgY2FzZXMgZm9yIHBpYywgc3RhdGljLCB3bCwgZXRjLgotICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLXN0YXRpYycKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLSAgICBhbWlnYW9zKikKLSAgICAgICMgRklYTUU6IHdlIG5lZWQgYXQgbGVhc3QgNjgwMjAgY29kZSB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLCBidXQKLSAgICAgICMgYWRkaW5nIHRoZSBgLW02ODAyMCcgZmxhZyB0byBHQ0MgcHJldmVudHMgYnVpbGRpbmcgYW55dGhpbmcgYmV0dGVyLAotICAgICAgIyBsaWtlIGAtbTY4MDQwJy4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLW02ODAyMCAtcmVzaWRlbnQzMiAtbWFsd2F5cy1yZXN0b3JlLWE0JwotICAgICAgOzsKLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0gICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotICAgIGRhcndpbiogfCByaGFwc29keSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mbm8tY29tbW9uJwotICAgICAgOzsKLSAgICAqZGpncHAqKQotICAgICAgIyBESkdQUCBkb2VzIG5vdCBzdXBwb3J0IHNoYXJlZCBsaWJyYXJpZXMgYXQgYWxsCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Ci0gICAgICA7OwotICAgIGludGVyaXhbMy05XSopCi0gICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgotICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCi0gICAgICA7OwotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9LUtjb25mb3JtX3BpYwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXhbNC05XSopCi0JIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICAjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQllbHNlCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLQlmaQotCTs7Ci0gICAgICBjaG9ydXMqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JY3hjaDY4KikKLQkgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCi0JICAjIF9MVF9BQ19UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsIENYWCk9Ii0tbm9fYXV0b19pbnN0YW50aWF0aW9uIC11IF9fbWFpbiAtdSBfX3ByZW1haW4gLXUgX2Fib3J0IC1yICRDT09MX0RJUi9saWIvbGliT3JiLmEgJE1WTUVfRElSL2xpYi9DQy9saWJDLmEgJE1WTUVfRElSL2xpYi9jbGFzc2l4L2xpYmN4LnMuYSIKLQkgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAgZGFyd2luKikKLSAgICAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgICAgIHhsYyopCi0gICAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXFub2NvbW1vbicKLSAgICAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0gICAgICAgICAgIDs7Ci0gICAgICAgICBlc2FjCi0gICAgICAgOzsKLSAgICAgIGRndXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBlYysrKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgOzsKLQkgIGdoY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1waWMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgZnJlZWJzZCogfCBkcmFnb25mbHkqKQotCSMgRnJlZUJTRCB1c2VzIEdOVSBDKysKLQk7OwotICAgICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0JICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NDsgdGhlbgotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nK1onCi0JICAgIGZpCi0JICAgIDs7Ci0JICBhQ0MqKQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPScke3dsfS1hICR7d2x9YXJjaGl2ZScKLQkgICAgY2FzZSAkaG9zdF9jcHUgaW4KLQkgICAgaHBwYSo2NCp8aWE2NCopCi0JICAgICAgIyArWiB0aGUgZGVmYXVsdAotCSAgICAgIDs7Ci0JICAgICopCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPScrWicKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgaW50ZXJpeCopCi0JIyBUaGlzIGlzIGM4OSwgd2hpY2ggaXMgTVMgVmlzdWFsIEMrKyAobm8gc2hhcmVkIGxpYnMpCi0JIyBBbnlvbmUgd2FudHMgdG8gZG8gYSBwb3J0PwotCTs7Ci0gICAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotCWNhc2UgJGNjX2Jhc2VuYW1lIGluCi0JICBDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICAjIENDIHBpYyBmbGFnIC1LUElDIGlzIHRoZSBkZWZhdWx0LgotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgICMgS0FJIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLS1iYWNrZW5kIC1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLWZQSUMnCi0JICAgIDs7Ci0JICBpY3BjKiB8IGVjcGMqKQotCSAgICAjIEludGVsIEMrKwotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctS1BJQycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctc3RhdGljJwotCSAgICA7OwotCSAgcGdDQyogfCBwZ2NwcCopCi0JICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyLgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWD0nLVdsLCcKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctZnBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgQ29tcGFxIEMrKwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JICAgICpTdW5cIEMqKQotCSAgICAgICMgU3VuIEMrKyA1LjkKLQkgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1Rb3B0aW9uIGxkICcKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBseW54b3MqKQotCTs7Ci0gICAgICBtODhrKikKLQk7OwotICAgICAgbXZzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgY3h4KikKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctVyBjLGV4cG9ydGFsbCcKLQkgICAgOzsKLQkgICopCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICBuZXRic2QqKQotCTs7Ci0gICAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIEtDQyopCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctLWJhY2tlbmQgLVdsLCcKLQkgICAgOzsKLQkgIFJDQyopCi0JICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgOzsKLQkgIGN4eCopCi0JICAgICMgRGlnaXRhbC9Db21wYXEgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctV2wsJwotCSAgICAjIE1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgaXMgZW1wdHkuICBJdCBhcHBlYXJzIHRoYXQgYWxsIEFscGhhCi0JICAgICMgTGludXggYW5kIENvbXBhcSBUcnU2NCBVbml4IG9iamVjdHMgYXJlIFBJQy4KLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFg9Jy1ub25fc2hhcmVkJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHBzb3MqKQotCTs7Ci0gICAgICBzb2xhcmlzKikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYPSctUW9wdGlvbiBsZCAnCi0JICAgIDs7Ci0JICBnY3gqKQotCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1QSUMnCi0JICAgIDs7Ci0JICAqKQotCSAgICA7OwotCWVzYWMKLQk7OwotICAgICAgc3Vub3M0KikKLQljYXNlICRjY19iYXNlbmFtZSBpbgotCSAgQ0MqKQotCSAgICAjIFN1biBDKysgNC54Ci0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLXBpYycKLQkgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfQ1hYPSctQnN0YXRpYycKLQkgICAgOzsKLQkgIGxjYyopCi0JICAgICMgTHVjaWQKLQkgICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSctcGljJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHRhbmRlbSopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIE5DQyopCi0JICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAotCSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFg9Jy1LUElDJwotCSAgICA7OwotCSAgKikKLQkgICAgOzsKLQllc2FjCi0JOzsKLSAgICAgIHN5c3Y1KiB8IHVuaXh3YXJlKiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCBPcGVuVU5JWCopCi0JY2FzZSAkY2NfYmFzZW5hbWUgaW4KLQkgIENDKikKLQkgICAgbHRfcHJvZ19jb21waWxlcl93bF9DWFg9Jy1XbCwnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0nLUtQSUMnCi0JICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0nLUJzdGF0aWMnCi0JICAgIDs7Ci0JZXNhYwotCTs7Ci0gICAgICB2eHdvcmtzKikKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfQ1hYPW5vCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgPiY2Ci0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgiOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxMzYyMDogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxMzYyNDogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWD15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19DWFgiID4mNgotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWCIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0NYWD0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0NYWD1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYPSIkbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYIC1EUElDIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0NYWCBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFhcIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFg9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgotICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCi0gICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWD15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19DWFgiID4mNgotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0NYWCIgPSB4eWVzOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWD0KLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjEzNzI0OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTM3Mjg6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID4mNgotCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFgiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNgotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci0KLSAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBhaXhbNC05XSopCi0gICAgIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gd2UgZG9uJ3Qgd2FudCB0aGUgIi1DIiBvcHRpb24uCi0gICAgIyAtQyBtZWFucyBkZW1hbmdsZSB0byBBSVggbm0sIGJ1dCBtZWFucyBkb24ndCBkZW1hbmdsZSB3aXRoIEdOVSBubQotICAgIGlmICROTSAtViAyPiYxIHwgZ3JlcCAnR05VJyA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAtQnBnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJDIgPT0gIlQiKSB8fCAoXCQyID09ICJEIikgfHwgKFwkMiA9PSAiQiIpKSAmJiAoc3Vic3RyKFwkMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQzIH0gfSdcJycgfCBzb3J0IC11ID4gJGV4cG9ydF9zeW1ib2xzJwotICAgIGVsc2UKLSAgICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYPSckTk0gLUJDcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICAgZmkKLSAgICA7OwotICBwdzMyKikKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWD0iJGx0ZGxsX2NtZHMiCi0gIDs7Ci0gIGN5Z3dpbiogfCBtaW5ndyopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvOy9eLipbIF1fX25tX18vcy9eLipbIF1fX25tX19cKFteIF0qXClbIF1bXiBdKi9cMSBEQVRBLzsvXklbIF0vZDsvXltBSVRXXVsgXS9zLy4qWyBdLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gIDs7Ci0gICopCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFg9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAnXCcncy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKLSAgOzsKLSAgZXNhYwotICBleGNsdWRlX2V4cHN5bXNfQ1hYPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfQ1hYIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfQ1hYIiA+JjYKLXRlc3QgIiRsZF9zaGxpYnNfQ1hYIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19DWFggaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNgotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9DWFgKLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfQ1hYCi0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWAotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19DWFg9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19DWFggMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHNfQ1hYIDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgICAgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfQ1hYPW5vCi0gICAgICAgIGVsc2UKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWD15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYPSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWCIgPiY2Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeFs0LTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gICAgICA7OwotICAgIG1pbmd3KikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwotICAgIDs7Ci0gIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OwotCi1kYXJ3aW4qIHwgcmhhcHNvZHkqKQotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKLSAgdmVyc2lvbl90eXBlPWRhcndpbgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3ZlcnN1ZmZpeH0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSRzaGFyZWRfZXh0JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0JwotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIHNobGlicGF0aF92YXI9RFlMRF9MSUJSQVJZX1BBVEgKLSAgc2hyZXh0X2NtZHM9J2B0ZXN0IC4kbW9kdWxlID0gLnllcyAmJiBlY2hvIC5zbyB8fCBlY2hvIC5keWxpYmAnCi0KLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCi0gIDs7Ci0KLWRndXgqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLWZyZWVic2QxKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotZnJlZWJzZCogfCBkcmFnb25mbHkqKQotICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3Ci0gICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgotICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgotICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAotICBlbHNlCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGZyZWVic2RbMTIzXSopIG9iamZvcm1hdD1hb3V0IDs7Ci0gICAgKikgb2JqZm9ybWF0PWVsZiA7OwotICAgIGVzYWMKLSAgZmkKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtJG9iamZvcm1hdAotICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KLSAgICBmcmVlYnNkLWVsZiopCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgIG5lZWRfdmVyc2lvbj1ubwotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIGZyZWVic2QtKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICAgICAgbmVlZF92ZXJzaW9uPXllcwotICAgICAgOzsKLSAgZXNhYwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBjYXNlICRob3N0X29zIGluCi0gIGZyZWVic2QyKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzAxXSogfCBmcmVlYnNkZWxmMy5bMDFdKikKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIDs7Ci0gIGZyZWVic2QzLlsyLTldKiB8IGZyZWVic2RlbGYzLlsyLTldKiB8IFwKLSAgZnJlZWJzZDQuWzAtNV0gfCBmcmVlYnNkZWxmNC5bMC01XSB8IGZyZWVic2Q0LjEuMSB8IGZyZWVic2RlbGY0LjEuMSkKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgKikgIyBmcm9tIDQuNiBvbiwgYW5kIERyYWdvbkZseQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZXNhYwotICA7OwotCi1nbnUqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHttYWpvcn0gJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICMgR2l2ZSBhIHNvbmFtZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYWpvciB2ZXJzaW9uIHNvIHRoYXQgZGxkLnNsIHJlZnVzZXMgdG8KLSAgIyBsaW5rIGFnYWluc3Qgb3RoZXIgdmVyc2lvbnMuCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGNhc2UgJGhvc3RfY3B1IGluCi0gIGlhNjQqKQotICAgIHNocmV4dF9jbWRzPScuc28nCi0gICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc28iCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBpZiB0ZXN0ICJYJEhQVVhfSUE2NF9NT0RFIiA9IFgzMjsgdGhlbgotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliIgotICAgIGVsc2UKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDY0IC91c3IvbG9jYWwvbGliL2hwdXg2NCIKLSAgICBmaQotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLSAgICA7OwotICAgaHBwYSo2NCopCi0gICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEggIyBIb3cgc2hvdWxkIHdlIGhhbmRsZSBTSExJQl9QQVRICi0gICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvcGEyMF82NCAvdXNyL2Njcy9saWIvcGEyMF82NCIKLSAgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgICA7OwotICAgKikKLSAgICBzaHJleHRfY21kcz0nLnNsJwotICAgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkbGQuc2wiCi0gICAgc2hsaWJwYXRoX3Zhcj1TSExJQl9QQVRICi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vICMgK3MgaXMgcmVxdWlyZWQgdG8gZW5hYmxlIFNITElCX1BBVEgKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIDs7Ci0gIGVzYWMKLSAgIyBIUC1VWCBydW5zICpyZWFsbHkqIHNsb3dseSB1bmxlc3Mgc2hhcmVkIGxpYnJhcmllcyBhcmUgbW9kZSA1NTUuCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDU1NSAkbGliJwotICA7OwotCi1pbnRlcml4WzMtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgY2FzZSAkaG9zdF9vcyBpbgotICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKLSAgICAqKQotCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KLQkJdmVyc2lvbl90eXBlPWxpbnV4Ci0JZWxzZQotCQl2ZXJzaW9uX3R5cGU9aXJpeAotCWZpIDs7Ci0gIGVzYWMKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgaXJpeDUqIHwgbm9uc3RvcHV4KikKLSAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9Ci0gICAgOzsKLSAgKikKLSAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECi0gICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKLSAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKLSAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQotICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7Ci0gICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCi0gICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OwotICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OwotICAgIGVzYWMKLSAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgOzsKLQotIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgotbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgotbGludXgqIHwgaypic2QqLWdudSkKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1uICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAjIFRoaXMgaW1wbGllcyBubyBmYXN0X2luc3RhbGwsIHdoaWNoIGlzIHVuYWNjZXB0YWJsZS4KLSAgIyBTb21lIHJld29yayB3aWxsIGJlIG5lZWRlZCB0byBhbGxvdyBmb3IgZmFzdF9pbnN0YWxsCi0gICMgYmVmb3JlIHRoaXMgY2FuIGJlIGVuYWJsZWQuCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLQotICAjIEFwcGVuZCBsZC5zby5jb25mIGNvbnRlbnRzIHRvIHRoZSBzZWFyY2ggcGF0aAotICBpZiB0ZXN0IC1mIC9ldGMvbGQuc28uY29uZjsgdGhlbgotICAgIGx0X2xkX2V4dHJhPWBhd2sgJy9eaW5jbHVkZSAvIHsgc3lzdGVtKHNwcmludGYoImNkIC9ldGM7IGNhdCAlcyAyPi9kZXYvbnVsbCIsIFwkMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXCQwOyBza2lwID0gMDsgfScgPCAvZXRjL2xkLnNvLmNvbmYgfCAkU0VEIC1lICdzLyMuKi8vOy9eWyAJXSpod2NhcFsgCV0vZDtzL1s6LAldLyAvZztzLz1bXj1dKiQvLztzLz1bXj0gXSogLyAvZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKLSAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCi0gIGZpCi0KLSAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCi0gICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKLSAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCi0gICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCi0gICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQotICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KLSAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKLSAgOzsKLQotbmV0YnNkKikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIChhLm91dCkgbGQuc28nCi0gIGVsc2UKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZHluYW1pY19saW5rZXI9J05ldEJTRCBsZC5lbGZfc28nCi0gIGZpCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1uZXdzb3M2KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotbnRvLXFueCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIDs7Ci0KLW9wZW5ic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgIyBTb21lIG9sZGVyIHZlcnNpb25zIG9mIE9wZW5CU0QgKDMuMyBhdCBsZWFzdCkgKmRvKiBuZWVkIHZlcnNpb25lZCBsaWJzLgotICBjYXNlICRob3N0X29zIGluCi0gICAgb3BlbmJzZDMuMyB8IG9wZW5ic2QzLjMuKikgbmVlZF92ZXJzaW9uPXllcyA7OwotICAgICopICAgICAgICAgICAgICAgICAgICAgICAgIG5lZWRfdmVyc2lvbj1ubyAgOzsKLSAgZXNhYwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBvcGVuYnNkMi5bODldIHwgb3BlbmJzZDIuWzg5XS4qKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotCTs7Ci0gICAgICAqKQotCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQk7OwotICAgICAgZXNhYwotICBlbHNlCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBmaQotICA7OwotCi1vczIqKQotICBsaWJuYW1lX3NwZWM9JyRuYW1lJwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCi0gIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKLSAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICi0gIDs7Ci0KLW9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgdmVyc2lvbl90eXBlPW9zZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLSAgOzsKLQotcmRvcyopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci0KLXNvbGFyaXMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCi0gIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCi0gIDs7Ci0KLXN1bm9zNCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JwotICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgZmkKLSAgbmVlZF92ZXJzaW9uPXllcwotICA7OwotCi1zeXN2NCB8IHN5c3Y0LjMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0gICAgc25pKQotICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYz0nJHt3bH0tQmxhcmdlZHluc3ltJwotICAgICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICAgIDs7Ci0gICAgc2llbWVucykKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgOzsKLSAgICBtb3Rvcm9sYSkKLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL2xpYiAvdXNyL2xpYiAvdXNyL2Njcy9saWInCi0gICAgICA7OwotICBlc2FjCi0gIDs7Ci0KLXN5c3Y0Kk1QKikKLSAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotICAgIHZlcnNpb25fdHlwZT1saW51eAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3InCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZmkKLSAgOzsKLQotc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCi0gIHZlcnNpb25fdHlwZT1mcmVlYnNkLWVsZgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgZWxzZQotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzY28zLjJ2NSopCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyAvbGliIgotCTs7Ci0gICAgZXNhYwotICBmaQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9saWInCi0gIDs7Ci0KLXV0czQqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIDs7Ci0KLSopCi0gIGR5bmFtaWNfbGlua2VyPW5vCi0gIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkZHluYW1pY19saW5rZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGR5bmFtaWNfbGlua2VyIiA+JjYKLXRlc3QgIiRkeW5hbWljX2xpbmtlciIgPSBubyAmJiBjYW5fYnVpbGRfc2hhcmVkPW5vCi0KLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKLWlmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLWZpCi0KLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCi0KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSJQQVRIICRzaGxpYnBhdGhfdmFyICRydW5wYXRoX3ZhciIKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsgR0NDX0VYRUNfUFJFRklYIENPTVBJTEVSX1BBVEggTElCUkFSWV9QQVRIIgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zLi4uICRFQ0hPX0MiID4mNgotaGFyZGNvZGVfYWN0aW9uX0NYWD0KLWlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0NYWCIgfHwgXAotICAgdGVzdCAtbiAiJHJ1bnBhdGhfdmFyX0NYWCIgfHwgXAotICAgdGVzdCAiWCRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYIiA9ICJYeWVzIiA7IHRoZW4KLQotICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RhbnQgZGlyZWN0b3JpZXMuCi0gIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3RfQ1hYIiAhPSBubyAmJgotICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCi0gICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKLSAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQotICAgICAjIyB0ZXN0ICIkX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCBDWFgpIiAhPSBubyAmJgotICAgICB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTF9DWFgiICE9IG5vOyB0aGVuCi0gICAgIyBMaW5raW5nIGFsd2F5cyBoYXJkY29kZXMgdGhlIHRlbXBvcmFyeSBsaWJyYXJ5IGRpcmVjdG9yeS4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPXJlbGluawotICBlbHNlCi0gICAgIyBXZSBjYW4gbGluayB3aXRob3V0IGhhcmRjb2RpbmcsIGFuZCB3ZSBjYW4gaGFyZGNvZGUgbm9uZXhpc3RpbmcgZGlycy4KLSAgICBoYXJkY29kZV9hY3Rpb25fQ1hYPWltbWVkaWF0ZQotICBmaQotZWxzZQotICAjIFdlIGNhbm5vdCBoYXJkY29kZSBhbnl0aGluZywgb3IgZWxzZSB3ZSBjYW4gb25seSBoYXJkY29kZSBleGlzdGluZwotICAjIGRpcmVjdG9yaWVzLgotICBoYXJkY29kZV9hY3Rpb25fQ1hYPXVuc3VwcG9ydGVkCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNQotZWNobyAiJHtFQ0hPX1R9JGhhcmRjb2RlX2FjdGlvbl9DWFgiID4mNgotCi1pZiB0ZXN0ICIkaGFyZGNvZGVfYWN0aW9uX0NYWCIgPSByZWxpbms7IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3Qgc3VwcG9ydGVkCi0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8KLWVsaWYgdGVzdCAiJHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aCIgPSB5ZXMgfHwKLSAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0gbm87IHRoZW4KLSAgIyBGYXN0IGluc3RhbGxhdGlvbiBpcyBub3QgbmVjZXNzYXJ5Ci0gIGVuYWJsZV9mYXN0X2luc3RhbGw9bmVlZGxlc3MKLWZpCi0KLQotIyBUaGUgZWxzZSBjbGF1c2Ugc2hvdWxkIG9ubHkgZmlyZSB3aGVuIGJvb3RzdHJhcHBpbmcgdGhlCi0jIGxpYnRvb2wgZGlzdHJpYnV0aW9uLCBvdGhlcndpc2UgeW91IGZvcmdvdCB0byBzaGlwIGx0bWFpbi5zaAotIyB3aXRoIHlvdXIgcGFja2FnZSwgYW5kIHlvdSB3aWxsIGdldCBjb21wbGFpbnRzIHRoYXQgdGhlcmUgYXJlCi0jIG5vIHJ1bGVzIHRvIGdlbmVyYXRlIGx0bWFpbi5zaC4KLWlmIHRlc3QgLWYgIiRsdG1haW4iOyB0aGVuCi0gICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIgY29tbWFuZHMgdGhyb3VnaAotICAjIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMuCi0gIGlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgOyB0aGVuCi0gICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKLSAgZmkKLSAgIyBOb3cgcXVvdGUgYWxsIHRoZSB0aGluZ3MgdGhhdCBtYXkgY29udGFpbiBtZXRhY2hhcmFjdGVycyB3aGlsZSBiZWluZwotICAjIGNhcmVmdWwgbm90IHRvIG92ZXJxdW90ZSB0aGUgQUNfU1VCU1RlZCB2YWx1ZXMuICBXZSB0YWtlIGNvcGllcyBvZiB0aGUKLSAgIyB2YXJpYWJsZXMgYW5kIHF1b3RlIHRoZSBjb3BpZXMgZm9yIGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0LgotICBmb3IgdmFyIGluIGVjaG8gb2xkX0NDIG9sZF9DRkxBR1MgQVIgQVJfRkxBR1MgRUdSRVAgUkFOTElCIExOX1MgTFRDQyBMVENGTEFHUyBOTSBcCi0gICAgU0VEIFNIRUxMIFNUUklQIFwKLSAgICBsaWJuYW1lX3NwZWMgbGlicmFyeV9uYW1lc19zcGVjIHNvbmFtZV9zcGVjIGV4dHJhY3RfZXhwc3ltc19jbWRzIFwKLSAgICBvbGRfc3RyaXBsaWIgc3RyaXBsaWIgZmlsZV9tYWdpY19jbWQgZmluaXNoX2NtZHMgZmluaXNoX2V2YWwgXAotICAgIGRlcGxpYnNfY2hlY2tfbWV0aG9kIHJlbG9hZF9mbGFnIHJlbG9hZF9jbWRzIG5lZWRfbG9ja3MgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wgXAotICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgXAotICAgIGNvbXBpbGVyX0NYWCBcCi0gICAgQ0NfQ1hYIFwKLSAgICBMRF9DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfQ1hYIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19DWFggXAotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0NYWCBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfQ1hYIFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYIFwKLSAgICB0aHJlYWRfc2FmZV9mbGFnX3NwZWNfQ1hYIFwKLSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19DWFggXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfQ1hYIFwKLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0NYWCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFggXAotICAgIHByZWRlcF9vYmplY3RzX0NYWCBcCi0gICAgcG9zdGRlcF9vYmplY3RzX0NYWCBcCi0gICAgcHJlZGVwc19DWFggXAotICAgIHBvc3RkZXBzX0NYWCBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWCBcCi0gICAgY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX0NYWCBcCi0gICAgYXJjaGl2ZV9jbWRzX0NYWCBcCi0gICAgYXJjaGl2ZV9leHBzeW1fY21kc19DWFggXAotICAgIHBvc3RpbnN0YWxsX2NtZHNfQ1hYIFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfQ1hYIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggXAotICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0NYWCBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfQ1hYIFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0NYWCBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19DWFggXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYIFwKLSAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWCBcCi0gICAgaGFyZGNvZGVfYXV0b21hdGljX0NYWCBcCi0gICAgbW9kdWxlX2NtZHNfQ1hYIFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfQ1hYIFwKLSAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19DWFggXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfQ1hYIFwKLSAgICBleGNsdWRlX2V4cHN5bXNfQ1hYIFwKLSAgICBpbmNsdWRlX2V4cHN5bXNfQ1hYOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19DWFggfCBcCi0gICAgb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFggfCBcCi0gICAgYXJjaGl2ZV9jbWRzX0NYWCB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0NYWCB8IFwKLSAgICBtb2R1bGVfY21kc19DWFggfCBcCi0gICAgbW9kdWxlX2V4cHN5bV9jbWRzX0NYWCB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19DWFggfCBcCi0gICAgZXhwb3J0X3N5bWJvbHNfY21kc19DWFggfCBcCi0gICAgZXh0cmFjdF9leHBzeW1zX2NtZHMgfCByZWxvYWRfY21kcyB8IGZpbmlzaF9jbWRzIHwgXAotICAgIHBvc3RpbnN0YWxsX2NtZHMgfCBwb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgfCBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyB8IHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjKQotICAgICAgIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJGRvdWJsZV9xdW90ZV9zdWJzdFwiIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIiAtZSBcIlwkZGVsYXlfdmFyaWFibGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRzZWRfcXVvdGVfc3Vic3RcIlxgXFxcIiIKLSAgICAgIDs7Ci0gICAgZXNhYwotICBkb25lCi0KLSAgY2FzZSAkbHRfZWNobyBpbgotICAqJ1wkMCAtLWZhbGxiYWNrLWVjaG8iJykKLSAgICBsdF9lY2hvPWAkZWNobyAiWCRsdF9lY2hvIiB8ICRYc2VkIC1lICdzL1xcXFxcXFwkMCAtLWZhbGxiYWNrLWVjaG8iJC8kMCAtLWZhbGxiYWNrLWVjaG8iLydgCi0gICAgOzsKLSAgZXNhYwotCi1jZmdmaWxlPSIkb2ZpbGUiCi0KLSAgY2F0IDw8X19FT0ZfXyA+PiAiJGNmZ2ZpbGUiCi0jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lCi0KLSMgTGlidG9vbCB3YXMgY29uZmlndXJlZCBvbiBob3N0IGAoaG9zdG5hbWUgfHwgdW5hbWUgLW4pIDI+L2Rldi9udWxsIHwgc2VkIDFxYDoKLQotIyBTaGVsbCB0byB1c2Ugd2hlbiBpbnZva2luZyBzaGVsbCBzY3JpcHRzLgotU0hFTEw9JGx0X1NIRUxMCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbGlicz0kZW5hYmxlX3NoYXJlZAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuCi1idWlsZF9vbGRfbGlicz0kZW5hYmxlX3N0YXRpYwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX25lZWRfbGM9JGFyY2hpdmVfY21kc19uZWVkX2xjX0NYWAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19DWFgKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24uCi1mYXN0X2luc3RhbGw9JGVuYWJsZV9mYXN0X2luc3RhbGwKLQotIyBUaGUgaG9zdCBzeXN0ZW0uCi1ob3N0X2FsaWFzPSRob3N0X2FsaWFzCi1ob3N0PSRob3N0Ci1ob3N0X29zPSRob3N0X29zCi0KLSMgVGhlIGJ1aWxkIHN5c3RlbS4KLWJ1aWxkX2FsaWFzPSRidWlsZF9hbGlhcwotYnVpbGQ9JGJ1aWxkCi1idWlsZF9vcz0kYnVpbGRfb3MKLQotIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoZXMuCi1lY2hvPSRsdF9lY2hvCi0KLSMgVGhlIGFyY2hpdmVyLgotQVI9JGx0X0FSCi1BUl9GTEFHUz0kbHRfQVJfRkxBR1MKLQotIyBBIEMgY29tcGlsZXIuCi1MVENDPSRsdF9MVENDCi0KLSMgTFRDQyBjb21waWxlciBmbGFncy4KLUxUQ0ZMQUdTPSRsdF9MVENGTEFHUwotCi0jIEEgbGFuZ3VhZ2Utc3BlY2lmaWMgY29tcGlsZXIuCi1DQz0kbHRfY29tcGlsZXJfQ1hYCi0KLSMgSXMgdGhlIGNvbXBpbGVyIHRoZSBHTlUgQyBjb21waWxlcj8KLXdpdGhfZ2NjPSRHQ0NfQ1hYCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX0NYWAotCi0jIFdoZXRoZXIgd2UgbmVlZCBoYXJkIG9yIHNvZnQgbGlua3MuCi1MTl9TPSRsdF9MTl9TCi0KLSMgQSBCU0QtY29tcGF0aWJsZSBubSBwcm9ncmFtLgotTk09JGx0X05NCi0KLSMgQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW0KLVNUUklQPSRsdF9TVFJJUAotCi0jIFVzZWQgdG8gZXhhbWluZSBsaWJyYXJpZXMgd2hlbiBmaWxlX21hZ2ljX2NtZCBiZWdpbnMgImZpbGUiCi1NQUdJQ19DTUQ9JE1BR0lDX0NNRAotCi0jIFVzZWQgb24gY3lnd2luOiBETEwgY3JlYXRpb24gcHJvZ3JhbS4KLURMTFRPT0w9IiRETExUT09MIgotCi0jIFVzZWQgb24gY3lnd2luOiBvYmplY3QgZHVtcGVyLgotT0JKRFVNUD0iJE9CSkRVTVAiCi0KLSMgVXNlZCBvbiBjeWd3aW46IGFzc2VtYmxlci4KLUFTPSIkQVMiCi0KLSMgVGhlIG5hbWUgb2YgdGhlIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIHRlbXBvcmFyeSBsaWJ0b29sIGZpbGVzLgotb2JqZGlyPSRvYmpkaXIKLQotIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgotcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCi1yZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKLQotIyBIb3cgdG8gcGFzcyBhIGxpbmtlciBmbGFnIHRocm91Z2ggdGhlIGNvbXBpbGVyLgotd2w9JGx0X2x0X3Byb2dfY29tcGlsZXJfd2xfQ1hYCi0KLSMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgotb2JqZXh0PSIkYWNfb2JqZXh0IgotCi0jIE9sZCBhcmNoaXZlIHN1ZmZpeCAobm9ybWFsbHkgImEiKS4KLWxpYmV4dD0iJGxpYmV4dCIKLQotIyBTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKS4KLXNocmV4dF9jbWRzPSckc2hyZXh0X2NtZHMnCi0KLSMgRXhlY3V0YWJsZSBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIiIpLgotZXhlZXh0PSIkZXhlZXh0IgotCi0jIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KLXBpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpY19DWFgKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX0NYWAotCi0jIE11c3Qgd2UgbG9jayBmaWxlcyB3aGVuIGRvaW5nIGNvbXBpbGF0aW9uPwotbmVlZF9sb2Nrcz0kbHRfbmVlZF9sb2NrcwotCi0jIERvIHdlIG5lZWQgdGhlIGxpYiBwcmVmaXggZm9yIG1vZHVsZXM/Ci1uZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAotCi0jIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/Ci1uZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgotCi0jIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCi0KLSMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgotCi0jIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KLWRsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYwotCi0jIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCi1saW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgotbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19DWFgKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfQ1hYCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzLgotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9JGx0X3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0NYWAotCi0jIENvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkLXNhZmUgb2JqZWN0cy4KLXRocmVhZF9zYWZlX2ZsYWdfc3BlYz0kbHRfdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0NYWAotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfQ1hYCi1vbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKLW9sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDcmVhdGUgYW4gb2xkLXN0eWxlIGFyY2hpdmUgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kc19DWFgKLQotIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHNfQ1hYCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfQ1hYCi1hcmNoaXZlX2V4cHN5bV9jbWRzPSRsdF9hcmNoaXZlX2V4cHN5bV9jbWRzX0NYWAotcG9zdGluc3RhbGxfY21kcz0kbHRfcG9zdGluc3RhbGxfY21kcwotcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgbG9hZGFibGUgbW9kdWxlIChhc3N1bWVkIHNhbWUgYXMgYWJvdmUgaWYgZW1wdHkpCi1tb2R1bGVfY21kcz0kbHRfbW9kdWxlX2NtZHNfQ1hYCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19DWFgKLQotIyBDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXMuCi1vbGRfc3RyaXBsaWI9JGx0X29sZF9zdHJpcGxpYgotc3RyaXBsaWI9JGx0X3N0cmlwbGliCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBfb2JqZWN0cz0kbHRfcHJlZGVwX29iamVjdHNfQ1hYCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGFmdGVyIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXBvc3RkZXBfb2JqZWN0cz0kbHRfcG9zdGRlcF9vYmplY3RzX0NYWAotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19DWFgKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcHM9JGx0X3Bvc3RkZXBzX0NYWAotCi0jIFRoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQKLSMgbGlicmFyeQotY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX2RpcnNfQ1hYCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX0NYWAotCi0jIE1ldGhvZCB0byBjaGVjayB3aGV0aGVyIGRlcGVuZGVudCBsaWJyYXJpZXMgYXJlIHNoYXJlZCBvYmplY3RzLgotZGVwbGlic19jaGVja19tZXRob2Q9JGx0X2RlcGxpYnNfY2hlY2tfbWV0aG9kCi0KLSMgQ29tbWFuZCB0byB1c2Ugd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9PSBmaWxlX21hZ2ljLgotZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCi0KLSMgRmxhZyB0aGF0IGFsbG93cyBzaGFyZWQgbGlicmFyaWVzIHdpdGggdW5kZWZpbmVkIHN5bWJvbHMgdG8gYmUgYnVpbHQuCi1hbGxvd191bmRlZmluZWRfZmxhZz0kbHRfYWxsb3dfdW5kZWZpbmVkX2ZsYWdfQ1hYCi0KLSMgRmxhZyB0aGF0IGZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KLW5vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZ19DWFgKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX0NYWAotCi0jIFdoZXRoZXIgd2Ugc2hvdWxkIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBsaWJyYXJpZXMuCi1oYXJkY29kZV9pbnRvX2xpYnM9JGhhcmRjb2RlX2ludG9fbGlicwotCi0jIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KLSMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfQ1hYCi0KLSMgSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50bwotIyBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4gVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzCi0jIG5vdCBleGlzdC4KLWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQ9JGx0X2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfQ1hYCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgRElSL2xpYk5BTUUke3NoYXJlZF9leHR9IGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX2RpcmVjdD0kaGFyZGNvZGVfZGlyZWN0X0NYWAotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTF9DWFgKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfQ1hYCi0KLSMgU2V0IHRvIHllcyBpZiBidWlsZGluZyBhIHNoYXJlZCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgaGFyZGNvZGVzIERJUiBpbnRvIHRoZSBsaWJyYXJ5Ci0jIGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZCBhZ2FpbnN0IGl0LgotaGFyZGNvZGVfYXV0b21hdGljPSRoYXJkY29kZV9hdXRvbWF0aWNfQ1hYCi0KLSMgVmFyaWFibGVzIHdob3NlIHZhbHVlcyBzaG91bGQgYmUgc2F2ZWQgaW4gbGlidG9vbCB3cmFwcGVyIHNjcmlwdHMgYW5kCi0jIHJlc3RvcmVkIGF0IHJlbGluayB0aW1lLgotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayIKLQotIyBXaGV0aGVyIGxpYnRvb2wgbXVzdCBsaW5rIGEgcHJvZ3JhbSBhZ2FpbnN0IGFsbCBpdHMgZGVwZW5kZW5jeSBsaWJyYXJpZXMuCi1saW5rX2FsbF9kZXBsaWJzPSRsaW5rX2FsbF9kZXBsaWJzX0NYWAotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfQ1hYCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGxpc3QgZXhwb3J0ZWQgc3ltYm9scy4KLWV4cG9ydF9zeW1ib2xzX2NtZHM9JGx0X2V4cG9ydF9zeW1ib2xzX2NtZHNfQ1hYCi0KLSMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KLWV4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcwotCi0jIFN5bWJvbHMgdGhhdCBzaG91bGQgbm90IGJlIGxpc3RlZCBpbiB0aGUgcHJlbG9hZGVkIHN5bWJvbHMuCi1leGNsdWRlX2V4cHN5bXM9JGx0X2V4Y2x1ZGVfZXhwc3ltc19DWFgKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19DWFgKLQotIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotX19FT0ZfXwotCi0KLWVsc2UKLSAgIyBJZiB0aGVyZSBpcyBubyBNYWtlZmlsZSB5ZXQsIHdlIHJlbHkgb24gYSBtYWtlIHJ1bGUgdG8gZXhlY3V0ZQotICAjIGBjb25maWcuc3RhdHVzIC0tcmVjaGVjaycgdG8gcmVydW4gdGhlc2UgdGVzdHMgYW5kIGNyZWF0ZSB0aGUKLSAgIyBsaWJ0b29sIHNjcmlwdCB0aGVuLgotICBsdG1haW5faW49YGVjaG8gJGx0bWFpbiB8IHNlZCAtZSAncy9cLnNoJC8uaW4vJ2AKLSAgaWYgdGVzdCAtZiAiJGx0bWFpbl9pbiI7IHRoZW4KLSAgICB0ZXN0IC1mIE1ha2VmaWxlICYmIG1ha2UgIiRsdG1haW4iCi0gIGZpCi1maQotCi0KLWFjX2V4dD1jCi1hY19jcHA9JyRDUFAgJENQUEZMQUdTJwotYWNfY29tcGlsZT0nJENDIC1jICRDRkxBR1MgJENQUEZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJENDIC1vIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAkQ0ZMQUdTICRDUFBGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfY19jb21waWxlcl9nbnUKLQotQ0M9JGx0X3NhdmVfQ0MKLUxEQ1hYPSRMRAotTEQ9JGx0X3NhdmVfTEQKLUdDQz0kbHRfc2F2ZV9HQ0MKLXdpdGhfZ251X2xkY3h4PSR3aXRoX2dudV9sZAotd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKLWx0X2N2X3BhdGhfTERDWFg9JGx0X2N2X3BhdGhfTEQKLWx0X2N2X3BhdGhfTEQ9JGx0X3NhdmVfcGF0aF9MRAotbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCi1sdF9jdl9wcm9nX2dudV9sZD0kbHRfc2F2ZV93aXRoX2dudV9sZAotCi0JZWxzZQotCSAgdGFnbmFtZT0iIgotCWZpCi0JOzsKLQotICAgICAgRjc3KQotCWlmIHRlc3QgLW4gIiRGNzciICYmIHRlc3QgIlgkRjc3IiAhPSAiWG5vIjsgdGhlbgotCi1hY19leHQ9ZgotYWNfY29tcGlsZT0nJEY3NyAtYyAkRkZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgPiY1JwotYWNfbGluaz0nJEY3NyAtbyBjb25mdGVzdCRhY19leGVleHQgJEZGTEFHUyAkTERGTEFHUyBjb25mdGVzdC4kYWNfZXh0ICRMSUJTID4mNScKLWFjX2NvbXBpbGVyX2dudT0kYWNfY3ZfZjc3X2NvbXBpbGVyX2dudQotCi0KLWFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PQotYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz1ubwotYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9Ci1leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PQotaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Ci1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PQotaGFyZGNvZGVfbWludXNfTF9GNzc9bm8KLWhhcmRjb2RlX2F1dG9tYXRpY19GNzc9bm8KLW1vZHVsZV9jbWRzX0Y3Nz0KLW1vZHVsZV9leHBzeW1fY21kc19GNzc9Ci1saW5rX2FsbF9kZXBsaWJzX0Y3Nz11bmtub3duCi1vbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0kb2xkX2FyY2hpdmVfY21kcwotbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PQotd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQotZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9bm8KLQotIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIGY3NyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9ZgotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgZjc3IHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfRjc3PSRvYmpleHQKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGNvbXBpbGUgdGVzdHMKLWx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iXAotICAgICAgc3Vicm91dGluZSB0Ci0gICAgICByZXR1cm4KLSAgICAgIGVuZAotIgotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSJcCi0gICAgICBwcm9ncmFtIHQKLSAgICAgIGVuZAotIgotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSAtciBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtGNzctImY3NyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX0Y3Nz0kQ0MKLWZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRjYW5fYnVpbGRfc2hhcmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjYW5fYnVpbGRfc2hhcmVkIiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcy4uLiAkRUNIT19DIiA+JjYKLXRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubwotCi0jIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKLSMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgotICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSckUkFOTElCICRsaWInCi0gIGZpCi0gIDs7Ci1haXhbNC05XSopCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubwotICBmaQotICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGVuYWJsZV9zaGFyZWQiID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLi4uICRFQ0hPX0MiID4mNgotIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCi10ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgfHwgZW5hYmxlX3N0YXRpYz15ZXMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRlbmFibGVfc3RhdGljIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRlbmFibGVfc3RhdGljIiA+JjYKLQotR0NDX0Y3Nz0iJEc3NyIKLUxEX0Y3Nz0iJExEIgotCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2Ci0KLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCi0KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgIyBGSVhNRTogd2UgbmVlZCBhdCBsZWFzdCA2ODAyMCBjb2RlIHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dAotICAgICAgIyBhZGRpbmcgdGhlIGAtbTY4MDIwJyBmbGFnIHRvIEdDQyBwcmV2ZW50cyBidWlsZGluZyBhbnl0aGluZyBiZXR0ZXIsCi0gICAgICAjIGxpa2UgYC1tNjgwNDAnLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctbTY4MDIwIC1yZXNpZGVudDMyIC1tYWx3YXlzLXJlc3RvcmUtYTQnCi0gICAgICA7OwotCi0gICAgYmVvcyogfCBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqIHwgb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIHRoZXNlIE9TZXMuCi0gICAgICA7OwotCi0gICAgbWluZ3cqIHwgY3lnd2luKiB8IHB3MzIqIHwgb3MyKikKLSAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKLSAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCi0gICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCi0gICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctRERMTF9FWFBPUlQnCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KLSAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZuby1jb21tb24nCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCi0gICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KLSAgICAgIDs7Ci0KLSAgICBtc2Rvc2RqZ3BwKikKLSAgICAgICMgSnVzdCBiZWNhdXNlIHdlIHVzZSBHQ0MgZG9lc24ndCBtZWFuIHdlIHN1ZGRlbmx5IGdldCBzaGFyZWQgbGlicmFyaWVzCi0gICAgICAjIG9uIHN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHRoZW0uCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfRjc3PW5vCi0gICAgICBlbmFibGVfc2hhcmVkPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0tS2NvbmZvcm1fcGljCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIElBNjQgSFAtVVggYW5kIDY0LWJpdCBIUC1VWCwgYnV0Ci0gICAgICAjIG5vdCBmb3IgUEEgSFAtVVguCi0gICAgICBjYXNlICRob3N0X2NwdSBpbgotICAgICAgaHBwYSo2NCp8aWE2NCopCi0JIyArWiB0aGUgZGVmYXVsdAotCTs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZQSUMnCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctZlBJQycKLSAgICAgIDs7Ci0gICAgZXNhYwotICBlbHNlCi0gICAgIyBQT1JUTUUgQ2hlY2sgZm9yIGZsYWcgdG8gcGFzcyBsaW5rZXIgZmxhZ3MgdGhyb3VnaCB0aGUgc3lzdGVtIGNvbXBpbGVyLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotCSMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGVsc2UKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1ibnNvIC1iSTovbGliL3N5c2NhbGxzLmV4cCcKLSAgICAgIGZpCi0gICAgICA7OwotICAgICAgZGFyd2luKikKLSAgICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgICAjIENvbW1vbiBzeW1ib2xzIG5vdCBhbGxvd2VkIGluIE1IX0RZTElCIGZpbGVzCi0gICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgIHhsYyopCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1xbm9jb21tb24nCi0gICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICAgIDs7Ci0gICAgICAgZXNhYwotICAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLURETExfRVhQT1JUJwotICAgICAgOzsKLQotICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PScrWicKLQk7OwotICAgICAgZXNhYwotICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/Ci0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJwotICAgICAgOzsKLQotICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIGxpbnV4KiB8IGsqYnNkKi1nbnUpCi0gICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgaWNjKiB8IGVjYyopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1zdGF0aWMnCi0gICAgICAgIDs7Ci0gICAgICBwZ2NjKiB8IHBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikKLSAgICAgICAgIyBQb3J0bGFuZCBHcm91cCBjb21waWxlcnMgKCpub3QqIHRoZSBQZW50aXVtIGdjYyBjb21waWxlciwKLQkjIHdoaWNoIGxvb2tzIHRvIGJlIGEgZGVhZCBwcm9qZWN0KQotCWx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotCWx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLWZwaWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIGNjYyopCi0gICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgICAjIEFsbCBBbHBoYSBjb2RlIGlzIFBJQy4KLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgICAgOzsKLSAgICAgICopCi0gICAgICAgIGNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQotCSAgIyBTdW4gQyA1LjkKLQkgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotCSAgbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1XbCwnCi0JICA7OwotCSpTdW5cIEYqKQotCSAgIyBTdW4gRm9ydHJhbiA4LjMgcGFzc2VzIGFsbCB1bnJlY29nbml6ZWQgZmxhZ3MgdG8gdGhlIGxpbmtlcgotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nJwotCSAgOzsKLQllc2FjCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIDs7Ci0KLSAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICByZG9zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLW5vbl9zaGFyZWQnCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBmNzcqIHwgZjkwKiB8IGY5NSopCi0JbHRfcHJvZ19jb21waWxlcl93bF9GNzc9Jy1Rb3B0aW9uIGxkICc7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCc7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVFvcHRpb24gbGQgJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3Nz0nLVdsLCcKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzc9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzc9Jy1LY29uZm9ybV9waWMnCi0JbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgdW5pY29zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfRjc3PSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHV0czQqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSctcGljJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3PSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgPiY2Ci0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLWlmIHRlc3QgLW4gIiRsdF9wcm9nX2NvbXBpbGVyX3BpY19GNzciOyB0aGVuCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyB3b3JrcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmICRjb21waWxlciBQSUMgZmxhZyAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IHdvcmtzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3PW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNTMwNzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNTMxMTogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3Nz15ZXMKLSAgICAgZmkKLSAgIGZpCi0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19GNzciID4mNgotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0Y3NyIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3Nz0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0Y3Nz1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfRjc3PSIkbHRfcHJvZ19jb21waWxlcl9waWNfRjc3IgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0Y3NyBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19GNzdcIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzc9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgotICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCi0gICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3Nz15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3PXllcwotICAgICBmaQotICAgZmkKLSAgICRybSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19GNzciID4mNgotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0Y3NyIgPSB4eWVzOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3Nz0KLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE1NDExOiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTU0MTU6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3PXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzciID4mNgotCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19GNzciID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNgotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci0KLSAgcnVucGF0aF92YXI9Ci0gIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0KLSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9bm8KLSAgYXJjaGl2ZV9jbWRzX0Y3Nz0KLSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9Ci0gIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PQotICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzc9Ci0gIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KLSAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0Y3Nz0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Ci0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfRjc3PQotICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0KLSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz1ubwotICBoYXJkY29kZV9taW51c19MX0Y3Nz1ubwotICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz11bnN1cHBvcnRlZAotICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz11bmtub3duCi0gIGhhcmRjb2RlX2F1dG9tYXRpY19GNzc9bm8KLSAgbW9kdWxlX2NtZHNfRjc3PQotICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PQotICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfRjc3PW5vCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3PSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKLSAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKLSAgaW5jbHVkZV9leHBzeW1zX0Y3Nz0KLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgotICBleGNsdWRlX2V4cHN5bXNfRjc3PSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCi0gICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAotICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90Ci0gICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgotICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgotICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgIGFyY2hpdmVfY21kcz0iJGFyY2hpdmVfY21kc35cJFJBTkxJQiBcJGxpYiIKKyAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKICAgICBmaQogICAgIDs7Ci0gIGludGVyaXgqKQotICAgICMgd2UganVzdCBob3BlL2Fzc3VtZSB0aGlzIGlzIGdjYyBhbmQgbm90IGM4OSAoPSBNU1ZDKyspCi0gICAgd2l0aF9nbnVfbGQ9eWVzCi0gICAgOzsKLSAgb3BlbmJzZCopCi0gICAgd2l0aF9nbnVfbGQ9bm8KLSAgICA7OwotICBlc2FjCiAKLSAgbGRfc2hsaWJzX0Y3Nz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5Ci0gICAgd2xhcmM9JyR7d2x9JwotCi0gICAgIyBTZXQgc29tZSBkZWZhdWx0cyBmb3IgR05VIGxkIHdpdGggc2hhcmVkIGxpYnJhcnkgc3VwcG9ydC4gVGhlc2UKLSAgICAjIGFyZSByZXNldCBsYXRlciBpZiBzaGFyZWQgbGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBQdXR0aW5nIHRoZW0KLSAgICAjIGhlcmUgYWxsb3dzIHRoZW0gdG8gYmUgb3ZlcnJpZGRlbiBpZiBuZWNlc3NhcnkuCi0gICAgcnVucGF0aF92YXI9TERfUlVOX1BBVEgKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCi0gICAgIyBhbmNpZW50IEdOVSBsZCBkaWRuJ3Qgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUgZXQuIGFsLgotICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCi0Jd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJwotICAgICAgZWxzZQotICAJd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PQorICBhaXhbNC05XSopCisgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KICAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXhbMy05XSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlsZF9zaGxpYnNfRjc3PW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBGNzcpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfRjc3PXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19GNzc9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlic19GNzc9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKLQlsZF9zaGxpYnNfRjc3PW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0Y3Nz1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19GNzc9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnNfRjc3IiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0Y3Nz15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MX0Y3Nz15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeFs0LTldKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3Nz0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19GNzc9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3RfRjc3PXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzc9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLSAgICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0iXCRDQyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyBgaWYgdGVzdCAieCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IiAhPSAieCI7IHRoZW4gZWNobyAiJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSI7IGVsc2UgOjsgZmlgICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzICRzaGFyZWRfZmxhZyIKLSAgICAgICBlbHNlCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1SICRsaWJkaXI6L3Vzci9saWI6L2xpYicKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0iLXogbm9kZWZzIgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzICR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30gJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMiCi0JZWxzZQotCSAjIERldGVybWluZSB0aGUgZGVmYXVsdCBsaWJwYXRoIGZyb20gdGhlIHZhbHVlIGVuY29kZWQgaW4gYW4gZW1wdHkgZXhlY3V0YWJsZS4KLQkgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0gICAgICBwcm9ncmFtIG1haW4KLQotICAgICAgZW5kCi1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Y3N193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotCi1sdF9haXhfbGlicGF0aF9zZWQ9JwotICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKLQkvXjAvIHsKLQkgICAgcy9eMCAgKlwoLipcKSQvXDEvCi0JICAgIHAKLQl9Ci0gICAgfScKLWFpeF9saWJwYXRoPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotIyBDaGVjayBmb3IgYSA2NC1iaXQgb2JqZWN0IGlmIHdlIGRpZG4ndCBmaW5kIGFueXRoaW5nLgotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbgotICBhaXhfbGlicGF0aD1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLWZpCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAteiAiJGFpeF9saWJwYXRoIjsgdGhlbiBhaXhfbGlicGF0aD0iL3Vzci9saWI6L2xpYiI7IGZpCi0KLQkgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAotCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgotCSAgbm9fdW5kZWZpbmVkX2ZsYWdfRjc3PScgJHt3bH0tYmVybm90b2snCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1iZXJvaycKLQkgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcwotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PSckY29udmVuaWVuY2UnCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9eWVzCi0JICAjIFRoaXMgaXMgc2ltaWxhciB0byBob3cgQUlYIHRyYWRpdGlvbmFsbHkgYnVpbGRzIGl0cyBzaGFyZWQgbGlicmFyaWVzLgotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLQlmaQotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICAjIHNlZSBjb21tZW50IGFib3V0IGRpZmZlcmVudCBzZW1hbnRpY3Mgb24gdGhlIEdOVSBsZCBzZWN0aW9uCi0gICAgICBsZF9zaGxpYnNfRjc3PW5vCi0gICAgICA7OwotCi0gICAgYnNkaVs0NV0qKQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0tcmR5bmFtaWMKLSAgICAgIDs7Ci0KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgICAjIFdoZW4gbm90IHVzaW5nIGdjYywgd2UgY3VycmVudGx5IGFzc3VtZSB0aGF0IHdlIGFyZSB1c2luZwotICAgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICAgICMgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYyBpcyBhY3R1YWxseSBtZWFuaW5nbGVzcywgYXMgdGhlcmUgaXMKLSAgICAgICMgbm8gc2VhcmNoIHBhdGggZm9yIERMTHMuCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nICcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz11bnN1cHBvcnRlZAotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KLSAgICAgIGxpYmV4dD1saWIKLSAgICAgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgotICAgICAgc2hyZXh0X2NtZHM9Ii5kbGwiCi0gICAgICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLW8gJGxpYiAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgYGVjaG8gIiRkZXBsaWJzIiB8ICRTRUQgLWUgJ1wnJ3MvIC1sYyQvLydcJydgIC1saW5rIC1kbGx+bGlua25hbWVzPScKLSAgICAgICMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCi0gICAgICBvbGRfYXJjaGl2ZV9Gcm9tX25ld19jbWRzX0Y3Nz0ndHJ1ZScKLSAgICAgICMgRklYTUU6IFNob3VsZCBsZXQgdGhlIHVzZXIgc3BlY2lmeSB0aGUgbGliIHByb2dyYW0uCi0gICAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3Nz0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJwotICAgICAgZml4X3NyY2ZpbGVfcGF0aF9GNzc9J2BjeWdwYXRoIC13ICIkc3JjZmlsZSJgJwotICAgICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzc9eWVzCi0gICAgICA7OwotCi0gICAgZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgcmhhcHNvZHkqIHwgZGFyd2luMS5bMDEyXSkKLSAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICA7OwotICAgICAgICopICMgRGFyd2luIDEuMyBvbgotICAgICAgICAgaWYgdGVzdCAteiAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gOyB0aGVuCi0gICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICBlbHNlCi0gICAgICAgICAgIGNhc2UgJHtNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVR9IGluCi0gICAgICAgICAgICAgMTAuWzAxMl0pCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAxMC4qKQotICAgICAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcKLSAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgIGVzYWMKLSAgICAgICAgIGZpCi0gICAgICAgICA7OwotICAgICAgZXNhYwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PW5vCi0gICAgICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3Nz0nJwotICAgICAgbGlua19hbGxfZGVwbGlic19GNzc9eWVzCi0gICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgOyB0aGVuCi0gICAgCW91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICBhcmNoaXZlX2NtZHNfRjc3PSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBtb2R1bGVfY21kc19GNzc9IlwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9InNlZCAncyxeLF8sJyA8IFwkZXhwb3J0X3N5bWJvbHMgPiBcJG91dHB1dF9vYmpkaXIvXCR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+XCRDQyAtZHluYW1pY2xpYiBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcgJHtfbHRfZGFyX3NpbmdsZV9tb2R9JHtfbHRfZGFyX2V4cG9ydF9zeW1zfSR7X2x0X2RzeW11dGlsfSIKLSAgICAgICAgbW9kdWxlX2V4cHN5bV9jbWRzX0Y3Nz0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgIGVsc2UKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICAgIHhsYyopCi0gICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZWNobycKLSAgICAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH1gZWNobyAkcnBhdGgvJHNvbmFtZWAgJHhsY3ZlcnN0cmluZycKLSAgICAgICAgIG1vZHVsZV9jbWRzX0Y3Nz0nJENDICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliIC1idW5kbGUgJGxpYm9ianMgJGRlcGxpYnMkY29tcGlsZXJfZmxhZ3MnCi0gICAgICAgICAgIyBEb24ndCBmaXggdGhpcyBieSB1c2luZyB0aGUgbGQgLWV4cG9ydGVkX3N5bWJvbHNfbGlzdCBmbGFnLCBpdCBkb2Vzbid0IGV4aXN0IGluIG9sZGVyIGRhcndpbiBsZHMKLSAgICAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAtcW1rc2hyb2JqICRhbGxvd191bmRlZmluZWRfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1pbnN0YWxsX25hbWUgJHt3bH0kcnBhdGgvJHNvbmFtZSAkeGxjdmVyc3RyaW5nfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3PSdzZWQgLWUgInMsIy4qLCwiIC1lICJzLF5bICAgIF0qLCwiIC1lICJzLF5cKC4uKlwpLF8mLCIgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltfiRDQyAkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFnc35ubWVkaXQgLXMgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bSAke2xpYn0nCi0gICAgICAgICAgOzsKLSAgICAgICAqKQotICAgICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgZmkKLSAgICAgIDs7Ci0KLSAgICBkZ3V4KikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIGZyZWVic2QxKikKLSAgICAgIGxkX3NobGlic19GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAjIEZyZWVCU0QgMi4yLlswMTJdIGFsbG93cyB1cyB0byBpbmNsdWRlIGMrK3J0MC5vIHRvIGdldCBDKysgY29uc3RydWN0b3IKLSAgICAjIHN1cHBvcnQuICBGdXR1cmUgdmVyc2lvbnMgZG8gdGhpcyBhdXRvbWF0aWNhbGx5LCBidXQgYW4gZXhwbGljaXQgYysrcnQwLm8KLSAgICAjIGRvZXMgbm90IGJyZWFrIGFueXRoaW5nLCBhbmQgaGVscHMgc2lnbmlmaWNhbnRseSAoYXQgdGhlIGNvc3Qgb2YgYSBsaXR0bGUKLSAgICAjIGV4dHJhIHNwYWNlKS4KLSAgICBmcmVlYnNkMi4yKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgL3Vzci9saWIvYysrcnQwLm8nCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgIyBVbmZvcnR1bmF0ZWx5LCBvbGRlciB2ZXJzaW9ucyBvZiBGcmVlQlNEIDIgZG8gbm90IGhhdmUgdGhpcyBmZWF0dXJlLgotICAgIGZyZWVic2QyKikKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAzIGFuZCBncmVhdGVyIHVzZXMgZ2NjIC1zaGFyZWQgdG8gZG8gc2hhcmVkIGxpYnJhcmllcy4KLSAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBocHV4OSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRybSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JExEIC1iICtiICRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+dGVzdCAkb3V0cHV0X29iamRpci8kc29uYW1lID0gJGxpYiB8fCBtdiAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLQotICAgICAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLSAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfRjc3PScke3dsfS1FJwotICAgICAgOzsKLQotICAgIGhwdXgxMCopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLWIgK2ggJHNvbmFtZSArYiAkaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfStiICR7d2x9JGxpYmRpcicKLQloYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0KLQloYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCWV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0KLQkjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCWhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBocHV4MTEqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgLWEgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JaWE2NCopCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkIC1mUElDICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQljYXNlICRob3N0X2NwdSBpbgotCWhwcGEqNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JKikKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQllc2FjCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCp8aWE2NCopCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0Y3Nz0nK2IgJGxpYmRpcicKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLQkgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0JICA7OwotCSopCi0JICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tRScKLQotCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKLQkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgotCSAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzc9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz06Ci0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0Y3Nz15ZXMKLSAgICAgIDs7Ci0KLSAgICBuZXRic2QqKQotICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX18gPi9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAjIGEub3V0Ci0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgICAgICMgRUxGCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIG5ld3NvczYpCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9kaXJlY3RfRjc3PXllcwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICA7OwotCi0gICAgb3BlbmJzZCopCi0gICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgotCWhhcmRjb2RlX2RpcmVjdF9GNzc9eWVzCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLQlpZiB0ZXN0IC16ICJgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCBncmVwIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KLQkgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLQkgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9JyR7d2x9LUUnCi0JZWxzZQotCSAgY2FzZSAkaG9zdF9vcyBpbgotCSAgIG9wZW5ic2RbMDFdLiogfCBvcGVuYnNkMi5bMC03XSB8IG9wZW5ic2QyLlswLTddLiopCi0JICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1SJGxpYmRpcicKLQkgICAgIDs7Ci0JICAgKikKLQkgICAgIGFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgICAgOzsKLQkgIGVzYWMKLSAgICAgICAgZmkKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfRjc3PW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIG9zMiopCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9GNzc9eWVzCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9dW5zdXBwb3J0ZWQKLSAgICAgIGFyY2hpdmVfY21kc19GNzc9JyRlY2hvICJMSUJSQVJZICRsaWJuYW1lIElOSVRJTlNUQU5DRSIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIkRFU0NSSVBUSU9OIFwiJGxpYm5hbWVcIiIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIERBVEEgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfiRlY2hvIEVYUE9SVFMgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVteGV4cCAkbGlib2JqcyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JENDIC1aZGxsIC1aY3J0ZGxsIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfRjc3PSdlbXhpbXAgLW8gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuYSAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWYnCi0gICAgICA7OwotCi0gICAgb3NmMyopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PScgLWV4cGVjdF91bnJlc29sdmVkIFwqJwotCWFyY2hpdmVfY21kc19GNzc9JyRMRCAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9GNzc9OgotICAgICAgOzsKLQotICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZwotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJwotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LW1zeW0gJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1tc3ltIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmU7IGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+Ci0JJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaW5wdXQgJGxpYi5leHAgJGxpbmtlcl9mbGFncyAkbGlib2JqcyAkZGVwbGlicyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4kcm0gJGxpYi5leHAnCi0KLQkjIEJvdGggYyBhbmQgY3h4IGNvbXBpbGVyIHN1cHBvcnQgLXJwYXRoIGRpcmVjdGx5Ci0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzc9Jy1ycGF0aCAkbGliZGlyJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3PToKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0Y3Nz0nIC16IHRleHQnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCXdsYXJjPScke3dsfScKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3Nz0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0JICAkQ0MgLXNoYXJlZCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZWxzZQotCXdsYXJjPScnCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfiRlY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgotICAJJExEIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3N+JHJtICRsaWIuZXhwJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3PSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgc29sYXJpczIuWzAtNV0gfCBzb2xhcmlzMi5bMC01XS4qKSA7OwotICAgICAgKikKLQkjIFRoZSBjb21waWxlciBkcml2ZXIgd2lsbCBjb21iaW5lIGFuZCByZW9yZGVyIGxpbmtlciBvcHRpb25zLAotCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuICBHQ0MgZGlzY2FyZHMgaXQgd2l0aG91dCBgJHdsJywKLQkjIGJ1dCBpcyBjYXJlZnVsIGVub3VnaCBub3QgdG8gcmVvcmRlci4KLSAJIyBTdXBwb3J0ZWQgc2luY2UgU29sYXJpcyAyLjYgKG1heWJlIDIuNS4xPykKLQlpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScke3dsfS16ICR7d2x9YWxsZXh0cmFjdCRjb252ZW5pZW5jZSAke3dsfS16ICR7d2x9ZGVmYXVsdGV4dHJhY3QnCi0JZWxzZQotCSAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3PScteiBhbGxleHRyYWN0JGNvbnZlbmllbmNlIC16IGRlZmF1bHRleHRyYWN0JwotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBpZiB0ZXN0ICJ4JGhvc3RfdmVuZG9yIiA9IHhzZXF1ZW50OyB0aGVuCi0JIyBVc2UgJENDIHRvIGxpbmsgdW5kZXIgc2VxdWVudCwgYmVjYXVzZSBpdCB0aHJvd3MgaW4gc29tZSBleHRyYSAubwotCSMgZmlsZXMgdGhhdCBtYWtlIC5pbml0IGFuZCAuZmluaSBzZWN0aW9ucyB3b3JrLgotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc3RhdGljIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMKLSAgICAgIGhhcmRjb2RlX21pbnVzX0xfRjc3PXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCkKLSAgICAgIGNhc2UgJGhvc3RfdmVuZG9yIGluCi0Jc25pKQotCSAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0Y3Nz15ZXMgIyBpcyB0aGlzIHJlYWxseSB0cnVlPz8/Ci0JOzsKLQlzaWVtZW5zKQotCSAgIyMgTEQgaXMgbGQgaXQgbWFrZXMgYSBQTEFNTElCCi0JICAjIyBDQyBqdXN0IG1ha2VzIGEgR3Jvc3NNb2R1bGUuCi0JICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgcmVsb2FkX2NtZHNfRjc3PSckQ0MgLXIgLW8gJG91dHB1dCRyZWxvYWRfb2JqcycKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8KLSAgICAgICAgOzsKLQltb3Rvcm9sYSkKLQkgIGFyY2hpdmVfY21kc19GNzc9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQkgIGhhcmRjb2RlX2RpcmVjdF9GNzc9bm8gI01vdG9yb2xhIG1hbnVhbCBzYXlzIHllcywgYnV0IG15IHRlc3RzIHNheSB0aGV5IGxpZQotCTs7Ci0gICAgICBlc2FjCi0gICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0Y3Nz1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0LjMqKQotICAgICAgYXJjaGl2ZV9jbWRzX0Y3Nz0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzc9Jy1CZXhwb3J0JwotICAgICAgOzsKLQotICAgIHN5c3Y0Kk1QKikKLSAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLQlydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotCWhhcmRjb2RlX3J1bnBhdGhfdmFyPXllcwotCWxkX3NobGlic19GNzc9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y0KnV3MiogfCBzeXN2NU9wZW5VTklYKiB8IHN5c3Y1VW5peFdhcmU3LlswMV0uWzEwXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bMDI0XSopCi0gICAgICBub191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19GNzc9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqKQotICAgICAgIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKLSAgICAgICMgbGluayB3aXRoIC1sYywgYW5kIHRoYXQgd291bGQgY2F1c2UgYW55IHN5bWJvbHMgdXNlZCBmcm9tIGxpYmMgdG8KLSAgICAgICMgYWx3YXlzIGJlIHVucmVzb2x2ZWQsIHdoaWNoIG1lYW5zIGp1c3QgYWJvdXQgbm8gbGlicmFyeSB3b3VsZAotICAgICAgIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAotICAgICAgIyB0aG91Z2gsIHdoaWNoIGRvZXMgY2F0Y2ggc29tZSBiYWQgc3ltYm9scyBidXQgaXNuJ3QgYXMgaGVhdnktaGFuZGVkCi0gICAgICAjIGFzIC16IGRlZnMuCi0gICAgICBub191bmRlZmluZWRfZmxhZ19GNzc9JyR7d2x9LXosdGV4dCcKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3Nz0nJHt3bH0teixub2RlZnMnCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzc9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfRjc3PW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nYHRlc3QgLXogIiRTQ09BQlNQQVRIIiAmJiBlY2hvICR7d2x9LVIsJGxpYmRpcmAnCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0Y3Nz0nOicKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfRjc3PXllcwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0Y3Nz0nJHt3bH0tQmV4cG9ydCcKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19GNzc9JyRDQyAtRyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3PSckQ0MgLUcgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBhcmNoaXZlX2NtZHNfRjc3PSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3Nz0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzc9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgbGRfc2hsaWJzX0Y3Nz1ubwotICAgICAgOzsKLSAgICBlc2FjCi0gIGZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsZF9zaGxpYnNfRjc3IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsZF9zaGxpYnNfRjc3IiA+JjYKLXRlc3QgIiRsZF9zaGxpYnNfRjc3IiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotIwotIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPwotIwotY2FzZSAieCRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciIGluCi14fHh5ZXMpCi0gICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKLSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PXllcwotCi0gIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotICAgIGNhc2UgJGFyY2hpdmVfY21kc19GNzcgaW4KLSAgICAqJ34nKikKLSAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KLSAgICAgIDs7Ci0gICAgJyRDQyAnKikKLSAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKLSAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYwotICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluLi4uICRFQ0hPX0MiID4mNgotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0KLSAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAyPmNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICBzb25hbWU9Y29uZnRlc3QKLSAgICAgICAgbGliPWNvbmZ0ZXN0Ci0gICAgICAgIGxpYm9ianM9Y29uZnRlc3QuJGFjX29iamV4dAotICAgICAgICBkZXBsaWJzPQotICAgICAgICB3bD0kbHRfcHJvZ19jb21waWxlcl93bF9GNzcKLQlwaWNfZmxhZz0kbHRfcHJvZ19jb21waWxlcl9waWNfRjc3Ci0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPS12Ci0gICAgICAgIGxpbmtlcl9mbGFncz0tdgotICAgICAgICB2ZXJzdHJpbmc9Ci0gICAgICAgIG91dHB1dF9vYmpkaXI9LgotICAgICAgICBsaWJuYW1lPWNvbmZ0ZXN0Ci0gICAgICAgIGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWc9JGFsbG93X3VuZGVmaW5lZF9mbGFnX0Y3NwotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19GNzc9Ci0gICAgICAgIGlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFyY2hpdmVfY21kc19GNzcgMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMVwiIikgPiY1Ci0gIChldmFsICRhcmNoaXZlX2NtZHNfRjc3IDJcPlwmMSBcfCBncmVwIFwiIC1sYyBcIiBcPi9kZXYvbnVsbCAyXD5cJjEpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0KLSAgICAgICAgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3PW5vCi0gICAgICAgIGVsc2UKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3Nz15ZXMKLSAgICAgICAgZmkKLSAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3PSRsdF9zYXZlX2FsbG93X3VuZGVmaW5lZF9mbGFnCi0gICAgICBlbHNlCi0gICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mNQotICAgICAgZmkKLSAgICAgICRybSBjb25mdGVzdCoKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhcmNoaXZlX2NtZHNfbmVlZF9sY19GNzciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFyY2hpdmVfY21kc19uZWVkX2xjX0Y3NyIgPiY2Ci0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLSAgOzsKLWVzYWMKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGR5bmFtaWMgbGlua2VyIGNoYXJhY3RlcmlzdGljcy4uLiAkRUNIT19DIiA+JjYKLWxpYnJhcnlfbmFtZXNfc3BlYz0KLWxpYm5hbWVfc3BlYz0nbGliJG5hbWUnCi1zb25hbWVfc3BlYz0KLXNocmV4dF9jbWRzPSIuc28iCi1wb3N0aW5zdGFsbF9jbWRzPQotcG9zdHVuaW5zdGFsbF9jbWRzPQotZmluaXNoX2NtZHM9Ci1maW5pc2hfZXZhbD0KLXNobGlicGF0aF92YXI9Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9dW5rbm93bgotdmVyc2lvbl90eXBlPW5vbmUKLWR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBsZC5zbyIKLXN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIgotCi1uZWVkX2xpYl9wcmVmaXg9dW5rbm93bgotaGFyZGNvZGVfaW50b19saWJzPW5vCi0KLSMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgotIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCi1uZWVkX3ZlcnNpb249dW5rbm93bgotCi1jYXNlICRob3N0X29zIGluCi1haXgzKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLQotICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIDs7Ci0KLWFpeFs0LTldKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgotICAgICMgQUlYIDUgc3VwcG9ydHMgSUE2NAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGVsc2UKLSAgICAjIFdpdGggR0NDIHVwIHRvIDIuOTUueCwgY29sbGVjdDIgd291bGQgY3JlYXRlIGFuIGltcG9ydCBmaWxlCi0gICAgIyBmb3IgZGVwZW5kZW5jZSBsaWJyYXJpZXMuICBUaGUgaW1wb3J0IGZpbGUgd291bGQgc3RhcnQgd2l0aAotICAgICMgdGhlIGxpbmUgYCMhIC4nLiAgVGhpcyB3b3VsZCBjYXVzZSB0aGUgZ2VuZXJhdGVkIGxpYnJhcnkgdG8KLSAgICAjIGRlcGVuZCBvbiBgLicsIGFsd2F5cyBhbiBpbnZhbGlkIGxpYnJhcnkuICBUaGlzIHdhcyBmaXhlZCBpbgotICAgICMgZGV2ZWxvcG1lbnQgc25hcHNob3RzIG9mIEdDQyBwcmlvciB0byAzLjAuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgYWl4NCB8IGFpeDQuWzAxXSB8IGFpeDQuWzAxXS4qKQotICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKLQkgICBlY2hvICcgeWVzICcKLQkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8IGdyZXAgeWVzID4gL2Rldi9udWxsOyB0aGVuCi0JOgotICAgICAgZWxzZQotCWNhbl9idWlsZF9zaGFyZWQ9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLSAgICAjIEFJWCAob24gUG93ZXIqKSBoYXMgbm8gdmVyc2lvbmluZyBzdXBwb3J0LCBzbyBjdXJyZW50bHkgd2UgY2FuIG5vdCBoYXJkY29kZSBjb3JyZWN0Ci0gICAgIyBzb25hbWUgaW50byBleGVjdXRhYmxlLiBQcm9iYWJseSB3ZSBjYW4gYWRkIHZlcnNpb25pbmcgc3VwcG9ydCB0bwotICAgICMgY29sbGVjdDIsIHNvIGFkZGl0aW9uYWwgbGlua3MgY2FuIGJlIHVzZWZ1bCBpbiBmdXR1cmUuCi0gICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCi0gICAgICAjIElmIHVzaW5nIHJ1biB0aW1lIGxpbmtpbmcgKG9uIEFJWCA0LjIgb3IgbGF0ZXIpIHVzZSBsaWI8bmFtZT4uc28KLSAgICAgICMgaW5zdGVhZCBvZiBsaWI8bmFtZT4uYSB0byBsZXQgcGVvcGxlIGtub3cgdGhhdCB0aGVzZSBhcmUgbm90Ci0gICAgICAjIHR5cGljYWwgQUlYIHNoYXJlZCBsaWJyYXJpZXMuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBlbHNlCi0gICAgICAjIFdlIHByZXNlcnZlIC5hIGFzIGV4dGVuc2lvbiBmb3Igc2hhcmVkIGxpYnJhcmllcyB0aHJvdWdoIEFJWDQuMgotICAgICAgIyBhbmQgbGF0ZXIgd2hlbiB3ZSBhcmUgbm90IGRvaW5nIHJ1biB0aW1lIGxpbmtpbmcuCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9LmEgJGxpYm5hbWUuYScKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgZmkKLSAgICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgZmkKLSAgOzsKLQotYW1pZ2FvcyopCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUuaXhsaWJyYXJ5ICRsaWJuYW1lLmEnCi0gICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCi0gIGZpbmlzaF9ldmFsPSdmb3IgbGliIGluIGBscyAkbGliZGlyLyouaXhsaWJyYXJ5IDI+L2Rldi9udWxsYDsgZG8gbGlibmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdcJydzJV4uKi9cKFteL10qXClcLml4bGlicmFyeSQlXDElJ1wnJ2A7IHRlc3QgJHJtIC9zeXMvbGlicy8ke2xpYm5hbWV9X2l4bGlicmFyeS5hOyAkc2hvdyAiY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSI7IGNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgfHwgZXhpdCAxOyBkb25lJwotICA7OwotCi1iZW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAotICA7OwotCi1ic2RpWzQ1XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvWDExL2xpYiAvdXNyL2NvbnRyaWIvbGliIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9sb2NhbC9saWIiCi0gICMgdGhlIGRlZmF1bHQgbGQuc28uY29uZiBhbHNvIGNvbnRhaW5zIC91c3IvY29udHJpYi9saWIgYW5kCi0gICMgL3Vzci9YMTFSNi9saWIgKC91c3IvWDExIGlzIGEgbGluayB0byAvdXNyL1gxMVI2KSwgYnV0IGxldCB1cyBhbGxvdwotICAjIGxpYnRvb2wgdG8gaGFyZC1jb2RlIHRoZXNlIGludG8gcHJvZ3JhbXMKLSAgOzsKLQotY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqKQotICB2ZXJzaW9uX3R5cGU9d2luZG93cwotICBzaHJleHRfY21kcz0iLmRsbCIKLSAgbmVlZF92ZXJzaW9uPW5vCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotCi0gIGNhc2UgJEdDQywkaG9zdF9vcyBpbgotICB5ZXMsY3lnd2luKiB8IHllcyxtaW5ndyogfCB5ZXMscHczMiopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKLSAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCi0gICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+Ci0gICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTtlY2hvIFwkZGxuYW1lJ1wnJ2B+Ci0gICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+Ci0gICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KLSAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZX4KLSAgICAgIGNobW9kIGEreCBcJGRsZGlyLyRkbG5hbWUnCi0gICAgcG9zdHVuaW5zdGFsbF9jbWRzPSdkbGRsbD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGZpbGU7IGVjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRscGF0aD0kZGlyL1wkZGxkbGx+Ci0gICAgICAgJHJtIFwkZGxwYXRoJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qKQotICAgICAgIyBDeWd3aW4gRExMcyB1c2UgJ2N5ZycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBzb25hbWVfc3BlYz0nYGVjaG8gJHtsaWJuYW1lfSB8IHNlZCAtZSAncy9ebGliL2N5Zy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliIC9saWIvdzMyYXBpIC9saWIgL3Vzci9sb2NhbC9saWIiCi0gICAgICA7OwotICAgIG1pbmd3KikKLSAgICAgICMgTWluR1cgRExMcyB1c2UgdHJhZGl0aW9uYWwgJ2xpYicgcHJlZml4Ci0gICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRDQyAtcHJpbnQtc2VhcmNoLWRpcnMgfCBncmVwICJebGlicmFyaWVzOiIgfCAkU0VEIC1lICJzL15saWJyYXJpZXM6Ly8iIC1lICJzLD0vLC8sZyJgCi0gICAgICBpZiBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IGdyZXAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgSXQgaXMgbW9zdCBwcm9iYWJseSBhIFdpbmRvd3MgZm9ybWF0IFBBVEggcHJpbnRlZCBieQotICAgICAgICAjIG1pbmd3IGdjYywgYnV0IHdlIGFyZSBydW5uaW5nIG9uIEN5Z3dpbi4gR2NjIHByaW50cyBpdHMgc2VhcmNoCi0gICAgICAgICMgcGF0aCB3aXRoIDsgc2VwYXJhdG9ycywgYW5kIHdpdGggZHJpdmUgbGV0dGVycy4gV2UgY2FuIGhhbmRsZSB0aGUKLSAgICAgICAgIyBkcml2ZSBsZXR0ZXJzIChjeWd3aW4gZmlsZXV0aWxzIHVuZGVyc3RhbmRzIHRoZW0pLCBzbyBsZWF2ZSB0aGVtLAotICAgICAgICAjIGVzcGVjaWFsbHkgYXMgd2UgbWlnaHQgcGFzcyBmaWxlcyBmb3VuZCB0aGVyZSB0byBhIG1pbmd3IG9iamR1bXAsCi0gICAgICAgICMgd2hpY2ggd291bGRuJ3QgdW5kZXJzdGFuZCBhIGN5Z3dpbmlmaWVkIHBhdGguIEFoaC4KLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPWBlY2hvICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAotICAgICAgZWxzZQotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCi0gICAgICBmaQotICAgICAgOzsKLSAgICBwdzMyKikKLSAgICAgICMgcHczMiBETExzIHVzZSAncHcnIHByZWZpeCByYXRoZXIgdGhhbiAnbGliJwotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvcHcvJ2BgZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bLl0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JwotICAgICAgOzsKLSAgICBlc2FjCi0gICAgOzsKLQotICAqKQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUubGliJwogICAgIDs7CiAgIGVzYWMKLSAgZHluYW1pY19saW5rZXI9J1dpbjMyIGxkLmV4ZScKLSAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCi0gIHNobGlicGF0aF92YXI9UEFUSAotICA7OworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zaGFyZWQiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc2hhcmVkIiA+JjY7IH0KIAotZGFyd2luKiB8IHJoYXBzb2R5KikKLSAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGR5bGQiCi0gIHZlcnNpb25fdHlwZT1kYXJ3aW4KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHt2ZXJzdWZmaXh9JHNoYXJlZF9leHQgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICi0gIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXMuLi4gIiA+JjY7IH0KKyAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGVuYWJsZV9zdGF0aWMiID4mNQorJGFzX2VjaG8gIiRlbmFibGVfc3RhdGljIiA+JjY7IH0KIAotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKIAotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKIAotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwogCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXgKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNgotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgogZmkKLQotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2Ci1oYXJkY29kZV9hY3Rpb25fRjc3PQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfRjc3IiB8fCBcCi0gICB0ZXN0IC1uICIkcnVucGF0aF92YXJfRjc3IiB8fCBcCi0gICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19GNzciID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9GNzciICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIEY3NykiICE9IG5vICYmCi0gICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0Y3NyIgIT0gbm87IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbl9GNzc9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbl9GNzc9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbl9GNzc9dW5zdXBwb3J0ZWQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0Y3NyIgPiY2Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fRjc3IiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfRjc3IFwKLSAgICBDQ19GNzcgXAotICAgIExEX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9GNzcgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0Y3NyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfRjc3IFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19GNzcgXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzcgXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19GNzcgXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0Y3NyBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19GNzcgXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfRjc3IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NyBcCi0gICAgcHJlZGVwX29iamVjdHNfRjc3IFwKLSAgICBwb3N0ZGVwX29iamVjdHNfRjc3IFwKLSAgICBwcmVkZXBzX0Y3NyBcCi0gICAgcG9zdGRlcHNfRjc3IFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfRjc3IFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfRjc3IFwKLSAgICBhcmNoaXZlX2NtZHNfRjc3IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0Y3NyBcCi0gICAgcG9zdGluc3RhbGxfY21kc19GNzcgXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19GNzcgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NyBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfRjc3IFwKLSAgICBub191bmRlZmluZWRfZmxhZ19GNzcgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfRjc3IFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0Y3NyBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzcgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3IFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfRjc3IFwKLSAgICBtb2R1bGVfY21kc19GNzcgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19GNzcgXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0Y3NyBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9GNzcgXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19GNzcgXAotICAgIGluY2x1ZGVfZXhwc3ltc19GNzc7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0Y3NyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NyB8IFwKLSAgICBhcmNoaXZlX2NtZHNfRjc3IHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfRjc3IHwgXAotICAgIG1vZHVsZV9jbWRzX0Y3NyB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfRjc3IHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0Y3NyB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0Y3NyB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfRjc3Ci0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0Y3NwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9GNzcKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19GNzcKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfRjc3Ci0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9GNzcKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0Y3NwotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fRjc3Ci0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0Y3NwotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19GNzcKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfRjc3Ci0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfRjc3Ci0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19GNzcKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0Y3NwotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19GNzcKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19GNzcKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfRjc3Ci1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19GNzcKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0Y3NwotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19GNzcKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfRjc3Ci0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0Y3NwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfRjc3Ci0KLSMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZAotIyBsaWJyYXJ5Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19GNzcKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfRjc3Ci0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19GNzcKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0Y3NwotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fRjc3Ci0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19GNzcKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9GNzcKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfRjc3Ci0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0Y3NwotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9GNzcKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19GNzcKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfRjc3Ci0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19GNzcKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19GNzcKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0Y3NwotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0Y3NwotCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi1fX0VPRl9fCi0KLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQogYWNfZXh0PWMKIGFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCiBhY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCkBAIC0xNzUyNSwzOTI3ICsxNTIwMyw4MSBAQAogCiBDQz0iJGx0X3NhdmVfQ0MiCiAKLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBHQ0opCi0JaWYgdGVzdCAtbiAiJEdDSiIgJiYgdGVzdCAiWCRHQ0oiICE9ICJYbm8iOyB0aGVuCiAKIAogCi0jIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9amF2YQotCi0jIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCi1vYmpleHQ9bwotb2JqZXh0X0dDSj0kb2JqZXh0Ci0KLSMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCi1sdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKLQotIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKLWx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW10gYXJndikge307IH0nCi0KLSMgbHRtYWluIG9ubHkgdXNlcyAkQ0MgZm9yIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzbyBtYWtlIHN1cmUgJENDIGlzIHNldC4KLQotIyBJZiBubyBDIGNvbXBpbGVyIHdhcyBzcGVjaWZpZWQsIHVzZSBDQy4KLUxUQ0M9JHtMVENDLSIkQ0MifQotCi0jIElmIG5vIEMgY29tcGlsZXIgZmxhZ3Mgd2VyZSBzcGVjaWZpZWQsIHVzZSBDRkxBR1MuCi1MVENGTEFHUz0ke0xUQ0ZMQUdTLSIkQ0ZMQUdTIn0KLQotIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KLWNvbXBpbGVyPSRDQwogCiAKLSMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCi1hY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0Ci1ldmFsICIkYWNfY29tcGlsZSIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKLV9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSBjb25mdGVzdCoKLQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2xpbmsiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfbGlua2VyX2JvaWxlcnBsYXRlPWBjYXQgY29uZnRlc3QuZXJyYAotJHJtIC1yIGNvbmZ0ZXN0KgogCiAKLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1sdF9zYXZlX0NDPSIkQ0MiCi1DQz0ke0dDSi0iZ2NqIn0KLWNvbXBpbGVyPSRDQwotY29tcGlsZXJfR0NKPSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKIAogCi0jIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCi1hcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLQotb2xkX2FyY2hpdmVfY21kc19HQ0o9JG9sZF9hcmNoaXZlX2NtZHMKIAogCi1sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9CiAKLWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSj0nIC1mbm8tYnVpbHRpbicKKyAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGxpYnRvb2wiCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tcnR0aSAtZm5vLWV4Y2VwdGlvbnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPW5vCi0gIGFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotICAgZWNobyAiJGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBsdF9jb21waWxlcl9mbGFnPSItZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zIgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KLSAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAotICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAotICAgLWUgJ3M6IFteIF0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAotICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKLSAgIChldmFsIGVjaG8gIlwiXCRhc19tZToxNzYyMzogJGx0X2NvbXBpbGVcIiIgPiY1KQotICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPmNvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgIGVjaG8gIiRhc19tZToxNzYyNzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KLSAgICAgJGVjaG8gIlgkX2x0X2NvbXBpbGVyX2JvaWxlcnBsYXRlIiB8ICRYc2VkIC1lICcvXiQvZCcgPmNvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgY29uZnRlc3QuZXJyID5jb25mdGVzdC5lcjIKLSAgICAgaWYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyMiB8fCBkaWZmIGNvbmZ0ZXN0LmV4cCBjb25mdGVzdC5lcjIgPi9kZXYvbnVsbDsgdGhlbgotICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSBjb25mdGVzdCoKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfY3ZfcHJvZ19jb21waWxlcl9ydHRpX2V4Y2VwdGlvbnMiID4mNgogCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcnR0aV9leGNlcHRpb25zIiA9IHh5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0o9IiRsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0ogLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyIKLWVsc2UKLSAgICA6Ci1maQorIyBPbmx5IGV4cGFuZCBvbmNlOgogCi1maQogCi1sdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0KLWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KLWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0KIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkY29tcGlsZXIgb3B0aW9uIHRvIHByb2R1Y2UgUElDIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUMuLi4gJEVDSE9fQyIgPiY2CiAKLSAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1zdGF0aWMnCiAKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXgqKQotICAgICAgIyBBbGwgQUlYIGNvZGUgaXMgUElDLgotICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLQkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICBmaQotICAgICAgOzsKKyMjCisjICAgQnVpbGQgZW52aXJvbm1lbnQ6CisjIwogCi0gICAgYW1pZ2FvcyopCi0gICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0Ci0gICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKLSAgICAgICMgbGlrZSBgLW02ODA0MCcuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKLSAgICAgIDs7Ci0KLSAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KLSAgICAgIDs7Ci0KLSAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqKQotICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZwotICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KLSAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKLSAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCi0KLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQotICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZm5vLWNvbW1vbicKLSAgICAgIDs7Ci0KLSAgICBpbnRlcml4WzMtOV0qKQotICAgICAgIyBJbnRlcml4IDMueCBnY2MgLWZwaWMvLWZQSUMgb3B0aW9ucyBnZW5lcmF0ZSBicm9rZW4gY29kZS4KLSAgICAgICMgSW5zdGVhZCwgd2UgcmVsb2NhdGUgc2hhcmVkIGxpYnJhcmllcyBhdCBydW50aW1lLgotICAgICAgOzsKLQotICAgIG1zZG9zZGpncHAqKQotICAgICAgIyBKdXN0IGJlY2F1c2Ugd2UgdXNlIEdDQyBkb2Vzbid0IG1lYW4gd2Ugc3VkZGVubHkgZ2V0IHNoYXJlZCBsaWJyYXJpZXMKLSAgICAgICMgb24gc3lzdGVtcyB0aGF0IGRvbid0IHN1cHBvcnQgdGhlbS4KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfY2FuX2J1aWxkX3NoYXJlZF9HQ0o9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWQ9bm8KLSAgICAgIDs7Ci0KLSAgICBzeXN2NCpNUCopCi0gICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPS1LY29uZm9ybV9waWMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaHB1eCopCi0gICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKLSAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KLSAgICAgIGNhc2UgJGhvc3RfY3B1IGluCi0gICAgICBocHBhKjY0KnxpYTY0KikKLQkjICtaIHRoZSBkZWZhdWx0Ci0JOzsKLSAgICAgICopCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZlBJQycKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1mUElDJwotICAgICAgOzsKLSAgICBlc2FjCi0gIGVsc2UKLSAgICAjIFBPUlRNRSBDaGVjayBmb3IgZmxhZyB0byBwYXNzIGxpbmtlciBmbGFncyB0aHJvdWdoIHRoZSBzeXN0ZW0gY29tcGlsZXIuCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGFpeCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgZWxzZQotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgICBkYXJ3aW4qKQotICAgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBvbiB0aGlzIHBsYXRmb3JtCi0gICAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKLSAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgotICAgICAgICAgeGxjKikKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLXFub2NvbW1vbicKLSAgICAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgICAgOzsKLSAgICAgICBlc2FjCi0gICAgICAgOzsKLQotICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiopCi0gICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCi0gICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgotCi0gICAgICA7OwotCi0gICAgaHB1eDkqIHwgaHB1eDEwKiB8IGhwdXgxMSopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLSAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciBJQTY0IEhQLVVYIGFuZCA2NC1iaXQgSFAtVVgsIGJ1dAotICAgICAgIyBub3QgZm9yIFBBIEhQLVVYLgotICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgICAgIGhwcGEqNjQqfGlhNjQqKQotCSMgK1ogdGhlIGRlZmF1bHQKLQk7OwotICAgICAgKikKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9JytaJwotCTs7Ci0gICAgICBlc2FjCi0gICAgICAjIElzIHRoZXJlIGEgYmV0dGVyIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljIHRoYXQgd29ya3Mgd2l0aCB0aGUgYnVuZGxlZCBDQz8KLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nJHt3bH0tYSAke3dsfWFyY2hpdmUnCi0gICAgICA7OwotCi0gICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgIyBQSUMgKHdpdGggLUtQSUMpIGlzIHRoZSBkZWZhdWx0LgotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBuZXdzb3M2KQotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCi0gICAgICBpY2MqIHwgZWNjKikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLQlsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotCWx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLXN0YXRpYycKLSAgICAgICAgOzsKLSAgICAgIHBnY2MqIHwgcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqKQotICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAotCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCi0JbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0JbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctZnBpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgICA7OwotICAgICAgY2NjKikKLSAgICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgotICAgICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwotICAgICAgICA7OwotICAgICAgKikKLSAgICAgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCi0JKlN1blwgQyopCi0JICAjIFN1biBDIDUuOQotCSAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLQkgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0JICBsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVdsLCcKLQkgIDs7Ci0JKlN1blwgRiopCi0JICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCi0JICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotCSAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLQkgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPScnCi0JICA7OwotCWVzYWMKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgIyBBbGwgT1NGLzEgY29kZSBpcyBQSUMuCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1ub25fc2hhcmVkJwotICAgICAgOzsKLQotICAgIHJkb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctbm9uX3NoYXJlZCcKLSAgICAgIDs7Ci0KLSAgICBzb2xhcmlzKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtQSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgIGY3NyogfCBmOTAqIHwgZjk1KikKLQlsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSj0nLVFvcHRpb24gbGQgJzs7Ci0gICAgICAqKQotCWx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJzs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctUW9wdGlvbiBsZCAnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1QSUMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgIHN5c3Y0IHwgc3lzdjQuMnV3MiogfCBzeXN2NC4zKikKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfd2xfR0NKPSctV2wsJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSctS1BJQycKLSAgICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0nLUJzdGF0aWMnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYyA7dGhlbgotCWx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0nLUtjb25mb3JtX3BpYycKLQlsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBzeXN2NSogfCB1bml4d2FyZSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgT3BlblVOSVgqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1LUElDJwotICAgICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKPSctQnN0YXRpYycKLSAgICAgIDs7Ci0KLSAgICB1bmljb3MqKQotICAgICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0o9Jy1XbCwnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICA7OwotCi0gICAgdXRzNCopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0o9Jy1waWMnCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0o9Jy1Cc3RhdGljJwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWRfR0NKPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIiA+JjYKLQorIyAgIGRldmVsb3BlciBidWlsZAorIyAgICAgICAoZW5hYmxlZCBieSBkZWZhdWx0IHdoZW4gYnVpbGRpbmcgZnJvbSBTVk4gY2hlY2tvdXQpCiAjCi0jIENoZWNrIHRvIG1ha2Ugc3VyZSB0aGUgUElDIGZsYWcgYWN0dWFsbHkgd29ya3MuCi0jCi1pZiB0ZXN0IC1uICIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIjsgdGhlbgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgJGNvbXBpbGVyIFBJQyBmbGFnICRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0ogd29ya3MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgUElDIGZsYWcgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7bHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSj1ubwotICBhY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKLSAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAotICAgbHRfY29tcGlsZXJfZmxhZz0iJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIKLSAgICMgSW5zZXJ0IHRoZSBvcHRpb24gZWl0aGVyICgxKSBhZnRlciB0aGUgbGFzdCAqRkxBR1MgdmFyaWFibGUsIG9yCi0gICAjICgyKSBiZWZvcmUgYSB3b3JkIGNvbnRhaW5pbmcgImNvbmZ0ZXN0LiIsIG9yICgzKSBhdCB0aGUgZW5kLgotICAgIyBOb3RlIHRoYXQgJGFjX2NvbXBpbGUgaXRzZWxmIGRvZXMgbm90IGNvbnRhaW4gYmFja3NsYXNoZXMgYW5kIGJlZ2lucwotICAgIyB3aXRoIGEgZG9sbGFyIHNpZ24gKG5vdCBhIGh5cGhlbiksIHNvIHRoZSBlY2hvIHNob3VsZCB3b3JrIGNvcnJlY3RseS4KLSAgICMgVGhlIG9wdGlvbiBpcyByZWZlcmVuY2VkIHZpYSBhIHZhcmlhYmxlIHRvIGF2b2lkIGNvbmZ1c2luZyBzZWQuCi0gICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKLSAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKLSAgIC1lICdzOiBbXiBdKmNvbmZ0ZXN0XC46ICRsdF9jb21waWxlcl9mbGFnJjo7IHQnIFwKLSAgIC1lICdzOiQ6ICRsdF9jb21waWxlcl9mbGFnOidgCi0gICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6MTc5MTM6ICRsdF9jb21waWxlXCIiID4mNSkKLSAgIChldmFsICIkbHRfY29tcGlsZSIgMj5jb25mdGVzdC5lcnIpCi0gICBhY19zdGF0dXM9JD8KLSAgIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTc5MTc6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyAiJGFjX291dGZpbGUiOyB0aGVuCi0gICAgICMgVGhlIGNvbXBpbGVyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncyBvdGhlciB0aGFuIHRoZSB1c3VhbCBvdXRwdXQuCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID5jb25mdGVzdC5leHAKLSAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0o9eWVzCi0gICAgIGZpCi0gICBmaQotICAgJHJtIGNvbmZ0ZXN0KgotCitpZiB0ZXN0ICJ4JGRldmVsb3BlciIgIT0gInhubyIgLWEgLWYgJHNyY2Rpci9yZW1vdmUtZmlsZXM7IHRoZW4KKyAgICBkZXZlbG9wZXI9InllcyIKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9waWNfd29ya3NfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3Jrc19HQ0oiID4mNgotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfcGljX3dvcmtzX0dDSiIgPSB4eWVzOyB0aGVuCi0gICAgY2FzZSAkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIGluCi0gICAgICIiIHwgIiAiKikgOzsKLSAgICAgKikgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSIgJGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiIgOzsKLSAgICAgZXNhYwotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSj0KLSAgICAgbHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkX0dDSj1ubwotZmkKLQotZmkKLWNhc2UgJGhvc3Rfb3MgaW4KLSAgIyBGb3IgcGxhdGZvcm1zIHdoaWNoIGRvIG5vdCBzdXBwb3J0IFBJQywgLURQSUMgaXMgbWVhbmluZ2xlc3M6Ci0gICpkamdwcCopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPQotICAgIDs7Ci0gICopCi0gICAgbHRfcHJvZ19jb21waWxlcl9waWNfR0NKPSIkbHRfcHJvZ19jb21waWxlcl9waWNfR0NKIgotICAgIDs7Ci1lc2FjCi0KLSMKLSMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBzdGF0aWMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KLSMKLXdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSiBldmFsIGx0X3RtcF9zdGF0aWNfZmxhZz1cIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY19HQ0pcIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdGF0aWMgZmxhZyAkbHRfdG1wX3N0YXRpY19mbGFnIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3MuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2x0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0o9bm8KLSAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCi0gICBMREZMQUdTPSIkTERGTEFHUyAkbHRfdG1wX3N0YXRpY19mbGFnIgotICAgZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPiBjb25mdGVzdC4kYWNfZXh0Ci0gICBpZiAoZXZhbCAkYWNfbGluayAyPmNvbmZ0ZXN0LmVycikgJiYgdGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQ7IHRoZW4KLSAgICAgIyBUaGUgbGlua2VyIGNhbiBvbmx5IHdhcm4gYW5kIGlnbm9yZSB0aGUgb3B0aW9uIGlmIG5vdCByZWNvZ25pemVkCi0gICAgICMgU28gc2F5IG5vIGlmIHRoZXJlIGFyZSB3YXJuaW5ncwotICAgICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgICAgICMgQXBwZW5kIGFueSBlcnJvcnMgdG8gdGhlIGNvbmZpZy5sb2cuCi0gICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICAgJGVjaG8gIlgkX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gY29uZnRlc3QuZXhwCi0gICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCi0gICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSj15ZXMKLSAgICAgICBmaQotICAgICBlbHNlCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKPXllcwotICAgICBmaQotICAgZmkKLSAgICRybSAtciBjb25mdGVzdCoKLSAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9zdGF0aWNfd29ya3NfR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX3N0YXRpY193b3Jrc19HQ0oiID4mNgotCi1pZiB0ZXN0IHgiJGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzX0dDSiIgPSB4eWVzOyB0aGVuCi0gICAgOgotZWxzZQotICAgIGx0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSj0KLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmICRjb21waWxlciBzdXBwb3J0cyAtYyAtbyBmaWxlLiRhY19vYmpleHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0orc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPW5vCi0gICAkcm0gLXIgY29uZnRlc3QgMj4vZGV2L251bGwKLSAgIG1rZGlyIGNvbmZ0ZXN0Ci0gICBjZCBjb25mdGVzdAotICAgbWtkaXIgb3V0Ci0gICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgbHRfY29tcGlsZXJfZmxhZz0iLW8gb3V0L2NvbmZ0ZXN0Mi4kYWNfb2JqZXh0IgotICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKLSAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCi0gICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCi0gICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgotICAgbHRfY29tcGlsZT1gZWNobyAiJGFjX2NvbXBpbGUiIHwgJFNFRCBcCi0gICAtZSAnczouKkZMQUdTfVx7MCwxXH0gOiYkbHRfY29tcGlsZXJfZmxhZyA6OyB0JyBcCi0gICAtZSAnczogW14gXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCi0gICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAotICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOjE4MDE3OiAkbHRfY29tcGlsZVwiIiA+JjUpCi0gICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+b3V0L2NvbmZ0ZXN0LmVycikKLSAgIGFjX3N0YXR1cz0kPwotICAgY2F0IG91dC9jb25mdGVzdC5lcnIgPiY1Ci0gICBlY2hvICIkYXNfbWU6MTgwMjE6IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAgaWYgKGV4aXQgJGFjX3N0YXR1cykgJiYgdGVzdCAtcyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQKLSAgIHRoZW4KLSAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKLSAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzCi0gICAgICRlY2hvICJYJF9sdF9jb21waWxlcl9ib2lsZXJwbGF0ZSIgfCAkWHNlZCAtZSAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAotICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgotICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCi0gICAgICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKPXllcwotICAgICBmaQotICAgZmkKLSAgIGNobW9kIHUrdyAuIDI+JjUKLSAgICRybSBjb25mdGVzdCoKLSAgICMgU0dJIEMrKyBjb21waWxlciB3aWxsIGNyZWF0ZSBkaXJlY3Rvcnkgb3V0L2lpX2ZpbGVzLyBmb3IKLSAgICMgdGVtcGxhdGUgaW5zdGFudGlhdGlvbgotICAgdGVzdCAtZCBvdXQvaWlfZmlsZXMgJiYgJHJtIG91dC9paV9maWxlcy8qICYmIHJtZGlyIG91dC9paV9maWxlcwotICAgJHJtIG91dC8qICYmIHJtZGlyIG91dAotICAgY2QgLi4KLSAgIHJtZGlyIGNvbmZ0ZXN0Ci0gICAkcm0gY29uZnRlc3QqCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oiID4mNgotCi0KLWhhcmRfbGlua3M9Im5vdHRlc3RlZCIKLWlmIHRlc3QgIiRsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfb19HQ0oiID0gbm8gJiYgdGVzdCAiJG5lZWRfbG9ja3MiICE9IG5vOyB0aGVuCi0gICMgZG8gbm90IG92ZXJ3cml0ZSB0aGUgdmFsdWUgb2YgbmVlZF9sb2NrcyBwcm92aWRlZCBieSB0aGUgdXNlcgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2UgY2FuIGxvY2sgd2l0aCBoYXJkIGxpbmtzLi4uICRFQ0hPX0MiID4mNgotICBoYXJkX2xpbmtzPXllcwotICAkcm0gY29uZnRlc3QqCi0gIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCi0gIHRvdWNoIGNvbmZ0ZXN0LmEKLSAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubwotICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZF9saW5rcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZF9saW5rcyIgPiY2Ci0gIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogXGAkQ0MnIGRvZXMgbm90IHN1cHBvcnQgXGAtYyAtbycsIHNvIFxgbWFrZSAtaicgbWF5IGJlIHVuc2FmZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFxgJENDJyBkb2VzIG5vdCBzdXBwb3J0IFxgLWMgLW8nLCBzbyBcYG1ha2UgLWonIG1heSBiZSB1bnNhZmUiID4mMjt9Ci0gICAgbmVlZF9sb2Nrcz13YXJuCi0gIGZpCi1lbHNlCi0gIG5lZWRfbG9ja3M9bm8KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuLi4gJEVDSE9fQyIgPiY2Ci0KLSAgcnVucGF0aF92YXI9Ci0gIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0KLSAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0o9bm8KLSAgYXJjaGl2ZV9jbWRzX0dDSj0KLSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9Ci0gIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfR0NKPQotICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0o9Ci0gIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9Ci0gIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgdGhyZWFkX3NhZmVfZmxhZ19zcGVjX0dDSj0KLSAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Ci0gIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKPQotICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0KLSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICBoYXJkY29kZV9taW51c19MX0dDSj1ubwotICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj11bnN1cHBvcnRlZAotICBsaW5rX2FsbF9kZXBsaWJzX0dDSj11bmtub3duCi0gIGhhcmRjb2RlX2F1dG9tYXRpY19HQ0o9bm8KLSAgbW9kdWxlX2NtZHNfR0NKPQotICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKPQotICBhbHdheXNfZXhwb3J0X3N5bWJvbHNfR0NKPW5vCi0gIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgJ1wnJ3MvLiogLy8nXCcnIHwgc29ydCB8IHVuaXEgPiAkZXhwb3J0X3N5bWJvbHMnCi0gICMgaW5jbHVkZV9leHBzeW1zIHNob3VsZCBiZSBhIGxpc3Qgb2Ygc3BhY2Utc2VwYXJhdGVkIHN5bWJvbHMgdG8gYmUgKmFsd2F5cyoKLSAgIyBpbmNsdWRlZCBpbiB0aGUgc3ltYm9sIGxpc3QKLSAgaW5jbHVkZV9leHBzeW1zX0dDSj0KLSAgIyBleGNsdWRlX2V4cHN5bXMgY2FuIGJlIGFuIGV4dGVuZGVkIHJlZ2V4cCBvZiBzeW1ib2xzIHRvIGV4Y2x1ZGUKLSAgIyBpdCB3aWxsIGJlIHdyYXBwZWQgYnkgYCAoJyBhbmQgYCkkJywgc28gb25lIG11c3Qgbm90IG1hdGNoIGJlZ2lubmluZyBvcgotICAjIGVuZCBvZiBsaW5lLiAgRXhhbXBsZTogYGF8YmN8LipkLionIHdpbGwgZXhjbHVkZSB0aGUgc3ltYm9scyBgYScgYW5kIGBiYycsCi0gICMgYXMgd2VsbCBhcyBhbnkgc3ltYm9sIHRoYXQgY29udGFpbnMgYGQnLgotICBleGNsdWRlX2V4cHN5bXNfR0NKPSdfR0xPQkFMX09GRlNFVF9UQUJMRV98X0dMT0JBTF9fRltJRF1fLionCi0gICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAotICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKLSAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90Ci0gICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgotICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgotICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCi0gIGV4dHJhY3RfZXhwc3ltc19jbWRzPQotICAjIEp1c3QgYmVpbmcgcGFyYW5vaWQgYWJvdXQgZW5zdXJpbmcgdGhhdCBjY19iYXNlbmFtZSBpcyBzZXQuCi0gIGZvciBjY190ZW1wIGluICRjb21waWxlciIiOyBkbwotICBjYXNlICRjY190ZW1wIGluCi0gICAgY29tcGlsZSB8ICpbXFwvXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1xcL11jY2FjaGUgKSA7OwotICAgIGRpc3RjYyB8ICpbXFwvXWRpc3RjYyB8IHB1cmlmeSB8ICpbXFwvXXB1cmlmeSApIDs7Ci0gICAgXC0qKSA7OwotICAgICopIGJyZWFrOzsKLSAgZXNhYwotZG9uZQotY2NfYmFzZW5hbWU9YCRlY2hvICJYJGNjX3RlbXAiIHwgJFhzZWQgLWUgJ3MlLiovJSUnIC1lICJzJV4kaG9zdF9hbGlhcy0lJSJgCi0KLSAgY2FzZSAkaG9zdF9vcyBpbgotICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQotICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KLSAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KLSAgICAgIHdpdGhfZ251X2xkPW5vCi0gICAgZmkKLSAgICA7OwotICBpbnRlcml4KikKLSAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQotICAgIHdpdGhfZ251X2xkPXllcwotICAgIDs7Ci0gIG9wZW5ic2QqKQotICAgIHdpdGhfZ251X2xkPW5vCi0gICAgOzsKLSAgZXNhYwotCi0gIGxkX3NobGlic19HQ0o9eWVzCi0gIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KLSAgICAjIElmIGFyY2hpdmVfY21kcyBydW5zIExELCBub3QgQ0MsIHdsYXJjIHNob3VsZCBiZSBlbXB0eQotICAgIHdsYXJjPScke3dsfScKLQotICAgICMgU2V0IHNvbWUgZGVmYXVsdHMgZm9yIEdOVSBsZCB3aXRoIHNoYXJlZCBsaWJyYXJ5IHN1cHBvcnQuIFRoZXNlCi0gICAgIyBhcmUgcmVzZXQgbGF0ZXIgaWYgc2hhcmVkIGxpYnJhcmllcyBhcmUgbm90IHN1cHBvcnRlZC4gUHV0dGluZyB0aGVtCi0gICAgIyBoZXJlIGFsbG93cyB0aGVtIHRvIGJlIG92ZXJyaWRkZW4gaWYgbmVjZXNzYXJ5LgotICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLWV4cG9ydC1keW5hbWljJwotICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KLSAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICduby13aG9sZS1hcmNoaXZlJyA+IC9kZXYvbnVsbDsgdGhlbgotCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKLSAgICAgIGVsc2UKLSAgCXdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgICBmaQotICAgIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz1ubwotICAgIGNhc2UgYCRMRCAtdiAyPi9kZXYvbnVsbGAgaW4KLSAgICAgICpcIFswMV0uKiB8ICpcIDIuWzAtOV0uKiB8ICpcIDIuMTAuKikgOzsgIyBjYXRjaCB2ZXJzaW9ucyA8IDIuMTEKLSAgICAgICpcIDIuMTEuOTMuMC4yXCAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7ICMgUkg3LjMgLi4uCi0gICAgICAqXCAyLjExLjkyLjAuMTJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBNYW5kcmFrZSA4LjIgLi4uCi0gICAgICAqXCAyLjExLiopIDs7ICMgb3RoZXIgMi4xMSB2ZXJzaW9ucwotICAgICAgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OwotICAgIGVzYWMKLQotICAgICMgU2VlIGlmIEdOVSBsZCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXhbMy05XSopCi0gICAgICAjIE9uIEFJWC9QUEMsIHRoZSBHTlUgbGlua2VyIGlzIHZlcnkgYnJva2VuCi0gICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQ7IHRoZW4KLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8RU9GIDE+JjIKLQotKioqIFdhcm5pbmc6IHRoZSBHTlUgbGlua2VyLCBhdCBsZWFzdCB1cCB0byByZWxlYXNlIDIuOS4xLCBpcyByZXBvcnRlZAotKioqIHRvIGJlIHVuYWJsZSB0byByZWxpYWJseSBjcmVhdGUgc2hhcmVkIGxpYnJhcmllcyBvbiBBSVguCi0qKiogVGhlcmVmb3JlLCBsaWJ0b29sIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBJZiB5b3UKLSoqKiByZWFsbHkgY2FyZSBmb3Igc2hhcmVkIGxpYnJhcmllcywgeW91IG1heSB3YW50IHRvIG1vZGlmeSB5b3VyIFBBVEgKLSoqKiBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLUVPRgotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBhbWlnYW9zKikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRybSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0KLSAgICAgICMgU2FtdWVsIEEuIEZhbHZvIElJIDxrYzV0amFAZG9scGhpbi5vcGVucHJvamVjdHMubmV0PiByZXBvcnRzCi0gICAgICAjIHRoYXQgdGhlIHNlbWFudGljcyBvZiBkeW5hbWljIGxpYnJhcmllcyBvbiBBbWlnYU9TLCBhdCBsZWFzdCB1cAotICAgICAgIyB0byB2ZXJzaW9uIDQsIGlzIHRvIHNoYXJlIGRhdGEgYW1vbmcgbXVsdGlwbGUgcHJvZ3JhbXMgbGlua2VkCi0gICAgICAjIHdpdGggdGhlIHNhbWUgZHluYW1pYyBsaWJyYXJ5LiAgU2luY2UgdGhpcyBkb2Vzbid0IG1hdGNoIHRoZQotICAgICAgIyBiZWhhdmlvciBvZiBzaGFyZWQgbGlicmFyaWVzIG9uIG90aGVyIHBsYXRmb3Jtcywgd2UgY2FuJ3QgdXNlCi0gICAgICAjIHRoZW0uCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotCi0gICAgYmVvcyopCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLQkjIEpvc2VwaCBCZWNrZW5iYWNoIDxqcmIzQGJlc3QuY29tPiBzYXlzIHNvbWUgcmVsZWFzZXMgb2YgZ2NjCi0JIyBzdXBwb3J0IC0tdW5kZWZpbmVkLiAgVGhpcyBkZXNlcnZlcyBzb21lIGludmVzdGlnYXRpb24uICBGSVhNRQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgX0xUX0FDX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCBHQ0opIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAotICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9dW5zdXBwb3J0ZWQKLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9bm8KLSAgICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfR0NKPXllcwotICAgICAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAkbGlib2JqcyAkY29udmVuaWVuY2UgfCAkZ2xvYmFsX3N5bWJvbF9waXBlIHwgJFNFRCAtZSAnXCcnL15bQkNER1JTXVsgXS9zLy4qWyBdXChbXiBdKlwpL1wxIERBVEEvJ1wnJyAtZSAnXCcnL15bQUlUV11bIF0vcy8uKlsgXS8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJwotCi0gICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCi0JIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQotCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCi0JICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JZWxzZQotCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7Ci0JICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOwotCWZpfgotCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgaW50ZXJpeFszLTldKikKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGgsJGxpYmRpcicKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0gICAgICAjIEhhY2s6IE9uIEludGVyaXggMy54LCB3ZSBjYW5ub3QgY29tcGlsZSBQSUMgYmVjYXVzZSBvZiBhIGJyb2tlbiBnY2MuCi0gICAgICAjIEluc3RlYWQsIHNoYXJlZCBsaWJyYXJpZXMgYXJlIGxvYWRlZCBhdCBhbiBpbWFnZSBiYXNlICgweDEwMDAwMDAwIGJ5Ci0gICAgICAjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5Ci0gICAgICAjIGNvbnN1bWluZyBhbmQgZnJhZ21lbnRpbmcgcHJvY2Vzcy4gIFRvIGF2b2lkIHRoaXMsIHdlIHBpY2sgYSByYW5kb20sCi0gICAgICAjIDI1NiBLaUItYWxpZ25lZCBpbWFnZSBiYXNlIGJldHdlZW4gMHg1MDAwMDAwMCBhbmQgMHg2RkZDMDAwMCBhdCBsaW5rCi0gICAgICAjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCi0gICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nc2VkICJzLF4sXywiICRleHBvcnRfc3ltYm9scyA+JG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW1+JENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1oLCRzb25hbWUgJHt3bH0tLXJldGFpbi1zeW1ib2xzLWZpbGUsJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHBzeW0gJHt3bH0tLWltYWdlLWJhc2UsYGV4cHIgJHtSQU5ET00tJCR9ICUgNDA5NiAvIDIgXCogMjYyMTQ0ICsgMTM0MjE3NzI4MGAgLW8gJGxpYicKLSAgICAgIDs7Ci0KLSAgICBnbnUqIHwgbGludXgqIHwgaypic2QqLWdudSkKLSAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCXRtcF9hZGRmbGFnPQotCWNhc2UgJGNjX2Jhc2VuYW1lLCRob3N0X2NwdSBpbgotCXBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCi0JICA7OwotCXBnZjc3KiB8IHBnZjkwKiB8IHBnZjk1KikJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKLQkgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcgLU1ub21haW4nIDs7Ci0JZWNjKixpYTY0KiB8IGljYyosaWE2NCopCQkjIEludGVsIEMgY29tcGlsZXIgb24gaWE2NAotCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljJyA7OwotCWVmYyosaWE2NCogfCBpZm9ydCosaWE2NCopCSMgSW50ZWwgRm9ydHJhbiBjb21waWxlciBvbiBpYTY0Ci0JICB0bXBfYWRkZmxhZz0nIC1pX2R5bmFtaWMgLW5vZm9yX21haW4nIDs7Ci0JaWZjKiB8IGlmb3J0KikJCQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIKLQkgIHRtcF9hZGRmbGFnPScgLW5vZm9yX21haW4nIDs7Ci0JZXNhYwotCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgotCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45Ci0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgJGVjaG8gXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJwotCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OwotCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCi0JICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7Ci0JKikKLQkgIHRtcF9zaGFyZWRmbGFnPSctc2hhcmVkJyA7OwotCWVzYWMKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCi0JaWYgdGVzdCAkc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nID0geWVzOyB0aGVuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+Ci0gIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KLSAgJGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgotCSAgJENDICciJHRtcF9zaGFyZWRmbGFnIiIkdG1wX2FkZGZsYWciJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tdmVyc2lvbi1zY3JpcHQgJHt3bH0kb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXIgLW8gJGxpYicKLQlmaQotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgbmV0YnNkKikKLSAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgZ3JlcCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUJzaGFyZWFibGUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtbyAkbGliJwotCXdsYXJjPQotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc29sYXJpcyopCi0gICAgICBpZiAkTEQgLXYgMj4mMSB8IGdyZXAgJ0JGRCAyXC44JyA+IC9kZXYvbnVsbDsgdGhlbgotCWxkX3NobGlic19HQ0o9bm8KLQljYXQgPDxFT0YgMT4mMgotCi0qKiogV2FybmluZzogVGhlIHJlbGVhc2VzIDIuOC4qIG9mIHRoZSBHTlUgbGlua2VyIGNhbm5vdCByZWxpYWJseQotKioqIGNyZWF0ZSBzaGFyZWQgbGlicmFyaWVzIG9uIFNvbGFyaXMgc3lzdGVtcy4gIFRoZXJlZm9yZSwgbGlidG9vbAotKioqIGlzIGRpc2FibGluZyBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQuICBXZSB1cmdlIHlvdSB0byB1cGdyYWRlIEdOVQotKioqIGJpbnV0aWxzIHRvIHJlbGVhc2UgMi45LjEgb3IgbmV3ZXIuICBBbm90aGVyIG9wdGlvbiBpcyB0byBtb2RpZnkKLSoqKiB5b3VyIFBBVEggb3IgY29tcGlsZXIgY29uZmlndXJhdGlvbiBzbyB0aGF0IHRoZSBuYXRpdmUgbGlua2VyIGlzCi0qKiogdXNlZCwgYW5kIHRoZW4gcmVzdGFydC4KLQotRU9GCi0gICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8IGdyZXAgJzogc3VwcG9ydGVkIHRhcmdldHM6LiogZWxmJyA+IC9kZXYvbnVsbDsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlsZF9zaGxpYnNfR0NKPW5vCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCi0gICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KLSAgICAgICAgKlwgWzAxXS4qIHwgKlwgMi5bMC05XS4qIHwgKlwgMi4xWzAtNV0uKikKLQlsZF9zaGxpYnNfR0NKPW5vCi0JY2F0IDw8X0xUX0VPRiAxPiYyCi0KLSoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90Ci0qKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKLSoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKLSoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5Ci0qKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcwotKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCi0KLV9MVF9FT0YKLQk7OwotCSopCi0JICBpZiAkTEQgLS1oZWxwIDI+JjEgfCBncmVwICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KLQkgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9J2B0ZXN0IC16ICIkU0NPQUJTUEFUSCIgJiYgZWNobyAke3dsfS1ycGF0aCwkbGliZGlyYCcKLQkgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSAtbyAkbGliJwotCSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSxcJHtTQ09BQlNQQVRIOiske2luc3RhbGxfbGliZGlyfS99JHNvbmFtZSwtcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKLQkgIGVsc2UKLQkgICAgbGRfc2hsaWJzX0dDSj1ubwotCSAgZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgOzsKLQotICAgIHN1bm9zNCopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgd2xhcmM9Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAqKQotICAgICAgaWYgJExEIC0taGVscCAyPiYxIHwgZ3JlcCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scyAtbyAkbGliJwotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotICAgIGVzYWMKLQotICAgIGlmIHRlc3QgIiRsZF9zaGxpYnNfR0NKIiA9IG5vOyB0aGVuCi0gICAgICBydW5wYXRoX3Zhcj0KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPQotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0KLSAgICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSj0KLSAgICBmaQotICBlbHNlCi0gICAgIyBQT1JUTUUgZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgbGlua2VyIChub3QgR05VIGxkKQotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBhaXgzKikKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgYWx3YXlzX2V4cG9ydF9zeW1ib2xzX0dDSj15ZXMKLSAgICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckTEQgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1iRTokZXhwb3J0X3N5bWJvbHMgLVQ1MTIgLUg1MTIgLWJNOlNSRX4kQVIgJEFSX0ZMQUdTICRsaWIgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKLSAgICAgICMgTm90ZTogdGhpcyBsaW5rZXIgaGFyZGNvZGVzIHRoZSBkaXJlY3RvcmllcyBpbiBMSUJQQVRIIGlmIHRoZXJlCi0gICAgICAjIGFyZSBubyBkaXJlY3RvcmllcyBzcGVjaWZpZWQgYnkgLUwuCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzICYmIHRlc3QgLXogIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyI7IHRoZW4KLQkjIE5laXRoZXIgZGlyZWN0IGhhcmRjb2Rpbmcgbm9yIHN0YXRpYyBsaW5raW5nIGlzIHN1cHBvcnRlZCB3aXRoIGEKLQkjIGJyb2tlbiBjb2xsZWN0Mi4KLQloYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFpeFs0LTldKikKLSAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAotCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9IiIKLSAgICAgIGVsc2UKLQkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KLQkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCi0JaWYgJE5NIC1WIDI+JjEgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCi0JICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSj0nJE5NIC1CcGcgJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgYXdrICdcJyd7IGlmICgoKFwkMiA9PSAiVCIpIHx8IChcJDIgPT0gIkQiKSB8fCAoXCQyID09ICJCIikpICYmIChzdWJzdHIoXCQzLDEsMSkgIT0gIi4iKSkgeyBwcmludCBcJDMgfSB9J1wnJyB8IHNvcnQgLXUgPiAkZXhwb3J0X3N5bWJvbHMnCi0JZWxzZQotCSAgZXhwb3J0X3N5bWJvbHNfY21kc19HQ0o9JyROTSAtQkNwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQyID09ICJUIikgfHwgKFwkMiA9PSAiRCIpIHx8IChcJDIgPT0gIkIiKSkgJiYgKHN1YnN0cihcJDMsMSwxKSAhPSAiLiIpKSB7IHByaW50IFwkMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKLQlmaQotCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KLQotCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAotCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQotCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlsyM118YWl4NC5bMjNdLip8YWl4WzUtOV0qKQotCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCi0gIAkgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gIAkgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKLSAgCSAgICBicmVhawotICAJICBmaQotCSAgZG9uZQotCSAgOzsKLQllc2FjCi0KLQlleHBfc3ltX2ZsYWc9Jy1iZXhwb3J0JwotCW5vX2VudHJ5X2ZsYWc9Jy1ibm9lbnRyeScKLSAgICAgIGZpCi0KLSAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KLSAgICAgICMgaGF2ZSBwcm9ibGVtcyBjcmVhdGluZyB0aGUgdGFibGUgb2YgY29udGVudHMuICBJZiBsaW5raW5nIGEgbGlicmFyeQotICAgICAgIyBvciBwcm9ncmFtIHJlc3VsdHMgaW4gImVycm9yIFRPQyBvdmVyZmxvdyIgYWRkIC1tbWluaW1hbC10b2MgdG8KLSAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90Ci0gICAgICAjIGVub3VnaCB0byBmaXggdGhlIHByb2JsZW0sIGFkZCAtV2wsLWJiaWd0b2MgdG8gTERGTEFHUy4KLQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0KLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JY2FzZSAkaG9zdF9vcyBpbiBhaXg0LlswMTJdfGFpeDQuWzAxMl0uKikKLQkjIFdlIG9ubHkgd2FudCB0byBkbyB0aGlzIG9uIEFJWCA0LjIgYW5kIGxvd2VyLCB0aGUgY2hlY2sKLQkjIGJlbG93IGZvciBicm9rZW4gY29sbGVjdDIgZG9lc24ndCB3b3JrIHVuZGVyIDQuMysKLQkgIGNvbGxlY3QybmFtZT1gJHtDQ30gLXByaW50LXByb2ctbmFtZT1jb2xsZWN0MmAKLQkgIGlmIHRlc3QgLWYgIiRjb2xsZWN0Mm5hbWUiICYmIFwKLSAgCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgZ3JlcCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKLQkgIHRoZW4KLSAgCSAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCi0gIAkgIDoKLQkgIGVsc2UKLSAgCSAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgotICAJICBoYXJkY29kZV9kaXJlY3RfR0NKPXVuc3VwcG9ydGVkCi0gIAkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKLSAgCSAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKLSAgCSAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCi0gIAkgIGhhcmRjb2RlX21pbnVzX0xfR0NKPXllcwotICAJICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLUwkbGliZGlyJwotICAJICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj0KLQkgIGZpCi0JICA7OwotCWVzYWMKLQlzaGFyZWRfZmxhZz0nLXNoYXJlZCcKLQlpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJwotCWZpCi0gICAgICBlbHNlCi0JIyBub3QgdXNpbmcgZ2NjCi0JaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KLSAgCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCi0gIAkjIGNob2tlcyBvbiAtV2wsLUcuIFRoZSBmb2xsb3dpbmcgbGluZSBpcyBjb3JyZWN0OgotCSAgc2hhcmVkX2ZsYWc9Jy1HJwotCWVsc2UKLQkgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgotCSAgICBzaGFyZWRfZmxhZz0nJHt3bH0tRycKLQkgIGVsc2UKLQkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKLQkgIGZpCi0JZmkKLSAgICAgIGZpCi0KLSAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAotICAgICAgIyB1bmRlcnNjb3JlIChfKSwgc28gaXQgaXMgYmV0dGVyIHRvIGdlbmVyYXRlIGEgbGlzdCBvZiBzeW1ib2xzIHRvIGV4cG9ydC4KLSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0o9eWVzCi0gICAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLQkjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW50aW1lIGxvYWRpbmcgZmxhZ3MgKC1icnRsKSwKLQkjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPSctYmVyb2snCi0gICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0gICAgICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLWludAotbWFpbiAoKQotewotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLQotbHRfYWl4X2xpYnBhdGhfc2VkPScKLSAgICAvSW1wb3J0IEZpbGUgU3RyaW5ncy8sL14kLyB7Ci0JL14wLyB7Ci0JICAgIHMvXjAgICpcKC4qXCkkL1wxLwotCSAgICBwCi0JfQotICAgIH0nCi1haXhfbGlicGF0aD1gZHVtcCAtSCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKLSMgQ2hlY2sgZm9yIGEgNjQtYml0IG9iamVjdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnl0aGluZy4KLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4KLSAgYWl4X2xpYnBhdGg9YGR1bXAgLUhYNjQgY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi1maQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgLXogIiRhaXhfbGlicGF0aCI7IHRoZW4gYWl4X2xpYnBhdGg9Ii91c3IvbGliOi9saWIiOyBmaQotCi0gICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9IlwkQ0MiJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGVjaG8gIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCi0gICAgICAgZWxzZQotCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0JICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCi0JICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9Ii16IG5vZGVmcyIKLQkgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgotCWVsc2UKLQkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuIGVtcHR5IGV4ZWN1dGFibGUuCi0JIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0KLWx0X2FpeF9saWJwYXRoX3NlZD0nCi0gICAgL0ltcG9ydCBGaWxlIFN0cmluZ3MvLC9eJC8gewotCS9eMC8gewotCSAgICBzL14wICAqXCguKlwpJC9cMS8KLQkgICAgcAotCX0KLSAgICB9JwotYWl4X2xpYnBhdGg9YGR1bXAgLUggY29uZnRlc3QkYWNfZXhlZXh0IDI+L2Rldi9udWxsIHwgJFNFRCAtbiAtZSAiJGx0X2FpeF9saWJwYXRoX3NlZCJgCi0jIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCi1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuCi0gIGFpeF9saWJwYXRoPWBkdW1wIC1IWDY0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0IC16ICIkYWl4X2xpYnBhdGgiOyB0aGVuIGFpeF9saWJwYXRoPSIvdXNyL2xpYjovbGliIjsgZmkKLQotCSBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tYmxpYnBhdGg6JGxpYmRpcjonIiRhaXhfbGlicGF0aCIKLQkgICMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1biB0aW1lIGxvYWRpbmcgZmxhZ3MsCi0JICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCi0JICBub191bmRlZmluZWRfZmxhZ19HQ0o9JyAke3dsfS1iZXJub3RvaycKLQkgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWJlcm9rJwotCSAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyRjb252ZW5pZW5jZScKLQkgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj15ZXMKLQkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCi0JICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJwotCWZpCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGFtaWdhb3MqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JGVjaG8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRlY2hvICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kZWNobyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgICMgc2VlIGNvbW1lbnQgYWJvdXQgZGlmZmVyZW50IHNlbWFudGljcyBvbiB0aGUgR05VIGxkIHNlY3Rpb24KLSAgICAgIGxkX3NobGlic19HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBic2RpWzQ1XSopCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPS1yZHluYW1pYwotICAgICAgOzsKLQotICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKikKLSAgICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCi0gICAgICAjIE1pY3Jvc29mdCBWaXN1YWwgQysrLgotICAgICAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcwotICAgICAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScgJwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPXVuc3VwcG9ydGVkCi0gICAgICAjIFRlbGwgbHRtYWluIHRvIG1ha2UgLmxpYiBmaWxlcywgbm90IC5hIGZpbGVzLgotICAgICAgbGliZXh0PWxpYgotICAgICAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCi0gICAgICBzaHJleHRfY21kcz0iLmRsbCIKLSAgICAgICMgRklYTUU6IFNldHRpbmcgbGlua25hbWVzIGhlcmUgaXMgYSBiYWQgaGFjay4KLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZWNobyAiJGRlcGxpYnMiIHwgJFNFRCAtZSAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JwotICAgICAgIyBUaGUgbGlua2VyIHdpbGwgYXV0b21hdGljYWxseSBidWlsZCBhIC5saWIgZmlsZSBpZiB3ZSBidWlsZCBhIERMTC4KLSAgICAgIG9sZF9hcmNoaXZlX0Zyb21fbmV3X2NtZHNfR0NKPSd0cnVlJwotICAgICAgIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KLSAgICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKPSdsaWIgLU9VVDokb2xkbGliJG9sZG9ianMkb2xkX2RlcGxpYnMnCi0gICAgICBmaXhfc3JjZmlsZV9wYXRoX0dDSj0nYGN5Z3BhdGggLXcgIiRzcmNmaWxlImAnCi0gICAgICBlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSj15ZXMKLSAgICAgIDs7Ci0KLSAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQotICAgICAgY2FzZSAkaG9zdF9vcyBpbgotICAgICAgICByaGFwc29keSogfCBkYXJ3aW4xLlswMTJdKQotICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIDs7Ci0gICAgICAgKikgIyBEYXJ3aW4gMS4zIG9uCi0gICAgICAgICBpZiB0ZXN0IC16ICR7TUFDT1NYX0RFUExPWU1FTlRfVEFSR0VUfSA7IHRoZW4KLSAgICAgICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycKLSAgICAgICAgIGVsc2UKLSAgICAgICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVH0gaW4KLSAgICAgICAgICAgICAxMC5bMDEyXSkKLSAgICAgICAgICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0tZmxhdF9uYW1lc3BhY2UgJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnCi0gICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgIDEwLiopCi0gICAgICAgICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJwotICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgZXNhYwotICAgICAgICAgZmkKLSAgICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX2F1dG9tYXRpY19HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj11bnN1cHBvcnRlZAotICAgICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKPScnCi0gICAgICBsaW5rX2FsbF9kZXBsaWJzX0dDSj15ZXMKLSAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyA7IHRoZW4KLSAgICAJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J2VjaG8nCi0gICAgICAgIGFyY2hpdmVfY21kc19HQ0o9IlwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICRfbHRfZGFyX3NpbmdsZV9tb2Qke19sdF9kc3ltdXRpbH0iCi0gICAgICAgIG1vZHVsZV9jbWRzX0dDSj0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0ic2VkICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAke19sdF9kYXJfc2luZ2xlX21vZH0ke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgotICAgICAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKPSJzZWQgLWUgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiAtYnVuZGxlIFwkbGlib2JqcyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCi0gICAgZWxzZQotICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KLSAgICAgICAgeGxjKikKLSAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdlY2hvJwotICAgICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfWBlY2hvICRycGF0aC8kc29uYW1lYCAkeGxjdmVyc3RyaW5nJwotICAgICAgICAgbW9kdWxlX2NtZHNfR0NKPSckQ0MgJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgLWJ1bmRsZSAkbGlib2JqcyAkZGVwbGlicyRjb21waWxlcl9mbGFncycKLSAgICAgICAgICAjIERvbid0IGZpeCB0aGlzIGJ5IHVzaW5nIHRoZSBsZCAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGZsYWcsIGl0IGRvZXNuJ3QgZXhpc3QgaW4gb2xkZXIgZGFyd2luIGxkcwotICAgICAgICAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDIC1xbWtzaHJvYmogJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWluc3RhbGxfbmFtZSAke3dsfSRycGF0aC8kc29uYW1lICR4bGN2ZXJzdHJpbmd+bm1lZGl0IC1zICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW0gJHtsaWJ9JwotICAgICAgICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0o9J3NlZCAtZSAicywjLiosLCIgLWUgInMsXlsgICAgXSosLCIgLWUgInMsXlwoLi4qXCksXyYsIiA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyR7bGlibmFtZX0tc3ltYm9scy5leHBzeW1+JENDICRhbGxvd191bmRlZmluZWRfZmxhZyAgLW8gJGxpYiAtYnVuZGxlICRsaWJvYmpzICRkZXBsaWJzJGNvbXBpbGVyX2ZsYWdzfm5tZWRpdCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKLSAgICAgICAgICA7OwotICAgICAgICopCi0gICAgICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICAgICAgOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgICAgOzsKLQotICAgIGRndXgqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1MJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgZnJlZWJzZDEqKQotICAgICAgbGRfc2hsaWJzX0dDSj1ubwotICAgICAgOzsKLQotICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgotICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubwotICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQotICAgICMgZXh0cmEgc3BhY2UpLgotICAgIGZyZWVic2QyLjIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctUiRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCi0gICAgZnJlZWJzZDIqKQotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgotICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIGhwdXg5KikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJHJtICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLWZQSUMgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckcm0gJG91dHB1dF9vYmpkaXIvJHNvbmFtZX4kTEQgLWIgK2IgJGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc350ZXN0ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgPSAkbGliIHx8IG12ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYicKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotCi0gICAgICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LUUnCi0gICAgICA7OwotCi0gICAgaHB1eDEwKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzIC1hICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAtZlBJQyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtYiAraCAkc29uYW1lICtiICRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9K2IgJHt3bH0kbGliZGlyJwotCWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLQotCWhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0JZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLQotCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCi0JIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIGhwdXgxMSopCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAtYSAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQlpYTY0KikKLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQkgIDs7Ci0JZXNhYwotICAgICAgZWxzZQotCWNhc2UgJGhvc3RfY3B1IGluCi0JaHBwYSo2NCopCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWlhNjQqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgOzsKLQkqKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JICA7OwotCWVzYWMKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0rYiAke3dsfSRsaWJkaXInCi0JaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotCi0JY2FzZSAkaG9zdF9jcHUgaW4KLQlocHBhKjY0KnxpYTY0KikKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfR0NKPScrYiAkbGliZGlyJwotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotCSAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLQkgIDs7Ci0JKikKLQkgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0JICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1FJwotCi0JICAjIGhhcmRjb2RlX21pbnVzX0w6IE5vdCByZWFsbHkgaW4gdGhlIHNlYXJjaCBQQVRILAotCSAgIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCi0JICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLQkgIDs7Ci0JZXNhYwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICBpcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmdgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGVjaG8gLXNldF92ZXJzaW9uICR2ZXJzdHJpbmdgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX0dDSj0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPToKLSAgICAgIGxpbmtfYWxsX2RlcGxpYnNfR0NKPXllcwotICAgICAgOzsKLQotICAgIG5ldGJzZCopCi0gICAgICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICMgYS5vdXQKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnICAgICAgIyBFTEYKLSAgICAgIGZpCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotICAgICAgaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgbmV3c29zNikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2RpcmVjdF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIDs7Ci0KLSAgICBvcGVuYnNkKikKLSAgICAgIGlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCi0JaGFyZGNvZGVfZGlyZWN0X0dDSj15ZXMKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scycKLQkgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCwkbGliZGlyJwotCSAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nJHt3bH0tRScKLQllbHNlCi0JICBjYXNlICRob3N0X29zIGluCi0JICAgb3BlbmJzZFswMV0uKiB8IG9wZW5ic2QyLlswLTddIHwgb3BlbmJzZDIuWzAtN10uKikKLQkgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtQnNoYXJlYWJsZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLVIkbGliZGlyJwotCSAgICAgOzsKLQkgICAqKQotCSAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCSAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXJwYXRoLCRsaWJkaXInCi0JICAgICA7OwotCSAgZXNhYwotICAgICAgICBmaQotICAgICAgZWxzZQotCWxkX3NobGlic19HQ0o9bm8KLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgb3MyKikKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9taW51c19MX0dDSj15ZXMKLSAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj11bnN1cHBvcnRlZAotICAgICAgYXJjaGl2ZV9jbWRzX0dDSj0nJGVjaG8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kZWNobyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gREFUQSA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gIiBTSU5HTEUgTk9OU0hBUkVEIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+JGVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJwotICAgICAgb2xkX2FyY2hpdmVfRnJvbV9uZXdfY21kc19HQ0o9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKLSAgICAgIDs7Ci0KLSAgICBvc2YzKikKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLSAgICAgIGVsc2UKLQlhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCi0gICAgICBoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX0dDSj06Ci0gICAgICA7OwotCi0gICAgb3NmNCogfCBvc2Y1KikJIyBhcyBvc2YzKiB3aXRoIHRoZSBhZGRpdGlvbiBvZiAtbXN5bSBmbGFnCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvICR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZ2AgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJwotICAgICAgZWxzZQotCWFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBlY2hvIC1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9J2ZvciBpIGluIGBjYXQgJGV4cG9ydF9zeW1ib2xzYDsgZG8gcHJpbnRmICIlcyAlc1xcbiIgLWV4cG9ydGVkX3N5bWJvbCAiXCRpIiA+PiAkbGliLmV4cDsgZG9uZTsgZWNobyAiLWhpZGRlbiI+PiAkbGliLmV4cH4KLQkkTEQgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1pbnB1dCAkbGliLmV4cCAkbGlua2VyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZWNobyAtc2V0X3ZlcnNpb24gJHZlcnN0cmluZ2AgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRybSAkbGliLmV4cCcKLQotCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKLQloYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSj0nLXJwYXRoICRsaWJkaXInCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl9HQ0o9OgotICAgICAgOzsKLQotICAgIHNvbGFyaXMqKQotICAgICAgbm9fdW5kZWZpbmVkX2ZsYWdfR0NKPScgLXogdGV4dCcKLSAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0Jd2xhcmM9JyR7d2x9JwotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LWggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotCWFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKPSckZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH4kZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KLQkgICRDQyAtc2hhcmVkICR7d2x9LU0gJHt3bH0kbGliLmV4cCAke3dsfS1oICR7d2x9JHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBlbHNlCi0Jd2xhcmM9JycKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJGVjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+JGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+Ci0gIAkkTEQgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtTSAkbGliLmV4cCAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFnc34kcm0gJGxpYi5leHAnCi0gICAgICBmaQotICAgICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0o9Jy1SJGxpYmRpcicKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBzb2xhcmlzMi5bMC01XSB8IHNvbGFyaXMyLlswLTVdLiopIDs7Ci0gICAgICAqKQotCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCi0JIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAotCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgotIAkjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQotCWlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKLQllbHNlCi0JICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY19HQ0o9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCi0JZmkKLQk7OwotICAgICAgZXNhYwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgICA7OwotCi0gICAgc3Vub3M0KikKLSAgICAgIGlmIHRlc3QgIngkaG9zdF92ZW5kb3IiID0geHNlcXVlbnQ7IHRoZW4KLQkjIFVzZSAkQ0MgdG8gbGluayB1bmRlciBzZXF1ZW50LCBiZWNhdXNlIGl0IHRocm93cyBpbiBzb21lIGV4dHJhIC5vCi0JIyBmaWxlcyB0aGF0IG1ha2UgLmluaXQgYW5kIC5maW5pIHNlY3Rpb25zIHdvcmsuCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLSAgICAgIGVsc2UKLQlhcmNoaXZlX2NtZHNfR0NKPSckTEQgLWFzc2VydCBwdXJlLXRleHQgLUJzdGF0aWMgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcwotICAgICAgaGFyZGNvZGVfbWludXNfTF9HQ0o9eWVzCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgIHN5c3Y0KQotICAgICAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLQlzbmkpCi0JICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICBoYXJkY29kZV9kaXJlY3RfR0NKPXllcyAjIGlzIHRoaXMgcmVhbGx5IHRydWU/Pz8KLQk7OwotCXNpZW1lbnMpCi0JICAjIyBMRCBpcyBsZCBpdCBtYWtlcyBhIFBMQU1MSUIKLQkgICMjIENDIGp1c3QgbWFrZXMgYSBHcm9zc01vZHVsZS4KLQkgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0JICByZWxvYWRfY21kc19HQ0o9JyRDQyAtciAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubwotICAgICAgICA7OwotCW1vdG9yb2xhKQotCSAgYXJjaGl2ZV9jbWRzX0dDSj0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJwotCSAgaGFyZGNvZGVfZGlyZWN0X0dDSj1ubyAjTW90b3JvbGEgbWFudWFsIHNheXMgeWVzLCBidXQgbXkgdGVzdHMgc2F5IHRoZXkgbGllCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgIHJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKLSAgICAgIGhhcmRjb2RlX3NobGlicGF0aF92YXJfR0NKPW5vCi0gICAgICA7OwotCi0gICAgc3lzdjQuMyopCi0gICAgICBhcmNoaXZlX2NtZHNfR0NKPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjX0dDSj0nLUJleHBvcnQnCi0gICAgICA7OwotCi0gICAgc3lzdjQqTVAqKQotICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLQloYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotCXJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICi0JaGFyZGNvZGVfcnVucGF0aF92YXI9eWVzCi0JbGRfc2hsaWJzX0dDSj15ZXMKLSAgICAgIGZpCi0gICAgICA7OwotCi0gICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLlswMjRdKikKLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0teix0ZXh0JwotICAgICAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPW5vCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKLQlhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSj0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZWxzZQotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBmaQotICAgICAgOzsKLQotICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCi0gICAgICAjIE5vdGU6IFdlIGNhbiBOT1QgdXNlIC16IGRlZnMgYXMgd2UgbWlnaHQgZGVzaXJlLCBiZWNhdXNlIHdlIGRvIG5vdAotICAgICAgIyBsaW5rIHdpdGggLWxjLCBhbmQgdGhhdCB3b3VsZCBjYXVzZSBhbnkgc3ltYm9scyB1c2VkIGZyb20gbGliYyB0bwotICAgICAgIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCi0gICAgICAjIGV2ZXIgbGluayBjb3JyZWN0bHkuICBJZiB3ZSdyZSBub3QgdXNpbmcgR05VIGxkIHdlIHVzZSAteiB0ZXh0Ci0gICAgICAjIHRob3VnaCwgd2hpY2ggZG9lcyBjYXRjaCBzb21lIGJhZCBzeW1ib2xzIGJ1dCBpc24ndCBhcyBoZWF2eS1oYW5kZWQKLSAgICAgICMgYXMgLXogZGVmcy4KLSAgICAgIG5vX3VuZGVmaW5lZF9mbGFnX0dDSj0nJHt3bH0teix0ZXh0JwotICAgICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKPScke3dsfS16LG5vZGVmcycKLSAgICAgIGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSj1ubwotICAgICAgaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0o9bm8KLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSdgdGVzdCAteiAiJFNDT0FCU1BBVEgiICYmIGVjaG8gJHt3bH0tUiwkbGliZGlyYCcKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKPSc6JwotICAgICAgbGlua19hbGxfZGVwbGlic19HQ0o9eWVzCi0gICAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfR0NKPScke3dsfS1CZXhwb3J0JwotICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJwotCi0gICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgotCWFyY2hpdmVfY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0gICAgICBlbHNlCi0JYXJjaGl2ZV9jbWRzX0dDSj0nJENDIC1HICR7d2x9LWgsXCR7U0NPQUJTUEFUSDorJHtpbnN0YWxsX2xpYmRpcn0vfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCi0JYXJjaGl2ZV9leHBzeW1fY21kc19HQ0o9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLFwke1NDT0FCU1BBVEg6KyR7aW5zdGFsbF9saWJkaXJ9L30kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJwotICAgICAgZmkKLSAgICAgIDs7Ci0KLSAgICB1dHM0KikKLSAgICAgIGFyY2hpdmVfY21kc19HQ0o9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKLSAgICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKPSctTCRsaWJkaXInCi0gICAgICBoYXJkY29kZV9zaGxpYnBhdGhfdmFyX0dDSj1ubwotICAgICAgOzsKLQotICAgICopCi0gICAgICBsZF9zaGxpYnNfR0NKPW5vCi0gICAgICA7OwotICAgIGVzYWMKLSAgZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGxkX3NobGlic19HQ0oiID4mNQotZWNobyAiJHtFQ0hPX1R9JGxkX3NobGlic19HQ0oiID4mNgotdGVzdCAiJGxkX3NobGlic19HQ0oiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubwotCi0jCi0jIERvIHdlIG5lZWQgdG8gZXhwbGljaXRseSBsaW5rIGxpYmM/Ci0jCi1jYXNlICJ4JGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgaW4KLXh8eHllcykKLSAgIyBBc3N1bWUgLWxjIHNob3VsZCBiZSBhZGRlZAotICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9eWVzCi0KLSAgaWYgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCi0gICAgY2FzZSAkYXJjaGl2ZV9jbWRzX0dDSiBpbgotICAgIConficqKQotICAgICAgIyBGSVhNRTogd2UgbWF5IGhhdmUgdG8gZGVhbCB3aXRoIG11bHRpLWNvbW1hbmQgc2VxdWVuY2VzLgotICAgICAgOzsKLSAgICAnJENDICcqKQotICAgICAgIyBUZXN0IHdoZXRoZXIgdGhlIGNvbXBpbGVyIGltcGxpY2l0bHkgbGlua3Mgd2l0aCAtbGMgc2luY2Ugb24gc29tZQotICAgICAgIyBzeXN0ZW1zLCAtbGdjYyBoYXMgdG8gY29tZSBiZWZvcmUgLWxjLiBJZiBnY2MgYWxyZWFkeSBwYXNzZXMgLWxjCi0gICAgICAjIHRvIGxkLCBkb24ndCBhZGQgLWxjIGJlZm9yZSAtbGdjYy4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIC1sYyBzaG91bGQgYmUgZXhwbGljaXRseSBsaW5rZWQgaW4uLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAkcm0gY29uZnRlc3QqCi0gICAgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKLQotICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9IDI+Y29uZnRlc3QuZXJyOyB0aGVuCi0gICAgICAgIHNvbmFtZT1jb25mdGVzdAotICAgICAgICBsaWI9Y29uZnRlc3QKLSAgICAgICAgbGlib2Jqcz1jb25mdGVzdC4kYWNfb2JqZXh0Ci0gICAgICAgIGRlcGxpYnM9Ci0gICAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsX0dDSgotCXBpY19mbGFnPSRsdF9wcm9nX2NvbXBpbGVyX3BpY19HQ0oKLSAgICAgICAgY29tcGlsZXJfZmxhZ3M9LXYKLSAgICAgICAgbGlua2VyX2ZsYWdzPS12Ci0gICAgICAgIHZlcnN0cmluZz0KLSAgICAgICAgb3V0cHV0X29iamRpcj0uCi0gICAgICAgIGxpYm5hbWU9Y29uZnRlc3QKLSAgICAgICAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKCi0gICAgICAgIGFsbG93X3VuZGVmaW5lZF9mbGFnX0dDSj0KLSAgICAgICAgaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYXJjaGl2ZV9jbWRzX0dDSiAyXD5cJjEgXHwgZ3JlcCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxXCIiKSA+JjUKLSAgKGV2YWwgJGFyY2hpdmVfY21kc19HQ0ogMlw+XCYxIFx8IGdyZXAgXCIgLWxjIFwiIFw+L2Rldi9udWxsIDJcPlwmMSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfQotICAgICAgICB0aGVuCi0JICBhcmNoaXZlX2NtZHNfbmVlZF9sY19HQ0o9bm8KLSAgICAgICAgZWxzZQotCSAgYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKPXllcwotICAgICAgICBmaQotICAgICAgICBhbGxvd191bmRlZmluZWRfZmxhZ19HQ0o9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKLSAgICAgIGVsc2UKLSAgICAgICAgY2F0IGNvbmZ0ZXN0LmVyciAxPiY1Ci0gICAgICBmaQotICAgICAgJHJtIGNvbmZ0ZXN0KgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFyY2hpdmVfY21kc19uZWVkX2xjX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKIiA+JjYKLSAgICAgIDs7Ci0gICAgZXNhYwotICBmaQotICA7OwotZXNhYwotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzLi4uICRFQ0hPX0MiID4mNgotbGlicmFyeV9uYW1lc19zcGVjPQotbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKLXNvbmFtZV9zcGVjPQotc2hyZXh0X2NtZHM9Ii5zbyIKLXBvc3RpbnN0YWxsX2NtZHM9Ci1wb3N0dW5pbnN0YWxsX2NtZHM9Ci1maW5pc2hfY21kcz0KLWZpbmlzaF9ldmFsPQotc2hsaWJwYXRoX3Zhcj0KLXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCi12ZXJzaW9uX3R5cGU9bm9uZQotZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCi0KLW5lZWRfbGliX3ByZWZpeD11bmtub3duCi1oYXJkY29kZV9pbnRvX2xpYnM9bm8KLQotIyB3aGVuIHlvdSBzZXQgbmVlZF92ZXJzaW9uIHRvIG5vLCBtYWtlIHN1cmUgaXQgZG9lcyBub3QgY2F1c2UgLXNldF92ZXJzaW9uCi0jIGZsYWdzIHRvIGJlIGxlZnQgd2l0aG91dCBhcmd1bWVudHMKLW5lZWRfdmVyc2lvbj11bmtub3duCi0KLWNhc2UgJGhvc3Rfb3MgaW4KLWFpeDMqKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lLmEnCi0gIHNobGlicGF0aF92YXI9TElCUEFUSAotCi0gICMgQUlYIDMgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gd2UgYXBwZW5kIGEgbWFqb3IgdmVyc2lvbiB0byB0aGUgbmFtZS4KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgOzsKLQotYWl4WzQtOV0qKQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCi0gICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgZWxzZQotICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKLSAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCi0gICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bwotICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCi0gICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgICBhaXg0IHwgYWl4NC5bMDFdIHwgYWl4NC5bMDFdLiopCi0gICAgICBpZiB7IGVjaG8gJyNpZiBfX0dOVUNfXyA+IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPj0gOTcpJwotCSAgIGVjaG8gJyB5ZXMgJwotCSAgIGVjaG8gJyNlbmRpZic7IH0gfCAke0NDfSAtRSAtIHwgZ3JlcCB5ZXMgPiAvZGV2L251bGw7IHRoZW4KLQk6Ci0gICAgICBlbHNlCi0JY2FuX2J1aWxkX3NoYXJlZD1ubwotICAgICAgZmkKLSAgICAgIDs7Ci0gICAgZXNhYwotICAgICMgQUlYIChvbiBQb3dlciopIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIGN1cnJlbnRseSB3ZSBjYW4gbm90IGhhcmRjb2RlIGNvcnJlY3QKLSAgICAjIHNvbmFtZSBpbnRvIGV4ZWN1dGFibGUuIFByb2JhYmx5IHdlIGNhbiBhZGQgdmVyc2lvbmluZyBzdXBwb3J0IHRvCi0gICAgIyBjb2xsZWN0Miwgc28gYWRkaXRpb25hbCBsaW5rcyBjYW4gYmUgdXNlZnVsIGluIGZ1dHVyZS4KLSAgICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KLSAgICAgICMgSWYgdXNpbmcgcnVuIHRpbWUgbGlua2luZyAob24gQUlYIDQuMiBvciBsYXRlcikgdXNlIGxpYjxuYW1lPi5zbwotICAgICAgIyBpbnN0ZWFkIG9mIGxpYjxuYW1lPi5hIHRvIGxldCBwZW9wbGUga25vdyB0aGF0IHRoZXNlIGFyZSBub3QKLSAgICAgICMgdHlwaWNhbCBBSVggc2hhcmVkIGxpYnJhcmllcy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIGVsc2UKLSAgICAgICMgV2UgcHJlc2VydmUgLmEgYXMgZXh0ZW5zaW9uIGZvciBzaGFyZWQgbGlicmFyaWVzIHRocm91Z2ggQUlYNC4yCi0gICAgICAjIGFuZCBsYXRlciB3aGVuIHdlIGFyZSBub3QgZG9pbmcgcnVuIHRpbWUgbGlua2luZy4KLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0uYSAkbGlibmFtZS5hJwotICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBmaQotICAgIHNobGlicGF0aF92YXI9TElCUEFUSAotICBmaQotICA7OwotCi1hbWlnYW9zKikKLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5peGxpYnJhcnkgJGxpYm5hbWUuYScKLSAgIyBDcmVhdGUgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSBlbnRyaWVzIGluIC9zeXMvbGlicy4KLSAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ1wnJ3MlXi4qL1woW14vXSpcKVwuaXhsaWJyYXJ5JCVcMSUnXCcnYDsgdGVzdCAkcm0gL3N5cy9saWJzLyR7bGlibmFtZX1faXhsaWJyYXJ5LmE7ICRzaG93ICJjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIjsgY2QgL3N5cy9saWJzICYmICRMTl9TICRsaWIgJHtsaWJuYW1lfV9peGxpYnJhcnkuYSB8fCBleGl0IDE7IGRvbmUnCi0gIDs7Ci0KLWJlb3MqKQotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JwotICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCi0gIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICi0gIDs7Ci0KLWJzZGlbNDVdKikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvc2hsaWIgL3Vzci9saWIgL3Vzci9YMTEvbGliIC91c3IvY29udHJpYi9saWIgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgIyB0aGUgZGVmYXVsdCBsZC5zby5jb25mIGFsc28gY29udGFpbnMgL3Vzci9jb250cmliL2xpYiBhbmQKLSAgIyAvdXNyL1gxMVI2L2xpYiAoL3Vzci9YMTEgaXMgYSBsaW5rIHRvIC91c3IvWDExUjYpLCBidXQgbGV0IHVzIGFsbG93Ci0gICMgbGlidG9vbCB0byBoYXJkLWNvZGUgdGhlc2UgaW50byBwcm9ncmFtcwotICA7OwotCi1jeWd3aW4qIHwgbWluZ3cqIHwgcHczMiopCi0gIHZlcnNpb25fdHlwZT13aW5kb3dzCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX3ZlcnNpb249bm8KLSAgbmVlZF9saWJfcHJlZml4PW5vCi0KLSAgY2FzZSAkR0NDLCRob3N0X29zIGluCi0gIHllcyxjeWd3aW4qIHwgeWVzLG1pbmd3KiB8IHllcyxwdzMyKikKLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLmRsbC5hJwotICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKLSAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KLSAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpO2VjaG8gXCRkbG5hbWUnXCcnYH4KLSAgICAgIGRsZGlyPSRkZXN0ZGlyL2BkaXJuYW1lIFwkZGxwYXRoYH4KLSAgICAgIHRlc3QgLWQgXCRkbGRpciB8fCBta2RpciAtcCBcJGRsZGlyfgotICAgICAgJGluc3RhbGxfcHJvZyAkZGlyLyRkbG5hbWUgXCRkbGRpci8kZGxuYW1lfgotICAgICAgY2htb2QgYSt4IFwkZGxkaXIvJGRsbmFtZScKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgotICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KLSAgICAgICAkcm0gXCRkbHBhdGgnCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCi0gICAgY2FzZSAkaG9zdF9vcyBpbgotICAgIGN5Z3dpbiopCi0gICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKLSAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIgL2xpYi93MzJhcGkgL2xpYiAvdXNyL2xvY2FsL2xpYiIKLSAgICAgIDs7Ci0gICAgbWluZ3cqKQotICAgICAgIyBNaW5HVyBETExzIHVzZSB0cmFkaXRpb25hbCAnbGliJyBwcmVmaXgKLSAgICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKLSAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGdyZXAgIl5saWJyYXJpZXM6IiB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgInMsPS8sLyxnImAKLSAgICAgIGlmIGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgZ3JlcCAnO1tjLXpDLVpdOi8nID4vZGV2L251bGw7IHRoZW4KLSAgICAgICAgIyBJdCBpcyBtb3N0IHByb2JhYmx5IGEgV2luZG93cyBmb3JtYXQgUEFUSCBwcmludGVkIGJ5Ci0gICAgICAgICMgbWluZ3cgZ2NjLCBidXQgd2UgYXJlIHJ1bm5pbmcgb24gQ3lnd2luLiBHY2MgcHJpbnRzIGl0cyBzZWFyY2gKLSAgICAgICAgIyBwYXRoIHdpdGggOyBzZXBhcmF0b3JzLCBhbmQgd2l0aCBkcml2ZSBsZXR0ZXJzLiBXZSBjYW4gaGFuZGxlIHRoZQotICAgICAgICAjIGRyaXZlIGxldHRlcnMgKGN5Z3dpbiBmaWxldXRpbHMgdW5kZXJzdGFuZHMgdGhlbSksIHNvIGxlYXZlIHRoZW0sCi0gICAgICAgICMgZXNwZWNpYWxseSBhcyB3ZSBtaWdodCBwYXNzIGZpbGVzIGZvdW5kIHRoZXJlIHRvIGEgbWluZ3cgb2JqZHVtcCwKLSAgICAgICAgIyB3aGljaCB3b3VsZG4ndCB1bmRlcnN0YW5kIGEgY3lnd2luaWZpZWQgcGF0aC4gQWhoLgotICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGVjaG8gIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAtZSAncy87LyAvZydgCi0gICAgICBlbHNlCi0gICAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gZWNobyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICAtZSAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKLSAgICAgIGZpCi0gICAgICA7OwotICAgIHB3MzIqKQotICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCi0gICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1suXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCi0gICAgICA7OwotICAgIGVzYWMKLSAgICA7OwotCi0gICopCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvWy5dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fSAkbGlibmFtZS5saWInCi0gICAgOzsKLSAgZXNhYwotICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJwotICAjIEZJWE1FOiBmaXJzdCB3ZSBzaG91bGQgc2VhcmNoIC4gYW5kIHRoZSBkaXJlY3RvcnkgdGhlIGV4ZWN1dGFibGUgaXMgaW4KLSAgc2hsaWJwYXRoX3Zhcj1QQVRICi0gIDs7Ci0KLWRhcndpbiogfCByaGFwc29keSopCi0gIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBkeWxkIgotICB2ZXJzaW9uX3R5cGU9ZGFyd2luCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7dmVyc3VmZml4fSRzaGFyZWRfZXh0ICR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCAke2xpYm5hbWV9JHNoYXJlZF9leHQnCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7bWFqb3J9JHNoYXJlZF9leHQnCi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgc2hsaWJwYXRoX3Zhcj1EWUxEX0xJQlJBUllfUEFUSAotICBzaHJleHRfY21kcz0nYHRlc3QgLiRtb2R1bGUgPSAueWVzICYmIGVjaG8gLnNvIHx8IGVjaG8gLmR5bGliYCcKLQotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL2xpYiAvdXNyL2xpYicKLSAgOzsKLQotZGd1eCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUkc2hhcmVkX2V4dCcKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotZnJlZWJzZDEqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi1mcmVlYnNkKiB8IGRyYWdvbmZseSopCi0gICMgRHJhZ29uRmx5IGRvZXMgbm90IGhhdmUgYW91dC4gIFdoZW4vaWYgdGhleSBpbXBsZW1lbnQgYSBuZXcKLSAgIyB2ZXJzaW9uaW5nIG1lY2hhbmlzbSwgYWRqdXN0IHRoaXMuCi0gIGlmIHRlc3QgLXggL3Vzci9iaW4vb2JqZm9ybWF0OyB0aGVuCi0gICAgb2JqZm9ybWF0PWAvdXNyL2Jpbi9vYmpmb3JtYXRgCi0gIGVsc2UKLSAgICBjYXNlICRob3N0X29zIGluCi0gICAgZnJlZWJzZFsxMjNdKikgb2JqZm9ybWF0PWFvdXQgOzsKLSAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7Ci0gICAgZXNhYwotICBmaQotICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0Ci0gIGNhc2UgJHZlcnNpb25fdHlwZSBpbgotICAgIGZyZWVic2QtZWxmKikKLSAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgICAgbmVlZF92ZXJzaW9uPW5vCi0gICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgICAgIDs7Ci0gICAgZnJlZWJzZC0qKQotICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gICAgICBuZWVkX3ZlcnNpb249eWVzCi0gICAgICA7OwotICBlc2FjCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgZnJlZWJzZDIqKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICA7OwotICBmcmVlYnNkMy5bMDFdKiB8IGZyZWVic2RlbGYzLlswMV0qKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgOzsKLSAgZnJlZWJzZDMuWzItOV0qIHwgZnJlZWJzZGVsZjMuWzItOV0qIHwgXAotICBmcmVlYnNkNC5bMC01XSB8IGZyZWVic2RlbGY0LlswLTVdIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5Ci0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgICA7OwotICBlc2FjCi0gIDs7Ci0KLWdudSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1ocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKLSAgIyBHaXZlIGEgc29uYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1ham9yIHZlcnNpb24gc28gdGhhdCBkbGQuc2wgcmVmdXNlcyB0bwotICAjIGxpbmsgYWdhaW5zdCBvdGhlciB2ZXJzaW9ucy4KLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgY2FzZSAkaG9zdF9jcHUgaW4KLSAgaWE2NCopCi0gICAgc2hyZXh0X2NtZHM9Jy5zbycKLSAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbyIKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMgIyBVbmxlc3MgK25vZW52dmFyIGlzIHNwZWNpZmllZC4KLSAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICAgIGlmIHRlc3QgIlgkSFBVWF9JQTY0X01PREUiID0gWDMyOyB0aGVuCi0gICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYi9ocHV4MzIgL3Vzci9sb2NhbC9saWIiCi0gICAgZWxzZQotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9ocHV4NjQgL3Vzci9sb2NhbC9saWIvaHB1eDY0IgotICAgIGZpCi0gICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotICAgIDs7Ci0gICBocHBhKjY0KikKLSAgICAgc2hyZXh0X2NtZHM9Jy5zbCcKLSAgICAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgotICAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKLSAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgotICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYi9wYTIwXzY0IC91c3IvY2NzL2xpYi9wYTIwXzY0IgotICAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCi0gICAgIDs7Ci0gICAqKQotICAgIHNocmV4dF9jbWRzPScuc2wnCi0gICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKLSAgICBzaGxpYnBhdGhfdmFyPVNITElCX1BBVEgKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8gIyArcyBpcyByZXF1aXJlZCB0byBlbmFibGUgU0hMSUJfUEFUSAotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gICAgOzsKLSAgZXNhYwotICAjIEhQLVVYIHJ1bnMgKnJlYWxseSogc2xvd2x5IHVubGVzcyBzaGFyZWQgbGlicmFyaWVzIGFyZSBtb2RlIDU1NS4KLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCi0gIDs7Ci0KLWludGVyaXhbMy05XSopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGR5bmFtaWNfbGlua2VyPSdJbnRlcml4IDMueCBsZC5zby4xIChQRSwgbGlrZSBFTEYpJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi1pcml4NSogfCBpcml4NiogfCBub25zdG9wdXgqKQotICBjYXNlICRob3N0X29zIGluCi0gICAgbm9uc3RvcHV4KikgdmVyc2lvbl90eXBlPW5vbnN0b3B1eCA7OwotICAgICopCi0JaWYgdGVzdCAiJGx0X2N2X3Byb2dfZ251X2xkIiA9IHllczsgdGhlbgotCQl2ZXJzaW9uX3R5cGU9bGludXgKLQllbHNlCi0JCXZlcnNpb25fdHlwZT1pcml4Ci0JZmkgOzsKLSAgZXNhYwotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgY2FzZSAkaG9zdF9vcyBpbgotICBpcml4NSogfCBub25zdG9wdXgqKQotICAgIGxpYnN1ZmY9IHNobGlic3VmZj0KLSAgICA7OwotICAqKQotICAgIGNhc2UgJExEIGluICMgbGlidG9vbC5tNCB3aWxsIGFkZCBvbmUgb2YgdGhlc2Ugc3dpdGNoZXMgdG8gTEQKLSAgICAqLTMyfCoiLTMyICJ8Ki1tZWxmMzJic21pcHwqIi1tZWxmMzJic21pcCAiKQotICAgICAgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz0zMi1iaXQ7OwotICAgICotbjMyfCoiLW4zMiAifCotbWVsZjMyYm1pcG4zMnwqIi1tZWxmMzJibWlwbjMyICIpCi0gICAgICBsaWJzdWZmPTMyIHNobGlic3VmZj1OMzIgbGlibWFnaWM9TjMyOzsKLSAgICAqLTY0fCoiLTY0ICJ8Ki1tZWxmNjRibWlwfCoiLW1lbGY2NGJtaXAgIikKLSAgICAgIGxpYnN1ZmY9NjQgc2hsaWJzdWZmPTY0IGxpYm1hZ2ljPTY0LWJpdDs7Ci0gICAgKikgbGlic3VmZj0gc2hsaWJzdWZmPSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7Ci0gICAgZXNhYwotICAgIDs7Ci0gIGVzYWMKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZJHtzaGxpYnN1ZmZ9X1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIke2xpYnN1ZmZ9IC9saWIke2xpYnN1ZmZ9IC91c3IvbG9jYWwvbGliJHtsaWJzdWZmfSIKLSAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSIKLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotICA7OwotCi0jIE5vIHNoYXJlZCBsaWIgc3VwcG9ydCBmb3IgTGludXggb2xkbGQsIGFvdXQsIG9yIGNvZmYuCi1saW51eCpvbGRsZCogfCBsaW51eCphb3V0KiB8IGxpbnV4KmNvZmYqKQotICBkeW5hbWljX2xpbmtlcj1ubwotICA7OwotCi0jIFRoaXMgbXVzdCBiZSBMaW51eCBFTEYuCi1saW51eCogfCBrKmJzZCotZ251KQotICB2ZXJzaW9uX3R5cGU9bGludXgKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0gICMgVGhpcyBpbXBsaWVzIG5vIGZhc3RfaW5zdGFsbCwgd2hpY2ggaXMgdW5hY2NlcHRhYmxlLgotICAjIFNvbWUgcmV3b3JrIHdpbGwgYmUgbmVlZGVkIHRvIGFsbG93IGZvciBmYXN0X2luc3RhbGwKLSAgIyBiZWZvcmUgdGhpcyBjYW4gYmUgZW5hYmxlZC4KLSAgaGFyZGNvZGVfaW50b19saWJzPXllcwotCi0gICMgQXBwZW5kIGxkLnNvLmNvbmYgY29udGVudHMgdG8gdGhlIHNlYXJjaCBwYXRoCi0gIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCi0gICAgbHRfbGRfZXh0cmE9YGF3ayAnL15pbmNsdWRlIC8geyBzeXN0ZW0oc3ByaW50ZigiY2QgL2V0YzsgY2F0ICVzIDI+L2Rldi9udWxsIiwgXCQyKSk7IHNraXAgPSAxOyB9IHsgaWYgKCFza2lwKSBwcmludCBcJDA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bIAldKmh3Y2FwWyAJXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nOy9eJC9kJyB8IHRyICdcbicgJyAnYAotICAgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliICRsdF9sZF9leHRyYSIKLSAgZmkKLQotICAjIFdlIHVzZWQgdG8gdGVzdCBmb3IgL2xpYi9sZC5zby4xIGFuZCBkaXNhYmxlIHNoYXJlZCBsaWJyYXJpZXMgb24KLSAgIyBwb3dlcnBjLCBiZWNhdXNlIE1rTGludXggb25seSBzdXBwb3J0ZWQgc2hhcmVkIGxpYnJhcmllcyB3aXRoIHRoZQotICAjIEdOVSBkeW5hbWljIGxpbmtlci4gIFNpbmNlIHRoaXMgd2FzIGJyb2tlbiB3aXRoIGNyb3NzIGNvbXBpbGVycywKLSAgIyBtb3N0IHBvd2VycGMtbGludXggYm94ZXMgc3VwcG9ydCBkeW5hbWljIGxpbmtpbmcgdGhlc2UgZGF5cyBhbmQKLSAgIyBwZW9wbGUgY2FuIGFsd2F5cyAtLWRpc2FibGUtc2hhcmVkLCB0aGUgdGVzdCB3YXMgcmVtb3ZlZCwgYW5kIHdlCi0gICMgYXNzdW1lIHRoZSBHTlUvTGludXggZHluYW1pYyBsaW5rZXIgaXMgaW4gdXNlLgotICBkeW5hbWljX2xpbmtlcj0nR05VL0xpbnV4IGxkLnNvJwotICA7OwotCi1uZXRic2QqKQotICB2ZXJzaW9uX3R5cGU9c3Vub3MKLSAgbmVlZF9saWJfcHJlZml4PW5vCi0gIG5lZWRfdmVyc2lvbj1ubwotICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCi0gICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKLSAgICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAtbSAkbGliZGlyJwotICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgKGEub3V0KSBsZC5zbycKLSAgZWxzZQotICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0nCi0gICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgICBkeW5hbWljX2xpbmtlcj0nTmV0QlNEIGxkLmVsZl9zbycKLSAgZmkKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCi0gIDs7Ci0KLW5ld3NvczYpCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICA7OwotCi1udG8tcW54KikKLSAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgOzsKLQotb3BlbmJzZCopCi0gIHZlcnNpb25fdHlwZT1zdW5vcwotICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIiCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICAjIFNvbWUgb2xkZXIgdmVyc2lvbnMgb2YgT3BlbkJTRCAoMy4zIGF0IGxlYXN0KSAqZG8qIG5lZWQgdmVyc2lvbmVkIGxpYnMuCi0gIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBvcGVuYnNkMy4zIHwgb3BlbmJzZDMuMy4qKSBuZWVkX3ZlcnNpb249eWVzIDs7Ci0gICAgKikgICAgICAgICAgICAgICAgICAgICAgICAgbmVlZF92ZXJzaW9uPW5vICA7OwotICBlc2FjCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIG9wZW5ic2QyLls4OV0gfCBvcGVuYnNkMi5bODldLiopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCi0JOzsKLSAgICAgICopCi0Jc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotCTs7Ci0gICAgICBlc2FjCi0gIGVsc2UKLSAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGZpCi0gIDs7Ci0KLW9zMiopCi0gIGxpYm5hbWVfc3BlYz0nJG5hbWUnCi0gIHNocmV4dF9jbWRzPSIuZGxsIgotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUuYScKLSAgZHluYW1pY19saW5rZXI9J09TLzIgbGQuZXhlJwotICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKLSAgOzsKLQotb3NmMyogfCBvc2Y0KiB8IG9zZjUqKQotICB2ZXJzaW9uX3R5cGU9b3NmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9zaGxpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIvY21wbHJzL2NjIC91c3IvbGliIC91c3IvbG9jYWwvbGliIC92YXIvc2hsaWIiCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotICA7OwotCi1yZG9zKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLQotc29sYXJpcyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBuZWVkX2xpYl9wcmVmaXg9bm8KLSAgbmVlZF92ZXJzaW9uPW5vCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JwotICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJwotICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgIyBsZGQgY29tcGxhaW5zIHVubGVzcyBsaWJyYXJpZXMgYXJlIGV4ZWN1dGFibGUKLSAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgK3ggJGxpYicKLSAgOzsKLQotc3Vub3M0KikKLSAgdmVyc2lvbl90eXBlPXN1bm9zCi0gIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCi0gIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3Vzci9ldGMiIGxkY29uZmlnICRsaWJkaXInCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICBmaQotICBuZWVkX3ZlcnNpb249eWVzCi0gIDs7Ci0KLXN5c3Y0IHwgc3lzdjQuMyopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgY2FzZSAkaG9zdF92ZW5kb3IgaW4KLSAgICBzbmkpCi0gICAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9bm8KLSAgICAgIG5lZWRfbGliX3ByZWZpeD1ubwotICAgICAgZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPScke3dsfS1CbGFyZ2VkeW5zeW0nCi0gICAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAotICAgICAgOzsKLSAgICBzaWVtZW5zKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICA7OwotICAgIG1vdG9yb2xhKQotICAgICAgbmVlZF9saWJfcHJlZml4PW5vCi0gICAgICBuZWVkX3ZlcnNpb249bm8KLSAgICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvbGliIC91c3IvbGliIC91c3IvY2NzL2xpYicKLSAgICAgIDs7Ci0gIGVzYWMKLSAgOzsKLQotc3lzdjQqTVAqKQotICBpZiB0ZXN0IC1kIC91c3IvbmVjIDt0aGVuCi0gICAgdmVyc2lvbl90eXBlPWxpbnV4Ci0gICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgICBzb25hbWVfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9LiRtYWpvcicKLSAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAotICBmaQotICA7OwotCi1zeXN2NSogfCBzY28zLjJ2NSogfCBzY281djYqIHwgdW5peHdhcmUqIHwgT3BlblVOSVgqIHwgc3lzdjQqdXcyKikKLSAgdmVyc2lvbl90eXBlPWZyZWVic2QtZWxmCi0gIG5lZWRfbGliX3ByZWZpeD1ubwotICBuZWVkX3ZlcnNpb249bm8KLSAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCi0gIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCi0gIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICi0gIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKLSAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9sb2NhbC9saWIgL3Vzci9nbnUvbGliIC91c3IvY2NzL2xpYiAvdXNyL2xpYiAvbGliJwotICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubwotICBlbHNlCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPScvdXNyL2Njcy9saWIgL3Vzci9saWInCi0gICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcwotICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgIHNjbzMuMnY1KikKLSAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCi0JOzsKLSAgICBlc2FjCi0gIGZpCi0gIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKLSAgOzsKLQotdXRzNCopCi0gIHZlcnNpb25fdHlwZT1saW51eAotICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKLSAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKLSAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKLSAgOzsKLQotKikKLSAgZHluYW1pY19saW5rZXI9bm8KLSAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRkeW5hbWljX2xpbmtlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kZHluYW1pY19saW5rZXIiID4mNgotdGVzdCAiJGR5bmFtaWNfbGlua2VyIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KLQotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIgotaWYgdGVzdCAiJHtsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIgotZmkKLQotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9IiRsdF9jdl9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyIKLQotdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IlBBVEggJHNobGlicGF0aF92YXIgJHJ1bnBhdGhfdmFyIgotaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KLSAgdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms9IiR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluayBHQ0NfRVhFQ19QUkVGSVggQ09NUElMRVJfUEFUSCBMSUJSQVJZX1BBVEgiCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaG93IHRvIGhhcmRjb2RlIGxpYnJhcnkgcGF0aHMgaW50byBwcm9ncmFtcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGhvdyB0byBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gcHJvZ3JhbXMuLi4gJEVDSE9fQyIgPiY2Ci1oYXJkY29kZV9hY3Rpb25fR0NKPQotaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfR0NKIiB8fCBcCi0gICB0ZXN0IC1uICIkcnVucGF0aF92YXJfR0NKIiB8fCBcCi0gICB0ZXN0ICJYJGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oiID0gIlh5ZXMiIDsgdGhlbgotCi0gICMgV2UgY2FuIGhhcmRjb2RlIG5vbi1leGlzdGFudCBkaXJlY3Rvcmllcy4KLSAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9HQ0oiICE9IG5vICYmCi0gICAgICMgSWYgdGhlIG9ubHkgbWVjaGFuaXNtIHRvIGF2b2lkIGhhcmRjb2RpbmcgaXMgc2hsaWJwYXRoX3Zhciwgd2UKLSAgICAgIyBoYXZlIHRvIHJlbGluaywgb3RoZXJ3aXNlIHdlIG1pZ2h0IGxpbmsgd2l0aCBhbiBpbnN0YWxsZWQgbGlicmFyeQotICAgICAjIHdoZW4gd2Ugc2hvdWxkIGJlIGxpbmtpbmcgd2l0aCBhIHlldC10by1iZS1pbnN0YWxsZWQgb25lCi0gICAgICMjIHRlc3QgIiRfTFRfQUNfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsIEdDSikiICE9IG5vICYmCi0gICAgIHRlc3QgIiRoYXJkY29kZV9taW51c19MX0dDSiIgIT0gbm87IHRoZW4KLSAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgotICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9cmVsaW5rCi0gIGVsc2UKLSAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgotICAgIGhhcmRjb2RlX2FjdGlvbl9HQ0o9aW1tZWRpYXRlCi0gIGZpCi1lbHNlCi0gICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCi0gICMgZGlyZWN0b3JpZXMuCi0gIGhhcmRjb2RlX2FjdGlvbl9HQ0o9dW5zdXBwb3J0ZWQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kaGFyZGNvZGVfYWN0aW9uX0dDSiIgPiY2Ci0KLWlmIHRlc3QgIiRoYXJkY29kZV9hY3Rpb25fR0NKIiA9IHJlbGluazsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubwotZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAotICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgotICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKLSAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcwotZmkKLQotCi0jIFRoZSBlbHNlIGNsYXVzZSBzaG91bGQgb25seSBmaXJlIHdoZW4gYm9vdHN0cmFwcGluZyB0aGUKLSMgbGlidG9vbCBkaXN0cmlidXRpb24sIG90aGVyd2lzZSB5b3UgZm9yZ290IHRvIHNoaXAgbHRtYWluLnNoCi0jIHdpdGggeW91ciBwYWNrYWdlLCBhbmQgeW91IHdpbGwgZ2V0IGNvbXBsYWludHMgdGhhdCB0aGVyZSBhcmUKLSMgbm8gcnVsZXMgdG8gZ2VuZXJhdGUgbHRtYWluLnNoLgotaWYgdGVzdCAtZiAiJGx0bWFpbiI7IHRoZW4KLSAgIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91ciBjb21tYW5kcyB0aHJvdWdoCi0gICMgd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KLSAgaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KLSAgICBzZXRvcHQgTk9fR0xPQl9TVUJTVAotICBmaQotICAjIE5vdyBxdW90ZSBhbGwgdGhlIHRoaW5ncyB0aGF0IG1heSBjb250YWluIG1ldGFjaGFyYWN0ZXJzIHdoaWxlIGJlaW5nCi0gICMgY2FyZWZ1bCBub3QgdG8gb3ZlcnF1b3RlIHRoZSBBQ19TVUJTVGVkIHZhbHVlcy4gIFdlIHRha2UgY29waWVzIG9mIHRoZQotICAjIHZhcmlhYmxlcyBhbmQgcXVvdGUgdGhlIGNvcGllcyBmb3IgZ2VuZXJhdGlvbiBvZiB0aGUgbGlidG9vbCBzY3JpcHQuCi0gIGZvciB2YXIgaW4gZWNobyBvbGRfQ0Mgb2xkX0NGTEFHUyBBUiBBUl9GTEFHUyBFR1JFUCBSQU5MSUIgTE5fUyBMVENDIExUQ0ZMQUdTIE5NIFwKLSAgICBTRUQgU0hFTEwgU1RSSVAgXAotICAgIGxpYm5hbWVfc3BlYyBsaWJyYXJ5X25hbWVzX3NwZWMgc29uYW1lX3NwZWMgZXh0cmFjdF9leHBzeW1zX2NtZHMgXAotICAgIG9sZF9zdHJpcGxpYiBzdHJpcGxpYiBmaWxlX21hZ2ljX2NtZCBmaW5pc2hfY21kcyBmaW5pc2hfZXZhbCBcCi0gICAgZGVwbGlic19jaGVja19tZXRob2QgcmVsb2FkX2ZsYWcgcmVsb2FkX2NtZHMgbmVlZF9sb2NrcyBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCi0gICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MgXAotICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYyBcCi0gICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHMgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCi0gICAgY29tcGlsZXJfR0NKIFwKLSAgICBDQ19HQ0ogXAotICAgIExEX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl93bF9HQ0ogXAotICAgIGx0X3Byb2dfY29tcGlsZXJfcGljX0dDSiBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfR0NKIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZ19HQ0ogXAotICAgIGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0ogXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19HQ0ogXAotICAgIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjX0dDSiBcCi0gICAgZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfR0NKIFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiBcCi0gICAgcHJlZGVwX29iamVjdHNfR0NKIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfR0NKIFwKLSAgICBwcmVkZXBzX0dDSiBcCi0gICAgcG9zdGRlcHNfR0NKIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX2RpcnNfR0NKIFwKLSAgICBhcmNoaXZlX2NtZHNfR0NKIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX0dDSiBcCi0gICAgcG9zdGluc3RhbGxfY21kc19HQ0ogXAotICAgIHBvc3R1bmluc3RhbGxfY21kc19HQ0ogXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiBcCi0gICAgYWxsb3dfdW5kZWZpbmVkX2ZsYWdfR0NKIFwKLSAgICBub191bmRlZmluZWRfZmxhZ19HQ0ogXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfR0NKIFwKLSAgICBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX0dDSiBcCi0gICAgaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0ogXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKIFwKLSAgICBoYXJkY29kZV9hdXRvbWF0aWNfR0NKIFwKLSAgICBtb2R1bGVfY21kc19HQ0ogXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19HQ0ogXAotICAgIGx0X2N2X3Byb2dfY29tcGlsZXJfY19vX0dDSiBcCi0gICAgZml4X3NyY2ZpbGVfcGF0aF9HQ0ogXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19HQ0ogXAotICAgIGluY2x1ZGVfZXhwc3ltc19HQ0o7IGRvCi0KLSAgICBjYXNlICR2YXIgaW4KLSAgICBvbGRfYXJjaGl2ZV9jbWRzX0dDSiB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSiB8IFwKLSAgICBhcmNoaXZlX2NtZHNfR0NKIHwgXAotICAgIGFyY2hpdmVfZXhwc3ltX2NtZHNfR0NKIHwgXAotICAgIG1vZHVsZV9jbWRzX0dDSiB8IFwKLSAgICBtb2R1bGVfZXhwc3ltX2NtZHNfR0NKIHwgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX0dDSiB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX0dDSiB8IFwKLSAgICBleHRyYWN0X2V4cHN5bXNfY21kcyB8IHJlbG9hZF9jbWRzIHwgZmluaXNoX2NtZHMgfCBcCi0gICAgcG9zdGluc3RhbGxfY21kcyB8IHBvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyB8IG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMgfCBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMpCi0gICAgICAjIERvdWJsZS1xdW90ZSBkb3VibGUtZXZhbGVkIHN0cmluZ3MuCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkZG91YmxlX3F1b3RlX3N1YnN0XCIgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiIC1lIFwiXCRkZWxheV92YXJpYWJsZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICAqKQotICAgICAgZXZhbCAibHRfJHZhcj1cXFwiXGBcJGVjaG8gXCJYXCQkdmFyXCIgfCBcJFhzZWQgLWUgXCJcJHNlZF9xdW90ZV9zdWJzdFwiXGBcXFwiIgotICAgICAgOzsKLSAgICBlc2FjCi0gIGRvbmUKLQotICBjYXNlICRsdF9lY2hvIGluCi0gIConXCQwIC0tZmFsbGJhY2stZWNobyInKQotICAgIGx0X2VjaG89YCRlY2hvICJYJGx0X2VjaG8iIHwgJFhzZWQgLWUgJ3MvXFxcXFxcXCQwIC0tZmFsbGJhY2stZWNobyIkLyQwIC0tZmFsbGJhY2stZWNobyIvJ2AKLSAgICA7OwotICBlc2FjCi0KLWNmZ2ZpbGU9IiRvZmlsZSIKLQotICBjYXQgPDxfX0VPRl9fID4+ICIkY2ZnZmlsZSIKLSMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogJHRhZ25hbWUKLQotIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgotCi0jIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCi1TSEVMTD0kbHRfU0hFTEwKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9saWJzPSRlbmFibGVfc2hhcmVkCi0KLSMgV2hldGhlciBvciBub3QgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllcy4KLWJ1aWxkX29sZF9saWJzPSRlbmFibGVfc3RhdGljCi0KLSMgV2hldGhlciBvciBub3QgdG8gYWRkIC1sYyBmb3IgYnVpbGRpbmcgc2hhcmVkIGxpYnJhcmllcy4KLWJ1aWxkX2xpYnRvb2xfbmVlZF9sYz0kYXJjaGl2ZV9jbWRzX25lZWRfbGNfR0NKCi0KLSMgV2hldGhlciBvciBub3QgdG8gZGlzYWxsb3cgc2hhcmVkIGxpYnMgd2hlbiBydW50aW1lIGxpYnMgYXJlIHN0YXRpYwotYWxsb3dfbGlidG9vbF9saWJzX3dpdGhfc3RhdGljX3J1bnRpbWVzPSRlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzX0dDSgotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9HQ0oKLQotIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBDIGNvbXBpbGVyPwotd2l0aF9nY2M9JEdDQ19HQ0oKLQotIyBBbiBFUkUgbWF0Y2hlci4KLUVHUkVQPSRsdF9FR1JFUAotCi0jIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCi1MRD0kbHRfTERfR0NKCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9HQ0oKLQotIyBPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIikuCi1vYmpleHQ9IiRhY19vYmpleHQiCi0KLSMgT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpLgotbGliZXh0PSIkbGliZXh0IgotCi0jIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgotc2hyZXh0X2NtZHM9JyRzaHJleHRfY21kcycKLQotIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCi1leGVleHQ9IiRleGVleHQiCi0KLSMgQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzLgotcGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfcGljX0dDSgotcGljX21vZGU9JHBpY19tb2RlCi0KLSMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPwotbWF4X2NtZF9sZW49JGx0X2N2X3N5c19tYXhfY21kX2xlbgotCi0jIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KLWNvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fR0NKCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnMuCi1ub19idWlsdGluX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX0dDSgotCi0jIENvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnMuCi1leHBvcnRfZHluYW1pY19mbGFnX3NwZWM9JGx0X2V4cG9ydF9keW5hbWljX2ZsYWdfc3BlY19HQ0oKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfR0NKCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSB0aHJlYWQtc2FmZSBvYmplY3RzLgotdGhyZWFkX3NhZmVfZmxhZ19zcGVjPSRsdF90aHJlYWRfc2FmZV9mbGFnX3NwZWNfR0NKCi0KLSMgTGlicmFyeSB2ZXJzaW9uaW5nIHR5cGUuCi12ZXJzaW9uX3R5cGU9JHZlcnNpb25fdHlwZQotCi0jIEZvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4LgotbGlibmFtZV9zcGVjPSRsdF9saWJuYW1lX3NwZWMKLQotIyBMaXN0IG9mIGFyY2hpdmUgbmFtZXMuICBGaXJzdCBuYW1lIGlzIHRoZSByZWFsIG9uZSwgdGhlIHJlc3QgYXJlIGxpbmtzLgotIyBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FLgotbGlicmFyeV9uYW1lc19zcGVjPSRsdF9saWJyYXJ5X25hbWVzX3NwZWMKLQotIyBUaGUgY29kZWQgbmFtZSBvZiB0aGUgbGlicmFyeSwgaWYgZGlmZmVyZW50IGZyb20gdGhlIHJlYWwgbmFtZS4KLXNvbmFtZV9zcGVjPSRsdF9zb25hbWVfc3BlYwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW5kIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmUuCi1SQU5MSUI9JGx0X1JBTkxJQgotb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kc19HQ0oKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX0dDSgotCi0jIENyZWF0ZSBhIHRlbXBvcmFyeSBvbGQtc3R5bGUgYXJjaGl2ZSB0byBsaW5rIGluc3RlYWQgb2YgYSBzaGFyZWQgYXJjaGl2ZS4KLW9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19HQ0oKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGEgc2hhcmVkIGFyY2hpdmUuCi1hcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kc19HQ0oKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfR0NKCi1wb3N0aW5zdGFsbF9jbWRzPSRsdF9wb3N0aW5zdGFsbF9jbWRzCi1wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgKGFzc3VtZWQgc2FtZSBhcyBhYm92ZSBpZiBlbXB0eSkKLW1vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kc19HQ0oKLW1vZHVsZV9leHBzeW1fY21kcz0kbHRfbW9kdWxlX2V4cHN5bV9jbWRzX0dDSgotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19HQ0oKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYWZ0ZXIgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcG9zdGRlcF9vYmplY3RzPSRsdF9wb3N0ZGVwX29iamVjdHNfR0NKCi0KLSMgRGVwZW5kZW5jaWVzIHRvIHBsYWNlIGJlZm9yZSB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wcmVkZXBzPSRsdF9wcmVkZXBzX0dDSgotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfR0NKCi0KLSMgVGhlIGRpcmVjdG9yaWVzIHNlYXJjaGVkIGJ5IHRoaXMgY29tcGlsZXIgd2hlbiBjcmVhdGluZyBhIHNoYXJlZAotIyBsaWJyYXJ5Ci1jb21waWxlcl9saWJfc2VhcmNoX2RpcnM9JGx0X2NvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19HQ0oKLQotIyBUaGUgbGlicmFyeSBzZWFyY2ggcGF0aCB1c2VkIGludGVybmFsbHkgYnkgdGhlIGNvbXBpbGVyIHdoZW4gbGlua2luZwotIyBhIHNoYXJlZCBsaWJyYXJ5LgotY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoPSRsdF9jb21waWxlcl9saWJfc2VhcmNoX3BhdGhfR0NKCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19HQ0oKLQotIyBGbGFnIHRoYXQgZm9yY2VzIG5vIHVuZGVmaW5lZCBzeW1ib2xzLgotbm9fdW5kZWZpbmVkX2ZsYWc9JGx0X25vX3VuZGVmaW5lZF9mbGFnX0dDSgotCi0jIENvbW1hbmRzIHVzZWQgdG8gZmluaXNoIGEgbGlidG9vbCBsaWJyYXJ5IGluc3RhbGxhdGlvbiBpbiBhIGRpcmVjdG9yeS4KLWZpbmlzaF9jbWRzPSRsdF9maW5pc2hfY21kcwotCi0jIFNhbWUgYXMgYWJvdmUsIGJ1dCBhIHNpbmdsZSBzY3JpcHQgZnJhZ21lbnQgdG8gYmUgZXZhbGVkIGJ1dCBub3Qgc2hvd24uCi1maW5pc2hfZXZhbD0kbHRfZmluaXNoX2V2YWwKLQotIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgotZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbgotZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wKLQotIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIKLWdsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlLgotcnVucGF0aF92YXI9JHJ1bnBhdGhfdmFyCi0KLSMgVGhpcyBpcyB0aGUgc2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZS4KLXNobGlicGF0aF92YXI9JHNobGlicGF0aF92YXIKLQotIyBJcyBzaGxpYnBhdGggc2VhcmNoZWQgYmVmb3JlIHRoZSBoYXJkLWNvZGVkIGxpYnJhcnkgc2VhcmNoIHBhdGg/Ci1zaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9JHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aAotCi0jIEhvdyB0byBoYXJkY29kZSBhIHNoYXJlZCBsaWJyYXJ5IHBhdGggaW50byBhbiBleGVjdXRhYmxlLgotaGFyZGNvZGVfYWN0aW9uPSRoYXJkY29kZV9hY3Rpb25fR0NKCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19HQ0oKLQotIyBJZiBsZCBpcyB1c2VkIHdoZW4gbGlua2luZywgZmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvCi0jIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLiBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMKLSMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZF9HQ0oKLQotIyBXaGV0aGVyIHdlIG5lZWQgYSBzaW5nbGUgLXJwYXRoIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudC4KLWhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3I9JGx0X2hhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfR0NKCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyB0aGUgLUxESVIgZmxhZyBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSIGludG8gdGhlCi0jIHJlc3VsdGluZyBiaW5hcnkuCi1oYXJkY29kZV9taW51c19MPSRoYXJkY29kZV9taW51c19MX0dDSgotCi0jIFNldCB0byB5ZXMgaWYgdXNpbmcgU0hMSUJQQVRIX1ZBUj1ESVIgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvCi0jIHRoZSByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0kaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl9HQ0oKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19HQ0oKLQotIyBWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKLSMgcmVzdG9yZWQgYXQgcmVsaW5rIHRpbWUuCi12YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIgotCi0jIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KLWxpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnNfR0NKCi0KLSMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYwotCi0jIFJ1bi10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzCi1zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kbHRfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMKLQotIyBGaXggdGhlIHNoZWxsIHZhcmlhYmxlIFwkc3JjZmlsZSBmb3IgdGhlIGNvbXBpbGVyLgotZml4X3NyY2ZpbGVfcGF0aD0kbHRfZml4X3NyY2ZpbGVfcGF0aAotCi0jIFNldCB0byB5ZXMgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCi1hbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9sc19HQ0oKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19HQ0oKLQotIyBUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlLgotZXh0cmFjdF9leHBzeW1zX2NtZHM9JGx0X2V4dHJhY3RfZXhwc3ltc19jbWRzCi0KLSMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KLWV4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zX0dDSgotCi0jIFN5bWJvbHMgdGhhdCBtdXN0IGFsd2F5cyBiZSBleHBvcnRlZC4KLWluY2x1ZGVfZXhwc3ltcz0kbHRfaW5jbHVkZV9leHBzeW1zX0dDSgotCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi1fX0VPRl9fCi0KLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0iJGx0X3NhdmVfQ0MiCi0KLQllbHNlCi0JICB0YWduYW1lPSIiCi0JZmkKLQk7OwotCi0gICAgICBSQykKLQotCi0KLSMgU291cmNlIGZpbGUgZXh0ZW5zaW9uIGZvciBSQyB0ZXN0IHNvdXJjZXMuCi1hY19leHQ9cmMKLQotIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIFJDIHRlc3Qgc291cmNlcy4KLW9iamV4dD1vCi1vYmpleHRfUkM9JG9iamV4dAotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cwotbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JwotCi0jIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cwotbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgotCi0jIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCi0KLSMgSWYgbm8gQyBjb21waWxlciB3YXMgc3BlY2lmaWVkLCB1c2UgQ0MuCi1MVENDPSR7TFRDQy0iJENDIn0KLQotIyBJZiBubyBDIGNvbXBpbGVyIGZsYWdzIHdlcmUgc3BlY2lmaWVkLCB1c2UgQ0ZMQUdTLgotTFRDRkxBR1M9JHtMVENGTEFHUy0iJENGTEFHUyJ9Ci0KLSMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCi1jb21waWxlcj0kQ0MKLQotCi0jIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQotYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0Ci1lY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAotZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCi1fbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCi0kcm0gY29uZnRlc3QqCi0KLWFjX291dGZpbGU9Y29uZnRlc3QuJGFjX29iamV4dAotZWNobyAiJGx0X3NpbXBsZV9saW5rX3Rlc3RfY29kZSIgPmNvbmZ0ZXN0LiRhY19leHQKLWV2YWwgIiRhY19saW5rIiAyPiYxID4vZGV2L251bGwgfCAkU0VEICcvXiQvZDsgL14gKisvZCcgPmNvbmZ0ZXN0LmVycgotX2x0X2xpbmtlcl9ib2lsZXJwbGF0ZT1gY2F0IGNvbmZ0ZXN0LmVycmAKLSRybSAtciBjb25mdGVzdCoKLQotCi0jIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgotbHRfc2F2ZV9DQz0iJENDIgotQ0M9JHtSQy0id2luZHJlcyJ9Ci1jb21waWxlcj0kQ0MKLWNvbXBpbGVyX1JDPSRDQwotZm9yIGNjX3RlbXAgaW4gJGNvbXBpbGVyIiI7IGRvCi0gIGNhc2UgJGNjX3RlbXAgaW4KLSAgICBjb21waWxlIHwgKltcXC9dY29tcGlsZSB8IGNjYWNoZSB8ICpbXFwvXWNjYWNoZSApIDs7Ci0gICAgZGlzdGNjIHwgKltcXC9dZGlzdGNjIHwgcHVyaWZ5IHwgKltcXC9dcHVyaWZ5ICkgOzsKLSAgICBcLSopIDs7Ci0gICAgKikgYnJlYWs7OwotICBlc2FjCi1kb25lCi1jY19iYXNlbmFtZT1gJGVjaG8gIlgkY2NfdGVtcCIgfCAkWHNlZCAtZSAncyUuKi8lJScgLWUgInMlXiRob3N0X2FsaWFzLSUlImAKLQotbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkM9eWVzCi0KLSMgVGhlIGVsc2UgY2xhdXNlIHNob3VsZCBvbmx5IGZpcmUgd2hlbiBib290c3RyYXBwaW5nIHRoZQotIyBsaWJ0b29sIGRpc3RyaWJ1dGlvbiwgb3RoZXJ3aXNlIHlvdSBmb3Jnb3QgdG8gc2hpcCBsdG1haW4uc2gKLSMgd2l0aCB5b3VyIHBhY2thZ2UsIGFuZCB5b3Ugd2lsbCBnZXQgY29tcGxhaW50cyB0aGF0IHRoZXJlIGFyZQotIyBubyBydWxlcyB0byBnZW5lcmF0ZSBsdG1haW4uc2guCi1pZiB0ZXN0IC1mICIkbHRtYWluIjsgdGhlbgotICAjIFNlZSBpZiB3ZSBhcmUgcnVubmluZyBvbiB6c2gsIGFuZCBzZXQgdGhlIG9wdGlvbnMgd2hpY2ggYWxsb3cgb3VyIGNvbW1hbmRzIHRocm91Z2gKLSAgIyB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzLgotICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgotICAgIHNldG9wdCBOT19HTE9CX1NVQlNUCi0gIGZpCi0gICMgTm93IHF1b3RlIGFsbCB0aGUgdGhpbmdzIHRoYXQgbWF5IGNvbnRhaW4gbWV0YWNoYXJhY3RlcnMgd2hpbGUgYmVpbmcKLSAgIyBjYXJlZnVsIG5vdCB0byBvdmVycXVvdGUgdGhlIEFDX1NVQlNUZWQgdmFsdWVzLiAgV2UgdGFrZSBjb3BpZXMgb2YgdGhlCi0gICMgdmFyaWFibGVzIGFuZCBxdW90ZSB0aGUgY29waWVzIGZvciBnZW5lcmF0aW9uIG9mIHRoZSBsaWJ0b29sIHNjcmlwdC4KLSAgZm9yIHZhciBpbiBlY2hvIG9sZF9DQyBvbGRfQ0ZMQUdTIEFSIEFSX0ZMQUdTIEVHUkVQIFJBTkxJQiBMTl9TIExUQ0MgTFRDRkxBR1MgTk0gXAotICAgIFNFRCBTSEVMTCBTVFJJUCBcCi0gICAgbGlibmFtZV9zcGVjIGxpYnJhcnlfbmFtZXNfc3BlYyBzb25hbWVfc3BlYyBleHRyYWN0X2V4cHN5bXNfY21kcyBcCi0gICAgb2xkX3N0cmlwbGliIHN0cmlwbGliIGZpbGVfbWFnaWNfY21kIGZpbmlzaF9jbWRzIGZpbmlzaF9ldmFsIFwKLSAgICBkZXBsaWJzX2NoZWNrX21ldGhvZCByZWxvYWRfZmxhZyByZWxvYWRfY21kcyBuZWVkX2xvY2tzIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsIFwKLSAgICBsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCi0gICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjIFwKLSAgICBvbGRfcG9zdGluc3RhbGxfY21kcyBvbGRfcG9zdHVuaW5zdGFsbF9jbWRzIFwKLSAgICBjb21waWxlcl9SQyBcCi0gICAgQ0NfUkMgXAotICAgIExEX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3dsX1JDIFwKLSAgICBsdF9wcm9nX2NvbXBpbGVyX3BpY19SQyBcCi0gICAgbHRfcHJvZ19jb21waWxlcl9zdGF0aWNfUkMgXAotICAgIGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnX1JDIFwKLSAgICBleHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMgXAotICAgIHRocmVhZF9zYWZlX2ZsYWdfc3BlY19SQyBcCi0gICAgd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMgXAotICAgIGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNfUkMgXAotICAgIG9sZF9hcmNoaXZlX2NtZHNfUkMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNfUkMgXAotICAgIHByZWRlcF9vYmplY3RzX1JDIFwKLSAgICBwb3N0ZGVwX29iamVjdHNfUkMgXAotICAgIHByZWRlcHNfUkMgXAotICAgIHBvc3RkZXBzX1JDIFwKLSAgICBjb21waWxlcl9saWJfc2VhcmNoX3BhdGhfUkMgXAotICAgIGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlyc19SQyBcCi0gICAgYXJjaGl2ZV9jbWRzX1JDIFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzX1JDIFwKLSAgICBwb3N0dW5pbnN0YWxsX2NtZHNfUkMgXAotICAgIG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDIFwKLSAgICBhbGxvd191bmRlZmluZWRfZmxhZ19SQyBcCi0gICAgbm9fdW5kZWZpbmVkX2ZsYWdfUkMgXAotICAgIGV4cG9ydF9zeW1ib2xzX2NtZHNfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRfUkMgXAotICAgIGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3JfUkMgXAotICAgIGhhcmRjb2RlX2F1dG9tYXRpY19SQyBcCi0gICAgbW9kdWxlX2NtZHNfUkMgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19SQyBcCi0gICAgbHRfY3ZfcHJvZ19jb21waWxlcl9jX29fUkMgXAotICAgIGZpeF9zcmNmaWxlX3BhdGhfUkMgXAotICAgIGV4Y2x1ZGVfZXhwc3ltc19SQyBcCi0gICAgaW5jbHVkZV9leHBzeW1zX1JDOyBkbwotCi0gICAgY2FzZSAkdmFyIGluCi0gICAgb2xkX2FyY2hpdmVfY21kc19SQyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDIHwgXAotICAgIGFyY2hpdmVfY21kc19SQyB8IFwKLSAgICBhcmNoaXZlX2V4cHN5bV9jbWRzX1JDIHwgXAotICAgIG1vZHVsZV9jbWRzX1JDIHwgXAotICAgIG1vZHVsZV9leHBzeW1fY21kc19SQyB8IFwKLSAgICBvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc19SQyB8IFwKLSAgICBleHBvcnRfc3ltYm9sc19jbWRzX1JDIHwgXAotICAgIGV4dHJhY3RfZXhwc3ltc19jbWRzIHwgcmVsb2FkX2NtZHMgfCBmaW5pc2hfY21kcyB8IFwKLSAgICBwb3N0aW5zdGFsbF9jbWRzIHwgcG9zdHVuaW5zdGFsbF9jbWRzIHwgXAotICAgIG9sZF9wb3N0aW5zdGFsbF9jbWRzIHwgb2xkX3Bvc3R1bmluc3RhbGxfY21kcyB8IFwKLSAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgfCBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYykKLSAgICAgICMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KLSAgICAgIGV2YWwgImx0XyR2YXI9XFxcIlxgXCRlY2hvIFwiWFwkJHZhclwiIHwgXCRYc2VkIC1lIFwiXCRkb3VibGVfcXVvdGVfc3Vic3RcIiAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCIgLWUgXCJcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICJsdF8kdmFyPVxcXCJcYFwkZWNobyBcIlhcJCR2YXJcIiB8IFwkWHNlZCAtZSBcIlwkc2VkX3F1b3RlX3N1YnN0XCJcYFxcXCIiCi0gICAgICA7OwotICAgIGVzYWMKLSAgZG9uZQotCi0gIGNhc2UgJGx0X2VjaG8gaW4KLSAgKidcJDAgLS1mYWxsYmFjay1lY2hvIicpCi0gICAgbHRfZWNobz1gJGVjaG8gIlgkbHRfZWNobyIgfCAkWHNlZCAtZSAncy9cXFxcXFxcJDAgLS1mYWxsYmFjay1lY2hvIiQvJDAgLS1mYWxsYmFjay1lY2hvIi8nYAotICAgIDs7Ci0gIGVzYWMKLQotY2ZnZmlsZT0iJG9maWxlIgotCi0gIGNhdCA8PF9fRU9GX18gPj4gIiRjZmdmaWxlIgotIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi0jIExpYnRvb2wgd2FzIGNvbmZpZ3VyZWQgb24gaG9zdCBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWA6Ci0KLSMgU2hlbGwgdG8gdXNlIHdoZW4gaW52b2tpbmcgc2hlbGwgc2NyaXB0cy4KLVNIRUxMPSRsdF9TSEVMTAotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCi1idWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgotYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKLQotIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgotYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sY19SQwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMKLWFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcz0kZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lc19SQwotCi0jIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KLWZhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAotCi0jIFRoZSBob3N0IHN5c3RlbS4KLWhvc3RfYWxpYXM9JGhvc3RfYWxpYXMKLWhvc3Q9JGhvc3QKLWhvc3Rfb3M9JGhvc3Rfb3MKLQotIyBUaGUgYnVpbGQgc3lzdGVtLgotYnVpbGRfYWxpYXM9JGJ1aWxkX2FsaWFzCi1idWlsZD0kYnVpbGQKLWJ1aWxkX29zPSRidWlsZF9vcwotCi0jIEFuIGVjaG8gcHJvZ3JhbSB0aGF0IGRvZXMgbm90IGludGVycHJldCBiYWNrc2xhc2hlcy4KLWVjaG89JGx0X2VjaG8KLQotIyBUaGUgYXJjaGl2ZXIuCi1BUj0kbHRfQVIKLUFSX0ZMQUdTPSRsdF9BUl9GTEFHUwotCi0jIEEgQyBjb21waWxlci4KLUxUQ0M9JGx0X0xUQ0MKLQotIyBMVENDIGNvbXBpbGVyIGZsYWdzLgotTFRDRkxBR1M9JGx0X0xUQ0ZMQUdTCi0KLSMgQSBsYW5ndWFnZS1zcGVjaWZpYyBjb21waWxlci4KLUNDPSRsdF9jb21waWxlcl9SQwotCi0jIElzIHRoZSBjb21waWxlciB0aGUgR05VIEMgY29tcGlsZXI/Ci13aXRoX2djYz0kR0NDX1JDCi0KLSMgQW4gRVJFIG1hdGNoZXIuCi1FR1JFUD0kbHRfRUdSRVAKLQotIyBUaGUgbGlua2VyIHVzZWQgdG8gYnVpbGQgbGlicmFyaWVzLgotTEQ9JGx0X0xEX1JDCi0KLSMgV2hldGhlciB3ZSBuZWVkIGhhcmQgb3Igc29mdCBsaW5rcy4KLUxOX1M9JGx0X0xOX1MKLQotIyBBIEJTRC1jb21wYXRpYmxlIG5tIHByb2dyYW0uCi1OTT0kbHRfTk0KLQotIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbQotU1RSSVA9JGx0X1NUUklQCi0KLSMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyAiZmlsZSIKLU1BR0lDX0NNRD0kTUFHSUNfQ01ECi0KLSMgVXNlZCBvbiBjeWd3aW46IERMTCBjcmVhdGlvbiBwcm9ncmFtLgotRExMVE9PTD0iJERMTFRPT0wiCi0KLSMgVXNlZCBvbiBjeWd3aW46IG9iamVjdCBkdW1wZXIuCi1PQkpEVU1QPSIkT0JKRFVNUCIKLQotIyBVc2VkIG9uIGN5Z3dpbjogYXNzZW1ibGVyLgotQVM9IiRBUyIKLQotIyBUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXMuCi1vYmpkaXI9JG9iamRpcgotCi0jIEhvdyB0byBjcmVhdGUgcmVsb2FkYWJsZSBvYmplY3QgZmlsZXMuCi1yZWxvYWRfZmxhZz0kbHRfcmVsb2FkX2ZsYWcKLXJlbG9hZF9jbWRzPSRsdF9yZWxvYWRfY21kcwotCi0jIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCi13bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bF9SQwotCi0jIE9iamVjdCBmaWxlIHN1ZmZpeCAobm9ybWFsbHkgIm8iKS4KLW9iamV4dD0iJGFjX29iamV4dCIKLQotIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCi1saWJleHQ9IiRsaWJleHQiCi0KLSMgU2hhcmVkIGxpYnJhcnkgc3VmZml4IChub3JtYWxseSAiLnNvIikuCi1zaHJleHRfY21kcz0nJHNocmV4dF9jbWRzJwotCi0jIEV4ZWN1dGFibGUgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICIiKS4KLWV4ZWV4dD0iJGV4ZWV4dCIKLQotIyBBZGRpdGlvbmFsIGNvbXBpbGVyIGZsYWdzIGZvciBidWlsZGluZyBsaWJyYXJ5IG9iamVjdHMuCi1waWNfZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9waWNfUkMKLXBpY19tb2RlPSRwaWNfbW9kZQotCi0jIFdoYXQgaXMgdGhlIG1heGltdW0gbGVuZ3RoIG9mIGEgY29tbWFuZD8KLW1heF9jbWRfbGVuPSRsdF9jdl9zeXNfbWF4X2NtZF9sZW4KLQotIyBEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/Ci1jb21waWxlcl9jX289JGx0X2x0X2N2X3Byb2dfY29tcGlsZXJfY19vX1JDCi0KLSMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/Ci1uZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCi0KLSMgRG8gd2UgbmVlZCB0aGUgbGliIHByZWZpeCBmb3IgbW9kdWxlcz8KLW5lZWRfbGliX3ByZWZpeD0kbmVlZF9saWJfcHJlZml4Ci0KLSMgRG8gd2UgbmVlZCBhIHZlcnNpb24gZm9yIGxpYnJhcmllcz8KLW5lZWRfdmVyc2lvbj0kbmVlZF92ZXJzaW9uCi0KLSMgV2hldGhlciBkbG9wZW4gaXMgc3VwcG9ydGVkLgotZGxvcGVuX3N1cHBvcnQ9JGVuYWJsZV9kbG9wZW4KLQotIyBXaGV0aGVyIGRsb3BlbiBvZiBwcm9ncmFtcyBpcyBzdXBwb3J0ZWQuCi1kbG9wZW5fc2VsZj0kZW5hYmxlX2Rsb3Blbl9zZWxmCi0KLSMgV2hldGhlciBkbG9wZW4gb2Ygc3RhdGljYWxseSBsaW5rZWQgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgotZGxvcGVuX3NlbGZfc3RhdGljPSRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljCi0KLSMgQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZy4KLWxpbmtfc3RhdGljX2ZsYWc9JGx0X2x0X3Byb2dfY29tcGlsZXJfc3RhdGljX1JDCi0KLSMgQ29tcGlsZXIgZmxhZyB0byB0dXJuIG9mZiBidWlsdGluIGZ1bmN0aW9ucy4KLW5vX2J1aWx0aW5fZmxhZz0kbHRfbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWdfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgotZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCi13aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNfUkMKLQotIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHRocmVhZC1zYWZlIG9iamVjdHMuCi10aHJlYWRfc2FmZV9mbGFnX3NwZWM9JGx0X3RocmVhZF9zYWZlX2ZsYWdfc3BlY19SQwotCi0jIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgotdmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKLQotIyBGb3JtYXQgb2YgbGlicmFyeSBuYW1lIHByZWZpeC4KLWxpYm5hbWVfc3BlYz0kbHRfbGlibmFtZV9zcGVjCi0KLSMgTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KLSMgVGhlIGxhc3QgbmFtZSBpcyB0aGUgb25lIHRoYXQgdGhlIGxpbmtlciBmaW5kcyB3aXRoIC1sTkFNRS4KLWxpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCi0KLSMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCi1zb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuZCBpbnN0YWxsIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgotUkFOTElCPSRsdF9SQU5MSUIKLW9sZF9hcmNoaXZlX2NtZHM9JGx0X29sZF9hcmNoaXZlX2NtZHNfUkMKLW9sZF9wb3N0aW5zdGFsbF9jbWRzPSRsdF9vbGRfcG9zdGluc3RhbGxfY21kcwotb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3R1bmluc3RhbGxfY21kcwotCi0jIENyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzPSRsdF9vbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzX1JDCi0KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlLgotb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzX1JDCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhbmQgaW5zdGFsbCBhIHNoYXJlZCBhcmNoaXZlLgotYXJjaGl2ZV9jbWRzPSRsdF9hcmNoaXZlX2NtZHNfUkMKLWFyY2hpdmVfZXhwc3ltX2NtZHM9JGx0X2FyY2hpdmVfZXhwc3ltX2NtZHNfUkMKLXBvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKLXBvc3R1bmluc3RhbGxfY21kcz0kbHRfcG9zdHVuaW5zdGFsbF9jbWRzCi0KLSMgQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIGxvYWRhYmxlIG1vZHVsZSAoYXNzdW1lZCBzYW1lIGFzIGFib3ZlIGlmIGVtcHR5KQotbW9kdWxlX2NtZHM9JGx0X21vZHVsZV9jbWRzX1JDCi1tb2R1bGVfZXhwc3ltX2NtZHM9JGx0X21vZHVsZV9leHBzeW1fY21kc19SQwotCi0jIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KLW9sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCi1zdHJpcGxpYj0kbHRfc3RyaXBsaWIKLQotIyBEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIHRoZSBvYmplY3RzIGJlaW5nIGxpbmtlZCB0byBjcmVhdGUgYQotIyBzaGFyZWQgbGlicmFyeS4KLXByZWRlcF9vYmplY3RzPSRsdF9wcmVkZXBfb2JqZWN0c19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwX29iamVjdHM9JGx0X3Bvc3RkZXBfb2JqZWN0c19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgdGhlIG9iamVjdHMgYmVpbmcgbGlua2VkIHRvIGNyZWF0ZSBhCi0jIHNoYXJlZCBsaWJyYXJ5LgotcHJlZGVwcz0kbHRfcHJlZGVwc19SQwotCi0jIERlcGVuZGVuY2llcyB0byBwbGFjZSBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8gY3JlYXRlIGEKLSMgc2hhcmVkIGxpYnJhcnkuCi1wb3N0ZGVwcz0kbHRfcG9zdGRlcHNfUkMKLQotIyBUaGUgZGlyZWN0b3JpZXMgc2VhcmNoZWQgYnkgdGhpcyBjb21waWxlciB3aGVuIGNyZWF0aW5nIGEgc2hhcmVkCi0jIGxpYnJhcnkKLWNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycz0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9kaXJzX1JDCi0KLSMgVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKLSMgYSBzaGFyZWQgbGlicmFyeS4KLWNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aD0kbHRfY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoX1JDCi0KLSMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCi1kZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKLQotIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID09IGZpbGVfbWFnaWMuCi1maWxlX21hZ2ljX2NtZD0kbHRfZmlsZV9tYWdpY19jbWQKLQotIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KLWFsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZ19SQwotCi0jIEZsYWcgdGhhdCBmb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHMuCi1ub191bmRlZmluZWRfZmxhZz0kbHRfbm9fdW5kZWZpbmVkX2ZsYWdfUkMKLQotIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCi1maW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKLQotIyBTYW1lIGFzIGFib3ZlLCBidXQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQgbm90IHNob3duLgotZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCi0KLSMgVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lcy4KLWdsb2JhbF9zeW1ib2xfcGlwZT0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZQotCi0jIFRyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgcHJvcGVyIEMgZGVjbGFyYXRpb24KLWdsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCi0KLSMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyCi1nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcwotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHJ1bnRpbWUgcGF0aCB2YXJpYWJsZS4KLXJ1bnBhdGhfdmFyPSRydW5wYXRoX3ZhcgotCi0jIFRoaXMgaXMgdGhlIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUuCi1zaGxpYnBhdGhfdmFyPSRzaGxpYnBhdGhfdmFyCi0KLSMgSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoPwotc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgKLQotIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KLWhhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uX1JDCi0KLSMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KLWhhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCi0KLSMgRmxhZyB0byBoYXJkY29kZSBcJGxpYmRpciBpbnRvIGEgYmluYXJ5IGR1cmluZyBsaW5raW5nLgotIyBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgotaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19SQwotCi0jIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8KLSMgYSBiaW5hcnkgZHVyaW5nIGxpbmtpbmcuIFRoaXMgbXVzdCB3b3JrIGV2ZW4gaWYgXCRsaWJkaXIgZG9lcwotIyBub3QgZXhpc3QuCi1oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkPSRsdF9oYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkX1JDCi0KLSMgV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlIC1ycGF0aCBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCi1oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yX1JDCi0KLSMgU2V0IHRvIHllcyBpZiB1c2luZyBESVIvbGliTkFNRSR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUiBpbnRvIHRoZQotIyByZXN1bHRpbmcgYmluYXJ5LgotaGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3RfUkMKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50byB0aGUKLSMgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX21pbnVzX0w9JGhhcmRjb2RlX21pbnVzX0xfUkMKLQotIyBTZXQgdG8geWVzIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIgaW50bwotIyB0aGUgcmVzdWx0aW5nIGJpbmFyeS4KLWhhcmRjb2RlX3NobGlicGF0aF92YXI9JGhhcmRjb2RlX3NobGlicGF0aF92YXJfUkMKLQotIyBTZXQgdG8geWVzIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSIGludG8gdGhlIGxpYnJhcnkKLSMgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkIGFnYWluc3QgaXQuCi1oYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpY19SQwotCi0jIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAotIyByZXN0b3JlZCBhdCByZWxpbmsgdGltZS4KLXZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rPSIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiCi0KLSMgV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzLgotbGlua19hbGxfZGVwbGlicz0kbGlua19hbGxfZGVwbGlic19SQwotCi0jIENvbXBpbGUtdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKLQotIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcwotc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JGx0X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjCi0KLSMgRml4IHRoZSBzaGVsbCB2YXJpYWJsZSBcJHNyY2ZpbGUgZm9yIHRoZSBjb21waWxlci4KLWZpeF9zcmNmaWxlX3BhdGg9JGx0X2ZpeF9zcmNmaWxlX3BhdGgKLQotIyBTZXQgdG8geWVzIGlmIGV4cG9ydGVkIHN5bWJvbHMgYXJlIHJlcXVpcmVkLgotYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSRhbHdheXNfZXhwb3J0X3N5bWJvbHNfUkMKLQotIyBUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzLgotZXhwb3J0X3N5bWJvbHNfY21kcz0kbHRfZXhwb3J0X3N5bWJvbHNfY21kc19SQwotCi0jIFRoZSBjb21tYW5kcyB0byBleHRyYWN0IHRoZSBleHBvcnRlZCBzeW1ib2wgbGlzdCBmcm9tIGEgc2hhcmVkIGFyY2hpdmUuCi1leHRyYWN0X2V4cHN5bXNfY21kcz0kbHRfZXh0cmFjdF9leHBzeW1zX2NtZHMKLQotIyBTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzLgotZXhjbHVkZV9leHBzeW1zPSRsdF9leGNsdWRlX2V4cHN5bXNfUkMKLQotIyBTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWQuCi1pbmNsdWRlX2V4cHN5bXM9JGx0X2luY2x1ZGVfZXhwc3ltc19SQwotCi0jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZQotCi1fX0VPRl9fCi0KLQotZWxzZQotICAjIElmIHRoZXJlIGlzIG5vIE1ha2VmaWxlIHlldCwgd2UgcmVseSBvbiBhIG1ha2UgcnVsZSB0byBleGVjdXRlCi0gICMgYGNvbmZpZy5zdGF0dXMgLS1yZWNoZWNrJyB0byByZXJ1biB0aGVzZSB0ZXN0cyBhbmQgY3JlYXRlIHRoZQotICAjIGxpYnRvb2wgc2NyaXB0IHRoZW4uCi0gIGx0bWFpbl9pbj1gZWNobyAkbHRtYWluIHwgc2VkIC1lICdzL1wuc2gkLy5pbi8nYAotICBpZiB0ZXN0IC1mICIkbHRtYWluX2luIjsgdGhlbgotICAgIHRlc3QgLWYgTWFrZWZpbGUgJiYgbWFrZSAiJGx0bWFpbiIKLSAgZmkKLWZpCi0KLQotYWNfZXh0PWMKLWFjX2NwcD0nJENQUCAkQ1BQRkxBR1MnCi1hY19jb21waWxlPSckQ0MgLWMgJENGTEFHUyAkQ1BQRkxBR1MgY29uZnRlc3QuJGFjX2V4dCA+JjUnCi1hY19saW5rPSckQ0MgLW8gY29uZnRlc3QkYWNfZXhlZXh0ICRDRkxBR1MgJENQUEZMQUdTICRMREZMQUdTIGNvbmZ0ZXN0LiRhY19leHQgJExJQlMgPiY1JwotYWNfY29tcGlsZXJfZ251PSRhY19jdl9jX2NvbXBpbGVyX2dudQotCi1DQz0iJGx0X3NhdmVfQ0MiCi0KLQk7OwotCi0gICAgICAqKQotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFVuc3VwcG9ydGVkIHRhZyBuYW1lOiAkdGFnbmFtZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBVbnN1cHBvcnRlZCB0YWcgbmFtZTogJHRhZ25hbWUiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQk7OwotICAgICAgZXNhYwotCi0gICAgICAjIEFwcGVuZCB0aGUgbmV3IHRhZyBuYW1lIHRvIHRoZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICAgICAgaWYgdGVzdCAtbiAiJHRhZ25hbWUiIDsgdGhlbgotICAgICAgYXZhaWxhYmxlX3RhZ3M9IiRhdmFpbGFibGVfdGFncyAkdGFnbmFtZSIKLSAgICBmaQotICAgIGZpCi0gIGRvbmUKLSAgSUZTPSIkbHRfc2F2ZV9pZnMiCi0KLSAgIyBOb3cgc3Vic3RpdHV0ZSB0aGUgdXBkYXRlZCBsaXN0IG9mIGF2YWlsYWJsZSB0YWdzLgotICBpZiBldmFsICJzZWQgLWUgJ3MvXmF2YWlsYWJsZV90YWdzPS4qXCQvYXZhaWxhYmxlX3RhZ3M9XCIkYXZhaWxhYmxlX3RhZ3NcIi8nIFwiJG9maWxlXCIgPiBcIiR7b2ZpbGV9VFwiIjsgdGhlbgotICAgIG12ICIke29maWxlfVQiICIkb2ZpbGUiCi0gICAgY2htb2QgK3ggIiRvZmlsZSIKLSAgZWxzZQotICAgIHJtIC1mICIke29maWxlfVQiCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogdW5hYmxlIHRvIHVwZGF0ZSBsaXN0IG9mIGF2YWlsYWJsZSB0YWdnZWQgY29uZmlndXJhdGlvbnMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHVuYWJsZSB0byB1cGRhdGUgbGlzdCBvZiBhdmFpbGFibGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQotZmkKLQotCi0KLSMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKLUxJQlRPT0xfREVQUz0iJGFjX2F1eF9kaXIvbHRtYWluLnNoIgotCi0jIEFsd2F5cyB1c2Ugb3VyIG93biBsaWJ0b29sLgotTElCVE9PTD0nJChTSEVMTCkgJCh0b3BfYnVpbGRkaXIpL2xpYnRvb2wnCi0KLSMgUHJldmVudCBtdWx0aXBsZSBleHBhbnNpb24KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotIyBDaGVja3MgZm9yIHByb2dyYW1zLgotIyBGaW5kIGEgZ29vZCBpbnN0YWxsIHByb2dyYW0uICBXZSBwcmVmZXIgYSBDIHByb2dyYW0gKGZhc3RlciksCi0jIHNvIG9uZSBzY3JpcHQgaXMgYXMgZ29vZCBhcyBhbm90aGVyLiAgQnV0IGF2b2lkIHRoZSBicm9rZW4gb3IKLSMgaW5jb21wYXRpYmxlIHZlcnNpb25zOgotIyBTeXNWIC9ldGMvaW5zdGFsbCwgL3Vzci9zYmluL2luc3RhbGwKLSMgU3VuT1MgL3Vzci9ldGMvaW5zdGFsbAotIyBJUklYIC9zYmluL2luc3RhbGwKLSMgQUlYIC9iaW4vaW5zdGFsbAotIyBBbWlnYU9TIC9DL2luc3RhbGwsIHdoaWNoIGluc3RhbGxzIGJvb3RibG9ja3Mgb24gZmxvcHB5IGRpc2NzCi0jIEFJWCA0IC91c3IvYmluL2luc3RhbGxic2QsIHdoaWNoIGRvZXNuJ3Qgd29yayB3aXRob3V0IGEgLWcgZmxhZwotIyBBRlMgL3Vzci9hZnN3cy9iaW4vaW5zdGFsbCwgd2hpY2ggbWlzaGFuZGxlcyBub25leGlzdGVudCBhcmdzCi0jIFNWUjQgL3Vzci91Y2IvaW5zdGFsbCwgd2hpY2ggdHJpZXMgdG8gdXNlIHRoZSBub25leGlzdGVudCBncm91cCAic3RhZmYiCi0jIE9TLzIncyBzeXN0ZW0gaW5zdGFsbCwgd2hpY2ggaGFzIGEgY29tcGxldGVseSBkaWZmZXJlbnQgc2VtYW50aWMKLSMgLi9pbnN0YWxsLCB3aGljaCBjYW4gYmUgZXJyb25lb3VzbHkgY3JlYXRlZCBieSBtYWtlIGZyb20gLi9pbnN0YWxsLnNoLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhIEJTRC1jb21wYXRpYmxlIGluc3RhbGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYSBCU0QtY29tcGF0aWJsZSBpbnN0YWxsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAteiAiJElOU1RBTEwiOyB0aGVuCi1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfaW5zdGFsbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gICMgQWNjb3VudCBmb3IgcGVvcGxlIHdobyBwdXQgdHJhaWxpbmcgc2xhc2hlcyBpbiBQQVRIIGVsZW1lbnRzLgotY2FzZSAkYXNfZGlyLyBpbgotICAuLyB8IC4vLyB8IC9jQy8qIHwgXAotICAvZXRjLyogfCAvdXNyL3NiaW4vKiB8IC91c3IvZXRjLyogfCAvc2Jpbi8qIHwgL3Vzci9hZnN3cy9iaW4vKiB8IFwKLSAgPzpcXC9vczJcXC9pbnN0YWxsXFwvKiB8ID86XFwvT1MyXFwvSU5TVEFMTFxcLyogfCBcCi0gIC91c3IvdWNiLyogKSA7OwotICAqKQotICAgICMgT1NGMSBhbmQgU0NPIE9EVCAzLjAgaGF2ZSB0aGVpciBvd24gbmFtZXMgZm9yIGluc3RhbGwuCi0gICAgIyBEb24ndCB1c2UgaW5zdGFsbGJzZCBmcm9tIE9TRiBzaW5jZSBpdCBpbnN0YWxscyBzdHVmZiBhcyByb290Ci0gICAgIyBieSBkZWZhdWx0LgotICAgIGZvciBhY19wcm9nIGluIGdpbnN0YWxsIHNjb2luc3QgaW5zdGFsbDsgZG8KLSAgICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotCWlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3Byb2ckYWNfZXhlY19leHQiOyB0aGVuCi0JICBpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgotCSAgICBncmVwIGRzcG1zZyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAgICMgQUlYIGluc3RhbGwuICBJdCBoYXMgYW4gaW5jb21wYXRpYmxlIGNhbGxpbmcgY29udmVudGlvbi4KLQkgICAgOgotCSAgZWxpZiB0ZXN0ICRhY19wcm9nID0gaW5zdGFsbCAmJgotCSAgICBncmVwIHB3cGx1cyAiJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAgICMgcHJvZ3JhbS1zcGVjaWZpYyBpbnN0YWxsIHNjcmlwdCB1c2VkIGJ5IEhQIHB3cGx1cy0tZG9uJ3QgdXNlLgotCSAgICA6Ci0JICBlbHNlCi0JICAgIGFjX2N2X3BhdGhfaW5zdGFsbD0iJGFzX2Rpci8kYWNfcHJvZyRhY19leGVjX2V4dCAtYyIKLQkgICAgYnJlYWsgMwotCSAgZmkKLQlmaQotICAgICAgZG9uZQotICAgIGRvbmUKLSAgICA7OwotZXNhYwotZG9uZQotCi0KLWZpCi0gIGlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9pbnN0YWxsK3NldH0iID0gc2V0OyB0aGVuCi0gICAgSU5TVEFMTD0kYWNfY3ZfcGF0aF9pbnN0YWxsCi0gIGVsc2UKLSAgICAjIEFzIGEgbGFzdCByZXNvcnQsIHVzZSB0aGUgc2xvdyBzaGVsbCBzY3JpcHQuICBXZSBkb24ndCBjYWNoZSBhCi0gICAgIyBwYXRoIGZvciBJTlNUQUxMIHdpdGhpbiBhIHNvdXJjZSBkaXJlY3RvcnksIGJlY2F1c2UgdGhhdCB3aWxsCi0gICAgIyBicmVhayBvdGhlciBwYWNrYWdlcyB1c2luZyB0aGUgY2FjaGUgaWYgdGhhdCBkaXJlY3RvcnkgaXMKLSAgICAjIHJlbW92ZWQsIG9yIGlmIHRoZSBwYXRoIGlzIHJlbGF0aXZlLgotICAgIElOU1RBTEw9JGFjX2luc3RhbGxfc2gKLSAgZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkSU5TVEFMTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kSU5TVEFMTCIgPiY2Ci0KLSMgVXNlIHRlc3QgLXogYmVjYXVzZSBTdW5PUzQgc2ggbWlzaGFuZGxlcyBicmFjZXMgaW4gJHt2YXItdmFsfS4KLSMgSXQgdGhpbmtzIHRoZSBmaXJzdCBjbG9zZSBicmFjZSBlbmRzIHRoZSB2YXJpYWJsZSBzdWJzdGl0dXRpb24uCi10ZXN0IC16ICIkSU5TVEFMTF9QUk9HUkFNIiAmJiBJTlNUQUxMX1BST0dSQU09JyR7SU5TVEFMTH0nCi0KLXRlc3QgLXogIiRJTlNUQUxMX1NDUklQVCIgJiYgSU5TVEFMTF9TQ1JJUFQ9JyR7SU5TVEFMTH0nCi0KLXRlc3QgLXogIiRJTlNUQUxMX0RBVEEiICYmIElOU1RBTExfREFUQT0nJHtJTlNUQUxMfSAtbSA2NDQnCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGxuIC1zIHdvcmtzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBsbiAtcyB3b3Jrcy4uLiAkRUNIT19DIiA+JjYKLUxOX1M9JGFzX2xuX3MKLWlmIHRlc3QgIiRMTl9TIiA9ICJsbiAtcyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vLCB1c2luZyAkTE5fUyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubywgdXNpbmcgJExOX1MiID4mNgotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgJHtNQUtFLW1ha2V9IHNldHMgXCQoTUFLRSkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyICR7TUFLRS1tYWtlfSBzZXRzIFwkKE1BS0UpLi4uICRFQ0hPX0MiID4mNgotc2V0IGR1bW15ICR7TUFLRS1tYWtlfTsgYWNfbWFrZT1gZWNobyAiJDIiIHwgc2VkICd5LDouLystLF9fX3BfLCdgCi1pZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfcHJvZ19tYWtlXyR7YWNfbWFrZX1fc2V0K3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC5tYWtlIDw8XF9BQ0VPRgotYWxsOgotCUBlY2hvICdhY19tYWtldGVtcD0iJChNQUtFKSInCi1fQUNFT0YKLSMgR05VIG1ha2Ugc29tZXRpbWVzIHByaW50cyAibWFrZVsxXTogRW50ZXJpbmcuLi4iLCB3aGljaCB3b3VsZCBjb25mdXNlIHVzLgotZXZhbCBgJHtNQUtFLW1ha2V9IC1mIGNvbmZ0ZXN0Lm1ha2UgMj4vZGV2L251bGwgfCBncmVwIHRlbXA9YAotaWYgdGVzdCAtbiAiJGFjX21ha2V0ZW1wIjsgdGhlbgotICBldmFsIGFjX2N2X3Byb2dfbWFrZV8ke2FjX21ha2V9X3NldD15ZXMKLWVsc2UKLSAgZXZhbCBhY19jdl9wcm9nX21ha2VfJHthY19tYWtlfV9zZXQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5tYWtlCi1maQotaWYgZXZhbCAidGVzdCBcImBlY2hvICckYWNfY3ZfcHJvZ19tYWtlXycke2FjX21ha2V9X3NldGBcIiA9IHllcyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIFNFVF9NQUtFPQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci0gIFNFVF9NQUtFPSJNQUtFPSR7TUFLRS1tYWtlfSIKLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZWdyZXAiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZWdyZXAuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfZWdyZXArc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgZWNobyBhIHwgKGdyZXAgLUUgJyhhfGIpJykgPi9kZXYvbnVsbCAyPiYxCi0gICAgdGhlbiBhY19jdl9wcm9nX2VncmVwPSdncmVwIC1FJwotICAgIGVsc2UgYWNfY3ZfcHJvZ19lZ3JlcD0nZWdyZXAnCi0gICAgZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19lZ3JlcCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfcHJvZ19lZ3JlcCIgPiY2Ci0gRUdSRVA9JGFjX2N2X3Byb2dfZWdyZXAKLQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInBzIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBwczsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9QU1BST0crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkUFNQUk9HIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1BTUFJPRz0iJFBTUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9QU1BST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLVBTUFJPRz0kYWNfY3ZfcGF0aF9QU1BST0cKLQotaWYgdGVzdCAtbiAiJFBTUFJPRyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFBTUFJPRyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kUFNQUk9HIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJwZXJsIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBwZXJsOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX1BFUkxQUk9HK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhc2UgJFBFUkxQUk9HIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1BFUkxQUk9HPSIkUEVSTFBST0ciICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgotICA7OwotICAqKQotICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgotICAgIGFjX2N2X3BhdGhfUEVSTFBST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLVBFUkxQUk9HPSRhY19jdl9wYXRoX1BFUkxQUk9HCi0KLWlmIHRlc3QgLW4gIiRQRVJMUFJPRyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFBFUkxQUk9HIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRQRVJMUFJPRyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLSMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAicHl0aG9uIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBweXRob247IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfUFlUSE9OUFJPRytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRQWVRIT05QUk9HIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1BZVEhPTlBST0c9IiRQWVRIT05QUk9HIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX1BZVEhPTlBST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLVBZVEhPTlBST0c9JGFjX2N2X3BhdGhfUFlUSE9OUFJPRwotCi1pZiB0ZXN0IC1uICIkUFlUSE9OUFJPRyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFBZVEhPTlBST0ciID4mNQotZWNobyAiJHtFQ0hPX1R9JFBZVEhPTlBST0ciID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1mb3IgYWNfcHJvZyBpbiB3aG9hbWkgbG9nbmFtZQotZG8KLSAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCi1zZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3Byb2dfV0hPQU1JK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGlmIHRlc3QgLW4gIiRXSE9BTUkiOyB0aGVuCi0gIGFjX2N2X3Byb2dfV0hPQU1JPSIkV0hPQU1JIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdC4KLWVsc2UKLWFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcHJvZ19XSE9BTUk9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotV0hPQU1JPSRhY19jdl9wcm9nX1dIT0FNSQotaWYgdGVzdCAtbiAiJFdIT0FNSSI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFdIT0FNSSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kV0hPQU1JIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotICB0ZXN0IC1uICIkV0hPQU1JIiAmJiBicmVhawotZG9uZQotdGVzdCAtbiAiJFdIT0FNSSIgfHwgV0hPQU1JPSJ3aG9hbWkiCi0KLWZvciBhY19wcm9nIGluIHNlZCBnc2VkCi1kbwotICAjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgIiRhY19wcm9nIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSAkYWNfcHJvZzsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHJvZ19TRUQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJFNFRCI7IHRoZW4KLSAgYWNfY3ZfcHJvZ19TRUQ9IiRTRUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX1NFRD0iJGFjX3Byb2ciCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotZmkKLWZpCi1TRUQ9JGFjX2N2X3Byb2dfU0VECi1pZiB0ZXN0IC1uICIkU0VEIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkU0VEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRTRUQiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRTRUQiICYmIGJyZWFrCi1kb25lCi0KLWZvciBhY19wcm9nIGluIGZpbmQKLWRvCi0gICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJGFjX3Byb2ciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15ICRhY19wcm9nOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX0ZJTkQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAtbiAiJEZJTkQiOyB0aGVuCi0gIGFjX2N2X3Byb2dfRklORD0iJEZJTkQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0LgotZWxzZQotYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wcm9nX0ZJTkQ9IiRhY19wcm9nIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLWZpCi1maQotRklORD0kYWNfY3ZfcHJvZ19GSU5ECi1pZiB0ZXN0IC1uICIkRklORCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEZJTkQiID4mNQotZWNobyAiJHtFQ0hPX1R9JEZJTkQiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0gIHRlc3QgLW4gIiRGSU5EIiAmJiBicmVhawotZG9uZQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImF1dG9jb25mIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSBhdXRvY29uZjsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9BVVRPQ09ORitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRBVVRPQ09ORiBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9BVVRPQ09ORj0iJEFVVE9DT05GIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0FVVE9DT05GPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1BVVRPQ09ORj0kYWNfY3ZfcGF0aF9BVVRPQ09ORgotCi1pZiB0ZXN0IC1uICIkQVVUT0NPTkYiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRBVVRPQ09ORiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kQVVUT0NPTkYiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImF1dG9oZWFkZXIiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGF1dG9oZWFkZXI7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfQVVUT0hFQURFUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRBVVRPSEVBREVSIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX0FVVE9IRUFERVI9IiRBVVRPSEVBREVSIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0FVVE9IRUFERVI9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLUFVVE9IRUFERVI9JGFjX2N2X3BhdGhfQVVUT0hFQURFUgotCi1pZiB0ZXN0IC1uICIkQVVUT0hFQURFUiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJEFVVE9IRUFERVIiID4mNQotZWNobyAiJHtFQ0hPX1R9JEFVVE9IRUFERVIiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0NPTkYiID0gIngiOyB0aGVuCi0JQVVUT0NPTkY9IjoiCi0KLWZpCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0hFQURFUiIgPSAieCI7IHRoZW4KLQlBVVRPSEVBREVSPSI6IgotCi1maQotCi0jIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgInVuYW1lIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KLXNldCBkdW1teSB1bmFtZTsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9VTkFNRVBST0crc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2FzZSAkVU5BTUVQUk9HIGluCi0gIFtcXC9dKiB8ID86W1xcL10qKQotICBhY19jdl9wYXRoX1VOQU1FUFJPRz0iJFVOQU1FUFJPRyIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCi0gIDs7Ci0gICopCi0gIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKLWZvciBhc19kaXIgaW4gJFBBVEgKLWRvCi0gIElGUz0kYXNfc2F2ZV9JRlMKLSAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCi0gICAgYWNfY3ZfcGF0aF9VTkFNRVBST0c9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGZvdW5kICRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiID4mNQotICAgIGJyZWFrIDIKLSAgZmkKLWRvbmUKLWRvbmUKLQotICA7OwotZXNhYwotZmkKLVVOQU1FUFJPRz0kYWNfY3ZfcGF0aF9VTkFNRVBST0cKLQotaWYgdGVzdCAtbiAiJFVOQU1FUFJPRyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJFVOQU1FUFJPRyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kVU5BTUVQUk9HIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBVTkFNRVBST0cgIiRVTkFNRVBST0ciCi1fQUNFT0YKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFuIEFOU0kgQy1jb25mb3JtaW5nIGNvbnN0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX2NvbnN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi1pbnQKLW1haW4gKCkKLXsKLS8qIEZJWE1FOiBJbmNsdWRlIHRoZSBjb21tZW50cyBzdWdnZXN0ZWQgYnkgUGF1bC4gKi8KLSNpZm5kZWYgX19jcGx1c3BsdXMKLSAgLyogVWx0cml4IG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KLSAgdHlwZWRlZiBpbnQgY2hhcnNldFsyXTsKLSAgY29uc3QgY2hhcnNldCB4OwotICAvKiBTdW5PUyA0LjEuMSBjYyByZWplY3RzIHRoaXMuICAqLwotICBjaGFyIGNvbnN0ICpjb25zdCAqY2NwOwotICBjaGFyICoqcDsKLSAgLyogTkVDIFNWUjQuMC4yIG1pcHMgY2MgcmVqZWN0cyB0aGlzLiAgKi8KLSAgc3RydWN0IHBvaW50IHtpbnQgeCwgeTt9OwotICBzdGF0aWMgc3RydWN0IHBvaW50IGNvbnN0IHplcm8gPSB7MCwwfTsKLSAgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzLgotICAgICBJdCBkb2VzIG5vdCBsZXQgeW91IHN1YnRyYWN0IG9uZSBjb25zdCBYKiBwb2ludGVyIGZyb20gYW5vdGhlciBpbgotICAgICBhbiBhcm0gb2YgYW4gaWYtZXhwcmVzc2lvbiB3aG9zZSBpZi1wYXJ0IGlzIG5vdCBhIGNvbnN0YW50Ci0gICAgIGV4cHJlc3Npb24gKi8KLSAgY29uc3QgY2hhciAqZyA9ICJzdHJpbmciOwotICBjY3AgPSAmZyArIChnID8gZy1nIDogMCk7Ci0gIC8qIEhQVVggNy4wIGNjIHJlamVjdHMgdGhlc2UuICovCi0gICsrY2NwOwotICBwID0gKGNoYXIqKikgY2NwOwotICBjY3AgPSAoY2hhciBjb25zdCAqY29uc3QgKikgcDsKLSAgeyAvKiBTQ08gMy4ydjQgY2MgcmVqZWN0cyB0aGlzLiAgKi8KLSAgICBjaGFyICp0OwotICAgIGNoYXIgY29uc3QgKnMgPSAwID8gKGNoYXIgKikgMCA6IChjaGFyIGNvbnN0ICopIDA7Ci0KLSAgICAqdCsrID0gMDsKLSAgfQotICB7IC8qIFNvbWVvbmUgdGhpbmtzIHRoZSBTdW4gc3VwcG9zZWRseS1BTlNJIGNvbXBpbGVyIHdpbGwgcmVqZWN0IHRoaXMuICAqLwotICAgIGludCB4W10gPSB7MjUsIDE3fTsKLSAgICBjb25zdCBpbnQgKmZvbyA9ICZ4WzBdOwotICAgICsrZm9vOwotICB9Ci0gIHsgLyogU3VuIFNDMS4wIEFOU0kgY29tcGlsZXIgcmVqZWN0cyB0aGlzIC0tIGJ1dCBub3QgdGhlIGFib3ZlLiAqLwotICAgIHR5cGVkZWYgY29uc3QgaW50ICppcHRyOwotICAgIGlwdHIgcCA9IDA7Ci0gICAgKytwOwotICB9Ci0gIHsgLyogQUlYIFhMIEMgMS4wMi4wLjAgcmVqZWN0cyB0aGlzIHNheWluZwotICAgICAgICJrLmMiLCBsaW5lIDIuMjc6IDE1MDYtMDI1IChTKSBPcGVyYW5kIG11c3QgYmUgYSBtb2RpZmlhYmxlIGx2YWx1ZS4gKi8KLSAgICBzdHJ1Y3QgcyB7IGludCBqOyBjb25zdCBpbnQgKmFwWzNdOyB9OwotICAgIHN0cnVjdCBzICpiOyBiLT5qID0gNTsKLSAgfQotICB7IC8qIFVMVFJJWC0zMiBWMy4xIChSZXYgOSkgdmNjIHJlamVjdHMgdGhpcyAqLwotICAgIGNvbnN0IGludCBmb28gPSAxMDsKLSAgfQotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9jX2NvbnN0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9jX2NvbnN0PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2NvbnN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2NvbnN0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2NfY29uc3QgPSBubzsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBjb25zdAotX0FDRU9GCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW5saW5lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlubGluZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfY19pbmxpbmUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfY19pbmxpbmU9bm8KLWZvciBhY19rdyBpbiBpbmxpbmUgX19pbmxpbmVfXyBfX2lubGluZTsgZG8KLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWZuZGVmIF9fY3BsdXNwbHVzCi10eXBlZGVmIGludCBmb29fdDsKLXN0YXRpYyAkYWNfa3cgZm9vX3Qgc3RhdGljX2ZvbyAoKSB7cmV0dXJuIDA7IH0KLSRhY19rdyBmb29fdCBmb28gKCkge3JldHVybiAwOyB9Ci0jZW5kaWYKLQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2NfaW5saW5lPSRhY19rdzsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9jX2lubGluZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfY19pbmxpbmUiID4mNgotCi0KLWNhc2UgJGFjX2N2X2NfaW5saW5lIGluCi0gIGlubGluZSB8IHllcykgOzsKLSAgKikKLSAgICBjYXNlICRhY19jdl9jX2lubGluZSBpbgotICAgICAgbm8pIGFjX3ZhbD07OwotICAgICAgKikgYWNfdmFsPSRhY19jdl9jX2lubGluZTs7Ci0gICAgZXNhYwotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNpZm5kZWYgX19jcGx1c3BsdXMKLSNkZWZpbmUgaW5saW5lICRhY192YWwKLSNlbmRpZgotX0FDRU9GCi0gICAgOzsKLWVzYWMKLQotCi0KLSMgZ2V0IHZlcnNpb24gbnVtYmVyLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBuZXQtc25tcCB2ZXJzaW9uIG51bWJlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBuZXQtc25tcCB2ZXJzaW9uIG51bWJlci4uLiAkRUNIT19DIiA+JjYKLVZFUlNJT049JFBBQ0tBR0VfVkVSU0lPTgotCi0jIGNyZWF0ZSB0aGUgcmVsZWFzZSB2ZXJzaW9uIG51bWJlci4uLi4gIEknbSBub3Qgc3VyZSB0aGlzIGlzIHVzZWQKLSMgYW55d2hlcmUgYW55IGxvbmdlci4KLV9yZWxlYXNlX3ZlcnNpb249YGVjaG8gJFZFUlNJT04gfCBzZWQgJ3MvIjsuKi8vO3MvLioiLy87cy9wcmUvMC4vOydgCi0KLVJFTEVBU0VWRVJTSU9OPWBlY2hvICRfcmVsZWFzZV92ZXJzaW9uIHwgc2VkICdzL15cKFswLTldXClcLlwoWzAtOV1cKS9cMTpcMjowLydgCi0KLQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRWRVJTSU9OIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRWRVJTSU9OIiA+JjYKLQotICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCi0gIE5ldC1TTk1QIFZlcnNpb246ICAgICAgICAgICAkVkVSU0lPTgotRU9GCi0KLQotIyBzdXBlciB0eXBlIGNoZWNraW5nCi0jIFdXV1hYWAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkZXZlbG9wZXIgZ2NjIGZsYWdzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRldmVsb3BlciBnY2MgZmxhZ3MuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBkZXZlbG9wZXIgZ2NjIGZsYWdzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBkZXZlbG9wZXIgZ2NjIGZsYWdzLi4uICIgPiY2OyB9CiBpZiB0ZXN0ICJ4JGRldmVsb3BlciIgPSAieHllcyIgLWEgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgotICBERVZGTEFHUz0iLVdhbGwgLVdpbmxpbmUgLVdzdHJpY3QtcHJvdG90eXBlcyAtV3dyaXRlLXN0cmluZ3MgLVdjYXN0LXF1YWwgLVduby1jaGFyLXN1YnNjcmlwdHMiCisKKyAgICAjICAgICAgIFdXV1hYWCAtIHN0cmljdCB0eXBlIGNoZWNraW5nCisgICAgIworICAgIERFVkZMQUdTPSItV2FsbCAtV3N0cmljdC1wcm90b3R5cGVzIC1Xd3JpdGUtc3RyaW5ncyAtV2Nhc3QtcXVhbCIKIGVsc2UKLSAgREVWRkxBR1M9IiIKKyAgICBERVZGTEFHUz0iIgogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRERVZGTEFHUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kREVWRkxBR1MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRERVZGTEFHUyIgPiY1CiskYXNfZWNobyAiJERFVkZMQUdTIiA+JjY7IH0KIAogCisKKyMgICBidWlsZGluZyBvdXRzaWRlIHNvdXJjZSBkaXJlY3RvcnkKICMKLSMgaGFja3MgZm9yIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkKLSMKLSMgMSkgbWFrZSBzdXJlIGJ1aWxkIGluY2x1ZGUgcGF0aHMgYXJlIGJlZm9yZSBzb3VyY2UKLSMgMikgY2hlY2sgZm9yIEdOVSBtYWtlIHRvIHVzZSB2cGF0aCBpbnN0ZWFkIG9mIFZQQVRICisjICAgICAgIGEpIGVuc3VyZSBidWlsZCBpbmNsdWRlIHBhdGhzIGFyZSBiZWZvcmUgc291cmNlCisjICAgICAgIGIpIGVuc3VyZSBHTlUgbWFrZSB1c2VzICd2cGF0aCcgaW5zdGVhZCBvZiAnVlBBVEgnCiAjCiBOT05fR05VX1ZQQVRIPSJWUEFUSCA9IgogR05VX3ZwYXRoPSIjdnBhdGgiCisKKyMgICAgICAgZGVmaW5lIGluY2x1ZGUgcGF0aHMgcmVsYXRpdmUgdG8gdG9wX3NyY2RpcgorIyAgICAgICB0d2VhayBpbmNsdWRlcyBpZiB3ZSdyZSBidWlsZGluZyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyCiAjCi0jIGRlZmluZSBpbmNsdWRlIHBhdGhzIHJlbGF0aXZlIHRvIHRvcF9zcmNkaXIKLSMgdHdlYWsgaW5jbHVkZXMgaWYgd2UncmUgYnVpbGRpbmcgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcgogaWYgdGVzdCAieCRzcmNkaXIiID0gInguIjsgdGhlbgotVE9QX0lOQ0xVREVTPVNSQ19UT1BfSU5DTFVERVMKLVNOTVBMSUJfSU5DTFVERVM9U1JDX1NOTVBMSUJfSU5DTFVERVMKLUFHRU5UX0lOQ0xVREVTPVNSQ19BR0VOVF9JTkNMVURFUwotSEVMUEVSX0lOQ0xVREVTPVNSQ19IRUxQRVJfSU5DTFVERVMKLU1JQkdST1VQX0lOQ0xVREVTPVNSQ19NSUJHUk9VUF9JTkNMVURFUworICAgIFRPUF9JTkNMVURFUz1TUkNfVE9QX0lOQ0xVREVTCisgICAgU05NUExJQl9JTkNMVURFUz1TUkNfU05NUExJQl9JTkNMVURFUworICAgIEFHRU5UX0lOQ0xVREVTPVNSQ19BR0VOVF9JTkNMVURFUworICAgIEhFTFBFUl9JTkNMVURFUz1TUkNfSEVMUEVSX0lOQ0xVREVTCisgICAgTUlCR1JPVVBfSU5DTFVERVM9U1JDX01JQkdST1VQX0lOQ0xVREVTCiBlbHNlCi1UT1BfSU5DTFVERVM9QkxEX1RPUF9JTkNMVURFUwotU05NUExJQl9JTkNMVURFUz1CTERfU05NUExJQl9JTkNMVURFUwotQUdFTlRfSU5DTFVERVM9QkxEX0FHRU5UX0lOQ0xVREVTCi1IRUxQRVJfSU5DTFVERVM9QkxEX0hFTFBFUl9JTkNMVURFUwotTUlCR1JPVVBfSU5DTFVERVM9QkxEX01JQkdST1VQX0lOQ0xVREVTCi1tYWtlIC12IC1mIC9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8IGdyZXAgR05VID4vZGV2L251bGwKLWhhdmVfZ251X21ha2U9JD8KLWlmIHRlc3QgJGhhdmVfZ251X21ha2UgLWVxIDAgOyB0aGVuCi0gICAgTk9OX0dOVV9WUEFUSD0iI1ZQQVRIID0iCi0gICAgR05VX3ZwYXRoPSJ2cGF0aCIKLWZpCisgICAgVE9QX0lOQ0xVREVTPUJMRF9UT1BfSU5DTFVERVMKKyAgICBTTk1QTElCX0lOQ0xVREVTPUJMRF9TTk1QTElCX0lOQ0xVREVTCisgICAgQUdFTlRfSU5DTFVERVM9QkxEX0FHRU5UX0lOQ0xVREVTCisgICAgSEVMUEVSX0lOQ0xVREVTPUJMRF9IRUxQRVJfSU5DTFVERVMKKyAgICBNSUJHUk9VUF9JTkNMVURFUz1CTERfTUlCR1JPVVBfSU5DTFVERVMKKyAgICBpZiB0ZXN0ICRoYXZlX2dudV9tYWtlIC1lcSAwIDsgdGhlbgorICAgICAgICBOT05fR05VX1ZQQVRIPSIjVlBBVEggPSIKKyAgICAgICAgR05VX3ZwYXRoPSJ2cGF0aCIKKyAgICBmaQogZmkKIAogCkBAIC0yMTQ1Niw0MCArMTUyODgsNTUgQEAKIAogCiAKLSMKLSMgQ2hlY2sgd2hldGhlciB3ZSBjYW4gdXNlIC1VeCAtRHg9eCB3aXRoIHRoZSBleHBlY3RlZCBiZWhhdmlvdXIKLSMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHRvIHVuLWRlZmluZSB0YXJnZXQgc3lzdGVtIHRva2VuIChiZWZvcmUgcmVkZWZpbmluZykiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRvIHVuLWRlZmluZSB0YXJnZXQgc3lzdGVtIHRva2VuIChiZWZvcmUgcmVkZWZpbmluZykuLi4gJEVDSE9fQyIgPiY2Ci1PTERfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLUNQUEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotWwotI2lmZGVmICRQQVJUSUFMVEFSR0VUT1MKLXllcwotI2VuZGlmCi1dCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBQQVJUSUFMVEFSR0VURkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKLSBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyMjCisjICAgU3lzdGVtLXJlbGF0ZWQgY29tcGlsYXRpb24gY2hlY2tzOgorIyMKKworIyAgICAgICBXaGF0IHN5c3RlbSBhcmUgd2UgYnVpbGRpbmcgZm9yCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRhcmdldCBzeXN0ZW0gdHlwZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0YXJnZXQgc3lzdGVtIHR5cGUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfdGFyZ2V0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgUEFSVElBTFRBUkdFVEZMQUdTPSItRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKLSBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIGlmIHRlc3QgIngkdGFyZ2V0X2FsaWFzIiA9IHg7IHRoZW4KKyAgYWNfY3ZfdGFyZ2V0PSRhY19jdl9ob3N0CitlbHNlCisgIGFjX2N2X3RhcmdldD1gJFNIRUxMICIkYWNfYXV4X2Rpci9jb25maWcuc3ViIiAkdGFyZ2V0X2FsaWFzYCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICIkU0hFTEwgJGFjX2F1eF9kaXIvY29uZmlnLnN1YiAkdGFyZ2V0X2FsaWFzIGZhaWxlZCIgIiRMSU5FTk8iIDUKIGZpCi1ybSAtZiBjb25mdGVzdCoKIAotQ0ZMQUdTPSIkQ0ZMQUdTICRQQVJUSUFMVEFSR0VURkxBR1MiCi1DUFBGTEFHUz0iJE9MRF9DUFBGTEFHUyIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3RhcmdldCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3RhcmdldCIgPiY2OyB9CitjYXNlICRhY19jdl90YXJnZXQgaW4KKyotKi0qKSA7OworKikgYXNfZm5fZXJyb3IgJD8gImludmFsaWQgdmFsdWUgb2YgY2Fub25pY2FsIHRhcmdldCIgIiRMSU5FTk8iIDU7OworZXNhYwordGFyZ2V0PSRhY19jdl90YXJnZXQKK2FjX3NhdmVfSUZTPSRJRlM7IElGUz0nLScKK3NldCB4ICRhY19jdl90YXJnZXQKK3NoaWZ0Cit0YXJnZXRfY3B1PSQxCit0YXJnZXRfdmVuZG9yPSQyCitzaGlmdDsgc2hpZnQKKyMgUmVtZW1iZXIsIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgSUZTIGlzIHVzZWQgdG8gY3JlYXRlICQqLAorIyBleGNlcHQgd2l0aCBvbGQgc2hlbGxzOgordGFyZ2V0X29zPSQqCitJRlM9JGFjX3NhdmVfSUZTCitjYXNlICR0YXJnZXRfb3MgaW4gKlwgKikgdGFyZ2V0X29zPWBlY2hvICIkdGFyZ2V0X29zIiB8IHNlZCAncy8gLy0vZydgOzsgZXNhYworCisKKyMgVGhlIGFsaWFzZXMgc2F2ZSB0aGUgbmFtZXMgdGhlIHVzZXIgc3VwcGxpZWQsIHdoaWxlICRob3N0IGV0Yy4KKyMgd2lsbCBnZXQgY2Fub25pY2FsaXplZC4KK3Rlc3QgLW4gIiR0YXJnZXRfYWxpYXMiICYmCisgIHRlc3QgIiRwcm9ncmFtX3ByZWZpeCRwcm9ncmFtX3N1ZmZpeCRwcm9ncmFtX3RyYW5zZm9ybV9uYW1lIiA9IFwKKyAgICBOT05FTk9ORXMseCx4LCAmJgorICBwcm9ncmFtX3ByZWZpeD0ke3RhcmdldF9hbGlhc30tCisKK1BBUlRJQUxUQVJHRVRPUz1gZWNobyAkdGFyZ2V0X29zIHwgc2VkICdzL1stLl9dLiovLydgCisKIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgIEJ1aWxkaW5nIGZvcjogICAgICAgICAgICAgICAkUEFSVElBTFRBUkdFVE9TCkBAIC0yMTQ5OCwyNCArMTUzNDUsMTA4IEBACiAKIAogIwotIyBjaGVjayBmb3Igc3BlY2lhbCBpbmNsdWRlcyBhbmQgcGljayBvbmUKKyMgICAgV2hldGhlciBvciBub3QgQ3lnd2luJ3MgbGQgcmVjb2duaXplcyB0aGUgZmxhZyAtbm8tdW5kZWZpbmVkLgogIwogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN5c3RlbSBpbmNsdWRlIGZpbGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3lzdGVtIGluY2x1ZGUgZmlsZS4uLiAkRUNIT19DIiA+JjYKK2Nhc2UgeCR0YXJnZXRfb3MgaW4KK3hjeWd3aW4qKQorICBzYXZlZF9MREZMQUdTPSRMREZMQUdTCisKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgLW5vLXVuZGVmaW5lZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBsaW5rZXIgc3VwcG9ydHMgLW5vLXVuZGVmaW5lZC4uLiAiID4mNjsgfQorICBMREZMQUdTPSIkc2F2ZWRfTERGTEFHUyAtV2wsLW5vLXVuZGVmaW5lZCIKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9OyAgICAgICAgICAgICAgICAgICBMRF9OT19VTkRFRklORUQ9LW5vLXVuZGVmaW5lZAorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgIExERkxBR1M9IiRzYXZlZF9MREZMQUdTIgorICA7OworZXNhYworCisKKworCisjCisjICAgU29ja2V0IGxpYnJhcnk6IGVpdGhlciAnZGVmYXVsdCcgKG5vbi1NaW5HVykgb3IgJ3dpbnNvY2syJyAoTWluR1cpLgorIworY2FzZSB4JHRhcmdldF9vcyBpbgorICB4bWluZ3cqKQorICAgIHdpdGhfc29ja2xpYj13aW5zb2NrMgorICAgIGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisgICAgICBDRkxBR1M9Ii1EX1dJTjMyX1dJTk5UPTB4MDUwMSAkQ0ZMQUdTIgorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB3aXRoX3NvY2tsaWI9ZGVmYXVsdDs7Citlc2FjCisKKworIyAgIENoZWNrIHN5c3RlbSBkZWZpbmUgYmVoYXZpb3VyCisjICAgICAgIERvZXMgIi1VeCAtRHg9eCIgd29yayBhcyBleHBlY3RlZD8KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0byB1bi1kZWZpbmUgdGFyZ2V0IHN5c3RlbSB0b2tlbiAoYmVmb3JlIHJlZGVmaW5pbmcpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gdW4tZGVmaW5lIHRhcmdldCBzeXN0ZW0gdG9rZW4gKGJlZm9yZSByZWRlZmluaW5nKS4uLiAiID4mNjsgfQorT0xEX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCitDUFBGTEFHUz0iLVUkUEFSVElBTFRBUkdFVE9TIC1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgorCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCitbCisjaWZkZWYgJFBBUlRJQUxUQVJHRVRPUworeWVzCisjZW5kaWYKKyAgICBdCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgICAgUEFSVElBTFRBUkdFVEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCisgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KK2Vsc2UKKyAgICBQQVJUSUFMVEFSR0VURkxBR1M9Ii1EJFBBUlRJQUxUQVJHRVRPUz0kUEFSVElBTFRBUkdFVE9TIgorICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitDRkxBR1M9IiRDRkxBR1MgJFBBUlRJQUxUQVJHRVRGTEFHUyIKK0NQUEZMQUdTPSIkT0xEX0NQUEZMQUdTIgorCisKKyMgICAgICAgRGV0ZXJtaW5lIGFwcHJvcHJpYXRlIDxuZXQtc25tcC9zeXN0ZW0ve29zfS5oPiBpbmNsdWRlCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXN0ZW0gaW5jbHVkZSBmaWxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXN0ZW0gaW5jbHVkZSBmaWxlLi4uICIgPiY2OyB9CiAKIGZpbGViYXNlPSR0YXJnZXRfb3MKICMgaWdub3JlIGJpbmFyeSBmb3JtYXQgaW5kaWNhdGlvbgotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2VsZi8vJ2AKLWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9hb3V0Ly8nYAotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2Vjb2ZmLy8nYAotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2NvZmYvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2VsZi8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvYW91dC8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvZWNvZmYvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2NvZmYvLydgCiB3aGlsZSB0ZXN0ICJ4JGZpbGViYXNlIiAhPSAieCRsYXN0IiAtYSAhIC1mICRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vJGZpbGViYXNlLmgKIGRvCiAgICAgbGFzdD0kZmlsZWJhc2UKLSAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKKyAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL1stLl9dW14tLl9dKiQvLydgCiAgICAgaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgotCWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9bMC05XSokLy8nYAorCWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvWzAtOV0qJC8vJ2AKICAgICBmaQogZG9uZQogCkBAIC0yMTUyNCwyNCArMTU0NTUsMjQgQEAKIGZpCiBhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEU9Im5ldC1zbm1wL3N5c3RlbS8kZmlsZWJhc2UuaCIKIAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiID4mNjsgfQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUgIiRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiCiBfQUNFT0YKIAogCi0jIHNlY29uZCBwYXJ0LCB0aGUgQ1BVIHR5cGUuCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbWFjaGluZS10eXBlIGluY2x1ZGUgZmlsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYWNoaW5lLXR5cGUgaW5jbHVkZSBmaWxlLi4uICRFQ0hPX0MiID4mNgorIyAgICAgICBEZXRlcm1pbmUgYXBwcm9wcmlhdGUgPG5ldC1zbm1wL21hY2hpbmUve2NwdX0uaD4gaW5jbHVkZQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbWFjaGluZS10eXBlIGluY2x1ZGUgZmlsZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbWFjaGluZS10eXBlIGluY2x1ZGUgZmlsZS4uLiAiID4mNjsgfQogCiBmaWxlYmFzZT0kdGFyZ2V0X2NwdQogd2hpbGUgdGVzdCAieCRmaWxlYmFzZSIgIT0gIngkbGFzdCIgLWEgISAtZiAkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS8kZmlsZWJhc2UuaAogZG8KICAgICBsYXN0PSRmaWxlYmFzZQotICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9bLS5fXVteLS5fXSokLy8nYAorICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKIGRvbmUKIAogaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgpAQCAtMjE1NDksMjAgKzE1NDgwLDU5IEBACiBmaQogYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRT0ibmV0LXNubXAvbWFjaGluZS8kZmlsZWJhc2UuaCIKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiID4mNgotCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFIiA+JjY7IH0KIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSAiJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUiCiBfQUNFT0YKIAogCisKKyMjCisjICAgUGxhdGZvcm0tc3BlY2lmaWMgY29tcGlsYXRpb24gY2hlY2tzOgorIyMKKworIyAgIFByZXByb2Nlc3NvciBjaGVja3M6CisjCisKKyMgICAgICAgTW9yZSBzZW5zaWJsZSBzeXN0ZW0gaWRlbnRpZmllciAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KKwlDRkxBR1M9IiRDRkxBR1MgLURtaW5ndzMyIgorZmkKKworIyAgICAgICBIYW5kbGUgLmluIGZpbGUgZXh0ZW5zaW9uICAgICAgICAgICAgICAgICAgICAgICAoR0NDKQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWRkaXRpb25hbCBjcHAgZmxhZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFkZGl0aW9uYWwgY3BwIGZsYWdzLi4uICIgPiY2OyB9CitpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkQ1BQIiA9ICJ4JENDIC1FIjsgdGhlbgorICAgIEVYVFJBQ1BQRkxBR1M9Ii14IGMiCitlbHNlCisgICAgRVhUUkFDUFBGTEFHUz0iIgorZmkKKworIyAgICAgICBTb2xhcmlzIGV4dHJhIENQUCBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMKK2lmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KKyAgICBjYXNlICR0YXJnZXRfb3MgaW4KKyAgICAgICAgc29sYXJpcyopIEVYVFJBQ1BQRkxBR1M9IiRFWFRSQUNQUEZMQUdTIC1YcyIgOzsKKyAgICBlc2FjCitmaQorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRVhUUkFDUFBGTEFHUyIgPiY1CiskYXNfZWNobyAiJEVYVFJBQ1BQRkxBR1MiID4mNjsgfQorCisKKyMgICBDb21waWxlciBjaGVja3M6CisjCisKICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAiJENDIiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KIHNldCBkdW1teSAkQ0M7IGFjX3dvcmQ9JDIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX3dvcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3BhdGhfQ0NQQVRIK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9DQ1BBVEgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBjYXNlICRDQ1BBVEggaW4KICAgW1xcL10qIHwgPzpbXFwvXSopCkBAIC0yMTU3NCw5OSArMTU1NDQsNjYgQEAKIGRvCiAgIElGUz0kYXNfc2F2ZV9JRlMKICAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KLSAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCi0gIGlmICRhc19leGVjdXRhYmxlX3AgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB0aGVuCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KICAgICBhY19jdl9wYXRoX0NDUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKICAgOzsKIGVzYWMKIGZpCiBDQ1BBVEg9JGFjX2N2X3BhdGhfQ0NQQVRICi0KIGlmIHRlc3QgLW4gIiRDQ1BBVEgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRDQ1BBVEgiID4mNQotZWNobyAiJHtFQ0hPX1R9JENDUEFUSCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkQ0NQQVRIIiA+JjUKKyRhc19lY2hvICIkQ0NQQVRIIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKLSMgd2F0Y2ggb3V0IGZvciAvdXNyL3VjYi9jYyBvbiBzb2xhcmlzLCBpdCBkb2Vzbid0IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuCisKIGNhc2UgJHRhcmdldF9vcyBpbgogICAgIGJzZGkqKQorICAgICAgICAjICAgQ2hlY2sgZm9yIGJ1bmRsZWQgY29tcGlsZXIgICAgICAgICAgICAgICAgICAoQlNEaSkKKyAgICAgICAgIwogCWlmIHRlc3QgIngkQ0NQQVRIIiA9ICJ4L3Vzci91Y2IvY2MiIC1vICJ4JENDUEFUSCIgPSAieC91c3IvYmluL2NjIjsgdGhlbgotCSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOgorCSAgICBhc19mbl9lcnJvciAkPyAiCiAKICoqKiBUaGUgQlNESSAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLgogKioqIFBsZWFzZSBydW4gY29uZmlndXJlIHdpdGggLS13aXRoLWNjPWdjYwotIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6Ci0KLSoqKiBUaGUgQlNESSAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLgotKioqIFBsZWFzZSBydW4gY29uZmlndXJlIHdpdGggLS13aXRoLWNjPWdjYwotIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisiICIkTElORU5PIiA1CiAJZmkKICAgICA7OwogICAgIHNvbGFyaXMqKQorICAgICAgICAjICAgQ2hlY2sgZm9yIGJ1bmRsZWQgY29tcGlsZXIgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyAgICAgICAgIwogCWlmIHRlc3QgIngkQ0NQQVRIIiA9ICJ4L3Vzci91Y2IvY2MiOyB0aGVuCi0JICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6CisJICAgIGFzX2ZuX2Vycm9yICQ/ICIKIAogKioqIFRoZSBzb2xhcmlzIC91c3IvdWNiL2NjIGNvbXBpbGVyIGRvZXMgbm90IHdvcmsgd2l0aCB0aGlzIHBhY2thZ2UuCiAqKiogUGxlYXNlIHB1dCBhIGRpZmZlcmVudCBjb21waWxlciBpbiB5b3VyIHBhdGggZmlyc3Qgb3IgcnVuCiAqKiogY29uZmlndXJlIHdpdGggLS13aXRoLWNjPVhYLCB3aGVyZSBYWCBpcyB0aGUgY29tcGlsZXIgeW91IHdhbnQgdG8gdXNlLgotIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6Ci0KLSoqKiBUaGUgc29sYXJpcyAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLgotKioqIFBsZWFzZSBwdXQgYSBkaWZmZXJlbnQgY29tcGlsZXIgaW4geW91ciBwYXRoIGZpcnN0IG9yIHJ1bgotKioqIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1YWCwgd2hlcmUgWFggaXMgdGhlIGNvbXBpbGVyIHlvdSB3YW50IHRvIHVzZS4KLSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIiAiJExJTkVOTyIgNQogCWZpCiAgICAgOzsKIGVzYWMKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhZGRpdGlvbmFsIGNwcCBmbGFncyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBhZGRpdGlvbmFsIGNwcCBmbGFncy4uLiAkRUNIT19DIiA+JjYKLSMgZ2NjIGV4dHJhIENQUEZMQUdTCi1pZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkQ1BQIiA9ICJ4JENDIC1FIjsgdGhlbgotICAjIGV4dHJhIGNwcCBmbGFncyBmb3IgZ251IGMgY29tcGlsZXIgdG8gYWxsb3cgLmluIGZpbGUgZXh0ZW5zaW9ucy4KLSAgRVhUUkFDUFBGTEFHUz0iLXggYyIKLWVsc2UKLSAgRVhUUkFDUFBGTEFHUz0iIgotZmkKLQotIyBTb2xhcmlzIGV4dHJhIGNwcCBmbGFncy4KLWlmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KLSAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgc29sYXJpcyopIEVYVFJBQ1BQRkxBR1M9IiRFWFRSQUNQUEZMQUdTIC1YcyIgOzsKLSAgZXNhYwotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkRVhUUkFDUFBGTEFHUyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kRVhUUkFDUFBGTEFHUyIgPiY2CiAKICMgICBDb21waWxlciBmbGFnczoKICMKIAogIyBUaGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaXMgbm90IHN0cmljdC1hbGlhc2luZyBzYWZlLCBzbyBhZGQKICMgLWZuby1zdHJpY3QtYWxpYXNpbmcgdG8gJENGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZuby1zdHJpY3QtYWxpYXNpbmciID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyAtZm5vLXN0cmljdC1hbGlhc2luZy4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZuby1zdHJpY3QtYWxpYXNpbmciID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZuby1zdHJpY3QtYWxpYXNpbmcuLi4gIiA+JjY7IH0KIG5ldHNubXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCiBDRkxBR1M9Ii1mbm8tc3RyaWN0LWFsaWFzaW5nICRDRkxBR1MiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CkBAIC0yMTY3Nyw3OCArMTU2MTQsMTk3IEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi0KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KICAgQ0ZMQUdTPSIkbmV0c25tcF9zYXZlX0NGTEFHUyIKIAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogCi0jIFByZWZpeGVzIG11c3QgYmVnaW4gd2l0aCAiLyIgb3IgW0EtWl0gZm9sbG93ZWQgYnkgY29sb24uCiAKKyMgICBMaW5rZXIgY2hlY2tzOgorIworCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBhaXg0LjIqfGFpeDQuMyp8YWl4NSp8YWl4Nip8YWl4NyopCisgICAgICAgICMgICBSdW50aW1lIGxpbmtpbmcgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgIChBSVgpCisgICAgICAgICMKKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGF0IGxpbmtlciBmbGFncyB0byBhZGQgdG8gZW5hYmxlIHJ1bnRpbWUgbGlua2luZyBvbiBBSVgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hhdCBsaW5rZXIgZmxhZ3MgdG8gYWRkIHRvIGVuYWJsZSBydW50aW1lIGxpbmtpbmcgb24gQUlYLi4uICIgPiY2OyB9CisgICAgICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworICAgICAgICAgICAgaWYgKHRlc3QgJGxkX2ZsYWcgPSAiLWJydGwiIHx8IHRlc3QgJGxkX2ZsYWcgPSAiLVdsLC1icnRsIik7IHRoZW4KKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vaz15ZXMKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgZG9uZQorICAgICAgICBpZiB0ZXN0ICJYJG5ldHNubXBfYWl4X3J1bnRpbWVsaW5raW5nX2ZsYWdzX29rIiAhPSAiWHllcyI7IHRoZW4KKwkgICAgaWYgdGVzdCAieCRHQ0MiID0gInh5ZXMiOyB0aGVuCisJICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItV2wsLWJydGwiCisJICAgIGVsc2UKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2FpeF9sZGZsYWdzPSItYnJ0bCIKKwkgICAgZmkKKyAgICAgICAgICAgIExERkxBR1M9IiRuZXRzbm1wX2FpeF9sZGZsYWdzICRMREZMQUdTIgorCSAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfYWl4X2xkZmxhZ3MiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2FpeF9sZGZsYWdzIiA+JjY7IH0KKwllbHNlCisJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBub25lIiA+JjUKKyRhc19lY2hvICJub25lIiA+JjY7IH0KKwlmaQorCTs7CisKKyAgICBkYXJ3aW44KnxkYXJ3aW45KnxkYXJ3aW4xMCp8ZGFyd2luMTEqfGRhcndpbjEyKnxkYXJ3aW4xMyopCisgICAgICAgICMgICBGbGF0IE5hbWVzcGFjZSBsaW5raW5nICAgICAgICAgICAgICAgICAgICAgIChNYWMgT1MvWCkKKyAgICAgICAgIworICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgZGFyd2luIGxkIG1pZ2h0IG5lZWQgLWZsYXRfbmFtZXNwYWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgZGFyd2luIGxkIG1pZ2h0IG5lZWQgLWZsYXRfbmFtZXNwYWNlLi4uICIgPiY2OyB9CisJaWYgdGVzdCAteiAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCI7IHRoZW4KKwkJTERGTEFHUz0iLWZsYXRfbmFtZXNwYWNlIC1mcmFtZXdvcmsgQ29yZUZvdW5kYXRpb24gLWZyYW1ld29yayBDb3JlU2VydmljZXMgLWZyYW1ld29yayBEaXNrQXJiaXRyYXRpb24gLWZyYW1ld29yayBJT0tpdCAkTERGTEFHUyIKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwllbHNlCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCWZpCisJOzsKKworICAgICopCisgICAgICAgIDs7Citlc2FjCisKKworIyAgICAgICBkcGtnIHBhY2thZ2UgKHN3aW50c3RfYXB0KQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCisjIEV4dHJhY3QgdGhlIGZpcnN0IHdvcmQgb2YgImRwa2ctcXVlcnkiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgorc2V0IGR1bW15IGRwa2ctcXVlcnk7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0RQS0dfUVVFUllfUEFUSCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhc2UgJERQS0dfUVVFUllfUEFUSCBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9EUEtHX1FVRVJZX1BBVEg9IiREUEtHX1FVRVJZX1BBVEgiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworICAqKQorICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgICAgZm9yIGFjX2V4ZWNfZXh0IGluICcnICRhY19leGVjdXRhYmxlX2V4dGVuc2lvbnM7IGRvCisgIGlmIHsgdGVzdCAtZiAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgJiYgJGFzX3Rlc3RfeCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IH07IHRoZW4KKyAgICBhY19jdl9wYXRoX0RQS0dfUVVFUllfUEFUSD0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCisgIGZpCitkb25lCisgIGRvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKKworICA7OworZXNhYworZmkKK0RQS0dfUVVFUllfUEFUSD0kYWNfY3ZfcGF0aF9EUEtHX1FVRVJZX1BBVEgKK2lmIHRlc3QgLW4gIiREUEtHX1FVRVJZX1BBVEgiOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkRFBLR19RVUVSWV9QQVRIIiA+JjUKKyRhc19lY2hvICIkRFBLR19RVUVSWV9QQVRIIiA+JjY7IH0KK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CitmaQorCisKK2lmIHRlc3QgeCREUEtHX1FVRVJZX1BBVEggIT0geDsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0RQS0dfUVVFUlkgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyMKKyMgICBOb24tcHJvZ3JhbS9jb21waWxhdGlvbiBjaGVja3M6CisjIworCisjICAgICAgIFN1YnN0aXR1dGUgdmVyc2lvbiBudW1iZXIuCisjCitWRVJTSU9OPSRQQUNLQUdFX1ZFUlNJT04KKworCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgTmV0LVNOTVAgVmVyc2lvbjogICAgICAgICAgICRQQUNLQUdFX1ZFUlNJT04KK0VPRgorCisKKworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ29uZmlndXJlIHBhdGhzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBQcmVmaXggcGF0aHM6CisjIworCisjICAgTWFpbiBwcmVmaXgKKyMKIGlmIHRlc3QgIngkcHJlZml4IiA9ICJ4Tk9ORSI7IHRoZW4KICAgcHJlZml4PS91c3IvbG9jYWwKIGZpCiAKLWZjaD1gZWNobyAkcHJlZml4IHwgc2VkICdzL1woLlwpLiovXDEvJ2AKLWlmIHRlc3QgIngkZmNoIiAhPSAieC8iIDsgdGhlbgotICAgc2NoPWBlY2hvICRwcmVmaXggfCBzZWQgJ3MvLlwoLlwpLiovXDEvJ2AKLSAgIGlmIHRlc3QgIngkc2NoIiAhPSAieDoiIDsgdGhlbgorIyAgICAgICBQcmVmaXggbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoCisjICAgICAgICAgICBpLmUuIGJlZ2luIHdpdGggIi8iICAgICAgICAgICAgICAgICAgICAgICAgIChVbml4KQorIyAgICAgICAgICAgICAgICBvciAiW0EtWl06IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2luZG93cykKKyMKK2ZpcnN0Y2hhcj1gZWNobyAkcHJlZml4IHwgJFNFRCAncy9cKC5cKS4qL1wxLydgCitpZiB0ZXN0ICJ4JGZpcnN0Y2hhciIgIT0gIngvIiA7IHRoZW4KKyAgIHNlY29uZGNoYXI9YGVjaG8gJHByZWZpeCB8ICRTRUQgJ3MvLlwoLlwpLiovXDEvJ2AKKyAgIGlmIHRlc3QgIngkc2Vjb25kY2hhciIgIT0gIng6IiA7IHRoZW4KICAgICAgIHByZWZpeD1gcHdkYC8kcHJlZml4CiAgICAgICBlY2hvICJhZGp1c3RpbmcgcHJlZml4IHRvICRwcmVmaXgiCiAgICBmaQogZmkKIAotaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gIGV4ZWNfcHJlZml4PSRwcmVmaXgKLWZpCiAKLWZjaD1gZWNobyAkZXhlY19wcmVmaXggfCBzZWQgJ3MvXCguXCkuKi9cMS8nYAotaWYgdGVzdCAieCRmY2giICE9ICJ4LyIgOyB0aGVuCi0gICBzY2g9YGVjaG8gJGV4ZWNfcHJlZml4IHwgc2VkICdzLy5cKC5cKS4qL1wxLydgCi0gICBpZiB0ZXN0ICJ4JHNjaCIgIT0gIng6IiA7IHRoZW4KLSAgICAgIGV4ZWNfcHJlZml4PWBwd2RgLyRleGVjX3ByZWZpeAotICAgICAgZWNobyAiYWRqdXN0aW5nIGV4ZWNfcHJlZml4IHRvICRleGVjX3ByZWZpeCIKKyMgICBFeGVjIHByZWZpeAorIworIyAgICAgICBQcmVmaXggbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoCisjICAgICAgICAgICBpLmUuIGJlZ2luIHdpdGggIi8iICAgICAgICAgICAgICAgICAgICAgICAgIChVbml4KQorIyAgICAgICAgICAgICAgICBvciAiW0EtWl06IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2luZG93cykKKyMKK2lmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgorICAgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKK2Vsc2UKKyAgIGZpcnN0Y2hhcj1gZWNobyAkZXhlY19wcmVmaXggfCAkU0VEICdzL1woLlwpLiovXDEvJ2AKKyAgIGlmIHRlc3QgIngkZmlyc3RjaGFyIiAhPSAieC8iIDsgdGhlbgorICAgICAgc2Vjb25kY2hhcj1gZWNobyAkZXhlY19wcmVmaXggfCAkU0VEICdzLy5cKC5cKS4qL1wxLydgCisgICAgICBpZiB0ZXN0ICJ4JHNlY29uZGNoYXIiICE9ICJ4OiIgOyB0aGVuCisgICAgICAgICBleGVjX3ByZWZpeD1gcHdkYC8kZXhlY19wcmVmaXgKKyAgICAgICAgIGVjaG8gImFkanVzdGluZyBleGVjX3ByZWZpeCB0byAkZXhlY19wcmVmaXgiCisgICAgICBmaQogICAgZmkKIGZpCiAKLSMgU2V0IFNOTVBMSUJQQVRIICYgU05NUFNIQVJFUEFUSAogCisjIworIyAgIEVudmlyb25tZW50YWwgdmFyaWFibGVzOgorIyMKKworIyAgICAgICBTTk1QTElCUEFUSAorIwogU05NUExJQlBBVEg9IiIKIHRtcHNldD0iJGxpYmRpci9zbm1wIgogd2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBMSUJQQVRIIjsgZG8KLSAgU05NUExJQlBBVEg9IiR0bXBzZXQiCi0gIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgorICAgIFNOTVBMSUJQQVRIPSIkdG1wc2V0IgorICAgIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgogZG9uZQogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTTk1QTElCUEFUSCAiJFNOTVBMSUJQQVRIIgpAQCAtMjE3NjAsMTEgKzE1ODE2LDEzIEBACiBfQUNFT0YKIAogCisjICAgICAgIFNOTVBTSEFSRVBBVEgKKyMKIFNOTVBTSEFSRVBBVEg9IiIKIHRtcHNldD0iJGRhdGFkaXIvc25tcCIKIHdoaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QU0hBUkVQQVRIIjsgZG8KLSAgU05NUFNIQVJFUEFUSD0iJHRtcHNldCIKLSAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCisgICAgU05NUFNIQVJFUEFUSD0iJHRtcHNldCIKKyAgICBldmFsIHRtcHNldD0iJHRtcHNldCIKIGRvbmUKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU05NUFNIQVJFUEFUSCAiJFNOTVBTSEFSRVBBVEgiCkBAIC0yMTc3MiwyMyArMTU4MzAsMjkgQEAKIAogCiAKKyMgICAgICAgTUlCRElSUyAgIChkZWZhdWx0KQorIwogaWYgdGVzdCAieCRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgPSAieCI7IHRoZW4KLSAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IlwkSE9NRS8uc25tcC9taWJzOiRTTk1QU0hBUkVQQVRIL21pYnMiCi0gIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KLSAgICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiB8ICRTRUQgJ3MvOi87L2cnYAotICBmaQotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisgICAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IlwkSE9NRS8uc25tcC9taWJzOiRTTk1QU0hBUkVQQVRIL21pYnMiCisgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICAgICAgICAjCisgICAgICAgICMgICAgVVNlIFdpbmRvd3Mtc3R5bGUgcGF0aCBzZXBhcmF0b3IKKyAgICAgICAgTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9YGVjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgfCAkU0VEICdzLzovOy9nJ2AKKyAgICBmaQorICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgTkVUU05NUF9ERUZBVUxUX01JQkRJUlMgIiRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIKIF9BQ0VPRgogCiBmaQogCiAKKyMgICAgICAgU05NUENPTkZQQVRICisjCiBTTk1QQ09ORlBBVEg9IiIKIHRtcHNldD0iJHN5c2NvbmZkaXIvc25tcCIKIHdoaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QQ09ORlBBVEgiOyBkbwotICBTTk1QQ09ORlBBVEg9IiR0bXBzZXQiCi0gIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgorICAgIFNOTVBDT05GUEFUSD0iJHRtcHNldCIKKyAgICBldmFsIHRtcHNldD0iJHRtcHNldCIKIGRvbmUKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU05NUENPTkZQQVRIICIkU05NUENPTkZQQVRIIgpAQCAtMjE3OTYsMzAzNCArMTU4NjAsMjQ0MiBAQAogCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzaG9ydC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaG9ydCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKKyMgIENvcmU6Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBBTlNJIEMgaGVhZGVyIGZpbGVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zdGRjKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8ZmxvYXQuaD4KKwogaW50CiBtYWluICgpCiB7Ci1pZiAoKHNob3J0ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoc2hvcnQpKQotICByZXR1cm4gMDsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfc2hvcnQ9eWVzCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hlYWRlcl9zdGRjPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3Nob3J0PW5vCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3Nob3J0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3Nob3J0IiA+JjYKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2Ygc2hvcnQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9zaG9ydCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKyAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK19BQ0VPRgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgIm1lbWNociIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAiZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9oZWFkZXJfc3RkYz1ubworZmkKK3JtIC1mIGNvbmZ0ZXN0KgorCitmaQorCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgorICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgOgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKKyMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKKyMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKKyNlbHNlCisjIGRlZmluZSBJU0xPV0VSKGMpIFwKKwkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKKwkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCisJCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCisjIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQorI2VuZGlmCisKKyNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCitpbnQKK21haW4gKCkKK3sKKyAgaW50IGk7CisgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCisJfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCisgICAgICByZXR1cm4gMjsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zdGRjPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKKworZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zdGRjIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNjsgfQoraWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1REQ19IRUFERVJTIDEiID4+Y29uZmRlZnMuaAorCitmaQorICAgICAgICAgICMgIDxzdGRsaWIuaD4sIDxzdGRhcmcuaD4sICAgPHN0cmluZy5oPiAgJiA8ZmxvYXQuaD4KK2FjX2hlYWRlcl9kaXJlbnQ9bm8KK2ZvciBhY19oZHIgaW4gZGlyZW50Lmggc3lzL25kaXIuaCBzeXMvZGlyLmggbmRpci5oOyBkbworICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfZGlyZW50XyRhY19oZHIiIHwgJGFzX3RyX3NoYAoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfaGRyIHRoYXQgZGVmaW5lcyBESVIuLi4gIiA+JjY7IH0KK2lmIGV2YWwgXCR7JGFzX2FjX0hlYWRlcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDwkYWNfaGRyPgorCitpbnQKK21haW4gKCkKK3sKK2lmICgoRElSICopIDApCityZXR1cm4gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKK2Vsc2UKKyAgZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCitldmFsIGFjX3Jlcz1cJCRhc19hY19IZWFkZXIKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGRyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCithY19oZWFkZXJfZGlyZW50PSRhY19oZHI7IGJyZWFrCitmaQorCitkb25lCisjIFR3byB2ZXJzaW9ucyBvZiBvcGVuZGlyIGV0IGFsLiBhcmUgaW4gLWxkaXIgYW5kIC1seCBvbiBTQ08gWGVuaXguCitpZiB0ZXN0ICRhY19oZWFkZXJfZGlyZW50ID0gZGlyZW50Lmg7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgb3BlbmRpciAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG9wZW5kaXIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgZGlyOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfb3BlbmRpcj1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9vcGVuZGlyCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKK2Vsc2UKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuZGlyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9vcGVuZGlyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgb3BlbmRpciAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG9wZW5kaXIgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgeDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9vcGVuZGlyPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfb3BlbmRpcis6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfb3BlbmRpcgoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCitmaQorICAgICAgICAjICA8ZGlyZW50Lmg+LCA8c3lzL25kaXIuaD4sIDxzeXMvZGlyLmg+ICYgPG5kaXIuaD4KKyMgIEFwcHM6Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl9zeXNfd2FpdF9oKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaWZuZGVmIFdFWElUU1RBVFVTCisjIGRlZmluZSBXRVhJVFNUQVRVUyhzdGF0X3ZhbCkgKCh1bnNpZ25lZCBpbnQpIChzdGF0X3ZhbCkgPj4gOCkKKyNlbmRpZgorI2lmbmRlZiBXSUZFWElURUQKKyMgZGVmaW5lIFdJRkVYSVRFRChzdGF0X3ZhbCkgKCgoc3RhdF92YWwpICYgMjU1KSA9PSAwKQorI2VuZGlmCisKK2ludAorbWFpbiAoKQoreworICBpbnQgczsKKyAgd2FpdCAoJnMpOworICBzID0gV0lGRVhJVEVEIChzKSA/IFdFWElUU1RBVFVTIChzKSA6IDE7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9eWVzCitlbHNlCisgIGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjY7IH0KK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1lTX1dBSVRfSCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKyAgICAgICMgIDxzeXMvd2FpdC5oPgorCisjIGFsbG93IGZvciBxdWljayBtb2R1bGUvbGlicmFyeS9ldGMgcHJvY2Vzc2luZyBjaGVja3MKK2lmIHRlc3QgIngkTkVUU05NUF9RVUlDS19DSEVDSyIgPSAieCIgOyB0aGVuCisKKyMjCisjICAgU3RhbmQtYWxvbmUgaGVhZGVyczoKKyMjCisjICBDb3JlOgorZm9yIGFjX2hlYWRlciBpbiBnZXRvcHQuaCAgIHB0aHJlYWQuaCAgcmVnZXguaCAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZy5oICAgc3lzbG9nLmggICB1bmlzdGQuaCAgICAgICAgICAgICAgICAgICAgICAgc3RkaW50LmggICBpbnR0eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvcGFyYW0uaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3NlbGVjdC5oICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9zb2NrZXQuaCAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdGltZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3RpbWViLmggICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy91bi5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgTGlicmFyeSBhbmQgQWdlbnQ6Citmb3IgYWNfaGVhZGVyIGluIG5saXN0LmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIm5saXN0LmgiICJhY19jdl9oZWFkZXJfbmxpc3RfaCIgIgorJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmbmRlZiBMSUJCU0RfRElTQUJMRV9ERVBSRUNBVEVECisjZGVmaW5lIExJQkJTRF9ESVNBQkxFX0RFUFJFQ0FURUQgMQorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25saXN0X2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9OTElTVF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgTGlicmFyeToKK2ZvciBhY19oZWFkZXIgaW4gZmNudGwuaCAgICBpby5oICAgICAgIGtzdGF0LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbWl0cy5oICAgbG9jYWxlLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvZmlsZS5oICAgICAgIHN5cy9pb2N0bC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3NvY2tpby5oICAgICBzeXMvc3RhdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9zeXN0ZW1jZmcuaCAgc3lzL3N5c3RlbWluZm8uaCAgICAgICAgICAgICAgICAgICAgICBzeXMvdGltZXMuaCAgICAgIHN5cy91aW8uaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3V0c25hbWUuaCAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlweC9pcHguaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgIEFnZW50OgorZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oICAgIGVyci5oICAgICAgZmNudGwuaCAgICBmc3RhYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnAuaCAgICAgIGlvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvY3Rscy5oICAga3N0YXQuaCAgICBrdm0uaCAgICAgIGxpbWl0cy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1udGVudC5oICAgbXRhYi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwa2dsb2NzLmggICAgICAgICAgICAgcHdkLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tX2Vyci5oICAgICAgICAgICAgIGV0L2NvbV9lcnIuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHV0bXB4LmggICAgdXRzbmFtZS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworZm9yIGFjX2hlYWRlciBpbiBzeXMvZGlza2lvLmggIHN5cy9ka2lvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvZmlsZS5oICAgIHN5cy9maWxpby5oICAgc3lzL2ZpeHBvaW50LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvZnMuaCAgICAgIHN5cy9pb2N0bC5oICAgc3lzL2xvYWRhdmcuaCAgc3lzL21udGVudC5oICAgICAgICAgICAgICAgICAgICBzeXMvbW50dGFiLmggIHN5cy9wb29sLmggICAgc3lzL3Byb3Rvc3cuaCAgc3lzL3BzdGF0LmggICAgICAgICAgICAgICAgICAgICBzeXMvc29ja2lvLmggIHN5cy9zdGF0LmggICAgc3lzL3N0YXRmcy5oICAgc3lzL3N0YXR2ZnMuaCAgICAgICAgICAgICAgICAgICBzeXMvc3RyZWFtLmggIHN5cy9zeXNnZXQuaCAgc3lzL3N5c21wLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdGNwaXBzdGF0cy5oICAgICAgICAgICAgc3lzL3V0c25hbWUuaCAgc3lzL3Zmcy5oICAgICAgICAgICAgICAgICAgICAgICBzeXMvdm0uaCAgICAgIHN5cy92bW1hYy5oICAgc3lzL3ZtbWV0ZXIuaCAgc3lzL3ZtcGFyYW0uaCAgICAgICAgICAgICAgICAgICBzeXMvdm1zeXN0bS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworZm9yIGFjX2hlYWRlciBpbiBhc20vcGFnZS5oIGFzbS90eXBlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5ldC9taWIyLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbnV4L2hkcmVnLmggbGludXgvdGFza3MuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lL3BhcmFtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldC90Y3BfZnNtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVmcy9mcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dm0vdXZtX2V4dGVybi5oIHV2bS91dm1fcGFyYW0uaCAgICAgICAgICAgICAgICAgICAgICAgdm0vdm0uaCB2bS92bV9leHRlcm4uaCB2bS92bV9wYXJhbS5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgQXBwczoKK2ZvciBhY19oZWFkZXIgaW4gZmNudGwuaCAgICBncnAuaCAgICAgIHB3ZC5oICAgICAgICAgICAgICAgICAgICAgICAgc3lzL2NkZWZzLmggICBzeXMvaW9jdGwuaCAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3NvY2tldC5oICBzeXMvc29ja2lvLmggICAgICAgICAgICAgICAgICAgICAgICAgc3lzL3RpbWUuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgIE5vdC1Vc2VkOgorZm9yIGFjX2hlYWRlciBpbiBzZWFyY2guaCAgIHNndHR5LmggICAgeHRpLmggICAgICAgICAgICAgICAgICAgICAgICBzeXMvZG1hcC5oIHN5cy9wb2xsLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeXMvdGltZW91dC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lL3B0ZS5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwY2kvcGNpLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyMgVmFsZ3JpbmQKK2ZvciBhY19oZWFkZXIgaW4gdmFsZ3JpbmQvdmFsZ3JpbmQuaCB2YWxncmluZC9tZW1jaGVjay5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyMgT3BlblNTTAorZm9yIGFjX2hlYWRlciBpbiBvcGVuc3NsL2Flcy5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisgICAgICMgIChDb3JlKQorZm9yIGFjX2hlYWRlciBpbiBvcGVuc3NsL2RoLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKyAgICAgIyAgKEFwcHMpCisjICBOb3QtVXNlZDoKK2ZvciBhY19oZWFkZXIgaW4gb3BlbnNzbC9kZXMuaCAgb3BlbnNzbC9obWFjLmggICAgICAgICAgICAgICAgICAgb3BlbnNzbC9ldnAuaCAgc2VjdXJpdHkvY3J5cHRva2kuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgUlBNIHN1YmRpcmVjdG9yeSBwYXRoICAgICAgICAgICAgICAgICAgIChBZ2VudCkKK2lmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iOyB0aGVuCisgIGZvciBhY19oZWFkZXIgaW4gcnBtL3JwbXRzLmggICBycG0vcnBtZmlsZXV0aWwuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIjaW5jbHVkZSA8cnBtL3JwbWxpYi5oPgorIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKK2ZpCisKKworIyMKKyMgICBQcmUtcmVxdWlzaXRlIG9uIG90aGVyIGhlYWRlcnM6CisjIworCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3BhcmFtLmg+ICAoTUFYUEFUSExFTikgICAgICAgICAgIChPcGVuQlNEIDMuNCkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBzeXMvc3dhcC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvc3dhcC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zd2FwX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19zd2FwX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfU1dBUF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9wYXJhbS5oPiAgICAgICAgICAgICAgICAgICAgICAgICAoRnJlZUJTRCkKKyMKKyMgIENvcmU6ICAgICAgKD8gVGVzdGVkIGFib3ZlPyApCitmb3IgYWNfaGVhZGVyIGluIHN0ZGxpYi5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworIworIyAgTGlicmFyeToKK2ZvciBhY19oZWFkZXIgaW4gbWFsbG9jLmggICAgICAgIG5ldC9pZl9kbC5oICAgc3lzL3N5c2N0bC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworIworIyAgQWdlbnQ6Citmb3IgYWNfaGVhZGVyIGluIG1hbGxvYy5oICAgICAgICBvc3JlbGRhdGUuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWNoaW5lL3R5cGVzLmggbmV0L2lmX2RsLmggICBuZXQvaWZfdHlwZXMuaCAgICAgICAgICAgICAgICAgICAgc3lzL2Rrc3RhdC5oICAgIHN5cy9jb25mLmggICAgc3lzL21idWYuaCAgICAgICAgICAgICAgICAgICAgICAgIHN5cy9tb3VudC5oICAgICBzeXMvcHJvYy5oICAgIHN5cy9xdWV1ZS5oICAgICAgICAgICAgICAgICAgICAgICBzeXMvc3lzY3RsLmggICAgc3lzL3VzZXIuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKworIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9zZW1hLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAoSVJJWCA2LjUpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gc3lzL3NlbWEuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAic3lzL3NlbWEuaCIgImFjX2N2X2hlYWRlcl9zeXNfc2VtYV9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc2VtYV9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1lTX1NFTUFfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitmb3IgYWNfaGVhZGVyIGluIHN5cy9oYXNoaW5nLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInN5cy9oYXNoaW5nLmgiICJhY19jdl9oZWFkZXJfc3lzX2hhc2hpbmdfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TRU1BX0gKKyNpbmNsdWRlIDxzeXMvc2VtYS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19oYXNoaW5nX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfSEFTSElOR19IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9zb2NrZXQuaD4gICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcyA5KQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHN5cy9zb2NrZXR2YXIuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL3NvY2tldHZhci5oIiAiYWNfY3ZfaGVhZGVyX3N5c19zb2NrZXR2YXJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfc29ja2V0dmFyX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TWVNfU09DS0VUVkFSX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyBfS01FTVVTRVIgYW5kIDxzeXMvdHlwZXMuaD4gICAgICAgICAgIChCU0RpMy9JUklYKQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHN5cy92bm9kZS5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJzeXMvdm5vZGUuaCIgImFjX2N2X2hlYWRlcl9zeXNfdm5vZGVfaCIgIgorI2RlZmluZSBfS01FTVVTRVIgMQorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9zeXNfdm5vZGVfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19WTk9ERV9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyAgICAgICByZXF1aXJpbmcgPG1hY2hpbmUvdHlwZXMuaD4gICAgICAgICAgICAgICAgICAgICAoTmV0QlNEKQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIHN5cy9kaXNrbGFiZWwuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAic3lzL2Rpc2tsYWJlbC5oIiAiYWNfY3ZfaGVhZGVyX3N5c19kaXNrbGFiZWxfaCIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTUFDSElORV9UWVBFU19ICisjaW5jbHVkZSA8bWFjaGluZS90eXBlcy5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3N5c19kaXNrbGFiZWxfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NZU19ESVNLTEFCRUxfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMJUU5YCitmb3IgYWNfaGVhZGVyIGluIG5idXRpbC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJuYnV0aWwuaCIgImFjX2N2X2hlYWRlcl9uYnV0aWxfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmJ1dGlsX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9OQlVUSUxfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgVUZTIGhlYWRlcnMKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiB1ZnMvdWZzL2Rpbm9kZS5oIHVmcy91ZnMvcXVvdGEuaCB1ZnMvdWZzL2lub2RlLmggdWZzL2Zmcy9mcy5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfVUZTX1VGU19ESU5PREVfSAorI2luY2x1ZGUgPHVmcy91ZnMvZGlub2RlLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VGU19VRlNfUVVPVEFfSAorI2luY2x1ZGUgPHVmcy91ZnMvcXVvdGEuaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyA8dm0vdm0uaD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChCU0RpMikKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiB2bS9zd2FwX3BhZ2VyLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInZtL3N3YXBfcGFnZXIuaCIgImFjX2N2X2hlYWRlcl92bV9zd2FwX3BhZ2VyX2giICIKKyNpZiBIQVZFX1ZNX1ZNX0gKKyNpbmNsdWRlIDx2bS92bS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3ZtX3N3YXBfcGFnZXJfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1ZNX1NXQVBfUEFHRVJfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMgICAgICAgbmV0bGluay9ydG5ldGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExpbnV4KQorIyAgQWdlbnQ6CisjCitmb3IgYWNfaGVhZGVyIGluIGxpbnV4L25ldGxpbmsuaCAgbGludXgvcnRuZXRsaW5rLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9BU01fVFlQRVNfSAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0xJTlVYX05FVExJTktfSAorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisKKyMgICAgICAgTmV0d29yayBoZWFkZXJzCisjICBDb3JlIG9yIExpYnJhcnkvQWdlbnQvQXBwczoKKyMKK2ZvciBhY19oZWFkZXIgaW4gYXJwYS9pbmV0LmggICAgICAgIG5ldC9pZi5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvaW4uaCAgICAgICBuZXRkYi5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIgorI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICisjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworIworIyAgQWdlbnQ6Citmb3IgYWNfaGVhZGVyIGluIG5ldC9pZl9hcnAuaCAgICAgICBuZXQvaWZfbWliLmggICAgICAgICBuZXQvaWZfdmFyLmggICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvaWZfZXRoZXIuaCBuZXRpbmV0L2luX3N5c3RtLmggICBuZXRpbmV0L2luX3Zhci5oICAgICAgICAgICAgICAgICAgIG5ldGluZXQvaXAuaCAgICAgICBuZXRpbmV0L2lwX2ljbXAuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvaWNtcF92YXIuaCBuZXRpbmV0L2lwX3Zhci5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQvdGNwLmggICAgICBuZXRpbmV0L3RjcF90aW1lci5oICBuZXRpbmV0L3RjcF92YXIuaCAgICAgICAgICAgICAgICAgIG5ldGluZXQvdGNwaXAuaCAgICBuZXRpbmV0L3VkcC5oICAgICAgICBuZXRpbmV0L3VkcF92YXIuaCAgICAgICAgICAgICAgICAgIG5ldC9yb3V0ZS5oICAgICAgICBuZXRpbmV0L2ljbXA2LmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSUNNUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF9pY21wLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfVElNRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSUNNUDZfSAorI2luY2x1ZGUgPG5ldGluZXQvaWNtcDYuaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIEtBTUUgKElQdjYpIGhlYWRlcnMKKyMgIEFnZW50OgorIworIyBLQU1FCitmb3IgYWNfaGVhZGVyIGluIG5ldGluZXQvaXA2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYvaW42X3Zhci5oICAgIG5ldGluZXQ2L2luNl9wY2IuaCAgICAgICAgICAgICAgICAgICAgICBuZXRpbmV0Ni9pcDZfdmFyLmggICAgbmV0aW5ldDYvbmQ2LmggICAgICAgICAgICAgICAgICAgICAgICAgIG5ldGluZXQ2L3RjcDYuaCAgICAgICBuZXRpbmV0Ni90Y3A2X2ZzbS5oICAgICAgICAgICAgICAgICAgICAgbmV0aW5ldDYvdGNwNl90aW1lci5oIG5ldGluZXQ2L3RjcDZfdmFyLmgKK2RvIDoKKyAgYXNfYWNfSGVhZGVyPWAkYXNfZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIiRhY19oZWFkZXIiICIkYXNfYWNfSGVhZGVyIiAiCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQNl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIHJlcXVpcmluZyA8bmV0aW5ldC9pbi5oPiAgICAgICAgICAgICAgICAgICAgICAgIChPcGVuQlNEIDIuNikKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBuZXRpbmV0L2luX3BjYi5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJuZXRpbmV0L2luX3BjYi5oIiAiYWNfY3ZfaGVhZGVyX25ldGluZXRfaW5fcGNiX2giICIKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRpbmV0X2luX3BjYl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkVUSU5FVF9JTl9QQ0JfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyMjCisjICAgUHJlLXJlcXVpc2l0ZSBvbiBzcGVjaWZpYyB0eXBlcworIyMKKworIyAgICAgICBTcGVjaWFsIGhhY2sgdG8gZ2V0IGFyb3VuZCB2YXJpb3VzIHByb2JsZW1zIG9uIG9sZGVyIExpbnV4IGtlcm5lbHMKKyMgICAgICAgKG1ham9yIHVnaCEpCisjICBBZ2VudDoKKyMKK2ZvciBhY19oZWFkZXIgaW4gbGludXgvZXRodG9vbC5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJsaW51eC9ldGh0b29sLmgiICJhY19jdl9oZWFkZXJfbGludXhfZXRodG9vbF9oIiAiCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KK3R5cGVkZWYgX191NjQgdTY0OyAgICAgICAgIC8qIGhhY2ssIHNvIHdlIG1heSBpbmNsdWRlIGtlcm5lbCdzIGV0aHRvb2wuaCAqLwordHlwZWRlZiBfX3UzMiB1MzI7ICAgICAgICAgLyogZGl0dG8gKi8KK3R5cGVkZWYgX191MTYgdTE2OyAgICAgICAgIC8qIGRpdHRvICovCit0eXBlZGVmIF9fdTggdTg7ICAgICAgICAgICAvKiBkaXR0byAqLworCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saW51eF9ldGh0b29sX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSU5VWF9FVEhUT09MX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjIworIyAgIEhlYWRlcnMgcmVxdWlyaW5nIHBhcnRpY3VsYXIgbGlicmFyaWVzCisjIworCisjICAgICAgIGZvciBIb3N0UmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzIDIueCkKKyMgIEFnZW50OgorIworZm9yIGFjX2hlYWRlciBpbiBwa2dpbmZvLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInBrZ2luZm8uaCIgImFjX2N2X2hlYWRlcl9wa2dpbmZvX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BrZ2luZm9faCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BLR0lORk9fSCAxCitfQUNFT0YKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwa2dpbmZvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGtnaW5mby4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcGtnaW5mb19MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwa2dpbmZvICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGtnaW5mbyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBhZG0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBrZ2luZm8gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwa2dpbmZvICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3BrZ2luZm9fTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3BrZ2luZm9fTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcGtnaW5mb19MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGtnaW5mb19MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGtnaW5mb19MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUEtHSU5GTyAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworZmkKKworZG9uZQorCisKK2ZvciBhY19oZWFkZXIgaW4gcGtnLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgInBrZy5oIiAiYWNfY3ZfaGVhZGVyX3BrZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wa2dfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1BLR19IIDEKK19BQ0VPRgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHBrZ19pbml0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGtnX2luaXQuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBrZ19pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGtnX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcGtnIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwa2dfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBrZ19pbml0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3BrZ19pbml0X0xJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJQS0cgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKK2ZpCisKK2RvbmUKKworCitpZiB0ZXN0ICRhY19jdl9oZWFkZXJfcGtnX2ggPSBubwordGhlbgorICAgIHVuc2V0IGFjX2N2X2hlYWRlcl9wa2dfaAorICAgIG5ldHNubXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgIG5ldHNubXBfc2F2ZV9MREZMQUdTPSIkTERGTEFHUyIKKyAgICBDUFBGTEFHUz0iJENQUEZMQUdTIC1JL3Vzci9sb2NhbC9pbmNsdWRlIgorICAgIExERkxBR1M9IiRMREZMQUdTIC1ML3Vzci9sb2NhbC9saWIiCisgICAgZm9yIGFjX2hlYWRlciBpbiBwa2cuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicGtnLmgiICJhY19jdl9oZWFkZXJfcGtnX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BrZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUEtHX0ggMQorX0FDRU9GCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcGtnX2luaXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwa2dfaW5pdC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcGtnX2luaXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwa2dfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBwa2cgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBrZ19pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcGtnX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfcGtnX2luaXRfTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wa2dfaW5pdF9MSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlBLRyAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworZmkKKworZG9uZQorCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3BrZ19oID0gbm8KKyAgICB0aGVuCisgICAgICAgIENQUEZMQUdTPSIkbmV0c25tcF9zYXZlX0NQUEZMQUdTIgorICAgICAgICBMREZMQUdTPSIkbmV0c25tcF9zYXZlX0xERkxBR1MiCisgICAgZmkKK2ZpCisKK2Nhc2UgJHRhcmdldF9vcyBpbgorICAgIGFpeCopCisgICAgICAgICMgICAgICAgZm9yIENQVS9tZW1vcnkgc3RhdGlzdGljcyAgICAgICAgICAgICAgIChBSVgpCisgICAgICAgICMgIEFnZW50OgorICAgICAgICAjCisgICAgICAgIGZvciBhY19oZWFkZXIgaW4gbGlicGVyZnN0YXQuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAibGlicGVyZnN0YXQuaCIgImFjX2N2X2hlYWRlcl9saWJwZXJmc3RhdF9oIiAiCisjaWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saWJwZXJmc3RhdF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCUEVSRlNUQVRfSCAxCitfQUNFT0YKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwZXJmc3RhdF9jcHVfdG90YWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwZXJmc3RhdF9jcHVfdG90YWwuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3BlcmZzdGF0X2NwdV90b3RhbF9MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwZXJmc3RhdF9jcHVfdG90YWwgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwZXJmc3RhdF9jcHVfdG90YWwgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcGVyZnN0YXQgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBlcmZzdGF0X2NwdV90b3RhbCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBlcmZzdGF0X2NwdV90b3RhbCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19wZXJmc3RhdF9jcHVfdG90YWxfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3BlcmZzdGF0X2NwdV90b3RhbF9MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19wZXJmc3RhdF9jcHVfdG90YWxfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BlcmZzdGF0X2NwdV90b3RhbF9MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcGVyZnN0YXRfY3B1X3RvdGFsX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QRVJGU1RBVCAxIiA+PmNvbmZkZWZzLmgKKworIGVsc2UKKyAgICBhc19mbl9lcnJvciAkPyAiCisKKyoqKiBUbyBtb25pdG9yIENQVS9tZW1vcnkgdmFsdWVzIGluIEFJWCB5b3UgbmVlZCB0byBpbnN0YWxsCisqKiogbGlicGVyZnN0YXQgd2hpY2ggY2FuIGJlIGZvdW5kIGluIGJvcy5wZXJmCisiICIkTElORU5PIiA1CisgZmkKKworZmkKKworZG9uZQorCisgICAgICAgIDs7CisgICAgaHB1eCopCisgICAgICAgICMgICAgICAgSFAtVVggYWdlbnQgbmVlZHMgb3Blbl9taWIgICAgICAgKFhYWCAtIG5vdCBhIGhlYWRlciBjaGVjayEpCisgICAgICAgICMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBvcGVuX21pYiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5fbWliLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19vcGVuX21pYl9MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBvcGVuX21pYiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG9wZW5fbWliICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIG5tIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBvcGVuX21pYiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG9wZW5fbWliICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX29wZW5fbWliX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19vcGVuX21pYl9MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19vcGVuX21pYl9MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfb3Blbl9taWJfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX29wZW5fbWliX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTSAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworICAgICAgICA7OworICAgICopCisgICAgICAgIDs7Citlc2FjCisKKyMgICAgICAgZm9yIE1JQi0yIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEN5Z3dpbiBhbmQgTWluR1cpCisjICBDb3JlOgorIworZm9yIGFjX2hlYWRlciBpbiB3aW5kb3dzLmggaXBobHBhcGkuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorCisiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0hlYWRlciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCisjICAgICAgIGZvciBNSUItMiBpbmZvICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMgIENvcmU6CisjCitpZiB0ZXN0IHgkd2l0aF9zb2NrbGliID0geHdpbnNvY2syOyB0aGVuCisgIGZvciBhY19oZWFkZXIgaW4gd2luc29jay5oIHdpbnNvY2syLmggd3MydGNwaXAuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCitmaQorCisjCisjIGZvciB1Y2Qtc25tcC9sbXNlbnNvcnNNaWIKKyMKK2ZvciBhY19oZWFkZXIgaW4gc2Vuc29ycy9zZW5zb3JzLmggcGljbC5oCitkbyA6CisgIGFzX2FjX0hlYWRlcj1gJGFzX2VjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICIkYWNfaGVhZGVyIiAiJGFzX2FjX0hlYWRlciIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19IZWFkZXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKworIyMgIFRoaXMgaXMgaGVyZSB0byBhdm9pZCBsb2FkcyBvZiByZWRlZmluaXRpb24gd2FybmluZ3MgZHVyaW5nCisjIyAgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKworIyMKKyMgICBydGVudHJ5IHN0cnVjdHVyZSBjaGVja3M6CisjIworCisjIENoZWNrIHN0cnVjdCBydGVudHJ5IGZvciBjb21tb24gZmllbGRzCisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBydGVudHJ5IiAicnRfZHN0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X2RzdCIgIgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfZHN0IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBydGVudHJ5IiAicnRfaGFzaCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9oYXNoIiAiCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9oYXNoIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfSEFTSCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgcnRlbnRyeSIgInJ0X25leHQiICJhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCIgIgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX05FWFQgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHJ0ZW50cnkiICJydF9yZWZjbnQiICJhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfcmVmY250IiAiCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfcnRlbnRyeV9ydF9yZWZjbnQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9SRUZDTlQgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHJ0ZW50cnkiICJydF91bml0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X3VuaXQiICIKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfUk9VVEVfSAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X3VuaXQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VTklUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBydGVudHJ5IiAicnRfdXNlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ydGVudHJ5X3J0X3VzZSIgIgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3J0ZW50cnlfcnRfdXNlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVVNFIDEKK19BQ0VPRgorCisKK2ZpCisKKworZmkgIyBORVRTTk1QX1FVSUNLX0NIRUNLCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciB0eXBlcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKKworIyBUaGUgY2FzdCB0byBsb25nIGludCB3b3JrcyBhcm91bmQgYSBidWcgaW4gdGhlIEhQIEMgQ29tcGlsZXIKKyMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKKyMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgorIyBUaGlzIGJ1ZyBpcyBIUCBTUiBudW1iZXIgODYwNjIyMzM2NC4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgc2l6ZSBvZiBzaG9ydCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIHNob3J0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9zaG9ydCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKHNob3J0KSkiICJhY19jdl9zaXplb2Zfc2hvcnQiICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKKwogZWxzZQogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9zaG9ydCIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJICAgICAgYWNfbG89IGFjX2hpPQotCQkgICAgICBicmVhawotCQkgICAgZmkKLQkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9zaG9ydD0wCisgICBmaQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoc2hvcnQpKSkgPCAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPS0xIGFjX21pZD0tMQotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCi0JCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgotCQkJIGFjX2xvPSBhY19oaT0KLQkJCSBicmVhawotCQkgICAgICAgZmkKLQkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2Zfc2hvcnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2Zfc2hvcnQiID4mNjsgfQogCi1hY19sbz0gYWNfaGk9Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCi13aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCi0gIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9zaG9ydD0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChzaG9ydCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYwotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChzaG9ydCkpOyB9Ci11bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChzaG9ydCkpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgZXhpdCAoMSk7Ci0gIGlmICgoKGxvbmcpIChzaXplb2YgKHNob3J0KSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChzaG9ydCkpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOwotICAgIH0KLSAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2Zfc2hvcnQ9YGNhdCBjb25mdGVzdC52YWxgCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKHNob3J0KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoc2hvcnQpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1ybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX3Nob3J0PTAKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zaG9ydCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX3Nob3J0IiA+JjYKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX1NIT1JUICRhY19jdl9zaXplb2Zfc2hvcnQKIF9BQ0VPRgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgaW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NpemVvZl9pbnQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgoaW50ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGludCkpIiAiYWNfY3Zfc2l6ZW9mX2ludCIgICAgICAgICIkYWNfaW5jbHVkZXNfZGVmYXVsdCI7IHRoZW4gOgogCi1hY19jdl90eXBlX2ludD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50IiA+JjYKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHNpemUgb2YgaW50IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBpbnQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9pbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKIGVsc2UKICAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfaW50IiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50KSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPD0gJGFjX21pZCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0kYWNfbWlkOyBicmVhawotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19sbz1gZXhwciAkYWNfbWlkICsgMWAKLQkJICAgIGlmIHRlc3QgJGFjX2xvIC1sZSAkYWNfbWlkOyB0aGVuCi0JCSAgICAgIGFjX2xvPSBhY19oaT0KLQkJICAgICAgYnJlYWsKLQkJICAgIGZpCi0JCSAgICBhY19taWQ9YGV4cHIgMiAnKicgJGFjX21pZCArIDFgCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2ludD0wCisgICBmaQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50KSkpIDwgMCldOwotdGVzdF9hcnJheSBbMF0gPSAwCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oaT0tMSBhY19taWQ9LTEKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50KSkpID49ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgYWNfbG89IGFjX2hpPQotCQkJIGJyZWFrCi0JCSAgICAgICBmaQotCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9pbnQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfaW50IiA+JjY7IH0KIAotYWNfbG89IGFjX2hpPQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0jIEJpbmFyeSBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgaGkgYm91bmRzLgotd2hpbGUgdGVzdCAieCRhY19sbyIgIT0gIngkYWNfaGkiOyBkbwotICBhY19taWQ9YGV4cHIgJygnICRhY19oaSAtICRhY19sbyAnKScgLyAyICsgJGFjX2xvYAotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50KSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluCi0/KikgYWNfY3Zfc2l6ZW9mX2ludD0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCi1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1sb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGludCkpOyB9Ci11bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChpbnQpKTsgfQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci1pbnQKLW1haW4gKCkKLXsKLQotICBGSUxFICpmID0gZm9wZW4gKCJjb25mdGVzdC52YWwiLCAidyIpOwotICBpZiAoISBmKQotICAgIGV4aXQgKDEpOwotICBpZiAoKChsb25nKSAoc2l6ZW9mIChpbnQpKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGludCkpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChpbnQpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWx1XG4iLCBpKTsKLSAgICB9Ci0gIGV4aXQgKGZlcnJvciAoZikgfHwgZmNsb3NlIChmKSAhPSAwKTsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2l6ZW9mX2ludD1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotcm0gLWYgY29uZnRlc3QudmFsCi1lbHNlCi0gIGFjX2N2X3NpemVvZl9pbnQ9MAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2ludCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2ludCIgPiY2CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNJWkVPRl9JTlQgJGFjX2N2X3NpemVvZl9pbnQKIF9BQ0VPRgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbG9uZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb25nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2xvbmcrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2YgbG9uZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2xvbmcrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgobG9uZyAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGxvbmcpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2xvbmc9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGlmIGFjX2ZuX2NfY29tcHV0ZV9pbnQgIiRMSU5FTk8iICIobG9uZyBpbnQpIChzaXplb2YgKGxvbmcpKSIgImFjX2N2X3NpemVvZl9sb25nIiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLWFjX2N2X3R5cGVfbG9uZz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2xvbmciID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBsb25nIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgc2l6ZSBvZiBsb25nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9sb25nIiA9IHllczsgdGhlbgotICAjIFRoZSBjYXN0IHRvIHVuc2lnbmVkIGxvbmcgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCi0gICMgdmVyc2lvbiBIUDkyNDUzLTAxIEIuMTEuMTEuMjM3MDkuR1AsIHdoaWNoIGluY29ycmVjdGx5IHJlamVjdHMKLSAgIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCi0gICMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gICMgRGVwZW5kaW5nIHVwb24gdGhlIHNpemUsIGNvbXB1dGUgdGhlIGxvIGFuZCBoaSBib3VuZHMuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPTAgYWNfbWlkPTAKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJICAgICAgYWNfbG89IGFjX2hpPQotCQkgICAgICBicmVhawotCQkgICAgZmkKLQkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nKQorU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscyIgIiRMSU5FTk8iIDU7IH0KKyAgIGVsc2UKKyAgICAgYWNfY3Zfc2l6ZW9mX2xvbmc9MAorICAgZmkKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPCAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPS0xIGFjX21pZD0tMQotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpID49ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGk9YGV4cHIgJygnICRhY19taWQgJyknIC0gMWAKLQkJICAgICAgIGlmIHRlc3QgJGFjX21pZCAtbGUgJGFjX2hpOyB0aGVuCi0JCQkgYWNfbG89IGFjX2hpPQotCQkJIGJyZWFrCi0JCSAgICAgICBmaQotCQkgICAgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWRgCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNjsgfQogCi1hY19sbz0gYWNfaGk9Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCi13aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCi0gIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChsb25nKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAogCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19sbz1gZXhwciAnKCcgJGFjX21pZCAnKScgKyAxYAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWRvbmUKLWNhc2UgJGFjX2xvIGluCi0/KikgYWNfY3Zfc2l6ZW9mX2xvbmc9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChsb25nKSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7Ci1lc2FjCi1lbHNlCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IHJ1biB0ZXN0IHByb2dyYW0gd2hpbGUgY3Jvc3MgY29tcGlsaW5nCi1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1sb25nIGxvbmd2YWwgKCkgeyByZXR1cm4gKGxvbmcpIChzaXplb2YgKGxvbmcpKTsgfQotdW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAobG9uZykpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgZXhpdCAoMSk7Ci0gIGlmICgoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkgPCAwKQotICAgIHsKLSAgICAgIGxvbmcgaSA9IGxvbmd2YWwgKCk7Ci0gICAgICBpZiAoaSAhPSAoKGxvbmcpIChzaXplb2YgKGxvbmcpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAobG9uZykpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOwotICAgIH0KLSAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2ZfbG9uZz1gY2F0IGNvbmZ0ZXN0LnZhbGAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAobG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1ybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2xvbmc9MAotZmkKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2l6ZW9mX2xvbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9sb25nIiA+JjYKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0xPTkcgJGFjX2N2X3NpemVvZl9sb25nCiBfQUNFT0YKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGxvbmcgbG9uZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsb25nIGxvbmcuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfbG9uZ19sb25nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2ZfbG9uZ19sb25nKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGxvbmcgbG9uZyAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGxvbmcgbG9uZykpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfbG9uZ19sb25nPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChsb25nIGxvbmcpKSIgImFjX2N2X3NpemVvZl9sb25nX2xvbmciICAgICAgICAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiOyB0aGVuIDoKIAotYWNfY3ZfdHlwZV9sb25nX2xvbmc9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfbG9uZ19sb25nIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2xvbmdfbG9uZyIgPiY2Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzaXplIG9mIGxvbmcgbG9uZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgbG9uZyBsb25nLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9zaXplb2ZfbG9uZ19sb25nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CiBlbHNlCiAgIGlmIHRlc3QgIiRhY19jdl90eXBlX2xvbmdfbG9uZyIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA+PSAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPTAgYWNfbWlkPTAKLSAgd2hpbGUgOjsgZG8KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpIDw9ICRhY19taWQpXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9JGFjX21pZDsgYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfbG89YGV4cHIgJGFjX21pZCArIDFgCi0JCSAgICBpZiB0ZXN0ICRhY19sbyAtbGUgJGFjX21pZDsgdGhlbgotCQkgICAgICBhY19sbz0gYWNfaGk9Ci0JCSAgICAgIGJyZWFrCi0JCSAgICBmaQotCQkgICAgYWNfbWlkPWBleHByIDIgJyonICRhY19taWQgKyAxYAorICAgICB7IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiYyO30KK2FzX2ZuX2Vycm9yIDc3ICJjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZykKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9MAorICAgZmkKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA8IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGk9LTEgYWNfbWlkPS0xCi0gIHdoaWxlIDo7IGRvCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCi0JCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgotCQkJIGFjX2xvPSBhY19oaT0KLQkJCSBicmVhawotCQkgICAgICAgZmkKLQkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfbG9uZ19sb25nIiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2l6ZW9mX2xvbmdfbG9uZyIgPiY2OyB9CiAKLWFjX2xvPSBhY19oaT0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotIyBCaW5hcnkgc2VhcmNoIGJldHdlZW4gbG8gYW5kIGhpIGJvdW5kcy4KLXdoaWxlIHRlc3QgIngkYWNfbG8iICE9ICJ4JGFjX2hpIjsgZG8KLSAgYWNfbWlkPWBleHByICcoJyAkYWNfaGkgLSAkYWNfbG8gJyknIC8gMiArICRhY19sb2AKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGxvbmcgbG9uZykpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9JGFjX2xvOzsKLScnKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYwotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKTsgfQotdW5zaWduZWQgbG9uZyB1bG9uZ3ZhbCAoKSB7IHJldHVybiAobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSk7IH0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotaW50Ci1tYWluICgpCi17Ci0KLSAgRklMRSAqZiA9IGZvcGVuICgiY29uZnRlc3QudmFsIiwgInciKTsKLSAgaWYgKCEgZikKLSAgICBleGl0ICgxKTsKLSAgaWYgKCgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChsb25nIGxvbmcpKSkpCi0JZXhpdCAoMSk7Ci0gICAgICBmcHJpbnRmIChmLCAiJWxkXG4iLCBpKTsKLSAgICB9Ci0gIGVsc2UKLSAgICB7Ci0gICAgICB1bnNpZ25lZCBsb25nIGkgPSB1bG9uZ3ZhbCAoKTsKLSAgICAgIGlmIChpICE9ICgobG9uZykgKHNpemVvZiAobG9uZyBsb25nKSkpKQotCWV4aXQgKDEpOwotICAgICAgZnByaW50ZiAoZiwgIiVsdVxuIiwgaSk7Ci0gICAgfQotICBleGl0IChmZXJyb3IgKGYpIHx8IGZjbG9zZSAoZikgIT0gMCk7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3NpemVvZl9sb25nX2xvbmc9YGNhdCBjb25mdGVzdC52YWxgCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGxvbmcgbG9uZyksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLXJtIC1mIGNvbmZ0ZXN0LnZhbAotZWxzZQotICBhY19jdl9zaXplb2ZfbG9uZ19sb25nPTAKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9sb25nX2xvbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NpemVvZl9sb25nX2xvbmciID4mNgogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBTSVpFT0ZfTE9OR19MT05HICRhY19jdl9zaXplb2ZfbG9uZ19sb25nCiBfQUNFT0YKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludG1heF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludG1heF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludG1heF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisjIFRoZSBjYXN0IHRvIGxvbmcgaW50IHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgorIyB2ZXJzaW9uIEhQOTI0NTMtMDEgQi4xMS4xMS4yMzcwOS5HUCwgd2hpY2ggaW5jb3JyZWN0bHkgcmVqZWN0cworIyBkZWNsYXJhdGlvbnMgbGlrZSBgaW50IGEzW1soc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSkgPj0gMF1dOycuCisjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzaXplIG9mIGludG1heF90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHNpemUgb2YgaW50bWF4X3QuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2l6ZW9mX2ludG1heF90Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludG1heF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50bWF4X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludG1heF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChpbnRtYXhfdCkpIiAiYWNfY3Zfc2l6ZW9mX2ludG1heF90IiAgICAgICAgIiRhY19pbmNsdWRlc19kZWZhdWx0IjsgdGhlbiA6CiAKLWFjX2N2X3R5cGVfaW50bWF4X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50bWF4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50bWF4X3QiID4mNgotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgc2l6ZSBvZiBpbnRtYXhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNpemUgb2YgaW50bWF4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NpemVvZl9pbnRtYXhfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQogICBpZiB0ZXN0ICIkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPSB5ZXM7IHRoZW4KLSAgIyBUaGUgY2FzdCB0byB1bnNpZ25lZCBsb25nIHdvcmtzIGFyb3VuZCBhIGJ1ZyBpbiB0aGUgSFAgQyBDb21waWxlcgotICAjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCi0gICMgZGVjbGFyYXRpb25zIGxpa2UgYGludCBhM1tbKHNpemVvZiAodW5zaWduZWQgY2hhcikpID49IDBdXTsnLgotICAjIFRoaXMgYnVnIGlzIEhQIFNSIG51bWJlciA4NjA2MjIzMzY0LgotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICAjIERlcGVuZGluZyB1cG9uIHRoZSBzaXplLCBjb21wdXRlIHRoZSBsbyBhbmQgaGkgYm91bmRzLgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1zdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogISgoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpID49IDApXTsKLXRlc3RfYXJyYXkgWzBdID0gMAotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfbG89MCBhY19taWQ9MAotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2xvPWBleHByICRhY19taWQgKyAxYAotCQkgICAgaWYgdGVzdCAkYWNfbG8gLWxlICRhY19taWQ7IHRoZW4KLQkJICAgICAgYWNfbG89IGFjX2hpPQotCQkgICAgICBicmVhawotCQkgICAgZmkKLQkJICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkICsgMWAKKyAgICAgeyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGVycm9yOiBpbiBcYCRhY19wd2QnOiIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mMjt9Cithc19mbl9lcnJvciA3NyAiY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCkKK1NlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMiICIkTElORU5PIiA1OyB9CisgICBlbHNlCisgICAgIGFjX2N2X3NpemVvZl9pbnRtYXhfdD0wCisgICBmaQogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLXN0YXRpYyBpbnQgdGVzdF9hcnJheSBbMSAtIDIgKiAhKCgobG9uZykgKHNpemVvZiAoaW50bWF4X3QpKSkgPCAwKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPS0xIGFjX21pZD0tMQotICB3aGlsZSA6OyBkbwotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA+PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2xvPSRhY19taWQ7IGJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hpPWBleHByICcoJyAkYWNfbWlkICcpJyAtIDFgCi0JCSAgICAgICBpZiB0ZXN0ICRhY19taWQgLWxlICRhY19oaTsgdGhlbgotCQkJIGFjX2xvPSBhY19oaT0KLQkJCSBicmVhawotCQkgICAgICAgZmkKLQkJICAgICAgIGFjX21pZD1gZXhwciAyICcqJyAkYWNfbWlkYAogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSAgZG9uZQotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zaXplb2ZfaW50bWF4X3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zaXplb2ZfaW50bWF4X3QiID4mNjsgfQogCi1hY19sbz0gYWNfaGk9Ci1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLSMgQmluYXJ5IHNlYXJjaCBiZXR3ZWVuIGxvIGFuZCBoaSBib3VuZHMuCi13aGlsZSB0ZXN0ICJ4JGFjX2xvIiAhPSAieCRhY19oaSI7IGRvCi0gIGFjX21pZD1gZXhwciAnKCcgJGFjX2hpIC0gJGFjX2xvICcpJyAvIDIgKyAkYWNfbG9gCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSA8PSAkYWNfbWlkKV07Ci10ZXN0X2FycmF5IFswXSA9IDAKIAotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hpPSRhY19taWQKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfbG89YGV4cHIgJygnICRhY19taWQgJyknICsgMWAKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1kb25lCi1jYXNlICRhY19sbyBpbgotPyopIGFjX2N2X3NpemVvZl9pbnRtYXhfdD0kYWNfbG87OwotJycpIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50bWF4X3QpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNvbXB1dGUgc2l6ZW9mIChpbnRtYXhfdCksIDc3Ci1TZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfSA7OwotZXNhYwotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgotICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgcnVuIHRlc3QgcHJvZ3JhbSB3aGlsZSBjcm9zcyBjb21waWxpbmcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBydW4gdGVzdCBwcm9ncmFtIHdoaWxlIGNyb3NzIGNvbXBpbGluZwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotbG9uZyBsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpOyB9Ci11bnNpZ25lZCBsb25nIHVsb25ndmFsICgpIHsgcmV0dXJuIChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpOyB9Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLWludAotbWFpbiAoKQotewotCi0gIEZJTEUgKmYgPSBmb3BlbiAoImNvbmZ0ZXN0LnZhbCIsICJ3Iik7Ci0gIGlmICghIGYpCi0gICAgZXhpdCAoMSk7Ci0gIGlmICgoKGxvbmcpIChzaXplb2YgKGludG1heF90KSkpIDwgMCkKLSAgICB7Ci0gICAgICBsb25nIGkgPSBsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbGRcbiIsIGkpOwotICAgIH0KLSAgZWxzZQotICAgIHsKLSAgICAgIHVuc2lnbmVkIGxvbmcgaSA9IHVsb25ndmFsICgpOwotICAgICAgaWYgKGkgIT0gKChsb25nKSAoc2l6ZW9mIChpbnRtYXhfdCkpKSkKLQlleGl0ICgxKTsKLSAgICAgIGZwcmludGYgKGYsICIlbHVcbiIsIGkpOwotICAgIH0KLSAgZXhpdCAoZmVycm9yIChmKSB8fCBmY2xvc2UgKGYpICE9IDApOwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zaXplb2ZfaW50bWF4X3Q9YGNhdCBjb25mdGVzdC52YWxgCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi17IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY29tcHV0ZSBzaXplb2YgKGludG1heF90KSwgNzcKLVNlZSBcYGNvbmZpZy5sb2cnIGZvciBtb3JlIGRldGFpbHMuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjb21wdXRlIHNpemVvZiAoaW50bWF4X3QpLCA3NwotU2VlIFxgY29uZmlnLmxvZycgZm9yIG1vcmUgZGV0YWlscy4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLWZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1ybSAtZiBjb25mdGVzdC52YWwKLWVsc2UKLSAgYWNfY3Zfc2l6ZW9mX2ludG1heF90PTAKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NpemVvZl9pbnRtYXhfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc2l6ZW9mX2ludG1heF90IiA+JjYKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgU0laRU9GX0lOVE1BWF9UICRhY19jdl9zaXplb2ZfaW50bWF4X3QKIF9BQ0VPRgogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50OF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludDhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQ4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludDhfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKGludDhfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50OF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQogCi1hY19jdl90eXBlX2ludDhfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9pbnQ4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50OF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50OF90ID0geWVzOyB0aGVuCithY19mbl9jX2ZpbmRfaW50WF90ICIkTElORU5PIiAiOCIgImFjX2N2X2NfaW50OF90IgorY2FzZSAkYWNfY3ZfY19pbnQ4X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfSU5UOF9UIDEKKyNkZWZpbmUgaW50OF90ICRhY19jdl9jX2ludDhfdAogX0FDRU9GCis7OworZXNhYwogCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQ4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWludDhfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50OF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1aW50OF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludDhfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdWludDhfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV91aW50OF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQ4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludDhfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQ4X3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICIxNiIgImFjX2N2X2NfaW50MTZfdCIKK2Nhc2UgJGFjX2N2X2NfaW50MTZfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UOF9UIDEKKyNkZWZpbmUgaW50MTZfdCAkYWNfY3ZfY19pbnQxNl90CiBfQUNFT0YKKzs7Citlc2FjCiAKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdV9pbnQ4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdV9pbnQ4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdV9pbnQ4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVfaW50OF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodV9pbnQ4X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VfaW50OF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3VfaW50OF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VfaW50OF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VfaW50OF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdV9pbnQ4X3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfZmluZF9pbnRYX3QgIiRMSU5FTk8iICIzMiIgImFjX2N2X2NfaW50MzJfdCIKK2Nhc2UgJGFjX2N2X2NfaW50MzJfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VX0lOVDhfVCAxCisjZGVmaW5lIGludDMyX3QgJGFjX2N2X2NfaW50MzJfdAogX0FDRU9GCis7OworZXNhYwogCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50MTZfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbnQxNl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX2ludDE2X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludDE2X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnQxNl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbnQxNl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX2ludDE2X3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfaW50MTZfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbnQxNl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50MTZfdCA9IHllczsgdGhlbgorYWNfZm5fY19maW5kX2ludFhfdCAiJExJTkVOTyIgIjY0IiAiYWNfY3ZfY19pbnQ2NF90IgorY2FzZSAkYWNfY3ZfY19pbnQ2NF90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVDE2X1QgMQorI2RlZmluZSBpbnQ2NF90ICRhY19jdl9jX2ludDY0X3QKIF9BQ0VPRgorOzsKK2VzYWMKIAogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50MTZfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50MTZfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsb25nIGxvbmcgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsb25nIGxvbmcgaW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfbG9uZ19sb25nX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorCisgIC8qIEZvciBub3csIGRvIG5vdCB0ZXN0IHRoZSBwcmVwcm9jZXNzb3I7IGFzIG9mIDIwMDcgdGhlcmUgYXJlIHRvbyBtYW55CisJIGltcGxlbWVudGF0aW9ucyB3aXRoIGJyb2tlbiBwcmVwcm9jZXNzb3JzLiAgUGVyaGFwcyB0aGlzIGNhbgorCSBiZSByZXZpc2l0ZWQgaW4gMjAxMi4gIEluIHRoZSBtZWFudGltZSwgY29kZSBzaG91bGQgbm90IGV4cGVjdAorCSAjaWYgdG8gd29yayB3aXRoIGxpdGVyYWxzIHdpZGVyIHRoYW4gMzIgYml0cy4gICovCisgICAgICAvKiBUZXN0IGxpdGVyYWxzLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGwgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICBsb25nIGxvbmcgaW50IG5sbCA9IC05MjIzMzcyMDM2ODU0Nzc1ODA3TEw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOworICAgICAgLyogVGVzdCBjb25zdGFudCBleHByZXNzaW9ucy4gICAqLworICAgICAgdHlwZWRlZiBpbnQgYVsoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgPCAwICYmIDAgPCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwpCisJCSAgICAgPyAxIDogLTEpXTsKKyAgICAgIHR5cGVkZWYgaW50IGJbKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIDw9ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSAtMQorCQkgICAgID8gMSA6IC0xKV07CisgICAgICBpbnQgaSA9IDYzOwogaW50CiBtYWluICgpCiB7Ci1pZiAoKHVpbnQxNl90ICopIDApCisvKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIHJvdXRpbmVzIGZvciBzaGlmdCBhbmQgZGl2aXNpb24uICAqLworICAgICAgbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7CisgICAgICByZXR1cm4gKChsbCA8PCA2MykgfCAobGwgPj4gNjMpIHwgKGxsIDwgaSkgfCAobGwgPiBpKQorCSAgICAgIHwgKGxsbWF4IC8gbGwpIHwgKGxsbWF4ICUgbGwpCisJICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4gNjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkKKwkgICAgICB8ICh1bGxtYXggLyB1bGwpIHwgKHVsbG1heCAlIHVsbCkpOworICA7CiAgIHJldHVybiAwOwotaWYgKHNpemVvZiAodWludDE2X3QpKQotICByZXR1cm4gMDsKK30KKworX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIAkJCWlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PXllcworZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisJICAgICAgICNpZm5kZWYgTExPTkdfTUFYCisJICAgICAgICMgZGVmaW5lIEhBTEYgXAorCQkJKDFMTCA8PCAoc2l6ZW9mIChsb25nIGxvbmcgaW50KSAqIENIQVJfQklUIC0gMikpCisJICAgICAgICMgZGVmaW5lIExMT05HX01BWCAoSEFMRiAtIDEgKyBIQUxGKQorCSAgICAgICAjZW5kaWYKK2ludAorbWFpbiAoKQoreworbG9uZyBsb25nIGludCBuID0gMTsKKwkgICAgICAgaW50IGk7CisJICAgICAgIGZvciAoaSA9IDA7IDsgaSsrKQorCQkgeworCQkgICBsb25nIGxvbmcgaW50IG0gPSBuIDw8IGk7CisJCSAgIGlmIChtID4+IGkgIT0gbikKKwkJICAgICByZXR1cm4gMTsKKwkJICAgaWYgKExMT05HX01BWCAvIDIgPCBtKQorCQkgICAgIGJyZWFrOworCQkgfQorCSAgICAgICByZXR1cm4gMDsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnQxNl90PXllcworaWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3R5cGVfbG9uZ19sb25nX2ludD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50PW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKIAotYWNfY3ZfdHlwZV91aW50MTZfdD1ubworZWxzZQorICBhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VpbnQxNl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnQxNl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludDE2X3QgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTE9OR19MT05HX0lOVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbnRtYXhfdCIgImFjX2N2X3R5cGVfaW50bWF4X3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnRtYXhfdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTlRNQVhfVCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICB0ZXN0ICRhY19jdl90eXBlX2xvbmdfbG9uZ19pbnQgPSB5ZXMgXAorICAgICAgICYmIGFjX3R5cGU9J2xvbmcgbG9uZyBpbnQnIFwKKyAgICAgICB8fCBhY190eXBlPSdsb25nIGludCcKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX1VJTlQxNl9UIDEKKyNkZWZpbmUgaW50bWF4X3QgJGFjX3R5cGUKIF9BQ0VPRgogCitmaQogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1X2ludDE2X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdV9pbnQxNl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VfaW50MTZfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgodV9pbnQxNl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAodV9pbnQxNl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91X2ludDE2X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2N2X3R5cGVfdV9pbnQxNl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3VfaW50MTZfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91X2ludDE2X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV91X2ludDE2X3QgPSB5ZXM7IHRoZW4KK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiOCIgImFjX2N2X2NfdWludDhfdCIKK2Nhc2UgJGFjX2N2X2NfdWludDhfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCisKKyRhc19lY2hvICIjZGVmaW5lIF9VSU5UOF9UIDEiID4+Y29uZmRlZnMuaAorCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VX0lOVDE2X1QgMQorI2RlZmluZSB1aW50OF90ICRhY19jdl9jX3VpbnQ4X3QKIF9BQ0VPRgorOzsKKyAgZXNhYwogCithY19mbl9jX2ZpbmRfdWludFhfdCAiJExJTkVOTyIgIjE2IiAiYWNfY3ZfY191aW50MTZfdCIKK2Nhc2UgJGFjX2N2X2NfdWludDE2X3QgaW4gIygKKyAgbm98eWVzKSA7OyAjKAorICAqKQogCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGludDMyX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50MzJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9pbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChpbnQzMl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50MzJfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50MzJfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9pbnQzMl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDMyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50MzJfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2ludDMyX3QgPSB5ZXM7IHRoZW4KIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVDMyX1QgMQorI2RlZmluZSB1aW50MTZfdCAkYWNfY3ZfY191aW50MTZfdAogX0FDRU9GCis7OworICBlc2FjCiAKK2FjX2ZuX2NfZmluZF91aW50WF90ICIkTElORU5PIiAiMzIiICJhY19jdl9jX3VpbnQzMl90IgorY2FzZSAkYWNfY3ZfY191aW50MzJfdCBpbiAjKAorICBub3x5ZXMpIDs7ICMoCisgICopCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnQzMl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVpbnQzMl90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3VpbnQzMl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1aW50MzJfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVpbnQzMl90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50MzJfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyRhc19lY2hvICIjZGVmaW5lIF9VSU5UMzJfVCAxIiA+PmNvbmZkZWZzLmgKIAotYWNfY3ZfdHlwZV91aW50MzJfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50MzJfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50MzJfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQzMl90ID0geWVzOyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UMzJfVCAxCisjZGVmaW5lIHVpbnQzMl90ICRhY19jdl9jX3VpbnQzMl90CiBfQUNFT0YKKzs7CisgIGVzYWMKIAorYWNfZm5fY19maW5kX3VpbnRYX3QgIiRMSU5FTk8iICI2NCIgImFjX2N2X2NfdWludDY0X3QiCitjYXNlICRhY19jdl9jX3VpbnQ2NF90IGluICMoCisgIG5vfHllcykgOzsgIygKKyAgKikKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdV9pbnQzMl90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVfaW50MzJfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91X2ludDMyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKHVfaW50MzJfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVfaW50MzJfdCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdV9pbnQzMl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorJGFzX2VjaG8gIiNkZWZpbmUgX1VJTlQ2NF9UIDEiID4+Y29uZmRlZnMuaAogCi1hY19jdl90eXBlX3VfaW50MzJfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91X2ludDMyX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdV9pbnQzMl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdV9pbnQzMl90ID0geWVzOyB0aGVuCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VX0lOVDMyX1QgMQorI2RlZmluZSB1aW50NjRfdCAkYWNfY3ZfY191aW50NjRfdAogX0FDRU9GCis7OworICBlc2FjCiAKIAotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpbnQ2NF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGludDY0X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmcgaW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB1bnNpZ25lZCBsb25nIGxvbmcgaW50Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3R5cGVfdW5zaWduZWRfbG9uZ19sb25nX2ludCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAorCisgIC8qIEZvciBub3csIGRvIG5vdCB0ZXN0IHRoZSBwcmVwcm9jZXNzb3I7IGFzIG9mIDIwMDcgdGhlcmUgYXJlIHRvbyBtYW55CisJIGltcGxlbWVudGF0aW9ucyB3aXRoIGJyb2tlbiBwcmVwcm9jZXNzb3JzLiAgUGVyaGFwcyB0aGlzIGNhbgorCSBiZSByZXZpc2l0ZWQgaW4gMjAxMi4gIEluIHRoZSBtZWFudGltZSwgY29kZSBzaG91bGQgbm90IGV4cGVjdAorCSAjaWYgdG8gd29yayB3aXRoIGxpdGVyYWxzIHdpZGVyIHRoYW4gMzIgYml0cy4gICovCisgICAgICAvKiBUZXN0IGxpdGVyYWxzLiAgKi8KKyAgICAgIGxvbmcgbG9uZyBpbnQgbGwgPSA5MjIzMzcyMDM2ODU0Nzc1ODA3bGw7CisgICAgICBsb25nIGxvbmcgaW50IG5sbCA9IC05MjIzMzcyMDM2ODU0Nzc1ODA3TEw7CisgICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVsbCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMOworICAgICAgLyogVGVzdCBjb25zdGFudCBleHByZXNzaW9ucy4gICAqLworICAgICAgdHlwZWRlZiBpbnQgYVsoKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwgPCAwICYmIDAgPCA5MjIzMzcyMDM2ODU0Nzc1ODA3bGwpCisJCSAgICAgPyAxIDogLTEpXTsKKyAgICAgIHR5cGVkZWYgaW50IGJbKDE4NDQ2NzQ0MDczNzA5NTUxNjE1VUxMIDw9ICh1bnNpZ25lZCBsb25nIGxvbmcgaW50KSAtMQorCQkgICAgID8gMSA6IC0xKV07CisgICAgICBpbnQgaSA9IDYzOwogaW50CiBtYWluICgpCiB7Ci1pZiAoKGludDY0X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mIChpbnQ2NF90KSkKLSAgcmV0dXJuIDA7CisvKiBUZXN0IGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIHJvdXRpbmVzIGZvciBzaGlmdCBhbmQgZGl2aXNpb24uICAqLworICAgICAgbG9uZyBsb25nIGludCBsbG1heCA9IDkyMjMzNzIwMzY4NTQ3NzU4MDdsbDsKKyAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgdWxsbWF4ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTV1bGw7CisgICAgICByZXR1cm4gKChsbCA8PCA2MykgfCAobGwgPj4gNjMpIHwgKGxsIDwgaSkgfCAobGwgPiBpKQorCSAgICAgIHwgKGxsbWF4IC8gbGwpIHwgKGxsbWF4ICUgbGwpCisJICAgICAgfCAodWxsIDw8IDYzKSB8ICh1bGwgPj4gNjMpIHwgKHVsbCA8PCBpKSB8ICh1bGwgPj4gaSkKKwkgICAgICB8ICh1bGxtYXggLyB1bGwpIHwgKHVsbG1heCAlIHVsbCkpOwogICA7CiAgIHJldHVybiAwOwogfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfaW50NjRfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKIAotYWNfY3ZfdHlwZV9pbnQ2NF90PW5vCitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50PXllcworZWxzZQorICBhY19jdl90eXBlX3Vuc2lnbmVkX2xvbmdfbG9uZ19pbnQ9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludDY0X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfaW50NjRfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX2ludDY0X3QgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50IiA+JjY7IH0KKyAgaWYgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfVU5TSUdORURfTE9OR19MT05HX0lOVCAxIiA+PmNvbmZkZWZzLmgKKworICBmaQorCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50bWF4X3QiICJhY19jdl90eXBlX3VpbnRtYXhfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRtYXhfdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgdGVzdCAkYWNfY3ZfdHlwZV91bnNpZ25lZF9sb25nX2xvbmdfaW50ID0geWVzIFwKKyAgICAgICAmJiBhY190eXBlPSd1bnNpZ25lZCBsb25nIGxvbmcgaW50JyBcCisgICAgICAgfHwgYWNfdHlwZT0ndW5zaWduZWQgbG9uZyBpbnQnCiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9JTlQ2NF9UIDEKKyNkZWZpbmUgdWludG1heF90ICRhY190eXBlCiBfQUNFT0YKIAotCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB1aW50NjRfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50NjRfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91aW50NjRfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJpbnRwdHJfdCIgImFjX2N2X3R5cGVfaW50cHRyX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9pbnRwdHJfdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9JTlRQVFJfVCAxIiA+PmNvbmZkZWZzLmgKKwogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgZm9yIGFjX3R5cGUgaW4gJ2ludCcgJ2xvbmcgaW50JyAnbG9uZyBsb25nIGludCc7IGRvCisgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludAogbWFpbiAoKQogewotaWYgKCh1aW50NjRfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVpbnQ2NF90KSkKLSAgcmV0dXJuIDA7CitzdGF0aWMgaW50IHRlc3RfYXJyYXkgWzEgLSAyICogIShzaXplb2YgKHZvaWQgKikgPD0gc2l6ZW9mICgkYWNfdHlwZSkpXTsKK3Rlc3RfYXJyYXkgWzBdID0gMAorCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV91aW50NjRfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV91aW50NjRfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV91aW50NjRfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnQ2NF90ID0geWVzOyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UNjRfVCAxCisjZGVmaW5lIGludHB0cl90ICRhY190eXBlCiBfQUNFT0YKIAotCisJICBhY190eXBlPQogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdV9pbnQ2NF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHVfaW50NjRfdC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV91X2ludDY0X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgIHRlc3QgLXogIiRhY190eXBlIiAmJiBicmVhaworICAgICBkb25lCitmaQorCisKKworICBhY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJ1aW50cHRyX3QiICJhY19jdl90eXBlX3VpbnRwdHJfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3VpbnRwdHJfdCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9VSU5UUFRSX1QgMSIgPj5jb25mZGVmcy5oCisKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGZvciBhY190eXBlIGluICd1bnNpZ25lZCBpbnQnICd1bnNpZ25lZCBsb25nIGludCcgXAorCSd1bnNpZ25lZCBsb25nIGxvbmcgaW50JzsgZG8KKyAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAogaW50CiBtYWluICgpCiB7Ci1pZiAoKHVfaW50NjRfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHVfaW50NjRfdCkpCi0gIHJldHVybiAwOworc3RhdGljIGludCB0ZXN0X2FycmF5IFsxIC0gMiAqICEoc2l6ZW9mICh2b2lkICopIDw9IHNpemVvZiAoJGFjX3R5cGUpKV07Cit0ZXN0X2FycmF5IFswXSA9IDAKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfdV9pbnQ2NF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX3VfaW50NjRfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91X2ludDY0X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdV9pbnQ2NF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdV9pbnQ2NF90ID0geWVzOyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VX0lOVDY0X1QgMQorI2RlZmluZSB1aW50cHRyX3QgJGFjX3R5cGUKIF9BQ0VPRgogCi0KKwkgIGFjX3R5cGU9CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgdGVzdCAteiAiJGFjX3R5cGUiICYmIGJyZWFrCisgICAgIGRvbmUKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50bWF4X3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50bWF4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50bWF4X3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludG1heF90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50bWF4X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludG1heF90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX2ludG1heF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludG1heF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludG1heF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50bWF4X3QgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVE1BWF9UIDEKLV9BQ0VPRgogCiAKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnRtYXhfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50bWF4X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludG1heF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1aW50bWF4X3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50bWF4X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnRtYXhfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyMjCisjICAgT3RoZXIgdHlwZSBjaGVja3M6CisjIwogCi1hY19jdl90eXBlX3VpbnRtYXhfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV91aW50bWF4X3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfdWludG1heF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfdWludG1heF90ID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQotX0FDRU9GCi0KLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBvZmY2NF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG9mZjY0X3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfb2ZmNjRfdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci1pbnQKLW1haW4gKCkKLXsKLWlmICgob2ZmNjRfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKG9mZjY0X3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX29mZjY0X3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3R5cGVfb2ZmNjRfdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9vZmY2NF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX29mZjY0X3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9vZmY2NF90ID0geWVzOyB0aGVuCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJvZmY2NF90IiAiYWNfY3ZfdHlwZV9vZmY2NF90IiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfb2ZmNjRfdCIgPSB4eWVzOyB0aGVuIDoKIAogY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX09GRjY0X1QgMQpAQCAtMjQ4MzIsMTk1ICsxODMwNCwyNCBAQAogCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVpbnRwdHJfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1aW50cHRyX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfdWludHB0cl90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKCh1aW50cHRyX3QgKikgMCkKLSAgcmV0dXJuIDA7Ci1pZiAoc2l6ZW9mICh1aW50cHRyX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX3VpbnRwdHJfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV91aW50cHRyX3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3R5cGVfdWludHB0cl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3VpbnRwdHJfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX3VpbnRwdHJfdCA9IHllczsgdGhlbgorYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAibmZkc190IiAiYWNfY3ZfdHlwZV9uZmRzX3QiICIjaW5jbHVkZSA8c3lzL3BvbGwuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9uZmRzX3QiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9VSU5UUFRSX1QgMQotX0FDRU9GCi0KLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaW50cHRyX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaW50cHRyX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfaW50cHRyX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotaW50Ci1tYWluICgpCi17Ci1pZiAoKGludHB0cl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAoaW50cHRyX3QpKQotICByZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl90eXBlX2ludHB0cl90PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX2ludHB0cl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2ludHB0cl90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX2ludHB0cl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfaW50cHRyX3QgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0lOVFBUUl9UIDEKKyNkZWZpbmUgSEFWRV9ORkRTX1QgMQogX0FDRU9GCiAKIAogZmkKIAogCi0jIHNvbGFyaXMgc3BlY2lmaWMgdHlwZQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBDb3VudGVyNjQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQ291bnRlcjY0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX0NvdW50ZXI2NCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxpbmV0L21pYjIuaD4KLQotaW50Ci1tYWluICgpCi17Ci1pZiAoKENvdW50ZXI2NCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKENvdW50ZXI2NCkpCi0gIHJldHVybiAwOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfQ291bnRlcjY0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl90eXBlX0NvdW50ZXI2ND1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9Db3VudGVyNjQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfQ291bnRlcjY0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfQ291bnRlcjY0ID0geWVzOyB0aGVuCisjICAgU29sYXJpcyBzcGVjaWZpYyBjaGVja3MKKyMgICAgICAgKHRha2VuIGZyb20gUGVybCdzIGNvbmZpZ3VyZSBzY3JpcHQpCisjCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJDb3VudGVyNjQiICJhY19jdl90eXBlX0NvdW50ZXI2NCIgIiNpbmNsdWRlIDxpbmV0L21pYjIuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9Db3VudGVyNjQiID0geHllczsgdGhlbiA6CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9DT1VOVEVSNjQgMQpAQCAtMjUwMjksMjMgKzE4MzMwLDQyIEBACiAKIGZpCiAKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgIm1pYjJfaXBJZlN0YXRzRW50cnlfdCIgImFjX2N2X3R5cGVfbWliMl9pcElmU3RhdHNFbnRyeV90IiAiI2luY2x1ZGUgPGluZXQvbWliMi5oPgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX21pYjJfaXBJZlN0YXRzRW50cnlfdCIgPSB4eWVzOyB0aGVuIDoKIAotIyBndWVzcyBJUHY2IHN0YWNrIHR5cGUuCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTUlCMl9JUElGU1RBVFNFTlRSWV9UIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgIE4uQjogIFRoZSBhYm92ZSBjaGVja3MgY291bGQgc2FmZWx5IGJlIG1vdmVkIHRvCisjICAgICAgICAgdGhlIGxhdGVyICdjb25maWdfdHlwZXMnIHN1Yi1zY3JpcHQKKyMKKworCisjIworIyAgIERldGVybWluZSB0aGUgSVB2NiBzdGFjayB0eXBlCisjIworCisjICAgICAgIFRoZXNlIGNoZWNrcyBhbHNvIHNldCB0aGUgTElCUy9DRkxBR1MgdmFyaWFibGVzLAorIyAgICAgICB3aGljaCBtYXkgYmUgbmVlZGVkIGZvciBzdWJzZXF1ZW50IGZ1bmN0aW9uIHRlc3RzCisjCisKIGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCiAJdjZ0eXBlPXVua25vd24KIAl2NmxpYj1ub25lCiAJdjZ0cnlsaWJjPW5vCiAKLQllY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlLi4uICRFQ0hPX0MiID4mNgotCWZvciBpIGluIHY2ZCB0b3NoaWJhIGthbWUgaW5yaWEgemV0YSBsaW51eC1nbGliYyBsaW51eC1pbmV0NiBnZW5lcmljOyBkbworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZS4uLiAiID4mNjsgfQorCWZvciBpIGluIHY2ZCB0b3NoaWJhIGthbWUgaW5yaWEgemV0YSBsaW51eC1nbGliYyBsaW51eC1pbmV0NiBjeWd3aW4gd2luc29jazIgZ2VuZXJpYzsgZG8KIAkJY2FzZSAkaSBpbgogCQl2NmQpCi0JCQljYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgPC91c3IvbG9jYWwvdjYvaW5jbHVkZS9zeXMvdHlwZXMuaD4KQEAgLTI1MDU0LDcgKzE4Mzc0LDcgQEAKICNlbmRpZgogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIHY2dHlwZT0kaTsgdjZsaWI9djY7CiAJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CiAJCQkJQ0ZMQUdTPSItSS91c3IvbG9jYWwvdjYvaW5jbHVkZSAkQ0ZMQUdTIgpAQCAtMjUwNjMsMTEgKzE4MzgzLDcgQEAKIAogCQkJOzsKIAkJdG9zaGliYSkKLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CkBAIC0yNTA3Niw3ICsxODM5Miw3IEBACiAjZW5kaWYKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICB2NnR5cGU9JGk7IHY2bGliPWluZXQ2OwogCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwogCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCkBAIC0yNTA4NSwxMSArMTg0MDEsNyBAQAogCiAJCQk7OwogCQlrYW1lKQotCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC0yNTA5OCw3ICsxODQxMCw3IEBACiAjZW5kaWYKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICB2NnR5cGU9JGk7IHY2bGliPWluZXQ2OwogCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwogCQkJCXY2dHJ5bGliYz15ZXM7CkBAIC0yNTEwOCwxMSArMTg0MjAsNyBAQAogCiAJCQk7OwogCQlpbnJpYSkKLQkJCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgpAQCAtMjUxMjEsNyArMTg0MjksNyBAQAogI2VuZGlmCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgdjZ0eXBlPSRpOwogCQkJCXY2bGliPWR1bW15OwogCQkJCXY2bGliZGlyPW5vbmU7CkBAIC0yNTEzMiwxMSArMTg0NDAsNyBAQAogCiAJCQk7OwogCQl6ZXRhKQotCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KQEAgLTI1MTQ2LDcgKzE4NDUwLDcgQEAKICNlbmRpZgogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIHY2dHlwZT0kaTsgdjZsaWI9aW5ldDY7CiAJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CiAJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKQEAgLTI1MTU1LDExICsxODQ1OSw3IEBACiAKIAkJCTs7CiAJCWxpbnV4LWdsaWJjKQotCQkJY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisJCQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpbmNsdWRlIDxmZWF0dXJlcy5oPgpAQCAtMjUxNjgsNyArMTg0NjgsNyBAQAogI2VuZGlmCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgdjZ0eXBlPSRpOwogCQkJCXY2bGliPWR1bW15OwogCQkJCXY2bGliZGlyPW5vbmU7CkBAIC0yNTE4NiwxMDQgKzE4NDg2LDY5IEBACiAJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyIKIAkJCWZpCiAJCQk7OwotCQlnZW5lcmljKQotICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogcG9zdHBvbmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfXBvc3Rwb25lZCIgPiY2Ci0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInNvY2thZGRyX2luNiIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAic2luNl9hZGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2FkZHJfaW42LnNpbjZfYWRkciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzb2NrYWRkcl9pbjYuc2luNl9hZGRyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkJY3lnd2luKQorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc29ja2FkZHJfaW42IHRlc3RpdDsKLXRlc3RpdC5zaW42X2FkZHIgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19CisjaWZkZWYgX0NZR1dJTl9JTjZfSAoreWVzCisjZW5kaWYKIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgoraWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAorICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKyAgdjZ0eXBlPSRpOworCQkJCXY2bGliPWR1bW15OworCQkJCXY2bGliZGlyPW5vbmUKKwkJCQl2NnRyeWxpYmM9eWVzOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29uZnRlc3QqCiAKLWZpCisgICAgICAgICAgICAgICAgICAgICAgIDs7CisJCXdpbnNvY2syKQorCQkJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjaWYgZGVmaW5lZChfV1MyVENQSVBfSCkKK3llcworI2VuZGlmCiBfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIHY2dHlwZT0kaTsKKwkJCQl2NmxpYj1kdW1teTsKKwkJCQl2NmxpYmRpcj1ub25lCisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgorZmkKK3JtIC1mIGNvbmZ0ZXN0KgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwkJCTs7CisJCWdlbmVyaWMpCisgICAgICAgICAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogcG9zdHBvbmVkIiA+JjUKKyRhc19lY2hvICJwb3N0cG9uZWQiID4mNjsgfQorCQkJYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHJfaW42IiAic2luNl9hZGRyIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9hZGRyIiAiCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X2FkZHIiID0geHllczsgdGhlbiA6CisKIGZpCiAKLQotCSAgICAgICAgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlLi4uICRFQ0hPX0MiID4mNgotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42X2hhc19zaW42X2FkZHIiID0gInh5ZXMiOyB0aGVuCisJICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaXB2NiBzdGFjayB0eXBlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlwdjYgc3RhY2sgdHlwZS4uLiAiID4mNjsgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X2FkZHIiID0gInh5ZXMiOyB0aGVuCiAJCQkJdjZ0eXBlPSRpCiAJCQkJdjZsaWI9ZHVtbXkKIAkJCQl2NmxpYmRpcj1ub25lCkBAIC0yNTMwMSwzMyArMTg1NjYsMzEgQEAKIAkJaWYgdGVzdCAtZCAkdjZsaWJkaXIgLWEgLWYgJHY2bGliZGlyL2xpYiR2NmxpYi5hOyB0aGVuCiAJCQlMSUJTPSItTCR2NmxpYmRpciAtbCR2NmxpYiAkTElCUyIKIAkJCWVuYWJsZV9pcHY2PSJ5ZXMiCi0JCQllY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBcIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliJHY2bGliXCIiID4mNQotZWNobyAiJHtFQ0hPX1R9XCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYiR2NmxpYlwiIiA+JjYKKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBcIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliJHY2bGliXCIiID4mNQorJGFzX2VjaG8gIlwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWIkdjZsaWJcIiIgPiY2OyB9CiAJCWVsaWYgdGVzdCAiJHY2dHJ5bGliYyIgPSAieWVzIjsgdGhlbgogCQkJZW5hYmxlX2lwdjY9InllcyIKLQkJCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWJjXCIiID4mNQotZWNobyAiJHtFQ0hPX1R9XCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYmNcIiIgPiY2CisJCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYmNcIiIgPiY1CiskYXNfZWNobyAiXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjYsIHVzaW5nIGxpYmNcIiIgPiY2OyB9CiAJCWVsc2UKLQkJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG5vIElQdjYgbGlicmFyeSBsaWIkdjZsaWIuYSBmb3VuZC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogbm8gSVB2NiBsaWJyYXJ5IGxpYiR2NmxpYi5hIGZvdW5kLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorCQkJYXNfZm5fZXJyb3IgJD8gIm5vIElQdjYgbGlicmFyeSBsaWIkdjZsaWIuYSBmb3VuZC4iICIkTElORU5PIiA1CiAJCQlleGl0IDEKIAkJZmkKIAllbHNlCiAJCWVuYWJsZV9pcHY2PSJubyIKLQkJZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogXCIkdjZ0eXBlLCAkZW5hYmxlX2lwdjZcIiIgPiY1Ci1lY2hvICIke0VDSE9fVH1cIiR2NnR5cGUsICRlbmFibGVfaXB2NlwiIiA+JjYKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2XCIiID4mNQorJGFzX2VjaG8gIlwiJHY2dHlwZSwgJGVuYWJsZV9pcHY2XCIiID4mNjsgfQogCWZpCiBmaQogCisjIC0qLSBhdXRvY29uZiAtKi0KICMKICMgTWF5YmUgYWRkIGxpYnJhcnkgZXh0ZW5zaW9ucyBmb3IgdGhyZWFkIG11dGV4IGxvY2tpbmcuCiAjCiAKIGlmIHRlc3QgIngkd2l0aF9yZXNfbG9ja3MiID0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfUkVFTlRSQU5UIDEKLV9BQ0VPRgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1JFRU5UUkFOVCAxIiA+PmNvbmZkZWZzLmgKIAogCiAgICAgY2FzZSAkdGFyZ2V0X29zIGluCkBAIC0yNTM0NSwxMyArMTg2MDgsMTUgQEAKICMKICMgQWRkIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZSBmaWxlcy4KICMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZS4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlLi4uICIgPiY2OyB9CiBvdGhlcl9zcmNfbGlzdD0iIgotb3RoZXJfb2Jqc19saXN0PSIiCitvdGhlcl9mdG9ianNfbGlzdD0iIgogb3RoZXJfbG9ianNfbGlzdD0iIgorb3RoZXJfb2Jqc19saXN0PSIiCiBvdGhlcl9hZ2VudG9ianM9IiIKIG90aGVyX2xhZ2VudG9ianM9IiIKK290aGVyX2Z0YWdlbnRvYmpzPSIiCiBvdGhlcl90cmFwZF9vYmplY3RzPSIiCiAKICMgV2luMzIgc2VydmljZSBjb2RlCkBAIC0yNTM1OSwxNiArMTg2MjQsMTkgQEAKICAgb3RoZXJfc3JjX2xpc3Q9IiRvdGhlcl9zcmNfbGlzdCB3aW5zZXJ2aWNlLmMgd2luc2VydmljZXJjLnJjIgogICBvdGhlcl9vYmpzX2xpc3Q9IiRvdGhlcl9vYmpzX2xpc3Qgd2luc2VydmljZS5vIHdpbnNlcnZpY2VyYy5vIgogICBvdGhlcl9sb2Jqc19saXN0PSIkb3RoZXJfbG9ianNfbGlzdCB3aW5zZXJ2aWNlLmxvIHdpbnNlcnZpY2VyYy5sbyIKKyAgb3RoZXJfZnRvYmpzX2xpc3Q9IiRvdGhlcl9mdG9ianNfbGlzdCB3aW5zZXJ2aWNlLmZ0IHdpbnNlcnZpY2VyYy5mdCIKICAgb3RoZXJfYWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5vIgogICBvdGhlcl9sYWdlbnRvYmpzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5sbyIKKyAgb3RoZXJfZnRhZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLmxvIgogICBvdGhlcl90cmFwZF9vYmplY3RzPSIuLi9zbm1wbGliL3dpbnNlcnZpY2VyYy5vIgogZmkKIAogIyBXaW4zMiBwaXBlcwotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgoraWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KICAgb3RoZXJfc3JjX2xpc3Q9IiRvdGhlcl9zcmNfbGlzdCB3aW5waXBlLmMiCiAgIG90aGVyX29ianNfbGlzdD0iJG90aGVyX29ianNfbGlzdCB3aW5waXBlLm8iCiAgIG90aGVyX2xvYmpzX2xpc3Q9IiRvdGhlcl9sb2Jqc19saXN0IHdpbnBpcGUubG8iCisgIG90aGVyX2Z0b2Jqc19saXN0PSIkb3RoZXJfZnRvYmpzX2xpc3Qgd2lucGlwZS5mdCIKIGZpCiAKIApAQCAtMjUzNzgsMTYwICsxODY0NiwxNiBAQAogCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG90aGVyX3NyY19saXN0ICRvdGhlcl9vYmpzX2xpc3QgJG90aGVyX2xvYmpzX2xpc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JG90aGVyX3NyY19saXN0ICRvdGhlcl9vYmpzX2xpc3QgJG90aGVyX2xvYmpzX2xpc3QiID4mNgotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG90aGVyX2FnZW50b2JqcyAkb3RoZXJfbGFnZW50b2JqcyAkb3RoZXJfdHJhcGRfb2JqZWN0cyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kb3RoZXJfYWdlbnRvYmpzICRvdGhlcl9sYWdlbnRvYmpzICRvdGhlcl90cmFwZF9vYmplY3RzIiA+JjYKKworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG90aGVyX3NyY19saXN0ICRvdGhlcl9vYmpzX2xpc3QgJG90aGVyX2xvYmpzX2xpc3QiID4mNQorJGFzX2VjaG8gIiRvdGhlcl9zcmNfbGlzdCAkb3RoZXJfb2Jqc19saXN0ICRvdGhlcl9sb2Jqc19saXN0IiA+JjY7IH0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkb3RoZXJfYWdlbnRvYmpzICRvdGhlcl9sYWdlbnRvYmpzICRvdGhlcl90cmFwZF9vYmplY3RzIiA+JjUKKyRhc19lY2hvICIkb3RoZXJfYWdlbnRvYmpzICRvdGhlcl9sYWdlbnRvYmpzICRvdGhlcl90cmFwZF9vYmplY3RzIiA+JjY7IH0KIAogIwotIyBEbyB0cmFuc3BvcnQgbW9kdWxlIHByb2Nlc3NpbmcuCisjIENyZWF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBidWlsZAogIwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgdHJhbnNwb3J0IG1vZHVsZXMgdG8gdXNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyB0cmFuc3BvcnQgbW9kdWxlcyB0byB1c2UuLi4gJEVDSE9fQyIgPiY2Ci10cmFuc3BvcnRfc3JjX2xpc3Q9IiIKLXRyYW5zcG9ydF9oZHJfbGlzdD0iIgotdHJhbnNwb3J0X2RlZl9saXN0PSIiCi10cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiIKLXRyYW5zcG9ydF9hZGRfbGlzdD0iIgotdHJhbnNwb3J0X2NhbGxiYWNrX2Rpc2FibGVkPSIiCi1uZXdfd2l0aF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF90cmFuc3BvcnRzIHwgc2VkICdzLywvIC9nOydgCi1uZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfb3V0X3RyYW5zcG9ydHMgfCBzZWQgJ3MvLC8gL2c7J2AKLQotIwotIyBBZGQgdGhlIGRlZmF1bHQgdHJhbnNwb3J0cyB0byB0aGUgbGlzdAotIwotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQ2FsbGJhY2siCi1lbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQ2FsbGJhY2siCi1lbHNlCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgVW5peCBDYWxsYmFjayIKLWZpCi1pZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFBJUHY2IFRDUElQdjYgJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3QiCi1maQotZm9yIGkgaW4gJHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q7IGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QgIiB8IGdyZXAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KLSAgICA6Ci0gIGVsc2UKLSAgICB0cmFuc3BvcnRfYWRkX2xpc3Q9IiRpICR0cmFuc3BvcnRfYWRkX2xpc3QiCi0gIGZpCi1kb25lCi1uZXdfdHJhbnNwb3J0X2xpc3Q9IiR0cmFuc3BvcnRfYWRkX2xpc3QgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0IgotCi1mb3IgaSBpbiAkbmV3X3RyYW5zcG9ydF9saXN0OyBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX291dF90cmFuc3BvcnRfbGlzdCAiIHwgZ3JlcCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgotICAgIGlmIHRlc3QgIngkaSIgPSAieFVEUCI7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGhvdXQgVURQL0lQIHN1cHBvcnQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEl0IGlzIG5vdCBwb3NzaWJsZSB0byBjb21waWxlIHdpdGhvdXQgVURQL0lQIHN1cHBvcnQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgZWxpZiB0ZXN0ICJ4JGkiID0gInhDYWxsYmFjayI7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgIHRyYW5zcG9ydF9jYWxsYmFja19kaXNhYmxlZD0ieWVzIgotICAgIGZpCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhBQUw1UFZDIjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiICE9ICJ4bGludXgiOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQUFMNSBQVkMgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAoTGludXggb25seSkiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQUFMNSBQVkMgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAoTGludXggb25seSkiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIGZpCi0gICAgZmkKLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhJUFgiOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgIT0gInhsaW51eCI7IHRoZW4KLSAgICAgICAgZWNobwotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJUFggc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAoTGludXggb25seSkiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSVBYIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKExpbnV4IG9ubHkpIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4VW5peCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFVuaXggZG9tYWluIHByb3RvY29sIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgISAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieCRpIiA9ICJ4VURQSVB2NiIgLW8gIngkaSIgPSAieFRDUElQdjYiOyB0aGVuCi0gICAgICAgICAgICBlY2hvCi0gICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICAgIGZpCi0gICAgZmkKLSAgICB0cmFuc3BvcnRfc3JjPSJzbm1wIiRpIkRvbWFpbi5jIgotICAgIHRyYW5zcG9ydF9oZHI9InNubXAiJGkiRG9tYWluLmgiCi0gICAgcmVsX3RyYW5zcG9ydF9zcmM9InNubXBsaWIvIiR0cmFuc3BvcnRfc3JjCi0gICAgcmVsX3RyYW5zcG9ydF9oZHI9ImluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8iJHRyYW5zcG9ydF9oZHIKLSAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyI7IHRoZW4KLSAgICAgIHRyYW5zcG9ydF9yZXN1bHRfbGlzdD0iJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAkaSIKLSAgICAgIHRyYW5zcG9ydF9zcmNfbGlzdD0iJHRyYW5zcG9ydF9zcmMgJHRyYW5zcG9ydF9zcmNfbGlzdCIKLSAgICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfaGRyIjsgdGhlbgotICAgICAgICB0cmFuc3BvcnRfaGRyX2xpc3Q9IiR0cmFuc3BvcnRfaGRyICR0cmFuc3BvcnRfaGRyX2xpc3QiCi0gICAgICBmaQotICAgICAgdHJhbnNwb3J0X2RlZj1gZWNobyAkaSB8IHNlZCAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAotICAgICAgdHJhbnNwb3J0X2RlZl9saXN0PSJORVRTTk1QX1RSQU5TUE9SVF8iJHRyYW5zcG9ydF9kZWYiX0RPTUFJTiAkdHJhbnNwb3J0X2RlZl9saXN0IgotICAgIGVsc2UKLSAgICAgIGVjaG8KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENhbm5vdCBmaW5kIGZpbGUgJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgdG8gc3VwcG9ydCBTTk1QIHRyYW5zcG9ydCBkb21haW4gJGkuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IENhbm5vdCBmaW5kIGZpbGUgJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgdG8gc3VwcG9ydCBTTk1QIHRyYW5zcG9ydCBkb21haW4gJGkuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgZmkKLSAgZmkKLWRvbmUKLXRyYW5zcG9ydF9vYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8IHNlZCAncy9cLmMvXC5vL2cnYAotdHJhbnNwb3J0X2xvYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8IHNlZCAncy9cLmMvXC5sby9nJ2AKLQotIyMgd2luMzIgcGxhdGZvcm1zIHJlcXVpcmUgaW5ldF9udG9wIGV0Yy4KLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gIGlmIGVjaG8gIiR0cmFuc3BvcnRfZGVmX2xpc3QiIHwgZ3JlcCAiSVBWNiIgPi9kZXYvbnVsbDsgdGhlbgotICAgIHRyYW5zcG9ydF9vYmpfbGlzdD0iJHRyYW5zcG9ydF9vYmpfbGlzdCBpbmV0X250b3AubyBpbmV0X3B0b24ubyIKLSAgICB0cmFuc3BvcnRfbG9ial9saXN0PSIkdHJhbnNwb3J0X2xvYmpfbGlzdCBpbmV0X250b3AubG8gaW5ldF9wdG9uLmxvIgotICBmaQotZmkKLQotCi0KLQotCi1mb3IgaSBpbiAkdHJhbnNwb3J0X2RlZl9saXN0OyBkbwotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRpIDEKLV9BQ0VPRgotCi1kb25lCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0LiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kdHJhbnNwb3J0X3Jlc3VsdF9saXN0LiIgPiY2Ci0KLSAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgotICBOZXR3b3JrIHRyYW5zcG9ydCBzdXBwb3J0OiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0Ci1FT0YKLQotCi0jCi0jIFNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlCi0jCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2VjdXJpdHkgbW9kdWxlcyB0byB1c2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2VjdXJpdHkgbW9kdWxlcyB0byB1c2UuLi4gJEVDSE9fQyIgPiY2Ci1zZWN1cml0eV9kZWZfbGlzdD0idXNtIgotc2VjdXJpdHlfc3JjX2xpc3Q9IiIKLXNlY3VyaXR5X29ial9saXN0PSIiCi1zZWN1cml0eV9sb2JqX2xpc3Q9IiIKLXNlY3VyaXR5X2luaXRfZmlsZT0ic25tcGxpYi9zbm1wc21faW5pdC5oIgotc2VjdXJpdHlfaW5jbF9maWxlPSJpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgiCi1uZXdfd2l0aF9zZWN1cml0eT1gZWNobyAkd2l0aF9zZWN1cml0eV9tb2R1bGVzIHwgc2VkICdzLywvIC9nOydgCi1uZXdfd2l0aF9vdXRfc2VjdXJpdHk9YGVjaG8gJHdpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLQogaWYgdGVzdCAhIC1kIGluY2x1ZGU7IHRoZW4KICAgbWtkaXIgaW5jbHVkZQogZmkKQEAgLTI1NTUxLDIyICsxODY3NSwyMzAgQEAKIGlmIHRlc3QgISAtZCBzbm1wbGliOyB0aGVuCiAgIG1rZGlyIHNubXBsaWIKIGZpCi1lY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5pdF9maWxlCi1lY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5jbF9maWxlCitpZiB0ZXN0ICEgLWQgc25tcGxpYi90cmFuc3BvcnRzIDsgdGhlbgorICBta2RpciBzbm1wbGliL3RyYW5zcG9ydHMKK2ZpCiAKLWZvciBpIGluICRzZWN1cml0eV9kZWZfbGlzdDsgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfc2VjdXJpdHkgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4dXNtIjsgdGhlbgotCWVjaG8KLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogVGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgbWFuZGF0b3J5IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIG1hbmRhdG9yeSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorIworIyBEbyB0cmFuc3BvcnQgbW9kdWxlIHByb2Nlc3NpbmcuCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgdHJhbnNwb3J0IG1vZHVsZXMgdG8gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbmQgY29uZmlndXJpbmcgdHJhbnNwb3J0IG1vZHVsZXMgdG8gdXNlLi4uICIgPiY2OyB9CisKKyMgaW5jbHVkZSB0aGUgYWN0dWFsIGNvZGUgY2hlY2tpbmcKKyMgLSotIHNoIC0qLQordHJhbnNwb3J0X3NyY19saXN0PSIiCit0cmFuc3BvcnRfaGRyX2xpc3Q9IiIKK3RyYW5zcG9ydF9kZWZfbGlzdD0iIgordHJhbnNwb3J0X3Jlc3VsdF9saXN0PSIiCit0cmFuc3BvcnRfYWRkX2xpc3Q9IiIKK25ld193aXRoX3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX3RyYW5zcG9ydHMgfCAkU0VEICdzLywvIC9nOydgCituZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfb3V0X3RyYW5zcG9ydHMgfCAkU0VEICdzLywvIC9nOydgCisKKyMgc2V0IHVwIHRoZSBDUFAgY29tbWFuZAorTU9EVUxFQ1BQPSIkQ1BQICRQQVJUSUFMVEFSR0VURkxBR1MgLUkke3NyY2Rpcn0gLUkke3NyY2Rpcn0vaW5jbHVkZSIKKworIworIyBBZGQgdGhlIGRlZmF1bHQgdHJhbnNwb3J0cyB0byB0aGUgbGlzdAorIworaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KKyAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBBbGlhcyBDYWxsYmFjayIKK2Vsc2UKKyAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQIFRDUCBBbGlhcyBVbml4IENhbGxiYWNrIgorZmkKK2lmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisgIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUElQdjYgVENQSVB2NiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdCIKK2ZpCitmb3IgaSBpbiAkdHJhbnNwb3J0X2RlZmF1bHRfbGlzdDsgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCAiIHwgJEdSRVAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KKyAgICA6CisgIGVsc2UKKyAgICB0cmFuc3BvcnRfYWRkX2xpc3Q9IiRpICR0cmFuc3BvcnRfYWRkX2xpc3QiCisgIGZpCitkb25lCituZXdfdHJhbnNwb3J0X2xpc3Q9IiR0cmFuc3BvcnRfYWRkX2xpc3QgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0IgorCitpZiB0ZXN0ICJ4JGN0b3JfaGVhZGVyIiA9ICJ4IiA7IHRoZW4KKyAgIGN0b3JfaGVhZGVyPSJzbm1wbGliL3RyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaCIKK2ZpCisKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRjdG9yX2hlYWRlcgord2hpbGUgdGVzdCAieCRuZXdfdHJhbnNwb3J0X2xpc3QiICE9ICJ4IjsgZG8KKyAgZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdD0iIgorICBmb3IgaSBpbiAkbmV3X3RyYW5zcG9ydF9saXN0OyBkbworICAgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0ICIgfCAkR1JFUCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgorICAgICAgdHJ1ZQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgIGlmIHRlc3QgIngkaSIgPSAieFVEUElQdjYiIC1vICJ4JGkiID0gInhUQ1BJUHY2IjsgdGhlbgorICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkIiAiJExJTkVOTyIgNQorICAgICAgICAgIGZpCisgICAgICBmaQorICAgICAgdHJhbnNwb3J0X3NyYz0idHJhbnNwb3J0cy9zbm1wIiRpIkRvbWFpbi5jIgorICAgICAgdHJhbnNwb3J0X2hkcj0ic25tcCIkaSJEb21haW4uaCIKKyAgICAgIHJlbF90cmFuc3BvcnRfc3JjPSJzbm1wbGliLyIkdHJhbnNwb3J0X3NyYworICAgICAgcmVsX3RyYW5zcG9ydF9oZHI9ImluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8iJHRyYW5zcG9ydF9oZHIKKyAgICAgIGxjX2k9YGVjaG8gJGkgfCB0ciAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eidgCisgICAgICBjdG9yX2ZuPSJuZXRzbm1wXyIkbGNfaSJfY3RvciIKKyAgICAgIGlmIHRlc3QgLWYgIiRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjIjsgdGhlbgorICAgICAgICB0cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgJGkiCisgICAgICAgIHRyYW5zcG9ydF9zcmNfbGlzdD0iJHRyYW5zcG9ydF9zcmMgJHRyYW5zcG9ydF9zcmNfbGlzdCIKKyAgICAgICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9oZHIiOyB0aGVuCisgICAgICAgICAgdHJhbnNwb3J0X2hkcl9saXN0PSIkdHJhbnNwb3J0X2hkciAkdHJhbnNwb3J0X2hkcl9saXN0IgorICAgICAgICBmaQorICAgICAgICB0cmFuc3BvcnRfZGVmPWBlY2hvICRpIHwgJFNFRCAneS9hYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei9BQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWi8nYAorICAgICAgICB0cmFuc3BvcnRfZGVmX2xpc3Q9Ik5FVFNOTVBfVFJBTlNQT1JUXyIkdHJhbnNwb3J0X2RlZiJfRE9NQUlOICR0cmFuc3BvcnRfZGVmX2xpc3QiCisgICAgICBlbHNlCisgICAgICAgIGVjaG8KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNhbm5vdCBmaW5kIGZpbGUgJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMgdG8gc3VwcG9ydCBTTk1QIHRyYW5zcG9ydCBkb21haW4gJGkuIiAiJExJTkVOTyIgNQorICAgICAgZmkKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBidWlsZCBhIHBzZXVkbyBpbmNsdWRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGN1cnJlbnQgY29uZmlnIGFuZAorICAgICAgIyBzeXN0ZW0gc3ltYm9sczoKKyAgICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSBORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUKKyN1bmRlZiBORVRTTk1QX01JTklNQUxfQ09ERQorI2RlZmluZSBORVRfU05NUF9DT05GSUdfSAorI3VuZGVmIGNvbmZpZ19yZXF1aXJlCisjZGVmaW5lIGNvbmZpZ19yZXF1aXJlKGZvbykgY29uZmlnX2NoZWNraXRfcmVxdWlyZShmb28pCisjdW5kZWYgY29uZmlnX2Vycm9yCisjZGVmaW5lIGNvbmZpZ19lcnJvcihmb28pIGNvbmZpZ19jaGVja2l0X2Vycm9yKGZvbykKKyNpbmNsdWRlICIkcmVsX3RyYW5zcG9ydF9oZHIiCitfQUNFT0YKKyAgICAgIG12IGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorCisgICAgICAjCisgICAgICAjIGNoZWNrIGZvciBkZXBlbmRlbmNpZXMgdXNpbmcgY29uZmlnX3JlcXVpcmUoKSBtYWNybworICAgICAgIworICAgICAgc3ViX2xpc3Q9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8ICRHUkVQIGNvbmZpZ19jaGVja2l0X3JlcXVpcmUgfCAkU0VEICdzLy4qY29uZmlnX2NoZWNraXRfcmVxdWlyZSAqKCAqXCguKlwpICopLiovXDEvJ2AKKyAgICAgIGlmIHRlc3QgIngkc3ViX2xpc3QiICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgZm9yIGogaW4gJHN1Yl9saXN0IDsgZG8KKwkgIGlmIGVjaG8gIiAkZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdCAkbmV3X3RyYW5zcG9ydF9saXN0ICIgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGwgOyB0aGVuCisJICAgIDoKKwkgIGVsc2UKKyAgICAgICAgICAgIGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3Q9IiRmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0ICRqIgorCSAgZmkKKyAgICAgICAgZG9uZQorICAgICAgZmkKKworICAgICAgIworICAgICAgIyBjaGVjayBmb3IgZXJyb3JzIHVzaW5nIGNvbmZpZ19lcnJvcigpIG1hY3JvCisgICAgICAjCisgICAgICBlcnJvcl9saXN0PWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCAkR1JFUCBjb25maWdfY2hlY2tpdF9lcnJvciB8ICRTRUQgJ3MvLipjb25maWdfY2hlY2tpdF9lcnJvcihcKC4qXCkpLiovXDEvZydgCisgICAgICBpZiB0ZXN0ICJ4JGVycm9yX2xpc3QiICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgZWNobyAiIgorICAgICAgICBhc19mbl9lcnJvciAkPyAiJGVycm9yX2xpc3QiICIkTElORU5PIiA1CisgICAgICBmaQorCisgICAgICAjCisgICAgICAjIENoZWNrIGZvciBuZWVkZWQgY29uc3RydWN0b3IgaW5pdGlhbGl6YXRpb24gcm91dGluZXMgdG8gY2FsbAorICAgICAgIworICAgICAgZm91bmQ9YGdyZXAgJGN0b3JfZm4gJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmNgCisgICAgICBpZiBncmVwICRjdG9yX2ZuICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjID4gL2Rldi9udWxsIDsgdGhlbgorCSMgd2UgYWRkIHRoZW0gZG93biBiZWxvdyBpbnN0ZWFkIG9mIGhlcmUgdG8gbWFrZSBzdXJlCisJIyBjb25maWdfcmVxdWlyZSBkZXBlbmRlbmN5IGNvbnN0cnVjdG9ycyBnZXQgY2FsbGVkIGZpcnN0LgorCXRyX2luaXRfbGlzdD0iJGN0b3JfZm4gJHRyX2luaXRfbGlzdCIKKyAgICAgIGZpCiAgICAgZmkKKyAgZG9uZSAjIGZvciBlYWNoIG5ldyB0cmFuc3BvcnQKKyAgbmV3X3RyYW5zcG9ydF9saXN0PSIkZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdCIKK2RvbmUgIyB3aGlsZSBuZXcgdHJhbnNwb3J0cyBleGlzdAordHJhbnNwb3J0X29ial9saXN0PWBlY2hvICIgJHRyYW5zcG9ydF9zcmNfbGlzdCAiIHwgJFNFRCAncy9cLmMvXC5vL2cnYAordHJhbnNwb3J0X2xvYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8ICRTRUQgJ3MvXC5jL1wubG8vZydgCit0cmFuc3BvcnRfZnRvYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8ICRTRUQgJ3MvXC5jL1wuZnQvZydgCitmb3IgaSBpbiAkdHJfaW5pdF9saXN0IDsgZG8KKyAgIGVjaG8gIiRpKCk7IiA+PiAkY3Rvcl9oZWFkZXIKK2RvbmUKKworIyMgd2luMzIgcGxhdGZvcm1zIHJlcXVpcmUgaW5ldF9udG9wIGV0Yy4KK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieGN5Z3dpbiI7IHRoZW4KKyAgaWYgZWNobyAiJHRyYW5zcG9ydF9kZWZfbGlzdCIgfCAkR1JFUCAiSVBWNiIgPi9kZXYvbnVsbDsgdGhlbgorICAgIHRyYW5zcG9ydF9vYmpfbGlzdD0iJHRyYW5zcG9ydF9vYmpfbGlzdCBpbmV0X250b3AubyBpbmV0X3B0b24ubyIKKyAgICB0cmFuc3BvcnRfbG9ial9saXN0PSIkdHJhbnNwb3J0X2xvYmpfbGlzdCBpbmV0X250b3AubG8gaW5ldF9wdG9uLmxvIgorICAgIHRyYW5zcG9ydF9mdG9ial9saXN0PSIkdHJhbnNwb3J0X2Z0b2JqX2xpc3QgaW5ldF9udG9wLmZ0IGluZXRfcHRvbi5mdCIKKyAgZmkKK2ZpCisKK2lmIHRlc3QgIngkdHJhbnNwb3J0X3Jlc3VsdF9saXN0IiA9IHggOyB0aGVuCisgICBhc19mbl9lcnJvciAkPyAiTm8gdHJhbnNwb3J0cyBjb25maWd1cmVkLCBhdCBsZWFzdCBvbmUgbXVzdCBiZSBwcm92aWRlZCIgIiRMSU5FTk8iIDUKK2ZpCisKKworCisKKworCisKK2ZvciBpIGluICR0cmFuc3BvcnRfZGVmX2xpc3Q7IGRvCisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgJGkgMQorX0FDRU9GCisKK2RvbmUKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0LiIgPiY1CiskYXNfZWNobyAiJHRyYW5zcG9ydF9yZXN1bHRfbGlzdC4iID4mNjsgfQorCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgTmV0d29yayB0cmFuc3BvcnQgc3VwcG9ydDogJHRyYW5zcG9ydF9yZXN1bHRfbGlzdAorRU9GCisKKworIyBjbGVhbnVwCitybSAtZiBtb2R1bGVfdG1wX2hlYWRlci5oCisKKyMKKyMgU2VjdXJpdHkgbW9kdWxlcyB0byB1c2UKKyMKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3Igc2VjdXJpdHkgbW9kdWxlcyB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlLi4uICIgPiY2OyB9CisjIC0qLSBzaCAtKi0KK3NlY3VyaXR5X2RlZl9saXN0PSJ1c20iCitzZWN1cml0eV9zcmNfbGlzdD0iIgorc2VjdXJpdHlfb2JqX2xpc3Q9IiIKK3NlY3VyaXR5X2xvYmpfbGlzdD0iIgorc2VjdXJpdHlfZnRvYmpfbGlzdD0iIgorc2VjdXJpdHlfbW9kX2xpc3Q9IiAiCisKK25ld193aXRoX3NlY3VyaXR5PQorbmV3X3dpdGhfb3V0X3NlY3VyaXR5PWBlY2hvICR3aXRoX291dF9zZWN1cml0eV9tb2R1bGVzIHwgdHIgLCAnICdgCisKKyMgQXNzaWduIGFkZGl0aW9uYWwgc2VjdXJpdHkgbW9kdWxlcworZm9yIGkgaW4gYGVjaG8gJHdpdGhfc2VjdXJpdHlfbW9kdWxlcyB8IHRyICwgJyAnYDsgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGVjaG8KKyAgICBhc19mbl9lcnJvciAkPyAic2VjdXJpdHkgbW9kdWxlIGNvbmZsaWN0IC0gJGkgYm90aCBpbmNsdWRlZCBhbmQgZXhjbHVkZWQiICIkTElORU5PIiA1CisgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgIDogIyBEb3VibGUgZGVmaW5lLCBpZ25vcmUKICAgZWxzZQogICAgIG5ld193aXRoX3NlY3VyaXR5PSIkbmV3X3dpdGhfc2VjdXJpdHkgJGkiCiAgIGZpCiBkb25lCiAKKyMgQWRkIGRlZmF1bHQgc2VjdXJpdHkgbW9kdWxlcworZm9yIGkgaW4gJHNlY3VyaXR5X2RlZl9saXN0OyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX291dF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgOiAjIEV4Y2x1ZGVkLCBpZ25vcmUKKyAgZWxpZiBlY2hvICIgJG5ld193aXRoX3NlY3VyaXR5ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgOiAjIERvdWJsZSBkZWZpbmUsIGlnbm9yZQorICBlbHNlCisgICAgbmV3X3dpdGhfc2VjdXJpdHk9IiRuZXdfd2l0aF9zZWN1cml0eSAkaSIKKyAgZmkKK2RvbmUKKworIyBHZW5lcmF0ZSBvdXRwdXQgZmlsZXMKKzogJHtzZWN1cml0eV9pbml0X2ZpbGU6PSdzbm1wbGliL3NubXBzbV9pbml0LmgnfQorOiAke3NlY3VyaXR5X3NodXRkb3duX2ZpbGU6PSdzbm1wbGliL3NubXBzbV9zaHV0ZG93bi5oJ30KKzogJHtzZWN1cml0eV9pbmNsX2ZpbGU6PSdpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgnfQorCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5pdF9maWxlCitlY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfc2h1dGRvd25fZmlsZQorZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luY2xfZmlsZQorCiBmb3IgaSBpbiAkbmV3X3dpdGhfc2VjdXJpdHk7IGRvCiAgIGNmaWxlPSJzbm1wIiRpIi5jIgogICBoZmlsZT0ic25tcCIkaSIuaCIKQEAgLTI1NTc2LDE5ICsxODkwOCwyMSBAQAogICAgIDoKICAgZWxzZQogICAgIGVjaG8KLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBObyBzdWNoIHNlY3VyaXR5IG1vZHVsZTogJGkgLyAkY2ZpbGUgLyAkaGZpbGUiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogTm8gc3VjaCBzZWN1cml0eSBtb2R1bGU6ICRpIC8gJGNmaWxlIC8gJGhmaWxlIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgYXNfZm5fZXJyb3IgJD8gIk5vIHN1Y2ggc2VjdXJpdHkgbW9kdWxlOiAkaSAvICRjZmlsZSAvICRoZmlsZSIgIiRMSU5FTk8iIDUKICAgZmkKIAogICAjIGRlZmluZSBhIGJ1bmNoIG9mIHN0dWZmIHRvIGVuYWJsZSBpdAorICBzZWN1cml0eV9tb2RfbGlzdD0iJHtzZWN1cml0eV9tb2RfbGlzdH0gJGkiCisgIHNlY3VyaXR5X3NyY19saXN0PSIkc2VjdXJpdHlfc3JjX2xpc3QgJGNmaWxlIgogICBzZWN1cml0eV9zcmNfbGlzdD0iJHNlY3VyaXR5X3NyY19saXN0ICRjZmlsZSIKICAgc2VjdXJpdHlfaGRyX2xpc3Q9IiRzZWN1cml0eV9oZHJfbGlzdCAkaGZpbGUiCiAgIHNlY3VyaXR5X29ial9saXN0PSIkc2VjdXJpdHlfb2JqX2xpc3Qgc25tcCIkaSIubyIKICAgc2VjdXJpdHlfbG9ial9saXN0PSIkc2VjdXJpdHlfbG9ial9saXN0IHNubXAiJGkiLmxvIgotICBkZWZfbmFtZT0iTkVUU05NUF9TRUNNT0RfImBlY2hvICRpIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYAorICBzZWN1cml0eV9mdG9ial9saXN0PSIkc2VjdXJpdHlfZnRvYmpfbGlzdCBzbm1wIiRpIi5mdCIKICAgZWNobyAiaW5pdF8iJGkiKCk7IiA+PiAkc2VjdXJpdHlfaW5pdF9maWxlCisgIGVjaG8gInNodXRkb3duXyIkaSIoKTsiID4+ICRzZWN1cml0eV9zaHV0ZG93bl9maWxlCiAgIGVjaG8gIiNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5LyRoZmlsZT4iID4+ICRzZWN1cml0eV9pbmNsX2ZpbGUKKyAgZGVmX25hbWU9ImAkYXNfZWNobyAiTkVUU05NUF9TRUNNT0RfJGkiIHwgJGFzX3RyX2NwcGAiCiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgJGRlZl9uYW1lIDEKIF9BQ0VPRgpAQCAtMjU1OTksOCArMTg5MzMsMTAgQEAKIAogCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRuZXdfd2l0aF9zZWN1cml0eSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kbmV3X3dpdGhfc2VjdXJpdHkiID4mNgorCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV3X3dpdGhfc2VjdXJpdHkiID4mNQorJGFzX2VjaG8gIiRuZXdfd2l0aF9zZWN1cml0eSIgPiY2OyB9CiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBTTk1QdjMgU2VjdXJpdHkgTW9kdWxlczogICAgJG5ld193aXRoX3NlY3VyaXR5CkBAIC0yNTYxMSwzMiArMTg5NDcsMzQgQEAKICMgSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgS1NNIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIHN1cHBvcnQKICMKIAotYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPW5vCiByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PQogYWxyZWFkeV9jaGVja2VkX2tyYjU9bm8KIAogZm9yIHNlYyBpbiAkbmV3X3dpdGhfc2VjdXJpdHkKIGRvCi0gIGlmIHRlc3QgIngkc2VjIiA9ICJ4a3NtIiAtYSAieHllcyIgPSAieCRhbHJlYWR5X2NoZWNrZWRfa3JiNSI7IHRoZW4KLSAgICBjb250aW51ZQorICBpZiB0ZXN0ICJ4JHNlYyIgPSAieGtzbSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4eWVzIiA9ICJ4JGFscmVhZHlfY2hlY2tlZF9rcmI1IjsgdGhlbgorICAgICAgY29udGludWUKKyAgICBlbHNlCisgICAgICBhbHJlYWR5X2NoZWNrZWRfa3JiNT15ZXMKKyAgICBmaQogICBmaQotICBhbHJlYWR5X2NoZWNrZWRfa3JiNT15ZXMKIAogICBpZiB0ZXN0IHgkc2VjICE9IHhrc207IHRoZW4KICAgICByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PSIkcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eSAkc2VjIgogICBlbHNlCiAgICAgaWYgdGVzdCBubyA9ICR0cnlrcmI1OyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBjb25maWd1cmVkIG5vdCB0byB1c2Uga3JiNS4gZGlzYWJsaW5nIGtzbSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNvbmZpZ3VyZWQgbm90IHRvIHVzZSBrcmI1LiBkaXNhYmxpbmcga3NtIiA+JjY7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjb25maWd1cmVkIG5vdCB0byB1c2Uga3JiNS4gZGlzYWJsaW5nIGtzbSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBjb25maWd1cmVkIG5vdCB0byB1c2Uga3JiNS4gZGlzYWJsaW5nIGtzbSIgPiY2O30KICAgICAgIGNvbnRpbnVlCiAgICAgZmkKIAogICAgICMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAia3JiNS1jb25maWciLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgogc2V0IGR1bW15IGtyYjUtY29uZmlnOyBhY193b3JkPSQyCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY193b3JkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wYXRoX2tyYjVfY29uZmlnK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgJGFjX3dvcmQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfcGF0aF9rcmI1X2NvbmZpZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGNhc2UgJGtyYjVfY29uZmlnIGluCiAgIFtcXC9dKiB8ID86W1xcL10qKQpAQCAtMjU2NDksMzAgKzE4OTg3LDMxIEBACiBkbwogICBJRlM9JGFzX3NhdmVfSUZTCiAgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbwotICBpZiAkYXNfZXhlY3V0YWJsZV9wICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgdGhlbgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCiAgICAgYWNfY3ZfcGF0aF9rcmI1X2NvbmZpZz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CiAgICAgYnJlYWsgMgogICBmaQogZG9uZQotZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKICAgdGVzdCAteiAiJGFjX2N2X3BhdGhfa3JiNV9jb25maWciICYmIGFjX2N2X3BhdGhfa3JiNV9jb25maWc9Im5vIgogICA7OwogZXNhYwogZmkKIGtyYjVfY29uZmlnPSRhY19jdl9wYXRoX2tyYjVfY29uZmlnCi0KIGlmIHRlc3QgLW4gIiRrcmI1X2NvbmZpZyI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGtyYjVfY29uZmlnIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRrcmI1X2NvbmZpZyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAka3JiNV9jb25maWciID4mNQorJGFzX2VjaG8gIiRrcmI1X2NvbmZpZyIgPiY2OyB9CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCiAKKwogICAgIGlmIHRlc3Qgbm8gIT0gJGtyYjVfY29uZmlnOyB0aGVuCiAgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIGAka3JiNV9jb25maWcgLS1jZmxhZ3NgIgogICAgICAgTElCUz0iJExJQlMgYCRrcmI1X2NvbmZpZyAtLWxpYnNgIgpAQCAtMjU3MDAsNzYgKzE5MDM5LDQ4IEBACiAKICAgICBmaQogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrcmI1IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGtyYjUuLi4gJEVDSE9fQyIgPiY2Ci0gICAgaWYgdGVzdCAiJHthY19jdl9oYXZlX2tyYjUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBrcmI1IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBrcmI1Li4uICIgPiY2OyB9CisgICAgaWYgJHthY19jdl9oYXZlX2tyYjUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sa3JiNSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGtyYjUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sa3JiNSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Iga3JiNV9pbml0X2NvbnRleHQgaW4gLWxrcmI1Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxrcmI1ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIga3JiNV9pbml0X2NvbnRleHQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLWtyYjVfaW5pdF9jb250ZXh0ICgpOworcmV0dXJuIGtyYjVfaW5pdF9jb250ZXh0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dD1ubworICBhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQgPSB5ZXM7IHRoZW4KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX2tyYjVfa3JiNV9pbml0X2NvbnRleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfa3JiNV9rcmI1X2luaXRfY29udGV4dCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9rcmI1X2tyYjVfaW5pdF9jb250ZXh0IiA9IHh5ZXM7IHRoZW4gOgogICBhY19jdl9oYXZlX2tyYjU9eWVzCiBlbHNlCiAgIGFjX2N2X2hhdmVfa3JiNT1ubwpAQCAtMjU3ODIsMjkgKzE5MDkzLDIzIEBACiAKICAgICBpZiB0ZXN0ICRhY19jdl9oYXZlX2tyYjUgPSBubzsgdGhlbgogICAgICAgaWYgdGVzdCAieCRhc2tlZGtyYjUiID0gInh5ZXMiOyB0aGVuCi0JeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQXNrZWQgdG8gdXNlIGtyYjUgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQXNrZWQgdG8gdXNlIGtyYjUgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKwlhc19mbl9lcnJvciAkPyAiQXNrZWQgdG8gdXNlIGtyYjUgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4iICIkTElORU5PIiA1CiAgICAgICBmaQotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8uIGRpc2FibGluZyBrc20iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8uIGRpc2FibGluZyBrc20iID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vLiBkaXNhYmxpbmcga3NtIiA+JjUKKyRhc19lY2hvICJuby4gZGlzYWJsaW5nIGtzbSIgPiY2OyB9CiAgICAgICBjb250aW51ZQogICAgIGZpCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogICAgIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9IiRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5IGtzbSIKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaGVpbWRhbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBoZWltZGFsLi4uICRFQ0hPX0MiID4mNgotICAgIGlmIHRlc3QgIiR7YWNfY3ZfaGVpbWRhbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGhlaW1kYWwiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGhlaW1kYWwuLi4gIiA+JjY7IH0KKyAgICBpZiAke2FjX2N2X2hlaW1kYWwrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGtyYjUuaD4KIGludApAQCAtMjU4MTUsNDUgKzE5MTIwLDIwIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlaW1kYWw9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hlaW1kYWw9bm8KKyAgYWNfY3ZfaGVpbWRhbD1ubwogCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlaW1kYWwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlaW1kYWwiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGVpbWRhbCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlaW1kYWwiID4mNjsgfQogICAgIGlmIHRlc3QgJGFjX2N2X2hlaW1kYWwgPSB5ZXM7IHRoZW4KLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwgMQotX0FDRU9GCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwgMSIgPj5jb25mZGVmcy5oCiAKICAgICAgIGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KIAlMSUJTPSIkTElCUyAtbGtyYjUgLWxhc24xIC1sY29tX2VyciAtbHJva2VuIgpAQCAtMjU4NjIsMTcxICsxOTE0Miw1MSBAQAogCUxJQlM9IiRMSUJTIC1sa3JiNSAtbGNvbV9lcnIiCiAgICAgZmkKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBuZWVkIHRvIHVzZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIG5lZWQgdG8gdXNlLi4uICRFQ0hPX0MiID4mNgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3JiNV9jX2VuY3J5cHQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3JiNV9jX2VuY3J5cHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfa3JiNV9jX2VuY3J5cHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIG5lZWQgdG8gdXNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIG5lZWQgdG8gdXNlLi4uICIgPiY2OyB9CisgICAgaWYgJHthY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBrcmI1X2NfZW5jcnlwdCB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGtyYjVfY19lbmNyeXB0LgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGtyYjVfY19lbmNyeXB0IGlubm9jdW91c19rcmI1X2NfZW5jcnlwdAotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBrcmI1X2NfZW5jcnlwdCAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBrcmI1X2NfZW5jcnlwdAotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGtyYjVfY19lbmNyeXB0ICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2tyYjVfY19lbmNyeXB0KSB8fCBkZWZpbmVkIChfX3N0dWJfX19rcmI1X2NfZW5jcnlwdCkKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0ga3JiNV9jX2VuY3J5cHQ7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0ga3JiNV9jX2VuY3J5cHQ7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19rcmI1X2NfZW5jcnlwdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19rcmI1X2NfZW5jcnlwdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfa3JiNV9jX2VuY3J5cHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfa3JiNV9jX2VuY3J5cHQiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19rcmI1X2NfZW5jcnlwdCA9IHllczsgdGhlbgotCi0gICAgaWYgdGVzdCAiJHthY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGs1Y3J5cHRvIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGtyYjVfaW5pdF9jb250ZXh0IGluIC1sazVjcnlwdG8uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGs1Y3J5cHRvIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBrcmI1X2luaXRfY29udGV4dCBpbiAtbGs1Y3J5cHRvLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sazVjcnlwdG8gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBrcmI1X2luaXRfY29udGV4dCAoKTsKIGludAogbWFpbiAoKQogewota3JiNV9pbml0X2NvbnRleHQgKCk7CityZXR1cm4ga3JiNV9pbml0X2NvbnRleHQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQ9bm8KKyAgYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2s1Y3J5cHRvX2tyYjVfaW5pdF9jb250ZXh0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rNWNyeXB0b19rcmI1X2luaXRfY29udGV4dCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfazVjcnlwdG9fa3JiNV9pbml0X2NvbnRleHQiID0geHllczsgdGhlbiA6CiAgIGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD15ZXMKIGVsc2UKLSAgYWNfY3ZfTUlUX05FV19DUllQVG89bm8KKyAgYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPW5vCiAKIGZpCiAKQEAgLTI2MDM1LDI3ICsxOTE5NSwxMjE4IEBACiAKIAogICAgIGlmIHRlc3QgeWVzID0gJGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVDsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbmV3IE1JVCBjcnlwdG8gQVBJIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5ldyBNSVQgY3J5cHRvIEFQSSIgPiY2Ci0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQgMQotX0FDRU9GCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbmV3IE1JVCBjcnlwdG8gQVBJIiA+JjUKKyRhc19lY2hvICJuZXcgTUlUIGNyeXB0byBBUEkiID4mNjsgfQorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQgMSIgPj5jb25mZGVmcy5oCiAKICAgICAgIGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KIAlMSUJTPSIkTElCUyAtbGs1Y3J5cHRvIgogICAgICAgZmkKICAgICBlbHNlCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBvbGQgTUlUIGNyeXB0byBBUEkiID4mNQotZWNobyAiJHtFQ0hPX1R9b2xkIE1JVCBjcnlwdG8gQVBJIiA+JjYKLWZpCi0KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBvbGQgTUlUIGNyeXB0byBBUEkiID4mNQorJGFzX2VjaG8gIm9sZCBNSVQgY3J5cHRvIEFQSSIgPiY2OyB9CiAgICAgZmkKKyAgICBmb3IgYWNfZnVuYyBpbiBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAia3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5IiAiYWNfY3ZfZnVuY19rcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfa3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5IiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfS1JCNV9BVVRIX0NPTl9HRVRTRU5EU1VCS0VZIDEKK19BQ0VPRgorCitmaQorZG9uZQorCiAgIGZpCiBkb25lCiAKIG5ld193aXRoX3NlY3VyaXR5PSRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5CiAKICMKKyMgRGV0ZWN0IGxtX3NlbnNvcnMgdmVyc2lvbgorIworaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID0gInh5ZXMiOyB0aGVuCisgICAgYWNfZm5fY19jaGVja19kZWNsICIkTElORU5PIiAic2Vuc29yc19nZXRfYWxsX3N1YmZlYXR1cmVzIiAiYWNfY3ZfaGF2ZV9kZWNsX3NlbnNvcnNfZ2V0X2FsbF9zdWJmZWF0dXJlcyIgIiNpbmNsdWRlIDxzZW5zb3JzL3NlbnNvcnMuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGF2ZV9kZWNsX3NlbnNvcnNfZ2V0X2FsbF9zdWJmZWF0dXJlcyIgPSB4eWVzOyB0aGVuIDoKKyAgYWNfaGF2ZV9kZWNsPTEKK2Vsc2UKKyAgYWNfaGF2ZV9kZWNsPTAKK2ZpCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ERUNMX1NFTlNPUlNfR0VUX0FMTF9TVUJGRUFUVVJFUyAkYWNfaGF2ZV9kZWNsCitfQUNFT0YKK2lmIHRlc3QgJGFjX2hhdmVfZGVjbCA9IDE7IHRoZW4gOgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9TRU5TT1JTX1YzIDEiID4+Y29uZmRlZnMuaAorCitmaQorCitmaQorCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCisjCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgbGlicmFyaWVzIHRoYXQgYXJlIHJ1bgorIyBiZWZvcmUgdGhlIGFnZW50IG1vZHVsZSB0ZXN0cy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjCisjICAgUlBNIGNoZWNrcworIworIyMKK2ZvciBhY19oZWFkZXIgaW4gcnBtL3JwbWxpYi5oIHJwbS9oZWFkZXIuaAorZG8gOgorICBhc19hY19IZWFkZXI9YCRhc19lY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiJGFjX2hlYWRlciIgIiRhc19hY19IZWFkZXIiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfSGVhZGVyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKK2FjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJycG0vcnBtbGliLmgiICJhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2giID0geHllczsgdGhlbiA6CisgIHJwbWxpYl9oPXllcworZWxzZQorICBycG1saWJfaD1ubworZmkKKworCithY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicnBtL2hlYWRlci5oIiAiYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oIiA9IHh5ZXM7IHRoZW4gOgorICBycG1oZWFkZXJfaD15ZXMKK2Vsc2UKKyAgcnBtaGVhZGVyX2g9bm8KK2ZpCisKKworCitpZiB0ZXN0ICJ4JHJwbWhlYWRlcl9oIiA9ICJ4bm8iIC1vICJ4JHJwbWxpYl9oIiA9ICJ4bm8iIDsgdGhlbgorICBpZiB0ZXN0ICJ4JHdpdGhfcnBtIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGZpbmQgZWl0aGVyIHRoZSBSUE0gaGVhZGVyIGZpbGVzIG5lZWRlZCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgUlBNIHN1cHBvcnQiICIkTElORU5PIiA1CisgIGVsc2UKKyAgICB3aXRoX3JwbT1ubworICBmaQorZmkKKworIworIyBycG0gbGlicmFyaWVzIG9ubHkgbmVlZGVkIGZvciB0aGUgaG9zdCByZXNvdXJjZXMgbWliIHNvZnR3YXJlCisjIGluc3RhbGxlZCB0YWJsZXMgKG9uIGxpbnV4IGluIHBhcnRpY3VsYXIpCisjCitpZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIjsgdGhlbgorICAjIEFSRy4gIFJQTSBpcyBhIHJlYWwgcGFpbi4KKyAgIyBGV0lXIGxpYnJwbS5sYSwgbGlicnBtaW8ubGEsIGFuZCBsaWJwb3B0LmxhIGhhdmUgY29ycmVjdCBkZXBlbmRlbmNpZXMuCisgIF9ycG1saWJzPSIiCisKKyAgIyBycG0tNC4wLnggbmVlZHMgcnBtaW8uCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcnBtR2V0UGF0aCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJwbUdldFBhdGguLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3JwbUdldFBhdGhfX3JwbWxpYnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJF9ycG1saWJzIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gJExNSUJMSUJTICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcnBtR2V0UGF0aCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJwbUdldFBhdGggKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcnBtaW8gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJwbUdldFBhdGggKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBycG1HZXRQYXRoICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX3JwbUdldFBhdGhfX3JwbWxpYnM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3JwbUdldFBhdGhfX3JwbWxpYnMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcnBtR2V0UGF0aF9fcnBtbGlicyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcnBtR2V0UGF0aF9fcnBtbGlic30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcnBtR2V0UGF0aF9fcnBtbGlic30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBfcnBtbGlicz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKKworICAjIHJwbS00LjAuMyBsaWJycG1kYiBhY3R1YWxseSBjb250YWlucyB3aGF0IHdlIG5lZWQuCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcnBtZGJPcGVuIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgcnBtZGJPcGVuLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19ycG1kYk9wZW5fX3JwbWxpYnMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJF9ycG1saWJzIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gJExNSUJMSUJTICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcnBtZGJPcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gcnBtZGJPcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHJwbWRiIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBycG1kYk9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBycG1kYk9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcnBtZGJPcGVuX19ycG1saWJzPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19ycG1kYk9wZW5fX3JwbWxpYnMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcnBtZGJPcGVuX19ycG1saWJzIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19ycG1kYk9wZW5fX3JwbWxpYnN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3JwbWRiT3Blbl9fcnBtbGlic30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBfcnBtbGlicz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKKyAgIyBub3cgY2hlY2sgZm9yIHJwbSB1c2luZyB0aGUgYXBwcm9wcmlhdGUgbGlicmFyaWVzLgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJwbVJlYWRDb25maWdGaWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHJwbVJlYWRDb25maWdGaWxlcy4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfcnBtUmVhZENvbmZpZ0ZpbGVzX19ycG1saWJzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRfcnBtbGlicyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICRMTUlCTElCUyAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJwbVJlYWRDb25maWdGaWxlcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJwbVJlYWRDb25maWdGaWxlcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBycG0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHJwbVJlYWRDb25maWdGaWxlcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHJwbVJlYWRDb25maWdGaWxlcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19ycG1SZWFkQ29uZmlnRmlsZXNfX3JwbWxpYnM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3JwbVJlYWRDb25maWdGaWxlc19fcnBtbGlicyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19ycG1SZWFkQ29uZmlnRmlsZXNfX3JwbWxpYnMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3JwbVJlYWRDb25maWdGaWxlc19fcnBtbGlic30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfcnBtUmVhZENvbmZpZ0ZpbGVzX19ycG1saWJzfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIF9ycG1saWJzPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0xJQlJQTSAxIiA+PmNvbmZkZWZzLmgKKworICAgIExNSUJMSUJTPSIkX3JwbWxpYnMgJExNSUJMSUJTIgorCisKKyBmaQorCisKKyAgIyBycG0gNC42IGhhcyBpbmNvbXBhdGlibGUgQVBJLCB0dXJuIG9uIHRoZSBsZWdhY3kgb25lCisgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgImhlYWRlckdldEVudHJ5IiAiYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5IiAiI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KKworIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnkiID0geHllczsgdGhlbiA6CisgIDoKK2Vsc2UKKworJGFzX2VjaG8gIiNkZWZpbmUgX1JQTV80XzRfQ09NUEFUIC8qKi8iID4+Y29uZmRlZnMuaAorCitmaQorCitmaQorCisjCisjIGdldGZzc3RhdC9nZXR2ZnNzdGF0CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0ZnNzdGF0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0ZnNzdGF0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9nZXRmc3N0YXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRmc3N0YXQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnZXRmc3N0YXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgbmJ1dGlsOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2dldGZzc3RhdD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2dldGZzc3RhdCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfZ2V0ZnNzdGF0Kzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfZ2V0ZnNzdGF0PW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZ2V0ZnNzdGF0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2dldGZzc3RhdCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRmc3N0YXQKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworZm9yIGFjX2Z1bmMgaW4gZ2V0ZnNzdGF0CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGZzc3RhdCIgImFjX2N2X2Z1bmNfZ2V0ZnNzdGF0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGZzc3RhdCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVEZTU1RBVCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworZm9yIGFjX2Z1bmMgaW4gZ2V0dmZzc3RhdAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXR2ZnNzdGF0IiAiYWNfY3ZfZnVuY19nZXR2ZnNzdGF0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldHZmc3N0YXQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9HRVRWRlNTVEFUIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisjIGdldG1udGVudCBpcyBpbiB0aGUgc3RhbmRhcmQgQyBsaWJyYXJ5IG9uIFVOSUNPUywgaW4gLWxzdW4gb24gSXJpeCA0LAorIyAtbHNlcSBvbiBEeW5peC9QVFgsIC1sZ2VuIG9uIFVuaXh3YXJlLgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldG1udGVudCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldG1udGVudC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfZ2V0bW50ZW50Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZ2V0bW50ZW50ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZ2V0bW50ZW50ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIHN1biBzZXEgZ2VuOyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2dldG1udGVudD0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2dldG1udGVudCs6fSBmYWxzZTsgdGhlbiA6CisgIGJyZWFrCitmaQorZG9uZQoraWYgJHthY19jdl9zZWFyY2hfZ2V0bW50ZW50Kzp9IGZhbHNlOyB0aGVuIDoKKworZWxzZQorICBhY19jdl9zZWFyY2hfZ2V0bW50ZW50PW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZ2V0bW50ZW50IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2dldG1udGVudCIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRtbnRlbnQKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKyAgYWNfY3ZfZnVuY19nZXRtbnRlbnQ9eWVzCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUTU5URU5UIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGFjX2N2X2Z1bmNfZ2V0bW50ZW50PW5vCitmaQorCisKKworIworIyBraW5mb19nZXRfY3B1cworIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGtpbmZvX2dldF9jcHVzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga2luZm9fZ2V0X2NwdXMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga2luZm9fZ2V0X2NwdXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBraW5mb19nZXRfY3B1cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgorZm9yIGFjX2xpYiBpbiAnJyBraW5mbzsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cz0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9raW5mb19nZXRfY3B1cys6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2tpbmZvX2dldF9jcHVzPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXMiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfa2luZm9fZ2V0X2NwdXMKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworZm9yIGFjX2Z1bmMgaW4ga2luZm9fZ2V0X2NwdXMKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAia2luZm9fZ2V0X2NwdXMiICJhY19jdl9mdW5jX2tpbmZvX2dldF9jcHVzIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2tpbmZvX2dldF9jcHVzIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfS0lORk9fR0VUX0NQVVMgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKworIworIyBkaXNrSU9MQXggcmVxdWlyZXMgZXhwIHdoaWNoIG1heSByZXF1aXJlIC1sbQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGV4cCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGV4cC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfZXhwKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZXhwICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZXhwICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIG07IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfZXhwPSRhY19yZXMKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQKKyAgaWYgJHthY19jdl9zZWFyY2hfZXhwKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9leHArOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9leHA9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9leHAiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZXhwIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2V4cAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgorCitmaQorCisKKyMKKyMgICBsaWJrdm0KKyMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBrdm1fcmVhZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9yZWFkLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19rdm1fcmVhZF9MQUdFTlRMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMQUdFTlRMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX3JlYWQgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fcmVhZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBrdm0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9yZWFkICgpOworaW50CittYWluICgpCit7CityZXR1cm4ga3ZtX3JlYWQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfa3ZtX3JlYWRfTEFHRU5UTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfa3ZtX3JlYWRfTEFHRU5UTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19rdm1fcmVhZF9MQUdFTlRMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fcmVhZF9MQUdFTlRMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fcmVhZF9MQUdFTlRMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExBR0VOVExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisKKyBmaQorCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3ZtX29wZW5maWxlcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9vcGVuZmlsZXMuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2t2bV9vcGVuZmlsZXNfTEFHRU5UTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTEFHRU5UTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9vcGVuZmlsZXMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrdm1fb3BlbmZpbGVzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGt2bSA7IGRvCisgICAgICAgICAgICAgIExJQlM9Ii1sJHtuZXRzbm1wX2N1cl9saWJ9ICR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICAgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIga3ZtX29wZW5maWxlcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9vcGVuZmlsZXMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfa3ZtX29wZW5maWxlc19MQUdFTlRMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19rdm1fb3BlbmZpbGVzX0xBR0VOVExJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfa3ZtX29wZW5maWxlc19MQUdFTlRMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rdm1fb3BlbmZpbGVzX0xBR0VOVExJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9vcGVuZmlsZXNfTEFHRU5UTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMQUdFTlRMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9nZXRwcm9jcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9nZXRwcm9jcy4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2NzX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9nZXRwcm9jcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9nZXRwcm9jcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBrdm0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9nZXRwcm9jcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9nZXRwcm9jcyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvY3NfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jc19MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvY3NfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jc19MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2NzX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9nZXRwcm9jMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9nZXRwcm9jMi4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2MyX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9nZXRwcm9jMiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9nZXRwcm9jMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBrdm0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9nZXRwcm9jMiAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9nZXRwcm9jMiAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvYzJfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jMl9MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0cHJvYzJfTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRwcm9jMl9MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHByb2MyX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9nZXRzd2FwaW5mbyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGt2bV9nZXRzd2FwaW5mby4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9nZXRzd2FwaW5mbyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9nZXRzd2FwaW5mbyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBrdm0gOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGt2bV9nZXRzd2FwaW5mbyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGt2bV9nZXRzd2FwaW5mbyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm9fTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2t2bV9nZXRzd2FwaW5mb19MTUlCTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19rdm1fZ2V0c3dhcGluZm9fTE1JQkxJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2t2bV9nZXRzd2FwaW5mb19MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvX0xNSUJMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKworCisgZmkKKworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExBR0VOVExJQlMgJExNSUJMSUJTICRMSUJTIgorZm9yIGFjX2Z1bmMgaW4ga3ZtX29wZW5maWxlcyBrdm1fZ2V0cHJvY3Mga3ZtX2dldHByb2MyIGt2bV9nZXRzd2FwaW5mbworZG8gOgorICBhc19hY192YXI9YCRhc19lY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgIiRhY19mdW5jIiAiJGFzX2FjX3ZhciIKK2lmIGV2YWwgdGVzdCBcInhcJCIkYXNfYWNfdmFyIlwiID0geCJ5ZXMiOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBgJGFzX2VjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK0xJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKworIworIyAgIGR5bmFtaWMgbW9kdWxlIHN1cHBvcnQKKyMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkbG9wZW4iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBkbG9wZW4uLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX2Rsb3Blbl9MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAkTEFHRU5UTElCUyAkTFNOTVBMSUJTICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgZGxvcGVuICgpOworaW50CittYWluICgpCit7CityZXR1cm4gZGxvcGVuICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGRsIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkbG9wZW4gKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbG9wZW4gKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfZGxvcGVuX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19kbG9wZW5fTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfZGxvcGVuX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19kbG9wZW5fTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2Rsb3Blbl9MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKworIGZpCisKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMTUlCTElCUyAkTEFHRU5UTElCUyAkTFNOTVBMSUJTICRMSUJTIgorZm9yIGFjX2Z1bmMgaW4gZGxvcGVuCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImRsb3BlbiIgImFjX2N2X2Z1bmNfZGxvcGVuIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2Rsb3BlbiIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0RMT1BFTiAxCitfQUNFT0YKKworZmkKK2RvbmUKKworTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorCisjIC0qLSBhdXRvY29uZiAtKi0KKyMKICMgZ2VuZXJhdGUgZW1wdHkgZmlsZXMKICMKICMgQ3JlYXRlIGluY2x1ZGUgZmlsZSBsaXN0IGZvciBzbm1wX3ZhcnMuaCB0byB1c2UuCkBAIC0yNjA4MSwxMSArMjA0MzIsMTEgQEAKICMKICMgRG8gaGFpcnkgYWdlbnQgbW9kdWxlIHByb2Nlc3NpbmcuCiAjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyBtaWIgbW9kdWxlcyB0byB1c2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYW5kIGNvbmZpZ3VyaW5nIG1pYiBtb2R1bGVzIHRvIHVzZS4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyBtaWIgbW9kdWxlcyB0byB1c2UiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGFuZCBjb25maWd1cmluZyBtaWIgbW9kdWxlcyB0byB1c2UuLi4gIiA+JjY7IH0KIAogIyBzZXQgdXAgdGhlIENQUCBjb21tYW5kCi1NT0RVTEVDUFA9IiRDUFAgJFBBUlRJQUxUQVJHRVRGTEFHUyAtSSR7c3JjZGlyfS9pbmNsdWRlIC1JJHtzcmNkaXJ9L2FnZW50L21pYmdyb3VwIgorTU9EVUxFQ1BQPSIkQ1BQICRQQVJUSUFMVEFSR0VURkxBR1MgJENQUEZMQUdTIC1ETkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HIC1JJHtzcmNkaXJ9L2luY2x1ZGUgLUkke3NyY2Rpcn0vYWdlbnQvbWliZ3JvdXAiCiBpZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCiAgIE1PRFVMRUNQUD0iJE1PRFVMRUNQUCAtRE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUyIKIGZpCkBAIC0yNjA5Myw4ICsyMDQ0NCw4IEBACiBtb2R1bGVfbGlzdD0iIgogbWliX21vZHVsZV9saXN0PSIiCiBhZ2VudF9tb2R1bGVfbGlzdD0iIgotbmV3X3dpdGhfbWliX21vZHVsZXM9YGVjaG8gJHdpdGhfbWliX21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLW5ld193aXRoX291dF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9vdXRfbWliX21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKK25ld193aXRoX21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX21pYl9tb2R1bGVzIHwgJFNFRCAncy8sLyAvZzsnYAorbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX291dF9taWJfbW9kdWxlcyB8ICRTRUQgJ3MvLC8gL2c7J2AKIAogIyBzZXQgdXAgaW5pdGlhbCBtb2R1bGUgbGlzdAogbmV3X21vZHVsZV9saXN0PSIkbmV3X3dpdGhfbWliX21vZHVsZXMgZGVmYXVsdF9tb2R1bGVzIgpAQCAtMjYxMTYsMjUgKzIwNDY3LDIzIEBACiAjIHJlbW92ZSBtb2R1bGVzIHRoYXQgd2VyZSBleHBsaWNpdGx5IGV4Y2x1ZGVkCiBmb3IgaSBpbiAkdGVzdF9tb2R1bGVzCiAgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIGlzIGJvdGggaW5jbHVkZWQgYW5kIGV4Y2x1ZGVkLiIKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGNvbmZsaWN0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBjb25mbGljdCIgPiYyO30KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgY29uZmxpY3QiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBjb25mbGljdCIgPiYyO30KICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2VyIHdpdGggICAgOiAkd2l0aF9taWJfbW9kdWxlcyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzZXIgd2l0aCAgICA6ICR3aXRoX21pYl9tb2R1bGVzIiA+JjI7fQotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogZmluYWwgd2l0aCAgIDogJG5ld19tb2R1bGVfbGlzdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGZpbmFsIHdpdGggICA6ICRuZXdfbW9kdWxlX2xpc3QiID4mMjt9Ci0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB1c2VyIHdpdGhvdXQgOiAkd2l0aF9vdXRfbWliX21vZHVsZXMiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1c2VyIHdpdGhvdXQgOiAkd2l0aF9vdXRfbWliX21vZHVsZXMiID4mMjt9Ci0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBmaW5hbCB3aXRob3V0OiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogZmluYWwgd2l0aG91dDogJG5ld193aXRoX291dF9taWJfbW9kdWxlcyIgPiYyO30KLSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRtaWJfY2ZnX21zZyIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkbWliX2NmZ19tc2ciID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNlciB3aXRoICAgIDogJHdpdGhfbWliX21vZHVsZXMiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogdXNlciB3aXRoICAgIDogJHdpdGhfbWliX21vZHVsZXMiID4mMjt9CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGZpbmFsIHdpdGggICA6ICRuZXdfbW9kdWxlX2xpc3QiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogZmluYWwgd2l0aCAgIDogJG5ld19tb2R1bGVfbGlzdCIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdXNlciB3aXRob3V0IDogJHdpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHVzZXIgd2l0aG91dCA6ICR3aXRoX291dF9taWJfbW9kdWxlcyIgPiYyO30KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogZmluYWwgd2l0aG91dDogJG5ld193aXRoX291dF9taWJfbW9kdWxlcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBmaW5hbCB3aXRob3V0OiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzIiA+JjI7fQorICAgICAgYXNfZm5fZXJyb3IgJD8gIiRtaWJfY2ZnX21zZyIgIiRMSU5FTk8iIDUKICAgICBlbHNlCi0gICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkbWliX2NmZ19tc2cgSXQgd2lsbCBiZSBleGNsdWRlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyBJdCB3aWxsIGJlIGV4Y2x1ZGVkIiA+JjI7fQorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkbWliX2NmZ19tc2cgSXQgd2lsbCBiZSBleGNsdWRlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkbWliX2NmZ19tc2cgSXQgd2lsbCBiZSBleGNsdWRlZCIgPiYyO30KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgICoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZyBJdCBoYXMgYmVlbiBleGNsdWRlZC4KQEAgLTI2MTQ2LDggKzIwNDk1LDEwIEBACiAgIGZpCiBkb25lCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRuZXdfbW9kdWxlX2xpc3QuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRuZXdfbW9kdWxlX2xpc3QuIiA+JjYKK25ld19tb2R1bGVfbGlzdD1gKGVjaG8gJG5ld19tb2R1bGVfbGlzdCB8IHRyICcgJyAnXG4nIHwgc29ydCB8IHRyICdcbicgJyAnOyBlY2hvICcnKSB8ICRTRUQgJ3MvICQvLydgCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV3X21vZHVsZV9saXN0LiIgPiY1CiskYXNfZWNobyAiJG5ld19tb2R1bGVfbGlzdC4iID4mNjsgfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIGxvb3Agb3ZlciBtb2R1bGUgbGlzdApAQCAtMjYyMTYsMTQgKzIwNTY3LDE0IEBACiAKICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgIyBmaWd1cmUgb3V0IHdoaWNoIHN1Yi1ibG9ja3MgdG8gYnVpbGQgaW4gcGFydHMKLSAgICBpZiBlY2hvICIkaiIgfCBncmVwICI9IiA7IHRoZW4KKyAgICBpZiBlY2hvICIkaiIgfCAkR1JFUCAiPSIgOyB0aGVuCiAgICAgICAgIyBidWlsZCBhIHNoYXJlZCBvYmplY3QgZmlsZQogICAgICAgICMgZm9ybWF0OiBzb2ZpbGVuYW1lPW1vZHVsZTE6bW9kdWxlMgogICAgICAgICMgWFhYOiBjdXJyZW50bHkgZG9lc24ndCBkbyB0aGlzCi0gICAgICAgZGxfbmFtZT1gZWNobyAkaiB8IHNlZCAncy89LiovLydgCisgICAgICAgZGxfbmFtZT1gZWNobyAkaiB8ICRTRUQgJ3MvPS4qLy8nYAogICAgICAgIGRsX25hbWVzPSIkZGxfbmFtZXMgJGRsX25hbWUiCi0gICAgICAgZGxfb2JqZWN0cz1gZWNobyAkaiB8IHNlZCAncy8uKj0vLydgCi0gICAgICAgbW9kdWxlX3N1Ymxpc3Q9YGVjaG8gJGRsX29iamVjdHMgfCBzZWQgJ3MvOi8gL2cnYAorICAgICAgIGRsX29iamVjdHM9YGVjaG8gJGogfCAkU0VEICdzLy4qPS8vJ2AKKyAgICAgICBtb2R1bGVfc3VibGlzdD1gZWNobyAkZGxfb2JqZWN0cyB8ICRTRUQgJ3MvOi8gL2cnYAogICAgICAgIHNhdmVkX3N1Ymxpc3Q9IiIKICAgICAgICBzYXZlZF9zdWJsaXN0X2NvZGU9IiIKICAgICAgICBvdXRwdXRfdG89c2VwYXJhdGUKQEAgLTI2MjYzLDExICsyMDYxNCw4IEBACiAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICMgYnVpbGQgYSBwc2V1ZG8gaW5jbHVkZSBoZWFkZXIgdGhhdCBpbmNsdWRlcyBjdXJyZW50IGNvbmZpZyBhbmQKICAgICAjIHN5c3RlbSBzeW1ib2xzOgotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgIHJtIC1mIGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogI2luY2x1ZGUgTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFCkBAIC0yNjI4MSwxMCArMjA2MjksMTIgQEAKICAgICAjICAgICAtIG1pYl9tb2R1bGUgICA9PiBsaWJuZXRzbm1wbWlicyAgIChkZWZhdWx0KQogICAgICMgICAgIC0gYWdlbnRfbW9kdWxlID0+IGxpYm5ldHNubXBhZ2VudAogICAgICMKKwogICAgIG1vZHVsZV90eXBlPW1pYl9tb2R1bGUKICAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5oOyB0aGVuCiAKLSAgICAgIG1vZHVsZV90eXBlPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19iZWxvbmdzX2luIHwgc2VkICdzQC4qY29uZmlnX2JlbG9uZ3NfaW4oXChbXildKlwpKS4qQFwxQCdgCisgICAgICBtb2R1bGVfdHlwZT1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3NALipjb25maWdfYmVsb25nc19pbihcKFteKV0qXCkpLipAXDFAcCdgCiAKICAgICBmaQogICAgIGlmIHRlc3QgIngkbW9kdWxlX3R5cGUiID0gIngiIDsgdGhlbgpAQCAtMjYzMDEsNyArMjA2NTEsNyBAQAogICAgIGRibGZpeD0iIgogICAgIGZvciBkbHRlc3QgaW4gJGRsX25hbWVzIDsgZG8KICAgICAgIGV2YWwgbW9kX2ZpbGVzPSJcIlwkZGxfJHtkbHRlc3R9X2ZpbGVzXCIiCi0gICAgICBpZiBlY2hvICIgJG1vZF9maWxlcyAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIGlmIGVjaG8gIiAkbW9kX2ZpbGVzICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KICAgICAgICAgIyBzb21lIGRsbCBtb2R1bGUgaGFzIGFscmVhZHkgc2VlbiB0aGlzLCB1bmxvYWQgaXQgZnJvbSB0aGF0IGxpc3QKICAgICAgICAgIyBhbmQgaW5jbHVkZSBpdCBpbiB0aGUgY29yZSAoYWdhaW4pCiAKQEAgLTI2MzEwLDcgKzIwNjYwLDcgQEAKICAgZmkKIAogCi0gICAgICAgIG1vZF9maWxlcz1gZWNobyAiICRtb2RfZmlsZXMgIiB8IHNlZCAic0AgJGkgQEAiYAorICAgICAgICBtb2RfZmlsZXM9YGVjaG8gIiAkbW9kX2ZpbGVzICIgfCAkU0VEICJzQCAkaSBAQCJgCiAgICAgICAgIGRibGZpeD0iX19YWFhfXyIKICAgICAgICAgZXZhbCAiZGxfJHtkbHRlc3R9X2ZpbGVzPVwiJG1vZF9maWxlc1wiIgogCkBAIC0yNjMzMiw3ICsyMDY4Miw3IEBACiAJIyBBZGRpbmcgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgb3JkZXJlZCBzcG90IHdvdWxkIGJlIGEKIAkjIG5pZ2h0bWFyZS4gIE9rLCB3ZSdyZSBhbHJlYWR5IGluIG5pZ2h0bWFyZSBjb2RlIHNvIHRoYXQKIAkjIHdvbHVkIGhhdmUgdG8gYmUgYSBuaWdodC10ZXJyb3IuCi0gICAgICAgIG1ubT1gZWNobyAkaSB8IHNlZCAncy8uKlwvLy87cy9cLmMkLy87J2AKKyAgICAgICAgbW5tPWBlY2hvICRpIHwgJFNFRCAncy8uKlwvLy87cy9cLmMkLy87J2AKIAlvdXRwdXRfaW5pdHNfdG1wPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luaXRzLmgiCiAJZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHNfdG1wCiAgICAgICAgICMgWFhYOiBldmVuIHdvcnNlLCB3ZSBsb29zZSB3aGV0aGVyIHRoZSBoZWFkZXIgaXMgbmVlZGVkIG9yIG5vdC4KQEAgLTI2MzUxLDE0ICsyMDcwMSwxNCBAQAogICBmaQogCiAKLSAgICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KICAgICBlY2hvICIkaSB3YXMgZXhjbHVkZWQiCiAgIGZpCiAKIAotICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KICAgICBlY2hvICIkaSBhbHJlYWR5IHRlc3RlZCIKQEAgLTI2Mzg0LDcgKzIwNzM0LDkgQEAKICAgICAgIAkjCiAgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBjb25mbGljdHMKICAgICAgICAgIwotCW5ld19saXN0X2V4Y2w9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2V4Y2x1ZGUgfCBzZWQgJ3MvLipjb25maWdfZXhjbHVkZShcKC4qXCkpLiovXDEvJ2AKKworICAgICAgICBuZXdfbGlzdF9leGNsPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfZXhjbHVkZShcKC4qXCkpLiovXDEvcCdgCiAJaWYgdGVzdCAieCRuZXdfbGlzdF9leGNsIiAhPSAieCI7IHRoZW4KIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCkBAIC0yNjM5NCwxNyArMjA3NDYsMTUgQEAKIAogCSAgZm9yIGogaW4gJG5ld19saXN0X2V4Y2wKIAkgICAgZG8KLQkgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X21pYl9tb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICIgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbWliX21vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgogICAgICAgICAgICAgICBtaWJfY2ZnX21zZz0ibWliIG1vZHVsZSAnJGknIGV4Y2x1ZGVzIG1vZHVsZSAnJGonIGJ1dCBhbm90aGVyIG1vZHVsZSByZXF1aXJlcyBpdCIKLSAgICAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CisgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQogICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0JICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkbWliX2NmZ19tc2ciID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJG1pYl9jZmdfbXNnIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisJICAgICAgICBhc19mbl9lcnJvciAkPyAiJG1pYl9jZmdfbXNnIiAiJExJTkVOTyIgNQogICAgICAgICAgICAgICBlbHNlCi0JICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mMjt9CisJICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkbWliX2NmZ19tc2ciID4mMjt9CiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICAqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2cKQEAgLTI2NDMwLDE4ICsyMDc4MCwyMCBAQAogICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHJlcXVpcmVtZW50cwogICAgICAgICAjCiAKLSAgICAgICAgbmV3X2xpc3RfYXJjaD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfYXJjaF9yZXF1aXJlIHwgc2VkICdzLy4qY29uZmlnX2FyY2hfcmVxdWlyZSggKlwoW14gXSpcKSAqLCAqXChbXiBdKlwpICopLiovXDEteGFyY2h4LVwyLydgCisKKyAgICAgICAgbmV3X2xpc3RfYXJjaD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2FyY2hfcmVxdWlyZSggKlwoW14gXSpcKSAqLCAqXChbXiBdKlwpICopLiovXDEteGFyY2h4LVwyL3AnYAogCiAJaWYgdGVzdCAieCRuZXdfbGlzdF9hcmNoIiAhPSAieCI7IHRoZW4KICAgICAgICAgICBmb3IgaiBpbiAkbmV3X2xpc3RfYXJjaAogCSAgICBkbwotCSAgICBhcmNodGVzdD1gZWNobyAkaiB8IHNlZCAncy8teGFyY2h4LS4qLy8nYAorCSAgICBhcmNodGVzdD1gZWNobyAkaiB8ICRTRUQgJ3MvLXhhcmNoeC0uKi8vJ2AKIAkgICAgIyB0YXJnZXRfb3MgbWF5IGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGEgI2RlZmluZSBvZiAxLi4uCiAJICAgIGlmIHRlc3QgIngkYXJjaHRlc3QiID0gIngxIiAtbyAieCR0YXJnZXRfb3MiID0gIngkYXJjaHRlc3QiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieCRhcmNodGVzdCI7IHRoZW4KLQkgICAgICBuZXdfbGlzdD0iJG5ld19saXN0IGBlY2hvICRqIHwgc2VkICdzLy4qLXhhcmNoeC0vLydgIgorCSAgICAgIG5ld19saXN0PSIkbmV3X2xpc3QgYGVjaG8gJGogfCAkU0VEICdzLy4qLXhhcmNoeC0vLydgIgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KLSAgICBlY2hvICIgJGkgcmVxdWlyZWQgYWRkaW5nIGFyY2ggZmlsZXM6IGBlY2hvICRqIHwgc2VkICdzLy4qLXhhcmNoeC0vLydgIgorICAgIGVjaG8gIiAkaSByZXF1aXJlZCBhZGRpbmcgYXJjaCBmaWxlczogYGVjaG8gJGogfCAkU0VEICdzLy4qLXhhcmNoeC0vLydgIgogICBmaQogCiAKQEAgLTI2NDU2LDEyICsyMDgwOCw1OSBAQAogCiAKICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoKGJhc2UsIHZlcnNpb24sIHZlcnNpb24tbW9kdWxlcywgLi4uKSkKKyAgICAgIAkjICAtIGxpc3RzIGFsdGVybmF0aXZlIG1vZHVsZXMgdXNlZCBmcm9tIGRpZmZlcmVudCB2ZXJzaW9ucy4KKyAgICAgICAgIworCisgICAgICAgIG5ld19saXN0X2FsdDM9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICRBV0sgJworICAgICAgICAgICAgICAgIEJFR0lOIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIiciJGVuYWJsZV9uZXdfZmVhdHVyZXMiJyIgPT0gInllcyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9Im1heCI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIiciJGVuYWJsZV9vbGRfZmVhdHVyZXMiJyIgPT0gInllcyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9Im1heC1sZXNzIjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJtYXgtbGVzcy1lcXVhbCI7CisgICAgICAgICAgICAgICAgICAgIEZTID0gIi4iOworICAgICAgICAgICAgICAgICAgICBzcGxpdCgiJyIkd2l0aF9mZWF0dXJlc19vZiInIiwgYSk7CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249c3ByaW50ZigiJTAzZCUwM2QlMDNkJTAzZCIsIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvY29uZmlnX3ZlcnNpb25fcmVxdWlyZS8geworICAgICAgICAgICAgICAgICAgICBnc3ViKCJeLipjb25maWdfdmVyc2lvbl9yZXF1aXJlICpcXFxcKFxcXFwoIiwgIiIpOworICAgICAgICAgICAgICAgICAgICBnc3ViKCJcXFxcKVxcXFwpLiokIiwgIiIpOworICAgICAgICAgICAgICAgICAgICBnc3ViKCIsICoiLCAiLCIpOworICAgICAgICAgICAgICAgICAgICBGUyA9ICIsIjsKKyAgICAgICAgICAgICAgICAgICAgbiA9IHNwbGl0KCQwLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgRlMgPSAiLiI7CisgICAgICAgICAgICAgICAgICAgIGFjdHZlciA9ICIwMDAwMDAwMDAwMDAiOworICAgICAgICAgICAgICAgICAgICBhY3RzdHIgPSBhWzFdOworICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPCBuOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0KGFbaV0sIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVyPXNwcmludGYoIiUwM2QlMDNkJTAzZCUwM2QiLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJ2ZXIgPiBhY3R2ZXIgJiYgKG1ldGhvZCAhPSAibWF4LWxlc3MiIHx8IGN1cnZlciA8IHZlcnNpb24pICYmIChtZXRob2QgIT0gIm1heC1sZXNzLWVxdWFsIiB8fCBjdXJ2ZXIgPD0gdmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R2ZXIgPSBjdXJ2ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0c3RyID0gYVtpICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMiLCBhY3RzdHIpOworICAgICAgICAgICAgICAgIH0nYAorCisgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KKyAgICBlY2hvICIgJGkgcmVxdWlyZWQgdmVyc2lvbmVkIGZlYXR1cmVzOiAkbmV3X2xpc3RfYWx0MyIKKyAgZmkKKworCisgICAgICAgIG5ld19saXN0PSIke25ld19saXN0fSR7bmV3X2xpc3RfYWx0M30iCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgCSMgbWFjcm86IGNvbmZpZ19yZXF1aXJlKG1vZHVsZXMpCiAgICAgICAJIyAgLSBsaXN0cyBtb2R1bGVzIHJlcXVpcmVkIGZvciB0aGlzIG1vZHVsZQogICAgICAgICAjCiAgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBvdGhlciByZXF1aXJlZCBtb2R1bGVzCiAgICAgICAgICMKLQluZXdfbGlzdD0iJG5ld19saXN0IGAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19yZXF1aXJlIHwgc2VkICdzLy4qY29uZmlnX3JlcXVpcmUoXCguKlwpKS4qL1wxLydgIgorCisgICAgICAgIG5ld19saXN0PSIkbmV3X2xpc3QgYCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfcmVxdWlyZShcKC4qXCkpLiovXDEvcCdgIgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KICAgICBlY2hvICIgJGkgd2lsbCB0ZXN0OiAkbmV3X2xpc3QiCkBAIC0yNjQ3OCwzMCArMjA4NzcsMjYgQEAKIAogCiAJICAgIGlmIHRlc3QgISAtZiAkc3JjZGlyLyRtaWJkaXIvJGouaCAtYSAhIC1mICRzcmNkaXIvJG1pYmRpci8kai5jOyB0aGVuCi0gICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQotCSAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG1pYiBtb2R1bGUgXCIkaVwiIHJlcXVpcmVzIG1vZHVsZSBcIiRqXCIgYnV0ICRqLmggb3IgJGouYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IG1pYiBtb2R1bGUgXCIkaVwiIHJlcXVpcmVzIG1vZHVsZSBcIiRqXCIgYnV0ICRqLmggb3IgJGouYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQorCSAgICAgIGFzX2ZuX2Vycm9yICQ/ICJtaWIgbW9kdWxlIFwiJGlcIiByZXF1aXJlcyBtb2R1bGUgXCIkalwiIGJ1dCAkai5oIG9yICRqLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpciIgIiRMSU5FTk8iIDUKKwkgICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCiAJICAgICAgaWYgdGVzdCAieCRpIiAhPSAieGRlZmF1bHRfbW9kdWxlcyIgOyB0aGVuCiAgICAgICAgICAgICAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyByZXF1aXJlcyBtb2R1bGUgJyRqJyBidXQgc29tZW9uZSB0b2xkIG1lIHRvIGNvbXBpbGUgd2l0aG91dCBpdCIKLSAgICAgICAgICAgICAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KKyAgICAgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KICAgICAgICAgICAgICAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkbWliX2NmZ19tc2ciID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogJG1pYl9jZmdfbXNnIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiJG1pYl9jZmdfbXNnIiAiJExJTkVOTyIgNQogICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiYyO30KKyAgICAgICAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJG1pYl9jZmdfbXNnIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRtaWJfY2ZnX21zZyIgPiYyO30KIAogICBjYXQgPj4gY29uZmlndXJlLXN1bW1hcnkgPDwgRU9GCiAgICoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZwogRU9GCiAKICAgICAgICAgICAgICAgICBmaQotIwkgICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKyMJICAgIGVsaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgogIyAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGogaW5jbHVkZWQgcHJldmlvdXNseSIpCiAgICAgICAgICAgICAgIGZpCiAJICAgIGVsc2UKQEAgLTI2NTIyLDE1ICsyMDkxNywxNyBAQAogICAgICAgICAjCiAgICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBtaWJzIHRvIGFkZAogICAgICAgICAjCi0JbmV3X21pYnM9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2FkZF9taWIgfCBzZWQgJ3MvLipjb25maWdfYWRkX21pYihcKC4qXCkpLiovXDEvJ2AKKworICAgICAgICBuZXdfbWlicz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19hZGRfbWliKFwoLipcKSkuKi9cMS9wJ2AKIAlpZiB0ZXN0ICJ4JG5ld19taWJzIiAhPSAieCI7IHRoZW4KIAkgICAgZm9yIGogaW4gJG5ld19taWJzCiAJCWRvCi0JCWlmIHRlc3QgInhgZWNobyA6JGRlZmF1bHRfbWliczogfCBncmVwIDokajpgIiA9ICJ4IjsgdGhlbgorCQlpZiB0ZXN0ICJ4YGVjaG8gOiRkZWZhdWx0X21pYnM6IHwgJEdSRVAgOiRqOmAiID0gIngiOyB0aGVuCiAJCSAgICBkZWZhdWx0X21pYnM9IiRkZWZhdWx0X21pYnM6JGoiCiAJCWZpCiAJCWlmIHRlc3QgLWYgJHNyY2Rpci9taWJzLyRqLnR4dDsgdGhlbgotCQkgICAgaWYgZWNobyAkZGVmYXVsdF9taWJzX2luc3RhbGwgfCBncmVwICIgJGogIiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgaWYgZWNobyAkZGVmYXVsdF9taWJzX2luc3RhbGwgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KIAkJCSAgICA6CiAJCSAgICBlbHNlCiAJCQkgICAgZGVmYXVsdF9taWJzX2luc3RhbGw9IiRkZWZhdWx0X21pYnNfaW5zdGFsbCAkai50eHQiCkBAIC0yNjU2MywxMSArMjA5NjAsMTEgQEAKICAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgICAgIyBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgY29uZmlnX2xvYWRfbWliCiAgICAgICAgICMKLSAgICAgICAgaWYgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfbG9hZF9taWIgPiAvZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQotICAgICAgCSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBcIiRpXCIgdXNlcyB0aGUgXCJjb25maWdfbG9hZF9taWJcIiBkaXJlY3RpdmUsIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBJdCBwcm9iYWJseSB3b24ndCB3b3JrLiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgXCIkaVwiIHVzZXMgdGhlIFwiY29uZmlnX2xvYWRfbWliXCIgZGlyZWN0aXZlLCB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgSXQgcHJvYmFibHkgd29uJ3Qgd29yay4iID4mMjt9CisgICAgICAgIGlmICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8ICRHUkVQIC1xIGNvbmZpZ19sb2FkX21pYjsgdGhlbgorICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQorICAgICAgCSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIFwiJGlcIiB1c2VzIHRoZSBcImNvbmZpZ19sb2FkX21pYlwiIGRpcmVjdGl2ZSwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEl0IHByb2JhYmx5IHdvbid0IHdvcmsuIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgXCIkaVwiIHVzZXMgdGhlIFwiY29uZmlnX2xvYWRfbWliXCIgZGlyZWN0aXZlLCB3aGljaCBpcyBubyBsb25nZXIgc3VwcG9ydGVkLiAgSXQgcHJvYmFibHkgd29uJ3Qgd29yay4iID4mMjt9CiAgICAgICAgIGZpICMgZ3JlcCBjb25maWdfbG9hZF9taWIKIAogICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjY1NzUsNyArMjA5NzIsOSBAQAogICAgICAgICAjICAoZ2VuZXJhbGx5IG5vdCB1c2VkIGFueSBsb25nZXI7IG9sZCBhdXRvLWxvYWQgYSAuY29uZiB0b2tlbikKICAgICAgICAgIwogCi0gICAgICAgICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX3BhcnNlX2RvdF9jb25mIHwgc2VkICdzQC4qY29uZmlnX3BhcnNlX2RvdF9jb25mKFwoW14pXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSkuKkByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcGQiLFwxLCBcMiwgXDMsIFw0KTtAJyA+PiAkbWliZGlyL21pYl9tb2R1bGVfZG90X2NvbmYuaAorCisgICAgICAgICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgJFNFRCAtbiAnc0AuKmNvbmZpZ19wYXJzZV9kb3RfY29uZihcKFteKV0qXCksICpcKFteKSxdKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCkpLipAcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXBkIixcMSwgXDIsIFwzLCBcNCk7QHAnID4+ICRtaWJkaXIvbWliX21vZHVsZV9kb3RfY29uZi5oCiAKIAogICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNjU4NCwyMCArMjA5ODMsMjIgQEAKICAgICAgICAgIwogICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgZXJyb3JzLCBvciB3YXJuaW5ncwogICAgICAgICAjCi0JZXJyb3I9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2Vycm9yIHwgc2VkICdzLy4qY29uZmlnX2Vycm9yKFwoLipcKSkuKi9cMS8nYAorCisgICAgICAgIGVycm9yPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2Vycm9yKFwoLipcKSkuKi9cMS9wJ2AKIAlpZiB0ZXN0ICJ4JGVycm9yIiAhPSAieCI7IHRoZW4KICAgICAgICAgICBlY2hvCiAgICAgICAgICAgZWNobwotICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6ICRpOiAqKiogJGVycm9yICoqKiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkaTogKioqICRlcnJvciAqKioiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgICBhc19mbl9lcnJvciAkPyAiJGk6ICoqKiAkZXJyb3IgKioqIiAiJExJTkVOTyIgNQogICAgICAgICBmaQogCiAgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgIAkjIG1hY3JvOiBjb25maWdfd2FybmluZyh3YXJuaW5nIHRleHQpCiAgICAgICAJIyAgLSB1c2VkIHRvIHNpZ25hbCBhIGNvbmZpZ3VyYXRpb24gIndhcm5pbmciIHRvIGJlIHByaW50ZWQgdG8gdGhlIHVzZXIKICAgICAgICAgIwotCXdhcm5pbmc9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX3dhcm5pbmcgfCBzZWQgJ3MvLipjb25maWdfd2FybmluZyhcKC4qXCkpLiovXDEvJ2AKKworICAgICAgICB3YXJuaW5nPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfd2FybmluZyhcKC4qXCkpLiovXDEvcCdgCiAJaWYgdGVzdCAieCR3YXJuaW5nIiAhPSAieCI7IHRoZW4KICAgICAgICAgICBhbGxfd2FybmluZ3M9IiRhbGxfd2FybmluZ3MgJHdhcm5pbmcKICIKQEAgLTI2NjA3LDcgKzIxMDA4LDcgQEAKICAgICAgICMgQ2hlY2sgZm9yIGEgLmMgZmlsZSBpZiB0aGUgLmggZGlkbid0IGV4aXN0CiAgICAgICAjCiAgICAgICBlbGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmM7IHRoZW4KLSAgICAgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiAkaSAgICAgICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgJGkgICAgICAiID4gL2Rldi9udWxsOyB0aGVuCiAKICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnID0gMTsgdGhlbgogICAgIGVjaG8gIiAgJGkgYWxyZWFkeSBpbmNsdWRlZCIKQEAgLTI2NjI5LDExICsyMTAzMCw5IEBACiAgICAgICAjIE5vIC5oIG9yIC5jID0gZXJyb3IhICAodHlwbz8pCiAgICAgICAjCiAgICAgICBlbHNlICMgbm8gJGkuaCBvciAkaS5jCi0gICAgICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjI7fQotCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IG1vZHVsZSBmaWxlcyAkaS5oIG9yICRpLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpciIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBtb2R1bGUgZmlsZXMgJGkuaCBvciAkaS5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBtaWIgbW9kdWxlIGVycm9yIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9CisJYXNfZm5fZXJyb3IgJD8gIm1vZHVsZSBmaWxlcyAkaS5oIG9yICRpLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpciIgIiRMSU5FTk8iIDUKICAgICAgIGZpICMgbm8gJGkuaAogCiAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMjY2NTAsNyArMjEwNDksNyBAQAogICAgICAgICAgIGV2YWwgImRsXyR7ZGxfbmFtZX1fZmlsZXM9XCJcJGRsXyR7ZGxfbmFtZX1fZmlsZXMgJGlcIiIKICAgICAgICAgICBzYXZlZF9zdWJsaXN0X2NvZGU9IiRzYXZlZF9zdWJsaXN0X2NvZGUgJGkiCiAgICAgICAgIGZpCi0gICAgICAgIG1ubT1gZWNobyAkaSB8IHNlZCAncy8uKlwvLy87cy9cLmMkLy87J2AKKyAgICAgICAgbW5tPWBlY2hvICRpIHwgJFNFRCAncy8uKlwvLy87cy9cLmMkLy87J2AKIAogICBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgPSAxOyB0aGVuCiAgICAgZWNobyAtZSAiXG5jaGVja2luZyAnJHNyY2Rpci8kbWliZGlyLyRpLmMnICgkbW5tL2BiYXNlbmFtZSAkaWApIEMgZmlsZSBmb3IgaW5pdC9zaHV0ZG93biIKQEAgLTI2NjU4LDEzICsyMTA1NywxMSBAQAogCiAKICAgICAgICAgaWYgdGVzdCAieCRtbm0iICE9ICJ4YGJhc2VuYW1lICRpYCI7IHRoZW4KLSAgICAgICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mMjt9Ci0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY29uZmxpY3RpbmcgbmFtZXM6ICRtbm0gIT0gXGBiYXNlbmFtZSAkaVxgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNvbmZsaWN0aW5nIG5hbWVzOiAkbW5tICE9IFxgYmFzZW5hbWUgJGlcYCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IG1pYiBtb2R1bGUgZXJyb3IiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogbWliIG1vZHVsZSBlcnJvciIgPiYyO30KKwkgICBhc19mbl9lcnJvciAkPyAiY29uZmxpY3RpbmcgbmFtZXM6ICRtbm0gIT0gXGBiYXNlbmFtZSAkaVxgIiAiJExJTkVOTyIgNQogICAgICAgICBmaQotICAgICAgICB0ZW1wX2luaXQ9YGdyZXAgaW5pdF8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jIHwgZ3JlcCAtdiBfaW5pdF8kbW5tYAorICAgICAgICB0ZW1wX2luaXQ9YCRHUkVQIGluaXRfJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyB8ICRHUkVQIC12IF9pbml0XyRtbm1gCiAJaWYgdGVzdCAieCR0ZW1wX2luaXQiICE9ICJ4IjsgdGhlbgogCiAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KQEAgLTI2Njc1LDcgKzIxMDcyLDcgQEAKICAgICAgICAgICAgIG5lZWRfaGVhZGVyPTEKIAkgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHMKIAlmaQotCWdyZXAgc2h1dGRvd25fJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyA+IC9kZXYvbnVsbAorCSRHUkVQIHNodXRkb3duXyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgPiAvZGV2L251bGwKICAgICAgICAgaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KICAgICAgICAgICAgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgogICAgICAgICAgICAgICBlY2hvIC1lICJcbmFkZGluZyBzaHV0ZG93bl8kbW5tKCkgdG8gbGlzdCIKQEAgLTI2Njk4LDggKzIxMDk1LDggQEAKICAgICAgICMgY2hlY2sgZm9yIG91dHB1dCBkaXJlY3RvcnkgKGZvciBidWlsZGluZyBvdXRzaWRlIG9mIHNvdXJjZSB0cmVlCiAgICAgICAjCiAKLSAgICAgIGlmIHRlc3QgInhgZWNobyAkaSB8IHNlZCAncy9cLy8vZzsnYCIgIT0gIngkaSI7IHRoZW4KLQltbmQ9YGVjaG8gJGkgfCBzZWQgJ3MvXC9bXi9dKiQvLzsnYAorICAgICAgaWYgdGVzdCAieGBlY2hvICRpIHwgJFNFRCAncy9cLy8vZzsnYCIgIT0gIngkaSI7IHRoZW4KKwltbmQ9YGVjaG8gJGkgfCAkU0VEICdzL1wvW14vXSokLy87J2AKIAlpZiB0ZXN0ICEgLWQgLi8kbWliZGlyLyRtbmQ7IHRoZW4KIAkgICAgbW9kdWxlX2RpcmVjdG9yaWVzPSIkbW9kdWxlX2RpcmVjdG9yaWVzIC4vJG1pYmRpci8kbW5kIgogCWZpCkBAIC0yNjcxMCw3ICsyMTEwNyw3IEBACiAgICAgICAjIGRlZmluZSBVU0lOR18qX01PRFVMRQogICAgICAgIwogCi0gICAgICBzeW09ImBlY2hvICR7aX0gfCBzZWQgJ3MvW15hLXpBLVowLTlfXS9fL2cnIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYCIKKyAgICAgIHN5bT0iYGVjaG8gJHtpfSB8ICRTRUQgJ3MvW15hLXpBLVowLTlfXS9fL2cnIHwgdHIgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6JyAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVonYCIKIAogICAgICAgZWNobyAiLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSAke2l9IG1vZHVsZSBmaWxlcy4gICovIiA+PiBpbmNsdWRlL25ldC1zbm1wL2FnZW50LyR7bW9kdWxlX3R5cGV9X2NvbmZpZy5oCiAgICAgICBlY2hvICIjZGVmaW5lIFVTSU5HXyR7c3ltfV9NT0RVTEUgMSIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaApAQCAtMjY3ODIsMTIgKzIxMTc5LDEwIEBACiAKICAgZm9yIG9maWxlIGluICRvdXRwdXRfaW5pdHMgJG91dHB1dF9oZHJzIDsgZG8KICAgICBpZiB0ZXN0IC1mICRvZmlsZSA7IHRoZW4KLSAgICAgIGlmIGdyZXAgInRoaXMgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlIiAkb2ZpbGUgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICAgIGlmICRHUkVQICJ0aGlzIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZSIgJG9maWxlID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCiAgIAk6CiAgICAgICBlbHNlCi0gIAl7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiAkb2ZpbGUgYWxyZWFkeSBleGlzdGVkIDsgY2FuJ3QgYnVpbGQgZGxsIG9iamVjdCAkaSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAkb2ZpbGUgYWxyZWFkeSBleGlzdGVkIDsgY2FuJ3QgYnVpbGQgZGxsIG9iamVjdCAkaSIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAJYXNfZm5fZXJyb3IgJD8gIiRvZmlsZSBhbHJlYWR5IGV4aXN0ZWQgOyBjYW4ndCBidWlsZCBkbGwgb2JqZWN0ICRpIiAiJExJTkVOTyIgNQogICAgICAgZmkKICAgICBmaQogICAgIGNhdCA+ICRvZmlsZSA8PCBFT0ZJRgpAQCAtMjY4MDUsNyArMjEyMDAsNyBAQAogRU9GT0MKIAogICAjIGNyZWF0ZSB0aGUgLnNvIHJ1bGUKLSAgc2F2ZWRfc3VibGlzdF9vPWBlY2hvICIkbW9kX2ZpbGVzICIgfCBzZWQgJ3MvXiAqLy9nO3MvICAqLy5vIC9nOydgCisgIHNhdmVkX3N1Ymxpc3Rfbz1gZWNobyAiJG1vZF9maWxlcyAiIHwgJFNFRCAncy9eICovL2c7cy8gICovLm8gL2c7J2AKIAogICAjIGNyZWF0ZSB0aGUgcnVsZXMgZm9yIGVhY2ggb2JqZWN0CiAgIGZvciBqIGluICRtb2RfZmlsZXMgOyBkbwpAQCAtMjY4MTQsNyArMjEyMDksNyBAQAogCVwkKENDKSAtYyBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgXCQ8CiAKIEVPRlIKLSAgICBtbm09YGVjaG8gJGogfCBzZWQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCisgICAgbW5tPWBlY2hvICRqIHwgJFNFRCAncy8uKlwvLy87cy9cLmMkLy87J2AKICAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0cwogICBkb25lCiAKQEAgLTI2ODM0LDQxICsyMTIyOSw0NiBAQAogZG9uZQogCiAjIGNsZWFudXAKLXJtIC1mIG1vZHVsZV90bXBfaGVhZGVyLmgKK3JtIC1mIGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBidWlsZCBtb2R1bGUgbGlzdHMgZm9yIE1ha2VmaWxlcwogIwogCiAKLWZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyA7IGRvCitmb3IgaSBpbiBtb2R1bGVfbGlzdF9vIG1vZHVsZV9saXN0X2MgbW9kdWxlX2xpc3RfbG8gbW9kdWxlX2xpc3RfZnQgbWliX21vZHVsZV9saXN0X28gbWliX21vZHVsZV9saXN0X2MgbWliX21vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9mdCBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBtaWJncm91cF9saXN0X2Z0IGFnZW50X21vZHVsZV9saXN0X28gYWdlbnRfbW9kdWxlX2xpc3RfYyBhZ2VudF9tb2R1bGVfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9mdCBhZ2VudGdyb3VwX2xpc3RfbyBhZ2VudGdyb3VwX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X2Z0IDsgZG8KICAgZXZhbCAiJGk9bWsvJHtpfS5tayIKIGRvbmUKIAotc2VkICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9vCi1zZWQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2MKLXNlZCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2xvCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X28vO3MvXChbXj1dXCkgICpcXC9cMS5vIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9vCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9jCiskU0VEICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfZnQvO3MvXChbXj1dXCkgICpcXC9cMS5mdCBcXC9nJyA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9mdAogCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9vCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9jCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfbG8KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9vCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfYworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9sbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2Z0LztzL1woW149XVwpICAqXFwvXDEuZnQgXFwvZycgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9mdAogCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9vL21pYmdyb3VwX2xpc3Rfby87c0BcKFteIAldKlwpXC5vQG1pYmdyb3VwL1wxLm9AZycgPCAkbWliX21vZHVsZV9saXN0X28gPiAkbWliZ3JvdXBfbGlzdF9vCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9sby9taWJncm91cF9saXN0X2xvLztzQFwoW14gCV0qXClcLmxvQG1pYmdyb3VwL1wxLmxvQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9sbyA+ICRtaWJncm91cF9saXN0X2xvCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3Rfby9taWJncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9vID4gJG1pYmdyb3VwX2xpc3RfbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2xvL21pYmdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkbWliX21vZHVsZV9saXN0X2xvID4gJG1pYmdyb3VwX2xpc3RfbG8KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9mdC9taWJncm91cF9saXN0X2Z0LztzQFwoW14gCV0qXClcLmZ0QG1pYmdyb3VwL1wxLmZ0QGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9mdCA+ICRtaWJncm91cF9saXN0X2Z0CiAKLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3Rfbwotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9jCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9sbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfYworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2xvCiskU0VEICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2Z0LztzL1woW149XVwpICAqXFwvXDEuZnQgXFwvZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfZnQKIAotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9vL2FnZW50Z3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9vID4gJGFnZW50Z3JvdXBfbGlzdF9vCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2xvL2FnZW50Z3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9sbyA+ICRhZ2VudGdyb3VwX2xpc3RfbG8KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X28vYWdlbnRncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X28gPiAkYWdlbnRncm91cF9saXN0X28KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2xvL2FnZW50Z3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9sbyA+ICRhZ2VudGdyb3VwX2xpc3RfbG8KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2Z0L2FnZW50Z3JvdXBfbGlzdF9mdC87c0BcKFteIAldKlwpXC5mdEBtaWJncm91cC9cMS5mdEBnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9mdCA+ICRhZ2VudGdyb3VwX2xpc3RfZnQKIAotZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIDsgZG8KK2ZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtb2R1bGVfbGlzdF9mdCBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliX21vZHVsZV9saXN0X2Z0IG1pYmdyb3VwX2xpc3RfbyBtaWJncm91cF9saXN0X2xvIG1pYmdyb3VwX2xpc3RfZnQgYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50X21vZHVsZV9saXN0X2Z0IGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyBhZ2VudGdyb3VwX2xpc3RfZnQgOyBkbwogCSMgaHB1eCBtYWtlIChhdCBsZWFzdCkgZG9lc24ndCBsaWtlIGEgdHJhaWxpbmcgXCBvbiB0aGUgbGFzdAogCSMgbGluZSBldmVuIHdoZW4gdGhlIG5leHQgbGluZSBjb250YWlucyBub3RoaW5nIGJ1dAogCSMgd2hpdGVzcGFjZS4KLQlsYXN0dG9rZW49YHRhaWwgLTEgbWsvJGkubWsgfCBhd2sgJ3twcmludCAkMX0nYAotCXNlZCAicyMkbGFzdHRva2VuIFxcXFwjJGxhc3R0b2tlbiMiIDwgbWsvJGkubWsgPiBtay8kaS5tay50bXAKKwlsYXN0dG9rZW49YGF3ayAne2xhc3R0b2tlbj0kMX1FTkR7cHJpbnQgbGFzdHRva2VufScgbWsvJGkubWtgCisJJFNFRCAicyMkbGFzdHRva2VuIFxcXFwjJGxhc3R0b2tlbiMiIDwgbWsvJGkubWsgPiBtay8kaS5tay50bXAKIAltdiBtay8kaS5tay50bXAgbWsvJGkubWsKIAogCSMgYWRkIGEgY2xvc2luZyBjb21tZW50CkBAIC0yNjkwNSw4ICsyMTMwNSw2IEBACiAKIAogCi0jQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3QpCi0jQUNfU1VCU1QobW9kdWxlX2xpc3QpCiAKIAogCkBAIC0yNjkxNCw4ICsyMTMxMiwxMiBAQAogCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogLiIgPiY1Ci1lY2hvICIke0VDSE9fVH0uIiA+JjYKKworCisKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IC4iID4mNQorJGFzX2VjaG8gIi4iID4mNjsgfQogCiBpZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KIApAQCAtMjY5MzIsNDc4ICsyMTMzNCwzMTAgQEAKIAogIyBlbmQgaGFpcnkgYWdlbnQgbW9kdWxlIHByb2Nlc3NpbmcKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgY3JlYXRlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgY3JlYXRlZC4uLiAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgZGlyZWN0b3JpZXMgbmVlZCB0byBiZSBjcmVhdGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGlmIGRpcmVjdG9yaWVzIG5lZWQgdG8gYmUgY3JlYXRlZC4uLiAiID4mNjsgfQogZm9yIGkgaW4gJG1vZHVsZV9kaXJlY3RvcmllczsgZG8KICAgJHNyY2Rpci9ta2luc3RhbGxkaXJzICRpCiBkb25lCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAuIiA+JjUKLWVjaG8gIiR7RUNIT19UfS4iID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IC4iID4mNQorJGFzX2VjaG8gIi4iID4mNjsgfQogCiAjLS0tLS0tLS0tLS0tLS0tLS0tLQogIyBEZWZpbmUgZGVmYXVsdCBtaWJzCiAjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZGVmYXVsdCBtaWIgZmlsZXMgdG8gcmVhZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGRlZmF1bHQgbWliIGZpbGVzIHRvIHJlYWQuLi4gJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGRlZmF1bHQgbWliIGZpbGVzIHRvIHJlYWQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZGVmYXVsdCBtaWIgZmlsZXMgdG8gcmVhZC4uLiAiID4mNjsgfQogaWYgdGVzdCAieCRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPSAieCI7IHRoZW4KICAgTkVUU05NUF9ERUZBVUxUX01JQlM9IiRkZWZhdWx0X21pYnMiCiBmaQotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICAjIG1pbmd3MzIgYW5kIGN5Z3dpbiB1c2UgJzsnIGFzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXBhcmF0b3IgY2hhcgoraWYgdGVzdCAieCRFTlZfU0VQQVJBVE9SIiAhPSAieCI7IHRoZW4KKyAgOgorZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgICMgbWluZ3czMiBhbmQgY3lnd2luIHVzZSAnOycgYXMgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2VwYXJhdG9yCiAgIEVOVl9TRVBBUkFUT1I9IjsiCi0gIE5FVFNOTVBfREVGQVVMVF9NSUJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQlMiIHwgc2VkICdzLzovOy9nJ2AKLSAgZGVmYXVsdF9taWJzPWBlY2hvICIkZGVmYXVsdF9taWJzIiB8IHNlZCAncy86LzsvZydgCisgIE5FVFNOTVBfREVGQVVMVF9NSUJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQlMiIHwgJFNFRCAncy86LzsvZydgCisgIGRlZmF1bHRfbWlicz1gZWNobyAiJGRlZmF1bHRfbWlicyIgfCAkU0VEICdzLzovOy9nJ2AKIGVsc2UKICAgRU5WX1NFUEFSQVRPUj0iOiIKIGZpCiAKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBFTlZfU0VQQVJBVE9SICIkRU5WX1NFUEFSQVRPUiIKK19BQ0VPRgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgRU5WX1NFUEFSQVRPUl9DSEFSICckRU5WX1NFUEFSQVRPUicKK19BQ0VPRgorCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9NSUJTICIkTkVUU05NUF9ERUZBVUxUX01JQlMiCiBfQUNFT0YKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkTkVUU05NUF9ERUZBVUxUX01JQlMiID4mNQotZWNobyAiJHtFQ0hPX1R9JE5FVFNOTVBfREVGQVVMVF9NSUJTIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkTkVUU05NUF9ERUZBVUxUX01JQlMiID4mNQorJGFzX2VjaG8gIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPiY2OyB9CiAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgdG8gYnVpbGQgUElDIGNvZGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyB3aGV0aGVyIHdlIGhhdmUgdG8gYnVpbGQgUElDIGNvZGUuLi4gJEVDSE9fQyIgPiY2Ci1lY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgdWNkLXNubXAvZGxtb2QgIiA+L2Rldi9udWxsCisjLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgc3ltYm9scyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gaW4gbWFrZWZpbGVzCisjCisKK2lmIGVjaG8gIiAkYWdlbnRfbW9kdWxlX2xpc3QgIiB8IFwKKyAgIGZncmVwICcgYWdlbnR4L2FnZW50eF9jb25maWcgJyB8IFwKKyAgIGZncmVwICcgYWdlbnR4L2NsaWVudCAnIHwgXAorICAgZmdyZXAgJyBhZ2VudHgvcHJvdG9jb2wgJyA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFPScnCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0U9JyMnCitlbHNlCisgICBORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRT0nIycKKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRT0nJworZmkKKworCisKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIE1pc2NlbGxhbmVvdXMgY2hlY2tzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBDb21waWxhdGlvbi1yZWxhdGVkCisjIworCisjICAgICAgIER5bmFtaWMgbW9kdWxlcyByZXF1aXJlIFBvc2l0aW9uLUluZGVwZW5kZW50IENvZGUKKyMJICAgIExJQl9DRkxBR1MvRExMSUJTOiB1c2VkIGluIGFnZW50IE1ha2VmaWxlIG9ubHkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB3ZSBoYXZlIHRvIGJ1aWxkIFBJQyBjb2RlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgd2UgaGF2ZSB0byBidWlsZCBQSUMgY29kZS4uLiAiID4mNjsgfQorZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiB1Y2Qtc25tcC9kbG1vZCAiID4vZGV2L251bGwKIGlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0gICAgICAgIExJQl9DRkxBR1M9IiRMSUJfQ0ZMQUdTICRTSExJQl9DRkxBR1MiCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2CisgICAgTElCX0NGTEFHUz0iJExJQl9DRkxBR1MgJFNITElCX0NGTEFHUyIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQotCURMTElCUz0iIgotCWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgICBETExJQlM9IiIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKKworIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJpZXMgdGhhdCBhcmUgcnVuCisjIGFmdGVyIHRoZSBhZ2VudCBtb2R1bGUgdGVzdHMuCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyAgIEhBVkVfTElCIERlZmluaXRpb25zIHVzZWQgaW4gdGhlIE5ldC1TTk1QIGNvZGUgYmFzZToKICMKLSMgQ2hlY2sgZm9yIGtlcm5lbCBsb2NhdGlvbgorIyAgICAgICBIQVZFX0xJQkNSWVBUTzoJYXBwcworIyAgICAgICBIQVZFX0xJQlJQTToJYWdlbnQKICMKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzeXN0ZW0ga2VybmVsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN5c3RlbSBrZXJuZWwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X0tFUk5FTF9MT0Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfS0VSTkVMX0xPQz0idW5rbm93biIKLSMgRmlyc3QgZGV0ZXJtaW5lIGlmIHRlc3QgZXhwZWN0cyBhIC1mIG9yIGEgLWMgKGNoYXJhY3RlciBkZXZpY2UgKFNZU1YpKQorIyMKKyMgICBTaW1wbGUgY2hlY2tzOgorIyMKIAotaWYgdGVzdCAtYyAvZGV2L251bGw7IHRoZW4KLSAgQ0ZMQUc9Ii1jIgotZWxpZiB0ZXN0IC1mIC9kZXYvbnVsbDsgdGhlbgotICBDRkxBRz0iLWYiCi1lbHNlCi0gICMgZmFsbCBiYWNrCi0gIENGTEFHPSItZiIKLWZpCi1mb3IgaSBpbiAvdm11bml4IC9ocC11eCAvc3RhbmQvdm11bml4IC9kZXYva3N5bXMgL2tlcm5lbC91bml4IC9rZXJuZWwvZ2VudW5peCAvbmV0YnNkIC91bml4IC9rZXJuZWwgL2JzZCAvbWFjaF9rZXJuZWwgL2Jvb3Qva2VybmVsL2tlcm5lbAotICBkbwotICBpZiB0ZXN0IC1mICRpIC1vICRDRkxBRyAkaTsgdGhlbgotICAgIGFjX2N2X0tFUk5FTF9MT0M9IiRpIgotICAgIGJyZWFrOworIyBBQ19DSEVDS19MSUIoZGVzLCBtYWluKQorIyBBQ19DSEVDS19MSUIobSwgICBhc2luKQorCisjICAgZG1hbGxvYworIworaWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGlmIHRlc3QgIiR3aXRoX2RtYWxsb2MiID0geWVzIC1hIC1kICR3aXRoX2RtYWxsb2MgOyB0aGVuCisKKyAgaWYgdGVzdCAieCR3aXRoX2RtYWxsb2MiICE9IHggLWEgLWQgJHdpdGhfZG1hbGxvYzsgdGhlbgorICAgICBpZiB0ZXN0IC1kICR3aXRoX2RtYWxsb2MvbGliOyB0aGVuCisgICAgICAgTERGTEFHUz0iLUwkd2l0aF9kbWFsbG9jL2xpYiAkTERGTEFHUyIKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAtZCAkd2l0aF9kbWFsbG9jL2luY2x1ZGU7IHRoZW4KKwlDUFBGTEFHUz0iLUkkd2l0aF9kbWFsbG9jL2luY2x1ZGUgJENQUEZMQUdTIgorICAgICBmaQogICBmaQotZG9uZQotaWYgdGVzdCAkaSA9ICJ1bmtub3duIjsgdGhlbgotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBDYW4ndCBmaW5kIHN5c3RlbSBrZXJuZWwuLi4gIFNldHRpbmcgdG8gL3ZtdW5peCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IENhbid0IGZpbmQgc3lzdGVtIGtlcm5lbC4uLiAgU2V0dGluZyB0byAvdm11bml4IiA+JjI7fQotICBhY19jdl9LRVJORUxfTE9DPSIvdm11bml4IgotZmkKIAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9LRVJORUxfTE9DIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9LRVJORUxfTE9DIiA+JjYKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBLRVJORUxfTE9DICIkYWNfY3ZfS0VSTkVMX0xPQyIKLV9BQ0VPRgotCi0KLSMKLSMgQ2hlY2sgZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uCi0jCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbW91bnQgdGFibGUgbG9jYXRpb24iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbW91bnQgdGFibGUgbG9jYXRpb24uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X0VUQ19NTlRUQUIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfRVRDX01OVFRBQj0idW5rbm93biIKLWZvciBpIGluIC9ldGMvbW50dGFiIC9ldGMvbXRhYiAvZXRjL2ZpbGVzeXN0ZW1zIC9kZXYvbW50dGFiCi0gIGRvCi0gIGlmIHRlc3QgLWYgJGkgLW8gLWMgJGk7IHRoZW4KLSAgICBhY19jdl9FVENfTU5UVEFCPSIkaSIKLSAgICBicmVhazsKLSAgZmkKLWRvbmUKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9FVENfTU5UVEFCIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9FVENfTU5UVEFCIiA+JjYKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBFVENfTU5UVEFCICIkYWNfY3ZfRVRDX01OVFRBQiIKLV9BQ0VPRgotCi0KLSMgQ2hlY2sgZm9yIC9kZXYvZG1lbSBvciAvZGV2L2RydW0gbG9jYXRpb24KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2UuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X0RNRU1fTE9DK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLSMgRmlyc3QgZGV0ZXJtaW5lIGlmIHRlc3QgZXhwZWN0cyBhIC1mIG9yIGEgLWMgKGNoYXJhY3RlciBkZXZpY2UgKFNZU1YpKQotCi1pZiB0ZXN0IC1mIC9kZXYva21lbTsgdGhlbgotICBDVEVTVD0idGVzdCAtZiIKLWVsaWYgdGVzdCAtYyAvZGV2L2ttZW07IHRoZW4KLSAgQ1RFU1Q9InRlc3QgLWMiCi1lbHNlCi0gICMgZmFsbCBiYWNrCi0gIENURVNUPSJ0ZXN0IC1mIgotZmkKLQotaWYgJENURVNUIC9kZXYvZG1lbTsgdGhlbgotICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kbWVtIgotZWxpZiAkQ1RFU1QgL2Rldi9kcnVtOyB0aGVuCi0gIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RydW0iCi1lbHNlCi0gIGFjX2N2X0RNRU1fTE9DPSJub25lIgotZmkKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ETUVNX0xPQyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfRE1FTV9MT0MiID4mNgotCi1pZiB0ZXN0ICJ4JGFjX2N2X0RNRU1fTE9DIiAhPSAieG5vbmUiOyB0aGVuCisgICBmaQorICAgZm9yIGFjX2hlYWRlciBpbiBkbWFsbG9jLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgImRtYWxsb2MuaCIgImFjX2N2X2hlYWRlcl9kbWFsbG9jX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2RtYWxsb2NfaCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBETUVNX0xPQyAiJGFjX2N2X0RNRU1fTE9DIgorI2RlZmluZSBIQVZFX0RNQUxMT0NfSCAxCiBfQUNFT0YKIAogZmkKIAotIyBmb3JjZWQgZWZlbmNlIHR1cm5lZCBvZmYuCi0jIGlmIHRlc3QgIngkZGV2ZWxvcGVyIiA9ICJ4eWVzIiAtYSAieCR1c2VfZWZlbmNlIiAhPSAieG5vIjsgdGhlbgotIyAgICB1c2VfZWZlbmNlPSJ5ZXMiCi0jIGZpCitkb25lCiAKLWlmIHRlc3QgIngkdXNlX2VmZW5jZSIgPSAieHllcyI7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBFRl9FeGl0IGluIC1sZWZlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIEVGX0V4aXQgaW4gLWxlZmVuY2UuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9lZmVuY2VfRUZfRXhpdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRtYWxsb2NfbWVzc2FnZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRtYWxsb2NfbWVzc2FnZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxlZmVuY2UgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUworY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorY2hhciBkbWFsbG9jX21lc3NhZ2UgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkbWFsbG9jX21lc3NhZ2UgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2ZvciBhY19saWIgaW4gJycgZG1hbGxvYzsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2U9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2UrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZSs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZT1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2RtYWxsb2NfbWVzc2FnZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9kbWFsbG9jX21lc3NhZ2UiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfZG1hbGxvY19tZXNzYWdlCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKK2ZpCisKKyMgICBFRmVuY2UKKyMgICAgICAgKFRoaXMgdXNlZCB0byBiZSBvbiBieSBkZWZhdWx0IGZvciBkZXZlbG9wZXIgY2hlY2tvdXQpCisjCitpZiB0ZXN0ICJ4JHVzZV9lZmVuY2UiID0gInh5ZXMiOyB0aGVuCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIEVGX0V4aXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBFRl9FeGl0Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X3NlYXJjaF9FRl9FeGl0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKIGNoYXIgRUZfRXhpdCAoKTsKIGludAogbWFpbiAoKQogewotRUZfRXhpdCAoKTsKK3JldHVybiBFRl9FeGl0ICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9lZmVuY2VfRUZfRXhpdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2VmZW5jZV9FRl9FeGl0PW5vCitmb3IgYWNfbGliIGluICcnIGVmZW5jZTsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9FRl9FeGl0PSRhY19yZXMKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX0VGX0V4aXQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhawogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZWZlbmNlX0VGX0V4aXQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lZmVuY2VfRUZfRXhpdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZWZlbmNlX0VGX0V4aXQgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQkVGRU5DRSAxCi1fQUNFT0YKLQotICBMSUJTPSItbGVmZW5jZSAkTElCUyIKLQotZmkKLQotZmkKLQotIyBDaGVja3MgZm9yIGxpYnJhcmllcy4KLSMgQUNfQ0hFQ0tfTElCKGRlcywgbWFpbikKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciByb3VuZCBpbiAtbG0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igcm91bmQgaW4gLWxtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfbV9yb3VuZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcm91bmQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJvdW5kICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9tX3JvdW5kPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbV9yb3VuZD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tX3JvdW5kIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbV9yb3VuZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbV9yb3VuZCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCTSAxCi1fQUNFT0YKLQotICBMSUJTPSItbG0gJExJQlMiCi0KLWZpCi0KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBleHAgaW4gLWxtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGV4cCBpbiAtbG0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9tX2V4cCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbG0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZXhwICgpOwotaW50Ci1tYWluICgpCi17Ci1leHAgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX21fZXhwPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfbV9leHA9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbV9leHAiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9tX2V4cCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbV9leHAgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQk0gMQotX0FDRU9GCi0KLSAgTElCUz0iLWxtICRMSUJTIgotCi1maQotCi0KLQotIyBDaGVjayB3aGV0aGVyIC0td2l0aC1lbGYgb3IgLS13aXRob3V0LWVsZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfZWxmK3NldH0iID0gc2V0OyB0aGVuCi0gIHdpdGh2YWw9IiR3aXRoX2VsZiIKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX0VGX0V4aXQrOn0gZmFsc2U7IHRoZW4gOgogCiBlbHNlCi0gICMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1lbGYgb3IgLS1kaXNhYmxlLWVsZiB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke2VuYWJsZV9lbGYrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZW5hYmxldmFsPSIkZW5hYmxlX2VsZiIKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVsZi8tLXdpdGhvdXQtZWxmIGluc3RlYWQgIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6ICBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbGYvLS13aXRob3V0LWVsZiBpbnN0ZWFkICIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmk7Ci1maTsKKyAgYWNfY3Zfc2VhcmNoX0VGX0V4aXQ9bm8KK2ZpCitybSBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9FRl9FeGl0IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX0VGX0V4aXQiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfRUZfRXhpdAoraWYgdGVzdCAiJGFjX3JlcyIgIT0gbm87IHRoZW4gOgorICB0ZXN0ICIkYWNfcmVzIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfcmVzICRMSUJTIgogCitmaQorCitmaQorCisKKyMgICBFTEYgbGlicmFyaWVzCisjICAgICAgIFR5cGljYWxseSB1c2VkIGZvciAnbmxpc3QnICAobmVlZGVkIGZvciB1cHRpbWUpCisjCiBpZiB0ZXN0ICJ4JHdpdGhfZWxmIiAhPSAieG5vIjsgdGhlbgotIyBubGlzdCBpcyBuZWVkZWQgZm9yIHVwdGltZSBvbiBzb21lIHN5dGVtcyBpbiB0aGUgZ2VuZXJpYyBsaWJyYXJ5Ci0jIGFkZCBob3N0cyB3aGljaCBkb24ndCB1c2Ugbmxpc3QgdG8gdGhlIGJsYW5rIGZpcnN0IGxpbmUKIGNhc2UgJHRhcmdldF9vcyBpbgotCWxpbnV4KikgOzsKKwlsaW51eCopICMgYWRkIGhvc3RzIHdoaWNoIGRvbid0IHVzZSBubGlzdCBoZXJlCisgICAgICAgICAgICAgICAgOzsKIAlpcml4KikgIyBDaGVjayBmb3Igbmxpc3QgaW4gbWxkIChpcml4KQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZWxmX25saXN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZWxmX25saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxlbGYgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBubGlzdCAoKTsKIGludAogbWFpbiAoKQogewotbmxpc3QgKCk7CityZXR1cm4gbmxpc3QgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2VsZl9ubGlzdD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2VsZl9ubGlzdD1ubworICBhY19jdl9saWJfZWxmX25saXN0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2VsZl9ubGlzdCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZWxmX25saXN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9lbGZfbmxpc3QiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJFTEYgMQogX0FDRU9GCkBAIC0yNzQxMiw3MiArMjE2NDYsNDMgQEAKIAogZmkKIAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5saXN0NjQgaW4gLWxlbGYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igbmxpc3Q2NCBpbiAtbGVsZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2VsZl9ubGlzdDY0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5saXN0NjQgaW4gLWxlbGYiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIG5saXN0NjQgaW4gLWxlbGYuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX2VsZl9ubGlzdDY0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxlbGYgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBubGlzdDY0ICgpOwogaW50CiBtYWluICgpCiB7Ci1ubGlzdDY0ICgpOworcmV0dXJuIG5saXN0NjQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2VsZl9ubGlzdDY0PXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZWxmX25saXN0NjQ9bm8KKyAgYWNfY3ZfbGliX2VsZl9ubGlzdDY0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lbGZfbmxpc3Q2NCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2VsZl9ubGlzdDY0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9lbGZfbmxpc3Q2NCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZWxmX25saXN0NjQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfZWxmX25saXN0NjQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfZWxmX25saXN0NjQiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJFTEYgMQogX0FDRU9GCkBAIC0yNzQ4Niw3MiArMjE2OTEsNDMgQEAKIAogZmkKIAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sbWxkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sbWxkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfbWxkX25saXN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sbWxkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBubGlzdCBpbiAtbG1sZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfbWxkX25saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxtbGQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBubGlzdCAoKTsKIGludAogbWFpbiAoKQogewotbmxpc3QgKCk7CityZXR1cm4gbmxpc3QgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX21sZF9ubGlzdD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX21sZF9ubGlzdD1ubworICBhY19jdl9saWJfbWxkX25saXN0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9tbGRfbmxpc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9tbGRfbmxpc3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX21sZF9ubGlzdCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbWxkX25saXN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX21sZF9ubGlzdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9tbGRfbmxpc3QiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJNTEQgMQogX0FDRU9GCkBAIC0yNzU2Miw3MiArMjE3MzgsNDMgQEAKIAogCQk7OwogCSopICMgZGVmYXVsdAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZWxmX25saXN0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG5saXN0IGluIC1sZWxmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBubGlzdCBpbiAtbGVsZi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfZWxmX25saXN0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxlbGYgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBubGlzdCAoKTsKIGludAogbWFpbiAoKQogewotbmxpc3QgKCk7CityZXR1cm4gbmxpc3QgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX2VsZl9ubGlzdD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2VsZl9ubGlzdD1ubworICBhY19jdl9saWJfZWxmX25saXN0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9lbGZfbmxpc3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2VsZl9ubGlzdCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfZWxmX25saXN0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX2VsZl9ubGlzdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9lbGZfbmxpc3QiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJFTEYgMQogX0FDRU9GCkBAIC0yNzY0MSw1NzMgKzIxNzg4LDExODggQEAKIGZpCiAKIAotIyBPbiBzb21lIHBsYXRmb3JtcyAoSXJpeCkgbGlibnNsIGFuZCBsaWJzb2NrZXQgc2hvdWxkIG5vdCBiZSB1c2VkLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyMgICBsaWJzb2NrZXQKKyMgICAgICAgTmVlZGVkIGZvciAnc29ja2V0KDIpJyAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjICAgICAgIFBvc3NpYmx5IGFsc28gZm9yICdnZXRob3N0bmFtZSgzKScgICAgICAgICAgICAgIChub24tU29sYXJpcykKKyMgICAgICAgICAgIChhbHRlcm5hdGl2ZWx5IGluIGxpYm5zbCAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjICAgICAgICAgICAgb3IgaW4gbGlid3MyXzMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK2Nhc2UgeCR3aXRoX3NvY2tsaWIgaW4KK3h3aW5zb2NrMikKKyAgIyAgIGxpYndzMl93MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorICAjCisgIG5ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKKyAgTElCUz0iJExJQlMgLWx3czJfMzIiCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBnZXRob3N0YnluYW1lIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0aG9zdGJ5bmFtZS4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBnZXRob3N0YnluYW1lIGlubm9jdW91c19nZXRob3N0YnluYW1lCiAKLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGhvc3RieW5hbWUgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZ2V0aG9zdGJ5bmFtZQotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGhvc3RieW5hbWUgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0aG9zdGJ5bmFtZSkgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0aG9zdGJ5bmFtZSkKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZ2V0aG9zdGJ5bmFtZTsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKKyAgICAjaW5jbHVkZSA8d2luc29jazIuaD4KIAogaW50CiBtYWluICgpCiB7Ci1yZXR1cm4gZiAhPSBnZXRob3N0YnluYW1lOworCisgICAgc29ja2V0KDAsIDAsIDApOworICAgIGdldGhvc3RieW5hbWUoMCk7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX2dldGhvc3RieW5hbWU9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAKLWFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZSA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQotX0FDRU9GCisgICAgIyBLZWVwIExJQlMuCisgICAgdHJ1ZQogCiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbG5zbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRob3N0YnluYW1lIGluIC1sbnNsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworICAgICMgUmVzdG9yZSBMSUJTIGFuZCBjb21wbGFpbi4KKyAgICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisgICAgYXNfZm5fZXJyb3IgJD8gImxpYndzMl8zMiBub3QgZm91bmQuIiAiJExJTkVOTyIgNQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgOzsKKyopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzb2NrZXQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzb2NrZXQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX3NvY2tldCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbnNsICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKK2NoYXIgc29ja2V0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc29ja2V0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIHNvY2tldDsgZG8KKyAgaWYgdGVzdCAteiAiJGFjX2xpYiI7IHRoZW4KKyAgICBhY19yZXM9Im5vbmUgcmVxdWlyZWQiCisgIGVsc2UKKyAgICBhY19yZXM9LWwkYWNfbGliCisgICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgorICBmaQorICBpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X3NlYXJjaF9zb2NrZXQ9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9zb2NrZXQrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX3NvY2tldCs6fSBmYWxzZTsgdGhlbiA6CisKK2Vsc2UKKyAgYWNfY3Zfc2VhcmNoX3NvY2tldD1ubworZmkKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX3NvY2tldCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9zb2NrZXQiID4mNjsgfQorYWNfcmVzPSRhY19jdl9zZWFyY2hfc29ja2V0CitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gInNvY2tldCgyKSBub3QgZm91bmQuIiAiJExJTkVOTyIgNQorZmkKKworICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0aG9zdGJ5bmFtZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGhvc3RieW5hbWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgogY2hhciBnZXRob3N0YnluYW1lICgpOwogaW50CiBtYWluICgpCiB7Ci1nZXRob3N0YnluYW1lICgpOworcmV0dXJuIGdldGhvc3RieW5hbWUgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorZm9yIGFjX2xpYiBpbiAnJyBuc2wgc29ja2V0OyBkbworICBpZiB0ZXN0IC16ICIkYWNfbGliIjsgdGhlbgorICAgIGFjX3Jlcz0ibm9uZSByZXF1aXJlZCIKKyAgZWxzZQorICAgIGFjX3Jlcz0tbCRhY19saWIKKyAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCisgIGZpCisgIGlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWU9JGFjX3JlcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAorICBpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgYnJlYWsKK2ZpCitkb25lCitpZiAke2FjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lKzp9IGZhbHNlOyB0aGVuIDoKIAotYWNfY3ZfbGliX25zbF9nZXRob3N0YnluYW1lPW5vCitlbHNlCisgIGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK3JtIGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9uc2xfZ2V0aG9zdGJ5bmFtZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbnNsX2dldGhvc3RieW5hbWUgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2dldGhvc3RieW5hbWUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5bmFtZSIgPiY2OyB9CithY19yZXM9JGFjX2N2X3NlYXJjaF9nZXRob3N0YnluYW1lCitpZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6CisgIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCisKK2ZpCisKKyAgZm9yIGFjX2Z1bmMgaW4gZ2V0aG9zdGJ5bmFtZQorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJnZXRob3N0YnluYW1lIiAiYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEKIF9BQ0VPRgogCi0JTElCUz0iJHtMSUJTfSAtbG5zbCIKIGZpCitkb25lCiAKLWZpCi0KLQotIyBTQ08gVW5peHdhcmUgNy4xLjQgZmluZHMgZ2V0aG9zdGJ5bmFtZSgpIGluIC1sc29ja2V0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19nZXRob3N0YnluYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRob3N0YnlhZGRyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0aG9zdGJ5YWRkci4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlM9JExJQlMKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBnZXRob3N0YnluYW1lIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0aG9zdGJ5bmFtZS4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBnZXRob3N0YnluYW1lIGlubm9jdW91c19nZXRob3N0YnluYW1lCiAKLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGhvc3RieW5hbWUgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZ2V0aG9zdGJ5bmFtZQotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKKyNlbmRpZgorY2hhciBnZXRob3N0YnlhZGRyICgpOworaW50CittYWluICgpCiB7Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGhvc3RieW5hbWUgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0aG9zdGJ5bmFtZSkgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0aG9zdGJ5bmFtZSkKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZ2V0aG9zdGJ5bmFtZTsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCityZXR1cm4gZ2V0aG9zdGJ5YWRkciAoKTsKKyAgOworICByZXR1cm4gMDsKIH0KLSNlbmRpZgorX0FDRU9GCitmb3IgYWNfbGliIGluICcnIG5zbCBzb2NrZXQ7IGRvCisgIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCisgICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgorICBlbHNlCisgICAgYWNfcmVzPS1sJGFjX2xpYgorICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKKyAgZmkKKyAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkcj0kYWNfcmVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0CisgIGlmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHIrOn0gZmFsc2U7IHRoZW4gOgorICBicmVhaworZmkKK2RvbmUKK2lmICR7YWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHIrOn0gZmFsc2U7IHRoZW4gOgorCitlbHNlCisgIGFjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyPW5vCitmaQorcm0gY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9zZWFyY2hfZ2V0aG9zdGJ5YWRkciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NlYXJjaF9nZXRob3N0YnlhZGRyIiA+JjY7IH0KK2FjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldGhvc3RieWFkZHIKK2lmIHRlc3QgIiRhY19yZXMiICE9IG5vOyB0aGVuIDoKKyAgdGVzdCAiJGFjX3JlcyIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX3JlcyAkTElCUyIKKworZmkKKworICBmb3IgYWNfZnVuYyBpbiBnZXRob3N0YnlhZGRyCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldGhvc3RieWFkZHIiICJhY19jdl9mdW5jX2dldGhvc3RieWFkZHIiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5YWRkciIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKyAgOzsKK2VzYWMKKworCisjICAgbGliaXBobHBhcGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDeWd3aW4gYW5kIE1pbkdXKQorIworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxpcGhscGFwaSIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworICAjaW5jbHVkZSA8d2luc29jazIuaD4KKyAgI2luY2x1ZGUgPGlwaGxwYXBpLmg+CiAKIGludAogbWFpbiAoKQogewotcmV0dXJuIGYgIT0gZ2V0aG9zdGJ5bmFtZTsKKworICBJcFJlbmV3QWRkcmVzcygwKTsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAotYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2dldGhvc3RieW5hbWUiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCi1fQUNFT0YKKyAgIyBLZWVwIExJQlMuCisgIHRydWUKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGhvc3RieW5hbWUgaW4gLWxzb2NrZXQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0aG9zdGJ5bmFtZSBpbiAtbHNvY2tldC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sc29ja2V0ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCisgICMgUmVzdG9yZSBMSUJTIGFuZCBjb21wbGFpbi4KKyAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorICBjYXNlIHgkd2l0aF9zb2NrbGliIGluCisgIHh3aW5zb2NrMikKKyAgICBhc19mbl9lcnJvciAkPyAibGliaXBobHBhcGkgbm90IGZvdW5kLiIgIiRMSU5FTk8iIDUKKyAgICA7OworICBlc2FjCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKyMgICBsaWJyZWdleCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorIworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxyZWdleCIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRob3N0YnluYW1lICgpOworICAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisgICNpbmNsdWRlIDxyZWdleC5oPgorCiBpbnQKIG1haW4gKCkKIHsKLWdldGhvc3RieW5hbWUgKCk7CisKKyAgcmVnY29tcCgwLCAwLCAwKTsKKwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZT15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworICAjIEtlZXAgTElCUy4KKyAgdHJ1ZQorCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX3NvY2tldF9nZXRob3N0YnluYW1lIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9zb2NrZXRfZ2V0aG9zdGJ5bmFtZSA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0dFVEhPU1RCWU5BTUUgMQotX0FDRU9GCi0KLQlMSUJTPSIke0xJQlN9IC1sc29ja2V0IgotZmkKKyAgIyBSZXN0b3JlIExJQlMuCisgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKIAogZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIAotIyBTb2xhcmlzIGtzdGF0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGtzdGF0X2xvb2t1cCBpbiAtbGtzdGF0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGtzdGF0X2xvb2t1cCBpbiAtbGtzdGF0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfa3N0YXRfa3N0YXRfbG9va3VwK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sa3N0YXQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisjICAgbGlic25tcGFwaSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMSUJTIC1sc25tcGFwaSIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKyAgI2luY2x1ZGUgPHNubXAuaD4KKworaW50CittYWluICgpCit7CisKKyAgU25tcFV0aWxNZW1BbGxvYygwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisKKyAgIyBLZWVwIExJQlMuCisgIHRydWUKKworZWxzZQorCisgICMgUmVzdG9yZSBMSUJTLgorICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKyMgICBrc3RhdCBsaWJyYXJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3N0YXRfbG9va3VwIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcga3N0YXRfbG9va3VwLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19rc3RhdF9sb29rdXBfTE5FVFNOTVBMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTkVUU05NUExJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KIGNoYXIga3N0YXRfbG9va3VwICgpOwogaW50CiBtYWluICgpCiB7Ci1rc3RhdF9sb29rdXAgKCk7CityZXR1cm4ga3N0YXRfbG9va3VwICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9rc3RhdF9rc3RhdF9sb29rdXA9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfa3N0YXRfa3N0YXRfbG9va3VwPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2tzdGF0X2tzdGF0X2xvb2t1cCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2tzdGF0X2tzdGF0X2xvb2t1cCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfa3N0YXRfa3N0YXRfbG9va3VwID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCS1NUQVQgMQotX0FDRU9GCi0KLSAgICAgICAgTE5FVFNOTVBMSUJTPSIke0xORVRTTk1QTElCU30gLWxrc3RhdCIKLWZpCi0KLQotIyBDaGVjayBmb3IgbGlicmFyaWVzIHRoYXQgdGhlIGFnZW50IG5lZWRzCi0jIHNhdmluZyBvbGQgbGlicmFyaWVzCi1OT05BR0VOVExJQlM9JExJQlMKLQotIyBDaGVjayBmb3Igc2VjdXJpdHkgcmVsYXRlZCBmdW5jdGlvbnMKLWlmIHRlc3QgIngkdHJ5b3BlbnNzbCIgIT0gInhubyI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgIT0gInh5ZXMiIC1hICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxwa2NzMTEgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4ga3N0YXQgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorY2hhciBrc3RhdF9sb29rdXAgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBrc3RhdF9sb29rdXAgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfa3N0YXRfbG9va3VwX0xORVRTTk1QTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0iCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X2Z1bmNfa3N0YXRfbG9va3VwX0xORVRTTk1QTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19rc3RhdF9sb29rdXBfTE5FVFNOTVBMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rc3RhdF9sb29rdXBfTE5FVFNOTVBMSUJTfSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19rc3RhdF9sb29rdXBfTE5FVFNOTVBMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExORVRTTk1QTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCS1NUQVQgMSIgPj5jb25mZGVmcy5oCisKKworIGZpCisKKworCisjCisjICAgbGlicnQKKyMKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGNsb2NrX2dldHRpbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBjbG9ja19nZXR0aW1lLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19jbG9ja19nZXR0aW1lX0xORVRTTk1QTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE5FVFNOTVBMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCiAgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgY2xvY2tfZ2V0dGltZSAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGNsb2NrX2dldHRpbWUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcnQgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGNsb2NrX2dldHRpbWUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBjbG9ja19nZXR0aW1lICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2Nsb2NrX2dldHRpbWVfTE5FVFNOTVBMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19jbG9ja19nZXR0aW1lX0xORVRTTk1QTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19jbG9ja19nZXR0aW1lX0xORVRTTk1QTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfY2xvY2tfZ2V0dGltZV9MTkVUU05NUExJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2Nsb2NrX2dldHRpbWVfTE5FVFNOTVBMSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExORVRTTk1QTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfQ0xPQ0tfR0VUVElNRSAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworCisKKyMjCisjICAgTUlCLW1vZHVsZS1zcGVjaWZpYyBjaGVja3MKKyMjCisKKyMgICBsaWJkZXZzdGF0CisjICAgICAgICAoZm9yIGRpc2tJTyBNSUIpCisjCisjICAgTm90LVVzZWQ6IEhBVkVfR0VUREVWUy9IQVZFX0RFVlNUQVRfR0VUREVWUworIworZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiB1Y2Qtc25tcC9kaXNraW8gIiA+L2Rldi9udWxsCitpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGRldnMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBnZXRkZXZzLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19nZXRkZXZzX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGRldnMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnZXRkZXZzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIGRldnN0YXQgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGdldGRldnMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBnZXRkZXZzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX2dldGRldnNfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX2dldGRldnNfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfZ2V0ZGV2c19MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfZ2V0ZGV2c19MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfZ2V0ZGV2c19MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfR0VUREVWUyAxIiA+PmNvbmZkZWZzLmgKKworCisgZmkKKworCisgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRldnN0YXRfZ2V0ZGV2cyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGRldnN0YXRfZ2V0ZGV2cy4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfZGV2c3RhdF9nZXRkZXZzX0xNSUJMSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMTUlCTElCUyIKKyAgICAgICAgICBuZXRzbm1wX3RlbXBfTElCUz0iJHtuZXRzbm1wX3RhcmdldF92YWx9ICAke0xJQlN9IgorICAgICBuZXRzbm1wX3Jlc3VsdD1ubworICAgICBMSUJTPSIke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIGRldnN0YXRfZ2V0ZGV2cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGRldnN0YXRfZ2V0ZGV2cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBkZXZzdGF0IDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBkZXZzdGF0X2dldGRldnMgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBkZXZzdGF0X2dldGRldnMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfZGV2c3RhdF9nZXRkZXZzX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19kZXZzdGF0X2dldGRldnNfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfZGV2c3RhdF9nZXRkZXZzX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19kZXZzdGF0X2dldGRldnNfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX2RldnN0YXRfZ2V0ZGV2c19MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfREVWU1RBVF9HRVRERVZTIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCitmaQorCisjICAgbGlicGNpCisjICAgICAgICAoZm9yIGlmLW1pYiBkZXNjcmlwdGlvbikKKyMKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwY2lfbG9va3VwX25hbWUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBwY2lfbG9va3VwX25hbWUuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX3BjaV9sb29rdXBfbmFtZV9MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwY2lfbG9va3VwX25hbWUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwY2lfbG9va3VwX25hbWUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gcGNpIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBwY2lfbG9va3VwX25hbWUgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBwY2lfbG9va3VwX25hbWUgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfcGNpX2xvb2t1cF9uYW1lX0xNSUJMSUJTPSIke25ldHNubXBfcmVzdWx0fSIKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfZnVuY19wY2lfbG9va3VwX25hbWVfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfcGNpX2xvb2t1cF9uYW1lX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19wY2lfbG9va3VwX25hbWVfTE1JQkxJQlN9IiAhPSAibm8iIDsgdGhlbgorICAgIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX3BjaV9sb29rdXBfbmFtZV9MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUENJX0xPT0tVUF9OQU1FIDEiID4+Y29uZmRlZnMuaAorCisKKyBmaQorCisKKyMgICBMTS1TRU5TT1JTLU1JQiBzdXBwb3J0CisjCitlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAtaSAidWNkLXNubXAvbG1zZW5zb3IiID4gL2Rldi9udWxsCitpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBzZW5zb3JzIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHNlbnNvcnMgc3VwcG9ydC4uLiAiID4mNjsgfQorICAgICAgICBjYXNlICR0YXJnZXRfb3MgaW4KKyAgICAgICAgc29sYXJpcyopCisgICAgICAgICAgICAjICBBZ2VudDogIEhBVkVfUElDTF9ICisgICAgICAgICAgICAjCisgICAgICAgICAgICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicGljbC5oIiAiYWNfY3ZfaGVhZGVyX3BpY2xfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcGljbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxwaWNsIgorZmkKKworCisgICAgICAgICAgICBmb3IgYWNfaGVhZGVyIGluIHBpY2wuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAicGljbC5oIiAiYWNfY3ZfaGVhZGVyX3BpY2xfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfcGljbF9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUElDTF9IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICAgICAgICAgIDs7CisgICAgICAgICopCisgICAgICAgICAgICAjICBOb3QtVXNlZDogIEhBVkVfU0VOU09SU19TRU5TT1JTX0gKKyAgICAgICAgICAgICMKKyAgICAgICAgICAgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJzZW5zb3JzL3NlbnNvcnMuaCIgImFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID0geHllczsgdGhlbiA6CisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gImFza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgc2Vuc29ycy9zZW5zb3JzLmgiICIkTElORU5PIiA1CitmaQorCisKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfZnVuY19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwc19MTUlCTElCUys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIG5ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbmV0c25tcF90YXJnZXRfdmFsPSIkTE1JQkxJQlMiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PSJub25lIHJlcXVpcmVkIgorZWxzZQorICBmb3IgbmV0c25tcF9jdXJfbGliIGluIHNlbnNvcnMgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzICgpOworaW50CittYWluICgpCit7CityZXR1cm4gc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVhaworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICAgZG9uZQorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBuZXRzbm1wX2N2X2Z1bmNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHNfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzX0xNSUJMSUJTIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9mdW5jX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzX0xNSUJMSUJTIiA+JjY7IH0KKyBpZiB0ZXN0ICIke25ldHNubXBfY3ZfZnVuY19zZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwc19MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHNfTE1JQkxJQlN9IiAhPSAibm9uZSByZXF1aXJlZCIgOyB0aGVuCisgICAgICAgTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorCisgZWxzZQorICAgIGFzX2ZuX2Vycm9yICQ/ICJhc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIC1sc2Vuc29ycyIgIiRMSU5FTk8iIDUKKyBmaQorCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCitmaQorCisjCisjIGxpYm5sIChuZXRsaW5rKQorIworCitpZiB0ZXN0ICJ4JHdpdGhfbmwiICE9ICJ4bm8iOyB0aGVuCisgICAgY2FzZSAkdGFyZ2V0X29zIGluCisgICAgbGludXgqKSAjIENoZWNrIGZvciBsaWJubCAobGludXgpCisgICAgICAgIG5ldHNubXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgICBDUFBGTEFHUz0iLUkvdXNyL2luY2x1ZGUvbGlibmwzICRDUFBGTEFHUyIKKworIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnJhcnkgY29udGFpbmluZyBubF9jb25uZWN0IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgbmxfY29ubmVjdC4uLiAiID4mNjsgfQoraWYgJHtuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MSUJTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgbmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICBuZXRzbm1wX3RhcmdldF92YWw9IiRMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIgJHtMSUJTfSIKKyAgICAgbmV0c25tcF9yZXN1bHQ9bm8KKyAgICAgTElCUz0iJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBubF9jb25uZWN0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbmxfY29ubmVjdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCIKK2Vsc2UKKyAgZm9yIG5ldHNubXBfY3VyX2xpYiBpbiBubC0zIDsgZG8KKyAgICAgICAgICAgICAgTElCUz0iLWwke25ldHNubXBfY3VyX2xpYn0gJHtuZXRzbm1wX3RlbXBfTElCU30iCisgICAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBubF9jb25uZWN0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gbmxfY29ubmVjdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX3Jlc3VsdD0tbCR7bmV0c25tcF9jdXJfbGlifQorICAgICAgICAgICAgICAgICAgIGJyZWFrCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgICBkb25lCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgTElCUz0iJHtuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCU30iCisgICAgIG5ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTElCUyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3ZfZnVuY19ubF9jb25uZWN0X0xJQlMiID4mNjsgfQorIGlmIHRlc3QgIiR7bmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MSUJTfSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIExJQlM9IiR7bmV0c25tcF9yZXN1bHR9ICR7bmV0c25tcF90YXJnZXRfdmFsfSIKKyAgICBmaQorICAgIGZvciBhY19oZWFkZXIgaW4gbmV0bGluay9uZXRsaW5rLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm5ldGxpbmsvbmV0bGluay5oIiAiYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX05FVExJTktfTkVUTElOS19IIDEKK19BQ0VPRgorCitmaQorCitkb25lCisKKyAgICAgICAgICAgIEVYVEVSTkFMX01JQkdST1VQX0lOQ0xVREVTPSIkRVhURVJOQUxfTUlCR1JPVVBfSU5DTFVERVMgLUkvdXNyL2luY2x1ZGUvbGlibmwzIgorIGVsc2UKKyAgICBDUFBGTEFHUz0iJG5ldHNubXBfc2F2ZV9DUFBGTEFHUyIKKyBmaQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiAhPSB4eWVzOyB0aGVuCisKKyB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgbmxfY29ubmVjdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG5sX2Nvbm5lY3QuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTE1JQkxJQlMrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBuZXRzbm1wX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0iJExJQlMiCisgICAgIG5ldHNubXBfdGFyZ2V0X3ZhbD0iJExNSUJMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIke25ldHNubXBfdGFyZ2V0X3ZhbH0gICR7TElCU30iCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgbmxfY29ubmVjdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIG5sX2Nvbm5lY3QgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9yZXN1bHQ9Im5vbmUgcmVxdWlyZWQiCitlbHNlCisgIGZvciBuZXRzbm1wX2N1cl9saWIgaW4gbmwgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIG5sX2Nvbm5lY3QgKCk7CitpbnQKK21haW4gKCkKK3sKK3JldHVybiBubF9jb25uZWN0ICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfcmVzdWx0PS1sJHtuZXRzbm1wX2N1cl9saWJ9CisgICAgICAgICAgICAgICAgICAgYnJlYWsKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBMSUJTPSIke25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTfSIKKyAgICAgbmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTE1JQkxJQlM9IiR7bmV0c25tcF9yZXN1bHR9IgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9mdW5jX25sX2Nvbm5lY3RfTE1JQkxJQlMiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MTUlCTElCUyIgPiY2OyB9CisgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MTUlCTElCU30iICE9ICJubyIgOyB0aGVuCisgICAgaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2Z1bmNfbmxfY29ubmVjdF9MTUlCTElCU30iICE9ICJub25lIHJlcXVpcmVkIiA7IHRoZW4KKyAgICAgICBMTUlCTElCUz0iJHtuZXRzbm1wX3Jlc3VsdH0gJHtuZXRzbm1wX3RhcmdldF92YWx9IgorICAgIGZpCisKKyAgICAgICAgICAgICAgICBmb3IgYWNfaGVhZGVyIGluIG5ldGxpbmsvbmV0bGluay5oCitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJuZXRsaW5rL25ldGxpbmsuaCIgImFjX2N2X2hlYWRlcl9uZXRsaW5rX25ldGxpbmtfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9ORVRMSU5LX05FVExJTktfSCAxCitfQUNFT0YKKworZmkKKworZG9uZQorCisKKyBmaQorCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxuZXRsaW5rL3NvY2tldC5oPgorCitfQUNFT0YKK2lmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKKyAgJEVHUkVQICJubF9zb2NrZXRfZnJlZSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJOTDMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgICBmaQorICAgIDs7CisgICAgZXNhYworZmkKKworCisKKyMjCisjICAgTW9yZSBjb21wbGV4IGNoZWNrczoKKyMjCisKKyMgICBTZWN1cml0eSByZWxhdGVkIGZ1bmN0aW9ucworIworTk9OQUdFTlRMSUJTPSRMSUJTCSAjIHNhdmUgb2xkIGxpYnJhcmllcworU1NIUFJPRz1ubworVExTUFJPRz1ubworaWYgdGVzdCAieCR0cnlvcGVuc3NsIiAhPSAieG5vIiAtYSAieCR0cnlvcGVuc3NsIiAhPSAieGludGVybmFsIjsgdGhlbgorICAgICMgY2hlY2sgZm9yIGxpYnBrY3MxMSBpZiBhc2tlZAorICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiAhPSAieHllcyIgLWEgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scGtjczExICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgogY2hhciBDX0luaXRpYWxpemUgKCk7CiBpbnQKIG1haW4gKCkKIHsKLUNfSW5pdGlhbGl6ZSAoKTsKK3JldHVybiBDX0luaXRpYWxpemUgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplPW5vCisgIGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID0geHllczsgdGhlbiA6CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCUEtDUzExIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MSUJQS0NTMTEgMSIgPj5jb25mZGVmcy5oCiAKLSAgICAgICAgICAgICAgTElCUEtDUzExPSItbHBrY3MxMSIKKwkJTElCUEtDUzExPSItbHBrY3MxMSIKIGZpCiAKICAgICBlbHNlCi0gICAgICBpZiB0ZXN0ICJ4JHRyeXJzYXJlZiIgIT0gInhubyI7IHRoZW4KLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBSU0FQcml2YXRlRGVjcnlwdCBpbiAtbHJzYXJlZiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBSU0FQcml2YXRlRGVjcnlwdCBpbiAtbHJzYXJlZi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgICAgICBpZiB0ZXN0ICJ4JHRyeXJzYXJlZiIgIT0gInhubyI7IHRoZW4KKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFJTQVByaXZhdGVEZWNyeXB0IGluIC1scnNhcmVmIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBSU0FQcml2YXRlRGVjcnlwdCBpbiAtbHJzYXJlZi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxyc2FyZWYgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBSU0FQcml2YXRlRGVjcnlwdCAoKTsKIGludAogbWFpbiAoKQogewotUlNBUHJpdmF0ZURlY3J5cHQgKCk7CityZXR1cm4gUlNBUHJpdmF0ZURlY3J5cHQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdD15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdD1ubworICBhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcnNhcmVmX1JTQVByaXZhdGVEZWNyeXB0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3JzYXJlZl9SU0FQcml2YXRlRGVjcnlwdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9yc2FyZWZfUlNBUHJpdmF0ZURlY3J5cHQiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJSU0FSRUYgMQogX0FDRU9GCkBAIC0yODIxNiw3MiArMjI5NzgsNDMgQEAKIAogZmkKIAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFJTQV9QS0NTMV9SU0FyZWYgaW4gLWxSU0FnbHVlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFJTQV9QS0NTMV9SU0FyZWYgaW4gLWxSU0FnbHVlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBSU0FfUEtDUzFfUlNBcmVmIGluIC1sUlNBZ2x1ZSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgUlNBX1BLQ1MxX1JTQXJlZiBpbiAtbFJTQWdsdWUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKIExJQlM9Ii1sUlNBZ2x1ZSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIFJTQV9QS0NTMV9SU0FyZWYgKCk7CiBpbnQKIG1haW4gKCkKIHsKLVJTQV9QS0NTMV9SU0FyZWYgKCk7CityZXR1cm4gUlNBX1BLQ1MxX1JTQXJlZiAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmPW5vCisgIGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWY9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmID0geWVzOyB0aGVuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9SU0FnbHVlX1JTQV9QS0NTMV9SU0FyZWYiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfUlNBZ2x1ZV9SU0FfUEtDUzFfUlNBcmVmIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX1JTQWdsdWVfUlNBX1BLQ1MxX1JTQXJlZiIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgogI2RlZmluZSBIQVZFX0xJQlJTQUdMVUUgMQogX0FDRU9GCkBAIC0yODI5MCw0ODYgKzIzMDIzLDQ5NCBAQAogCiBmaQogCi0gICAgICBmaQorICAgICAgICBmaQogCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEVWUF9tZDUgaW4gLWxjcnlwdG8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgRVZQX21kNSBpbiAtbGNyeXB0by4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIC1sZWF5MzIiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC1sZWF5MzIuLi4gIiA+JjY7IH0KKyAgICAgICAgbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSItbGVheTMyIgorICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD4KK2ludAorbWFpbiAoKQoreworcmV0dXJuIEVWUF9tZDUoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfTsgYWNfY3ZfbGliX2VheTMyX0VWUF9tZDU9eWVzOyBDUllQVE89ImVheTMyIgorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKworICAgICAgICBpZiB0ZXN0IHgkQ1JZUFRPID0geDsgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRVZQX21kNSBpbiAtbGNyeXB0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgRVZQX21kNSBpbiAtbGNyeXB0by4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfY3J5cHRvX0VWUF9tZDUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCiBMSUJTPSItbGNyeXB0byAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiCiAjZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiBjaGFyIEVWUF9tZDUgKCk7CiBpbnQKIG1haW4gKCkKIHsKLUVWUF9tZDUgKCk7CityZXR1cm4gRVZQX21kNSAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfY3J5cHRvX0VWUF9tZDU9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNT1ubworICBhY19jdl9saWJfY3J5cHRvX0VWUF9tZDU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1ID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEKLV9BQ0VPRgotCi0gICAgICAgICAgICAgIExJQkNSWVBUTz0iLWxjcnlwdG8iCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgPSB4eWVzOyB0aGVuIDoKKyAgQ1JZUFRPPSJjcnlwdG8iCiBmaQogCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFFU19jZmIxMjhfZW5jcnlwdCBpbiAtbGNyeXB0byIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBBRVNfY2ZiMTI4X2VuY3J5cHQgaW4gLWxjcnlwdG8uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9jcnlwdG9fQUVTX2NmYjEyOF9lbmNyeXB0K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCB4JENSWVBUTyAhPSB4OyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICBMSUJDUllQVE89Ii1sJHtDUllQVE99IgorICAgICAgICAgICAgYXNfYWNfTGliPWAkYXNfZWNobyAiYWNfY3ZfbGliXyR7Q1JZUFRPfScnX0FFU19jZmIxMjhfZW5jcnlwdCIgfCAkYXNfdHJfc2hgCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBBRVNfY2ZiMTI4X2VuY3J5cHQgaW4gLWwke0NSWVBUT30iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIEFFU19jZmIxMjhfZW5jcnlwdCBpbiAtbCR7Q1JZUFRPfS4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskYXNfYWNfTGliKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxjcnlwdG8gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitMSUJTPSItbCR7Q1JZUFRPfSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBBRVNfY2ZiMTI4X2VuY3J5cHQgKCk7CiBpbnQKIG1haW4gKCkKIHsKLUFFU19jZmIxMjhfZW5jcnlwdCAoKTsKK3JldHVybiBBRVNfY2ZiMTI4X2VuY3J5cHQgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2NyeXB0b19BRVNfY2ZiMTI4X2VuY3J5cHQ9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGV2YWwgIiRhc19hY19MaWI9eWVzIgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfY3J5cHRvX0FFU19jZmIxMjhfZW5jcnlwdD1ubworICBldmFsICIkYXNfYWNfTGliPW5vIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfY3J5cHRvX0FFU19jZmIxMjhfZW5jcnlwdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2NyeXB0b19BRVNfY2ZiMTI4X2VuY3J5cHQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2NyeXB0b19BRVNfY2ZiMTI4X2VuY3J5cHQgPSB5ZXM7IHRoZW4KK2V2YWwgYWNfcmVzPVwkJGFzX2FjX0xpYgorCSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX3JlcyIgPiY1CiskYXNfZWNobyAiJGFjX3JlcyIgPiY2OyB9CitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX0xpYiJcIiA9IHgieWVzIjsgdGhlbiA6CiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgRVZQX01EX0NUWF9jcmVhdGUgaW4gLWxjcnlwdG8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgRVZQX01EX0NUWF9jcmVhdGUgaW4gLWxjcnlwdG8uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9jcnlwdG9fRVZQX01EX0NUWF9jcmVhdGUrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKworICAgICAgICAgICAgYXNfYWNfTGliPWAkYXNfZWNobyAiYWNfY3ZfbGliXyR7Q1JZUFRPfScnX0VWUF9NRF9DVFhfY3JlYXRlIiB8ICRhc190cl9zaGAKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEVWUF9NRF9DVFhfY3JlYXRlIGluIC1sJHtDUllQVE99IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBFVlBfTURfQ1RYX2NyZWF0ZSBpbiAtbCR7Q1JZUFRPfS4uLiAiID4mNjsgfQoraWYgZXZhbCBcJHskYXNfYWNfTGliKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxjcnlwdG8gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitMSUJTPSItbCR7Q1JZUFRPfSAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciBFVlBfTURfQ1RYX2NyZWF0ZSAoKTsKIGludAogbWFpbiAoKQogewotRVZQX01EX0NUWF9jcmVhdGUgKCk7CityZXR1cm4gRVZQX01EX0NUWF9jcmVhdGUgKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2NyeXB0b19FVlBfTURfQ1RYX2NyZWF0ZT15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgZXZhbCAiJGFzX2FjX0xpYj15ZXMiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9jcnlwdG9fRVZQX01EX0NUWF9jcmVhdGU9bm8KKyAgZXZhbCAiJGFzX2FjX0xpYj1ubyIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2NyeXB0b19FVlBfTURfQ1RYX2NyZWF0ZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2NyeXB0b19FVlBfTURfQ1RYX2NyZWF0ZSIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfY3J5cHRvX0VWUF9NRF9DVFhfY3JlYXRlID0geWVzOyB0aGVuCitldmFsIGFjX3Jlcz1cJCRhc19hY19MaWIKKwkgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19yZXMiID4mNQorJGFzX2VjaG8gIiRhY19yZXMiID4mNjsgfQoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY19MaWIiXCIgPSB4InllcyI7IHRoZW4gOgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0VWUF9NRF9DVFhfQ1JFQVRFCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfRVZQX01EX0NUWF9DUkVBVEUgLyoqLyIgPj5jb25mZGVmcy5oCiAKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9FVlBfTURfQ1RYX0RFU1RST1kKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FVlBfTURfQ1RYX0RFU1RST1kgLyoqLyIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLSAgICBmaQotZWxpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBDX0luaXRpYWxpemUgaW4gLWxwa2NzMTEuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgICAgICAgIGZpCisgICAgICAgIGlmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiRFRMUyIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgRFRMU3YxX21ldGhvZCBpbiAtbHNzbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgRFRMU3YxX21ldGhvZCBpbiAtbHNzbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3NsX0RUTFN2MV9tZXRob2QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQogICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHBrY3MxMSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK0xJQlM9Ii1sc3NsIC1sY3J5cHRvICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIKICNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgorY2hhciBEVExTdjFfbWV0aG9kICgpOworaW50CittYWluICgpCit7CityZXR1cm4gRFRMU3YxX21ldGhvZCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3NsX0RUTFN2MV9tZXRob2Q9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zc2xfRFRMU3YxX21ldGhvZD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3NsX0RUTFN2MV9tZXRob2QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3NsX0RUTFN2MV9tZXRob2QiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3NsX0RUTFN2MV9tZXRob2QiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCU1NMX0RUTFMgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgICAgICAgICBMSUJDUllQVE89IiAtbHNzbCAkTElCQ1JZUFRPIgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiVGhlIERUTFMgYmFzZWQgdHJhbnNwb3J0cyByZXF1aXJlIHRoZSBsaWJzc2wgbGlicmFyeSBmcm9tIE9wZW5TU0wgdG8gYmUgYXZhaWxhYmxlIGFuZCBzdXBwb3J0IERUTFMiICIkTElORU5PIiA1CitmaQorCisgICAgICAgICAgICBUTFNQUk9HPXllcworICAgICAgICBmaQorICAgICAgICBpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIlRMUyIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU1NMX2xpYnJhcnlfaW5pdCBpbiAtbHNzbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgU1NMX2xpYnJhcnlfaW5pdCBpbiAtbHNzbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9saWJfc3NsX1NTTF9saWJyYXJ5X2luaXQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNzbCAtbGNyeXB0byAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKICAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBTU0xfbGlicmFyeV9pbml0ICgpOworaW50CittYWluICgpCit7CityZXR1cm4gU1NMX2xpYnJhcnlfaW5pdCAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfc3NsX1NTTF9saWJyYXJ5X2luaXQ9eWVzCitlbHNlCisgIGFjX2N2X2xpYl9zc2xfU1NMX2xpYnJhcnlfaW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3NsX1NTTF9saWJyYXJ5X2luaXQiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfc3NsX1NTTF9saWJyYXJ5X2luaXQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3NsX1NTTF9saWJyYXJ5X2luaXQiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCU1NMIDEiID4+Y29uZmRlZnMuaAorCisgICAgICAgICAgICAgICAgTElCQ1JZUFRPPSIgLWxzc2wgJExJQkNSWVBUTyIKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIlRoZSBEVExTIGJhc2VkIHRyYW5zcG9ydHMgcmVxdWlyZSB0aGUgbGlic3NsIGxpYnJhcnkgZnJvbSBPcGVuU1NMIHRvIGJlIGF2YWlsYWJsZSIgIiRMSU5FTk8iIDUKK2ZpCisKKyAgICAgICAgICAgIFRMU1BST0c9eWVzCisgICAgICAgIGZpCisgICAgICAgIGlmIGVjaG8gIiAkdHJhbnNwb3J0X3Jlc3VsdF9saXN0ICIgfCAkR1JFUCAiIFNTSCAiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwIGluIC1sc3NoMiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAgaW4gLWxzc2gyLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zc2gyX2xpYnNzaDJfc2Vzc2lvbl9zdGFydHVwKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxzc2gyICAkTElCUyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIGxpYnNzaDJfc2Vzc2lvbl9zdGFydHVwICgpOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfc2Vzc2lvbl9zdGFydHVwPXllcworZWxzZQorICBhY19jdl9saWJfc3NoMl9saWJzc2gyX3Nlc3Npb25fc3RhcnR1cD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfc3NoMl9saWJzc2gyX3Nlc3Npb25fc3RhcnR1cCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zc2gyX2xpYnNzaDJfc2Vzc2lvbl9zdGFydHVwIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3NzaDJfbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAiID0geHllczsgdGhlbiA6CisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCU1NIMiAxIiA+PmNvbmZkZWZzLmgKKworICAgICAgICAgICAgICAgIExJQkNSWVBUTz0iIC1sc3NoMiAkTElCQ1JZUFRPIgorZWxzZQorICBhc19mbl9lcnJvciAkPyAiVGhlIFNTSCB0cmFuc3BvcnQgcmVxdWlyZXMgdGhlIGxpYnNzaDIgbGlicmFyeSB0byBiZSBhdmFpbGFibGUiICIkTElORU5PIiA1CitmaQorCisgICAgICAgICAgICBTU0hQUk9HPXllcworICAgICAgICBmaQorICAgIGZpCitlbGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIENfSW5pdGlhbGl6ZSBpbiAtbHBrY3MxMSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQ19Jbml0aWFsaXplIGluIC1scGtjczExLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWxwa2NzMTEgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCiBjaGFyIENfSW5pdGlhbGl6ZSAoKTsKIGludAogbWFpbiAoKQogewotQ19Jbml0aWFsaXplICgpOworcmV0dXJuIENfSW5pdGlhbGl6ZSAoKTsKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemU9bm8KKyAgYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemU9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIExJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCUEtDUzExIDEKLV9BQ0VPRgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcGtjczExX0NfSW5pdGlhbGl6ZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfTElCUEtDUzExIDEiID4+Y29uZmRlZnMuaAogCi0gICAgICAgICAgICBMSUJQS0NTMTE9Ii1scGtjczExIgorICAgICAgICBMSUJQS0NTMTE9Ii1scGtjczExIgorZmkKKworZmkKK2lmIHRlc3QgIngkVExTUFJPRyIgPSAieHllcyI7IHRoZW4KKyAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIkVWUF9zaGEyMjQiICJhY19jdl9oYXZlX2RlY2xfRVZQX3NoYTIyNCIgIiNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfRVZQX3NoYTIyNCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FVlBfU0hBMjI0IC8qKi8iID4+Y29uZmRlZnMuaAorCitlbHNlCisgIDoKK2ZpCisKKyAgIGFjX2ZuX2NfY2hlY2tfZGVjbCAiJExJTkVOTyIgIkVWUF9zaGEzODQiICJhY19jdl9oYXZlX2RlY2xfRVZQX3NoYTM4NCIgIiNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgorIgoraWYgdGVzdCAieCRhY19jdl9oYXZlX2RlY2xfRVZQX3NoYTM4NCIgPSB4eWVzOyB0aGVuIDoKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9FVlBfU0hBMzg0IC8qKi8iID4+Y29uZmRlZnMuaAorCitlbHNlCisgIDoKIGZpCiAKIGZpCiAKLUxJQlM9JE5PTkFHRU5UTElCUworTElCUz0kTk9OQUdFTlRMSUJTCSAjIHJlc3RvcmUgb2xkIGxpYnJhcmllcworaWYgdGVzdCAieCRTU0hQUk9HIiA9ICJ4eWVzIjsgdGhlbgorICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRT0nJworICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0U9JyMnCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19UUlVFPScjJworICAgIE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0U9JycKK2ZpCitpZiB0ZXN0ICJ4JFRMU1BST0ciID0gInh5ZXMiIC1hICJ4JGVuYWJsZV9yZWFkX29ubHkiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUU9JycKKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFPScjJworZWxzZQorICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfVFJVRT0nIycKKyAgICBORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFPScnCitmaQoraWYgZWNobyAiICR7c2VjdXJpdHlfbW9kX2xpc3R9ICIgfCBncmVwICcgdXNtICcgOyB0aGVuCisgICAgaWYgdGVzdCAieCRlbmFibGVfcmVhZF9vbmx5IiAhPSAieHllcyIgOyB0aGVuCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRT0nJworICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFPScjJworICAgIGVsc2UKKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFPScjJworICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFPScnCisgICAgZmkKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUU9JyMnCisgICAgTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRT0nJworZmkKK2lmIHRlc3QgIngkZW5hYmxlX3JlYWRfb25seSIgIT0gInh5ZXMiIDsgdGhlbgorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRT0iIgorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0U9IiMiCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFPSIjIgorICAgIE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0U9IiIKK2ZpCiAKLSMgY2hlY2sgZm9yIHRjcCB3cmFwcGVyIHN1cHBvcnQKKworCisKKworCisKKworCisjCisjIElmIHdlJ3JlIHVzaW5nIGludGVybmFsIGNyeXB0byBzdXBwb3J0IHdlIG5lZWQgdG8gY29tcGlsZSBpbiBleHRyYSBmaWxlcworIworY3J5cHRvX2ZpbGVzX2M9IiIKK2NyeXB0b19maWxlc19vPSIiCitjcnlwdG9fZmlsZXNfbG89IiIKK2lmIHRlc3QgIngkdHJ5b3BlbnNzbCIgIT0gInhubyIgLWEgIngkQ1JZUFRPIiA9ICJ4IjsgdGhlbgorICAgIyBJZiB3ZToKKyAgICMgICAxKSBjb3VsZG4ndCBmaW5kIG5lZWRlZCBvcGVuc3NsIHN1cHBvcnQKKyAgICMgICAyKSBPUiB3ZXJlIGFza2VkIHRvIHVzZSBpbnRlcm5hbCBzdXBwb3J0CisgICAjICAgMykgQU5EIHdlIGhhdmUgdGhlIG5lZWRlZCBmaWxlcworICAgIyB0aGVuIHVzZSBpdAorICAgQ1JZUFRPPSJpbnRlcm5hbCIKKyAgIGNyeXB0b19maWxlc19jPSJvcGVuc3NsL29wZW5zc2xfc2hhMS5jIG9wZW5zc2wvb3BlbnNzbF9tZDUuYyBvcGVuc3NsL29wZW5zc2xfc2V0X2tleS5jIG9wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMgb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYyBvcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jIG9wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jIG9wZW5zc2wvb3BlbnNzbF9jZmIxMjguYyIKKyAgIGNyeXB0b19maWxlc19vPSJvcGVuc3NsL29wZW5zc2xfc2hhMS5vIG9wZW5zc2wvb3BlbnNzbF9tZDUubyBvcGVuc3NsL29wZW5zc2xfc2V0X2tleS5vIG9wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLm8gb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubyBvcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5vIG9wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5vbyBvcGVuc3NsL29wZW5zc2xfY2ZiMTI4Lm8iCisgICBjcnlwdG9fZmlsZXNfbG89Im9wZW5zc2wvb3BlbnNzbF9zaGExLmxvIG9wZW5zc2wvb3BlbnNzbF9tZDUubG8gb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkubG8gb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubG8gb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubG8gb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIubG8gb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmxvIG9wZW5zc2wvb3BlbnNzbF9jZmIxMjgubG8iCisgICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisKKworIworIyBpZiB3ZSBjYW4gZG8gYW55IHNvcnQgb2YgY3J5cHRvIHRoZW4gbm90ZSBpdAorIworaWYgdGVzdCAieCRDUllQVE8iICE9ICJ4IiA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9DQU5fRE9fQ1JZUFRPIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisjICAgVENQIHdyYXBwZXIgc3VwcG9ydAorIwogX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKIF9sZGZsYWdzPSIke0xERkxBR1N9IgotCi0KLSMgQ2hlY2sgd2hldGhlciAtLXdpdGgtbGlid3JhcCBvciAtLXdpdGhvdXQtbGlid3JhcCB3YXMgZ2l2ZW4uCi1pZiB0ZXN0ICIke3dpdGhfbGlid3JhcCtzZXR9IiA9IHNldDsgdGhlbgotICB3aXRodmFsPSIkd2l0aF9saWJ3cmFwIgotCi0gIGlmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJubyI7IHRoZW4KLSAgICBpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAieWVzIjsgdGhlbgotICAgICAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9IC1JJHdpdGhfbGlid3JhcC9pbmNsdWRlIgotICAgICAgTERGTEFHUz0iJHtMREZMQUdTfSAtTCR3aXRoX2xpYndyYXAvbGliIgotICAgIGZpCi0KLSAgICBfbGlicz0ke0xJQlN9Ci0gICAgaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfdGNwZF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdGNwZC5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRjcGQuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3RjcGRfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGNwZF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfdGNwZF9oIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGNwZC5oIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHRjcGQuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8dGNwZC5oPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdGNwZC5oIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgdGNwZC5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8dGNwZC5oPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQoraWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gIm5vIjsgdGhlbgorICBpZiB0ZXN0ICIkd2l0aF9saWJ3cmFwIiAhPSAieWVzIjsgdGhlbgorICAgIENQUEZMQUdTPSIke0NQUEZMQUdTfSAtSSR3aXRoX2xpYndyYXAvaW5jbHVkZSIKKyAgICBMREZMQUdTPSIke0xERkxBR1N9IC1MJHdpdGhfbGlid3JhcC9saWIiCiAgIGZpCisKKyAgX2xpYnM9JHtMSUJTfQorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidGNwZC5oIiAiYWNfY3ZfaGVhZGVyX3RjcGRfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl9oZWFkZXJfdGNwZF9oIiA9IHh5ZXM7IHRoZW4gOgorCiBlbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogdGNwZC5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHRjcGQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiB0Y3BkLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHRjcGQuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogdGNwZC5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiB0Y3BkLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHRjcGQuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0Y3BkLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90Y3BkX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3RjcGRfaD0kYWNfaGVhZGVyX3ByZXByb2MKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3RjcGRfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3RjcGRfaCIgPiY2Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfdGNwZF9oID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCB0Y3BkLmguIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgdGNwZC5oLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICBhc19mbl9lcnJvciAkPyAiQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCB0Y3BkLmguIiAiJExJTkVOTyIgNQogZmkKIAogCiAKLSAgICBMSUJTPSIkTElCUyAtbHdyYXAiCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwLi4uICRFQ0hPX0MiID4mNgotCSMgWFhYOiBzaG91bGQgY2hlY2sgZm9yIGhvc3RzX2N0bAotCWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBMSUJTPSIkTElCUyAtbHdyYXAiCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwLi4uICIgPiY2OyB9CisgICMgWFhYOiBzaG91bGQgY2hlY2sgZm9yIGhvc3RzX2N0bAorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0JCSAgICAgI2luY2x1ZGUgPHRjcGQuaD4KLQkJICAgICBpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOwotCQkgICAgIGludCBkZW55X3NldmVyaXR5ICA9IDA7Ci0KKyAgICAgI2luY2x1ZGUgPHRjcGQuaD4KKyAgICAgaW50IGFsbG93X3NldmVyaXR5ID0gMDsKKyAgICAgaW50IGRlbnlfc2V2ZXJpdHkgID0gMDsKIGludAogbWFpbiAoKQogewpAQCAtMjg3NzgsMjA1ICsyMzUxOSw1OCBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorICAgICAkYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9MSUJXUkFQIDEiID4+Y29uZmRlZnMuaAogCi0KLQkgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0JICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX0xJQldSQVAgMQotX0FDRU9GCi0KLQkgICAgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCi0JICAgIF93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAiCisgICAgIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgorICAgICBfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIgogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKyAgICAgIyBMaW51eCBSZWRIYXQgNi4xIHdvbid0IGxpbmsgbGlid3JhcCB3aXRob3V0IGxpYm5zbAorICAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ5cF9nZXRfZGVmYXVsdF9kb21haW4iICJhY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW4iID0geHllczsgdGhlbiA6CiAKLQotCSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci0JICAgICMgTGludXggUmVkSGF0IDYuMSB3b24ndCBsaW5rIGxpYndyYXAgd2l0aG91dCBsaWJuc2wKLQkgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB5cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgeXBfZ2V0X2RlZmF1bHRfZG9tYWluLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSB5cF9nZXRfZGVmYXVsdF9kb21haW4gdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyB5cF9nZXRfZGVmYXVsdF9kb21haW4uCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIGlubm9jdW91c195cF9nZXRfZGVmYXVsdF9kb21haW4KLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgeXBfZ2V0X2RlZmF1bHRfZG9tYWluICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmIHlwX2dldF9kZWZhdWx0X2RvbWFpbgotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIHlwX2dldF9kZWZhdWx0X2RvbWFpbiAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl95cF9nZXRfZGVmYXVsdF9kb21haW4pIHx8IGRlZmluZWQgKF9fc3R1Yl9fX3lwX2dldF9kZWZhdWx0X2RvbWFpbikKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0geXBfZ2V0X2RlZmF1bHRfZG9tYWluOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IHlwX2dldF9kZWZhdWx0X2RvbWFpbjsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW49bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY195cF9nZXRfZGVmYXVsdF9kb21haW4gPSB5ZXM7IHRoZW4KLSAgOgotZWxzZQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHlwX2dldF9kZWZhdWx0X2RvbWFpbiBpbiAtbG5zbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB5cF9nZXRfZGVmYXVsdF9kb21haW4gaW4gLWxuc2wuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHlwX2dldF9kZWZhdWx0X2RvbWFpbiBpbiAtbG5zbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgeXBfZ2V0X2RlZmF1bHRfZG9tYWluIGluIC1sbnNsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKICAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwogTElCUz0iLWxuc2wgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICJDIgogI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwogY2hhciB5cF9nZXRfZGVmYXVsdF9kb21haW4gKCk7CiBpbnQKIG1haW4gKCkKIHsKLXlwX2dldF9kZWZhdWx0X2RvbWFpbiAoKTsKK3JldHVybiB5cF9nZXRfZGVmYXVsdF9kb21haW4gKCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluPW5vCisgIGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CiBMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbiA9IHllczsgdGhlbgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfbnNsX3lwX2dldF9kZWZhdWx0X2RvbWFpbiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9uc2xfeXBfZ2V0X2RlZmF1bHRfZG9tYWluIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX25zbF95cF9nZXRfZGVmYXVsdF9kb21haW4iID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9MSUJOU0wgMQogX0FDRU9GCkBAIC0yODk4NywxOSArMjM1ODEsMTQgQEAKIAogZmkKIAotCSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCBsaW5rZWQgd2l0aCAtbG5zbCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAgbGlua2VkIHdpdGggLWxuc2wuLi4gJEVDSE9fQyIgPiY2Ci0JICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXAgbGlua2VkIHdpdGggLWxuc2wiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCBsaW5rZWQgd2l0aCAtbG5zbC4uLiAiID4mNjsgfQorICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0JCSAgICAgICAgICNpbmNsdWRlIDx0Y3BkLmg+Ci0JCSAgICAgICAgIGludCBhbGxvd19zZXZlcml0eSA9IDA7Ci0JICAgICAgICAgICAgICAgICBpbnQgZGVueV9zZXZlcml0eSAgPSAwOwotCisJI2luY2x1ZGUgPHRjcGQuaD4KKwlpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOworCWludCBkZW55X3NldmVyaXR5ICA9IDA7CiBpbnQKIG1haW4gKCkKIHsKQEAgLTI5MDA4LDI2NzMgKzIzNTk3LDM2MiBAQAogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLQkJCWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX0xJQldSQVAgMQotX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfTElCV1JBUCAxIiA+PmNvbmZkZWZzLmgKIAotCQkJdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCi0JCQlfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIC1sbnNsIgorCXRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgorCV93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAgLWxuc2wiCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLQkJCXsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEFza2VkIHRvIHVzZSBsaWJ3cmFwIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCWFzX2ZuX2Vycm9yICQ/ICJBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgIiRMSU5FTk8iIDUKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICAgIExBR0VOVExJQlM9IiRfd3JhcGxpYnMiCi0gICAgQ1BQRkxBR1M9JHtfY3BwZmxhZ3N9Ci0gICAgTERGTEFHUz0ke19sZGZsYWdzfQotICAgIExJQlM9JHtfbGlic30KLSAgZmkKLQotZmk7CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorICBMQUdFTlRMSUJTPSIkX3dyYXBsaWJzIgorICBDUFBGTEFHUz0ke19jcHBmbGFnc30KKyAgTERGTEFHUz0ke19sZGZsYWdzfQorICBMSUJTPSR7X2xpYnN9CitmaQogCiAKLQotZm9yIGFjX2hlYWRlciBpbiBycG0vcnBtbGliLmggcnBtL2hlYWRlci5oCisjIworIyAgIG15c3FsCisjIworaWYgdGVzdCAieCR3aXRoX215c3FsIiA9ICJ4eWVzIiA7IHRoZW4KKyAgZm9yIGFjX3Byb2cgaW4gbXlzcWxfY29uZmlnCiBkbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKKyAgIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICIkYWNfcHJvZyIsIHNvIGl0IGNhbiBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3MuCitzZXQgZHVtbXkgJGFjX3Byb2c7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX01ZU1FMQ09ORklHKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQorICBjYXNlICRNWVNRTENPTkZJRyBpbgorICBbXFwvXSogfCA/OltcXC9dKikKKyAgYWNfY3ZfcGF0aF9NWVNRTENPTkZJRz0iJE1ZU1FMQ09ORklHIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KKyAgOzsKKyAgKikKKyAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZm9yIGFzX2RpciBpbiAkUEFUSAorZG8KKyAgSUZTPSRhc19zYXZlX0lGUworICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgorICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICBpZiB7IHRlc3QgLWYgIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiICYmICRhc190ZXN0X3ggIiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiOyB9OyB0aGVuCisgICAgYWNfY3ZfcGF0aF9NWVNRTENPTkZJRz0iJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKKyAgICBicmVhayAyCiAgIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCiAKLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7CisgIDs7CiBlc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCitNWVNRTENPTkZJRz0kYWNfY3ZfcGF0aF9NWVNRTENPTkZJRworaWYgdGVzdCAtbiAiJE1ZU1FMQ09ORklHIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJE1ZU1FMQ09ORklHIiA+JjUKKyRhc19lY2hvICIkTVlTUUxDT05GSUciID4mNjsgfQogZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiBmaQogCisKKyAgdGVzdCAtbiAiJE1ZU1FMQ09ORklHIiAmJiBicmVhawogZG9uZQogCisgIHRlc3QgLXggIiRNWVNRTENPTkZJRyIgXAorCXx8IGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBteXNxbF9jb25maWcgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIE15U1FMIHN1cHBvcnQiICIkTElORU5PIiA1CisgIE1ZU1FMX0xJQlM9YCRNWVNRTENPTkZJRyAtLWxpYnNgCisgIE1ZU1FMX0lOQ0xVREVTPWAkTVlTUUxDT05GSUcgLS1pbmNsdWRlYAorICBfbGlicz0iJHtMSUJTfSIKKyAgX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKKyAgTElCUz0iJHtMSUJTfSAke01ZU1FMX0xJQlN9IgorICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gJHtNWVNRTF9JTkNMVURFU30iCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX21vbmdyZWwgIiRMSU5FTk8iICJteXNxbC5oIiAiYWNfY3ZfaGVhZGVyX215c3FsX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX215c3FsX2giID0geHllczsgdGhlbiA6CiAKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbS9ycG1saWIuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG0vcnBtbGliLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCIgPiY2CiBlbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHJwbS9ycG1saWIuaCB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBycG0vcnBtbGliLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHJwbS9ycG1saWIuaCBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHJwbS9ycG1saWIuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL3JwbWxpYi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL3JwbWxpYi5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vcnBtbGliLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9ycG1saWIuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtL3JwbWxpYi5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbS9ycG1saWIuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3JwbV9ycG1saWJfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcnBtX3JwbWxpYl9oIiA+JjYKLQotZmkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9ycG1fcnBtbGliX2ggPSB5ZXM7IHRoZW4KLSAgcnBtbGliX2g9eWVzCi1lbHNlCi0gIHJwbWxpYl9oPW5vCisgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCBteXNxbC5oIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBNeVNRTCBzdXBwb3J0IiAiJExJTkVOTyIgNQogZmkKIAogCi1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG0vaGVhZGVyLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtL2hlYWRlci5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2giID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2giID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBycG0vaGVhZGVyLmggdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgcnBtL2hlYWRlci5oIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDxycG0vaGVhZGVyLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBycG0vaGVhZGVyLmggcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBycG0vaGVhZGVyLmggcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxycG0vaGVhZGVyLmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcnBtL2hlYWRlci5oOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHJwbS9oZWFkZXIuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcnBtL2hlYWRlci5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBycG0vaGVhZGVyLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbS9oZWFkZXIuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBycG0vaGVhZGVyLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9ycG1faGVhZGVyX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaD0kYWNfaGVhZGVyX3ByZXByb2MKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3JwbV9oZWFkZXJfaCIgPiY2Ci0KLWZpCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfcnBtX2hlYWRlcl9oID0geWVzOyB0aGVuCi0gIHJwbWhlYWRlcl9oPXllcwotZWxzZQotICBycG1oZWFkZXJfaD1ubwotZmkKLQotCi0KLWlmIHRlc3QgIngkcnBtaGVhZGVyX2giID0gInhubyIgLW8gIngkcnBtbGliX2giID0gInhubyIgOyB0aGVuCi0gIGlmIHRlc3QgIngkd2l0aF9ycG0iID0gInh5ZXMiIDsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENvdWxkIG5vdCBmaW5kIGVpdGhlciB0aGUgUlBNIGhlYWRlciBmaWxlcyBuZWVkZWQgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIFJQTSBzdXBwb3J0IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IENvdWxkIG5vdCBmaW5kIGVpdGhlciB0aGUgUlBNIGhlYWRlciBmaWxlcyBuZWVkZWQgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIFJQTSBzdXBwb3J0IiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGVsc2UKLSAgICB3aXRoX3JwbT1ubwotICBmaQotZmkKLQotIwotIyBycG0gbGlicmFyaWVzIG9ubHkgbmVlZGVkIGZvciB0aGUgaG9zdCByZXNvdXJjZXMgbWliIHNvZnR3YXJlCi0jIGluc3RhbGxlZCB0YWJsZXMgKG9uIGxpbnV4IGluIHBhcnRpY3VsYXIpCi0jCi1pZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIiAmJiBcCi0gICAgICAgIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiBob3N0L2hyX3N3aW5zdCAiID4gL2Rldi9udWxsOyB0aGVuCi0gICMgQVJHLiAgUlBNIGlzIGEgcmVhbCBwYWluLgotICAjIEZXSVcgbGlicnBtLmxhLCBsaWJycG1pby5sYSwgYW5kIGxpYnBvcHQubGEgaGF2ZSBjb3JyZWN0IGRlcGVuZGVuY2llcy4KLSAgX3JwbWxpYnM9IiIKLQotICAjIHJwbS00LjAueCBuZWVkcyBycG1pby4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBycG1HZXRQYXRoIGluIC1scnBtaW8iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtR2V0UGF0aCBpbiAtbHJwbWlvLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcnBtaW9fcnBtR2V0UGF0aCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbHJwbWlvICRfcnBtbGlicyAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgTVlfSU5JVCgpIHdvcmtzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgTVlfSU5JVCgpIHdvcmtzLi4uICIgPiY2OyB9CisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBycG1HZXRQYXRoICgpOworICAgICNpbmNsdWRlIDxteV9nbG9iYWwuaD4KKyAgICAgICAgI2luY2x1ZGUgPG15X3N5cy5oPgogaW50CiBtYWluICgpCiB7Ci1ycG1HZXRQYXRoICgpOworTVlfSU5JVCgibXlfaW5pdF90ZXN0IikKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfcnBtaW9fcnBtR2V0UGF0aD15ZXMKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKLWFjX2N2X2xpYl9ycG1pb19ycG1HZXRQYXRoPW5vCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0JST0tFTl9MSUJNWVNRTENMSUVOVCAxIiA+PmNvbmZkZWZzLmgKKwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9ycG1pb19ycG1HZXRQYXRoIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcnBtaW9fcnBtR2V0UGF0aCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfcnBtaW9fcnBtR2V0UGF0aCA9IHllczsgdGhlbgotICBfcnBtbGlicz0iLWxycG1pbyAkX3JwbWxpYnMiCi1maQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgQ1BQRkxBR1M9IiR7X2NwcGZsYWdzfSIKKyAgTElCUz0iJHtfbGlic30iCiAKLQotICAjIG5vdyBjaGVjayBmb3IgcnBtIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJpZXMuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnBtR2V0RmlsZXN5c3RlbUxpc3QgaW4gLWxycG0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnBtR2V0RmlsZXN5c3RlbUxpc3QgaW4gLWxycG0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9ycG1fcnBtR2V0RmlsZXN5c3RlbUxpc3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxycG0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcnBtR2V0RmlsZXN5c3RlbUxpc3QgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJwbUdldEZpbGVzeXN0ZW1MaXN0ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9ycG1fcnBtR2V0RmlsZXN5c3RlbUxpc3Q9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9ycG1fcnBtR2V0RmlsZXN5c3RlbUxpc3Q9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfcnBtX3JwbUdldEZpbGVzeXN0ZW1MaXN0IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfcnBtX3JwbUdldEZpbGVzeXN0ZW1MaXN0IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9ycG1fcnBtR2V0RmlsZXN5c3RlbUxpc3QgPSB5ZXM7IHRoZW4KLQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCUlBNIDEKLV9BQ0VPRgotCi0gICAgTE1JQkxJQlM9Ii1scnBtICRfcnBtbGlicyAkTE1JQkxJQlMiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1JL3Vzci9pbmNsdWRlL3JwbSIKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICBNWVNRTCBUcmFwIExvZ2dpbmc6ICAgICAgICAgZW5hYmxlZAorRU9GCiAKIGVsc2UKIAotICAgICMgcnBtLTQuMC4zIGxpYnJwbWRiIGFjdHVhbGx5IGNvbnRhaW5zIHdoYXQgd2UgbmVlZC4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJwbWRiT3BlbiBpbiAtbHJwbWRiIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHJwbWRiT3BlbiBpbiAtbHJwbWRiLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcnBtZGJfcnBtZGJPcGVuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scnBtZGIgLWxycG0gJF9ycG1saWJzICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcnBtZGJPcGVuICgpOwotaW50Ci1tYWluICgpCi17Ci1ycG1kYk9wZW4gKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3JwbWRiX3JwbWRiT3Blbj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3JwbWRiX3JwbWRiT3Blbj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9ycG1kYl9ycG1kYk9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9ycG1kYl9ycG1kYk9wZW4iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3JwbWRiX3JwbWRiT3BlbiA9IHllczsgdGhlbgotCi0gICAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQlJQTSAxCi1fQUNFT0YKLQotICAgICAgTE1JQkxJQlM9Ii1scnBtZGIgLWxycG0gJF9ycG1saWJzICRMTUlCTElCUyIKLSAgICAgIENGTEFHUz0iJENGTEFHUyAtSS91c3IvaW5jbHVkZS9ycG0iCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgTVlTUUwgVHJhcCBMb2dnaW5nOiAgICAgICAgIHVuYXZhaWxhYmxlCitFT0YKIAogZmkKIAogCi1maQogCiAKLSAgIyBycG0gNC42IGhhcyBpbmNvbXBhdGlibGUgQVBJLCB0dXJuIG9uIHRoZSBsZWdhY3kgb25lCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIGhlYWRlckdldEVudHJ5IGlzIGRlY2xhcmVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBoZWFkZXJHZXRFbnRyeSBpcyBkZWNsYXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KLQotCi1pbnQKLW1haW4gKCkKLXsKLSNpZm5kZWYgaGVhZGVyR2V0RW50cnkKLSAgY2hhciAqcCA9IChjaGFyICopIGhlYWRlckdldEVudHJ5OwotI2VuZGlmCi0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnk9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2hhdmVfZGVjbF9oZWFkZXJHZXRFbnRyeT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX2RlY2xfaGVhZGVyR2V0RW50cnkiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGF2ZV9kZWNsX2hlYWRlckdldEVudHJ5ID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgX1JQTV80XzRfQ09NUEFUCi1fQUNFT0YKLQotZmkKLQotZmkKLQotIyBsaWJrdm0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX3JlYWQgaW4gLWxrdm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX3JlYWQgaW4gLWxrdm0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rdm1fa3ZtX3JlYWQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxrdm0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX3JlYWQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWt2bV9yZWFkICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9rdm1fa3ZtX3JlYWQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rdm1fa3ZtX3JlYWQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfa3ZtX2t2bV9yZWFkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3ZtX2t2bV9yZWFkIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rdm1fa3ZtX3JlYWQgPSB5ZXM7IHRoZW4KLSAgX2xpYmt2bT0iLWxrdm0iCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9vcGVuZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Iga3ZtX29wZW5maWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19rdm1fb3BlbmZpbGVzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGt2bV9vcGVuZmlsZXMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBrdm1fb3BlbmZpbGVzLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGt2bV9vcGVuZmlsZXMgaW5ub2N1b3VzX2t2bV9vcGVuZmlsZXMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIga3ZtX29wZW5maWxlcyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBrdm1fb3BlbmZpbGVzCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX29wZW5maWxlcyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl9rdm1fb3BlbmZpbGVzKSB8fCBkZWZpbmVkIChfX3N0dWJfX19rdm1fb3BlbmZpbGVzKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBrdm1fb3BlbmZpbGVzOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9IGt2bV9vcGVuZmlsZXM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19rdm1fb3BlbmZpbGVzPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2t2bV9vcGVuZmlsZXM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2t2bV9vcGVuZmlsZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfa3ZtX29wZW5maWxlcyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2t2bV9vcGVuZmlsZXMgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9LVk1fT1BFTkZJTEVTIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX29wZW5maWxlcyBpbiAtbGt2bSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fb3BlbmZpbGVzIGluIC1sa3ZtLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfa3ZtX2t2bV9vcGVuZmlsZXMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxrdm0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX29wZW5maWxlcyAoKTsKLWludAotbWFpbiAoKQotewota3ZtX29wZW5maWxlcyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfa3ZtX2t2bV9vcGVuZmlsZXM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rdm1fa3ZtX29wZW5maWxlcz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rdm1fa3ZtX29wZW5maWxlcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2t2bV9rdm1fb3BlbmZpbGVzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rdm1fa3ZtX29wZW5maWxlcyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0tWTV9PUEVORklMRVMgMQotX0FDRU9GCi0KLQlfbGlia3ZtPSItbGt2bSIKLWZpCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX2dldHByb2NzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9nZXRwcm9jcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19rdm1fZ2V0cHJvY3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUga3ZtX2dldHByb2NzIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMga3ZtX2dldHByb2NzLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGt2bV9nZXRwcm9jcyBpbm5vY3VvdXNfa3ZtX2dldHByb2NzCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGt2bV9nZXRwcm9jcyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBrdm1fZ2V0cHJvY3MKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBrdm1fZ2V0cHJvY3MgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfa3ZtX2dldHByb2NzKSB8fCBkZWZpbmVkIChfX3N0dWJfX19rdm1fZ2V0cHJvY3MpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGt2bV9nZXRwcm9jczsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBrdm1fZ2V0cHJvY3M7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19rdm1fZ2V0cHJvY3M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfa3ZtX2dldHByb2NzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19rdm1fZ2V0cHJvY3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfa3ZtX2dldHByb2NzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfa3ZtX2dldHByb2NzID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfS1ZNX0dFVFBST0NTIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Iga3ZtX2dldHByb2NzIGluIC1sa3ZtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGt2bV9nZXRwcm9jcyBpbiAtbGt2bS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX2t2bV9rdm1fZ2V0cHJvY3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxrdm0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX2dldHByb2NzICgpOwotaW50Ci1tYWluICgpCi17Ci1rdm1fZ2V0cHJvY3MgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX2t2bV9rdm1fZ2V0cHJvY3M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9rdm1fa3ZtX2dldHByb2NzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2t2bV9rdm1fZ2V0cHJvY3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9rdm1fa3ZtX2dldHByb2NzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9rdm1fa3ZtX2dldHByb2NzID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfS1ZNX0dFVFBST0NTIDEKLV9BQ0VPRgotCi0JX2xpYmt2bT0iLWxrdm0iCi1maQotCi1maQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9nZXRzd2FwaW5mbyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fZ2V0c3dhcGluZm8uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIGt2bV9nZXRzd2FwaW5mbyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIGt2bV9nZXRzd2FwaW5mby4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBrdm1fZ2V0c3dhcGluZm8gaW5ub2N1b3VzX2t2bV9nZXRzd2FwaW5mbwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBrdm1fZ2V0c3dhcGluZm8gKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYga3ZtX2dldHN3YXBpbmZvCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIga3ZtX2dldHN3YXBpbmZvICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX2t2bV9nZXRzd2FwaW5mbykgfHwgZGVmaW5lZCAoX19zdHViX19fa3ZtX2dldHN3YXBpbmZvKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBrdm1fZ2V0c3dhcGluZm87Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0ga3ZtX2dldHN3YXBpbmZvOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2t2bV9nZXRzd2FwaW5mbz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfa3ZtX2dldHN3YXBpbmZvIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2t2bV9nZXRzd2FwaW5mbyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX2t2bV9nZXRzd2FwaW5mbyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0tWTV9HRVRTV0FQSU5GTyAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGt2bV9nZXRzd2FwaW5mbyBpbiAtbGt2bSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBrdm1fZ2V0c3dhcGluZm8gaW4gLWxrdm0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9rdm1fa3ZtX2dldHN3YXBpbmZvK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sa3ZtICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGt2bV9nZXRzd2FwaW5mbyAoKTsKLWludAotbWFpbiAoKQotewota3ZtX2dldHN3YXBpbmZvICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9rdm1fa3ZtX2dldHN3YXBpbmZvPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfa3ZtX2t2bV9nZXRzd2FwaW5mbz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9rdm1fa3ZtX2dldHN3YXBpbmZvIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfa3ZtX2t2bV9nZXRzd2FwaW5mbyIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfa3ZtX2t2bV9nZXRzd2FwaW5mbyA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0tWTV9HRVRTV0FQSU5GTyAxCi1fQUNFT0YKLQotCV9saWJrdm09Ii1sa3ZtIgotZmkKLQotZmkKLQotaWYgdGVzdCAieCR7X2xpYmt2bX0iICE9ICJ4IjsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0xJQktWTSAxCi1fQUNFT0YKLQotCUxBR0VOVExJQlM9IiRMQUdFTlRMSUJTICR7X2xpYmt2bX0iCi1maQotCi0jIERZTkFNSUMgTU9EVUxFIFNVUFBPUlQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRsb3Blbi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfZnVuY19kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgZGxvcGVuIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZGxvcGVuLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lIGRsb3BlbiBpbm5vY3VvdXNfZGxvcGVuCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGRsb3BlbiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBkbG9wZW4KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBkbG9wZW4gKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZGxvcGVuKSB8fCBkZWZpbmVkIChfX3N0dWJfX19kbG9wZW4pCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IGRsb3BlbjsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBkbG9wZW47Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19kbG9wZW49eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfZGxvcGVuPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19kbG9wZW4iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfZGxvcGVuIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfZGxvcGVuID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfRExPUEVOIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZGxvcGVuIGluIC1sZGwuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9kbF9kbG9wZW4rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkbCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBkbG9wZW4gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWRsb3BlbiAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfZGxfZGxvcGVuPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfZGxfZGxvcGVuPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2RsX2Rsb3BlbiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfZGxfZGxvcGVuID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfRExPUEVOIDEKLV9BQ0VPRgotCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCREwgMQotX0FDRU9GCi0KLQlMTUlCTElCUz0iJHtMTUlCTElCU30gLWxkbCIKLWZpCi0KLWZpCi0KKyMjCisjICAgTm9uLWxpYnJhcnkgY2hlY2tzCisjIwogCiAjIG5saXN0Ci0KLQotCiBmb3IgYWNfZnVuYyBpbiBubGlzdCBubGlzdDY0IGtubGlzdAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKIF9BQ0VPRgogCiBmaQogZG9uZQogCiAKLSMgd2hldGhlciB3ZSBuZWVkIC1sZGV2c3RhdCBmb3IgZGlza2lvIE1JQgotZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIHVjZC1zbm1wL2Rpc2tpbyAiID4vZGV2L251bGwKLWlmIHRlc3QgJD8gLWVxIDAgOyB0aGVuCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRkZXZzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGRldnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZ2V0ZGV2cytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBnZXRkZXZzIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0ZGV2cy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBnZXRkZXZzIGlubm9jdW91c19nZXRkZXZzCiAKLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGRldnMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZ2V0ZGV2cwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGRldnMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0ZGV2cykgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0ZGV2cykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZ2V0ZGV2czsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBnZXRkZXZzOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZ2V0ZGV2cz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19nZXRkZXZzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19nZXRkZXZzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2dldGRldnMiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRkZXZzID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfR0VUREVWUyAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldGRldnMgaW4gLWxkZXZzdGF0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGRldnMgaW4gLWxkZXZzdGF0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGV2c3RhdF9nZXRkZXZzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sZGV2c3RhdCAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRkZXZzICgpOwotaW50Ci1tYWluICgpCi17Ci1nZXRkZXZzICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9kZXZzdGF0X2dldGRldnM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9kZXZzdGF0X2dldGRldnM9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZGV2c3RhdF9nZXRkZXZzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGV2c3RhdF9nZXRkZXZzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9kZXZzdGF0X2dldGRldnMgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9HRVRERVZTIDEKLV9BQ0VPRgotCi0JCUxNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGRldnN0YXQiCi1maQotCi1maQotCi0JZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRkZXZzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldGRldnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfZ2V0ZGV2cytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBnZXRkZXZzIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0ZGV2cy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBnZXRkZXZzIGlubm9jdW91c19nZXRkZXZzCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIGdldGRldnMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgZ2V0ZGV2cwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldGRldnMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfZ2V0ZGV2cykgfHwgZGVmaW5lZCAoX19zdHViX19fZ2V0ZGV2cykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gZ2V0ZGV2czsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBnZXRkZXZzOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfZ2V0ZGV2cz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfZnVuY19nZXRkZXZzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19nZXRkZXZzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX2dldGRldnMiID4mNgotaWYgdGVzdCAkYWNfY3ZfZnVuY19nZXRkZXZzID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfREVWU1RBVF9HRVRERVZTIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZGV2c3RhdF9nZXRkZXZzIGluIC1sZGV2c3RhdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBkZXZzdGF0X2dldGRldnMgaW4gLWxkZXZzdGF0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZGV2c3RhdF9kZXZzdGF0X2dldGRldnMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxkZXZzdGF0ICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGRldnN0YXRfZ2V0ZGV2cyAoKTsKLWludAotbWFpbiAoKQotewotZGV2c3RhdF9nZXRkZXZzICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9kZXZzdGF0X2RldnN0YXRfZ2V0ZGV2cz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2RldnN0YXRfZGV2c3RhdF9nZXRkZXZzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2RldnN0YXRfZGV2c3RhdF9nZXRkZXZzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfZGV2c3RhdF9kZXZzdGF0X2dldGRldnMiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2RldnN0YXRfZGV2c3RhdF9nZXRkZXZzID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfREVWU1RBVF9HRVRERVZTIDEKLV9BQ0VPRgotCi0JCUxNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGRldnN0YXQiCi1maQotCi1maQotCi1maQotCi0jIExNLVNFTlNPUlMtTUlCIHN1cHBvcnQKLWVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiB1Y2Qtc25tcC9sbVNlbnNvcnMgIiA+IC9kZXYvbnVsbAotaWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KLSAgICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzZW5zb3JzIHN1cHBvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2Vuc29ycyBzdXBwb3J0Li4uICRFQ0hPX0MiID4mNgotICAgICAgICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICAgICAgICBzb2xhcmlzKikKLSAgICAgICAgICAgIGlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3BpY2xfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBpY2wuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwaWNsLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9waWNsX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3BpY2xfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3BpY2xfaCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHBpY2wuaCB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBwaWNsLmggdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPHBpY2wuaD4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHBpY2wuaCBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHBpY2wuaCBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHBpY2wuaD4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBwaWNsLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogcGljbC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHBpY2wuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogcGljbC5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBwaWNsLmg6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHBpY2wuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcGljbC5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBpY2wuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3BpY2xfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9oZWFkZXJfcGljbF9oPSRhY19oZWFkZXJfcHJlcHJvYwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfcGljbF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfcGljbF9oIiA+JjYKLQotZmkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9waWNsX2ggPSB5ZXM7IHRoZW4KLSAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1scGljbCIKLWZpCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHBpY2wuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSAgICAgICAgICAgIDs7Ci0gICAgICAgICopCi0gICAgICAgICAgICBpZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNlbnNvcnMvc2Vuc29ycy5oIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNlbnNvcnMvc2Vuc29ycy5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2grc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2giID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzZW5zb3JzL3NlbnNvcnMuaCB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzZW5zb3JzL3NlbnNvcnMuaCB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8c2Vuc29ycy9zZW5zb3JzLmg+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBzZW5zb3JzL3NlbnNvcnMuaCBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHNlbnNvcnMvc2Vuc29ycy5oIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c2Vuc29ycy9zZW5zb3JzLmg+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogc2Vuc29ycy9zZW5zb3JzLmg6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IHNlbnNvcnMvc2Vuc29ycy5oOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBzZW5zb3JzL3NlbnNvcnMuaDogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc2Vuc29ycy9zZW5zb3JzLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc2Vuc29ycy9zZW5zb3JzLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jdl9oZWFkZXJfc2Vuc29yc19zZW5zb3JzX2g9JGFjX2hlYWRlcl9wcmVwcm9jCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA+JjYKLQotZmkKLWlmIHRlc3QgJGFjX2N2X2hlYWRlcl9zZW5zb3JzX3NlbnNvcnNfaCA9IHllczsgdGhlbgotICA6Ci1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGFza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgc2Vuc29ycy9zZW5zb3JzLmgiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCBzZW5zb3JzL3NlbnNvcnMuaCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotCi0gICAgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzIGluIC1sc2Vuc29ycyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyBpbiAtbHNlbnNvcnMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zZW5zb3JzX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sc2Vuc29ycyAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcyAoKTsKLWludAotbWFpbiAoKQotewotc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3NlbnNvcnNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHM9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9zZW5zb3JzX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3NlbnNvcnNfc2Vuc29yc19nZXRfZGV0ZWN0ZWRfY2hpcHMiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zZW5zb3JzX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzIiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9zZW5zb3JzX3NlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzID0geWVzOyB0aGVuCi0KLQkJICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sc2Vuc29ycyIgOwotCi1lbHNlCi0gIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGFza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgLWxzZW5zb3JzIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGFza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgLWxzZW5zb3JzIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi0gICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi1maQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFBFUkwgU1VQUE9SVAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCitjYXQgPmNvbmZjYWNoZSA8PFxfQUNFT0YKKyMgVGhpcyBmaWxlIGlzIGEgc2hlbGwgc2NyaXB0IHRoYXQgY2FjaGVzIHRoZSByZXN1bHRzIG9mIGNvbmZpZ3VyZQorIyB0ZXN0cyBydW4gb24gdGhpcyBzeXN0ZW0gc28gdGhleSBjYW4gYmUgc2hhcmVkIGJldHdlZW4gY29uZmlndXJlCisjIHNjcmlwdHMgYW5kIGNvbmZpZ3VyZSBydW5zLCBzZWUgY29uZmlndXJlJ3Mgb3B0aW9uIC0tY29uZmlnLWNhY2hlLgorIyBJdCBpcyBub3QgdXNlZnVsIG9uIG90aGVyIHN5c3RlbXMuICBJZiBpdCBjb250YWlucyByZXN1bHRzIHlvdSBkb24ndAorIyB3YW50IHRvIGtlZXAsIHlvdSBtYXkgcmVtb3ZlIG9yIGVkaXQgaXQuCiAjCi0jIHRlc3QgdG8gc2VlIGlmIHdlIGNhbiBhdHRlbXB0IHRvIGJ1aWxkIGVtYmVkZGVkIFBlcmwgc28gZmFyCisjIGNvbmZpZy5zdGF0dXMgb25seSBwYXlzIGF0dGVudGlvbiB0byB0aGUgY2FjaGUgZmlsZSBpZiB5b3UgZ2l2ZSBpdAorIyB0aGUgLS1yZWNoZWNrIG9wdGlvbiB0byByZXJ1biBjb25maWd1cmUuCisjCisjIGBhY19jdl9lbnZfZm9vJyB2YXJpYWJsZXMgKHNldCBvciB1bnNldCkgd2lsbCBiZSBvdmVycmlkZGVuIHdoZW4KKyMgbG9hZGluZyB0aGlzIGZpbGUsIG90aGVyICp1bnNldCogYGFjX2N2X2Zvbycgd2lsbCBiZSBhc3NpZ25lZCB0aGUKKyMgZm9sbG93aW5nIHZhbHVlcy4KKworX0FDRU9GCisKKyMgVGhlIGZvbGxvd2luZyB3YXkgb2Ygd3JpdGluZyB0aGUgY2FjaGUgbWlzaGFuZGxlcyBuZXdsaW5lcyBpbiB2YWx1ZXMsCisjIGJ1dCB3ZSBrbm93IG9mIG5vIHdvcmthcm91bmQgdGhhdCBpcyBzaW1wbGUsIHBvcnRhYmxlLCBhbmQgZWZmaWNpZW50LgorIyBTbywgd2Uga2lsbCB2YXJpYWJsZXMgY29udGFpbmluZyBuZXdsaW5lcy4KKyMgVWx0cml4IHNoIHNldCB3cml0ZXMgdG8gc3RkZXJyIGFuZCBjYW4ndCBiZSByZWRpcmVjdGVkIGRpcmVjdGx5LAorIyBhbmQgc2V0cyB0aGUgaGlnaCBiaXQgaW4gdGhlIGNhY2hlIGZpbGUgdW5sZXNzIHdlIGFzc2lnbiB0byB0aGUgdmFycy4KKygKKyAgZm9yIGFjX3ZhciBpbiBgKHNldCkgMj4mMSB8IHNlZCAtbiAncy9eXChbYS16QS1aX11bYS16QS1aMC05X10qXCk9LiovXDEvcCdgOyBkbworICAgIGV2YWwgYWNfdmFsPVwkJGFjX3ZhcgorICAgIGNhc2UgJGFjX3ZhbCBpbiAjKAorICAgICoke2FzX25sfSopCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgICpfY3ZfKikgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBjYWNoZSB2YXJpYWJsZSAkYWNfdmFyIGNvbnRhaW5zIGEgbmV3bGluZSIgPiYyO30gOzsKKyAgICAgIGVzYWMKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgXyB8IElGUyB8IGFzX25sKSA7OyAjKAorICAgICAgQkFTSF9BUkdWIHwgQkFTSF9TT1VSQ0UpIGV2YWwgJGFjX3Zhcj0gOzsgIygKKyAgICAgICopIHsgZXZhbCAkYWNfdmFyPTsgdW5zZXQgJGFjX3Zhcjt9IDs7CisgICAgICBlc2FjIDs7CisgICAgZXNhYworICBkb25lCisKKyAgKHNldCkgMj4mMSB8CisgICAgY2FzZSAkYXNfbmxgKGFjX3NwYWNlPScgJzsgc2V0KSAyPiYxYCBpbiAjKAorICAgICoke2FzX25sfWFjX3NwYWNlPVwgKikKKyAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzOiBkb3VibGUtcXVvdGUKKyAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwuCisgICAgICBzZWQgLW4gXAorCSJzLycvJ1xcXFwnJy9nOworCSAgcy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT0nXFwyJy9wIgorICAgICAgOzsgIygKKyAgICAqKQorICAgICAgIyBgc2V0JyBxdW90ZXMgY29ycmVjdGx5IGFzIHJlcXVpcmVkIGJ5IFBPU0lYLCBzbyBkbyBub3QgYWRkIHF1b3Rlcy4KKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCisgICAgICA7OworICAgIGVzYWMgfAorICAgIHNvcnQKKykgfAorICBzZWQgJworICAgICAvXmFjX2N2X2Vudl8vYiBlbmQKKyAgICAgdCBjbGVhcgorICAgICA6Y2xlYXIKKyAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLworICAgICB0IGVuZAorICAgICBzL15cKFtePV0qXCk9XCguKlwpJC9cMT0ke1wxPVwyfS8KKyAgICAgOmVuZCcgPj5jb25mY2FjaGUKK2lmIGRpZmYgIiRjYWNoZV9maWxlIiBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKKyAgaWYgdGVzdCAtdyAiJGNhY2hlX2ZpbGUiOyB0aGVuCisgICAgaWYgdGVzdCAieCRjYWNoZV9maWxlIiAhPSAieC9kZXYvbnVsbCI7IHRoZW4KKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogdXBkYXRpbmcgY2FjaGUgJGNhY2hlX2ZpbGUiID4mNjt9CisgICAgICBpZiB0ZXN0ICEgLWYgIiRjYWNoZV9maWxlIiB8fCB0ZXN0IC1oICIkY2FjaGVfZmlsZSI7IHRoZW4KKwljYXQgY29uZmNhY2hlID4iJGNhY2hlX2ZpbGUiCisgICAgICBlbHNlCisgICAgICAgIGNhc2UgJGNhY2hlX2ZpbGUgaW4gIygKKyAgICAgICAgKi8qIHwgPzoqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIkJCAmJgorCSAgbXYgLWYgIiRjYWNoZV9maWxlIiQkICIkY2FjaGVfZmlsZSIgOzsgIygKKyAgICAgICAgKikKKwkgIG12IC1mIGNvbmZjYWNoZSAiJGNhY2hlX2ZpbGUiIDs7CisJZXNhYworICAgICAgZmkKKyAgICBmaQorICBlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgZmkKK2ZpCitybSAtZiBjb25mY2FjaGUKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjICAgUGVybCAmIFB5dGhvbiBzdXBwb3J0CisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBDaGVjayB3aGV0aGVyIE5ldC1TTk1QIGNvbmZpZ3VyYXRpb24gd2lsbCBzdXBwb3J0IFBlcmwKKyMjCisKKyMgICBJbnB1dHM6CisjICAgICAgIGluc3RhbGxfcGVybDogICB3aGV0aGVyIG9yIG5vdCB0byBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMvbm8vdHJ5ICAgKGkuZS4gJ21heWJlJyAtIHRoZSBkZWZhdWx0KQorIyAgICAgICBlbWJlZF9wZXJsOiAgICAgd2hldGhlciBvciBub3QgdG8gZW1iZWQgUGVybCBzdXBwb3J0IHdpdGhpbiB0aGUgYWdlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICB5ZXMvbm8vdHJ5ICAgKGkuZS4gJ21heWJlJyAtIHRoZSBkZWZhdWx0KQorIworIyAgICAgICBhY19jdl9wYXRoX1BFUkxQUk9HOiAgICBQYXRoIHRvIHBlcmwgYmluYXJ5CisKKworIyAgICAgICBFbWJlZGRlZCBQZXJsIHJlcXVpcmVzIFBlcmwgbW9kdWxlcywgYW5kIHRoZSBwZXJsIGJpbmFyeQogIwogaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCi0gICAgaW5zdGFsbF9wZXJsPSJ0cnkiCi0gIGZpCi0gIGlmIHRlc3QgIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieCIgLW8gIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieG5vIiA7IHRoZW4KLSAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgIGVtYmVkX3Blcmw9Im5vIgotICBmaQorICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpbnN0YWxsX3Blcmw9InRyeSIKKyAgICBmaQorICAgIGlmIHRlc3QgIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieCIgLW8gIngkYWNfY3ZfcGF0aF9QRVJMUFJPRyIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgZmkKIGZpCiAKLQorIyAgICAgICBQZXJsIG1vZHVsZXMgcmVxdWlyZSB0aGUgcGVybCBiaW5hcnkKICMKLSMgRW1iZWRkZWQgUGVybCBzcGVjaWZpYyBzdHVmZgotIwotCi0jIHRlc3QgcGVybCBwcm9nCiBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCiAgICAgbXlwZXJsPSRhY19jdl9wYXRoX1BFUkxQUk9HCiAgICAgaWYgdGVzdCAkbXlwZXJsID0gIm5vIiA7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogLS1lbmFibGUtZW1iZWRkZWQtcGVybCByZXF1ZXN0ZWQgYnV0IG5vIHBlcmwgZXhlY3V0YWJsZSBmb3VuZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIHJlcXVlc3RlZCBidXQgbm8gcGVybCBleGVjdXRhYmxlIGZvdW5kIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICBmaQorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiLS1lbmFibGUtZW1iZWRkZWQtcGVybCByZXF1ZXN0ZWQgYnV0IG5vIHBlcmwgZXhlY3V0YWJsZSBmb3VuZCIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKICAgICBmaQogZmkKIAotIyB0ZXN0IGZvciBzaGFyZWQgbGlicmFyaWVzIHN1cHBvcnQKKyMgICAgICAgUGVybCBtb2R1bGVzIHJlcXVpcmUgc2hhcmVkIGxpYnJhcmllcworIwogaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICMgZW1iZWRkZWQgUGVybCByZXF1aXJlcyBzaGFyZWQgbGlicmFyaWVzCiAgICAgaWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiAhPSAieHllcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogUGVybCBzdXBwb3J0IHJlcXVpcmVzIC0tZW5hYmxlLXNoYXJlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBQZXJsIHN1cHBvcnQgcmVxdWlyZXMgLS1lbmFibGUtc2hhcmVkIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICBmaQorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiUGVybCBzdXBwb3J0IHJlcXVpcmVzIC0tZW5hYmxlLXNoYXJlZCIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKICAgICBmaQogZmkKIAorIyAgICAgICBQZXJsIG1vZHVsZXMgY2FuIG9ubHkgYmUgaW5zdGFsbGVkIGZyb20gd2l0aGluIHRoZSBzb3VyY2UgdHJlZQorIwogaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgd2UgYXJlIGluIHRoZSBzb3VyY2UgdHJlZSBzbyB3ZSBjYW4gaW5zdGFsbCBQZXJsIG1vZHVsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlIHNvIHdlIGNhbiBpbnN0YWxsIFBlcmwgbW9kdWxlcy4uLiAkRUNIT19DIiA+JjYKLSAgaWYgdGVzdCAieCRzcmNkaXIiID0gInguIiAtbyAtZCBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUgOyB0aGVuCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogWWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfVllcyIgPiY2Ci0gIGVsc2UKLSAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogTm8iID4mNQotZWNobyAiJHtFQ0hPX1R9Tm8iID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgd2UgYXJlIGluIHRoZSBzb3VyY2UgdHJlZSBzbyB3ZSBjYW4gaW5zdGFsbCBQZXJsIG1vZHVsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgYXJlIGluIHRoZSBzb3VyY2UgdHJlZSBzbyB3ZSBjYW4gaW5zdGFsbCBQZXJsIG1vZHVsZXMuLi4gIiA+JjY7IH0KKyAgICBpZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iIC1vIC1kIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZSA7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IFllcyIgPiY1CiskYXNfZWNobyAiWWVzIiA+JjY7IH0KICAgICBlbHNlCi0gICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBQZXJsIG1vZHVsZXMgY2FuIG5vdCBiZSBidWlsdCBvdXRzaWRlIHRoZSBzb3VyY2UgZGlyZWN0b3J5IiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFBlcmwgbW9kdWxlcyBjYW4gbm90IGJlIGJ1aWx0IG91dHNpZGUgdGhlIHNvdXJjZSBkaXJlY3RvcnkiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBObyIgPiY1CiskYXNfZWNobyAiTm8iID4mNjsgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiUGVybCBtb2R1bGVzIGNhbiBub3QgYmUgYnVpbHQgb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeSIgIiRMSU5FTk8iIDUKKyAgICAgICAgZmkKICAgICBmaQotICBmaQogZmkKIAotIyBjaGVjayB0aGUgUGVybCBjb21waWxlciBuYW1lCisKKyMgICBUaGUgcmVzdCBvZiB0aGUgUGVybC1yZWxhdGVkIGNoZWNrcyBhcmVuJ3QgcmVsZXZhbnQKKyMgICAgICAgaWYgd2UncmUgbm90IHVzaW5nIHRoZSBQZXJsIG1vZHVsZXMKKyMKIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAjCi0gICAgIyBQZXJsIGNjIGNoZWNrcworCisKKyMjCisjICAgQ2hlY2sgY29tcGlsZXIgY29tcGF0YWJpbGl0eQorIyMKKworICAgICMgICAgICAgV2hhdCBjb21waWxlciB3YXMgdXNlZCB0byBidWlsZCB0aGUgcGVybCBiaW5hcnk/CiAgICAgIwogICAgIGlmIHRlc3QgInhlbmFibGVfcGVybF9jY19jaGVja3MiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBQZXJsIGNjIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBlcmwgY2MuLi4gJEVDSE9fQyIgPiY2CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBlcmwgY2MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBlcmwgY2MuLi4gIiA+JjY7IH0KIAotICAgICAgUEVSTENDPWAkbXlwZXJsIC1WOmNjIHwgJG15cGVybCAtbiAtZSAncHJpbnQgaWYgKHMvXlxzKmNjPS4oWy09XHdcc1wvXSspLjtccyovJDEvKTsnYAorICAgICAgICBQRVJMQ0M9YCRteXBlcmwgLVY6Y2MgfCAkbXlwZXJsIC1uIC1lICdwcmludCBpZiAocy9eXHMqY2M9LihbLT1cd1xzXC9dKykuO1xzKi8kMS8pOydgCiAKLSAgICAgIGlmIHRlc3QgIngkUEVSTENDIiAhPSAieCIgOyB0aGVuCi0gICAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRQRVJMQ0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JFBFUkxDQyIgPiY2Ci0gICAgICBlbHNlCi0gICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBpZiB0ZXN0ICJ4JFBFUkxDQyIgIT0gIngiIDsgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRQRVJMQ0MiID4mNQorJGFzX2VjaG8gIiRQRVJMQ0MiID4mNjsgfQogICAgICAgICBlbHNlCi0gICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQ291bGQgbm90IGRldGVybWluZSB0aGUgY29tcGlsZXIgdGhhdCB3YXMgdXNlZCB0byBidWlsZCAkbXlwZXJsLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS13aXRob3V0LXBlcmwtbW9kdWxlcyB0byBidWlsZCB3aXRob3V0IFBlcmwuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0td2l0aG91dC1wZXJsLW1vZHVsZXMgdG8gYnVpbGQgd2l0aG91dCBQZXJsLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0td2l0aG91dC1wZXJsLW1vZHVsZXMgdG8gYnVpbGQgd2l0aG91dCBQZXJsLiIgIiRMSU5FTk8iIDUKKyAgICAgICAgICAgIGZpCiAgICAgICAgIGZpCi0gICAgICBmaQotZmkKKyAgICBmaQogCi0jIGNoZWNrIHRoZSBQZXJsIGNvbXBpbGVyIGNvbXBhdGliaWxpdHkKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyICRQRVJMQ0MgaXMgYSBHTlUgQyBjb21waWxlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgJFBFUkxDQyBpcyBhIEdOVSBDIGNvbXBpbGVyLi4uICRFQ0hPX0MiID4mNgotICAgICAgT0xEQ0M9JENDCi0gICAgICBDQz0iJFBFUkxDQyIKLSAgICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgICMgICAgICAgV2FzIEdDQyB1c2VkIHRvIGJ1aWxkIHRoZSBwZXJsIGJpbmFyeT8KKyAgICAjCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgJFBFUkxDQyBpcyBhIEdOVSBDIGNvbXBpbGVyIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJFBFUkxDQyBpcyBhIEdOVSBDIGNvbXBpbGVyLi4uICIgPiY2OyB9CisgICAgICAgIE9MRENDPSRDQworICAgICAgICBDQz0iJFBFUkxDQyIKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCisKIGludAogbWFpbiAoKQogewpAQCAtMzE2ODcsNDg5ICsyMzk2NSwyMDkgQEAKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgcGVybGNjX2lzX2dudT15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotcGVybGNjX2lzX2dudT1ubworICBwZXJsY2NfaXNfZ251PW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHBlcmxjY19pc19nbnUiID4mNQotZWNobyAiJHtFQ0hPX1R9JHBlcmxjY19pc19nbnUiID4mNgotICAgICAgQ0M9JE9MRENDCi0gICAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieG5vIiA7IHRoZW4KLSAgICAgIAlpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAJICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgCWVsc2UKLSAgICAgIAkgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFRoaXMgYnVpbGQgaXMgdXNpbmcgYSBHTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBub24tR05VIChvciBub24td29ya2luZykgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFRoaXMgYnVpbGQgaXMgdXNpbmcgYSBHTlUgQyBjb21waWxlciAoJENDKSB3aGlsZSBQZXJsIGhhcyBiZWVuIGNvbXBpbGVkIHdpdGggYSBub24tR05VIChvciBub24td29ya2luZykgY29tcGlsZXIgKCRQRVJMQ0MpLiBUaGlzIGxpa2VseSB3b24ndCB3b3JrIGZvciBidWlsZGluZyB3aXRoIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNwZWNpZnkgYSBkaWZmZXJlbnQgY29tcGlsZXIgKC0td2l0aC1jYz1QQVRIKSwgZGlzYWJsZSB0aGlzIGNoZWNrICgtLWRpc2FibGUtcGVybC1jYy1jaGVja3MpIG9yIGJ1aWxkIHdpdGhvdXQgUGVybCAoLS13aXRob3V0LXBlcmwtbW9kdWxlcykuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gICAgICAJZmkKLSAgICAgIGZpCi1maQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGVybGNjX2lzX2dudSIgPiY1CiskYXNfZWNobyAiJHBlcmxjY19pc19nbnUiID4mNjsgfQorICAgICAgICBDQz0kT0xEQ0MKIAotIyBjaGVjayBpZiB0aGV5J3JlIGJvdGggZ251Ci1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInh5ZXMiIDsgdGhlbgotICAgICAgCWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgIAkgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICAJZWxzZQotICAgICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IFRoaXMgYnVpbGQgaXMgdXNpbmcgYSBub24tR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgR05VIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgbm9uLUdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLSAgICAgIAlmaQotICAgICAgZmkKLWZpCisgICAgICAgICMgICAgICAgQ2hlY2sgY29tcGF0YWJpbGl0eTogIEdudSBOZXQtU05NUCB2cyBOb24tR251IHBlcmwKKyAgICAgICAgIworICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieG5vIiA7IHRoZW4KKyAgICAgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgIAkgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAJICAgIGVsc2UKKyAgICAgIAkgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgbm9uLUdOVSAob3Igbm9uLXdvcmtpbmcpIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLiIgIiRMSU5FTk8iIDUKKyAgICAgIAkgICAgZmkKKyAgICAgICAgZmkKKyAgICBmaQogCi0jIHdlIGhhdmUgZW5vdWdoIHN1cHBvcnQgZm9yIGluc3RhbGxpbmcgdGhlIG1vZHVsZXMgYXQgbGVhc3QuCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gIGluc3RhbGxfcGVybD0ieWVzIgotZWxzZQotICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieG5vIiA7IHRoZW4KLSAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgIGVtYmVkX3Blcmw9Im5vIgotICBmaQotZmkKKyAgICAjICAgICAgIENoZWNrIGNvbXBhdGFiaWxpdHk6ICBOb24tR251IE5ldC1TTk1QIHZzIEdudSBwZXJsCisgICAgIworICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4eWVzIiA7IHRoZW4KKyAgICAgIAkgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgCSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgIAkgICAgZWxzZQorICAgICAgICAgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgbm9uLUdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS4iICIkTElORU5PIiA1CisgICAgICAJICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgb24gdG8gZW1iZWRkaW5nLi4uCisgICAgIyAgICAgICBBcmUgd2UgY2xlYXIgdG8gcHJvY2VlZD8KKyAgICAjCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICBpbnN0YWxsX3Blcmw9InllcyIKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgICBmaQorICAgIGZpCiAKLSMgY2hlY2sgdGhlIGNvbXBpbGVyIGZsYWdzIGZvciBpbGxlZ2FsIHRva2VucworCisjIworIyAgIERldGVybWluZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudCBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwKKyMjCisKKyMgICAgICAgU3lzdGVtLXNwZWNpZmljIHJlcXVpcmVtZW50cworIwogY2FzZSAkdGFyZ2V0X29zIGluCiAgICAgc29sYXJpcyopCiAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICAgICMgICBDaGVjayBmb3IgTEFSR0VGSUxFIHN1cHBvcnQgICAgICAgICAgICAgICAoU29sYXJpcykKICAgICAgICAgICAjCi0gICAgICAgICAgIyBQZXJsIGNjIGNoZWNrcwotICAgICAgICAgICMKLSAgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHByb2JsZW1hdGljIFBlcmwgY2MgZmxhZ3Mgb24gU3VucyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwcm9ibGVtYXRpYyBQZXJsIGNjIGZsYWdzIG9uIFN1bnMuLi4gJEVDSE9fQyIgPiY2Ci0gICAgICAgICAgaWYgJG15cGVybCAtVjpjY2ZsYWdzIHwgZ3JlcCBMQVJHRUZJTEUgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcHJvYmxlbWF0aWMgUGVybCBjYyBmbGFncyBvbiBTdW5zIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBwcm9ibGVtYXRpYyBQZXJsIGNjIGZsYWdzIG9uIFN1bnMuLi4gIiA+JjY7IH0KKyAgICAgICAgICBpZiAkbXlwZXJsIC1WOmNjZmxhZ3MgfCAkR1JFUCBMQVJHRUZJTEUgPiAvZGV2L251bGwgOyB0aGVuCiAgICAgICAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgogICAgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogUGVybCB3YXMgY29tcGlsZWQgd2l0aCBMQVJHRUZJTEUgc3VwcG9ydCB3aGljaCB3aWxsIGJyZWFrIE5ldC1TTk1QLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFBlcmwgd2FzIGNvbXBpbGVkIHdpdGggTEFSR0VGSUxFIHN1cHBvcnQgd2hpY2ggd2lsbCBicmVhayBOZXQtU05NUC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICAgICAgICBhc19mbl9lcnJvciAkPyAiUGVybCB3YXMgY29tcGlsZWQgd2l0aCBMQVJHRUZJTEUgc3VwcG9ydCB3aGljaCB3aWxsIGJyZWFrIE5ldC1TTk1QLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiAiJExJTkVOTyIgNQogICAgICAgICAgICAgZmkKICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBub25lIGtub3duIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vbmUga25vd24iID4mNgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vbmUga25vd24iID4mNQorJGFzX2VjaG8gIm5vbmUga25vd24iID4mNjsgfQogICAgICAgICAgIGZpCiAgICAgICBmaQogICAgIDs7CiAKKyAgICAjIEVtYmVkZGVkIHBlcmwgdHlwaWNhbGx5IGZhaWxzIG9uIEhQLVVYIGFuZCBNYWMgT1MgWAorICAgICMgV2UgcmVhbGx5IG5lZWQgdG8gaW52ZXN0aWdhdGUgd2h5LCBhbmQgY2hlY2sgZm9yIHRoaXMgZXhwbGljaXRseQorICAgICMgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdHVybiB0aGlzIG9mZiBieSBkZWZhdWx0CisgICAgaHB1eCp8ZGFyd2luOCp8ZGFyd2luOSp8ZGFyd2luMTAqKQorICAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBFbWJlZGRlZCBwZXJsIGRlZmF1bHRpbmcgdG8gb2ZmIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IEVtYmVkZGVkIHBlcmwgZGVmYXVsdGluZyB0byBvZmYiID4mMjt9CisgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgICAgZmkKKyAgICA7OworCiAgICAgKikKICAgICA7OwogZXNhYwogCi0KLSMgY2hlY2sgdGhlIGNmbGFncworIyAgICAgICBDb21waWxlciBmbGFncworIwogaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIFBlcmwgQ0ZMQUdTIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBlcmwgQ0ZMQUdTLi4uICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBlcmwgQ0ZMQUdTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQZXJsIENGTEFHUy4uLiAiID4mNjsgfQogICAgIHBlcmxjZmxhZ3M9YCRteXBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzYAogICAgIGlmIHRlc3QgIngkcGVybGNmbGFncyIgIT0gIngiIDsgdGhlbgotICAgICAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJHBlcmxjZmxhZ3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JHBlcmxjZmxhZ3MiID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRwZXJsY2ZsYWdzIiA+JjUKKyRhc19lY2hvICIkcGVybGNmbGFncyIgPiY2OyB9CiAgICAgICBDRkxBR1M9IiRDRkxBR1MgJHBlcmxjZmxhZ3MiCiAgICAgZWxzZQogICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KICAgICAgICAgZW1iZWRfcGVybD0ibm8iCiAgICAgICBlbHNlCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIEMgY29tcGlsZXIgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBDIGNvbXBpbGVyIGZsYWdzIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KKyAgICAgICAgYXNfZm5fZXJyb3IgJD8gIkNvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIEMgY29tcGlsZXIgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgIiRMSU5FTk8iIDUKICAgICAgIGZpCiAgICAgZmkKIGZpCiAKLSMgY2hlY2sgdGhlIGxkZmxhZ3MKKyMgICAgICAgTGlua2VyIGZsYWdzCisjCiBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUGVybCBMREZMQUdTIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIFBlcmwgTERGTEFHUy4uLiAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBQZXJsIExERkxBR1MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFBlcmwgTERGTEFHUy4uLiAiID4mNjsgfQogICAgIG5ldHNubXBfcGVybGxkb3B0cz1gJG15cGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBsZG9wdHNgCiAgICAgaWYgdGVzdCAieCRuZXRzbm1wX3BlcmxsZG9wdHMiICE9ICJ4IiA7IHRoZW4KLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRuZXRzbm1wX3BlcmxsZG9wdHMiID4mNQotZWNobyAiJHtFQ0hPX1R9JG5ldHNubXBfcGVybGxkb3B0cyIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfcGVybGxkb3B0cyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfcGVybGxkb3B0cyIgPiY2OyB9CiAgICAgZWxzZQogICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KICAgICAgICAgZW1iZWRfcGVybD0ibm8iCiAgICAgICBlbHNlCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IENvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxpbmtlciBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQ291bGQgbm90IGRldGVybWluZSB0aGUgbGlua2VyIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQorICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGQgbm90IGRldGVybWluZSB0aGUgbGlua2VyIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLiIgIiRMSU5FTk8iIDUKICAgICAgIGZpCiAgICAgZmkKLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9hc19uZWVkZWQiID0gInh5ZXMiIDsgdGhlbgotICAgICAgIyBsaW5rICpsaWJyYXJpZXMqIHdpdGggbGlicGVybAorICAgIGlmIHRlc3QgIngkZW5hYmxlX2FzX25lZWRlZCIgIT0gInhubyIgOyB0aGVuCisgICAgICAjICAgSnVzdC1pbi10aW1lIGxpbmtpbmcgd2lsbCBlbWJlZCB0aGUgUGVybCBsaWJyYXJ5IHdpdGhpbgorICAgICAgIyAgICAgICB0aGUgTmV0LVNOTVAgbGlicmFyeSAocmF0aGVyIHRoYW4gdGhlIGFnZW50IGFwcGxpY2F0aW9uKQorICAgICAgIwogICAgICAgUEVSTExET1BUU19GT1JfTElCUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKLSAgICAgICMgUGVybCBjY2RsZmxhZ3MgKFJQQVRIIHRvIGxpYnBlcmwsIGhvcGVmdWxseSkKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgUGVybCBDQ0RMRkxBR1MiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUGVybCBDQ0RMRkxBR1MuLi4gJEVDSE9fQyIgPiY2CisgICAgICAjICAgUGVybCBjY2RsZmxhZ3MgKFJQQVRIIHRvIGxpYnBlcmwsIGhvcGVmdWxseSkKKyAgICAgICMKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIFBlcmwgQ0NETEZMQUdTIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBQZXJsIENDRExGTEFHUy4uLiAiID4mNjsgfQogCiAgICAgICBuZXRzbm1wX3BlcmxjY2RsZmxhZ3M9YCRteXBlcmwgLVY6Y2NkbGZsYWdzIHwgJG15cGVybCAtbiAtZSAncHJpbnQgJDEgJyJpZiAoL15ccypjY2RsZmxhZ3M9JyhbXiddKyknOy8pOyJgCiAKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiID4mNQotZWNobyAiJHtFQ0hPX1R9JG5ldHNubXBfcGVybGNjZGxmbGFncyIgPiY2CisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfcGVybGNjZGxmbGFncyIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfcGVybGNjZGxmbGFncyIgPiY2OyB9CiAgICAgICBQRVJMTERPUFRTX0ZPUl9BUFBTPSIkbmV0c25tcF9wZXJsY2NkbGZsYWdzIgogICAgIGVsc2UKKyAgICAgICMgICBPdGhlcndpc2UgZW1iZWQgdGhlIFBlcmwgbGlicmFyeSB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uCisgICAgICAjCisgICAgICBQRVJMTERPUFRTX0ZPUl9MSUJTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgogICAgICAgIyBsaW5rICphcHBsaWNhdGlvbnMqIGFnYWluc3QgbGlicGVybAogICAgICAgUEVSTExET1BUU19GT1JfQVBQUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKICAgICBmaQogZmkKIAotIyBjaGVjayBuZWVkZWQgZnVuY3Rpb25zCisjICAgICAgICdQZXJsX2V2YWxfcHYnIGZ1bmN0aW9uIChhbmQgZXF1aXZhbGVudHMpCisjCiBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICMgICBUaHJlZSBwb3NzaWJsZSB2ZXJzaW9ucyBvZiB0aGlzIHJvdXRpbmU6CisgICAgIyAgICAgICBldmFsX3B2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0byA1LjAwM185N2QpCisgICAgIyAgICAgICBwZXJsX2V2YWxfcHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICg1LjAwNC81LjAwNSkKKyAgICAjICAgICAgIFBlcmxfZXZhbF9wdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGZyb20gNS42ZmYpCisgICAgIwogICAgIE9MRExJQlM9IiRMSUJTIgogICAgIExJQlM9IiRMSUJTICRuZXRzbm1wX3BlcmxsZG9wdHMiCi0KLSAgICAjIG5ld2VyIHBlcmwgdnMgb2xkZXIgcGVybCBjYWxsIGZ1bmN0aW9ucwotCi1mb3IgYWNfZnVuYyBpbiBldmFsX3B2Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KKyAgICBmb3IgYWNfZnVuYyBpbiBldmFsX3B2CitkbyA6CisgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImV2YWxfcHYiICJhY19jdl9mdW5jX2V2YWxfcHYiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfZXZhbF9wdiIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCisjZGVmaW5lIEhBVkVfRVZBTF9QViAxCiBfQUNFT0YKIAogZmkKIGRvbmUKIAorICAgIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInBlcmxfZXZhbF9wdiIgImFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIgPSB4eWVzOyB0aGVuIDoKIAotICAgICMgc2lnaDogdGhpcyBoYXMgYSBDQVBJVEFMIFAgaW4gUGVybCwgd2hpY2ggZW5kcyB1cCBiZWluZyB0aGUgc2FtZQotICAgICMgYXV0b2NvbmYgZGVmaW5lIGFzIHRoZSBsb3dlciBjYXNlIHNvIHdlIGhhdmUgdG8gdHJlYXQgdGhlbSAqQk9USCoKLSAgICAjIHNwZWNpYWxseS4gIFdvbmRlcmZ1bC4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBlcmxfZXZhbF9wdiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBwZXJsX2V2YWxfcHYuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2Z1bmNfcGVybF9ldmFsX3B2K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lIHBlcmxfZXZhbF9wdiB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzIHBlcmxfZXZhbF9wdi4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSBwZXJsX2V2YWxfcHYgaW5ub2N1b3VzX3BlcmxfZXZhbF9wdgotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciBwZXJsX2V2YWxfcHYgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgcGVybF9ldmFsX3B2Ci0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcGVybF9ldmFsX3B2ICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViX3BlcmxfZXZhbF9wdikgfHwgZGVmaW5lZCAoX19zdHViX19fcGVybF9ldmFsX3B2KQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSBwZXJsX2V2YWxfcHY7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gcGVybF9ldmFsX3B2OwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX3BlcmxfZXZhbF9wdj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1BFUkxfRVZBTF9QVl9MQyAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfUEVSTF9FVkFMX1BWX0xDIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi0gICAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBQZXJsX2V2YWxfcHYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgUGVybF9ldmFsX3B2Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX1BlcmxfZXZhbF9wditzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSBQZXJsX2V2YWxfcHYgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyBQZXJsX2V2YWxfcHYuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgUGVybF9ldmFsX3B2IGlubm9jdW91c19QZXJsX2V2YWxfcHYKKyAgICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJQZXJsX2V2YWxfcHYiICJhY19jdl9mdW5jX1BlcmxfZXZhbF9wdiIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiID0geHllczsgdGhlbiA6CiAKLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyIFBlcmxfZXZhbF9wdiAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiBQZXJsX2V2YWxfcHYKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBQZXJsX2V2YWxfcHYgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfUGVybF9ldmFsX3B2KSB8fCBkZWZpbmVkIChfX3N0dWJfX19QZXJsX2V2YWxfcHYpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9IFBlcmxfZXZhbF9wdjsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSBQZXJsX2V2YWxfcHY7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHY9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfUEVSTF9FVkFMX1BWX1VDIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QRVJMX0VWQUxfUFZfVUMgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLQogICAgIExJQlM9IiRPTERMSUJTIgotCisgICAgIworICAgICMgICBOb3RlIHRoYXQgYXV0b2NvbmYgZmxhdHRlbnMgY2FzZSB3aGVuIGRlZmluaW5nIHRva2VucywKKyAgICAjICAgc28gd2UgbmVlZCB0byBleHBsaWNpdGx5IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGxhdHRlciB0d28uCiAKICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9mdW5jX2V2YWxfcHYiICE9ICJ4eWVzIiA7IHRoZW4KICAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCiAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgogICAgICAgZWxzZQotICAgICAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBDb3VsZCBub3QgZmluZCB0aGUgZXZhbF9wdiwgcGVybF9ldmFsX3B2IG9yIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogQ291bGQgbm90IGZpbmQgdGhlIGV2YWxfcHYsIHBlcmxfZXZhbF9wdiBvciBQZXJsX2V2YWxfcHYgZnVuY3Rpb25zIG5lZWRlZCBmb3IgZW1iZWRkZWQgUGVybCBzdXBwb3J0LiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJDb3VsZCBub3QgZmluZCB0aGUgZXZhbF9wdiwgcGVybF9ldmFsX3B2IG9yIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci4iICIkTElORU5PIiA1CiAgICAgICBmaQogICAgIGVsc2UKLSAgICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfRU1CRURERURfUEVSTCAxCi1fQUNFT0YKKyAgICAgICMgICBBY3RpdmF0ZSBFbWJlZGRlZCBQZXJsCisgICAgICAjCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfRU1CRURERURfUEVSTCAxIiA+PmNvbmZkZWZzLmgKIAogICAgICAgT1RIRVJBR0VOVExJQk9CSlM9InNubXBfcGVybC5vIgogICAgICAgT1RIRVJBR0VOVExJQkxPQkpTPSJzbm1wX3BlcmwubG8iCisgICAgICBPVEhFUkFHRU5UTElCTEZUUz0ic25tcF9wZXJsLmZ0IgogCiAgICAgICBFTUJFRFBFUkxJTlNUQUxMPSJlbWJlZHBlcmxpbnN0YWxsIgogICAgICAgRU1CRURQRVJMVU5JTlNUQUxMPSJlbWJlZHBlcmx1bmluc3RhbGwiCi0gICAgICAjIHlheSwgd2UgZ290IGhlcmUhCiAgICAgICBlbWJlZF9wZXJsPSJ5ZXMiCiAgICAgZmkKIGVsc2UKQEAgLTMyMTgwLDYwICsyNDE3OCw3MCBAQAogZmkKIAogCisjIworIyAgIFJlcG9ydCBhbmQgY29uZmlndXJlIHJlc3VsdHMKKyMjCiAKIAogCi0jIGVtYmVkZGVkIFBlcmwgcmVzdWx0cwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwb3RlbnRpYWwgZW1iZWRkZWQgUGVybCBzdXBwb3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2CisKKworCisjICAgICAgIFJlc3VsdHMgb2YgRW1iZWRkZWQgUGVybCBjaGVja3MKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBlbWJlZGRlZCBQZXJsIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHBvdGVudGlhbCBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuLi4gIiA+JjY7IH0KIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInh5ZXMiIDsgdGhlbgogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgRW1iZWRkZWQgUGVybCBzdXBwb3J0OiAgICAgIGRpc2FibGVkCiBFT0YKIAotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBkaXNhYmxlZCIgPiY1Ci1lY2hvICIke0VDSE9fVH1kaXNhYmxlZCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBkaXNhYmxlZCIgPiY1CiskYXNfZWNobyAiZGlzYWJsZWQiID4mNjsgfQogZWxzZQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgRW1iZWRkZWQgUGVybCBzdXBwb3J0OiAgICAgIGVuYWJsZWQKIEVPRgogCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGVuYWJsZWQiID4mNQotZWNobyAiJHtFQ0hPX1R9ZW5hYmxlZCIgPiY2CisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBlbmFibGVkIiA+JjUKKyRhc19lY2hvICJlbmFibGVkIiA+JjY7IH0KIGZpCiAKLSMgaW5zdGFsbCBQZXJsIG1vZHVsZSByZXN1bHRzCisjICAgICAgIFJlc3VsdHMgb2YgUGVybCBNb2R1bGUgY2hlY2tzCisjCiBQRVJMVEFSR1M9IiIKIFBFUkxJTlNUQUxMVEFSR1M9IiIKIFBFUkxVTklOU1RBTExUQVJHUz0iIgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIHdlIGNhbiBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBpZiB3ZSBjYW4gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzLi4uICRFQ0hPX0MiID4mNgorUEVSTEZFQVRVUkVTPSIiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIGNhbiBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2UgY2FuIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcy4uLiAiID4mNjsgfQogaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh5ZXMiIDsgdGhlbgogICAgIFBFUkxUQVJHUz0icGVybG1vZHVsZXMiCiAgICAgUEVSTElOU1RBTExUQVJHUz0icGVybGluc3RhbGwiCiAgICAgUEVSTFVOSU5TVEFMTFRBUkdTPSJwZXJsdW5pbnN0YWxsIgorICAgIFBFUkxGRUFUVVJFUz0icGVybGZlYXR1cmVzIgogICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHllcyIgOyB0aGVuCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgYnVpbGRpbmcgLS0gZW1iZWRkYWJsZQogRU9GCiAKLSAgICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyAtLSBhbmQgZW1iZWRkYWJsZSIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMgLS0gYW5kIGVtYmVkZGFibGUiID4mNgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyAtLSBhbmQgZW1iZWRkYWJsZSIgPiY1CiskYXNfZWNobyAieWVzIC0tIGFuZCBlbWJlZGRhYmxlIiA+JjY7IH0KICAgICBlbHNlCiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgYnVpbGRpbmcgLS0gbm90IGVtYmVkZGFibGUKIEVPRgogCi0gICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMgLS0gbm90IGVtYmVkZGFibGUiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIC0tIG5vdCBlbWJlZGRhYmxlIiA+JjYKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMgLS0gbm90IGVtYmVkZGFibGUiID4mNQorJGFzX2VjaG8gInllcyAtLSBub3QgZW1iZWRkYWJsZSIgPiY2OyB9CiAgICAgZmkKIGVsc2UKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CiAKICAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgZGlzYWJsZWQKQEAgLTMyMjQ3LDM5ICsyNDI1NSw0NSBAQAogCiAKIAotIyByZXNldCBsaWJzCisjICAgICAgIFJlc2V0IExJQlMgdG8gcHJlLWxpYndyYXAgdmFsdWUgICAoPz8/KQorIwogQUdFTlRMSUJTPSRMSUJTCiBMSUJTPSROT05BR0VOVExJQlMKIAogCiAKLSMgcHl0aG9uIHN1cHBvcnQKKyMjCisjICAgUHl0aG9uIGNoZWNrcworIyMKKwogUFlUSE9OVEFSR1M9IiIKIFBZVEhPTklOU1RBTExUQVJHUz0iIgogUFlUSE9OVU5JTlNUQUxMVEFSR1M9IiIKIFBZVEhPTkNMRUFOVEFSR1M9IiIKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiB3ZSBzaG91bGQgaW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5ncy4uLiAkRUNIT19DIiA+JjYKK1BZVEhPTkZFQVRVUkVTPSIiCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHdlIHNob3VsZCBpbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3MiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5ncy4uLiAiID4mNjsgfQogaWYgdGVzdCAieCRpbnN0YWxsX3B5dGhvbiIgPSAieHllcyIgOyB0aGVuCiAgICAgUFlUSE9OVEFSR1M9InB5dGhvbm1vZHVsZXMiCiAgICAgUFlUSE9OSU5TVEFMTFRBUkdTPSJweXRob25pbnN0YWxsIgogICAgIFBZVEhPTlVOSU5TVEFMTFRBUkdTPSJweXRob251bmluc3RhbGwiCiAgICAgUFlUSE9OQ0xFQU5UQVJHUz0icHl0aG9uY2xlYW4iCisgICAgUFlUSE9ORkVBVFVSRVM9InB5dGhvbmZlYXR1cmVzIgogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgU05NUCBQeXRob24gbW9kdWxlczogICAgICAgIGJ1aWxkaW5nIGZvciAkUFlUSE9OUFJPRwogRU9GCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQogZWxzZQogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKICAgU05NUCBQeXRob24gbW9kdWxlczogICAgICAgIGRpc2FibGVkCiBFT0YKIAotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KIGZpCiAKIApAQCAtMzIyODksNTE3OSArMjQzMDMsMjggQEAKIAogCiAKLSMgQ2hlY2tzIGZvciBoZWFkZXIgZmlsZXMuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIEFOU0kgQyBoZWFkZXIgZmlsZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgQU5TSSBDIGhlYWRlciBmaWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfaGVhZGVyX3N0ZGMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkYXJnLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8ZmxvYXQuaD4KIAotaW50Ci1tYWluICgpCi17CisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIGNoZWNrcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oZWFkZXJfc3RkYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyMjCisjICAgUGFja2FnZSBjaGFyYWN0ZXJpc3RpY3MKKyMgICAgICAgQXV0aGVudGljYXRpb24vRW5jcnlwdGlvbiBzdXBwb3J0CisjIwogCi1hY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLSAgIyBTdW5PUyA0Lnggc3RyaW5nLmggZG9lcyBub3QgZGVjbGFyZSBtZW0qLCBjb250cmFyeSB0byBBTlNJLgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAibWVtY2hyIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIElTQyAyLjAuMiBzdGRsaWIuaCBkb2VzIG5vdCBkZWNsYXJlIGZyZWUsIGNvbnRyYXJ5IHRvIEFOU0kuCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJmcmVlIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgOgotZWxzZQotICBhY19jdl9oZWFkZXJfc3RkYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgotCi1maQotCi1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3RkYyA9IHllczsgdGhlbgotICAjIC9iaW4vY2MgaW4gSXJpeC00LjAuNSBnZXRzIG5vbi1BTlNJIGN0eXBlIG1hY3JvcyB1bmxlc3MgdXNpbmcgLWFuc2kuCi0gIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuCi0gIDoKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiAoKCcgJyAmIDB4MEZGKSA9PSAweDAyMCkKLSMgZGVmaW5lIElTTE9XRVIoYykgKCdhJyA8PSAoYykgJiYgKGMpIDw9ICd6JykKLSMgZGVmaW5lIFRPVVBQRVIoYykgKElTTE9XRVIoYykgPyAnQScgKyAoKGMpIC0gJ2EnKSA6IChjKSkKLSNlbHNlCi0jIGRlZmluZSBJU0xPV0VSKGMpIFwKLQkJICAgKCgnYScgPD0gKGMpICYmIChjKSA8PSAnaScpIFwKLQkJICAgICB8fCAoJ2onIDw9IChjKSAmJiAoYykgPD0gJ3InKSBcCi0JCSAgICAgfHwgKCdzJyA8PSAoYykgJiYgKGMpIDw9ICd6JykpCi0jIGRlZmluZSBUT1VQUEVSKGMpIChJU0xPV0VSKGMpID8gKChjKSB8IDB4NDApIDogKGMpKQotI2VuZGlmCi0KLSNkZWZpbmUgWE9SKGUsIGYpICgoKGUpICYmICEoZikpIHx8ICghKGUpICYmIChmKSkpCi1pbnQKLW1haW4gKCkKLXsKLSAgaW50IGk7Ci0gIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKLSAgICBpZiAoWE9SIChpc2xvd2VyIChpKSwgSVNMT1dFUiAoaSkpCi0JfHwgdG91cHBlciAoaSkgIT0gVE9VUFBFUiAoaSkpCi0gICAgICBleGl0KDIpOwotICBleGl0ICgwKTsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIDoKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2hlYWRlcl9zdGRjPW5vCi1maQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfc3RkYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3N0ZGMiID4mNgotaWYgdGVzdCAkYWNfY3ZfaGVhZGVyX3N0ZGMgPSB5ZXM7IHRoZW4KLQotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgU1REQ19IRUFERVJTIDEKLV9BQ0VPRgotCi1maQotCi0KLQotCi0KLQotYWNfaGVhZGVyX2RpcmVudD1ubwotZm9yIGFjX2hkciBpbiBkaXJlbnQuaCBzeXMvbmRpci5oIHN5cy9kaXIuaCBuZGlyLmg7IGRvCi0gIGFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyX2RpcmVudF8kYWNfaGRyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hkciB0aGF0IGRlZmluZXMgRElSIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZHIgdGhhdCBkZWZpbmVzIERJUi4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8JGFjX2hkcj4KLQotaW50Ci1tYWluICgpCi17Ci1pZiAoKERJUiAqKSAwKQotcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGRyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1hY19oZWFkZXJfZGlyZW50PSRhY19oZHI7IGJyZWFrCi1maQotCi1kb25lCi0jIFR3byB2ZXJzaW9ucyBvZiBvcGVuZGlyIGV0IGFsLiBhcmUgaW4gLWxkaXIgYW5kIC1seCBvbiBTQ08gWGVuaXguCi1pZiB0ZXN0ICRhY19oZWFkZXJfZGlyZW50ID0gZGlyZW50Lmg7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgb3BlbmRpci4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc2VhcmNoX29wZW5kaXIrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCi1hY19jdl9zZWFyY2hfb3BlbmRpcj1ubwotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgb3BlbmRpciAoKTsKLWludAotbWFpbiAoKQotewotb3BlbmRpciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zZWFyY2hfb3BlbmRpcj0ibm9uZSByZXF1aXJlZCIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID0gbm87IHRoZW4KLSAgZm9yIGFjX2xpYiBpbiBkaXI7IGRvCi0gICAgTElCUz0iLWwkYWNfbGliICAkYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTIgotICAgIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIG9wZW5kaXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLW9wZW5kaXIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9Ii1sJGFjX2xpYiIKLWJyZWFrCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotICBkb25lCi1maQotTElCUz0kYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9zZWFyY2hfb3BlbmRpciIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3Zfc2VhcmNoX29wZW5kaXIiICE9IG5vOyB0aGVuCi0gIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgPSAibm9uZSByZXF1aXJlZCIgfHwgTElCUz0iJGFjX2N2X3NlYXJjaF9vcGVuZGlyICRMSUJTIgotCi1maQotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIG9wZW5kaXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3NlYXJjaF9vcGVuZGlyK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUz0kTElCUwotYWNfY3Zfc2VhcmNoX29wZW5kaXI9bm8KLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIG9wZW5kaXIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLW9wZW5kaXIgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3Zfc2VhcmNoX29wZW5kaXI9Im5vbmUgcmVxdWlyZWQiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotaWYgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9IG5vOyB0aGVuCi0gIGZvciBhY19saWIgaW4geDsgZG8KLSAgICBMSUJTPSItbCRhY19saWIgICRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMiCi0gICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgb3BlbmRpciAoKTsKLWludAotbWFpbiAoKQotewotb3BlbmRpciAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zZWFyY2hfb3BlbmRpcj0iLWwkYWNfbGliIgotYnJlYWsKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci0gIGRvbmUKLWZpCi1MSUJTPSRhY19mdW5jX3NlYXJjaF9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX29wZW5kaXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA+JjYKLWlmIHRlc3QgIiRhY19jdl9zZWFyY2hfb3BlbmRpciIgIT0gbm87IHRoZW4KLSAgdGVzdCAiJGFjX2N2X3NlYXJjaF9vcGVuZGlyIiA9ICJub25lIHJlcXVpcmVkIiB8fCBMSUJTPSIkYWNfY3Zfc2VhcmNoX29wZW5kaXIgJExJQlMiCi0KLWZpCi0KLWZpCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3lzL3dhaXQuaCB0aGF0IGlzIFBPU0lYLjEgY29tcGF0aWJsZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzeXMvd2FpdC5oIHRoYXQgaXMgUE9TSVguMSBjb21wYXRpYmxlLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9oZWFkZXJfc3lzX3dhaXRfaCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvd2FpdC5oPgotI2lmbmRlZiBXRVhJVFNUQVRVUwotIyBkZWZpbmUgV0VYSVRTVEFUVVMoc3RhdF92YWwpICgodW5zaWduZWQpKHN0YXRfdmFsKSA+PiA4KQotI2VuZGlmCi0jaWZuZGVmIFdJRkVYSVRFRAotIyBkZWZpbmUgV0lGRVhJVEVEKHN0YXRfdmFsKSAoKChzdGF0X3ZhbCkgJiAyNTUpID09IDApCi0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci0gIGludCBzOwotICB3YWl0ICgmcyk7Ci0gIHMgPSBXSUZFWElURUQgKHMpID8gV0VYSVRTVEFUVVMgKHMpIDogMTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9oZWFkZXJfc3lzX3dhaXRfaD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfaGVhZGVyX3N5c193YWl0X2g9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hlYWRlcl9zeXNfd2FpdF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9oZWFkZXJfc3lzX3dhaXRfaCA9IHllczsgdGhlbgotCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1NZU19XQUlUX0ggMQotX0FDRU9GCi0KLWZpCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3RkYXJnLmggc3RyaW5nLmggZmNudGwuaCBsaW1pdHMuaCBzeXMvZmlsZS5oIHN5cy9pb2N0bC5oIHN5c2xvZy5oIHVuaXN0ZC5oIHN5cy9kbWFwLmggbWFjaGluZS9wdGUuaCB4dGkuaCBzeXMvc29ja2lvLmggc3lzL3NvY2tldC5oIHN5cy9wYXJhbS5oIHN5cy91aW8uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgYXQgbGVhc3QgU29sYXJpcyA5IG5lZWRzIHN5cy9zb2NrZXQuaCB0byBjb21waWxlIHN5cy9zb2NrZXR2YXIuaAotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zb2NrZXR2YXIuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLQotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgYXQgbGVhc3QgT3BlbkJTRCAzLjQgbmVlZHMgc3lzL3BhcmFtLmggKE1BWFBBVEhMRU4pIHRvIGNvbXBpbGUgc3lzL3N3YXAuaAotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9zd2FwLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3RpbWVvdXQuaCBzeXMvdW4uaCBmc3RhYi5oIHN5cy9mcy5oIG10YWIuaCB1ZnMvZnMuaCBzeXMvZml4cG9pbnQuaCBtYWNoaW5lL3BhcmFtLmggc3lzL3ZtLmggdm0vdm0uaCBzeXMvdm1tZXRlci5oIHN5cy92bXBhcmFtLmggc3lzL3ZtbWFjLmggc3lzL3Ztc3lzdG0uaCBzeXMvdGltZS5oIHN5cy90aW1lcy5oIHN5cy9zdGF0dmZzLmggc3lzL3Zmcy5oIHN5cy9tbnR0YWIuaCBzeXMvc2VsZWN0LmggbW50ZW50Lmggc3lzL21udGVudC5oIGtzdGF0LmggdXRzbmFtZS5oIHN5cy91dHNuYW1lLmggc3lzL2NkZWZzLmggZ2V0b3B0LmggbG9jYWxlLmggcHRocmVhZC5oIHN5cy9sb2FkYXZnLmggcmVnZXguaCBsaW51eC90YXNrcy5oIHB3ZC5oIGdycC5oIHV0bXB4LmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIE5ldHdvcmsgaGVhZGVycwotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBhcnBhL2luZXQuaCBuZXRpbmV0L2luX3N5c3RtLmggbmV0aW5ldC9pbi5oIG5ldGluZXQvaXBfdmFyLmggbmV0aW5ldC90Y3AuaCBuZXRpbmV0L3RjcGlwLmggbmV0aW5ldC91ZHAuaCBuZXQvaWYuaCBuZXRpbmV0L2luX3Zhci5oIG5ldGluZXQvaXAuaCBuZXRpbmV0L2lwX2ljbXAuaCBuZXQvaWZfYXJwLmggbmV0L2lmX21pYi5oIG5ldC9pZl92YXIuaCBuZXRpbmV0L2lmX2V0aGVyLmggbmV0aW5ldC90Y3BfdGltZXIuaCBuZXRpbmV0L3RjcF92YXIuaCBuZXRpbmV0L3VkcF92YXIuaCBuZXRpbmV0L2ljbXBfdmFyLmggbmV0ZGIuaCBuZXQvcm91dGUuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVElNRU9VVF9ICi0jaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAotI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9JRl9ICi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1RDUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgVUZTIGhlYWRlcnMKLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiB1ZnMvdWZzL2Rpbm9kZS5oIHVmcy91ZnMvcXVvdGEuaCB1ZnMvdWZzL2lub2RlLmggdWZzL2Zmcy9mcy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VGU19VRlNfRElOT0RFX0gKLSNpbmNsdWRlIDx1ZnMvdWZzL2Rpbm9kZS5oPgotI2VuZGlmCi0jaWYgSEFWRV9VRlNfVUZTX1FVT1RBX0gKLSNpbmNsdWRlIDx1ZnMvdWZzL3F1b3RhLmg+Ci0jZW5kaWYKLQotCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfSGVhZGVyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX0hlYWRlcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBGcmVlQlNEIHJlcXVpcmVkIGhlYWRlcnMKLQotCi0KLQotCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIG1hbGxvYy5oIG5ldC9pZl9kbC5oIHN5cy9zeXNjdGwuaCBzdGRsaWIuaCBuZXQvaWZfdHlwZXMuaCBzeXMvcXVldWUuaCBvc3JlbGRhdGUuaCBtYWNoaW5lL3R5cGVzLmggc3lzL3VzZXIuaCBzeXMvcHJvYy5oIHN5cy9tYnVmLmggc3lzL21vdW50Lmggc3lzL2Rrc3RhdC5oIHN5cy9jb25mLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIExpbnV4Ci0KLQotCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBuZXRpbmV0L3RjcF9mc20uaCBzeXMvcHJvdG9zdy5oIG5saXN0LmggaW9jdGxzLmggYXNtL3BhZ2UuaCBhc20vdHlwZXMuaCBuZXRpcHgvaXB4LmggcGNpL3BjaS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBTb2xhcmlzCi0KLWZvciBhY19oZWFkZXIgaW4gaW5ldC9taWIyLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIE5ldEJTRCByZXF1aXJlZCBoZWFkZXJzCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIGt2bS5oIHN5cy9wb29sLmggdXZtL3V2bV9wYXJhbS5oIHV2bS91dm1fZXh0ZXJuLmggdm0vdm1fcGFyYW0uaCB2bS92bV9leHRlcm4uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgQlNEaTIgaGVhZGVycwotCi1mb3IgYWNfaGVhZGVyIGluIHZtL3N3YXBfcGFnZXIuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaWYgSEFWRV9WTV9WTV9ICi0jaW5jbHVkZSA8dm0vdm0uaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGxpbnV4IGV0aHRvb2wKLSMgcmVxdWlyZXMgc3BlY2lhbCBoYWNrcyB0byBnZXQgYXJvdW5kIHZhcmlvdXMgcHJvYmxlbXMgb24gb2xkZXIgbGludXgga2VybmVscy4KLSMgbWFqb3IgdWdoLi4uLgotCi1mb3IgYWNfaGVhZGVyIGluIGxpbnV4L2V0aHRvb2wuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXR5cGVkZWYgX191NjQgdTY0OyAgICAgICAgIC8qIGhhY2ssIHNvIHdlIG1heSBpbmNsdWRlIGtlcm5lbCdzIGV0aHRvb2wuaCAqLwotdHlwZWRlZiBfX3UzMiB1MzI7ICAgICAgICAgLyogZGl0dG8gKi8KLXR5cGVkZWYgX191MTYgdTE2OyAgICAgICAgIC8qIGRpdHRvICovCi10eXBlZGVmIF9fdTggdTg7ICAgICAgICAgICAvKiBkaXR0byAqLwotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIEJTRGkzIGhlYWRlcnMKLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc3RhdC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBCU0RpMy9JUklYIGhlYWRlcnMKLSMgYXQgbGVhc3QgSVJJWCA2LjUgbmVlZHMgX0tNRU1VU0VSIGFuZCBzeXMvdHlwZXMuaCAobXByb3RfdCkgdG8gY29tcGlsZQotIyAgIHN5cy92bm9kZS5oCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3Zub2RlLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2RlZmluZSBfS01FTVVTRVIgMQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGF0IGxlYXN0IElSSVggNi41IG5lZWRzIHN5cy9zZW1hLmggKG1ybG9ja190KSB0byBjb21waWxlIHN5cy9oYXNoaW5nLmgKLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc2VtYS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9oYXNoaW5nLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpZiBIQVZFX1NZU19TRU1BX0gKLSNpbmNsdWRlIDxzeXMvc2VtYS5oPgotI2VuZGlmCi0KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgbW9yZSBJUklYIGhlYWRlcnMKLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvdGNwaXBzdGF0cy5oIHN5cy9zeXNtcC5oIHN5cy9zeXN0ZW1pbmZvLmggc3lzL3N5c2dldC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBBSVggc3lzdGVtIGNvbmZpZ3VyYXRpb24KLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc3lzdGVtY2ZnLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGZyb20gc211eCBzdHVmZgotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBlcnIuaCBzeXMvZmlsaW8uaCBzZ3R0eS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBBSVggbmVlZHMgdGhpcyBmb3Igc3RhdGZzIGZ1bmMKLQotZm9yIGFjX2hlYWRlciBpbiBzeXMvc3RhdGZzLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIGZvciBIb3N0UmVzIChIUC1VWCBhdCBsZWFzdCkKLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIHN5cy9ka2lvLmggc3lzL2Rpc2tpby5oIHN5cy9wc3RhdC5oIGxpbnV4L2hkcmVnLmggcGtnbG9jcy5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBmb3IgSG9zdFJlcyAoU29sYXJpcyAyLnggYXQgbGVhc3QpCi0KLWZvciBhY19oZWFkZXIgaW4gcGtnaW5mby5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0gZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBwa2dpbmZvIGluIC1sYWRtIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBrZ2luZm8gaW4gLWxhZG0uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9hZG1fcGtnaW5mbytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGFkbSAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBwa2dpbmZvICgpOwotaW50Ci1tYWluICgpCi17Ci1wa2dpbmZvICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9hZG1fcGtnaW5mbz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2FkbV9wa2dpbmZvPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX2FkbV9wa2dpbmZvIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfYWRtX3BrZ2luZm8iID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2FkbV9wa2dpbmZvID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfUEtHSU5GTyAxCi1fQUNFT0YKLQotICAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGFkbSIKLWZpCi0KLWZpCi0KLWRvbmUKLQotCi1jYXNlICR0YXJnZXRfb3MgaW4KLSAgICBhaXgqKSAjIEFJWCBwZXJmc3RhdCBsaWJyYXJ5LCBuZWVkZWQgZm9yIENQVS9tZW1vcnkgc3RhdGlzdGljcwotCi1mb3IgYWNfaGVhZGVyIGluIGxpYnBlcmZzdGF0LmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLSBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBlcmZzdGF0X2NwdV90b3RhbCBpbiAtbHBlcmZzdGF0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBlcmZzdGF0X2NwdV90b3RhbCBpbiAtbHBlcmZzdGF0Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfcGVyZnN0YXRfcGVyZnN0YXRfY3B1X3RvdGFsK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1scGVyZnN0YXQgICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgcGVyZnN0YXRfY3B1X3RvdGFsICgpOwotaW50Ci1tYWluICgpCi17Ci1wZXJmc3RhdF9jcHVfdG90YWwgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9wZXJmc3RhdF9wZXJmc3RhdF9jcHVfdG90YWwiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX3BlcmZzdGF0X3BlcmZzdGF0X2NwdV90b3RhbCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1BFUkZTVEFUIDEKLV9BQ0VPRgotCi0gICAgICAgICAgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxwZXJmc3RhdCIKLWZpCi0KLWVsc2UKLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjoKLQotKioqIFRvIG1vbml0b3IgQ1BVL21lbW9yeSB2YWx1ZXMgaW4gQUlYIHlvdSBuZWVkIHRvIGluc3RhbGwKLSoqKiBsaWJwZXJmc3RhdCB3aGljaCBjYW4gYmUgZm91bmQgaW4gYm9zLnBlcmYKLSIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOgotCi0qKiogVG8gbW9uaXRvciBDUFUvbWVtb3J5IHZhbHVlcyBpbiBBSVggeW91IG5lZWQgdG8gaW5zdGFsbAotKioqIGxpYnBlcmZzdGF0IHdoaWNoIGNhbiBiZSBmb3VuZCBpbiBib3MucGVyZgotIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci1maQotCi1kb25lCi0KLSAgICAgICAgOzsKLSAgICBocHV4KikgIyBIUC1VWCBhZ2VudCBuZWVkcyBvcGVuX21pYgotICAgICAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG9wZW5fbWliIGluIC1sbm0iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb3Blbl9taWIgaW4gLWxubS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX25tX29wZW5fbWliK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sbm0gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgb3Blbl9taWIgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLW9wZW5fbWliICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9ubV9vcGVuX21pYj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX25tX29wZW5fbWliPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX25tX29wZW5fbWliIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfbm1fb3Blbl9taWIiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX25tX29wZW5fbWliID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfTElCTk0gMQotX0FDRU9GCi0KLSAgICAgICAgICAgIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbG5tIgotZmkKLQotICAgICAgICA7OwotICAgICopCi0gICAgICAgIDs7Ci1lc2FjCi0jIFdJTjMyCi0jIChtaW5ndzMyIG11c3QgbGluayB3aW5zb2NrIGV4cGxpY2l0bHkpCi0KLWZvciBhY19oZWFkZXIgaW4gd2luc29jay5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLSAgICAgICAgQUdFTlRMSUJTPSIke0FHRU5UTElCU30gLWxpcGhscGFwaSIKLSAgICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgICAgICAgICAgICAgbWluZ3cqKQotICAgICAgICAgICAgICAgICAgICAgICAgTElCUz0iJHtMSUJTfSAtbHJlZ2V4IC1sd3MyXzMyIgotICAgICAgICAgICAgICAgICAgICAgICAgQUdFTlRMSUJTPSIke0FHRU5UTElCU30gLWxyZWdleCAtbHdzMl8zMiIKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gaW8uaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLSMgU0NPCi0KLWZvciBhY19oZWFkZXIgaW4gc3lzL3N0cmVhbS5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyBLQU1FCi0KLQotCi0KLQotCi0KLQotCi1mb3IgYWNfaGVhZGVyIGluIG5ldGluZXQvaXA2LmggbmV0aW5ldDYvaW42X3Zhci5oIG5ldGluZXQ2L2luNl9wY2IuaCBuZXRpbmV0Ni9pcDZfdmFyLmggbmV0aW5ldDYvdGNwNi5oIG5ldGluZXQ2L3RjcDZfZnNtLmggbmV0aW5ldDYvbmQ2LmggbmV0aW5ldDYvdGNwNl90aW1lci5oIG5ldGluZXQ2L3RjcDZfdmFyLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQNl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX0lGX0gKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUX1JPVVRFX0gKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLSNlbmRpZgotCi0KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfSGVhZGVyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0jIERZTkFNSUMgTU9EVUxFIFNVUFBPUlQKLQotZm9yIGFjX2hlYWRlciBpbiBkbGZjbi5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotIyB0YWJsZV9hcnJheSBoZWxwZXIgc3VwcG9ydAotCi1mb3IgYWNfaGVhZGVyIGluIHNlYXJjaC5oCi1kbwotYXNfYWNfSGVhZGVyPWBlY2hvICJhY19jdl9oZWFkZXJfJGFjX2hlYWRlciIgfCAkYXNfdHJfc2hgCi1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWVsc2UKLSAgIyBJcyB0aGUgaGVhZGVyIGNvbXBpbGFibGU/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2hlYWRlcl9jb21waWxlcj15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfaGVhZGVyX2NvbXBpbGVyPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9jb21waWxlciIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjYKLQotIyBJcyB0aGUgaGVhZGVyIHByZXNlbnQ/Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDwkYWNfaGVhZGVyPgotX0FDRU9GCi1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dFwiIikgPiY1Ci0gIChldmFsICRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ID4vZGV2L251bGw7IHRoZW4KLSAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KLSAgICBhY19jcHBfZXJyPSRhY19jX3ByZXByb2Nfd2Fybl9mbGFnCi0gICAgYWNfY3BwX2Vycj0kYWNfY3BwX2VyciRhY19jX3dlcnJvcl9mbGFnCi0gIGVsc2UKLSAgICBhY19jcHBfZXJyPQotICBmaQotZWxzZQotICBhY19jcHBfZXJyPXllcwotZmkKLWlmIHRlc3QgLXogIiRhY19jcHBfZXJyIjsgdGhlbgotICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBhY19oZWFkZXJfcHJlcHJvYz1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX3ByZXByb2MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9wcmVwcm9jIiA+JjYKLQotIyBTbz8gIFdoYXQgYWJvdXQgdGhpcyBoZWFkZXI/Ci1jYXNlICRhY19oZWFkZXJfY29tcGlsZXI6JGFjX2hlYWRlcl9wcmVwcm9jOiRhY19jX3ByZXByb2Nfd2Fybl9mbGFnIGluCi0gIHllczpubzogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjI7fQotICAgIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotICAgIDs7Ci0gIG5vOnllczoqICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcmVzZW50IGJ1dCBjYW5ub3QgYmUgY29tcGlsZWQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogc2VlIHRoZSBBdXRvY29uZiBkb2N1bWVudGF0aW9uIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogaW4gdGhlIGZ1dHVyZSwgdGhlIGNvbXBpbGVyIHdpbGwgdGFrZSBwcmVjZWRlbmNlIiA+JjI7fQotICAgICgKLSAgICAgIGNhdCA8PFxfQVNCT1gKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIFJlcG9ydCB0aGlzIHRvIG5ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgIyMKLSMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLV9BU0JPWAotICAgICkgfAotICAgICAgc2VkICJzL14vJGFzX21lOiBXQVJOSU5HOiAgICAgLyIgPiYyCi0gICAgOzsKLWVzYWMKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2hlYWRlciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfaGVhZGVyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBldmFsICIkYXNfYWNfSGVhZGVyPVwkYWNfaGVhZGVyX3ByZXByb2MiCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotCi1maQotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19oZWFkZXIiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi0KLWRvbmUKLQotCi0jIFJQTSBzdWJkaXJlY3RvcnkgcGF0aCAoc2lnaCkKLWlmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iICYmIFwKLSAgICAgICAgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIGhvc3QvaHJfc3dpbnN0ICIgPiAvZGV2L251bGw7IHRoZW4KLQotZm9yIGFjX2hlYWRlciBpbiBycG0vcnBtdHMuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPHJwbS9ycG1saWIuaD4KLQotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY19IZWFkZXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLWZpCi0KLSMgT3BlbkJTRCAyLjYgbmVlZHMgbmV0aW5ldC9pbi5oIGJlZm9yZSBuZXRpbmV0L2luX3BjYi5oCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIG5ldGluZXQvaW5fcGNiLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgbmV0aW5ldC9pbl9wY2IuaC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7Y3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luX3BjYi5oPgotCi1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotICBjdl9oYXZlX25ldGluZXRfaW5fcGNiX2g9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oIiA+JjYKLWlmIHRlc3QgJGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX05FVElORVRfSU5fUENCX0ggMQotX0FDRU9GCi0KLWZpCi0KLSMgTmV0QlNEIG5lZWRzIG1hY2hpbmUvdHlwZXMuaCBiZWZvcmUgc3lzL2Rpc2tsYWJlbC5oCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN5cy9kaXNrbGFiZWwuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzeXMvZGlza2xhYmVsLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2N2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotI2luY2x1ZGUgPG1hY2hpbmUvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvZGlza2xhYmVsLmg+Ci0KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2g9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgY3ZfaGF2ZV9zeXNfZGlza2xhYmVsX2g9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCIgPiY2Ci1pZiB0ZXN0ICRjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX1NZU19ESVNLTEFCRUxfSCAxCi1fQUNFT0YKLQotZmkKLQotIyBPcGVuU1NMCi0KLQotCi0KLQotZm9yIGFjX2hlYWRlciBpbiBvcGVuc3NsL2htYWMuaCBvcGVuc3NsL2V2cC5oIG9wZW5zc2wvYWVzLmggb3BlbnNzbC9kZXMuaCBvcGVuc3NsL2RoLmgKLWRvCi1hc19hY19IZWFkZXI9YGVjaG8gImFjX2N2X2hlYWRlcl8kYWNfaGVhZGVyIiB8ICRhc190cl9zaGAKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AiID4mNgotZWxzZQotICAjIElzIHRoZSBoZWFkZXIgY29tcGlsYWJsZT8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHVzYWJpbGl0eSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5Li4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0kYWNfaW5jbHVkZXNfZGVmYXVsdAotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfaGVhZGVyX2NvbXBpbGVyPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19oZWFkZXJfY29tcGlsZXI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfaGVhZGVyX2NvbXBpbGVyIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfY29tcGlsZXIiID4mNgotCi0jIElzIHRoZSBoZWFkZXIgcHJlc2VudD8KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciBwcmVzZW5jZS4uLiAkRUNIT19DIiA+JjYKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPCRhY19oZWFkZXI+Ci1fQUNFT0YKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0XCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0KSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gPi9kZXYvbnVsbDsgdGhlbgotICBpZiB0ZXN0IC1zIGNvbmZ0ZXN0LmVycjsgdGhlbgotICAgIGFjX2NwcF9lcnI9JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcKLSAgICBhY19jcHBfZXJyPSRhY19jcHBfZXJyJGFjX2Nfd2Vycm9yX2ZsYWcKLSAgZWxzZQotICAgIGFjX2NwcF9lcnI9Ci0gIGZpCi1lbHNlCi0gIGFjX2NwcF9lcnI9eWVzCi1maQotaWYgdGVzdCAteiAiJGFjX2NwcF9lcnIiOyB0aGVuCi0gIGFjX2hlYWRlcl9wcmVwcm9jPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0gIGFjX2hlYWRlcl9wcmVwcm9jPW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfcHJlcHJvYyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfaGVhZGVyX3ByZXByb2MiID4mNgotCi0jIFNvPyAgV2hhdCBhYm91dCB0aGlzIGhlYWRlcj8KLWNhc2UgJGFjX2hlYWRlcl9jb21waWxlcjokYWNfaGVhZGVyX3ByZXByb2M6JGFjX2NfcHJlcHJvY193YXJuX2ZsYWcgaW4KLSAgeWVzOm5vOiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGFjY2VwdGVkIGJ5IHRoZSBjb21waWxlciwgcmVqZWN0ZWQgYnkgdGhlIHByZXByb2Nlc3NvciEiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgY29tcGlsZXIncyByZXN1bHQiID4mMjt9Ci0gICAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi0gICAgOzsKLSAgbm86eWVzOiogKQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByZXNlbnQgYnV0IGNhbm5vdCBiZSBjb21waWxlZCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIGNoZWNrIGZvciBtaXNzaW5nIHByZXJlcXVpc2l0ZSBoZWFkZXJzPyIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBzZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24iID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBzZWN0aW9uIFwiUHJlc2VudCBCdXQgQ2Fubm90IEJlIENvbXBpbGVkXCIiID4mMjt9Ci0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBwcmVwcm9jZXNzb3IncyByZXN1bHQiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCB0YWtlIHByZWNlZGVuY2UiID4mMjt9Ci0gICAgKAotICAgICAgY2F0IDw8XF9BU0JPWAotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotIyMgUmVwb3J0IHRoaXMgdG8gbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIwotX0FTQk9YCi0gICAgKSB8Ci0gICAgICBzZWQgInMvXi8kYXNfbWU6IFdBUk5JTkc6ICAgICAvIiA+JjIKLSAgICA7OwotZXNhYwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfaGVhZGVyIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19oZWFkZXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX0hlYWRlcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGV2YWwgIiRhc19hY19IZWFkZXI9XCRhY19oZWFkZXJfcHJlcHJvYyIKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci0KLWZpCi1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2hlYWRlciIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLQotZG9uZQotCi0KLWZvciBhY19oZWFkZXIgaW4gc2VjdXJpdHkvY3J5cHRva2kuaAotZG8KLWFzX2FjX0hlYWRlcj1gZWNobyAiYWNfY3ZfaGVhZGVyXyRhY19oZWFkZXIiIHwgJGFzX3RyX3NoYAotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY19IZWFkZXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfSGVhZGVyJ30nYCIgPiY2Ci1lbHNlCi0gICMgSXMgdGhlIGhlYWRlciBjb21waWxhYmxlPwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgdXNhYmlsaXR5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgJGFjX2hlYWRlciB1c2FiaWxpdHkuLi4gJEVDSE9fQyIgPiY2Ci1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSRhY19pbmNsdWRlc19kZWZhdWx0Ci0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19oZWFkZXJfY29tcGlsZXI9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2hlYWRlcl9jb21waWxlcj1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19oZWFkZXJfY29tcGlsZXIiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2hlYWRlcl9jb21waWxlciIgPiY2Ci0KLSMgSXMgdGhlIGhlYWRlciBwcmVzZW50PwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRhY19oZWFkZXIgcHJlc2VuY2UiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkYWNfaGVhZGVyIHByZXNlbmNlLi4uICRFQ0hPX0MiID4mNgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8JGFjX2hlYWRlcj4KLV9BQ0VPRgotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHRcIiIpID4mNQotICAoZXZhbCAkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSA+L2Rldi9udWxsOyB0aGVuCi0gIGlmIHRlc3QgLXMgY29uZnRlc3QuZXJyOyB0aGVuCi0gICAgYWNfY3BwX2Vycj0kYWNfY19wcmVwcm9jX3dhcm5fZmxhZwotICAgIGFjX2NwcF9lcnI9JGFjX2NwcF9lcnIkYWNfY193ZXJyb3JfZmxhZwotICBlbHNlCi0gICAgYWNfY3BwX2Vycj0KLSAgZmkKLWVsc2UKLSAgYWNfY3BwX2Vycj15ZXMKLWZpCi1pZiB0ZXN0IC16ICIkYWNfY3BwX2VyciI7IHRoZW4KLSAgYWNfaGVhZGVyX3ByZXByb2M9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLSAgYWNfaGVhZGVyX3ByZXByb2M9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX2V4dAotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2hlYWRlcl9wcmVwcm9jIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19oZWFkZXJfcHJlcHJvYyIgPiY2Ci0KLSMgU28/ICBXaGF0IGFib3V0IHRoaXMgaGVhZGVyPwotY2FzZSAkYWNfaGVhZGVyX2NvbXBpbGVyOiRhY19oZWFkZXJfcHJlcHJvYzokYWNfY19wcmVwcm9jX3dhcm5fZmxhZyBpbgotICB5ZXM6bm86ICkKLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBhY2NlcHRlZCBieSB0aGUgY29tcGlsZXIsIHJlamVjdGVkIGJ5IHRoZSBwcmVwcm9jZXNzb3IhIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogYWNjZXB0ZWQgYnkgdGhlIGNvbXBpbGVyLCByZWplY3RlZCBieSB0aGUgcHJlcHJvY2Vzc29yISIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIGNvbXBpbGVyJ3MgcmVzdWx0IiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJvY2VlZGluZyB3aXRoIHRoZSBjb21waWxlcidzIHJlc3VsdCIgPiYyO30KLSAgICBhY19oZWFkZXJfcHJlcHJvYz15ZXMKLSAgICA7OwotICBubzp5ZXM6KiApCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogcHJlc2VudCBidXQgY2Fubm90IGJlIGNvbXBpbGVkIiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6ICAgICBjaGVjayBmb3IgbWlzc2luZyBwcmVyZXF1aXNpdGUgaGVhZGVycz8iID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgY2hlY2sgZm9yIG1pc3NpbmcgcHJlcmVxdWlzaXRlIGhlYWRlcnM/IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHNlZSB0aGUgQXV0b2NvbmYgZG9jdW1lbnRhdGlvbiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiAgICAgc2VjdGlvbiBcIlByZXNlbnQgQnV0IENhbm5vdCBCZSBDb21waWxlZFwiIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogJGFjX2hlYWRlcjogICAgIHNlY3Rpb24gXCJQcmVzZW50IEJ1dCBDYW5ub3QgQmUgQ29tcGlsZWRcIiIgPiYyO30KLSAgICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiAkYWNfaGVhZGVyOiBwcm9jZWVkaW5nIHdpdGggdGhlIHByZXByb2Nlc3NvcidzIHJlc3VsdCIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IHByb2NlZWRpbmcgd2l0aCB0aGUgcHJlcHJvY2Vzc29yJ3MgcmVzdWx0IiA+JjI7fQotICAgIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiY1Ci1lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19oZWFkZXI6IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIHRha2UgcHJlY2VkZW5jZSIgPiYyO30KLSAgICAoCi0gICAgICBjYXQgPDxcX0FTQk9YCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0jIyBSZXBvcnQgdGhpcyB0byBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0ICMjCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi1fQVNCT1gKLSAgICApIHwKLSAgICAgIHNlZCAicy9eLyRhc19tZTogV0FSTklORzogICAgIC8iID4mMgotICAgIDs7Ci1lc2FjCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19oZWFkZXIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2hlYWRlci4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfSGVhZGVyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZXZhbCAiJGFzX2FjX0hlYWRlcj1cJGFjX2hlYWRlcl9wcmVwcm9jIgotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY19IZWFkZXInfSdgIiA+JjYKLQotZmkKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX0hlYWRlcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfaGVhZGVyIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotCi1kb25lCi0KLQotIyBQcmludGluZwotIyBFeHRyYWN0IHRoZSBmaXJzdCB3b3JkIG9mICJscHN0YXQiLCBzbyBpdCBjYW4gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmdzLgotc2V0IGR1bW15IGxwc3RhdDsgYWNfd29yZD0kMgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfd29yZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcGF0aF9MUFNUQVRfUEFUSCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXNlICRMUFNUQVRfUEFUSCBpbgotICBbXFwvXSogfCA/OltcXC9dKikKLSAgYWNfY3ZfcGF0aF9MUFNUQVRfUEFUSD0iJExQU1RBVF9QQVRIIiAjIExldCB0aGUgdXNlciBvdmVycmlkZSB0aGUgdGVzdCB3aXRoIGEgcGF0aC4KLSAgOzsKLSAgKikKLSAgYXNfc2F2ZV9JRlM9JElGUzsgSUZTPSRQQVRIX1NFUEFSQVRPUgotZm9yIGFzX2RpciBpbiAkUEFUSAotZG8KLSAgSUZTPSRhc19zYXZlX0lGUwotICB0ZXN0IC16ICIkYXNfZGlyIiAmJiBhc19kaXI9LgotICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KLSAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCI7IHRoZW4KLSAgICBhY19jdl9wYXRoX0xQU1RBVF9QQVRIPSIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiBmb3VuZCAkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiA+JjUKLSAgICBicmVhayAyCi0gIGZpCi1kb25lCi1kb25lCi0KLSAgOzsKLWVzYWMKLWZpCi1MUFNUQVRfUEFUSD0kYWNfY3ZfcGF0aF9MUFNUQVRfUEFUSAotCi1pZiB0ZXN0IC1uICIkTFBTVEFUX1BBVEgiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRMUFNUQVRfUEFUSCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kTFBTVEFUX1BBVEgiID4mNgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi1pZiB0ZXN0IHgkTFBTVEFUX1BBVEggIT0geDsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTFBTVEFUX1BBVEggIiRMUFNUQVRfUEFUSCIKLV9BQ0VPRgotCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9MUFNUQVQgMQotX0FDRU9GCi0KLWZpCi0KLWZvciBhY19mdW5jIGluIGNnZXRuZXh0Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotaWYgdGVzdCAtciAvZXRjL3ByaW50Y2FwOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9QUklOVENBUCAxCi1fQUNFT0YKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhdXRoZW50aWNhdGlvbiBzdXBwb3J0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQuLi4gJEVDSE9fQyIgPiY2CisjICAgICAgIENoZWNrIGZvciBQS0NTMTEKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGF1dGhlbnRpY2F0aW9uIHN1cHBvcnQuLi4gIiA+JjY7IH0KIHVzZW9wZW5zc2w9bm8KIHVzZXBrY3M9bm8KIGlmIHRlc3QgIngkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfc2VjdXJpdHlfY3J5cHRva2lfaCIgIT0gInh5ZXMiOyB0aGVuCiAgICAgaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogQXNrZWQgdG8gdXNlIFBLQ1MxMSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBBc2tlZCB0byB1c2UgUEtDUzExIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJBc2tlZCB0byB1c2UgUEtDUzExIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiAiJExJTkVOTyIgNQogICAgIGZpCiBlbHNlCiAgICAgaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCkBAIC0zNzQ2OSwxMSArMjQzMzIsMTEgQEAKICAgICBmaQogZmkKIAotaWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIjsgdGhlbgorIyAgICAgICBDaGVjayBmb3IgT3BlblNTTAorIworaWYgdGVzdCAieCRhY19jdl9saWJfY3J5cHRvX0VWUF9tZDUiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9saWJfZWF5MzJfRVZQX21kNSIgIT0gInh5ZXMiIC1vICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2htYWNfaCIgIT0gInh5ZXMiOyB0aGVuCiAgICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IEFza2VkIHRvIHVzZSBPcGVuU1NMIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEFza2VkIHRvIHVzZSBPcGVuU1NMIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9CisgICAgICAgIGFzX2ZuX2Vycm9yICQ/ICJBc2tlZCB0byB1c2UgT3BlblNTTCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LiIgIiRMSU5FTk8iIDUKICAgICBmaQogZWxzZQogICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgpAQCAtMzc0ODUsNyArMjQzNDgsMjEgQEAKICAgICBmaQogZmkKIAotaWYgdGVzdCAieCR1c2VvcGVuc3NsIiAhPSAieG5vIiA7IHRoZW4KKyMgICAgICAgQXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uL2VuY3J5cHRpb24gbW9kZXMKKyMKK2lmIHRlc3QgIngkQ1JZUFRPIiA9ICJ4aW50ZXJuYWwiIDsgdGhlbgorICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCisgICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIGVuY3Jtb2Rlcz0iREVTIEFFUyIKKyAgICBlbHNlCisgICAgICAgIGVuY3Jtb2Rlcz0iZGlzYWJsZWQiCisgICAgZmkKKworJGFzX2VjaG8gIiNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPIDEiID4+Y29uZmRlZnMuaAorCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEludGVybmFsIENyeXB0byBTdXBwb3J0IiA+JjUKKyRhc19lY2hvICJJbnRlcm5hbCBDcnlwdG8gU3VwcG9ydCIgPiY2OyB9CitlbGlmIHRlc3QgIngkdXNlb3BlbnNzbCIgIT0gInhubyIgOyB0aGVuCiAgICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKICAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KICAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9hZXNfaCIgPSAieHllcyIgOyB0aGVuCkBAIC0zNzQ5NiwxMyArMjQzNzMsMTEgQEAKICAgICBlbHNlCiAgICAgICAgIGVuY3Jtb2Rlcz0iZGlzYWJsZWQiCiAgICAgZmkKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEKLV9BQ0VPRgorICAgICRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMSIgPj5jb25mZGVmcy5oCiAKICAgICBMTkVUU05NUExJQlM9IiRMTkVUU05NUExJQlMgJExJQkNSWVBUTyIKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBPcGVuU1NMIFN1cHBvcnQiID4mNQotZWNobyAiJHtFQ0hPX1R9T3BlblNTTCBTdXBwb3J0IiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogT3BlblNTTCBTdXBwb3J0IiA+JjUKKyRhc19lY2hvICJPcGVuU1NMIFN1cHBvcnQiID4mNjsgfQogZWxpZiB0ZXN0ICJ4JHVzZXBrY3MiICE9ICJ4bm8iIDsgdGhlbgogICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCiAgICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCkBAIC0zNzUxMCwzMSArMjQzODUsMzMgQEAKICAgICBlbHNlCiAgICAgICAgIGVuY3Jtb2Rlcz0iZGlzYWJsZWQiCiAgICAgZmkKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1VTRV9QS0NTMTEgMQotX0FDRU9GCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfVVNFX1BLQ1MxMSAxIiA+PmNvbmZkZWZzLmgKIAogICAgIExORVRTTk1QTElCUz0iJExORVRTTk1QTElCUyAkTElCUEtDUzExIgotICAgIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFBLQ1MxMSBTdXBwb3J0IiA+JjUKLWVjaG8gIiR7RUNIT19UfVBLQ1MxMSBTdXBwb3J0IiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogUEtDUzExIFN1cHBvcnQiID4mNQorJGFzX2VjaG8gIlBLQ1MxMSBTdXBwb3J0IiA+JjY7IH0KIGVsaWYgdGVzdCAieCRlbmFibGVfbWQ1IiAhPSAieG5vIjsgdGhlbgogICAgIGF1dGhtb2Rlcz0iTUQ1IgogICAgIGVuY3Jtb2Rlcz0iIgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSAxCi1fQUNFT0YKKyAgICAkYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUgMSIgPj5jb25mZGVmcy5oCiAKLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBJbnRlcm5hbCBNRDUgU3VwcG9ydCIgPiY1Ci1lY2hvICIke0VDSE9fVH1JbnRlcm5hbCBNRDUgU3VwcG9ydCIgPiY2CisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IEludGVybmFsIE1ENSBTdXBwb3J0IiA+JjUKKyRhc19lY2hvICJJbnRlcm5hbCBNRDUgU3VwcG9ydCIgPiY2OyB9CiBmaQogaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCi0gICAgYXV0aG1vZGVzPWBlY2hvICRhdXRobW9kZXMgfCBzZWQgJ3MvTUQ1ICovLzsnYAorICAgIGF1dGhtb2Rlcz1gZWNobyAkYXV0aG1vZGVzIHwgJFNFRCAncy9NRDUgKi8vOydgCiBmaQogCiAKIAogCiAgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgQ3J5cHRvIHN1cHBvcnQgZnJvbTogICAgICAgICRDUllQVE8KK0VPRgorCisKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgogICBBdXRoZW50aWNhdGlvbiBzdXBwb3J0OiAgICAgJGF1dGhtb2RlcwogRU9GCiAKQEAgLTM3NTUyLDEzMSArMjQ0MjksMjYwIEBACiAKIGZpCiAKLSMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igb2ZmX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igb2ZmX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3R5cGVfb2ZmX3Qrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KKyMKKyMgQ2hlY2sgd2hldGhlciB1c2VyIHdhbnRzIEROU1NFQyBsb2NhbCB2YWxpZGF0aW9uIHN1cHBvcnQKKyMKK19saWJzPSR7TElCU30KK2lmICEgdGVzdCAieC0kd2FudF9kbnNzZWMiID0gIngtbm8iIDsgdGhlbgorICAgIGZvciBhY19oZWFkZXIgaW4gdmFsaWRhdG9yL3ZhbGlkYXRvci1jb25maWcuaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAidmFsaWRhdG9yL3ZhbGlkYXRvci1jb25maWcuaCIgImFjX2N2X2hlYWRlcl92YWxpZGF0b3JfdmFsaWRhdG9yX2NvbmZpZ19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl92YWxpZGF0b3JfdmFsaWRhdG9yX2NvbmZpZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfVkFMSURBVE9SX1ZBTElEQVRPUl9DT05GSUdfSCAxCiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorCitmaQorCitkb25lCisKKyAgICBpZiB0ZXN0ICIkYWNfY3ZfaGVhZGVyX3ZhbGlkYXRvcl92YWxpZGF0b3JfY29uZmlnX2giICE9IHllczsgdGhlbgorICAgICAgICBhc19mbl9lcnJvciAkPyAiQ2FuJ3QgZmluZCB2YWxpZGF0b3IuaCIgIiRMSU5FTk8iIDUKKyAgICBmaQorICAgIGlmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiAhPSAieHllcyIgLWEgXAorICAgICAgICAgICAgIngkYWNfY3ZfbGliX2VheTMyX0VWUF9tZDUiICE9ICJ4eWVzIiAtbyBcCisgICAgICAgICAgICAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIjsgdGhlbgorICAgICAgICBhc19mbl9lcnJvciAkPyAiQ291bGRuJ3QgZmluZCBPcGVuU1NMIGZvciBsb2NhbCBETlNTRUMgdmFsaWRhdGlvbiBzdXBwb3J0LiIgIiRMSU5FTk8iIDUKKyAgICBmaQorICAgIExJQlM9IiRMSUJTICRMSUJDUllQVE8iCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgcXVlcnlfc2VuZCBpbiAtbHNyZXMiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIHF1ZXJ5X3NlbmQgaW4gLWxzcmVzLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl9zcmVzX3F1ZXJ5X3NlbmQrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCitMSUJTPSItbHNyZXMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworLyogT3ZlcnJpZGUgYW55IEdDQyBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuCisgICBVc2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBHQ0MKKyAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIKKyNlbmRpZgorY2hhciBxdWVyeV9zZW5kICgpOwogaW50CiBtYWluICgpCiB7Ci1pZiAoKG9mZl90ICopIDApCi0gIHJldHVybiAwOwotaWYgKHNpemVvZiAob2ZmX3QpKQotICByZXR1cm4gMDsKK3JldHVybiBxdWVyeV9zZW5kICgpOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X3R5cGVfb2ZmX3Q9eWVzCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2xpYl9zcmVzX3F1ZXJ5X3NlbmQ9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2xpYl9zcmVzX3F1ZXJ5X3NlbmQ9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbGliX3NyZXNfcXVlcnlfc2VuZCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl9zcmVzX3F1ZXJ5X3NlbmQiID4mNjsgfQoraWYgdGVzdCAieCRhY19jdl9saWJfc3Jlc19xdWVyeV9zZW5kIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTElCU1JFUyAxCitfQUNFT0YKIAotYWNfY3ZfdHlwZV9vZmZfdD1ubworICBMSUJTPSItbHNyZXMgJExJQlMiCisKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIkNhbid0IGZpbmQgbGlic3JlcyIgIiRMSU5FTk8iIDUKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICBWQUxfTElCUz0iLWxzcmVzICRMSUJDUllQVE8iCisgICAgTElCUz0iJExJQlMgLWxzcmVzIgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHBfdmFsX3N0YXR1cyBpbiAtbHZhbCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcF92YWxfc3RhdHVzIGluIC1sdmFsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2xpYl92YWxfcF92YWxfc3RhdHVzKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUworTElCUz0iLWx2YWwgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBfdmFsX3N0YXR1cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBfdmFsX3N0YXR1cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfdmFsX3BfdmFsX3N0YXR1cz15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3ZhbF9wX3ZhbF9zdGF0dXM9bm8KIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9vZmZfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9vZmZfdCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl90eXBlX29mZl90ID0geWVzOyB0aGVuCi0gIDoKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfdmFsX3BfdmFsX3N0YXR1cyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2xpYl92YWxfcF92YWxfc3RhdHVzIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3ZhbF9wX3ZhbF9zdGF0dXMiID0geHllczsgdGhlbiA6CisgIExJQlM9IiRMSUJTIC1sdmFsIgorICAgICAgICAgICAgICAgICBWQUxfTElCUz0iJFZBTF9MSUJTIC1sdmFsIgorICAgICAgICAgICAgICAgICBoYXZlX3ZhbF9yZXNfcXVlcnk9eWVzCitlbHNlCisgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwdGhyZWFkX3J3bG9ja19pbml0IGluIC1scHRocmVhZCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcHRocmVhZF9yd2xvY2tfaW5pdCBpbiAtbHB0aHJlYWQuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9yd2xvY2tfaW5pdCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1scHRocmVhZCAgJExJQlMiCitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKy8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgorICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCisgICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiCisjZW5kaWYKK2NoYXIgcHRocmVhZF9yd2xvY2tfaW5pdCAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHB0aHJlYWRfcndsb2NrX2luaXQgKCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9yd2xvY2tfaW5pdD15ZXMKK2Vsc2UKKyAgYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9yd2xvY2tfaW5pdD1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitMSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9saWJfcHRocmVhZF9wdGhyZWFkX3J3bG9ja19pbml0IiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfbGliX3B0aHJlYWRfcHRocmVhZF9yd2xvY2tfaW5pdCIgPiY2OyB9CitpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wdGhyZWFkX3B0aHJlYWRfcndsb2NrX2luaXQiID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9MSUJQVEhSRUFEIDEKK19BQ0VPRgorCisgIExJQlM9Ii1scHRocmVhZCAkTElCUyIKKworZmkKKworCQkgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBwX3ZhbF9zdGF0dXMgaW4gLWx2YWwtdGhyZWFkcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgcF92YWxfc3RhdHVzIGluIC1sdmFsLXRocmVhZHMuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfbGliX3ZhbF90aHJlYWRzX3BfdmFsX3N0YXR1cys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKK0xJQlM9Ii1sdmFsLXRocmVhZHMgICRMSUJTIgorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisvKiBPdmVycmlkZSBhbnkgR0NDIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4KKyAgIFVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIEdDQworICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIgorI2VuZGlmCitjaGFyIHBfdmFsX3N0YXR1cyAoKTsKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHBfdmFsX3N0YXR1cyAoKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9saWJfdmFsX3RocmVhZHNfcF92YWxfc3RhdHVzPXllcworZWxzZQorICBhY19jdl9saWJfdmFsX3RocmVhZHNfcF92YWxfc3RhdHVzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKK0xJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2xpYl92YWxfdGhyZWFkc19wX3ZhbF9zdGF0dXMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9saWJfdmFsX3RocmVhZHNfcF92YWxfc3RhdHVzIiA+JjY7IH0KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3ZhbF90aHJlYWRzX3BfdmFsX3N0YXR1cyIgPSB4eWVzOyB0aGVuIDoKKyAgaGF2ZV92YWxfcmVzX3F1ZXJ5PXllcworICAgICAgICAgICAgICAgICAgIExJQlM9Ii1sdmFsLXRocmVhZHMgJExJQlMiCisgICAgICAgICAgICAgICAgICAgVkFMX0xJQlM9Ii1sdmFsLXRocmVhZHMgLWxwdGhyZWFkICRWQUxfTElCUyIKKyAgICAgICAgICAgICAgICAgICBMSUJWQUxfU1VGRklYPSItdGhyZWFkcyIKK2Vsc2UKKyAgYXNfZm5fZXJyb3IgJD8gIkNhbid0IGZpbmQgbGlidmFsIG9yIGxpYnZhbC10aHJlYWRzIiAiJExJTkVOTyIgNQorZmkKKworCitmaQorCisKKyRhc19lY2hvICIjZGVmaW5lIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OIDEiID4+Y29uZmRlZnMuaAorCisgICAgRE5TU0VDPSJlbmFibGVkIgorZWxzZQorICAgIEROU1NFQz0iZGlzYWJsZWQiCitmaQorCitMSUJTPSR7X2xpYnN9CisKKworCisgIGNhdCA+PiBjb25maWd1cmUtc3VtbWFyeSA8PCBFT0YKKyAgTG9jYWwgRE5TU0VDIHZhbGlkYXRpb246ICAgICRETlNTRUMKK0VPRgorCisKKworCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIHR5cGVzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJvZmZfdCIgImFjX2N2X3R5cGVfb2ZmX3QiICIkYWNfaW5jbHVkZXNfZGVmYXVsdCIKK2lmIHRlc3QgIngkYWNfY3ZfdHlwZV9vZmZfdCIgPSB4eWVzOyB0aGVuIDoKKwogZWxzZQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIG9mZl90IGxvbmcKKyNkZWZpbmUgb2ZmX3QgbG9uZyBpbnQKIF9BQ0VPRgogCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHBpZF90IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHBpZF90Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl90eXBlX3BpZF90K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotJGFjX2luY2x1ZGVzX2RlZmF1bHQKLWludAotbWFpbiAoKQotewotaWYgKChwaWRfdCAqKSAwKQotICByZXR1cm4gMDsKLWlmIChzaXplb2YgKHBpZF90KSkKLSAgcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9waWRfdD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInBpZF90IiAiYWNfY3ZfdHlwZV9waWRfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3BpZF90IiA9IHh5ZXM7IHRoZW4gOgogCi1hY19jdl90eXBlX3BpZF90PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX3BpZF90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3BpZF90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfcGlkX3QgPSB5ZXM7IHRoZW4KLSAgOgogZWxzZQogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC0zNzY4NSwxNiArMjQ2OTEsMTIgQEAKIAogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciB0aW1lLmggYW5kIHN5cy90aW1lLmggbWF5IGJvdGggYmUgaW5jbHVkZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hlYWRlcl90aW1lK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGltZS5oIGFuZCBzeXMvdGltZS5oIG1heSBib3RoIGJlIGluY2x1ZGVkLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2hlYWRlcl90aW1lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpbmNsdWRlIDxzeXMvdGltZS5oPgpAQCAtMzc3MDksNjEgKzI0NzExLDMwIEBACiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2hlYWRlcl90aW1lPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9oZWFkZXJfdGltZT1ubworICBhY19jdl9oZWFkZXJfdGltZT1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfaGVhZGVyX3RpbWUiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9oZWFkZXJfdGltZSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hlYWRlcl90aW1lIiA+JjY7IH0KIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl90aW1lID0geWVzOyB0aGVuCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxCi1fQUNFT0YKKyRhc19lY2hvICIjZGVmaW5lIFRJTUVfV0lUSF9TWVNfVElNRSAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAogCi0jIHRoaXMgc2hvdWxkIHVzZSBBQ19DSEVDS19UWVBFLCBidXQgaXQncyBicm9rZW4gYXQgbGVhc3QgaW4gMi4xMy0xNAotIyBzbyB3ZSBkbyBpdCBieSBoYW5kLgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrbGVuX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2xlbl90Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwke2FjX2N2X3R5cGVfJDErc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworIyMKKyMgICBNb3JlIGNvbXBsZXggY2hlY2tzOgorIyMKKworIyAgIENoZWNrIGZvciAnc29ja2xlbl90JyAgICAgICAgICAgICAgICAgICAgICAgICAgIChIUC1VWCkKKyMKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgInNvY2tsZW5fdCIgImFjX2N2X3R5cGVfc29ja2xlbl90IiAiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgU1REQ19IRUFERVJTCiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0zNzc3MiwzOSArMjQ3NDMsMjIgQEAKICNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAic29ja2xlbl90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2N2X3R5cGVfc29ja2xlbl90PXllcwotZWxzZQotICBhY19jdl90eXBlX3NvY2tsZW5fdD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0KgorIgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NvY2tsZW5fdCIgPSB4eWVzOyB0aGVuIDoKIAotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zb2NrbGVuX3QiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc29ja2xlbl90IiA+JjYKLWlmIHRlc3QgJGFjX2N2X3R5cGVfc29ja2xlbl90ID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU09DS0xFTl9UIDEKIF9BQ0VPRgogCisKIGZpCiAKLSMgQUlYIGtlZXBzIGluX2FkZHJfdCBpbiAvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGluX2FkZHJfdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpbl9hZGRyX3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7YWNfY3ZfdHlwZV8kMStzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLworCisKKyMgICBDaGVjayBmb3IgJ2luX2FkZHJfdCcKKyMgICAgICAgTWF5IGJlIGluIDxuZXRpbmV0L2luLmg+ICAgICAgICAgICAgICAgICAgICAgICAgKEFJWCkKKyMKK2FjX2ZuX2NfY2hlY2tfdHlwZSAiJExJTkVOTyIgImluX2FkZHJfdCIgImFjX2N2X3R5cGVfaW5fYWRkcl90IiAiCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgU1REQ19IRUFERVJTCiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0zNzgxMyw0MzAgKzI0NzY3LDQyNyBAQAogI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJpbl9hZGRyX3RbXmEtekEtWl8wLTldIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYWNfY3ZfdHlwZV9pbl9hZGRyX3Q9eWVzCi1lbHNlCi0gIGFjX2N2X3R5cGVfaW5fYWRkcl90PW5vCi1maQotcm0gLWYgY29uZnRlc3QqCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfaW5fYWRkcl90IiA9IHh5ZXM7IHRoZW4gOgogCi1maQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl90eXBlX2luX2FkZHJfdCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdHlwZV9pbl9hZGRyX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbl9hZGRyX3QgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgSEFWRV9JTl9BRERSX1QgMQogX0FDRU9GCiAKKwogZmkKIAotIyBPbGRlciB2ZXJzaW9ucyBvZiBNaW5HVyBkbyBub3QgZGVmaW5lIHNzaXplX3QgaW4gc3lzL3R5cGVzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHNzaXplX3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3NpemVfdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHthY19jdl90eXBlXyQxK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCisKKworIyAgIENoZWNrIGZvciAnc3NpemVfdCcKKyMgICAgICAgTm90IG5lY2Vzc2FyaWx5IGluIDxzeXMvdHlwZXMuaD4gICAgICAgICAgICAgICAgKG9sZGVyIE1pbkdXKQorIworYWNfZm5fY19jaGVja190eXBlICIkTElORU5PIiAic3NpemVfdCIgImFjX2N2X3R5cGVfc3NpemVfdCIgIgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFNURENfSEVBREVSUwogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0ZGRlZi5oPgogI2VuZGlmCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJzc2l6ZV90W15hLXpBLVpfMC05XSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2N2X3R5cGVfc3NpemVfdD15ZXMKLWVsc2UKLSAgYWNfY3ZfdHlwZV9zc2l6ZV90PW5vCi1maQotcm0gLWYgY29uZnRlc3QqCisiCitpZiB0ZXN0ICJ4JGFjX2N2X3R5cGVfc3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKIAotZmkKLQotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zc2l6ZV90IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl90eXBlX3NzaXplX3QiID4mNgotaWYgdGVzdCAkYWNfY3ZfdHlwZV9zc2l6ZV90ID0geWVzOyB0aGVuCi0KLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1NJWkVfVCAxCiBfQUNFT0YKIAotZmkKLQotIyBDaGVjayBwcyBhcmdzCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGNvcnJlY3QgZmxhZ3MgdG8gcHMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgY29ycmVjdCBmbGFncyB0byBwcy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfcHNfZmxhZ3Mrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAiYCgkUFNQUk9HIC1lIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWVsIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lbCIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIGFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSJhY3giCi1lbGlmIHRlc3QgImAoJFBTUFJPRyAtYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCi1lbGlmIHRlc3QgImAoJFBTUFJPRyAtbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSAyPiYxKSB8ICRFR1JFUCAnIHBzICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0iCi1lbGlmIHRlc3QgImAoJFBTUFJPRyBheCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSJheCIKLWVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZSIKLWVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgotZWxzZQotICB7IGVjaG8gIiRhc19tZTokTElORU5POiBXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZXJtaW5lIHZhbGlkIHBzIGZsYWdzLi4uICBkZWZhdWx0aW5nLi4uIiA+JjUKLWVjaG8gIiRhc19tZTogV0FSTklORzogVW5hYmxlIHRvIGRldGVybWluZSB2YWxpZCBwcyBmbGFncy4uLiAgZGVmYXVsdGluZy4uLiIgPiYyO30KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCi1maQogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3BzX2ZsYWdzIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9wc19mbGFncyIgPiY2Ci0KLVBTQ01EPSIkUFNQUk9HICRhY19jdl9wc19mbGFncyIKLQotY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBQU0NNRCAiJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiCi1fQUNFT0YKIAogCi0jIENoZWNrcyBmb3IgYnl0ZSBvcmRlcgotaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0geWVzOyB0aGVuCi0gIGlmIHRlc3QgeCR3aXRoX2VuZGlhbm5lc3MgPSB4YmlnOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKLV9BQ0VPRgorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBjaGVja3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogCi0gIGVsaWYgdGVzdCAteiAkd2l0aF9lbmRpYW5uZXNzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogWW91IGFyZSBjcm9zcy1jb21waWxpbmcsIGJ1dCB5b3UgaGF2ZSBub3Qgc3BlY2lmaWVkIHRoZSB0YXJnZXQncyBlbmRpYW5uZXNzIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IFlvdSBhcmUgY3Jvc3MtY29tcGlsaW5nLCBidXQgeW91IGhhdmUgbm90IHNwZWNpZmllZCB0aGUgdGFyZ2V0J3MgZW5kaWFubmVzcyIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQorIyMKKyMgICBDb21waWxhdGlvbiBjaGFyYWN0ZXJpc3RpY3MKKyMjCisKKyMgICAgICAgQnl0ZSBvcmRlcgorIworaWYgdGVzdCAiJHdpdGhfZW5kaWFubmVzcyIgPSAiYmlnIjsgdGhlbgorICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworZWxpZiB0ZXN0ICIkd2l0aF9lbmRpYW5uZXNzIiA9ICJsaXR0bGUiIDsgdGhlbgorICAgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIGJ5dGUgb3JkZXJpbmcgaXMgYmlnZW5kaWFuLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X2NfYmlnZW5kaWFuKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAkd2l0aF9lbmRpYW5uZXNzOyB0aGVuCi0gICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogRW5kaWFubmVzcyBoYXMgYmVlbiBzcGVjaWZpZWQsIGJ1dCB5b3UgYXJlIG5vdCBjcm9zcy1jb21waWxpbmcuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IEVuZGlhbm5lc3MgaGFzIGJlZW4gc3BlY2lmaWVkLCBidXQgeW91IGFyZSBub3QgY3Jvc3MtY29tcGlsaW5nLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotICBmaQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBieXRlIG9yZGVyaW5nIGlzIGJpZ2VuZGlhbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgYnl0ZSBvcmRlcmluZyBpcyBiaWdlbmRpYW4uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2NfYmlnZW5kaWFuK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLworICBhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisgICAgIyBTZWUgaWYgd2UncmUgZGVhbGluZyB3aXRoIGEgdW5pdmVyc2FsIGNvbXBpbGVyLgorICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpZm5kZWYgX19BUFBMRV9DQ19fCisJICAgICAgIG5vdCBhIHVuaXZlcnNhbCBjYXBhYmxlIGNvbXBpbGVyCisJICAgICAjZW5kaWYKKwkgICAgIHR5cGVkZWYgaW50IGR1bW15OworCiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJIyBDaGVjayBmb3IgcG90ZW50aWFsIC1hcmNoIGZsYWdzLiAgSXQgaXMgbm90IHVuaXZlcnNhbCB1bmxlc3MKKwkjIHRoZXJlIGFyZSBhdCBsZWFzdCB0d28gLWFyY2ggZmxhZ3Mgd2l0aCBkaWZmZXJlbnQgdmFsdWVzLgorCWFjX2FyY2g9CisJYWNfcHJldj0KKwlmb3IgYWNfd29yZCBpbiAkQ0MgJENGTEFHUyAkQ1BQRkxBR1MgJExERkxBR1M7IGRvCisJIGlmIHRlc3QgLW4gIiRhY19wcmV2IjsgdGhlbgorCSAgIGNhc2UgJGFjX3dvcmQgaW4KKwkgICAgIGk/ODYgfCB4ODZfNjQgfCBwcGMgfCBwcGM2NCkKKwkgICAgICAgaWYgdGVzdCAteiAiJGFjX2FyY2giIHx8IHRlc3QgIiRhY19hcmNoIiA9ICIkYWNfd29yZCI7IHRoZW4KKwkJIGFjX2FyY2g9JGFjX3dvcmQKKwkgICAgICAgZWxzZQorCQkgYWNfY3ZfY19iaWdlbmRpYW49dW5pdmVyc2FsCisJCSBicmVhaworCSAgICAgICBmaQorCSAgICAgICA7OworCSAgIGVzYWMKKwkgICBhY19wcmV2PQorCSBlbGlmIHRlc3QgIngkYWNfd29yZCIgPSAieC1hcmNoIjsgdGhlbgorCSAgIGFjX3ByZXY9YXJjaAorCSBmaQorICAgICAgIGRvbmUKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgU2VlIGlmIHN5cy9wYXJhbS5oIGRlZmluZXMgdGhlIEJZVEVfT1JERVIgbWFjcm8uCisgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisJICAgICAjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAKIGludAogbWFpbiAoKQogewotI2lmICFCWVRFX09SREVSIHx8ICFCSUdfRU5ESUFOIHx8ICFMSVRUTEVfRU5ESUFOCi0gYm9ndXMgZW5kaWFuIG1hY3JvcwotI2VuZGlmCisjaWYgISAoZGVmaW5lZCBCWVRFX09SREVSICYmIGRlZmluZWQgQklHX0VORElBTiBcCisJCSAgICAgJiYgZGVmaW5lZCBMSVRUTEVfRU5ESUFOICYmIEJZVEVfT1JERVIgJiYgQklHX0VORElBTiBcCisJCSAgICAgJiYgTElUVExFX0VORElBTikKKwkgICAgICBib2d1cyBlbmRpYW4gbWFjcm9zCisJICAgICAjZW5kaWYKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CiAgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gQklHX0VORElBTiBvciBub3QuCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKwkgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorCQkjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CiAKIGludAogbWFpbiAoKQogewogI2lmIEJZVEVfT1JERVIgIT0gQklHX0VORElBTgotIG5vdCBiaWcgZW5kaWFuCi0jZW5kaWYKKwkJIG5vdCBiaWcgZW5kaWFuCisJCSNlbmRpZgogCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2NfYmlnZW5kaWFuPW5vCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0jIEl0IGRvZXMgbm90OyBjb21waWxlIGEgdGVzdCBwcm9ncmFtLgotaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KLSAgIyB0cnkgdG8gZ3Vlc3MgdGhlIGVuZGlhbm5lc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGludG8gYW4gb2JqZWN0IGZpbGUKLSAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCisgICAgaWYgdGVzdCAkYWNfY3ZfY19iaWdlbmRpYW4gPSB1bmtub3duOyB0aGVuCisgICAgICAjIFNlZSBpZiA8bGltaXRzLmg+IGRlZmluZXMgX0xJVFRMRV9FTkRJQU4gb3IgX0JJR19FTkRJQU4gKGUuZy4sIFNvbGFyaXMpLgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotc2hvcnQgYXNjaWlfbW1bXSA9IHsgMHg0MjQ5LCAweDQ3NjUsIDB4NkU0NCwgMHg2OTYxLCAweDZFNTMsIDB4Nzk1MywgMCB9Owotc2hvcnQgYXNjaWlfaWlbXSA9IHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9Owotdm9pZCBfYXNjaWkgKCkgeyBjaGFyICpzID0gKGNoYXIgKikgYXNjaWlfbW07IHMgPSAoY2hhciAqKSBhc2NpaV9paTsgfQotc2hvcnQgZWJjZGljX2lpW10gPSB7IDB4ODlEMywgMHhFM0UzLCAweDg1OTMsIDB4OTVDNSwgMHg4OUM0LCAweDk1ODEsIDAgfTsKLXNob3J0IGViY2RpY19tbVtdID0geyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07Ci12b2lkIF9lYmNkaWMgKCkgeyBjaGFyICpzID0gKGNoYXIgKikgZWJjZGljX21tOyBzID0gKGNoYXIgKikgZWJjZGljX2lpOyB9CisjaW5jbHVkZSA8bGltaXRzLmg+CisKIGludAogbWFpbiAoKQogewotIF9hc2NpaSAoKTsgX2ViY2RpYyAoKTsKKyNpZiAhIChkZWZpbmVkIF9MSVRUTEVfRU5ESUFOIHx8IGRlZmluZWQgX0JJR19FTkRJQU4pCisJICAgICAgYm9ndXMgZW5kaWFuIG1hY3JvcworCSAgICAgI2VuZGlmCisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBpZiBncmVwIEJJR2VuRGlhblN5UyBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCi0gIGFjX2N2X2NfYmlnZW5kaWFuPXllcwotZmkKLWlmIGdyZXAgTGlUVGxlRW5EaWFuIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbCA7IHRoZW4KLSAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KLSAgICBhY19jdl9jX2JpZ2VuZGlhbj1ubwotICBlbHNlCi0gICAgIyBmaW5kaW5nIGJvdGggc3RyaW5ncyBpcyB1bmxpa2VseSB0byBoYXBwZW4sIGJ1dCB3aG8ga25vd3M/Ci0gICAgYWNfY3ZfY19iaWdlbmRpYW49dW5rbm93bgotICBmaQotZmkKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgICMgSXQgZG9lczsgbm93IHNlZSB3aGV0aGVyIGl0IGRlZmluZWQgdG8gX0JJR19FTkRJQU4gb3Igbm90LgorCSBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8bGltaXRzLmg+CisKIGludAogbWFpbiAoKQogewotICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCi0gIHVuaW9uCi0gIHsKLSAgICBsb25nIGw7Ci0gICAgY2hhciBjW3NpemVvZiAobG9uZyldOwotICB9IHU7Ci0gIHUubCA9IDE7Ci0gIGV4aXQgKHUuY1tzaXplb2YgKGxvbmcpIC0gMV0gPT0gMSk7CisjaWZuZGVmIF9CSUdfRU5ESUFOCisJCSBub3QgYmlnIGVuZGlhbgorCQkjZW5kaWYKKworICA7CisgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbHNlCisgIGFjX2N2X2NfYmlnZW5kaWFuPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgZmkKKyAgICBpZiB0ZXN0ICRhY19jdl9jX2JpZ2VuZGlhbiA9IHVua25vd247IHRoZW4KKyAgICAgICMgQ29tcGlsZSBhIHRlc3QgcHJvZ3JhbS4KKyAgICAgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKKyAgIyBUcnkgdG8gZ3Vlc3MgYnkgZ3JlcHBpbmcgdmFsdWVzIGZyb20gYW4gb2JqZWN0IGZpbGUuCisJIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KK3Nob3J0IGludCBhc2NpaV9tbVtdID0KKwkJICB7IDB4NDI0OSwgMHg0NzY1LCAweDZFNDQsIDB4Njk2MSwgMHg2RTUzLCAweDc5NTMsIDAgfTsKKwkJc2hvcnQgaW50IGFzY2lpX2lpW10gPQorCQkgIHsgMHg2OTRDLCAweDU0NTQsIDB4NjU2QywgMHg2RTQ1LCAweDY5NDQsIDB4NkU2MSwgMCB9OworCQlpbnQgdXNlX2FzY2lpIChpbnQgaSkgeworCQkgIHJldHVybiBhc2NpaV9tbVtpXSArIGFzY2lpX2lpW2ldOworCQl9CisJCXNob3J0IGludCBlYmNkaWNfaWlbXSA9CisJCSAgeyAweDg5RDMsIDB4RTNFMywgMHg4NTkzLCAweDk1QzUsIDB4ODlDNCwgMHg5NTgxLCAwIH07CisJCXNob3J0IGludCBlYmNkaWNfbW1bXSA9CisJCSAgeyAweEMyQzksIDB4Qzc4NSwgMHg5NUM0LCAweDg5ODEsIDB4OTVFMiwgMHhBOEUyLCAwIH07CisJCWludCB1c2VfZWJjZGljIChpbnQgaSkgeworCQkgIHJldHVybiBlYmNkaWNfbW1baV0gKyBlYmNkaWNfaWlbaV07CisJCX0KKwkJZXh0ZXJuIGludCBmb287CisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIHVzZV9hc2NpaSAoZm9vKSA9PSB1c2VfZWJjZGljIChmb28pOworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGlmIGdyZXAgQklHZW5EaWFuU3lTIGNvbmZ0ZXN0LiRhY19vYmpleHQgPi9kZXYvbnVsbDsgdGhlbgorCSAgICAgIGFjX2N2X2NfYmlnZW5kaWFuPXllcworCSAgICBmaQorCSAgICBpZiBncmVwIExpVFRsZUVuRGlhbiBjb25mdGVzdC4kYWNfb2JqZXh0ID4vZGV2L251bGwgOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGFjX2N2X2NfYmlnZW5kaWFuIiA9IHVua25vd247IHRoZW4KKwkJYWNfY3ZfY19iaWdlbmRpYW49bm8KKwkgICAgICBlbHNlCisJCSMgZmluZGluZyBib3RoIHN0cmluZ3MgaXMgdW5saWtlbHkgdG8gaGFwcGVuLCBidXQgd2hvIGtub3dzPworCQlhY19jdl9jX2JpZ2VuZGlhbj11bmtub3duCisJICAgICAgZmkKKwkgICAgZmkKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2ludAorbWFpbiAoKQoreworCisJICAgICAvKiBBcmUgd2UgbGl0dGxlIG9yIGJpZyBlbmRpYW4/ICBGcm9tIEhhcmJpc29uJlN0ZWVsZS4gICovCisJICAgICB1bmlvbgorCSAgICAgeworCSAgICAgICBsb25nIGludCBsOworCSAgICAgICBjaGFyIGNbc2l6ZW9mIChsb25nIGludCldOworCSAgICAgfSB1OworCSAgICAgdS5sID0gMTsKKwkgICAgIHJldHVybiB1LmNbc2l6ZW9mIChsb25nIGludCkgLSAxXSA9PSAxOworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX2JpZ2VuZGlhbj1ubwogZWxzZQotICBlY2hvICIkYXNfbWU6IHByb2dyYW0gZXhpdGVkIHdpdGggc3RhdHVzICRhY19zdGF0dXMiID4mNQotZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKKyAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKIAotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfY19iaWdlbmRpYW49eWVzCisgICAgZmkKIGZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX2JpZ2VuZGlhbiIgPiY2Ci1jYXNlICRhY19jdl9jX2JpZ2VuZGlhbiBpbgotICB5ZXMpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X2NfYmlnZW5kaWFuIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfY19iaWdlbmRpYW4iID4mNjsgfQorIGNhc2UgJGFjX2N2X2NfYmlnZW5kaWFuIGluICMoCisgICB5ZXMpCisgICAgICRhc19lY2hvICIjZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxIiA+PmNvbmZkZWZzLmgKKzs7ICMoCisgICBubykKKyAgICAgIDs7ICMoCisgICB1bml2ZXJzYWwpCiAKLWNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCiskYXNfZWNobyAiI2RlZmluZSBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQgMSIgPj5jb25mZGVmcy5oCisKKyAgICAgOzsgIygKKyAgICopCisgICAgIGFzX2ZuX2Vycm9yICQ/ICJGYWlsZWQgdG8gZmlndXJlIG91dCBob3N0IGVuZGlhbm5lc3MsIHBsZWFzZSB1c2UgLS13aXRoLWVuZGlhbm5lc3MgdG8gc3BlY2lmeSBpdC4iICIkTElORU5PIiA1IDs7CisgZXNhYworCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCiBfQUNFT0YKLSA7OwotICBubykKLSAgICAgOzsKLSAgKikKLSAgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bmtub3duIGVuZGlhbm5lc3MKLXByZXNldHRpbmcgYWNfY3ZfY19iaWdlbmRpYW49bm8gKG9yIHllcykgd2lsbCBoZWxwIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IHVua25vd24gZW5kaWFubmVzcwotcHJlc2V0dGluZyBhY19jdl9jX2JpZ2VuZGlhbj1ubyAob3IgeWVzKSB3aWxsIGhlbHAiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0gOzsKLWVzYWMKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCithY19mbl9jX2NoZWNrX3R5cGUgIiRMSU5FTk8iICJzaXplX3QiICJhY19jdl90eXBlX3NpemVfdCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgoraWYgdGVzdCAieCRhY19jdl90eXBlX3NpemVfdCIgPSB4eWVzOyB0aGVuIDoKKworZWxzZQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIHNpemVfdCB1bnNpZ25lZCBpbnQKK19BQ0VPRgogCiBmaQogCi0jIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCiAjIFRoZSBVbHRyaXggNC4yIG1pcHMgYnVpbHRpbiBhbGxvY2EgZGVjbGFyZWQgYnkgYWxsb2NhLmggb25seSB3b3JrcwogIyBmb3IgY29uc3RhbnQgYXJndW1lbnRzLiAgVXNlbGVzcyEKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igd29ya2luZyBhbGxvY2EuaCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl93b3JraW5nX2FsbG9jYV9oK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciB3b3JraW5nIGFsbG9jYS5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X3dvcmtpbmdfYWxsb2NhX2grOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2luY2x1ZGUgPGFsbG9jYS5oPgogaW50CiBtYWluICgpCiB7CiBjaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgyICogc2l6ZW9mIChpbnQpKTsKKwkJCSAgaWYgKHApIHJldHVybiAwOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X3dvcmtpbmdfYWxsb2NhX2g9bm8KKyAgYWNfY3Zfd29ya2luZ19hbGxvY2FfaD1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl93b3JraW5nX2FsbG9jYV9oIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3dvcmtpbmdfYWxsb2NhX2giID4mNjsgfQogaWYgdGVzdCAkYWNfY3Zfd29ya2luZ19hbGxvY2FfaCA9IHllczsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBIQVZFX0FMTE9DQV9IIDEKLV9BQ0VPRgorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BTExPQ0FfSCAxIiA+PmNvbmZkZWZzLmgKIAogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhbGxvY2EiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgYWxsb2NhLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX2FsbG9jYV93b3JrcytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgYWxsb2NhIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBhbGxvY2EuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogI2lmZGVmIF9fR05VQ19fCiAjIGRlZmluZSBhbGxvY2EgX19idWlsdGluX2FsbG9jYQpAQCAtMzgyNDUsMTQgKzI1MTk2LDE0IEBACiAjICBpbmNsdWRlIDxtYWxsb2MuaD4KICMgIGRlZmluZSBhbGxvY2EgX2FsbG9jYQogIyBlbHNlCi0jICBpZiBIQVZFX0FMTE9DQV9ICisjICBpZmRlZiBIQVZFX0FMTE9DQV9ICiAjICAgaW5jbHVkZSA8YWxsb2NhLmg+CiAjICBlbHNlCiAjICAgaWZkZWYgX0FJWAogICNwcmFnbWEgYWxsb2NhCiAjICAgZWxzZQogIyAgICBpZm5kZWYgYWxsb2NhIC8qIHByZWRlZmluZWQgYnkgSFAgY2MgK09saWJjYWxscyAqLwotY2hhciAqYWxsb2NhICgpOwordm9pZCAqYWxsb2NhIChzaXplX3QpOwogIyAgICBlbmRpZgogIyAgIGVuZGlmCiAjICBlbmRpZgpAQCAtMzgyNjMsNTAgKzI1MjE0LDI1IEBACiBtYWluICgpCiB7CiBjaGFyICpwID0gKGNoYXIgKikgYWxsb2NhICgxKTsKKwkJCQkgICAgaWYgKHApIHJldHVybiAwOwogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9mdW5jX2FsbG9jYV93b3Jrcz1ubworICBhY19jdl9mdW5jX2FsbG9jYV93b3Jrcz1ubwogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAogZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9mdW5jX2FsbG9jYV93b3JrcyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfYWxsb2NhX3dvcmtzIiA+JjY7IH0KIAogaWYgdGVzdCAkYWNfY3ZfZnVuY19hbGxvY2Ffd29ya3MgPSB5ZXM7IHRoZW4KIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSEFWRV9BTExPQ0EgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBIQVZFX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKIAogZWxzZQogICAjIFRoZSBTVlIzIGxpYlBXIGFuZCBTVlI0IGxpYnVjYiBib3RoIGNvbnRhaW4gaW5jb21wYXRpYmxlIGZ1bmN0aW9ucwpAQCAtMzgzMTQsMjUgKzI1MjQwLDE5IEBACiAjIGNvbnRhaW4gYSBidWdneSB2ZXJzaW9uLiAgSWYgeW91IHN0aWxsIHdhbnQgdG8gdXNlIHRoZWlyIGFsbG9jYSwKICMgdXNlIGFyIHRvIGV4dHJhY3QgYWxsb2NhLm8gZnJvbSB0aGVtIGluc3RlYWQgb2YgY29tcGlsaW5nIGFsbG9jYS5jLgogCi1BTExPQ0E9YWxsb2NhLiRhY19vYmpleHQKK0FMTE9DQT1cJHtMSUJPQkpESVJ9YWxsb2NhLiRhY19vYmpleHQKIAotY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgQ19BTExPQ0EgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBDX0FMTE9DQSAxIiA+PmNvbmZkZWZzLmgKIAogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciBcYGFsbG9jYS5jJyBuZWVkcyBDcmF5IGhvb2tzLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9vc19jcmF5K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgXGBhbGxvY2EuYycgbmVlZHMgQ3JheSBob29rcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIFxgYWxsb2NhLmMnIG5lZWRzIENyYXkgaG9va3MuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3Zfb3NfY3JheSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaWYgZGVmaW5lZChDUkFZKSAmJiAhIGRlZmluZWQoQ1JBWTIpCisjaWYgZGVmaW5lZCBDUkFZICYmICEgZGVmaW5lZCBDUkFZMgogd2ViZWNyYXkKICNlbHNlCiB3ZW5vdGJlY3JheQpAQCAtMzgzNDAsNyArMjUyNjAsNyBAQAogCiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJ3ZWJlY3JheSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICRFR1JFUCAid2ViZWNyYXkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CiAgIGFjX2N2X29zX2NyYXk9eWVzCiBlbHNlCiAgIGFjX2N2X29zX2NyYXk9bm8KQEAgLTM4MzQ4LDEwMiArMjUyNjgsMTMgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X29zX2NyYXkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X29zX2NyYXkiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9vc19jcmF5IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfb3NfY3JheSIgPiY2OyB9CiBpZiB0ZXN0ICRhY19jdl9vc19jcmF5ID0geWVzOyB0aGVuCiAgIGZvciBhY19mdW5jIGluIF9nZXRiNjcgR0VUQjY3IGdldGI2NzsgZG8KLSAgICBhc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgorICAgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIENSQVlfU1RBQ0tTRUdfRU5EICRhY19mdW5jCkBAIC0zODQ1NSwyMCArMjUyODYsMTcgQEAKICAgZG9uZQogZmkKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9jX3N0YWNrX2RpcmVjdGlvbitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBzdGFjayBkaXJlY3Rpb24gZm9yIEMgYWxsb2NhIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHN0YWNrIGRpcmVjdGlvbiBmb3IgQyBhbGxvY2EuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfY19zdGFja19kaXJlY3Rpb24rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbgorICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6CiAgIGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPTAKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CiBpbnQKIGZpbmRfc3RhY2tfZGlyZWN0aW9uICgpCiB7CkBAIC0zODQ4Niw2MCArMjUzMTQsNDIgQEAKIGludAogbWFpbiAoKQogewotICBleGl0IChmaW5kX3N0YWNrX2RpcmVjdGlvbiAoKSA8IDApOworICByZXR1cm4gZmluZF9zdGFja19kaXJlY3Rpb24gKCkgPCAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJiB7IGFjX3RyeT0nLi9jb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KK2lmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgogICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0xCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9jX3N0YWNrX2RpcmVjdGlvbj0tMQorZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKK2ZpCiAKLSggZXhpdCAkYWNfc3RhdHVzICkKLWFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uPS0xCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Nfc3RhY2tfZGlyZWN0aW9uIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2Ci0KK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24iID4mNQorJGFzX2VjaG8gIiRhY19jdl9jX3N0YWNrX2RpcmVjdGlvbiIgPiY2OyB9CiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIFNUQUNLX0RJUkVDVElPTiAkYWNfY3ZfY19zdGFja19kaXJlY3Rpb24KIF9BQ0VPRgogCiAKIGZpCi0KKyAgICAgICAgICAjICBhbGxvY2EoKQogaWYgdGVzdCAkYWNfY3ZfY19jb21waWxlcl9nbnUgPSB5ZXM7IHRoZW4KLSAgICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9wcm9nX2djY190cmFkaXRpb25hbCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciAkQ0MgbmVlZHMgLXRyYWRpdGlvbmFsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgJENDIG5lZWRzIC10cmFkaXRpb25hbC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wcm9nX2djY190cmFkaXRpb25hbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAgICAgYWNfcGF0dGVybj0iQXV0b2NvbmYuKid4JyIKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KICNpbmNsdWRlIDxzZ3R0eS5oPgogQXV0b2NvbmYgVElPQ0dFVFAKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9eWVzCiBlbHNlCiAgIGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsPW5vCkBAIC0zODU0OCw0MyArMjUzNTgsNDMgQEAKIAogCiAgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0gbm87IHRoZW4KLSAgICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8dGVybWlvLmg+CiBBdXRvY29uZiBUQ0dFVEEKIF9BQ0VPRgogaWYgKGV2YWwgIiRhY19jcHAgY29uZnRlc3QuJGFjX2V4dCIpIDI+JjUgfAotICAkRUdSRVAgIiRhY19wYXR0ZXJuIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgJEVHUkVQICIkYWNfcGF0dGVybiIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWw9eWVzCiBmaQogcm0gLWYgY29uZnRlc3QqCiAKICAgZmkKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfcHJvZ19nY2NfdHJhZGl0aW9uYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl9wcm9nX2djY190cmFkaXRpb25hbCIgPiY2OyB9CiAgIGlmIHRlc3QgJGFjX2N2X3Byb2dfZ2NjX3RyYWRpdGlvbmFsID0geWVzOyB0aGVuCiAgICAgQ0M9IiRDQyAtdHJhZGl0aW9uYWwiCiAgIGZpCiBmaQogCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHdvcmtpbmcgbWVtY21wLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9mdW5jX21lbWNtcF93b3JraW5nK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKK2lmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzIC1hICIke2FjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcrc2V0fSIgIT0gc2V0Cit0aGVuCisgICMgQ3Jvc3MtY29tcGlsaW5nIGFuZCBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nIGhhcyBub3QgYmVlbiBzZXQgLSBhc3N1bWUKKyAgIyB0aGF0IG1lbWNtcCgpIGlzIGF2YWlsYWJsZS4KKyAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXMKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgIyBOYXRpdmUgY29tcGlsYXRpb24gLSB0ZXN0IGZvciB0aGUgYXZhaWxhYmlsaXR5IG9mIG1lbWNtcCgpLgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciB3b3JraW5nIG1lbWNtcCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3Igd29ya2luZyBtZW1jbXAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgIiRjcm9zc19jb21waWxpbmciID0geWVzOyB0aGVuIDoKICAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz1ubwogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogJGFjX2luY2x1ZGVzX2RlZmF1bHQKIGludApAQCAtMzg1OTIsOSArMjU0MDIsOSBAQAogewogCiAgIC8qIFNvbWUgdmVyc2lvbnMgb2YgbWVtY21wIGFyZSBub3QgOC1iaXQgY2xlYW4uICAqLwotICBjaGFyIGMwID0gMHg0MCwgYzEgPSAweDgwLCBjMiA9IDB4ODE7CisgIGNoYXIgYzAgPSAnXDEwMCcsIGMxID0gJ1wyMDAnLCBjMiA9ICdcMjAxJzsKICAgaWYgKG1lbWNtcCgmYzAsICZjMiwgMSkgPj0gMCB8fCBtZW1jbXAoJmMxLCAmYzIsIDEpID49IDApCi0gICAgZXhpdCAoMSk7CisgICAgcmV0dXJuIDE7CiAKICAgLyogVGhlIE5leHQgeDg2IE9wZW5TdGVwIGJ1ZyBzaG93cyB1cCBvbmx5IHdoZW4gY29tcGFyaW5nIDE2IGJ5dGVzCiAgICAgIG9yIG1vcmUgYW5kIHdpdGggYXQgbGVhc3Qgb25lIGJ1ZmZlciBub3Qgc3RhcnRpbmcgb24gYSA0LWJ5dGUgYm91bmRhcnkuCkBAIC0zODYxMCw0MjIgKzI1NDIwLDM3NCBAQAogCXN0cmNweSAoYSwgIi0tLS0tLS0tMDExMTExMTEiKTsKIAlzdHJjcHkgKGIsICItLS0tLS0tLTEwMDAwMDAwIik7CiAJaWYgKG1lbWNtcCAoYSwgYiwgMTYpID49IDApCi0JICBleGl0ICgxKTsKKwkgIHJldHVybiAxOwogICAgICAgfQotICAgIGV4aXQgKDApOworICAgIHJldHVybiAwOwogICB9CiAKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYgeyBhY190cnk9Jy4vY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCitpZiBhY19mbl9jX3RyeV9ydW4gIiRMSU5FTk8iOyB0aGVuIDoKICAgYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZz15ZXMKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBwcm9ncmFtIGV4aXRlZCB3aXRoIHN0YXR1cyAkYWNfc3RhdHVzIiA+JjUKLWVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CisgIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmc9bm8KK2ZpCitybSAtZiBjb3JlICouY29yZSBjb3JlLmNvbmZ0ZXN0LiogZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBcCisgIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuYmVhbSBjb25mdGVzdC4kYWNfZXh0CitmaQogCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1hY19jdl9mdW5jX21lbWNtcF93b3JraW5nPW5vCiBmaQotcm0gLWYgY29yZSAqLmNvcmUgZ21vbi5vdXQgYmIub3V0IGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmciID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmciID4mNgotdGVzdCAkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyA9IG5vICYmIGNhc2UgJExJQk9CSlMgaW4KLSAgICAibWVtY21wLiRhY19vYmpleHQiICAgfCBcCi0gICoiIG1lbWNtcC4kYWNfb2JqZXh0IiAgIHwgXAotICAgICJtZW1jbXAuJGFjX29iamV4dCAiKiB8IFwKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmciID4mNjsgfQordGVzdCAkYWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZyA9IG5vICYmIGNhc2UgIiAkTElCT0JKUyAiIGluCiAgICoiIG1lbWNtcC4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgbWVtY21wLiRhY19vYmpleHQiIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIG1lbWNtcC4kYWNfb2JqZXh0IgorIDs7CiBlc2FjCiAKIAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfdHlwZV9zaWduYWwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHJldHVybiB0eXBlIG9mIHNpZ25hbCBoYW5kbGVycy4uLiAiID4mNjsgfQoraWYgJHthY19jdl90eXBlX3NpZ25hbCs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaWZkZWYgc2lnbmFsCi0jIHVuZGVmIHNpZ25hbAotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIgdm9pZCAoKnNpZ25hbCAoaW50LCB2b2lkICgqKShpbnQpKSkoaW50KTsKLSNlbHNlCi12b2lkICgqc2lnbmFsICgpKSAoKTsKLSNlbmRpZgogCiBpbnQKIG1haW4gKCkKIHsKLWludCBpOworcmV0dXJuICooc2lnbmFsICgwLCAwKSkgKDApID09IDE7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfdHlwZV9zaWduYWw9dm9pZAoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl90eXBlX3NpZ25hbD1pbnQKIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfdHlwZV9zaWduYWw9aW50CisgIGFjX2N2X3R5cGVfc2lnbmFsPXZvaWQKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3R5cGVfc2lnbmFsIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfdHlwZV9zaWduYWwiID4mNQorJGFzX2VjaG8gIiRhY19jdl90eXBlX3NpZ25hbCIgPiY2OyB9CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKICNkZWZpbmUgUkVUU0lHVFlQRSAkYWNfY3ZfdHlwZV9zaWduYWwKIF9BQ0VPRgogCiAKLSMgZ2V0bW50ZW50IGlzIGluIC1sc3VuIG9uIElyaXggNCwgLWxzZXEgb24gRHluaXgvUFRYLCAtbGdlbiBvbiBVbml4d2FyZS4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgZ2V0bW50ZW50IGluIC1sc3VuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGdldG1udGVudCBpbiAtbHN1bi4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbGliX3N1bl9nZXRtbnRlbnQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgYWNfY2hlY2tfbGliX3NhdmVfTElCUz0kTElCUwotTElCUz0iLWxzdW4gICRMSUJTIgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgZ2V0bW50ZW50ICgpOwotaW50Ci1tYWluICgpCi17Ci1nZXRtbnRlbnQgKCk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbGliX3N1bl9nZXRtbnRlbnQ9eWVzCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWFjX2N2X2xpYl9zdW5fZ2V0bW50ZW50PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2NoZWNrX2xpYl9zYXZlX0xJQlMKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbGliX3N1bl9nZXRtbnRlbnQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X2xpYl9zdW5fZ2V0bW50ZW50IiA+JjYKLWlmIHRlc3QgJGFjX2N2X2xpYl9zdW5fZ2V0bW50ZW50ID0geWVzOyB0aGVuCi0gIExJQlM9Ii1sc3VuICRMSUJTIgotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGdldG1udGVudCBpbiAtbHNlcSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBnZXRtbnRlbnQgaW4gLWxzZXEuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2xpYl9zZXFfZ2V0bW50ZW50K3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGFjX2NoZWNrX2xpYl9zYXZlX0xJQlM9JExJQlMKLUxJQlM9Ii1sc2VxICAkTElCUyIKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyIGdldG1udGVudCAoKTsKLWludAotbWFpbiAoKQotewotZ2V0bW50ZW50ICgpOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGFjX2N2X2xpYl9zZXFfZ2V0bW50ZW50PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9saWJfc2VxX2dldG1udGVudD1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1MSUJTPSRhY19jaGVja19saWJfc2F2ZV9MSUJTCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2xpYl9zZXFfZ2V0bW50ZW50IiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9saWJfc2VxX2dldG1udGVudCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9saWJfc2VxX2dldG1udGVudCA9IHllczsgdGhlbgotICBMSUJTPSItbHNlcSAkTElCUyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBnZXRtbnRlbnQgaW4gLWxnZW4iID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgZ2V0bW50ZW50IGluIC1sZ2VuLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9saWJfZ2VuX2dldG1udGVudCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBhY19jaGVja19saWJfc2F2ZV9MSUJTPSRMSUJTCi1MSUJTPSItbGdlbiAgJExJQlMiCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciBnZXRtbnRlbnQgKCk7Ci1pbnQKLW1haW4gKCkKLXsKLWdldG1udGVudCAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9saWJfZ2VuX2dldG1udGVudD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbGliX2dlbl9nZXRtbnRlbnQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotTElCUz0kYWNfY2hlY2tfbGliX3NhdmVfTElCUwotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9saWJfZ2VuX2dldG1udGVudCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbGliX2dlbl9nZXRtbnRlbnQiID4mNgotaWYgdGVzdCAkYWNfY3ZfbGliX2dlbl9nZXRtbnRlbnQgPSB5ZXM7IHRoZW4KLSAgTElCUz0iLWxnZW4gJExJQlMiCi1maQotCi1maQotCi1maQotCi0KLWZvciBhY19mdW5jIGluIGdldG1udGVudAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisjIworIyAgIFN0YW5kLWFsb25lIGZ1bmN0aW9uIGNoZWNrczoKKyMjCisjICBDb3JlOgorZm9yIGFjX2Z1bmMgaW4gbHJhbmQ0OCAgICAgICAgIHJhbmQgICAgICAgICAgcmFuZG9tICAgICAgICAgICAgICAgICAgICBzaWduYWwgICAgICAgICAgc2lnc2V0CitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyMgIExpYnJhcnk6Citmb3IgYWNfZnVuYyBpbiBjbG9zZWRpciAgICAgICAgZmdldGNfdW5sb2NrZWQgIGZsb2NrZmlsZSAgICAgICAgICAgICAgICAgICAgICAgIGZvcmsgICAgICAgICAgICBmdW5sb2NrZmlsZSAgICAgZ2V0aXBub2RlYnluYW1lICAgICAgICAgICAgICAgICAgZ2V0dGltZW9mZGF5ICAgIGlmX25hbWV0b2luZGV4ICBta3N0ZW1wICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVuZGlyICAgICAgICAgcmVhZGRpciAgICAgICAgIHJlZ2NvbXAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldGVudiAgICAgICAgICBzZXRpdGltZXIgICAgICAgc2V0bG9jYWxlICAgICAgICAgICAgICAgICAgICAgICAgc2V0c2lkICAgICAgICAgIHNucHJpbnRmICAgICAgICBzdHJjYXNlc3RyICAgICAgICAgICAgICAgICAgICAgICBzdHJkdXAgICAgICAgICAgc3RyZXJyb3IgICAgICAgIHN0cm5jYXNlY21wICAgICAgICAgICAgICAgICAgICAgIHN5c2NvbmYgICAgICAgICB0aW1lcyAgICAgICAgICAgdnNucHJpbnRmCitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCitfQUNFT0YKKworZmkKK2RvbmUKKworCisjIElQdjQvSVB2NiBmdW5jdGlvbiBjaGVja3MuIEFDX0NIRUNLX0ZVTkMoKSBjYW4ndCBmaW5kIHRoZXNlIG9uIE1pbkdXCisjIHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBoYXZlIHRoZSBfX2NkZWNsIGNhbGxpbmcgY29udmVudGlvbiBvbiBNaW5HVy4KK2Nhc2UgeCR0YXJnZXRfb3MgaW4KKyAgeG1pbmd3KikKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d3MydGNwaXAuaD4KK2ludAorbWFpbiAoKQoreworIGdhaV9zdHJlcnJvcigwKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfZnVuY19nYWlfc3RyZXJyb3I9eWVzCisgICAgICAkYXNfZWNobyAgIiNkZWZpbmUgSEFWRV9HQUlfU1RSRVJST1IgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorCisgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHdzMnRjcGlwLmg+CitpbnQKK21haW4gKCkKK3sKKyBnZXRhZGRyaW5mbyhOVUxMLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfZnVuY19nZXRhZGRyaW5mbz15ZXMKKyAgICAgICRhc19lY2hvICAiI2RlZmluZSBIQVZFX0dFVEFERFJJTkZPIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgoraW50CittYWluICgpCit7CisgZ2V0aG9zdGJ5bmFtZShOVUxMKTsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICAgYWNfY3ZfZnVuY19nZXRob3N0YnluYW1lPXllcworICAgICAgJGFzX2VjaG8gICIjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisjaW5jbHVkZSA8d2luc29jazIuaD4KK2ludAorbWFpbiAoKQoreworIGdldGhvc3RieWFkZHIoTlVMTCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIGFjX2N2X2Z1bmNfZ2V0aG9zdGFkZHI9eWVzCisgICAgICAkYXNfZWNobyAgIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllBRERSIDEiID4+Y29uZmRlZnMuaAorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgoraW50CittYWluICgpCit7CisgZ2V0aG9zdG5hbWUoTlVMTCwgMCk7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgIGFjX2N2X2Z1bmNfZ2V0aG9zdG5hbWU9eWVzCisgICAgICAkYXNfZWNobyAgIiNkZWZpbmUgSEFWRV9HRVRIT1NUTkFNRSAxIiA+PmNvbmZkZWZzLmgKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgOzsKKworICAqKQorICAgIGZvciBhY19mdW5jIGluIGdhaV9zdHJlcnJvciBnZXRhZGRyaW5mbyBnZXRob3N0YnluYW1lIGdldGhvc3RieW5hbWUyIGdldGhvc3RuYW1lIGdldGhvc3RieWFkZHIKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisgICAgOzsKK2VzYWMKKworCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgImdldG9wdCIgImFjX2N2X2Z1bmNfZ2V0b3B0IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX2dldG9wdCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9HRVRPUFQgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgZ2V0b3B0LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRvcHQuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJpbmV0X250b3AiICJhY19jdl9mdW5jX2luZXRfbnRvcCIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19pbmV0X250b3AiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfSU5FVF9OVE9QIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIGluZXRfbnRvcC4kYWNfb2JqZXh0ICIqICkgOzsKKyAgKikgTElCT0JKUz0iJExJQk9CSlMgaW5ldF9udG9wLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiaW5ldF9wdG9uIiAiYWNfY3ZfZnVuY19pbmV0X3B0b24iCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfaW5ldF9wdG9uIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0lORVRfUFRPTiAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBpbmV0X3B0b24uJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIGluZXRfcHRvbi4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cmxjYXQiICJhY19jdl9mdW5jX3N0cmxjYXQiCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RybGNhdCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJMQ0FUIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cmxjYXQuJGFjX29iamV4dCAiKiApIDs7CisgICopIExJQk9CSlM9IiRMSUJPQkpTIHN0cmxjYXQuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJsY3B5IiAiYWNfY3ZfZnVuY19zdHJsY3B5IgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cmxjcHkiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSTENQWSAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJsY3B5LiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJsY3B5LiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RydG9rX3IiICJhY19jdl9mdW5jX3N0cnRva19yIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cnRva19yIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlRPS19SIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cnRva19yLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJ0b2tfci4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKK2FjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cnRvbCIgImFjX2N2X2Z1bmNfc3RydG9sIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cnRvbCIgPSB4eWVzOyB0aGVuIDoKKyAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJUT0wgMSIgPj5jb25mZGVmcy5oCisKK2Vsc2UKKyAgY2FzZSAiICRMSUJPQkpTICIgaW4KKyAgKiIgc3RydG9sLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJ0b2wuJGFjX29iamV4dCIKKyA7OworZXNhYworCitmaQorCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJzdHJ0b3VsIiAiYWNfY3ZfZnVuY19zdHJ0b3VsIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cnRvdWwiID0geHllczsgdGhlbiA6CisgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfU1RSVE9VTCAxIiA+PmNvbmZkZWZzLmgKKworZWxzZQorICBjYXNlICIgJExJQk9CSlMgIiBpbgorICAqIiBzdHJ0b3VsLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJ0b3VsLiRhY19vYmpleHQiCisgOzsKK2VzYWMKKworZmkKKworYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RydG91bGwiICJhY19jdl9mdW5jX3N0cnRvdWxsIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3N0cnRvdWxsIiA9IHh5ZXM7IHRoZW4gOgorICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUlRPVUxMIDEiID4+Y29uZmRlZnMuaAorCitlbHNlCisgIGNhc2UgIiAkTElCT0JKUyAiIGluCisgICoiIHN0cnRvdWxsLiRhY19vYmpleHQgIiogKSA7OworICAqKSBMSUJPQkpTPSIkTElCT0JKUyBzdHJ0b3VsbC4kYWNfb2JqZXh0IgorIDs7Citlc2FjCisKK2ZpCisKKworCisjICBBZ2VudDoKK2ZvciBhY19mdW5jIGluIGNnZXRuZXh0ICAgICAgICBjaG93biAgICAgICAgICBleGVjdiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdhaV9zdHJlcnJvciAgICAgICAgICAgICAgICAgICBnZXRncm5hbSAgICAgICAgICAgICAgICAgICAgICAgIGdldGhvc3RuYW1lICAgICBnZXRsb2FkYXZnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldHBpZCAgICAgICAgICBnZXRwd25hbSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc21udG9wdCAgICAgICBpbml0Z3JvdXBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmX25hbWVpbmRleCAgICBpZl9pbmRleHRvbmFtZSBpZl9uYW1ldG9pbmRleCAgICAgICAgICAgICAgICAgIGxvY2FsdGltZV9yICAgICBta3N0ZW1wICAgICAgICBta3RpbWUgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGwgICAgICAgICAgICByZWdjb21wICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldGdpZCAgICAgICAgICBzZXRncm91cHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldG1udGVudCAgICAgICBzZXR1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ2FjdGlvbiAgICAgICBzaWdibG9jayAgICAgIHNpZ2hvbGQgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ3Byb2NtYXNrICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRmcyAgICAgICAgICBzdGF0dmZzICAgICAgIHN0aW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cm5jYXNlY21wICAgICBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuYW1lICAgICAgICAgICB1c2xlZXAKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyMgIEFwcHM6Citmb3IgYWNfZnVuYyBpbiBnZXRkdGFibGVzaXplICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRncm5hbSAgICAgICAgZ2V0cGlkICAgICAgICBnZXRwd25hbSAgICAgICAgICAgICAgICAgICAgICAgICBzZXRnaWQgICAgICAgICAgc2V0Z3JvdXBzICAgICBzZXR1aWQgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y2dldGF0dHIKK2RvIDoKKyAgYXNfYWNfdmFyPWAkYXNfZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCithY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICIkYWNfZnVuYyIgIiRhc19hY192YXIiCitpZiBldmFsIHRlc3QgXCJ4XCQiJGFzX2FjX3ZhciJcIiA9IHgieWVzIjsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgYCRhc19lY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKK19BQ0VPRgorCitmaQorZG9uZQorCisKKyMgIE5vdC1Vc2VkOgorZm9yIGFjX2Z1bmMgaW4gaWZfZnJlZW5hbWVpbmRleCAgICAgICAgICAgICAgZ2V0cGFnZXNpemUgICAgICAgICAgICAgICAgICAgICAgbHNlZWs2NCAgICAgICAgIHByZWFkNjQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0ICAgICAgICAgIHNpZ2Fscm0gICAgICAgc29ja2V0CitkbyA6CisgIGFzX2FjX3Zhcj1gJGFzX2VjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAorYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiJGFjX2Z1bmMiICIkYXNfYWNfdmFyIgoraWYgZXZhbCB0ZXN0IFwieFwkIiRhc19hY192YXIiXCIgPSB4InllcyI7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIGAkYXNfZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCiBfQUNFT0YKIAogZmkKQEAgLTM5MDMzLDI3NzAgKzI1Nzk1LDQxIEBACiAKIAogCisjIworIyAgIE1vcmUgY29tcGxleCBmdW5jdGlvbiBjaGVja3M6CisjICAgICAgICAgICAoQWdlbnQpCisjIwogCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc2V0bW50ZW50IGhhc21udG9wdCBnZXRob3N0bmFtZSB1bmFtZSBnZXR0aW1lb2ZkYXkgc2VsZWN0IHNvY2tldAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCisjICAgICAgIHJwbUdldFBhdGggY2hlY2sgbmVlZHMgY2xlYW4gTElCUyBlbnZpcm9ubWVudCAgIChMaW51eCkKKyMKK2lmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iOyB0aGVuCisgICAgT0xETElCUz0kTElCUworICAgIExJQlM9JExNSUJMSUJTCisgICAgZm9yIGFjX2Z1bmMgaW4gcnBtR2V0UGF0aAorZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJycG1HZXRQYXRoIiAiYWNfY3ZfZnVuY19ycG1HZXRQYXRoIgoraWYgdGVzdCAieCRhY19jdl9mdW5jX3JwbUdldFBhdGgiID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQorI2RlZmluZSBIQVZFX1JQTUdFVFBBVEggMQogX0FDRU9GCiAKIGZpCiBkb25lCiAKKyAgICBMSUJTPSRPTERMSUJTCitmaQogCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBzdHJsY2F0IHN0cmxjcHkgc3RydG9sIHN0cnRvdWwKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgICAgICAgc3RhdGZzKCBjaGFyICosIHN0cnVjdCBmc19kYXRhKiApICAgICAgICAgICAgICAgKFVsdHJpeCkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0cml4KSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRoIHN0cnVjdCBmc19kYXRhIChVbHRyaXgpLi4uICIgPiY2OyB9CitpZiAke2Z1X2N2X3N5c19zdGF0X2ZzX2RhdGErOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgogZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi0KLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIHN0cmNociBzdHJ0b2tfciBzdHJkdXAgbWVtY3B5IG1lbW1vdmUgaW5kZXggYmNvcHkgc3RyY2FzZXN0ciByZWdjb21wCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gc2lnbmFsIHNldHNpZCBzaWdzZXQgc2lnYmxvY2sgc2lnaG9sZCBzdHJlcnJvciBzZXRlbnYgdnNucHJpbnRmIHNucHJpbnRmCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBzaWdhY3Rpb24KLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotCi1mb3IgYWNfZnVuYyBpbiByYW5kb20gbHJhbmQ0OCByYW5kCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gZXhlY3Ygc3lzdGVtIGZvcmsgZ2V0cGlkIHN0cm5jYXNlY21wIHNpZ2Fscm0KLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gbHNlZWs2NCBwcmVhZDY0Ci1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyIgJiYgXAotICAgICAgICBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgaG9zdC9ocl9zd2luc3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotICBPTERMSUJTPSRMSUJTCi0gIExJQlM9JExNSUJMSUJTCi0KLWZvciBhY19mdW5jIGluIHJwbUdldFBhdGgKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0gIExJQlM9JE9MRExJQlMKLWZpCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0bG9hZGF2ZwotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi0KLWZvciBhY19mdW5jIGluIGdldGFkZHJpbmZvIGdldGlwbm9kZWJ5bmFtZSBnYWlfc3RyZXJyb3IKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIEJTRGkyIGZ1bmN0aW9ucyBkaWZmZXIKLQotCi1mb3IgYWNfZnVuYyBpbiBzdGF0dmZzIHN0YXRmcwotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gZ2V0ZHRhYmxlc2l6ZQotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgZnJlZWJzZDIgY2hlY2tzCi0KLWZvciBhY19mdW5jIGluIGdldGZzc3RhdAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4gdXNsZWVwCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBzZXRsb2NhbGUKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWZvciBhY19mdW5jIGluIHRjZ2V0YXR0cgotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotCi1mb3IgYWNfZnVuYyBpbiBpZl9uYW1laW5kZXggaWZfZnJlZW5hbWVpbmRleAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLQotZm9yIGFjX2Z1bmMgaW4ga2luZm9fZ2V0X2NwdXMKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIHNvbGFyaXMgY2hlY2tzCi0KLWZvciBhY19mdW5jIGluIGdldHBhZ2VzaXplCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi1mb3IgYWNfZnVuYyBpbiBta3N0ZW1wCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotCi0KLQotCi0KLWZvciBhY19mdW5jIGluIGdldHB3bmFtIGdldGdybmFtIHNldGdpZCBzZXR1aWQgc2V0Z3JvdXBzCi1kbwotYXNfYWNfdmFyPWBlY2hvICJhY19jdl9mdW5jXyRhY19mdW5jIiB8ICRhc190cl9zaGAKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgJGFjX2Z1bmMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgJGFjX2Z1bmMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFzX2FjX3ZhcitzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotLyogRGVmaW5lICRhY19mdW5jIHRvIGFuIGlubm9jdW91cyB2YXJpYW50LCBpbiBjYXNlIDxsaW1pdHMuaD4gZGVjbGFyZXMgJGFjX2Z1bmMuCi0gICBGb3IgZXhhbXBsZSwgSFAtVVggMTFpIDxsaW1pdHMuaD4gZGVjbGFyZXMgZ2V0dGltZW9mZGF5LiAgKi8KLSNkZWZpbmUgJGFjX2Z1bmMgaW5ub2N1b3VzXyRhY19mdW5jCi0KLS8qIFN5c3RlbSBoZWFkZXIgdG8gZGVmaW5lIF9fc3R1YiBtYWNyb3MgYW5kIGhvcGVmdWxseSBmZXcgcHJvdG90eXBlcywKLSAgICB3aGljaCBjYW4gY29uZmxpY3Qgd2l0aCBjaGFyICRhY19mdW5jICgpOyBiZWxvdy4KLSAgICBQcmVmZXIgPGxpbWl0cy5oPiB0byA8YXNzZXJ0Lmg+IGlmIF9fU1REQ19fIGlzIGRlZmluZWQsIHNpbmNlCi0gICAgPGxpbWl0cy5oPiBleGlzdHMgZXZlbiBvbiBmcmVlc3RhbmRpbmcgY29tcGlsZXJzLiAgKi8KLQotI2lmZGVmIF9fU1REQ19fCi0jIGluY2x1ZGUgPGxpbWl0cy5oPgotI2Vsc2UKLSMgaW5jbHVkZSA8YXNzZXJ0Lmg+Ci0jZW5kaWYKLQotI3VuZGVmICRhY19mdW5jCi0KLS8qIE92ZXJyaWRlIGFueSBnY2MyIGludGVybmFsIHByb3RvdHlwZSB0byBhdm9pZCBhbiBlcnJvci4gICovCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAiQyIKLXsKLSNlbmRpZgotLyogV2UgdXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgZ2NjMgotICAgYnVpbHRpbiBhbmQgdGhlbiBpdHMgYXJndW1lbnQgcHJvdG90eXBlIHdvdWxkIHN0aWxsIGFwcGx5LiAgKi8KLWNoYXIgJGFjX2Z1bmMgKCk7Ci0vKiBUaGUgR05VIEMgbGlicmFyeSBkZWZpbmVzIHRoaXMgZm9yIGZ1bmN0aW9ucyB3aGljaCBpdCBpbXBsZW1lbnRzCi0gICAgdG8gYWx3YXlzIGZhaWwgd2l0aCBFTk9TWVMuICBTb21lIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgbmFtZWQKLSAgICBzb21ldGhpbmcgc3RhcnRpbmcgd2l0aCBfXyBhbmQgdGhlIG5vcm1hbCBuYW1lIGlzIGFuIGFsaWFzLiAgKi8KLSNpZiBkZWZpbmVkIChfX3N0dWJfJGFjX2Z1bmMpIHx8IGRlZmluZWQgKF9fc3R1Yl9fXyRhY19mdW5jKQotY2hva2UgbWUKLSNlbHNlCi1jaGFyICgqZikgKCkgPSAkYWNfZnVuYzsKLSNlbmRpZgotI2lmZGVmIF9fY3BsdXNwbHVzCi19Ci0jZW5kaWYKLQotaW50Ci1tYWluICgpCi17Ci1yZXR1cm4gZiAhPSAkYWNfZnVuYzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdCRhY19leGVleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2xpbmtcIiIpID4mNQotICAoZXZhbCAkYWNfbGluaykgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIkYXNfYWNfdmFyPXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJGFzX2FjX3Zhcj1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjUKLWVjaG8gIiR7RUNIT19UfWBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgIiA+JjYKLWlmIHRlc3QgYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AgPSB5ZXM7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBgZWNobyAiSEFWRV8kYWNfZnVuYyIgfCAkYXNfdHJfY3BwYCAxCi1fQUNFT0YKLQotZmkKLWRvbmUKLQotIyBIaWdoIHJlc29sdXRpb24gYWxhcm0gc3VwcG9ydAotCi1mb3IgYWNfZnVuYyBpbiBzZXRpdGltZXIKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHRoZSBjbG9jay4KLQotCi0KLQotZm9yIGFjX2Z1bmMgaW4gbWt0aW1lIHN0aW1lIHRpbWVzIHN5c2NvbmYKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0jIG1pc3NpbmcgZnJvbSBocC11eAotCi1mb3IgYWNfZnVuYyBpbiBpZl9uYW1ldG9pbmRleAotZG8KLWFzX2FjX3Zhcj1gZWNobyAiYWNfY3ZfZnVuY18kYWNfZnVuYyIgfCAkYXNfdHJfc2hgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yICRhY19mdW5jIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yICRhY19mdW5jLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhc19hY192YXIrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLS8qIERlZmluZSAkYWNfZnVuYyB0byBhbiBpbm5vY3VvdXMgdmFyaWFudCwgaW4gY2FzZSA8bGltaXRzLmg+IGRlY2xhcmVzICRhY19mdW5jLgotICAgRm9yIGV4YW1wbGUsIEhQLVVYIDExaSA8bGltaXRzLmg+IGRlY2xhcmVzIGdldHRpbWVvZmRheS4gICovCi0jZGVmaW5lICRhY19mdW5jIGlubm9jdW91c18kYWNfZnVuYwotCi0vKiBTeXN0ZW0gaGVhZGVyIHRvIGRlZmluZSBfX3N0dWIgbWFjcm9zIGFuZCBob3BlZnVsbHkgZmV3IHByb3RvdHlwZXMsCi0gICAgd2hpY2ggY2FuIGNvbmZsaWN0IHdpdGggY2hhciAkYWNfZnVuYyAoKTsgYmVsb3cuCi0gICAgUHJlZmVyIDxsaW1pdHMuaD4gdG8gPGFzc2VydC5oPiBpZiBfX1NURENfXyBpcyBkZWZpbmVkLCBzaW5jZQotICAgIDxsaW1pdHMuaD4gZXhpc3RzIGV2ZW4gb24gZnJlZXN0YW5kaW5nIGNvbXBpbGVycy4gICovCi0KLSNpZmRlZiBfX1NURENfXwotIyBpbmNsdWRlIDxsaW1pdHMuaD4KLSNlbHNlCi0jIGluY2x1ZGUgPGFzc2VydC5oPgotI2VuZGlmCi0KLSN1bmRlZiAkYWNfZnVuYwotCi0vKiBPdmVycmlkZSBhbnkgZ2NjMiBpbnRlcm5hbCBwcm90b3R5cGUgdG8gYXZvaWQgYW4gZXJyb3IuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi17Ci0jZW5kaWYKLS8qIFdlIHVzZSBjaGFyIGJlY2F1c2UgaW50IG1pZ2h0IG1hdGNoIHRoZSByZXR1cm4gdHlwZSBvZiBhIGdjYzIKLSAgIGJ1aWx0aW4gYW5kIHRoZW4gaXRzIGFyZ3VtZW50IHByb3RvdHlwZSB3b3VsZCBzdGlsbCBhcHBseS4gICovCi1jaGFyICRhY19mdW5jICgpOwotLyogVGhlIEdOVSBDIGxpYnJhcnkgZGVmaW5lcyB0aGlzIGZvciBmdW5jdGlvbnMgd2hpY2ggaXQgaW1wbGVtZW50cwotICAgIHRvIGFsd2F5cyBmYWlsIHdpdGggRU5PU1lTLiAgU29tZSBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IG5hbWVkCi0gICAgc29tZXRoaW5nIHN0YXJ0aW5nIHdpdGggX18gYW5kIHRoZSBub3JtYWwgbmFtZSBpcyBhbiBhbGlhcy4gICovCi0jaWYgZGVmaW5lZCAoX19zdHViXyRhY19mdW5jKSB8fCBkZWZpbmVkIChfX3N0dWJfX18kYWNfZnVuYykKLWNob2tlIG1lCi0jZWxzZQotY2hhciAoKmYpICgpID0gJGFjX2Z1bmM7Ci0jZW5kaWYKLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0KLWludAotbWFpbiAoKQotewotcmV0dXJuIGYgIT0gJGFjX2Z1bmM7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QkYWNfZXhlZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19saW5rXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2xpbmspIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdCRhY19leGVleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJGFzX2FjX3Zhcj15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiRhc19hY192YXI9bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY1Ci1lY2hvICIke0VDSE9fVH1gZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCIgPiY2Ci1pZiB0ZXN0IGBldmFsIGVjaG8gJyR7JyRhc19hY192YXInfSdgID0geWVzOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgYGVjaG8gIkhBVkVfJGFjX2Z1bmMiIHwgJGFzX3RyX2NwcGAgMQotX0FDRU9GCi0KLWZpCi1kb25lCi0KLSMgbWlzc2luZyBmcm9tIE1pbkdXCi0KLQotZm9yIGFjX2Z1bmMgaW4gY2hvd24gbG9jYWx0aW1lX3IKLWRvCi1hc19hY192YXI9YGVjaG8gImFjX2N2X2Z1bmNfJGFjX2Z1bmMiIHwgJGFzX3RyX3NoYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciAkYWNfZnVuYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciAkYWNfZnVuYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYXNfYWNfdmFyK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0vKiBEZWZpbmUgJGFjX2Z1bmMgdG8gYW4gaW5ub2N1b3VzIHZhcmlhbnQsIGluIGNhc2UgPGxpbWl0cy5oPiBkZWNsYXJlcyAkYWNfZnVuYy4KLSAgIEZvciBleGFtcGxlLCBIUC1VWCAxMWkgPGxpbWl0cy5oPiBkZWNsYXJlcyBnZXR0aW1lb2ZkYXkuICAqLwotI2RlZmluZSAkYWNfZnVuYyBpbm5vY3VvdXNfJGFjX2Z1bmMKLQotLyogU3lzdGVtIGhlYWRlciB0byBkZWZpbmUgX19zdHViIG1hY3JvcyBhbmQgaG9wZWZ1bGx5IGZldyBwcm90b3R5cGVzLAotICAgIHdoaWNoIGNhbiBjb25mbGljdCB3aXRoIGNoYXIgJGFjX2Z1bmMgKCk7IGJlbG93LgotICAgIFByZWZlciA8bGltaXRzLmg+IHRvIDxhc3NlcnQuaD4gaWYgX19TVERDX18gaXMgZGVmaW5lZCwgc2luY2UKLSAgICA8bGltaXRzLmg+IGV4aXN0cyBldmVuIG9uIGZyZWVzdGFuZGluZyBjb21waWxlcnMuICAqLwotCi0jaWZkZWYgX19TVERDX18KLSMgaW5jbHVkZSA8bGltaXRzLmg+Ci0jZWxzZQotIyBpbmNsdWRlIDxhc3NlcnQuaD4KLSNlbmRpZgotCi0jdW5kZWYgJGFjX2Z1bmMKLQotLyogT3ZlcnJpZGUgYW55IGdjYzIgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLiAgKi8KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICJDIgotewotI2VuZGlmCi0vKiBXZSB1c2UgY2hhciBiZWNhdXNlIGludCBtaWdodCBtYXRjaCB0aGUgcmV0dXJuIHR5cGUgb2YgYSBnY2MyCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotY2hhciAkYWNfZnVuYyAoKTsKLS8qIFRoZSBHTlUgQyBsaWJyYXJ5IGRlZmluZXMgdGhpcyBmb3IgZnVuY3Rpb25zIHdoaWNoIGl0IGltcGxlbWVudHMKLSAgICB0byBhbHdheXMgZmFpbCB3aXRoIEVOT1NZUy4gIFNvbWUgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBuYW1lZAotICAgIHNvbWV0aGluZyBzdGFydGluZyB3aXRoIF9fIGFuZCB0aGUgbm9ybWFsIG5hbWUgaXMgYW4gYWxpYXMuICAqLwotI2lmIGRlZmluZWQgKF9fc3R1Yl8kYWNfZnVuYykgfHwgZGVmaW5lZCAoX19zdHViX19fJGFjX2Z1bmMpCi1jaG9rZSBtZQotI2Vsc2UKLWNoYXIgKCpmKSAoKSA9ICRhY19mdW5jOwotI2VuZGlmCi0jaWZkZWYgX19jcGx1c3BsdXMKLX0KLSNlbmRpZgotCi1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBmICE9ICRhY19mdW5jOwotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiRhc19hY192YXI9eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIkYXNfYWNfdmFyPW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogYGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNQotZWNobyAiJHtFQ0hPX1R9YGV2YWwgZWNobyAnJHsnJGFzX2FjX3Zhcid9J2AiID4mNgotaWYgdGVzdCBgZXZhbCBlY2hvICckeyckYXNfYWNfdmFyJ30nYCA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIGBlY2hvICJIQVZFXyRhY19mdW5jIiB8ICRhc190cl9jcHBgIDEKLV9BQ0VPRgotCi1maQotZG9uZQotCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgU0lPQ0dJRkFERFIgaW4gc3lzL2lvY3RsLmgiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgU0lPQ0dJRkFERFIgaW4gc3lzL2lvY3RsLmguLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUitzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZW5kaWYKLSNpZmRlZiBTSU9DR0lGQUREUgoteHh4eWVzeHh4Ci0jZW5kaWYKLQotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieHh4eWVzeHh4IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPXllcwotZWxzZQotICBjdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiIgPiY1Ci1lY2hvICIke0VDSE9fVH0kY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSIiA+JjYKLWlmIHRlc3QgJGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIgMQotX0FDRU9GCi0KLWZpCi0KLSMgdWx0cml4Ci1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0cml4KSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB0d28tYXJndW1lbnQgc3RhdGZzIHdpdGggc3RydWN0IGZzX2RhdGEgKFVsdHJpeCkuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2Z1X2N2X3N5c19zdGF0X2ZzX2RhdGErc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBmdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICkBAIC00MTgxNywxMTQgKzI1ODUwLDkzIEBACiBleGl0IChzdGF0ZnMgKCIuIiwgJmZzZCkgIT0gMSk7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi0oIGV4aXQgJGFjX3N0YXR1cyApCi1mdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vCisgIGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm8KIGZpCi1ybSAtZiBjb3JlICouY29yZSBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKK3JtIC1mIGNvcmUgKi5jb3JlIGNvcmUuY29uZnRlc3QuKiBnbW9uLm91dCBiYi5vdXQgY29uZnRlc3QkYWNfZXhlZXh0IFwKKyAgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC5iZWFtIGNvbmZ0ZXN0LiRhY19leHQKIGZpCiAKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRmdV9jdl9zeXNfc3RhdF9mc19kYXRhIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRmdV9jdl9zeXNfc3RhdF9mc19kYXRhIiA+JjYKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSIgPiY1CiskYXNfZWNobyAiJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEiID4mNjsgfQogaWYgdGVzdCAkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSA9IHllczsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBTVEFUX1NUQVRGU19GU19EQVRBIDEKLV9BQ0VPRgorCiskYXNfZWNobyAiI2RlZmluZSBTVEFUX1NUQVRGU19GU19EQVRBIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCi0jIGNoZWNrIGlmIGNvbXBpbGVyIHByZS1wcm9jZXNzb3IgZGVmaW5lcyBfX0ZVTkNUSU9OX18KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBpZiBfX0ZVTkNUSU9OX18gaXMgZGVmaW5lZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIF9fRlVOQ1RJT05fXyBpcyBkZWZpbmVkLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2CisKKyMjCisjICAgT3RoZXIgZnVuY3Rpb24tcmVsYXRlZCBjaGVja3M6CisjICAgICAgICAgICAoZ2VuZXJhbCBidWlsZCkKKyMjCisKKyMgICAgICAgSG93IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbgorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBob3cgdG8gZ2V0IHRoZSBuYW1lIG9mIHRoZSBjdXJyZW50IGZ1bmN0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGhvdyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb24uLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9fZnVuY19fbmFtZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCiAKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgIG5ldHNubXBfY3ZfX2Z1bmNfX25hbWU9bm8KKyAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKIGludAogbWFpbiAoKQogewotCi0gICAgY2hhciAqY3AgPSBfX0ZVTkNUSU9OX187Ci0KK2NvbnN0IGNoYXIqIGNwID0gX19mdW5jX187CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRD1ubworaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X19mdW5jX19uYW1lPV9fZnVuY19fCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEIiA+JjYKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGlmIHRlc3QgIiRuZXRzbm1wX2N2X19mdW5jX19uYW1lIiA9IG5vIDsgdGhlbgorICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi1pZiB0ZXN0ICJ4JGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQiID0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQgMQoraW50CittYWluICgpCit7Citjb25zdCBjaGFyKiBjcCA9IF9fRlVOQ1RJT05fXzsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X19mdW5jX19uYW1lPV9fRlVOQ1RJT05fXworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgIGZpCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X19mdW5jX19uYW1lIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9fZnVuY19fbmFtZSIgPiY2OyB9CitpZiB0ZXN0ICIkbmV0c25tcF9jdl9fZnVuY19fbmFtZSIgIT0gbm87IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBORVRTTk1QX0ZVTkNUSU9OICRuZXRzbm1wX2N2X19mdW5jX19uYW1lCiBfQUNFT0YKIAogZmkKIAotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIG9uIFNDTyBVbml4d2FyZSA3LjEuNCAoU0NPIGNvbXBpbGVyKSwgInN0YXRpYyBpbmxpbmUiIGZ1bmN0aW9ucwotIyBhcmUgbm90IHN1cHBvcnRlZCwgc28gdGhpcyBkaXNhYmxlcyB0aGUgd2hvbGUgaW5saW5lIHRoaW5nIGlmIGl0Ci0jIGRvZXNuJ3Qgd29yayBwcm9wZXJseS4gU2hvdWxkIGhhdmUgbm8gZWZmZWN0IG9uIG90aGVyIHBsYXRmb3Jtcy4KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyB3aGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gKFVuaXh3YXJlKSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAoVW5peHdhcmUpLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHtuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgorCisjICAgICAgIFdoZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAgICAgIChTQ08gVW5peHdhcmUpCisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAoVW5peHdhcmUpIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAoVW5peHdhcmUpLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfY19icm9rZW5faW5saW5lKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogc3RhdGljIGlubGluZSBpbnQgbmVzdGVkX2lubGluZV9mdW5jdGlvbih2b2lkKSB7CiAgIHJldHVybiAwOwpAQCAtNDE5MzQsNDIgKzI1OTQ2LDE5IEBACiB9CiAKIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgogICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9bm8KIGVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcworICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJG5ldHNubXBfY3ZfY19icm9rZW5faW5saW5lIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZSIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3ZfY19icm9rZW5faW5saW5lIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9jX2Jyb2tlbl9pbmxpbmUiID4mNjsgfQogCi0jIEJ1dCwgc2FkbHksIHRoZSB1c2FnZSBvZiBpbmxpbmUgaW4gTkVUX1NOTVAgZGlzYWdyZWVzIHNlcmlvdXNseSB3aXRoIGF0IGxlYXN0Ci0jIHNvbGFyaXMyLCBzbyBkaXNhYmxlIGl0IGZvciBub3cuCisKKyMgICAgICAgWWVzIC0gIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gICAgICAgKFNvbGFyaXMgMi54KQorIwogY2FzZSAiJHRhcmdldF9vcyIgaW4KICAgICBzb2xhcmlzKikKICAgICAgICAgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcwpAQCAtNDE5ODAsNDYzOCArMjU5NjksMzY2IEBACiAKIGlmIHRlc3QgIiRuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmUiID0geWVzIDsgdGhlbgogCi1jYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0JST0tFTl9JTkxJTkUgMQotX0FDRU9GCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0JST0tFTl9JTkxJTkUgMSIgPj5jb25mZGVmcy5oCiAKIGZpCiAKLSMgb3BlbmJzZCBzZWVtcyB0byBoYXZlIGRyb3BwZWQgbV9jbHVzdGVycyBhbmQgbV9jbGZyZWUgZnJvbSBtYnN0YXQKIAorIyMKKyMgICBNaXMtcGxhY2VkIChub24tZnVuY3Rpb24pIGNoZWNrczoKKyMjCiAKLWFjX3NhZmVfc3RydWN0PWBlY2hvICJtYnN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIm1fY2x1c3RlcnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYnN0YXQubV9jbHVzdGVycyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYnN0YXQubV9jbHVzdGVycy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgU0lPQ0dJRkFERFIgaW4gc3lzL2lvY3RsLmgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNJT0NHSUZBRERSIGluIHN5cy9pb2N0bC5oLi4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLQotI2lmIEhBVkVfU1lTX01CVUZfSAotI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjaWZkZWYgSEFWRV9TWVNfSU9DVExfSAorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgogI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBtYnN0YXQgdGVzdGl0OwotdGVzdGl0Lm1fY2x1c3RlcnMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotIyBvcGVuYnNkIHNlZW1zIHRvIGhhdmUgZHJvcHBlZCBtX21idWZzIGZyb20gbWJzdGF0IHRvbwotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJtYnN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIm1fbWJ1ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBtYnN0YXQubV9tYnVmcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBtYnN0YXQubV9tYnVmcy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmIEhBVkVfU1lTX01CVUZfSAotI2luY2x1ZGUgPHN5cy9tYnVmLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IG1ic3RhdCB0ZXN0aXQ7Ci10ZXN0aXQubV9tYnVmcyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic2lnYWN0aW9uIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJzYV9zaWdhY3Rpb24iIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzaWdhY3Rpb24uc2Ffc2lnYWN0aW9uIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNpZ2FjdGlvbi5zYV9zaWdhY3Rpb24uLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+Ci0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzaWdhY3Rpb24gdGVzdGl0OwotdGVzdGl0LnNhX3NpZ2FjdGlvbiAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInRtIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ0bV9nbXRvZmYiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0bS50bV9nbXRvZmYiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdG0udG1fZ210b2ZmLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGluY2x1ZGUgPHRpbWUuaD4KLSNlbHNlCi0jIGlmIEhBVkVfU1lTX1RJTUVfSAotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8dGltZS5oPgotIyBlbmRpZgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCB0bSB0ZXN0aXQ7Ci10ZXN0aXQudG1fZ210b2ZmICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX210dSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX210dSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9tdHUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9tdHUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfaWZuZXRfaGFzX2lmX210dSIgPSAieG5vIjsgdGhlbgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGlmIF9LRVJORUwgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgaWYgX0tFUk5FTCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9pZm5ldF9oYXNfaWZfbXR1IiA9ICJ4eWVzIjsgdGhlbgotICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9bm8KLWVsc2UKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jZGVmaW5lIF9LRVJORUwgMQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjaWZuZGVmIFNJT0NHSUZBRERSCitObyBTSU9DR0lGQUREUiBmb3VuZCBoZXJlLgogI2VuZGlmCiAKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX210dSA9IDA7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9eWVzCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSPXllcwogZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9JRk5FVF9ORUVEU19LRVJORUw9bm8KKyAgbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFI9bm8KIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSIiA+JjUKKyRhc19lY2hvICIkbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIiID4mNjsgfQoraWYgdGVzdCAkbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIgPSB5ZXM7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSIDEiID4+Y29uZmRlZnMuaAorCiBmaQogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA+JjYKKyMjCisjICAgQ2hlY2sgaG93IHRvIHByaW50IGEgc2l6ZV90IHZhcmlhYmxlCisjIwogCi1pZiB0ZXN0ICJ4JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPSAieHllcyI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgSUZORVRfTkVFRFNfS0VSTkVMIDEKLV9BQ0VPRgotCi1maQotZmkKLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzb2NrYWRkciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAic2FfbGVuIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2FkZHIuc2FfbGVuIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2thZGRyLnNhX2xlbi4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB0aGUgdW5kZXJseWluZyB0eXBlIG9mIGEgc2l6ZV90IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUgb2YgYSBzaXplX3QuLi4gIiA+JjY7IH0KK2lmICR7bmV0c25tcF9jdl9zaXplX3RfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgaWYgWyB4JG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc29ja2FkZHIgdGVzdGl0OwotdGVzdGl0LnNhX2xlbiAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInNvY2thZGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJzYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrYWRkci5zYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2FkZHIuc2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzb2NrYWRkciB0ZXN0aXQ7Ci10ZXN0aXQuc2FfdW5pb24uc2FfZ2VuZXJpYy5zYV9mYW1pbHkyICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic29ja2FkZHJfc3RvcmFnZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAic3NfZmFtaWx5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHkuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSB0ZXN0aXQ7Ci10ZXN0aXQuc3NfZmFtaWx5ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic29ja2FkZHJfc3RvcmFnZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiX19zc19mYW1pbHkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzb2NrYWRkcl9zdG9yYWdlLl9fc3NfZmFtaWx5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHNvY2thZGRyX3N0b3JhZ2UuX19zc19mYW1pbHkuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieG5vIiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4bm8iID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9Im5vIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSB0ZXN0aXQ7Ci10ZXN0aXQuX19zc19mYW1pbHkgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJydGVudHJ5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJydF9kc3QiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBydGVudHJ5LnJ0X2RzdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBydGVudHJ5LnJ0X2RzdC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4bm8iID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgInhubyIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0ibm8iCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHJ0ZW50cnkgdGVzdGl0OwotdGVzdGl0LnJ0X2RzdCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0jIGNoZWNraW5nIGZvciA0LjMgdnMgNC40IHJ0ZW50cnkuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgdHlwZSBvZiBydGVudHJ5IHN0cnVjdHVyZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHR5cGUgb2YgcnRlbnRyeSBzdHJ1Y3R1cmUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X1JURU5UUllfVFlQRStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi0KLSMgNC40IGNvbXBhdAotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLWludAotbWFpbiAoKQotewotCi0KLSNpZm5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVAotI2RlZmluZSBydF9kc3QgcnRfbm9kZXMtPnJuX2tleQotI2VuZGlmCi0KLSAgc3RydWN0IHJ0ZW50cnkgcnQ7Ci0gIHJ0LnJ0X25vZGVzWzBdLnJuX2ZsYWdzID0gMTsKLSAgcnQucnRfZHN0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC40IgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi0jIDQuMyBjb21wYXQKLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgcnRlbnRyeSBydDsKLXJ0LnJ0X2hhc2g7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotCi0jIGVsc2UgYWNrLgotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IFVua25vd24iID4mNQotZWNobyAiJHtFQ0hPX1R9VW5rbm93biIgPiY2Ci0gIGFjX2N2X1JURU5UUllfVFlQRT0idW5rbm93biIKLWZpCi0KLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9SVEVOVFJZX1RZUEUiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X1JURU5UUllfVFlQRSIgPiY2Ci0KLWlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4QlNELTQuNCI7IHRoZW4KLSAgY2F0ID4+Y29uZmRlZnMuaCA8PFxfQUNFT0YKLSNkZWZpbmUgUlRFTlRSWV80XzQgMQotX0FDRU9GCi0KLWZpCi0KLSMgY2hlY2tpbmcgZm9yIGFscGhhJ3Mgb3J0ZW50cnkgdnMgcnRlbnRyeQotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInh1bmtub3duIjsgdGhlbgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdHJ1Y3QgcnRlbnRyeSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgcnRlbnRyeS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3Zfc3RydWN0X3J0ZW50cnkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jZGVmaW5lIEtFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi1fQUNFT0YKLWlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKLSAgJEVHUkVQICJvcnRlbnRyeSIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PW9ydGVudHJ5Ci1lbHNlCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PXJ0ZW50cnkKLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPSAieHJ0ZW50cnkiIDsgdGhlbgotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKLWVsc2UKLSAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9Im9ydGVudHJ5IgotZmkKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3Zfc3RydWN0X3J0ZW50cnkiID4mNgotZWxzZQotICBSVEVOVFJZX1RZUEU9InJ0ZW50cnkiCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgotZmkKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgIT0gIngiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgUlRFTlRSWSBzdHJ1Y3QgJHthY19jdl9zdHJ1Y3RfcnRlbnRyeX0KLV9BQ0VPRgotCi1lbHNlCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFJURU5UUlkgc3RydWN0IHJ0ZW50cnkKLV9BQ0VPRgotCi1maQotCi0jIGNoZWNrIGZvciA0LjMncyBydGVudHJ5LT5ydF9uZXh0Ci1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieEJTRC00LjMiOyB0aGVuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0cnVjdCBydGVudHJ5IGhhcyBhIHJ0X25leHQgbm9kZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdHJ1Y3QgcnRlbnRyeSBoYXMgYSBydF9uZXh0IG5vZGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgcnRlbnRyeSBydDsKLXJ0LnJ0X25leHQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0PXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1hY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0PW5vCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQiID4mNgotCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQiID0gInh5ZXMiOyB0aGVuCi0gIGNhdCA+PmNvbmZkZWZzLmggPDxcX0FDRU9GCi0jZGVmaW5lIFJURU5UUllfUlRfTkVYVCAxCi1fQUNFT0YKLQotZmkKLQotZmkKLQotIyBDaGVjayBzaW42X3Njb3BlX2lkIG1lbWJlciBzcGVjaWZpZWQgaW4gUkZDMjU1MyBhZGRpdGlvbmFsbHkKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IHNvY2thZGRyX2luNi5zaW42X3Njb3BlX2lkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZC4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCtzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQogJGFjX2luY2x1ZGVzX2RlZmF1bHQKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLQorZXh0ZXJuIHVuc2lnbmVkIGludCB2YXJpYWJsZTsKK2V4dGVybiBzaXplX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKLXN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFjX2FnZ3I7Ci1pZiAoYWNfYWdnci5zaW42X3Njb3BlX2lkKQotcmV0dXJuIDA7CisKICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9zaXplX3RfdHlwZT0iaW50IgorZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3NpemVfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCiAkYWNfaW5jbHVkZXNfZGVmYXVsdAotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotCitleHRlcm4gdW5zaWduZWQgbG9uZyB2YXJpYWJsZTsKK2V4dGVybiBzaXplX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKLXN0YXRpYyBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFjX2FnZ3I7Ci1pZiAoc2l6ZW9mIGFjX2FnZ3Iuc2luNl9zY29wZV9pZCkKLXJldHVybiAwOworCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZD15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9zaXplX3RfdHlwZT0ibG9uZyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl9zaXplX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIHZhcmlhYmxlOworZXh0ZXJuIHNpemVfdCB2YXJpYWJsZTsKK2ludAorbWFpbiAoKQorewogCi1hY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkPW5vCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9zaXplX3RfdHlwZT0ibG9uZyBsb25nIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3NpemVfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCB2YXJpYWJsZTsKK2V4dGVybiBzaXplX3QgdmFyaWFibGU7CitpbnQKK21haW4gKCkKK3sKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3Zfc2l6ZV90X3R5cGU9InNob3J0IgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3NpemVfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBjaGFyIHZhcmlhYmxlOworZXh0ZXJuIHNpemVfdCB2YXJpYWJsZTsKK2ludAorbWFpbiAoKQoreworCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl9zaXplX3RfdHlwZT0iY2hhciIKIGZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCIgPiY2Ci1pZiB0ZXN0ICRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X3Njb3BlX2lkID0geWVzOyB0aGVuCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9jdl9zaXplX3RfdHlwZSIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUiID4mNjsgfQorCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludGYgYSBzaXplX3QiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaG93IHRvIHByaW50ZiBhIHNpemVfdC4uLiAiID4mNjsgfQorY2FzZSAiJG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUiIGluCisgICAgY2hhcnxzaG9ydHxpbnQpIG5ldHNubXBfUFJJej0iIiA7OworICAgIGxvbmcpIG5ldHNubXBfUFJJej0ibCIgOzsKKyAgICAibG9uZyBsb25nIikgbmV0c25tcF9QUkl6PSJsbCIgOzsKKyAgICAqKSBhc19mbl9lcnJvciAkPyAidW5kZXJseWluZyB0eXBlIG9mIHNpemVfdCBub3Qga25vd24iICIkTElORU5PIiA1IDs7Citlc2FjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfUFJJeiIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfUFJJeiIgPiY2OyB9CiAKIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQgMQorI2RlZmluZSBORVRTTk1QX1BSSXogIiRuZXRzbm1wX1BSSXoiCiBfQUNFT0YKIAogCi1maQorIyMKKyMgICBDaGVjayBob3cgdG8gcHJpbnQgYSB1aW50MzJfdCB2YXJpYWJsZQorIyMKIAotCi0jIENoZWNrIHN0cnVjdCBydGVudHJ5IGZvciB2YXJpb3VzIHRoaW5ncy4KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAicnRlbnRyeSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAicnRfdW5pdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHJ0ZW50cnkucnRfdW5pdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBydGVudHJ5LnJ0X3VuaXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgdGhlIHVuZGVybHlpbmcgdHlwZSBvZiBhbiB1aW50MzJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB0aGUgdW5kZXJseWluZyB0eXBlIG9mIGFuIHVpbnQzMl90Li4uICIgPiY2OyB9CitpZiAke25ldHNubXBfY3ZfdWludDMyX3RfdHlwZSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKKyAgaWYgWyB4JG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi0KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgY2hhciB2YXJpYWJsZTsKK2V4dGVybiB1aW50MzJfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgcnRlbnRyeSB0ZXN0aXQ7Ci10ZXN0aXQucnRfdW5pdCAkZGVmaW5laXQ7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGU9ImNoYXIiCiBmaQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAicnRlbnRyeSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAicnRfcmVmY250IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgcnRlbnRyeS5ydF9yZWZjbnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnRlbnRyeS5ydF9yZWZjbnQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotCi0KKyRhY19pbmNsdWRlc19kZWZhdWx0CitleHRlcm4gdW5zaWduZWQgc2hvcnQgdmFyaWFibGU7CitleHRlcm4gdWludDMyX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IHJ0ZW50cnkgdGVzdGl0OwotdGVzdGl0LnJ0X3JlZmNudCAkZGVmaW5laXQ7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGU9InNob3J0IgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInJ0ZW50cnkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gInJ0X2hhc2giIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBydGVudHJ5LnJ0X2hhc2giID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgcnRlbnRyeS5ydF9oYXNoLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQorICAgIGlmIFsgeCRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUgPSB4IF0gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLQotCiskYWNfaW5jbHVkZXNfZGVmYXVsdAorZXh0ZXJuIHVuc2lnbmVkIGludCB2YXJpYWJsZTsKK2V4dGVybiB1aW50MzJfdCB2YXJpYWJsZTsKIGludAogbWFpbiAoKQogewogCi1zdHJ1Y3QgcnRlbnRyeSB0ZXN0aXQ7Ci10ZXN0aXQucnRfaGFzaCAkZGVmaW5laXQ7Ci0KICAgOwogICByZXR1cm4gMDsKIH0KIF9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGU9ImludCIKIGZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJydGVudHJ5IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJydF91c2UiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBydGVudHJ5LnJ0X3VzZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBydGVudHJ5LnJ0X3VzZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgZmkKKyAgICBpZiBbIHgkbmV0c25tcF9jdl91aW50MzJfdF90eXBlID0geCBdIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci0KLQorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBsb25nIHZhcmlhYmxlOworZXh0ZXJuIHVpbnQzMl90IHZhcmlhYmxlOwogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCBydGVudHJ5IHRlc3RpdDsKLXRlc3RpdC5ydF91c2UgJGRlZmluZWl0OwotCiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9jdl91aW50MzJfdF90eXBlPSJsb25nIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0jIENoZWNrIHRjcHN0YXQgZm9yIHRjcHN0YXQudGNwX3Jjdm1lbWRyb3AKLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAidGNwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAidGNwX3Jjdm1lbWRyb3AiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciB0Y3BzdGF0LnRjcF9yY3ZtZW1kcm9wIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHRjcHN0YXQudGNwX3Jjdm1lbWRyb3AuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgIGZpCisgICAgaWYgWyB4JG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSA9IHggXSA7IHRoZW4KKyAgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRU9VVF9ICi0jaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+Ci0jaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgotI2VuZGlmCi0KLQorJGFjX2luY2x1ZGVzX2RlZmF1bHQKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgdmFyaWFibGU7CitleHRlcm4gdWludDMyX3QgdmFyaWFibGU7CiBpbnQKIG1haW4gKCkKIHsKIAotc3RydWN0IHRjcHN0YXQgdGVzdGl0OwotdGVzdGl0LnRjcF9yY3ZtZW1kcm9wICRkZWZpbmVpdDsKLQogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZT0ibG9uZyBsb25nIgogZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICBmaQogCiBmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUiID4mNjsgfQogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGhvdyB0byBwcmludGYgYSB1aW50MzJfdCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBob3cgdG8gcHJpbnRmIGEgdWludDMyX3QuLi4gIiA+JjY7IH0KK2Nhc2UgIiRuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUiIGluCisgICAgY2hhcnxzaG9ydHxpbnQpIG5ldHNubXBfUFJJMzI9IiIgOzsKKyAgICBsb25nKSBuZXRzbm1wX1BSSTMyPSJsIiA7OworICAgICJsb25nIGxvbmciKSBuZXRzbm1wX1BSSTMyPSJsbCIgOzsKKyAgICAqKSBhc19mbl9lcnJvciAkPyAidW5kZXJseWluZyB0eXBlIG9mIHVpbnQzMl90IG5vdCBrbm93biIgIiRMSU5FTk8iIDUgOzsKK2VzYWMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkbmV0c25tcF9QUkkzMiIgPiY1CiskYXNfZWNobyAiJG5ldHNubXBfUFJJMzIiID4mNjsgfQogCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgTkVUU05NUF9QUkkzMiAiJG5ldHNubXBfUFJJMzIiCiBfQUNFT0YKIAorCisjIGNoZWNrIHRvIHNlZSBpZiB0aGUgb3BlbnNzbCBpcyBnb29kIGVub3VnaCBmb3IgRFRMUworIyAoQklPX2RncmFtX2dldF9wZWVyIGlzIGEgbWFjcm8sIG5vdCBhIHRydWUgZnVuY3Rpb24pCitpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIkRUTFMiID4gL2Rldi9udWxsOyB0aGVuCisgICAgaWYgJHtuZXRzbm1wX2N2X2Jpb19kZ3JhbV9nZXRfcGVlcis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIEJJT19kZ3JhbV9nZXRfcGVlciIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgQklPX2RncmFtX2dldF9wZWVyLi4uICIgPiY2OyB9CiAKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZhZGRyIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZmFfbmV4dCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmYWRkci5pZmFfbmV4dCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZmFkZHIuaWZhX25leHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICAgICAgICBvbGRMSUJTPSIkTElCUyIKKyAgICAgICAgTElCUz0iJExJQlMgLWxjcnlwdG8iCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0KLQorI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CiBpbnQKIG1haW4gKCkKIHsKLQotc3RydWN0IGlmYWRkciB0ZXN0aXQ7Ci10ZXN0aXQuaWZhX25leHQgJGRlZmluZWl0OwotCitCSU9fZGdyYW1fZ2V0X3BlZXIoTlVMTCwgTlVMTCk7CiAgIDsKICAgcmV0dXJuIDA7CiB9CiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKIAogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisgIGFzX2ZuX2Vycm9yICQ/ICJEVExTIHN1cHBvcnQgcmVxdWlyZXMgYSBuZXdlciB2ZXJzaW9uIG9mIE9wZW5TU0wiICIkTElORU5PIiA1CitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworICAgICAgICBMSUJTPSIkb2xkTElCUyIKKworICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisKK2ZpCisKIGZpCiAKIAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBkYXRhIHN0cnVjdHVyZXMgJiBtZW1iZXJzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAotIyBDaGVjayBpZm5ldCBlbnRyaWVzIHVzaW5nIG1hY3JvIGRlZmluZWQgaW4gYWNsb2NhbC5tNC4KKyMjCisjICAgU2ltcGxlIGNoZWNrczoKKyMjCisKKyMgICAgICAgc3RydWN0IGFycGhkCisjICAgQWdlbnQ6CiAjCi0jIFhYWCAgQnJva2VuIG9uIEZyZWVCU0Qgd2hlcmUgdGhlc2UgYXJlICNkZWZpbmUnZCBpbiA8bmV0L2lmLmg+Ci0jCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2JhdWRyYXRlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfYmF1ZHJhdGUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfYmF1ZHJhdGUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfYmF1ZHJhdGUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9iYXVkcmF0ZS5pZnNfdmFsdWUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9iYXVkcmF0ZS5pZnNfdmFsdWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2JhdWRyYXRlLmlmc192YWx1ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX3NwZWVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfc3BlZWQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfc3BlZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfc3BlZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl90eXBlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfdHlwZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl90eXBlLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX3R5cGUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9pbWNhc3RzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfaW1jYXN0cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9pbWNhc3RzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2ltY2FzdHMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9pcWRyb3BzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfaXFkcm9wcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9pcWRyb3BzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2lxZHJvcHMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9ub3Byb3RvIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfbm9wcm90byIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9ub3Byb3RvLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX25vcHJvdG8gJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9vbWNhc3RzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfb21jYXN0cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9vbWNhc3RzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX29tY2FzdHMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl94bmFtZSIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX3huYW1lIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX3huYW1lLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgInhubyIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieG5vIiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSJubyIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX3huYW1lICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfbGFzdGNoYW5nZS50dl9zZWMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9sYXN0Y2hhbmdlLnR2X3NlYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9sYXN0Y2hhbmdlLnR2X3NlYy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9sYXN0Y2hhbmdlLnR2X3NlYyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2xhc3RjaGFuZ2UudHZfbnNlYyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlmbmV0LmlmX2xhc3RjaGFuZ2UudHZfbnNlYyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpZm5ldC5pZl9sYXN0Y2hhbmdlLnR2X25zZWMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfbGFzdGNoYW5nZS50dl9uc2VjICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpZm5ldCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaWZfb2J5dGVzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfb2J5dGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlmbmV0LmlmX29ieXRlcy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICi0jaW5jbHVkZSA8c3lzL3F1ZXVlLmg+Ci0jZW5kaWYKLSNpZmRlZiBsaW51eAotc3RydWN0IGlmbmV0IHsKLQljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiAiZW4iIG9yICJsbyIgKi8KLQlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLwotCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCi0Jc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KLQlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCi0JY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLwotCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKLQkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KLQlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCi0KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLwotCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLwotCi0Jc3RydWN0CWlmcXVldWUgewotCQlpbnQJaWZxX2xlbjsKLQkJaW50CWlmcV9kcm9wczsKLQl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KLQlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0gICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KLQlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCi0vKiBlbmQgc3RhdGlzdGljcyAqLwotCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKLX07Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlmbmV0IHRlc3RpdDsKLXRlc3RpdC5pZl9vYnl0ZXMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9pYnl0ZXMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9pYnl0ZXMiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfaWJ5dGVzLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2lieXRlcyAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaWZuZXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlmX2FkZHJsaXN0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaWZuZXQuaWZfYWRkcmxpc3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfYWRkcmxpc3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWZkZWYgbGludXgKLXN0cnVjdCBpZm5ldCB7Ci0JY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gImVuIiBvciAibG8iICovCi0Jc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KLQlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLwotCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCi0JaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLwotCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KLQlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCi0JCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCi0JaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLwotCi0Jc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KLQotCXN0cnVjdAlpZnF1ZXVlIHsKLQkJaW50CWlmcV9sZW47Ci0JCWludAlpZnFfZHJvcHM7Ci0JfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCi0JaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCi0JaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLwotCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLwotLyogZW5kIHN0YXRpc3RpY3MgKi8KLQlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Ci19OwotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfYWRkcmxpc3QgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlmbmV0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpZl9hZGRyaGVhZC50cWhfZmlyc3QiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpZm5ldC5pZl9hZGRyaGVhZC50cWhfZmlyc3QiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgaWZuZXQuaWZfYWRkcmhlYWQudHFoX2ZpcnN0Li4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAotI2luY2x1ZGUgPHN5cy90aW1lLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKLSNpbmNsdWRlIDxzeXMvcXVldWUuaD4KLSNlbmRpZgotI2lmZGVmIGxpbnV4Ci1zdHJ1Y3QgaWZuZXQgewotCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLwotCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCi0Jc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KLQlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLwotCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KLQljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCi0JaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAotCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLwotCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KLQotCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCi0Jc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCi0KLQlzdHJ1Y3QJaWZxdWV1ZSB7Ci0JCWludAlpZnFfbGVuOwotCQlpbnQJaWZxX2Ryb3BzOwotCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLwotCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KLSAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLwotCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KLQlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCi0JaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLwotCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KLS8qIGVuZCBzdGF0aXN0aWNzICovCi0Jc3RydWN0CWlmbmV0ICppZl9uZXh0OwotfTsKLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaWZuZXQgdGVzdGl0OwotdGVzdGl0LmlmX2FkZHJoZWFkLnRxaF9maXJzdCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAidWRwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAidWRwc19kaXNjYXJkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX2Rpc2NhcmQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX2Rpc2NhcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCB1ZHBzdGF0IHRlc3RpdDsKLXRlc3RpdC51ZHBzX2Rpc2NhcmQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJ1ZHBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJ1ZHBzX25vcG9ydCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19ub3BvcnQiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3IgdWRwc3RhdC51ZHBzX25vcG9ydC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHVkcHN0YXQgdGVzdGl0OwotdGVzdGl0LnVkcHNfbm9wb3J0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAidWRwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAidWRwc19ub3BvcnRiY2FzdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19ub3BvcnRiY2FzdCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfbm9wb3J0YmNhc3QuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCB1ZHBzdGF0IHRlc3RpdDsKLXRlc3RpdC51ZHBzX25vcG9ydGJjYXN0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAidWRwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAidWRwc19mdWxsc29jayIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHVkcHN0YXQudWRwc19mdWxsc29jayIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciB1ZHBzdGF0LnVkcHNfZnVsbHNvY2suLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCB1ZHBzdGF0IHRlc3RpdDsKLXRlc3RpdC51ZHBzX2Z1bGxzb2NrICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiYXJwaGQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImF0X25leHQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBhcnBoZC5hdF9uZXh0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGFycGhkLmF0X25leHQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBhcnBoZCIgImF0X25leHQiICJhY19jdl9tZW1iZXJfc3RydWN0X2FycGhkX2F0X25leHQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCiAjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKICNpZmRlZiBIQVZFX1NZU19USU1FX0gKICNpbmNsdWRlIDxzeXMvdGltZS5oPgogI2VuZGlmCkBAIC00NjYyMywxMTY3ICsyNjM0MCw3MyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfYXJwaGRfYXRfbmV4dCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBhcnBoZCB0ZXN0aXQ7Ci10ZXN0aXQuYXRfbmV4dCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfQVJQSERfQVRfTkVYVCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCiAKIAotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN3ZGV2dCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAic3dfbmJsa3NlbmFibGVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3dkZXZ0LnN3X25ibGtzZW5hYmxlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzd2RldnQuc3dfbmJsa3NlbmFibGVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfQ09ORl9ICi0jaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyMgICAgICAgc3RydWN0IGRlc19rc19zdHJ1Y3QKKyMgICAgICAgICAoJ3dlYWtfa2V5JyBpbmRpY2F0ZXMgb2xkZXIgdmVyc2lvbiBvZiBPcGVuU1NMKQorIyAgIExpYnJhcnk6CisjCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2Rlc19oIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBhY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBkZXNfa3Nfc3RydWN0IiAid2Vha19rZXkiICJhY19jdl9tZW1iZXJfc3RydWN0X2Rlc19rc19zdHJ1Y3Rfd2Vha19rZXkiICIKKyNpZmRlZiBIQVZFX09QRU5TU0xfREVTX0gKKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9kZXNfa3Nfc3RydWN0X3dlYWtfa2V5IiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN3ZGV2dCB0ZXN0aXQ7Ci10ZXN0aXQuc3dfbmJsa3NlbmFibGVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9ERVNfS1NfU1RSVUNUX1dFQUtfS0VZIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdHZmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAibW50X2RpciIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIHN0YXR2ZnMubW50X2RpciIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0dmZzLm1udF9kaXIuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgogZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwogCisjICAgICAgIHN0cnVjdCBkaXJlbnQKKyMgICAgICAgICAoc2VlIGFsc28gQUNfU1RSVUNUX0RJUkVOVF9EX1RZUEUpCisjICAgTGlicmFyeToKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGRpcmVudCIgImRfdHlwZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfZGlyZW50X2RfdHlwZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2lmIEhBVkVfRElSRU5UX0gKKyNpbmNsdWRlIDxkaXJlbnQuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfZGlyZW50X2RfdHlwZSIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0dmZzIHRlc3RpdDsKLXRlc3RpdC5tbnRfZGlyICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9ESVJFTlRfRF9UWVBFIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXR2ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImZfZnJzaXplIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdHZmcy5mX2Zyc2l6ZSIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0dmZzLmZfZnJzaXplLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdHZmcyB0ZXN0aXQ7Ci10ZXN0aXQuZl9mcnNpemUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIGZpCiAKIAotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImZfZnJzaXplIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdGZzLmZfZnJzaXplIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXRmcy5mX2Zyc2l6ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXRmcyB0ZXN0aXQ7Ci10ZXN0aXQuZl9mcnNpemUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0dmZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJmX2ZpbGVzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdHZmcy5mX2ZpbGVzIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0YXR2ZnMuZl9maWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRWRlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0dmZzLmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXR2ZnMgdGVzdGl0OwotdGVzdGl0LmZfZmlsZXMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJzdGF0ZnMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImZfZmlsZXMiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0ZnMuZl9maWxlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBzdGF0ZnMuZl9maWxlcy4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3Qgc3RhdGZzIHRlc3RpdDsKLXRlc3RpdC5mX2ZpbGVzICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAic3RhdGZzIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJmX2ZmcmVlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RhdGZzLmZfZmZyZWUiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdGZzLmZfZmZyZWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IHN0YXRmcyB0ZXN0aXQ7Ci10ZXN0aXQuZl9mZnJlZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gInN0YXRmcyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiZl9mYXZhaWwiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBzdGF0ZnMuZl9mYXZhaWwiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBmb3Igc3RhdGZzLmZfZmF2YWlsLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBzdGF0ZnMgdGVzdGl0OwotdGVzdGl0LmZfZmF2YWlsICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQotX0FDRU9GCi0KLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgotZmkKLQotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAibmxpc3QiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gIm5fdmFsdWUiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBubGlzdC5uX3ZhbHVlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5saXN0Lm5fdmFsdWUuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpZiBIQVZFX05MSVNUX0gKLSNpbmNsdWRlIDxubGlzdC5oPgotI2VuZGlmCi0KLQotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBubGlzdCB0ZXN0aXQ7Ci10ZXN0aXQubl92YWx1ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKLV9BQ0VPRgotCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKLWZpCi0KLQotCi0jIHN0cnVjdCBubGlzdDY0IChJUklYKQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJubGlzdDY0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJuX3ZhbHVlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igbmxpc3Q2NC5uX3ZhbHVlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIG5saXN0NjQubl92YWx1ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2lmIEhBVkVfU1lTX1RZUEVTX0gKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkxJU1RfSAotI2luY2x1ZGUgPG5saXN0Lmg+Ci0jZW5kaWYKLQotCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IG5saXN0NjQgdGVzdGl0OwotdGVzdGl0Lm5fdmFsdWUgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCi1fQUNFT0YKLQotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2Ci1maQotCi0KLQotIyBzdHJ1Y3QgZXRodG9vbF9jbWQKLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3Igc3RydWN0IGV0aHRvb2xfY21kLnNwZWVkX2hpIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIHN0cnVjdCBldGh0b29sX2NtZC5zcGVlZF9oaS4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBjYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQorIyAgICAgICBzdHJ1Y3QgZXRodG9vbF9jbWQKKyMKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2xpbnV4X2V0aHRvb2xfaCIgPSAieHllcyIgOyB0aGVuCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBldGh0b29sX2NtZCIgInNwZWVkX2hpIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaSIgIgogICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKICNpZmRlZiBIQVZFX0xJTlVYX0VUSFRPT0xfSAogI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KICNlbmRpZgogCi0KLWludAotbWFpbiAoKQotewotc3RhdGljIHN0cnVjdCBldGh0b29sX2NtZCBhY19hZ2dyOwotaWYgKGFjX2FnZ3Iuc3BlZWRfaGkpCi1yZXR1cm4gMDsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpPXllcwotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotICAgICRhY19pbmNsdWRlc19kZWZhdWx0Ci0KLSNpZmRlZiBIQVZFX0xJTlVYX0VUSFRPT0xfSAotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNlbmRpZgotCi0KLWludAotbWFpbiAoKQotewotc3RhdGljIHN0cnVjdCBldGh0b29sX2NtZCBhY19hZ2dyOwotaWYgKHNpemVvZiBhY19hZ2dyLnNwZWVkX2hpKQotcmV0dXJuIDA7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaT15ZXMKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaT1ubwotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGkiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X21lbWJlcl9zdHJ1Y3RfZXRodG9vbF9jbWRfc3BlZWRfaGkiID4mNgotaWYgdGVzdCAkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ldGh0b29sX2NtZF9zcGVlZF9oaSA9IHllczsgdGhlbgorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2V0aHRvb2xfY21kX3NwZWVkX2hpIiA9IHh5ZXM7IHRoZW4gOgogCiBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCiAjZGVmaW5lIEhBVkVfU1RSVUNUX0VUSFRPT0xfQ01EX1NQRUVEX0hJIDEKQEAgLTQ3NzkyLDM3ICsyNjQxNSwxNCBAQAogCiBmaQogCi0KLSMgY2hlY2sgc3RydWN0IGlwc3RhdCBmb3IgdmFyaW91cyB0aGluZ3MKLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfY2FudGZvcndhcmQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2NhbnRmb3J3YXJkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfY2FudGZvcndhcmQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgogZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwogCisjICAgICAgIHN0cnVjdCBpcHN0YXQKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19jYW50ZnJhZyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19jYW50ZnJhZyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDc4MzAsOTUgKzI2NDMwLDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19jYW50ZnJhZyIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19jYW50Zm9yd2FyZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URlJBRyAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfZGVsaXZlcmVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2RlbGl2ZXJlZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX2NhbnRmcmFnIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19jYW50ZnJhZyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2NhbnRmcmFnLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ3OTI2LDk1ICsyNjQ0OSwxOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZGVsaXZlcmVkIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2NhbnRmcmFnICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0RFTElWRVJFRCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfZnJhZ2Ryb3BwZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfZnJhZ2Ryb3BwZWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19kZWxpdmVyZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2RlbGl2ZXJlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2RlbGl2ZXJlZC4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODAyMiw5NSArMjY0NjgsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2ZyYWdkcm9wcGVkIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2RlbGl2ZXJlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHRFJPUFBFRCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfZnJhZ21lbnRlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19mcmFnbWVudGVkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfZnJhZ2Ryb3BwZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2ZyYWdkcm9wcGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZnJhZ2Ryb3BwZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDgxMTgsOTUgKzI2NDg3LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19mcmFnbWVudGVkIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2ZyYWdkcm9wcGVkICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdNRU5URUQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2xvY2Fsb3V0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2xvY2Fsb3V0IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfZnJhZ3RpbWVvdXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2ZyYWd0aW1lb3V0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZnJhZ3RpbWVvdXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDgyMTQsOTUgKzI2NTA2LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19sb2NhbG91dCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19mcmFndGltZW91dCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19MT0NBTE9VVCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfbm9wcm90byIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19ub3Byb3RvIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfZnJhZ21lbnRlZCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfZnJhZ21lbnRlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2ZyYWdtZW50ZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDgzMTAsOTUgKzI2NTI1LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19ub3Byb3RvIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2ZyYWdtZW50ZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9QUk9UTyAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcHN0YXQiICJpcHNfbm9yb3V0ZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19ub3JvdXRlIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfbG9jYWxvdXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX2xvY2Fsb3V0IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfbG9jYWxvdXQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDg0MDYsOTUgKzI2NTQ0LDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19ub3JvdXRlIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX2xvY2Fsb3V0ICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUk9VVEUgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX29kcm9wcGVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX29kcm9wcGVkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfbm9wcm90byIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfbm9wcm90byIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX25vcHJvdG8uLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDg1MDIsOTUgKzI2NTYzLDE4IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19vZHJvcHBlZCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19ub3Byb3RvICRkZWZpbmVpdDsKLQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKLWVsc2UKLSAgZWNobyAiJGFzX21lOiBmYWlsZWQgcHJvZ3JhbSB3YXM6IiA+JjUKLXNlZCAncy9eL3wgLycgY29uZnRlc3QuJGFjX2V4dCA+JjUKLQotZXZhbCAiJHthY19zYWZlX2FsbH09bm8iCi1maQotcm0gLWYgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotCi1maQotCi0KLWlmIGV2YWwgInRlc3QgXCJ4JGBlY2hvICR7YWNfc2FmZV9hbGx9YFwiID0gXCJ4eWVzXCIiOyB0aGVuCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IHllcyIgPiY1Ci1lY2hvICIke0VDSE9fVH15ZXMiID4mNgotICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lICRhY191Y19kZWZpbmUgMQorY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09EUk9QUEVEIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19vZnJhZ21lbnRzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX29mcmFnbWVudHMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAogCi0KLQotCi0KLWFjX3NhZmVfc3RydWN0PWBlY2hvICJpcHN0YXQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9tZW1iZXI9YGVjaG8gImlwc19ub3JvdXRlIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19ub3JvdXRlIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfbm9yb3V0ZS4uLiAkRUNIT19DIiA+JjYKLWlmIGV2YWwgInRlc3QgXCJcJHskYWNfc2FmZV9hbGwrc2V0fVwiID0gc2V0IjsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotCi1pZiB0ZXN0ICJ4IiA9ICJ4IjsgdGhlbgotICBkZWZpbmVpdD0iPSAwIgotZWxpZiB0ZXN0ICJ4IiA9ICJ4bm8iOyB0aGVuCi0gIGRlZmluZWl0PSIiCi1lbHNlCi0gIGRlZmluZWl0PSIiCi1maQotY2F0ID5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBjb25mZGVmcy5oLiAgKi8KLV9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCi0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLQotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODU5OCw5NSArMjY1ODIsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX29mcmFnbWVudHMiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfbm9yb3V0ZSAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRlJBR01FTlRTIDEKIF9BQ0VPRgogCi1lbHNlCi0gIGVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6IG5vIiA+JjUKLWVjaG8gIiR7RUNIT19UfW5vIiA+JjYKKwogZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlwc3RhdCIgImlwc19yZWFzc2VtYmxlZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19yZWFzc2VtYmxlZCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLQotCi0KLQotYWNfc2FmZV9zdHJ1Y3Q9YGVjaG8gImlwc3RhdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAiaXBzX29kcm9wcGVkIiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfYWxsPSJhY19jdl9zdHJ1Y3RfJHthY19zYWZlX3N0cnVjdH1faGFzXyR7YWNfc2FmZV9tZW1iZXJ9IgotICBhY191Y19kZWZpbmU9U1RSVUNUX2BlY2hvICIke2FjX3NhZmVfc3RydWN0fV9IQVNfJHthY19zYWZlX21lbWJlcn0iIHwgc2VkICd5JWFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Li8tJUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaX19fJSdgCi0KLWVjaG8gIiRhc19tZTokTElORU5POiBjaGVja2luZyBmb3IgaXBzdGF0Lmlwc19vZHJvcHBlZCIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX29kcm9wcGVkLi4uICRFQ0hPX0MiID4mNgotaWYgZXZhbCAidGVzdCBcIlwkeyRhY19zYWZlX2FsbCtzZXR9XCIgPSBzZXQiOyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0KLWlmIHRlc3QgIngiID0gIngiOyB0aGVuCi0gIGRlZmluZWl0PSI9IDAiCi1lbGlmIHRlc3QgIngiID0gInhubyI7IHRoZW4KLSAgZGVmaW5laXQ9IiIKLWVsc2UKLSAgZGVmaW5laXQ9IiIKLWZpCi1jYXQgPmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGNvbmZkZWZzLmguICAqLwotX0FDRU9GCi1jYXQgY29uZmRlZnMuaCA+PmNvbmZ0ZXN0LiRhY19leHQKLWNhdCA+PmNvbmZ0ZXN0LiRhY19leHQgPDxfQUNFT0YKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKQEAgLTQ4Njk0LDk1ICsyNjYwMSw0NSBAQAogI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CiAjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwc3RhdF9pcHNfcmVhc3NlbWJsZWQiID0geHllczsgdGhlbiA6CiAKLWludAotbWFpbiAoKQotewotCi1zdHJ1Y3QgaXBzdGF0IHRlc3RpdDsKLXRlc3RpdC5pcHNfb2Ryb3BwZWQgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfUkVBU1NFTUJMRUQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQogCisjICAgICAgIHN0cnVjdCBpcDZzdGF0CisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpcDZzdGF0IiAiaXA2c19leHRoZHJ0b29sb25nICIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaXA2c3RhdF9pcDZzX2V4dGhkcnRvb2xvbmdfIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUNl9JUDZfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0Ni9pcDZfdmFyLmg+CisjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lwNnN0YXRfaXA2c19leHRoZHJ0b29sb25nXyIgPSB4eWVzOyB0aGVuIDoKIAotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfb2ZyYWdtZW50cyIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX2FsbD0iYWNfY3Zfc3RydWN0XyR7YWNfc2FmZV9zdHJ1Y3R9X2hhc18ke2FjX3NhZmVfbWVtYmVyfSIKLSAgYWNfdWNfZGVmaW5lPVNUUlVDVF9gZWNobyAiJHthY19zYWZlX3N0cnVjdH1fSEFTXyR7YWNfc2FmZV9tZW1iZXJ9IiB8IHNlZCAneSVhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei4vLSVBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWl9fXyUnYAotCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfb2ZyYWdtZW50cyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGZvciBpcHN0YXQuaXBzX29mcmFnbWVudHMuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQNlNUQVRfSVA2U19FWFRIRFJUT09MT05HXyAxCiBfQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiAKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KK2ZpCisKKworIworIyAgIE5vdC1Vc2VkOgorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2NhbnRmb3J3YXJkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2NhbnRmb3J3YXJkIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKwogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC00ODc5MCw5NSArMjY2NDcsMTggQEAKICNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgogI2VuZGlmCiAKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2NhbnRmb3J3YXJkIiA9IHh5ZXM7IHRoZW4gOgogCi1pbnQKLW1haW4gKCkKLXsKLQotc3RydWN0IGlwc3RhdCB0ZXN0aXQ7Ci10ZXN0aXQuaXBzX29mcmFnbWVudHMgJGRlZmluZWl0OwotCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQKLWlmIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX2NvbXBpbGVcIiIpID4mNQotICAoZXZhbCAkYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcjEKLSAgYWNfc3RhdHVzPSQ/Ci0gIGdyZXAgLXYgJ14gKisnIGNvbmZ0ZXN0LmVyMSA+Y29uZnRlc3QuZXJyCi0gIHJtIC1mIGNvbmZ0ZXN0LmVyMQotICBjYXQgY29uZnRlc3QuZXJyID4mNQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC16ICIkYWNfY193ZXJyb3JfZmxhZyIKLQkJCSB8fCB0ZXN0ICEgLXMgY29uZnRlc3QuZXJyJwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9ICYmCi0JIHsgYWNfdHJ5PSd0ZXN0IC1zIGNvbmZ0ZXN0LiRhY19vYmpleHQnCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH07IHRoZW4KLSAgZXZhbCAiJHthY19zYWZlX2FsbH09eWVzIgotZWxzZQotICBlY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQotCi1ldmFsICIke2FjX3NhZmVfYWxsfT1ubyIKLWZpCi1ybSAtZiBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci0KLWZpCi0KLQotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZPUldBUkQgMQogX0FDRU9GCiAKLWVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorCiBmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaXBzdGF0IiAiaXBzX2ZyYWd0aW1lb3V0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pcHN0YXRfaXBzX2ZyYWd0aW1lb3V0IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotCi0KLQotCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiaXBzdGF0IiB8IHNlZCAneSUuLystJV9fcF8lJ2AKLWFjX3NhZmVfbWVtYmVyPWBlY2hvICJpcHNfcmVhc3NlbWJsZWQiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBpcHN0YXQuaXBzX3JlYXNzZW1ibGVkIiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGlwc3RhdC5pcHNfcmVhc3NlbWJsZWQuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNDg4ODYsMTc5ICsyNjY2NiwyNjQ2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KICNlbmRpZgogCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaXBzdGF0X2lwc19mcmFndGltZW91dCIgPSB4eWVzOyB0aGVuIDoKIAotaW50Ci1tYWluICgpCi17Ci0KLXN0cnVjdCBpcHN0YXQgdGVzdGl0OwotdGVzdGl0Lmlwc19yZWFzc2VtYmxlZCAkZGVmaW5laXQ7Ci0KLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotcm0gLWYgY29uZnRlc3QuJGFjX29iamV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfY29tcGlsZVwiIikgPiY1Ci0gIChldmFsICRhY19jb21waWxlKSAyPmNvbmZ0ZXN0LmVyMQotICBhY19zdGF0dXM9JD8KLSAgZ3JlcCAtdiAnXiAqKycgY29uZnRlc3QuZXIxID5jb25mdGVzdC5lcnIKLSAgcm0gLWYgY29uZnRlc3QuZXIxCi0gIGNhdCBjb25mdGVzdC5lcnIgPiY1Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXogIiRhY19jX3dlcnJvcl9mbGFnIgotCQkJIHx8IHRlc3QgISAtcyBjb25mdGVzdC5lcnInCi0gIHsgKGV2YWwgZWNobyAiJGFzX21lOiRMSU5FTk86IFwiJGFjX3RyeVwiIikgPiY1Ci0gIChldmFsICRhY190cnkpIDI+JjUKLSAgYWNfc3RhdHVzPSQ/Ci0gIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JjUKLSAgKGV4aXQgJGFjX3N0YXR1cyk7IH07IH0gJiYKLQkgeyBhY190cnk9J3Rlc3QgLXMgY29uZnRlc3QuJGFjX29iamV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgotICBldmFsICIke2FjX3NhZmVfYWxsfT15ZXMiCi1lbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1Ci0KLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLQotZmkKLQotCi1pZiBldmFsICJ0ZXN0IFwieCRgZWNobyAke2FjX3NhZmVfYWxsfWBcIiA9IFwieHllc1wiIjsgdGhlbgotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiB5ZXMiID4mNQotZWNobyAiJHtFQ0hPX1R9eWVzIiA+JjYKLSAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSAkYWNfdWNfZGVmaW5lIDEKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHVElNRU9VVCAxCiBfQUNFT0YKIAotZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiBubyIgPiY1Ci1lY2hvICIke0VDSE9fVH1ubyIgPiY2CisKIGZpCiAKIAorIyAgICAgICBzdHJ1Y3QgbWJzdGF0CisjICAgTm90LVVzZWQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBtYnN0YXQiICJtX2NsdXN0ZXJzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9tYnN0YXRfbV9jbHVzdGVycyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CiAKLSMgY2hlY2sgZm9yIHRoZSBkZXNfa3Nfc3RydWN0LndlYWtfa2V5IGF0dHJpYnV0ZSwgd2hpY2ggaW5kaWNhdGVzIHRoZQotIyBvbGRlciBvcGVuc3NsIHZlcnNpb24gaXMgYmVpbmcgdXNlZC4KLWlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfZGVzX2giID0gInh5ZXMiIDsgdGhlbgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX01CVUZfSAorI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjZW5kaWYKIAorIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X21ic3RhdF9tX2NsdXN0ZXJzIiA9IHh5ZXM7IHRoZW4gOgogCi1hY19zYWZlX3N0cnVjdD1gZWNobyAiZGVzX2tzX3N0cnVjdCIgfCBzZWQgJ3klLi8rLSVfX3BfJSdgCi1hY19zYWZlX21lbWJlcj1gZWNobyAid2Vha19rZXkiIHwgc2VkICd5JS4vKy0lX19wXyUnYAotYWNfc2FmZV9hbGw9ImFjX2N2X3N0cnVjdF8ke2FjX3NhZmVfc3RydWN0fV9oYXNfJHthY19zYWZlX21lbWJlcn0iCi0gIGFjX3VjX2RlZmluZT1TVFJVQ1RfYGVjaG8gIiR7YWNfc2FmZV9zdHJ1Y3R9X0hBU18ke2FjX3NhZmVfbWVtYmVyfSIgfCBzZWQgJ3klYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXouLy0lQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVpfX18lJ2AKLQotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIGZvciBkZXNfa3Nfc3RydWN0LndlYWtfa2V5IiA+JjUKLWVjaG8gJEVDSE9fTiAiY2hlY2tpbmcgZm9yIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkuLi4gJEVDSE9fQyIgPiY2Ci1pZiBldmFsICJ0ZXN0IFwiXCR7JGFjX3NhZmVfYWxsK3NldH1cIiA9IHNldCI7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotaWYgdGVzdCAieCIgPSAieCI7IHRoZW4KLSAgZGVmaW5laXQ9Ij0gMCIKLWVsaWYgdGVzdCAieCIgPSAieG5vIjsgdGhlbgotICBkZWZpbmVpdD0iIgotZWxzZQotICBkZWZpbmVpdD0iIgotZmkKLWNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX01CU1RBVF9NX0NMVVNURVJTIDEKIF9BQ0VPRgotY2F0IGNvbmZkZWZzLmggPj5jb25mdGVzdC4kYWNfZXh0Ci1jYXQgPj5jb25mdGVzdC4kYWNfZXh0IDw8X0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IG1ic3RhdCIgIm1fY2xmcmVlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9tYnN0YXRfbV9jbGZyZWUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUJVRl9ICisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfbWJzdGF0X21fY2xmcmVlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX01CU1RBVF9NX0NMRlJFRSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgbWJzdGF0IiAibV9tYnVmcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfbWJzdGF0X21fbWJ1ZnMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUJVRl9ICisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfbWJzdGF0X21fbWJ1ZnMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfTUJTVEFUX01fTUJVRlMgMQorX0FDRU9GCisKKworZmkKKworCisjCXN0cnVjdCB1dm1leHAKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHV2bWV4cCIgInBnc3dhcGluIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91dm1leHBfcGdzd2FwaW4iICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaW5jbHVkZSA8dXZtL3V2bV9leHRlcm4uaD4KKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3V2bWV4cF9wZ3N3YXBpbiIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VVk1FWFBfUEdTV0FQSU4gMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIHN0cnVjdCBubGlzdAorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgbmxpc3QiICJuX3ZhbHVlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9ubGlzdF9uX3ZhbHVlIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkxJU1RfSAorI2luY2x1ZGUgPG5saXN0Lmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X25saXN0X25fdmFsdWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfTkxJU1RfTl9WQUxVRSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgbmxpc3Q2NCIgIm5fdmFsdWUiICJhY19jdl9tZW1iZXJfc3RydWN0X25saXN0NjRfbl92YWx1ZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05MSVNUX0gKKyNpbmNsdWRlIDxubGlzdC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9ubGlzdDY0X25fdmFsdWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfTkxJU1Q2NF9OX1ZBTFVFIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uCisjICAgQWdlbnQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzaWdhY3Rpb24iICJzYV9zaWdhY3Rpb24iICJhY19jdl9tZW1iZXJfc3RydWN0X3NpZ2FjdGlvbl9zYV9zaWdhY3Rpb24iICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU0lHTkFMX0gKKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NpZ2FjdGlvbl9zYV9zaWdhY3Rpb24iID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTiAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHNvY2thZGRyCisjICAgTGlicmFyeToKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHNvY2thZGRyIiAic2FfbGVuIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV9sZW4iICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZWxpZiBkZWZpbmVkKEhBVkVfV0lOU09DSzJfSCkKKyNpbmNsdWRlIDx3aW5zb2NrMi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XUzJUQ1BJUF9ICisjaW5jbHVkZSA8d3MydGNwaXAuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfc2FfbGVuIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX0xFTiAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHIiICJzYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIiICJhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3NhX3VuaW9uX3NhX2dlbmVyaWNfc2FfZmFtaWx5MiIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zYV91bmlvbl9zYV9nZW5lcmljX3NhX2ZhbWlseTIiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIiAic3NfZmFtaWx5IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlX3NzX2ZhbWlseSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbGlmIGRlZmluZWQoSEFWRV9XSU5TT0NLMl9IKQorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlX3NzX2ZhbWlseSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSIgIl9fc3NfZmFtaWx5IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9zdG9yYWdlX19fc3NfZmFtaWx5IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX3N0b3JhZ2VfX19zc19mYW1pbHkiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9fX1NTX0ZBTUlMWSAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiAgICAgKHNlZSBSRkMgMjU1MykKKyMgICBMaWJyYXJ5OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc29ja2FkZHJfaW42IiAic2luNl9zY29wZV9pZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc29ja2FkZHJfaW42X3NpbjZfc2NvcGVfaWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV0lOU09DSzJfSAorI2luY2x1ZGUgPHdpbnNvY2syLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1dTMlRDUElQX0gKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zb2NrYWRkcl9pbjZfc2luNl9zY29wZV9pZCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHNvY2thZGRyX3VuCisjICAgTGlicmFyeToKKyMKKyMgVGhlIGNhc3QgdG8gbG9uZyBpbnQgd29ya3MgYXJvdW5kIGEgYnVnIGluIHRoZSBIUCBDIENvbXBpbGVyCisjIHZlcnNpb24gSFA5MjQ1My0wMSBCLjExLjExLjIzNzA5LkdQLCB3aGljaCBpbmNvcnJlY3RseSByZWplY3RzCisjIGRlY2xhcmF0aW9ucyBsaWtlIGBpbnQgYTNbWyhzaXplb2YgKHVuc2lnbmVkIGNoYXIpKSA+PSAwXV07Jy4KKyMgVGhpcyBidWcgaXMgSFAgU1IgbnVtYmVyIDg2MDYyMjMzNjQuCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHNpemUgb2Ygc29ja2FkZHJfdW4uc3VuX3BhdGgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgc2l6ZSBvZiBzb2NrYWRkcl91bi5zdW5fcGF0aC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zaXplb2Zfc29ja2FkZHJfdW5fc3VuX3BhdGgrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiBhY19mbl9jX2NvbXB1dGVfaW50ICIkTElORU5PIiAiKGxvbmcgaW50KSAoc2l6ZW9mIChzb2NrYWRkcl91bi5zdW5fcGF0aCkpIiAiYWNfY3Zfc2l6ZW9mX3NvY2thZGRyX3VuX3N1bl9wYXRoIiAgICAgICAgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19VTl9ICisjaW5jbHVkZSA8c3lzL3VuLmg+CisjZW5kaWYKK3N0cnVjdCBzb2NrYWRkcl91biBzb2NrYWRkcl91bjsKKworIjsgdGhlbiA6CisKK2Vsc2UKKyAgaWYgdGVzdCAiJGFjX2N2X3R5cGVfc29ja2FkZHJfdW5fc3VuX3BhdGgiID0geWVzOyB0aGVuCisgICAgIHsgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogaW4gXGAkYWNfcHdkJzoiID4mNQorJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6IGluIFxgJGFjX3B3ZCc6IiA+JjI7fQorYXNfZm5fZXJyb3IgNzcgImNhbm5vdCBjb21wdXRlIHNpemVvZiAoc29ja2FkZHJfdW4uc3VuX3BhdGgpCitTZWUgXGBjb25maWcubG9nJyBmb3IgbW9yZSBkZXRhaWxzIiAiJExJTkVOTyIgNTsgfQorICAgZWxzZQorICAgICBhY19jdl9zaXplb2Zfc29ja2FkZHJfdW5fc3VuX3BhdGg9MAorICAgZmkKK2ZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3NpemVvZl9zb2NrYWRkcl91bl9zdW5fcGF0aCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3NpemVvZl9zb2NrYWRkcl91bl9zdW5fcGF0aCIgPiY2OyB9CisKKworCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIFNJWkVPRl9TT0NLQUREUl9VTl9TVU5fUEFUSCAkYWNfY3Zfc2l6ZW9mX3NvY2thZGRyX3VuX3N1bl9wYXRoCitfQUNFT0YKKworCisKKyMgICAgICAgc3RydWN0IHN0YXRmcworIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdGZzIiAiZl9mYXZhaWwiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZhdmFpbCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkJVVElMX0gKKyNpbmNsdWRlIDxuYnV0aWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmF2YWlsIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZBVkFJTCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdGZzIiAiZl9mZnJlZSIgImFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmZyZWUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05CVVRJTF9ICisjaW5jbHVkZSA8bmJ1dGlsLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZmcmVlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZGUkVFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0ZnMiICJmX2ZpbGVzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9maWxlcyIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkJVVElMX0gKKyNpbmNsdWRlIDxuYnV0aWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZmlsZXMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRklMRVMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXRmcyIgImZfZmxhZ3MiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2ZsYWdzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfU1lTX1NUQVRGU19ICisjaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAorI2luY2x1ZGUgPHN5cy9tb3VudC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0ZnNfZl9mbGFncyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TVEFURlNfRl9GTEFHUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3Qgc3RhdGZzIiAiZl9mcnNpemUiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXRmc19mX2Zyc2l6ZSIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX1NZU19TVEFURlNfSAorI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKKyNpbmNsdWRlIDxzeXMvbW91bnQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkJVVElMX0gKKyNpbmNsdWRlIDxuYnV0aWwuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3RhdGZzX2ZfZnJzaXplIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZSU0laRSAxCitfQUNFT0YKKworCitmaQorCisKKyMgICAgICAgc3RydWN0IHN0YXR2ZnMKKyMgICBBZ2VudDoKKyMKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXR2ZnMiICJmX2ZpbGVzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfZmlsZXMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfZmlsZXMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZJTEVTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzdGF0dmZzIiAiZl9mcnNpemUiICJhY19jdl9tZW1iZXJfc3RydWN0X3N0YXR2ZnNfZl9mcnNpemUiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX2ZfZnJzaXplIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHN0YXR2ZnMiICJtbnRfZGlyIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX21udF9kaXIiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9zdGF0dmZzX21udF9kaXIiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfU1RBVFZGU19NTlRfRElSIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3Qgc3dkZXZ0CisjICAgTm90LVVzZWQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBzd2RldnQiICJzd19uYmxrc2VuYWJsZWQiICJhY19jdl9tZW1iZXJfc3RydWN0X3N3ZGV2dF9zd19uYmxrc2VuYWJsZWQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfQ09ORl9ICisjaW5jbHVkZSA8c3lzL2NvbmYuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3Rfc3dkZXZ0X3N3X25ibGtzZW5hYmxlZCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9TV0RFVlRfU1dfTkJMS1NFTkFCTEVEIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3QgdGNwc3RhdAorIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdGNwc3RhdCIgInRjcF9yY3ZtZW1kcm9wIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF90Y3BzdGF0X3RjcF9yY3ZtZW1kcm9wIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdGNwc3RhdF90Y3BfcmN2bWVtZHJvcCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9UQ1BTVEFUX1RDUF9SQ1ZNRU1EUk9QIDEKK19BQ0VPRgorCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3QgdG0KKyMgICBMaWJyYXJ5OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdG0iICJ0bV9nbXRvZmYiICJhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX2dtdG9mZiIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3RtX3RtX2dtdG9mZiIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYgMQorX0FDRU9GCisKKworZmkKKworCisjICAgICAgIGV4dGVybiB0aW1lem9uZQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBleHRlcm4gdGltZXpvbmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZXh0ZXJuIHRpbWV6b25lLi4uICIgPiY2OyB9CitjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKLQotI2luY2x1ZGUgPG9wZW5zc2wvZGVzLmg+Ci0KKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKIAogaW50CiBtYWluICgpCiB7CiAKLXN0cnVjdCBkZXNfa3Nfc3RydWN0IHRlc3RpdDsKLXRlc3RpdC53ZWFrX2tleSAkZGVmaW5laXQ7CisgIHJldHVybiB0aW1lem9uZTsKIAogICA7CiAgIHJldHVybiAwOwogfQogX0FDRU9GCi1ybSAtZiBjb25mdGVzdC4kYWNfb2JqZXh0Ci1pZiB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY19jb21waWxlXCIiKSA+JjUKLSAgKGV2YWwgJGFjX2NvbXBpbGUpIDI+Y29uZnRlc3QuZXIxCi0gIGFjX3N0YXR1cz0kPwotICBncmVwIC12ICdeICorJyBjb25mdGVzdC5lcjEgPmNvbmZ0ZXN0LmVycgotICBybSAtZiBjb25mdGVzdC5lcjEKLSAgY2F0IGNvbmZ0ZXN0LmVyciA+JjUKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAteiAiJGFjX2Nfd2Vycm9yX2ZsYWciCi0JCQkgfHwgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVycicKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfSAmJgotCSB7IGFjX3RyeT0ndGVzdCAtcyBjb25mdGVzdC4kYWNfb2JqZXh0JwotICB7IChldmFsIGVjaG8gIiRhc19tZTokTElORU5POiBcIiRhY190cnlcIiIpID4mNQotICAoZXZhbCAkYWNfdHJ5KSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9OyB9OyB0aGVuCi0gIGV2YWwgIiR7YWNfc2FmZV9hbGx9PXllcyIKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9USU1FWk9ORV9WQVJJQUJMRSAxIiA+PmNvbmZkZWZzLmgKKworCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiY1Ci1zZWQgJ3MvXi98IC8nIGNvbmZ0ZXN0LiRhY19leHQgPiY1CiAKLWV2YWwgIiR7YWNfc2FmZV9hbGx9PW5vIgotZmkKLXJtIC1mIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQogCiBmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKIAorIyAgICAgICBzdHJ1Y3QgdGltZXpvbmUKKyMgICBMaWJyYXJ5OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdGltZXpvbmUiICJ0el9kc3R0aW1lIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF90aW1lem9uZV90el9kc3R0aW1lIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKIAotaWYgZXZhbCAidGVzdCBcIngkYGVjaG8gJHthY19zYWZlX2FsbH1gXCIgPSBcInh5ZXNcIiI7IHRoZW4KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogeWVzIiA+JjUKLWVjaG8gIiR7RUNIT19UfXllcyIgPiY2Ci0gIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgJGFjX3VjX2RlZmluZSAxCisjaWZkZWYgSEFWRV9TWVNfVElNRUJfSAorIyBpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbmRpZgorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdGltZXpvbmVfdHpfZHN0dGltZSIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9USU1FWk9ORV9UWl9EU1RUSU1FIDEKIF9BQ0VPRgogCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3QgdWRwc3RhdAorIyAgIEFnZW50OgorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdWRwc3RhdCIgInVkcHNfZGlzY2FyZCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX2Rpc2NhcmQiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX2Rpc2NhcmQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0RJU0NBUkQgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHVkcHN0YXQiICJ1ZHBzX2Z1bGxzb2NrIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfZnVsbHNvY2siICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX2Z1bGxzb2NrIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19GVUxMU09DSyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdWRwc3RhdCIgInVkcHNfbm9wb3J0IiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfbm9wb3J0IiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19ub3BvcnQiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgdWRwc3RhdCIgInVkcHNfbm9wb3J0YmNhc3QiICJhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19ub3BvcnRiY2FzdCIgIgorICAgICRhY19pbmNsdWRlc19kZWZhdWx0CisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfbm9wb3J0YmNhc3QiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVEJDQVNUIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCB1ZHBzdGF0IiAidWRwc19pcGFja2V0cyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX2lwYWNrZXRzIiAiCisgICAgJGFjX2luY2x1ZGVzX2RlZmF1bHQKKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3VkcHN0YXRfdWRwc19pcGFja2V0cyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfSVBBQ0tFVFMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IHVkcHN0YXQiICJ1ZHBzX29wYWNrZXRzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF91ZHBzdGF0X3VkcHNfb3BhY2tldHMiICIKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9ICisjaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfdWRwc3RhdF91ZHBzX29wYWNrZXRzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19PUEFDS0VUUyAxCitfQUNFT0YKKworCitmaQorCisKKworCisjIworIyAgIGlmbmV0LXJlbGF0ZWQgY2hlY2tzOgorIyMKKworIyAgICAgICBEb2VzICJzdHJ1Y3QgaWZuZXQiIG5lZWQgX0tFUk5FTCBkZWZpbmVkPyAgICAgICAoSXJpeCkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX0tFUk5FTCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgX0tFUk5FTCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogbm8iID4mNQotZWNobyAiJHtFQ0hPX1R9bm8iID4mNgorICBhY19jdl9JRk5FVF9ORUVEU19LRVJORUw9dW5rbm93bgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPW5vCiBmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA9IHVua25vd24gOyB0aGVuCisgICAgICAgICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNkZWZpbmUgX0tFUk5FTCAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPXllcworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorICAgICAgICAgZmkKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPiY2OyB9CisKK2lmIHRlc3QgIngkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMIiA9ICJ4eWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyAgICAgICBEb2VzICJzdHJ1Y3QgaWZuZXQiIG5lZWQgX0tFUk5FTF9TVFJVQ1RVUkVTIGRlZmluZWQ/ICAgICAgIChEcmFnb25GbHkgMykKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgaWYgX0tFUk5FTF9TVFJVQ1RVUkVTIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBpZiBfS0VSTkVMX1NUUlVDVFVSRVMgbmVlZHMgdG8gYmUgZGVmaW5lZCBmb3IgaWZfbXR1Li4uICIgPiY2OyB9CitpZiAke2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVM9dW5rbm93bgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVM9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyIgPSB1bmtub3duIDsgdGhlbgorICAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKK3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVM9eWVzCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisgICAgICAgICBmaQorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMiID4mNQorJGFzX2VjaG8gIiRhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyIgPiY2OyB9CisKK2lmIHRlc3QgIngkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMiID0gInh5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKworIyAgICAgICBzdHJ1Y3QgaWZhZGRyCisjICAgTm90LVVzZWQ6CisjCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZmFkZHIiICJpZmFfbmV4dCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZhZGRyX2lmYV9uZXh0IiAiCisKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisKKyAgICAkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmYWRkcl9pZmFfbmV4dCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRkFERFJfSUZBX05FWFQgMQorX0FDRU9GCiAKIAogZmkKIAotIyBhdHRlbXB0IHRvIGZpZ3VyZSBvdXQgaWYgc3lzY3RsIGlzIHVzYWJsZQogCisjICAgICAgIHN0cnVjdCBpZm5ldAorIyAgICAgICAgIChCcm9rZW4gb24gRnJlZUJTRCAtICNkZWZpbmUnZCBpbiA8bmV0L2lmLmg+KQorIyAgIEFnZW50OiAgICg/b3IgTm90LVVzZWQ/KQorIworYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9hZGRybGlzdCIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYWRkcmxpc3QiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9hZGRybGlzdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSTElTVCAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9hZGRyaGVhZC50cWhfZmlyc3QiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2FkZHJoZWFkX3RxaF9maXJzdCIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2FkZHJoZWFkX3RxaF9maXJzdCIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSSEVBRF9UUUhfRklSU1QgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfYmF1ZHJhdGUiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2JhdWRyYXRlIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfYmF1ZHJhdGUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9iYXVkcmF0ZV9pZnNfdmFsdWUiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9iYXVkcmF0ZV9pZnNfdmFsdWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2lieXRlcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfaWJ5dGVzIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfaWJ5dGVzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lCWVRFUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9pbWNhc3RzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9pbWNhc3RzIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfaW1jYXN0cyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JTUNBU1RTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX2lxZHJvcHMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2lxZHJvcHMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9pcWRyb3BzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lRRFJPUFMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfbGFzdGNoYW5nZS50dl9zZWMiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX2xhc3RjaGFuZ2VfdHZfc2VjIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbGFzdGNoYW5nZV90dl9zZWMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfbGFzdGNoYW5nZS50dl9uc2VjIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9sYXN0Y2hhbmdlX3R2X25zZWMiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9sYXN0Y2hhbmdlX3R2X25zZWMiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9OU0VDIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX210dSIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbXR1IiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbXR1IiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX01UVSAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9ub3Byb3RvIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9ub3Byb3RvIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfbm9wcm90byIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9OT1BST1RPIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX29ieXRlcyIgImFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfb2J5dGVzIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfb2J5dGVzIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09CWVRFUyAxCitfQUNFT0YKKworCitmaQorYWNfZm5fY19jaGVja19tZW1iZXIgIiRMSU5FTk8iICJzdHJ1Y3QgaWZuZXQiICJpZl9vbWNhc3RzIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9vbWNhc3RzIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfb21jYXN0cyIgPSB4eWVzOyB0aGVuIDoKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PTUNBU1RTIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX3NwZWVkIiAiYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl9zcGVlZCIgIgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuIFwiZW5cIiBvciBcImxvXCIgKi8KKwlzaG9ydAlpZl91bml0OwkJLyogc3ViLXVuaXQgZm9yIGxvd2VyIGxldmVsIGRyaXZlciAqLworCXNob3J0CWlmX210dTsJCQkvKiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0ICovCisJc2hvcnQJaWZfZmxhZ3M7CQkvKiB1cC9kb3duLCBicm9hZGNhc3QsIGV0Yy4gKi8KKwlpbnQJaWZfbWV0cmljOwkJLyogcm91dGluZyBtZXRyaWMgKGV4dGVybmFsIG9ubHkpICovCisJY2hhciAgICBpZl9od2FkZHIgWzZdOwkJLyogZXRoZXJuZXQgYWRkcmVzcyAqLworCWludAlpZl90eXBlOwkJLyogaW50ZXJmYWNlIHR5cGU6IDE9Z2VuZXJpYywKKwkJCQkJICAgMjg9c2xpcCwgZXRoZXI9NiwgbG9vcGJhY2s9MjQgKi8KKwlpbnQJaWZfc3BlZWQ7CQkvKiBpbnRlcmZhY2Ugc3BlZWQ6IGluIGJpdHMvc2VjICovCisKKwlzdHJ1Y3Qgc29ja2FkZHIgaWZfYWRkcjsJLyogaW50ZXJmYWNlJ3MgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpZnVfYnJvYWRhZGRyOwkvKiBicm9hZGNhc3QgYWRkcmVzcyAqLworCXN0cnVjdCBzb2NrYWRkciBpYV9zdWJuZXRtYXNrOyAJLyogaW50ZXJmYWNlJ3MgbWFzayAqLworCisJc3RydWN0CWlmcXVldWUgeworCQlpbnQJaWZxX2xlbjsKKwkJaW50CWlmcV9kcm9wczsKKwl9IGlmX3NuZDsJCQkvKiBvdXRwdXQgcXVldWUgKi8KKwlpbnQJaWZfaWJ5dGVzOwkJLyogb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pcGFja2V0czsJCS8qIHBhY2tldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2llcnJvcnM7CQkvKiBpbnB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisgICAgICAgIGludCAgICAgaWZfaXFkcm9wczsgICAgICAgICAgICAgLyogaW5wdXQgcXVldWUgb3ZlcnJ1bnMgKi8KKwlpbnQJaWZfb2J5dGVzOwkJLyogb2N0ZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29wYWNrZXRzOwkJLyogcGFja2V0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vZXJyb3JzOwkJLyogb3V0cHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfY29sbGlzaW9uczsJCS8qIGNvbGxpc2lvbnMgb24gY3NtYSBpbnRlcmZhY2VzICovCisvKiBlbmQgc3RhdGlzdGljcyAqLworCXN0cnVjdAlpZm5ldCAqaWZfbmV4dDsKK307CisjZW5kaWYKKworIgoraWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX3NwZWVkIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1NQRUVEIDEKK19BQ0VPRgorCisKK2ZpCithY19mbl9jX2NoZWNrX21lbWJlciAiJExJTkVOTyIgInN0cnVjdCBpZm5ldCIgImlmX3R5cGUiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX3R5cGUiICIKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19RVUVVRV9ICisjaW5jbHVkZSA8c3lzL3F1ZXVlLmg+CisjZW5kaWYKKyNpZmRlZiBsaW51eAorc3RydWN0IGlmbmV0IHsKKwljaGFyCSppZl9uYW1lOwkJLyogbmFtZSwgZS5nLiBcImVuXCIgb3IgXCJsb1wiICovCisJc2hvcnQJaWZfdW5pdDsJCS8qIHN1Yi11bml0IGZvciBsb3dlciBsZXZlbCBkcml2ZXIgKi8KKwlzaG9ydAlpZl9tdHU7CQkJLyogbWF4aW11bSB0cmFuc21pc3Npb24gdW5pdCAqLworCXNob3J0CWlmX2ZsYWdzOwkJLyogdXAvZG93biwgYnJvYWRjYXN0LCBldGMuICovCisJaW50CWlmX21ldHJpYzsJCS8qIHJvdXRpbmcgbWV0cmljIChleHRlcm5hbCBvbmx5KSAqLworCWNoYXIgICAgaWZfaHdhZGRyIFs2XTsJCS8qIGV0aGVybmV0IGFkZHJlc3MgKi8KKwlpbnQJaWZfdHlwZTsJCS8qIGludGVyZmFjZSB0eXBlOiAxPWdlbmVyaWMsCisJCQkJCSAgIDI4PXNsaXAsIGV0aGVyPTYsIGxvb3BiYWNrPTI0ICovCisJaW50CWlmX3NwZWVkOwkJLyogaW50ZXJmYWNlIHNwZWVkOiBpbiBiaXRzL3NlYyAqLworCisJc3RydWN0IHNvY2thZGRyIGlmX2FkZHI7CS8qIGludGVyZmFjZSdzIGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWZ1X2Jyb2FkYWRkcjsJLyogYnJvYWRjYXN0IGFkZHJlc3MgKi8KKwlzdHJ1Y3Qgc29ja2FkZHIgaWFfc3VibmV0bWFzazsgCS8qIGludGVyZmFjZSdzIG1hc2sgKi8KKworCXN0cnVjdAlpZnF1ZXVlIHsKKwkJaW50CWlmcV9sZW47CisJCWludAlpZnFfZHJvcHM7CisJfSBpZl9zbmQ7CQkJLyogb3V0cHV0IHF1ZXVlICovCisJaW50CWlmX2lieXRlczsJCS8qIG9jdGV0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaXBhY2tldHM7CQkvKiBwYWNrZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLworCWludAlpZl9pZXJyb3JzOwkJLyogaW5wdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworICAgICAgICBpbnQgICAgIGlmX2lxZHJvcHM7ICAgICAgICAgICAgIC8qIGlucHV0IHF1ZXVlIG92ZXJydW5zICovCisJaW50CWlmX29ieXRlczsJCS8qIG9jdGV0cyBzZW50IG9uIGludGVyZmFjZSAqLworCWludAlpZl9vcGFja2V0czsJCS8qIHBhY2tldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb2Vycm9yczsJCS8qIG91dHB1dCBlcnJvcnMgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2NvbGxpc2lvbnM7CQkvKiBjb2xsaXNpb25zIG9uIGNzbWEgaW50ZXJmYWNlcyAqLworLyogZW5kIHN0YXRpc3RpY3MgKi8KKwlzdHJ1Y3QJaWZuZXQgKmlmX25leHQ7Cit9OworI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfbWVtYmVyX3N0cnVjdF9pZm5ldF9pZl90eXBlIiA9IHh5ZXM7IHRoZW4gOgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1RZUEUgMQorX0FDRU9GCisKKworZmkKK2FjX2ZuX2NfY2hlY2tfbWVtYmVyICIkTElORU5PIiAic3RydWN0IGlmbmV0IiAiaWZfeG5hbWUiICJhY19jdl9tZW1iZXJfc3RydWN0X2lmbmV0X2lmX3huYW1lIiAiCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWZkZWYgbGludXgKK3N0cnVjdCBpZm5ldCB7CisJY2hhcgkqaWZfbmFtZTsJCS8qIG5hbWUsIGUuZy4gXCJlblwiIG9yIFwibG9cIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorCisiCitpZiB0ZXN0ICJ4JGFjX2N2X21lbWJlcl9zdHJ1Y3RfaWZuZXRfaWZfeG5hbWUiID0geHllczsgdGhlbiA6CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUgMQorX0FDRU9GCisKKworZmkKKworCisKKyMgQ2hlY2sgZm9yIEJTRCA0LjMgdnMgNC40IHN0cnVjdCBydGVudHJ5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHR5cGUgb2YgcnRlbnRyeSBzdHJ1Y3R1cmUiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgdHlwZSBvZiBydGVudHJ5IHN0cnVjdHVyZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9SVEVOVFJZX1RZUEUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorCisgICAgICAgICMgQlNEIDQuNCBjb21wYXRpYmxlIHN0cnVjdHVyZQorICAgICAgICAjICAgICgncnRfbm9kZXMnIGFycmF5KQorICAgICAgICAjCisgICAgICAgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjdW5kZWYgS0VSTkVMCisjdW5kZWYgX0tFUk5FTAorI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgorCitpbnQKK21haW4gKCkKK3sKKworCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCisjZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5CisjZW5kaWYKKworICBzdHJ1Y3QgcnRlbnRyeSBydDsKKyAgcnQucnRfbm9kZXNbMF0ucm5fZmxhZ3MgPSAxOworICBydC5ydF9kc3Q7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjQiCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCisgICAgICAgICMgQlNEIDQuMyBjb21wYXRpYmxlIHN0cnVjdHVyZQorICAgICAgICAjICAgICgncnRfaGFzaCcpCisgICAgICAgICMKKyAgICAgICAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisKK2ludAorbWFpbiAoKQoreworCisKK3N0cnVjdCBydGVudHJ5IHJ0OworcnQucnRfaGFzaDsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuMyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KKyAgICAgICAgIyBOZWl0aGVyIEJTRCA0LjMgbm9yIDQuNCBjb21wYXRpYmxlIHN0cnVjdHVyZQorICAgICAgICAjCisgICAgICAgICAgICBhY19jdl9SVEVOVFJZX1RZUEU9InVua25vd24iCisgICAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X1JURU5UUllfVFlQRSIgPiY1CiskYXNfZWNobyAiJGFjX2N2X1JURU5UUllfVFlQRSIgPiY2OyB9CisKK2lmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4QlNELTQuNCI7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgUlRFTlRSWV80XzQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgICAgQ2hlY2sgZm9yIG9ydGVudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFscGhhKQorIworaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInh1bmtub3duIjsgdGhlbgorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIHN0cnVjdCBydGVudHJ5IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBzdHJ1Y3QgcnRlbnRyeS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9zdHJ1Y3RfcnRlbnRyeSs6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworI2RlZmluZSBLRVJORUwKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKworX0FDRU9GCitpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CisgICRFR1JFUCAib3J0ZW50cnkiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6CisgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PW9ydGVudHJ5CitlbHNlCisgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PXJ0ZW50cnkKK2ZpCitybSAtZiBjb25mdGVzdCoKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA9ICJ4cnRlbnRyeSIgOyB0aGVuCisgICAgICAgICAgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9InJ0ZW50cnkiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0ib3J0ZW50cnkiCisgICAgICAgIGZpCisKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA+JjUKKyRhc19lY2hvICIkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID4mNjsgfQorZWxzZQorICAgIFJURU5UUllfVFlQRT0icnRlbnRyeSIKKyAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKK2ZpCisKK2lmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiID0gIngiOyB0aGVuCisgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9cnRlbnRyeQorZmkKKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBSVEVOVFJZIHN0cnVjdCAke2FjX2N2X3N0cnVjdF9ydGVudHJ5fQorX0FDRU9GCisKKworCisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIE9wZXJhdGluZy1TeXN0ZW0gY2hhcmFjdGVyaXN0aWNzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjCURldGVybWluZSBob3cgdG8gdGVzdCBmb3IgY2hhcmFjdGVyIGRldmljZXMKKyMJW1dlIGFzc3VtZSB0aGF0IC9kZXYvbnVsbCBkb2VzIGFjdHVhbGx5IGV4aXN0IV0KKyMKK2lmIHRlc3QgLWMgL2Rldi9udWxsOyB0aGVuCisgICAgQ0RFVl9URVNUX0ZMQUc9Ii1jIgorZWxpZiB0ZXN0IC1mIC9kZXYvbnVsbDsgdGhlbgorICAgIENERVZfVEVTVF9GTEFHPSItZiIKK2Vsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IENhbid0IHJlbGlhYmx5IGRldGVjdCBjaGFyYWN0ZXIgZGV2aWNlcyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW4ndCByZWxpYWJseSBkZXRlY3QgY2hhcmFjdGVyIGRldmljZXMiID4mMjt9CisgICAgIyBJcyBpdCBhY3R1YWxseSBzZW5zaWJsZSB0byBmYWxsIGJhY2sgb24gInRlc3QgLWYiID8KKyAgICBDREVWX1RFU1RfRkxBRz0iLWYiCitmaQorCisjICAgICAgIEtlcm5lbCBMb2NhdGlvbgorIwkgICAgdXNlZCBpbiBsaWJyYXJ5L2FnZW50CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzeXN0ZW0ga2VybmVsIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzeXN0ZW0ga2VybmVsLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X0tFUk5FTF9MT0MrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBhY19jdl9LRVJORUxfTE9DPSJ1bmtub3duIgorICAgIGZvciBpIGluIC92bXVuaXggL2hwLXV4IC9zdGFuZC92bXVuaXggL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC9uZXRic2QgL3VuaXggL2tlcm5lbCAvYnNkIC9tYWNoX2tlcm5lbCAvYm9vdC9rZXJuZWwva2VybmVsCisgICAgZG8KKyAgICAgICAgaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgJGk7IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X0tFUk5FTF9MT0M9IiRpIgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZpCisgICAgZG9uZQorICAgICMKKyAgICAjIEluIHByaW5jaXBsZSwgdGhpcyB0ZXN0IGlzIG1lYW50IHRvIHByb3ZpZGUgYSBkZWZhdWx0IHBhdGggdG8gdGhlIGtlcm5lbAorICAgICMgSW4gcHJhY3RpY2UsIHRoZSB0ZXN0IGlzIGJyb2tlbiBhbmQgdGhlIGtlcm5lbCBwYXRoIGlzIHNldCB0byAidW5rbm93biIKKyAgICAjCisgICAgIyBOb3RlIHRoYXQgb24gY2VydGFpbiBzeXN0ZW1zIChlLmcuIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyksCisgICAgIyAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIHByZWRpY3QgdGhlIG5hbWUgb2YgdGhlIGtlcm5lbCwKKyAgICAjICAgIHBhcnRpY3VsYXJseSBpZiBpdCBpbmNsdWRlcyB0aGUga2VybmVsIHZlcnNpb24sIGFyY2hpdGVjdHVyZSwgZXRjCisgICAgIworICAgICMgU2luY2UgdGhpcyBkZWZhdWx0IHdpbGwgbmV2ZXIgYWN0dWFsbHkgYmUgdXNlZCwgdGhlbiBkb24ndCB0cnkgdG8gc2V0IGl0CisgICAgIworICAgIGlmIHRlc3QgJGkgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBDYW4ndCBmaW5kIHN5c3RlbSBrZXJuZWwuLi4gaG9wZWZ1bGx5IHRoaXMgd29uJ3QgYmUgbmVlZGVkISIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW4ndCBmaW5kIHN5c3RlbSBrZXJuZWwuLi4gaG9wZWZ1bGx5IHRoaXMgd29uJ3QgYmUgbmVlZGVkISIgPiYyO30KKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9LRVJORUxfTE9DIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfS0VSTkVMX0xPQyIgPiY2OyB9CisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgS0VSTkVMX0xPQyAiJGFjX2N2X0tFUk5FTF9MT0MiCitfQUNFT0YKKworCisKKyMgICAgICAgL2Rldi9rbWVtIGV4aXN0ZW5jZQorIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciAvZGV2L2ttZW0iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIC9kZXYva21lbS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9IQVZFX0tNRU0rOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAvZGV2L2ttZW07IHRoZW4KKyAgICAgICAgYWNfY3ZfSEFWRV9LTUVNPSIvZGV2L2ttZW0iCisgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfSEFWRV9LTUVNIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfSEFWRV9LTUVNIiA+JjY7IH0KKyMKKyMgIE5vdGUgdGhhdCBpdCdzIE9LIGlmIHRoaXMgZGV2aWNlIGlzIG5vdCBmb3VuZAorIworaWYgdGVzdCAieCRhY19jdl9IQVZFX0tNRU0iID0gIngvZGV2L2ttZW0iOyB0aGVuCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9LTUVNICIkYWNfY3ZfSEFWRV9LTUVNIgorX0FDRU9GCisKK2ZpCisKKworIyAgICAgICBTd2FwIGRldmljZSBMb2NhdGlvbgorIyAgICAgICAgICAgKC9kZXYvZG1lbSBvciAvZGV2L2RydW0pCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBsb2NhdGlvbiBvZiBzd2FwIGRldmljZS4uLiAiID4mNjsgfQoraWYgJHthY19jdl9ETUVNX0xPQys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIGlmIHRlc3QgJENERVZfVEVTVF9GTEFHIC9kZXYvZG1lbTsgdGhlbgorICAgICAgICBhY19jdl9ETUVNX0xPQz0iL2Rldi9kbWVtIgorICAgIGVsaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgL2Rldi9kcnVtOyB0aGVuCisgICAgICAgIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RydW0iCisgICAgZWxzZQorICAgICAgICBhY19jdl9ETUVNX0xPQz0ibm9uZSIKKyAgICBmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9ETUVNX0xPQyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X0RNRU1fTE9DIiA+JjY7IH0KKyMKKyMgIE5vdGUgdGhhdCBpdCdzIE9LIGlmIHRoaXMgZGV2aWNlIGlzIG5vdCBmb3VuZAorIworaWYgdGVzdCAieCRhY19jdl9ETUVNX0xPQyIgIT0gInhub25lIjsgdGhlbgorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIERNRU1fTE9DICIkYWNfY3ZfRE1FTV9MT0MiCitfQUNFT0YKKworZmkKKworCisjICAgICAgIE1vdW50IHRhYmxlIExvY2F0aW9uCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIG1vdW50IHRhYmxlIGxvY2F0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9FVENfTU5UVEFCKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgYWNfY3ZfRVRDX01OVFRBQj0iJHt3aXRoX21udHRhYjotdW5rbm93bn0iCisgICAgaWYgdGVzdCAiJGFjX2N2X0VUQ19NTlRUQUIiID0gInVua25vd24iOyB0aGVuCisgICAgICAgIGZvciBpIGluIC9ldGMvbW50dGFiIC9ldGMvbXRhYiAvZXRjL2ZpbGVzeXN0ZW1zIC9kZXYvbW50dGFiCisgICAgICAgIGRvCisgICAgICAgICAgICBpZiB0ZXN0IC1mICRpIC1vIC1jICRpOyB0aGVuCisgICAgICAgICAgICAgICAgYWNfY3ZfRVRDX01OVFRBQj0iJGkiCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZmkKKworZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfRVRDX01OVFRBQiIgPiY1CiskYXNfZWNobyAiJGFjX2N2X0VUQ19NTlRUQUIiID4mNjsgfQorCitjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEVUQ19NTlRUQUIgIiRhY19jdl9FVENfTU5UVEFCIgorX0FDRU9GCisKKworCisjICAgICAgIFByaW50aW5nCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKKyMgRXh0cmFjdCB0aGUgZmlyc3Qgd29yZCBvZiAibHBzdGF0Iiwgc28gaXQgY2FuIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJncy4KK3NldCBkdW1teSBscHN0YXQ7IGFjX3dvcmQ9JDIKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yICRhY193b3JkIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciAkYWNfd29yZC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wYXRoX0xQU1RBVF9QQVRIKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2FzZSAkTFBTVEFUX1BBVEggaW4KKyAgW1xcL10qIHwgPzpbXFwvXSopCisgIGFjX2N2X3BhdGhfTFBTVEFUX1BBVEg9IiRMUFNUQVRfUEFUSCIgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3Qgd2l0aCBhIHBhdGguCisgIDs7CisgICopCisgIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICBmb3IgYWNfZXhlY19leHQgaW4gJycgJGFjX2V4ZWN1dGFibGVfZXh0ZW5zaW9uczsgZG8KKyAgaWYgeyB0ZXN0IC1mICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IiAmJiAkYXNfdGVzdF94ICIkYXNfZGlyLyRhY193b3JkJGFjX2V4ZWNfZXh0IjsgfTsgdGhlbgorICAgIGFjX2N2X3BhdGhfTFBTVEFUX1BBVEg9IiRhc19kaXIvJGFjX3dvcmQkYWNfZXhlY19leHQiCisgICAgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZm91bmQgJGFzX2Rpci8kYWNfd29yZCRhY19leGVjX2V4dCIgPiY1CisgICAgYnJlYWsgMgorICBmaQorZG9uZQorICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgOzsKK2VzYWMKK2ZpCitMUFNUQVRfUEFUSD0kYWNfY3ZfcGF0aF9MUFNUQVRfUEFUSAoraWYgdGVzdCAtbiAiJExQU1RBVF9QQVRIIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJExQU1RBVF9QQVRIIiA+JjUKKyRhc19lY2hvICIkTFBTVEFUX1BBVEgiID4mNjsgfQorZWxzZQorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KK2ZpCisKKworaWYgdGVzdCB4JExQU1RBVF9QQVRIICE9IHg7IHRoZW4KKworY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBMUFNUQVRfUEFUSCAiJExQU1RBVF9QQVRIIgorX0FDRU9GCisKKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9MUFNUQVQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCitpZiB0ZXN0IC1yIC9ldGMvcHJpbnRjYXA7IHRoZW4KKworJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9QUklOVENBUCAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworCisjICAgICAgIENoZWNrIHBzIGFyZ3MKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgY29ycmVjdCBmbGFncyB0byBwcyIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgY29ycmVjdCBmbGFncyB0byBwcy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9wc19mbGFncys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CitlbHNlCisKK2lmIHRlc3QgImAoJFBTUFJPRyAtZSAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWVsIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWVsIgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iYWN4IgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCitlbGlmIHRlc3QgImAoJFBTUFJPRyAtbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSAyPiYxKSB8ICRFR1JFUCAnIHBzICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIGF4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iYXgiCitlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZSIKK2VsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWUiCitlbHNlCisgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gZGV0ZXJtaW5lIHZhbGlkIHBzIGZsYWdzLi4uICBkZWZhdWx0aW5nLi4uIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBkZXRlcm1pbmUgdmFsaWQgcHMgZmxhZ3MuLi4gIGRlZmF1bHRpbmcuLi4iID4mMjt9CisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCitmaQorCitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9wc19mbGFncyIgPiY1CiskYXNfZWNobyAiJGFjX2N2X3BzX2ZsYWdzIiA+JjY7IH0KKworUFNDTUQ9IiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIgorCisKK2NhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgUFNDTUQgIiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIgorX0FDRU9GCisKKworCisjIworIyAgIFN5c3RlbS9Db21waWxhdGlvbi1yZWxhdGVkCisjIworCisjICAgICAgIFRlc3QgZm9yIFNJR0hVUAorIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBTSUdIVVAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIFNJR0hVUC4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgoraW50CittYWluICgpCit7CityZXR1cm4gU0lHSFVQCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKyAgbmV0c25tcF9oYXZlX3NpZ2h1cD15ZXMKK2Vsc2UKKyAgbmV0c25tcF9oYXZlX3NpZ2h1cD1ubworCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJG5ldHNubXBfaGF2ZV9zaWdodXAiID4mNQorJGFzX2VjaG8gIiRuZXRzbm1wX2hhdmVfc2lnaHVwIiA+JjY7IH0KK2lmIHRlc3QgIngkbmV0c25tcF9oYXZlX3NpZ2h1cCIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfU0lHSFVQIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgICAgICAgQ2hlY2sgd2hldGhlciBzeXNjdGwoKSBpcyB1c2FibGUKKyMJICAgIHVzZWQgaW4gbGlicmFyeS9hZ2VudAorIwogaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0geWVzOyB0aGVuCi0gIHsgZWNobyAiJGFzX21lOiRMSU5FTk86IFdBUk5JTkc6IENhbid0IGNoZWNrIHN5c2N0bCwgbWFudWFsbHkgZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgaWYgcGxhdGZvcm0gc3VwcG9ydCBhdmFpbGFibGUiID4mNQotZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW4ndCBjaGVjayBzeXNjdGwsIG1hbnVhbGx5IGRlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIGlmIHBsYXRmb3JtIHN1cHBvcnQgYXZhaWxhYmxlIiA+JjI7fQorICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogQ2FuJ3QgY2hlY2sgc3lzY3RsLCBtYW51YWxseSBkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCBpZiBwbGF0Zm9ybSBzdXBwb3J0IGF2YWlsYWJsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiBDYW4ndCBjaGVjayBzeXNjdGwsIG1hbnVhbGx5IGRlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIGlmIHBsYXRmb3JtIHN1cHBvcnQgYXZhaWxhYmxlIiA+JjI7fQogZWxzZQotICBlY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgaWYgc3lzY3RsIGNhbiByZWFkIGtlcm5lbCBpbmZvcm1hdGlvbiIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIGlmIHN5c2N0bCBjYW4gcmVhZCBrZXJuZWwgaW5mb3JtYXRpb24uLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGlmIHN5c2N0bCBjYW4gcmVhZCBrZXJuZWwgaW5mb3JtYXRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc3lzY3RsIGNhbiByZWFkIGtlcm5lbCBpbmZvcm1hdGlvbi4uLiAiID4mNjsgfQoraWYgJHthY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKIGVsc2UKLSAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4KKyAgaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgogICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vCiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKQEAgLTQ5MDk2LDYzICsyOTM0Myw1MCBAQAogfQogCiBfQUNFT0YKLXJtIC1mIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotaWYgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfbGlua1wiIikgPiY1Ci0gIChldmFsICRhY19saW5rKSAyPiY1Ci0gIGFjX3N0YXR1cz0kPwotICBlY2hvICIkYXNfbWU6JExJTkVOTzogXCQ/ID0gJGFjX3N0YXR1cyIgPiY1Ci0gIChleGl0ICRhY19zdGF0dXMpOyB9ICYmIHsgYWNfdHJ5PScuL2NvbmZ0ZXN0JGFjX2V4ZWV4dCcKLSAgeyAoZXZhbCBlY2hvICIkYXNfbWU6JExJTkVOTzogXCIkYWNfdHJ5XCIiKSA+JjUKLSAgKGV2YWwgJGFjX3RyeSkgMj4mNQotICBhY19zdGF0dXM9JD8KLSAgZWNobyAiJGFzX21lOiRMSU5FTk86IFwkPyA9ICRhY19zdGF0dXMiID4mNQotICAoZXhpdCAkYWNfc3RhdHVzKTsgfTsgfTsgdGhlbgoraWYgYWNfZm5fY190cnlfcnVuICIkTElORU5PIjsgdGhlbiA6CiAgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9eWVzCiBlbHNlCi0gIGVjaG8gIiRhc19tZTogcHJvZ3JhbSBleGl0ZWQgd2l0aCBzdGF0dXMgJGFjX3N0YXR1cyIgPiY1Ci1lY2hvICIkYXNfbWU6IGZhaWxlZCBwcm9ncmFtIHdhczoiID4mNQotc2VkICdzL14vfCAvJyBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vCitmaQorcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAorICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAorZmkKIAotKCBleGl0ICRhY19zdGF0dXMgKQotYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubwogZmkKLXJtIC1mIGNvcmUgKi5jb3JlIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0Ci1maQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA+JjYKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCIgPiY1CiskYXNfZWNobyAiJGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID4mNjsgfQogZmkKIAogaWYgdGVzdCAieCRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIDEKLV9BQ0VPRgorCiskYXNfZWNobyAiI2RlZmluZSBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIDEiID4+Y29uZmRlZnMuaAogCiBmaQogCisKKyMgICBDaGVjayB3aGV0aGVyIFRDUCB0aW1lciBjb25zdGFudHMgYXJlIGluZGVlZCBjb25zdGFudAorIyAgICAgICBvciBkZXBlbmQgb24gdGhlIGtlcm5lbCBjbG9jayB0aWNrICdoeicuICAgICAgICAoRnJlZUJTRCA0LngpCiAjCi0jIEluIEZyZWVCU0QgNC54LCB0aGUgVENQIHRpbWVyIGNvbnN0YW50cyBhcmVuJ3QuICBUaGV5IGFyZSBkZWZpbmVkCi0jIGluIHRlcm1zIG9mICdoeicsIHRoZSBrZXJuZWwgY2xvY2sgdGljay4gIEluIHRoaXMgY2FzZSwKLSMgd2UgbmVlZCB0byBoYXZlIGEgbG9jYWwgdmFyaWFibGUgJ2h6JyBpbiBzY29wZSBhbmQgc2V0IHRvIGEgdXNlZnVsCi0jIHZhbHVlIHdoZW5ldmVyIHdlIHVzZSBvbmUgb2YgdGhlc2UgY29uc3RhbnRzLgorIyAgICAgICBJZiB0aGUgbGF0dGVyLCB0aGVuIHdlIHdpbGwgbmVlZCB0byBoYXZlIGEgbG9jYWwKKyMgICAgICAgdmFyaWFibGUgJ2h6JyBkZWZpbmVkIGFuZCB3aXRoIGEgc3VpdGFibGUgdmFsdWUsCisjICAgICAgIHdoZW5ldmVyIHdlIHdhbnQgdG8gIHVzZSBvbmUgb25lIG9mIHRoZXNlICdjb25zdGFudHMnLgogIwotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIHdoZXRoZXIgVENQIHRpbWVycyBkZXBlbmQgb24gJ2h6JyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgVENQIHRpbWVycyBkZXBlbmQgb24gJ2h6Jy4uLiAkRUNIT19DIiA+JjYKLWlmIHRlc3QgIiR7YWNfY3ZfVENQVFZfTkVFRFNfSForc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKKyMgCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBUQ1AgdGltZXJzIGRlcGVuZCBvbiAnaHonIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgVENQIHRpbWVycyBkZXBlbmQgb24gJ2h6Jy4uLiAiID4mNjsgfQoraWYgJHthY19jdl9UQ1BUVl9ORUVEU19IWis6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2CiBlbHNlCi0gIGNhdCA+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgotLyogY29uZmRlZnMuaC4gICovCi1fQUNFT0YKLWNhdCBjb25mZGVmcy5oID4+Y29uZnRlc3QuJGFjX2V4dAotY2F0ID4+Y29uZnRlc3QuJGFjX2V4dCA8PF9BQ0VPRgorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCisKICNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgogVENQVFZfU1JUVERGTFQKIAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAiaHoiID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAkRUdSRVAgImh6IiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBhY19jdl9UQ1BUVl9ORUVEU19IWj15ZXMKIGVsc2UKICAgYWNfY3ZfVENQVFZfTkVFRFNfSFo9bm8KQEAgLTQ5MTYwLDE2ICsyOTM5NCwzNzYgQEAKIHJtIC1mIGNvbmZ0ZXN0KgogCiBmaQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X1RDUFRWX05FRURTX0haIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPiY2Cit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X1RDUFRWX05FRURTX0haIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfVENQVFZfTkVFRFNfSFoiID4mNjsgfQogCiBpZiB0ZXN0ICJ4JGFjX2N2X1RDUFRWX05FRURTX0haIiA9ICJ4eWVzIjsgdGhlbgotICBjYXQgPj5jb25mZGVmcy5oIDw8XF9BQ0VPRgotI2RlZmluZSBUQ1BUVl9ORUVEU19IWiAxCisKKyRhc19lY2hvICIjZGVmaW5lIFRDUFRWX05FRURTX0haIDEiID4+Y29uZmRlZnMuaAorCitmaQorCisKKyMgICBDaGVjayB3aGV0aGVyIElQIFJvdXRlIHRhYmxlIGlzIGNhY2hlZCAgICAgICAgICAgICAgKFNvbGFyaXMpCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK2Nhc2UgJHRhcmdldF9vcyBpbgorICBzb2xhcmlzKikKKyAgICAjICAgIEhlYWRlciBjaGVja3MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMgMi42LzcpCisgICAgIworICAgIGZvciBhY19oZWFkZXIgaW4gaW5ldC9jb21tb24uaAorZG8gOgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAiaW5ldC9jb21tb24uaCIgImFjX2N2X2hlYWRlcl9pbmV0X2NvbW1vbl9oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9pbmV0X2NvbW1vbl9oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfSU5FVF9DT01NT05fSCAxCiBfQUNFT0YKIAogZmkKIAorZG9uZQorCisgICAgZm9yIGFjX2hlYWRlciBpbiBpbmV0L2lwLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgImluZXQvaXAuaCIgImFjX2N2X2hlYWRlcl9pbmV0X2lwX2giICIkYWNfaW5jbHVkZXNfZGVmYXVsdAorCisjaWYgSEFWRV9TWVNfU1RSRUFNX0gKKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX0lORVRfQ09NTU9OX0gKKyNpbmNsdWRlIDxpbmV0L2NvbW1vbi5oPgorI2VuZGlmCisKKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX2luZXRfaXBfaCIgPSB4eWVzOyB0aGVuIDoKKyAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgorI2RlZmluZSBIQVZFX0lORVRfSVBfSCAxCitfQUNFT0YKKyBhY19pbmV0X2lwX2g9eWVzCitlbHNlCisgIGFjX2luZXRfaXBfaD1ubworZmkKKworZG9uZQorCisgICAgaWYgdGVzdCAkYWNfaW5ldF9pcF9oID0geWVzIDsgdGhlbgorICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBtaWIyX2lwUm91dGVFbnRyeV90IGluIGluZXQvbWliMi5oIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBtaWIyX2lwUm91dGVFbnRyeV90IGluIGluZXQvbWliMi5oLi4uICIgPiY2OyB9CitpZiAke2FjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3QrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZiBIQVZFX0lORVRfTUlCMl9ICisjaW5jbHVkZSA8aW5ldC9taWIyLmg+CisjZW5kaWYKKworaW50CittYWluICgpCit7CisKKyAgbWliMl9pcFJvdXRlRW50cnlfdCB0ZXN0aXQ7CisgIGlmKHNpemVvZih0ZXN0aXQpKQorICAgIHJldHVybigwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3Q9eWVzCitlbHNlCisgIGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3Q9bm8KK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKK2ZpCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3QiID4mNQorJGFzX2VjaG8gIiRhY19jdl9taWIyX2lwUm91dGVFbnRyeV90IiA+JjY7IH0KKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3QiID0gInh5ZXMiIDsgdGhlbgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIElSRV9DQUNIRSBpcyBkZWZpbmVkIGluIGluZXQvaXAuaCIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIElSRV9DQUNIRSBpcyBkZWZpbmVkIGluIGluZXQvaXAuaC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9pcmVfY2FjaGUrOn0gZmFsc2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKKyNpZiBIQVZFX0lORVRfSVBfSAorI2luY2x1ZGUgPGluZXQvaXAuaD4KKyNlbmRpZgorCitpbnQKK21haW4gKCkKK3sKKworICBpbnQgdGVzdGl0PUlSRV9DQUNIRTsKKyAgaWYodGVzdGl0KQorICAgIHJldHVybigwKTsKKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2lyZV9jYWNoZT15ZXMKK2Vsc2UKKyAgYWNfY3ZfaXJlX2NhY2hlPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRhY19jdl9pcmVfY2FjaGUiID4mNQorJGFzX2VjaG8gIiRhY19jdl9pcmVfY2FjaGUiID4mNjsgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhY19jdl9pcmVfY2FjaGU9bm8KKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2lyZV9jYWNoZSIgPSAieHllcyIgOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfREVGSU5FRF9JUkVfQ0FDSEUgLyoqLyIgPj5jb25mZGVmcy5oCisKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBJdCBzZWVtcyB0aGF0IHlvdSBoYXZlIGluZXQvaXAuaCwgYnV0IElSRV9DQUNIRSBpcyBub3QgZGVmaW5lZC4gXAorVGhhdCBtZWFucyB0aGF0IHlvdXIgcXVlcnkgdG8gaXBSb3V0ZSBNSUIgY291bGQgZ2VuZXJhdGUgb3ZlciAyMGsgcmVzdWx0cyEgXAorQW5kIHRoaXMgY2FuIGJlIHZlcnkgc2xvdy4iID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogSXQgc2VlbXMgdGhhdCB5b3UgaGF2ZSBpbmV0L2lwLmgsIGJ1dCBJUkVfQ0FDSEUgaXMgbm90IGRlZmluZWQuIFwKK1RoYXQgbWVhbnMgdGhhdCB5b3VyIHF1ZXJ5IHRvIGlwUm91dGUgTUlCIGNvdWxkIGdlbmVyYXRlIG92ZXIgMjBrIHJlc3VsdHMhIFwKK0FuZCB0aGlzIGNhbiBiZSB2ZXJ5IHNsb3cuIiA+JjI7fQorICAgICAgICBmaQorICAgIGZpICAgICAgICAgIyAidGVzdCAkYWNfaW5ldF9pcF9oID0geWVzIgorICAgIDs7Citlc2FjCisKKyMgICBDaGVjayB3aGV0aGVyIElQX1BLVElORk8gaXMgdXNhYmxlLgorIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBJUF9QS1RJTkZPICIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgSVBfUEtUSU5GTyAuLi4gIiA+JjY7IH0KK2lmICR7YWNfY3ZfaGF2ZV9pcF9wa3RpbmZvKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIHByaW50ZigpICovCisjaW5jbHVkZSA8c3RkbGliLmg+IC8qIG1hbGxvYygpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIG1lbXNldCgpICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworaW50CittYWluICgpCit7CisKKyAgICB2b2lkICpidWY7CisgICAgaW50IGxlbjsKKyAgICB2b2lkICpmcm9tOworICAgIHNvY2tsZW5fdCAqZnJvbWxlbjsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgY2hhciAqY21zZyA9IG1hbGxvYyhDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fcGt0aW5mbykpKTsKKyAgICBzdHJ1Y3QgY21zZ2hkciAqY207CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisKKyAgICBpb3YuaW92X2Jhc2UgPSBidWY7CisgICAgaW92Lmlvdl9sZW4gPSBsZW47CisKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7CisgICAgbXNnLm1zZ19uYW1lID0gZnJvbTsKKyAgICBtc2cubXNnX25hbWVsZW4gPSAqZnJvbWxlbjsKKyAgICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZy5tc2dfY29udHJvbCA9ICZjbXNnOworICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKworICAgIGZvciAoY20gPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbTsgY20gPSBDTVNHX05YVEhEUigmbXNnLCBjbSkpIHsKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1BLVElORk8pIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvKiBzcmMgPSAoc3RydWN0IGluX3BrdGluZm8gKilDTVNHX0RBVEEoY20pOworICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzOiAlczsgaW5kZXg6ICVkXG4iLCBpbmV0X250b2Eoc3JjLT5pcGlfYWRkciksCisJICAgICAgICAgICBzcmMtPmlwaV9pZmluZGV4KTsKKyAgICAgICAgfQorICAgIH0KKworICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9saW5rICIkTElORU5PIjsgdGhlbiA6CisgIGFjX2N2X2hhdmVfaXBfcGt0aW5mbz15ZXMKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvIiA+JjUKKyRhc19lY2hvICIkYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvIiA+JjY7IH0KK2lmIHRlc3QgeCRhY19jdl9oYXZlX2lwX3BrdGluZm8gPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSVBfUEtUSU5GTyAxIiA+PmNvbmZkZWZzLmgKKworZmkKKworIyAgIENoZWNrIHdoZXRoZXIgSVBfUkVDVkRTVEFERFIgaXMgdXNhYmxlLgorIworCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBJUF9SRUNWRFNUQUREUiAiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIElQX1JFQ1ZEU1RBRERSIC4uLiAiID4mNjsgfQoraWYgJHthY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gIC8qIHByaW50ZigpICovCisjaW5jbHVkZSA8c3RkbGliLmg+IC8qIG1hbGxvYygpICovCisjaW5jbHVkZSA8c3RyaW5nLmg+IC8qIG1lbXNldCgpICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworaW50CittYWluICgpCit7CisKKyAgICB2b2lkICpidWY7CisgICAgaW50IGxlbjsKKyAgICB2b2lkICpmcm9tOworICAgIHNvY2tsZW5fdCAqZnJvbWxlbjsKKworICAgIHN0cnVjdCBpb3ZlYyBpb3Y7CisgICAgY2hhciAqY21zZyA9IG1hbGxvYyhDTVNHX1NQQUNFKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKTsKKyAgICBzdHJ1Y3QgY21zZ2hkciAqY207CisgICAgc3RydWN0IG1zZ2hkciBtc2c7CisKKyAgICBpb3YuaW92X2Jhc2UgPSBidWY7CisgICAgaW92Lmlvdl9sZW4gPSBsZW47CisKKyAgICBtZW1zZXQoJm1zZywgMCwgc2l6ZW9mIG1zZyk7CisgICAgbXNnLm1zZ19uYW1lID0gZnJvbTsKKyAgICBtc2cubXNnX25hbWVsZW4gPSAqZnJvbWxlbjsKKyAgICBtc2cubXNnX2lvdiA9ICZpb3Y7CisgICAgbXNnLm1zZ19pb3ZsZW4gPSAxOworICAgIG1zZy5tc2dfY29udHJvbCA9ICZjbXNnOworICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKworICAgIGZvciAoY20gPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbTsgY20gPSBDTVNHX05YVEhEUigmbXNnLCBjbSkpIHsKKyAgICAgICAgaWYgKGNtLT5jbXNnX2xldmVsID09IElQUFJPVE9fSVAgJiYgY20tPmNtc2dfdHlwZSA9PSBJUF9SRUNWRFNUQUREUikgeworICAgICAgICAgICAgc3RydWN0IGluX2FkZHIqIHNyYyA9IChzdHJ1Y3QgaW5fYWRkciAqKUNNU0dfREFUQShjbSk7CisgICAgICAgICAgICBwcmludGYoIkFkZHJlc3M6ICVzXG4iLCBpbmV0X250b2Eoc3JjKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBhY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyPXllcworZWxzZQorICBhY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyPW5vCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkciIgPiY1CiskYXNfZWNobyAiJGFjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHIiID4mNjsgfQoraWYgdGVzdCB4JGFjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHIgPSB4eWVzOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfSVBfUkVDVkRTVEFERFIgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKK2NhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgorIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCisjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKKyMgc2NyaXB0cyBhbmQgY29uZmlndXJlIHJ1bnMsIHNlZSBjb25maWd1cmUncyBvcHRpb24gLS1jb25maWctY2FjaGUuCisjIEl0IGlzIG5vdCB1c2VmdWwgb24gb3RoZXIgc3lzdGVtcy4gIElmIGl0IGNvbnRhaW5zIHJlc3VsdHMgeW91IGRvbid0CisjIHdhbnQgdG8ga2VlcCwgeW91IG1heSByZW1vdmUgb3IgZWRpdCBpdC4KKyMKKyMgY29uZmlnLnN0YXR1cyBvbmx5IHBheXMgYXR0ZW50aW9uIHRvIHRoZSBjYWNoZSBmaWxlIGlmIHlvdSBnaXZlIGl0CisjIHRoZSAtLXJlY2hlY2sgb3B0aW9uIHRvIHJlcnVuIGNvbmZpZ3VyZS4KKyMKKyMgYGFjX2N2X2Vudl9mb28nIHZhcmlhYmxlcyAoc2V0IG9yIHVuc2V0KSB3aWxsIGJlIG92ZXJyaWRkZW4gd2hlbgorIyBsb2FkaW5nIHRoaXMgZmlsZSwgb3RoZXIgKnVuc2V0KiBgYWNfY3ZfZm9vJyB3aWxsIGJlIGFzc2lnbmVkIHRoZQorIyBmb2xsb3dpbmcgdmFsdWVzLgorCitfQUNFT0YKKworIyBUaGUgZm9sbG93aW5nIHdheSBvZiB3cml0aW5nIHRoZSBjYWNoZSBtaXNoYW5kbGVzIG5ld2xpbmVzIGluIHZhbHVlcywKKyMgYnV0IHdlIGtub3cgb2Ygbm8gd29ya2Fyb3VuZCB0aGF0IGlzIHNpbXBsZSwgcG9ydGFibGUsIGFuZCBlZmZpY2llbnQuCisjIFNvLCB3ZSBraWxsIHZhcmlhYmxlcyBjb250YWluaW5nIG5ld2xpbmVzLgorIyBVbHRyaXggc2ggc2V0IHdyaXRlcyB0byBzdGRlcnIgYW5kIGNhbid0IGJlIHJlZGlyZWN0ZWQgZGlyZWN0bHksCisjIGFuZCBzZXRzIHRoZSBoaWdoIGJpdCBpbiB0aGUgY2FjaGUgZmlsZSB1bmxlc3Mgd2UgYXNzaWduIHRvIHRoZSB2YXJzLgorKAorICBmb3IgYWNfdmFyIGluIGAoc2V0KSAyPiYxIHwgc2VkIC1uICdzL15cKFthLXpBLVpfXVthLXpBLVowLTlfXSpcKT0uKi9cMS9wJ2A7IGRvCisgICAgZXZhbCBhY192YWw9XCQkYWNfdmFyCisgICAgY2FzZSAkYWNfdmFsIGluICMoCisgICAgKiR7YXNfbmx9KikKKyAgICAgIGNhc2UgJGFjX3ZhciBpbiAjKAorICAgICAgKl9jdl8qKSB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IGNhY2hlIHZhcmlhYmxlICRhY192YXIgY29udGFpbnMgYSBuZXdsaW5lIiA+JjI7fSA7OworICAgICAgZXNhYworICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICBfIHwgSUZTIHwgYXNfbmwpIDs7ICMoCisgICAgICBCQVNIX0FSR1YgfCBCQVNIX1NPVVJDRSkgZXZhbCAkYWNfdmFyPSA7OyAjKAorICAgICAgKikgeyBldmFsICRhY192YXI9OyB1bnNldCAkYWNfdmFyO30gOzsKKyAgICAgIGVzYWMgOzsKKyAgICBlc2FjCisgIGRvbmUKKworICAoc2V0KSAyPiYxIHwKKyAgICBjYXNlICRhc19ubGAoYWNfc3BhY2U9JyAnOyBzZXQpIDI+JjFgIGluICMoCisgICAgKiR7YXNfbmx9YWNfc3BhY2U9XCAqKQorICAgICAgIyBgc2V0JyBkb2VzIG5vdCBxdW90ZSBjb3JyZWN0bHksIHNvIGFkZCBxdW90ZXM6IGRvdWJsZS1xdW90ZQorICAgICAgIyBzdWJzdGl0dXRpb24gdHVybnMgXFxcXCBpbnRvIFxcLCBhbmQgc2VkIHR1cm5zIFxcIGludG8gXC4KKyAgICAgIHNlZCAtbiBcCisJInMvJy8nXFxcXCcnL2c7CisJICBzL15cXChbXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSpcXCk9XFwoLipcXCkvXFwxPSdcXDInL3AiCisgICAgICA7OyAjKAorICAgICopCisgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgorICAgICAgc2VkIC1uICIvXltfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKj0vcCIKKyAgICAgIDs7CisgICAgZXNhYyB8CisgICAgc29ydAorKSB8CisgIHNlZCAnCisgICAgIC9eYWNfY3ZfZW52Xy9iIGVuZAorICAgICB0IGNsZWFyCisgICAgIDpjbGVhcgorICAgICBzL15cKFtePV0qXCk9XCguKlt7fV0uKlwpJC90ZXN0ICIke1wxK3NldH0iID0gc2V0IHx8ICYvCisgICAgIHQgZW5kCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCisgIGVsc2UKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQorICBmaQorZmkKK3JtIC1mIGNvbmZjYWNoZQorCiAjCiAjIGRlZmluZSB0aGUgYWdlbnQgbGlicmFyaWVzIHZhcmlhYmxlcwogIwpAQCAtNDkxNzgsNTAzICsyOTc3Miw0NCBAQAogCiAKIAotIwotIyBQcm9tcHQgZm9yIHZhcmlvdXMgYml0cyBvZiB1c2VyIGluZm9ybWF0aW9uCi0jCiAKLWlmIHRlc3QgIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIngiOyB0aGVuCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgd2hldGhlciB0byBwcm9tcHQgZm9yIHZhbHVlcyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nIHdoZXRoZXIgdG8gcHJvbXB0IGZvciB2YWx1ZXMuLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X2hhdmVfd2FybmVkK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCiAKLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWNhdCA8PCBFT0YKIAotCSAqKioqKioqKioqKioqKiBDb25maWd1cmF0aW9uIFNlY3Rpb24gKioqKioqKioqKioqKioKIAotCVlvdSBhcmUgYWJvdXQgdG8gYmUgcHJvbXB0ZWQgd2l0aCBhIHNlcmllcyBvZiBxdWVzdGlvbnMuICBBbnN3ZXIKLXRoZW0gY2FyZWZ1bGx5LCBhcyB0aGV5IGRldGVybWluZSBob3cgdGhlIFNOTVAgYWdlbnQgYW5kIHJlbGF0ZWQKLWFwcGxpY2F0aW9ucyBhcmUgdG8gZnVuY3Rpb24uCiAKLQlBZnRlciB0aGUgY29uZmlndXJlIHNjcmlwdCBmaW5pc2hlcywgeW91IGNhbiBicm93c2UgdGhlIG5ld2x5Ci1jcmVhdGVkIG5ldC1zbm1wLWNvbmZpZy5oIGZpbGUgZm9yIGZ1cnRoZXIgLSBsZXNzIGltcG9ydGFudCAtIHBhcmFtZXRlcnMgdG8KLW1vZGlmeS4gIEJlIGNhcmVmdWwgaWYgeW91IHJlLXJ1biBjb25maWd1cmUgdGhvdWdoLCBzaW5jZSBuZXQtc25tcC1jb25maWcuaAotd2lsbCBiZSBvdmVyd3JpdHRlbi4KIAotLVByZXNzIHJldHVybiB0byBjb250aW51ZS0KLUVPRgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIE1ha2VmaWxlOk1ha2VmaWxlLnRvcDpNYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKIAotcmVhZCB0bXBpbnB1dAotYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKLWVsc2UKLSAgYWNfY3ZfaGF2ZV93YXJuZWQ9Im5vIgotZmkKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBzbm1wbGliL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpzbm1wbGliL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOnNubXBsaWIvTWFrZWZpbGUuZGVwZW5kIgogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X2hhdmVfd2FybmVkIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl9oYXZlX3dhcm5lZCIgPiY2Ci1lbHNlCi0gIGFjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCi1maQorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmQiCiAKLU1FPWAkV0hPQU1JYAotaWYgdGVzdCAtZiAvZXRjL3Jlc29sdi5jb25mOyB0aGVuCi0gIExPQz1gY2F0IC9ldGMvcmVzb2x2LmNvbmYgfCBncmVwICdeZG9tYWluJyB8IHRhaWwgLTEgfCBhd2sgJ3twcmludCAkTkZ9J2AKLWVsc2UKLSAgTE9DPSJAbm8ud2hlcmUiCi1maQorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQiCiAKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kIgogCi1NU0dfQ0hFQ0s9YGVjaG8gIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFnZW50L2hlbHBlcnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmQiCiAKLSoqKiBEZWZhdWx0IFNOTVAgVmVyc2lvbjoKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kIgogCi0JU3RhcnRpbmcgd2l0aCBOZXQtU05NUCA1LjAsIHlvdSBjYW4gY2hvb3NlIHRoZSBkZWZhdWx0IHZlcnNpb24gb2YKLXRoZSBTTk1QIHByb3RvY29sIHRvIHVzZSB3aGVuIG5vIHZlcnNpb24gaXMgZ2l2ZW4gZXhwbGljaXRseSBvbiB0aGUKLWNvbW1hbmQgbGluZSwgb3IgdmlhIGFuICdzbm1wLmNvbmYnIGZpbGUuICBJbiB0aGUgcGFzdCB0aGlzIHdhcyBzZXQgdG8KLVNOTVB2MSwgYnV0IHlvdSBjYW4gdXNlIHRoaXMgdG8gc3dpdGNoIHRvIFNOTVB2MyBpZiBkZXNpcmVkLiAgU05NUHYzCi13aWxsIHByb3ZpZGUgYSBtb3JlIHNlY3VyZSBtYW5hZ2VtZW50IGVudmlyb25tZW50IChhbmQgdGh1cyB5b3UncmUKLWVuY291cmFnZWQgdG8gc3dpdGNoIHRvIFNOTVB2MyksIGJ1dCBtYXkgYnJlYWsgZXhpc3Rpbmcgc2NyaXB0cyB0aGF0Ci1yZWx5IG9uIHRoZSBvbGQgYmVoYXZpb3VyLiAgKFRob3VnaCBzdWNoIHNjcmlwdHMgd2lsbCBwcm9iYWJseSBuZWVkIHRvCi1iZSBjaGFuZ2VkIHRvIHVzZSB0aGUgJy1jJyBjb21tdW5pdHkgZmxhZyBhbnl3YXksIGFzIHRoZSBTTk1QdjEKLWNvbW1hbmQgbGluZSB1c2FnZSBoYXMgY2hhbmdlZCBhcyB3ZWxsLikuCi0gICBBdCB0aGlzIHByb21wdCB5b3UgY2FuIHNlbGVjdCBcIjFcIiwgXCIyXCIgKGZvciBTTk1QdjJjKSwgb3IgXCIzXCIgYXMKLXRoZSBkZWZhdWx0IHZlcnNpb24gZm9yIHRoZSBjb21tYW5kIHRvb2xzIChzbm1wZ2V0LCAuLi4pIHRvIHVzZS4gIFRoaXMKLWNhbiBhbHdheXMgYmUgb3ZlcnJpZGRlbiBhdCBydW50aW1lIHVzaW5nIHRoZSAtdiBmbGFnIHRvIHRoZSB0b29scywgb3IKLWJ5IHVzaW5nIHRoZSBcImRlZlZlcnNpb25cIiB0b2tlbiBpbiB5b3VyIHNubXAuY29uZiBmaWxlLgotICAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtZGVmYXVsdC1zbm1wLXZlcnNpb249XCJ4XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGxvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKIAotRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlIiB8IHRhaWwgLTFgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04rc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiIiA+JjYKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyB0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluIgogCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG1hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgogCi0qKiogRGVmYXVsdCBTTk1QIFZlcnNpb246CithY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKIAotCVN0YXJ0aW5nIHdpdGggTmV0LVNOTVAgNS4wLCB5b3UgY2FuIGNob29zZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mCi10aGUgU05NUCBwcm90b2NvbCB0byB1c2Ugd2hlbiBubyB2ZXJzaW9uIGlzIGdpdmVuIGV4cGxpY2l0bHkgb24gdGhlCi1jb21tYW5kIGxpbmUsIG9yIHZpYSBhbiAnc25tcC5jb25mJyBmaWxlLiAgSW4gdGhlIHBhc3QgdGhpcyB3YXMgc2V0IHRvCi1TTk1QdjEsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvIHN3aXRjaCB0byBTTk1QdjMgaWYgZGVzaXJlZC4gIFNOTVB2Mwotd2lsbCBwcm92aWRlIGEgbW9yZSBzZWN1cmUgbWFuYWdlbWVudCBlbnZpcm9ubWVudCAoYW5kIHRodXMgeW91J3JlCi1lbmNvdXJhZ2VkIHRvIHN3aXRjaCB0byBTTk1QdjMpLCBidXQgbWF5IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMgdGhhdAotcmVseSBvbiB0aGUgb2xkIGJlaGF2aW91ci4gIChUaG91Z2ggc3VjaCBzY3JpcHRzIHdpbGwgcHJvYmFibHkgbmVlZCB0bwotYmUgY2hhbmdlZCB0byB1c2UgdGhlICctYycgY29tbXVuaXR5IGZsYWcgYW55d2F5LCBhcyB0aGUgU05NUHYxCi1jb21tYW5kIGxpbmUgdXNhZ2UgaGFzIGNoYW5nZWQgYXMgd2VsbC4pLgotICAgQXQgdGhpcyBwcm9tcHQgeW91IGNhbiBzZWxlY3QgXCIxXCIsIFwiMlwiIChmb3IgU05NUHYyYyksIG9yIFwiM1wiIGFzCi10aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgY29tbWFuZCB0b29scyAoc25tcGdldCwgLi4uKSB0byB1c2UuICBUaGlzCi1jYW4gYWx3YXlzIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgLXYgZmxhZyB0byB0aGUgdG9vbHMsIG9yCi1ieSB1c2luZyB0aGUgXCJkZWZWZXJzaW9uXCIgdG9rZW4gaW4geW91ciBzbm1wLmNvbmYgZmlsZS4KLSAgIFByb3ZpZGluZyB0aGUgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPVwieFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluIgogCi1EZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UgKDMpOiAkRUNIT19DIgotcmVhZCB0bXBpbnB1dAotaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIzIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iMyIKLWZpCi1ldmFsIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049XCIkdG1waW5wdXRcIgotZWxzZQotdG1waW5wdXQ9IjMiCi1ldmFsIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049XCIkdG1waW5wdXRcIgotZmkKK2FjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBuZXQtc25tcC1jcmVhdGUtdjMtdXNlcjpuZXQtc25tcC1jcmVhdGUtdjMtdXNlci5pbiIKIAorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXM6ZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbiIKIAotZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPVwkTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTgotZWNobyAkRUNIT19OICJzZXR0aW5nICRNU0dfQ0hFQ0sgdG8uLi4gICRFQ0hPX0MiID4mNgorYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGxvY2FsL3NubXBjb25mIgogCi1maQotZWNobyAiJGFzX21lOiRMSU5FTk86IHJlc3VsdDogJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID4mNgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICJub25lIjsgdGhlbgotICBpZiB0ZXN0ICJ4dW5xdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4dW5xdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIKLV9BQ0VPRgogCi0gIGVsc2UKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04gJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04KLV9BQ0VPRgotCi0gIGZpCi1maQotCi0KLSMgd2UgdGVzdGVkIHRoaXMgYWJvdmUgYmVmb3JlIHRoZSBwcm9tcHQsIGJ1dCB0aGUgcHJvbXB0IG1heSBnaXZlIGEgbmV3IHZhbHVlLgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iID0gIjJjIjsgdGhlbgotICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIyIgotZmkKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMSIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMiIgLWEgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiAhPSAiMyI7IHRoZW4KLSAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IElsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotZmkKLQotCi1NU0dfQ0hFQ0s9YGVjaG8gIgotCi0qKiogU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb246Ci0KLQlEZXNjcmliZXMgd2hvIHNob3VsZCBiZSBjb250YWN0ZWQgYWJvdXQgdGhlIGhvc3QgdGhlIGFnZW50IGlzCi1ydW5uaW5nIG9uLiAgVGhpcyBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgVGhpcwotY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlIFwic3lzY29udGFjdFwiIHN5bnRheCBpbiB0aGUgYWdlbnQncwotY29uZmlndXJhdGlvbiBmaWxlcy4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWNvbnRhY3Q9XCJjb250YWN0XCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1TeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbiIgfCB0YWlsIC0xYAotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nICRNU0dfQ0hFQ0siID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyAkTVNHX0NIRUNLLi4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUK3NldH0iID0gc2V0OyB0aGVuCi0gIGVjaG8gJEVDSE9fTiAiKGNhY2hlZCkgJEVDSE9fQyIgPiY2Ci1lbHNlCi0gIGVjaG8gIiIgPiY2Ci0KLWlmIHRlc3QgIngkZGVmYXVsdHMiID0gInhubyI7IHRoZW4KLWVjaG8gJEVDSE9fTiAiCi0KLSoqKiBTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbjoKLQotCURlc2NyaWJlcyB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCBhYm91dCB0aGUgaG9zdCB0aGUgYWdlbnQgaXMKLXJ1bm5pbmcgb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICBUaGlzCi1jYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUgXCJzeXNjb250YWN0XCIgc3ludGF4IGluIHRoZSBhZ2VudCdzCi1jb25maWd1cmF0aW9uIGZpbGVzLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtY29udGFjdD1cImNvbnRhY3RcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLVN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uICgkTUVAJExPQyk6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiRNRUAkTE9DIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iJE1FQCRMT0MiCi1maQotZXZhbCBORVRTTk1QX1NZU19DT05UQUNUPVwiJHRtcGlucHV0XCIKLWVsc2UKLXRtcGlucHV0PSIkTUVAJExPQyIKLWV2YWwgTkVUU05NUF9TWVNfQ09OVEFDVD1cIiR0bXBpbnB1dFwiCi1maQotCi0KLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVD1cJE5FVFNOTVBfU1lTX0NPTlRBQ1QKLWVjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA+JjYKLWlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1NZU19DT05UQUNUICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIKLV9BQ0VPRgotCi0gIGVsc2UKLSAgICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCi0jZGVmaW5lIE5FVFNOTVBfU1lTX0NPTlRBQ1QgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0NPTlRBQ1QKLV9BQ0VPRgotCi0gIGZpCi1maQotCi0KLQotTVNHX0NIRUNLPWBlY2hvICIKLQotKioqIFN5c3RlbSBMb2NhdGlvbjoKLQotCURlc2NyaWJlcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKLWF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICB0aGlzIGNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZQotXCJzeXNsb2NhdGlvblwiIHN5bnRheCBpbiB0aGUgYWdlbnQncyBjb25maWd1cmF0aW9uIGZpbGVzLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtbG9jYXRpb249XCJsb2NhdGlvblwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotU3lzdGVtIExvY2F0aW9uIiB8IHRhaWwgLTFgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQytzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIiID4mNgotCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIgotCi0qKiogU3lzdGVtIExvY2F0aW9uOgotCi0JRGVzY3JpYmVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgc3lzdGVtLiAgVGhpcyBpbmZvcm1hdGlvbiBpcwotYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIHRoaXMgY2FuIGFsc28gYmUgb3Zlci1yaWRkZW4gdXNpbmcgdGhlCi1cInN5c2xvY2F0aW9uXCIgc3ludGF4IGluIHRoZSBhZ2VudCdzIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1sb2NhdGlvbj1cImxvY2F0aW9uXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1TeXN0ZW0gTG9jYXRpb24gKFVua25vd24pOiAkRUNIT19DIgotcmVhZCB0bXBpbnB1dAotaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICJVbmtub3duIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iVW5rbm93biIKLWZpCi1ldmFsIE5FVFNOTVBfU1lTX0xPQz1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iVW5rbm93biIKLWV2YWwgTkVUU05NUF9TWVNfTE9DPVwiJHRtcGlucHV0XCIKLWZpCi0KLQotZXZhbCBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0M9XCRORVRTTk1QX1NZU19MT0MKLWVjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JjYKLQotZmkKLWVjaG8gIiRhc19tZTokTElORU5POiByZXN1bHQ6ICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiID4mNQotZWNobyAiJHtFQ0hPX1R9JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiAhPSAibm9uZSI7IHRoZW4KLSAgaWYgdGVzdCAieHF1b3RlZCIgPSAieHF1b3RlZCIgLW8gInhxdW90ZWQiID0gInhRVU9URUQiOyB0aGVuCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1NZU19MT0MgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19MT0MiCi1fQUNFT0YKLQotICBlbHNlCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1NZU19MT0MgJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQwotX0FDRU9GCi0KLSAgZmkKLWZpCi0KLQotaWYgdGVzdCAtZCAvdmFyL2xvZzsgdGhlbgotICBkZWZhdWx0bG9nPSIvdmFyL2xvZy9zbm1wZC5sb2ciCi1lbHNlCi0gIGRlZmF1bHRsb2c9Ii91c3IvYWRtL3NubXBkLmxvZyIKLWZpCi0KLQotTVNHX0NIRUNLPWBlY2hvICIKLQotKioqIExvZ2ZpbGUgbG9jYXRpb246Ci0KLQlFbnRlciB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIHNubXBkIGFnZW50IHRvIGR1bXAKLWluZm9ybWF0aW9uICYgZXJyb3JzIHRvLiAgSWYgbm90IGRlZmluZWQgKGVudGVyIHRoZSBrZXl3b3JkIFwibm9uZVwiCi1hdCB0aGUgcHJvbXB0IGJlbG93KSB0aGUgYWdlbnQgd2lsbCB1c2Ugc3Rkb3V0IGFuZCBzdGRlcnIgaW5zdGVhZC4KLShOb3RlOiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVyLXJpZGRlbiB1c2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4pCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLWxvZ2ZpbGU9XCJwYXRoXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Mb2NhdGlvbiB0byB3cml0ZSBsb2dmaWxlIiB8IHRhaWwgLTFgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRStzZXR9IiA9IHNldDsgdGhlbgotICBlY2hvICRFQ0hPX04gIihjYWNoZWQpICRFQ0hPX0MiID4mNgotZWxzZQotICBlY2hvICIiID4mNgotCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIgotCi0qKiogTG9nZmlsZSBsb2NhdGlvbjoKLQotCUVudGVyIHRoZSBkZWZhdWx0IGxvY2F0aW9uIGZvciB0aGUgc25tcGQgYWdlbnQgdG8gZHVtcAotaW5mb3JtYXRpb24gJiBlcnJvcnMgdG8uICBJZiBub3QgZGVmaW5lZCAoZW50ZXIgdGhlIGtleXdvcmQgXCJub25lXCIKLWF0IHRoZSBwcm9tcHQgYmVsb3cpIHRoZSBhZ2VudCB3aWxsIHVzZSBzdGRvdXQgYW5kIHN0ZGVyciBpbnN0ZWFkLgotKE5vdGU6IFRoaXMgdmFsdWUgY2FuIGJlIG92ZXItcmlkZGVuIHVzaW5nIGNvbW1hbmQgbGluZSBvcHRpb25zLikKLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtbG9nZmlsZT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUxvY2F0aW9uIHRvIHdyaXRlIGxvZ2ZpbGUgKCRkZWZhdWx0bG9nKTogJEVDSE9fQyIKLXJlYWQgdG1waW5wdXQKLWlmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJGRlZmF1bHRsb2ciICE9ICIiOyB0aGVuCi0gIHRtcGlucHV0PSIkZGVmYXVsdGxvZyIKLWZpCi1ldmFsIE5FVFNOTVBfTE9HRklMRT1cIiR0bXBpbnB1dFwiCi1lbHNlCi10bXBpbnB1dD0iJGRlZmF1bHRsb2ciCi1ldmFsIE5FVFNOTVBfTE9HRklMRT1cIiR0bXBpbnB1dFwiCi1maQotCi0KLWV2YWwgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPVwkTkVUU05NUF9MT0dGSUxFCi1lY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID4mNgotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgIT0gIm5vbmUiOyB0aGVuCi0gIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9MT0dGSUxFICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFIgotX0FDRU9GCi0KLSAgZWxzZQotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9MT0dGSUxFICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUKLV9BQ0VPRgotCi0gIGZpCi1maQotCi0KLWlmIHRlc3QgLWQgL3ZhcjsgdGhlbgotICBkZWZhdWx0c3RvcmU9Ii92YXIvbmV0LXNubXAiCi0gIHVjZGRlZmF1bHRzdG9yZT0iL3Zhci91Y2Qtc25tcCIKLWVsc2UKLSAgZGVmYXVsdHN0b3JlPSIvZXRjL25ldC1zbm1wIgotICB1Y2RkZWZhdWx0c3RvcmU9Ii9ldGMvdWNkLXNubXAiCi1maQotCi0KLU1TR19DSEVDSz1gZWNobyAiCi0KLSoqKiBzbm1wZCBwZXJzaXN0ZW50IHN0b3JhZ2UgbG9jYXRpb246Ci0KLQlFbnRlciBhIGRpcmVjdG9yeSBmb3IgdGhlIFNOTVAgbGlicmFyeSB0byBzdG9yZSBwZXJzaXN0ZW50Ci1kYXRhIGluIHRoZSBmb3JtIG9mIGEgY29uZmlndXJhdGlvbiBmaWxlLiAgVGhpcyBkZWZhdWx0IGxvY2F0aW9uIGlzCi1kaWZmZXJlbnQgdGhhbiB0aGUgb2xkIGRlZmF1bHQgbG9jYXRpb24gKHdoaWNoIHdhcyBmb3IgdWNkLXNubXApLiAgSWYKLXlvdSBzdGF5IHdpdGggdGhlIG5ldyBwYXRoLCBJJ2xsIGFzayB5b3UgaW4gYSBzZWNvbmQgaWYgeW91IHdpc2ggdG8KLWNvcHkgeW91ciBmaWxlcyBvdmVyIHRvIHRoZSBuZXcgbG9jYXRpb24gKG9uY2Ugb25seSkuICBJZiB5b3UgcGljawotc29tZSBvdGhlciBwYXRoIHRoYW4gdGhlIGRlZmF1bHQsIHlvdSdsbCBoYXZlIHRvIGNvcHkgdGhlbSB5b3Vyc2VsZi4KLVRoZXJlIGlzIG5vdGhpbmcgd3Jvbmcgd2l0aCBwaWNraW5nIHRoZSBvbGQgcGF0aCAoJHVjZGRlZmF1bHRzdG9yZSkgaWYKLXlvdSdkIHJhdGhlci4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9XCJwYXRoXCIgcGFyYW1ldGVyIHRvCi0uL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Mb2NhdGlvbiB0byB3cml0ZSBwZXJzaXN0ZW50IGluZm9ybWF0aW9uIiB8IHRhaWwgLTFgCi1lY2hvICIkYXNfbWU6JExJTkVOTzogY2hlY2tpbmcgJE1TR19DSEVDSyIgPiY1Ci1lY2hvICRFQ0hPX04gImNoZWNraW5nICRNU0dfQ0hFQ0suLi4gJEVDSE9fQyIgPiY2Ci1pZiB0ZXN0ICIke2FjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLSAgZWNobyAiIiA+JjYKLQotaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgotZWNobyAkRUNIT19OICIKLQotKioqIHNubXBkIHBlcnNpc3RlbnQgc3RvcmFnZSBsb2NhdGlvbjoKLQotCUVudGVyIGEgZGlyZWN0b3J5IGZvciB0aGUgU05NUCBsaWJyYXJ5IHRvIHN0b3JlIHBlcnNpc3RlbnQKLWRhdGEgaW4gdGhlIGZvcm0gb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGlzIGRlZmF1bHQgbG9jYXRpb24gaXMKLWRpZmZlcmVudCB0aGFuIHRoZSBvbGQgZGVmYXVsdCBsb2NhdGlvbiAod2hpY2ggd2FzIGZvciB1Y2Qtc25tcCkuICBJZgoteW91IHN0YXkgd2l0aCB0aGUgbmV3IHBhdGgsIEknbGwgYXNrIHlvdSBpbiBhIHNlY29uZCBpZiB5b3Ugd2lzaCB0bwotY29weSB5b3VyIGZpbGVzIG92ZXIgdG8gdGhlIG5ldyBsb2NhdGlvbiAob25jZSBvbmx5KS4gIElmIHlvdSBwaWNrCi1zb21lIG90aGVyIHBhdGggdGhhbiB0aGUgZGVmYXVsdCwgeW91J2xsIGhhdmUgdG8gY29weSB0aGVtIHlvdXJzZWxmLgotVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIHBpY2tpbmcgdGhlIG9sZCBwYXRoICgkdWNkZGVmYXVsdHN0b3JlKSBpZgoteW91J2QgcmF0aGVyLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8KLS4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUxvY2F0aW9uIHRvIHdyaXRlIHBlcnNpc3RlbnQgaW5mb3JtYXRpb24gKCRkZWZhdWx0c3RvcmUpOiAkRUNIT19DIgotcmVhZCB0bXBpbnB1dAotaWYgdGVzdCAiJHRtcGlucHV0IiA9ICIiIC1hICIkZGVmYXVsdHN0b3JlIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iJGRlZmF1bHRzdG9yZSIKLWZpCi1ldmFsIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9XCIkdG1waW5wdXRcIgotZWxzZQotdG1waW5wdXQ9IiRkZWZhdWx0c3RvcmUiCi1ldmFsIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9XCIkdG1waW5wdXRcIgotZmkKLQotCi1ldmFsIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9XCRORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCi1lY2hvICRFQ0hPX04gInNldHRpbmcgJE1TR19DSEVDSyB0by4uLiAgJEVDSE9fQyIgPiY2Ci0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIgPiY1Ci1lY2hvICIke0VDSE9fVH0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIgPiY2Ci1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSIgIT0gIm5vbmUiOyB0aGVuCi0gIGlmIHRlc3QgInhxdW90ZWQiID0gInhxdW90ZWQiIC1vICJ4cXVvdGVkIiA9ICJ4UVVPVEVEIjsgdGhlbgotICAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKLSNkZWZpbmUgTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkiCi1fQUNFT0YKLQotICBlbHNlCi0gICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgotI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZICRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCi1fQUNFT0YKLQotICBmaQotZmkKLQotCi1QRVJTSVNURU5UX0RJUkVDVE9SWT0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQotCi1VQ0RQRVJTSVNURU5UX0RJUkVDVE9SWT0kdWNkZGVmYXVsdHN0b3JlCi0KLQotaWYgdGVzdCAkUEVSU0lTVEVOVF9ESVJFQ1RPUlkgPSAiJGRlZmF1bHRzdG9yZSIgLWEgLWQgIiR1Y2RkZWZhdWx0c3RvcmUiIC1hICEgLWQgIiRkZWZhdWx0c3RvcmUiIDsgdGhlbgotZWNobyAiJGFzX21lOiRMSU5FTk86IGNoZWNraW5nIElmIHdlIHNob3VsZCBjb3B5IHRoZSBvbGQgcGVyc2lzdGVudCBkaXJlY3RvcnkiID4mNQotZWNobyAkRUNIT19OICJjaGVja2luZyBJZiB3ZSBzaG91bGQgY29weSB0aGUgb2xkIHBlcnNpc3RlbnQgZGlyZWN0b3J5Li4uICRFQ0hPX0MiID4mNgotaWYgdGVzdCAiJHthY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMrc2V0fSIgPSBzZXQ7IHRoZW4KLSAgZWNobyAkRUNIT19OICIoY2FjaGVkKSAkRUNIT19DIiA+JjYKLWVsc2UKLQotCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1lY2hvICRFQ0hPX04gIgotCi0qKiogQ29weWluZyBvbGQgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcyB0byBuZXQtc25tcCBwZXJzaXN0ZW50IGRpcmVjdG9yeToKLQotCVdvdWxkIHlvdSBsaWtlIHRvIGNvcHkgdGhlIG9sZGVyIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMKLWludG8geW91ciBuZXcgbmV0LXNubXAgcGVyc2lzdGVudCBmaWxlIHBhdGg/ICBUaGlzIHdpbGwgZnVuY3Rpb25hbGx5Ci1zYXZlIGFsbCB5b3VyIHVjZC1zbm1wIGRhdGEgYW5kIGxldCBpdCBiZSB1c2VkIHdpdGhpbiB0aGUgbmV0LXNubXAKLXRvb2xzLiAgVGhpcyB3aWxsIG9ubHkgYmUgZG9uZSBvbmNlIHdoZW4geW91IHJ1biBtYWtlIGluc3RhbGwuICBJZiB5b3UKLXdpc2ggdG8gZG8gdGhpcywgZW50ZXIgInllcyIgYXQgdGhlIHByb21wdC4KLSAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPVwibm9cIiAob3IgXCJ5ZXNcIikKLXBhcmFtZXRlcnMgdG8gLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotQ29weSB1Y2Qtc25tcCBkYXRhIGludG8gdGhlIG5ldC1zbm1wIGRhdGEgZGlyZWN0b3J5ICgieWVzIik6ICRFQ0hPX0MiCi1yZWFkIHRtcGlucHV0Ci1pZiB0ZXN0ICIkdG1waW5wdXQiID0gIiIgLWEgIiJ5ZXMiIiAhPSAiIjsgdGhlbgotICB0bXBpbnB1dD0iInllcyIiCi1maQotZXZhbCBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9XCIkdG1waW5wdXRcIgotZWxzZQotdG1waW5wdXQ9IiJ5ZXMiIgotZXZhbCBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9XCIkdG1waW5wdXRcIgotZmkKLQotCi0KLWZpCi1lY2hvICIkYXNfbWU6JExJTkVOTzogcmVzdWx0OiAkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIiA+JjUKLWVjaG8gIiR7RUNIT19UfSRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiID4mNgotZWxzZQotYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSJubyIKLWZpCi1DT1BZX1BFUlNJU1RFTlRfRklMRVM9IiRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiCi0KLQotCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIHNubXBsaWIvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnNubXBsaWIvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6c25tcGxpYi9NYWtlZmlsZS5kZXBlbmQiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGFnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmQiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyBhZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIGxvY2FsL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpsb2NhbC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIKLQotICAgICAgICAgIGFjX2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyB0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG1hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIgotCi0gICAgICAgICAgYWNfY29uZmlnX2ZpbGVzPSIkYWNfY29uZmlnX2ZpbGVzIG1pYnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1pYnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiCi0KLSAgICAgICAgICBhY19jb25maWdfZmlsZXM9IiRhY19jb25maWdfZmlsZXMgbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbiIKLQotCi0gICAgICAgICAgYWNfY29uZmlnX2NvbW1hbmRzPSIkYWNfY29uZmlnX2NvbW1hbmRzIGRlZmF1bHQiCithY19jb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMgZGVmYXVsdCIKIAogCiAjCkBAIC00OTY4NiwxMSArMjk4MjEsNiBAQAogCiAKIAotCi0KLQotCi0KIGNhdCA+Y29uZmNhY2hlIDw8XF9BQ0VPRgogIyBUaGlzIGZpbGUgaXMgYSBzaGVsbCBzY3JpcHQgdGhhdCBjYWNoZXMgdGhlIHJlc3VsdHMgb2YgY29uZmlndXJlCiAjIHRlc3RzIHJ1biBvbiB0aGlzIHN5c3RlbSBzbyB0aGV5IGNhbiBiZSBzaGFyZWQgYmV0d2VlbiBjb25maWd1cmUKQEAgLTQ5NzA5LDM5ICsyOTgzOSw3MCBAQAogCiAjIFRoZSBmb2xsb3dpbmcgd2F5IG9mIHdyaXRpbmcgdGhlIGNhY2hlIG1pc2hhbmRsZXMgbmV3bGluZXMgaW4gdmFsdWVzLAogIyBidXQgd2Uga25vdyBvZiBubyB3b3JrYXJvdW5kIHRoYXQgaXMgc2ltcGxlLCBwb3J0YWJsZSwgYW5kIGVmZmljaWVudC4KLSMgU28sIGRvbid0IHB1dCBuZXdsaW5lcyBpbiBjYWNoZSB2YXJpYWJsZXMnIHZhbHVlcy4KKyMgU28sIHdlIGtpbGwgdmFyaWFibGVzIGNvbnRhaW5pbmcgbmV3bGluZXMuCiAjIFVsdHJpeCBzaCBzZXQgd3JpdGVzIHRvIHN0ZGVyciBhbmQgY2FuJ3QgYmUgcmVkaXJlY3RlZCBkaXJlY3RseSwKICMgYW5kIHNldHMgdGhlIGhpZ2ggYml0IGluIHRoZSBjYWNoZSBmaWxlIHVubGVzcyB3ZSBhc3NpZ24gdG8gdGhlIHZhcnMuCi17CisoCisgIGZvciBhY192YXIgaW4gYChzZXQpIDI+JjEgfCBzZWQgLW4gJ3MvXlwoW2EtekEtWl9dW2EtekEtWjAtOV9dKlwpPS4qL1wxL3AnYDsgZG8KKyAgICBldmFsIGFjX3ZhbD1cJCRhY192YXIKKyAgICBjYXNlICRhY192YWwgaW4gIygKKyAgICAqJHthc19ubH0qKQorICAgICAgY2FzZSAkYWNfdmFyIGluICMoCisgICAgICAqX2N2XyopIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogY2FjaGUgdmFyaWFibGUgJGFjX3ZhciBjb250YWlucyBhIG5ld2xpbmUiID4mMjt9IDs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY192YXIgaW4gIygKKyAgICAgIF8gfCBJRlMgfCBhc19ubCkgOzsgIygKKyAgICAgIEJBU0hfQVJHViB8IEJBU0hfU09VUkNFKSBldmFsICRhY192YXI9IDs7ICMoCisgICAgICAqKSB7IGV2YWwgJGFjX3Zhcj07IHVuc2V0ICRhY192YXI7fSA7OworICAgICAgZXNhYyA7OworICAgIGVzYWMKKyAgZG9uZQorCiAgIChzZXQpIDI+JjEgfAotICAgIGNhc2UgYChhY19zcGFjZT0nICc7IHNldCB8IGdyZXAgYWNfc3BhY2UpIDI+JjFgIGluCi0gICAgKmFjX3NwYWNlPVwgKikKLSAgICAgICMgYHNldCcgZG9lcyBub3QgcXVvdGUgY29ycmVjdGx5LCBzbyBhZGQgcXVvdGVzIChkb3VibGUtcXVvdGUKLSAgICAgICMgc3Vic3RpdHV0aW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHNlZCB0dXJucyBcXCBpbnRvIFwpLgorICAgIGNhc2UgJGFzX25sYChhY19zcGFjZT0nICc7IHNldCkgMj4mMWAgaW4gIygKKyAgICAqJHthc19ubH1hY19zcGFjZT1cICopCisgICAgICAjIGBzZXQnIGRvZXMgbm90IHF1b3RlIGNvcnJlY3RseSwgc28gYWRkIHF1b3RlczogZG91YmxlLXF1b3RlCisgICAgICAjIHN1YnN0aXR1dGlvbiB0dXJucyBcXFxcIGludG8gXFwsIGFuZCBzZWQgdHVybnMgXFwgaW50byBcLgogICAgICAgc2VkIC1uIFwKIAkicy8nLydcXFxcJycvZzsKIAkgIHMvXlxcKFtfJGFzX2NyX2FsbnVtXSpfY3ZfW18kYXNfY3JfYWxudW1dKlxcKT1cXCguKlxcKS9cXDE9J1xcMicvcCIKLSAgICAgIDs7CisgICAgICA7OyAjKAogICAgICopCiAgICAgICAjIGBzZXQnIHF1b3RlcyBjb3JyZWN0bHkgYXMgcmVxdWlyZWQgYnkgUE9TSVgsIHNvIGRvIG5vdCBhZGQgcXVvdGVzLgotICAgICAgc2VkIC1uIFwKLQkicy9eXFwoW18kYXNfY3JfYWxudW1dKl9jdl9bXyRhc19jcl9hbG51bV0qXFwpPVxcKC4qXFwpL1xcMT1cXDIvcCIKKyAgICAgIHNlZCAtbiAiL15bXyRhc19jcl9hbG51bV0qX2N2X1tfJGFzX2NyX2FsbnVtXSo9L3AiCiAgICAgICA7OwotICAgIGVzYWM7Ci19IHwKKyAgICBlc2FjIHwKKyAgICBzb3J0CispIHwKICAgc2VkICcKKyAgICAgL15hY19jdl9lbnZfL2IgZW5kCiAgICAgIHQgY2xlYXIKLSAgICAgOiBjbGVhcgorICAgICA6Y2xlYXIKICAgICAgcy9eXChbXj1dKlwpPVwoLipbe31dLipcKSQvdGVzdCAiJHtcMStzZXR9IiA9IHNldCB8fCAmLwogICAgICB0IGVuZAotICAgICAvXmFjX2N2X2Vudi8hcy9eXChbXj1dKlwpPVwoLipcKSQvXDE9JHtcMT1cMn0vCi0gICAgIDogZW5kJyA+PmNvbmZjYWNoZQotaWYgZGlmZiAkY2FjaGVfZmlsZSBjb25mY2FjaGUgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDo7IGVsc2UKLSAgaWYgdGVzdCAtdyAkY2FjaGVfZmlsZTsgdGhlbgotICAgIHRlc3QgIngkY2FjaGVfZmlsZSIgIT0gIngvZGV2L251bGwiICYmIGVjaG8gInVwZGF0aW5nIGNhY2hlICRjYWNoZV9maWxlIgotICAgIGNhdCBjb25mY2FjaGUgPiRjYWNoZV9maWxlCisgICAgIHMvXlwoW149XSpcKT1cKC4qXCkkL1wxPSR7XDE9XDJ9LworICAgICA6ZW5kJyA+PmNvbmZjYWNoZQoraWYgZGlmZiAiJGNhY2hlX2ZpbGUiIGNvbmZjYWNoZSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOjsgZWxzZQorICBpZiB0ZXN0IC13ICIkY2FjaGVfZmlsZSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGNhY2hlX2ZpbGUiICE9ICJ4L2Rldi9udWxsIjsgdGhlbgorICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY1CiskYXNfZWNobyAiJGFzX21lOiB1cGRhdGluZyBjYWNoZSAkY2FjaGVfZmlsZSIgPiY2O30KKyAgICAgIGlmIHRlc3QgISAtZiAiJGNhY2hlX2ZpbGUiIHx8IHRlc3QgLWggIiRjYWNoZV9maWxlIjsgdGhlbgorCWNhdCBjb25mY2FjaGUgPiIkY2FjaGVfZmlsZSIKKyAgICAgIGVsc2UKKyAgICAgICAgY2FzZSAkY2FjaGVfZmlsZSBpbiAjKAorICAgICAgICAqLyogfCA/OiopCisJICBtdiAtZiBjb25mY2FjaGUgIiRjYWNoZV9maWxlIiQkICYmCisJICBtdiAtZiAiJGNhY2hlX2ZpbGUiJCQgIiRjYWNoZV9maWxlIiA7OyAjKAorICAgICAgICAqKQorCSAgbXYgLWYgY29uZmNhY2hlICIkY2FjaGVfZmlsZSIgOzsKKwllc2FjCisgICAgICBmaQorICAgIGZpCiAgIGVsc2UKLSAgICBlY2hvICJub3QgdXBkYXRpbmcgdW53cml0YWJsZSBjYWNoZSAkY2FjaGVfZmlsZSIKKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IG5vdCB1cGRhdGluZyB1bndyaXRhYmxlIGNhY2hlICRjYWNoZV9maWxlIiA+JjY7fQogICBmaQogZmkKIHJtIC1mIGNvbmZjYWNoZQpAQCAtNDk3NTAsMzIgKzI5OTExLDE5IEBACiAjIExldCBtYWtlIGV4cGFuZCBleGVjX3ByZWZpeC4KIHRlc3QgIngkZXhlY19wcmVmaXgiID0geE5PTkUgJiYgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKIAotIyBWUEFUSCBtYXkgY2F1c2UgdHJvdWJsZSB3aXRoIHNvbWUgbWFrZXMsIHNvIHdlIHJlbW92ZSAkKHNyY2RpciksCi0jICR7c3JjZGlyfSBhbmQgQHNyY2RpckAgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAotIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKLSMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KLWlmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCi0gIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj0vewotcy86KlwkKHNyY2Rpcik6Ki86LzsKLXMvOipcJHtzcmNkaXJ9OiovOi87Ci1zLzoqQHNyY2RpckA6Ki86LzsKLXMvXlwoW149XSo9WwkgXSpcKToqL1wxLzsKLXMvOiokLy87Ci1zL15bXj1dKj1bCSBdKiQvLzsKLX0nCi1maQotCiBERUZTPS1ESEFWRV9DT05GSUdfSAogCiBhY19saWJvYmpzPQogYWNfbHRsaWJvYmpzPQorVT0KIGZvciBhY19pIGluIDogJExJQk9CSlM7IGRvIHRlc3QgIngkYWNfaSIgPSB4OiAmJiBjb250aW51ZQogICAjIDEuIFJlbW92ZSB0aGUgZXh0ZW5zaW9uLCBhbmQgJFUgaWYgYWxyZWFkeSBpbnN0YWxsZWQuCi0gIGFjX2k9YGVjaG8gIiRhY19pIiB8Ci0JIHNlZCAncy9cJFVcLi8uLztzL1wubyQvLztzL1wub2JqJC8vJ2AKLSAgIyAyLiBBZGQgdGhlbS4KLSAgYWNfbGlib2Jqcz0iJGFjX2xpYm9ianMgJGFjX2lcJFUuJGFjX29iamV4dCIKLSAgYWNfbHRsaWJvYmpzPSIkYWNfbHRsaWJvYmpzICRhY19pIickVS5sbycKKyAgYWNfc2NyaXB0PSdzL1wkVVwuLy4vO3MvXC5vJC8vO3MvXC5vYmokLy8nCisgIGFjX2k9YCRhc19lY2hvICIkYWNfaSIgfCBzZWQgIiRhY19zY3JpcHQiYAorICAjIDIuIFByZXBlbmQgTElCT0JKRElSLiAgV2hlbiB1c2VkIHdpdGggYXV0b21ha2U+PTEuMTAgTElCT0JKRElSCisgICMgICAgd2lsbCBiZSBzZXQgdG8gdGhlIGRpcmVjdG9yeSB3aGVyZSBMSUJPQkpTIG9iamVjdHMgYXJlIGJ1aWx0LgorICBhc19mbl9hcHBlbmQgYWNfbGlib2JqcyAiIFwke0xJQk9CSkRJUn0kYWNfaVwkVS4kYWNfb2JqZXh0IgorICBhc19mbl9hcHBlbmQgYWNfbHRsaWJvYmpzICIgXCR7TElCT0JKRElSfSRhY19pIickVS5sbycKIGRvbmUKIExJQk9CSlM9JGFjX2xpYm9ianMKIApAQCAtNDk3ODMsMTIgKzI5OTMxLDE1IEBACiAKIAogCi06ICR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9CisKKzogIiR7Q09ORklHX1NUQVRVUz0uL2NvbmZpZy5zdGF0dXN9IgorYWNfd3JpdGVfZmFpbD0wCiBhY19jbGVhbl9maWxlc19zYXZlPSRhY19jbGVhbl9maWxlcwogYWNfY2xlYW5fZmlsZXM9IiRhY19jbGVhbl9maWxlcyAkQ09ORklHX1NUQVRVUyIKLXsgZWNobyAiJGFzX21lOiRMSU5FTk86IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKLWVjaG8gIiRhc19tZTogY3JlYXRpbmcgJENPTkZJR19TVEFUVVMiID4mNjt9Ci1jYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRDT05GSUdfU1RBVFVTIiA+JjY7fQorYXNfd3JpdGVfZmFpbD0wCitjYXQgPiRDT05GSUdfU1RBVFVTIDw8X0FTRU9GIHx8IGFzX3dyaXRlX2ZhaWw9MQogIyEgJFNIRUxMCiAjIEdlbmVyYXRlZCBieSAkYXNfbWUuCiAjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbi4KQEAgLTQ5Nzk4LDgxICsyOTk0OSwyNTMgQEAKIGRlYnVnPWZhbHNlCiBhY19jc19yZWNoZWNrPWZhbHNlCiBhY19jc19zaWxlbnQ9ZmFsc2UKKwogU0hFTEw9XCR7Q09ORklHX1NIRUxMLSRTSEVMTH0KLV9BQ0VPRgorZXhwb3J0IFNIRUxMCitfQVNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BU0VPRiB8fCBhc193cml0ZV9mYWlsPTEKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNNHNoIEluaXRpYWxpemF0aW9uLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0jIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKLSMjIE00c2ggSW5pdGlhbGl6YXRpb24uICAjIwotIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCi0KLSMgQmUgQm91cm5lIGNvbXBhdGlibGUKLWlmIHRlc3QgLW4gIiR7WlNIX1ZFUlNJT04rc2V0fSIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorIyBCZSBtb3JlIEJvdXJuZSBjb21wYXRpYmxlCitEVUFMQ0FTRT0xOyBleHBvcnQgRFVBTENBU0UgIyBmb3IgTUtTIHNoCitpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iICYmIChlbXVsYXRlIHNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBlbXVsYXRlIHNoCiAgIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiAkezErIiRAIn0sIHdoaWNoCisgICMgUHJlLTQuMiB2ZXJzaW9ucyBvZiBac2ggZG8gd29yZCBzcGxpdHRpbmcgb24gJHsxKyIkQCJ9LCB3aGljaAogICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgogICBhbGlhcyAtZyAnJHsxKyIkQCJ9Jz0nIiRAIicKLWVsaWYgdGVzdCAtbiAiJHtCQVNIX1ZFUlNJT04rc2V0fSIgJiYgKHNldCAtbyBwb3NpeCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gIHNldCAtbyBwb3NpeAotZmkKLURVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKLQotIyBTdXBwb3J0IHVuc2V0IHdoZW4gcG9zc2libGUuCi1pZiAoIChNQUlMPTYwOyB1bnNldCBNQUlMKSB8fCBleGl0KSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgYXNfdW5zZXQ9dW5zZXQKKyAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKIGVsc2UKLSAgYXNfdW5zZXQ9ZmFsc2UKKyAgY2FzZSBgKHNldCAtbykgMj4vZGV2L251bGxgIGluICMoCisgICpwb3NpeCopIDoKKyAgICBzZXQgLW8gcG9zaXggOzsgIygKKyAgKikgOgorICAgICA7OworZXNhYwogZmkKIAogCi0jIFdvcmsgYXJvdW5kIGJ1Z3MgaW4gcHJlLTMuMCBVV0lOIGtzaC4KLSRhc191bnNldCBFTlYgTUFJTCBNQUlMUEFUSAorYXNfbmw9JworJworZXhwb3J0IGFzX25sCisjIFByaW50aW5nIGEgbG9uZyBzdHJpbmcgY3Jhc2hlcyBTb2xhcmlzIDcgL3Vzci9iaW4vcHJpbnRmLgorYXNfZWNobz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKK2FzX2VjaG89JGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobworYXNfZWNobz0kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8kYXNfZWNobyRhc19lY2hvJGFzX2VjaG8KKyMgUHJlZmVyIGEga3NoIHNoZWxsIGJ1aWx0aW4gb3ZlciBhbiBleHRlcm5hbCBwcmludGYgcHJvZ3JhbSBvbiBTb2xhcmlzLAorIyBidXQgd2l0aG91dCB3YXN0aW5nIGZvcmtzIGZvciBiYXNoIG9yIHpzaC4KK2lmIHRlc3QgLXogIiRCQVNIX1ZFUlNJT04kWlNIX1ZFUlNJT04iIFwKKyAgICAmJiAodGVzdCAiWGBwcmludCAtciAtLSAkYXNfZWNob2AiID0gIlgkYXNfZWNobyIpIDI+L2Rldi9udWxsOyB0aGVuCisgIGFzX2VjaG89J3ByaW50IC1yIC0tJworICBhc19lY2hvX249J3ByaW50IC1ybiAtLScKK2VsaWYgKHRlc3QgIlhgcHJpbnRmICVzICRhc19lY2hvYCIgPSAiWCRhc19lY2hvIikgMj4vZGV2L251bGw7IHRoZW4KKyAgYXNfZWNobz0ncHJpbnRmICVzXG4nCisgIGFzX2VjaG9fbj0ncHJpbnRmICVzJworZWxzZQorICBpZiB0ZXN0ICJYYCgvdXNyL3VjYi9lY2hvIC1uIC1uICRhc19lY2hvKSAyPi9kZXYvbnVsbGAiID0gIlgtbiAkYXNfZWNobyI7IHRoZW4KKyAgICBhc19lY2hvX2JvZHk9J2V2YWwgL3Vzci91Y2IvZWNobyAtbiAiJDEkYXNfbmwiJworICAgIGFzX2VjaG9fbj0nL3Vzci91Y2IvZWNobyAtbicKKyAgZWxzZQorICAgIGFzX2VjaG9fYm9keT0nZXZhbCBleHByICJYJDEiIDogIlhcXCguKlxcKSInCisgICAgYXNfZWNob19uX2JvZHk9J2V2YWwKKyAgICAgIGFyZz0kMTsKKyAgICAgIGNhc2UgJGFyZyBpbiAjKAorICAgICAgKiIkYXNfbmwiKikKKwlleHByICJYJGFyZyIgOiAiWFxcKC4qXFwpJGFzX25sIjsKKwlhcmc9YGV4cHIgIlgkYXJnIiA6ICIuKiRhc19ubFxcKC4qXFwpImA7OworICAgICAgZXNhYzsKKyAgICAgIGV4cHIgIlgkYXJnIiA6ICJYXFwoLipcXCkiIHwgdHIgLWQgIiRhc19ubCIKKyAgICAnCisgICAgZXhwb3J0IGFzX2VjaG9fbl9ib2R5CisgICAgYXNfZWNob19uPSdzaCAtYyAkYXNfZWNob19uX2JvZHkgYXNfZWNobycKKyAgZmkKKyAgZXhwb3J0IGFzX2VjaG9fYm9keQorICBhc19lY2hvPSdzaCAtYyAkYXNfZWNob19ib2R5IGFzX2VjaG8nCitmaQorCisjIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KK2lmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCisgIFBBVEhfU0VQQVJBVE9SPToKKyAgKFBBVEg9Jy9iaW47L2Jpbic7IEZQQVRIPSRQQVRIOyBzaCAtYyA6KSA+L2Rldi9udWxsIDI+JjEgJiYgeworICAgIChQQVRIPScvYmluOi9iaW4nOyBGUEFUSD0kUEFUSDsgc2ggLWMgOikgPi9kZXYvbnVsbCAyPiYxIHx8CisgICAgICBQQVRIX1NFUEFSQVRPUj0nOycKKyAgfQorZmkKKworCisjIElGUworIyBXZSBuZWVkIHNwYWNlLCB0YWIgYW5kIG5ldyBsaW5lLCBpbiBwcmVjaXNlbHkgdGhhdCBvcmRlci4gIFF1b3RpbmcgaXMKKyMgdGhlcmUgdG8gcHJldmVudCBlZGl0b3JzIGZyb20gY29tcGxhaW5pbmcgYWJvdXQgc3BhY2UtdGFiLgorIyAoSWYgX0FTX1BBVEhfV0FMSyB3ZXJlIGNhbGxlZCB3aXRoIElGUyB1bnNldCwgaXQgd291bGQgZGlzYWJsZSB3b3JkCisjIHNwbGl0dGluZyBieSBzZXR0aW5nIElGUyB0byBlbXB0eSB2YWx1ZS4pCitJRlM9IiAiIgkkYXNfbmwiCisKKyMgRmluZCB3aG8gd2UgYXJlLiAgTG9vayBpbiB0aGUgcGF0aCBpZiB3ZSBjb250YWluIG5vIGRpcmVjdG9yeSBzZXBhcmF0b3IuCithc19teXNlbGY9CitjYXNlICQwIGluICMoKAorICAqW1xcL10qICkgYXNfbXlzZWxmPSQwIDs7CisgICopIGFzX3NhdmVfSUZTPSRJRlM7IElGUz0kUEFUSF9TRVBBUkFUT1IKK2ZvciBhc19kaXIgaW4gJFBBVEgKK2RvCisgIElGUz0kYXNfc2F2ZV9JRlMKKyAgdGVzdCAteiAiJGFzX2RpciIgJiYgYXNfZGlyPS4KKyAgICB0ZXN0IC1yICIkYXNfZGlyLyQwIiAmJiBhc19teXNlbGY9JGFzX2Rpci8kMCAmJiBicmVhaworICBkb25lCitJRlM9JGFzX3NhdmVfSUZTCisKKyAgICAgOzsKK2VzYWMKKyMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKKyMgaW4gd2hpY2ggY2FzZSB3ZSBhcmUgbm90IHRvIGJlIGZvdW5kIGluIHRoZSBwYXRoLgoraWYgdGVzdCAieCRhc19teXNlbGYiID0geDsgdGhlbgorICBhc19teXNlbGY9JDAKK2ZpCitpZiB0ZXN0ICEgLWYgIiRhc19teXNlbGYiOyB0aGVuCisgICRhc19lY2hvICIkYXNfbXlzZWxmOiBlcnJvcjogY2Fubm90IGZpbmQgbXlzZWxmOyByZXJ1biB3aXRoIGFuIGFic29sdXRlIGZpbGUgbmFtZSIgPiYyCisgIGV4aXQgMQorZmkKKworIyBVbnNldCB2YXJpYWJsZXMgdGhhdCB3ZSBkbyBub3QgbmVlZCBhbmQgd2hpY2ggY2F1c2UgYnVncyAoZS5nLiBpbgorIyBwcmUtMy4wIFVXSU4ga3NoKS4gIEJ1dCBkbyBub3QgY2F1c2UgYnVncyBpbiBiYXNoIDIuMDE7IHRoZSAifHwgZXhpdCAxIgorIyBzdXBwcmVzc2VzIGFueSAiU2VnbWVudGF0aW9uIGZhdWx0IiBtZXNzYWdlIHRoZXJlLiAgJygoJyBjb3VsZAorIyB0cmlnZ2VyIGEgYnVnIGluIHBka3NoIDUuMi4xNC4KK2ZvciBhc192YXIgaW4gQkFTSF9FTlYgRU5WIE1BSUwgTUFJTFBBVEgKK2RvIGV2YWwgdGVzdCB4XCR7JGFzX3ZhcitzZXR9ID0geHNldCBcCisgICYmICggKHVuc2V0ICRhc192YXIpIHx8IGV4aXQgMSkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0ICRhc192YXIgfHwgOgorZG9uZQogUFMxPSckICcKIFBTMj0nPiAnCiBQUzQ9JysgJwogCiAjIE5MUyBudWlzYW5jZXMuCi1mb3IgYXNfdmFyIGluIFwKLSAgTEFORyBMQU5HVUFHRSBMQ19BRERSRVNTIExDX0FMTCBMQ19DT0xMQVRFIExDX0NUWVBFIExDX0lERU5USUZJQ0FUSU9OIFwKLSAgTENfTUVBU1VSRU1FTlQgTENfTUVTU0FHRVMgTENfTU9ORVRBUlkgTENfTkFNRSBMQ19OVU1FUklDIExDX1BBUEVSIFwKLSAgTENfVEVMRVBIT05FIExDX1RJTUUKLWRvCi0gIGlmIChzZXQgK3g7IHRlc3QgLXogImAoZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyKSAyPiYxYCIpOyB0aGVuCi0gICAgZXZhbCAkYXNfdmFyPUM7IGV4cG9ydCAkYXNfdmFyCi0gIGVsc2UKLSAgICAkYXNfdW5zZXQgJGFzX3ZhcgotICBmaQotZG9uZQorTENfQUxMPUMKK2V4cG9ydCBMQ19BTEwKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRQogCi0jIFJlcXVpcmVkIHRvIHVzZSBiYXNlbmFtZS4KLWlmIGV4cHIgYSA6ICdcKGFcKScgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisjIENEUEFUSC4KKyh1bnNldCBDRFBBVEgpID4vZGV2L251bGwgMj4mMSAmJiB1bnNldCBDRFBBVEgKKworCisjIGFzX2ZuX2Vycm9yIFNUQVRVUyBFUlJPUiBbTElORU5PIExPR19GRF0KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgImBiYXNlbmFtZSAkMGA6IGVycm9yOiBFUlJPUiIgdG8gc3RkZXJyLiBJZiBMSU5FTk8gYW5kIExPR19GRCBhcmUKKyMgcHJvdmlkZWQsIGFsc28gb3V0cHV0IHRoZSBlcnJvciB0byBMT0dfRkQsIHJlZmVyZW5jaW5nIExJTkVOTy4gVGhlbiBleGl0IHRoZQorIyBzY3JpcHQgd2l0aCBTVEFUVVMsIHVzaW5nIDEgaWYgdGhhdCB3YXMgMC4KK2FzX2ZuX2Vycm9yICgpCit7CisgIGFzX3N0YXR1cz0kMTsgdGVzdCAkYXNfc3RhdHVzIC1lcSAwICYmIGFzX3N0YXR1cz0xCisgIGlmIHRlc3QgIiQ0IjsgdGhlbgorICAgIGFzX2xpbmVubz0ke2FzX2xpbmVuby0iJDMifSBhc19saW5lbm9fc3RhY2s9YXNfbGluZW5vX3N0YWNrPSRhc19saW5lbm9fc3RhY2sKKyAgICAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBlcnJvcjogJDIiID4mJDQKKyAgZmkKKyAgJGFzX2VjaG8gIiRhc19tZTogZXJyb3I6ICQyIiA+JjIKKyAgYXNfZm5fZXhpdCAkYXNfc3RhdHVzCit9ICMgYXNfZm5fZXJyb3IKKworCisjIGFzX2ZuX3NldF9zdGF0dXMgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNldCAkPyB0byBTVEFUVVMsIHdpdGhvdXQgZm9ya2luZy4KK2FzX2ZuX3NldF9zdGF0dXMgKCkKK3sKKyAgcmV0dXJuICQxCit9ICMgYXNfZm5fc2V0X3N0YXR1cworCisjIGFzX2ZuX2V4aXQgU1RBVFVTCisjIC0tLS0tLS0tLS0tLS0tLS0tCisjIEV4aXQgdGhlIHNoZWxsIHdpdGggU1RBVFVTLCBldmVuIGluIGEgInRyYXAgMCIgb3IgInNldCAtZSIgY29udGV4dC4KK2FzX2ZuX2V4aXQgKCkKK3sKKyAgc2V0ICtlCisgIGFzX2ZuX3NldF9zdGF0dXMgJDEKKyAgZXhpdCAkMQorfSAjIGFzX2ZuX2V4aXQKKworIyBhc19mbl91bnNldCBWQVIKKyMgLS0tLS0tLS0tLS0tLS0tCisjIFBvcnRhYmx5IHVuc2V0IFZBUi4KK2FzX2ZuX3Vuc2V0ICgpCit7CisgIHsgZXZhbCAkMT07IHVuc2V0ICQxO30KK30KK2FzX3Vuc2V0PWFzX2ZuX3Vuc2V0CisjIGFzX2ZuX2FwcGVuZCBWQVIgVkFMVUUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBBcHBlbmQgdGhlIHRleHQgaW4gVkFMVUUgdG8gdGhlIGVuZCBvZiB0aGUgZGVmaW5pdGlvbiBjb250YWluZWQgaW4gVkFSLiBUYWtlCisjIGFkdmFudGFnZSBvZiBhbnkgc2hlbGwgb3B0aW1pemF0aW9ucyB0aGF0IGFsbG93IGFtb3J0aXplZCBsaW5lYXIgZ3Jvd3RoIG92ZXIKKyMgcmVwZWF0ZWQgYXBwZW5kcywgaW5zdGVhZCBvZiB0aGUgdHlwaWNhbCBxdWFkcmF0aWMgZ3Jvd3RoIHByZXNlbnQgaW4gbmFpdmUKKyMgaW1wbGVtZW50YXRpb25zLgoraWYgKGV2YWwgImFzX3Zhcj0xOyBhc192YXIrPTI7IHRlc3QgeFwkYXNfdmFyID0geDEyIikgMj4vZGV2L251bGw7IHRoZW4gOgorICBldmFsICdhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDErPVwkMgorICB9JworZWxzZQorICBhc19mbl9hcHBlbmQgKCkKKyAgeworICAgIGV2YWwgJDE9XCQkMVwkMgorICB9CitmaSAjIGFzX2ZuX2FwcGVuZAorCisjIGFzX2ZuX2FyaXRoIEFSRy4uLgorIyAtLS0tLS0tLS0tLS0tLS0tLS0KKyMgUGVyZm9ybSBhcml0aG1ldGljIGV2YWx1YXRpb24gb24gdGhlIEFSR3MsIGFuZCBzdG9yZSB0aGUgcmVzdWx0IGluIHRoZQorIyBnbG9iYWwgJGFzX3ZhbC4gVGFrZSBhZHZhbnRhZ2Ugb2Ygc2hlbGxzIHRoYXQgY2FuIGF2b2lkIGZvcmtzLiBUaGUgYXJndW1lbnRzCisjIG11c3QgYmUgcG9ydGFibGUgYWNyb3NzICQoKCkpIGFuZCBleHByLgoraWYgKGV2YWwgInRlc3QgXCQoKCAxICsgMSApKSA9IDIiKSAyPi9kZXYvbnVsbDsgdGhlbiA6CisgIGV2YWwgJ2FzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9JCgoICQqICkpCisgIH0nCitlbHNlCisgIGFzX2ZuX2FyaXRoICgpCisgIHsKKyAgICBhc192YWw9YGV4cHIgIiRAIiB8fCB0ZXN0ICQ/IC1lcSAxYAorICB9CitmaSAjIGFzX2ZuX2FyaXRoCisKKworaWYgZXhwciBhIDogJ1woYVwpJyA+L2Rldi9udWxsIDI+JjEgJiYKKyAgIHRlc3QgIlhgZXhwciAwMDAwMSA6ICcuKlwoLi4uXCknYCIgPSBYMDAxOyB0aGVuCiAgIGFzX2V4cHI9ZXhwcgogZWxzZQogICBhc19leHByPWZhbHNlCiBmaQogCi1pZiAoYmFzZW5hbWUgLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLyAyPiYxYCIgPSAiWC8iOyB0aGVuCitpZiAoYmFzZW5hbWUgLS0gLykgPi9kZXYvbnVsbCAyPiYxICYmIHRlc3QgIlhgYmFzZW5hbWUgLS0gLyAyPiYxYCIgPSAiWC8iOyB0aGVuCiAgIGFzX2Jhc2VuYW1lPWJhc2VuYW1lCiBlbHNlCiAgIGFzX2Jhc2VuYW1lPWZhbHNlCiBmaQogCitpZiAoYXNfZGlyPWBkaXJuYW1lIC0tIC9gICYmIHRlc3QgIlgkYXNfZGlyIiA9IFgvKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKyAgYXNfZGlybmFtZT1kaXJuYW1lCitlbHNlCisgIGFzX2Rpcm5hbWU9ZmFsc2UKK2ZpCiAKLSMgTmFtZSBvZiB0aGUgZXhlY3V0YWJsZS4KLWFzX21lPWAkYXNfYmFzZW5hbWUgIiQwIiB8fAorYXNfbWU9YCRhc19iYXNlbmFtZSAtLSAiJDAiIHx8CiAkYXNfZXhwciBYLyIkMCIgOiAnLiovXChbXi9dW14vXSpcKS8qJCcgXHwgXAogCSBYIiQwIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiQwIiA6ICdYXCgvXCkkJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYLyIkMCIgfAotICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXC9cKFwvXC9cKSQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXC9cKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKKwkgWCIkMCIgOiAnWFwoL1wpJyBcfCAuIDI+L2Rldi9udWxsIHx8CiskYXNfZWNobyBYLyIkMCIgfAorICAgIHNlZCAnL14uKlwvXChbXi9dW14vXSpcKVwvKiQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXC9cKFwvXCkuKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICBzLy4qLy4vOyBxJ2AKIAotCi0jIFBBVEggbmVlZHMgQ1IsIGFuZCBMSU5FTk8gbmVlZHMgQ1IgYW5kIFBBVEguCiAjIEF2b2lkIGRlcGVuZGluZyB1cG9uIENoYXJhY3RlciBSYW5nZXMuCiBhc19jcl9sZXR0ZXJzPSdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicKIGFzX2NyX0xFVFRFUlM9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJwpAQCAtNDk4ODAsMTQ4ICszMDIwMywxMjMgQEAKIGFzX2NyX2RpZ2l0cz0nMDEyMzQ1Njc4OScKIGFzX2NyX2FsbnVtPSRhc19jcl9MZXR0ZXJzJGFzX2NyX2RpZ2l0cwogCi0jIFRoZSB1c2VyIGlzIGFsd2F5cyByaWdodC4KLWlmIHRlc3QgIiR7UEFUSF9TRVBBUkFUT1Irc2V0fSIgIT0gc2V0OyB0aGVuCi0gIGVjaG8gIiMhIC9iaW4vc2giID5jb25mJCQuc2gKLSAgZWNobyAgImV4aXQgMCIgICA+PmNvbmYkJC5zaAotICBjaG1vZCAreCBjb25mJCQuc2gKLSAgaWYgKFBBVEg9Ii9ub25leGlzdGVudDsuIjsgY29uZiQkLnNoKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICBQQVRIX1NFUEFSQVRPUj0nOycKLSAgZWxzZQotICAgIFBBVEhfU0VQQVJBVE9SPToKLSAgZmkKLSAgcm0gLWYgY29uZiQkLnNoCi1maQotCi0KLSAgYXNfbGluZW5vXzE9JExJTkVOTwotICBhc19saW5lbm9fMj0kTElORU5PCi0gIGFzX2xpbmVub18zPWAoZXhwciAkYXNfbGluZW5vXzEgKyAxKSAyPi9kZXYvbnVsbGAKLSAgdGVzdCAieCRhc19saW5lbm9fMSIgIT0gIngkYXNfbGluZW5vXzIiICYmCi0gIHRlc3QgIngkYXNfbGluZW5vXzMiICA9ICJ4JGFzX2xpbmVub18yIiAgfHwgewotICAjIEZpbmQgd2hvIHdlIGFyZS4gIExvb2sgaW4gdGhlIHBhdGggaWYgd2UgY29udGFpbiBubyBwYXRoIGF0IGFsbAotICAjIHJlbGF0aXZlIG9yIG5vdC4KLSAgY2FzZSAkMCBpbgotICAgICpbXFwvXSogKSBhc19teXNlbGY9JDAgOzsKLSAgICAqKSBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluICRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIHRlc3QgLXIgIiRhc19kaXIvJDAiICYmIGFzX215c2VsZj0kYXNfZGlyLyQwICYmIGJyZWFrCi1kb25lCi0KLSAgICAgICA7OwotICBlc2FjCi0gICMgV2UgZGlkIG5vdCBmaW5kIG91cnNlbHZlcywgbW9zdCBwcm9iYWJseSB3ZSB3ZXJlIHJ1biBhcyBgc2ggQ09NTUFORCcKLSAgIyBpbiB3aGljaCBjYXNlIHdlIGFyZSBub3QgdG8gYmUgZm91bmQgaW4gdGhlIHBhdGguCi0gIGlmIHRlc3QgIngkYXNfbXlzZWxmIiA9IHg7IHRoZW4KLSAgICBhc19teXNlbGY9JDAKLSAgZmkKLSAgaWYgdGVzdCAhIC1mICIkYXNfbXlzZWxmIjsgdGhlbgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIG15c2VsZjsgcmVydW4gd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0gIGZpCi0gIGNhc2UgJENPTkZJR19TSEVMTCBpbgotICAnJykKLSAgICBhc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCi1mb3IgYXNfZGlyIGluIC9iaW4kUEFUSF9TRVBBUkFUT1IvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRICi1kbwotICBJRlM9JGFzX3NhdmVfSUZTCi0gIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCi0gIGZvciBhc19iYXNlIGluIHNoIGJhc2gga3NoIHNoNTsgZG8KLQkgY2FzZSAkYXNfZGlyIGluCi0JIC8qKQotCSAgIGlmICgiJGFzX2Rpci8kYXNfYmFzZSIgLWMgJwotICBhc19saW5lbm9fMT0kTElORU5PCi0gIGFzX2xpbmVub18yPSRMSU5FTk8KLSAgYXNfbGluZW5vXzM9YChleHByICRhc19saW5lbm9fMSArIDEpIDI+L2Rldi9udWxsYAotICB0ZXN0ICJ4JGFzX2xpbmVub18xIiAhPSAieCRhc19saW5lbm9fMiIgJiYKLSAgdGVzdCAieCRhc19saW5lbm9fMyIgID0gIngkYXNfbGluZW5vXzIiICcpIDI+L2Rldi9udWxsOyB0aGVuCi0JICAgICAkYXNfdW5zZXQgQkFTSF9FTlYgfHwgdGVzdCAiJHtCQVNIX0VOVitzZXR9IiAhPSBzZXQgfHwgeyBCQVNIX0VOVj07IGV4cG9ydCBCQVNIX0VOVjsgfQotCSAgICAgJGFzX3Vuc2V0IEVOViB8fCB0ZXN0ICIke0VOVitzZXR9IiAhPSBzZXQgfHwgeyBFTlY9OyBleHBvcnQgRU5WOyB9Ci0JICAgICBDT05GSUdfU0hFTEw9JGFzX2Rpci8kYXNfYmFzZQotCSAgICAgZXhwb3J0IENPTkZJR19TSEVMTAotCSAgICAgZXhlYyAiJENPTkZJR19TSEVMTCIgIiQwIiAkezErIiRAIn0KLQkgICBmaTs7Ci0JIGVzYWMKLSAgICAgICBkb25lCi1kb25lCi07OwotICBlc2FjCi0KLSAgIyBDcmVhdGUgJGFzX21lLmxpbmVubyBhcyBhIGNvcHkgb2YgJGFzX215c2VsZiwgYnV0IHdpdGggJExJTkVOTwotICAjIHVuaWZvcm1seSByZXBsYWNlZCBieSB0aGUgbGluZSBudW1iZXIuICBUaGUgZmlyc3QgJ3NlZCcgaW5zZXJ0cyBhCi0gICMgbGluZS1udW1iZXIgbGluZSBiZWZvcmUgZWFjaCBsaW5lOyB0aGUgc2Vjb25kICdzZWQnIGRvZXMgdGhlIHJlYWwKLSAgIyB3b3JrLiAgVGhlIHNlY29uZCBzY3JpcHQgdXNlcyAnTicgdG8gcGFpciBlYWNoIGxpbmUtbnVtYmVyIGxpbmUKLSAgIyB3aXRoIHRoZSBudW1iZXJlZCBsaW5lLCBhbmQgYXBwZW5kcyB0cmFpbGluZyAnLScgZHVyaW5nCi0gICMgc3Vic3RpdHV0aW9uIHNvIHRoYXQgJExJTkVOTyBpcyBub3QgYSBzcGVjaWFsIGNhc2UgYXQgbGluZSBlbmQuCi0gICMgKFJhamEgUiBIYXJpbmF0aCBzdWdnZXN0ZWQgc2VkICc9JywgYW5kIFBhdWwgRWdnZXJ0IHdyb3RlIHRoZQotICAjIHNlY29uZCAnc2VkJyBzY3JpcHQuICBCbGFtZSBMZWUgRS4gTWNNYWhvbiBmb3Igc2VkJ3Mgc3ludGF4LiAgOi0pCi0gIHNlZCAnPScgPCRhc19teXNlbGYgfAotICAgIHNlZCAnCi0gICAgICBOCi0gICAgICBzLCQsLSwKLSAgICAgIDogbG9vcAotICAgICAgcyxeXChbJyRhc19jcl9kaWdpdHMnXSpcKVwoLipcKVskXUxJTkVOT1woW14nJGFzX2NyX2FsbnVtJ19dXCksXDFcMlwxXDMsCi0gICAgICB0IGxvb3AKLSAgICAgIHMsLSQsLAotICAgICAgcyxeWyckYXNfY3JfZGlnaXRzJ10qXG4sLAotICAgICcgPiRhc19tZS5saW5lbm8gJiYKLSAgY2htb2QgK3ggJGFzX21lLmxpbmVubyB8fAotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBjcmVhdGUgJGFzX21lLmxpbmVubzsgcmVydW4gd2l0aCBhIFBPU0lYIHNoZWxsIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0KLSAgIyBEb24ndCB0cnkgdG8gZXhlYyBhcyBpdCBjaGFuZ2VzICRbMF0sIGNhdXNpbmcgYWxsIHNvcnQgb2YgcHJvYmxlbXMKLSAgIyAodGhlIGRpcm5hbWUgb2YgJFswXSBpcyBub3QgdGhlIHBsYWNlIHdoZXJlIHdlIG1pZ2h0IGZpbmQgdGhlCi0gICMgb3JpZ2luYWwgYW5kIHNvIG9uLiAgQXV0b2NvbmYgaXMgZXNwZWNpYWxseSBzZW5zaWJsZSB0byB0aGlzKS4KLSAgLiAuLyRhc19tZS5saW5lbm8KLSAgIyBFeGl0IHN0YXR1cyBpcyB0aGF0IG9mIHRoZSBsYXN0IGNvbW1hbmQuCi0gIGV4aXQKLX0KLQotCi1jYXNlIGBlY2hvICJ0ZXN0aW5nXGMiOyBlY2hvIDEsMiwzYCxgZWNobyAtbiB0ZXN0aW5nOyBlY2hvIDEsMiwzYCBpbgotICAqYyosLW4qKSBFQ0hPX049IEVDSE9fQz0nCi0nIEVDSE9fVD0nCScgOzsKLSAgKmMqLCogICkgRUNIT19OPS1uIEVDSE9fQz0gRUNIT19UPSA7OwotICAqKSAgICAgICBFQ0hPX049IEVDSE9fQz0nXGMnIEVDSE9fVD0gOzsKK0VDSE9fQz0gRUNIT19OPSBFQ0hPX1Q9CitjYXNlIGBlY2hvIC1uIHhgIGluICMoKCgoKAorLW4qKQorICBjYXNlIGBlY2hvICd4eVxjJ2AgaW4KKyAgKmMqKSBFQ0hPX1Q9JwknOzsJIyBFQ0hPX1QgaXMgc2luZ2xlIHRhYiBjaGFyYWN0ZXIuCisgIHh5KSAgRUNIT19DPSdcYyc7OworICAqKSAgIGVjaG8gYGVjaG8ga3NoODggYnVnIG9uIEFJWCA2LjFgID4gL2Rldi9udWxsCisgICAgICAgRUNIT19UPScJJzs7CisgIGVzYWM7OworKikKKyAgRUNIT19OPSctbic7OwogZXNhYwogCi1pZiBleHByIGEgOiAnXChhXCknID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBhc19leHByPWV4cHIKLWVsc2UKLSAgYXNfZXhwcj1mYWxzZQotZmkKLQogcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKLWVjaG8gPmNvbmYkJC5maWxlCi1pZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KLSAgIyBXZSBjb3VsZCBqdXN0IGNoZWNrIGZvciBESkdQUDsgYnV0IHRoaXMgdGVzdCBhKSB3b3JrcyBiKSBpcyBtb3JlIGdlbmVyaWMKLSAgIyBhbmQgYykgd2lsbCByZW1haW4gdmFsaWQgb25jZSBESkdQUCBzdXBwb3J0cyBzeW1saW5rcyAoREpHUFAgMi4wNCkuCi0gIGlmIHRlc3QgLWYgY29uZiQkLmV4ZTsgdGhlbgotICAgICMgRG9uJ3QgdXNlIGxuIGF0IGFsbDsgd2UgZG9uJ3QgaGF2ZSBhbnkgbGlua3MKLSAgICBhc19sbl9zPSdjcCAtcCcKLSAgZWxzZQoraWYgdGVzdCAtZCBjb25mJCQuZGlyOyB0aGVuCisgIHJtIC1mIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUKK2Vsc2UKKyAgcm0gLWYgY29uZiQkLmRpcgorICBta2RpciBjb25mJCQuZGlyIDI+L2Rldi9udWxsCitmaQoraWYgKGVjaG8gPmNvbmYkJC5maWxlKSAyPi9kZXYvbnVsbDsgdGhlbgorICBpZiBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KICAgICBhc19sbl9zPSdsbiAtcycKKyAgICAjIC4uLiBidXQgdGhlcmUgYXJlIHR3byBnb3RjaGFzOgorICAgICMgMSkgT24gTVNZUywgYm90aCBgbG4gLXMgZmlsZSBkaXInIGFuZCBgbG4gZmlsZSBkaXInIGZhaWwuCisgICAgIyAyKSBESkdQUCA8IDIuMDQgaGFzIG5vIHN5bWxpbmtzOyBgbG4gLXMnIGNyZWF0ZXMgYSB3cmFwcGVyIGV4ZWN1dGFibGUuCisgICAgIyBJbiBib3RoIGNhc2VzLCB3ZSBoYXZlIHRvIGRlZmF1bHQgdG8gYGNwIC1wJy4KKyAgICBsbiAtcyBjb25mJCQuZmlsZSBjb25mJCQuZGlyIDI+L2Rldi9udWxsICYmIHRlc3QgISAtZiBjb25mJCQuZXhlIHx8CisgICAgICBhc19sbl9zPSdjcCAtcCcKKyAgZWxpZiBsbiBjb25mJCQuZmlsZSBjb25mJCQgMj4vZGV2L251bGw7IHRoZW4KKyAgICBhc19sbl9zPWxuCisgIGVsc2UKKyAgICBhc19sbl9zPSdjcCAtcCcKICAgZmkKLWVsaWYgbG4gY29uZiQkLmZpbGUgY29uZiQkIDI+L2Rldi9udWxsOyB0aGVuCi0gIGFzX2xuX3M9bG4KIGVsc2UKICAgYXNfbG5fcz0nY3AgLXAnCiBmaQotcm0gLWYgY29uZiQkIGNvbmYkJC5leGUgY29uZiQkLmZpbGUKK3JtIC1mIGNvbmYkJCBjb25mJCQuZXhlIGNvbmYkJC5kaXIvY29uZiQkLmZpbGUgY29uZiQkLmZpbGUKK3JtZGlyIGNvbmYkJC5kaXIgMj4vZGV2L251bGwKIAorCisjIGFzX2ZuX21rZGlyX3AKKyMgLS0tLS0tLS0tLS0tLQorIyBDcmVhdGUgIiRhc19kaXIiIGFzIGEgZGlyZWN0b3J5LCBpbmNsdWRpbmcgcGFyZW50cyBpZiBuZWNlc3NhcnkuCithc19mbl9ta2Rpcl9wICgpCit7CisKKyAgY2FzZSAkYXNfZGlyIGluICMoCisgIC0qKSBhc19kaXI9Li8kYXNfZGlyOzsKKyAgZXNhYworICB0ZXN0IC1kICIkYXNfZGlyIiB8fCBldmFsICRhc19ta2Rpcl9wIHx8IHsKKyAgICBhc19kaXJzPQorICAgIHdoaWxlIDo7IGRvCisgICAgICBjYXNlICRhc19kaXIgaW4gIygKKyAgICAgICpcJyopIGFzX3FkaXI9YCRhc19lY2hvICIkYXNfZGlyIiB8IHNlZCAicy8nLydcXFxcXFxcXCcnL2ciYDs7ICMnKAorICAgICAgKikgYXNfcWRpcj0kYXNfZGlyOzsKKyAgICAgIGVzYWMKKyAgICAgIGFzX2RpcnM9IickYXNfcWRpcicgJGFzX2RpcnMiCisgICAgICBhc19kaXI9YCRhc19kaXJuYW1lIC0tICIkYXNfZGlyIiB8fAorJGFzX2V4cHIgWCIkYXNfZGlyIiA6ICdYXCguKlteL11cKS8vKlteL11bXi9dKi8qJCcgXHwgXAorCSBYIiRhc19kaXIiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJIFgiJGFzX2RpciIgOiAnWFwoLy9cKSQnIFx8IFwKKwkgWCIkYXNfZGlyIiA6ICdYXCgvXCknIFx8IC4gMj4vZGV2L251bGwgfHwKKyRhc19lY2hvIFgiJGFzX2RpciIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgICAgICB0ZXN0IC1kICIkYXNfZGlyIiAmJiBicmVhaworICAgIGRvbmUKKyAgICB0ZXN0IC16ICIkYXNfZGlycyIgfHwgZXZhbCAibWtkaXIgJGFzX2RpcnMiCisgIH0gfHwgdGVzdCAtZCAiJGFzX2RpciIgfHwgYXNfZm5fZXJyb3IgJD8gImNhbm5vdCBjcmVhdGUgZGlyZWN0b3J5ICRhc19kaXIiCisKKworfSAjIGFzX2ZuX21rZGlyX3AKIGlmIG1rZGlyIC1wIC4gMj4vZGV2L251bGw7IHRoZW4KLSAgYXNfbWtkaXJfcD06CisgIGFzX21rZGlyX3A9J21rZGlyIC1wICIkYXNfZGlyIicKIGVsc2UKICAgdGVzdCAtZCAuLy1wICYmIHJtZGlyIC4vLXAKICAgYXNfbWtkaXJfcD1mYWxzZQogZmkKIAotYXNfZXhlY3V0YWJsZV9wPSJ0ZXN0IC1mIgoraWYgdGVzdCAteCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBhc190ZXN0X3g9J3Rlc3QgLXgnCitlbHNlCisgIGlmIGxzIC1kTCAvID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgIGFzX2xzX0xfb3B0aW9uPUwKKyAgZWxzZQorICAgIGFzX2xzX0xfb3B0aW9uPQorICBmaQorICBhc190ZXN0X3g9JworICAgIGV2YWwgc2ggLWMgJ1wnJworICAgICAgaWYgdGVzdCAtZCAiJDEiOyB0aGVuCisJdGVzdCAtZCAiJDEvLiI7CisgICAgICBlbHNlCisJY2FzZSAkMSBpbiAjKAorCS0qKXNldCAiLi8kMSI7OworCWVzYWM7CisJY2FzZSBgbHMgLWxkJyRhc19sc19MX29wdGlvbicgIiQxIiAyPi9kZXYvbnVsbGAgaW4gIygoCisJPz8/W3N4XSopOjs7KilmYWxzZTs7ZXNhYztmaQorICAgICdcJycgc2gKKyAgJworZmkKK2FzX2V4ZWN1dGFibGVfcD0kYXNfdGVzdF94CiAKICMgU2VkIGV4cHJlc3Npb24gdG8gbWFwIGEgc3RyaW5nIG9udG8gYSB2YWxpZCBDUFAgbmFtZS4KIGFzX3RyX2NwcD0iZXZhbCBzZWQgJ3klKiRhc19jcl9sZXR0ZXJzJVAkYXNfY3JfTEVUVEVSUyU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCkBAIC01MDAzMCwzMSArMzAzMjgsMjAgQEAKIGFzX3RyX3NoPSJldmFsIHNlZCAneSUqKyVwcCU7cyVbXl8kYXNfY3JfYWxudW1dJV8lZyciCiAKIAotIyBJRlMKLSMgV2UgbmVlZCBzcGFjZSwgdGFiIGFuZCBuZXcgbGluZSwgaW4gcHJlY2lzZWx5IHRoYXQgb3JkZXIuCi1hc19ubD0nCi0nCi1JRlM9IiAJJGFzX25sIgotCi0jIENEUEFUSC4KLSRhc191bnNldCBDRFBBVEgKLQogZXhlYyA2PiYxCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgTWFpbiBib2R5IG9mICRDT05GSUdfU1RBVFVTIHNjcmlwdC4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCitfQVNFT0YKK3Rlc3QgJGFzX3dyaXRlX2ZhaWwgPSAwICYmIGNobW9kICt4ICRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQogCi0jIE9wZW4gdGhlIGxvZyByZWFsIHNvb24sIHRvIGtlZXAgXCRbMF0gYW5kIHNvIG9uIG1lYW5pbmdmdWwsIGFuZCB0bworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorIyBTYXZlIHRoZSBsb2cgbWVzc2FnZSwgdG8ga2VlcCAkMCBhbmQgc28gb24gbWVhbmluZ2Z1bCwgYW5kIHRvCiAjIHJlcG9ydCBhY3R1YWwgaW5wdXQgdmFsdWVzIG9mIENPTkZJR19GSUxFUyBldGMuIGluc3RlYWQgb2YgdGhlaXIKLSMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuICBMb2dnaW5nIC0tdmVyc2lvbiBldGMuIGlzIE9LLgotZXhlYyA1Pj5jb25maWcubG9nCi17Ci0gIGVjaG8KLSAgc2VkICdoO3MvLi8tL2c7cy9eLi4uLyMjIC87cy8uLi4kLyAjIy87cDt4O3A7eCcgPDxfQVNCT1gKLSMjIFJ1bm5pbmcgJGFzX21lLiAjIwotX0FTQk9YCi19ID4mNQotY2F0ID4mNSA8PF9DU0VPRgotCi1UaGlzIGZpbGUgd2FzIGV4dGVuZGVkIGJ5IE5ldC1TTk1QICRhc19tZSA1LjQuNCwgd2hpY2ggd2FzCi1nZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTkuICBJbnZvY2F0aW9uIGNvbW1hbmQgbGluZSB3YXMKKyMgdmFsdWVzIGFmdGVyIG9wdGlvbnMgaGFuZGxpbmcuCithY19sb2c9IgorVGhpcyBmaWxlIHdhcyBleHRlbmRlZCBieSBOZXQtU05NUCAkYXNfbWUgNS43LjMucmMxLCB3aGljaCB3YXMKK2dlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OC4gIEludm9jYXRpb24gY29tbWFuZCBsaW5lIHdhcwogCiAgIENPTkZJR19GSUxFUyAgICA9ICRDT05GSUdfRklMRVMKICAgQ09ORklHX0hFQURFUlMgID0gJENPTkZJR19IRUFERVJTCkBAIC01MDA2Miw0NSArMzAzNDksNDcgQEAKICAgQ09ORklHX0NPTU1BTkRTID0gJENPTkZJR19DT01NQU5EUwogICAkICQwICRACiAKLV9DU0VPRgotZWNobyAib24gYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgIiA+JjUKLWVjaG8gPiY1CitvbiBgKGhvc3RuYW1lIHx8IHVuYW1lIC1uKSAyPi9kZXYvbnVsbCB8IHNlZCAxcWAKKyIKKwogX0FDRU9GCiAKK2Nhc2UgJGFjX2NvbmZpZ19maWxlcyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfZmlsZXM7IHNoaWZ0OyBhY19jb25maWdfZmlsZXM9JCo7OworZXNhYworCitjYXNlICRhY19jb25maWdfaGVhZGVycyBpbiAqIgorIiopIHNldCB4ICRhY19jb25maWdfaGVhZGVyczsgc2hpZnQ7IGFjX2NvbmZpZ19oZWFkZXJzPSQqOzsKK2VzYWMKKworCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKICMgRmlsZXMgdGhhdCBjb25maWcuc3RhdHVzIHdhcyBtYWRlIGZvci4KLWlmIHRlc3QgLW4gIiRhY19jb25maWdfZmlsZXMiOyB0aGVuCi0gIGVjaG8gImNvbmZpZ19maWxlcz1cIiRhY19jb25maWdfZmlsZXNcIiIgPj4kQ09ORklHX1NUQVRVUwotZmkKK2NvbmZpZ19maWxlcz0iJGFjX2NvbmZpZ19maWxlcyIKK2NvbmZpZ19oZWFkZXJzPSIkYWNfY29uZmlnX2hlYWRlcnMiCitjb25maWdfY29tbWFuZHM9IiRhY19jb25maWdfY29tbWFuZHMiCiAKLWlmIHRlc3QgLW4gIiRhY19jb25maWdfaGVhZGVycyI7IHRoZW4KLSAgZWNobyAiY29uZmlnX2hlYWRlcnM9XCIkYWNfY29uZmlnX2hlYWRlcnNcIiIgPj4kQ09ORklHX1NUQVRVUwotZmkKK19BQ0VPRgogCi1pZiB0ZXN0IC1uICIkYWNfY29uZmlnX2xpbmtzIjsgdGhlbgotICBlY2hvICJjb25maWdfbGlua3M9XCIkYWNfY29uZmlnX2xpbmtzXCIiID4+JENPTkZJR19TVEFUVVMKLWZpCi0KLWlmIHRlc3QgLW4gIiRhY19jb25maWdfY29tbWFuZHMiOyB0aGVuCi0gIGVjaG8gImNvbmZpZ19jb21tYW5kcz1cIiRhY19jb25maWdfY29tbWFuZHNcIiIgPj4kQ09ORklHX1NUQVRVUwotZmkKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIGFjX2NzX3VzYWdlPSJcCi1cYCRhc19tZScgaW5zdGFudGlhdGVzIGZpbGVzIGZyb20gdGVtcGxhdGVzIGFjY29yZGluZyB0byB0aGUKLWN1cnJlbnQgY29uZmlndXJhdGlvbi4KK1xgJGFzX21lJyBpbnN0YW50aWF0ZXMgZmlsZXMgYW5kIG90aGVyIGNvbmZpZ3VyYXRpb24gYWN0aW9ucworZnJvbSB0ZW1wbGF0ZXMgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uICBVbmxlc3MgdGhlIGZpbGVzCithbmQgYWN0aW9ucyBhcmUgc3BlY2lmaWVkIGFzIFRBR3MsIGFsbCBhcmUgaW5zdGFudGlhdGVkIGJ5IGRlZmF1bHQuCiAKLVVzYWdlOiAkMCBbT1BUSU9OU10gW0ZJTEVdLi4uCitVc2FnZTogJDAgW09QVElPTl0uLi4gW1RBR10uLi4KIAogICAtaCwgLS1oZWxwICAgICAgIHByaW50IHRoaXMgaGVscCwgdGhlbiBleGl0Ci0gIC1WLCAtLXZlcnNpb24gICAgcHJpbnQgdmVyc2lvbiBudW1iZXIsIHRoZW4gZXhpdAotICAtcSwgLS1xdWlldCAgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtViwgLS12ZXJzaW9uICAgIHByaW50IHZlcnNpb24gbnVtYmVyIGFuZCBjb25maWd1cmF0aW9uIHNldHRpbmdzLCB0aGVuIGV4aXQKKyAgICAgIC0tY29uZmlnICAgICBwcmludCBjb25maWd1cmF0aW9uLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQsIC0tc2lsZW50CisgICAgICAgICAgICAgICAgICAgZG8gbm90IHByaW50IHByb2dyZXNzIG1lc3NhZ2VzCiAgIC1kLCAtLWRlYnVnICAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcwogICAgICAgLS1yZWNoZWNrICAgIHVwZGF0ZSAkYXNfbWUgYnkgcmVjb25maWd1cmluZyBpbiB0aGUgc2FtZSBjb25kaXRpb25zCi0gIC0tZmlsZT1GSUxFWzpURU1QTEFURV0KLQkJICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBGSUxFCi0gIC0taGVhZGVyPUZJTEVbOlRFTVBMQVRFXQotCQkgICBpbnN0YW50aWF0ZSB0aGUgY29uZmlndXJhdGlvbiBoZWFkZXIgRklMRQorICAgICAgLS1maWxlPUZJTEVbOlRFTVBMQVRFXQorICAgICAgICAgICAgICAgICAgIGluc3RhbnRpYXRlIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgRklMRQorICAgICAgLS1oZWFkZXI9RklMRVs6VEVNUExBVEVdCisgICAgICAgICAgICAgICAgICAgaW5zdGFudGlhdGUgdGhlIGNvbmZpZ3VyYXRpb24gaGVhZGVyIEZJTEUKIAogQ29uZmlndXJhdGlvbiBmaWxlczoKICRjb25maWdfZmlsZXMKQEAgLTUwMTExLDg0ICszMDQwMCw5MSBAQAogQ29uZmlndXJhdGlvbiBjb21tYW5kczoKICRjb25maWdfY29tbWFuZHMKIAotUmVwb3J0IGJ1Z3MgdG8gPGJ1Zy1hdXRvY29uZkBnbnUub3JnPi4iCitSZXBvcnQgYnVncyB0byA8bmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldD4uIgorCiBfQUNFT0YKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfY3NfY29uZmlnPSJgJGFzX2VjaG8gIiRhY19jb25maWd1cmVfYXJncyIgfCBzZWQgJ3MvXiAvLzsgcy9bXFwiIlxgXCRdL1xcXFwmL2cnYCIKIGFjX2NzX3ZlcnNpb249IlxcCi1OZXQtU05NUCBjb25maWcuc3RhdHVzIDUuNC40Ci1jb25maWd1cmVkIGJ5ICQwLCBnZW5lcmF0ZWQgYnkgR05VIEF1dG9jb25mIDIuNTksCi0gIHdpdGggb3B0aW9ucyBcXCJgZWNobyAiJGFjX2NvbmZpZ3VyZV9hcmdzIiB8IHNlZCAncy9bXFwiIlxgXCRdL1xcXFwmL2cnYFxcIgorTmV0LVNOTVAgY29uZmlnLnN0YXR1cyA1LjcuMy5yYzEKK2NvbmZpZ3VyZWQgYnkgJDAsIGdlbmVyYXRlZCBieSBHTlUgQXV0b2NvbmYgMi42OCwKKyAgd2l0aCBvcHRpb25zIFxcIlwkYWNfY3NfY29uZmlnXFwiCiAKLUNvcHlyaWdodCAoQykgMjAwMyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KIFRoaXMgY29uZmlnLnN0YXR1cyBzY3JpcHQgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbgogZ2l2ZXMgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LiIKLXNyY2Rpcj0kc3JjZGlyCi1JTlNUQUxMPSIkSU5TVEFMTCIKKworYWNfcHdkPSckYWNfcHdkJworc3JjZGlyPSckc3JjZGlyJworSU5TVEFMTD0nJElOU1RBTEwnCitBV0s9JyRBV0snCit0ZXN0IC1uICJcJEFXSyIgfHwgQVdLPWF3awogX0FDRU9GCiAKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotIyBJZiBubyBmaWxlIGFyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIsIHRoZW4gd2UgbmVlZCB0byBwcm92aWRlIGRlZmF1bHQKLSMgdmFsdWUuICBCeSB3ZSBuZWVkIHRvIGtub3cgaWYgZmlsZXMgd2VyZSBzcGVjaWZpZWQgYnkgdGhlIHVzZXIuCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIFRoZSBkZWZhdWx0IGxpc3RzIGFwcGx5IGlmIHRoZSB1c2VyIGRvZXMgbm90IHNwZWNpZnkgYW55IGZpbGUuCiBhY19uZWVkX2RlZmF1bHRzPToKIHdoaWxlIHRlc3QgJCMgIT0gMAogZG8KICAgY2FzZSAkMSBpbgotICAtLSo9KikKLSAgICBhY19vcHRpb249YGV4cHIgIngkMSIgOiAneFwoW149XSpcKT0nYAotICAgIGFjX29wdGFyZz1gZXhwciAieCQxIiA6ICd4W149XSo9XCguKlwpJ2AKKyAgLS0qPT8qKQorICAgIGFjX29wdGlvbj1gZXhwciAiWCQxIiA6ICdYXChbXj1dKlwpPSdgCisgICAgYWNfb3B0YXJnPWBleHByICJYJDEiIDogJ1hbXj1dKj1cKC4qXCknYAogICAgIGFjX3NoaWZ0PToKICAgICA7OwotICAtKikKKyAgLS0qPSkKKyAgICBhY19vcHRpb249YGV4cHIgIlgkMSIgOiAnWFwoW149XSpcKT0nYAorICAgIGFjX29wdGFyZz0KKyAgICBhY19zaGlmdD06CisgICAgOzsKKyAgKikKICAgICBhY19vcHRpb249JDEKICAgICBhY19vcHRhcmc9JDIKICAgICBhY19zaGlmdD1zaGlmdAogICAgIDs7Ci0gICopICMgVGhpcyBpcyBub3QgYW4gb3B0aW9uLCBzbyB0aGUgdXNlciBoYXMgcHJvYmFibHkgZ2l2ZW4gZXhwbGljaXQKLSAgICAgIyBhcmd1bWVudHMuCi0gICAgIGFjX29wdGlvbj0kMQotICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlOzsKICAgZXNhYwogCiAgIGNhc2UgJGFjX29wdGlvbiBpbgogICAjIEhhbmRsaW5nIG9mIHRoZSBvcHRpb25zLgotX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKICAgLXJlY2hlY2sgfCAtLXJlY2hlY2sgfCAtLXJlY2hlYyB8IC0tcmVjaGUgfCAtLXJlY2ggfCAtLXJlYyB8IC0tcmUgfCAtLXIpCiAgICAgYWNfY3NfcmVjaGVjaz06IDs7Ci0gIC0tdmVyc2lvbiB8IC0tdmVycyogfCAtViApCi0gICAgZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDAgOzsKLSAgLS1oZSB8IC0taCkKLSAgICAjIENvbmZsaWN0IGJldHdlZW4gLS1oZWxwIGFuZCAtLWhlYWRlcgotICAgIHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGFtYmlndW91cyBvcHRpb246ICQxCi1UcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBhbWJpZ3VvdXMgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07OwotICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKLSAgICBlY2hvICIkYWNfY3NfdXNhZ2UiOyBleGl0IDAgOzsKLSAgLS1kZWJ1ZyB8IC0tZCogfCAtZCApCisgIC0tdmVyc2lvbiB8IC0tdmVyc2lvIHwgLS12ZXJzaSB8IC0tdmVycyB8IC0tdmVyIHwgLS12ZSB8IC0tdiB8IC1WICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3ZlcnNpb24iOyBleGl0IDs7CisgIC0tY29uZmlnIHwgLS1jb25maSB8IC0tY29uZiB8IC0tY29uIHwgLS1jbyB8IC0tYyApCisgICAgJGFzX2VjaG8gIiRhY19jc19jb25maWciOyBleGl0IDs7CisgIC0tZGVidWcgfCAtLWRlYnUgfCAtLWRlYiB8IC0tZGUgfCAtLWQgfCAtZCApCiAgICAgZGVidWc9OiA7OwogICAtLWZpbGUgfCAtLWZpbCB8IC0tZmkgfCAtLWYgKQogICAgICRhY19zaGlmdAotICAgIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyAkYWNfb3B0YXJnIgorICAgIGNhc2UgJGFjX29wdGFyZyBpbgorICAgICpcJyopIGFjX29wdGFyZz1gJGFzX2VjaG8gIiRhY19vcHRhcmciIHwgc2VkICJzLycvJ1xcXFxcXFxcJycvZyJgIDs7CisgICAgJycpIGFzX2ZuX2Vycm9yICQ/ICJtaXNzaW5nIGZpbGUgYXJndW1lbnQiIDs7CisgICAgZXNhYworICAgIGFzX2ZuX2FwcGVuZCBDT05GSUdfRklMRVMgIiAnJGFjX29wdGFyZyciCiAgICAgYWNfbmVlZF9kZWZhdWx0cz1mYWxzZTs7CiAgIC0taGVhZGVyIHwgLS1oZWFkZSB8IC0taGVhZCB8IC0taGVhICkKICAgICAkYWNfc2hpZnQKLSAgICBDT05GSUdfSEVBREVSUz0iJENPTkZJR19IRUFERVJTICRhY19vcHRhcmciCisgICAgY2FzZSAkYWNfb3B0YXJnIGluCisgICAgKlwnKikgYWNfb3B0YXJnPWAkYXNfZWNobyAiJGFjX29wdGFyZyIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImAgOzsKKyAgICBlc2FjCisgICAgYXNfZm5fYXBwZW5kIENPTkZJR19IRUFERVJTICIgJyRhY19vcHRhcmcnIgogICAgIGFjX25lZWRfZGVmYXVsdHM9ZmFsc2U7OworICAtLWhlIHwgLS1oKQorICAgICMgQ29uZmxpY3QgYmV0d2VlbiAtLWhlbHAgYW5kIC0taGVhZGVyCisgICAgYXNfZm5fZXJyb3IgJD8gImFtYmlndW91cyBvcHRpb246IFxgJDEnCitUcnkgXGAkMCAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiI7OworICAtLWhlbHAgfCAtLWhlbCB8IC1oICkKKyAgICAkYXNfZWNobyAiJGFjX2NzX3VzYWdlIjsgZXhpdCA7OwogICAtcSB8IC1xdWlldCB8IC0tcXVpZXQgfCAtLXF1aWUgfCAtLXF1aSB8IC0tcXUgfCAtLXEgXAogICB8IC1zaWxlbnQgfCAtLXNpbGVudCB8IC0tc2lsZW4gfCAtLXNpbGUgfCAtLXNpbCB8IC0tc2kgfCAtLXMpCiAgICAgYWNfY3Nfc2lsZW50PTogOzsKIAogICAjIFRoaXMgaXMgYW4gZXJyb3IuCi0gIC0qKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiB1bnJlY29nbml6ZWQgb3B0aW9uOiAkMQotVHJ5IFxgJDAgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbjogJDEKLVRyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9IDs7CisgIC0qKSBhc19mbl9lcnJvciAkPyAidW5yZWNvZ25pemVkIG9wdGlvbjogXGAkMScKK1RyeSBcYCQwIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiA7OwogCi0gICopIGFjX2NvbmZpZ190YXJnZXRzPSIkYWNfY29uZmlnX3RhcmdldHMgJDEiIDs7CisgICopIGFzX2ZuX2FwcGVuZCBhY19jb25maWdfdGFyZ2V0cyAiICQxIgorICAgICBhY19uZWVkX2RlZmF1bHRzPWZhbHNlIDs7CiAKICAgZXNhYwogICBzaGlmdApAQCAtNTAyMDIsNDMgKzMwNDk4LDM0NCBAQAogZmkKIAogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCiBpZiBcJGFjX2NzX3JlY2hlY2s7IHRoZW4KLSAgZWNobyAicnVubmluZyAkU0hFTEwgJDAgIiAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAiIC0tbm8tY3JlYXRlIC0tbm8tcmVjdXJzaW9uIiA+JjYKLSAgZXhlYyAkU0hFTEwgJDAgJGFjX2NvbmZpZ3VyZV9hcmdzIFwkYWNfY29uZmlndXJlX2V4dHJhX2FyZ3MgLS1uby1jcmVhdGUgLS1uby1yZWN1cnNpb24KKyAgc2V0IFggJyRTSEVMTCcgJyQwJyAkYWNfY29uZmlndXJlX2FyZ3MgXCRhY19jb25maWd1cmVfZXh0cmFfYXJncyAtLW5vLWNyZWF0ZSAtLW5vLXJlY3Vyc2lvbgorICBzaGlmdAorICBcJGFzX2VjaG8gInJ1bm5pbmcgQ09ORklHX1NIRUxMPSRTSEVMTCBcJCoiID4mNgorICBDT05GSUdfU0hFTEw9JyRTSEVMTCcKKyAgZXhwb3J0IENPTkZJR19TSEVMTAorICBleGVjICJcJEAiCiBmaQogCiBfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2V4ZWMgNT4+Y29uZmlnLmxvZworeworICBlY2hvCisgIHNlZCAnaDtzLy4vLS9nO3MvXi4uLi8jIyAvO3MvLi4uJC8gIyMvO3A7eDtwO3gnIDw8X0FTQk9YCisjIyBSdW5uaW5nICRhc19tZS4gIyMKK19BU0JPWAorICAkYXNfZWNobyAiJGFjX2xvZyIKK30gPiY1CisKK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjCisjIElOSVQtQ09NTUFORFMKKyMKKworCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCitkb3VibGVfcXVvdGVfc3Vic3Q9JyRkb3VibGVfcXVvdGVfc3Vic3QnCitkZWxheV92YXJpYWJsZV9zdWJzdD0nJGRlbGF5X3ZhcmlhYmxlX3N1YnN0JworbWFjcm9fdmVyc2lvbj0nYCRFQ0hPICIkbWFjcm9fdmVyc2lvbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCittYWNyb19yZXZpc2lvbj0nYCRFQ0hPICIkbWFjcm9fcmV2aXNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVM9J2AkRUNITyAiJEFTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RMTFRPT0w9J2AkRUNITyAiJERMTFRPT0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworT0JKRFVNUD0nYCRFQ0hPICIkT0JKRFVNUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfc2hhcmVkPSdgJEVDSE8gIiRlbmFibGVfc2hhcmVkIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zdGF0aWM9J2AkRUNITyAiJGVuYWJsZV9zdGF0aWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcGljX21vZGU9J2AkRUNITyAiJHBpY19tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9mYXN0X2luc3RhbGw9J2AkRUNITyAiJGVuYWJsZV9mYXN0X2luc3RhbGwiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0hFTEw9J2AkRUNITyAiJFNIRUxMIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VDSE89J2AkRUNITyAiJEVDSE8iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaG9zdF9hbGlhcz0nYCRFQ0hPICIkaG9zdF9hbGlhcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitob3N0PSdgJEVDSE8gIiRob3N0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hvc3Rfb3M9J2AkRUNITyAiJGhvc3Rfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYnVpbGRfYWxpYXM9J2AkRUNITyAiJGJ1aWxkX2FsaWFzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2J1aWxkPSdgJEVDSE8gIiRidWlsZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitidWlsZF9vcz0nYCRFQ0hPICIkYnVpbGRfb3MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworU0VEPSdgJEVDSE8gIiRTRUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworWHNlZD0nYCRFQ0hPICIkWHNlZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitHUkVQPSdgJEVDSE8gIiRHUkVQIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0VHUkVQPSdgJEVDSE8gIiRFR1JFUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitGR1JFUD0nYCRFQ0hPICIkRkdSRVAiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTEQ9J2AkRUNITyAiJExEIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK05NPSdgJEVDSE8gIiROTSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMTl9TPSdgJEVDSE8gIiRMTl9TIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21heF9jbWRfbGVuPSdgJEVDSE8gIiRtYXhfY21kX2xlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithY19vYmpleHQ9J2AkRUNITyAiJGFjX29iamV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGVleHQ9J2AkRUNITyAiJGV4ZWV4dCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF91bnNldD0nYCRFQ0hPICIkbHRfdW5zZXQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfU1AyTkw9J2AkRUNITyAiJGx0X1NQMk5MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X05MMlNQPSdgJEVDSE8gIiRsdF9OTDJTUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl90b19ob3N0X2ZpbGVfY21kPSdgJEVDSE8gIiRsdF9jdl90b19ob3N0X2ZpbGVfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9J2AkRUNITyAiJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcmVsb2FkX2ZsYWc9J2AkRUNITyAiJHJlbG9hZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3JlbG9hZF9jbWRzPSdgJEVDSE8gIiRyZWxvYWRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitkZXBsaWJzX2NoZWNrX21ldGhvZD0nYCRFQ0hPICIkZGVwbGlic19jaGVja19tZXRob2QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmlsZV9tYWdpY19jbWQ9J2AkRUNITyAiJGZpbGVfbWFnaWNfY21kIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbWFnaWNfZ2xvYj0nYCRFQ0hPICIkZmlsZV9tYWdpY19nbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dhbnRfbm9jYXNlZ2xvYj0nYCRFQ0hPICIkd2FudF9ub2Nhc2VnbG9iIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSdgJEVDSE8gIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitBUj0nYCRFQ0hPICIkQVIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworQVJfRkxBR1M9J2AkRUNITyAiJEFSX0ZMQUdTIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVyX2xpc3Rfc3BlYz0nYCRFQ0hPICIkYXJjaGl2ZXJfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK1NUUklQPSdgJEVDSE8gIiRTVFJJUCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitSQU5MSUI9J2AkRUNITyAiJFJBTkxJQiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfcG9zdGluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0nYCRFQ0hPICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitvbGRfYXJjaGl2ZV9jbWRzPSdgJEVDSE8gIiRvbGRfYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj0nYCRFQ0hPICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0NDPSdgJEVDSE8gIiRDQyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitDRkxBR1M9J2AkRUNITyAiJENGTEFHUyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitjb21waWxlcj0nYCRFQ0hPICIkY29tcGlsZXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworR0NDPSdgJEVDSE8gIiRHQ0MiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbD0nYCRFQ0hPICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3M9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXg9J2AkRUNITyAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm1fZmlsZV9saXN0X3NwZWM9J2AkRUNITyAiJG5tX2ZpbGVfbGlzdF9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3N5c3Jvb3Q9J2AkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2JqZGlyPSdgJEVDSE8gIiRvYmpkaXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworTUFHSUNfQ01EPSdgJEVDSE8gIiRNQUdJQ19DTUQiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWc9J2AkRUNITyAiJGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfcGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3BpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9wcm9nX2NvbXBpbGVyX3dsPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3dsIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2x0X3Byb2dfY29tcGlsZXJfc3RhdGljPSdgJEVDSE8gIiRsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitsdF9jdl9wcm9nX2NvbXBpbGVyX2Nfbz0nYCRFQ0hPICIkbHRfY3ZfcHJvZ19jb21waWxlcl9jX28iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9sb2Nrcz0nYCRFQ0hPICIkbmVlZF9sb2NrcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitNQU5JRkVTVF9UT09MPSdgJEVDSE8gIiRNQU5JRkVTVF9UT09MIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK0RTWU1VVElMPSdgJEVDSE8gIiREU1lNVVRJTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitOTUVESVQ9J2AkRUNITyAiJE5NRURJVCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitMSVBPPSdgJEVDSE8gIiRMSVBPIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK09UT09MPSdgJEVDSE8gIiRPVE9PTCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitPVE9PTDY0PSdgJEVDSE8gIiRPVE9PTDY0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpYmV4dD0nYCRFQ0hPICIkbGliZXh0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NocmV4dF9jbWRzPSdgJEVDSE8gIiRzaHJleHRfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleHRyYWN0X2V4cHN5bXNfY21kcz0nYCRFQ0hPICIkZXh0cmFjdF9leHBzeW1zX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYXJjaGl2ZV9jbWRzX25lZWRfbGM9J2AkRUNITyAiJGFyY2hpdmVfY21kc19uZWVkX2xjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXM9J2AkRUNITyAiJGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSdgJEVDSE8gIiRleHBvcnRfZHluYW1pY19mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJword2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWM9J2AkRUNITyAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2NvbXBpbGVyX25lZWRzX29iamVjdD0nYCRFQ0hPICIkY29tcGlsZXJfbmVlZHNfb2JqZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHM9J2AkRUNITyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfY21kcz0nYCRFQ0hPICIkYXJjaGl2ZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2FyY2hpdmVfZXhwc3ltX2NtZHM9J2AkRUNITyAiJGFyY2hpdmVfZXhwc3ltX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbW9kdWxlX2NtZHM9J2AkRUNITyAiJG1vZHVsZV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK21vZHVsZV9leHBzeW1fY21kcz0nYCRFQ0hPICIkbW9kdWxlX2V4cHN5bV9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3dpdGhfZ251X2xkPSdgJEVDSE8gIiR3aXRoX2dudV9sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCithbGxvd191bmRlZmluZWRfZmxhZz0nYCRFQ0hPICIkYWxsb3dfdW5kZWZpbmVkX2ZsYWciIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbm9fdW5kZWZpbmVkX2ZsYWc9J2AkRUNITyAiJG5vX3VuZGVmaW5lZF9mbGFnIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWM9J2AkRUNITyAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0nYCRFQ0hPICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSdgJEVDSE8gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdD0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZT0nYCRFQ0hPICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2hhcmRjb2RlX21pbnVzX0w9J2AkRUNITyAiJGhhcmRjb2RlX21pbnVzX0wiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcj0nYCRFQ0hPICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9hdXRvbWF0aWM9J2AkRUNITyAiJGhhcmRjb2RlX2F1dG9tYXRpYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmhlcml0X3JwYXRoPSdgJEVDSE8gIiRpbmhlcml0X3JwYXRoIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2xpbmtfYWxsX2RlcGxpYnM9J2AkRUNITyAiJGxpbmtfYWxsX2RlcGxpYnMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworYWx3YXlzX2V4cG9ydF9zeW1ib2xzPSdgJEVDSE8gIiRhbHdheXNfZXhwb3J0X3N5bWJvbHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZXhwb3J0X3N5bWJvbHNfY21kcz0nYCRFQ0hPICIkZXhwb3J0X3N5bWJvbHNfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitleGNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGV4Y2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitpbmNsdWRlX2V4cHN5bXM9J2AkRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwcmVsaW5rX2NtZHM9J2AkRUNITyAiJHByZWxpbmtfY21kcyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitwb3N0bGlua19jbWRzPSdgJEVDSE8gIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbGVfbGlzdF9zcGVjPSdgJEVDSE8gIiRmaWxlX2xpc3Rfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0nYCRFQ0hPICIkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF9saWJfcHJlZml4PSdgJEVDSE8gIiRuZWVkX2xpYl9wcmVmaXgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbmVlZF92ZXJzaW9uPSdgJEVDSE8gIiRuZWVkX3ZlcnNpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJwordmVyc2lvbl90eXBlPSdgJEVDSE8gIiR2ZXJzaW9uX3R5cGUiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcnVucGF0aF92YXI9J2AkRUNITyAiJHJ1bnBhdGhfdmFyIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3NobGlicGF0aF92YXI9J2AkRUNITyAiJHNobGlicGF0aF92YXIiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPSdgJEVDSE8gIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlibmFtZV9zcGVjPSdgJEVDSE8gIiRsaWJuYW1lX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworbGlicmFyeV9uYW1lc19zcGVjPSdgJEVDSE8gIiRsaWJyYXJ5X25hbWVzX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworc29uYW1lX3NwZWM9J2AkRUNITyAiJHNvbmFtZV9zcGVjIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2luc3RhbGxfb3ZlcnJpZGVfbW9kZT0nYCRFQ0hPICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3Bvc3RpbnN0YWxsX2NtZHM9J2AkRUNITyAiJHBvc3RpbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworcG9zdHVuaW5zdGFsbF9jbWRzPSdgJEVDSE8gIiRwb3N0dW5pbnN0YWxsX2NtZHMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZmluaXNoX2NtZHM9J2AkRUNITyAiJGZpbmlzaF9jbWRzIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK2ZpbmlzaF9ldmFsPSdgJEVDSE8gIiRmaW5pc2hfZXZhbCIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitoYXJkY29kZV9pbnRvX2xpYnM9J2AkRUNITyAiJGhhcmRjb2RlX2ludG9fbGlicyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9J2AkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0nYCRFQ0hPICIkc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworaGFyZGNvZGVfYWN0aW9uPSdgJEVDSE8gIiRoYXJkY29kZV9hY3Rpb24iIHwgJFNFRCAiJGRlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdCJgJworZW5hYmxlX2Rsb3Blbj0nYCRFQ0hPICIkZW5hYmxlX2Rsb3BlbiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGY9J2AkRUNITyAiJGVuYWJsZV9kbG9wZW5fc2VsZiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCitlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSdgJEVDSE8gIiRlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK29sZF9zdHJpcGxpYj0nYCRFQ0hPICIkb2xkX3N0cmlwbGliIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK3N0cmlwbGliPSdgJEVDSE8gIiRzdHJpcGxpYiIgfCAkU0VEICIkZGVsYXlfc2luZ2xlX3F1b3RlX3N1YnN0ImAnCisKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJDEKK19MVEVDSE9fRU9GJworfQorCisjIFF1b3RlIGV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBBUyBcCitETExUT09MIFwKK09CSkRVTVAgXAorU0hFTEwgXAorRUNITyBcCitTRUQgXAorR1JFUCBcCitFR1JFUCBcCitGR1JFUCBcCitMRCBcCitOTSBcCitMTl9TIFwKK2x0X1NQMk5MIFwKK2x0X05MMlNQIFwKK3JlbG9hZF9mbGFnIFwKK2RlcGxpYnNfY2hlY2tfbWV0aG9kIFwKK2ZpbGVfbWFnaWNfY21kIFwKK2ZpbGVfbWFnaWNfZ2xvYiBcCit3YW50X25vY2FzZWdsb2IgXAorc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQgXAorQVIgXAorQVJfRkxBR1MgXAorYXJjaGl2ZXJfbGlzdF9zcGVjIFwKK1NUUklQIFwKK1JBTkxJQiBcCitDQyBcCitDRkxBR1MgXAorY29tcGlsZXIgXAorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyBcCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4IFwKK25tX2ZpbGVfbGlzdF9zcGVjIFwKK2x0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnIFwKK2x0X3Byb2dfY29tcGlsZXJfcGljIFwKK2x0X3Byb2dfY29tcGlsZXJfd2wgXAorbHRfcHJvZ19jb21waWxlcl9zdGF0aWMgXAorbHRfY3ZfcHJvZ19jb21waWxlcl9jX28gXAorbmVlZF9sb2NrcyBcCitNQU5JRkVTVF9UT09MIFwKK0RTWU1VVElMIFwKK05NRURJVCBcCitMSVBPIFwKK09UT09MIFwKK09UT09MNjQgXAorc2hyZXh0X2NtZHMgXAorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIFwKK3dob2xlX2FyY2hpdmVfZmxhZ19zcGVjIFwKK2NvbXBpbGVyX25lZWRzX29iamVjdCBcCit3aXRoX2dudV9sZCBcCithbGxvd191bmRlZmluZWRfZmxhZyBcCitub191bmRlZmluZWRfZmxhZyBcCitoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIFwKK2hhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGQgXAoraGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciBcCitleGNsdWRlX2V4cHN5bXMgXAoraW5jbHVkZV9leHBzeW1zIFwKK2ZpbGVfbGlzdF9zcGVjIFwKK3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIFwKK2xpYm5hbWVfc3BlYyBcCitsaWJyYXJ5X25hbWVzX3NwZWMgXAorc29uYW1lX3NwZWMgXAoraW5zdGFsbF9vdmVycmlkZV9tb2RlIFwKK2ZpbmlzaF9ldmFsIFwKK29sZF9zdHJpcGxpYiBcCitzdHJpcGxpYjsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1xcXFxcXFxgXFwiXFxcJF0qKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXGBcXFwkRUNITyBcXCJcXFwkXCR2YXJcXCIgfCBcXFwkU0VEIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCJcXFxgXFxcXFxcIiIKKyAgICAgIDs7CisgICAgKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFwkXCR2YXJcXFxcXFwiIgorICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKKyMgRG91YmxlLXF1b3RlIGRvdWJsZS1ldmFsZWQgc3RyaW5ncy4KK2ZvciB2YXIgaW4gcmVsb2FkX2NtZHMgXAorb2xkX3Bvc3RpbnN0YWxsX2NtZHMgXAorb2xkX3Bvc3R1bmluc3RhbGxfY21kcyBcCitvbGRfYXJjaGl2ZV9jbWRzIFwKK2V4dHJhY3RfZXhwc3ltc19jbWRzIFwKK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMgXAorb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMgXAorYXJjaGl2ZV9jbWRzIFwKK2FyY2hpdmVfZXhwc3ltX2NtZHMgXAorbW9kdWxlX2NtZHMgXAorbW9kdWxlX2V4cHN5bV9jbWRzIFwKK2V4cG9ydF9zeW1ib2xzX2NtZHMgXAorcHJlbGlua19jbWRzIFwKK3Bvc3RsaW5rX2NtZHMgXAorcG9zdGluc3RhbGxfY21kcyBcCitwb3N0dW5pbnN0YWxsX2NtZHMgXAorZmluaXNoX2NtZHMgXAorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIFwKK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbXFxcXFxcXGBcXCJcXFwkXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgLWUgXFwiXFxcJGRvdWJsZV9xdW90ZV9zdWJzdFxcIiAtZSBcXCJcXFwkc2VkX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRkZWxheV92YXJpYWJsZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworYWNfYXV4X2Rpcj0nJGFjX2F1eF9kaXInCit4c2lfc2hlbGw9JyR4c2lfc2hlbGwnCitsdF9zaGVsbF9hcHBlbmQ9JyRsdF9zaGVsbF9hcHBlbmQnCisKKyMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyMgY29tbWFuZHMgdGhyb3VnaCB3aXRob3V0IHJlbW92YWwgb2YgXCBlc2NhcGVzIElOSVQuCitpZiB0ZXN0IC1uICJcJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCisKKyAgICBQQUNLQUdFPSckUEFDS0FHRScKKyAgICBWRVJTSU9OPSckVkVSU0lPTicKKyAgICBUSU1FU1RBTVA9JyRUSU1FU1RBTVAnCisgICAgUk09JyRSTScKKyAgICBvZmlsZT0nJG9maWxlJwogCiAKIAogCitfQUNFT0YKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisKKyMgSGFuZGxpbmcgb2YgYXJndW1lbnRzLgogZm9yIGFjX2NvbmZpZ190YXJnZXQgaW4gJGFjX2NvbmZpZ190YXJnZXRzCiBkbwotICBjYXNlICIkYWNfY29uZmlnX3RhcmdldCIgaW4KLSAgIyBIYW5kbGluZyBvZiBhcmd1bWVudHMuCi0gICJNYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAic25tcGxpYi9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZCIgOzsKLSAgImFwcHMvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAiYWdlbnQvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJhZ2VudC9oZWxwZXJzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhZ2VudC9oZWxwZXJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuZGVwZW5kIiA7OwotICAiYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUiICkgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmQiIDs7Ci0gICJsb2NhbC9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAidGVzdGluZy9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbiIgOzsKLSAgIm1hbi9NYWtlZmlsZSIgKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiIDs7Ci0gICJtaWJzL01ha2VmaWxlIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OwotICAibmV0LXNubXAtY29uZmlnIiApIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBuZXQtc25tcC1jb25maWc6bmV0LXNubXAtY29uZmlnLmluIiA7OwotICAiZGVmYXVsdCIgKSBDT05GSUdfQ09NTUFORFM9IiRDT05GSUdfQ09NTUFORFMgZGVmYXVsdCIgOzsKLSAgImluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiICkgQ09ORklHX0hFQURFUlM9IiRDT05GSUdfSEVBREVSUyBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIiA7OwotICAqKSB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50OiAkYWNfY29uZmlnX3RhcmdldCIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTs7CisgIGNhc2UgJGFjX2NvbmZpZ190YXJnZXQgaW4KKyAgICAiaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIpIENPTkZJR19IRUFERVJTPSIkQ09ORklHX0hFQURFUlMgaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCIgOzsKKyAgICAibGlidG9vbCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBsaWJ0b29sIiA7OworICAgICJNYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXMiIDs7CisgICAgInNubXBsaWIvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAiYXBwcy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBhcHBzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvTWFrZWZpbGUuZGVwZW5kIiA7OworICAgICJhcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImFnZW50L01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIGFnZW50L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9NYWtlZmlsZS5kZXBlbmQiIDs7CisgICAgImFnZW50L2hlbHBlcnMvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAiYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgYWdlbnQvbWliZ3JvdXAvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L21pYmdyb3VwL01ha2VmaWxlLmRlcGVuZCIgOzsKKyAgICAibG9jYWwvTWFrZWZpbGUiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OworICAgICJ0ZXN0aW5nL01ha2VmaWxlIikgQ09ORklHX0ZJTEVTPSIkQ09ORklHX0ZJTEVTIHRlc3RpbmcvTWFrZWZpbGU6TWFrZWZpbGUudG9wOnRlc3RpbmcvTWFrZWZpbGUuaW4iIDs7CisgICAgIm1hbi9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtYW4vTWFrZWZpbGU6TWFrZWZpbGUudG9wOm1hbi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlcyIgOzsKKyAgICAibWlicy9NYWtlZmlsZSIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBtaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzIiA7OworICAgICJuZXQtc25tcC1jb25maWciKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbiIgOzsKKyAgICAibmV0LXNubXAtY3JlYXRlLXYzLXVzZXIiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXI6bmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4iIDs7CisgICAgImRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMiKSBDT05GSUdfRklMRVM9IiRDT05GSUdfRklMRVMgZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlczpkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzLmluIiA7OworICAgICJsb2NhbC9zbm1wY29uZiIpIENPTkZJR19GSUxFUz0iJENPTkZJR19GSUxFUyBsb2NhbC9zbm1wY29uZiIgOzsKKyAgICAiZGVmYXVsdCIpIENPTkZJR19DT01NQU5EUz0iJENPTkZJR19DT01NQU5EUyBkZWZhdWx0IiA7OworCisgICopIGFzX2ZuX2Vycm9yICQ/ICJpbnZhbGlkIGFyZ3VtZW50OiBcYCRhY19jb25maWdfdGFyZ2V0JyIgIiRMSU5FTk8iIDU7OwogICBlc2FjCiBkb25lCiAKKwogIyBJZiB0aGUgdXNlciBkaWQgbm90IHVzZSB0aGUgYXJndW1lbnRzIHRvIHNwZWNpZnkgdGhlIGl0ZW1zIHRvIGluc3RhbnRpYXRlLAogIyB0aGVuIHRoZSBlbnZ2YXIgaW50ZXJmYWNlIGlzIHVzZWQuICBTZXQgb25seSB0aG9zZSB0aGF0IGFyZSBub3QuCiAjIFdlIHVzZSB0aGUgbG9uZyBmb3JtIGZvciB0aGUgZGVmYXVsdCBhc3NpZ25tZW50IGJlY2F1c2Ugb2YgYW4gZXh0cmVtZWx5CkBAIC01MDI1MCw4MzggKzMwODQ3LDEyMzIgQEAKIGZpCiAKICMgSGF2ZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgZm9yIGNvbnZlbmllbmNlLiAgTWFrZSBpdCBpbiB0aGUgYnVpbGQgdHJlZQotIyBzaW1wbHkgYmVjYXVzZSB0aGVyZSBpcyBubyByZWFzb24gdG8gcHV0IGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKKyMgc2ltcGx5IGJlY2F1c2UgdGhlcmUgaXMgbm8gcmVhc29uIGFnYWluc3QgaGF2aW5nIGl0IGhlcmUsIGFuZCBpbiBhZGRpdGlvbiwKICMgY3JlYXRpbmcgYW5kIG1vdmluZyBmaWxlcyBmcm9tIC90bXAgY2FuIHNvbWV0aW1lcyBjYXVzZSBwcm9ibGVtcy4KLSMgQ3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSwgYW5kIGhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIEhvb2sgZm9yIGl0cyByZW1vdmFsIHVubGVzcyBkZWJ1Z2dpbmcuCisjIE5vdGUgdGhhdCB0aGVyZSBpcyBhIHNtYWxsIHdpbmRvdyBpbiB3aGljaCB0aGUgZGlyZWN0b3J5IHdpbGwgbm90IGJlIGNsZWFuZWQ6CisjIGFmdGVyIGl0cyBjcmVhdGlvbiBidXQgYmVmb3JlIGl0cyBuYW1lIGhhcyBiZWVuIGFzc2lnbmVkIHRvIGAkdG1wJy4KICRkZWJ1ZyB8fAogewotICB0cmFwICdleGl0X3N0YXR1cz0kPzsgcm0gLXJmICR0bXAgJiYgZXhpdCAkZXhpdF9zdGF0dXMnIDAKLSAgdHJhcCAneyAoZXhpdCAxKTsgZXhpdCAxOyB9JyAxIDIgMTMgMTUKKyAgdG1wPSBhY190bXA9CisgIHRyYXAgJ2V4aXRfc3RhdHVzPSQ/CisgIDogIiR7YWNfdG1wOj0kdG1wfSIKKyAgeyB0ZXN0ICEgLWQgIiRhY190bXAiIHx8IHJtIC1mciAiJGFjX3RtcCI7IH0gJiYgZXhpdCAkZXhpdF9zdGF0dXMKKycgMAorICB0cmFwICdhc19mbl9leGl0IDEnIDEgMiAxMyAxNQogfQotCiAjIENyZWF0ZSBhIChzZWN1cmUpIHRtcCBkaXJlY3RvcnkgZm9yIHRtcCBmaWxlcy4KIAogewotICB0bXA9YCh1bWFzayAwNzcgJiYgbWt0ZW1wIC1kIC1xICIuL2NvbmZzdGF0WFhYWFhYIikgMj4vZGV2L251bGxgICYmCi0gIHRlc3QgLW4gIiR0bXAiICYmIHRlc3QgLWQgIiR0bXAiCisgIHRtcD1gKHVtYXNrIDA3NyAmJiBta3RlbXAgLWQgIi4vY29uZlhYWFhYWCIpIDI+L2Rldi9udWxsYCAmJgorICB0ZXN0IC1kICIkdG1wIgogfSAgfHwKIHsKLSAgdG1wPS4vY29uZnN0YXQkJC0kUkFORE9NCi0gICh1bWFzayAwNzcgJiYgbWtkaXIgJHRtcCkKLX0gfHwKKyAgdG1wPS4vY29uZiQkLSRSQU5ET00KKyAgKHVtYXNrIDA3NyAmJiBta2RpciAiJHRtcCIpCit9IHx8IGFzX2ZuX2Vycm9yICQ/ICJjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiAiJExJTkVOTyIgNQorYWNfdG1wPSR0bXAKKworIyBTZXQgdXAgdGhlIHNjcmlwdHMgZm9yIENPTkZJR19GSUxFUyBzZWN0aW9uLgorIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZW0gaWYgdGhlcmUgYXJlIG5vIENPTkZJR19GSUxFUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgnLgoraWYgdGVzdCAtbiAiJENPTkZJR19GSUxFUyI7IHRoZW4KKworaWYgJEFXSyAnQkVHSU4geyBnZXRsaW5lIDwiL2Rldi9udWxsIiB9JyA8L2Rldi9udWxsIDI+L2Rldi9udWxsOyB0aGVuCisgIGFjX2NzX2F3a19nZXRsaW5lPToKKyAgYWNfY3NfYXdrX3BpcGVfaW5pdD0KKyAgYWNfY3NfYXdrX3JlYWRfZmlsZT0nCisgICAgICB3aGlsZSAoKGdldGxpbmUgYWxpbmUgPCAoRltrZXldKSkgPiAwKQorCXByaW50KGFsaW5lKQorICAgICAgY2xvc2UoRltrZXldKScKKyAgYWNfY3NfYXdrX3BpcGVfZmluaT0KK2Vsc2UKKyAgYWNfY3NfYXdrX2dldGxpbmU9ZmFsc2UKKyAgYWNfY3NfYXdrX3BpcGVfaW5pdD0icHJpbnQgXCJjYXQgPDwnfCNfISFfI3wnICYmXCIiCisgIGFjX2NzX2F3a19yZWFkX2ZpbGU9JworICAgICAgcHJpbnQgInwjXyEhXyN8IgorICAgICAgcHJpbnQgImNhdCAiIEZba2V5XSAiICYmIgorICAgICAgJyRhY19jc19hd2tfcGlwZV9pbml0CisgICMgVGhlIGZpbmFsIGA6JyBmaW5pc2hlcyB0aGUgQU5EIGxpc3QuCisgIGFjX2NzX2F3a19waXBlX2Zpbmk9J0VORCB7IHByaW50ICJ8I18hIV8jfCI7IHByaW50ICI6IiB9JworZmkKK2FjX2NyPWBlY2hvIFggfCB0ciBYICdcMDE1J2AKKyMgT24gY3lnd2luLCBiYXNoIGNhbiBlYXQgXHIgaW5zaWRlIGBgIGlmIHRoZSB1c2VyIHJlcXVlc3RlZCBpZ25jci4KKyMgQnV0IHdlIGtub3cgb2Ygbm8gb3RoZXIgc2hlbGwgd2hlcmUgYWNfY3Igd291bGQgYmUgZW1wdHkgYXQgdGhpcworIyBwb2ludCwgc28gd2UgY2FuIHVzZSBhIGJhc2hpc20gYXMgYSBmYWxsYmFjay4KK2lmIHRlc3QgIngkYWNfY3IiID0geDsgdGhlbgorICBldmFsIGFjX2NyPVwkXCdcXHJcJworZmkKK2FjX2NzX2F3a19jcj1gJEFXSyAnQkVHSU4geyBwcmludCAiYVxyYiIgfScgPC9kZXYvbnVsbCAyPi9kZXYvbnVsbGAKK2lmIHRlc3QgIiRhY19jc19hd2tfY3IiID0gImEke2FjX2NyfWIiOyB0aGVuCisgIGFjX2NzX2F3a19jcj0nXFxyJworZWxzZQorICBhY19jc19hd2tfY3I9JGFjX2NyCitmaQorCitlY2hvICdCRUdJTiB7JyA+IiRhY190bXAvc3ViczEuYXdrIiAmJgorX0FDRU9GCisKKyMgQ3JlYXRlIGNvbW1hbmRzIHRvIHN1YnN0aXR1dGUgZmlsZSBvdXRwdXQgdmFyaWFibGVzLgogewotICAgZWNobyAiJG1lOiBjYW5ub3QgY3JlYXRlIGEgdGVtcG9yYXJ5IGRpcmVjdG9yeSBpbiAuIiA+JjIKLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfQotfQorICBlY2hvICJjYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEiICYmCisgIGVjaG8gJ2NhdCA+PiJcJGFjX3RtcC9zdWJzMS5hd2siIDw8XFxfQUNBV0sgJiYnICYmCisgIGVjaG8gIiRhY19zdWJzdF9maWxlcyIgfCBzZWQgJ3MvLiovRlsiJiJdPSIkJiIvJyAmJgorICBlY2hvICJfQUNBV0siICYmCisgIGVjaG8gIl9BQ0VPRiIKK30gPmNvbmYkJGZpbGVzLnNoICYmCisuIC4vY29uZiQkZmlsZXMuc2ggfHwKKyAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorcm0gLWYgY29uZiQkZmlsZXMuc2gKIAotX0FDRU9GCit7CisgIGVjaG8gImNhdCA+Y29uZiQkc3Vicy5hd2sgPDxfQUNFT0YiICYmCisgIGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IHNlZCAncy8uKi8mISQmJGFjX2RlbGltLycgJiYKKyAgZWNobyAiX0FDRU9GIgorfSA+Y29uZiQkc3Vicy5zaCB8fAorICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19TVEFUVVMiICIkTElORU5PIiA1CithY19kZWxpbV9udW09YGVjaG8gIiRhY19zdWJzdF92YXJzIiB8IGdyZXAgLWMgJ14nYAorYWNfZGVsaW09JyUhXyEjICcKK2ZvciBhY19sYXN0X3RyeSBpbiBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSBmYWxzZSA6OyBkbworICAuIC4vY29uZiQkc3Vicy5zaCB8fAorICAgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgbWFrZSAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YKLQotIwotIyBDT05GSUdfRklMRVMgc2VjdGlvbi4KLSMKLQotIyBObyBuZWVkIHRvIGdlbmVyYXRlIHRoZSBzY3JpcHRzIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfRklMRVMuCi0jIFRoaXMgaGFwcGVucyBmb3IgaW5zdGFuY2Ugd2hlbiAuL2NvbmZpZy5zdGF0dXMgY29uZmlnLmgKLWlmIHRlc3QgLW4gIlwkQ09ORklHX0ZJTEVTIjsgdGhlbgotICAjIFByb3RlY3QgYWdhaW5zdCBiZWluZyBvbiB0aGUgcmlnaHQgc2lkZSBvZiBhIHNlZCBzdWJzdCBpbiBjb25maWcuc3RhdHVzLgotICBzZWQgJ3MvLEAvQEAvOyBzL0AsL0BALzsgcy8sO3QgdFwkL0A7dCB0LzsgL0A7dCB0XCQvcy9bXFxcXCYsXS9cXFxcJi9nOwotICAgcy9AQC8sQC87IHMvQEAvQCwvOyBzL0A7dCB0XCQvLDt0IHQvJyA+XCR0bXAvc3Vicy5zZWQgPDxcXENFT0YKLXMsQFNIRUxMQCwkU0hFTEwsO3QgdAotcyxAUEFUSF9TRVBBUkFUT1JALCRQQVRIX1NFUEFSQVRPUiw7dCB0Ci1zLEBQQUNLQUdFX05BTUVALCRQQUNLQUdFX05BTUUsO3QgdAotcyxAUEFDS0FHRV9UQVJOQU1FQCwkUEFDS0FHRV9UQVJOQU1FLDt0IHQKLXMsQFBBQ0tBR0VfVkVSU0lPTkAsJFBBQ0tBR0VfVkVSU0lPTiw7dCB0Ci1zLEBQQUNLQUdFX1NUUklOR0AsJFBBQ0tBR0VfU1RSSU5HLDt0IHQKLXMsQFBBQ0tBR0VfQlVHUkVQT1JUQCwkUEFDS0FHRV9CVUdSRVBPUlQsO3QgdAotcyxAZXhlY19wcmVmaXhALCRleGVjX3ByZWZpeCw7dCB0Ci1zLEBwcmVmaXhALCRwcmVmaXgsO3QgdAotcyxAcHJvZ3JhbV90cmFuc2Zvcm1fbmFtZUAsJHByb2dyYW1fdHJhbnNmb3JtX25hbWUsO3QgdAotcyxAYmluZGlyQCwkYmluZGlyLDt0IHQKLXMsQHNiaW5kaXJALCRzYmluZGlyLDt0IHQKLXMsQGxpYmV4ZWNkaXJALCRsaWJleGVjZGlyLDt0IHQKLXMsQGRhdGFkaXJALCRkYXRhZGlyLDt0IHQKLXMsQHN5c2NvbmZkaXJALCRzeXNjb25mZGlyLDt0IHQKLXMsQHNoYXJlZHN0YXRlZGlyQCwkc2hhcmVkc3RhdGVkaXIsO3QgdAotcyxAbG9jYWxzdGF0ZWRpckAsJGxvY2Fsc3RhdGVkaXIsO3QgdAotcyxAbGliZGlyQCwkbGliZGlyLDt0IHQKLXMsQGluY2x1ZGVkaXJALCRpbmNsdWRlZGlyLDt0IHQKLXMsQG9sZGluY2x1ZGVkaXJALCRvbGRpbmNsdWRlZGlyLDt0IHQKLXMsQGluZm9kaXJALCRpbmZvZGlyLDt0IHQKLXMsQG1hbmRpckAsJG1hbmRpciw7dCB0Ci1zLEBidWlsZF9hbGlhc0AsJGJ1aWxkX2FsaWFzLDt0IHQKLXMsQGhvc3RfYWxpYXNALCRob3N0X2FsaWFzLDt0IHQKLXMsQHRhcmdldF9hbGlhc0AsJHRhcmdldF9hbGlhcyw7dCB0Ci1zLEBERUZTQCwkREVGUyw7dCB0Ci1zLEBFQ0hPX0NALCRFQ0hPX0MsO3QgdAotcyxARUNIT19OQCwkRUNIT19OLDt0IHQKLXMsQEVDSE9fVEAsJEVDSE9fVCw7dCB0Ci1zLEBMSUJTQCwkTElCUyw7dCB0Ci1zLEBDT05GSUdVUkVfT1BUSU9OU0AsJENPTkZJR1VSRV9PUFRJT05TLDt0IHQKLXMsQExJQlRPT0xGTEFHU0AsJExJQlRPT0xGTEFHUyw7dCB0Ci1zLEBJTlNUQUxMX1BSRUZJWEAsJElOU1RBTExfUFJFRklYLDt0IHQKLXMsQFNOTVBEQCwkU05NUEQsO3QgdAotcyxAVFJBUExJQlNALCRUUkFQTElCUyw7dCB0Ci1zLEBVU0VUUkFQTElCU0AsJFVTRVRSQVBMSUJTLDt0IHQKLXMsQE1BSU5TVUJTQCwkTUFJTlNVQlMsO3QgdAotcyxASEFWRV9ETUFMTE9DX0hALCRIQVZFX0RNQUxMT0NfSCw7dCB0Ci1zLEBpbnN0YWxsdWNkaGVhZGVyc0AsJGluc3RhbGx1Y2RoZWFkZXJzLDt0IHQKLXMsQGluc3RhbGx1Y2RsaWJzQCwkaW5zdGFsbHVjZGxpYnMsO3QgdAotcyxAQ0NALCRDQyw7dCB0Ci1zLEBDRkxBR1NALCRDRkxBR1MsO3QgdAotcyxATERGTEFHU0AsJExERkxBR1MsO3QgdAotcyxAQ1BQRkxBR1NALCRDUFBGTEFHUyw7dCB0Ci1zLEBhY19jdF9DQ0AsJGFjX2N0X0NDLDt0IHQKLXMsQEVYRUVYVEAsJEVYRUVYVCw7dCB0Ci1zLEBPQkpFWFRALCRPQkpFWFQsO3QgdAotcyxAQ1BQQCwkQ1BQLDt0IHQKLXMsQExJTktDQ0AsJExJTktDQyw7dCB0Ci1zLEBFR1JFUEAsJEVHUkVQLDt0IHQKLXMsQGJ1aWxkQCwkYnVpbGQsO3QgdAotcyxAYnVpbGRfY3B1QCwkYnVpbGRfY3B1LDt0IHQKLXMsQGJ1aWxkX3ZlbmRvckAsJGJ1aWxkX3ZlbmRvciw7dCB0Ci1zLEBidWlsZF9vc0AsJGJ1aWxkX29zLDt0IHQKLXMsQGhvc3RALCRob3N0LDt0IHQKLXMsQGhvc3RfY3B1QCwkaG9zdF9jcHUsO3QgdAotcyxAaG9zdF92ZW5kb3JALCRob3N0X3ZlbmRvciw7dCB0Ci1zLEBob3N0X29zQCwkaG9zdF9vcyw7dCB0Ci1zLEB0YXJnZXRALCR0YXJnZXQsO3QgdAotcyxAdGFyZ2V0X2NwdUAsJHRhcmdldF9jcHUsO3QgdAotcyxAdGFyZ2V0X3ZlbmRvckAsJHRhcmdldF92ZW5kb3IsO3QgdAotcyxAdGFyZ2V0X29zQCwkdGFyZ2V0X29zLDt0IHQKLXMsQFNFREAsJFNFRCw7dCB0Ci1zLEBMTl9TQCwkTE5fUyw7dCB0Ci1zLEBFQ0hPQCwkRUNITyw7dCB0Ci1zLEBBUkAsJEFSLDt0IHQKLXMsQGFjX2N0X0FSQCwkYWNfY3RfQVIsO3QgdAotcyxAUkFOTElCQCwkUkFOTElCLDt0IHQKLXMsQGFjX2N0X1JBTkxJQkAsJGFjX2N0X1JBTkxJQiw7dCB0Ci1zLEBTVFJJUEAsJFNUUklQLDt0IHQKLXMsQGFjX2N0X1NUUklQQCwkYWNfY3RfU1RSSVAsO3QgdAotcyxARFNZTVVUSUxALCREU1lNVVRJTCw7dCB0Ci1zLEBhY19jdF9EU1lNVVRJTEAsJGFjX2N0X0RTWU1VVElMLDt0IHQKLXMsQE5NRURJVEAsJE5NRURJVCw7dCB0Ci1zLEBhY19jdF9OTUVESVRALCRhY19jdF9OTUVESVQsO3QgdAotcyxARExMVE9PTEAsJERMTFRPT0wsO3QgdAotcyxAYWNfY3RfRExMVE9PTEAsJGFjX2N0X0RMTFRPT0wsO3QgdAotcyxAQVNALCRBUyw7dCB0Ci1zLEBhY19jdF9BU0AsJGFjX2N0X0FTLDt0IHQKLXMsQE9CSkRVTVBALCRPQkpEVU1QLDt0IHQKLXMsQGFjX2N0X09CSkRVTVBALCRhY19jdF9PQkpEVU1QLDt0IHQKLXMsQENYWEAsJENYWCw7dCB0Ci1zLEBDWFhGTEFHU0AsJENYWEZMQUdTLDt0IHQKLXMsQGFjX2N0X0NYWEAsJGFjX2N0X0NYWCw7dCB0Ci1zLEBDWFhDUFBALCRDWFhDUFAsO3QgdAotcyxARjc3QCwkRjc3LDt0IHQKLXMsQEZGTEFHU0AsJEZGTEFHUyw7dCB0Ci1zLEBhY19jdF9GNzdALCRhY19jdF9GNzcsO3QgdAotcyxATElCVE9PTEAsJExJQlRPT0wsO3QgdAotcyxATElCVE9PTF9ERVBTQCwkTElCVE9PTF9ERVBTLDt0IHQKLXMsQElOU1RBTExfUFJPR1JBTUAsJElOU1RBTExfUFJPR1JBTSw7dCB0Ci1zLEBJTlNUQUxMX1NDUklQVEAsJElOU1RBTExfU0NSSVBULDt0IHQKLXMsQElOU1RBTExfREFUQUAsJElOU1RBTExfREFUQSw7dCB0Ci1zLEBTRVRfTUFLRUAsJFNFVF9NQUtFLDt0IHQKLXMsQFBTUFJPR0AsJFBTUFJPRyw7dCB0Ci1zLEBQRVJMUFJPR0AsJFBFUkxQUk9HLDt0IHQKLXMsQFBZVEhPTlBST0dALCRQWVRIT05QUk9HLDt0IHQKLXMsQFdIT0FNSUAsJFdIT0FNSSw7dCB0Ci1zLEBGSU5EQCwkRklORCw7dCB0Ci1zLEBBVVRPQ09ORkAsJEFVVE9DT05GLDt0IHQKLXMsQEFVVE9IRUFERVJALCRBVVRPSEVBREVSLDt0IHQKLXMsQFVOQU1FUFJPR0AsJFVOQU1FUFJPRyw7dCB0Ci1zLEBWRVJTSU9OQCwkVkVSU0lPTiw7dCB0Ci1zLEBSRUxFQVNFVkVSU0lPTkAsJFJFTEVBU0VWRVJTSU9OLDt0IHQKLXMsQERFVkZMQUdTQCwkREVWRkxBR1MsO3QgdAotcyxAVE9QX0lOQ0xVREVTQCwkVE9QX0lOQ0xVREVTLDt0IHQKLXMsQFNOTVBMSUJfSU5DTFVERVNALCRTTk1QTElCX0lOQ0xVREVTLDt0IHQKLXMsQEFHRU5UX0lOQ0xVREVTQCwkQUdFTlRfSU5DTFVERVMsO3QgdAotcyxASEVMUEVSX0lOQ0xVREVTQCwkSEVMUEVSX0lOQ0xVREVTLDt0IHQKLXMsQE1JQkdST1VQX0lOQ0xVREVTQCwkTUlCR1JPVVBfSU5DTFVERVMsO3QgdAotcyxAR05VX3ZwYXRoQCwkR05VX3ZwYXRoLDt0IHQKLXMsQE5PTl9HTlVfVlBBVEhALCROT05fR05VX1ZQQVRILDt0IHQKLXMsQENDUEFUSEAsJENDUEFUSCw7dCB0Ci1zLEBFWFRSQUNQUEZMQUdTQCwkRVhUUkFDUFBGTEFHUyw7dCB0Ci1zLEBTTk1QTElCUEFUSEAsJFNOTVBMSUJQQVRILDt0IHQKLXMsQFNOTVBTSEFSRVBBVEhALCRTTk1QU0hBUkVQQVRILDt0IHQKLXMsQE5FVFNOTVBfREVGQVVMVF9NSUJESVJTQCwkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMsO3QgdAotcyxAU05NUENPTkZQQVRIQCwkU05NUENPTkZQQVRILDt0IHQKLXMsQG90aGVyX3NyY19saXN0QCwkb3RoZXJfc3JjX2xpc3QsO3QgdAotcyxAb3RoZXJfb2Jqc19saXN0QCwkb3RoZXJfb2Jqc19saXN0LDt0IHQKLXMsQG90aGVyX2xvYmpzX2xpc3RALCRvdGhlcl9sb2Jqc19saXN0LDt0IHQKLXMsQG90aGVyX2FnZW50b2Jqc0AsJG90aGVyX2FnZW50b2Jqcyw7dCB0Ci1zLEBvdGhlcl9sYWdlbnRvYmpzQCwkb3RoZXJfbGFnZW50b2Jqcyw7dCB0Ci1zLEBvdGhlcl90cmFwZF9vYmplY3RzQCwkb3RoZXJfdHJhcGRfb2JqZWN0cyw7dCB0Ci1zLEB0cmFuc3BvcnRfaGRyX2xpc3RALCR0cmFuc3BvcnRfaGRyX2xpc3QsO3QgdAotcyxAdHJhbnNwb3J0X3NyY19saXN0QCwkdHJhbnNwb3J0X3NyY19saXN0LDt0IHQKLXMsQHRyYW5zcG9ydF9vYmpfbGlzdEAsJHRyYW5zcG9ydF9vYmpfbGlzdCw7dCB0Ci1zLEB0cmFuc3BvcnRfbG9ial9saXN0QCwkdHJhbnNwb3J0X2xvYmpfbGlzdCw7dCB0Ci1zLEBzZWN1cml0eV9zcmNfbGlzdEAsJHNlY3VyaXR5X3NyY19saXN0LDt0IHQKLXMsQHNlY3VyaXR5X2hkcl9saXN0QCwkc2VjdXJpdHlfaGRyX2xpc3QsO3QgdAotcyxAc2VjdXJpdHlfb2JqX2xpc3RALCRzZWN1cml0eV9vYmpfbGlzdCw7dCB0Ci1zLEBzZWN1cml0eV9sb2JqX2xpc3RALCRzZWN1cml0eV9sb2JqX2xpc3QsO3QgdAotcyxAa3JiNV9jb25maWdALCRrcmI1X2NvbmZpZyw7dCB0Ci1zLEBkZWZhdWx0X21pYnNfaW5zdGFsbEAsJGRlZmF1bHRfbWlic19pbnN0YWxsLDt0IHQKLXMsQGRsbGNsZWFuc0AsJGRsbGNsZWFucyw7dCB0Ci1zLEBFTlZfU0VQQVJBVE9SQCwkRU5WX1NFUEFSQVRPUiw7dCB0Ci1zLEBORVRTTk1QX0RFRkFVTFRfTUlCU0AsJE5FVFNOTVBfREVGQVVMVF9NSUJTLDt0IHQKLXMsQEVNQkVEUEVSTElOU1RBTExALCRFTUJFRFBFUkxJTlNUQUxMLDt0IHQKLXMsQEVNQkVEUEVSTFVOSU5TVEFMTEAsJEVNQkVEUEVSTFVOSU5TVEFMTCw7dCB0Ci1zLEBQRVJMTERPUFRTX0ZPUl9MSUJTQCwkUEVSTExET1BUU19GT1JfTElCUyw7dCB0Ci1zLEBQRVJMTERPUFRTX0ZPUl9BUFBTQCwkUEVSTExET1BUU19GT1JfQVBQUyw7dCB0Ci1zLEBQRVJMVEFSR1NALCRQRVJMVEFSR1MsO3QgdAotcyxAUEVSTElOU1RBTExUQVJHU0AsJFBFUkxJTlNUQUxMVEFSR1MsO3QgdAotcyxAUEVSTFVOSU5TVEFMTFRBUkdTQCwkUEVSTFVOSU5TVEFMTFRBUkdTLDt0IHQKLXMsQFBFUkxBUkdTQCwkUEVSTEFSR1MsO3QgdAotcyxAUFlUSE9OVEFSR1NALCRQWVRIT05UQVJHUyw7dCB0Ci1zLEBQWVRIT05JTlNUQUxMVEFSR1NALCRQWVRIT05JTlNUQUxMVEFSR1MsO3QgdAotcyxAUFlUSE9OVU5JTlNUQUxMVEFSR1NALCRQWVRIT05VTklOU1RBTExUQVJHUyw7dCB0Ci1zLEBQWVRIT05DTEVBTlRBUkdTQCwkUFlUSE9OQ0xFQU5UQVJHUyw7dCB0Ci1zLEBQWVRIT05BUkdTQCwkUFlUSE9OQVJHUyw7dCB0Ci1zLEBMUFNUQVRfUEFUSEAsJExQU1RBVF9QQVRILDt0IHQKLXMsQExORVRTTk1QTElCU0AsJExORVRTTk1QTElCUyw7dCB0Ci1zLEBMQUdFTlRMSUJTQCwkTEFHRU5UTElCUyw7dCB0Ci1zLEBQU0NNREAsJFBTQ01ELDt0IHQKLXMsQEFMTE9DQUAsJEFMTE9DQSw7dCB0Ci1zLEBMSUJPQkpTQCwkTElCT0JKUyw7dCB0Ci1zLEBMTUlCTElCU0AsJExNSUJMSUJTLDt0IHQKLXMsQEFHRU5UTElCU0AsJEFHRU5UTElCUyw7dCB0Ci1zLEBPVEhFUkFHRU5UTElCT0JKU0AsJE9USEVSQUdFTlRMSUJPQkpTLDt0IHQKLXMsQE9USEVSQUdFTlRMSUJMT0JKU0AsJE9USEVSQUdFTlRMSUJMT0JKUyw7dCB0Ci1zLEBQRVJTSVNURU5UX0RJUkVDVE9SWUAsJFBFUlNJU1RFTlRfRElSRUNUT1JZLDt0IHQKLXMsQFVDRFBFUlNJU1RFTlRfRElSRUNUT1JZQCwkVUNEUEVSU0lTVEVOVF9ESVJFQ1RPUlksO3QgdAotcyxAQ09QWV9QRVJTSVNURU5UX0ZJTEVTQCwkQ09QWV9QRVJTSVNURU5UX0ZJTEVTLDt0IHQKLXMsQERMTElCU0AsJERMTElCUyw7dCB0Ci1zLEBMVExJQk9CSlNALCRMVExJQk9CSlMsO3QgdAotL0BNT0RVTEVfTElTVEAvciAkTU9EVUxFX0xJU1QKLXMsQE1PRFVMRV9MSVNUQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9jQC9yICRtb2R1bGVfbGlzdF9jCi1zLEBtb2R1bGVfbGlzdF9jQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9vQC9yICRtb2R1bGVfbGlzdF9vCi1zLEBtb2R1bGVfbGlzdF9vQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9sb0AvciAkbW9kdWxlX2xpc3RfbG8KLXMsQG1vZHVsZV9saXN0X2xvQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3RfY0AvciAkbWliX21vZHVsZV9saXN0X2MKLXMsQG1pYl9tb2R1bGVfbGlzdF9jQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3Rfb0AvciAkbWliX21vZHVsZV9saXN0X28KLXMsQG1pYl9tb2R1bGVfbGlzdF9vQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3RfbG9AL3IgJG1pYl9tb2R1bGVfbGlzdF9sbwotcyxAbWliX21vZHVsZV9saXN0X2xvQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9jQC9yICRhZ2VudF9tb2R1bGVfbGlzdF9jCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9jQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9vQC9yICRhZ2VudF9tb2R1bGVfbGlzdF9vCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9vQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9sb0AvciAkYWdlbnRfbW9kdWxlX2xpc3RfbG8KLXMsQGFnZW50X21vZHVsZV9saXN0X2xvQCwsO3QgdAotL0BtaWJncm91cF9saXN0X29AL3IgJG1pYmdyb3VwX2xpc3RfbwotcyxAbWliZ3JvdXBfbGlzdF9vQCwsO3QgdAotL0BtaWJncm91cF9saXN0X2xvQC9yICRtaWJncm91cF9saXN0X2xvCi1zLEBtaWJncm91cF9saXN0X2xvQCwsO3QgdAotL0BhZ2VudGdyb3VwX2xpc3Rfb0AvciAkYWdlbnRncm91cF9saXN0X28KLXMsQGFnZW50Z3JvdXBfbGlzdF9vQCwsO3QgdAotL0BhZ2VudGdyb3VwX2xpc3RfbG9AL3IgJGFnZW50Z3JvdXBfbGlzdF9sbwotcyxAYWdlbnRncm91cF9saXN0X2xvQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdEAvciAkYWdlbnRfbW9kdWxlX2xpc3QKLXMsQGFnZW50X21vZHVsZV9saXN0QCwsO3QgdAotL0Btb2R1bGVfcnVsZXNAL3IgJG1vZHVsZV9ydWxlcwotcyxAbW9kdWxlX3J1bGVzQCwsO3QgdAotL0Btb2R1bGVfbGlzdF9kZXBzQC9yICRtb2R1bGVfbGlzdF9kZXBzCi1zLEBtb2R1bGVfbGlzdF9kZXBzQCwsO3QgdAotL0BtaWJfbW9kdWxlX2xpc3RfZGVwc0AvciAkbWliX21vZHVsZV9saXN0X2RlcHMKLXMsQG1pYl9tb2R1bGVfbGlzdF9kZXBzQCwsO3QgdAotL0BhZ2VudF9tb2R1bGVfbGlzdF9kZXBzQC9yICRhZ2VudF9tb2R1bGVfbGlzdF9kZXBzCi1zLEBhZ2VudF9tb2R1bGVfbGlzdF9kZXBzQCwsO3QgdAotQ0VPRgotCi1fQUNFT0YKLQotICBjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKLSAgIyBTcGxpdCB0aGUgc3Vic3RpdHV0aW9ucyBpbnRvIGJpdGUtc2l6ZWQgcGllY2VzIGZvciBzZWRzIHdpdGgKLSAgIyBzbWFsbCBjb21tYW5kIG51bWJlciBsaW1pdHMsIGxpa2Ugb24gRGlnaXRhbCBPU0YvMSBhbmQgSFAtVVguCi0gIGFjX21heF9zZWRfbGluZXM9NDgKLSAgYWNfc2VkX2ZyYWc9MSAjIE51bWJlciBvZiBjdXJyZW50IGZpbGUuCi0gIGFjX2JlZz0xICMgRmlyc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19lbmQ9JGFjX21heF9zZWRfbGluZXMgIyBMaW5lIGFmdGVyIGxhc3QgbGluZSBmb3IgY3VycmVudCBmaWxlLgotICBhY19tb3JlX2xpbmVzPToKLSAgYWNfc2VkX2NtZHM9Ci0gIHdoaWxlICRhY19tb3JlX2xpbmVzOyBkbwotICAgIGlmIHRlc3QgJGFjX2JlZyAtZ3QgMTsgdGhlbgotICAgICAgc2VkICIxLCR7YWNfYmVnfWQ7ICR7YWNfZW5kfXEiICR0bXAvc3Vicy5zZWQgPiR0bXAvc3Vicy5mcmFnCi0gICAgZWxzZQotICAgICAgc2VkICIke2FjX2VuZH1xIiAkdG1wL3N1YnMuc2VkID4kdG1wL3N1YnMuZnJhZwotICAgIGZpCi0gICAgaWYgdGVzdCAhIC1zICR0bXAvc3Vicy5mcmFnOyB0aGVuCi0gICAgICBhY19tb3JlX2xpbmVzPWZhbHNlCi0gICAgZWxzZQotICAgICAgIyBUaGUgcHVycG9zZSBvZiB0aGUgbGFiZWwgYW5kIG9mIHRoZSBicmFuY2hpbmcgY29uZGl0aW9uIGlzIHRvCi0gICAgICAjIHNwZWVkIHVwIHRoZSBzZWQgcHJvY2Vzc2luZyAoaWYgdGhlcmUgYXJlIG5vIGBAJyBhdCBhbGwsIHRoZXJlCi0gICAgICAjIGlzIG5vIG5lZWQgdG8gYnJvd3NlIGFueSBvZiB0aGUgc3Vic3RpdHV0aW9ucykuCi0gICAgICAjIFRoZXNlIGFyZSB0aGUgdHdvIGV4dHJhIHNlZCBjb21tYW5kcyBtZW50aW9uZWQgYWJvdmUuCi0gICAgICAoZWNobyAnOnQKLSAgL0BbYS16QS1aX11bYS16QS1aXzAtOV0qQC8hYicgJiYgY2F0ICR0bXAvc3Vicy5mcmFnKSA+JHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQKLSAgICAgIGlmIHRlc3QgLXogIiRhY19zZWRfY21kcyI7IHRoZW4KLQlhY19zZWRfY21kcz0ic2VkIC1mICR0bXAvc3Vicy0kYWNfc2VkX2ZyYWcuc2VkIgotICAgICAgZWxzZQotCWFjX3NlZF9jbWRzPSIkYWNfc2VkX2NtZHMgfCBzZWQgLWYgJHRtcC9zdWJzLSRhY19zZWRfZnJhZy5zZWQiCi0gICAgICBmaQotICAgICAgYWNfc2VkX2ZyYWc9YGV4cHIgJGFjX3NlZF9mcmFnICsgMWAKLSAgICAgIGFjX2JlZz0kYWNfZW5kCi0gICAgICBhY19lbmQ9YGV4cHIgJGFjX2VuZCArICRhY19tYXhfc2VkX2xpbmVzYAotICAgIGZpCi0gIGRvbmUKLSAgaWYgdGVzdCAteiAiJGFjX3NlZF9jbWRzIjsgdGhlbgotICAgIGFjX3NlZF9jbWRzPWNhdAorICBhY19kZWxpbV9uPWBzZWQgLW4gInMvLiokYWNfZGVsaW1cJC9YL3AiIGNvbmYkJHN1YnMuYXdrIHwgZ3JlcCAtYyBYYAorICBpZiB0ZXN0ICRhY19kZWxpbV9uID0gJGFjX2RlbGltX251bTsgdGhlbgorICAgIGJyZWFrCisgIGVsaWYgJGFjX2xhc3RfdHJ5OyB0aGVuCisgICAgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBtYWtlICRDT05GSUdfU1RBVFVTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKICAgZmkKK2RvbmUKK3JtIC1mIGNvbmYkJHN1YnMuc2gKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PFxcX0FDQVdLICYmCitfQUNFT0YKK3NlZCAtbiAnCitoCitzL14vU1siLzsgcy8hLiovIl09LworcAorZworcy9eW14hXSohLy8KKzpyZXBsCit0IHJlcGwKK3MvJyIkYWNfZGVsaW0iJyQvLwordCBkZWxpbQorOm5sCitoCitzL1woLlx7MTQ4XH1cKS4uKi9cMS8KK3QgbW9yZTEKK3MvWyJcXF0vXFwmL2c7IHMvXi8iLzsgcy8kL1xcbiJcXC8KK3AKK24KK2IgcmVwbAorOm1vcmUxCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgbmwKKzpkZWxpbQoraAorcy9cKC5cezE0OFx9XCkuLiovXDEvCit0IG1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iLworcAorYgorOm1vcmUyCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iXFwvCitwCitnCitzLy5cezE0OFx9Ly8KK3QgZGVsaW0KKycgPGNvbmYkJHN1YnMuYXdrIHwgc2VkICcKKy9eW14iIl0veworICBOCisgIHMvXG4vLworfQorJyA+PiRDT05GSUdfU1RBVFVTIHx8IGFjX3dyaXRlX2ZhaWw9MQorcm0gLWYgY29uZiQkc3Vicy5hd2sKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorX0FDQVdLCitjYXQgPj4iXCRhY190bXAvc3ViczEuYXdrIiA8PF9BQ0FXSyAmJgorICBmb3IgKGtleSBpbiBTKSBTX2lzX3NldFtrZXldID0gMQorICBGUyA9ICIHIgorICBcJGFjX2NzX2F3a19waXBlX2luaXQKK30KK3sKKyAgbGluZSA9ICQgMAorICBuZmllbGRzID0gc3BsaXQobGluZSwgZmllbGQsICJAIikKKyAgc3Vic3RlZCA9IDAKKyAgbGVuID0gbGVuZ3RoKGZpZWxkWzFdKQorICBmb3IgKGkgPSAyOyBpIDwgbmZpZWxkczsgaSsrKSB7CisgICAga2V5ID0gZmllbGRbaV0KKyAgICBrZXlsZW4gPSBsZW5ndGgoa2V5KQorICAgIGlmIChTX2lzX3NldFtrZXldKSB7CisgICAgICB2YWx1ZSA9IFNba2V5XQorICAgICAgbGluZSA9IHN1YnN0cihsaW5lLCAxLCBsZW4pICIiIHZhbHVlICIiIHN1YnN0cihsaW5lLCBsZW4gKyBrZXlsZW4gKyAzKQorICAgICAgbGVuICs9IGxlbmd0aCh2YWx1ZSkgKyBsZW5ndGgoZmllbGRbKytpXSkKKyAgICAgIHN1YnN0ZWQgPSAxCisgICAgfSBlbHNlCisgICAgICBsZW4gKz0gMSArIGtleWxlbgorICB9CisgIGlmIChuZmllbGRzID09IDMgJiYgIXN1YnN0ZWQpIHsKKyAgICBrZXkgPSBmaWVsZFsyXQorICAgIGlmIChGW2tleV0gIT0gIiIgJiYgbGluZSB+IC9eWwkgXSpALipAWwkgXSokLykgeworICAgICAgXCRhY19jc19hd2tfcmVhZF9maWxlCisgICAgICBuZXh0CisgICAgfQorICB9CisgIHByaW50IGxpbmUKK30KK1wkYWNfY3NfYXdrX3BpcGVfZmluaQorX0FDQVdLCitfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKK2lmIHNlZCAicy8kYWNfY3IvLyIgPCAvZGV2L251bGwgPiAvZGV2L251bGwgMj4mMTsgdGhlbgorICBzZWQgInMvJGFjX2NyXCQvLzsgcy8kYWNfY3IvJGFjX2NzX2F3a19jci9nIgorZWxzZQorICBjYXQKK2ZpIDwgIiRhY190bXAvc3ViczEuYXdrIiA+ICIkYWNfdG1wL3N1YnMuYXdrIiBcCisgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGZpbGVzIG1hY2hpbmVyeSIgIiRMSU5FTk8iIDUKK19BQ0VPRgorCisjIFZQQVRIIG1heSBjYXVzZSB0cm91YmxlIHdpdGggc29tZSBtYWtlcywgc28gd2UgcmVtb3ZlIHNvbGUgJChzcmNkaXIpLAorIyAke3NyY2Rpcn0gYW5kIEBzcmNkaXJAIGVudHJpZXMgZnJvbSBWUEFUSCBpZiBzcmNkaXIgaXMgIi4iLCBzdHJpcCBsZWFkaW5nIGFuZAorIyB0cmFpbGluZyBjb2xvbnMgYW5kIHRoZW4gcmVtb3ZlIHRoZSB3aG9sZSBsaW5lIGlmIFZQQVRIIGJlY29tZXMgZW1wdHkKKyMgKGFjdHVhbGx5IHdlIGxlYXZlIGFuIGVtcHR5IGxpbmUgdG8gcHJlc2VydmUgbGluZSBudW1iZXJzKS4KK2lmIHRlc3QgIngkc3JjZGlyIiA9IHguOyB0aGVuCisgIGFjX3Zwc3ViPScvXlsJIF0qVlBBVEhbCSBdKj1bCSBdKi97CitoCitzLy8vCitzL14vOi8KK3MvWwkgXSokLzovCitzLzpcJChzcmNkaXIpOi86L2cKK3MvOlwke3NyY2Rpcn06LzovZworcy86QHNyY2RpckA6LzovZworcy9eOiovLworcy86KiQvLworeAorcy9cKD1bCSBdKlwpLiovXDEvCitHCitzL1xuLy8KK3MvXltePV0qPVsJIF0qJC8vCit9JworZmkKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQogZmkgIyB0ZXN0IC1uICIkQ09ORklHX0ZJTEVTIgogCisjIFNldCB1cCB0aGUgc2NyaXB0cyBmb3IgQ09ORklHX0hFQURFUlMgc2VjdGlvbi4KKyMgTm8gbmVlZCB0byBnZW5lcmF0ZSB0aGVtIGlmIHRoZXJlIGFyZSBubyBDT05GSUdfSEVBREVSUy4KKyMgVGhpcyBoYXBwZW5zIGZvciBpbnN0YW5jZSB3aXRoIGAuL2NvbmZpZy5zdGF0dXMgTWFrZWZpbGUnLgoraWYgdGVzdCAtbiAiJENPTkZJR19IRUFERVJTIjsgdGhlbgorY2F0ID4iJGFjX3RtcC9kZWZpbmVzLmF3ayIgPDxcX0FDQVdLIHx8CitCRUdJTiB7CiBfQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotZm9yIGFjX2ZpbGUgaW4gOiAkQ09ORklHX0ZJTEVTOyBkbyB0ZXN0ICJ4JGFjX2ZpbGUiID0geDogJiYgY29udGludWUKLSAgIyBTdXBwb3J0ICJvdXRmaWxlWzppbmZpbGVbOmluZmlsZS4uLl1dIiwgZGVmYXVsdGluZyBpbmZpbGU9Im91dGZpbGUuaW4iLgotICBjYXNlICRhY19maWxlIGluCi0gIC0gfCAqOi0gfCAqOi06KiApICMgaW5wdXQgZnJvbSBzdGRpbgotCWNhdCA+JHRtcC9zdGRpbgotCWFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKjoqICkgYWNfZmlsZV9pbj1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLQlhY19maWxlPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsOi4qLCwnYCA7OwotICAqICkgICBhY19maWxlX2luPSRhY19maWxlLmluIDs7CisKKyMgVHJhbnNmb3JtIGNvbmZkZWZzLmggaW50byBhbiBhd2sgc2NyaXB0IGBkZWZpbmVzLmF3aycsIGVtYmVkZGVkIGFzCisjIGhlcmUtZG9jdW1lbnQgaW4gY29uZmlnLnN0YXR1cywgdGhhdCBzdWJzdGl0dXRlcyB0aGUgcHJvcGVyIHZhbHVlcyBpbnRvCisjIGNvbmZpZy5oLmluIHRvIHByb2R1Y2UgY29uZmlnLmguCisKKyMgQ3JlYXRlIGEgZGVsaW1pdGVyIHN0cmluZyB0aGF0IGRvZXMgbm90IGV4aXN0IGluIGNvbmZkZWZzLmgsIHRvIGVhc2UKKyMgaGFuZGxpbmcgb2YgbG9uZyBsaW5lcy4KK2FjX2RlbGltPSclIV8hIyAnCitmb3IgYWNfbGFzdF90cnkgaW4gZmFsc2UgZmFsc2UgOjsgZG8KKyAgYWNfdHQ9YHNlZCAtbiAiLyRhY19kZWxpbS9wIiBjb25mZGVmcy5oYAorICBpZiB0ZXN0IC16ICIkYWNfdHQiOyB0aGVuCisgICAgYnJlYWsKKyAgZWxpZiAkYWNfbGFzdF90cnk7IHRoZW4KKyAgICBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IG1ha2UgJENPTkZJR19IRUFERVJTIiAiJExJTkVOTyIgNQorICBlbHNlCisgICAgYWNfZGVsaW09IiRhY19kZWxpbSEkYWNfZGVsaW0gXyRhY19kZWxpbSEhICIKKyAgZmkKK2RvbmUKKworIyBGb3IgdGhlIGF3ayBzY3JpcHQsIEQgaXMgYW4gYXJyYXkgb2YgbWFjcm8gdmFsdWVzIGtleWVkIGJ5IG5hbWUsCisjIGxpa2V3aXNlIFAgY29udGFpbnMgbWFjcm8gcGFyYW1ldGVycyBpZiBhbnkuICBQcmVzZXJ2ZSBiYWNrc2xhc2gKKyMgbmV3bGluZSBzZXF1ZW5jZXMuCisKK2FjX3dvcmRfcmU9W18kYXNfY3JfTGV0dGVyc11bXyRhc19jcl9hbG51bV0qCitzZWQgLW4gJworcy8uXHsxNDhcfS8mJyIkYWNfZGVsaW0iJy9nCit0IHJzZXQKKzpyc2V0CitzL15bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKi8gLwordCBkZWYKK2QKKzpkZWYKK3MvXFwkLy8KK3QgYnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDMiL3AKK3MvXiBcKCciJGFjX3dvcmRfcmUiJ1wpWwkgXSpcKC4qXCkvRFsiXDEiXT0iIFwyIi9wCitkCis6YnNubAorcy9bIlxcXS9cXCYvZworcy9eIFwoJyIkYWNfd29yZF9yZSInXClcKChbXigpXSopXClbCSBdKlwoLipcKS9QWyJcMSJdPSJcMiJcCitEWyJcMSJdPSIgXDNcXFxcXFxuIlxcL3AKK3QgY29udAorcy9eIFwoJyIkYWNfd29yZF9yZSInXClbCSBdKlwoLipcKS9EWyJcMSJdPSIgXDJcXFxcXFxuIlxcL3AKK3QgY29udAorZAorOmNvbnQKK24KK3MvLlx7MTQ4XH0vJiciJGFjX2RlbGltIicvZwordCBjbGVhcgorOmNsZWFyCitzL1xcJC8vCit0IGJzbmxjCitzL1siXFxdL1xcJi9nOyBzL14vIi87IHMvJC8iL3AKK2QKKzpic25sYworcy9bIlxcXS9cXCYvZzsgcy9eLyIvOyBzLyQvXFxcXFxcbiJcXC9wCitiIGNvbnQKKycgPGNvbmZkZWZzLmggfCBzZWQgJworcy8nIiRhY19kZWxpbSInLyJcXFwKKyIvZycgPj4kQ09ORklHX1NUQVRVUyB8fCBhY193cml0ZV9mYWlsPTEKKworY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGZvciAoa2V5IGluIEQpIERfaXNfc2V0W2tleV0gPSAxCisgIEZTID0gIgciCit9CisvXltcdCBdKiNbXHQgXSooZGVmaW5lfHVuZGVmKVtcdCBdKyRhY193b3JkX3JlKFtcdCAoXXxcJCkvIHsKKyAgbGluZSA9IFwkIDAKKyAgc3BsaXQobGluZSwgYXJnLCAiICIpCisgIGlmIChhcmdbMV0gPT0gIiMiKSB7CisgICAgZGVmdW5kZWYgPSBhcmdbMl0KKyAgICBtYWMxID0gYXJnWzNdCisgIH0gZWxzZSB7CisgICAgZGVmdW5kZWYgPSBzdWJzdHIoYXJnWzFdLCAyKQorICAgIG1hYzEgPSBhcmdbMl0KKyAgfQorICBzcGxpdChtYWMxLCBtYWMyLCAiKCIpICMpCisgIG1hY3JvID0gbWFjMlsxXQorICBwcmVmaXggPSBzdWJzdHIobGluZSwgMSwgaW5kZXgobGluZSwgZGVmdW5kZWYpIC0gMSkKKyAgaWYgKERfaXNfc2V0W21hY3JvXSkgeworICAgICMgUHJlc2VydmUgdGhlIHdoaXRlIHNwYWNlIHN1cnJvdW5kaW5nIHRoZSAiIyIuCisgICAgcHJpbnQgcHJlZml4ICJkZWZpbmUiLCBtYWNybyBQW21hY3JvXSBEW21hY3JvXQorICAgIG5leHQKKyAgfSBlbHNlIHsKKyAgICAjIFJlcGxhY2UgI3VuZGVmIHdpdGggY29tbWVudHMuICBUaGlzIGlzIG5lY2Vzc2FyeSwgZm9yIGV4YW1wbGUsCisgICAgIyBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAorICAgICMgb24gc29tZSBzeXN0ZW1zIHdoZXJlIGNvbmZpZ3VyZSB3aWxsIG5vdCBkZWNpZGUgdG8gZGVmaW5lIGl0LgorICAgIGlmIChkZWZ1bmRlZiA9PSAidW5kZWYiKSB7CisgICAgICBwcmludCAiLyoiLCBwcmVmaXggZGVmdW5kZWYsIG1hY3JvLCAiKi8iCisgICAgICBuZXh0CisgICAgfQorICB9Cit9Cit7IHByaW50IH0KK19BQ0FXSworX0FDRU9GCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3Qgc2V0dXAgY29uZmlnIGhlYWRlcnMgbWFjaGluZXJ5IiAiJExJTkVOTyIgNQorZmkgIyB0ZXN0IC1uICIkQ09ORklHX0hFQURFUlMiCisKKworZXZhbCBzZXQgWCAiICA6RiAkQ09ORklHX0ZJTEVTICA6SCAkQ09ORklHX0hFQURFUlMgICAgOkMgJENPTkZJR19DT01NQU5EUyIKK3NoaWZ0Citmb3IgYWNfdGFnCitkbworICBjYXNlICRhY190YWcgaW4KKyAgOltGSExDXSkgYWNfbW9kZT0kYWNfdGFnOyBjb250aW51ZTs7CisgIGVzYWMKKyAgY2FzZSAkYWNfbW9kZSRhY190YWcgaW4KKyAgOltGSExdKjoqKTs7CisgIDpMKiB8IDpDKjoqKSBhc19mbl9lcnJvciAkPyAiaW52YWxpZCB0YWcgXGAkYWNfdGFnJyIgIiRMSU5FTk8iIDU7OworICA6W0ZIXS0pIGFjX3RhZz0tOi07OworICA6W0ZIXSopIGFjX3RhZz0kYWNfdGFnOiRhY190YWcuaW47OworICBlc2FjCisgIGFjX3NhdmVfSUZTPSRJRlMKKyAgSUZTPToKKyAgc2V0IHggJGFjX3RhZworICBJRlM9JGFjX3NhdmVfSUZTCisgIHNoaWZ0CisgIGFjX2ZpbGU9JDEKKyAgc2hpZnQKKworICBjYXNlICRhY19tb2RlIGluCisgIDpMKSBhY19zb3VyY2U9JDE7OworICA6W0ZIXSkKKyAgICBhY19maWxlX2lucHV0cz0KKyAgICBmb3IgYWNfZgorICAgIGRvCisgICAgICBjYXNlICRhY19mIGluCisgICAgICAtKSBhY19mPSIkYWNfdG1wL3N0ZGluIjs7CisgICAgICAqKSAjIExvb2sgZm9yIHRoZSBmaWxlIGZpcnN0IGluIHRoZSBidWlsZCB0cmVlLCB0aGVuIGluIHRoZSBzb3VyY2UgdHJlZQorCSAjIChpZiB0aGUgcGF0aCBpcyBub3QgYWJzb2x1dGUpLiAgVGhlIGFic29sdXRlIHBhdGggY2Fubm90IGJlIERPUy1zdHlsZSwKKwkgIyBiZWNhdXNlICRhY19mIGNhbm5vdCBjb250YWluIGA6Jy4KKwkgdGVzdCAtZiAiJGFjX2YiIHx8CisJICAgY2FzZSAkYWNfZiBpbgorCSAgIFtcXC8kXSopIGZhbHNlOzsKKwkgICAqKSB0ZXN0IC1mICIkc3JjZGlyLyRhY19mIiAmJiBhY19mPSIkc3JjZGlyLyRhY19mIjs7CisJICAgZXNhYyB8fAorCSAgIGFzX2ZuX2Vycm9yIDEgImNhbm5vdCBmaW5kIGlucHV0IGZpbGU6IFxgJGFjX2YnIiAiJExJTkVOTyIgNTs7CisgICAgICBlc2FjCisgICAgICBjYXNlICRhY19mIGluICpcJyopIGFjX2Y9YCRhc19lY2hvICIkYWNfZiIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OyBlc2FjCisgICAgICBhc19mbl9hcHBlbmQgYWNfZmlsZV9pbnB1dHMgIiAnJGFjX2YnIgorICAgIGRvbmUKKworICAgICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0CisgICAgIyB1c2UgJGFzX21lKSwgcGVvcGxlIHdvdWxkIGJlIHN1cnByaXNlZCB0byByZWFkOgorICAgICMgICAgLyogY29uZmlnLmguICBHZW5lcmF0ZWQgYnkgY29uZmlnLnN0YXR1cy4gICovCisgICAgY29uZmlndXJlX2lucHV0PSdHZW5lcmF0ZWQgZnJvbSAnYAorCSAgJGFzX2VjaG8gIiQqIiB8IHNlZCAnc3xeW146XSovfHw7c3w6W146XSovfCwgfGcnCisJYCcgYnkgY29uZmlndXJlLicKKyAgICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCisgICAgICBjb25maWd1cmVfaW5wdXQ9IiRhY19maWxlLiAgJGNvbmZpZ3VyZV9pbnB1dCIKKyAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQorJGFzX2VjaG8gIiRhc19tZTogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNjt9CisgICAgZmkKKyAgICAjIE5ldXRyYWxpemUgc3BlY2lhbCBjaGFyYWN0ZXJzIGludGVycHJldGVkIGJ5IHNlZCBpbiByZXBsYWNlbWVudCBzdHJpbmdzLgorICAgIGNhc2UgJGNvbmZpZ3VyZV9pbnB1dCBpbiAjKAorICAgICpcJiogfCAqXHwqIHwgKlxcKiApCisgICAgICAgYWNfc2VkX2NvbmZfaW5wdXQ9YCRhc19lY2hvICIkY29uZmlndXJlX2lucHV0IiB8CisgICAgICAgc2VkICdzL1tcXFxcJnxdL1xcXFwmL2cnYDs7ICMoCisgICAgKikgYWNfc2VkX2NvbmZfaW5wdXQ9JGNvbmZpZ3VyZV9pbnB1dDs7CisgICAgZXNhYworCisgICAgY2FzZSAkYWNfdGFnIGluCisgICAgKjotOiogfCAqOi0pIGNhdCA+IiRhY190bXAvc3RkaW4iIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNSA7OworICAgIGVzYWMKKyAgICA7OwogICBlc2FjCiAKLSAgIyBDb21wdXRlIEBzcmNkaXJALCBAdG9wX3NyY2RpckAsIGFuZCBASU5TVEFMTEAgZm9yIHN1YmRpcmVjdG9yaWVzLgotICBhY19kaXI9YChkaXJuYW1lICIkYWNfZmlsZSIpIDI+L2Rldi9udWxsIHx8CisgIGFjX2Rpcj1gJGFzX2Rpcm5hbWUgLS0gIiRhY19maWxlIiB8fAogJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKIAkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICIkYWNfZGlyIgotICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQotCisJIFgiJGFjX2ZpbGUiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorJGFzX2VjaG8gWCIkYWNfZmlsZSIgfAorICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKVteL10uKi97CisJICAgIHMvL1wxLworCSAgICBxCisJICB9CisJICAvXlhcKFwvXC9cKSQveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgL15YXChcL1wpLioveworCSAgICBzLy9cMS8KKwkgICAgcQorCSAgfQorCSAgcy8uKi8uLzsgcSdgCisgIGFzX2Rpcj0iJGFjX2RpciI7IGFzX2ZuX21rZGlyX3AKICAgYWNfYnVpbGRkaXI9LgogCi1pZiB0ZXN0ICIkYWNfZGlyIiAhPSAuOyB0aGVuCi0gIGFjX2Rpcl9zdWZmaXg9L2BlY2hvICIkYWNfZGlyIiB8IHNlZCAncyxeXC5bXFwvXSwsJ2AKLSAgIyBBICIuLi8iIGZvciBlYWNoIGRpcmVjdG9yeSBpbiAkYWNfZGlyX3N1ZmZpeC4KLSAgYWNfdG9wX2J1aWxkZGlyPWBlY2hvICIkYWNfZGlyX3N1ZmZpeCIgfCBzZWQgJ3MsL1teXFwvXSosLi4vLGcnYAotZWxzZQotICBhY19kaXJfc3VmZml4PSBhY190b3BfYnVpbGRkaXI9Ci1maQorY2FzZSAiJGFjX2RpciIgaW4KKy4pIGFjX2Rpcl9zdWZmaXg9IGFjX3RvcF9idWlsZGRpcl9zdWI9LiBhY190b3BfYnVpbGRfcHJlZml4PSA7OworKikKKyAgYWNfZGlyX3N1ZmZpeD0vYCRhc19lY2hvICIkYWNfZGlyIiB8IHNlZCAnc3xeXC5bXFwvXXx8J2AKKyAgIyBBICIuLiIgZm9yIGVhY2ggZGlyZWN0b3J5IGluICRhY19kaXJfc3VmZml4LgorICBhY190b3BfYnVpbGRkaXJfc3ViPWAkYXNfZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzfC9bXlxcL10qfC8uLnxnO3N8L3x8J2AKKyAgY2FzZSAkYWNfdG9wX2J1aWxkZGlyX3N1YiBpbgorICAiIikgYWNfdG9wX2J1aWxkZGlyX3N1Yj0uIGFjX3RvcF9idWlsZF9wcmVmaXg9IDs7CisgICopICBhY190b3BfYnVpbGRfcHJlZml4PSRhY190b3BfYnVpbGRkaXJfc3ViLyA7OworICBlc2FjIDs7Citlc2FjCithY19hYnNfdG9wX2J1aWxkZGlyPSRhY19wd2QKK2FjX2Fic19idWlsZGRpcj0kYWNfcHdkJGFjX2Rpcl9zdWZmaXgKKyMgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHk6CithY190b3BfYnVpbGRkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgKIAogY2FzZSAkc3JjZGlyIGluCi0gIC4pICAjIE5vIC0tc3JjZGlyIG9wdGlvbi4gIFdlIGFyZSBidWlsZGluZyBpbiBwbGFjZS4KKyAgLikgICMgV2UgYXJlIGJ1aWxkaW5nIGluIHBsYWNlLgogICAgIGFjX3NyY2Rpcj0uCi0gICAgaWYgdGVzdCAteiAiJGFjX3RvcF9idWlsZGRpciI7IHRoZW4KLSAgICAgICBhY190b3Bfc3JjZGlyPS4KLSAgICBlbHNlCi0gICAgICAgYWNfdG9wX3NyY2Rpcj1gZWNobyAkYWNfdG9wX2J1aWxkZGlyIHwgc2VkICdzLC8kLCwnYAotICAgIGZpIDs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgICMgQWJzb2x1dGUgcGF0aC4KKyAgICBhY190b3Bfc3JjZGlyPSRhY190b3BfYnVpbGRkaXJfc3ViCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZCA7OworICBbXFwvXSogfCA/OltcXC9dKiApICAjIEFic29sdXRlIG5hbWUuCiAgICAgYWNfc3JjZGlyPSRzcmNkaXIkYWNfZGlyX3N1ZmZpeDsKLSAgICBhY190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKLSAgKikgIyBSZWxhdGl2ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciRhY19kaXJfc3VmZml4Ci0gICAgYWNfdG9wX3NyY2Rpcj0kYWNfdG9wX2J1aWxkZGlyJHNyY2RpciA7OworICAgIGFjX3RvcF9zcmNkaXI9JHNyY2RpcgorICAgIGFjX2Fic190b3Bfc3JjZGlyPSRzcmNkaXIgOzsKKyAgKikgIyBSZWxhdGl2ZSBuYW1lLgorICAgIGFjX3NyY2Rpcj0kYWNfdG9wX2J1aWxkX3ByZWZpeCRzcmNkaXIkYWNfZGlyX3N1ZmZpeAorICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZF9wcmVmaXgkc3JjZGlyCisgICAgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3B3ZC8kc3JjZGlyIDs7CiBlc2FjCithY19hYnNfc3JjZGlyPSRhY19hYnNfdG9wX3NyY2RpciRhY19kaXJfc3VmZml4CiAKLSMgRG8gbm90IHVzZSBgY2QgZm9vICYmIHB3ZGAgdG8gY29tcHV0ZSBhYnNvbHV0ZSBwYXRocywgYmVjYXVzZQotIyB0aGUgZGlyZWN0b3JpZXMgbWF5IG5vdCBleGlzdC4KLWNhc2UgYHB3ZGAgaW4KLS4pIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotKikKLSAgY2FzZSAiJGFjX2RpciIgaW4KLSAgLikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfYnVpbGRkaXI9IiRhY19kaXIiOzsKLSAgKikgYWNfYWJzX2J1aWxkZGlyPWBwd2RgLyIkYWNfZGlyIjs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotKikKLSAgY2FzZSAke2FjX3RvcF9idWlsZGRpcn0uIGluCi0gIC4pIGFjX2Fic190b3BfYnVpbGRkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9idWlsZGRpcj0ke2FjX3RvcF9idWlsZGRpcn0uOzsKLSAgKikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyLyR7YWNfdG9wX2J1aWxkZGlyfS47OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3NyY2RpciBpbgotICAuKSBhY19hYnNfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXI7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19zcmNkaXI9JGFjX3NyY2Rpcjs7Ci0gICopIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpci8kYWNfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3Bfc3JjZGlyPSRhY190b3Bfc3JjZGlyOzsKLSopCi0gIGNhc2UgJGFjX3RvcF9zcmNkaXIgaW4KLSAgLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotICAqKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY190b3Bfc3JjZGlyOzsKLSAgZXNhYzs7Ci1lc2FjCiAKKyAgY2FzZSAkYWNfbW9kZSBpbgorICA6RikKKyAgIworICAjIENPTkZJR19GSUxFCisgICMKIAogICBjYXNlICRJTlNUQUxMIGluCiAgIFtcXC8kXSogfCA/OltcXC9dKiApIGFjX0lOU1RBTEw9JElOU1RBTEwgOzsKLSAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkZGlyJElOU1RBTEwgOzsKKyAgKikgYWNfSU5TVEFMTD0kYWNfdG9wX2J1aWxkX3ByZWZpeCRJTlNUQUxMIDs7CiAgIGVzYWMKLQotICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogY3JlYXRpbmcgJGFjX2ZpbGUiID4mNQotZWNobyAiJGFzX21lOiBjcmVhdGluZyAkYWNfZmlsZSIgPiY2O30KLSAgICBybSAtZiAiJGFjX2ZpbGUiCi0gIGZpCi0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKLSAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCi0gICAgY29uZmlndXJlX2lucHV0PQotICBlbHNlCi0gICAgY29uZmlndXJlX2lucHV0PSIkYWNfZmlsZS4gICIKLSAgZmkKLSAgY29uZmlndXJlX2lucHV0PSRjb25maWd1cmVfaW5wdXQiR2VuZXJhdGVkIGZyb20gYGVjaG8gJGFjX2ZpbGVfaW4gfAotCQkJCSAgICAgc2VkICdzLC4qLywsJ2AgYnkgY29uZmlndXJlLiIKLQotICAjIEZpcnN0IGxvb2sgZm9yIHRoZSBpbnB1dCBmaWxlcyBpbiB0aGUgYnVpbGQgdHJlZSwgb3RoZXJ3aXNlIGluIHRoZQotICAjIHNyYyB0cmVlLgotICBhY19maWxlX2lucHV0cz1gSUZTPToKLSAgICBmb3IgZiBpbiAkYWNfZmlsZV9pbjsgZG8KLSAgICAgIGNhc2UgJGYgaW4KLSAgICAgIC0pIGVjaG8gJHRtcC9zdGRpbiA7OwotICAgICAgW1xcLyRdKikKLQkgIyBBYnNvbHV0ZSAoY2FuJ3QgYmUgRE9TLXN0eWxlLCBhcyBJRlM9OikKLQkgdGVzdCAtZiAiJGYiIHx8IHsgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjUKLWVjaG8gIiRhc19tZTogZXJyb3I6IGNhbm5vdCBmaW5kIGlucHV0IGZpbGU6ICRmIiA+JjI7fQotICAgeyAoZXhpdCAxKTsgZXhpdCAxOyB9OyB9Ci0JIGVjaG8gIiRmIjs7Ci0gICAgICAqKSAjIFJlbGF0aXZlCi0JIGlmIHRlc3QgLWYgIiRmIjsgdGhlbgotCSAgICMgQnVpbGQgdHJlZQotCSAgIGVjaG8gIiRmIgotCSBlbGlmIHRlc3QgLWYgIiRzcmNkaXIvJGYiOyB0aGVuCi0JICAgIyBTb3VyY2UgdHJlZQotCSAgIGVjaG8gIiRzcmNkaXIvJGYiCi0JIGVsc2UKLQkgICAjIC9kZXYvbnVsbCB0cmVlCi0JICAgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgZmk7OwotICAgICAgZXNhYwotICAgIGRvbmVgIHx8IHsgKGV4aXQgMSk7IGV4aXQgMTsgfQogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PF9BQ0VPRgotICBzZWQgIiRhY192cHN1YgorCitjYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisjIElmIHRoZSB0ZW1wbGF0ZSBkb2VzIG5vdCBrbm93IGFib3V0IGRhdGFyb290ZGlyLCBleHBhbmQgaXQuCisjIEZJWE1FOiBUaGlzIGhhY2sgc2hvdWxkIGJlIHJlbW92ZWQgYSBmZXcgeWVhcnMgYWZ0ZXIgMi42MC4KK2FjX2RhdGFyb290ZGlyX2hhY2s9OyBhY19kYXRhcm9vdGRpcl9zZWVuPQorYWNfc2VkX2RhdGFyb290PScKKy9kYXRhcm9vdGRpci8geworICBwCisgIHEKK30KKy9AZGF0YWRpckAvcAorL0Bkb2NkaXJAL3AKKy9AaW5mb2RpckAvcAorL0Bsb2NhbGVkaXJAL3AKKy9AbWFuZGlyQC9wJworY2FzZSBgZXZhbCAic2VkIC1uIFwiXCRhY19zZWRfZGF0YXJvb3RcIiAkYWNfZmlsZV9pbnB1dHMiYCBpbgorKmRhdGFyb290ZGlyKikgYWNfZGF0YXJvb3RkaXJfc2Vlbj15ZXM7OworKkBkYXRhZGlyQCp8KkBkb2NkaXJAKnwqQGluZm9kaXJAKnwqQGxvY2FsZWRpckAqfCpAbWFuZGlyQCopCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogJGFjX2ZpbGVfaW5wdXRzIHNlZW1zIHRvIGlnbm9yZSB0aGUgLS1kYXRhcm9vdGRpciBzZXR0aW5nIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6ICRhY19maWxlX2lucHV0cyBzZWVtcyB0byBpZ25vcmUgdGhlIC0tZGF0YXJvb3RkaXIgc2V0dGluZyIgPiYyO30KK19BQ0VPRgorY2F0ID4+JENPTkZJR19TVEFUVVMgPDxfQUNFT0YgfHwgYWNfd3JpdGVfZmFpbD0xCisgIGFjX2RhdGFyb290ZGlyX2hhY2s9JworICBzJkBkYXRhZGlyQCYkZGF0YWRpciZnCisgIHMmQGRvY2RpckAmJGRvY2RpciZnCisgIHMmQGluZm9kaXJAJiRpbmZvZGlyJmcKKyAgcyZAbG9jYWxlZGlyQCYkbG9jYWxlZGlyJmcKKyAgcyZAbWFuZGlyQCYkbWFuZGlyJmcKKyAgcyZcXFwke2RhdGFyb290ZGlyfSYkZGF0YXJvb3RkaXImZycgOzsKK2VzYWMKK19BQ0VPRgorCisjIE5ldXRyYWxpemUgVlBBVEggd2hlbiBgJHNyY2RpcicgPSBgLicuCisjIFNoZWxsIGNvZGUgaW4gY29uZmlndXJlLmFjIG1pZ2h0IHNldCBleHRyYXN1Yi4KKyMgRklYTUU6IGRvIHdlIHJlYWxseSB3YW50IHRvIG1haW50YWluIHRoaXMgZmVhdHVyZT8KK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8X0FDRU9GIHx8IGFjX3dyaXRlX2ZhaWw9MQorYWNfc2VkX2V4dHJhPSIkYWNfdnBzdWIKICRleHRyYXN1YgogX0FDRU9GCi1jYXQgPj4kQ09ORklHX1NUQVRVUyA8PFxfQUNFT0YKK2NhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRiB8fCBhY193cml0ZV9mYWlsPTEKIDp0CiAvQFthLXpBLVpfXVthLXpBLVpfMC05XSpALyFiCi1zLEBjb25maWd1cmVfaW5wdXRALCRjb25maWd1cmVfaW5wdXQsO3QgdAotcyxAc3JjZGlyQCwkYWNfc3JjZGlyLDt0IHQKLXMsQGFic19zcmNkaXJALCRhY19hYnNfc3JjZGlyLDt0IHQKLXMsQHRvcF9zcmNkaXJALCRhY190b3Bfc3JjZGlyLDt0IHQKLXMsQGFic190b3Bfc3JjZGlyQCwkYWNfYWJzX3RvcF9zcmNkaXIsO3QgdAotcyxAYnVpbGRkaXJALCRhY19idWlsZGRpciw7dCB0Ci1zLEBhYnNfYnVpbGRkaXJALCRhY19hYnNfYnVpbGRkaXIsO3QgdAotcyxAdG9wX2J1aWxkZGlyQCwkYWNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQGFic190b3BfYnVpbGRkaXJALCRhY19hYnNfdG9wX2J1aWxkZGlyLDt0IHQKLXMsQElOU1RBTExALCRhY19JTlNUQUxMLDt0IHQKLSIgJGFjX2ZpbGVfaW5wdXRzIHwgKGV2YWwgIiRhY19zZWRfY21kcyIpID4kdG1wL291dAotICBybSAtZiAkdG1wL3N0ZGluCi0gIGlmIHRlc3QgeCIkYWNfZmlsZSIgIT0geC07IHRoZW4KLSAgICBtdiAkdG1wL291dCAkYWNfZmlsZQotICBlbHNlCi0gICAgY2F0ICR0bXAvb3V0Ci0gICAgcm0gLWYgJHRtcC9vdXQKLSAgZmkKK3N8QGNvbmZpZ3VyZV9pbnB1dEB8JGFjX3NlZF9jb25mX2lucHV0fDt0IHQKK3MmQHRvcF9idWlsZGRpckAmJGFjX3RvcF9idWlsZGRpcl9zdWImO3QgdAorcyZAdG9wX2J1aWxkX3ByZWZpeEAmJGFjX3RvcF9idWlsZF9wcmVmaXgmO3QgdAorcyZAc3JjZGlyQCYkYWNfc3JjZGlyJjt0IHQKK3MmQGFic19zcmNkaXJAJiRhY19hYnNfc3JjZGlyJjt0IHQKK3MmQHRvcF9zcmNkaXJAJiRhY190b3Bfc3JjZGlyJjt0IHQKK3MmQGFic190b3Bfc3JjZGlyQCYkYWNfYWJzX3RvcF9zcmNkaXImO3QgdAorcyZAYnVpbGRkaXJAJiRhY19idWlsZGRpciY7dCB0CitzJkBhYnNfYnVpbGRkaXJAJiRhY19hYnNfYnVpbGRkaXImO3QgdAorcyZAYWJzX3RvcF9idWlsZGRpckAmJGFjX2Fic190b3BfYnVpbGRkaXImO3QgdAorcyZASU5TVEFMTEAmJGFjX0lOU1RBTEwmO3QgdAorJGFjX2RhdGFyb290ZGlyX2hhY2sKKyIKK2V2YWwgc2VkIFwiXCRhY19zZWRfZXh0cmFcIiAiJGFjX2ZpbGVfaW5wdXRzIiB8CitpZiAkYWNfY3NfYXdrX2dldGxpbmU7IHRoZW4KKyAgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIKK2Vsc2UKKyAgJEFXSyAtZiAiJGFjX3RtcC9zdWJzLmF3ayIgfCAkU0hFTEwKK2ZpIFwKKyAgPiRhY190bXAvb3V0IHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQogCi0gICMgUnVuIHRoZSBjb21tYW5kcyBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCit0ZXN0IC16ICIkYWNfZGF0YXJvb3RkaXJfaGFjayRhY19kYXRhcm9vdGRpcl9zZWVuIiAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXCR7ZGF0YXJvb3RkaXJ9L3AnICIkYWNfdG1wL291dCJgOyB0ZXN0IC1uICIkYWNfb3V0IjsgfSAmJgorICB7IGFjX291dD1gc2VkIC1uICcvXlsJIF0qZGF0YXJvb3RkaXJbCSBdKjoqPS9wJyBcCisgICAgICAiJGFjX3RtcC9vdXQiYDsgdGVzdCAteiAiJGFjX291dCI7IH0gJiYKKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiAkYWNfZmlsZSBjb250YWlucyBhIHJlZmVyZW5jZSB0byB0aGUgdmFyaWFibGUgXGBkYXRhcm9vdGRpcicKK3doaWNoIHNlZW1zIHRvIGJlIHVuZGVmaW5lZC4gIFBsZWFzZSBtYWtlIHN1cmUgaXQgaXMgZGVmaW5lZCIgPiYyO30KKworICBybSAtZiAiJGFjX3RtcC9zdGRpbiIKICAgY2FzZSAkYWNfZmlsZSBpbgotICAgIG5ldC1zbm1wLWNvbmZpZyApIGNobW9kICt4IG5ldC1zbm1wLWNvbmZpZyA7OwotICBlc2FjCi1kb25lCi1fQUNFT0YKLWNhdCA+PiRDT05GSUdfU1RBVFVTIDw8XF9BQ0VPRgotCi0jCi0jIENPTkZJR19IRUFERVIgc2VjdGlvbi4KLSMKLQotIyBUaGVzZSBzZWQgY29tbWFuZHMgYXJlIHBhc3NlZCB0byBzZWQgYXMgIkEgTkFNRSBCIE5BTUUgQyBWQUxVRSBEIiwgd2hlcmUKLSMgTkFNRSBpcyB0aGUgY3BwIG1hY3JvIGJlaW5nIGRlZmluZWQgYW5kIFZBTFVFIGlzIHRoZSB2YWx1ZSBpdCBpcyBiZWluZyBnaXZlbi4KLSMKLSMgYWNfZCBzZXRzIHRoZSB2YWx1ZSBpbiAiI2RlZmluZSBOQU1FIFZBTFVFIiBsaW5lcy4KLWFjX2RBPSdzLF5cKFsJIF0qXCkjXChbCSBdKmRlZmluZVsJIF1bCSBdKlwpJwotYWNfZEI9J1sJIF0uKiQsXDEjXDInCi1hY19kQz0nICcKLWFjX2REPScsO3QnCi0jIGFjX3UgdHVybnMgIiN1bmRlZiBOQU1FIiB3aXRob3V0IHRyYWlsaW5nIGJsYW5rcyBpbnRvICIjZGVmaW5lIE5BTUUgVkFMVUUiLgotYWNfdUE9J3MsXlwoWwkgXSpcKSNcKFsJIF0qXCl1bmRlZlwoWwkgXVsJIF0qXCknCi1hY191Qj0nJCxcMSNcMmRlZmluZVwzJwotYWNfdUM9JyAnCi1hY191RD0nLDt0JwotCi1mb3IgYWNfZmlsZSBpbiA6ICRDT05GSUdfSEVBREVSUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gICMgU3VwcG9ydCAib3V0ZmlsZVs6aW5maWxlWzppbmZpbGUuLi5dXSIsIGRlZmF1bHRpbmcgaW5maWxlPSJvdXRmaWxlLmluIi4KLSAgY2FzZSAkYWNfZmlsZSBpbgotICAtIHwgKjotIHwgKjotOiogKSAjIGlucHV0IGZyb20gc3RkaW4KLQljYXQgPiR0bXAvc3RkaW4KLQlhY19maWxlX2luPWBlY2hvICIkYWNfZmlsZSIgfCBzZWQgJ3MsW146XSo6LCwnYAotCWFjX2ZpbGU9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgIDs7Ci0gICo6KiApIGFjX2ZpbGVfaW49YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyxbXjpdKjosLCdgCi0JYWNfZmlsZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLDouKiwsJ2AgOzsKLSAgKiApICAgYWNfZmlsZV9pbj0kYWNfZmlsZS5pbiA7OwotICBlc2FjCi0KLSAgdGVzdCB4IiRhY19maWxlIiAhPSB4LSAmJiB7IGVjaG8gIiRhc19tZTokTElORU5POiBjcmVhdGluZyAkYWNfZmlsZSIgPiY1Ci1lY2hvICIkYXNfbWU6IGNyZWF0aW5nICRhY19maWxlIiA+JjY7fQotCi0gICMgRmlyc3QgbG9vayBmb3IgdGhlIGlucHV0IGZpbGVzIGluIHRoZSBidWlsZCB0cmVlLCBvdGhlcndpc2UgaW4gdGhlCi0gICMgc3JjIHRyZWUuCi0gIGFjX2ZpbGVfaW5wdXRzPWBJRlM9OgotICAgIGZvciBmIGluICRhY19maWxlX2luOyBkbwotICAgICAgY2FzZSAkZiBpbgotICAgICAgLSkgZWNobyAkdG1wL3N0ZGluIDs7Ci0gICAgICBbXFwvJF0qKQotCSAjIEFic29sdXRlIChjYW4ndCBiZSBET1Mtc3R5bGUsIGFzIElGUz06KQotCSB0ZXN0IC1mICIkZiIgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGZpbmQgaW5wdXQgZmlsZTogJGYiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH0KLQkgIyBEbyBxdW90ZSAkZiwgdG8gcHJldmVudCBET1MgcGF0aHMgZnJvbSBiZWluZyBJRlMnZC4KLQkgZWNobyAiJGYiOzsKLSAgICAgICopICMgUmVsYXRpdmUKLQkgaWYgdGVzdCAtZiAiJGYiOyB0aGVuCi0JICAgIyBCdWlsZCB0cmVlCi0JICAgZWNobyAiJGYiCi0JIGVsaWYgdGVzdCAtZiAiJHNyY2Rpci8kZiI7IHRoZW4KLQkgICAjIFNvdXJjZSB0cmVlCi0JICAgZWNobyAiJHNyY2Rpci8kZiIKLQkgZWxzZQotCSAgICMgL2Rldi9udWxsIHRyZWUKLQkgICB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgZmluZCBpbnB1dCBmaWxlOiAkZiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfQotCSBmaTs7Ci0gICAgICBlc2FjCi0gICAgZG9uZWAgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9Ci0gICMgUmVtb3ZlIHRoZSB0cmFpbGluZyBzcGFjZXMuCi0gIHNlZCAncy9bCSBdKiQvLycgJGFjX2ZpbGVfaW5wdXRzID4kdG1wL2luCi0KLV9BQ0VPRgotCi0jIFRyYW5zZm9ybSBjb25mZGVmcy5oIGludG8gdHdvIHNlZCBzY3JpcHRzLCBgY29uZnRlc3QuZGVmaW5lcycgYW5kCi0jIGBjb25mdGVzdC51bmRlZnMnLCB0aGF0IHN1YnN0aXR1dGVzIHRoZSBwcm9wZXIgdmFsdWVzIGludG8KLSMgY29uZmlnLmguaW4gdG8gcHJvZHVjZSBjb25maWcuaC4gIFRoZSBmaXJzdCBoYW5kbGVzIGAjZGVmaW5lJwotIyB0ZW1wbGF0ZXMsIGFuZCB0aGUgc2Vjb25kIGAjdW5kZWYnIHRlbXBsYXRlcy4KLSMgQW5kIGZpcnN0OiBQcm90ZWN0IGFnYWluc3QgYmVpbmcgb24gdGhlIHJpZ2h0IHNpZGUgb2YgYSBzZWQgc3Vic3QgaW4KLSMgY29uZmlnLnN0YXR1cy4gIFByb3RlY3QgYWdhaW5zdCBiZWluZyBpbiBhbiB1bnF1b3RlZCBoZXJlIGRvY3VtZW50Ci0jIGluIGNvbmZpZy5zdGF0dXMuCi1ybSAtZiBjb25mdGVzdC5kZWZpbmVzIGNvbmZ0ZXN0LnVuZGVmcwotIyBVc2luZyBhIGhlcmUgZG9jdW1lbnQgaW5zdGVhZCBvZiBhIHN0cmluZyByZWR1Y2VzIHRoZSBxdW90aW5nIG5pZ2h0bWFyZS4KLSMgUHV0dGluZyBjb21tZW50cyBpbiBzZWQgc2NyaXB0cyBpcyBub3QgcG9ydGFibGUuCi0jCi0jIGBlbmQnIGlzIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgc2Vjb25kIG1haW4gc2VkIGNvbW1hbmQgKG1lYW50IGZvcgotIyAwLWFyeSBDUFAgbWFjcm9zKSBhcHBsaWVzIHRvIG4tYXJ5IG1hY3JvIGRlZmluaXRpb25zLgotIyBTZWUgdGhlIEF1dG9jb25mIGRvY3VtZW50YXRpb24gZm9yIGBjbGVhcicuCi1jYXQgPmNvbmZkZWYyc2VkLnNlZCA8PFxfQUNFT0YKLXMvW1xcJixdL1xcJi9nCi1zLFtcXCRgXSxcXCYsZwotdCBjbGVhcgotOiBjbGVhcgotcyxeWwkgXSojWwkgXSpkZWZpbmVbCSBdWwkgXSpcKFteCSAoXVteCSAoXSpcKVwoKFteKV0qKVwpWwkgXSpcKC4qXCkkLCR7YWNfZEF9XDEke2FjX2RCfVwxXDIke2FjX2RDfVwzJHthY19kRH0sZ3AKLXQgZW5kCi1zLF5bCSBdKiNbCSBdKmRlZmluZVsJIF1bCSBdKlwoW14JIF1bXgkgXSpcKVsJIF0qXCguKlwpJCwke2FjX2RBfVwxJHthY19kQn1cMSR7YWNfZEN9XDIke2FjX2REfSxncAotOiBlbmQKLV9BQ0VPRgotIyBJZiBzb21lIG1hY3JvcyB3ZXJlIGNhbGxlZCBzZXZlcmFsIHRpbWVzIHRoZXJlIG1pZ2h0IGJlIHNldmVyYWwgdGltZXMKLSMgdGhlIHNhbWUgI2RlZmluZXMsIHdoaWNoIGlzIHVzZWxlc3MuICBOZXZlcnRoZWxlc3MsIHdlIG1heSBub3Qgd2FudCB0bwotIyBzb3J0IHRoZW0sIHNpbmNlIHdlIHdhbnQgdGhlICpsYXN0KiBBQy1ERUZJTkUgdG8gYmUgaG9ub3JlZC4KLXVuaXEgY29uZmRlZnMuaCB8IHNlZCAtbiAtZiBjb25mZGVmMnNlZC5zZWQgPmNvbmZ0ZXN0LmRlZmluZXMKLXNlZCAncy9hY19kL2FjX3UvZycgY29uZnRlc3QuZGVmaW5lcyA+Y29uZnRlc3QudW5kZWZzCi1ybSAtZiBjb25mZGVmMnNlZC5zZWQKLQotIyBUaGlzIHNlZCBjb21tYW5kIHJlcGxhY2VzICN1bmRlZiB3aXRoIGNvbW1lbnRzLiAgVGhpcyBpcyBuZWNlc3NhcnksIGZvcgotIyBleGFtcGxlLCBpbiB0aGUgY2FzZSBvZiBfUE9TSVhfU09VUkNFLCB3aGljaCBpcyBwcmVkZWZpbmVkIGFuZCByZXF1aXJlZAotIyBvbiBzb21lIHN5c3RlbXMgd2hlcmUgY29uZmlndXJlIHdpbGwgbm90IGRlY2lkZSB0byBkZWZpbmUgaXQuCi1jYXQgPj5jb25mdGVzdC51bmRlZnMgPDxcX0FDRU9GCi1zLF5bCSBdKiNbCSBdKnVuZGVmWwkgXVsJIF0qW2EtekEtWl9dW2EtekEtWl8wLTldKiwvKiAmICovLAotX0FDRU9GCi0KLSMgQnJlYWsgdXAgY29uZnRlc3QuZGVmaW5lcyBiZWNhdXNlIHNvbWUgc2hlbGxzIGhhdmUgYSBsaW1pdCBvbiB0aGUgc2l6ZQotIyBvZiBoZXJlIGRvY3VtZW50cywgYW5kIG9sZCBzZWRzIGhhdmUgc21hbGwgbGltaXRzIHRvbyAoMTAwIGNtZHMpLgotZWNobyAnICAjIEhhbmRsZSBhbGwgdGhlICNkZWZpbmUgdGVtcGxhdGVzIG9ubHkgaWYgbmVjZXNzYXJ5LicgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICBpZiBncmVwICJeWwkgXSojWwkgXSpkZWZpbmUiICR0bXAvaW4gPi9kZXYvbnVsbDsgdGhlbicgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICAjIElmIHRoZXJlIGFyZSBubyBkZWZpbmVzLCB3ZSBtYXkgaGF2ZSBhbiBlbXB0eSBpZi9maScgPj4kQ09ORklHX1NUQVRVUwotZWNobyAnICA6JyA+PiRDT05GSUdfU1RBVFVTCi1ybSAtZiBjb25mdGVzdC50YWlsCi13aGlsZSBncmVwIC4gY29uZnRlc3QuZGVmaW5lcyA+L2Rldi9udWxsCi1kbwotICAjIFdyaXRlIGEgbGltaXRlZC1zaXplIGhlcmUgZG9jdW1lbnQgdG8gJHRtcC9kZWZpbmVzLnNlZC4KLSAgZWNobyAnICBjYXQgPiR0bXAvZGVmaW5lcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCNkZWZpbmUnIGxpbmVzLgotICBlY2hvICcvXlsJIF0qI1sJIF0qZGVmaW5lLyFiJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCi0gIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QuZGVmaW5lcyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJ0NFT0YKLSAgc2VkIC1mICR0bXAvZGVmaW5lcy5zZWQgJHRtcC9pbiA+JHRtcC9vdXQKLSAgcm0gLWYgJHRtcC9pbgotICBtdiAkdG1wL291dCAkdG1wL2luCi0nID4+JENPTkZJR19TVEFUVVMKLSAgc2VkIDEsJHthY19tYXhfaGVyZV9saW5lc31kIGNvbmZ0ZXN0LmRlZmluZXMgPmNvbmZ0ZXN0LnRhaWwKLSAgcm0gLWYgY29uZnRlc3QuZGVmaW5lcwotICBtdiBjb25mdGVzdC50YWlsIGNvbmZ0ZXN0LmRlZmluZXMKLWRvbmUKLXJtIC1mIGNvbmZ0ZXN0LmRlZmluZXMKLWVjaG8gJyAgZmkgIyBncmVwJyA+PiRDT05GSUdfU1RBVFVTCi1lY2hvID4+JENPTkZJR19TVEFUVVMKLQotIyBCcmVhayB1cCBjb25mdGVzdC51bmRlZnMgYmVjYXVzZSBzb21lIHNoZWxscyBoYXZlIGEgbGltaXQgb24gdGhlIHNpemUKLSMgb2YgaGVyZSBkb2N1bWVudHMsIGFuZCBvbGQgc2VkcyBoYXZlIHNtYWxsIGxpbWl0cyB0b28gKDEwMCBjbWRzKS4KLWVjaG8gJyAgIyBIYW5kbGUgYWxsIHRoZSAjdW5kZWYgdGVtcGxhdGVzJyA+PiRDT05GSUdfU1RBVFVTCi1ybSAtZiBjb25mdGVzdC50YWlsCi13aGlsZSBncmVwIC4gY29uZnRlc3QudW5kZWZzID4vZGV2L251bGwKLWRvCi0gICMgV3JpdGUgYSBsaW1pdGVkLXNpemUgaGVyZSBkb2N1bWVudCB0byAkdG1wL3VuZGVmcy5zZWQuCi0gIGVjaG8gJyAgY2F0ID4kdG1wL3VuZGVmcy5zZWQgPDxDRU9GJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgU3BlZWQgdXA6IGRvbid0IGNvbnNpZGVyIHRoZSBub24gYCN1bmRlZicKLSAgZWNobyAnL15bCSBdKiNbCSBdKnVuZGVmLyFiJyA+PiRDT05GSUdfU1RBVFVTCi0gICMgV29yayBhcm91bmQgdGhlIGZvcmdldC10by1yZXNldC10aGUtZmxhZyBidWcuCi0gIGVjaG8gJ3QgY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIGVjaG8gJzogY2xyJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAke2FjX21heF9oZXJlX2xpbmVzfXEgY29uZnRlc3QudW5kZWZzID4+JENPTkZJR19TVEFUVVMKLSAgZWNobyAnQ0VPRgotICBzZWQgLWYgJHRtcC91bmRlZnMuc2VkICR0bXAvaW4gPiR0bXAvb3V0Ci0gIHJtIC1mICR0bXAvaW4KLSAgbXYgJHRtcC9vdXQgJHRtcC9pbgotJyA+PiRDT05GSUdfU1RBVFVTCi0gIHNlZCAxLCR7YWNfbWF4X2hlcmVfbGluZXN9ZCBjb25mdGVzdC51bmRlZnMgPmNvbmZ0ZXN0LnRhaWwKLSAgcm0gLWYgY29uZnRlc3QudW5kZWZzCi0gIG12IGNvbmZ0ZXN0LnRhaWwgY29uZnRlc3QudW5kZWZzCi1kb25lCi1ybSAtZiBjb25mdGVzdC51bmRlZnMKLQotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCi0gICMgTGV0J3Mgc3RpbGwgcHJldGVuZCBpdCBpcyBgY29uZmlndXJlJyB3aGljaCBpbnN0YW50aWF0ZXMgKGkuZS4sIGRvbid0Ci0gICMgdXNlICRhc19tZSksIHBlb3BsZSB3b3VsZCBiZSBzdXJwcmlzZWQgdG8gcmVhZDoKLSAgIyAgICAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBieSBjb25maWcuc3RhdHVzLiAgKi8KLSAgaWYgdGVzdCB4IiRhY19maWxlIiA9IHgtOyB0aGVuCi0gICAgZWNobyAiLyogR2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gICovIiA+JHRtcC9jb25maWcuaAotICBlbHNlCi0gICAgZWNobyAiLyogJGFjX2ZpbGUuICBHZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgKi8iID4kdG1wL2NvbmZpZy5oCi0gIGZpCi0gIGNhdCAkdG1wL2luID4+JHRtcC9jb25maWcuaAotICBybSAtZiAkdG1wL2luCisgIC0pIGNhdCAiJGFjX3RtcC9vdXQiICYmIHJtIC1mICIkYWNfdG1wL291dCI7OworICAqKSBybSAtZiAiJGFjX2ZpbGUiICYmIG12ICIkYWNfdG1wL291dCIgIiRhY19maWxlIjs7CisgIGVzYWMgXAorICB8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKKyA7OworICA6SCkKKyAgIworICAjIENPTkZJR19IRUFERVIKKyAgIwogICBpZiB0ZXN0IHgiJGFjX2ZpbGUiICE9IHgtOyB0aGVuCi0gICAgaWYgZGlmZiAkYWNfZmlsZSAkdG1wL2NvbmZpZy5oID4vZGV2L251bGwgMj4mMTsgdGhlbgotICAgICAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjUKLWVjaG8gIiRhc19tZTogJGFjX2ZpbGUgaXMgdW5jaGFuZ2VkIiA+JjY7fQorICAgIHsKKyAgICAgICRhc19lY2hvICIvKiAkY29uZmlndXJlX2lucHV0ICAqLyIgXAorICAgICAgJiYgZXZhbCAnJEFXSyAtZiAiJGFjX3RtcC9kZWZpbmVzLmF3ayInICIkYWNfZmlsZV9pbnB1dHMiCisgICAgfSA+IiRhY190bXAvY29uZmlnLmgiIFwKKyAgICAgIHx8IGFzX2ZuX2Vycm9yICQ/ICJjb3VsZCBub3QgY3JlYXRlICRhY19maWxlIiAiJExJTkVOTyIgNQorICAgIGlmIGRpZmYgIiRhY19maWxlIiAiJGFjX3RtcC9jb25maWcuaCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306ICRhY19maWxlIGlzIHVuY2hhbmdlZCIgPiY1CiskYXNfZWNobyAiJGFzX21lOiAkYWNfZmlsZSBpcyB1bmNoYW5nZWQiID4mNjt9CiAgICAgZWxzZQotICAgICAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2ZpbGUiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYWNfZmlsZSIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZmlsZSIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19maWxlIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICAgIHsgaWYgJGFzX21rZGlyX3A7IHRoZW4KLSAgICBta2RpciAtcCAiJGFjX2RpciIKLSAgZWxzZQotICAgIGFzX2Rpcj0iJGFjX2RpciIKLSAgICBhc19kaXJzPQotICAgIHdoaWxlIHRlc3QgISAtZCAiJGFzX2RpciI7IGRvCi0gICAgICBhc19kaXJzPSIkYXNfZGlyICRhc19kaXJzIgotICAgICAgYXNfZGlyPWAoZGlybmFtZSAiJGFzX2RpciIpIDI+L2Rldi9udWxsIHx8Ci0kYXNfZXhwciBYIiRhc19kaXIiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpJCcgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC9cKScgXHwgXAotCSAuICAgICA6ICdcKC5cKScgMj4vZGV2L251bGwgfHwKLWVjaG8gWCIkYXNfZGlyIiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgICBkb25lCi0gICAgdGVzdCAhIC1uICIkYXNfZGlycyIgfHwgbWtkaXIgJGFzX2RpcnMKLSAgZmkgfHwgeyB7IGVjaG8gIiRhc19tZTokTElORU5POiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mNQotZWNobyAiJGFzX21lOiBlcnJvcjogY2Fubm90IGNyZWF0ZSBkaXJlY3RvcnkgXCIkYWNfZGlyXCIiID4mMjt9Ci0gICB7IChleGl0IDEpOyBleGl0IDE7IH07IH07IH0KLQotICAgICAgcm0gLWYgJGFjX2ZpbGUKLSAgICAgIG12ICR0bXAvY29uZmlnLmggJGFjX2ZpbGUKKyAgICAgIHJtIC1mICIkYWNfZmlsZSIKKyAgICAgIG12ICIkYWNfdG1wL2NvbmZpZy5oIiAiJGFjX2ZpbGUiIFwKKwl8fCBhc19mbl9lcnJvciAkPyAiY291bGQgbm90IGNyZWF0ZSAkYWNfZmlsZSIgIiRMSU5FTk8iIDUKICAgICBmaQogICBlbHNlCi0gICAgY2F0ICR0bXAvY29uZmlnLmgKLSAgICBybSAtZiAkdG1wL2NvbmZpZy5oCisgICAgJGFzX2VjaG8gIi8qICRjb25maWd1cmVfaW5wdXQgICovIiBcCisgICAgICAmJiBldmFsICckQVdLIC1mICIkYWNfdG1wL2RlZmluZXMuYXdrIicgIiRhY19maWxlX2lucHV0cyIgXAorICAgICAgfHwgYXNfZm5fZXJyb3IgJD8gImNvdWxkIG5vdCBjcmVhdGUgLSIgIiRMSU5FTk8iIDUKICAgZmkKLWRvbmUKLV9BQ0VPRgotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCisgOzsKIAorICA6QykgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogZXhlY3V0aW5nICRhY19maWxlIGNvbW1hbmRzIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IGV4ZWN1dGluZyAkYWNfZmlsZSBjb21tYW5kcyIgPiY2O30KKyA7OworICBlc2FjCisKKworICBjYXNlICRhY19maWxlJGFjX21vZGUgaW4KKyAgICAibGlidG9vbCI6QykKKworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCiAjCi0jIENPTkZJR19DT01NQU5EUyBzZWN0aW9uLgorIyAgIENvcHlyaWdodCAoQykgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMywgMjAwNCwgMjAwNSwKKyMgICAgICAgICAgICAgICAgIDIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAorIyAgICAgICAgICAgICAgICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR29yZG9uIE1hdHppZ2tlaXQsIDE5OTYKICMKLWZvciBhY19maWxlIGluIDogJENPTkZJR19DT01NQU5EUzsgZG8gdGVzdCAieCRhY19maWxlIiA9IHg6ICYmIGNvbnRpbnVlCi0gIGFjX2Rlc3Q9YGVjaG8gIiRhY19maWxlIiB8IHNlZCAncyw6LiosLCdgCi0gIGFjX3NvdXJjZT1gZWNobyAiJGFjX2ZpbGUiIHwgc2VkICdzLFteOl0qOiwsJ2AKLSAgYWNfZGlyPWAoZGlybmFtZSAiJGFjX2Rlc3QiKSAyPi9kZXYvbnVsbCB8fAotJGFzX2V4cHIgWCIkYWNfZGVzdCIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKVteL10nIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoLy9cKSQnIFx8IFwKLQkgWCIkYWNfZGVzdCIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhY19kZXN0IiB8Ci0gICAgc2VkICcvXlhcKC4qW14vXVwpXC9cLypbXi9dW14vXSpcLyokL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpW14vXS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cL1wpJC97IHMvL1wxLzsgcTsgfQotICAJICAvXlhcKFwvXCkuKi97IHMvL1wxLzsgcTsgfQotICAJICBzLy4qLy4vOyBxJ2AKLSAgeyBpZiAkYXNfbWtkaXJfcDsgdGhlbgotICAgIG1rZGlyIC1wICIkYWNfZGlyIgotICBlbHNlCi0gICAgYXNfZGlyPSIkYWNfZGlyIgotICAgIGFzX2RpcnM9Ci0gICAgd2hpbGUgdGVzdCAhIC1kICIkYXNfZGlyIjsgZG8KLSAgICAgIGFzX2RpcnM9IiRhc19kaXIgJGFzX2RpcnMiCi0gICAgICBhc19kaXI9YChkaXJuYW1lICIkYXNfZGlyIikgMj4vZGV2L251bGwgfHwKLSRhc19leHByIFgiJGFzX2RpciIgOiAnWFwoLipbXi9dXCkvLypbXi9dW14vXSovKiQnIFx8IFwKLQkgWCIkYXNfZGlyIiA6ICdYXCgvL1wpW14vXScgXHwgXAotCSBYIiRhc19kaXIiIDogJ1hcKC8vXCkkJyBcfCBcCi0JIFgiJGFzX2RpciIgOiAnWFwoL1wpJyBcfCBcCi0JIC4gICAgIDogJ1woLlwpJyAyPi9kZXYvbnVsbCB8fAotZWNobyBYIiRhc19kaXIiIHwKLSAgICBzZWQgJy9eWFwoLipbXi9dXClcL1wvKlteL11bXi9dKlwvKiQveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXClbXi9dLioveyBzLy9cMS87IHE7IH0KLSAgCSAgL15YXChcL1wvXCkkL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIC9eWFwoXC9cKS4qL3sgcy8vXDEvOyBxOyB9Ci0gIAkgIHMvLiovLi87IHEnYAotICAgIGRvbmUKLSAgICB0ZXN0ICEgLW4gIiRhc19kaXJzIiB8fCBta2RpciAkYXNfZGlycwotICBmaSB8fCB7IHsgZWNobyAiJGFzX21lOiRMSU5FTk86IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiY1Ci1lY2hvICIkYXNfbWU6IGVycm9yOiBjYW5ub3QgY3JlYXRlIGRpcmVjdG9yeSBcIiRhY19kaXJcIiIgPiYyO30KLSAgIHsgKGV4aXQgMSk7IGV4aXQgMTsgfTsgfTsgfQorIyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBMaWJ0b29sLgorIworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyMgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyMgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisjCisjIEFzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorIyBpZiB5b3UgZGlzdHJpYnV0ZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIHByb2dyYW0gb3IgbGlicmFyeSB0aGF0CisjIGlzIGJ1aWx0IHVzaW5nIEdOVSBMaWJ0b29sLCB5b3UgbWF5IGluY2x1ZGUgdGhpcyBmaWxlIHVuZGVyIHRoZQorIyBzYW1lIGRpc3RyaWJ1dGlvbiB0ZXJtcyB0aGF0IHlvdSB1c2UgZm9yIHRoZSByZXN0IG9mIHRoYXQgcHJvZ3JhbS4KKyMKKyMgR05VIExpYnRvb2wgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyMgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyMgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorIyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorIworIyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLCBvcgorIyBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgogCi0gIGFjX2J1aWxkZGlyPS4KIAotaWYgdGVzdCAiJGFjX2RpciIgIT0gLjsgdGhlbgotICBhY19kaXJfc3VmZml4PS9gZWNobyAiJGFjX2RpciIgfCBzZWQgJ3MsXlwuW1xcL10sLCdgCi0gICMgQSAiLi4vIiBmb3IgZWFjaCBkaXJlY3RvcnkgaW4gJGFjX2Rpcl9zdWZmaXguCi0gIGFjX3RvcF9idWlsZGRpcj1gZWNobyAiJGFjX2Rpcl9zdWZmaXgiIHwgc2VkICdzLC9bXlxcL10qLC4uLyxnJ2AKLWVsc2UKLSAgYWNfZGlyX3N1ZmZpeD0gYWNfdG9wX2J1aWxkZGlyPQorIyBUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCithdmFpbGFibGVfdGFncz0iIgorCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworCisjIFdoaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD8KK21hY3JvX3ZlcnNpb249JG1hY3JvX3ZlcnNpb24KK21hY3JvX3JldmlzaW9uPSRtYWNyb19yZXZpc2lvbgorCisjIEFzc2VtYmxlciBwcm9ncmFtLgorQVM9JGx0X0FTCisKKyMgRExMIGNyZWF0aW9uIHByb2dyYW0uCitETExUT09MPSRsdF9ETExUT09MCisKKyMgT2JqZWN0IGR1bXBlciBwcm9ncmFtLgorT0JKRFVNUD0kbHRfT0JKRFVNUAorCisjIFdoZXRoZXIgb3Igbm90IHRvIGJ1aWxkIHNoYXJlZCBsaWJyYXJpZXMuCitidWlsZF9saWJ0b29sX2xpYnM9JGVuYWJsZV9zaGFyZWQKKworIyBXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzLgorYnVpbGRfb2xkX2xpYnM9JGVuYWJsZV9zdGF0aWMKKworIyBXaGF0IHR5cGUgb2Ygb2JqZWN0cyB0byBidWlsZC4KK3BpY19tb2RlPSRwaWNfbW9kZQorCisjIFdoZXRoZXIgb3Igbm90IHRvIG9wdGltaXplIGZvciBmYXN0IGluc3RhbGxhdGlvbi4KK2Zhc3RfaW5zdGFsbD0kZW5hYmxlX2Zhc3RfaW5zdGFsbAorCisjIFNoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHMuCitTSEVMTD0kbHRfU0hFTEwKKworIyBBbiBlY2hvIHByb2dyYW0gdGhhdCBwcm90ZWN0cyBiYWNrc2xhc2hlcy4KK0VDSE89JGx0X0VDSE8KKworIyBUaGUgaG9zdCBzeXN0ZW0uCitob3N0X2FsaWFzPSRob3N0X2FsaWFzCitob3N0PSRob3N0Citob3N0X29zPSRob3N0X29zCisKKyMgVGhlIGJ1aWxkIHN5c3RlbS4KK2J1aWxkX2FsaWFzPSRidWlsZF9hbGlhcworYnVpbGQ9JGJ1aWxkCitidWlsZF9vcz0kYnVpbGRfb3MKKworIyBBIHNlZCBwcm9ncmFtIHRoYXQgZG9lcyBub3QgdHJ1bmNhdGUgb3V0cHV0LgorU0VEPSRsdF9TRUQKKworIyBTZWQgdGhhdCBoZWxwcyB1cyBhdm9pZCBhY2NpZGVudGFsbHkgdHJpZ2dlcmluZyBlY2hvKDEpIG9wdGlvbnMgbGlrZSAtbi4KK1hzZWQ9IlwkU0VEIC1lIDFzL15YLy8iCisKKyMgQSBncmVwIHByb2dyYW0gdGhhdCBoYW5kbGVzIGxvbmcgbGluZXMuCitHUkVQPSRsdF9HUkVQCisKKyMgQW4gRVJFIG1hdGNoZXIuCitFR1JFUD0kbHRfRUdSRVAKKworIyBBIGxpdGVyYWwgc3RyaW5nIG1hdGNoZXIuCitGR1JFUD0kbHRfRkdSRVAKKworIyBBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlci4KK05NPSRsdF9OTQorCisjIFdoZXRoZXIgd2UgbmVlZCBzb2Z0IG9yIGhhcmQgbGlua3MuCitMTl9TPSRsdF9MTl9TCisKKyMgV2hhdCBpcyB0aGUgbWF4aW11bSBsZW5ndGggb2YgYSBjb21tYW5kPworbWF4X2NtZF9sZW49JG1heF9jbWRfbGVuCisKKyMgT2JqZWN0IGZpbGUgc3VmZml4IChub3JtYWxseSAibyIpLgorb2JqZXh0PSRhY19vYmpleHQKKworIyBFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIikuCitleGVleHQ9JGV4ZWV4dAorCisjIHdoZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICJ1bnNldCIuCitsdF91bnNldD0kbHRfdW5zZXQKKworIyB0dXJuIHNwYWNlcyBpbnRvIG5ld2xpbmVzLgorU1AyTkw9JGx0X2x0X1NQMk5MCisKKyMgdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlcy4KK05MMlNQPSRsdF9sdF9OTDJTUAorCisjIGNvbnZlcnQgXCRidWlsZCBmaWxlIG5hbWVzIHRvIFwkaG9zdCBmb3JtYXQuCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCisKKyMgY29udmVydCBcJGJ1aWxkIGZpbGVzIHRvIHRvb2xjaGFpbiBmb3JtYXQuCit0b190b29sX2ZpbGVfY21kPSRsdF9jdl90b190b29sX2ZpbGVfY21kCisKKyMgTWV0aG9kIHRvIGNoZWNrIHdoZXRoZXIgZGVwZW5kZW50IGxpYnJhcmllcyBhcmUgc2hhcmVkIG9iamVjdHMuCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfZGVwbGlic19jaGVja19tZXRob2QKKworIyBDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiLgorZmlsZV9tYWdpY19jbWQ9JGx0X2ZpbGVfbWFnaWNfY21kCisKKyMgSG93IHRvIGZpbmQgcG90ZW50aWFsIGZpbGVzIHdoZW4gZGVwbGlic19jaGVja19tZXRob2QgPSAiZmlsZV9tYWdpYyIuCitmaWxlX21hZ2ljX2dsb2I9JGx0X2ZpbGVfbWFnaWNfZ2xvYgorCisjIEZpbmQgcG90ZW50aWFsIGZpbGVzIHVzaW5nIG5vY2FzZWdsb2Igd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIi4KK3dhbnRfbm9jYXNlZ2xvYj0kbHRfd2FudF9ub2Nhc2VnbG9iCisKKyMgQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllcy4KK3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSRsdF9zaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZAorCisjIFRoZSBhcmNoaXZlci4KK0FSPSRsdF9BUgorCisjIEZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlLgorQVJfRkxBR1M9JGx0X0FSX0ZMQUdTCisKKyMgSG93IHRvIGZlZWQgYSBmaWxlIGxpc3RpbmcgdG8gdGhlIGFyY2hpdmVyLgorYXJjaGl2ZXJfbGlzdF9zcGVjPSRsdF9hcmNoaXZlcl9saXN0X3NwZWMKKworIyBBIHN5bWJvbCBzdHJpcHBpbmcgcHJvZ3JhbS4KK1NUUklQPSRsdF9TVFJJUAorCisjIENvbW1hbmRzIHVzZWQgdG8gaW5zdGFsbCBhbiBvbGQtc3R5bGUgYXJjaGl2ZS4KK1JBTkxJQj0kbHRfUkFOTElCCitvbGRfcG9zdGluc3RhbGxfY21kcz0kbHRfb2xkX3Bvc3RpbnN0YWxsX2NtZHMKK29sZF9wb3N0dW5pbnN0YWxsX2NtZHM9JGx0X29sZF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBXaGV0aGVyIHRvIHVzZSBhIGxvY2sgZm9yIG9sZCBhcmNoaXZlIGV4dHJhY3Rpb24uCitsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249JGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbgorCisjIEEgQyBjb21waWxlci4KK0xUQ0M9JGx0X0NDCisKKyMgTFRDQyBjb21waWxlciBmbGFncy4KK0xUQ0ZMQUdTPSRsdF9DRkxBR1MKKworIyBUYWtlIHRoZSBvdXRwdXQgb2Ygbm0gYW5kIHByb2R1Y2UgYSBsaXN0aW5nIG9mIHJhdyBzeW1ib2xzIGFuZCBDIG5hbWVzLgorZ2xvYmFsX3N5bWJvbF9waXBlPSRsdF9sdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KK2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9JGx0X2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NkZWNsCisKKyMgVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBDIG5hbWUgYWRkcmVzcyBwYWlyLgorZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3MKKworIyBUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXIgd2hlbiBsaWIgcHJlZml4IGlzIG5lZWRlZC4KK2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeD0kbHRfbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeAorCisjIFNwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgXCROTS4KK25tX2ZpbGVfbGlzdF9zcGVjPSRsdF9ubV9maWxlX2xpc3Rfc3BlYworCisjIFRoZSByb290IHdoZXJlIHRvIHNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyxhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLgorbHRfc3lzcm9vdD0kbHRfc3lzcm9vdAorCisjIFRoZSBuYW1lIG9mIHRoZSBkaXJlY3RvcnkgdGhhdCBjb250YWlucyB0ZW1wb3JhcnkgbGlidG9vbCBmaWxlcy4KK29iamRpcj0kb2JqZGlyCisKKyMgVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIi4KK01BR0lDX0NNRD0kTUFHSUNfQ01ECisKKyMgTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/CituZWVkX2xvY2tzPSRsdF9uZWVkX2xvY2tzCisKKyMgTWFuaWZlc3QgdG9vbC4KK01BTklGRVNUX1RPT0w9JGx0X01BTklGRVNUX1RPT0wKKworIyBUb29sIHRvIG1hbmlwdWxhdGUgYXJjaGl2ZWQgRFdBUkYgZGVidWcgc3ltYm9sIGZpbGVzIG9uIE1hYyBPUyBYLgorRFNZTVVUSUw9JGx0X0RTWU1VVElMCisKKyMgVG9vbCB0byBjaGFuZ2UgZ2xvYmFsIHRvIGxvY2FsIHN5bWJvbHMgb24gTWFjIE9TIFguCitOTUVESVQ9JGx0X05NRURJVAorCisjIFRvb2wgdG8gbWFuaXB1bGF0ZSBmYXQgb2JqZWN0cyBhbmQgYXJjaGl2ZXMgb24gTWFjIE9TIFguCitMSVBPPSRsdF9MSVBPCisKKyMgbGRkL3JlYWRlbGYgbGlrZSB0b29sIGZvciBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFguCitPVE9PTD0kbHRfT1RPT0wKKworIyBsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIDY0IGJpdCBNYWNoLU8gYmluYXJpZXMgb24gTWFjIE9TIFggMTAuNC4KK09UT09MNjQ9JGx0X09UT09MNjQKKworIyBPbGQgYXJjaGl2ZSBzdWZmaXggKG5vcm1hbGx5ICJhIikuCitsaWJleHQ9JGxpYmV4dAorCisjIFNoYXJlZCBsaWJyYXJ5IHN1ZmZpeCAobm9ybWFsbHkgIi5zbyIpLgorc2hyZXh0X2NtZHM9JGx0X3NocmV4dF9jbWRzCisKKyMgVGhlIGNvbW1hbmRzIHRvIGV4dHJhY3QgdGhlIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK2V4dHJhY3RfZXhwc3ltc19jbWRzPSRsdF9leHRyYWN0X2V4cHN5bXNfY21kcworCisjIFZhcmlhYmxlcyB3aG9zZSB2YWx1ZXMgc2hvdWxkIGJlIHNhdmVkIGluIGxpYnRvb2wgd3JhcHBlciBzY3JpcHRzIGFuZAorIyByZXN0b3JlZCBhdCBsaW5rIHRpbWUuCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0kbHRfdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbmsKKworIyBEbyB3ZSBuZWVkIHRoZSAibGliIiBwcmVmaXggZm9yIG1vZHVsZXM/CituZWVkX2xpYl9wcmVmaXg9JG5lZWRfbGliX3ByZWZpeAorCisjIERvIHdlIG5lZWQgYSB2ZXJzaW9uIGZvciBsaWJyYXJpZXM/CituZWVkX3ZlcnNpb249JG5lZWRfdmVyc2lvbgorCisjIExpYnJhcnkgdmVyc2lvbmluZyB0eXBlLgordmVyc2lvbl90eXBlPSR2ZXJzaW9uX3R5cGUKKworIyBTaGFyZWQgbGlicmFyeSBydW50aW1lIHBhdGggdmFyaWFibGUuCitydW5wYXRoX3Zhcj0kcnVucGF0aF92YXIKKworIyBTaGFyZWQgbGlicmFyeSBwYXRoIHZhcmlhYmxlLgorc2hsaWJwYXRoX3Zhcj0kc2hsaWJwYXRoX3ZhcgorCisjIElzIHNobGlicGF0aCBzZWFyY2hlZCBiZWZvcmUgdGhlIGhhcmQtY29kZWQgbGlicmFyeSBzZWFyY2ggcGF0aD8KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyMgRm9ybWF0IG9mIGxpYnJhcnkgbmFtZSBwcmVmaXguCitsaWJuYW1lX3NwZWM9JGx0X2xpYm5hbWVfc3BlYworCisjIExpc3Qgb2YgYXJjaGl2ZSBuYW1lcy4gIEZpcnN0IG5hbWUgaXMgdGhlIHJlYWwgb25lLCB0aGUgcmVzdCBhcmUgbGlua3MuCisjIFRoZSBsYXN0IG5hbWUgaXMgdGhlIG9uZSB0aGF0IHRoZSBsaW5rZXIgZmluZHMgd2l0aCAtbE5BTUUKK2xpYnJhcnlfbmFtZXNfc3BlYz0kbHRfbGlicmFyeV9uYW1lc19zcGVjCisKKyMgVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWUuCitzb25hbWVfc3BlYz0kbHRfc29uYW1lX3NwZWMKKworIyBQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzLgoraW5zdGFsbF9vdmVycmlkZV9tb2RlPSRsdF9pbnN0YWxsX292ZXJyaWRlX21vZGUKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciBpbnN0YWxsYXRpb24gb2YgYSBzaGFyZWQgYXJjaGl2ZS4KK3Bvc3RpbnN0YWxsX2NtZHM9JGx0X3Bvc3RpbnN0YWxsX2NtZHMKKworIyBDb21tYW5kIHRvIHVzZSBhZnRlciB1bmluc3RhbGxhdGlvbiBvZiBhIHNoYXJlZCBhcmNoaXZlLgorcG9zdHVuaW5zdGFsbF9jbWRzPSRsdF9wb3N0dW5pbnN0YWxsX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGZpbmlzaCBhIGxpYnRvb2wgbGlicmFyeSBpbnN0YWxsYXRpb24gaW4gYSBkaXJlY3RvcnkuCitmaW5pc2hfY21kcz0kbHRfZmluaXNoX2NtZHMKKworIyBBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyMgbm90IHNob3duLgorZmluaXNoX2V2YWw9JGx0X2ZpbmlzaF9ldmFsCisKKyMgV2hldGhlciB3ZSBzaG91bGQgaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIGxpYnJhcmllcy4KK2hhcmRjb2RlX2ludG9fbGlicz0kaGFyZGNvZGVfaW50b19saWJzCisKKyMgQ29tcGlsZS10aW1lIHN5c3RlbSBzZWFyY2ggcGF0aCBmb3IgbGlicmFyaWVzLgorc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMKKworIyBSdW4tdGltZSBzeXN0ZW0gc2VhcmNoIHBhdGggZm9yIGxpYnJhcmllcy4KK3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSRsdF9zeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYworCisjIFdoZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zdXBwb3J0PSRlbmFibGVfZGxvcGVuCisKKyMgV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkLgorZGxvcGVuX3NlbGY9JGVuYWJsZV9kbG9wZW5fc2VsZgorCisjIFdoZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZC4KK2Rsb3Blbl9zZWxmX3N0YXRpYz0kZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYworCisjIENvbW1hbmRzIHRvIHN0cmlwIGxpYnJhcmllcy4KK29sZF9zdHJpcGxpYj0kbHRfb2xkX3N0cmlwbGliCitzdHJpcGxpYj0kbHRfc3RyaXBsaWIKKworCisjIFRoZSBsaW5rZXIgdXNlZCB0byBidWlsZCBsaWJyYXJpZXMuCitMRD0kbHRfTEQKKworIyBIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzLgorcmVsb2FkX2ZsYWc9JGx0X3JlbG9hZF9mbGFnCityZWxvYWRfY21kcz0kbHRfcmVsb2FkX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGFuIG9sZC1zdHlsZSBhcmNoaXZlLgorb2xkX2FyY2hpdmVfY21kcz0kbHRfb2xkX2FyY2hpdmVfY21kcworCisjIEEgbGFuZ3VhZ2Ugc3BlY2lmaWMgY29tcGlsZXIuCitDQz0kbHRfY29tcGlsZXIKKworIyBJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj8KK3dpdGhfZ2NjPSRHQ0MKKworIyBDb21waWxlciBmbGFnIHRvIHR1cm4gb2ZmIGJ1aWx0aW4gZnVuY3Rpb25zLgorbm9fYnVpbHRpbl9mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZworCisjIEFkZGl0aW9uYWwgY29tcGlsZXIgZmxhZ3MgZm9yIGJ1aWxkaW5nIGxpYnJhcnkgb2JqZWN0cy4KK3BpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3BpYworCisjIEhvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXIuCit3bD0kbHRfbHRfcHJvZ19jb21waWxlcl93bAorCisjIENvbXBpbGVyIGZsYWcgdG8gcHJldmVudCBkeW5hbWljIGxpbmtpbmcuCitsaW5rX3N0YXRpY19mbGFnPSRsdF9sdF9wcm9nX2NvbXBpbGVyX3N0YXRpYworCisjIERvZXMgY29tcGlsZXIgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydCAtYyBhbmQgLW8gb3B0aW9ucz8KK2NvbXBpbGVyX2Nfbz0kbHRfbHRfY3ZfcHJvZ19jb21waWxlcl9jX28KKworIyBXaGV0aGVyIG9yIG5vdCB0byBhZGQgLWxjIGZvciBidWlsZGluZyBzaGFyZWQgbGlicmFyaWVzLgorYnVpbGRfbGlidG9vbF9uZWVkX2xjPSRhcmNoaXZlX2NtZHNfbmVlZF9sYworCisjIFdoZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWMuCithbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXM9JGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMKKworIyBDb21waWxlciBmbGFnIHRvIGFsbG93IHJlZmxleGl2ZSBkbG9wZW5zLgorZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjPSRsdF9leHBvcnRfZHluYW1pY19mbGFnX3NwZWMKKworIyBDb21waWxlciBmbGFnIHRvIGdlbmVyYXRlIHNoYXJlZCBvYmplY3RzIGRpcmVjdGx5IGZyb20gYXJjaGl2ZXMuCit3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0kbHRfd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMKKworIyBXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseS4KK2NvbXBpbGVyX25lZWRzX29iamVjdD0kbHRfY29tcGlsZXJfbmVlZHNfb2JqZWN0CisKKyMgQ3JlYXRlIGFuIG9sZC1zdHlsZSBhcmNoaXZlIGZyb20gYSBzaGFyZWQgYXJjaGl2ZS4KK29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHM9JGx0X29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKworIyBDcmVhdGUgYSB0ZW1wb3Jhcnkgb2xkLXN0eWxlIGFyY2hpdmUgdG8gbGluayBpbnN0ZWFkIG9mIGEgc2hhcmVkIGFyY2hpdmUuCitvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcz0kbHRfb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMKKworIyBDb21tYW5kcyB1c2VkIHRvIGJ1aWxkIGEgc2hhcmVkIGFyY2hpdmUuCithcmNoaXZlX2NtZHM9JGx0X2FyY2hpdmVfY21kcworYXJjaGl2ZV9leHBzeW1fY21kcz0kbHRfYXJjaGl2ZV9leHBzeW1fY21kcworCisjIENvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyMgYSBzaGFyZWQgYXJjaGl2ZS4KK21vZHVsZV9jbWRzPSRsdF9tb2R1bGVfY21kcworbW9kdWxlX2V4cHN5bV9jbWRzPSRsdF9tb2R1bGVfZXhwc3ltX2NtZHMKKworIyBXaGV0aGVyIHdlIGFyZSBidWlsZGluZyB3aXRoIEdOVSBsZCBvciBub3QuCit3aXRoX2dudV9sZD0kbHRfd2l0aF9nbnVfbGQKKworIyBGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdC4KK2FsbG93X3VuZGVmaW5lZF9mbGFnPSRsdF9hbGxvd191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdGhhdCBlbmZvcmNlcyBubyB1bmRlZmluZWQgc3ltYm9scy4KK25vX3VuZGVmaW5lZF9mbGFnPSRsdF9ub191bmRlZmluZWRfZmxhZworCisjIEZsYWcgdG8gaGFyZGNvZGUgXCRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyMgVGhpcyBtdXN0IHdvcmsgZXZlbiBpZiBcJGxpYmRpciBkb2VzIG5vdCBleGlzdAoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYz0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYworCisjIElmIGxkIGlzIHVzZWQgd2hlbiBsaW5raW5nLCBmbGFnIHRvIGhhcmRjb2RlIFwkbGliZGlyIGludG8gYSBiaW5hcnkKKyMgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmIFwkbGliZGlyIGRvZXMgbm90IGV4aXN0LgoraGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZD0kbHRfaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZAorCisjIFdoZXRoZXIgd2UgbmVlZCBhIHNpbmdsZSAiLXJwYXRoIiBmbGFnIHdpdGggYSBzZXBhcmF0ZWQgYXJndW1lbnQuCitoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yPSRsdF9oYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yCisKKyMgU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FXCR7c2hhcmVkX2V4dH0gZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzCisjIERJUiBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfZGlyZWN0PSRoYXJkY29kZV9kaXJlY3QKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgRElSL2xpYk5BTUVcJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyMgRElSIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkgYW5kIHRoZSByZXN1bHRpbmcgbGlicmFyeSBkZXBlbmRlbmN5IGlzCisjICJhYnNvbHV0ZSIsaS5lIGltcG9zc2libGUgdG8gY2hhbmdlIGJ5IHNldHRpbmcgXCR7c2hsaWJwYXRoX3Zhcn0gaWYgdGhlCisjIGxpYnJhcnkgaXMgcmVsb2NhdGVkLgoraGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlPSRoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUKKworIyBTZXQgdG8gInllcyIgaWYgdXNpbmcgdGhlIC1MRElSIGZsYWcgZHVyaW5nIGxpbmtpbmcgaGFyZGNvZGVzIERJUgorIyBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5LgoraGFyZGNvZGVfbWludXNfTD0kaGFyZGNvZGVfbWludXNfTAorCisjIFNldCB0byAieWVzIiBpZiB1c2luZyBTSExJQlBBVEhfVkFSPURJUiBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIHJlc3VsdGluZyBiaW5hcnkuCitoYXJkY29kZV9zaGxpYnBhdGhfdmFyPSRoYXJkY29kZV9zaGxpYnBhdGhfdmFyCisKKyMgU2V0IHRvICJ5ZXMiIGlmIGJ1aWxkaW5nIGEgc2hhcmVkIGxpYnJhcnkgYXV0b21hdGljYWxseSBoYXJkY29kZXMgRElSCisjIGludG8gdGhlIGxpYnJhcnkgYW5kIGFsbCBzdWJzZXF1ZW50IGxpYnJhcmllcyBhbmQgZXhlY3V0YWJsZXMgbGlua2VkCisjIGFnYWluc3QgaXQuCitoYXJkY29kZV9hdXRvbWF0aWM9JGhhcmRjb2RlX2F1dG9tYXRpYworCisjIFNldCB0byB5ZXMgaWYgbGlua2VyIGFkZHMgcnVudGltZSBwYXRocyBvZiBkZXBlbmRlbnQgbGlicmFyaWVzCisjIHRvIHJ1bnRpbWUgcGF0aCBsaXN0LgoraW5oZXJpdF9ycGF0aD0kaW5oZXJpdF9ycGF0aAorCisjIFdoZXRoZXIgbGlidG9vbCBtdXN0IGxpbmsgYSBwcm9ncmFtIGFnYWluc3QgYWxsIGl0cyBkZXBlbmRlbmN5IGxpYnJhcmllcy4KK2xpbmtfYWxsX2RlcGxpYnM9JGxpbmtfYWxsX2RlcGxpYnMKKworIyBTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWQuCithbHdheXNfZXhwb3J0X3N5bWJvbHM9JGFsd2F5c19leHBvcnRfc3ltYm9scworCisjIFRoZSBjb21tYW5kcyB0byBsaXN0IGV4cG9ydGVkIHN5bWJvbHMuCitleHBvcnRfc3ltYm9sc19jbWRzPSRsdF9leHBvcnRfc3ltYm9sc19jbWRzCisKKyMgU3ltYm9scyB0aGF0IHNob3VsZCBub3QgYmUgbGlzdGVkIGluIHRoZSBwcmVsb2FkZWQgc3ltYm9scy4KK2V4Y2x1ZGVfZXhwc3ltcz0kbHRfZXhjbHVkZV9leHBzeW1zCisKKyMgU3ltYm9scyB0aGF0IG11c3QgYWx3YXlzIGJlIGV4cG9ydGVkLgoraW5jbHVkZV9leHBzeW1zPSRsdF9pbmNsdWRlX2V4cHN5bXMKKworIyBDb21tYW5kcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgcHJvZ3JhbXMgKGFnYWluc3QgbGlicmFyaWVzKSB3aXRoIHRlbXBsYXRlcy4KK3ByZWxpbmtfY21kcz0kbHRfcHJlbGlua19jbWRzCisKKyMgQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtcy4KK3Bvc3RsaW5rX2NtZHM9JGx0X3Bvc3RsaW5rX2NtZHMKKworIyBTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXMuCitmaWxlX2xpc3Rfc3BlYz0kbHRfZmlsZV9saXN0X3NwZWMKKworIyBIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZS4KK2hhcmRjb2RlX2FjdGlvbj0kaGFyZGNvZGVfYWN0aW9uCisKKyMgIyMjIEVORCBMSUJUT09MIENPTkZJRworCitfTFRfRU9GCisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXgzKikKKyAgICBjYXQgPDxcX0xUX0VPRiA+PiAiJGNmZ2ZpbGUiCisjIEFJWCBzb21ldGltZXMgaGFzIHByb2JsZW1zIHdpdGggdGhlIEdDQyBjb2xsZWN0MiBwcm9ncmFtLiAgRm9yIHNvbWUKKyMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworIyB2YW5pc2ggaW4gYSBwdWZmIG9mIHNtb2tlLgoraWYgdGVzdCAiWCR7Q09MTEVDVF9OQU1FUytzZXR9IiAhPSBYc2V0OyB0aGVuCisgIENPTExFQ1RfTkFNRVM9CisgIGV4cG9ydCBDT0xMRUNUX05BTUVTCitmaQorX0xUX0VPRgorICAgIDs7CisgIGVzYWMKKworCitsdG1haW49IiRhY19hdXhfZGlyL2x0bWFpbi5zaCIKKworCisgICMgV2UgdXNlIHNlZCBpbnN0ZWFkIG9mIGNhdCBiZWNhdXNlIGJhc2ggb24gREpHUFAgZ2V0cyBjb25mdXNlZCBpZgorICAjIGlmIGZpbmRzIG1peGVkIENSL0xGIGFuZCBMRi1vbmx5IGxpbmVzLiAgU2luY2Ugc2VkIG9wZXJhdGVzIGluCisgICMgdGV4dCBtb2RlLCBpdCBwcm9wZXJseSBjb252ZXJ0cyBsaW5lcyB0byBDUi9MRi4gIFRoaXMgYmFzaCBwcm9ibGVtCisgICMgaXMgcmVwb3J0ZWRseSBmaXhlZCwgYnV0IHdoeSBub3QgcnVuIG9uIG9sZCB2ZXJzaW9ucyB0b28/CisgIHNlZCAnJHEnICIkbHRtYWluIiA+PiAiJGNmZ2ZpbGUiIFwKKyAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSI7IGV4aXQgMSkKKworICBpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWUgKCkkLywvXn0gIyBmdW5jX2Rpcm5hbWUgL2NcCitmdW5jX2Rpcm5hbWUgKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCitcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKK1wgICAgZXNhY1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19iYXNlbmFtZSAvY1wKK2Z1bmNfYmFzZW5hbWUgKClcCit7XAorXCAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYmFzZW5hbWUgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICgpJC8sL159ICMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAvY1wKK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOztcCitcICAgICAgKiAgKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezN9IiA7O1wKK1wgICAgZXNhY1wKK1wgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zdHJpcG5hbWUgKCkkLywvXn0gIyBmdW5jX3N0cmlwbmFtZSAvY1wKK2Z1bmNfc3RyaXBuYW1lICgpXAore1wKK1wgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZVwKK1wgICAgIyBwb3NpdGlvbmFsIHBhcmFtZXRlcnMsIHNvIGFzc2lnbiBvbmUgdG8gb3JkaW5hcnkgcGFyYW1ldGVyIGZpcnN0LlwKK1wgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7M31cCitcICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9XAorXCAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHtmdW5jX3N0cmlwbmFtZV9yZXN1bHQlIiR7Mn0ifVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3N0cmlwbmFtZSBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfc3BsaXRfbG9uZ19vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X2xvbmdfb3B0IC9jXAorZnVuY19zcGxpdF9sb25nX29wdCAoKVwKK3tcCitcICAgIGZ1bmNfc3BsaXRfbG9uZ19vcHRfbmFtZT0kezElJT0qfVwKK1wgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fVwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3NwbGl0X2xvbmdfb3B0IGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19zcGxpdF9zaG9ydF9vcHQgKCkkLywvXn0gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCAvY1wKK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpXAore1wKK1wgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P31cCitcICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9JHsxJSIkZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnIn1cCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19zcGxpdF9zaG9ydF9vcHQgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKKworCisgIHNlZCAtZSAnL15mdW5jX2xvMm8gKCkkLywvXn0gIyBmdW5jX2xvMm8gL2NcCitmdW5jX2xvMm8gKClcCit7XAorXCAgICBjYXNlICR7MX0gaW5cCitcICAgICAgKi5sbykgZnVuY19sbzJvX3Jlc3VsdD0kezElLmxvfS4ke29iamV4dH0gOztcCitcICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7XAorXCAgICBlc2FjXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbG8ybyBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfeGZvcm0gKCkkLywvXn0gIyBmdW5jX3hmb3JtIC9jXAorZnVuY194Zm9ybSAoKVwKK3tcCisgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb1wKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX3hmb3JtIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKKworICBzZWQgLWUgJy9eZnVuY19hcml0aCAoKSQvLC9efSAjIGZ1bmNfYXJpdGggL2NcCitmdW5jX2FyaXRoICgpXAore1wKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD0kKCggJCogKSlcCit9ICMgRXh0ZW5kZWQtc2hlbGwgZnVuY19hcml0aCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgc2VkIC1lICcvXmZ1bmNfbGVuICgpJC8sL159ICMgZnVuY19sZW4gL2NcCitmdW5jX2xlbiAoKVwKK3tcCisgICAgZnVuY19sZW5fcmVzdWx0PSR7IzF9XAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfbGVuIGltcGxlbWVudGF0aW9uJyAiJGNmZ2ZpbGUiID4gJGNmZ2ZpbGUudG1wIFwKKyAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKK3Rlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CisKIGZpCiAKLWNhc2UgJHNyY2RpciBpbgotICAuKSAgIyBObyAtLXNyY2RpciBvcHRpb24uICBXZSBhcmUgYnVpbGRpbmcgaW4gcGxhY2UuCi0gICAgYWNfc3JjZGlyPS4KLSAgICBpZiB0ZXN0IC16ICIkYWNfdG9wX2J1aWxkZGlyIjsgdGhlbgotICAgICAgIGFjX3RvcF9zcmNkaXI9LgotICAgIGVsc2UKLSAgICAgICBhY190b3Bfc3JjZGlyPWBlY2hvICRhY190b3BfYnVpbGRkaXIgfCBzZWQgJ3MsLyQsLCdgCi0gICAgZmkgOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSAgIyBBYnNvbHV0ZSBwYXRoLgotICAgIGFjX3NyY2Rpcj0kc3JjZGlyJGFjX2Rpcl9zdWZmaXg7Ci0gICAgYWNfdG9wX3NyY2Rpcj0kc3JjZGlyIDs7Ci0gICopICMgUmVsYXRpdmUgcGF0aC4KLSAgICBhY19zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIkYWNfZGlyX3N1ZmZpeAotICAgIGFjX3RvcF9zcmNkaXI9JGFjX3RvcF9idWlsZGRpciRzcmNkaXIgOzsKLWVzYWMKLQotIyBEbyBub3QgdXNlIGBjZCBmb28gJiYgcHdkYCB0byBjb21wdXRlIGFic29sdXRlIHBhdGhzLCBiZWNhdXNlCi0jIHRoZSBkaXJlY3RvcmllcyBtYXkgbm90IGV4aXN0LgotY2FzZSBgcHdkYCBpbgotLikgYWNfYWJzX2J1aWxkZGlyPSIkYWNfZGlyIjs7Ci0qKQotICBjYXNlICIkYWNfZGlyIiBpbgotICAuKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGA7OwotICBbXFwvXSogfCA/OltcXC9dKiApIGFjX2Fic19idWlsZGRpcj0iJGFjX2RpciI7OwotICAqKSBhY19hYnNfYnVpbGRkaXI9YHB3ZGAvIiRhY19kaXIiOzsKLSAgZXNhYzs7Ci1lc2FjCi1jYXNlICRhY19hYnNfYnVpbGRkaXIgaW4KLS4pIGFjX2Fic190b3BfYnVpbGRkaXI9JHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0qKQotICBjYXNlICR7YWNfdG9wX2J1aWxkZGlyfS4gaW4KLSAgLikgYWNfYWJzX3RvcF9idWlsZGRpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX2J1aWxkZGlyPSR7YWNfdG9wX2J1aWxkZGlyfS47OwotICAqKSBhY19hYnNfdG9wX2J1aWxkZGlyPSRhY19hYnNfYnVpbGRkaXIvJHthY190b3BfYnVpbGRkaXJ9Ljs7Ci0gIGVzYWM7OwotZXNhYwotY2FzZSAkYWNfYWJzX2J1aWxkZGlyIGluCi0uKSBhY19hYnNfc3JjZGlyPSRhY19zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfc3JjZGlyIGluCi0gIC4pIGFjX2Fic19zcmNkaXI9JGFjX2Fic19idWlsZGRpcjs7Ci0gIFtcXC9dKiB8ID86W1xcL10qICkgYWNfYWJzX3NyY2Rpcj0kYWNfc3JjZGlyOzsKLSAgKikgYWNfYWJzX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyLyRhY19zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKLWNhc2UgJGFjX2Fic19idWlsZGRpciBpbgotLikgYWNfYWJzX3RvcF9zcmNkaXI9JGFjX3RvcF9zcmNkaXI7OwotKikKLSAgY2FzZSAkYWNfdG9wX3NyY2RpciBpbgotICAuKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfYWJzX2J1aWxkZGlyOzsKLSAgW1xcL10qIHwgPzpbXFwvXSogKSBhY19hYnNfdG9wX3NyY2Rpcj0kYWNfdG9wX3NyY2Rpcjs7Ci0gICopIGFjX2Fic190b3Bfc3JjZGlyPSRhY19hYnNfYnVpbGRkaXIvJGFjX3RvcF9zcmNkaXI7OwotICBlc2FjOzsKLWVzYWMKK2lmIHRlc3QgeCIkbHRfc2hlbGxfYXBwZW5kIiA9IHh5ZXM7IHRoZW4KKyAgc2VkIC1lICcvXmZ1bmNfYXBwZW5kICgpJC8sL159ICMgZnVuY19hcHBlbmQgL2NcCitmdW5jX2FwcGVuZCAoKVwKK3tcCisgICAgZXZhbCAiJHsxfSs9XFwkezJ9IlwKK30gIyBFeHRlbmRlZC1zaGVsbCBmdW5jX2FwcGVuZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgogCiAKLSAgeyBlY2hvICIkYXNfbWU6JExJTkVOTzogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjUKLWVjaG8gIiRhc19tZTogZXhlY3V0aW5nICRhY19kZXN0IGNvbW1hbmRzIiA+JjY7fQotICBjYXNlICRhY19kZXN0IGluCi0gICAgZGVmYXVsdCApIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCA7OworICBzZWQgLWUgJy9eZnVuY19hcHBlbmRfcXVvdGVkICgpJC8sL159ICMgZnVuY19hcHBlbmRfcXVvdGVkIC9jXAorZnVuY19hcHBlbmRfcXVvdGVkICgpXAore1wKK1wgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSJcCitcICAgIGV2YWwgIiR7MX0rPVxcXFwgXFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiXAorfSAjIEV4dGVuZGVkLXNoZWxsIGZ1bmNfYXBwZW5kX3F1b3RlZCBpbXBsZW1lbnRhdGlvbicgIiRjZmdmaWxlIiA+ICRjZmdmaWxlLnRtcCBcCisgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCit0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorCisKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbYS16QS1aX11cezEsXH1cKSAiJVwxKz0iJWcnICRjZmdmaWxlID4gJGNmZ2ZpbGUudG1wIFwKKyAgICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICAgIHx8IChybSAtZiAiJGNmZ2ZpbGUiICYmIGNwICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgJiYgcm0gLWYgIiRjZmdmaWxlLnRtcCIpCisgIHRlc3QgMCAtZXEgJD8gfHwgX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbD06CitlbHNlCisgICMgU2F2ZSBhIGBmdW5jX2FwcGVuZCcgZnVuY3Rpb24gY2FsbCBldmVuIHdoZW4gJys9JyBpcyBub3QgYXZhaWxhYmxlCisgIHNlZCAtZSAncyVmdW5jX2FwcGVuZCBcKFthLXpBLVpfXVx7MSxcfVwpICIlXDE9IiRcMSVnJyAkY2ZnZmlsZSA+ICRjZmdmaWxlLnRtcCBcCisgICAgJiYgbXYgLWYgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiBcCisgICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQorICB0ZXN0IDAgLWVxICQ/IHx8IF9sdF9mdW5jdGlvbl9yZXBsYWNlX2ZhaWw9OgorZmkKKworaWYgdGVzdCB4IiRfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsIiA9IHgiOiI7IHRoZW4KKyAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBXQVJOSU5HOiBVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlIiA+JjUKKyRhc19lY2hvICIkYXNfbWU6IFdBUk5JTkc6IFVuYWJsZSB0byBzdWJzdGl0dXRlIGV4dGVuZGVkIHNoZWxsIGZ1bmN0aW9ucyBpbiAkb2ZpbGUiID4mMjt9CitmaQorCisKKyAgIG12IC1mICIkY2ZnZmlsZSIgIiRvZmlsZSIgfHwKKyAgICAocm0gLWYgIiRvZmlsZSIgJiYgY3AgIiRjZmdmaWxlIiAiJG9maWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUiKQorICBjaG1vZCAreCAiJG9maWxlIgorCisgOzsKKyAgICAibmV0LXNubXAtY29uZmlnIjpGKSBjaG1vZCAreCBuZXQtc25tcC1jb25maWcgOzsKKyAgICAibmV0LXNubXAtY3JlYXRlLXYzLXVzZXIiOkYpIGNobW9kICt4IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIDs7CisgICAgImRlZmF1bHQiOkMpIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCA7OworCiAgIGVzYWMKLWRvbmUKLV9BQ0VPRgorZG9uZSAjIGZvciBhY190YWcKIAotY2F0ID4+JENPTkZJR19TVEFUVVMgPDxcX0FDRU9GCiAKLXsgKGV4aXQgMCk7IGV4aXQgMDsgfQorYXNfZm5fZXhpdCAwCiBfQUNFT0YKLWNobW9kICt4ICRDT05GSUdfU1RBVFVTCiBhY19jbGVhbl9maWxlcz0kYWNfY2xlYW5fZmlsZXNfc2F2ZQogCit0ZXN0ICRhY193cml0ZV9mYWlsID0gMCB8fAorICBhc19mbl9lcnJvciAkPyAid3JpdGUgZmFpbHVyZSBjcmVhdGluZyAkQ09ORklHX1NUQVRVUyIgIiRMSU5FTk8iIDUKKwogCiAjIGNvbmZpZ3VyZSBpcyB3cml0aW5nIHRvIGNvbmZpZy5sb2csIGFuZCB0aGVuIGNhbGxzIGNvbmZpZy5zdGF0dXMuCiAjIGNvbmZpZy5zdGF0dXMgZG9lcyBpdHMgb3duIHJlZGlyZWN0aW9uLCBhcHBlbmRpbmcgdG8gY29uZmlnLmxvZy4KQEAgLTUxMTAxLDcgKzMyMDkyLDExIEBACiAgIGV4ZWMgNT4+Y29uZmlnLmxvZwogICAjIFVzZSB8fCwgbm90ICYmLCB0byBhdm9pZCBleGl0aW5nIGZyb20gdGhlIGlmIHdpdGggJD8gPSAxLCB3aGljaAogICAjIHdvdWxkIG1ha2UgY29uZmlndXJlIGZhaWwgaWYgdGhpcyBpcyB0aGUgbGFzdCBpbnN0cnVjdGlvbi4KLSAgJGFjX2NzX3N1Y2Nlc3MgfHwgeyAoZXhpdCAxKTsgZXhpdCAxOyB9CisgICRhY19jc19zdWNjZXNzIHx8IGFzX2ZuX2V4aXQgMQorZmkKK2lmIHRlc3QgLW4gIiRhY191bnJlY29nbml6ZWRfb3B0cyIgJiYgdGVzdCAiJGVuYWJsZV9vcHRpb25fY2hlY2tpbmciICE9IG5vOyB0aGVuCisgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogdW5yZWNvZ25pemVkIG9wdGlvbnM6ICRhY191bnJlY29nbml6ZWRfb3B0cyIgPiY1CiskYXNfZWNobyAiJGFzX21lOiBXQVJOSU5HOiB1bnJlY29nbml6ZWQgb3B0aW9uczogJGFjX3VucmVjb2duaXplZF9vcHRzIiA+JjI7fQogZmkKIAogCmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc2YTdiOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMCwwICsxLDEzMiBAQAorIyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKyMgdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyMgdGhhdCBtYXkgYXBwbHk6CisjCisjIFBvcnRpb25zIENvcHlyaWdodCCpIDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorIyBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisjIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisjCisKKyMKKyMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KKyMKK0FDX0lOSVQoW05ldC1TTk1QXSwgWzUuNy4zLnJjMV0sIFtuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XSkKK0FDX1BSRVJFUShbMi42M10pCitBQ19DT05GSUdfU1JDRElSKFthZ2VudC9zbm1wZC5jXSkKK0FDX1JFVklTSU9OKFskUmV2aXNpb24kXSkKKworQUNfQ09ORklHX01BQ1JPX0RJUihbbTRdKQorQUNfQ09ORklHX0hFQURFUihpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oKQorCitBQ19NU0dfQ0FDSEVfSU5JVCgpCisKKyMKKyMgc2F2ZSB0aGUgY29uZmlndXJlIGFyZ3VtZW50cworIworQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMsIiRhY19jb25maWd1cmVfYXJncyIsCisgIFtjb25maWd1cmUgb3B0aW9ucyBzcGVjaWZpZWRdKQorQ09ORklHVVJFX09QVElPTlM9IlwiJGFjX2NvbmZpZ3VyZV9hcmdzXCIiCitBQ19TVUJTVChDT05GSUdVUkVfT1BUSU9OUykKKworIyMKKyMjIFJlY29tbWVuZGVkIHN0cnVjdHVyZToKKyMjCisjICAgICBpbmZvcm1hdGlvbiBvbiB0aGUgcGFja2FnZQorIyAgICAgY2hlY2tzIGZvciBwcm9ncmFtcworIyAgICAgY2hlY2tzIGZvciBsaWJyYXJpZXMKKyMgICAgIGNoZWNrcyBmb3IgaGVhZGVyIGZpbGVzCisjICAgICBjaGVja3MgZm9yIHR5cGVzCisjICAgICBjaGVja3MgZm9yIHN0cnVjdHVyZXMKKyMgICAgIGNoZWNrcyBmb3IgY29tcGlsZXIgY2hhcmFjdGVyaXN0aWNzCisjICAgICBjaGVja3MgZm9yIGxpYnJhcnkgZnVuY3Rpb25zCisjICAgICBjaGVja3MgZm9yIHN5c3RlbSBzZXJ2aWNlcworCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZV0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWxdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BhdGhzXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzXSkKK0FDX0NBQ0hFX1NBVkUKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXNdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliXSkKK0FDX0NBQ0hFX1NBVkUKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMV0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudF0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzFdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyXSkKK0FDX0NBQ0hFX1NBVkUKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uXSkKK200X2luY2x1ZGUoW2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMl0pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlc10pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzNdKQorQUNfQ0FDSEVfU0FWRQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9uc10pCittNF9pbmNsdWRlKFtjb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnNdKQorbTRfaW5jbHVkZShbY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0XSkKK0FDX0NBQ0hFX1NBVkUKKworIworIyBkZWZpbmUgdGhlIGFnZW50IGxpYnJhcmllcyB2YXJpYWJsZXMKKyMKK0FDX1NVQlNUKExNSUJMSUJTKQorQUNfU1VCU1QoQUdFTlRMSUJTKQorQUNfU1VCU1QoT1RIRVJBR0VOVExJQk9CSlMpCitBQ19TVUJTVChPVEhFUkFHRU5UTElCTE9CSlMpCitBQ19TVUJTVChPVEhFUkFHRU5UTElCTEZUUykKKworQUNfU1VCU1QoRExMSUJTKQorCitBQ19TVUJTVChQQVJUSUFMVEFSR0VURkxBR1MpCitBQ19TVUJTVChhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUpCisKK0FDX0NPTkZJR19GSUxFUyhbTWFrZWZpbGU6TWFrZWZpbGUudG9wOk1ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKK0FDX0NPTkZJR19GSUxFUyhbc25tcGxpYi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6c25tcGxpYi9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczpzbm1wbGliL01ha2VmaWxlLmRlcGVuZF0pCitBQ19DT05GSUdfRklMRVMoW2FwcHMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9NYWtlZmlsZS5kZXBlbmRdKQorQUNfQ09ORklHX0ZJTEVTKFthcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlOk1ha2VmaWxlLnRvcDphcHBzL3NubXBuZXRzdGF0L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuZGVwZW5kXSkKK0FDX0NPTkZJR19GSUxFUyhbYWdlbnQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOmFnZW50L01ha2VmaWxlLmRlcGVuZF0pCitBQ19DT05GSUdfRklMRVMoW2FnZW50L2hlbHBlcnMvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFnZW50L2hlbHBlcnMvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5kZXBlbmRdKQorQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9taWJncm91cC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvbWliZ3JvdXAvTWFrZWZpbGUuZGVwZW5kXSkKK0FDX0NPTkZJR19GSUxFUyhbbG9jYWwvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmxvY2FsL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKK0FDX0NPTkZJR19GSUxFUyhbdGVzdGluZy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6dGVzdGluZy9NYWtlZmlsZS5pbl0pCitBQ19DT05GSUdfRklMRVMoW21hbi9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWFuL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKK0FDX0NPTkZJR19GSUxFUyhbbWlicy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bWlicy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlc10pCitBQ19DT05GSUdfRklMRVMoW25ldC1zbm1wLWNvbmZpZzpuZXQtc25tcC1jb25maWcuaW5dLAorCQlbY2htb2QgK3ggbmV0LXNubXAtY29uZmlnXSkKK0FDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY3JlYXRlLXYzLXVzZXI6bmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW5dLAorCQlbY2htb2QgK3ggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXJdKQorQUNfQ09ORklHX0ZJTEVTKFtkaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdmFyaWFibGVzOmRpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW5dKQorQUNfQ09ORklHX0ZJTEVTKFtsb2NhbC9zbm1wY29uZl0pCisKK0FDX0NPTkZJR19DT01NQU5EUyhbZGVmYXVsdF0sIGVjaG8gdGltZXN0YW1wID4gc3RhbXAtaCkKKworIworIyBwcm90ZWN0IFBBQ0tBR0VfKiB2YXJpYWJsZXMKKyMKK0FIX1ZFUkJBVElNKFtQQUNLQUdFX0JVR1JFUE9SVF0sWy8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLworI2lmbmRlZiBQQUNLQUdFX0JVR1JFUE9SVAorI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCisjZW5kaWZdKQorQUhfVkVSQkFUSU0oW1BBQ0tBR0VfTkFNRV0sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9OQU1FCisjdW5kZWYgUEFDS0FHRV9OQU1FCisjZW5kaWZdKQorQUhfVkVSQkFUSU0oW1BBQ0tBR0VfU1RSSU5HXSxbLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX1NUUklORworI3VuZGVmIFBBQ0tBR0VfU1RSSU5HCisjZW5kaWZdKQorQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVEFSTkFNRV0sWy8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9UQVJOQU1FCisjdW5kZWYgUEFDS0FHRV9UQVJOQU1FCisjZW5kaWZdKQorQUhfVkVSQkFUSU0oW1BBQ0tBR0VfVkVSU0lPTl0sWy8qIERlZmluZSB0byB0aGUgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCisjaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgorI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTgorI2VuZGlmXSkKKworQUNfT1VUUFVUCisKK0FDX01TR19DQUNIRV9ESVNQTEFZKCkKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBBdXRvY29uZgorIyBjb21tZW50LXN0YXJ0OiAiIyIKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19hZ2VudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMThhYzMzCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfYWdlbnQKQEAgLTAsMCArMSw4MjIgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIworIyBnZW5lcmF0ZSBlbXB0eSBmaWxlcworIworIyBDcmVhdGUgaW5jbHVkZSBmaWxlIGxpc3QgZm9yIHNubXBfdmFycy5oIHRvIHVzZS4KK21pYmRpcj0iYWdlbnQvbWliZ3JvdXAiCitpZiB0ZXN0ICEgLWQgYWdlbnQ7IHRoZW4KKyAgbWtkaXIgYWdlbnQKK2ZpCitpZiB0ZXN0ICEgLWQgYWdlbnQvbWliZ3JvdXA7IHRoZW4KKyAgbWtkaXIgYWdlbnQvbWliZ3JvdXAKK2ZpCitqPSIkbWliZGlyL21pYl9tb2R1bGVfaW5jbHVkZXMuaCAgJG1pYmRpci9hZ2VudF9tb2R1bGVfaW5jbHVkZXMuaCBcCisgICAkbWliZGlyL21pYl9tb2R1bGVfaW5pdHMuaCAgICAgJG1pYmRpci9hZ2VudF9tb2R1bGVfaW5pdHMuaCAgICBcCisgICAkbWliZGlyL21pYl9tb2R1bGVfc2h1dGRvd24uaCAgJG1pYmRpci9hZ2VudF9tb2R1bGVfc2h1dGRvd24uaCBcCisgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmggICBcCisgICAkbWliZGlyL21pYl9tb2R1bGVfZG90X2NvbmYuaCAgJG1pYmRpci9hZ2VudF9tb2R1bGVfZG90X2NvbmYuaCIKKworZm9yIGkgaW4gJGo7IGRvCisgIHJtIC1mICRpCisgIGVjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRpCitkb25lCisKKyMKKyMgRG8gaGFpcnkgYWdlbnQgbW9kdWxlIHByb2Nlc3NpbmcuCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhbmQgY29uZmlndXJpbmcgbWliIG1vZHVsZXMgdG8gdXNlXSkKKworIyBzZXQgdXAgdGhlIENQUCBjb21tYW5kCitNT0RVTEVDUFA9IiRDUFAgJFBBUlRJQUxUQVJHRVRGTEFHUyAkQ1BQRkxBR1MgLURORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcgLUkke3NyY2Rpcn0vaW5jbHVkZSAtSSR7c3JjZGlyfS9hZ2VudC9taWJncm91cCIKK2lmIHRlc3QgIngkZW5hYmxlX21mZF9yZXdyaXRlcyIgPSAieHllcyI7IHRoZW4KKyAgTU9EVUxFQ1BQPSIkTU9EVUxFQ1BQIC1ETkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTIgorZmkKKworbW9kdWxlX2xpc3Q9IiIKK21pYl9tb2R1bGVfbGlzdD0iIgorYWdlbnRfbW9kdWxlX2xpc3Q9IiIKK25ld193aXRoX21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX21pYl9tb2R1bGVzIHwgJFNFRCAncy8sLyAvZzsnYAorbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX291dF9taWJfbW9kdWxlcyB8ICRTRUQgJ3MvLC8gL2c7J2AKKworIyBzZXQgdXAgaW5pdGlhbCBtb2R1bGUgbGlzdAorbmV3X21vZHVsZV9saXN0PSIkbmV3X3dpdGhfbWliX21vZHVsZXMgZGVmYXVsdF9tb2R1bGVzIgorCisjIG1pbm9yIG1vZGlmaWNhdGlvbnMKK2lmIHRlc3QgIngkZW5hYmxlX2FnZW50IiA9ICJ4bm8iOyB0aGVuCisgICAjIG1pbmltdW0gbWliIG1vZHVsZSBsaXN0IGZvciBzbm1wdHJhcGQKKyAgIG5ld19tb2R1bGVfbGlzdD0ibWliSUkvdmFjbV92YXJzIG1pYklJL3ZhY21fY29uZiB1dGlsaXRpZXMvZXhlY3V0ZSAkbmV3X3dpdGhfbWliX21vZHVsZXMiCisgICBkZWZhdWx0X21pYnM9U05NUHYyLU1JQjpJRi1NSUI6SVAtTUlCOlRDUC1NSUI6VURQLU1JQgorICAgZGVmYXVsdF9taWJzX2luc3RhbGw9IiAiCitlbGlmIHRlc3QgIngkbWluaV9hZ2VudCIgPSAieHllcyI7IHRoZW4KKyAgICMgZGVmaW5lIHRoZSBtaW5pIGFnZW50IGZsYWcgdG8gcmVkdWNlIG91ciBsb2FkIGxpc3QgZnJvbSBkZWZhdWx0X21pYnMuaAorICAgTU9EVUxFQ1BQPSIkTU9EVUxFQ1BQIC1ETkVUU05NUF9NSU5JX0FHRU5UIgorZmkKKwordGVzdF9tb2R1bGVzPSIkbmV3X21vZHVsZV9saXN0IgorbmV3X21vZHVsZV9saXN0PSIiCisKKyMgcmVtb3ZlIG1vZHVsZXMgdGhhdCB3ZXJlIGV4cGxpY2l0bHkgZXhjbHVkZWQKK2ZvciBpIGluICR0ZXN0X21vZHVsZXMKKyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyBpcyBib3RoIGluY2x1ZGVkIGFuZCBleGNsdWRlZC4iCisgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgY29uZmxpY3RdKQorICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KKyAgICAgIEFDX01TR19XQVJOKFt1c2VyIHdpdGggICAgOiAkd2l0aF9taWJfbW9kdWxlc10pCisgICAgICBBQ19NU0dfV0FSTihbZmluYWwgd2l0aCAgIDogJG5ld19tb2R1bGVfbGlzdF0pCisgICAgICBBQ19NU0dfV0FSTihbdXNlciB3aXRob3V0IDogJHdpdGhfb3V0X21pYl9tb2R1bGVzXSkKKyAgICAgIEFDX01TR19XQVJOKFtmaW5hbCB3aXRob3V0OiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzXSkKKyAgICAgIEFDX01TR19FUlJPUihbJG1pYl9jZmdfbXNnXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfV0FSTihbJG1pYl9jZmdfbXNnIEl0IHdpbGwgYmUgZXhjbHVkZWRdKQorICAgICAgQUNfTVNHX0NBQ0hFX0FERChbKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnIEl0IGhhcyBiZWVuIGV4Y2x1ZGVkLl0pCisgICAgZmkKKyAgZWxzZQorICAgIG5ld19tb2R1bGVfbGlzdD0iJG5ld19tb2R1bGVfbGlzdCAkaSIKKyAgZmkKK2RvbmUKKworbmV3X21vZHVsZV9saXN0PWAoZWNobyAkbmV3X21vZHVsZV9saXN0IHwgdHIgJyAnICdcbicgfCBzb3J0IHwgdHIgJ1xuJyAnICc7IGVjaG8gJycpIHwgJFNFRCAncy8gJC8vJ2AKKworQUNfTVNHX1JFU1VMVChbJG5ld19tb2R1bGVfbGlzdC5dKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGxvb3Agb3ZlciBtb2R1bGUgbGlzdAorIworYWxsX3dhcm5pbmdzPSIiCitpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19kZWJ1ZyIgPSAieHllcyI7IHRoZW4KKyAgIG1vZHVsZV9kZWJ1Zz0xCitlbHNlCisgICBtb2R1bGVfZGVidWc9MAorZmkKK2ZpcnN0X3Bhc3M9MQorb3V0cHV0X3RvPW5vcm1hbAorCitpZiB0ZXN0ICEgLWQgbWsgOyB0aGVuCisgIG1rZGlyIG1rCitmaQorCisKK21vZHVsZV9ydWxlcz1tay9tb2R1bGVfcnVsZXMubWsKK2VjaG8gIiMgY29udGVudHMgYmVsb3cgYnVpbHQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmU7IGRvIG5vdCBlZGl0IGJ5IGhhbmQiID4gJG1vZHVsZV9ydWxlcworCisjCisjIG1ha2UgZmlsZSBzdWItcGllY2VzCisjCitmb3IgaSBpbiBtb2R1bGVfbGlzdF9kZXBzIG1pYl9tb2R1bGVfbGlzdF9kZXBzIGFnZW50X21vZHVsZV9saXN0X2RlcHMgOyBkbworICBldmFsICIkaT1tay8ke2l9Lm1rIgorICBlY2hvICIjIGNvbnRlbnRzIGJlbG93IGJ1aWx0IGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlOyBkbyBub3QgZWRpdCBieSBoYW5kIiA+IG1rLyR7aX0ubWsKK2RvbmUKKworIworIyB2YXJpYWJsZSBzZXR0aW5ncyBzdWItcGllY2VzCisjCitmb3IgaSBpbiBtb2R1bGVfbGlzdF9jb2RlIG1pYl9tb2R1bGVfbGlzdF9jb2RlIGFnZW50X21vZHVsZV9saXN0X2NvZGUgbW9kdWxlX2xpc3QgbWliX21vZHVsZV9saXN0IGFnZW50X21vZHVsZV9saXN0IDsgZG8KKyAgZXZhbCAiJGk9bWsvJHtpfS5tayIKKyAgZWNobyAiIyBjb250ZW50cyBiZWxvdyBidWlsdCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZTsgZG8gbm90IGVkaXQgYnkgaGFuZCIgPiBtay8ke2l9Lm1rCisgIGVjaG8gIiRpPSBcXCIgPj4gbWsvJHtpfS5taworZG9uZQorCitlY2hvICRFQ0hPX04gImVjaG8gIiAkRUNIT19DID4gbWsvTU9EVUxFX0xJU1QubWsKK01PRFVMRV9MSVNUPW1rL01PRFVMRV9MSVNULm1rCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyB1bnRpbCB3ZSBoYXZlIGFuIGVtcHR5IG1vZHVsZSBsaXN0Li4uCisjICAgKG1vZHVsZXMgbWF5IGFkZCBuZXcgbW9kdWxlcywgYW5kIHVudGlsIGFsbCBkZXBlbmRlbmNpZXMgYXJlIGRvbmUuLi4pCisjCit3aGlsZSB0ZXN0ICJ4JG5ld19tb2R1bGVfbGlzdCIgIT0gIngiOyBkbworICBBQ19NU0dfTU9EVUxFX0RCRygtZSwiXG4qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIikKKyAgQUNfTVNHX01PRFVMRV9EQkcoIm5tbDogJG5ld19tb2R1bGVfbGlzdCIpCisKKyAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAjIGxvb3Agb3ZlciBhbGwgdGhlIG1vZHVsZXMgaW4gdGhlIGN1cnJlbnQgbGlzdAorICAjCisgIGZvciBqIGluICRuZXdfbW9kdWxlX2xpc3QKKyAgICBkbworCisgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICMgZmlndXJlIG91dCB3aGljaCBzdWItYmxvY2tzIHRvIGJ1aWxkIGluIHBhcnRzCisgICAgaWYgZWNobyAiJGoiIHwgJEdSRVAgIj0iIDsgdGhlbgorICAgICAgICMgYnVpbGQgYSBzaGFyZWQgb2JqZWN0IGZpbGUKKyAgICAgICAjIGZvcm1hdDogc29maWxlbmFtZT1tb2R1bGUxOm1vZHVsZTIKKyAgICAgICAjIFhYWDogY3VycmVudGx5IGRvZXNuJ3QgZG8gdGhpcworICAgICAgIGRsX25hbWU9YGVjaG8gJGogfCAkU0VEICdzLz0uKi8vJ2AKKyAgICAgICBkbF9uYW1lcz0iJGRsX25hbWVzICRkbF9uYW1lIgorICAgICAgIGRsX29iamVjdHM9YGVjaG8gJGogfCAkU0VEICdzLy4qPS8vJ2AKKyAgICAgICBtb2R1bGVfc3VibGlzdD1gZWNobyAkZGxfb2JqZWN0cyB8ICRTRUQgJ3MvOi8gL2cnYAorICAgICAgIHNhdmVkX3N1Ymxpc3Q9IiIKKyAgICAgICBzYXZlZF9zdWJsaXN0X2NvZGU9IiIKKyAgICAgICBvdXRwdXRfdG89c2VwYXJhdGUKKworICAgICAgICMgY3JlYXRlIG91dHB1dCBmaWxlcworICAgICAgICMgdGhlc2UgYWN0dWFsbHkgZ2V0IG51a2VkIGxhdGVyCisgICAgICAgb3V0cHV0X2luaXRzPSJhZ2VudC9taWJncm91cC8ke2RsX25hbWV9LWRsbC5jIgorICAgICAgIG91dHB1dF9oZHJzPSJhZ2VudC9taWJncm91cC8ke2RsX25hbWV9LWhkcnMuaCIKKyAgICBlbHNlCisgICAgICAgIyBub3QgYSBzcGVjaWFsIHRva2VuIGludm9jYXRpb24KKyAgICAgICBtb2R1bGVfc3VibGlzdD0kagorICAgICAgIG91dHB1dF90bz1ub3JtYWwKKyAgICAgICBvdXRwdXRfdD0KKyAgICBmaQorCisgICAgd2hpbGUgdGVzdCAieCRtb2R1bGVfc3VibGlzdCIgIT0gIngiIDsgZG8KKworICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGxvb3Agb3ZlciBhbGwgdGhlIG1vZHVsZXMgaW4gdGhlIHN1YiBsaXN0CisgICAgZm9yIGkgaW4gJG1vZHVsZV9zdWJsaXN0CisgICAgZG8KKworICAgIEFDX01TR19NT0RVTEVfREJHKC1lICJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKQorICAgIEFDX01TR19NT0RVTEVfREJHKCJ0ZXN0aW5nICRpIikKKyAgICBuZWVkX2hlYWRlcj0wCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBidWlsZCBhIHBzZXVkbyBpbmNsdWRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGN1cnJlbnQgY29uZmlnIGFuZAorICAgICMgc3lzdGVtIHN5bWJvbHM6CisgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisgICAgQUNfTEFOR19DT05GVEVTVChbQUNfTEFOR19TT1VSQ0UoW1sKKyNpbmNsdWRlIE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRQorI2luY2x1ZGUgIiRzcmNkaXIvJG1pYmRpci8kaS5oIl1dKV0pCisgICAgbXYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBtYWNybzogY29uZmlnX2JlbG9uZ3NfaW4oQVJHKQorICAgICMgICBBUkc6IGVpdGhlcgorICAgICMgICAgIC0gbWliX21vZHVsZSAgID0+IGxpYm5ldHNubXBtaWJzICAgKGRlZmF1bHQpCisgICAgIyAgICAgLSBhZ2VudF9tb2R1bGUgPT4gbGlibmV0c25tcGFnZW50CisgICAgIworICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfYmVsb25nc19pbih4KV0pCisgICAgbW9kdWxlX3R5cGU9bWliX21vZHVsZQorICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmg7IHRoZW4KKyAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgbW9kdWxlX3R5cGU9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzQC4qY29uZmlnX2JlbG9uZ3NfaW4oXChbXildKlwpKS4qQFwxQHAnYAorICAgICAgY2hhbmdlcXVvdGUoWywgXSkKKyAgICBmaQorICAgIGlmIHRlc3QgIngkbW9kdWxlX3R5cGUiID0gIngiIDsgdGhlbgorICAgICAgbW9kdWxlX3R5cGU9bWliX21vZHVsZQorICAgIGZpCisgICAgaWYgdGVzdCAieCRvdXRwdXRfdG8iID0gInhub3JtYWwiIDsgdGhlbgorICAgICAJb3V0cHV0X2luaXRzPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luaXRzLmgiCisgICAgIAlvdXRwdXRfaGRycz0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbmNsdWRlcy5oIgorICAgIGZpCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGVzIHdpdGhpbiB0aGUgZGxsIHN5c3RlbS4gCisgICAgIyAgIC0gaWYgZm91bmQgaW4gYSBkbGwsIHRoZW4gcmVtb3ZlIGZyb20gdGhlIGRsbCBhbmQgYWRkIHRvIG1haW4KKyAgICBkYmxmaXg9IiIKKyAgICBmb3IgZGx0ZXN0IGluICRkbF9uYW1lcyA7IGRvCisgICAgICBldmFsIG1vZF9maWxlcz0iXCJcJGRsXyR7ZGx0ZXN0fV9maWxlc1wiIgorICAgICAgaWYgZWNobyAiICRtb2RfZmlsZXMgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAjIHNvbWUgZGxsIG1vZHVsZSBoYXMgYWxyZWFkeSBzZWVuIHRoaXMsIHVubG9hZCBpdCBmcm9tIHRoYXQgbGlzdAorICAgICAgICAjIGFuZCBpbmNsdWRlIGl0IGluIHRoZSBjb3JlIChhZ2FpbikKKyAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoInJlbW92aW5nICRpIGZyb20gJGRsdGVzdCIpCisgICAgICAgIG1vZF9maWxlcz1gZWNobyAiICRtb2RfZmlsZXMgIiB8ICRTRUQgInNAICRpIEBAImAKKyAgICAgICAgZGJsZml4PSJfX1hYWF9fIgorICAgICAgICBldmFsICJkbF8ke2RsdGVzdH1fZmlsZXM9XCIkbW9kX2ZpbGVzXCIiCisKKyAgICAgICAgbW9kdWxlX2xpc3Q9IiRtb2R1bGVfbGlzdCAkaSIKKwllY2hvICJyZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1vZHVsZV9saXN0X2RlcHMKKwlpZiB0ZXN0ICRtb2R1bGVfdHlwZSA9ICJhZ2VudF9tb2R1bGUiIDsgdGhlbgorIAkgICAgZWNobyAic25tcF92YXJzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkYWdlbnRfbW9kdWxlX2xpc3RfZGVwcworICAgICAgICBlbHNlCisgCSAgICBlY2hvICJtaWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1pYl9tb2R1bGVfbGlzdF9kZXBzCisgICAgICAgIGZpCisgICAgICAgIGV2YWwgJHttb2R1bGVfdHlwZX1fbGlzdD0iXCJcJCR7bW9kdWxlX3R5cGV9X2xpc3QgJGlcIiIKKwllY2hvICIJJGkgXFwiID4+ICRtb2R1bGVfbGlzdF9jb2RlCisJZWNobyAkRUNIT19OICIgJGkiICRFQ0hPX0MgPj4gJE1PRFVMRV9MSVNUCisgICAgICAgIGV2YWwgdG1wZmlsZXZhcj1cJGBlY2hvICR7bW9kdWxlX3R5cGV9X2xpc3RfY29kZWAKKyAgICAgICAgZWNobyAiCSRpIFxcIiA+PiAkdG1wZmlsZXZhcgorCisJIyBYWFg6IGFkZCB0aGlzIHRvIHRoZSBtYWluIGluaXQgbGlzdDsgdGhpcyBpcyBwb3NzaWJsZSBub3QKKwkjIHF1aXRlIGluIHRoZSByaWdodCBzcG90IGFueSBsb25nZXIgYnV0IHdlJ3JlIHN0dWNrIHdpdGggaXQuCisJIyBBZGRpbmcgaXQgYmFjayB0byB0aGUgb3JpZ2luYWwgb3JkZXJlZCBzcG90IHdvdWxkIGJlIGEKKwkjIG5pZ2h0bWFyZS4gIE9rLCB3ZSdyZSBhbHJlYWR5IGluIG5pZ2h0bWFyZSBjb2RlIHNvIHRoYXQKKwkjIHdvbHVkIGhhdmUgdG8gYmUgYSBuaWdodC10ZXJyb3IuCisgICAgICAgIG1ubT1gZWNobyAkaSB8ICRTRUQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCisJb3V0cHV0X2luaXRzX3RtcD0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbml0cy5oIgorCWVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzX3RtcAorICAgICAgICAjIFhYWDogZXZlbiB3b3JzZSwgd2UgbG9vc2Ugd2hldGhlciB0aGUgaGVhZGVyIGlzIG5lZWRlZCBvciBub3QuCisgICAgIAlvdXRwdXRfaGRyc190bXA9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5jbHVkZXMuaCIKKyAgICAgICAgZWNobyAnI2luY2x1ZGUgIicibWliZ3JvdXAvJGkuaCInIicgPj4gJG91dHB1dF9oZHJzX3RtcAorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgIyBtYWtlIHN1cmUgbW9kdWxlIHdhc24ndCBleHBsaWNpdGx5IGV4Y2x1ZGVkLCBvciBhbHJlYWR5IGFkZGVkCisgICAgIworICAgIGlmIHRlc3QgIngkZGJsZml4IiAhPSAieCIgOyB0aGVuCisgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgd2FzIGR1cGxpY2F0ZWQgLS0gcHV0dGluZyBpbnRvIG1haW4iKQorICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIHdhcyBleGNsdWRlZCIpCisgICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAiICRpICIgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIEFDX01TR19NT0RVTEVfREJHKCIkaSBhbHJlYWR5IHRlc3RlZCIpCisgICAgZWxzZQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIHByb2Nlc3MgbW9kdWxlcyBoZWFkZXIsIGNoZWNraW5nIGZvciBjb25maWdfIHBzZXVkby1tYWNyb3MKKyAgICAgICMKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBkb2VzIHRoZSBoZWFkZXIgZmlsZSBmb3IgdGhlIG1vZHVsZSBleGlzdD8KKyAgICAgICMgICBtYWNyb3MgYXJlIG9ubHkgcHJvY2Vzc2VkIGlmIGl0IGRvZXMKKyAgICAgIGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmg7IHRoZW4KKyAgICAgICAgbmV3X2xpc3Q9IiIKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX2V4Y2x1ZGUobW9kdWxlcykKKyAgICAgIAkjICAtIGxpc3RzIGNvbmZsaWN0cyB3aXRoIG90aGVyIG1vZHVsZXMKKyAgICAgIAkjICAgIC0gRUc6IG5ldyBNSUIgaW1wbGVtZW50YXRpb25zIGV4Y2x1ZGUgb2xkIGFuZCB2aWNlLXZlcnNhCisgICAgICAJIworICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgY29uZmxpY3RzCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpXSkKKyAgICAgICAgbmV3X2xpc3RfZXhjbD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX2V4Y2x1ZGUoXCguKlwpKS4qL1wxL3AnYAorCWlmIHRlc3QgIngkbmV3X2xpc3RfZXhjbCIgIT0gIngiOyB0aGVuCisgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIGV4Y2x1ZGVzICRuZXdfbGlzdF9leGNsIikKKwkgIGZvciBqIGluICRuZXdfbGlzdF9leGNsCisJICAgIGRvCisJICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19taWJfbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgZXhjbHVkZXMgbW9kdWxlICckaicgYnV0IGFub3RoZXIgbW9kdWxlIHJlcXVpcmVzIGl0IgorICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCisgICAgICAgICAgICAgIGlmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KKwkgICAgICAgIEFDX01TR19FUlJPUihbJG1pYl9jZmdfbXNnXSkKKyAgICAgICAgICAgICAgZWxzZQorCSAgICAgICAgQUNfTVNHX1dBUk4oWyRtaWJfY2ZnX21zZ10pCisgICAgICAgICAgICAgICAgQUNfTVNHX0NBQ0hFX0FERChbKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnXSkKKyAgICAgICAgICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgIG5ld193aXRoX291dF9taWJfbW9kdWxlcz0iJGogJG5ld193aXRoX291dF9taWJfbW9kdWxlcyIKKyAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRqIGFkZGVkIHRvIGV4Y2x1ZGVkIGxpc3QiKQorCSAgICBmaQorCSAgZG9uZQorCWZpCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ19hcmNoX3JlcXVpcmUoQVJDSCxtb2R1bGVzKQorICAgICAgCSMgIC0gbGlzdHMgbW9kdWxlcyByZXF1aXJlZCBmb3IgYSBnaXZlbiBBUkNICisgICAgICAgICMKKyAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGFyY2hpdGVjdHVyZSBzcGVjaWZpYyByZXF1aXJlbWVudHMKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX2FyY2hfcmVxdWlyZSh4LHkpXSkKKyAgICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICAgIG5ld19saXN0X2FyY2g9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19hcmNoX3JlcXVpcmUoICpcKFteIF0qXCkgKiwgKlwoW14gXSpcKSAqKS4qL1wxLXhhcmNoeC1cMi9wJ2AKKyAgICAgICAgY2hhbmdlcXVvdGUoWywgXSkKKwlpZiB0ZXN0ICJ4JG5ld19saXN0X2FyY2giICE9ICJ4IjsgdGhlbgorICAgICAgICAgIGZvciBqIGluICRuZXdfbGlzdF9hcmNoCisJICAgIGRvCisJICAgIGFyY2h0ZXN0PWBlY2hvICRqIHwgJFNFRCAncy8teGFyY2h4LS4qLy8nYAorCSAgICAjIHRhcmdldF9vcyBtYXkgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gYSAjZGVmaW5lIG9mIDEuLi4KKwkgICAgaWYgdGVzdCAieCRhcmNodGVzdCIgPSAieDEiIC1vICJ4JHRhcmdldF9vcyIgPSAieCRhcmNodGVzdCIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4JGFyY2h0ZXN0IjsgdGhlbgorCSAgICAgIG5ld19saXN0PSIkbmV3X2xpc3QgYGVjaG8gJGogfCAkU0VEICdzLy4qLXhhcmNoeC0vLydgIgorICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICRpIHJlcXVpcmVkIGFkZGluZyBhcmNoIGZpbGVzOiBgZWNobyAkaiB8ICRTRUQgJ3MvLioteGFyY2h4LS8vJ2AiKQorCSAgICBmaQorCSAgZG9uZQorCWZpCisgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgcmVxdWlyZWQgYXJjaCBmaWxlczogJG5ld19saXN0IikKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX3ZlcnNpb25fcmVxdWlyZSgoYmFzZSwgdmVyc2lvbiwgdmVyc2lvbi1tb2R1bGVzLCAuLi4pKQorICAgICAgCSMgIC0gbGlzdHMgYWx0ZXJuYXRpdmUgbW9kdWxlcyB1c2VkIGZyb20gZGlmZmVyZW50IHZlcnNpb25zLgorICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfdmVyc2lvbl9yZXF1aXJlKHgpXSkKKyAgICAgICAgW25ld19saXN0X2FsdDM9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICRBV0sgJworICAgICAgICAgICAgICAgIEJFR0lOIHsKKyAgICAgICAgICAgICAgICAgICAgaWYoIiciJGVuYWJsZV9uZXdfZmVhdHVyZXMiJyIgPT0gInllcyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9Im1heCI7CisgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYoIiciJGVuYWJsZV9vbGRfZmVhdHVyZXMiJyIgPT0gInllcyIpCisgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q9Im1heC1sZXNzIjsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kPSJtYXgtbGVzcy1lcXVhbCI7CisgICAgICAgICAgICAgICAgICAgIEZTID0gIi4iOworICAgICAgICAgICAgICAgICAgICBzcGxpdCgiJyIkd2l0aF9mZWF0dXJlc19vZiInIiwgYSk7CisgICAgICAgICAgICAgICAgICAgIHZlcnNpb249c3ByaW50ZigiJTAzZCUwM2QlMDNkJTAzZCIsIGFbMV0sIGFbMl0sIGFbM10sIGFbNF0pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvY29uZmlnX3ZlcnNpb25fcmVxdWlyZS8geworICAgICAgICAgICAgICAgICAgICBnc3ViKCJeLipjb25maWdfdmVyc2lvbl9yZXF1aXJlICpcXFxcKFxcXFwoIiwgIiIpOworICAgICAgICAgICAgICAgICAgICBnc3ViKCJcXFxcKVxcXFwpLiokIiwgIiIpOworICAgICAgICAgICAgICAgICAgICBnc3ViKCIsICoiLCAiLCIpOworICAgICAgICAgICAgICAgICAgICBGUyA9ICIsIjsKKyAgICAgICAgICAgICAgICAgICAgbiA9IHNwbGl0KCQwLCBhKTsKKyAgICAgICAgICAgICAgICAgICAgRlMgPSAiLiI7CisgICAgICAgICAgICAgICAgICAgIGFjdHZlciA9ICIwMDAwMDAwMDAwMDAiOworICAgICAgICAgICAgICAgICAgICBhY3RzdHIgPSBhWzFdOworICAgICAgICAgICAgICAgICAgICBmb3IoaSA9IDI7IGkgPCBuOyBpICs9IDIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNwbGl0KGFbaV0sIGIpOworICAgICAgICAgICAgICAgICAgICAgICAgY3VydmVyPXNwcmludGYoIiUwM2QlMDNkJTAzZCUwM2QiLCBiWzFdLCBiWzJdLCBiWzNdLCBiWzRdKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjdXJ2ZXIgPiBhY3R2ZXIgJiYgKG1ldGhvZCAhPSAibWF4LWxlc3MiIHx8IGN1cnZlciA8IHZlcnNpb24pICYmIChtZXRob2QgIT0gIm1heC1sZXNzLWVxdWFsIiB8fCBjdXJ2ZXIgPD0gdmVyc2lvbikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhY3R2ZXIgPSBjdXJ2ZXI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWN0c3RyID0gYVtpICsgMV07CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIgJXMiLCBhY3RzdHIpOworICAgICAgICAgICAgICAgIH0nYF0KKyAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSByZXF1aXJlZCB2ZXJzaW9uZWQgZmVhdHVyZXM6ICRuZXdfbGlzdF9hbHQzIikKKyAgICAgICAgbmV3X2xpc3Q9IiR7bmV3X2xpc3R9JHtuZXdfbGlzdF9hbHQzfSIKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAJIyBtYWNybzogY29uZmlnX3JlcXVpcmUobW9kdWxlcykKKyAgICAgIAkjICAtIGxpc3RzIG1vZHVsZXMgcmVxdWlyZWQgZm9yIHRoaXMgbW9kdWxlCisgICAgICAgICMKKyAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IG90aGVyIHJlcXVpcmVkIG1vZHVsZXMKKyAgICAgICAgIworICAgICAgICBBSF9UT1AoWyNkZWZpbmUgY29uZmlnX3JlcXVpcmUoeCldKQorICAgICAgICBuZXdfbGlzdD0iJG5ld19saXN0IGAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICAgICAgICAgICAkU0VEIC1uICdzLy4qY29uZmlnX3JlcXVpcmUoXCguKlwpKS4qL1wxL3AnYCIKKyAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSB3aWxsIHRlc3Q6ICRuZXdfbGlzdCIpCisJaWYgdGVzdCAieCRuZXdfbGlzdCIgIT0gIngiOyB0aGVuCisJICBmb3IgaiBpbiAkbmV3X2xpc3QKKwkgICAgZG8KKyAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKC1uICIgJGkgd2FudHMgdG8gYWRkICRqOiAiKQorCSAgICBpZiB0ZXN0ICEgLWYgJHNyY2Rpci8kbWliZGlyLyRqLmggLWEgISAtZiAkc3JjZGlyLyRtaWJkaXIvJGouYzsgdGhlbgorICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCisJICAgICAgQUNfTVNHX0VSUk9SKFttaWIgbW9kdWxlICIkaSIgcmVxdWlyZXMgbW9kdWxlICIkaiIgYnV0ICRqLmggb3IgJGouYyBjb3VsZCBub3QgYmUgZm91bmQgaW4gJHNyY2Rpci8kbWliZGlyXSkKKwkgICAgZWxpZiBlY2hvICIgJG5ld193aXRoX291dF9taWJfbW9kdWxlcyAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgaWYgdGVzdCAieCRpIiAhPSAieGRlZmF1bHRfbW9kdWxlcyIgOyB0aGVuCisgICAgICAgICAgICAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyByZXF1aXJlcyBtb2R1bGUgJyRqJyBidXQgc29tZW9uZSB0b2xkIG1lIHRvIGNvbXBpbGUgd2l0aG91dCBpdCIKKyAgICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCisgICAgICAgICAgICAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFskbWliX2NmZ19tc2ddKQorICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgIEFDX01TR19XQVJOKFskbWliX2NmZ19tc2ddKQorICAgICAgICAgICAgICAgICAgQUNfTVNHX0NBQ0hFX0FERChbKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnXSkKKyAgICAgICAgICAgICAgICBmaQorIwkgICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCisjICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaiBpbmNsdWRlZCBwcmV2aW91c2x5IikKKyAgICAgICAgICAgICAgZmkKKwkgICAgZWxzZQorCSAgICAgIG5ld19saXN0X3R3bz0iJG5ld19saXN0X3R3byAkaiIKKyAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGogaW5jbHVkZWQiKQorCSAgICBmaQorCSAgZG9uZQorCWZpCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ19hZGRfbWliKFNPTUUtTUlCKQorICAgICAgCSMgIC0gbGlzdHMgTUlCcyB0byBiZSBhZGRlZCB0byB0aGUgZGVmYXVsdCB0by1sb2FkIGxpc3QuCisgICAgICAgICMKKyAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IG1pYnMgdG8gYWRkCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19hZGRfbWliKHgpXSkKKyAgICAgICAgbmV3X21pYnM9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgICRTRUQgLW4gJ3MvLipjb25maWdfYWRkX21pYihcKC4qXCkpLiovXDEvcCdgCisJaWYgdGVzdCAieCRuZXdfbWlicyIgIT0gIngiOyB0aGVuCisJICAgIGZvciBqIGluICRuZXdfbWlicworCQlkbworCQlpZiB0ZXN0ICJ4YGVjaG8gOiRkZWZhdWx0X21pYnM6IHwgJEdSRVAgOiRqOmAiID0gIngiOyB0aGVuCisJCSAgICBkZWZhdWx0X21pYnM9IiRkZWZhdWx0X21pYnM6JGoiCisJCWZpCisJCWlmIHRlc3QgLWYgJHNyY2Rpci9taWJzLyRqLnR4dDsgdGhlbgorCQkgICAgaWYgZWNobyAkZGVmYXVsdF9taWJzX2luc3RhbGwgfCAkR1JFUCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KKwkJCSAgICA6CisJCSAgICBlbHNlCisJCQkgICAgZGVmYXVsdF9taWJzX2luc3RhbGw9IiRkZWZhdWx0X21pYnNfaW5zdGFsbCAkai50eHQiCisJCSAgICBmaQorCQlmaQorCSAgICBkb25lCisJZmkgIyBuZXcgbWlicworCisgICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgICMgYWRkIHRoZSBjdXJyZW50IG1vZHVsZSB0byB0aGUgbGlzdCBvZiBzdHVmZiB0byBjb21waWxlLCBldGMuCisgICAgICAgICMKKyAgICAgICAgIyBhZGQgJGkgdG8gbW9kdWxlIGxpc3QKKyAgICAgICAgIworICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaSBhZGRlZCAoYmFzZWQgb24gJGkuaCkiKQorICAgICAgICBtb2R1bGVfbGlzdD0iJG1vZHVsZV9saXN0ICRpIgorICAgICAgICBldmFsICR7bW9kdWxlX3R5cGV9X2xpc3Q9IlwiXCQke21vZHVsZV90eXBlfV9saXN0ICRpXCIiCisKKwllY2hvICJyZWFkX2NvbmZpZy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1vZHVsZV9saXN0X2RlcHMKKwlpZiB0ZXN0ICRtb2R1bGVfdHlwZSA9ICJhZ2VudF9tb2R1bGUiIDsgdGhlbgorIAkgICAgZWNobyAic25tcF92YXJzLmxvOiBtaWJncm91cC8kaS5oIiA+PiAkYWdlbnRfbW9kdWxlX2xpc3RfZGVwcworICAgICAgICBlbHNlCisgCSAgICBlY2hvICJtaWJfbW9kdWxlcy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJG1pYl9tb2R1bGVfbGlzdF9kZXBzCisgICAgICAgIGZpCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgIyBjaGVjayBmb3IgdW5zdXBwb3J0ZWQgY29uZmlnX2xvYWRfbWliCisgICAgICAgICMKKyAgICAgICAgaWYgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgJEdSRVAgLXEgY29uZmlnX2xvYWRfbWliOyB0aGVuCisgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQorICAgICAgCSAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgIiRpIiB1c2VzIHRoZSAiY29uZmlnX2xvYWRfbWliIiBkaXJlY3RpdmUsIHdoaWNoIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuICBJdCBwcm9iYWJseSB3b24ndCB3b3JrLl0pCisgICAgICAgIGZpICMgZ3JlcCBjb25maWdfbG9hZF9taWIKKworICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAjIGNoZWNrIGZvciBjb25maWdfcGFyc2VfZG90X2NvbmYKKyAgICAgICAgIyAgKGdlbmVyYWxseSBub3QgdXNlZCBhbnkgbG9uZ2VyOyBvbGQgYXV0by1sb2FkIGEgLmNvbmYgdG9rZW4pCisgICAgICAgICMKKyAgICAgICAgQUhfVE9QKFsjZGVmaW5lIGNvbmZpZ19wYXJzZV9kb3RfY29uZih3LHgseSx6KV0pCisgICAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgICAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBcCisgICAgICAgICRTRUQgLW4gJ3NALipjb25maWdfcGFyc2VfZG90X2NvbmYoXChbXildKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpKS4qQHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wZCIsXDEsIFwyLCBcMywgXDQpO0BwJyA+PiAkbWliZGlyL21pYl9tb2R1bGVfZG90X2NvbmYuaAorCWNoYW5nZXF1b3RlKFssIF0pCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ19lcnJvcihlcnJvciB0ZXh0KQorICAgICAgCSMgIC0gdXNlZCB0byBzaWduYWwgYSBjb25maWd1cmF0aW9uIGVycm9yIGZyb20gYSBtb2R1bGUKKyAgICAgICAgIworICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgZXJyb3JzLCBvciB3YXJuaW5ncworICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfZXJyb3IoeCldKQorICAgICAgICBlcnJvcj1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgXAorICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ19lcnJvcihcKC4qXCkpLiovXDEvcCdgCisJaWYgdGVzdCAieCRlcnJvciIgIT0gIngiOyB0aGVuCisgICAgICAgICAgZWNobworICAgICAgICAgIGVjaG8KKyAgICAgICAgICBBQ19NU0dfRVJST1IoWyRpOiAqKiogJGVycm9yICoqKl0pCisgICAgICAgIGZpCisKKyAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgCSMgbWFjcm86IGNvbmZpZ193YXJuaW5nKHdhcm5pbmcgdGV4dCkKKyAgICAgIAkjICAtIHVzZWQgdG8gc2lnbmFsIGEgY29uZmlndXJhdGlvbiAid2FybmluZyIgdG8gYmUgcHJpbnRlZCB0byB0aGUgdXNlcgorICAgICAgICAjCisgICAgICAgIEFIX1RPUChbI2RlZmluZSBjb25maWdfd2FybmluZyh4KV0pCisgICAgICAgIHdhcm5pbmc9YCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IFwKKyAgICAgICAgICAgICAgICAgJFNFRCAtbiAncy8uKmNvbmZpZ193YXJuaW5nKFwoLipcKSkuKi9cMS9wJ2AKKwlpZiB0ZXN0ICJ4JHdhcm5pbmciICE9ICJ4IjsgdGhlbgorICAgICAgICAgIGFsbF93YXJuaW5ncz0iJGFsbF93YXJuaW5ncyAkd2FybmluZworIgorICAgICAgICBmaQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIENoZWNrIGZvciBhIC5jIGZpbGUgaWYgdGhlIC5oIGRpZG4ndCBleGlzdAorICAgICAgIworICAgICAgZWxpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jOyB0aGVuCisgICAgICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAkbmV3X21vZHVsZV9saXN0ICIgfCAkR1JFUCAiICRpICAgICAgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaSBhbHJlYWR5IGluY2x1ZGVkIikKKyAgICAgICAgZWxzZQorICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaSBhZGRlZCAoYmFzZWQgb24gJGkuYykiKQorCSAgIG1vZHVsZV9saXN0PSIkbW9kdWxlX2xpc3QgJGkiCisJICAgbWliX21vZHVsZV9saXN0PSIkbWliX21vZHVsZV9saXN0ICRpIgorICAgICAgICBmaQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIE5vIC5oIG9yIC5jID0gZXJyb3IhICAodHlwbz8pCisgICAgICAjCisgICAgICBlbHNlICMgbm8gJGkuaCBvciAkaS5jCisgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKKwlBQ19NU0dfRVJST1IoW21vZHVsZSBmaWxlcyAkaS5oIG9yICRpLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpcl0pCisgICAgICBmaSAjIG5vICRpLmgKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICMgY2hlY2sgZm9yIGluaXQvc2h1dGRvd24gcm91dGluZXMgdG9vCisgICAgICAjCisgICAgICBoYXNfY19jb2RlPW5vCisgICAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jOyB0aGVuCisgICAgICAgIGlmIHRlc3QgIngkb3V0cHV0X3RvIiA9ICJ4bm9ybWFsIiA7IHRoZW4KKwkgIGVjaG8gIgkkaSBcXCIgPj4gJG1vZHVsZV9saXN0X2NvZGUKKyAgCSAgZWNobyAkRUNIT19OICIgJGkiICRFQ0hPX0MgPj4gJE1PRFVMRV9MSVNUCisgICAgICAgICAgZXZhbCB0bXBmaWxldmFyPVwkYGVjaG8gJHttb2R1bGVfdHlwZX1fbGlzdF9jb2RlYAorICAgICAgICAgIGVjaG8gIgkkaSBcXCIgPj4gJHRtcGZpbGV2YXIKKyAgICAgICAgZWxzZQorICAgICAgICAgIGV2YWwgImRsXyR7ZGxfbmFtZX1fZmlsZXM9XCJcJGRsXyR7ZGxfbmFtZX1fZmlsZXMgJGlcIiIKKyAgICAgICAgICBzYXZlZF9zdWJsaXN0X2NvZGU9IiRzYXZlZF9zdWJsaXN0X2NvZGUgJGkiCisgICAgICAgIGZpCisgICAgICAgIG1ubT1gZWNobyAkaSB8ICRTRUQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCisgICAgICAgIEFDX01TR19NT0RVTEVfREJHKC1lICJcbmNoZWNraW5nICckc3JjZGlyLyRtaWJkaXIvJGkuYycgKCRtbm0vYGJhc2VuYW1lICRpYCkgQyBmaWxlIGZvciBpbml0L3NodXRkb3duIikKKyAgICAgICAgaWYgdGVzdCAieCRtbm0iICE9ICJ4YGJhc2VuYW1lICRpYCI7IHRoZW4KKyAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQorCSAgIEFDX01TR19FUlJPUihbY29uZmxpY3RpbmcgbmFtZXM6ICRtbm0gIT0gYGJhc2VuYW1lICRpYF0pCisgICAgICAgIGZpCisgICAgICAgIHRlbXBfaW5pdD1gJEdSRVAgaW5pdF8kbW5tICRzcmNkaXIvJG1pYmRpci8kaS5jIHwgJEdSRVAgLXYgX2luaXRfJG1ubWAKKwlpZiB0ZXN0ICJ4JHRlbXBfaW5pdCIgIT0gIngiOyB0aGVuCisgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygtZSAiYWRkaW5nIGluaXRfJG1ubSgpIHRvIGxpc3QiKQorICAgICAgICAgICAgbmVlZF9oZWFkZXI9MQorCSAgICBlY2hvICIgIGlmIChzaG91bGRfaW5pdChcIiRtbm1cIikpIGluaXRfJG1ubSgpOyIgPj4gJG91dHB1dF9pbml0cworCWZpCisJJEdSRVAgc2h1dGRvd25fJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyA+IC9kZXYvbnVsbAorICAgICAgICBpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCisgICAgICAgICAgICAgIGVjaG8gLWUgIlxuYWRkaW5nIHNodXRkb3duXyRtbm0oKSB0byBsaXN0IgorICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIG5lZWRfaGVhZGVyPTEKKwkgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBzaHV0ZG93bl8kbW5tKCk7IiA+PiAkbWliZGlyLyR7bW9kdWxlX3R5cGV9X3NodXRkb3duLmgKKwlmaQorICAgICAgZmkgIyB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGlmIHRoZXJlIGlzIGEgc2h1dGRvd24vaW5pdCBsaXN0LAorICAgICAgIworICAgICAgaWYgdGVzdCAkbmVlZF9oZWFkZXIgLWVxIDEgOyB0aGVuCisgICAgICAgICBlY2hvICcjaW5jbHVkZSAiJyJtaWJncm91cC8kaS5oIiciJyA+PiAkb3V0cHV0X2hkcnMKKyAgICAgIGVsc2UKKyAgICAgICAgIGVjaG8gJy8qI2luY2x1ZGUgIicibWliZ3JvdXAvJGkuaCInIiovJyA+PiAkb3V0cHV0X2hkcnMKKyAgICAgIGZpCisKKyAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGNoZWNrIGZvciBvdXRwdXQgZGlyZWN0b3J5IChmb3IgYnVpbGRpbmcgb3V0c2lkZSBvZiBzb3VyY2UgdHJlZQorICAgICAgIworICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICBpZiB0ZXN0ICJ4YGVjaG8gJGkgfCAkU0VEICdzL1wvLy9nOydgIiAhPSAieCRpIjsgdGhlbgorCW1uZD1gZWNobyAkaSB8ICRTRUQgJ3MvXC9bXi9dKiQvLzsnYAorCWlmIHRlc3QgISAtZCAuLyRtaWJkaXIvJG1uZDsgdGhlbgorCSAgICBtb2R1bGVfZGlyZWN0b3JpZXM9IiRtb2R1bGVfZGlyZWN0b3JpZXMgLi8kbWliZGlyLyRtbmQiCisJZmkKKyAgICAgIGZpICMgbW9kdWxlIGRpcmVjdG9yeSB0ZXN0CisgICAgICBjaGFuZ2VxdW90ZShbLCBdKQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgIyBkZWZpbmUgVVNJTkdfKl9NT0RVTEUKKyAgICAgICMKKyAgICAgIGNoYW5nZXF1b3RlKCwgKQorICAgICAgc3ltPSJgZWNobyAke2l9IHwgJFNFRCAncy9bXmEtekEtWjAtOV9dL18vZycgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgIgorICAgICAgY2hhbmdlcXVvdGUoWywgXSkKKyAgICAgIGVjaG8gIi8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgJHtpfSBtb2R1bGUgZmlsZXMuICAqLyIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAorICAgICAgZWNobyAiI2RlZmluZSBVU0lOR18ke3N5bX1fTU9EVUxFIDEiID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKKyAgICAgIGVjaG8gIiAiID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKKworICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgIGVjaG8gJEVDSE9fTiAiICRpJEVDSE9fQyIKKyAgICBmaSAjCisgICAgZG9uZSAjIGZvciBpIGluICRtb2R1bGVfc3VibGlzdAorCisgICAgaWYgdGVzdCAiJG91dHB1dF90byIgPSAic2VwYXJhdGUiIDsgdGhlbgorICAgICAgaWYgdGVzdCAieCRuZXdfbGlzdF90d28iID0gIngiIDsgdGhlbgorICAgICAgICAjIG5vIG5ldyBzdWItbW9kdWxlcyB0byBhZGQgdG8gdGhlIGN1cnJlbnQgdGFyZ2V0CisgICAgICAgIG91dHB1dF90bz0ibm9ybWFsIgorCisgICAgICAgIGRsbGNsZWFucz0iJHNhdmVkX3N1Ymxpc3RfbyAkZGxsY2xlYW5zIgorICAgICAgICBvdXRwdXRfaW5pdHM9IiIKKyAgICAgICAgbW9kdWxlX3N1Ymxpc3Q9IiIKKyAgICAgIGVsc2UKKyAgICAgICAgIyBhIG1vZHVsZSBoYWQgc3ViLW1vZHVsZXMgcmVxdWlyZWQ7IGtlZXAgZ29pbicKKyAgICAgICAgc2F2ZWRfc3VibGlzdD0iJHNhdmVkX3N1Ymxpc3QgJG1vZHVsZV9zdWJsaXN0IgorICAgICAgICBtb2R1bGVfc3VibGlzdD0iJG5ld19saXN0X3R3byIKKyAgICAgICAgbmV3X2xpc3RfdHdvPSIiCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgIG1vZHVsZV9zdWJsaXN0PSIiCisgICAgZmkKKworICAgIGRvbmUgIyB3aGlsZSBtb2R1bGVfc3VibGlzdAorICBkb25lICMgZm9yIGogaW4gJG5ld19tb2R1bGVfbGlzdAorCisgICMgcmVtZW1iZXIgdGhlIHRvcCBsZXZlbCBtb2R1bGVzIGZvciBsYXRlciByZXBvcnRpbmcKKyAgaWYgdGVzdCAkZmlyc3RfcGFzcyA9IDEgOyB0aGVuCisgICAgIyByZW1lbWJlciB0aGlzIGxpc3QgZm9yIGxhdGVyIHJlcG9ydGluZworICAgIHRvcF9sZXZlbF9tb2R1bGVzPSIkbmV3X21vZHVsZV9saXN0ID0+ICRuZXdfbGlzdF90d28iCisgICAgZmlyc3RfcGFzcz0wCisgIGZpCisgICMtLS0tLS0tLS0tLS0tLS0tLS0tCisgICMgaWYgJGkgYWRkZWQgbmV3IG1vZHVsZXMgdmlzIGNvbmZpZ18qLAorICAjIGNoZWNrIHRob3NlIG1vZHVsZXMgZm9yIHJlcXVpcmVtZW50cyB0b28KKyAgIworICAjIHRyYW5zZmVyIHRoZSBuZXcgbW9kdWxlIHRvIGNoZWNrIGxpc3QgdG8gdGhlIG5vcm1hbCB2YXJpYWJsZQorICAjCisgIGlmIHRlc3QgIngkbmV3X2xpc3RfdHdvIiA7IHRoZW4KKyAgICBvdXRwdXRfdG89bm9ybWFsCisgIGZpCisgIG5ld19tb2R1bGVfbGlzdD0iJG5ld19saXN0X3R3byIKKyAgbmV3X2xpc3RfdHdvPSIiCitkb25lICMgd2hpbGUgdGVzdCAieCRuZXdfbW9kdWxlX2xpc3QiICE9ICJ4IjsgZG8KK2VjaG8gIiIKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGNvbnN0cnVjdCB0aGUgZGxsIGNvZGUgZmlsZXMgYW5kIG1ha2UgcnVsZXMuICBUaGlzIGNhbid0IGJlIGRvbmUKKyMgdW50aWwgbm93IGJlY2F1c2UgZHVwbGljYXRlIHVzZSBvZiBhIG1vZHVsZSBtZWFucyBpdCBnZXRzIHJlbW92ZWQKKyMgZnJvbSB0aGUgZGxsIGFuZCBwdXQgaW50byB0aGUgbWFpbiBhZ2VudC4KKyMKK2ZvciBpIGluICRkbF9uYW1lcyA7IGRvCisgIGV2YWwgbW9kX2ZpbGVzPSJcIlwkZGxfJHtpfV9maWxlc1wiIgorICBlY2hvICJjb21wb25lbnRzIGluIHRoZSAkaSBkbGw6ICRtb2RfZmlsZXMiCisKKyAgb3V0cHV0X2luaXRzPSJhZ2VudC9taWJncm91cC8ke2l9LWRsbC5jIgorICBvdXRwdXRfaGRycz0iYWdlbnQvbWliZ3JvdXAvJHtpfS1oZHJzLmgiCisKKyAgQUNfTVNHX01PRFVMRV9EQkcoImNyZWF0aW5nIGRsbCBmaWxlOiAkb3V0cHV0X2luaXRzIikKKyAgZm9yIG9maWxlIGluICRvdXRwdXRfaW5pdHMgJG91dHB1dF9oZHJzIDsgZG8KKyAgICBpZiB0ZXN0IC1mICRvZmlsZSA7IHRoZW4KKyAgICAgIGlmICRHUkVQICJ0aGlzIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZSIgJG9maWxlID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCisgIAk6CisgICAgICBlbHNlCisgIAlBQ19NU0dfRVJST1IoWyRvZmlsZSBhbHJlYWR5IGV4aXN0ZWQgOyBjYW4ndCBidWlsZCBkbGwgb2JqZWN0ICRpXSkKKyAgICAgIGZpCisgICAgZmkKKyAgICBjYXQgPiAkb2ZpbGUgPDwgRU9GSUYKKy8qIHhEbyBub3QgZWRpdDsgdGhpcyBmaWxlIGNyZWF0ZWQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmUgKi8KK0VPRklGCisgIGRvbmUKKworICBjYXQgPj4gJG91dHB1dF9pbml0cyA8PCBFT0ZPQworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICIke2l9LWhkcnMuaCIKK3ZvaWQKK2luaXRfJGkodm9pZCkgeworRU9GT0MKKworICAjIGNyZWF0ZSB0aGUgLnNvIHJ1bGUKKyAgc2F2ZWRfc3VibGlzdF9vPWBlY2hvICIkbW9kX2ZpbGVzICIgfCAkU0VEICdzL14gKi8vZztzLyAgKi8ubyAvZzsnYAorCisgICMgY3JlYXRlIHRoZSBydWxlcyBmb3IgZWFjaCBvYmplY3QKKyAgZm9yIGogaW4gJG1vZF9maWxlcyA7IGRvCisgICAgY2F0ID4+ICRtb2R1bGVfcnVsZXMgPDwgRU9GUgorJGoubzogJGouYworCVwkKENDKSAtYyBcJChDUFBGTEFHUykgXCQoQ0ZMQUdTKSBcJChETEZMQUdTKSAtbyBcJEAgXCQ8CisKK0VPRlIKKyAgICBtbm09YGVjaG8gJGogfCAkU0VEICdzLy4qXC8vLztzL1wuYyQvLzsnYAorICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzCisgIGRvbmUKKworICAjIGNyZWF0ZSB0aGUgcnVsZSBmb3IgdGhlIC5zbyBhbmQgd3JhcHBlciBjb2RlCisgIGNhdCA+PiAkbW9kdWxlX3J1bGVzIDw8IEVPRk0KKyR7aX0tZGxsLm86ICR7aX0tZGxsLmMKKwlcJChDQykgLWMgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAIFwkPAorCiske2l9LnNvOiAkc2F2ZWRfc3VibGlzdF9vICR7aX0tZGxsLm8KKwlcJChDQykgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAICRzYXZlZF9zdWJsaXN0X28gJHtpfS1kbGwubworCitFT0ZNCisgICAgICAgIGNhdCA+PiAkb3V0cHV0X2luaXRzIDw8IEVPRk9DRklOCit9CitFT0ZPQ0ZJTgorCitkb25lCisKKyMgY2xlYW51cAorcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tCisjIGJ1aWxkIG1vZHVsZSBsaXN0cyBmb3IgTWFrZWZpbGVzCisjCitjaGFuZ2VxdW90ZSgsICkKKworZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1vZHVsZV9saXN0X2Z0IG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfZnQgbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9mdCBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfZnQgYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9mdCA7IGRvCisgIGV2YWwgIiRpPW1rLyR7aX0ubWsiCitkb25lCisKKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X28KKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2MKKyRTRUQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9sbworJFNFRCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9mdC87cy9cKFtePV1cKSAgKlxcL1wxLmZ0IFxcL2cnIDwgJG1vZHVsZV9saXN0X2NvZGUgID4gJG1vZHVsZV9saXN0X2Z0CisKKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9vCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3RfY29kZS9taWJfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfYworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9sbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2NvZGUvbWliX21vZHVsZV9saXN0X2Z0LztzL1woW149XVwpICAqXFwvXDEuZnQgXFwvZycgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9mdAorCiskU0VEICdzL15taWJfbW9kdWxlX2xpc3Rfby9taWJncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9vID4gJG1pYmdyb3VwX2xpc3RfbworJFNFRCAncy9ebWliX21vZHVsZV9saXN0X2xvL21pYmdyb3VwX2xpc3RfbG8vO3NAXChbXiAJXSpcKVwubG9AbWliZ3JvdXAvXDEubG9AZycgPCAkbWliX21vZHVsZV9saXN0X2xvID4gJG1pYmdyb3VwX2xpc3RfbG8KKyRTRUQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9mdC9taWJncm91cF9saXN0X2Z0LztzQFwoW14gCV0qXClcLmZ0QG1pYmdyb3VwL1wxLmZ0QGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9mdCA+ICRtaWJncm91cF9saXN0X2Z0CisKKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X28KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfYy87cy9cKFtePV1cKSAgKlxcL1wxLmMgXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2MKKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9jb2RlICA+ICRhZ2VudF9tb2R1bGVfbGlzdF9sbworJFNFRCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9mdC87cy9cKFtePV1cKSAgKlxcL1wxLmZ0IFxcL2cnIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X2Z0CisKKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X28vYWdlbnRncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJGFnZW50X21vZHVsZV9saXN0X28gPiAkYWdlbnRncm91cF9saXN0X28KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2xvL2FnZW50Z3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9sbyA+ICRhZ2VudGdyb3VwX2xpc3RfbG8KKyRTRUQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2Z0L2FnZW50Z3JvdXBfbGlzdF9mdC87c0BcKFteIAldKlwpXC5mdEBtaWJncm91cC9cMS5mdEBnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9mdCA+ICRhZ2VudGdyb3VwX2xpc3RfZnQKKworZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1vZHVsZV9saXN0X2Z0IG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfZnQgbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9mdCBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfZnQgYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9mdCA7IGRvCisJIyBocHV4IG1ha2UgKGF0IGxlYXN0KSBkb2Vzbid0IGxpa2UgYSB0cmFpbGluZyBcIG9uIHRoZSBsYXN0CisJIyBsaW5lIGV2ZW4gd2hlbiB0aGUgbmV4dCBsaW5lIGNvbnRhaW5zIG5vdGhpbmcgYnV0CisJIyB3aGl0ZXNwYWNlLgorCWxhc3R0b2tlbj1gYXdrICd7bGFzdHRva2VuPSQxfUVORHtwcmludCBsYXN0dG9rZW59JyBtay8kaS5ta2AKKwkkU0VEICJzIyRsYXN0dG9rZW4gXFxcXCMkbGFzdHRva2VuIyIgPCBtay8kaS5tayA+IG1rLyRpLm1rLnRtcAorCW12IG1rLyRpLm1rLnRtcCBtay8kaS5taworCisJIyBhZGQgYSBjbG9zaW5nIGNvbW1lbnQKKwllY2hvICIiID4+IG1rLyRpLm1rCisJZWNobyAiIyBlbmQgY29uZmlndXJlIGdlbmVyYXRlZCBjb2RlIiA+PiBtay8kaS5taworZG9uZQorCitjaGFuZ2VxdW90ZShbLCBdKQorCitpZiB0ZXN0ICRtb2R1bGVfZGVidWcgLWVxIDE7IHRoZW4KKyAgIGVjaG8gLWUgIlxuRmluYWwgbW9kdWxlIGxpc3Q6ICRtb2R1bGVfbGlzdF9jb2RlIgorICAgZXhpdAorZmkKK2lmIHRlc3QgIngkd2l0aF9taWJfY2ZnX2NoZWNrcyIgPSAieHllcyI7IHRoZW4KKyAgQUNfTVNHX0NBQ0hFX0FERChbQWdlbnQgTW9kdWxlIGxpc3Q6ICRtb2R1bGVfbGlzdF9jb2RlXSkKK2ZpCitBQ19TVUJTVF9GSUxFKE1PRFVMRV9MSVNUKQorQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9jKQorQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9vKQorQUNfU1VCU1RfRklMRShtb2R1bGVfbGlzdF9sbykKK0FDX1NVQlNUX0ZJTEUobW9kdWxlX2xpc3RfZnQpCitBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9jKQorQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfbykKK0FDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X2xvKQorQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfZnQpCitBQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2MpCitBQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X28pCitBQ19TVUJTVF9GSUxFKGFnZW50X21vZHVsZV9saXN0X2xvKQorQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9mdCkKK0FDX1NVQlNUX0ZJTEUobWliZ3JvdXBfbGlzdF9vKQorQUNfU1VCU1RfRklMRShtaWJncm91cF9saXN0X2xvKQorQUNfU1VCU1RfRklMRShtaWJncm91cF9saXN0X2Z0KQorQUNfU1VCU1RfRklMRShhZ2VudGdyb3VwX2xpc3RfbykKK0FDX1NVQlNUX0ZJTEUoYWdlbnRncm91cF9saXN0X2xvKQorQUNfU1VCU1RfRklMRShhZ2VudGdyb3VwX2xpc3RfZnQpCisKK0FDX1NVQlNUKGRlZmF1bHRfbWlic19pbnN0YWxsKQorQUNfU1VCU1QoZGxsY2xlYW5zKQorQUNfU1VCU1RfRklMRShtb2R1bGVfcnVsZXMpCitBQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2RlcHMpCitBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9kZXBzKQorQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9kZXBzKQorCitBQ19NU0dfUkVTVUxUKC4pCisKK2lmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgorQUNfTVNHX0NBQ0hFX0FERChBZ2VudCBNSUIgY29kZTogICAgICAgICAgICAkbW9kdWxlX2xpc3QpCitmaQorQUNfTVNHX0NBQ0hFX0FERChBZ2VudCBNSUIgY29kZTogICAgICAgICAgICAkdG9wX2xldmVsX21vZHVsZXMpCisKKyMgZW5kIGhhaXJ5IGFnZW50IG1vZHVsZSBwcm9jZXNzaW5nCisKK0FDX01TR19DSEVDS0lORyhbaWYgZGlyZWN0b3JpZXMgbmVlZCB0byBiZSBjcmVhdGVkXSkKK2ZvciBpIGluICRtb2R1bGVfZGlyZWN0b3JpZXM7IGRvCisgICRzcmNkaXIvbWtpbnN0YWxsZGlycyAkaQorZG9uZQorQUNfTVNHX1JFU1VMVCguKQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgZGVmYXVsdCBtaWJzCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2RlZmF1bHQgbWliIGZpbGVzIHRvIHJlYWRdKQoraWYgdGVzdCAieCRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPSAieCI7IHRoZW4KKyAgTkVUU05NUF9ERUZBVUxUX01JQlM9IiRkZWZhdWx0X21pYnMiCitmaQoraWYgdGVzdCAieCRFTlZfU0VQQVJBVE9SIiAhPSAieCI7IHRoZW4KKyAgOgorZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgICMgbWluZ3czMiBhbmQgY3lnd2luIHVzZSAnOycgYXMgdGhlIGRlZmF1bHQgZW52aXJvbm1lbnQgdmFyaWFibGUgc2VwYXJhdG9yCisgIEVOVl9TRVBBUkFUT1I9IjsiCisgIE5FVFNOTVBfREVGQVVMVF9NSUJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQlMiIHwgJFNFRCAncy86LzsvZydgCisgIGRlZmF1bHRfbWlicz1gZWNobyAiJGRlZmF1bHRfbWlicyIgfCAkU0VEICdzLzovOy9nJ2AKK2Vsc2UKKyAgRU5WX1NFUEFSQVRPUj0iOiIKK2ZpCitBQ19TVUJTVChFTlZfU0VQQVJBVE9SKQorQUNfREVGSU5FX1VOUVVPVEVEKFtFTlZfU0VQQVJBVE9SXSwgWyIkRU5WX1NFUEFSQVRPUiJdLAorICAgICAgICAgW0Vudmlyb25tZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIgc3Vycm91bmRlZCBieSBkb3VibGUgcXVvdGVzLl0pCitBQ19ERUZJTkVfVU5RVU9URUQoW0VOVl9TRVBBUkFUT1JfQ0hBUl0sIFsnJEVOVl9TRVBBUkFUT1InXSwKKyAgICAgICAgICBbRW52aXJvbm1lbnQgc2VwYXJhdG9yIGNoYXJhY3RlciBzdXJyb3VuZGVkIGJ5IHNpbmdsZSBxdW90ZXMuXSkKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCUywiJE5FVFNOTVBfREVGQVVMVF9NSUJTIikKK0FDX1NVQlNUKE5FVFNOTVBfREVGQVVMVF9NSUJTKQorQUNfTVNHX1JFU1VMVCgkTkVUU05NUF9ERUZBVUxUX01JQlMpCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tCisjIERlZmluZSBzeW1ib2xzIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBpbiBtYWtlZmlsZXMKKyMKKworaWYgZWNobyAiICRhZ2VudF9tb2R1bGVfbGlzdCAiIHwgXAorICAgZmdyZXAgJyBhZ2VudHgvYWdlbnR4X2NvbmZpZyAnIHwgXAorICAgZmdyZXAgJyBhZ2VudHgvY2xpZW50ICcgfCBcCisgICBmZ3JlcCAnIGFnZW50eC9wcm90b2NvbCAnID4gL2Rldi9udWxsIDsgdGhlbgorICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX1RSVUU9JycKKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19GQUxTRT0nIycKK2Vsc2UKKyAgIE5FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFPScjJworICAgTkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFPScnCitmaQorQUNfU1VCU1QoW05FVFNOTVBfSEFWRV9BR0VOVFhfTElCU19UUlVFXSkKK0FDX1NVQlNUKFtORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfRkFMU0VdKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliIGIvY29uZmlndXJlLmQvY29uZmlnX21vZHVsZXNfbGliCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MmJhMGEKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19saWIKQEAgLTAsMCArMSwyMzQgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIworIyBNYXliZSBhZGQgbGlicmFyeSBleHRlbnNpb25zIGZvciB0aHJlYWQgbXV0ZXggbG9ja2luZy4KKyMKKworaWYgdGVzdCAieCR3aXRoX3Jlc19sb2NrcyIgPSAieHllcyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfUkVFTlRSQU5ULCAxLAorICAgIFtEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIHJlZW50cmFudC90aHJlYWRlZAorICAgICBjb2RlIChpbmNvbXBsZXRlKS5dKQorCisgICAgY2FzZSAkdGFyZ2V0X29zIGluCisKKyAgICBhaXgqKQorCUNDX1JVTlRJTUVfQVJHPSIkQ0NfUlVOVElNRV9BUkcgLWxwdGhyZWFkcyIKKwk7OworCisgICAgKikKKwk7OworCisgICAgZXNhYworZmkKKworIworIyBBZGQgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlIGZpbGVzLgorIworQUNfTVNHX0NIRUNLSU5HKFtmb3IgcGxhdGZvcm0tc3BlY2lmaWMgc291cmNlXSkKK290aGVyX3NyY19saXN0PSIiCitvdGhlcl9mdG9ianNfbGlzdD0iIgorb3RoZXJfbG9ianNfbGlzdD0iIgorb3RoZXJfb2Jqc19saXN0PSIiCitvdGhlcl9hZ2VudG9ianM9IiIKK290aGVyX2xhZ2VudG9ianM9IiIKK290aGVyX2Z0YWdlbnRvYmpzPSIiCitvdGhlcl90cmFwZF9vYmplY3RzPSIiCisKKyMgV2luMzIgc2VydmljZSBjb2RlCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgorICBvdGhlcl9zcmNfbGlzdD0iJG90aGVyX3NyY19saXN0IHdpbnNlcnZpY2UuYyB3aW5zZXJ2aWNlcmMucmMiCisgIG90aGVyX29ianNfbGlzdD0iJG90aGVyX29ianNfbGlzdCB3aW5zZXJ2aWNlLm8gd2luc2VydmljZXJjLm8iCisgIG90aGVyX2xvYmpzX2xpc3Q9IiRvdGhlcl9sb2Jqc19saXN0IHdpbnNlcnZpY2UubG8gd2luc2VydmljZXJjLmxvIgorICBvdGhlcl9mdG9ianNfbGlzdD0iJG90aGVyX2Z0b2Jqc19saXN0IHdpbnNlcnZpY2UuZnQgd2luc2VydmljZXJjLmZ0IgorICBvdGhlcl9hZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLm8iCisgIG90aGVyX2xhZ2VudG9ianM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLmxvIgorICBvdGhlcl9mdGFnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubG8iCisgIG90aGVyX3RyYXBkX29iamVjdHM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLm8iIAorZmkKKyAgCisjIFdpbjMyIHBpcGVzCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgorICBvdGhlcl9zcmNfbGlzdD0iJG90aGVyX3NyY19saXN0IHdpbnBpcGUuYyIKKyAgb3RoZXJfb2Jqc19saXN0PSIkb3RoZXJfb2Jqc19saXN0IHdpbnBpcGUubyIKKyAgb3RoZXJfbG9ianNfbGlzdD0iJG90aGVyX2xvYmpzX2xpc3Qgd2lucGlwZS5sbyIKKyAgb3RoZXJfZnRvYmpzX2xpc3Q9IiRvdGhlcl9mdG9ianNfbGlzdCB3aW5waXBlLmZ0IgorZmkKKworQUNfU1VCU1Qob3RoZXJfc3JjX2xpc3QpCitBQ19TVUJTVChvdGhlcl9vYmpzX2xpc3QpCitBQ19TVUJTVChvdGhlcl9sb2Jqc19saXN0KQorQUNfU1VCU1Qob3RoZXJfZnRvYmpzX2xpc3QpCitBQ19TVUJTVChvdGhlcl9hZ2VudG9ianMpCitBQ19TVUJTVChvdGhlcl9sYWdlbnRvYmpzKQorQUNfU1VCU1Qob3RoZXJfZnRhZ2VudG9ianMpCitBQ19TVUJTVChvdGhlcl90cmFwZF9vYmplY3RzKQorCitBQ19NU0dfUkVTVUxUKFskb3RoZXJfc3JjX2xpc3QgJG90aGVyX29ianNfbGlzdCAkb3RoZXJfbG9ianNfbGlzdF0pCitBQ19NU0dfUkVTVUxUKFskb3RoZXJfYWdlbnRvYmpzICRvdGhlcl9sYWdlbnRvYmpzICRvdGhlcl90cmFwZF9vYmplY3RzXSkKKyAgCisjCisjIENyZWF0ZSBkaXJlY3Rvcnkgc3RydWN0dXJlIGZvciBidWlsZAorIworaWYgdGVzdCAhIC1kIGluY2x1ZGU7IHRoZW4KKyAgbWtkaXIgaW5jbHVkZQorZmkKK2lmIHRlc3QgISAtZCBpbmNsdWRlL25ldC1zbm1wOyB0aGVuCisgIG1rZGlyIGluY2x1ZGUvbmV0LXNubXAKK2ZpCitpZiB0ZXN0ICEgLWQgaW5jbHVkZS9uZXQtc25tcC9hZ2VudDsgdGhlbgorICBta2RpciBpbmNsdWRlL25ldC1zbm1wL2FnZW50CitmaQoraWYgdGVzdCAhIC1kIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeTsgdGhlbgorICBta2RpciBpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkKK2ZpCitpZiB0ZXN0ICEgLWQgaW5jbHVkZS91Y2Qtc25tcDsgdGhlbgorICBta2RpciBpbmNsdWRlL3VjZC1zbm1wCitmaQorCitpZiB0ZXN0ICEgLWQgc25tcGxpYjsgdGhlbgorICBta2RpciBzbm1wbGliCitmaQoraWYgdGVzdCAhIC1kIHNubXBsaWIvdHJhbnNwb3J0cyA7IHRoZW4KKyAgbWtkaXIgc25tcGxpYi90cmFuc3BvcnRzCitmaQorCisjCisjIERvIHRyYW5zcG9ydCBtb2R1bGUgcHJvY2Vzc2luZy4KKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIGFuZCBjb25maWd1cmluZyB0cmFuc3BvcnQgbW9kdWxlcyB0byB1c2VdKQorCisjIGluY2x1ZGUgdGhlIGFjdHVhbCBjb2RlIGNoZWNraW5nCittNF9pbmNsdWRlKGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMpCisKK0FDX1NVQlNUKHRyYW5zcG9ydF9oZHJfbGlzdCkKK0FDX1NVQlNUKHRyYW5zcG9ydF9zcmNfbGlzdCkKK0FDX1NVQlNUKHRyYW5zcG9ydF9vYmpfbGlzdCkKK0FDX1NVQlNUKHRyYW5zcG9ydF9sb2JqX2xpc3QpCitBQ19TVUJTVCh0cmFuc3BvcnRfZnRvYmpfbGlzdCkKK2ZvciBpIGluICR0cmFuc3BvcnRfZGVmX2xpc3Q7IGRvCisgIEFDX0RFRklORV9VTlFVT1RFRCgkaSkKK2RvbmUKK0FDX01TR19SRVNVTFQoJHRyYW5zcG9ydF9yZXN1bHRfbGlzdC4pCitBQ19NU0dfQ0FDSEVfQUREKE5ldHdvcmsgdHJhbnNwb3J0IHN1cHBvcnQ6ICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QpCisKKyMgY2xlYW51cAorcm0gLWYgbW9kdWxlX3RtcF9oZWFkZXIuaAorCisjCisjIFNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlCisjIAorCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzZWN1cml0eSBtb2R1bGVzIHRvIHVzZV0pCittNF9pbmNsdWRlKGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMpCitBQ19TVUJTVChzZWN1cml0eV9zcmNfbGlzdCkKK0FDX1NVQlNUKHNlY3VyaXR5X2hkcl9saXN0KQorQUNfU1VCU1Qoc2VjdXJpdHlfb2JqX2xpc3QpIAkgCitBQ19TVUJTVChzZWN1cml0eV9sb2JqX2xpc3QpCitBQ19TVUJTVChzZWN1cml0eV9mdG9ial9saXN0KQorQUNfTVNHX1JFU1VMVCgkbmV3X3dpdGhfc2VjdXJpdHkpCitBQ19NU0dfQ0FDSEVfQUREKFNOTVB2MyBTZWN1cml0eSBNb2R1bGVzOiAgICAkbmV3X3dpdGhfc2VjdXJpdHkpCisKKyMKKyMgSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgS1NNIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIHN1cHBvcnQKKyMKKworcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0KK2FscmVhZHlfY2hlY2tlZF9rcmI1PW5vCisKK2ZvciBzZWMgaW4gJG5ld193aXRoX3NlY3VyaXR5CitkbworICBpZiB0ZXN0ICJ4JHNlYyIgPSAieGtzbSI7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4eWVzIiA9ICJ4JGFscmVhZHlfY2hlY2tlZF9rcmI1IjsgdGhlbgorICAgICAgY29udGludWUKKyAgICBlbHNlCisgICAgICBhbHJlYWR5X2NoZWNrZWRfa3JiNT15ZXMKKyAgICBmaQorICBmaQorCisgIGlmIHRlc3QgeCRzZWMgIT0geGtzbTsgdGhlbgorICAgIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9IiRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5ICRzZWMiCisgIGVsc2UKKyAgICBpZiB0ZXN0IG5vID0gJHRyeWtyYjU7IHRoZW4KKyAgICAgIEFDX01TR19OT1RJQ0UoW2NvbmZpZ3VyZWQgbm90IHRvIHVzZSBrcmI1LiBkaXNhYmxpbmcga3NtXSkKKyAgICAgIGNvbnRpbnVlCisgICAgZmkKKworICAgIEFDX1BBVEhfUFJPRyhba3JiNV9jb25maWddLGtyYjUtY29uZmlnLFtub10sJGtyYjVwYXRoL2JpbjokUEFUSCkKKworICAgIGlmIHRlc3Qgbm8gIT0gJGtyYjVfY29uZmlnOyB0aGVuCisgICAgICBDUFBGTEFHUz0iJENQUEZMQUdTIGAka3JiNV9jb25maWcgLS1jZmxhZ3NgIgorICAgICAgTElCUz0iJExJQlMgYCRrcmI1X2NvbmZpZyAtLWxpYnNgIgorICAgIGVsaWYgdGVzdCAka3JiNXBhdGggIT0gbm87IHRoZW4KKyAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgka3JiNXBhdGgpCisgICAgZWxzZQorICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKC91c3Iva2VyYmVyb3MpCisgICAgZmkKKworICAgIEFDX01TR19DSEVDS0lORyhbZm9yIGtyYjVdKQorICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9oYXZlX2tyYjUsCisgICAgICBBQ19DSEVDS19MSUIoa3JiNSwga3JiNV9pbml0X2NvbnRleHQsCisJYWNfY3ZfaGF2ZV9rcmI1PXllcywgYWNfY3ZfaGF2ZV9rcmI1PW5vCisgICAgICApCisgICAgKQorCisgICAgaWYgdGVzdCAkYWNfY3ZfaGF2ZV9rcmI1ID0gbm87IHRoZW4KKyAgICAgIGlmIHRlc3QgIngkYXNrZWRrcmI1IiA9ICJ4eWVzIjsgdGhlbgorCUFDX01TR19FUlJPUihBc2tlZCB0byB1c2Uga3JiNSBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikKKyAgICAgIGZpCisgICAgICBBQ19NU0dfUkVTVUxUKG5vLiBkaXNhYmxpbmcga3NtKQorICAgICAgY29udGludWUKKyAgICBmaQorICAgICAgCisgICAgQUNfTVNHX1JFU1VMVCh5ZXMpCisgICAgcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eT0iJHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHkga3NtIgorCisgICAgQUNfTVNHX0NIRUNLSU5HKFtbZm9yIGhlaW1kYWxdXSkKKyAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfaGVpbWRhbCwKKyAgICBbQUNfVFJZX0NPTVBJTEUoCisgICAgICBbI2luY2x1ZGUgPGtyYjUuaD5dLAorICAgICAgW2NvbnN0IGNoYXIgKnYgPSBoZWltZGFsX3ZlcnNpb247XSwKKyAgICAgIGFjX2N2X2hlaW1kYWw9eWVzLAorICAgICAgYWNfY3ZfaGVpbWRhbD1ubworICAgICldKQorICAgIEFDX01TR19SRVNVTFQoJGFjX2N2X2hlaW1kYWwpCisgICAgaWYgdGVzdCAkYWNfY3ZfaGVpbWRhbCA9IHllczsgdGhlbgorICAgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0tFUkJFUk9TX0hFSU1EQUwsIDEsCisgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB5b3UncmUgdXNpbmcgSGVpbWRhbCBLZXJiZXJvc10pCisgICAgICBpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCisJTElCUz0iJExJQlMgLWxrcmI1IC1sYXNuMSAtbGNvbV9lcnIgLWxyb2tlbiIKKyAgICAgIGZpCisgICAgZWxpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCisJTElCUz0iJExJQlMgLWxrcmI1IC1sY29tX2VyciIKKyAgICBmaQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt0byBzZWUgd2hpY2ggY3J5cHRvIEFQSSB3ZSBuZWVkIHRvIHVzZV0pCisgICAgQUNfQ0FDSEVfVkFMKGFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVCwKKyAgICAgIEFDX0NIRUNLX0xJQihrNWNyeXB0bywga3JiNV9pbml0X2NvbnRleHQsCisJYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPXllcywgYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPW5vCisgICAgICApCisgICAgKQorCisgICAgaWYgdGVzdCB5ZXMgPSAkYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUOyB0aGVuCisgICAgICBBQ19NU0dfUkVTVUxUKG5ldyBNSVQgY3J5cHRvIEFQSSkKKyAgICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQsIDEsCisgICAgICAgIFtEZWZpbmUgdGhpcyBpZiB3ZSdyZSB1c2luZyB0aGUgbmV3IE1JVCBjcnlwdG8gQVBJXSkKKyAgICAgIGlmIHRlc3Qgbm8gPSAka3JiNV9jb25maWc7IHRoZW4KKwlMSUJTPSIkTElCUyAtbGs1Y3J5cHRvIgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKG9sZCBNSVQgY3J5cHRvIEFQSSkKKyAgICBmaQorICAgIEFDX0NIRUNLX0ZVTkNTKFtrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXldKQorICBmaQorZG9uZQorCituZXdfd2l0aF9zZWN1cml0eT0kcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eQorCisjCisjIERldGVjdCBsbV9zZW5zb3JzIHZlcnNpb24KKyMKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3NlbnNvcnNfc2Vuc29yc19oIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX0NIRUNLX0RFQ0xTKFtzZW5zb3JzX2dldF9hbGxfc3ViZmVhdHVyZXNdLAorICAgICAgICBbQUNfREVGSU5FKE5FVFNOTVBfVVNFX1NFTlNPUlNfVjMsIDEsCisgICAgICAgICAgICBbRGVmaW5lIHRoaXMgaWYgeW91IGhhdmUgbG1fc2Vuc29ycyB2MyBvciBsYXRlcl0pXSwsCisgICAgICAgIFtbI2luY2x1ZGUgPHNlbnNvcnMvc2Vuc29ycy5oPl1dKQorZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyM2NhN2QKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc19zZWN1cml0eV9tb2R1bGVzCkBAIC0wLDAgKzEsNzAgQEAKKyMgLSotIHNoIC0qLQorc2VjdXJpdHlfZGVmX2xpc3Q9InVzbSIKK3NlY3VyaXR5X3NyY19saXN0PSIiCitzZWN1cml0eV9vYmpfbGlzdD0iIgorc2VjdXJpdHlfbG9ial9saXN0PSIiCitzZWN1cml0eV9mdG9ial9saXN0PSIiCitzZWN1cml0eV9tb2RfbGlzdD0iICIKKworbmV3X3dpdGhfc2VjdXJpdHk9CituZXdfd2l0aF9vdXRfc2VjdXJpdHk9YGVjaG8gJHdpdGhfb3V0X3NlY3VyaXR5X21vZHVsZXMgfCB0ciAsICcgJ2AKKworIyBBc3NpZ24gYWRkaXRpb25hbCBzZWN1cml0eSBtb2R1bGVzCitmb3IgaSBpbiBgZWNobyAkd2l0aF9zZWN1cml0eV9tb2R1bGVzIHwgdHIgLCAnICdgOyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX291dF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCisgICAgZWNobworICAgIEFDX01TR19FUlJPUihbc2VjdXJpdHkgbW9kdWxlIGNvbmZsaWN0IC0gJGkgYm90aCBpbmNsdWRlZCBhbmQgZXhjbHVkZWRdKQorICBlbGlmIGVjaG8gIiAkbmV3X3dpdGhfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICA6ICMgRG91YmxlIGRlZmluZSwgaWdub3JlCisgIGVsc2UKKyAgICBuZXdfd2l0aF9zZWN1cml0eT0iJG5ld193aXRoX3NlY3VyaXR5ICRpIgorICBmaQorZG9uZQorCisjIEFkZCBkZWZhdWx0IHNlY3VyaXR5IG1vZHVsZXMKK2ZvciBpIGluICRzZWN1cml0eV9kZWZfbGlzdDsgZG8KKyAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfc2VjdXJpdHkgIiB8ICRHUkVQICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgorICAgIDogIyBFeGNsdWRlZCwgaWdub3JlCisgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9zZWN1cml0eSAiIHwgJEdSRVAgIiAkaSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgIDogIyBEb3VibGUgZGVmaW5lLCBpZ25vcmUKKyAgZWxzZQorICAgIG5ld193aXRoX3NlY3VyaXR5PSIkbmV3X3dpdGhfc2VjdXJpdHkgJGkiCisgIGZpCitkb25lCisKKyMgR2VuZXJhdGUgb3V0cHV0IGZpbGVzCis6ICR7c2VjdXJpdHlfaW5pdF9maWxlOj0nc25tcGxpYi9zbm1wc21faW5pdC5oJ30KKzogJHtzZWN1cml0eV9zaHV0ZG93bl9maWxlOj0nc25tcGxpYi9zbm1wc21fc2h1dGRvd24uaCd9Cis6ICR7c2VjdXJpdHlfaW5jbF9maWxlOj0naW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oJ30KKworZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X2luaXRfZmlsZQorZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJHNlY3VyaXR5X3NodXRkb3duX2ZpbGUKK2VjaG8gIi8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBjb25maWd1cmUuICBEbyBub3QgbW9kaWZ5IGJ5IGhhbmQuICovIiA+ICRzZWN1cml0eV9pbmNsX2ZpbGUKKworZm9yIGkgaW4gJG5ld193aXRoX3NlY3VyaXR5OyBkbworICBjZmlsZT0ic25tcCIkaSIuYyIKKyAgaGZpbGU9InNubXAiJGkiLmgiCisKKyAgIyBtYWtlIHN1cmUgc3VwcG9ydCBleGlzdHMgZm9yIGl0CisgIGlmIHRlc3QgLWYgJHNyY2RpciIvc25tcGxpYi8iJGNmaWxlIC1hIC1mICRzcmNkaXIiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8iJGhmaWxlOyB0aGVuCisgICAgOgorICBlbHNlCisgICAgZWNobworICAgIEFDX01TR19FUlJPUihObyBzdWNoIHNlY3VyaXR5IG1vZHVsZTogJGkgLyAkY2ZpbGUgLyAkaGZpbGUpCisgIGZpCisKKyAgIyBkZWZpbmUgYSBidW5jaCBvZiBzdHVmZiB0byBlbmFibGUgaXQKKyAgc2VjdXJpdHlfbW9kX2xpc3Q9IiR7c2VjdXJpdHlfbW9kX2xpc3R9ICRpIgorICBzZWN1cml0eV9zcmNfbGlzdD0iJHNlY3VyaXR5X3NyY19saXN0ICRjZmlsZSIKKyAgc2VjdXJpdHlfc3JjX2xpc3Q9IiRzZWN1cml0eV9zcmNfbGlzdCAkY2ZpbGUiCisgIHNlY3VyaXR5X2hkcl9saXN0PSIkc2VjdXJpdHlfaGRyX2xpc3QgJGhmaWxlIgorICBzZWN1cml0eV9vYmpfbGlzdD0iJHNlY3VyaXR5X29ial9saXN0IHNubXAiJGkiLm8iCisgIHNlY3VyaXR5X2xvYmpfbGlzdD0iJHNlY3VyaXR5X2xvYmpfbGlzdCBzbm1wIiRpIi5sbyIKKyAgc2VjdXJpdHlfZnRvYmpfbGlzdD0iJHNlY3VyaXR5X2Z0b2JqX2xpc3Qgc25tcCIkaSIuZnQiCisgIGVjaG8gImluaXRfIiRpIigpOyIgPj4gJHNlY3VyaXR5X2luaXRfZmlsZQorICBlY2hvICJzaHV0ZG93bl8iJGkiKCk7IiA+PiAkc2VjdXJpdHlfc2h1dGRvd25fZmlsZQorICBlY2hvICIjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS8kaGZpbGU+IiA+PiAkc2VjdXJpdHlfaW5jbF9maWxlCisgIGRlZl9uYW1lPSJBU19UUl9DUFAoW05FVFNOTVBfU0VDTU9EXyRpXSkiCisgIEFDX0RFRklORV9VTlFVT1RFRCgkZGVmX25hbWUpCitkb25lCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMGI5NjAKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfbW9kdWxlc190cmFuc3BvcnRzCkBAIC0wLDAgKzEsMTM3IEBACisjIC0qLSBzaCAtKi0KK3RyYW5zcG9ydF9zcmNfbGlzdD0iIgordHJhbnNwb3J0X2hkcl9saXN0PSIiCit0cmFuc3BvcnRfZGVmX2xpc3Q9IiIKK3RyYW5zcG9ydF9yZXN1bHRfbGlzdD0iIgordHJhbnNwb3J0X2FkZF9saXN0PSIiCituZXdfd2l0aF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF90cmFuc3BvcnRzIHwgJFNFRCAncy8sLyAvZzsnYAorbmV3X3dpdGhfb3V0X3RyYW5zcG9ydF9saXN0PWBlY2hvICR3aXRoX291dF90cmFuc3BvcnRzIHwgJFNFRCAncy8sLyAvZzsnYAorCisjIHNldCB1cCB0aGUgQ1BQIGNvbW1hbmQKK01PRFVMRUNQUD0iJENQUCAkUEFSVElBTFRBUkdFVEZMQUdTIC1JJHtzcmNkaXJ9IC1JJHtzcmNkaXJ9L2luY2x1ZGUiCisKKyMKKyMgQWRkIHRoZSBkZWZhdWx0IHRyYW5zcG9ydHMgdG8gdGhlIGxpc3QKKyMKK2lmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuIAorICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIEFsaWFzIENhbGxiYWNrIgorZWxzZQorICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIEFsaWFzIFVuaXggQ2FsbGJhY2siCitmaQoraWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KKyAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQSVB2NiBUQ1BJUHY2ICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0IgorZmkKK2ZvciBpIGluICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0OyBkbworICBpZiBlY2hvICIgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0ICIgfCAkR1JFUCAiICRpICIgPi9kZXYvbnVsbDsgdGhlbgorICAgIDoKKyAgZWxzZQorICAgIHRyYW5zcG9ydF9hZGRfbGlzdD0iJGkgJHRyYW5zcG9ydF9hZGRfbGlzdCIKKyAgZmkKK2RvbmUKK25ld190cmFuc3BvcnRfbGlzdD0iJHRyYW5zcG9ydF9hZGRfbGlzdCAkbmV3X3dpdGhfdHJhbnNwb3J0X2xpc3QiCisKK2lmIHRlc3QgIngkY3Rvcl9oZWFkZXIiID0gIngiIDsgdGhlbgorICAgY3Rvcl9oZWFkZXI9InNubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oIgorZmkKKworZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJGN0b3JfaGVhZGVyCit3aGlsZSB0ZXN0ICJ4JG5ld190cmFuc3BvcnRfbGlzdCIgIT0gIngiOyBkbworICBmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0PSIiCisgIGZvciBpIGluICRuZXdfdHJhbnNwb3J0X2xpc3Q7IGRvCisgICAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3QgIiB8ICRHUkVQICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCisgICAgICB0cnVlCisgICAgZWxzZQorICAgICAgaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgIT0gInh5ZXMiOyB0aGVuCisgICAgICAgICAgaWYgdGVzdCAieCRpIiA9ICJ4VURQSVB2NiIgLW8gIngkaSIgPSAieFRDUElQdjYiOyB0aGVuCisgICAgICAgICAgICAgIEFDX01TR19FUlJPUihJUHY2IHRyYW5zcG9ydHMgbm90IGF2YWlsYWJsZSBpZiBJUHY2IHN1cHBvcnQgaXMgbm90IGVuYWJsZWQpCisgICAgICAgICAgZmkKKyAgICAgIGZpCisgICAgICB0cmFuc3BvcnRfc3JjPSJ0cmFuc3BvcnRzL3NubXAiJGkiRG9tYWluLmMiCisgICAgICB0cmFuc3BvcnRfaGRyPSJzbm1wIiRpIkRvbWFpbi5oIgorICAgICAgcmVsX3RyYW5zcG9ydF9zcmM9InNubXBsaWIvIiR0cmFuc3BvcnRfc3JjCisgICAgICByZWxfdHJhbnNwb3J0X2hkcj0iaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5LyIkdHJhbnNwb3J0X2hkcgorICAgICAgbGNfaT1gZWNobyAkaSB8IHRyICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWicgJ2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6J2AKKyAgICAgIGN0b3JfZm49Im5ldHNubXBfIiRsY19pIl9jdG9yIgorICAgICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMiOyB0aGVuCisgICAgICAgIHRyYW5zcG9ydF9yZXN1bHRfbGlzdD0iJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAkaSIKKyAgICAgICAgdHJhbnNwb3J0X3NyY19saXN0PSIkdHJhbnNwb3J0X3NyYyAkdHJhbnNwb3J0X3NyY19saXN0IgorICAgICAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X2hkciI7IHRoZW4KKyAgICAgICAgICB0cmFuc3BvcnRfaGRyX2xpc3Q9IiR0cmFuc3BvcnRfaGRyICR0cmFuc3BvcnRfaGRyX2xpc3QiCisgICAgICAgIGZpCisgICAgICAgIHRyYW5zcG9ydF9kZWY9YGVjaG8gJGkgfCAkU0VEICd5L2FiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6L0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaLydgCisgICAgICAgIHRyYW5zcG9ydF9kZWZfbGlzdD0iTkVUU05NUF9UUkFOU1BPUlRfIiR0cmFuc3BvcnRfZGVmIl9ET01BSU4gJHRyYW5zcG9ydF9kZWZfbGlzdCIKKyAgICAgIGVsc2UKKyAgICAgICAgZWNobworICAgICAgICBBQ19NU0dfRVJST1IoQ2Fubm90IGZpbmQgZmlsZSAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyB0byBzdXBwb3J0IFNOTVAgdHJhbnNwb3J0IGRvbWFpbiAkaS4pCisgICAgICBmaQorCisgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAjIGJ1aWxkIGEgcHNldWRvIGluY2x1ZGUgaGVhZGVyIHRoYXQgaW5jbHVkZXMgY3VycmVudCBjb25maWcgYW5kCisgICAgICAjIHN5c3RlbSBzeW1ib2xzOgorICAgICAgcm0gLWYgY29uZnRlc3QuJGFjX2V4dCBtb2R1bGVfdG1wX2hlYWRlci5oCisgICAgICBBQ19MQU5HX0NPTkZURVNUKFtBQ19MQU5HX1NPVVJDRShbWworI2luY2x1ZGUgTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFCisjdW5kZWYgTkVUU05NUF9NSU5JTUFMX0NPREUKKyNkZWZpbmUgTkVUX1NOTVBfQ09ORklHX0gKKyN1bmRlZiBjb25maWdfcmVxdWlyZQorI2RlZmluZSBjb25maWdfcmVxdWlyZShmb28pIGNvbmZpZ19jaGVja2l0X3JlcXVpcmUoZm9vKQorI3VuZGVmIGNvbmZpZ19lcnJvcgorI2RlZmluZSBjb25maWdfZXJyb3IoZm9vKSBjb25maWdfY2hlY2tpdF9lcnJvcihmb28pCisjaW5jbHVkZSAiJHJlbF90cmFuc3BvcnRfaGRyIl1dKV0pCisgICAgICBtdiBjb25mdGVzdC4kYWNfZXh0IG1vZHVsZV90bXBfaGVhZGVyLmgKKworICAgICAgIworICAgICAgIyBjaGVjayBmb3IgZGVwZW5kZW5jaWVzIHVzaW5nIGNvbmZpZ19yZXF1aXJlKCkgbWFjcm8KKyAgICAgICMKKyAgICAgIHN1Yl9saXN0PWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCAkR1JFUCBjb25maWdfY2hlY2tpdF9yZXF1aXJlIHwgJFNFRCAncy8uKmNvbmZpZ19jaGVja2l0X3JlcXVpcmUgKiggKlwoLipcKSAqKS4qL1wxLydgCisgICAgICBpZiB0ZXN0ICJ4JHN1Yl9saXN0IiAhPSAieCIgOyB0aGVuCisgICAgICAgIGZvciBqIGluICRzdWJfbGlzdCA7IGRvCisJICBpZiBlY2hvICIgJGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3QgJG5ld190cmFuc3BvcnRfbGlzdCAiIHwgJEdSRVAgIiAkaiAiID4gL2Rldi9udWxsIDsgdGhlbgorCSAgICA6CisJICBlbHNlCisgICAgICAgICAgICBmdXR1cmVfbmV3X3RyYW5zcG9ydF9saXN0PSIkZnV0dXJlX25ld190cmFuc3BvcnRfbGlzdCAkaiIKKwkgIGZpCisgICAgICAgIGRvbmUKKyAgICAgIGZpCisKKyAgICAgICMKKyAgICAgICMgY2hlY2sgZm9yIGVycm9ycyB1c2luZyBjb25maWdfZXJyb3IoKSBtYWNybworICAgICAgIworICAgICAgZXJyb3JfbGlzdD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgJEdSRVAgY29uZmlnX2NoZWNraXRfZXJyb3IgfCAkU0VEICdzLy4qY29uZmlnX2NoZWNraXRfZXJyb3IoXCguKlwpKS4qL1wxL2cnYAorICAgICAgaWYgdGVzdCAieCRlcnJvcl9saXN0IiAhPSAieCIgOyB0aGVuCisgICAgICAgIGVjaG8gIiIKKyAgICAgICAgQUNfTVNHX0VSUk9SKCRlcnJvcl9saXN0KQorICAgICAgZmkKKworICAgICAgIworICAgICAgIyBDaGVjayBmb3IgbmVlZGVkIGNvbnN0cnVjdG9yIGluaXRpYWxpemF0aW9uIHJvdXRpbmVzIHRvIGNhbGwKKyAgICAgICMKKyAgICAgIGZvdW5kPWBncmVwICRjdG9yX2ZuICRzcmNkaXIvJHJlbF90cmFuc3BvcnRfc3JjYAorICAgICAgaWYgZ3JlcCAkY3Rvcl9mbiAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyA+IC9kZXYvbnVsbCA7IHRoZW4KKwkjIHdlIGFkZCB0aGVtIGRvd24gYmVsb3cgaW5zdGVhZCBvZiBoZXJlIHRvIG1ha2Ugc3VyZQorCSMgY29uZmlnX3JlcXVpcmUgZGVwZW5kZW5jeSBjb25zdHJ1Y3RvcnMgZ2V0IGNhbGxlZCBmaXJzdC4KKwl0cl9pbml0X2xpc3Q9IiRjdG9yX2ZuICR0cl9pbml0X2xpc3QiCisgICAgICBmaQorICAgIGZpCisgIGRvbmUgIyBmb3IgZWFjaCBuZXcgdHJhbnNwb3J0CisgIG5ld190cmFuc3BvcnRfbGlzdD0iJGZ1dHVyZV9uZXdfdHJhbnNwb3J0X2xpc3QiCitkb25lICMgd2hpbGUgbmV3IHRyYW5zcG9ydHMgZXhpc3QKK3RyYW5zcG9ydF9vYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8ICRTRUQgJ3MvXC5jL1wuby9nJ2AKK3RyYW5zcG9ydF9sb2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCAkU0VEICdzL1wuYy9cLmxvL2cnYAordHJhbnNwb3J0X2Z0b2JqX2xpc3Q9YGVjaG8gIiAkdHJhbnNwb3J0X3NyY19saXN0ICIgfCAkU0VEICdzL1wuYy9cLmZ0L2cnYAorZm9yIGkgaW4gJHRyX2luaXRfbGlzdCA7IGRvCisgICBlY2hvICIkaSgpOyIgPj4gJGN0b3JfaGVhZGVyCitkb25lCisKKyMjIHdpbjMyIHBsYXRmb3JtcyByZXF1aXJlIGluZXRfbnRvcCBldGMuCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgIGlmIGVjaG8gIiR0cmFuc3BvcnRfZGVmX2xpc3QiIHwgJEdSRVAgIklQVjYiID4vZGV2L251bGw7IHRoZW4KKyAgICB0cmFuc3BvcnRfb2JqX2xpc3Q9IiR0cmFuc3BvcnRfb2JqX2xpc3QgaW5ldF9udG9wLm8gaW5ldF9wdG9uLm8iCisgICAgdHJhbnNwb3J0X2xvYmpfbGlzdD0iJHRyYW5zcG9ydF9sb2JqX2xpc3QgaW5ldF9udG9wLmxvIGluZXRfcHRvbi5sbyIKKyAgICB0cmFuc3BvcnRfZnRvYmpfbGlzdD0iJHRyYW5zcG9ydF9mdG9ial9saXN0IGluZXRfbnRvcC5mdCBpbmV0X3B0b24uZnQiCisgIGZpCitmaQorCitpZiB0ZXN0ICJ4JHRyYW5zcG9ydF9yZXN1bHRfbGlzdCIgPSB4IDsgdGhlbgorICAgQUNfTVNHX0VSUk9SKFtObyB0cmFuc3BvcnRzIGNvbmZpZ3VyZWQsIGF0IGxlYXN0IG9uZSBtdXN0IGJlIHByb3ZpZGVkXSkKK2ZpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfZnVuY3Rpb25zIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzUzODViCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2Z1bmN0aW9ucwpAQCAtMCwwICsxLDMyNCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBsaWJyYXJ5IGZ1bmN0aW9ucy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFN0YW5kYXJkIGNoZWNrczoKKyMjCitBQ19GVU5DX0FMTE9DQSAgICAgICAgICAjICBhbGxvY2EoKQorQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKKworaWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXMgLWEgIiR7YWNfY3ZfZnVuY19tZW1jbXBfd29ya2luZytzZXR9IiAhPSBzZXQKK3RoZW4KKyAgIyBDcm9zcy1jb21waWxpbmcgYW5kIGFjX2N2X2Z1bmNfbWVtY21wX3dvcmtpbmcgaGFzIG5vdCBiZWVuIHNldCAtIGFzc3VtZQorICAjIHRoYXQgbWVtY21wKCkgaXMgYXZhaWxhYmxlLgorICBhY19jdl9mdW5jX21lbWNtcF93b3JraW5nPXllcworZWxzZQorICAjIE5hdGl2ZSBjb21waWxhdGlvbiAtIHRlc3QgZm9yIHRoZSBhdmFpbGFiaWxpdHkgb2YgbWVtY21wKCkuCisgIEFDX0ZVTkNfTUVNQ01QCitmaQorCitBQ19UWVBFX1NJR05BTAorCisjIworIyAgIFN0YW5kLWFsb25lIGZ1bmN0aW9uIGNoZWNrczoKKyMjCisjICBDb3JlOgorQUNfQ0hFQ0tfRlVOQ1MoW2xyYW5kNDggICAgICAgICByYW5kICAgICAgICAgIHJhbmRvbSAgICBdIGRubAorICAgICAgICAgICAgICAgW3NpZ25hbCAgICAgICAgICBzaWdzZXQgICAgICAgICAgICAgICAgICBdICkKKworIyAgTGlicmFyeToKK0FDX0NIRUNLX0ZVTkNTKFtjbG9zZWRpciAgICAgICAgZmdldGNfdW5sb2NrZWQgIGZsb2NrZmlsZSAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtmb3JrICAgICAgICAgICAgZnVubG9ja2ZpbGUgICAgIGdldGlwbm9kZWJ5bmFtZSAgXSBkbmwKKyAgICAgICAgICAgICAgIFtnZXR0aW1lb2ZkYXkgICAgaWZfbmFtZXRvaW5kZXggIG1rc3RlbXAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtvcGVuZGlyICAgICAgICAgcmVhZGRpciAgICAgICAgIHJlZ2NvbXAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzZXRlbnYgICAgICAgICAgc2V0aXRpbWVyICAgICAgIHNldGxvY2FsZSAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzZXRzaWQgICAgICAgICAgc25wcmludGYgICAgICAgIHN0cmNhc2VzdHIgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzdHJkdXAgICAgICAgICAgc3RyZXJyb3IgICAgICAgIHN0cm5jYXNlY21wICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzeXNjb25mICAgICAgICAgdGltZXMgICAgICAgICAgIHZzbnByaW50ZiAgICAgICAgXSApCisKKyMgSVB2NC9JUHY2IGZ1bmN0aW9uIGNoZWNrcy4gQUNfQ0hFQ0tfRlVOQygpIGNhbid0IGZpbmQgdGhlc2Ugb24gTWluR1cKKyMgc2luY2UgdGhlc2UgZnVuY3Rpb25zIGhhdmUgdGhlIF9fY2RlY2wgY2FsbGluZyBjb252ZW50aW9uIG9uIE1pbkdXLgorY2FzZSB4JHRhcmdldF9vcyBpbgorICB4bWluZ3cqKQorICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx3czJ0Y3BpcC5oPl0sCisgICAgWyBnYWlfc3RyZXJyb3IoMCk7IF0pXSwKKyAgICBbIGFjX2N2X2Z1bmNfZ2FpX3N0cmVycm9yPXllcworICAgICAgQVNfRUNITyAiI2RlZmluZSBIQVZFX0dBSV9TVFJFUlJPUiAxIiA+PmNvbmZkZWZzLmgKKyAgICBdLCBbIF0pCisKKyAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8d3MydGNwaXAuaD5dLAorICAgIFsgZ2V0YWRkcmluZm8oTlVMTCwgTlVMTCwgTlVMTCwgTlVMTCk7IF0pXSwKKyAgICBbIGFjX2N2X2Z1bmNfZ2V0YWRkcmluZm89eWVzCisgICAgICBBU19FQ0hPICIjZGVmaW5lIEhBVkVfR0VUQUREUklORk8gMSIgPj5jb25mZGVmcy5oCisgICAgXSwgWyBdKQorCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHdpbnNvY2syLmg+XSwKKyAgICBbIGdldGhvc3RieW5hbWUoTlVMTCk7IF0pXSwKKyAgICBbIGFjX2N2X2Z1bmNfZ2V0aG9zdGJ5bmFtZT15ZXMKKyAgICAgIEFTX0VDSE8gIiNkZWZpbmUgSEFWRV9HRVRIT1NUQllOQU1FIDEiID4+Y29uZmRlZnMuaAorICAgIF0sIFsgXSkKKworICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDx3aW5zb2NrMi5oPl0sCisgICAgWyBnZXRob3N0YnlhZGRyKE5VTEwpOyBdKV0sCisgICAgWyBhY19jdl9mdW5jX2dldGhvc3RhZGRyPXllcworICAgICAgQVNfRUNITyAiI2RlZmluZSBIQVZFX0dFVEhPU1RCWUFERFIgMSIgPj5jb25mZGVmcy5oCisgICAgXSwgWyBdKQorCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbI2luY2x1ZGUgPHdpbnNvY2syLmg+XSwKKyAgICBbIGdldGhvc3RuYW1lKE5VTEwsIDApOyBdKV0sCisgICAgWyBhY19jdl9mdW5jX2dldGhvc3RuYW1lPXllcworICAgICAgQVNfRUNITyAiI2RlZmluZSBIQVZFX0dFVEhPU1ROQU1FIDEiID4+Y29uZmRlZnMuaAorICAgIF0sIFsgXSkKKyAgICA7OworCisgICopCisgICAgQUNfQ0hFQ0tfRlVOQ1MoW2dhaV9zdHJlcnJvciBnZXRhZGRyaW5mbyBnZXRob3N0YnluYW1lIGdldGhvc3RieW5hbWUyIGdldGhvc3RuYW1lIGdldGhvc3RieWFkZHJdKQorICAgIDs7Citlc2FjCisKK0FDX0NPTkZJR19MSUJPQkpfRElSKFtzbm1wbGliXSkKKworQUNfUkVQTEFDRV9GVU5DUyhbZ2V0b3B0ICAgICAgICBpbmV0X250b3AgICAgIGluZXRfcHRvbiAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N0cmxjYXQgICAgICAgc3RybGNweSAgICAgICBzdHJ0b2tfciAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzdHJ0b2wgICAgICAgIHN0cnRvdWwgICAgICAgc3RydG91bGwgICAgICAgICBdICkKKworIyAgQWdlbnQ6CitBQ19DSEVDS19GVU5DUyhbY2dldG5leHQgICAgICAgIGNob3duICAgICAgICAgIGV4ZWN2ICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2dhaV9zdHJlcnJvciAgICAgICAgICAgICAgICAgICBnZXRncm5hbSAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtnZXRob3N0bmFtZSAgICAgZ2V0bG9hZGF2ZyAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbZ2V0cGlkICAgICAgICAgIGdldHB3bmFtICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW2hhc21udG9wdCAgICAgICBpbml0Z3JvdXBzICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtpZl9uYW1laW5kZXggICAgaWZfaW5kZXh0b25hbWUgaWZfbmFtZXRvaW5kZXggIF0gZG5sCisgICAgICAgICAgICAgICBbbG9jYWx0aW1lX3IgICAgIG1rc3RlbXAgICAgICAgIG1rdGltZSAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3BvbGwgICAgICAgICAgICByZWdjb21wICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzZXRnaWQgICAgICAgICAgc2V0Z3JvdXBzICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2V0bW50ZW50ICAgICAgIHNldHVpZCAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3NpZ2FjdGlvbiAgICAgICBzaWdibG9jayAgICAgIHNpZ2hvbGQgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtzaWdwcm9jbWFzayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc3RhdGZzICAgICAgICAgIHN0YXR2ZnMgICAgICAgc3RpbWUgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3N0cm5jYXNlY21wICAgICBzeXN0ZW0gICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFt1bmFtZSAgICAgICAgICAgdXNsZWVwICAgICAgICAgICAgICAgICAgICAgICAgIF0gKQorCisjICBBcHBzOgorQUNfQ0hFQ0tfRlVOQ1MoW2dldGR0YWJsZXNpemUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtnZXRncm5hbSAgICAgICAgZ2V0cGlkICAgICAgICBnZXRwd25hbSAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2V0Z2lkICAgICAgICAgIHNldGdyb3VwcyAgICAgc2V0dWlkICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgW3RjZ2V0YXR0ciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSApCisKKyMgIE5vdC1Vc2VkOgorQUNfQ0hFQ0tfRlVOQ1MoW2lmX2ZyZWVuYW1laW5kZXggICAgICAgICAgICAgIGdldHBhZ2VzaXplICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgIFtsc2VlazY0ICAgICAgICAgcHJlYWQ2NCAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICBbc2VsZWN0ICAgICAgICAgIHNpZ2Fscm0gICAgICAgc29ja2V0ICAgICAgICAgICBdICkKKworCisjIworIyAgIE1vcmUgY29tcGxleCBmdW5jdGlvbiBjaGVja3M6CisjICAgICAgICAgICAoQWdlbnQpCisjIworCisjICAgICAgIHJwbUdldFBhdGggY2hlY2sgbmVlZHMgY2xlYW4gTElCUyBlbnZpcm9ubWVudCAgIChMaW51eCkKKyMKK2lmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iOyB0aGVuCisgICAgT0xETElCUz0kTElCUworICAgIExJQlM9JExNSUJMSUJTCisgICAgQUNfQ0hFQ0tfRlVOQ1MocnBtR2V0UGF0aCkKKyAgICBMSUJTPSRPTERMSUJTCitmaQorCisjICAgICAgIHN0YXRmcyggY2hhciAqLCBzdHJ1Y3QgZnNfZGF0YSogKSAgICAgICAgICAgICAgIChVbHRyaXgpCisjCitBQ19NU0dfQ0hFQ0tJTkcoW1tmb3IgdHdvLWFyZ3VtZW50IHN0YXRmcyB3aXRoIHN0cnVjdCBmc19kYXRhIChVbHRyaXgpXV0pCitBQ19DQUNIRV9WQUwoCisgICAgZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSwKKyAgICBbQUNfUlVOX0lGRUxTRShbQUNfTEFOR19TT1VSQ0UoW1sKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19GU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL2ZzX3R5cGVzLmg+CisjZW5kaWYKK21haW4gKCkKK3sKK3N0cnVjdCBmc19kYXRhIGZzZDsKKy8qIFVsdHJpeCdzIHN0YXRmcyByZXR1cm5zIDEgZm9yIHN1Y2Nlc3MsCisgICAwIGZvciBub3QgbW91bnRlZCwgLTEgZm9yIGZhaWx1cmUuICAqLworZXhpdCAoc3RhdGZzICgiLiIsICZmc2QpICE9IDEpOworfV1dKV0sCisgICAgW2Z1X2N2X3N5c19zdGF0X2ZzX2RhdGE9eWVzXSwKKyAgICBbZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ub10sCisgICAgW2Z1X2N2X3N5c19zdGF0X2ZzX2RhdGE9bm9dKV0pCitBQ19NU0dfUkVTVUxUKCRmdV9jdl9zeXNfc3RhdF9mc19kYXRhKQoraWYgdGVzdCAkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSA9IHllczsgdGhlbgorICAgIEFDX0RFRklORShTVEFUX1NUQVRGU19GU19EQVRBLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHN0YXRmcyB0YWtlcyAyIGFyZ3MgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzCisgICAgICAgICB0eXBlIHN0cnVjdCBmc19kYXRhLiBAPDpAVWx0cml4QDo+QF0pCitmaQorCisKKyMjCisjICAgT3RoZXIgZnVuY3Rpb24tcmVsYXRlZCBjaGVja3M6CisjICAgICAgICAgICAoZ2VuZXJhbCBidWlsZCkKKyMjCisKKyMgICAgICAgSG93IHRvIGdldCB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbgorIworQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBnZXQgdGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgZnVuY3Rpb25dLAorICAgICAgICAgICAgICAgW25ldHNubXBfY3ZfX2Z1bmNfX25hbWVdLFsKKyAgICBuZXRzbm1wX2N2X19mdW5jX19uYW1lPW5vCisgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oLFtbY29uc3QgY2hhciogY3AgPSBfX2Z1bmNfXztdXSldLAorICAgICAgICBbbmV0c25tcF9jdl9fZnVuY19fbmFtZT1fX2Z1bmNfX10pCisgICAgaWYgdGVzdCAiJG5ldHNubXBfY3ZfX2Z1bmNfX25hbWUiID0gbm8gOyB0aGVuCisgICAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgsW1tjb25zdCBjaGFyKiBjcCA9IF9fRlVOQ1RJT05fXztdXSldLAorICAgICAgICBbbmV0c25tcF9jdl9fZnVuY19fbmFtZT1fX0ZVTkNUSU9OX19dKQorICAgIGZpXSkKK2lmIHRlc3QgIiRuZXRzbm1wX2N2X19mdW5jX19uYW1lIiAhPSBubzsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChbTkVUU05NUF9GVU5DVElPTl0sWyRuZXRzbm1wX2N2X19mdW5jX19uYW1lXSwKKyAgICAgICAgW1Nob3VsZCBldmFsdWF0ZSB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBpZiBkZWZpbmVkXSkKK2ZpCisKKworIyAgICAgICBXaGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gICAgICAoU0NPIFVuaXh3YXJlKQorIworQUNfQ0FDSEVfQ0hFQ0soW1t3aGV0aGVyIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSBicm9rZW4gKFVuaXh3YXJlKV1dLAorICAgICAgICAgICAgICAgIFtuZXRzbm1wX2N2X2NfYnJva2VuX2lubGluZV0sCisgICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfU09VUkNFKFsKK3N0YXRpYyBpbmxpbmUgaW50IG5lc3RlZF9pbmxpbmVfZnVuY3Rpb24odm9pZCkgeworICByZXR1cm4gMDsKK30KK2lubGluZSBpbnQgbWFpbl9pbmxpbmVfZnVuY3Rpb24oIHZvaWQgKSB7CisgIHJldHVybiBuZXN0ZWRfaW5saW5lX2Z1bmN0aW9uKCk7Cit9CisgICAgXSldLAorICAgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT1ubywKKyAgICBuZXRzbm1wX2N2X2Jyb2tlbl9pbmxpbmU9eWVzKSkKKworCisjICAgICAgIFllcyAtICBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgYnJva2VuICAgICAgIChTb2xhcmlzIDIueCkKKyMKK2Nhc2UgIiR0YXJnZXRfb3MiIGluCisgICAgc29sYXJpcyopCisgICAgICAgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMKKyAgICAgICAgOzsKKyAgICAqKQorICAgICAgICA7OworZXNhYworCitpZiB0ZXN0ICIkbmV0c25tcF9jdl9icm9rZW5faW5saW5lIiA9IHllcyA7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfQlJPS0VOX0lOTElORSwgMSwKKyAgICAgICAgW0RlZmluZSBpZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgdW5zdXBwb3J0ZWRdKQorZmkKKworCisjIworIyAgIE1pcy1wbGFjZWQgKG5vbi1mdW5jdGlvbikgY2hlY2tzOgorIyMKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBTSU9DR0lGQUREUiBpbiBzeXMvaW9jdGwuaF0sCisgICAgICAgICAgICAgICBuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiwKKyAgICBBQ19DT01QSUxFX0lGRUxTRSgKKyAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbWworI2lmZGVmIEhBVkVfU1lTX0lPQ1RMX0gKKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKyNlbmRpZgorI2lmbmRlZiBTSU9DR0lGQUREUgorTm8gU0lPQ0dJRkFERFIgZm91bmQgaGVyZS4KKyNlbmRpZgorICAgICAgICBdXSldLAorICAgIFtuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj15ZXNdLAorICAgIFtuZXRzbm1wX2N2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj1ub10pKQoraWYgdGVzdCAkbmV0c25tcF9jdl9zeXNfaW9jdGxfaF9oYXNfU0lPQ0dJRkFERFIgPSB5ZXM7IHRoZW4KKyAgQUNfREVGSU5FKFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUiwgMSwKKyAgIFtkZWZpbmUgaWYgU0lPQ0dJRkFERFIgZXhpc3RzIGluIHN5cy9pb2N0bC5oXSkKK2ZpCisKKyMjCisjICAgQ2hlY2sgaG93IHRvIHByaW50IGEgc2l6ZV90IHZhcmlhYmxlCisjIworCitBQ19DQUNIRV9DSEVDSygKKyAgICBbdGhlIHVuZGVybHlpbmcgdHlwZSBvZiBhIHNpemVfdF0sCisgICAgbmV0c25tcF9jdl9zaXplX3RfdHlwZSwKKyAgICBbbTRfZm9yZWFjaChbVFlQRV0sIFtbaW50XSxbbG9uZ10sW2xvbmcgbG9uZ10sW3Nob3J0XSxbY2hhcl1dLAorICAgICBbaWYgW1sgeCRuZXRzbm1wX2N2X3NpemVfdF90eXBlID0geCBdXSA7IHRoZW4KKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorCSAgICAgW0FDX0xBTkdfUFJPR1JBTSgKK1tBQ19JTkNMVURFU19ERUZBVUxUKCkKK2V4dGVybiB1bnNpZ25lZCBUWVBFIHZhcmlhYmxlOworZXh0ZXJuIHNpemVfdCB2YXJpYWJsZTtdLAorICAgICAgICAgICAgICAgICBbXSldLAorICAgICAgICAgICAgIFtuZXRzbm1wX2N2X3NpemVfdF90eXBlPSJUWVBFIl0pCisgICAgIGZpCisgICAgXSldKQorCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludGYgYSBzaXplX3RdKQorY2FzZSAiJG5ldHNubXBfY3Zfc2l6ZV90X3R5cGUiIGluCisgICAgY2hhcnxzaG9ydHxpbnQpIG5ldHNubXBfUFJJej0iIiA7OworICAgIGxvbmcpIG5ldHNubXBfUFJJej0ibCIgOzsKKyAgICAibG9uZyBsb25nIikgbmV0c25tcF9QUkl6PSJsbCIgOzsKKyAgICAqKSBBQ19NU0dfRVJST1IoW3VuZGVybHlpbmcgdHlwZSBvZiBzaXplX3Qgbm90IGtub3duXSkgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoJG5ldHNubXBfUFJJeikKK0FDX0RFRklORV9VTlFVT1RFRChbTkVUU05NUF9QUkl6XSwgWyIkbmV0c25tcF9QUkl6Il0sCisgICAgICAgICAgICAgICAgICAgW1NpemUgcHJlZml4IHRvIHVzZSB0byBwcmludGYgYSBzaXplX3Qgb3Igc3NpemVfdF0pCisKKyMjCisjICAgQ2hlY2sgaG93IHRvIHByaW50IGEgdWludDMyX3QgdmFyaWFibGUKKyMjCisKK0FDX0NBQ0hFX0NIRUNLKAorICAgIFt0aGUgdW5kZXJseWluZyB0eXBlIG9mIGFuIHVpbnQzMl90XSwKKyAgICBuZXRzbm1wX2N2X3VpbnQzMl90X3R5cGUsCisgICAgW200X2ZvcmVhY2goW1RZUEVdLCBbW2NoYXJdLFtzaG9ydF0sW2ludF0sW2xvbmddLFtsb25nIGxvbmddXSwKKyAgICAgW2lmIFtbIHgkbmV0c25tcF9jdl91aW50MzJfdF90eXBlID0geCBdXSA7IHRoZW4KKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorCSAgICAgW0FDX0xBTkdfUFJPR1JBTSgKK1tBQ19JTkNMVURFU19ERUZBVUxUKCkKK2V4dGVybiB1bnNpZ25lZCBUWVBFIHZhcmlhYmxlOworZXh0ZXJuIHVpbnQzMl90IHZhcmlhYmxlO10sCisgICAgICAgICAgICAgICAgIFtdKV0sCisgICAgICAgICAgICAgW25ldHNubXBfY3ZfdWludDMyX3RfdHlwZT0iVFlQRSJdKQorICAgICBmaQorICAgIF0pXSkKKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gcHJpbnRmIGEgdWludDMyX3RdKQorY2FzZSAiJG5ldHNubXBfY3ZfdWludDMyX3RfdHlwZSIgaW4KKyAgICBjaGFyfHNob3J0fGludCkgbmV0c25tcF9QUkkzMj0iIiA7OworICAgIGxvbmcpIG5ldHNubXBfUFJJMzI9ImwiIDs7CisgICAgImxvbmcgbG9uZyIpIG5ldHNubXBfUFJJMzI9ImxsIiA7OworICAgICopIEFDX01TR19FUlJPUihbdW5kZXJseWluZyB0eXBlIG9mIHVpbnQzMl90IG5vdCBrbm93bl0pIDs7Citlc2FjCitBQ19NU0dfUkVTVUxUKCRuZXRzbm1wX1BSSTMyKQorQUNfREVGSU5FX1VOUVVPVEVEKFtORVRTTk1QX1BSSTMyXSwgWyIkbmV0c25tcF9QUkkzMiJdLAorICAgICAgICAgICAgICAgICAgIFtTaXplIHByZWZpeCB0byB1c2UgdG8gcHJpbnRmIGEgdWludDMyX3RdKQorCisjIGNoZWNrIHRvIHNlZSBpZiB0aGUgb3BlbnNzbCBpcyBnb29kIGVub3VnaCBmb3IgRFRMUworIyAoQklPX2RncmFtX2dldF9wZWVyIGlzIGEgbWFjcm8sIG5vdCBhIHRydWUgZnVuY3Rpb24pCitpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIkRUTFMiID4gL2Rldi9udWxsOyB0aGVuCisgICAgQUNfQ0FDSEVfVkFMKAorICAgICAgIG5ldHNubXBfY3ZfYmlvX2RncmFtX2dldF9wZWVyLAorICAgICAgIEFDX01TR19DSEVDS0lORyhbW2ZvciBCSU9fZGdyYW1fZ2V0X3BlZXJdXSkKKyAgICAgICBbCisgICAgICAgIG9sZExJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSIkTElCUyAtbGNyeXB0byIKKyAgICAgICAgQUNfTElOS19JRkVMU0UoCisgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTSgKKyAgICAgICAgICAgIFtbI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+XV0sCisgICAgICAgICAgICBbW0JJT19kZ3JhbV9nZXRfcGVlcihOVUxMLCBOVUxMKTtdXSldLCBbXSwKKyAgICAgICAgICBbQUNfTVNHX0VSUk9SKERUTFMgc3VwcG9ydCByZXF1aXJlcyBhIG5ld2VyIHZlcnNpb24gb2YgT3BlblNTTCldKQorCisgICAgICAgIExJQlM9IiRvbGRMSUJTIgorICAgICAgIF0KKyAgICAgICBBQ19NU0dfUkVTVUxUKHllcykKKyAgICApCitmaQorCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19oZWFkZXJzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwOGFhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfaGVhZGVycwpAQCAtMCwwICsxLDU4OCBAQAorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgaGVhZGVyIGZpbGVzLgorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgU3RhbmRhcmQgY2hlY2tzOgorIyMKKyMgIENvcmU6CitBQ19IRUFERVJfU1REQyAgICAgICAgICAjICA8c3RkbGliLmg+LCA8c3RkYXJnLmg+LCAgIDxzdHJpbmcuaD4gICYgPGZsb2F0Lmg+CitBQ19IRUFERVJfRElSRU5UICAgICAgICAjICA8ZGlyZW50Lmg+LCA8c3lzL25kaXIuaD4sIDxzeXMvZGlyLmg+ICYgPG5kaXIuaD4KKyMgIEFwcHM6CitBQ19IRUFERVJfU1lTX1dBSVQgICAgICAjICA8c3lzL3dhaXQuaD4KKworIyBhbGxvdyBmb3IgcXVpY2sgbW9kdWxlL2xpYnJhcnkvZXRjIHByb2Nlc3NpbmcgY2hlY2tzCitpZiB0ZXN0ICJ4JE5FVFNOTVBfUVVJQ0tfQ0hFQ0siID0gIngiIDsgdGhlbgorCisjIworIyAgIFN0YW5kLWFsb25lIGhlYWRlcnM6CisjIworIyAgQ29yZToKK0FDX0NIRUNLX0hFQURFUlMoW2dldG9wdC5oICAgcHRocmVhZC5oICByZWdleC5oICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N0cmluZy5oICAgc3lzbG9nLmggICB1bmlzdGQuaCAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N0ZGludC5oICAgaW50dHlwZXMuaCAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9wYXJhbS5oICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3NlbGVjdC5oICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc29ja2V0LmggICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy90aW1lLmggICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3RpbWViLmggICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdW4uaCAgICAgICAgICAgXSkKKworIyAgTGlicmFyeSBhbmQgQWdlbnQ6CitBQ19DSEVDS19IRUFERVJTKFtubGlzdC5oXSwsLFsKK0FDX0lOQ0xVREVTX0RFRkFVTFQKK1sKKyNpZm5kZWYgTElCQlNEX0RJU0FCTEVfREVQUkVDQVRFRAorI2RlZmluZSBMSUJCU0RfRElTQUJMRV9ERVBSRUNBVEVEIDEKKyNlbmRpZgorXV0pCisKKyMgIExpYnJhcnk6CitBQ19DSEVDS19IRUFERVJTKFtmY250bC5oICAgIGlvLmggICAgICAga3N0YXQuaCAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW2xpbWl0cy5oICAgbG9jYWxlLmggICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL2ZpbGUuaCAgICAgICBzeXMvaW9jdGwuaCAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvc29ja2lvLmggICAgIHN5cy9zdGF0LmggICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zeXN0ZW1jZmcuaCAgc3lzL3N5c3RlbWluZm8uaCAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3RpbWVzLmggICAgICBzeXMvdWlvLmggICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdXRzbmFtZS5oICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGlweC9pcHguaCAgICAgICBdKQorCisjICBBZ2VudDoKK0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmggICAgZXJyLmggICAgICBmY250bC5oICAgIGZzdGFiLmggICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbICAgICAgICAgICBncnAuaCAgICAgIGlvLmggICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtpb2N0bHMuaCAgIGtzdGF0LmggICAga3ZtLmggICAgICBsaW1pdHMuaCAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgWyAgICAgICAgICAgbW50ZW50LmggICBtdGFiLmggICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbICAgICAgICAgICBwa2dsb2NzLmggICAgICAgICAgICAgcHdkLmggICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFsgICAgICAgICAgIGNvbV9lcnIuaCAgICAgICAgICAgICBldC9jb21fZXJyLmggXSBkbmwKKyAgICAgICAgICAgICAgICAgWyAgICAgICAgICAgdXRtcHguaCAgICB1dHNuYW1lLmggICAgICAgICAgICAgICBdKQorCitBQ19DSEVDS19IRUFERVJTKFtzeXMvZGlza2lvLmggIHN5cy9ka2lvLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL2ZpbGUuaCAgICBzeXMvZmlsaW8uaCAgIHN5cy9maXhwb2ludC5oICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9mcy5oICAgICAgc3lzL2lvY3RsLmggICBzeXMvbG9hZGF2Zy5oICBzeXMvbW50ZW50LmggIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvbW50dGFiLmggIHN5cy9wb29sLmggICAgc3lzL3Byb3Rvc3cuaCAgc3lzL3BzdGF0LmggICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3NvY2tpby5oICBzeXMvc3RhdC5oICAgIHN5cy9zdGF0ZnMuaCAgIHN5cy9zdGF0dmZzLmggXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zdHJlYW0uaCAgc3lzL3N5c2dldC5oICBzeXMvc3lzbXAuaCAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdGNwaXBzdGF0cy5oICAgICAgICAgICAgc3lzL3V0c25hbWUuaCAgc3lzL3Zmcy5oICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3ZtLmggICAgICBzeXMvdm1tYWMuaCAgIHN5cy92bW1ldGVyLmggIHN5cy92bXBhcmFtLmggXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy92bXN5c3RtLmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF0pCisKK0FDX0NIRUNLX0hFQURFUlMoW2FzbS9wYWdlLmggYXNtL3R5cGVzLmggICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbaW5ldC9taWIyLmggICAgICAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtsaW51eC9oZHJlZy5oIGxpbnV4L3Rhc2tzLmggICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW21hY2hpbmUvcGFyYW0uaCAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC90Y3BfZnNtLmggICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFt1ZnMvZnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3V2bS91dm1fZXh0ZXJuLmggdXZtL3V2bV9wYXJhbS5oICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbdm0vdm0uaCB2bS92bV9leHRlcm4uaCB2bS92bV9wYXJhbS5oIF0pCisKKyMgIEFwcHM6CitBQ19DSEVDS19IRUFERVJTKFtmY250bC5oICAgIGdycC5oICAgICAgcHdkLmggICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL2NkZWZzLmggICBzeXMvaW9jdGwuaCAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9zb2NrZXQuaCAgc3lzL3NvY2tpby5oICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvdGltZS5oICAgICAgICAgICAgICAgICAgICAgICBdKQorCisjICBOb3QtVXNlZDoKK0FDX0NIRUNLX0hFQURFUlMoW3NlYXJjaC5oICAgc2d0dHkuaCAgICB4dGkuaCAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvZG1hcC5oIHN5cy9wb2xsLmggICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3RpbWVvdXQuaCAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW21hY2hpbmUvcHRlLmggICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtwY2kvcGNpLmggICAgICAgICAgICAgICAgICAgICAgICBdKQorCisKKyMgVmFsZ3JpbmQKK0FDX0NIRUNLX0hFQURFUlMoW3ZhbGdyaW5kL3ZhbGdyaW5kLmggdmFsZ3JpbmQvbWVtY2hlY2suaF0pCisjIE9wZW5TU0wKK0FDX0NIRUNLX0hFQURFUlMoW29wZW5zc2wvYWVzLmggXSkgICAgICMgIChDb3JlKQorQUNfQ0hFQ0tfSEVBREVSUyhbb3BlbnNzbC9kaC5oICBdKSAgICAgIyAgKEFwcHMpCisjICBOb3QtVXNlZDoKK0FDX0NIRUNLX0hFQURFUlMoW29wZW5zc2wvZGVzLmggIG9wZW5zc2wvaG1hYy5oIF0gZG5sCisgICAgICAgICAgICAgICAgIFtvcGVuc3NsL2V2cC5oICBzZWN1cml0eS9jcnlwdG9raS5oXSkKKworIyBSUE0gc3ViZGlyZWN0b3J5IHBhdGggICAgICAgICAgICAgICAgICAgKEFnZW50KQoraWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyI7IHRoZW4KKyAgQUNfQ0hFQ0tfSEVBREVSUyhbcnBtL3JwbXRzLmggICBycG0vcnBtZmlsZXV0aWwuaF0sIFtdLCBbXSwKKwkJICAgW1sjaW5jbHVkZSA8cnBtL3JwbWxpYi5oPl1dKQorZmkKKworCisjIworIyAgIFByZS1yZXF1aXNpdGUgb24gb3RoZXIgaGVhZGVyczoKKyMjCisKKyMgICAgICAgcmVxdWlyaW5nIDxzeXMvcGFyYW0uaD4gIChNQVhQQVRITEVOKSAgICAgICAgICAgKE9wZW5CU0QgMy40KQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKHN5cy9zd2FwLmgsLCwKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKFtdKQorICAgIFsKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyAgICBdKQorCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3BhcmFtLmg+ICAgICAgICAgICAgICAgICAgICAgICAgIChGcmVlQlNEKQorIworIyAgQ29yZTogICAgICAoPyBUZXN0ZWQgYWJvdmU/ICkKK0FDX0NIRUNLX0hFQURFUlMoW3N0ZGxpYi5oICBdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyAgICBdXSkKKyMKKyMgIExpYnJhcnk6CitBQ19DSEVDS19IRUFERVJTKFttYWxsb2MuaCAgICAgICAgbmV0L2lmX2RsLmggICBzeXMvc3lzY3RsLmggICAgXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisgICAgXV0pCisjCisjICBBZ2VudDoKK0FDX0NIRUNLX0hFQURFUlMoW21hbGxvYy5oICAgICAgICBvc3JlbGRhdGUuaCAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbWFjaGluZS90eXBlcy5oIG5ldC9pZl9kbC5oICAgbmV0L2lmX3R5cGVzLmggIF0gZG5sCisgICAgICAgICAgICAgICAgIFtzeXMvZGtzdGF0LmggICAgc3lzL2NvbmYuaCAgICBzeXMvbWJ1Zi5oICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW3N5cy9tb3VudC5oICAgICBzeXMvcHJvYy5oICAgIHN5cy9xdWV1ZS5oICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbc3lzL3N5c2N0bC5oICAgIHN5cy91c2VyLmggICAgICAgICAgICAgICAgICAgIF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHJlcXVpcmluZyA8c3lzL3NlbWEuaD4gICAgICAgICAgICAgICAgICAgICAgICAgIChJUklYIDYuNSkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhbc3lzL3NlbWEuaF0pCitBQ19DSEVDS19IRUFERVJTKHN5cy9oYXNoaW5nLmgsLCwKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKFtdKQorICAgIFsKKyNpZiBIQVZFX1NZU19TRU1BX0gKKyNpbmNsdWRlIDxzeXMvc2VtYS5oPgorI2VuZGlmCisgICAgXSkKKworIyAgICAgICByZXF1aXJpbmcgPHN5cy9zb2NrZXQuaD4gICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcyA5KQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKHN5cy9zb2NrZXR2YXIuaCwsLAorICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCisgICAgWworI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisgICAgXSkKKworIyAgICAgICByZXF1aXJpbmcgX0tNRU1VU0VSIGFuZCA8c3lzL3R5cGVzLmg+ICAgICAgICAgICAoQlNEaTMvSVJJWCkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdm5vZGUuaCwsLAorICAgIFsKKyNkZWZpbmUgX0tNRU1VU0VSIDEKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyAgICBdKQorCisjICAgICAgIHJlcXVpcmluZyA8bWFjaGluZS90eXBlcy5oPiAgICAgICAgICAgICAgICAgICAgIChOZXRCU0QpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoc3lzL2Rpc2tsYWJlbC5oLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX01BQ0hJTkVfVFlQRVNfSAorI2luY2x1ZGUgPG1hY2hpbmUvdHlwZXMuaD4KKyNlbmRpZgorICAgIF1dKQorCisjCVFOWAorQUNfQ0hFQ0tfSEVBREVSUyhbbmJ1dGlsLmhdKQorCisjICAgICAgIFVGUyBoZWFkZXJzCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlMoW3Vmcy91ZnMvZGlub2RlLmggdWZzL3Vmcy9xdW90YS5oIHVmcy91ZnMvaW5vZGUuaCB1ZnMvZmZzL2ZzLmhdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VGU19VRlNfRElOT0RFX0gKKyNpbmNsdWRlIDx1ZnMvdWZzL2Rpbm9kZS5oPgorI2VuZGlmCisjaWYgSEFWRV9VRlNfVUZTX1FVT1RBX0gKKyNpbmNsdWRlIDx1ZnMvdWZzL3F1b3RhLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICByZXF1aXJpbmcgPHZtL3ZtLmg+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQlNEaTIpCisjICBBZ2VudDoKKyMKK0FDX0NIRUNLX0hFQURFUlModm0vc3dhcF9wYWdlci5oLCwsCisgICAgW1sKKyNpZiBIQVZFX1ZNX1ZNX0gKKyNpbmNsdWRlIDx2bS92bS5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgbmV0bGluay9ydG5ldGxpbmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExpbnV4KQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKFtsaW51eC9uZXRsaW5rLmggIGxpbnV4L3J0bmV0bGluay5oXSwsLAorICAgIFtbCisjaWYgSEFWRV9BU01fVFlQRVNfSAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0xJTlVYX05FVExJTktfSAorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsuaD4KKyNlbmRpZgorICAgIF1dKQorCisKKyMgICAgICAgTmV0d29yayBoZWFkZXJzCisjICBDb3JlIG9yIExpYnJhcnkvQWdlbnQvQXBwczoKKyMKK0FDX0NIRUNLX0hFQURFUlMoW2FycGEvaW5ldC5oICAgICAgICBuZXQvaWYuaCAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC9pbi5oICAgICAgIG5ldGRiLmggICAgICAgICAgICAgIF0sLCwKKyAgICBbWworI2lmIEhBVkVfU1lTX1RZUEVTX0gKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1RJTUVPVVRfSAorI2luY2x1ZGUgPHN5cy90aW1lb3V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVFZBUl9ICisjaW5jbHVkZSA8c3lzL3NvY2tldHZhci5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorICAgIF1dKQorIworIyAgQWdlbnQ6CitBQ19DSEVDS19IRUFERVJTKFtuZXQvaWZfYXJwLmggICAgICAgbmV0L2lmX21pYi5oICAgICAgICAgbmV0L2lmX3Zhci5oICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC9pZl9ldGhlci5oIG5ldGluZXQvaW5fc3lzdG0uaCAgIG5ldGluZXQvaW5fdmFyLmggXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvaXAuaCAgICAgICBuZXRpbmV0L2lwX2ljbXAuaCAgICAgICAgICAgICAgICAgICAgIF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXRpbmV0L2ljbXBfdmFyLmggbmV0aW5ldC9pcF92YXIuaCAgICAgICAgICAgICAgICAgICAgICBdIGRubAorICAgICAgICAgICAgICAgICBbbmV0aW5ldC90Y3AuaCAgICAgIG5ldGluZXQvdGNwX3RpbWVyLmggIG5ldGluZXQvdGNwX3Zhci5oXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQvdGNwaXAuaCAgICBuZXRpbmV0L3VkcC5oICAgICAgICBuZXRpbmV0L3VkcF92YXIuaF0gZG5sCisgICAgICAgICAgICAgICAgIFtuZXQvcm91dGUuaCAgICAgICAgbmV0aW5ldC9pY21wNi5oICAgICAgICAgICAgICAgICAgICAgICBdLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9TWVNUTV9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbl9zeXN0bS5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9JQ01QX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2lwX2ljbXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICisjaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JQ01QNl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pY21wNi5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgS0FNRSAoSVB2NikgaGVhZGVycworIyAgQWdlbnQ6CisjCisjIEtBTUUKK0FDX0NIRUNLX0hFQURFUlMoW25ldGluZXQvaXA2LmggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQ2L2luNl92YXIuaCAgICBuZXRpbmV0Ni9pbjZfcGNiLmggICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQ2L2lwNl92YXIuaCAgICBuZXRpbmV0Ni9uZDYuaCAgICAgICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQ2L3RjcDYuaCAgICAgICBuZXRpbmV0Ni90Y3A2X2ZzbS5oICAgXSBkbmwKKyAgICAgICAgICAgICAgICAgW25ldGluZXQ2L3RjcDZfdGltZXIuaCBuZXRpbmV0Ni90Y3A2X3Zhci5oXSwsLAorICAgIFtbCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUVVFVUVfSAorI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lQNl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHJlcXVpcmluZyA8bmV0aW5ldC9pbi5oPiAgICAgICAgICAgICAgICAgICAgICAgIChPcGVuQlNEIDIuNikKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhuZXRpbmV0L2luX3BjYi5oLCwsCisgICAgW1sKKyNpZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19USU1FT1VUX0gKKyNpbmNsdWRlIDxzeXMvdGltZW91dC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRWQVJfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXR2YXIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luX3N5c3RtLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSVBfSAorI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX1JPVVRFX0gKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorICAgIF1dKQorCisjIworIyAgIFByZS1yZXF1aXNpdGUgb24gc3BlY2lmaWMgdHlwZXMKKyMjCisKKyMgICAgICAgU3BlY2lhbCBoYWNrIHRvIGdldCBhcm91bmQgdmFyaW91cyBwcm9ibGVtcyBvbiBvbGRlciBMaW51eCBrZXJuZWxzCisjICAgICAgIChtYWpvciB1Z2ghKQorIyAgQWdlbnQ6CisjCitBQ19DSEVDS19IRUFERVJTKFtsaW51eC9ldGh0b29sLmhdLCwsCitbWworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Cit0eXBlZGVmIF9fdTY0IHU2NDsgICAgICAgICAvKiBoYWNrLCBzbyB3ZSBtYXkgaW5jbHVkZSBrZXJuZWwncyBldGh0b29sLmggKi8KK3R5cGVkZWYgX191MzIgdTMyOyAgICAgICAgIC8qIGRpdHRvICovCit0eXBlZGVmIF9fdTE2IHUxNjsgICAgICAgICAvKiBkaXR0byAqLwordHlwZWRlZiBfX3U4IHU4OyAgICAgICAgICAgLyogZGl0dG8gKi8KK11dKQorCisjIworIyAgIEhlYWRlcnMgcmVxdWlyaW5nIHBhcnRpY3VsYXIgbGlicmFyaWVzCisjIworCisjICAgICAgIGZvciBIb3N0UmVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzIDIueCkKKyMgIEFnZW50OgorIworQUNfQ0hFQ0tfSEVBREVSUyhwa2dpbmZvLmgsCisgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhwa2dpbmZvLCBhZG0sCisgICAgICAgIEFDX0RFRklORShIQVZFX1BLR0lORk8sIDEsIFtkZWZpbmUgaWYgeW91IGhhdmUgcGtnaW5mb10pLCwsTE1JQkxJQlMpKQorCitBQ19DSEVDS19IRUFERVJTKHBrZy5oLAorICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMocGtnX2luaXQsIHBrZywKKyAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCUEtHLCAxLCBbZGVmaW5lIGlmIHlvdSBoYXZlIEJTRCBwa2ctbmddKSkpCisKK2lmIHRlc3QgJGFjX2N2X2hlYWRlcl9wa2dfaCA9IG5vCit0aGVuCisgICAgdW5zZXQgYWNfY3ZfaGVhZGVyX3BrZ19oCisgICAgbmV0c25tcF9zYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgbmV0c25tcF9zYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIENQUEZMQUdTPSIkQ1BQRkxBR1MgLUkvdXNyL2xvY2FsL2luY2x1ZGUiCisgICAgTERGTEFHUz0iJExERkxBR1MgLUwvdXNyL2xvY2FsL2xpYiIKKyAgICBBQ19DSEVDS19IRUFERVJTKHBrZy5oLAorICAgICAgICBORVRTTk1QX1NFQVJDSF9MSUJTKHBrZ19pbml0LCBwa2csCisJICAgIEFDX0RFRklORShIQVZFX0xJQlBLRywgMSwgW2RlZmluZSBpZiB5b3UgaGF2ZSBCU0QgcGtnLW5nXSkpKQorICAgIGlmIHRlc3QgJGFjX2N2X2hlYWRlcl9wa2dfaCA9IG5vCisgICAgdGhlbgorICAgICAgICBDUFBGTEFHUz0iJG5ldHNubXBfc2F2ZV9DUFBGTEFHUyIKKyAgICAgICAgTERGTEFHUz0iJG5ldHNubXBfc2F2ZV9MREZMQUdTIgorICAgIGZpCitmaQorCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBhaXgqKQorICAgICAgICAjICAgICAgIGZvciBDUFUvbWVtb3J5IHN0YXRpc3RpY3MgICAgICAgICAgICAgICAoQUlYKQorICAgICAgICAjICBBZ2VudDoKKyAgICAgICAgIworICAgICAgICBBQ19DSEVDS19IRUFERVJTKGxpYnBlcmZzdGF0LmgsCisgICAgICAgICAgICBORVRTTk1QX1NFQVJDSF9MSUJTKHBlcmZzdGF0X2NwdV90b3RhbCwgcGVyZnN0YXQsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfUEVSRlNUQVQsIDEsIFtvbiBhaXgsIGlmIHlvdSBoYXZlIHBlcmZzdGF0XSksCisgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFsKKworKioqIFRvIG1vbml0b3IgQ1BVL21lbW9yeSB2YWx1ZXMgaW4gQUlYIHlvdSBuZWVkIHRvIGluc3RhbGwKKyoqKiBsaWJwZXJmc3RhdCB3aGljaCBjYW4gYmUgZm91bmQgaW4gYm9zLnBlcmYKK10pLCwKKyAgICAgICAgICAgICAgICBMTUlCTElCUyksLAorICAgIFtbCisjaWYgSEFWRV9TWVNfUFJPVE9TV19ICisjaW5jbHVkZSA8c3lzL3Byb3Rvc3cuaD4KKyNlbmRpZgorICAgIF1dKQorICAgICAgICA7OworICAgIGhwdXgqKQorICAgICAgICAjICAgICAgIEhQLVVYIGFnZW50IG5lZWRzIG9wZW5fbWliICAgICAgIChYWFggLSBub3QgYSBoZWFkZXIgY2hlY2shKQorICAgICAgICAjCisgICAgICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMob3Blbl9taWIsIG5tLAorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCTk0sIDEsIFtkZWZpbmUgaWYgeW91IGhhdmUgbGlibm1dKSwsLExNSUJMSUJTKQorICAgICAgICA7OworICAgICopCisgICAgICAgIDs7Citlc2FjCisKKyMgICAgICAgZm9yIE1JQi0yIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEN5Z3dpbiBhbmQgTWluR1cpCisjICBDb3JlOgorIworQUNfQ0hFQ0tfSEVBREVSUyhbd2luZG93cy5oIGlwaGxwYXBpLmhdLCBbXSwgW10sIFsKKyNpZmRlZiBIQVZFX1dJTkRPV1NfSAorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKyNlbmRpZgorXSkKKworIyAgICAgICBmb3IgTUlCLTIgaW5mbyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjICBDb3JlOgorIworaWYgdGVzdCB4JHdpdGhfc29ja2xpYiA9IHh3aW5zb2NrMjsgdGhlbgorICBBQ19DSEVDS19IRUFERVJTKFt3aW5zb2NrLmggd2luc29jazIuaCB3czJ0Y3BpcC5oXSkKK2ZpCisKKyMKKyMgZm9yIHVjZC1zbm1wL2xtc2Vuc29yc01pYgorIworQUNfQ0hFQ0tfSEVBREVSUyhbc2Vuc29ycy9zZW5zb3JzLmggcGljbC5oXSkKKworIyMgIFRoaXMgaXMgaGVyZSB0byBhdm9pZCBsb2FkcyBvZiByZWRlZmluaXRpb24gd2FybmluZ3MgZHVyaW5nCisjIyAgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKworIyMKKyMgICBydGVudHJ5IHN0cnVjdHVyZSBjaGVja3M6CisjIworCisjIENoZWNrIHN0cnVjdCBydGVudHJ5IGZvciBjb21tb24gZmllbGRzCisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgcnRlbnRyeS5ydF9kc3QsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlbnRyeS5ydF9oYXNoLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0ZW50cnkucnRfbmV4dCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVudHJ5LnJ0X3JlZmNudCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBydGVudHJ5LnJ0X3VuaXQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRlbnRyeS5ydF91c2VdLCwsCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9ST1VURV9ICisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisjZW5kaWYKKyAgICBdKQorCitmaSAjIE5FVFNOTVBfUVVJQ0tfQ0hFQ0sKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMSBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWYwNTJhCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMxCkBAIC0wLDAgKzEsOTUgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENoZWNrcyBmb3IgbGlicmFyaWVzIHRoYXQgYXJlIHJ1bgorIyBiZWZvcmUgdGhlIGFnZW50IG1vZHVsZSB0ZXN0cy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKKyMjCisjICAgUlBNIGNoZWNrcworIworIyMKK0FDX0NIRUNLX0hFQURFUlMocnBtL3JwbWxpYi5oIHJwbS9oZWFkZXIuaCkKKworQUNfQ0hFQ0tfSEVBREVSKHJwbS9ycG1saWIuaCxycG1saWJfaD15ZXMscnBtbGliX2g9bm8pCitBQ19DSEVDS19IRUFERVIocnBtL2hlYWRlci5oLHJwbWhlYWRlcl9oPXllcyxycG1oZWFkZXJfaD1ubykKKworaWYgdGVzdCAieCRycG1oZWFkZXJfaCIgPSAieG5vIiAtbyAieCRycG1saWJfaCIgPSAieG5vIiA7IHRoZW4KKyAgaWYgdGVzdCAieCR3aXRoX3JwbSIgPSAieHllcyIgOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBlaXRoZXIgdGhlIFJQTSBoZWFkZXIgZmlsZXMgbmVlZGVkIGFuZCB3YXMgc3BlY2lmaWNhbGx5IGFza2VkIHRvIHVzZSBSUE0gc3VwcG9ydF0pCisgIGVsc2UKKyAgICB3aXRoX3JwbT1ubworICBmaQorZmkKKworIworIyBycG0gbGlicmFyaWVzIG9ubHkgbmVlZGVkIGZvciB0aGUgaG9zdCByZXNvdXJjZXMgbWliIHNvZnR3YXJlCisjIGluc3RhbGxlZCB0YWJsZXMgKG9uIGxpbnV4IGluIHBhcnRpY3VsYXIpCisjCitpZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIjsgdGhlbgorICAjIEFSRy4gIFJQTSBpcyBhIHJlYWwgcGFpbi4KKyAgIyBGV0lXIGxpYnJwbS5sYSwgbGlicnBtaW8ubGEsIGFuZCBsaWJwb3B0LmxhIGhhdmUgY29ycmVjdCBkZXBlbmRlbmNpZXMuCisgIF9ycG1saWJzPSIiCisKKyAgIyBycG0tNC4wLnggbmVlZHMgcnBtaW8uCisgIE5FVFNOTVBfU0VBUkNIX0xJQlMocnBtR2V0UGF0aCwgcnBtaW8sLCwgJExNSUJMSUJTLCBfcnBtbGlicykKKyAgCisgICMgcnBtLTQuMC4zIGxpYnJwbWRiIGFjdHVhbGx5IGNvbnRhaW5zIHdoYXQgd2UgbmVlZC4KKyAgTkVUU05NUF9TRUFSQ0hfTElCUyhycG1kYk9wZW4sIHJwbWRiLCwsICRMTUlCTElCUywgX3JwbWxpYnMpCisgICMgbm93IGNoZWNrIGZvciBycG0gdXNpbmcgdGhlIGFwcHJvcHJpYXRlIGxpYnJhcmllcy4KKyAgTkVUU05NUF9TRUFSQ0hfTElCUyhycG1SZWFkQ29uZmlnRmlsZXMsIHJwbSwgWworICAgIEFDX0RFRklORShIQVZFX0xJQlJQTSwgMSwKKyAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJwbScgbGlicmFyeSAoLWxycG0pLl0pCisgICAgTE1JQkxJQlM9IiRfcnBtbGlicyAkTE1JQkxJQlMiCisgIF0sLCAkTE1JQkxJQlMsIF9ycG1saWJzKQorCisgICMgcnBtIDQuNiBoYXMgaW5jb21wYXRpYmxlIEFQSSwgdHVybiBvbiB0aGUgbGVnYWN5IG9uZQorICBBQ19DSEVDS19ERUNMKFtoZWFkZXJHZXRFbnRyeV0sCisgICAgOiAsCisgICAgQUNfREVGSU5FKFtfUlBNXzRfNF9DT01QQVRdLCBbXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBSUE0gNC42IG9yIG5ld2VyIHRvIHR1cm4gb24gbGVnYWN5IEFQSV0pLAorICAgIFtbI2luY2x1ZGUgPHJwbS9ycG1saWIuaD5dXQorICApCitmaQorCisjCisjIGdldGZzc3RhdC9nZXR2ZnNzdGF0CisjCitBQ19TRUFSQ0hfTElCUyhnZXRmc3N0YXQsIFtuYnV0aWxdKQorQUNfQ0hFQ0tfRlVOQ1MoZ2V0ZnNzdGF0KQorQUNfQ0hFQ0tfRlVOQ1MoZ2V0dmZzc3RhdCkKK0FDX0ZVTkNfR0VUTU5URU5UCisKKyMKKyMga2luZm9fZ2V0X2NwdXMKKyMKK0FDX1NFQVJDSF9MSUJTKGtpbmZvX2dldF9jcHVzLCBba2luZm9dKQorQUNfQ0hFQ0tfRlVOQ1Moa2luZm9fZ2V0X2NwdXMpCisKKyMKKyMgZGlza0lPTEF4IHJlcXVpcmVzIGV4cCB3aGljaCBtYXkgcmVxdWlyZSAtbG0KKyMKK0FDX1NFQVJDSF9MSUJTKGV4cCwgW21dKQorCisjCisjICAgbGlia3ZtCisjCitORVRTTk1QX1NFQVJDSF9MSUJTKGt2bV9yZWFkLCBrdm0sLCwsIExBR0VOVExJQlMpCitORVRTTk1QX1NFQVJDSF9MSUJTKGt2bV9vcGVuZmlsZXMsIGt2bSwsLCwgTEFHRU5UTElCUykKK05FVFNOTVBfU0VBUkNIX0xJQlMoa3ZtX2dldHByb2NzLCBrdm0sLCwsIExNSUJMSUJTKQorTkVUU05NUF9TRUFSQ0hfTElCUyhrdm1fZ2V0cHJvYzIsIGt2bSwsLCwgTE1JQkxJQlMpCitORVRTTk1QX1NFQVJDSF9MSUJTKGt2bV9nZXRzd2FwaW5mbywga3ZtLCwsLCBMTUlCTElCUykKK25ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKK0xJQlM9IiRMQUdFTlRMSUJTICRMTUlCTElCUyAkTElCUyIKK0FDX0NIRUNLX0ZVTkNTKFtrdm1fb3BlbmZpbGVzIGt2bV9nZXRwcm9jcyBrdm1fZ2V0cHJvYzIga3ZtX2dldHN3YXBpbmZvXSkKK0xJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKworIworIyAgIGR5bmFtaWMgbW9kdWxlIHN1cHBvcnQKKyMKK05FVFNOTVBfU0VBUkNIX0xJQlMoW2Rsb3Blbl0sIFtkbF0sLCwgWyRMQUdFTlRMSUJTICRMU05NUExJQlNdLCBbTE1JQkxJQlNdKQorbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExNSUJMSUJTICRMQUdFTlRMSUJTICRMU05NUExJQlMgJExJQlMiCitBQ19DSEVDS19GVU5DUyhbZGxvcGVuXSkKK0xJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMiBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19saWJzMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzQ5MWUyCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX2xpYnMyCkBAIC0wLDAgKzEsNTA0IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIGxpYnJhcmllcyB0aGF0IGFyZSBydW4KKyMgYWZ0ZXIgdGhlIGFnZW50IG1vZHVsZSB0ZXN0cy4KKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjICAgSEFWRV9MSUIgRGVmaW5pdGlvbnMgdXNlZCBpbiB0aGUgTmV0LVNOTVAgY29kZSBiYXNlOgorIworIyAgICAgICBIQVZFX0xJQkNSWVBUTzoJYXBwcworIyAgICAgICBIQVZFX0xJQlJQTToJYWdlbnQKKyMKKworIyMKKyMgICBTaW1wbGUgY2hlY2tzOgorIyMKKworIyBBQ19DSEVDS19MSUIoZGVzLCBtYWluKQorIyBBQ19DSEVDS19MSUIobSwgICBhc2luKQorCisjICAgZG1hbGxvYworIworaWYgdGVzdCAiJHt3aXRoX2RtYWxsb2Mrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgIGlmIHRlc3QgIiR3aXRoX2RtYWxsb2MiID0geWVzIC1hIC1kICR3aXRoX2RtYWxsb2MgOyB0aGVuCisgICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKCR3aXRoX2RtYWxsb2MpCisgICBmaQorICAgQUNfQ0hFQ0tfSEVBREVSUyhbZG1hbGxvYy5oXSkKKyAgIEFDX1NFQVJDSF9MSUJTKFtkbWFsbG9jX21lc3NhZ2VdLCBbZG1hbGxvY10pCitmaQorCisjICAgRUZlbmNlCisjICAgICAgIChUaGlzIHVzZWQgdG8gYmUgb24gYnkgZGVmYXVsdCBmb3IgZGV2ZWxvcGVyIGNoZWNrb3V0KQorIworaWYgdGVzdCAieCR1c2VfZWZlbmNlIiA9ICJ4eWVzIjsgdGhlbgorICAgIEFDX1NFQVJDSF9MSUJTKFtFRl9FeGl0XSwgW2VmZW5jZV0pCitmaQorCisKKyMgICBFTEYgbGlicmFyaWVzCisjICAgICAgIFR5cGljYWxseSB1c2VkIGZvciAnbmxpc3QnICAobmVlZGVkIGZvciB1cHRpbWUpCisjCitpZiB0ZXN0ICJ4JHdpdGhfZWxmIiAhPSAieG5vIjsgdGhlbgorY2FzZSAkdGFyZ2V0X29zIGluCisJbGludXgqKSAjIGFkZCBob3N0cyB3aGljaCBkb24ndCB1c2Ugbmxpc3QgaGVyZQorICAgICAgICAgICAgICAgIDs7CisJaXJpeCopICMgQ2hlY2sgZm9yIG5saXN0IGluIG1sZCAoaXJpeCkKKwkJQUNfQ0hFQ0tfTElCKGVsZiwgbmxpc3QpCisJCUFDX0NIRUNLX0xJQihlbGYsIG5saXN0NjQpCisJCUFDX0NIRUNLX0xJQihtbGQsIG5saXN0KQorCQk7OworCSopICMgZGVmYXVsdAorCQlBQ19DSEVDS19MSUIoZWxmLCBubGlzdCkKKwkJOzsKK2VzYWMKK2ZpCisgCisKKyMgICBsaWJzb2NrZXQKKyMgICAgICAgTmVlZGVkIGZvciAnc29ja2V0KDIpJyAgICAgICAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjICAgICAgIFBvc3NpYmx5IGFsc28gZm9yICdnZXRob3N0bmFtZSgzKScgICAgICAgICAgICAgIChub24tU29sYXJpcykKKyMgICAgICAgICAgIChhbHRlcm5hdGl2ZWx5IGluIGxpYm5zbCAgICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisjICAgICAgICAgICAgb3IgaW4gbGlid3MyXzMyKSAgICAgICAgICAgICAgICAgICAgICAgICAgIChNaW5HVykKKyMKK2Nhc2UgeCR3aXRoX3NvY2tsaWIgaW4KK3h3aW5zb2NrMikKKyAgIyAgIGxpYndzMl93MzIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKE1pbkdXKQorICAjCisgIG5ldHNubXBfc2F2ZV9MSUJTPSIkTElCUyIKKyAgTElCUz0iJExJQlMgLWx3czJfMzIiCisgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAgICNpbmNsdWRlIDx3aW5zb2NrMi5oPgorICBdLCBbCisgICAgc29ja2V0KDAsIDAsIDApOworICAgIGdldGhvc3RieW5hbWUoMCk7CisgIF0pXSwgWworICAgICMgS2VlcCBMSUJTLgorICAgIHRydWUKKyAgXSwgWworICAgICMgUmVzdG9yZSBMSUJTIGFuZCBjb21wbGFpbi4KKyAgICBMSUJTPSIkbmV0c25tcF9zYXZlX0xJQlMiCisgICAgQUNfTVNHX0VSUk9SKFtsaWJ3czJfMzIgbm90IGZvdW5kLl0pCisgIF0pCisgIDs7CisqKQorICBBQ19TRUFSQ0hfTElCUyhzb2NrZXQsIHNvY2tldCwsQUNfTVNHX0VSUk9SKFtzb2NrZXQoMikgbm90IGZvdW5kLl0pKQorICBBQ19TRUFSQ0hfTElCUyhnZXRob3N0YnluYW1lLCBbbnNsIHNvY2tldF0pCisgIEFDX0NIRUNLX0ZVTkNTKGdldGhvc3RieW5hbWUpCisgIEFDX1NFQVJDSF9MSUJTKGdldGhvc3RieWFkZHIsIFtuc2wgc29ja2V0XSkKKyAgQUNfQ0hFQ0tfRlVOQ1MoZ2V0aG9zdGJ5YWRkcikKKyAgOzsKK2VzYWMKKworCisjICAgbGliaXBobHBhcGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDeWd3aW4gYW5kIE1pbkdXKQorIworbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorTElCUz0iJExJQlMgLWxpcGhscGFwaSIKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworICAjaW5jbHVkZSA8d2luc29jazIuaD4KKyAgI2luY2x1ZGUgPGlwaGxwYXBpLmg+CitdLCBbCisgIElwUmVuZXdBZGRyZXNzKDApOworXSldLCBbCisgICMgS2VlcCBMSUJTLgorICB0cnVlCitdLCBbCisgICMgUmVzdG9yZSBMSUJTIGFuZCBjb21wbGFpbi4KKyAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorICBjYXNlIHgkd2l0aF9zb2NrbGliIGluCisgIHh3aW5zb2NrMikKKyAgICBBQ19NU0dfRVJST1IoW2xpYmlwaGxwYXBpIG5vdCBmb3VuZC5dKQorICAgIDs7CisgIGVzYWMKK10pCisKKworIyAgIGxpYnJlZ2V4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbHJlZ2V4IgorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbCisgICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgI2luY2x1ZGUgPHJlZ2V4Lmg+CitdLCBbCisgIHJlZ2NvbXAoMCwgMCwgMCk7CitdKV0sIFsKKyAgIyBLZWVwIExJQlMuCisgIHRydWUKK10sIFsKKyAgIyBSZXN0b3JlIExJQlMuCisgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKK10pCisKKworIyAgIGxpYnNubXBhcGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoTWluR1cpCisjCituZXRzbm1wX3NhdmVfTElCUz0iJExJQlMiCitMSUJTPSIkTElCUyAtbHNubXBhcGkiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyAgI2luY2x1ZGUgPHNubXAuaD4KK10sIFsKKyAgU25tcFV0aWxNZW1BbGxvYygwKTsKK10pXSwgWworICAjIEtlZXAgTElCUy4KKyAgdHJ1ZQorXSwgWworICAjIFJlc3RvcmUgTElCUy4KKyAgTElCUz0iJG5ldHNubXBfc2F2ZV9MSUJTIgorXSkKKworCisjICAga3N0YXQgbGlicmFyeSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTb2xhcmlzKQorIworTkVUU05NUF9TRUFSQ0hfTElCUyhrc3RhdF9sb29rdXAsIGtzdGF0LAorICAgICAgICBBQ19ERUZJTkUoSEFWRV9MSUJLU1RBVCwgMSwKKyAgICAgICAgCVtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtzdGF0JyBsaWJyYXJ5ICgtbGtzdGF0KS5dKSwsLAorICAgICAgICBMTkVUU05NUExJQlMpCisKKworIworIyAgIGxpYnJ0CisjCisKK05FVFNOTVBfU0VBUkNIX0xJQlMoY2xvY2tfZ2V0dGltZSwgcnQsCisgICAgICAgIEFDX0RFRklORShIQVZFX0NMT0NLX0dFVFRJTUUsIDEsCisgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgbGlicmFyeV0pLCwsCisgICAgICAgIExORVRTTk1QTElCUykKKworCisjIworIyAgIE1JQi1tb2R1bGUtc3BlY2lmaWMgY2hlY2tzCisjIworCisjICAgbGliZGV2c3RhdAorIyAgICAgICAgKGZvciBkaXNrSU8gTUlCKQorIworIyAgIE5vdC1Vc2VkOiBIQVZFX0dFVERFVlMvSEFWRV9ERVZTVEFUX0dFVERFVlMKKyMKK2VjaG8gIiAkbW9kdWxlX2xpc3QgIiB8ICRHUkVQICIgdWNkLXNubXAvZGlza2lvICIgPi9kZXYvbnVsbAoraWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKwlORVRTTk1QX1NFQVJDSF9MSUJTKGdldGRldnMsIGRldnN0YXQsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfR0VUREVWUywgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgIFtkZWZpbmUgaWYgeW91IGhhdmUgZ2V0ZGV2cygpXSksLCxMTUlCTElCUykKKwlORVRTTk1QX1NFQVJDSF9MSUJTKGRldnN0YXRfZ2V0ZGV2cywgZGV2c3RhdCwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9ERVZTVEFUX0dFVERFVlMsIDEsCisgICAgICAgICAgICAgICAgICAgICAgICBbZGVmaW5lIGlmIHlvdSBoYXZlIGRldnN0YXRfZ2V0ZGV2cygpXSksLCxMTUlCTElCUykKK2ZpCisKKyMgICBsaWJwY2kKKyMgICAgICAgIChmb3IgaWYtbWliIGRlc2NyaXB0aW9uKQorIworTkVUU05NUF9TRUFSQ0hfTElCUyhwY2lfbG9va3VwX25hbWUsIHBjaSwKKwlBQ19ERUZJTkUoSEFWRV9QQ0lfTE9PS1VQX05BTUUsIDEsCisJCVtkZWZpbmUgaWYgeW91IGhhdmUgcGNpX2xvb2t1cF9uYW1lKCldKSwsLExNSUJMSUJTKQorCisjICAgTE0tU0VOU09SUy1NSUIgc3VwcG9ydAorIworZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgJEdSRVAgLWkgInVjZC1zbm1wL2xtc2Vuc29yIiA+IC9kZXYvbnVsbAoraWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igc2Vuc29ycyBzdXBwb3J0XSkKKyAgICAgICAgY2FzZSAkdGFyZ2V0X29zIGluCisgICAgICAgIHNvbGFyaXMqKQorICAgICAgICAgICAgIyAgQWdlbnQ6ICBIQVZFX1BJQ0xfSAorICAgICAgICAgICAgIworICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSKHBpY2wuaCwgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1scGljbCIsKQorICAgICAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhwaWNsLmgpCisgICAgICAgICAgICA7OworICAgICAgICAqKQorICAgICAgICAgICAgIyAgTm90LVVzZWQ6ICBIQVZFX1NFTlNPUlNfU0VOU09SU19ICisgICAgICAgICAgICAjCisgICAgICAgICAgICBBQ19DSEVDS19IRUFERVIoc2Vuc29ycy9zZW5zb3JzLmgsLAorICAgICAgICAgICAgICAgIFtBQ19NU0dfRVJST1IoW2Fza2VkIHRvIHVzZSBsbV9zZW5zb3JzIGJ1dCBJIGNvdWxkbid0IGZpbmQgc2Vuc29ycy9zZW5zb3JzLmhdKV0pCisgICAgICAgICAgICBORVRTTk1QX1NFQVJDSF9MSUJTKHNlbnNvcnNfZ2V0X2RldGVjdGVkX2NoaXBzLCBzZW5zb3JzLCwKKyAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFthc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIC1sc2Vuc29yc10pXSwsCisgICAgICAgICAgICAgICAgTE1JQkxJQlMpCisgICAgICAgICAgICA7OworICAgICAgICBlc2FjCitmaQorCisjCisjIGxpYm5sIChuZXRsaW5rKQorIworCitpZiB0ZXN0ICJ4JHdpdGhfbmwiICE9ICJ4bm8iOyB0aGVuCisgICAgY2FzZSAkdGFyZ2V0X29zIGluCisgICAgbGludXgqKSAjIENoZWNrIGZvciBsaWJubCAobGludXgpCisgICAgICAgIG5ldHNubXBfc2F2ZV9DUFBGTEFHUz0iJENQUEZMQUdTIgorICAgICAgICBDUFBGTEFHUz0iLUkvdXNyL2luY2x1ZGUvbGlibmwzICRDUFBGTEFHUyIKKyAgICAgICAgTkVUU05NUF9TRUFSQ0hfTElCUyhubF9jb25uZWN0LCBubC0zLAorICAgICAgICAgICAgW0FDX0NIRUNLX0hFQURFUlMobmV0bGluay9uZXRsaW5rLmgpCisgICAgICAgICAgICBFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUz0iJEVYVEVSTkFMX01JQkdST1VQX0lOQ0xVREVTIC1JL3Vzci9pbmNsdWRlL2xpYm5sMyJdLAorICAgICAgICAgICAgW0NQUEZMQUdTPSIkbmV0c25tcF9zYXZlX0NQUEZMQUdTIl0sIFtdLCBbXSwgW0xNSUJMSUJTXSkKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfbmV0bGlua19uZXRsaW5rX2giICE9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIE5FVFNOTVBfU0VBUkNIX0xJQlMobmxfY29ubmVjdCwgbmwsIFsKKyAgICAgICAgICAgICAgICBBQ19DSEVDS19IRUFERVJTKG5ldGxpbmsvbmV0bGluay5oKV0sIFtdLCBbXSwgTE1JQkxJQlMpCisgICAgICAgIGZpCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldGxpbmtfbmV0bGlua19oIiA9IHh5ZXM7IHRoZW4KKyAgICAgICAgICAgIEFDX0VHUkVQX0hFQURFUihbbmxfc29ja2V0X2ZyZWVdLCBbbmV0bGluay9zb2NrZXQuaF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0FDX0RFRklORShbSEFWRV9MSUJOTDNdLCBbMV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIDxuZXRsaW5rL25ldGxpbmsuaD4gcHJvdmlkZXMgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlibmwzIEFQSV0pXSkKKyAgICAgICAgZmkKKyAgICA7OworICAgIGVzYWMKK2ZpCisKKworCisjIworIyAgIE1vcmUgY29tcGxleCBjaGVja3M6CisjIworCisjICAgU2VjdXJpdHkgcmVsYXRlZCBmdW5jdGlvbnMKKyMKK05PTkFHRU5UTElCUz0kTElCUwkgIyBzYXZlIG9sZCBsaWJyYXJpZXMKK1NTSFBST0c9bm8KK1RMU1BST0c9bm8KK2lmIHRlc3QgIngkdHJ5b3BlbnNzbCIgIT0gInhubyIgLWEgIngkdHJ5b3BlbnNzbCIgIT0gInhpbnRlcm5hbCI7IHRoZW4KKyAgICAjIGNoZWNrIGZvciBsaWJwa2NzMTEgaWYgYXNrZWQKKyAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgIT0gInh5ZXMiIC1hICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfQ0hFQ0tfTElCKHBrY3MxMSwgQ19Jbml0aWFsaXplLAorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCUEtDUzExLCAxLAorICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBrY3MxMScgbGlicmFyeSAoLWxwa2NzMTEpLl0pCisJCUxJQlBLQ1MxMT0iLWxwa2NzMTEiKQorICAgIGVsc2UgCisgICAgICAgIGlmIHRlc3QgIngkdHJ5cnNhcmVmIiAhPSAieG5vIjsgdGhlbgorICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKHJzYXJlZiwgUlNBUHJpdmF0ZURlY3J5cHQpCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoUlNBZ2x1ZSwgUlNBX1BLQ1MxX1JTQXJlZikKKyAgICAgICAgZmkKKworICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAtbGVheTMyXSkKKyAgICAgICAgbmV0c25tcF9zYXZlX0xJQlM9IiRMSUJTIgorICAgICAgICBMSUJTPSItbGVheTMyIgorICAgICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsKKyAgICAgICAgICAgICAgICAjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD5dLAorICAgICAgICAgICAgICAgIFtyZXR1cm4gRVZQX21kNSgpO10pXSwKKyAgICAgICAgICAgIFtBQ19NU0dfUkVTVUxUKHllcyk7IGFjX2N2X2xpYl9lYXkzMl9FVlBfbWQ1PXllczsgQ1JZUFRPPSJlYXkzMiJdLAorICAgICAgICAgICAgW0FDX01TR19SRVNVTFQobm8pXQorICAgICAgICApCisgICAgICAgIExJQlM9IiRuZXRzbm1wX3NhdmVfTElCUyIKKworICAgICAgICBpZiB0ZXN0IHgkQ1JZUFRPID0geDsgdGhlbgorICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKFtjcnlwdG9dLCBbRVZQX21kNV0sIFtDUllQVE89ImNyeXB0byJdKQorICAgICAgICBmaQorCisgICAgICAgIGlmIHRlc3QgeCRDUllQVE8gIT0geDsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCQ1JZUFRPLCAxLAorICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgT3BlblNTTCBsaWJyYXJ5ICgtbGNyeXB0byBvciAtbGVheTMyKS5dKQorICAgICAgICAgICAgTElCQ1JZUFRPPSItbCR7Q1JZUFRPfSIKKyAgICAgICAgICAgIEFDX0NIRUNLX0xJQigke0NSWVBUT30sIEFFU19jZmIxMjhfZW5jcnlwdCwgCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBULCAxLAorICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBBRVNfY2ZiMTI4X2VuY3J5cHQnIGZ1bmN0aW9uLl0pKQorCisgICAgICAgICAgICBBQ19DSEVDS19MSUIoJHtDUllQVE99LCBFVlBfTURfQ1RYX2NyZWF0ZSwKKyAgICAgICAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfRVZQX01EX0NUWF9DUkVBVEVdLCBbXSwKKyAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRVZQX01EX0NUWF9jcmVhdGUnIGZ1bmN0aW9uLl0pCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0VWUF9NRF9DVFhfREVTVFJPWV0sIFtdLAorICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFVlBfTURfQ1RYX2Rlc3Ryb3knIGZ1bmN0aW9uLl0pKQorICAgICAgICBmaQorICAgICAgICBpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIkRUTFMiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIEFDX0NIRUNLX0xJQihzc2wsIERUTFN2MV9tZXRob2QsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCU1NMX0RUTFMsIDEsCisgICAgICAgICAgICAgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3VyIGBzc2wnIGxpYnJhcnkgc3VwcG9ydHMgRFRMUyAoLWxzc2wpLl0pCisgICAgICAgICAgICAgICAgTElCQ1JZUFRPPSIgLWxzc2wgJExJQkNSWVBUTyIsCQorCQlBQ19NU0dfRVJST1IoW1RoZSBEVExTIGJhc2VkIHRyYW5zcG9ydHMgcmVxdWlyZSB0aGUgbGlic3NsIGxpYnJhcnkgZnJvbSBPcGVuU1NMIHRvIGJlIGF2YWlsYWJsZSBhbmQgc3VwcG9ydCBEVExTXSkJLC1sY3J5cHRvKQorICAgICAgICAgICAgVExTUFJPRz15ZXMKKyAgICAgICAgZmkKKyAgICAgICAgaWYgZWNobyAiICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgIiB8ICRHUkVQICJUTFMiID4gL2Rldi9udWxsOyB0aGVuCisJICAgIEFDX0NIRUNLX0xJQihzc2wsIFNTTF9saWJyYXJ5X2luaXQsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCU1NMLCAxLAorICAgICAgICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzc2wnIGxpYnJhcnkgKC1sc3NsKS5dKQorICAgICAgICAgICAgICAgIExJQkNSWVBUTz0iIC1sc3NsICRMSUJDUllQVE8iLAkKKwkJQUNfTVNHX0VSUk9SKFtUaGUgRFRMUyBiYXNlZCB0cmFuc3BvcnRzIHJlcXVpcmUgdGhlIGxpYnNzbCBsaWJyYXJ5IGZyb20gT3BlblNTTCB0byBiZSBhdmFpbGFibGVdKQksLWxjcnlwdG8pCisgICAgICAgICAgICBUTFNQUk9HPXllcworICAgICAgICBmaQorICAgICAgICBpZiBlY2hvICIgJHRyYW5zcG9ydF9yZXN1bHRfbGlzdCAiIHwgJEdSRVAgIiBTU0ggIiA+IC9kZXYvbnVsbDsgdGhlbgorCSAgICBBQ19DSEVDS19MSUIoc3NoMiwgbGlic3NoMl9zZXNzaW9uX3N0YXJ0dXAsCisgICAgICAgICAgICAgICAgQUNfREVGSU5FKEhBVkVfTElCU1NIMiwgMSwKKyAgICAgICAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NoMicgbGlicmFyeSAoLWxzc2gyKS5dKQorICAgICAgICAgICAgICAgIExJQkNSWVBUTz0iIC1sc3NoMiAkTElCQ1JZUFRPIiwKKyAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW1RoZSBTU0ggdHJhbnNwb3J0IHJlcXVpcmVzIHRoZSBsaWJzc2gyIGxpYnJhcnkgdG8gYmUgYXZhaWxhYmxlXSksKQorICAgICAgICAgICAgU1NIUFJPRz15ZXMKKyAgICAgICAgZmkKKyAgICBmaQorZWxpZiB0ZXN0ICJ4JGFza2VkcGtjcyIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19DSEVDS19MSUIocGtjczExLCBDX0luaXRpYWxpemUsCisgICAgICAgIEFDX0RFRklORShIQVZFX0xJQlBLQ1MxMSkKKyAgICAgICAgTElCUEtDUzExPSItbHBrY3MxMSIpCitmaQoraWYgdGVzdCAieCRUTFNQUk9HIiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfQ0hFQ0tfREVDTChbRVZQX3NoYTIyNF0sCisgICAgQUNfREVGSU5FKFtIQVZFX0VWUF9TSEEyMjRdLCBbXSwgW0RlZmluZSBpZiB5b3UgaGF2ZSBFVlBfc2hhMjI0LzI1NiBpbiBvcGVuc3NsXSksCisgICAgOiAsCisgICAgW1sjaW5jbHVkZSA8b3BlbnNzbC9ldnAuaD5dXSkKKyAgIEFDX0NIRUNLX0RFQ0woW0VWUF9zaGEzODRdLAorICAgIEFDX0RFRklORShbSEFWRV9FVlBfU0hBMzg0XSwgW10sIFtEZWZpbmUgaWYgeW91IGhhdmUgRVZQX3NoYTM4NC8yNTYgaW4gb3BlbnNzbF0pLAorICAgIDogLAorICAgIFtbI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+XV0pCitmaQorCitMSUJTPSROT05BR0VOVExJQlMJICMgcmVzdG9yZSBvbGQgbGlicmFyaWVzCitpZiB0ZXN0ICJ4JFNTSFBST0ciID0gInh5ZXMiOyB0aGVuCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19UUlVFPScnCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19GQUxTRT0nIycKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1NTSF9QUk9HX1RSVUU9JyMnCisgICAgTkVUU05NUF9CVUlMRF9TU0hfUFJPR19GQUxTRT0nJworZmkKK2lmIHRlc3QgIngkVExTUFJPRyIgPSAieHllcyIgLWEgIngkZW5hYmxlX3JlYWRfb25seSIgIT0gInh5ZXMiIDsgdGhlbgorICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfVFJVRT0nJworICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0U9JyMnCitlbHNlCisgICAgTkVUU05NUF9CVUlMRF9UTFNfUFJPR19UUlVFPScjJworICAgIE5FVFNOTVBfQlVJTERfVExTX1BST0dfRkFMU0U9JycKK2ZpCitpZiBlY2hvICIgJHtzZWN1cml0eV9tb2RfbGlzdH0gIiB8IGdyZXAgJyB1c20gJyA7IHRoZW4KKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9yZWFkX29ubHkiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICAJTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFPScnCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0U9JyMnCisgICAgZWxzZQorICAgIAlORVRTTk1QX0JVSUxEX1VTTV9QUk9HX1RSVUU9JyMnCisgICAgCU5FVFNOTVBfQlVJTERfVVNNX1BST0dfRkFMU0U9JycKKyAgICBmaQorZWxzZQorICAgIE5FVFNOTVBfQlVJTERfVVNNX1BST0dfVFJVRT0nIycKKyAgICBORVRTTk1QX0JVSUxEX1VTTV9QUk9HX0ZBTFNFPScnCitmaQoraWYgdGVzdCAieCRlbmFibGVfcmVhZF9vbmx5IiAhPSAieHllcyIgOyB0aGVuCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19UUlVFPSIiCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRT0iIyIKK2Vsc2UKKyAgICBORVRTTk1QX0JVSUxEX1NFVF9QUk9HX1RSVUU9IiMiCisgICAgTkVUU05NUF9CVUlMRF9TRVRfUFJPR19GQUxTRT0iIgorZmkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfU1NIX1BST0dfVFJVRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfU1NIX1BST0dfRkFMU0UpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1RMU19QUk9HX1RSVUUpCitBQ19TVUJTVChORVRTTk1QX0JVSUxEX1RMU19QUk9HX0ZBTFNFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9VU01fUFJPR19UUlVFKQorQUNfU1VCU1QoTkVUU05NUF9CVUlMRF9VU01fUFJPR19GQUxTRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfU0VUX1BST0dfVFJVRSkKK0FDX1NVQlNUKE5FVFNOTVBfQlVJTERfU0VUX1BST0dfRkFMU0UpCisKKyMKKyMgSWYgd2UncmUgdXNpbmcgaW50ZXJuYWwgY3J5cHRvIHN1cHBvcnQgd2UgbmVlZCB0byBjb21waWxlIGluIGV4dHJhIGZpbGVzCisjCitjcnlwdG9fZmlsZXNfYz0iIgorY3J5cHRvX2ZpbGVzX289IiIKK2NyeXB0b19maWxlc19sbz0iIgoraWYgdGVzdCAieCR0cnlvcGVuc3NsIiAhPSAieG5vIiAtYSAieCRDUllQVE8iID0gIngiOyB0aGVuCisgICAjIElmIHdlOgorICAgIyAgIDEpIGNvdWxkbid0IGZpbmQgbmVlZGVkIG9wZW5zc2wgc3VwcG9ydAorICAgIyAgIDIpIE9SIHdlcmUgYXNrZWQgdG8gdXNlIGludGVybmFsIHN1cHBvcnQKKyAgICMgICAzKSBBTkQgd2UgaGF2ZSB0aGUgbmVlZGVkIGZpbGVzCisgICAjIHRoZW4gdXNlIGl0CisgICBDUllQVE89ImludGVybmFsIgorICAgY3J5cHRvX2ZpbGVzX2M9Im9wZW5zc2wvb3BlbnNzbF9zaGExLmMgb3BlbnNzbC9vcGVuc3NsX21kNS5jIG9wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMgb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMuYyBvcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jIG9wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMgb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMgb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jIgorICAgY3J5cHRvX2ZpbGVzX289Im9wZW5zc2wvb3BlbnNzbF9zaGExLm8gb3BlbnNzbC9vcGVuc3NsX21kNS5vIG9wZW5zc2wvb3BlbnNzbF9zZXRfa2V5Lm8gb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubyBvcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5vIG9wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLm8gb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLm9vIG9wZW5zc2wvb3BlbnNzbF9jZmIxMjgubyIKKyAgIGNyeXB0b19maWxlc19sbz0ib3BlbnNzbC9vcGVuc3NsX3NoYTEubG8gb3BlbnNzbC9vcGVuc3NsX21kNS5sbyBvcGVuc3NsL29wZW5zc2xfc2V0X2tleS5sbyBvcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5sbyBvcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5sbyBvcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5sbyBvcGVuc3NsL29wZW5zc2xfYWVzX2NvcmUubG8gb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5sbyIKKyAgIEFDX0RFRklORShIQVZFX0FFU19DRkIxMjhfRU5DUllQVCkKK2ZpCitBQ19TVUJTVChjcnlwdG9fZmlsZXNfYykKK0FDX1NVQlNUKGNyeXB0b19maWxlc19vKQorQUNfU1VCU1QoY3J5cHRvX2ZpbGVzX2xvKQorCisjCisjIGlmIHdlIGNhbiBkbyBhbnkgc29ydCBvZiBjcnlwdG8gdGhlbiBub3RlIGl0CisjCitpZiB0ZXN0ICJ4JENSWVBUTyIgIT0gIngiIDsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9DQU5fRE9fQ1JZUFRPLCAxLCAiRGVmaW5lIGlmIGNyeXRvZ3JhcGh5IHN1cHBvcnQgaXMgcG9zc2libGUiKQorZmkKKworIyAgIFRDUCB3cmFwcGVyIHN1cHBvcnQKKyMKK19jcHBmbGFncz0iJHtDUFBGTEFHU30iCitfbGRmbGFncz0iJHtMREZMQUdTfSIKK2lmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJubyI7IHRoZW4KKyAgaWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gInllcyI7IHRoZW4KKyAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkkd2l0aF9saWJ3cmFwL2luY2x1ZGUiCisgICAgTERGTEFHUz0iJHtMREZMQUdTfSAtTCR3aXRoX2xpYndyYXAvbGliIgorICBmaQorCisgIF9saWJzPSR7TElCU30KKyAgQUNfQ0hFQ0tfSEVBREVSKHRjcGQuaCwgLAorICAgIEFDX01TR19FUlJPUihbQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCB0Y3BkLmguXSkpCisKKyAgTElCUz0iJExJQlMgLWx3cmFwIgorICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBUQ1Agd3JhcHBlcnMgbGlicmFyeSAtbHdyYXBdKQorICAjIFhYWDogc2hvdWxkIGNoZWNrIGZvciBob3N0c19jdGwKKyAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyAgICAgI2luY2x1ZGUgPHRjcGQuaD4KKyAgICAgaW50IGFsbG93X3NldmVyaXR5ID0gMDsKKyAgICAgaW50IGRlbnlfc2V2ZXJpdHkgID0gMDtdXSwKKyAgICBbW2hvc3RzX2FjY2Vzcygodm9pZCAqKTApXV0pXSwKKyAgICBbQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0xJQldSQVApCisgICAgIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgorICAgICBfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIl0sCisgICAgW0FDX01TR19SRVNVTFQoW25vXSkKKyAgICAgIyBMaW51eCBSZWRIYXQgNi4xIHdvbid0IGxpbmsgbGlid3JhcCB3aXRob3V0IGxpYm5zbAorICAgICBBQ19DSEVDS19GVU5DKHlwX2dldF9kZWZhdWx0X2RvbWFpbiwgLAorICAgICAgIEFDX0NIRUNLX0xJQihuc2wsIHlwX2dldF9kZWZhdWx0X2RvbWFpbikpCisgICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFRDUCB3cmFwcGVycyBsaWJyYXJ5IC1sd3JhcCBsaW5rZWQgd2l0aCAtbG5zbF0pCisgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHRjcGQuaD4KKwlpbnQgYWxsb3dfc2V2ZXJpdHkgPSAwOworCWludCBkZW55X3NldmVyaXR5ICA9IDA7XV0sCisgICAgICAgW1tob3N0c19hY2Nlc3MoKHZvaWQgKikwKV1dKV0sCisgICAgICAgW0FDX01TR19SRVNVTFQoeWVzKQorCUFDX0RFRklORShORVRTTk1QX1VTRV9MSUJXUkFQKQorCXRlc3QgIiR3aXRoX2xpYndyYXAiICE9IG5vIC1hICIkd2l0aF9saWJ3cmFwIiAhPSB5ZXMgJiYgX3dyYXBsaWJzPSItTCR3aXRoX2xpYndyYXAvbGliIgorCV93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAgLWxuc2wiXSwKKyAgICAgICBbQUNfTVNHX1JFU1VMVChubykKKwlBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pXSldKQorICBMQUdFTlRMSUJTPSIkX3dyYXBsaWJzIgorICBDUFBGTEFHUz0ke19jcHBmbGFnc30KKyAgTERGTEFHUz0ke19sZGZsYWdzfQorICBMSUJTPSR7X2xpYnN9CitmaQorCisKKyMjCisjICAgbXlzcWwKKyMjCitpZiB0ZXN0ICJ4JHdpdGhfbXlzcWwiID0gInh5ZXMiIDsgdGhlbgorICBBQ19QQVRIX1BST0dTKE1ZU1FMQ09ORklHLG15c3FsX2NvbmZpZykKKyAgdGVzdCAteCAiJE1ZU1FMQ09ORklHIiBcCisJfHwgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCBteXNxbF9jb25maWcgYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIE15U1FMIHN1cHBvcnRdKQorICBNWVNRTF9MSUJTPWAkTVlTUUxDT05GSUcgLS1saWJzYAorICBNWVNRTF9JTkNMVURFUz1gJE1ZU1FMQ09ORklHIC0taW5jbHVkZWAKKyAgX2xpYnM9IiR7TElCU30iCisgIF9jcHBmbGFncz0iJHtDUFBGTEFHU30iCisgIExJQlM9IiR7TElCU30gJHtNWVNRTF9MSUJTfSIKKyAgQ1BQRkxBR1M9IiR7Q1BQRkxBR1N9ICR7TVlTUUxfSU5DTFVERVN9IgorICBBQ19DSEVDS19IRUFERVIobXlzcWwuaCwsCisgICAgIFtBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIG15c3FsLmggYW5kIHdhcyBzcGVjaWZpY2FsbHkgYXNrZWQgdG8gdXNlIE15U1FMIHN1cHBvcnRdKV0pCisgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBNWV9JTklUKCkgd29ya3NdKQorICBBQ19MSU5LX0lGRUxTRShbCisgICAgQUNfTEFOR19QUk9HUkFNKAorICAgICAgW1sjaW5jbHVkZSA8bXlfZ2xvYmFsLmg+CisgICAgICAgICNpbmNsdWRlIDxteV9zeXMuaD5dXSwKKyAgICAgIFtbTVlfSU5JVCgibXlfaW5pdF90ZXN0IildXSldLAorICAgICAgW0FDX01TR19SRVNVTFQoeWVzKV0sCisgICAgICBbQUNfTVNHX1JFU1VMVChubykKKyAgICAgICBBQ19ERUZJTkUoW0hBVkVfQlJPS0VOX0xJQk1ZU1FMQ0xJRU5UXSwgMSwKKyAgICAgICAgICAgICAgICAgW0RlZmluZSBpZiB1c2luZyBNWV9JTklUKCkgY2F1c2VzIGEgbGlua2VyIGVycm9yXSldKQorICBDUFBGTEFHUz0iJHtfY3BwZmxhZ3N9IgorICBMSUJTPSIke19saWJzfSIKKyAgQUNfTVNHX0NBQ0hFX0FERChNWVNRTCBUcmFwIExvZ2dpbmc6ICAgICAgICAgZW5hYmxlZCkKK2Vsc2UKKyAgQUNfTVNHX0NBQ0hFX0FERChNWVNRTCBUcmFwIExvZ2dpbmc6ICAgICAgICAgdW5hdmFpbGFibGUpCitmaQorQUNfU1VCU1QoTVlTUUxfTElCUykKK0FDX1NVQlNUKE1ZU1FMX0lOQ0xVREVTKQorICAKKworIyMKKyMgICBOb24tbGlicmFyeSBjaGVja3MKKyMjCisKKyMgbmxpc3QKK0FDX0NIRUNLX0ZVTkNTKG5saXN0IG5saXN0NjQga25saXN0KQorCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVlYzlhOQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMQpAQCAtMCwwICsxLDI0IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIGNoZWNrcworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgQ29tcGlsYXRpb24tcmVsYXRlZAorIyMKKworIyAgICAgICBEeW5hbWljIG1vZHVsZXMgcmVxdWlyZSBQb3NpdGlvbi1JbmRlcGVuZGVudCBDb2RlCisjCSAgICBMSUJfQ0ZMQUdTL0RMTElCUzogdXNlZCBpbiBhZ2VudCBNYWtlZmlsZSBvbmx5CisjCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgd2UgaGF2ZSB0byBidWlsZCBQSUMgY29kZV0pCitlY2hvICIgJG1vZHVsZV9saXN0ICIgfCAkR1JFUCAiIHVjZC1zbm1wL2RsbW9kICIgPi9kZXYvbnVsbAoraWYgdGVzdCAkPyAtZXEgMCA7IHRoZW4KKyAgICBMSUJfQ0ZMQUdTPSIkTElCX0NGTEFHUyAkU0hMSUJfQ0ZMQUdTIgorICAgIEFDX01TR19SRVNVTFQoeWVzKQorZWxzZQorICAgIERMTElCUz0iIgorICAgIEFDX01TR19SRVNVTFQobm8pCitmaQorCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJhOGZmNQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjMgpAQCAtMCwwICsxLDE0MiBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBjaGVja3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIFBhY2thZ2UgY2hhcmFjdGVyaXN0aWNzCisjICAgICAgIEF1dGhlbnRpY2F0aW9uL0VuY3J5cHRpb24gc3VwcG9ydAorIyMKKworIyAgICAgICBDaGVjayBmb3IgUEtDUzExCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhdXRoZW50aWNhdGlvbiBzdXBwb3J0XSkKK3VzZW9wZW5zc2w9bm8KK3VzZXBrY3M9bm8KK2lmIHRlc3QgIngkYWNfY3ZfbGliX3BrY3MxMV9DX0luaXRpYWxpemUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfc2VjdXJpdHlfY3J5cHRva2lfaCIgIT0gInh5ZXMiOyB0aGVuCisgICAgaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIEFDX01TR19FUlJPUihBc2tlZCB0byB1c2UgUEtDUzExIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKQorICAgIGZpCitlbHNlCisgICAgaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCisgICAgICAgIHVzZXBrY3M9eWVzCisgICAgZmkKK2ZpCisKKyMgICAgICAgQ2hlY2sgZm9yIE9wZW5TU0wKKyMKK2lmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfbGliX2VheTMyX0VWUF9tZDUiICE9ICJ4eWVzIiAtbyAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9obWFjX2giICE9ICJ4eWVzIjsgdGhlbgorICAgIGlmIHRlc3QgIngkYXNrZWRvcGVuc3NsIiA9ICJ4eWVzIjsgdGhlbgorICAgICAgICBBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIE9wZW5TU0wgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pCisgICAgZmkKK2Vsc2UKKyAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgdXNlb3BlbnNzbD15ZXMKKyAgICBlbGlmIHRlc3QgIngkdHJ5b3BlbnNzbCIgPSAieHllcyI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCR1c2Vwa2NzIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgICAgIHVzZW9wZW5zc2w9eWVzCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisKKyMgICAgICAgQXZhaWxhYmxlIGF1dGhlbnRpY2F0aW9uL2VuY3J5cHRpb24gbW9kZXMKKyMKK2lmIHRlc3QgIngkQ1JZUFRPIiA9ICJ4aW50ZXJuYWwiIDsgdGhlbgorICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCisgICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCisgICAgICAgIGVuY3Jtb2Rlcz0iREVTIEFFUyIKKyAgICBlbHNlCisgICAgICAgIGVuY3Jtb2Rlcz0iW2Rpc2FibGVkXSIKKyAgICBmaQorICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8sIDEsICJEZWZpbmUgaWYgaW50ZXJuYWwgY3J5cHRvZ3JhcGh5IGNvZGUgc2hvdWxkIGJlIHVzZWQiKQorICAgIEFDX01TR19SRVNVTFQoSW50ZXJuYWwgQ3J5cHRvIFN1cHBvcnQpCitlbGlmIHRlc3QgIngkdXNlb3BlbnNzbCIgIT0gInhubyIgOyB0aGVuCisgICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9hZXNfaCIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICAgICBlbmNybW9kZXM9IkRFUyBBRVMiCisJZWxzZQorCSAgICBlbmNybW9kZXM9IkRFUyIKKwlmaQorICAgIGVsc2UKKyAgICAgICAgZW5jcm1vZGVzPSJbZGlzYWJsZWRdIgorICAgIGZpCisgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX09QRU5TU0wpCisgICAgTE5FVFNOTVBMSUJTPSIkTE5FVFNOTVBMSUJTICRMSUJDUllQVE8iCisgICAgQUNfTVNHX1JFU1VMVChPcGVuU1NMIFN1cHBvcnQpCitlbGlmIHRlc3QgIngkdXNlcGtjcyIgIT0gInhubyIgOyB0aGVuCisgICAgYXV0aG1vZGVzPSJNRDUgU0hBMSIKKyAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgZW5jcm1vZGVzPSJERVMiCisgICAgZWxzZQorICAgICAgICBlbmNybW9kZXM9IltkaXNhYmxlZF0iCisgICAgZmkKKyAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfUEtDUzExLCAxLAorICAgICAgW0RlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBjb2RlUzExIGxpYnJhcnkgLi4uXSkKKyAgICBMTkVUU05NUExJQlM9IiRMTkVUU05NUExJQlMgJExJQlBLQ1MxMSIKKyAgICBBQ19NU0dfUkVTVUxUKFBLQ1MxMSBTdXBwb3J0KQorZWxpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiICE9ICJ4bm8iOyB0aGVuCisgICAgYXV0aG1vZGVzPSJNRDUiCisgICAgZW5jcm1vZGVzPSIiCisgICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkKKyAgICBBQ19NU0dfUkVTVUxUKEludGVybmFsIE1ENSBTdXBwb3J0KQorZmkKK2lmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgorICAgIGF1dGhtb2Rlcz1gZWNobyAkYXV0aG1vZGVzIHwgJFNFRCAncy9NRDUgKi8vOydgCitmaQorQUNfU1VCU1QoTE5FVFNOTVBMSUJTKQorQUNfU1VCU1QoTEFHRU5UTElCUykKKworQUNfTVNHX0NBQ0hFX0FERChDcnlwdG8gc3VwcG9ydCBmcm9tOiAgICAgICAgJENSWVBUTykKK0FDX01TR19DQUNIRV9BREQoQXV0aGVudGljYXRpb24gc3VwcG9ydDogICAgICRhdXRobW9kZXMpCitBQ19NU0dfQ0FDSEVfQUREKEVuY3J5cHRpb24gc3VwcG9ydDogICAgICAgICAkZW5jcm1vZGVzKQorCitpZiB0ZXN0ICJ4JGFsbF93YXJuaW5ncyIgIT0gIngiOyB0aGVuCisgICAgQUNfTVNHX0NBQ0hFX0FERChXQVJOSU5HOiAkYWxsX3dhcm5pbmdzKQorZmkKKworIworIyBDaGVjayB3aGV0aGVyIHVzZXIgd2FudHMgRE5TU0VDIGxvY2FsIHZhbGlkYXRpb24gc3VwcG9ydAorIworX2xpYnM9JHtMSUJTfQoraWYgISB0ZXN0ICJ4LSR3YW50X2Ruc3NlYyIgPSAieC1ubyIgOyB0aGVuCisgICAgQUNfQ0hFQ0tfSEVBREVSUyhbdmFsaWRhdG9yL3ZhbGlkYXRvci1jb25maWcuaF0pCisgICAgaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl92YWxpZGF0b3JfdmFsaWRhdG9yX2NvbmZpZ19oIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKENhbid0IGZpbmQgdmFsaWRhdG9yLmgpCisgICAgZmkKKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X2xpYl9jcnlwdG9fRVZQX21kNSIgIT0gInh5ZXMiIC1hIFwKKyAgICAgICAgICAgICJ4JGFjX2N2X2xpYl9lYXkzMl9FVlBfbWQ1IiAhPSAieHllcyIgLW8gXAorICAgICAgICAgICAgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgQUNfTVNHX0VSUk9SKENvdWxkbid0IGZpbmQgT3BlblNTTCBmb3IgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gc3VwcG9ydC4pCisgICAgZmkKKyAgICBMSUJTPSIkTElCUyAkTElCQ1JZUFRPIgorICAgIEFDX0NIRUNLX0xJQihzcmVzLCBxdWVyeV9zZW5kLCxBQ19NU0dfRVJST1IoW0Nhbid0IGZpbmQgbGlic3Jlc10pKQorICAgIFZBTF9MSUJTPSItbHNyZXMgJExJQkNSWVBUTyIKKyAgICBMSUJTPSIkTElCUyAtbHNyZXMiCisgICAgQUNfQ0hFQ0tfTElCKHZhbCwgcF92YWxfc3RhdHVzLAorICAgICAgICAgICAgICAgICBMSUJTPSIkTElCUyAtbHZhbCIKKyAgICAgICAgICAgICAgICAgVkFMX0xJQlM9IiRWQUxfTElCUyAtbHZhbCIKKyAgICAgICAgICAgICAgICAgaGF2ZV92YWxfcmVzX3F1ZXJ5PXllcywKKyAgICAgICAgICAgICAgICAgWyBBQ19DSEVDS19MSUIocHRocmVhZCwgcHRocmVhZF9yd2xvY2tfaW5pdCkKKwkJICAgQUNfQ0hFQ0tfTElCKHZhbC10aHJlYWRzLCBwX3ZhbF9zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgaGF2ZV92YWxfcmVzX3F1ZXJ5PXllcworICAgICAgICAgICAgICAgICAgIExJQlM9Ii1sdmFsLXRocmVhZHMgJExJQlMiCisgICAgICAgICAgICAgICAgICAgVkFMX0xJQlM9Ii1sdmFsLXRocmVhZHMgLWxwdGhyZWFkICRWQUxfTElCUyIKKyAgICAgICAgICAgICAgICAgICBMSUJWQUxfU1VGRklYPSItdGhyZWFkcyIsCisgICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKENhbid0IGZpbmQgbGlidmFsIG9yIGxpYnZhbC10aHJlYWRzKSkKKyAgICAgICAgICAgICAgICAgXSkKKyAgICBBQ19ERUZJTkUoRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04sIDEsCisgICAgICAgICAgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gc3VwcG9ydF0pCisgICAgRE5TU0VDPSJlbmFibGVkIgorZWxzZQorICAgIEROU1NFQz0iZGlzYWJsZWQiCitmaQorCitMSUJTPSR7X2xpYnN9CisKK0FDX1NVQlNUKFZBTF9MSUJTKQorQUNfTVNHX0NBQ0hFX0FERChMb2NhbCBETlNTRUMgdmFsaWRhdGlvbjogICAgJEROU1NFQykKKworIApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2MzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3YWZmNDgKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfb3NfbWlzYzMKQEAgLTAsMCArMSwyMCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgTWlzY2VsbGFuZW91cyBjaGVja3MKKyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIworIyAgIENvbXBpbGF0aW9uIGNoYXJhY3RlcmlzdGljcworIyMKKworIyAgICAgICBCeXRlIG9yZGVyCisjCitpZiB0ZXN0ICIkd2l0aF9lbmRpYW5uZXNzIiA9ICJiaWciOyB0aGVuCisgICAgYWNfY3ZfY19iaWdlbmRpYW49eWVzCitlbGlmIHRlc3QgIiR3aXRoX2VuZGlhbm5lc3MiID0gImxpdHRsZSIgOyB0aGVuCisgICAgYWNfY3ZfY19iaWdlbmRpYW49bm8KK2ZpCitBQ19DX0JJR0VORElBTigsLAorICAgIFtBQ19NU0dfRVJST1IoW0ZhaWxlZCB0byBmaWd1cmUgb3V0IGhvc3QgZW5kaWFubmVzcywgcGxlYXNlIHVzZSAtLXdpdGgtZW5kaWFubmVzcyB0byBzcGVjaWZ5IGl0Ll0pXSkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNCBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19taXNjNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzhiYWQyCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX21pc2M0CkBAIC0wLDAgKzEsNDE2IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBNaXNjZWxsYW5lb3VzIE9wZXJhdGluZy1TeXN0ZW0gY2hhcmFjdGVyaXN0aWNzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCisjCURldGVybWluZSBob3cgdG8gdGVzdCBmb3IgY2hhcmFjdGVyIGRldmljZXMKKyMJW1dlIGFzc3VtZSB0aGF0IC9kZXYvbnVsbCBkb2VzIGFjdHVhbGx5IGV4aXN0IV0KKyMKK2lmIHRlc3QgLWMgL2Rldi9udWxsOyB0aGVuCisgICAgQ0RFVl9URVNUX0ZMQUc9Ii1jIgorZWxpZiB0ZXN0IC1mIC9kZXYvbnVsbDsgdGhlbgorICAgIENERVZfVEVTVF9GTEFHPSItZiIKK2Vsc2UKKyAgICBBQ19NU0dfV0FSTihbQ2FuJ3QgcmVsaWFibHkgZGV0ZWN0IGNoYXJhY3RlciBkZXZpY2VzXSkKKyAgICAjIElzIGl0IGFjdHVhbGx5IHNlbnNpYmxlIHRvIGZhbGwgYmFjayBvbiAidGVzdCAtZiIgPworICAgIENERVZfVEVTVF9GTEFHPSItZiIKK2ZpCisKKyMgICAgICAgS2VybmVsIExvY2F0aW9uCisjCSAgICB1c2VkIGluIGxpYnJhcnkvYWdlbnQKKyMKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgbG9jYXRpb24gb2Ygc3lzdGVtIGtlcm5lbF0sCisgICAgYWNfY3ZfS0VSTkVMX0xPQywKKyAgIFthY19jdl9LRVJORUxfTE9DPSJ1bmtub3duIgorICAgIGZvciBpIGluIC92bXVuaXggL2hwLXV4IC9zdGFuZC92bXVuaXggL2Rldi9rc3ltcyAva2VybmVsL3VuaXggL2tlcm5lbC9nZW51bml4IC9uZXRic2QgL3VuaXggL2tlcm5lbCAvYnNkIC9tYWNoX2tlcm5lbCAvYm9vdC9rZXJuZWwva2VybmVsCisgICAgZG8KKyAgICAgICAgaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgJGk7IHRoZW4KKyAgICAgICAgICAgIGFjX2N2X0tFUk5FTF9MT0M9IiRpIgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZpCisgICAgZG9uZQorICAgICMKKyAgICAjIEluIHByaW5jaXBsZSwgdGhpcyB0ZXN0IGlzIG1lYW50IHRvIHByb3ZpZGUgYSBkZWZhdWx0IHBhdGggdG8gdGhlIGtlcm5lbAorICAgICMgSW4gcHJhY3RpY2UsIHRoZSB0ZXN0IGlzIGJyb2tlbiBhbmQgdGhlIGtlcm5lbCBwYXRoIGlzIHNldCB0byAidW5rbm93biIKKyAgICAjCisgICAgIyBOb3RlIHRoYXQgb24gY2VydGFpbiBzeXN0ZW1zIChlLmcuIHNvbWUgTGludXggZGlzdHJpYnV0aW9ucyksCisgICAgIyAgICBpdCBpcyBpbXBvc3NpYmxlIHRvIHByZWRpY3QgdGhlIG5hbWUgb2YgdGhlIGtlcm5lbCwKKyAgICAjICAgIHBhcnRpY3VsYXJseSBpZiBpdCBpbmNsdWRlcyB0aGUga2VybmVsIHZlcnNpb24sIGFyY2hpdGVjdHVyZSwgZXRjCisgICAgIworICAgICMgU2luY2UgdGhpcyBkZWZhdWx0IHdpbGwgbmV2ZXIgYWN0dWFsbHkgYmUgdXNlZCwgdGhlbiBkb24ndCB0cnkgdG8gc2V0IGl0CisgICAgIworICAgIGlmIHRlc3QgJGkgPSAidW5rbm93biI7IHRoZW4KKyAgICAgICAgQUNfTVNHX1dBUk4oW0Nhbid0IGZpbmQgc3lzdGVtIGtlcm5lbC4uLiBob3BlZnVsbHkgdGhpcyB3b24ndCBiZSBuZWVkZWQhXSkKKyAgICBmaQorXSkKK0FDX0RFRklORV9VTlFVT1RFRChLRVJORUxfTE9DLCIkYWNfY3ZfS0VSTkVMX0xPQyIsIFtsb2NhdGlvbiBvZiBVTklYIGtlcm5lbF0pCisKKworIyAgICAgICAvZGV2L2ttZW0gZXhpc3RlbmNlCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgL2Rldi9rbWVtXSwKKyAgICBhY19jdl9IQVZFX0tNRU0sCisgICBbaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgL2Rldi9rbWVtOyB0aGVuCisgICAgICAgIGFjX2N2X0hBVkVfS01FTT0iL2Rldi9rbWVtIgorICAgIGZpCitdKQorIworIyAgTm90ZSB0aGF0IGl0J3MgT0sgaWYgdGhpcyBkZXZpY2UgaXMgbm90IGZvdW5kCisjCitpZiB0ZXN0ICJ4JGFjX2N2X0hBVkVfS01FTSIgPSAieC9kZXYva21lbSI7IHRoZW4KKyAgICBBQ19ERUZJTkVfVU5RVU9URUQoSEFWRV9LTUVNLCIkYWNfY3ZfSEFWRV9LTUVNIiwgW0RlZmluZSBpZiB5b3UgaGF2ZSAvZGV2L2ttZW1dKQorZmkKKworCisjICAgICAgIFN3YXAgZGV2aWNlIExvY2F0aW9uCisjICAgICAgICAgICAoL2Rldi9kbWVtIG9yIC9kZXYvZHJ1bSkKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBsb2NhdGlvbiBvZiBzd2FwIGRldmljZV0sCisgICAgYWNfY3ZfRE1FTV9MT0MsCisgICBbaWYgdGVzdCAkQ0RFVl9URVNUX0ZMQUcgL2Rldi9kbWVtOyB0aGVuCisgICAgICAgIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RtZW0iCisgICAgZWxpZiB0ZXN0ICRDREVWX1RFU1RfRkxBRyAvZGV2L2RydW07IHRoZW4KKyAgICAgICAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZHJ1bSIKKyAgICBlbHNlCisgICAgICAgIGFjX2N2X0RNRU1fTE9DPSJub25lIgorICAgIGZpCitdKQorIworIyAgTm90ZSB0aGF0IGl0J3MgT0sgaWYgdGhpcyBkZXZpY2UgaXMgbm90IGZvdW5kCisjCitpZiB0ZXN0ICJ4JGFjX2N2X0RNRU1fTE9DIiAhPSAieG5vbmUiOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKERNRU1fTE9DLCIkYWNfY3ZfRE1FTV9MT0MiLCBbbG9jYXRpb24gb2Ygc3dhcCBkZXZpY2VdKQorZmkKKworCisjICAgICAgIE1vdW50IHRhYmxlIExvY2F0aW9uCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgbW91bnQgdGFibGUgbG9jYXRpb25dLAorICAgIGFjX2N2X0VUQ19NTlRUQUIsCisgICBbYWNfY3ZfRVRDX01OVFRBQj0iJHt3aXRoX21udHRhYjotdW5rbm93bn0iCisgICAgaWYgdGVzdCAiJGFjX2N2X0VUQ19NTlRUQUIiID0gInVua25vd24iOyB0aGVuCisgICAgICAgIGZvciBpIGluIC9ldGMvbW50dGFiIC9ldGMvbXRhYiAvZXRjL2ZpbGVzeXN0ZW1zIC9kZXYvbW50dGFiCisgICAgICAgIGRvCisgICAgICAgICAgICBpZiB0ZXN0IC1mICRpIC1vIC1jICRpOyB0aGVuCisgICAgICAgICAgICAgICAgYWNfY3ZfRVRDX01OVFRBQj0iJGkiCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBmaQorICAgICAgICBkb25lCisgICAgZmkKK10pCitBQ19ERUZJTkVfVU5RVU9URUQoRVRDX01OVFRBQiwiJGFjX2N2X0VUQ19NTlRUQUIiLCBbbG9jYXRpb24gb2YgbW91bnQgdGFibGUgbGlzdF0pCisKKworIyAgICAgICBQcmludGluZworIwkgICAgdXNlZCBpbiBhZ2VudCBvbmx5CisjCitBQ19QQVRIX1BST0coW0xQU1RBVF9QQVRIXSxscHN0YXQpCitpZiB0ZXN0IHgkTFBTVEFUX1BBVEggIT0geDsgdGhlbgorICAgIEFDX0RFRklORV9VTlFVT1RFRChMUFNUQVRfUEFUSCwgIiRMUFNUQVRfUEFUSCIsCisJW1BhdGggdG8gdGhlIGxwc3RhdCBjb21tYW5kXSkKKyAgICBBQ19ERUZJTkUoSEFWRV9MUFNUQVQsIDEsIFtTZXQgaWYgdGhlIGxwc3RhdCBjb21tYW5kIGlzIGF2YWlsYWJsZV0pCitmaQoraWYgdGVzdCAtciAvZXRjL3ByaW50Y2FwOyB0aGVuCisgICAgQUNfREVGSU5FKEhBVkVfUFJJTlRDQVAsIDEsIFtTZXQgaWYgL2V0Yy9wcmludGNhcCBleGlzdHNdKQorZmkKKworCisjICAgICAgIENoZWNrIHBzIGFyZ3MKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjb3JyZWN0IGZsYWdzIHRvIHBzXSwKKyAgICAgYWNfY3ZfcHNfZmxhZ3MsCisgICAgIFsKK2lmIHRlc3QgImAoJFBTUFJPRyAtZSAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWVsIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iLWVsIgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iYWN4IgorZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCitlbGlmIHRlc3QgImAoJFBTUFJPRyAtbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSAyPiYxKSB8ICRFR1JFUCAnIHBzICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSIKK2VsaWYgdGVzdCAiYCgkUFNQUk9HIGF4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KKyAgICBhY19jdl9wc19mbGFncz0iYXgiCitlbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgorICAgIGFjX2N2X3BzX2ZsYWdzPSItZSIKK2VsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4gCisgICAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgorZWxzZQorICAgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gZGV0ZXJtaW5lIHZhbGlkIHBzIGZsYWdzLi4uICBkZWZhdWx0aW5nLi4uXSkKKyAgICBhY19jdl9wc19mbGFncz0iLWFjeCIKK2ZpCitdKQorCitQU0NNRD0iJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiCitBQ19TVUJTVChQU0NNRCkKK0FDX0RFRklORV9VTlFVT1RFRChQU0NNRCwgIiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIiwKKyAgW0NvbW1hbmQgdG8gZ2VuZXJhdGUgcHMgb3V0cHV0LCB0aGUgZmluYWwgY29sdW1uIG11c3QgYmUgdGhlIHByb2Nlc3MKKyAgIG5hbWUgd2l0aE9VVCBhcmd1bWVudHNdKQorCisKKyMjCisjICAgU3lzdGVtL0NvbXBpbGF0aW9uLXJlbGF0ZWQKKyMjCisKKyMgICAgICAgVGVzdCBmb3IgU0lHSFVQCisjCisKK0FDX01TR19DSEVDS0lORyhbZm9yIFNJR0hVUF0pCitBQ19DT01QSUxFX0lGRUxTRSgKKyAgICBbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8c2lnbmFsLmg+XSwgW3JldHVybiBTSUdIVVBdKV0sCisgICAgW25ldHNubXBfaGF2ZV9zaWdodXA9eWVzXSwKKyAgICBbbmV0c25tcF9oYXZlX3NpZ2h1cD1ub10KKykKK0FDX01TR19SRVNVTFQoWyRuZXRzbm1wX2hhdmVfc2lnaHVwXSkKK2lmIHRlc3QgIngkbmV0c25tcF9oYXZlX3NpZ2h1cCIgPSB4eWVzOyB0aGVuCisgICAgQUNfREVGSU5FKFtIQVZFX1NJR0hVUF0sIFsxXSwKKyAgICAgICAgICAgICAgW0RlZmluZSBpZiBTSUdIVVAgaXMgZGVmaW5lZCBpbiA8c2lnbmFsLmg+Ll0pCitmaQorCisKKyMgICAgICAgQ2hlY2sgd2hldGhlciBzeXNjdGwoKSBpcyB1c2FibGUKKyMJICAgIHVzZWQgaW4gbGlicmFyeS9hZ2VudAorIworaWYgdGVzdCAkY3Jvc3NfY29tcGlsaW5nID0geWVzOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW0Nhbid0IGNoZWNrIHN5c2N0bCwgbWFudWFsbHkgZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwgaWYgcGxhdGZvcm0gc3VwcG9ydCBhdmFpbGFibGVdKQorZWxzZQorICAgIEFDX0NBQ0hFX0NIRUNLKFtpZiBzeXNjdGwgY2FuIHJlYWQga2VybmVsIGluZm9ybWF0aW9uXSwKKyAgICAgICAgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCwKKyAgICAgICBbQUNfVFJZX1JVTihbCisjaWYgVElNRV9XSVRIX1NZU19USU1FCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGluY2x1ZGUgPHRpbWUuaD4KKyNlbHNlCisjIGlmIEhBVkVfU1lTX1RJTUVfSAorIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgZWxzZQorIyAgaW5jbHVkZSA8dGltZS5oPgorIyBlbmRpZgorI2VuZGlmCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorIyBpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmIEhBVkVfU1lTX1NZU0NUTF9ICisjIGluY2x1ZGUgPHN5cy9zeXNjdGwuaD4KKyNlbmRpZgorCittYWluKCkgeworICBpbnQgICAgICAgICAgICAgICAgIG1pYlsyXTsKKyAgc2l6ZV90ICAgICAgICAgICAgICBsZW47CisgIHN0cnVjdCB0aW1ldmFsIGJvb3R0aW1lOworICAKKyAgbWliWzBdID0gQ1RMX0tFUk47CisgIG1pYlsxXSA9IEtFUk5fQk9PVFRJTUU7CisgIAorICBsZW4gPSBzaXplb2YoYm9vdHRpbWUpOworICBzeXNjdGwobWliLCAyLCAmYm9vdHRpbWUsICZsZW4sIE5VTEwsIE5VTEwpOworICBpZiAoYm9vdHRpbWUudHZfc2VjICE9IDApCisgICAgZXhpdCgwKTsKKyAgZWxzZQorICAgIGV4aXQoMSk7Cit9CisgICAgICAgIF0sCisgICAgICAgIGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEw9eWVzLAorICAgICAgICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vLAorICAgICAgICBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPW5vKV0pCitmaQorCitpZiB0ZXN0ICJ4JGFjX2N2X05FVFNOTVBfQ0FOX1VTRV9TWVNDVEwiID0gInh5ZXMiOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX0NBTl9VU0VfU1lTQ1RMLCAxLCBbc3lzY3RsIHdvcmtzIHRvIGdldCBib290dGltZSwgZXRjLi4uXSkKK2ZpCisKKworIyAgIENoZWNrIHdoZXRoZXIgVENQIHRpbWVyIGNvbnN0YW50cyBhcmUgaW5kZWVkIGNvbnN0YW50CisjICAgICAgIG9yIGRlcGVuZCBvbiB0aGUga2VybmVsIGNsb2NrIHRpY2sgJ2h6Jy4gICAgICAgIChGcmVlQlNEIDQueCkKKyMKKyMgICAgICAgSWYgdGhlIGxhdHRlciwgdGhlbiB3ZSB3aWxsIG5lZWQgdG8gaGF2ZSBhIGxvY2FsCisjICAgICAgIHZhcmlhYmxlICdoeicgZGVmaW5lZCBhbmQgd2l0aCBhIHN1aXRhYmxlIHZhbHVlLAorIyAgICAgICB3aGVuZXZlciB3ZSB3YW50IHRvICB1c2Ugb25lIG9uZSBvZiB0aGVzZSAnY29uc3RhbnRzJy4KKyMKKyMgCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX0NBQ0hFX0NIRUNLKFt3aGV0aGVyIFRDUCB0aW1lcnMgZGVwZW5kIG9uICdoeiddLAorICAgIGFjX2N2X1RDUFRWX05FRURTX0haLAorICAgW0FDX0VHUkVQX0NQUChoeiwKKyAgICAgICAgWworI2luY2x1ZGUgPG5ldGluZXQvdGNwX3RpbWVyLmg+CitUQ1BUVl9TUlRUREZMVAorICAgICAgICBdLAorICAgICAgICBhY19jdl9UQ1BUVl9ORUVEU19IWj15ZXMsCisgICAgICAgIGFjX2N2X1RDUFRWX05FRURTX0haPW5vKV0pCisKK2lmIHRlc3QgIngkYWNfY3ZfVENQVFZfTkVFRFNfSFoiID0gInh5ZXMiOyB0aGVuCisgICAgQUNfREVGSU5FKFRDUFRWX05FRURTX0haLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGluIDxuZXRpbmV0L3RjcF90aW1lci5oPgorICAgICAgICAgZGVwZW5kIG9uIHRoZSBpbnRlZ2VyIHZhcmlhYmxlICdoeicuICBAPDpARnJlZUJTRCA0LnhAOj5AXSkKK2ZpCisKKworIyAgIENoZWNrIHdoZXRoZXIgSVAgUm91dGUgdGFibGUgaXMgY2FjaGVkICAgICAgICAgICAgICAoU29sYXJpcykKKyMJICAgIHVzZWQgaW4gYWdlbnQgb25seQorIworY2FzZSAkdGFyZ2V0X29zIGluCisgIHNvbGFyaXMqKQorICAgICMgICAgSGVhZGVyIGNoZWNrcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcyAyLjYvNykKKyAgICAjCisgICAgQUNfQ0hFQ0tfSEVBREVSUyhpbmV0L2NvbW1vbi5oKQorICAgIEFDX0NIRUNLX0hFQURFUlMoaW5ldC9pcC5oLGFjX2luZXRfaXBfaD15ZXMsYWNfaW5ldF9pcF9oPW5vLAorICAgICAgICBBQ19JTkNMVURFU19ERUZBVUxUKFtdKQorICAgICAgICBbCisjaWYgSEFWRV9TWVNfU1RSRUFNX0gKKyNpbmNsdWRlIDxzeXMvc3RyZWFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX0lORVRfQ09NTU9OX0gKKyNpbmNsdWRlIDxpbmV0L2NvbW1vbi5oPgorI2VuZGlmCisgICAgICAgIF0pCisgICAgaWYgdGVzdCAkYWNfaW5ldF9pcF9oID0geWVzIDsgdGhlbgorICAgICAgICBBQ19DQUNIRV9DSEVDSyhbZm9yIG1pYjJfaXBSb3V0ZUVudHJ5X3QgaW4gaW5ldC9taWIyLmhdLAorICAgICAgICAgICAgYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdCwKKyAgICAgICAgICAgW0FDX1RSWV9DT01QSUxFKFsKKyNpZiBIQVZFX0lORVRfTUlCMl9ICisjaW5jbHVkZSA8aW5ldC9taWIyLmg+CisjZW5kaWYKKyAgICAgICAgICAgICAgIF0sWworICBtaWIyX2lwUm91dGVFbnRyeV90IHRlc3RpdDsKKyAgaWYoc2l6ZW9mKHRlc3RpdCkpCisgICAgcmV0dXJuKDApOworICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgIGFjX2N2X21pYjJfaXBSb3V0ZUVudHJ5X3Q9eWVzLAorICAgICAgICAgICAgICAgYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdD1ubyldKQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfbWliMl9pcFJvdXRlRW50cnlfdCIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciBJUkVfQ0FDSEUgaXMgZGVmaW5lZCBpbiBpbmV0L2lwLmhdLAorICAgICAgICAgICAgICAgIGFjX2N2X2lyZV9jYWNoZSwKKyAgICAgICAgICAgICAgIFtBQ19UUllfQ09NUElMRShbCisjaWYgSEFWRV9JTkVUX0lQX0gKKyNpbmNsdWRlIDxpbmV0L2lwLmg+CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICBdLFsKKyAgaW50IHRlc3RpdD1JUkVfQ0FDSEU7CisgIGlmKHRlc3RpdCkKKyAgICByZXR1cm4oMCk7CisgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICBhY19jdl9pcmVfY2FjaGU9eWVzLAorICAgICAgICAgICAgICAgICAgIGFjX2N2X2lyZV9jYWNoZT1ubyldKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBhY19jdl9pcmVfY2FjaGU9bm8KKyAgICAgICAgZmkKKworICAgICAgICBpZiB0ZXN0ICJ4JGFjX2N2X2lyZV9jYWNoZSIgPSAieHllcyIgOyB0aGVuCisgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9ERUZJTkVEX0lSRV9DQUNIRSxbXSwKKyAgICAgICAgICAgICAgICBbZGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgSVJFX0NBQ0hFIGRlZmluZWQgaW4gPGluZXQvaXAuaD4gaGVhZGVyIGZpbGUuXSkKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX1dBUk4oW0l0IHNlZW1zIHRoYXQgeW91IGhhdmUgaW5ldC9pcC5oLCBidXQgSVJFX0NBQ0hFIGlzIG5vdCBkZWZpbmVkLiBcCitUaGF0IG1lYW5zIHRoYXQgeW91ciBxdWVyeSB0byBpcFJvdXRlIE1JQiBjb3VsZCBnZW5lcmF0ZSBvdmVyIDIwayByZXN1bHRzISBcCitBbmQgdGhpcyBjYW4gYmUgdmVyeSBzbG93Ll0pCisgICAgICAgIGZpCisgICAgZmkgICAgICAgICAjICJ0ZXN0ICRhY19pbmV0X2lwX2ggPSB5ZXMiCisgICAgOzsKK2VzYWMKKworIyAgIENoZWNrIHdoZXRoZXIgSVBfUEtUSU5GTyBpcyB1c2FibGUuCisjCisKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgSVBfUEtUSU5GTyBdLAorICAgICAgICAgICAgICAgIFthY19jdl9oYXZlX2lwX3BrdGluZm9dLAorW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBwcmludGYoKSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBtYWxsb2MoKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBtZW1zZXQoKSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CitdLCBbCisgICAgdm9pZCAqYnVmOworICAgIGludCBsZW47CisgICAgdm9pZCAqZnJvbTsKKyAgICBzb2NrbGVuX3QgKmZyb21sZW47CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIGNoYXIgKmNtc2cgPSBtYWxsb2MoQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pKSk7CisgICAgc3RydWN0IGNtc2doZHIgKmNtOworICAgIHN0cnVjdCBtc2doZHIgbXNnOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIGlvdi5pb3ZfbGVuID0gbGVuOworCisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOworICAgIG1zZy5tc2dfbmFtZSA9IGZyb207CisgICAgbXNnLm1zZ19uYW1lbGVuID0gKmZyb21sZW47CisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICBmb3IgKGNtID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY207IGNtID0gQ01TR19OWFRIRFIoJm1zZywgY20pKSB7CisgICAgICAgIGlmIChjbS0+Y21zZ19sZXZlbCA9PSBTT0xfSVAgJiYgY20tPmNtc2dfdHlwZSA9PSBJUF9QS1RJTkZPKSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyogc3JjID0gKHN0cnVjdCBpbl9wa3RpbmZvICopQ01TR19EQVRBKGNtKTsKKyAgICAgICAgICAgIHByaW50ZigiQWRkcmVzczogJXM7IGluZGV4OiAlZFxuIiwgaW5ldF9udG9hKHNyYy0+aXBpX2FkZHIpLAorCSAgICAgICAgICAgc3JjLT5pcGlfaWZpbmRleCk7CisgICAgICAgIH0KKyAgICB9CitdKV0sCitbYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvPXllc10sCitbYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvPW5vXQorKV0pCitpZiB0ZXN0IHgkYWNfY3ZfaGF2ZV9pcF9wa3RpbmZvID0geHllczsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0lQX1BLVElORk8sIDEsIFtTZXQgaWYgSVBfUEtUSU5GTyBpcyB1c2FibGVdKQorZmkKKworIyAgIENoZWNrIHdoZXRoZXIgSVBfUkVDVkRTVEFERFIgaXMgdXNhYmxlLgorIworCitBQ19DQUNIRV9DSEVDSyhbZm9yIElQX1JFQ1ZEU1RBRERSIF0sCisgICAgICAgICAgICAgICAgW2FjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHJdLAorW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWworI2luY2x1ZGUgPHN0ZGlvLmg+ICAvKiBwcmludGYoKSAqLworI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBtYWxsb2MoKSAqLworI2luY2x1ZGUgPHN0cmluZy5oPiAvKiBtZW1zZXQoKSAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CitdLCBbCisgICAgdm9pZCAqYnVmOworICAgIGludCBsZW47CisgICAgdm9pZCAqZnJvbTsKKyAgICBzb2NrbGVuX3QgKmZyb21sZW47CisKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIGNoYXIgKmNtc2cgPSBtYWxsb2MoQ01TR19TUEFDRShzaXplb2Yoc3RydWN0IGluX2FkZHIpKSk7CisgICAgc3RydWN0IGNtc2doZHIgKmNtOworICAgIHN0cnVjdCBtc2doZHIgbXNnOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIGlvdi5pb3ZfbGVuID0gbGVuOworCisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOworICAgIG1zZy5tc2dfbmFtZSA9IGZyb207CisgICAgbXNnLm1zZ19uYW1lbGVuID0gKmZyb21sZW47CisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICBmb3IgKGNtID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY207IGNtID0gQ01TR19OWFRIRFIoJm1zZywgY20pKSB7CisgICAgICAgIGlmIChjbS0+Y21zZ19sZXZlbCA9PSBJUFBST1RPX0lQICYmIGNtLT5jbXNnX3R5cGUgPT0gSVBfUkVDVkRTVEFERFIpIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyKiBzcmMgPSAoc3RydWN0IGluX2FkZHIgKilDTVNHX0RBVEEoY20pOworICAgICAgICAgICAgcHJpbnRmKCJBZGRyZXNzOiAlc1xuIiwgaW5ldF9udG9hKHNyYykpOworICAgICAgICB9CisgICAgfQorXSldLAorW2FjX2N2X2hhdmVfaXBfcmVjdmRzdGFkZHI9eWVzXSwKK1thY19jdl9oYXZlX2lwX3JlY3Zkc3RhZGRyPW5vXQorKV0pCitpZiB0ZXN0IHgkYWNfY3ZfaGF2ZV9pcF9yZWN2ZHN0YWRkciA9IHh5ZXM7IHRoZW4KKyAgICBBQ19ERUZJTkUoSEFWRV9JUF9SRUNWRFNUQUREUiwgMSwgW1NldCBpZiBJUF9SRUNWRFNUQUREUiBpcyB1c2FibGVdKQorZmkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19wcm9ncwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjAxMzRjCi0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX29zX3Byb2dzCkBAIC0wLDAgKzEsNDM4IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIHByb2dyYW1zCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTaGVsbCBjaGVja3M6CisjIworCisjICAgICAgIENoZWNrIGZvciAnc2gnIG92ZXJmbG93ICAgICAgICAgICAgICAgICAgICAgICAgIChIUC1VWCkKKyMgICAgICAgICAodGFrZW4gZnJvbSBQZXJsJ3MgY29uZmlndXJlIHNjcmlwdCkKKyMKK0FDX01TR19DSEVDS0lORyhbaWYgSSBuZWVkIHRvIGZlZWQgbXlzZWxmIHRvIGtzaF0pCitpZiB0ZXN0IC1mIC9ocC11eCAtYSAtZiAvYmluL2tzaDsgdGhlbgorICBpZiAoUEFUSD0uOyBhbGlhcyAteCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgQUNfTVNHX1JFU1VMVChubykKKyAgZWxzZQorICAgIEFDX01TR19SRVNVTFQoeWVzKQorICAgIGlmIHRlc3QgIngkMSIgPSAieCI7IHRoZW4KKyAgICAgIGV4ZWMgL2Jpbi9rc2ggJDAKKyAgICBlbHNlCisgICAgICBleGVjIC9iaW4va3NoICQwICIkQCIKKyAgICBmaQorICBmaQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKKworCisjIworIyAgIFN0YW5kYXJkIGFuZCBwYXRoIHByb2dyYW0gY2hlY2tzOgorIyMKKworQUNfUFJPR19FR1JFUAorQUNfUFJPR19HUkVQCitBQ19QUk9HX0lOU1RBTEwKK0FDX1BST0dfTE5fUworQUNfUFJPR19NQUtFX1NFVAorQUNfUFJPR19TRUQKKworQUNfQ0hFQ0tfUFJPR1MoW0ZJTEVdLCBbZmlsZV0pCitpZiB0ZXN0IHgkYWNfY3ZfcHJvZ19GSUxFID0geDsgdGhlbgorICAjIFRoZSBmaWxlIHByb2dyYW0gaXMgbm90IGluY2x1ZGVkIGluIHRoZSBkZWZhdWx0IEN5Z3dpbiBzZXR1cCwgYWx0aG91Z2gKKyAgIyB0aGlzIHByb2dyYW0gaXMgZXNzZW50aWFsIGZvciBsaWJ0b29sIHRvIHdvcmsgcHJvcGVybHkuIEl0IGlzIG5vbnRyaXZpYWwKKyAgIyB0byBkZWR1Y2UgZnJvbSB0aGUgbWVzc2FnZSBwcmludGVkIGJ5IGxpYnRvb2wgdGhhdCB0aGUgJ2ZpbGUnIHRvb2wgaXMKKyAgIyBtaXNzaW5nIGFuZCBsaWJ0b29sIGRvZXMgbm90IGFib3J0IHdoZW4gdGhlIGZpbGUgcHJvZ3JhbSBpcyBub3QgZm91bmQuIFNvCisgICMgc3RvcCBub3cgaWYgdGhlIGZpbGUgcHJvZ3JhbSBoYXMgbm90IGJlZW4gZm91bmQuCisgIEFDX01TR19FUlJPUihbZmlsZSBwcm9ncmFtIG5vdCBmb3VuZCBhbHRob3VnaCBpdCBpcyBuZWVkZWQgYnkgbGlidG9vbC5dLCBbMV0pCitmaQorCitBQ19DSEVDS19QUk9HUyhGSU5ELCAgIGZpbmQpCitBQ19DSEVDS19QUk9HUyhXSE9BTUksIHdob2FtaSBsb2duYW1lLCB3aG9hbWkpCisKK0FDX1BBVEhfUFJPRyhBVVRPQ09ORiwgICAgYXV0b2NvbmYpCitBQ19QQVRIX1BST0coQVVUT0hFQURFUiwgIGF1dG9oZWFkZXIpCitBQ19QQVRIX1BST0coW1BFUkxQUk9HXSwgIHBlcmwpCitBQ19QQVRIX1BST0coW1BTUFJPR10sICAgIHBzKQorQUNfUEFUSF9QUk9HKFtQWVRIT05QUk9HXSxweXRob24pCisKK0FDX1BBVEhfUFJPRyhbVU5BTUVQUk9HXSwgdW5hbWUpCitBQ19ERUZJTkVfVU5RVU9URUQoVU5BTUVQUk9HLCIkVU5BTUVQUk9HIiwgW1doZXJlIGlzIHRoZSB1bmFtZSBjb21tYW5kXSkKKworaWYgdGVzdCAieCRhY19jdl9wcm9nX0FVVE9DT05GIiA9ICJ4IjsgdGhlbgorCUFVVE9DT05GPSI6IgorCUFDX1NVQlNUKEFVVE9DT05GKQorZmkKK2lmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPSEVBREVSIiA9ICJ4IjsgdGhlbgorCUFVVE9IRUFERVI9IjoiCisJQUNfU1VCU1QoQVVUT0hFQURFUikKK2ZpCisKK01BS0U9JHtNQUtFLSJtYWtlIn0KKyRNQUtFIC12IC1mIC9kZXYvbnVsbCAyPi9kZXYvbnVsbCB8ICRHUkVQIEdOVSA+L2Rldi9udWxsCitoYXZlX2dudV9tYWtlPSQ/CisKKworIyMKKyMgICBUaGUgUGVybCBmdW5jdGlvbiBzeXN0ZW0oKSBpcyB1c2VkIGZvciBydW5uaW5nIHRoZSBOZXQtU05NUCByZWdyZXNzaW9uCisjICAgdGVzdHMuIEZpbmQgb3V0IHdoZXRoZXIgdGhhdCBmdW5jdGlvbiBpbnZva2VzIGEgUE9TSVggc2hlbGwsIHdoaWNoIGlzCisjICAgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIHJ1biB0aGUgcmVncmVzc2lvbiB0ZXN0cy4gV2hlbiB1c2luZyBXaW5kb3dzICsgTVNZUworIyAgICsgQWN0aXZlU3RhdGUgUGVybCwgUGVybCdzIHN5c3RlbSgpIGZ1bmN0aW9uIGRvZXMgaW52b2tlIFdpbmRvd3MnIGNtZC5leGUKKyMgICB3aGljaCBpcyBub3QgYSBQT1NJWCBzaGVsbC4KKyMjCisKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgUGVybCBmdW5jdGlvbiBzeXN0ZW0oKSBpbnZva2VzIGEgUE9TSVggc2hlbGxdKQoraWYgdGVzdCAieCRQRVJMUFJPRyIgIT0gJ3gnICYmIHRlc3QgLXggIiRQRVJMUFJPRyIgJiYgdGVzdCAieGAkUEVSTFBST0cgLWUgJ3N5c3RlbSgnXCcnZWNobyAkT1NUWVBFJ1wnJyk7J2AiICE9ICd4JE9TVFlQRSc7IHRoZW4KKyAgICBQRVJMX1NZU1RFTV9JTlZPS0VTX1BPU0lYX1NIRUxMPXllcworZWxzZQorICAgIFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTEw9bm8KK2ZpCitBQ19NU0dfUkVTVUxUKFskUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTF0pCitBQ19TVUJTVChbUEVSTF9TWVNURU1fSU5WT0tFU19QT1NJWF9TSEVMTF0pCisKKworIyMKKyMgICBDb21waWxhdGlvbi1yZWxhdGVkIHByb2dyYW0gY2hlY2tzOgorIyMKKworQUNfTEFORyhbQ10pCitBQ19QUk9HX0NDCitBQ19QUk9HX0NQUAorTElOS0NDPSR7TElOS0NDLSIkQ0MifQorQUNfU1VCU1QoTElOS0NDKQorCitBQ19BSVgKK0FDX0NfQ09OU1QKK0FDX0NfSU5MSU5FCisKKyMgICAgICAgbGlidG9vbCBzdHVmZiBmb3Igc2hhcmVkL3N0YXRpYyBsaWJyYXJpZXMuCisjCitMVF9QUkVSRVEoWzIuMi42XSkKK0xUX0lOSVQoW3dpbjMyLWRsbF0pCitBQ19TVUJTVChMSUJUT09MX0RFUFMpCisKKworIyMKKyMgICBCdWlsZCBlbnZpcm9ubWVudDoKKyMjCisKKyMgICBkZXZlbG9wZXIgYnVpbGQgCisjICAgICAgIChlbmFibGVkIGJ5IGRlZmF1bHQgd2hlbiBidWlsZGluZyBmcm9tIFNWTiBjaGVja291dCkKKyMKK2lmIHRlc3QgIngkZGV2ZWxvcGVyIiAhPSAieG5vIiAtYSAtZiAkc3JjZGlyL3JlbW92ZS1maWxlczsgdGhlbgorICAgIGRldmVsb3Blcj0ieWVzIgorZmkKK0FDX01TR19DSEVDS0lORyhbZm9yIGRldmVsb3BlciBnY2MgZmxhZ3NdKQoraWYgdGVzdCAieCRkZXZlbG9wZXIiID0gInh5ZXMiIC1hICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KKworICAgICMgICAgICAgV1dXWFhYIC0gc3RyaWN0IHR5cGUgY2hlY2tpbmcKKyAgICAjCisgICAgREVWRkxBR1M9Ii1XYWxsIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVd3cml0ZS1zdHJpbmdzIC1XY2FzdC1xdWFsIgorZWxzZQorICAgIERFVkZMQUdTPSIiCitmaQorQUNfTVNHX1JFU1VMVCgkREVWRkxBR1MpCitBQ19TVUJTVChERVZGTEFHUykKKworCisjICAgYnVpbGRpbmcgb3V0c2lkZSBzb3VyY2UgZGlyZWN0b3J5CisjCisjICAgICAgIGEpIGVuc3VyZSBidWlsZCBpbmNsdWRlIHBhdGhzIGFyZSBiZWZvcmUgc291cmNlCisjICAgICAgIGIpIGVuc3VyZSBHTlUgbWFrZSB1c2VzICd2cGF0aCcgaW5zdGVhZCBvZiAnVlBBVEgnCisjCitOT05fR05VX1ZQQVRIPSJWUEFUSCA9IgorR05VX3ZwYXRoPSIjdnBhdGgiCisKKyMgICAgICAgZGVmaW5lIGluY2x1ZGUgcGF0aHMgcmVsYXRpdmUgdG8gdG9wX3NyY2RpcgorIyAgICAgICB0d2VhayBpbmNsdWRlcyBpZiB3ZSdyZSBidWlsZGluZyBvdXRzaWRlIG9mIHRoZSBzb3VyY2UgZGlyCisjCitpZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iOyB0aGVuCisgICAgVE9QX0lOQ0xVREVTPVNSQ19UT1BfSU5DTFVERVMKKyAgICBTTk1QTElCX0lOQ0xVREVTPVNSQ19TTk1QTElCX0lOQ0xVREVTCisgICAgQUdFTlRfSU5DTFVERVM9U1JDX0FHRU5UX0lOQ0xVREVTCisgICAgSEVMUEVSX0lOQ0xVREVTPVNSQ19IRUxQRVJfSU5DTFVERVMKKyAgICBNSUJHUk9VUF9JTkNMVURFUz1TUkNfTUlCR1JPVVBfSU5DTFVERVMKK2Vsc2UKKyAgICBUT1BfSU5DTFVERVM9QkxEX1RPUF9JTkNMVURFUworICAgIFNOTVBMSUJfSU5DTFVERVM9QkxEX1NOTVBMSUJfSU5DTFVERVMKKyAgICBBR0VOVF9JTkNMVURFUz1CTERfQUdFTlRfSU5DTFVERVMKKyAgICBIRUxQRVJfSU5DTFVERVM9QkxEX0hFTFBFUl9JTkNMVURFUworICAgIE1JQkdST1VQX0lOQ0xVREVTPUJMRF9NSUJHUk9VUF9JTkNMVURFUworICAgIGlmIHRlc3QgJGhhdmVfZ251X21ha2UgLWVxIDAgOyB0aGVuCisgICAgICAgIE5PTl9HTlVfVlBBVEg9IiNWUEFUSCA9IgorICAgICAgICBHTlVfdnBhdGg9InZwYXRoIgorICAgIGZpCitmaQorQUNfU1VCU1QoVE9QX0lOQ0xVREVTKQorQUNfU1VCU1QoU05NUExJQl9JTkNMVURFUykKK0FDX1NVQlNUKEFHRU5UX0lOQ0xVREVTKQorQUNfU1VCU1QoSEVMUEVSX0lOQ0xVREVTKQorQUNfU1VCU1QoTUlCR1JPVVBfSU5DTFVERVMpCitBQ19TVUJTVChFWFRFUk5BTF9NSUJHUk9VUF9JTkNMVURFUykKK0FDX1NVQlNUKEdOVV92cGF0aCkKK0FDX1NVQlNUKE5PTl9HTlVfVlBBVEgpCisKKworIyMKKyMgICBTeXN0ZW0tcmVsYXRlZCBjb21waWxhdGlvbiBjaGVja3M6CisjIworCisjICAgICAgIFdoYXQgc3lzdGVtIGFyZSB3ZSBidWlsZGluZyBmb3IKKyMKK0FDX0NBTk9OSUNBTF9UQVJHRVQKK2NoYW5nZXF1b3RlKCwgKQorUEFSVElBTFRBUkdFVE9TPWBlY2hvICR0YXJnZXRfb3MgfCBzZWQgJ3MvWy0uX10uKi8vJ2AKK2NoYW5nZXF1b3RlKFssIF0pCitBQ19NU0dfQ0FDSEVfQUREKEJ1aWxkaW5nIGZvcjogICAgICAgICAgICAgICAkUEFSVElBTFRBUkdFVE9TKQorCisKKyMKKyMgICAgV2hldGhlciBvciBub3QgQ3lnd2luJ3MgbGQgcmVjb2duaXplcyB0aGUgZmxhZyAtbm8tdW5kZWZpbmVkLiAKKyMKKworY2FzZSB4JHRhcmdldF9vcyBpbgoreGN5Z3dpbiopCisgIHNhdmVkX0xERkxBR1M9JExERkxBR1MKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIGxpbmtlciBzdXBwb3J0cyAtbm8tdW5kZWZpbmVkXSkKKyAgTERGTEFHUz0iJHNhdmVkX0xERkxBR1MgLVdsLC1uby11bmRlZmluZWQiCisgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKyAgICAgICAgICAgICAgICAgW0FDX01TR19SRVNVTFQoW3llc10pOyBkbmwKKyAgICAgICAgICAgICAgICAgIExEX05PX1VOREVGSU5FRD0tbm8tdW5kZWZpbmVkXSwKKyAgICAgICAgICAgICAgICAgW0FDX01TR19SRVNVTFQoW25vXSldKQorICAKKyAgTERGTEFHUz0iJHNhdmVkX0xERkxBR1MiCisgIDs7Citlc2FjCisKK0FDX1NVQlNUKExEX05PX1VOREVGSU5FRCkKKworCisjCisjICAgU29ja2V0IGxpYnJhcnk6IGVpdGhlciAnZGVmYXVsdCcgKG5vbi1NaW5HVykgb3IgJ3dpbnNvY2syJyAoTWluR1cpLgorIworY2FzZSB4JHRhcmdldF9vcyBpbgorICB4bWluZ3cqKQorICAgIHdpdGhfc29ja2xpYj13aW5zb2NrMgorICAgIGlmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisgICAgICBDRkxBR1M9Ii1EX1dJTjMyX1dJTk5UPTB4MDUwMSAkQ0ZMQUdTIgorICAgIGZpCisgICAgOzsKKyAgKikKKyAgICB3aXRoX3NvY2tsaWI9ZGVmYXVsdDs7Citlc2FjCisKKworIyAgIENoZWNrIHN5c3RlbSBkZWZpbmUgYmVoYXZpb3VyCisjICAgICAgIERvZXMgIi1VeCAtRHg9eCIgd29yayBhcyBleHBlY3RlZD8KKyMKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0byB1bi1kZWZpbmUgdGFyZ2V0IHN5c3RlbSB0b2tlbiAoYmVmb3JlIHJlZGVmaW5pbmcpXSkKK09MRF9DUFBGTEFHUz0iJENQUEZMQUdTIgorQ1BQRkxBR1M9Ii1VJFBBUlRJQUxUQVJHRVRPUyAtRCRQQVJUSUFMVEFSR0VUT1M9JFBBUlRJQUxUQVJHRVRPUyIKKworQUNfRUdSRVBfQ1BQKHllcywKKyAgICBbWworI2lmZGVmICRQQVJUSUFMVEFSR0VUT1MKK3llcworI2VuZGlmCisgICAgXV0sCisgICAgWyAgUEFSVElBTFRBUkdFVEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCisgICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSldLAorICAgIFsgIFBBUlRJQUxUQVJHRVRGTEFHUz0iLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCisgICAgICAgQUNfTVNHX1JFU1VMVChbbm9dKV0pCitDRkxBR1M9IiRDRkxBR1MgJFBBUlRJQUxUQVJHRVRGTEFHUyIKK0NQUEZMQUdTPSIkT0xEX0NQUEZMQUdTIgorCisKKyMgICAgICAgRGV0ZXJtaW5lIGFwcHJvcHJpYXRlIDxuZXQtc25tcC9zeXN0ZW0ve29zfS5oPiBpbmNsdWRlCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXN0ZW0gaW5jbHVkZSBmaWxlXSkKK2NoYW5nZXF1b3RlKCwgKQorZmlsZWJhc2U9JHRhcmdldF9vcworIyBpZ25vcmUgYmluYXJ5IGZvcm1hdCBpbmRpY2F0aW9uCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2VsZi8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvYW91dC8vJ2AKK2ZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvZWNvZmYvLydgCitmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL2NvZmYvLydgCit3aGlsZSB0ZXN0ICJ4JGZpbGViYXNlIiAhPSAieCRsYXN0IiAtYSAhIC1mICRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vJGZpbGViYXNlLmgKK2RvCisgICAgbGFzdD0kZmlsZWJhc2UKKyAgICBmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCAkU0VEICdzL1stLl9dW14tLl9dKiQvLydgCisgICAgaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgorCWZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvWzAtOV0qJC8vJ2AKKyAgICBmaQorZG9uZQorCitpZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCisgICAgZmlsZWJhc2U9ImdlbmVyaWMiCitmaQorYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFPSJuZXQtc25tcC9zeXN0ZW0vJGZpbGViYXNlLmgiCitjaGFuZ2VxdW90ZShbLCBdKQorQUNfTVNHX1JFU1VMVCgkYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFKQorQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSwgIiRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiKQorCisKKyMgICAgICAgRGV0ZXJtaW5lIGFwcHJvcHJpYXRlIDxuZXQtc25tcC9tYWNoaW5lL3tjcHV9Lmg+IGluY2x1ZGUKKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIG1hY2hpbmUtdHlwZSBpbmNsdWRlIGZpbGVdKQorY2hhbmdlcXVvdGUoLCApCitmaWxlYmFzZT0kdGFyZ2V0X2NwdQord2hpbGUgdGVzdCAieCRmaWxlYmFzZSIgIT0gIngkbGFzdCIgLWEgISAtZiAkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS8kZmlsZWJhc2UuaAorZG8KKyAgICBsYXN0PSRmaWxlYmFzZQorICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8ICRTRUQgJ3MvWy0uX11bXi0uX10qJC8vJ2AKK2RvbmUKKworaWYgdGVzdCAieCRmaWxlYmFzZSIgPSAieCRsYXN0IjsgdGhlbgorICAgIGZpbGViYXNlPSJnZW5lcmljIgorZmkKK2FjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEU9Im5ldC1zbm1wL21hY2hpbmUvJGZpbGViYXNlLmgiCitjaGFuZ2VxdW90ZShbLCBdKQorQUNfTVNHX1JFU1VMVChbJGFjX2N2X05FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEVdKQorQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUsICIkYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIpCisKKworIyMKKyMgICBQbGF0Zm9ybS1zcGVjaWZpYyBjb21waWxhdGlvbiBjaGVja3M6CisjIworCisjICAgUHJlcHJvY2Vzc29yIGNoZWNrczoKKyMKKworIyAgICAgICBNb3JlIHNlbnNpYmxlIHN5c3RlbSBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAoTWluR1cpCisjCitpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgorCUNGTEFHUz0iJENGTEFHUyAtRG1pbmd3MzIiCitmaQorCisjICAgICAgIEhhbmRsZSAuaW4gZmlsZSBleHRlbnNpb24gICAgICAgICAgICAgICAgICAgICAgIChHQ0MpCisjCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhZGRpdGlvbmFsIGNwcCBmbGFnc10pCitpZiB0ZXN0ICJ4JEdDQyIgPSAieHllcyIgLWEgIngkQ1BQIiA9ICJ4JENDIC1FIjsgdGhlbgorICAgIEVYVFJBQ1BQRkxBR1M9Ii14IGMiCitlbHNlCisgICAgRVhUUkFDUFBGTEFHUz0iIgorZmkKKworIyAgICAgICBTb2xhcmlzIGV4dHJhIENQUCBmbGFncyAgICAgICAgICAgICAgICAgICAgICAgICAoU29sYXJpcykKKyMKK2lmIHRlc3QgIngkR0NDIiAhPSAieHllcyI7IHRoZW4KKyAgICBjYXNlICR0YXJnZXRfb3MgaW4KKyAgICAgICAgc29sYXJpcyopIEVYVFJBQ1BQRkxBR1M9IiRFWFRSQUNQUEZMQUdTIC1YcyIgOzsKKyAgICBlc2FjCitmaQorCitBQ19TVUJTVChFWFRSQUNQUEZMQUdTKQorQUNfTVNHX1JFU1VMVCgkRVhUUkFDUFBGTEFHUykKKworCisjICAgQ29tcGlsZXIgY2hlY2tzOgorIworCitBQ19QQVRIX1BST0coW0NDUEFUSF0sJENDKQorY2FzZSAkdGFyZ2V0X29zIGluCisgICAgYnNkaSopCisgICAgICAgICMgICBDaGVjayBmb3IgYnVuZGxlZCBjb21waWxlciAgICAgICAgICAgICAgICAgIChCU0RpKQorICAgICAgICAjCisJaWYgdGVzdCAieCRDQ1BBVEgiID0gIngvdXNyL3VjYi9jYyIgLW8gIngkQ0NQQVRIIiA9ICJ4L3Vzci9iaW4vY2MiOyB0aGVuCisJICAgIEFDX01TR19FUlJPUihbCisKKyoqKiBUaGUgQlNESSAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLiAgCisqKiogUGxlYXNlIHJ1biBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9Z2NjCitdKQorCWZpCisgICAgOzsKKyAgICBzb2xhcmlzKikKKyAgICAgICAgIyAgIENoZWNrIGZvciBidW5kbGVkIGNvbXBpbGVyICAgICAgICAgICAgICAgICAgKFNvbGFyaXMpCisgICAgICAgICMKKwlpZiB0ZXN0ICJ4JENDUEFUSCIgPSAieC91c3IvdWNiL2NjIjsgdGhlbgorCSAgICBBQ19NU0dfRVJST1IoWworCisqKiogVGhlIHNvbGFyaXMgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4gIAorKioqIFBsZWFzZSBwdXQgYSBkaWZmZXJlbnQgY29tcGlsZXIgaW4geW91ciBwYXRoIGZpcnN0IG9yIHJ1bgorKioqIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1YWCwgd2hlcmUgWFggaXMgdGhlIGNvbXBpbGVyIHlvdSB3YW50IHRvIHVzZS4KK10pCisJZmkKKyAgICA7OworZXNhYworCisKKyMgICBDb21waWxlciBmbGFnczoKKyMKKworIyBUaGUgTmV0LVNOTVAgc291cmNlIGNvZGUgaXMgbm90IHN0cmljdC1hbGlhc2luZyBzYWZlLCBzbyBhZGQKKyMgLWZuby1zdHJpY3QtYWxpYXNpbmcgdG8gJENGTEFHUyBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgaXQuCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIC1mbm8tc3RyaWN0LWFsaWFzaW5nXSkKK25ldHNubXBfc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCitDRkxBR1M9Ii1mbm8tc3RyaWN0LWFsaWFzaW5nICRDRkxBR1MiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbXSldLCBbQUNfTVNHX1JFU1VMVChbeWVzXSldLCBbCisgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgQ0ZMQUdTPSIkbmV0c25tcF9zYXZlX0NGTEFHUyIKK10pCisKKworIyAgIExpbmtlciBjaGVja3M6CisjCisgICAgCitjYXNlICR0YXJnZXRfb3MgaW4KKyAgICBhaXg0LjIqfGFpeDQuMyp8YWl4NSp8YWl4Nip8YWl4NyopCisgICAgICAgICMgICBSdW50aW1lIGxpbmtpbmcgZmxhZ3MgICAgICAgICAgICAgICAgICAgICAgIChBSVgpCisgICAgICAgICMKKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGF0IGxpbmtlciBmbGFncyB0byBhZGQgdG8gZW5hYmxlIHJ1bnRpbWUgbGlua2luZyBvbiBBSVhdKQorICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KKyAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCisgICAgICAgICAgICAgICAgbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2s9eWVzCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICAgICAgaWYgdGVzdCAiWCRuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vayIgIT0gIlh5ZXMiOyB0aGVuCisJICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgorCSAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLVdsLC1icnRsIgorCSAgICBlbHNlCisgICAgICAgICAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLWJydGwiCisJICAgIGZpCisgICAgICAgICAgICBMREZMQUdTPSIkbmV0c25tcF9haXhfbGRmbGFncyAkTERGTEFHUyIKKwkgICAgQUNfTVNHX1JFU1VMVCgkbmV0c25tcF9haXhfbGRmbGFncykKKwllbHNlCisJICAgIEFDX01TR19SRVNVTFQoW25vbmVdKQorCWZpCisJOzsKKworICAgIGRhcndpbjgqfGRhcndpbjkqfGRhcndpbjEwKnxkYXJ3aW4xMSp8ZGFyd2luMTIqfGRhcndpbjEzKikKKyAgICAgICAgIyAgIEZsYXQgTmFtZXNwYWNlIGxpbmtpbmcgICAgICAgICAgICAgICAgICAgICAgKE1hYyBPUy9YKQorICAgICAgICAjCisgICAgICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciBkYXJ3aW4gbGQgbWlnaHQgbmVlZCAtZmxhdF9uYW1lc3BhY2VdKQorCWlmIHRlc3QgLXogIiRNQUNPU1hfREVQTE9ZTUVOVF9UQVJHRVQiOyB0aGVuCisJCUxERkxBR1M9Ii1mbGF0X25hbWVzcGFjZSAtZnJhbWV3b3JrIENvcmVGb3VuZGF0aW9uIC1mcmFtZXdvcmsgQ29yZVNlcnZpY2VzIC1mcmFtZXdvcmsgRGlza0FyYml0cmF0aW9uIC1mcmFtZXdvcmsgSU9LaXQgJExERkxBR1MiCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJZWxzZQorCQlBQ19NU0dfUkVTVUxUKFtub10pCisJZmkKKwk7OworCisgICAgKikKKyAgICAgICAgOzsKK2VzYWMKKworCisjICAgICAgIGRwa2cgcGFja2FnZSAoc3dpbnRzdF9hcHQpCisjCSAgICB1c2VkIGluIGFnZW50IG9ubHkKKyMKK0FDX1BBVEhfUFJPRyhbRFBLR19RVUVSWV9QQVRIXSwgZHBrZy1xdWVyeSkKK2lmIHRlc3QgeCREUEtHX1FVRVJZX1BBVEggIT0geDsgdGhlbgorICAgIEFDX0RFRklORShIQVZFX0RQS0dfUVVFUlksIDEsIFtTZXQgaWYgdGhlIGRwa2ctcXVlcnkgY29tbWFuZCBpcyBhdmFpbGFibGVdKQorZmkKKworCisjIworIyAgIE5vbi1wcm9ncmFtL2NvbXBpbGF0aW9uIGNoZWNrczoKKyMjCisKKyMgICAgICAgU3Vic3RpdHV0ZSB2ZXJzaW9uIG51bWJlci4KKyMKK0FDX1NVQlNUKFZFUlNJT04sICRQQUNLQUdFX1ZFUlNJT04pCitBQ19NU0dfQ0FDSEVfQUREKE5ldC1TTk1QIFZlcnNpb246ICAgICAgICAgICAkUEFDS0FHRV9WRVJTSU9OKQorCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMgYi9jb25maWd1cmUuZC9jb25maWdfb3Nfc3RydWN0X21lbWJlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y2YjJjMAotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19vc19zdHJ1Y3RfbWVtYmVycwpAQCAtMCwwICsxLDcxNSBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMKKyMgQ2hlY2tzIGZvciBkYXRhIHN0cnVjdHVyZXMgJiBtZW1iZXJzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTaW1wbGUgY2hlY2tzOgorIyMKKworIyAgICAgICBzdHJ1Y3QgYXJwaGQKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBhcnBoZC5hdF9uZXh0XSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19USU1FX0gKKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2VuZGlmCisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSUZfRVRIRVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaWZfZXRoZXIuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBkZXNfa3Nfc3RydWN0CisjICAgICAgICAgKCd3ZWFrX2tleScgaW5kaWNhdGVzIG9sZGVyIHZlcnNpb24gb2YgT3BlblNTTCkKKyMgICBMaWJyYXJ5OgorIworaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9kZXNfaCIgPSAieHllcyIgOyB0aGVuCisgICAgQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGRlc19rc19zdHJ1Y3Qud2Vha19rZXldLCwsW1sKKyNpZmRlZiBIQVZFX09QRU5TU0xfREVTX0gKKyNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgorI2VuZGlmCisgICAgXV0pCitmaQorCisjICAgICAgIHN0cnVjdCBkaXJlbnQKKyMgICAgICAgICAoc2VlIGFsc28gQUNfU1RSVUNUX0RJUkVOVF9EX1RZUEUpCisjICAgTGlicmFyeToKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBkaXJlbnQuZF90eXBlXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IGV0aHRvb2xfY21kCisjCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9saW51eF9ldGh0b29sX2giID0gInh5ZXMiIDsgdGhlbgorQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGV0aHRvb2xfY21kLnNwZWVkX2hpXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9MSU5VWF9FVEhUT09MX0gKKyNpbmNsdWRlIDxsaW51eC9ldGh0b29sLmg+CisjZW5kaWYKKyAgICBdXSkKK2ZpCisKKyMgICAgICAgc3RydWN0IGlwc3RhdAorIyAgIEFnZW50OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlwc3RhdC5pcHNfY2FudGZyYWcsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19kZWxpdmVyZWQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19mcmFnZHJvcHBlZCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX2ZyYWdtZW50ZWQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19sb2NhbG91dCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpcHN0YXQuaXBzX25vcHJvdG8sCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19ub3JvdXRlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfb2Ryb3BwZWQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaXBzdGF0Lmlwc19vZnJhZ21lbnRzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfcmVhc3NlbWJsZWRdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyAgICBdXSkKKyMgICAgICAgc3RydWN0IGlwNnN0YXQKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpcDZzdGF0LmlwNnNfZXh0aGRydG9vbG9uZyBdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVDZfSVA2X1ZBUl9ICisjaW5jbHVkZSA8bmV0aW5ldDYvaXA2X3Zhci5oPgorI2VuZGlmCisgICAgXV0pCisKKyMKKyMgICBOb3QtVXNlZDoKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpcHN0YXQuaXBzX2NhbnRmb3J3YXJkLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlwc3RhdC5pcHNfZnJhZ3RpbWVvdXRdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3QgbWJzdGF0CisjICAgTm90LVVzZWQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgbWJzdGF0Lm1fY2x1c3RlcnMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbWJzdGF0Lm1fY2xmcmVlLAorICAgICAgICAgICAgICAgICAgc3RydWN0IG1ic3RhdC5tX21idWZzXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfTUJVRl9ICisjaW5jbHVkZSA8c3lzL21idWYuaD4KKyNlbmRpZgorICAgIF1dKQorCisjCXN0cnVjdCB1dm1leHAKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCB1dm1leHAucGdzd2FwaW5dLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpbmNsdWRlIDx1dm0vdXZtX2V4dGVybi5oPgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBubGlzdAorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IG5saXN0Lm5fdmFsdWUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgbmxpc3Q2NC5uX3ZhbHVlXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9OTElTVF9ICisjaW5jbHVkZSA8bmxpc3QuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzaWdhY3Rpb24KKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzaWdhY3Rpb24uc2Ffc2lnYWN0aW9uXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU0lHTkFMX0gKKyNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc29ja2FkZHIKKyMgICBMaWJyYXJ5OgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHNvY2thZGRyLnNhX2xlbiwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkci5zYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5zc19mYW1pbHksCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZS5fX3NzX2ZhbWlseV0sLCxbCisgICAgQUNfSU5DTFVERVNfREVGQVVMVCgpCisgICAgWworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VsaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0syX0gpCisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICAgICAoc2VlIFJGQyAyNTUzKQorIyAgIExpYnJhcnk6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfc2NvcGVfaWRdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9XSU5TT0NLMl9ICisjaW5jbHVkZSA8d2luc29jazIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfV1MyVENQSVBfSAorI2luY2x1ZGUgPHdzMnRjcGlwLmg+CisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4KKyMgICBMaWJyYXJ5OgorIworQUNfQ0hFQ0tfU0laRU9GKFtzb2NrYWRkcl91bi5zdW5fcGF0aF0sLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUCisgICAgWworI2lmIEhBVkVfU1lTX1VOX0gKKyNpbmNsdWRlIDxzeXMvdW4uaD4KKyNlbmRpZgorc3RydWN0IHNvY2thZGRyX3VuIHNvY2thZGRyX3VuOworICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzdGF0ZnMKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzdGF0ZnMuZl9mYXZhaWwsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdGZzLmZfZmZyZWUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdGZzLmZfZmlsZXMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdGZzLmZfZmxhZ3MsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdGZzLmZfZnJzaXplXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICisjaW5jbHVkZSA8c3lzL21vdW50Lmg+CisjZW5kaWYgCisjaWZkZWYgSEFWRV9OQlVUSUxfSAorI2luY2x1ZGUgPG5idXRpbC5oPgorI2VuZGlmIAorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBzdGF0dmZzCisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3Qgc3RhdHZmcy5mX2ZpbGVzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXR2ZnMuZl9mcnNpemUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdHZmcy5tbnRfZGlyXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWYgSEFWRV9TWVNfU1RBVEZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUVkZTX0gKKyNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHN3ZGV2dAorIyAgIE5vdC1Vc2VkOgorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IHN3ZGV2dC5zd19uYmxrc2VuYWJsZWRdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19DT05GX0gKKyNpbmNsdWRlIDxzeXMvY29uZi5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHRjcHN0YXQKKyMgICBBZ2VudDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCB0Y3BzdGF0LnRjcF9yY3ZtZW1kcm9wXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfVElNRU9VVF9ICisjaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9UQ1BfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgorI2VuZGlmCisgICAgXV0pCisKKyMgICAgICAgc3RydWN0IHRtCisjICAgTGlicmFyeToKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCB0bS50bV9nbXRvZmZdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKKyAgICBdXSkKKworIyAgICAgICBleHRlcm4gdGltZXpvbmUKK0FDX01TR19DSEVDS0lORyhbZXh0ZXJuIHRpbWV6b25lXSkKK0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW1sKKyNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyMgaW5jbHVkZSA8dGltZS5oPgorI2Vsc2UKKyMgaWYgSEFWRV9TWVNfVElNRV9ICisjICBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBlbHNlCisjICBpbmNsdWRlIDx0aW1lLmg+CisjIGVuZGlmCisjZW5kaWYKK11dLCBbWworICByZXR1cm4gdGltZXpvbmU7CitdXSldLCBbCitBQ19NU0dfUkVTVUxUKFt5ZXNdKQorQUNfREVGSU5FKFtIQVZFX1RJTUVaT05FX1ZBUklBQkxFXSwgWzFdLCBbRGVmaW5lIGlmIGEgdGltZXpvbmUgdmFyaWFibGUgaXMgZGVjbGFyZWQgaW4gPHN5cy90aW1lLmg+XSkKK10sIFsKK0FDX01TR19SRVNVTFQoW25vXSkKK10pCisKKyMgICAgICAgc3RydWN0IHRpbWV6b25lCisjICAgTGlicmFyeToKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCB0aW1lem9uZS50el9kc3R0aW1lXSwsLFsKKyAgICBBQ19JTkNMVURFU19ERUZBVUxUKCkKKyAgICBbCisjaWZkZWYgSEFWRV9TWVNfVElNRUJfSAorIyBpbmNsdWRlIDxzeXMvdGltZWIuaD4KKyNlbmRpZgorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZmRlZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCB1ZHBzdGF0CisjICAgQWdlbnQ6CisjCitBQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgdWRwc3RhdC51ZHBzX2Rpc2NhcmQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRwc3RhdC51ZHBzX2Z1bGxzb2NrLAorICAgICAgICAgICAgICAgICAgc3RydWN0IHVkcHN0YXQudWRwc19ub3BvcnQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRwc3RhdC51ZHBzX25vcG9ydGJjYXN0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IHVkcHN0YXQudWRwc19pcGFja2V0cywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBzdGF0LnVkcHNfb3BhY2tldHNdLCwsWworICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfVURQX0gKKyNpbmNsdWRlIDxuZXRpbmV0L3VkcC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX1VEUF9WQVJfSAorI2luY2x1ZGUgPG5ldGluZXQvdWRwX3Zhci5oPgorI2VuZGlmCisgICAgXV0pCisKKworCisjIworIyAgIGlmbmV0LXJlbGF0ZWQgY2hlY2tzOgorIyMKKworIyAgICAgICBEb2VzICJzdHJ1Y3QgaWZuZXQiIG5lZWQgX0tFUk5FTCBkZWZpbmVkPyAgICAgICAoSXJpeCkKKyMKK0FDX0NBQ0hFX0NIRUNLKFtpZiBfS0VSTkVMIG5lZWRzIHRvIGJlIGRlZmluZWQgZm9yIGlmX210dV0sCisgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUxdLAorICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPXVua25vd24KKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyAgICAgICAgICAgICBdLCBbW3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7XV0pXSwKKyAgICAgICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMPW5vXSkKKyAgICAgICAgIGlmIHRlc3QgIiRhY19jdl9JRk5FVF9ORUVEU19LRVJORUwiID0gdW5rbm93biA7IHRoZW4KKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworI2RlZmluZSBfS0VSTkVMIDEKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICisjaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgorI2VuZGlmCisgICAgICAgICAgICAgXSwgW1tzdHJ1Y3QgaWZuZXQgdGVzdDsgdGVzdC5pZl9tdHUgPSAwO11dKV0sCisgICAgICAgICAgICAgW2FjX2N2X0lGTkVUX05FRURTX0tFUk5FTD15ZXNdKQorICAgICAgICAgZmldKQorCitpZiB0ZXN0ICJ4JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwsIDEsCisgICAgICAgIFtpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZF0pCitmaQorCisjICAgICAgIERvZXMgInN0cnVjdCBpZm5ldCIgbmVlZCBfS0VSTkVMX1NUUlVDVFVSRVMgZGVmaW5lZD8gICAgICAgKERyYWdvbkZseSAzKQorIworQUNfQ0FDSEVfQ0hFQ0soW2lmIF9LRVJORUxfU1RSVUNUVVJFUyBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHVdLAorICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVNdLAorICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVM9dW5rbm93bgorICAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoCisgICAgICAgICAgICAgW0FDX0xBTkdfUFJPR1JBTShbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorICAgICAgICAgICAgIF0sIFtbc3RydWN0IGlmbmV0IHRlc3Q7IHRlc3QuaWZfbXR1ID0gMDtdXSldLAorICAgICAgICAgICAgIFthY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUz1ub10pCisgICAgICAgICBpZiB0ZXN0ICIkYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMiID0gdW5rbm93biA7IHRoZW4KKyAgICAgICAgIEFDX0NPTVBJTEVfSUZFTFNFKAorICAgICAgICAgICAgIFtBQ19MQU5HX1BST0dSQU0oWworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfSAorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKKyNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+CisjZW5kaWYKKyAgICAgICAgICAgICBdLCBbW3N0cnVjdCBpZm5ldCB0ZXN0OyB0ZXN0LmlmX210dSA9IDA7XV0pXSwKKyAgICAgICAgICAgICBbYWNfY3ZfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVM9eWVzXSkKKyAgICAgICAgIGZpXSkKKworaWYgdGVzdCAieCRhY19jdl9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUyIgPSAieHllcyI7IHRoZW4KKyAgICBBQ19ERUZJTkUoTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUywgMSwKKyAgICAgICAgW2lmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTF9TVFJVQ1RVUkVTIGRlZmluZWRdKQorZmkKKworCisjICAgICAgIHN0cnVjdCBpZmFkZHIKKyMgICBOb3QtVXNlZDoKKyMKK0FDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBpZmFkZHIuaWZhX25leHRdLCwsWworICAgIFsKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisgICAgXQorICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQorICAgIFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorICAgIF1dKQorCisjICAgICAgIHN0cnVjdCBpZm5ldAorIyAgICAgICAgIChCcm9rZW4gb24gRnJlZUJTRCAtICNkZWZpbmUnZCBpbiA8bmV0L2lmLmg+KQorIyAgIEFnZW50OiAgICg/b3IgTm90LVVzZWQ/KQorIworQUNfQ0hFQ0tfTUVNQkVSUyhbc3RydWN0IGlmbmV0LmlmX2FkZHJsaXN0LAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2FkZHJoZWFkLnRxaF9maXJzdCwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9iYXVkcmF0ZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9iYXVkcmF0ZS5pZnNfdmFsdWUsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfaWJ5dGVzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX2ltY2FzdHMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfaXFkcm9wcywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9sYXN0Y2hhbmdlLnR2X3NlYywKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl9sYXN0Y2hhbmdlLnR2X25zZWMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfbXR1LAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX25vcHJvdG8sCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfb2J5dGVzLAorICAgICAgICAgICAgICAgICAgc3RydWN0IGlmbmV0LmlmX29tY2FzdHMsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfc3BlZWQsCisgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZuZXQuaWZfdHlwZSwKKyAgICAgICAgICAgICAgICAgIHN0cnVjdCBpZm5ldC5pZl94bmFtZV0sLCxbWworI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMX1NUUlVDVFVSRVMKKyNkZWZpbmUgX0tFUk5FTF9TVFJVQ1RVUkVTIDEKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisjZGVmaW5lIEtFUk5FTAorI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCisjZGVmaW5lIF9LRVJORUwgMQorI2VuZGlmCisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19UWVBFU19ICisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1RJTUVfSAorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAorI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1FVRVVFX0gKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNlbmRpZgorI2lmZGVmIGxpbnV4CitzdHJ1Y3QgaWZuZXQgeworCWNoYXIJKmlmX25hbWU7CQkvKiBuYW1lLCBlLmcuICJlbiIgb3IgImxvIiAqLworCXNob3J0CWlmX3VuaXQ7CQkvKiBzdWItdW5pdCBmb3IgbG93ZXIgbGV2ZWwgZHJpdmVyICovCisJc2hvcnQJaWZfbXR1OwkJCS8qIG1heGltdW0gdHJhbnNtaXNzaW9uIHVuaXQgKi8KKwlzaG9ydAlpZl9mbGFnczsJCS8qIHVwL2Rvd24sIGJyb2FkY2FzdCwgZXRjLiAqLworCWludAlpZl9tZXRyaWM7CQkvKiByb3V0aW5nIG1ldHJpYyAoZXh0ZXJuYWwgb25seSkgKi8KKwljaGFyICAgIGlmX2h3YWRkciBbNl07CQkvKiBldGhlcm5ldCBhZGRyZXNzICovCisJaW50CWlmX3R5cGU7CQkvKiBpbnRlcmZhY2UgdHlwZTogMT1nZW5lcmljLAorCQkJCQkgICAyOD1zbGlwLCBldGhlcj02LCBsb29wYmFjaz0yNCAqLworCWludAlpZl9zcGVlZDsJCS8qIGludGVyZmFjZSBzcGVlZDogaW4gYml0cy9zZWMgKi8KKworCXN0cnVjdCBzb2NrYWRkciBpZl9hZGRyOwkvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlmdV9icm9hZGFkZHI7CS8qIGJyb2FkY2FzdCBhZGRyZXNzICovCisJc3RydWN0IHNvY2thZGRyIGlhX3N1Ym5ldG1hc2s7IAkvKiBpbnRlcmZhY2UncyBtYXNrICovCisKKwlzdHJ1Y3QJaWZxdWV1ZSB7CisJCWludAlpZnFfbGVuOworCQlpbnQJaWZxX2Ryb3BzOworCX0gaWZfc25kOwkJCS8qIG91dHB1dCBxdWV1ZSAqLworCWludAlpZl9pYnl0ZXM7CQkvKiBvY3RldHMgcmVjZWl2ZWQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX2lwYWNrZXRzOwkJLyogcGFja2V0cyByZWNlaXZlZCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfaWVycm9yczsJCS8qIGlucHV0IGVycm9ycyBvbiBpbnRlcmZhY2UgKi8KKyAgICAgICAgaW50ICAgICBpZl9pcWRyb3BzOyAgICAgICAgICAgICAvKiBpbnB1dCBxdWV1ZSBvdmVycnVucyAqLworCWludAlpZl9vYnl0ZXM7CQkvKiBvY3RldHMgc2VudCBvbiBpbnRlcmZhY2UgKi8KKwlpbnQJaWZfb3BhY2tldHM7CQkvKiBwYWNrZXRzIHNlbnQgb24gaW50ZXJmYWNlICovCisJaW50CWlmX29lcnJvcnM7CQkvKiBvdXRwdXQgZXJyb3JzIG9uIGludGVyZmFjZSAqLworCWludAlpZl9jb2xsaXNpb25zOwkJLyogY29sbGlzaW9ucyBvbiBjc21hIGludGVyZmFjZXMgKi8KKy8qIGVuZCBzdGF0aXN0aWNzICovCisJc3RydWN0CWlmbmV0ICppZl9uZXh0OworfTsKKyNlbmRpZgorICAgIF1dKQorCisKKyMgQ2hlY2sgZm9yIEJTRCA0LjMgdnMgNC40IHN0cnVjdCBydGVudHJ5CisjCitBQ19DQUNIRV9DSEVDSyhbdHlwZSBvZiBydGVudHJ5IHN0cnVjdHVyZV0sCisgICAgW2FjX2N2X1JURU5UUllfVFlQRV0sCisgICAgWworICAgICAgICAjIEJTRCA0LjQgY29tcGF0aWJsZSBzdHJ1Y3R1cmUKKyAgICAgICAgIyAgICAoJ3J0X25vZGVzJyBhcnJheSkKKyAgICAgICAgIworICAgICAgICBBQ19UUllfQ09NUElMRShbCisjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUxfU1RSVUNUVVJFUworI2RlZmluZSBfS0VSTkVMX1NUUlVDVFVSRVMgMQorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9JRk5FVF9ORUVEU19LRVJORUwKKyNkZWZpbmUgS0VSTkVMCisjaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKKyNkZWZpbmUgX0tFUk5FTCAxCisjZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyN1bmRlZiBLRVJORUwKKyN1bmRlZiBfS0VSTkVMCisjaW5jbHVkZSA8bmV0L3JvdXRlLmg+CisgICAgICAgIF0sWworCisjaWZuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUCisjZGVmaW5lIHJ0X2RzdCBydF9ub2Rlcy0+cm5fa2V5CisjZW5kaWYKKworICBzdHJ1Y3QgcnRlbnRyeSBydDsgCisgIHJ0LnJ0X25vZGVzWzBdLnJuX2ZsYWdzID0gMTsKKyAgcnQucnRfZHN0OworICAgICAgICBdLCBhY19jdl9SVEVOVFJZX1RZUEU9IkJTRC00LjQiKQorCisgICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4IjsgdGhlbgorICAgICAgICAjIEJTRCA0LjMgY29tcGF0aWJsZSBzdHJ1Y3R1cmUKKyAgICAgICAgIyAgICAoJ3J0X2hhc2gnKQorICAgICAgICAjCisgICAgICAgIEFDX1RSWV9DT01QSUxFKFsKKyNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisjZGVmaW5lIF9LRVJORUxfU1RSVUNUVVJFUyAxCisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTAorI2RlZmluZSBLRVJORUwKKyNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQorI2RlZmluZSBfS0VSTkVMIDEKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI3VuZGVmIEtFUk5FTAorI3VuZGVmIF9LRVJORUwKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyAgICAgICAgXSxbCisKK3N0cnVjdCBydGVudHJ5IHJ0OyAKK3J0LnJ0X2hhc2g7CisgICAgICAgIF0sIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuMyIpCisgICAgICAgIGZpCisKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCisgICAgICAgICMgTmVpdGhlciBCU0QgNC4zIG5vciA0LjQgY29tcGF0aWJsZSBzdHJ1Y3R1cmUKKyAgICAgICAgIworICAgICAgICAgICAgYWNfY3ZfUlRFTlRSWV9UWVBFPSJ1bmtub3duIgorICAgICAgICBmaQorICAgIF0pCisKK2lmIHRlc3QgIngkYWNfY3ZfUlRFTlRSWV9UWVBFIiA9ICJ4QlNELTQuNCI7IHRoZW4KKyAgICBBQ19ERUZJTkUoUlRFTlRSWV80XzQsIDEsIFtVc2UgQlNEIDQuNCByb3V0aW5nIHRhYmxlIGVudHJpZXM/XSkKK2ZpCisKKyMgICAgQ2hlY2sgZm9yIG9ydGVudHJ5ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFscGhhKQorIworaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInh1bmtub3duIjsgdGhlbgorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3Igc3RydWN0IHJ0ZW50cnldLAorICAgICAgICBbYWNfY3Zfc3RydWN0X3J0ZW50cnldLAorICAgICAgICBbQUNfRUdSRVBfQ1BQKG9ydGVudHJ5LAorICAgICAgICAgICAgWworI2RlZmluZSBLRVJORUwKKyNpbmNsdWRlIDxuZXQvcm91dGUuaD4KKyAgICAgICAgICAgIF0sCisgICAgICAgICAgICBbYWNfY3Zfc3RydWN0X3J0ZW50cnk9b3J0ZW50cnldLAorICAgICAgICAgICAgW2FjX2N2X3N0cnVjdF9ydGVudHJ5PXJ0ZW50cnkgXSkKKyAgICAgICAgaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPSAieHJ0ZW50cnkiIDsgdGhlbgorICAgICAgICAgICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgorICAgICAgICBlbHNlCisgICAgICAgICAgICAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9Im9ydGVudHJ5IgorICAgICAgICBmaQorICAgIF0pCitlbHNlCisgICAgUlRFTlRSWV9UWVBFPSJydGVudHJ5IgorICAgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgorZmkKKworaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeSIgPSAieCI7IHRoZW4KKyAgICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT1ydGVudHJ5CitmaQorQUNfREVGSU5FX1VOUVVPVEVEKFJURU5UUlksc3RydWN0ICR7YWNfY3Zfc3RydWN0X3J0ZW50cnl9LAorICAgICAgICBbZGVmaW5lIHJ0ZW50cnkgdG8gb3J0ZW50cnkgb24gU1lTViBtYWNoaW5lcyAoYWxwaGFzKV0pCisKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X2lwdjZfdHlwZXMgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1ODg2YTEKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9pcHY2X3R5cGVzCkBAIC0wLDAgKzEsMjA4IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIHR5cGVzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworCitBQ19DSEVDS19TSVpFT0Yoc2hvcnQpCitBQ19DSEVDS19TSVpFT0YoaW50KQorQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCitBQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQorQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQorCitBQ19UWVBFX0lOVDhfVAorQUNfVFlQRV9JTlQxNl9UCitBQ19UWVBFX0lOVDMyX1QKK0FDX1RZUEVfSU5UNjRfVAorQUNfVFlQRV9JTlRNQVhfVAorQUNfVFlQRV9VSU5UOF9UCitBQ19UWVBFX1VJTlQxNl9UCitBQ19UWVBFX1VJTlQzMl9UCitBQ19UWVBFX1VJTlQ2NF9UCitBQ19UWVBFX1VJTlRNQVhfVAorQUNfVFlQRV9JTlRQVFJfVAorQUNfVFlQRV9VSU5UUFRSX1QKKworIyMKKyMgICBPdGhlciB0eXBlIGNoZWNrczoKKyMjCisKK0FDX0NIRUNLX1RZUEVTKFtvZmY2NF90XSkKK0FDX0NIRUNLX1RZUEVTKFtuZmRzX3RdLCwsWyNpbmNsdWRlIDxzeXMvcG9sbC5oPl0pCisKKyMgICBTb2xhcmlzIHNwZWNpZmljIGNoZWNrcworIyAgICAgICAodGFrZW4gZnJvbSBQZXJsJ3MgY29uZmlndXJlIHNjcmlwdCkKKyMKK0FDX0NIRUNLX1RZUEVTKFtDb3VudGVyNjRdLCwsWyNpbmNsdWRlIDxpbmV0L21pYjIuaD5dKQorQUNfQ0hFQ0tfVFlQRVMoW21pYjJfaXBJZlN0YXRzRW50cnlfdF0sLCxbI2luY2x1ZGUgPGluZXQvbWliMi5oPl0pCisKKyMgICBOLkI6ICBUaGUgYWJvdmUgY2hlY2tzIGNvdWxkIHNhZmVseSBiZSBtb3ZlZCB0bworIyAgICAgICAgIHRoZSBsYXRlciAnY29uZmlnX3R5cGVzJyBzdWItc2NyaXB0CisjCisKKworIyMKKyMgICBEZXRlcm1pbmUgdGhlIElQdjYgc3RhY2sgdHlwZQorIyMKKworIyAgICAgICBUaGVzZSBjaGVja3MgYWxzbyBzZXQgdGhlIExJQlMvQ0ZMQUdTIHZhcmlhYmxlcywKKyMgICAgICAgd2hpY2ggbWF5IGJlIG5lZWRlZCBmb3Igc3Vic2VxdWVudCBmdW5jdGlvbiB0ZXN0cworIworCitpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgorCXY2dHlwZT11bmtub3duCisJdjZsaWI9bm9uZQorCXY2dHJ5bGliYz1ubworCisJQUNfTVNHX0NIRUNLSU5HKFtbaXB2NiBzdGFjayB0eXBlXV0pCisJZm9yIGkgaW4gdjZkIHRvc2hpYmEga2FtZSBpbnJpYSB6ZXRhIGxpbnV4LWdsaWJjIGxpbnV4LWluZXQ2IGN5Z3dpbiB3aW5zb2NrMiBnZW5lcmljOyBkbworCQljYXNlICRpIGluCisJCXY2ZCkKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDwvdXNyL2xvY2FsL3Y2L2luY2x1ZGUvc3lzL3R5cGVzLmg+CisjaWZkZWYgX19WNkRfXworeWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7IHY2bGliPXY2OworCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOworCQkJCUNGTEFHUz0iLUkvdXNyL2xvY2FsL3Y2L2luY2x1ZGUgJENGTEFHUyJdKQorCQkJOzsKKwkJdG9zaGliYSkKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpZmRlZiBfVE9TSElCQV9JTkVUNgoreWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7IHY2bGliPWluZXQ2OworCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKKwkJCTs7CisJCWthbWUpCisJCQlBQ19FR1JFUF9DUFAoeWVzLCBbCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmZGVmIF9fS0FNRV9fCit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsgdjZsaWI9aW5ldDY7CisJCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7CisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisJCQk7OworCQlpbnJpYSkKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWZkZWYgSVBWNl9JTlJJQV9WRVJTSU9OCit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsKKwkJCQl2NmxpYj1kdW1teTsKKwkJCQl2NmxpYmRpcj1ub25lOworCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorCQkJOzsKKwkJemV0YSkKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpZmRlZiBfWkVUQV9NSU5BTUlfSU5FVDYKK0EKK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKKwkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisJCQk7OworCQlsaW51eC1nbGliYykKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDxmZWF0dXJlcy5oPgorI2lmIGRlZmluZWQoX19HTElCQ19fKSAmJiAoKF9fR0xJQkNfXyA9PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxKSB8fCAoX19HTElCQ18gPiAyKSkKK3llcworI2VuZGlmXSwKKwkJCQlbdjZ0eXBlPSRpOworCQkJCXY2bGliPWR1bW15OworCQkJCXY2bGliZGlyPW5vbmU7CisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisJCQk7OworCQlsaW51eC1pbmV0NikKKwkJCWlmIHRlc3QgLWQgL3Vzci9pbmV0NjsgdGhlbgorCQkJCXY2dHlwZT0kaQorCQkJCXY2bGliPWluZXQ2CisJCQkJdjZsaWJkaXI9L3Vzci9pbmV0Ni9saWIKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIgorCQkJZmkKKwkJCTs7CisJCWN5Z3dpbikKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaWZkZWYgX0NZR1dJTl9JTjZfSAoreWVzCisjZW5kaWZdLAorCQkJCVt2NnR5cGU9JGk7CisJCQkJdjZsaWI9ZHVtbXk7CisJCQkJdjZsaWJkaXI9bm9uZQorCQkJCXY2dHJ5bGliYz15ZXM7CisJCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQorICAgICAgICAgICAgICAgICAgICAgICA7OworCQl3aW5zb2NrMikKKwkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKKyNpbmNsdWRlIDx3czJ0Y3BpcC5oPgorI2lmIGRlZmluZWQoX1dTMlRDUElQX0gpCit5ZXMKKyNlbmRpZl0sCisJCQkJW3Y2dHlwZT0kaTsKKwkJCQl2NmxpYj1kdW1teTsKKwkJCQl2NmxpYmRpcj1ub25lCisJCQkJdjZ0cnlsaWJjPXllczsKKwkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCisJCQk7OworCQlnZW5lcmljKQorICAgICAgICAgICAgICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbW3Bvc3Rwb25lZF1dKQorCQkJQUNfQ0hFQ0tfTUVNQkVSKFtzdHJ1Y3Qgc29ja2FkZHJfaW42LnNpbjZfYWRkcl0sLCxbCitBQ19JTkNMVURFU19ERUZBVUxUKCkKK1sjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorXV0pCisJICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbW2lwdjYgc3RhY2sgdHlwZV1dKQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRhY19jdl9tZW1iZXJfc3RydWN0X3NvY2thZGRyX2luNl9zaW42X2FkZHIiID0gInh5ZXMiOyB0aGVuCisJCQkJdjZ0eXBlPSRpCisJCQkJdjZsaWI9ZHVtbXkKKwkJCQl2NmxpYmRpcj1ub25lCisJCQkJdjZ0cnlsaWJjPXllcworCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCisgICAgICAgICAgICAgICAgICAgICAgICBmaQorCQkJOzsKKwkJZXNhYworCQlpZiB0ZXN0ICIkdjZ0eXBlIiAhPSAidW5rbm93biI7IHRoZW4KKwkJCWJyZWFrCisJCWZpCisJZG9uZQorCisJaWYgdGVzdCAiJHY2bGliIiAhPSAibm9uZSI7IHRoZW4KKwkJaWYgdGVzdCAtZCAkdjZsaWJkaXIgLWEgLWYgJHY2bGliZGlyL2xpYiR2NmxpYi5hOyB0aGVuCisJCQlMSUJTPSItTCR2NmxpYmRpciAtbCR2NmxpYiAkTElCUyIKKwkJCWVuYWJsZV9pcHY2PSJ5ZXMiCisJCQlBQ19NU0dfUkVTVUxUKFsiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWIkdjZsaWIiXSkKKwkJZWxpZiB0ZXN0ICIkdjZ0cnlsaWJjIiA9ICJ5ZXMiOyB0aGVuCisJCQllbmFibGVfaXB2Nj0ieWVzIgorCQkJQUNfTVNHX1JFU1VMVChbIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliYyJdKQorCQllbHNlCisJCQlBQ19NU0dfRVJST1Iobm8gSVB2NiBsaWJyYXJ5IGxpYiR2NmxpYi5hIGZvdW5kLikKKwkJCWV4aXQgMQorCQlmaQorCWVsc2UKKwkJZW5hYmxlX2lwdjY9Im5vIgorCQlBQ19NU0dfUkVTVUxUKFsiJHY2dHlwZSwgJGVuYWJsZV9pcHY2Il0pCisJZmkKK2ZpCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9tYW51YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlZmRkMwotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X21hbnVhbApAQCAtMCwwICsxLDE3MCBAQAorIyAtKi0gYXV0b2NvbmYgLSotCisjCisjIFByb21wdCBmb3IgdmFyaW91cyBiaXRzIG9mIHVzZXIgaW5mb3JtYXRpb24KKyMKKworaWYgdGVzdCAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEUiID0gIngiIC1vICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQyIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfQ09OVEFDVCIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAieCI7IHRoZW4KK0FDX0NBQ0hFX0NIRUNLKHdoZXRoZXIgdG8gcHJvbXB0IGZvciB2YWx1ZXMsIGFjX2N2X2hhdmVfd2FybmVkLAorWworaWYgdGVzdCAieCRkZWZhdWx0cyIgPSAieG5vIjsgdGhlbgorQUNfTVNHX05PVElDRShbCisKKwkgKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBTZWN0aW9uICoqKioqKioqKioqKioqCisKKwlZb3UgYXJlIGFib3V0IHRvIGJlIHByb21wdGVkIHdpdGggYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiAgQW5zd2VyCit0aGVtIGNhcmVmdWxseSwgYXMgdGhleSBkZXRlcm1pbmUgaG93IHRoZSBTTk1QIGFnZW50IGFuZCByZWxhdGVkCithcHBsaWNhdGlvbnMgYXJlIHRvIGZ1bmN0aW9uLgorCisJQWZ0ZXIgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmluaXNoZXMsIHlvdSBjYW4gYnJvd3NlIHRoZSBuZXdseQorY3JlYXRlZCBuZXQtc25tcC1jb25maWcuaCBmaWxlIGZvciBmdXJ0aGVyIC0gbGVzcyBpbXBvcnRhbnQgLSBwYXJhbWV0ZXJzIHRvCittb2RpZnkuICBCZSBjYXJlZnVsIGlmIHlvdSByZS1ydW4gY29uZmlndXJlIHRob3VnaCwgc2luY2UgbmV0LXNubXAtY29uZmlnLmggCit3aWxsIGJlIG92ZXJ3cml0dGVuLgorCistUHJlc3MgcmV0dXJuIHRvIGNvbnRpbnVlLQorXSkKKworcmVhZCB0bXBpbnB1dCA8JkFTX09SSUdJTkFMX1NURElOX0ZECithY19jdl9oYXZlX3dhcm5lZD0ieWVzIgorZWxzZQorICBhY19jdl9oYXZlX3dhcm5lZD0ibm8iCitmaQorXSkKK2Vsc2UKKyAgYWNfY3ZfaGF2ZV93YXJuZWQ9InllcyIKK2ZpCisKK01FPWAkV0hPQU1JYAoraWYgdGVzdCAtZiAvZXRjL3Jlc29sdi5jb25mOyB0aGVuCisgIExPQz1gYXdrICcvXmRvbWFpbi97bG9jPSRORn1FTkR7cHJpbnQgbG9jfScgL2V0Yy9yZXNvbHYuY29uZmAKK2ZpCitpZiB0ZXN0ICJ4JExPQyIgPSB4OyB0aGVuCisgIExPQz0iQG5vLndoZXJlIgorZmkKKworQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTixbCisKKyoqKiBEZWZhdWx0IFNOTVAgVmVyc2lvbjoKKworCVN0YXJ0aW5nIHdpdGggTmV0LVNOTVAgNS4wLCB5b3UgY2FuIGNob29zZSB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mCit0aGUgU05NUCBwcm90b2NvbCB0byB1c2Ugd2hlbiBubyB2ZXJzaW9uIGlzIGdpdmVuIGV4cGxpY2l0bHkgb24gdGhlCitjb21tYW5kIGxpbmUsIG9yIHZpYSBhbiAnc25tcC5jb25mJyBmaWxlLiAgSW4gdGhlIHBhc3QgdGhpcyB3YXMgc2V0IHRvCitTTk1QdjEsIGJ1dCB5b3UgY2FuIHVzZSB0aGlzIHRvIHN3aXRjaCB0byBTTk1QdjMgaWYgZGVzaXJlZC4gIFNOTVB2Mword2lsbCBwcm92aWRlIGEgbW9yZSBzZWN1cmUgbWFuYWdlbWVudCBlbnZpcm9ubWVudCAoYW5kIHRodXMgeW91J3JlCitlbmNvdXJhZ2VkIHRvIHN3aXRjaCB0byBTTk1QdjMpLCBidXQgbWF5IGJyZWFrIGV4aXN0aW5nIHNjcmlwdHMgdGhhdAorcmVseSBvbiB0aGUgb2xkIGJlaGF2aW91ci4gIChUaG91Z2ggc3VjaCBzY3JpcHRzIHdpbGwgcHJvYmFibHkgbmVlZCB0bworYmUgY2hhbmdlZCB0byB1c2UgdGhlICctYycgY29tbXVuaXR5IGZsYWcgYW55d2F5LCBhcyB0aGUgU05NUHYxCitjb21tYW5kIGxpbmUgdXNhZ2UgaGFzIGNoYW5nZWQgYXMgd2VsbC4pLgorICAgQXQgdGhpcyBwcm9tcHQgeW91IGNhbiBzZWxlY3QgXCIxXCIsIFwiMlwiIChmb3IgU05NUHYyYyksIG9yIFwiM1wiIGFzCit0aGUgZGVmYXVsdCB2ZXJzaW9uIGZvciB0aGUgY29tbWFuZCB0b29scyAoc25tcGdldCwgLi4uKSB0byB1c2UuICBUaGlzCitjYW4gYWx3YXlzIGJlIG92ZXJyaWRkZW4gYXQgcnVudGltZSB1c2luZyB0aGUgLXYgZmxhZyB0byB0aGUgdG9vbHMsIG9yCitieSB1c2luZyB0aGUgXCJkZWZWZXJzaW9uXCIgdG9rZW4gaW4geW91ciBzbm1wLmNvbmYgZmlsZS4KKyAgIFByb3ZpZGluZyB0aGUgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPVwieFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworRGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlXSwzLHVucXVvdGVkKQorCisjIHdlIHRlc3RlZCB0aGlzIGFib3ZlIGJlZm9yZSB0aGUgcHJvbXB0LCBidXQgdGhlIHByb21wdCBtYXkgZ2l2ZSBhIG5ldyB2YWx1ZS4KK2Nhc2UgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTn0iIGluCisgIFtbMTIzXV0pIDs7CisgIDJjKSBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPTIgOzsKKyAgKikKKyAgICBBQ19NU0dfRVJST1IoW0lsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLl0pCisgICAgOzsKK2VzYWMKKworQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9TWVNfQ09OVEFDVCxbCisKKyoqKiBTeXN0ZW0gQ29udGFjdCBJbmZvcm1hdGlvbjoKKworCURlc2NyaWJlcyB3aG8gc2hvdWxkIGJlIGNvbnRhY3RlZCBhYm91dCB0aGUgaG9zdCB0aGUgYWdlbnQgaXMKK3J1bm5pbmcgb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICBUaGlzCitjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUgXCJzeXNjb250YWN0XCIgc3ludGF4IGluIHRoZSBhZ2VudCdzCitjb25maWd1cmF0aW9uIGZpbGVzLgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtY29udGFjdD1cImNvbnRhY3RcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK1N5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uXSwkTUVAJExPQyxxdW90ZWQpCisKK0FDX1BST01QVF9VU0VSKE5FVFNOTVBfU1lTX0xPQyxbCisKKyoqKiBTeXN0ZW0gTG9jYXRpb246CisKKwlEZXNjcmliZXMgdGhlIGxvY2F0aW9uIG9mIHRoZSBzeXN0ZW0uICBUaGlzIGluZm9ybWF0aW9uIGlzCithdmFpbGFibGUgaW4gdGhlIE1JQi1JSSB0cmVlLiAgdGhpcyBjYW4gYWxzbyBiZSBvdmVyLXJpZGRlbiB1c2luZyB0aGUKK1wic3lzbG9jYXRpb25cIiBzeW50YXggaW4gdGhlIGFnZW50J3MgY29uZmlndXJhdGlvbiBmaWxlcy4KKyAgUHJvdmlkaW5nIHRoZSAtLXdpdGgtc3lzLWxvY2F0aW9uPVwibG9jYXRpb25cIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKK3dpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK1N5c3RlbSBMb2NhdGlvbl0sVW5rbm93bixxdW90ZWQpCisKK2lmIHRlc3QgLWQgL3Zhci9sb2c7IHRoZW4KKyAgZGVmYXVsdGxvZz0iL3Zhci9sb2cvc25tcGQubG9nIgorZWxzZQorICBkZWZhdWx0bG9nPSIvdXNyL2FkbS9zbm1wZC5sb2ciCitmaQorICAKK0FDX1BST01QVF9VU0VSKE5FVFNOTVBfTE9HRklMRSxbCisKKyoqKiBMb2dmaWxlIGxvY2F0aW9uOgorCisJRW50ZXIgdGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoZSBzbm1wZCBhZ2VudCB0byBkdW1wCitpbmZvcm1hdGlvbiAmIGVycm9ycyB0by4gIElmIG5vdCBkZWZpbmVkIChlbnRlciB0aGUga2V5d29yZCBcIm5vbmVcIgorYXQgdGhlIHByb21wdCBiZWxvdykgdGhlIGFnZW50IHdpbGwgdXNlIHN0ZG91dCBhbmQgc3RkZXJyIGluc3RlYWQuCisoTm90ZTogVGhpcyB2YWx1ZSBjYW4gYmUgb3Zlci1yaWRkZW4gdXNpbmcgY29tbWFuZCBsaW5lIG9wdGlvbnMuKQorICBQcm92aWRpbmcgdGhlIC0td2l0aC1sb2dmaWxlPVwicGF0aFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQord2lsbCBhdm9pZCB0aGlzIHByb21wdC4KKworTG9jYXRpb24gdG8gd3JpdGUgbG9nZmlsZV0sJGRlZmF1bHRsb2cscXVvdGVkKQorCitpZiB0ZXN0IC1kIC92YXI7IHRoZW4KKyAgZGVmYXVsdHN0b3JlPSIvdmFyL25ldC1zbm1wIgorICB1Y2RkZWZhdWx0c3RvcmU9Ii92YXIvdWNkLXNubXAiCitlbHNlCisgIGRlZmF1bHRzdG9yZT0iL2V0Yy9uZXQtc25tcCIKKyAgdWNkZGVmYXVsdHN0b3JlPSIvZXRjL3VjZC1zbm1wIgorZmkKKyAgCitBQ19QUk9NUFRfVVNFUihORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZLFsKKworKioqIHNubXBkIHBlcnNpc3RlbnQgc3RvcmFnZSBsb2NhdGlvbjoKKworCUVudGVyIGEgZGlyZWN0b3J5IGZvciB0aGUgU05NUCBsaWJyYXJ5IHRvIHN0b3JlIHBlcnNpc3RlbnQKK2RhdGEgaW4gdGhlIGZvcm0gb2YgYSBjb25maWd1cmF0aW9uIGZpbGUuICBUaGlzIGRlZmF1bHQgbG9jYXRpb24gaXMKK2RpZmZlcmVudCB0aGFuIHRoZSBvbGQgZGVmYXVsdCBsb2NhdGlvbiAod2hpY2ggd2FzIGZvciB1Y2Qtc25tcCkuICBJZgoreW91IHN0YXkgd2l0aCB0aGUgbmV3IHBhdGgsIEknbGwgYXNrIHlvdSBpbiBhIHNlY29uZCBpZiB5b3Ugd2lzaCB0bworY29weSB5b3VyIGZpbGVzIG92ZXIgdG8gdGhlIG5ldyBsb2NhdGlvbiAob25jZSBvbmx5KS4gIElmIHlvdSBwaWNrCitzb21lIG90aGVyIHBhdGggdGhhbiB0aGUgZGVmYXVsdCwgeW91J2xsIGhhdmUgdG8gY29weSB0aGVtIHlvdXJzZWxmLgorVGhlcmUgaXMgbm90aGluZyB3cm9uZyB3aXRoIHBpY2tpbmcgdGhlIG9sZCBwYXRoICgkdWNkZGVmYXVsdHN0b3JlKSBpZgoreW91J2QgcmF0aGVyLgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT1cInBhdGhcIiBwYXJhbWV0ZXIgdG8KKy4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCisKK0xvY2F0aW9uIHRvIHdyaXRlIHBlcnNpc3RlbnQgaW5mb3JtYXRpb25dLCRkZWZhdWx0c3RvcmUscXVvdGVkKQorCitQRVJTSVNURU5UX0RJUkVDVE9SWT0kYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9QRVJTSVNURU5UX0RJUkVDVE9SWQorQUNfU1VCU1QoUEVSU0lTVEVOVF9ESVJFQ1RPUlkpCitVQ0RQRVJTSVNURU5UX0RJUkVDVE9SWT0kdWNkZGVmYXVsdHN0b3JlCitBQ19TVUJTVChVQ0RQRVJTSVNURU5UX0RJUkVDVE9SWSkKKworaWYgdGVzdCAkUEVSU0lTVEVOVF9ESVJFQ1RPUlkgPSAiJGRlZmF1bHRzdG9yZSIgLWEgLWQgIiR1Y2RkZWZhdWx0c3RvcmUiIC1hICEgLWQgIiRkZWZhdWx0c3RvcmUiIDsgdGhlbgorQUNfQ0FDSEVfQ0hFQ0soSWYgd2Ugc2hvdWxkIGNvcHkgdGhlIG9sZCBwZXJzaXN0ZW50IGRpcmVjdG9yeSwgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTLAorWworQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FKGFjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUyxbCisKKyoqKiBDb3B5aW5nIG9sZCB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzIHRvIG5ldC1zbm1wIHBlcnNpc3RlbnQgZGlyZWN0b3J5OgorCisJV291bGQgeW91IGxpa2UgdG8gY29weSB0aGUgb2xkZXIgdWNkLXNubXAgcGVyc2lzdGVudCBmaWxlcworaW50byB5b3VyIG5ldyBuZXQtc25tcCBwZXJzaXN0ZW50IGZpbGUgcGF0aD8gIFRoaXMgd2lsbCBmdW5jdGlvbmFsbHkKK3NhdmUgYWxsIHlvdXIgdWNkLXNubXAgZGF0YSBhbmQgbGV0IGl0IGJlIHVzZWQgd2l0aGluIHRoZSBuZXQtc25tcAordG9vbHMuICBUaGlzIHdpbGwgb25seSBiZSBkb25lIG9uY2Ugd2hlbiB5b3UgcnVuIG1ha2UgaW5zdGFsbC4gIElmIHlvdQord2lzaCB0byBkbyB0aGlzLCBlbnRlciAieWVzIiBhdCB0aGUgcHJvbXB0LgorICBQcm92aWRpbmcgdGhlIC0td2l0aC1jb3B5LXBlcnNpc3RlbnQtZmlsZXM9XCJub1wiIChvciBcInllc1wiKQorcGFyYW1ldGVycyB0byAuL2NvbmZpZ3VyZSB3aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgorCitDb3B5IHVjZC1zbm1wIGRhdGEgaW50byB0aGUgbmV0LXNubXAgZGF0YSBkaXJlY3RvcnldLCJ5ZXMiKQorXSkKK2Vsc2UKK2FjX2N2X3VzZXJfcHJvbXB0X0NPUFlfUEVSU0lTVEVOVF9GSUxFUz0ibm8iCitmaQorQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTIgorQUNfU1VCU1QoQ09QWV9QRVJTSVNURU5UX0ZJTEVTKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF9wYXRocwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjkwYzg0Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGF0aHMKQEAgLTAsMCArMSwxMDEgQEAKKyMgLSotIGF1dG9jb25mIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjCisjIENvbmZpZ3VyZSBwYXRocworIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgUHJlZml4IHBhdGhzOgorIyMKKworIyAgIE1haW4gcHJlZml4CisjCitpZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCisgIHByZWZpeD0vdXNyL2xvY2FsCitmaQorCisjICAgICAgIFByZWZpeCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGgKKyMgICAgICAgICAgIGkuZS4gYmVnaW4gd2l0aCAiLyIgICAgICAgICAgICAgICAgICAgICAgICAgKFVuaXgpCisjICAgICAgICAgICAgICAgIG9yICJbQS1aXToiICAgICAgICAgICAgICAgICAgICAgICAgICAgIChXaW5kb3dzKQorIworZmlyc3RjaGFyPWBlY2hvICRwcmVmaXggfCAkU0VEICdzL1woLlwpLiovXDEvJ2AKK2lmIHRlc3QgIngkZmlyc3RjaGFyIiAhPSAieC8iIDsgdGhlbgorICAgc2Vjb25kY2hhcj1gZWNobyAkcHJlZml4IHwgJFNFRCAncy8uXCguXCkuKi9cMS8nYAorICAgaWYgdGVzdCAieCRzZWNvbmRjaGFyIiAhPSAieDoiIDsgdGhlbgorICAgICAgcHJlZml4PWBwd2RgLyRwcmVmaXgKKyAgICAgIGVjaG8gImFkanVzdGluZyBwcmVmaXggdG8gJHByZWZpeCIKKyAgIGZpCitmaQorCisKKyMgICBFeGVjIHByZWZpeAorIworIyAgICAgICBQcmVmaXggbXVzdCBiZSBhbiBhYnNvbHV0ZSBwYXRoCisjICAgICAgICAgICBpLmUuIGJlZ2luIHdpdGggIi8iICAgICAgICAgICAgICAgICAgICAgICAgIChVbml4KQorIyAgICAgICAgICAgICAgICBvciAiW0EtWl06IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAoV2luZG93cykKKyMKK2lmIHRlc3QgIngkZXhlY19wcmVmaXgiID0gInhOT05FIjsgdGhlbgorICAgZXhlY19wcmVmaXg9JyR7cHJlZml4fScKK2Vsc2UKKyAgIGZpcnN0Y2hhcj1gZWNobyAkZXhlY19wcmVmaXggfCAkU0VEICdzL1woLlwpLiovXDEvJ2AKKyAgIGlmIHRlc3QgIngkZmlyc3RjaGFyIiAhPSAieC8iIDsgdGhlbgorICAgICAgc2Vjb25kY2hhcj1gZWNobyAkZXhlY19wcmVmaXggfCAkU0VEICdzLy5cKC5cKS4qL1wxLydgCisgICAgICBpZiB0ZXN0ICJ4JHNlY29uZGNoYXIiICE9ICJ4OiIgOyB0aGVuCisgICAgICAgICBleGVjX3ByZWZpeD1gcHdkYC8kZXhlY19wcmVmaXgKKyAgICAgICAgIGVjaG8gImFkanVzdGluZyBleGVjX3ByZWZpeCB0byAkZXhlY19wcmVmaXgiCisgICAgICBmaQorICAgZmkKK2ZpCisKKworIyMKKyMgICBFbnZpcm9ubWVudGFsIHZhcmlhYmxlczoKKyMjCisKKyMgICAgICAgU05NUExJQlBBVEgKKyMKK1NOTVBMSUJQQVRIPSIiCit0bXBzZXQ9IiRsaWJkaXIvc25tcCIKK3doaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QTElCUEFUSCI7IGRvCisgICAgU05NUExJQlBBVEg9IiR0bXBzZXQiCisgICAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCitkb25lCitBQ19ERUZJTkVfVU5RVU9URUQoU05NUExJQlBBVEgsIiRTTk1QTElCUEFUSCIpCitBQ19TVUJTVChTTk1QTElCUEFUSCkKK0FDX0RFRklORV9VTlFVT1RFRChTTk1QRExNT0RQQVRILCIkU05NUExJQlBBVEgvZGxtb2QiKQorCisjICAgICAgIFNOTVBTSEFSRVBBVEgKKyMKK1NOTVBTSEFSRVBBVEg9IiIKK3RtcHNldD0iJGRhdGFkaXIvc25tcCIKK3doaWxlIHRlc3QgIngkdG1wc2V0IiAhPSAieCRTTk1QU0hBUkVQQVRIIjsgZG8KKyAgICBTTk1QU0hBUkVQQVRIPSIkdG1wc2V0IgorICAgIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgorZG9uZQorQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBTSEFSRVBBVEgsIiRTTk1QU0hBUkVQQVRIIikKK0FDX1NVQlNUKFNOTVBTSEFSRVBBVEgpCisKKyMgICAgICAgTUlCRElSUyAgIChkZWZhdWx0KQorIworaWYgdGVzdCAieCRORVRTTk1QX0RFRkFVTFRfTUlCRElSUyIgPSAieCI7IHRoZW4KKyAgICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iXCRIT01FLy5zbm1wL21pYnM6JFNOTVBTSEFSRVBBVEgvbWlicyIKKyAgICBpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCisgICAgICAgICMKKyAgICAgICAgIyAgICBVU2UgV2luZG93cy1zdHlsZSBwYXRoIHNlcGFyYXRvcgorICAgICAgICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiB8ICRTRUQgJ3MvOi87L2cnYAorICAgIGZpCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJESVJTLCIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiKQorZmkKK0FDX1NVQlNUKE5FVFNOTVBfREVGQVVMVF9NSUJESVJTKQorCisjICAgICAgIFNOTVBDT05GUEFUSAorIworU05NUENPTkZQQVRIPSIiCit0bXBzZXQ9IiRzeXNjb25mZGlyL3NubXAiCit3aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUENPTkZQQVRIIjsgZG8KKyAgICBTTk1QQ09ORlBBVEg9IiR0bXBzZXQiCisgICAgZXZhbCB0bXBzZXQ9IiR0bXBzZXQiCitkb25lCitBQ19ERUZJTkVfVU5RVU9URUQoU05NUENPTkZQQVRILCIkU05NUENPTkZQQVRIIikKK0FDX1NVQlNUKFNOTVBDT05GUEFUSCkKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3RfcGVybF9weXRob24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNmOGM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3BlcmxfcHl0aG9uCkBAIC0wLDAgKzEsMzc5IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyAgIFBlcmwgJiBQeXRob24gc3VwcG9ydAorIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMjCisjICAgQ2hlY2sgd2hldGhlciBOZXQtU05NUCBjb25maWd1cmF0aW9uIHdpbGwgc3VwcG9ydCBQZXJsCisjIworCisjICAgSW5wdXRzOgorIyAgICAgICBpbnN0YWxsX3Blcmw6ICAgd2hldGhlciBvciBub3QgdG8gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzCisjICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzL25vL3RyeSAgIChpLmUuICdtYXliZScgLSB0aGUgZGVmYXVsdCkKKyMgICAgICAgZW1iZWRfcGVybDogICAgIHdoZXRoZXIgb3Igbm90IHRvIGVtYmVkIFBlcmwgc3VwcG9ydCB3aXRoaW4gdGhlIGFnZW50CisjICAgICAgICAgICAgICAgICAgICAgICAgICAgeWVzL25vL3RyeSAgIChpLmUuICdtYXliZScgLSB0aGUgZGVmYXVsdCkKKyMKKyMgICAgICAgYWNfY3ZfcGF0aF9QRVJMUFJPRzogICAgUGF0aCB0byBwZXJsIGJpbmFyeQorCisKKyMgICAgICAgRW1iZWRkZWQgUGVybCByZXF1aXJlcyBQZXJsIG1vZHVsZXMsIGFuZCB0aGUgcGVybCBiaW5hcnkKKyMKK2lmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCisgICAgICAgIGluc3RhbGxfcGVybD0idHJ5IgorICAgIGZpCisgICAgaWYgdGVzdCAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4IiAtbyAieCRhY19jdl9wYXRoX1BFUkxQUk9HIiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICBmaQorZmkKKworIyAgICAgICBQZXJsIG1vZHVsZXMgcmVxdWlyZSB0aGUgcGVybCBiaW5hcnkKKyMKK2lmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICBteXBlcmw9JGFjX2N2X3BhdGhfUEVSTFBST0cKKyAgICBpZiB0ZXN0ICRteXBlcmwgPSAibm8iIDsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfRVJST1IoLS1lbmFibGUtZW1iZWRkZWQtcGVybCByZXF1ZXN0ZWQgYnV0IG5vIHBlcmwgZXhlY3V0YWJsZSBmb3VuZCkKKyAgICAgICAgZmkKKyAgICBmaQorZmkKKworIyAgICAgICBQZXJsIG1vZHVsZXMgcmVxdWlyZSBzaGFyZWQgbGlicmFyaWVzCisjCitpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgaWYgdGVzdCAieCRlbmFibGVfc2hhcmVkIiAhPSAieHllcyI7IHRoZW4KKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFBlcmwgc3VwcG9ydCByZXF1aXJlcyAtLWVuYWJsZS1zaGFyZWQpCisgICAgICAgIGZpCisgICAgZmkKK2ZpCisKKyMgICAgICAgUGVybCBtb2R1bGVzIGNhbiBvbmx5IGJlIGluc3RhbGxlZCBmcm9tIHdpdGhpbiB0aGUgc291cmNlIHRyZWUKKyMKK2lmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGFyZSBpbiB0aGUgc291cmNlIHRyZWUgc28gd2UgY2FuIGluc3RhbGwgUGVybCBtb2R1bGVzXSkKKyAgICBpZiB0ZXN0ICJ4JHNyY2RpciIgPSAieC4iIC1vIC1kIHBlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZSA7IHRoZW4KKyAgICAgICAgQUNfTVNHX1JFU1VMVChbWWVzXSkKKyAgICBlbHNlCisgICAgICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtOb10pCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEFDX01TR19FUlJPUihbUGVybCBtb2R1bGVzIGNhbiBub3QgYmUgYnVpbHQgb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeV0pCisgICAgICAgIGZpCisgICAgZmkKK2ZpICAgICAgCisKKworIyAgIFRoZSByZXN0IG9mIHRoZSBQZXJsLXJlbGF0ZWQgY2hlY2tzIGFyZW4ndCByZWxldmFudAorIyAgICAgICBpZiB3ZSdyZSBub3QgdXNpbmcgdGhlIFBlcmwgbW9kdWxlcworIworaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorCisKKyMjCisjICAgQ2hlY2sgY29tcGlsZXIgY29tcGF0YWJpbGl0eQorIyMKKworICAgICMgICAgICAgV2hhdCBjb21waWxlciB3YXMgdXNlZCB0byBidWlsZCB0aGUgcGVybCBiaW5hcnk/CisgICAgIworICAgIGlmIHRlc3QgInhlbmFibGVfcGVybF9jY19jaGVja3MiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIGNjXSkKKyAgICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICAgIFBFUkxDQz1gJG15cGVybCAtVjpjYyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50IGlmIChzL15ccypjYz0uKFstPVx3XHNcL10rKS47XHMqLyQxLyk7J2AKKyAgICAgICAgY2hhbmdlcXVvdGUoWywgXSkKKyAgICAgICAgaWYgdGVzdCAieCRQRVJMQ0MiICE9ICJ4IiA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19SRVNVTFQoWyRQRVJMQ0NdKQorICAgICAgICBlbHNlCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgICAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0td2l0aG91dC1wZXJsLW1vZHVsZXMgdG8gYnVpbGQgd2l0aG91dCBQZXJsLl0pCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgICAgIFdhcyBHQ0MgdXNlZCB0byBidWlsZCB0aGUgcGVybCBiaW5hcnk/CisgICAgIworICAgIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyICRQRVJMQ0MgaXMgYSBHTlUgQyBjb21waWxlcl0pCisgICAgICAgIE9MRENDPSRDQworICAgICAgICBDQz0iJFBFUkxDQyIKKyAgICAgICAgQUNfQ09NUElMRV9JRkVMU0UoWworICAgICAgICAgICAgQUNfTEFOR19QUk9HUkFNKFtdLCBbWworI2lmbmRlZiBfX0dOVUNfXworICBjaG9rZSBtZQorI2VuZGlmCisgICAgICAgICAgICBdXSldLCBbcGVybGNjX2lzX2dudT15ZXNdLCBbcGVybGNjX2lzX2dudT1ub10pCisgICAgICAgIEFDX01TR19SRVNVTFQoWyRwZXJsY2NfaXNfZ251XSkKKyAgICAgICAgQ0M9JE9MRENDCisKKyAgICAgICAgIyAgICAgICBDaGVjayBjb21wYXRhYmlsaXR5OiAgR251IE5ldC1TTk1QIHZzIE5vbi1HbnUgcGVybAorICAgICAgICAjCisgICAgICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4bm8iIDsgdGhlbgorICAgICAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgCSAgICAgICAgaW5zdGFsbF9wZXJsPSJubyIKKyAgICAgIAkgICAgZWxzZQorICAgICAgCSAgICAgICAgQUNfTVNHX0VSUk9SKFtUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgbm9uLUdOVSAob3Igbm9uLXdvcmtpbmcpIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLl0pCisgICAgICAJICAgIGZpCisgICAgICAgIGZpCisgICAgZmkKKworICAgICMgICAgICAgQ2hlY2sgY29tcGF0YWJpbGl0eTogIE5vbi1HbnUgTmV0LVNOTVAgdnMgR251IHBlcmwKKyAgICAjCisgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICBpZiB0ZXN0ICJ4JEdDQyIgIT0gInh5ZXMiIC1hICJ4JHBlcmxjY19pc19nbnUiID0gInh5ZXMiIDsgdGhlbgorICAgICAgCSAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAJICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgCSAgICBlbHNlCisgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgbm9uLUdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS5dKQorICAgICAgCSAgICBmaQorICAgICAgICBmaQorICAgIGZpCisKKyAgICAjICAgICAgIEFyZSB3ZSBjbGVhciB0byBwcm9jZWVkPworICAgICMKKyAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgIGluc3RhbGxfcGVybD0ieWVzIgorICAgIGVsc2UKKyAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCisgICAgICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgorICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCisgICAgICAgIGZpCisgICAgZmkKKworCisjIworIyAgIERldGVybWluZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudCBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwKKyMjCisKKyMgICAgICAgU3lzdGVtLXNwZWNpZmljIHJlcXVpcmVtZW50cworIworY2FzZSAkdGFyZ2V0X29zIGluCisgICAgc29sYXJpcyopCisgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgorICAgICAgICAgICMgICBDaGVjayBmb3IgTEFSR0VGSUxFIHN1cHBvcnQgICAgICAgICAgICAgICAoU29sYXJpcykKKyAgICAgICAgICAjCisgICAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgcHJvYmxlbWF0aWMgUGVybCBjYyBmbGFncyBvbiBTdW5zXSkKKyAgICAgICAgICBpZiAkbXlwZXJsIC1WOmNjZmxhZ3MgfCAkR1JFUCBMQVJHRUZJTEUgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgorICAgICAgICAgICAgICBlbWJlZF9wZXJsPSJubyIKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFtQZXJsIHdhcyBjb21waWxlZCB3aXRoIExBUkdFRklMRSBzdXBwb3J0IHdoaWNoIHdpbGwgYnJlYWsgTmV0LVNOTVAuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQorICAgICAgICAgICAgZmkKKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKFtub25lIGtub3duXSkKKyAgICAgICAgICBmaQorICAgICAgZmkKKyAgICA7OworCisgICAgIyBFbWJlZGRlZCBwZXJsIHR5cGljYWxseSBmYWlscyBvbiBIUC1VWCBhbmQgTWFjIE9TIFgKKyAgICAjIFdlIHJlYWxseSBuZWVkIHRvIGludmVzdGlnYXRlIHdoeSwgYW5kIGNoZWNrIGZvciB0aGlzIGV4cGxpY2l0bHkKKyAgICAjIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHR1cm4gdGhpcyBvZmYgYnkgZGVmYXVsdAorICAgIGhwdXgqfGRhcndpbjgqfGRhcndpbjkqfGRhcndpbjEwKikKKyAgICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KKyAgICAgICAgICAgIEFDX01TR19XQVJOKFtFbWJlZGRlZCBwZXJsIGRlZmF1bHRpbmcgdG8gb2ZmXSkKKyAgICAgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgICBmaQorICAgIDs7CisKKyAgICAqKQorICAgIDs7Citlc2FjCisKKyMgICAgICAgQ29tcGlsZXIgZmxhZ3MKKyMKK2lmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBDRkxBR1NdKQorICAgIHBlcmxjZmxhZ3M9YCRteXBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzYAorICAgIGlmIHRlc3QgIngkcGVybGNmbGFncyIgIT0gIngiIDsgdGhlbgorICAgICAgQUNfTVNHX1JFU1VMVChbJHBlcmxjZmxhZ3NdKQorICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRwZXJsY2ZsYWdzIgorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIEMgY29tcGlsZXIgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCisgICAgICBmaQorICAgIGZpCitmaQorCisjICAgICAgIExpbmtlciBmbGFncworIworaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIExERkxBR1NdKQorICAgIG5ldHNubXBfcGVybGxkb3B0cz1gJG15cGVybCAtTUV4dFV0aWxzOjpFbWJlZCAtZSBsZG9wdHNgCisgICAgaWYgdGVzdCAieCRuZXRzbm1wX3BlcmxsZG9wdHMiICE9ICJ4IiA7IHRoZW4KKyAgICAgIEFDX01TR19SRVNVTFQoWyRuZXRzbm1wX3BlcmxsZG9wdHNdKQorICAgIGVsc2UKKyAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGxpbmtlciBvcHRpb25zIHRoYXQgd2VyZSB1c2VkIHRvIGJ1aWxkICRteXBlcmwuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IFBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQorICAgICAgZmkKKyAgICBmaQorICAgIGlmIHRlc3QgIngkZW5hYmxlX2FzX25lZWRlZCIgIT0gInhubyIgOyB0aGVuCisgICAgICAjICAgSnVzdC1pbi10aW1lIGxpbmtpbmcgd2lsbCBlbWJlZCB0aGUgUGVybCBsaWJyYXJ5IHdpdGhpbgorICAgICAgIyAgICAgICB0aGUgTmV0LVNOTVAgbGlicmFyeSAocmF0aGVyIHRoYW4gdGhlIGFnZW50IGFwcGxpY2F0aW9uKQorICAgICAgIworICAgICAgUEVSTExET1BUU19GT1JfTElCUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKKyAgICAgICMgICBQZXJsIGNjZGxmbGFncyAoUlBBVEggdG8gbGlicGVybCwgaG9wZWZ1bGx5KQorICAgICAgIworICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBDQ0RMRkxBR1NdKQorICAgICAgY2hhbmdlcXVvdGUoLCApCisgICAgICBuZXRzbm1wX3BlcmxjY2RsZmxhZ3M9YCRteXBlcmwgLVY6Y2NkbGZsYWdzIHwgJG15cGVybCAtbiAtZSAncHJpbnQgJDEgJyJpZiAoL15ccypjY2RsZmxhZ3M9JyhbXiddKyknOy8pOyJgCisgICAgICBjaGFuZ2VxdW90ZShbLCBdKQorICAgICAgQUNfTVNHX1JFU1VMVChbJG5ldHNubXBfcGVybGNjZGxmbGFnc10pCisgICAgICBQRVJMTERPUFRTX0ZPUl9BUFBTPSIkbmV0c25tcF9wZXJsY2NkbGZsYWdzIgorICAgIGVsc2UKKyAgICAgICMgICBPdGhlcndpc2UgZW1iZWQgdGhlIFBlcmwgbGlicmFyeSB3aXRoaW4gdGhlIGFwcGxpY2F0aW9uCisgICAgICAjCisgICAgICBQRVJMTERPUFRTX0ZPUl9MSUJTPSIkbmV0c25tcF9wZXJsbGRvcHRzIgorICAgICAgIyBsaW5rICphcHBsaWNhdGlvbnMqIGFnYWluc3QgbGlicGVybAorICAgICAgUEVSTExET1BUU19GT1JfQVBQUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKKyAgICBmaQorZmkKKworIyAgICAgICAnUGVybF9ldmFsX3B2JyBmdW5jdGlvbiAoYW5kIGVxdWl2YWxlbnRzKQorIworaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KKyAgICAjICAgVGhyZWUgcG9zc2libGUgdmVyc2lvbnMgb2YgdGhpcyByb3V0aW5lOgorICAgICMgICAgICAgZXZhbF9wdiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodG8gNS4wMDNfOTdkKQorICAgICMgICAgICAgcGVybF9ldmFsX3B2ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoNS4wMDQvNS4wMDUpCisgICAgIyAgICAgICBQZXJsX2V2YWxfcHYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChmcm9tIDUuNmZmKQorICAgICMKKyAgICBPTERMSUJTPSIkTElCUyIKKyAgICBMSUJTPSIkTElCUyAkbmV0c25tcF9wZXJsbGRvcHRzIgorICAgIEFDX0NIRUNLX0ZVTkNTKGV2YWxfcHYpCisgICAgQUNfQ0hFQ0tfRlVOQyhwZXJsX2V2YWxfcHYsCisgICAgICBBQ19ERUZJTkUoSEFWRV9QRVJMX0VWQUxfUFZfTEMsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBgdGhlIHBlcmxfZXZhbF9wdicgZnVuY3Rpb24uXSkpCisgICAgQUNfQ0hFQ0tfRlVOQyhQZXJsX2V2YWxfcHYsCisgICAgICBBQ19ERUZJTkUoSEFWRV9QRVJMX0VWQUxfUFZfVUMsIDEsCisgICAgICAgIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFBlcmxfZXZhbF9wdicgZnVuY3Rpb24uXSkpCisgICAgTElCUz0iJE9MRExJQlMiCisgICAgIworICAgICMgICBOb3RlIHRoYXQgYXV0b2NvbmYgZmxhdHRlbnMgY2FzZSB3aGVuIGRlZmluaW5nIHRva2VucywKKyAgICAjICAgc28gd2UgbmVlZCB0byBleHBsaWNpdGx5IGRpc3Rpbmd1aXNoIGJldHdlZW4gdGhlIGxhdHRlciB0d28uCisKKyAgICBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcGVybF9ldmFsX3B2IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfZnVuY19QZXJsX2V2YWxfcHYiICE9ICJ4eWVzIiAtYSAieCRhY19jdl9mdW5jX2V2YWxfcHYiICE9ICJ4eWVzIiA7IHRoZW4KKyAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCisgICAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgICAgZWxzZQorICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBmaW5kIHRoZSBldmFsX3B2LCBwZXJsX2V2YWxfcHYgb3IgUGVybF9ldmFsX3B2IGZ1bmN0aW9ucyBuZWVkZWQgZm9yIGVtYmVkZGVkIFBlcmwgc3VwcG9ydC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCisgICAgICBmaQorICAgIGVsc2UKKyAgICAgICMgICBBY3RpdmF0ZSBFbWJlZGRlZCBQZXJsCisgICAgICAjCisgICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTUJFRERFRF9QRVJMLCAxLAorICAgICAgICBbRGVmaW5lIGlmIHlvdSBhcmUgZW1iZWRkaW5nIHBlcmwgaW4gdGhlIG1haW4gYWdlbnQuXSkKKyAgICAgIE9USEVSQUdFTlRMSUJPQkpTPSJzbm1wX3BlcmwubyIKKyAgICAgIE9USEVSQUdFTlRMSUJMT0JKUz0ic25tcF9wZXJsLmxvIgorICAgICAgT1RIRVJBR0VOVExJQkxGVFM9InNubXBfcGVybC5mdCIKKworICAgICAgRU1CRURQRVJMSU5TVEFMTD0iZW1iZWRwZXJsaW5zdGFsbCIKKyAgICAgIEVNQkVEUEVSTFVOSU5TVEFMTD0iZW1iZWRwZXJsdW5pbnN0YWxsIgorICAgICAgZW1iZWRfcGVybD0ieWVzIgorICAgIGZpCitlbHNlCisgICAgICBFTUJFRFBFUkxJTlNUQUxMPSIiCisgICAgICBFTUJFRFBFUkxVTklOU1RBTEw9IiIKKyAgICAgIGVtYmVkX3Blcmw9Im5vIgorICAgIGZpCitmaQorCisKKyMjCisjICAgUmVwb3J0IGFuZCBjb25maWd1cmUgcmVzdWx0cworIyMKKworQUNfU1VCU1QoRU1CRURQRVJMSU5TVEFMTCkKK0FDX1NVQlNUKEVNQkVEUEVSTFVOSU5TVEFMTCkKK0FDX1NVQlNUKFBFUkxMRE9QVFNfRk9SX0xJQlMpCitBQ19TVUJTVChQRVJMTERPUFRTX0ZPUl9BUFBTKQorCisjICAgICAgIFJlc3VsdHMgb2YgRW1iZWRkZWQgUGVybCBjaGVja3MKKyMKK0FDX01TR19DSEVDS0lORyhbZm9yIHBvdGVudGlhbCBlbWJlZGRlZCBQZXJsIHN1cHBvcnRdKQoraWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieHllcyIgOyB0aGVuCisgIEFDX01TR19DQUNIRV9BREQoRW1iZWRkZWQgUGVybCBzdXBwb3J0OiAgICAgIGRpc2FibGVkKQorICBBQ19NU0dfUkVTVUxUKFtkaXNhYmxlZF0pCitlbHNlCisgIEFDX01TR19DQUNIRV9BREQoRW1iZWRkZWQgUGVybCBzdXBwb3J0OiAgICAgIGVuYWJsZWQpCisgIEFDX01TR19SRVNVTFQoW2VuYWJsZWRdKQorZmkKKworIyAgICAgICBSZXN1bHRzIG9mIFBlcmwgTW9kdWxlIGNoZWNrcworIworUEVSTFRBUkdTPSIiCitQRVJMSU5TVEFMTFRBUkdTPSIiCitQRVJMVU5JTlNUQUxMVEFSR1M9IiIKK1BFUkxGRUFUVVJFUz0iIgorQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gaW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzXSkKK2lmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4eWVzIiA7IHRoZW4KKyAgICBQRVJMVEFSR1M9InBlcmxtb2R1bGVzIgorICAgIFBFUkxJTlNUQUxMVEFSR1M9InBlcmxpbnN0YWxsIgorICAgIFBFUkxVTklOU1RBTExUQVJHUz0icGVybHVuaW5zdGFsbCIKKyAgICBQRVJMRkVBVFVSRVM9InBlcmxmZWF0dXJlcyIKKyAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh5ZXMiIDsgdGhlbgorICAgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgYnVpbGRpbmcgLS0gZW1iZWRkYWJsZSkKKyAgICAgIEFDX01TR19SRVNVTFQoW3llcyAtLSBhbmQgZW1iZWRkYWJsZV0pCisgICAgZWxzZQorICAgICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgYnVpbGRpbmcgLS0gbm90IGVtYmVkZGFibGUpCisgICAgICBBQ19NU0dfUkVTVUxUKFt5ZXMgLS0gbm90IGVtYmVkZGFibGVdKQorICAgIGZpCitlbHNlCisgICAgQUNfTVNHX1JFU1VMVChbbm9dKQorICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQZXJsIG1vZHVsZXM6ICAgICAgICAgIGRpc2FibGVkKQorZmkKK0FDX1NVQlNUKFBFUkxUQVJHUykKK0FDX1NVQlNUKFBFUkxJTlNUQUxMVEFSR1MpCitBQ19TVUJTVChQRVJMVU5JTlNUQUxMVEFSR1MpCitBQ19TVUJTVChQRVJMQVJHUykKK0FDX1NVQlNUKFBFUkxGRUFUVVJFUykKKworCisjICAgICAgIFJlc2V0IExJQlMgdG8gcHJlLWxpYndyYXAgdmFsdWUgICAoPz8/KQorIworQUdFTlRMSUJTPSRMSUJTCitMSUJTPSROT05BR0VOVExJQlMKKworCisKKyMjCisjICAgUHl0aG9uIGNoZWNrcworIyMKKworUFlUSE9OVEFSR1M9IiIKK1BZVEhPTklOU1RBTExUQVJHUz0iIgorUFlUSE9OVU5JTlNUQUxMVEFSR1M9IiIKK1BZVEhPTkNMRUFOVEFSR1M9IiIKK1BZVEhPTkZFQVRVUkVTPSIiCitBQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIHNob3VsZCBpbnN0YWxsIHRoZSBweXRob24gYmluZGluZ3NdKQoraWYgdGVzdCAieCRpbnN0YWxsX3B5dGhvbiIgPSAieHllcyIgOyB0aGVuCisgICAgUFlUSE9OVEFSR1M9InB5dGhvbm1vZHVsZXMiCisgICAgUFlUSE9OSU5TVEFMTFRBUkdTPSJweXRob25pbnN0YWxsIgorICAgIFBZVEhPTlVOSU5TVEFMTFRBUkdTPSJweXRob251bmluc3RhbGwiCisgICAgUFlUSE9OQ0xFQU5UQVJHUz0icHl0aG9uY2xlYW4iCisgICAgUFlUSE9ORkVBVFVSRVM9InB5dGhvbmZlYXR1cmVzIgorICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQeXRob24gbW9kdWxlczogICAgICAgIGJ1aWxkaW5nIGZvciAkUFlUSE9OUFJPRykKKyAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorICAgIEFDX01TR19DQUNIRV9BREQoU05NUCBQeXRob24gbW9kdWxlczogICAgICAgIGRpc2FibGVkKQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKK2ZpCitBQ19TVUJTVChQWVRIT05UQVJHUykKK0FDX1NVQlNUKFBZVEhPTklOU1RBTExUQVJHUykKK0FDX1NVQlNUKFBZVEhPTlVOSU5TVEFMTFRBUkdTKQorQUNfU1VCU1QoUFlUSE9OQ0xFQU5UQVJHUykKK0FDX1NVQlNUKFBZVEhPTkFSR1MpCitBQ19TVUJTVChQWVRIT05GRUFUVVJFUykKKworCmRpZmYgLS1naXQgYS9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcyBiL2NvbmZpZ3VyZS5kL2NvbmZpZ19wcm9qZWN0X3R5cGVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjOWM4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF90eXBlcwpAQCAtMCwwICsxLDU3IEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyBDaGVja3MgZm9yIHR5cGVzCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTdGFuZGFyZCBjaGVja3M6CisjIworCisjIENoZWNrcyBmb3IgdHlwZWRlZnMsIHN0cnVjdHVyZXMsIGFuZCBjb21waWxlciBjaGFyYWN0ZXJpc3RpY3MuCitBQ19UWVBFX09GRl9UCitBQ19UWVBFX1BJRF9UCitBQ19IRUFERVJfVElNRQorCisKKyMjCisjICAgTW9yZSBjb21wbGV4IGNoZWNrczoKKyMjCisKKyMgICBDaGVjayBmb3IgJ3NvY2tsZW5fdCcgICAgICAgICAgICAgICAgICAgICAgICAgICAoSFAtVVgpCisjCitBQ19DSEVDS19UWVBFUyhbc29ja2xlbl90XSwsLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmXSkKKworCisjICAgQ2hlY2sgZm9yICdpbl9hZGRyX3QnCisjICAgICAgIE1heSBiZSBpbiA8bmV0aW5ldC9pbi5oPiAgICAgICAgICAgICAgICAgICAgICAgIChBSVgpCisjCitBQ19DSEVDS19UWVBFUyhbaW5fYWRkcl90XSwsLFsKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBTVERDX0hFQURFUlMKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNlbmRpZgorI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmXSkKKworCisjICAgQ2hlY2sgZm9yICdzc2l6ZV90JworIyAgICAgICBOb3QgbmVjZXNzYXJpbHkgaW4gPHN5cy90eXBlcy5oPiAgICAgICAgICAgICAgICAob2xkZXIgTWluR1cpCisjCitBQ19DSEVDS19UWVBFUyhbc3NpemVfdF0sLCxbCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgU1REQ19IRUFERVJTCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjZW5kaWZdKQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUgYi9jb25maWd1cmUuZC9jb25maWdfcHJvamVjdF93aXRoX2VuYWJsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MWJhMDI2Ci0tLSAvZGV2L251bGwKKysrIGIvY29uZmlndXJlLmQvY29uZmlnX3Byb2plY3Rfd2l0aF9lbmFibGUKQEAgLTAsMCArMSwxMTUwIEBACisjIC0qLSBhdXRvY29uZiAtKi0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIworIyAgIENvbW1hbmQtbGluZSBwcm9jZXNzaW5nIC0gLS13aXRoLy0tZW5hYmxlCisjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIyMKKyMgICBTeXN0ZW06IENvbXBpbGVyIHNldHRpbmdzCisjIworCitBQ19BUkdfV0lUSChjYywgWworQ29tcGlsZXIgT3B0aW9uczoKKyAgLS13aXRoLWNjPUNDICAgICAgICAgICAgICAgICAgICB1c2UgQ0MgdG8gY29tcGlsZSAoZGVmYXVsdD1nY2MpLl0sCisgICAgW0NDPSR3aXRoX2NjO2V4cG9ydCBDQ10pCisKK0FDX0FSR19XSVRIKGxpbmtjYywgWworICAtLXdpdGgtbGlua2NjPUNDICAgICAgICAgICAgICAgIHVzZSBDQyB0byBsaW5rIChkZWZhdWx0PWdjYykuXSwKKyAgICBbTElOS0NDPSR3aXRoX2xpbmtjYztleHBvcnQgTElOS0NDXSkKKworQUNfQVJHX1dJVEgoYXIsCitbICAtLXdpdGgtYXI9QVIgICAgICAgICAgICAgICAgICAgIHVzZSBBUiBhcyB0aGUgYXJjaGl2ZXIuXSwKKyAgICBbQVI9JHdpdGhfYXI7IGV4cG9ydCBBUl0pCisKK0FDX0FSR19XSVRIKGVuZGlhbm5lc3MsCitbICAtLXdpdGgtZW5kaWFubmVzcz1iaWd8bGl0dGxlICAgIGRlZmluZSBlbmRpYW5uZXNzIG9mIHRhcmdldCBwbGF0Zm9ybSB3aGVuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3Jvc3MtY29tcGlsaW5nLl0sCisgICAgW2lmIHRlc3QgJHdpdGhfZW5kaWFubmVzcyAhPSAiYmlnIiAtYSAkd2l0aF9lbmRpYW5uZXNzICE9ICJsaXR0bGUiIDsgdGhlbgorICAgICAgIEFDX01TR19FUlJPUihbRW5kaWFubmVzcyBtdXN0IGJlIGJpZyBvciBsaXR0bGUsIG5vdCAiJHdpdGhfZW5kaWFubmVzcyIuXSk7CisgICAgIGZpCitdKQorCitBQ19BUkdfV0lUSChjZmxhZ3MsCitbICAtLXdpdGgtY2ZsYWdzPUNGTEFHUyAgICAgICAgICAgIHVzZSBDRkxBR1MgYXMgY29tcGlsZSB0aW1lIGFyZ3VtZW50cy5dLAorICAgIFtDRkxBR1M9JHdpdGhfY2ZsYWdzOyBleHBvcnQgQ0ZMQUdTXSkKKworQUNfQVJHX1dJVEgobGRmbGFncywKK1sgIC0td2l0aC1sZGZsYWdzPUxERkxBR1MgICAgICAgICAgdXNlIExERkxBR1MgYXMgbGluayB0aW1lIGFyZ3VtZW50cyB0byBsZC5dLAorICAgIFtMREZMQUdTPSR3aXRoX2xkZmxhZ3M7IGV4cG9ydCBMREZMQUdTXSkKKworQUNfQVJHX0VOQUJMRShhcy1uZWVkZWQsCitbICAtLWRpc2FibGUtYXMtbmVlZGVkICAgICAgICAgICAgIExpbmsgbGlicGVybCBhZ2FpbnN0IGFwcGxpY2F0aW9ucyByYXRoZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGFuIE5ldC1TTk1QIGxpYnJhcmllcy4gVXNlIG9ubHkgaWYgdGhlIG90aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2F5IGRvZXNuJ3Qgd29yay5dKQorCitBQ19BUkdfV0lUSChsaWJzLAorWyAgLS13aXRoLWxpYnM9TElCUyAgICAgICAgICAgICAgICB1c2UgTElCUyBhcyBsaW5rIHRpbWUgYXJndW1lbnRzIHRvIGxkLl0sCisgICAgW0xJQlM9JHdpdGhfbGliczsgZXhwb3J0IExJQlNdKQorCitBQ19BUkdfRU5BQkxFKHNpbGVudC1saWJ0b29sLAorWyAgLS1lbmFibGUtc2lsZW50LWxpYnRvb2wgICAgICAgICBQYXNzIC0tc2lsZW50IHRvIGxpYnRvb2wuXSwKKwlMSUJUT09MRkxBR1M9LS1zaWxlbnQpCitBQ19TVUJTVChMSUJUT09MRkxBR1MpCisKKworIyMKKyMgICBTeXN0ZW06IExpYnJhcnkgc2V0dGluZ3MKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgoZG1hbGxvYywKKyAgICAgICAgQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1kbWFsbG9jPVBBVEhdLAorICAgICAgICAgICAgICAgIFtVc2UgZG1hbGxvYyBsaWJyYXJ5ICh3d3cuZG1hbGxvYy5jb20pXSkpCisKK05FVFNOTVBfQVJHX1dJVEgoZWZlbmNlLAorWyAgLS13aXRoLWVmZW5jZSAgICAgICAgICAgICAgICAgICBMb29rIGZvciBhbmQgdXNlIGxpYmVmZW5jZSAobWFsbG9jKS5dLAorICAgICAgdXNlX2VmZW5jZT0iJHdpdGh2YWwiKQorCit0cnlyc2FyZWY9bm8KK05FVFNOTVBfQVJHX1dJVEgocnNhcmVmLAorWyAgLS13aXRoLXJzYXJlZj1QQVRIICAgICAgICAgICAgICBMb29rIGZvciBsaWJyc2FyZWYgaW4gUEFUSC9saWIuXSwKKyAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCisgICAgICB0cnlyc2FyZWY9eWVzCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KKyAgICAgIHRyeXJzYXJlZj1ubworICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCisgICAgICB0cnlyc2FyZWY9eWVzCisgICAgZmksCispCisKK3RyeW9wZW5zc2w9ZGVmYXVsdHllcworYXNrZWRvcGVuc3NsPW5vCitORVRTTk1QX0FSR19XSVRIKG9wZW5zc2wsCitbICAtLXdpdGgtb3BlbnNzbD1QQVRIICAgICAgICAgICAgIExvb2sgZm9yIG9wZW5zc2wgaW4gUEFUSC9saWIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3IgUEFUSCBtYXkgYmUgImludGVybmFsIiB0byBidWlsZCB3aXRoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWluaW1hbCBjb3BpZWQgT3BlblNTTCBjb2RlIGZvciBVU00gb25seS5dLAorICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyAgICAgIHRyeW9wZW5zc2w9eWVzCisgICAgICBhc2tlZG9wZW5zc2w9eWVzCisgICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhpbnRlcm5hbCI7IHRoZW4KKyAgICAgIHRyeW9wZW5zc2w9aW50ZXJuYWwKKyAgICAgIGFza2Vkb3BlbnNzbD1pbnRlcm5hbAorICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCisgICAgICB0cnlvcGVuc3NsPW5vCisgICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLWQgIiR3aXRodmFsL2xpYi9NaW5HVyI7IHRoZW4KKyAgICAgICAgTERGTEFHUz0iLUwkd2l0aHZhbC9saWIvTWluR1cgJExERkxBR1MiCisgICAgICAgIENQUEZMQUdTPSItSSR3aXRodmFsL2luY2x1ZGUgJENQUEZMQUdTIgorICAgICAgZWxzZQorICAgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCisgICAgICBmaQorICAgICAgdHJ5b3BlbnNzbD15ZXMKKyAgICAgIGFza2Vkb3BlbnNzbD15ZXMKKyAgICBmaSwKKykKK2lmIHRlc3QgIngkdHJ5b3BlbnNzbCIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCisgICAgICBBQ19BRERfU0VBUkNIX1BBVEgoL3Vzci9sb2NhbC9zc2wpCisgICAgICB0cnlvcGVuc3NsPXllcworZmkKK0FDX0FSR19XSVRIKFtzc2xdLCxORVRTTk1QX0lOVkFMSURfV0lUSChbb3BlbnNzbF0pKQorQUNfQVJHX0VOQUJMRShbc3NsXSwsTkVUU05NUF9JTlZBTElEX1dJVEgoW29wZW5zc2xdKSkKKworYXNrZWRwa2NzPW5vCitORVRTTk1QX0FSR19XSVRIKHBrY3MsCitbICAtLXdpdGgtcGtjcz1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIHBrY3MxMSBpbiBQQVRIL2xpYi5dLAorICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyAgICAgIGFza2VkcGtjcz15ZXMKKyAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgorICAgICAgYXNrZWRwa2NzPW5vCisgICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KKyAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKKyAgICAgIGFza2VkcGtjcz15ZXMKKyAgICBmaSwKKykKKwordHJ5a3JiNT1kZWZhdWx0eWVzCithc2tlZGtyYjU9bm8KK05FVFNOTVBfQVJHX1dJVEgoa3JiNSwKK1sgIC0td2l0aC1rcmI1PVBBVEggICAgICAgICAgICAgICAgTG9vayBmb3Iga3JiNSBpbiBQQVRIL2xpYi5dLAorICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KKyAgICAgIHRyeWtyYjU9eWVzCisgICAgICBhc2tlZGtyYjU9eWVzCisgICAgICBrcmI1cGF0aD11bmRlZgorICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCisgICAgICB0cnlrcmI1PW5vCisgICAgICBrcmI1cGF0aD11bmRlZgorICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCisgICAgICB0cnlrcmI1PXllcworICAgICAgYXNrZWRrcmI1PXllcworICAgICAga3JiNXBhdGg9JHdpdGh2YWwKKyAgICBmaSwKKykKK2lmIHRlc3QgIngkdHJ5a3JiNSIgPSAieGRlZmF1bHR5ZXMiOyB0aGVuCisgICAgICB0cnlrcmI1PXllcworICAgICAga3JiNXBhdGg9L3Vzci9rZXJiZXJvcworZmkKKworQUNfQVJHX1dJVEgoZG5zc2VjLWxvY2FsLXZhbGlkYXRpb24sCisgICAgICAgIFsgIC0td2l0aC1kbnNzZWMtbG9jYWwtdmFsaWRhdGlvbiBFbmFibGUgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gdXNpbmcgbGlidmFsIChubyldLCB3YW50X2Ruc3NlYz0kd2l0aHZhbCwgd2FudF9kbnNzZWM9bm8pCitBQ19BUkdfRU5BQkxFKFtkbnNzZWMtbG9jYWwtdmFsaWRhdGlvbl0sLAorICAgICAgICAgICAgICBORVRTTk1QX0lOVkFMSURfV0lUSChbZG5zc2VjLWxvY2FsLXZhbGlkYXRpb25dKSkKK0FDX0FSR19XSVRIKFtkbnNzZWNdLCxORVRTTk1QX0lOVkFMSURfV0lUSChbZG5zc2VjLWxvY2FsLXZhbGlkYXRpb25dKSkKK0FDX0FSR19FTkFCTEUoW2Ruc3NlY10sLE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtkbnNzZWMtbG9jYWwtdmFsaWRhdGlvbl0pKQorCitORVRTTk1QX0FSR19XSVRIKHJwbSwKK1sgIC0td2l0aG91dC1ycG0gICAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUlBNIHBhY2thZ2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN5c3RlbSB3aGVuIGJ1aWxkaW5nIHRoZSBob3N0IE1JQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5dKQorCisKKyMjCisjICAgUHJvamVjdDogQnVpbGQgY29uZmlndXJhdGlvbiBzZXR0aW5ncworIyMKKworIyAgICAgICBJbnN0YWxsIHByZWZpeAorIworQUNfQVJHX1dJVEgoaW5zdGFsbC1wcmVmaXgsCitbICAtLXdpdGgtaW5zdGFsbC1wcmVmaXg9UEFUSCAgICAgIEp1c3QgZm9yIGluc3RhbGxpbmcsIHByZWZpeCBhbGwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0b3JpZXMgd2l0aCBQQVRILiAgVGhpcyBpcyBrbm93biBub3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB3b3JrIG9uIHNvbWUgc3lzdGVtcyB3aXRoIHNoYXJlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyAoZWcsIEhQVVgpXSwKKyAgICAgIElOU1RBTExfUFJFRklYPSIkd2l0aHZhbCIpCisKK2lmIHRlc3QgIngkSU5TVEFMTF9QUkVGSVgiID0gInh5ZXMiIDsgdGhlbgorICBBQ19NU0dfRVJST1IoWy0td2l0aC1pbnN0YWxsLXByZWZpeCByZXF1aXJlcyBhbiBhcmd1bWVudF0pCitmaQoraWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieG5vIiA7IHRoZW4KKyAgSU5TVEFMTF9QUkVGSVg9IiIKK2ZpCitBQ19TVUJTVChJTlNUQUxMX1BSRUZJWCkKKworCisjCisjICAgU3Vic3lzdGVtcyB0byBidWlsZDoKKyMgICAgICAgTGlicmFyeQorIworRkVBVFVSRUhFQURFUlM9ImxpYnJhcnkvZmVhdHVyZXMuaCIKK0ZUTUFJTlNVQlM9IiIKKworIworIyAgICAgICBBZ2VudAorIworTkVUU05NUF9BUkdfRU5BQkxFKGFnZW50LAorWyAgLS1kaXNhYmxlLWFnZW50ICAgICAgICAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFnZW50IChzbm1wZCkuXSkKK2lmIHRlc3QgIngkZW5hYmxlX2FnZW50IiAhPSAieG5vIjsgdGhlbgorICAgU05NUEQ9J3NubXBkJChFWEVFWFQpJworICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKKyAgIEZFQVRVUkVIRUFERVJTPSIkRkVBVFVSRUhFQURFUlMgYWdlbnQvZmVhdHVyZXMtbWliZ3JvdXBzLmggYWdlbnQvZmVhdHVyZXMuaCIKKyAgIEZUTUFJTlNVQlM9ImFnZW50ICRGVE1BSU5TVUJTIgorICAgVFJBUExJQlM9JyQoVFJBUERXSVRIQUdFTlQpJworICAgVVNFVFJBUExJQlM9JyQoVVNFQUdFTlRMSUJTKScKK2Vsc2UKKyAgIFNOTVBEPSIiCisgICAjIHdlIHN0aWxsIG5lZWQvd2FudCB0aGUgYWdlbnRsaWJzIChmb3Igc3ViYWdlbnRzLCBlLmcuIHNubXB0cmFwZCkKKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCisgICAjIGJ1aWxkaW5nIHNubXB0cmFwZCB3L28gYWdlbnRsaWJzIGRvZXNuJ3Qgd29yayBhdG0KKyAgICNUUkFQTElCUz0nJChUUkFQRFdJVEhPVVRBR0VOVCknCisgICAjVVNFVFJBUExJQlM9JyQoVVNFTElCUyknCisgICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCisgICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJworICAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfQUdFTlRdLCAxLCBbRGVmaW5lIGlmIG5vIGFnZW50IGlzIGJ1aWx0XSkKK2ZpCisKK0FDX1NVQlNUKFNOTVBEKQorQUNfU1VCU1QoVFJBUExJQlMpCitBQ19TVUJTVChVU0VUUkFQTElCUykKKworIyAgICAgICBBcHBsaWNhdGlvbnMKKyMKK05FVFNOTVBfQVJHX0VOQUJMRShhcHBsaWNhdGlvbnMsCitbICAtLWRpc2FibGUtYXBwbGljYXRpb25zICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYXBwcyAoc25tcGdldCwgLi4uKS5dKQoraWYgdGVzdCAieCRlbmFibGVfYXBwbGljYXRpb25zIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhcHBzIgorICAgRkVBVFVSRUhFQURFUlM9IiRGRUFUVVJFSEVBREVSUyBmZWF0dXJlcy1zbm1wbmV0c3RhdC5oIGZlYXR1cmVzLWFwcHMuaCIKKyAgIEZUTUFJTlNVQlM9ImFwcHMgJEZUTUFJTlNVQlMiCitlbHNlCisgICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9BUFBTXSwgMSwgW0RlZmluZSBpZiBubyBhcHBzIGFyZSBidWlsdF0pCitmaQorCisjICAgICAgIE1hbnVhbCBwYWdlcworIworTkVUU05NUF9BUkdfRU5BQkxFKG1hbnVhbHMsCitbICAtLWRpc2FibGUtbWFudWFscyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtYW51YWxzLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9tYW51YWxzIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtYW4iCitmaQorCisjICAgICAgIFN1cHBvcnRpbmcgc2NyaXB0cworIworTkVUU05NUF9BUkdfRU5BQkxFKHNjcmlwdHMsCitbICAtLWRpc2FibGUtc2NyaXB0cyAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBzY3JpcHRzIChtaWIyYywgLi4uKS5dKQoraWYgdGVzdCAieCRlbmFibGVfc2NyaXB0cyIgIT0gInhubyI7IHRoZW4KKyAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbG9jYWwiCitmaQorCisjICAgICAgIE1JQiBmaWxlcworIworQUNfQVJHX0VOQUJMRShtaWJzLAorWyAgLS1kaXNhYmxlLW1pYnMgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWliIGZpbGVzLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9taWJzIiAhPSAieG5vIjsgdGhlbgorICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtaWJzIgorZmkKKyMgd2l0aC1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCisKK0FDX1NVQlNUKE1BSU5TVUJTKQorQUNfU1VCU1QoRlRNQUlOU1VCUykKK0FDX01TR19DSEVDS0lORyhbd2hhdCB0byBidWlsZCBhbmQgaW5zdGFsbF0pCitBQ19NU0dfUkVTVUxUKFskTUFJTlNVQlNdKQorCisKKyMgICAgICAgTUlCIG1vZHVsZSB2YWxpZGF0aW9uIChkdXJpbmcgImNvbmZpZ3VyZSIpCisjCitORVRTTk1QX0FSR19FTkFCTEUobWliLWNvbmZpZy1jaGVja2luZywKK1sgIC0tZW5hYmxlLW1pYi1jb25maWctY2hlY2tpbmcgICAgVHVybnMgb24gZXh0cmEgY2hlY2tzIGR1cmluZyBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgbWliIG1vZHVsZXMuIEFueSBjb25mbGljdHMgd2lsbCBjYXVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSB0byBhYm9ydCAoZGVmYXVsdCBpcyB0byBpc3N1ZSBhCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZyBhbmQgY29udGludWUuKV0sCisgIFtpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAtbyAiJGVuYWJsZXZhbCIgPSBubyA7IHRoZW4KKyAgICAgd2l0aF9taWJfY2ZnX2NoZWNrcz0iJGVuYWJsZXZhbCIKKyAgIGVsc2UKKyAgICAgQUNfTVNHX0VSUk9SKFtQbGVhc2UgdXNlIC0tZW5hYmxlLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nXSkKKyAgIGZpXSwKKyAgW3dpdGhfbWliX2NmZ19jaGVja3M9Im5vIl0pCisKK05FVFNOTVBfQVJHX0VOQUJMRShtaWItY29uZmlnLWRlYnVnLAorWyAgLS1lbmFibGUtbWliLWNvbmZpZy1kZWJ1ZyAgICAgICBUdXJucyBvbiB2ZXJib3NlIG91dHB1dCBkdXJpbmcgbWliIG1vZHVsZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyZSBwcm9jZXNzaW5nLl0sCisgIFtpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyAtbyAiJGVuYWJsZXZhbCIgPSBubyA7IHRoZW4KKyAgICAgd2l0aF9taWJfY2ZnX2RlYnVnPSIkZW5hYmxldmFsIgorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLW1pYi1jb25maWctZGVidWddKQorICAgZmldLAorICBbd2l0aF9taWJfY2ZnX2RlYnVnPSJubyJdKQorCisKKyMgICAgICAgVmVyc2lvbi1zcGVjaWZpYyBmZWF0dXJlcworIworQUNfQVJHX0VOQUJMRShbbmV3LWZlYXR1cmVzXSwKKyAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1uZXctZmVhdHVyZXNdLAorICAgICAgICAgICAgICAgIFtDb21waWxlIGluIG5ldyBNSUIgbW9kdWxlcyBhbmQgb3RoZXIgZXhwZXJpbWVudGFsIGZlYXR1cmVzCisgICAgICAgICAgICAgICAgIHdoaWNoIGFyZSBkdWUgdG8gYmUgaW5jbHVkZWQgaW4gZnV0dXJlIHJlbGVhc2VzLl0pXSkKKworQUNfQVJHX0VOQUJMRShbb2xkLWZlYXR1cmVzXSwKKyAgICAgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1vbGQtZmVhdHVyZXNdLAorICAgICAgICAgICAgICAgIFtDb21waWxlIGluIG9sZCBNSUIgbW9kdWxlcyBhbmQgb3RoZXIgZGVwcmVjYXRlZCBmZWF0dXJlcworICAgICAgICAgICAgICAgICB3aGljaCB3ZXJlIHJlcGxhY2VkIGluIHRoZSBkZWZhdWx0IGJ1aWxkIG9mIHRoaXMgcmVsZWFzZS5dKV0pCisKK0FDX0FSR19XSVRIKFtmZWF0dXJlcy1vZl0sCisgICAgICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWZlYXR1cmVzLW9mPXZlcnNpb25dLAorICAgICAgICAgICAgICAgIFtDb21waWxlIGluIE1JQiBtb2R1bGVzIGFuZCBvdGhlciBmZWF0dXJlcyBhcyBpZiB0aGlzIHdhcworICAgICAgICAgICAgICAgICByZWxlYXNlICJ2ZXJzaW9uIiAoZGVmYXVsdCBpcyBdQUNfUEFDS0FHRV9WRVJTSU9OWykuXSldLCwKKyAgICAgICAgW3dpdGhfZmVhdHVyZXNfb2Y9JFBBQ0tBR0VfVkVSU0lPTl0pCisgICAKKworIyAgICAgICBNYW51YWwgcHJvbXB0aW5nIGR1cmluZyAiY29uZmlndXJlIgorIworTkVUU05NUF9BUkdfV0lUSChkZWZhdWx0cywKK1sKK01pc2NlbGxhbmVvdXM6CisgIC0td2l0aC1kZWZhdWx0cyAgICAgICAgIFVzZSBkZWZhdWx0cyBmb3IgcHJvbXB0ZWQgdmFsdWVzLl0sCisgIFtpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXMgLW8gIiR3aXRodmFsIiA9IG5vIDsgdGhlbgorICAgICBkZWZhdWx0cz0iJHdpdGh2YWwiCisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHVzZSAtLXdpdGgvLS13aXRob3V0LWRlZmF1bHRzXSkKKyAgIGZpXSwKKyAgW2RlZmF1bHRzPSJubyJdKQorCisKKyMgICAgICAgVUNEIGNvbXBhdGFiaWxpdHkKKyMKK05FVFNOTVBfQVJHX0VOQUJMRSh1Y2Qtc25tcC1jb21wYXRpYmlsaXR5LAorWyAgLS1lbmFibGUtdWNkLXNubXAtY29tcGF0aWJpbGl0eSBJbnN0YWxsIHVjZC1zbm1wIGxvb2stYWxpa2UgaGVhZGVycyBhbmQgbGlicy4KK10pCisKK2lmIHRlc3QgIngkZW5hYmxlX3VjZF9zbm1wX2NvbXBhdGliaWxpdHkiID0gInh5ZXMiIDsgdGhlbgkKKyAgaW5zdGFsbHVjZGhlYWRlcnM9aW5zdGFsbHVjZGhlYWRlcnMKKyAgaW5zdGFsbHVjZGxpYnM9aW5zdGFsbHVjZGxpYnMKKyAgQUNfTVNHX0NBQ0hFX0FERChVQ0QtU05NUCBjb21wYXRhYmlsaXR5OiAgICAgZW5hYmxlZCkKK2ZpCitBQ19TVUJTVChpbnN0YWxsdWNkaGVhZGVycykKK0FDX1NVQlNUKGluc3RhbGx1Y2RsaWJzKQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogTUlCIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKyMjCisKK05FVFNOTVBfQVJHX0VOQUJMRShtaWItbG9hZGluZywKK1sgIC0tZGlzYWJsZS1taWItbG9hZGluZyAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IHBhcnNlcyBhbmQgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFuaXB1bGF0ZXMgdGhlIG1pYiBmaWxlcy5dKQoraWYgdGVzdCAieCRlbmFibGVfbWliX2xvYWRpbmciID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkddLCAxLCAKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgbWliIGxvYWRpbmcgYW5kIHBhcnNpbmcgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXSkKK2ZpCisKK05FVFNOTVBfQVJHX1dJVEgobWliZGlycywKK1sgIC0td2l0aC1taWJkaXJzPSJkaXIxOmRpcjI6IiAgIERlZmF1bHQgZGlyZWN0b3JpZXMgdG8gbG9vayBmb3IgbWlicy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogXCRIT01FLy5zbm1wL21pYnM6REFUQURJUi9zbm1wL21pYnMpXSwKKyAgICBbTkVUU05NUF9ERUZBVUxUX01JQkRJUlM9IiR3aXRoX21pYmRpcnMiCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9NSUJESVJTLCIkd2l0aF9taWJkaXJzIiwKKyAgICAgICAgW2RlZmF1bHQgbG9jYXRpb24gdG8gbG9vayBmb3IgbWlicyB0byBsb2FkIHVzaW5nIHRoZSBhYm92ZSB0b2tlbnMKKyAgICAgICAgIGFuZC9vciB0aG9zZSBpbiB0aGUgTUlCUyBlbnZyaW9ubWVudCB2YXJpYWJsZV0pXSkKKworQUNfQVJHX1dJVEgobWlicywKK1sgIC0td2l0aC1taWJzPSJpdGVtMTppdGVtMjoiICAgIERlZmF1bHQgbWliIElEcyB0byByZWFkLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChUaGUgZGVmYXVsdCBsaXN0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTTk1QdjItTUlCOklGLU1JQjpJUC1NSUI6VENQLU1JQjpVRFAtTUlCIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGFueSBtaWJzIHVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgbWliIG1vZHVsZXMgdGhlIGFnZW50IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB3aXRoKV0sCisgICAgTkVUU05NUF9ERUZBVUxUX01JQlM9IiR3aXRoX21pYnMiKQorIyBlbmFibGUtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQorCitORVRTTk1QX0FSR19XSVRIKG1pYmZpbGVzLAorWyAgLS13aXRoLW1pYmZpbGVzPSJmaWxlMTpmaWxlMiIgRGVmYXVsdCBtaWIgZmlsZXMgdG8gbG9hZC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogIG5vbmUuICB1c2VzIElEcyBhYm92ZSBpbnN0ZWFkLildLAorICAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCRklMRVMsIiR3aXRoX21pYmZpbGVzIiwKKyAgICAgICAgW2RlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQsIHNwZWNpZmllZCBieSBwYXRoLl0pKQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogU2VjdXJpdHkgY29uZmlndXJhdGlvbgorIyMKKworTkVUU05NUF9BUkdfRU5BQkxFKGRlcywKK1sgIC0tZGlzYWJsZS1kZXMgICAgICAgICAgICAgICAgICAgRG8gbm90IHN1cHBvcnQgREVTIGVuY3J5cHRpb24uXSkKK2lmIHRlc3QgIngkZW5hYmxlX2RlcyIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9ERVNdLCAxLCAKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgREVTIGVuY3J5cHRpb24gc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWRdKQorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKHByaXZhY3ksCitbICAtLWRpc2FibGUtcHJpdmFjeSAgICAgICAgICAgICAgIERvbid0IGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgcHJpdmFjeSAoZW5jcnlwdGlvbikuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3ByaXZhY3kiICE9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJViwgMSwKKyAgICBbZGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgYm90aCBhdXRoZW50aWNhdGlvbiBhbmQKKyAgICAgcHJpdmFjeSBzdXBwb3J0Ll0pCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUobWQ1LAorWyAgLS1kaXNhYmxlLW1kNSAgICAgICAgICAgICAgICAgICBEbyBub3Qgc3VwcG9ydCBNRDUgYXV0aGVudGljYXRpb24uXSkKK2lmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9NRDVdLCAxLCAKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgTUQ1IGF1dGhlbnRpY2F0aW9uIHNob3VsZCBub3QgYmUgc3VwcG9ydGVkXSkKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShpbnRlcm5hbC1tZDUsCitbICAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgICAgICAgICAgIFVzZSB0aGUgaW50ZXJuYWwgTUQ1IHN1cHBvcnQuXSkKK2lmIHRlc3QgIngkZW5hYmxlX2ludGVybmFsX21kNSIgPSAieHllcyI7IHRoZW4KKyAgaWYgdGVzdCAieCRlbmFibGVfbWQ1IiA9ICJ4bm8iOyB0aGVuCisgICAgQUNfTVNHX0VSUk9SKFlvdSBjYW4gbm90IHNwZWNpZnkgYm90aCAtLWVuYWJsZS1pbnRlcm5hbC1tZDUgYW5kIC0tZGlzYWJsZS1tZDUpCisgIGVsc2UKKyAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1LCAxLAorICAgICAgW2RlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBNRDUgY29kZSAuLi5dKQorICBmaQorZmkKKworCisjIworIyAgIFByb2plY3Q6IExpYnJhcnk6IE1pc2MgY29uZmlndXJhdGlvbgorIyMKKworTkVUU05NUF9BUkdfV0lUSChvcGFxdWUtc3BlY2lhbC10eXBlcywKK1sgIC0td2l0aG91dC1vcGFxdWUtc3BlY2lhbC10eXBlcyAgRG9uJ3QgdXNlIHNwZWNpYWwgb3BhcXVlIGVuY29kaW5ncy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIG5vcm1hbGx5IGNhbm5vdCBoYW5kbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdGluZyBudW1iZXJzLCBub3IgbGFyZ2UgNjQgYml0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ZWdlcnMgd2VsbC4gIEJ5IGRlZmF1bHQsIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldC1zbm1wIHBhY2thZ2UgY29tcGlsZXMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGVzZSBleHRyYSBkYXRhdHlwZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW4gYSBsZWdhbCB3YXkpXSkKKyMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuCitpZiB0ZXN0ICJ4JHdpdGhfb3BhcXVlX3NwZWNpYWxfdHlwZXMiICE9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMsIDEsCisgICAgW1Nob3VsZCB3ZSBjb21waWxlIHRvIHVzZSBzcGVjaWFsIG9wYXF1ZSB0eXBlczogZmxvYXQsIGRvdWJsZSwgY291bnRlcjY0LAorICAgICBpNjQsIHVpNjQsIHVuaW9uP10pCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUoaXB2NiwKK1sgIC0tZW5hYmxlLWlwdjYgICAgICAgICAgICAgICAgICAgR2VuZXJhdGUgSVB2NiByZWFkeSB2ZXJzaW9uLl0sCisgICAgW2lmIHRlc3QgIngkZW5hYmxlX2lwdjYiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfSVBWNiwgMSwKKyAgICAgICAgW2RlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0XSkKKyAgICBmaV0pCisKK05FVFNOTVBfQVJHX1dJVEgobG9nZmlsZSwKK1sgIC0td2l0aC1sb2dmaWxlPSJsb2NhdGlvbiIgICAgICAgRGVmYXVsdCBsb2cgZmlsZSBsb2NhdGlvbiBmb3Igc25tcGQuXSwKKyAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9IiR3aXRoX2xvZ2ZpbGUiKQoraWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAibm8iOyB0aGVuCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSJub25lIgorZmkKKworTkVUU05NUF9BUkdfV0lUSChwZXJzaXN0ZW50LWRpcmVjdG9yeSwKK1sgIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeT0iZGlyZWN0b3J5IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlZmF1bHQgZGlyZWN0b3J5IGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS5dLGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlk9IiR3aXRoX3BlcnNpc3RlbnRfZGlyZWN0b3J5IikKKworTkVUU05NUF9BUkdfV0lUSChwZXJzaXN0ZW50LW1hc2ssCitbICAtLXdpdGgtcGVyc2lzdGVudC1tYXNrPSJtYXNrIiAgRGVmYXVsdCBtYXNrIGZvciBwZXJzaXN0ZW50IGRhdGEgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMDc3KV0sCisgIFtpZiB0ZXN0IFtgZXhwciAiWCR3aXRodmFsIiA6ICdYWzAtN10qJCdgXSAtZXEgNCA7IHRoZW4KKyAgICAgQUNfTVNHX1JFU1VMVChbdXNpbmcgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsXSkKKyAgICAgd2l0aHZhbD0iMCR3aXRodmFsIgorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSBwcm92aWRlIGEgdGhyZWUgZGlnaXQgb2N0YWwgcGVyc2lzdGVudCBtYXNrIHZhbHVlXSkKKyAgIGZpXSwKKyAgW3dpdGh2YWw9MDc3CisgICBBQ19NU0dfUkVTVUxUKFt1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkd2l0aHZhbF0pXSkKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1BFUlNJU1RFTlRfTUFTSywkd2l0aHZhbCwKKyAgIFt1bWFzayBwZXJtaXNzaW9ucyB0byBzZXQgdXAgcGVyc2lzdGVudCBmaWxlcyB3aXRoXSkKKworTkVUU05NUF9BUkdfV0lUSChjb3B5X3BlcnNpc3RlbnRfZmlsZXMsCitbICAtLXdpdGgtY29weS1wZXJzaXN0ZW50LWZpbGVzPSJubyIgRG9uJ3QgY29weSBwZXJzaXN0ZW50IGZpbGVzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9yIHVzZSAieWVzIiB0byBjb3B5IHRoZW0pLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiB5ZXMpXSwKKyAgICBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVM9IiR3aXRoX2NvcHlfcGVyc2lzdGVudF9maWxlcyIpCisKK2RlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm49Ii90bXAvc25tcGRYWFhYWFgiCitORVRTTk1QX0FSR19XSVRIKHRlbXAtZmlsZS1wYXR0ZXJuLAorWyAgLS13aXRoLXRlbXAtZmlsZS1wYXR0ZXJuPVBBVFRFUk4gIFBhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzIChEZWZhdWx0OiAvdG1wL3NubXBkWFhYWFhYKV0sCisgIFtpZiB0ZXN0IGBleHByICJYJHdpdGh2YWwiIDogIi4qWFhYWFhYJCJgIC1uZSAwIDsgdGhlbgorICAgICBBQ19NU0dfUkVTVUxUKHVzaW5nIHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwpCisgICBlbHNlCisgICAgIEFDX01TR19FUlJPUihbdGVtcG9yYXJ5IGZpbGUgcGF0dGVucyBtdXN0IGVuZCB3aXRoIDYgWCdzXSkKKyAgIGZpXSwKKyAgW3dpdGh2YWw9IiRkZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuIgorICAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJHdpdGh2YWwpXSkKK0FDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOLCIkd2l0aHZhbCIsCisgIFtQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlc10pCisKKworIyMKKyMgICBQcm9qZWN0OiBMaWJyYXJ5OiBWZXJzaW9uIGNvbmZpZ3VyYXRpb24KKyMjCisKK1NOTVBfVkVSU0lPTlM9IiIKK05FVFNOTVBfQVJHX0VOQUJMRShzbm1wdjEsCitbICAtLWRpc2FibGUtc25tcHYxICAgICAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBpbXBsZW1lbnRzIFNOTVB2MS5dKQoraWYgdGVzdCAieCRlbmFibGVfc25tcHYxIiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX1NOTVBWMV0sIDEsIAorICAgICAgICAgICAgW0RlZmluZSBpZiBTTk1QdjEgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkXSkKK2Vsc2UKKyAgU05NUF9WRVJTSU9OUz0iJFNOTVBfVkVSU0lPTlMgMSIKK2ZpCisKK05FVFNOTVBfQVJHX0VOQUJMRShzbm1wdjJjLAorWyAgLS1kaXNhYmxlLXNubXB2MmMgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjJjLl0pCitpZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjJjIiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX1NOTVBWMkNdLCAxLCAKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgU05NUHYyYyBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWRdKQorZWxzZQorICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAyYyIKK2ZpCisKK1NOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDMiCitBQ19NU0dfQ0FDSEVfQUREKFNOTVAgVmVyc2lvbnMgU3VwcG9ydGVkOiAgICRTTk1QX1ZFUlNJT05TKQorCitORVRTTk1QX0FSR19XSVRIKGRlZmF1bHQtc25tcC12ZXJzaW9uLAorWyAgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPSIzIiBEZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlZ2FsIHZhbHVlczogMSwgMiAoZm9yIFNOTVB2MmMpIG9yIDMuXSwKKyAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIkd2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbiIpCisKKyMgd2UgdGVzdCB0aGlzIG5vdyBhbmQgbGF0ZXIgYXMgd2VsbC4gIHdlIHRlc3QgaXQgbm93IHNvIGNvbmZpZ3VyZSBjYW4gZGllCisjIGVhcmx5IG9uIHdpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gd2FpdGluZyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KK2Nhc2UgIiR7YWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTi0zfSIgaW4KKyAgW1sxMjNdXSkgOzsKKyAgMmMpIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049MiA7OworICAqKQorICAgIEFDX01TR19FUlJPUihbSWxsZWdhbCB2ZXJzaW9uIG51bWJlci4gIE9ubHkgMSwgMiAoZm9yIFNOTVB2MmMpIGFuZCAzIGFyZSBzdXBwb3J0ZWQuXSkKKyAgICA7OworZXNhYworCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogVHJhbnNwb3J0IG1vZHVsZXMKKyMjCisKK0FDX0FSR19XSVRIKHRyYW5zcG9ydHMsCitbICAtLXdpdGgtdHJhbnNwb3J0cz0idDEgdDIgLi4uIiAgIENvbXBpbGUgaW4gdGhlIGdpdmVuIFNOTVAgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGVzIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuXSkKK0FDX0FSR19XSVRIKG91dF90cmFuc3BvcnRzLAorWyAgLS13aXRoLW91dC10cmFuc3BvcnRzPSJ0MSAuLi4iICBFeGNsdWRlIGxpc3RlZCBTTk1QIHRyYW5zcG9ydHMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzcGFjZSBvciBjb21tYSBzZXBhcmF0ZWQgbGlzdCkuCisKKyAgQXZhaWxhYmxlIFNOTVAgdHJhbnNwb3J0IG1vZHVsZXMgYXJlOgorCisgICAgVURQICAgICAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhbHdheXMgY29tcGlsZWQgaW4uCisgICAgVURQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCisgICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBjb21waWxlZCBpbiBieSBkZWZhdWx0IGlmIElQdjYgc3VwcG9ydCBpcyBlbmFibGVkLgorICAgIFRDUElQdjYgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVRFAvSVB2Ni4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBhdmFpbGFibGUgZm9yIExpbnV4LCBTb2xhcmlzIGFuZAorICAgICAgICAgICAgICAgIEZyZWVCU0QgYXQgbGVhc3QuCisgICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBpZiBJUHY2IHN1cHBvcnQgaXMgZW5hYmxlZC4KKyAgICBUQ1AgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVENQL0lQLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQsIGJ1dCBtYXkgYmUgb21pdHRlZC4KKyAgICBVbml4ICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVW5peCBkb21haW4gcHJvdG9jb2xzLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgZXhjZXB0IG9uIFdpbjMyCisgICAgICAgICAgICAgICAgcGxhdGZvcm1zLCBhbmQgbWF5IGJlIG9taXR0ZWQuCisgICAgQ2FsbGJhY2sgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIGFuIGludGVybmFsIGxvY2FsbHkgY29ubmVjdGVkIHBhaXIKKyAgICAgICAgICAgICAgICBvZiBzbm1wX3Nlc3Npb25zLgorICAgIEFsaWFzICAgICAgIFRoZSBhbGlhcyB0cmFuc3BvcnQgc2ltcGx5IGxldHMgeW91IGRlZmluZSBtb3JlIGNvbXBsZXgKKyAgICAgICAgICAgICAgICB0cmFuc3BvcnQgc3RyaW5ncyBhbmQgYWxpYXMgdGhlbSB0byBzaW1wbGUgbmFtZXMgaW4KKyAgICAgICAgICAgICAgICB0aGUgc25tcC5jb25mIGZpbGUuCisgICAgQUFMNVBWQyAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIEFBTDUgUFZDcy4KKyAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAorICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgorICAgIElQWCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBJUFggcGVyIFJGQyAxNDIwLgorICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCisgICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCisgICAgRFRMU1VEUCAgICAgc3VwcG9ydCBmb3IgdHVubmVsaW5nIFNOTVAgb3ZlciBEVExTL1VEUAorICAgIFRMU1RDUCAgICAgIHN1cHBvcnQgZm9yIHR1bm5lbGluZyBTTk1QIG92ZXIgVExTL1RDUAorICAgIFNTSCAgICAgICAgIChhbHBoYSkgc3VwcG9ydCBmb3IgdHVubmVsaW5nIFNOTVAgb3ZlciBTU0gKK10pCisKKyMKKyMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIHRyYW5zcG9ydCBvcHRpb25zCisjCitBQ19BUkdfV0lUSCh0cmFuc3BvcnQsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbdHJhbnNwb3J0c10pKQorQUNfQVJHX1dJVEgob3V0LXRyYW5zcG9ydCwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvdXQtdHJhbnNwb3J0c10pKQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogU2VjdXJpdHkgbW9kdWxlcworIyMKKworTkVUU05NUF9BUkdfV0lUSChzZWN1cml0eS1tb2R1bGVzLAorWyAgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KKworICBBdmFpbGFibGUgU05NUCBzZWN1cml0eSBzZXJ2aWNlczoKKworICAgICAgICB1c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXNlciBiYXNlZCBTTk1QIHNlY3VyaXR5CisgICAgICAgIGtzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciBrZXJiZXJvcyBiYXNlZCBTTk1QIHNlY3VyaXR5CisgICAgICAgIHRzbSAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgVHJhbnNwb3J0LWJhc2VkIHNlY3VyaXR5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yIHVzZSB3aXRoIHRoZSBTU0gsIERUTFNVRFAgYW5kIFRMU1RDUCB0cmFuc3BvcnRzKQorXSkKKworTkVUU05NUF9BUkdfV0lUSChvdXQtc2VjdXJpdHktbW9kdWxlcywKK1sgIC0td2l0aC1vdXQtc2VjdXJpdHktbW9kdWxlcz0iczEgczIgLi4uIiAgIFJlbW92ZXMgdGhlIGdpdmVuIFNOTVAgc2VjdXJpdHkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZSBzZXJ2aWNlcyBmcm9tIHRoZSBkZWZhdWx0IGxpc3QuCitdKQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeTogRGV2ZWxvcGVyLXJlbGF0ZWQgc2V0dGluZ3MKKyMjCisKK05FVFNOTVBfQVJHX0VOQUJMRShkZWJ1Z2dpbmcsCitbICAtLWVuYWJsZS1kZWJ1Z2dpbmcgICAgICAgICAgICAgIE91dHB1dHMgZXh0cmEgZGVidWdnaW5nIGluZm9ybWF0aW9uIGF0IGFsbAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVzLiAgTm9ybWFsbHksIHlvdSBzaG91bGQgbm90IGVuYWJsZSB0aGlzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgLUQgZmxhZyBvZiB0aGUgY29tbWFuZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hpY2ggdG9nZ2xlcyBkZWJ1Z2luZyBvdXRwdXQgYXQgcnVudGltZS4KKyAgLS1kaXNhYmxlLWRlYnVnZ2luZyAgICAgICAgICAgICBEaXNhbGxvd3MgZGVidWdnaW5nIGNvZGUgdG8gYmUgYnVpbHQgaW4uCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBtaWdodCBwcm92aWRlIHNvbWUgc3BlZWQgYmVuZWZpdHMuXSwKKyAgICBBQ19ERUZJTkUoTkVUU05NUF9BTFdBWVNfREVCVUcpKQoraWYgdGVzdCAieCRlbmFibGVfZGVidWdnaW5nIiA9ICJ4bm8iOyB0aGVuCisgICAgQUNfREVGSU5FKE5FVFNOTVBfTk9fREVCVUdHSU5HKQorZmkKKworTkVUU05NUF9BUkdfRU5BQkxFKGRldmVsb3BlciwKK1sgIC0tZW5hYmxlLWRldmVsb3BlciAgICAgICAgICAgICAgVHVybnMgb24gc3VwZXItZHVwZXItZXh0cmEtY29tcGlsZS13YXJuaW5ncworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZW4gdXNpbmcgZ2NjLl0sCisgIFtpZiB0ZXN0ICIkZW5hYmxldmFsIiA9IHllcyA7IHRoZW4KKyAgICAgZGV2ZWxvcGVyPSJ5ZXMiCisgICBlbGlmIHRlc3QgIiRlbmFibGV2YWwiICE9IG5vIDsgdGhlbgorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLWRldmVsb3Blcl0pCisgICBlbHNlCisgICAgIGRldmVsb3Blcj0ibm8iCisgICBmaV0pCisKK05FVFNOTVBfQVJHX0VOQUJMRSh0ZXN0aW5nLWNvZGUsCitbICAtLWVuYWJsZS10ZXN0aW5nLWNvZGUgICAgICAgICAgIEVuYWJsZXMgc29tZSBjb2RlIHNlY3Rpb25zIHRoYXQgc2hvdWxkIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ubHkgYmUgdXNlZCBmb3IgdGVzdGluZyBvZiBjZXJ0YWluCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUCBmdW5jdGlvbmFsaXRpZXMuICBUaGlzIHNob3VsZCAqbm90KiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZSB0dXJuZWQgb24gZm9yIHByb2R1Y3Rpb24gdXNlLiAgRXZlci5dLAorICBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgOyB0aGVuCisgICAgIEFDX0RFRklORShORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUsIDEsIFt0ZXN0aW5nIGNvZGUgc2VjdGlvbnMuXSkKKyAgIGVsaWYgdGVzdCAiJGVuYWJsZXZhbCIgIT0gbm8gOyB0aGVuCisgICAgIEFDX01TR19FUlJPUihbUGxlYXNlIHVzZSAtLWVuYWJsZS8tLWRpc2FibGUtdGVzdGluZy1jb2RlXSkKKyAgIGZpXSkKKworTkVUU05NUF9BUkdfRU5BQkxFKHJlZW50cmFudCwKK1sgIC0tZW5hYmxlLXJlZW50cmFudCAgICAgICAgICAgICAgRW5hYmxlcyBsb2NraW5nIGZ1bmN0aW9ucyB0aGF0IHByb3RlY3QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWJyYXJ5IHJlc291cmNlcyBpbiBzb21lIG11bHRpLXRocmVhZGluZworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudmlyb25tZW50cy4gIFRoaXMgZG9lcyBub3QgZ3VhcmFudGVlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyZWFkLXNhZmUgb3BlcmF0aW9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEN1cnJlbnRseSBhbiBleHBlcmltZW50YWwgc2V0dGluZy5dLAorICBbaWYgdGVzdCAiJGVuYWJsZXZhbCIgPSB5ZXMgLW8gIiRlbmFibGV2YWwiID0gbm8gOyB0aGVuCisgICAgIHdpdGhfcmVzX2xvY2tzPSIkZW5hYmxldmFsIgorICAgZWxzZQorICAgICBBQ19NU0dfRVJST1IoW1BsZWFzZSB1c2UgLS1lbmFibGUvLS1kaXNhYmxlLXJlZW50cmFudF0pCisgICBmaV0sCisgIFt3aXRoX3Jlc19sb2Nrcz0ibm8iXSkKKworTkVUU05NUF9BUkdfRU5BQkxFKGRlcHJlY2F0ZWQsCitbICAtLWRpc2FibGUtZGVwcmVjYXRlZCAgICAgICAgICAgIERvbid0IGNvbXBpbGUgaW4gZGVwcmVjYXRlZCBmdW5jdGlvbnMuXSkKK2lmIHRlc3QgIiRlbmFibGVfZGVwcmVjYXRlZCIgPSBubyA7IHRoZW4KKyAgIEFDX0RFRklORShbTkVUU05NUF9OT19ERVBSRUNBVEVEX0ZVTkNUSU9OU10sIDEsCisgICAgICAgICAgICAgW0RlZmluZSB0byBzdXBwcmVzcyBpbmNsdXNpb24gb2YgZGVwcmVjYXRlZCBmdW5jdGlvbnNdKQorZmkKKworCisKKyMjCisjICAgUHJvamVjdDogQWdlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5ncworIyMKKworTkVUU05NUF9BUkdfV0lUSChyb290LWFjY2VzcywKK1sKK0NvbmZpZ3VyaW5nIHRoZSBhZ2VudDoKKyAgLS13aXRob3V0LXJvb3QtYWNjZXNzICAgICAgICAgICBUaGUgc25tcGQgYWdlbnQgd29uJ3QgcmVxdWlyZSByb290IGFjY2VzcyB0bworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBpdC4gIFRoZSBpbmZvcm1hdGlvbiBpdCByZXR1cm5zIGluIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYi1JSSB0cmVlIG1heSBub3QgYmUgY29ycmVjdCwgaG93ZXZlci5dKQorIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KK2lmIHRlc3QgIngkd2l0aF9yb290X2FjY2VzcyIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9OT19ST09UX0FDQ0VTUywgMSwKKyAgICBbSWYgeW91IGRvbid0IGhhdmUgcm9vdCBhY2Nlc3MgZG9uJ3QgZXhpdCB1cG9uIGttZW0gZXJyb3JzXSkKK2ZpCisKK05FVFNOTVBfQVJHX1dJVEgoa21lbS11c2FnZSwKK1sgIC0td2l0aG91dC1rbWVtLXVzYWdlICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgYW55IGNvZGUgcmVsYXRlZCB0byB0aGUgdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Yga21lbS5dKQorIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KK2lmIHRlc3QgIngkd2l0aF9rbWVtX3VzYWdlIiA9ICJ4bm8iOyB0aGVuCisgIEFDX0RFRklORShORVRTTk1QX05PX0tNRU1fVVNBR0UsIDEsIFtJZiB3ZSBkb24ndCB3YW50IHRvIHVzZSBrbWVtLl0pCitmaQorCitORVRTTk1QX0FSR19XSVRIKGR1bW15LXZhbHVlcywKK1sgIC0td2l0aC1kdW1teS12YWx1ZXMgICAgICAgICAgICAgUHJvdmlkZSAncGxhY2Vob2xkZXInIGR1bW15IHZhbHVlcyB3aGVyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRlY2huaWNhbGx5IG5vdCBjb21wbGlhbnQgd2l0aCB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIHNwZWNpZmljYXRpb25zLCBidXQgd2FzIGhvdyB0aGUgYWdlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRlZCBmb3IgdmVyc2lvbnMgPCA0LjAuXSkKKyMgRGVmaW5lIHVubGVzcyBzcGVjaWZpY2FsbHkgc3VwcHJlc3NlZCAoaS5lLiwgb3B0aW9uIGRlZmF1bHRzIHRvIGZhbHNlKS4KK2lmIHRlc3QgIngkd2l0aF9kdW1teV92YWx1ZXMiICE9ICJ4eWVzIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9OT19EVU1NWV9WQUxVRVMsIDEsCisgICAgW0lmIHlvdSBkb24ndCB3YW50IHRoZSBhZ2VudCB0byByZXBvcnQgb24gdmFyaWFibGVzIGl0IGRvZXNuJ3QgaGF2ZQorICAgICBkYXRhIGZvcl0pCitmaQorCitORVRTTk1QX0FSR19FTkFCTEUoc2V0LXN1cHBvcnQsCitbICAtLWRpc2FibGUtc2V0LXN1cHBvcnQgICAgICAgICAgIERvIG5vdCBhbGxvdyBTTk1QIHNldCByZXF1ZXN0cy5dKQoraWYgdGVzdCAieCRlbmFibGVfc2V0X3N1cHBvcnQiID0gInhubyI7IHRoZW4KKyAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlRdLCAxLCAKKyAgICAgICAgICAgIFtEZWZpbmUgaWYgU05NUCBTRVQgc3VwcG9ydCBzaG91bGQgYmUgZGlzYWJsZWRdKQorZmkKKworCitORVRTTk1QX0FSR19XSVRIKHN5c19jb250YWN0LAorWyAgLS13aXRoLXN5cy1jb250YWN0PSJ3aG9Ad2hlcmUiICBEZWZhdWx0IHN5c3RlbSBjb250YWN0LgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IExPR0lOQERPTUFJTk5BTUUpXSwKKyAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUPSIkd2l0aF9zeXNfY29udGFjdCIpCisKK05FVFNOTVBfQVJHX1dJVEgoc3lzX2xvY2F0aW9uLAorWyAgLS13aXRoLXN5cy1sb2NhdGlvbj0ibG9jYXRpb24iICBEZWZhdWx0IHN5c3RlbSBsb2NhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBVbmtub3duKV0sCisgICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DPSIkd2l0aF9zeXNfbG9jYXRpb24iKQorCisKKworIyMKKyMgICBQcm9qZWN0OiBBZ2VudDogRXh0ZW5zaWJpbGl0eSBjb25maWd1cmF0aW9uCisjIworCitORVRTTk1QX0FSR19FTkFCTEUobG9jYWwtc211eCwKK1sgIC0tZW5hYmxlLWxvY2FsLXNtdXggICAgICAgICAgICAgUmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgKGJ5IGRlZmF1bHQpLl0sCisgICAgW2lmIHRlc3QgIngkZW5hYmxlX2xvY2FsX3NtdXgiID0gInh5ZXMiOyB0aGVuCisgICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWCwgMSwKKyAgICAgICAgICBbZGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0CisgICAgICAgICAgIGJ5IGRlZmF1bHRdKQorICAgIGZpXSkKKworTkVUU05NUF9BUkdfRU5BQkxFKGFnZW50eC1kb20tc29jay1vbmx5LAorWyAgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgICBEaXNhYmxlIFVEUC9UQ1AgdHJhbnNwb3J0cyBmb3IgYWdlbnR4Ll0sCitBQ19ERUZJTkUoTkVUU05NUF9BR0VOVFhfRE9NX1NPQ0tfT05MWSwgMSwKKyAgICBbZGVmaW5lIGlmIGFnZW50eCB0cmFuc3BvcnQgaXMgdG8gdXNlIGRvbWFpbiBzb2NrZXRzIG9ubHldKSkKKworTkVUU05NUF9BUkdfRU5BQkxFKHNubXB0cmFwZC1zdWJhZ2VudCwKK1sgIC0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgICAgRGlzYWJsZSBhZ2VudHggc3ViYWdlbnQgY29kZSBpbiBzbm1wdHJhcGQuXSkKK2lmIHRlc3QgIngkZW5hYmxlX3NubXB0cmFwZF9zdWJhZ2VudCIgPSAieG5vIjsgdGhlbgorICBBQ19ERUZJTkUoTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgsIDEsCisgICAgW2RlZmluZSBpZiB5b3UgZG8gbm90IHdhbnQgc25tcHRyYXBkIHRvIHJlZ2lzdGVyIGFzIGFuIEFnZW50WCBzdWJhZ2VudF0pCitmaQorCitkZWZhdWx0X2FnZW50eF9zb2NrZXQ9Ii92YXIvYWdlbnR4L21hc3RlciIKK05FVFNOTVBfQVJHX1dJVEgoYWdlbnR4LXNvY2tldCwKK1sgIC0td2l0aC1hZ2VudHgtc29ja2V0PUZJTEUgICAgICAgICBBZ2VudFggc29ja2V0IChEZWZhdWx0OiAvdmFyL2FnZW50eC9tYXN0ZXIgYXMgc3BlY2lmaWVkIGluIFJGQzI3NDEpXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgZnVsbCBwYXRoIF0pOworICBmaQorICBBQ19NU0dfUkVTVUxUKHVzaW5nIEFnZW50WCBzb2NrZXQgJHdpdGh2YWwpCitdLFsKKyAgd2l0aHZhbD0kZGVmYXVsdF9hZ2VudHhfc29ja2V0CisgIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCBBZ2VudFggc29ja2V0ICRkZWZhdWx0X2FnZW50eF9zb2NrZXQpCitdKQorQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQUdFTlRYX1NPQ0tFVCwiJHdpdGh2YWwiLAorICAgICAgICBbVW5peCBkb21haW4gc29ja2V0IGZvciBBZ2VudFggbWFzdGVyLXN1YmFnZW50IGNvbW11bmljYXRpb25dKQorCisjCisjIGZlYXR1cmUgYWRkaXRpb24vcmVtb3ZhbCBhbmQgbWluaW1pYWxpc3Qgc3VwcG9ydAorIworRkVBVFVSRV9BRERfRkxBR1M9IiIKK05FVFNOTVBfQVJHX1dJVEgoZmVhdHVyZXMsCitbICAtLXdpdGgtZmVhdHVyZXM9ImZlYXQxIGZlYXQyIiAgIFJlcXVlc3QgZXh0cmEgZmVhdHVyZXMgdG8gYmUgdHVybmVkIG9uLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob25seSB1c2VmdWwgd2l0aCAtLWVuYWJsZS1taW5pbWFsaXN0KV0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGxpc3Qgb2YgZmVhdHVyZXMgXSk7CisgIGZpCisgIEZFQVRVUkVfQUREX0ZMQUdTPSItLWFkZCAkd2l0aHZhbCIKKyAgQUNfTVNHX1JFU1VMVChhZGRpbmcgaW4gZmVhdHVyZXM6ICR3aXRodmFsKQorXSkKK0FDX1NVQlNUKEZFQVRVUkVfQUREX0ZMQUdTKQorCisKK0ZFQVRVUkVfUkVNT1ZFX0ZMQUdTPSIiCitORVRTTk1QX0FSR19XSVRIKG91dC1mZWF0dXJlcywKK1sgIC0td2l0aC1vdXQtZmVhdHVyZXM9ImZlYXQxLi4uIiAgUmVtb3ZlIHNwZWNpZmljIGZlYXR1cmVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1wbGllcyAtLWVuYWJsZS1taW5pbWFsaXN0KV0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGxpc3Qgb2YgZmVhdHVyZXMgXSk7CisgIGZpCisgIEZFQVRVUkVfUkVNT1ZFX0ZMQUdTPSItLXJlbW92ZSAkd2l0aHZhbCIKKyAgRkVBVFVSRVRBUkdTPSJmZWF0dXJlcyIKKyAgQUNfREVGSU5FKE5FVFNOTVBfTUlOSU1BTF9DT0RFLCAxLAorICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVtb3ZlIGFsbCBub24tZXNzZW50aWFsIGNvZGUgZmVhdHVyZXMuXSkKKyAgQUNfTVNHX1JFU1VMVChyZW1vdmluZyBmZWF0dXJlczogJHdpdGh2YWwpCitdKQorQUNfU1VCU1QoRkVBVFVSRV9SRU1PVkVfRkxBR1MpCisKKworIyBDYXRjaCBjb21tb24gbWlzdGFrZXMKK0FDX0FSR19XSVRIKGZlYXR1cmUsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbZmVhdHVyZXNdKSkKK0FDX0FSR19XSVRIKG91dC1mZWF0dXJlLCwgTkVUU05NUF9JTlZBTElEX1dJVEgoW291dC1mZWF0dXJlc10pKQorCitGRUFUVVJFVEFSR1M9IiIKK05FVFNOTVBfQVJHX0VOQUJMRShtaW5pbWFsaXN0LAorWyAgLS1lbmFibGUtbWluaW1hbGlzdCAgICAgICAgICAgICBSZW1vdmUgYWxsIG5vbi1lc3NlbnRpYWwgY29kZSBmZWF0dXJlcy5dKQoraWYgdGVzdCAieCRlbmFibGVfbWluaW1hbGlzdCIgPSAieHllcyI7IHRoZW4KKyAgICMgd2UnbGwgYXNzdW1lIHRoZSBtaW5pIGFnZW50IGlzIGRlc2lyZWQgaGVyZSBhcyB3ZWxsCisgICBtaW5pX2FnZW50PSJ5ZXMiCisgICBGRUFUVVJFVEFSR1M9ImZlYXR1cmVzIgorCisgICAjIG5lZWRlZCB0byBib290c3RyYXAgbGF0ZXIgY2hlY2tzCisgICBlY2hvICIiID4gaW5jbHVkZS9uZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaAorICAgQUNfREVGSU5FKE5FVFNOTVBfTUlOSU1BTF9DT0RFLCAxLAorICAgICBbRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgbm9uLWVzc2VudGlhbCBjb2RlIGZlYXR1cmVzLl0pCitlbHNlCisgICBGRUFUVVJFSEVBREVSUz0iIgorZmkKK0FDX0FSR19XSVRIKFttaW5pbWFsaXN0XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbWluaW1hbGlzdF0pKQorQUNfU1VCU1QoRkVBVFVSRVRBUkdTKQorQUNfU1VCU1QoRkVBVFVSRUhFQURFUlMpCisKK05FVFNOTVBfQVJHX0VOQUJMRShub3RpZnktb25seSwKK1sgIC0tZW5hYmxlLW5vdGlmeS1vbmx5ICAgICAgICAgICAgQnVpbGQgdG9vbHMgdGhhdCBjYW4gb25seSBzZW5kIG5vdGlmaWNhdGlvbnMuXSkKK2lmIHRlc3QgIngkZW5hYmxlX25vdGlmeV9vbmx5IiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfREVGSU5FKE5FVFNOTVBfTk9USUZZX09OTFksIDEsCisgICAgIFtEZWZpbmUgaWYgeW91IHdhbnQgdG8gb25seSBzdXBwb3J0IHNlbmRpbmcgbm90aWZpY2F0aW9uc10pCitmaQorQUNfQVJHX1dJVEgoW25vdGlmeS1vbmx5XSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbm90aWZ5LW9ubHldKSkKK0FDX0FSR19FTkFCTEUoW25vdGlmeW9ubHldLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFtub3RpZnktb25seV0pKQorCitORVRTTk1QX0FSR19FTkFCTEUobm8tbGlzdGVuLAorWyAgLS1lbmFibGUtbm8tbGlzdGVuICAgICAgICAgICAgICBCdWlsZCB0b29scyB0aGF0IGNhbid0IGxpc3RlbiB0byBwb3J0cy5dKQoraWYgdGVzdCAieCRlbmFibGVfbm9fbGlzdGVuIiA9ICJ4eWVzIiAtbyAieCRlbmFibGVfbm90aWZ5X29ubHkiID0gInh5ZXMiOyB0aGVuCisgICBlbmFibGVfbm9fbGlzdGVuPSJ5ZXMiCisgICBBQ19ERUZJTkUoTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCwgMSwKKyAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmluZyBzdXBwb3J0IGZyb20gdGhlIGNvZGVdKQorZmkKK0FDX0FSR19XSVRIKFtuby1saXN0ZW5dLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFtuby1saXN0ZW5dKSkKK0FDX0FSR19FTkFCTEUoW25vbGlzdGVuXSwsTkVUU05NUF9JTlZBTElEX0VOQUJMRShbbm8tbGlzdGVuXSkpCisKK05FVFNOTVBfQVJHX0VOQUJMRShyZWFkLW9ubHksCitbICAtLWVuYWJsZS1yZWFkLW9ubHkgICAgICAgICAgICAgIFJlbW92ZSBhbGwgU0VUIHN1cHBvcnQgZnJvbSB0aGUgY29kZS5dKQoraWYgdGVzdCAieCRlbmFibGVfcmVhZF9vbmx5IiA9ICJ4eWVzIiAtbyAieCRlbmFibGVfbm90aWZ5X29ubHkiID0gInh5ZXMiIDsgdGhlbgorICAgZW5hYmxlX3JlYWRfb25seT0ieWVzIgorICAgQUNfREVGSU5FKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCwgMSwKKyAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIFNFVC93cml0ZSBhY2Nlc3MgZnJvbSB0aGUgY29kZV0pCitmaQorQUNfQVJHX1dJVEgoW3JlYWQtb25seV0sLE5FVFNOTVBfSU5WQUxJRF9FTkFCTEUoW3JlYWQtb25seV0pKQorQUNfQVJHX0VOQUJMRShbcmVhZG9ubHldLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFtyZWFkLW9ubHldKSkKKworCisjIworIyAgIFByb2plY3Q6IEFnZW50OiBNSUIgbW9kdWxlIGNvbmZpZ3VyYXRpb24KKyMjCisKK05FVFNOTVBfQVJHX0VOQUJMRShtaW5pX2FnZW50LAorWyAgLS1lbmFibGUtbWluaS1hZ2VudCAgICAgICAgICAgICBCdWlsZCBhIG1pbmltYWwgYWdlbnQuXSkKK2lmIHRlc3QgIngkZW5hYmxlX21pbmlfYWdlbnQiID0gInh5ZXMiOyB0aGVuCisgICAgbWluaV9hZ2VudD0ieWVzIgorZWxzZQorICAgIG1pbmlfYWdlbnQ9Im5vIgorZmkKK0FDX0FSR19XSVRIKFttaW5pYWdlbnRdLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFttaW5pLWFnZW50XSkpCitBQ19BUkdfRU5BQkxFKFttaW5pYWdlbnRdLCxORVRTTk1QX0lOVkFMSURfRU5BQkxFKFttaW5pLWFnZW50XSkpCisKKworCisKK05FVFNOTVBfQVJHX0VOQUJMRShtZmQtcmV3cml0ZXMsCitbICAtLWVuYWJsZS1tZmQtcmV3cml0ZXMgICAgICAgICAgIFVzZSBuZXcgTUZEIHJld3JpdGVzIG9mIG1pYiBtb2R1bGVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoZXJlIGF2YWlsYWJsZS4gKGRlZmF1bHQgaXMgdG8gdXNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3JpZ2luYWwgbWliIG1vZHVsZSBjb2RlKS5dKQoraWYgdGVzdCAieCRlbmFibGVfbWZkX3Jld3JpdGVzIiA9ICJ4eWVzIjsgdGhlbgorICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUywgMSwKKyAgICAgW0RlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCBNRkQgbW9kdWxlIHJld3JpdGVzXSkKK2ZpCisKKworTkVUU05NUF9BUkdfV0lUSChtaWJfbW9kdWxlcywKK1sgIC0td2l0aC1taWItbW9kdWxlcz0iaXRlbTEgLi4uIiAgQ29tcGlsZSB3aXRoIGFkZGl0aW9uYWwgbWliIG1vZHVsZXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTcGFjZSBzZXBhcmF0ZWQgbGlzdCkuXSkKKworTkVUU05NUF9BUkdfV0lUSChvdXRfbWliX21vZHVsZXMsCitbICAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzPSJsaXN0IiAgIENvbXBpbGUgd2l0aG91dCB0aGVzZSBtaWIgbW9kdWxlcy4KKworICBEZWZhdWx0IG1pYiBtb2R1bGVzIGNvbXBpbGVkIGludG8gdGhlIGFnZW50ICh3aGljaCBjYW4gYmUgcmVtb3ZlZCk6CisgIAorICAgIG1pYklJICAgICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIG1pYi1JSSB0cmVlLgorICAgIHNubXB2M21pYnMgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIHNubXB2MyBtaWIgbW9kdWxlcy4KKyAgICB1Y2Rfc25tcCAgICAgICAgICAgICAgIFVDRC1TTk1QLU1JQiBzcGVjaWZpYyBleHRlbnNpb25zLgorICAgIGFnZW50X21pYnMgICAgICAgICAgICAgTkVULVNOTVAtQUdFTlQtTUlCIGV4dGVuc2lvbnMKKyAgICBhZ2VudHggICAgICAgICAgICAgICAgIEFnZW50WCBzdXBwb3J0IChzZWUgYmVsb3cpCisgICAgbm90aWZpY2F0aW9uICAgICAgICAgICBtaWJzIHN1cHBvcnRpbmcgc3BlY2lmaWNhdGlvbiBvZiB0cmFwIGRlc3RpbmF0aW9ucy4KKyAgICB0YXJnZXQgICAgICAgICAgICAgICAgIFN1cHBvcnQgZm9yIHRoZSBTTk1QIFdHcyBUQVJHRVQtTUlCLgorICAgIHV0aWxpdGllcyAgICAgICAgICAgICAgZ2VuZXJhbCBhZ2VudCBjb25maWd1cmF0aW9uIHV0aWxpdGllcy4KKyAgICBkaXNtYW4vZXZlbnQgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBESVNNQU4tRVZFTlQtTUlCCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdXBwb3J0cyBzZWxmIG1vbml0b3JpbmcgYW5kIG5vdGlmaWNhdGlvbiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5IHdoZW4gZXJyb3IgY29uZGl0aW9ucyBhcmUgZm91bmQpCisgICAgZGlzbWFuL3NjaGVkdWxlICAgICAgICBzdXBwb3J0IGZvciB0aGUgRElTTUFOLVNDSEVEVUxFLU1JQgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodHJpZ2dlciBTRVQgcmVxdWVzdHMgYXQgc3BlY2lmaWVkIHRpbWVzKQorICAgIGhvc3QgICAgICAgICAgICAgICAgICAgaG9zdCByZXNvdXJjZXMgbWliIHN1cHBvcnQuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvbmx5IG9uIG1ham9yIHN1cHBvcnRlZCBwbGF0Zm9ybXMpCisKKyAgT3B0aW9uYWwgbWliIG1vZHVsZXMgdGhhdCBjYW4gYmUgYnVpbHQgaW50byB0aGUgYWdlbnQgaW5jbHVkZToKKyAgICBzbXV4ICAgICAgICAgICAgICAgICAgIHNtdXggc3VwcG9ydCB0byBhbGxvdyBzdWJhZ2VudHMgdG8gYXR0YWNoIHRvIHNubXBkLgorICAgIG1pYklJL210YV9zZW5kbWFpbCAgICAgU2VuZG1haWwgc3RhdGlzdGljcyBtb25pdG9yaW5nIChNVEEtTUlCKQorICAgIHVjZC1zbm1wL2Rpc2tpbyAgICAgICAgVGFibGUgb2YgaW8tZGV2aWNlcyBhbmQgaG93IG11Y2ggZGF0YSB0aGV5IGhhdmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWQvd3JpdHRlbi4gIChvbmx5IHRlc3RlZCBvbiBTb2xhcmlzLCBMaW51eCkKKyAgICBkaXNtYW4vb2xkLWV2ZW50LW1pYiAgIHByZXZpb3VzIGltcGxlbWVudGF0aW9uIG9mIHRoZSBESVNNQU4tRVZFTlQtTUlCCisKKyAgT3B0aW9uYWwgbW9kdWxlcyBmb3Igc3BlY2lmaWMgcGxhdGZvcm1zCisgICAgTGludXgKKyAgICAgIHVjZC1zbm1wL2xtU2Vuc29ycyAgIGhhcmR3YXJlIG1vbml0b3JpbmcgKExNLVNFTlNPUlMtTUlCKQorICAgICAgaXAtbWliL2lwdjRJbnRlcmZhY2VUYWJsZSAgKGV4cGVyaW1lbnRhbCkKKyAgICAgIGlwLW1pYi9pcHY2SW50ZXJmYWNlVGFibGUgIChleHBlcmltZW50YWwpCisgICAgICB0dW5uZWwgICAgICAgICAgICAgICBMaW51eCBUVU5ORUwtTUlCIHN1cHBvcnQgKGlmVGFibGUgZXh0ZW5zaW9uKQorICAgICAgbWliSUkvaW50ZXJmYWNlcyAgICAgKG9sZCBpZlRhYmxlIGltcGxlbWVudGF0aW9uKQorICAgICAgbWlzYy9pcGZ3YWNjICAgICAgICAgYWNjb3VudGluZyBydWxlcyBJUCBmaXJld2FsbCBpbmZvcm1hdGlvbgorICAgICAgaXBmd2NoYWlucy9pcGZ3Y2hhaW5zICBmaXJld2FsbCBjaGFpbnMgdW5kZXIgaXBmdworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU2VlIGFnZW50L21pYmdyb3VwL2lwZndjaGFpbnMvUkVBRE1FKQorICAgICAgc2N0cC1taWIgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIFNDVFAtTUlCCisgICAgICBldGhlcmxpa2UtbWliICAgICAgICBzdXBwb3J0IGZvciB0aGUgRXRoZXJMaWtlLU1JQgorCisgICAgU29sYXJpcworICAgICAgdWNkLXNubXAvbG1TZW5zb3JzICAgaGFyZHdhcmUgbW9uaXRvcmluZyAoTE0tU0VOU09SUy1NSUIpCisgICAgICBpZi1taWIgICAgICAgICAgICAgICBJRi1NSUIgcmV3cml0ZSAoYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKKyAgICAgIHRjcC1taWIgICAgICAgICAgICAgIFRDUC1NSUIgcmV3cml0ZSAodGNwQ29ubmVjdGlvblRhYmxlIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3BMaXN0ZW5lclRhYmxlOyBhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQorICAgICAgdWRwLW1pYiAgICAgICAgICAgICAgVURQLU1JQiByZXdyaXRlICh1ZHBFbmRwb2ludFRhYmxlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGQgLS1lbmFibGUtbWZkLXJld3JpdGVzKQorCisgICAgRnJlZUJTRC9PcGVuQlNECisgICAgICBpZi1taWIgICAgICAgICAgICAgICBJRi1NSUIgcmV3cml0ZSAoYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKKworICBBZ2VudFggc3VwcG9ydDoKKyAgICBhZ2VudHgvc3ViYWdlbnQgICAgICAgIGFsbG93cyB0aGUgYWdlbnQgdG8gcnVuIGFzIGVpdGhlciBhIHNubXAgYWdlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIG9yIGFzIGFuIGFnZW50WCBzdWItYWdlbnQuCisgICAgYWdlbnR4L21hc3RlciAgICAgICAgICBtYWtlcyB0aGUgYWdlbnQgcnVuIGFzIGFuIGFnZW50WCBtYXN0ZXIgYWdlbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYSBub3JtYWwgc25tcCBhZ2VudC4KKyAgICBhZ2VudHggICAgICAgICAgICAgICAgIGluY2x1ZGVzIGJvdGggYWdlbnR4L21hc3RlciBhbmQgYWdlbnR4L2NsaWVudC4KKworICBPcHRpb25hbCBtb2R1bGVzIGZvciBDIGNvZGVycyB0byBsb29rIGF0IGFuZC9vciBpbmNsdWRlIGFzIGV4dGVuc2lvbiBleGFtcGxlczoKKyAgCisgICAgZXhhbXBsZXMvdWNkRGVtb1B1YmxpYyAgU05NUHYzIGludGVyb3BlcmFiaWxpdHkgdGVzdGluZyBtaWIuCisgICAgZXhhbXBsZXMvZXhhbXBsZSAgICAgICAgZXhhbXBsZSBDIGNvZGUgZXh0ZW5zaW9uLl0pCisKKworIworIyBDYXRjaCBjb21tb24gbWlzdGFrZXMgaW4gY29uZmlndXJlIG9wdGlvbnMKKyMKK0FDX0FSR19XSVRIKG1pYi1tb2R1bGUsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbbWliLW1vZHVsZXNdKSkKK0FDX0FSR19XSVRIKG1vZHVsZSwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFttaWItbW9kdWxlc10pKQorQUNfQVJHX1dJVEgobW9kdWxlcywsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFttaWItbW9kdWxlc10pKQorCitBQ19BUkdfV0lUSChvdXQtbWliLW1vZHVsZSwsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvdXQtbWliLW1vZHVsZXNdKSkKK0FDX0FSR19XSVRIKG91dC1tb2R1bGUsLCBORVRTTk1QX0lOVkFMSURfV0lUSChbb3V0LW1pYi1tb2R1bGVzXSkpCitBQ19BUkdfV0lUSChvdXQtbW9kdWxlcywsIE5FVFNOTVBfSU5WQUxJRF9XSVRIKFtvdXQtbWliLW1vZHVsZXNdKSkKKworCisjIworIyAgIFByb2plY3Q6IEVudGVycHJpc2Ugc2V0dGluZ3MJKD8gQWdlbnQvTGlicmFyeS9Cb3RoPykKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgoZW50ZXJwcmlzZS1vaWQsCitbRW50ZXJwcmlzZSBPSURzOiAgKHdhcm5pbmc6IHRoaXMgc2hvdWxkIGJlIHVzZWQgd2l0aCBjYXV0aW9uLikKKworICAtLXdpdGgtZW50ZXJwcmlzZS1vaWQgICAgICAgICAgICAgIFRoZSBlbnRlcnByaXNlIG51bWJlciBhc3NpZ25lZCB0byB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZW5kb3IgYnkgSUFOQS4gIFNlZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvY2dpLWJpbi9lbnRlcnByaXNlLnBsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gZ2V0IG9uZSwgdGhvdWdoIHVzaW5nIHRoZSBkZWZhdWx0IGlzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvYmFibHkgdGhlIHJpZ2h0IGNob2ljZSBpcyBtb3N0IGNhc2VzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IDgwNzIgPSAiZW50ZXJwcmlzZS5uZXQtc25tcCIpXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgdmFsdWUgZm9yIHRoZSBlbnRlcnByaXNlIG51bWJlciBdKTsKKyAgZmkKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfRU5URVJQUklTRV9PSUQsICR3aXRodmFsKQorICBlbnRfb2lkPSIxLDMsNiwxLDQsMSwkd2l0aHZhbCIKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfRU5URVJQUklTRV9NSUIsICRlbnRfb2lkKQorICBlbnRfZG90X29pZD0iMS4zLjYuMS40LjEuJHdpdGh2YWwiCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0VOVEVSUFJJU0VfRE9UX01JQiwgJGVudF9kb3Rfb2lkKQorICBBQ19NU0dfUkVTVUxUKHVzaW5nIGVudGVycHJpc2UgbnVtYmVyICR3aXRodmFsKQorXSxbCisgIEFDX01TR19SRVNVTFQodXNpbmcgZGVmYXVsdCAiZW50ZXJwcmlzZS5uZXQtc25tcCIpCitdKQorCitORVRTTk1QX0FSR19XSVRIKGVudGVycHJpc2Utc3lzb2lkLAorWworICAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQgICAgICAgICAgIFRoZSBiYXNlIE9JRCBmb3IgdGhlIHN5c09iamVjdElECisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIHN5c3RlbSBncm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IC4xLjMuNi4xLjQuMS44MDcyLjMuMi4uLiA9IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0U25tcEFnZW50T0lEcy4uLiIpXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgYmFzZSBPSUQgdmFsdWUgXSk7CisgIGZpCisgIHN5c19vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLycgfCBzZWQgJ3MvXC4vXCwvZydgCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9NSUIsICRzeXNfb2lkKQorICBzeXNfZG90X29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJ2AKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0RPVF9NSUIsICRzeXNfZG90X29pZCkKKyAgc3lzb2lkX2xlbj1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL1teXC5dLy9nJyB8IGF3ayAtRlwuICd7IHByaW50IE5GIH0nYAorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fRE9UX01JQl9MRU5HVEgsICRzeXNvaWRfbGVuKQorICBBQ19NU0dfUkVTVUxUKHVzaW5nIGVudGVycHJpc2Ugc3lzT0lEICR3aXRodmFsIC4uLi4pCitdLFsKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IGVudGVycHJpc2Ugc3lzT0lEICJORVQtU05NUC1NSUI6Om5ldFNubXBBZ2VudE9JRHMuLi4iKQorXSkKKworTkVUU05NUF9BUkdfV0lUSChlbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQsCitbCisgIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgVGhlIE9JRCB1c2VkIGZvciB0aGUgcm9vdCBvZgorCQkJCSAgICAgZW50ZXJwcmlzZSBzcGVjaWZpYyBub3RpZmljYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IC4xLjMuNi4xLjQuMS44MDcyLjQgPSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldFNubXBOb3RpZmljYXRpb25QcmVmaXgiKV0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlIF0pOworICBmaQorICBub3RpZmljYXRpb25fb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nIHwgc2VkICdzL1wuL1wsL2cnYAorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9OT1RJRklDQVRJT05fTUlCLCAkbm90aWZpY2F0aW9uX29pZCkKKyAgbm90aWZpY2F0aW9uX2RvdF9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLydgCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX05PVElGSUNBVElPTl9ET1RfTUlCLCAkbm90aWZpY2F0aW9uX2RvdF9vaWQpCisgIG5vdGlmaWNhdGlvbm9pZF9sZW49YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9bXlwuXS8vZycgfCBhd2sgLUZcLiAneyBwcmludCBORiB9J2AKKyAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTk9USUZJQ0FUSU9OX0RPVF9NSUJfTEVOR1RILCAkbm90aWZpY2F0aW9ub2lkX2xlbikKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBlbnRlcnByaXNlIG5vdGlmaWNhdGlvbnMgJHdpdGh2YWwpCitdLFsKKyAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IG5vdGlmaWNhdGlvbnMgIk5FVC1TTk1QLU1JQjo6bmV0U25tcE5vdGlmaWNhdGlvbnMiKQorXSkKKworCisjIworIyAgIFByb2plY3Q6IFBlcmwgc2V0dGluZ3MKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgocGVybC1tb2R1bGVzLAorWworUGVybDoKKyAgLS13aXRoLXBlcmwtbW9kdWxlc1s9QVJHU10gICAgICBJbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXMgYWxvbmcgd2l0aCB0aGUgcmVzdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHRoZSBuZXQtc25tcCB0b29sa2l0LiAgSWYgQVJHUyBpcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwZWNpZmllZCwgdGhleSdyZSBwYXNzZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFrZWZpbGUuUEwgc2NyaXB0Ll0sWworICAgIGlmIHRlc3QgIiR3aXRodmFsIiA9ICJubyI7IHRoZW4KKyAgICAgIGluc3RhbGxfcGVybD0ibm8iCisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wZXJsPSJ5ZXMiCisgICAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgIT0gInllcyI7IHRoZW4KKyAgICAgICAgUEVSTEFSR1M9IiR3aXRodmFsIgorICAgICAgZmkKKyAgICBmaQorXSwgaW5zdGFsbF9wZXJsPSJ0cnkiKQorCitORVRTTk1QX0FSR19FTkFCTEUoZW1iZWRkZWQtcGVybCwKK1sgIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsICAgICAgICAgRGlzYWJsZSBlbWJlZGRlZCBQZXJsIGluIHRoZSBTTk1QIGFnZW50IGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZC4gW2VuYWJsZWQgYnkgZGVmYXVsdF1dLAorICAgIGVtYmVkX3Blcmw9IiRlbmFibGV2YWwiLCBlbWJlZF9wZXJsPSJ0cnkiKQorCitORVRTTk1QX0FSR19FTkFCTEUocGVybC1jYy1jaGVja3MsCitbICAtLWRpc2FibGUtcGVybC1jYy1jaGVja3MgICAgICAgIERpc2FibGUgY29uZmlndXJlIGNoZWNrcyBmb3Igd2hldGhlciBQZXJsJ3MKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIENvbXBpbGVyIGlzIGNvbXBhdGlibGUgd2l0aCBvdXJzIHdoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbWJlZGRlZCBQZXJsIGlzIGVuYWJsZWQuXSkKKworCisjIworIyAgIFByb2plY3Q6IFB5dGhvbiBzZXR0aW5ncworIyMKKworQUNfQVJHX1dJVEgocHl0aG9uLW1vZHVsZXMsCitbCitQeXRob246CisgIC0td2l0aC1weXRob24tbW9kdWxlc1s9QVJHU10gICAgSW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzIGFsb25nIHdpdGggdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdCBvZiB0aGUgbmV0LXNubXAgdG9vbGtpdC4gIElmIEFSR1MgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZXkncmUgcGFzc2VkIHRvIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwLnB5IHNjcmlwdCBhcyBhcmd1bWVudHMuXSxbCisgICAgaW5zdGFsbF9weXRob249InllcyIKKyAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgorICAgICAgUFlUSE9OQVJHUz0iIgorICAgIGVsaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgorICAgICAgUFlUSE9OQVJHUz0iIgorICAgICAgaW5zdGFsbF9weXRob249Im5vIgorICAgIGVsc2UKKyAgICAgIFBZVEhPTkFSR1M9IiR3aXRodmFsIgorICAgIGZpCitdLCBpbnN0YWxsX3B5dGhvbj0ibm8iKQorCisKKyMjCisjICAgUHJvamVjdDogTGlicmFyeSBzZXR0aW5ncworIyMKKworTkVUU05NUF9BUkdfV0lUSChzZXJ2ZXItc2VuZC1idWYsCitbCitOZXR3b3JrIEJ1ZmZlcnM6CisgIC0td2l0aC1zZXJ2ZXItc2VuZC1idWZbPUFSR10gICAgVXNlIEFSRyBmb3IgdGhlIGRlZmF1bHQgVURQL1RDUCBzZW5kIGJ1ZmZlciBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIE9TIGJ1ZmZlciBmb3Igc2VydmVyIHNvY2tldHMgdGhhdCBhcmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVkIChzbm1wZCwgc25tcHRyYXBkKS4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgZGVmYXVsdCBjYW4gYmUgb3ZlcnJpZGRlbiBpbiB0aGUgcnVudGltZSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGVzLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBUkcgc2hvdWxkIGJlIHRoZSBzaXplIGluIGJ5dGVzXSxbCisgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIHNlcnZlciBzZW5kIGJ1ZmZlciBdKQorICAgZmkKKyAgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1NFTkRfQlVGLCAkd2l0aHZhbCldLAorICAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBzZXJ2ZXIgc29ja2V0c10pICkKKworTkVUU05NUF9BUkdfV0lUSChzZXJ2ZXItcmVjdi1idWYsCitbICAtLXdpdGgtc2VydmVyLXJlY3YtYnVmWz1BUkddICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9uLCBidXQgZm9yIHJlY2VpdmUgYnVmZmVyXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHJlY3YgYnVmZmVyIF0pCisgIGZpCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1JFQ1ZfQlVGLCAkd2l0aHZhbCldLAorICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzXSkgKQorCitORVRTTk1QX0FSR19XSVRIKGNsaWVudC1zZW5kLWJ1ZiwKK1sgIC0td2l0aC1jbGllbnQtc2VuZC1idWZbPUFSR10gICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmUgYnVmZmVyIG9mIGNsaWVudCBzb2NrZXRzXSxbCisgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgorICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHNlbmQgYnVmZmVyIF0pCisgIGZpCisgIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGLCAkd2l0aHZhbCldLAorICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzXSkgKQorCitORVRTTk1QX0FSR19XSVRIKGNsaWVudC1yZWN2LWJ1ZiwKK1sgIC0td2l0aC1jbGllbnQtcmVjdi1idWZbPUFSR10gICAgU2ltaWxhciBhcyBwcmV2aW91cyBvcHRpb25zLCBidXQgZm9yIHRoZSBzZW5kIGJ1ZmZlcl0sWworICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KKyAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCByZWN2IGJ1ZmZlciBdKQorICBmaQorICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9SRUNWX0JVRiwgJHdpdGh2YWwpXSwKKyAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCByZWN2IGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0c10pICkKKworIyMKKyMgICBTeXN0ZW06IGxpYnJhcnkgc2V0dGluZ3MgIChtb3JlKQorIyMKKworTkVUU05NUF9BUkdfV0lUSChlbGYsCisgIFtBU19IRUxQX1NUUklORyhbLS13aXRob3V0LWVsZl0sW3VzZSBlbGYgbGlicmFyaWVzXSldKQorCitORVRTTk1QX0FSR19XSVRIKG5sLAorICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1ubF0sW3VzZSBsaWJubCB0byBnZXQgbmV0bGluayBkYXRhIChsaW51eCBvbmx5KS5dKV0pCisKK05FVFNOTVBfQVJHX1dJVEgobGlid3JhcCwKKyAgWyAgLS13aXRoLWxpYndyYXBbPUxJQlBBVEhdICBDb21waWxlIGluIGxpYndyYXAgKHRjcF93cmFwcGVycykgc3VwcG9ydC5dLAorICBbXSwKKyAgW3dpdGhfbGlid3JhcD0ibm8iXSkKKworTkVUU05NUF9BUkdfV0lUSCh6bGliLAorICBbICAtLXdpdGgtemxpYls9RElSXSAgICAgICAgIHVzZSBsaWJ6IGluIERJUl0sCisgIFtdLAorICBbd2l0aF96bGliPSJubyJdKQorCitBQ19BUkdfV0lUSChiemlwMiwKKyAgWyAgLS13aXRoLWJ6aXAyWz1ESVJdICAgICAgICB1c2UgbGliYnoyIGluIERJUl0sCisgIFtdLAorICBbd2l0aF9iemlwMj0ibm8iXSkKKworTkVUU05NUF9BUkdfV0lUSCgKKyBbbW50dGFiXSwKKyBBU19IRUxQX1NUUklORygKKyAgIFstLXdpdGgtbW50dGFiPSIvZXRjL21udHRhYiJdLAorICAgW01vdW50IHRhYmxlIGxvY2F0aW9uLiBUaGUgZGVmYXVsdCBpcyB0byBhdXRvZGV0ZWN0IHRoaXMuXSkpCisKKyMjCisjICAgUHJvamVjdDogbXlzcWwKKyMjCisKK05FVFNOTVBfQVJHX1dJVEgobXlzcWwsCisgIFsgIC0td2l0aC1teXNxbCAgICAgICAgICAgIEluY2x1ZGUgc3VwcG9ydCBmb3IgTXlTUUwuXSkKK2lmIHRlc3QgIngkd2l0aF9teXNxbCIgPSAieHllcyI7IHRoZW4KKyAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX01ZU1FMLCAxLAorICAgIFtkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgbXlzcWwgY29kZSBmb3Igc25tcHRyYXBkIC4uLl0pCitmaQpkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmluIGIvY29uZmlndXJlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4NTE5OTdmLi4wMDAwMDAwCi0tLSBhL2NvbmZpZ3VyZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDQ4MTcgKzAsMCBAQAotIyBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKLSMgdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKLSMgdGhhdCBtYXkgYXBwbHk6Ci0jCi0jIFBvcnRpb25zIENvcHlyaWdodCCpIDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotIyBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCi0jIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCi0jCi0KLSMKLSMgUHJvY2VzcyB0aGlzIGZpbGUgd2l0aCBhdXRvY29uZiB0byBwcm9kdWNlIGEgY29uZmlndXJlIHNjcmlwdC4KLSMKLUFDX0lOSVQoW05ldC1TTk1QXSwgWzUuNC40XSwgW25ldC1zbm1wLWNvZGVyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXRdKQotQUNfUFJFUkVRKFsyLjU5XSkKLUFDX0NPTkZJR19TUkNESVIoW2FnZW50L21pYmdyb3VwL3VjZC1zbm1wL2V4dGVuc2libGUuY10pCi1BQ19SRVZJU0lPTihbJFJldmlzaW9uJF0pCi0KLUFDX0NPTkZJR19IRUFERVIoaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCkKLQotQUNfTVNHX0NBQ0hFX0lOSVQoKQotCi0jCi0jIHNhdmUgdGhlIGNvbmZpZ3VyZSBhcmd1bWVudHMKLSMKLUFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0NPTkZJR1VSRV9PUFRJT05TLCIkYWNfY29uZmlndXJlX2FyZ3MiKQotQ09ORklHVVJFX09QVElPTlM9IlwiJGFjX2NvbmZpZ3VyZV9hcmdzIlwiCi1BQ19TVUJTVChDT05GSUdVUkVfT1BUSU9OUykKLQotIwotIyBDb21waWxhdGlvbiBzZXR1cAotIwotQUNfQVJHX1dJVEgoY2MsIFsKLUNvbXBpbGVyIE9wdGlvbnM6Ci0gIC0td2l0aC1jYz1DQyAgICAgICAgICAgICAgICAgICAgdXNlIENDIHRvIGNvbXBpbGUgKGRlZmF1bHQ9Z2NjKS5dLAotICAgIFtDQz0kd2l0aF9jYztleHBvcnQgQ0NdKQotCi1BQ19BUkdfV0lUSChsaW5rY2MsIFsKLSAgLS13aXRoLWxpbmtjYz1DQyAgICAgICAgICAgICAgICB1c2UgQ0MgdG8gbGluayAoZGVmYXVsdD1nY2MpLl0sCi0gICAgW0xJTktDQz0kd2l0aF9saW5rY2M7ZXhwb3J0IExJTktDQ10pCi0KLUFDX0FSR19XSVRIKGFyLAotWyAgLS13aXRoLWFyPUFSICAgICAgICAgICAgICAgICAgICB1c2UgQVIgYXMgdGhlIGFyY2hpdmVyLl0sCi0gICAgW0FSPSR3aXRoX2FyOyBleHBvcnQgQVJdKQotCi1BQ19BUkdfV0lUSChlbmRpYW5uZXNzLAotWyAgLS13aXRoLWVuZGlhbm5lc3M9YmlnfGxpdHRsZSAgICBkZWZpbmUgZW5kaWFubmVzcyBvZiB0YXJnZXQgcGxhdGZvcm0gd2hlbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyb3NzLWNvbXBpbGluZy5dLAotICAgIFtpZiB0ZXN0ICR3aXRoX2VuZGlhbm5lc3MgIT0gImJpZyIgLWEgJHdpdGhfZW5kaWFubmVzcyAhPSAibGl0dGxlIiA7IHRoZW4KLSAgICAgICBBQ19NU0dfRVJST1IoW0VuZGlhbm5lc3MgbXVzdCBiZSBiaWcgb3IgbGl0dGxlLCBub3QgIiR3aXRoX2VuZGlhbm5lc3MiLl0pOwotICAgICBmaQotXSkKLQotQUNfQVJHX1dJVEgoY2ZsYWdzLAotWyAgLS13aXRoLWNmbGFncz1DRkxBR1MgICAgICAgICAgICB1c2UgQ0ZMQUdTIGFzIGNvbXBpbGUgdGltZSBhcmd1bWVudHMuXSwKLSAgICBbQ0ZMQUdTPSR3aXRoX2NmbGFnczsgZXhwb3J0IENGTEFHU10pCi0KLUFDX0FSR19XSVRIKGxkZmxhZ3MsCi1bICAtLXdpdGgtbGRmbGFncz1MREZMQUdTICAgICAgICAgIHVzZSBMREZMQUdTIGFzIGxpbmsgdGltZSBhcmd1bWVudHMgdG8gbGQuXSwKLSAgICBbTERGTEFHUz0kd2l0aF9sZGZsYWdzOyBleHBvcnQgTERGTEFHU10pCi0KLUFDX0FSR19FTkFCTEUoYXMtbmVlZGVkLAotWyAgLS1lbmFibGUtYXMtbmVlZGVkICAgICAgICAgICAgICBMaW5rIGxpYnBlcmwgYWdhaW5zdCBOZXQtU05NUCBsaWJyYXJpZXMgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmF0aGVyIHRoYW4gYXBwbGljYXRpb25zLiBXZSByZWNvbW1lbmQgdG8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgdGhpcyBvcHRpb24gaWYgaXQgd29ya3MuXSkKLQotQUNfQVJHX1dJVEgobGlicywKLVsgIC0td2l0aC1saWJzPUxJQlMgICAgICAgICAgICAgICAgdXNlIExJQlMgYXMgbGluayB0aW1lIGFyZ3VtZW50cyB0byBsZC5dLAotICAgIFtMSUJTPSR3aXRoX2xpYnM7IGV4cG9ydCBMSUJTXSkKLQotQUNfQVJHX0VOQUJMRShzaWxlbnQtbGlidG9vbCwKLVsgIC0tZW5hYmxlLXNpbGVudC1saWJ0b29sICAgICAgICAgUGFzcyAtLXNpbGVudCB0byBsaWJ0b29sLl0sCi0JTElCVE9PTEZMQUdTPS0tc2lsZW50KQotQUNfU1VCU1QoTElCVE9PTEZMQUdTKQotCi1BQ19BUkdfV0lUSChpbnN0YWxsLXByZWZpeCwKLVsgIC0td2l0aC1pbnN0YWxsLXByZWZpeD1QQVRIICAgICAgSnVzdCBmb3IgaW5zdGFsbGluZywgcHJlZml4IGFsbCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJlY3RvcmllcyB3aXRoIFBBVEguICBUaGlzIGlzIGtub3duIG5vdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIHdvcmsgb24gc29tZSBzeXN0ZW1zIHdpdGggc2hhcmVkCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyaWVzIChlZywgSFBVWCldLAotICAgICAgSU5TVEFMTF9QUkVGSVg9IiR3aXRodmFsIikKLQotaWYgdGVzdCAieCRJTlNUQUxMX1BSRUZJWCIgPSAieHllcyIgOyB0aGVuCi0gIEFDX01TR19FUlJPUihbLS13aXRoLWluc3RhbGwtcHJlZml4IHJlcXVpcmVzIGFuIGFyZ3VtZW50XSkKLWZpCi1pZiB0ZXN0ICJ4JElOU1RBTExfUFJFRklYIiA9ICJ4bm8iIDsgdGhlbgotICBJTlNUQUxMX1BSRUZJWD0iIgotZmkKLUFDX1NVQlNUKElOU1RBTExfUFJFRklYKQotCi0jIGNoZWNrIGZvciBlcnJvcnMgaW4gYXJncyB0aGF0IHJ1biBhZnRlciBtb2R1bGUgcHJvY2Vzc2luZyBoZXJlLCBzbwotIyB0aGV5IGZhaWwgYmVmb3JlIG1vZHVsZSBwcm9jZXNzaW5nLi4uCi1BQ19BUkdfRU5BQkxFKGxpYndyYXAsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWxpYndyYXAvLS13aXRob3V0LWxpYndyYXAgaW5zdGVhZCBdKSApCi0gIEFDX0FSR19FTkFCTEUoemxpYiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtemxpYi8tLXdpdGhvdXQtemxpYiBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtaW5pX2FnZW50LAotWyAgLS1lbmFibGUtbWluaS1hZ2VudCAgICAgICAgICAgICBCdWlsZCBhIG1pbmltYWwgYWdlbnQuXSkKLWlmIHRlc3QgIngkZW5hYmxlX21pbmlfYWdlbnQiID0gInh5ZXMiOyB0aGVuCi0gICAgbWluaV9hZ2VudD0ieWVzIgotZWxzZQotICAgIG1pbmlfYWdlbnQ9Im5vIgotZmkKLUFDX0FSR19XSVRIKG1pbmlfYWdlbnQsLAotICAgICAgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taW5pLWFnZW50Ly0tZGlzYWJsZS1taW5pLWFnZW50IGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgobWluaWFnZW50LCwKLSAgICAgICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkIF0pICkKLUFDX0FSR19FTkFCTEUobWluaWFnZW50LCwKLSAgICAgICAgIEFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWluaS1hZ2VudC8tLWRpc2FibGUtbWluaS1hZ2VudCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShhZ2VudCwKLVsgIC0tZGlzYWJsZS1hZ2VudCAgICAgICAgICAgICAgICAgRG8gbm90IGJ1aWxkIHRoZSBhZ2VudCAoc25tcGQpLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9hZ2VudCIgIT0gInhubyI7IHRoZW4KLSAgIFNOTVBEPSdzbm1wZCQoRVhFRVhUKScKLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYWdlbnQiCi0gICBUUkFQTElCUz0nJChUUkFQRFdJVEhBR0VOVCknCi0gICBVU0VUUkFQTElCUz0nJChVU0VBR0VOVExJQlMpJwotZWxzZQotICAgU05NUEQ9IiIKLSAgICMgd2Ugc3RpbGwgbmVlZC93YW50IHRoZSBhZ2VudGxpYnMgKGZvciBzdWJhZ2VudHMsIGUuZy4gc25tcHRyYXBkKQotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBhZ2VudCIKLSAgICMgYnVpbGRpbmcgc25tcHRyYXBkIHcvbyBhZ2VudGxpYnMgZG9lc24ndCB3b3JrIGF0bQotICAgI1RSQVBMSUJTPSckKFRSQVBEV0lUSE9VVEFHRU5UKScKLSAgICNVU0VUUkFQTElCUz0nJChVU0VMSUJTKScKLSAgIFRSQVBMSUJTPSckKFRSQVBEV0lUSEFHRU5UKScKLSAgIFVTRVRSQVBMSUJTPSckKFVTRUFHRU5UTElCUyknCi1maQotQUNfU1VCU1QoU05NUEQpCi1BQ19TVUJTVChUUkFQTElCUykKLUFDX1NVQlNUKFVTRVRSQVBMSUJTKQotQUNfQVJHX1dJVEgoYWdlbnQsLAotICAgICAgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudC8tLWRpc2FibGUtYWdlbnQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoYXBwbGljYXRpb25zLAotWyAgLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFwcHMgKHNubXBnZXQsIC4uLikuXSkKLWlmIHRlc3QgIngkZW5hYmxlX2FwcGxpY2F0aW9ucyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgYXBwcyIKLWZpCi0jIENvbW1vbiBtaXN0YWtlcwotQUNfQVJHX1dJVEgoYXBwbGljYXRpb25zLCwKLSAgICAgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hcHBsaWNhdGlvbnMvLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtYW51YWxzLAotWyAgLS1kaXNhYmxlLW1hbnVhbHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWFudWFscy5dKQotaWYgdGVzdCAieCRlbmFibGVfbWFudWFscyIgIT0gInhubyI7IHRoZW4KLSAgIE1BSU5TVUJTPSIkTUFJTlNVQlMgbWFuIgotZmkKLUFDX0FSR19XSVRIKG1hbnVhbHMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWFudWFscy8tLWRpc2FibGUtbWFudWFscyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShzY3JpcHRzLAotWyAgLS1kaXNhYmxlLXNjcmlwdHMgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgc2NyaXB0cyAobWliMmMsIC4uLikuXSkKLWlmIHRlc3QgIngkZW5hYmxlX3NjcmlwdHMiICE9ICJ4bm8iOyB0aGVuCi0gICBNQUlOU1VCUz0iJE1BSU5TVUJTIGxvY2FsIgotZmkKLUFDX0FSR19XSVRIKHNjcmlwdHMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2NyaXB0cy8tLWRpc2FibGUtc2NyaXB0cyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShtaWJzLAotWyAgLS1kaXNhYmxlLW1pYnMgICAgICAgICAgICAgICAgICBEbyBub3QgaW5zdGFsbCB0aGUgbWliIGZpbGVzLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9taWJzIiAhPSAieG5vIjsgdGhlbgotICAgTUFJTlNVQlM9IiRNQUlOU1VCUyBtaWJzIgotZmkKLSMgd2l0aC1taWJzIGlzIHZhbGlkIHRvbywgYnV0IG1lYW5zIHNvbWV0aGluZyBlbHNlCi0KLUFDX1NVQlNUKE1BSU5TVUJTKQotQUNfTVNHX0NIRUNLSU5HKFt3aGF0IHRvIGJ1aWxkIGFuZCBpbnN0YWxsXSkKLUFDX01TR19SRVNVTFQoWyRNQUlOU1VCU10pCi0KLUFDX0FSR19FTkFCTEUobWliLWxvYWRpbmcsCi1bICAtLWRpc2FibGUtbWliLWxvYWRpbmcgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBwYXJzZXMgYW5kIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlwdWxhdGVzIHRoZSBtaWIgZmlsZXMuXSkKLWlmIHRlc3QgIngkZW5hYmxlX21pYl9sb2FkaW5nIiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HXSwgMSwgCi0gICAgICAgICAgICBbRGVmaW5lIGlmIG1pYiBsb2FkaW5nIGFuZCBwYXJzaW5nIGNvZGUgc2hvdWxkIG5vdCBiZSBpbmNsdWRlZF0pCi1maQotQUNfQVJHX1dJVEgobWliLWxvYWRpbmcsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtbWliLWxvYWRpbmcvLS1kaXNhYmxlLW1pYi1sb2FkaW5nIGluc3RlYWQgXSkgKQotCi0jCi1TTk1QX1ZFUlNJT05TPSIiCi1BQ19BUkdfRU5BQkxFKHNubXB2MSwKLVsgIC0tZGlzYWJsZS1zbm1wdjEgICAgICAgICAgICAgICAgRG8gbm90IGluY2x1ZGUgY29kZSB0aGF0IGltcGxlbWVudHMgU05NUHYxLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjEiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfU05NUFYxXSwgMSwgCi0gICAgICAgICAgICBbRGVmaW5lIGlmIFNOTVB2MSBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWRdKQotZWxzZQotICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAxIgotZmkKLUFDX0FSR19XSVRIKHNubXB2MSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1zbm1wdjEvLS1kaXNhYmxlLXNubXB2MSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShzbm1wdjJjLAotWyAgLS1kaXNhYmxlLXNubXB2MmMgICAgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBjb2RlIHRoYXQgaW1wbGVtZW50cyBTTk1QdjJjLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9zbm1wdjJjIiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShbTkVUU05NUF9ESVNBQkxFX1NOTVBWMkNdLCAxLCAKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgU05NUHYyYyBjb2RlIHNob3VsZCBub3QgYmUgaW5jbHVkZWRdKQotZWxzZQotICBTTk1QX1ZFUlNJT05TPSIkU05NUF9WRVJTSU9OUyAyYyIKLWZpCi1BQ19BUkdfV0lUSChzbm1wdjJjLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXNubXB2MmMvLS1kaXNhYmxlLXNubXB2MmMgaW5zdGVhZCBdKSApCi0KLVNOTVBfVkVSU0lPTlM9IiRTTk1QX1ZFUlNJT05TIDMiCi1BQ19NU0dfQ0FDSEVfQUREKFNOTVAgVmVyc2lvbnMgU3VwcG9ydGVkOiAgICRTTk1QX1ZFUlNJT05TKQotCi1BQ19BUkdfRU5BQkxFKHNldC1zdXBwb3J0LAotWyAgLS1kaXNhYmxlLXNldC1zdXBwb3J0ICAgICAgICAgICBEbyBub3QgYWxsb3cgU05NUCBzZXQgcmVxdWVzdHMgdG8gdGhlIGFnZW50Ll0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9zZXRfc3VwcG9ydCIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVF0sIDEsIAotICAgICAgICAgICAgW0RlZmluZSBpZiBTTk1QIFNFVCBzdXBwb3J0IHNob3VsZCBiZSBkaXNhYmxlZF0pCi1maQotQUNfQVJHX1dJVEgoc2V0LXN1cHBvcnQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc2V0LXN1cHBvcnQvLS1kaXNhYmxlLXNldC1zdXBwb3J0IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGRlcywKLVsgIC0tZGlzYWJsZS1kZXMgICAgICAgICAgICAgICAgICAgRG8gbm90IHN1cHBvcnQgREVTIGVuY3J5cHRpb24uXSkKLWlmIHRlc3QgIngkZW5hYmxlX2RlcyIgPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoW05FVFNOTVBfRElTQUJMRV9ERVNdLCAxLCAKLSAgICAgICAgICAgIFtEZWZpbmUgaWYgREVTIGVuY3J5cHRpb24gc2hvdWxkIG5vdCBiZSBzdXBwb3J0ZWRdKQotZmkKLUFDX0FSR19XSVRIKGRlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1kZXMvLS1kaXNhYmxlLWRlcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShwcml2YWN5LAotWyAgLS1kaXNhYmxlLXByaXZhY3kgICAgICAgICAgICAgICBEb24ndCBjb21waWxlIGluIHN1cHBvcnQgZm9yIHByaXZhY3kgKGVuY3J5cHRpb24pLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9wcml2YWN5IiAhPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYpCi1maQotQUNfQVJHX1dJVEgocHJpdmFjeSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1wcml2YWN5Ly0tZGlzYWJsZS1wcml2YWN5IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1kNSwKLVsgIC0tZGlzYWJsZS1tZDUgICAgICAgICAgICAgICAgICAgRG8gbm90IHN1cHBvcnQgTUQ1IGF1dGhlbnRpY2F0aW9uLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KLSAgQUNfREVGSU5FKFtORVRTTk1QX0RJU0FCTEVfTUQ1XSwgMSwgCi0gICAgICAgICAgICBbRGVmaW5lIGlmIE1ENSBhdXRoZW50aWNhdGlvbiBzaG91bGQgbm90IGJlIHN1cHBvcnRlZF0pCi1maQotQUNfQVJHX1dJVEgobWQ1LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLW1kNS8tLWRpc2FibGUtbWQ1IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGludGVybmFsLW1kNSwKLVsgIC0tZW5hYmxlLWludGVybmFsLW1kNSAgICAgICAgICAgVXNlIHRoZSBpbnRlcm5hbCBNRDUgc3VwcG9ydC5dKQotaWYgdGVzdCAieCRlbmFibGVfaW50ZXJuYWxfbWQ1IiA9ICJ4eWVzIjsgdGhlbgotICBpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiID0gInhubyI7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWW91IGNhbiBub3Qgc3BlY2lmeSBib3RoIC0tZW5hYmxlLWludGVybmFsLW1kNSBhbmQgLS1kaXNhYmxlLW1kNSkKLSAgZWxzZQotICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpCi0gIGZpCi1maQotQUNfQVJHX1dJVEgoaW50ZXJuYWwtbWQ1LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWludGVybmFsLW1kNS8tLWRpc2FibGUtaW50ZXJuYWwtbWQ1IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGlwdjYsCi1bICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlIElQdjYgcmVhZHkgdmVyc2lvbi5dLAotICAgIFtpZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX0lQVjYpCi0gICAgZmldKQotQUNfQVJHX1dJVEgoaXB2NiwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1pcHY2Ly0tZGlzYWJsZS1pcHY2IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGxvY2FsLXNtdXgsCi1bICAtLWVuYWJsZS1sb2NhbC1zbXV4ICAgICAgICAgICAgIFJlc3RyaWN0IFNNVVggY29ubmVjdGlvbnMgdG8gbG9jYWxob3N0IChieSBkZWZhdWx0KS5dLAotICAgIFtpZiB0ZXN0ICJ4JGVuYWJsZV9sb2NhbF9zbXV4IiA9ICJ4eWVzIjsgdGhlbgotICAgICAgQUNfREVGSU5FKE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVgpCi0gICAgZmldKQotQUNfQVJHX1dJVEgobG9jYWwtc211eCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1sb2NhbC1zbXV4Ly0tZGlzYWJsZS1sb2NhbC1zbXV4IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGRlYnVnZ2luZywKLVsgIC0tZW5hYmxlLWRlYnVnZ2luZyAgICAgICAgICAgICAgT3V0cHV0cyBleHRyYSBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gYXQgYWxsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZXMuICBOb3JtYWxseSwgeW91IHNob3VsZCBub3QgZW5hYmxlIHRoaXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnV0IGluc3RlYWQgdXNlIHRoZSAtRCBmbGFnIG9mIHRoZSBjb21tYW5kcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGljaCB0b2dnbGVzIGRlYnVnaW5nIG91dHB1dCBhdCBydW50aW1lLgotICAtLWRpc2FibGUtZGVidWdnaW5nICAgICAgICAgICAgIERpc2FsbG93cyBkZWJ1Z2dpbmcgY29kZSB0byBiZSBidWlsdCBpbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIG1pZ2h0IHByb3ZpZGUgc29tZSBzcGVlZCBiZW5lZml0cy5dLAotICAgIEFDX0RFRklORShORVRTTk1QX0FMV0FZU19ERUJVRykpCi1BQ19BUkdfV0lUSChkZWJ1Z2dpbmcsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZGVidWdnaW5nLy0tZGlzYWJsZS1kZWJ1Z2dpbmcgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoZGV2ZWxvcGVyLAotWyAgLS1lbmFibGUtZGV2ZWxvcGVyICAgICAgICAgICAgICBUdXJucyBvbiBzdXBlci1kdXBlci1leHRyYS1jb21waWxlLXdhcm5pbmdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlbiB1c2luZyBnY2MuXSwKLSAgICBkZXZlbG9wZXI9eWVzKQotQUNfQVJHX1dJVEgoZGV2ZWxvcGVyLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLWRldmVsb3Blci8tLWRpc2FibGUtZGV2ZWxvcGVyIGluc3RlYWQgXSkgKQotCi1pZiB0ZXN0ICJ4JGVuYWJsZV9kZWJ1Z2dpbmciID0gInhubyI7IHRoZW4KLSAgICBBQ19ERUZJTkUoTkVUU05NUF9OT19ERUJVR0dJTkcpCi1maQotCi1BQ19BUkdfV0lUSChkbWFsbG9jLAotWyAgLS13aXRoLWRtYWxsb2M9UEFUSCAgICAgICAgICAgICBVc2UgZG1hbGxvYyBsaWJyYXJ5ICh3d3cuZG1hbGxvYy5jb20pXSwKLSAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICBMSUJTPSIkTElCUyAtbGRtYWxsb2MiCi0gICAgICBBQ19ERUZJTkUoSEFWRV9ETUFMTE9DX0gpCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKLSAgICAgIExJQlM9IiRMSUJTIC1sZG1hbGxvYyIKLSAgICAgIEFDX0RFRklORShIQVZFX0RNQUxMT0NfSCkKLSAgICBmaQotKQotQUNfU1VCU1QoSEFWRV9ETUFMTE9DX0gpCi1BQ19BUkdfRU5BQkxFKGRtYWxsb2MsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWRtYWxsb2MvLS13aXRob3V0LWRtYWxsb2MgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGVmZW5jZSwKLVsgIC0td2l0aC1lZmVuY2UgICAgICAgICAgICAgICAgICAgTG9vayBmb3IgYW5kIHVzZSBsaWJlZmVuY2UgKG1hbGxvYykuXSwKLSAgICAgIHVzZV9lZmVuY2U9IiR3aXRodmFsIikKLUFDX0FSR19FTkFCTEUoZWZlbmNlLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lZmVuY2UvLS13aXRob3V0LWVmZW5jZSBpbnN0ZWFkIF0pICkKLQotdHJ5cnNhcmVmPW5vCi1BQ19BUkdfV0lUSChyc2FyZWYsCi1bICAtLXdpdGgtcnNhcmVmPVBBVEggICAgICAgICAgICAgIExvb2sgZm9yIGxpYnJzYXJlZiBpbiBQQVRIL2xpYi5dLAotICAgIGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieHllcyI7IHRoZW4KLSAgICAgIHRyeXJzYXJlZj15ZXMKLSAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgotICAgICAgdHJ5cnNhcmVmPW5vCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKLSAgICAgIHRyeXJzYXJlZj15ZXMKLSAgICBmaSwKLSkKLUFDX0FSR19FTkFCTEUocnNhcmVmLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1yc2FyZWYvLS13aXRob3V0LXJzYXJlZiBpbnN0ZWFkIF0pICkKLQotdHJ5b3BlbnNzbD1kZWZhdWx0eWVzCi1hc2tlZG9wZW5zc2w9bm8KLUFDX0FSR19XSVRIKG9wZW5zc2wsCi1bICAtLXdpdGgtb3BlbnNzbD1QQVRIICAgICAgICAgICAgIExvb2sgZm9yIG9wZW5zc2wgaW4gUEFUSC9saWIuXSwKLSAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICB0cnlvcGVuc3NsPXllcwotICAgICAgYXNrZWRvcGVuc3NsPXllcwotICAgIGVsaWYgdGVzdCAieCR3aXRodmFsIiA9ICJ4bm8iOyB0aGVuCi0gICAgICB0cnlvcGVuc3NsPW5vCi0gICAgZWxpZiB0ZXN0IC1kICIkd2l0aHZhbCI7IHRoZW4KLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgkd2l0aHZhbCkKLSAgICAgIHRyeW9wZW5zc2w9eWVzCi0gICAgICBhc2tlZG9wZW5zc2w9eWVzCi0gICAgZmksCi0pCi1pZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiID0gInhkZWZhdWx0eWVzIjsgdGhlbgotICAgICAgQUNfQUREX1NFQVJDSF9QQVRIKC91c3IvbG9jYWwvc3NsKQotICAgICAgdHJ5b3BlbnNzbD15ZXMKLWZpCi1BQ19BUkdfRU5BQkxFKG9wZW5zc2wsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCBdKSApCi1BQ19BUkdfV0lUSChzc2wsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW9wZW5zc2wvLS13aXRob3V0LW9wZW5zc2wgaW5zdGVhZCBdKSApCi1BQ19BUkdfRU5BQkxFKHNzbCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BlbnNzbC8tLXdpdGhvdXQtb3BlbnNzbCBpbnN0ZWFkIF0pICkKLQotdHJ5a3JiNT1kZWZhdWx0eWVzCi1hc2tlZGtyYjU9bm8KLUFDX0FSR19XSVRIKGtyYjUsCi1bICAtLXdpdGgta3JiNT1QQVRIICAgICAgICAgICAgICAgIExvb2sgZm9yIGtyYjUgaW4gUEFUSC9saWIuXSwKLSAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICB0cnlrcmI1PXllcwotICAgICAgYXNrZWRrcmI1PXllcwotICAgICAga3JiNXBhdGg9dW5kZWYKLSAgICBlbGlmIHRlc3QgIngkd2l0aHZhbCIgPSAieG5vIjsgdGhlbgotICAgICAgdHJ5a3JiNT1ubwotICAgICAga3JiNXBhdGg9dW5kZWYKLSAgICBlbGlmIHRlc3QgLWQgIiR3aXRodmFsIjsgdGhlbgotICAgICAgdHJ5a3JiNT15ZXMKLSAgICAgIGFza2Vka3JiNT15ZXMKLSAgICAgIGtyYjVwYXRoPSR3aXRodmFsCi0gICAgZmksCi0pCi1pZiB0ZXN0ICJ4JHRyeWtyYjUiID0gInhkZWZhdWx0eWVzIjsgdGhlbgotICAgICAgdHJ5a3JiNT15ZXMKLSAgICAgIGtyYjVwYXRoPS91c3Iva2VyYmVyb3MKLWZpCi1BQ19BUkdfRU5BQkxFKGtyYjUsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWtyYjUvLS13aXRob3V0LWtyYjUgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKHJwbSwKLVsgIC0td2l0aG91dC1ycG0gICAgICAgICAgICAgICAgICAgRG9uJ3QgaW5jbHVkZSBzdXBwb3J0IGZvciB0aGUgUlBNIHBhY2thZ2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYW5hZ2VtZW50IHN5c3RlbSB3aGVuIGJ1aWxkaW5nIHRoZSBob3N0IE1JQgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZS5dKQotQUNfQVJHX0VOQUJMRShycG0sLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXJwbS8tLXdpdGhvdXQtcnBtIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKGFnZW50eC1kb20tc29jay1vbmx5LAotWyAgLS1lbmFibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgICBEaXNhYmxlIFVEUC9UQ1AgdHJhbnNwb3J0cyBmb3IgYWdlbnR4Ll0sCi1BQ19ERUZJTkUoTkVUU05NUF9BR0VOVFhfRE9NX1NPQ0tfT05MWSkpCi1BQ19BUkdfV0lUSChhZ2VudHgtZG9tLXNvY2stb25seSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1hZ2VudHgtZG9tLXNvY2stb25seS8tLWRpc2FibGUtYWdlbnR4LWRvbS1zb2NrLW9ubHkgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUoc25tcHRyYXBkLXN1YmFnZW50LAotWyAgLS1kaXNhYmxlLXNubXB0cmFwZC1zdWJhZ2VudCAgICBEaXNhYmxlIGFnZW50eCBzdWJhZ2VudCBjb2RlIGluIHNubXB0cmFwZC5dKQotaWYgdGVzdCAieCRlbmFibGVfc25tcHRyYXBkX3N1YmFnZW50IiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX1NOTVBUUkFQRF9ESVNBQkxFX0FHRU5UWCkKLWZpCi1BQ19BUkdfV0lUSChzbm1wdHJhcGQtc3ViYWdlbnQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtc25tcHRyYXBkLXN1YmFnZW50Ly0tZGlzYWJsZS1zbm1wdHJhcGQtc3ViYWdlbnQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKG9wYXF1ZS1zcGVjaWFsLXR5cGVzLAotWyAgLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzICBEb24ndCB1c2Ugc3BlY2lhbCBvcGFxdWUgZW5jb2RpbmdzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgbm9ybWFsbHkgY2Fubm90IGhhbmRsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0aW5nIG51bWJlcnMsIG5vciBsYXJnZSA2NCBiaXQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnRlZ2VycyB3ZWxsLiAgQnkgZGVmYXVsdCwgdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0LXNubXAgcGFja2FnZSBjb21waWxlcyBpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIHRoZXNlIGV4dHJhIGRhdGF0eXBlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbiBhIGxlZ2FsIHdheSldKQotQUNfQVJHX0VOQUJMRShvcGFxdWUtc3BlY2lhbC10eXBlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtb3BhcXVlLXNwZWNpYWwtdHlwZXMvLS13aXRob3V0LW9wYXF1ZS1zcGVjaWFsLXR5cGVzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChtaWJkaXJzLAotWyAgLS13aXRoLW1pYmRpcnM9ImRpcjE6ZGlyMjoiICAgRGVmYXVsdCBkaXJlY3RvcmllcyB0byBsb29rIGZvciBtaWJzLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChEZWZhdWx0OiBcJEhPTUUvLnNubXAvbWliczpEQVRBRElSL3NubXAvbWlicyldLAotICAgIFtORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iJHdpdGhfbWliZGlycyIKLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQkRJUlMsIiR3aXRoX21pYmRpcnMiKV0pCi1BQ19BUkdfRU5BQkxFKG1pYmRpcnMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW1pYmRpcnMvLS13aXRob3V0LW1pYmRpcnMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKG1pYnMsCi1bICAtLXdpdGgtbWlicz0iaXRlbTE6aXRlbTI6IiAgICBEZWZhdWx0IG1pYiBJRHMgdG8gcmVhZC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoVGhlIGRlZmF1bHQgbGlzdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTTk1QdjItTUlCOklGLU1JQjpJUC1NSUI6VENQLU1JQjpVRFAtTUlCIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdpdGggdGhlIGFkZGl0aW9uIG9mIGFueSBtaWJzIHVzZWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBieSB0aGUgbWliIG1vZHVsZXMgdGhlIGFnZW50IGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlZCB3aXRoKV0sCi0gICAgTkVUU05NUF9ERUZBVUxUX01JQlM9IiR3aXRoX21pYnMiKQotIyBlbmFibGUtbWlicyBpcyB2YWxpZCB0b28sIGJ1dCBtZWFucyBzb21ldGhpbmcgZWxzZQotCi1BQ19BUkdfV0lUSChtaWJmaWxlcywKLVsgIC0td2l0aC1taWJmaWxlcz0iZmlsZTE6ZmlsZTIiIERlZmF1bHQgbWliIGZpbGVzIHRvIGxvYWQuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6ICBub25lLiAgdXNlcyBJRHMgYWJvdmUgaW5zdGVhZC4pXSwKLSAgICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQkZJTEVTLCIkd2l0aF9taWJmaWxlcyIpKQotQUNfQVJHX0VOQUJMRShtaWJmaWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtbWliZmlsZXMvLS13aXRob3V0LW1pYmZpbGVzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1pYi1jb25maWctY2hlY2tpbmcsCi1bICAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nICAgIFR1cm5zIG9uIGV4dHJhIGNoZWNrcyBkdXJpbmcgY29uZmlndXJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIG1pYiBtb2R1bGVzLiBBbnkgY29uZmxpY3RzIHdpbGwgY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWd1cmUgdG8gYWJvcnQgKGRlZmF1bHQgaXMgdG8gaXNzdWUgYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm5pbmcgYW5kIGNvbnRpbnVlLildLAotICAgIHdpdGhfbWliX2NmZ19jaGVja3M9InllcyIsd2l0aF9taWJfY2ZnX2NoZWNrcz0ibm8iKQotQUNfQVJHX1dJVEgobWliLWNvbmZpZy1jaGVja2luZywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1pYi1jb25maWctZGVidWcsCi1bICAtLWVuYWJsZS1taWItY29uZmlnLWRlYnVnICAgICAgIFR1cm5zIG9uIHZlcmJvc2Ugb3V0cHV0IGR1cmluZyBtaWIgbW9kdWxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlndXJlIHByb2Nlc3NpbmcuKV0sCi0gICAgd2l0aF9taWJfY2ZnX2RlYnVnPSJ5ZXMiLHdpdGhfbWliX2NmZ19kZWJ1Zz0ibm8iKQotQUNfQVJHX1dJVEgobWliLWNvbmZpZy1jaGVja2luZywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1taWItY29uZmlnLWNoZWNraW5nLy0tZGlzYWJsZS1taWItY29uZmlnLWNoZWNraW5nIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfRU5BQkxFKG1mZC1yZXdyaXRlcywKLVsgIC0tZW5hYmxlLW1mZC1yZXdyaXRlcyAgICAgICAgICAgVXNlIG5ldyBNRkQgcmV3cml0ZXMgb2YgbWliIG1vZHVsZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hlcmUgYXZhaWxhYmxlLiAoZGVmYXVsdCBpcyB0byB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBtaWIgbW9kdWxlIGNvZGUpLl0pCi1pZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCi0gICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTKQotZmkKLUFDX0FSR19XSVRIKG1mZC1yZXdyaXRlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS1tZmQtcmV3cml0ZXMvLS1kaXNhYmxlLW1mZC1yZXdyaXRlcyBpbnN0ZWFkIF0pICkKLQotYXNrZWRwa2NzPW5vCi1BQ19BUkdfV0lUSChwa2NzLAotWyAgLS13aXRoLXBrY3M9UEFUSCAgICAgICAgICAgICAgICBMb29rIGZvciBwa2NzMTEgaW4gUEFUSC9saWIuXSwKLSAgICBpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInh5ZXMiOyB0aGVuCi0gICAgICBhc2tlZHBrY3M9eWVzCi0gICAgZWxpZiB0ZXN0ICJ4JHdpdGh2YWwiID0gInhubyI7IHRoZW4KLSAgICAgIGFza2VkcGtjcz1ubwotICAgIGVsaWYgdGVzdCAtZCAiJHdpdGh2YWwiOyB0aGVuCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJHdpdGh2YWwpCi0gICAgICBhc2tlZHBrY3M9eWVzCi0gICAgZmksCi0pCi1BQ19BUkdfRU5BQkxFKHBrY3MsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBrY3MvLS13aXRob3V0LXBrY3MgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUodGVzdGluZy1jb2RlLAotWyAgLS1lbmFibGUtdGVzdGluZy1jb2RlICAgICAgICAgICBFbmFibGVzIHNvbWUgY29kZSBzZWN0aW9ucyB0aGF0IHNob3VsZCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmx5IGJlIHVzZWQgZm9yIHRlc3Rpbmcgb2YgY2VydGFpbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVAgZnVuY3Rpb25hbGl0aWVzLiAgVGhpcyBzaG91bGQgKm5vdCogCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgdHVybmVkIG9uIGZvciBwcm9kdWN0aW9uIHVzZS4gIEV2ZXIuXSwKLSAgICBBQ19ERUZJTkUoTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFKSkKLUFDX0FSR19XSVRIKHRlc3RpbmctY29kZSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS10ZXN0aW5nLWNvZGUvLS1kaXNhYmxlLXRlc3RpbmctY29kZSBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX0VOQUJMRShyZWVudHJhbnQsCi1bICAtLWVuYWJsZS1yZWVudHJhbnQgICAgICAgICAgICAgIEVuYWJsZXMgbG9ja2luZyBmdW5jdGlvbnMgdGhhdCBwcm90ZWN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlicmFyeSByZXNvdXJjZXMgaW4gc29tZSBtdWx0aS10aHJlYWRpbmcKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbnZpcm9ubWVudHMuICBUaGlzIGRvZXMgbm90IGd1YXJhbnRlZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocmVhZC1zYWZlIG9wZXJhdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDdXJyZW50bHkgYW4gZXhwZXJpbWVudGFsIHNldHRpbmcuXSwKLSAgICB3aXRoX3Jlc19sb2Nrcz0ieWVzIix3aXRoX3Jlc19sb2Nrcz0ibm8iKQotQUNfQVJHX1dJVEgocmVlbnRyYW50LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXJlZW50cmFudC8tLWRpc2FibGUtcmVlbnRyYW50IGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChyb290LWFjY2VzcywKLVsKLUNvbmZpZ3VyaW5nIHRoZSBhZ2VudDoKLSAgLS13aXRob3V0LXJvb3QtYWNjZXNzICAgICAgICAgICBUaGUgc25tcGQgYWdlbnQgd29uJ3QgcmVxdWlyZSByb290IGFjY2VzcyB0bwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ1biBpdC4gIFRoZSBpbmZvcm1hdGlvbiBpdCByZXR1cm5zIGluIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pYi1JSSB0cmVlIG1heSBub3QgYmUgY29ycmVjdCwgaG93ZXZlci5dKQotQUNfQVJHX0VOQUJMRShyb290LWFjY2VzcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtcm9vdC1hY2Nlc3MvLS13aXRob3V0LXJvb3QtYWNjZXNzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChrbWVtLXVzYWdlLAotWyAgLS13aXRob3V0LWttZW0tdXNhZ2UgICAgICAgICAgICBEbyBub3QgaW5jbHVkZSBhbnkgY29kZSByZWxhdGVkIHRvIHRoZSB1c2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBrbWVtLl0pCi1BQ19BUkdfRU5BQkxFKGttZW0tdXNhZ2UsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWttZW0tdXNhZ2UvLS13aXRob3V0LWttZW0tdXNhZ2UgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGR1bW15LXZhbHVlcywKLVsgIC0td2l0aC1kdW1teS12YWx1ZXMgICAgICAgICAgICAgUHJvdmlkZSAncGxhY2Vob2xkZXInIGR1bW15IHZhbHVlcyB3aGVyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gaXMgbm90IGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGlzIGlzIHRlY2huaWNhbGx5IG5vdCBjb21wbGlhbnQgd2l0aCB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QIHNwZWNpZmljYXRpb25zLCBidXQgd2FzIGhvdyB0aGUgYWdlbnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRlZCBmb3IgdmVyc2lvbnMgPCA0LjAuXSkKLUFDX0FSR19FTkFCTEUoZHVtbXktdmFsdWVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kdW1teS12YWx1ZXMvLS13aXRob3V0LWR1bW15LXZhbHVlcyBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgocGVyc2lzdGVudC1kaXJlY3RvcnksCi1bICAtLXdpdGgtcGVyc2lzdGVudC1kaXJlY3Rvcnk9ImRpcmVjdG9yeSIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZWZhdWx0IGRpcmVjdG9yeSBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuXSxhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPSIkd2l0aF9wZXJzaXN0ZW50X2RpcmVjdG9yeSIpCi1BQ19BUkdfRU5BQkxFKHBlcnNpc3RlbnQtZGlyZWN0b3J5LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJzaXN0ZW50LWRpcmVjdG9yeS8tLXdpdGhvdXQtcGVyc2lzdGVudC1kaXJlY3RvcnkgaW5zdGVhZCBdKSApCi0KLWRlZmF1bHRfcGVyc2lzdGVudF9tYXNrPTA3NwotQUNfQVJHX1dJVEgocGVyc2lzdGVudC1tYXNrLAotWyAgLS13aXRoLXBlcnNpc3RlbnQtbWFzaz0ibWFzayIgIERlZmF1bHQgbWFzayBmb3IgcGVyc2lzdGVudCBkYXRhIHN0b3JhZ2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IDA3NyldLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBtYXNrIHZhbHVlIF0pOwotICBmaQotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgcGVyc2lzdGVudCBtYXNrICR3aXRodmFsKQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9QRVJTSVNURU5UX01BU0ssJHdpdGh2YWwpCi1dLFsKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IHBlcnNpc3RlbnQgbWFzayAkZGVmYXVsdF9wZXJzaXN0ZW50X21hc2spCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1BFUlNJU1RFTlRfTUFTSywkZGVmYXVsdF9wZXJzaXN0ZW50X21hc2spCi1dKQotQUNfQVJHX0VOQUJMRShwZXJzaXN0ZW50LW1hc2ssLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXBlcnNpc3RlbnQtbWFzayBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoY29weV9wZXJzaXN0ZW50X2ZpbGVzLAotWyAgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz0ibm8iIERvbid0IGNvcHkgcGVyc2lzdGVudCBmaWxlcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvciB1c2UgInllcyIgdG8gY29weSB0aGVtKS4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogeWVzKV0sCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSIkd2l0aF9jb3B5X3BlcnNpc3RlbnRfZmlsZXMiKQotQUNfQVJHX0VOQUJMRShjb3B5X3BlcnNpc3RlbnRfZmlsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNvcHlfcGVyc2lzdGVudF9maWxlcy8tLXdpdGhvdXQtY29weV9wZXJzaXN0ZW50X2ZpbGVzIGluc3RlYWQgXSkgKQotCi1kZWZhdWx0X3RlbXBfZmlsZV9wYXR0ZXJuPSIvdG1wL3NubXBkWFhYWFhYIgotQUNfQVJHX1dJVEgodGVtcC1maWxlLXBhdHRlcm4sCi1bICAtLXdpdGgtdGVtcC1maWxlLXBhdHRlcm49UEFUVEVSTiAgUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXMgKERlZmF1bHQ6IC90bXAvc25tcGRYWFhYWFgpXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcGF0dGVybiBdKTsKLSAgZmkKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyB0ZW1wb3JhcnkgZmlsZSBwYXR0ZXJuICR3aXRodmFsKQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiwiJHdpdGh2YWwiLFtQYXR0ZXJuIG9mIHRlbXBvcmFyeSBmaWxlc10pCi1dLFsKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IHRlbXBvcmFyeSBmaWxlIHBhdHRlcm4gJGRlZmF1bHRfdGVtcF9maWxlX3BhdHRlcm4pCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOLCIkZGVmYXVsdF90ZW1wX2ZpbGVfcGF0dGVybiIsW1BhdHRlcm4gb2YgdGVtcG9yYXJ5IGZpbGVzXSkKLV0pCi1BQ19BUkdfRU5BQkxFKHRlbXAtZmlsZS1wYXR0ZXJuLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC10ZW1wLWZpbGUtcGF0dGVybiBpbnN0ZWFkIF0pICkKLQotZGVmYXVsdF9hZ2VudHhfc29ja2V0PSIvdmFyL2FnZW50eC9tYXN0ZXIiCi1BQ19BUkdfV0lUSChhZ2VudHgtc29ja2V0LAotWyAgLS13aXRoLWFnZW50eC1zb2NrZXQ9RklMRSAgICAgICAgIEFnZW50WCBzb2NrZXQgKERlZmF1bHQ6IC92YXIvYWdlbnR4L21hc3RlciBhcyBzcGVjaWZpZWQgaW4gUkZDMjc0MSldLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBmdWxsIHBhdGggXSk7Ci0gIGZpCi0gIEFDX01TR19SRVNVTFQodXNpbmcgQWdlbnRYIHNvY2tldCAkd2l0aHZhbCkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQUdFTlRYX1NPQ0tFVCwiJHdpdGh2YWwiLFtVbml4IGRvbWFpbiBzb2NrZXQgZm9yIEFnZW50WCBtYXN0ZXItc3ViYWdlbnQgY29tbXVuaWNhdGlvbl0pCi1dLFsKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IEFnZW50WCBzb2NrZXQgJGRlZmF1bHRfYWdlbnR4X3NvY2tldCkKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfQUdFTlRYX1NPQ0tFVCwiJGRlZmF1bHRfYWdlbnR4X3NvY2tldCIsW1VuaXggZG9tYWluIHNvY2tldCBmb3IgQWdlbnRYIG1hc3Rlci1zdWJhZ2VudCBjb21tdW5pY2F0aW9uXSkKLV0pCi1BQ19BUkdfRU5BQkxFKGFnZW50eC1zb2NrZXQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWFnZW50eC1zb2NrZXQgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKGRlZmF1bHQtc25tcC12ZXJzaW9uLAotWyAgLS13aXRoLWRlZmF1bHQtc25tcC12ZXJzaW9uPSIzIiBEZWZhdWx0IHZlcnNpb24gb2YgU05NUCB0byB1c2UuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogMykKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExlZ2FsIHZhbHVlczogMSwgMiAoZm9yIFNOTVB2MmMpIG9yIDMuXSwKLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIkd2l0aF9kZWZhdWx0X3NubXBfdmVyc2lvbiIpCi1BQ19BUkdfRU5BQkxFKGRlZmF1bHQtc25tcC12ZXJzaW9uLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbi8tLXdpdGhvdXQtZGVmYXVsdC1zbm1wLXZlcnNpb24gaW5zdGVhZCBdKSApCi0KLSMgd2UgdGVzdCB0aGlzIG5vdyBhbmQgbGF0ZXIgYXMgd2VsbC4gIHdlIHRlc3QgaXQgbm93IHNvIGNvbmZpZ3VyZSBjYW4gZGllCi0jIGVhcmx5IG9uIHdpdGggYW4gZXJyb3IgcmF0aGVyIHRoYW4gd2FpdGluZyB0aWxsIHRoZSBlbmQgb2YgdGhlIHNjcmlwdC4KLWlmIHRlc3QgIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIngiOyB0aGVuCi0gIGlmIHRlc3QgIiRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICIyYyI7IHRoZW4KLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OPSIyIgotICBmaQotICBpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjEiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjIiIC1hICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgIT0gIjMiOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKElsbGVnYWwgdmVyc2lvbiBudW1iZXIgcGFzc2VkIHRvIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbikKLSAgZmkKLWZpCi0KLUFDX0FSR19XSVRIKHN5c19jb250YWN0LAotWyAgLS13aXRoLXN5cy1jb250YWN0PSJ3aG9Ad2hlcmUiICBEZWZhdWx0IHN5c3RlbSBjb250YWN0LgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKERlZmF1bHQ6IExPR0lOQERPTUFJTk5BTUUpXSwKLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUPSIkd2l0aF9zeXNfY29udGFjdCIpCi1BQ19BUkdfRU5BQkxFKHN5c19jb250YWN0LCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXMtY29udGFjdC8tLXdpdGhvdXQtc3lzLWNvbnRhY3QgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKHN5c19sb2NhdGlvbiwKLVsgIC0td2l0aC1zeXMtbG9jYXRpb249ImxvY2F0aW9uIiAgRGVmYXVsdCBzeXN0ZW0gbG9jYXRpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoRGVmYXVsdDogVW5rbm93bildLAotICAgIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfU1lTX0xPQz0iJHdpdGhfc3lzX2xvY2F0aW9uIikKLUFDX0FSR19FTkFCTEUoc3lzX2xvY2F0aW9uLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1zeXMtbG9jYXRpb24vLS13aXRob3V0LXN5cy1sb2NhdGlvbiBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgobG9nZmlsZSwKLVsgIC0td2l0aC1sb2dmaWxlPSJsb2NhdGlvbiIgICAgICAgRGVmYXVsdCBsb2cgZmlsZSBsb2NhdGlvbiBmb3Igc25tcGQuXSwKLSAgICBhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0xPR0ZJTEU9IiR3aXRoX2xvZ2ZpbGUiKQotQUNfQVJHX0VOQUJMRShsb2dmaWxlLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1sb2dmaWxlLy0td2l0aG91dC1sb2dmaWxlIGluc3RlYWQgXSkgKQotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAibm8iOyB0aGVuCi0gICAgYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9MT0dGSUxFPSJub25lIgotZmkKLQotQUNfQVJHX1dJVEgodHJhbnNwb3J0cywKLVsgIC0td2l0aC10cmFuc3BvcnRzPSJ0MSB0MiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCB0cmFuc3BvcnQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS5dKQotQUNfQVJHX1dJVEgob3V0X3RyYW5zcG9ydHMsCi1bICAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9InQxIC4uLiIgIEV4Y2x1ZGUgbGlzdGVkIFNOTVAgdHJhbnNwb3J0cwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KLQotICBBdmFpbGFibGUgU05NUCB0cmFuc3BvcnQgbW9kdWxlcyBhcmU6Ci0KLSAgICBVRFAgICAgICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGFsd2F5cyBjb21waWxlZCBpbi4KLSAgICBVRFBJUHY2ICAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgVURQL0lQdjYuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgYXZhaWxhYmxlIGZvciBMaW51eCwgU29sYXJpcyBhbmQKLSAgICAgICAgICAgICAgICBGcmVlQlNEIGF0IGxlYXN0LgotICAgICAgICAgICAgICAgIEl0IGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQuCi0gICAgVENQSVB2NiAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIFVEUC9JUHY2LgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIGF2YWlsYWJsZSBmb3IgTGludXgsIFNvbGFyaXMgYW5kCi0gICAgICAgICAgICAgICAgRnJlZUJTRCBhdCBsZWFzdC4KLSAgICAgICAgICAgICAgICBJdCBpcyBuZXZlciBjb21waWxlZCBpbiBieSBkZWZhdWx0LgotICAgIFRDUCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBUQ1AvSVAuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCwgYnV0IG1heSBiZSBvbWl0dGVkLgotICAgIFVuaXggICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBVbml4IGRvbWFpbiBwcm90b2NvbHMuCi0gICAgICAgICAgICAgICAgVGhpcyB0cmFuc3BvcnQgaXMgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBleGNlcHQgb24gV2luMzIKLSAgICAgICAgICAgICAgICBwbGF0Zm9ybXMsIGFuZCBtYXkgYmUgb21pdHRlZC4KLSAgICBDYWxsYmFjayAgICBzdXBwb3J0IGZvciBTTk1QIG92ZXIgYW4gaW50ZXJuYWwgbG9jYWxseSBjb25uZWN0ZWQgcGFpcgotICAgICAgICAgICAgICAgIG9mIHNubXBfc2Vzc2lvbnMuCi0gICAgQUFMNVBWQyAgICAgc3VwcG9ydCBmb3IgU05NUCBvdmVyIEFBTDUgUFZDcy4KLSAgICAgICAgICAgICAgICBUaGlzIHRyYW5zcG9ydCBpcyBwcmVzZW50bHkgb25seSBhdmFpbGFibGUgZm9yIExpbnV4LAotICAgICAgICAgICAgICAgIGlzIG5ldmVyIGNvbXBpbGVkIGluIGJ5IGRlZmF1bHQgYW5kIG1heSBiZSBvbWl0dGVkLgotICAgIElQWCAgICAgICAgIHN1cHBvcnQgZm9yIFNOTVAgb3ZlciBJUFggcGVyIFJGQyAxNDIwLgotICAgICAgICAgICAgICAgIFRoaXMgdHJhbnNwb3J0IGlzIHByZXNlbnRseSBvbmx5IGF2YWlsYWJsZSBmb3IgTGludXgsCi0gICAgICAgICAgICAgICAgaXMgbmV2ZXIgY29tcGlsZWQgaW4gYnkgZGVmYXVsdCBhbmQgbWF5IGJlIG9taXR0ZWQuCi1dKQotCi0jCi0jIENhdGNoIGNvbW1vbiBtaXN0YWtlcyBpbiB0cmFuc3BvcnQgb3B0aW9ucwotIwotQUNfQVJHX1dJVEgodHJhbnNwb3J0LCwgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtdHJhbnNwb3J0cy8tLXdpdGhvdXQtdHJhbnNwb3J0cyBpbnN0ZWFkIF0pICAgICApCi1BQ19BUkdfV0lUSChvdXQtdHJhbnNwb3J0LCxBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1vdXQtdHJhbnNwb3J0cy8tLXdpdGhvdXQtb3V0LXRyYW5zcG9ydHMgaW5zdGVhZCBdKSApCi0KLSMKLSMgc2VjdXJpdHkgbW9kdWxlcwotIwotCi1BQ19BUkdfV0lUSChzZWN1cml0eS1tb2R1bGVzLAotWyAgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXM9InMxIHMyIC4uLiIgICBDb21waWxlIGluIHRoZSBnaXZlbiBTTk1QIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2R1bGUgc2VydmljZXMgKHNwYWNlIHNlcGFyYXRlZCBsaXN0KS4KLQotICBBdmFpbGFibGUgU05NUCBzZWN1cml0eSBzZXJ2aWNlczoKLQotICAgICAgICB1c20gICAgICAgICAgICAgICAgc3VwcG9ydCBmb3IgdXNlciBiYXNlZCBTTk1QIHNlY3VyaXR5Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAocmVxdWlyZWQgYW5kIGFsd2F5cyBjb21waWxlZCBpbikKLSAgICAgICAga3NtICAgICAgICAgICAgICAgIHN1cHBvcnQgZm9yIGtlcmJlcm9zIGJhc2VkIFNOTVAgc2VjdXJpdHkKLV0pCi1BQ19BUkdfRU5BQkxFKHNlY3VyaXR5LW1vZHVsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlY3VyaXR5LW1vZHVsZXMvLS13aXRob3V0LXNlY3VyaXR5LW1vZHVsZXMgaW5zdGVhZCBdKSApCi0KLSMKLSMgbWliIG1vZHVsZXMKLSMKLQotQUNfQVJHX1dJVEgobWliX21vZHVsZXMsCi1bICAtLXdpdGgtbWliLW1vZHVsZXM9Iml0ZW0xIC4uLiIgIENvbXBpbGUgd2l0aCBhZGRpdGlvbmFsIG1pYiBtb2R1bGVzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoU3BhY2Ugc2VwYXJhdGVkIGxpc3QpLl0pCi1BQ19BUkdfRU5BQkxFKG1pYl9tb2R1bGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1taWItbW9kdWxlcy8tLXdpdGhvdXQtbWliLW1vZHVsZXMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19XSVRIKG91dF9taWJfbW9kdWxlcywKLVsgIC0td2l0aC1vdXQtbWliLW1vZHVsZXM9Imxpc3QiICAgQ29tcGlsZSB3aXRob3V0IHRoZXNlIG1pYiBtb2R1bGVzLgotCi0gIERlZmF1bHQgbWliIG1vZHVsZXMgY29tcGlsZWQgaW50byB0aGUgYWdlbnQgKHdoaWNoIGNhbiBiZSByZW1vdmVkKToKLSAgCi0gICAgbWliSUkgICAgICAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgbWliLUlJIHRyZWUuCi0gICAgc25tcHYzbWlicyAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgc25tcHYzIG1pYiBtb2R1bGVzLgotICAgIHVjZF9zbm1wICAgICAgICAgICAgICAgVUNELVNOTVAtTUlCIHNwZWNpZmljIGV4dGVuc2lvbnMuCi0gICAgYWdlbnRfbWlicyAgICAgICAgICAgICBORVQtU05NUC1BR0VOVC1NSUIgZXh0ZW5zaW9ucwotICAgIGFnZW50eCAgICAgICAgICAgICAgICAgQWdlbnRYIHN1cHBvcnQgKHNlZSBiZWxvdykKLSAgICBub3RpZmljYXRpb24gICAgICAgICAgIG1pYnMgc3VwcG9ydGluZyBzcGVjaWZpY2F0aW9uIG9mIHRyYXAgZGVzdGluYXRpb25zLgotICAgIHRhcmdldCAgICAgICAgICAgICAgICAgU3VwcG9ydCBmb3IgdGhlIFNOTVAgV0dzIFRBUkdFVC1NSUIuCi0gICAgdXRpbGl0aWVzICAgICAgICAgICAgICBnZW5lcmFsIGFnZW50IGNvbmZpZ3VyYXRpb24gdXRpbGl0aWVzLgotICAgIGRpc21hbi9ldmVudCAgICAgICAgICAgc3VwcG9ydCBmb3IgdGhlIERJU01BTi1FVkVOVC1NSUIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN1cHBvcnRzIHNlbGYgbW9uaXRvcmluZyBhbmQgbm90aWZpY2F0aW9uIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnkgd2hlbiBlcnJvciBjb25kaXRpb25zIGFyZSBmb3VuZCkKLSAgICBkaXNtYW4vc2NoZWR1bGUgICAgICAgIHN1cHBvcnQgZm9yIHRoZSBESVNNQU4tU0NIRURVTEUtTUlCCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0cmlnZ2VyIFNFVCByZXF1ZXN0cyBhdCBzcGVjaWZpZWQgdGltZXMpCi0gICAgaG9zdCAgICAgICAgICAgICAgICAgICBob3N0IHJlc291cmNlcyBtaWIgc3VwcG9ydC4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG9ubHkgb24gbWFqb3Igc3VwcG9ydGVkIHBsYXRmb3JtcykKLQotICBPcHRpb25hbCBtaWIgbW9kdWxlcyB0aGF0IGNhbiBiZSBidWlsdCBpbnRvIHRoZSBhZ2VudCBpbmNsdWRlOgotICAgIHNtdXggICAgICAgICAgICAgICAgICAgc211eCBzdXBwb3J0IHRvIGFsbG93IHN1YmFnZW50cyB0byBhdHRhY2ggdG8gc25tcGQuCi0gICAgbWliSUkvbXRhX3NlbmRtYWlsICAgICBTZW5kbWFpbCBzdGF0aXN0aWNzIG1vbml0b3JpbmcgKE1UQS1NSUIpCi0gICAgdWNkLXNubXAvZGlza2lvICAgICAgICBUYWJsZSBvZiBpby1kZXZpY2VzIGFuZCBob3cgbXVjaCBkYXRhIHRoZXkgaGF2ZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVhZC93cml0dGVuLiAgKG9ubHkgdGVzdGVkIG9uIFNvbGFyaXMsIExpbnV4KQotICAgIGRpc21hbi9vbGQtZXZlbnQtbWliICAgcHJldmlvdXMgaW1wbGVtZW50YXRpb24gb2YgdGhlIERJU01BTi1FVkVOVC1NSUIKLQotICBPcHRpb25hbCBtb2R1bGVzIGZvciBzcGVjaWZpYyBwbGF0Zm9ybXMKLSAgICBMaW51eAotICAgICAgdWNkLXNubXAvbG1TZW5zb3JzICAgaGFyZHdhcmUgbW9uaXRvcmluZyAoTE0tU0VOU09SUy1NSUIpCi0gICAgICBpcC1taWIvaXB2NEludGVyZmFjZVRhYmxlICAoZXhwZXJpbWVudGFsKQotICAgICAgaXAtbWliL2lwdjZJbnRlcmZhY2VUYWJsZSAgKGV4cGVyaW1lbnRhbCkKLSAgICAgIHR1bm5lbCAgICAgICAgICAgICAgIExpbnV4IFRVTk5FTC1NSUIgc3VwcG9ydCAoaWZUYWJsZSBleHRlbnNpb24pCi0gICAgICBtaWJJSS9pbnRlcmZhY2VzICAgICAob2xkIGlmVGFibGUgaW1wbGVtZW50YXRpb24pCi0gICAgICBtaXNjL2lwZndhY2MgICAgICAgICBhY2NvdW50aW5nIHJ1bGVzIElQIGZpcmV3YWxsIGluZm9ybWF0aW9uCi0gICAgICBpcGZ3Y2hhaW5zL2lwZndjaGFpbnMgIGZpcmV3YWxsIGNoYWlucyB1bmRlciBpcGZ3Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChTZWUgYWdlbnQvbWliZ3JvdXAvaXBmd2NoYWlucy9SRUFETUUpCi0gICAgICBzY3RwLW1pYiAgICAgICAgICAgICBzdXBwb3J0IGZvciB0aGUgU0NUUC1NSUIKLQotICAgIFNvbGFyaXMKLSAgICAgIHVjZC1zbm1wL2xtU2Vuc29ycyAgIGhhcmR3YXJlIG1vbml0b3JpbmcgKExNLVNFTlNPUlMtTUlCKQotICAgICAgaWYtbWliICAgICAgICAgICAgICAgSUYtTUlCIHJld3JpdGUgKGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCi0gICAgICB0Y3AtbWliICAgICAgICAgICAgICBUQ1AtTUlCIHJld3JpdGUgKHRjcENvbm5lY3Rpb25UYWJsZSBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwTGlzdGVuZXJUYWJsZTsgYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKLSAgICAgIHVkcC1taWIgICAgICAgICAgICAgIFVEUC1NSUIgcmV3cml0ZSAodWRwRW5kcG9pbnRUYWJsZTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkIC0tZW5hYmxlLW1mZC1yZXdyaXRlcykKLQotICAgIEZyZWVCU0QvT3BlbkJTRAotICAgICAgaWYtbWliICAgICAgICAgICAgICAgSUYtTUlCIHJld3JpdGUgKGFkZCAtLWVuYWJsZS1tZmQtcmV3cml0ZXMpCi0KLSAgQWdlbnRYIHN1cHBvcnQ6Ci0gICAgYWdlbnR4L3N1YmFnZW50ICAgICAgICBhbGxvd3MgdGhlIGFnZW50IHRvIHJ1biBhcyBlaXRoZXIgYSBzbm1wIGFnZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBvciBhcyBhbiBhZ2VudFggc3ViLWFnZW50LgotICAgIGFnZW50eC9tYXN0ZXIgICAgICAgICAgbWFrZXMgdGhlIGFnZW50IHJ1biBhcyBhbiBhZ2VudFggbWFzdGVyIGFnZW50Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGEgbm9ybWFsIHNubXAgYWdlbnQuCi0gICAgYWdlbnR4ICAgICAgICAgICAgICAgICBpbmNsdWRlcyBib3RoIGFnZW50eC9tYXN0ZXIgYW5kIGFnZW50eC9jbGllbnQuCi0KLSAgT3B0aW9uYWwgbW9kdWxlcyBmb3IgQyBjb2RlcnMgdG8gbG9vayBhdCBhbmQvb3IgaW5jbHVkZSBhcyBleHRlbnNpb24gZXhhbXBsZXM6Ci0gIAotICAgIGV4YW1wbGVzL3VjZERlbW9QdWJsaWMgIFNOTVB2MyBpbnRlcm9wZXJhYmlsaXR5IHRlc3RpbmcgbWliLgotICAgIGV4YW1wbGVzL2V4YW1wbGUgICAgICAgIGV4YW1wbGUgQyBjb2RlIGV4dGVuc2lvbi5dKQotQUNfQVJHX0VOQUJMRShvdXRfbWliX21vZHVsZXMsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcy8tLXdpdGhvdXQtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotCi0KLSMKLUFDX0FSR19XSVRIKGVudGVycHJpc2Utb2lkLAotW0VudGVycHJpc2UgT0lEczogICh3YXJuaW5nOiB0aGlzIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4pCi0KLSAgLS13aXRoLWVudGVycHJpc2Utb2lkICAgICAgICAgICAgICBUaGUgZW50ZXJwcmlzZSBudW1iZXIgYXNzaWduZWQgdG8gdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVuZG9yIGJ5IElBTkEuICBTZWUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwOi8vd3d3LmlhbmEub3JnL2NnaS1iaW4vZW50ZXJwcmlzZS5wbAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdldCBvbmUsIHRob3VnaCB1c2luZyB0aGUgZGVmYXVsdCBpcwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2JhYmx5IHRoZSByaWdodCBjaG9pY2UgaXMgbW9zdCBjYXNlcy4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZGVmYXVsdCA4MDcyID0gImVudGVycHJpc2UubmV0LXNubXAiKV0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHZhbHVlIGZvciB0aGUgZW50ZXJwcmlzZSBudW1iZXIgXSk7Ci0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0VOVEVSUFJJU0VfT0lELCAkd2l0aHZhbCkKLSAgZW50X29pZD0iMSwzLDYsMSw0LDEsJHdpdGh2YWwiCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0VOVEVSUFJJU0VfTUlCLCAkZW50X29pZCkKLSAgZW50X2RvdF9vaWQ9IjEuMy42LjEuNC4xLiR3aXRodmFsIgotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9FTlRFUlBSSVNFX0RPVF9NSUIsICRlbnRfZG90X29pZCkKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBlbnRlcnByaXNlIG51bWJlciAkd2l0aHZhbCkKLV0sWwotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgImVudGVycHJpc2UubmV0LXNubXAiKQotXSkKLUFDX0FSR19FTkFCTEUoZW50ZXJwcmlzZS1vaWQsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVudGVycHJpc2Utb2lkLy0td2l0aG91dC1lbnRlcnByaXNlLW9pZCBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoZW50ZXJwcmlzZS1zeXNvaWQsCi1bCi0gIC0td2l0aC1lbnRlcnByaXNlLXN5c29pZCAgICAgICAgICAgVGhlIGJhc2UgT0lEIGZvciB0aGUgc3lzT2JqZWN0SUQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgc3lzdGVtIGdyb3VwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGRlZmF1bHQgLjEuMy42LjEuNC4xLjgwNzIuMy4yLi4uID0gCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRTbm1wQWdlbnRPSURzLi4uIildLFsKLSAgaWYgdGVzdCAiJHdpdGh2YWwiID0geWVzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFsgUGxlYXNlIHByb3ZpZGUgYSBiYXNlIE9JRCB2YWx1ZSBdKTsKLSAgZmkKLSAgc3lzX29pZD1gZWNobyAiJHdpdGh2YWwiIHwgc2VkICdzL15cLi8vJyB8IHNlZCAncy9cLi9cLC9nJ2AKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX01JQiwgJHN5c19vaWQpCi0gIHN5c19kb3Rfb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nYAotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fRE9UX01JQiwgJHN5c19kb3Rfb2lkKQotICBzeXNvaWRfbGVuPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvW15cLl0vL2cnIHwgYXdrIC1GXC4gJ3sgcHJpbnQgTkYgfSdgCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX1NZU1RFTV9ET1RfTUlCX0xFTkdUSCwgJHN5c29pZF9sZW4pCi0gIEFDX01TR19SRVNVTFQodXNpbmcgZW50ZXJwcmlzZSBzeXNPSUQgJHdpdGh2YWwgLi4uLikKLV0sWwotICBBQ19NU0dfUkVTVUxUKHVzaW5nIGRlZmF1bHQgZW50ZXJwcmlzZSBzeXNPSUQgIk5FVC1TTk1QLU1JQjo6bmV0U25tcEFnZW50T0lEcy4uLiIpCi1dKQotQUNfQVJHX0VOQUJMRShlbnRlcnByaXNlLXN5c29pZCwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQvLS13aXRob3V0LWVudGVycHJpc2Utc3lzb2lkIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChlbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQsCi1bCi0gIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQgVGhlIE9JRCB1c2VkIGZvciB0aGUgcm9vdCBvZgotCQkJCSAgICAgZW50ZXJwcmlzZSBzcGVjaWZpYyBub3RpZmljYXRpb25zLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChkZWZhdWx0IC4xLjMuNi4xLjQuMS44MDcyLjQgPSAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldFNubXBOb3RpZmljYXRpb25QcmVmaXgiKV0sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIGJhc2UgT0lEIHZhbHVlIF0pOwotICBmaQotICBub3RpZmljYXRpb25fb2lkPWBlY2hvICIkd2l0aHZhbCIgfCBzZWQgJ3MvXlwuLy8nIHwgc2VkICdzL1wuL1wsL2cnYAotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9OT1RJRklDQVRJT05fTUlCLCAkbm90aWZpY2F0aW9uX29pZCkKLSAgbm90aWZpY2F0aW9uX2RvdF9vaWQ9YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9eXC4vLydgCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX05PVElGSUNBVElPTl9ET1RfTUlCLCAkbm90aWZpY2F0aW9uX2RvdF9vaWQpCi0gIG5vdGlmaWNhdGlvbm9pZF9sZW49YGVjaG8gIiR3aXRodmFsIiB8IHNlZCAncy9bXlwuXS8vZycgfCBhd2sgLUZcLiAneyBwcmludCBORiB9J2AKLSAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTk9USUZJQ0FUSU9OX0RPVF9NSUJfTEVOR1RILCAkbm90aWZpY2F0aW9ub2lkX2xlbikKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBlbnRlcnByaXNlIG5vdGlmaWNhdGlvbnMgJHdpdGh2YWwpCi1dLFsKLSAgQUNfTVNHX1JFU1VMVCh1c2luZyBkZWZhdWx0IG5vdGlmaWNhdGlvbnMgIk5FVC1TTk1QLU1JQjo6bmV0U25tcE5vdGlmaWNhdGlvbnMiKQotXSkKLUFDX0FSR19FTkFCTEUoZW50ZXJwcmlzZS1ub3RpZmljYXRpb24tb2lkLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1lbnRlcnByaXNlLW5vdGlmaWNhdGlvbi1vaWQvLS13aXRob3V0LWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZCBpbnN0ZWFkIF0pICkKLSMKLSMgQ2F0Y2ggY29tbW9uIG1pc3Rha2VzIGluIGNvbmZpZ3VyZSBvcHRpb25zCi0jCi1BQ19BUkdfV0lUSChtaWItbW9kdWxlLCwgICAgQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24xLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgICAgICkKLUFDX0FSR19XSVRIKG1vZHVsZSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24zLiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgobW9kdWxlcywsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb240LiBVc2UgLS13aXRoLW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChvdXQtbWliLW1vZHVsZSwsQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb241LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKG91dC1tb2R1bGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbjcuIFVzZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzIGluc3RlYWQgXSkgKQotQUNfQVJHX1dJVEgob3V0LW1vZHVsZSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb244LiBVc2UgLS13aXRoLW91dC1taWItbW9kdWxlcyBpbnN0ZWFkIF0pICkKLQotIwotIyBQZXJsIHNwZWNpZmljCi0jCi1BQ19BUkdfV0lUSChwZXJsLW1vZHVsZXMsCi1bCi1QZXJsOgotICAtLXdpdGgtcGVybC1tb2R1bGVzWz1BUkdTXSAgICAgIEluc3RhbGwgdGhlIFBlcmwgbW9kdWxlcyBhbG9uZyB3aXRoIHRoZSByZXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2YgdGhlIG5ldC1zbm1wIHRvb2xraXQuICBJZiBBUkdTIGlzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3BlY2lmaWVkLCB0aGV5J3JlIHBhc3NlZCB0byB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNYWtlZmlsZS5QTCBzY3JpcHQuXSxbCi0gICAgaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgotICAgICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICBlbHNlCi0gICAgICBpbnN0YWxsX3Blcmw9InllcyIKLSAgICAgIGlmIHRlc3QgIiR3aXRodmFsIiAhPSAieWVzIjsgdGhlbgotICAgICAgICBQRVJMQVJHUz0iJHdpdGh2YWwiCi0gICAgICBmaQotICAgIGZpCi1dLCBpbnN0YWxsX3Blcmw9InRyeSIpCi0KLUFDX0FSR19FTkFCTEUoZW1iZWRkZWQtcGVybCwKLVsgIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsICAgICAgICAgRGlzYWJsZSBlbWJlZGRlZCBQZXJsIGluIHRoZSBTTk1QIGFnZW50IGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXB0cmFwZC4gW2VuYWJsZWQgYnkgZGVmYXVsdF1dLAotICAgIGVtYmVkX3Blcmw9IiRlbmFibGV2YWwiLCBlbWJlZF9wZXJsPSJ0cnkiKQotCi1BQ19BUkdfRU5BQkxFKHBlcmwtY2MtY2hlY2tzLAotWyAgLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzICAgICAgICBEaXNhYmxlIGNvbmZpZ3VyZSBjaGVja3MgZm9yIHdoZXRoZXIgUGVybCdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQyBDb21waWxlciBpcyBjb21wYXRpYmxlIHdpdGggb3VycyB3aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW1iZWRkZWQgUGVybCBpcyBlbmFibGVkLl0pCi0KLSMgQ29tbW9uIHBlcmwgbWlzdGFrZXMKLUFDX0FSR19FTkFCTEUocGVybC1tb2R1bGVzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1wZXJsLW1vZHVsZXMvLS13aXRob3V0LXBlcmwtbW9kdWxlcyBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKGVtYmVkZGVkLXBlcmwsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS1lbmFibGUtZW1iZWRkZWQtcGVybC8tLWRpc2FibGUtZW1iZWRkZWQtcGVybCBpbnN0ZWFkIF0pICkKLUFDX0FSR19XSVRIKHBlcmwtY2MtY2hlY2tzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLXBlcmwtY2MtY2hlY2tzLy0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcyBpbnN0ZWFkIF0pICkKLQotCi0jCi0jIFB5dGhvbiBzcGVjaWZpYwotIwotQUNfQVJHX1dJVEgocHl0aG9uLW1vZHVsZXMsCi1bCi1QeXRob246Ci0gIC0td2l0aC1weXRob24tbW9kdWxlc1s9QVJHU10gICAgSW5zdGFsbCB0aGUgcHl0aG9uIGJpbmRpbmdzIGFsb25nIHdpdGggdGhlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdCBvZiB0aGUgbmV0LXNubXAgdG9vbGtpdC4gIElmIEFSR1MgaXMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQsIHRoZXkncmUgcGFzc2VkIHRvIHRoZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldHVwLnB5IHNjcmlwdCBhcyBhcmd1bWVudHMuXSxbCi0gICAgaW5zdGFsbF9weXRob249InllcyIKLSAgICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSAieWVzIjsgdGhlbgotICAgICAgUFlUSE9OQVJHUz0iIgotICAgIGVsaWYgdGVzdCAiJHdpdGh2YWwiID0gIm5vIjsgdGhlbgotICAgICAgUFlUSE9OQVJHUz0iIgotICAgICAgaW5zdGFsbF9weXRob249Im5vIgotICAgIGVsc2UKLSAgICAgIFBZVEhPTkFSR1M9IiR3aXRodmFsIgotICAgIGZpCi1dLCBpbnN0YWxsX3B5dGhvbj0ibm8iKQotCi0jIG90aGVyIGZsYWdzCi0KLUFDX0FSR19XSVRIKHNlcnZlci1zZW5kLWJ1ZiwKLVsKLU5ldHdvcmsgQnVmZmVyczoKLSAgLS13aXRoLXNlcnZlci1zZW5kLWJ1Zls9QVJHXSAgICBVc2UgQVJHIGZvciB0aGUgZGVmYXVsdCBVRFAvVENQIHNlbmQgYnVmZmVyIGluc3RlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiB0aGUgT1MgYnVmZmVyIGZvciBzZXJ2ZXIgc29ja2V0cyB0aGF0IGFyZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNyZWF0ZWQgKHNubXBkLCBzbm1wdHJhcGQpLiAgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBkZWZhdWx0IGNhbiBiZSBvdmVycmlkZGVuIGluIHRoZSBydW50aW1lIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlIEFSRyBzaG91bGQgYmUgdGhlIHNpemUgaW4gYnl0ZXNdLFsKLSAgIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHNlbmQgYnVmZmVyIF0pCi0gICBmaQotICAgQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUYsICR3aXRodmFsKV0sCi0gICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHNlbmQgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzXSkgKQotQUNfQVJHX0VOQUJMRShzZXJ2ZXItc2VuZC1idWYsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1zZW5kLWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXNlbmQtYnVmIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChzZXJ2ZXItcmVjdi1idWYsCi1bICAtLXdpdGgtc2VydmVyLXJlY3YtYnVmWz1BUkddICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9uLCBidXQgZm9yIHJlY2VpdmUgYnVmZmVyXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgc2VydmVyIHJlY3YgYnVmZmVyIF0pCi0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1JFQ1ZfQlVGLCAkd2l0aHZhbCldLAotICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIHNlcnZlciBzb2NrZXRzXSkgKQotQUNfQVJHX0VOQUJMRShzZXJ2ZXItcmVjdi1idWYsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLXNlcnZlci1yZWN2LWJ1Zi8tLXdpdGhvdXQtc2VydmVyLXJlY3YtYnVmIGluc3RlYWQgXSkgKQotCi1BQ19BUkdfV0lUSChjbGllbnQtc2VuZC1idWYsCi1bICAtLXdpdGgtY2xpZW50LXNlbmQtYnVmWz1BUkddICAgIFNpbWlsYXIgYXMgcHJldmlvdXMgb3B0aW9ucywgYnV0IGZvciB0aGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlIGJ1ZmZlciBvZiBjbGllbnQgc29ja2V0c10sWwotICBpZiB0ZXN0ICIkd2l0aHZhbCIgPSB5ZXM7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoWyBQbGVhc2UgcHJvdmlkZSBhIHBvc2l0aXZlIG51bWJlciBmb3IgdGhlIGNsaWVudCBzZW5kIGJ1ZmZlciBdKQotICBmaQotICBBQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9TRU5EX0JVRiwgJHdpdGh2YWwpXSwKLSAgQUNfTVNHX1JFU1VMVChbdXNpbmcgT1MgZGVmYXVsdCBzZW5kIGJ1ZmZlciBzaXplIGZvciBjbGllbnQgc29ja2V0c10pICkKLUFDX0FSR19FTkFCTEUoY2xpZW50LXNlbmQtYnVmLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1jbGllbnQtc2VuZC1idWYvLS13aXRob3V0LWNsaWVudC1zZW5kLWJ1ZiBpbnN0ZWFkIF0pICkKLQotQUNfQVJHX1dJVEgoY2xpZW50LXJlY3YtYnVmLAotWyAgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zls9QVJHXSAgICBTaW1pbGFyIGFzIHByZXZpb3VzIG9wdGlvbnMsIGJ1dCBmb3IgdGhlIHNlbmQgYnVmZmVyXSxbCi0gIGlmIHRlc3QgIiR3aXRodmFsIiA9IHllczsgdGhlbgotICAgIEFDX01TR19FUlJPUihbIFBsZWFzZSBwcm92aWRlIGEgcG9zaXRpdmUgbnVtYmVyIGZvciB0aGUgY2xpZW50IHJlY3YgYnVmZmVyIF0pCi0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGLCAkd2l0aHZhbCldLAotICBBQ19NU0dfUkVTVUxUKFt1c2luZyBPUyBkZWZhdWx0IHJlY3YgYnVmZmVyIHNpemUgZm9yIGNsaWVudCBzb2NrZXRzXSkgKQotQUNfQVJHX0VOQUJMRShjbGllbnQtcmVjdi1idWYsLAotCUFDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWNsaWVudC1yZWN2LWJ1Zi8tLXdpdGhvdXQtY2xpZW50LXJlY3YtYnVmIGluc3RlYWQgXSkgKQotCi0jCi0jIG90aGVyd2lzZSBwcm9tcHRlZCBpbmZvcm1hdGlvbgotIwotQUNfQVJHX1dJVEgoZGVmYXVsdHMsCi1bCi1NaXNjZWxsYW5lb3VzOgotICAtLXdpdGgtZGVmYXVsdHMgICAgICAgICBVc2UgZGVmYXVsdHMgZm9yIHByb21wdGVkIHZhbHVlcy5dLAotICAgIGRlZmF1bHRzPSJ5ZXMiLGRlZmF1bHRzPSJubyIpCi1BQ19BUkdfRU5BQkxFKGRlZmF1bHRzLCwKLQlBQ19NU0dfRVJST1IoWyBJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC1kZWZhdWx0cy8tLXdpdGhvdXQtZGVmYXVsdHMgaW5zdGVhZCBdKSApCi0KLUFDX0FSR19FTkFCTEUodWNkLXNubXAtY29tcGF0aWJpbGl0eSwKLVsgIC0tZW5hYmxlLXVjZC1zbm1wLWNvbXBhdGliaWxpdHkgSW5zdGFsbCB1Y2Qtc25tcCBsb29rLWFsaWtlIGhlYWRlcnMgYW5kIGxpYnMuCi1dKQotQUNfQVJHX1dJVEgodWNkLXNubXAtY29tcGF0aWJpbGl0eSwsCi0JQUNfTVNHX0VSUk9SKFsgSW52YWxpZCBvcHRpb24uIFVzZSAtLWVuYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5Ly0tZGlzYWJsZS11Y2Qtc25tcC1jb21wYXRpYmlsaXR5IGluc3RlYWQgXSkgKQotCi0jCi0jIHNldHVwIGluc3RhbGwgdGFyZ2V0cwotIwotaWYgdGVzdCAieCRlbmFibGVfdWNkX3NubXBfY29tcGF0aWJpbGl0eSIgPSAieHllcyIgOyB0aGVuCQotICBpbnN0YWxsdWNkaGVhZGVycz1pbnN0YWxsdWNkaGVhZGVycwotICBpbnN0YWxsdWNkbGlicz1pbnN0YWxsdWNkbGlicwotICBBQ19NU0dfQ0FDSEVfQUREKFVDRC1TTk1QIGNvbXBhdGFiaWxpdHk6ICAgICBlbmFibGVkKQotZmkKLUFDX1NVQlNUKGluc3RhbGx1Y2RoZWFkZXJzKQotQUNfU1VCU1QoaW5zdGFsbHVjZGxpYnMpCi0KLSMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuIAotaWYgdGVzdCAieCR3aXRoX3Jvb3RfYWNjZXNzIiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX05PX1JPT1RfQUNDRVNTKQotZmkKLQotIyBPbmx5IGRlZmluZSBpZiBzcGVjaWZpY2FsbHkgY2hvc2VuIGFzIC0td2l0aG91dCAoaS5lLiwgZGVmYXVsdCB0byB0cnVlKS4KLWlmIHRlc3QgIngkd2l0aF9rbWVtX3VzYWdlIiA9ICJ4bm8iOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX05PX0tNRU1fVVNBR0UpCi1maQotCi0jIERlZmluZSB1bmxlc3Mgc3BlY2lmaWNhbGx5IHN1cHByZXNzZWQgKGkuZS4sIG9wdGlvbiBkZWZhdWx0cyB0byBmYWxzZSkuIAotaWYgdGVzdCAieCR3aXRoX2R1bW15X3ZhbHVlcyIgIT0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX05PX0RVTU1ZX1ZBTFVFUykKLWZpCi0KLSMgT25seSBkZWZpbmUgaWYgc3BlY2lmaWNhbGx5IGNob3NlbiBhcyAtLXdpdGhvdXQgKGkuZS4sIGRlZmF1bHQgdG8gdHJ1ZSkuIAotaWYgdGVzdCAieCR3aXRoX29wYXF1ZV9zcGVjaWFsX3R5cGVzIiAhPSAieG5vIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTKQotZmkKLQotCi0jIG92ZXJmbG93IHByb2JsZW1zIHdpdGggaHB1eCdzIHNoCi0jIHRha2VuIGZyb20gUGVybCdzIENvbmZpZ3VyZSBzY3JpcHQgCi0KLUFDX01TR19DSEVDS0lORyhbaWYgSSBuZWVkIHRvIGZlZWQgbXlzZWxmIHRvIGtzaF0pCi1pZiB0ZXN0IC1mIC9ocC11eCAtYSAtZiAvYmluL2tzaDsgdGhlbgotICBpZiAoUEFUSD0uOyBhbGlhcyAteCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0gICAgQUNfTVNHX1JFU1VMVChubykKLSAgZWxzZQotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgIGlmIHRlc3QgIngkMSIgPSAieCI7IHRoZW4KLSAgICAgIGV4ZWMgL2Jpbi9rc2ggJDAKLSAgICBlbHNlCi0gICAgICBleGVjIC9iaW4va3NoICQwICIkQCIKLSAgICBmaQotICBmaQotZWxzZQotICBBQ19NU0dfUkVTVUxUKG5vKQotZmkKLQotaWYgdGVzdCAieCRkZXZlbG9wZXIiICE9ICJ4bm8iIC1hIC1mICRzcmNkaXIvcmVtb3ZlLWZpbGVzOyB0aGVuCi0gICMgdHVybiBvbiB0aGUgZGV2ZWxvcGVyIGZsYWcgd2hlbiB0YWtlbiBmcm9tIGEgU1ZOIGNoZWNrb3V0IChub3QgYSByZWxlYXNlKQotICBkZXZlbG9wZXI9InllcyIKLWZpCi0KLUFDX0xBTkcoW0NdKQotQUNfUFJPR19DQwotQUNfUFJPR19DUFAKLUxJTktDQz0ke0xJTktDQy0iJENDIn0KLUFDX1NVQlNUKExJTktDQykKLUFDX0FJWAotCi0jIHN5c3RlbSBjaGVjawotQUNfQ0FOT05JQ0FMX1RBUkdFVAotY2hhbmdlcXVvdGUoLCApCi1QQVJUSUFMVEFSR0VUT1M9YGVjaG8gJHRhcmdldF9vcyB8IHNlZCAncy9bLS5fXS4qLy8nYAotY2hhbmdlcXVvdGUoWywgXSkKLQotIyBwbGF0Zm9ybS1zcGVjaWZpYyBjb21waWxlciBmbGFncwotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4KLQlDRkxBR1M9IiRDRkxBR1MgLURtaW5ndzMyIgotZmkKLQotIyBwbGF0Zm9ybS1zcGVjaWZpYyBsaW5rZXIgZmxhZ3MKLWNhc2UgJHRhcmdldF9vcyBpbgotICAgIGFpeDQuMip8YWl4NC4zKnxhaXg1KnxhaXg2KikKLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGF0IGxpbmtlciBmbGFncyB0byBhZGQgdG8gZW5hYmxlIHJ1bnRpbWUgbGlua2luZyBvbiBBSVhdKQotICAgICAgICBmb3IgbGRfZmxhZyBpbiAkTERGTEFHUzsgZG8KLSAgICAgICAgICAgIGlmICh0ZXN0ICRsZF9mbGFnID0gIi1icnRsIiB8fCB0ZXN0ICRsZF9mbGFnID0gIi1XbCwtYnJ0bCIpOyB0aGVuCi0gICAgICAgICAgICAgICAgbmV0c25tcF9haXhfcnVudGltZWxpbmtpbmdfZmxhZ3Nfb2s9eWVzCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGZpCi0gICAgICAgIGRvbmUKLSAgICAgICAgaWYgdGVzdCAiWCRuZXRzbm1wX2FpeF9ydW50aW1lbGlua2luZ19mbGFnc19vayIgIT0gIlh5ZXMiOyB0aGVuCi0JICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIjsgdGhlbgotCSAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLVdsLC1icnRsIgotCSAgICBlbHNlCi0gICAgICAgICAgICAgICAgbmV0c25tcF9haXhfbGRmbGFncz0iLWJydGwiCi0JICAgIGZpCi0gICAgICAgICAgICBMREZMQUdTPSIkbmV0c25tcF9haXhfbGRmbGFncyAkTERGTEFHUyIKLQkgICAgQUNfTVNHX1JFU1VMVCgkbmV0c25tcF9haXhfbGRmbGFncykKLQllbHNlCi0JICAgIEFDX01TR19SRVNVTFQoW25vbmVdKQotCWZpCi0JOzsKLSAgICBkYXJ3aW44KnxkYXJ3aW45KikKLSAgICAgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIGRhcndpbiBsZCBtaWdodCBuZWVkIC1mbGF0X25hbWVzcGFjZV0pCi0JaWYgdGVzdCAteiAiJE1BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVCI7IHRoZW4KLQkJTERGTEFHUz0iLWZsYXRfbmFtZXNwYWNlICRMREZMQUdTIgotCQlBQ19NU0dfUkVTVUxUKFt5ZXNdKQotCWVsc2UKLQkJQUNfTVNHX1JFU1VMVChbbm9dKQotCWZpCi0JOzsKLSAgICAqKQotICAgICAgICA7OwotZXNhYwotCi0jIGxpYnRvb2wgc3R1ZmYgZm9yIHNoYXJlZC9zdGF0aWMgbGlicmFyaWVzLgotQUNfTElCVE9PTF9ETE9QRU4KLUFDX0xJQlRPT0xfV0lOMzJfRExMCi1BQ19QUk9HX0xJQlRPT0wKLUFDX1NVQlNUKExJQlRPT0xfREVQUykKLQotIyBDaGVja3MgZm9yIHByb2dyYW1zLgotQUNfUFJPR19JTlNUQUxMCi1BQ19QUk9HX0xOX1MKLUFDX1BST0dfTUFLRV9TRVQKLUFDX1BST0dfRUdSRVAKLUFDX1BBVEhfUFJPRyhbUFNQUk9HXSxwcykKLUFDX1BBVEhfUFJPRyhbUEVSTFBST0ddLHBlcmwpCi1BQ19QQVRIX1BST0coW1BZVEhPTlBST0ddLHB5dGhvbikKLUFDX0NIRUNLX1BST0dTKFdIT0FNSSwgd2hvYW1pIGxvZ25hbWUsIHdob2FtaSkKLUFDX0NIRUNLX1BST0dTKFNFRCxzZWQgZ3NlZCkKLUFDX0NIRUNLX1BST0dTKEZJTkQsZmluZCkKLUFDX1BBVEhfUFJPRyhBVVRPQ09ORiwgYXV0b2NvbmYpCi1BQ19QQVRIX1BST0coQVVUT0hFQURFUiwgYXV0b2hlYWRlcikKLWlmIHRlc3QgIngkYWNfY3ZfcHJvZ19BVVRPQ09ORiIgPSAieCI7IHRoZW4KLQlBVVRPQ09ORj0iOiIKLQlBQ19TVUJTVChBVVRPQ09ORikKLWZpCi1pZiB0ZXN0ICJ4JGFjX2N2X3Byb2dfQVVUT0hFQURFUiIgPSAieCI7IHRoZW4KLQlBVVRPSEVBREVSPSI6IgotCUFDX1NVQlNUKEFVVE9IRUFERVIpCi1maQotCi1BQ19QQVRIX1BST0coW1VOQU1FUFJPR10sdW5hbWUpCi1BQ19ERUZJTkVfVU5RVU9URUQoVU5BTUVQUk9HLCIkVU5BTUVQUk9HIikKLQotQUNfQ19DT05TVAotQUNfQ19JTkxJTkUKLQotCi0jIGdldCB2ZXJzaW9uIG51bWJlci4KLUFDX01TR19DSEVDS0lORyhbZm9yIG5ldC1zbm1wIHZlcnNpb24gbnVtYmVyXSkKLVZFUlNJT049JFBBQ0tBR0VfVkVSU0lPTgotCi0jIGNyZWF0ZSB0aGUgcmVsZWFzZSB2ZXJzaW9uIG51bWJlci4uLi4gIEknbSBub3Qgc3VyZSB0aGlzIGlzIHVzZWQKLSMgYW55d2hlcmUgYW55IGxvbmdlci4KLV9yZWxlYXNlX3ZlcnNpb249YGVjaG8gJFZFUlNJT04gfCBzZWQgJ3MvIjsuKi8vO3MvLioiLy87cy9wcmUvMC4vOydgCi1jaGFuZ2VxdW90ZSgsICkKLVJFTEVBU0VWRVJTSU9OPWBlY2hvICRfcmVsZWFzZV92ZXJzaW9uIHwgc2VkICdzL15cKFswLTldXClcLlwoWzAtOV1cKS9cMTpcMjowLydgCi1jaGFuZ2VxdW90ZShbLCBdKQotCi1BQ19TVUJTVChWRVJTSU9OKQotQUNfU1VCU1QoUkVMRUFTRVZFUlNJT04pCi1BQ19NU0dfUkVTVUxUKCRWRVJTSU9OKQotQUNfTVNHX0NBQ0hFX0FERChOZXQtU05NUCBWZXJzaW9uOiAgICAgICAgICAgJFZFUlNJT04pCi0KLSMgc3VwZXIgdHlwZSBjaGVja2luZwotIyBXV1dYWFgKLUFDX01TR19DSEVDS0lORyhbZm9yIGRldmVsb3BlciBnY2MgZmxhZ3NdKQotaWYgdGVzdCAieCRkZXZlbG9wZXIiID0gInh5ZXMiIC1hICJ4JEdDQyIgPSAieHllcyI7IHRoZW4KLSAgREVWRkxBR1M9Ii1XYWxsIC1XaW5saW5lIC1Xc3RyaWN0LXByb3RvdHlwZXMgLVd3cml0ZS1zdHJpbmdzIC1XY2FzdC1xdWFsIC1Xbm8tY2hhci1zdWJzY3JpcHRzIgotZWxzZQotICBERVZGTEFHUz0iIgotZmkKLUFDX01TR19SRVNVTFQoJERFVkZMQUdTKQotQUNfU1VCU1QoREVWRkxBR1MpCi0KLSMKLSMgaGFja3MgZm9yIGJ1aWxkaW5nIG91dHNpZGUgb2YgdGhlIHNvdXJjZSBkaXJlY3RvcnkKLSMKLSMgMSkgbWFrZSBzdXJlIGJ1aWxkIGluY2x1ZGUgcGF0aHMgYXJlIGJlZm9yZSBzb3VyY2UKLSMgMikgY2hlY2sgZm9yIEdOVSBtYWtlIHRvIHVzZSB2cGF0aCBpbnN0ZWFkIG9mIFZQQVRICi0jCi1OT05fR05VX1ZQQVRIPSJWUEFUSCA9IgotR05VX3ZwYXRoPSIjdnBhdGgiCi0jCi0jIGRlZmluZSBpbmNsdWRlIHBhdGhzIHJlbGF0aXZlIHRvIHRvcF9zcmNkaXIKLSMgdHdlYWsgaW5jbHVkZXMgaWYgd2UncmUgYnVpbGRpbmcgb3V0c2lkZSBvZiB0aGUgc291cmNlIGRpcgotaWYgdGVzdCAieCRzcmNkaXIiID0gInguIjsgdGhlbgotVE9QX0lOQ0xVREVTPVNSQ19UT1BfSU5DTFVERVMKLVNOTVBMSUJfSU5DTFVERVM9U1JDX1NOTVBMSUJfSU5DTFVERVMKLUFHRU5UX0lOQ0xVREVTPVNSQ19BR0VOVF9JTkNMVURFUwotSEVMUEVSX0lOQ0xVREVTPVNSQ19IRUxQRVJfSU5DTFVERVMKLU1JQkdST1VQX0lOQ0xVREVTPVNSQ19NSUJHUk9VUF9JTkNMVURFUwotZWxzZQotVE9QX0lOQ0xVREVTPUJMRF9UT1BfSU5DTFVERVMKLVNOTVBMSUJfSU5DTFVERVM9QkxEX1NOTVBMSUJfSU5DTFVERVMKLUFHRU5UX0lOQ0xVREVTPUJMRF9BR0VOVF9JTkNMVURFUwotSEVMUEVSX0lOQ0xVREVTPUJMRF9IRUxQRVJfSU5DTFVERVMKLU1JQkdST1VQX0lOQ0xVREVTPUJMRF9NSUJHUk9VUF9JTkNMVURFUwotbWFrZSAtdiAtZiAvZGV2L251bGwgMj4vZGV2L251bGwgfCBncmVwIEdOVSA+L2Rldi9udWxsCi1oYXZlX2dudV9tYWtlPSQ/Ci1pZiB0ZXN0ICRoYXZlX2dudV9tYWtlIC1lcSAwIDsgdGhlbgotICAgIE5PTl9HTlVfVlBBVEg9IiNWUEFUSCA9IgotICAgIEdOVV92cGF0aD0idnBhdGgiCi1maQotZmkKLUFDX1NVQlNUKFRPUF9JTkNMVURFUykKLUFDX1NVQlNUKFNOTVBMSUJfSU5DTFVERVMpCi1BQ19TVUJTVChBR0VOVF9JTkNMVURFUykKLUFDX1NVQlNUKEhFTFBFUl9JTkNMVURFUykKLUFDX1NVQlNUKE1JQkdST1VQX0lOQ0xVREVTKQotQUNfU1VCU1QoR05VX3ZwYXRoKQotQUNfU1VCU1QoTk9OX0dOVV9WUEFUSCkKLQotCi0jCi0jIENoZWNrIHdoZXRoZXIgd2UgY2FuIHVzZSAtVXggLUR4PXggd2l0aCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3VyCi0jCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gdW4tZGVmaW5lIHRhcmdldCBzeXN0ZW0gdG9rZW4gKGJlZm9yZSByZWRlZmluaW5nKV0pCi1PTERfQ1BQRkxBR1M9IiRDUFBGTEFHUyIKLUNQUEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCi0KLUFDX0VHUkVQX0NQUCh5ZXMsW1sKLSNpZmRlZiAkUEFSVElBTFRBUkdFVE9TCi15ZXMKLSNlbmRpZgotXV0sCi1bUEFSVElBTFRBUkdFVEZMQUdTPSItVSRQQVJUSUFMVEFSR0VUT1MgLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCi0gQUNfTVNHX1JFU1VMVChbeWVzXSldLAotW1BBUlRJQUxUQVJHRVRGTEFHUz0iLUQkUEFSVElBTFRBUkdFVE9TPSRQQVJUSUFMVEFSR0VUT1MiCi0gQUNfTVNHX1JFU1VMVChbbm9dKV0pCi1DRkxBR1M9IiRDRkxBR1MgJFBBUlRJQUxUQVJHRVRGTEFHUyIKLUNQUEZMQUdTPSIkT0xEX0NQUEZMQUdTIgotQUNfTVNHX0NBQ0hFX0FERChCdWlsZGluZyBmb3I6ICAgICAgICAgICAgICAgJFBBUlRJQUxUQVJHRVRPUykKLQotCi0jCi0jIGNoZWNrIGZvciBzcGVjaWFsIGluY2x1ZGVzIGFuZCBwaWNrIG9uZQotIwotCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXN0ZW0gaW5jbHVkZSBmaWxlXSkKLWNoYW5nZXF1b3RlKCwgKQotZmlsZWJhc2U9JHRhcmdldF9vcwotIyBpZ25vcmUgYmluYXJ5IGZvcm1hdCBpbmRpY2F0aW9uCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvZWxmLy8nYAotZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL2FvdXQvLydgCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvZWNvZmYvLydgCi1maWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvY29mZi8vJ2AKLXdoaWxlIHRlc3QgIngkZmlsZWJhc2UiICE9ICJ4JGxhc3QiIC1hICEgLWYgJHNyY2Rpci9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS8kZmlsZWJhc2UuaAotZG8KLSAgICBsYXN0PSRmaWxlYmFzZQotICAgIGZpbGViYXNlPWBlY2hvICRmaWxlYmFzZSB8IHNlZCAncy9bLS5fXVteLS5fXSokLy8nYAotICAgIGlmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KLQlmaWxlYmFzZT1gZWNobyAkZmlsZWJhc2UgfCBzZWQgJ3MvWzAtOV0qJC8vJ2AKLSAgICBmaQotZG9uZQotCi1pZiB0ZXN0ICJ4JGZpbGViYXNlIiA9ICJ4JGxhc3QiOyB0aGVuCi0gICAgZmlsZWJhc2U9ImdlbmVyaWMiCi1maQotYWNfY3ZfTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFPSJuZXQtc25tcC9zeXN0ZW0vJGZpbGViYXNlLmgiCi0KLWNoYW5nZXF1b3RlKFssIF0pCi1BQ19NU0dfUkVTVUxUKCRhY19jdl9ORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUpCi1BQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFLCAiJGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSIpCi0KLSMgc2Vjb25kIHBhcnQsIHRoZSBDUFUgdHlwZS4KLQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgbWFjaGluZS10eXBlIGluY2x1ZGUgZmlsZV0pCi1jaGFuZ2VxdW90ZSgsICkKLWZpbGViYXNlPSR0YXJnZXRfY3B1Ci13aGlsZSB0ZXN0ICJ4JGZpbGViYXNlIiAhPSAieCRsYXN0IiAtYSAhIC1mICRzcmNkaXIvaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lLyRmaWxlYmFzZS5oCi1kbwotICAgIGxhc3Q9JGZpbGViYXNlCi0gICAgZmlsZWJhc2U9YGVjaG8gJGZpbGViYXNlIHwgc2VkICdzL1stLl9dW14tLl9dKiQvLydgCi1kb25lCi0KLWlmIHRlc3QgIngkZmlsZWJhc2UiID0gIngkbGFzdCI7IHRoZW4KLSAgICBmaWxlYmFzZT0iZ2VuZXJpYyIKLWZpCi1hY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFPSJuZXQtc25tcC9tYWNoaW5lLyRmaWxlYmFzZS5oIgotY2hhbmdlcXVvdGUoWywgXSkKLUFDX01TR19SRVNVTFQoWyRhY19jdl9ORVRTTk1QX01BQ0hJTkVfSU5DTFVERV9GSUxFXSkKLQotQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfTUFDSElORV9JTkNMVURFX0ZJTEUsICIkYWNfY3ZfTkVUU05NUF9NQUNISU5FX0lOQ0xVREVfRklMRSIpCi0KLUFDX1BBVEhfUFJPRyhbQ0NQQVRIXSwkQ0MpCi0jIHdhdGNoIG91dCBmb3IgL3Vzci91Y2IvY2Mgb24gc29sYXJpcywgaXQgZG9lc24ndCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLgotY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgYnNkaSopCi0JaWYgdGVzdCAieCRDQ1BBVEgiID0gIngvdXNyL3VjYi9jYyIgLW8gIngkQ0NQQVRIIiA9ICJ4L3Vzci9iaW4vY2MiOyB0aGVuCi0JICAgIEFDX01TR19FUlJPUihbCi0KLSoqKiBUaGUgQlNESSAvdXNyL3VjYi9jYyBjb21waWxlciBkb2VzIG5vdCB3b3JrIHdpdGggdGhpcyBwYWNrYWdlLiAgCi0qKiogUGxlYXNlIHJ1biBjb25maWd1cmUgd2l0aCAtLXdpdGgtY2M9Z2NjCi1dKQotCWZpCi0gICAgOzsKLSAgICBzb2xhcmlzKikKLQlpZiB0ZXN0ICJ4JENDUEFUSCIgPSAieC91c3IvdWNiL2NjIjsgdGhlbgotCSAgICBBQ19NU0dfRVJST1IoWwotCi0qKiogVGhlIHNvbGFyaXMgL3Vzci91Y2IvY2MgY29tcGlsZXIgZG9lcyBub3Qgd29yayB3aXRoIHRoaXMgcGFja2FnZS4gIAotKioqIFBsZWFzZSBwdXQgYSBkaWZmZXJlbnQgY29tcGlsZXIgaW4geW91ciBwYXRoIGZpcnN0IG9yIHJ1bgotKioqIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1YWCwgd2hlcmUgWFggaXMgdGhlIGNvbXBpbGVyIHlvdSB3YW50IHRvIHVzZS4KLV0pCi0JZmkKLSAgICA7OwotZXNhYwotICAgIAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgYWRkaXRpb25hbCBjcHAgZmxhZ3NdKQotIyBnY2MgZXh0cmEgQ1BQRkxBR1MKLWlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRDUFAiID0gIngkQ0MgLUUiOyB0aGVuCi0gICMgZXh0cmEgY3BwIGZsYWdzIGZvciBnbnUgYyBjb21waWxlciB0byBhbGxvdyAuaW4gZmlsZSBleHRlbnNpb25zLgotICBFWFRSQUNQUEZMQUdTPSIteCBjIgotZWxzZQotICBFWFRSQUNQUEZMQUdTPSIiCi1maQotCi0jIFNvbGFyaXMgZXh0cmEgY3BwIGZsYWdzLgotaWYgdGVzdCAieCRHQ0MiICE9ICJ4eWVzIjsgdGhlbgotICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICBzb2xhcmlzKikgRVhUUkFDUFBGTEFHUz0iJEVYVFJBQ1BQRkxBR1MgLVhzIiA7OwotICBlc2FjCi1maQotCi1BQ19TVUJTVChFWFRSQUNQUEZMQUdTKQotQUNfTVNHX1JFU1VMVCgkRVhUUkFDUFBGTEFHUykKLQotIyAgIENvbXBpbGVyIGZsYWdzOgotIwotCi0jIFRoZSBOZXQtU05NUCBzb3VyY2UgY29kZSBpcyBub3Qgc3RyaWN0LWFsaWFzaW5nIHNhZmUsIHNvIGFkZAotIyAtZm5vLXN0cmljdC1hbGlhc2luZyB0byAkQ0ZMQUdTIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyBpdC4KLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgLWZuby1zdHJpY3QtYWxpYXNpbmddKQotbmV0c25tcF9zYXZlX0NGTEFHUz0iJENGTEFHUyIKLUNGTEFHUz0iLWZuby1zdHJpY3QtYWxpYXNpbmcgJENGTEFHUyIKLUFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sIFtdKV0sIFtBQ19NU0dfUkVTVUxUKFt5ZXNdKV0sIFsKLSAgQUNfTVNHX1JFU1VMVChbbm9dKQotICBDRkxBR1M9IiRuZXRzbm1wX3NhdmVfQ0ZMQUdTIgotXSkKLQotIyBQcmVmaXhlcyBtdXN0IGJlZ2luIHdpdGggIi8iIG9yIFtBLVpdIGZvbGxvd2VkIGJ5IGNvbG9uLgotCi1pZiB0ZXN0ICJ4JHByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gIHByZWZpeD0vdXNyL2xvY2FsCi1maQotCi1mY2g9YGVjaG8gJHByZWZpeCB8IHNlZCAncy9cKC5cKS4qL1wxLydgCi1pZiB0ZXN0ICJ4JGZjaCIgIT0gIngvIiA7IHRoZW4KLSAgIHNjaD1gZWNobyAkcHJlZml4IHwgc2VkICdzLy5cKC5cKS4qL1wxLydgCi0gICBpZiB0ZXN0ICJ4JHNjaCIgIT0gIng6IiA7IHRoZW4KLSAgICAgIHByZWZpeD1gcHdkYC8kcHJlZml4Ci0gICAgICBlY2hvICJhZGp1c3RpbmcgcHJlZml4IHRvICRwcmVmaXgiCi0gICBmaQotZmkKLQotaWYgdGVzdCAieCRleGVjX3ByZWZpeCIgPSAieE5PTkUiOyB0aGVuCi0gIGV4ZWNfcHJlZml4PSRwcmVmaXgKLWZpCi0KLWZjaD1gZWNobyAkZXhlY19wcmVmaXggfCBzZWQgJ3MvXCguXCkuKi9cMS8nYAotaWYgdGVzdCAieCRmY2giICE9ICJ4LyIgOyB0aGVuCi0gICBzY2g9YGVjaG8gJGV4ZWNfcHJlZml4IHwgc2VkICdzLy5cKC5cKS4qL1wxLydgCi0gICBpZiB0ZXN0ICJ4JHNjaCIgIT0gIng6IiA7IHRoZW4KLSAgICAgIGV4ZWNfcHJlZml4PWBwd2RgLyRleGVjX3ByZWZpeAotICAgICAgZWNobyAiYWRqdXN0aW5nIGV4ZWNfcHJlZml4IHRvICRleGVjX3ByZWZpeCIKLSAgIGZpCi1maQotCi0jIFNldCBTTk1QTElCUEFUSCAmIFNOTVBTSEFSRVBBVEgKLQotU05NUExJQlBBVEg9IiIKLXRtcHNldD0iJGxpYmRpci9zbm1wIgotd2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBMSUJQQVRIIjsgZG8KLSAgU05NUExJQlBBVEg9IiR0bXBzZXQiCi0gIGV2YWwgdG1wc2V0PSIkdG1wc2V0IgotZG9uZQotQUNfREVGSU5FX1VOUVVPVEVEKFNOTVBMSUJQQVRILCIkU05NUExJQlBBVEgiKQotQUNfU1VCU1QoU05NUExJQlBBVEgpCi1BQ19ERUZJTkVfVU5RVU9URUQoU05NUERMTU9EUEFUSCwiJFNOTVBMSUJQQVRIL2RsbW9kIikKLQotU05NUFNIQVJFUEFUSD0iIgotdG1wc2V0PSIkZGF0YWRpci9zbm1wIgotd2hpbGUgdGVzdCAieCR0bXBzZXQiICE9ICJ4JFNOTVBTSEFSRVBBVEgiOyBkbwotICBTTk1QU0hBUkVQQVRIPSIkdG1wc2V0IgotICBldmFsIHRtcHNldD0iJHRtcHNldCIKLWRvbmUKLUFDX0RFRklORV9VTlFVT1RFRChTTk1QU0hBUkVQQVRILCIkU05NUFNIQVJFUEFUSCIpCi1BQ19TVUJTVChTTk1QU0hBUkVQQVRIKQotCi1pZiB0ZXN0ICJ4JE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIiA9ICJ4IjsgdGhlbgotICBORVRTTk1QX0RFRkFVTFRfTUlCRElSUz0iXCRIT01FLy5zbm1wL21pYnM6JFNOTVBTSEFSRVBBVEgvbWlicyIKLSAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICAgIE5FVFNOTVBfREVGQVVMVF9NSUJESVJTPWBlY2hvICIkTkVUU05NUF9ERUZBVUxUX01JQkRJUlMiIHwgJFNFRCAncy86LzsvZydgCi0gIGZpCi0gIEFDX0RFRklORV9VTlFVT1RFRChORVRTTk1QX0RFRkFVTFRfTUlCRElSUywiJE5FVFNOTVBfREVGQVVMVF9NSUJESVJTIikKLWZpCi1BQ19TVUJTVChORVRTTk1QX0RFRkFVTFRfTUlCRElSUykKLQotU05NUENPTkZQQVRIPSIiCi10bXBzZXQ9IiRzeXNjb25mZGlyL3NubXAiCi13aGlsZSB0ZXN0ICJ4JHRtcHNldCIgIT0gIngkU05NUENPTkZQQVRIIjsgZG8KLSAgU05NUENPTkZQQVRIPSIkdG1wc2V0IgotICBldmFsIHRtcHNldD0iJHRtcHNldCIKLWRvbmUKLUFDX0RFRklORV9VTlFVT1RFRChTTk1QQ09ORlBBVEgsIiRTTk1QQ09ORlBBVEgiKQotQUNfU1VCU1QoU05NUENPTkZQQVRIKQotCi1BQ19DSEVDS19TSVpFT0Yoc2hvcnQpCi1BQ19DSEVDS19TSVpFT0YoaW50KQotQUNfQ0hFQ0tfU0laRU9GKGxvbmcpCi1BQ19DSEVDS19TSVpFT0YobG9uZyBsb25nKQotQUNfQ0hFQ0tfU0laRU9GKGludG1heF90KQotQUNfQ0hFQ0tfVFlQRVMoW2ludDhfdCwgIHVpbnQ4X3QsICB1X2ludDhfdF0pCi1BQ19DSEVDS19UWVBFUyhbaW50MTZfdCwgdWludDE2X3QsIHVfaW50MTZfdF0pCi1BQ19DSEVDS19UWVBFUyhbaW50MzJfdCwgdWludDMyX3QsIHVfaW50MzJfdF0pCi1BQ19DSEVDS19UWVBFUyhbaW50NjRfdCwgdWludDY0X3QsIHVfaW50NjRfdF0pCi1BQ19DSEVDS19UWVBFUyhbaW50bWF4X3QsIHVpbnRtYXhfdF0pCi1BQ19DSEVDS19UWVBFUyhbb2ZmNjRfdF0pCi1BQ19DSEVDS19UWVBFUyhbdWludHB0cl90LCBpbnRwdHJfdF0pCi0KLSMgc29sYXJpcyBzcGVjaWZpYyB0eXBlCi1BQ19DSEVDS19UWVBFUyhbQ291bnRlcjY0XSwsLFsjaW5jbHVkZSA8aW5ldC9taWIyLmg+XSkKLQotIyBndWVzcyBJUHY2IHN0YWNrIHR5cGUuCi1pZiB0ZXN0ICJ4JGVuYWJsZV9pcHY2IiA9ICJ4eWVzIjsgdGhlbgotCXY2dHlwZT11bmtub3duCi0JdjZsaWI9bm9uZQotCXY2dHJ5bGliYz1ubwotCi0JQUNfTVNHX0NIRUNLSU5HKFtbaXB2NiBzdGFjayB0eXBlXV0pCi0JZm9yIGkgaW4gdjZkIHRvc2hpYmEga2FtZSBpbnJpYSB6ZXRhIGxpbnV4LWdsaWJjIGxpbnV4LWluZXQ2IGdlbmVyaWM7IGRvCi0JCWNhc2UgJGkgaW4KLQkJdjZkKQotCQkJQUNfRUdSRVBfQ1BQKHllcywgWwotI2luY2x1ZGUgPC91c3IvbG9jYWwvdjYvaW5jbHVkZS9zeXMvdHlwZXMuaD4KLSNpZmRlZiBfX1Y2RF9fCi15ZXMKLSNlbmRpZl0sCi0JCQkJW3Y2dHlwZT0kaTsgdjZsaWI9djY7Ci0JCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJQ0ZMQUdTPSItSS91c3IvbG9jYWwvdjYvaW5jbHVkZSAkQ0ZMQUdTIl0pCi0JCQk7OwotCQl0b3NoaWJhKQotCQkJQUNfRUdSRVBfQ1BQKHllcywgWwotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2lmZGVmIF9UT1NISUJBX0lORVQ2Ci15ZXMKLSNlbmRpZl0sCi0JCQkJW3Y2dHlwZT0kaTsgdjZsaWI9aW5ldDY7Ci0JCQkJdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJQ0ZMQUdTPSItRE5FVFNOTVBfRU5BQkxFX0lQVjYgJENGTEFHUyJdKQotCQkJOzsKLQkJa2FtZSkKLQkJCUFDX0VHUkVQX0NQUCh5ZXMsIFsKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaWZkZWYgX19LQU1FX18KLXllcwotI2VuZGlmXSwKLQkJCQlbdjZ0eXBlPSRpOyB2NmxpYj1pbmV0NjsKLQkJCQl2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYjsKLQkJCQl2NnRyeWxpYmM9eWVzOwotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKLQkJCTs7Ci0JCWlucmlhKQotCQkJQUNfRUdSRVBfQ1BQKHllcywgWwotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpZmRlZiBJUFY2X0lOUklBX1ZFUlNJT04KLXllcwotI2VuZGlmXSwKLQkJCQlbdjZ0eXBlPSRpOwotCQkJCXY2bGliPWR1bW15OwotCQkJCXY2bGliZGlyPW5vbmU7Ci0JCQkJdjZ0cnlsaWJjPXllczsKLQkJCQlDRkxBR1M9Ii1ETkVUU05NUF9FTkFCTEVfSVBWNiAkQ0ZMQUdTIl0pCi0JCQk7OwotCQl6ZXRhKQotCQkJQUNfRUdSRVBfQ1BQKHllcywgWwotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2lmZGVmIF9aRVRBX01JTkFNSV9JTkVUNgotQQoteWVzCi0jZW5kaWZdLAotCQkJCVt2NnR5cGU9JGk7IHY2bGliPWluZXQ2OwotCQkJCXY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKLQkJCTs7Ci0JCWxpbnV4LWdsaWJjKQotCQkJQUNfRUdSRVBfQ1BQKHllcywgWwotI2luY2x1ZGUgPGZlYXR1cmVzLmg+Ci0jaWYgZGVmaW5lZChfX0dMSUJDX18pICYmICgoX19HTElCQ19fID09IDIgJiYgX19HTElCQ19NSU5PUl9fID49IDEpIHx8IChfX0dMSUJDXyA+IDIpKQoteWVzCi0jZW5kaWZdLAotCQkJCVt2NnR5cGU9JGk7Ci0JCQkJdjZsaWI9ZHVtbXk7Ci0JCQkJdjZsaWJkaXI9bm9uZTsKLQkJCQl2NnRyeWxpYmM9eWVzOwotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiXSkKLQkJCTs7Ci0JCWxpbnV4LWluZXQ2KQotCQkJaWYgdGVzdCAtZCAvdXNyL2luZXQ2OyB0aGVuCi0JCQkJdjZ0eXBlPSRpCi0JCQkJdjZsaWI9aW5ldDYKLQkJCQl2NmxpYmRpcj0vdXNyL2luZXQ2L2xpYgotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCi0JCQlmaQotCQkJOzsKLQkJZ2VuZXJpYykKLSAgICAgICAgICAgICAgICAgICAgICAgIEFDX01TR19SRVNVTFQoW1twb3N0cG9uZWRdXSkKLQkJCUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci1dLCBzb2NrYWRkcl9pbjYsIHNpbjZfYWRkciwgbm8pCi0JICAgICAgICAgICAgICAgIEFDX01TR19DSEVDS0lORyhbW2lwdjYgc3RhY2sgdHlwZV1dKQotICAgICAgICAgICAgICAgICAgICAgICAgaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3Rfc29ja2FkZHJfaW42X2hhc19zaW42X2FkZHIiID0gInh5ZXMiOyB0aGVuCi0JCQkJdjZ0eXBlPSRpCi0JCQkJdjZsaWI9ZHVtbXkKLQkJCQl2NmxpYmRpcj1ub25lCi0JCQkJdjZ0cnlsaWJjPXllcwotCQkJCUNGTEFHUz0iLURORVRTTk1QX0VOQUJMRV9JUFY2ICRDRkxBR1MiCi0gICAgICAgICAgICAgICAgICAgICAgICBmaQotCQkJOzsKLQkJZXNhYwotCQlpZiB0ZXN0ICIkdjZ0eXBlIiAhPSAidW5rbm93biI7IHRoZW4KLQkJCWJyZWFrCi0JCWZpCi0JZG9uZQotCi0JaWYgdGVzdCAiJHY2bGliIiAhPSAibm9uZSI7IHRoZW4KLQkJaWYgdGVzdCAtZCAkdjZsaWJkaXIgLWEgLWYgJHY2bGliZGlyL2xpYiR2NmxpYi5hOyB0aGVuCi0JCQlMSUJTPSItTCR2NmxpYmRpciAtbCR2NmxpYiAkTElCUyIKLQkJCWVuYWJsZV9pcHY2PSJ5ZXMiCi0JCQlBQ19NU0dfUkVTVUxUKFsiJHY2dHlwZSwgJGVuYWJsZV9pcHY2LCB1c2luZyBsaWIkdjZsaWIiXSkKLQkJZWxpZiB0ZXN0ICIkdjZ0cnlsaWJjIiA9ICJ5ZXMiOyB0aGVuCi0JCQllbmFibGVfaXB2Nj0ieWVzIgotCQkJQUNfTVNHX1JFU1VMVChbIiR2NnR5cGUsICRlbmFibGVfaXB2NiwgdXNpbmcgbGliYyJdKQotCQllbHNlCi0JCQlBQ19NU0dfRVJST1Iobm8gSVB2NiBsaWJyYXJ5IGxpYiR2NmxpYi5hIGZvdW5kLikKLQkJCWV4aXQgMQotCQlmaQotCWVsc2UKLQkJZW5hYmxlX2lwdjY9Im5vIgotCQlBQ19NU0dfUkVTVUxUKFsiJHY2dHlwZSwgJGVuYWJsZV9pcHY2Il0pCi0JZmkKLWZpCi0KLSMKLSMgTWF5YmUgYWRkIGxpYnJhcnkgZXh0ZW5zaW9ucyBmb3IgdGhyZWFkIG11dGV4IGxvY2tpbmcuCi0jCi0KLWlmIHRlc3QgIngkd2l0aF9yZXNfbG9ja3MiID0gInh5ZXMiOyB0aGVuCi0gIEFDX0RFRklORShORVRTTk1QX1JFRU5UUkFOVCkKLQotICAgIGNhc2UgJHRhcmdldF9vcyBpbgotCi0gICAgYWl4KikKLQlDQ19SVU5USU1FX0FSRz0iJENDX1JVTlRJTUVfQVJHIC1scHRocmVhZHMiCi0JOzsKLQotICAgICopCi0JOzsKLQotICAgIGVzYWMKLWZpCi0KLSMKLSMgQWRkIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZSBmaWxlcy4KLSMKLUFDX01TR19DSEVDS0lORyhbZm9yIHBsYXRmb3JtLXNwZWNpZmljIHNvdXJjZV0pCi1vdGhlcl9zcmNfbGlzdD0iIgotb3RoZXJfb2Jqc19saXN0PSIiCi1vdGhlcl9sb2Jqc19saXN0PSIiCi1vdGhlcl9hZ2VudG9ianM9IiIKLW90aGVyX2xhZ2VudG9ianM9IiIKLW90aGVyX3RyYXBkX29iamVjdHM9IiIKLQotIyBXaW4zMiBzZXJ2aWNlIGNvZGUKLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gIG90aGVyX3NyY19saXN0PSIkb3RoZXJfc3JjX2xpc3Qgd2luc2VydmljZS5jIHdpbnNlcnZpY2VyYy5yYyIKLSAgb3RoZXJfb2Jqc19saXN0PSIkb3RoZXJfb2Jqc19saXN0IHdpbnNlcnZpY2UubyB3aW5zZXJ2aWNlcmMubyIKLSAgb3RoZXJfbG9ianNfbGlzdD0iJG90aGVyX2xvYmpzX2xpc3Qgd2luc2VydmljZS5sbyB3aW5zZXJ2aWNlcmMubG8iCi0gIG90aGVyX2FnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubyIKLSAgb3RoZXJfbGFnZW50b2Jqcz0iLi4vc25tcGxpYi93aW5zZXJ2aWNlcmMubG8iCi0gIG90aGVyX3RyYXBkX29iamVjdHM9Ii4uL3NubXBsaWIvd2luc2VydmljZXJjLm8iIAotZmkKLSAgCi0jIFdpbjMyIHBpcGVzCi1pZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gIG90aGVyX3NyY19saXN0PSIkb3RoZXJfc3JjX2xpc3Qgd2lucGlwZS5jIgotICBvdGhlcl9vYmpzX2xpc3Q9IiRvdGhlcl9vYmpzX2xpc3Qgd2lucGlwZS5vIgotICBvdGhlcl9sb2Jqc19saXN0PSIkb3RoZXJfbG9ianNfbGlzdCB3aW5waXBlLmxvIgotZmkKLQotQUNfU1VCU1Qob3RoZXJfc3JjX2xpc3QpCi1BQ19TVUJTVChvdGhlcl9vYmpzX2xpc3QpCi1BQ19TVUJTVChvdGhlcl9sb2Jqc19saXN0KQotQUNfU1VCU1Qob3RoZXJfYWdlbnRvYmpzKQotQUNfU1VCU1Qob3RoZXJfbGFnZW50b2JqcykKLUFDX1NVQlNUKG90aGVyX3RyYXBkX29iamVjdHMpCi0KLUFDX01TR19SRVNVTFQoWyRvdGhlcl9zcmNfbGlzdCAkb3RoZXJfb2Jqc19saXN0ICRvdGhlcl9sb2Jqc19saXN0XSkKLUFDX01TR19SRVNVTFQoWyRvdGhlcl9hZ2VudG9ianMgJG90aGVyX2xhZ2VudG9ianMgJG90aGVyX3RyYXBkX29iamVjdHNdKQotICAKLSMKLSMgRG8gdHJhbnNwb3J0IG1vZHVsZSBwcm9jZXNzaW5nLgotIwotQUNfTVNHX0NIRUNLSU5HKFtmb3IgYW5kIGNvbmZpZ3VyaW5nIHRyYW5zcG9ydCBtb2R1bGVzIHRvIHVzZV0pCi10cmFuc3BvcnRfc3JjX2xpc3Q9IiIKLXRyYW5zcG9ydF9oZHJfbGlzdD0iIgotdHJhbnNwb3J0X2RlZl9saXN0PSIiCi10cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiIKLXRyYW5zcG9ydF9hZGRfbGlzdD0iIgotdHJhbnNwb3J0X2NhbGxiYWNrX2Rpc2FibGVkPSIiCi1uZXdfd2l0aF90cmFuc3BvcnRfbGlzdD1gZWNobyAkd2l0aF90cmFuc3BvcnRzIHwgc2VkICdzLywvIC9nOydgCi1uZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3Q9YGVjaG8gJHdpdGhfb3V0X3RyYW5zcG9ydHMgfCBzZWQgJ3MvLC8gL2c7J2AKLQotIwotIyBBZGQgdGhlIGRlZmF1bHQgdHJhbnNwb3J0cyB0byB0aGUgbGlzdAotIwotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gIHRyYW5zcG9ydF9kZWZhdWx0X2xpc3Q9IlVEUCBUQ1AgQ2FsbGJhY2siCi1lbGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuIAotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIENhbGxiYWNrIgotZWxzZQotICB0cmFuc3BvcnRfZGVmYXVsdF9saXN0PSJVRFAgVENQIFVuaXggQ2FsbGJhY2siCi1maQotaWYgdGVzdCAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLSAgdHJhbnNwb3J0X2RlZmF1bHRfbGlzdD0iVURQSVB2NiBUQ1BJUHY2ICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0IgotZmkKLWZvciBpIGluICR0cmFuc3BvcnRfZGVmYXVsdF9saXN0OyBkbwotICBpZiBlY2hvICIgJG5ld193aXRoX3RyYW5zcG9ydF9saXN0ICIgfCBncmVwICIgJGkgIiA+L2Rldi9udWxsOyB0aGVuCi0gICAgOgotICBlbHNlCi0gICAgdHJhbnNwb3J0X2FkZF9saXN0PSIkaSAkdHJhbnNwb3J0X2FkZF9saXN0IgotICBmaQotZG9uZQotbmV3X3RyYW5zcG9ydF9saXN0PSIkdHJhbnNwb3J0X2FkZF9saXN0ICRuZXdfd2l0aF90cmFuc3BvcnRfbGlzdCIKLQotZm9yIGkgaW4gJG5ld190cmFuc3BvcnRfbGlzdDsgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfdHJhbnNwb3J0X2xpc3QgIiB8IGdyZXAgIiAkaSAiID4vZGV2L251bGw7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhVRFAiOyB0aGVuCi0gICAgICBlY2hvCi0gICAgICBBQ19NU0dfRVJST1IoSXQgaXMgbm90IHBvc3NpYmxlIHRvIGNvbXBpbGUgd2l0aG91dCBVRFAvSVAgc3VwcG9ydC4pCi0gICAgZWxpZiB0ZXN0ICJ4JGkiID0gInhDYWxsYmFjayI7IHRoZW4KLSAgICAgIGVjaG8KLSAgICAgIHRyYW5zcG9ydF9jYWxsYmFja19kaXNhYmxlZD0ieWVzIgotICAgIGZpCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICJ4JGkiID0gInhBQUw1UFZDIjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiICE9ICJ4bGludXgiOyB0aGVuCi0gICAgICAgIGVjaG8KLSAgICAgICAgQUNfTVNHX0VSUk9SKEFBTDUgUFZDIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gKExpbnV4IG9ubHkpKQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgIngkaSIgPSAieElQWCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiAhPSAieGxpbnV4IjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIEFDX01TR19FUlJPUihJUFggc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSAoTGludXggb25seSkpCi0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4VW5peCI7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIEFDX01TR19FUlJPUihVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtKQotICAgICAgZWxpZiB0ZXN0ICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzIiIC1vICJ4JFBBUlRJQUxUQVJHRVRPUyIgPSAieG1pbmd3MzJtc3ZjIjsgdGhlbgotICAgICAgICBlY2hvCi0gICAgICAgIEFDX01TR19FUlJPUihVbml4IGRvbWFpbiBwcm90b2NvbCBzdXBwb3J0IHVuYXZhaWxhYmxlIGZvciB0aGlzIHBsYXRmb3JtKQotICAgICAgZmkKLSAgICBmaQotICAgIGlmIHRlc3QgISAieCRlbmFibGVfaXB2NiIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAieCRpIiA9ICJ4VURQSVB2NiIgLW8gIngkaSIgPSAieFRDUElQdjYiOyB0aGVuCi0gICAgICAgICAgICBlY2hvCi0gICAgICAgICAgICBBQ19NU0dfRVJST1IoSVB2NiB0cmFuc3BvcnRzIG5vdCBhdmFpbGFibGUgaWYgSVB2NiBzdXBwb3J0IGlzIG5vdCBlbmFibGVkKQotICAgICAgICBmaQotICAgIGZpCi0gICAgdHJhbnNwb3J0X3NyYz0ic25tcCIkaSJEb21haW4uYyIKLSAgICB0cmFuc3BvcnRfaGRyPSJzbm1wIiRpIkRvbWFpbi5oIgotICAgIHJlbF90cmFuc3BvcnRfc3JjPSJzbm1wbGliLyIkdHJhbnNwb3J0X3NyYwotICAgIHJlbF90cmFuc3BvcnRfaGRyPSJpbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvIiR0cmFuc3BvcnRfaGRyCi0gICAgaWYgdGVzdCAtZiAiJHNyY2Rpci8kcmVsX3RyYW5zcG9ydF9zcmMiOyB0aGVuCi0gICAgICB0cmFuc3BvcnRfcmVzdWx0X2xpc3Q9IiR0cmFuc3BvcnRfcmVzdWx0X2xpc3QgJGkiCi0gICAgICB0cmFuc3BvcnRfc3JjX2xpc3Q9IiR0cmFuc3BvcnRfc3JjICR0cmFuc3BvcnRfc3JjX2xpc3QiCi0gICAgICBpZiB0ZXN0IC1mICIkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X2hkciI7IHRoZW4KLSAgICAgICAgdHJhbnNwb3J0X2hkcl9saXN0PSIkdHJhbnNwb3J0X2hkciAkdHJhbnNwb3J0X2hkcl9saXN0IgotICAgICAgZmkKLSAgICAgIHRyYW5zcG9ydF9kZWY9YGVjaG8gJGkgfCBzZWQgJ3kvYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXovQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVovJ2AKLSAgICAgIHRyYW5zcG9ydF9kZWZfbGlzdD0iTkVUU05NUF9UUkFOU1BPUlRfIiR0cmFuc3BvcnRfZGVmIl9ET01BSU4gJHRyYW5zcG9ydF9kZWZfbGlzdCIKLSAgICBlbHNlCi0gICAgICBlY2hvCi0gICAgICBBQ19NU0dfRVJST1IoQ2Fubm90IGZpbmQgZmlsZSAkc3JjZGlyLyRyZWxfdHJhbnNwb3J0X3NyYyB0byBzdXBwb3J0IFNOTVAgdHJhbnNwb3J0IGRvbWFpbiAkaS4pCi0gICAgZmkKLSAgZmkKLWRvbmUKLXRyYW5zcG9ydF9vYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8IHNlZCAncy9cLmMvXC5vL2cnYCAJIAotdHJhbnNwb3J0X2xvYmpfbGlzdD1gZWNobyAiICR0cmFuc3BvcnRfc3JjX2xpc3QgIiB8IHNlZCAncy9cLmMvXC5sby9nJ2AKLQotIyMgd2luMzIgcGxhdGZvcm1zIHJlcXVpcmUgaW5ldF9udG9wIGV0Yy4KLWlmIHRlc3QgIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMiIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4bWluZ3czMm1zdmMiOyB0aGVuCi0gIGlmIGVjaG8gIiR0cmFuc3BvcnRfZGVmX2xpc3QiIHwgZ3JlcCAiSVBWNiIgPi9kZXYvbnVsbDsgdGhlbgotICAgIHRyYW5zcG9ydF9vYmpfbGlzdD0iJHRyYW5zcG9ydF9vYmpfbGlzdCBpbmV0X250b3AubyBpbmV0X3B0b24ubyIKLSAgICB0cmFuc3BvcnRfbG9ial9saXN0PSIkdHJhbnNwb3J0X2xvYmpfbGlzdCBpbmV0X250b3AubG8gaW5ldF9wdG9uLmxvIgotICBmaQotZmkKLQotQUNfU1VCU1QodHJhbnNwb3J0X2hkcl9saXN0KQotQUNfU1VCU1QodHJhbnNwb3J0X3NyY19saXN0KQotQUNfU1VCU1QodHJhbnNwb3J0X29ial9saXN0KQotQUNfU1VCU1QodHJhbnNwb3J0X2xvYmpfbGlzdCkKLWZvciBpIGluICR0cmFuc3BvcnRfZGVmX2xpc3Q7IGRvCi0gIEFDX0RFRklORV9VTlFVT1RFRCgkaSkKLWRvbmUKLUFDX01TR19SRVNVTFQoJHRyYW5zcG9ydF9yZXN1bHRfbGlzdC4pCi1BQ19NU0dfQ0FDSEVfQUREKE5ldHdvcmsgdHJhbnNwb3J0IHN1cHBvcnQ6ICR0cmFuc3BvcnRfcmVzdWx0X2xpc3QpCi0KLSMKLSMgU2VjdXJpdHkgbW9kdWxlcyB0byB1c2UKLSMgCi0KLUFDX01TR19DSEVDS0lORyhbZm9yIHNlY3VyaXR5IG1vZHVsZXMgdG8gdXNlXSkKLXNlY3VyaXR5X2RlZl9saXN0PSJ1c20iCi1zZWN1cml0eV9zcmNfbGlzdD0iIgotc2VjdXJpdHlfb2JqX2xpc3Q9IiIgCSAKLXNlY3VyaXR5X2xvYmpfbGlzdD0iIgotc2VjdXJpdHlfaW5pdF9maWxlPSJzbm1wbGliL3NubXBzbV9pbml0LmgiCi1zZWN1cml0eV9pbmNsX2ZpbGU9ImluY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaCIKLW5ld193aXRoX3NlY3VyaXR5PWBlY2hvICR3aXRoX3NlY3VyaXR5X21vZHVsZXMgfCBzZWQgJ3MvLC8gL2c7J2AKLW5ld193aXRoX291dF9zZWN1cml0eT1gZWNobyAkd2l0aF9vdXRfc2VjdXJpdHlfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotCi1pZiB0ZXN0ICEgLWQgaW5jbHVkZTsgdGhlbgotICBta2RpciBpbmNsdWRlCi1maQotaWYgdGVzdCAhIC1kIGluY2x1ZGUvbmV0LXNubXA7IHRoZW4KLSAgbWtkaXIgaW5jbHVkZS9uZXQtc25tcAotZmkKLWlmIHRlc3QgISAtZCBpbmNsdWRlL25ldC1zbm1wL2FnZW50OyB0aGVuCi0gIG1rZGlyIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQKLWZpCi1pZiB0ZXN0ICEgLWQgaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5OyB0aGVuCi0gIG1rZGlyIGluY2x1ZGUvbmV0LXNubXAvbGlicmFyeQotZmkKLWlmIHRlc3QgISAtZCBpbmNsdWRlL3VjZC1zbm1wOyB0aGVuCi0gIG1rZGlyIGluY2x1ZGUvdWNkLXNubXAKLWZpCi0KLWlmIHRlc3QgISAtZCBzbm1wbGliOyB0aGVuCi0gIG1rZGlyIHNubXBsaWIKLWZpCi1lY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5pdF9maWxlCi1lY2hvICIvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLyIgPiAkc2VjdXJpdHlfaW5jbF9maWxlCi0KLWZvciBpIGluICRzZWN1cml0eV9kZWZfbGlzdDsgZG8KLSAgaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfc2VjdXJpdHkgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgaWYgdGVzdCAieCRpIiA9ICJ4dXNtIjsgdGhlbgotCWVjaG8KLSAgICAgICAgQUNfTVNHX0VSUk9SKFRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIG1hbmRhdG9yeSkKLSAgICBmaQotICBlbHNlCi0gICAgbmV3X3dpdGhfc2VjdXJpdHk9IiRuZXdfd2l0aF9zZWN1cml0eSAkaSIKLSAgZmkKLWRvbmUKLQotZm9yIGkgaW4gJG5ld193aXRoX3NlY3VyaXR5OyBkbwotICBjZmlsZT0ic25tcCIkaSIuYyIKLSAgaGZpbGU9InNubXAiJGkiLmgiCi0KLSAgIyBtYWtlIHN1cmUgc3VwcG9ydCBleGlzdHMgZm9yIGl0Ci0gIGlmIHRlc3QgLWYgJHNyY2RpciIvc25tcGxpYi8iJGNmaWxlIC1hIC1mICRzcmNkaXIiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS8iJGhmaWxlOyB0aGVuCi0gICAgOgotICBlbHNlCi0gICAgZWNobwotICAgIEFDX01TR19FUlJPUihObyBzdWNoIHNlY3VyaXR5IG1vZHVsZTogJGkgLyAkY2ZpbGUgLyAkaGZpbGUpCi0gIGZpCi0KLSAgIyBkZWZpbmUgYSBidW5jaCBvZiBzdHVmZiB0byBlbmFibGUgaXQKLSAgc2VjdXJpdHlfc3JjX2xpc3Q9IiRzZWN1cml0eV9zcmNfbGlzdCAkY2ZpbGUiCi0gIHNlY3VyaXR5X2hkcl9saXN0PSIkc2VjdXJpdHlfaGRyX2xpc3QgJGhmaWxlIgotICBzZWN1cml0eV9vYmpfbGlzdD0iJHNlY3VyaXR5X29ial9saXN0IHNubXAiJGkiLm8iIAkgCi0gIHNlY3VyaXR5X2xvYmpfbGlzdD0iJHNlY3VyaXR5X2xvYmpfbGlzdCBzbm1wIiRpIi5sbyIKLSAgZGVmX25hbWU9Ik5FVFNOTVBfU0VDTU9EXyJgZWNobyAkaSB8IHRyICdhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eicgJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaJ2AKLSAgZWNobyAiaW5pdF8iJGkiKCk7IiA+PiAkc2VjdXJpdHlfaW5pdF9maWxlCi0gIGVjaG8gIiNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5LyRoZmlsZT4iID4+ICRzZWN1cml0eV9pbmNsX2ZpbGUKLSAgQUNfREVGSU5FX1VOUVVPVEVEKCRkZWZfbmFtZSkKLWRvbmUKLQotQUNfU1VCU1Qoc2VjdXJpdHlfc3JjX2xpc3QpCi1BQ19TVUJTVChzZWN1cml0eV9oZHJfbGlzdCkKLUFDX1NVQlNUKHNlY3VyaXR5X29ial9saXN0KSAJIAotQUNfU1VCU1Qoc2VjdXJpdHlfbG9ial9saXN0KQotQUNfTVNHX1JFU1VMVCgkbmV3X3dpdGhfc2VjdXJpdHkpCi1BQ19NU0dfQ0FDSEVfQUREKFNOTVB2MyBTZWN1cml0eSBNb2R1bGVzOiAgICAkbmV3X3dpdGhfc2VjdXJpdHkpCi0KLSMKLSMgSGFuZGxlIHRoZSBzcGVjaWFsIGNhc2Ugb2YgS1NNIHRvIHNlZSB3aGljaCBjcnlwdG8gQVBJIHdlIHN1cHBvcnQKLSMKLQotYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUPW5vCi1yZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PQotYWxyZWFkeV9jaGVja2VkX2tyYjU9bm8KLQotZm9yIHNlYyBpbiAkbmV3X3dpdGhfc2VjdXJpdHkKLWRvCi0gIGlmIHRlc3QgIngkc2VjIiA9ICJ4a3NtIiAtYSAieHllcyIgPSAieCRhbHJlYWR5X2NoZWNrZWRfa3JiNSI7IHRoZW4KLSAgICBjb250aW51ZQotICBmaQotICBhbHJlYWR5X2NoZWNrZWRfa3JiNT15ZXMKLQotICBpZiB0ZXN0IHgkc2VjICE9IHhrc207IHRoZW4KLSAgICByZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5PSIkcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eSAkc2VjIgotICBlbHNlCi0gICAgaWYgdGVzdCBubyA9ICR0cnlrcmI1OyB0aGVuCi0gICAgICBBQ19NU0dfTk9USUNFKFtjb25maWd1cmVkIG5vdCB0byB1c2Uga3JiNS4gZGlzYWJsaW5nIGtzbV0pCi0gICAgICBjb250aW51ZQotICAgIGZpCi0KLSAgICBBQ19QQVRIX1BST0coW2tyYjVfY29uZmlnXSxrcmI1LWNvbmZpZyxbbm9dLCRrcmI1cGF0aC9iaW46JFBBVEgpCi0KLSAgICBpZiB0ZXN0IG5vICE9ICRrcmI1X2NvbmZpZzsgdGhlbgotICAgICAgQ1BQRkxBR1M9IiRDUFBGTEFHUyBgJGtyYjVfY29uZmlnIC0tY2ZsYWdzYCIKLSAgICAgIExJQlM9IiRMSUJTIGAka3JiNV9jb25maWcgLS1saWJzYCIKLSAgICBlbGlmIHRlc3QgJGtyYjVwYXRoICE9IG5vOyB0aGVuCi0gICAgICBBQ19BRERfU0VBUkNIX1BBVEgoJGtyYjVwYXRoKQotICAgIGVsc2UKLSAgICAgIEFDX0FERF9TRUFSQ0hfUEFUSCgvdXNyL2tlcmJlcm9zKQotICAgIGZpCi0KLSAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBrcmI1XSkKLSAgICBBQ19DQUNIRV9WQUwoYWNfY3ZfaGF2ZV9rcmI1LAotICAgICAgQUNfQ0hFQ0tfTElCKGtyYjUsIGtyYjVfaW5pdF9jb250ZXh0LAotCWFjX2N2X2hhdmVfa3JiNT15ZXMsIGFjX2N2X2hhdmVfa3JiNT1ubwotICAgICAgKQotICAgICkKLQotICAgIGlmIHRlc3QgJGFjX2N2X2hhdmVfa3JiNSA9IG5vOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JGFza2Vka3JiNSIgPSAieHllcyI7IHRoZW4KLQlBQ19NU0dfRVJST1IoQXNrZWQgdG8gdXNlIGtyYjUgYnV0IEkgY291bGRuJ3QgZmluZCBpdC4pCi0gICAgICBmaQotICAgICAgQUNfTVNHX1JFU1VMVChuby4gZGlzYWJsaW5nIGtzbSkKLSAgICAgIGNvbnRpbnVlCi0gICAgZmkKLSAgICAgIAotICAgIEFDX01TR19SRVNVTFQoeWVzKQotICAgIHJlYnVpbHRfbmV3X3dpdGhfc2VjdXJpdHk9IiRyZWJ1aWx0X25ld193aXRoX3NlY3VyaXR5IGtzbSIKLQotICAgIEFDX01TR19DSEVDS0lORyhbW2ZvciBoZWltZGFsXV0pCi0gICAgQUNfQ0FDSEVfVkFMKGFjX2N2X2hlaW1kYWwsCi0gICAgW0FDX1RSWV9DT01QSUxFKAotICAgICAgWyNpbmNsdWRlIDxrcmI1Lmg+XSwKLSAgICAgIFtjb25zdCBjaGFyICp2ID0gaGVpbWRhbF92ZXJzaW9uO10sCi0gICAgICBhY19jdl9oZWltZGFsPXllcywKLSAgICAgIGFjX2N2X2hlaW1kYWw9bm8KLSAgICApXSkKLSAgICBBQ19NU0dfUkVTVUxUKCRhY19jdl9oZWltZGFsKQotICAgIGlmIHRlc3QgJGFjX2N2X2hlaW1kYWwgPSB5ZXM7IHRoZW4KLSAgICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMKQotICAgICAgaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgotCUxJQlM9IiRMSUJTIC1sa3JiNSAtbGFzbjEgLWxjb21fZXJyIC1scm9rZW4iCi0gICAgICBmaQotICAgIGVsaWYgdGVzdCBubyA9ICRrcmI1X2NvbmZpZzsgdGhlbgotCUxJQlM9IiRMSUJTIC1sa3JiNSAtbGNvbV9lcnIiCi0gICAgZmkKLQotICAgIEFDX01TR19DSEVDS0lORyhbdG8gc2VlIHdoaWNoIGNyeXB0byBBUEkgd2UgbmVlZCB0byB1c2VdKQotICAgIEFDX0NIRUNLX0ZVTkMoa3JiNV9jX2VuY3J5cHQsWwotICAgIEFDX0NBQ0hFX1ZBTChhY19jdl9ORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQsCi0gICAgICBBQ19DSEVDS19MSUIoazVjcnlwdG8sIGtyYjVfaW5pdF9jb250ZXh0LAotCWFjX2N2X05FVFNOTVBfVVNFX0tFUkJFUk9TX01JVD15ZXMsIGFjX2N2X01JVF9ORVdfQ1JZUFRvPW5vCi0gICAgICApCi0gICAgKQotCi0gICAgaWYgdGVzdCB5ZXMgPSAkYWNfY3ZfTkVUU05NUF9VU0VfS0VSQkVST1NfTUlUOyB0aGVuCi0gICAgICBBQ19NU0dfUkVTVUxUKG5ldyBNSVQgY3J5cHRvIEFQSSkKLSAgICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQpCi0gICAgICBpZiB0ZXN0IG5vID0gJGtyYjVfY29uZmlnOyB0aGVuCi0JTElCUz0iJExJQlMgLWxrNWNyeXB0byIKLSAgICAgIGZpCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1JFU1VMVChvbGQgTUlUIGNyeXB0byBBUEkpXSkKLSAgICBmaQotICBmaQotZG9uZQotCi1uZXdfd2l0aF9zZWN1cml0eT0kcmVidWlsdF9uZXdfd2l0aF9zZWN1cml0eQotCi0jCi0jIGdlbmVyYXRlIGVtcHR5IGZpbGVzCi0jCi0jIENyZWF0ZSBpbmNsdWRlIGZpbGUgbGlzdCBmb3Igc25tcF92YXJzLmggdG8gdXNlLgotbWliZGlyPSJhZ2VudC9taWJncm91cCIKLWlmIHRlc3QgISAtZCBhZ2VudDsgdGhlbgotICBta2RpciBhZ2VudAotZmkKLWlmIHRlc3QgISAtZCBhZ2VudC9taWJncm91cDsgdGhlbgotICBta2RpciBhZ2VudC9taWJncm91cAotZmkKLWo9IiRtaWJkaXIvbWliX21vZHVsZV9pbmNsdWRlcy5oICAkbWliZGlyL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oIFwKLSAgICRtaWJkaXIvbWliX21vZHVsZV9pbml0cy5oICAgICAkbWliZGlyL2FnZW50X21vZHVsZV9pbml0cy5oICAgIFwKLSAgICRtaWJkaXIvbWliX21vZHVsZV9zaHV0ZG93bi5oICAkbWliZGlyL2FnZW50X21vZHVsZV9zaHV0ZG93bi5oIFwKLSAgIGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICBpbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCAgIFwKLSAgICRtaWJkaXIvbWliX21vZHVsZV9kb3RfY29uZi5oICAkbWliZGlyL2FnZW50X21vZHVsZV9kb3RfY29uZi5oIgotCi1mb3IgaSBpbiAkajsgZG8KLSAgcm0gLWYgJGkKLSAgZWNobyAiLyogVGhpcyBmaWxlIGlzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IGNvbmZpZ3VyZS4gIERvIG5vdCBtb2RpZnkgYnkgaGFuZC4gKi8iID4gJGkKLWRvbmUKLQotIwotIyBEbyBoYWlyeSBhZ2VudCBtb2R1bGUgcHJvY2Vzc2luZy4KLSMKLUFDX01TR19DSEVDS0lORyhbZm9yIGFuZCBjb25maWd1cmluZyBtaWIgbW9kdWxlcyB0byB1c2VdKQotCi0jIHNldCB1cCB0aGUgQ1BQIGNvbW1hbmQKLU1PRFVMRUNQUD0iJENQUCAkUEFSVElBTFRBUkdFVEZMQUdTIC1JJHtzcmNkaXJ9L2luY2x1ZGUgLUkke3NyY2Rpcn0vYWdlbnQvbWliZ3JvdXAiCi1pZiB0ZXN0ICJ4JGVuYWJsZV9tZmRfcmV3cml0ZXMiID0gInh5ZXMiOyB0aGVuCi0gIE1PRFVMRUNQUD0iJE1PRFVMRUNQUCAtRE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUyIKLWZpCi0KLW1vZHVsZV9saXN0PSIiCi1taWJfbW9kdWxlX2xpc3Q9IiIKLWFnZW50X21vZHVsZV9saXN0PSIiCi1uZXdfd2l0aF9taWJfbW9kdWxlcz1gZWNobyAkd2l0aF9taWJfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzPWBlY2hvICR3aXRoX291dF9taWJfbW9kdWxlcyB8IHNlZCAncy8sLyAvZzsnYAotCi0jIHNldCB1cCBpbml0aWFsIG1vZHVsZSBsaXN0Ci1uZXdfbW9kdWxlX2xpc3Q9IiRuZXdfd2l0aF9taWJfbW9kdWxlcyBkZWZhdWx0X21vZHVsZXMiCi0KLSMgbWlub3IgbW9kaWZpY2F0aW9ucwotaWYgdGVzdCAieCRlbmFibGVfYWdlbnQiID0gInhubyI7IHRoZW4KLSAgICMgbWluaW11bSBtaWIgbW9kdWxlIGxpc3QgZm9yIHNubXB0cmFwZAotICAgbmV3X21vZHVsZV9saXN0PSJtaWJJSS92YWNtX3ZhcnMgbWliSUkvdmFjbV9jb25mIHV0aWxpdGllcy9leGVjdXRlICRuZXdfd2l0aF9taWJfbW9kdWxlcyIKLSAgIGRlZmF1bHRfbWlicz1TTk1QdjItTUlCOklGLU1JQjpJUC1NSUI6VENQLU1JQjpVRFAtTUlCCi0gICBkZWZhdWx0X21pYnNfaW5zdGFsbD0iICIKLWVsaWYgdGVzdCAieCRtaW5pX2FnZW50IiA9ICJ4eWVzIjsgdGhlbgotICAgIyBkZWZpbmUgdGhlIG1pbmkgYWdlbnQgZmxhZyB0byByZWR1Y2Ugb3VyIGxvYWQgbGlzdCBmcm9tIGRlZmF1bHRfbWlicy5oCi0gICBNT0RVTEVDUFA9IiRNT0RVTEVDUFAgLURORVRTTk1QX01JTklfQUdFTlQiCi1maQotCi10ZXN0X21vZHVsZXM9IiRuZXdfbW9kdWxlX2xpc3QiCi1uZXdfbW9kdWxlX2xpc3Q9IiIKLQotIyByZW1vdmUgbW9kdWxlcyB0aGF0IHdlcmUgZXhwbGljaXRseSBleGNsdWRlZAotZm9yIGkgaW4gJHRlc3RfbW9kdWxlcwotIGRvCi0gIGlmIGVjaG8gIiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAgIG1pYl9jZmdfbXNnPSJtaWIgbW9kdWxlICckaScgaXMgYm90aCBpbmNsdWRlZCBhbmQgZXhjbHVkZWQuIgotICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGNvbmZsaWN0XSkKLSAgICBpZiB0ZXN0ICJ4JHdpdGhfbWliX2NmZ19jaGVja3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICBBQ19NU0dfV0FSTihbdXNlciB3aXRoICAgIDogJHdpdGhfbWliX21vZHVsZXNdKQotICAgICAgQUNfTVNHX1dBUk4oW2ZpbmFsIHdpdGggICA6ICRuZXdfbW9kdWxlX2xpc3RdKQotICAgICAgQUNfTVNHX1dBUk4oW3VzZXIgd2l0aG91dCA6ICR3aXRoX291dF9taWJfbW9kdWxlc10pCi0gICAgICBBQ19NU0dfV0FSTihbZmluYWwgd2l0aG91dDogJG5ld193aXRoX291dF9taWJfbW9kdWxlc10pCi0gICAgICBBQ19NU0dfRVJST1IoWyRtaWJfY2ZnX21zZ10pCi0gICAgZWxzZQotICAgICAgQUNfTVNHX1dBUk4oWyRtaWJfY2ZnX21zZyBJdCB3aWxsIGJlIGV4Y2x1ZGVkXSkKLSAgICAgIEFDX01TR19DQUNIRV9BREQoWyoqKiBNSUIgTW9kdWxlIHdhcm5pbmcgKioqICRtaWJfY2ZnX21zZyBJdCBoYXMgYmVlbiBleGNsdWRlZC5dKQotICAgIGZpCi0gIGVsc2UKLSAgICBuZXdfbW9kdWxlX2xpc3Q9IiRuZXdfbW9kdWxlX2xpc3QgJGkiCi0gIGZpCi1kb25lCi0KLUFDX01TR19SRVNVTFQoWyRuZXdfbW9kdWxlX2xpc3QuXSkKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBsb29wIG92ZXIgbW9kdWxlIGxpc3QKLSMKLWFsbF93YXJuaW5ncz0iIgotaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfZGVidWciID0gInh5ZXMiOyB0aGVuCi0gICBtb2R1bGVfZGVidWc9MQotZWxzZQotICAgbW9kdWxlX2RlYnVnPTAKLWZpCi1maXJzdF9wYXNzPTEKLW91dHB1dF90bz1ub3JtYWwKLQotaWYgdGVzdCAhIC1kIG1rIDsgdGhlbgotICBta2RpciBtawotZmkKLQotCi1tb2R1bGVfcnVsZXM9bWsvbW9kdWxlX3J1bGVzLm1rCi1lY2hvICIjIGNvbnRlbnRzIGJlbG93IGJ1aWx0IGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlOyBkbyBub3QgZWRpdCBieSBoYW5kIiA+ICRtb2R1bGVfcnVsZXMKLQotIwotIyBtYWtlIGZpbGUgc3ViLXBpZWNlcwotIwotZm9yIGkgaW4gbW9kdWxlX2xpc3RfZGVwcyBtaWJfbW9kdWxlX2xpc3RfZGVwcyBhZ2VudF9tb2R1bGVfbGlzdF9kZXBzIDsgZG8KLSAgZXZhbCAiJGk9bWsvJHtpfS5tayIKLSAgZWNobyAiIyBjb250ZW50cyBiZWxvdyBidWlsdCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZTsgZG8gbm90IGVkaXQgYnkgaGFuZCIgPiBtay8ke2l9Lm1rCi1kb25lCi0KLSMKLSMgdmFyaWFibGUgc2V0dGluZ3Mgc3ViLXBpZWNlcwotIwotZm9yIGkgaW4gbW9kdWxlX2xpc3RfY29kZSBtaWJfbW9kdWxlX2xpc3RfY29kZSBhZ2VudF9tb2R1bGVfbGlzdF9jb2RlIG1vZHVsZV9saXN0IG1pYl9tb2R1bGVfbGlzdCBhZ2VudF9tb2R1bGVfbGlzdCA7IGRvCi0gIGV2YWwgIiRpPW1rLyR7aX0ubWsiCi0gIGVjaG8gIiMgY29udGVudHMgYmVsb3cgYnVpbHQgYXV0b21hdGljYWxseSBieSBjb25maWd1cmU7IGRvIG5vdCBlZGl0IGJ5IGhhbmQiID4gbWsvJHtpfS5tawotICBlY2hvICIkaT0gXFwiID4+IG1rLyR7aX0ubWsKLWRvbmUKLQotZWNobyAkRUNIT19OICJlY2hvICIgJEVDSE9fQyA+IG1rL01PRFVMRV9MSVNULm1rCi1NT0RVTEVfTElTVD1tay9NT0RVTEVfTElTVC5tawotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSMgdW50aWwgd2UgaGF2ZSBhbiBlbXB0eSBtb2R1bGUgbGlzdC4uLgotIyAgIChtb2R1bGVzIG1heSBhZGQgbmV3IG1vZHVsZXMsIGFuZCB1bnRpbCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBkb25lLi4uKQotIwotd2hpbGUgdGVzdCAieCRuZXdfbW9kdWxlX2xpc3QiICE9ICJ4IjsgZG8KLSAgQUNfTVNHX01PRFVMRV9EQkcoLWUsIlxuKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiIpCi0gIEFDX01TR19NT0RVTEVfREJHKCJubWw6ICRuZXdfbW9kdWxlX2xpc3QiKQotCi0gICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgIyBsb29wIG92ZXIgYWxsIHRoZSBtb2R1bGVzIGluIHRoZSBjdXJyZW50IGxpc3QKLSAgIwotICBmb3IgaiBpbiAkbmV3X21vZHVsZV9saXN0Ci0gICAgZG8KLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIGZpZ3VyZSBvdXQgd2hpY2ggc3ViLWJsb2NrcyB0byBidWlsZCBpbiBwYXJ0cwotICAgIGlmIGVjaG8gIiRqIiB8IGdyZXAgIj0iIDsgdGhlbgotICAgICAgICMgYnVpbGQgYSBzaGFyZWQgb2JqZWN0IGZpbGUKLSAgICAgICAjIGZvcm1hdDogc29maWxlbmFtZT1tb2R1bGUxOm1vZHVsZTIKLSAgICAgICAjIFhYWDogY3VycmVudGx5IGRvZXNuJ3QgZG8gdGhpcwotICAgICAgIGRsX25hbWU9YGVjaG8gJGogfCBzZWQgJ3MvPS4qLy8nYAotICAgICAgIGRsX25hbWVzPSIkZGxfbmFtZXMgJGRsX25hbWUiCi0gICAgICAgZGxfb2JqZWN0cz1gZWNobyAkaiB8IHNlZCAncy8uKj0vLydgCi0gICAgICAgbW9kdWxlX3N1Ymxpc3Q9YGVjaG8gJGRsX29iamVjdHMgfCBzZWQgJ3MvOi8gL2cnYAotICAgICAgIHNhdmVkX3N1Ymxpc3Q9IiIKLSAgICAgICBzYXZlZF9zdWJsaXN0X2NvZGU9IiIKLSAgICAgICBvdXRwdXRfdG89c2VwYXJhdGUKLQotICAgICAgICMgY3JlYXRlIG91dHB1dCBmaWxlcwotICAgICAgICMgdGhlc2UgYWN0dWFsbHkgZ2V0IG51a2VkIGxhdGVyCi0gICAgICAgb3V0cHV0X2luaXRzPSJhZ2VudC9taWJncm91cC8ke2RsX25hbWV9LWRsbC5jIgotICAgICAgIG91dHB1dF9oZHJzPSJhZ2VudC9taWJncm91cC8ke2RsX25hbWV9LWhkcnMuaCIKLSAgICBlbHNlCi0gICAgICAgIyBub3QgYSBzcGVjaWFsIHRva2VuIGludm9jYXRpb24KLSAgICAgICBtb2R1bGVfc3VibGlzdD0kagotICAgICAgIG91dHB1dF90bz1ub3JtYWwKLSAgICAgICBvdXRwdXRfdD0KLSAgICBmaQotCi0gICAgd2hpbGUgdGVzdCAieCRtb2R1bGVfc3VibGlzdCIgIT0gIngiIDsgZG8KLQotICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIGxvb3Agb3ZlciBhbGwgdGhlIG1vZHVsZXMgaW4gdGhlIHN1YiBsaXN0Ci0gICAgZm9yIGkgaW4gJG1vZHVsZV9zdWJsaXN0Ci0gICAgZG8KLQotICAgIEFDX01TR19NT0RVTEVfREJHKC1lICJcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0iKQotICAgIEFDX01TR19NT0RVTEVfREJHKCJ0ZXN0aW5nICRpIikKLSAgICBuZWVkX2hlYWRlcj0wCi0KLSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBidWlsZCBhIHBzZXVkbyBpbmNsdWRlIGhlYWRlciB0aGF0IGluY2x1ZGVzIGN1cnJlbnQgY29uZmlnIGFuZAotICAgICMgc3lzdGVtIHN5bWJvbHM6Ci0gICAgQUNfTEFOR19DT05GVEVTVChBQ19MQU5HX1NPVVJDRShbWwotI2luY2x1ZGUgTkVUU05NUF9TWVNURU1fSU5DTFVERV9GSUxFCi0jaW5jbHVkZSAiJHNyY2Rpci8kbWliZGlyLyRpLmgiXV0pKQotICAgIG12IGNvbmZ0ZXN0LiRhY19leHQgbW9kdWxlX3RtcF9oZWFkZXIuaAotCi0gICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICMgbWFjcm86IGNvbmZpZ19iZWxvbmdzX2luKEFSRykKLSAgICAjICAgQVJHOiBlaXRoZXIKLSAgICAjICAgICAtIG1pYl9tb2R1bGUgICA9PiBsaWJuZXRzbm1wbWlicyAgIChkZWZhdWx0KQotICAgICMgICAgIC0gYWdlbnRfbW9kdWxlID0+IGxpYm5ldHNubXBhZ2VudAotICAgICMKLSAgICBtb2R1bGVfdHlwZT1taWJfbW9kdWxlCi0gICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuaDsgdGhlbgotICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICBtb2R1bGVfdHlwZT1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfYmVsb25nc19pbiB8IHNlZCAnc0AuKmNvbmZpZ19iZWxvbmdzX2luKFwoW14pXSpcKSkuKkBcMUAnYAotICAgICAgY2hhbmdlcXVvdGUoWywgXSkKLSAgICBmaQotICAgIGlmIHRlc3QgIngkbW9kdWxlX3R5cGUiID0gIngiIDsgdGhlbgotICAgICAgbW9kdWxlX3R5cGU9bWliX21vZHVsZQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRvdXRwdXRfdG8iID0gInhub3JtYWwiIDsgdGhlbgotICAgICAJb3V0cHV0X2luaXRzPSIkbWliZGlyLyR7bW9kdWxlX3R5cGV9X2luaXRzLmgiCi0gICAgIAlvdXRwdXRfaGRycz0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbmNsdWRlcy5oIgotICAgIGZpCi0KLSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAjIGNoZWNrIGZvciBkdXBsaWNhdGVzIHdpdGhpbiB0aGUgZGxsIHN5c3RlbS4gCi0gICAgIyAgIC0gaWYgZm91bmQgaW4gYSBkbGwsIHRoZW4gcmVtb3ZlIGZyb20gdGhlIGRsbCBhbmQgYWRkIHRvIG1haW4KLSAgICBkYmxmaXg9IiIKLSAgICBmb3IgZGx0ZXN0IGluICRkbF9uYW1lcyA7IGRvCi0gICAgICBldmFsIG1vZF9maWxlcz0iXCJcJGRsXyR7ZGx0ZXN0fV9maWxlc1wiIgotICAgICAgaWYgZWNobyAiICRtb2RfZmlsZXMgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICAgICMgc29tZSBkbGwgbW9kdWxlIGhhcyBhbHJlYWR5IHNlZW4gdGhpcywgdW5sb2FkIGl0IGZyb20gdGhhdCBsaXN0Ci0gICAgICAgICMgYW5kIGluY2x1ZGUgaXQgaW4gdGhlIGNvcmUgKGFnYWluKQotICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygicmVtb3ZpbmcgJGkgZnJvbSAkZGx0ZXN0IikKLSAgICAgICAgbW9kX2ZpbGVzPWBlY2hvICIgJG1vZF9maWxlcyAiIHwgc2VkICJzQCAkaSBAQCJgCi0gICAgICAgIGRibGZpeD0iX19YWFhfXyIKLSAgICAgICAgZXZhbCAiZGxfJHtkbHRlc3R9X2ZpbGVzPVwiJG1vZF9maWxlc1wiIgotCi0gICAgICAgIG1vZHVsZV9saXN0PSIkbW9kdWxlX2xpc3QgJGkiCi0JZWNobyAicmVhZF9jb25maWcubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtb2R1bGVfbGlzdF9kZXBzCi0JaWYgdGVzdCAkbW9kdWxlX3R5cGUgPSAiYWdlbnRfbW9kdWxlIiA7IHRoZW4KLSAJICAgIGVjaG8gInNubXBfdmFycy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJGFnZW50X21vZHVsZV9saXN0X2RlcHMKLSAgICAgICAgZWxzZQotIAkgICAgZWNobyAibWliX21vZHVsZXMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtaWJfbW9kdWxlX2xpc3RfZGVwcwotICAgICAgICBmaQotICAgICAgICBldmFsICR7bW9kdWxlX3R5cGV9X2xpc3Q9IlwiXCQke21vZHVsZV90eXBlfV9saXN0ICRpXCIiCi0JZWNobyAiCSRpIFxcIiA+PiAkbW9kdWxlX2xpc3RfY29kZQotCWVjaG8gJEVDSE9fTiAiICRpIiAkRUNIT19DID4+ICRNT0RVTEVfTElTVAotICAgICAgICBldmFsIHRtcGZpbGV2YXI9XCRgZWNobyAke21vZHVsZV90eXBlfV9saXN0X2NvZGVgCi0gICAgICAgIGVjaG8gIgkkaSBcXCIgPj4gJHRtcGZpbGV2YXIKLQotCSMgWFhYOiBhZGQgdGhpcyB0byB0aGUgbWFpbiBpbml0IGxpc3Q7IHRoaXMgaXMgcG9zc2libGUgbm90Ci0JIyBxdWl0ZSBpbiB0aGUgcmlnaHQgc3BvdCBhbnkgbG9uZ2VyIGJ1dCB3ZSdyZSBzdHVjayB3aXRoIGl0LgotCSMgQWRkaW5nIGl0IGJhY2sgdG8gdGhlIG9yaWdpbmFsIG9yZGVyZWQgc3BvdCB3b3VsZCBiZSBhCi0JIyBuaWdodG1hcmUuICBPaywgd2UncmUgYWxyZWFkeSBpbiBuaWdodG1hcmUgY29kZSBzbyB0aGF0Ci0JIyB3b2x1ZCBoYXZlIHRvIGJlIGEgbmlnaHQtdGVycm9yLgotICAgICAgICBtbm09YGVjaG8gJGkgfCBzZWQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCi0Jb3V0cHV0X2luaXRzX3RtcD0iJG1pYmRpci8ke21vZHVsZV90eXBlfV9pbml0cy5oIgotCWVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzX3RtcAotICAgICAgICAjIFhYWDogZXZlbiB3b3JzZSwgd2UgbG9vc2Ugd2hldGhlciB0aGUgaGVhZGVyIGlzIG5lZWRlZCBvciBub3QuCi0gICAgIAlvdXRwdXRfaGRyc190bXA9IiRtaWJkaXIvJHttb2R1bGVfdHlwZX1faW5jbHVkZXMuaCIKLSAgICAgICAgZWNobyAnI2luY2x1ZGUgIicibWliZ3JvdXAvJGkuaCInIicgPj4gJG91dHB1dF9oZHJzX3RtcAotICAgICAgZmkKLSAgICBkb25lCi0KLSAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgIyBtYWtlIHN1cmUgbW9kdWxlIHdhc24ndCBleHBsaWNpdGx5IGV4Y2x1ZGVkLCBvciBhbHJlYWR5IGFkZGVkCi0gICAgIwotICAgIGlmIHRlc3QgIngkZGJsZml4IiAhPSAieCIgOyB0aGVuCi0gICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgd2FzIGR1cGxpY2F0ZWQgLS0gcHV0dGluZyBpbnRvIG1haW4iKQotICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgd2FzIGV4Y2x1ZGVkIikKLSAgICBlbGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsOyB0aGVuCi0gICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGkgYWxyZWFkeSB0ZXN0ZWQiKQotICAgIGVsc2UKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBwcm9jZXNzIG1vZHVsZXMgaGVhZGVyLCBjaGVja2luZyBmb3IgY29uZmlnXyBwc2V1ZG8tbWFjcm9zCi0gICAgICAjCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgZG9lcyB0aGUgaGVhZGVyIGZpbGUgZm9yIHRoZSBtb2R1bGUgZXhpc3Q/Ci0gICAgICAjICAgbWFjcm9zIGFyZSBvbmx5IHByb2Nlc3NlZCBpZiBpdCBkb2VzCi0gICAgICBpZiB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5oOyB0aGVuCi0gICAgICAgIG5ld19saXN0PSIiCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgCSMgbWFjcm86IGNvbmZpZ19leGNsdWRlKG1vZHVsZXMpCi0gICAgICAJIyAgLSBsaXN0cyBjb25mbGljdHMgd2l0aCBvdGhlciBtb2R1bGVzCi0gICAgICAJIyAgICAtIEVHOiBuZXcgTUlCIGltcGxlbWVudGF0aW9ucyBleGNsdWRlIG9sZCBhbmQgdmljZS12ZXJzYQotICAgICAgCSMKLSAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IGNvbmZsaWN0cwotICAgICAgICAjCi0JbmV3X2xpc3RfZXhjbD1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfZXhjbHVkZSB8IHNlZCAncy8uKmNvbmZpZ19leGNsdWRlKFwoLipcKSkuKi9cMS8nYAotCWlmIHRlc3QgIngkbmV3X2xpc3RfZXhjbCIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiRpIGV4Y2x1ZGVzICRuZXdfbGlzdF9leGNsIikKLQkgIGZvciBqIGluICRuZXdfbGlzdF9leGNsCi0JICAgIGRvCi0JICAgIGlmIGVjaG8gIiAkbW9kdWxlX2xpc3QgJG5ld19taWJfbW9kdWxlX2xpc3QgJG5ld19saXN0X3R3byAiIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgICAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyBleGNsdWRlcyBtb2R1bGUgJyRqJyBidXQgYW5vdGhlciBtb2R1bGUgcmVxdWlyZXMgaXQiCi0gICAgICAgICAgICAgIEFDX01TR19XQVJOKFttaWIgbW9kdWxlIGVycm9yXSkKLSAgICAgICAgICAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotCSAgICAgICAgQUNfTVNHX0VSUk9SKFskbWliX2NmZ19tc2ddKQotICAgICAgICAgICAgICBlbHNlCi0JICAgICAgICBBQ19NU0dfV0FSTihbJG1pYl9jZmdfbXNnXSkKLSAgICAgICAgICAgICAgICBBQ19NU0dfQ0FDSEVfQUREKFsqKiogTUlCIE1vZHVsZSB3YXJuaW5nICoqKiAkbWliX2NmZ19tc2ddKQotICAgICAgICAgICAgICBmaQotCSAgICBlbHNlCi0JICAgICAgbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzPSIkaiAkbmV3X3dpdGhfb3V0X21pYl9tb2R1bGVzIgotICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiJGogYWRkZWQgdG8gZXhjbHVkZWQgbGlzdCIpCi0JICAgIGZpCi0JICBkb25lCi0JZmkKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAJIyBtYWNybzogY29uZmlnX2FyY2hfcmVxdWlyZShBUkNILG1vZHVsZXMpCi0gICAgICAJIyAgLSBsaXN0cyBtb2R1bGVzIHJlcXVpcmVkIGZvciBhIGdpdmVuIEFSQ0gKLSAgICAgICAgIwotICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHJlcXVpcmVtZW50cwotICAgICAgICAjCi0gICAgICAgIGNoYW5nZXF1b3RlKCwgKQotICAgICAgICBuZXdfbGlzdF9hcmNoPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19hcmNoX3JlcXVpcmUgfCBzZWQgJ3MvLipjb25maWdfYXJjaF9yZXF1aXJlKCAqXChbXiBdKlwpICosICpcKFteIF0qXCkgKikuKi9cMS14YXJjaHgtXDIvJ2AKLSAgICAgICAgY2hhbmdlcXVvdGUoWywgXSkKLQlpZiB0ZXN0ICJ4JG5ld19saXN0X2FyY2giICE9ICJ4IjsgdGhlbgotICAgICAgICAgIGZvciBqIGluICRuZXdfbGlzdF9hcmNoCi0JICAgIGRvCi0JICAgIGFyY2h0ZXN0PWBlY2hvICRqIHwgc2VkICdzLy14YXJjaHgtLiovLydgCi0JICAgICMgdGFyZ2V0X29zIG1heSBoYXZlIGJlZW4gY2hhbmdlZCB0byBhICNkZWZpbmUgb2YgMS4uLgotCSAgICBpZiB0ZXN0ICJ4JGFyY2h0ZXN0IiA9ICJ4MSIgLW8gIngkdGFyZ2V0X29zIiA9ICJ4JGFyY2h0ZXN0IiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gIngkYXJjaHRlc3QiOyB0aGVuCi0JICAgICAgbmV3X2xpc3Q9IiRuZXdfbGlzdCBgZWNobyAkaiB8IHNlZCAncy8uKi14YXJjaHgtLy8nYCIKLSAgICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAkaSByZXF1aXJlZCBhZGRpbmcgYXJjaCBmaWxlczogYGVjaG8gJGogfCBzZWQgJ3MvLioteGFyY2h4LS8vJ2AiKQotCSAgICBmaQotCSAgZG9uZQotCWZpCi0gICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgcmVxdWlyZWQgYXJjaCBmaWxlczogJG5ld19saXN0IikKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAJIyBtYWNybzogY29uZmlnX3JlcXVpcmUobW9kdWxlcykKLSAgICAgIAkjICAtIGxpc3RzIG1vZHVsZXMgcmVxdWlyZWQgZm9yIHRoaXMgbW9kdWxlCi0gICAgICAgICMKLSAgICAgICAgIyBjaGVjayBpZiAkaSBoYXMgYW55IG90aGVyIHJlcXVpcmVkIG1vZHVsZXMKLSAgICAgICAgIwotCW5ld19saXN0PSIkbmV3X2xpc3QgYCRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX3JlcXVpcmUgfCBzZWQgJ3MvLipjb25maWdfcmVxdWlyZShcKC4qXCkpLiovXDEvJ2AiCi0gICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgJGkgd2lsbCB0ZXN0OiAkbmV3X2xpc3QiKQotCWlmIHRlc3QgIngkbmV3X2xpc3QiICE9ICJ4IjsgdGhlbgotCSAgZm9yIGogaW4gJG5ld19saXN0Ci0JICAgIGRvCi0gICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygtbiAiICRpIHdhbnRzIHRvIGFkZCAkajogIikKLQkgICAgaWYgdGVzdCAhIC1mICRzcmNkaXIvJG1pYmRpci8kai5oIC1hICEgLWYgJHNyY2Rpci8kbWliZGlyLyRqLmM7IHRoZW4KLSAgICAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQotCSAgICAgIEFDX01TR19FUlJPUihbbWliIG1vZHVsZSAiJGkiIHJlcXVpcmVzIG1vZHVsZSAiJGoiIGJ1dCAkai5oIG9yICRqLmMgY291bGQgbm90IGJlIGZvdW5kIGluICRzcmNkaXIvJG1pYmRpcl0pCi0JICAgIGVsaWYgZWNobyAiICRuZXdfd2l0aF9vdXRfbWliX21vZHVsZXMgIiB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCi0JICAgICAgaWYgdGVzdCAieCRpIiAhPSAieGRlZmF1bHRfbW9kdWxlcyIgOyB0aGVuCi0gICAgICAgICAgICAgICAgbWliX2NmZ19tc2c9Im1pYiBtb2R1bGUgJyRpJyByZXF1aXJlcyBtb2R1bGUgJyRqJyBidXQgc29tZW9uZSB0b2xkIG1lIHRvIGNvbXBpbGUgd2l0aG91dCBpdCIKLSAgICAgICAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCi0gICAgICAgICAgICAgICAgaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgICAgICAgICAgICAgQUNfTVNHX0VSUk9SKFskbWliX2NmZ19tc2ddKQotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgIEFDX01TR19XQVJOKFskbWliX2NmZ19tc2ddKQotICAgICAgICAgICAgICAgICAgQUNfTVNHX0NBQ0hFX0FERChbKioqIE1JQiBNb2R1bGUgd2FybmluZyAqKiogJG1pYl9jZmdfbXNnXSkKLSAgICAgICAgICAgICAgICBmaQotIwkgICAgZWxpZiBlY2hvICIgJG1vZHVsZV9saXN0ICRuZXdfbGlzdF90d28gJG5ld19tb2R1bGVfbGlzdCAiIHwgZ3JlcCAiICRqICIgPiAvZGV2L251bGw7IHRoZW4KLSMgICAgICAgICAgICAgIEFDX01TR19NT0RVTEVfREJHKCIgICRqIGluY2x1ZGVkIHByZXZpb3VzbHkiKQotICAgICAgICAgICAgICBmaQotCSAgICBlbHNlCi0JICAgICAgbmV3X2xpc3RfdHdvPSIkbmV3X2xpc3RfdHdvICRqIgotICAgICAgICAgICAgICBBQ19NU0dfTU9EVUxFX0RCRygiICAkaiBpbmNsdWRlZCIpCi0JICAgIGZpCi0JICBkb25lCi0JZmkKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAJIyBtYWNybzogY29uZmlnX2FkZF9taWIoU09NRS1NSUIpCi0gICAgICAJIyAgLSBsaXN0cyBNSUJzIHRvIGJlIGFkZGVkIHRvIHRoZSBkZWZhdWx0IHRvLWxvYWQgbGlzdC4KLSAgICAgICAgIwotICAgICAgICAjIGNoZWNrIGlmICRpIGhhcyBhbnkgbWlicyB0byBhZGQKLSAgICAgICAgIwotCW5ld19taWJzPWAkTU9EVUxFQ1BQIG1vZHVsZV90bXBfaGVhZGVyLmggfCBncmVwIGNvbmZpZ19hZGRfbWliIHwgc2VkICdzLy4qY29uZmlnX2FkZF9taWIoXCguKlwpKS4qL1wxLydgCi0JaWYgdGVzdCAieCRuZXdfbWlicyIgIT0gIngiOyB0aGVuCi0JICAgIGZvciBqIGluICRuZXdfbWlicwotCQlkbwotCQlpZiB0ZXN0ICJ4YGVjaG8gOiRkZWZhdWx0X21pYnM6IHwgZ3JlcCA6JGo6YCIgPSAieCI7IHRoZW4KLQkJICAgIGRlZmF1bHRfbWlicz0iJGRlZmF1bHRfbWliczokaiIKLQkJZmkKLQkJaWYgdGVzdCAtZiAkc3JjZGlyL21pYnMvJGoudHh0OyB0aGVuCi0JCSAgICBpZiBlY2hvICRkZWZhdWx0X21pYnNfaW5zdGFsbCB8IGdyZXAgIiAkaiAiID4gL2Rldi9udWxsOyB0aGVuCi0JCQkgICAgOgotCQkgICAgZWxzZQotCQkJICAgIGRlZmF1bHRfbWlic19pbnN0YWxsPSIkZGVmYXVsdF9taWJzX2luc3RhbGwgJGoudHh0IgotCQkgICAgZmkKLQkJZmkKLQkgICAgZG9uZQotCWZpICMgbmV3IG1pYnMKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAjIGFkZCB0aGUgY3VycmVudCBtb2R1bGUgdG8gdGhlIGxpc3Qgb2Ygc3R1ZmYgdG8gY29tcGlsZSwgZXRjLgotICAgICAgICAjCi0gICAgICAgICMgYWRkICRpIHRvIG1vZHVsZSBsaXN0Ci0gICAgICAgICMKLSAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGkgYWRkZWQgKGJhc2VkIG9uICRpLmgpIikKLSAgICAgICAgbW9kdWxlX2xpc3Q9IiRtb2R1bGVfbGlzdCAkaSIKLSAgICAgICAgZXZhbCAke21vZHVsZV90eXBlfV9saXN0PSJcIlwkJHttb2R1bGVfdHlwZX1fbGlzdCAkaVwiIgotCi0JZWNobyAicmVhZF9jb25maWcubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtb2R1bGVfbGlzdF9kZXBzCi0JaWYgdGVzdCAkbW9kdWxlX3R5cGUgPSAiYWdlbnRfbW9kdWxlIiA7IHRoZW4KLSAJICAgIGVjaG8gInNubXBfdmFycy5sbzogbWliZ3JvdXAvJGkuaCIgPj4gJGFnZW50X21vZHVsZV9saXN0X2RlcHMKLSAgICAgICAgZWxzZQotIAkgICAgZWNobyAibWliX21vZHVsZXMubG86IG1pYmdyb3VwLyRpLmgiID4+ICRtaWJfbW9kdWxlX2xpc3RfZGVwcwotICAgICAgICBmaQotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICMgY2hlY2sgZm9yIHVuc3VwcG9ydGVkIGNvbmZpZ19sb2FkX21pYgotICAgICAgICAjCi0gICAgICAgIGlmICRNT0RVTEVDUFAgbW9kdWxlX3RtcF9oZWFkZXIuaCB8IGdyZXAgY29uZmlnX2xvYWRfbWliID4gL2Rldi9udWxsIDI+JjE7IHRoZW4KLSAgICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCi0gICAgICAJICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSAiJGkiIHVzZXMgdGhlICJjb25maWdfbG9hZF9taWIiIGRpcmVjdGl2ZSwgd2hpY2ggaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4gIEl0IHByb2JhYmx5IHdvbid0IHdvcmsuXSkKLSAgICAgICAgZmkgIyBncmVwIGNvbmZpZ19sb2FkX21pYgotCi0gICAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgICMgY2hlY2sgZm9yIGNvbmZpZ19wYXJzZV9kb3RfY29uZgotICAgICAgICAjICAoZ2VuZXJhbGx5IG5vdCB1c2VkIGFueSBsb25nZXI7IG9sZCBhdXRvLWxvYWQgYSAuY29uZiB0b2tlbikKLSAgICAgICAgIwotICAgICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgICAgJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfcGFyc2VfZG90X2NvbmYgfCBzZWQgJ3NALipjb25maWdfcGFyc2VfZG90X2NvbmYoXChbXildKlwpLCAqXChbXiksXSpcKSwgKlwoW14pLF0qXCksICpcKFteKSxdKlwpKS4qQHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wZCIsXDEsIFwyLCBcMywgXDQpO0AnID4+ICRtaWJkaXIvbWliX21vZHVsZV9kb3RfY29uZi5oCi0JY2hhbmdlcXVvdGUoWywgXSkKLQotICAgICAgICAjLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAJIyBtYWNybzogY29uZmlnX2Vycm9yKGVycm9yIHRleHQpCi0gICAgICAJIyAgLSB1c2VkIHRvIHNpZ25hbCBhIGNvbmZpZ3VyYXRpb24gZXJyb3IgZnJvbSBhIG1vZHVsZQotICAgICAgICAjCi0gICAgICAgICMgY2hlY2sgaWYgJGkgaGFzIGFueSBlcnJvcnMsIG9yIHdhcm5pbmdzCi0gICAgICAgICMKLQllcnJvcj1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfZXJyb3IgfCBzZWQgJ3MvLipjb25maWdfZXJyb3IoXCguKlwpKS4qL1wxLydgCi0JaWYgdGVzdCAieCRlcnJvciIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgZWNobwotICAgICAgICAgIGVjaG8KLSAgICAgICAgICBBQ19NU0dfRVJST1IoWyRpOiAqKiogJGVycm9yICoqKl0pCi0gICAgICAgIGZpCi0KLSAgICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgCSMgbWFjcm86IGNvbmZpZ193YXJuaW5nKHdhcm5pbmcgdGV4dCkKLSAgICAgIAkjICAtIHVzZWQgdG8gc2lnbmFsIGEgY29uZmlndXJhdGlvbiAid2FybmluZyIgdG8gYmUgcHJpbnRlZCB0byB0aGUgdXNlcgotICAgICAgICAjCi0Jd2FybmluZz1gJE1PRFVMRUNQUCBtb2R1bGVfdG1wX2hlYWRlci5oIHwgZ3JlcCBjb25maWdfd2FybmluZyB8IHNlZCAncy8uKmNvbmZpZ193YXJuaW5nKFwoLipcKSkuKi9cMS8nYAotCWlmIHRlc3QgIngkd2FybmluZyIgIT0gIngiOyB0aGVuCi0gICAgICAgICAgYWxsX3dhcm5pbmdzPSIkYWxsX3dhcm5pbmdzICR3YXJuaW5nCi0iCi0gICAgICAgIGZpCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgQ2hlY2sgZm9yIGEgLmMgZmlsZSBpZiB0aGUgLmggZGlkbid0IGV4aXN0Ci0gICAgICAjCi0gICAgICBlbGlmIHRlc3QgLWYgJHNyY2Rpci8kbWliZGlyLyRpLmM7IHRoZW4KLSAgICAgICAgaWYgZWNobyAiICRtb2R1bGVfbGlzdCAkbmV3X2xpc3RfdHdvICRuZXdfbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiAkaSAgICAgICIgPiAvZGV2L251bGw7IHRoZW4KLSAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGkgYWxyZWFkeSBpbmNsdWRlZCIpCi0gICAgICAgIGVsc2UKLSAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoIiAgJGkgYWRkZWQgKGJhc2VkIG9uICRpLmMpIikKLQkgICBtb2R1bGVfbGlzdD0iJG1vZHVsZV9saXN0ICRpIgotCSAgIG1pYl9tb2R1bGVfbGlzdD0iJG1pYl9tb2R1bGVfbGlzdCAkaSIKLSAgICAgICAgZmkKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgIyBObyAuaCBvciAuYyA9IGVycm9yISAgKHR5cG8/KQotICAgICAgIwotICAgICAgZWxzZSAjIG5vICRpLmggb3IgJGkuYwotICAgICAgICBBQ19NU0dfV0FSTihbbWliIG1vZHVsZSBlcnJvcl0pCi0JQUNfTVNHX0VSUk9SKFttb2R1bGUgZmlsZXMgJGkuaCBvciAkaS5jIGNvdWxkIG5vdCBiZSBmb3VuZCBpbiAkc3JjZGlyLyRtaWJkaXJdKQotICAgICAgZmkgIyBubyAkaS5oCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIGNoZWNrIGZvciBpbml0L3NodXRkb3duIHJvdXRpbmVzIHRvbwotICAgICAgIwotICAgICAgaGFzX2NfY29kZT1ubwotICAgICAgaWYgdGVzdCAtZiAkc3JjZGlyLyRtaWJkaXIvJGkuYzsgdGhlbgotICAgICAgICBpZiB0ZXN0ICJ4JG91dHB1dF90byIgPSAieG5vcm1hbCIgOyB0aGVuCi0JICBlY2hvICIJJGkgXFwiID4+ICRtb2R1bGVfbGlzdF9jb2RlCi0gIAkgIGVjaG8gJEVDSE9fTiAiICRpIiAkRUNIT19DID4+ICRNT0RVTEVfTElTVAotICAgICAgICAgIGV2YWwgdG1wZmlsZXZhcj1cJGBlY2hvICR7bW9kdWxlX3R5cGV9X2xpc3RfY29kZWAKLSAgICAgICAgICBlY2hvICIJJGkgXFwiID4+ICR0bXBmaWxldmFyCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBldmFsICJkbF8ke2RsX25hbWV9X2ZpbGVzPVwiXCRkbF8ke2RsX25hbWV9X2ZpbGVzICRpXCIiCi0gICAgICAgICAgc2F2ZWRfc3VibGlzdF9jb2RlPSIkc2F2ZWRfc3VibGlzdF9jb2RlICRpIgotICAgICAgICBmaQotICAgICAgICBtbm09YGVjaG8gJGkgfCBzZWQgJ3MvLipcLy8vO3MvXC5jJC8vOydgCi0gICAgICAgIEFDX01TR19NT0RVTEVfREJHKC1lICJcbmNoZWNraW5nICckc3JjZGlyLyRtaWJkaXIvJGkuYycgKCRtbm0vYGJhc2VuYW1lICRpYCkgQyBmaWxlIGZvciBpbml0L3NodXRkb3duIikKLSAgICAgICAgaWYgdGVzdCAieCRtbm0iICE9ICJ4YGJhc2VuYW1lICRpYCI7IHRoZW4KLSAgICAgICAgICAgQUNfTVNHX1dBUk4oW21pYiBtb2R1bGUgZXJyb3JdKQotCSAgIEFDX01TR19FUlJPUihbY29uZmxpY3RpbmcgbmFtZXM6ICRtbm0gIT0gYGJhc2VuYW1lICRpYF0pCi0gICAgICAgIGZpCi0gICAgICAgIHRlbXBfaW5pdD1gZ3JlcCBpbml0XyRtbm0gJHNyY2Rpci8kbWliZGlyLyRpLmMgfCBncmVwIC12IF9pbml0XyRtbm1gCi0JaWYgdGVzdCAieCR0ZW1wX2luaXQiICE9ICJ4IjsgdGhlbgotICAgICAgICAgICAgQUNfTVNHX01PRFVMRV9EQkcoLWUgImFkZGluZyBpbml0XyRtbm0oKSB0byBsaXN0IikKLSAgICAgICAgICAgIG5lZWRfaGVhZGVyPTEKLQkgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBpbml0XyRtbm0oKTsiID4+ICRvdXRwdXRfaW5pdHMKLQlmaQotCWdyZXAgc2h1dGRvd25fJG1ubSAkc3JjZGlyLyRtaWJkaXIvJGkuYyA+IC9kZXYvbnVsbAotICAgICAgICBpZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAkbW9kdWxlX2RlYnVnIC1lcSAxOyB0aGVuCi0gICAgICAgICAgICAgIGVjaG8gLWUgIlxuYWRkaW5nIHNodXRkb3duXyRtbm0oKSB0byBsaXN0IgotICAgICAgICAgICAgZmkKLSAgICAgICAgICAgIG5lZWRfaGVhZGVyPTEKLQkgICAgZWNobyAiICBpZiAoc2hvdWxkX2luaXQoXCIkbW5tXCIpKSBzaHV0ZG93bl8kbW5tKCk7IiA+PiAkbWliZGlyLyR7bW9kdWxlX3R5cGV9X3NodXRkb3duLmgKLQlmaQotICAgICAgZmkgIyB0ZXN0IC1mICRzcmNkaXIvJG1pYmRpci8kaS5jCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIGlmIHRoZXJlIGlzIGEgc2h1dGRvd24vaW5pdCBsaXN0LAotICAgICAgIwotICAgICAgaWYgdGVzdCAkbmVlZF9oZWFkZXIgLWVxIDEgOyB0aGVuCi0gICAgICAgICBlY2hvICcjaW5jbHVkZSAiJyJtaWJncm91cC8kaS5oIiciJyA+PiAkb3V0cHV0X2hkcnMKLSAgICAgIGVsc2UKLSAgICAgICAgIGVjaG8gJy8qI2luY2x1ZGUgIicibWliZ3JvdXAvJGkuaCInIiovJyA+PiAkb3V0cHV0X2hkcnMKLSAgICAgIGZpCi0KLSAgICAgICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAjIGNoZWNrIGZvciBvdXRwdXQgZGlyZWN0b3J5IChmb3IgYnVpbGRpbmcgb3V0c2lkZSBvZiBzb3VyY2UgdHJlZQotICAgICAgIwotICAgICAgY2hhbmdlcXVvdGUoLCApCi0gICAgICBpZiB0ZXN0ICJ4YGVjaG8gJGkgfCBzZWQgJ3MvXC8vL2c7J2AiICE9ICJ4JGkiOyB0aGVuCi0JbW5kPWBlY2hvICRpIHwgc2VkICdzL1wvW14vXSokLy87J2AKLQlpZiB0ZXN0ICEgLWQgLi8kbWliZGlyLyRtbmQ7IHRoZW4KLQkgICAgbW9kdWxlX2RpcmVjdG9yaWVzPSIkbW9kdWxlX2RpcmVjdG9yaWVzIC4vJG1pYmRpci8kbW5kIgotCWZpCi0gICAgICBmaSAjIG1vZHVsZSBkaXJlY3RvcnkgdGVzdAotICAgICAgY2hhbmdlcXVvdGUoWywgXSkKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICMgZGVmaW5lIFVTSU5HXypfTU9EVUxFCi0gICAgICAjCi0gICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgIHN5bT0iYGVjaG8gJHtpfSB8IHNlZCAncy9bXmEtekEtWjAtOV9dL18vZycgfCB0ciAnYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXonICdBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWidgIgotICAgICAgY2hhbmdlcXVvdGUoWywgXSkKLSAgICAgIGVjaG8gIi8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgJHtpfSBtb2R1bGUgZmlsZXMuICAqLyIgPj4gaW5jbHVkZS9uZXQtc25tcC9hZ2VudC8ke21vZHVsZV90eXBlfV9jb25maWcuaAotICAgICAgZWNobyAiI2RlZmluZSBVU0lOR18ke3N5bX1fTU9EVUxFIDEiID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKLSAgICAgIGVjaG8gIiAiID4+IGluY2x1ZGUvbmV0LXNubXAvYWdlbnQvJHttb2R1bGVfdHlwZX1fY29uZmlnLmgKLQotICAgICAgIy0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgIGVjaG8gJEVDSE9fTiAiICRpJEVDSE9fQyIKLSAgICBmaSAjCi0gICAgZG9uZSAjIGZvciBpIGluICRtb2R1bGVfc3VibGlzdAotCi0gICAgaWYgdGVzdCAiJG91dHB1dF90byIgPSAic2VwYXJhdGUiIDsgdGhlbgotICAgICAgaWYgdGVzdCAieCRuZXdfbGlzdF90d28iID0gIngiIDsgdGhlbgotICAgICAgICAjIG5vIG5ldyBzdWItbW9kdWxlcyB0byBhZGQgdG8gdGhlIGN1cnJlbnQgdGFyZ2V0Ci0gICAgICAgIG91dHB1dF90bz0ibm9ybWFsIgotCi0gICAgICAgIGRsbGNsZWFucz0iJHNhdmVkX3N1Ymxpc3RfbyAkZGxsY2xlYW5zIgotICAgICAgICBvdXRwdXRfaW5pdHM9IiIKLSAgICAgICAgbW9kdWxlX3N1Ymxpc3Q9IiIKLSAgICAgIGVsc2UKLSAgICAgICAgIyBhIG1vZHVsZSBoYWQgc3ViLW1vZHVsZXMgcmVxdWlyZWQ7IGtlZXAgZ29pbicKLSAgICAgICAgc2F2ZWRfc3VibGlzdD0iJHNhdmVkX3N1Ymxpc3QgJG1vZHVsZV9zdWJsaXN0IgotICAgICAgICBtb2R1bGVfc3VibGlzdD0iJG5ld19saXN0X3R3byIKLSAgICAgICAgbmV3X2xpc3RfdHdvPSIiCi0gICAgICBmaQotICAgIGVsc2UKLSAgICAgIG1vZHVsZV9zdWJsaXN0PSIiCi0gICAgZmkKLQotICAgIGRvbmUgIyB3aGlsZSBtb2R1bGVfc3VibGlzdAotICBkb25lICMgZm9yIGogaW4gJG5ld19tb2R1bGVfbGlzdAotCi0gICMgcmVtZW1iZXIgdGhlIHRvcCBsZXZlbCBtb2R1bGVzIGZvciBsYXRlciByZXBvcnRpbmcKLSAgaWYgdGVzdCAkZmlyc3RfcGFzcyA9IDEgOyB0aGVuCi0gICAgIyByZW1lbWJlciB0aGlzIGxpc3QgZm9yIGxhdGVyIHJlcG9ydGluZwotICAgIHRvcF9sZXZlbF9tb2R1bGVzPSIkbmV3X21vZHVsZV9saXN0ID0+ICRuZXdfbGlzdF90d28iCi0gICAgZmlyc3RfcGFzcz0wCi0gIGZpCi0gICMtLS0tLS0tLS0tLS0tLS0tLS0tCi0gICMgaWYgJGkgYWRkZWQgbmV3IG1vZHVsZXMgdmlzIGNvbmZpZ18qLAotICAjIGNoZWNrIHRob3NlIG1vZHVsZXMgZm9yIHJlcXVpcmVtZW50cyB0b28KLSAgIwotICAjIHRyYW5zZmVyIHRoZSBuZXcgbW9kdWxlIHRvIGNoZWNrIGxpc3QgdG8gdGhlIG5vcm1hbCB2YXJpYWJsZQotICAjCi0gIGlmIHRlc3QgIngkbmV3X2xpc3RfdHdvIiA7IHRoZW4KLSAgICBvdXRwdXRfdG89bm9ybWFsCi0gIGZpCi0gIG5ld19tb2R1bGVfbGlzdD0iJG5ld19saXN0X3R3byIKLSAgbmV3X2xpc3RfdHdvPSIiCi1kb25lICMgd2hpbGUgdGVzdCAieCRuZXdfbW9kdWxlX2xpc3QiICE9ICJ4IjsgZG8KLWVjaG8gIiIKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jIGNvbnN0cnVjdCB0aGUgZGxsIGNvZGUgZmlsZXMgYW5kIG1ha2UgcnVsZXMuICBUaGlzIGNhbid0IGJlIGRvbmUKLSMgdW50aWwgbm93IGJlY2F1c2UgZHVwbGljYXRlIHVzZSBvZiBhIG1vZHVsZSBtZWFucyBpdCBnZXRzIHJlbW92ZWQKLSMgZnJvbSB0aGUgZGxsIGFuZCBwdXQgaW50byB0aGUgbWFpbiBhZ2VudC4KLSMKLWZvciBpIGluICRkbF9uYW1lcyA7IGRvCi0gIGV2YWwgbW9kX2ZpbGVzPSJcIlwkZGxfJHtpfV9maWxlc1wiIgotICBlY2hvICJjb21wb25lbnRzIGluIHRoZSAkaSBkbGw6ICRtb2RfZmlsZXMiCi0KLSAgb3V0cHV0X2luaXRzPSJhZ2VudC9taWJncm91cC8ke2l9LWRsbC5jIgotICBvdXRwdXRfaGRycz0iYWdlbnQvbWliZ3JvdXAvJHtpfS1oZHJzLmgiCi0KLSAgQUNfTVNHX01PRFVMRV9EQkcoImNyZWF0aW5nIGRsbCBmaWxlOiAkb3V0cHV0X2luaXRzIikKLSAgZm9yIG9maWxlIGluICRvdXRwdXRfaW5pdHMgJG91dHB1dF9oZHJzIDsgZG8KLSAgICBpZiB0ZXN0IC1mICRvZmlsZSA7IHRoZW4KLSAgICAgIGlmIGdyZXAgInRoaXMgZmlsZSBjcmVhdGVkIGF1dG9tYXRpY2FsbHkgYnkgY29uZmlndXJlIiAkb2ZpbGUgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KLSAgCToKLSAgICAgIGVsc2UKLSAgCUFDX01TR19FUlJPUihbJG9maWxlIGFscmVhZHkgZXhpc3RlZCA7IGNhbid0IGJ1aWxkIGRsbCBvYmplY3QgJGldKQotICAgICAgZmkKLSAgICBmaQotICAgIGNhdCA+ICRvZmlsZSA8PCBFT0ZJRgotLyogeERvIG5vdCBlZGl0OyB0aGlzIGZpbGUgY3JlYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IGNvbmZpZ3VyZSAqLwotRU9GSUYKLSAgZG9uZQotCi0gIGNhdCA+PiAkb3V0cHV0X2luaXRzIDw8IEVPRk9DCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgotI2luY2x1ZGUgIiR7aX0taGRycy5oIgotdm9pZAotaW5pdF8kaSh2b2lkKSB7Ci1FT0ZPQwotCi0gICMgY3JlYXRlIHRoZSAuc28gcnVsZQotICBzYXZlZF9zdWJsaXN0X289YGVjaG8gIiRtb2RfZmlsZXMgIiB8IHNlZCAncy9eICovL2c7cy8gICovLm8gL2c7J2AKLQotICAjIGNyZWF0ZSB0aGUgcnVsZXMgZm9yIGVhY2ggb2JqZWN0Ci0gIGZvciBqIGluICRtb2RfZmlsZXMgOyBkbwotICAgIGNhdCA+PiAkbW9kdWxlX3J1bGVzIDw8IEVPRlIKLSRqLm86ICRqLmMKLQlcJChDQykgLWMgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAIFwkPAotCi1FT0ZSCi0gICAgbW5tPWBlY2hvICRqIHwgc2VkICdzLy4qXC8vLztzL1wuYyQvLzsnYAotICAgIGVjaG8gIiAgaWYgKHNob3VsZF9pbml0KFwiJG1ubVwiKSkgaW5pdF8kbW5tKCk7IiA+PiAkb3V0cHV0X2luaXRzCi0gIGRvbmUKLQotICAjIGNyZWF0ZSB0aGUgcnVsZSBmb3IgdGhlIC5zbyBhbmQgd3JhcHBlciBjb2RlCi0gIGNhdCA+PiAkbW9kdWxlX3J1bGVzIDw8IEVPRk0KLSR7aX0tZGxsLm86ICR7aX0tZGxsLmMKLQlcJChDQykgLWMgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAIFwkPAotCi0ke2l9LnNvOiAkc2F2ZWRfc3VibGlzdF9vICR7aX0tZGxsLm8KLQlcJChDQykgXCQoQ1BQRkxBR1MpIFwkKENGTEFHUykgXCQoRExGTEFHUykgLW8gXCRAICRzYXZlZF9zdWJsaXN0X28gJHtpfS1kbGwubwotCi1FT0ZNCi0gICAgICAgIGNhdCA+PiAkb3V0cHV0X2luaXRzIDw8IEVPRk9DRklOCi19Ci1FT0ZPQ0ZJTgotCi1kb25lCi0KLSMgY2xlYW51cAotcm0gLWYgbW9kdWxlX3RtcF9oZWFkZXIuaAotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBidWlsZCBtb2R1bGUgbGlzdHMgZm9yIE1ha2VmaWxlcwotIwotY2hhbmdlcXVvdGUoLCApCi0KLWZvciBpIGluIG1vZHVsZV9saXN0X28gbW9kdWxlX2xpc3RfYyBtb2R1bGVfbGlzdF9sbyBtaWJfbW9kdWxlX2xpc3RfbyBtaWJfbW9kdWxlX2xpc3RfYyBtaWJfbW9kdWxlX2xpc3RfbG8gbWliZ3JvdXBfbGlzdF9vIG1pYmdyb3VwX2xpc3RfbG8gYWdlbnRfbW9kdWxlX2xpc3RfbyBhZ2VudF9tb2R1bGVfbGlzdF9jIGFnZW50X21vZHVsZV9saXN0X2xvIGFnZW50Z3JvdXBfbGlzdF9vIGFnZW50Z3JvdXBfbGlzdF9sbyA7IGRvCi0gIGV2YWwgIiRpPW1rLyR7aX0ubWsiCi1kb25lCi0KLXNlZCAncy9ebW9kdWxlX2xpc3RfY29kZS9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbW9kdWxlX2xpc3RfY29kZSAgPiAkbW9kdWxlX2xpc3Rfbwotc2VkICdzL15tb2R1bGVfbGlzdF9jb2RlL21vZHVsZV9saXN0X2MvO3MvXChbXj1dXCkgICpcXC9cMS5jIFxcL2cnICA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9jCi1zZWQgJ3MvXm1vZHVsZV9saXN0X2NvZGUvbW9kdWxlX2xpc3RfbG8vO3MvXChbXj1dXCkgICpcXC9cMS5sbyBcXC9nJyA8ICRtb2R1bGVfbGlzdF9jb2RlICA+ICRtb2R1bGVfbGlzdF9sbwotCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9vLztzL1woW149XVwpICAqXFwvXDEubyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9vCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkbWliX21vZHVsZV9saXN0X2NvZGUgID4gJG1pYl9tb2R1bGVfbGlzdF9jCi1zZWQgJ3MvXm1pYl9tb2R1bGVfbGlzdF9jb2RlL21pYl9tb2R1bGVfbGlzdF9sby87cy9cKFtePV1cKSAgKlxcL1wxLmxvIFxcL2cnIDwgJG1pYl9tb2R1bGVfbGlzdF9jb2RlICA+ICRtaWJfbW9kdWxlX2xpc3RfbG8KLQotc2VkICdzL15taWJfbW9kdWxlX2xpc3Rfby9taWJncm91cF9saXN0X28vO3NAXChbXiAJXSpcKVwub0BtaWJncm91cC9cMS5vQGcnIDwgJG1pYl9tb2R1bGVfbGlzdF9vID4gJG1pYmdyb3VwX2xpc3Rfbwotc2VkICdzL15taWJfbW9kdWxlX2xpc3RfbG8vbWliZ3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRtaWJfbW9kdWxlX2xpc3RfbG8gPiAkbWliZ3JvdXBfbGlzdF9sbwotCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2NvZGUvYWdlbnRfbW9kdWxlX2xpc3Rfby87cy9cKFtePV1cKSAgKlxcL1wxLm8gXFwvZycgIDwgJGFnZW50X21vZHVsZV9saXN0X2NvZGUgID4gJGFnZW50X21vZHVsZV9saXN0X28KLXNlZCAncy9eYWdlbnRfbW9kdWxlX2xpc3RfY29kZS9hZ2VudF9tb2R1bGVfbGlzdF9jLztzL1woW149XVwpICAqXFwvXDEuYyBcXC9nJyAgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfYwotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9jb2RlL2FnZW50X21vZHVsZV9saXN0X2xvLztzL1woW149XVwpICAqXFwvXDEubG8gXFwvZycgPCAkYWdlbnRfbW9kdWxlX2xpc3RfY29kZSAgPiAkYWdlbnRfbW9kdWxlX2xpc3RfbG8KLQotc2VkICdzL15hZ2VudF9tb2R1bGVfbGlzdF9vL2FnZW50Z3JvdXBfbGlzdF9vLztzQFwoW14gCV0qXClcLm9AbWliZ3JvdXAvXDEub0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9vID4gJGFnZW50Z3JvdXBfbGlzdF9vCi1zZWQgJ3MvXmFnZW50X21vZHVsZV9saXN0X2xvL2FnZW50Z3JvdXBfbGlzdF9sby87c0BcKFteIAldKlwpXC5sb0BtaWJncm91cC9cMS5sb0BnJyA8ICRhZ2VudF9tb2R1bGVfbGlzdF9sbyA+ICRhZ2VudGdyb3VwX2xpc3RfbG8KLQotZm9yIGkgaW4gbW9kdWxlX2xpc3RfbyBtb2R1bGVfbGlzdF9jIG1vZHVsZV9saXN0X2xvIG1pYl9tb2R1bGVfbGlzdF9vIG1pYl9tb2R1bGVfbGlzdF9jIG1pYl9tb2R1bGVfbGlzdF9sbyBtaWJncm91cF9saXN0X28gbWliZ3JvdXBfbGlzdF9sbyBhZ2VudF9tb2R1bGVfbGlzdF9vIGFnZW50X21vZHVsZV9saXN0X2MgYWdlbnRfbW9kdWxlX2xpc3RfbG8gYWdlbnRncm91cF9saXN0X28gYWdlbnRncm91cF9saXN0X2xvIDsgZG8KLQkjIGhwdXggbWFrZSAoYXQgbGVhc3QpIGRvZXNuJ3QgbGlrZSBhIHRyYWlsaW5nIFwgb24gdGhlIGxhc3QKLQkjIGxpbmUgZXZlbiB3aGVuIHRoZSBuZXh0IGxpbmUgY29udGFpbnMgbm90aGluZyBidXQKLQkjIHdoaXRlc3BhY2UuCi0JbGFzdHRva2VuPWB0YWlsIC0xIG1rLyRpLm1rIHwgYXdrICd7cHJpbnQgJDF9J2AKLQlzZWQgInMjJGxhc3R0b2tlbiBcXFxcIyRsYXN0dG9rZW4jIiA8IG1rLyRpLm1rID4gbWsvJGkubWsudG1wCi0JbXYgbWsvJGkubWsudG1wIG1rLyRpLm1rCi0KLQkjIGFkZCBhIGNsb3NpbmcgY29tbWVudAotCWVjaG8gIiIgPj4gbWsvJGkubWsKLQllY2hvICIjIGVuZCBjb25maWd1cmUgZ2VuZXJhdGVkIGNvZGUiID4+IG1rLyRpLm1rCi1kb25lCi0KLWNoYW5nZXF1b3RlKFssIF0pCi0KLWlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgotICAgZWNobyAtZSAiXG5GaW5hbCBtb2R1bGUgbGlzdDogJG1vZHVsZV9saXN0X2NvZGUiCi0gICBleGl0Ci1maQotaWYgdGVzdCAieCR3aXRoX21pYl9jZmdfY2hlY2tzIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19NU0dfQ0FDSEVfQUREKFtBZ2VudCBNb2R1bGUgbGlzdDogJG1vZHVsZV9saXN0X2NvZGVdKQotZmkKLUFDX1NVQlNUX0ZJTEUoTU9EVUxFX0xJU1QpCi1BQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2MpCi1BQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X28pCi1BQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2xvKQotQUNfU1VCU1RfRklMRShtaWJfbW9kdWxlX2xpc3RfYykKLUFDX1NVQlNUX0ZJTEUobWliX21vZHVsZV9saXN0X28pCi1BQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9sbykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfYykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfbykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3RfbG8pCi1BQ19TVUJTVF9GSUxFKG1pYmdyb3VwX2xpc3RfbykKLUFDX1NVQlNUX0ZJTEUobWliZ3JvdXBfbGlzdF9sbykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRncm91cF9saXN0X28pCi1BQ19TVUJTVF9GSUxFKGFnZW50Z3JvdXBfbGlzdF9sbykKLUFDX1NVQlNUX0ZJTEUoYWdlbnRfbW9kdWxlX2xpc3QpCi0KLSNBQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdCkKLSNBQ19TVUJTVChtb2R1bGVfbGlzdCkKLUFDX1NVQlNUKGRlZmF1bHRfbWlic19pbnN0YWxsKQotQUNfU1VCU1QoZGxsY2xlYW5zKQotQUNfU1VCU1RfRklMRShtb2R1bGVfcnVsZXMpCi1BQ19TVUJTVF9GSUxFKG1vZHVsZV9saXN0X2RlcHMpCi1BQ19TVUJTVF9GSUxFKG1pYl9tb2R1bGVfbGlzdF9kZXBzKQotQUNfU1VCU1RfRklMRShhZ2VudF9tb2R1bGVfbGlzdF9kZXBzKQotCi1BQ19NU0dfUkVTVUxUKC4pCi0KLWlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyAtZXEgMTsgdGhlbgotQUNfTVNHX0NBQ0hFX0FERChBZ2VudCBNSUIgY29kZTogICAgICAgICAgICAkbW9kdWxlX2xpc3QpCi1maQotQUNfTVNHX0NBQ0hFX0FERChBZ2VudCBNSUIgY29kZTogICAgICAgICAgICAkdG9wX2xldmVsX21vZHVsZXMpCi0KLSMgZW5kIGhhaXJ5IGFnZW50IG1vZHVsZSBwcm9jZXNzaW5nCi0KLUFDX01TR19DSEVDS0lORyhbaWYgZGlyZWN0b3JpZXMgbmVlZCB0byBiZSBjcmVhdGVkXSkKLWZvciBpIGluICRtb2R1bGVfZGlyZWN0b3JpZXM7IGRvCi0gICRzcmNkaXIvbWtpbnN0YWxsZGlycyAkaQotZG9uZQotQUNfTVNHX1JFU1VMVCguKQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBEZWZpbmUgZGVmYXVsdCBtaWJzCi0jCi1BQ19NU0dfQ0hFQ0tJTkcoW2RlZmF1bHQgbWliIGZpbGVzIHRvIHJlYWRdKQotaWYgdGVzdCAieCRORVRTTk1QX0RFRkFVTFRfTUlCUyIgPSAieCI7IHRoZW4KLSAgTkVUU05NUF9ERUZBVUxUX01JQlM9IiRkZWZhdWx0X21pYnMiCi1maQotaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyIgLW8gIngkUEFSVElBTFRBUkdFVE9TIiA9ICJ4Y3lnd2luIjsgdGhlbgotICAjIG1pbmd3MzIgYW5kIGN5Z3dpbiB1c2UgJzsnIGFzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXBhcmF0b3IgY2hhcgotICBFTlZfU0VQQVJBVE9SPSI7IgotICBORVRTTk1QX0RFRkFVTFRfTUlCUz1gZWNobyAiJE5FVFNOTVBfREVGQVVMVF9NSUJTIiB8IHNlZCAncy86LzsvZydgCi0gIGRlZmF1bHRfbWlicz1gZWNobyAiJGRlZmF1bHRfbWlicyIgfCBzZWQgJ3MvOi87L2cnYAotZWxzZQotICBFTlZfU0VQQVJBVE9SPSI6IgotZmkKLUFDX1NVQlNUKEVOVl9TRVBBUkFUT1IpCi1BQ19ERUZJTkVfVU5RVU9URUQoTkVUU05NUF9ERUZBVUxUX01JQlMsIiRORVRTTk1QX0RFRkFVTFRfTUlCUyIpCi1BQ19TVUJTVChORVRTTk1QX0RFRkFVTFRfTUlCUykKLUFDX01TR19SRVNVTFQoJE5FVFNOTVBfREVGQVVMVF9NSUJTKQotCi1BQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgd2UgaGF2ZSB0byBidWlsZCBQSUMgY29kZV0pCi1lY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgdWNkLXNubXAvZGxtb2QgIiA+L2Rldi9udWxsCi1pZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotICAgICAgICBMSUJfQ0ZMQUdTPSIkTElCX0NGTEFHUyAkU0hMSUJfQ0ZMQUdTIgotCUFDX01TR19SRVNVTFQoeWVzKQotZWxzZQotCURMTElCUz0iIgotCUFDX01TR19SRVNVTFQobm8pCi1maQotCi0jCi0jIENoZWNrIGZvciBrZXJuZWwgbG9jYXRpb24KLSMKLQotQUNfQ0FDSEVfQ0hFQ0soZm9yIGxvY2F0aW9uIG9mIHN5c3RlbSBrZXJuZWwsYWNfY3ZfS0VSTkVMX0xPQywKLVthY19jdl9LRVJORUxfTE9DPSJ1bmtub3duIgotIyBGaXJzdCBkZXRlcm1pbmUgaWYgdGVzdCBleHBlY3RzIGEgLWYgb3IgYSAtYyAoY2hhcmFjdGVyIGRldmljZSAoU1lTVikpCi0KLWlmIHRlc3QgLWMgL2Rldi9udWxsOyB0aGVuCi0gIENGTEFHPSItYyIKLWVsaWYgdGVzdCAtZiAvZGV2L251bGw7IHRoZW4KLSAgQ0ZMQUc9Ii1mIgotZWxzZQotICAjIGZhbGwgYmFjawotICBDRkxBRz0iLWYiCi1maQotZm9yIGkgaW4gL3ZtdW5peCAvaHAtdXggL3N0YW5kL3ZtdW5peCAvZGV2L2tzeW1zIC9rZXJuZWwvdW5peCAva2VybmVsL2dlbnVuaXggL25ldGJzZCAvdW5peCAva2VybmVsIC9ic2QgL21hY2hfa2VybmVsIC9ib290L2tlcm5lbC9rZXJuZWwKLSAgZG8KLSAgaWYgdGVzdCAtZiAkaSAtbyAkQ0ZMQUcgJGk7IHRoZW4KLSAgICBhY19jdl9LRVJORUxfTE9DPSIkaSIKLSAgICBicmVhazsKLSAgZmkKLWRvbmUKLWlmIHRlc3QgJGkgPSAidW5rbm93biI7IHRoZW4KLSAgQUNfTVNHX1dBUk4oW0Nhbid0IGZpbmQgc3lzdGVtIGtlcm5lbC4uLiAgU2V0dGluZyB0byAvdm11bml4XSkKLSAgYWNfY3ZfS0VSTkVMX0xPQz0iL3ZtdW5peCIKLWZpCi1dKQotCi1BQ19ERUZJTkVfVU5RVU9URUQoS0VSTkVMX0xPQywiJGFjX2N2X0tFUk5FTF9MT0MiKQotCi0jCi0jIENoZWNrIGZvciBtb3VudCB0YWJsZSBsb2NhdGlvbgotIwotCi1BQ19DQUNIRV9DSEVDSyhmb3IgbW91bnQgdGFibGUgbG9jYXRpb24sYWNfY3ZfRVRDX01OVFRBQiwKLVthY19jdl9FVENfTU5UVEFCPSJ1bmtub3duIgotZm9yIGkgaW4gL2V0Yy9tbnR0YWIgL2V0Yy9tdGFiIC9ldGMvZmlsZXN5c3RlbXMgL2Rldi9tbnR0YWIKLSAgZG8KLSAgaWYgdGVzdCAtZiAkaSAtbyAtYyAkaTsgdGhlbgotICAgIGFjX2N2X0VUQ19NTlRUQUI9IiRpIgotICAgIGJyZWFrOwotICBmaQotZG9uZQotXSkKLQotQUNfREVGSU5FX1VOUVVPVEVEKEVUQ19NTlRUQUIsIiRhY19jdl9FVENfTU5UVEFCIikKLQotIyBDaGVjayBmb3IgL2Rldi9kbWVtIG9yIC9kZXYvZHJ1bSBsb2NhdGlvbgotQUNfQ0FDSEVfQ0hFQ0soZm9yIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlLGFjX2N2X0RNRU1fTE9DLAotWwotIyBGaXJzdCBkZXRlcm1pbmUgaWYgdGVzdCBleHBlY3RzIGEgLWYgb3IgYSAtYyAoY2hhcmFjdGVyIGRldmljZSAoU1lTVikpCi0KLWlmIHRlc3QgLWYgL2Rldi9rbWVtOyB0aGVuCi0gIENURVNUPSJ0ZXN0IC1mIgotZWxpZiB0ZXN0IC1jIC9kZXYva21lbTsgdGhlbgotICBDVEVTVD0idGVzdCAtYyIKLWVsc2UKLSAgIyBmYWxsIGJhY2sKLSAgQ1RFU1Q9InRlc3QgLWYiCi1maQotCi1pZiAkQ1RFU1QgL2Rldi9kbWVtOyB0aGVuCi0gIGFjX2N2X0RNRU1fTE9DPSIvZGV2L2RtZW0iCi1lbGlmICRDVEVTVCAvZGV2L2RydW07IHRoZW4KLSAgYWNfY3ZfRE1FTV9MT0M9Ii9kZXYvZHJ1bSIKLWVsc2UKLSAgYWNfY3ZfRE1FTV9MT0M9Im5vbmUiCi1maQotXSkKLQotaWYgdGVzdCAieCRhY19jdl9ETUVNX0xPQyIgIT0gInhub25lIjsgdGhlbgotICBBQ19ERUZJTkVfVU5RVU9URUQoRE1FTV9MT0MsIiRhY19jdl9ETUVNX0xPQyIpCi1maQotCi0jIGZvcmNlZCBlZmVuY2UgdHVybmVkIG9mZi4KLSMgaWYgdGVzdCAieCRkZXZlbG9wZXIiID0gInh5ZXMiIC1hICJ4JHVzZV9lZmVuY2UiICE9ICJ4bm8iOyB0aGVuCi0jICAgIHVzZV9lZmVuY2U9InllcyIKLSMgZmkKLQotaWYgdGVzdCAieCR1c2VfZWZlbmNlIiA9ICJ4eWVzIjsgdGhlbgotICAgIEFDX0NIRUNLX0xJQihlZmVuY2UsIEVGX0V4aXQpCi1maQotCi0jIENoZWNrcyBmb3IgbGlicmFyaWVzLgotIyBBQ19DSEVDS19MSUIoZGVzLCBtYWluKQotQUNfQ0hFQ0tfTElCKG0sIHJvdW5kKQotQUNfQ0hFQ0tfTElCKG0sIGV4cCkKLQotQUNfQVJHX1dJVEgoZWxmLAotCVtBU19IRUxQX1NUUklORygtLXdpdGhvdXQtZWxmLFt1c2UgZWxmIGxpYnJhcmllc10pXSwsCi0JW0FDX0FSR19FTkFCTEUoZWxmLCwKLQkJW0FDX01TR19FUlJPUihbIEludmFsaWQgb3B0aW9uLiBVc2UgLS13aXRoLWVsZi8tLXdpdGhvdXQtZWxmIGluc3RlYWQgXSldKV0pCi0KLWlmIHRlc3QgIngkd2l0aF9lbGYiICE9ICJ4bm8iOyB0aGVuCi0jIG5saXN0IGlzIG5lZWRlZCBmb3IgdXB0aW1lIG9uIHNvbWUgc3l0ZW1zIGluIHRoZSBnZW5lcmljIGxpYnJhcnkKLSMgYWRkIGhvc3RzIHdoaWNoIGRvbid0IHVzZSBubGlzdCB0byB0aGUgYmxhbmsgZmlyc3QgbGluZQotY2FzZSAkdGFyZ2V0X29zIGluCi0JbGludXgqKSA7OwotCWlyaXgqKSAjIENoZWNrIGZvciBubGlzdCBpbiBtbGQgKGlyaXgpCi0JCUFDX0NIRUNLX0xJQihlbGYsIG5saXN0KQotCQlBQ19DSEVDS19MSUIoZWxmLCBubGlzdDY0KQotCQlBQ19DSEVDS19MSUIobWxkLCBubGlzdCkKLQkJOzsKLQkqKSAjIGRlZmF1bHQKLQkJQUNfQ0hFQ0tfTElCKGVsZiwgbmxpc3QpCi0JCTs7Ci1lc2FjCi1maQotIAotCi0jIE9uIHNvbWUgcGxhdGZvcm1zIChJcml4KSBsaWJuc2wgYW5kIGxpYnNvY2tldCBzaG91bGQgbm90IGJlIHVzZWQuCi1BQ19DSEVDS19GVU5DKGdldGhvc3RieW5hbWUsIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUUpLAotCUFDX0NIRUNLX0xJQihuc2wsIGdldGhvc3RieW5hbWUsIEFDX0RFRklORShIQVZFX0dFVEhPU1RCWU5BTUUpCi0JTElCUz0iJHtMSUJTfSAtbG5zbCIpKQotCi0jIFNDTyBVbml4d2FyZSA3LjEuNCBmaW5kcyBnZXRob3N0YnluYW1lKCkgaW4gLWxzb2NrZXQKLUFDX0NIRUNLX0ZVTkMoZ2V0aG9zdGJ5bmFtZSwgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRSksCi0JQUNfQ0hFQ0tfTElCKHNvY2tldCwgZ2V0aG9zdGJ5bmFtZSwgQUNfREVGSU5FKEhBVkVfR0VUSE9TVEJZTkFNRSkKLQlMSUJTPSIke0xJQlN9IC1sc29ja2V0IikpCi0KLSMgU29sYXJpcyBrc3RhdAotQUNfQ0hFQ0tfTElCKGtzdGF0LCBrc3RhdF9sb29rdXAsCi0gICAgICAgIEFDX0RFRklORShIQVZFX0xJQktTVEFULCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrc3RhdCcgbGlicmFyeSAoLWxrc3RhdCkuXSkKLSAgICAgICAgTE5FVFNOTVBMSUJTPSIke0xORVRTTk1QTElCU30gLWxrc3RhdCIpCi0KLSMgQ2hlY2sgZm9yIGxpYnJhcmllcyB0aGF0IHRoZSBhZ2VudCBuZWVkcwotIyBzYXZpbmcgb2xkIGxpYnJhcmllcwotTk9OQUdFTlRMSUJTPSRMSUJTCi0KLSMgQ2hlY2sgZm9yIHNlY3VyaXR5IHJlbGF0ZWQgZnVuY3Rpb25zCi1pZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiICE9ICJ4bm8iOyB0aGVuCi0gICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiICE9ICJ4eWVzIiAtYSAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICBBQ19DSEVDS19MSUIocGtjczExLCBDX0luaXRpYWxpemUsIEFDX0RFRklORShIQVZFX0xJQlBLQ1MxMSwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGtjczExJyBsaWJyYXJ5ICgtbHBrY3MxMSkuXSkKLSAgICAgICAgICAgICAgTElCUEtDUzExPSItbHBrY3MxMSIpCi0gICAgZWxzZSAKLSAgICAgIGlmIHRlc3QgIngkdHJ5cnNhcmVmIiAhPSAieG5vIjsgdGhlbgotICAgICAgICAgQUNfQ0hFQ0tfTElCKHJzYXJlZiwgUlNBUHJpdmF0ZURlY3J5cHQpCi0gICAgICAgICBBQ19DSEVDS19MSUIoUlNBZ2x1ZSwgUlNBX1BLQ1MxX1JTQXJlZikKLSAgICAgIGZpCi0KLSAgICAgIEFDX0NIRUNLX0xJQihjcnlwdG8sIEVWUF9tZDUsIEFDX0RFRklORShIQVZFX0xJQkNSWVBUTywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuXSkKLSAgICAgICAgICAgICAgTElCQ1JZUFRPPSItbGNyeXB0byIpCi0gICAgICBBQ19DSEVDS19MSUIoY3J5cHRvLCBBRVNfY2ZiMTI4X2VuY3J5cHQsIAotICAgICAgICAgICAgICBBQ19ERUZJTkUoSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEFFU19jZmIxMjhfZW5jcnlwdCcgZnVuY3Rpb24uXSkpCi0gICAgICBBQ19DSEVDS19MSUIoY3J5cHRvLCBFVlBfTURfQ1RYX2NyZWF0ZSwKLSAgICAgICAgICBBQ19ERUZJTkUoW0hBVkVfRVZQX01EX0NUWF9DUkVBVEVdLCBbXSwKLSAgICAgICAgICAgICAgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRVZQX01EX0NUWF9jcmVhdGUnIGZ1bmN0aW9uLl0pCi0gICAgICAgICAgQUNfREVGSU5FKFtIQVZFX0VWUF9NRF9DVFhfREVTVFJPWV0sIFtdLAotICAgICAgICAgICAgICBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBFVlBfTURfQ1RYX2Rlc3Ryb3knIGZ1bmN0aW9uLl0pKQotICAgIGZpCi1lbGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgIEFDX0NIRUNLX0xJQihwa2NzMTEsIENfSW5pdGlhbGl6ZSwgQUNfREVGSU5FKEhBVkVfTElCUEtDUzExKQotICAgICAgICAgICAgTElCUEtDUzExPSItbHBrY3MxMSIpCi1maQotCi1MSUJTPSROT05BR0VOVExJQlMKLQotIyBjaGVjayBmb3IgdGNwIHdyYXBwZXIgc3VwcG9ydAotX2NwcGZsYWdzPSIke0NQUEZMQUdTfSIKLV9sZGZsYWdzPSIke0xERkxBR1N9IgotCi1BQ19BUkdfV0lUSChsaWJ3cmFwLAotWyAgLS13aXRoLWxpYndyYXBbPUxJQlBBVEhdICBDb21waWxlIGluIGxpYndyYXAgKHRjcF93cmFwcGVycykgc3VwcG9ydC5dLFsKLSAgaWYgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gIm5vIjsgdGhlbgotICAgIGlmIHRlc3QgIiR3aXRoX2xpYndyYXAiICE9ICJ5ZXMiOyB0aGVuCi0gICAgICBDUFBGTEFHUz0iJHtDUFBGTEFHU30gLUkkd2l0aF9saWJ3cmFwL2luY2x1ZGUiCi0gICAgICBMREZMQUdTPSIke0xERkxBR1N9IC1MJHdpdGhfbGlid3JhcC9saWIiCi0gICAgZmkKLQotICAgIF9saWJzPSR7TElCU30KLSAgICBBQ19DSEVDS19IRUFERVIodGNwZC5oLCAsCi0JICAgIEFDX01TR19FUlJPUihbQXNrZWQgdG8gdXNlIGxpYndyYXAgYnV0IEkgY291bGRuJ3QgZmluZCB0Y3BkLmguXSkpCi0KLSAgICBMSUJTPSIkTElCUyAtbHdyYXAiCi0JQUNfTVNHX0NIRUNLSU5HKFtmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwXSkKLQkjIFhYWDogc2hvdWxkIGNoZWNrIGZvciBob3N0c19jdGwKLQlBQ19UUllfTElOSyhbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotCQkgICAgICNpbmNsdWRlIDx0Y3BkLmg+Ci0JCSAgICAgaW50IGFsbG93X3NldmVyaXR5ID0gMDsKLQkJICAgICBpbnQgZGVueV9zZXZlcml0eSAgPSAwOwotCQkgICAgXSxbaG9zdHNfYWNjZXNzKCh2b2lkICopMCldLFsKLQotCSAgICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQotCSAgICBBQ19ERUZJTkUoTkVUU05NUF9VU0VfTElCV1JBUCkKLQkgICAgdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCi0JICAgIF93cmFwbGlicz0iJF93cmFwbGlicyAtbHdyYXAiXSwKLSAgICAgICAgWwotCSAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0JICAgICMgTGludXggUmVkSGF0IDYuMSB3b24ndCBsaW5rIGxpYndyYXAgd2l0aG91dCBsaWJuc2wKLQkgICAgQUNfQ0hFQ0tfRlVOQyh5cF9nZXRfZGVmYXVsdF9kb21haW4sICwKLQkJQUNfQ0hFQ0tfTElCKG5zbCwgeXBfZ2V0X2RlZmF1bHRfZG9tYWluKSkKLQkgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgVENQIHdyYXBwZXJzIGxpYnJhcnkgLWx3cmFwIGxpbmtlZCB3aXRoIC1sbnNsXSkKLQkgICAgQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLQkJICAgICAgICAgI2luY2x1ZGUgPHRjcGQuaD4KLQkJICAgICAgICAgaW50IGFsbG93X3NldmVyaXR5ID0gMDsKLQkgICAgICAgICAgICAgICAgIGludCBkZW55X3NldmVyaXR5ICA9IDA7Ci0JIAkJXSxbaG9zdHNfYWNjZXNzKCh2b2lkICopMCldLAotCi0JCQlBQ19NU0dfUkVTVUxUKHllcykKLQkJCUFDX0RFRklORShORVRTTk1QX1VTRV9MSUJXUkFQKQotCQkJdGVzdCAiJHdpdGhfbGlid3JhcCIgIT0gbm8gLWEgIiR3aXRoX2xpYndyYXAiICE9IHllcyAmJiBfd3JhcGxpYnM9Ii1MJHdpdGhfbGlid3JhcC9saWIiCi0JCQlfd3JhcGxpYnM9IiRfd3JhcGxpYnMgLWx3cmFwIC1sbnNsIiwKLQotCQkJQUNfTVNHX1JFU1VMVChubykKLQkJCUFDX01TR19FUlJPUihBc2tlZCB0byB1c2UgbGlid3JhcCBidXQgSSBjb3VsZG4ndCBmaW5kIGl0LikpXSkKLSAgICBMQUdFTlRMSUJTPSIkX3dyYXBsaWJzIgotICAgIENQUEZMQUdTPSR7X2NwcGZsYWdzfQotICAgIExERkxBR1M9JHtfbGRmbGFnc30KLSAgICBMSUJTPSR7X2xpYnN9Ci0gIGZpCi1dKQotCi1BQ19DSEVDS19IRUFERVJTKHJwbS9ycG1saWIuaCBycG0vaGVhZGVyLmgpCi0KLUFDX0NIRUNLX0hFQURFUihycG0vcnBtbGliLmgscnBtbGliX2g9eWVzLHJwbWxpYl9oPW5vKQotQUNfQ0hFQ0tfSEVBREVSKHJwbS9oZWFkZXIuaCxycG1oZWFkZXJfaD15ZXMscnBtaGVhZGVyX2g9bm8pCi0KLWlmIHRlc3QgIngkcnBtaGVhZGVyX2giID0gInhubyIgLW8gIngkcnBtbGliX2giID0gInhubyIgOyB0aGVuCi0gIGlmIHRlc3QgIngkd2l0aF9ycG0iID0gInh5ZXMiIDsgdGhlbgotICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGZpbmQgZWl0aGVyIHRoZSBSUE0gaGVhZGVyIGZpbGVzIG5lZWRlZCBhbmQgd2FzIHNwZWNpZmljYWxseSBhc2tlZCB0byB1c2UgUlBNIHN1cHBvcnRdKQotICBlbHNlCi0gICAgd2l0aF9ycG09bm8KLSAgZmkKLWZpCi0KLSMKLSMgcnBtIGxpYnJhcmllcyBvbmx5IG5lZWRlZCBmb3IgdGhlIGhvc3QgcmVzb3VyY2VzIG1pYiBzb2Z0d2FyZQotIyBpbnN0YWxsZWQgdGFibGVzIChvbiBsaW51eCBpbiBwYXJ0aWN1bGFyKQotIwotaWYgdGVzdCAieCR3aXRoX3JwbSIgIT0gInhubyIgJiYgXAotICAgICAgICBlY2hvICIgJG1vZHVsZV9saXN0ICIgfCBncmVwICIgaG9zdC9ocl9zd2luc3QgIiA+IC9kZXYvbnVsbDsgdGhlbgotICAjIEFSRy4gIFJQTSBpcyBhIHJlYWwgcGFpbi4KLSAgIyBGV0lXIGxpYnJwbS5sYSwgbGlicnBtaW8ubGEsIGFuZCBsaWJwb3B0LmxhIGhhdmUgY29ycmVjdCBkZXBlbmRlbmNpZXMuCi0gIF9ycG1saWJzPSIiCi0KLSAgIyBycG0tNC4wLnggbmVlZHMgcnBtaW8uCi0gIEFDX0NIRUNLX0xJQihycG1pbywgcnBtR2V0UGF0aCwgW19ycG1saWJzPSItbHJwbWlvICRfcnBtbGlicyJdLCwkX3JwbWxpYnMpCi0gIAotICAjIG5vdyBjaGVjayBmb3IgcnBtIHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBsaWJyYXJpZXMuCi0gIEFDX0NIRUNLX0xJQihycG0sIHJwbUdldEZpbGVzeXN0ZW1MaXN0LFsKLSAgICBBQ19ERUZJTkUoSEFWRV9MSUJSUE0pCi0gICAgTE1JQkxJQlM9Ii1scnBtICRfcnBtbGlicyAkTE1JQkxJQlMiCi0gICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1JL3Vzci9pbmNsdWRlL3JwbSIKLSAgXSxbCi0gICAgIyBycG0tNC4wLjMgbGlicnBtZGIgYWN0dWFsbHkgY29udGFpbnMgd2hhdCB3ZSBuZWVkLgotICAgIEFDX0NIRUNLX0xJQihycG1kYiwgcnBtZGJPcGVuLFsKLSAgICAgIEFDX0RFRklORShIQVZFX0xJQlJQTSkKLSAgICAgIExNSUJMSUJTPSItbHJwbWRiIC1scnBtICRfcnBtbGlicyAkTE1JQkxJQlMiCi0gICAgICBDRkxBR1M9IiRDRkxBR1MgLUkvdXNyL2luY2x1ZGUvcnBtIgotICAgIF0sLC1scnBtICRfcnBtbGlicykKLSAgXSkKLQotICAjIHJwbSA0LjYgaGFzIGluY29tcGF0aWJsZSBBUEksIHR1cm4gb24gdGhlIGxlZ2FjeSBvbmUKLSAgQUNfQ0hFQ0tfREVDTChbaGVhZGVyR2V0RW50cnldLAotICAgIDogLAotICAgIEFDX0RFRklORShbX1JQTV80XzRfQ09NUEFUXSwgW10sIFtEZWZpbmUgaWYgeW91IGhhdmUgUlBNIDQuNiBvciBuZXdlciB0byB0dXJuIG9uIGxlZ2FjeSBBUEldKSwKLSAgICBbWyNpbmNsdWRlIDxycG0vcnBtbGliLmg+XV0KLSAgKQotZmkKLQotIyBsaWJrdm0KLUFDX0NIRUNLX0xJQihrdm0sIGt2bV9yZWFkLCBbX2xpYmt2bT0iLWxrdm0iXSkKLUFDX0NIRUNLX0ZVTkMoa3ZtX29wZW5maWxlcywgQUNfREVGSU5FKEhBVkVfS1ZNX09QRU5GSUxFUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX29wZW5maWxlcycgZnVuY3Rpb24uXSksCi0JQUNfQ0hFQ0tfTElCKGt2bSwga3ZtX29wZW5maWxlcywgQUNfREVGSU5FKEhBVkVfS1ZNX09QRU5GSUxFUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX29wZW5maWxlcycgZnVuY3Rpb24uXSkKLQlfbGlia3ZtPSItbGt2bSIpKQotQUNfQ0hFQ0tfRlVOQyhrdm1fZ2V0cHJvY3MsIEFDX0RFRklORShIQVZFX0tWTV9HRVRQUk9DUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX2dldHByb2NzJyBmdW5jdGlvbi5dKSwKLQlBQ19DSEVDS19MSUIoa3ZtLCBrdm1fZ2V0cHJvY3MsIEFDX0RFRklORShIQVZFX0tWTV9HRVRQUk9DUywgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX2dldHByb2NzJyBmdW5jdGlvbi5dKQotCV9saWJrdm09Ii1sa3ZtIikpCi1BQ19DSEVDS19GVU5DKGt2bV9nZXRzd2FwaW5mbywgQUNfREVGSU5FKEhBVkVfS1ZNX0dFVFNXQVBJTkZPLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fZ2V0c3dhcGluZm8nIGZ1bmN0aW9uLl0pLAotCUFDX0NIRUNLX0xJQihrdm0sIGt2bV9nZXRzd2FwaW5mbywgQUNfREVGSU5FKEhBVkVfS1ZNX0dFVFNXQVBJTkZPLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fZ2V0c3dhcGluZm8nIGZ1bmN0aW9uLl0pCi0JX2xpYmt2bT0iLWxrdm0iKSkKLWlmIHRlc3QgIngke19saWJrdm19IiAhPSAieCI7IHRoZW4KLQlBQ19ERUZJTkUoSEFWRV9MSUJLVk0sIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bScgbGlicmFyeSAoLWxrdm0pLl0pCi0JTEFHRU5UTElCUz0iJExBR0VOVExJQlMgJHtfbGlia3ZtfSIKLWZpCi0KLSMgRFlOQU1JQyBNT0RVTEUgU1VQUE9SVAotQUNfQ0hFQ0tfRlVOQyhkbG9wZW4sIEFDX0RFRklORShIQVZFX0RMT1BFTiwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGxvcGVuJyBmdW5jdGlvbi5dKSwKLQlBQ19DSEVDS19MSUIoZGwsIGRsb3BlbiwgQUNfREVGSU5FKEhBVkVfRExPUEVOLCAxLCBbRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbG9wZW4nIGZ1bmN0aW9uLl0pCi0JQUNfREVGSU5FKEhBVkVfTElCREwsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS5dKQotCUxNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGRsIikpCi0KLSMgbmxpc3QKLUFDX0NIRUNLX0ZVTkNTKG5saXN0IG5saXN0NjQga25saXN0KQotCi0jIHdoZXRoZXIgd2UgbmVlZCAtbGRldnN0YXQgZm9yIGRpc2tpbyBNSUIKLWVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiB1Y2Qtc25tcC9kaXNraW8gIiA+L2Rldi9udWxsCi1pZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotCUFDX0NIRUNLX0ZVTkMoZ2V0ZGV2cywgQUNfREVGSU5FKEhBVkVfR0VUREVWUyksCi0JCUFDX0NIRUNLX0xJQihkZXZzdGF0LCBnZXRkZXZzLCBBQ19ERUZJTkUoSEFWRV9HRVRERVZTKQotCQlMTUlCTElCUz0iJHtMTUlCTElCU30gLWxkZXZzdGF0IikpCi0JQUNfQ0hFQ0tfRlVOQyhnZXRkZXZzLCBBQ19ERUZJTkUoSEFWRV9ERVZTVEFUX0dFVERFVlMpLAotCQlBQ19DSEVDS19MSUIoZGV2c3RhdCwgZGV2c3RhdF9nZXRkZXZzLCBBQ19ERUZJTkUoSEFWRV9ERVZTVEFUX0dFVERFVlMpCi0JCUxNSUJMSUJTPSIke0xNSUJMSUJTfSAtbGRldnN0YXQiKSkKLWZpCi0KLSMgTE0tU0VOU09SUy1NSUIgc3VwcG9ydAotZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIHVjZC1zbm1wL2xtU2Vuc29ycyAiID4gL2Rldi9udWxsCi1pZiB0ZXN0ICQ/IC1lcSAwIDsgdGhlbgotICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzZW5zb3JzIHN1cHBvcnRdKQotICAgICAgICBjYXNlICR0YXJnZXRfb3MgaW4KLSAgICAgICAgICBzb2xhcmlzKikKLSAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUihwaWNsLmgsIExNSUJMSUJTPSIke0xNSUJMSUJTfSAtbHBpY2wiLCkKLSAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUlMocGljbC5oKQotICAgICAgICAgICAgOzsKLSAgICAgICAgKikKLSAgICAgICAgICAgIEFDX0NIRUNLX0hFQURFUihzZW5zb3JzL3NlbnNvcnMuaCwsCi0gICAgICAgICAgICAgICAgW0FDX01TR19FUlJPUihbYXNrZWQgdG8gdXNlIGxtX3NlbnNvcnMgYnV0IEkgY291bGRuJ3QgZmluZCBzZW5zb3JzL3NlbnNvcnMuaF0pXSkKLSAgICAgICAgICAgIEFDX0NIRUNLX0xJQihzZW5zb3JzLCBzZW5zb3JzX2dldF9kZXRlY3RlZF9jaGlwcywgWwotCQkgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxzZW5zb3JzIiA7Ci0gICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICBbQUNfTVNHX0VSUk9SKFthc2tlZCB0byB1c2UgbG1fc2Vuc29ycyBidXQgSSBjb3VsZG4ndCBmaW5kIC1sc2Vuc29yc10pXSkKLSAgICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLWZpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgUEVSTCBTVVBQT1JUCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMKLSMgdGVzdCB0byBzZWUgaWYgd2UgY2FuIGF0dGVtcHQgdG8gYnVpbGQgZW1iZWRkZWQgUGVybCBzbyBmYXIKLSMKLWlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gIGlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4bm8iIDsgdGhlbgotICAgIGluc3RhbGxfcGVybD0idHJ5IgotICBmaQotICBpZiB0ZXN0ICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gIngiIC1vICJ4JGFjX2N2X3BhdGhfUEVSTFBST0ciID0gInhubyIgOyB0aGVuCi0gICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICBlbWJlZF9wZXJsPSJubyIKLSAgZmkKLWZpCi0KLQotIwotIyBFbWJlZGRlZCBQZXJsIHNwZWNpZmljIHN0dWZmCi0jCi0KLSMgdGVzdCBwZXJsIHByb2cKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICBteXBlcmw9JGFjX2N2X3BhdGhfUEVSTFBST0cKLSAgICBpZiB0ZXN0ICRteXBlcmwgPSAibm8iIDsgdGhlbgotICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfRVJST1IoLS1lbmFibGUtZW1iZWRkZWQtcGVybCByZXF1ZXN0ZWQgYnV0IG5vIHBlcmwgZXhlY3V0YWJsZSBmb3VuZCkKLSAgICAgIGZpCi0gICAgZmkKLWZpCi0KLSMgdGVzdCBmb3Igc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0Ci1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgIyBlbWJlZGRlZCBQZXJsIHJlcXVpcmVzIHNoYXJlZCBsaWJyYXJpZXMKLSAgICBpZiB0ZXN0ICJ4JGVuYWJsZV9zaGFyZWQiICE9ICJ4eWVzIjsgdGhlbgotICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfRVJST1IoUGVybCBzdXBwb3J0IHJlcXVpcmVzIC0tZW5hYmxlLXNoYXJlZCkKLSAgICAgIGZpCi0gICAgZmkKLWZpCi0KLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBhcmUgaW4gdGhlIHNvdXJjZSB0cmVlIHNvIHdlIGNhbiBpbnN0YWxsIFBlcmwgbW9kdWxlc10pCi0gIGlmIHRlc3QgIngkc3JjZGlyIiA9ICJ4LiIgLW8gLWQgcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlIDsgdGhlbgotICAgIEFDX01TR19SRVNVTFQoW1llc10pCi0gIGVsc2UKLSAgICBpZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICBpbnN0YWxsX3Blcmw9Im5vIgotICAgICAgQUNfTVNHX1JFU1VMVChbTm9dKQotICAgIGVsc2UKLSAgICAgIEFDX01TR19FUlJPUihbUGVybCBtb2R1bGVzIGNhbiBub3QgYmUgYnVpbHQgb3V0c2lkZSB0aGUgc291cmNlIGRpcmVjdG9yeV0pCi0gICAgZmkKLSAgZmkKLWZpICAgICAgCi0KLSMgY2hlY2sgdGhlIFBlcmwgY29tcGlsZXIgbmFtZQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgICMKLSAgICAjIFBlcmwgY2MgY2hlY2tzCi0gICAgIwotICAgIGlmIHRlc3QgInhlbmFibGVfcGVybF9jY19jaGVja3MiICE9ICJ4bm8iIDsgdGhlbgotICAgICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBjY10pCi0gICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgIFBFUkxDQz1gJG15cGVybCAtVjpjYyB8ICRteXBlcmwgLW4gLWUgJ3ByaW50IGlmIChzL15ccypjYz0uKFstPVx3XHNcL10rKS47XHMqLyQxLyk7J2AKLSAgICAgIGNoYW5nZXF1b3RlKFssIF0pCi0gICAgICBpZiB0ZXN0ICJ4JFBFUkxDQyIgIT0gIngiIDsgdGhlbgotICAgICAgICBBQ19NU0dfUkVTVUxUKFskUEVSTENDXSkKLSAgICAgIGVsc2UKLSAgICAgICAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICAgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICAgIGVsc2UKLSAgICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIHRoYXQgd2FzIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgcGVybCBiaW5hcnkgb3IgdXNlIC0td2l0aG91dC1wZXJsLW1vZHVsZXMgdG8gYnVpbGQgd2l0aG91dCBQZXJsLl0pCi0gICAgICAgIGZpCi0gICAgICBmaQotZmkKLQotIyBjaGVjayB0aGUgUGVybCBjb21waWxlciBjb21wYXRpYmlsaXR5Ci1pZiB0ZXN0ICJ4JGluc3RhbGxfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgJFBFUkxDQyBpcyBhIEdOVSBDIGNvbXBpbGVyXSkKLSAgICAgIE9MRENDPSRDQwotICAgICAgQ0M9IiRQRVJMQ0MiCi0gICAgICBBQ19DT01QSUxFX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtdLCBbWwotI2lmbmRlZiBfX0dOVUNfXwotICBjaG9rZSBtZQotI2VuZGlmCi0gICAgICBdXSldLCBbcGVybGNjX2lzX2dudT15ZXNdLCBbcGVybGNjX2lzX2dudT1ub10pCi0gICAgICBBQ19NU0dfUkVTVUxUKFskcGVybGNjX2lzX2dudV0pCi0gICAgICBDQz0kT0xEQ0MKLSAgICAgIGlmIHRlc3QgIngkR0NDIiA9ICJ4eWVzIiAtYSAieCRwZXJsY2NfaXNfZ251IiA9ICJ4bm8iIDsgdGhlbgotICAgICAgCWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgIAkgIGluc3RhbGxfcGVybD0ibm8iCi0gICAgICAJZWxzZQotICAgICAgCSAgQUNfTVNHX0VSUk9SKFtUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgR05VIEMgY29tcGlsZXIgKCRDQykgd2hpbGUgUGVybCBoYXMgYmVlbiBjb21waWxlZCB3aXRoIGEgbm9uLUdOVSAob3Igbm9uLXdvcmtpbmcpIGNvbXBpbGVyICgkUEVSTENDKS4gVGhpcyBsaWtlbHkgd29uJ3Qgd29yayBmb3IgYnVpbGRpbmcgd2l0aCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzcGVjaWZ5IGEgZGlmZmVyZW50IGNvbXBpbGVyICgtLXdpdGgtY2M9UEFUSCksIGRpc2FibGUgdGhpcyBjaGVjayAoLS1kaXNhYmxlLXBlcmwtY2MtY2hlY2tzKSBvciBidWlsZCB3aXRob3V0IFBlcmwgKC0td2l0aG91dC1wZXJsLW1vZHVsZXMpLl0pCi0gICAgICAJZmkKLSAgICAgIGZpCi1maQotCi0jIGNoZWNrIGlmIHRoZXkncmUgYm90aCBnbnUKLWlmIHRlc3QgIngkaW5zdGFsbF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgIGlmIHRlc3QgIngkR0NDIiAhPSAieHllcyIgLWEgIngkcGVybGNjX2lzX2dudSIgPSAieHllcyIgOyB0aGVuCi0gICAgICAJaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgCSAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICAgIAllbHNlCi0gICAgICAgICAgQUNfTVNHX0VSUk9SKFtUaGlzIGJ1aWxkIGlzIHVzaW5nIGEgbm9uLUdOVSBDIGNvbXBpbGVyICgkQ0MpIHdoaWxlIFBlcmwgaGFzIGJlZW4gY29tcGlsZWQgd2l0aCBhIEdOVSBjb21waWxlciAoJFBFUkxDQykuIFRoaXMgbGlrZWx5IHdvbid0IHdvcmsgZm9yIGJ1aWxkaW5nIHdpdGggUGVybCBzdXBwb3J0LiBFaXRoZXIgc3BlY2lmeSBhIGRpZmZlcmVudCBjb21waWxlciAoLS13aXRoLWNjPVBBVEgpLCBkaXNhYmxlIHRoaXMgY2hlY2sgKC0tZGlzYWJsZS1wZXJsLWNjLWNoZWNrcykgb3IgYnVpbGQgd2l0aG91dCBQZXJsICgtLXdpdGhvdXQtcGVybC1tb2R1bGVzKS5dKQotICAgICAgCWZpCi0gICAgICBmaQotZmkKLQotIyB3ZSBoYXZlIGVub3VnaCBzdXBwb3J0IGZvciBpbnN0YWxsaW5nIHRoZSBtb2R1bGVzIGF0IGxlYXN0LgotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICBpbnN0YWxsX3Blcmw9InllcyIKLWVsc2UKLSAgaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInhubyIgOyB0aGVuCi0gICAgaW5zdGFsbF9wZXJsPSJubyIKLSAgICBlbWJlZF9wZXJsPSJubyIKLSAgZmkKLWZpCi0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIG9uIHRvIGVtYmVkZGluZy4uLgotCi0jIGNoZWNrIHRoZSBjb21waWxlciBmbGFncyBmb3IgaWxsZWdhbCB0b2tlbnMKLWNhc2UgJHRhcmdldF9vcyBpbgotICAgIHNvbGFyaXMqKQotICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieG5vIiA7IHRoZW4KLSAgICAgICAgICAjCi0gICAgICAgICAgIyBQZXJsIGNjIGNoZWNrcwotICAgICAgICAgICMKLSAgICAgICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBwcm9ibGVtYXRpYyBQZXJsIGNjIGZsYWdzIG9uIFN1bnNdKQotICAgICAgICAgIGlmICRteXBlcmwgLVY6Y2NmbGFncyB8IGdyZXAgTEFSR0VGSUxFID4gL2Rldi9udWxsIDsgdGhlbgotICAgICAgICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgICAgICAgZW1iZWRfcGVybD0ibm8iCi0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgIEFDX01TR19FUlJPUihbUGVybCB3YXMgY29tcGlsZWQgd2l0aCBMQVJHRUZJTEUgc3VwcG9ydCB3aGljaCB3aWxsIGJyZWFrIE5ldC1TTk1QLiBFaXRoZXIgc2V0IHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBQRVJMUFJPRyB0byBhIGRpZmZlcmVudCBwZXJsIGJpbmFyeSBvciB1c2UgLS1kaXNhYmxlLWVtYmVkZGVkLXBlcmwgdG8gdHVybiBvZmYgZW1iZWRkZWQgUGVybCBmdW5jdGlvbmFsaXR5IGFsdG9nZXRoZXIuXSkKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgZWxzZQotICAgICAgICAgICAgQUNfTVNHX1JFU1VMVChbbm9uZSBrbm93bl0pCi0gICAgICAgICAgZmkKLSAgICAgIGZpCi0gICAgOzsKLQotICAgICopCi0gICAgOzsKLWVzYWMKLQotCi0jIGNoZWNrIHRoZSBjZmxhZ3MKLWlmIHRlc3QgIngkZW1iZWRfcGVybCIgIT0gInhubyIgOyB0aGVuCi0gICAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgUGVybCBDRkxBR1NdKQotICAgIHBlcmxjZmxhZ3M9YCRteXBlcmwgLU1FeHRVdGlsczo6RW1iZWQgLWUgY2NvcHRzYAotICAgIGlmIHRlc3QgIngkcGVybGNmbGFncyIgIT0gIngiIDsgdGhlbgotICAgICAgQUNfTVNHX1JFU1VMVChbJHBlcmxjZmxhZ3NdKQotICAgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRwZXJsY2ZsYWdzIgotICAgIGVsc2UKLSAgICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHRyeSIgOyB0aGVuCi0gICAgICAgIGVtYmVkX3Blcmw9Im5vIgotICAgICAgZWxzZQotICAgICAgICBBQ19NU0dfRVJST1IoW0NvdWxkIG5vdCBkZXRlcm1pbmUgdGhlIEMgY29tcGlsZXIgZmxhZ3MgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCi0gICAgICBmaQotICAgIGZpCi1maQotCi0jIGNoZWNrIHRoZSBsZGZsYWdzCi1pZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgIEFDX01TR19DSEVDS0lORyhbZm9yIFBlcmwgTERGTEFHU10pCi0gICAgbmV0c25tcF9wZXJsbGRvcHRzPWAkbXlwZXJsIC1NRXh0VXRpbHM6OkVtYmVkIC1lIGxkb3B0c2AKLSAgICBpZiB0ZXN0ICJ4JG5ldHNubXBfcGVybGxkb3B0cyIgIT0gIngiIDsgdGhlbgotICAgICAgQUNfTVNHX1JFU1VMVChbJG5ldHNubXBfcGVybGxkb3B0c10pCi0gICAgZWxzZQotICAgICAgaWYgdGVzdCAieCRlbWJlZF9wZXJsIiA9ICJ4dHJ5IiA7IHRoZW4KLSAgICAgICAgZW1iZWRfcGVybD0ibm8iCi0gICAgICBlbHNlCi0gICAgICAgIEFDX01TR19FUlJPUihbQ291bGQgbm90IGRldGVybWluZSB0aGUgbGlua2VyIG9wdGlvbnMgdGhhdCB3ZXJlIHVzZWQgdG8gYnVpbGQgJG15cGVybC4gRWl0aGVyIHNldCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgUEVSTFBST0cgdG8gYSBkaWZmZXJlbnQgUGVybCBiaW5hcnkgb3IgdXNlIC0tZGlzYWJsZS1lbWJlZGRlZC1wZXJsIHRvIHR1cm4gb2ZmIGVtYmVkZGVkIFBlcmwgZnVuY3Rpb25hbGl0eSBhbHRvZ2V0aGVyLl0pCi0gICAgICBmaQotICAgIGZpCi0gICAgaWYgdGVzdCAieCRlbmFibGVfYXNfbmVlZGVkIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICAgICMgbGluayAqbGlicmFyaWVzKiB3aXRoIGxpYnBlcmwKLSAgICAgIFBFUkxMRE9QVFNfRk9SX0xJQlM9IiRuZXRzbm1wX3BlcmxsZG9wdHMiCi0gICAgICAjIFBlcmwgY2NkbGZsYWdzIChSUEFUSCB0byBsaWJwZXJsLCBob3BlZnVsbHkpCi0gICAgICBBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBQZXJsIENDRExGTEFHU10pCi0gICAgICBjaGFuZ2VxdW90ZSgsICkKLSAgICAgIG5ldHNubXBfcGVybGNjZGxmbGFncz1gJG15cGVybCAtVjpjY2RsZmxhZ3MgfCAkbXlwZXJsIC1uIC1lICdwcmludCAkMSAnImlmICgvXlxzKmNjZGxmbGFncz0nKFteJ10rKSc7Lyk7ImAKLSAgICAgIGNoYW5nZXF1b3RlKFssIF0pCi0gICAgICBBQ19NU0dfUkVTVUxUKFskbmV0c25tcF9wZXJsY2NkbGZsYWdzXSkKLSAgICAgIFBFUkxMRE9QVFNfRk9SX0FQUFM9IiRuZXRzbm1wX3BlcmxjY2RsZmxhZ3MiCi0gICAgZWxzZQotICAgICAgIyBsaW5rICphcHBsaWNhdGlvbnMqIGFnYWluc3QgbGlicGVybAotICAgICAgUEVSTExET1BUU19GT1JfQVBQUz0iJG5ldHNubXBfcGVybGxkb3B0cyIKLSAgICBmaQotZmkKLQotIyBjaGVjayBuZWVkZWQgZnVuY3Rpb25zCi1pZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiICE9ICJ4bm8iIDsgdGhlbgotICAgIE9MRExJQlM9IiRMSUJTIgotICAgIExJQlM9IiRMSUJTICRuZXRzbm1wX3BlcmxsZG9wdHMiCi0KLSAgICAjIG5ld2VyIHBlcmwgdnMgb2xkZXIgcGVybCBjYWxsIGZ1bmN0aW9ucwotICAgIEFDX0NIRUNLX0ZVTkNTKGV2YWxfcHYpCi0KLSAgICAjIHNpZ2g6IHRoaXMgaGFzIGEgQ0FQSVRBTCBQIGluIFBlcmwsIHdoaWNoIGVuZHMgdXAgYmVpbmcgdGhlIHNhbWUKLSAgICAjIGF1dG9jb25mIGRlZmluZSBhcyB0aGUgbG93ZXIgY2FzZSBzbyB3ZSBoYXZlIHRvIHRyZWF0IHRoZW0gKkJPVEgqCi0gICAgIyBzcGVjaWFsbHkuICBXb25kZXJmdWwuCi0gICAgQUNfQ0hFQ0tfRlVOQyhwZXJsX2V2YWxfcHYsIEFDX0RFRklORShIQVZFX1BFUkxfRVZBTF9QVl9MQykpCi0gICAgQUNfQ0hFQ0tfRlVOQyhQZXJsX2V2YWxfcHYsIEFDX0RFRklORShIQVZFX1BFUkxfRVZBTF9QVl9VQykpCi0KLSAgICBMSUJTPSIkT0xETElCUyIKLQotCi0gICAgaWYgdGVzdCAieCRhY19jdl9mdW5jX3BlcmxfZXZhbF9wdiIgIT0gInh5ZXMiIC1hICJ4JGFjX2N2X2Z1bmNfUGVybF9ldmFsX3B2IiAhPSAieHllcyIgLWEgIngkYWNfY3ZfZnVuY19ldmFsX3B2IiAhPSAieHllcyIgOyB0aGVuCi0gICAgICBpZiB0ZXN0ICJ4JGVtYmVkX3BlcmwiID0gInh0cnkiIDsgdGhlbgotICAgICAgICBlbWJlZF9wZXJsPSJubyIKLSAgICAgIGVsc2UKLSAgICAgICAgQUNfTVNHX0VSUk9SKFtDb3VsZCBub3QgZmluZCB0aGUgZXZhbF9wdiwgcGVybF9ldmFsX3B2IG9yIFBlcmxfZXZhbF9wdiBmdW5jdGlvbnMgbmVlZGVkIGZvciBlbWJlZGRlZCBQZXJsIHN1cHBvcnQuIEVpdGhlciBzZXQgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIFBFUkxQUk9HIHRvIGEgZGlmZmVyZW50IHBlcmwgYmluYXJ5IG9yIHVzZSAtLWRpc2FibGUtZW1iZWRkZWQtcGVybCB0byB0dXJuIG9mZiBlbWJlZGRlZCBQZXJsIGZ1bmN0aW9uYWxpdHkgYWx0b2dldGhlci5dKQotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBBQ19ERUZJTkUoTkVUU05NUF9FTUJFRERFRF9QRVJMKQotICAgICAgT1RIRVJBR0VOVExJQk9CSlM9InNubXBfcGVybC5vIgotICAgICAgT1RIRVJBR0VOVExJQkxPQkpTPSJzbm1wX3BlcmwubG8iCi0KLSAgICAgIEVNQkVEUEVSTElOU1RBTEw9ImVtYmVkcGVybGluc3RhbGwiCi0gICAgICBFTUJFRFBFUkxVTklOU1RBTEw9ImVtYmVkcGVybHVuaW5zdGFsbCIKLSAgICAgICMgeWF5LCB3ZSBnb3QgaGVyZSEKLSAgICAgIGVtYmVkX3Blcmw9InllcyIKLSAgICBmaQotZWxzZQotICAgICAgRU1CRURQRVJMSU5TVEFMTD0iIgotICAgICAgRU1CRURQRVJMVU5JTlNUQUxMPSIiCi0gICAgICBlbWJlZF9wZXJsPSJubyIKLSAgICBmaQotZmkKLUFDX1NVQlNUKEVNQkVEUEVSTElOU1RBTEwpCi1BQ19TVUJTVChFTUJFRFBFUkxVTklOU1RBTEwpCi1BQ19TVUJTVChQRVJMTERPUFRTX0ZPUl9MSUJTKQotQUNfU1VCU1QoUEVSTExET1BUU19GT1JfQVBQUykKLQotIyBlbWJlZGRlZCBQZXJsIHJlc3VsdHMKLUFDX01TR19DSEVDS0lORyhbZm9yIHBvdGVudGlhbCBlbWJlZGRlZCBQZXJsIHN1cHBvcnRdKQotaWYgdGVzdCAieCRlbWJlZF9wZXJsIiAhPSAieHllcyIgOyB0aGVuCi0gIEFDX01TR19DQUNIRV9BREQoRW1iZWRkZWQgUGVybCBzdXBwb3J0OiAgICAgIGRpc2FibGVkKQotICBBQ19NU0dfUkVTVUxUKFtkaXNhYmxlZF0pCi1lbHNlCi0gIEFDX01TR19DQUNIRV9BREQoRW1iZWRkZWQgUGVybCBzdXBwb3J0OiAgICAgIGVuYWJsZWQpCi0gIEFDX01TR19SRVNVTFQoW2VuYWJsZWRdKQotZmkKLQotIyBpbnN0YWxsIFBlcmwgbW9kdWxlIHJlc3VsdHMKLVBFUkxUQVJHUz0iIgotUEVSTElOU1RBTExUQVJHUz0iIgotUEVSTFVOSU5TVEFMTFRBUkdTPSIiCi1BQ19NU0dfQ0hFQ0tJTkcoW2lmIHdlIGNhbiBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXNdKQotaWYgdGVzdCAieCRpbnN0YWxsX3BlcmwiID0gInh5ZXMiIDsgdGhlbgotICAgIFBFUkxUQVJHUz0icGVybG1vZHVsZXMiCi0gICAgUEVSTElOU1RBTExUQVJHUz0icGVybGluc3RhbGwiCi0gICAgUEVSTFVOSU5TVEFMTFRBUkdTPSJwZXJsdW5pbnN0YWxsIgotICAgIGlmIHRlc3QgIngkZW1iZWRfcGVybCIgPSAieHllcyIgOyB0aGVuCi0gICAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBidWlsZGluZyAtLSBlbWJlZGRhYmxlKQotICAgICAgQUNfTVNHX1JFU1VMVChbeWVzIC0tIGFuZCBlbWJlZGRhYmxlXSkKLSAgICBlbHNlCi0gICAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUGVybCBtb2R1bGVzOiAgICAgICAgICBidWlsZGluZyAtLSBub3QgZW1iZWRkYWJsZSkKLSAgICAgIEFDX01TR19SRVNVTFQoW3llcyAtLSBub3QgZW1iZWRkYWJsZV0pCi0gICAgZmkKLWVsc2UKLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCi0gICAgQUNfTVNHX0NBQ0hFX0FERChTTk1QIFBlcmwgbW9kdWxlczogICAgICAgICAgZGlzYWJsZWQpCi1maQotQUNfU1VCU1QoUEVSTFRBUkdTKQotQUNfU1VCU1QoUEVSTElOU1RBTExUQVJHUykKLUFDX1NVQlNUKFBFUkxVTklOU1RBTExUQVJHUykKLUFDX1NVQlNUKFBFUkxBUkdTKQotCi0KLQotIyByZXNldCBsaWJzCi1BR0VOVExJQlM9JExJQlMKLUxJQlM9JE5PTkFHRU5UTElCUwotCi0KLQotIyBweXRob24gc3VwcG9ydAotUFlUSE9OVEFSR1M9IiIKLVBZVEhPTklOU1RBTExUQVJHUz0iIgotUFlUSE9OVU5JTlNUQUxMVEFSR1M9IiIKLVBZVEhPTkNMRUFOVEFSR1M9IiIKLUFDX01TR19DSEVDS0lORyhbaWYgd2Ugc2hvdWxkIGluc3RhbGwgdGhlIHB5dGhvbiBiaW5kaW5nc10pCi1pZiB0ZXN0ICJ4JGluc3RhbGxfcHl0aG9uIiA9ICJ4eWVzIiA7IHRoZW4KLSAgICBQWVRIT05UQVJHUz0icHl0aG9ubW9kdWxlcyIKLSAgICBQWVRIT05JTlNUQUxMVEFSR1M9InB5dGhvbmluc3RhbGwiCi0gICAgUFlUSE9OVU5JTlNUQUxMVEFSR1M9InB5dGhvbnVuaW5zdGFsbCIKLSAgICBQWVRIT05DTEVBTlRBUkdTPSJweXRob25jbGVhbiIKLSAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUHl0aG9uIG1vZHVsZXM6ICAgICAgICBidWlsZGluZyBmb3IgJFBZVEhPTlBST0cpCi0gICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKLWVsc2UKLSAgICBBQ19NU0dfQ0FDSEVfQUREKFNOTVAgUHl0aG9uIG1vZHVsZXM6ICAgICAgICBkaXNhYmxlZCkKLSAgICBBQ19NU0dfUkVTVUxUKFtub10pCi1maQotQUNfU1VCU1QoUFlUSE9OVEFSR1MpCi1BQ19TVUJTVChQWVRIT05JTlNUQUxMVEFSR1MpCi1BQ19TVUJTVChQWVRIT05VTklOU1RBTExUQVJHUykKLUFDX1NVQlNUKFBZVEhPTkNMRUFOVEFSR1MpCi1BQ19TVUJTVChQWVRIT05BUkdTKQotCi0KLQotIyBDaGVja3MgZm9yIGhlYWRlciBmaWxlcy4KLUFDX0hFQURFUl9TVERDCi1BQ19IRUFERVJfRElSRU5UCi1BQ19IRUFERVJfU1lTX1dBSVQKLUFDX0NIRUNLX0hFQURFUlMoc3RkYXJnLmggc3RyaW5nLmggZmNudGwuaCBsaW1pdHMuaCBzeXMvZmlsZS5oIHN5cy9pb2N0bC5oIHN5c2xvZy5oIHVuaXN0ZC5oIHN5cy9kbWFwLmggbWFjaGluZS9wdGUuaCB4dGkuaCBzeXMvc29ja2lvLmggc3lzL3NvY2tldC5oIHN5cy9wYXJhbS5oIHN5cy91aW8uaCkKLSMgYXQgbGVhc3QgU29sYXJpcyA5IG5lZWRzIHN5cy9zb2NrZXQuaCB0byBjb21waWxlIHN5cy9zb2NrZXR2YXIuaAotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvc29ja2V0dmFyLmgsLCwKLUFDX0lOQ0xVREVTX0RFRkFVTFQoW10pCi1bCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLV0pCi0jIGF0IGxlYXN0IE9wZW5CU0QgMy40IG5lZWRzIHN5cy9wYXJhbS5oIChNQVhQQVRITEVOKSB0byBjb21waWxlIHN5cy9zd2FwLmgKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3N3YXAuaCwsLAotQUNfSU5DTFVERVNfREVGQVVMVChbXSkKLVsKLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLV0pCi1BQ19DSEVDS19IRUFERVJTKHN5cy90aW1lb3V0Lmggc3lzL3VuLmggZnN0YWIuaCBzeXMvZnMuaCBtdGFiLmggdWZzL2ZzLmggc3lzL2ZpeHBvaW50LmggbWFjaGluZS9wYXJhbS5oIHN5cy92bS5oIHZtL3ZtLmggc3lzL3ZtbWV0ZXIuaCBzeXMvdm1wYXJhbS5oIHN5cy92bW1hYy5oIHN5cy92bXN5c3RtLmggc3lzL3RpbWUuaCBzeXMvdGltZXMuaCBzeXMvc3RhdHZmcy5oIHN5cy92ZnMuaCBzeXMvbW50dGFiLmggc3lzL3NlbGVjdC5oIG1udGVudC5oIHN5cy9tbnRlbnQuaCBrc3RhdC5oIHV0c25hbWUuaCBzeXMvdXRzbmFtZS5oIHN5cy9jZGVmcy5oIGdldG9wdC5oIGxvY2FsZS5oIHB0aHJlYWQuaCBzeXMvbG9hZGF2Zy5oIHJlZ2V4LmggbGludXgvdGFza3MuaCBwd2QuaCBncnAuaCB1dG1weC5oKQotIyBOZXR3b3JrIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlMoYXJwYS9pbmV0LmggbmV0aW5ldC9pbl9zeXN0bS5oIG5ldGluZXQvaW4uaCBuZXRpbmV0L2lwX3Zhci5oIG5ldGluZXQvdGNwLmggbmV0aW5ldC90Y3BpcC5oIG5ldGluZXQvdWRwLmggbmV0L2lmLmggbmV0aW5ldC9pbl92YXIuaCBuZXRpbmV0L2lwLmggbmV0aW5ldC9pcF9pY21wLmggbmV0L2lmX2FycC5oIG5ldC9pZl9taWIuaCBuZXQvaWZfdmFyLmggbmV0aW5ldC9pZl9ldGhlci5oIG5ldGluZXQvdGNwX3RpbWVyLmggbmV0aW5ldC90Y3BfdmFyLmggbmV0aW5ldC91ZHBfdmFyLmggbmV0aW5ldC9pY21wX3Zhci5oIG5ldGRiLmggbmV0L3JvdXRlLmgsLCwKLVtbCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVElNRU9VVF9ICi0jaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUVkFSX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0dmFyLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSU5fU1lTVE1fSAotI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9JRl9ICi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfaWNtcC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1RDUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3AuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVENQX1RJTUVSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgotI2VuZGlmCi1dXSkKLSMgVUZTIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlModWZzL3Vmcy9kaW5vZGUuaCB1ZnMvdWZzL3F1b3RhLmggdWZzL3Vmcy9pbm9kZS5oIHVmcy9mZnMvZnMuaCwsLAotW1sKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VGU19VRlNfRElOT0RFX0gKLSNpbmNsdWRlIDx1ZnMvdWZzL2Rpbm9kZS5oPgotI2VuZGlmCi0jaWYgSEFWRV9VRlNfVUZTX1FVT1RBX0gKLSNpbmNsdWRlIDx1ZnMvdWZzL3F1b3RhLmg+Ci0jZW5kaWYKLV1dKQotIyBGcmVlQlNEIHJlcXVpcmVkIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlMobWFsbG9jLmggbmV0L2lmX2RsLmggc3lzL3N5c2N0bC5oIHN0ZGxpYi5oIG5ldC9pZl90eXBlcy5oIHN5cy9xdWV1ZS5oIG9zcmVsZGF0ZS5oIG1hY2hpbmUvdHlwZXMuaCBzeXMvdXNlci5oIHN5cy9wcm9jLmggc3lzL21idWYuaCBzeXMvbW91bnQuaCBzeXMvZGtzdGF0Lmggc3lzL2NvbmYuaCwsLAotW1sKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLV1dKQotIyBMaW51eAotQUNfQ0hFQ0tfSEVBREVSUyhuZXRpbmV0L3RjcF9mc20uaCBzeXMvcHJvdG9zdy5oIG5saXN0LmggaW9jdGxzLmggYXNtL3BhZ2UuaCBhc20vdHlwZXMuaCBuZXRpcHgvaXB4LmggcGNpL3BjaS5oKQotIyBTb2xhcmlzCi1BQ19DSEVDS19IRUFERVJTKGluZXQvbWliMi5oKQotIyBOZXRCU0QgcmVxdWlyZWQgaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyhrdm0uaCBzeXMvcG9vbC5oIHV2bS91dm1fcGFyYW0uaCB1dm0vdXZtX2V4dGVybi5oIHZtL3ZtX3BhcmFtLmggdm0vdm1fZXh0ZXJuLmgpCi0jIEJTRGkyIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlModm0vc3dhcF9wYWdlci5oLCwsCi1bWwotI2lmIEhBVkVfVk1fVk1fSAotI2luY2x1ZGUgPHZtL3ZtLmg+Ci0jZW5kaWYKLV1dKQotIyBsaW51eCBldGh0b29sCi0jIHJlcXVpcmVzIHNwZWNpYWwgaGFja3MgdG8gZ2V0IGFyb3VuZCB2YXJpb3VzIHByb2JsZW1zIG9uIG9sZGVyIGxpbnV4IGtlcm5lbHMuCi0jIG1ham9yIHVnaC4uLi4KLUFDX0NIRUNLX0hFQURFUlMoW2xpbnV4L2V0aHRvb2wuaF0sLCwKLVtbCi0jaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLXR5cGVkZWYgX191NjQgdTY0OyAgICAgICAgIC8qIGhhY2ssIHNvIHdlIG1heSBpbmNsdWRlIGtlcm5lbCdzIGV0aHRvb2wuaCAqLwotdHlwZWRlZiBfX3UzMiB1MzI7ICAgICAgICAgLyogZGl0dG8gKi8KLXR5cGVkZWYgX191MTYgdTE2OyAgICAgICAgIC8qIGRpdHRvICovCi10eXBlZGVmIF9fdTggdTg7ICAgICAgICAgICAvKiBkaXR0byAqLwotXV0pCi0jIEJTRGkzIGhlYWRlcnMKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3N0YXQuaCkKLSMgQlNEaTMvSVJJWCBoZWFkZXJzCi0jIGF0IGxlYXN0IElSSVggNi41IG5lZWRzIF9LTUVNVVNFUiBhbmQgc3lzL3R5cGVzLmggKG1wcm90X3QpIHRvIGNvbXBpbGUgCi0jICAgc3lzL3Zub2RlLmgKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3Zub2RlLmgsLCwKLVsKLSNkZWZpbmUgX0tNRU1VU0VSIDEKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLV0pCi0jIGF0IGxlYXN0IElSSVggNi41IG5lZWRzIHN5cy9zZW1hLmggKG1ybG9ja190KSB0byBjb21waWxlIHN5cy9oYXNoaW5nLmgKLUFDX0NIRUNLX0hFQURFUlMoc3lzL3NlbWEuaCkKLUFDX0NIRUNLX0hFQURFUlMoc3lzL2hhc2hpbmcuaCwsLAotQUNfSU5DTFVERVNfREVGQVVMVChbXSkKLVsKLSNpZiBIQVZFX1NZU19TRU1BX0gKLSNpbmNsdWRlIDxzeXMvc2VtYS5oPgotI2VuZGlmCi1dKQotIyBtb3JlIElSSVggaGVhZGVycwotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvdGNwaXBzdGF0cy5oIHN5cy9zeXNtcC5oIHN5cy9zeXN0ZW1pbmZvLmggc3lzL3N5c2dldC5oKQotIyBBSVggc3lzdGVtIGNvbmZpZ3VyYXRpb24KLUFDX0NIRUNLX0hFQURFUlMoc3lzL3N5c3RlbWNmZy5oKQotIyBmcm9tIHNtdXggc3R1ZmYKLUFDX0NIRUNLX0hFQURFUlMoZXJyLmggc3lzL2ZpbGlvLmggc2d0dHkuaCkKLSMgQUlYIG5lZWRzIHRoaXMgZm9yIHN0YXRmcyBmdW5jCi1BQ19DSEVDS19IRUFERVJTKHN5cy9zdGF0ZnMuaCkKLSMgZm9yIEhvc3RSZXMgKEhQLVVYIGF0IGxlYXN0KQotQUNfQ0hFQ0tfSEVBREVSUyhzeXMvZGtpby5oIHN5cy9kaXNraW8uaCBzeXMvcHN0YXQuaCBsaW51eC9oZHJlZy5oIHBrZ2xvY3MuaCkKLSMgZm9yIEhvc3RSZXMgKFNvbGFyaXMgMi54IGF0IGxlYXN0KQotQUNfQ0hFQ0tfSEVBREVSUyhwa2dpbmZvLmgsCi0gICAgQUNfQ0hFQ0tfTElCKGFkbSwgcGtnaW5mbywgQUNfREVGSU5FKEhBVkVfUEtHSU5GTykKLSAgICBMTUlCTElCUz0iJHtMTUlCTElCU30gLWxhZG0iKSkKLQotY2FzZSAkdGFyZ2V0X29zIGluCi0gICAgYWl4KikgIyBBSVggcGVyZnN0YXQgbGlicmFyeSwgbmVlZGVkIGZvciBDUFUvbWVtb3J5IHN0YXRpc3RpY3MKLSAgICAgICAgQUNfQ0hFQ0tfSEVBREVSUyhsaWJwZXJmc3RhdC5oLAotICAgICAgICAgICAgQUNfQ0hFQ0tfTElCKHBlcmZzdGF0LCBwZXJmc3RhdF9jcHVfdG90YWwsIEFDX0RFRklORShIQVZFX1BFUkZTVEFUKQotICAgICAgICAgICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1scGVyZnN0YXQiKSwgQUNfTVNHX0VSUk9SKFsKLQotKioqIFRvIG1vbml0b3IgQ1BVL21lbW9yeSB2YWx1ZXMgaW4gQUlYIHlvdSBuZWVkIHRvIGluc3RhbGwKLSoqKiBsaWJwZXJmc3RhdCB3aGljaCBjYW4gYmUgZm91bmQgaW4gYm9zLnBlcmYKLV0pKQotICAgICAgICA7OwotICAgIGhwdXgqKSAjIEhQLVVYIGFnZW50IG5lZWRzIG9wZW5fbWliCi0gICAgICAgIEFDX0NIRUNLX0xJQihubSwgb3Blbl9taWIsIEFDX0RFRklORShIQVZFX0xJQk5NKQotICAgICAgICAgICAgTE1JQkxJQlM9IiR7TE1JQkxJQlN9IC1sbm0iKQotICAgICAgICA7OwotICAgICopCi0gICAgICAgIDs7Ci1lc2FjCi0jIFdJTjMyCi0jIChtaW5ndzMyIG11c3QgbGluayB3aW5zb2NrIGV4cGxpY2l0bHkpCi1BQ19DSEVDS19IRUFERVJTKHdpbnNvY2suaCxbCi0gICAgICAgIEFHRU5UTElCUz0iJHtBR0VOVExJQlN9IC1saXBobHBhcGkiCi0gICAgICAgIGNhc2UgJHRhcmdldF9vcyBpbgotICAgICAgICAgICAgICAgIG1pbmd3KikKLSAgICAgICAgICAgICAgICAgICAgICAgIExJQlM9IiR7TElCU30gLWxyZWdleCAtbHdzMl8zMiIKLSAgICAgICAgICAgICAgICAgICAgICAgIEFHRU5UTElCUz0iJHtBR0VOVExJQlN9IC1scmVnZXggLWx3czJfMzIiCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgICopCi0gICAgICAgICAgICAgICAgICAgICAgICA7OwotICAgICAgICBlc2FjCi1dKQotQUNfQ0hFQ0tfSEVBREVSUyhpby5oKQotIyBTQ08KLUFDX0NIRUNLX0hFQURFUlMoc3lzL3N0cmVhbS5oKQotIyBLQU1FCi1BQ19DSEVDS19IRUFERVJTKG5ldGluZXQvaXA2LmggbmV0aW5ldDYvaW42X3Zhci5oIG5ldGluZXQ2L2luNl9wY2IuaCBuZXRpbmV0Ni9pcDZfdmFyLmggbmV0aW5ldDYvdGNwNi5oIG5ldGluZXQ2L3RjcDZfZnNtLmggbmV0aW5ldDYvbmQ2LmggbmV0aW5ldDYvdGNwNl90aW1lci5oIG5ldGluZXQ2L3RjcDZfdmFyLmgsLCwKLVtbCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfUVVFVUVfSAotI2luY2x1ZGUgPHN5cy9xdWV1ZS5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVA2X0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwNi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfSUZfSAotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRfUk9VVEVfSAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotI2VuZGlmCi1dXSkKLSMgRFlOQU1JQyBNT0RVTEUgU1VQUE9SVAotQUNfQ0hFQ0tfSEVBREVSUyhkbGZjbi5oKQotIyB0YWJsZV9hcnJheSBoZWxwZXIgc3VwcG9ydAotQUNfQ0hFQ0tfSEVBREVSUyhzZWFyY2guaCkKLQotIyBSUE0gc3ViZGlyZWN0b3J5IHBhdGggKHNpZ2gpCi1pZiB0ZXN0ICJ4JHdpdGhfcnBtIiAhPSAieG5vIiAmJiBcCi0gICAgICAgIGVjaG8gIiAkbW9kdWxlX2xpc3QgIiB8IGdyZXAgIiBob3N0L2hyX3N3aW5zdCAiID4gL2Rldi9udWxsOyB0aGVuCi0gIEFDX0NIRUNLX0hFQURFUlMocnBtL3JwbXRzLmgsIFtdLCBbXSwgW1sjaW5jbHVkZSA8cnBtL3JwbWxpYi5oPl1dKQotZmkKLQotIyBPcGVuQlNEIDIuNiBuZWVkcyBuZXRpbmV0L2luLmggYmVmb3JlIG5ldGluZXQvaW5fcGNiLmgKLUFDX01TR19DSEVDS0lORyhbW2ZvciBuZXRpbmV0L2luX3BjYi5oXV0pCi1BQ19DQUNIRV9WQUwoY3ZfaGF2ZV9uZXRpbmV0X2luX3BjYl9oLAotWyBBQ19UUllfQ1BQKCBbCi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW5fcGNiLmg+Ci1dLCBjdl9oYXZlX25ldGluZXRfaW5fcGNiX2g9eWVzLCBjdl9oYXZlX25ldGluZXRfaW5fcGNiX2g9bm8pXSkKLUFDX01TR19SRVNVTFQoJGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCkKLWlmIHRlc3QgJGN2X2hhdmVfbmV0aW5ldF9pbl9wY2JfaCA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9ORVRJTkVUX0lOX1BDQl9IKQotZmkKLQotIyBOZXRCU0QgbmVlZHMgbWFjaGluZS90eXBlcy5oIGJlZm9yZSBzeXMvZGlza2xhYmVsLmgKLUFDX01TR19DSEVDS0lORyhbW2ZvciBzeXMvZGlza2xhYmVsLmhdXSkKLUFDX0NBQ0hFX1ZBTChjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCwKLVsgQUNfVFJZX0NQUCggWwotI2luY2x1ZGUgPG1hY2hpbmUvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvZGlza2xhYmVsLmg+Ci1dLCBjdl9oYXZlX3N5c19kaXNrbGFiZWxfaD15ZXMsIGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oPW5vKV0pCi1BQ19NU0dfUkVTVUxUKCRjdl9oYXZlX3N5c19kaXNrbGFiZWxfaCkKLWlmIHRlc3QgJGN2X2hhdmVfc3lzX2Rpc2tsYWJlbF9oID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShIQVZFX1NZU19ESVNLTEFCRUxfSCkKLWZpCi0KLSMgT3BlblNTTAotQUNfQ0hFQ0tfSEVBREVSUyhvcGVuc3NsL2htYWMuaCBvcGVuc3NsL2V2cC5oIG9wZW5zc2wvYWVzLmggb3BlbnNzbC9kZXMuaCBvcGVuc3NsL2RoLmgpCi1BQ19DSEVDS19IRUFERVJTKHNlY3VyaXR5L2NyeXB0b2tpLmgpCi0KLSMgUHJpbnRpbmcKLUFDX1BBVEhfUFJPRyhbTFBTVEFUX1BBVEhdLGxwc3RhdCkKLWlmIHRlc3QgeCRMUFNUQVRfUEFUSCAhPSB4OyB0aGVuCi0gICAgQUNfREVGSU5FX1VOUVVPVEVEKExQU1RBVF9QQVRILCIkTFBTVEFUX1BBVEgiKQotICAgIEFDX0RFRklORShIQVZFX0xQU1RBVCkKLWZpCi1BQ19DSEVDS19GVU5DUyhjZ2V0bmV4dCkKLWlmIHRlc3QgLXIgL2V0Yy9wcmludGNhcDsgdGhlbgotICAgIEFDX0RFRklORShIQVZFX1BSSU5UQ0FQKQotZmkKLQotQUNfTVNHX0NIRUNLSU5HKFtmb3IgYXV0aGVudGljYXRpb24gc3VwcG9ydF0pCi11c2VvcGVuc3NsPW5vCi11c2Vwa2NzPW5vCi1pZiB0ZXN0ICJ4JGFjX2N2X2xpYl9wa2NzMTFfQ19Jbml0aWFsaXplIiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX3NlY3VyaXR5X2NyeXB0b2tpX2giICE9ICJ4eWVzIjsgdGhlbgotICAgIGlmIHRlc3QgIngkYXNrZWRwa2NzIiA9ICJ4eWVzIjsgdGhlbgotICAgICAgIEFDX01TR19FUlJPUihBc2tlZCB0byB1c2UgUEtDUzExIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKQotICAgIGZpCi1lbHNlCi0gICAgaWYgdGVzdCAieCRhc2tlZHBrY3MiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIHVzZXBrY3M9eWVzCi0gICAgZmkKLWZpCi0KLWlmIHRlc3QgIngkYWNfY3ZfbGliX2NyeXB0b19FVlBfbWQ1IiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyIgLW8gIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfaG1hY19oIiAhPSAieHllcyI7IHRoZW4KLSAgICBpZiB0ZXN0ICJ4JGFza2Vkb3BlbnNzbCIgPSAieHllcyI7IHRoZW4KLSAgICAgICAgQUNfTVNHX0VSUk9SKEFza2VkIHRvIHVzZSBPcGVuU1NMIGJ1dCBJIGNvdWxkbid0IGZpbmQgaXQuKQotICAgIGZpCi1lbHNlCi0gICAgaWYgdGVzdCAieCRhc2tlZG9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIHVzZW9wZW5zc2w9eWVzCi0gICAgZWxpZiB0ZXN0ICJ4JHRyeW9wZW5zc2wiID0gInh5ZXMiOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIngkdXNlcGtjcyIgIT0gInh5ZXMiOyB0aGVuCi0gICAgICAgICAgICB1c2VvcGVuc3NsPXllcwotICAgICAgICBmaQotICAgIGZpCi1maQotCi1pZiB0ZXN0ICJ4JHVzZW9wZW5zc2wiICE9ICJ4bm8iIDsgdGhlbgotICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCi0gICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCi0gICAgICAgIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX29wZW5zc2xfYWVzX2giID0gInh5ZXMiIDsgdGhlbgotICAgICAgICAgICAgZW5jcm1vZGVzPSJERVMgQUVTIgotCWVsc2UKLQkgICAgZW5jcm1vZGVzPSJERVMiCi0JZmkKLSAgICBlbHNlCi0gICAgICAgIGVuY3Jtb2Rlcz0iW2Rpc2FibGVkXSIKLSAgICBmaQotICAgIEFDX0RFRklORShORVRTTk1QX1VTRV9PUEVOU1NMKQotICAgIExORVRTTk1QTElCUz0iJExORVRTTk1QTElCUyAkTElCQ1JZUFRPIgotICAgIEFDX01TR19SRVNVTFQoT3BlblNTTCBTdXBwb3J0KQotZWxpZiB0ZXN0ICJ4JHVzZXBrY3MiICE9ICJ4bm8iIDsgdGhlbgotICAgIGF1dGhtb2Rlcz0iTUQ1IFNIQTEiCi0gICAgaWYgdGVzdCAieCRlbmFibGVfcHJpdmFjeSIgIT0gInhubyIgOyB0aGVuCi0gICAgICAgIGVuY3Jtb2Rlcz0iREVTIgotICAgIGVsc2UKLSAgICAgICAgZW5jcm1vZGVzPSJbZGlzYWJsZWRdIgotICAgIGZpCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX1BLQ1MxMSkKLSAgICBMTkVUU05NUExJQlM9IiRMTkVUU05NUExJQlMgJExJQlBLQ1MxMSIKLSAgICBBQ19NU0dfUkVTVUxUKFBLQ1MxMSBTdXBwb3J0KQotZWxpZiB0ZXN0ICJ4JGVuYWJsZV9tZDUiICE9ICJ4bm8iOyB0aGVuCi0gICAgYXV0aG1vZGVzPSJNRDUiCi0gICAgZW5jcm1vZGVzPSIiCi0gICAgQUNfREVGSU5FKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkKLSAgICBBQ19NU0dfUkVTVUxUKEludGVybmFsIE1ENSBTdXBwb3J0KQotZmkKLWlmIHRlc3QgIngkZW5hYmxlX21kNSIgPSAieG5vIjsgdGhlbgotICAgIGF1dGhtb2Rlcz1gZWNobyAkYXV0aG1vZGVzIHwgc2VkICdzL01ENSAqLy87J2AKLWZpCi1BQ19TVUJTVChMTkVUU05NUExJQlMpCi1BQ19TVUJTVChMQUdFTlRMSUJTKQotCi1BQ19NU0dfQ0FDSEVfQUREKEF1dGhlbnRpY2F0aW9uIHN1cHBvcnQ6ICAgICAkYXV0aG1vZGVzKQotQUNfTVNHX0NBQ0hFX0FERChFbmNyeXB0aW9uIHN1cHBvcnQ6ICAgICAgICAgJGVuY3Jtb2RlcykKLQotaWYgdGVzdCAieCRhbGxfd2FybmluZ3MiICE9ICJ4IjsgdGhlbgotICAgIEFDX01TR19DQUNIRV9BREQoV0FSTklORzogJGFsbF93YXJuaW5ncykKLWZpCi0KLSMgQ2hlY2tzIGZvciB0eXBlZGVmcywgc3RydWN0dXJlcywgYW5kIGNvbXBpbGVyIGNoYXJhY3RlcmlzdGljcy4KLUFDX1RZUEVfT0ZGX1QKLUFDX1RZUEVfUElEX1QKLUFDX0hFQURFUl9USU1FCi0KLSMgdGhpcyBzaG91bGQgdXNlIEFDX0NIRUNLX1RZUEUsIGJ1dCBpdCdzIGJyb2tlbiBhdCBsZWFzdCBpbiAyLjEzLTE0Ci0jIHNvIHdlIGRvIGl0IGJ5IGhhbmQuCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzb2NrbGVuX3RdKQotQUNfQ0FDSEVfVkFMKGFjX2N2X3R5cGVfJDEsCi1bQUNfRUdSRVBfQ1BQKFtzb2NrbGVuX3RAPDpAXmEtekEtWl8wLTlAOj5AXSwKLVsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgU1REQ19IRUFERVJTCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jaW5jbHVkZSA8c3RkZGVmLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZl0sIFthY19jdl90eXBlX3NvY2tsZW5fdD15ZXNdLCBbYWNfY3ZfdHlwZV9zb2NrbGVuX3Q9bm9dKV0pCi0KLUFDX01TR19SRVNVTFQoWyRhY19jdl90eXBlX3NvY2tsZW5fdF0pCi1pZiB0ZXN0ICRhY19jdl90eXBlX3NvY2tsZW5fdCA9IHllczsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9TT0NLTEVOX1QpCi1maQotCi0jIEFJWCBrZWVwcyBpbl9hZGRyX3QgaW4gL3Vzci9pbmNsdWRlL25ldGluZXQvaW4uaAotQUNfTVNHX0NIRUNLSU5HKFtmb3IgaW5fYWRkcl90XSkKLUFDX0NBQ0hFX1ZBTChhY19jdl90eXBlXyQxLAotW0FDX0VHUkVQX0NQUChbaW5fYWRkcl90QDw6QF5hLXpBLVpfMC05QDo+QF0sCi1bI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIFNURENfSEVBREVSUwotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWZdLCBbYWNfY3ZfdHlwZV9pbl9hZGRyX3Q9eWVzXSwgW2FjX2N2X3R5cGVfaW5fYWRkcl90PW5vXSldKQotCi1BQ19NU0dfUkVTVUxUKFskYWNfY3ZfdHlwZV9pbl9hZGRyX3RdKQotaWYgdGVzdCAkYWNfY3ZfdHlwZV9pbl9hZGRyX3QgPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfSU5fQUREUl9UKQotZmkKLQotIyBPbGRlciB2ZXJzaW9ucyBvZiBNaW5HVyBkbyBub3QgZGVmaW5lIHNzaXplX3QgaW4gc3lzL3R5cGVzCi1BQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzc2l6ZV90XSkKLUFDX0NBQ0hFX1ZBTChhY19jdl90eXBlXyQxLAotW0FDX0VHUkVQX0NQUChbc3NpemVfdEA8OkBeYS16QS1aXzAtOUA6PkBdLAotWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBTVERDX0hFQURFUlMKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDxzdGRkZWYuaD4KLSNlbmRpZl0sIFthY19jdl90eXBlX3NzaXplX3Q9eWVzXSwgW2FjX2N2X3R5cGVfc3NpemVfdD1ub10pXSkKLQotQUNfTVNHX1JFU1VMVChbJGFjX2N2X3R5cGVfc3NpemVfdF0pCi1pZiB0ZXN0ICRhY19jdl90eXBlX3NzaXplX3QgPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKEhBVkVfU1NJWkVfVCwgMSwgW0RlZmluZSBpZiB0eXBlIHNzaXplX3QgaXMgYXZhaWxhYmxlXSkKLWZpCi0KLSMgQ2hlY2sgcHMgYXJncwotQUNfQ0FDSEVfQ0hFQ0soW2ZvciBjb3JyZWN0IGZsYWdzIHRvIHBzXSwgYWNfY3ZfcHNfZmxhZ3MsCi1baWYgdGVzdCAiYCgkUFNQUk9HIC1lIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lIgotZWxpZiB0ZXN0ICJgKCRQU1BST0cgLWVsIDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1lbCIKLWVsaWYgdGVzdCAiYCgkUFNQUk9HIGFjeCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSJhY3giCi1lbGlmIHRlc3QgImAoJFBTUFJPRyAtYWN4IDI+JjEpIHwgJEVHUkVQICcgKHBzKSAqJCcgfCBhd2sgJ3twcmludCAkTkZ9J2AiID0gInBzIiA7IHRoZW4KLSAgYWNfY3ZfcHNfZmxhZ3M9Ii1hY3giCi1lbGlmIHRlc3QgImAoJFBTUFJPRyAtbyBwaWQsdHQsc3RhdGUsdGltZSx1Y29tbSAyPiYxKSB8ICRFR1JFUCAnIHBzICokJyB8IGF3ayAne3ByaW50ICRORn0nYCIgPSAicHMiIDsgdGhlbgotICBhY19jdl9wc19mbGFncz0iLW8gcGlkLHR0LHN0YXRlLHRpbWUsdWNvbW0iCi1lbGlmIHRlc3QgImAoJFBTUFJPRyBheCAyPiYxKSB8ICRFR1JFUCAnIChwcykgKiQnIHwgYXdrICd7cHJpbnQgJE5GfSdgIiA9ICJwcyIgOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSJheCIKLWVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhjeWd3aW4iOyB0aGVuCi0gIGFjX2N2X3BzX2ZsYWdzPSItZSIKLWVsaWYgdGVzdCAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMyIiAtbyAieCRQQVJUSUFMVEFSR0VUT1MiID0gInhtaW5ndzMybXN2YyI7IHRoZW4gCi0gIGFjX2N2X3BzX2ZsYWdzPSItZSIKLWVsc2UKLSAgQUNfTVNHX1dBUk4oW1VuYWJsZSB0byBkZXRlcm1pbmUgdmFsaWQgcHMgZmxhZ3MuLi4gIGRlZmF1bHRpbmcuLi5dKQotICBhY19jdl9wc19mbGFncz0iLWFjeCIKLWZpCi1dKQotCi1QU0NNRD0iJFBTUFJPRyAkYWNfY3ZfcHNfZmxhZ3MiCi1BQ19TVUJTVChQU0NNRCkKLUFDX0RFRklORV9VTlFVT1RFRChQU0NNRCwgIiRQU1BST0cgJGFjX2N2X3BzX2ZsYWdzIikKLQotIyBDaGVja3MgZm9yIGJ5dGUgb3JkZXIKLWlmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllczsgdGhlbgotICBpZiB0ZXN0IHgkd2l0aF9lbmRpYW5uZXNzID0geGJpZzsgdGhlbgotICAgIEFDX0RFRklORShXT1JEU19CSUdFTkRJQU4pCi0gIGVsaWYgdGVzdCAteiAkd2l0aF9lbmRpYW5uZXNzOyB0aGVuCi0gICAgQUNfTVNHX0VSUk9SKFtZb3UgYXJlIGNyb3NzLWNvbXBpbGluZywgYnV0IHlvdSBoYXZlIG5vdCBzcGVjaWZpZWQgdGhlIHRhcmdldCdzIGVuZGlhbm5lc3NdKQotICBmaQotZWxzZQotICBpZiB0ZXN0ICR3aXRoX2VuZGlhbm5lc3M7IHRoZW4KLSAgICBBQ19NU0dfRVJST1IoW0VuZGlhbm5lc3MgaGFzIGJlZW4gc3BlY2lmaWVkLCBidXQgeW91IGFyZSBub3QgY3Jvc3MtY29tcGlsaW5nLl0pCi0gIGZpCi0gIEFDX0NfQklHRU5ESUFOCi1maQotCi0jIENoZWNrcyBmb3IgbGlicmFyeSBmdW5jdGlvbnMuCi1BQ19GVU5DX0FMTE9DQQotQUNfUFJPR19HQ0NfVFJBRElUSU9OQUwKLUFDX0ZVTkNfTUVNQ01QCi1BQ19UWVBFX1NJR05BTAotQUNfRlVOQ19HRVRNTlRFTlQKLUFDX0NIRUNLX0ZVTkNTKHNldG1udGVudCBoYXNtbnRvcHQgZ2V0aG9zdG5hbWUgdW5hbWUgZ2V0dGltZW9mZGF5IHNlbGVjdCBzb2NrZXQpCi1BQ19DSEVDS19GVU5DUyhzdHJsY2F0IHN0cmxjcHkgc3RydG9sIHN0cnRvdWwpCi1BQ19DSEVDS19GVU5DUyhzdHJjaHIgc3RydG9rX3Igc3RyZHVwIG1lbWNweSBtZW1tb3ZlIGluZGV4IGJjb3B5IHN0cmNhc2VzdHIgcmVnY29tcCkKLUFDX0NIRUNLX0ZVTkNTKHNpZ25hbCBzZXRzaWQgc2lnc2V0IHNpZ2Jsb2NrIHNpZ2hvbGQgc3RyZXJyb3Igc2V0ZW52IHZzbnByaW50ZiBzbnByaW50ZikKLUFDX0NIRUNLX0ZVTkNTKHNpZ2FjdGlvbikKLUFDX0NIRUNLX0ZVTkNTKHJhbmRvbSBscmFuZDQ4IHJhbmQpCi1BQ19DSEVDS19GVU5DUyhleGVjdiBzeXN0ZW0gZm9yayBnZXRwaWQgc3RybmNhc2VjbXAgc2lnYWxybSkKLUFDX0NIRUNLX0ZVTkNTKGxzZWVrNjQgcHJlYWQ2NCkKLWlmIHRlc3QgIngkd2l0aF9ycG0iICE9ICJ4bm8iICYmIFwKLSAgICAgICAgZWNobyAiICRtb2R1bGVfbGlzdCAiIHwgZ3JlcCAiIGhvc3QvaHJfc3dpbnN0ICIgPiAvZGV2L251bGw7IHRoZW4KLSAgT0xETElCUz0kTElCUwotICBMSUJTPSRMTUlCTElCUwotICBBQ19DSEVDS19GVU5DUyhycG1HZXRQYXRoKQotICBMSUJTPSRPTERMSUJTCi1maQotCi1BQ19DSEVDS19GVU5DUyhnZXRsb2FkYXZnKQotQUNfQ0hFQ0tfRlVOQ1MoZ2V0YWRkcmluZm8gZ2V0aXBub2RlYnluYW1lIGdhaV9zdHJlcnJvcikKLSMgQlNEaTIgZnVuY3Rpb25zIGRpZmZlcgotQUNfQ0hFQ0tfRlVOQ1Moc3RhdHZmcyBzdGF0ZnMpCi1BQ19DSEVDS19GVU5DUyhnZXRkdGFibGVzaXplKQotIyBmcmVlYnNkMiBjaGVja3MKLUFDX0NIRUNLX0ZVTkNTKGdldGZzc3RhdCkKLUFDX0NIRUNLX0ZVTkNTKHVzbGVlcCkKLUFDX0NIRUNLX0ZVTkNTKHNldGxvY2FsZSkKLUFDX0NIRUNLX0ZVTkNTKHRjZ2V0YXR0cikKLUFDX0NIRUNLX0ZVTkNTKGlmX25hbWVpbmRleCBpZl9mcmVlbmFtZWluZGV4KQotQUNfQ0hFQ0tfRlVOQ1Moa2luZm9fZ2V0X2NwdXMpCi0jIHNvbGFyaXMgY2hlY2tzCi1BQ19DSEVDS19GVU5DUyhnZXRwYWdlc2l6ZSkKLUFDX0NIRUNLX0ZVTkNTKG1rc3RlbXApCi1BQ19DSEVDS19GVU5DUyhnZXRwd25hbSBnZXRncm5hbSBzZXRnaWQgc2V0dWlkIHNldGdyb3VwcykKLSMgSGlnaCByZXNvbHV0aW9uIGFsYXJtIHN1cHBvcnQKLUFDX0NIRUNLX0ZVTkNTKHNldGl0aW1lcikKLSMgZnVuY3Rpb25zIHRvIHN1cHBvcnQgdGhlIGNsb2NrLgotQUNfQ0hFQ0tfRlVOQ1MobWt0aW1lIHN0aW1lIHRpbWVzIHN5c2NvbmYpCi0jIG1pc3NpbmcgZnJvbSBocC11eAotQUNfQ0hFQ0tfRlVOQ1MoaWZfbmFtZXRvaW5kZXgpCi0jIG1pc3NpbmcgZnJvbSBNaW5HVwotQUNfQ0hFQ0tfRlVOQ1MoY2hvd24gbG9jYWx0aW1lX3IpCi0KLUFDX01TR19DSEVDS0lORyhbW2ZvciBTSU9DR0lGQUREUiBpbiBzeXMvaW9jdGwuaF1dKQotQUNfQ0FDSEVfVkFMKGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUiwKLVsgQUNfRUdSRVBfQ1BQKHh4eHllc3h4eCwKLVsKLSNpZmRlZiBIQVZFX1NZU19JT0NUTF9ICi0jaW5jbHVkZSA8c3lzL2lvY3RsLmg+Ci0jZW5kaWYKLSNpZmRlZiBTSU9DR0lGQUREUgoteHh4eWVzeHh4Ci0jZW5kaWYKLV0sIGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj15ZXMsIGN2X3N5c19pb2N0bF9oX2hhc19TSU9DR0lGQUREUj1ubyldKQotQUNfTVNHX1JFU1VMVCgkY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSKQotaWYgdGVzdCAkY3Zfc3lzX2lvY3RsX2hfaGFzX1NJT0NHSUZBRERSID0geWVzOyB0aGVuCi0gIEFDX0RFRklORShTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIpCi1maQotCi0jIHVsdHJpeAotQUNfTVNHX0NIRUNLSU5HKFtbZm9yIHR3by1hcmd1bWVudCBzdGF0ZnMgd2l0aCBzdHJ1Y3QgZnNfZGF0YSAoVWx0cml4KV1dKQotQUNfQ0FDSEVfVkFMKGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEsCi1bQUNfVFJZX1JVTihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfRlNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy9mc190eXBlcy5oPgotI2VuZGlmCi1tYWluICgpCi17Ci1zdHJ1Y3QgZnNfZGF0YSBmc2Q7Ci0vKiBVbHRyaXgncyBzdGF0ZnMgcmV0dXJucyAxIGZvciBzdWNjZXNzLAotICAgMCBmb3Igbm90IG1vdW50ZWQsIC0xIGZvciBmYWlsdXJlLiAgKi8KLWV4aXQgKHN0YXRmcyAoIi4iLCAmZnNkKSAhPSAxKTsKLX1dLAotZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT15ZXMsCi1mdV9jdl9zeXNfc3RhdF9mc19kYXRhPW5vLAotZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YT1ubyldKQotQUNfTVNHX1JFU1VMVCgkZnVfY3Zfc3lzX3N0YXRfZnNfZGF0YSkKLWlmIHRlc3QgJGZ1X2N2X3N5c19zdGF0X2ZzX2RhdGEgPSB5ZXM7IHRoZW4KLSAgQUNfREVGSU5FKFNUQVRfU1RBVEZTX0ZTX0RBVEEpCi1maQotCi0jIGNoZWNrIGlmIGNvbXBpbGVyIHByZS1wcm9jZXNzb3IgZGVmaW5lcyBfX0ZVTkNUSU9OX18KLUFDX0NBQ0hFX0NIRUNLKGlmIF9fRlVOQ1RJT05fXyBpcyBkZWZpbmVkLGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQsCi1bCi1BQ19UUllfQ09NUElMRSgsWwotICAgIGNoYXIgKmNwID0gX19GVU5DVElPTl9fOwotXSwgYWNfY3ZfSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRD15ZXMsIGFjX2N2X0hBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQ9bm8pXSkKLQotaWYgdGVzdCAieCRhY19jdl9IQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCkKLWZpCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyBvbiBTQ08gVW5peHdhcmUgNy4xLjQgKFNDTyBjb21waWxlciksICJzdGF0aWMgaW5saW5lIiBmdW5jdGlvbnMKLSMgYXJlIG5vdCBzdXBwb3J0ZWQsIHNvIHRoaXMgZGlzYWJsZXMgdGhlIHdob2xlIGlubGluZSB0aGluZyBpZiBpdAotIyBkb2Vzbid0IHdvcmsgcHJvcGVybHkuIFNob3VsZCBoYXZlIG5vIGVmZmVjdCBvbiBvdGhlciBwbGF0Zm9ybXMuCi1BQ19DQUNIRV9DSEVDSyhbW3doZXRoZXIgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgYXJlIGJyb2tlbiAoVW5peHdhcmUpXV0sCi0gICAgW25ldHNubXBfY3ZfY19icm9rZW5faW5saW5lXSwKLUFDX0NPTVBJTEVfSUZFTFNFKFtbCi1zdGF0aWMgaW5saW5lIGludCBuZXN0ZWRfaW5saW5lX2Z1bmN0aW9uKHZvaWQpIHsKLSAgcmV0dXJuIDA7Ci19Ci1pbmxpbmUgaW50IG1haW5faW5saW5lX2Z1bmN0aW9uKCB2b2lkICkgewotICByZXR1cm4gbmVzdGVkX2lubGluZV9mdW5jdGlvbigpOwotfQotXV0sIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT1ubywgbmV0c25tcF9jdl9icm9rZW5faW5saW5lPXllcykpCi0KLSMgQnV0LCBzYWRseSwgdGhlIHVzYWdlIG9mIGlubGluZSBpbiBORVRfU05NUCBkaXNhZ3JlZXMgc2VyaW91c2x5IHdpdGggYXQgbGVhc3QKLSMgc29sYXJpczIsIHNvIGRpc2FibGUgaXQgZm9yIG5vdy4KLWNhc2UgIiR0YXJnZXRfb3MiIGluCi0gICAgc29sYXJpcyopCi0gICAgICAgIG5ldHNubXBfY3ZfYnJva2VuX2lubGluZT15ZXMKLSAgICAgICAgOzsKLSAgICAqKQotICAgICAgICA7OwotZXNhYwotCi1pZiB0ZXN0ICIkbmV0c25tcF9jdl9icm9rZW5faW5saW5lIiA9IHllcyA7IHRoZW4KLSAgQUNfREVGSU5FKE5FVFNOTVBfQlJPS0VOX0lOTElORSwgMSwKLSAgICAgICAgW0RlZmluZSBpZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyBhcmUgdW5zdXBwb3J0ZWRdKQotZmkKLQotIyBvcGVuYnNkIHNlZW1zIHRvIGhhdmUgZHJvcHBlZCBtX2NsdXN0ZXJzIGFuZCBtX2NsZnJlZSBmcm9tIG1ic3RhdAotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9TWVNfTUJVRl9ICi0jaW5jbHVkZSA8c3lzL21idWYuaD4KLSNlbmRpZgotXSwgbWJzdGF0LCBtX2NsdXN0ZXJzLCBubykKLQotIyBvcGVuYnNkIHNlZW1zIHRvIGhhdmUgZHJvcHBlZCBtX21idWZzIGZyb20gbWJzdGF0IHRvbwotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9TWVNfTUJVRl9ICi0jaW5jbHVkZSA8c3lzL21idWYuaD4KLSNlbmRpZgotXSwgbWJzdGF0LCBtX21idWZzLCBubykKLQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc2lnbmFsLmg+Ci1dLCBzaWdhY3Rpb24sIHNhX3NpZ2FjdGlvbiwgbm8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotXSwgdG0sIHRtX2dtdG9mZiwgbm8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXQvaWYuaD4KLSNpZmRlZiBIQVZFX05FVF9JRl9WQVJfSAotI2luY2x1ZGUgPG5ldC9pZl92YXIuaD4KLSNlbmRpZgotXSwgaWZuZXQsIGlmX210dSkKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfaWZuZXRfaGFzX2lmX210dSIgPSAieG5vIjsgdGhlbgotQUNfQ0FDSEVfQ0hFQ0soaWYgX0tFUk5FTCBuZWVkcyB0byBiZSBkZWZpbmVkIGZvciBpZl9tdHUsIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCwKLVsKLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X2lmbmV0X2hhc19pZl9tdHUiID0gInh5ZXMiOyB0aGVuCi0gIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD1ubwotZWxzZQotQUNfVFJZX0NPTVBJTEUoWwotI2RlZmluZSBfS0VSTkVMIDEKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmZGVmIEhBVkVfTkVUX0lGX1ZBUl9ICi0jaW5jbHVkZSA8bmV0L2lmX3Zhci5oPgotI2VuZGlmCi1dLFsKLXN0cnVjdCBpZm5ldCB0ZXN0aXQ7Ci10ZXN0aXQuaWZfbXR1ID0gMDsKLV0sIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD15ZXMsIGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTD1ubykKLWZpCi1dKQotCi1pZiB0ZXN0ICJ4JGFjX2N2X0lGTkVUX05FRURTX0tFUk5FTCIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKElGTkVUX05FRURTX0tFUk5FTCkKLWZpCi1maQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLV0sIHNvY2thZGRyLCBzYV9sZW4sIG5vKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLV0sIHNvY2thZGRyLCBzYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTIsIG5vKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotXSwgc29ja2FkZHJfc3RvcmFnZSwgc3NfZmFtaWx5LCBubykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLV0sIHNvY2thZGRyX3N0b3JhZ2UsIF9fc3NfZmFtaWx5LCBubykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSwgcnRlbnRyeSwgcnRfZHN0LCBubykKLQotIyBjaGVja2luZyBmb3IgNC4zIHZzIDQuNCBydGVudHJ5LgotQUNfQ0FDSEVfQ0hFQ0sodHlwZSBvZiBydGVudHJ5IHN0cnVjdHVyZSxhY19jdl9SVEVOVFJZX1RZUEUsCi1bCi0KLSMgNC40IGNvbXBhdAotQUNfVFJZX0NPTVBJTEUoWwotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmZGVmIElGTkVUX05FRURTX0tFUk5FTAotI2RlZmluZSBLRVJORUwKLSNpZiAhZGVmaW5lZChfX0RyYWdvbkZseV9fKQotI2RlZmluZSBfS0VSTkVMIDEKLSNlbmRpZgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI3VuZGVmIEtFUk5FTAotI3VuZGVmIF9LRVJORUwKLSNpbmNsdWRlIDxuZXQvcm91dGUuaD4KLV0sWwotCi0jaWZuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKLSNkZWZpbmUgcnRfZHN0IHJ0X25vZGVzLT5ybl9rZXkKLSNlbmRpZgotCi0gIHN0cnVjdCBydGVudHJ5IHJ0OyAKLSAgcnQucnRfbm9kZXNbMF0ucm5fZmxhZ3MgPSAxOwotICBydC5ydF9kc3Q7Ci0gIF0sIGFjX2N2X1JURU5UUllfVFlQRT0iQlNELTQuNCIpCi0KLSMgNC4zIGNvbXBhdAotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gIngiOyB0aGVuCi1BQ19UUllfQ09NUElMRShbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSxbCi1zdHJ1Y3QgcnRlbnRyeSBydDsgCi1ydC5ydF9oYXNoOwotXSwgYWNfY3ZfUlRFTlRSWV9UWVBFPSJCU0QtNC4zIikKLWZpCi0KLSMgZWxzZSBhY2suCi1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieCI7IHRoZW4KLSAgQUNfTVNHX1JFU1VMVChVbmtub3duKQotICBhY19jdl9SVEVOVFJZX1RZUEU9InVua25vd24iCi1maQotCi1dKQotCi1pZiB0ZXN0ICJ4JGFjX2N2X1JURU5UUllfVFlQRSIgPSAieEJTRC00LjQiOyB0aGVuCi0gIEFDX0RFRklORShSVEVOVFJZXzRfNCkKLWZpCi0KLSMgY2hlY2tpbmcgZm9yIGFscGhhJ3Mgb3J0ZW50cnkgdnMgcnRlbnRyeQotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInh1bmtub3duIjsgdGhlbgotQUNfQ0FDSEVfQ0hFQ0soZm9yIHN0cnVjdCBydGVudHJ5LCBhY19jdl9zdHJ1Y3RfcnRlbnRyeSwKLVtBQ19FR1JFUF9DUFAob3J0ZW50cnksIFsjZGVmaW5lIEtFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSwgIGFjX2N2X3N0cnVjdF9ydGVudHJ5PW9ydGVudHJ5LCAgYWNfY3Zfc3RydWN0X3J0ZW50cnk9cnRlbnRyeSApCi1pZiB0ZXN0ICJ4JGFjX2N2X3N0cnVjdF9ydGVudHJ5IiA9ICJ4cnRlbnRyeSIgOyB0aGVuCi0gIGFjX2N2X3N0cnVjdF9ydGVudHJ5PSJydGVudHJ5IgotZWxzZQotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0ib3J0ZW50cnkiCi1maQotXSkKLWVsc2UKLSAgUlRFTlRSWV9UWVBFPSJydGVudHJ5IgotICBhY19jdl9zdHJ1Y3RfcnRlbnRyeT0icnRlbnRyeSIKLWZpCi0KLWlmIHRlc3QgIngkYWNfY3Zfc3RydWN0X3J0ZW50cnkiICE9ICJ4IjsgdGhlbgotICBBQ19ERUZJTkVfVU5RVU9URUQoUlRFTlRSWSxzdHJ1Y3QgJHthY19jdl9zdHJ1Y3RfcnRlbnRyeX0pCi1lbHNlCi0gIEFDX0RFRklORShSVEVOVFJZLHN0cnVjdCBydGVudHJ5KQotZmkKLQotIyBjaGVjayBmb3IgNC4zJ3MgcnRlbnRyeS0+cnRfbmV4dAotaWYgdGVzdCAieCRhY19jdl9SVEVOVFJZX1RZUEUiID0gInhCU0QtNC4zIjsgdGhlbgotQUNfQ0FDSEVfQ0hFQ0soZm9yIHN0cnVjdCBydGVudHJ5IGhhcyBhIHJ0X25leHQgbm9kZSwgCi0JYWNfY3Zfc3RydWN0X3J0ZW50cnlfcnRfbmV4dCwKLVsKLUFDX1RSWV9DT01QSUxFKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLFsKLXN0cnVjdCBydGVudHJ5IHJ0OyAKLXJ0LnJ0X25leHQ7Ci1dLCBhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0PXllcywgIGFjX2N2X3N0cnVjdF9ydGVudHJ5X3J0X25leHQ9bm8gKQotXSkKLQotaWYgdGVzdCAieCRhY19jdl9zdHJ1Y3RfcnRlbnRyeV9ydF9uZXh0IiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoUlRFTlRSWV9SVF9ORVhUKQotZmkKLQotZmkKLQotIyBDaGVjayBzaW42X3Njb3BlX2lkIG1lbWJlciBzcGVjaWZpZWQgaW4gUkZDMjU1MyBhZGRpdGlvbmFsbHkKLUFDX0NIRUNLX01FTUJFUlMoW3N0cnVjdCBzb2NrYWRkcl9pbjYuc2luNl9zY29wZV9pZF0sLCxbCi1BQ19JTkNMVURFU19ERUZBVUxUKCkKLVsjaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfU09DS0VUX0gKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotXV0pCi0KLSMgQ2hlY2sgc3RydWN0IHJ0ZW50cnkgZm9yIHZhcmlvdXMgdGhpbmdzLgotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSwgcnRlbnRyeSwgcnRfdW5pdCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSUZORVRfTkVFRFNfS0VSTkVMCi0jZGVmaW5lIEtFUk5FTAotI2lmICFkZWZpbmVkKF9fRHJhZ29uRmx5X18pCi0jZGVmaW5lIF9LRVJORUwgMQotI2VuZGlmCi0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jdW5kZWYgS0VSTkVMCi0jdW5kZWYgX0tFUk5FTAotI2luY2x1ZGUgPG5ldC9yb3V0ZS5oPgotXSwgcnRlbnRyeSwgcnRfcmVmY250KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLCBydGVudHJ5LCBydF9oYXNoKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSN1bmRlZiBLRVJORUwKLSN1bmRlZiBfS0VSTkVMCi0jaW5jbHVkZSA8bmV0L3JvdXRlLmg+Ci1dLCBydGVudHJ5LCBydF91c2UpCi0KLSMgQ2hlY2sgdGNwc3RhdCBmb3IgdGNwc3RhdC50Y3BfcmN2bWVtZHJvcAotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRU9VVF9ICi0jaW5jbHVkZSA8c3lzL3RpbWVvdXQuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldGluZXQvdGNwLmg+Ci0jaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9USU1FUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC90Y3BfdGltZXIuaD4KLSNlbmRpZgotCi0jaWZkZWYgSEFWRV9ORVRJTkVUX1RDUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvdGNwX3Zhci5oPgotI2VuZGlmCi1dLCB0Y3BzdGF0LCB0Y3BfcmN2bWVtZHJvcCkKLQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBJRk5FVF9ORUVEU19LRVJORUwKLSNkZWZpbmUgS0VSTkVMCi0jaWYgIWRlZmluZWQoX19EcmFnb25GbHlfXykKLSNkZWZpbmUgX0tFUk5FTCAxCi0jZW5kaWYKLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpZmRlZiBIQVZFX1NZU19USU1FX0gKLSNpbmNsdWRlIDxzeXMvdGltZS5oPgotI2VuZGlmCi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jaWZkZWYgSEFWRV9ORVRfSUZfVkFSX0gKLSNpbmNsdWRlIDxuZXQvaWZfdmFyLmg+Ci0jZW5kaWYKLV0sIGlmYWRkciwgaWZhX25leHQpCi0KLSMgQ2hlY2sgaWZuZXQgZW50cmllcyB1c2luZyBtYWNybyBkZWZpbmVkIGluIGFjbG9jYWwubTQuCi0jCi0jIFhYWCAgQnJva2VuIG9uIEZyZWVCU0Qgd2hlcmUgdGhlc2UgYXJlICNkZWZpbmUnZCBpbiA8bmV0L2lmLmg+Ci0jCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfYmF1ZHJhdGUpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfYmF1ZHJhdGUuaWZzX3ZhbHVlKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX3NwZWVkKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX3R5cGUpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfaW1jYXN0cykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9pcWRyb3BzKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX25vcHJvdG8pCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfb21jYXN0cykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl94bmFtZSxubykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9sYXN0Y2hhbmdlLnR2X3NlYykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9sYXN0Y2hhbmdlLnR2X25zZWMpCi1BQ19DSEVDS19JRk5FVF9GT1IoaWZfb2J5dGVzKQotQUNfQ0hFQ0tfSUZORVRfRk9SKGlmX2lieXRlcykKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9hZGRybGlzdCkKLUFDX0NIRUNLX0lGTkVUX0ZPUihpZl9hZGRyaGVhZC50cWhfZmlyc3QpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLV0sdWRwc3RhdCx1ZHBzX2Rpc2NhcmQpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLV0sdWRwc3RhdCx1ZHBzX25vcG9ydCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX1VEUF9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHAuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L3VkcF92YXIuaD4KLSNlbmRpZgotXSx1ZHBzdGF0LHVkcHNfbm9wb3J0YmNhc3QpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9VRFBfSAotI2luY2x1ZGUgPG5ldGluZXQvdWRwLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfVURQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC91ZHBfdmFyLmg+Ci0jZW5kaWYKLV0sdWRwc3RhdCx1ZHBzX2Z1bGxzb2NrKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaWZkZWYgSEFWRV9TWVNfVElNRV9ICi0jaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lmX2V0aGVyLmg+Ci0jZW5kaWYKLV0sYXJwaGQsYXRfbmV4dCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWYgSEFWRV9TWVNfVFlQRVNfSAotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfQ09ORl9ICi0jaW5jbHVkZSA8c3lzL2NvbmYuaD4KLSNlbmRpZgotXSxzd2RldnQsc3dfbmJsa3NlbmFibGVkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi1dLHN0YXR2ZnMsbW50X2RpcikKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotXSxzdGF0dmZzLGZfZnJzaXplKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFUVkZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdHZmcy5oPgotI2VuZGlmCi1dLHN0YXRmcyxmX2Zyc2l6ZSkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVFZGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXR2ZnMuaD4KLSNlbmRpZgotXSxzdGF0dmZzLGZfZmlsZXMpCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TVEFURlNfSAotI2luY2x1ZGUgPHN5cy9zdGF0ZnMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKLSNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNlbmRpZgotI2lmZGVmIEhBVkVfU1lTX01PVU5UX0gKLSNpbmNsdWRlIDxzeXMvbW91bnQuaD4KLSNlbmRpZgotXSxzdGF0ZnMsZl9maWxlcykKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaWZkZWYgSEFWRV9TWVNfU1RBVF9ICi0jaW5jbHVkZSA8c3lzL3N0YXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NUQVRGU19ICi0jaW5jbHVkZSA8c3lzL3N0YXRmcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfUEFSQU1fSAotI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9TWVNfTU9VTlRfSAotI2luY2x1ZGUgPHN5cy9tb3VudC5oPgotI2VuZGlmCi1dLHN0YXRmcyxmX2ZmcmVlKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZmRlZiBIQVZFX1NZU19TVEFUX0gKLSNpbmNsdWRlIDxzeXMvc3RhdC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfU1RBVEZTX0gKLSNpbmNsdWRlIDxzeXMvc3RhdGZzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19QQVJBTV9ICi0jaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX1NZU19NT1VOVF9ICi0jaW5jbHVkZSA8c3lzL21vdW50Lmg+Ci0jZW5kaWYKLV0sc3RhdGZzLGZfZmF2YWlsKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX05MSVNUX0gKLSNpbmNsdWRlIDxubGlzdC5oPgotI2VuZGlmCi1dLG5saXN0LG5fdmFsdWUpCi0KLSMgc3RydWN0IG5saXN0NjQgKElSSVgpCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpZiBIQVZFX1NZU19UWVBFU19ICi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05MSVNUX0gKLSNpbmNsdWRlIDxubGlzdC5oPgotI2VuZGlmCi1dLG5saXN0NjQsIG5fdmFsdWUpCi0KLSMgc3RydWN0IGV0aHRvb2xfY21kCi1BQ19DSEVDS19NRU1CRVJTKFtzdHJ1Y3QgZXRodG9vbF9jbWQuc3BlZWRfaGldLCwsWwotICAgIEFDX0lOQ0xVREVTX0RFRkFVTFQoKQotICAgIFsKLSNpZmRlZiBIQVZFX0xJTlVYX0VUSFRPT0xfSAotI2luY2x1ZGUgPGxpbnV4L2V0aHRvb2wuaD4KLSNlbmRpZgotICAgIF1dKQotCi0jIGNoZWNrIHN0cnVjdCBpcHN0YXQgZm9yIHZhcmlvdXMgdGhpbmdzCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2NhbnRmb3J3YXJkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2NhbnRmcmFnKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2RlbGl2ZXJlZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19mcmFnZHJvcHBlZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19mcmFndGltZW91dCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19mcmFnbWVudGVkKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX2xvY2Fsb3V0KQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX25vcHJvdG8pCi0KLUFDX0NIRUNLX1NUUlVDVF9GT1IoWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lQX1ZBUl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pcF92YXIuaD4KLSNlbmRpZgotXSwgaXBzdGF0LCBpcHNfbm9yb3V0ZSkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19vZHJvcHBlZCkKLQotQUNfQ0hFQ0tfU1RSVUNUX0ZPUihbCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVElORVRfSVBfVkFSX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2lwX3Zhci5oPgotI2VuZGlmCi1dLCBpcHN0YXQsIGlwc19vZnJhZ21lbnRzKQotCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSAotI2luY2x1ZGUgPG5ldGluZXQvaXBfdmFyLmg+Ci0jZW5kaWYKLV0sIGlwc3RhdCwgaXBzX3JlYXNzZW1ibGVkKQotCi0jIGNoZWNrIGZvciB0aGUgZGVzX2tzX3N0cnVjdC53ZWFrX2tleSBhdHRyaWJ1dGUsIHdoaWNoIGluZGljYXRlcyB0aGUgCi0jIG9sZGVyIG9wZW5zc2wgdmVyc2lvbiBpcyBiZWluZyB1c2VkLgotaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9kZXNfaCIgPSAieHllcyIgOyB0aGVuCi1BQ19DSEVDS19TVFJVQ1RfRk9SKFsKLSNpbmNsdWRlIDxvcGVuc3NsL2Rlcy5oPgotXSwgZGVzX2tzX3N0cnVjdCwgd2Vha19rZXkpCi1maQotCi0jIGF0dGVtcHQgdG8gZmlndXJlIG91dCBpZiBzeXNjdGwgaXMgdXNhYmxlCi0KLWlmIHRlc3QgJGNyb3NzX2NvbXBpbGluZyA9IHllczsgdGhlbgotICBBQ19NU0dfV0FSTihbQ2FuJ3QgY2hlY2sgc3lzY3RsLCBtYW51YWxseSBkZWZpbmUgTkVUU05NUF9DQU5fVVNFX1NZU0NUTCBpZiBwbGF0Zm9ybSBzdXBwb3J0IGF2YWlsYWJsZV0pCi1lbHNlCi0gIEFDX0NBQ0hFX0NIRUNLKGlmIHN5c2N0bCBjYW4gcmVhZCBrZXJuZWwgaW5mb3JtYXRpb24sYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTCwKLSAgW0FDX1RSWV9SVU4oWwotI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBpbmNsdWRlIDx0aW1lLmg+Ci0jZWxzZQotIyBpZiBIQVZFX1NZU19USU1FX0gKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHRpbWUuaD4KLSMgZW5kaWYKLSNlbmRpZgotI2lmIEhBVkVfU1lTX1BBUkFNX0gKLSMgaW5jbHVkZSA8c3lzL3BhcmFtLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1NZU19TWVNDVExfSAotIyBpbmNsdWRlIDxzeXMvc3lzY3RsLmg+Ci0jZW5kaWYKLQotbWFpbigpIHsKLSAgaW50ICAgICAgICAgICAgICAgICBtaWJbMl07Ci0gIHNpemVfdCAgICAgICAgICAgICAgbGVuOwotICBzdHJ1Y3QgdGltZXZhbCBib290dGltZTsKLSAgCi0gIG1pYlswXSA9IENUTF9LRVJOOwotICBtaWJbMV0gPSBLRVJOX0JPT1RUSU1FOwotICAKLSAgbGVuID0gc2l6ZW9mKGJvb3R0aW1lKTsKLSAgc3lzY3RsKG1pYiwgMiwgJmJvb3R0aW1lLCAmbGVuLCBOVUxMLCBOVUxMKTsKLSAgaWYgKGJvb3R0aW1lLnR2X3NlYyAhPSAwKQotICAgIGV4aXQoMCk7Ci0gIGVsc2UKLSAgICBleGl0KDEpOwotfQotICBdLCBhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMPXllcywgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubywgYWNfY3ZfTkVUU05NUF9DQU5fVVNFX1NZU0NUTD1ubyldKQotZmkKLQotaWYgdGVzdCAieCRhY19jdl9ORVRTTk1QX0NBTl9VU0VfU1lTQ1RMIiA9ICJ4eWVzIjsgdGhlbgotICBBQ19ERUZJTkUoTkVUU05NUF9DQU5fVVNFX1NZU0NUTCkKLWZpCi0KLSMKLSMgSW4gRnJlZUJTRCA0LngsIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGFyZW4ndC4gIFRoZXkgYXJlIGRlZmluZWQKLSMgaW4gdGVybXMgb2YgJ2h6JywgdGhlIGtlcm5lbCBjbG9jayB0aWNrLiAgSW4gdGhpcyBjYXNlLAotIyB3ZSBuZWVkIHRvIGhhdmUgYSBsb2NhbCB2YXJpYWJsZSAnaHonIGluIHNjb3BlIGFuZCBzZXQgdG8gYSB1c2VmdWwKLSMgdmFsdWUgd2hlbmV2ZXIgd2UgdXNlIG9uZSBvZiB0aGVzZSBjb25zdGFudHMuCi0jCi1BQ19DQUNIRV9DSEVDSyh3aGV0aGVyIFRDUCB0aW1lcnMgZGVwZW5kIG9uICdoeicsYWNfY3ZfVENQVFZfTkVFRFNfSFosCi1bQUNfRUdSRVBfQ1BQKGh6LAotWyNpbmNsdWRlIDxuZXRpbmV0L3RjcF90aW1lci5oPgotVENQVFZfU1JUVERGTFQKLV0sIGFjX2N2X1RDUFRWX05FRURTX0haPXllcywgYWNfY3ZfVENQVFZfTkVFRFNfSFo9bm8pXSkKLQotaWYgdGVzdCAieCRhY19jdl9UQ1BUVl9ORUVEU19IWiIgPSAieHllcyI7IHRoZW4KLSAgQUNfREVGSU5FKFRDUFRWX05FRURTX0haKQotZmkKLQotIwotIyBkZWZpbmUgdGhlIGFnZW50IGxpYnJhcmllcyB2YXJpYWJsZXMKLSMKLUFDX1NVQlNUKExNSUJMSUJTKQotQUNfU1VCU1QoQUdFTlRMSUJTKQotQUNfU1VCU1QoT1RIRVJBR0VOVExJQk9CSlMpCi1BQ19TVUJTVChPVEhFUkFHRU5UTElCTE9CSlMpCi0KLSMKLSMgUHJvbXB0IGZvciB2YXJpb3VzIGJpdHMgb2YgdXNlciBpbmZvcm1hdGlvbgotIwotCi1pZiB0ZXN0ICJ4JGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfTE9HRklMRSIgPSAieCIgLW8gIngkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9TWVNfTE9DIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1NZU19DT05UQUNUIiA9ICJ4IiAtbyAieCRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OIiA9ICJ4IjsgdGhlbgotQUNfQ0FDSEVfQ0hFQ0sod2hldGhlciB0byBwcm9tcHQgZm9yIHZhbHVlcywgYWNfY3ZfaGF2ZV93YXJuZWQsCi1bCi1pZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCi1jYXQgPDwgRU9GCi0KLQkgKioqKioqKioqKioqKiogQ29uZmlndXJhdGlvbiBTZWN0aW9uICoqKioqKioqKioqKioqCi0KLQlZb3UgYXJlIGFib3V0IHRvIGJlIHByb21wdGVkIHdpdGggYSBzZXJpZXMgb2YgcXVlc3Rpb25zLiAgQW5zd2VyCi10aGVtIGNhcmVmdWxseSwgYXMgdGhleSBkZXRlcm1pbmUgaG93IHRoZSBTTk1QIGFnZW50IGFuZCByZWxhdGVkCi1hcHBsaWNhdGlvbnMgYXJlIHRvIGZ1bmN0aW9uLgotCi0JQWZ0ZXIgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgZmluaXNoZXMsIHlvdSBjYW4gYnJvd3NlIHRoZSBuZXdseQotY3JlYXRlZCBuZXQtc25tcC1jb25maWcuaCBmaWxlIGZvciBmdXJ0aGVyIC0gbGVzcyBpbXBvcnRhbnQgLSBwYXJhbWV0ZXJzIHRvCi1tb2RpZnkuICBCZSBjYXJlZnVsIGlmIHlvdSByZS1ydW4gY29uZmlndXJlIHRob3VnaCwgc2luY2UgbmV0LXNubXAtY29uZmlnLmggCi13aWxsIGJlIG92ZXJ3cml0dGVuLgotCi0tUHJlc3MgcmV0dXJuIHRvIGNvbnRpbnVlLQotRU9GCi0KLXJlYWQgdG1waW5wdXQKLWFjX2N2X2hhdmVfd2FybmVkPSJ5ZXMiCi1lbHNlCi0gIGFjX2N2X2hhdmVfd2FybmVkPSJubyIKLWZpCi1dKQotZWxzZQotICBhY19jdl9oYXZlX3dhcm5lZD0ieWVzIgotZmkKLQotTUU9YCRXSE9BTUlgCi1pZiB0ZXN0IC1mIC9ldGMvcmVzb2x2LmNvbmY7IHRoZW4KLSAgTE9DPWBjYXQgL2V0Yy9yZXNvbHYuY29uZiB8IGdyZXAgJ15kb21haW4nIHwgdGFpbCAtMSB8IGF3ayAne3ByaW50ICRORn0nYAotZWxzZQotICBMT0M9IkBuby53aGVyZSIKLWZpCi0KLUFDX1BST01QVF9VU0VSKE5FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04sWwotCi0qKiogRGVmYXVsdCBTTk1QIFZlcnNpb246Ci0KLQlTdGFydGluZyB3aXRoIE5ldC1TTk1QIDUuMCwgeW91IGNhbiBjaG9vc2UgdGhlIGRlZmF1bHQgdmVyc2lvbiBvZgotdGhlIFNOTVAgcHJvdG9jb2wgdG8gdXNlIHdoZW4gbm8gdmVyc2lvbiBpcyBnaXZlbiBleHBsaWNpdGx5IG9uIHRoZQotY29tbWFuZCBsaW5lLCBvciB2aWEgYW4gJ3NubXAuY29uZicgZmlsZS4gIEluIHRoZSBwYXN0IHRoaXMgd2FzIHNldCB0bwotU05NUHYxLCBidXQgeW91IGNhbiB1c2UgdGhpcyB0byBzd2l0Y2ggdG8gU05NUHYzIGlmIGRlc2lyZWQuICBTTk1QdjMKLXdpbGwgcHJvdmlkZSBhIG1vcmUgc2VjdXJlIG1hbmFnZW1lbnQgZW52aXJvbm1lbnQgKGFuZCB0aHVzIHlvdSdyZQotZW5jb3VyYWdlZCB0byBzd2l0Y2ggdG8gU05NUHYzKSwgYnV0IG1heSBicmVhayBleGlzdGluZyBzY3JpcHRzIHRoYXQKLXJlbHkgb24gdGhlIG9sZCBiZWhhdmlvdXIuICAoVGhvdWdoIHN1Y2ggc2NyaXB0cyB3aWxsIHByb2JhYmx5IG5lZWQgdG8KLWJlIGNoYW5nZWQgdG8gdXNlIHRoZSAnLWMnIGNvbW11bml0eSBmbGFnIGFueXdheSwgYXMgdGhlIFNOTVB2MQotY29tbWFuZCBsaW5lIHVzYWdlIGhhcyBjaGFuZ2VkIGFzIHdlbGwuKS4KLSAgIEF0IHRoaXMgcHJvbXB0IHlvdSBjYW4gc2VsZWN0IFwiMVwiLCBcIjJcIiAoZm9yIFNOTVB2MmMpLCBvciBcIjNcIiBhcwotdGhlIGRlZmF1bHQgdmVyc2lvbiBmb3IgdGhlIGNvbW1hbmQgdG9vbHMgKHNubXBnZXQsIC4uLikgdG8gdXNlLiAgVGhpcwotY2FuIGFsd2F5cyBiZSBvdmVycmlkZGVuIGF0IHJ1bnRpbWUgdXNpbmcgdGhlIC12IGZsYWcgdG8gdGhlIHRvb2xzLCBvcgotYnkgdXNpbmcgdGhlIFwiZGVmVmVyc2lvblwiIHRva2VuIGluIHlvdXIgc25tcC5jb25mIGZpbGUuCi0gICBQcm92aWRpbmcgdGhlIC0td2l0aC1kZWZhdWx0LXNubXAtdmVyc2lvbj1cInhcIiBwYXJhbWV0ZXIgdG8gLi9jb25maWd1cmUKLXdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLURlZmF1bHQgdmVyc2lvbiBvZiBTTk1QIHRvIHVzZV0sMyx1bnF1b3RlZCkKLQotIyB3ZSB0ZXN0ZWQgdGhpcyBhYm92ZSBiZWZvcmUgdGhlIHByb21wdCwgYnV0IHRoZSBwcm9tcHQgbWF5IGdpdmUgYSBuZXcgdmFsdWUuCi1pZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfTkVUU05NUF9ERUZBVUxUX1NOTVBfVkVSU0lPTiIgPSAiMmMiOyB0aGVuCi0gIGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT049IjIiCi1maQotaWYgdGVzdCAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIxIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIyIiAtYSAiJGFjX2N2X3VzZXJfcHJvbXB0X05FVFNOTVBfREVGQVVMVF9TTk1QX1ZFUlNJT04iICE9ICIzIjsgdGhlbgotICBBQ19NU0dfRVJST1IoW0lsbGVnYWwgdmVyc2lvbiBudW1iZXIuICBPbmx5IDEsIDIgKGZvciBTTk1QdjJjKSBhbmQgMyBhcmUgc3VwcG9ydGVkLl0pCi1maQotCi1BQ19QUk9NUFRfVVNFUihORVRTTk1QX1NZU19DT05UQUNULFsKLQotKioqIFN5c3RlbSBDb250YWN0IEluZm9ybWF0aW9uOgotCi0JRGVzY3JpYmVzIHdobyBzaG91bGQgYmUgY29udGFjdGVkIGFib3V0IHRoZSBob3N0IHRoZSBhZ2VudCBpcwotcnVubmluZyBvbi4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYXZhaWxhYmxlIGluIHRoZSBNSUItSUkgdHJlZS4gIFRoaXMKLWNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZSBcInN5c2NvbnRhY3RcIiBzeW50YXggaW4gdGhlIGFnZW50J3MKLWNvbmZpZ3VyYXRpb24gZmlsZXMuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXN5cy1jb250YWN0PVwiY29udGFjdFwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotU3lzdGVtIENvbnRhY3QgSW5mb3JtYXRpb25dLCRNRUAkTE9DLHF1b3RlZCkKLQotQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9TWVNfTE9DLFsKLQotKioqIFN5c3RlbSBMb2NhdGlvbjoKLQotCURlc2NyaWJlcyB0aGUgbG9jYXRpb24gb2YgdGhlIHN5c3RlbS4gIFRoaXMgaW5mb3JtYXRpb24gaXMKLWF2YWlsYWJsZSBpbiB0aGUgTUlCLUlJIHRyZWUuICB0aGlzIGNhbiBhbHNvIGJlIG92ZXItcmlkZGVuIHVzaW5nIHRoZQotXCJzeXNsb2NhdGlvblwiIHN5bnRheCBpbiB0aGUgYWdlbnQncyBjb25maWd1cmF0aW9uIGZpbGVzLgotICBQcm92aWRpbmcgdGhlIC0td2l0aC1zeXMtbG9jYXRpb249XCJsb2NhdGlvblwiIHBhcmFtZXRlciB0byAuL2NvbmZpZ3VyZQotd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotU3lzdGVtIExvY2F0aW9uXSxVbmtub3duLHF1b3RlZCkKLQotaWYgdGVzdCAtZCAvdmFyL2xvZzsgdGhlbgotICBkZWZhdWx0bG9nPSIvdmFyL2xvZy9zbm1wZC5sb2ciCi1lbHNlCi0gIGRlZmF1bHRsb2c9Ii91c3IvYWRtL3NubXBkLmxvZyIKLWZpCi0gIAotQUNfUFJPTVBUX1VTRVIoTkVUU05NUF9MT0dGSUxFLFsKLQotKioqIExvZ2ZpbGUgbG9jYXRpb246Ci0KLQlFbnRlciB0aGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIHNubXBkIGFnZW50IHRvIGR1bXAKLWluZm9ybWF0aW9uICYgZXJyb3JzIHRvLiAgSWYgbm90IGRlZmluZWQgKGVudGVyIHRoZSBrZXl3b3JkIFwibm9uZVwiCi1hdCB0aGUgcHJvbXB0IGJlbG93KSB0aGUgYWdlbnQgd2lsbCB1c2Ugc3Rkb3V0IGFuZCBzdGRlcnIgaW5zdGVhZC4KLShOb3RlOiBUaGlzIHZhbHVlIGNhbiBiZSBvdmVyLXJpZGRlbiB1c2luZyBjb21tYW5kIGxpbmUgb3B0aW9ucy4pCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLWxvZ2ZpbGU9XCJwYXRoXCIgcGFyYW1ldGVyIHRvIC4vY29uZmlndXJlCi13aWxsIGF2b2lkIHRoaXMgcHJvbXB0LgotCi1Mb2NhdGlvbiB0byB3cml0ZSBsb2dmaWxlXSwkZGVmYXVsdGxvZyxxdW90ZWQpCi0KLWlmIHRlc3QgLWQgL3ZhcjsgdGhlbgotICBkZWZhdWx0c3RvcmU9Ii92YXIvbmV0LXNubXAiCi0gIHVjZGRlZmF1bHRzdG9yZT0iL3Zhci91Y2Qtc25tcCIKLWVsc2UKLSAgZGVmYXVsdHN0b3JlPSIvZXRjL25ldC1zbm1wIgotICB1Y2RkZWZhdWx0c3RvcmU9Ii9ldGMvdWNkLXNubXAiCi1maQotICAKLUFDX1BST01QVF9VU0VSKE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlksWwotCi0qKiogc25tcGQgcGVyc2lzdGVudCBzdG9yYWdlIGxvY2F0aW9uOgotCi0JRW50ZXIgYSBkaXJlY3RvcnkgZm9yIHRoZSBTTk1QIGxpYnJhcnkgdG8gc3RvcmUgcGVyc2lzdGVudAotZGF0YSBpbiB0aGUgZm9ybSBvZiBhIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoaXMgZGVmYXVsdCBsb2NhdGlvbiBpcwotZGlmZmVyZW50IHRoYW4gdGhlIG9sZCBkZWZhdWx0IGxvY2F0aW9uICh3aGljaCB3YXMgZm9yIHVjZC1zbm1wKS4gIElmCi15b3Ugc3RheSB3aXRoIHRoZSBuZXcgcGF0aCwgSSdsbCBhc2sgeW91IGluIGEgc2Vjb25kIGlmIHlvdSB3aXNoIHRvCi1jb3B5IHlvdXIgZmlsZXMgb3ZlciB0byB0aGUgbmV3IGxvY2F0aW9uIChvbmNlIG9ubHkpLiAgSWYgeW91IHBpY2sKLXNvbWUgb3RoZXIgcGF0aCB0aGFuIHRoZSBkZWZhdWx0LCB5b3UnbGwgaGF2ZSB0byBjb3B5IHRoZW0geW91cnNlbGYuCi1UaGVyZSBpcyBub3RoaW5nIHdyb25nIHdpdGggcGlja2luZyB0aGUgb2xkIHBhdGggKCR1Y2RkZWZhdWx0c3RvcmUpIGlmCi15b3UnZCByYXRoZXIuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLXBlcnNpc3RlbnQtZGlyZWN0b3J5PVwicGF0aFwiIHBhcmFtZXRlciB0bwotLi9jb25maWd1cmUgd2lsbCBhdm9pZCB0aGlzIHByb21wdC4KLQotTG9jYXRpb24gdG8gd3JpdGUgcGVyc2lzdGVudCBpbmZvcm1hdGlvbl0sJGRlZmF1bHRzdG9yZSxxdW90ZWQpCi0KLVBFUlNJU1RFTlRfRElSRUNUT1JZPSRhY19jdl91c2VyX3Byb21wdF9ORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZCi1BQ19TVUJTVChQRVJTSVNURU5UX0RJUkVDVE9SWSkKLVVDRFBFUlNJU1RFTlRfRElSRUNUT1JZPSR1Y2RkZWZhdWx0c3RvcmUKLUFDX1NVQlNUKFVDRFBFUlNJU1RFTlRfRElSRUNUT1JZKQotCi1pZiB0ZXN0ICRQRVJTSVNURU5UX0RJUkVDVE9SWSA9ICIkZGVmYXVsdHN0b3JlIiAtYSAtZCAiJHVjZGRlZmF1bHRzdG9yZSIgLWEgISAtZCAiJGRlZmF1bHRzdG9yZSIgOyB0aGVuCi1BQ19DQUNIRV9DSEVDSyhJZiB3ZSBzaG91bGQgY29weSB0aGUgb2xkIHBlcnNpc3RlbnQgZGlyZWN0b3J5LCBhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMsCi1bCi1BQ19QUk9NUFRfVVNFUl9OT19ERUZJTkUoYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTLFsKLQotKioqIENvcHlpbmcgb2xkIHVjZC1zbm1wIHBlcnNpc3RlbnQgZmlsZXMgdG8gbmV0LXNubXAgcGVyc2lzdGVudCBkaXJlY3Rvcnk6Ci0KLQlXb3VsZCB5b3UgbGlrZSB0byBjb3B5IHRoZSBvbGRlciB1Y2Qtc25tcCBwZXJzaXN0ZW50IGZpbGVzCi1pbnRvIHlvdXIgbmV3IG5ldC1zbm1wIHBlcnNpc3RlbnQgZmlsZSBwYXRoPyAgVGhpcyB3aWxsIGZ1bmN0aW9uYWxseQotc2F2ZSBhbGwgeW91ciB1Y2Qtc25tcCBkYXRhIGFuZCBsZXQgaXQgYmUgdXNlZCB3aXRoaW4gdGhlIG5ldC1zbm1wCi10b29scy4gIFRoaXMgd2lsbCBvbmx5IGJlIGRvbmUgb25jZSB3aGVuIHlvdSBydW4gbWFrZSBpbnN0YWxsLiAgSWYgeW91Ci13aXNoIHRvIGRvIHRoaXMsIGVudGVyICJ5ZXMiIGF0IHRoZSBwcm9tcHQuCi0gIFByb3ZpZGluZyB0aGUgLS13aXRoLWNvcHktcGVyc2lzdGVudC1maWxlcz1cIm5vXCIgKG9yIFwieWVzXCIpCi1wYXJhbWV0ZXJzIHRvIC4vY29uZmlndXJlIHdpbGwgYXZvaWQgdGhpcyBwcm9tcHQuCi0KLUNvcHkgdWNkLXNubXAgZGF0YSBpbnRvIHRoZSBuZXQtc25tcCBkYXRhIGRpcmVjdG9yeV0sInllcyIpCi1dKQotZWxzZQotYWNfY3ZfdXNlcl9wcm9tcHRfQ09QWV9QRVJTSVNURU5UX0ZJTEVTPSJubyIKLWZpCi1DT1BZX1BFUlNJU1RFTlRfRklMRVM9IiRhY19jdl91c2VyX3Byb21wdF9DT1BZX1BFUlNJU1RFTlRfRklMRVMiCi1BQ19TVUJTVChDT1BZX1BFUlNJU1RFTlRfRklMRVMpCi0KLUFDX1NVQlNUKERMTElCUykKLQotQUNfQ09ORklHX0ZJTEVTKFtNYWtlZmlsZTpNYWtlZmlsZS50b3A6TWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQotQUNfQ09ORklHX0ZJTEVTKFtzbm1wbGliL01ha2VmaWxlOk1ha2VmaWxlLnRvcDpzbm1wbGliL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzOnNubXBsaWIvTWFrZWZpbGUuZGVwZW5kXSkKLUFDX0NPTkZJR19GSUxFUyhbYXBwcy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YXBwcy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphcHBzL01ha2VmaWxlLmRlcGVuZF0pCi1BQ19DT05GSUdfRklMRVMoW2FwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGU6TWFrZWZpbGUudG9wOmFwcHMvc25tcG5ldHN0YXQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YXBwcy9zbm1wbmV0c3RhdC9NYWtlZmlsZS5kZXBlbmRdKQotQUNfQ09ORklHX0ZJTEVTKFthZ2VudC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXM6YWdlbnQvTWFrZWZpbGUuZGVwZW5kXSkKLUFDX0NPTkZJR19GSUxFUyhbYWdlbnQvaGVscGVycy9NYWtlZmlsZTpNYWtlZmlsZS50b3A6YWdlbnQvaGVscGVycy9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9oZWxwZXJzL01ha2VmaWxlLmRlcGVuZF0pCi1BQ19DT05GSUdfRklMRVMoW2FnZW50L21pYmdyb3VwL01ha2VmaWxlOk1ha2VmaWxlLnRvcDphZ2VudC9taWJncm91cC9NYWtlZmlsZS5pbjpNYWtlZmlsZS5ydWxlczphZ2VudC9taWJncm91cC9NYWtlZmlsZS5kZXBlbmRdKQotQUNfQ09ORklHX0ZJTEVTKFtsb2NhbC9NYWtlZmlsZTpNYWtlZmlsZS50b3A6bG9jYWwvTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQotQUNfQ09ORklHX0ZJTEVTKFt0ZXN0aW5nL01ha2VmaWxlOk1ha2VmaWxlLnRvcDp0ZXN0aW5nL01ha2VmaWxlLmluXSkKLUFDX0NPTkZJR19GSUxFUyhbbWFuL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptYW4vTWFrZWZpbGUuaW46TWFrZWZpbGUucnVsZXNdKQotQUNfQ09ORklHX0ZJTEVTKFttaWJzL01ha2VmaWxlOk1ha2VmaWxlLnRvcDptaWJzL01ha2VmaWxlLmluOk1ha2VmaWxlLnJ1bGVzXSkKLUFDX0NPTkZJR19GSUxFUyhbbmV0LXNubXAtY29uZmlnOm5ldC1zbm1wLWNvbmZpZy5pbl0sCi0JCVtjaG1vZCAreCBuZXQtc25tcC1jb25maWddKQotCi1BQ19DT05GSUdfQ09NTUFORFMoW2RlZmF1bHRdLCBlY2hvIHRpbWVzdGFtcCA+IHN0YW1wLWgpCi0KLSMKLSMgcHJvdGVjdCBQQUNLQUdFXyogdmFyaWFibGVzCi0jCi1BSF9WRVJCQVRJTShbUEFDS0FHRV9CVUdSRVBPUlRdLFsvKiBEZWZpbmUgdG8gdGhlIGFkZHJlc3Mgd2hlcmUgYnVnIHJlcG9ydHMgZm9yIHRoaXMgcGFja2FnZSBzaG91bGQgYmUgc2VudC4gKi8KLSNpZm5kZWYgUEFDS0FHRV9CVUdSRVBPUlQKLSN1bmRlZiBQQUNLQUdFX0JVR1JFUE9SVAotI2VuZGlmXSkKLUFIX1ZFUkJBVElNKFtQQUNLQUdFX05BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jaWZuZGVmIFBBQ0tBR0VfTkFNRQotI3VuZGVmIFBBQ0tBR0VfTkFNRQotI2VuZGlmXSkKLUFIX1ZFUkJBVElNKFtQQUNLQUdFX1NUUklOR10sWy8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIGFuZCB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KLSNpZm5kZWYgUEFDS0FHRV9TVFJJTkcKLSN1bmRlZiBQQUNLQUdFX1NUUklORwotI2VuZGlmXSkKLUFIX1ZFUkJBVElNKFtQQUNLQUdFX1RBUk5BTUVdLFsvKiBEZWZpbmUgdG8gdGhlIG9uZSBzeW1ib2wgc2hvcnQgbmFtZSBvZiB0aGlzIHBhY2thZ2UuICovCi0jaWZuZGVmIFBBQ0tBR0VfVEFSTkFNRQotI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQotI2VuZGlmXSkKLUFIX1ZFUkJBVElNKFtQQUNLQUdFX1ZFUlNJT05dLFsvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwotI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KLSN1bmRlZiBQQUNLQUdFX1ZFUlNJT04KLSNlbmRpZl0pCi0KLUFDX09VVFBVVAotCi1BQ19NU0dfQ0FDSEVfRElTUExBWSgpCi0jIExvY2FsIFZhcmlhYmxlczoKLSMgbW9kZTogQXV0b2NvbmYKLSMgY29tbWVudC1zdGFydDogIiMiCi0jIEVuZDoKZGlmZiAtLWdpdCBhL2Rpc3QvTWFrZWZpbGUgYi9kaXN0L01ha2VmaWxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmU2YjgKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L01ha2VmaWxlCkBAIC0wLDAgKzEsMTMzIEBACisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyMgJFNvdXJjZSQKKyMgJFJldmlzaW9uJAorIyAkRGF0ZSQKKyMgJEF1dGhvciQKKyMgJE5hbWUkCisjICRTdGF0ZSQKKyMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjIE1ha2VmaWxlIGZvciBnZW5lcmF0aW5nIHJwbSBwYWNrYWdlIGZpbGVzICgucnBtKSBmb3IgbmV0LXNubXAuCisKKyMgR05VICdtYWtlJy1zcGVjaWZpYyBmZWF0dXJlcyBhcmUgdXNlZCBpbiB0aGlzIG1ha2VmaWxlLgorIyBPdGhlciBtYWtlcyBtYXkgb3IgbWF5IG5vdCB3b3JrIHdpdGggaXQuCisjIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvbWFudWFsL21ha2UvaW5kZXguaHRtbCBmb3IgZGV0YWlscy4KKworU0hFTEwgPSAvYmluL3NoCisKKyMgRGVmaW5lIHRoZSBSUE0gcGFja2FnZSBuYW1lCitOQU1FID0gbmV0LXNubXAKKworIyBEZWZpbmUgdGhlIGRlZmF1bHQgUlBNIHJlbGVhc2UgbnVtYmVyLiBTZXQgYnkgVmVyc2lvbi1NdW5nZS5wbAorVkVSU0lPTiA9IDUuNy4zLnJjMQorCitWRVJTSU9OX1RBRz1gZWNobyBFeHQtJChWRVJTSU9OKSB8IHNlZCAncy9cLi8tL2c7J2AKKworV0lUSF9QRVJMPTEKK0VNQkVEX1BFUkw9MQorCisjIERlZmluZSB0aGUgUlBNIGFyY2hpdGVjdHVyZSwgaS5lLiwgJ3BwYycsICdpMzg2JywgZXRjLgorQVJDSCA9IGB1bmFtZSAtaWAKKworIyBEaXJlY3Rvcnkgc3RydWN0dXJlIGV4cGVjdGVkIGJ5ICdycG0nIHByb2dyYW0KK1JQTV9CQVNFIDo9ICQoUFdEKS9ycG0KKworUlBNX1RSRUUgOj0gXAorICAgICQoUlBNX0JBU0UpL0JVSUxEIFwKKyAgICAkKFJQTV9CQVNFKS9SUE1TIFwKKyAgICAkKFJQTV9CQVNFKS9TT1VSQ0VTIFwKKyAgICAkKFJQTV9CQVNFKS9TUEVDUyBcCisgICAgJChSUE1fQkFTRSkvU1JQTVMKKworLlBIT05ZOglhbGwgY2xlYW4gcnBtX2ZpbGVzIGJpbmFyeV9ycG0gc291cmNlX3JwbSBhbGxfcnBtCisKK2FsbDoJYWxsX3JwbV9maWxlcworCisjIERlbGV0ZSBhbGwgZ2VuZXJhdGVkIGZpbGVzLgorY2xlYW46CisJcm0gLXJmICQoUlBNX0JBU0UpCisKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTWFjcm9zIGFuZCBydWxlcyBmb3IgdXBkYXRpbmcgbmV0LXNubXAteC54LngudGFyLmd6LgorIyAncnBtJyBleHBlY3RzIGEgY29tcHJlc3NlZCBhcmNoaXZlICgudGFyLmd6KSBvZiB0aGUgc291cmNlIGRpcmVjdG9yeQorIyB0byBleGlzdCAoaW4gdGhlIHJwbS9TT1VSQ0VTIGRpcmVjdG9yeSkgYmVmb3JlIGl0IGlzIHJ1bi4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NWU1JPT1QgPSA6cHNlcnZlcjphbm9ueW1vdXNAbmV0LXNubXAuY3ZzLnNvdXJjZWZvcmdlLm5ldDovY3Zzcm9vdC9uZXQtc25tcAorCitQS0dfVkVSIDo9ICQoTkFNRSktJChWRVJTSU9OKQorCitHWklQX1RBUiA6PSAkKFJQTV9CQVNFKS9TT1VSQ0VTLyQoUEtHX1ZFUikudGFyLmd6CisKK2d6aXBfdGFyOgkkKEdaSVBfVEFSKQorCiskKEdaSVBfVEFSKToKKwlAZWNobyAiQ3JlYXRpbmcgYSBjb21wcmVzc2VkIGFyY2hpdmUgb2YgdGhlIHBhY2thZ2UncyBzb3VyY2UgZmlsZXMuLi4iCisJKGNkICQoUlBNX0JBU0UpL1NPVVJDRVM7IFwKKwljdnMgLWQkKENWU1JPT1QpIGxvZ2luOyBcCisJY3ZzIC16MyAtZCQoQ1ZTUk9PVCkgZXhwb3J0IC1yJChWRVJTSU9OX1RBRykgJChOQU1FKTsgXAorCW12ICQoTkFNRSkgJChQS0dfVkVSKTsgXAorCXRhciBjZiAkKFBLR19WRVIpLnRhciAkKFBLR19WRVIpOyBcCisJZ3ppcCAkKFBLR19WRVIpLnRhcikKKwlAZWNobyAiQSBjb21wcmVzc2VkIGFyY2hpdmUgb2YgdGhlIHBhY2thZ2UncyBzb3VyY2UtZmlsZSB0cmVlIGhhcyBiZWVuIGNyZWF0ZWQuIgorCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE1hY3JvcyBhbmQgcnVsZXMgZm9yIHVwZGF0aW5nIHRoZSBiaW5hcnkgYW5kIHNvdXJjZSBSUE0gcGFja2FnZSBmaWxlcy4KKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVkZWZpbmUgJyVfdG9wZGlyJyB0byBhbGxvdyBhbiBSUE0gcGFja2FnZSBmaWxlIHRvIGJlIGJ1aWx0IGFueXdoZXJlLAorIyBpbnN0ZWFkIG9mIGluIHRoZSAvdXNyL3NyYy9yZWRoYXQgZGlyZWN0b3J5IHRyZWUuCisjCisjIERvbid0IHdhbnQgJ3JwbWJ1aWxkJyB0byBzdHJpcCB5b3VyIGV4ZWN1dGFibGUgcHJvZ3JhbXM/CisjIFRoZW4gYWRkIHRoaXMgbGluZToKKyMgICAtLWRlZmluZT0nX29zX2luc3RhbGxfcG9zdCAvdXNyL2xpYi9ycG0vYnJwLWNvbXByZXNzJyBcCisjIHRvIHRoZSBSUE1fT1BUUyBtYWNybyBkZWZpbml0aW9uLiAgVGhpcyB3aWxsIGVsaW1pbmF0ZSB0aGUgCisjIHN0cmlwcGluZyBvZiBiaW5hcmllcywgYnV0IHN0aWxsIHJldGFpbiB0aGUgY29tcHJlc3Npb24gb2YKKyMgbWFudWFsIHBhZ2VzLgorIworaWZlcSAoJChXSVRIX1BFUkwpLDApCitQRVJMT1BUUyA9IC0td2l0aG91dCBwZXJsX21vZHVsZXMKK2VuZGlmCitpZmVxICgkKEVNQkVEX1BFUkwpLDApCitQRVJMT1BUUyArPSAtLXdpdGhvdXQgZW1iZWRkZWRfcGVybAorZW5kaWYKKworUlBNX09QVFMgOj0gXAorICAgIC0tZGVmaW5lPSdfdG9wZGlyICQoUlBNX0JBU0UpJyBcCisgICAgLS1kZWZpbmU9J19pbmNsdWRlZGlyIC91c3IvaW5jbHVkZS9uZXQtc25tcCcgXAorICAgIC0tdGFyZ2V0ICQoQVJDSCkgJChQRVJMT1BUUykKKworU1BFQ19GSUxFICA6PSAkKE5BTUUpLnNwZWMKK1JQTV9TUEVDICAgOj0gJChSUE1fQkFTRSkvU1BFQ1MvJChTUEVDX0ZJTEUpCisKK0JJTkFSWV9SUE0gOj0gJChSUE1fQkFTRSkvUlBNUy8kKEFSQ0gpLyQoUEtHX1ZFUiktJChSRUxFQVNFKS4kKEFSQ0gpLnJwbQorU09VUkNFX1JQTSA6PSAkKFJQTV9CQVNFKS9TUlBNUy8kKFBLR19WRVIpLSQoUkVMRUFTRSkuc3JjLnJwbQorCitycG1fZmlsZXM6CSQoR1pJUF9UQVIpIGFsbF9ycG1fZmlsZXMKK2JpbmFyeV9ycG06CSQoQklOQVJZX1JQTSkKK3NvdXJjZV9ycG06CSQoU09VUkNFX1JQTSkKK3JwbV90cmVlOiAkKFJQTV9UUkVFKQorCithbGxfcnBtX2ZpbGVzOgkkKFJQTV9UUkVFKSAkKFJQTV9TUEVDKQorCShjZCAkKFJQTV9CQVNFKS9TUEVDUzsgXAorCXJwbWJ1aWxkIC1iYSAkKFJQTV9PUFRTKSAkKFNQRUNfRklMRSkpCisKKyQoQklOQVJZX1JQTSk6CSQoUlBNX1RSRUUpICQoUlBNX1NQRUMpCisJKGNkICQoUlBNX0JBU0UpL1NQRUNTOyBcCisJcnBtYnVpbGQgLWJiICQoUlBNX09QVFMpICQoU1BFQ19GSUxFKSkKKworJChTT1VSQ0VfUlBNKToJJChSUE1fVFJFRSkgJChSUE1fU1BFQykKKwkoY2QgJChSUE1fQkFTRSkvU1BFQ1M7IFwKKwlycG1idWlsZCAtYnMgJChSUE1fT1BUUykgJChTUEVDX0ZJTEUpKQorCiskKFJQTV9TUEVDKToJJChSUE1fQkFTRSkvU1BFQ1MgJChTUEVDX0ZJTEUpCisJY3AgJChTUEVDX0ZJTEUpICRACisKKyQoUlBNX1RSRUUpOgorCW1rZGlyIC1wICRACisKKyQoU1BFQ19GSUxFKToKKwlAZWNobyAiRVJST1I6IG1pc3NpbmcgJyQoU1BFQ19GSUxFKScgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IgorCUBleGl0IDEKKworRk9SQ0U6CisKKyMgPT09IEVuZCBvZiBNYWtlZmlsZSA9PT0gIwpkaWZmIC0tZ2l0IGEvZGlzdC9SRUFETUUuYnVpbGQtc2NyaXB0cyBiL2Rpc3QvUkVBRE1FLmJ1aWxkLXNjcmlwdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWUwNmRmYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvUkVBRE1FLmJ1aWxkLXNjcmlwdHMKQEAgLTAsMCArMSwxMDggQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKgorKiBSRUFETUUuYnVpbGQtc2NyaXB0cworKgorKiBBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KKyoKKyogJElkJAorKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworVGhlIGF1dG9tYXRlZCBidWlsZCBzY3JpcHQgd2lsbCBhdXRvbWF0aWNhbGx5IHJ1biBjb25maWd1cmUsICdtYWtlIGFsbCcsCisnbWFrZSB0ZXN0JyBhbmQgJ21ha2UgaW5zdGFsbCcuIExvZyBmaWxlcyBhcmUga2VwdCBmb3IgZWFjaCBzdGVwLCBhbmQgdGhlCitzY3JpcHRzIHNob3VsZCBhYm9ydCB3aGVuIGVycm9ycyBvY2N1ci4KKworVGhlIHVzYWdlIG9mIG5zYi1wYWNrYWdlIGlzOgorCisgVXNhZ2U6IG5zYi1wYWNrYWdlIFstY10gWy1kXSBbLXBdIFstcyBTUkNEXSBbLWIgQlVJTEREXSBbLWkgSU5TVEFMTERdIFZFUlNJT04KKyAgCisgICAgVkVSU0lPTiAgICA6IHJlbGVhc2UgbnVtYmVyIChlZyA1LjIuMikKKyAgICAtcyBTUkNESVIgIDogc291cmUgZGlyZWN0b3J5IFskSE9NRS9zcmMvbmV0LXNubXAtVkVSU0lPTl0KKyAgICAtYiBCVUlMREQgIDogYnVpbGQgZGlyZWN0b3J5IFskSE9NRS9idWlsZC9dCisgICAgICAgICAgICAgICAgIE5PVEUtcGxhdGZvcm0gd2lsbCBiZSBhcHBlbmRlZCB0byBidWlsZCBkaXJlY3RvcnkKKyAgICAtaSBJTlNUQUxMRDogaW5zdGFsbCBkaXJlY3RvcnkgWyRIT01FL2J1aWxkL1wkUExBVEZPUk0vdXNyL2xvY2FsXQorICAgCisgICAgLWMgOiBza2lwIGNvbmZpZ3VyZQorICAgIC1kIDogZGlydHkgYnVpbGQgKGRvbid0IG1ha2UgZGlzdGNsZWFuKQorICAgIC1tIDogc2tpcCAnbWFrZSBhbGwnCisgICAgLXAgOiBkb24ndCBwYXVzZSBhdCBwcm9tcHRzIGluIGJldHdlZW4gc3RhZ2VzCisgICAgLXQgOiBza2lwICdtYWtlIHRlc3QnCisKKworVGhlIGRlZmF1bHRzIGFzc3VtZSB5b3UgaGF2ZSBhICdzcmMnLCAnYnVpbGQnIGFuZCAnYmluYXJpZXMnIGRpcmVjdG9yeSBpbgoreW91ciBob21lIGRpcmVjdG9yeS4KKworCisKK1JlY29tbWVuZGVkIFByb2NlZHVyZQorPT09PT09PT09PT09PT09PT09PT09CisKKzEpIExvZyBpbnRvIFNvdXJjZWZvcmdlIENvbXBpbGUgRmFybSBTZXJ2ZXIKKworMikgVXBkYXRlIHNvdXJjZSAodGhpcyB3aWxsIGxpa2VseSBiZSBhdXRvbWF0ZWQgaW4gdGhlIGZ1dHVyZSkKKworICAgRm9yIGV4YW1wbGUsIGZvciByZWxlYXNlIDUuMC4zOgorCisgICAkIGNkIH4vc3JjCisgICAkIENWU19SU0g9c3NoIGN2cyAtZCAkVVNFUkBjdnMubmV0LXNubXAub3JnOi9jdnNyb290L25ldC1zbm1wIFwKKyAgICAgICAgIC1xIGNvIC1yIEV4dC01LTAtMyAtZCB+L3NyYy9uZXQtc25tcC1FeHQtNS0wLTMgbmV0LXNubXAKKworMykgUnVuIHRoZSBwYWNrYWdlIHNjcmlwdC4gCisKKyAgICQgJEhPTUUvc3JjL25ldC1zbm1wLWN2cy9kaXN0L25zYi1wYWNrYWdlIC1yIFwKKyAgICAgICAgLXMgJEhPTUUvc3JjL25ldC1zbm1wLTUuMC41IDUuMC41CisKKzQpIENyZWF0ZSB0YXJiYWxsIChhc3N1bWluZyBubyBlcnJvcnM7IHNlZSBuZXh0IHNlY3Rpb24gaWYgdGhlcmUgYXJlIGVycm9ycykKKworICAgJCBjZCB+L2J1aWxkL2Buc2ItcGxhdGZvcm1gCisgICAkIHRhciBjdmYgbmV0LXNubXAtNS4wLjMtYG5zYi1wbGF0Zm9ybWAudGFyIHVzcgorICAgJCBnemlwIC0tYmVzdCAqLnRhcgorCis1KSBDb3B5IHRhcmJhbGwgdG8gU291cmNlZm9yZ2Ugc2hlbGwgc2V2ZXIKKworICAgJCBzY3AgKi5neiBuZXQtc25tcC5zb3VyY2Vmb3JnZS5uZXQ6fi9iaW5hcmllcy8KKworNikgTG9nIG91dCBvZiBjb21waWxlIGZhcm0gc2VydmVyLCBsb2cgaW50byBzaGVsbCBzZXJ2ZXIKKworNykgVXBsb2FkIHRvIFNvdXJjZWZvcmdlCisKKyAgICQgZnRwIHVwbG9hZC5zb3VyY2Vmb3JnZS5uZXQKKyAgICAgPmJpbgorICAgICA+cHV0ICouZ3oKKworOCkgVXBkYXRlIGJpbmFyaWVzIHZpYSBTb3VyY2Vmb3JnZSBhZG1pbiBwYWdlCisKKworCitCdWlsZHMgd2l0aCBlcnJvcnMKKz09PT09PT09PT09PT09PT09PQorCitTaG91bGQgeW91IGVuY291bnRlciBhIGJ1aWxkIGVycm9yLCB5b3Ugd2lsbCBtb3N0IGxpa2VseSB3YW50IHRvIHNraXAgdGhlCisnbWFrZSBkaXN0Y2xlYW4nIGFuZCBjb25maWd1cmUgc3RlcCAoYXNzdW1pbmcgdGhlIHByb2JsZW0gd2Fzbid0IHdpdGgKK2NvbmZpZ3VyZSEpLiBUbyBkbyB0aGlzLCBzcGVjaWZ5IHRoZSAnZGlydHknIGFuZCAnc2tpcCBjb25maWd1cmUnIG9wdGlvbnM6CisKKyAgICQgbnNiLXBhY2thZ2UgLXAgLWQgLWMgRXh0LTUtMC0zCisKKworU2hvdWxkIHRoZSBidWlsZCBzdWNjZWVkLCBidXQgc29tZSB0ZXN0cyBmYWlsIGR1cmluZyAnbWFrZSB0ZXN0JywgeW91IHByb2JhYmx5CitjYW4gdG8gc2tpcCB0aGUgdGVzdCBzdGVwIHRvIGdldCB0byB0aGUgaW5zdGFsbCBzdGVwOgorCisgICAkIG5zYi1wYWNrYWdlIC1wIC1kIC1jIC10IEV4dC01LTAtMworCisKK09USEVSIFBST0JMRU1TCistLS0tLS0tLS0tLS0tLQorKiAiQ2Fubm90IGZpbmQgbnNiLWZ1bmN0aW9ucyIKKyAgCisgICBJdCdzIGEgaGFjaywgYnV0IHN5bWxpbmsgbnNiLWZ1bmN0aW9ucyBhbmQgbnNiLXBhY2thZ2UgdG8geW91ciBsb2NhbAorICAgYmluIGRpcmVjdG9yeSAoJEhPTUUvYmluKS4gIEknbSB0cnlpbmcgdG8gdGhpbmsgb2YgYSBiZXR0ZXIgc29sdXRpb24uCisKKyogImdjYzogc25tcF92ZXJzaW9uLmxvOiBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5IgorCisgICBUaGlzIGlzIGEgZ29vZCBpbmRpY2F0aW9uIHRoYXQgeW91IGhhdmUgcHJldmlvdXNseSBidWlsZCBpbiB5b3VyCisgICBzb3VyY2UgZGlyZWN0b3J5LiAnbWFrZSBkaXN0Y2xlYW4nIGluIHlvdXIgc291cmNlIGRpcmVjdG9yeSwgb3IKKyAgIGNoZWNrIG91dCBhIGZyZXNoIG5ldyB2ZXJzaW9uIGZyb20gQ1ZTLgpkaWZmIC0tZ2l0IGEvZGlzdC9SRUxFQVNFLUlOU1RSVUNUSU9OUyBiL2Rpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTZhNDE2MQotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvUkVMRUFTRS1JTlNUUlVDVElPTlMKQEAgLTAsMCArMSwxMDAxIEBACitUaGlzIGlzIGEgc3VtbWFyeSBvZiB0aGUgc3RlcHMgcmVxdWlyZWQgdG8gbWFrZSBhIG5ldyByZWxlYXNlLiAgRG8gbm90CithdHRlbXB0IHRvIHJ1biB0aGVzZSBtYW51YWxseSAtIGluc3RlYWQgdXNlIHRoZSAnbWFrZXJlbGVhc2UnCithcHBsaWNhdGlvbiBhbmQgbWFrZXJlbGVhc2UueG1sIGZpbGUuICBHZXQgJ21ha2VyZWxlYXNlJyBmcm9tIHRoZQorbWFrZXJlbGVhc2UgU1ZOIHJlcG9zaXRvcnk6CisKKyAgc3ZuIGNvIGh0dHBzOi8vbWFrZXJlbGVhc2Uuc3ZuLnNvdXJjZWZvcmdlLm5ldC9zdm5yb290L21ha2VyZWxlYXNlL3RydW5rL21ha2VyZWxlYXNlCisgIGNkIG1ha2VyZWxlYXNlCisgIHBlcmwgTWFrZWZpbGUuUEwKKyAgbWFrZQorICBzdWRvIG1ha2UgaW5zdGFsbAorCitUaGVuIHRvIHJ1biBpdCBmcm9tIGEgZGlyZWN0b3J5IHRvIHJlbGVhc2U6CisKKyAgbWFrZXJlbGVhc2UgLWMgTkVUU05NUFRSVU5LL2Rpc3QvbWFrZXJlbGVhc2UueG1sCisKK0l0IHdpbGwgcHJvbXB0IHlvdSBmb3IgYWxsIG5lZWRlZCBpbmZvcm1hdGlvbiBhbmQgdGFza3MgdG8gYmUgZG9uZS4KKworSU1QT1JUQU5UIE5PVEU6CisgICAgRG9uJ3QgKmV2ZXIqIHJlbGVhc2UgYSBzZWNvbmQgdGFyIGJhbGwgdW5kZXIgdGhlIHNhbWUgbmFtZSBhcyB0aGUKKyAgICBmaXJzdC4gIEl0J3MgbXVjaCBtdWNoIG11Y2ggYmV0dGVyIHRvIHJlbGVhc2UgYW5vdGhlciB2ZXJzaW9uCisgICAgaW5zdGVhZCwgc2luY2UgeW91IGRvbid0IGhhdmUgdG8gZmlndXJlIG91dCBmcm9tIHRoZSBidWcgcmVwb3J0cworICAgIHRoYXQgYSB1c2VyIHJlYWxseSBncmFiYmVkIHRoZSBmaXJzdCBzbmFwc2hvdCBpbnN0ZWFkIG9mIHRoZQorICAgIHNlY29uZCB3aGVuIHRoZXkgY29tcGxhaW4gYWJvdXQgdmVyc2lvbiAiWFhYIiBub3Qgd29ya2luZy4KKworPT09PT09IG1ha2VyZWxlYXNlIC1uIG91dHB1dCBzaG93aW5nIG1ha2VyZWxlYXNlIGRvY3VtZW50ZWQgc3RlcHMgPT09PT09CisKK1NURVA6IDE6IFNldHVwIFN0ZXBzCisKKyAgVGhpcyBzZXQgb2Ygc3RlcHMgd2lsbCBkbyBzb21lIHByZWxpbWluYXJ5ICJzYWZldHkiIGNoZWNrcyB0byBlbnN1cmUgdGhlCisgIGxvY2FsIGVudmlyb25tZW50IGlzIG9rIGFuZCBzZXR1cCBzb21lIGltcG9ydGFudCBpbmZvcm1hdGlvbi4KKworICA9PT09PSBFbnRlcmluZyBTdGVwOiAxID09PT09CisKK1NURVA6IDEuMTogU2V0dXAgQ2hlY2NrCisKKyAgVGhpcyBzaG91bGQgc2hvdyB0aGUgbGFzdCB2ZXJzaW9uIG51bWJlciBwdWJsaXNoZWQgaW4gdGhpcyBicmFuY2ggYnkKKyAgbG9va2luZyBhdCB0aGUgdGltZSBsaW5lIGluIHRoZSBSRUFETUUgZmlsZToKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgaGVhZCAtMSBSRUFETUUKKworU1RFUDogMS4yOiBQaWNrIGEgVmVyc2lvbiBOdW1iZXIKKworICBQbGVhc2UgZW50ZXIgdGhlIHZlcnNpb24gbnVtYmVyIHRvIHB1Ymxpc2guICBOZXQtU05NUCBjb252ZW50aW9uIGRpY3RhdGVzCisgIHRoYXQgdGhpcyBiZSBhIHZlcnNpb24gbnVtYmVyIGxpa2UgNS40IG9yIDUuNC4xLiAgUHJlLXJlbGVhc2VzIHRoYXQgb2NjdXIKKyAgYmVmb3JlIGEgYnJhbmNoIGZyZWV6ZXMgc2hvdWxkIGJlIGFwcGVuZGVkIHdpdGggIi5wcmVOIiBsaWtlIDUuNC4xLnByZTIuIAorICBSZWxlYXNlLWNhbmRpZGF0ZXMgc2hvdWxkIGJlIGxhYmVsZWQgIi5yY04iIGxpa2UgNS40LjEucmMxLgorCisgIERlY2lkZSBvbiBhIHZhbHVlIGZvciBwYXJhbWV0ZXIgJ1ZFUlNJT04nCisKKyAgICBwYXJhbWV0ZXI6IFZFUlNJT04KKworICAgIHByb21wdDogICAgRW50ZXIgdGhlIG5ldyB2ZXJzaW9uIG51bWJlcjoKKworU1RFUDogMS4zOiBEZWZpbmluZyBhIHNlY29uZCBpbnRlcm5hbCB2ZXJzaW9uIHN0cmluZworCisgIEludGVybmFsIHBlcmwgY29kZSB3aWxsIGJlIGV4ZWN1dGVkCisKK1NURVA6IDEuNDogUmVsZWFzZSBQYXJhbWV0ZXIgSW5mb3JtYXRpb24KKworICBIZXJlIGlzIHRoZSBjb25maWd1cmVkIGluZm9ybWF0aW9uIHdlJ2xsIGJlIHVzaW5nOgorCisgIFZFUlNJT046CQkgICB7VkVSU0lPTn0KKworICBWRVJTSU9OIHdpdGggZGFzaGVzOgkgICB7VkVSU0lPTkRBU0hFU30KKworICBGbG9hdGluZyBwb2ludCBWRVJTSU9OOiAge1ZFUlNJT05GTE9BVH0KKworICBTVk4gQnJhbmNoIFVSTDoJICAge0JSQU5DSFBBVEh9CisKK1NURVA6IDEuNTogdXBkYXRlCisKKyAgV2UgbmVlZCB0byBtYWtlIHN1cmUgeW91ciBjb2RlIGlzIHVwIHRvIGRhdGUgYW5kIG1hdGNoZXMgdGhlIGxhdGVzdAorICBzb3VyY2VzIGluIHRoaXMgYnJhbmNoLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gdXBkYXRlCisKK1NURVA6IDEuNjogQ2hlY2sgZm9yIGNoYW5nZXMKKworICBUaGlzIHN0ZXBzIGxvb2tzIGZvciBvdXRzdGFuZGluZyBmaWxlcyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZC4gIFRoZXJlCisgIHNob3VsZCBiZSBubyBvdXRzdGFuZGluZyBtb2RpZmljYXRpb25zISAgSWYgdGhpcyBzdGVwIGZpbmRzIG91dHN0YW5kaW5nCisgIG1vZGlmaWVkIGZpbGVzIHlvdSBuZWVkIHRvIGNoZWNrIHRoZW0gaW4gb3IgcmV2ZXJ0IHRoZW0gYmVmb3JlCisgIGNvbnRpbnVpbmchCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biAtdSBzdGF0dXMgfCBlZ3JlcCAnXlteXD9dJworCisgIChMZWF2aW5nIFN0ZXA6IDEpCisKK1NURVA6IDI6IFNvdXJjZSBDb2RlIFNldHVwCisKKyAgVGhpcyBzZXQgb2Ygc3RlcHMgd2lsbCBtb2RpZnkgdmFyaW91cyBwbGFjZXMgd2l0aGluIHRoZSBzb3VyY2UgY29kZSB0cmVlCisgIHRvIGJyaW5nIGl0IHVwIHRvIGRhdGUgd2l0aCB0aGUgbmV3IHZlcnNpb24gbnVtYmVyIGFib3V0IHRvIGJlIHB1Ymxpc2hlZC4KKworICA9PT09PSBFbnRlcmluZyBTdGVwOiAyID09PT09CisKK1NURVA6IDIuMTogTGlidG9vbCAvIExpYnJhcnkgdmVyc2lvbmluZyBzZXR1cAorCisgIFRoZXNlIHN0ZXBzIHdpbGwgbW9kaWZ5IHRoZSB2YXJpb3VzIGZpbGVzIGluIHRoZSBzb3VyY2UgdHJlZSB0aGF0IGNvbnRhaW4KKyAgdGhlIHZlcnNpb24gbnVtYmVyLCBzaG93IHlvdSB0aGUgY2hhbmdlcyB0aGF0IHdpbGwgYmUgbWFkZSBhbmQgdGhlbiBjaGVjaworICBpbiB0aGUgcmVzdWx0aW5nIGNoYW5nZXMgaWYgeW91IGFwcHJvdmUgb2YgdGhlbS4KKworICA9PT09PSBFbnRlcmluZyBTdGVwOiAyLjEgPT09PT0KKworU1RFUDogMi4xLjE6IHZlcnNpb246bGlidG9vbG1hbnVhbGVkaXQKKworICBZb3UgKG1heSkgbmVlZCB0byBlZGl0IE1ha2VmaWxlLnRvcCB0byB1cGRhdGUgdGhlIGxpYnJhcnkgdmVyc2lvbgorICBudW1iZXJpbmcgKHVzdWFsbHkganVzdCBmb3IgdGhlIGZpcnN0IHByZS1yZWxlYXNlIG9mIGEgZ2l2ZW4gdmVyc2lvbikuIAorICBTZWUgdGhlIGNvbW1lbnRzIGluIFJFTEVBU0UtSU5TVFJVQ1RJT05TIGFib3V0IExJQkNVUlJFTlQsIExJQkFHRSBhbmQKKyAgTElCUkVWSVNJT04uCisKKyAgVGhpcyBzY3JpcHQgd2lsbCBjb21taXQgdGhlIGZpbGUgZm9yIHlvdSBhZnRlciB5b3UncmUgZG9uZS4KKworU1RFUDogMi4xLjI6IHZlcnNpb246Y29tbWl0CisKKyAgV2UnbGwgbm93IGNvbW1pdCB0aGUgTWFrZWZpbGUudG9wIGZpbGUgaWYgeW91J3ZlIG1vZGlmaWVkIGl0LgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJ2ZXJzaW9uIHVwZGF0ZSIgTWFrZWZpbGUudG9wCisKKyAgKExlYXZpbmcgU3RlcDogMi4xKQorCitTVEVQOiAyLjI6IENoYW5nZSBUaGUgVmVyc2lvbiBOdW1iZXIKKworICBUaGVzZSBzdGVwcyB3aWxsIG1vZGlmeSB0aGUgdmFyaW91cyBmaWxlcyBpbiB0aGUgc291cmNlIHRyZWUgdGhhdCBjb250YWluCisgIHRoZSB2ZXJzaW9uIG51bWJlciwgc2hvdyB5b3UgdGhlIGNoYW5nZXMgdGhhdCB3aWxsIGJlIG1hZGUgYW5kIHRoZW4gY2hlY2sKKyAgaW4gdGhlIHJlc3VsdGluZyBjaGFuZ2VzIGlmIHlvdSBhcHByb3ZlIG9mIHRoZW0uCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogMi4yID09PT09CisKK1NURVA6IDIuMi4xOiBNb2RpZnkgdGhlIHNvdXJjZSBmaWxlcworCisgIFdlIHdpbGwgbm93IG1vZGlmeSBmaWxlcyB0aHJvdWdoIHRoZSBjb2RlIHRvIHJlcGxhY2UgdGhlIHZlcnNpb24gbnVtYmVyCisgIHdpdGggdGhlIG5ld2VyIG9uZS4KKworICBNb2RpZnlpbmcgZmlsZXM6CisKKyAgICByZXBsYWNpbmc6ICdWRVJTSU9OID0gJyguKiknJyB3aXRoOiAnVkVSU0lPTiA9IFwne1ZFUlNJT05GTE9BVH1cJycKKworCisgICAgZmlsZXM6ICBnbG9iPUFSUkFZKDB4OGRjOTA2NCkKKworICAgICAgcGVybC9TTk1QL1NOTVAucG0KKworICAgICAgcGVybC9hZ2VudC9hZ2VudC5wbQorCisgICAgICBwZXJsL2FnZW50L1N1cHBvcnQvU3VwcG9ydC5wbQorCisgICAgICBwZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQorCisgICAgICBwZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQorCisgICAgICBwZXJsL09JRC9PSUQucG0KKworICAgICAgcGVybC9BU04vQVNOLnBtCisKKyAgICAgIHBlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0KKworICAgICAgcGVybC9BbnlEYXRhX1NOTVAvRm9ybWF0LnBtCisKKyAgICAgIHBlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbQorCisKKworICBNb2RpZnlpbmcgZmlsZXM6CisKKyAgICByZXBsYWNpbmc6ICdOZXRTbm1wVmVyc2lvbkluZm8gPSAiW1xkXC5dKyInIHdpdGg6ICdOZXRTbm1wVmVyc2lvbkluZm8gPQorICAie1ZFUlNJT059IicKKworCisgICAgZmlsZXM6ICBnbG9iPUFSUkFZKDB4OGRjOGZkNCkKKworICAgICAgc25tcGxpYi9zbm1wX3ZlcnNpb24uYworCisKKworICBNb2RpZnlpbmcgZmlsZXM6CisKKyAgICByZXBsYWNpbmc6ICdWZXJzaW9uOiBbXC4wLTlhLXpBLVpdKycgd2l0aDogJ1ZlcnNpb246IHtWRVJTSU9OfScKKworCisgICAgZmlsZXM6ICBnbG9iPUFSUkFZKDB4OGRjOGY0NCkKKworICAgICAgUkVBRE1FCisKKyAgICAgIEZBUQorCisgICAgICBkaXN0L25ldC1zbm1wLnNwZWMKKworCisKKyAgTW9kaWZ5aW5nIGZpbGVzOgorCisgICAgcmVwbGFjaW5nOiAnVkVSU0lPTiA9IFtcLjAtOWEtekEtWl0rJyB3aXRoOiAnVkVSU0lPTiA9IHtWRVJTSU9OfScKKworCisgICAgZmlsZXM6ICBnbG9iPUFSUkFZKDB4OGRjOGVkNCkKKworICAgICAgZGlzdC9NYWtlZmlsZQorCisKKworICBNb2RpZnlpbmcgZmlsZXM6CisKKyAgICByZXBsYWNpbmc6ICdBQ19JTklUXChcW05ldC1TTk1QXF0sIFxbKFteXF1dKylcXScgd2l0aDoKKyAgJ0FDX0lOSVQoW05ldC1TTk1QXSwgW3tWRVJTSU9OfV0nCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhlNjQpCisKKyAgICAgIGNvbmZpZ3VyZS5pbgorCisKKworICBNb2RpZnlpbmcgZmlsZXM6CisKKyAgICByZXBsYWNpbmc6ICdOZXRTbm1wVmVyc2lvbkluZm8gPSAiW14iXSsiJyB3aXRoOiAnTmV0U25tcFZlcnNpb25JbmZvID0KKyAgIntWRVJTSU9OfSInCisKKworICAgIGZpbGVzOiAgZ2xvYj1BUlJBWSgweDhkYzhkZjQpCisKKyAgICAgIHNubXBsaWIvc25tcF92ZXJzaW9uLmMKKworCisKK1NURVA6IDIuMi4yOiBSdW5uaW5nIGF1dG9jb25mIHRvIHJlYnVpbGQgY29uZmlndXJlCisKKyAgV2UgbW9kaWZpZWQgY29uZmlndXJlLmluLCBzbyB3ZSBub3cgbmVlZCB0byBydW4gYXV0b2NvbmYgdG8gcmVidWlsZAorICBjb25maWd1cmUuCisKKyAgWFhYOiBpbiB0aGUgZnV0dXJlIHdlIHNob3VsZCB2ZXJpZnkgdGhlIGNvcnJlY3QgYXV0b2NvbmYgdmVyc2lvbiBudW1iZXIKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgYXV0b2NvbmYKKworU1RFUDogMi4yLjM6IFJ1bm5pbmcgc3ZuIGRpZmYgdG8gY2hlY2sgY2hhbmdlcworCisgIENoZWNrIHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBmb3IgcHJvcGVyIHZlcnNpb24gbnVtYmVyIGRpZmZlcmVuY2VzIGJlZm9yZQorICB3ZSBjb21taXQgdGhlIGNoYW5jZXMuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biBkaWZmCisKK1NURVA6IDIuMi40OiBSdW5uaW5nIHN2biBjb21taXQgdG8gY29tbWl0IHRoZSBjaGFuZ2VzCisKKyAgQ2hlY2sgdGhlIGNoYW5nZXMgaW4gdGhlIGFib3ZlIGRpZmYgYW5kIHRoZW4gd2UnbGwgY29tbWl0IHRoZSByZXN1bHRzCisgIGhlcmUgaWYgdGhleSBsb29rIG9rLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJWZXJzaW9uIG51bWJlciB1cGRhdGUiCisKKyAgKExlYXZpbmcgU3RlcDogMi4yKQorCitTVEVQOiAyLjM6IGRvY3M6bWFrZQorCisgIFRoaXMgc3RlcCB3aWxsIGNyZWF0ZSBtYW51YWwgcGFnZXMgZnJvbSBkb3h5Z2VuIGluc3RydW1lbnRlZCBjb2RlIGZpbGVzLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlIGRvY3MKKworICAgIG1ha2UgbWFuY3AKKworU1RFUDogMi40OiBkb2NzOnVwZGF0ZQorCisgIFRoaXMgd2lsbCBydW4gc3ZuIHN0YXR1cyB0byBmaWd1cmUgb3V0IHdoYXQgZmlsZXMgaGF2ZSBjaGFuZ2VkIHNpbmNlIHRoZQorICBwcmV2aW91cyBtYW4gcGFnZSBnZW5lcmF0aW9uIHN0ZXBzIHdlcmUgZG9uZS4gIEFmdGVyIHRoaXMgc3RlcCwgd2UnbGwKKyAgY29tbWl0IGFsbCB0aGUgbW9kaWZpZWQgZmlsZXMuCisKKyAgWW91IG1heSBmaW5kIGFkZGl0aW9uYWwgZmlsZXMgKG1hcmtlZCB3aXRoIGEgPykgdGhhdCBzaG91bGQgYmUgYWRkZWQgdG8KKyAgdGhlIHN2biByZXBvc2l0b3J5IGFuZCB5b3UnbGwgbmVlZCB0byBkbyB0aGlzIGJ5IGhhbmQgYmVmb3JlIGdvaW5nIG9uIHRvCisgIHRoZSBuZXh0IHN0ZXAuCisKKyAgTm90ZTogYmFzZWQgb24gYSByZWNlbnQgbmV0LXNubXAtYWRtaW4gZGlzY3Vzc2lvbiwgd2UncmUgbm8gbG9uZ2VyIGdvaW5nCisgIHRvIGJlIGFkZGluZyB0aGUgYmF6aWxsaW9ucyBvZiBtYW4gcGFnZXMgdGhhdCBkb3h5Z2VuIGdlbmVyYXRlcyBieQorICBkZWZhdWx0LiAgT25seSBpbXBvcnRhbnQgb25lcyBzaG91bGQgYmUgYWRkZWQuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biAtdSBzdGF0dXMgbWFuCisKK1NURVA6IDIuNTogZG9jczptYW51YWxhZGRuZXdtYW4KKworICBVcGRhdGUgbWFuL01ha2VmaWxlLmluIHdpdGggZGV0YWlscyBvZiBhbnkgbmV3IG1hbiBwYWdlcywgYW5kIHJ1biAnc3ZuCisgIGFkZCcgb24gdGhlbS4KKworICBJJ2xsIGNvbW1pdCB0aGVzZSBjaGFuZ2VzIGZvciB5b3UgYWZ0ZXIgeW91J3JlIGRvbmUuCisKK1NURVA6IDIuNjogZG9jczpjb21taXQKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIGNvbW1pdCAtbSAiZG9jdW1lbnRhdGlvbiB1cGRhdGUiIG1hbgorCisgIChMZWF2aW5nIFN0ZXA6IDIpCisKK1NURVA6IDM6IFRlc3RpbmcgU3RlcHMKKworICBUaGVzZSBzdGVwcyB3aWxsIGhlbHAgeW91IHRlc3QgdGhlIHNvdXJjZSBjb2RlIHRvIGVuc3VyZSBpdCBwYXNzZXMgc29tZQorICBzaW1wbGUgIml0IHdvcmtzIiB0ZXN0cy4KKworICA9PT09PSBFbnRlcmluZyBTdGVwOiAzID09PT09CisKK1NURVA6IDMuMTogYnVpbGQ6ZGlzdGNsZWFuCisKKyAgRmlyc3Qgd2UgbmVlZCB0byBjbGVhbiB0aGUgZXhpc3RpbmcgYnVpbGQgdHJlZSBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlIGRpc3RjbGVhbgorCitTVEVQOiAzLjI6IGJ1aWxkOmNvbmZpZ3VyZQorCisgIFdlIG5lZWQgdG8gcnVuIGNvbmZpZ3VyZSB0byBzZXQgdXAgdGhlIGJ1aWxkIHRyZWUuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIC4vY29uZmlndXJlIC0tY2FjaGU9Y29uZmlnLmNhY2hlIC0td2l0aC1kZWZhdWx0cworICAtLXdpdGgtbWliLW1vZHVsZXM9J2hvc3QgZXhhbXBsZXMgZXhhbXBsZXMvZXhhbXBsZSB0ZXN0aGFuZGxlciBzbXV4IFJtb24KKyAgZGlzbWFuL2V2ZW50LW1pYicgLS13aXRoLXRyYW5zcG9ydHM9SVBYIC0tZW5hYmxlLWlwdjYKKyAgLS1lbmFibGUtZW1iZWRkZWQtcGVybCAtLWVuYWJsZS1zaGFyZWQKKworU1RFUDogMy4zOiBidWlsZDptYWtlCisKKyAgVGhlbiB3ZSBuZWVkIHRvIGJ1aWxkIHRoZSBjb2RlCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIG1ha2UKKworU1RFUDogMy40OiBidWlsZDp0ZXN0CisKKyAgTm93IHdlIHJ1biAibWFrZSB0ZXN0IiB3aGljaCBzaG91bGQgcHJvZHVjZSBhIHBlcmZlY3Qgc2V0IHVwIHRlc3QKKyAgcmVzdWx0cy4gIElmIG5vdCwgdGhpcyBuZWVkcyB0byBiZSBmaXhlZCBvciBhdCBsZWFzdCB1bmRlcnN0b29kIGFuZAorICBhY2NlcHRlZCBhcyBpcyBmb3Igc29tZSBvdGhlciByZWFzb24uCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIG1ha2UgdGVzdCBURVNUT1BUUz0tbgorCitTVEVQOiAzLjU6IGNvZGU6Y2hlY2tjb21tZW50cworCisgIFRoaXMgY29tbWFuZCBsb29rcyBmb3Igc291cmNlIGNvZGUgb2RkaXRpZXMgYW5kIHBvbGljeSB2aW9sYXRpb25zLgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBtYWtlIGNoZWNrcworCisgIChMZWF2aW5nIFN0ZXA6IDMpCisKK1NURVA6IDQ6IFJlbGVhc2UgRmlsZSBTdGVwcworCisgIENlcnRhaW4gZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhbmQgYnVpbHQgb24gYSBwZXItcmVsZWFzZSBiYXNpcy4gCisgIFRoZXNlIHN0ZXBzIHdpbGwgaGVscCBzZXQgdXAgdGhlc2UgZmlsZXMuCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogNCA9PT09PQorCitTVEVQOiA0LjE6IGNvZGU6bWFrZWRlcGVuZAorCisgIFRoaXMgc3RlcCBjcmVhdGVzIE1ha2VmaWxlIGRlcGVuZGVuY2llcyB1c2luZyB0aGUgImRpc3RkZXBlbmQiIHJ1bGUgaW4KKyAgdGhlIHRvcCBsZXZlbCBNYWtlZmlsZS4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgbWFrZSBkaXN0ZGVwZW5kCisKK1NURVA6IDQuMjogY29kZTpjb21taXRkZXBlbmQKKworICBUaGlzIHN0ZXAgY29tbWl0cyB0aGUgZGVwZW5kZW5jeSBjaGFuZ2VzIGRvbmUgaW4gdGhlIHByZXZpb3VzIHN0ZXAuCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biBjb21taXQgLW0gIm1ha2UgZGVwZW5kIiBgZmluZCAuIC1uYW1lIE1ha2VmaWxlLmRlcGVuZGAKKworU1RFUDogNC4zOiBjaGFuZ2Vsb2c6c3ZuMmNsCisKKyAgV2UgbmVlZCB0byBleHRyYWN0IHRoZSBwb3J0aW9ucyBvZiB0aGUgY2hhbmdlIGxvZ3MgY29tbWl0dGVkIHRvIHRoZQorICByZXBvc2l0b3J5LgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4yY2wgLWYgQ2hhbmdlTG9nLmFkZCAtLWJyZWFrLWJlZm9yZS1tc2cgLS1zdG9wLW9uLWNvcHkKKworICAgIHBlcmwgZGlzdC9jaGFuZ2Vsb2dmaXggIDwgQ2hhbmdlTG9nLmFkZCA+IENoYW5nZUxvZy5yZWFsbHlhZGQKKworU1RFUDogNC40OiBjaGFuZ2Vsb2c6bWFudWFsZWRpdAorCisgIFlvdSBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCB0aGUgKnJlbGV2ZW50KiBwb3J0aW9ucyBvZgorICAnQ2hhbmdlTG9nLnJlYWxseWFkZCcgaW50byB0aGUgQ2hhbmdlTG9nIGZpbGUuIEknbGwgY29tbWl0IHRoZXNlIGNoYW5nZXMKKyAgZm9yIHlvdSBhZnRlciB5b3UgZmluaXNoIGN1dHRpbmcgb3V0IHRoZSBwcm9wZXIgY2hhbmdlcy4KKworU1RFUDogNC41OiBjaGFuZ2Vsb2c6Y29tbWl0CisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHN2biBjb21taXQgLW0gInZlcnNpb24gdXBkYXRlIiBDaGFuZ2VMb2cKKworU1RFUDogNC42OiBkb2NzOm5ld25ld3MKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgcGVybCBkaXN0L2V4dHJhY3RuZXdzIC1zIC0tLS0tIC1lIC0tLS0tIENoYW5nZUxvZworCitTVEVQOiA0Ljc6IGRvY3M6bmV3bmV3cworCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBwZXJsIGRpc3QvZXh0cmFjdG5ld3MgLWMgQ0hBTkdFUy5uZXcyIC1uIE5FV1MubmV3MiBDaGFuZ2VMb2cucmVhbGx5YWRkCisKK1NURVA6IDQuODogZG9jczpSRUFETUUKKworICBZb3UgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgdGhlIHJlbGV2ZW50IHBvcnRpb25zIG9mICdDSEFOR0VTLm5ldycgYW5kCisgICdORVdTLm5ldycgaW50byB0aGUgQ0hBTkdFUyBhbmQgTkVXUyBmaWxlLiAoVGhlcmUgYXJlIGFsdGVybmF0aXZlCisgIHZlcnNpb25zIGluICdDSEFOR0VTLm5ldzInIGFuZCAnTkVXUy5uZXcyJykgWW91IG1heSB3aXNoIHRvIHVwZGF0ZSB0aGUKKyAgUkVBRE1FIGZpbGUgYXMgd2VsbC4gSSdsbCBjb21taXQgdGhlc2UgY2hhbmdlcyBmb3IgeW91IGFmdGVyd2FyZHMKKworU1RFUDogNC45OiBkb2NzOmNvbW1pdAorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29tbWl0IC1tICJ2ZXJzaW9uIHVwZGF0ZSIgUkVBRE1FIE5FV1MgQ0hBTkdFUworCitTVEVQOiA0LjEwOiByZWxlYXNlOnVwZGF0ZQorCisgIE9uZSBtb3JlIHN2biB1cGRhdGUgYW5kIHN0YXR1cyB0byBtYWtlIHN1cmUgbm90aGluZyBvZGQgZXhpc3RzIGluIHlvdXIKKyAgc291cmNlIHRyZWUuCVBsZWFzZSBjaGVjayB0aGUgcmVzdWx0cyEKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3ZuIC11IHN0YXR1cworCisgIChMZWF2aW5nIFN0ZXA6IDQpCisKK1NURVA6IDU6IE1ha2UgdGhlIFJlbGVhc2UKKworICBUaGlzIGlzIGl0ISAgQWZ0ZXIgdGhpcyBwb2ludCBpdCdzIG11Y2ggaGFyZGVyIHRvIHR1cm4gYmFjay4JSWYKKyAgZXZlcnl0aGluZyBpcyBvayB1bnRpbCB0aGlzIHBvaW50IGFuZCB5b3UncmUgcmVhZHkgdG8gYWN0dWFsbHkgc3RhbXAgdGhlCisgIHJlbGVhc2UgaW4gU1ZOIGFuZCBtYWtlIHJlbGVhc2UgZmlsZXMsIHRoZXNlIHN0ZXBzIHdpbGwgZG8gdGhhdCBmb3IgeW91LgorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDUgPT09PT0KKworU1RFUDogNS4xOiByZWxlYXNlOnRhZworCisgIFRoaXMgd2lsbCBhY3R1YWxseSBzdm4gY29weSB0aGUgY3VycmVudCBjaGVja2VkIG91dCBicmFuY2ggdG8gdGhlIG5ldyB0YWcKKyAgbmFtZS4gIFNwZWNpZmljYWxseToKKworICBzdm4gY29weSB7QlJBTkNIUEFUSH0gLi4uL3RhZ3MvRXh0LXtWRVJTSU9OREFTSEVTfQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gY29weSAtbSAie1ZFUlNJT059IHJlbGVhc2UiIHtCUkFOQ0hQQVRIfQorICBodHRwczovL25ldC1zbm1wLnN2bi5zb3VyY2Vmb3JnZS5uZXQvc3Zucm9vdC9uZXQtc25tcC90YWdzL0V4dC17VkVSU0lPTkRBCisgIFNIRVN9CisKK1NURVA6IDUuMjogcmVsZWFzZTptYWtlZGlzdAorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBzdm4gZXhwb3J0CisgIGh0dHBzOi8vbmV0LXNubXAuc3ZuLnNvdXJjZWZvcmdlLm5ldC9zdm5yb290L25ldC1zbm1wL3RhZ3MvRXh0LXtWRVJTSU9OREEKKyAgU0hFU30vbmV0LXNubXAgbmV0LXNubXAte1ZFUlNJT059CisKK1NURVA6IDUuMzogcmVsZWFzZTpyZW1vdmVmaWxlcworCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBuZXQtc25tcC17VkVSU0lPTn0vcmVtb3ZlLWZpbGVzIG5ldC1zbm1wLXtWRVJTSU9OfQorCitTVEVQOiA1LjQ6IHJlbGVhc2U6bWFrZWRpc3QKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgc3RhciBhcnR5cGU9dXN0YXIgLWMgLXogLWYgbmV0LXNubXAte1ZFUlNJT059LnRhci5neiAKKyAgbmV0LXNubXAte1ZFUlNJT059CisKK1NURVA6IDUuNTogcmVsZWFzZTptYWtlemlwY2xlYW4KKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgcm0gLWYgbmV0LXNubXAte1ZFUlNJT059LnppcAorCitTVEVQOiA1LjY6IHJlbGVhc2U6bWFrZXppcAorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICB6aXAgLXIgbmV0LXNubXAte1ZFUlNJT059LnppcCAgbmV0LXNubXAte1ZFUlNJT059CisKK1NURVA6IDUuNzogcmVsZWFzZTpzZWFyY2hpbmctZ3BnLWtleXMKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZ3BnIC0tbGlzdC1zZWNyZXQta2V5cyBuZXQtc25tcC1hZG1pbgorCitTVEVQOiA1Ljg6IHJlbGVhc2U6Z3BnCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIGdwZyAtdSAzMTdGOEY2NCAtYSAtLWRldGFjaC1zaWduIG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3oKKworU1RFUDogNS45OiByZWxlYXNlOmdwZworCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBncGcgLXUgMzE3RjhGNjQgLWEgLS1kZXRhY2gtc2lnbiBuZXQtc25tcC17VkVSU0lPTn0uemlwCisKK1NURVA6IDUuMTA6IFJlbGVhc2UgRmlsZSBUZXN0CisKKyAgV2UnbGwgYWxzbyByZS1idWlsZCB0aGUgc291cmNlIGFuZCByZXRlc3QgYSBmZXcgdGhpbmdzIHRvIGVuc3VyZSB0aGUKKyAgcGFja2FnZWQgZmlsZSBjYW4gYWN0dWFsbHkgYmUgYnVpbHQuCisKKyAgPT09PT0gRW50ZXJpbmcgU3RlcDogNS4xMCA9PT09PQorCitTVEVQOiA1LjEwLjE6IHBvc3R0ZXN0OnVudGFyCisKKyAgQ29tbWFuZHMgdG8gZXhlY3V0ZToKKworICAgIHJtIC1yZiBuZXQtc25tcC17VkVSU0lPTn0KKworU1RFUDogNS4xMC4yOiBwb3N0dGVzdDp1bnRhcgorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICB0YXIgeHpmIG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3oKKworU1RFUDogNS4xMC4zOiBwb3N0dGVzdDpjb25maWd1cmUKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgY2QgbmV0LXNubXAte1ZFUlNJT059ICYmIC4vY29uZmlndXJlIC0tY2FjaGU9Y29uZmlnLmNhY2hlCisgIC0td2l0aC1kZWZhdWx0cyAtLXdpdGgtbWliLW1vZHVsZXM9J2hvc3QgZXhhbXBsZXMgZXhhbXBsZXMvZXhhbXBsZQkKKyAgdGVzdGhhbmRsZXIgc211eCBSbW9uIGRpc21hbi9ldmVudC1taWInIC0td2l0aC10cmFuc3BvcnRzPUlQWAorICAtLWVuYWJsZS1pcHY2IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkCisKK1NURVA6IDUuMTAuNDogcG9zdHRlc3Q6bWFrZQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBjZCBuZXQtc25tcC17VkVSU0lPTn0gJiYgbWFrZQorCitTVEVQOiA1LjEwLjU6IHBvc3R0ZXN0OnRlc3QKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgY2QgbmV0LXNubXAte1ZFUlNJT059ICYmIG1ha2UgdGVzdAorCisgIChMZWF2aW5nIFN0ZXA6IDUuMTApCisKKyAgKExlYXZpbmcgU3RlcDogNSkKKworU1RFUDogNjogUmVsZWFzZSB0aGUgcmVzdWx0cworCisgIE5vdyB3ZSdsbCBwdWJsaXNoIHRoZSByZXN1bHRzIHRvIHRoZSBTRiBzZXJ2ZXIKKworICA9PT09PSBFbnRlcmluZyBTdGVwOiA2ID09PT09CisKK1NURVA6IDYuMTogcnN5bmMgdGhlIG5ldyBmaWxlcworCisgIFRoaXMgd2lsbCBjb3B5IHRoZSByZXN1bHRzIHRvIHRoZSBTRiB1cGxvYWRzIGRpcmVjdG9yeSBpbiB5b3VyIGFjY291bnQgb24KKyAgZnJzLnNvdXJjZWZvcmdlLm5ldAorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICByc3luYyAtdiBuZXQtc25tcC17VkVSU0lPTn0udGFyLmd6IG5ldC1zbm1wLXtWRVJTSU9OfS50YXIuZ3ouYXNjCisgIG5ldC1zbm1wLXtWRVJTSU9OfS56aXAgbmV0LXNubXAte1ZFUlNJT059LnppcC5hc2MKKyAgZnJzLnNvdXJjZWZvcmdlLm5ldDp1cGxvYWRzLworCitTVEVQOiA2LjI6IFVwZGF0ZSB0aGUgU0YgcmVsZWFzZSB3ZWIgcGFnZQorCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBmaXJlZm94CisgICdodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3QvYWRtaW4vZWRpdHBhY2thZ2VzLnBocD9ncm91cF9pZD0xMjY5NCcKKworICAoTGVhdmluZyBTdGVwOiA2KQorCitTVEVQOiA3OiAKKworICBCaW5hcmllczogYnVpbGQgcnBtcywgLnRhci5nenMsIGV0Yy4KKworU1RFUDogODogQWR2ZXJ0aXNlIGl0IQorCisgID09PT09IEVudGVyaW5nIFN0ZXA6IDggPT09PT0KKworU1RFUDogOC4xOiAKKworICBBZGQgYSBub3RlIHRvIHRoZSBzb3VyY2UgZm9yZ2UgbmV3cyBzeXN0ZW06CisKKyAgaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9uZXdzL3N1Ym1pdC5waHA/Z3JvdXBfaWQ9MTI2OTQKKworICBDb21tYW5kcyB0byBleGVjdXRlOgorCisgICAgZmlyZWZveCAnaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9uZXdzL3N1Ym1pdC5waHA/Z3JvdXBfaWQ9MTI2OTQnCisKK1NURVA6IDguMjogCisKKyAgU2VuZCBhbiBhbm5vdW5jZW1lbnQgbWVzc2FnZSB0byBvbmUgb2YgdGhlIGZvbGxvd2luZyBtYWlsaW5nIGxpc3RzIGJhc2VkCisgIG9uIGl0J3MgdHlwZToKKworICBwcmU6CSAgbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCisgIHJjOgkgIG5ldC1zbm1wLXVzZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldAorCisgIGZpbmFsOiAgbmV0LXNubXAtYW5ub3VuY2VAbGlzdHMuc291cmNlZm9yZ2UubmV0CisKK1NURVA6IDguMzogCisKKyAgVXBkYXRlIHRoZSB0b3BpYyBvbiB0aGUgI05ldC1TTk1QIGNoYW5uZWwgaWYgdGhpcyBpcyBhIHRydW5rIGJhc2VkCisgIHJlbGVhc2UuCisKK1NURVA6IDguNDogCisKKyAgVXBkYXRlIHRoZSBmcmVzaG1lYXQgbGlzdGluZyAoV2VzIG5lZWRzIHRvIGRvIHRoaXMpOgorCisgIGh0dHA6Ly9mcmVzaG1lYXQubmV0L3Byb2plY3RzL25ldC1zbm1wLworCisgIENvbW1hbmRzIHRvIGV4ZWN1dGU6CisKKyAgICBmaXJlZm94IGh0dHA6Ly9mcmVzaG1lYXQubmV0L3Byb2plY3RzL25ldC1zbm1wLworCisgIChMZWF2aW5nIFN0ZXA6IDgpCisKK1NURVA6IDk6IAorCisgIEFkdmVydGlzZTogTkVXUyB1cGxvYWQgdG8gc2YsIHB1Ymxpc2ggb24gLWFubm91bmNlLCBmcmVzaG1lYXQsIGFuZCB0aGUKKyAgR05VIEZTRiBkaXJlY3RvcnkgKGh0dHA6Ly9kaXJlY3RvcnkuZnNmLm9yZy9wcm9qZWN0L25ldC1zbm1wLykuLi4gKHNlbmQKKyAgbWFpbCB0byBidWctZGlyZWN0b3J5QGdudS5vcmcpCisKKworCisKKworPT09PT09IEJFR0lOIE9CU09MRVRFIChwcmUtbWFrZXJlbGVhc2UpIERPQ1VNRU5UQVRJT04gPT09PT09CisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorVEVTVElORzoKKworICAxKSBVcGRhdGUgdGhlIHNvdXJjZSB0cmVlIHRvIGNhdGNoIGFsbCByZWNlbnQgY29tbWl0cywKKyAgICAgYW5kIGNoZWNrIHRoYXQgYWxsIGxvY2FsIGNoYW5nZXMgaGF2ZSBiZWVuIGNvbW1pdHRlZC4KKworICAgICAkIHN2biAtdSBzdGF0dXMKKyAgICAgJCBzdm4gICAgdXBkYXRlCisKKyAgMikgQ2hhbmdlIHRoZSBsaWJ0b29sIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gTWFrZWZpbGUudG9wLgorICAgICBTZWUgTUFOVUFMIC0gU1RFUCAxIGxhdGVyIGluIHRoZXNlIGluc3RydWN0aW9ucy4KKyAgICAgJ21ha2VyZWxlYXNlJyB3aWxsIGNvbW1pdCB0aGlzIGZpbGUgYXV0b21hdGljYWxseS4KKworICAzKSBDb25maWd1cmUgdGhlIHN1aXRlIHdpdGggYXMgbWFueSBtb2R1bGVzIGFzIHBvc3NpYmxlLAorICAgICBidWlsZCBhbmQgdGVzdCBpdC4gIFRoZSBtYWtlcmVsZWFzZSBzY3JpcHQgd2lsbCB1c2UKKyAgICAgdGhlIG9wdGlvbnM6CisKKyAgICAgICQgLi9jb25maWd1cmUgICctLXdpdGgtbWliLW1vZHVsZXM9aG9zdCBleGFtcGxlcyBleGFtcGxlcy9leGFtcGxlICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXN0aGFuZGxlciBzbXV4IFJtb24gZGlzbWFuL2V2ZW50LW1pYicgICAgXAorICAgICAgICAgICAgICAgICAgICAgIC0td2l0aC10cmFuc3BvcnRzPUlQWCAgLS1lbmFibGUtaXB2NiAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAtLWVuYWJsZS1lbWJlZGRlZC1wZXJsIC0tZW5hYmxlLXNoYXJlZAorCisgICAgIElkZWFsbHkgdGhpcyBzaG91bGQgYmUgcmVwZWF0ZWQgb24gYXMgbWFueSBzeXN0ZW1zIGFzIHBvc3NpYmxlCisgICAgIChpbmNsdWRpbmcgcnVubmluZyAibWFrZSBpbnN0YWxsIikuICBIb3dldmVyIHRoZSBtYWtlcmVsZWFzZQorICAgICBzY3JpcHQgd2lsbCBvbmx5IHRlc3QgdGhpbmdzIG9uIHRoZSBjdXJyZW50IGJveCwgYW5kIHdpbGwgbm90CisgICAgIHRyeSB0byBpbnN0YWxsIHRoZSBzb2Z0d2FyZS4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK0RPQ1VNRU5UQVRJT046CisKKyAgNCkgIFVwZGF0ZSB0aGUgdmVyc2lvbiBudW1iZXIgaW4gdGhlIGRveHlnZW4uY29uZiBmaWxlCisgICAgICAoaGFuZGxlZCBhdXRvbWF0aWNhbGx5IGJ5ICdtYWtlcmVsZWFzZScpIGFuZCBnZW5lcmF0ZQorICAgICAgdGhlIGRveHlnZW4gZXh0cmFjdGVkIG1hbnVhbCBwYWdlcy4KKworICAgICAgICAkIG1ha2UgZG9jcworICAgICAgICAkIG1ha2UgbWFuY3AKKworICAgICAnbWFrZXJlbGVhc2UnIHdpbGwgY29tbWl0IHRoaXMgZmlsZSBhdXRvbWF0aWNhbGx5LgorICAgICBOb3RlIHRoYXQgYW55IG5ldyBtYW4gcGFnZXMgc2hvdWxkIGJlIGFkZGVkIHRvIE1ha2VmaWxlLmluLgorICAgICBUaGlzIGlzICpOT1QqIGN1cnJlbnRseSBoYW5kbGVkIGJ5IHRoZSBtYWtlcmVsZWFzZSBzY3JpcHQuCisKKyAgNSkgQ2hlY2sgdGhlIGNvZGUgZm9yIGlsbGVnYWwgY29uc3RydWN0cyAoZS5nLiBDKysgc3R5bGUgY29tbWVudHMKKyAgICAgb3IgR05VIG1ha2Ugc3BlY2lmaWMgY29uc3RydWN0cyBpbiBNYWtlZmlsZXMpOgorCisgICAgICAgICQgbWFrZSBjaGVja3MKKworICA2KSBVcGRhdGUgTWFrZWZpbGUgZGVwZW5kZW5jaWVzOgorCisgICAgICAgICQgbWFrZSBkaXN0ZGVwZW5kCisKKyAgICAgJ21ha2VyZWxlYXNlJyB3aWxsIGNvbW1pdCB0aGVzZSBkZXBlbmRlbmNpZXMgYXV0b21hdGljYWxseS4KKworICA3KSBVcGRhdGUgdGhlIENoYW5nZUxvZyBmaWxlIHdpdGggZGV0YWlscyBvZiBhbGwgKHJlY2VudCkgY2hhbmdlcworICAgICB0byB0aGUgc3VpdGUuICBTZWUgTUFOVUFMIC0gU1RFUCAyIGxhdGVyIGluIHRoZXNlIGluc3RydWN0aW9ucy4KKyAgICAgJ21ha2VyZWxlYXNlJyB3aWxsIGNvbW1pdCB0aGlzIGZpbGUgYXV0b21hdGljYWxseS4KKworICA4KSBVcGRhdGUgdGhlIFJFQURNRSwgTkVXUywgYW5kIENIQU5HRVMgZmlsZXMgd2l0aCBkZXRhaWxzIG9mCisgICAgIHNpZ25pZmljYW50IGNoYW5nZXMgdG8gdGhlIHN1aXRlLiAgU2VlIE1BTlVBTCAtIFNURVAgMyBsYXRlcgorICAgICBpbiB0aGVzZSBpbnN0cnVjdGlvbnMuCisgICAgICdtYWtlcmVsZWFzZScgd2lsbCBjb21taXQgdGhlc2UgZmlsZXMgYXV0b21hdGljYWxseS4KKworCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1JFTEVBU0U6CisKKyAgOSkgTWFrZSBzdXJlIGFsbCBjaGFuZ2VzIGFyZSBjaGVja2VkIGluOgorCisgICAgICAgJCBzdm4gLXUgc3RhdHVzCisgICAgICAgJCBzdm4gICAgdXBkYXRlCisKKyAgICAgW05vdGUgdGhhdCB0aGlzIHN0ZXAgaXMgb21pdHRlZCB3aGVuIHJ1bm5pbmcgIm1ha2VyZWxlYXNlIl0KKworIDEwKSBDaGFuZ2UgdGhlIHZlcnNpb24gbnVtYmVyIGluIHZhcmlvdXMgZmlsZXMKKyAgICAgICAoUkVBRE1FLCBGQVEsIGNvbmZpZ3VyZS5pbiwgbmV0LXNubXAuc3BlYyBhbmQgYXNzb3J0ZWQgUGVybCBtb2R1bGVzKS4KKyAgICAgJ21ha2VyZWxlYXNlJyB3aWxsIHVwZGF0ZSBhbmQgY29tbWl0IHRoZXNlIGZpbGVzIGF1dG9tYXRpY2FsbHkuCisKKyAxMSkgQ3JlYXRlIGEgdGFnIGNoZWNrcG9pbnQgZm9yIHRoaXMgcmVsZWFzZToKKworICAgICAgICQgc3ZuIGNvcHkgIC90cnVuayAgICAgICAgICAgICAgICAgL3RhZ3MvRXh0LTUteAorICAgICBvcgorICAgICAgICQgc3ZuIGNvcHkgIC9icmFuY2hlcy9WNS14LXBhdGNoZXMgL3RhZ3MvRXh0LTUteC15CisKKyAxMikgQ29uc3RydWN0IHRoZSBzb3VyY2UgcGFja2FnZXM6CisKKyAgICAgICAgJCBzdm4gZXhwb3J0IC90YWdzL0V4dC01LXgteS9uZXQtc25tcCBuZXQtc25tcC01LngueQorICAgICAgICAkIG5ldC1zbm1wLTUueC55L3JlbW92ZS1maWxlcyAgICAgICAgIG5ldC1zbm1wLTUueC55CisgICAgICAgICQgc3RhciBhcnR5cGU9dXN0YXIgLWMgLXogLWYgbmV0LXNubXAtNS54LnkudGFyLmd6ICAgIG5ldC1zbm1wLTUueC55CisgICAgICAgICQgcm0gLWYgbmV0LXNubXAtNS54LnkuemlwIgorICAgICAgICAkIHppcCAtciBuZXQtc25tcC01LngueS56aXAgbmV0LXNubXAtNS54LnkiCisKKworIDEzKSBTaWduIChvciBjaGVja3N1bSkgdGhlIHBhY2thZ2VzOgorCisgICAgIFdlcy9Sb2JlcnQ6CisgICAgICAgICQgZ3BnIC11IG5ldC1zbm1wLWFkbWluIC1hIC0tZGV0YWNoLXNpZ24gbmV0LXNubXAtNS54LnkudGFyLmd6CisgICAgICAgICQgZ3BnIC11IG5ldC1zbm1wLWFkbWluIC1hIC0tZGV0YWNoLXNpZ24gbmV0LXNubXAtNS54LnkuemlwCisgICAgIE90aGVyczoKKyAgICAgICAgJCBtZDVzdW0gbmV0LXNubXAtNS54LnkudGFyLmd6ID4gbmV0LXNubXAtNS54LnkudGFyLmd6Lm1kNQorICAgICAgICAkIG1kNXN1bSBuZXQtc25tcC01LngueS56aXAgICAgPiBuZXQtc25tcC01LngueS56aXAubWQ1CisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitSRUxFQVNFIFRFU1RJTkc6CisKKyAxNCkgVW5wYWNrIGEgY2xlYW4gY29weSBvZiB0aGUgdGFyYmFsbCwgY29uZmlndXJlLCBidWlsZCBhbmQKKyAgICAgdGVzdCB0aGUgcmVsZWFzZSB0YXJiYWxsLgorCisgMTUpIERvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZSBubyBvdXRzdGFuZGluZyBjaGFuZ2VzIHRoYXQgaGF2ZQorICAgICBiZWVuIG1pc3NlZCBmcm9tIHRoZSBDVlMgY2hlY2tpbjoKKworICAgICAgICAkIHN2biBzdGF0dXMKKworTm90ZTogIFRoaXMgaXMgdGhlIGxhc3Qgc3RhZ2UgdGhhdCBpcyBoYW5kbGVkIGJ5IHRoZSAibWFrZXJlbGVhc2UiIHNjcmlwdAorICAgICAgIEV2ZXJ5dGhpbmcgZm9sbG93aW5nIHdpbGwgbmVlZCB0byBiZSBkb25lIG1hbnVhbGx5LgorCisgMTUpIFVwbG9hZCB0aGUgcGFja2FnZXMgKGFuZCBzaWduYXR1cmUgZmlsZXMpIHRvIHRoZSBTb3VyY2VGb3JnZSBzZXJ2ZXI6CisgCisgICAgICAgICQgbmNmdHBwdXQgdXBsb2FkLnNmLm5ldCBpbmNvbWluZyBuZXQtc25tcC01LngueS50YXIuZ3oKKyAgICAgICAgJCBuY2Z0cHB1dCB1cGxvYWQuc2YubmV0IGluY29taW5nIG5ldC1zbm1wLTUueC55LnppcAorICAgICAgICAqIFNGIHBhZ2VzOiAgIkFkbWluIiAtPiAiRmlsZSBSZWxlYXNlcyIKKyAgICAgICAgKiBuZXQtc25tcDogICJBZGQgUmVsZWFzZSIgKG9yICJFZGl0IFJlbGVhc2UiKQorICAgICAgICAqIENyZWF0ZSAob3IgY2hvb3NlKSBhbiBhcHByb3ByaWF0ZSByZWxlYXNlIG5hbWUKKyAgICAgICAgICAgICBlLmcuICAiNS54Lnkgc291cmNlIGNvZGUiICAob3IgIjUueC55IHByZS1yZWxlYXNlcyIpCisgICAgICAgICogIkVkaXQgVGhpcyBSZWxlYXNlIgorICAgICAgICAqIFNlbGVjdCB0aGUgdGFyYmFsbCBhbmQvb3Igb3RoZXIgcmVsZXZhbnQgZmlsZXMKKworIDE2KSBBbm5vdW5jZSB0aGUgcmVsZWFzZSBvbiB0aGUgYXBwcm9wcmlhdGUgbGlzdC4KKyAgICAgUHJlLXJlbGVhc2UgYW5ub3VuY2VtZW50cyAoYW5kIGEgY2FsbCBmb3IgdGVzdGluZykgc2hvdWxkIGJlCisgICAgIHNlbnQgdG8gbmV0LXNubXAtY29kZXJzLCByZWxlYXNlLWNhbmRpZGF0ZXMgdG8gbmV0LXNubXAtdXNlcnMuCisKKyAgICAgRnVsbCByZWxlYXNlcyBzaG91bGQgYmUgYW5ub3VuY2VkIG9uIG5ldC1zbm1wLXVzZXJzLCBhbmQgYXMgYQorICAgICBuZXdzIGl0ZW0gb24gdGhlIHByb2plY3QgaG9tZSBwYWdlIC0gaW5jbHVkaW5nIHRoZSBORVdTIHNuaXBwZXQKKyAgICAgb2Ygc2lnbmlmaWNhbnQgY2hhbmdlcyBzaW5jZSB0aGUgbGFzdCByZWxlYXNlLgorCisgMTcpIFVwZGF0ZSB0aGUgZm9sbG93aW5nIGh0ZG9jcyBmaWxlcyAoaW4gdGhlIG1haW4gU1ZOIHRydW5rKToKKyAgICAgICAgIGh0ZG9jcy9kb3dubG9hZC5odG1sCisgICAgICAgICBodGRvY3MvZGV2L3NjaGVkdWxlLmh0bWwKKworICAgICBbTWFrZSBzdXJlIHlvdSBoYXZlIHBlcm1pc3Npb25zIHNldCB1cCBwcm9wZXJseSBvbiB0aGUgd2ViCisgICAgICBzZXJ2ZXIgc28gdGhhdCBmaWxlcyBjcmVhdGVkIGJlY29tZSBncm91cC13cml0YWJsZSEhIV0KKworICAgICBUaGF0IGNvbmNsdWRlcyB0aGUgcHJvY2VzcyBmb3IgcHJlLXJlbGVhc2VzIGFuZCByZWxlYXNlLWNhbmRpZGF0ZXMuCisgICAgIEZvciBmdWxsIHJlbGVhc2VzLCB3YWl0IGEgd2VlayB0byBlbnN1cmUgdGhhdCB0aGVyZSBhcmUgbm8gbWFqb3IKKyAgICAgcHJvYmxlbXMsIGJlZm9yZSBjb250aW51aW5nIHdpdGggdGhlIHJlbWFpbmluZyBzdGVwcy4KKworICAgICAgICBJZiB0aGVyZSBhcmUga25vd24gcHJvYmxlbXMgYW5kIGFub3RoZXIgcmVsZWFzZSBpcyBwbGFubmVkIHRvCisgICAgIGZpeCB0aGVtLCBkb24ndCBhbm5vdW5jZSB0aGUgYnJva2VuIHZlcnNpb24gLSB3YWl0IGZvciB0aGUgdXBkYXRlZAorICAgICBvbmUgaW5zdGVhZC4KKworIDE4KSBPbmNlIHRoaXMgd2VlayBoYXMgZWxhcHNlZCwgc3VibWl0IGFuIGFubm91bmVtZW50IG9mIHRoZSBuZXcKKyAgICAgcmVsZWFzZSB0byBuZXQtc25tcC1hbm5vdW5jZS4gIFRoaXMgbWVzc2FnZSB3aWxsIG5lZWQgdG8gYmUKKyAgICAgZXhwbGljaXRseSBhdXRob3JpemVkIHZpYSBNYWlsTWFuLgorCisgICAgIEFsc28gdXBkYXRlIHRoZSBJUkMgdG9waWMgdG8gaW5jbHVkZSBtZW50aW9uIG9mIHRoaXMgcmVsZWFzZS4KKworIDE5KSBGb3IgYSByZWxlYXNlIG9uIHRoZSBtb3N0IHJlY2VudCBkZXZlbG9wbWVudCBsaW5lLCBzdGFydCBidWdnaW5nCisgICAgIFdlcyB0byB1cGRhdGUgdGhlIGZyZXNobWVhdCwgRnJlZSBTb2Z0d2FyZSBEaXJlY3RvcnkgYW5kCisgICAgIFdpa2lwZWRpYSBlbnRyaWVzLgorCisgMjApIEZvciBhIHJlbGVhc2Ugb24gdGhlIG1vc3QgcmVjZW50IGRldmVsb3BtZW50IGxpbmUsIHVwZGF0ZSB0aGUKKyAgICAgJ2h0ZG9jcy9wYWdlLXRvcC5odG1sJyBmaWxlIChpbiB0aGUgbWFpbiBTVk4gdHJ1bmspIHRvIHJlZmVyZW5jZQorICAgICB0aGUgbGF0ZXN0IHZlcnNpb24uCisKKyAgICAgVXBkYXRlIHRoZSBmb2xsb3dpbmcgZmlsZXMgd2l0aCBhbnkgY2hhbmdlczoKKworICAgICAgICAgaHRkb2NzL2RvY3MvcmVhZG1lZmlsZXMvTkVXUworICAgICAgICAgaHRkb2NzL2RvY3MvcmVhZG1lZmlsZXMvQ0hBTkdFUworICAgICAgICAgaHRkb2NzL2RvY3MvcmVhZG1lZmlsZXMvUkVBRE1FKgorICAgICAgICAgaHRkb2NzL0NPUFlJTkcKKworICAgICBbTWFrZSBzdXJlIHlvdSBoYXZlIHBlcm1pc3Npb25zIHNldCB1cCBwcm9wZXJseSBvbiB0aGUgd2ViCisgICAgICBzZXJ2ZXIgc28gdGhhdCBmaWxlcyBjcmVhdGVkIGJlY29tZSBncm91cC13cml0YWJsZSEhIV0KKyAgICAgICAgIAorCisgMjEpIEZvciBhIG1ham9yIG5ldy1mZWF0dXJlIHJlbGVhc2UgKGkuZS4gNS54KSwgY3JlYXRlIHRoZSBwYXRjaGVzCisgICAgIGJyYW5jaDoKKworICAgICAgICAkIHN2biBjb3B5ICAvdGFncy9FeHQtNS14ICAgL2JyYW5jaGVzL1Y1LXgtcGF0Y2hlcworCisgICAgIGFuZCB1cGRhdGUgdGhlIFNWTiBtYWluIHRydW5rIHdpdGggYSBuZXcgdmVyc2lvbiBudW1iZXI6CisKKyAgICAgICAgJCBsb2NhbC9WZXJzaW9uLU11bmdlLnBsIC12IDUuKHgrMSkuZGV2IC1NIC1QIC1DCisKKyAgICAgVGhlIDEgd2VlayBkZWxheSAoYW5kIGNvbnRpbnVlZCBjb2RlIGZyZWV6ZSkgaXMgdG8gdG8gZW5zdXJlIHRoYXQKKyAgICAgZGV2ZWxvcGVyIGVmZm9ydCBpcyBjb25jZW50cmF0ZWQgb24gaW1tZWRpYXRlIHByb2JsZW1zIGZvbGxvd2luZworICAgICB0aGUgcmVsZWFzZS4gIEFueSBtYWpvciBwcm9ibGVtcyBzaG91bGQgaG9wZWZ1bGx5IGNvbWUgdG8gbGlnaHQKKyAgICAgZHVyaW5nIHRoaXMgcGVyaW9kLCBzbyBhZnRlciBhIHdlZWsgaXQgc2hvdWxkIGJlIHNhZmUgdG8gY3JlYXRlCisgICAgIHRoZSBwYXRjaGVzIGJyYW5jaCBhbmQgb2ZmaWNpYWxseSBlbmQgdGhlIGNvZGUgZnJlZXplIG9uIE1BSU4uCisKKyAyMikgVXBkYXRlIHRoZSBvZmZpY2lhbCBwYXRjaGVzIHRyYWNrZXIgc2V0OgorCisgICAgIC0gYW55IHBhdGNoZXMgZm9yIHRoaXMgbmV3IHJlbGVhc2UgdGFyYmFsbCBzaG91bGQgYmUgZ2l2ZW4KKyAgICAgICBwcmlvcml0eSA5CisgICAgIC0gYWxsIHBhdGNoZXMgZm9yIHRoZSBwcmV2aW91cyByZWxlYXNlIG9uIHRoaXMgbGluZSBzaG91bGQKKyAgICAgICBiZSBtYXJrZWQgYXQgcHJpb3JpdHkgNQorICAgICAtIGFsbCBwYXRjaGVzIGZvciBlYXJsaWVyIHJlbGVhc2VzIG9uIHRoaXMgbGluZSBzaG91bGQKKyAgICAgICBiZSBtYXJrZWQgYXQgcHJpb3JpdHkgMSwgYW5kIGNsb3NlZAorCisgICAgIElmIGEgbGluZSBoYXMgYmVlbiBkZXNpZ25hdGVkIGNsb3NlZCwgdGhlbiBhbGwgb2ZmaWNpYWwKKyAgICAgcGF0Y2hlcyBmb3IgdGhhdCBsaW5lIHNob3VsZCBiZSBtYXJrZWQgYXMgY2xvc2VkIGFzIHdlbGwuCisKKyAyMykgSGlkZSB0aGUgcHJlLXJlbGVhc2UgcmVwb3NpdG9yeSBmcm9tIHRoZSBGaWxlIFJlbGVhc2VzCisgICAgIGFkbWluIHBhZ2VzLgorCisgMjQpIENsZWFuIHVwIHRoZSAnZGlzdCcgZGlyIG9mIHRoZSByZWxldmFudCBWNS14LXBhdGNoZXMgYnJhbmNoLgorICAgICBPbmx5IGxlYXZlIHRoZSBmb2xsb3dpbmcgZmlsZXM6CisKKyAgICAgY2hhbmdlbG9nZml4ICBjdnNzaG93ICBjdnN1cCAgZXh0cmFjdG5ld3MgIG1ha2VyZWxlYXNlCisgICAgIG5ldC1zbm1wLnNwZWMgIHNubXBkLWluaXQuZCAgc25tcHRyYXBkLWluaXQuZAorCisgICAgIE5vdGUgdGhhdCBhbnkgZmlsZXMgcmVtb3ZlZCBzaG91bGQgYWxzbyBiZSBkZWxldGVkIGZyb20KKyAgICAgU1ZOIHJlcG9zaXRvcnkuCisKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitDUkVBVElORyBCSU5BUlkgRElTVFJJQlVUSU9OUworCisgIDApIEFsd2F5cyBSRU1PVkUgQUxMIFBSRVZJT1VTIElOU1RBTExTIEZJUlNULCB0aGVuIGRvIGEgbWFrZSBpbnN0YWxsCisgICAgIGZyb20gdGhlIHRhci1iYWxsIGV4dHJhY3RlZCBzb3VyY2VzIGFuZCAqVEhFTiogcmVidWlsZCBhbGwKKyAgICAgYmluYXJpZXMgYWdhaW4uICBUaGlzIGVuc3VyZXMgdGhhdCBldmVyeXRoaW5nIChlc3BlY2lhbGx5IHBlcmwKKyAgICAgbW9kdWxlcykgYXJlIHByb3Blcmx5IGxpbmtlZCBhZ2FpbnN0IHRoZSByaWdodCBsaWJyYXJpZXMuCisKKyAgMSkgYWx3YXlzIGJ1aWxkIHJlbGVhc2VzIGZyb20gYSB0YXJiYWxsLCBub3QgZnJvbSBTVk4uCisKKyAgMikgQWRkIG1pYiBtb2R1bGVzIHRoYXQgYXJlIGNvbW1vbi4gIEJhc2ljYWxseSwgYWRkOgorCisgICAgICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAtLSB3aGVyZSBzdXBwb3J0ZWQuCisgICAgICAgZGlzbWFuL2V2ZW50LW1pYgorICAgICAgIHNtdXgKKworICAzKSB1c2UgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1zeXNjb250YWN0PSJVbmtub3duIiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAtLXdpdGgtc3lzbG9jYXRpb249IlVua25vd24iCisKKyAgNCkgd2hlbiBydW5uaW5nIG1ha2UgaW5zdGFsbCwgZG8gaXQgbGlrZToKKworICAgICAkIG1ha2UgaW5zdGFsbCBwcmVmaXg9L3NvbWUvcGF0aC90by9ob21lL0FSQ0gvdXNyL2xvY2FsIFwKKyAgICAgICAgICAgIGV4ZWNfcHJlZml4PS9zb21lL3BhdGgvdG8vaG9tZS9BUkNIL3Vzci9sb2NhbAorICAgIAorICA1KSBUYXIgaXQgdXA6CisKKyAgICAgJCBjZCAvc29tZS9wYXRoL3RvL2hvbWUvQVJDSAorICAgICAkIHRhciBjemYgbmV0LXNubXAtNS4wLjMtQVJDSC50YXIuZ3ogdXNyL2xvY2FsCisKKyAgNikgdXBsb2FkIGFuZCByZWxlYXNlLCBsaWtlIHlvdSBkaWQgZm9yIHRoZSBzb3VyY2UgY29kZSBidXQgd2l0aCBhCisgICAgIGRpZmZlcmVudCBwYWNrYWdlIG5hbWUgZm9yIGJpbmFyaWVzICg1LjAuMyBiaW5hcmllcykuCisKKyAgNykgUlBNcyBbZG8gdGhpcyBpbiBtYWluIGxpbmUgZXZlbiBpZiBpdHMgZm9yIGEgcGF0Y2ggYnJhbmNoXToKKyAgICAgJCBjZCBkaXN0CisgICAgICQgY3AgLi4vbmV0LXNubXAtNS4wLjgudGFyLmd6IHJwbS9TT1VSQ0VTCisgICAgICQgbWFrZSBSRUxFQVNFPTEKKyAgICAgCisgICAgIFRoaXMgc2hvdWxkIHB1dCBtdWx0aXBsZSBiaW5hcnkgcnBtIGZpbGVzIGluOgorICAgICAgIGRpc3QvcnBtL1JQTVMvaTM4Ni8KKyAgICAgQW5kIG9uZSBzb3VyY2UgUlBNIGluOgorICAgICAgIGRpc3QvcnBtL1NSUE1TLworCisgICAgICoqKiBUaGVzZSBmaWxlcyBuZWVkIHRvIGJlIHJlbmFtZWQgdG8gaW5jbHVkZSB0aGUgT1MgdmVyc2lvbi4KKworICAgICAgICAgRUc6IC4uLmkzODYucnBtIG5lZWRzIHRvIGJlY29tZSAuLi5mYzUuaTM4Ni5ycG0KKworICA4KSBSZW1vdmUgKG9yIGhpZGUpIGJpbmFyaWVzIGZyb20gb2xkZXIgcmVsZWFzZXMgb2YgdGhlIHNhbWUgbGluZSwKKyAgICAgd2hlcmUgeW91IGhhdmUgc3VibWl0dGVkIGEgbmV3ZXIgYmluYXJ5IGZvciB0aGUgc2FtZSBhcmNoaXRlY3R1cmUuCisgICAgIE9uY2UgdGhlIGxhc3QgYmluYXJ5IGZvciBhIHBhcnRpY3VsYXIgcmVsZWFzZSB2ZXJzaW9uIGhhcyBiZWVuCisgICAgIHJlbW92ZWQsIGhpZGUgdGhhdCByZXBvc2l0b3J5LgorICAgICAKKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK01BTlVBTCAtIFNURVAgMQorCisgIENoYW5naW5nIHRoZSBsaWJ0b29sIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gTWFrZWZpbGUudG9wLgorCisgICAgICAtIElmIGFueSBpbnRlcmZhY2VzL3N0cnVjdHVyZXMgaGF2ZSBiZWVuIHJlbW92ZWQgb3IgY2hhbmdlZCBzaW5jZSB0aGUKKyAgICAgICAgbGFzdCB1cGRhdGUsIGluY3JlbWVudCBjdXJyZW50ICgrNSksIGFuZCBzZXQgYWdlIGFuZCByZXZpc2lvbiB0byAwLgorICAgICAgICBTdG9wIQorCisgICAgICAtIElmIGFueSBpbnRlcmZhY2VzIGhhdmUgYmVlbiBhZGRlZCBzaW5jZSB0aGUgbGFzdCBwdWJsaWMgcmVsZWFzZSwKKyAgICAgICAgdGhlbiBpbmNyZW1lbnQgY3VycmVudCBhbmQgYWdlLCBhbmQgc2V0IHJldmlzaW9uIHRvIDAuCisgICAgICAgIFN0b3AhCisKKyAgICAgIC0gSWYgdGhlIHNvdXJjZSBjb2RlIGhhcyBjaGFuZ2VkIGF0IGFsbCBzaW5jZSB0aGUgbGFzdCB1cGRhdGUsCisgICAgICAgIHRoZW4gaW5jcmVtZW50IHJldmlzaW9uIChjOnI6YSBiZWNvbWVzIGM6cisxOmEpLgorCisgICAgICBOb3RlOiBtYWludGVuYW5jZSByZWxlYXNlcyAoZWcgNS4yLngpIHNob3VsZCBuZXZlciBoYXZlIGNoYW5nZXMKKyAgICAgICAgICAgIHRoYXQgd291bGQgcmVxdWlyZSBjdXJyZW50IHRvIGJlIGluY3JlbWVudGVkLgorCisgIFRoZSBjaGVjay1hcGktY2hhbmdlcyBzY3JpcHQgaW4gdGhlIGRpc3QgZGlyZWN0b3J5IHdpbGwgY29uc3RydWN0IGEKKyAgZGlmZiBvZiBhbGwgaGVhZGVycywgd2hpY2ggY2FuIGJlIHVzZWZ1bCBmb3IgZGV0ZXJtaW5pbmcgaWYgYW55dGhpbmcKKyAgbmVlZHMgYnVtcGluZy4KKworICAgICBVcGRhdGUgdGhlc2UgdmFyaWFibGVzIG5vdywgc28gdGhhdCB3aGVuIHlvdSBydW4KKyAgICAgbWFrZSBpbiBhIHNlY29uZCB0byB0ZXN0IHRoaW5ncyB5b3UgY2FuIHNwb3QgbGlidG9vbCB5ZWxsaW5nCisgICAgIGFib3V0IGltcHJvcGVyIG51bWJlcmluZyBiZWZvcmUgeW91IG1ha2UgdGhlIHJlbGVhc2UgYW5kIG5vdAorICAgICBhZnRlciB5b3UndmUgdXBsb2FkZWQgdGhlIHRhciBiYWxsIDotLworCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorTUFOVUFMIC0gU1RFUCAyCisKKyAgQ2hhbmdpbmcgdGhlIGxpYnRvb2wgdmVyc2lvbiBpbmZvcm1hdGlvbiBpbiBNYWtlZmlsZS50b3AuCisgIFVwZGF0aW5nIHRoZSBDaGFuZ2VMb2cgZmlsZQorCisgICAgICAtIFRoZSBDaGFuZ2VMb2cgZW50cmllcyBhcmUgZXh0cmFjdGVkIChub3JtYWxseSBhdXRvbWF0aWNhbGx5KQorICAgICAgICB1c2luZyB0aGUgY29tbWFuZDoKKworICAgICAgICAgICQgc3ZuMmNsIC1mIENoYW5nZUxvZy5hZGQgLS1icmVhay1iZWZvcmUtbXNnIC0tc3RvcC1vbi1jb3B5CisKKyAgICAgICAgSWYgeW91IGRvbid0IGhhdmUgc3ZuMmNsIGluc3RhbGxlZCwgeW91IGNhbiB0cnkgYW5kIGZpbmQgYQorICAgICAgICBzdWl0YWJsZSBiaW5hcnkgcGFja2FnZSBmb3IgeW91ciBhcmNoaXRlY3R1cmUsIG9yIHlvdSBjYW4KKyAgICAgICAgZ2V0IGl0IGRpcmVjdGx5IGZyb20KKyAgICAgICAgICAgICAgaHR0cDovL2NoLnR1ZGVsZnQubmwvfmFydGh1ci9zdm4yY2wKKyAgICAgICAgWW91IG1heSBuZWVkIHRvIHJlbmFtZSB0aGUgc2NyaXB0IGZyb20gJ3N2bjJjbC5zaCcgdG8gJ3N2bjJjbCcKKworICAgICAgLSBJbiBlaXRoZXIgY2FzZSwgdGhleSBhcmUgZml4ZWQgdXAgKGF1dG9tYXRpY2FsbHkpIHVzaW5nOgorCisgICAgICAgICAgJCBwZXJsIGRpc3QvY2hhbmdlbG9nZml4IDwgQ2hhbmdlTG9nLmFkZCA+IENoYW5nZUxvZy5yZWFsbHlhZGQKKyAgICAgICAgb3IKKyAgICAgICAgICAkIHBlcmwgZGlzdC9jaGFuZ2Vsb2dmaXggVjUte059LXBhdGNoZXMgPCBDaGFuZ2VMb2cuYWRkID4gQ2hhbmdlTG9nLnJlYWxseWFkZAorCisgICAgICAtIFRoZSBtYW51YWwgcHJvY2Vzc2luZyBzdGVwIGlzIHRvIGluc2VydCB0aGUgYXBwcm9wcmlhdGUgcG9ydGlvbgorICAgICAgICBvZiB0aGUgZmlsZSAnQ2hhbmdlTG9nLnJlYWxseWFkZCcgaW50byAnQ2hhbmdlTG9nJy4gIFlvdSBjYW4KKyAgICAgICAgdXN1YWxseSBmaW5kIHRoZSBwb2ludCB3aGVyZSB0aGUgcHJldmlvdXMgcmVsZWFzZSBzdGFydGVkIGluCisgICAgICAgIHRoZSBmaWxlIGJ5IHNlYXJjaGluZyBmb3IgInZlcnNpb24gdGFnIi4KKworICAgICAgLSBQbGVhc2Uga2VlcCB0aGUgbGluZSBvZiBkYXNoZXMgYXQgdGhlIHRvcCBvZiB0aGUgZmlsZSwgYXMgdGhpcworICAgICAgICBtYWtlcyBpdCBlYXNpZXIgdG8gY29weSBkdXJpbmcgdGhlIG5leHQgcmVsZWFzZS4KKworICAgICAgLSBJZiB1c2luZyBlbWFjcywgc3dpdGNoIGZyb20gY2hhbmdlbG9nLW1vZGUgdG8gdGV4dC1tb2RlLgorCisgICAgICAtIENoZWNrIGluIHRoZSBuZXcgQ2hhbmdlTG9nOgorCisgICAgICAgICAgJCBzdm4gY29tbWl0IC1tICJ1cGRhdGUgZm9yIHJlbGVhc2UgWCIgQ2hhbmdlTG9nCisKKyAgICAgICAgVGhpcyBpcyBkb25lIGF1dG9tYXRpY2FsbHkgYnkgIm1ha2VyZWxlYXNlIgorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorTUFOVUFMIC0gU1RFUCAzCisKK1VwZGF0aW5nIFJFQURNRSwgTkVXUywgYW5kIENIQU5HRVMgZmlsZXMKKworICBbIFRoaXMgaW5mb3JtYXRpb24gaGFzIGJlZW4gbW92ZWQgdG86CisKKyAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvQ29tbWl0X21lc3NhZ2VfYXV0by1leHRyYWN0aW9uX2Zvcm1hdHMKKworICBdCisKK0hvd2V2ZXIsIGxlYXZpbmcgc29tZSBleGFtcGxlcyBoZXJlIGZvciBxdWljayByZWZlcnJhbDoKKworICBTVk4gY29tbWl0IG1lc3NhZ2VzIHRoYXQgZ2VuZXJhdGUgYXV0by1ORVdTIGFuZCBhdXRvLUNIQU5HRVMKKyAgZXh0cmFjdGlvbnMgc2hvdWxkIGJlIGZvcm1hdHRlZCBsaWtlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZXM6CisKKyAgICBORVdTOiBzbm1wZDogSSBkaWQgc29tZXRoaW5nIHJlYWxseSBjb29sIHRvIHRoZSBhZ2VudAorICAgIENIQU5HRVM6IHNubXB0cmFwZDogZml4ZWQgc29tZXRoaW5nIG1pbm9yIGluIHNubXB0cmFwZAorICAgIE5FV1M6IHBlcmw6IFBBVENIOiAxMjMsNDU2OiBBcHBsaWVkIHBhdGNoZXMgMTIzIGFuZCA0NTYgdG8gc3VwcG9ydCBwZXJsNgorICAgIENIQU5HRVM6IEJVRzogMTM6IEZpeGVkIGJ1ZyAxMyAmIHNlY3VyZWQgdGhlIHdvcmxkIGF0IGxhcmdlIGFnYWluc3QgaGFja2VycworICAgIE5FV1M6IHBlcmw6IFBBVENIOiAxMjM6IGZyb20gUm9iZXJ0OiBkaWQgc29tZXRoaW5nCisgICAgTkVXUzogcGVybDogUEFUQ0g6IDEyMzogZnJvbSAiUm9iZXJ0IFN0b3J5IjogZGlkIHNvbWV0aGluZyBlbHNlCmRpZmYgLS1naXQgYS9kaXN0L2F1dG9jb25mLXZlcnNpb24gYi9kaXN0L2F1dG9jb25mLXZlcnNpb24KaW5kZXggYWNjMDc5Ny4uMjY0ZjJjZSAxMDA2NDQKLS0tIGEvZGlzdC9hdXRvY29uZi12ZXJzaW9uCisrKyBiL2Rpc3QvYXV0b2NvbmYtdmVyc2lvbgpAQCAtMSArMSBAQAotMi41OQorMi42OApkaWZmIC0tZ2l0IGEvZGlzdC9jaGVjay1hcGktY2hhbmdlIGIvZGlzdC9jaGVjay1hcGktY2hhbmdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjFmNjFlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L2NoZWNrLWFwaS1jaGFuZ2UKQEAgLTAsMCArMSw1NCBAQAorIyEvYmluL3NoCisjCisjIHNpbXBsaXN0aWMgc2NyaXB0IHRvIGNoZWNrIGFsbCBoZWFkZXIgZmlsZXMgZm9yCisjIGRpZmZlcmVuY2VzLiBJbnRlbmRlZCB0byBoZWxwIGRldGVjdCBhcGkgY2hhbmdlcworIyBiZXR3ZWVuIHJlbGVhc2VzLgorIworIyBpdCdzIG5vdCBwcmV0dHkgb3IgZWZmaWNpZW50LCBhbmQgaW5zcGVjdGlvbiBvZgorIyB0aGUgcmVzdWx0cyBtdXN0IGJlIGRvbmUgbWFudWFsbHkuCisjCisjIGl0J3MgYWxzbyBub3Qgc2VjdXJlIChkb24ndCBydW4gYXMgcm9vdCkKKyMgb3IgcG9ydGFibGUuIFRlc3RlZCBvbiBMaW51eC4KKyMKKworaWYgWyAieCQxIiA9ICJ4IiAtbyAieCQyIiA9ICJ4IiBdOyB0aGVuCisgICBlY2hvICJVc2FnZTogJDAgPG9sZC1kaXI+IDxuZXctZGlyPiIKKyAgIGV4aXQgMQorZmkKKworb2Q9JDEKK25kPSQyCitESVI9L3RtcAorT1VUUFVUPSRESVIvYXBpLWRpZmYucGF0CitPRFQ9JERJUi9hcGktb2QKKworaWYgWyAhIC1kICRvZCBdOyB0aGVuCisgICBlY2hvICJvbGQgZGlyICRvZCBkb2Vzbid0IGV4aXN0IgorICAgZXhpdCAxCitmaQorCitpZiBbICEgLWQgJG5kIF07IHRoZW4KKyAgIGVjaG8gIm9sZCBkaXIgJG5kIGRvZXNuJ3QgZXhpc3QiCisgICBleGl0IDEKK2ZpCisKKyMgZmluZCBoZWFkZXIgaW4gbmQKK3JtIC1mICRPVVRQVVQgJE9EVCAyPi9kZXYvbnVsbAorKGNkICRvZCAmJiBmaW5kIC4gLXR5cGUgZiAtbmFtZSAiKi5oInxzb3J0ID4gJE9EVCkKKworT0g9YGNhdCAkT0RUYAorZm9yIGggaW4gJE9ICitkbworICAgbmg9JG5kLyRoCisgICBvaD0kb2QvJGgKKyAgIGVjaG8gIiogJG5oIgorICAgaWYgWyAtZiAiJG5oIiBdOyB0aGVuCisgICAgICBlY2hvICIqIGRpZmY6ICRoIHZzICRuaCIgPj4gJE9VVFBVVAorICAgICAgZGlmZiAtdSAkb2ggJG5oID4+ICRPVVRQVVQgMj4mMQorICAgZWxzZQorICAgICAgZWNobyAiKiBPbGQgaGVhZGVyICRoIG5vdCBmb3VuZCBpbiBuZXcgaGVhZGVycyIgPj4gJE9VVFBVVAorICAgZmkKK2RvbmUKKworZWNobyAiSW5zcGVjdCBvdXRwdXQgaW4gJE9VVFBVVCIKK2VjaG8gIlNlZSBNYWtlZmlsZS50b3AgZm9yIGxpYnRvb2wgdmVyc2lvbiBidW1waW5nIHJ1bGVzLiIKZGlmZiAtLWdpdCBhL2Rpc3QvY3Zzc2hvdyBiL2Rpc3QvY3Zzc2hvdwppbmRleCA2MjNiMzJkLi43NTM5NTk1IDEwMDc1NQotLS0gYS9kaXN0L2N2c3Nob3cKKysrIGIvZGlzdC9jdnNzaG93CkBAIC0xLDQ2ICsxLDY5IEBACi0jIS9iaW4vYmFzaAotIwotIyAkSWQkCisjIS9iaW4vc2gKICMKIGV4cG9ydCBDVlNfUlNIPXNzaAogVEFHPQogCi1pZiBbICQjIC1lcSAwIF07IHRoZW4KLQlESVI9LgotZWxzZQotCWlmIFsgJCMgLW5lIDEgXTsgdGhlbgotCQllY2hvICJ1c2FnZTogJDAgPHdvcmtpbmcgZGlyZWN0b3J5PiIKLQkJZXhpdAotCWZpCi0JRElSPSQxCi1maQotCi1pZiBbICEgLWQgJERJUiBdOyB0aGVuCi0JZWNobyAibm8gc3VjaCBkaXJlY3RvcnkgJyRESVInIgotCWV4aXQKLWZpCi0KLWlmIFsgISAtZCAkRElSL0NWUyBdOyB0aGVuCi0JZWNobyAiJyRESVInIGhhcyBubyBDVlMgZGlyZWN0b3J5ISIKLQlleGl0Ci1maQotCi1pZiBbICEgLWYgJERJUi9DVlMvUmVwb3NpdG9yeSBdOyB0aGVuCitkb19jdnMoKQoreworICAgRElSPSQxCisgICBpZiBbICEgLWYgJERJUi9DVlMvUmVwb3NpdG9yeSBdOyB0aGVuCiAJZWNobyAiJyRESVInIGhhcyBubyBDVlMvUmVwb3NpdG9yeSEiCiAJZXhpdAotZmkKKyAgIGZpCiAKLWlmIFsgISAtZiAkRElSL0NWUy9Sb290IF07IHRoZW4KKyAgIGlmIFsgISAtZiAkRElSL0NWUy9Sb290IF07IHRoZW4KIAllY2hvICInJERJUicgaGFzIG5vIENWUy9Sb290ISIKIAlleGl0Ci1maQorICAgZmkKIAotaWYgWyAtZiAkRElSL0NWUy9UYWcgXTsgdGhlbgorICAgaWYgWyAtZiAkRElSL0NWUy9UYWcgXTsgdGhlbgogCVRBRz0iLXIgYGNhdCAkRElSL0NWUy9UYWcgfCBjdXQgLWMgMi1gIgorICAgZmkKKworICAgUkVQPSJgY2F0ICRESVIvQ1ZTL1JlcG9zaXRvcnlgIgorICAgUk9PVD0iYGNhdCAkRElSL0NWUy9Sb290YCIKKworICAgZWNobyAiRGlyZWN0b3J5ICRESVIgaXMgcm9vdGVkIGF0ICRST09ULCAkVEFHICRSRVAuLi4iCisgICBlY2hvICIgICB1cGRhdGUgd2l0aCBjdnMgLXozIC1kICRST09UIC1xIGNvICRUQUcgLWQgJERJUiAkUkVQIgorfQorCitkb19zdm4oKQoreworICAgRElSPSQxCisgICBpZiBbICEgLWQgJERJUi8uc3ZuIF07IHRoZW4KKwllY2hvICInJERJUicgaGFzIG5vIC5zdm4vIHN1YmRpciEiCisJZXhpdAorICAgZmkKKworICAgUk9PVD1gc3ZuIGluZm8gfCBncmVwIFVSTHxjdXQgLWYyIC1kICIgImAKKyAgIGlmIFsgLXogIiRST09UIiBdOyB0aGVuCisgICAgICBlY2hvICJDb3VsZG4ndCBmaW5kIHJvb3QgZnJvbSAkRElSLy5zdm4vZW50cmllcyIKKyAgICAgIGV4aXQgMQorICAgZmkKKworICAgZWNobyAiRGlyZWN0b3J5ICRESVIgaXMgcm9vdGVkIGF0ICRST09ULi4uIgorICAgZWNobyAiICAgdXBkYXRlIHdpdGggc3ZuIGNvICRST09UICRESVIiCit9CisKK2lmIFsgJCMgLWVxIDAgXTsgdGhlbgorCURJUlM9LgorZWxzZQorCURJUlM9JEAKIGZpCiAKLVJFUD0iYGNhdCAkRElSL0NWUy9SZXBvc2l0b3J5YCIKLVJPT1Q9ImBjYXQgJERJUi9DVlMvUm9vdGAiCitmb3IgZCBpbiAkRElSUworZG8KKyAgIGlmIFsgISAtZCAkZCBdOyB0aGVuCisJZWNobyAibm8gc3VjaCBkaXJlY3RvcnkgJyRkJyIKKwlleGl0CisgICBmaQogCi1lY2hvICJEaXJlY3RvcnkgJERJUiBpcyByb290ZWQgYXQgJFJPT1QsICRUQUcgJFJFUC4uLiIKLWVjaG8gInVwZGF0ZSB3aXRoIGN2cyAtejMgLWQgJFJPT1QgLXEgY28gJFRBRyAtZCAkRElSICRSRVAiCisgICBpZiBbIC1kICRkL0NWUyBdOyB0aGVuCisJZG9fY3ZzICRkCisgICBlbGlmIFsgLWQgJGQvLnN2biBdOyB0aGVuCisJZG9fc3ZuICRkCisgICBlbHNlCisJZWNobyAiJyRkJyBoYXMgbmVpdGhlciBDVlMgbm9yIFNWTiBpbmZvcm1hdGlvbiEiCisgICBmaQorZG9uZQorCmRpZmYgLS1naXQgYS9kaXN0L2N2c3VwIGIvZGlzdC9jdnN1cAppbmRleCAwOGM4YTc1Li5jYTA3YjBmIDEwMDc1NQotLS0gYS9kaXN0L2N2c3VwCisrKyBiL2Rpc3QvY3ZzdXAKQEAgLTEsOCArMSw4IEBACi0jIS91c3IvYmluL2VudiBiYXNoCisjIS9iaW4vc2gKICMKICMgJElkJAogIwotZXhwb3J0IENWU19SU0g9c3NoCitDVlNfUlNIPXNzaDsgZXhwb3J0IENWU19SU0gKIFRBRz0KIFdPPTAKIERFU1Q9CkBAIC0xOCw2ICsxOCw3IEBACiAgICAgICAgIFRBUj0nL3Vzci9iaW4vc3RhciAtSHVzdGFyIC1ub3QgLXBhdD0iKi9DVlMvKiIgLWMgLWYnCiAgICAgZWxpZiBbIC14IC9iaW4vdGFyIF07IHRoZW4KICAgICAgICAgVEFSPSIvYmluL3RhciAtLWV4Y2x1ZGU9Q1ZTIC1jIC1mIgorICAgICAgICBlY2hvICJ3YXJuaW5nOiBzdGFyIG5vdCBhdmFpbGFibGUsIHVzaW5nIChsZXNzIHBvcnRhYmxlKSB0YXIuLi4iCiAgICAgZWxzZQogICAgICAgICBlY2hvICJuZWl0aGVyIC91c3IvYmluL3N0YXIgbm9yIC9iaW4vdGFyIGZvdW5kLiIKICAgICAgICAgZXhpdApkaWZmIC0tZ2l0IGEvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW4gYi9kaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tc2VjdXJpdHktaGVhZGVycy5pbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTU4ODFhCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXNlY3VyaXR5LWhlYWRlcnMuaW4KQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKKyMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gdGhpcyB3aXRob3V0IGNyZWF0aW5nIGEgZnVsbCBjb25maWd1cmUtbGlrZQorIyBzY3JpcHQsIGJ1dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNhbGwgbTQgZGlyZWN0bHkuCitBQ19JTklUKFtOZXQtU05NUF0sIFs1LjYucHJlMl0sIFtuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XSkKKworQUNfQVJHX1dJVEgoc2VjdXJpdHktbW9kdWxlcywKK1sgIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzPSJzMSBzMiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCBzZWN1cml0eQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbW9kdWxlcyAoc3BhY2Ugb3IgY29tbWEgc2VwYXJhdGVkIGxpc3QpLl0pCitBQ19BUkdfV0lUSChvdXRwdXQtaGVhZGVyLAorWyAgLS13aXRoLW91dHB1dC1oZWFkZXI9ImZpbGUiICAgICAgICAgICAgV2hlcmUgdG8gc3RvcmUgdGhlIGhlYWRlciBmaWxlXSkKK0FDX0FSR19XSVRIKG91dHB1dC1pbml0LAorWyAgLS13aXRoLW91dHB1dC1pbml0PSJmaWxlIiAgICAgICAgICAgICAgV2hlcmUgdG8gc3RvcmUgdGhlIGluaXQgZmlsZV0pCisKK200X2luY2x1ZGUoZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcykKKworQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSwgIiRORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiKQorCitpZiB0ZXN0ICJ4JHdpdGhfb3V0cHV0X2hlYWRlciIgIT0gIngiIDsgdGhlbgorICAgIHNlY3VyaXR5X2luY2xfZmlsZT0iJHdpdGhfb3V0cHV0X2hlYWRlciIKK2ZpCisKK2lmIHRlc3QgIngkd2l0aF9vdXRwdXRfaW5pdCIgIT0gIngiIDsgdGhlbgorICAgIHNlY3VyaXR5X2luaXRfZmlsZT0iJHdpdGhfb3V0cHV0X2luaXQiCitmaQorCittNF9pbmNsdWRlKGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3NlY3VyaXR5X21vZHVsZXMpCisKKwpkaWZmIC0tZ2l0IGEvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluIGIvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXRyYW5zcG9ydC1oZWFkZXJzLmluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxYTdiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L2dlbmVyYXRpb24tc2NyaXB0cy9nZW4tdHJhbnNwb3J0LWhlYWRlcnMuaW4KQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKyMgd2Ugc2hvdWxkIGJlIGFibGUgdG8gZG8gdGhpcyB3aXRob3V0IGNyZWF0aW5nIGEgZnVsbCBjb25maWd1cmUtbGlrZQorIyBzY3JpcHQsIGJ1dCB3ZSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRvIGNhbGwgbTQgZGlyZWN0bHkuCitBQ19JTklUKFtOZXQtU05NUF0sIFs1LjYucHJlMl0sIFtuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0XSkKKworQUNfQVJHX1dJVEgodHJhbnNwb3J0cywKK1sgIC0td2l0aC10cmFuc3BvcnRzPSJ0MSB0MiAuLi4iICAgQ29tcGlsZSBpbiB0aGUgZ2l2ZW4gU05NUCB0cmFuc3BvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZHVsZXMgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS5dKQorQUNfQVJHX1dJVEgob3V0X3RyYW5zcG9ydHMsCitbICAtLXdpdGgtb3V0LXRyYW5zcG9ydHM9InQxIC4uLiIgIEV4Y2x1ZGUgbGlzdGVkIFNOTVAgdHJhbnNwb3J0cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwYWNlIG9yIGNvbW1hIHNlcGFyYXRlZCBsaXN0KS5dKQorCitBQ19BUkdfV0lUSChvdXRwdXQsCitbICAtLXdpdGgtb3V0cHV0PSJmaWxlIiAgICAgICAgICAgIFdoZXJlIHRvIHN0b3JlIHRoZSBoZWFkZXIgZmlsZV0pCisKK200X2luY2x1ZGUoZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcykKKworQUNfREVGSU5FX1VOUVVPVEVEKE5FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRSwgIiRORVRTTk1QX1NZU1RFTV9JTkNMVURFX0ZJTEUiKQorCitpZiB0ZXN0ICJ4JHdpdGhfb3V0cHV0IiAhPSAieCIgOyB0aGVuCisgICAgY3Rvcl9oZWFkZXI9JHdpdGhfb3V0cHV0CitmaQorCittNF9pbmNsdWRlKGNvbmZpZ3VyZS5kL2NvbmZpZ19tb2R1bGVzX3RyYW5zcG9ydHMpCisKKwpkaWZmIC0tZ2l0IGEvZGlzdC9nZW5lcmF0aW9uLXNjcmlwdHMvZ2VuLXZhcmlhYmxlcy5pbiBiL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDMyOTIwNgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvZ2VuZXJhdGlvbi1zY3JpcHRzL2dlbi12YXJpYWJsZXMuaW4KQEAgLTAsMCArMSwxMCBAQAorIworIyBjb21tb24gdmFyaWFibGVzIHVzZWQgYnkgY29uZmlndXJlIHNjcmlwdHMKKyMKK1NFRD0iQFNFREAiCitDUFA9IkBDUFBAIgorR1JFUD0iQEdSRVBAIgorUEFSVElBTFRBUkdFVEZMQUdTPSJAUEFSVElBTFRBUkdFVEZMQUdTQCIKK05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRT0iQGFjX2N2X05FVFNOTVBfU1lTVEVNX0lOQ0xVREVfRklMRUAiCisKK3NyY2Rpcj1Ac3JjZGlyQApkaWZmIC0tZ2l0IGEvZGlzdC9tYWtlcmVsZWFzZSBiL2Rpc3QvbWFrZXJlbGVhc2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGI0NmI5ZjkuLjAwMDAwMDAKLS0tIGEvZGlzdC9tYWtlcmVsZWFzZQorKysgL2Rldi9udWxsCkBAIC0xLDM1NSArMCwwIEBACi0jIS91c3IvYmluL3BlcmwKLQotdXNlIHN0cmljdDsKLXVzZSBQb2Q6OlVzYWdlOwotCi0KLW15ICVvcHRzOwotbXkgJGRlc2NyOwotCi1Mb2NhbEdldE9wdGlvbnMoXCVvcHRzLAotCSAgIFsncnxyZWdleHAtaWdub3JlLXN0ZXBzPXMnLCdJZ25vcmUgdGhlc2UgUkVHRVhQIHN0ZXBzJ10sCi0JICAgWydzfHN0YXJ0LWF0PXMnLCAgICAgICAgICAgJ1NraXAgYWxsIHN0ZXBzIHVudGlsIEFSRyddLAotCSAgIFsnaXxpbnRlcmFjdGl2ZScsICAgICAgICAgICdQcm9tcHQgd2hldGhlciB0byBkbyBlYWNoIHN0ZXAnXSwKLQkgICBbJ258ZHJ5LXJ1bicsICAgICAnRHJ5IHJ1biBvbmx5LiAgRG9uXCd0IGFjdHVhbGx5IGRvIGFueXRoaW5nLiddLAotCSAgIFsnaHxoZWxwJywgJ0hlbHAnXSk7Ci0KLXBvZDJ1c2FnZSgxKSBpZiAoJG9wdHN7J2gnfSk7Ci1teSAkdmVyc2lvbiA9IHNoaWZ0OwotcG9kMnVzYWdlKCAiTm8gdmVyc2lvbiBzdXBwbGllZCIgKSBpZiAoISR2ZXJzaW9uKTsKLW15ICRleHRyYWp1bmsgPSBzaGlmdDsKLXBvZDJ1c2FnZSggIlVuZXhwZWN0ZWQgYXJndW1lbnQgKCRleHRyYWp1bmspIiApIGlmICgkZXh0cmFqdW5rKTsKLW15ICR2dGFnICAgPSAkdmVyc2lvbjsKLW15ICRicmFuY2ggPSAiIjsKLSMgRW5zdXJlIHdlIGhhdmUgYm90aCBudW1lcmljIGFuZCB0YWctc3R5bGUgdmVyc2lvbiBsYWJlbHMKLSMgcGx1cyB0aGUgYnJhbmNoIHRoYXQgd2UncmUgd29ya2luZyBmcm9tIChpZiByZWxldmFudCkKLWlmICggJHZlcnNpb24gPX4gL15FeHQvKSB7Ci0gICAgJHZlcnNpb24gPX4gcy9eRXh0LS8vZzsKLSAgICAkdmVyc2lvbiA9fiBzLy0vLi9nOwotfSBlbHNlIHsKLSAgICAkdnRhZyA9fiBzL1wuLy0vZzsKLSAgICAkdnRhZyA9ICJFeHQtIiAuICR2dGFnOwotfQotaWYgKCAkdmVyc2lvbiA9fiAvXihbMC05XVwuWzAtOV0pXC5bMC05XS8pIHsKLSAgICAoJGJyYW5jaCA9ICR2ZXJzaW9uKSA9fiBzLyhbMC05XVwuWzAtOV0pXC5bMC05XS4qL1wxLzsKLSAgICAkYnJhbmNoID1+IHMvXC4vLS87Ci0gICAgJGJyYW5jaCA9ICJWJHticmFuY2h9LXBhdGNoZXMiOwotfQotCi0jIE1ha2Ugc3VyZSB3ZSdyZSBhdCB0aGUgcm9vdCBvZiB0aGUgYnVpbGQgdHJlZQotIyAgKGlmIHdlJ3JlIGluIHRoZSBkaXN0IGRpcmVjdG9yeSwgdGhlbiBjZCAuLikKLWNoZGlyKCIuLiIpIGlmICgtZiAnbWFrZXJlbGVhc2UnKTsKLWRpZSAiTm90IGF0IHJvb3Qgb2YgYnVpbGQgdHJlZSIgaWYgKCEgLWYgJ2NvbmZpZ3VyZS5pbicpOwotCi0jCi0jICBURVNUSU5HOgotIwotIyBTdGVwIDEpIEVuc3VyZSB0aGUgYnVpbGQgdHJlZSBpcyB1cCB0byBkYXRlCi1TeXN0ZW0oInVwZGF0ZSIsInN2biAtdSBzdGF0dXMiKTsKLVN5c3RlbSgidXBkYXRlIiwic3ZuIC1xIHVwZGF0ZSIpOwotCi0jIFN0ZXAgMikgQ2hhbmdlIHRoZSBsaWJ0b29sIHZlcnNpb24gaW5mb3JtYXRpb24gaW4gTWFrZWZpbGUudG9wCi1tYW51YWxzdGVwKCd2ZXJzaW9uOm1hbnVhbGVkaXQnLAotCSAgICJZb3UgKG1heSkgbmVlZCB0byBlZGl0IE1ha2VmaWxlLnRvcCB0byB1cGRhdGUgdGhlIGxpYnJhcnkgdmVyc2lvbiBudW1iZXJpbmcKLSAgICAgKHVzdWFsbHkganVzdCBmb3IgdGhlIGZpcnN0IHByZS1yZWxlYXNlIG9mIGEgZ2l2ZW4gdmVyc2lvbikuCi0gICAgICAgIFNlZSB0aGUgY29tbWVudHMgaW4gUkVMRUFTRS1JTlNUUlVDVElPTlMKLSAgICAgICAgYWJvdXQgTElCQ1VSUkVOVCwgTElCQUdFIGFuZCBMSUJSRVZJU0lPTi4KLQotICBJJ2xsIGNvbW1pdCB0aGUgZmlsZSBmb3IgeW91IGFmdGVyIHlvdSdyZSBkb25lCi0iKTsKLVN5c3RlbSgidmVyc2lvbjpjb21taXQiLAotICAgICAgICJzdm4gY29tbWl0IC1tIFwidmVyc2lvbiB1cGRhdGVcIiBNYWtlZmlsZS50b3AiKTsKLQotIyBTdGVwIDMpIGNvbmZpZ3VyZSBhbmQgYnVpbGQgYW5kIHRlc3QgaXQKLW15ICR0cmFuc3BvcnRhcmdzID0gIiI7Ci1pZiAoICReTyBlcSAibGludXgiICkgewotICAgICR0cmFuc3BvcnRhcmdzID0gIi0td2l0aC10cmFuc3BvcnRzPUlQWCI7Ci19Ci1teSAkY29uZmlndXJlYXJncyA9ICItLWNhY2hlPWNvbmZpZy5jYWNoZSAtLXdpdGgtZGVmYXVsdHMgIi4KLSAgICAiLS13aXRoLW1pYi1tb2R1bGVzPScgICAgIGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUgICAiLgotICAgICIgIHRlc3RoYW5kbGVyIHNtdXggUm1vbicgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIuCi0gICAgIiAkdHJhbnNwb3J0YXJncyAgICAgICAgLS1lbmFibGUtaXB2NiAgICAgICAgICAgICAgICAgIi4KLSAgICAiLS1lbmFibGUtZW1iZWRkZWQtcGVybCAtLWVuYWJsZS1zaGFyZWQiOwotU3lzdGVtKCJidWlsZDpkaXN0Y2xlYW4iLCJtYWtlIGRpc3RjbGVhbiIpIGlmICgtZiAnTWFrZWZpbGUnKTsKLVN5c3RlbSgiYnVpbGQ6Y29uZmlndXJlIiwiLi9jb25maWd1cmUgJGNvbmZpZ3VyZWFyZ3MiKTsKLVN5c3RlbSgiYnVpbGQ6bWFrZSIsIm1ha2UiKTsKLVN5c3RlbSgiYnVpbGQ6dGVzdCIsIm1ha2UgdGVzdCBURVNUT1BUUz0tbiIpOwotCi0jCi0jIERPQ1VNRU5UQVRJT04KLSMKLSMgU3RlcCA0KSBVcGRhdGUgZG94eWdlbiB2ZXJzaW9uIG51bWJlciwgYW5kIGdlbmVyYXRlIG1hbiBwYWdlcwotU3lzdGVtKCJkb2NzOmRveHlnZW5jb25mIiwKLSAgICAgICAicGVybCBsb2NhbC9WZXJzaW9uLU11bmdlLnBsIC12ICR2ZXJzaW9uIC1NIC1QIC1DIC10IGRveHlnZW4iKTsKLVN5c3RlbSgiZG9jczptYWtlIiwibWFrZSBkb2NzIik7Ci1TeXN0ZW0oImRvY3M6bWFuY3AiLCJtYWtlIG1hbmNwIik7Ci1TeXN0ZW0oImRvY3M6dXBkYXRlIiwic3ZuIC11IHN0YXR1cyBtYW4iKTsKLW1hbnVhbHN0ZXAoJ2RvY3M6bWFudWFsYWRkbmV3bWFuJywKLSAgIlVwZGF0ZSBtYW4vTWFrZWZpbGUuaW4gd2l0aCBkZXRhaWxzIG9mIGFueSBuZXcgbWFuIHBhZ2VzLAotICBhbmQgcnVuICdzdm4gYWRkJyBvbiB0aGVtLgotICBJJ2xsIGNvbW1pdCB0aGVzZSBjaGFuZ2VzIGZvciB5b3UgYWZ0ZXIgeW91J3JlIGRvbmUKLSIpOwotU3lzdGVtKCJkb2NzOmNvbW1pdCIsInN2biBjb21taXQgLW0gXCJkb2N1bWVudGF0aW9uIHVwZGF0ZVwiIG1hbiIpOwotCi0jIFN0ZXAgNSkgQ2hlY2sgY29kZSBmb3IgaWxsZWdhbCBjb25zdHJ1Y3RzCi1TeXN0ZW0oImNvZGU6Y2hlY2tjb21tZW50cyIsIm1ha2UgY2hlY2tzIik7Ci0KLSMgU3RlcCA2KSBVcGRhdGUgTWFrZWZpbGUgZGVwZW5kZW5jaWVzCi1TeXN0ZW0oImNvZGU6bWFrZWRlcGVuZCIsIm1ha2UgZGlzdGRlcGVuZCIpOwotU3lzdGVtKCJjb2RlOmNvbW1pdGRlcGVuZCIsInN2biBjb21taXQgLW0gXCJtYWtlIGRlcGVuZFwiIGBmaW5kIC4gLW5hbWUgTWFrZWZpbGUuZGVwZW5kYCIpOwotCi0jIFN0ZXAgNykgVXBkYXRlIENoYW5nZUxvZwotIyAgIFhYWDogTWF5IG5lZWQgdG8gZXh0ZW5kIHRoZSBmb2xkaW5nIGxpbmUtbGVuZ3RoLAotIyAgICAgICAgdG8gYXZvaWQgc3ZuMmNsIG1hbmdsaW5nIENIQU5HRVMvTkVXUyBlbnRyaWVzCi1TeXN0ZW0oImNoYW5nZWxvZzpzdm4yY2wiLAotICAgICAgICJzdm4yY2wgLWYgQ2hhbmdlTG9nLmFkZCAtLWJyZWFrLWJlZm9yZS1tc2cgLS1zdG9wLW9uLWNvcHkiKTsKLVN5c3RlbSgiY2hhbmdlbG9nOmNoYW5nZWxvZ2ZpeCIsCi0gICAgICAgInBlcmwgZGlzdC9jaGFuZ2Vsb2dmaXggJGJyYW5jaCA8IENoYW5nZUxvZy5hZGQgPiBDaGFuZ2VMb2cucmVhbGx5YWRkIik7Ci1tYW51YWxzdGVwKCJjaGFuZ2Vsb2c6bWFudWFsZWRpdCIsCi0gICAgICAgICAgICJZb3UgbmVlZCB0byBtYW51YWxseSBpbnNlcnQgdGhlICpyZWxldmVudCogcG9ydGlvbnMgb2YKLSAgJ0NoYW5nZUxvZy5yZWFsbHlhZGQnIGludG8gdGhlIENoYW5nZUxvZyBmaWxlLgotICBJJ2xsIGNvbW1pdCB0aGVzZSBjaGFuZ2VzIGZvciB5b3UgYWZ0ZXJ3YXJkcyIpOwotU3lzdGVtKCJjaGFuZ2Vsb2c6Y29tbWl0Iiwic3ZuIGNvbW1pdCAtbSBcInZlcnNpb24gdXBkYXRlXCIgQ2hhbmdlTG9nIik7Ci0KLSMgU3RlcCA4KSBVcGRhdGUgUkVBRE1FL05FV1MvQ0hBTkdFUwotU3lzdGVtKCJkb2NzOm5ld25ld3MiLAotICAgICAgICJwZXJsIGRpc3QvZXh0cmFjdG5ld3MgLXMgLS0tLS0gLWUgLS0tLS0gQ2hhbmdlTG9nIik7Ci1TeXN0ZW0oImRvY3M6bmV3bmV3cyIsCi0gICAgICAgInBlcmwgZGlzdC9leHRyYWN0bmV3cyAtYyBDSEFOR0VTLm5ldzIgLW4gTkVXUy5uZXcyIENoYW5nZUxvZy5yZWFsbHlhZGQiKTsKLW1hbnVhbHN0ZXAoImRvY3M6UkVBRE1FIiwKLSAgICAgICAgICAgIllvdSBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCB0aGUgcmVsZXZlbnQgcG9ydGlvbnMgb2YKLSAgJ0NIQU5HRVMubmV3JyBhbmQgJ05FV1MubmV3JyBpbnRvIHRoZSBDSEFOR0VTIGFuZCBORVdTIGZpbGUuCi0gIChUaGVyZSBhcmUgYWx0ZXJuYXRpdmUgdmVyc2lvbnMgaW4gJ0NIQU5HRVMubmV3MicgYW5kICdORVdTLm5ldzInKQotICBZb3UgbWF5IHdpc2ggdG8gdXBkYXRlIHRoZSBSRUFETUUgZmlsZSBhcyB3ZWxsLgotICBJJ2xsIGNvbW1pdCB0aGVzZSBjaGFuZ2VzIGZvciB5b3UgYWZ0ZXJ3YXJkcyIpOwotU3lzdGVtKCJkb2NzOmNvbW1pdCIsCi0gICAgICAgInN2biBjb21taXQgLW0gXCJ2ZXJzaW9uIHVwZGF0ZVwiIFJFQURNRSBORVdTIENIQU5HRVMiKTsKLQotIwotIyBSRUxFQVNFCi0jCi0jIFN0ZXAgIDkpICBSZXN5bmMgY29kZSAob21pdHRlZCkKLSMgU3RlcCAxMCkgIFVwZGF0ZSB2ZXJzaW9uCi1TeXN0ZW0oInJlbGVhc2U6dmVyc2lvbnN0YW1wIiwKLSAgICAgICAicGVybCBsb2NhbC9WZXJzaW9uLU11bmdlLnBsIC12ICR2ZXJzaW9uIC1NIC1QIC1DIik7Ci0KLSMgU3RlcCAxMSkgIENyZWF0ZSB0aGUgcmVsZWFzZSB0YWcgY2hlY2twb2ludAotbXkgJHJvb3Q9Imh0dHBzOi8vbmV0LXNubXAuc3ZuLnNvdXJjZWZvcmdlLm5ldC9zdm5yb290L25ldC1zbm1wIjsKLWlmICggJGJyYW5jaCApIHsKLSAgICBTeXN0ZW0oInJlbGVhc2U6dGFnIiwKLSAgICAgICAic3ZuIGNvcHkgLW0gXCIkdmVyc2lvbiByZWxlYXNlXCIgJHJvb3QvYnJhbmNoZXMvJGJyYW5jaCAkcm9vdC90YWdzLyR2dGFnIik7Ci19IGVsc2UgewotICAgIFN5c3RlbSgicmVsZWFzZTp0YWciLAotICAgICAgICJzdm4gY29weSAtbSBcIiR2ZXJzaW9uIHJlbGVhc2VcIiAkcm9vdC90cnVuayAkcm9vdC90YWdzLyR2dGFnIik7Ci19Ci0KLSMgU3RlcCAxMikgIENvbnN0cnVjdCB0aGUgdGFyYmFsbAotbXkgJHRhciA9ICJzdGFyIGFydHlwZT11c3RhciI7ICAgICMgWFhYIC0gY2hlY2sgZm9yIHN0YXIvZ3Rhci9ldGMKLVN5c3RlbSgicmVsZWFzZTptYWtlZGlzdCIsCi0gICAgICAgInN2biBleHBvcnQgJHJvb3QvdGFncy8ke3Z0YWd9L25ldC1zbm1wIG5ldC1zbm1wLSR2ZXJzaW9uIik7Ci1TeXN0ZW0oInJlbGVhc2U6cmVtb3ZlZmlsZXMiLAotICAgICAgICJuZXQtc25tcC0kdmVyc2lvbi9yZW1vdmUtZmlsZXMgbmV0LXNubXAtJHZlcnNpb24iKTsKLVN5c3RlbSgicmVsZWFzZTptYWtlZGlzdCIsCi0gICAgICAgIiR0YXIgLWMgLXogLWYgbmV0LXNubXAtJHt2ZXJzaW9ufS50YXIuZ3ogIG5ldC1zbm1wLSR2ZXJzaW9uIik7Ci1TeXN0ZW0oInJlbGVhc2U6bWFrZXppcGNsZWFuIiwKLSAgICAgICAicm0gLWYgbmV0LXNubXAtJHt2ZXJzaW9ufS56aXAiKTsKLVN5c3RlbSgicmVsZWFzZTptYWtlemlwIiwKLSAgICAgICAiemlwIC1yIG5ldC1zbm1wLSR7dmVyc2lvbn0uemlwICBuZXQtc25tcC0kdmVyc2lvbiIpOwotCi0KLSMgU3RlcCAxMykgIFNpZ24gKG9yIGNoZWNrc3VtKSB0aGUgcGFja2FnZQotbXkgJHNpZzE7Ci1teSAkc2lnMjsKLW15ICRwa2cxID0gIm5ldC1zbm1wLSR7dmVyc2lvbn0udGFyLmd6IjsKLW15ICRwa2cyID0gIm5ldC1zbm1wLSR7dmVyc2lvbn0uemlwIjsKLQotU3lzdGVtKCJyZWxlYXNlOnNlYXJjaGluZy1ncGcta2V5cyIsCi0gICAgICAgImdwZyAtLWxpc3Qtc2VjcmV0LWtleXMgbmV0LXNubXAtYWRtaW4iKTsKLWlmKCQ/ICE9IDApIHsKLSAgICAkc2lnMSA9ICIke3BrZzF9Lm1kNSI7Ci0gICAgJHNpZzIgPSAiJHtwa2cyfS5tZDUiOwotICAgIFN5c3RlbSgicmVsZWFzZTptZDUiLCJtZDVzdW0gJHBrZzEgPiAkc2lnMSIpOwotICAgIFN5c3RlbSgicmVsZWFzZTptZDUiLCJtZDVzdW0gJHBrZzIgPiAkc2lnMiIpOwotfSBlbHNlIHsKLSAgICAjIGN1cnJlbnRseSBvbmx5IHJzdG9yeSBhbmQgaGFyZGFrZXIgaGF2ZSB0aGUgZ3BnIGtleXMgdGlsbCBXZXMKLSAgICAjIHNlZXMgc29tZW9uZSBlbHNlIGluIHBlcnNvbiA7LSkKLSAgICAkc2lnMSA9ICIke3BrZzF9LmFzYyI7Ci0gICAgU3lzdGVtKCJyZWxlYXNlOmdwZyIsImdwZyAtdSBuZXQtc25tcC1hZG1pbiAtYSAtLWRldGFjaC1zaWduICRwa2cxIik7Ci0gICAgJHNpZzIgPSAiJHtwa2cyfS5hc2MiOwotICAgIFN5c3RlbSgicmVsZWFzZTpncGciLCJncGcgLXUgbmV0LXNubXAtYWRtaW4gLWEgLS1kZXRhY2gtc2lnbiAkcGtnMiIpOwotfQotCi0jCi0jICBSRUxFQVNFIFRFU1RJTkc6Ci0jCi0jIFN0ZXAgMTQpICBVbnBhY2ssIGJ1aWxkIGFuZCB0ZXN0IHRoZSByZWxlYXNlIHRhcmJhbGwKLVN5c3RlbSgicG9zdHRlc3Q6dW50YXIiLCAicm0gLXJmIG5ldC1zbm1wLSR7dmVyc2lvbn0iKTsKLVN5c3RlbSgicG9zdHRlc3Q6dW50YXIiLCAidGFyIHh6ZiBuZXQtc25tcC0ke3ZlcnNpb259LnRhci5neiIpOwotY2hkaXIoIm5ldC1zbm1wLSR7dmVyc2lvbn0iKTsKLVN5c3RlbSgicG9zdHRlc3Q6Y29uZmlndXJlIiwiLi9jb25maWd1cmUgJGNvbmZpZ3VyZWFyZ3MiKTsKLVN5c3RlbSgicG9zdHRlc3Q6bWFrZSIsIm1ha2UiKTsKLVN5c3RlbSgicG9zdHRlc3Q6dGVzdCIsIm1ha2UgdGVzdCIpOwotY2hkaXIoIi4uIik7Ci0KLSMgU3RlcCAxNSkgIERvdWJsZS1jaGVjayB0aGVyZSBhcmUgbm8gb3V0c3RhbmRpbmcgY2hhbmdlcwotU3lzdGVtKCJyZWxlYXNlOnVwZGF0ZSIsInN2biAtdSBzdGF0dXMiKTsKLQotIwotIyBTdGVwcyAxNiBhbmQgZm9sbG93aW5nIGFyZSBOT1QgaGFuZGxlZCBhdXRvbWF0aWNhbGx5LgotIyBTZWUgdGhlIFJFTEVBU0UtSU5TVFJVQ1RJT05TIGZvciBmdWxsIGRldGFpbHMuCi0jCi1wcmludCBTVERFUlIgIioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogRklOSVNIRUQgKioqKioqKioqKioqKioqKioqKipcbiI7Ci1wcmludCBTVERFUlIgIlxuRG91YmxlIGNoZWNrIHRoZSBTVk4gc3RhdHVzIG91dHB1dCBhYm92ZSBmb3IgYW55IG91dHN0YW5kaW5nIGNoYW5nZXNcblxuIjsKLXByaW50IFNUREVSUiAiUnVuIHRoZSBmb2xsb3dpbmcgY29tbWFuZCB0byB1cGxvYWQgdGhlIHJlbGFzZSB0byBTRjpcbiI7Ci1wcmludCBTVERFUlIgIiAgcnN5bmMgLXYgICRwa2cxICRwa2cyICRzaWcxICRzaWcyIGZycy5zb3VyY2Vmb3JnZS5uZXQ6dXBsb2Fkcy9cbiI7Ci1wcmludCBTVERFUlIgIlNlZSBSRUxFQVNFLUlOU1RSVUNUSU9OUyBmb3IgYW55IGFkZGl0aW9uYWwgc3RlcHNcbiI7Ci0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotc3ViIFN5c3RlbSB7Ci0gICAgbXkgJG5hbWUgPSBzaGlmdDsKLSAgICBteSAkY21kID0gJGRlc2NyID0gam9pbigiICIsIEBfKTsKLSAgICBteSAkcmM7Ci0gICAgd2hpbGUgKGRvc3RlcCgkbmFtZSkpIHsKLQlwcmludCBTVERFUlIgIiAgcnVubmluZzogIiwkY21kLCJcbiI7Ci0JbGFzdCBpZiAoJG9wdHN7J24nfSk7Ci0Jc3lzdGVtKEBfKTsKLQkkcmMgPSBjaGVja3Jlc3VsdCgpOwotICAgICAgICBsYXN0IGlmICgkcmMgPT0gMCk7Ci0gICAgfQotfQotCi1zdWIgY2hlY2tyZXN1bHQgewotICAgIGlmICgkPykgewotCXByaW50IFNUREVSUiAiVGhlIGFib3ZlIFNURVAgZmFpbGVkLiAgQ29udGludWUgYW55d2F5ICh5L24vcik/ICAiOwotCW15ICRhbnMgPSA8U1RESU4+OwotICAgICAgICByZXR1cm4gMSBpZiAoJGFucyA9fiAvXnIvKTsKLQlpZiAoJGFucyA9fiAvXm4vKSB7Ci0JICAgIHByaW50IFNUREVSUiAiICBFWElUSU5HXG4iOwotCSAgICBleGl0OwotCX0KLSAgICB9Ci0gICByZXR1cm4gMDsKLX0KLQotc3ViIGRvc3RlcCB7Ci0gICAgbXkgJG5hbWUgPSBzaGlmdDsKLSAgICBwcmludCBTVERFUlIgIlxuKioqKioqKioqKiBTVEVQOiAkbmFtZSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiI7Ci0gICAgaWYgKCRkZXNjcikgewotCXByaW50IFNUREVSUiAiICBbJGRlc2NyXVxuIjsKLQkkZGVzY3IgPSB1bmRlZjsKLSAgICB9Ci0gICAgcHJpbnQgIlxuIjsKLSAgICBpZiAoJG9wdHN7J3MnfSAmJiAkbmFtZSBuZSAkb3B0c3sncyd9KSB7Ci0JcHJpbnQgU1RERVJSICIgICAgICBbc2tpcHBpbmddXG4iOwotCXJldHVybiAwOwotICAgIH0KLSAgICAkb3B0c3sncyd9ID0gJyc7Ci0gICAgaWYgKCRvcHRze3J9ICYmICRuYW1lID1+IC8kb3B0c3tyfS8pIHsKLQlwcmludCBTVERFUlIgIiAgICAgIFtza2lwcGluZ11cbiI7Ci0JcmV0dXJuIDA7Ci0gICAgfSBlbHNpZiAoJG9wdHN7J2knfSkgewotCXByaW50IFNUREVSUiAiICBEbyB0aGlzIHN0ZXAgKHkvbi9xKT8gICI7Ci0JbXkgJGFucyA9IDxTVERJTj47Ci0JaWYgKCRhbnMgPX4gL15uLykgewotCSAgICBwcmludCBTVERFUlIgIiAgICAgIFtza2lwcGluZ11cbiI7Ci0JICAgIHJldHVybiAwOwotCX0KLQlpZiAoJGFucyA9fiAvXnEvKSB7Ci0JICAgIHByaW50IFNUREVSUiAiICAgICAgUVVJVFRJTkdcbiI7Ci0JICAgIGV4aXQ7Ci0JfQotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLQotc3ViIG1hbnVhbHN0ZXAgewotICAgIG15ICR0YWcgPSBzaGlmdDsKLQotICAgIGlmIChkb3N0ZXAoJHRhZykpIHsKLQlwcmludCBTVERFUlIgIlxuXG4iLGpvaW4oIiAiLEBfKTsKLQotCXByaW50IFNUREVSUiAiXG5cbiAgSGl0IHJldHVybiB3aGVuIGRvbmU6ICAiOwotCi0JcmV0dXJuIDEgaWYgKCRvcHRzeyduJ30pOwotCi0JbXkgJGJvZ3VzID0gPFNURElOPjsKLQlyZXR1cm4gMTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIGdldG9wdCBsb25nIGd1aSBwb3J0YWJpbGl0eSBjb2RlCi0jCi1zdWIgTG9jYWxHZXRPcHRpb25zIHsKLSAgICBpZiAoZXZhbCB7cmVxdWlyZSBHZXRvcHQ6OkdVSTo6TG9uZzt9KSB7Ci0JaW1wb3J0IEdldG9wdDo6R1VJOjpMb25nOwotCUdldG9wdDo6R1VJOjpMb25nOjpDb25maWd1cmUocXcoZGlzcGxheV9oZWxwIG5vX2lnbm9yZV9jYXNlKSk7Ci0JcmV0dXJuIEdldE9wdGlvbnMoQF8pOwotICAgIH0gZWxzZSB7Ci0JcmVxdWlyZSBHZXRvcHQ6Okxvbmc7Ci0JR2V0b3B0OjpMb25nOjpDb25maWd1cmUocXcoYXV0b19oZWxwIG5vX2lnbm9yZV9jYXNlKSk7Ci0JaW1wb3J0IEdldG9wdDo6TG9uZzsKLSAgICB9Ci0gICAgR2V0T3B0aW9ucyhMb2NhbE9wdGlvbnNNYXAoQF8pKTsKLX0KLQotc3ViIExvY2FsT3B0aW9uc01hcCB7Ci0gICAgbXkgKCRzdCwgJGNiLCBAb3B0cykgPSAoKHJlZigkX1swXSkgZXEgJ0hBU0gnKQotCQkJICAgID8gKDEsIDEsICRfWzBdKSA6ICgwLCAyKSk7Ci0gICAgZm9yIChteSAkaSA9ICRzdDsgJGkgPD0gJCNfOyAkaSArPSAkY2IpIHsKLQlpZiAoJF9bJGldKSB7Ci0JICAgIG5leHQgaWYgKHJlZigkX1skaV0pIGVxICdBUlJBWScgJiYgJF9bJGldWzBdID1+IC9eR1VJOi8pOwotCSAgICBwdXNoIEBvcHRzLCAoKHJlZigkX1skaV0pIGVxICdBUlJBWScpID8gJF9bJGldWzBdIDogJF9bJGldKTsKLQkgICAgcHVzaCBAb3B0cywgJF9bJGkrMV0gaWYgKCRjYiA9PSAyKTsKLQl9Ci0gICAgfQotICAgIHJldHVybiBAb3B0czsKLX0KLQotX19FTkRfXwotCi09aGVhZDEgTkFNRQotCi1tYWtlcmVsZWFzZSAtIHNvZnR3YXJlIHBhY2thZ2UgcmVsZWFzZSBzY3JpcHQKLQotPWhlYWQxIFNZTk9QU0lTCi0KLW1ha2VyZWxlYXNlIFtvcHRpb25zXSB2ZXJzaW9uCi0KLT1oZWFkMSBBUkdVTUVOVFMKLQotRm9yIGZ1bGwgcmVsZWFzZXMsIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gIEk8NS54Lnk+Ci0KLUZvciBwcmUtcmVsZWFzZXMsIHRoZSB2ZXJzaW9uIHNob3VsZCBiZSBzcGVjaWZpZWQgaW4gdGhlIGZvcm0gIEk8NS54LnkucHJlTj4KLQotRm9yIHJlbGVhc2UgY2FuZGlkYXRlcywgdGhlIHZlcnNpb24gc2hvdWxkIGJlIHNwZWNpZmllZCBpbiB0aGUgZm9ybSAgSTw1LngueS5yY04+Ci0KLUFsdGVybmF0aXZlbHksIGl0IGlzIGFsc28gcG9zc2libGUgdG8gc3BlY2lmeSB2ZXJzaW9ucyBpbiB0aGUgZm9ybSAgRXh0LTUteC15Ci0KLT1oZWFkMSBPUFRJT05TCi0KLT1vdmVyIDgKLQotPWl0ZW0gQjwtciB7c3RlcH18IC0tcmVnZXhwLWlnbm9yZS1zdGVwcz17c3RlcH0+Ci0KLUlnbm9yZSBzdGVwcyBtYXRjaGluZyB0aGUgcmVndWxhciBleHByZXNzaW9uIHtzdGVwfQotCi09aXRlbSBCPC1zIHtzdGVwfXwgLS1zdGFydC1hdD17c3RlcH0+Ci0KLVNraXAgYWxsIHN0ZXBzIHByZWNlZGluZyB0aGUgc3BlY2lmaWVkIChleGFjdCkge3N0ZXB9Ci0KLT1pdGVtIEI8LWkgfCAtLWludGVyYWN0aXZlPgotCi1Qcm9tcHQgd2hldGhlciBvciBub3QgdG8gZXhlY3V0ZSBlYWNoIHN0ZXAKLQotPWl0ZW0gQjwtbiB8IC0tZHJ5LXJ1bj4KLQotUHJpbnQgdGhlIGNvbW1hbmRzIHRoYXQgd291bGQgYmUgZXhlY3V0ZWQsIGJ1dCBkbyBub3QgZXhlY3V0ZSB0aGVtLgotCi09aXRlbSBCPC1oIHwgLS1oZWxwPgotCi1EaXNwbGF5IHRoaXMgaGVscCBtZXNzYWdlLgotCi09YmFjawpkaWZmIC0tZ2l0IGEvZGlzdC9tYWtlcmVsZWFzZS54bWwgYi9kaXN0L21ha2VyZWxlYXNlLnhtbAppbmRleCAyNWI3YTlkLi5iMWNiZDQ4IDEwMDY0NAotLS0gYS9kaXN0L21ha2VyZWxlYXNlLnhtbAorKysgYi9kaXN0L21ha2VyZWxlYXNlLnhtbApAQCAtMjc5LDcgKzI3OSw3IEBACiAJICAgICAgPC90ZXh0PgogCSAgICAgIDxjb21tYW5kcz4KIAkgICAgICAgIDxjb21tYW5kPmdpdCBjaGVja291dCBWNS00LXBhdGNoZXM8L2NvbW1hbmQ+Ci0JICAgICAgICA8Y29tbWFuZD5lY2hvIHtCUkFOQ0hQQVRIfSA+PiBkaXN0L3JlbGVhc2UgPC9jb21tYW5kPgorCSAgICAgICAgPGNvbW1hbmQ+ZWNobyB7QlJBTkNIUEFUSH0gcmMgPj4gZGlzdC9yZWxlYXNlIDwvY29tbWFuZD4KIAkgICAgICAgIDxjb21tYW5kIGlnbm9yZWVycm9yPSIxIj5naXQgY29tbWl0IC1tICJSZWxlYXNlIENhbmRpZGF0ZSBmb3Ige0JSQU5DSFBBVEh9IiBkaXN0L3JlbGVhc2U8L2NvbW1hbmQ+CiAJICAgICAgICA8Y29tbWFuZD5naXQgY2hlY2tvdXQge0JSQU5DSFBBVEh9IDwvY29tbWFuZD4KIAkgICAgICAgIDxjb21tYW5kPmdpdCBtZXJnZSBWNS00LXBhdGNoZXMgICAgPC9jb21tYW5kPgpAQCAtMzYyLDcgKzM2Miw3IEBACiAJPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6Y29uZmlndXJlIiB0aXRsZT0iYnVpbGQ6Y29uZmlndXJlIj4KIAkgIDx0ZXh0PldlIG5lZWQgdG8gcnVuIGNvbmZpZ3VyZSB0byBzZXQgdXAgdGhlIGJ1aWxkIHRyZWUuPC90ZXh0PgogCSAgPGNvbW1hbmRzPgotCSAgICA8Y29tbWFuZD4uL2NvbmZpZ3VyZSAtLWNhY2hlPWNvbmZpZy5jYWNoZSAtLXdpdGgtZGVmYXVsdHMgLS13aXRoLW1pYi1tb2R1bGVzPSdob3N0IGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUgdGVzdGhhbmRsZXIgc211eCBSbW9uIGRpc21hbi9ldmVudC1taWInIC0td2l0aC10cmFuc3BvcnRzPUlQWCAtLWVuYWJsZS1pcHY2IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmwgLS1lbmFibGUtc2hhcmVkPC9jb21tYW5kPgorCSAgICA8Y29tbWFuZD4uL2NvbmZpZ3VyZSAtLWNhY2hlPWNvbmZpZy5jYWNoZSAtLXdpdGgtZGVmYXVsdHMgLS13aXRoLW1pYi1tb2R1bGVzPSdob3N0IGV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUgdGVzdGhhbmRsZXIgdGxzdG0tbWliIHRzbS1taWIgc211eCBSbW9uIGRpc21hbi9ldmVudC1taWInIC0td2l0aC10cmFuc3BvcnRzPSJJUFggVExTVENQIERUTFNVRFAiIC0td2l0aC1zZWN1cml0eS1tb2R1bGVzPSJ0c20iIC0tZW5hYmxlLWlwdjYgLS1lbmFibGUtZW1iZWRkZWQtcGVybCAtLWVuYWJsZS1zaGFyZWQ8L2NvbW1hbmQ+CiAJICA8L2NvbW1hbmRzPgogCTwvc3RlcD4KIAk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJidWlsZDptYWtlIiB0aXRsZT0iYnVpbGQ6bWFrZSI+CkBAIC0zNzEsMTIgKzM3MSwzMCBAQAogCSAgICA8Y29tbWFuZD5ORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTj0xIG1ha2U8L2NvbW1hbmQ+CiAJICA8L2NvbW1hbmRzPgogCTwvc3RlcD4KLQk8c3RlcCB0eXBlPSJzeXN0ZW0iIHN0ZXBuYW1lPSJidWlsZDp0ZXN0IiB0aXRsZT0iYnVpbGQ6dGVzdCI+CisJPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6dGVzdCIgdGl0bGU9InRlc3Rpbmc6IGRlZmF1bHQgdGVzdHMiPgogCSAgPHRleHQ+Tm93IHdlIHJ1biAibWFrZSB0ZXN0IiB3aGljaCBzaG91bGQgcHJvZHVjZSBhIHBlcmZlY3QKIAkgIHNldCB1cCB0ZXN0IHJlc3VsdHMuICBJZiBub3QsIHRoaXMgbmVlZHMgdG8gYmUgZml4ZWQgb3IgYXQKIAkgIGxlYXN0IHVuZGVyc3Rvb2QgYW5kIGFjY2VwdGVkIGFzIGlzIGZvciBzb21lIG90aGVyIHJlYXNvbi48L3RleHQ+CiAJICA8Y29tbWFuZHM+Ci0JICAgIDxjb21tYW5kPm1ha2UgdGVzdCBURVNUT1BUUz0tbjwvY29tbWFuZD4KKwkgICAgPGNvbW1hbmQ+bWFrZSB0ZXN0PC9jb21tYW5kPgorCSAgPC9jb21tYW5kcz4KKwk8L3N0ZXA+CisJPHN0ZXAgdHlwZT0ic3lzdGVtIiBzdGVwbmFtZT0iYnVpbGQ6dGVzdDp1bml0IiB0aXRsZT0idGVzdGluZzogdW5pdC10ZXN0cyI+CisJICA8dGV4dD5Ob3cgd2UgcnVuIHRoZSB1bml0LXRlc3RzIHdoaWNoIHNob3VsZCBhbHNvIHByb2R1Y2UgYSBwZXJmZWN0CisJICBzZXQgdXAgdGVzdCByZXN1bHRzLiAgSWYgbm90LCB0aGlzIG5lZWRzIHRvIGJlIGZpeGVkIG9yIGF0CisJICBsZWFzdCB1bmRlcnN0b29kIGFuZCBhY2NlcHRlZCBhcyBpcyBmb3Igc29tZSBvdGhlciByZWFzb24uPC90ZXh0PgorCSAgPGNvbW1hbmRzPgorCSAgICA8Y29tbWFuZD5jZCB0ZXN0aW5nICZhbXA7JmFtcDsgLi9SVU5GVUxMVEVTVFMgLWcgdW5pdC10ZXN0czwvY29tbWFuZD4KKwkgIDwvY29tbWFuZHM+CisJPC9zdGVwPgorCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImJ1aWxkOnRlc3Q6dHJhbnNwb3J0cyIgdGl0bGU9InRlc3Rpbmc6IHRyYW5zcG9ydHMiPgorCSAgPHRleHQ+Tm93IHdlIHJ1biB0aGUgdHJhbnNwb3J0IHRlc3RzIHdoaWNoIHNob3VsZCBhbHNvCisJICBwcm9kdWNlIGEgcGVyZmVjdCBzZXQgdXAgdGVzdCByZXN1bHRzLCBpZiB5b3VyIG1hY2hpbmUKKwkgIHN1cHBvcnRzIGFsbCB0aGUgdHJhbnNwb3J0cy4gIElmIG5vdCwgdGhpcyBuZWVkcyB0byBiZSBmaXhlZAorCSAgb3IgYXQgbGVhc3QgdW5kZXJzdG9vZCBhbmQgYWNjZXB0ZWQgYXMgaXMgZm9yIHNvbWUgb3RoZXIKKwkgIHJlYXNvbiAobGlrZSB5b3UgY2FuJ3QgZG8gSVB2NiBvbiB5b3VyIHN5c3RlbSkuPC90ZXh0PgorCSAgPGNvbW1hbmRzPgorCSAgICA8Y29tbWFuZD5jZCB0ZXN0aW5nICZhbXA7JmFtcDsgLi9SVU5GVUxMVEVTVFMgLWcgdHJhbnNwb3J0czwvY29tbWFuZD4KIAkgIDwvY29tbWFuZHM+CiAJPC9zdGVwPgogCTxzdGVwIHR5cGU9InN5c3RlbSIgc3RlcG5hbWU9ImNvZGU6Y2hlY2tjb21tZW50cyIgdGl0bGU9ImNvZGU6Y2hlY2tjb21tZW50cyI+CmRpZmYgLS1naXQgYS9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvREVWRU5WIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL0RFVkVOVgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOTA1Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL0RFVkVOVgpAQCAtMCwwICsxLDQ0IEBACitQUkVGSVg9L29wdC9PU1MKK2V4cG9ydCBQUkVGSVgKKworUEFUSD0kUFJFRklYL2JpbjovdXNyL2JpbjovdXNyL2R0L2JpbjovdXNyL29wZW53aW4vYmluOi91c3Ivc2JpbjovdXNyL2Njcy9iaW46L3Vzci91Y2IKK2V4cG9ydCBQQVRICisKK0xEX0xJQlJBUllfUEFUSD0kUFJFRklYL2xpYiAKK0xEX1JVTl9QQVRIPSRMRF9MSUJSQVJZX1BBVEgKK2V4cG9ydCBMRF9MSUJSQVJZX1BBVEggTERfUlVOX1BBVEgKKworQ0M9Z2NjCitleHBvcnQgQ0MKKworQ1BQRkxBR1M9Ii1JJFBSRUZJWC9pbmNsdWRlIgorQ0ZMQUdTPSItbXY4IC1tdHVuZT11bHRyYXNwYXJjIgorTERGTEFHUz0iLUwkUFJFRklYL2xpYiAtUiRQUkVGSVgvbGliIgorZXhwb3J0IENQUEZMQUdTIENGTEFHUyBMREZMQUdTCisKK1RNUD0vdG1wCitleHBvcnQgVE1QCisKK1RPUD0vY3RidG8vaWRjL2NpY24vc291cmNlL2J1aWxkL2BiYXNlbmFtZSAkUFJFRklYYAorZXhwb3J0IFRPUAorCitTUkM9JFRPUC9kaXN0CitleHBvcnQgU1JDCisKK1dPUks9JFRPUC93b3JrCitleHBvcnQgV09SSworCisKKyMgZm9yIHN1cGVycGFjazoKKworQ0hFQ0tMSVNUPSRUT1AvQ2hlY2tsaXN0OyBleHBvcnQgQ0hFQ0tMSVNUCitNQUtFPSRQUkVGSVgvYmluL21ha2UKK2V4cG9ydCBNQUtFCisKKyNDQVRFR09SWT1PcGVuU291cmNlOyBleHBvcnQgQ0FURUdPUlkKKyNWRU5ET1I9IkZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiI7IGV4cG9ydCBWRU5ET1IKK0JBU0VESVI9L29wdDsgZXhwb3J0IEJBU0VESVIKK1BSRUZJWD0kQkFTRURJUi9gYmFzZW5hbWUgJFRPUGA7IGV4cG9ydCBQUkVGSVgKK1JFTEVBU0VfQVJFQT0kVE9QLy4uL3BhY2thZ2VzL2AvYmluL3VuYW1lIC1wYC9gL2Jpbi91bmFtZSAtcmA7IGV4cG9ydCBSRUxFQVNFX0FSRUEKKwordW1hc2sgMDIyCmRpZmYgLS1naXQgYS9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvUkVBRE1FIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL1JFQURNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41M2UyNWE2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL1JFQURNRQpAQCAtMCwwICsxLDE5IEBACitUaGUgImJ1aWxkcGFja2FnZS1zb2xhcmlzIiBzY3JpcHQgZG9lcyBhICJvbmUtc2hvdCIgYnVpbGQgCithbmQgcGFja2FnaW5nIG9mIGFuIHVudGFycmVkIG5ldC1zbm1wIGRpc3RyaWJ1dGlvbiAKK29uIFNvbGFyaXMgd2l0aG91dCByZXF1aXJpbmcgcm9vdCBhY2Nlc3MuIAorIAorVGhlIHJlc3VsdGluZyBuYXRpdmUgU29sYXJpcyBwYWNrYWdlIGNhbiB0aGVuIGJlIAorKGF1dG9tYXRpY2FsbHkpIGluc3RhbGxlZC9yZW1vdmVkIHVzaW5nIHRoZSBTb2xhcmlzIAorcGtnYWRkKDEpL3BrZ3JtKDEpIGNvbW1hbmRzLiAKKyAKK1RoZSBzY3JpcHQgcmVxdWlyZXMgY3VzdG9taXphdGlvbiBvZiB5b3VyIAorZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQgLSBzZWUgYXR0YWNoZWQgZmlsZSAKK0RFVkVOViAtIGJlZm9yZSBpdCBjYW4gYmUgdXNlZC4gCisgCisgQmFzaWMgdXNhZ2U6IC4vYnVpbGRwYWNrYWdlLXNvbGFyaXMgZGlzdGNsZWFuIAorIAorVGhlIHNjcmlwdCAiZWxmZGVwZW5kLnNoIiBpcyByZXF1aXJlZCB0byAKK2RldGVybWluZSB0aGUgZGVwZW5kZW5jaWVzIG9mIGFsbCBidWlsdCBFTEYgYmluYXJpZXMgCithbmQgbGlicmFyaWVzIHRvIGNyZWF0ZSBhICJwYWNrYWdlIGRlcGVuZGVuY3kgZmlsZSIgLSAKK3NlZSBkZXBlbmQoNCkuIAorIApkaWZmIC0tZ2l0IGEvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2J1aWxkcGFja2FnZS1zb2xhcmlzIGIvZGlzdC9uZXQtc25tcC1zb2xhcmlzLWJ1aWxkL2J1aWxkcGFja2FnZS1zb2xhcmlzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxZjRmMGMKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvYnVpbGRwYWNrYWdlLXNvbGFyaXMKQEAgLTAsMCArMSwxODIgQEAKKyMhL2Jpbi9rc2gKKyMKKyMgYXV0b21hdGljIGJ1aWxkIChjb25maWd1cmUvbWFrZS9wYWNrYWdlKSBzY3JpcHQgCisjIGZvciBORVQtU05NUCBvbiBTb2xhcmlzCisjCisjIDIwMDQvMTEgUmV3cml0ZSB0byBzdHJpY3RseSBidWlsZCB0aGUgcGFja2FnZSBqZnJhbmtAZmFzdHJpZXZlLmNvbQorIyAyMDAyLzExIFN0ZWZhbi5SYWRtYW5AQ1RCVE8uT1JHCisKKworIyBJZiB5b3UgZGVmaW5lIERFQlVHLCB0aGUgc2NyaXB0IHdpbGwgYmUgdmVyYm9zZSwgYW5kIHdlIHdvbid0IHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMKKworI0RFQlVHPVkKK2lmIFsgISAteiAkREVCVUcgXTsgdGhlbgorICAgc2V0IC14ICMgYmUgdmVyYm9zZQorZmkKKworIyBUTVAgaXMgd2hlcmUgd2UgYXJlIHRlbXBvcmFyaWx5IGluc3RhbGxpbmcgdGhlIHBhY2thZ2UgdG8KK1RNUD1gcHdkYC9wa2dyb290CisKKyMgUEtHIGlzIHRoZSBpbnRlcm5hbCBhbmQgZXh0ZXJuYWwgbmFtZSBmb3IgdGhlIHBhY2thZ2UKK1BLRz1PU1NuZXQtc25tcAorCisjUFJFRklYIGlzIHRoZSB0b3AgbGV2ZWwgYXJjaGl0ZWN0dXJlIGRlcGVuZGVudCBkaXJlY3RvcnkuCisjIFRoaXMgc2hvdWxkIGJlIG5vcm1hbGx5IGRldGVybWluZWQgYnkgY29uZmlndXJlCisjcHJlZml4PS9vcHQvJHtQS0d9CitwcmVmaXg9L3Vzci9sb2NhbAorCisjIFZBUkRJUiBpcyB0aGUgcGVyc2lzdGVudCBkaXIgZnJvbSBjb25maWd1cmUKK1ZBUkRJUj0vdmFyL25ldC1zbm1wCisKK2V4cGFuZGVkcHJlZml4PSR7VE1QfS8ke3ByZWZpeH0KKworUEVSTD0ke1BFUkw6PWB3aGljaCBwZXJsYH0KK01BS0U9JHtNQUtFOj1gd2hpY2ggbWFrZWB9CisKK2lmIFsgLWQgJHtUTVB9IF07IHRoZW4KKyAgIHJtIC1yZiAke1RNUH07CitmaQorCisjIGluc3RhbGwgdG8gdGVtcG9yYXJ5IHBhY2thZ2UgYnVpbGQgcm9vdAorY2QgLi4vLi4KKworJE1BS0UgaW5zdGFsbCBwcmVmaXg9JHtleHBhbmRlZHByZWZpeH0gZXhlY19wcmVmaXg9JHtleHBhbmRlZHByZWZpeH0gfHwgZXhpdCAxCisKKyMgV2Ugbm93IGhhdmUgdGhlIG1haW4gc29mdHdhcmUgaW5zdGFsbGVkLCBjb3B5IG92ZXIgdGhlIGF1eGlsbGFyeSBmaWxlcworY2QgLQorCithd2sgL15fX19zbm1wZC1pbml0LmQvLC9fX19FT0YvICQwIHwgZ3JlcCAtdiBeX19fIHwgc2VkICJzLEBwcmVmaXhALCRwcmVmaXgsZyIgPnxzbm1wZC1pbml0LmQKKworIyBjcmVhdGUgcGVyc2lzdGVudCBkaXJlY3RvcnkgaWYgaXQgZG9lcyBub3QgZXhpc3QKK1sgLWQgJFRNUC8kVkFSRElSIF0gfHwgaW5zdGFsbCAtZCAtbSAwNzU1ICRUTVAvJFZBUkRJUiAKKworIyBwb3N0aW5zdGFsbAorTERfTElCUkFSWV9QQVRIPSRUTVAkcHJlZml4L2xpYjokTERfTElCUkFSWV9QQVRIICRUTVAvJHByZWZpeC9iaW4vc25tcHRyYW5zbGF0ZVwKKyAgLU0kVE1QLyRwcmVmaXgvc2hhcmUvc25tcC9taWJzIC1tIFNOTVB2Mi1TTUkgLjEgPiYtIHx8IGV4aXQgJD8gIyBjcmVhdGUgTUlCIGluZGV4CisKKyMgcGFja2FnZQordmVyc2lvbj1gLi4vLi4vbmV0LXNubXAtY29uZmlnIC0tdmVyc2lvbmAKK29zPWB1bmFtZSAtc2AKK3JlbD1gdW5hbWUgLXJgCitjbGFzcz1zbm1wCitvd25lcj0kTE9HTkFNRQorZ3JvdXBzIHwgYXdrICd7cHJpbnQgJDF9JyB8IHJlYWQgZ3JvdXAKK2NhdCA8PD09ID58cGtnaW5mbworUEtHPSIke1BLR30iCitOQU1FPSJuZXQtc25tcC0kdmVyc2lvbiIKK0FSQ0g9ImB1bmFtZSAtcGAiCitWRVJTSU9OPSIkdmVyc2lvbiwgJG9zICRyZWwsIGBkYXRlICslWS4lbS4lZC4lSC4lTS4lU2AiCitDQVRFR09SWT0iT3BlblNvdXJjZSIKK0RFU0M9IlRoZSBORVQtU05NUCBUb29scyBhbmQgTGlicmFyeSIKK1ZFTkRPUj0iaHR0cDovL25ldC1zbm1wLnNvdXJjZWZvcmdlLm5ldCIKK0NMQVNTRVM9IiRjbGFzcyIKK0JBU0VESVI9IiRwcmVmaXgiCis9PQorLiAuL3BrZ2luZm8KKworZWNobyAnY2hlY2tpbmcgZGVwZW5kZW5jaWVzJwordW5zZXQgTERfTElCUkFSWV9QQVRIICMgYmluYXJpZXMgYW5kIGxpYnJhcmllcyBzaG91bGQgaGF2ZSBSUEFUSCBub3cKKy4vZWxmZGVwZW5kLnNoICRUTVAgfCBncmVwIC12ICJQICAqJFBLRyAiID58ZGVwZW5kICMgaWdub3JlIG93biBwYWNrYWdlCisKK2VjaG8gJ2NyZWF0aW5nIHByb3RvdHlwZSBmaWxlJworY2F0IDw8PT0gPnxwcm90b3R5cGUKK2kgcGtnaW5mbworaSBjb3B5cmlnaHQ9Li4vLi4vQ09QWUlORworI2kgcHJlaW5zdGFsbD0uL3ByZWluc3RhbGwtcG9zdHJlbW92ZQorI2kgcG9zdGluc3RhbGw9Li9wcmVpbnN0YWxsLXBvc3RyZW1vdmUKK2kgZGVwZW5kCisjIHNldCBkZWZhdWx0IG1vZGUsIG93bmVyIGFuZCBncm91cAorISBkZWZhdWx0IDA3NzUgcm9vdCBzeXMKK2Qgc25tcCAvZXRjIDA3NTUgcm9vdCBzeXMKK2Qgc25tcCAvZXRjL2luaXQuZCAwNzU1IHJvb3Qgc3lzCitmIHNubXAgL2V0Yy9pbml0LmQvc25tcGQ9Li9zbm1wZC1pbml0LmQgMDc1NSByb290IHN5cworI2wgc25tcCAvZXRjL3JjMi5kL1M3NnNubXBkPS9ldGMvaW5pdC5kL3NubXBkICMgbm90IHlldAorPT0KKworcGtncHJvdG8gLWMgc25tcCAkVE1QPS8gfFwKK2VncmVwIC12ICdeZCAuKiAvIHxeZCAuKiAvdmFyIHxeZCAuKiAvb3B0IHxeIC4qcGVybGxvY2FsLnBvZD0nIHxcCitzZWQgLWUgInMvICRvd25lciAkZ3JvdXBcJC8vIiA+PiBwcm90b3R5cGUgfHwgZXhpdCAkPworIyBhbmQgaWdub3JlIHRvcCBsZXZlbCBkaXJlY3RvcmllcyAobXVzdCBwcmUtZXhpc3QpCisKK2VjaG8gJ2NyZWF0aW5nIHBhY2thZ2UnCitwa2dtayAtb2QgLiB8fCBleGl0ICQ/Citwa2d0cmFucyAuICRQS0ctJHZlcnNpb24tJEFSQ0gtJG9zJHJlbC5wa2cgJFBLRyB8fCBleGl0ICQ/CisKKyMgV2Ugc2hvdWxkIHJlYWxseSBkbyBzb21lIGNsZWFudXAgaGVyZQoraWYgWyAteiAkREVCVUcgXTsgdGhlbgorICAgcm0gLXJmIHNubXBkLWluaXQuZCAkUEtHICRUTVAgcGtnaW5mbyBwcm90b3R5cGUgZGVwZW5kIAorZmkKKworZWNobyAiYnVpbGQgd2FzIHN1Y2Nlc3NmdWxsIgorZXhpdCAwCisKKyMgL2V0Yy9pbml0L3NubXBkCisjIFRoaXMgaXMgcGFja2FnZWQgaW5zaWRlIG9mIGJ1aWxkcGFja2FnZS1zb2xhcmlzIGJlY2F1c2Ugd2UgbmVlZCB0byBzdWJzdGl0dXRlCisjIGluIHRoZSBhY3R1YWwgc2VydmVyIG5hbWUuCisKK19fX3NubXBkLWluaXQuZF9fXworIyEgL2Jpbi9zaAorIworIyBzdGFydC9zdG9wIHRoZSBORVQtU05NUCBtYXN0ZXIgYWdlbnQgKHNubXBkKQorIworIyBMb2NhdGlvbjogICAgICAvZXRjL2luaXQuZC9zbm1wZAorIyAgICAgICAgICAgICAgICAvZXRjL3JjMy5kL1M/P3NubXBkCisjCituYW1lPSJORVQtU05NUCBhZ2VudCIKK2RhZW1vbj1AcHJlZml4QC9zYmluL3NubXBkCisKK2Nhc2UgIiQxIiBpbgorc3RhcnQpCisgICAgICAgIFsgISAteCAkZGFlbW9uIF0gJiYgZWNobyAiRVJST1I6IGNhbm5vdCBzdGFydCAkbmFtZSAoJGRhZW1vbikiICYmIGV4aXQgMQorICAgICAgICBlY2hvICJTdGFydGluZyAkbmFtZSAuLi4gXGMiCisgICAgICAgIFBHUkVQPWB3aGljaCBwZ3JlcGAKKyAgICAgICAgaWYgWyAteiAkUEdSRVAgXTsgdGhlbgorICAgICAgICAgICBwaWQ9YHBncmVwIC1meCAkZGFlbW9uYAorICAgICAgICBlbHNlCisgICAgICAgICAgIHBpZD1gcHMgLWVmIHwgZ3JlcCAkZGFlbW9uIHwgZ3JlcCAtdiBncmVwIHwgYXdrICd7cHJpbnQgJDJ9J2AKKyAgICAgICAgZmkKKworICAgICAgICBbICEgLXogIiRwaWQiIF0gJiYgZWNobyAiYWxyZWFkeSBydW5uaW5nIHdpdGggcGlkICRwaWQuIiAmJiBleGl0IDAKKyAgICAgICAgJGRhZW1vbiAmJiBlY2hvICJkb25lLiIKKyAgICAgICAgOzsKK3N0b3ApCisgICAgICAgIGVjaG8gIlN0b3BwaW5nICRuYW1lIC4uLiBcYyIKKyAgICAgICAgUEdSRVA9YHdoaWNoIHBncmVwYAorICAgICAgICBpZiBbIC16ICRQR1JFUCBdOyB0aGVuCisgICAgICAgICAgIHBpZD1gcGdyZXAgLWZ4ICRkYWVtb25gCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgcGlkPWBwcyAtZWYgfCBncmVwICRkYWVtb24gfCBncmVwIC12IGdyZXAgfCBhd2sgJ3twcmludCAkMn0nYAorICAgICAgICBmaQorICAgICAgICBbICEgLXogIiRwaWQiIF0gJiYgKGtpbGwgJHBpZCAmJiBlY2hvICJkb25lIiApIHx8IGVjaG8gIm5vdCBydW5uaW5nIgorCisgICAgICAgIDs7CitzdGF0dXMpCisgICAgICAgIGVjaG8gIiRuYW1lIGlzIFxjIgorICAgICAgICBQR1JFUD1gd2hpY2ggcGdyZXBgCisgICAgICAgIGlmIFsgLXogJFBHUkVQIF07IHRoZW4KKyAgICAgICAgICAgcGlkPWBwZ3JlcCAtZnggJGRhZW1vbmAKKyAgICAgICAgZWxzZQorICAgICAgICAgICBwaWQ9YHBzIC1lZiB8IGdyZXAgJGRhZW1vbiB8IGdyZXAgLXYgZ3JlcCB8IGF3ayAne3ByaW50ICQyfSdgCisgICAgICAgIGZpCisgICAgICAgIFsgLXogIiRwaWQiIF0gJiYgZWNobyAibm90IHJ1bm5pbmciIHx8IGVjaG8gInJ1bm5pbmcgd2l0aCBwaWQgJHBpZCIKKyAgICAgICAgOzsKK3Jlc3RhcnQpCisgICAgICAgICQwIHN0b3AgJiYgJDAgc3RhcnQKKyAgICAgICAgOzsKK3JlbG9hZCkKKyAgICAgICAgZWNobyAiUmUtaW5pdGlhbGl6aW5nICRuYW1lIC4uLlxjIgorICAgICAgICBQR1JFUD1gd2hpY2ggcGdyZXBgCisgICAgICAgIGlmIFsgLXogJFBHUkVQIF07IHRoZW4KKyAgICAgICAgICAgcGlkPWBwZ3JlcCAtZnggJGRhZW1vbmAKKyAgICAgICAgZWxzZQorICAgICAgICAgICBwaWQ9YHBzIC1lZiB8IGdyZXAgJGRhZW1vbiB8IGdyZXAgLXYgZ3JlcCB8IGF3ayAne3ByaW50ICQyfSdgCisgICAgICAgIGZpCisgICAgICAgIFsgISAteiAiJHBpZCIgXSAmJiAoa2lsbCAtSFVQICRwaWQgJiYgZWNobyAiZG9uZSIgKSB8fCBlY2hvICJub3QgcnVubmluZyIKKyAgICAgICAgOzsKKyopCisgICAgICAgIGVjaG8gIlVzYWdlOiAkMCB7IHN0YXJ0IHwgc3RvcCB8IHN0YXR1cyB8IHJlc3RhcnQgfCByZWxvYWQgfSIKKyAgICAgICAgOzsKK2VzYWMKKworZXhpdCAwCitfX19FT0ZfX18KZGlmZiAtLWdpdCBhL2Rpc3QvbmV0LXNubXAtc29sYXJpcy1idWlsZC9lbGZkZXBlbmQuc2ggYi9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvZWxmZGVwZW5kLnNoCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjU0N2M0Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25ldC1zbm1wLXNvbGFyaXMtYnVpbGQvZWxmZGVwZW5kLnNoCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9rc2gKKyMKKyMgZWxmZGVwZW5kLnNoCisjCisjIGdpdmVuIGEgcGF0aCwgdGhpcyBzY3JpcHRzIHNlYXJjaGVzIGZvciBFTEYgYmluYXJpZXMgYW5kIGxpYnJhcmllcworIyBhbmQgZ2VuZXJhdGVzIHBhY2thZ2UgZGVwZW5kZW5jeSBmaWxlIGVudHJpZXMgYWNjb3JkaW5nIHRvIHRoZXIgZGVwZW5kZW5jaWVzCisjCisjIFVzYWdlOiBlbGZkZXBlbmQgPEVMRi1iaW5hcnk+fDxkaXJlY3Rvcnk+CisjCisjIDIwMDIvMTEgU3RlZmFuLlJhZG1hbkBDVEJUTy5PUkcKKyMKKyMgL3Zhci9zYWRtL2luc3RhbGwvY29udGVudHMgZm9ybWF0OgorIworIyAvZGV2IGQgbm9uZSAwNzc1IHJvb3Qgc3lzIFNVTldjc3IgU1VOV2NzZAorIyBwYXRoIHR5cGUgY2xhc3MgbW9kZSBvd25lciBncm91cCBwYWNrYWdlcworIyAvZXRjLy5sb2dpbiBmIHJlbmFtZW5ldyAwNjQ0IHJvb3Qgc3lzIDUxNiAzNzk1NiA5MDQ2NDc2OTUgU1VOV2NzcgorIyAvZXRjL2FjY3QvaG9saWRheXMgZSBwcmVzZXJ2ZSAwNjY0IGJpbiBiaW4gMjg5IDIyMDkwIDkwNDY0NzYwMyBTVU5XYWNjcgorIyBwYXRoIHR5cGUgY2xhc3MgbW9kZSBvd25lciBncm91cCB4IHggeCBwYWNrYWdlcworIyAvYmluPS4vdXNyL2JpbiBzIG5vbmUgU1VOV2NzcgorIyBwYXRoPWxpbmsgdHlwZSBjbGFzcyBwYWNrYWdlcworIyAvZGV2aWNlcy9wc2V1ZG8vY2xvbmVAMDpobWUgYyBub25lIDExIDcgMDYwMCByb290IHN5cyBTVU5XY3NkCisjIHBhdGggdHlwZSBjbGFzcyB4IHggb3duZXIgbW9kZSBwYWNrYWdlcworIworIyB0eXBlcyBlIChzZWQpLCB2ICh2b2xhdGlsZSkgaGF2ZSBzYW1lIGZvcm1hdCBsaWtlIHR5cGUgZiAoZmlsZSkKKyMgdHlwZSBsIChoYXJkbGluaykgaGFzIHNhbWUgZm9ybWF0IGxpa2UgdHlwZSBzIChzeW1saW5rKQorIworcHJvZz1gYmFzZW5hbWUgJDBgCitMQVNUX0NIQU5DRT0vb3B0L09TUy9saWIKKworaWYgWyAtZCAiJDEiIF0gOyB0aGVuCisgIGZpbmQgJDEgLXR5cGUgZiAtZXhlYyBmaWxlIHt9IFw7CitlbGlmIFsgLXggIiQxIiBdIDsgdGhlbgorICBmaWxlICQxCitlbHNlCisgIGVjaG8gMT4mMiAidXNhZ2U6ICQwIDxkaXJlY3Rvcnk+fDxFTEYgZXhlY3V0YWJsZT4iCisgIGV4aXQgMQorZmkgfCBhd2sgJyQyID09ICJFTEYiIHsgcHJpbnQgfScgfCBjdXQgLWQ6IC1mMSB8XAord2hpbGUgcmVhZCBlbGYKK2RvCisgIGxkZCAiJGVsZiIgfCB3aGlsZSByZWFkIGxpYiB4IHBhdGgKKyAgZG8KKyAgICBbIC16ICIkcGF0aCIgXSAmJiBjb250aW51ZQorICAgIGlmIFsgIiRwYXRoIiA9ICcoZmlsZSBub3QgZm91bmQpJyBdCisgICAgdGhlbgorICAgICAgaWYgWyAteCAkTEFTVF9DSEFOQ0UvJGxpYiBdCisgICAgICB0aGVuCisgICAgICAgIHBhdGg9IiRMQVNUX0NIQU5DRS8kbGliIgorICAgICAgZWxzZQorICAgICAgICBlY2hvICIjICRwcm9nOiAkbGliICR4ICRwYXRoIgorICAgICAgICBjb250aW51ZSAjIG5vdCBmb3VuZAorICAgICAgZmkKKyAgICBmaQorICAgIGVjaG8gIiRwYXRoIgorICAgICMgbmVlZCBzeW1saW5rIGhhbmRsaW5nIGhlcmUgLSBzZWUgL3Vzci9wbGF0Zm9ybS9TVU5XLCovbGliLyoKKyAgZG9uZQorZG9uZSB8IHNvcnQgLXUgfCB3aGlsZSByZWFkIGxpYnBhdGggb3RoZXIKK2RvCisgIFsgIiRsaWJwYXRoIiA9ICIjIiBdICYmIGVjaG8gIiRsaWJwYXRoICRvdGhlciIgJiYgY29udGludWUgIyBlcnJvciBtZXNzYWdlCisgIHNldCAtLSBgZ3JlcCAiXiRsaWJwYXRoWyA9XSIgIC92YXIvc2FkbS9pbnN0YWxsL2NvbnRlbnRzIHwgaGVhZCAtMWAKKyAgcGF0aD0kMTsgdHlwZT0kMgorICBjYXNlICR0eXBlIGluCisgICAgZikgIyBmaWxlCisgICAgICBzaGlmdCA5ICMgZmlyc3QgcGFja2FnZQorICAgICAgOzsKKyAgICBzfGwpICMgbGluaworICAgICAgc2hpZnQgMyAjIGZpcnN0IHBhY2thZ2UKKyAgICAgIDs7CisgICAgJycpICMgbm90IGZvdW5kCisgICAgICBlY2hvICIjICRwcm9nOiAkbGlicGF0aCBpcyBub3QgYXNzb2NpYXRlZCB3aXRoIGFueSBwYWNrYWdlIgorICAgICAgY29udGludWUKKyAgICAgIDs7CisgICAgKikgIyBkdWJpb3VzIGZpbGUgdHlwZQorICAgICAgZWNobyAiIyAkcHJvZzogcGF0aCAkMSBoYXMgZHViaW91cyBmaWxlIHR5cGUgJDIiCisgICAgICBjb250aW51ZQorICAgICAgOzsKKyAgZXNhYworICBzZXQgLS0gYGVjaG8gJDEgfCB0ciA6ICcgJ2AKKyAgZWNobyAkMSAjIHN0cmlwIG9mZiBjbGFzc2VzCitkb25lIHwgc29ydCAtdSB8IHdoaWxlIHJlYWQgcGtnIG90aGVyCitkbworICBpZiBbICIkcGtnIiA9ICIjIiBdIDsgdGhlbiAjIGVycm9yIG1lc3NhZ2UKKyAgICBlY2hvIDE+JjIgIiRvdGhlciIgIyBnb2VzIHRvIHN0ZGVycgorICAgIGNvbnRpbnVlCisgIGZpCisgIGV2YWwgYHBrZ3BhcmFtIC12ICRwa2cgUEtHIE5BTUVgCisgIHByaW50ZiAiUCAgJS0xNXMlc1xuIiAiJFBLRyIgIiROQU1FIgorZG9uZQpkaWZmIC0tZ2l0IGEvZGlzdC9uZXQtc25tcC5zcGVjIGIvZGlzdC9uZXQtc25tcC5zcGVjCmluZGV4IDZhYzRhOWYuLmQ5ZjJlMWIgMTAwNjQ0Ci0tLSBhL2Rpc3QvbmV0LXNubXAuc3BlYworKysgYi9kaXN0L25ldC1zbm1wLnNwZWMKQEAgLTM3LDcgKzM3LDcgQEAKICVlbmRpZgogU3VtbWFyeTogVG9vbHMgYW5kIHNlcnZlcnMgZm9yIHRoZSBTTk1QIHByb3RvY29sCiBOYW1lOiBuZXQtc25tcAotVmVyc2lvbjogNS40LjQKK1ZlcnNpb246IDUuNy4zLnJjMQogIyB1cGRhdGUgcmVsZWFzZSBmb3IgdmVuZG9yIHJlbGVhc2UuIChlZyAxLmZjNiwgMS5yaDcyLCAxLnlkbDMsIDEueWRsMjMpCiBSZWxlYXNlOiAxCiBVUkw6IGh0dHA6Ly93d3cubmV0LXNubXAub3JnLwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJLS1lbmFibGUtc2hhcmVkIFwKIAklez9uZXRzbm1wX3BlcmxfbW9kdWxlczogLS13aXRoLXBlcmwtbW9kdWxlcz0iSU5TVEFMTERJUlM9dmVuZG9yIn0gXAogCSV7IT9uZXRzbm1wX3BlcmxfbW9kdWxlczogLS13aXRob3V0LXBlcmwtbW9kdWxlc30gXAotCSV7P25ldHNubXBfZW1iZWRkZWRfcGVybDogLS1lbmFibGUtYXMtbmVlZGVkIC0tZW5hYmxlLWVtYmVkZGVkLXBlcmx9IFwKKwklez9uZXRzbm1wX2VtYmVkZGVkX3Blcmw6IC0tZW5hYmxlLWVtYmVkZGVkLXBlcmx9IFwKIAkleyE/bmV0c25tcF9lbWJlZGRlZF9wZXJsOiAtLWRpc2FibGUtZW1iZWRkZWQtcGVybH0gXAogCS0td2l0aC1jZmxhZ3M9IiRSUE1fT1BUX0ZMQUdTICV7bmV0c25tcF9jZmxhZ3N9IgogCkBAIC0yNTIsMTIgKzI1MiwxMiBAQAogCiAqIFR1ZSBNYXkgIDYgMjAwOCBKYW4gU2FmcmFuZWsgPGpzYWZyYW5la0B1c2Vycy5zZi5uZXQ+CiAtIHJlbW92ZSAle2xpYmN1cnJlbnR9Ci0tIGRvbid0IHVzZSBQcm92aWRlczogdW5sZXNzIG5lY2Vzc2FyeSwgbGV0IHJwbWJ1aWxkIGNvbXB1dGUgdGhlIHByb3ZpZGVkCistIGFkZCBvcGVuc3NsLWRldmVsIHRvIGJ1aWxkIHJlcXVpcmVtZW50cworLSBkb24ndCB1c2UgUHJvdmlkZXM6IHVubGVzcyBuZWNlc3NhcnksIGxldCBycG1idWlsZCBjb21wdXRlIHRoZSBwcm92aWRlZCAKICAgbGlicmFyaWVzCiAKLSogVHVlIEp1biAzMCAyMDA3IFRob21hcyBBbmRlcnMgPHRhbmRlcnNAdXNlcnMuc2YubmV0PgorKiBUdWUgSnVuIDE5IDIwMDcgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zZi5uZXQ+CiAtIGFkZCAiQnVpbGRSZXF1aXJlczogcGVybC1FeHRVdGlscy1FbWJlZCIsIGUuZy4gZm9yIEZlZG9yYSA3Ci0tIGFkZCAtLWVuYWJsZS1hcy1uZWVkZWQgaWYgYnVpbGRpbmcgd2l0aCBlbWJlZGRlZCBQZXJsIHN1cHBvcnQKIAogKiBXZWQgTm92IDIzIDIwMDYgVGhvbWFzIEFuZGVycyA8dGFuZGVyc0B1c2Vycy5zZi5uZXQ+CiAtIGZpeGVzIGZvciA1LjQgYW5kIDY0LWJpdCBwbGF0Zm9ybXMKZGlmZiAtLWdpdCBhL2Rpc3QvbnNiLWNvbmZpZyBiL2Rpc3QvbnNiLWNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wOTQ0ZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uc2ItY29uZmlnCkBAIC0wLDAgKzEsODIgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQkCisjIEF1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwordXNhZ2UoKQoreworICAgZWNobyAiVXNhZ2U6ICQwICBbLWR8LXhdIFstcyBTUkNEXSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAtcyBTUkNESVIgIDogc291cmUgZGlyZWN0b3J5IFskSE9NRS9zcmMvbmV0LXNubXAtVkVSU0lPTl0iCisgICBlY2hvICIiCisgICBlY2hvICIgLXggOiBjb25maWd1cmUgZXh0cmEgZmVhdHVyZXMgZm9yIHByZS1yZWxlYXNlIHRlc3RpbmciCisgICBlY2hvICIgLWQgOiBjb25maWd1cmUgZm9yIGJpbmFyeSBkaXN0cmlidXRpb24iCisgICBleGl0IDEKK30KKworI3NldCAteAorCisKKyMKKyMgZmluZCBuc2ItcGxhdGZvcm0gYmFzZWQgb24gdGhlIHBhdGggdG8gdGhpcyBzY3JpcHQKKyMKK0VYRV9QQVRIPWBkaXJuYW1lICQwYAoraWYgWyAtZiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgIC4gJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMKK2VsaWYgWyAtZiAkSE9NRS9iaW4vbnNiLWZ1bmN0aW9ucyBdOyB0aGVuCisgICAuICRIT01FL2Jpbi9uc2ItZnVuY3Rpb25zCitlbGlmIFsgLWYgbnNiLWZ1bmN0aW9ucyBdO3RoZW4KKyAgIC4gbnNiLWZ1bmN0aW9ucworZWxzZQorICAgZWNobyAiQ2Fubm90IGZpbmQgbnNiLWZ1bmN0aW9ucyBpbiAkRVhFX1BBVEgsICRIT01FL2JpbiBvciAkUFdEIgorICAgZXhpdCAxCitmaQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitOU0JfQ09ORklHX0FMTD0yCisKKyMgICAgICB4KSAgeD0kT1BUQVJHIDs7Cit3aGlsZSBnZXRvcHRzIGRzOnggb3B0CitkbworICAgIGNhc2UgIiRvcHQiIGluCisgICAgICBkKSAgTlNCX0NPTkZJR19BTEw9MDs7CisgICAgICBzKSAgU1JDRD0kT1BUQVJHIDs7CisgICAgICB4KSAgTlNCX0NPTkZJR19BTEw9MTs7CisgICAgICBcPykjIHVua25vd24gZmxhZworICAgICAgICB1c2FnZTs7CisgICAgZXNhYworZG9uZQorc2hpZnQgYGV4cHIgJE9QVElORCAtIDFgCisKK2lmIFsgJE5TQl9DT05GSUdfQUxMIC1lcSAyIF07IHRoZW4KKyAgIGVjaG8gIllvdSBtdXN0IHNwZWNpZnkgLWQgb3IgLXgiCisgICB1c2FnZQorZmkKKworaWYgWyAieCRTUkNEIiA9ICJ4IiBdOyB0aGVuCisgICBmb3IgeCBpbiAuICRIT01FL3NyYy9uZXQtc25tcAorICAgZG8KKyAgICAgIGlmIFsgLWYgJHgvY29uZmlndXJlIF07IHRoZW4KKyAgICAgICAgIFNSQ0Q9JHgKKyAgICAgICAgIGJyZWFrCisgICAgICBmaQorICAgZG9uZQorICAgaWYgWyAieCRTUkNEIiA9ICJ4IiBdOyB0aGVuCisgICAgICBlY2hvICJDb3VsZG4ndCBmaW5kIGEgc291cmNlIGRpcmVjdG9yeS4gUGxlYXNlIHNwZWNpZnkgb25lIGZvciBtZS4iCisgICAgICB1c2FnZQorICAgZmkKK2ZpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK2lmIFsgJE5TQl9DT05GSUdfQUxMIC1lcSAwIF07dGhlbgorICAgIG5zYl9jb25maWdfZGlzdCAkU1JDRAorZWxzZQorICAgIG5zYl9jb25maWdfYWxsICRTUkNECitmaQpkaWZmIC0tZ2l0IGEvZGlzdC9uc2ItZnVuY3Rpb25zIGIvZGlzdC9uc2ItZnVuY3Rpb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4NjVjYzIKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25zYi1mdW5jdGlvbnMKQEAgLTAsMCArMSw1MDggQEAKKyMhL2Jpbi9zaAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgJElkJAorIyBBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgc291cmNlIHVzZXIgY29uZmlnCitpZiBbIC1mICRIT01FLy5zbm1wL25zYi1yYyBdOyB0aGVuCisgICAuICRIT01FLy5zbm1wL25zYi1yYworZmkKKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworbnNiX3N5c25hbWUoKQoreworICAgZWNobyBgdW5hbWUgLW1ycyB8IHRyICcgLycgJ19fJ2AKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMKKyMgVXRpbGl0eSB2YXJzCisjCitOU0JfVkVSU0lPTj0ke05TQl9WRVJTSU9OOj0iIn0KK05TQl9CVUlMRF9ESVI9JHtOU0JfQlVJTERfRElSOj0iIn0KK05TQl9CVUlMRF9TVUZGSVg9JHtOU0JfQlVJTERfU1VGRklYOj0iIn0KK05TQl9TUkNfRElSPSR7TlNCX1NSQ19ESVI6PSIifQorTlNCX0lOU1RBTExfRElSPSR7TlNCX0lOU1RBTExfRElSOj0iIn0KK05TQl9JTlNUQUxMX0RJUl9ERUZBVUxUPSR7TlNCX0lOU1RBTExfRElSX0RFRkFVTFQ6PSIkTlNCX0JVSUxEX0RJUi91c3IifQorTlNCX1BMQVRGT1JNPSR7TlNCX1BMQVRGT1JNOj1gbnNiX3N5c25hbWVgfQorIyBzdW4gZG9lc24ndCBzdXBwb3J0IGhvc3RuYW1lIC1zCitOU0JfSE9TVD0ke05TQl9IT1NUOj1gaG9zdG5hbWUgfCBjdXQgLWYxIC1kLmB9CitOU0JfUVVJRVQ9JHtOU0JfUVVJRVQ6PTB9CitOU0JfUFJPTVBUPSR7TlNCX1BST01QVDo9MH0KK05TQl9DTEVBTj0ke05TQl9DTEVBTjo9MX0KK05TQl9DT05GSUdfQUxMPSR7TlNCX0NPTkZJR19BTEw6PTB9CitOU0JfU0tJUF9DT05GSUc9JHtOU0JfU0tJUF9DT05GSUc6PTB9CitOU0JfU0tJUF9CVUlMRD0ke05TQl9TS0lQX0JVSUxEOj0wfQorTlNCX1NLSVBfVEVTVD0ke05TQl9TS0lQX1RFU1Q6PTB9CitOU0JfU0tJUF9JTlNUQUxMPSR7TlNCX1NLSVBfSU5TVEFMTDo9MH0KK05TQl9FUlJfQ1RYX0xJTkVTPSR7TlNCX0VSUl9DVFhfTElORVM6PTI1fQorTlNCX0RJU1RfVFJBTlNQT1JUUz0iVURQIFRDUCBVbml4IENhbGxiYWNrIgorTlNCX0VYVFJBX1RSQU5TUE9SVFM9IiIKK05TQl9ESVNUX01PRFVMRVM9JHtOU0JfRElTVF9NT0RVTEVTOj0iaG9zdCBkaXNtYW4vZXZlbnQtbWliIHNtdXgifQorTlNCX0VYVFJBX01PRFVMRVM9JHtOU0JfRVhUUkFfTU9EVUxFUzo9ImV4YW1wbGVzIGV4YW1wbGVzL2V4YW1wbGUgc211eCBSbW9uIn0KKyN0ZXN0aGFuZGxlcgorTlNCX0VYVFJBX0NPTkZJRz0ke05TQl9FWFRSQV9DT05GSUc6PSIifQorTlNCX1BSRUZJWD0ke05TQl9QUkVGSVg6PSIvdXNyIn0KK05TQl9FWFRSQV9JTlNUQUxMPSR7TlNCX0VYVFJBX0lOU1RBTEw6PSIifQorTlNCX1NIQVJFRD0ke05TQl9TSEFSRUQ6PSItLWVuYWJsZS1zaGFyZWQifQorTlNCX1ZJRVc9Y2F0CitOU0JfRkxPVz0KK05TQl9EQVRFPSR7TlNCX0RBVEU6PWBkYXRlICsleSVtJWRfJUglTWB9CisKKyMjIGVtYmVkZGVkIHBlcmwKK05TQl9ESVJMSU5LX0RJUlM9InBlcmwgbWlicyBpbmNsdWRlIHB5dGhvbiIKK05TQl9QRVJMPSR7TlNCX1BFUkw6PSIifQorI05TQl9QRVJMPSR7TlNCX1BFUkw6PSItLWVuYWJsZS1lbWJlZGRlZC1wZXJsIn0KK2lmIFsgIngkTlNCX1BFUkwiICE9ICJ4IiBdOyB0aGVuCisgIE5TQl9TS0lQX0RJUkxJTks9JHtOU0JfU0tJUF9ESVJMSU5LOj0wfQorZWxzZQorICBOU0JfU0tJUF9ESVJMSU5LPSR7TlNCX1NLSVBfRElSTElOSzo9MX0KK2ZpCisKKyMKKyMgU3lzdGVtIHNwZWNpZmljIGFkZGl0aW9ucworIworY2FzZSBgdW5hbWUgLXNgIGluCisKKyAgIFN1bk9TKQorICAgICAgTlNCX1RBSUxfQVJHUz0iLSROU0JfRVJSX0NUWF9MSU5FUyIKKyAgICAgIDs7CisKKyAgICopCisgICAgICBOU0JfVEFJTF9BUkdTPSItbiAkTlNCX0VSUl9DVFhfTElORVMiCisgICAgICA7OworZXNhYworCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjCisjIFV0aWxpdHkgZnVuY3Rpb25zCisjCisKK25zYl9hYm9ydCgpCit7CisgICBlY2hvCisgICBlY2hvICJBQk9SVElORzogJEAiID4mMgorICAgZXhpdCAyNTUKK30KKworbnNiX2luZm8oKQoreworICAgaWYgWyAkTlNCX1FVSUVUIC1uZSAxIF07IHRoZW4KKyAgICAgIGVjaG8gJEAKKyAgIGZpCit9CisKK25zYl9wcm9tcHQoKQoreworICAgaWYgWyAieCQxIiA9ICJ4LWYiIF07IHRoZW4KKyAgICAgIHNoaWZ0IDEKKyAgICAgIHRtcF9uc2JfcHJvbXB0PTEKKyAgIGVsc2UKKyAgICAgIHRtcF9uc2JfcHJvbXB0PSROU0JfUFJPTVBUCisgICBmaQorICAgaWYgWyAkdG1wX25zYl9wcm9tcHQgLWVxIDEgXTsgdGhlbgorICAgICAgZWNobyAkQAorICAgICAgcmVhZCBuc2JfcHJvbXB0X2R1bW15CisgICBlbHNlCisgICAgICBlY2hvICIkQCAoUFJPTVBUIFNLSVBQRUQpIgorICAgZmkKK30KKworbnNiX2Zsb3coKQoreworICAgIE5TQl9GTE9XPSROU0JfRkxPVzokQAorICAgIGVjaG8gIlJ1bm5pbmcgJEAiID4mMgorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIworbnNiX2NvbmZpZ19kaXN0KCkKK3sKKyAgIG5zYl9mbG93IGNvbmZpZ19kaXN0CisgICBpZiBbICQjIC1sdCAxIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAidXNhZ2U6IG5zYl9jb25maWdfZGlzdCBzcmNfZGlyIgorICAgZmkKKyAgIG5nY19zcmM9JDEKKyAgIGlmIFsgISAtZCAkbmdjX3NyYyBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgIiRuZ2Nfc3JjIGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisgICBpZiBbICEgLWQgJG5nY19zcmMvYWdlbnQvbWliZ3JvdXAgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJhZ2VudC9taWJncm91cCBkaXJlY3RvcnkgaW4gJG5nY19zcmMgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKyAgIG5nY19kZXN0PSQyCisgICBpZiBbICJYJG5nY19kZXN0IiAhPSAiWCIgLWEgISAtZCAkbmdjX2Rlc3QgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICIkbmdjX2Rlc3QgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKworICAgIworICAgIyBzb21lIG1vZHVsZXMgbWlnaHQgYmUgcmVsZWFzZSBzcGVjaWZpYywgc28gbWFrZSBzdXJlIHRoZXkKKyAgICMgZXhpc3QgYmVmb3JlIHdlIHNlbmQgdGhlbSBvZmYgdG8gY29uZmlndXJlCisgICAjCisgICBOU0JfRklOQUxfTU9EVUxFUz0KKyAgIGZvciBuY2RfeCBpbiAkTlNCX0RJU1RfTU9EVUxFUworICAgZG8KKwlpZiBbIC1yICRuZ2Nfc3JjL2FnZW50L21pYmdyb3VwLyRuY2RfeC5oIF07IHRoZW4KKwkJTlNCX0ZJTkFMX01PRFVMRVM9IiROU0JfRklOQUxfTU9EVUxFUyAkbmNkX3giCisJZmkKKyAgIGRvbmUKKworICAgIworICAgIyBOT1RFOiBmb3Igc29tZSByZWFzb24sIGJhc2ggZG9lcyBub3QgZXhwYW5kIHZhcmlhYmxlcworICAgIyBpbnNpZGUgb2Ygc2luZ2xlIHF1b3Rlcywgc28gdXNlIGRvdWJsZSBxdW90ZXMKKyAgICMKKyAgIGVjaG8gJG5nY19zcmMvY29uZmlndXJlIC0td2l0aC1zeXMtbG9jYXRpb249VW5rbm93biBcCisgICAgICAtLXByZWZpeD0iJE5TQl9QUkVGSVgiIFwKKyAgICAgIC0tZGlzYWJsZS1kZXZlbG9wZXIgJE5TQl9FWFRSQV9DT05GSUcgXAorICAgICAgLS13aXRoLXN5cy1jb250YWN0PSdTeXN0ZW0gQWRtaW5pc3RyYXRvcicgXAorICAgICAgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1taWItbW9kdWxlcz0iJE5TQl9GSU5BTF9NT0RVTEVTIgorICAgJG5nY19zcmMvY29uZmlndXJlIC0td2l0aC1zeXMtbG9jYXRpb249VW5rbm93biBcCisgICAgICAtLXByZWZpeD0iJE5TQl9QUkVGSVgiIFwKKyAgICAgIC0tZGlzYWJsZS1kZXZlbG9wZXIgJE5TQl9FWFRSQV9DT05GSUcgXAorICAgICAgLS13aXRoLXN5cy1jb250YWN0PSdTeXN0ZW0gQWRtaW5pc3RyYXRvcicgXAorICAgICAgLS13aXRoLWRlZmF1bHRzIC0td2l0aC1taWItbW9kdWxlcz0iJE5TQl9GSU5BTF9NT0RVTEVTIgorICAgIyBJJ2QgbGlrZSB0byBhZGQgJyB8IHRlZSBuc2JfY29uZmlnLiROU0JfREFURScgdG8gc2F2ZSBvdXRwdXQsIGJ1dCB0aGVuCisgICAjIEknZCBsb3NlIHRoZSByYyBmcm9tIGNvbmZpZ3VyZSwgd2hpY2ggSSBuZWVkLi4uIHNpZ2gKKyAgIG5nY19yYz0kPworICAgaWYgWyAkbmdjX3JjIC1uZSAwIF07dGhlbgorICAgICAgbnNiX2Fib3J0ICJFcnJvciBkdXJpbmcgY29uZmlndXJlIGRpc3QgKHJjPSRuZ2NfcmMpIgorICAgZmkKK30KKworbnNiX2NvbmZpZ19hbGwoKQoreworICAgbnNiX2Zsb3cgY29uZmlnX2FsbAorICAgaWYgWyAkIyAtbHQgMSBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgInVzYWdlOiBuc2JfY29uZmlnX2FsbCBzcmNfZGlyIgorICAgZmkKKyAgIG5nY19zcmM9JDEKKyAgIGlmIFsgISAtZCAkbmdjX3NyYyBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgIiRuZ2Nfc3JjIGRvZXMgbm90IGV4aXN0ISIKKyAgIGZpCisgICBpZiBbICEgLWQgJG5nY19zcmMvYWdlbnQvbWliZ3JvdXAgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJhZ2VudC9taWJncm91cCBkaXJlY3RvcnkgaW4gJG5nY19zcmMgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKyAgIG5nY19kZXN0PSQyCisgICBpZiBbICJYJG5nY19kZXN0IiAhPSAiWCIgLWEgISAtZCAkbmdjX2Rlc3QgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICIkbmdjX2Rlc3QgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKworICAgIworICAgIyBTeXN0ZW0gc3BlY2lmaWMgYWRkaXRpb25zCisgICAjCisgICBjYXNlIGB1bmFtZSAtc2AgaW4KKworICAgTGludXgpCisgICAgICBOU0JfSVBWNj0ke05TQl9JUFY2Oj0iLS1lbmFibGUtaXB2NiJ9CisgICAgICBOU0JfRVhUUkFfVFJBTlNQT1JUUz0iSVBYIgorICAgICAgOzsKKworICAgI0RhcndpbikKKyAgICMgICA7OworCisgICAqKQorICAgICAgTlNCX0lQVjY9JHtOU0JfSVBWNjo9Ii0tZW5hYmxlLWlwdjYifQorICAgICAgOzsKKyAgIGVzYWMKKworICAgIworICAgIyB1c2UgbGlid3JhcCBpZiB3ZSBjYW4gZmluZCB0aGUgaGVhZGVyCisgICAjCisgICBpZiBbIC1mIC91c3IvaW5jbHVkZS90Y3BkLmggXTsgdGhlbgorICAgICAgTlNCX0xJQldSQVA9JHtOU0JfTElCV1JBUDo9Ii0td2l0aC1saWJ3cmFwIn0KKyAgICAgIE5TQl9FWFRSQV9DT05GSUc9IiROU0JfRVhUUkFfQ09ORklHICROU0JfTElCV1JBUCIKKyAgIGZpCisKKyAgICMKKyAgICMgc29tZSBtb2R1bGVzIG1pZ2h0IGJlIHJlbGVhc2Ugc3BlY2lmaWMsIHNvIG1ha2Ugc3VyZSB0aGV5CisgICAjIGV4aXN0IGJlZm9yZSB3ZSBzZW5kIHRoZW0gb2ZmIHRvIGNvbmZpZ3VyZQorICAgIworICAgTlNCX0ZJTkFMX01PRFVMRVM9CisgICBmb3IgbmNkX3ggaW4gJE5TQl9ESVNUX01PRFVMRVMgJE5TQl9FWFRSQV9NT0RVTEVTCisgICBkbworCWlmIFsgLXIgJG5nY19zcmMvYWdlbnQvbWliZ3JvdXAvJG5jZF94LmggXTsgdGhlbgorCQlOU0JfRklOQUxfTU9EVUxFUz0iJE5TQl9GSU5BTF9NT0RVTEVTICRuY2RfeCIKKwlmaQorICAgZG9uZQorCisgICAjCisgICAjIGNvbmZpZ3VyZQorICAgIworICAgIyBOT1RFOiBmb3Igc29tZSByZWFzb24sIGJhc2ggZG9lcyBub3QgZXhwYW5kIHZhcmlhYmxlcworICAgIyBpbnNpZGUgb2Ygc2luZ2xlIHF1b3Rlcywgc28gdXNlIGRvdWJsZSBxdW90ZXMKKyAgICMKKyAgIGVjaG8gJG5nY19zcmMvY29uZmlndXJlICAtLXdpdGgtZGVmYXVsdHMgXAorICAgICAgLS1wcmVmaXg9IiROU0JfUFJFRklYIiBcCisgICAgICAtLWRpc2FibGUtZGV2ZWxvcGVyICROU0JfRVhUUkFfQ09ORklHIFwKKyAgICAgICItLXdpdGgtbWliLW1vZHVsZXM9JE5TQl9GSU5BTF9NT0RVTEVTIiBcCisgICAgICAiLS13aXRoLXRyYW5zcG9ydHM9JE5TQl9ESVNUX1RSQU5TUE9SVFMgJE5TQl9FWFRSQV9UUkFOU1BPUlRTIiBcCisgICAgICAkTlNCX1NIQVJFRCAkTlNCX0lQVjYgJE5TQl9QRVJMCisgICAkbmdjX3NyYy9jb25maWd1cmUgIC0td2l0aC1kZWZhdWx0cyBcCisgICAgICAtLXByZWZpeD0iJE5TQl9QUkVGSVgiIFwKKyAgICAgIC0tZGlzYWJsZS1kZXZlbG9wZXIgJE5TQl9FWFRSQV9DT05GSUcgXAorICAgICAgIi0td2l0aC1taWItbW9kdWxlcz0kTlNCX0ZJTkFMX01PRFVMRVMiIFwKKyAgICAgICItLXdpdGgtdHJhbnNwb3J0cz0kTlNCX0RJU1RfVFJBTlNQT1JUUyAkTlNCX0VYVFJBX1RSQU5TUE9SVFMiIFwKKyAgICAgICROU0JfU0hBUkVEICROU0JfSVBWNiAkTlNCX1BFUkwKKyAgICMgSSdkIGxpa2UgdG8gYWRkICcgfCB0ZWUgbnNiX2NvbmZpZy4kTlNCX0RBVEUnIHRvIHNhdmUgb3V0cHV0LCBidXQgdGhlbgorICAgIyBJJ2QgbG9zZSB0aGUgcmMgZnJvbSBjb25maWd1cmUsIHdoaWNoIEkgbmVlZC4uLiBzaWdoCisgICBuZ2NfcmM9JD8KKyAgIGlmIFsgJG5nY19yYyAtbmUgMCBdO3RoZW4KKyAgICAgIG5zYl9hYm9ydCAiRXJyb3IgZHVyaW5nIGNvbmZpZ3VyZSBhbGwgKHJjPSRuZ2NfcmMpIgorICAgZmkKK30KKworbnNiX3ppcCgpCit7CisgICBpZiBbICQjIC1uZSAzIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAidXNhZ2U6ICQwIHJlbGVhc2UgYnVpbGRfZGlyZWN0b3J5IGRlc3RfZGlyIgorICAgZmkKKworICAgcmVsZWFzZT0kMQorICAgYnVpbGRfZGlyPSQyCisgICBkZXN0X2Rpcj0kMworCisgICBidWlsZD0kYnVpbGRfZGlyLyROU0JfUExBVEZPUk0KKworICAgaWYgWyAhIC1kICRidWlsZCBdOyB0aGVuCisgICAgICBuc2JfYWJvcnQgIiRidWlsZCBkaXJlY3RvcnkgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKworICAgaWYgWyAhIC1kICRidWlsZC91c3IgXTsgdGhlbgorICAgICAgbnNiX2Fib3J0ICJpbnN0YWxsIGRpcmVjdG9yeSAkYnVpbGQvdXNyIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCEiCisgICBmaQorCisgICBjZCAkYnVpbGQKKworICAgcm0gLWYgJGRlc3RfZGlyLyRyZWxlYXNlLSROU0JfUExBVEZPUk0udGFyCisgICBuc2JfaW5mbyAidGFyIGNmICRkZXN0X2Rpci8kcmVsZWFzZS0kTlNCX1BMQVRGT1JNLnRhciB1c3IiCisgICB0YXIgY2YgJGRlc3RfZGlyLyRyZWxlYXNlLSROU0JfUExBVEZPUk0udGFyIHVzcgorCisgICBuc2JfaW5mbyAiZ3ppcCAtLWJlc3QgJGRlc3RfZGlyLyRyZWxlYXNlLSROU0JfUExBVEZPUk0udGFyIgorICAgZ3ppcCAtLWJlc3QgJGRlc3RfZGlyLyRyZWxlYXNlLSROU0JfUExBVEZPUk0udGFyCisKKyAgIGlmIFsgJE5TQl9RVUlFVCAtbmUgMSBdOyB0aGVuCisgICAgICBscyAtbHQgJGRlc3RfZGlyCisgICBmaQorfQorCituc2JfdXBsb2FkKCkKK3sKKyAgIGJ1aWxkX2Rpcj0kMQorICAgdGFyZ2V0PSQyCisgICBuc2JfZmxvdyB1cGxvYWQgdG8gJHRhcmdldDogY29uZmlnLmxvZyBjb25maWd1cmUtc3VtbWFyeSBuc2JfbWFrZS1hbGwuJE5TQl9EQVRFIG5zYl9tYWtlLXRlc3QuJE5TQl9EQVRFCisgICBkaXI9JFBXRAorICAgY2QgJGJ1aWxkX2RpcgorICAgL3Vzci9iaW4vc2NwIGNvbmZpZy5sb2cgY29uZmlndXJlLXN1bW1hcnkgbnNiX21ha2UtYWxsLiROU0JfREFURSBuc2JfbWFrZS10ZXN0LiROU0JfREFURVwKKyAgICAgICAgICAgICAgICAgJHRhcmdldAorICAgY2QgJGRpcgorfQorCituc2JfZGlyX2xpbmsoKQoreworICBpZiBbICQjIC1sdCAyIF07IHRoZW4KKyAgICBuc2JfYWJvcnQgInVzYWdlOiBuc2JfZGlyX2xpbmsgc3JjX2RpciBkc3RfZGlyIgorICBmaQorICBsaW5rX3NyY19kaXI9JDEKKyAgbGlua19kc3RfZGlyPSQyCisgIGlmIFsgLWQgJGxpbmtfc3JjX2RpciBdOyB0aGVuCisgICAgbnNiX2Zsb3cgc2V0IHVwIHNoYWRvdyBkaXJlY3RvcnkgJGxpbmtfZHN0X2RpcgorICAgICROU0JfRElSTElOSyAkbGlua19zcmNfZGlyICRsaW5rX2RzdF9kaXIKKyAgICByYz0kPworICAgIGlmIFsgJHJjIC1uZSAwIF07dGhlbgorICAgICAgbnNiX2Fib3J0ICJFcnJvciBkdXJpbmcgbnNiX2Rpcl9saW5rIChyYz0kcmMpIgorICAgIGZpCisgIGVsc2UKKyAgICBuc2JfaW5mbyAiU2tpcHBpbmcgJGxpbmtfc3JjX2RpciIKKyAgZmkKKyAgfQorCituc2JfbWFrZSgpCit7CisgICBuc2JfZmxvdyBtYWtlICQxCisgICB0YXJnZXQ9JDEKKyAgIHNoaWZ0IDEKKyAgIHBhcm1zPSRACisKKyAgIGlmIFsgIngkTlNCX01BS0UiID0gIngiIF07dGhlbgorICAgICAgI25zYl9pbmZvICJTZWFyY2hpbmcgZm9yIEdOVSBtYWtlIChzZXQgTlNCX01BS0UgdG8gc2tpcCB0aGlzIHN0ZXApIgorICAgICAgZm9yIHAgaW4gYGVjaG8gJFBBVEggfCB0ciAnOicgJyAnYAorICAgICAgZG8KKyAgICAgICAgICNlY2hvICRwCisgICAgICAgICBpZiBbIC14ICRwL21ha2UgXTt0aGVuCisgICAgICAgICAgICBkdW1teT1gJHAvbWFrZSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgR05VYAorICAgICAgICAgICAgaWYgWyAkPyAtZXEgMCBdO3RoZW4KKwkgICAgICAgI25zYl9pbmZvICJ1c2luZyAkcC9tYWtlICgkZHVtbXkpIgorICAgICAgICAgICAgICAgTlNCX01BS0U9JHAvbWFrZQorICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGZpCisgICAgICAgICBmaQorICAgICAgICAgaWYgWyAteCAkcC9nbWFrZSBdO3RoZW4KKyAgICAgICAgICAgIGR1bW15PWAkcC9nbWFrZSAtLXZlcnNpb24gMj4mMSB8IGdyZXAgR05VYAorICAgICAgICAgICAgaWYgWyAkPyAtZXEgMCBdO3RoZW4KKwkgICAgICAgI25zYl9pbmZvICJ1c2luZyAkcC9nbWFrZSAoJGR1bW15KSIKKyAgICAgICAgICAgICAgIE5TQl9NQUtFPSRwL2dtYWtlCisgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgZmkKKyAgICAgICAgIGZpCisgICAgICBkb25lCisgICAgICBpZiBbICJ4JE5TQl9NQUtFIiA9ICJ4IiBdO3RoZW4KKyAgICAgICAgIG5zYl9hYm9ydCAiR05VIG1ha2Ugbm90IGZvdW5kLiBTZXQgTlNCX01BS0UgdG8geW91ciBtYWtlIGV4ZWN1dGFibGUuIgorICAgICAgZmkKKyAgIGZpCisKKyAgIG5zYl9tYWtlX09VVFBVVD1uc2JfbWFrZS0kdGFyZ2V0LiROU0JfREFURQorICAgbnNiX2luZm8gIk1ha2luZyAkdGFyZ2V0Li4uIChsb2cgaXMgJG5zYl9tYWtlX09VVFBVVCkiCisgICAjCisgICBpZiBbICJ4JHRhcmdldCIgPSAieGFsbCIgXTsgdGhlbgorICAgICAgJE5TQl9NQUtFIE5PQVVUT0RFUFM9eSB0b3VjaGl0IDI+JjEgfCB0ZWUgJG5zYl9tYWtlX09VVFBVVAorICAgZmkKKyAgICROU0JfTUFLRSAkTlNCX01BS0VfRVhUUkEgTk9BVVRPREVQUz15IHN0YXJ0LWZsYWcgJHRhcmdldCAkcGFybXMgZW5kLWZsYWcgMj4mMSB8IHRlZSAtYSAkbnNiX21ha2VfT1VUUFVUCisgICAjIGNoZWNraW5nICQ/IHdvdWxkIG9ubHkgZ2V0IHVzIHRoZSByYyBmcm9tIHRlZSwgd2hpY2ggaXMgdXNlbGVzcworCisgICBuc2JfaW5mbyAiQ2hlY2tpbmcgZm9yIGVycm9ycy4uLiIKKyAgIGVncmVwIC1pICJlcnJvcnxmYWlsfHdhcm58bm8gc3VjaHxleGlzdHN8dCBmaW5kIHxlcm1pc3Npb24gZGVuaWVkIiAkbnNiX21ha2VfT1VUUFVUIFwKKyAgICAgICAgID4gbnNiX21ha2UtJHRhcmdldC1hbGxlcnJzLiROU0JfREFURQorICAgIyBhbGxvdyBmb3IgYSBmZXcgZXhjZXB0aW9ucworICAgZWdyZXAgLXYgLWkgIl5va3x0ZXN0aW5nIC4qZmFpbHVyZXxbYS16Jl9dKGZhaWx8ZXJyb3IpfHdhcm58ZXJyb3IobWlifFwuMyl8KExPR3xTTk1QKV9FUlJ8SW4gZnVuY3Rpb258PSBGQUlMVVJFfERFQlVHTVNHfC9cKnxzdGF0aWMgbGlicmFyeSAuKiBpcyBub3QgcG9ydGFibGUiIG5zYl9tYWtlLSR0YXJnZXQtYWxsZXJycy4kTlNCX0RBVEUgXAorICAgICAgICAgPiBuc2JfbWFrZS0kdGFyZ2V0LWVycnMuJE5TQl9EQVRFCisgICBpZiBbIC1zIG5zYl9tYWtlLSR0YXJnZXQtZXJycy4kTlNCX0RBVEUgXTsgdGhlbgorICAgICAgbnNiX3Byb21wdCAicHJlc3MgZW50ZXIgdG8gdmlldyBlcnJvcnMiCisjICAgICAgZ3JlcCAnOicgJG5zYl9tYWtlX09VVFBVVCA+IG5zYl9tYWtlLSR0YXJnZXQtZXJyczIuJE5TQl9EQVRFCisjICAgICAgdGFpbCAtbiAkTlNCX0VSUl9DVFhfTElORVMgbnNiX21ha2UtJHRhcmdldC1lcnJzMi4kTlNCX0RBVEUgPiYyCisgICAgICB0YWlsICROU0JfVEFJTF9BUkdTIG5zYl9tYWtlLSR0YXJnZXQtZXJycy4kTlNCX0RBVEUgPiYyCisgICAgICBuc2JfYWJvcnQgIkVycm9yKHMpIGR1cmluZyBtYWtlICR0YXJnZXQiCisgICBmaQorCisgICBpZiBbIC1mIGJ1aWxkLWluLXByb2dyZXNzLWZsYWcgXTt0aGVuCisgICAgIG5zYl9hYm9ydCAibWFrZSAkdGFyZ2V0IGluY29tcGxldGUiCisgICBmaQorfQorCituc2JfZGVmYXVsdF9wYXRocygpCit7CisgICBpZiBbICJ4JE5TQl9WRVJTSU9OIiA9ICJ4IiBdOyB0aGVuCisgICAgICBOU0JfVkVSU0lPTj0idW5rbm93bi12ZXJzaW9uIgorICAgZmkKKyAgIGlmIFsgIngkTlNCX1NSQ19ESVIiID0gIngiIF07IHRoZW4KKyAgICAgIE5TQl9TUkNfRElSPSRIT01FL3NyYy9uZXQtc25tcC0kTlNCX1ZFUlNJT04KKyAgIGZpCisgICBpZiBbICJ4JE5TQl9CVUlMRF9ESVIiID0gIngiIF07IHRoZW4KKyAgICAgIE5TQl9CVUlMRF9ESVI9JEhPTUUvYnVpbGQvJE5TQl9WRVJTSU9OCisgICAgICBpZiBbICJ4JE5TQl9TVUZGSVgiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgICBOU0JfQlVJTERfRElSPSROU0JfQlVJTERfRElSLyROU0JfU1VGRklYCisgICAgICBmaQorICAgZmkKKyAgIGlmIFsgIngkTlNCX0lOU1RBTExfRElSIiA9ICJ4IiBdOyB0aGVuCisgICAgICBOU0JfSU5TVEFMTF9ESVI9IiROU0JfSU5TVEFMTF9ESVJfREVGQVVMVCIKKyAgIGZpCit9CisKK25zYl9idWlsZCgpCit7CisgICBpZiBbICQjIC1sdCA1IF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAidXNhZ2U6ICQwIHJlbGVhc2Ugc3JjX2RpciBidWlsZF9kaXJlY3RvcnkgZGVzdF9kaXIgY29uZmlnX2FsbF9mbGFnICgkQCkiCisgICBmaQorCisgICBuc2JfY29uZmlnX2FsbF9mbGFnPTAKKyAgIHJlbGVhc2U9JDEKKyAgIHNyY19kaXI9JDIKKyAgIGJ1aWxkX2Rpcj0kMworICAgZGVzdF9kaXI9JDQKKyAgIG5zYl9jb25maWdfYWxsX2ZsYWc9JDUKKyAgIHNoaWZ0IDUKKworICAgbnNiX2Zsb3cgYnVpbGQgaW4gJGJ1aWxkX2RpcgorICAgbnNiX2Zsb3cgaG9zdCAkTlNCX0hPU1QKKyAgIG5zYl9mbG93IHBsYXRmb3JtICROU0JfUExBVEZPUk0KKworICAgaWYgWyAhIC1kICRzcmNfZGlyIF07IHRoZW4KKyAgICAgIG5zYl9hYm9ydCAiJHNyY19kaXIgZG9lcyBub3QgZXhpc3QhIgorICAgZmkKKworICAgaWYgWyAhIC1kICRidWlsZF9kaXIgXTsgdGhlbgorICAgICAgbWtkaXIgJGJ1aWxkX2RpcgorICAgICAgaWYgWyAhIC1kICRidWlsZF9kaXIgXTsgdGhlbgorICAgICAgICAgbnNiX2Fib3J0ICIkYnVpbGRfZGlyIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdCEiCisgICAgICBmaQorICAgZmkKKworICAgbnNiX2luZm8gIkNoYW5naW5nIGRpcmVjdG9yaWVzIHRvICRidWlsZF9kaXIiCisgICBjZCAkYnVpbGRfZGlyCisKKyAgIGlmIFsgJE5TQl9DTEVBTiAtZ3QgMCBdOyB0aGVuCisgICAgICBuc2JfaW5mbyAiQ2xlYW5pbmcgdXAuLi4iCisgICAgICBpZiBbICROU0JfQ0xFQU4gLWVxIDIgXTt0aGVuCisgICAgICAgIGlmIFsgIngkUFdEIiA9ICJ4LyIgXTsgdGhlbgorICAgICAgICAgICBuc2JfYWJvcnQgIk5vdCBydW5uaW5nIHJtIC1mUiBmcm9tIC8iCisgICAgICAgIGZpCisgICAgICAgIG5zYl9pbmZvICJybSAtZlIgKiAuW2EtekEtWl0qID4gL2Rldi9udWxsIDI+JjEiCisgICAgICAgIHJtIC1mUiAqIC5bYS16QS1aXSogPiAvZGV2L251bGwgMj4mMQorICAgICAgZWxzZQorICAgICAgICBpZiBbICJ4JGRlc3RfZGlyIiAhPSAieCIgLWEgIngkZGVzdF9kaXIiICE9ICJ4LyIgXTsgdGhlbgorICAgICAgICAgIG5zYl9pbmZvICJybSAtZlIgbnNiXyogJGRlc3RfZGlyID4gL2Rldi9udWxsIDI+JjEiCisgICAgICAgICAgI3JtIC1mUiBuc2JfKiAkZGVzdF9kaXIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICBmaQorICAgICAgICBpZiBbIC1mIE1ha2VmaWxlIF07IHRoZW4KKyAgICAgICAgICAgIG5zYl9tYWtlIE5PQVVUT0RFUFM9eSBkaXN0Y2xlYW4KKyAgICAgICAgICAgIG5zYl9idWlsZF9yYz0kPworICAgICAgICAgICAgaWYgWyAkbnNiX2J1aWxkX3JjIC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBuc2JfYWJvcnQgIkVycm9yIGR1cmluZyBtYWtlIGRpc3RjbGVhbiAocmM9JG5zYl9idWlsZF9yYykiCisgICAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgZmkKKyAgIGZpCisKKyAgIGlmIFsgIlgkZGVzdF9kaXIiICE9ICJYIiAtYSAhIC1kICRkZXN0X2RpciBdOyB0aGVuCisgICAgICBta2RpciAtcCAkZGVzdF9kaXIKKyAgICAgIGlmIFsgISAtZCAkZGVzdF9kaXIgXTsgdGhlbgorICAgICAgICAgbnNiX2Fib3J0ICIkZGVzdF9kaXIgZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0ISIKKyAgICAgIGZpCisgICBmaQorCisgICBpZiBbICROU0JfU0tJUF9ESVJMSU5LIC1lcSAxIF07IHRoZW4KKyAgICAgIG5zYl9pbmZvICJTa2lwcGluZyBuc2JfZGlyX2xpbmsiCisgICBlbHNlCisgICAgICBmb3IgZCBpbiAkTlNCX0RJUkxJTktfRElSUzsgZG8KKyAgICAgICAgbnNiX2Rpcl9saW5rICRzcmNfZGlyLyRkICRidWlsZF9kaXIvJGQKKyAgICAgIGRvbmUKKyAgIGZpCisKKyAgIGlmIFsgJE5TQl9TS0lQX0NPTkZJRyAtbmUgMSBdOyB0aGVuCisgICAgICBuc2JfaW5mbyAiQ29uZmlndXJpbmcuLi4gKGxvZyBpcyBuc2JfY29uZmlnLiROU0JfREFURSkiCisgICAgICBpZiBbICJ4JG5zYl9jb25maWdfYWxsX2ZsYWciID0gIngwIiBdOyB0aGVuCisgICAgICAgICAgbnNiX2NvbmZpZ19kaXN0ICRzcmNfZGlyICIkZGVzdF9kaXIiCisgICAgICBlbHNlCisgICAgICAgICAgbnNiX2NvbmZpZ19hbGwgJHNyY19kaXIgIiRkZXN0X2RpciIKKyAgICAgIGZpCisgICAgICBuc2JfcHJvbXB0ICJwcmVzcyBlbnRlciB0byBjb250aW51ZSIKKyAgIGZpCisKKyAgIGlmIFsgJE5TQl9TS0lQX0JVSUxEIC1lcSAxIF07IHRoZW4KKyAgICAgIG5zYl9pbmZvICJTa2lwcGluZyAnbWFrZSBhbGwnIgorICAgZWxzZQorICAgICAgbnNiX21ha2UgYWxsCisgICBmaQorCisgICBpZiBbICROU0JfU0tJUF9URVNUIC1lcSAxIF07IHRoZW4KKyAgICAgIG5zYl9pbmZvICJTa2lwcGluZyAnbWFrZSB0ZXN0JyIKKyAgIGVsc2UKKyAgICAgIG5zYl9wcm9tcHQgIk5vIGVycm9ycyBmb3VuZCwgcHJlc3MgZW50ZXIgdG8gcnVuIHRlc3RzIgorICAgICAgU05NUF9UTVBESVJfQkFTRT0kYnVpbGRfZGlyL3Rlc3RzCisgICAgICBleHBvcnQgU05NUF9UTVBESVJfQkFTRQorICAgICAgbnNiX21ha2UgdGVzdAorICAgZmkKKworICAgaWYgWyAkTlNCX1NLSVBfSU5TVEFMTCAtZXEgMSBdOyB0aGVuCisgICAgICBuc2JfaW5mbyAiU2tpcHBpbmcgJ21ha2UgaW5zdGFsbCciCisgICBlbHNlCisgICAgICBuc2JfcHJvbXB0ICJObyBlcnJvcnMgZm91bmQsIHByZXNzIGVudGVyIHRvIGluc3RhbGwiCisgICAgICAjIERFU1RESVIgbWFrZXMgc3VyZSB0aGUgcGVybCBzdHVmZiBnb2VzIGludG8gJGRlc3RfZGlyLCB0b28KKyAgICAgIG5zYl9tYWtlIGluc3RhbGwgREVTVERJUj0iJGRlc3RfZGlyIiAkTlNCX0VYVFJBX0lOU1RBTEwKKyAgIGZpCisKKyAgIHJldHVybiAwCit9CmRpZmYgLS1naXQgYS9kaXN0L25zYi1uaWdodGx5IGIvZGlzdC9uc2ItbmlnaHRseQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zMjk4YTI2Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9uc2ItbmlnaHRseQpAQCAtMCwwICsxLDE4OCBAQAorIyEvYmluL3NoCisjCisjICRJZCQKKyMgQXV0aG9yOiBSb2JlcnQgU3RvcnkgPHJzdG9yeUBmcmVlc25tcC5jb20+CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCit1c2FnZSgpCit7CisgICBlY2hvICJVc2FnZTogJDAgIFtvcHRpb25hbCBwYXJhbXNdIFZFUlNJT04iCisgICBlY2hvICIiCisgICBlY2hvICIgb3B0aW9uYWwgcGFyYW1zOiBbLXhdIFstcyBTUkNEXSBbLWIgQlVJTEREXSBbLWkgSU5TVEFMTERdIgorICAgZWNobyAiICAgICAgICAgICAgICAgICAgWy1oIGhvc3RdIFstcCBwYXRoXSIKKyAgIGVjaG8gIiBWRVJTSU9OICAgIDogcmVsZWFzZSBudW1iZXIgKGVnIDUuMi4yKSIKKyAgIGVjaG8gIiAtcyBTUkNESVIgIDogc291cmUgZGlyZWN0b3J5IFskSE9NRS9zcmMvbmV0LXNubXAtVkVSU0lPTl0iCisgICBlY2hvICIgLWIgQlVJTEREICA6IGJ1aWxkIGRpcmVjdG9yeSBbJEhPTUUvYnVpbGQvXSIKKyAgIGVjaG8gIiAgICAgICAgICAgICAgTk9URS1wbGF0Zm9ybSB3aWxsIGJlIGFwcGVuZGVkIHRvIGJ1aWxkIGRpcmVjdG9yeSIKKyAgIGVjaG8gIiAtaSBJTlNUQUxMRDogaW5zdGFsbCBkaXJlY3RvcnkgWyRIT01FL2J1aWxkL1wkUExBVEZPUk0vdXNyXSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAteCA6IGNvbmZpZ3VyZSBleHRyYSBmZWF0dXJlcyBmb3IgcHJlLXJlbGVhc2UgdGVzdGluZyIKKyAgIGVjaG8gIiAtQyA6IGRvbid0IHNvdXJjZSAkSE9NRS8uc25tcC9uc2ItbmlnaHRseSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAtZiA6IGZyb20gYWRkcmVzcyBmb3IgZW1haWwgcmVzdWx0cyIKKyAgIGVjaG8gIiAtZSA6IGFkZHJlc3MgdG8gZW1haWwgZXJyb3IgcmVzdWx0cyB0byIKKyAgIGVjaG8gIiAtbyA6IGFkZHJlc3MgdG8gZW1haWwgc3VjY2VzcyByZXN1bHRzIHRvIgorICAgZWNobyAiIC1oIDogaG9zdCB0byB1cGxvYWQgcmVzdWx0cyB0byIKKyAgIGVjaG8gIiAtcCA6IHBhdGggdG8gdXBsb2FkIHJlc3VsdHMgdG8iCisgICBleGl0IDEKK30KKworI3NldCAteAorCisjIG1ha2UgZ2V0b3B0cyB3b3JrIG9uIFRydTY0IGJ5IHJlc3Bhd25pbmcgaW4gUG9zaXggbW9kZQoraWYgWyAiYHVuYW1lYCIgPSAiT1NGMSIgLWEgIiRCSU5fU0giICE9ICJ4cGc0IiBdOyB0aGVuCisgICAgQklOX1NIPXhwZzQKKyAgICBleHBvcnQgQklOX1NICisgICAgZXhlYyAkMCAkKgorZmkKKworIworIyBmaW5kIG5zYi1wbGF0Zm9ybSBiYXNlZCBvbiB0aGUgcGF0aCB0byB0aGlzIHNjcmlwdAorIworRVhFX1BBVEg9YGRpcm5hbWUgJDBgCitpZiBbICEgLWYgJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMgXTt0aGVuCisgICBpZiBbIC1mICRIT01FL2Jpbi9uc2ItZnVuY3Rpb25zIF07IHRoZW4KKyAgICAgIEVYRV9QQVRIPSRIT01FL2JpbgorICAgZWxpZiBbIC1mIG5zYi1mdW5jdGlvbnMgXTt0aGVuCisgICAgICBFWEVfUEFUSD0kUFdECisgICBlbHNlCisgICAgICBlY2hvICJDYW5ub3QgZmluZCBuc2ItZnVuY3Rpb25zIGluICRFWEVfUEFUSCwgJEhPTUUvYmluIG9yICRQV0QiCisgICAgICBleGl0IDEKKyAgIGZpCitmaQorCitpZiBbICJ4JDEiID0gIngtQyIgXTsgdGhlbgorICAgIHNoaWZ0CitlbHNlCisgICAgaWYgWyAtZiAkSE9NRS8uc25tcC9uc2ItbmlnaHRseSBdO3RoZW4KKyAgICAgICAgLiAkSE9NRS8uc25tcC9uc2ItbmlnaHRseQorICAgIGZpCitmaQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIC1yIDogcmVtb3ZlIGJ1aWxkIGRpciBiZWZvcmUKKyMgLVIgOiByZW1vdmUgYnVpbGQgZGlyIGFmdGVyCitQQVJNUz0iJFBBUk1TIC1yIgorTklHSFRMWV9WRVJCT1NFPTAKK05TQl9FUlJfUkVTVUxUU19UTz0iIgorTlNCX09LX1JFU1VMVFNfVE89IiIKKword2hpbGUgZ2V0b3B0cyBiOmU6ZjppOm86czp4aDpwOnYgb3B0CitkbworICAgIGNhc2UgIiRvcHQiIGluCisgICAgICBiKSAgTlNCX0JVSUxEX0RJUj0kT1BUQVJHOzsKKyAgICAgIGUpICBOU0JfRVJSX1JFU1VMVFNfVE89JE9QVEFSRzs7CisgICAgICBmKSAgTlNCX0ZST009JE9QVEFSRzs7CisgICAgICBvKSAgTlNCX09LX1JFU1VMVFNfVE89JE9QVEFSRzs7CisgICAgICBpKSAgUEFSTVM9Ii1pICRPUFRBUkcgJFBBUk1TIjs7CisgICAgICBzKSAgTlNCX1NSQ19ESVI9JE9QVEFSRzs7CisgICAgICBoKSAgTlNCX1NDUF9IT1NUPSRPUFRBUkcKKyAgICAgICAgICBQQVJNUz0iLWggJE5TQl9TQ1BfSE9TVCAkUEFSTVMiCisgICAgICAgICAgOzsKKyAgICAgIHApICBOU0JfU0NQX0RFU1Q9JE9QVEFSRworICAgICAgICAgIFBBUk1TPSItcCAkTlNCX1NDUF9ERVNUICRQQVJNUyIKKyAgICAgICAgICA7OworICAgICAgeCkgIFBBUk1TPSIteCAkUEFSTVMiOzsKKyAgICAgIHYpICBOSUdIVExZX1ZFUkJPU0U9MTs7CisgICAgICBcPykjIHVua25vd24gZmxhZworICAgICAgICB1c2FnZTs7CisgICAgZXNhYworZG9uZQorc2hpZnQgYGV4cHIgJE9QVElORCAtIDFgCisKK2lmIFsgJCMgLW5lIDEgXTsgdGhlbgorICAgZWNobyAiZXhwZWN0aW5nIDEgYXJndW1lbnQsIGdvdCAkIyAoJEApIgorICAgdXNhZ2UKK2ZpCisKK05TQl9WRVJTSU9OPSQxCisKKy4gJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMKKworbnNiX2RlZmF1bHRfcGF0aHMKKworUEFSTVM9IiRQQVJNUyAtYiAkTlNCX0JVSUxEX0RJUiAtcyAkTlNCX1NSQ19ESVIiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitlY2hvICJTdGFydDogYGRhdGVgIgorZWNobyAiUnVubmluZyBuc2ItcGFja2FnZSAkUEFSTVMgJE5TQl9WRVJTSU9OIgoraWYgWyAkTklHSFRMWV9WRVJCT1NFID0gMSBdOyB0aGVuCisgICAgJEVYRV9QQVRIL25zYi1wYWNrYWdlICRQQVJNUyAkTlNCX1ZFUlNJT04KK2Vsc2UKKyAgICAkRVhFX1BBVEgvbnNiLXBhY2thZ2UgJFBBUk1TICROU0JfVkVSU0lPTiA+IC9kZXYvbnVsbAorZmkKK1JDPSQ/CitlY2hvICJGaW5pc2g6IGBkYXRlYCIKK2NkICROU0JfQlVJTERfRElSCitjYXNlICRSQyBpbgorICAgIDApICBSRVNVTFQ9IlN1Y2Nlc3MiCisgICAgICAgIE5TQl9SRVNVTFRTX1RPPSROU0JfT0tfUkVTVUxUU19UTworICAgICAgICBGSUxFUz0iIgorICAgICAgICA7OworICAgICopIFJFU1VMVD0iRXJyb3IgKHJjICRSQykiCisgICAgICAgTlNCX1JFU1VMVFNfVE89JE5TQl9FUlJfUkVTVUxUU19UTworICAgICAgIEZJTEVTPWBscyBuc2ItbWFrZS0qLWVycnMuKiAyPi9kZXYvbnVsbGAKKyAgICAgICBpZiBbICJ4JE5TQl9TQ1BfSE9TVCIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgICBuc2JfdXBsb2FkICROU0JfQlVJTERfRElSICROU0JfU0NQX0hPU1Q6JE5TQl9TQ1BfREVTVC8kTlNCX1ZFUlNJT04vJE5TQl9TVUZGSVgKKyAgICAgICBmaQorICAgICAgICA7OworZXNhYworZWNobyAiUmVzdWx0OiAkUkVTVUxUIgorCitpZiBbICJ4JE5TQl9SRVNVTFRTX1RPIiAhPSAieCIgXTsgdGhlbgorICAgU1VCSkVDVD0iJE5TQl9WRVJTSU9OICRSRVNVTFQgb24gJE5TQl9IT1NUICgkTlNCX1BMQVRGT1JNKSIKKyAgIGVjaG8gIlNlbmRpbmcgbWFpbCB0byAkTlNCX1JFU1VMVFNfVE86ICRTVUJKRUNUIgorICAgY2FzZSBgdW5hbWUgLXNgIGluCisgICAgICBPcGVuQlNEfEZyZWVCU0QpICMgbWFpbCBkb2Vzbid0IGFsbG93IHNldHRpbmcgRnJvbQorICAgICAgICAgIyBzZWVtcyB0byBiZSBpbiAvdXNyL3NiaW4sIHdoaWNoIGlzbid0IGluIGFsbCBwYXRocworCSBQQVRIPS91c3Ivc2Jpbi86JFBBVEgKKyAgICAgICAgIGVjaG8gIkZyb206ICROU0JfRlJPTSIgPiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIlRvOiAkTlNCX1JFU1VMVFNfVE8iID4+IG1haWwucmVzdWx0cworICAgICAgICAgIyBtYWlsLXJlbGF0ZWQgZXJyb3JzIHRvIE9LIGFkZHJlc3MgKHVzdWxseSBidWlsZG1hc3RlcikKKyAgICAgICAgIGVjaG8gIkVycm9ycy1UbzogJE5TQl9PS19SRVNVTFRTX1RPIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIlN1YmplY3Q6ICRTVUJKRUNUIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIiIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBncmVwIENPTkZJR1VSRV9PUFRJT05TIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmh8c2VkICdzOi9ob21lL1teIF0qL2J1aWxkOiRIT01FOmcnID4+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiUmVzdWx0OiAkUkVTVUxUIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGlmIFsgIngkRklMRVMiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICBjYXQgJEZJTEVTID4+IG1haWwucmVzdWx0cworICAgICAgICAgZmkKKyAgICAgICAgIHNlbmRtYWlsIC10IDwgbWFpbC5yZXN1bHRzCisgICAgICAgICA7OworICAgICAgU3VuT1MpICMgbm8gc2VuZG1haWwsIG5vIG1haWwgLXMsIG5lZWQgLXQgZm9yIFRvIAorICAgICAgICAgZWNobyAiRnJvbTogJE5TQl9GUk9NIiA+IG1haWwucmVzdWx0cworICAgICAgICAgIyBtYWlsLXJlbGF0ZWQgZXJyb3JzIHRvIE9LIGFkZHJlc3MgKHVzdWxseSBidWlsZG1hc3RlcikKKyAgICAgICAgIGVjaG8gIkVycm9ycy1UbzogJE5TQl9PS19SRVNVTFRTX1RPIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIlN1YmplY3Q6ICRTVUJKRUNUIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGVjaG8gIiIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBncmVwIENPTkZJR1VSRV9PUFRJT05TIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmh8c2VkICdzOi9ob21lL1teIF0qL2J1aWxkOiRIT01FOmcnID4+IG1haWwucmVzdWx0cworICAgICAgICAgZWNobyAiUmVzdWx0OiAkUkVTVUxUIiA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGlmIFsgIngkRklMRVMiICE9ICJ4IiBdOyB0aGVuCisgICAgICAgICAgICBjYXQgJEZJTEVTID4+IG1haWwucmVzdWx0cworICAgICAgICAgZmkKKyAgICAgICAgIG1haWwgLXQgJE5TQl9SRVNVTFRTX1RPIDwgbWFpbC5yZXN1bHRzCisgICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgIGVjaG8gIlJlc3VsdDogJFJFU1VMVCIgPj4gbWFpbC5yZXN1bHRzCisgICAgICAgICBpZiBbICJ4JEZJTEVTIiAhPSAieCIgXTsgdGhlbgorICAgICAgICAgICAgY2F0ICRGSUxFUyA+PiBtYWlsLnJlc3VsdHMKKyAgICAgICAgIGZpCisgICAgICAgICBtYWlsIC1zICIkU1VCSkVDVCIgJE5TQl9SRVNVTFRTX1RPIDwgbWFpbC5yZXN1bHRzCisgICAgICAgICA7OworICAgZXNhYworZmkKKworaWYgWyAkUkMgLWVxIDAgXTsgdGhlbgorICAgICAgICBpZiBbICJ4JE5TQl9CVUlMRF9ESVIiID0gIi8iIF07IHRoZW4KKyAgICAgICAgICAgIG5zYl9hYm9ydCAiTm90IHJ1bm5pbmcgcm0gLWZSIGZyb20gLyIKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgL2Jpbi9ybSAtZlIgJE5TQl9CVUlMRF9ESVIgPiAvZGV2L251bGwgMj4mMQorICAgICAgICBmaQorZmkKKworZXhpdCAkUkMKZGlmZiAtLWdpdCBhL2Rpc3QvbnNiLXBhY2thZ2UgYi9kaXN0L25zYi1wYWNrYWdlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmY1MWMxNTAKLS0tIC9kZXYvbnVsbAorKysgYi9kaXN0L25zYi1wYWNrYWdlCkBAIC0wLDAgKzEsMTM3IEBACisjIS9iaW4vc2gKKyMKKyMgJElkJAorIyBBdXRob3I6IFJvYmVydCBTdG9yeSA8cnN0b3J5QGZyZWVzbm1wLmNvbT4KKyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK3VzYWdlKCkKK3sKKyAgIGVjaG8gIlVzYWdlOiAkMCAgW3BhcmFtc10gVkVSU0lPTiIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAgcGFyYW1zOiBbLWNdIFstZF0gWy1QXSBbLXMgTlNCX1NSQ19ESVJdIFstYiBCVUlMRERdIFstaSBOU0JfSU5TVEFMTF9ESVJdIgorICAgZWNobyAiICAgICAgICAgIFstaCBob3N0XSBbLXAgcGF0aF0iCisgICBlY2hvICIiCisgICBlY2hvICIgVkVSU0lPTiAgICA6IHJlbGVhc2UgbnVtYmVyIChlZyA1LjIuMikiCisgICBlY2hvICIgLXMgTlNCX1NSQ19ESVIgIDogc291cmNlIGRpcmVjdG9yeSBbJEhPTUUvc3JjL25ldC1zbm1wLVZFUlNJT05dIgorICAgZWNobyAiIC1iIEJVSUxERCAgOiBidWlsZCBkaXJlY3RvcnkgWyRIT01FL2J1aWxkL10iCisgICBlY2hvICIgICAgICAgICAgICAgIE5PVEUtcGxhdGZvcm0gd2lsbCBiZSBhcHBlbmRlZCB0byBidWlsZCBkaXJlY3RvcnkiCisgICBlY2hvICIgLWkgTlNCX0lOU1RBTExfRElSOiBpbnN0YWxsIGRpcmVjdG9yeSBbJEhPTUUvYnVpbGQvXCRQTEFURk9STS91c3JdIgorICAgZWNobyAiIgorICAgZWNobyAiIC14IDogY29uZmlndXJlIGV4dHJhIGZlYXR1cmVzIGZvciBwcmUtcmVsZWFzZSB0ZXN0aW5nIgorICAgZWNobyAiIC1jIDogc2tpcCBjb25maWd1cmUiCisgICBlY2hvICIgLWQgOiBkaXJ0eSBidWlsZCAoZG9uJ3QgbWFrZSBkaXN0Y2xlYW4pIgorICAgZWNobyAiIC1tIDogc2tpcCAnbWFrZSBhbGwnIgorICAgZWNobyAiIC1QIDogcGF1c2UgYXQgcHJvbXB0cyBpbiBiZXR3ZWVuIHN0YWdlcyIKKyAgIGVjaG8gIiAtciA6IHJlbW92ZSBidWlsZCBkaXIgKHJtIC1mUikgYmVmb3JlIGJ1aWxkIgorICAgZWNobyAiIC1SIDogcmVtb3ZlIGJ1aWxkIGRpciAocm0gLWZSKSBhZnRlciBzdWNjZXNzZnVsIGJ1aWxkIgorICAgZWNobyAiIC10IDogc2tpcCAnbWFrZSB0ZXN0JyIKKyAgIGVjaG8gIiAtQyA6IGRvbid0IHNvdXJjZSAkSE9NRS8uc25tcC9uc2ItcGFja2FnZSIKKyAgIGVjaG8gIiIKKyAgIGVjaG8gIiAtaCA6IGhvc3QgdG8gdXBsb2FkIHJlc3VsdHMgdG8iCisgICBlY2hvICIgLXAgOiBwYXRoIHRvIHVwbG9hZCByZXN1bHRzIHRvIgorICAgZXhpdCAxCit9CisKKyN0cmFwIGV4aXQgU0lHSU5UCisKKyNzZXQgLXgKKworIyBtYWtlIGdldG9wdHMgd29yayBvbiBUcnU2NCBieSByZXNwYXduaW5nIGluIFBvc2l4IG1vZGUKK2lmIFsgImB1bmFtZWAiID0gIk9TRjEiIC1hICIkQklOX1NIIiAhPSAieHBnNCIgXTsgdGhlbgorICAgIEJJTl9TSD14cGc0CisgICAgZXhwb3J0IEJJTl9TSAorICAgIGV4ZWMgJDAgJCoKK2ZpCisKKyMKKyMgZmluZCBuc2ItcGxhdGZvcm0gYmFzZWQgb24gdGhlIHBhdGggdG8gdGhpcyBzY3JpcHQKKyMKK0VYRV9QQVRIPWBkaXJuYW1lICQwYAoraWYgWyAhIC1mICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zIF07dGhlbgorICAgaWYgWyAtZiAkSE9NRS9iaW4vbnNiLWZ1bmN0aW9ucyBdOyB0aGVuCisgICAgICBFWEVfUEFUSD0kSE9NRS9iaW4KKyAgIGVsaWYgWyAtZiBuc2ItZnVuY3Rpb25zIF07dGhlbgorICAgICAgRVhFX1BBVEg9JFBXRAorICAgZWxzZQorICAgICAgZWNobyAiQ2Fubm90IGZpbmQgbnNiLWZ1bmN0aW9ucyBpbiAkRVhFX1BBVEgsICRIT01FL2JpbiBvciAkUFdEIgorICAgICAgZXhpdCAxCisgICBmaQorZmkKKworaWYgWyAieCQxIiA9ICJ4LUMiIF07IHRoZW4KKyAgICBzaGlmdAorZWxzZQorICAgIGlmIFsgLWYgJEhPTUUvLnNubXAvbnNiLXBhY2thZ2UgXTt0aGVuCisgICAgICAgIC4gJEhPTUUvLnNubXAvbnNiLXBhY2thZ2UKKyAgICBmaQorZmkKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworUkVNT1ZFX1NVQ0NFU1M9MAorCisjICAgICAgeCkgIHg9JE9QVEFSRyA7Oword2hpbGUgZ2V0b3B0cyBiOmNkaDppOm1QcDpyUnM6dHggb3B0CitkbworICAgIGNhc2UgIiRvcHQiIGluCisgICAgICBiKSAgTlNCX0JVSUxEX0RJUj0kT1BUQVJHIDs7CisgICAgICBjKSAgTlNCX1NLSVBfQ09ORklHPTEgOzsKKyAgICAgIGQpICBOU0JfQ0xFQU49MCA7OworICAgICAgaCkgIE5TQl9TQ1BfSE9TVD0kT1BUQVJHIDs7CisgICAgICBpKSAgTlNCX0lOU1RBTExfRElSPSRPUFRBUkcgOzsKKyAgICAgIG0pICBOU0JfU0tJUF9CVUlMRD0xIDs7CisgICAgICBQKSAgTlNCX1BST01QVD0xIDs7CisgICAgICBwKSAgTlNCX1NDUF9ERVNUPSRPUFRBUkcgOzsKKyAgICAgIHIpICBOU0JfQ0xFQU49MiA7OworICAgICAgUikgIFJFTU9WRV9TVUNDRVNTPTEgOzsKKyAgICAgIHMpICBOU0JfU1JDX0RJUj0kT1BUQVJHIDs7CisgICAgICB0KSAgTlNCX1NLSVBfVEVTVD0xIDs7CisgICAgICB4KSAgTlNCX0NPTkZJR19BTEw9MTs7CisgICAgICBcPykjIHVua25vd24gZmxhZworICAgICAgICB1c2FnZTs7CisgICAgZXNhYworZG9uZQorc2hpZnQgYGV4cHIgJE9QVElORCAtIDFgCisKK2lmIFsgJCMgLW5lIDEgXTsgdGhlbgorICAgZWNobyAiZXhwZWN0aW5nIDEgYXJndW1lbnQsIGdvdCAkIyAoJEApIgorICAgdXNhZ2UKK2ZpCisKK05TQl9WRVJTSU9OPSQxCisKKy4gJEVYRV9QQVRIL25zYi1mdW5jdGlvbnMKKworbnNiX2RlZmF1bHRfcGF0aHMKKworaWYgWyAkTlNCX0NMRUFOIC1lcSAxIF07IHRoZW4KKyAgIGlmIFsgJE5TQl9TS0lQX0NPTkZJRyAtZXEgMSBdOyB0aGVuCisgICAgICBlY2hvICJBIGNsZWFuIGJ1aWxkIGFsc28gcmVxdWlyZXMgY29uZmlndXJhdGlvbiAoLWQgYW5kIC1jIgorICAgICAgZWNobyAiY2Fubm90IGJvdGggYmUgc3BlY2lmaWVkKS4iCisgICAgICB1c2FnZQorICAgZmkKK2ZpCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK25zYl9wcm9tcHQgInByZXNzIGVudGVyIHRvIGJ1aWxkICROU0JfU1JDX0RJUiBpbiAkTlNCX0JVSUxEX0RJUiwgYW5kIGluc3RhbGwgaW4gJE5TQl9JTlNUQUxMX0RJUiIKK25zYl9idWlsZCAkTlNCX1ZFUlNJT04gJE5TQl9TUkNfRElSICROU0JfQlVJTERfRElSICROU0JfSU5TVEFMTF9ESVIgJE5TQl9DT05GSUdfQUxMCityYz0kPworaWYgWyAieCROU0JfU0NQX0hPU1QiICE9ICJ4IiBdOyB0aGVuCisgICBuc2JfdXBsb2FkICROU0JfQlVJTERfRElSICROU0JfU0NQX0hPU1Q6JE5TQl9TQ1BfREVTVC8kTlNCX1ZFUlNJT04vJE5TQl9IT1NULworZmkKK2lmIFsgJHJjIC1lcSAwIF0gJiYgWyAkUkVNT1ZFX1NVQ0NFU1MgLWVxIDEgXTt0aGVuCisgICAgbnNiX3Byb21wdCAicHJlc3MgZW50ZXIgdG8gcmVtb3ZlICROU0JfQlVJTERfRElSIgorICAgIGlmIFsgIngkTlNCX0JVSUxEX0RJUiIgPSAiLyIgXTsgdGhlbgorICAgICAgIG5zYl9hYm9ydCAiTm90IHJ1bm5pbmcgcm0gLWZSIGZyb20gLyIKKyAgICBlbHNlCisgICAgICAgL2Jpbi9ybSAtZlIgJE5TQl9CVUlMRF9ESVIgPiAvZGV2L251bGwgMj4mMQorICAgIGZpCitmaQorCituc2JfcHJvbXB0ICJwcmVzcyBlbnRlciB0byBleGl0IHdpdGggcmMgJFJDIgorZXhpdCAkcmMKZGlmZiAtLWdpdCBhL2Rpc3QvbnNiLXBsYXRmb3JtIGIvZGlzdC9uc2ItcGxhdGZvcm0KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTc1NTBhMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3QvbnNiLXBsYXRmb3JtCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQkCisjIEF1dGhvcjogUm9iZXJ0IFN0b3J5IDxyc3RvcnlAZnJlZXNubXAuY29tPgorIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworIworIyBmaW5kIG5zYi1wbGF0Zm9ybSBiYXNlZCBvbiB0aGUgcGF0aCB0byB0aGlzIHNjcmlwdAorIworRVhFX1BBVEg9YGRpcm5hbWUgJDBgCitpZiBbIC1mICRFWEVfUEFUSC9uc2ItZnVuY3Rpb25zIF07dGhlbgorICAgLiAkRVhFX1BBVEgvbnNiLWZ1bmN0aW9ucworZWxpZiBbIC1mICRIT01FL2Jpbi9uc2ItZnVuY3Rpb25zIF07IHRoZW4KKyAgIC4gJEhPTUUvYmluL25zYi1mdW5jdGlvbnMKK2VsaWYgWyAtZiBuc2ItZnVuY3Rpb25zIF07dGhlbgorICAgLiBuc2ItZnVuY3Rpb25zCitlbHNlCisgICBlY2hvICJDYW5ub3QgZmluZCBuc2ItZnVuY3Rpb25zIGluICRFWEVfUEFUSCwgJEhPTUUvYmluIG9yICRQV0QiCisgICBleGl0IDEKK2ZpCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK25zYl9zeXNuYW1lCmRpZmYgLS1naXQgYS9kaXN0L3BhdG1lIGIvZGlzdC9wYXRtZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wZmQ1MGVlCi0tLSAvZGV2L251bGwKKysrIGIvZGlzdC9wYXRtZQpAQCAtMCwwICsxLDM1MSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBHZXRvcHQ6OkdVSTo6TG9uZzsKK3VzZSBRV2l6YXJkOwordXNlIFFXaXphcmQ6OkFQSTsKK3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgQ3dkOworCit1c2UgR2V0b3B0OjpTdGQ7CitHZXRvcHQ6OkdVSTo6TG9uZzo6Q29uZmlndXJlKHF3KGRpc3BsYXlfaGVscCBub19pZ25vcmVfY2FzZSkpOworCit1c2Ugc3RyaWN0OworCitvdXIgJW9wdHMgPQorKAorICdkJyA9PiAkRU5WeydIT01FJ30gLiAiL3NyYy9zbm1wL3BhdG1lLyIsCisgJ2InID0+ICdtYWluLDUuNiw1LjUsNS40LDUuMycsCisgJ3AnID0+ICctcDAnLAorKTsKKworIyBzZXRzIHRoZSBvcmRlciBzaG93bgorb3VyIEBjb2RldHJlZXMgPSAoJ21haW4nLAorCQkgICc1LjYnLAorCQkgICc1LjUnLAorCQkgICc1LjQnLAorCQkgICc1LjMnLAorCQkgICc1LjInLAorCQkgICc1LjEnLAorCQkgICc1LjAnLAorCQkgICdVQ0QnKTsKKworb3VyICVjb2RldHJlZXMgPSAoJzUuMCcgPT4gJ1Y1LTAtcGF0Y2hlcycsCisJCSAgJzUuMScgPT4gJ1Y1LTEtcGF0Y2hlcycsCisJCSAgJzUuMicgPT4gJ1Y1LTItcGF0Y2hlcycsCisJCSAgJzUuMycgPT4gJ1Y1LTMtcGF0Y2hlcycsCisJCSAgJzUuNCcgPT4gJ1Y1LTQtcGF0Y2hlcycsCisJCSAgJzUuNScgPT4gJ1Y1LTUtcGF0Y2hlcycsCisJCSAgJzUuNicgPT4gJ1Y1LTYtcGF0Y2hlcycsCisJCSAgJ21haW4nID0+ICduZXQtc25tcCcsCisJCSAgJ1VDRCcgPT4gJ1Y0LTItcGF0Y2hlcycpOworCitvdXIgKEBjYXB0dXJlcywgJGNhcGZpbHQsICRyZXN1bHQsICVjYXB0dXJlcywgJGNhcHR1cmVudW0pOworCitHZXRPcHRpb25zKFwlb3B0cywKKwkgICBbJ2Z8ZmlsZT1zJywgICAgICAgICAgICdQYXRjaCBmaWxlJ10sCisJICAgWydkfGJhc2UtZGlyZWN0b3J5PXMnLCAnQmFzZSBkaXJlY3Rvcnkgb2YgY2hlY2tvdXRzJ10sCisJICAgWydwfHBhdGNoLWFyZ3M9cycsICAgICAnRGVmYXVsdCBwYXRjaCBhcmd1bWVudHMgKC1wMSknXSwKKworCSAgIFsnR1VJOnNlcGFyYXRvcicsICAgJ1BhdGNoIGFwcGxpY2F0aW9uIHNwZWNpZmljczsnXSwKKwkgICBbJ2J8YnJhY2hlcz1zJywgICAgICdCcmFuY2hlcyB0byBhcHBseSB0byAoZWcgNS4xLDUuMiwuLi4pJ10sCisJICAgWydtfGNvbW1pdC1tc2c9cycsICAnRGVmYXVsdCBjb21taXQgbWVzc2FnZSB0byB1c2UnXSwKKwkgICBbJ0R8c3ViZGlyPXMnLCAgICAgICdBcHBseSBwYXRjaGVzIHRvIGEgc3ViZGlyZWN0b3J5J10sCisJICAgWyd1fG5vLXVwZGF0ZScsICAgICAnRG8gbm90IHJ1biBzdm4gc3RhdHVzL3VwZGF0ZSBpbiB0aGUgZGlyZWN0b3J5IGZpcnN0LiAgT25seSB1c2UgdGhpcyBpZiBpdFwncyBrbm93biBjbGVhbi4nXSwKKwkgICk7CisKK215ICViczsKK2lmICgkb3B0c3snYid9KSB7CisgICAgbWFwIHsgJGJzeyRffSA9IDE7IH0gc3BsaXQoLyxccyovLCRvcHRzeydiJ30pOyAKK30KKyRvcHRzeydkJ30gLj0gIi8iIGlmICgkb3B0c3snZCd9ICF+IC9cLyQvKTsKKworbXkgJHF3ID0gbmV3IFFXaXphcmQoKTsKK215ICRwcmlzID0gbG9hZF9wcmltYXJpZXMoKTsKKyRxdy0+eydwcmltYXJpZXMnfSA9ICRwcmlzOworCiskcXctPnF3cGFyYW0oJ3N2bmNvbW1pdCcsJG9wdHN7J20nfSkgaWYgKCRvcHRzeydtJ30pOworCiskcXctPm1hZ2ljKCd0b3AnKTsKKworc3ViIG1ha2VfdG9wcyB7CisgICAgbXkgQHRvcHM7CisgICAgZm9yZWFjaCBteSAkayAoQGNvZGV0cmVlcykgeworCXB1c2ggQHRvcHMsIAorCSAgcXdfY2hlY2tib3goJGssICJBcHBseSB0byAkayIsIDEsIDAsIAorCQkgICAgICBkZWZhdWx0ID0+ICRxdy0+cXdwYXJhbSgkaykgfHwgJGJzeyRrfSwKKwkJICAgICAgb3ZlcnJpZGUgPT4gMSk7CisgICAgfQorICAgIHJldHVybiBAdG9wczsKK30KKworc3ViIGxvYWRfcHJpbWFyaWVzIHsKKyAgICBteSBAdG9wcyA9IG1ha2VfdG9wcygpOworICAgIHJldHVybgorICAgICAgeworICAgICAgIHRvcCA9PgorICAgICAgIHF3X3ByaW1hcnkoJ3RvcCcsJ1NlbGVjdCBwYWNrYWdlcyB0byBhcHBseSB0aGUgcGF0Y2ggdG86JywgJycsIAorCQkgIFtAdG9wcywKKwkJICBxd190ZXh0KCdiYXNlZGlyJywgJ0Jhc2UgY29kZSBkaXJlY3Rvcnk6JywgCisJCQkgIGRlZmF1bHQgPT4gJG9wdHN7J2QnfSksCisJCSAgcXdfaGlkZGVuKCdub19jb25maXJtJywxKSwKKwkJICBxd190ZXh0KCdwYXRjaGZpbGUnLCdQYXRjaCBmaWxlOicsIGRlZmF1bHQgPT4gJG9wdHN7Zn0sCisJCQkgY2hlY2tfdmFsdWUgPT4gc3ViIHsgCisJCQkgICAgIHJldHVybiAicGF0Y2ggZmlsZSBkb2Vzbid0IGV4aXN0IiBpZiAoISAtZiBxd3BhcmFtKCdwYXRjaGZpbGUnKSkKKwkJCSB9KSwKKwkJICBxd19jaGVja2JveCgnbm91cGRhdGUnLCdEb25cJ3QgcnVuIHN2biB1cGRhdGUvcmV2ZXJ0IGZpcnN0OicsIAorCQkJICAgICAgMSwgMCwgZGVmYXVsdCA9PiAkb3B0c3sndSd9IHx8IDApXSwKKwkJICBbXSxbXSxzdWJfbW9kdWxlcyA9PiBbJ2NvbW1pdCcsICdjb21taXRtc2cnLCAnbWFrZXRlc3QnLAorCQkJCQknZWRpdCcsICdhcHBseWluZycsICdjaGVjaycsCisJCQkJCSdwYXRjaF9pbmZvJ10pLAorCisgICAgICAgcGF0Y2hfaW5mbyA9PgorICAgICAgIHF3X3ByaW1hcnkoJ2NoZWNrJywnQ2hlY2tpbmcgY29kZSBkaXJlY3Rvcnkgc3RhdHVzOicsICcnLAorCQkgIFtxd19wYXJhZ3JhcGgoJ3BhdGNoIHBpZWNlczonLAorCQkJCXN1YiB7IGNhcHR1cmUoImVncmVwICdeKC0tLXxcXCtcXCtcXCspJyAiIC4gCisJCQkJCSAgICAgIHF3cGFyYW0oJ3BhdGNoZmlsZScpKX0sCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDMwKSwKKwkJICAgcXdfdGV4dCgncGF0Y2hhcmdzJywnUGF0Y2ggYXJndW1lbnRzJywKKwkJCSAgIGRlZmF1bHQgPT4gJG9wdHN7J3AnfSksCisJCSAgIHF3X3RleHQoJ3N1YmRpcicsICdBcHBseSBpbiBwYWNrYWdlIHN1YmRpcjonLAorCQkJICAgZGVmYXVsdCA9PiAkb3B0c3snRCd9KSwKKwkJICAgcXdfcGFyYWdyYXBoKCdOb3RlOicsJ0hpdHRpbmcgbmV4dCBiZWxvdyB3aWxsIGZpcnN0IGNsZWFuIHlvdXIgbG9jYWwgcmVwb3NpdG9yaWVzIHdoaWNoIGNvdWxkIHRha2UgYSBiaXQgKHdhdGNoIHRoZSBjb25zb2xlIGZvciBkZWFpbHMgb24gd2hhdCBpdFwncyBkb2luZyBhdCBhbnkgbW9tZW50KScsIGRvaWYgPT4gc3ViIHshcXdwYXJhbSgnbm91cGRhdGUnKX0pLAorXSksCisKKworICAgICAgIGNoZWNrID0+CisgICAgICAgcXdfcHJpbWFyeSgnY2hlY2snLCdDaGVja2luZyBjb2RlIGRpcmVjdG9yeSBzdGF0dXM6JywgJycsCisJCSAgW3F3X3BhcmFncmFwaCgncmVtb3ZlZCAucmVqIGZpbGVzOicsCisJCQkgICAgICAgc3ViIHsgbXkgJGl0ID0gY2FwdHVyZWVhY2hkaXIoJ2ZpbmQgLiAtbmFtZSBcKi5yZWonKTsKKwkJCQkgICAgIGNhcHR1cmVlYWNoZGlyKCdmaW5kIC4gLW5hbWUgXCoucmVqIHwgeGFyZ3Mgcm0gLWYnKTsKKwkJCQkgICAgIHJldHVybiAkaXQ7CisJCQkJIH0sCisJCQkJcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJd2lkdGggPT4gODAsCisJCQkJaGVpZ2h0ID0+IDYwLAorCQkJICAgICAgICksCisJCSAgIHF3X3BhcmFncmFwaCgnc3ZuIHVwZGF0ZTonLAorCQkJCXN1YiB7CisJCQkJICAgIG15ICgkcmVzLCAkb25lKTsKKwkJCQkgICAgZm9yZWFjaCBteSAkayAoQGNvZGV0cmVlcykgeworCQkJCQluZXh0IGlmICghcXdwYXJhbSgkaykpOworCQkJCQkkcmVzIC49ICIkazpcbiI7CisJCQkJCSRvbmUgPSBjYXB0dXJlZGlyKCRjb2RldHJlZXN7JGt9LCAKKwkJCQkJCQkgICJzdm4gdXBkYXRlIik7CisJCQkJCSRyZXMgLj0gJG9uZTsKKwkJCQkJJG9uZSA9IGNhcHR1cmVkaXIoJGNvZGV0cmVlc3ska30sIAorCQkJCQkJCSAgInN2biByZXZlcnQgLVIgLiIpOworCQkJCQkkcmVzIC49ICRvbmU7CisJCQkJICAgIH0KKwkJCQkgICAgcmV0dXJuICRyZXM7CisJCQkJICB9LAorCQkJCXByZWZvcm1hdHRlZCA9PiAxLAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiA2MCwKKwkJCQlkb2lmID0+IHN1YnshcXdwYXJhbSgnbm91cGRhdGUnKX0KKwkJCSAgICAgICApCQkgIF0sCisJCSApLAorCisgICAgICAgYXBwbHlpbmcgPT4KKyAgICAgICBxd19wcmltYXJ5KCJhcHBseWluZyIsICdBcHBseWluZyBwYXRjaGVzIHRvIHRoZSBjb2RlIGJhc2VzJywgJycsCisJCSAgW3t0eXBlID0+ICd0YWJsZScsCisJCSAgICB0ZXh0ID0+ICdSZXN1bHRzOicsCisJCSAgICB2YWx1ZXMgPT4gc3ViIHsKKwkJCW15IEB0YWI7CisJCQlmb3JlYWNoIG15ICRrIChAY29kZXRyZWVzKSB7CisJCQkgICAgbmV4dCBpZiAoIXF3cGFyYW0oJGspKTsKKwkJCSAgICBwdXNoIEB0YWIsIFskaywKKwkJCQkJcXdfcGFyYWdyYXBoKCJyJGsiLCIiLCAKKwkJCQkJCSAgICAgcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJCQkgICAgIHdpZHRoID0+IDgwLAorCQkJCQkJICAgICBoZWlnaHQgPT4gMjAsCisJCQkJCQkgICAgIHZhbHVlcyA9PiAKKwkJCQkJCSAgICAgc3ViIHsgbXkgJGNtZCA9ICJwYXRjaCAiIC4gcXdwYXJhbSgncGF0Y2hhcmdzJykgLiAiIDwgIiAuIHF3cGFyYW0oJ3BhdGNoZmlsZScpOworCQkJCQkJCSAgIG15ICRyZXN1bHRzID0gIlJ1bm5pbmcgb24gJGs6ICRjbWQiIC4gIlxuIiAuIGNhcHR1cmVkaXIoJGNvZGV0cmVlc3ska30sJGNtZCk7CisJCQkJCQkJICAgcmV0dXJuICRyZXN1bHRzfSldOworCQkJfQorCQkJcmV0dXJuIFtcQHRhYl07CisJCSAgICB9fV0sW10sW10pLAorCisgICAgICAgZWRpdCA9PgorICAgICAgIHF3X3ByaW1hcnkoJ2VkaXQnLCdGaXggdGhlIGZvbGxvd2luZyBmaWxlczonLCcnLAorCQkgIFtxd19wYXJhZ3JhcGgoJ0ZpeCB0aGVzZSAobWF5YmUpOicsCisJCQkgICAgICAgc3ViIHsKKwkJCQkgICAkY2FwZmlsdCA9ICcoLioucmVqKSc7CisJCQkJICAgbXkgJHJlcyA9IAorCQkJCSAgICAgY2FwdHVyZWVhY2hkaXIoJ2ZpbmQgLiAtbmFtZSBcKi5yZWonKTsKKwkJCQkgICBwcmludCBEdW1wZXIoXCVjYXB0dXJlcyk7CisJCQkJICAgJGNhcGZpbHQgPSB1bmRlZjsKKwkJCQkgICByZXR1cm4gJHJlczsKKwkJCQkgfSwKKwkJCQlwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gNjAsCisJCQkgICAgICAgKSwKKwkJICAgcXdfbGFiZWwoJ2ZhaWxlZCBmaWxlczonLAorCQkJICAgIHN1YiB7ICRjYXB0dXJlbnVtID0gMDsKKwkJCQkgIG1hcCB7ICRjYXB0dXJlbnVtICs9ICQjeyRjYXB0dXJlc3skX319ICsgMTsKKwkJCQkgICAgfSAoa2V5cyglY2FwdHVyZXMpKTsKKwkJCQkgIHJldHVybiAkY2FwdHVyZW51bTsKKwkJCSAgICAgIH0pLAorCQkgIHF3X2NoZWNrYm94KCdlZGl0aGVtJywnT3BlbiBhbiBlZGl0b3Igb24gdGhlIGZhaWxlZCBmaWxlcz8nLAorCQkJICAgICAgMSwgMCwgZG9pZiA9PiBzdWIgeyByZXR1cm4gJGNhcHR1cmVudW0gPiAwIH0pLAorCQkgIHF3X3RleHQoJ2VkaXRvcicsJ0VkaXRvcjonLGRlZmF1bHQgPT4gJEVOVnsnRURJVE9SJ30gfHwgJ3ZpJywKKwkJCSAgZG9pZiA9PiBzdWIgeyByZXR1cm4gJGNhcHR1cmVudW0gPiAwIH0pXSwKKwkJICBbc3ViIHsKKwkJICAgICAgIGlmIChxd3BhcmFtKCdlZGl0aGVtJykpIHsKKwkJCSAgIGZvcmVhY2ggbXkgJGsgKGtleXMoJWNhcHR1cmVzKSkgeworCQkJICAgICAgIGZvcmVhY2ggbXkgJGYgKEB7JGNhcHR1cmVzeyRrfX0pIHsKKwkJCQkgICBteSAkZmlsZSA9IHF3cGFyYW0oJ2Jhc2VkaXInKSAuCisJCQkJICAgICAkY29kZXRyZWVzeyRrfSAuCisJCQkJICAgICAgIHF3cGFyYW0oJ3N1YmRpcicpIC4gJy8nIC4gJGYtPlswXTsKKwkJCQkgICBwcmludCBTVERFUlIgImVkaXRpbmc6ICRmaWxlXG4iOworCQkJCSAgIHN5c3RlbShxd3BhcmFtKCdlZGl0b3InKSAuICIgIiAuICRmaWxlKTsKKwkJCSAgICAgICB9CisJCQkgICB9CisJCSAgICAgICB9CisJCSAgIH1dCisJCSApLAorCisgICAgICAgbWFrZXRlc3QgPT4KKyAgICAgICBxd19wcmltYXJ5KCJtYWtldGVzdCIsICJSdW4gbWFrZT8iLCcnLAorCQkgW3F3X2NoZWNrYm94KCdtYWtlaXQnLCdSdW4gbWFrZT8nLCAxLCAwKSwKKwkJICBxd19jaGVja2JveCgnbWFrZXRlc3QnLCAnUnVuIG1ha2UgdGVzdD8nLCAxLCAwKQorCQkgXSwKKyAJCSBbc3ViIHsKKyAJCSAgICAgIGlmIChxd3BhcmFtKCdtYWtlaXQnKSB8fCBxd3BhcmFtKCdtYWtldGVzdCcpKSB7CisgCQkJICAkX1swXS0+YWRkX3RvZG9zKC1lYXJseSwgJ2RvbWFrZScpOworIAkJICAgICAgfQorIAkJICB9XQorCQkgKSwKKworICAgICAgIGRvbWFrZSA9PgorICAgICAgIHF3X3ByaW1hcnkoImRvbWFrZSIsICJNYWtlIHJlc3VsdHMiLCcnLAorCQkgIFtxd19wYXJhZ3JhcGgoJ01ha2UgcmVzdWx0czonLAorCQkJCXN1YiB7IHJldHVybiBjYXB0dXJlZWFjaGRpcignbWFrZScpOyB9LAorCQkJCXByZWZvcm1hdHRlZCA9PiAxLAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiAyMCwKKwkJCQlkb2lmID0+IHN1YiB7IHF3cGFyYW0oJ21ha2VpdCcpIH0KKwkJCSAgICAgICApLAorCQkgICBxd19wYXJhZ3JhcGgoJ01ha2UgdGVzdCByZXN1bHRzOicsCisJCQkJc3ViIHsgcmV0dXJuIGNhcHR1cmVlYWNoZGlyKCdtYWtlIHRlc3QnKTsgfSwKKwkJCQlwcmVmb3JtYXR0ZWQgPT4gMSwKKwkJCQl3aWR0aCA9PiA4MCwKKwkJCQloZWlnaHQgPT4gMjAsCisJCQkJZG9pZiA9PiBzdWIgeyBxd3BhcmFtKCdtYWtldGVzdCcpIH0KKwkJCSAgICAgICApXQorCQkgICksCisKKyAgICAgICBjb21taXRtc2cgPT4KKyAgICAgICBxd19wcmltYXJ5KCJjb21taXRtc2ciLCAnQ29tbWl0IGluZm86JywgJycsCisJCSAgW3F3X3RleHQoJ3N2bmNvbW1pdCcsJ0NvbW1pdCBtZXNzYWdlJywKKwkJCSAgIGRlZmF1bHQgPT4gcXdwYXJhbSgnc3ZuY29tbWl0JykgfHwgJG9wdHN7J20nfSksCisJCSAge3R5cGUgPT4gJ2R5bmFtaWMnLAorCQkgICB2YWx1ZXMgPT4gc3ViIHsgbXkgQHRvcHMgPSBtYWtlX3RvcHMoMSk7IHJldHVybiBcQHRvcHN9fV0pLAorCisgICAgICAgY29tbWl0ID0+CisgICAgICAgcXdfcHJpbWFyeSgiY29tbWl0IiwgJ3J1bm5pbmcgY29tbWl0OicsICcnLAorCQkgIFtxd19wYXJhZ3JhcGgoJ2NvbW1pdHRpbmcgZmlsZXM6JywKKwkJCSAgICAgICBzdWIgeyBteSAkbXNnID0gcXdwYXJhbSgnc3ZuY29tbWl0Jyk7CisJCQkJICAgICAkbXNnID1+IHMvXCcvXCdcIlwnXCJcJy9nOyAjIGVzY2FwZSAncworCQkJCSAgICAgcmV0dXJuIGNhcHR1cmVkaXIoJG9wdHN7J2QnfSwKKwkJCQkJCSAgICAgICAnc3ZuIGNvbW1pdCAtbSBcJycgLiAkbXNnIC4gJ1wnICcgLiBnZXRfY29kZWRpcnNfc3RyKCkpOyB9LAorCQkJCXByZWZvcm1hdHRlZCA9PiAxLAorCQkJCXdpZHRoID0+IDgwLAorCQkJCWhlaWdodCA9PiAyMCwKKwkJCSAgICAgICApXSksCisKKyAgICAgICBlZGl0aW5nID0+CisgICAgICAgcXdfcHJpbWFyeSgiYXBwbHlpbmciLCAnRWRpdCB0aGUgZm9sbG93aW5nIGZpbGVzOicsICcnLAorCQkgIFt7dHlwZSA9PiAndGFibGUnLAorCQkgICAgdGV4dCA9PiAnUmVzdWx0czonLAorCQkgICAgdmFsdWVzID0+IHN1YiB7IHJldHVybiBbXEBjYXB0dXJlc119LAorCQkgICB9XSxbXSxbXSkKKyAgICAgIH0KK30KKworc3ViIGNhcHR1cmUgeworICAgIG15ICRjbWQgPSBqb2luKCIgIixAXyk7CisgICAgbXkgJHJlc3VsdHMgPSAiUnVubmluZzogJGNtZFxuIjsKKyAgICBteSBAYTsKKyAgICBwcmludCAkcmVzdWx0czsKKyAgICBvcGVuKEksIiRjbWQgMj4mMXwiKTsKKyAgICB3aGlsZSAoPEk+KSB7CisJJHJlc3VsdHMgLj0gJF87CisJcHJpbnQgJF87CisJaWYgKCRjYXBmaWx0KSB7CisJICAgIHByaW50ICJjYXBmaWx0OiAkY2FwZmlsdFxuIjsKKwkgICAgQGEgPSAvJGNhcGZpbHQvOworCSAgICBwcmludCAiICBjYXBmaWx0OiBAYVxuIjsKKwkgICAgcHVzaCBAY2FwdHVyZXMsIFtAYV07CisJfQorICAgIH0KKyAgICBjbG9zZShJKTsKKyAgICAkcmVzdWx0ID0gJD8gPj4gODsKKyAgICAkcmVzdWx0cyAuPSAiUkVTVUxUOiAiIC4gKCgkcmVzdWx0KSA/ICJGQUlMIiA6ICJTVUNDRVNTIikgLiAiKCRyZXN1bHQpXG4iOworICAgIHJldHVybiAkcmVzdWx0czsKK30KKworc3ViIGNhcHR1cmVkaXIgeworICAgIG15ICRkaXIgPSBzaGlmdDsKKyAgICAkZGlyIC49ICIvIiBpZiAoJGRpciAhfiAvXC8kLyk7CisgICAgbXkgJGJhc2VkaXIgPSBxd3BhcmFtKCdiYXNlZGlyJyk7CisgICAgJGJhc2VkaXIgLj0gIi8iIGlmICgkYmFzZWRpciAhfiAvXC8kLyk7CisgICAgbXkgJG9sZGRpciA9IGdldGN3ZCgpOworICAgIG15ICRuZXdkaXIgPSAiJGJhc2VkaXIkZGlyIiAuIHF3cGFyYW0oJ3N1YmRpcicpOworICAgIG15ICRyZXMgPSAiY2hhbmdpbmcgdG86ICRuZXdkaXJcbiI7CisgICAgcHJpbnQgJHJlczsKKyAgICBjaGRpcigkbmV3ZGlyKTsKKyAgICAkcmVzIC49IGNhcHR1cmUoQF8pOworICAgIGNoZGlyKCRvbGRkaXIpOworICAgIHJldHVybiAkcmVzOworfQorCitzdWIgZ2V0X2NvZGVkaXJzX3N0cigpIHsKKyAgICBteSAkcmVzID0gIiI7CisgICAgZm9yZWFjaCBteSAkayAoQGNvZGV0cmVlcykgeworCW5leHQgaWYgKCFxd3BhcmFtKCRrKSk7CisJJHJlcyAuPSAiICRvcHRzeydkJ30kY29kZXRyZWVzeyRrfSI7CisgICAgfQorICAgICRyZXMgPX4gcy9eIC8vOworICAgIHJldHVybiAkcmVzOworfQorCitzdWIgY2FwdHVyZWVhY2hkaXIgeworICAgIG15ICRvdXQ7CisgICAgJWNhcHR1cmVzID0gKCk7CisgICAgZm9yZWFjaCBteSAkayAoQGNvZGV0cmVlcykgeworCW5leHQgaWYgKCFxd3BhcmFtKCRrKSk7CisJJG91dCAuPSAiJGs6XG4iOworCSRvdXQgLj0gY2FwdHVyZWRpcigkY29kZXRyZWVzeyRrfSwgQF8pIC4gIlxuIjsKKwlpZiAoJCNjYXB0dXJlcyA+IC0xKSB7CisJICAgIEB7JGNhcHR1cmVzeyRrfX0gPSBAY2FwdHVyZXM7CisJICAgIEBjYXB0dXJlcyA9ICgpOworCX0KKyAgICB9CisgICAgcmV0dXJuICRvdXQ7Cit9CisKK3N1YiBkb2RpciB7CisgICAgbXkgJHRleHQgPSBzaGlmdDsKKyAgICByZXR1cm4KKyAgICAgIFt7dHlwZSA9PiAndGFibGUnLAorCXRleHQgPT4gJHRleHQsCisJdmFsdWVzID0+IFtbc3ViIHsKKwkJCW15IEB0YWI7CisJCQlmb3JlYWNoIG15ICRrIChAY29kZXRyZWVzKSB7CisJCQkgICAgbmV4dCBpZiAoIXF3cGFyYW0oJGspKTsKKwkJCSAgICBwdXNoIEB0YWIsIFskaywKKwkJCQkJcXdfcGFyYWdyYXBoKCJyJGsiLCIiLCAKKwkJCQkJCSAgICAgcHJlZm9ybWF0dGVkID0+IDEsCisJCQkJCQkgICAgIHdpZHRoID0+IDgwLAorCQkJCQkJICAgICBoZWlnaHQgPT4gMjAsCisJCQkJCQkgICAgIHZhbHVlcyA9PiAKKwkJCQkJCSAgICAgW1tzdWIgeyAkXy0+WzBdKCRrKX0sIAorCQkJCQkJICAgICAgIEBfXV0pXTsKKwkJCX0KKwkJCXJldHVybiBbXEB0YWJdOworCQkgICAgfSwgQF9dXQorICAgICAgIH1dOworfQpkaWZmIC0tZ2l0IGEvZGlzdC9zY2hlbWEtc25tcHRyYXBkLnNxbCBiL2Rpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5NmYxNwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3Qvc2NoZW1hLXNubXB0cmFwZC5zcWwKQEAgLTAsMCArMSwzMSBAQAorVVNFIG5ldF9zbm1wOworRFJPUCBUQUJMRSBJRiBFWElTVFMgbm90aWZpY2F0aW9uczsKK0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIGBub3RpZmljYXRpb25zYCAoCisgIGB0cmFwX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIEFVVE9fSU5DUkVNRU5ULAorICBgZGF0ZV90aW1lYCBkYXRldGltZSBOT1QgTlVMTCwKKyAgYGhvc3RgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwKKyAgYGF1dGhgIHZhcmNoYXIoMjU1KSBOT1QgTlVMTCwKKyAgYHR5cGVgIEVOVU0oJ2dldCcsJ2dldG5leHQnLCdyZXNwb25zZScsJ3NldCcsJ3RyYXAnLCdnZXRidWxrJywnaW5mb3JtJywndHJhcDInLCdyZXBvcnQnKSBOT1QgTlVMTCwKKyAgYHZlcnNpb25gIEVOVU0oJ3YxJywndjJjJywgJ3Vuc3VwcG9ydGVkKHYydSknLCd2MycpIE5PVCBOVUxMLAorICBgcmVxdWVzdF9pZGAgaW50KDExKSB1bnNpZ25lZCBOT1QgTlVMTCwKKyAgYHNubXBUcmFwT0lEYCB2YXJjaGFyKDEwMjQpIE5PVCBOVUxMLAorICBgdHJhbnNwb3J0YCB2YXJjaGFyKDI1NSkgTk9UIE5VTEwsCisgIGBzZWN1cml0eV9tb2RlbGAgRU5VTSgnc25tcFYxJywnc25tcFYyYycsJ1VTTScpIE5PVCBOVUxMLAorICBgdjNtc2dpZGAgaW50KDExKSB1bnNpZ25lZCwKKyAgYHYzc2VjdXJpdHlfbGV2ZWxgIEVOVU0oJ25vQXV0aE5vUHJpdicsJ2F1dGhOb1ByaXYnLCdhdXRoUHJpdicpLAorICBgdjNjb250ZXh0X25hbWVgIHZhcmNoYXIoMzIpLAorICBgdjNjb250ZXh0X2VuZ2luZWAgdmFyY2hhcig2NCksCisgIGB2M3NlY3VyaXR5X25hbWVgIHZhcmNoYXIoMzIpLAorICBgdjNzZWN1cml0eV9lbmdpbmVgIHZhcmNoYXIoNjQpLAorICBQUklNQVJZIEtFWSAgKGB0cmFwX2lkYCkKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOworCisKK0RST1AgVEFCTEUgSUYgRVhJU1RTIHZhcmJpbmRzOworQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMgYHZhcmJpbmRzYCAoCisgIGB0cmFwX2lkYCBpbnQoMTEpIHVuc2lnbmVkIE5PVCBOVUxMIGRlZmF1bHQgJzAnLAorICBgb2lkYCB2YXJjaGFyKDEwMjQpIE5PVCBOVUxMLAorICBgdHlwZWAgRU5VTSgnYm9vbGVhbicsJ2ludGVnZXInLCdiaXQnLCdvY3RldCcsJ251bGwnLCdvaWQnLCdpcGFkZHJlc3MnLCdjb3VudGVyJywndW5zaWduZWQnLCd0aW1ldGlja3MnLCdvcGFxdWUnLCd1bnVzZWQxJywnY291bnRlcjY0JywndW51c2VkMicpIE5PVCBOVUxMLAorICBgdmFsdWVgIGJsb2IgTk9UIE5VTEwsCisgIEtFWSBgdHJhcF9pZGAgKGB0cmFwX2lkYCkKKykgRU5HSU5FPUlubm9EQiBERUZBVUxUIENIQVJTRVQ9bGF0aW4xOwpkaWZmIC0tZ2l0IGEvZGlzdC9zdm51cCBiL2Rpc3Qvc3ZudXAKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDAzNTNmMAotLS0gL2Rldi9udWxsCisrKyBiL2Rpc3Qvc3ZudXAKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9zaAorIworIyAkSWQ6IGN2c3VwIDE1Nzg4IDIwMDctMDEtMjQgMTM6NDk6MzhaIGR0czEyICQKKyMKK1RBRz0KK1dPPTAKK0RFU1Q9CitUTVBESVI9L3RtcAorCitpZiBbICJ4JDEiID0gIngtdSIgXTsgdGhlbgorICAgIERFU1Q9JDIKKyAgICBzaGlmdCAyCisKKyAgICAjIGdudSB0YXIgKGFzIG9mIDEuMTUuMSkgaXMgdW5hYmxlIHRvIGNyZWF0ZSBwb3J0YWJsZSB0YXIgYXJjaGl2ZXMsIAorICAgICMgZXNwZWNpYWxseSBpZiBsb25nIGZpbGUgbmFtZXMgKD4xMDAgY2hhcikgYXJlIHByZXNlbnQuCisgICAgIyBzdGFyIGlzIGEgYmV0dGVyIHJlcGxhY2VtZW50LgorICAgIGlmIFsgLXggL3Vzci9iaW4vc3RhciBdOyB0aGVuCisgICAgICAgIFRBUj0nL3Vzci9iaW4vc3RhciAtSHVzdGFyIC1ub3QgLXBhdD0qLy5zdm4vKiAtYyAtZicKKyAgICBlbGlmIFsgLXggL2Jpbi90YXIgXTsgdGhlbgorICAgICAgICBUQVI9Ii9iaW4vdGFyIC0tZXhjbHVkZT0uc3ZuIC1jIC1mIgorICAgICAgICBlY2hvICJ3YXJuaW5nOiBzdGFyIG5vdCBhdmFpbGFibGUsIHVzaW5nIChsZXNzIHBvcnRhYmxlKSB0YXIuLi4iCisgICAgZWxzZQorICAgICAgICBlY2hvICJuZWl0aGVyIC91c3IvYmluL3N0YXIgbm9yIC9iaW4vdGFyIGZvdW5kLiIKKyAgICAgICAgZXhpdAorICAgIGZpCitmaQorCitpZiBbICQjIC1lcSAwIF07IHRoZW4KKyAgICBESVI9JFBXRAorZWxzZQorICAgIGlmIFsgJCMgLW5lIDEgXTsgdGhlbgorICAgICAgICBlY2hvICJ1c2FnZTogJDAgPHdvcmtpbmcgZGlyZWN0b3J5PiIKKyAgICAgICAgZXhpdAorICAgIGZpCisgICAgRElSPSQxCitmaQorCitpZiBbIC16ICR7RElSIyMqL30gXTt0aGVuCisgICBESVI9JHtESVIlLyp9CitmaQorU1VCRD0ke0RJUiMjKi99CitQQVJFTlQ9JHtESVIlKiRTVUJEfQorI2VjaG8gIiRESVIgPSAkUEFSRU5UICsgJFNVQkQiCisKK2lmIFsgISAtZCAkRElSIF07IHRoZW4KKyAgICBlY2hvICJubyBzdWNoIGRpcmVjdG9yeSAnJERJUiciCisgICAgZXhpdAorZmkKKworaWYgWyAhIC1kICRESVIvLnN2biBdOyB0aGVuCisgICAgZWNobyAiJyRESVInIGhhcyBubyAuc3ZuIGRpcmVjdG9yeSEiCisgICAgZXhpdAorZmkKKworaWYgWyAhIC1mICRESVIvLnN2bi9lbnRyaWVzIF07IHRoZW4KKyAgICBlY2hvICInJERJUicgaGFzIG5vIC5zdm4vZW50cmllcyEiCisgICAgZXhpdAorZmkKKworU1ZOVVJMPWBzdm4gaW5mbyAkRElSfCBncmVwIFVSTHxjdXQgLWYyIC1kICIgImAKK1NWTlRMRD1gZWNobyAkU1ZOVVJMIHwgc2VkICdzOi4qc3Zucm9vdC9uZXQtc25tcC9cKFteL10qXCkuKjpcMTonYAoraWYgWyAieCRTVk5UTEQiID0gInh0cnVuayIgXTsgdGhlbgorICAgVEFHPSJtYWluIgorZWxzZQorICAgVEFHPWBlY2hvICRTVk5VUkwgfCBzZWQgJ3M6Lipzdm5yb290L25ldC1zbm1wL1teL10qL1woW14vXSpcKS4qOlwxOidgCitmaQorCitpZiBbICEgLXogJERFU1QgXTsgdGhlbgorICAgIGlmIFsgLXogJFRBRyBdOyB0aGVuCisgICAgICAgIGVjaG8gIm5vIFRBRyBmb3VuZCBpbiAkRElSISIKKyAgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKK0NPTU1BTkQ9InN2biB1cGRhdGUgLXEgJFNWTlVSTCAkRElSIgorCitpZiBbICEgLXcgJERJUi8uc3ZuIF07IHRoZW4KKyAgICBpZiBbIC1PICRESVIvLnN2biBdOyB0aGVuCisgICAgICAgIFdPPTEKKyAgICAgICAgZWNobyAiTWFraW5nICRESVIgd3JpdGFibGUiCisgICAgICAgIGNobW9kIC1SIHUrdyAkRElSCisgICAgZmkKK2ZpCisKK2VjaG8gIlVwZGF0aW5nIGRpcmVjdG9yeSAkRElSIGZyb20gJFRBRy4uLiIKK2VjaG8gIiRDT01NQU5EIgorCiskQ09NTUFORAorcmM9JD8KK2lmIFsgJHJjIC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJzdm4gY29tbWFuZCByZXR1cm5lZCAkPyIKK2ZpCisKK2lmIFsgJFdPIC1lcSAxIF07IHRoZW4KKyAgICBlY2hvICJNYWtpbmcgJERJUiByZWFkLW9ubHkiCisgICAgY2htb2QgLVIgYS13ICRESVIKK2ZpCisKK2lmIFsgISAteiAkREVTVCBdOyB0aGVuCisgIGlmIFsgJHJjIC1uZSAwIF07IHRoZW4KKyAgICBlY2hvICJza2lwcGluZyB1cGxvYWQgZHVlIHRvIHJjICRyYyBmcm9tIHN2biBjb21tYW5kIgorICAgIGV4aXQgJHJjCisgIGVsc2UKKyAgICBjZCAkRElSLy4uCisgICAgI2VjaG8gJFBXRAorICAgIERBVEU9YGRhdGUgKyVZJW0lZF8lSCVNYAorICAgIFNPVVJDRT1uZXQtc25tcC1zdm4tJFRBRyJfJERBVEUiCisgICAgJFRBUiAkVE1QRElSLyRTT1VSQ0UudGFyICRTVUJECisgICAgcmM9JD8KKyAgICBpZiBbICRyYyAtbmUgMCBdOyB0aGVuCisgICAgICBlY2hvICJza2lwcGluZyB1cGxvYWQgZHVlIHRvIHJjICRyYyBmcm9tIHRhciBjb21tYW5kIgorICAgICAgcm0gLWYgJFRNUERJUi8kU09VUkNFLnRhci5negorICAgICAgZXhpdCAkcmMKKyAgICBmaQorICAgIGd6aXAgLWYgLS1iZXN0ICRUTVBESVIvJFNPVVJDRS50YXIKKyAgICByYz0kPworICAgIGlmIFsgJHJjIC1uZSAwIF07IHRoZW4KKyAgICAgIGVjaG8gInNraXBwaW5nIHVwbG9hZCBkdWUgdG8gcmMgJHJjIGZyb20gZ3ppcCBjb21tYW5kIgorICAgICAgcm0gLWYgJFRNUERJUi8kU09VUkNFLnRhci5negorICAgICAgZXhpdCAkcmMKKyAgICBmaQorICAgIHNjcCAkVE1QRElSLyRTT1VSQ0UudGFyLmd6ICRERVNUCisgICAgcmM9JD8KKyAgICBpZiBbICRyYyAtbmUgMCBdOyB0aGVuCisgICAgICBlY2hvICJ3YXJuaW5nOiByYyAkcmMgZnJvbSBzY3AgY29tbWFuZCAodGFyYmFsbCBpbiAkVE1QRElSKSIKKyAgICBlbHNlCisgICAgICBybSAtZiAkVE1QRElSLyRTT1VSQ0UudGFyLmd6CisgICAgZmkKKyAgZmkKK2ZpCmRpZmYgLS1naXQgYS9kb3h5Z2VuLmNvbmYgYi9kb3h5Z2VuLmNvbmYKaW5kZXggOWUwZWY0NS4uMjBlNDU3ZCAxMDA2NDQKLS0tIGEvZG94eWdlbi5jb25mCisrKyBiL2RveHlnZW4uY29uZgpAQCAtMjMsNyArMjMsNyBAQAogIyBUaGlzIGNvdWxkIGJlIGhhbmR5IGZvciBhcmNoaXZpbmcgdGhlIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uIG9yIAogIyBpZiBzb21lIHZlcnNpb24gY29udHJvbCBzeXN0ZW0gaXMgdXNlZC4KIAotUFJPSkVDVF9OVU1CRVIgICAgICAgICA9IDUuNC4zLnByZTEKK1BST0pFQ1RfTlVNQkVSICAgICAgICAgPSAkKFZFUlNJT04pCiAKICMgVGhlIE9VVFBVVF9ESVJFQ1RPUlkgdGFnIGlzIHVzZWQgdG8gc3BlY2lmeSB0aGUgKHJlbGF0aXZlIG9yIGFic29sdXRlKSAKICMgYmFzZSBwYXRoIHdoZXJlIHRoZSBnZW5lcmF0ZWQgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIHB1dC4gCkBAIC01ODUsNyArNTg1LDcgQEAKICMgSWYgdGhlIEdFTkVSQVRFX01BTiB0YWcgaXMgc2V0IHRvIFlFUyAodGhlIGRlZmF1bHQpIERveHlnZW4gd2lsbCAKICMgZ2VuZXJhdGUgbWFuIHBhZ2VzCiAKLUdFTkVSQVRFX01BTiAgICAgICAgICAgPSBZRVMKK0dFTkVSQVRFX01BTiAgICAgICAgICAgPSBOTwogCiAjIFRoZSBNQU5fT1VUUFVUIHRhZyBpcyB1c2VkIHRvIHNwZWNpZnkgd2hlcmUgdGhlIG1hbiBwYWdlcyB3aWxsIGJlIHB1dC4gCiAjIElmIGEgcmVsYXRpdmUgcGF0aCBpcyBlbnRlcmVkIHRoZSB2YWx1ZSBvZiBPVVRQVVRfRElSRUNUT1JZIHdpbGwgYmUgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X2hhbmRsZXIuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCmluZGV4IDY5MTUxYTguLmVjOTMwZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfaGFuZGxlci5oCkBAIC02MSw2ICs2MSwxNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF9yZXF1ZXN0X2luZm9fcyAqKTsKKyAgICAgICAgLyoqIGRhdGEgY2xvbmUgaG9vayBmb3IgbXl2b2lkCisgICAgICAgICAqICBkZWVwIGNvcHkgdGhlIG15dm9pZCBtZW1iZXIgLSBkZWZhdWx0IGlzIHRvIGNvcHkgdGhlIHBvaW50ZXIKKyAgICAgICAgICogIFRoaXMgbWV0aG9kIGlzIG9ubHkgY2FsbGVkIGlmIG15dm9pZCAhPSBOVUxMCisgICAgICAgICAqICBteXZvaWQgaXMgdGhlIGN1cnJlbnQgbXl2b2lkIHBvaW50ZXIuCisgICAgICAgICAqICByZXR1cm5zIE5VTEwgb24gZmFpbHVyZQorICAgICAgICAgKi8KKyAgICAgICAgdm9pZCAqKCpkYXRhX2Nsb25lKSh2b2lkICpteXZvaWQpOworICAgICAgICAvKiogZGF0YSBmcmVlIGhvb2sgZm9yIG15dm9pZAorICAgICAgICAgKiAgZGVsZXRlIHRoZSBteXZvaWQgbWVtYmVyIC0gZGVmYXVsdCBpcyB0byBkbyBub3RoaW5nCisgICAgICAgICAqICBUaGlzIG1ldGhvZCBpcyBvbmx5IGNhbGxlZCBpZiBteXZvaWQgIT0gTlVMTAorICAgICAgICAgKi8KICAgICAgICAgdm9pZCAoKmRhdGFfZnJlZSkodm9pZCAqbXl2b2lkKTsgLyoqPCBkYXRhIGZyZWUgaG9vayBmb3IgbXl2b2lkICovCiAKICAgICAgICAgc3RydWN0IG5ldHNubXBfbWliX2hhbmRsZXJfcyAqbmV4dDsKQEAgLTIwNywxMiArMjE4LDEzIEBACiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqCiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG1vZGVzKTsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICoKICAgICBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbihjb25zdCBjaGFyICpuYW1lLCBOZXRzbm1wX05vZGVfSGFuZGxlcioKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVyX2FjY2Vzc19tZXRob2QsIG9pZCAqcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCBtb2Rlcyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9hY2Nlc3NfbWV0aG9kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBtb2Rlcyk7CiAKICAgICBuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZQogICAgICAgICAqbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlKG5ldHNubXBfbWliX2hhbmRsZXIgKiwKQEAgLTIzMSw2ICsyNDMsOCBAQAogICAgIHZvaWQKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKTsKKyAgICBpbnQgbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGEobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOwogCiAgICAgaW50CiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9yZW1vdmVfbGlzdF9kYXRhKG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWFkX2NvbmZpZy5oCmluZGV4IGU5YWY4OWQuLmU2YjM1NDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVhZF9jb25maWcuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlYWRfY29uZmlnLmgKQEAgLTExLDEyICsxMSwxNyBAQAogCiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfYWdlbnRfcmVhZF9jb25maWcoY29uc3QgY2hhciAqKTsKICAgICB2b2lkICAgICAgICAgICAgdXBkYXRlX2NvbmZpZyh2b2lkKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcGRfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqLAorICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGVscCk7CisgICAgdm9pZCAgICAgICAgICAgIHNubXBkX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICopOwogICAgIHZvaWQgICAgICAgICAgICBzbm1wZF9zdG9yZV9jb25maWcoY29uc3QgY2hhciAqKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9yZWdpc3RyeS5oCmluZGV4IGU5ZTI4NDUuLjI5NDljOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWdlbnRfcmVnaXN0cnkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3JlZ2lzdHJ5LmgKQEAgLTM1LDE4ICszNSwyMCBAQAogfTsKIAogc3RydWN0IHJlZ2lzdGVyX3BhcmFtZXRlcnMgewotICAgIG9pZCAgICAgICAgICAgICpuYW1lOwotICAgIHNpemVfdCAgICAgICAgICBuYW1lbGVuOwotICAgIGludCAgICAgICAgICAgICBwcmlvcml0eTsKLSAgICBpbnQgICAgICAgICAgICAgcmFuZ2Vfc3ViaWQ7Ci0gICAgb2lkICAgICAgICAgICAgIHJhbmdlX3Vib3VuZDsKLSAgICBpbnQgICAgICAgICAgICAgdGltZW91dDsKLSAgICB1X2NoYXIgICAgICAgICAgZmxhZ3M7Ci0gICAgY29uc3QgY2hhciAgICAgKmNvbnRleHROYW1lOworICAgIG9pZCAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWU7CisgICAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICAgICAgbmFtZWxlbjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmlvcml0eTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV9zdWJpZDsKKyAgICBvaWQgICAgICAgICAgICAgICAgICAgICAgICAgICByYW5nZV91Ym91bmQ7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZW91dDsKKyAgICB1X2NoYXIgICAgICAgICAgICAgICAgICAgICAgICBmbGFnczsKKyAgICBjb25zdCBjaGFyICAgICAgICAgICAgICAgICAgICpjb250ZXh0TmFtZTsKKyAgICBuZXRzbm1wX3Nlc3Npb24gICAgICAgICAgICAgICpzZXNzaW9uOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm87CiB9OwogCiB0eXBlZGVmIHN0cnVjdCBzdWJ0cmVlX2NvbnRleHRfY2FjaGVfcyB7Ci0gICAgY2hhcgkJCQkqY29udGV4dF9uYW1lOworICAgIGNvbnN0IGNoYXIJCQkJKmNvbnRleHRfbmFtZTsKICAgICBzdHJ1Y3QgbmV0c25tcF9zdWJ0cmVlX3MJCSpmaXJzdF9zdWJ0cmVlOwogICAgIHN0cnVjdCBzdWJ0cmVlX2NvbnRleHRfY2FjaGVfcwkqbmV4dDsKIH0gc3VidHJlZV9jb250ZXh0X2NhY2hlOwpAQCAtNTcsMTggKzU5LDIxIEBACiB2b2lkICAgICAgICAgICAgIHNodXRkb3duX3RyZWUgICAgKHZvaWQpOwogCiAKLW5ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmQJICAob2lkICosIHNpemVfdCwgbmV0c25tcF9zdWJ0cmVlICosCituZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kCSAgKGNvbnN0IG9pZCAqLCBzaXplX3QsCisJCQkJCSAgIG5ldHNubXBfc3VidHJlZSAqLAogCQkJCQkgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpOwogCi1uZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kX25leHQob2lkICosIHNpemVfdCwgbmV0c25tcF9zdWJ0cmVlICosCituZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kX25leHQoY29uc3Qgb2lkICosIHNpemVfdCwKKwkJCQkJICAgbmV0c25tcF9zdWJ0cmVlICosCiAJCQkJCSAgIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSk7CiAKLW5ldHNubXBfc3VidHJlZSAqbmV0c25tcF9zdWJ0cmVlX2ZpbmRfcHJldihvaWQgKiwgc2l6ZV90LG5ldHNubXBfc3VidHJlZSAqLAorbmV0c25tcF9zdWJ0cmVlICpuZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2KGNvbnN0IG9pZCAqLCBzaXplX3QsCisJCQkJCSAgIG5ldHNubXBfc3VidHJlZSAqLAogCQkJCQkgICBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpOwogCiBuZXRzbm1wX3N1YnRyZWUgKm5ldHNubXBfc3VidHJlZV9maW5kX2ZpcnN0KGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSk7CiAKLW5ldHNubXBfc2Vzc2lvbiAqZ2V0X3Nlc3Npb25fZm9yX29pZAkgICAob2lkICosIHNpemVfdCwgCituZXRzbm1wX3Nlc3Npb24gKmdldF9zZXNzaW9uX2Zvcl9vaWQJICAgKGNvbnN0IG9pZCAqLCBzaXplX3QsIAogCQkJCQkgICAgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKTsKIAogc3VidHJlZV9jb250ZXh0X2NhY2hlICpnZXRfdG9wX2NvbnRleHRfY2FjaGUodm9pZCk7CkBAIC04NCwyNSArODksMzIgQEAKICNkZWZpbmUgTUlCX1VOUkVHSVNUUkFUSU9OX0ZBSUxFRAktMgogI2RlZmluZSBERUZBVUxUX01JQl9QUklPUklUWQkJMTI3CiAKLWludCAgICAgICAgICAgICByZWdpc3Rlcl9taWIJCSAgIChjb25zdCBjaGFyICosIHN0cnVjdCB2YXJpYWJsZSAqLAotCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIG9pZCAqLCBzaXplX3QpOworaW50ICAgICAgICAgICAgIHJlZ2lzdGVyX21pYgkJICAgKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICosCisJCQkJCSAgICBzaXplX3QsIHNpemVfdCwgY29uc3Qgb2lkICosCisJCQkJCSAgICBzaXplX3QpOwogCi1pbnQgICAgICAgICAgICAgcmVnaXN0ZXJfbWliX3ByaW9yaXR5CSAgIChjb25zdCBjaGFyICosIHN0cnVjdCB2YXJpYWJsZSAqLAotCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIG9pZCAqLCBzaXplX3QsCitpbnQgICAgICAgICAgICAgcmVnaXN0ZXJfbWliX3ByaW9yaXR5CSAgIChjb25zdCBjaGFyICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqLAorCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIGNvbnN0IG9pZCAqLCBzaXplX3QsCiAJCQkJCSAgICBpbnQpOwogCi1pbnQgICAgICAgICAgICAgcmVnaXN0ZXJfbWliX3JhbmdlCSAgIChjb25zdCBjaGFyICosIHN0cnVjdCB2YXJpYWJsZSAqLAotCQkJCQkgICAgc2l6ZV90LCBzaXplX3QsIG9pZCAqLCBzaXplX3QsIAotCQkJCQkgICAgaW50LCBpbnQsIG9pZCwgbmV0c25tcF9zZXNzaW9uICopOworaW50ICAgICAgICAgICAgIHJlZ2lzdGVyX21pYl9yYW5nZQkgICAoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKiwKKwkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBjb25zdCBvaWQgKiwKKwkJCQkJICAgIHNpemVfdCwgaW50LCBpbnQsIG9pZCwKKwkJCQkJICAgIG5ldHNubXBfc2Vzc2lvbiAqKTsKIAotaW50CQlyZWdpc3Rlcl9taWJfY29udGV4dAkgICAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdmFyaWFibGUgKiwKLQkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBvaWQgKiwgc2l6ZV90LAoraW50CQlyZWdpc3Rlcl9taWJfY29udGV4dAkgICAoY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdmFyaWFibGUgKiwKKwkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBjb25zdCBvaWQgKiwgc2l6ZV90LAogCQkJCQkgICAgaW50LCBpbnQsIG9pZCwgbmV0c25tcF9zZXNzaW9uICosCiAJCQkJCSAgICBjb25zdCBjaGFyICosIGludCwgaW50KTsKIAotaW50CW5ldHNubXBfcmVnaXN0ZXJfbWliX3RhYmxlX3JvdwkgICAoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdmFyaWFibGUgKiwKLQkJCQkJICAgIHNpemVfdCwgc2l6ZV90LCBvaWQgKiwgc2l6ZV90LCAKLQkJCQkJICAgIGludCwgaW50LCBuZXRzbm1wX3Nlc3Npb24gKiwKK2ludAluZXRzbm1wX3JlZ2lzdGVyX21pYl90YWJsZV9yb3cJICAgKGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICosCisJCQkJCSAgICBzaXplX3QsIHNpemVfdCwgb2lkICosCisJCQkJCSAgICBzaXplX3QsIGludCwgaW50LCBuZXRzbm1wX3Nlc3Npb24gKiwKIAkJCQkJICAgIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQpOwogCiBpbnQJCXVucmVnaXN0ZXJfbWliCQkgICAob2lkICosIHNpemVfdCk7CkBAIC0xMzcsMTAgKzE0OSwxMiBAQAogICogICAgICAgICAgKHNpemVvZih0aGVvaWQpICptdXN0KiByZXR1cm4gdGhlIG51bWJlciBvZiBlbGVtZW50cyEpIAogICovCiAKLSNkZWZpbmUgUkVHSVNURVJfTUlCKGRlc2NyLCB2YXIsIHZhcnR5cGUsIHRoZW9pZCkgICAgICAgICAgICAgICAgICAgICAgXAotICBpZiAocmVnaXN0ZXJfbWliKGRlc2NyLCAoc3RydWN0IHZhcmlhYmxlICopIHZhciwgc2l6ZW9mKHN0cnVjdCB2YXJ0eXBlKSwgXAotICAgICAgICAgICAgICAgc2l6ZW9mKHZhcikvc2l6ZW9mKHN0cnVjdCB2YXJ0eXBlKSwgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICB0aGVvaWQsIHNpemVvZih0aGVvaWQpL3NpemVvZihvaWQpKSAhPSBNSUJfUkVHSVNURVJFRF9PSyApIFwKKyNkZWZpbmUgUkVHSVNURVJfTUlCKGRlc2NyLCB2YXIsIHZhcnR5cGUsIHRoZW9pZCkgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAocmVnaXN0ZXJfbWliKGRlc2NyLCAoY29uc3Qgc3RydWN0IHZhcmlhYmxlICopIHZhciwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgdmFydHlwZSksICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2YXIpL3NpemVvZihzdHJ1Y3QgdmFydHlwZSksICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgIHRoZW9pZCwgc2l6ZW9mKHRoZW9pZCkvc2l6ZW9mKG9pZCkpICE9ICAgICAgICAgICAgIFwKKyAgICAgICAgTUlCX1JFR0lTVEVSRURfT0spICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlERUJVR01TR1RMKCgicmVnaXN0ZXJfbWliIiwgIiVzIHJlZ2lzdHJhdGlvbiBmYWlsZWRcbiIsIGRlc2NyKSk7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3N5c09SVGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjI2ZTRhCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9zeXNPUlRhYmxlLmgKQEAgLTAsMCArMSwyOCBAQAorI2lmbmRlZiBBR0VOVF9TWVNPUlRBQkxFX0gKKyNkZWZpbmUgQUdFTlRfU1lTT1JUQUJMRV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworc3RydWN0IHN5c09SVGFibGU7CisKK2V4dGVybiB2b2lkICAgICBpbml0X2FnZW50X3N5c09SVGFibGUodm9pZCk7CitleHRlcm4gdm9pZCAgICAgc2h1dGRvd25fYWdlbnRfc3lzT1JUYWJsZSh2b2lkKTsKKworZXh0ZXJuIHZvaWQgICAgIG5ldHNubXBfc3lzT1JUYWJsZV9mb3JlYWNoKHZvaWQgKCopKGNvbnN0IHN0cnVjdCBzeXNPUlRhYmxlKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCopOworCitleHRlcm4gaW50ICAgICAgcmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiwgc2l6ZV90LCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZShvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgICByZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKik7CitleHRlcm4gaW50ICAgICAgdW5yZWdpc3Rlcl9zeXNPUlRhYmxlX3Nlc3Mob2lkICosIHNpemVfdCwgbmV0c25tcF9zZXNzaW9uICopOworZXh0ZXJuIHZvaWQgICAgIHVucmVnaXN0ZXJfc3lzT1JUYWJsZV9ieV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIEFHRU5UX1NZU09SVEFCTEVfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF90cmFwLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAppbmRleCBlYmMyYjA2Li4yNmUyMjIzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaApAQCAtMTQsMTYgKzE0LDIwIEBACiB2b2lkICAgICAgICAgICAgc2VuZF9lYXN5X3RyYXAoaW50LCBpbnQpOwogdm9pZCAgICAgICAgICAgIHNlbmRfdHJhcF9wZHUobmV0c25tcF9wZHUgKik7CiB2b2lkICAgICAgICAgICAgc2VuZF92MnRyYXAobmV0c25tcF92YXJpYWJsZV9saXN0ICopOwordm9pZCAgICAgICAgICAgIHNlbmRfdjN0cmFwKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgY29uc3QgY2hhciAqY29udGV4dCk7CiB2b2lkICAgICAgICAgICAgc2VuZF90cmFwX3ZhcnMoaW50LCBpbnQsIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsKK3ZvaWQgICAgICAgICAgICBzZW5kX3RyYXBfdmFyc193aXRoX2NvbnRleHQoaW50IHRyYXAsIGludCBzcGVjaWZpYywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dCk7CiB2b2lkICAgICAgICAgICAgc2VuZF9lbnRlcnByaXNlX3RyYXBfdmFycyhpbnQgdHJhcCwgaW50IHNwZWNpZmljLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogZW50ZXJwcmlzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGVudGVycHJpc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJzKTsKIGludCAgICAgICAgICAgICBuZXRzbm1wX3NlbmRfdHJhcHMoaW50IHRyYXAsIGludCBzcGVjaWZpYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBlbnRlcnByaXNlLCBpbnQgZW50ZXJwcmlzZV9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcnMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFRoZXNlIG5leHQgdHdvIGFyZSBjdXJyZW50bHkgdW51c2VkICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiBjb250ZXh0LCBpbnQgZmxhZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBmbGFncyBhcmUgY3VycmVudGx5IHVudXNlZCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogY29udGV4dCwgaW50IGZsYWdzKTsKIHZvaWQgICAgICAgICAgICBzbm1wZF9wYXJzZV9jb25maWdfYXV0aHRyYXAoY29uc3QgY2hhciAqLCBjaGFyICopOwogdm9pZCAgICAgICAgICAgIHNubXBkX3BhcnNlX2NvbmZpZ190cmFwc2luayhjb25zdCBjaGFyICosIGNoYXIgKik7CiB2b2lkICAgICAgICAgICAgc25tcGRfcGFyc2VfY29uZmlnX3RyYXAyc2luayhjb25zdCBjaGFyICosIGNoYXIgKik7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FsbF9oZWxwZXJzLmgKaW5kZXggMjdlNTgwZS4uZDBkNWMyMiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hbGxfaGVscGVycy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvYWxsX2hlbHBlcnMuaApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L3RhYmxlX2FycmF5Lmg+IAogCiAjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbWZkLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvc25tcF9nZXRfc3RhdGlzdGljLmg+CiAKIAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfaW5pdF9oZWxwZXJzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9iYWJ5X3N0ZXBzLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAppbmRleCA2YTFhOGI5Li5kMjU2NTUwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2JhYnlfc3RlcHMuaApAQCAtMTYsNiArMTYsNyBAQAogI2RlZmluZSBCQUJZX1NURVBfTk9ORSAgICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgQkFCWV9TVEVQX1BSRV9SRVFVRVNUICAgICAgICAgICAoMHgxIDw8ICAxKQogI2RlZmluZSBCQUJZX1NURVBfT0JKRUNUX0xPT0tVUCAgICAgICAgICgweDEgPDwgIDIpCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBCQUJZX1NURVBfQ0hFQ0tfVkFMVUUgICAgICAgICAgICgweDEgPDwgIDMpCiAjZGVmaW5lIEJBQllfU1RFUF9ST1dfQ1JFQVRFICAgICAgICAgICAgKDB4MSA8PCAgNCkKICNkZWZpbmUgQkFCWV9TVEVQX1VORE9fU0VUVVAgICAgICAgICAgICAoMHgxIDw8ICA1KQpAQCAtMjYsMTQgKzI3LDE3IEBACiAjZGVmaW5lIEJBQllfU1RFUF9VTkRPX0NPTU1JVCAgICAgICAgICAgKDB4MSA8PCAxMCkKICNkZWZpbmUgQkFCWV9TVEVQX0lSUkVWRVJTSUJMRV9DT01NSVQgICAoMHgxIDw8IDExKQogI2RlZmluZSBCQUJZX1NURVBfVU5ET19DTEVBTlVQICAgICAgICAgICgweDEgPDwgMTIpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAjZGVmaW5lIEJBQllfU1RFUF9QT1NUX1JFUVVFU1QgICAgICAgICAgKDB4MSA8PCAxMykKIAogI2RlZmluZSBCQUJZX1NURVBfQUxMICAgICAgICAgICAgICAgICAgICgweGZmZmZmZmZmKQogCiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIEJBQllfU1RFUF9DSEVDS19PQkpFQ1QgICAgICAgICAgQkFCWV9TVEVQX0NIRUNLX1ZBTFVFCiAjZGVmaW5lIEJBQllfU1RFUF9TRVRfVkFMVUVTICAgICAgICAgICAgQkFCWV9TVEVQX1NFVF9WQUxVRQogI2RlZmluZSBCQUJZX1NURVBfVU5ET19TRVRTICAgICAgICAgICAgIEJBQllfU1RFUF9VTkRPX1NFVAorI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAvKiogQG5hbWUgYmFieV9zdGVwcwogICoKQEAgLTQzLDYgKzQ3LDggQEAKICAqICBAeyAqLwogCiAgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9iYWJ5X3N0ZXBzX21vZGVzX3MgeworICAgICAgIC8qKiBOdW1iZXIgb2YgaGFuZGxlcnMgd2hvc2UgbXl2b2lkIHBvaW50ZXIgcG9pbnRzIGF0IHRoaXMgb2JqZWN0LiAqLworICAgICAgIGludCAgICAgICAgIHJlZmNudDsKICAgICAgICB1X2ludCAgICAgICByZWdpc3RlcmVkOwogICAgICAgIHVfaW50ICAgICAgIGNvbXBsZXRlZDsKICAgICB9IG5ldHNubXBfYmFieV9zdGVwc19tb2RlczsKQEAgLTc0LDYgKzgwLDcgQEAKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpwcmVfcmVxdWVzdDsKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpvYmplY3RfbG9va3VwOwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKmdldF92YWx1ZXM7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKm9iamVjdF9zeW50YXhfY2hlY2tzOwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnJvd19jcmVhdGlvbjsKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICp1bmRvX3NldHVwOwpAQCAtODQsNiArOTEsNyBAQAogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnVuZG9fY2xlYW51cDsKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICp1bmRvX2NvbW1pdDsKICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICppcnJldmVyc2libGVfY29tbWl0OworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnBvc3RfcmVxdWVzdDsKIAogICAgdm9pZCAgICAgICAgICAgICAgICAgKm15X2FjY2Vzc192b2lkOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9jYWNoZV9oYW5kbGVyLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAppbmRleCBlNWFjNjUzLi4xZTQ3NTFjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2NhY2hlX2hhbmRsZXIuaApAQCAtMSwzICsxLDEzIEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KICNpZm5kZWYgTkVUU05NUF9DQUNIRV9IQU5ETEVSX0gKICNkZWZpbmUgTkVUU05NUF9DQUNIRV9IQU5ETEVSX0gKIApAQCAtMjIsNiArMzIsOCBAQAogICAgIHR5cGVkZWYgdm9pZCAoTmV0c25tcENhY2hlRnJlZSkobmV0c25tcF9jYWNoZSAqLCB2b2lkKik7CiAKICAgICBzdHJ1Y3QgbmV0c25tcF9jYWNoZV9zIHsKKwkvKiogTnVtYmVyIG9mIGhhbmRsZXJzIHdob3NlIG15dm9pZCBtZW1iZXIgcG9pbnRzIGF0IHRoaXMgc3RydWN0dXJlLiAqLworCWludCAgICAgIHJlZmNudDsKICAgICAgICAgLyoKIAkgKiBGb3Igb3BlcmF0aW9uIG9mIHRoZSBkYXRhIGNhY2hlcwogCSAqLwpAQCAtMzAsNyArNDIsNyBAQAogICAgICAgICBpbnQgICAgICB2YWxpZDsKICAgICAgICAgY2hhciAgICAgZXhwaXJlZDsKICAgICAgICAgaW50ICAgICAgdGltZW91dDsJLyogTGVuZ3RoIG9mIHRpbWUgdGhlIGNhY2hlIGlzIHZhbGlkIChpbiBzKSAqLwotICAgICAgICBtYXJrZXJfdCB0aW1lc3RhbXA7CS8qIFdoZW4gdGhlIGNhY2hlIHdhcyBsYXN0IGxvYWRlZCAqLworICAgICAgICBtYXJrZXJfdCB0aW1lc3RhbXBNOwkvKiBXaGVuIHRoZSBjYWNoZSB3YXMgbGFzdCBsb2FkZWQgKi8KICAgICAgICAgdV9sb25nICAgdGltZXJfaWQ7ICAgICAgLyogcGVyaW9kaWMgdGltZXIgaWQgKi8KIAogICAgICAgICBOZXRzbm1wQ2FjaGVMb2FkICpsb2FkX2NhY2hlOwpAQCAtNzQsNyArODYsNyBAQAogICAgIGludCAgICAgICAgICAgIG5ldHNubXBfaXNfY2FjaGVfdmFsaWQoICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICopOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIgKm5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXIoaW50LCBOZXRzbm1wQ2FjaGVMb2FkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBDYWNoZUZyZWUgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkKiwgaW50KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkKiwgaW50KTsKICAgICBpbnQgICBuZXRzbm1wX3JlZ2lzdGVyX2NhY2hlX2hhbmRsZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBOZXRzbm1wQ2FjaGVMb2FkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcENhY2hlRnJlZSAqKTsKQEAgLTg0LDExICs5NiwxNSBAQAogICAgIG5ldHNubXBfY2FjaGUgKgogICAgIG5ldHNubXBfY2FjaGVfY3JlYXRlKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICogbG9hZF9ob29rLAogICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBDYWNoZUZyZWUgKiBmcmVlX2hvb2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pOworICAgIGludCBuZXRzbm1wX2NhY2hlX3JlbW92ZShuZXRzbm1wX2NhY2hlICpjYWNoZSk7CisgICAgaW50IG5ldHNubXBfY2FjaGVfZnJlZShuZXRzbm1wX2NhY2hlICpjYWNoZSk7CisKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyICoKICAgICBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0KG5ldHNubXBfY2FjaGUqIGNhY2hlKTsKKyAgICB2b2lkIG5ldHNubXBfY2FjaGVfaGFuZGxlcl9vd25zX2NhY2hlKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpOwogCi0gICAgbmV0c25tcF9jYWNoZSAqIG5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQob2lkICogcm9vdG9pZCwKKyAgICBuZXRzbm1wX2NhY2hlICogbmV0c25tcF9jYWNoZV9maW5kX2J5X29pZChjb25zdCBvaWQgKiByb290b2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByb290b2lkX2xlbik7CiAKICAgICB1bnNpZ25lZCBpbnQgbmV0c25tcF9jYWNoZV90aW1lcl9zdGFydChuZXRzbm1wX2NhY2hlICpjYWNoZSk7CkBAIC0xMDMsNiArMTE5LDcgQEAKICNkZWZpbmUgTkVUU05NUF9DQUNIRV9ET05UX0FVVE9fUkVMRUFTRSAgICAgICAgICAgICAgICAgICAgIDB4MDAwOAogI2RlZmluZSBORVRTTk1QX0NBQ0hFX1BSRUxPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDEwCiAjZGVmaW5lIE5FVFNOTVBfQ0FDSEVfQVVUT19SRUxPQUQgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKyNkZWZpbmUgTkVUU05NUF9DQUNIRV9SRVNFVF9USU1FUl9PTl9VU0UgICAgICAgICAgICAgICAgICAgIDB4MDA0MAogCiAjZGVmaW5lIE5FVFNOTVBfQ0FDSEVfSElOVF9IQU5ETEVSX0FSR1MgICAgICAgICAgICAgICAgICAgICAweDEwMDAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9kc19hZ2VudC5oCmluZGV4IGFhYmI3OTIuLmY2ZjYzOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKQEAgLTI3LDEwICsyNywxOCBAQAogI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX0RPTlRfTE9HX1RDUFdSQVBQRVJTX0NPTk5FQ1RTIDEyICAgLyogMSA9IGRpc2FibGUgbG9nZ2luZyAqLwogI2RlZmluZSBORVRTTk1QX0RTX0FQUF9ET05UX0xPRyAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfRE9OVF9SRVRBSU5fTk9USUZJQ0FUSU9OUyAvKiBjb21wYXQgKi8KICNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9TS0lQTkZTSU5IT1NUUkVTT1VSQ0VTICAgIDEzICAgLyogMSA9IGRvbid0IHN0b3JlIE5GUyBlbnRyaWVzIGluIGhyU3RvcmFnZVRhYmxlICovCisjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfUkVBTFNUT1JBR0VVTklUUyAxNCAgICAvKiAxID0gdXNlIHJlYWwgYWxsb2NhdGlvbiB1bml0cyBpbiBoclN0b3JhZ2VUYWJsZSwgMCA9IHJlY2FsY3VsYXRlIGl0IHRvIGZpdCAzMmJpdHMgKi8KIAotLyogV0FSTklORzogVGhlIHRyYXAgcmVjZWl2ZXIgdXNlcyBEUyBmbGFncyBhbmQgbXVzdCBub3QgY29uZmxpY3Qgd2l0aAotICAgdGhlc2UhICBJZiB5b3UgdXNlIGEgdmFsdWUgYWJvdmUgMTUsIGNoYW5nZSB0aGUgbWluaW1pbXVtIERTIGJvb2wKLSAgIHZhbHVlIGluIHNubXB0cmFwZF9sb2cuaCAqLworICAgLyogUmVwZWF0ZWQgZnJvbSAiYXBwcy9zbm1wdHJhcGRfZHMuaCIgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19BUFBfTlVNRVJJQ19JUCAgICAgICAxNgorI2RlZmluZSBORVRTTk1QX0RTX0FQUF9OT19BVVRIT1JJWkFUSU9OIDE3CisKKyNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9ESVNLSU9fTk9fRkQgICAxOCAgICAgIC8qIDEgPSBkb24ndCByZXBvcnQgL2Rldi9mZCogICBlbnRyaWVzIGluIGRpc2tJT1RhYmxlICovCisjZGVmaW5lIE5FVFNOTVBfRFNfQUdFTlRfRElTS0lPX05PX0xPT1AgMTkgICAgICAvKiAxID0gZG9uJ3QgcmVwb3J0IC9kZXYvbG9vcCogZW50cmllcyBpbiBkaXNrSU9UYWJsZSAqLworI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX0RJU0tJT19OT19SQU0gIDIwICAgICAgLyogMSA9IGRvbid0IHJlcG9ydCAvZGV2L3JhbSogIGVudHJpZXMgaW4gZGlza0lPVGFibGUgKi8KKworLyogV0FSTklORzogVGhlIHRyYXAgcmVjZWl2ZXIgYWxzbyB1c2VzIERTIGZsYWdzIGFuZCBtdXN0IG5vdCBjb25mbGljdCB3aXRoIHRoZXNlIQorICogSWYgeW91IGRlZmluZSBhZGRpdGlvbmFsIGJvb2xlYW4gZW50cmllcywgY2hlY2sgaW4gImFwcHMvc25tcHRyYXBkX2RzLmgiIGZpcnN0ICovCiAKIC8qCiAgKiBzdHJpbmdzIApAQCAtNDIsNiArNTAsNyBAQAogI2RlZmluZSBORVRTTk1QX0RTX0FHRU5UX1BFUkxfSU5JVF9GSUxFICAgIDQgICAgLyogdXNlZCBieSBlbWJlZGRlZCBwZXJsICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfU01VWF9TT0NLRVQgICAgNSAgICAgLyogaXA6cG9ydCBzb2NrZXQgYWRkciAqLwogI2RlZmluZSBORVRTTk1QX0RTX05PVElGX0xPR19DVFggIDYgICAgIC8qICIiIHwgInNubXB0cmFwZCIgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19BR0VOVF9UUkFQX0FERFIgICAgICA3ICAgICAvKiB1c2VkIGFzIHYxIHRyYXAgYWdlbnQgYWRkcmVzcyAqLwogCiAvKgogICogaW50ZWdlcnMgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9jcHUuaAppbmRleCA2MjY4ODk3Li5mNmU0M2U1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2NwdS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvY3B1LmgKQEAgLTMzLDYgKzMzLDkgQEAKICAgICAgdW5zaWduZWQgbG9uZyBsb25nIGtlcm5fdGlja3M7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnRycHRfdGlja3M7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzaXJxX3RpY2tzOworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc3RlYWxfdGlja3M7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBndWVzdF90aWNrczsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIGd1ZXN0bmljZV90aWNrczsKIAogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgdG90YWxfdGlja3M7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBzeXMyX3RpY2tzOyAgLyogRm9yIG5vbi1hdG9taWMgc3lzdGVtIGNvdW50cyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2hhcmR3YXJlL2ZzeXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWU4ZTE3Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9mc3lzLmgKQEAgLTAsMCArMSwxMDkgQEAKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfZnN5c19pbmZvX3MgbmV0c25tcF9mc3lzX2luZm87CisKKyNkZWZpbmUgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVCAgIDB4MjAwMAorI2RlZmluZSBfTkVUU05NUF9GU19UWVBFX0xPQ0FMICAgICAgMHgxMDAwCisKKyAgIC8qCisgICAgKiBFbnVtZXJhdGlvbiBmcm9tIEhPU1QtUkVTT1VSQ0VTLVRZUEVTIG1pYgorICAgICovCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9PVEhFUgkgICAxCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9VTktOT1dOCSAgIDIKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0JFUktFTEVZICAgMworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfU1lTVgkgICA0CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9GQVQJICAgNQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfSFBGUwkgICA2CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9IRlMJICAgNworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfTUZTCSAgIDgKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX05URlMJICAgOQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfVk5PREUJICAgMTAKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0pGUwkgICAxMQorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfSVNPOTY2MAkgICAxMgorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfUk9DS1JJREdFICAxMworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfTkZTCSAgIDE0CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9ORVRXQVJFCSAgIDE1CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9BRlMJICAgMTYKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0RGUwkgICAxNworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfQVBQTEVTSEFSRSAxOAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfUkZTCSAgIDE5CisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9ER0NTCSAgIDIwCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9CT09URlMJICAgMjEKKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0ZBVDMyCSAgIDIyCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9FWFQyCSAgIDIzCisKKyAgIC8qCisgICAgKiBBZGRpdGlvbmFsIGVudW1lcmF0aW9uaXMgLSBub3QgbGlzdGVkIGluIHRoYXQgTUlCCisgICAgKi8KKyNkZWZpbmUgTkVUU05NUF9GU19UWVBFX0lHTk9SRQkgICAxIHwgX05FVFNOTVBfRlNfVFlQRV9MT0NBTCB8IF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQKKworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfUFJPQwkgICAyIHwgX05FVFNOTVBfRlNfVFlQRV9MT0NBTCB8IF9ORVRTTk1QX0ZTX1RZUEVfU0tJUF9CSVQKKworI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfREVWUFRTCSAgIDMgfCBfTkVUU05NUF9GU19UWVBFX0xPQ0FMIHwgX05FVFNOTVBfRlNfVFlQRV9TS0lQX0JJVAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfU1lTRlMJICAgNCB8IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwgfCBfTkVUU05NUF9GU19UWVBFX1NLSVBfQklUCisjZGVmaW5lIE5FVFNOTVBfRlNfVFlQRV9UTVBGUwkgICA1IHwgX05FVFNOTVBfRlNfVFlQRV9MT0NBTAorI2RlZmluZSBORVRTTk1QX0ZTX1RZUEVfVVNCRlMJICAgNiB8IF9ORVRTTk1QX0ZTX1RZUEVfTE9DQUwKKworI2RlZmluZSBORVRTTk1QX0ZTX0ZMQUdfQUNUSVZFICAgMHgwMQorI2RlZmluZSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1RFICAgMHgwMgorI2RlZmluZSBORVRTTk1QX0ZTX0ZMQUdfUk9OTFkgICAgMHgwNAorI2RlZmluZSBORVRTTk1QX0ZTX0ZMQUdfQk9PVEFCTEUgMHgwOAorI2RlZmluZSBORVRTTk1QX0ZTX0ZMQUdfUkVNT1ZFICAgMHgxMAorI2RlZmluZSBORVRTTk1QX0ZTX0ZMQUdfVUNEICAgICAgMHgyMAorCisjZGVmaW5lIE5FVFNOTVBfRlNfRklORF9DUkVBVEUgICAgIDEgICAvKiBvciB1c2Ugb25lIG9mIHRoZSB0eXBlIHZhbHVlcyAqLworI2RlZmluZSBORVRTTk1QX0ZTX0ZJTkRfRVhJU1QgICAgICAwCisKK3N0cnVjdCBuZXRzbm1wX2ZzeXNfaW5mb19zIHsKKyAgICAgbmV0c25tcF9pbmRleCAgaWR4OworICAvKiBpbnQgIGlkeDsgKi8KKyAKKyAgICAgY2hhciBwYXRoWyAgU05NUF9NQVhQQVRIKzFdOworICAgICBjaGFyIGRldmljZVtTTk1QX01BWFBBVEgrMV07CisgICAgIGludCAgdHlwZTsKKworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZTsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVzZWQ7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBhdmFpbDsKKyAgICAgdW5zaWduZWQgbG9uZyBsb25nIHVuaXRzOworCisgICAgIC8qIGFydGlmaWNpYWxseSBjb21wdXRlZCB2YWx1ZXMsIGJvdGggJ3NpemVfMzInIGFuZCAndW5pdHNfMzInIGZpdCBJTlQzMiAqLworICAgICB1bnNpZ25lZCBsb25nIHNpemVfMzI7CisgICAgIHVuc2lnbmVkIGxvbmcgdXNlZF8zMjsKKyAgICAgdW5zaWduZWQgbG9uZyBhdmFpbF8zMjsKKyAgICAgdW5zaWduZWQgbG9uZyB1bml0c18zMjsKKworICAgICB1bnNpZ25lZCBsb25nIGxvbmcgaW51bXNfdG90YWw7CisgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnVtc19hdmFpbDsKKworICAgICBpbnQgIG1pbnNwYWNlOworICAgICBpbnQgIG1pbnBlcmNlbnQ7CisKKyAgICAgbG9uZyBmbGFnczsKKworICAgICBuZXRzbm1wX2ZzeXNfaW5mbyAqbmV4dDsKK307CisKKworICAgIC8qCisgICAgICogUG9zc2libHkgbm90IGFsbCBuZWVkZWQgPz8KKyAgICAgKi8KK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfZ2V0X2ZpcnN0KCB2b2lkICk7CituZXRzbm1wX2ZzeXNfaW5mbyAqbmV0c25tcF9mc3lzX2dldF9uZXh0KCBuZXRzbm1wX2ZzeXNfaW5mbyogKTsKK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfZ2V0X2J5SWR4KCAgaW50LCAgIGludCApOworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19nZXRfbmV4dF9ieUlkeChpbnQsaW50ICk7CisKK25ldHNubXBfZnN5c19pbmZvICpuZXRzbm1wX2ZzeXNfYnlfZGV2aWNlKCAgY2hhciosIGludCApOworbmV0c25tcF9mc3lzX2luZm8gKm5ldHNubXBfZnN5c19ieV9wYXRoKCAgICBjaGFyKiwgaW50ICk7CisKK25ldHNubXBfY2FjaGUgKm5ldHNubXBfZnN5c19nZXRfY2FjaGUoIHZvaWQgKTsKK2ludCAgbmV0c25tcF9mc3lzX2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICpkYXRhICk7Cit2b2lkIG5ldHNubXBfZnN5c19mcmVlKCBuZXRzbm1wX2NhY2hlICpjYWNoZSwgdm9pZCAqZGF0YSApOworCitpbnQgbmV0c25tcF9mc3lzX3NpemUoIG5ldHNubXBfZnN5c19pbmZvKiApOworaW50IG5ldHNubXBfZnN5c191c2VkKCBuZXRzbm1wX2ZzeXNfaW5mbyogKTsKK2ludCBuZXRzbm1wX2ZzeXNfYXZhaWwobmV0c25tcF9mc3lzX2luZm8qICk7CisKK3Vuc2lnbmVkIGxvbmcgbG9uZyBuZXRzbm1wX2ZzeXNfc2l6ZV91bGwoIG5ldHNubXBfZnN5c19pbmZvKiApOwordW5zaWduZWQgbG9uZyBsb25nIG5ldHNubXBfZnN5c191c2VkX3VsbCggbmV0c25tcF9mc3lzX2luZm8qICk7Cit1bnNpZ25lZCBsb25nIGxvbmcgbmV0c25tcF9mc3lzX2F2YWlsX3VsbChuZXRzbm1wX2ZzeXNfaW5mbyogKTsKKwordm9pZCBuZXRzbm1wX2ZzeXNfY2FsY3VsYXRlMzIoIG5ldHNubXBfZnN5c19pbmZvICpmKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9oYXJkd2FyZS9zZW5zb3JzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5ZWNhNwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaGFyZHdhcmUvc2Vuc29ycy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiBIYXJkd2FyZSBBYnN0cmFjdGlvbiBMYXllciAtIFNlbnNvcnMgbW9kdWxlCisgKgorICogUHVibGljIGludGVyZmFjZQorICovCisKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9PVEhFUiAgICAgICAxCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfVk9MVEFHRV9BQyAgMworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX1ZPTFRBR0VfREMgIDQKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9DVVJSRU5UICAgICA1CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfUE9XRVIgICAgICAgNgorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX0ZSRVFVRU5DWSAgIDcKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9URU1QRVJBVFVSRSA4CisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfSFVNSURJVFkgICAgOQorI2RlZmluZSBORVRTTk1QX1NFTlNPUl9UWVBFX1JQTSAgICAgICAgMTAKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfVFlQRV9WT0xVTUUgICAgIDExCisjZGVmaW5lIE5FVFNOTVBfU0VOU09SX1RZUEVfQk9PTEVBTiAgICAxMgorCisKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfRkxBR19BQ1RJVkUgICAgIDB4MDEKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfRkxBR19OQVZBSUwgICAgIDB4MDIKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfRkxBR19CUk9LRU4gICAgIDB4MDQKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfRkxBR19ESVNBQkxFICAgIDB4MDgKKworI2RlZmluZSBORVRTTk1QX1NFTlNPUl9NQVNLX1NUQVRVUyAgICAgMHgwNiAgLyogTkFWQUlMfEJST0tFTiAqLworCisKKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfRklORF9DUkVBVEUgICAgIDEgICAvKiBvciB1c2Ugb25lIG9mIHRoZSBzZW5zb3IgdHlwZSB2YWx1ZXMgKi8KKyNkZWZpbmUgTkVUU05NUF9TRU5TT1JfRklORF9FWElTVCAgICAgIDAKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9zZW5zb3JfaW5mb19zIG5ldHNubXBfc2Vuc29yX2luZm87CitzdHJ1Y3QgbmV0c25tcF9zZW5zb3JfaW5mb19zIHsKKworICAgIG5ldHNubXBfaW5kZXggIGlkeDsKKyAgICAvKiBpbnQgIGlkeDsgKi8KKyAgICBjaGFyICBuYW1lWzI1Nl07CisgICAgCisgICAgaW50ICAgdHlwZTsKKyAgICBmbG9hdCB2YWx1ZTsKKyAgICBjaGFyICBkZXNjclsyNTZdOworICAgIGxvbmcgIGZsYWdzOworfTsKKworbmV0c25tcF9jb250YWluZXIgICAqZ2V0X3NlbnNvcl9jb250YWluZXIoIHZvaWQgKTsKK25ldHNubXBfY2FjaGUgICAgICAgKmdldF9zZW5zb3JfY2FjaGUoIHZvaWQgKTsKK25ldHNubXBfc2Vuc29yX2luZm8gKnNlbnNvcl9ieV9uYW1lKCBjb25zdCBjaGFyICosIGludCApOworTmV0c25tcENhY2hlTG9hZCAgICAgbmV0c25tcF9zZW5zb3JfbG9hZDsKK05ldHNubXBDYWNoZUZyZWUgICAgIG5ldHNubXBfc2Vuc29yX2ZyZWU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2luc3RhbmNlLmgKaW5kZXggMGEwMmMyMS4uODJmMmVkZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9pbnN0YW5jZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvaW5zdGFuY2UuaApAQCAtMjAsOCArMjAsOSBAQAogICogKiBoYXZlIHRvIGNoZWNrIHRoZSBvaWQgYXQgYWxsLiAgSnVzdCBhbnN3ZXIuCiAgKi8KIAotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8pOworaW50CituZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKiByZWdpbmZvKTsKKwogaW50ICAgICAgICAgICAgCiBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnN0YW5jZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvKTsKIApAQCAtMjksMTExICszMCwxMDMgQEAKIAogbmV0c25tcF9taWJfaGFuZGxlciAqbmV0c25tcF9nZXRfaW5zdGFuY2VfaGFuZGxlcih2b2lkKTsKIAotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogc3ViaGFuZGxlcik7Ci1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcik7Ci1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlKGNvbnN0IGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcik7Ci1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN1YmhhbmRsZXIpOwotaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogCi1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogCi1pbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2UoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlcik7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlKGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIAogLyogaWRlbnRpY2FsIGZ1bmN0aW9ucyB0aGF0IHJlZ2lzdGVyIGEgaW4gYSBwYXJ0aWN1bGFyIGNvbnRleHQgKi8KLWludCAgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7Ci1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWdfb2lkX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ19vaWRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3Vsb25nX2luc3RhbmNlX2NvbnRleHQoY29uc3QgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBzdWJoYW5kbGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKK2ludAorbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZyAqaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIHN1YmhhbmRsZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX2xvbmdfaW5zdGFuY2VfY29udGV4dChjb25zdCBjaGFyICpuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmcgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOwogCi1pbnQgIG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJoYW5kbGVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CitpbnQKK25ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViaGFuZGxlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKTsKIAotaW50ICBuZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YmhhbmRsZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29udGV4dE5hbWUpOworaW50CituZXRzbm1wX3JlZ2lzdGVyX2ludF9pbnN0YW5jZV9jb250ZXh0KGNvbnN0IGNoYXIgKm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CiAKIGludAogbmV0c25tcF9yZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZShjb25zdCBjaGFyICpuYW1lLApAQCAtMTQzLDExICsxMzYsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZSk7CiAKIE5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfaGVscGVyX2hhbmRsZXI7Ci1OZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX3Vsb25nX2hhbmRsZXI7Ci1OZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX2xvbmdfaGFuZGxlcjsKLU5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfaW50X2hhbmRsZXI7Ci1OZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX3VpbnRfaGFuZGxlcjsKLU5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfaW5zdGFuY2VfY291bnRlcjMyX2hhbmRsZXI7CiBOZXRzbm1wX05vZGVfSGFuZGxlciBuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXI7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9vbGRfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAppbmRleCAwNmVjNDQ5Li4yYmQzY2QxIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L29sZF9hcGkuaApAQCAtMjUsMTAgKzI1LDEwIEBACiB9IG5ldHNubXBfb2xkX2FwaV9jYWNoZTsKIAogaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaShjb25zdCBjaGFyICptb2R1bGVOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmFyaWFibGUgKnZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHZhcmlhYmxlICp2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YXJzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbnVtdmFycywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbWlibG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBtaWJsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBtaWJsb2NsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwcmlvcml0eSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJhbmdlX3N1YmlkLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2FnZW50LmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAppbmRleCA0NWNhNjJiLi5hYWQ4ODM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfYWdlbnQuaApAQCAtMTE4LDkgKzExOCwxNSBAQAogI2RlZmluZSBNT0RFX0dFVE5FWFQgICAgICAgICAgU05NUF9NU0dfR0VUTkVYVAogI2RlZmluZSBNT0RFX0dFVEJVTEsgICAgICAgICAgU05NUF9NU0dfR0VUQlVMSwogI2RlZmluZSBNT0RFX0dFVF9TVEFTSCAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfR0VUX1NUQVNICisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBNT0RFX0lTX0dFVCh4KSAgICAgICAgKCh4ID49IDEyOCkgJiYgKHggIT0gLTEpICAmJiAoeCAhPSBTTk1QX01TR19TRVQpKQorI2Vsc2UgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisjZGVmaW5lIE1PREVfSVNfR0VUKHgpICAgICAgICAoKHggPj0gMTI4KSAmJiAoeCAhPSAtMSkpCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKICAgICAvKiAjZGVmaW5lIE1PREVfSVNfR0VUKHgpICAgICAgICAoKHggPT0gU05NUF9NU0dfR0VUKSB8fCAoeCA9PSBTTk1QX01TR19HRVRORVhUKSB8fCAoeCA9PSBTTk1QX01TR19HRVRCVUxLKSB8fCAoeCA9PSBTTk1QX01TR19JTlRFUk5BTF9HRVRfU1RBU0gpKSAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBNT0RFX1NFVF9CRUdJTiAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfU0VUX0JFR0lOCiAjZGVmaW5lIE1PREVfU0VUX1JFU0VSVkUxICAgICBTTk1QX01TR19JTlRFUk5BTF9TRVRfUkVTRVJWRTEKICNkZWZpbmUgTU9ERV9TRVRfUkVTRVJWRTIgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9SRVNFUlZFMgpAQCAtMTMwLDExICsxMzYsMTMgQEAKICNkZWZpbmUgTU9ERV9TRVRfVU5ETyAgICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1NFVF9VTkRPCiAjZGVmaW5lIE1PREVfSVNfU0VUKHgpICAgICAgICAgKCh4IDwgMTI4KSB8fCAoeCA9PSAtMSkgfHwgKHggPT0gU05NUF9NU0dfU0VUKSkKICAgICAvKiAjZGVmaW5lIE1PREVfSVNfU0VUKHgpICAgICAgICAgKCFNT0RFX0lTX0dFVCh4KSkgKi8KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogI2RlZmluZSBNT0RFX0JTVEVQX1BSRV9SRVFVRVNUICAgU05NUF9NU0dfSU5URVJOQUxfUFJFX1JFUVVFU1QKICNkZWZpbmUgTU9ERV9CU1RFUF9QT1NUX1JFUVVFU1QgIFNOTVBfTVNHX0lOVEVSTkFMX1BPU1RfUkVRVUVTVAogCiAjZGVmaW5lIE1PREVfQlNURVBfT0JKRUNUX0xPT0tVUCAgICAgICBTTk1QX01TR19JTlRFUk5BTF9PQkpFQ1RfTE9PS1VQCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBNT0RFX0JTVEVQX0NIRUNLX1ZBTFVFICAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfQ0hFQ0tfVkFMVUUKICNkZWZpbmUgTU9ERV9CU1RFUF9ST1dfQ1JFQVRFICAgICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1JPV19DUkVBVEUKICNkZWZpbmUgTU9ERV9CU1RFUF9VTkRPX1NFVFVQICAgICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1VORE9fU0VUVVAKQEAgLTE0NSw3ICsxNTMsNyBAQAogI2RlZmluZSBNT0RFX0JTVEVQX1VORE9fQ09NTUlUICAgICAgICAgU05NUF9NU0dfSU5URVJOQUxfVU5ET19DT01NSVQKICNkZWZpbmUgTU9ERV9CU1RFUF9JUlJFVkVSU0lCTEVfQ09NTUlUIFNOTVBfTVNHX0lOVEVSTkFMX0lSUkVWRVJTSUJMRV9DT01NSVQKICNkZWZpbmUgTU9ERV9CU1RFUF9VTkRPX0NMRUFOVVAgICAgICAgIFNOTVBfTVNHX0lOVEVSTkFMX1VORE9fQ0xFQU5VUAotCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qKiBAdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fcyBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbwogICogVHlwZWRlZnMgdGhlIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3Mgc3RydWN0IGludG8KQEAgLTI2Miw3ICsyNzAsMTEgQEAKIAogICAgIHVfbG9uZyAgICAgICAgICBuZXRzbm1wX21hcmtlcl91cHRpbWUobWFya2VyX3QgcG0pOwogICAgIHVfbG9uZyAgICAgICAgICBuZXRzbm1wX3RpbWV2YWxfdXB0aW1lKHN0cnVjdCB0aW1ldmFsICp0dik7CisgICAgY29uc3RfbWFya2VyX3QgIG5ldHNubXBfZ2V0X2FnZW50X3N0YXJ0dGltZSh2b2lkKTsKKyAgICB1aW50NjRfdCAgICAgICAgbmV0c25tcF9nZXRfYWdlbnRfcnVudGltZSh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9zZXRfYWdlbnRfc3RhcnR0aW1lKG1hcmtlcl90IHMpOwogICAgIHVfbG9uZyAgICAgICAgICBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUodm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2V0X2FnZW50X3VwdGltZSh1X2xvbmcgaHNlYyk7CiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfY2hlY2tfdHJhbnNhY3Rpb25faWQoaW50IHRyYW5zYWN0aW9uX2lkKTsKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9jaGVja19wYWNrZXQobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfZ2V0X3N0YXRpc3RpYy5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzVkNDg2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX2dldF9zdGF0aXN0aWMuaApAQCAtMCwwICsxLDIwIEBACisjaWZuZGVmIFNOTVBfR0VUX1NUQVRJU1RJQ19ICisjZGVmaW5lIFNOTVBfR0VUX1NUQVRJU1RJQ19ICisKKy8qKiBSZWdpc3RlcnMgYSBzY2FsYXIgZ3JvdXAgd2l0aCBzdGF0aXN0aWNzIGZyb20gQHJlZiBzbm1wX2dldF9zdGF0aXN0aWMuCisgKiAgYXMgcmVnaW5mby5bc3RhcnQsIHN0YXJ0ICsgZW5kIC0gYmVnaW5dLgorICogIEBwYXJhbSByZWdpbmZvIHJlZ2lzdHJhdGlvbiB0byByZWdpc3RlciB0aGUgaXRlbXMgdW5kZXIKKyAqICBAcGFyYW0gc3RhcnQgb2Zmc2V0IHRvIHRoZSBiZWdpbiBpdGVtCisgKiAgQHBhcmFtIGJlZ2luIGZpcnN0IHNubXBfZ2V0X3N0YXRpc3RpYyBrZXkgdG8gcmV0dXJuCisgKiAgQHBhcmFtIGVuZCBsYXN0IHNubXBfZ2V0X3N0YXRpc3RpYyBrZXkgdG8gcmV0dXJuCisgKi8KK2ludAorbmV0c25tcF9yZWdpc3Rlcl9zdGF0aXN0aWNfaGFuZGxlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgc3RhcnQsIGludCBiZWdpbiwgaW50IGVuZCk7CisKKyNkZWZpbmUgTkVUU05NUF9SRUdJU1RFUl9TVEFUSVNUSUNfSEFORExFUihyZWdpbmZvLCBzdGFydCwgc3RhdCkgICAgICAgIFwKKyAgbmV0c25tcF9yZWdpc3Rlcl9zdGF0aXN0aWNfaGFuZGxlcihyZWdpbmZvLCBzdGFydCwgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUXyAjIyBzdGF0ICMjIF9TVEFUU19TVEFSVCwgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVEFUXyAjIyBzdGF0ICMjIF9TVEFUU19FTkQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc25tcF92YXJzLmgKaW5kZXggZDI4MGE5YS4uNzdkYmQ3MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zbm1wX3ZhcnMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3NubXBfdmFycy5oCkBAIC00NSw2ICs0NSwyMyBAQAogCiAgICAgc3RydWN0IHZhcmlhYmxlOwogCisgICAgLyoqCisgICAgICogRHVwbGljYXRlcyBhIHZhcmlhYmxlLgorICAgICAqCisgICAgICogQHJldHVybiBQb2ludGVyIHRvIHRoZSBkdXBsaWNhdGUgdmFyaWFibGUgdXBvbiBzdWNjZXNzOyBOVUxMIHVwb24KKyAgICAgKiAgIGZhaWx1cmUuCisgICAgICoKKyAgICAgKiBAc2VlIHN0cnVjdCB2YXJpYWJsZQorICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlMQorICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlMgorICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlMworICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlNAorICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlNworICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlOAorICAgICAqIEBzZWUgc3RydWN0IHZhcmlhYmxlMTMKKyAgICAgKi8KKyAgICBzdHJ1Y3QgdmFyaWFibGUgKm5ldHNubXBfZHVwbGljYXRlX3ZhcmlhYmxlKGNvbnN0IHN0cnVjdCB2YXJpYWJsZSAqdmFyKTsKKwogICAgIC8qCiAgICAgICogRnVuY3Rpb24gcG9pbnRlciBjYWxsZWQgYnkgdGhlIG1hc3RlciBhZ2VudCBmb3Igd3JpdGVzLiAKICAgICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaCBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3Rhc2hfY2FjaGUuaAppbmRleCBjZmE4NWVmLi4zNzA5YTI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3N0YXNoX2NhY2hlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zdGFzaF9jYWNoZS5oCkBAIC0yMCw2ICsyMCw3IEBACiB9IG5ldHNubXBfc3Rhc2hfY2FjaGVfZGF0YTsKIAogLyogZnVuY3Rpb24gcHJvdG90eXBlcyAqLwordm9pZCBuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyKHZvaWQpOwogbmV0c25tcF9taWJfaGFuZGxlciAqbmV0c25tcF9nZXRfYmFyZV9zdGFzaF9jYWNoZV9oYW5kbGVyKHZvaWQpOwogbmV0c25tcF9taWJfaGFuZGxlciAqbmV0c25tcF9nZXRfc3Rhc2hfY2FjaGVfaGFuZGxlcih2b2lkKTsKIG5ldHNubXBfbWliX2hhbmRsZXIgKm5ldHNubXBfZ2V0X3RpbWVkX2JhcmVfc3Rhc2hfY2FjaGVfaGFuZGxlcihpbnQgdGltZW91dCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9zeXNPUlRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmZlYmFkMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvc3lzT1JUYWJsZS5oCkBAIC0wLDAgKzEsNjIgQEAKKyNpZm5kZWYgTkVUU05NUF9TWVNPUlRBQkxFX0gKKyNkZWZpbmUgTkVUU05NUF9TWVNPUlRBQkxFX0gKKworc3RydWN0IHN5c09SVGFibGUgeworICAgIGNoYXIgICAgICAgICAgICAqT1JfZGVzY3I7CisgICAgb2lkICAgICAgICAgICAgICpPUl9vaWQ7CisgICAgc2l6ZV90ICAgICAgICAgICBPUl9vaWRsZW47CisgICAgbmV0c25tcF9zZXNzaW9uICpPUl9zZXNzOworICAgIHVfbG9uZyAgICAgICAgICAgT1JfdXB0aW1lOworfTsKKworc3RydWN0IHJlZ2lzdGVyX3N5c09SX3BhcmFtZXRlcnMgeworICAgIGNoYXIgICAgICAgICAgICAqZGVzY3I7CisgICAgb2lkICAgICAgICAgICAgICpuYW1lOworICAgIHNpemVfdCAgICAgICAgICAgbmFtZWxlbjsKK307CisKKyNkZWZpbmUgU1lTX09SVEFCTEVfUkVHSVNURVJFRF9PSyAgICAgICAgICAgICAgMAorI2RlZmluZSBTWVNfT1JUQUJMRV9SRUdJU1RSQVRJT05fRkFJTEVEICAgICAgIC0xCisjZGVmaW5lIFNZU19PUlRBQkxFX1VOUkVHSVNURVJFRF9PSyAgICAgICAgICAgIDAKKyNkZWZpbmUgU1lTX09SVEFCTEVfTk9fU1VDSF9SRUdJU1RSQVRJT04gICAgICAtMQorCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvYWdlbnRfY2FsbGJhY2tzLmg+CisKKyNkZWZpbmUgUkVHSVNURVJfU1lTT1JfVEFCTEUodGhlb2lkLCBsZW4sIGRlc2NyKSAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RydWN0IHN5c09SVGFibGUgdDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX2Rlc2NyID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBkZXNjcik7ICAgICAgXAorICAgIHQuT1Jfb2lkID0gdGhlb2lkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9vaWRsZW4gPSBsZW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX3Nlc3MgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1JfdXB0aW1lID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OLCAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9SRUdfU1lTT1IsICZ0KTsgXAorICB9IHdoaWxlKDApOworCisjZGVmaW5lIFJFR0lTVEVSX1NZU09SX0VOVFJZKHRoZW9pZCwgZGVzY3IpICAgICAgICAgICAgICAgICAgICAgXAorICBSRUdJU1RFUl9TWVNPUl9UQUJMRSh0aGVvaWQsIHNpemVvZih0aGVvaWQpIC8gc2l6ZW9mKG9pZCksICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgZGVzY3IpCisKKyNkZWZpbmUgVU5SRUdJU1RFUl9TWVNPUl9UQUJMRSh0aGVvaWQsIGxlbikgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHN0cnVjdCBzeXNPUlRhYmxlIHQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX2Rlc2NyID0gTlVMTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl9vaWQgPSB0aGVvaWQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHQuT1Jfb2lkbGVuID0gbGVuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB0Lk9SX3Nlc3MgPSBOVUxMOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgdC5PUl91cHRpbWUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19BUFBMSUNBVElPTiwgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBEX0NBTExCQUNLX1JFUV9VTlJFR19TWVNPUiwgJnQpOyAgICBcCisgIH0gd2hpbGUoMCk7CisKKyNkZWZpbmUgVU5SRUdJU1RFUl9TWVNPUl9FTlRSWSh0aGVvaWQpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFVOUkVHSVNURVJfU1lTT1JfVEFCTEUodGhlb2lkLCBzaXplb2YodGhlb2lkKSAvIHNpemVvZihvaWQpKQorCisjZGVmaW5lIFVOUkVHSVNURVJfU1lTT1JfU0VTUyhzZXNzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzbm1wX2NhbGxfY2FsbGJhY2tzKFNOTVBfQ0FMTEJBQ0tfQVBQTElDQVRJT04sICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICBTTk1QRF9DQUxMQkFDS19SRVFfVU5SRUdfU1lTT1JfU0VTUywgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgc2Vzcyk7CisKKworI2VuZGlmIC8qIE5FVFNOTVBfU1lTT1JUQUJMRV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlLmgKaW5kZXggM2I4YmJjMi4uNzllNTg4YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGUuaApAQCAtOSw2ICs5LDEyIEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworLyoKICAqIEBmaWxlIHRhYmxlLmgKICAqCiAgKiBAYWRkdG9ncm91cCB0YWJsZQpAQCAtMTE1LDE1ICsxMjEsMTQgQEAKICAgICBuZXRzbm1wX21pYl9oYW5kbGVyCiAgICAgICAgICpuZXRzbm1wX2dldF90YWJsZV9oYW5kbGVyKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhYnJlcSk7Ci0gICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdGFicmVxKTsKLSAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9idWlsZF9vaWQobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqcmVnaW5mbywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0YWJsZV9pbmZvKTsKKyAgICB2b2lkICBuZXRzbm1wX2hhbmRsZXJfb3duc190YWJsZV9pbmZvKG5ldHNubXBfbWliX2hhbmRsZXIgKmhhbmRsZXIpOworICAgIHZvaWQgIG5ldHNubXBfcmVnaXN0cmF0aW9uX293bnNfdGFibGVfaW5mbyhuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWcpOworICAgIGludCAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUoICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJyZXEpOworICAgIGludCAgIG5ldHNubXBfdW5yZWdpc3Rlcl90YWJsZShuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvKTsKKyAgICBpbnQgICBuZXRzbm1wX3RhYmxlX2J1aWxkX29pZCggbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gICAgICAgICAgICAqcmVxaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gICAqdGFibGVfaW5mbyk7CiAgICAgaW50ICAgICAgICAgICAgCiAgICAgICAgIG5ldHNubXBfdGFibGVfYnVpbGRfb2lkX2Zyb21faW5kZXgobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLApAQCAtMTQ3LDYgKzE1MiwxMCBAQAogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8KICAgICAgICAgKm5ldHNubXBfZmluZF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyhuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnJlZ2luZm8pOworICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKgorICAgICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2Nsb25lKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRyaSk7CisgICAgdm9pZCBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX2ZyZWUobmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqKTsKKwogICAgIG5ldHNubXBfaW5kZXggKiBuZXRzbm1wX3RhYmxlX2luZGV4X2ZpbmRfbmV4dF9yb3cobmV0c25tcF9jb250YWluZXIgKmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGJscmVxKTsKIApAQCAtMTU4LDEzICsxNjcsOSBAQAogCiAjZGVmaW5lIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleCh0aW5mbywgdHlwZSkgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdGluZm8tPmluZGV4ZXMsIE5VTEwsIDAsICh1X2NoYXIpdHlwZSwgTlVMTCwgMCk7CiAKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdm9pZCAgICAgICAgICAgCiAgICAgICAgIG5ldHNubXBfdGFibGVfaGVscGVyX2FkZF9pbmRleGVzKG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRpbmZvLCAuLi4pOwotI2Vsc2UKLSAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModmFfYWxpc3QpOwotI2VuZGlmCiAKICAgICBpbnQgbmV0c25tcF9jaGVja19nZXRuZXh0X3JlcGx5KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbiwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2NvbnRhaW5lci5oCmluZGV4IGQ1MWFjYjEuLmIzNDIxMTAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9jb250YWluZXIuaApAQCAtNTIsNiArNTIsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYnJlcSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIga2V5X3R5cGUpOworICAgIGludCAgICAgICAgICAgIAorICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3VucmVnaXN0ZXIobmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbyk7CiAgICAgCiAgICAgLyoqIHJldHJpZXZlIHRoZSBjb250YWluZXIgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAqLwogICAgIG5ldHNubXBfY29udGFpbmVyKgpAQCAtODcsNiArODksOCBAQAogCiAgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfaW5zZXJ0KG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2luZGV4ICpyb3cpOworICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X3JlbW92ZShuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pbmRleCAgICAgICAgKnJvdyk7CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBDb250YWluZXIgVGFibGUgQVBJOiBSb3cgb3BlcmF0aW9ucwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9kYXRhc2V0LmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAppbmRleCBjYzI2ZWI2Li42NmUzYjNjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2RhdGFzZXQuaApAQCAtMTEzLDEyICsxMTMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50LCBpbnQsIGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgICpkZWZhdWx0X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRlZmF1bHRfdmFsdWVfbGVuKTsKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdm9pZCBuZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cobmV0c25tcF90YWJsZV9kYXRhX3NldCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKTsKLSNlbHNlCi0gICAgdm9pZCBuZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3codmFfYWxpc3QpOwotI2VuZGlmCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTM2LDYgKzEzMiwxNiBAQAogICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZQogICAgICAgICAqbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0X2NvbHVtbihuZXRzbm1wX3JlcXVlc3RfaW5mbyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQpOworICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKioKKyAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZ2V0X29yX2NyZWF0ZV9zdGFzaChuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqYXJpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRkcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdHJpKTsKKyAgICBuZXRzbm1wX3RhYmxlX3JvdyAqCisgICAgbmV0c25tcF90YWJsZV9kYXRhc2V0X2dldF9uZXdyb3cobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJvb3RvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKmRhdGF0YWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqdGFibGVfaW5mbyk7CiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpAQCAtMTQ0LDYgKzE1MCw4IEBACiAKICAgICB2b2lkIG5ldHNubXBfcmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlKG5ldHNubXBfdGFibGVfZGF0YV9zZXQgKnRhYmxlX3NldCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnJlZ2lzdHJhdGlvbl9uYW1lKTsKKyAgICB2b2lkIG5ldHNubXBfdW5yZWdpc3Rlcl9hdXRvX2RhdGFfdGFibGUobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0LAorCQkJCQkgICAgY2hhciAqcmVnaXN0cmF0aW9uX25hbWUpOwogICAgIHZvaWQgbmV0c25tcF9jb25maWdfcGFyc2VfdGFibGVfc2V0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKICAgICB2b2lkIG5ldHNubXBfY29uZmlnX3BhcnNlX2FkZF9yb3coICBjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CiAKQEAgLTE3NywxMSArMTg1LDcgQEAKIAogICAgIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9pbmRleChuZXRzbm1wX3RhYmxlX2RhdGFfc2V0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRhYmxlLCB1X2NoYXIgdHlwZSk7Ci0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZvaWQgbmV0c25tcF90YWJsZV9zZXRfYWRkX2luZGV4ZXMobmV0c25tcF90YWJsZV9kYXRhX3NldCAqdHNldCwgLi4uKTsKLSNlbHNlCi0gICAgdm9pZCBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh2YV9hbGlzdCk7Ci0jZW5kaWYKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX2l0ZXJhdG9yLmgKaW5kZXggOGNkYjFlNy4uYzcxZGQ0ZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV9pdGVyYXRvci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfaXRlcmF0b3IuaApAQCAtNTEsNiArNTEsOSBAQAogICAgICAgIFRoZSBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gdHlwZWRlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgdGhpcyBzdHJ1Y3QgaWYgeW91IHdvdWxkIHByZWZlci4KICAgICAgKi8KICAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2l0ZXJhdG9yX2luZm9fcyB7CisgICAgICAgLyoqIE51bWJlciBvZiBoYW5kbGVycyB0aGF0IG93biB0aGlzIGRhdGEgc3RydWN0dXJlLiAqLworICAgICAgIGludCByZWZjbnQ7CisKICAgICAgICAvKiogUmVzcG9uc2libGUgZm9yOiByZXR1cm5pbmcgdGhlIGZpcnN0IHNldCBvZiAiaW5kZXgiIGRhdGEsIGEKICAgICAgICAgICAgbG9vcC1jb250ZXh0IHBvaW50ZXIsIGFuZCBvcHRpb25hbGx5IGEgZGF0YSBjb250ZXh0CiAgICAgICAgICAgIHBvaW50ZXIgKi8KQEAgLTk0LDYgKzk3LDcgQEAKICAgICAgICAgdm9pZCAgICAgICAgICAgKm15dm9pZDsKICAgICAgICAgaW50ICAgICAgICAgICAgIGZsYWdzOwogI2RlZmluZSBORVRTTk1QX0lURVJBVE9SX0ZMQUdfU09SVEVECTB4MDEKKyNkZWZpbmUgTkVUU05NUF9IQU5ETEVSX09XTlNfSUlORk8JMHgwMgogCiAgICAgICAgLyoqIEEgcG9pbnRlciB0byB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QKICAgICAgICAgICAgdGhpcyBpdGVyYXRvciBpcyByZWdpc3RlcmVkIGFsb25nIHdpdGguICovCkBAIC0xMTYsMTEgKzEyMCwxMSBAQAogICogSXRlcmF0b3IgQVBJOiBNSUIgbWFpbnRlbmFuY2UKICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gKi8KIAorICAgIHZvaWQgICBuZXRzbm1wX2hhbmRsZXJfb3duc19pdGVyYXRvcl9pbmZvKG5ldHNubXBfbWliX2hhbmRsZXIgKmgpOwogICAgIG5ldHNubXBfbWliX2hhbmRsZXIKICAgICAgICAgICAqbmV0c25tcF9nZXRfdGFibGVfaXRlcmF0b3JfaGFuZGxlcihuZXRzbm1wX2l0ZXJhdG9yX2luZm8gKmlpbmZvKTsKLSAgICBpbnQgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvciggICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm8pOworICAgIGludCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyk7CiAgICAgdm9pZCAgbmV0c25tcF9pdGVyYXRvcl9kZWxldGVfdGFibGUobmV0c25tcF9pdGVyYXRvcl9pbmZvICppaW5mbyk7CiAKICAgICB2b2lkICpuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKTsKQEAgLTEyOCw2ICsxMzIsMTAgQEAKIAogICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyIG5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXI7CiAKKyNkZWZpbmUgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvcjIocmVnaW5mbywgaWluZm8pICAgICAgICBcCisgICAgKCgoaWluZm8pLT5mbGFncyB8PSBORVRTTk1QX0hBTkRMRVJfT1dOU19JSU5GTyksICAgICAgICAgICBcCisgICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfaXRlcmF0b3IoKHJlZ2luZm8pLCAoaWluZm8pKSkKKwogCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBJdGVyYXRvciBBUEk6IFJvdyBvcGVyYXRpb25zCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3RhYmxlX3RkYXRhLmgKaW5kZXggMjQyYjE1OS4uYjBhMTY4OSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC90YWJsZV90ZGF0YS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvdGFibGVfdGRhdGEuaApAQCAtMjEsNiArMjEsNyBAQAogI2RlZmluZSBUQUJMRV9UREFUQV9UQUJMRSAidGFibGVfdGRhdGFfdGFibGUiCiAKICNkZWZpbmUgVERBVEFfRkxBR19OT19TVE9SRV9JTkRFWEVTICAgMHgwMQorI2RlZmluZSBUREFUQV9GTEFHX05PX0NPTlRBSU5FUiAgICAgICAweDAyIC8qIHVzZXIgd2lsbCBwcm92aWRlIGNvbnRhaW5lciAqLwogCiAgICAgLyoKICAgICAgKiBUaGUgKHRhYmxlLWluZGVwZW5kZW50KSBwZXItcm93IGRhdGEgc3RydWN0dXJlCkBAIC04Myw5ICs4NCwxMCBAQAogCiAgICAgbmV0c25tcF9taWJfaGFuZGxlciAqbmV0c25tcF9nZXRfdGRhdGFfaGFuZGxlcihuZXRzbm1wX3RkYXRhICp0YWJsZSk7CiAKLSAgICBpbnQgbmV0c25tcF90ZGF0YV9yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGEgICAgICAgICAgICAgICAgKnRhYmxlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm8pOworICAgIGludCBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKCAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdGRhdGEgICAgICAgICAgICAgICAgICAgKnRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbyk7CisgICAgaW50IG5ldHNubXBfdGRhdGFfdW5yZWdpc3RlcihuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWdpbmZvKTsKIAogICAgIG5ldHNubXBfdGRhdGEgICAgICAqbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlKCAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAgKm5ldHNubXBfdGRhdGFfZXh0cmFjdF9jb250YWluZXIobmV0c25tcF9yZXF1ZXN0X2luZm8gKik7CkBAIC05Myw2ICs5NSw3IEBACiAgICAgdm9pZCAgICAgICAgICAgICAgICpuZXRzbm1wX3RkYXRhX2V4dHJhY3RfZW50cnkoICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICopOwogCiAgICAgdm9pZCBuZXRzbm1wX2luc2VydF90ZGF0YV9yb3cobmV0c25tcF9yZXF1ZXN0X2luZm8gKiwgbmV0c25tcF90ZGF0YV9yb3cgKik7CisgICAgdm9pZCBuZXRzbm1wX3JlbW92ZV90ZGF0YV9yb3cobmV0c25tcF9yZXF1ZXN0X2luZm8gKiwgbmV0c25tcF90ZGF0YV9yb3cgKik7CiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC93YXRjaGVyLmggYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAppbmRleCA0M2ExOWQ3Li42NzEwNGVlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L3dhdGNoZXIuaApAQCAtOCw2ICs4LDEwIEBACiBleHRlcm4gIkMiIHsKICNlbmRpZgogCisvKiogQGluZ3JvdXAgd2F0Y2hlcgorICogIEB7CisgKi8KKwogLyoKICAqIGlmIGhhbmRsZXIgZmxhZyBoYXMgdGhpcyBiaXQgc2V0LCB0aGUgdGltZXN0YW1wIHdpbGwgYmUKICAqIHRyZWF0ZWQgYXMgYSBwb2ludGVyIHRvIHRoZSB0aW1lc3RhbXAuIElmIHRoaXMgYml0IGlzCkBAIC0xNiw4ICsyMCwzNiBAQAogICovCiAjZGVmaW5lIE5FVFNOTVBfV0FUQ0hFUl9ESVJFQ1QgTUlCX0hBTkRMRVJfQ1VTVE9NMQogCi0jZGVmaW5lIFdBVENIRVJfRklYRURfU0laRSAgICAweDAxCi0jZGVmaW5lIFdBVENIRVJfTUFYX1NJWkUgICAgICAweDAyCisvKiogVGhlIHNpemUgb2YgdGhlIHdhdGNoZWQgb2JqZWN0IGlzIGNvbnN0YW50LgorICogIEBoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBXQVRDSEVSX0ZJWEVEX1NJWkUgICAgIDB4MDEKKy8qKiBUaGUgbWF4aW11bSBzaXplIG9mIHRoZSB3YXRjaGVkIG9iamVjdCBpcyBzdG9yZWQgaW4gbWF4X3NpemUuCisgKiAgSWYgV0FUQ0hFUl9TSVpFX1NUUkxFTiBpcyBzZXQgdGhlbiBpdCBpcyBzdXBwb3NlZCB0aGF0IG1heF9zaXplICsgMQorICogIGJ5dGVzIGNvdWxkIGJlIHN0b3JlZCBpbiB0aGUgYnVmZmVyLgorICogIEBoaWRlaW5pdGlhbGl6ZXIKKyAqLworI2RlZmluZSBXQVRDSEVSX01BWF9TSVpFICAgICAgIDB4MDIKKy8qKiBJZiBzZXQgdGhlbiB0aGUgdmFyaWFibGUgZGF0YV9zaXplX3AgcG9pbnRzIHRvIGlzIHN1cHBvc2VkIHRvIGhvbGQgdGhlCisgKiAgY3VycmVudCBzaXplIG9mIHRoZSB3YXRjaGVkIG9iamVjdCBhbmQgd2lsbCBiZSB1cGRhdGVkIG9uIHdyaXRlcy4KKyAqICBAaGlkZWluaXRpYWxpemVyCisgKiAgQHNpbmNlIE5ldC1TTk1QIDUuNQorICovCisjZGVmaW5lIFdBVENIRVJfU0laRV9JU19QVFIgICAgMHgwNAorLyoqIElmIHNldCB0aGVuIGRhdGEgaXMgc3VwcHBvc2VkIHRvIGJlIGEgemVyby10ZXJtaW5hdGVkIGNoYXJhY3RlciBhcnJheQorICogIGFuZCBib3RoIGRhdGFfc2l6ZSBhbmQgZGF0YV9zaXplX3AgYXJlIGlnbm9yZWQuIEFkZGl0aW9uYWxseSBcXDAgaXMgYQorICogIGZvcmJpZGRlbiBjaGFyYWN0ZXIgaW4gdGhlIGRhdGEgc2V0LgorICogIEBoaWRlaW5pdGlhbGl6ZXIKKyAqICBAc2luY2UgTmV0LVNOTVAgNS41CisgKi8KKyNkZWZpbmUgV0FUQ0hFUl9TSVpFX1NUUkxFTiAgICAweDA4CisvKiogSWYgc2V0IHRoZW4gc2l6ZSBpcyBpbiB1bml0cyBvZiBvYmplY3QgaWRlbnRpZmllcnMuCisgKiAgVGhpcyBpcyB1c2VmdWwgaWYgeW91IGhhdmUgYW4gT0lEIGFuZCB0cmFja3MgdGhlIE9JRF9MRU5HVEggb2YgaXQgYXMKKyAqICBvcHBvc2VkIHRvIGl0J3Mgc2l6ZS4KKyAqICBAaGlkZWluaXRpYWxpemVyCisgKiAgQHNpbmNlIE5ldC1TTk1QIDUuNS4xCisgKi8KKyNkZWZpbmUgV0FUQ0hFUl9TSVpFX1VOSVRfT0lEUyAweDEwCiAKIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfd2F0Y2hlcl9pbmZvX3MgewogICAgIHZvaWQgICAgICpkYXRhOwpAQCAtMjUsMTIgKzU3LDE5IEBACiAgICAgc2l6ZV90ICAgIG1heF9zaXplOwogICAgIHVfY2hhciAgICB0eXBlOwogICAgIGludCAgICAgICBmbGFnczsKKyAgICBzaXplX3QgICAqZGF0YV9zaXplX3A7CiB9IG5ldHNubXBfd2F0Y2hlcl9pbmZvOwogCisvKiogQH0gKi8KKwogaW50IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9pbnN0YW5jZSggbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndpbmZvKTsKK2ludCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfaW5zdGFuY2UyKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3dhdGNoZXJfaW5mbyAgICAgICAgICp3aW5mbyk7CiBpbnQgbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhciggICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF93YXRjaGVyX2luZm8gICAgICAgICAqd2luZm8pOworaW50IG5ldHNubXBfcmVnaXN0ZXJfd2F0Y2hlZF9zY2FsYXIyKCAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqcmVnaW5mbywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndpbmZvKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3dhdGNoZWRfdGltZXN0YW1wKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXJrZXJfdCB0aW1lc3RhbXApOwogaW50IG5ldHNubXBfd2F0Y2hlZF90aW1lc3RhbXBfcmVnaXN0ZXIobmV0c25tcF9taWJfaGFuZGxlciAqd2hhbmRsZXIsCkBAIC00NCwzOCArODMsNTYgQEAKICAqLwogCiBpbnQgbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2xvbmdfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfaW50X3NjYWxhcihjb25zdCBjaGFyICpuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICogaXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOZXRzbm1wX05vZGVfSGFuZGxlciAqIHN1YmhhbmRsZXIpOwogaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9zY2FsYXIoY29uc3QgY2hhciAqbmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIGl0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKTsKIGludCBuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9jb3VudGVyMzJfc2NhbGFyKGNvbnN0IGNoYXIgKm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiByZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKiBpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfTm9kZV9IYW5kbGVyICogc3ViaGFuZGxlcik7CiAKICNkZWZpbmUgV0FUQ0hFUl9IQU5ETEVSX05BTUUgIndhdGNoZXIiCiAKIG5ldHNubXBfbWliX2hhbmRsZXIgICpuZXRzbm1wX2dldF93YXRjaGVyX2hhbmRsZXIodm9pZCk7Ci1uZXRzbm1wX3dhdGNoZXJfaW5mbyAqbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKHZvaWQgKiwgc2l6ZV90LCB1X2NoYXIsIGludCk7CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfaW5pdF93YXRjaGVyX2luZm8obmV0c25tcF93YXRjaGVyX2luZm8gKiwgdm9pZCAqLCBzaXplX3QsIHVfY2hhciwgaW50KTsKKworbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9pbml0X3dhdGNoZXJfaW5mbzYobmV0c25tcF93YXRjaGVyX2luZm8gKiwKKwkJCSAgIHZvaWQgKiwgc2l6ZV90LCB1X2NoYXIsIGludCwgc2l6ZV90LCBzaXplX3QqKTsKKworbmV0c25tcF93YXRjaGVyX2luZm8gKgorbmV0c25tcF9jcmVhdGVfd2F0Y2hlcl9pbmZvKHZvaWQgKiwgc2l6ZV90LCB1X2NoYXIsIGludCk7CisKK25ldHNubXBfd2F0Y2hlcl9pbmZvICoKK25ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbzYodm9pZCAqLCBzaXplX3QsIHVfY2hhciwgaW50LCBzaXplX3QsIHNpemVfdCopOworCituZXRzbm1wX3dhdGNoZXJfaW5mbyAqCituZXRzbm1wX2Nsb25lX3dhdGNoZXJfaW5mbyhuZXRzbm1wX3dhdGNoZXJfaW5mbyAqd2luZm8pOwordm9pZAorbmV0c25tcF9vd25zX3dhdGNoZXJfaW5mbyhuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyKTsKKwogTmV0c25tcF9Ob2RlX0hhbmRsZXIgIG5ldHNubXBfd2F0Y2hlcl9oZWxwZXJfaGFuZGxlcjsKIAogbmV0c25tcF9taWJfaGFuZGxlciAgKm5ldHNubXBfZ2V0X3dhdGNoZWRfdGltZXN0YW1wX2hhbmRsZXIodm9pZCk7CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCmluZGV4IDY3Y2Q2YTQuLjA0OGVlZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCkBAIC04LDE0ICs4LDg0IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKiBDb25maWcgSGFuZGxlcnMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqZmlsZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2VMaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqZmlsZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnVzYWdlTGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoY29uc3QgY2hhciAqZmlsZVByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikgKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdXNhZ2VMaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKmZpbGVQcmVmaXgsIGNvbnN0IGNoYXIgKnRva2VuKTsKKworICAgIAkJCQkvKiBEZWZpbmVkIGluIG1pYi5jLCByYXRoZXIgdGhhbiByZWFkX2NvbmZpZy5jICovCisgICAgdm9pZCAgICAgICAgICAgIHJlZ2lzdGVyX21pYl9oYW5kbGVycyh2b2lkKTsKKyAgICB2b2lkICAgICAgICAgICAgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKHZvaWQpOworCisgICAgLyogQXBwbGljYXRpb24gSGFuZGxlcnMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZUxpbmUpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjaGFyICopLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1c2FnZUxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4pOworCisgICAgLyogUmVhZGluZyBDb25maWcgRmlsZXMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ3Modm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcmVhZF9wcmVtaWJfY29uZmlncyh2b2lkKTsKKworICAgIC8qIEhlbHAgU3RyaW5ncyBhbmQgRXJyb3JzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoY29uc3QgY2hhciAqbGVhZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgY29uZmlnX3BlcnJvcihjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGNvbmZpZ19wd2Fybihjb25zdCBjaGFyICopOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCiAgICAgLyoKLSAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQotICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgotICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSByb3V0aW5lcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgdGhlCi0gICAgICogIEFQSSB3aWxsIGJlIGlkZW50aWZpZWQsIGFuZCBsaXN0ZWQgaGVyZSBkaXJlY3RseS4KKyAgICAgKiAgICBIYXZpbmcgZXh0cmFjdGVkIHRoZSBtYWluICgicHVibGljIEFQSSIpIGNhbGxzIHJlbGV2YW50CisgICAgICogIHRvIHRoaXMgYXJlYSBvZiB0aGUgTmV0LVNOTVAgcHJvamVjdCwgdGhlIG5leHQgc3RlcCBpcyB0bworICAgICAqICBpZGVudGlmeSB0aGUgcmVsYXRlZCAicHVibGljIGludGVybmFsIEFQSSIgcm91dGluZXMuCiAgICAgICoKLSAgICAgKiAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBoZWFkZXIgZmlsZSBpcyBhIHBsYWNlaG9sZGVyLAotICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCisgICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGdhdGhlcmVkCisgICAgICogIHRvZ2V0aGVyIGludG8gYSBjb21wYW5pb24gJ2xpYnJhcnkvY29uZmlnX2FwaS5oJyBoZWFkZXIgZmlsZS4KKyAgICAgKiAgW09yIHNvbWUgc3VpdGFibGUgbmFtZV0KKyAgICAgKgorICAgICAqICAgIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZQorICAgICAqICB0cmFkaXRpb25hbCBoZWFkZXJzIHRoYXQgcHJvdmlkZWQgdGhlIGFib3ZlIGRlZmluaXRpb25zCisgICAgICogIHdpbGwgcHJvYmFibHkgYWxzbyBjb3ZlciB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgQVBJIGNhbGxzLgorICAgICAqICBIZW5jZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZToKICAgICAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2FycC5oCmluZGV4IDRjNmJhZTMuLmJhNGJiMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvYXJwLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9hcnAuaApAQCAtNzMsNiArNzMsNyBAQAogCiAgICBpbnQgICAgICAgZmxhZ3M7IC8qIGZvciBuZXQtc25tcCB1c2UgKi8KIAorICAgdW5zaWduZWQgIGdlbmVyYXRpb247CiAgICBvaWQgICAgICAgaWZfaW5kZXg7CiAKICAgIHVfY2hhciAgICBhcnBfcGh5c2FkZHJlc3NbTkVUU05NUF9BQ0NFU1NfQVJQX1BIWVNBRERSX0JVRl9TSVpFXTsKQEAgLTgzLDMzICs4NCw0MiBAQAogICAgdV9jaGFyICAgIGFycF90eXBlOyAgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFUeXBlIDEtNSAqLwogICAgdV9jaGFyICAgIGFycF9zdGF0ZTsgICAgICAgICAgLyogaW5ldE5ldFRvTWVkaWFTdGF0ZSAxLTcgKi8KIAorICAgdV9sb25nICAgIGFycF9sYXN0X3VwZGF0ZWQ7ICAgLyogdGltZXRpY2tzIG9mIGxhc3QgdXBkYXRlICovCiB9IG5ldHNubXBfYXJwX2VudHJ5OwogCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9FTlRSWV9GTEFHX0RFTEVURSAgICAgIDB4MDAwMDAwMDEKIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBBQ0NFU1MgZnVuY3Rpb24gcHJvdG90eXBlcwogICovCi0vKgotICogaWZjb250YWluZXIgaW5pdAotICovCi1uZXRzbm1wX2NvbnRhaW5lciAqIG5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfaW5pdCh1X2ludCBpbml0X2ZsYWdzKTsKLSNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0lOSVRfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAorc3RydWN0IG5ldHNubXBfYXJwX2FjY2Vzc19zOwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9hcnBfYWNjZXNzX3MgbmV0c25tcF9hcnBfYWNjZXNzOwogCi0vKgotICogaWZjb250YWluZXIgbG9hZCBhbmQgZnJlZQotICovCi1uZXRzbm1wX2NvbnRhaW5lcioKLW5ldHNubXBfYWNjZXNzX2FycF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciogY29udGFpbmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7Ci0jZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9MT0FEX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKK3R5cGVkZWYgdm9pZCAoTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSkobmV0c25tcF9hcnBfYWNjZXNzICosIG5ldHNubXBfYXJwX2VudHJ5Kik7Cit0eXBlZGVmIHZvaWQgKE5ldHNubXBBY2Nlc3NBcnBHQykgICAgKG5ldHNubXBfYXJwX2FjY2VzcyAqKTsKIAotdm9pZCBuZXRzbm1wX2FjY2Vzc19hcnBfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZnJlZV9mbGFncyk7Ci0jZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0FSUF9GUkVFX05PRkxBR1MgICAgICAgICAgICAgICAweDAwMDAKLSNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0ZSRUVfRE9OVF9DTEVBUiAgICAgICAgICAgIDB4MDAwMQotI2RlZmluZSBORVRTTk1QX0FDQ0VTU19BUlBfRlJFRV9LRUVQX0NPTlRBSU5FUiAgICAgICAgMHgwMDAyCitzdHJ1Y3QgbmV0c25tcF9hcnBfYWNjZXNzX3MgeworICAgIHZvaWQgKm1hZ2ljOworICAgIHZvaWQgKmFyY2hfbWFnaWM7CisgICAgaW50IHN5bmNocm9uaXplZDsKKyAgICB1bnNpZ25lZCBnZW5lcmF0aW9uOworICAgIE5ldHNubXBBY2Nlc3NBcnBVcGRhdGUgKnVwZGF0ZV9ob29rOworICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vazsKKyAgICBjaGFyICpjYWNoZV9leHBpcmVkOworfTsKIAorbmV0c25tcF9hcnBfYWNjZXNzICoKK25ldHNubXBfYWNjZXNzX2FycF9jcmVhdGUodV9pbnQgaW5pdF9mbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTmV0c25tcEFjY2Vzc0FycFVwZGF0ZSAqdXBkYXRlX2hvb2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBBY2Nlc3NBcnBHQyAqZ2NfaG9vaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpjYWNoZV90aW1lb3V0LCBpbnQgKmNhY2hlX2ZsYWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjYWNoZV9leHBpcmVkKTsKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfQVJQX0NSRUFURV9OT0ZMQUdTICAgICAgICAgICAgIDB4MDAwMAorCitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2RlbGV0ZShuZXRzbm1wX2FycF9hY2Nlc3MgKmFjY2Vzcyk7CitpbnQgbmV0c25tcF9hY2Nlc3NfYXJwX2xvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpOworaW50IG5ldHNubXBfYWNjZXNzX2FycF91bmxvYWQobmV0c25tcF9hcnBfYWNjZXNzICphY2Nlc3MpOwogCiAvKgogICogY3JlYXRlL2ZyZWUgYSBhcnArZW50cnkKQEAgLTExOSw2ICsxMjksOSBAQAogCiB2b2lkIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV9mcmVlKG5ldHNubXBfYXJwX2VudHJ5ICogZW50cnkpOwogCit2b2lkIG5ldHNubXBfYWNjZXNzX2FycF9lbnRyeV91cGRhdGUobmV0c25tcF9hcnBfZW50cnkgKmVudHJ5LAorICAgICAgICBuZXRzbm1wX2FycF9lbnRyeSAqbmV3X2RhdGEpOworCiAvKgogICogZmluZCBlbnRyeSBpbiBjb250YWluZXIKICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2RlZmF1bHRyb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2FjMThmCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9kZWZhdWx0cm91dGVyLmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qCisgKiBkZWZhdWx0cm91dGVyIGRhdGEgYWNjZXNzIGhlYWRlcgorICoKKyAqICRJZDokCisgKi8KKyNpZm5kZWYgTkVUU05NUF9BQ0NFU1NfREVGQVVMVFJPVVRFUl9ICisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSAorCisjIGlmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyoKKyAqIHN0cnVjdHVyZSBkZWZpbml0aW9ucworICovCisjaWYgZGVmaW5lZCggTkVUU05NUF9FTkFCTEVfSVBWNiApCisjICAgZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkUgMTYgICAvKiBYWFg6IDIwLCBmb3IgaXA2ej8gKi8KKyNlbHNlCisjICAgZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkUgNAorI2VuZGlmCisKKworLyoKKyAqIG5ldHNubXBfZGVmYXVsdF9yb3V0ZV9lbnRyeQorICovCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfcyB7CisKKyAgICBuZXRzbm1wX2luZGV4IG9pZF9pbmRleDsgICAvKiBNVVNUIEJFIEZJUlNUISEgZm9yIGNvbnRhaW5lciB1c2UgKi8KKyAgICBvaWQgICAgICAgICAgIG5zX2RyX2luZGV4OyAvKiBhcmJpdHJhcnkgaW5kZXggKi8KKworICAgIGludCAgICAgIGZsYWdzOyAvKiBmb3IgbmV0LXNubXAgdXNlICovCisKKyAgICAvKgorICAgICAqIG1pYiByZWxhdGVkIGRhdGEKKyAgICAgKi8KKyAgICB1X2NoYXIgICBkcl9hZGRyZXNzdHlwZTsgICAgLyogaXBEZWZhdWx0Um91dGVyQWRkcmVzc1R5cGUgKi8KKyAgICBjaGFyICAgICBkcl9hZGRyZXNzW05FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfQlVGX1NJWkVdOyAvKiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzICovCisgICAgc2l6ZV90ICAgZHJfYWRkcmVzc19sZW47ICAgIC8qIGxlbmd0aCBvZiBpcERlZmF1bHRSb3V0ZXJBZGRyZXNzICovCisgICAgb2lkICAgICAgZHJfaWZfaW5kZXg7ICAgICAgIC8qIGlwRGVmYXVsdFJvdXRlcklmSW5kZXggKi8KKyAgICB1aW50MzJfdCBkcl9saWZldGltZTsgICAgICAgLyogaXBEZWZhdWx0Um91dGVyTGlmZXRpbWUgKDAtNjU1MzUpICovCisgICAgY2hhciAgICAgZHJfcHJlZmVyZW5jZTsgICAgIC8qIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgKC0yLC0xLDAsMSkgKi8KKworfSBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnk7CisKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBBQ0NFU1MgZnVuY3Rpb24gcHJvdG90eXBlcworICovCisvKgorICogY29udGFpbmVyIGluaXQKKyAqLworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9hY2Nlc3NfZGVmYXVsdHJvdXRlcl9jb250YWluZXJfaW5pdCh1X2ludCBmbGFncyk7CisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSU5JVF9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSU5JVF9BRERMX0lEWF9CWV9BRERSICAgICAgMHgwMDAxCisKKy8qCisgKiBjb250YWluZXIgbG9hZAorICovCituZXRzbm1wX2NvbnRhaW5lcioKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbG9hZF9mbGFncyk7CisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfTE9BRF9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfTE9BRF9JUFY0X09OTFkgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfTE9BRF9JUFY2X09OTFkgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfTE9BRF9BRERMX0lEWF9CWV9BRERSICAgICAgMHgwMDA0CisKKy8qCisgKiBjb250YWluZXIgZnJlZQorICovCit2b2lkCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZyZWVfZmxhZ3MpOworI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfRE9OVF9DTEVBUiAgICAgICAgICAgIDB4MDAwMQorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19ERUZBVUxUUk9VVEVSX0ZSRUVfS0VFUF9DT05UQUlORVIgICAgICAgIDB4MDAwMgorCisvKgorICogZW50cnkgY3JlYXRlCisgKi8KK25ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2NyZWF0ZSh2b2lkKTsKKworLyoKKyAqIGVudHJ5IGxvYWQKKyAqLworaW50CituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2xvYWQoc2l6ZV90ICpudW1fZW50cmllcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RlZmF1bHRyb3V0ZXJfZW50cnkgKiplbnRyaWVzKTsKKworLyoKKyAqIGVudHJ5IHVwZGF0ZQorICovCitpbnQKK25ldHNubXBfYWNjZXNzX2RlZmF1bHRyb3V0ZXJfZW50cnlfdXBkYXRlKG5ldHNubXBfZGVmYXVsdHJvdXRlcl9lbnRyeSAqbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICpyaHMpOworCisvKgorICogZW50cnkgZnJlZQorICovCit2b2lkCituZXRzbm1wX2FjY2Vzc19kZWZhdWx0cm91dGVyX2VudHJ5X2ZyZWUobmV0c25tcF9kZWZhdWx0cm91dGVyX2VudHJ5ICplbnRyeSk7CisKKworCisvKiotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworCisjIGlmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5FVFNOTVBfQUNDRVNTX0RFRkFVTFRST1VURVJfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaCBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaW50ZXJmYWNlLmgKaW5kZXggNTNkZmIzNi4uMjAwMTNlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pbnRlcmZhY2UuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2ludGVyZmFjZS5oCkBAIC0zNCw2ICszNCwyMCBAQAogI2RlZmluZSBORVRTTk1QX0lOVEVSRkFDRV9GTEFHU19IQVNfVjZfUkVBQ0hBQkxFICAgICAgICAweDAwMDQwMDAwCiAjZGVmaW5lIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0hBU19WNl9JRklEICAgICAgICAgICAgIDB4MDAwODAwMDAKICNkZWZpbmUgTkVUU05NUF9JTlRFUkZBQ0VfRkxBR1NfSEFTX1Y2X0ZPUldBUkRJTkcgICAgICAgMHgwMDEwMDAwMAorLyogU29tZSBwbGF0Zm9ybXMsIGUuZy5MaW51eCwgZG8gbm90IHByb3ZpZGUgc3RhbmRhbG9uZSBjb3VudGVyCisgKiBmb3IgaW5jb21pbmcgdW5pY2FzdCBwYWNrZXRzIC0gdGhleSBwcm92aWRlIGNvdW50ZXIgb2YgYWxsIHBhY2tldHMKKyAqICsgc2VwYXJhdGUgY291bnRlciBmb3IgdGhlIG11bHRpY2FzdCBvbmVzLgorICogVGhhdCBtZWFucyB0aGUgY291bnRlciBvZiBhbGwgcGFja2V0cyBtdXN0IHdhdGNoZWQgYW5kIGNoZWNrZWQKKyAqIGZvciBvdmVyZmxvd3MgdG8gcmVjb25zdHJ1Y3QgaXRzIDY0LWJpdCB2YWx1ZSAoaS5lLiBhcyB1c3VhbAorICogZm9yIGNvdW50ZXIgb2YgdW5pY2FzdCBwYWNrZXRzKSwgYW5kIGFmdGVyIGl0cyBleHBhbnNpb24gdG8gNjQtYml0cywKKyAqIG5yLm9mIG11bHRpY2FzdCBwYWNrZXRzIG11c3QgYmUgc3Vic3RyYWN0ZWQgdG8gZ2V0IG5yLiBvZiB1bmljYXN0CisgKiBwYWNrZXRzLgorICogVGhpcyBmbGFnIG1hcmtzIHN0YXRzIG9mIHN1Y2ggcGxhdGZvcm1zLiBOci4gb2YgYWxsIGluY29taW5nIHBhY2tldHMsCisgKiBwcm92aWRlZCBieSB0aGUgcGxhdGZvcm0sIG11c3QgYmUgc3RvcmVkIGluCisgKiBuZXRzbm1wX2ludGVyZmFjZV9zdGF0cy5pYWxsIGFuZCBuZXRzbm1wX2ludGVyZmFjZV9zdGF0cy5pdWNhc3Qgd2lsbAorICogYmUgYXV0b21hdGljYWxseSBjYWxjdWxhdGVkIGxhdGVyLgorICovCisjZGVmaW5lIE5FVFNOTVBfSU5URVJGQUNFX0ZMQUdTX0NBTENVTEFURV9VQ0FTVCAgICAgICAgIDB4MDAyMDAwMDAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIGNvbnN0YW50cyBmb3IgZW51bXMgZm9yIHRoZSBNSUIgbm9kZQpAQCAtOTMsNiArMTA3LDExIEBACiAgICAgICovCiAgICAvKiogaW5wdXQgKi8KICAgICBzdHJ1Y3QgY291bnRlcjY0IGlieXRlczsKKyAgICAvKgorICAgICAqIG5yLiBvZiBhbGwgcGFja2V0cyAodG8gY2FsY3VsYXRlIGl1Y2FzdCwgd2hlbiB1bmRlcmx5aW5nIHBsYXRmb3JtIGRvZXMKKyAgICAgKiBub3QgcHJvdmlkZSBpdCkKKyAgICAgKi8KKyAgICBzdHJ1Y3QgY291bnRlcjY0IGlhbGw7CiAgICAgc3RydWN0IGNvdW50ZXI2NCBpdWNhc3Q7CiAgICAgc3RydWN0IGNvdW50ZXI2NCBpbWNhc3Q7CiAgICAgc3RydWN0IGNvdW50ZXI2NCBpYmNhc3Q7CkBAIC0xNzksNyArMTk4LDcgQEAKIHR5cGVkZWYgc3RydWN0IF9jb25mX2lmX2xpc3QgewogICAgIGNvbnN0IGNoYXIgICAgICpuYW1lOwogICAgIGludCAgICAgICAgICAgICB0eXBlOwotICAgIHVpbnQ2NF90ICAgICAgICBzcGVlZDsKKyAgICB1aW50NjRfdCBzcGVlZDsKICAgICBzdHJ1Y3QgX2NvbmZfaWZfbGlzdCAqbmV4dDsKIH0gbmV0c25tcF9jb25mX2lmX2xpc3Q7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBfc2NhbGFycy5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmgKaW5kZXggMjUxOTFmZS4uMDM2MDFhMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcF9zY2FsYXJzLmgKQEAgLTUsMTAgKzUsMTcgQEAKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKLWludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcHY2SXBGb3J3YXJkaW5nX2dldCh1X2xvbmcgKnZhbHVlKTsKK2ludCBuZXRzbm1wX2FyY2hfaXBfc2NhbGFyc19pcEZvcndhcmRpbmdfZ2V0KHVfbG9uZyAqdmFsdWUpOworaW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRm9yd2FyZGluZ19zZXQodV9sb25nIHZhbHVlKTsKIAoraW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwRGVmYXVsdFRUTF9nZXQodV9sb25nICp2YWx1ZSk7CitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXBEZWZhdWx0VFRMX3NldCh1X2xvbmcgdmFsdWUpOworCitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19nZXQodV9sb25nICp2YWx1ZSk7CiBpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRm9yd2FyZGluZ19zZXQodV9sb25nIHZhbHVlKTsKIAoraW50IG5ldHNubXBfYXJjaF9pcF9zY2FsYXJzX2lwdjZJcERlZmF1bHRIb3BMaW1pdF9nZXQodV9sb25nICp2YWx1ZSk7CitpbnQgbmV0c25tcF9hcmNoX2lwX3NjYWxhcnNfaXB2NklwRGVmYXVsdEhvcExpbWl0X3NldCh1X2xvbmcgdmFsdWUpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwYWRkcmVzcy5oCmluZGV4IDZiNTE1MTkuLjBiZmYxMDggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvaXBhZGRyZXNzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcGFkZHJlc3MuaApAQCAtNDcsNyArNDcsMTAgQEAKICAgIHVfY2hhciAgICBpYV9zdGF0dXM7ICAgICAvKiBJcEFkZHJlc3NTdGF0dXMgKDEtNykgKi8KICAgIHVfY2hhciAgICBpYV9vcmlnaW47ICAgICAvKiBJcEFkZHJlc3NPcmlnaW4gKDEtNikgKi8KICAgIHVfY2hhciAgICBpYV9zdG9yYWdldHlwZTsgLyogSXBBZGRyZXNzU3RvcmFnZVR5cGUgKDEtNSkgKi8KLQorICAgdV9jaGFyICAgIGlhX29ubGlua19mbGFnOyAvKiBJcE9ubGlua0ZsYWcgKi8KKyAgIHVfY2hhciAgICBpYV9hdXRvbm9tb3VzX2ZsYWc7IC8qSXBBdXRvbm9tb3VzRmxhZyAqLworICAgdV9sb25nICAgIGlhX3ByZWZlcmVkX2xpZmV0aW1lOy8qSXBQcmVmZXJlZExpZmVUaW1lKi8KKyAgIHVfbG9uZyAgICBpYV92YWxpZF9saWZldGltZTsvKklwVmFsaWRMaWZlVGltZSovCiAgICBuZXRzbm1wX2RhdGFfbGlzdCAqYXJjaF9kYXRhOyAgICAgIC8qIGFyY2ggc3BlY2lmaWMgZGF0YSAqLwogCiB9IG5ldHNubXBfaXBhZGRyZXNzX2VudHJ5OwpAQCAtMTQxLDggKzE0NCwyMiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhZGRyX2xlbiwgaW50IHBmeF9sZW4pOwogCiBpbnQgbmV0c25tcF9pcGFkZHJlc3NfaXB2NF9wcmVmaXhfbGVuKGluX2FkZHJfdCBtYXNrKTsKK2luX2FkZHJfdCBuZXRzbm1wX2lwYWRkcmVzc19pcHY0X21hc2soaW50IGxlbik7CitpbnQgbmV0c25tcF9pcGFkZHJlc3NfaXB2Nl9wcmVmaXhfbGVuKHN0cnVjdCBpbjZfYWRkciBtYXNrKTsKIAoraW50IG5ldHNubXBfaXBhZGRyZXNzX2ZsYWdzX2NvcHkodV9sb25nICppcEFkZHJlc3NQcmVmaXhBZHZQcmVmZXJyZWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4T25MaW5rRmxhZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2xvbmcgKmlhX3ByZWZlcmVkX2xpZmV0aW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nICppYV92YWxpZF9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaWFfb25saW5rX2ZsYWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKmlhX2F1dG9ub21vdXNfZmxhZyk7CiAKK2ludCBuZXRzbm1wX2lwYWRkcmVzc19wcmVmaXhfb3JpZ2luX2NvcHkodV9sb25nICppcEFkZHJlc3NQcmVmaXhPcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciBpYV9vcmlnaW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9sb25nIGlwQWRkcmVzc0FkZHJUeXBlKTsKIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9pcHN0YXRzLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaAppbmRleCAyMTYxNDQ1Li5mNzgyNDU5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL2lwc3RhdHMuaApAQCAtMTAsNiArMTAsNDAgQEAKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5SRUNFSVZFUyAgICAgICAxCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ0lOT0NURVRTICAgICAgICAgMgorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSU5IRFJFUlJPUlMgICAgICAgIDMKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5OT1JPVVRFUyAgICAgICA0IAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSU5BRERSRVJST1JTICAgICAgIDUKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0lOVU5LTk9XTlBST1RPUyAgICA2CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9JTlRSVU5DQVRFRFBLVFMgICAgNworI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkZPUldEQVRBR1JBTVMgIDggCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTVJFUURTICAgICAgICAgOQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfUkVBU01PS1MgICAgICAgICAgIDEwCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9SRUFTTUZBSUxTICAgICAgICAgMTEKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0lORElTQ0FSRFMgICAgICAgICAxMgorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkRFTElWRVJTICAgICAgIDEzCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVFJFUVVFU1RTICAgICAgMTQKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTk9ST1VURVMgICAgICAxNQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGT1JXREFUQUdSQU1TIDE2CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVERJU0NBUkRTICAgICAgMTcKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR1JFUURTICAgICAxOAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRGUkFHT0tTICAgICAgIDE5CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEZSQUdGQUlMUyAgICAgMjAKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VURlJBR0NSRUFURVMgICAyMQorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENPVVRUUkFOU01JVFMgICAgIDIyCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE9DVEVUUyAgICAgICAgMjMKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDSU5NQ0FTVFBLVFMgICAgICAyNAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTk1DQVNUT0NURVRTICAgIDI1CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVE1DQVNUUEtUUyAgICAgMjYKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0hDT1VUTUNBU1RPQ1RFVFMgICAyNworI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfSENJTkJDQVNUUEtUUyAgICAgIDI4CisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9IQ09VVEJDQVNUUEtUUyAgICAgMjkKKyNkZWZpbmUgSVBTWVNURU1TVEFUU1RBQkxFX0RJU0NPTlRJTlVJVFlUSU1FICAzMAorI2RlZmluZSBJUFNZU1RFTVNUQVRTVEFCTEVfUkVGUkVTSFJBVEUgICAgICAgIDMxCisgICAgCisjZGVmaW5lIElQU1lTVEVNU1RBVFNUQUJMRV9MQVNUIElQU1lTVEVNU1RBVFNUQUJMRV9SRUZSRVNIUkFURQorICAgIAogLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKQEAgLTIwLDI4ICs1NCw0MiBAQAogICovCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2lwc3RhdHNfcyB7CiAKKyAgIC8qIENvbHVtbnMgb2YgaXBTdGF0c1RhYmxlLiBTb21lIG9mIHRoZW0gYXJlIEhDIGZvciBjb21wdXRhdGlvbiBvZiB0aGUgCisgICAgKiBvdGhlciBjb2x1bW5zLCB3aGVuIHVuZGVybHlpbmcgT1MgZG9lcyBub3QgcHJvdmlkZSB0aGVtLgorICAgICogQWx3YXlzIGZpbGwgYXQgbGVhc3QgMzIgYml0cywgdGhlIHRhYmxlIGlzIHBlcmlvZGljYWxseSBwb2xsZWQgLT4gMzIgYml0CisgICAgKiBvdmVyZmxvdyBzaGFsbCBiZSBkZXRlY3RlZCBhbmQgNjQgYml0IHZhbHVlIHNob3VsZCBiZSBjb21wdXRlZCBhdXRvbWF0aWNhbGx5LiAqLwogICAgVTY0ICAgICAgICAgICAgIEhDSW5SZWNlaXZlczsKICAgIFU2NCAgICAgICAgICAgICBIQ0luT2N0ZXRzOwogICAgdV9sb25nICAgICAgICAgIEluSGRyRXJyb3JzOwotICAgdV9sb25nICAgICAgICAgIEluTm9Sb3V0ZXM7CisgICBVNjQgICAgICAgICAgICAgSENJbk5vUm91dGVzOyAKICAgIHVfbG9uZyAgICAgICAgICBJbkFkZHJFcnJvcnM7CiAgICB1X2xvbmcgICAgICAgICAgSW5Vbmtub3duUHJvdG9zOwogICAgdV9sb25nICAgICAgICAgIEluVHJ1bmNhdGVkUGt0czsKLSAgIFU2NCAgICAgICAgICAgICBIQ0luRm9yd0RhdGFncmFtczsKKyAgIAorICAgLyogb3B0aW9uYWwsIGNhbiBiZSBjb21wdXRlZCBmcm9tIEhDSW5Ob1JvdXRlcyBhbmQgSENPdXRGb3J3RGF0YWdyYW1zICovCisgICBVNjQgICAgICAgICAgICAgSENJbkZvcndEYXRhZ3JhbXM7IAorICAgCiAgICB1X2xvbmcgICAgICAgICAgUmVhc21SZXFkczsKICAgIHVfbG9uZyAgICAgICAgICBSZWFzbU9LczsKICAgIHVfbG9uZyAgICAgICAgICBSZWFzbUZhaWxzOwogICAgdV9sb25nICAgICAgICAgIEluRGlzY2FyZHM7CiAgICBVNjQgICAgICAgICAgICAgSENJbkRlbGl2ZXJzOwogICAgVTY0ICAgICAgICAgICAgIEhDT3V0UmVxdWVzdHM7Ci0gICB1X2xvbmcgICAgICAgICAgT3V0Tm9Sb3V0ZXM7CisgICBVNjQgICAgICAgICAgICAgSENPdXROb1JvdXRlczsKICAgIFU2NCAgICAgICAgICAgICBIQ091dEZvcndEYXRhZ3JhbXM7Ci0gICB1X2xvbmcgICAgICAgICAgT3V0RGlzY2FyZHM7Ci0gICB1X2xvbmcgICAgICAgICAgT3V0RnJhZ1JlcWRzOwotICAgdV9sb25nICAgICAgICAgIE91dEZyYWdPS3M7Ci0gICB1X2xvbmcgICAgICAgICAgT3V0RnJhZ0ZhaWxzOwotICAgdV9sb25nICAgICAgICAgIE91dEZyYWdDcmVhdGVzOworICAgVTY0ICAgICAgICAgICAgIEhDT3V0RGlzY2FyZHM7CisgICAKKyAgIC8qIG9wdGlvbmFsLCBjYW4gYmUgY29tcHV0ZWQgZnJvbSBIQ091dEZyYWdPS3MgKyBIQ091dEZyYWdGYWlscyovCisgICBVNjQgICAgICAgICAgICAgSENPdXRGcmFnUmVxZHM7CisgICBVNjQgICAgICAgICAgICAgSENPdXRGcmFnT0tzOworICAgVTY0ICAgICAgICAgICAgIEhDT3V0RnJhZ0ZhaWxzOworICAgVTY0ICAgICAgICAgICAgIEhDT3V0RnJhZ0NyZWF0ZXM7CisgICAKKyAgIC8qIG9wdGlvbmFsLCBjYW4gYmUgY29tcHV0ZWQgZnJvbSAKKyAgICAqIEhDT3V0UmVxdWVzdHMgK0hDT3V0Rm9yd0RhdGFncmFtcyArIEhDT3V0RnJhZ0NyZWF0ZXMKKyAgICAqIC0gSENPdXRGcmFnUmVxZHMgLSBIQ091dE5vUm91dGVzICAtIEhDT3V0RGlzY2FyZHMgKi8KICAgIFU2NCAgICAgICAgICAgICBIQ091dFRyYW5zbWl0czsKKyAgIAogICAgVTY0ICAgICAgICAgICAgIEhDT3V0T2N0ZXRzOwogICAgVTY0ICAgICAgICAgICAgIEhDSW5NY2FzdFBrdHM7CiAgICBVNjQgICAgICAgICAgICAgSENJbk1jYXN0T2N0ZXRzOwpAQCAtNTAsNiArOTgsOCBAQAogICAgVTY0ICAgICAgICAgICAgIEhDSW5CY2FzdFBrdHM7CiAgICBVNjQgICAgICAgICAgICAgSENPdXRCY2FzdFBrdHM7CiAKKyAgIC8qIEFycmF5IG9mIGF2YWlsYWJsZSBjb2x1bW5zLiovCisgICBpbnQgICAgICAgICAgICAgY29sdW1uQXZhaWxbSVBTWVNURU1TVEFUU1RBQkxFX0xBU1QrMV07CiB9IG5ldHNubXBfaXBzdGF0czsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3JvdXRlLmgKaW5kZXggOWJhMWIxOS4uZDk0NGQxMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9yb3V0ZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvcm91dGUuaApAQCAtNDUsNyArNDUsNyBAQAogICAgICogZGVmaW5lIHRoZSBtYXhpbXVtIG9pZCBsZW5ndGggZm9yIGEgcG9saWN5LCBmb3IgdXNlIGJ5IHRoZQogICAgICogaW5ldENpZHJSb3V0ZVRhYmxlLiBNdXN0IGJlIGF0IGxlYXN0IDIsIGZvciBkZWZhdWx0IG51bGxPaWQgY2FzZS4KICAgICAqLwotI2RlZmluZSBORVRTTk1QX1BPTElDWV9PSURfTUFYX0xFTiAgMgorI2RlZmluZSBORVRTTk1QX1BPTElDWV9PSURfTUFYX0xFTiAgMwogICAgb2lkICAgICAgKnJ0X3BvbGljeTsgICAgICAvKiBOVUxMIHNob3VsZCBiZSBpbnRlcnByZXRlZCBhcyB7IDAsIDAgfSAqLwogICAgdV9jaGFyICAgIHJ0X3BvbGljeV9sZW47ICAvKiAwLTEyOCBvaWRzICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc2NvcGV6b25lLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNWM4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3Njb3Blem9uZS5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBzY29wZXpvbmUgZGF0YSBhY2Nlc3MgaGVhZGVyCisgKgorICogJElkOiBzY29wZXpvbmUuaCAxNDE3MCAyMDA3LTA0LTI5IDAyOjIyOjEyWiB2YXJ1bl9jICQKKyAqLworI2lmbmRlZiBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfSAorI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMKKyAqCisgKgorICogTk9URTogaWYgeW91IGFkZCBmaWVsZHMsIHVwZGF0ZSBjb2RlIGRlYWxpbmcgd2l0aAorICogICAgICAgdGhlbSBpbiBpcHY2c2NvcGV6b25lX2NvbW1vbi5jCisgKi8KK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnlfcyB7CisgICAgbmV0c25tcF9pbmRleCBvaWRfaW5kZXg7CisgICAgb2lkICAgICAgICAgICBuc19zY29wZXpvbmVfaW5kZXg7CisgICAgdV9pbnQgICBuc19mbGFnczsgLyogbmV0LXNubXAgZmxhZ3MgKi8KKyAgICBvaWQgICAgIGluZGV4OworICAgIGludCAgICAgc2NvcGV6b25lX2xpbmtsb2NhbDsgICAgCisKK30gbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeTsKKworLyoqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKy8qCisgKiBBQ0NFU1MgZnVuY3Rpb24gcHJvdG90eXBlcworICovCisKKy8qCisgKiBzY29wZXpvbmUgY29udGFpbmVyIGluaXQKKyAqLworbmV0c25tcF9jb250YWluZXIgKiBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2luaXQodV9pbnQgaW5pdF9mbGFncyk7CisKKy8qCisgKiBzY29wZXpvbmUgY29udGFpbmVyIGxvYWQgYW5kIGZyZWUKKyAqLworbmV0c25tcF9jb250YWluZXIqCituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2xvYWQobmV0c25tcF9jb250YWluZXIqIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKKwordm9pZCBuZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZyZWVfZmxhZ3MpOworI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TQ09QRVpPTkVfRlJFRV9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9GUkVFX0RPTlRfQ0xFQVIgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU0NPUEVaT05FX0ZSRUVfS0VFUF9DT05UQUlORVIgICAgICAgIDB4MDAwMgorCisKKy8qCisgKiBjcmVhdGUvZnJlZSBhbiBzY29wZXpvbmUgZW50cnkKKyAqLworbmV0c25tcF92NnNjb3Blem9uZV9lbnRyeSAqCituZXRzbm1wX2FjY2Vzc19zY29wZXpvbmVfZW50cnlfY3JlYXRlKHZvaWQpOworCit2b2lkIG5ldHNubXBfYWNjZXNzX3Njb3Blem9uZV9lbnRyeV9mcmVlKG5ldHNubXBfdjZzY29wZXpvbmVfZW50cnkgKiBlbnRyeSk7CisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIE5FVFNOTVBfQUNDRVNTX1NDT1BFWk9ORV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3aW5zdC5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTI4ZGYxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zd2luc3QuaApAQCAtMCwwICsxLDc3IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9TV0lOU1RfSAorI2RlZmluZSBORVRTTk1QX1NXSU5TVF9ICisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyAgICAvKgorICAgICAqIERhdGEgc3RydWN0dXJlIGZvciBhIHN3aW5zdCBlbnRyeSAKKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBoclNXSW5zdGFsbGVkVGFibGVfZW50cnkgeworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2luZGV4OworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5kZXggdmFsdWVzOyBNSUIgdHlwZSBpcyBpbnQzMiwgYnV0IHdlIHVzZSBvaWQgc28gdGhpcworICAgICAgICAgKiBzdHJ1Y3R1cmUgY2FuIGJlIHVzZWQgZGlyZWN0bHkgd2l0aCBhIHRhYmxlX2NvbnRhaW5lci4KKyAgICAgICAgICovCisgICAgICAgIG9pZCAgICAgICAgICAgICBzd0luZGV4OworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogQ29sdW1uIHZhbHVlcyAKKyAgICAgICAgICovCisgICAgICAgIGNoYXIgICAgICAgICAgICBzd05hbWVbNjRdOworICAgICAgICBjaGFyICAgICAgICAgICAgc3dEYXRlWzExXTsKKyNpZmRlZiBORVRTTk1QX0hBVkVfU1dJRAorICAgICAgICBvaWQgICAgICAgICAgICAqc3dJRDsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIHN3SURfbGVuOworI2VuZGlmCisgICAgICAgIHVfY2hhciAgICAgICAgICBzd1R5cGU7CisgICAgICAgIHVfY2hhciAgICAgICAgICBzd05hbWVfbGVuOworICAgICAgICB1X2NoYXIgICAgICAgICAgc3dEYXRlX2xlbjsKKyAgICB9IG5ldHNubXBfc3dpbnN0X2VudHJ5OworICAgIAorI2RlZmluZSBIUlNXSU5TVEFMTEVEVFlQRV9VTktOT1dOICAxCisjZGVmaW5lIEhSU1dJTlNUQUxMRURUWVBFX09QRVJBVElOR1NZU1RFTSAgMgorI2RlZmluZSBIUlNXSU5TVEFMTEVEVFlQRV9ERVZJQ0VEUklWRVIgIDMKKyNkZWZpbmUgSFJTV0lOU1RBTExFRFRZUEVfQVBQTElDQVRJT04gIDQKKworCisjZGVmaW5lIE5FVFNOTVBfU1dJTlNUX05PRkxBR1MgICAgICAgICAgICAweDAwMDAwMDAwCisKKyNkZWZpbmUgTkVUU05NUF9TV0lOU1RfQUxMX09SX05PTkUgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkVUU05NUF9TV0lOU1RfRE9OVF9GUkVFX0lURU1TICAgIDB4MDAwMDAwMDIKKworICAgIG5ldHNubXBfY29udGFpbmVyICoKKyAgICBuZXRzbm1wX3N3aW5zdF9jb250YWluZXJfbG9hZChuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCBpbnQgZmxhZ3MgKTsKKworICAgIHZvaWQgbmV0c25tcF9zd2luc3RfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGZsYWdzKTsKKyAgICB2b2lkIG5ldHNubXBfc3dpbnN0X2NvbnRhaW5lcl9mcmVlX2l0ZW1zKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpOworCisgICAgdm9pZCBuZXRzbm1wX3N3aW5zdF9lbnRyeV9yZW1vdmUobmV0c25tcF9jb250YWluZXIgKiBjb250YWluZXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zd2luc3RfZW50cnkgKmVudHJ5KTsKKworICAgIG5ldHNubXBfc3dpbnN0X2VudHJ5ICogbmV0c25tcF9zd2luc3RfZW50cnlfY3JlYXRlKGludDMyX3QgaW5kZXgpOworICAgIHZvaWQgbmV0c25tcF9zd2luc3RfZW50cnlfZnJlZShuZXRzbm1wX3N3aW5zdF9lbnRyeSAqZW50cnkpOworCisgICAgaW50MzJfdCBuZXRzbm1wX3N3aW5zdF9hZGRfbmFtZShjb25zdCBjaGFyICpuYW1lKTsKKyAgICBpbnQzMl90IG5ldHNubXBfc3dpbnN0X2dldF9pZChjb25zdCBjaGFyICpuYW1lKTsKKyAgICBjb25zdCBjaGFyICogbmV0c25tcF9zd2luc3RfZ2V0X25hbWUoaW50MzJfdCBpZCk7CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisKKyNlbmRpZiAvKiBORVRTTk1QX1NXSU5TVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N3cnVuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2UxNWM0MQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3dydW4uaApAQCAtMCwwICsxLDEwNCBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisjaWZuZGVmIE5FVFNOTVBfU1dSVU5fSAorI2RlZmluZSBORVRTTk1QX1NXUlVOX0gKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworCisgICAgLyotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIERhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAKKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBoclNXUnVuVGFibGVfZW50cnkgeworICAgICAgICBuZXRzbm1wX2luZGV4ICAgb2lkX2luZGV4OworICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5kZXggdmFsdWVzIAorICAgICAgICAgKi8KKyAgICAgICAgb2lkICAgICAgICAgICAgIGhyU1dSdW5JbmRleDsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIENvbHVtbiB2YWx1ZXMgCisgICAgICAgICAqLworICAgICAgICBjaGFyICAgICAgICAgICAgaHJTV1J1bk5hbWVbIDY0KzFdOyAgLyogc2l6ZSBwZXIgTUlCICsgMSAqLworICAgICAgICBjaGFyICAgICAgICAgICAgaHJTV1J1blBhdGhbMTI4KzFdOyAgLyogc2l6ZSBwZXIgTUlCICsgMSAqLworICAgICAgICBjaGFyICAgICAgICAgICAgaHJTV1J1blBhcmFtZXRlcnNbMTI4KzFdOyAvKiBzaXplIHBlciBNSUIgKyAxICovCisjaWZkZWYgTkVUU05NUF9TV1JVTl9IQVZFX0lEICAvKiBpZiBub3QgZGVmaW5lZCwgd2lsbCBhbHdheXMgdXNlIG51bGxPaWQgKi8KKyAgICAgICAgb2lkICAgICAgICAgICAgIGhyU1dSdW5JRFtTTk1QX01BWE9JRF07CisgICAgICAgIHVfY2hhciAgICAgICAgICBoclNXUnVuSURfbGVuOworI2VuZGlmCisgICAgICAgIHVfY2hhciAgICAgICAgICBoclNXUnVuTmFtZV9sZW47CisgICAgICAgIHVfY2hhciAgICAgICAgICBoclNXUnVuUGF0aF9sZW47CisgICAgICAgIHVfY2hhciAgICAgICAgICBoclNXUnVuUGFyYW1ldGVyc19sZW47CisKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhyU1dSdW5UeXBlOworICAgICAgICB1X2NoYXIgICAgICAgICAgaHJTV1J1blN0YXR1czsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIG9sZF9oclNXUnVuU3RhdHVzOworCisgICAgICAgIC8qCisgICAgICAgICAqIFBlcmYgdmFsdWVzCisgICAgICAgICAqLworICAgICAgICBpbnQzMl90ICAgICAgICAgaHJTV1J1blBlcmZDUFU7CisgICAgICAgIGludDMyX3QgICAgICAgICBoclNXUnVuUGVyZk1lbTsKKyAgICAgICAgCisgICAgfSBuZXRzbm1wX3N3cnVuX2VudHJ5OworCisgICAgLyoKKyAgICAgKiBlbnVtcyBmb3IgY29sdW1uIGhyU1dSdW5UeXBlCisgICAgICovCisjZGVmaW5lIEhSU1dSVU5UWVBFX1VOS05PV04gICAgICAgICAgICAgMQorI2RlZmluZSBIUlNXUlVOVFlQRV9PUEVSQVRJTkdTWVNURU0gICAgIDIKKyNkZWZpbmUgSFJTV1JVTlRZUEVfREVWSUNFRFJJVkVSICAgICAgICAzCisjZGVmaW5lIEhSU1dSVU5UWVBFX0FQUExJQ0FUSU9OICAgICAgICAgNAorCisgICAgLyoKKyAgICAgKiBlbnVtcyBmb3IgY29sdW1uIGhyU1dSdW5TdGF0dXMKKyAgICAgKi8KKyNkZWZpbmUgSFJTV1JVTlNUQVRVU19SVU5OSU5HICAgICAgICAgICAxCisjZGVmaW5lIEhSU1dSVU5TVEFUVVNfUlVOTkFCTEUgICAgICAgICAgMgorI2RlZmluZSBIUlNXUlVOU1RBVFVTX05PVFJVTk5BQkxFICAgICAgIDMKKyNkZWZpbmUgSFJTV1JVTlNUQVRVU19JTlZBTElEICAgICAgICAgICA0CisKKyAgICAvKi0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogUHJvdG90eXBlcworICAgICAqLworICAgIG5ldHNubXBfY29udGFpbmVyICoKKyAgICBuZXRzbm1wX3N3cnVuX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIsIHVfaW50IGZsYWdzICk7CisKKyAgICB2b2lkIG5ldHNubXBfc3dydW5fY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lciwgdV9pbnQgZmxhZ3MpOworICAgIHZvaWQgbmV0c25tcF9zd3J1bl9jb250YWluZXJfZnJlZV9pdGVtcyhuZXRzbm1wX2NvbnRhaW5lciAqIGNvbnRhaW5lcik7CisKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5ICoKKyAgICBuZXRzbm1wX3N3cnVuX2VudHJ5X2NyZWF0ZShpbnQzMl90IHN3SW5kZXgpOworCisgICAgdm9pZCBuZXRzbm1wX3N3cnVuX2VudHJ5X2ZyZWUobmV0c25tcF9zd3J1bl9lbnRyeSAqZW50cnkpOworCisgICAgaW50ICBzd3J1bl9jb3VudF9wcm9jZXNzZXMoIHZvaWQgKTsKKyAgICBpbnQgIHN3cnVuX21heF9wcm9jZXNzZXMoICAgdm9pZCApOworICAgIGludCAgc3dydW5fY291bnRfcHJvY2Vzc2VzX2J5X25hbWUoIGNoYXIgKm5hbWUgKTsKKworI2RlZmluZSBORVRTTk1QX1NXUlVOX05PRkxBR1MgICAgICAgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIE5FVFNOTVBfU1dSVU5fQUxMX09SX05PTkUgICAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkVUU05NUF9TV1JVTl9ET05UX0ZSRUVfSVRFTVMgICAgMHgwMDAwMDAwMgorLyojZGVmaW5lIE5FVFNOTVBfU1dSVU5feHggICAgICAgICAgICAgICAgMHgwMDAwMDAwNCAqLworCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworCisjZW5kaWYgLyogTkVUU05NUF9TV1JVTl9IICovCisKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy9zeXN0ZW1zdGF0cy5oCmluZGV4IDQzODIzOTcuLmM3MmRmYmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3Mvc3lzdGVtc3RhdHMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3N5c3RlbXN0YXRzLmgKQEAgLTIyLDcgKzIyLDExIEBACiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3N5c3RlbXN0YXRzX3MgewogCiAgICBuZXRzbm1wX2luZGV4IG9pZF9pbmRleDsgICAvKiBNVVNUIEJFIEZJUlNUISEgZm9yIGNvbnRhaW5lciB1c2UgKi8KLSAgIG9pZCAgICAgICAgICAgbnNfaXBfdmVyc2lvbjsKKyAgIC8qIAorICAgICogSW5kZXggb2YgdGhlIHRhYmxlCisgICAgKiBGaXJzdCBlbnRyeSA9IGlwIHZlcnNpb24KKyAgICAqIFNlY29uZCBlbnRyeSA9IGludGVyZmFjZSBpbmRleCAoMCBmb3IgaXBTeXN0ZW1TdGF0c1RhYmxlICovCisgICBvaWQgICAgICAgICAgIGluZGV4WzJdOyAgICAgICAgICAgCiAKICAgIGludCAgICAgICBmbGFnczsgLyogZm9yIG5ldC1zbm1wIHVzZSAqLwogCkBAIC0zMiw2ICszNiwxMSBAQAogICAgICovCiAgICBuZXRzbm1wX2lwc3RhdHMgc3RhdHM7CiAKKyAgIC8qCisgICAgKiBmb3IgbG9nZ2luZworICAgICovCisgICBjb25zdCBjaGFyKiB0YWJsZU5hbWU7CisgICAKICAgIC8qKiBvbGRfc3RhdHMgaXMgdXNlZCBpbiBuZXRzbm1wX2FjY2Vzc19pbnRlcmZhY2VfZW50cnlfdXBkYXRlX3N0YXRzICovCiAgICBuZXRzbm1wX2lwc3RhdHMgKm9sZF9zdGF0czsKIApAQCAtNDUsMTcgKzU0LDI0IEBACiAvKgogICogaW5pdAogICovCit2b2lkIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2luaXQodm9pZCk7CisKKy8qCisgKiBpbml0CisgKi8KIG5ldHNubXBfY29udGFpbmVyICogbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfY29udGFpbmVyX2luaXQodV9pbnQgaW5pdF9mbGFncyk7CiAjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0lOSVRfTk9GTEFHUyAgICAgICAgICAgICAgIDB4MDAwMAogI2RlZmluZSBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19JTklUX0FERExfSURYX0JZX0FERFIgICAgICAweDAwMDEKIAotLyoKLSAqIGxvYWQgYW5kIGZyZWUKKy8qKgorICogTG9hZCBjb250YWluZXIuIElmIHRoZSBORVRTTk1QX0FDQ0VTU19TWVNURU1TVEFUU19MT0FEX0lGVEFCTEUgaXMgc2V0CisgKiB0aGUgaXBJZlN5c3RlbVN0YXRzIHRhYmxlIGlzIGxvYWRlZCwgZWxzZSBpcFN5c3RlbVN0YXRzVGFibGUgaXMgbG9hZGVkLgogICovCiBuZXRzbm1wX2NvbnRhaW5lcioKIG5ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2NvbnRhaW5lcl9sb2FkKG5ldHNubXBfY29udGFpbmVyKiBjb250YWluZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsb2FkX2ZsYWdzKTsKICNkZWZpbmUgTkVUU05NUF9BQ0NFU1NfU1lTVEVNU1RBVFNfTE9BRF9OT0ZMQUdTICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIE5FVFNOTVBfQUNDRVNTX1NZU1RFTVNUQVRTX0xPQURfSUZUQUJMRSAgICAgICAgICAgICAgIDB4MDAwMSAKIAogdm9pZCBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmcmVlX2ZsYWdzKTsKQEAgLTY4LDcgKzg0LDggQEAKICAqIGNyZWF0ZS9mcmVlIGFuIGVudHJ5CiAgKi8KIG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKgotbmV0c25tcF9hY2Nlc3Nfc3lzdGVtc3RhdHNfZW50cnlfY3JlYXRlKGludCB2ZXJzaW9uKTsKK25ldHNubXBfYWNjZXNzX3N5c3RlbXN0YXRzX2VudHJ5X2NyZWF0ZShpbnQgdmVyc2lvbiwgaW50IGlmX2luZGV4LAorICAgICAgICAgICAgY29uc3QgY2hhciogdGFibGVOYW1lKTsKIAogdm9pZCBuZXRzbm1wX2FjY2Vzc19zeXN0ZW1zdGF0c19lbnRyeV9mcmVlKG5ldHNubXBfc3lzdGVtc3RhdHNfZW50cnkgKiBlbnRyeSk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmggYi9pbmNsdWRlL25ldC1zbm1wL2RhdGFfYWNjZXNzL3VkcF9lbmRwb2ludC5oCmluZGV4IDY0NzA0ZDIuLjM2MjMxZWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvZGF0YV9hY2Nlc3MvdWRwX2VuZHBvaW50LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9kYXRhX2FjY2Vzcy91ZHBfZW5kcG9pbnQuaApAQCAtNDEsNiArNDEsNyBAQAogICAgICAgICB1X3Nob3J0ICAgcm10X3BvcnQ7CiAKICAgICAgICAgdV9pbnQgICAgIGluc3RhbmNlOworICAgICAgICB1X2ludCAgICAgcGlkOwogICAgCiAgICAgfSBuZXRzbm1wX3VkcF9lbmRwb2ludF9lbnRyeTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKaW5kZXggZjEzMmYzYi4uNTJlY2MzYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCkBAIC0xLDYgKzEsOCBAQAogI2lmbmRlZiBBU04xX0gKICNkZWZpbmUgQVNOMV9ICiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29pZC5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCkBAIC0zNywxNiArMzksNiBAQAogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAKLSNpZm5kZWYgTUFYX1NVQklEICAgICAgICAgICAgICAgLyogdGVtcG9yYXJ5IC0gZHVwbGljYXRlIGRlZmluaXRpb24gcHJvdGVjdGlvbiAqLwotI2lmbmRlZiBFSUdIVEJJVF9TVUJJRFMKLSAgICB0eXBlZGVmIHVfbG9uZyAgb2lkOwotI2RlZmluZSBNQVhfU1VCSUQgICAweEZGRkZGRkZGCi0jZWxzZQotICAgIHR5cGVkZWYgdV9jaGFyICBvaWQ7Ci0jZGVmaW5lIE1BWF9TVUJJRCAgIDB4RkYKLSNlbmRpZgotI2VuZGlmCi0KICNkZWZpbmUgTUlOX09JRF9MRU4JICAgIDIKICNkZWZpbmUgTUFYX09JRF9MRU4JICAgIDEyOCAvKiBtYXggc3ViaWQncyBpbiBhbiBvaWQgKi8KICNpZm5kZWYgTUFYX05BTUVfTEVOICAgICAgICAgICAgLyogY29uZmxpY3RzIHdpdGggc29tZSBsaWJyYXJpZXMgKi8KQEAgLTE4NiwzNyArMTc4LDU2IEBACiAKIAogICAgIGludCAgICAgICAgICAgICBhc25fY2hlY2tfcGFja2V0KHVfY2hhciAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9pbnQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgbG9uZyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX2ludCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwgY29uc3QgbG9uZyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX3Vuc2lnbmVkX2ludCh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfbG9uZyAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF91bnNpZ25lZF9pbnQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9sb25nICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX3N0cmluZyh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX3N0cmluZyh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2VfaGVhZGVyKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICopOwogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2Vfc2VxdWVuY2UodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgdV9jaGFyIGV4cGVjdGVkX3R5cGUsICAgICAgLyogbXVzdCBiZSB0aGlzIHR5cGUgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmVzdHIpOyAgICAgICAvKiBlcnJvciBtZXNzYWdlIHByZWZpeCAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9oZWFkZXIodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX3NlcXVlbmNlKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9sZW5ndGgodV9jaGFyICosIHVfbG9uZyAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fYnVpbGRfbGVuZ3RoKHVfY2hhciAqLCBzaXplX3QgKiwgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2Vfb2JqaWQodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX29iamlkKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX251bGwodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX251bGwodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9wYXJzZV9iaXRzdHJpbmcodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKmFzbl9idWlsZF9iaXRzdHJpbmcodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY291bnRlcjY0ICosIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAqYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGNvdW50ZXI2NCAqLCBzaXplX3QpOwogICAgIHVfY2hhciAgICAgICAgICphc25fcGFyc2Vfc2lnbmVkX2ludDY0KHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCmluZGV4IGFjZDVkNDAuLjU2Y2RiYWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCkBAIC0yNyw2ICsyNyw4IEBACiAjZGVmaW5lIFNOTVBfQ0FMTEJBQ0tfUE9TVF9QUkVNSUJfUkVBRF9DT05GSUcJMwogI2RlZmluZSBTTk1QX0NBTExCQUNLX0xPR0dJTkcJCQk0CiAjZGVmaW5lIFNOTVBfQ0FMTEJBQ0tfU0VTU0lPTl9JTklUCQk1CisjZGVmaW5lIFNOTVBfQ0FMTEJBQ0tfUFJFX1JFQURfQ09ORklHCSAgICAgICAgNworI2RlZmluZSBTTk1QX0NBTExCQUNLX1BSRV9QUkVNSUJfUkVBRF9DT05GSUcJOAogCiAKICAgICAvKgpAQCAtNDksMjEgKzUxLDI5IEBACiAgICAgLyoKICAgICAgKiBmdW5jdGlvbiBwcm90b3R5cGVzIAogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfY2FsbGJhY2tzKHZvaWQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9jYWxsYmFjayhpbnQgbWFqb3IsIGludCBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QQ2FsbGJhY2sgKiBuZXdfY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnLCBpbnQgcHJpb3JpdHkpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soaW50IG1ham9yLCBpbnQgbWlub3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUENhbGxiYWNrICogbmV3X2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhpbnQgbWFqb3IsIGludCBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjYWxsZXJfYXJnKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2NhbGxiYWNrX2F2YWlsYWJsZShpbnQgbWFqb3IsIGludCBtaW5vcik7ICAgICAgLyogaXMgPjEgYXZhaWxhYmxlICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9jb3VudF9jYWxsYmFja3MoaW50IG1ham9yLCBpbnQgbWlub3IpOyAvKiByZXQgdGhlIG51bWJlciByZWdpc3RlcmVkICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrKGludCBtYWpvciwgaW50IG1pbm9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUENhbGxiYWNrICogbmV3X2NhbGxiYWNrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnLCBpbnQgbWF0Y2hhcmdzKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBjbGVhcl9jYWxsYmFjayAodm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfY2xlYXJfY2xpZW50X2FyZyh2b2lkICosIGludCBpLCBpbnQgaik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGE3OWRjCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oCkBAIC0wLDAgKzEsMjI2IEBACisjaWZuZGVmIE5FVFNOTVBfQ0VSVF9VVElMX0gKKworI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKKworI2lmbmRlZiBIRUFERVJfU1NMX0gKKyNlcnJvciAibXVzdCBpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPiBiZWZvcmUgY2VydF91dGlsLmgiCisjZW5kaWYKKyNpZm5kZWYgSEVBREVSX1g1MDlfSAorI2Vycm9yICJtdXN0IGluY2x1ZGUgPG9wZW5zc2wveDUwOS5oPiBiZWZvcmUgY2VydF91dGlsLmgiCisjZW5kaWYKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiBuZXRzbm1wX2NlcnQgc3RydWN0dXJlcywgZGVmaW5lcyBhbmQgZnVuY3Rpb24gZGVmaW5pdGlvbnMKKyAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCit2b2lkIG5ldHNubXBfY2VydHNfaW5pdCh2b2lkKTsKK3ZvaWQgbmV0c25tcF9jZXJ0c19hZ2VudF9pbml0KHZvaWQpOwordm9pZCBuZXRzbm1wX2NlcnRzX3NodXRkb3duKHZvaWQpOwordm9pZCBuZXRzbm1wX2NlcnRzX2xvYWQodm9pZCk7CituZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9jZXJ0X2dldF90cnVzdGxpc3Qodm9pZCk7CisKKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2NlcnRfY29tbW9uX3MgeworICAgICAgICBjaGFyICAgICAgICAgICAqZGlyOworICAgICAgICBjaGFyICAgICAgICAgICAqZmlsZW5hbWU7CisgICAgICAgIAorICAgICAgICB1X2NoYXIgICAgICAgICAgdHlwZTsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGFsbG93ZWRfdXNlczsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIF9wYWRbMl07IC8qIGZvciBmdXR1cmUgdXNlICovCisgICAgfSBuZXRzbm1wX2NlcnRfY29tbW9uOworCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9rZXlfcyB7CisgICAgICAgIG5ldHNubXBfY2VydF9jb21tb24gaW5mbzsKKworICAgICAgICBFVlBfUEtFWSAgICAgICAqb2tleTsKKyAgICAgICAgc3RydWN0IG5ldHNubXBfY2VydF9zICAgKmNlcnQ7CisgICAgfSBuZXRzbm1wX2tleTsKKworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfY2VydF9zIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiBpbmZvOworCisgICAgICAgIFg1MDkgICAgICAgICAgICpvY2VydDsKKyAgICAgICAgbmV0c25tcF9rZXkgICAgKmtleTsKKyAgICAgICAgc3RydWN0IG5ldHNubXBfY2VydF9zICppc3N1ZXJfY2VydDsKKworICAgICAgICBjaGFyICAgICAgICAgICAqaXNzdWVyOworICAgICAgICBjaGFyICAgICAgICAgICAqc3ViamVjdDsKKyAgICAgICAgY2hhciAgICAgICAgICAgKmZpbmdlcnByaW50OworICAgICAgICBjaGFyICAgICAgICAgICAqY29tbW9uX25hbWU7CisKKyAgICAgICAgdV9jaGFyICAgICAgICAgIGhhc2hfdHlwZTsKKyAgICAgICAgdV9jaGFyICAgICAgICAgIF9wYWRbM107IC8qIGZvciBmdXR1cmUgdXNlICovCisgICAgfSBuZXRzbm1wX2NlcnQ7CisKKy8qKiB0eXBlcyAqLworICAgIGVudW0geyBOU19DRVJUX1RZUEVfVU5LTk9XTiA9IDAsIE5TX0NFUlRfVFlQRV9QRU0sIE5TX0NFUlRfVFlQRV9ERVIsCisgICAgICAgICAgIE5TX0NFUlRfVFlQRV9QS0NTMTIsIE5TX0NFUlRfVFlQRV9LRVkgfTsKKworLyoqIHVzZXMgKi8KKyNkZWZpbmUgTlNfQ0VSVF9JREVOVElUWSAgICAgICAweDAwMDEKKyNkZWZpbmUgTlNfQ0VSVF9SRU1PVEVfUEVFUiAgICAweDAwMDIKKyNkZWZpbmUgTlNfQ0VSVF9SRVNFUlZFRDEgICAgICAweDAwMDQKKyNkZWZpbmUgTlNfQ0VSVF9DQSAgICAgICAgICAgICAweDAwMDgKKworLyoqIHNvdXJjZSAqLworI2RlZmluZSBOU19DRVJUS0VZX0RFRkFVTFQgICAgICAgMHgwMDAgLyogZ2V0IGRlZmF1bHQgZnJvbSBEUyBzdG9yZSAqLworI2RlZmluZSBOU19DRVJUS0VZX0ZJTEUgICAgICAgICAgMHgwMDEgLyogZmlsZW5hbWUvZnVsbCBwYXRoICovCisjZGVmaW5lIE5TX0NFUlRLRVlfRklOR0VSUFJJTlQgICAweDAwMiAvKiBwdWJsaWMga2V5IGZpbmdlcnByaW50ICovCisjZGVmaW5lIE5TX0NFUlRLRVlfQ0EgICAgICAgICAgICAweDAwNCAvKiB0cnVzdGVkIENBICovCisjZGVmaW5lIE5TX0NFUlRLRVlfU0FOX1JGQzgyMiAgICAweDAwOCAvKiBzdWJqIGFsdCBuYW1lOiByZmM4MjIgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9TQU5fRE5TICAgICAgIDB4MDEwIC8qIHN1YmogYWx0IG5hbWU6IEROUyAqLworI2RlZmluZSBOU19DRVJUS0VZX1NBTl9JUEFERFIgICAgMHgwMjAgLyogc3ViaiBhbHQgbmFtZTogSVAgYWRkcmVzcyAqLworI2RlZmluZSBOU19DRVJUS0VZX0NPTU1PTl9OQU1FICAgMHgwNDAgLyogY29tbW9uIG5hbWUgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9UQVJHRVRfUEFSQU0gIDB4MDgwIC8qIHRsc3RtUGFyYW1zVGFibGUgKi8KKyNkZWZpbmUgTlNfQ0VSVEtFWV9UQVJHRVRfQUREUiAgIDB4MTAwIC8qIHRsc3RtQWRkclRhYmxlICovCisjZGVmaW5lIE5TX0NFUlRLRVlfTVVMVElQTEUgICAgICAweDIwMCAvKiB0cnkgbXVsdGlwbGUgc291cmNlcyAqLworCisvKiogUkZDIDUyNDYgaGFzaCBhbGdvcml0aG1zIChTZWN0aW9uIDcuNC4xLjQuMSkgKi8KKyNkZWZpbmUgTlNfSEFTSF9OT05FICAgICAgICAwCisjZGVmaW5lIE5TX0hBU0hfTUQ1ICAgICAgICAgMQorI2RlZmluZSBOU19IQVNIX1NIQTEgICAgICAgIDIKKyNkZWZpbmUgTlNfSEFTSF9TSEEyMjQgICAgICAzCisjZGVmaW5lIE5TX0hBU0hfU0hBMjU2ICAgICAgNAorI2RlZmluZSBOU19IQVNIX1NIQTM4NCAgICAgIDUKKyNkZWZpbmUgTlNfSEFTSF9TSEE1MTIgICAgICA2CisjZGVmaW5lIE5TX0hBU0hfTUFYICAgICAgICAgTlNfSEFTSF9TSEE1MTIKKworLyoqIFNOTVAtVExTLVRNLU1JQiAqLworI2RlZmluZSBTTk1QVExTRklOR0VSUFJJTlRfTUFYX0xFTiAgIDI1NQorCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKiBuZXRzbm1wX2NlcnQgZnVuY3Rpb24gZGVmaW5pdGlvbnMKKyAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICAgIG5ldHNubXBfY2VydCAqbmV0c25tcF9jZXJ0X2ZpbmQoaW50IHdoYXQsIGludCB3aGVyZSwgdm9pZCAqaGludCk7CisKKyAgICBpbnQgbmV0c25tcF9jZXJ0X2NoZWNrX3ZiX2ZpbmdlcnByaW50KGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsKKworICAgIHZvaWQgbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKGNoYXIgKmZwKTsKKyAgICBpbnQgbmV0c25tcF9jZXJ0X3BhcnNlX2hhc2hfdHlwZShjb25zdCBjaGFyICpzdHIpOworICAgIGludCBuZXRzbm1wX3Rsc19maW5nZXJwcmludF9idWlsZChpbnQgaGFzaF90eXBlLCBjb25zdCBjaGFyICpoZXhfZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqKnRsc19mcCwgc2l6ZV90ICp0bHNfZnBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYyk7CisgICAgaW50IG5ldHNubXBfdGxzX2ZpbmdlcnByaW50X3BhcnNlKGNvbnN0IHVfY2hhciAqYmluYXJ5X2ZwLCBpbnQgZnBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqZnBfc3RyX3B0ciwgdV9pbnQgKmZwX3N0cl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLCB1X2NoYXIgKmhhc2hfdHlwZV9wdHIpOworCisKKyAgICBpbnQgbmV0c25tcF9jZXJ0X3RydXN0KFNTTF9DVFggKmN0eCwgbmV0c25tcF9jZXJ0ICp0aGlzY2VydCk7CisgICAgaW50IG5ldHNubXBfY2VydF90cnVzdF9jYShTU0xfQ1RYICpjdHgsIG5ldHNubXBfY2VydCAqdGhpc2NlcnRzcm9vdGNhKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiAgY2VydGlmaWNhdGUgdG8gVHJhbnNwb3J0IFNlY3VyaXR5IE5hbWUgbWFwcGluZyAobmV0c25tcF9jZXJ0X21hcCkKKyAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkICAgICAgICAgICAgICAgICAxCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FOUkZDODIyTmFtZSAgICAgICAgICAgICAyCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FORE5TTmFtZSAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FOSXBBZGRyZXNzICAgICAgICAgICAgICA0CisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0U0FOQW55ICAgICAgICAgICAgICAgICAgICA1CisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZSAgICAgICAgICAgICAgICA2CisjZGVmaW5lIFRTTk1fdGxzdG1DZXJ0X01BWCAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWUKKworI2RlZmluZSBOU0NNX0ZST01fQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIE5TQ01fRlJPTV9NSUIgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDIKKyNkZWZpbmUgTlNDTV9OT05WT0xBVElMRSAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwNAorCisgICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9jZXJ0X21hcF9zIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5OworICAgICAgICBjaGFyICAgICAgICAgICAqZmluZ2VycHJpbnQ7CisgICAgICAgIGludCAgICAgICAgICAgICBtYXBUeXBlOworICAgICAgICBjaGFyICAgICAgICAgICAqZGF0YTsKKworICAgICAgICBjaGFyICAgICAgICAgICAgaGFzaFR5cGU7CisgICAgICAgIGNoYXIgICAgICAgICAgICBmbGFnczsKKworICAgICAgICBYNTA5ICAgICAgICAgICAqb2NlcnQ7CisgICAgfSBuZXRzbm1wX2NlcnRfbWFwOworCisgICAgbmV0c25tcF9jZXJ0X21hcCAqbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhjaGFyICpmcCwgWDUwOSAqb2NlcnQpOworICAgIHZvaWQgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG5ldHNubXBfY2VydF9tYXAgKmNlcnRfbWFwKTsKKyAgICBpbnQgbmV0c25tcF9jZXJ0X21hcF9hZGQobmV0c25tcF9jZXJ0X21hcCAqbWFwKTsKKyAgICBpbnQgbmV0c25tcF9jZXJ0X21hcF9yZW1vdmUobmV0c25tcF9jZXJ0X21hcCAqbWFwKTsKKyAgICBuZXRzbm1wX2NlcnRfbWFwICpuZXRzbm1wX2NlcnRfbWFwX2ZpbmQobmV0c25tcF9jZXJ0X21hcCAqbWFwKTsKKworICAgIHZvaWQgbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqYyk7CisgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2NyZWF0ZShpbnQgd2l0aF9mcCk7CisgICAgbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyKHZvaWQpOworCisgICAgaW50IG5ldHNubXBfY2VydF9nZXRfc2VjbmFtZV9tYXBzKG5ldHNubXBfY29udGFpbmVyICpjbSk7CisKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogIHNubXBUbHN0bVBhcmFtc1RhYmxlIGRhdGEKKyAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHR5cGVkZWYgc3RydWN0IHNubXBUbHN0bVBhcmFtc19zIHsKKyAgICAgICAgY2hhciAgICAgICAgICpuYW1lOworICAgICAgICBjaGFyICAgICAgICAgKmZpbmdlcnByaW50OworICAgICAgICBjaGFyICAgICAgICAgIGhhc2hUeXBlOworICAgICAgICB1X2NoYXIgICAgICAgIGZsYWdzOworICAgICAgICB1X2NoYXIgICAgICAgIGZpbmdlcnByaW50X2xlbjsKKyAgICB9IHNubXBUbHN0bVBhcmFtczsKKyAgICAKKyNkZWZpbmUgVExTVE1fUEFSQU1TX0ZST01fQ09ORklHICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVExTVE1fUEFSQU1TX0ZST01fTUlCICAgICAgICAgICAgIDB4MDIKKyNkZWZpbmUgVExTVE1fUEFSQU1TX05PTlZPTEFUSUxFICAgICAgICAgIDB4MDQKKy8qKiBpbmUgVExTVE1fUEFSQU1TX1hYWCAgICAgICAgICAgICAgICAgIDB4MDggKi8KKworICAgIHNubXBUbHN0bVBhcmFtcyAqbmV0c25tcF90bHN0bVBhcmFtc19jcmVhdGUoY29uc3QgY2hhciAqdGFnLCBpbnQgaGFzaFR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpmcCwgaW50IGZwX2xlbik7CisgICAgdm9pZCBuZXRzbm1wX3Rsc3RtUGFyYW1zX2ZyZWUoc25tcFRsc3RtUGFyYW1zICpzdHApOworICAgIHNubXBUbHN0bVBhcmFtcyAqbmV0c25tcF90bHN0bVBhcmFtc19yZXN0b3JlX2NvbW1vbihjaGFyICoqbGluZSk7CisKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF90bHN0bVBhcmFtc19jb250YWluZXIodm9pZCk7CisgICAgaW50IG5ldHNubXBfdGxzdG1QYXJhbXNfYWRkKHNubXBUbHN0bVBhcmFtcyAqc3RwKTsKKyAgICBpbnQgbmV0c25tcF90bHN0bVBhcmFtc19yZW1vdmUoc25tcFRsc3RtUGFyYW1zICpzdHApOworICAgIHNubXBUbHN0bVBhcmFtcyAqbmV0c25tcF90bHN0bVBhcmFtc19maW5kKHNubXBUbHN0bVBhcmFtcyAqc3RwKTsKKworICAgIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICoKKyAgICAgKiAgc25tcFRsc3RtQWRkclRhYmxlIGRhdGEKKyAgICAgKgorICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworICAgIHR5cGVkZWYgc3RydWN0IHNubXBUbHN0bUFkZHJfcyB7CisgICAgICAgIGNoYXIgICAgICAgICAqbmFtZTsKKyAgICAgICAgY2hhciAgICAgICAgICpmaW5nZXJwcmludDsKKyAgICAgICAgY2hhciAgICAgICAgICppZGVudGl0eTsKKyAgICAgICAgCisgICAgICAgIHVfY2hhciAgICAgICAgaGFzaFR5cGU7CisgICAgICAgIHVfY2hhciAgICAgICAgZmxhZ3M7CisgICAgICAgIAorICAgIH0gc25tcFRsc3RtQWRkcjsKKworI2RlZmluZSBUTFNUTV9BRERSX0ZST01fQ09ORklHICAgICAgICAgIDB4MDEKKyNkZWZpbmUgVExTVE1fQUREUl9GUk9NX01JQiAgICAgICAgICAgICAweDAyCisjZGVmaW5lIFRMU1RNX0FERFJfTk9OVk9MQVRJTEUgICAgICAgICAgMHgwNAorLyoqIGluZSBUTFNUTV9BRERSX1hYWCAgICAgICAgICAgICAgICAgIDB4MDggKi8KKworICAgIGludCBuZXRzbm1wX3Rsc3RtQWRkcl9yZXN0b3JlX2NvbW1vbihjaGFyICoqbGluZSwgY2hhciAqbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpuYW1lX2xlbiwgY2hhciAqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqaWRfbGVuLCBjaGFyICpmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpmcF9sZW4sIHVfY2hhciAqaHQpOworICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX3Rsc3RtQWRkcl9jb250YWluZXIodm9pZCk7CisgICAgc25tcFRsc3RtQWRkciAqbmV0c25tcF90bHN0bUFkZHJfZmluZChzbm1wVGxzdG1BZGRyICplbnRyeSk7CisgICAgc25tcFRsc3RtQWRkciAqbmV0c25tcF90bHN0bUFkZHJfY3JlYXRlKGNoYXIgKnRhcmdldEFkZHJOYW1lKTsKKyAgICB2b2lkIG5ldHNubXBfdGxzdG1BZGRyX2ZyZWUoc25tcFRsc3RtQWRkciAqZW50cnkpOworICAgIGludCBuZXRzbm1wX3Rsc3RtQWRkcl9hZGQoc25tcFRsc3RtQWRkciAqZW50cnkpOworICAgIGludCBuZXRzbm1wX3Rsc3RtQWRkcl9yZW1vdmUoc25tcFRsc3RtQWRkciAqZW50cnkpOworICAgIGNoYXIgKm5ldHNubXBfdGxzdG1BZGRyX2dldF9zZXJ2ZXJJZChjb25zdCBjaGFyICpuYW1lKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkgKi8KKworI2VuZGlmIC8qIE5FVFNOTVBfQ0VSVF9VVElMX0ggKi8KKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKaW5kZXggNDI3MWY3Ni4uMWUxNjE1YSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCkBAIC0xOCwyMSArMTgsMzEgQEAKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9zaXplX3JhbmdlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxvdywgc2l6ZV90IGhpZ2ggKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBzaXplX3Qgc2l6ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlLCBzaXplX3Qgc2l6ZSk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX29pZChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9pbnQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfdWludChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9pbnRfcmFuZ2UoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBsb3csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBoaWdoKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfY2hlY2tfdmJfdHJ1dGh2YWx1ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1c192YWx1ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXMoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBvbGRfdmFsKTsKKyAgICBpbnQgbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IG9sZF92YWwsIGludCBvbGRfc3RvcmFnZSk7CiAKICAgICBpbnQgbmV0c25tcF9jaGVja192Yl9zdG9yYWdldHlwZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IG9sZF92YWwpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY211X2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NtdV9jb21wYXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNTQ3NWM2Zi4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY211X2NvbXBhdC5oCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQotICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKLSAqIHRoYXQgbWF5IGFwcGx5OgotICovCi0vKgotICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKLSAqIENvcHlyaWdodCCpIDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQotICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KLSAqLwotCi0vKgotICogIENNVSBjb21wYXRhYmlsaXR5IGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzLgotICoKLSAqICAgIChzaW5jZSB0aGUgVUNEIHBhY2thZ2Ugc3BsaXQgZnJvbSB0aGUgQ01VIG9uZQotICogICAgIGFib3V0IDggeWVhcnMgYWdvLCB0aGF0J3MgcHJvYmFibHkgZW5vdWdoIHRpbWUKLSAqICAgICBmb3IgcGVvcGxlIHRvIGNvbnZlcnQgYW55IG91dHN0YW5kaW5nIGNvZGUhKQotICovCi0KLSNpZm5kZWYgTkVUX1NOTVBfQ01VX0NPTVBBVF9ICi0jZGVmaW5lIE5FVF9TTk1QX0NNVV9DT01QQVRfSAotCi0jaWZkZWYgX19jcGx1c3BsdXMKLWV4dGVybiAgICAgICAgICAiQyIgewotI2VuZGlmCi0KLSAgICAvKgotICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAgICAgKiAqCi0gICAgICogKiBFbnVtZXJhdGlvbnMgYW5kIGRlZmluaXRpb25zCi0gICAgICogKgotICAgICAqICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgKi8KLSNpbmNsdWRlIDxuZXQtc25tcC9kZWZpbml0aW9ucy5oPgotICAgIC8qCi0gICAgICogRnJvbSBwYXJzZS5oIAotICAgICAqLwotI2RlZmluZSBBQ0NFU1NfUkVBRE9OTFkJCU1JQl9BQ0NFU1NfUkVBRE9OTFkKLSNkZWZpbmUgQUNDRVNTX1JFQURXUklURQlNSUJfQUNDRVNTX1JFQURXUklURQotI2RlZmluZSBBQ0NFU1NfV1JJVEVPTkxZCU1JQl9BQ0NFU1NfV1JJVEVPTkxZCi0jZGVmaW5lIEFDQ0VTU19OT0FDQ0VTUwkJTUlCX0FDQ0VTU19OT0FDQ0VTUwotI2RlZmluZSBBQ0NFU1NfTk9USUZZCQlNSUJfQUNDRVNTX05PVElGWQotI2RlZmluZSBBQ0NFU1NfQ1JFQVRFCQlNSUJfQUNDRVNTX0NSRUFURQotI2RlZmluZSBTVEFUVVNfTUFOREFUT1JZCU1JQl9TVEFUVVNfTUFOREFUT1JZCi0jZGVmaW5lIFNUQVRVU19PUFRJT05BTAkJTUlCX1NUQVRVU19PUFRJT05BTAotI2RlZmluZSBTVEFUVVNfT0JTT0xFVEUJCU1JQl9TVEFUVVNfT0JTT0xFVEUKLSNkZWZpbmUgU1RBVFVTX0RFUFJFQ0FURUQJTUlCX1NUQVRVU19ERVBSRUNBVEVECi0jZGVmaW5lIFNUQVRVU19DVVJSRU5UCQlNSUJfU1RBVFVTX0NVUlJFTlQKLSAgICAvKgotICAgICAqIEZyb20gc21ucF9pbXBsLmggCi0gICAgICovCi0jZGVmaW5lIElOVEVHRVIJICAgIEFTTl9JTlRFR0VSCi0jZGVmaW5lIFNUUklORwkgICAgQVNOX09DVEVUX1NUUgotI2RlZmluZSBPQkpJRAkgICAgQVNOX09CSkVDVF9JRAotI2RlZmluZSBOVUxMT0JKCSAgICBBU05fTlVMTAotI2RlZmluZSBCSVRTVFJJTkcgICBBU05fQklUX1NUUiAvKiBISVNUT1JJQyAtIGRvbid0IHVzZSAqLwotI2RlZmluZSBJUEFERFJFU1MgICBBU05fSVBBRERSRVNTCi0jZGVmaW5lIENPVU5URVIJICAgIEFTTl9DT1VOVEVSCi0jZGVmaW5lIEdBVUdFCSAgICBBU05fR0FVR0UKLSNkZWZpbmUgVU5TSUdORUQgICAgQVNOX1VOU0lHTkVECi0jZGVmaW5lIFRJTUVUSUNLUyAgIEFTTl9USU1FVElDS1MKLSNkZWZpbmUgQVNOVF9PUEFRVUUgQVNOX09QQVFVRQotI2RlZmluZSBOU0FQCSAgICBBU05fTlNBUAotI2RlZmluZSBDT1VOVEVSNjQgICBBU05fQ09VTlRFUjY0Ci0jZGVmaW5lIFVJTlRFR0VSICAgIEFTTl9VSU5URUdFUgotICAgIC8qCi0gICAgICogRnJvbSBzbm1wLmggCi0gICAgICovCi0jZGVmaW5lIEdFVF9SRVFfTVNHCSAgICBTTk1QX01TR19HRVQKLSNkZWZpbmUgR0VUTkVYVF9SRVFfTVNHCSAgICBTTk1QX01TR19HRVRORVhUCi0jZGVmaW5lIEdFVF9SU1BfTVNHCSAgICBTTk1QX01TR19SRVNQT05TRQotI2RlZmluZSBTRVRfUkVRX01TRwkgICAgU05NUF9NU0dfU0VUCi0jZGVmaW5lIFRSUF9SRVFfTVNHCSAgICBTTk1QX01TR19UUkFQCi0jZGVmaW5lIEJVTEtfUkVRX01TRwkgICAgU05NUF9NU0dfR0VUQlVMSwotI2RlZmluZSBJTkZPUk1fUkVRX01TRwkgICAgU05NUF9NU0dfSU5GT1JNCi0jZGVmaW5lIFRSUDJfUkVRX01TRwkgICAgU05NUF9NU0dfVFJBUDIKLSNkZWZpbmUgUkVQT1JUX1JTUF9NU0cJICAgIFNOTVBfTVNHX1JFUE9SVAotICAgIC8qCi0gICAgICogc2luY2UgQ01VIFYxLjUgCi0gICAgICovCi0jZGVmaW5lIFNOTVBfUERVX0dFVAkgICAgU05NUF9NU0dfR0VUCi0jZGVmaW5lIFNOTVBfUERVX0dFVE5FWFQgICAgU05NUF9NU0dfR0VUTkVYVAotI2RlZmluZSBTTk1QX1BEVV9SRVNQT05TRSAgIFNOTVBfTVNHX1JFU1BPTlNFCi0jZGVmaW5lIFNOTVBfUERVX1NFVCAgICAgICAgU05NUF9NU0dfU0VUCi0jZGVmaW5lIFNOTVBfUERVX0dFVEJVTEsgICAgU05NUF9NU0dfR0VUQlVMSwotI2RlZmluZSBTTk1QX1BEVV9JTkZPUk0gICAgIFNOTVBfTVNHX0lORk9STQotI2RlZmluZSBTTk1QX1BEVV9WMlRSQVAgICAgIFNOTVBfTVNHX1RSQVAyCi0jZGVmaW5lIFNOTVBfUERVX1JFUE9SVCAgICAgU05NUF9NU0dfUkVQT1JUCi0jZGVmaW5lIFNOTVBfVFJBUF9BVVRIRU5USUNBVElPTkZBSUxVUkUgU05NUF9UUkFQX0FVVEhGQUlMCi0jZGVmaW5lIFNNSV9JTlRFR0VSICAgICBBU05fSU5URUdFUgotI2RlZmluZSBTTUlfU1RSSU5HICAgICAgQVNOX09DVEVUX1NUUgotI2RlZmluZSBTTUlfT0JKSUQgICAgICAgQVNOX09CSkVDVF9JRAotI2RlZmluZSBTTUlfTlVMTE9CSiAgICAgQVNOX05VTEwKLSNkZWZpbmUgU01JX0lQQUREUkVTUyAgIEFTTl9JUEFERFJFU1MKLSNkZWZpbmUgU01JX0NPVU5URVIzMglBU05fQ09VTlRFUgotI2RlZmluZSBTTUlfR0FVR0UzMglBU05fR0FVR0UKLSNkZWZpbmUgU01JX1VOU0lHTkVEMzIgIFNNSV9HQVVHRTMyCi0jZGVmaW5lIFNNSV9USU1FVElDS1MgICBBU05fVElNRVRJQ0tTCi0jZGVmaW5lIFNNSV9PUEFRVUUgICAgICBBU05fT1BBUVVFCi0jZGVmaW5lIFNNSV9DT1VOVEVSNjQgICBBU05fQ09VTlRFUjY0Ci0gICAgLyoKLSAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgICogKgotICAgICAqICogICAgIEZ1bmN0aW9uIGRlY2xhcmF0aW9ucwotICAgICAqICogICAgIGFuZCBnbG9iYWwgdmFyaWFibGVzCi0gICAgICogKgotICAgICAqICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PSAKLSAgICAgKi8KLWV4dGVybiBpbnQgICAgICBzbm1wX2R1bXBfcGFja2V0OyAgICAgICAvKiBmcm9tIHNubXBfYXBpLmggKi8KLWV4dGVybiBpbnQgICAgICBxdWlja19wcmludDsgICAgLyogZnJvbSBzbm1wX2FwaS5oICovCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPiAgICAgLyogZm9yIHNubXBfcGR1ICYgc25tcF9zZXNzaW9uICovCi0KLWludCAgICAgICAgICAgICBtaWJfVHh0VG9PaWQoY2hhciAqLCBvaWQgKiosIHNpemVfdCAqKTsgLyogZnJvbSBzbm1wLmggKi8KLWludCAgICAgICAgICAgICBtaWJfT2lkVG9UeHQob2lkICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QpOyAgICAvKiBmcm9tIHNubXAuaCAqLwotdV9jaGFyICAgICAgICAgKmNtdV9zbm1wX3BhcnNlKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW5ndGgpOyAgICAgIC8qIGZyb20gc25tcC5oICovCi0KLQotCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgICAgICAgKiAqCi0gICAgICAgICAqICogTUlCLUlJIGRhdGEgc3RydWN0dXJlcwotICAgICAgICAgKiAqICAgIChmcm9tIG1pYi5oKSAKLSAgICAgICAgICogKgotICAgICAgICAgKiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT0gCi0gICAgICAgICAqLwotCi0KLXN0cnVjdCBtaWJfc3lzdGVtIHsKLSAgICBjaGFyICAgICAgICAgICAgc3lzRGVzY3JbMzJdOyAgICAgICAvKiB0ZXh0dWFsIGRlc2NyaXB0aW9uICovCi0gICAgdV9jaGFyICAgICAgICAgIHN5c09iamVjdElEWzE2XTsgICAgLyogT0JKRUNUIElERU5USUZJRVIgb2Ygc3lzdGVtICovCi0gICAgdV9jaGFyICAgICAgICAgIE9iaklETGVuOyAgIC8qIGxlbmd0aCBvZiBzeXNPYmplY3RJRCAqLwotICAgIHVfaW50ICAgICAgICAgICBzeXNVcFRpbWU7ICAvKiBVcHRpbWUgaW4gMTAwL3Mgb2YgYSBzZWNvbmQgKi8KLX07Ci0KLXN0cnVjdCBtaWJfaW50ZXJmYWNlIHsKLSAgICBpbnQgICAgICAgICAgICAgaWZOdW1iZXI7ICAgLyogbnVtYmVyIG9mIGludGVyZmFjZXMgKi8KLX07Ci0KLXN0cnVjdCBtaWJfaWZFbnRyeSB7Ci0gICAgaW50ICAgICAgICAgICAgIGlmSW5kZXg7ICAgIC8qIGluZGV4IG9mIHRoaXMgaW50ZXJmYWNlICAqLwotICAgIGNoYXIgICAgICAgICAgICBpZkRlc2NyWzMyXTsgICAgICAgIC8qIGVuZ2xpc2ggZGVzY3JpcHRpb24gb2YgaW50ZXJmYWNlICovCi0gICAgaW50ICAgICAgICAgICAgIGlmVHlwZTsgICAgIC8qIG5ldHdvcmsgdHlwZSBvZiBkZXZpY2UgICAqLwotICAgIGludCAgICAgICAgICAgICBpZk10dTsgICAgICAvKiBzaXplIG9mIGxhcmdlc3QgcGFja2V0IGluIGJ5dGVzICAqLwotICAgIHVfaW50ICAgICAgICAgICBpZlNwZWVkOyAgICAvKiBiYW5kd2lkdGggaW4gYml0cy9zZWMgICAgKi8KLSAgICB1X2NoYXIgICAgICAgICAgaWZQaHlzQWRkcmVzc1sxMV07ICAvKiBpbnRlcmZhY2UncyBhZGRyZXNzICovCi0gICAgdV9jaGFyICAgICAgICAgIFBoeXNBZGRyTGVuOyAgICAgICAgLyogbGVuZ3RoIG9mIHBoeXNBZGRyICovCi0gICAgaW50ICAgICAgICAgICAgIGlmQWRtaW5TdGF0dXM7ICAgICAgLyogZGVzaXJlZCBzdGF0ZSBvZiBpbnRlcmZhY2UgKi8KLSAgICBpbnQgICAgICAgICAgICAgaWZPcGVyU3RhdHVzOyAgICAgICAvKiBjdXJyZW50IG9wZXJhdGlvbmFsIHN0YXR1cyAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkxhc3RDaGFuZ2U7ICAgICAgIC8qIHZhbHVlIG9mIHN5c1VwVGltZSB3aGVuIGN1cnJlbnQgc3RhdGUgZW50ZXJlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkluT2N0ZXRzOyAvKiBudW1iZXIgb2Ygb2N0ZXRzIHJlY2VpdmVkIG9uIGludGVyZmFjZSAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkluVWNhc3RQa3RzOyAgICAgIC8qIG51bWJlciBvZiB1bmljYXN0IHBhY2tldHMgZGVsaXZlcmVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmSW5OVWNhc3RQa3RzOyAgICAgLyogbnVtYmVyIG9mIGJyb2FkY2FzdHMgb3IgbXVsdGljYXN0cyAqLwotICAgIHVfaW50ICAgICAgICAgICBpZkluRGlzY2FyZHM7ICAgICAgIC8qIG51bWJlciBvZiBwYWNrZXRzIGRpc2NhcmRlZCB3aXRoIG5vIGVycm9yICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmSW5FcnJvcnM7IC8qIG51bWJlciBvZiBwYWNrZXRzIGNvbnRhaW5pbmcgZXJyb3JzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmSW5Vbmtub3duUHJvdG9zOyAgLyogbnVtYmVyIG9mIHBhY2tldHMgd2l0aCB1bmtub3duIHByb3RvY29sICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmT3V0T2N0ZXRzOyAgICAgICAgLyogbnVtYmVyIG9mIG9jdGV0cyB0cmFuc21pdHRlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpZk91dFVjYXN0UGt0czsgICAgIC8qIG51bWJlciBvZiB1bmljYXN0IHBhY2tldHMgc2VudCAqLwotICAgIHVfaW50ICAgICAgICAgICBpZk91dE5VY2FzdFBrdHM7ICAgIC8qIG51bWJlciBvZiBicm9hZGNhc3Qgb3IgbXVsdGljYXN0IHBrdHMgKi8KLSAgICB1X2ludCAgICAgICAgICAgaWZPdXREaXNjYXJkczsgICAgICAvKiBudW1iZXIgb2YgcGFja2V0cyBkaXNjYXJkZWQgd2l0aCBubyBlcnJvciAqLwotICAgIHVfaW50ICAgICAgICAgICBpZk91dEVycm9yczsgICAgICAgIC8qIG51bWJlciBvZiBwa3RzIGRpc2NhcmRlZCB3aXRoIGFuIGVycm9yICovCi0gICAgdV9pbnQgICAgICAgICAgIGlmT3V0UUxlbjsgIC8qIG51bWJlciBvZiBwYWNrZXRzIGluIG91dHB1dCBxdWV1ZSAqLwotfTsKLQotc3RydWN0IG1pYl9hdEVudHJ5IHsKLSAgICBpbnQgICAgICAgICAgICAgYXRJZkluZGV4OyAgLyogaW50ZXJmYWNlIG9uIHdoaWNoIHRoaXMgZW50cnkgbWFwcyAqLwotICAgIHVfY2hhciAgICAgICAgICBhdFBoeXNBZGRyZXNzWzExXTsgIC8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZGVzdGluYXRpb24gKi8KLSAgICB1X2NoYXIgICAgICAgICAgUGh5c0FkZHJlc3NMZW47ICAgICAvKiBsZW5ndGggb2YgYXRQaHlzQWRkcmVzcyAqLwotICAgIHVfaW50ICAgICAgICAgICBhdE5ldEFkZHJlc3M7ICAgICAgIC8qIElQIGFkZHJlc3Mgb2YgcGh5c2ljYWwgYWRkcmVzcyAqLwotfTsKLQotc3RydWN0IG1pYl9pcCB7Ci0gICAgaW50ICAgICAgICAgICAgIGlwRm9yd2FyZGluZzsgICAgICAgLyogMSBpZiBnYXRld2F5LCAyIGlmIGhvc3QgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBEZWZhdWx0VFRMOyAgICAgICAvKiBkZWZhdWx0IFRUTCBmb3IgcGt0cyBvcmlnaW5hdGluZyBoZXJlICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwSW5SZWNlaXZlczsgICAgICAgLyogbm8uIG9mIElQIHBhY2tldHMgcmVjZWl2ZWQgZnJvbSBpbnRlcmZhY2VzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwSW5IZHJFcnJvcnM7ICAgICAgLyogbnVtYmVyIG9mIHBrdHMgZGlzY2FyZGVkIGR1ZSB0byBoZWFkZXIgZXJyb3JzICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwSW5BZGRyRXJyb3JzOyAgICAgLyogbm8uIG9mIHBrdHMgZGlzY2FyZGVkIGR1ZSB0byBiYWQgYWRkcmVzcyAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEZvcndEYXRhZ3JhbXM7ICAgIC8qIG51bWJlciBwZiBwa3RzIGZvcndhcmRlZCB0aHJvdWdoIHRoaXMgZW50aXR5ICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwSW5Vbmtub3duUHJvdG9zOyAgLyogbm8uIG9mIGxvY2FsLWFkZHJlc3NlZCBwa3RzIHcvdW5rbm93biBwcm90byAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEluRGlzY2FyZHM7ICAgICAgIC8qIG51bWJlciBvZiBlcnJvci1mcmVlIHBhY2tldHMgZGlzY2FyZGVkICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwSW5EZWxpdmVyczsgICAgICAgLyogbnVtYmVyIG9mIGRhdGFncmFtcyBkZWxpdmVyZWQgdG8gdXBwZXIgbGV2ZWwgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBPdXRSZXF1ZXN0czsgICAgICAvKiBudW1iZXIgb2YgSVAgZGF0YWdyYW1zIG9yaWdpbmF0aW5nIGxvY2FsbHkgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBPdXREaXNjYXJkczsgICAgICAvKiBudW1iZXIgb2YgZXJyb3ItZnJlZSBvdXRwdXQgSVAgcGt0cyBkaXNjYXJkZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBPdXROb1JvdXRlczsgICAgICAvKiBudW1iZXIgb2YgSVAgcGt0cyBkaXNjYXJkZWQgZHVlIHRvIG5vIHJvdXRlICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUmVhc21UaW1lb3V0OyAgICAgLyogc2Vjb25kcyBmcmFnbWVudCBpcyBoZWxkIGF3YWl0aW5nIHJlYXNzZW1ibHkgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBSZWFzbVJlcWRzOyAgICAgICAvKiBuby4gb2YgZnJhZ21lbnRzIG5lZWRpbmcgcmVhc3NlbWJseSAoaGVyZSkgKi8KLSAgICB1X2ludCAgICAgICAgICAgaXBSZWFzbU9LczsgLyogbnVtYmVyIG9mIGZyYWdtZW50cyByZWFzc2VtYmxlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpcFJlYXNtRmFpbHM7ICAgICAgIC8qIG51bWJlciBvZiBmYWlsdXJlcyBpbiBJUCByZWFzc2VtYmx5ICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwRnJhZ09LczsgIC8qIG51bWJlciBvZiBkYXRhZ3JhbXMgZnJhZ21lbnRlZCBoZXJlICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwRnJhZ0ZhaWxzOyAgICAgICAgLyogbm8uIHBrdHMgdW5hYmxlIHRvIGJlIGZyYWdtZW50ZWQgaGVyZSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEZyYWdDcmVhdGVzOyAgICAgIC8qIG51bWJlciBvZiBJUCBmcmFnbWVudHMgY3JlYXRlZCBoZXJlICovCi19OwotCi1zdHJ1Y3QgbWliX2lwQWRkckVudHJ5IHsKLSAgICB1X2ludCAgICAgICAgICAgaXBBZEVudEFkZHI7ICAgICAgICAvKiBJUCBhZGRyZXNzIG9mIHRoaXMgZW50cnkgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBBZEVudElmSW5kZXg7ICAgICAvKiBJRiBmb3IgdGhpcyBlbnRyeSAqLwotICAgIHVfaW50ICAgICAgICAgICBpcEFkRW50TmV0TWFzazsgICAgIC8qIHN1Ym5ldCBtYXNrIG9mIHRoaXMgZW50cnkgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBBZEVudEJjYXN0QWRkcjsgICAvKiByZWFkIHRoZSBNSUIgZm9yIHRoaXMgb25lICovCi0gICAgaW50IAkgICAgaXBBZEVudFJlYXNtTWF4U2l6ZTsKLQkJLyogbWF4IHNpemUgZm9yIGRnIHJlYXNzZW1ibHkgICB7aXBBZGRyRW50cnkgNX0gKi8KLX07Ci0KLXN0cnVjdCBtaWJfaXBSb3V0ZUVudHJ5IHsKLSAgICB1X2ludCAgICAgICAgICAgaXBSb3V0ZURlc3Q7ICAgICAgICAvKiBkZXN0aW5hdGlvbiBJUCBhZGRyIGZvciB0aGlzIHJvdXRlICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVJZkluZGV4OyAgICAgLyogaW5kZXggb2YgbG9jYWwgSUYgZm9yIHRoaXMgcm91dGUgKi8KLSAgICBpbnQgICAgICAgICAgICAgaXBSb3V0ZU1ldHJpYzE7ICAgICAvKiBQcmltYXJ5IHJvdXRpbmcgbWV0cmljICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVNZXRyaWMyOyAgICAgLyogQWx0ZXJuYXRlIHJvdXRpbmcgbWV0cmljICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVNZXRyaWMzOyAgICAgLyogQWx0ZXJuYXRlIHJvdXRpbmcgbWV0cmljICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVNZXRyaWM0OyAgICAgLyogQWx0ZXJuYXRlIHJvdXRpbmcgbWV0cmljICovCi0gICAgdV9pbnQgICAgICAgICAgIGlwUm91dGVOZXh0SG9wOyAgICAgLyogSVAgYWRkciBvZiBuZXh0IGhvcCAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlVHlwZTsgICAgICAgIC8qIFR5cGUgb2YgdGhpcyByb3V0ZSAqLwotICAgIGludCAgICAgICAgICAgICBpcFJvdXRlUHJvdG87ICAgICAgIC8qIEhvdyB0aGlzIHJvdXRlIHdhcyBsZWFybmVkICovCi0gICAgaW50ICAgICAgICAgICAgIGlwUm91dGVBZ2U7IC8qIE5vLiBvZiBzZWNvbmRzIHNpbmNlIHVwZGF0aW5nIHRoaXMgcm91dGUgKi8KLX07Ci0KLXN0cnVjdCBtaWJfaWNtcCB7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbk1zZ3M7IC8qIFRvdGFsIG9mIElDTVAgbXNncyByZWNlaXZlZCAqLwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5FcnJvcnM7ICAgICAgIC8qIFRvdGFsIG9mIElDTVAgbXNncyByZWNlaXZlZCB3aXRoIGVycm9ycyAqLwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5EZXN0VW5yZWFjaHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJblRpbWVFeGNkczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluUGFybVByb2JzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5TcmNRdWVuY2hzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5SZWRpcmVjdHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBJbkVjaG9zOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5FY2hvUmVwczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluVGltZXN0YW1wczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluVGltZXN0YW1wUmVwczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcEluQWRkck1hc2tzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wSW5BZGRyTWFza1JlcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRNc2dzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0RXJyb3JzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0RGVzdFVucmVhY2hzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0VGltZUV4Y2RzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0UGFybVByb2JzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0U3JjUXVlbmNoczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dFJlZGlyZWN0czsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEVjaG9zOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0RWNob1JlcHM7Ci0gICAgdV9pbnQgICAgICAgICAgIGljbXBPdXRUaW1lc3RhbXBzOwotICAgIHVfaW50ICAgICAgICAgICBpY21wT3V0VGltZXN0YW1wUmVwczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEFkZHJNYXNrczsKLSAgICB1X2ludCAgICAgICAgICAgaWNtcE91dEFkZHJNYXNrUmVwczsKLX07Ci0KLXN0cnVjdCBtaWJfdGNwIHsKLSAgICBpbnQgICAgICAgICAgICAgdGNwUnRvQWxnb3JpdGhtOyAgICAvKiByZXRyYW5zbWlzc2lvbiB0aW1lb3V0IGFsZ29yaXRobSAqLwotICAgIGludCAgICAgICAgICAgICB0Y3BSdG9NaW47ICAvKiBtaW5pbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgKG1TKSAqLwotICAgIGludCAgICAgICAgICAgICB0Y3BSdG9NYXg7ICAvKiBtYXhpbXVtIHJldHJhbnNtaXNzaW9uIHRpbWVvdXQgKG1TKSAqLwotICAgIGludCAgICAgICAgICAgICB0Y3BNYXhDb25uOyAvKiBtYXhpbXVtIHRjcCBjb25uZWN0aW9ucyBwb3NzaWJsZSAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BBY3RpdmVPcGVuczsgICAgIC8qIG51bWJlciBvZiBTWU4tU0VOVCAtPiBDTE9TRUQgdHJhbnNpdGlvbnMgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwUGFzc2l2ZU9wZW5zOyAgICAvKiBudW1iZXIgb2YgU1lOLVJDVkQgLT4gTElTVEVOIHRyYW5zaXRpb25zICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcEF0dGVtcHRGYWlsczsgICAgLyooU1lOLVNFTlQsU1lOLVJDVkQpLT5DTE9TRUQgb3IgU1lOLVJDVkQtPkxJU1RFTiAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BFc3RhYlJlc2V0czsgICAgIC8qIChFU1RBQkxJU0hFRCxDTE9TRS1XQUlUKSAtPiBDTE9TRUQgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwQ3VyckVzdGFiOyAgICAgICAvKiBudW1iZXIgaW4gRVNUQUJMSVNIRUQgb3IgQ0xPU0UtV0FJVCBzdGF0ZSAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BJblNlZ3M7ICAvKiBudW1iZXIgb2Ygc2VnbWVudHMgcmVjZWl2ZWQgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwT3V0U2VnczsgLyogbnVtYmVyIG9mIHNlZ21lbnRzIHNlbnQgKi8KLSAgICB1X2ludCAgICAgICAgICAgdGNwUmV0cmFuc1NlZ3M7ICAgICAvKiBudW1iZXIgb2YgcmV0cmFuc21pdHRlZCBzZWdtZW50cyAqLwotfTsKLQotc3RydWN0IG1pYl90Y3BDb25uRW50cnkgewotICAgIGludCAgICAgICAgICAgICB0Y3BDb25uU3RhdGU7ICAgICAgIC8qIFN0YXRlIG9mIHRoaXMgY29ubmVjdGlvbiAqLwotICAgIHVfaW50ICAgICAgICAgICB0Y3BDb25uTG9jYWxBZGRyZXNzOyAgICAgICAgLyogbG9jYWwgSVAgYWRkcmVzcyBmb3IgdGhpcyBjb25uZWN0aW9uICovCi0gICAgaW50ICAgICAgICAgICAgIHRjcENvbm5Mb2NhbFBvcnQ7ICAgLyogbG9jYWwgcG9ydCBmb3IgdGhpcyBjb25uZWN0aW9uICovCi0gICAgdV9pbnQgICAgICAgICAgIHRjcENvbm5SZW1BZGRyZXNzOyAgLyogcmVtb3RlIElQIGFkZHJlc3MgZm9yIHRoaXMgY29ubmVjdGlvbiAqLwotICAgIGludCAgICAgICAgICAgICB0Y3BDb25uUmVtUG9ydDsgICAgIC8qIHJlbW90ZSBwb3J0IGZvciB0aGlzIGNvbm5lY3Rpb24gKi8KLX07Ci0KLXN0cnVjdCBtaWJfdWRwIHsKLSAgICB1X2ludCAgICAgICAgICAgdWRwSW5EYXRhZ3JhbXM7ICAgICAvKiBOby4gb2YgVURQIGRhdGFncmFtcyBkZWxpdmVyZWQgdG8gdXNlcnMgKi8KLSAgICB1X2ludCAgICAgICAgICAgdWRwTm9Qb3J0czsgLyogTm8uIG9mIFVEUCBkYXRhZ3JhbXMgdG8gcG9ydCB3aXRoIG5vIGxpc3RlbmVyICovCi0gICAgdV9pbnQgICAgICAgICAgIHVkcEluRXJyb3JzOyAgICAgICAgLyogTm8uIG9mIFVEUCBkYXRhZ3JhbXMgdW5hYmxlIHRvIGJlIGRlbGl2ZXJlZCAqLwotICAgIHVfaW50ICAgICAgICAgICB1ZHBPdXREYXRhZ3JhbXM7ICAgIC8qIE5vLiBvZiBVRFAgZGF0YWdyYW1zIHNlbnQgZnJvbSB0aGlzIGVudGl0eSAqLwotfTsKLQotc3RydWN0IG1pYl9lZ3AgewotICAgIHVfaW50ICAgICAgICAgICBlZ3BJbk1zZ3M7ICAvKiBOby4gb2YgRUdQIG1zZ3MgcmVjZWl2ZWQgd2l0aG91dCBlcnJvciAqLwotICAgIHVfaW50ICAgICAgICAgICBlZ3BJbkVycm9yczsgICAgICAgIC8qIE5vLiBvZiBFR1AgbXNncyByZWNlaXZlZCB3aXRoIGVycm9yICovCi0gICAgdV9pbnQgICAgICAgICAgIGVncE91dE1zZ3M7IC8qIE5vLiBvZiBFR1AgbXNncyBzZW50ICovCi0gICAgdV9pbnQgICAgICAgICAgIGVncE91dEVycm9yczsgICAgICAgLyogTm8uIG9mIChvdXRnb2luZykgRUdQIG1zZ3MgZHJvcHBlZCBkdWUgdG8gZXJyb3IgKi8KLX07Ci0KLXN0cnVjdCBtaWJfZWdwTmVpZ2hFbnRyeSB7Ci0gICAgaW50ICAgICAgICAgICAgIGVncE5laWdoU3RhdGU7ICAgICAgLyogbG9jYWwgRUdQIHN0YXRlIHdpdGggdGhpcyBlbnRyeSdzIG5laWdoYm9yICovCi0gICAgdV9pbnQgICAgICAgICAgIGVncE5laWdoQWRkcjsgICAgICAgLyogSVAgYWRkcmVzcyBvZiB0aGlzIGVudHJ5J3MgbmVpZ2hib3IgKi8KLX07Ci0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9TTk1QX0NNVV9DT01QQVRfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCmluZGV4IGM2YTQwN2YuLjk2MzI4OWUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKQEAgLTEsMyArMSwxMyBAQAorLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCiAjaWZuZGVmIE5FVFNOTVBfQ09OVEFJTkVSX0gKICNkZWZpbmUgTkVUU05NUF9DT05UQUlORVJfSAogCkBAIC0xNCw5ICsyNCwxMSBAQAogI2Vycm9yICJQbGVhc2UgaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+IGJlZm9yZSB0aGlzIGZpbGUiCiAjZW5kaWYKIAorI2luY2x1ZGUgPHN0ZGxpYi5oPiAvKiBmcmVlKCkgKi8KICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgogCiAjaWZkZWYgIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKQEAgLTMxLDcgKzQzLDE0IEBACiAgICAgc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3M7IC8qKiBmb3J3YXJkIGRlY2xhcmUgKi8KIAogICAgIC8qCi0gICAgICogZnVuY3Rpb24gcmV0dXJuaW5nIGFuIGludCBmb3IgYW4gb3BlcmF0aW9uIG9uIGEgY29udGFpbmVyCisgICAgICogZnVuY3Rpb24gZm9yIHBlcmZvcm1pbmcgYW4gb3BlcmF0aW9uIG9uIGEgY29udGFpbmVyIHdoaWNoCisgICAgICogcmV0dXJucyAobWF5YmUgdGhlIHNhbWUpIGNvbnRhaW5lci4KKyAgICAgKi8KKyAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zKiAobmV0c25tcF9jb250YWluZXJfbW9kX29wKQorICAgICAgICAoc3RydWN0IG5ldHNubXBfY29udGFpbmVyX3MgKiwgdm9pZCAqY29udGV4dCwgdV9pbnQgZmxhZ3MpOworCisgICAgLyoKKyAgICAgKiBmdW5jdGlvbiBmb3Igc2V0dGluZyBhbiBvcHRpb24gb24gYSBjb250YWluZXIKICAgICAgKi8KICAgICB0eXBlZGVmIGludCAobmV0c25tcF9jb250YWluZXJfb3B0aW9uKShzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfcyAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzZXQsIHVfaW50IGZsYWdzKTsKQEAgLTEzNSwxNyArMTU0LDE1IEBACiAgICAgICAgLyoKICAgICAgICAgKiByZWxlYXNlIG1lbW9yeSBmb3IgYW4gZW50cnkgZnJvbSB0aGUgY29udGFpbmVyCiAgICAgICAgICovCi0gICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgICAgKnJlbGVhc2U7Ci0KLSAgICAgICAvKgotICAgICAgICAqIE5vdGU6IGRvIG5vdCBjaGFuZ2UgdGhlIGtleSEgIElmIHlvdSBuZWVkIHRvCi0gICAgICAgICogY2hhbmdlIGEga2V5LCByZW1vdmUgdGhlIGVudHJ5LCBjaGFuZ2UgdGhlIGtleSwKLSAgICAgICAgKiBhbmQgdGhlIHJlLWFkZCB0aGUgZW50cnkuCi0gICAgICAgICovCisgICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgICAgKnJlbGVhc2U7IC8qIE5PVEU6IGRlcHJlY2F0ZWQuIFVzZSBmcmVlX2l0ZW0gKi8KKyAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqZnJlZV9pdGVtOwogCiAgICAgICAgLyoKICAgICAgICAgKiBmaW5kIHRoZSBlbnRyeSBpbiB0aGUgY29udGFpbmVyIHdpdGggdGhlIHNhbWUga2V5CiAgICAgICAgICoKKyAgICAgICAgKiBOb3RlOiBkbyBub3QgY2hhbmdlIHRoZSBrZXkhICBJZiB5b3UgbmVlZCB0bworICAgICAgICAqIGNoYW5nZSBhIGtleSwgcmVtb3ZlIHRoZSBlbnRyeSwgY2hhbmdlIHRoZSBrZXksCisgICAgICAgICogYW5kIHRoZSByZS1hZGQgdGhlIGVudHJ5LgogICAgICAgICAqLwogICAgICAgIG5ldHNubXBfY29udGFpbmVyX3J0biAgICpmaW5kOwogCkBAIC0xOTEsNiArMjA4LDE0IEBACiAgICAgICAgICovCiAgICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgICAgKmluc2VydF9maWx0ZXI7CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogT1BUSU9OQUwgZnVuY3Rpb24gdG8gZHVwbGljYXRlIGEgY29udGFpbmVyLiBEZWZhdWx0cyB0byBhIHNoYWxsb3cKKyAgICAgICAgICogY29weS4gT25seSB0aGUgc3BlY2lmaWVkIGNvbnRhaW5lciBpcyBjb3BpZWQgKGkuZS4gc3ViLWNvbnRhaW5lcnMKKyAgICAgICAgICogbm90IGluY2x1ZGVkKS4KKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfY29udGFpbmVyX21vZF9vcCAqZHVwbGljYXRlOworCisKICAgICAgICAvKgogICAgICAgICAqIGZ1bmN0aW9uIHRvIGNvbXBhcmUgdHdvIG9iamVjdCBzdG9yZWQgaW4gdGhlIGNvbnRhaW5lci4KICAgICAgICAgKgpAQCAtMjE5LDExICsyNDQsMTYgQEAKIAogICAgICAgIC8qCiAgICAgICAgICogc29ydCBjb3VudCwgZm9yIGl0ZXJhdG9ycyB0byB0cmFjayAoaW5zZXJ0L2RlbGV0ZQotICAgICAgICAqIGJ1bXBzIGNvdXRuZXIsIGludmFsaWRhdGVzIGl0ZXJhdG9yCisgICAgICAgICogYnVtcHMgY291bnRlciwgaW52YWxpZGF0ZXMgaXRlcmF0b3IpCiAgICAgICAgICovCiAgICAgICAgdV9sb25nICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jOwogCiAgICAgICAgLyoKKyAgICAgICAgKiBmbGFncworICAgICAgICAqLworICAgICAgIHVfaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisKKyAgICAgICAvKgogICAgICAgICAqIGNvbnRhaW5lcnMgY2FuIGNvbnRhaW4gb3RoZXIgY29udGFpbmVycyAoYWRkaXRpb25hbCBpbmRleGVzKQogICAgICAgICAqLwogICAgICAgIHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zICpuZXh0LCAqcHJldjsKQEAgLTIzNCw3ICsyNjQsOSBAQAogICAgICAqIGluaXRpYWxpemUvZnJlZSBhIGNvbnRhaW5lciBvZiBjb250YWluZXIgZmFjdG9yaWVzLiB1c2VkIGJ5CiAgICAgICogbmV0c25tcF9jb250YWluZXJfZmluZCogZnVuY3Rpb25zLgogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3Qodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX2ZyZWVfbGlzdCh2b2lkKTsKIAogICAgIC8qCkBAIC0yNDksMTIgKzI4MSwxNCBAQAogICAgICAqIHNlYXJjaCBmb3IgYW5kIGNyZWF0ZSBhIGNvbnRhaW5lciBmcm9tIGEgbGlzdCBvZiB0eXBlcyBvciBhCiAgICAgICogc3BlY2lmaWMgdHlwZS4KICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfY29udGFpbmVyICogbmV0c25tcF9jb250YWluZXJfZmluZChjb25zdCBjaGFyICp0eXBlX2xpc3QpOwogICAgIG5ldHNubXBfY29udGFpbmVyICogbmV0c25tcF9jb250YWluZXJfZ2V0KGNvbnN0IGNoYXIgKnR5cGUpOwogCiAgICAgLyoKICAgICAgKiB1dGlsaXR5IHJvdXRpbmVzCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleChuZXRzbm1wX2NvbnRhaW5lciAqcHJpbWFyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV3X2luZGV4KTsKIApAQCAtMjY1LDcgKzI5OSw5IEBACiAgICAgICogY29tbW9uIGNvbXBhcmlzb24gcm91dGluZXMKICAgICAgKi8KICAgICAvKiogZmlyc3QgZGF0YSBlbGVtZW50IGlzIGEgJ25ldHNubXBfaW5kZXgnICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9jb21wYXJlX25ldHNubXBfaW5kZXgoY29uc3Qgdm9pZCAqbGhzLCBjb25zdCB2b2lkICpyaHMpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IG5ldHNubXBfbmNvbXBhcmVfbmV0c25tcF9pbmRleChjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocyk7CiAKICAgICAvKiogZmlyc3QgZGF0YSBlbGVtZW50IGlzIGEgJ2NoYXIgKicgKi8KQEAgLTI3Niw3ICszMTIsMTYgQEAKICAgICBpbnQgbmV0c25tcF9jb21wYXJlX21lbShjb25zdCBjaGFyICogbGhzLCBzaXplX3QgbGhzX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogcmhzLCBzaXplX3QgcmhzX2xlbik7CiAKKyAgICAvKiogbm8gc3RydWN0dXJlLCBqdXN0ICdjaGFyIConIHBvaW50ZXJzICovCisgICAgaW50IG5ldHNubXBfY29tcGFyZV9kaXJlY3RfY3N0cmluZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKTsKKworICAgIGludCBuZXRzbm1wX2NvbXBhcmVfbG9uZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKTsKKyAgICBpbnQgbmV0c25tcF9jb21wYXJlX3Vsb25nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpOworICAgIGludCBuZXRzbm1wX2NvbXBhcmVfaW50MzIoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocyk7CisgICAgaW50IG5ldHNubXBfY29tcGFyZV91aW50MzIoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocyk7CisKICAgICAvKiogZm9yX2VhY2ggY2FsbGJhY2sgdG8gY2FsbCBmcmVlIG9uIGRhdGEgaXRlbSAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgbmV0c25tcF9jb250YWluZXJfc2ltcGxlX2ZyZWUodm9pZCAqZGF0YSwgdm9pZCAqY29udGV4dCk7CiAKIC8qCkBAIC0yODgsMTUgKzMzMywxNSBAQAogI2RlZmluZSBDT05UQUlORVJfU0VUX09QVElPTlMoeCxvLHJjKSAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICBpZiAoTlVMTD09KHgpLT5vcHRpb25zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcmMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgcmMgPSAoeCktPm9wdGlvbnMoeCwgMSwgbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKHJjICE9IC0xICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICh4KS0+ZmxhZ3MgfD0gbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUoMCkKIAogI2RlZmluZSBDT05UQUlORVJfQ0hFQ0tfT1BUSU9OKHgsbyxyYykgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBpZiAoTlVMTD09KHgpLT5vcHRpb25zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmMgPSAtMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgcmMgPSAoeCktPm9wdGlvbnMoeCwwLCBvKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICByYyA9IHgtPmZsYWdzICYgMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gd2hpbGUoMCkKIAogCkBAIC0zMjMsMTY4ICszNjgsNjcgQEAKICAgICAgKiBpbmxpbmUgZnVuY3Rpb25zLCB5b3UgbW9zdCBsaWtlbHkgaGF2ZSBvcHRpbWl6YXRpb25zIHR1cm5lZCBvZmYuCiAgICAgICogRWl0aGVyIHR1cm4gdGhlbSBiYWNrIG9uLCBvciBkZWZpbmUgTkVUU05NUF9OT19JTkxJTkUKICAgICAgKi8KLSNpZm5kZWYgTkVUU05NUF9VU0VfSU5MSU5FIC8qIGRlZmF1bHQgaXMgdG8gaW5saW5lICovCiAgICAgLyoKICAgICAgKiBpbnNlcnQgayBpbnRvIGFsbCBjb250YWluZXJzCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgQ09OVEFJTkVSX0lOU0VSVChuZXRzbm1wX2NvbnRhaW5lciAqeCwgY29uc3Qgdm9pZCAqayk7CiAKICAgICAvKgogICAgICAqIHJlbW92ZSBrIGZyb20gYWxsIGNvbnRhaW5lcnMKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCBDT05UQUlORVJfUkVNT1ZFKG5ldHNubXBfY29udGFpbmVyICp4LCBjb25zdCB2b2lkICprKTsKIAogICAgIC8qCisgICAgICogZHVwbGljYXRlIGNvbnRhaW5lcgorICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF9jb250YWluZXIgKkNPTlRBSU5FUl9EVVAobmV0c25tcF9jb250YWluZXIgKngsIHZvaWQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBmbGFncyk7CisKKyAgICAvKgogICAgICAqIGNsZWFyIGFsbCBjb250YWluZXJzLiBXaGVuIGNsZWFyaW5nIHRoZSAqZmlyc3QqIGNvbnRhaW5lciwgYW5kCiAgICAgICogKm9ubHkqIHRoZSBmaXJzdCBjb250YWluZXIsIGNhbGwgdGhlIGZ1bmN0aW9uIGYgZm9yIGVhY2ggaXRlbS4KICAgICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFsbCBjb250YWluZXJzIHNob3VsZCBiZSBlbXB0eS4KICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgQ09OVEFJTkVSX0NMRUFSKG5ldHNubXBfY29udGFpbmVyICp4LCBuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqZiwKICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmMpOworCisgICAgLyoKKyAgICAgKiBjbGVhciBhbGwgY29udGFpbmVycy4gV2hlbiBjbGVhcmluZyB0aGUgKmZpcnN0KiBjb250YWluZXIsIGFuZAorICAgICAqICpvbmx5KiB0aGUgZmlyc3QgY29udGFpbmVyLCBjYWxsIHRoZSBmcmVlX2l0ZW0gZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS4KKyAgICAgKiBBZnRlciBjYWxsaW5nIHRoaXMgZnVuY3Rpb24sIGFsbCBjb250YWluZXJzIHNob3VsZCBiZSBlbXB0eS4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgQ09OVEFJTkVSX0ZSRUVfQUxMKG5ldHNubXBfY29udGFpbmVyICp4LCB2b2lkICpjKTsKKwogICAgIC8qCiAgICAgICogZnJlZSBhbGwgY29udGFpbmVycwogICAgICAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50IENPTlRBSU5FUl9GUkVFKG5ldHNubXBfY29udGFpbmVyICp4KTsKLSNlbHNlCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KLSAgICAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCi0gICAgICovCi0gICAgTkVUU05NUF9TVEFUSUNfSU5MSU5FIC8qIGdjYyBkb2NzIHJlY29tbWVuZCBzdGF0aWMgdy9pbmxpbmUgKi8KLSAgICBpbnQgQ09OVEFJTkVSX0lOU0VSVF9IRUxQRVIobmV0c25tcF9jb250YWluZXIqIHgsIGNvbnN0IHZvaWQqIGspCi0gICAgewotICAgICAgICB3aGlsZSh4ICYmIHgtPmluc2VydF9maWx0ZXIgJiYgeC0+aW5zZXJ0X2ZpbHRlcih4LGspID09IDEpCi0gICAgICAgICAgICB4ID0geC0+bmV4dDsKLSAgICAgICAgaWYoeCkgewotICAgICAgICAgICAgaW50IHJjID0geC0+aW5zZXJ0KHgsayk7Ci0gICAgICAgICAgICBpZihyYykKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsImVycm9yIG9uIHN1YmNvbnRhaW5lciAnJXMnIGluc2VydCAoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIHgtPmNvbnRhaW5lcl9uYW1lID8geC0+Y29udGFpbmVyX25hbWUgOiAiIiwgcmMpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUX0hFTFBFUih4LT5uZXh0LCBrKTsKLSAgICAgICAgICAgICAgICBpZihyYykKLSAgICAgICAgICAgICAgICAgICAgeC0+cmVtb3ZlKHgsayk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gcmM7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQogCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KLSAgICAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCi0gICAgICovCi0gICAgTkVUU05NUF9TVEFUSUNfSU5MSU5FIC8qIGdjYyBkb2NzIHJlY29tbWVuZCBzdGF0aWMgdy9pbmxpbmUgKi8KLSAgICBpbnQgQ09OVEFJTkVSX0lOU0VSVChuZXRzbm1wX2NvbnRhaW5lciogeCwgY29uc3Qgdm9pZCogaykKLSAgICB7Ci0gICAgICAgIC8qKiBzdGFydCBhdCBmaXJzdCBjb250YWluZXIgKi8KLSAgICAgICAgd2hpbGUoeC0+cHJldikKLSAgICAgICAgICAgIHggPSB4LT5wcmV2OwotICAgICAgICByZXR1cm4gQ09OVEFJTkVSX0lOU0VSVF9IRUxQRVIoeCwgayk7Ci0gICAgfQotCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KLSAgICAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCi0gICAgICovCi0gICAgTkVUU05NUF9TVEFUSUNfSU5MSU5FIC8qIGdjYyBkb2NzIHJlY29tbWVuZCBzdGF0aWMgdy9pbmxpbmUgKi8KLSAgICBpbnQgQ09OVEFJTkVSX1JFTU9WRShuZXRzbm1wX2NvbnRhaW5lciAqeCwgY29uc3Qgdm9pZCAqaykKLSAgICB7Ci0gICAgICAgIGludCByYzIsIHJjID0gMDsKLSAgICAgICAgCi0gICAgICAgIC8qKiBzdGFydCBhdCBsYXN0IGNvbnRhaW5lciAqLwotICAgICAgICB3aGlsZSh4LT5uZXh0KQotICAgICAgICAgICAgeCA9IHgtPm5leHQ7Ci0gICAgICAgIHdoaWxlKHgpIHsKLSAgICAgICAgICAgIHJjMiA9IHgtPnJlbW92ZSh4LGspOwotICAgICAgICAgICAgLyoqIGlnbm9yZSByZW1vdmUgZXJyb3JzIGlmIHRoZXJlIGlzIGEgZmlsdGVyIGluIHBsYWNlICovCi0gICAgICAgICAgICBpZiAoKHJjMikgJiYgKE5VTEwgPT0geC0+aW5zZXJ0X2ZpbHRlcikpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBvbiBzdWJjb250YWluZXIgcmVtb3ZlICglZClcbiIsIHJjMik7Ci0gICAgICAgICAgICAgICAgcmMgPSByYzI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB4ID0geC0+cHJldjsKLSAgICAgICAgICAgIAotICAgICAgICB9Ci0gICAgICAgIHJldHVybiByYzsKLSAgICB9Ci0gICAgCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KLSAgICAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCi0gICAgICovCi0gICAgTkVUU05NUF9TVEFUSUNfSU5MSU5FIC8qIGdjYyBkb2NzIHJlY29tbWVuZCBzdGF0aWMgdy9pbmxpbmUgKi8KLSAgICBpbnQgQ09OVEFJTkVSX0ZSRUUobmV0c25tcF9jb250YWluZXIgKngpCi0gICAgewotCWludCAgcmMyLCByYyA9IDA7Ci0gICAgICAgIAotICAgICAgICAvKiogc3RhcnQgYXQgbGFzdCBjb250YWluZXIgKi8KLSAgICAgICAgd2hpbGUoeC0+bmV4dCkKLSAgICAgICAgICAgIHggPSB4LT5uZXh0OwotICAgICAgICB3aGlsZSh4KSB7Ci0gICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG1wOwotICAgICAgICAgICAgdG1wID0geC0+cHJldjsKLSAgICAgICAgICAgIGlmIChOVUxMICE9IHgtPmNvbnRhaW5lcl9uYW1lKQotICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh4LT5jb250YWluZXJfbmFtZSk7Ci0gICAgICAgICAgICByYzIgPSB4LT5jZnJlZSh4KTsKLSAgICAgICAgICAgIGlmIChyYzIpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBvbiBzdWJjb250YWluZXIgY2ZyZWUgKCVkKVxuIiwgcmMyKTsKLSAgICAgICAgICAgICAgICByYyA9IHJjMjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHggPSB0bXA7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0KLQotICAgIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCi0gICAgICogY29udGFpbmVyLmMuIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgotICAgICAqLwotICAgIC8qCi0gICAgICogY2xlYXIgYWxsIGNvbnRhaW5lcnMuIFdoZW4gY2xlYXJpbmcgdGhlICpmaXJzdCogY29udGFpbmVyLCBhbmQKLSAgICAgKiAqb25seSogdGhlIGZpcnN0IGNvbnRhaW5lciwgY2FsbCB0aGUgZnVuY3Rpb24gZiBmb3IgZWFjaCBpdGVtLgotICAgICAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYWxsIGNvbnRhaW5lcnMgc2hvdWxkIGJlIGVtcHR5LgotICAgICAqLwotICAgIE5FVFNOTVBfU1RBVElDX0lOTElORSAvKiBnY2MgZG9jcyByZWNvbW1lbmQgc3RhdGljIHcvaW5saW5lICovCi0gICAgdm9pZCBDT05UQUlORVJfQ0xFQVIobmV0c25tcF9jb250YWluZXIgKngsIG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jICpmLAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYykKLSAgICB7Ci0gICAgICAgIC8qKiBzdGFydCBhdCBsYXN0IGNvbnRhaW5lciAqLwotICAgICAgICB3aGlsZSh4LT5uZXh0KQotICAgICAgICAgICAgeCA9IHgtPm5leHQ7Ci0gICAgICAgIHdoaWxlKHgtPnByZXYpIHsKLSAgICAgICAgICAgIHgtPmNsZWFyKHgsIE5VTEwsIGMpOwotICAgICAgICAgICAgeCA9IHgtPnByZXY7Ci0gICAgICAgIH0KLSAgICAgICAgeC0+Y2xlYXIoeCwgZiwgYyk7Ci0gICAgfQotCi0gICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KLSAgICAgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCi0gICAgICovCi0gICAgLyoKLSAgICAgKiBGaW5kIGEgc3ViLWNvbnRhaW5lciB3aXRoIHRoZSBnaXZlbiBuYW1lCi0gICAgICovCi0gICAgTkVUU05NUF9TVEFUSUNfSU5MSU5FIC8qIGdjYyBkb2NzIHJlY29tbWVuZCBzdGF0aWMgdy9pbmxpbmUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfY29udGFpbmVyICpTVUJDT05UQUlORVJfRklORChuZXRzbm1wX2NvbnRhaW5lciAqeCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogbmFtZSkKLSAgICB7Ci0gICAgICAgIGlmICgoTlVMTCA9PSB4KSB8fCAoTlVMTCA9PSBuYW1lKSkKLSAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBuYW1lKTsKIAotICAgICAgICAvKiogc3RhcnQgYXQgZmlyc3QgY29udGFpbmVyICovCi0gICAgICAgIHdoaWxlKHgtPnByZXYpCi0gICAgICAgICAgICB4ID0geC0+cHJldjsKLSAgICAgICAgd2hpbGUoeCkgewotICAgICAgICAgICAgaWYgKChOVUxMICE9IHgtPmNvbnRhaW5lcl9uYW1lKSAmJgotICAgICAgICAgICAgICAgICgwID09IHN0cmNtcChuYW1lLHgtPmNvbnRhaW5lcl9uYW1lKSkpCi0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB4ID0geC0+bmV4dDsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4geDsKLSAgICB9CisgICAgLyoKKyAgICAgKiBJTlRFUk5BTCB1dGlsaXR5IHJvdXRpbmVzIGZvciBjb250YWluZXIgaW1wbGVtZW50YXRpb25zCisgICAgICovCisgICAgdm9pZCBuZXRzbm1wX2luaXRfY29udGFpbmVyKG5ldHNubXBfY29udGFpbmVyICAgICAgICAgKmMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3JjICAgICAgKmluaXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3JjICAgICAgKmNmcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9zaXplICAgICpzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlICpjbXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX29wICAgICAgKmlucywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfb3AgICAgICAqcmVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9ydG4gICAgICpmbmQpOworICAgIC8qKiBEdXBsaWNhdGUgY29udGFpbmVyIG1ldGEtZGF0YS4gKi8KKyAgICBpbnQgbmV0c25tcF9jb250YWluZXJfZGF0YV9kdXAobmV0c25tcF9jb250YWluZXIgKmR1cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXIgKmMpOwogCi0jZW5kaWYKICAgICAKICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICAqCkBAIC01MzQsMTIgKzQ3OCwyMCBAQAogCiAgICAgICAgbmV0c25tcF9pdGVyYXRvcl9ydG4gICAgICAgICAgKm5leHQ7CiAKKyAgICAgICAgLyoKKyAgICAgICAgICogcmVtb3ZlIHdpbGwgcmVtb3ZlIHRoZSBpdGVtIGF0IHRoZSBjdXJyZW50IHBvc2l0aW9uLCB0aGVuIGJhY2sgdXAKKyAgICAgICAgICogdGhlIGl0ZXJhdG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLiBUaGF0IHdheSBuZXh0IHdpbGwgbW92ZSB0byB0aGUKKyAgICAgICAgICogaXRlbSAodGhlIG9uZSB0aGF0IHJlcGxhY2VkIHRoZSByZW1vdmVkIGl0ZW0uCisgICAgICAgICAqLworICAgICAgIG5ldHNubXBfaXRlcmF0b3JfcmMgICAgICAgICAgICpyZW1vdmU7CisKICAgICB9IG5ldHNubXBfaXRlcmF0b3I7CiAKIAogI2RlZmluZSBJVEVSQVRPUl9GSVJTVCh4KSAgeC0+Zmlyc3QoeCkKICNkZWZpbmUgSVRFUkFUT1JfTkVYVCh4KSAgIHgtPm5leHQoeCkKICNkZWZpbmUgSVRFUkFUT1JfTEFTVCh4KSAgIHgtPmxhc3QoeCkKKyNkZWZpbmUgSVRFUkFUT1JfUkVNT1ZFKHgpIHgtPnJlbW92ZSh4KQogI2RlZmluZSBJVEVSQVRPUl9SRUxFQVNFKHgpIGRvIHsgeC0+cmVsZWFzZSh4KTsgeCA9IE5VTEw7IH0gd2hpbGUoMCkKICAgICAKICNpZmRlZiAgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCmluZGV4IDNhN2UyMzcuLjMzNmE4ZTkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaApAQCAtMzksNiArMzksNyBAQAogCiAgICAgaW50IG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KG5ldHNubXBfY29udGFpbmVyICpjLCBpbnQgc2V0LCB1X2ludCBmbGFncyk7CiAKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCmluZGV4IDAzOWJhNDguLjQ5NGYyMTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaApAQCAtMTYsNiArMTYsNyBAQAogICAgIG5ldHNubXBfY29udGFpbmVyICpuZXRzbm1wX2NvbnRhaW5lcl9nZXRfc29ydGVkX3NpbmdseV9saW5rZWRfbGlzdCh2b2lkKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9jb250YWluZXJfZ2V0X3NpbmdseV9saW5rZWRfbGlzdChpbnQgZmlmbyk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgbmV0c25tcF9jb250YWluZXJfc3NsbF9pbml0KHZvaWQpOwogCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgKaW5kZXggNjQ4OTYwNi4uYTU1ZDM0MiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgKQEAgLTEwLDYgKzEwLDcgQEAKIAogbmV0c25tcF9jb250YWluZXIgKm5ldHNubXBfY29udGFpbmVyX2dldF9udWxsKHZvaWQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIG5ldHNubXBfY29udGFpbmVyX251bGxfaW5pdCh2b2lkKTsKIAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKaW5kZXggYTY0ZTA3YS4uNTRhM2E1ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaApAQCAtNTYsNiArNTYsNyBAQAogICAgICAgIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKmRhdGFfbGlzdF9mcmVlX3B0cjsKICAgICB9IG5ldHNubXBfZGF0YV9saXN0X3NhdmVpbmZvOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBuZXRzbm1wX2RhdGFfbGlzdCAqCiAgICAgICBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoY29uc3QgY2hhciAqLCB2b2lkICosIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEqICk7CiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwKQEAgLTY0LDE3ICs2NSwyMyBAQAogICAgICAgbmV0c25tcF9kYXRhX2xpc3RfYWRkX2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKiBiZWVyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICpuZXRzbm1wX2dldF9saXN0X2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKmhlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpub2RlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICpoZWFkKTsgICAgLyogc2luZ2xlICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKmhlYWQpOyAgICAgICAgLyogbXVsdGlwbGUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3JlbW92ZV9saXN0X25vZGUobmV0c25tcF9kYXRhX2xpc3QgKipyZWFsaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9kYXRhX2xpc3QgKgogICAgIG5ldHNubXBfZ2V0X2xpc3Rfbm9kZShuZXRzbm1wX2RhdGFfbGlzdCAqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbmFtZSk7CiAKICAgICAvKiogZGVwcmVjaWF0ZWQ6IHVzZSBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSgpICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZGF0YV9saXN0ICpub2RlKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKaW5kZXggYWVkNDM1YS4uM2MzYzUxOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC0yNCwxOSArMjQsMjEgQEAKICNpZm5kZWYgREVGQVVMVF9TVE9SRV9ICiAjZGVmaW5lIERFRkFVTFRfU1RPUkVfSAogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAogI2RlZmluZSBORVRTTk1QX0RTX01BWF9JRFMgMwotI2RlZmluZSBORVRTTk1QX0RTX01BWF9TVUJJRFMgNDAgICAgICAgIC8qIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOCAqLworI2RlZmluZSBORVRTTk1QX0RTX01BWF9TVUJJRFMgNDggICAgICAgIC8qIG5lZWRzIHRvIGJlIGEgbXVsdGlwbGUgb2YgOCAqLwogCiAgICAgLyoKICAgICAgKiBiZWdpbiBzdG9yYWdlIGRlZmluaXRpb25zIAogICAgICAqLwogLyoqCiAgKiBAZGVmIE5FVFNOTVBfRFNfTElCUkFSWV9JRAotICogVGhlc2UgZGVmaW5pdGlvbnMgY29ycmVzcG9uZCB3aXRoIHRoZSAic3RvcmlkIiBhcmd1bWVudCB0byB0aGUgQVBJIAorICogVGhlc2UgZGVmaW5pdGlvbnMgY29ycmVzcG9uZCB3aXRoIHRoZSAic3RvcmlkIiBhcmd1bWVudCB0byB0aGUgQVBJLgogICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCUkFSWV9JRCAgICAgMAogI2RlZmluZSBORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lEIDEKQEAgLTg4LDIzICs5MCwzNSBAQAogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX1BFUlNJU1RFTlRfTE9BRCAgMzUgLyogZG9uJ3QgbG9hZCBwZXJzaXN0ZW50IGZpbGUgKi8KICNkZWZpbmUgTkVUU05NUF9EU19MSUJfRElTQUJMRV9QRVJTSVNURU5UX1NBVkUgIDM2IC8qIGRvbid0IHNhdmUgcGVyc2lzdGVudCBmaWxlICovCiAjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FQUEVORF9MT0dGSUxFUyAgICAgMzcgLyogYXBwZW5kLCBkb24ndCBvdmVyd3JpdGUsIGxvZyBmaWxlcyAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OT19ESVNDT1ZFUlkgICAgICAgIDM4IC8qIGRvbid0IHN1cHBvcnQgUkZDNTM0MyBjb250ZXh0RW5naW5lSUQgZGlzY292ZXJ5ICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1RTTV9VU0VfUFJFRklYICAgICAgMzkgLyogVFNNJ3Mgc2ltcGxlIHNlY3VyaXR5IG5hbWUgbWFwcGluZyAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX0xPQURfSE9TVF9GSUxFUyA0MCAvKiBkb24ndCByZWFkIGhvc3QuY29uZiBmaWxlcyAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ETlNTRUNfV0FSTl9PTkxZICAgICA0MSAvKiB0cmVhZCBETlNTRUMgZXJyb3JzIGFzIHdhcm5pbmdzICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX01BWF9CT09MX0lEICAgICAgICAgIDQ4IC8qIG1hdGNoIE5FVFNOTVBfRFNfTUFYX1NVQklEUyAqLwogCiAgICAgLyoKICAgICAgKiBsaWJyYXJ5IGludGVnZXJzIAogICAgICAqLwotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfV0FSTklOR1MgIDAKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTEVWRUwgICAgICAxCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NOTVBWRVJTSU9OICAgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQgIDMKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQgIDQKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfU1VGRklYX09OTFkgIE5FVFNOTVBfRFNfTElCX09JRF9PVVRQVVRfRk9STUFUCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9XQVJOSU5HUyAgICAgICAgIDAKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTEVWRUwgICAgICAgICAgICAgMQorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TTk1QVkVSU0lPTiAgICAgICAgICAyCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCAgICAgICAgIDMKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQgICAgNAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklOVF9TVUZGSVhfT05MWSAgICBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVAogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TVFJJTkdfT1VUUFVUX0ZPUk1BVCA1Ci0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hFWF9PVVRQVVRfTEVOR1RIIDYKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VSVkVSU0VOREJVRiAgIDcgLyogc2VuZCBidWZmZXIgKHNlcnZlcikgKi8KLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VSVkVSUkVDVkJVRiAgIDggLyogcmVjZWl2ZSBidWZmZXIgKHNlcnZlcikgKi8KLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UU0VOREJVRiAgIDkgLyogc2VuZCBidWZmZXIgKGNsaWVudCkgKi8KLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ0xJRU5UUkVDVkJVRiAgMTAgLyogcmVjZWl2ZSBidWZmZXIgKGNsaWVudCkgKi8KLQorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9IRVhfT1VUUFVUX0xFTkdUSCAgICA2CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFUlZFUlNFTkRCVUYgICAgICAgIDcgLyogc2VuZCBidWZmZXIgKHNlcnZlcikgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VSVkVSUkVDVkJVRiAgICAgICAgOCAvKiByZWNlaXZlIGJ1ZmZlciAoc2VydmVyKSAqLworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DTElFTlRTRU5EQlVGICAgICAgICA5IC8qIHNlbmQgYnVmZmVyIChjbGllbnQpICovCisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVFJFQ1ZCVUYgICAgICAgMTAgLyogcmVjZWl2ZSBidWZmZXIgKGNsaWVudCkgKi8KKyNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19QRVJNICAgICAxMQorI2RlZmluZSBORVRTTk1QX0RTX1NTSERPTUFJTl9ESVJfUEVSTSAgICAgIDEyCisjZGVmaW5lIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfVVNFUiAgICAgMTIKKyNkZWZpbmUgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19HUk9VUCAgICAxMworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9USU1FT1VUICAgICAgICAgICAgIDE0CisjZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JFVFJJRVMgICAgICAgICAgICAgMTUKKyNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUFYX0lOVF9JRCAgICAgICAgICA0OCAvKiBtYXRjaCBORVRTTk1QX0RTX01BWF9TVUJJRFMgKi8KKyAgICAKICAgICAvKgogICAgICAqIHNwZWNpYWwgbWVhbmluZ3MgZm9yIHRoZSBkZWZhdWx0IFNOTVAgdmVyc2lvbiBzbG90IChORVRTTk1QX0RTX0xJQl9TTk1QVkVSU0lPTikgCiAgICAgICovCkBAIC0xNDMsMjggKzE1Nyw1NCBAQAogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BUFBUWVBFUyAgICAgICAgICAyMAogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9LU01fS0VZVEFCICAgICAgICAyMQogI2RlZmluZSBORVRTTk1QX0RTX0xJQl9LU01fU0VSVklDRV9OQU1FICAyMgorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9YNTA5X0NMSUVOVF9QVUIgICAyMworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9YNTA5X1NFUlZFUl9QVUIgICAyNAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TU0hUT1NOTVBfU09DS0VUICAyNQorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9DRVJUX0VYVFJBX1NVQkRJUiAyNgorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9IT1NUTkFNRSAgICAgICAgICAyNworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9YNTA5X0NSTF9GSUxFICAgICAyOAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9UTFNfQUxHT1JJVE1TICAgICAyOQorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9UTFNfTE9DQUxfQ0VSVCAgICAzMAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9UTFNfUEVFUl9DRVJUICAgICAzMQorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TU0hfVVNFUk5BTUUgICAgICAzMgorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TU0hfUFVCS0VZICAgICAgICAzMworI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TU0hfUFJJVktFWSAgICAgICAzNAorI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NQVhfU1RSX0lEICAgICAgICA0OCAvKiBtYXRjaCBORVRTTk1QX0RTX01BWF9TVUJJRFMgKi8KIAogICAgIC8qCiAgICAgICogZW5kIHN0b3JhZ2UgZGVmaW5pdGlvbnMgCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfYm9vbGVhbihpbnQgc3RvcmVpZCwgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBpbnQgdmFsdWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoaW50IHN0b3JlaWQsIGludCB3aGljaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp2YWx1ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqbmV0c25tcF9kc19nZXRfc3RyaW5nKGludCBzdG9yZWlkLCBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X3ZvaWQoaW50IHN0b3JlaWQsIGludCB3aGljaCwgdm9pZCAqdmFsdWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgKm5ldHNubXBfZHNfZ2V0X3ZvaWQoaW50IHN0b3JlaWQsIGludCB3aGljaCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcodV9jaGFyIHR5cGUsIGNvbnN0IGNoYXIgKmZ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGludCBzdG9yZWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHdoaWNoKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYih1X2NoYXIgdHlwZSwgY29uc3QgY2hhciAqZnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgaW50IHN0b3JlaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbihjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2RzX3NodXRkb3duKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kaXJfdXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzFiYjBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2lmbmRlZiBORVRTTk1QX0RJUl9VVElMU19ICisjZGVmaW5lIE5FVFNOTVBfRElSX1VUSUxTX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBmaWx0ZXIgZnVuY3Rpb247IHJldHVybiAxIHRvIGluY2x1ZGUgZmlsZSwgMCB0byBleGNsdWRlCisgICAgICovCisjZGVmaW5lIE5FVFNOTVBfRElSX0VYQ0xVREUgMAorI2RlZmluZSBORVRTTk1QX0RJUl9JTkNMVURFIDEKKyAgICB0eXBlZGVmIGludCAobmV0c25tcF9kaXJlY3RvcnlfZmlsdGVyKShjb25zdCB2b2lkICp0ZXh0LCB2b2lkICpjdHgpOworCisKKyAgICAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAqCisgICAgICogUHJvdG90eXBlcworICAgICAqLworICAgIG5ldHNubXBfY29udGFpbmVyICoKKyAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZF9zb21lKG5ldHNubXBfY29udGFpbmVyICp1c2VyX2NvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9maWx0ZXIgKmZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmZpbHRlcl9jdHgsIHVfaW50IGZsYWdzKTsKKworI2RlZmluZSBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZChjLGQsZikgXAorICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkX3NvbWUoYyxkLE5VTEwsTlVMTCxmKTsKKworICAgIHZvaWQgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmMpOworCisgICAgICAgIAorCisgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgKgorICAgICAqIGZsYWdzCisgICAgICovCisjZGVmaW5lIE5FVFNOTVBfRElSX1JFQ1VSU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEKKyNkZWZpbmUgTkVUU05NUF9ESVJfUkVMQVRJVkVfUEFUSCAgICAgICAgICAgICAgICAgICAgIDB4MDAwMgorI2RlZmluZSBORVRTTk1QX0RJUl9TT1JURUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDA0CisvKiogZG9uJ3QgcmV0dXJuIG51bGwgaWYgZGlyIGVtcHR5ICovCisjZGVmaW5lIE5FVFNOTVBfRElSX0VNUFRZX09LICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDgKKy8qKiBzdG9yZSBuZXRzbm1wX2ZpbGUgaW5zdGVhZCBvZiBmaWxlbmFtZXMgKi8KKyNkZWZpbmUgTkVUU05NUF9ESVJfTlNGSUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAxMAorLyoqIGxvYWQgc3RhdHMgaW4gbmV0c25tcF9maWxlICovCisjZGVmaW5lIE5FVFNOTVBfRElSX05TRklMRV9TVEFUUyAgICAgICAgICAgICAgICAgICAgICAweDAwMjAKKworICAgIAorICAgICAgICAKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBORVRTTk1QX0RJUl9VVElMU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaAppbmRleCA0YjcyNDJkLi5lZGU2N2I0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmRfZXZlbnRfbWFuYWdlci5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKQEAgLTg4LDggKzg4LDE1IEBACiAgKgogICogU2lkZSBFZmZlY3RzOiBOb25lCiAgKi8KK05FVFNOTVBfSU1QT1JUCiB2b2lkIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbyhpbnQgKm51bWZkcywgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLCBmZF9zZXQgKmV4Y2VwdGZkcyk7CiAKK05FVFNOTVBfSU1QT1JUCit2b2lkIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbzIoaW50ICpudW1mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnJlYWRmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpleGNlcHRmZHMpOworCiAvKgogICogRGlzcGF0Y2ggRXh0ZXJuYWwgRXZlbnRzCiAgKgpAQCAtMTE0LDcgKzEyMSwxMyBAQAogICoKICAqIFNpZGUgRWZmZWN0czogTm9uZQogICovCitORVRTTk1QX0lNUE9SVAogdm9pZCBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cyhpbnQgKmNvdW50LCBmZF9zZXQgKnJlYWRmZHMsIGZkX3NldCAqd3JpdGVmZHMsIGZkX3NldCAqZXhjZXB0ZmRzKTsKK05FVFNOTVBfSU1QT1JUCit2b2lkIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzMihpbnQgKmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnJlYWRmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqd3JpdGVmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZXhjZXB0ZmRzKTsKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZpbGVfdXRpbHMuaAppbmRleCBmYTliNWE0Li45ZjVjZGNlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmgKQEAgLTEzLDMyICsxMywyMyBAQAogICAgICAqLwogICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfZmlsZV9zIHsKICAgICAgICAgCi0gICAgICAgIC8qCi0gICAgICAgICAqIGZpbGUgbmFtZQotICAgICAgICAgKi8KKyAgICAgICAgLyoqIGZpbGUgbmFtZSAqLwogICAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICpuYW1lOwogICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogZmlsZSBkZXNjcmlwdG9yIGZvciB0aGUgZmlsZQotICAgICAgICAgKi8KKyAgICAgICAgLyoqIGZpbGUgZGVzY3JpcHRvciBmb3IgdGhlIGZpbGUgKi8KICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZmQ7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogZmlsZXN5c3RlbSBmbGFncwotICAgICAgICAgKi8KKyAgICAgICAgLyoqIGZpbGVzeXN0ZW0gZmxhZ3MgKi8KICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgZnNfZmxhZ3M7CiAKLSAgICAgICAgLyoKLSAgICAgICAgICogb3Blbi9jcmVhdGUgbW9kZQotICAgICAgICAgKi8KKyAgICAgICAgLyoqIG9wZW4vY3JlYXRlIG1vZGUgKi8KICAgICAgICAgbW9kZV90ICAgICAgICAgICAgICAgICAgbW9kZTsKIAotICAgICAgICAvKgotICAgICAgICAgKiBuZXRzbm1wIGZsYWdzCi0gICAgICAgICAqLworICAgICAgICAvKiogbmV0c25tcCBmbGFncyAqLwogICAgICAgICB1X2ludCAgICAgICAgICAgICAgICAgICBuc19mbGFnczsKIAotCisgICAgICAgIC8qKiBmaWxlIHN0YXRzICovCisgICAgICAgIHN0cnVjdCBzdGF0ICAgICAgICAgICAgKnN0YXRzOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGZ1dHVyZSBleHBhbnNpb24KQEAgLTU0LDYgKzQ1LDkgQEAKICAgICAgKiBQcm90b3R5cGVzCiAgICAgICoKICAgICAgKi8KKyAgICBuZXRzbm1wX2ZpbGUgKm5ldHNubXBfZmlsZV9uZXcoY29uc3QgY2hhciAqbmFtZSwgaW50IGZzX2ZsYWdzLCBtb2RlX3QgbW9kZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbnNfZmxhZ3MpOworCiAgICAgbmV0c25tcF9maWxlICogbmV0c25tcF9maWxlX2NyZWF0ZSh2b2lkKTsKICAgICBuZXRzbm1wX2ZpbGUgKiBuZXRzbm1wX2ZpbGVfZmlsbChuZXRzbm1wX2ZpbGUgKiBmaWxlaSwgY29uc3QgY2hhciogbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgZnNfZmxhZ3MsIG1vZGVfdCBtb2RlLCB1X2ludCBuc19mbGFncyk7CkBAIC02Miw3ICs1NiwxMSBAQAogICAgIGludCBuZXRzbm1wX2ZpbGVfb3BlbihuZXRzbm1wX2ZpbGUgKiBmaWxlaSk7CiAgICAgaW50IG5ldHNubXBfZmlsZV9jbG9zZShuZXRzbm1wX2ZpbGUgKiBmaWxlaSk7CiAKLSAgICAgICAgCisgICAgLyoqIHN1cHBvcnQgbmV0c25tcF9maWxlIGNvbnRhaW5lcnMgKi8KKyAgICBpbnQgbmV0c25tcF9maWxlX2NvbXBhcmVfbmFtZShuZXRzbm1wX2ZpbGUgKmxocywgbmV0c25tcF9maWxlICpyaHMpOworICAgIHZvaWQgbmV0c25tcF9maWxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfZmlsZSAqZmlsZSwgdm9pZCAqY29udGV4dCk7CisKKwogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgKgpAQCAtNzAsNyArNjgsOCBAQAogICAgICAqCiAgICAgICovCiAjZGVmaW5lIE5FVFNOTVBfRklMRV9OT19BVVRPQ0xPU0UgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwMQotI2RlZmluZSBORVRTTk1QX0ZJTEVfICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkVUU05NUF9GSUxFX1NUQVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDAwMDAyCisjZGVmaW5lIE5FVFNOTVBfRklMRV9BVVRPX09QRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAwMDAwNAogCiAgICAgLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICAgKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCmluZGV4IDBmNGQ2OTEuLmY3MGZmZTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKQEAgLTEsNiArMSwxMiBAQAogI2lmbmRlZiBfR0VUT1BUX0hfCiAjZGVmaW5lIF9HRVRPUFRfSF8gMQogCisjaWZuZGVmIE5FVF9TTk1QX0NPTkZJR19ICisjZXJyb3IgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBtdXN0IGJlIGluY2x1ZGVkIGJlZm9yZSA8bmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaD4uCisjZW5kaWYKKworI2lmICFkZWZpbmVkKEhBVkVfR0VUT1BUX0gpCisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKQEAgLTEyLDQgKzE4LDcgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCisKKyNlbmRpZiAvKiBIQVZFX0dFVE9QVF9IICovCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAppbmRleCBmZGM2ODA1Li45YzdjODk0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaApAQCAtMTMsMTEgKzEzLDE1IEBACiAgICAgdm9pZCAgICAgICAgICAgIG11bHRCeTEwKFU2NCwgVTY0ICopOwogICAgIHZvaWQgICAgICAgICAgICBpbmNyQnlVMTYoVTY0ICosIHVuc2lnbmVkIGludCk7CiAgICAgdm9pZCAgICAgICAgICAgIGluY3JCeVUzMihVNjQgKiwgdW5zaWduZWQgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB6ZXJvVTY0KFU2NCAqKTsKICAgICBpbnQgICAgICAgICAgICAgaXNaZXJvVTY0KGNvbnN0IFU2NCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludFU2NChjaGFyICosIGNvbnN0IFU2NCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludEk2NChjaGFyICosIGNvbnN0IFU2NCAqKTsKICAgICBpbnQgICAgICAgICAgICAgcmVhZDY0KFU2NCAqLCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHU2NFN1YnRyYWN0KGNvbnN0IFU2NCAqIHB1NjRvbmUsIGNvbnN0IFU2NCAqIHB1NjR0d28sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFU2NCAqIHB1NjRvdXQpOwogICAgIHZvaWQgICAgICAgICAgICB1NjRJbmNyKFU2NCAqIHB1NjRvdXQsIGNvbnN0IFU2NCAqIHB1NjRvbmUpOwpAQCAtMjcsNiArMzEsNyBAQAogCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKFU2NCAqb2xkX3ZhbCwgVTY0ICpuZXdfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWRqdXN0KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUoc3RydWN0IGNvdW50ZXI2NCAqcHJldl92YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY291bnRlcjY0ICpuZXdfdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNvdW50ZXI2NCAqb2xkX3ByZXZfdmFsLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAppbmRleCAyMjc2MjE2Li40NGFjYzQ4IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaApAQCAtMjQsMjEgKzI0LDI1IEBACiAgICAgLyoKICAgICAgKiBQcm90b3R5cGVzLmgKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBnZW5lcmF0ZV9LdShjb25zdCBvaWQgKiBoYXNodHlwZSwgdV9pbnQgaGFzaHR5cGVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBQLCBzaXplX3QgcHBsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIFAsIHNpemVfdCBwcGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogS3UsIHNpemVfdCAqIGt1bGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGdlbmVyYXRlX2t1bChjb25zdCBvaWQgKiBoYXNodHlwZSwgdV9pbnQgaGFzaHR5cGVfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogZW5naW5lSUQsIHNpemVfdCBlbmdpbmVJRF9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBLdSwgc2l6ZV90IGt1X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCBzaXplX3QgZW5naW5lSURfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogS3UsIHNpemVfdCBrdV9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBLdWwsIHNpemVfdCAqIGt1bF9sZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZW5jb2RlX2tleWNoYW5nZShjb25zdCBvaWQgKiBoYXNodHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBoYXNodHlwZV9sZW4sIHVfY2hhciAqIG9sZGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xka2V5X2xlbiwgdV9jaGFyICogbmV3a2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuZXdrZXlfbGVuLCB1X2NoYXIgKiBrY3N0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBrY3N0cmluZ19sZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZGVjb2RlX2tleWNoYW5nZShjb25zdCBvaWQgKiBoYXNodHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBoYXNodHlwZV9sZW4sIHVfY2hhciAqIG9sZGtleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2xka2V5X2xlbiwgdV9jaGFyICoga2NzdHJpbmcsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzZmEwMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sYXJnZV9mZF9zZXQuaApAQCAtMCwwICsxLDE3MyBAQAorLyoqCisgKiBAZmlsZSAgbGFyZ2VfZmRfc2V0LmgKKyAqCisgKiBAYnJpZWYgTWFjcm8ncyBhbmQgZnVuY3Rpb25zIGZvciBtYW5pcHVsYXRpb24gb2YgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yIHNldHMuCisgKi8KKworCisjaWZuZGVmIExBUkdFX0ZEX1NFVF9ICisjZGVmaW5lIExBUkdFX0ZEX1NFVF9ICisKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKKyNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkgJiYgIWRlZmluZWQoX1dJTlNPQ0tBUElfKSAmJiAhZGVmaW5lZChfV0lOU09DS19IKQorI2Vycm9yIDx3aW5zb2NrLmg+IG9yIDx3aW5zb2NrMi5oPiBtdXN0IGhhdmUgYmVlbiBpbmNsdWRlZCBiZWZvcmUgdGhpcyBmaWxlLgorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKworLyoqCisgKiBBZGQgc29ja2V0IGZkIHRvIHRoZSBzZXQgKmZkc2V0IGlmIG5vdCB5ZXQgcHJlc2VudC4KKyAqIEVubGFyZ2VzIHRoZSBzZXQgaWYgbmVjZXNzYXJ5LgorICovCisjZGVmaW5lIE5FVFNOTVBfTEFSR0VfRkRfU0VUKGZkLCBmZHNldCkgXAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldGZkKGZkLCBmZHNldCkKKworLyoqCisgKiBSZW1vdmUgc29ja2V0IGZkIGZyb20gdGhlIHNldCAqZmRzZXQuCisgKiBEbyBub3RoaW5nIGlmIGZkIGlzIG5vdCBwcmVzZW50IGluICpmZHNldC4KKyAqIERvIG5vdGhpbmcgaWYgZmQgPj0gZmRzZXQtPmxmc19zZXRzaXplLgorICovCisjZGVmaW5lIE5FVFNOTVBfTEFSR0VfRkRfQ0xSKGZkLCBmZHNldCkgXAorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX2NscihmZCwgZmRzZXQpCisKKy8qKgorICogVGVzdCB3aGV0aGVyIHNldCAqZmRzZXQgY29udGFpbnMgc29ja2V0IGZkLgorICogRXZhbHVhdGVzIHRvIHplcm8gKGZhbHNlKSBpZiBmZCA+PSBmZHNldC0+bGZzX3NldHNpemUuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9MQVJHRV9GRF9JU1NFVChmZCwgZmRzZXQpIFwKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoZmQsIGZkc2V0KQorCisjaWYgIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorCisvKioKKyAqIE51bWJlciBvZiBieXRlcyBuZWVkZWQgdG8gc3RvcmUgYSBudW1iZXIgb2YgZmlsZSBkZXNjcmlwdG9ycyBhcyBhCisgKiBzdHJ1Y3QgZmRfc2V0LgorICovCisjZGVmaW5lIE5FVFNOTVBfRkRfU0VUX0JZVEVTKHNldHNpemUpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHNpemVvZihmZF9zZXQpICsgKChzZXRzaXplKSA+IEZEX1NFVFNJWkUgPyAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICgoc2V0c2l6ZSkgLSBGRF9TRVRTSVpFKSAqIHNpemVvZihTT0NLRVQpIDogMCkpCisKKy8qKiBSZW1vdmUgYWxsIHNvY2tldHMgZnJvbSB0aGUgc2V0ICpmZHNldC4gKi8KKyNkZWZpbmUgTkVUU05NUF9MQVJHRV9GRF9aRVJPKGZkc2V0KSBcCisgICAgZG8geyAoZmRzZXQpLT5sZnNfc2V0cHRyLT5mZF9jb3VudCA9IDA7IH0gd2hpbGUoMCkKKworCitORVRTTk1QX0lNUE9SVAordm9pZCAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ZmQoIFNPQ0tFVCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKK05FVFNOTVBfSU1QT1JUCit2b2lkICAgbmV0c25tcF9sYXJnZV9mZF9jbHIoICAgU09DS0VUIGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOworTkVUU05NUF9JTVBPUlQKK2ludCAgICBuZXRzbm1wX2xhcmdlX2ZkX2lzX3NldChTT0NLRVQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7CisKKyNlbHNlCisKKy8qKgorICogU2l6ZSBvZiBhIHNpbmdsZSBlbGVtZW50IG9mIHRoZSBhcnJheSB3aXRoIGZpbGUgZGVzY3JpcHRvciBiaXRtYXNrcy4KKyAqCisgKiBBY2NvcmRpbmcgdG8gU1VTdjIsIHRoaXMgYXJyYXkgbXVzdCBoYXZlIHRoZSBuYW1lIGZkc19iaXRzLiBTZWUgYWxzbworICogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL29ubGluZXB1YnMvMDA3OTA4Nzc1L3hzaC9zeXN0aW1lLmguaHRtbCI+VGhlIFNpbmdsZSBVTklYIFNwZWNpZmljYXRpb24sIFZlcnNpb24gMiwgJmx0O3N5cy90aW1lLmgmZ3Q7PC9hPi4KKyAqLworI2RlZmluZSBORVRTTk1QX0ZEX01BU0tfU0laRSBzaXplb2YoKChmZF9zZXQqKTApLT5mZHNfYml0c1swXSkKKworLyoqIE51bWJlciBvZiBiaXRzIGluIG9uZSBlbGVtZW50IG9mIHRoZSBmZF9zZXQuZmRzX2JpdHMgYXJyYXkuICovCisjZGVmaW5lIE5FVFNOTVBfQklUU19QRVJfRkRfTUFTSyAoOCAqIE5FVFNOTVBfRkRfTUFTS19TSVpFKQorCisvKiogTnVtYmVyIG9mIGVsZW1lbnRzIG5lZWRlZCBmb3IgdGhlIGZkc19iaXRzIGFycmF5LiAqLworI2RlZmluZSBORVRTTk1QX0ZEX1NFVF9FTEVNX0NPVU5UKHNldHNpemUpIFwKKyAgICAoc2V0c2l6ZSArIE5FVFNOTVBfQklUU19QRVJfRkRfTUFTSyAtIDEpIC8gTkVUU05NUF9CSVRTX1BFUl9GRF9NQVNLCisKKy8qKgorICogTnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byBzdG9yZSBhIG51bWJlciBvZiBmaWxlIGRlc2NyaXB0b3JzIGFzIGEKKyAqIHN0cnVjdCBmZF9zZXQuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9GRF9TRVRfQllURVMoc2V0c2l6ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKHNpemVvZihmZF9zZXQpICsgKChzZXRzaXplKSA+IEZEX1NFVFNJWkUgPyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0ZEX1NFVF9FTEVNX0NPVU5UKChzZXRzaXplKSAtIEZEX1NFVFNJWkUpIFwKKyAgICAgICAgICAgICAgICAgICAgICAgKiBORVRTTk1QX0ZEX01BU0tfU0laRSA6IDApKQorCisvKiogUmVtb3ZlIGFsbCBmaWxlIGRlc2NyaXB0b3JzIGZyb20gdGhlIHNldCAqZmRzZXQuICovCisjZGVmaW5lIE5FVFNOTVBfTEFSR0VfRkRfWkVSTyhmZHNldCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgbWVtc2V0KChmZHNldCktPmxmc19zZXRwdHIsIDAsICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICBORVRTTk1QX0ZEX1NFVF9CWVRFUygoZmRzZXQpLT5sZnNfc2V0c2l6ZSkpOyAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKwordm9pZCAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ZmQoIGludCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0KTsKK3ZvaWQgICBuZXRzbm1wX2xhcmdlX2ZkX2NsciggICBpbnQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCk7CitpbnQgICAgbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoaW50IGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOworCisjZW5kaWYKKworLyoqCisgKiBJbml0aWFsaXplIGEgbmV0c25tcF9sYXJnZV9mZF9zZXQgc3RydWN0dXJlLgorICoKKyAqIE5vdGU6IHRoaXMgZnVuY3Rpb24gb25seSBpbml0aWFsaXplcyB0aGUgbGZzX3NldHNpemUgYW5kIGxmc19zZXRwdHIKKyAqIG1lbWJlcnMgb2YgbmV0c25tcF9sYXJnZV9mZF9zZXQsIG5vdCB0aGUgZmlsZSBkZXNjcmlwdG9yIHNldCBpdHNlbGYuCisgKiBUaGUgZmlsZSBkZXNjcmlwdG9yIHNldCBtdXN0IGJlIGluaXRpYWxpemVkIHNlcGFyYXRlbHksIGUuZy4gdmlhCisgKiBORVRTTk1QX0xBUkdFX0ZEX0NMUigpLgorICovCitORVRTTk1QX0lNUE9SVAordm9pZCAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0LCBpbnQgc2V0c2l6ZSk7CisKKy8qKgorICogTW9kaWZ5IHRoZSBzaXplIG9mIGEgZmlsZSBkZXNjcmlwdG9yIHNldCBhbmQgcHJlc2VydmUgdGhlIGZpcnN0CisgKiBtaW4oZmRzZXQtPmxmc19zZXRzaXplLCBzZXRzaXplKSBmaWxlIGRlc2NyaXB0b3JzLgorICoKKyAqIFJldHVybnMgMSB1cG9uIHN1Y2Nlc3Mgb3IgMCBpZiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWQuCisgKi8KK2ludCAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCwgaW50IHNldHNpemUpOworCisvKioKKyAqIFN5bmNocm9ub3VzIEkvTyBtdWx0aXBsZXhpbmcgZm9yIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBzZXRzLgorICoKKyAqIE9uIFBPU0lYIHN5c3RlbXMsIGFueSBmaWxlIGRlc2NyaXB0b3Igc2V0IHdpdGggc2l6ZSBiZWxvdyBudW1mZHMgd2lsbCBiZQorICogcmVzaXplZCBiZWZvcmUgaW52b2tpbmcgc2VsZWN0KCkuCisgKgorICogQHNlZSBTZWUgYWxzbyBzZWxlY3QoMikgZm9yIG1vcmUgaW5mb3JtYXRpb24uCisgKi8KK05FVFNOTVBfSU1QT1JUCitpbnQgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfc2VsZWN0KGludCBudW1mZHMsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpyZWFkZmRzLAorCQkJICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICp3cml0ZWZkcywKKwkJCSAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZXhjZXB0ZmRzLAorCQkJICAgIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0KTsKKworLyoqIERlYWxsb2NhdGUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdC4gKi8KK05FVFNOTVBfSU1QT1JUCit2b2lkICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cChuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZmRzZXQpOworCisvKioKKyAqIENvcHkgYW4gZmRfc2V0IHRvIGEgbmV0c25tcF9sYXJnZV9mZF9zZXQgc3RydWN0dXJlLgorICoKKyAqIEBub3RlIGRzdCBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXplZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuCisgKi8KK3ZvaWQgICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldChuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmRfc2V0ICpzcmMpOworCisvKioKKyAqIENvcHkgYSBuZXRzbm1wX2xhcmdlX2ZkX3NldCBzdHJ1Y3R1cmUgaW50byBhbiBmZF9zZXQuCisgKgorICogQHJldHVybiAwIHVwb24gc3VjY2VzcywgLTEgd2hlbiBjb3B5aW5nIGZhaWxzIGJlY2F1c2UgKnNyYyBpcyB0b28gbGFyZ2UgdG8KKyAqICAgICAgICAgZml0IGludG8gKmRzdC4KKyAqLworaW50ICAgIG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KCAgICAgICAgICAgICAgZmRfc2V0ICpkc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnNyYyk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworI2VuZGlmIC8qIExBUkdFX0ZEX1NFVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCmluZGV4IDJjNjVlMmMuLmRhOGMzYzEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCkBAIC05OSw3ICs5OSw3IEBACiAgICAgLyoKICAgICAgKiBQcm90b3R5cGVzLgogICAgICAqLwotICAgIGludCAgICAgICAgICAgICBnZXRfZW5naW5ldGltZSh1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuLAorICAgIGludCAgICAgICAgICAgICBnZXRfZW5naW5ldGltZShjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwgdV9pbnQgZW5naW5lSURfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCAqIGVuZ2luZV9ib290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCAqIGVuZ2luZV90aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBhdXRoZW50aWNhdGVkKTsKQEAgLTExMSw3ICsxMTEsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCAqIGxhc3RfZW5naW5lX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGF1dGhlbnRpY2F0ZWQpOwogCi0gICAgaW50ICAgICAgICAgICAgIHNldF9lbmdpbmV0aW1lKHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4sCisgICAgaW50ICAgICAgICAgICAgIHNldF9lbmdpbmV0aW1lKGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGVuZ2luZV9ib290LCB1X2ludCBlbmdpbmVfdGltZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgYXV0aGVudGljYXRlZCk7CiAKQEAgLTEyMiw5ICsxMjIsOSBAQAogICAgICAgICAgCiAgICAgICAgICAKICAgICAgICAgRW5naW5ldGltZQotICAgICAgICBzZWFyY2hfZW5naW5ldGltZV9saXN0KHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pOworICAgICAgICBzZWFyY2hfZW5naW5ldGltZV9saXN0KGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pOwogCi0gICAgaW50ICAgICAgICAgICAgIGhhc2hfZW5naW5lSUQodV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbik7CisgICAgaW50ICAgICAgICAgICAgIGhhc2hfZW5naW5lSUQoY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbik7CiAKICAgICB2b2lkICAgICAgICAgICAgZHVtcF9ldGltZWxpc3RfZW50cnkoRW5naW5ldGltZSBlLCBpbnQgY291bnQpOwogICAgIHZvaWQgICAgICAgICAgICBkdW1wX2V0aW1lbGlzdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGlic25tcC5oCmluZGV4IGViZDAwNjIuLjZhMDczMDAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9saWJzbm1wLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaApAQCAtNTMsMTEgKzUzLDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTcxLDkgKzY3LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8Y3R5cGUuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbHNlCisjaWYgSEFWRV9ORVREQl9ICiAjaW5jbHVkZSA8bmV0ZGIuaD4KICNlbmRpZgogI2lmIEhBVkVfQVJQQV9JTkVUX0gKQEAgLTgyLDggKzc2LDYgQEAKIAogI2lmZGVmIFVDRF9TTk1QX0xJQlJBUlkKIAotI2RlZmluZSBzbm1wX3BhcnNlIGNtdV9zbm1wX3BhcnNlCi0KICNpbmNsdWRlIDx1Y2Qtc25tcC9hc24xLmg+CiAjaW5jbHVkZSA8dWNkLXNubXAvc25tcF9hcGkuaD4KICNpbmNsdWRlIDx1Y2Qtc25tcC9zbm1wX2ltcGwuaD4KQEAgLTE0MSw3ICsxMzMsOSBAQAogI2RlZmluZSBTTk1QX01TR19HRVQgR0VUX1JFUV9NU0cKICNkZWZpbmUgU05NUF9NU0dfR0VUTkVYVCBHRVRORVhUX1JFUV9NU0cKICNkZWZpbmUgU05NUF9NU0dfUkVTUE9OU0UgR0VUX1JTUF9NU0cKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAjZGVmaW5lIFNOTVBfTVNHX1NFVCBTRVRfUkVRX01TRworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICNkZWZpbmUgU05NUF9NU0dfVFJBUCBUUlBfUkVRX01TRwogI2RlZmluZSBTTk1QX01TR19HRVRCVUxLICAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4NSkKICNkZWZpbmUgU05NUF9NU0dfSU5GT1JNICAgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDYpCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWQ1LmgKaW5kZXggYzk5NWM3ZS4uMTJiMTkyYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21kNS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaApAQCAtMjgsNyArMjgsNyBAQAogICAgICAqICoqIElucHV0OiBNRCAtLSBhbiBNRHB0cgogICAgICAqICoqIEluaXRpYWxpemUgdGhlIE1Ec3RydWN0IHByZXBhdG9yeSB0byBkb2luZyBhIG1lc3NhZ2UgZGlnZXN0IGNvbXB1dGF0aW9uLgogICAgICAqLwotICAgIGV4dGVybiB2b2lkICAgICBNRGJlZ2luKE1EcHRyKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkIE1EYmVnaW4oTURwdHIpOwogCiAgICAgLyoKICAgICAgKiBNRHVwZGF0ZShNRCxYLGNvdW50KQpAQCAtNDMsNyArNDMsNyBAQAogICAgICAqICoqIGV2ZXJ5IE1EIGNvbXB1dGF0aW9uIHNob3VsZCBlbmQgd2l0aCBvbmUgY2FsbCB0byBNRHVwZGF0ZSB3aXRoIGEKICAgICAgKiAqKiBjb3VudCBsZXNzIHRoYW4gNTEyLiAgWmVybyBpcyBPSyBmb3IgYSBjb3VudC4KICAgICAgKi8KLSAgICBleHRlcm4gaW50ICAgICAgTUR1cGRhdGUoTURwdHIsIHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVCBpbnQgTUR1cGRhdGUoTURwdHIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgaW50KTsKIAogICAgIC8qCiAgICAgICogTURwcmludChNRCkKQEAgLTU0LDEwICs1NCwxMCBAQAogICAgICAqLwogICAgIGV4dGVybiB2b2lkICAgICBNRHByaW50KE1EcHRyKTsKIAotICAgIGludCAgICAgICAgICAgICBNRGNoZWNrc3VtKHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywKKyAgICBpbnQgICAgICAgICAgICAgTURjaGVja3N1bShjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG1hY2xlbik7Ci0gICAgaW50ICAgICAgICAgICAgIE1Ec2lnbih1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuLCB1X2NoYXIgKiBzZWNyZXQsCisgICAgaW50ICAgICAgICAgICAgIE1Ec2lnbihjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbWFjbGVuLCBjb25zdCB1X2NoYXIgKiBzZWNyZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgc2VjcmV0bGVuKTsKICAgICB2b2lkICAgICAgICAgICAgTURnZXQoTURzdHJ1Y3QgKiBNRCwgdV9jaGFyICogYnVmLCBzaXplX3QgYnVmbGVuKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCmluZGV4IGY3YzhiYmEuLjE4ZDk4ZTEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKQEAgLTM0LDcgKzM0LDEzIEBACiAKICNpbmNsdWRlIDxzdGRpby5oPiAgICAgICAgICAgICAgLyogZm9yIEZJTEUgKi8KIAotI2RlZmluZSBNSUIgMSwgMywgNiwgMSwgMiwgMQorI2luY2x1ZGUgPG5ldC1zbm1wL21pYl9hcGkuaD4KKworI2RlZmluZSBORVRTTk1QX01JQjJfT0lEIDEsIDMsIDYsIDEsIDIsIDEKKworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworI2RlZmluZSBNSUIgTkVUU05NUF9NSUIyX09JRAorI2VuZGlmCiAKICNkZWZpbmUgTUlCX0lGVFlQRV9PVEhFUgkJICAgIDEKICNkZWZpbmUgTUlCX0lGVFlQRV9SRUdVTEFSMTgyMgkJICAgIDIKQEAgLTExMSw2NyArMTE3LDU0IEBACiAgICAgc3RydWN0IHZhcmlhYmxlX2xpc3Q7CiAgICAgc3RydWN0IGVudW1fbGlzdDsKIAotICAgIHZvaWQgICAgICAgICAgICBwcmludF9taWIoRklMRSAqIGZwKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9hc2NpaV9kdW1wKEZJTEUgKik7Ci0gICAgaW50ICAgICAgICAgICAgIHJlYWRfb2JqaWQoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOwogICAgIHZvaWQgICAgICAgICAgICByZWdpc3Rlcl9taWJfaGFuZGxlcnModm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2V0X21pYl9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICAqbmV0c25tcF9nZXRfbWliX2RpcmVjdG9yeSh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9maXh1cF9taWJfZGlyZWN0b3J5KHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2luaXRfbWliKHZvaWQpOwotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQotICAgIHZvaWQgICAgICAgICAgICBpbml0X21pYih2b2lkKTsKLSNlbmRpZgotICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9taWIodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHByaW50X2Rlc2NyaXB0aW9uKG9pZCAqLCBzaXplX3QsIGludCk7Ci0gICAgdm9pZCAgICAgICAgICAgIGZwcmludF9kZXNjcmlwdGlvbihGSUxFICosIG9pZCAqLCBzaXplX3QsIGludCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNucHJpbnRfZGVzY3JpcHRpb24oY2hhciAqLCBzaXplX3QsIG9pZCAqLCBzaXplX3QsIGludCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX2Rlc2NyaXB0aW9uKHVfY2hhciAqKiwgc2l6ZV90ICosIHNpemVfdCAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQsIG9pZCAqLCBzaXplX3QsIGludCk7Ci0gICAgaW50ICAgICAgICAgICAgIGdldF9tb2R1bGVfbm9kZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgb2lkICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfbWliaW5kZXhfbG9hZCggdm9pZCApOworICAgIGNoYXIgKiAgICAgICAgICBuZXRzbm1wX21pYmluZGV4X2xvb2t1cCggY29uc3QgY2hhciAqICk7CisgICAgRklMRSAqICAgICAgICAgIG5ldHNubXBfbWliaW5kZXhfbmV3KCBjb25zdCBjaGFyICogKTsKKyAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfZGVzY3JpcHRpb24odV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZ2V0X3dpbGRfbm9kZShjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZ2V0X25vZGUoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOwotICAgIG9pZCAgICAgICAgICAgICpzbm1wX3BhcnNlX29pZChjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdHJlZSAgICAqZ2V0X3RyZWUoY29uc3Qgb2lkICosIHNpemVfdCwgc3RydWN0IHRyZWUgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdHJlZSAgICAqZ2V0X3RyZWVfaGVhZCh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc2V0X2Z1bmN0aW9uKHN0cnVjdCB0cmVlICopOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgcGFyc2Vfb25lX29pZF9pbmRleChvaWQgKiogb2lkU3RhcnQsIHNpemVfdCAqIG9pZExlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21wbGV0ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgcGFyc2Vfb2lkX2luZGV4ZXMob2lkICogb2lkSW5kZXgsIHNpemVfdCBvaWRMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIGRhdGEpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGJ1aWxkX29pZF9ub2FsbG9jKG9pZCAqIGluLCBzaXplX3QgaW5fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLCBvaWQgKiBwcmVmaXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBwcmVmaXhfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiBpbmRleGVzKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBidWlsZF9vaWQob2lkICoqIG91dCwgc2l6ZV90ICogb3V0X2xlbiwgb2lkICogcHJlZml4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHByZWZpeF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiBpbmRleGVzKTsKICAgICBpbnQgICAgICAgICAgICAgYnVpbGRfb2lkX3NlZ21lbnQobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKTsKIAotCi0gICAgdm9pZCAgICAgICAgICAgIHByaW50X3ZhcmlhYmxlKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKIAotICAgIHZvaWQgICAgICAgICAgICBmcHJpbnRfdmFyaWFibGUoRklMRSAqIGZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKLQotICAgIGludCAgICAgICAgICAgICBzbnByaW50X3ZhcmlhYmxlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7Ci0KLSAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUodV9jaGFyICoqIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2JqaWRsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlKTsKLQorICAgIE5FVFNOTVBfSU1QT1JUCiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwogICAgIHN0cnVjdCB0cmVlICAgICoKICNlbHNlCkBAIC0xODUsNiArMTc4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9iamlkbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZAogICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkKHVfY2hhciAqKiBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogYnVmX2xlbiwKQEAgLTE5NCw0MCArMTg4LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IG9iamlkbGVuKTsKIAotICAgIHZvaWQgICAgICAgICAgICBwcmludF92YWx1ZShjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7Ci0KLSAgICB2b2lkICAgICAgICAgICAgZnByaW50X3ZhbHVlKEZJTEUgKiBmcCwKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY192YWx1ZSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwogCi0gICAgaW50ICAgICAgICAgICAgIHNucHJpbnRfdmFsdWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKLQotICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY192YWx1ZSh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBvYmppZGxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyaWFibGUpOwotCi0KLSAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2JqaWQoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbik7Ci0KLSAgICB2b2lkICAgICAgICAgICAgZnByaW50X29iamlkKEZJTEUgKiBmcCwKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19vYmppZCh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKTsKIAotICAgIGludCAgICAgICAgICAgICBzbnByaW50X29iamlkKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbik7Ci0KLSAgICBpbnQgICAgICAgICAgICAgc3ByaW50X3JlYWxsb2Nfb2JqaWQodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgb2JqaWRsZW4pOwotCi0KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19ieV90eXBlKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywKQEAgLTIzNiwxMiArMjA4LDE0IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGludCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp1bml0cyk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY19oZXhzdHJpbmcodV9jaGFyICoqIGJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiwgc2l6ZV90KTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNwcmludF9yZWFsbG9jX2FzY2lpc3RyaW5nKHVfY2hhciAqKiBidWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sCkBAIC00NjAsNiArNDM0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBlbnVtX2xpc3QgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNucHJpbnRfYml0c3RyaW5nKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZW51bV9saXN0ICosIGNvbnN0IGNoYXIgKiwKQEAgLTQ5MiwyMyArNDY3LDM1IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X29pZF9yZXBvcnQoRklMRSAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9sYWJlbGVkb2lkKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X29pZF9yZXBvcnRfZW5hYmxlX29pZCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9zdWZmaXgodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3ltYm9saWModm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbWliY2hpbGRvaWQodm9pZCk7CiAKICAgICBjb25zdCBjaGFyICAgICAqcGFyc2Vfb2N0ZXRfaGludChjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp2YWx1ZSwKIAkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKipuZXdfdmFsLCBpbnQgKm5ld192YWxfbGVuKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGNsZWFyX3RyZWVfZmxhZ3MocmVnaXN0ZXIgc3RydWN0IHRyZWUgKnRwKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNubXBfb3V0X3RvZ2dsZV9vcHRpb25zKGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9vdXRfdG9nZ2xlX29wdGlvbnNfdXNhZ2UoY29uc3QgY2hhciAqLCBGSUxFICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnNubXBfaW5fdG9nZ2xlX29wdGlvbnMoY2hhciAqKTsKICAgICBjaGFyICAgICAgICAgICAqc25tcF9pbl9vcHRpb25zKGNoYXIgKiwgaW50LCBjaGFyICogY29uc3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9pbl90b2dnbGVfb3B0aW9uc191c2FnZShjb25zdCBjaGFyICosIEZJTEUgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2NoYXIgICAgICAgICAgbWliX3RvX2Fzbl90eXBlKGludCBtaWJfdHlwZSk7CiAKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKaW5kZXggYzE3YzcyOS4uNGUzNWQzMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCkBAIC02Myw5ICs2MywxMyBAQAogI2VuZGlmIC8qICBIQVZFX1BUSFJFQURfSCAgKi8KIAogCitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfcmVzX2luaXQodm9pZCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfcmVzX2xvY2soaW50IGdyb3VwSUQsIGludCByZXNvdXJjZUlEKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9yZXNfdW5sb2NrKGludCBncm91cElELCBpbnQgcmVzb3VyY2VJRCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfcmVzX2Rlc3Ryb3lfbXV0ZXgoaW50IGdyb3VwSUQsIGludCByZXNvdXJjZUlEKTsKIAogI2Vsc2UgLyogIE5FVFNOTVBfUkVFTlRSQU5UICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3YWRmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKQEAgLTAsMCArMSwxOCBAQAorI2lmbmRlZiBORVRTTk1QX0xJQlJBUllfT0lEX0gKKyNkZWZpbmUgTkVUU05NUF9MSUJSQVJZX09JRF9ICisKKyNpZmRlZiBIQVZFX0lOVFRZUEVTX0gKKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2VuZGlmCisKKyNpZm5kZWYgRUlHSFRCSVRfU1VCSURTCit0eXBlZGVmIHVfbG9uZyBvaWQ7CisjZGVmaW5lIE1BWF9TVUJJRCAgIDB4RkZGRkZGRkZVTAorI2RlZmluZSBORVRTTk1QX1BSSW8gImwiCisjZWxzZQordHlwZWRlZiB1aW50OF90IG9pZDsKKyNkZWZpbmUgTUFYX1NVQklEICAgMHhGRgorI2RlZmluZSBORVRTTk1QX1BSSW8gIiIKKyNlbmRpZgorCisjZW5kaWYgLyogTkVUU05NUF9MSUJSQVJZX09JRF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKaW5kZXggZWVhYjQ5MC4uMjkwYmI0MCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaApAQCAtMzgsNiArMzgsNyBAQAogICAgICAgIE5ldFNOTVBTdGFzaER1bXAgKmR1bXBmbjsKICAgICB9IG5ldHNubXBfb2lkX3N0YXNoX3NhdmVfaW5mbzsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX3N0YXNoX2FkZF9kYXRhKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKipyb290LAogCQkJCQkgICAgICAgY29uc3Qgb2lkICogbG9va3VwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG9va3VwX2xlbiwKQEAgLTQ4LDkgKzQ5LDExIEBACiAgICAgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZQogICAgICAgICAqbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X25vZGUobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqcm9vdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgKm5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKnJvb3QsCiAJCQkJCSAgICAgICBjb25zdCBvaWQgKiBsb29rdXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsb29rdXBfbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKgogICAgIG5ldHNubXBfb2lkX3N0YXNoX2dldG5leHRfbm9kZShuZXRzbm1wX29pZF9zdGFzaF9ub2RlICpyb290LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuKTsKQEAgLTY1LDYgKzY4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqY3Vyb2lkLCBzaXplX3QgY3Vyb2lkX2xlbik7CiAKICAgICAvKiBmcmVlcyBhbGwgZGF0YSBpbiB0aGUgc3Rhc2ggYW5kIGNsZWFucyBpdCBvdXQuICBTZXRzIHJvb3QgPSBOVUxMICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIG5ldHNubXBfb2lkX3N0YXNoX2ZyZWUobmV0c25tcF9vaWRfc3Rhc2hfbm9kZSAqKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5ldFNOTVBTdGFzaEZyZWVOb2RlICpmcmVlZm4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkZjA4MwotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Flcy5oCkBAIC0wLDAgKzEsMTQwIEBACisvKiBjcnlwdG8vYWVzL2Flcy5oIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDIgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICovCisKKyNpZm5kZWYgSEVBREVSX0FFU19ICisjZGVmaW5lIEhFQURFUl9BRVNfSAorCisjaWZkZWYgT1BFTlNTTF9OT19BRVMKKyNlcnJvciBBRVMgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjZGVmaW5lIEFFU19FTkNSWVBUCTEKKyNkZWZpbmUgQUVTX0RFQ1JZUFQJMAorCisvKiBCZWNhdXNlIGFycmF5IHNpemUgY2FuJ3QgYmUgYSBjb25zdCBpbiBDLCB0aGUgZm9sbG93aW5nIHR3byBhcmUgbWFjcm9zLgorICAgQm90aCBzaXplcyBhcmUgaW4gYnl0ZXMuICovCisjZGVmaW5lIEFFU19NQVhOUiAxNAorI2RlZmluZSBBRVNfQkxPQ0tfU0laRSAxNgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisvKiBUaGlzIHNob3VsZCBiZSBhIGhpZGRlbiB0eXBlLCBidXQgRVZQIHJlcXVpcmVzIHRoYXQgdGhlIHNpemUgYmUga25vd24gKi8KK3N0cnVjdCBhZXNfa2V5X3N0IHsKKyNpZmRlZiBBRVNfTE9ORworICAgIHVuc2lnbmVkIGxvbmcgcmRfa2V5WzQgKihBRVNfTUFYTlIgKyAxKV07CisjZWxzZQorICAgIHVuc2lnbmVkIGludCByZF9rZXlbNCAqKEFFU19NQVhOUiArIDEpXTsKKyNlbmRpZgorICAgIGludCByb3VuZHM7Cit9OwordHlwZWRlZiBzdHJ1Y3QgYWVzX2tleV9zdCBBRVNfS0VZOworCitjb25zdCBjaGFyICpBRVNfb3B0aW9ucyh2b2lkKTsKKworaW50IEFFU19zZXRfZW5jcnlwdF9rZXkoY29uc3QgdW5zaWduZWQgY2hhciAqdXNlcktleSwgY29uc3QgaW50IGJpdHMsCisJQUVTX0tFWSAqa2V5KTsKK2ludCBBRVNfc2V0X2RlY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCUFFU19LRVkgKmtleSk7CisKK3ZvaWQgQUVTX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwljb25zdCBBRVNfS0VZICprZXkpOwordm9pZCBBRVNfZGVjcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCWNvbnN0IEFFU19LRVkgKmtleSk7CisKK3ZvaWQgQUVTX2VjYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJY29uc3QgQUVTX0tFWSAqa2V5LCBjb25zdCBpbnQgZW5jKTsKK3ZvaWQgQUVTX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGNvbnN0IGludCBlbmMpOwordm9pZCBBRVNfY2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwlzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpOwordm9pZCBBRVNfY2ZiMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCXVuc2lnbmVkIGNoYXIgKml2ZWMsIGludCAqbnVtLCBjb25zdCBpbnQgZW5jKTsKK3ZvaWQgQUVTX2NmYjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYyk7Cit2b2lkIEFFU19vZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSk7Cit2b2lkIEFFU19jdHIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyIGl2ZWNbQUVTX0JMT0NLX1NJWkVdLAorCXVuc2lnbmVkIGNoYXIgZWNvdW50X2J1ZltBRVNfQkxPQ0tfU0laRV0sCisJdW5zaWduZWQgaW50ICpudW0pOworLyogTkI6IHRoZSBJViBpcyBfdHdvXyBibG9ja3MgbG9uZyAqLwordm9pZCBBRVNfaWdlX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJICAgICBzaXplX3QgbGVuZ3RoLCBjb25zdCBBRVNfS0VZICprZXksCisJCSAgICAgdW5zaWduZWQgY2hhciAqaXZlYywgY29uc3QgaW50IGVuYyk7CisvKiBOQjogdGhlIElWIGlzIF9mb3VyXyBibG9ja3MgbG9uZyAqLwordm9pZCBBRVNfYmlfaWdlX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJCWNvbnN0IEFFU19LRVkgKmtleTIsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2ZWMsCisJCQljb25zdCBpbnQgZW5jKTsKKworaW50IEFFU193cmFwX2tleShBRVNfS0VZICprZXksIGNvbnN0IHVuc2lnbmVkIGNoYXIgKml2LAorCQl1bnNpZ25lZCBjaGFyICpvdXQsCisJCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBpbnQgaW5sZW4pOworaW50IEFFU191bndyYXBfa2V5KEFFU19LRVkgKmtleSwgY29uc3QgdW5zaWduZWQgY2hhciAqaXYsCisJCXVuc2lnbmVkIGNoYXIgKm91dCwKKwkJY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGludCBpbmxlbik7CisKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiAhSEVBREVSX0FFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0ZTdiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaApAQCAtMCwwICsxLDIzNiBAQAorLyogY3J5cHRvL2Rlcy9kZXMuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTcgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisvKiBDb3BpZWQgcm91Z2hseSBmcm9tIG9wZW5zc2xjb25mLmggd2hpY2ggaXQncyBhIGxpdHRsZSBtb3JlIGNvbXBsZXggKi8KKyNkZWZpbmUgREVTX0xPTkcgdW5zaWduZWQgbG9uZworCisjaWZuZGVmIEhFQURFUl9ORVdfREVTX0gKKyNkZWZpbmUgSEVBREVSX05FV19ERVNfSAorCisjaWZkZWYgT1BFTlNTTF9OT19ERVMKKyNlcnJvciBERVMgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfQlVJTERfU0hMSUJDUllQVE8KKyMgdW5kZWYgT1BFTlNTTF9FWFRFUk4KKyMgZGVmaW5lIE9QRU5TU0xfRVhURVJOIE9QRU5TU0xfRVhQT1JUCisjZW5kaWYKKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIERFU19jYmxvY2tbOF07Cit0eXBlZGVmIC8qIGNvbnN0ICovIHVuc2lnbmVkIGNoYXIgY29uc3RfREVTX2NibG9ja1s4XTsKKy8qIFdpdGggImNvbnN0IiwgZ2NjIDIuOC4xIG9uIFNvbGFyaXMgdGhpbmtzIHRoYXQgREVTX2NibG9jayAqCisgKiBhbmQgY29uc3RfREVTX2NibG9jayAqIGFyZSBpbmNvbXBhdGlibGUgcG9pbnRlciB0eXBlcy4gKi8KKwordHlwZWRlZiBzdHJ1Y3QgREVTX2tzCisgICAgeworICAgIHVuaW9uCisJeworCURFU19jYmxvY2sgY2Jsb2NrOworCS8qIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGNvcnJlY3Qgc2l6ZSBvbiBtYWNoaW5lcyB3aXRoCisJICogOCBieXRlIGxvbmdzICovCisJREVTX0xPTkcgZGVzbG9uZ1syXTsKKwl9IGtzWzE2XTsKKyAgICB9IERFU19rZXlfc2NoZWR1bGU7CisKKyNpZm5kZWYgT1BFTlNTTF9ESVNBQkxFX09MRF9ERVNfU1VQUE9SVAorIyBpZm5kZWYgT1BFTlNTTF9FTkFCTEVfT0xEX0RFU19TVVBQT1JUCisjICBkZWZpbmUgT1BFTlNTTF9FTkFCTEVfT0xEX0RFU19TVVBQT1JUCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBERVNfS0VZX1NaIAkoc2l6ZW9mKERFU19jYmxvY2spKQorI2RlZmluZSBERVNfU0NIRURVTEVfU1ogKHNpemVvZihERVNfa2V5X3NjaGVkdWxlKSkKKworI2RlZmluZSBERVNfRU5DUllQVAkxCisjZGVmaW5lIERFU19ERUNSWVBUCTAKKworI2RlZmluZSBERVNfQ0JDX01PREUJMAorI2RlZmluZSBERVNfUENCQ19NT0RFCTEKKworI2RlZmluZSBERVNfZWNiMl9lbmNyeXB0KGksbyxrMSxrMixlKSBcCisJREVTX2VjYjNfZW5jcnlwdCgoaSksKG8pLChrMSksKGsyKSwoazEpLChlKSkKKworI2RlZmluZSBERVNfZWRlMl9jYmNfZW5jcnlwdChpLG8sbCxrMSxrMixpdixlKSBcCisJREVTX2VkZTNfY2JjX2VuY3J5cHQoKGkpLChvKSwobCksKGsxKSwoazIpLChrMSksKGl2KSwoZSkpCisKKyNkZWZpbmUgREVTX2VkZTJfY2ZiNjRfZW5jcnlwdChpLG8sbCxrMSxrMixpdixuLGUpIFwKKwlERVNfZWRlM19jZmI2NF9lbmNyeXB0KChpKSwobyksKGwpLChrMSksKGsyKSwoazEpLChpdiksKG4pLChlKSkKKworI2RlZmluZSBERVNfZWRlMl9vZmI2NF9lbmNyeXB0KGksbyxsLGsxLGsyLGl2LG4pIFwKKwlERVNfZWRlM19vZmI2NF9lbmNyeXB0KChpKSwobyksKGwpLChrMSksKGsyKSwoazEpLChpdiksKG4pKQorCitjb25zdCBjaGFyICpERVNfb3B0aW9ucyh2b2lkKTsKK3ZvaWQgREVTX2VjYjNfZW5jcnlwdChjb25zdF9ERVNfY2Jsb2NrICppbnB1dCwgREVTX2NibG9jayAqb3V0cHV0LAorCQkgICAgICBERVNfa2V5X3NjaGVkdWxlICprczEsREVTX2tleV9zY2hlZHVsZSAqa3MyLAorCQkgICAgICBERVNfa2V5X3NjaGVkdWxlICprczMsIGludCBlbmMpOworREVTX0xPTkcgREVTX2NiY19ja3N1bShjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCxERVNfY2Jsb2NrICpvdXRwdXQsCisJCSAgICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSwKKwkJICAgICAgIGNvbnN0X0RFU19jYmxvY2sgKml2ZWMpOworLyogREVTX2NiY19lbmNyeXB0IGRvZXMgbm90IHVwZGF0ZSB0aGUgSVYhICBVc2UgREVTX25jYmNfZW5jcnlwdCBpbnN0ZWFkLiAqLwordm9pZCBERVNfY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCQkgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsCisJCSAgICAgaW50IGVuYyk7Cit2b2lkIERFU19uY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCQkgICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLAorCQkgICAgICBpbnQgZW5jKTsKK3ZvaWQgREVTX3hjYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCx1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCSAgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsCisJCSAgICAgIGNvbnN0X0RFU19jYmxvY2sgKmludyxjb25zdF9ERVNfY2Jsb2NrICpvdXR3LGludCBlbmMpOwordm9pZCBERVNfY2ZiX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sdW5zaWduZWQgY2hhciAqb3V0LGludCBudW1iaXRzLAorCQkgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsCisJCSAgICAgaW50IGVuYyk7Cit2b2lkIERFU19lY2JfZW5jcnlwdChjb25zdF9ERVNfY2Jsb2NrICppbnB1dCxERVNfY2Jsb2NrICpvdXRwdXQsCisJCSAgICAgREVTX2tleV9zY2hlZHVsZSAqa3MsaW50IGVuYyk7CisKKy8qIAlUaGlzIGlzIHRoZSBERVMgZW5jcnlwdGlvbiBmdW5jdGlvbiB0aGF0IGdldHMgY2FsbGVkIGJ5IGp1c3QgYWJvdXQKKwlldmVyeSBvdGhlciBERVMgcm91dGluZSBpbiB0aGUgbGlicmFyeS4gIFlvdSBzaG91bGQgbm90IHVzZSB0aGlzCisJZnVuY3Rpb24gZXhjZXB0IHRvIGltcGxlbWVudCAnbW9kZXMnIG9mIERFUy4gIEkgc2F5IHRoaXMgYmVjYXVzZSB0aGUKKwlmdW5jdGlvbnMgdGhhdCBjYWxsIHRoaXMgcm91dGluZSBkbyB0aGUgY29udmVyc2lvbiBmcm9tICdjaGFyIConIHRvCisJbG9uZywgYW5kIHRoaXMgbmVlZHMgdG8gYmUgZG9uZSB0byBtYWtlIHN1cmUgJ25vbi1hbGlnbmVkJyBtZW1vcnkKKwlhY2Nlc3MgZG8gbm90IG9jY3VyLiAgVGhlIGNoYXJhY3RlcnMgYXJlIGxvYWRlZCAnbGl0dGxlIGVuZGlhbicuCisJRGF0YSBpcyBhIHBvaW50ZXIgdG8gMiB1bnNpZ25lZCBsb25nJ3MgYW5kIGtzIGlzIHRoZQorCURFU19rZXlfc2NoZWR1bGUgdG8gdXNlLiAgZW5jLCBpcyBub24gemVybyBzcGVjaWZpZXMgZW5jcnlwdGlvbiwKKwl6ZXJvIGlmIGRlY3J5cHRpb24uICovCit2b2lkIERFU19lbmNyeXB0MShERVNfTE9ORyAqZGF0YSxERVNfa2V5X3NjaGVkdWxlICprcywgaW50IGVuYyk7CisKKy8qIAlUaGlzIGZ1bmN0aW9ucyBpcyB0aGUgc2FtZSBhcyBERVNfZW5jcnlwdDEoKSBleGNlcHQgdGhhdCB0aGUgREVTCisJaW5pdGlhbCBwZXJtdXRhdGlvbiAoSVApIGFuZCBmaW5hbCBwZXJtdXRhdGlvbiAoRlApIGhhdmUgYmVlbiBsZWZ0CisJb3V0LiAgQXMgZm9yIERFU19lbmNyeXB0MSgpLCB5b3Ugc2hvdWxkIG5vdCB1c2UgdGhpcyBmdW5jdGlvbi4KKwlJdCBpcyB1c2VkIGJ5IHRoZSByb3V0aW5lcyBpbiB0aGUgbGlicmFyeSB0aGF0IGltcGxlbWVudCB0cmlwbGUgREVTLgorCUlQKCkgREVTX2VuY3J5cHQyKCkgREVTX2VuY3J5cHQyKCkgREVTX2VuY3J5cHQyKCkgRlAoKSBpcyB0aGUgc2FtZQorCWFzIERFU19lbmNyeXB0MSgpIERFU19lbmNyeXB0MSgpIERFU19lbmNyeXB0MSgpIGV4Y2VwdCBmYXN0ZXIgOi0pLiAqLwordm9pZCBERVNfZW5jcnlwdDIoREVTX0xPTkcgKmRhdGEsREVTX2tleV9zY2hlZHVsZSAqa3MsIGludCBlbmMpOworCit2b2lkIERFU19lbmNyeXB0MyhERVNfTE9ORyAqZGF0YSwgREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkgIERFU19rZXlfc2NoZWR1bGUgKmtzMiwgREVTX2tleV9zY2hlZHVsZSAqa3MzKTsKK3ZvaWQgREVTX2RlY3J5cHQzKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprczEsCisJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MyLCBERVNfa2V5X3NjaGVkdWxlICprczMpOwordm9pZCBERVNfZWRlM19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCx1bnNpZ25lZCBjaGFyICpvdXRwdXQsIAorCQkJICBsb25nIGxlbmd0aCwKKwkJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MxLERFU19rZXlfc2NoZWR1bGUgKmtzMiwKKwkJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MzLERFU19jYmxvY2sgKml2ZWMsaW50IGVuYyk7Cit2b2lkIERFU19lZGUzX2NiY21fZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgICBsb25nIGxlbmd0aCwKKwkJCSAgIERFU19rZXlfc2NoZWR1bGUgKmtzMSxERVNfa2V5X3NjaGVkdWxlICprczIsCisJCQkgICBERVNfa2V5X3NjaGVkdWxlICprczMsCisJCQkgICBERVNfY2Jsb2NrICppdmVjMSxERVNfY2Jsb2NrICppdmVjMiwKKwkJCSAgIGludCBlbmMpOwordm9pZCBERVNfZWRlM19jZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCSAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICprczEsCisJCQkgICAgREVTX2tleV9zY2hlZHVsZSAqa3MyLERFU19rZXlfc2NoZWR1bGUgKmtzMywKKwkJCSAgICBERVNfY2Jsb2NrICppdmVjLGludCAqbnVtLGludCBlbmMpOwordm9pZCBERVNfZWRlM19jZmJfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgIGludCBudW1iaXRzLGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MyLERFU19rZXlfc2NoZWR1bGUgKmtzMywKKwkJCSAgREVTX2NibG9jayAqaXZlYyxpbnQgZW5jKTsKK3ZvaWQgREVTX2VkZTNfb2ZiNjRfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsCisJCQkgICAgbG9uZyBsZW5ndGgsREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkJICAgIERFU19rZXlfc2NoZWR1bGUgKmtzMixERVNfa2V5X3NjaGVkdWxlICprczMsCisJCQkgICAgREVTX2NibG9jayAqaXZlYyxpbnQgKm51bSk7CisjaWYgMAordm9pZCBERVNfeHdoaXRlX2luMm91dChjb25zdF9ERVNfY2Jsb2NrICpERVNfa2V5LGNvbnN0X0RFU19jYmxvY2sgKmluX3doaXRlLAorCQkgICAgICAgREVTX2NibG9jayAqb3V0X3doaXRlKTsKKyNlbmRpZgorCitpbnQgREVTX2VuY19yZWFkKGludCBmZCx2b2lkICpidWYsaW50IGxlbixERVNfa2V5X3NjaGVkdWxlICpzY2hlZCwKKwkJIERFU19jYmxvY2sgKml2KTsKK2ludCBERVNfZW5jX3dyaXRlKGludCBmZCxjb25zdCB2b2lkICpidWYsaW50IGxlbixERVNfa2V5X3NjaGVkdWxlICpzY2hlZCwKKwkJICBERVNfY2Jsb2NrICppdik7CitjaGFyICpERVNfZmNyeXB0KGNvbnN0IGNoYXIgKmJ1Zixjb25zdCBjaGFyICpzYWx0LCBjaGFyICpyZXQpOworY2hhciAqREVTX2NyeXB0KGNvbnN0IGNoYXIgKmJ1Zixjb25zdCBjaGFyICpzYWx0KTsKK3ZvaWQgREVTX29mYl9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxpbnQgbnVtYml0cywKKwkJICAgICBsb25nIGxlbmd0aCxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjKTsKK3ZvaWQgREVTX3BjYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCx1bnNpZ25lZCBjaGFyICpvdXRwdXQsCisJCSAgICAgIGxvbmcgbGVuZ3RoLERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsCisJCSAgICAgIGludCBlbmMpOworREVTX0xPTkcgREVTX3F1YWRfY2tzdW0oY29uc3QgdW5zaWduZWQgY2hhciAqaW5wdXQsREVTX2NibG9jayBvdXRwdXRbXSwKKwkJCWxvbmcgbGVuZ3RoLGludCBvdXRfY291bnQsREVTX2NibG9jayAqc2VlZCk7CitpbnQgREVTX3JhbmRvbV9rZXkoREVTX2NibG9jayAqcmV0KTsKK3ZvaWQgREVTX3NldF9vZGRfcGFyaXR5KERFU19jYmxvY2sgKmtleSk7CitpbnQgREVTX2NoZWNrX2tleV9wYXJpdHkoY29uc3RfREVTX2NibG9jayAqa2V5KTsKK2ludCBERVNfaXNfd2Vha19rZXkoY29uc3RfREVTX2NibG9jayAqa2V5KTsKKy8qIERFU19zZXRfa2V5ICg9IHNldF9rZXkgPSBERVNfa2V5X3NjaGVkID0ga2V5X3NjaGVkKSBjYWxscworICogREVTX3NldF9rZXlfY2hlY2tlZCBpZiBnbG9iYWwgdmFyaWFibGUgREVTX2NoZWNrX2tleSBpcyBzZXQsCisgKiBERVNfc2V0X2tleV91bmNoZWNrZWQgb3RoZXJ3aXNlLiAqLworaW50IERFU19zZXRfa2V5KGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7CitpbnQgREVTX2tleV9zY2hlZChjb25zdF9ERVNfY2Jsb2NrICprZXksREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpOworaW50IERFU19zZXRfa2V5X2NoZWNrZWQoY29uc3RfREVTX2NibG9jayAqa2V5LERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKTsKK3ZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSxERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSk7Cit2b2lkIERFU19zdHJpbmdfdG9fa2V5KGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkpOwordm9pZCBERVNfc3RyaW5nX3RvXzJrZXlzKGNvbnN0IGNoYXIgKnN0cixERVNfY2Jsb2NrICprZXkxLERFU19jYmxvY2sgKmtleTIpOwordm9pZCBERVNfY2ZiNjRfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbix1bnNpZ25lZCBjaGFyICpvdXQsbG9uZyBsZW5ndGgsCisJCSAgICAgICBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSxERVNfY2Jsb2NrICppdmVjLGludCAqbnVtLAorCQkgICAgICAgaW50IGVuYyk7Cit2b2lkIERFU19vZmI2NF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCxsb25nIGxlbmd0aCwKKwkJICAgICAgIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlLERFU19jYmxvY2sgKml2ZWMsaW50ICpudW0pOworCitpbnQgREVTX3JlYWRfcGFzc3dvcmQoREVTX2NibG9jayAqa2V5LCBjb25zdCBjaGFyICpwcm9tcHQsIGludCB2ZXJpZnkpOworaW50IERFU19yZWFkXzJwYXNzd29yZHMoREVTX2NibG9jayAqa2V5MSwgREVTX2NibG9jayAqa2V5MiwgY29uc3QgY2hhciAqcHJvbXB0LAorCWludCB2ZXJpZnkpOworCisjZGVmaW5lIERFU19maXh1cF9rZXlfcGFyaXR5IERFU19zZXRfb2RkX3Bhcml0eQorCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaApAQCAtMCwwICsxLDExNiBAQAorLyogY3J5cHRvL21kNS9tZDUuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaWZuZGVmIEhFQURFUl9NRDVfSAorI2RlZmluZSBIRUFERVJfTUQ1X0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9OT19NRDUKKyNlcnJvciBNRDUgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworLyoKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKiAhIE1ENV9MT05HIGhhcyB0byBiZSBhdCBsZWFzdCAzMiBiaXRzIHdpZGUuIElmIGl0J3Mgd2lkZXIsIHRoZW4gIQorICogISBNRDVfTE9OR19MT0cyIGhhcyB0byBiZSBkZWZpbmVkIGFsb25nLgkJCSAgICEKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKi8KKworI2lmIGRlZmluZWQoX19MUDMyX18pCisjZGVmaW5lIE1ENV9MT05HIHVuc2lnbmVkIGxvbmcKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCisjZGVmaW5lIE1ENV9MT05HIHVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgTUQ1X0xPTkdfTE9HMiAzCisvKgorICogX0NSQVkgbm90ZS4gSSBjb3VsZCBkZWNsYXJlIHNob3J0LCBidXQgSSBoYXZlIG5vIGlkZWEgd2hhdCBpbXBhY3QKKyAqIGRvZXMgaXQgaGF2ZSBvbiBwZXJmb3JtYW5jZSBvbiBub25lLVQzRSBtYWNoaW5lcy4gSSBjb3VsZCBkZWNsYXJlCisgKiBpbnQsIGJ1dCBhdCBsZWFzdCBvbiBDOTAgc2l6ZW9mKGludCkgY2FuIGJlIGNob3NlbiBhdCBjb21waWxlIHRpbWUuCisgKiBTbyBJJ3ZlIGNob3NlbiBsb25nLi4uCisgKgkJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICovCisjZWxzZQorI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBpbnQKKyNlbmRpZgorCisjZGVmaW5lIE1ENV9DQkxPQ0sJNjQKKyNkZWZpbmUgTUQ1X0xCTE9DSwkoTUQ1X0NCTE9DSy80KQorI2RlZmluZSBNRDVfRElHRVNUX0xFTkdUSCAxNgorCit0eXBlZGVmIHN0cnVjdCBNRDVzdGF0ZV9zdAorCXsKKwlNRDVfTE9ORyBBLEIsQyxEOworCU1ENV9MT05HIE5sLE5oOworCU1ENV9MT05HIGRhdGFbTUQ1X0xCTE9DS107CisJdW5zaWduZWQgaW50IG51bTsKKwl9IE1ENV9DVFg7CisKK2ludCBNRDVfSW5pdChNRDVfQ1RYICpjKTsKK2ludCBNRDVfVXBkYXRlKE1ENV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IE1ENV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgTUQ1X0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpNRDUoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgTUQ1X1RyYW5zZm9ybShNRDVfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpiKTsKKyNpZmRlZiAgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWMyZmYwOQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oCkBAIC0wLDAgKzEsMTk5IEBACisvKiBjcnlwdG8vc2hhL3NoYS5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpZm5kZWYgSEVBREVSX1NIQV9ICisjZGVmaW5lIEhFQURFUl9TSEFfSAorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKyNpZmRlZiAgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZiBkZWZpbmVkKE9QRU5TU0xfTk9fU0hBKSB8fCAoZGVmaW5lZChPUEVOU1NMX05PX1NIQTApICYmIGRlZmluZWQoT1BFTlNTTF9OT19TSEExKSkKKyNlcnJvciBTSEEgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9GSVBTKQorI2RlZmluZSBGSVBTX1NIQV9TSVpFX1Qgc2l6ZV90CisjZW5kaWYKKworLyoKKyAqICEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKKyAqICEgU0hBX0xPTkcgaGFzIHRvIGJlIGF0IGxlYXN0IDMyIGJpdHMgd2lkZS4gSWYgaXQncyB3aWRlciwgdGhlbiAhCisgKiAhIFNIQV9MT05HX0xPRzIgaGFzIHRvIGJlIGRlZmluZWQgYWxvbmcuICAgICAgICAgICAgICAgICAgICAgICAgIQorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICovCisKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQorI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBsb25nCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQorI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBsb25nCisjZGVmaW5lIFNIQV9MT05HX0xPRzIgMworI2Vsc2UKKyNkZWZpbmUgU0hBX0xPTkcgdW5zaWduZWQgaW50CisjZW5kaWYKKworI2RlZmluZSBTSEFfTEJMT0NLCTE2CisjZGVmaW5lIFNIQV9DQkxPQ0sJKFNIQV9MQkxPQ0sqNCkJLyogU0hBIHRyZWF0cyBpbnB1dCBkYXRhIGFzIGEKKwkJCQkJICogY29udGlndW91cyBhcnJheSBvZiAzMiBiaXQKKwkJCQkJICogd2lkZSBiaWctZW5kaWFuIHZhbHVlcy4gKi8KKyNkZWZpbmUgU0hBX0xBU1RfQkxPQ0sgIChTSEFfQ0JMT0NLLTgpCisjZGVmaW5lIFNIQV9ESUdFU1RfTEVOR1RIIDIwCisKK3R5cGVkZWYgc3RydWN0IFNIQXN0YXRlX3N0CisJeworCVNIQV9MT05HIGgwLGgxLGgyLGgzLGg0OworCVNIQV9MT05HIE5sLE5oOworCVNIQV9MT05HIGRhdGFbU0hBX0xCTE9DS107CisJdW5zaWduZWQgaW50IG51bTsKKwl9IFNIQV9DVFg7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEwCitpbnQgU0hBX0luaXQoU0hBX0NUWCAqYyk7CitpbnQgU0hBX1VwZGF0ZShTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQV9UcmFuc2Zvcm0oU0hBX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEExCitpbnQgU0hBMV9Jbml0KFNIQV9DVFggKmMpOworaW50IFNIQTFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTFfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQV9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMShjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3QgbiwgdW5zaWduZWQgY2hhciAqbWQpOwordm9pZCBTSEExX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisjZGVmaW5lIFNIQTI1Nl9DQkxPQ0sJKFNIQV9MQkxPQ0sqNCkJLyogU0hBLTI1NiB0cmVhdHMgaW5wdXQgZGF0YSBhcyBhCisJCQkJCSAqIGNvbnRpZ3VvdXMgYXJyYXkgb2YgMzIgYml0CisJCQkJCSAqIHdpZGUgYmlnLWVuZGlhbiB2YWx1ZXMuICovCisjZGVmaW5lIFNIQTIyNF9ESUdFU1RfTEVOR1RICTI4CisjZGVmaW5lIFNIQTI1Nl9ESUdFU1RfTEVOR1RICTMyCisKK3R5cGVkZWYgc3RydWN0IFNIQTI1NnN0YXRlX3N0CisJeworCVNIQV9MT05HIGhbOF07CisJU0hBX0xPTkcgTmwsTmg7CisJU0hBX0xPTkcgZGF0YVtTSEFfTEJMT0NLXTsKKwl1bnNpZ25lZCBpbnQgbnVtLG1kX2xlbjsKKwl9IFNIQTI1Nl9DVFg7CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEEyNTYKK2ludCBTSEEyMjRfSW5pdChTSEEyNTZfQ1RYICpjKTsKK2ludCBTSEEyMjRfVXBkYXRlKFNIQTI1Nl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTIyNF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBMjU2X0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEyMjQoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOworaW50IFNIQTI1Nl9Jbml0KFNIQTI1Nl9DVFggKmMpOworaW50IFNIQTI1Nl9VcGRhdGUoU0hBMjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMjU2X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTI1Nihjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQTI1Nl9UcmFuc2Zvcm0oU0hBMjU2X0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKworI2RlZmluZSBTSEEzODRfRElHRVNUX0xFTkdUSAk0OAorI2RlZmluZSBTSEE1MTJfRElHRVNUX0xFTkdUSAk2NAorCisjaWZuZGVmIE9QRU5TU0xfTk9fU0hBNTEyCisvKgorICogVW5saWtlIDMyLWJpdCBkaWdlc3QgYWxnb3JpdGhtcywgU0hBLTUxMiAqcmVsaWVzKiBvbiBTSEFfTE9ORzY0CisgKiBiZWluZyBleGFjdGx5IDY0LWJpdCB3aWRlLiBTZWUgSW1wbGVtZW50YXRpb24gTm90ZXMgaW4gc2hhNTEyLmMKKyAqIGZvciBmdXJ0aGVyIGRldGFpbHMuCisgKi8KKyNkZWZpbmUgU0hBNTEyX0NCTE9DSwkoU0hBX0xCTE9DSyo4KQkvKiBTSEEtNTEyIHRyZWF0cyBpbnB1dCBkYXRhIGFzIGEKKwkJCQkJICogY29udGlndW91cyBhcnJheSBvZiA2NCBiaXQKKwkJCQkJICogd2lkZSBiaWctZW5kaWFuIHZhbHVlcy4gKi8KKyNpZiAoZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjY0KSkgJiYgIWRlZmluZWQoX19NSU5HVzMyX18pCisjZGVmaW5lIFNIQV9MT05HNjQgdW5zaWduZWQgX19pbnQ2NAorI2RlZmluZSBVNjQoQykgICAgIEMjI1VJNjQKKyNlbGlmIGRlZmluZWQoX19hcmNoNjRfXykKKyNkZWZpbmUgU0hBX0xPTkc2NCB1bnNpZ25lZCBsb25nCisjZGVmaW5lIFU2NChDKSAgICAgQyMjVUwKKyNlbHNlCisjZGVmaW5lIFNIQV9MT05HNjQgdW5zaWduZWQgbG9uZyBsb25nCisjZGVmaW5lIFU2NChDKSAgICAgQyMjVUxMCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgU0hBNTEyc3RhdGVfc3QKKwl7CisJU0hBX0xPTkc2NCBoWzhdOworCVNIQV9MT05HNjQgTmwsTmg7CisJdW5pb24geworCQlTSEFfTE9ORzY0CWRbU0hBX0xCTE9DS107CisJCXVuc2lnbmVkIGNoYXIJcFtTSEE1MTJfQ0JMT0NLXTsKKwl9IHU7CisJdW5zaWduZWQgaW50IG51bSxtZF9sZW47CisJfSBTSEE1MTJfQ1RYOworI2VuZGlmCisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKK2ludCBTSEEzODRfSW5pdChTSEE1MTJfQ1RYICpjKTsKK2ludCBTSEEzODRfVXBkYXRlKFNIQTUxMl9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQTM4NF9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBNTEyX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEzODQoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sdW5zaWduZWQgY2hhciAqbWQpOworaW50IFNIQTUxMl9Jbml0KFNIQTUxMl9DVFggKmMpOworaW50IFNIQTUxMl9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBNTEyX0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTUxMihjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQTUxMl9UcmFuc2Zvcm0oU0hBNTEyX0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqZGF0YSk7CisjZW5kaWYKKworI2lmZGVmICBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAppbmRleCA3ODUxMDZkLi5jZTQ2YWI5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaApAQCAtNCw2ICs0LDkgQEAKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL21pYl9hcGkuaD4KKwogICAgIC8qCiAgICAgICogcGFyc2UuaAogICAgICAqLwpAQCAtMjksMTAgKzMyLDE5IEBACiBTT0ZUV0FSRS4KICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAotI2RlZmluZSBNQVhMQUJFTCAgICAgICAgNjQgICAgICAvKiBtYXhpbXVtIGNoYXJhY3RlcnMgaW4gYSBsYWJlbCAqLworI2RlZmluZSBORVRTTk1QX01BWExBQkVMIDY0ICAgICAgLyogbWF4aW11bSBjaGFyYWN0ZXJzIGluIGEgbGFiZWwgKi8KICNkZWZpbmUgTUFYVE9LRU4gICAgICAgIDEyOCAgICAgLyogbWF4aW11bSBjaGFyYWN0ZXJzIGluIGEgdG9rZW4gKi8KICNkZWZpbmUgTUFYUVVPVEVTVFIgICAgIDQwOTYgICAgLyogbWF4aW11bSBjaGFyYWN0ZXJzIGluIGEgcXVvdGVkIHN0cmluZyAqLwogCisvKgorICogTUFYTEFCRUwgYXBwZWFycyB0byBiZSB1bnVzZWQgaW4gY29kZSwgYW5kIGNvbmZsaWN0cyB3aXRoCisgKiA8YXJwYS9uYW1lc2VyLmg+LiBPbmx5IGRlZmluZSBpdCBpZiByZXF1ZXN0ZWQuIFRoaXMgd2lsbAorICogY2F1c2UgcHJvYmxlbXMgaWYgbG9jYWwgRE5TU0VDIHZhbGlkYXRpb24gaXMgYWxzbyBlbmFibGVkLgorICovCisjaWZkZWYgVUNEX0NPTVBBVElCTEUKKyNkZWZpbmUgTUFYTEFCRUwgICAgICAgIE5FVFNOTVBfTUFYTEFCRUwKKyNlbmRpZgorCiAgICAgc3RydWN0IHZhcmlhYmxlX2xpc3Q7CiAKICAgICAvKgpAQCAtNzAsMzMgKzgyLDYgQEAKICAgICB9OwogCiAgICAgLyoKLSAgICAgKiBBIGxpbmtlZCBsaXN0IG9mIG5vZGVzLgotICAgICAqLwotICAgIHN0cnVjdCBub2RlIHsKLSAgICAgICAgc3RydWN0IG5vZGUgICAgKm5leHQ7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICpsYWJlbDsgIC8qIFRoaXMgbm9kZSdzICh1bmlxdWUpIHRleHR1YWwgbmFtZSAqLwotICAgICAgICB1X2xvbmcgICAgICAgICAgc3ViaWQ7ICAvKiBUaGlzIG5vZGUncyBpbnRlZ2VyIHN1YmlkZW50aWZpZXIgKi8KLSAgICAgICAgaW50ICAgICAgICAgICAgIG1vZGlkOyAgLyogVGhlIG1vZHVsZSBjb250YWluaW5nIHRoaXMgbm9kZSAqLwotICAgICAgICBjaGFyICAgICAgICAgICAqcGFyZW50OyAvKiBUaGUgcGFyZW50J3MgdGV4dHVhbCBuYW1lICovCi0gICAgICAgIGludCAgICAgICAgICAgICB0Y19pbmRleDsgICAgICAgLyogaW5kZXggaW50byB0Y2xpc3QgKC0xIGlmIE5BKSAqLwotICAgICAgICBpbnQgICAgICAgICAgICAgdHlwZTsgICAvKiBUaGUgdHlwZSBvZiBvYmplY3QgdGhpcyByZXByZXNlbnRzICovCi0gICAgICAgIGludCAgICAgICAgICAgICBhY2Nlc3M7Ci0gICAgICAgIGludCAgICAgICAgICAgICBzdGF0dXM7Ci0gICAgICAgIHN0cnVjdCBlbnVtX2xpc3QgKmVudW1zOyAgICAgICAgLyogKG9wdGlvbmFsKSBsaXN0IG9mIGVudW1lcmF0ZWQgaW50ZWdlcnMgKi8KLSAgICAgICAgc3RydWN0IHJhbmdlX2xpc3QgKnJhbmdlczsKLSAgICAgICAgc3RydWN0IGluZGV4X2xpc3QgKmluZGV4ZXM7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICphdWdtZW50czsKLSAgICAgICAgc3RydWN0IHZhcmJpbmRfbGlzdCAqdmFyYmluZHM7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICpoaW50OwotICAgICAgICBjaGFyICAgICAgICAgICAqdW5pdHM7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICpkZXNjcmlwdGlvbjsgICAgLyogZGVzY3JpcHRpb24gKGEgcXVvdGVkIHN0cmluZykgKi8KLSAgICAgICAgY2hhciAgICAgICAgICAgKnJlZmVyZW5jZTsgICAgLyogcmVmZXJlbmNlcyAoYSBxdW90ZWQgc3RyaW5nKSAqLwotICAgICAgICBjaGFyICAgICAgICAgICAqZGVmYXVsdFZhbHVlOwotCWNoYXIgICAgICAgICAgICpmaWxlbmFtZTsKLSAgICAgICAgaW50ICAgICAgICAgICAgIGxpbmVubzsKLSAgICB9OwotCi0gICAgLyoKICAgICAgKiBBIHRyZWUgaW4gdGhlIGZvcm1hdCBvZiB0aGUgdHJlZSBzdHJ1Y3R1cmUgb2YgdGhlIE1JQi4KICAgICAgKi8KICAgICBzdHJ1Y3QgdHJlZSB7CkBAIC0xMjksNiArMTE0LDcgQEAKICAgICAgICAgY2hhciAgICAgICAgICAgKnJlZmVyZW5jZTsgICAgLyogcmVmZXJlbmNlcyAoYSBxdW90ZWQgc3RyaW5nKSAqLwogICAgICAgICBpbnQgICAgICAgICAgICAgcmVwb3J0ZWQ7ICAgICAgIC8qIDE9cmVwb3J0IHN0YXJ0ZWQgaW4gcHJpbnRfc3VidHJlZS4uLiAqLwogICAgICAgICBjaGFyICAgICAgICAgICAqZGVmYXVsdFZhbHVlOworICAgICAgIGNoYXIJICAgICAgICpwYXJzZUVycm9yU3RyaW5nOyAvKiBDb250YWlucyB0aGUgZXJyb3Igc3RyaW5nIGlmIHRoZXJlIGFyZSBlcnJvcnMgaW4gcGFyc2luZyBNSUJzICovCiAgICAgfTsKIAogICAgIC8qCkBAIC0yMDksNDYgKzE5NSw1MSBAQAogI2RlZmluZQlBTk9OCSJhbm9ueW1vdXMjIgogI2RlZmluZQlBTk9OX0xFTiAgc3RybGVuKEFOT04pCiAKLSAgICBzdHJ1Y3QgdHJlZSAgICAqbmV0c25tcF9yZWFkX21vZHVsZShjb25zdCBjaGFyICopOwotI2lmbmRlZiBORVRTTk1QX0NMRUFOX05BTUVTUEFDRQotICAgIHN0cnVjdCB0cmVlICAgICpyZWFkX21vZHVsZShjb25zdCBjaGFyICopOwotI2VuZGlmCi0gICAgc3RydWN0IHRyZWUgICAgKnJlYWRfbWliKGNvbnN0IGNoYXIgKik7Ci0gICAgc3RydWN0IHRyZWUgICAgKnJlYWRfYWxsX21pYnModm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfdW5sb2FkX21vZHVsZShjb25zdCBjaGFyICpuYW1lKTsKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKICAgICBpbnQgICAgICAgICAgICAgdW5sb2FkX21vZHVsZShjb25zdCBjaGFyICpuYW1lKTsKLSAgICB2b2lkICAgICAgICAgICAgaW5pdF9taWJfaW50ZXJuYWxzKHZvaWQpOwogI2VuZGlmCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfaW5pdF9taWJfaW50ZXJuYWxzKHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICB1bmxvYWRfYWxsX21pYnModm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIGFkZF9taWJmaWxlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgRklMRSAqKTsKLSAgICBpbnQgICAgICAgICAgICAgYWRkX21pYmRpcihjb25zdCBjaGFyICopOwotICAgIHZvaWQgICAgICAgICAgICBhZGRfbW9kdWxlX3JlcGxhY2VtZW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiwgaW50KTsKICAgICBpbnQgICAgICAgICAgICAgd2hpY2hfbW9kdWxlKGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqbW9kdWxlX25hbWUoaW50LCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X3N1YnRyZWUoRklMRSAqLCBzdHJ1Y3QgdHJlZSAqLCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X2FzY2lpX2R1bXBfdHJlZShGSUxFICosIHN0cnVjdCB0cmVlICosIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdHJlZSAgICAqZmluZF90cmVlX25vZGUoY29uc3QgY2hhciAqLCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY29uc3QgY2hhciAgICAgKmdldF90Y19kZXNjcmlwdG9yKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjb25zdCBjaGFyICAgICAqZ2V0X3RjX2Rlc2NyaXB0aW9uKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdHJlZSAgICAqZmluZF9iZXN0X3RyZWVfbm9kZShjb25zdCBjaGFyICosIHN0cnVjdCB0cmVlICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgKik7CiAgICAgLyoKICAgICAgKiBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eSAKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB0cmVlICAgICpmaW5kX25vZGUoY29uc3QgY2hhciAqLCBzdHJ1Y3QgdHJlZSAqKTsKICAgICBzdHJ1Y3QgdHJlZSAgICAqZmluZF9ub2RlMihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7IAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IG1vZHVsZSAgKmZpbmRfbW9kdWxlKGludCk7CiAgICAgdm9pZCAgICAgICAgICAgIGFkb3B0X29ycGhhbnModm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc25tcF9taWJfdG9nZ2xlX29wdGlvbnMoY2hhciAqb3B0aW9ucyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UoY29uc3QgY2hhciAqbGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqIG91dGYpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X21pYihGSUxFICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHByaW50X21pYl90cmVlKEZJTEUgKiwgc3RydWN0IHRyZWUgKiwgaW50KTsKICAgICBpbnQgICAgICAgICAgICAgZ2V0X21pYl9wYXJzZV9lcnJvcl9jb3VudCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2dldF90b2tlbihGSUxFICogZnAsIGNoYXIgKnRva2VuLCBpbnQgbWF4dGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdHJlZSAgICAqZmluZF9iZXN0X3RyZWVfbm9kZShjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0cmVlICp0cmVlX3RvcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCAqIG1hdGNoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKaW5kZXggNzhhZjU2ZS4uMDhlY2E5YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKQEAgLTE1LDcgKzE1LDcgQEAKICNkZWZpbmUgUFJFTUlCX0NPTkZJRyAxCiAjZGVmaW5lIEVJVEhFUl9DT05GSUcgMgogCi0KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CiAKICAgICAvKgogICAgICAqIERlZmluZXMgYSBzZXQgb2YgZmlsZSB0eXBlcyBhbmQgdGhlIHBhcnNlIGFuZCBmcmVlIGZ1bmN0aW9ucwpAQCAtNDMsNzYgKzQzLDg4IEBACiAgICAgfTsKIAogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9jb25maWcoY2hhciAqKTsgICAgIC8qIHBhcnNlIGEgc2ltcGxlIGxpbmU6IHRva2VuPXZhbHVlcyAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX3JlbWVtYmVyKGNoYXIgKik7ICAgIC8qIHByb2Nlc3MgbGF0ZXIsIGR1cmluZyBzbm1wX2luaXQoKSAqLwogICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19wcm9jZXNzX21lbW9yaWVzKHZvaWQpOyAgICAgIC8qIHJ1biBhbGwgbWVtb3JpZXMgdGhyb3VnaCBwYXJzZXIgKi8KLSAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWcoY29uc3QgY2hhciAqLCBzdHJ1Y3QgY29uZmlnX2xpbmUgKiwgaW50KTsKLSAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdzKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICByZWFkX3ByZW1pYl9jb25maWdzKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICByZWFkX2NvbmZpZ19maWxlcyhpbnQpOworICAgIGludCAgICAgICAgICAgICByZWFkX2NvbmZpZyhjb25zdCBjaGFyICosIHN0cnVjdCBjb25maWdfbGluZSAqLCBpbnQpOworICAgIGludCAgICAgICAgICAgICByZWFkX2NvbmZpZ19maWxlcyhpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGZyZWVfY29uZmlnKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBjb25maWdfcGVycm9yKGNvbnN0IGNoYXIgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIGNvbmZpZ19wd2Fybihjb25zdCBjaGFyICopOworI2lmICFkZWZpbmVkKF9fR05VQ19fKSB8fCBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDImJiBfX0dOVUNfTUlOT1JfXyA8IDgpCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoY29uc3QgY2hhciAqLCAuLi4pOworICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ193YXJuKGNvbnN0IGNoYXIgKiwgLi4uKTsKKyNlbHNlCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoY29uc3QgY2hhciAqLCAuLi4pCisJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyhfX3ByaW50Zl9fLCAxLCAyKSkpOworICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ193YXJuKGNvbnN0IGNoYXIgKiwgLi4uKQorCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXywgMSwgMikpKTsKKyNlbmRpZgorCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc2tpcF93aGl0ZShjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKnNraXBfd2hpdGVfY29uc3QoY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpza2lwX25vdF93aGl0ZShjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKnNraXBfbm90X3doaXRlX2NvbnN0KGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqc2tpcF90b2tlbihjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKnNraXBfdG9rZW5fY29uc3QoY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpjb3B5X253b3JkKGNoYXIgKiwgY2hhciAqLCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3QgY2hhciAgICAgKmNvcHlfbndvcmRfY29uc3QoY29uc3QgY2hhciAqLCBjaGFyICosIGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqY29weV93b3JkKGNoYXIgKiwgY2hhciAqKTsgIC8qIGRvIG5vdCB1c2UgKi8KLSAgICB2b2lkICAgICAgICAgICAgcmVhZF9jb25maWdfd2l0aF90eXBlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKLSAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnBhcnNlcikgKGNvbnN0IGNoYXIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCBjaGFyICopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKSAodm9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOwotICAgIHN0cnVjdCBjb25maWdfbGluZSAqcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpyZWxlYXNlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCksIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnJlbGVhc2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7Ci0gICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlcihjb25zdCBjaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IGNoYXIgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICopLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpyZWxlYXNlcikKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotICAgIHZvaWQgICAgICAgICAgICB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICopOwotICAgIHZvaWQgICAgICAgICAgICB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnModm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKGNvbnN0IGNoYXIgKmxlYWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHJlYWRfY29uZmlnX3dpdGhfdHlwZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoY2hhciAqc2F2ZXRvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBzdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOwotICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhjaGFyICpyZWFkZnJvbSwKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhjb25zdCBjaGFyICpyZWFkZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqIHN0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChjb25zdCBjaGFyICpyZWFkZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoqIHN0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19yZWFkX29iamlkKGNoYXIgKnJlYWRmcm9tLCBvaWQgKiogb2JqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKTsKKyAgICBjb25zdCBjaGFyICAgICAqcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChjb25zdCBjaGFyICpyZWFkZnJvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiogb2JqaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpyZWFkX2NvbmZpZ19zYXZlX29iamlkKGNoYXIgKnNhdmV0bywgb2lkICogb2JqaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfcmVhZF9kYXRhKGludCB0eXBlLCBjaGFyICpyZWFkZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGFwdHIsIHNpemVfdCAqIGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfcmVhZF9tZW1vcnkoaW50IHR5cGUsIGNoYXIgKnJlYWRmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpkYXRhcHRyLCBzaXplX3QgKiBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnJlYWRfY29uZmlnX3N0b3JlX2RhdGEoaW50IHR5cGUsIGNoYXIgKnN0b3JldG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YXB0ciwgc2l6ZV90ICogbGVuKTsKICAgICBjaGFyICAgICAgICAgICAqcmVhZF9jb25maWdfc3RvcmVfZGF0YV9wcmVmaXgoY2hhciBwcmVmaXgsIGludCB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpzdG9yZXRvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhcHRyLCBzaXplX3QgbGVuKTsKKyAgICBpbnQgIHJlYWRfY29uZmlnX2ZpbGVzX29mX3R5cGUoaW50IHdoZW4sIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXApOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHJlYWRfY29uZmlnX3N0b3JlKGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHJlYWRfYXBwX2NvbmZpZ19zdG9yZShjb25zdCBjaGFyICpsaW5lKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NhdmVfcGVyc2lzdGVudChjb25zdCBjaGFyICp0eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2NsZWFuX3BlcnNpc3RlbnQoY29uc3QgY2hhciAqdHlwZSk7CiAgICAgc3RydWN0IGNvbmZpZ19saW5lICpyZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnMoY29uc3QgY2hhciAqdHlwZSk7CiAKQEAgLTEzMCwxMyArMTQyLDE3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKm1lbSk7CiAKICAgICB2b2lkICAgICAgICAgICAgc2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5KGNvbnN0IGNoYXIgKmRpcik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjb25zdCBjaGFyICAgICAqZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5KHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoY29uc3QgY2hhciAqZGlyKTsKICAgICBjb25zdCBjaGFyICAgICAqZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KHZvaWQpOwogICAgIHZvaWQgICAgICAgICAgICBzZXRfdGVtcF9maWxlX3BhdHRlcm4oY29uc3QgY2hhciAqcGF0dGVybik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjb25zdCBjaGFyICAgICAqZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGhhbmRsZV9sb25nX29wdChjb25zdCBjaGFyICpteW9wdGFyZyk7CiAKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKaW5kZXggZDkyNzA0NC4uZjRiNjNmNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKQEAgLTM1LDYgKzM1LDcgQEAKICAgICBpbnQgICAgICAgICAgICAgc2NfZ2V0X3Byb3Blcl9wcml2X2xlbmd0aChjb25zdCBvaWQgKiBwcml2dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBwcml2dHlwZV9sZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc2NfaW5pdCh2b2lkKTsKICAgICBpbnQgICAgICAgICAgICAgc2Nfc2h1dGRvd24oaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CkBAIC00MywyMCArNDQsMjAgQEAKIAogICAgIGludCAgICAgICAgICAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKGNvbnN0IG9pZCAqIGF1dGh0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhdXRodHlwZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBrZXksIHVfaW50IGtleWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBtZXNzYWdlLCB1X2ludCBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogbWVzc2FnZSwgdV9pbnQgbXNnbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIE1BQywgc2l6ZV90ICogbWFjbGVuKTsKIAogICAgIGludCAgICAgICAgICAgICBzY19jaGVja19rZXllZF9oYXNoKGNvbnN0IG9pZCAqIGF1dGh0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhdXRodHlwZWxlbiwgdV9jaGFyICoga2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfaW50IGtleWxlbiwgdV9jaGFyICogbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBtc2dsZW4sIHVfY2hhciAqIE1BQywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgYXV0aHR5cGVsZW4sIGNvbnN0IHVfY2hhciAqIGtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBrZXlsZW4sIGNvbnN0IHVfY2hhciAqIG1lc3NhZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbXNnbGVuLCBjb25zdCB1X2NoYXIgKiBNQUMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbWFjbGVuKTsKIAogICAgIGludCAgICAgICAgICAgICBzY19lbmNyeXB0KGNvbnN0IG9pZCAqIHByaXZ0eXBlLCBzaXplX3QgcHJpdnR5cGVsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogaXYsIHVfaW50IGl2bGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHBsYWludGV4dCwgdV9pbnQgcHRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogcGxhaW50ZXh0LCB1X2ludCBwdGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBjaXBoZXJ0ZXh0LCBzaXplX3QgKiBjdGxlbik7CiAKICAgICBpbnQgICAgICAgICAgICAgc2NfZGVjcnlwdChjb25zdCBvaWQgKiBwcml2dHlwZSwgc2l6ZV90IHByaXZ0eXBlbGVuLApAQCAtNjYsNyArNjcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHBsYWludGV4dCwgc2l6ZV90ICogcHRsZW4pOwogCiAgICAgaW50ICAgICAgICAgICAgIHNjX2hhc2goY29uc3Qgb2lkICogaGFzaHR5cGUsIHNpemVfdCBoYXNodHlwZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBidWYsIHNpemVfdCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogTUFDLCBzaXplX3QgKiBNQUNfbGVuKTsKIAogICAgIGludCAgICAgICAgICAgICBzY19nZXRfdHJhbnNmb3JtX3R5cGUob2lkICogaGFzaHR5cGUsCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAppbmRleCBiZmI0YzVmLi5hMzU1ZGQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKQEAgLTE4LDggKzE4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB1dGNfb2Zmc2V0X2hvdXJzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHV0Y19vZmZzZXRfbWludXRlcyk7CiAKLSAgICB1X2NoYXIgICAgICAgICAqZGF0ZV9uX3RpbWUodGltZV90ICosIHNpemVfdCAqKTsKLSAgICB0aW1lX3QgICAgICAgICAgY3RpbWVfdG9fdGltZXQoY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHVfY2hhciAgICAgICAgICpkYXRlX25fdGltZShjb25zdCB0aW1lX3QgKiwgc2l6ZV90ICopOworICAgIHRpbWVfdCAgICAgICAgICBjdGltZV90b190aW1ldChjb25zdCBjaGFyICopOwogCiAgICAgLyoKICAgICAgKiBUcnVlVmFsdWUgCkBAIC01Miw3ICs1MywxMSBAQAogI2RlZmluZSBTVF9QRVJNQU5FTlQJNAogI2RlZmluZSBTVF9SRUFET05MWQk1CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICBjaGVja19yb3dzdGF0dXNfdHJhbnNpdGlvbihpbnQgb2xkX3ZhbCwgaW50IG5ld192YWwpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY2hhciAgICAgICAgICAgIGNoZWNrX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlX3RyYW5zaXRpb24oaW50IG9sZF92YWwsIGludCBuZXdfdmFsLCBpbnQgb2xkX3N0b3JhZ2UpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgIGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbihpbnQgb2xkX3ZhbCwgaW50IG5ld192YWwpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCmluZGV4IDNiYjU1YmYuLmY1OTc4YzYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaApAQCAtMTE4LDcgKzExOCw5IEBACiAjZGVmaW5lIFNOTVBfTVNHX0dFVCAgICAgICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHgwKSAvKiBhMD0xNjAgKi8KICNkZWZpbmUgU05NUF9NU0dfR0VUTkVYVCAgICAoQVNOX0NPTlRFWFQgfCBBU05fQ09OU1RSVUNUT1IgfCAweDEpIC8qIGExPTE2MSAqLwogI2RlZmluZSBTTk1QX01TR19SRVNQT05TRSAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4MikgLyogYTI9MTYyICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogI2RlZmluZSBTTk1QX01TR19TRVQgICAgICAgIChBU05fQ09OVEVYVCB8IEFTTl9DT05TVFJVQ1RPUiB8IDB4MykgLyogYTM9MTYzICovCisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogCiAgICAgLyoKICAgICAgKiBQRFUgdHlwZXMgaW4gU05NUHYxIGFuZCBTTk1Qc2VjIApAQCAtMTM3LDYgKzEzOSw3IEBACiAgICAgICovCiAjZGVmaW5lIFNOTVBfTVNHX1JFUE9SVCAgICAgKEFTTl9DT05URVhUIHwgQVNOX0NPTlNUUlVDVE9SIHwgMHg4KSAvKiBhOD0xNjggKi8KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAvKgogICAgICAqIGludGVybmFsIG1vZGVzIHRoYXQgc2hvdWxkIG5ldmVyIGJlIHVzZWQgYnkgdGhlIHByb3RvY29sIGZvciB0aGUKICAgICAgKiBwZHUgdHlwZS4KQEAgLTE2Miw2ICsxNjUsNyBAQAogI2RlZmluZSBTTk1QX01TR19JTlRFUk5BTF9VTkRPX0NPTU1JVCAgICAgICAgICAgMjQKICNkZWZpbmUgU05NUF9NU0dfSU5URVJOQUxfSVJSRVZFUlNJQkxFX0NPTU1JVCAgIDI1CiAjZGVmaW5lIFNOTVBfTVNHX0lOVEVSTkFMX1VORE9fQ0xFQU5VUCAgICAgICAgICAyNgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogICAgIC8qCiAgICAgICogbW9kZXMgPiAxMjggZm9yIG5vbiBzZXRzLgpAQCAtMTc1LDkgKzE3OSwxNCBAQAogICAgIC8qCiAgICAgICogdGVzdCBmb3IgbWVtYmVyIG9mIENvbmZpcm1lZCBDbGFzcyBpLmUuLCByZXBvcnRhYmxlIAogICAgICAqLworI2lmZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorI2RlZmluZSBTTk1QX0NNRF9DT05GSVJNRUQoYykgKGMgPT0gU05NUF9NU0dfSU5GT1JNIHx8IGMgPT0gU05NUF9NU0dfR0VUQlVMSyB8fFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID09IFNOTVBfTVNHX0dFVE5FWFQgfHwgYyA9PSBTTk1QX01TR19HRVQgKQorI2Vsc2UgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogI2RlZmluZSBTTk1QX0NNRF9DT05GSVJNRUQoYykgKGMgPT0gU05NUF9NU0dfSU5GT1JNIHx8IGMgPT0gU05NUF9NU0dfR0VUQlVMSyB8fFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjID09IFNOTVBfTVNHX0dFVE5FWFQgfHwgYyA9PSBTTk1QX01TR19HRVQgfHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPT0gU05NUF9NU0dfU0VUKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPT0gU05NUF9NU0dfU0VUICkKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKICAgICAvKgogICAgICAqIEV4Y2VwdGlvbiB2YWx1ZXMgZm9yIFNOTVB2MnAsIFNOTVB2MmMsIFNOTVB2MnUsIFNOTVB2MiosIGFuZCBTTk1QdjMgCkBAIC0yNzcsNiArMjg2LDcgQEAKICNkZWZpbmUgU05NUF9TRUNfTU9ERUxfU05NUHYxCQkxCiAjZGVmaW5lIFNOTVBfU0VDX01PREVMX1NOTVB2MmMJCTIKICNkZWZpbmUgU05NUF9TRUNfTU9ERUxfVVNNCQkzCisjZGVmaW5lIFNOTVBfU0VDX01PREVMX1RTTSAgICAgICAgICAgICAgNAogI2RlZmluZSBTTk1QX1NFQ19NT0RFTF9TTk1QdjJwCQkyNTYKIAogI2RlZmluZSBTTk1QX1NFQ19MRVZFTF9OT0FVVEgJCTEKQEAgLTMxOSwxMSArMzI5LDE1IEBACiAjZGVmaW5lIFNOTVBBRE1JTkxFTkdUSCAyNTUKIAogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqdXB0aW1lX3N0cmluZyh1X2xvbmcsIGNoYXIgKik7CiAgICAgY2hhciAgICAgICAgICAgKnVwdGltZV9zdHJpbmdfbih1X2xvbmcsIGNoYXIgKiwgc2l6ZV90KTsKLSAgICB2b2lkICAgICAgICAgICAgeGR1bXAoY29uc3QgdV9jaGFyICosIHNpemVfdCwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICB4ZHVtcChjb25zdCB2b2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHVfY2hhciAgICAgICAgICpzbm1wX3BhcnNlX3Zhcl9vcCh1X2NoYXIgKiwgb2lkICosIHNpemVfdCAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICosIHVfY2hhciAqKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKnNubXBfYnVpbGRfdmFyX29wKHVfY2hhciAqLCBvaWQgKiwgc2l6ZV90ICosIHVfY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90LCB1X2NoYXIgKiwgc2l6ZV90ICopOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oCmluZGV4IDg4NTE2Y2IuLjMyNTEwOWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQUFMNVBWQ0RvbWFpbi5oCkBAIC0xMSw2ICsxMSwxMCBAQAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNlbmRpZgogCisjaWZuZGVmIGxpbnV4CisgICAgY29uZmlnX2Vycm9yKEFBTDUgUFZDIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gLUxpbnV4IG9ubHktKTsKKyNlbmRpZgorCiAjaW5jbHVkZSA8YXRtLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcEFsaWFzRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NhZmNiNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9TTk1QQUxJQVNET01BSU5fSAorI2RlZmluZSBfU05NUEFMSUFTRE9NQUlOX0gKKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisKKy8qCisgKiBTaW1wbGUgYWxpYXNlcyBmb3IgY29tcGxleCB0cmFuc3BvcnQgc3RyaW5ncyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQKKyAqIHZpYSB0aGUgc25tcC5jb25mIGZpbGUgYW5kIHRoZSAnYWxpYXMnIHRva2VuLgorICovCisKKyNkZWZpbmUgVFJBTlNQT1JUX0RPTUFJTl9BTElBU19JUAkJMSwzLDYsMSwyLDEsMTAwLDEsNQorTkVUU05NUF9JTVBPUlQgb2lkIG5ldHNubXBfc25tcEFMSUFTRG9tYWluW107CisKKy8qCisgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIAorICovCisKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX2FsaWFzX2N0b3Iodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOICovCisKKyNlbmRpZi8qX1NOTVBBTElBU0RPTUFJTl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAppbmRleCA0YTRlMWE4Li5lMWJlNzBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCkBAIC0xMSw2ICsxMSw3IEBACiAKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9DQUxMQkFDS19ET01BSU4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgogCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2NhbGxiYWNrX3Bhc3NfcyB7CkBAIC0zOCw2ICszOSw3IEBACiBpbnQgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19jaGVja19wYWNrZXQodV9jaGFyICogcGt0LCBzaXplX3QgbGVuKTsKIG5ldHNubXBfcGR1ICAgICpuZXRzbm1wX2NhbGxiYWNrX2NyZWF0ZV9wZHUobmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqb3BhcXVlLCBzaXplX3Qgb2xlbmd0aCk7CitORVRTTk1QX0lNUE9SVAogbmV0c25tcF9zZXNzaW9uICpuZXRzbm1wX2NhbGxiYWNrX29wZW4oaW50IGF0dGFjaF90bywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJldHVybl9mdW5jKSAoaW50IG9wLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24KQEAgLTU1LDYgKzU3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgICBuZXRzbm1wX2NsZWFyX2NhbGxiYWNrX2xpc3Qodm9pZCk7CiAKICNlbHNlCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMzVkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaApAQCAtMCwwICsxLDQxIEBACisjaWZuZGVmIF9TTk1QRFRMU1VEUERPTUFJTl9ICisjZGVmaW5lIF9TTk1QRFRMU1VEUERPTUFJTl9ICisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCitjb25maWdfcmVxdWlyZShVRFApCitjb25maWdfcmVxdWlyZShUTFNCYXNlKQorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworI2RlZmluZSBUUkFOU1BPUlRfRE9NQUlOX0RUTFNfVURQX0lQCTEsMyw2LDEsNiwxLDkKK05FVFNOTVBfSU1QT1JUIG9pZCBuZXRzbm1wRFRMU1VEUERvbWFpbls3XTsKK05FVFNOTVBfSU1QT1JUIHNpemVfdCBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW47CisKK25ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX2R0bHN1ZHBfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2NhbCk7CisKKworLyoKKyAqIFJlZ2lzdGVyIGFueSBjb25maWd1cmF0aW9uIHRva2VucyBzcGVjaWZpYyB0byB0aGUgYWdlbnQuICAKKyAqLworCit2b2lkICAgICAgICAgICAgbmV0c25tcF9kdGxzdWRwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCk7CisKKy8qCisgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIAorICovCisKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX2R0bHN1ZHBfY3Rvcih2b2lkKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZi8qX1NOTVBEVExTVURQRE9NQUlOX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKaW5kZXggMzA0YjM2MC4uMTFjMmJlYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCkBAIC0xMSw2ICsxMSw5IEBACiAjaW5jbHVkZSA8bmV0aXB4L2lweC5oPgogI2VuZGlmCiAKKyNpZm5kZWYgbGludXgKKyAgICBjb25maWdfZXJyb3IoSVBYIHN1cHBvcnQgdW5hdmFpbGFibGUgZm9yIHRoaXMgcGxhdGZvcm0gLUxpbnV4IG9ubHktKTsKKyNlbmRpZgogCiBuZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF9pcHhfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pcHggKmFkZHIsIGludCBsb2NhbCk7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODcxZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qIElQVjQgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqLworI2lmbmRlZiBTTk1QSVBWNEJBU0VfSAorI2RlZmluZSBTTk1QSVBWNEJBU0VfSAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogUHJvdG90eXBlcworICovCisKKyAgICBjaGFyICpuZXRzbm1wX2lwdjRfZm10YWRkcihjb25zdCBjaGFyICpwcmVmaXgsIG5ldHNubXBfdHJhbnNwb3J0ICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhdGEsIGludCBsZW4pOworCisvKgorICogQ29udmVydCBhICJ0cmFkaXRpb25hbCIgcGVlcm5hbWUgaW50byBhIHNvY2thZGRyX2luIHN0cnVjdHVyZSB3aGljaCBpcworICogd3JpdHRlbiB0byAqYWRkcl8gIFJldHVybnMgMSBpZiB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCwgb3IgMCBpZiBpdAorICogZmFpbGVkCisgKi8KKworICAgIGludCBuZXRzbm1wX3NvY2thZGRyX2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgY29uc3QgY2hhciAqcGVlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlbW90ZV9wb3J0KTsKKyAgICBpbnQgbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBjb25zdCBjaGFyICppbnBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYgLyogU05NUElQVjRCQVNFX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDVjOGYwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qIElQVjYgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqLworI2lmbmRlZiBTTk1QSVBWNkJBU0VfSAorI2RlZmluZSBTTk1QSVBWNkJBU0VfSAorCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogUHJvdG90eXBlcworICovCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNoYXIgKm5ldHNubXBfaXB2Nl9mbXRhZGRyKGNvbnN0IGNoYXIgKnByZWZpeCwgbmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgbmV0c25tcF9zb2NrYWRkcl9pbjZfMihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpOworICAgIGludCBuZXRzbm1wX3NvY2thZGRyX2luNihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBpbnQgcmVtb3RlX3BvcnQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmIC8qIFNOTVBJUFY2QkFTRV9IICovCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiZDQ0ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oCkBAIC0wLDAgKzEsNDEgQEAKKyNpZm5kZWYgX1NOTVBTU0hET01BSU5fSAorI2RlZmluZSBfU05NUFNTSERPTUFJTl9ICisKK2NvbmZpZ19yZXF1aXJlKElQdjRCYXNlKQorY29uZmlnX3JlcXVpcmUoU29ja2V0QmFzZSkKKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFRoZSBTTk1QIG92ZXIgU1NIIG92ZXIgSVB2NCB0cmFuc3BvcnQgZG9tYWluIGlzIGlkZW50aWZpZWQgYnkKKyAqIHRyYW5zcG9ydERvbWFpblNzaElwdjQgYXMgZGVmaW5lZCBpbiBSRkMgMzQxOS4KKyAqLworCisjZGVmaW5lIFRSQU5TUE9SVF9ET01BSU5fU1NIX0lQCQkxLDMsNiwxLDIsMSwxMDAsMSwxMDAKK05FVFNOTVBfSU1QT1JUIGNvbnN0IG9pZCBuZXRzbm1wX3NubXBTU0hEb21haW5bXTsKK2VudW0geyBuZXRzbm1wX3NubXBTU0hEb21haW5fbGVuID0gOSB9OworCituZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF9zc2hfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKTsKKworLyoKKyAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LgorICovCisKK3ZvaWQgICAgICAgICAgICBuZXRzbm1wX3NzaF9jdG9yKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKk5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4gKi8KKworI2VuZGlmLypfU05NUFNTSERPTUFJTl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oCmluZGV4IDc3YmUyMmIuLjNlOWE1OWYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaApAQCAtMywxMyArMywxMiBAQAogCiAjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1REX0RPTUFJTgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+Ci0KIC8qCiAgKiBUaGUgU05NUCBvdmVyIFNURCBvdmVyIElQdjQgdHJhbnNwb3J0IGRvbWFpbiBpcyBpZGVudGlmaWVkIGJ5CiAgKiB0cmFuc3BvcnREb21haW5TdGRJcHY0IGFzIGRlZmluZWQgaW4gUkZDIDM0MTkuCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxZDg2YzgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaApAQCAtMCwwICsxLDI1IEBACisjaWZuZGVmIFNOTVBTT0NLRVRCQVNFRE9NQUlOX0gKKyNkZWZpbmUgU05NUFNPQ0tFVEJBU0VET01BSU5fSAorCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogUHJvdG90eXBlcworICovCisgICAgaW50IG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCk7CisgICAgaW50IG5ldHNubXBfc29ja19idWZmZXJfc2V0KGludCBzLCBpbnQgb3B0bmFtZSwgaW50IGxvY2FsLCBpbnQgc2l6ZSk7CisgICAgaW50IG5ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKGludCBzb2NrLCBpbnQgbm9uX2Jsb2NraW5nX21vZGUpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU05NUFNPQ0tFVEJBU0VET01BSU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzgxYTkwCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmgKQEAgLTAsMCArMSwyMiBAQAorI2lmbmRlZiBTTk1QVENQQkFTRURPTUFJTl9ICisjZGVmaW5lIFNOTVBUQ1BCQVNFRE9NQUlOX0gKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogUHJvdG90eXBlcworICovCisgICAgaW50IG5ldHNubXBfdGNwYmFzZV9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworICAgIGludCBuZXRzbm1wX3RjcGJhc2Vfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKKyAgICAgICAgCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU05NUFRDUEJBU0VET01BSU5fSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKaW5kZXggZjQ2NWI3OS4uYzQ1ODU2YiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCkBAIC0xLDIyICsxLDIyIEBACiAjaWZuZGVmIF9TTk1QVENQRE9NQUlOX0gKICNkZWZpbmUgX1NOTVBUQ1BET01BSU5fSAogCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworY29uZmlnX3JlcXVpcmUoSVB2NEJhc2UpCitjb25maWdfcmVxdWlyZShTb2NrZXRCYXNlKQorY29uZmlnX3JlcXVpcmUoVENQQmFzZSkKKwogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KLQotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQogLyoKICAqIFRoZSBTTk1QIG92ZXIgVENQIG92ZXIgSVB2NCB0cmFuc3BvcnQgZG9tYWluIGlzIGlkZW50aWZpZWQgYnkKICAqIHRyYW5zcG9ydERvbWFpblRjcElwdjQgYXMgZGVmaW5lZCBpbiBSRkMgMzQxOS4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKaW5kZXggYjlkZTllYi4uM2JjYTIyYiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKQEAgLTEsMTMgKzEsMjAgQEAKICNpZm5kZWYgX1NOTVBUQ1BJUFY2RE9NQUlOX0gKICNkZWZpbmUgX1NOTVBUQ1BJUFY2RE9NQUlOX0gKIAorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisKK2NvbmZpZ19yZXF1aXJlKElQdjZCYXNlKQorY29uZmlnX3JlcXVpcmUoU29ja2V0QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFRDUEJhc2UpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oPgorCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+Ci0KIC8qCiAgKiBUaGUgU05NUCBvdmVyIFRDUCBvdmVyIElQdjYgdHJhbnNwb3J0IGRvbWFpbiBpcyBpZGVudGlmaWVkIGJ5CiAgKiB0cmFuc3BvcnREb21haW5UY3BJcHY0IGFzIGRlZmluZWQgaW4gUkZDIDM0MTkuCkBAIC0yMyw3ICszMCw3IEBACiAgKiAiQ29uc3RydWN0b3IiIGZvciB0cmFuc3BvcnQgZG9tYWluIG9iamVjdC4gIAogICovCiAKLXZvaWQgICAgICAgICAgICBuZXRzbm1wX3RjcDZfY3Rvcih2b2lkKTsKK05FVFNOTVBfSU1QT1JUIHZvaWQgICAgIG5ldHNubXBfdGNwaXB2Nl9jdG9yKHZvaWQpOwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmMyMWNiNgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oCkBAIC0wLDAgKzEsODMgQEAKKyNpZm5kZWYgX1NOTVBUTFNCQVNFRE9NQUlOX0gKKyNkZWZpbmUgX1NOTVBUTFNCQVNFRE9NQUlOX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmg+CisKKy8qIE9wZW5TU0wgSW5jbHVkZXMgKi8KKyNpbmNsdWRlICJvcGVuc3NsL2Jpby5oIgorI2luY2x1ZGUgIm9wZW5zc2wvc3NsLmgiCisjaW5jbHVkZSAib3BlbnNzbC9lcnIuaCIKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworCisgICAgdm9pZCBuZXRzbm1wX3Rsc2Jhc2VfY3Rvcih2b2lkKTsKKyAgICB2b2lkIG5ldHNubXBfaW5pdF90bHNiYXNlKHZvaWQpOworICAgIGNvbnN0IGNoYXIgKiBfeDUwOV9nZXRfZXJyb3IoaW50IHg1MDlmYWlsdmFsdWUsIGNvbnN0IGNoYXIgKmxvY2F0aW9uKTsKKyAgICB2b2lkIF9vcGVuc3NsX2xvZ19lcnJvcihpbnQgcmMsIFNTTCAqY29uLCBjb25zdCBjaGFyICpsb2NhdGlvbik7CisKKyAgICAvKiB3aWxsIGxpa2VseSBnbyBhd2F5ICovCisgICAgU1NMX0NUWCAqZ2V0X2NsaWVudF9jdHgodm9pZCk7CisgICAgU1NMX0NUWCAqZ2V0X3NlcnZlcl9jdHgodm9pZCk7CisKKyNkZWZpbmUgTkVUU05NUF9UTFNCQVNFX0lTX0NMSUVOVCAgICAgMHgwMQorI2RlZmluZSBORVRTTk1QX1RMU0JBU0VfQ0VSVF9GUF9WRVJJRklFRCAweDAyCisKKyAgICAvKgorICAgICAqIF9JbnRlcm5hbF8gc3RydWN0dXJlcworICAgICAqLworICAgIHR5cGVkZWYgc3RydWN0IF9uZXRzbm1wVExTQmFzZURhdGFfcyB7CisgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7CisgICAgICAgU1NMX0NUWCAgICAgICAgICAgICAgICAgICAqc3NsX2NvbnRleHQ7CisgICAgICAgU1NMICAgICAgICAgICAgICAgICAgICAgICAqc3NsOworICAgICAgIEJJTyAgICAgICAgICAgICAgICAgICAgICAgKnNzbGJpbzsKKyAgICAgICBCSU8gICAgICAgICAgICAgICAgICAgICAgICphY2NlcHRfYmlvOworICAgICAgIEJJTyAgICAgICAgICAgICAgICAgICAgICAgKmFjY2VwdGVkX2JpbzsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICpzZWN1cml0eU5hbWU7CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqYWRkcl9zdHJpbmc7CisgICAgICAgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqYWRkcjsKKyAgICAgICBjaGFyICAgICAgICAgICAgICAgICAgICAgICpvdXJfaWRlbnRpdHk7CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqdGhlaXJfaWRlbnRpdHk7CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqdGhlaXJfZmluZ2VycHJpbnQ7CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqdGhlaXJfaG9zdG5hbWU7CisgICAgICAgY2hhciAgICAgICAgICAgICAgICAgICAgICAqdHJ1c3RfY2VydDsKKyAgICB9IF9uZXRzbm1wVExTQmFzZURhdGE7CisKKyNkZWZpbmUgVlJGWV9QQVJFTlRfV0FTX09LIDEKKyAgICB0eXBlZGVmIHN0cnVjdCBfbmV0c25tcF92ZXJpZnlfaW5mb19zIHsKKyAgICAgICBpbnQgZmxhZ3M7CisgICAgfSBfbmV0c25tcF92ZXJpZnlfaW5mbzsKKworICAgIFNTTF9DVFggKnNzbGN0eF9jbGllbnRfc2V0dXAoY29uc3QgU1NMX01FVEhPRCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzYmFzZSk7CisgICAgU1NMX0NUWCAqc3NsY3R4X3NlcnZlcl9zZXR1cChjb25zdCBTU0xfTUVUSE9EICopOworCisgICAgaW50IG5ldHNubXBfdGxzYmFzZV92ZXJpZnlfc2VydmVyX2NlcnQoU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSk7CisgICAgaW50IG5ldHNubXBfdGxzYmFzZV92ZXJpZnlfY2xpZW50X2NlcnQoU1NMICpzc2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSk7CisgICAgaW50IG5ldHNubXBfdGxzYmFzZV9leHRyYWN0X3NlY3VyaXR5X25hbWUoU1NMICpzc2wsIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEpOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKm5ldHNubXBfdGxzYmFzZV9hbGxvY2F0ZV90bHNkYXRhKG5ldHNubXBfdHJhbnNwb3J0ICp0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBpc3NlcnZlcik7CisgICAgaW50IG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKKyAgICBpbnQgbmV0c25tcF90bHNiYXNlX2NvbmZpZyhzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqdmFsdWUpOworCisgICAgaW50IG5ldHNubXBfdGxzYmFzZV9zZXNzaW9uX2luaXQoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzKTsKKyAgICBpbnQgdGxzX2dldF92ZXJpZnlfaW5mb19pbmRleCh2b2lkKTsKKworICAgIHZvaWQgbmV0c25tcF90bHNiYXNlX2ZyZWVfdGxzZGF0YShfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNiYXNlKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYvKl9TTk1QVExTQkFTRURPTUFJTl9IKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjc2NjIKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRMU1RDUERvbWFpbi5oCkBAIC0wLDAgKzEsMzkgQEAKKyNpZm5kZWYgX1NOTVBUTFNUQ1BET01BSU5fSAorI2RlZmluZSBfU05NUFRMU1RDUERPTUFJTl9ICisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCitjb25maWdfcmVxdWlyZShJUHY0QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFNvY2tldEJhc2UpCitjb25maWdfcmVxdWlyZShUTFNCYXNlKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisjZGVmaW5lIFRSQU5TUE9SVF9ET01BSU5fVExTX1RDUF9JUAkxLDMsNiwxLDYsMSw4CitORVRTTk1QX0lNUE9SVCBvaWQgbmV0c25tcFRMU1RDUERvbWFpbls3XTsKK05FVFNOTVBfSU1QT1JUIHNpemVfdCBuZXRzbm1wVExTVENQRG9tYWluX2xlbjsKKworbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdGxzdGNwX3RyYW5zcG9ydChjb25zdCBjaGFyICphZGRyX3N0cmluZywgaW50IGxvY2FsKTsKKworLyoKKyAqIFJlZ2lzdGVyIGFueSBjb25maWd1cmF0aW9uIHRva2VucyBzcGVjaWZpYyB0byB0aGUgYWdlbnQuICAKKyAqLworCit2b2lkICAgICAgICAgICAgbmV0c25tcF90bHN0Y3BfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKTsKKworLyoKKyAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LiAgCisgKi8KKwordm9pZCAgICAgICAgICAgIG5ldHNubXBfdGxzdGNwX2N0b3Iodm9pZCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisjZW5kaWYvKl9TTk1QVExTVENQRE9NQUlOX0gqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQyYzM0Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKQEAgLTAsMCArMSw0MCBAQAorI2lmbmRlZiBTTk1QVURQQkFTRURPTUFJTl9ICisjZGVmaW5lIFNOTVBVRFBCQVNFRE9NQUlOX0gKKworY29uZmlnX3JlcXVpcmUoU29ja2V0QmFzZSkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisvKgorICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKKyAqLworCisgICAgdm9pZCBuZXRzbm1wX3VkcF9iYXNlX2N0b3Iodm9pZCk7CisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKyAgICB2b2lkIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldChpbnQgZmQsIGludCBsb2NhbCk7CisgICAgaW50IG5ldHNubXBfdWRwYmFzZV9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpOworICAgIGludCBuZXRzbm1wX3VkcGJhc2Vfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKTsKKworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKSB8fCBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCisgICAgaW50IG5ldHNubXBfdWRwYmFzZV9yZWN2ZnJvbShpbnQgcywgdm9pZCAqYnVmLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tLCBzb2NrbGVuX3QgKmZyb21sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdGlwLCBzb2NrbGVuX3QgKmRzdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaWZfaW5kZXgpOworICAgIGludCBuZXRzbm1wX3VkcGJhc2Vfc2VuZHRvKGludCBmZCwgc3RydWN0IGluX2FkZHIgKnNyY2lwLCBpbnQgaWZfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsIHZvaWQgKmRhdGEsIGludCBsZW4pOworI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBTTk1QVURQQkFTRURPTUFJTl9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAppbmRleCA1NDBhZGY1Li4zYTA5ZGZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKQEAgLTE1LDM2ICsxNSwyOCBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogCitjb25maWdfcmVxdWlyZShVRFBJUHY0QmFzZSkKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oPgorCiBuZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF91ZHBfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKTsKIAogCiAvKgotICogQ29udmVydCBhICJ0cmFkaXRpb25hbCIgcGVlcm5hbWUgaW50byBhIHNvY2thZGRyX2luIHN0cnVjdHVyZSB3aGljaCBpcwotICogd3JpdHRlbiB0byAqYWRkci4gIFJldHVybnMgMSBpZiB0aGUgY29udmVyc2lvbiB3YXMgc3VjY2Vzc2Z1bCwgb3IgMCBpZiBpdAotICogZmFpbGVkLiAgCi0gKi8KLQotaW50ICAgICAgICAgICAgIG5ldHNubXBfc29ja2FkZHJfaW4oc3RydWN0IHNvY2thZGRyX2luICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqcGVlcm5hbWUsIGludCByZW1vdGVfcG9ydCk7Ci0KLQotLyoKICAqIFJlZ2lzdGVyIGFueSBjb25maWd1cmF0aW9uIHRva2VucyBzcGVjaWZpYyB0byB0aGUgYWdlbnQuICAKICAqLwogCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdWRwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCk7CiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKTsKIAorTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBuZXRzbm1wX3VkcF9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjb21tdW5pdHksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipzZWNuYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmNvbnRleHROYW1lKTsKLQotaW50ICAgICAgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KGludCBzLCBpbnQgb3B0bmFtZSwgaW50IGxvY2FsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplKTsKLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnNlY25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqY29udGV4dE5hbWUpOwogCiAvKgogICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKQEAgLTUyLDYgKzQ0LDE4IEBACiAKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3VkcF9jdG9yKHZvaWQpOwogCisvKgorICogcHJvdGVjdGVkLWlzaCBmdW5jdGlvbnMgdXNlZCBieSBvdGhlciBjb3JlLWNvZGUKKyAqLworY2hhciAqbmV0c25tcF91ZHBfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbik7CisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pIHx8IGRlZmluZWQoSEFWRV9JUF9SRUNWRFNUQUREUikKK2ludCBuZXRzbm1wX3VkcF9yZWN2ZnJvbShpbnQgcywgdm9pZCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgc29ja2xlbl90ICpmcm9tbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmRzdGlwLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqZHN0bGVuLCBpbnQgKmlmX2luZGV4KTsKK2ludCBuZXRzbm1wX3VkcF9zZW5kdG8oaW50IGZkLCBzdHJ1Y3QgaW5fYWRkciAqc3JjaXAsIGludCBpZl9pbmRleCwKKwkJCQkJICAgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsIHZvaWQgKmRhdGEsIGludCBsZW4pOworI2VuZGlmCisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3ZjJjMgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaApAQCAtMCwwICsxLDQzIEBACisvKiBVRFBJUFY0IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKyNpZm5kZWYgU05NUFVEUElQVjRCQVNFX0gKKyNkZWZpbmUgU05NUFVEUElQVjRCQVNFX0gKKworI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworY29uZmlnX3JlcXVpcmUoVURQQmFzZSkKK2NvbmZpZ19yZXF1aXJlKElQdjRCYXNlKQorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICAgICAgICAgICJDIiB7CisjZW5kaWYKKworLyoKKyAqIFByb3RvdHlwZXMKKyAqLworCisgICAgbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdWRwaXB2NGJhc2VfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxvY2FsKTsKKworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKSB8fCBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCisgICAgaW50IG5ldHNubXBfdWRwaXB2NF9yZWN2ZnJvbShpbnQgcywgdm9pZCAqYnVmLCBpbnQgbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpmcm9tLCBzb2NrbGVuX3QgKmZyb21sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKmRzdGlwLCBzb2NrbGVuX3QgKmRzdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqaWZfaW5kZXgpOworICAgIGludCBuZXRzbm1wX3VkcGlwdjRfc2VuZHRvKGludCBmZCwgc3RydWN0IGluX2FkZHIgKnNyY2lwLCBpbnQgaWZfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsIHZvaWQgKmRhdGEsIGludCBsZW4pOworI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAvKiBTTk1QVURQSVBWNEJBU0VfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAppbmRleCBjNGVhNDY0Li44M2ViYTJjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaApAQCAtMSwxMiArMSwxOCBAQAogI2lmbmRlZiBfU05NUFVEUElQVjZET01BSU5fSAogI2RlZmluZSBfU05NUFVEUElQVjZET01BSU5fSAogCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gICAgICAgICAgIkMiIHsKICNlbmRpZgogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvYXNuMS5oPgorCitjb25maWdfcmVxdWlyZShJUHY2QmFzZSkKK2NvbmZpZ19yZXF1aXJlKFVEUEJhc2UpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oPgogCiAvKgogICogVGhlIFNOTVAgb3ZlciBVRFAgb3ZlciBJUHY2IHRyYW5zcG9ydCBkb21haW4gaXMgaWRlbnRpZmllZCBieQpAQCAtMTYsMzQgKzIyLDM4IEBACiAjZGVmaW5lIFRSQU5TUE9SVF9ET01BSU5fVURQX0lQVjYJMSwzLDYsMSwyLDEsMTAwLDEsMgogTkVUU05NUF9JTVBPUlQgb2lkICAgICAgbmV0c25tcF9VRFBJUHY2RG9tYWluW107CiAKLW5ldHNubXBfdHJhbnNwb3J0ICpzbm1wX3VkcDZfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbG9jYWwpOworbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdWRwNl90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsb2NhbCk7CiAKIAogLyoKICAqIENvbnZlcnQgYSAidHJhZGl0aW9uYWwiIHBlZXJuYW1lIGludG8gYSBzb2NrYWRkcl9pbjYgc3RydWN0dXJlIHdoaWNoIGlzCiAgKiB3cml0dGVuIHRvICphZGRyLiAgUmV0dXJucyAxIGlmIHRoZSBjb252ZXJzaW9uIHdhcyBzdWNjZXNzZnVsLCBvciAwIGlmIGl0Ci0gKiBmYWlsZWQuICAKKyAqIGZhaWxlZC4KICAqLwogCiBpbnQgICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9pbjYoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwZWVybmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVtb3RlX3BvcnQpOwogCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyKHZvaWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnBhcmFtKTsKIAorTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tbXVuaXR5X2xlbiwgY2hhciAqKnNlY25hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmNvbnRleHROYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgY29tbXVuaXR5X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqc2VjbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqY29udGV4dE5hbWUpOwogCiAvKgotICogIkNvbnN0cnVjdG9yIiBmb3IgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QuICAKKyAqICJDb25zdHJ1Y3RvciIgZm9yIHRyYW5zcG9ydCBkb21haW4gb2JqZWN0LgogICovCiAKLXZvaWQgICAgICAgICAgICBuZXRzbm1wX3VkcDZfY3Rvcih2b2lkKTsKK05FVFNOTVBfSU1QT1JUIHZvaWQgbmV0c25tcF91ZHBpcHY2X2N0b3Iodm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAppbmRleCA1MTkwOWY3Li45MWU3ZjYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaApAQCAtMyw4ICszLDggQEAKIAogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VOSVhfRE9NQUlOCiAKLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuICAgICAgICAgICJDIiB7CisjaWYgZGVmaW5lZChjeWd3aW4pIHx8IGRlZmluZWQobWluZ3czMikgfHwgZGVmaW5lZChtaW5ndzMybXN2YykKKyAgICBjb25maWdfZXJyb3IoVW5peCBkb21haW4gcHJvdG9jb2wgc3VwcG9ydCB1bmF2YWlsYWJsZSBmb3IgdGhpcyBwbGF0Zm9ybSkKICNlbmRpZgogCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKQEAgLTE1LDcgKzE1LDEyIEBACiAjZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKworY29uZmlnX3JlcXVpcmUoU29ja2V0QmFzZSkKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgogCiAvKgogICogVGhlIFNOTVAgb3ZlciBsb2NhbCBzb2NrZXQgdHJhbnNwb3J0IGRvbWFpbiBpcyBpZGVudGlmaWVkIGJ5CkBAIC0zMSw4ICszNiw4IEBACiB2b2lkIG5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pOwogaW50IG5ldHNubXBfdW5peF9nZXRTZWNOYW1lKHZvaWQgKm9wYXF1ZSwgaW50IG9sZW5ndGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21tdW5pdHlfbGVuLCBjaGFyICoqc2VjTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqY29udGV4dE5hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21tdW5pdHlfbGVuLCBjb25zdCBjaGFyICoqc2VjTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqY29udGV4dE5hbWUpOwogCiAKIC8qCkBAIC00MSw5ICs0NiwyMCBAQAogCiB2b2lkICAgICAgICAgICAgbmV0c25tcF91bml4X2N0b3Iodm9pZCk7CiAKKy8qCisgKiBTdXBwb3J0IGZ1bmN0aW9ucworICovCit2b2lkICAgICAgICAgICAgbmV0c25tcF91bml4X2NyZWF0ZV9wYXRoX3dpdGhfbW9kZShpbnQgbW9kZSk7Cit2b2lkICAgICAgICAgICAgbmV0c25tcF91bml4X2RvbnRfY3JlYXRlX3BhdGgodm9pZCk7CisKICNpZmRlZiBfX2NwbHVzcGx1cwogfQogI2VuZGlmCisjZWxzZQorCisjZGVmaW5lIG5ldHNubXBfdW5peF9jcmVhdGVfcGF0aF93aXRoX21vZGUoeCkKKyNkZWZpbmUgbmV0c25tcF91bml4X2RvbnRfY3JlYXRlX3BhdGgoKQorCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4gKi8KIAogI2VuZGlmLypfU05NUFVOSVhET01BSU5fSCovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAppbmRleCBmOTdhNzEyLi5kMWJjYmZhIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKQEAgLTEyLDEzICsxMiwxNyBAQAogICAgICAqIGFsYXJtIGZsYWdzIAogICAgICAqLwogI2RlZmluZSBTQV9SRVBFQVQgMHgwMSAgICAgICAgICAvKiBrZWVwIHJlcGVhdGluZyBldmVyeSBYIHNlY29uZHMgKi8KKyNkZWZpbmUgU0FfRklSRUQgMHgxMCAgICAgICAgICAvKiBCZWluZyBwcm9jZXNzZWQgaW4gcnVuX2FsYXJtcyAqLwogCiAgICAgc3RydWN0IHNubXBfYWxhcm0geworICAgICAgICAvKiogQWxhcm0gaW50ZXJ2YWwuIFplcm8gaWYgc2luZ2xlLXNob3QuICovCiAgICAgICAgIHN0cnVjdCB0aW1ldmFsICB0OwogICAgICAgICB1bnNpZ25lZCBpbnQgICAgZmxhZ3M7CiAgICAgICAgIHVuc2lnbmVkIGludCAgICBjbGllbnRyZWc7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0X2xhc3Q7Ci0gICAgICAgIHN0cnVjdCB0aW1ldmFsICB0X25leHQ7CisgICAgICAgIC8qKiBMYXN0IHRpbWUgdGhlIGFsYXJtIGZpcmVkIFttb25vdG9uaWMgY2xvY2tdLiAqLworICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9sYXN0TTsKKyAgICAgICAgLyoqIE5leHQgdGltZSB0aGUgYWxhcm0gd2lsbCBmaXJlIFttb25vdG9uaWMgY2xvY2tdLiAqLworICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9uZXh0TTsKICAgICAgICAgdm9pZCAgICAgICAgICAgKmNsaWVudGFyZzsKICAgICAgICAgU05NUEFsYXJtQ2FsbGJhY2sgKnRoZWNhbGxiYWNrOwogICAgICAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqbmV4dDsKQEAgLTI3LDggKzMxLDEwIEBACiAgICAgLyoKICAgICAgKiB0aGUgb25lcyB5b3Ugc2hvdWxkIG5lZWQgCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKHVuc2lnbmVkIGludCBjbGllbnRyZWcpOwogICAgIHZvaWQJICAgIHNubXBfYWxhcm1fdW5yZWdpc3Rlcl9hbGwodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1bnNpZ25lZCBpbnQgICAgc25tcF9hbGFybV9yZWdpc3Rlcih1bnNpZ25lZCBpbnQgd2hlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEFsYXJtQ2FsbGJhY2sgKiB0aGVjYWxsYmFjaywKQEAgLTQ1LDE3ICs1MSwyMCBAQAogICAgIC8qCiAgICAgICogdGhlIG9uZXMgeW91IHNob3VsZG4ndCAKICAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wX2FsYXJtKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgaW5pdF9zbm1wX2FsYXJtKHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBpbml0X2FsYXJtX3Bvc3RfY29uZmlnKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqY2xpZW50YXJnKTsKICAgICB2b2lkICAgICAgICAgICAgc2FfdXBkYXRlX2VudHJ5KHN0cnVjdCBzbm1wX2FsYXJtICphbHJtKTsKICAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqc2FfZmluZF9uZXh0KHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBydW5fYWxhcm1zKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgcnVuX2FsYXJtcyh2b2lkKTsKICAgICBSRVRTSUdUWVBFICAgICAgYWxhcm1faGFuZGxlcihpbnQgYSk7CiAgICAgdm9pZCAgICAgICAgICAgIHNldF9hbl9hbGFybSh2b2lkKTsKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9nZXRfbmV4dF9hbGFybV90aW1lKHN0cnVjdCB0aW1ldmFsICphbGFybV90bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3cpOwogICAgIGludCAgICAgICAgICAgICBnZXRfbmV4dF9hbGFybV9kZWxheV90aW1lKHN0cnVjdCB0aW1ldmFsICpkZWx0YSk7CiAKKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKaW5kZXggMmNhZDkyZS4uNmY2NThkNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKQEAgLTI0LDYgKzI0LDE0IEBACiAgKiBAewogICovCiAKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3ZhcmJpbmRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKwogI2lmbmRlZiBET05UX1NIQVJFX0VSUk9SX1dJVEhfT1RIRVJfVEhSRUFEUwogI2RlZmluZSBTRVRfU05NUF9FUlJPUih4KSBzbm1wX2Vycm5vPSh4KQogI2Vsc2UKQEAgLTU3LDI1NyArNjUsNyBAQAogU09GVFdBUkUuCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLS8qKiBAdHlwZWRlZiBzdHJ1Y3QgdmFyaWFibGVfbGlzdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QKLSAgICAqIFR5cGVkZWZzIHRoZSB2YXJpYWJsZV9saXN0IHN0cnVjdCBpbnRvIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLwotc3RydWN0IHZhcmlhYmxlX2xpc3Q7Ci10eXBlZGVmIHN0cnVjdCB2YXJpYWJsZV9saXN0IG5ldHNubXBfdmFyaWFibGVfbGlzdDsKIHN0cnVjdCB0aW1ldmFsOwotc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3M7Ci0KLSNkZWZpbmUgVVNNX0FVVEhfS1VfTEVOICAgICAzMgotI2RlZmluZSBVU01fUFJJVl9LVV9MRU4gICAgIDMyCi0KLS8qKiBAdHlwZWRlZiBzdHJ1Y3Qgc25tcF9wZHUgdG8gbmV0c25tcF9wZHUKLSAgICAqIFR5cGVkZWZzIHRoZSBzbm1wX3BkdSBzdHJ1Y3QgaW50byBuZXRzbm1wX3BkdSAqLwotLyoqIEBzdHJ1Y3Qgc25tcF9wZHUKLSAqIFRoZSBzbm1wIHByb3RvY29sIGRhdGEgdW5pdC4KLSAqLwkKLXR5cGVkZWYgc3RydWN0IHNubXBfcGR1IHsKLQotICAgIC8qCi0gICAgICogUHJvdG9jb2wtdmVyc2lvbiBpbmRlcGVuZGVudCBmaWVsZHMKLSAgICAgKi8KLSAgICAvKiogc25tcCB2ZXJzaW9uICovCi0gICAgbG9uZyAgICAgICAgICAgIHZlcnNpb247Ci0gICAgLyoqIFR5cGUgb2YgdGhpcyBQRFUgKi8JCi0gICAgaW50ICAgICAgICAgICAgIGNvbW1hbmQ7Ci0gICAgLyoqIFJlcXVlc3QgaWQgLSBub3RlOiBub3QgaW5jcmVtZW50ZWQgb24gcmV0cmllcyAqLwotICAgIGxvbmcgICAgICAgICAgICByZXFpZDsgIAotICAgIC8qKiBNZXNzYWdlIGlkIGZvciBWMyBtZXNzYWdlcyBub3RlOiBpbmNyZW1lbnRlZCBmb3IgZWFjaCByZXRyeSAqLwotICAgIGxvbmcgICAgICAgICAgICBtc2dpZDsKLSAgICAvKiogVW5pcXVlIElEIGZvciBpbmNvbWluZyB0cmFuc2FjdGlvbnMgKi8KLSAgICBsb25nICAgICAgICAgICAgdHJhbnNpZDsKLSAgICAvKiogU2Vzc2lvbiBpZCBmb3IgQWdlbnRYIG1lc3NhZ2VzICovCi0gICAgbG9uZyAgICAgICAgICAgIHNlc3NpZDsKLSAgICAvKiogRXJyb3Igc3RhdHVzIChub25fcmVwZWF0ZXJzIGluIEdldEJ1bGspICovCi0gICAgbG9uZyAgICAgICAgICAgIGVycnN0YXQ7Ci0gICAgLyoqIEVycm9yIGluZGV4IChtYXhfcmVwZXRpdGlvbnMgaW4gR2V0QnVsaykgKi8KLSAgICBsb25nICAgICAgICAgICAgZXJyaW5kZXg7ICAgICAgIAotICAgIC8qKiBVcHRpbWUgKi8KLSAgICB1X2xvbmcgICAgICAgICAgdGltZTsgICAKLSAgICB1X2xvbmcgICAgICAgICAgZmxhZ3M7Ci0KLSAgICBpbnQgICAgICAgICAgICAgc2VjdXJpdHlNb2RlbDsKLSAgICAvKiogbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiAqLwotICAgIGludCAgICAgICAgICAgICBzZWN1cml0eUxldmVsOyAgCi0gICAgaW50ICAgICAgICAgICAgIG1zZ1BhcnNlTW9kZWw7Ci0KLSAgICAvKioKLSAgICAgKiBUcmFuc3BvcnQtc3BlY2lmaWMgb3BhcXVlIGRhdGEuICBUaGlzIHJlcGxhY2VzIHRoZSBJUC1jZW50cmljIGFkZHJlc3MKLSAgICAgKiBmaWVsZC4gIAotICAgICAqLwotICAgIAotICAgIHZvaWQgICAgICAgICAgICp0cmFuc3BvcnRfZGF0YTsKLSAgICBpbnQgICAgICAgICAgICAgdHJhbnNwb3J0X2RhdGFfbGVuZ3RoOwotCi0gICAgLyoqCi0gICAgICogVGhlIGFjdHVhbCB0cmFuc3BvcnQgZG9tYWluLiAgVGhpcyBTSE9VTEQgTk9UIEJFIEZSRUUoKUQuICAKLSAgICAgKi8KLQotICAgIGNvbnN0IG9pZCAgICAgICp0RG9tYWluOwotICAgIHNpemVfdCAgICAgICAgICB0RG9tYWluTGVuOwotCi0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJpYWJsZXM7Ci0KLQotICAgIC8qCi0gICAgICogU05NUHYxICYgU05NUHYyYyBmaWVsZHMKLSAgICAgKi8KLSAgICAvKiogY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gKi8KLSAgICB1X2NoYXIgICAgICAgICAqY29tbXVuaXR5OwotICAgIC8qKiBsZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuICovCi0gICAgc2l6ZV90ICAgICAgICAgIGNvbW11bml0eV9sZW47ICAKLQotICAgIC8qCi0gICAgICogVHJhcCBpbmZvcm1hdGlvbgotICAgICAqLwotICAgIC8qKiBTeXN0ZW0gT0lEICovCi0gICAgb2lkICAgICAgICAgICAgKmVudGVycHJpc2U7ICAgICAKLSAgICBzaXplX3QgICAgICAgICAgZW50ZXJwcmlzZV9sZW5ndGg7Ci0gICAgLyoqIHRyYXAgdHlwZSAqLwotICAgIGxvbmcgICAgICAgICAgICB0cmFwX3R5cGU7Ci0gICAgLyoqIHNwZWNpZmljIHR5cGUgKi8KLSAgICBsb25nICAgICAgICAgICAgc3BlY2lmaWNfdHlwZTsKLSAgICAvKiogVGhpcyBpcyBPTkxZIHVzZWQgZm9yIHYxIFRSQVBzICAqLwotICAgIHVuc2lnbmVkIGNoYXIgICBhZ2VudF9hZGRyWzRdOyAgCi0KLSAgICAvKgotICAgICAqICBTTk1QdjMgZmllbGRzCi0gICAgICovCi0gICAgLyoqIGNvbnRleHQgc25tcEVuZ2luZUlEICovCi0gICAgdV9jaGFyICAgICAgICAgKmNvbnRleHRFbmdpbmVJRDsKLSAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRCAqLwotICAgIHNpemVfdCAgICAgICAgICBjb250ZXh0RW5naW5lSURMZW47ICAgICAKLSAgICAvKiogYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSAqLwotICAgIGNoYXIgICAgICAgICAgICpjb250ZXh0TmFtZTsKLSAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHROYW1lICovCi0gICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHROYW1lTGVuOwotICAgIC8qKiBhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCBmb3Igc2VjdXJpdHkgKi8KLSAgICB1X2NoYXIgICAgICAgICAqc2VjdXJpdHlFbmdpbmVJRDsKLSAgICAvKiogTGVuZ3RoIG9mIHNlY3VyaXR5RW5naW5lSUQgKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlFbmdpbmVJRExlbjsgICAgCi0gICAgLyoqIG9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCAqLwotICAgIGNoYXIgICAgICAgICAgICpzZWN1cml0eU5hbWU7Ci0gICAgLyoqIExlbmd0aCBvZiBzZWN1cml0eU5hbWUuICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5TmFtZUxlbjsgICAgICAgIAotICAgIAotICAgIC8qCi0gICAgICogQWdlbnRYIGZpZWxkcwotICAgICAqICAgICAgKGFsc28gdXNlcyBTTk1QdjEgY29tbXVuaXR5IGZpZWxkKQotICAgICAqLwotICAgIGludCAgICAgICAgICAgICBwcmlvcml0eTsKLSAgICBpbnQgICAgICAgICAgICAgcmFuZ2Vfc3ViaWQ7Ci0gICAgCi0gICAgdm9pZCAgICAgICAgICAgKnNlY3VyaXR5U3RhdGVSZWY7Ci19IG5ldHNubXBfcGR1OwotCi1zdHJ1Y3Qgc25tcF9zZXNzaW9uOwotCi0vKiogQHR5cGVkZWYgc3RydWN0IHNubXBfc2Vzc2lvbiBuZXRzbm1wX3Nlc3Npb24KLSAqIFR5cGVkZWZzIHRoZSBzbm1wX3Nlc3Npb24gc3RydWN0IGludG9uZXRzbm1wX3Nlc3Npb24gKi8KLXR5cGVkZWYgc3RydWN0IHNubXBfc2Vzc2lvbiBuZXRzbm1wX3Nlc3Npb247Ci0KLXR5cGVkZWYgaW50ICAgICAoKnNubXBfY2FsbGJhY2spIChpbnQsIG5ldHNubXBfc2Vzc2lvbiAqLCBpbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICosIHZvaWQgKik7Ci10eXBlZGVmIGludCAgICAgKCpuZXRzbm1wX2NhbGxiYWNrKSAoaW50LCBuZXRzbm1wX3Nlc3Npb24gKiwgaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB2b2lkICopOwotLyoqIEBzdHJ1Y3Qgc25tcF9zZXNzaW9uCi0gKiBUaGUgc25tcCBzZXNzaW9uIHN0cnVjdHVyZS4KLSAqLwotc3RydWN0IHNubXBfc2Vzc2lvbiB7Ci0gICAgLyoKLSAgICAgKiBQcm90b2NvbC12ZXJzaW9uIGluZGVwZW5kZW50IGZpZWxkcwotICAgICAqLwotICAgIC8qKiBzbm1wIHZlcnNpb24gKi8KLSAgICBsb25nICAgICAgICAgICAgdmVyc2lvbjsKLSAgICAvKiogTnVtYmVyIG9mIHJldHJpZXMgYmVmb3JlIHRpbWVvdXQuICovCi0gICAgaW50ICAgICAgICAgICAgIHJldHJpZXM7Ci0gICAgLyoqIE51bWJlciBvZiB1UyB1bnRpbCBmaXJzdCB0aW1lb3V0LCB0aGVuIGV4cG9uZW50aWFsIGJhY2tvZmYgKi8KLSAgICBsb25nICAgICAgICAgICAgdGltZW91dDsgICAgICAgIAotICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKLSAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzdWJzZXNzaW9uOwotICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKm5leHQ7Ci0KLSAgICAvKiogbmFtZSBvciBhZGRyZXNzIG9mIGRlZmF1bHQgcGVlciAobWF5IGluY2x1ZGUgdHJhbnNwb3J0IHNwZWNpZmllciBhbmQvb3IgcG9ydCBudW1iZXIpICovCi0gICAgY2hhciAgICAgICAgICAgKnBlZXJuYW1lOwotICAgIC8qKiBVRFAgcG9ydCBudW1iZXIgb2YgcGVlci4gKE5PIExPTkdFUiBVU0VEIC0gVVNFIHBlZXJuYW1lIElOU1RFQUQpICovCi0gICAgdV9zaG9ydCAgICAgICAgIHJlbW90ZV9wb3J0OwotICAgIC8qKiBNeSBEb21haW4gbmFtZSBvciBkb3R0ZWQgSVAgYWRkcmVzcywgMCBmb3IgZGVmYXVsdCAqLwotICAgIGNoYXIgICAgICAgICAgICpsb2NhbG5hbWU7Ci0gICAgLyoqIE15IFVEUCBwb3J0IG51bWJlciwgMCBmb3IgZGVmYXVsdCwgcGlja2VkIHJhbmRvbWx5ICovCi0gICAgdV9zaG9ydCAgICAgICAgIGxvY2FsX3BvcnQ7ICAgICAKLSAgICAvKioKLSAgICAgKiBBdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBvciBOVUxMIGlmIG51bGwgYXV0aGVudGljYXRpb24gaXMgdXNlZCAKLSAgICAgKi8KLSAgICB1X2NoYXIgICAgICAgICAqKCphdXRoZW50aWNhdG9yKSAodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKLSAgICAvKiogRnVuY3Rpb24gdG8gaW50ZXJwcmV0IGluY29taW5nIGRhdGEgKi8KLSAgICBuZXRzbm1wX2NhbGxiYWNrIGNhbGxiYWNrOyAgICAgIAotICAgIC8qKgotICAgICAqIFBvaW50ZXIgdG8gZGF0YSB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtYXkgY29uc2lkZXIgaW1wb3J0YW50IAotICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICpjYWxsYmFja19tYWdpYzsKLSAgICAvKiogY29weSBvZiBzeXN0ZW0gZXJybm8gKi8KLSAgICBpbnQgICAgICAgICAgICAgc19lcnJubzsKLSAgICAvKiogY29weSBvZiBsaWJyYXJ5IGVycm5vICovCi0gICAgaW50ICAgICAgICAgICAgIHNfc25tcF9lcnJubzsgICAKLSAgICAvKiogU2Vzc2lvbiBpZCAtIEFnZW50WCBvbmx5ICovCi0gICAgbG9uZyAgICAgICAgICAgIHNlc3NpZDsgCi0KLSAgICAvKgotICAgICAqIFNOTVB2MSAmIFNOTVB2MmMgZmllbGRzCi0gICAgICovCi0gICAgLyoqIGNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuICovCi0gICAgdV9jaGFyICAgICAgICAgKmNvbW11bml0eTsKLSAgICAvKiogTGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiAqLwotICAgIHNpemVfdCAgICAgICAgICBjb21tdW5pdHlfbGVuOyAgCi0gICAgLyoqICBMYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHJlY2VpdmUuICAqLwotICAgIHNpemVfdCAgICAgICAgICByY3ZNc2dNYXhTaXplOwotICAgIC8qKiAgTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byBzZW5kLiAgKi8KLSAgICBzaXplX3QgICAgICAgICAgc25kTXNnTWF4U2l6ZTsgIAotCi0gICAgLyoKLSAgICAgKiBTTk1QdjMgZmllbGRzCi0gICAgICovCi0gICAgLyoqIGFyZSB3ZSB0aGUgYXV0aG9yaXRhdGl2ZSBlbmdpbmU/ICovCi0gICAgdV9jaGFyICAgICAgICAgIGlzQXV0aG9yaXRhdGl2ZTsKLSAgICAvKiogYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgKi8KLSAgICB1X2NoYXIgICAgICAgICAqY29udGV4dEVuZ2luZUlEOwotICAgIC8qKiBMZW5ndGggb2YgY29udGV4dEVuZ2luZUlEICovCi0gICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHRFbmdpbmVJRExlbjsgICAgIAotICAgIC8qKiBpbml0aWFsIGVuZ2luZUJvb3RzIGZvciByZW1vdGUgZW5naW5lICovCi0gICAgdV9pbnQgICAgICAgICAgIGVuZ2luZUJvb3RzOwotICAgIC8qKiBpbml0aWFsIGVuZ2luZVRpbWUgZm9yIHJlbW90ZSBlbmdpbmUgKi8KLSAgICB1X2ludCAgICAgICAgICAgZW5naW5lVGltZTsKLSAgICAvKiogYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSAqLwotICAgIGNoYXIgICAgICAgICAgICpjb250ZXh0TmFtZTsKLSAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHROYW1lICovCi0gICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHROYW1lTGVuOwotICAgIC8qKiBhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCAqLwotICAgIHVfY2hhciAgICAgICAgICpzZWN1cml0eUVuZ2luZUlEOwotICAgIC8qKiBMZW5ndGggb2YgY29udGV4dEVuZ2luZUlEICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5RW5naW5lSURMZW47ICAgIAotICAgIC8qKiBvbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgKi8KLSAgICBjaGFyICAgICAgICAgICAqc2VjdXJpdHlOYW1lOwotICAgIC8qKiBMZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eU5hbWVMZW47Ci0KLSAgICAvKiogYXV0aCBwcm90b2NvbCBvaWQgKi8KLSAgICBvaWQgICAgICAgICAgICAqc2VjdXJpdHlBdXRoUHJvdG87Ci0gICAgLyoqIExlbmd0aCBvZiBhdXRoIHByb3RvY29sIG9pZCAqLwotICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUF1dGhQcm90b0xlbjsKLSAgICAvKiogS3UgZm9yIGF1dGggcHJvdG9jb2wgWFhYICovCi0gICAgdV9jaGFyICAgICAgICAgIHNlY3VyaXR5QXV0aEtleVtVU01fQVVUSF9LVV9MRU5dOyAgICAgICAKLSAgICAvKiogTGVuZ3RoIG9mIEt1IGZvciBhdXRoIHByb3RvY29sICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5QXV0aEtleUxlbjsKLSAgICAvKiogS3VsIGZvciBhdXRoIHByb3RvY29sICovCi0gICAgdV9jaGFyICAgICAgICAgICpzZWN1cml0eUF1dGhMb2NhbEtleTsgICAgICAgCi0gICAgLyoqIExlbmd0aCBvZiBLdWwgZm9yIGF1dGggcHJvdG9jb2wgWFhYICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5QXV0aExvY2FsS2V5TGVuOyAgICAgICAKLQotICAgIC8qKiBwcml2IHByb3RvY29sIG9pZCAqLwotICAgIG9pZCAgICAgICAgICAgICpzZWN1cml0eVByaXZQcm90bzsKLSAgICAvKiogTGVuZ3RoIG9mIHByaXYgcHJvdG9jb2wgb2lkICovCi0gICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5UHJpdlByb3RvTGVuOwotICAgIC8qKiBLdSBmb3IgcHJpdmFjeSBwcm90b2NvbCBYWFggKi8KLSAgICB1X2NoYXIgICAgICAgICAgc2VjdXJpdHlQcml2S2V5W1VTTV9QUklWX0tVX0xFTl07ICAgICAgIAotICAgIC8qKiBMZW5ndGggb2YgS3UgZm9yIHByaXYgcHJvdG9jb2wgKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlQcml2S2V5TGVuOwotICAgIC8qKiBLdWwgZm9yIHByaXYgcHJvdG9jb2wgKi8KLSAgICB1X2NoYXIgICAgICAgICAgKnNlY3VyaXR5UHJpdkxvY2FsS2V5OyAgICAgICAKLSAgICAvKiogTGVuZ3RoIG9mIEt1bCBmb3IgcHJpdiBwcm90b2NvbCBYWFggKi8KLSAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlQcml2TG9jYWxLZXlMZW47ICAgICAgIAotCi0gICAgLyoqIHNubXAgc2VjdXJpdHkgbW9kZWwsIHYxLCB2MmMsIHVzbSAqLwotICAgIGludCAgICAgICAgICAgICBzZWN1cml0eU1vZGVsOwotICAgIC8qKiBub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2ICovCi0gICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TGV2ZWw7ICAKLSAgICAvKiogdGFyZ2V0IHBhcmFtIG5hbWUgKi8KLSAgICBjaGFyICAgICAgICAgICAqcGFyYW1OYW1lOwotCi0gICAgLyoqCi0gICAgICogc2VjdXJpdHkgbW9kdWxlIHNwZWNpZmljIAotICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICpzZWN1cml0eUluZm87Ci0KLSAgICAvKioKLSAgICAgKiB1c2UgYXMgeW91IHdhbnQgZGF0YSAKLSAgICAgKgotICAgICAqICAgICB1c2VkIGJ5ICdTTk1QX0ZMQUdTX1JFU1BfQ0FMTEJBQ0snIGhhbmRsaW5nIGluIHRoZSBhZ2VudAotICAgICAqIFhYWDogb3Igc2hvdWxkIHdlIGFkZCBhIG5ldyBmaWVsZCBpbnRvIHRoaXMgc3RydWN0dXJlPwotICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICpteXZvaWQ7Ci19OwotCiAvKgogICogQSBsaXN0IG9mIGFsbCB0aGUgb3V0c3RhbmRpbmcgcmVxdWVzdHMgZm9yIGEgcGFydGljdWxhciBzZXNzaW9uLgogICovCkBAIC0zMjAsOCArNzgsOCBAQAogICAgIHZvaWQgICAgICAgICAgICpjYl9kYXRhOyAgICAgICAgLyogdXNlciBjYWxsYmFjayBkYXRhIHBlciByZXF1ZXN0IChOVUxMIGlmIHVudXNlZCkgKi8KICAgICBpbnQgICAgICAgICAgICAgcmV0cmllczsgICAgICAgIC8qIE51bWJlciBvZiByZXRyaWVzICovCiAgICAgdV9sb25nICAgICAgICAgIHRpbWVvdXQ7ICAgICAgICAvKiBsZW5ndGggdG8gd2FpdCBmb3IgdGltZW91dCAqLwotICAgIHN0cnVjdCB0aW1ldmFsICB0aW1lOyAgIC8qIFRpbWUgdGhpcyByZXF1ZXN0IHdhcyBtYWRlICovCi0gICAgc3RydWN0IHRpbWV2YWwgIGV4cGlyZTsgLyogdGltZSB0aGlzIHJlcXVlc3QgaXMgZHVlIHRvIGV4cGlyZSAqLworICAgIHN0cnVjdCB0aW1ldmFsICB0aW1lTTsgICAvKiBUaW1lIHRoaXMgcmVxdWVzdCB3YXMgbWFkZSBbbW9ub3RvbmljIGNsb2NrXSAqLworICAgIHN0cnVjdCB0aW1ldmFsICBleHBpcmVNOyAvKiBUaW1lIHRoaXMgcmVxdWVzdCBpcyBkdWUgdG8gZXhwaXJlIFttb25vdG9uaWMgY2xvY2tdLiAqLwogICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3Npb247CiAgICAgbmV0c25tcF9wZHUgICAgKnBkdTsgICAgLyogVGhlIHBkdSBmb3IgdGhpcyByZXF1ZXN0CiAJCQkgICAgICogKHNhdmVkIHNvIGl0IGNhbiBiZSByZXRyYW5zbWl0dGVkICovCkBAIC0zNTksOCArMTE3LDYgQEAKICNlbmRpZgogI2RlZmluZSBTTk1QX0RFRkFVTFRfUFJJVl9QUk9UT0xFTiAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNCiAKLSAgICBORVRTTk1QX0lNUE9SVCBjb25zdCBjaGFyICpzbm1wX2FwaV9lcnJzdHJpbmcoaW50KTsKLSAgICBORVRTTk1QX0lNUE9SVCB2b2lkICAgICBzbm1wX3BlcnJvcihjb25zdCBjaGFyICopOwogICAgIE5FVFNOTVBfSU1QT1JUIHZvaWQgICAgIHNubXBfc2V0X2RldGFpbChjb25zdCBjaGFyICopOwogCiAjZGVmaW5lIFNOTVBfTUFYX01TR19TSVpFICAgICAgICAgIDE0NzIgLyogZXRoZXJuZXQgTVRVIG1pbnVzIElQL1VEUCBoZWFkZXIgKi8KQEAgLTQwNCw2ICsxNjAsNyBAQAogCiAjZGVmaW5lIFNOTVBfREVUQUlMX1NJWkUgICAgICAgIDUxMgogCisjZGVmaW5lIFNOTVBfRkxBR1NfVURQX0JST0FEQ0FTVCAgIDB4ODAwCiAjZGVmaW5lIFNOTVBfRkxBR1NfUkVTUF9DQUxMQkFDSyAgIDB4NDAwICAgICAgLyogQWRkaXRpb25hbCBjYWxsYmFjayBvbiByZXNwb25zZSAqLwogI2RlZmluZSBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCAgICAweDIwMCAgICAgIC8qIFVTTSB1c2VyIGhhcyBiZWVuIGNyZWF0ZWQgKi8KICNkZWZpbmUgU05NUF9GTEFHU19ET05UX1BST0JFICAgICAgMHgxMDAgICAgICAvKiBkb24ndCBwcm9iZSBmb3IgYW4gZW5naW5lSUQgKi8KQEAgLTUwMCwxMzIgKzI1NywyOSBAQAogI2RlZmluZSBTTk1QRVJSX0tSQjUJCQkoLTYzKQogI2RlZmluZSBTTk1QRVJSX1BST1RPQ09MCQkoLTY0KQogI2RlZmluZSBTTk1QRVJSX09JRF9OT05JTkNSRUFTSU5HICAgICAgICgtNjUpCisjZGVmaW5lIFNOTVBFUlJfSlVTVF9BX0NPTlRFWFRfUFJPQkUgICAgKC02NikKKyNkZWZpbmUgU05NUEVSUl9UUkFOU1BPUlRfTk9fQ09ORklHICAgICAoLTY3KQorI2RlZmluZSBTTk1QRVJSX1RSQU5TUE9SVF9DT05GSUdfRVJST1IgICgtNjgpCisjZGVmaW5lIFNOTVBFUlJfVExTX05PX0NFUlRJRklDQVRFICAgICAgKC02OSkKIAotI2RlZmluZSBTTk1QRVJSX01BWAkJCSgtNjUpCi0KLSNkZWZpbmUgbm9uX3JlcGVhdGVycwllcnJzdGF0Ci0jZGVmaW5lIG1heF9yZXBldGl0aW9ucyBlcnJpbmRleAotCi10eXBlZGVmIHVuaW9uIHsKLSAgIGxvbmcgICAgICAgICAgICppbnRlZ2VyOwotICAgdV9jaGFyICAgICAgICAgKnN0cmluZzsKLSAgIG9pZCAgICAgICAgICAgICpvYmppZDsKLSAgIHVfY2hhciAgICAgICAgICpiaXRzdHJpbmc7Ci0gICBzdHJ1Y3QgY291bnRlcjY0ICpjb3VudGVyNjQ7Ci0jaWZkZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCi0gICBmbG9hdCAgICAgICAgICAqZmxvYXRWYWw7Ci0gICBkb3VibGUgICAgICAgICAqZG91YmxlVmFsOwotICAgLyoKLSAgICAqIHRfdW5pb24gKnVuaW9uVmFsOyAKLSAgICAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMgKi8KLX0gbmV0c25tcF92YXJkYXRhOwotCi0KLS8qKiBAc3RydWN0IHZhcmlhYmxlX2xpc3QKLSAqIFRoZSBuZXRzbm1wIHZhcmlhYmxlIGxpc3QgYmluZGluZyBzdHJ1Y3R1cmUsIGl0J3MgdHlwZWRlZidkIHRvCi0gKiBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QuCi0gKi8KLXN0cnVjdCB2YXJpYWJsZV9saXN0IHsKLSAgIC8qKiBOVUxMIGZvciBsYXN0IHZhcmlhYmxlICovCi0gICBzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqbmV4dF92YXJpYWJsZTsgICAgCi0gICAvKiogT2JqZWN0IGlkZW50aWZpZXIgb2YgdmFyaWFibGUgKi8KLSAgIG9pZCAgICAgICAgICAgICpuYW1lOyAgIAotICAgLyoqIG51bWJlciBvZiBzdWJpZCdzIGluIG5hbWUgKi8KLSAgIHNpemVfdCAgICAgICAgICBuYW1lX2xlbmd0aDsgICAgCi0gICAvKiogQVNOIHR5cGUgb2YgdmFyaWFibGUgKi8KLSAgIHVfY2hhciAgICAgICAgICB0eXBlOyAgIAotICAgLyoqIHZhbHVlIG9mIHZhcmlhYmxlICovCi0gICAgbmV0c25tcF92YXJkYXRhIHZhbDsKLSAgIC8qKiB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB0byBiZSBjb3BpZWQgaW50byBidWYgKi8KLSAgIHNpemVfdCAgICAgICAgICB2YWxfbGVuOwotICAgLyoqIGJ1ZmZlciB0byBob2xkIHRoZSBPSUQgKi8KLSAgIG9pZCAgICAgICAgICAgICBuYW1lX2xvY1tNQVhfT0lEX0xFTl07ICAKLSAgIC8qKiA5MCBwZXJjZW50aWxlIDwgNDAuICovCi0gICB1X2NoYXIgICAgICAgICAgYnVmWzQwXTsKLSAgIC8qKiAoT3BhcXVlKSBob29rIGZvciBhZGRpdGlvbmFsIGRhdGEgKi8KLSAgIHZvaWQgICAgICAgICAgICpkYXRhOwotICAgLyoqIGNhbGxiYWNrIHRvIGZyZWUgYWJvdmUgKi8KLSAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykodm9pZCAqKTsgICAgCi0gICBpbnQgICAgICAgICAgICAgaW5kZXg7Ci19OwotCi0KLQotICAgIC8qCi0gICAgICogbmV0c25tcF9zZXNzaW9uICpzbm1wX29wZW4oc2Vzc2lvbikKLSAgICAgKiAgICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKLSAgICAgKgotICAgICAqIFNldHMgdXAgdGhlIHNlc3Npb24gd2l0aCB0aGUgc25tcF9zZXNzaW9uIGluZm9ybWF0aW9uIHByb3ZpZGVkCi0gICAgICogYnkgdGhlIHVzZXIuICBUaGVuIG9wZW5zIGFuZCBiaW5kcyB0aGUgbmVjZXNzYXJ5IFVEUCBwb3J0LgotICAgICAqIEEgaGFuZGxlIHRvIHRoZSBjcmVhdGVkIHNlc3Npb24gaXMgcmV0dXJuZWQgKHRoaXMgaXMgZGlmZmVyZW50IHRoYW4KLSAgICAgKiB0aGUgcG9pbnRlciBwYXNzZWQgdG8gc25tcF9vcGVuKCkpLiAgT24gYW55IGVycm9yLCBOVUxMIGlzIHJldHVybmVkCi0gICAgICogYW5kIHNubXBfZXJybm8gaXMgc2V0IHRvIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb2RlLgotICAgICAqLwotICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9vcGVuKG5ldHNubXBfc2Vzc2lvbiAqKTsKLQotICAgIC8qCi0gICAgICogaW50IHNubXBfY2xvc2Uoc2Vzc2lvbikKLSAgICAgKiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgICAqCi0gICAgICogQ2xvc2UgdGhlIGlucHV0IHNlc3Npb24uICBGcmVlcyBhbGwgZGF0YSBhbGxvY2F0ZWQgZm9yIHRoZSBzZXNzaW9uLAotICAgICAqIGRlcXVldWVzIGFueSBwZW5kaW5nIHJlcXVlc3RzLCBhbmQgY2xvc2VzIGFueSBzb2NrZXRzIGFsbG9jYXRlZCBmb3IKLSAgICAgKiB0aGUgc2Vzc2lvbi4gIFJldHVybnMgMCBvbiBlcnJvciwgMSBvdGhlcndpc2UuCi0gICAgICoKLSAgICAgKiBzbm1wX2Nsb3NlX3Nlc3Npb25zKCkgZG9lcyB0aGUgc2FtZSB0aGluZyBmb3IgYWxsIG9wZW4gc2Vzc2lvbnMKLSAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9zZShuZXRzbm1wX3Nlc3Npb24gKik7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfY2xvc2Vfc2Vzc2lvbnModm9pZCk7CisjZGVmaW5lIFNOTVBFUlJfTUFYCQkJKC02OSkKIAogCiAgICAgLyoKLSAgICAgKiBpbnQgc25tcF9zZW5kKHNlc3Npb24sIHBkdSkKLSAgICAgKiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgICAqICAgICBuZXRzbm1wX3BkdSAgICAgICpwZHU7Ci0gICAgICoKLSAgICAgKiBTZW5kcyB0aGUgaW5wdXQgcGR1IG9uIHRoZSBzZXNzaW9uIGFmdGVyIGNhbGxpbmcgc25tcF9idWlsZCB0byBjcmVhdGUKLSAgICAgKiBhIHNlcmlhbGl6ZWQgcGFja2V0LiAgSWYgbmVjZXNzYXJ5LCBzZXQgc29tZSBvZiB0aGUgcGR1IGRhdGEgZnJvbSB0aGUKLSAgICAgKiBzZXNzaW9uIGRlZmF1bHRzLiAgQWRkIGEgcmVxdWVzdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGR1IHRvIHRoZSBsaXN0Ci0gICAgICogb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgb24gdGhpcyBzZXNzaW9uLCB0aGVuIHNlbmQgdGhlIHBkdS4KLSAgICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0IGlkIG9mIHRoZSBnZW5lcmF0ZWQgcGFja2V0IGlmIGFwcGxpY2FibGUsIG90aGVyd2lzZSAxLgotICAgICAqIE9uIGFueSBlcnJvciwgMCBpcyByZXR1cm5lZC4KLSAgICAgKiBUaGUgcGR1IGlzIGZyZWVkIGJ5IHNubXBfc2VuZCgpIHVubGVzcyBhIGZhaWx1cmUgb2NjdXJlZC4KKyAgICAgKiBHZW5lcmFsIHB1cnBvc2UgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zLiBVc2UgdGhlc2UgZnVuY3Rpb25zIHRvCisgICAgICogYWxsb2NhdGUgbWVtb3J5IHRoYXQgbWF5IGJlIHJlYWxsb2NhdGVkIG9yIGZyZWVkIGJ5IHRoZSBOZXQtU05NUAorICAgICAqIGxpYnJhcnkgb3IgdG8gcmVhbGxvY2F0ZSBvciBmcmVlIG1lbW9yeSB0aGF0IGhhcyBiZWVuIGFsbG9jYXRlZCBieSB0aGUKKyAgICAgKiBOZXQtU05NUCBsaWJyYXJ5LCBhbmQgd2hlbiB3b3JraW5nIGluIGEgY29udGV4dCB3aGVyZSB0aGVyZSBpcyBtb3JlIHRoYW4KKyAgICAgKiBvbmUgaGVhcC4gRXhhbXBsZXMgYXJlOgorICAgICAqIC0gUGVybCBYU1VCJ3MuCisgICAgICogLSBNU1ZDIG9yIE1pbkdXIHdpdGggdGhlIE5ldC1TTk1QIGxpYnJhcnkgY29tcGlsZWQgYXMgYSBETEwgaW5zdGVhZCBvZgorICAgICAqICAgYSBzdGF0aWMgbGlicmFyeS4KICAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZW5kKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqKTsKLQotICAgIC8qCi0gICAgICogaW50IHNubXBfYXN5bmNfc2VuZChzZXNzaW9uLCBwZHUsIGNhbGxiYWNrLCBjYl9kYXRhKQotICAgICAqICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgICogICAgIG5ldHNubXBfcGR1ICAgICAgKnBkdTsKLSAgICAgKiAgICAgbmV0c25tcF9jYWxsYmFjayBjYWxsYmFjazsKLSAgICAgKiAgICAgdm9pZCAgICpjYl9kYXRhOwotICAgICAqCi0gICAgICogU2VuZHMgdGhlIGlucHV0IHBkdSBvbiB0aGUgc2Vzc2lvbiBhZnRlciBjYWxsaW5nIHNubXBfYnVpbGQgdG8gY3JlYXRlCi0gICAgICogYSBzZXJpYWxpemVkIHBhY2tldC4gIElmIG5lY2Vzc2FyeSwgc2V0IHNvbWUgb2YgdGhlIHBkdSBkYXRhIGZyb20gdGhlCi0gICAgICogc2Vzc2lvbiBkZWZhdWx0cy4gIEFkZCBhIHJlcXVlc3QgY29ycmVzcG9uZGluZyB0byB0aGlzIHBkdSB0byB0aGUgbGlzdAotICAgICAqIG9mIG91dHN0YW5kaW5nIHJlcXVlc3RzIG9uIHRoaXMgc2Vzc2lvbiBhbmQgc3RvcmUgY2FsbGJhY2sgYW5kIGRhdGEsCi0gICAgICogdGhlbiBzZW5kIHRoZSBwZHUuCi0gICAgICogUmV0dXJucyB0aGUgcmVxdWVzdCBpZCBvZiB0aGUgZ2VuZXJhdGVkIHBhY2tldCBpZiBhcHBsaWNhYmxlLCBvdGhlcndpc2UgMS4KLSAgICAgKiBPbiBhbnkgZXJyb3IsIDAgaXMgcmV0dXJuZWQuCi0gICAgICogVGhlIHBkdSBpcyBmcmVlZCBieSBzbm1wX3NlbmQoKSB1bmxlc3MgYSBmYWlsdXJlIG9jY3VyZWQuCi0gICAgICovCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfYXN5bmNfc2VuZChuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2ssIHZvaWQgKik7Ci0KLQotICAgIC8qCi0gICAgICogdm9pZCBzbm1wX3JlYWQoZmRzZXQpCi0gICAgICogICAgIGZkX3NldCAgKmZkc2V0OwotICAgICAqCi0gICAgICogQ2hlY2tzIHRvIHNlZSBpZiBhbnkgb2YgdGhlIGZkJ3Mgc2V0IGluIHRoZSBmZHNldCBiZWxvbmcgdG8KLSAgICAgKiBzbm1wLiAgRWFjaCBzb2NrZXQgd2l0aCBpdCdzIGZkIHNldCBoYXMgYSBwYWNrZXQgcmVhZCBmcm9tIGl0Ci0gICAgICogYW5kIHNubXBfcGFyc2UgaXMgY2FsbGVkIG9uIHRoZSBwYWNrZXQgcmVjZWl2ZWQuICBUaGUgcmVzdWx0aW5nIHBkdQotICAgICAqIGlzIHBhc3NlZCB0byB0aGUgY2FsbGJhY2sgcm91dGluZSBmb3IgdGhhdCBzZXNzaW9uLiAgSWYgdGhlIGNhbGxiYWNrCi0gICAgICogcm91dGluZSByZXR1cm5zIHN1Y2Nlc3NmdWxseSwgdGhlIHBkdSBhbmQgaXQncyByZXF1ZXN0IGFyZSBkZWxldGVkLgotICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3JlYWQoZmRfc2V0ICopOwotCi0KKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkICpuZXRzbm1wX21hbGxvYyhzaXplX3Qgc2l6ZSk7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCAqbmV0c25tcF9jYWxsb2Moc2l6ZV90IG5lbGVtLCBzaXplX3QgZWxzaXplKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkICpuZXRzbm1wX3JlYWxsb2Modm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CisgICAgTkVUU05NUF9JTVBPUlQgdm9pZCBuZXRzbm1wX2ZyZWUodm9pZCAqcHRyKTsKKyAgICBORVRTTk1QX0lNUE9SVCBjaGFyICpuZXRzbm1wX3N0cmR1cChjb25zdCBjaGFyICpzMSk7CiAKICAgICAvKgogICAgICAqIHZvaWQKQEAgLTYzNCw1NyArMjg4LDggQEAKICAgICAgKgogICAgICAqIEZyZWVzIHRoZSBwZHUgYW5kIGFueSBtYWxsb2MnZCBkYXRhIGFzc29jaWF0ZWQgd2l0aCBpdC4KICAgICAgKi8KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9mcmVlX3BkdShuZXRzbm1wX3BkdSAqKTsKIAotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsgICAgIC8qIGZyZWVzIGp1c3QgdGhpcyBvbmUgKi8KLQotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIpOyAgICAgLyogZnJlZXMgYWxsIGluIGxpc3QgKi8KLQotICAgIC8qCi0gICAgICogaW50IHNubXBfc2VsZWN0X2luZm8obnVtZmRzLCBmZHNldCwgdGltZW91dCwgYmxvY2spCi0gICAgICogaW50ICpudW1mZHM7Ci0gICAgICogZmRfc2V0ICAgKmZkc2V0OwotICAgICAqIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0OwotICAgICAqIGludCAqYmxvY2s7Ci0gICAgICoKLSAgICAgKiBSZXR1cm5zIGluZm8gYWJvdXQgd2hhdCBzbm1wIHJlcXVpcmVzIGZyb20gYSBzZWxlY3Qgc3RhdGVtZW50LgotICAgICAqIG51bWZkcyBpcyB0aGUgbnVtYmVyIG9mIGZkcyBpbiB0aGUgbGlzdCB0aGF0IGFyZSBzaWduaWZpY2FudC4KLSAgICAgKiBBbGwgZmlsZSBkZXNjcmlwdG9ycyBvcGVuZWQgZm9yIFNOTVAgYXJlIE9SJ2QgaW50byB0aGUgZmRzZXQuCi0gICAgICogSWYgYWN0aXZpdHkgb2NjdXJzIG9uIGFueSBvZiB0aGVzZSBmaWxlIGRlc2NyaXB0b3JzLCBzbm1wX3JlYWQKLSAgICAgKiBzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhhdCBmaWxlIGRlc2NyaXB0b3Igc2V0LgotICAgICAqCi0gICAgICogVGhlIHRpbWVvdXQgaXMgdGhlIGxhdGVzdCB0aW1lIHRoYXQgU05NUCBjYW4gd2FpdCBmb3IgYSB0aW1lb3V0LiAgVGhlCi0gICAgICogc2VsZWN0IHNob3VsZCBiZSBkb25lIHdpdGggdGhlIG1pbmltdW0gdGltZSBiZXR3ZWVuIHRpbWVvdXQgYW5kIGFueSBvdGhlcgotICAgICAqIHRpbWVvdXRzIG5lY2Vzc2FyeS4gIFRoaXMgc2hvdWxkIGJlIGNoZWNrZWQgdXBvbiBlYWNoIGludm9jYXRpb24gb2Ygc2VsZWN0LgotICAgICAqIElmIGEgdGltZW91dCBpcyByZWNlaXZlZCwgc25tcF90aW1lb3V0IHNob3VsZCBiZSBjYWxsZWQgdG8gY2hlY2sgaWYgdGhlCi0gICAgICogdGltZW91dCB3YXMgZm9yIFNOTVAuICAoc25tcF90aW1lb3V0IGlzIGlkZW1wb3RlbnQpCi0gICAgICoKLSAgICAgKiBCbG9jayBpcyAxIGlmIHRoZSBzZWxlY3QgaXMgcmVxdWVzdGVkIHRvIGJsb2NrIGluZGVmaW5pdGVseSwgcmF0aGVyIHRoYW4KLSAgICAgKiB0aW1lIG91dC4gIElmIGJsb2NrIGlzIGlucHV0IGFzIDEsIHRoZSB0aW1lb3V0IHZhbHVlIHdpbGwgYmUgdHJlYXRlZCBhcwotICAgICAqIHVuZGVmaW5lZCwgYnV0IGl0IG11c3QgYmUgYXZhaWxhYmxlIGZvciBzZXR0aW5nIGluIHNubXBfc2VsZWN0X2luZm8uICBPbgotICAgICAqIHJldHVybiwgaWYgYmxvY2sgaXMgdHJ1ZSwgdGhlIHZhbHVlIG9mIHRpbWVvdXQgd2lsbCBiZSB1bmRlZmluZWQuCi0gICAgICoKLSAgICAgKiBzbm1wX3NlbGVjdF9pbmZvIHJldHVybnMgdGhlIG51bWJlciBvZiBvcGVuIHNvY2tldHMuICAoaS5lLiBUaGUgbnVtYmVyCi0gICAgICogb2Ygc2Vzc2lvbnMgb3BlbikKLSAgICAgKi8KLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZWxlY3RfaW5mbyhpbnQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICopOwotCi0KLQotICAgIC8qCi0gICAgICogdm9pZCBzbm1wX3RpbWVvdXQoKTsKLSAgICAgKgotICAgICAqIHNubXBfdGltZW91dCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSB0aW1lb3V0IGZyb20gc25tcF9zZWxlY3RfaW5mbwotICAgICAqIGV4cGlyZXMsIGJ1dCBpdCBpcyBpZGVtcG90ZW50LCBzbyBzbm1wX3RpbWVvdXQgY2FuIGJlIHBvbGxlZCAocHJvYmFibHkgYQotICAgICAqIGNwdSBleHBlbnNpdmUgcHJvcG9zaXRpb24pLiAgc25tcF90aW1lb3V0IGNoZWNrcyB0byBzZWUgaWYgYW55IG9mIHRoZQotICAgICAqIHNlc3Npb25zIGhhdmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCB0aGF0IGhhcyB0aW1lZCBvdXQuICBJZiBpdCBmaW5kcyBvbmUKLSAgICAgKiAob3IgbW9yZSksIGFuZCB0aGF0IHBkdSBoYXMgbW9yZSByZXRyaWVzIGF2YWlsYWJsZSwgYSBuZXcgcGFja2V0IGlzIGZvcm1lZAotICAgICAqIGZyb20gdGhlIHBkdSBhbmQgaXMgcmVzZW50LiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgcmV0cmllcyBhdmFpbGFibGUsIHRoZQotICAgICAqIGNhbGxiYWNrIGZvciB0aGUgc2Vzc2lvbiBpcyB1c2VkIHRvIGFsZXJ0IHRoZSB1c2VyIG9mIHRoZSB0aW1lb3V0LgotICAgICAqLwotCi0gICAgdm9pZCAgICAgICAgICAgIHNubXBfdGltZW91dCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVCB2b2lkIHNubXBfZnJlZV92YXJfaW50ZXJuYWxzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsgICAgIC8qIGZyZWVzIGNvbnRlbnRzIG9ubHkgKi8KIAogCiAgICAgLyoKQEAgLTcyNiwyMCArMzMxLDI3IEBACiAKICAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF9tc2dpZCh2b2lkKTsKICAgICBsb25nICAgICAgICAgICAgc25tcF9nZXRfbmV4dF9yZXFpZCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X3Nlc3NpZCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGxvbmcgICAgICAgICAgICBzbm1wX2dldF9uZXh0X3RyYW5zaWQodm9pZCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX29pZF9jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICAgaW50ICAgICAgICAgICAgIHNubXBfb2lkX25jb21wYXJlKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWR0cmVlX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9vaWRzdWJ0cmVlX2NvbXBhcmUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9vaWRfY29tcGFyZV9sbChjb25zdCBvaWQgKiBpbl9uYW1lMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbjIsIHNpemVfdCAqb2ZmcHQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2VxdWFscyhjb25zdCBvaWQgKiwgc2l6ZV90LCBjb25zdCBvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX3RyZWVfZXF1YWxzKGNvbnN0IG9pZCAqLCBzaXplX3QsIGNvbnN0IG9pZCAqLApAQCAtNzQ3LDggKzM1OSwxMCBAQAogICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb2lkX2lzX3N1YnRyZWUoY29uc3Qgb2lkICosIHNpemVfdCwgY29uc3Qgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX29pZF9maW5kX3ByZWZpeChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wKGNvbnN0IGNoYXIgKik7CiAgICAgdV9jaGFyICAgICAgICAgKnNubXBfcGR1X2J1aWxkKG5ldHNubXBfcGR1ICosIHVfY2hhciAqLCBzaXplX3QgKik7CiAjaWZkZWYgTkVUU05NUF9VU0VfUkVWRVJTRV9BU05FTkNPRElORwpAQCAtNzcyLDI3ICszODYsNDAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogbGVuZ3RoKTsKICAgICB1X2NoYXIgICAgICAgICAqc25tcHYzX3Njb3BlZFBEVV9wYXJzZShuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBjcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW5ndGgpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc3RvcmVfbmVlZGVkKGNvbnN0IGNoYXIgKnR5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc3RvcmVfaWZfbmVlZGVkKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfc3RvcmUoY29uc3QgY2hhciAqdHlwZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9zaHV0ZG93bihjb25zdCBjaGFyICp0eXBlKTsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfcGR1X2FkZF92YXJpYWJsZShuZXRzbm1wX3BkdSAqLCBjb25zdCBvaWQgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QsIHVfY2hhciwgY29uc3QgdV9jaGFyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90KTsKLSAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUobmV0c25tcF92YXJpYWJsZV9saXN0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqIHZhcmxpc3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHZhbHVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2FkZF92YXIobmV0c25tcF9wZHUgKiwgY29uc3Qgb2lkICosIHNpemVfdCwgY2hhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBvaWQgICAgICAgICAgICAqc25tcF9kdXBsaWNhdGVfb2JqaWQoY29uc3Qgb2lkICogb2JqVG9Db3B5LCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTCiAgICAgdV9pbnQgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhpbnQgd2hpY2gpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9pbnQgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieShpbnQgd2hpY2gsIGludCBjb3VudCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2ludCAgICAgICAgICAgc25tcF9nZXRfc3RhdGlzdGljKGludCB3aGljaCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfaW5pdF9zdGF0aXN0aWNzKHZvaWQpOworI2Vsc2UgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTICovCisKKy8qIGFsbG93IGNvZGUgdG8gY29udGludWUgcmVmZXJlbmNpbmcgQVBJIGV2ZW4gaWYgc3RhdGlzdGljcyBhcmUgcmVtb3ZlZCAqLworI2RlZmluZSBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoWCkKKyNkZWZpbmUgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KFgsWSkKKyNkZWZpbmUgc25tcF9pbml0X3N0YXRpc3RpY3MoKQorCisjZW5kaWYKKwogICAgIGludCAgICAgICAgICAgICBjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbik7Ci0gICAgaW50IHNubXBfZ2V0X2ZkX2Zvcl9zZXNzaW9uKHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNlc3NwKTsKKyAgICBpbnQgc25tcHYzX3Byb2JlX2NvbnRleHRFbmdpbmVJRF9yZmM1MzQzKHZvaWQgKnNscCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbik7CiAKICAgICAvKgogICAgICAqIE5ldyByZS1hbGxvY2F0aW5nIHJldmVyc2UgZW5jb2RpbmcgZnVuY3Rpb25zLiAgCkBAIC04MTEsMTAgKzQzOCwxMyBAQAogCiAKIAorc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3M7CisKICAgICAvKgogICAgICAqIEV4dGVuZGVkIG9wZW47IGZwcmVfcGFyc2UgaGFzIGNoYW5nZWQuICAKICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX29wZW5fZXgobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QKQEAgLTgzOCw3MCArNDY4LDM2IEBACiAgICAgICogU2VlIHNubXBfZGVidWcuaCBhbmQgc25tcF9kZWJ1Zy5jIGluc3RlYWQuCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2dldF9kb19kZWJ1Z2dpbmcodm9pZCk7CiAKIAotICAgIC8qCi0gICAgICogc25tcF9lcnJvciAtIHJldHVybiBlcnJvciBkYXRhCi0gICAgICogSW5wdXRzIDogIGFkZHJlc3Mgb2YgZXJybm8sIGFkZHJlc3Mgb2Ygc25tcF9lcnJubywgYWRkcmVzcyBvZiBzdHJpbmcKLSAgICAgKiBDYWxsZXIgbXVzdCBmcmVlIHRoZSBzdHJpbmcgcmV0dXJuZWQgYWZ0ZXIgdXNlLgotICAgICAqLwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2Vycm9yKG5ldHNubXBfc2Vzc2lvbiAqLCBpbnQgKiwgaW50ICosIGNoYXIgKiopOwotICAgIC8qCi0gICAgICogc2luZ2xlIHNlc3Npb24gQVBJLgotICAgICAqCi0gICAgICogVGhlc2UgZnVuY3Rpb25zIHBlcmZvcm0gc2ltaWxhciBhY3Rpb25zIGFzIHNubXBfWFggZnVuY3Rpb25zLAotICAgICAqIGJ1dCBvcGVyYXRlIG9uIGEgc2luZ2xlIHNlc3Npb24gb25seS4KLSAgICAgKgotICAgICAqIFN5bm9wc2lzOgotICAgICAKLSAgICAgdm9pZCAqIHNlc3NwOwotICAgICBuZXRzbm1wX3Nlc3Npb24gc2Vzc2lvbiwgKnNzOwotICAgICBuZXRzbm1wX3BkdSAqcGR1LCAqcmVzcG9uc2U7Ci0gICAgIAotICAgICBzbm1wX3Nlc3NfaW5pdCgmc2Vzc2lvbik7Ci0gICAgIHNlc3Npb24ucmV0cmllcyA9IC4uLgotICAgICBzZXNzaW9uLnJlbW90ZV9wb3J0ID0gLi4uCi0gICAgIHNlc3NwID0gc25tcF9zZXNzX29wZW4oJnNlc3Npb24pOwotICAgICBzcyA9IHNubXBfc2Vzc19zZXNzaW9uKHNlc3NwKTsKLSAgICAgaWYgKHNzID09IE5VTEwpCi0gICAgIGV4aXQoMSk7Ci0gICAgIC4uLgotICAgICBpZiAoc3MtPmNvbW11bml0eSkgZnJlZShzcy0+Y29tbXVuaXR5KTsKLSAgICAgc3MtPmNvbW11bml0eSA9IHN0cmR1cChnYXRld2F5KTsKLSAgICAgc3MtPmNvbW11bml0eV9sZW4gPSBzdHJsZW4oZ2F0ZXdheSk7Ci0gICAgIC4uLgotICAgICBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc2Vzc3AsIHBkdSwgJnJlc3BvbnNlKTsKLSAgICAgLi4uCi0gICAgIHNubXBfc2Vzc19jbG9zZShzZXNzcCk7Ci0gICAgIAotICAgICAqIFNlZSBhbHNvOgotICAgICAqIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSwgaW4gc25tcF9jbGllbnQuaC4KLSAgICAgCi0gICAgICogTm90ZXM6Ci0gICAgICogIDEuIEludm9rZSBzbm1wX3Nlc3Nfc2Vzc2lvbiBhZnRlciBzbm1wX3Nlc3Nfb3Blbi4KLSAgICAgKiAgMi4gc25tcF9zZXNzX3Nlc3Npb24gcmV0dXJuIHZhbHVlIGlzIGFuIG9wYXF1ZSBwb2ludGVyLgotICAgICAqICAzLiBEbyBOT1QgZnJlZSBtZW1vcnkgcmV0dXJuZWQgYnkgc25tcF9zZXNzX3Nlc3Npb24uCi0gICAgICogIDQuIFJlcGxhY2Ugc25tcF9zZW5kKHNzLHBkdSkgd2l0aCBzbm1wX3Nlc3Nfc2VuZChzZXNzcCxwZHUpCi0gICAgICovCi0KLSAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX2luaXQobmV0c25tcF9zZXNzaW9uICopOwotICAgIHZvaWQgICAgICAgICAgICpzbm1wX3Nlc3Nfb3BlbihuZXRzbm1wX3Nlc3Npb24gKik7Ci0gICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19wb2ludGVyKG5ldHNubXBfc2Vzc2lvbiAqKTsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfc2Vzc19zZXNzaW9uKHZvaWQgKik7CiAgICAgTkVUU05NUF9JTVBPUlQKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCh2b2lkICopOworICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3Nlc3NfbG9nX2Vycm9yKGludCBwcmlvcml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3N0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzcyk7CisgICAgY29uc3QgY2hhciAqICAgIHNubXBfcGR1X3R5cGUoaW50IHR5cGUpOwogCiAgICAgLyoKICAgICAgKiBSZXR1cm4gdGhlIG5ldHNubXBfdHJhbnNwb3J0IHN0cnVjdHVyZSBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIG9wYXF1ZQogICAgICAqIHBvaW50ZXIuICAKICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnNubXBfc2Vzc190cmFuc3BvcnQodm9pZCAqKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3RyYW5zcG9ydF9zZXQodm9pZCAqLAogCQkJCQkgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKik7CiAKKyAgICBORVRTTk1QX0lNUE9SVCBpbnQKKyAgICBuZXRzbm1wX3Nlc3NfY29uZmlnX3RyYW5zcG9ydChzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfcyAqdHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCk7CisKKyAgICBORVRTTk1QX0lNUE9SVCBpbnQKKyAgICBuZXRzbm1wX3Nlc3NfY29uZmlnX2FuZF9vcGVuX3RyYW5zcG9ydChuZXRzbm1wX3Nlc3Npb24gKmluX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCk7CisKICAgICAvKgogICAgICAqIEVYVEVOREVEIFNFU1NJT04gQVBJIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKICAgICAgKiAKQEAgLTk1MCw2ICs1NDYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmZwb3N0X3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpKTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF9zZXNzaW9uICpzbm1wX2FkZChuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCkBAIC05NTcsNiArNTU0LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLCB2b2lkICosIGludCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBpbnQpKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9hZGRfZnVsbChuZXRzbm1wX3Nlc3Npb24gKiBpbl9zZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqdHJhbnNwb3J0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCkBAIC05ODEsMjggKzU3OSw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiwgdm9pZCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCkKICAgICAgICAgKTsKLQotICAgIC8qCi0gICAgICogdXNlIHJldHVybiB2YWx1ZSBmcm9tIHNubXBfc2Vzc19vcGVuIGFzIHZvaWQgKiBwYXJhbWV0ZXIgCi0gICAgICovCi0KLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbmQodm9pZCAqLCBuZXRzbm1wX3BkdSAqKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX2FzeW5jX3NlbmQodm9pZCAqLCBuZXRzbm1wX3BkdSAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrLCB2b2lkICopOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8odm9pZCAqLCBpbnQgKiwgZmRfc2V0ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQgKik7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19yZWFkKHZvaWQgKiwgZmRfc2V0ICopOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfdGltZW91dCh2b2lkICopOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uodm9pZCAqKTsKLQotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfZXJyb3Iodm9pZCAqLCBpbnQgKiwgaW50ICosIGNoYXIgKiopOwotICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3Nlc3NfbG9nX2Vycm9yKGludCBwcmlvcml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpwcm9nX3N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzcyk7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXBfc2Vzc19wZXJyb3IoY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc3MpOwotICAgIGNvbnN0IGNoYXIgKiAgICBzbm1wX3BkdV90eXBlKGludCB0eXBlKTsKLQogICAgIC8qCiAgICAgICogZW5kIHNpbmdsZSBzZXNzaW9uIEFQSSAKICAgICAgKi8KQEAgLTEwODgsNyArNjY0LDQ4IEBACiAjZGVmaW5lICBTVEFUX1RBUkdFVF9TVEFUU19TVEFSVCAgICAgICAgICAgICBTVEFUX1NOTVBVTkFWQUlMQUJMRUNPTlRFWFRTCiAjZGVmaW5lICBTVEFUX1RBUkdFVF9TVEFUU19FTkQgICAgICAgICAgICAgICBTVEFUX1NOTVBVTktOT1dOQ09OVEVYVFMKIAotI2RlZmluZSAgTUFYX1NUQVRTICAgICAgICAgICAgICAgICAgICAgICAgICAgNDMKKyAgICAvKgorICAgICAqIFRTTSBjb3VudGVycworICAgICAqLworI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURDQUNIRVMgICAgICAgICAgICAgNDMKKyNkZWZpbmUgIFNUQVRfVFNNX1NOTVBUU01JTkFERVFVQVRFU0VDVVJJVFlMRVZFTFMgIDQ0CisjZGVmaW5lICBTVEFUX1RTTV9TTk1QVFNNVU5LTk9XTlBSRUZJWEVTICAgICAgICAgICA0NQorI2RlZmluZSAgU1RBVF9UU01fU05NUFRTTUlOVkFMSURQUkVGSVhFUyAgICAgICAgICAgNDYKKyNkZWZpbmUgIFNUQVRfVFNNX1NUQVRTX1NUQVJUICAgICAgICAgICAgICAgICBTVEFUX1RTTV9TTk1QVFNNSU5WQUxJRENBQ0hFUworI2RlZmluZSAgU1RBVF9UU01fU1RBVFNfRU5EICAgICAgICAgICAgICAgICAgIFNUQVRfVFNNX1NOTVBUU01JTlZBTElEUFJFRklYRVMKKworICAgIC8qCisgICAgICogVExTVE0gY291bnRlcnMKKyAgICAgKi8KKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5TICAgICAgICAgICAgICAgICAgICAgIDQ3CisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05DTElFTlRDTE9TRVMgICAgICAgICAgICAgICA0OAorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyAgICAgICAgICAgICAgICAgNDkKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkFDQ0VQVFMgICAgICAgICAgICAgICAgICAgIDUwCisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05TRVJWRVJDTE9TRVMgICAgICAgICAgICAgICA1MQorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OTk9TRVNTSU9OUyAgICAgICAgICAgICAgICAgNTIKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDTElFTlRDRVJUSUZJQ0FURVMgIDUzCisjZGVmaW5lICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05VTktOT1dOU0VSVkVSQ0VSVElGSUNBVEUgICA1NAorI2RlZmluZSAgU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRFNFUlZFUkNFUlRJRklDQVRFUyAgNTUKKyNkZWZpbmUgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMgICAgICAgICAgICAgIDU2CisKKyNkZWZpbmUgIFNUQVRfVExTVE1fU1RBVFNfU1RBUlQgICAgICAgICAgICAgICAgIFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5TCisjZGVmaW5lICBTVEFUX1RMU1RNX1NUQVRTX0VORCAgICAgICAgICBTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05JTlZBTElEQ0FDSEVTCisKKyAgICAvKiB0aGlzIHByZXZpb3VzbHkgd2FzIGVuZCsxOyBkb24ndCBrbm93IHdoeSB0aGUgKzEgaXMgbmVlZGVkOworICAgICAgIFhYWDogY2hlY2sgdGhlIGNvZGUgKi8KKyNkZWZpbmUgIE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMgICAgICAgICAgICAgIChTVEFUX1RMU1RNX1NUQVRTX0VORCsxKQorLyoqIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5ICovCisjZGVmaW5lIE1BWF9TVEFUUyBORVRTTk1QX1NUQVRfTUFYX1NUQVRTCisKKyAgICAvKgorICAgICAqIEludGVybmFsOiBUaGUgbGlzdCBvZiBhY3RpdmUvb3BlbiBzZXNzaW9ucy4KKyAgICAgKi8KKyAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0IHsKKyAgICAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpuZXh0OworICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKKyAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0OworICAgICAgIHN0cnVjdCBzbm1wX2ludGVybmFsX3Nlc3Npb24gKmludGVybmFsOworICAgIH07CiAKICNpZmRlZiBfX2NwbHVzcGx1cwogfQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAppbmRleCA1NzhiNmNlLi44ZjUyYTY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaApAQCAtMjMsNDIgKzIzLDEwNSBAQAogIyAgZW5kaWYgLyogX19TVERDX18gKi8KICNlbmRpZiAvKiBfX1NUUklORyAqLwogCi0jZGVmaW5lIG5ldHNubXBfc3RhdGljX2Fzc2VydCh4KSBcCi0gICAgZG8geyBzd2l0Y2goMCkgeyBjYXNlICh4KTogY2FzZSAwOiA7IH0gfSB3aGlsZSgwKQotCi0KIC8qCiAgKiBhbHdheXMgdXNlIGFzc2VydCBpZiByZXF1ZXN0ZWQKICAqLwogI2lmZGVmIE5FVFNOTVBfVVNFX0FTU0VSVAogLyogICB2b2lkIG5ldHNubXBfYXNzZXJ0KCBpbnQgKTsqLwogIyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydCh4KSAgYXNzZXJ0KCB4ICkKKyMgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHgsIHkpICBhc3NlcnQoIHggKQorIyAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oeCwgeSwgeikgIGFzc2VydCggeCApCiAjZWxzZQogLyoKICAqICBpZiBhc3NlcnRzIHdlcmVuJ3QgcmVxdWVzdGVkLCBqdXN0IGxvZywgdW5sZXNzIE5FVFNOTVBfTk9fREVCVUdHSU5HIHNwZWNpZmllZAogICovCiAjICAgaWZuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCi0jICAgICAgaWZkZWYgIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQKLSMgICAgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnQoeCkgIGRvIHsgXAotICAgICAgICAgICAgICAgICBpZiAoIHggKSBcCi0gICAgICAgICAgICAgICAgICAgIDsgXAotICAgICAgICAgICAgICAgICBlbHNlIFwKLSAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9hc3NlcnQgJXMgZmFpbGVkICVzOiVkICVzKClcbiIsIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19TVFJJTkcoeCksX19GSUxFX18sX19MSU5FX18sX19GVU5DVElPTl9fKTsgXAotICAgICAgICAgICAgICB9d2hpbGUoMCkKKyMgICAgICBpZmRlZiAgTkVUU05NUF9GVU5DVElPTgorIyAgICAgICAgICBkZWZpbmUgTkVUU05NUF9GVU5DX0ZNVCAiICVzKClcbiIKKyMgICAgICAgICAgZGVmaW5lIE5FVFNOTVBfRlVOQ19QQVJBTSBORVRTTk1QX0ZVTkNUSU9OCiAjICAgICAgZWxzZQotIyAgICAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydCh4KSAgZG8geyBcCi0gICAgICAgICAgICAgICAgIGlmKCB4IClcCi0gICAgICAgICAgICAgICAgICAgIDsgXAotICAgICAgICAgICAgICAgICBlbHNlIFwKLSAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwibmV0c25tcF9hc3NlcnQgJXMgZmFpbGVkICVzOiVkXG4iLCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HKHgpLF9fRklMRV9fLF9fTElORV9fKTsgXAotICAgICAgICAgICAgICB9d2hpbGUoMCkKKyMgICAgICAgICAgZGVmaW5lIE5FVFNOTVBfRlVOQ19GTVQgIiVjIgorIyAgICAgICAgICBkZWZpbmUgTkVUU05NUF9GVU5DX1BBUkFNICdcbicKICMgICAgICBlbmRpZgorIworIyAgICAgIGRlZmluZSBuZXRzbm1wX2Fzc2VydCh4KSAgZG8geyBcCisgICAgICAgICAgICAgIGlmICggeCApIFwKKyAgICAgICAgICAgICAgICAgOyBcCisgICAgICAgICAgICAgIGVsc2UgXAorICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICJuZXRzbm1wX2Fzc2VydCAlcyBmYWlsZWQgJXM6JWQiIE5FVFNOTVBfRlVOQ19GTVQsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgX19TVFJJTkcoeCksX19GSUxFX18sX19MSU5FX18sIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GVU5DX1BBUkFNKTsgXAorICAgICAgICAgICB9d2hpbGUoMCkKKyMgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHgsIHkpICBkbyB7ICAgICAgICBcCisgICAgICAgICAgICAgIGlmICggeCApIFwKKyAgICAgICAgICAgICAgICAgOyBcCisgICAgICAgICAgICAgIGVsc2UgeyBcCisgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIm5ldHNubXBfYXNzZXJ0ICVzIGZhaWxlZCAlczolZCIgTkVUU05NUF9GVU5DX0ZNVCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBfX1NUUklORyh4KSxfX0ZJTEVfXyxfX0xJTkVfXywgXAorICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0ZVTkNfUEFSQU0pOyBcCisgICAgICAgICAgICAgICAgIHJldHVybiB5OyBcCisgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICB9d2hpbGUoMCkKKyMgICAgICBkZWZpbmUgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKHgsIHksIHopICBkbyB7ICAgICAgIFwKKyAgICAgICAgICAgICAgaWYgKCB4ICkgXAorICAgICAgICAgICAgICAgICA7IFwKKyAgICAgICAgICAgICAgZWxzZSB7IFwKKyAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAibmV0c25tcF9hc3NlcnQgJXMgZmFpbGVkICVzOiVkIiBORVRTTk1QX0ZVTkNfRk1ULCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIF9fU1RSSU5HKHgpLF9fRklMRV9fLF9fTElORV9fLCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRlVOQ19QQVJBTSk7IFwKKyAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgeSk7IFwKKyAgICAgICAgICAgICAgICAgcmV0dXJuIHo7IFwKKyAgICAgICAgICAgICAgfSBcCisgICAgICAgICAgIH13aGlsZSgwKQogIyAgIGVsc2UgLyogTk8gREVCVUdHSU5HICovCiAjICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0KHgpCisjICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih4LCB5KSAgZG8geyAgICAgICAgXAorICAgICAgICAgICAgICAgICBpZiAoIHggKSBcCisgICAgICAgICAgICAgICAgICAgIDsgXAorICAgICAgICAgICAgICAgICBlbHNlIHsgXAorICAgICAgICAgICAgICAgICAgICByZXR1cm4geTsgXAorICAgICAgICAgICAgICAgICB9IFwKKyAgICAgICAgICAgICAgfXdoaWxlKDApCisjICAgICAgZGVmaW5lIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybih4LCB5LCB6KSAgZG8geyAgICAgICBcCisgICAgICAgICAgICAgICAgIGlmICggeCApIFwKKyAgICAgICAgICAgICAgICAgICAgOyBcCisgICAgICAgICAgICAgICAgIGVsc2UgeyBcCisgICAgICAgICAgICAgICAgICAgIHJldHVybiB6OyBcCisgICAgICAgICAgICAgICAgIH0gXAorICAgICAgICAgICAgICB9d2hpbGUoMCkKICMgICBlbmRpZiAvKiBOTyBERUJVR0dJTkcgKi8KICNlbmRpZiAvKiBub3QgTkVUU05NUF9VU0VfQVNTRVJUICovCiAKIAorI2RlZmluZSBuZXRzbm1wX3N0YXRpY19hc3NlcnQoeCkgXAorICAgIGRvIHsgc3dpdGNoKDApIHsgY2FzZSAoeCk6IGNhc2UgMDogOyB9IH0gd2hpbGUoMCkKKworCisvKgorICogIEVYUEVSSU1FTlRBTCBtYWNyb3MuIE1heSBiZSByZW1vdmVkIHdpdGhvdXQgd2FybmluZyBpbiBmdXR1cmUKKyAqIHJlbGVhc2VzLiBVc2UgYXQgeW91ciBvd24gcmlzaworICoKKyAqIFRoZSBzZXJpZXMgb2YgdXBwZXJjYXNlIGxldHRlcnMgYXQgb3IgbmVhciB0aGUgZW5kIG9mIHRoZXNlIG1hY3JvcyBnaXZlCisgKiBhbiBpbmRpY2F0aW9uIG9mIHdoYXQgdGhleSBkby4gVGhlIGxldHRlcnMgdXNlZCBhcmU6CisgKgorICogICBMICA6IGxvZyBhIG1lc3NhZ2UKKyAqICAgUk4gOiByZXR1cm4gTlVMTAorICogICBSRSA6IHJldHVybiBhIHNwZWNpZmljIGhhcmRjb2RlZCBlcnJvciBhcHByb3ByaWF0ZSBmb3IgdGhlIGNvbmRpdGlvbgorICogICBSViA6IHJldHVybiB1c2VyIHNwZWNpZmllZCB2YWx1ZQorICoKKyAqLworI2RlZmluZSBuZXRzbm1wX21hbGxvY19jaGVja19MUk4ocHRyKSAgICAgICAgICAgXAorICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybiggKHB0cikgIT0gTlVMTCwgTlVMTCkKKyNkZWZpbmUgbmV0c25tcF9tYWxsb2NfY2hlY2tfTFJFKHB0cikgICAgICAgICAgIFwKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oIChwdHIpICE9IE5VTEwsIFNOTVBFUlJfTUFMTE9DKQorI2RlZmluZSBuZXRzbm1wX21hbGxvY19jaGVja19MUlYocHRyLCB2YWwpICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKCAocHRyKSAhPSBOVUxMLCB2YWwpCisKKyNkZWZpbmUgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHB0ciwgdmFsICkgXAorICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybiggKHB0cikgIT0gTlVMTCwgdmFsKQorCisKICNlbmRpZiAvKiBTTk1QX0FTU0VSVF9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCmluZGV4IDk5ZTc1YjUuLmVhNTRlN2QgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCkBAIC0yNiw2ICsyNiwxMiBAQAogI2lmbmRlZiBTTk1QX0NMSUVOVF9ICiAjZGVmaW5lIFNOTVBfQ0xJRU5UX0gKIAorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdmFyYmluZF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9wZHVfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CisKICNpZmRlZiBfX2NwbHVzcGx1cwogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKQEAgLTQ4LDYyICs1NCwxMTIgQEAKICAgICAgICAgbmV0c25tcF9wZHUgICAgKnBkdTsKICAgICB9OwogCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl92YWx1ZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmFtZV9sZW5ndGgpOwotICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUobmV0c25tcF92YXJpYWJsZV9saXN0ICoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3ZhciwgdV9jaGFyIHR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICogdmFsX3N0ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCB2YWxfbGVuKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIobmV0c25tcF92YXJpYWJsZV9saXN0ICogbmV3dmFyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgbG9uZyB2YWwpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfcmVwbGFjZV92YXJfdHlwZXMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciBvbGRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgbmV3X3R5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcF9yZXNldF92YXJfdHlwZXMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmJsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgbmV3X3R5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGNvdW50X3ZhcmJpbmRzKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcl9wdHIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGNvdW50X3ZhcmJpbmRzX29mX3R5cGUobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyX3B0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSk7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpmaW5kX3ZhcmJpbmRfb2ZfdHlwZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyX3B0ciwgdV9jaGFyIHR5cGUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpmaW5kX3ZhcmJpbmRfaW5fbGlzdChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZibGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZCAqbmFtZSwgc2l6ZV90IGxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBsZW4pOwogCi0gICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX2FkZF9udWxsX3ZhcihuZXRzbm1wX3BkdSAqLCBjb25zdCBvaWQgKiwgc2l6ZV90KTsKLSAgICBuZXRzbm1wX3BkdSAgICAqc25tcF9wZHVfY3JlYXRlKGludCk7Ci0gICAgbmV0c25tcF9wZHUgICAgKnNubXBfZml4X3BkdShuZXRzbm1wX3BkdSAqLCBpbnQpOwotICAgIG5ldHNubXBfcGR1ICAgICpzbm1wX2Nsb25lX3BkdShuZXRzbm1wX3BkdSAqKTsKICAgICBuZXRzbm1wX3BkdSAgICAqc25tcF9zcGxpdF9wZHUobmV0c25tcF9wZHUgKiwgaW50IHNraXBDb3VudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvcHlDb3VudCk7CiAKICAgICB1bnNpZ25lZCBsb25nICAgc25tcF92YXJiaW5kX2xlbihuZXRzbm1wX3BkdSAqcGR1KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX2Nsb25lX3ZhcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICopOwotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF9jbG9uZV92YXJiaW5kKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKTsKLSAgICBjb25zdCBjaGFyICAgICAqc25tcF9lcnJzdHJpbmcoaW50KTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9zeW5jaF9yZXNwb25zZShuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9zeW5jaF9yZXNwb25zZV9jYihuZXRzbm1wX3Nlc3Npb24gKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCBuZXRzbm1wX3BkdSAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2NhbGxiYWNrKTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9uZV9tZW0odm9pZCAqKiwgdm9pZCAqLCB1bnNpZ25lZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9uZV9tZW0odm9pZCAqKiwgY29uc3Qgdm9pZCAqLCB1bnNpZ25lZCk7CiAKLSAgICAvKgotICAgICAqIHNpbmdsZSBzZXNzaW9uIEFQSSAtIHNlZSBzbm1wX2FwaS5oIGZvciBmdWxsIGRldGFpbHMgCi0gICAgICovCi0gICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSh2b2lkICosIG5ldHNubXBfcGR1ICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKik7CiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgICBuZXRzbm1wX3F1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICopOworTkVUU05NUF9JTVBPUlQKK25ldHNubXBfc2Vzc2lvbiAqIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbl91bmNoZWNrZWQoIHZvaWQgKTsKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3Nlc3Npb24gKiBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24oIHZvaWQgKTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgbmV0c25tcF9xdWVyeV9nZXQoICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiwgbmV0c25tcF9zZXNzaW9uICopOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X2dldG5leHQoIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqLCBuZXRzbm1wX3Nlc3Npb24gKik7CitORVRTTk1QX0lNUE9SVAogaW50IG5ldHNubXBfcXVlcnlfd2FsayggICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICosIG5ldHNubXBfc2Vzc2lvbiAqKTsKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitORVRTTk1QX0lNUE9SVAogaW50IG5ldHNubXBfcXVlcnlfc2V0KCAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICosIG5ldHNubXBfc2Vzc2lvbiAqKTsKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN0YXRlIG1hY2hpbmUKKyAqCisgKi8KKyAgICAvKiogZm9yd2FyZCBkZWNsYXJlICovCisgICAgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwX3M7CisgICAgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dF9zOworCisgICAgLyoqIHN0YXRlIG1hY2hpbmUgcHJvY2VzcyAqLworICAgIHR5cGVkZWYgaW50IChuZXRzbm1wX3N0YXRlX21hY2hpbmVfZnVuYykoc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dF9zICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcF9zICpzdGVwKTsKKworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwX3MgeworCisgICAgICAgIGNvbnN0IGNoYXIgICAqbmFtZTsgLyogcHJpbWFyaWx5IGZvciBsb2dnaW5nL2RlYnVnZ2luZyAqLworICAgICAgICB1X2ludCAgICAgICAgIHNtX2ZsYWdzOworICAgICAgICAKKyAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2Z1bmMgKnJ1bjsKKyAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VsdDsgLyogcmV0dXJuIGNvZGUgZm9yIHRoaXMgc3RlcCAqLworICAgICAgICAKKyAgICAgICAgCisgICAgICAgIHN0cnVjdCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcF9zICpvbl9zdWNjZXNzOworICAgICAgICBzdHJ1Y3QgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXBfcyAqb25fZXJyb3I7CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiB1c2VyIGZpZWxkcyAobm90IHRvdWNoZWQgYnkgc3RhdGUgbWFjaGluZSBmdW5jdGlvbnMpCisgICAgICAgICAqLworICAgICAgICB1X2ludCAgICAgICAgIGZsYWdzOworICAgICAgICB2b2lkICAgICAgICAgKnN0ZXBfY29udGV4dDsKKyAgICAgICAgCisgICAgfSBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcDsKKworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dF9zIHsKKyAgICAgICAgY29uc3QgY2hhciAgICAgICAgICAgICAgICAgICpuYW1lOworICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZXBzX3NvX2ZhcjsKKyAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgICpzdGVwczsKKyAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgICpjbGVhbnVwOworICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAgKmxhc3RfcnVuOworCisgICAgICAgIC8qCisgICAgICAgICAqIHVzZXIgZmllbGRzIChub3QgdG91Y2hlZCBieSBzdGF0ZSBtYWNoaW5lIGZ1bmN0aW9ucykKKyAgICAgICAgICovCisgICAgICAgIHZvaWQgICAgICAgICAqaW5wdXRfY29udGV4dDsKKworICAgIH0gbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0OworCisKKyAgICBORVRTTk1QX0lNUE9SVCBpbnQKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfcnVuKCBuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0ICk7CisKKyAgICBORVRTTk1QX0lNUE9SVCBpbnQKKyAgICBuZXRzbm1wX3Jvd19jcmVhdGUobmV0c25tcF9zZXNzaW9uICpzZXNzLCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsCisgICAgICAgICAgICAgICAgICAgICAgIGludCByb3dfc3RhdHVzX2luZGV4KTsKKwogCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCmluZGV4IDllM2Q1YTkuLmEzOTY5ZjYgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaApAQCAtMTUsMzYgKzE1LDYwIEBACiAgICAgICovCiAKIAorI2lmICFkZWZpbmVkKF9fR05VQ19fKSB8fCBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KQorI2RlZmluZSBORVRTTk1QX0FUVFJJQlVURV9GT1JNQVQodHlwZSwgZm9ybWF0QXJnLCBmaXJzdEFyZykKKyNlbHNlCisjZGVmaW5lIE5FVFNOTVBfQVRUUklCVVRFX0ZPUk1BVCh0eXBlLCBmb3JtYXRBcmcsIGZpcnN0QXJnKSBcCisgIF9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oIF9fICMjIHR5cGUgIyMgX18sIGZvcm1hdEFyZywgZmlyc3RBcmcgKSkpCisjZW5kaWYKKwogICAgIC8qCiAgICAgICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBub3QgYmUgdXNlZCwgaWYgYXQgYWxsIHBvc3NpYmxlLiAgSW5zdGVhZCwgdXNlCiAgICAgICogdGhlIG1hY3JvcyBiZWxvdy4gCiAgICAgICovCi0jaWYgSEFWRV9TVERBUkdfSAotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQVRUUklCVVRFX0ZPUk1BVChwcmludGYsIDIsIDMpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNndG9rZW4oY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQVRUUklCVVRFX0ZPUk1BVChwcmludGYsIDIsIDMpOwogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z19jb21ib19uYyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4pOwotI2Vsc2UKLSAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2codmFfYWxpc3QpOwotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ3Rva2VuKHZhX2FsaXN0KTsKLSAgICB2b2lkICAgICAgICAgICAgZGVidWdfY29tYm9fbmModmFfYWxpc3QpOwotI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLikKKyAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfQVRUUklCVVRFX0ZPUk1BVChwcmludGYsIDIsIDMpOworCisjdW5kZWYgTkVUU05NUF9BVFRSSUJVVEVfRk9STUFUCisKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19vaWQoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IG9pZCAqIHRoZW9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX3N1Ym9pZChjb25zdCBjaGFyICp0b2tlbiwgY29uc3Qgb2lkICogdGhlb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfdmFyKGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19vaWRyYW5nZShjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogdGhlb2lkLCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgdmFyX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kKTsKLSAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfaGV4KGNvbnN0IGNoYXIgKnRva2VuLCB1X2NoYXIgKiB0aGVkYXRhLAorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGRlYnVnbXNnX2hleChjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgdV9jaGFyICogdGhlZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBsZW4pOwotICAgIHZvaWQgICAgICAgICAgICBkZWJ1Z21zZ19oZXh0bGkoY29uc3QgY2hhciAqdG9rZW4sIHVfY2hhciAqIHRoZWRhdGEsCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgZGVidWdtc2dfaGV4dGxpKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCB1X2NoYXIgKiB0aGVkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZGVidWdfaW5kZW50X2FkZChpbnQgYW1vdW50KTsKLSAgICBjaGFyICAgICAgICAgICAqZGVidWdfaW5kZW50KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIGRlYnVnX2luZGVudF9nZXQodm9pZCk7CisgICAgLyoKKyAgICAgKiBXaGF0IGlzIHNhaWQgYWJvdmUgaXMgdHJ1ZSBmb3IgdGhpcyBmdW5jdGlvbiBhcyB3ZWxsLiBGdXJ0aGVyIHRoaXMKKyAgICAgKiBmdW5jdGlvbiBpcyBkZXByZWNhdGVkIGFuZCBvbmx5IHByb3ZpZGVkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS4KKyAgICAgKiBQbGVhc2UgdXNlICIlKnMiLCBkZWJ1Z19pbmRlbnRfZ2V0KCksICIiIGlmIHlvdSB1c2VkIHRoaXMgb25lIGJlZm9yZS4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpkZWJ1Z19pbmRlbnQodm9pZCk7CiAKICAgICAvKgogICAgICAqIFVzZSB0aGVzZSBtYWNyb3MgaW5zdGVhZCBvZiB0aGUgZnVuY3Rpb25zIGFib3ZlIHRvIGFsbG93IHRoZW0gdG8gYmUKQEAgLTEyMSwxMSArMTQ1LDE0IEBACiAjZGVmaW5lIF9fREJHTVNHTF9OQyh4KSAgX19EQkdUUkFDRTsgZGVidWdtc2cgeAogI2RlZmluZSBfX0RCR01TR1RMX05DKHgpIF9fREJHVFJBQ0U7IGRlYnVnX2NvbWJvX25jIHgKIAotI2lmZGVmICBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVECi0jZGVmaW5lIF9fREJHVFJBQ0UgICAgICAgX19EQkdNU0dUKCgidHJhY2UiLCIlcygpOiAlcywgJWQ6XG4iLF9fRlVOQ1RJT05fXyxcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEVfXyxfX0xJTkVfXykpCisjaWZkZWYgIE5FVFNOTVBfRlVOQ1RJT04KKyNkZWZpbmUgX19EQkdUUkFDRSAgICAgICBfX0RCR01TR1QoKCJ0cmFjZSIsIiVzKCk6ICVzLCAlZDpcbiIsXAorCQkJCU5FVFNOTVBfRlVOQ1RJT04sX19GSUxFX18sX19MSU5FX18pKQorI2RlZmluZSBfX0RCR1RSQUNFVE9LKHgpIF9fREJHTVNHVCgoeCwiJXMoKTogJXMsICVkOlxuIiwgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9GVU5DVElPTixfX0ZJTEVfXyxfX0xJTkVfXykpCiAjZWxzZQogI2RlZmluZSBfX0RCR1RSQUNFICAgICAgIF9fREJHTVNHVCgoInRyYWNlIiwiICVzLCAlZDpcbiIsIF9fRklMRV9fLF9fTElORV9fKSkKKyNkZWZpbmUgX19EQkdUUkFDRVRPSyh4KSBfX0RCR01TR1QoKHgsIiAlcywgJWQ6XG4iLCBfX0ZJTEVfXyxfX0xJTkVfXykpCiAjZW5kaWYKIAogI2RlZmluZSBfX0RCR01TR0woeCkgICAgIF9fREJHVFJBQ0UsIGRlYnVnbXNnIHgKQEAgLTEzNiwxMSArMTYzLDExIEBACiAjZGVmaW5lIF9fREJHTVNHT0lEUkFOR0UoeCkgZGVidWdtc2dfb2lkcmFuZ2UgeAogI2RlZmluZSBfX0RCR01TR0hFWCh4KSAgICAgZGVidWdtc2dfaGV4IHgKICNkZWZpbmUgX19EQkdNU0dIRVhUTEkoeCkgIGRlYnVnbXNnX2hleHRsaSB4Ci0jZGVmaW5lIF9fREJHSU5ERU5UKCkgICAgICBkZWJ1Z19pbmRlbnQoKQorI2RlZmluZSBfX0RCR0lOREVOVCgpICAgICAgZGVidWdfaW5kZW50X2dldCgpCiAjZGVmaW5lIF9fREJHSU5ERU5UQUREKHgpICBkZWJ1Z19pbmRlbnRfYWRkKHgpCiAjZGVmaW5lIF9fREJHSU5ERU5UTU9SRSgpICBkZWJ1Z19pbmRlbnRfYWRkKDIpCiAjZGVmaW5lIF9fREJHSU5ERU5UTEVTUygpICBkZWJ1Z19pbmRlbnRfYWRkKC0yKQotI2RlZmluZSBfX0RCR1BSSU5USU5ERU5UKHRva2VuKSBfX0RCR01TR1RMKCh0b2tlbiwgIiVzIiwgX19EQkdJTkRFTlQoKSkpCisjZGVmaW5lIF9fREJHUFJJTlRJTkRFTlQodG9rZW4pIF9fREJHTVNHVEwoKHRva2VuLCAiJSpzIiwgX19EQkdJTkRFTlQoKSwgIiIpKQogCiAjZGVmaW5lIF9fREJHRFVNUEhFQURFUih0b2tlbix4KSBcCiAgICAgICAgIF9fREJHUFJJTlRJTkRFTlQoImR1bXBoXyIgdG9rZW4pOyBcCkBAIC0xNTcsMTIgKzE4NCwxMSBAQAogCiAjZGVmaW5lIF9fREJHRFVNUFNFQ1RJT04odG9rZW4seCkgXAogICAgICAgICBfX0RCR1BSSU5USU5ERU5UKCJkdW1waF8iIHRva2VuKTsgXAotICAgICAgICBkZWJ1Z21zZygiZHVtcGhfIiB0b2tlbix4KTsgXAotICAgICAgICBkZWJ1Z21zZygiZHVtcGhfIiB0b2tlbiwiXG4iKTsgXAorICAgICAgICBkZWJ1Z21zZygiZHVtcGhfIiB0b2tlbiwiJXNcbiIseCk7XAogICAgICAgICBfX0RCR0lOREVOVE1PUkUoKQogCiAjZGVmaW5lIF9fREJHRFVNUFNFVFVQKHRva2VuLGJ1ZixsZW4pIFwKLSAgICAgICAgZGVidWdtc2coImR1bXB4IiB0b2tlbiwgImR1bXB4XyVzOiVzIiwgdG9rZW4sIF9fREJHSU5ERU5UKCkpOyBcCisgICAgICAgIGRlYnVnbXNnKCJkdW1weCIgdG9rZW4sICJkdW1weF8lczolKnMiLCB0b2tlbiwgX19EQkdJTkRFTlQoKSwgIiIpOyBcCiAgICAgICAgIF9fREJHTVNHSEVYKCgiZHVtcHhfIiB0b2tlbixidWYsbGVuKSk7IFwKICAgICAgICAgaWYgKGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoImR1bXB2IiB0b2tlbikgPT0gU05NUEVSUl9TVUNDRVNTIHx8IFwKICAgICAgICAgICAgIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoImR1bXB2XyIgdG9rZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgeyBcCkBAIC0xNzAsOTUgKzE5NiwzMSBAQAogICAgICAgICB9IGVsc2UgeyBcCiAgICAgICAgICAgICBkZWJ1Z21zZygiZHVtcHhfIiB0b2tlbiwiICAiKTsgXAogICAgICAgICB9IFwKLSAgICAgICAgZGVidWdtc2coImR1bXB2IiB0b2tlbiwgImR1bXB2XyVzOiVzIiwgdG9rZW4sIF9fREJHSU5ERU5UKCkpOworICAgICAgICBkZWJ1Z21zZygiZHVtcHYiIHRva2VuLCAiZHVtcHZfJXM6JSpzIiwgdG9rZW4sIF9fREJHSU5ERU5UKCksICIiKTsKIAogLyoqKioqKioqKioqKioqKioqKiogRW5kICAgcHJpdmF0ZSBtYWNyb3MgKioqKioqKioqKioqKioqKioqKioqKioqLwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HICovCiAKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qKioqKioqKioqKioqKioqKioqKlN0YXJ0IHB1YmxpYyAgbWFjcm9zICoqKioqKioqKioqKioqKioqKioqKioqKi8KLQotI2RlZmluZSBERUJVR01TRyh4KSAgICAgICAgZG8ge2lmIChfREJHX0lGXykge2RlYnVnbXNnIHg7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dUKHgpICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1QoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdUUkFDRSAgICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR1RSQUNFO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHTCh4KSAgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dMKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHVEwoeCkgICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dUTCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR09JRCh4KSAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHT0lEKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHU1VCT0lEKHgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dTVUJPSUQoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dWQVIoeCkgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1ZBUih4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR09JRFJBTkdFKHgpIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR09JRFJBTkdFKHgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHTVNHSEVYKHgpICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dIRVgoeCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdNU0dIRVhUTEkoeCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR0hFWFRMSSh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR0lOREVOVCgpICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UKCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdJTkRFTlRBREQoeCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVEFERCh4KTt9IH13aGlsZSgwKQotI2RlZmluZSBERUJVR0lOREVOVE1PUkUoKSAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UTU9SRSgpO30gfXdoaWxlKDApCi0jZGVmaW5lIERFQlVHSU5ERU5UTEVTUygpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlRMRVNTKCk7fSB9d2hpbGUoMCkKLSNkZWZpbmUgREVCVUdQUklOVElOREVOVCh0b2tlbikgXAotCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR1BSSU5USU5ERU5UKHRva2VuKTt9IH13aGlsZSgwKQotCi0KLSNkZWZpbmUgREVCVUdEVU1QSEVBREVSKHRva2VuLHgpIFwKLQlkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdEVU1QSEVBREVSKHRva2VuLHgpO30gfXdoaWxlKDApCi0KLSNkZWZpbmUgREVCVUdEVU1QU0VDVElPTih0b2tlbix4KSBcCi0JZG8ge2lmIChfREJHX0lGXykge19fREJHRFVNUFNFQ1RJT04odG9rZW4seCk7fSB9d2hpbGUoMCkKLQotI2RlZmluZSBERUJVR0RVTVBTRVRVUCh0b2tlbixidWYsbGVuKSBcCi0JZG8ge2lmIChfREJHX0lGXykge19fREJHRFVNUFNFVFVQKHRva2VuLGJ1ZixsZW4pO30gfXdoaWxlKDApCi0KLSNkZWZpbmUgREVCVUdNU0dfTkMoeCkgIGRvIHsgX19EQkdNU0dfTkMoeCk7IH13aGlsZSgwKQotI2RlZmluZSBERUJVR01TR1RfTkMoeCkgZG8geyBfX0RCR01TR1RfTkMoeCk7IH13aGlsZSgwKQotCi0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfTk9fREVCVUdHSU5HIDo9IGVuYWJsZSBzdHJlYW1saW5pbmcgb2YgdGhlIGNvZGUgKi8KLQotI2RlZmluZSBERUJVR01TRyh4KQotI2RlZmluZSBERUJVR01TR1QoeCkKLSNkZWZpbmUgREVCVUdUUkFDRQotI2RlZmluZSBERUJVR01TR0woeCkKLSNkZWZpbmUgREVCVUdNU0dUTCh4KQotI2RlZmluZSBERUJVR01TR09JRCh4KQotI2RlZmluZSBERUJVR01TR1NVQk9JRCh4KQotI2RlZmluZSBERUJVR01TR1ZBUih4KQotI2RlZmluZSBERUJVR01TR09JRFJBTkdFKHgpCi0jZGVmaW5lIERFQlVHTVNHSEVYKHgpCi0jZGVmaW5lIERFQlVHSUYoeCkgICAgICAgIGlmKDApCi0jZGVmaW5lIERFQlVHRFVNUCh0LGIsbCxwKQotI2RlZmluZSBERUJVR0lOREVOVCgpCi0jZGVmaW5lIERFQlVHSU5ERU5UTU9SRSgpCi0jZGVmaW5lIERFQlVHSU5ERU5UTEVTUygpCi0jZGVmaW5lIERFQlVHSU5ERU5UQUREKHgpCi0jZGVmaW5lIERFQlVHTVNHSEVYVExJKHgpCi0jZGVmaW5lIERFQlVHUFJJTlRJTkRFTlQodG9rZW4pCi0jZGVmaW5lIERFQlVHRFVNUEhFQURFUih0b2tlbix4KQotI2RlZmluZSBERUJVR0RVTVBTRUNUSU9OKHRva2VuLHgpCi0jZGVmaW5lIERFQlVHRFVNUFNFVFVQKHRva2VuLCBidWYsIGxlbikKLQotI2RlZmluZSBERUJVR01TR19OQyh4KQotI2RlZmluZSBERUJVR01TR1RfTkMoeCkKLQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CiAjZW5kaWYKIAorICAgIC8qIFB1YmxpYyBtYWNyb3MgbW92ZWQgdG8gdG9wLWxldmVsIEFQSSBoZWFkZXIgZmlsZSAqLworI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfZGVidWdfaW5pdCh2b2lkKTsKKwogI2RlZmluZSBNQVhfREVCVUdfVE9LRU5TIDI1NgogI2RlZmluZSBNQVhfREVCVUdfVE9LRU5fTEVOIDEyOAogI2RlZmluZSBERUJVR19UT0tFTl9ERUxJTUlURVIgIiwiCiAjZGVmaW5lIERFQlVHX0FMV0FZU19UT0tFTiAiYWxsIgogCi0gICAgLyoKLSAgICAgKiBzZXR1cCByb3V0aW5lczoKLSAgICAgKiAKLSAgICAgKiBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoY2hhciAqKTogICAgIHJlZ2lzdGVycyBhIGxpc3Qgb2YgdG9rZW5zIHRvCi0gICAgICogcHJpbnQgZGVidWdnaW5nIG91dHB1dCBmb3IuCi0gICAgICogCi0gICAgICogZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZChjaGFyICopOiByZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvciBTTk1QRVJSX0dFTkVSUgotICAgICAqIGlmIGEgdG9rZW4gaGFzIGJlZW4gcmVnaXN0ZXJlZCBvcgotICAgICAqIG5vdCAoYW5kIGRlYnVnZ2luZyBvdXRwdXQgaXMgIm9uIikuCi0gICAgICogc25tcF9kZWJ1Z19pbml0KHZvaWQpOiAgICAgICAgICAgICByZWdpc3RlcnMgLmNvbmYgaGFuZGxlcnMuCi0gICAgICovCi0gICAgdm9pZCAgICAgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2VucyhjaGFyICp0b2tlbnMpOwotICAgIGludCAgICAgICAgICAgICBkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkKGNvbnN0IGNoYXIgKnRva2VuKTsKLSAgICB2b2lkICAgICAgICAgICAgc25tcF9kZWJ1Z19pbml0KHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9kb19kZWJ1Z2dpbmcoaW50KTsKLSAgICBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZG9fZGVidWdnaW5nKHZvaWQpOworI2lmbmRlZiBORVRTTk1QX05PX0RFQlVHR0lORwogCiAvKgogICogaW50ZXJuYWw6CkBAIC0yNzIsNyArMjM0LDkgQEAKIAogTkVUU05NUF9JTVBPUlQgaW50ICAgICAgICAgICAgICAgICBkZWJ1Z19udW1fdG9rZW5zOwogTkVUU05NUF9JTVBPUlQgbmV0c25tcF90b2tlbl9kZXNjciBkYmdfdG9rZW5zW01BWF9ERUJVR19UT0tFTlNdOwotICAgIAorCisjZW5kaWYgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAppbmRleCA0MTY3ZDI4Li4yMzc4OTFkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCkBAIC02Myw4ICs2MywxMCBAQAogICAgICAqIGZpbmQgYSBsaXN0LCBhbmQgdGhlbiBvcGVyYXRlIG9uIHRoYXQgbGlzdAogICAgICAqICAgKCBkaXJlY3QgbWV0aG9kcyBmdXJ0aGVyIGJlbG93IGlmIHlvdSBhbHJlYWR5IGhhdmUgdGhlIGxpc3QgcG9pbnRlcikKICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpzZV9maW5kX2xhYmVsX2luX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc2VfZmluZF92YWx1ZV9pbl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsYWJlbCk7CiAgICAgaW50ICAgICAgICAgICAgIHNlX2ZpbmRfZnJlZV92YWx1ZV9pbl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSk7CkBAIC03Myw2ICs3NSw3IEBACiAgICAgICogb3duZXJzaGlwIG9mIHRoZSBtZW1vcnkgcG9pbnRlZCB0byBieSBsYWJlbCB0byB0aGUgbGlzdDoKICAgICAgKiBjbGVhcl9zbm1wX2VudW0oKSBkZWFsbG9jYXRlcyB0aGF0IG1lbW9yeS4KICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzZV9hZGRfcGFpcl90b19zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwgY2hhciAqbGFiZWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB2YWx1ZSk7CiAKQEAgLTk0LDYgKzk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICp0eXBlKTsKICAgICB2b2lkICAgICAgICAgICAgc2Vfc3RvcmVfbGlzdCh1bnNpZ25lZCBpbnQgbWFqb3IsIHVuc2lnbmVkIGludCBtaW5vciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlKTsKKyAgICB2b2lkICAgICAgICAgICAgc2VfY2xlYXJfc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUpOwogICAgIHZvaWQgICAgICAgICAgICBzZV9zdG9yZV9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwgY29uc3QgY2hhciAqdHlwZSk7CiAgICAgaW50ICAgICAgICAgICAgIHNlX3N0b3JlX3NsaXN0X2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmdzLCB2b2lkICpjbGllbnRhcmdzKTsKQEAgLTEwMiw2ICsxMDYsNyBAQAogICAgICAqIERlYWxsb2NhdGUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgaW5pdF9zbm1wX2VudW0oKTogcmVtb3ZlIGFsbCBrZXkvdmFsdWUKICAgICAgKiBwYWlycyBzdG9yZWQgYnkgc2VfYWRkXyooKSBjYWxscy4KICAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBjbGVhcl9zbm1wX2VudW0odm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCmluZGV4IDBkMzJjNDQuLmY3OWFlYmQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKQEAgLTcyLDEwICs3MiwxNSBAQAogICAgIC8qCiAgICAgICogQWNjZXNzIGNvbnRyb2wgc3RhdGVtZW50cyBmb3IgdGhlIGFnZW50IAogICAgICAqLwotI2RlZmluZSBST05MWQkweDEgICAgICAgICAgICAgLyogcmVhZCBhY2Nlc3Mgb25seSAqLwotI2RlZmluZSBSV1JJVEUJMHgyICAgICAgICAgICAgIC8qIHJlYWQgYW5kIHdyaXRlIGFjY2VzcyAobXVzdCBoYXZlIDB4MiBiaXQgc2V0KSAqLworI2RlZmluZSBORVRTTk1QX09MREFQSV9ST05MWQkweDEgICAgIC8qIHJlYWQgYWNjZXNzIG9ubHkgKi8KKyNkZWZpbmUgTkVUU05NUF9PTERBUElfUldSSVRFCTB4MiAgICAgLyogcmVhZCBhbmQgd3JpdGUgYWNjZXNzIChtdXN0IGhhdmUgMHgyIGJpdCBzZXQpICovCisjZGVmaW5lIE5FVFNOTVBfT0xEQVBJX05PQUNDRVNTIDB4MDAwMCAgLyogbm8gYWNjZXNzIGZvciBhbnlib2R5ICovCiAKLSNkZWZpbmUgTk9BQ0NFU1MgMHgwMDAwICAgICAgICAgLyogbm8gYWNjZXNzIGZvciBhbnlib2R5ICovCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisjZGVmaW5lIFJPTkxZICAgICAgICAgICBORVRTTk1QX09MREFQSV9ST05MWQorI2RlZmluZSBSV1JJVEUgICAgICAgICAgTkVUU05NUF9PTERBUElfUldSSVRFCisjZGVmaW5lIE5PQUNDRVNTICAgICAgICBORVRTTk1QX09MREFQSV9OT0FDQ0VTUworI2VuZGlmCiAKICAgICAvKgogICAgICAqIGRlZmluZWQgdHlwZXMgKGZyb20gdGhlIFNNSSwgUkZDIDExNTcpIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCmluZGV4IDBkZGU3YWUuLjFkNzkyMWIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKQEAgLTEsMTggKzEsMTcgQEAKICNpZm5kZWYgU05NUF9MT0dHSU5HX0gKICNkZWZpbmUgU05NUF9MT0dHSU5HX0gKIAotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gICAgICAgICAgIkMiIHsKLSNlbmRpZgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgogCi0jaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NZU0xPR19ICiAjaW5jbHVkZSA8c3lzbG9nLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1NUREFSR19ICisjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dmFyYXJncy5oPgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgewogI2VuZGlmCiAKICNpZm5kZWYgTE9HX0VSUgpAQCAtMzUsNTEgKzM0LDM2IEBACiAjZGVmaW5lIERFRkFVTFRfTE9HX0lEICJuZXQtc25tcCIKICNlbmRpZgogCisjZGVmaW5lIE5FVFNOTVBfTE9HT05DRSh4KSBkbyB7IFwKKyAgICAgICAgc3RhdGljIGNoYXIgbG9nZ2VkID0gMDsgXAorICAgICAgICBpZiAoIWxvZ2dlZCkgeyAgICAgICAgICBcCisgICAgICAgICAgICBsb2dnZWQgPSAxOyAgICAgICAgIFwKKyAgICAgICAgICAgIHNubXBfbG9nIHggOyAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfSB3aGlsZSgwKQorCiAgICAgdm9pZCAgICAgICAgICAgIGluaXRfc25tcF9sb2dnaW5nKHZvaWQpOwotICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl9zbm1wX2xvZ2dpbmcodm9pZCk7Ci0gICAgaW50ICAgICAgICAgICAgIHNubXBfZ2V0X2RvX2xvZ2dpbmcodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9kaXNhYmxlX3N5c2xvZyh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcF9kaXNhYmxlX2ZpbGVsb2codm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9kaXNhYmxlX3N0ZGVycmxvZyh2b2lkKTsKICAgICB2b2lkICAgICAgICAgICAgc25tcF9kaXNhYmxlX2NhbGxsb2codm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXBfZGlzYWJsZV9sb2codm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgc25tcF9lbmFibGVfc3lzbG9nKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChjb25zdCBjaGFyICppZGVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGludCAgIGZhY2lsaXR5KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2VuYWJsZV9maWxlbG9nKGNvbnN0IGNoYXIgKmxvZ2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkb250X3plcm9fbG9nKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBzbm1wX2VuYWJsZV9zdGRlcnJsb2codm9pZCk7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXBfZW5hYmxlX2NhbGxsb2codm9pZCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzbm1wX3N0ZGVycmxvZ19zdGF0dXModm9pZCk7CiAKLSNpZiBIQVZFX1NUREFSR19ICi0jIGlmICFkZWZpbmVkKF9fR05VQ19fKSB8fCBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KQotICAgIGludCAgICAgICAgICAgICBzbm1wX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKTsKLSMgZWxzZQotICAgIGludCAgICAgICAgICAgICBzbm1wX2xvZyhpbnQgcHJpb3JpdHksIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotICAgICAgICAgICAgICAgICAgICAJX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7Ci0jIGVuZGlmCi0jZWxzZQotICAgIGludCAgICAgICAgICAgICBzbm1wX2xvZyh2YV9hbGlzdCk7Ci0jZW5kaWYKLSAgICBpbnQgICAgICAgICAgICAgc25tcF92bG9nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFfbGlzdCBhcCk7Ci0gICAgLyoKLSAgICAgKiAwIC0gc3VjY2Vzc2Z1bCBtZXNzYWdlIGZvcm1hdHRpbmcgCi0gICAgICovCi0gICAgLyoKLSAgICAgKiAtMSAtIENvdWxkIG5vdCBmb3JtYXQgbG9nLXN0cmluZyAKLSAgICAgKi8KLSAgICAvKgotICAgICAqIC0yIC0gQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgbG9nLW1lc3NhZ2UgCi0gICAgICovCi0gICAgLyoKLSAgICAgKiAtMyAtIExvZy1tZXNzYWdlIHRvbyBsb25nISAKLSAgICAgKi8KLQotICAgIHZvaWQgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoY29uc3QgY2hhciAqcyk7Ci0KIAogI2RlZmluZSBORVRTTk1QX0xPR0hBTkRMRVJfU1RET1VUCTEKICNkZWZpbmUgTkVUU05NUF9MT0dIQU5ETEVSX1NUREVSUgkyCkBAIC04OCw4ICs3MiwxMyBAQAogI2RlZmluZSBORVRTTk1QX0xPR0hBTkRMRVJfQ0FMTEJBQ0sJNQogI2RlZmluZSBORVRTTk1QX0xPR0hBTkRMRVJfTk9ORQkJNgogCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKEZJTEUgKnN0cmVhbSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgc25tcF9sb2dfb3B0aW9ucyhjaGFyICpvcHRhcmcsIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkIHNubXBfbG9nX29wdGlvbnNfdXNhZ2UoY29uc3QgY2hhciAqbGVhZCwgRklMRSAqb3V0Zik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICpzbm1wX2xvZ19zeXNsb2duYW1lKGNvbnN0IGNoYXIgKnN5c2xvZ25hbWUpOwogICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfbG9nX2hhbmRsZXJfcyBuZXRzbm1wX2xvZ19oYW5kbGVyOyAKICAgICB0eXBlZGVmIGludCAoTmV0c25tcExvZ0hhbmRsZXIpKG5ldHNubXBfbG9nX2hhbmRsZXIqLCBpbnQsIGNvbnN0IGNoYXIgKik7CkBAIC0xMTUsMTMgKzEwNCwyMSBAQAogCW5ldHNubXBfbG9nX2hhbmRsZXIJKm5leHQsICpwcmV2OwogICAgIH07CiAKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX2xvZ19oYW5kbGVyICpnZXRfbG9naF9oZWFkKCB2b2lkICk7CitORVRTTk1QX0lNUE9SVAogbmV0c25tcF9sb2dfaGFuZGxlciAqbmV0c25tcF9yZWdpc3Rlcl9sb2doYW5kbGVyKCBpbnQgdHlwZSwgaW50IHByaSApOwogbmV0c25tcF9sb2dfaGFuZGxlciAqbmV0c25tcF9maW5kX2xvZ2hhbmRsZXIoIGNvbnN0IGNoYXIgKnRva2VuICk7CiBpbnQgbmV0c25tcF9hZGRfbG9naGFuZGxlciggICAgbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCApOworTkVUU05NUF9JTVBPUlQKIGludCBuZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyKCBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doICk7CiBpbnQgbmV0c25tcF9lbmFibGVfbG9naGFuZGxlciggY29uc3QgY2hhciAqdG9rZW4gKTsKIGludCBuZXRzbm1wX2Rpc2FibGVfbG9naGFuZGxlciggY29uc3QgY2hhciAqdG9rZW4gKTsKK05FVFNOTVBfSU1QT1JUCit2b2lkIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlciggbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCApOworTkVUU05NUF9JTVBPUlQKK3ZvaWQgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlciggbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCApOworTkVUU05NUF9JTVBPUlQKIHZvaWQgbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQodm9pZCk7CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjkxNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgdGhlIE9wZW5TU0wgV3JhcHBlcgorICovCisKKyNpZm5kZWYgU05NUF9PUEVOU1NMX0gKKyNkZWZpbmUgU05NUF9PUEVOU1NMX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCisgICAgdm9pZCBuZXRzbm1wX2luaXRfb3BlbnNzbCh2b2lkKTsKKworICAgIC8qCisgICAgICogY2VydCBmaWVsZHMKKyAgICAgKi8KKyAgICB2b2lkIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfbmFtZXMoWDUwOSAqb2NlcnQpOworICAgIHZvaWQgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zKFg1MDkgKm9jZXJ0KTsKKworICAgIGNoYXIgKm5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lKFg1MDkgKiwgY2hhciAqKmJ1ZiwgaW50ICpsZW4pOworICAgIGNoYXIgKm5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0TmFtZShYNTA5ICosIGNoYXIgKipidWYsIGludCAqbGVuKTsKKyAgICBjaGFyICpuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQoWDUwOSAqb2NlcnQsIGludCBhbGcpOworICAgIGludCBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfaGFzaF90eXBlKFg1MDkgKm9jZXJ0KTsKKworICAgIGludCBuZXRzbm1wX29wZW5zc2xfY2VydF9pc3N1ZWRfYnkoWDUwOSAqaXNzdWVyLCBYNTA5ICpjZXJ0KTsKKworICAgIGNoYXIgKm5ldHNubXBfb3BlbnNzbF9leHRyYWN0X3NlY25hbWUobmV0c25tcF9jZXJ0X21hcCAqY2VydF9tYXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbWFwICpwZWVyX2NlcnQpOworCisgICAgY2hhciAqbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lKFg1MDkgKiwgY2hhciAqKmJ1ZiwgaW50ICpsZW4pOworCisgICAgLyoKKyAgICAgKiBzc2wgY2VydCBjaGFpbnMKKyAgICAgKi8KKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqbmV0c25tcF9vcGVuc3NsX2dldF9jZXJ0X2NoYWluKFNTTCAqc3NsKTsKKworICAgIC8qCisgICAgICogbWlzYworICAgICAqLworICAgIHZvaWQgbmV0c25tcF9vcGVuc3NsX2Vycl9sb2coY29uc3QgY2hhciAqcHJlZml4KTsKKyAgICB2b2lkIG5ldHNubXBfb3BlbnNzbF9udWxsX2NoZWNrcyhTU0wgKnNzbCwgaW50ICpudWxsQXV0aCwgaW50ICpudWxsQ2lwaGVyKTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUF9PUEVOU1NMX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAppbmRleCBjMGZlNzFlLi4xYWQ2M2UwIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCkBAIC0xLDE2ICsxLDg5IEBACiAjaWZuZGVmIFNOTVBfUEFSU0VfQVJHU19ICiAjZGVmaW5lIFNOTVBfUEFSU0VfQVJHU19ICisKKy8qKgorICogQGZpbGUgc25tcF9wYXJzZV9hcmdzLmgKKyAqCisgKiBTdXBwb3J0IGZvciBpbml0aWFsaXppbmcgdmFyaWFibGVzIG9mIHR5cGUgbmV0c25tcF9zZXNzaW9uIGZyb20gY29tbWFuZAorICogbGluZSBhcmd1bWVudHMKKyAqLworCiAjaWZkZWYgX19jcGx1c3BsdXMKIGV4dGVybiAiQyIgewogI2VuZGlmCiAKKy8qKiBEb24ndCBlbmFibGUgYW55IGxvZ2dpbmcgZXZlbiBpZiB0aGVyZSBpcyBubyAtTCBhcmd1bWVudCAqLworI2RlZmluZSBORVRTTk1QX1BBUlNFX0FSR1NfTk9MT0dHSU5HICAgIDB4MDAwMQorLyoqIERvbid0IHplcm8gb3V0IHNlbnNpdGl2ZSBhcmd1bWVudHMgYXMgdGhleSBhcmUgbm90IG9uIHRoZSBjb21tYW5kIGxpbmUKKyAqICBhbnl3YXksIHR5cGljYWxseSB1c2VkIHdoZW4gdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIGFuIGludGVybmFsCisgKiAgY29uZmlnLWxpbmUgaGFuZGxlcgorICovCisjZGVmaW5lIE5FVFNOTVBfUEFSU0VfQVJHU19OT1pFUk8gICAgICAgMHgwMDAyCisKKy8qKgorICogUGFyc2luZyBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHN1Y2NlZWRlZCBhbmQgYXBwbGljYXRpb24gaXMgZXhwZWN0ZWQKKyAqIHRvIGNvbnRpbnVlIHdpdGggbm9ybWFsIG9wZXJhdGlvbi4KKyAqLworI2RlZmluZSBORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTUyAgICAgICAwCisvKioKKyAgKiBQYXJzaW5nIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgc3VjY2VlZGVkLCBidXQgdGhlIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkCisgICogdG8gZXhpdCB3aXRoIHplcm8gZXhpdCBjb2RlLiBGb3IgZXhhbXBsZSwgJy1WJyBwYXJhbWV0ZXIgaGFzIGJlZW4gZm91bmQuCisgICovCisjZGVmaW5lIE5FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTX0VYSVQgIC0yCisvKioKKyAqIFBhcnNpbmcgb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyBmYWlsZWQgYW5kIGFwcGxpY2F0aW9uIGlzIGV4cGVjdGVkIHRvIHNob3cKKyAqIHVzYWdlIChpLmUuIGxpc3Qgb2YgcGFyYW1ldGVycykgYW5kIGV4aXQgd2l0aCBub3plcm8gZXhpdCBjb2RlLiAKKyAqLworI2RlZmluZSBORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UgICAtMQorLyoqCisgKiBQYXJzaW5nIG9mIGNvbW1hbmQgbGluZSBhcmd1bWVudHMgZmFpbGVkIGFuZCBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byBleGl0CisgKiB3aXRoIG5vemVybyBleGl0IGNvZGUuICBuZXRzbm1wX3BhcnNlX2FyZ3MoKSBoYXMgYWxyZWFkeSBwcmludGVkIHdoYXQgd2VudAorICogd3JvbmcuCisgKi8KKyNkZWZpbmUgTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SICAgICAgICAgLTMKKyAgICAKKy8qKgorICogIFBhcnNlIGFuIGFyZ3VtZW50IGxpc3QgYW5kIGluaXRpYWxpemUgXGxpbmsgbmV0c25tcF9zZXNzaW9uCisgKiAgc2Vzc2lvblxlbmRsaW5rCisgKiAgZnJvbSBpdC4KKyAqICBAcGFyYW0gYXJnYyBOdW1iZXIgb2YgZWxlbWVudHMgaW4gYXJndgorICogIEBwYXJhbSBhcmd2IHN0cmluZyBhcnJheSBvZiBhdCBsZWFzdCBhcmdjIGVsZW1lbnRzCisgKiAgQHBhcmFtIHNlc3Npb24KKyAqICBAcGFyYW0gbG9jYWxPcHRzIEFkZGl0aW9uYWwgb3B0aW9uIGNoYXJhY3RlcnMgdG8gYWNjZXB0CisgKiAgQHBhcmFtIHByb2MgZnVuY3Rpb24gcG9pbnRlciB1c2VkIHRvIHByb2Nlc3MgYW55IHVuaGFuZGxlZCBhcmd1bWVudHMKKyAqICBAcGFyYW0gZmxhZ3MgZmxhZ3MgZGlyZWN0aW5nIGhvdyB0byBoYW5kbGUgdGhlIHN0cmluZworICoKKyAqICBAcmV0dmFsIDAgKD0gI05FVFNOTVBfUEFSU0VfQVJHU19TVUNDRVNTKSBvbiBzdWNjZXNzCisgKiAgQHJldHZhbCAjTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVCB3aGVuIHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZAorICogIHRvIGV4aXQgd2l0aCB6ZXJvIGV4aXQgY29kZSAoZS5nLiAnLVYnIG9wdGlvbiB3YXMgZm91bmQpCisgKiAgQHJldHZhbCAjTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFIHdoZW4gdGhlIGZ1bmN0aW9uIGZhaWxlZCB0byBwYXJzZQorICogIHRoZSBjb21tYW5kIGxpbmUgYW5kIHRoZSBhcHBsaWNhdGlvbiBpcyBleHBlY3RlZCB0byBzaG93IGl0J3MgdXNhZ2UKKyAqICBAcmV0dmFsICNORVRTTk1QX1BBUlNFX0FSR1NfRVJST1Igd2hlbiB0aGUgZnVuY3Rpb24gZmFpbGVkIHRvIHBhcnNlCisgKiAgdGhlIGNvbW1hbmQgbGluZSBhbmQgaXQgaGFzIGFscmVhZHkgcHJpbnRlZCBlbm91Z2ggaW5mb3JtYXRpb24gZm9yIHRoZSB1c2VyCisgKiAgYW5kIG5vIG90aGVyIG91dHB1dCBpcyBuZWVkZWQKKyAqCisgKiAgVGhlIHByb2MgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggYXJnYywgYXJndiBhbmQgdGhlIGN1cnJlbnRseSBwcm9jZXNzZWQKKyAqICBvcHRpb24gYXMgYXJndW1lbnRzCisgKi8KK05FVFNOTVBfSU1QT1JUIGludAorbmV0c25tcF9wYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndiwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uLAorICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxvY2FsT3B0cywgdm9pZCAoKnByb2MpKGludCwgY2hhciAqY29uc3QgKiwgaW50KSwKKyAgICAgICAgICAgICAgICAgICBpbnQgZmxhZ3MpOworCisvKioKKyAqICBDYWxscyBcbGluayBuZXRzbm1wX3BhcnNlX2FyZ3MoKQorICogIG5ldHNubXBfcGFyc2VfYXJncyhhcmdjLCBhcmd2LCBzZXNzaW9uLCBsb2NhbE9wdHMsIHByb2MsIDApXGVuZGxpbmsKKyAqLworTkVUU05NUF9JTVBPUlQKIGludAogc25tcF9wYXJzZV9hcmdzKGludCBhcmdjLCBjaGFyICoqYXJndiwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uLAogCQljb25zdCBjaGFyICpsb2NhbE9wdHMsIHZvaWQgKCpwcm9jKShpbnQsIGNoYXIgKmNvbnN0ICosIGludCkpOwogCitORVRTTk1QX0lNUE9SVAogdm9pZAogc25tcF9wYXJzZV9hcmdzX2Rlc2NyaXB0aW9ucyhGSUxFICopOwogCitORVRTTk1QX0lNUE9SVAogdm9pZAogc25tcF9wYXJzZV9hcmdzX3VzYWdlKEZJTEUgKik7CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKaW5kZXggYWVlYjI0YS4uYWFiYjdlZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKQEAgLTEwLDggKzEwLDkgQEAKIC8qIExvY2FsbHkgZGVmaW5lZCBzZWN1cml0eSBtb2RlbHMuCiAgKiAoTmV0LVNOTVAgZW50ZXJwcmlzZSBudW1iZXIgPSA4MDcyKSoyNTYgKyBsb2NhbF9udW0KICAqLwotI2RlZmluZSBORVRTTk1QX0tTTV9TRUNVUklUWV9NT0RFTCAgICAgMjA2NjQzMgotI2RlZmluZSBORVRTTk1QX0xPQ0FMU01fU0VDVVJJVFlfTU9ERUwgMjA2NjQzMworI2RlZmluZSBORVRTTk1QX1NFQ19NT0RFTF9LU00gICAgIDIwNjY0MzIKKyNkZWZpbmUgTkVUU05NUF9LU01fU0VDVVJJVFlfTU9ERUwgICAgIE5FVFNOTVBfU0VDX01PREVMX0tTTQorI2RlZmluZSBORVRTTk1QX1RTTV9TRUNVUklUWV9NT0RFTCAgICAgU05NUF9TRUNfTU9ERUxfVFNNCiAKIHN0cnVjdCBzbm1wX3NlY21vZF9kZWY7CiAKQEAgLTkwLDcgKzkxLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqb3JpZ3BkdSk7Cit0eXBlZGVmIGludCAgICAgKFNlY21vZERpc2NvdmVyeU1ldGhvZCkgKHZvaWQgKnNscCwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKTsKK3R5cGVkZWYgaW50ICAgICAoU2VjbW9kUG9zdERpc2NvdmVyeSkgKHZvaWQgKnNscCwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKTsKIAordHlwZWRlZiBpbnQgICAgIChTZWNtb2RTZXNzaW9uU2V0dXApIChuZXRzbm1wX3Nlc3Npb24gKmluX3Nlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqb3V0X3Nlc3Npb24pOwogLyoKICAqIGRlZmluaXRpb24gb2YgYSBzZWN1cml0eSBtb2R1bGUKICAqLwpAQCAtMTA1LDYgKzExMCw3IEBACiAgICAgICovCiAgICAgU2VjbW9kU2Vzc2lvbkNhbGxiYWNrICpzZXNzaW9uX29wZW47ICAgICAgICAvKiBjYWxsZWQgaW4gc25tcF9zZXNzX29wZW4oKSAgKi8KICAgICBTZWNtb2RTZXNzaW9uQ2FsbGJhY2sgKnNlc3Npb25fY2xvc2U7ICAgICAgIC8qIGNhbGxlZCBpbiBzbm1wX3Nlc3NfY2xvc2UoKSAqLworICAgIFNlY21vZFNlc3Npb25TZXR1cCAgICAqc2Vzc2lvbl9zZXR1cDsKIAogICAgIC8qCiAgICAgICogcGR1IG1hbmlwdWxhdGlvbiByb3V0aW5lcyAKQEAgLTEyNSw2ICsxMzEsMTIgQEAKICAgICAqIGVycm9yIGFuZCByZXBvcnQgaGFuZGxpbmcKICAgICAqLwogICAgU2VjbW9kSGFuZGxlUmVwb3J0ICpoYW5kbGVfcmVwb3J0OworCisgICAvKgorICAgICogZGVmYXVsdCBlbmdpbmVJRCBkaXNjb3ZlcnkgbWVjaGFuaXNtCisgICAgKi8KKyAgIFNlY21vZERpc2NvdmVyeU1ldGhvZCAqcHJvYmVfZW5naW5laWQ7CisgICBTZWNtb2RQb3N0RGlzY292ZXJ5ICAgKnBvc3RfcHJvYmVfZW5naW5laWQ7CiB9OwogCiAKQEAgLTE0NiwxNiArMTU4LDIwIEBACiAvKgogICogZmluZCBhIHNlY3VyaXR5IHNlcnZpY2UgZGVmaW5pdGlvbiAKICAqLworTkVUU05NUF9JTVBPUlQKIHN0cnVjdCBzbm1wX3NlY21vZF9kZWYgKmZpbmRfc2VjX21vZChpbnQpOwogLyoKICAqIHJlZ2lzdGVyIGEgc2VjdXJpdHkgc2VydmljZSAKICAqLwogaW50ICAgICAgICAgICAgIHVucmVnaXN0ZXJfc2VjX21vZChpbnQpOyAgICAgICAgLyogcmVnaXN0ZXIgYSBzZWN1cml0eSBzZXJ2aWNlICovCiB2b2lkICAgICAgICAgICAgaW5pdF9zZWNtb2Qodm9pZCk7CitORVRTTk1QX0lNUE9SVAordm9pZCAgICAgICAgICAgIHNodXRkb3duX3NlY21vZCh2b2lkKTsKIAogLyoKICAqIGNsZWFycyB0aGUgc2VjX21vZCBsaXN0CiAgKi8KK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgY2xlYXJfc2VjX21vZCh2b2lkKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKaW5kZXggNWE0NTY1ZC4uNzExZjY3NiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaApAQCAtNyw3ICs3LDcgQEAKIAogLyogRGVmYXVsdCBwb3J0IGhhbmRsaW5nICovCiAKLWV4dGVybiBpbnQKK05FVFNOTVBfSU1QT1JUIGludAogbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X2RvbWFpbihjb25zdCBjaGFyKiBhcHBsaWNhdGlvbiwgY29uc3QgY2hhciogZG9tYWluKTsKIAogZXh0ZXJuIGNvbnN0IGNoYXIqCkBAIC0xOSw3ICsxOSw3IEBACiBleHRlcm4gdm9pZAogbmV0c25tcF9jbGVhcl9kZWZhdWx0X2RvbWFpbih2b2lkKTsKIAotZXh0ZXJuIGludAorTkVUU05NUF9JTVBPUlQgaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KGNvbnN0IGNoYXIqIGFwcGxpY2F0aW9uLCBjb25zdCBjaGFyKiBkb21haW4sCiAJCQkJY29uc3QgY2hhciogdGFyZ2V0KTsKIApAQCAtMjksNyArMjksNyBAQAogZXh0ZXJuIHZvaWQKIG5ldHNubXBfY2xlYXJfZGVmYXVsdF90YXJnZXQodm9pZCk7CiAKLWV4dGVybiB2b2lkCitORVRTTk1QX0lNUE9SVCB2b2lkCiBuZXRzbm1wX3JlZ2lzdGVyX3NlcnZpY2VfaGFuZGxlcnModm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAppbmRleCBjZTc0MmQ1Li40MTYyODk3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaApAQCAtMiw2ICsyLDMxIEBACiAjZGVmaW5lIF9TTk1QX1RSQU5TUE9SVF9ICiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaWZkZWYgc29sYXJpczIKKyNkZWZpbmUgX1hQRzRfMgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCisjZGVmaW5lIF9MSU5VWF9TT1VSQ0VfQ09NUEFUCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2lmZGVmIHNvbGFyaXMyCisjIGlmbmRlZiBDTVNHX1NQQUNFCisjICBkZWZpbmUgQ01TR19TUEFDRShsKSBcCisgICAgICAgICAgICAoKHVuc2lnbmVkIGludClfQ01TR19IRFJfQUxJR04oc2l6ZW9mIChzdHJ1Y3QgY21zZ2hkcikgKyAobCkpKQorIyAgZGVmaW5lIENNU0dfTEVOKGwpICAgKF9DTVNHX0hEUl9BTElHTihzaXplb2Yoc3RydWN0IGNtc2doZHIpKSArIChsKSkKKyMgZW5kaWYKKyNlbmRpZgorI2VuZGlmIC8qIEhBVkVfU1lTX1NPQ0tFVF9IICovCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpAQCAtMTYsOSArNDEsMTQgQEAKIAogLyogIFNvbWUgdHJhbnNwb3J0LXR5cGUgZmxhZ3MuICAqLwogCi0jZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTQkweDAxCi0jZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTgkweDAyCi0jZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVECTB4MDQKKyNkZWZpbmUJCU5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNCSAweDAxCisjZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTgkgMHgwMgorI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRAkgMHgwNAorI2RlZmluZSAgICAgICAgIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVE1TVEFURSAgIDB4MDggIC8qIGluZGljYXRlcyBvcGFxdWUgaXMgYQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRTTSB0bVN0YXRlUmVmZXJlbmNlICovCisjZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0VNUFRZX1BLVCAweDEwCisjZGVmaW5lCQlORVRTTk1QX1RSQU5TUE9SVF9GTEFHX09QRU5FRAkgMHgyMCAgLyogZl9vcGVuIGNhbGxlZCAqLworI2RlZmluZQkJTkVUU05NUF9UUkFOU1BPUlRfRkxBR19IT1NUTkFNRQkgMHg4MCAgLyogZm9yIGZtdGFkZHIgaG9vayAqLwogCiAvKiAgVGhlIHN0YW5kYXJkIFNOTVAgZG9tYWlucy4gICovCiAKQEAgLTMzLDggKzYzLDUzIEBACiBORVRTTk1QX0lNUE9SVCBzaXplX3QgICBuZXRzbm1wRERQRG9tYWluX2xlbjsKIE5FVFNOTVBfSU1QT1JUIHNpemVfdCAgIG5ldHNubXBJUFhEb21haW5fbGVuOwogCisvKiBTdHJ1Y3R1cmUgd2hpY2ggc3RvcmVzIHRyYW5zcG9ydCBzZWN1cml0eSBtb2RlbCBzcGVjaWZpYyBwYXJhbWV0ZXJzICovCisvKiBpc21zLXNlY3NoZWxsLTExIHNlY3Rpb24gNC4xICovCisKKy8qIGNvbnRlbnRzIGRvY3VtZW50ZWQgaW4gZHJhZnQtaWV0Zi1pc21zLXRyYW5zcG9ydC1zZWN1cml0eS1tb2RlbAorICAgU2VjdGlvbiAzLjIgKi8KKy8qIG5vdGU6IFZBQ00gb25seSBhbGxvd3MgPD0gMzIgc28gdGhpcyBpcyBvdmVya2lsbCB0aWxsIGFub3RoZXIgQUNNIGNvbWVzICovCisjZGVmaW5lIE5FVFNOTVBfVE1fTUFYX1NFQ05BTUUgMjU2CisKK3R5cGVkZWYgdW5pb24gbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlX3UgeworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgc2E7CisgICAgc3RydWN0IHNvY2thZGRyX2luICBzaW47CisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgc2luNjsKKyNlbmRpZgorfSBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2U7CisKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfYWRkcl9wYWlyX3MgeworICAgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlIHJlbW90ZV9hZGRyOworICAgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlIGxvY2FsX2FkZHI7Cit9IG5ldHNubXBfYWRkcl9wYWlyOworCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyX3MgeworICAgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlIHJlbW90ZV9hZGRyOworICAgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlIGxvY2FsX2FkZHI7CisgICAgaW50IGlmX2luZGV4OworfSBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyOworCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2VfcyB7CisgICBvaWQgICAgdHJhbnNwb3J0RG9tYWluW01BWF9PSURfTEVOXTsKKyAgIHNpemVfdCB0cmFuc3BvcnREb21haW5MZW47CisgICBjaGFyICAgc2VjdXJpdHlOYW1lW05FVFNOTVBfVE1fTUFYX1NFQ05BTUVdOworICAgc2l6ZV90IHNlY3VyaXR5TmFtZUxlbjsKKyAgIGludCAgICByZXF1ZXN0ZWRTZWN1cml0eUxldmVsOworICAgaW50ICAgIHRyYW5zcG9ydFNlY3VyaXR5TGV2ZWw7CisgICBjaGFyICAgc2FtZVNlY3VyaXR5OworICAgY2hhciAgIHNlc3Npb25JRFs4XTsKKyAgIAorICAgY2hhciAgIGhhdmVfYWRkcmVzc2VzOworICAgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciBhZGRyZXNzZXM7CisKKyAgIHZvaWQgKm90aGVyVHJhbnNwb3J0T3BhcXVlOyAvKiBYWFg6IE1heSBoYXZlIG1lbSBsZWFrIGlzc3VlcyAqLworfSBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2U7CisKIC8qICBTdHJ1Y3R1cmUgd2hpY2ggZGVmaW5lcyB0aGUgdHJhbnNwb3J0LWluZGVwZW5kZW50IEFQSS4gICovCiAKK3N0cnVjdCBzbm1wX3Nlc3Npb247CisKIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgewogICAgIC8qICBUaGUgdHJhbnNwb3J0IGRvbWFpbiBvYmplY3QgaWRlbnRpZmllci4gICovCiAKQEAgLTY4LDYgKzE0MywxNCBAQAogCiAgICAgc2l6ZV90ICAgICAgICAgIG1zZ01heFNpemU7CiAKKyNpZmRlZiBGT1JfU1RBTkRBUkRTX0NPTVBMSUFOQ0VfT1JfRlVUVVJFX1VTRQorICAgIC8qIFRNIHN0YXRlIHJlZmVyZW5jZSBwZXIgSVNNUyBXRyBzb2x1dGlvbiAqLworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZjsKKyNlbmRpZgorCisgICAgLyogdHVubmVsZWQgdHJhbnNwb3J0cyAqLworICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICogYmFzZV90cmFuc3BvcnQ7CisKICAgICAvKiAgQ2FsbGJhY2tzLiAgQXJndW1lbnRzIGFyZToKICAgICAgKgkJCiAgICAgICogICAgICAgICAgICAgICJ0aGlzIiBwb2ludGVyLCBmZCwgYnVmLCBzaXplLCAqb3BhcXVlLCAqb3BhcXVlX2xlbmd0aCAgCkBAIC03OSwxNCArMTYyLDM0IEBACiAJCQkJIGludCwgdm9pZCAqKiwgaW50ICopOwogICAgIGludCAgICAgICAgICAgICAoKmZfY2xvc2UpICAoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKik7CiAKKyAgICAvKiBPcHRpb25hbDogb3BlbmluZyBjYW4gb2NjdXIgZHVyaW5nIGNyZWF0aW9uIGlmIG1vcmUgYXBwcm9wcmlhdGUgKi8KKyAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICogKCpmX29wZW4pICAgKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICopOworCiAgICAgLyogIFRoaXMgY2FsbGJhY2sgaXMgb25seSBuZWNlc3NhcnkgZm9yIHN0cmVhbS1vcmllbnRlZCB0cmFuc3BvcnRzLiAgKi8KIAogICAgIGludCAgICAgICAgICAgICAoKmZfYWNjZXB0KSAoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKik7CiAKICAgICAvKiAgT3B0aW9uYWwgY2FsbGJhY2sgdG8gZm9ybWF0IGEgdHJhbnNwb3J0IGFkZHJlc3MuICAqLwogCi0gICAgY2hhciAgICAgICAgICAgKigqZl9mbXRhZGRyKShzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLCB2b2lkICosCi0JCQkJIGludCk7CisgICAgY2hhciAgICAgICAgICAgKigqZl9mbXRhZGRyKShzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLCB2b2lkICosIGludCk7CisKKyAgICAvKiAgT3B0aW9uYWwgY2FsbGJhY2sgdG8gc3VwcG9ydCBleHRyYSBjb25maWd1cmF0aW9uIHRva2VuL3ZhbHVlIHBhaXJzICovCisgICAgLyogIHJldHVybiBub24temVybyBvbiBlcnJvciAqLworICAgIGludCAgICAgICAgICAgICgqZl9jb25maWcpKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICopOworCisgICAgLyogIE9wdGlvbmFsIGNhbGxiYWNrIHRoYXQgaXMgY2FsbGVkIGFmdGVyIHRoZSBmaXJzdCB0cmFuc3BvcnQgaXMKKyAgICAgICAgY2xvbmVkIHRvIHRoZSBzZWNvbmQgKi8KKyAgICBpbnQgICAgICAgICAgICAoKmZfY29weSkoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKik7CisKKyAgICAvKiAgU2V0dXAgaW5pdGlhbCBzZXNzaW9uIGNvbmZpZyBpZiBzcGVjaWFsIHRoaW5ncyBhcmUgbmVlZGVkICovCisgICBpbnQgICAgICAgICAgICAgKCpmX3NldHVwX3Nlc3Npb24pKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKik7CisgIAorICAgIC8qIGFsbG9jYXRlZCBob3N0IG5hbWUgaWRlbnRpZmllcjsgdXNlZCBieSBjb25maWd1cmF0aW9uIHN5c3RlbQorICAgICAgIHRvIGxvYWQgbG9jYWxob3N0LmNvbmYgZm9yIGhvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiAqLworICAgIHVfY2hhciAgICAgICAgICppZGVudGlmaWVyOyAvKiB1ZHA6bG9jYWxob3N0OjE2MSAtPiAibG9jYWxob3N0IiAqLwogfSBuZXRzbm1wX3RyYW5zcG9ydDsKIAogdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfbGlzdF9zIHsKQEAgLTExNCwxMyArMjE3LDIyIEBACiAKIH0gbmV0c25tcF90ZG9tYWluOwogCit2b2lkIGluaXRfc25tcF90cmFuc3BvcnQodm9pZCk7CiAKIC8qICBTb21lIHV0aWxpdHkgZnVuY3Rpb25zLiAgKi8KIAorY2hhciAqbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pOworCitpbnQgbmV0c25tcF90cmFuc3BvcnRfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CitpbnQgbmV0c25tcF90cmFuc3BvcnRfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCk7CisKIGludCBuZXRzbm1wX3RyYW5zcG9ydF9hZGRfdG9fbGlzdChuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICoqdHJhbnNwb3J0X2xpc3QsCiAJCQkJICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0KTsKIGludCBuZXRzbm1wX3RyYW5zcG9ydF9yZW1vdmVfZnJvbV9saXN0KG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKip0cmFuc3BvcnRfbGlzdCwKIAkJCQkgICAgICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCk7CitpbnQgbmV0c25tcF9zb2NrYWRkcl9zaXplKHN0cnVjdCBzb2NrYWRkciAqc2EpOwogCiAKIC8qCkBAIC0xMzMsNiArMjQ1LDcgQEAKIAogLyogIEZyZWUgYW4gbmV0c25tcF90cmFuc3BvcnQuICAqLwogCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUobmV0c25tcF90cmFuc3BvcnQgKnQpOwogCiAKQEAgLTE0NCw2ICsyNTcsNyBAQAogICogKm91dF9sZW4uCiAgKi8KIAorTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBuZXRzbm1wX3Rkb21haW5fc3VwcG9ydChjb25zdCBvaWQgKmluX29pZCwgc2l6ZV90IGluX2xlbiwKIAkJCQkJY29uc3Qgb2lkICoqb3V0X29pZCwgc2l6ZV90ICpvdXRfbGVuKTsKIApAQCAtMTUxLDM1ICsyNjUsNTIgQEAKICAgICAKIGludCAgICAgICAgICAgICBuZXRzbm1wX3Rkb21haW5fdW5yZWdpc3RlcihuZXRzbm1wX3Rkb21haW4gKmRvbWFpbik7CiAKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgbmV0c25tcF9jbGVhcl90ZG9tYWluX2xpc3Qodm9pZCk7CiAKIHZvaWQgICAgICAgICAgICBuZXRzbm1wX3Rkb21haW5faW5pdCh2b2lkKTsKIAorTkVUU05NUF9JTVBPUlQKIG5ldHNubXBfdHJhbnNwb3J0ICpuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0KGNvbnN0IGNoYXIgKnN0ciwKIAkJCQkJICAgICBpbnQgbG9jYWwsCiAJCQkJCSAgICAgY29uc3QgY2hhciAqZGVmYXVsdF9kb21haW4pOwogCitORVRTTk1QX0lNUE9SVAogbmV0c25tcF90cmFuc3BvcnQgKm5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbChjb25zdCBjaGFyICphcHBsaWNhdGlvbiwKIAkJCQkJCSAgY29uc3QgY2hhciAqc3RyLAogCQkJCQkJICBpbnQgbG9jYWwsCiAJCQkJCQkgIGNvbnN0IGNoYXIgKmRlZmF1bHRfZG9tYWluLAogCQkJCQkJICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7CiAKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3RyYW5zcG9ydCAqbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9vaWQoY29uc3Qgb2lkICogZG9tLAogCQkJCQkJIHNpemVfdCBkb21fbGVuLAogCQkJCQkJIGNvbnN0IHVfY2hhciAqIG8sCiAJCQkJCQkgc2l6ZV90IG9fbGVuLAogCQkJCQkJIGludCBsb2NhbCk7CiAKK05FVFNOTVBfSU1QT1JUCiBuZXRzbm1wX3RyYW5zcG9ydCoKIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50KGNvbnN0IGNoYXIqIGFwcGxpY2F0aW9uLCBjb25zdCBjaGFyKiBzdHIpOwogCitORVRTTk1QX0lNUE9SVAogbmV0c25tcF90cmFuc3BvcnQqCiBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX3NlcnZlcihjb25zdCBjaGFyKiBhcHBsaWNhdGlvbiwgY29uc3QgY2hhciogc3RyKTsKIAogbmV0c25tcF90cmFuc3BvcnQqCiBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuKGNvbnN0IGNoYXIqIGFwcGxpY2F0aW9uLCBjb25zdCBjaGFyKiBzdHIsIGludCBsb2NhbCk7CiAKK3R5cGVkZWYgc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZ19zIHsKKyAgIGNoYXIgKmtleTsKKyAgIGNoYXIgKnZhbHVlOworfSBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWc7CisgICAgCitORVRTTk1QX0lNUE9SVCAgICAKK2ludCBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWdfY29tcGFyZShuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnICpyaWdodCk7CitORVRTTk1QX0lNUE9SVAorbmV0c25tcF90cmFuc3BvcnRfY29uZmlnICpuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKGNoYXIgKmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICp2YWx1ZSk7CiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wa3NtLmgKaW5kZXggMDI4NDcyNy4uMWI1NjNmMCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcGtzbS5oCkBAIC0xMyw3ICsxMyw5IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NlY21vZF9vdXRnb2luZ19wYXJhbXMgKik7CiAgICAgaW50ICAgICAgICAgICAgIGtzbV9wcm9jZXNzX2luX21zZyhzdHJ1Y3Qgc25tcF9zZWNtb2RfaW5jb21pbmdfcGFyYW1zCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKTsKLSAgICB2b2lkICAgICAgICAgICAgaW5pdF91c20odm9pZCk7CisgICAgdm9pZCAgICAgICAgICAgIGluaXRfa3NtKHZvaWQpOworCisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX2tzbSh2b2lkKTsKIAogICAgIC8qCiAgICAgICogVGhpcyBpcyB0aGUgImtleSB1c2FnZSIgdGhhdCBpcyB1c2VkIGJ5IHRoZSBuZXcgY3J5cHRvIEFQSS4gIEl0J3MgdXNlZApAQCAtMjUsNiArMjcsOCBAQAogI2RlZmluZSBLU01fS0VZX1VTQUdFX0VOQ1JZUFRJT04JMTAzMAogI2RlZmluZSBLU01fS0VZX1VTQUdFX0NIRUNLU1VNCQkxMDMxCiAKKyNkZWZpbmUgS1NNX1NFQ19NT0RFTF9OVU1CRVIgICAgICAgICAgICBTTk1QX1NFQ19NT0RFTF9LU00KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NGE5MjgKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBIZWFkZXIgZmlsZSBmb3IgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsIHN1cHBvcnQKKyAqLworCisjaWZuZGVmIFNOTVBUU01fSAorI2RlZmluZSBTTk1QVFNNX0gKKworI2RlZmluZSBUU01fU0VDX01PREVMX05VTUJFUiAgICAgICAgICAgIFNOTVBfU0VDX01PREVMX1RTTQorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICBpbnQgICAgICAgICAgICAgdHNtX3JnZW5lcmF0ZV9vdXRfbXNnKHN0cnVjdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9zZWNtb2Rfb3V0Z29pbmdfcGFyYW1zICopOworICAgIGludCAgICAgICAgICAgICB0c21fcHJvY2Vzc19pbl9tc2coc3RydWN0IHNubXBfc2VjbW9kX2luY29taW5nX3BhcmFtcworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKik7CisgICAgdm9pZCAgICAgICAgICAgIGluaXRfdHNtKHZvaWQpOworCisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX3RzbSh2b2lkKTsKKworICAgICNkZWZpbmUgTkVUU05NUF9UTV9TQU1FX1NFQ1VSSVRZX05PVF9SRVFVSVJFRCAwCisgICAgI2RlZmluZSBORVRTTk1QX1RNX1VTRV9TQU1FX1NFQ1VSSVRZICAgICAgICAgIDEKKworICAgIC8qIGJhc2ljYWxseSB3ZSBzdG9yZSBhbG1vc3Qgbm90aGluZyBlbHNlIGJ1dCBhIHRtIHJlZiAqLworICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2VfcyB7CisgICAgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmOworICAgIH0gbmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZTsKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05NUFRTTV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAppbmRleCA1ZDE0MzAzLi45ZDY3M2NjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKQEAgLTI4LDcgKzI4LDcgQEAKICNkZWZpbmUgVVNNX01ENV9BTkRfU0hBX0FVVEhfTEVOICAgICAgICAxMiAgICAgIC8qIGJ5dGVzICovCiAjZGVmaW5lIFVTTV9NQVhfQVVUSFNJWkUgICAgICAgICAgICAgICAgVVNNX01ENV9BTkRfU0hBX0FVVEhfTEVOCiAKLSNkZWZpbmUgVVNNX1NFQ19NT0RFTF9OVU1CRVIgICAgICAgICAgICAzCisjZGVmaW5lIFVTTV9TRUNfTU9ERUxfTlVNQkVSICAgICAgICAgICAgU05NUF9TRUNfTU9ERUxfVVNNCiAKICAgICAvKgogICAgICAqIFN0cnVjdHVyZXMuCkBAIC03NSw2ICs3NSw3IEBACiAgICAgICAgIHVfY2hhciAgICAgICAgICpwcml2S2V5OwogICAgICAgICBzaXplX3QgICAgICAgICAgcHJpdktleUxlbjsKICAgICAgICAgdV9jaGFyICAgICAgICAgKnVzZXJQdWJsaWNTdHJpbmc7CisgICAgICAgIHNpemVfdCAgICAgICAgICB1c2VyUHVibGljU3RyaW5nTGVuOwogICAgICAgICBpbnQgICAgICAgICAgICAgdXNlclN0YXR1czsKICAgICAgICAgaW50ICAgICAgICAgICAgIHVzZXJTdG9yYWdlVHlwZTsKICAgICAgICAvKiB0aGVzZSBhcmUgYWN0dWFsbHkgREggKiBwb2ludGVycyBidXQgb25seSBpZiBvcGVuc3NsIGlzIGF2YWlsLiAqLwpAQCAtMTc5LDYgKzE4MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgdGltZV91aW50LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqZXJyb3IpOwogCisgICAgU2VjbW9kU2Vzc2lvbkNhbGxiYWNrIHVzbV9vcGVuX3Nlc3Npb247CiAgICAgU2VjbW9kT3V0TXNnICAgIHVzbV9zZWNtb2RfZ2VuZXJhdGVfb3V0X21zZzsKICAgICBTZWNtb2RPdXRNc2cgICAgdXNtX3NlY21vZF9nZW5lcmF0ZV9vdXRfbXNnOwogICAgIFNlY21vZEluTXNnICAgICB1c21fc2VjbW9kX3Byb2Nlc3NfaW5fbXNnOwpAQCAtMTk5LDUwICsyMDEsNzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiosIG5ldHNubXBfc2Vzc2lvbiAqLCB1X2NoYXIpOwogCiAgICAgaW50ICAgICAgICAgICAgIHVzbV9jaGVja19zZWNMZXZlbChpbnQgbGV2ZWwsIHN0cnVjdCB1c21Vc2VyICp1c2VyKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fZ2V0X3VzZXJMaXN0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9nZXRfdXNlcih1X2NoYXIgKiBlbmdpbmVJRCwgc2l6ZV90IGVuZ2luZUlETGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbmFtZSk7CiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9nZXRfdXNlcl9mcm9tX2xpc3QodV9jaGFyICogZW5naW5lSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGVuZ2luZUlETGVuLCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyTGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdXNlX2RlZmF1bHQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9hZGRfdXNlcihzdHJ1Y3QgdXNtVXNlciAqdXNlcik7CiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9hZGRfdXNlcl90b19saXN0KHN0cnVjdCB1c21Vc2VyICp1c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlckxpc3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9mcmVlX3VzZXIoc3RydWN0IHVzbVVzZXIgKnVzZXIpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9jcmVhdGVfdXNlcih2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fY3JlYXRlX2luaXRpYWxfdXNlcihjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBhdXRoUHJvdG9jb2wsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBhdXRoUHJvdG9jb2xMZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIHByaXZQcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IHByaXZQcm90b2NvbExlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdXNtVXNlciAqdXNtX2Nsb25lRnJvbV91c2VyKHN0cnVjdCB1c21Vc2VyICpmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHVzbVVzZXIgKnRvKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fcmVtb3ZlX3VzZXIoc3RydWN0IHVzbVVzZXIgKnVzZXIpOwogICAgIHN0cnVjdCB1c21Vc2VyICp1c21fcmVtb3ZlX3VzZXJfZnJvbV9saXN0KHN0cnVjdCB1c21Vc2VyICp1c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB1c21Vc2VyICoqdXNlckxpc3QpOwogICAgIGNoYXIgICAgICAgICAgICpnZXRfb2JqaWQoY2hhciAqbGluZSwgb2lkICoqIG9wdHIsIHNpemVfdCAqIGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdXNtX3NhdmVfdXNlcnMoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKnR5cGUpOwogICAgIHZvaWQgICAgICAgICAgICB1c21fc2F2ZV91c2Vyc19mcm9tX2xpc3Qoc3RydWN0IHVzbVVzZXIgKnVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnR5cGUpOwogICAgIHZvaWQgICAgICAgICAgICB1c21fc2F2ZV91c2VyKHN0cnVjdCB1c21Vc2VyICp1c2VyLCBjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0eXBlKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIFNOTVBDYWxsYmFjayAgICB1c21fc3RvcmVfdXNlcnM7Ci0gICAgc3RydWN0IHVzbVVzZXIgKnVzbV9yZWFkX3VzZXIoY2hhciAqbGluZSk7CisgICAgc3RydWN0IHVzbVVzZXIgKnVzbV9yZWFkX3VzZXIoY29uc3QgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdXNtX3BhcnNlX2NvbmZpZ191c21Vc2VyKGNvbnN0IGNoYXIgKnRva2VuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSk7CiAKICAgICB2b2lkICAgICAgICAgICAgdXNtX3NldF9wYXNzd29yZChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdXNtX3NldF91c2VyX3Bhc3N3b3JkKHN0cnVjdCB1c21Vc2VyICp1c2VyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOwogICAgIHZvaWQgICAgICAgICAgICBpbml0X3VzbSh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICBpbml0X3VzbV9jb25mKGNvbnN0IGNoYXIgKmFwcCk7CiAgICAgaW50ICAgICAgICAgICAgIGluaXRfdXNtX3Bvc3RfY29uZmlnKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOwogICAgIGludCAgICAgICAgICAgICBkZWluaXRfdXNtX3Bvc3RfY29uZmlnKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwgdm9pZCAqc2VydmVyYXJnLAogCQkJCQkgICB2b2lkICpjbGllbnRhcmcpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIGNsZWFyX3VzZXJfbGlzdCh2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzaHV0ZG93bl91c20odm9pZCk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICB1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24pOworICAgIFNlY21vZFBvc3REaXNjb3ZlcnkgdXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbl9ob29rOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHVzbV9wYXJzZV9jcmVhdGVfdXNtVXNlcihjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgY29uc3Qgb2lkICAgICAgKmdldF9kZWZhdWx0X2F1dGh0eXBlKHNpemVfdCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IG9pZCAgICAgICpnZXRfZGVmYXVsdF9wcml2dHlwZShzaXplX3QgKik7CisgICAgdm9pZCAgICAgICAgICAgIHNubXB2M19hdXRodHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpOworICAgIHZvaWQgICAgICAgICAgICBzbm1wdjNfcHJpdnR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKaW5kZXggZTI0ODQ0MS4uYTk1ODgwOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaApAQCAtOSwyNSArOSwyNCBAQAogZXh0ZXJuICAgICAgICAgICJDIiB7CiAjZW5kaWYKIAotI2RlZmluZSBNQVhfRU5HSU5FSURfTEVOR1RIIDEyOAorI2RlZmluZSBNQVhfRU5HSU5FSURfTEVOR1RIIDMyIC8qIHBlciBTTk1QLUZSQU1FV09SSy1NSUIgU25tcEVuZ2luZUlEIFRDICovCiAKICNkZWZpbmUgRU5HSU5FSURfVFlQRV9JUFY0ICAgIDEKICNkZWZpbmUgRU5HSU5FSURfVFlQRV9JUFY2ICAgIDIKICNkZWZpbmUgRU5HSU5FSURfVFlQRV9NQUNBRERSIDMKICNkZWZpbmUgRU5HSU5FSURfVFlQRV9URVhUICAgIDQKKyNkZWZpbmUgRU5HSU5FSURfVFlQRV9FWEFDVCAgIDUKICNkZWZpbmUgRU5HSU5FSURfVFlQRV9ORVRTTk1QX1JORCAxMjgKIAogI2RlZmluZQlERUZBVUxUX05JQyAiZXRoMCIKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNldHVwX2VuZ2luZUlEKHVfY2hhciAqKiBlaWRwLCBjb25zdCBjaGFyICp0ZXh0KTsKICAgICB2b2lkICAgICAgICAgICAgZW5naW5lSURfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKTsKICAgICB2b2lkICAgICAgICAgICAgZW5naW5lQm9vdHNfY29uZihjb25zdCBjaGFyICosIGNoYXIgKik7CiAgICAgdm9pZCAgICAgICAgICAgIGVuZ2luZUlEVHlwZV9jb25mKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKICAgICB2b2lkICAgICAgICAgICAgZW5naW5lSUROaWNfY29uZihjb25zdCBjaGFyICosIGNoYXIgKik7Ci0gICAgdm9pZCAgICAgICAgICAgIHNubXB2M19hdXRodHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpOwotICAgIHZvaWQgICAgICAgICAgICBzbm1wdjNfcHJpdnR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKTsKLSAgICB2b2lkICAgICAgICAgICAgdXNtX3BhcnNlX2NyZWF0ZV91c21Vc2VyKGNvbnN0IGNoYXIgKnRva2VuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgaW5pdF9zbm1wdjMoY29uc3QgY2hhciAqKTsKICAgICBpbnQgICAgICAgICAgICAgaW5pdF9zbm1wdjNfcG9zdF9jb25maWcoaW50IG1ham9yaWQsIGludCBtaW5vcmlkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsCkBAIC0zOSwxOCArMzgsMjEgQEAKICAgICB2b2lkICAgICAgICAgICAgc2h1dGRvd25fc25tcHYzKGNvbnN0IGNoYXIgKnR5cGUpOwogICAgIGludCAgICAgICAgICAgICBzbm1wdjNfc3RvcmUoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICpzZXJ2ZXJhcmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpjbGllbnRhcmcpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9sb25nICAgICAgICAgIHNubXB2M19sb2NhbF9zbm1wRW5naW5lQm9vdHModm9pZCk7CiAgICAgaW50ICAgICAgICAgICAgIHNubXB2M19jbG9uZV9lbmdpbmVJRCh1X2NoYXIgKiosIHNpemVfdCAqLCB1X2NoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzaXplX3QgICAgICAgICAgc25tcHYzX2dldF9lbmdpbmVJRCh1X2NoYXIgKiBidWYsIHNpemVfdCBidWZsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdV9jaGFyICAgICAgICAgKnNubXB2M19nZW5lcmF0ZV9lbmdpbmVJRChzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2xvbmcgICAgICAgICAgc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKHZvaWQpOwogICAgIGludCAgICAgICAgICAgICBnZXRfZGVmYXVsdF9zZWNMZXZlbCh2b2lkKTsKLSAgICBjb25zdCBvaWQgICAgICAqZ2V0X2RlZmF1bHRfYXV0aHR5cGUoc2l6ZV90ICopOwotICAgIGNvbnN0IG9pZCAgICAgICpnZXRfZGVmYXVsdF9wcml2dHlwZShzaXplX3QgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHNubXB2M19zZXRfZW5naW5lQm9vdHNBbmRUaW1lKGludCBib290cywgaW50IHR0aW1lKTsKICAgICBpbnQgICAgICAgICAgICAgZnJlZV9lbmdpbmVJRChpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsIHZvaWQgKnNlcnZlcmFyZywKIAkJCQkgIHZvaWQgKmNsaWVudGFyZyk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgcGFyc2Vfc2VjTGV2ZWxfY29uZihjb25zdCBjaGFyKiB3b3JkLCBjaGFyICpjcHRyKTsKIAogI2lmZGVmIF9fY3BsdXNwbHVzCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKaW5kZXggZjMyYzQzZi4uYWM1MDUyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaApAQCAtNDcsMTUgKzQ3LDE5IEBACiAgICAgICogUmV0dXJuczogLTEgOiBmb3JrIGZhaWxlZAogICAgICAqICAgICAgICAgICAwIDogTm8gZXJyb3JzCiAgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgbmV0c25tcF9kYWVtb25pemUoaW50IHF1aXRfaW1tZWRpYXRlbHksIGludCBzdGRlcnJfbG9nKTsKIAogICAgIC8qCiAgICAgICogRGVmaW5pdGlvbnMgZm9yIHRoZSBzeXN0ZW0gZGVwZW5kZW50IGxpYnJhcnkgZmlsZQorICAgICAqCisgICAgICogRG8gbm90IGRlZmluZSAnc3RydWN0IGRpcmVjdCcgd2hlbiBNU1ZDX1BFUkwgaXMgZGVmaW5lZCBiZWNhdXNlIGEKKyAgICAgKiBzdHJ1Y3R1cmUgd2l0aCB0aGF0IG5hbWUgaXMgYWxzbyBkZWZpbmVkIGluIHRoZSBQZXJsIGhlYWRlcgorICAgICAqIGxpYlxDT1JFXGRpcmVudC5oLiBEbyBub3QgZGVjbGFyZSBnZXR0aW1lb2ZkYXkoKSBlaXRoZXIuCiAgICAgICovCiAjaWZuZGVmIE1TVkNfUEVSTAotI2lmZGVmIFdJTjMyCiAKLSNpZm5kZWYgSEFWRV9ESVJFTlRfSCAvKiBNaW5nR1cgaGFzIGRpcmVudC5oIGJ1dCBhbHNvIGRlZmluZXMgV0lOMzIgKi8KKyNpZm5kZWYgSEFWRV9SRUFERElSCiAgICAgLyoKICAgICAgKiBzdHJ1Y3R1cmUgb2YgYSBkaXJlY3RvcnkgZW50cnkgCiAgICAgICovCkBAIC03Niw0OSArODAsOTAgQEAKICAgICAgICAgc3RydWN0IGRpcmVjdCAgIGRpcnN0cjsgLyogRGlyZWN0b3J5IHN0cnVjdHVyZSB0byByZXR1cm4gKi8KICAgICB9IERJUjsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgRElSICAgICAgICAgICAgKm9wZW5kaXIoY29uc3QgY2hhciAqZmlsZW5hbWUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IGRpcmVjdCAgKnJlYWRkaXIoRElSICogZGlycCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgY2xvc2VkaXIoRElSICogZGlycCk7Ci0jZW5kaWYgLyogSEFWRV9ESVJFTlRfSCAqLworI2VuZGlmIC8qIEhBVkVfUkVBRERJUiAqLwogCiAjaWZuZGVmIEhBVkVfR0VUVElNRU9GREFZCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHN0cnVjdCB0aW1lem9uZSAqdHopOwogI2VuZGlmCi0jaWZuZGVmIEhBVkVfU1RSTkNBU0VDTVAKKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE1TVkNfUEVSTCAqLworCisvKgorICogTm90ZTogd2hlbiBjb21waWxpbmcgTmV0LVNOTVAgd2l0aCBkbWFsbG9jIGVuYWJsZWQgb24gYSBzeXN0ZW0gd2l0aG91dAorICogc3RyY2FzZWNtcCgpIG9yIHN0cm5jYXNlY21wKCksIHRoZSBtYWNybyBIQVZFX1NUUk5DQVNFQ01QIGlzCisgKiBub3QgZGVmaW5lZCBidXQgc3RyY2FzZWNtcCgpIGFuZCBzdHJuY2FzZWNtcCgpIGFyZSBkZWZpbmVkIGFzIG1hY3JvcyBpbgorICogPGRtYWxsb2MuaD4uIEluIG9yZGVyIHRvIHByZXZlbnQgYSBjb21waWxhdGlvbiBlcnJvciwgZG8gbm90IGRlY2xhcmUKKyAqIHN0cmNhc2VjbXAoKSBvciBzdHJuY2FzZWNtcCgpIHdoZW4gdGhlIDxkbWFsbG9jLmg+IGhlYWRlciBoYXMgYmVlbiBpbmNsdWRlZC4KKyAqLworI2lmICFkZWZpbmVkKEhBVkVfU1RSTkNBU0VDTVApICYmICFkZWZpbmVkKHN0cmNhc2VjbXApCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc3RyY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpOworI2VuZGlmCisjaWYgIWRlZmluZWQoSEFWRV9TVFJOQ0FTRUNNUCkgJiYgIWRlZmluZWQoc3RybmNhc2VjbXApCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc3RybmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyLCBzaXplX3Qgbik7CiAjZW5kaWYKIAorI2lmZGVmIFdJTjMyCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBjaGFyICAgICAgICAgICAqd2luc29ja19zdGFydHVwKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHdpbnNvY2tfY2xlYW51cCh2b2lkKTsKLQogI2RlZmluZSBTT0NLX1NUQVJUVVAgd2luc29ja19zdGFydHVwKCkKICNkZWZpbmUgU09DS19DTEVBTlVQIHdpbnNvY2tfY2xlYW51cCgpCi0KICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIVdJTjMyICovCi0KICNkZWZpbmUgU09DS19TVEFSVFVQCiAjZGVmaW5lIFNPQ0tfQ0xFQU5VUAotCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdJTjMyICovCi0jZW5kaWYJCQkJLyogTVNWQ19QRVJMICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPiAgICAgLyogRm9yIGRlZmluaXRpb24gb2YgaW5fYWRkcl90ICovCiAKKyAgICAvKiBTaW1wbHkgcmVzb2x2ZSBhIGhvc3RuYW1lIGFuZCByZXR1cm4gZmlyc3QgSVB2NCBhZGRyZXNzLgorICAgICAqIFJldHVybnMgLTEgb24gZXJyb3IgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX2dldGhvc3RieW5hbWVfdjQoY29uc3QgY2hhciogbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX2FkZHJfdCAqYWRkcl9vdXQpOworCisgICAgLyoqIG5ldHNubXAgdmVyc2lvbnMgb2YgZG5zIHJlc29sb3V0aW9uLi4gbWF5IGluY2x1ZGUgRE5TU0VDIHZhbGlkYXRpb24uICovCisgICAgc3RydWN0IGFkZHJpbmZvOyAvKiBmb3J3YXJkIGRlY2xhcmUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBob3N0ZW50ICpuZXRzbm1wX2dldGhvc3RieW5hbWUoY29uc3QgY2hhciAqbmFtZSk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCBob3N0ZW50ICpuZXRzbm1wX2dldGhvc3RieWFkZHIoY29uc3Qgdm9pZCAqYWRkciwgc29ja2xlbl90IGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0eXBlKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfZ2V0YWRkcmluZm8oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2VydmljZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmhpbnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyAqKnJlcyk7CisKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGluX2FkZHJfdCAgICAgICBnZXRfbXlhZGRyKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgbG9uZyAgICAgICAgICAgIGdldF91cHRpbWUodm9pZCk7CiAKICNpZm5kZWYgSEFWRV9TVFJEVVAKICAgICBjaGFyICAgICAgICAgICAqc3RyZHVwKGNvbnN0IGNoYXIgKik7CiAjZW5kaWYKICNpZm5kZWYgSEFWRV9TRVRFTlYKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzZXRlbnYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCk7CiAjZW5kaWYKIAotICAgIGludCAgICAgICAgICAgICBjYWxjdWxhdGVfdGltZV9kaWZmKHN0cnVjdCB0aW1ldmFsICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKik7Ci0gICAgdV9pbnQgICAgICAgICAgIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGhlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgY2FsY3VsYXRlX3RpbWVfZGlmZihjb25zdCBzdHJ1Y3QgdGltZXZhbCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdV9pbnQgICAgICAgICAgIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXZhbCAqdGhlbik7CiAKICNpZm5kZWYgSEFWRV9TVFJDQVNFU1RSCiAgICAgY2hhciAgICAgICAgICAgKnN0cmNhc2VzdHIoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwpAQCAtMTI5LDE3ICsxNzQsMjQgQEAKICNpZm5kZWYgSEFWRV9TVFJUT1VMCiAgICAgdW5zaWduZWQgbG9uZyAgIHN0cnRvdWwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogI2VuZGlmCisjaWZuZGVmIEhBVkVfU1RSVE9VTEwKKyAgICBORVRTTk1QX0lNUE9SVCB1aW50NjRfdCBzdHJ0b3VsbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CisjZW5kaWYKICNpZm5kZWYgSEFWRV9TVFJUT0tfUgorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY2hhciAgICAgICAgICAgKnN0cnRva19yKGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICoqKTsKICNlbmRpZgogI2lmbmRlZiBIQVZFX1NOUFJJTlRGCiAgICAgaW50ICAgICAgICAgICAgIHNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLik7CiAjZW5kaWYKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIG1rZGlyaGllcihjb25zdCBjaGFyICpwYXRobmFtZSwgbW9kZV90IG1vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2tpcGxhc3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY29uc3QgY2hhciAgICAgKm5ldHNubXBfbWt0ZW1wKHZvaWQpOwogI2lmbmRlZiBIQVZFX1NUUkxDUFkKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHNpemVfdCAgICAgICAgICAgIHN0cmxjcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CiAjZW5kaWYKICNpZm5kZWYgSEFWRV9TVFJMQ0FUCkBAIC0xNTEsNiArMjAzLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqb3NwbXJlbHByZWZpeCk7CiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfb3Nfa2VybmVsX3dpZHRoKHZvaWQpOwogCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9zdHJfdG9fdWlkKGNvbnN0IGNoYXIgKnVzZXJvcnVpZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9zdHJfdG9fZ2lkKGNvbnN0IGNoYXIgKmdyb3Vwb3JnaWQpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM2MTM1YQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmbmRlZiBORVRTTk1QX0xJQlJBUllfVEVTVElOR19ICisjZGVmaW5lIE5FVFNOTVBfTElCUkFSWV9URVNUSU5HX0gKKworLyogVGhlc2UgYXJlIG1hY3JvcyB1c2VkIGZvciB0aGUgbmV0LXNubXAgdGVzdGluZyBpbmZyYXN0cnVjdHVyZTsgc2VlCisgICB0aGUgInRlc3RpbmciIHN1YmRpcmVjdG9yeSBvZiB0aGUgc291cmNlIGNvZGUgZm9yIGRldGFpbHMuICovCisKK3N0YXRpYyBpbnQgX190ZXN0X2NvdW50ZXIgPSAwOworc3RhdGljIGludCBfX2RpZF9wbGFuID0gMDsKKworI2RlZmluZSBPSyhpc29rLCBkZXNjcmlwdGlvbikgZG8geyBwcmludGYoIiVzICVkIC0gJXNcbiIsICgoaXNvaykgPyAib2siIDogIm5vdCBvayIpLCArK19fdGVzdF9jb3VudGVyLCBkZXNjcmlwdGlvbik7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgT0tGKGlzb2ssIGRlc2NyaXB0aW9uKSBkbyB7IHByaW50ZigiJXMgJWQgLSAiLCAoKGlzb2spID8gIm9rIiA6ICJub3Qgb2siKSwgKytfX3Rlc3RfY291bnRlcik7IHByaW50ZiBkZXNjcmlwdGlvbjsgcHJpbnRmKCJcbiIpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFBMQU4obnVtYmVyKSBkbyB7IHByaW50ZigiMS4uJWRcbiIsIG51bWJlcik7IF9fZGlkX3BsYW4gPSAxOyB9IHdoaWxlICgwKQorCisjZW5kaWYgLyogTkVUU05NUF9MSUJSQVJZX1RFU1RJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAppbmRleCA5M2UwNWIwLi4yNjM0YjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaApAQCAtMTk5LDYgKzE5OSw3IEBACiAgICAgICogUHJvdG90eXBlcy4KICAgICAgKi8KIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfcmVhbGxvYyh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuKTsKIAogICAgIHZvaWQgICAgICAgICAgICBmcmVlX3plcm8odm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSk7CkBAIC0yMDgsNiArMjA5LDE1IEBACiAgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAqbmV0c25tcF9tZW1kdXAoY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBzaXplKTsKIAorICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2NoZWNrX2RlZmluZWRuZXNzKGNvbnN0IHZvaWQgKnBhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuZ3RoKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdV9pbnQgICAgICAgICAgIG5ldHNubXBfYmluYXJ5X3RvX2hleCh1X2NoYXIgKiogZGVzdCwgc2l6ZV90ICpkZXN0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4pOworCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB1X2ludCAgICAgICAgICAgYmluYXJ5X3RvX2hleChjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHV0KTsKICAgICAgICAgICAgICAgICAgICAgLyogcHJlZmVycmVkICovCkBAIC0yMTUsMzkgKzIyNSw1OSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpoZXgsIGNvbnN0IGNoYXIgKmRlbGltKTsKICAgICAgICAgICAgICAgICAgICAgLyogY2FsbHMgbmV0c25tcF9oZXhfdG9fYmluYXJ5IHcvZGVsaW0gb2YgIiAiICovCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgICAgICAgICAgICAgc25tcF9oZXhfdG9fYmluYXJ5KHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvZmZzZXQsIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaGV4KTsKICAgICAgICAgICAgICAgICAgICAgLyogaGFuZGxlcyBvZGQgbGVuZ3RocyAqLworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIGhleF90b19iaW5hcnkyKGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqb3V0cHV0KTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfZGVjaW1hbF90b19iaW5hcnkodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRlY2ltYWwpOwogI2RlZmluZSBzbm1wX2NzdHJjYXQoYixsLG8sYSxzKSBzbm1wX3N0cmNhdChiLGwsbyxhLChjb25zdCB1X2NoYXIgKilzKQorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHNubXBfc3RyY2F0KHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBzKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICpuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbChjb25zdCB1X2NoYXIgKiBmcm9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZnJvbV9sZW4pOwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgZHVtcF9jaHVuayhjb25zdCBjaGFyICpkZWJ1Z3Rva2VuLCBjb25zdCBjaGFyICp0aXRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBidWYsIGludCBzaXplKTsKICAgICBjaGFyICAgICAgICAgICAqZHVtcF9zbm1wRW5naW5lSUQoY29uc3QgdV9jaGFyICogYnVmLCBzaXplX3QgKiBidWZsZW4pOwogCisgICAgLyoqIEEgcG9pbnRlciB0byBhbiBvcGFxdWUgdGltZSBtYXJrZXIgdmFsdWUuICovCiAgICAgdHlwZWRlZiB2b2lkICAgKm1hcmtlcl90OwotICAgIG1hcmtlcl90ICAgICAgICBhdGltZV9uZXdNYXJrZXIodm9pZCk7Ci0gICAgdm9pZCAgICAgICAgICAgIGF0aW1lX3NldE1hcmtlcihtYXJrZXJfdCBwbSk7Ci0gICAgbG9uZyAgICAgICAgICAgIGF0aW1lX2RpZmYobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCk7Ci0gICAgdV9sb25nICAgICAgICAgIHVhdGltZV9kaWZmKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpOyAgICAgICAvKiAxLzEwMDB0aCBzZWMgKi8KLSAgICB1X2xvbmcgICAgICAgICAgdWF0aW1lX2hkaWZmKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpOyAgICAgIC8qIDEvMTAwdGggc2VjICovCi0gICAgaW50ICAgICAgICAgICAgIGF0aW1lX3JlYWR5KG1hcmtlcl90IHBtLCBpbnQgZGVsdGFUKTsKLSAgICBpbnQgICAgICAgICAgICAgdWF0aW1lX3JlYWR5KG1hcmtlcl90IHBtLCB1bnNpZ25lZCBpbnQgZGVsdGFUKTsKKyAgICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X21hcmtlcl90OwogCi0gICAgaW50ICAgICAgICAgICAgIG1hcmtlcl90dGlja3MobWFya2VyX3QgcG0pOwotICAgIGludCAgICAgICAgICAgICB0aW1ldmFsX3R0aWNrcyhzdHJ1Y3QgdGltZXZhbCAqdHYpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbWFya2VyX3QgICAgICAgIGF0aW1lX25ld01hcmtlcih2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBhdGltZV9zZXRNYXJrZXIobWFya2VyX3QgcG0pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jayhzdHJ1Y3QgdGltZXZhbCogdHYpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIobWFya2VyX3QgKnBtKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGxvbmcgICAgICAgICAgICBhdGltZV9kaWZmKGNvbnN0X21hcmtlcl90IGZpcnN0LCBjb25zdF9tYXJrZXJfdCBzZWNvbmQpOworICAgIHVfbG9uZyAgICAgICAgICB1YXRpbWVfZGlmZihjb25zdF9tYXJrZXJfdCBmaXJzdCwgY29uc3RfbWFya2VyX3Qgc2Vjb25kKTsgICAgICAgLyogMS8xMDAwdGggc2VjICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB1X2xvbmcgICAgICAgICAgdWF0aW1lX2hkaWZmKGNvbnN0X21hcmtlcl90IGZpcnN0LCBjb25zdF9tYXJrZXJfdCBzZWNvbmQpOyAgICAgIC8qIDEvMTAwdGggc2VjICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgYXRpbWVfcmVhZHkoY29uc3RfbWFya2VyX3QgcG0sIGludCBkZWx0YV9tcyk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoY29uc3RfbWFya2VyX3QgcG0sIGludCBkZWx0YV9tcyk7CisgICAgaW50ICAgICAgICAgICAgIHVhdGltZV9yZWFkeShjb25zdF9tYXJrZXJfdCBwbSwgdW5zaWduZWQgaW50IGRlbHRhX21zKTsKKworICAgIGludCAgICAgICAgICAgICBtYXJrZXJfdHRpY2tzKGNvbnN0X21hcmtlcl90IHBtKTsKKyAgICBpbnQgICAgICAgICAgICAgdGltZXZhbF90dGlja3MoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KTsKICAgICBORVRTTk1QX0lNUE9SVAogICAgIGNoYXIgICAgICAgICAgICAqbmV0c25tcF9nZXRlbnYoY29uc3QgY2hhciAqbmFtZSk7CiAgICAgTkVUU05NUF9JTVBPUlQKQEAgLTI1Niw2ICsyODYsOSBAQAogCiAgICAgaW50ICAgICAgICAgICAgIG5ldHNubXBfYWRkcnN0cl9odG9uKGNoYXIgKnB0ciwgc2l6ZV90IGxlbik7CiAKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3MoY29uc3QgY2hhciAqdGltZV9zdHJpbmcpOworCiAjaWZkZWYgX19jcGx1c3BsdXMKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTc0MjkxCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKQEAgLTAsMCArMSw3MCBAQAorI2lmbmRlZiBORVRfU05NUF9MSUJSQVJZX1RZUEVTX0gKKyNkZWZpbmUgTkVUX1NOTVBfTElCUkFSWV9UWVBFU19ICisKKyNpZm5kZWYgTkVUX1NOTVBfQ09ORklHX0gKKyNlcnJvciAiUGxlYXNlIGluY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPiBiZWZvcmUgdGhpcyBmaWxlIgorI2VuZGlmCisKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9pbmRleF9zIHsKKyAgICBzaXplX3QgICAgICAgICAgbGVuOworICAgIG9pZCAgICAgICAgICAgICpvaWRzOworfSBuZXRzbm1wX2luZGV4OworCit0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3ZvaWRfYXJyYXlfcyB7CisgICAgc2l6ZV90ICAgICAgICAgIHNpemU7CisgICAgdm9pZCAgICAgICAgICAqKmFycmF5OworfSBuZXRzbm1wX3ZvaWRfYXJyYXk7CisKKy8qCisgKiByZWZlcmVuY2VzIHRvIHZhcmlvdXMgdHlwZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfdm9pZCB7CisgICAgdm9pZCAgICAgICAgICAgKnZhbDsKK30gbmV0c25tcF9yZWZfdm9pZDsKKwordHlwZWRlZiB1bmlvbiB7CisgICAgdV9sb25nICAgICAgICAgIHVsOworICAgIHVfaW50ICAgICAgICAgICB1aTsKKyAgICB1X3Nob3J0ICAgICAgICAgdXM7CisgICAgdV9jaGFyICAgICAgICAgIHVjOworICAgIGxvbmcgICAgICAgICAgICBzbDsKKyAgICBpbnQgICAgICAgICAgICAgc2k7CisgICAgc2hvcnQgICAgICAgICAgIHNzOworICAgIGNoYXIgICAgICAgICAgICBzYzsKKyAgICBjaGFyICAgICAgICAgICAqY3A7CisgICAgdm9pZCAgICAgICAgICAgKnZwOworfSBuZXRzbm1wX2N2YWx1ZTsKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfc2l6ZV90X3MgeworICAgIHNpemVfdCAgICAgICAgICB2YWw7Cit9ICAgICAgICAgICAgICAqbmV0c25tcF9yZWZfc2l6ZV90OworCisvKgorICogU3RydWN0dXJlIGZvciBob2xkaW5nIGEgc2V0IG9mIGZpbGUgZGVzY3JpcHRvcnMsIHNpbWlsYXIgdG8gZmRfc2V0LgorICoKKyAqIFRoaXMgc3RydWN0dXJlIGhvd2V2ZXIgY2FuIGhvbGQgc28tY2FsbGVkIGxhcmdlIGZpbGUgZGVzY3JpcHRvcnMKKyAqICg+PSBGRF9TRVRTSVpFIG9yIDEwMjQpIG9uIFVuaXggc3lzdGVtcyBvciBtb3JlIHRoYW4gRkRfU0VUU0laRSAoNjQpCisgKiBzb2NrZXRzIG9uIFdpbmRvd3Mgc3lzdGVtcy4KKyAqCisgKiBJdCBpcyBzYWZlIHRvIGFsbG9jYXRlIHRoaXMgc3RydWN0dXJlIG9uIHRoZSBzdGFjay4KKyAqCisgKiBUaGlzIHN0cnVjdHVyZSBtdXN0IGJlIGluaXRpYWxpemVkIGJ5IGNhbGxpbmcgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgpCisgKiBhbmQgbXVzdCBiZSBjbGVhbmVkIHVwIHZpYSBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCkuIElmIHRoaXMgbGFzdAorICogZnVuY3Rpb24gaXMgbm90IGNhbGxlZCB0aGlzIG1heSByZXN1bHQgaW4gYSBtZW1vcnkgbGVhay4KKyAqCisgKiBUaGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdHVyZSBhcmU6CisgKiBsZnNfc2V0c2l6ZTogbWF4aW11bSBzZXQgc2l6ZS4KKyAqIGxzZl9zZXRwdHI6ICBwb2ludHMgdG8gbGZzX3NldCBpZiBsZnNfc2V0c2l6ZSA8PSBGRF9TRVRTSVpFLCBhbmQgb3RoZXJ3aXNlCisgKiAgICAgICAgICAgICAgdG8gZHluYW1pY2FsbHkgYWxsb2NhdGVkIG1lbW9yeS4KKyAqIGxmc19zZXQ6ICAgICBmaWxlIGRlc2NyaXB0b3IgLyBzb2NrZXQgc2V0IGRhdGEgaWYgbGZzX3NldHNpemUgPD0gRkRfU0VUU0laRS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9sYXJnZV9mZF9zZXRfcyB7CisgICAgdW5zaWduZWQgICAgICAgIGxmc19zZXRzaXplOworICAgIGZkX3NldCAgICAgICAgICpsZnNfc2V0cHRyOworICAgIGZkX3NldCAgICAgICAgICBsZnNfc2V0OworfSBuZXRzbm1wX2xhcmdlX2ZkX3NldDsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NOTVBfTElCUkFSWV9UWVBFU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAppbmRleCA3Mzk3OWQzLi4zMjlkNDM1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKQEAgLTEzLDIyICsxMywzNCBAQAogICAgICAgICAvKgogICAgICAgICAgKiBmcm9tIHNubXBfYXBpLmggCiAgICAgICAgICAqLworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9kdW1wX3BhY2tldChpbnQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX2dldF9kdW1wX3BhY2tldCh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfcXVpY2tfcHJpbnQoaW50KTsKK05FVFNOTVBfSU1QT1JUCiBpbnQgICAgICAgICAgICAgc25tcF9nZXRfcXVpY2tfcHJpbnQodm9pZCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X3N1ZmZpeF9vbmx5KGludCk7CitORVRTTk1QX0lNUE9SVAogaW50ICAgICAgICAgICAgIHNubXBfZ2V0X3N1ZmZpeF9vbmx5KHZvaWQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9mdWxsX29iamlkKGludCk7CiBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZnVsbF9vYmppZCh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfcmFuZG9tX2FjY2VzcyhpbnQpOworTkVUU05NUF9JTVBPUlQKIGludCAgICAgICAgICAgICBzbm1wX2dldF9yYW5kb21fYWNjZXNzKHZvaWQpOwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGZyb20gcGFyc2UuaCAKICAgICAgICAgICovCitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X21pYl93YXJuaW5ncyhpbnQpOworTkVUU05NUF9JTVBPUlQKIHZvaWQgICAgICAgICAgICBzbm1wX3NldF9taWJfZXJyb3JzKGludCk7CitORVRTTk1QX0lNUE9SVAogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKGludCk7CiB2b2lkICAgICAgICAgICAgc25tcF9zZXRfbWliX2NvbW1lbnRfdGVybShpbnQpOwogdm9pZCAgICAgICAgICAgIHNubXBfc2V0X21pYl9wYXJzZV9sYWJlbChpbnQpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKaW5kZXggYTM0ZGM2OS4uYTViZTZhYyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCkBAIC0xMjYsMTIgKzEyNiwxNSBAQAogICAgICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKm5leHQ7CiAgICAgfTsKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveVZpZXdFbnRyeShjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveUFsbFZpZXdFbnRyaWVzKHZvaWQpOwogCiAjZGVmaW5lIFZBQ01fTU9ERV9GSU5EICAgICAgICAgICAgICAgIDAKICNkZWZpbmUgVkFDTV9NT0RFX0lHTk9SRV9NQVNLICAgICAgICAgMQogI2RlZmluZSBWQUNNX01PREVfQ0hFQ0tfU1VCVFJFRSAgICAgICAyCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZhY21fZ2V0Vmlld0VudHJ5KGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCk7CiAgICAgLyoKQEAgLTE0MCw2ICsxNDMsNyBAQAogICAgICAqIFJldHVybnMgTlVMTCBpZiB0aGF0IGVudHJ5IGRvZXMgbm90IGV4aXN0LgogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBpbnQgdmFjbV9jaGVja1N1YnRyZWUoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90KTsKIAogICAgIC8qCkBAIC0xNTUsNiArMTU5LDcgQEAKICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICBkaXNhbGxvd2VkIHBvcnRpb25zLgogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkCiAgICAgICAgICAgICAgICAgICAgIHZhY21fc2NhblZpZXdJbml0KHZvaWQpOwogICAgIC8qCkBAIC0xNjQsNiArMTY5LDcgQEAKICAgICAgKi8KIAogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZhY21fc2NhblZpZXdOZXh0KHZvaWQpOwogICAgIC8qCiAgICAgICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5leHQgdmlld0VudHJ5LgpAQCAtMTc0LDYgKzE4MCw3IEBACiAgICAgICogdmlld19zY2FuSW5pdCgpIHN0YXJ0cyB0aGUgc2NhbiBvdmVyLgogICAgICAqLwogCisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZhY21fY3JlYXRlVmlld0VudHJ5KGNvbnN0IGNoYXIgKiwgb2lkICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QpOwogICAgIC8qCkBAIC0xODIsMjIgKzE4OSwzNCBAQAogICAgICAqIFRoZSBzdGF0dXMgb2YgdGhpcyBlbnRyeSBpcyBjcmVhdGVkIGFzIGludmFsaWQuCiAgICAgICovCiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lHcm91cEVudHJ5KGludCwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lBbGxHcm91cEVudHJpZXModm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICp2YWNtX2NyZWF0ZUdyb3VwRW50cnkoaW50LCBjb25zdCBjaGFyICopOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSAqdmFjbV9nZXRHcm91cEVudHJ5KGludCwgY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3NjYW5Hcm91cEluaXQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICp2YWNtX3NjYW5Hcm91cE5leHQodm9pZCk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX2Rlc3Ryb3lBY2Nlc3NFbnRyeShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50LCBpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fZGVzdHJveUFsbEFjY2Vzc0VudHJpZXModm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqdmFjbV9jcmVhdGVBY2Nlc3NFbnRyeShjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5ICp2YWNtX2dldEFjY2Vzc0VudHJ5KGNvbnN0IGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGludCwgaW50KTsKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3NjYW5BY2Nlc3NJbml0KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKnZhY21fc2NhbkFjY2Vzc05leHQodm9pZCk7CiAKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9kZXN0cm95U2VjdXJpdHlFbnRyeShjb25zdCBjaGFyICopOwpAQCAtMjA1LDYgKzIyNCw3IEBACiAgICAgc3RydWN0IHZhY21fc2VjdXJpdHlFbnRyeSAqdmFjbV9nZXRTZWN1cml0eUVudHJ5KGNvbnN0IGNoYXIgKik7CiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fc2NhblNlY3VyaXR5SW5pdCh2b2lkKTsKICAgICBzdHJ1Y3QgdmFjbV9zZWN1cml0eUVudHJ5ICp2YWNtX3NjYW5TZWN1cml0eUVudHJ5KHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgaW50ICAgICAgICAgICAgIHZhY21faXNfY29uZmlndXJlZCh2b2lkKTsKIAogICAgIHZvaWQgICAgICAgICAgICB2YWNtX3NhdmUoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKnR5cGUpOwpAQCAtMjE3LDE2ICsyMzcsMjMgQEAKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9zYXZlX2dyb3VwKHN0cnVjdCB2YWNtX2dyb3VwRW50cnkgKmdyb3VwX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKnR5cGUpOwogCi0gICAgdm9pZCAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX3ZpZXcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOwotICAgIHZvaWQgICAgICAgICAgICB2YWNtX3BhcnNlX2NvbmZpZ19ncm91cChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfdmlldyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfZ3JvdXAoY29uc3QgY2hhciAqdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmxpbmUpOworICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgdm9pZCAgICAgICAgICAgIHZhY21fcGFyc2VfY29uZmlnX2FjY2Vzcyhjb25zdCBjaGFyICp0b2tlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKmxpbmUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGluZSk7CisgICAgTkVUU05NUF9JTVBPUlQKICAgICB2b2lkICAgICAgICAgICAgdmFjbV9wYXJzZV9jb25maWdfYXV0aF9hY2Nlc3MoY29uc3QgY2hhciAqdG9rZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqbGluZSk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIGludCAgICAgICAgICAgICBzdG9yZV92YWNtKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmNsaWVudGFyZyk7CiAKKyAgICBORVRTTk1QX0lNUE9SVAogICAgIHN0cnVjdCB2YWNtX3ZpZXdFbnRyeSAqbmV0c25tcF92aWV3X2dldChzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKmhlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnZpZXdOYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiB2aWV3U3VidHJlZSwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmggYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oCmluZGV4IGMxZGQ5M2YuLjkwZmQ3MjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5waXBlLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaApAQCAtMzUsNiArMzUsNyBAQAogI2lmbmRlZiBXSU5QSVBFX0gKICNkZWZpbmUgV0lOUElQRV9ICiAKK05FVFNOTVBfSU1QT1JUCiBpbnQgY3JlYXRlX3dpbnBpcGVfdHJhbnNwb3J0KGludCAqcGlwZWZkcyk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaCBiL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS93aW5zZXJ2aWNlLmgKaW5kZXggMWM0NzYzYS4uNzYwODBkNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3dpbnNlcnZpY2UuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvd2luc2VydmljZS5oCkBAIC05NSwxNyArOTUsNiBAQAogICBWT0lEIERpc3BsYXlFcnJvciAoTFBDVFNUUiBwc3pUaXRsZSwgaW50IHF1aXRlKTsKIAogICAvKgotICAgKiBUbyB1cGRhdGUgd2luZG93cyBzZXJ2aWNlIHN0YXR1cyB0byBTQ00gCi0gICAqLwotICBzdGF0aWMgQk9PTCBVcGRhdGVTZXJ2aWNlU3RhdHVzIChEV09SRCBkd1N0YXR1cywgRFdPUkQgZHdFcnJvckNvZGUsCi0JCQkJICAgRFdPUkQgZHdXYWl0SGludCk7Ci0KLSAgLyoKLSAgICogVG8gUmVwb3J0IGN1cnJlbnQgc2VydmljZSBzdGF0dXMgdG8gU0NNIAotICAgKi8KLSAgc3RhdGljIEJPT0wgUmVwb3J0Q3VycmVudFNlcnZpY2VTdGF0dXMgKFZPSUQpOwotCi0gIC8qCiAgICAqIFNlcnZpY2UgTWFpbiBmdW5jdGlvbiwgIFdoaWNoIHdpbGwgc3Bhd24gYSB0aHJlYWQsIGFuZCBjYWxscyB0aGUKICAgICogU2VydmljZSBydW4gcGFydAogICAgKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKaW5kZXggMDlmZjVmNS4uM2I1NGU4MyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKQEAgLTcsMTggKzcsMTAxIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICAvKiBJbml0aWFsaXNhdGlvbiBhbmQgU2h1dGRvd24gKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBhZGRfbWliZGlyKGNvbnN0IGNoYXIgKik7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBuZXRzbm1wX2luaXRfbWliKHZvaWQpOworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfbWliKHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIGluaXRfbWliX2ludGVybmFscyh2b2lkKTsKKyNlbmRpZgorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNodXRkb3duX21pYih2b2lkKTsKKworICAgICAvKiBSZWFkaW5nIGFuZCBQYXJzaW5nIE1JQnMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCB0cmVlICAgICpuZXRzbm1wX3JlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKik7CisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgdHJlZSAgICAqcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqKTsKKyNlbmRpZgorCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBzdHJ1Y3QgdHJlZSAgICAqcmVhZF9taWIoY29uc3QgY2hhciAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHN0cnVjdCB0cmVlICAgICpyZWFkX2FsbF9taWJzKHZvaWQpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgYWRkX21vZHVsZV9yZXBsYWNlbWVudChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGludCk7CisKKyAgICAgICAgIC8qIGZyb20gdWNkLWNvbXBhdC5oICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfbWliX3dhcm5pbmdzKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfbWliX2Vycm9ycyhpbnQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKGludCk7CisKKworICAgICAvKiBTZWFyY2hpbmcgdGhlIE1JQiBUcmVlICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgcmVhZF9vYmppZChjb25zdCBjaGFyICosIG9pZCAqLCBzaXplX3QgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBvaWQgICAgICAgICAgICAqc25tcF9wYXJzZV9vaWQoY29uc3QgY2hhciAqLCBvaWQgKiwgc2l6ZV90ICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIGdldF9tb2R1bGVfbm9kZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgb2lkICosIHNpemVfdCAqKTsKKworICAgICAvKiBPdXRwdXQgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBwcmludF9taWIoRklMRSAqIGZwKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHByaW50X29iamlkKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4pOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgZnByaW50X29iamlkKEZJTEUgKiBmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgIHNucHJpbnRfb2JqaWQoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbik7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBwcmludF9kZXNjcmlwdGlvbihvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgZnByaW50X2Rlc2NyaXB0aW9uKEZJTEUgKiBmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgc25wcmludF9kZXNjcmlwdGlvbihjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBpbnQgd2lkdGgpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCiAgICAgLyoKLSAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQotICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgotICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSByb3V0aW5lcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgdGhlCi0gICAgICogIEFQSSB3aWxsIGJlIGlkZW50aWZpZWQsIGFuZCBsaXN0ZWQgaGVyZSBkaXJlY3RseS4KKyAgICAgKiAgICBIYXZpbmcgZXh0cmFjdGVkIHRoZSBtYWluICgicHVibGljIEFQSSIpIGNhbGxzIHJlbGV2YW50CisgICAgICogIHRvIHRoaXMgYXJlYSBvZiB0aGUgTmV0LVNOTVAgcHJvamVjdCwgdGhlIG5leHQgc3RlcCBpcyB0bworICAgICAqICBpZGVudGlmeSB0aGUgcmVsYXRlZCAicHVibGljIGludGVybmFsIEFQSSIgcm91dGluZXMuCiAgICAgICoKLSAgICAgKiAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBoZWFkZXIgZmlsZSBpcyBhIHBsYWNlaG9sZGVyLAotICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCisgICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGdhdGhlcmVkCisgICAgICogIHRvZ2V0aGVyIGludG8gYSBjb21wYW5pb24gJ2xpYnJhcnkvbWliX2FwaS5oJyBoZWFkZXIgZmlsZS4KKyAgICAgKiAgW09yIHNvbWUgc3VpdGFibGUgbmFtZV0KKyAgICAgKgorICAgICAqICAgIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZQorICAgICAqICB0cmFkaXRpb25hbCBoZWFkZXJzIHRoYXQgcHJvdmlkZWQgdGhlIGFib3ZlIGRlZmluaXRpb25zCisgICAgICogIHdpbGwgcHJvYmFibHkgYWxzbyBjb3ZlciB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgQVBJIGNhbGxzLgorICAgICAqICBIZW5jZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZToKICAgICAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KLQogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWliLmg+CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaD4KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluCmluZGV4IDNjNWQ3YzIuLjFkYjAyMzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4KKysrIGIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbgpAQCAtMSw2ICsxLDEwIEBACi0vKiBpbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluLiAgR2VuZXJhdGVkIGZyb20gY29uZmlndXJlLmluIGJ5IGF1dG9oZWFkZXIuICAqLworLyogaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5hYyBieSBhdXRvaGVhZGVyLiAgKi8KIC8qIAogICogbmV0LXNubXAgY29uZmlndXJhdGlvbiBoZWFkZXIgZmlsZQorICoKKyAqIE5PVEU6IERPIE5PVCBFRElUIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYXMgeW91ciBjaGFuZ2VzCisgKiAgICAgICB3aWxsIGJlIG92ZXJ3cml0dGVuLiBUaGlzIGNvbnRlbnQgaXMgaW4gYWNjb25maWcuaCBhbmQgbWVyZ2VkCisgKiAgICAgICBpbnRvIGluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmguaW4gYnkgYXV0b2hlYWRlci4KICAqLwogLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwpAQCAtMjQsMjQ2ICsyOCwyOSBAQAogICovCiAjaWZuZGVmIE5FVFNOTVBfTk9fQVVUT0NPTkZfREVGSU5JVElPTlMKIAotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50MzJfdCAqLwotI3VuZGVmIEhBVkVfSU5UMzJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50MzJfdCAqLwotI3VuZGVmIEhBVkVfVUlOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdV9pbnQzMl90ICovCi0jdW5kZWYgSEFWRV9VX0lOVDMyX1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50NjRfdCAqLwotI3VuZGVmIEhBVkVfSU5UNjRfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgdHlwZSB1aW50NjRfdCAqLwotI3VuZGVmIEhBVkVfVUlOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgdV9pbnQ2NF90ICovCi0jdW5kZWYgSEFWRV9VX0lOVDY0X1QKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHR5cGUgaW50cHRyX3QgKi8KLSN1bmRlZiBIQVZFX0lOVFBUUl9UCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0eXBlIHVpbnRwdHJfdCAqLwotI3VuZGVmIEhBVkVfVUlOVFBUUl9UCi0KLS8qIGdvdCBzb2NrbGVuX3Q/ICovCi0jdW5kZWYgSEFWRV9TT0NLTEVOX1QKLQotLyogZ290IGluX2FkZHJfdD8gKi8KLSN1bmRlZiBIQVZFX0lOX0FERFJfVAotCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgZ2V0ZGV2cygpICovCi0jdW5kZWYgSEFWRV9HRVRERVZTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSBkZXZzdGF0X2dldGRldnMoKSAqLwotI3VuZGVmIEhBVkVfREVWU1RBVF9HRVRERVZTCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSA8bmV0aW5ldC9pbl9wY2IuaD4gKi8KLSN1bmRlZiBIQVZFX05FVElORVRfSU5fUENCX0gKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIDxzeXMvZGlza2xhYmVsLmg+ICovCi0jdW5kZWYgSEFWRV9TWVNfRElTS0xBQkVMX0gKLQotLyogZGVmaW5lIGlmIHlvdXIgY29tcGlsZXIgKHByb2Nlc3NvcikgZGVmaW5lcyBfX0ZVTkNUSU9OX18gZm9yIHlvdSAqLwotI3VuZGVmIEhBVkVfQ1BQX1VOREVSQkFSX0ZVTkNUSU9OX0RFRklORUQKLQotLyogb24gYWl4LCBpZiB5b3UgaGF2ZSBwZXJmc3RhdCAqLwotI3VuZGVmIEhBVkVfUEVSRlNUQVQKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGxpYmRiLCBsaWJubSBvciBsaWJycG0sIHJlc3BlY3RpdmVseSAqLwotI3VuZGVmIEhBVkVfTElCREIKLSN1bmRlZiBIQVZFX0xJQk5NCi0jdW5kZWYgSEFWRV9MSUJSUE0KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHBrZ2luZm8gKi8KLSN1bmRlZiBIQVZFX1BLR0lORk8KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldGhvc3RieW5hbWUgKi8KLSN1bmRlZiBIQVZFX0dFVEhPU1RCWU5BTUUKLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBwZXJsX2V2YWxfcHYoKSBmdW5jdGlvbiAqLwotI3VuZGVmIEhBVkVfUEVSTF9FVkFMX1BWX0xDCi0KLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgUGVybF9ldmFsX3B2KCkgZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX1BFUkxfRVZBTF9QVl9VQwotCi0vKiBwcmludGluZyBzeXN0ZW0gKi8KLSN1bmRlZiBIQVZFX0xQU1RBVAotI3VuZGVmIExQU1RBVF9QQVRICi0jdW5kZWYgSEFWRV9QUklOVENBUAotLyogVXNlIGRtYWxsb2MgdG8gZG8gbWFsbG9jIGRlYnVnZ2luZz8gKi8KLSN1bmRlZiBIQVZFX0RNQUxMT0NfSAotCi0vKiBsb2NhdGlvbiBvZiBVTklYIGtlcm5lbCAqLwotI2RlZmluZSBLRVJORUxfTE9DICIvdm11bml4IgotCi0vKiBsb2NhdGlvbiBvZiBtb3VudCB0YWJsZSBsaXN0ICovCi0jZGVmaW5lIEVUQ19NTlRUQUIgIi9ldGMvbW50dGFiIgotCi0vKiBsb2NhdGlvbiBvZiBzd2FwIGRldmljZSAob2sgaWYgbm90IGZvdW5kKSAqLwotI3VuZGVmIERNRU1fTE9DCi0KLS8qIENvbW1hbmQgdG8gZ2VuZXJhdGUgcHMgb3V0cHV0LCB0aGUgZmluYWwgY29sdW1uIG11c3QgYmUgdGhlIHByb2Nlc3MKLSAgIG5hbWUgd2l0aE9VVCBhcmd1bWVudHMgKi8KLSNkZWZpbmUgUFNDTUQgIi9iaW4vcHMiCi0KLS8qIFdoZXJlIGlzIHRoZSB1bmFtZSBjb21tYW5kICovCi0jZGVmaW5lIFVOQU1FUFJPRyAiL2Jpbi91bmFtZSIKLQotLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgbGludXggYW5kIC9wcm9jL25ldC9kZXYgaGFzIHRoZSBjb21wcmVzc2VkCi0gICBmaWVsZCwgd2hpY2ggZXhpc3RzIGluIGxpbnV4IGtlcm5lbHMgMi4yIGFuZCBncmVhdGVyLiAqLwotI3VuZGVmIFBST0NfTkVUX0RFVl9IQVNfQ09NUFJFU1NFRAotCi0vKiBkZWZpbmUgcnRlbnRyeSB0byBvcnRlbnRyeSBvbiBTWVNWIG1hY2hpbmVzIChhbHBoYXMpICovCi0jdW5kZWYgUlRFTlRSWQotCi0vKiBVc2UgQlNEIDQuNCByb3V0aW5nIHRhYmxlIGVudHJpZXM/ICovCi0jdW5kZWYgUlRFTlRSWV80XzQKLQotLyogRG9lcyBzdHJ1Y3Qgc2lnYWN0aW9uIGhhdmUgYSBzYV9zaWdhY3Rpb24gZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NJR0FDVElPTl9IQVNfU0FfU0lHQUNUSU9OCi0KLS8qIERvZXMgc3RydWN0IHRtIGhhdmUgYSB0bV9nbXRvZmYgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1RNX0hBU19UTV9HTVRPRkZGCi0KLS8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9sZW4gZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9MRU4KLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2ZhbWlseTIgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBoYXZlIGEgc3NfZmFtaWx5IGZpZWxkPyAqLwotI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19TU19GQU1JTFkKLQotLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBoYXZlIGEgX19zc19mYW1pbHkgZmllbGQ/ICovCi0jdW5kZWYgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX19fU1NfRkFNSUxZCi0KLS8qIERvZXMgc3RydWN0IGluNl9hZGRyIGhhdmUgYSBzNl91bi5zYTZfbGFkZCBmaWVsZD8gKi8KLSN1bmRlZiBTVFJVQ1RfSU42X0FERFJfSEFTX1M2X1VOX1NBNl9MQUREUgotCi0vKiBydGVudHJ5IHN0cnVjdHVyZSB0ZXN0cyAqLwotI3VuZGVmIFJURU5UUllfUlRfTkVYVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9EU1QKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVU5JVAotI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VU0UKLSN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfUkVGQ05UCi0jdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0hBU0gKLQotLyogaWZuZXQgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9TUEVFRAotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfVFlQRQotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSU1DQVNUUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSVFEUk9QUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTEFTVENIQU5HRV9UVl9TRUMKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfTlNFQwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTk9QUk9UTwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUKLSN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09CWVRFUwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSUJZVEVTCi0jdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVAotCi0vKiB0Y3BzdGF0LnRjcHNfcmN2bWVtZHJvcCAqLwotI3VuZGVmIFNUUlVDVF9UQ1BTVEFUX0hBU19UQ1BTX1JDVk1FTURST1AKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19ESVNDQVJECi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUCi0KLS8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0jdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUQkNBU1QKLQotLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLSN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19GVUxMU09DSwotCi0vKiBhcnBoZC5hdF9uZXh0ICovCi0jdW5kZWYgU1RSVUNUX0FSUEhEX0hBU19BVF9ORVhUCi0KLS8qIGlmYWRkci5pZmFfbmV4dCAqLwotI3VuZGVmIFNUUlVDVF9JRkFERFJfSEFTX0lGQV9ORVhUCi0KLS8qIGlmbmV0LmlmX210dSAqLwotI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTVRVCi0KLS8qIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQgKi8KLSN1bmRlZiBTVFJVQ1RfU1dERVZUX0hBU19TV19OQkxLU0VOQUJMRUQKLQotLyogbmxpc3Qubl92YWx1ZSAqLwotI3VuZGVmIFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRQotCi0vKiBubGlzdDY0Lm5fdmFsdWUgKi8KLSN1bmRlZiBTVFJVQ1RfTkxJU1Q2NF9IQVNfTl9WQUxVRQotCi0vKiBpcHN0YXQgc3RydWN0dXJlIHRlc3RzICovCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGT1JXQVJECi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0NBTlRGUkFHCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0RFTElWRVJFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHRFJPUFBFRAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19GUkFHVElNRU9VVAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19MT0NBTE9VVAotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1BST1RPCi0jdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUk9VVEUKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0RST1BQRUQKLSN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfT0ZSQUdNRU5UUwotI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19SRUFTU0VNQkxFRAotCi0vKiB2ZnNzdGF0LmZfZnJzaXplICovCi0jdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRlJTSVpFCi0KLS8qIHZmc3N0YXQuZl9maWxlcyAqLwotI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTCi0KLS8qIHN0YXRmcyBpbm9kZSBzdHJ1Y3R1cmUgdGVzdHMqLwotI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMKLSN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZGUkVFCi0jdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GQVZBSUwKLQotLyogZGVzX2tzX3N0cnVjdC53ZWFrX2tleSAqLwotI3VuZGVmIFNUUlVDVF9ERVNfS1NfU1RSVUNUX0hBU19XRUFLX0tFWQotCi0vKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZCAqLwotI3VuZGVmIElGTkVUX05FRURTX0tFUk5FTAotCi0vKiBzeXNjdGwgd29ya3MgdG8gZ2V0IGJvb3R0aW1lLCBldGMuLi4gKi8KLSN1bmRlZiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMCi0KLS8qIGRlZmluZSBpZiBTSU9DR0lGQUREUiBleGlzdHMgaW4gc3lzL2lvY3RsLmggKi8KLSN1bmRlZiBTWVNfSU9DVExfSF9IQVNfU0lPQ0dJRkFERFIKLQotLyogRGVmaW5lIGlmIHN0YXRmcyB0YWtlcyAyIGFyZ3MgYW5kIHRoZSBzZWNvbmQgYXJndW1lbnQgaGFzCi0gICB0eXBlIHN0cnVjdCBmc19kYXRhLiBbVWx0cml4XSAqLwotI3VuZGVmIFNUQVRfU1RBVEZTX0ZTX0RBVEEKLQotLyogRGVmaW5lIGlmIHRoZSBUQ1AgdGltZXIgY29uc3RhbnRzIGluIDxuZXRpbmV0L3RjcF90aW1lci5oPgotICAgZGVwZW5kIG9uIHRoZSBpbnRlZ2VyIHZhcmlhYmxlIGBoeicuICBbRnJlZUJTRCA0LnhdICovCi0jdW5kZWYgVENQVFZfTkVFRFNfSFoKLQotLyogTm90LXRvLWJlLWNvbXBpbGVkIG1hY3JvcyBmb3IgdXNlIGJ5IGNvbmZpZ3VyZSBvbmx5ICovCi0jZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpCi0jZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpCi0jZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KQotI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseikKLSNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCkKLSNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCkKLSNkZWZpbmUgY29uZmlnX2Vycm9yKHgpCi0jZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpCi0gIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChtaW5ndzMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjsiCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOycKLSNlbHNlCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjoiCi0jZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOicKLSNlbmRpZgotCiAvKiBkZWZpbml0aW9ucyBhZGRlZCBieSBjb25maWd1cmUgb24tdGhlLWZseSAqLwogCisjZGVmaW5lIGNvbmZpZ19iZWxvbmdzX2luKHgpCisKKyNkZWZpbmUgY29uZmlnX2V4Y2x1ZGUoeCkKKworI2RlZmluZSBjb25maWdfYXJjaF9yZXF1aXJlKHgseSkKKworI2RlZmluZSBjb25maWdfdmVyc2lvbl9yZXF1aXJlKHgpCisKKyNkZWZpbmUgY29uZmlnX3JlcXVpcmUoeCkKKworI2RlZmluZSBjb25maWdfYWRkX21pYih4KQorCisjZGVmaW5lIGNvbmZpZ19wYXJzZV9kb3RfY29uZih3LHgseSx6KQorCisjZGVmaW5lIGNvbmZpZ19lcnJvcih4KQorCisjZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpCisKKy8qIERlZmluZSBpZiBidWlsZGluZyB1bml2ZXJzYWwgKGludGVybmFsIGhlbHBlciBtYWNybykgKi8KKyN1bmRlZiBBQ19BUFBMRV9VTklWRVJTQUxfQlVJTEQKKwogLyogRGVmaW5lIHRvIG9uZSBvZiBgX2dldGI2NycsIGBHRVRCNjcnLCBgZ2V0YjY3JyBmb3IgQ3JheS0yIGFuZCBDcmF5LVlNUAogICAgc3lzdGVtcy4gVGhpcyBmdW5jdGlvbiBpcyByZXF1aXJlZCBmb3IgYGFsbG9jYS5jJyBzdXBwb3J0IG9uIHRob3NlIHN5c3RlbXMuCiAgICAqLwpAQCAtMjcyLDYgKzU5LDIxIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB1c2luZyBgYWxsb2NhLmMnLiAqLwogI3VuZGVmIENfQUxMT0NBCiAKKy8qIGxvY2F0aW9uIG9mIHN3YXAgZGV2aWNlICovCisjdW5kZWYgRE1FTV9MT0MKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IGxvY2FsIEROU1NFQyB2YWxpZGF0aW9uIHN1cHBvcnQgKi8KKyN1bmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorCisvKiBFbnZpcm9ubWVudCBzZXBhcmF0b3IgY2hhcmFjdGVyIHN1cnJvdW5kZWQgYnkgZG91YmxlIHF1b3Rlcy4gKi8KKyN1bmRlZiBFTlZfU0VQQVJBVE9SCisKKy8qIEVudmlyb25tZW50IHNlcGFyYXRvciBjaGFyYWN0ZXIgc3Vycm91bmRlZCBieSBzaW5nbGUgcXVvdGVzLiAqLworI3VuZGVmIEVOVl9TRVBBUkFUT1JfQ0hBUgorCisvKiBsb2NhdGlvbiBvZiBtb3VudCB0YWJsZSBsaXN0ICovCisjdW5kZWYgRVRDX01OVFRBQgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEFFU19jZmIxMjhfZW5jcnlwdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQKIApAQCAtMjkxLDggKzkzLDggQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNtL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfQVNNX1RZUEVTX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBiY29weScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9CQ09QWQorLyogRGVmaW5lIGlmIHVzaW5nIE1ZX0lOSVQoKSBjYXVzZXMgYSBsaW5rZXIgZXJyb3IgKi8KKyN1bmRlZiBIQVZFX0JST0tFTl9MSUJNWVNRTENMSUVOVAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNnZXRuZXh0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0NHRVRORVhUCkBAIC0zMDAsOSArMTAyLDI4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNob3duJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0NIT1dOCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2xvY2tfZ2V0dGltZScgbGlicmFyeSAqLworI3VuZGVmIEhBVkVfQ0xPQ0tfR0VUVElNRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNsb3NlZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0NMT1NFRElSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8Y29tX2Vyci5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0NPTV9FUlJfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgQ291bnRlcjY0Jy4gKi8KICN1bmRlZiBIQVZFX0NPVU5URVI2NAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYHNlbnNvcnNfZ2V0X2FsbF9zdWJmZWF0dXJlcycsCisgICBhbmQgdG8gMCBpZiB5b3UgZG9uJ3QuICovCisjdW5kZWYgSEFWRV9ERUNMX1NFTlNPUlNfR0VUX0FMTF9TVUJGRUFUVVJFUworCisvKiBkZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBJUkVfQ0FDSEUgZGVmaW5lZCBpbiA8aW5ldC9pcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RFRklORURfSVJFX0NBQ0hFCisKKy8qIGRlZmluZSBpZiB5b3UgaGF2ZSBkZXZzdGF0X2dldGRldnMoKSAqLworI3VuZGVmIEhBVkVfREVWU1RBVF9HRVRERVZTCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KICAgICovCiAjdW5kZWYgSEFWRV9ESVJFTlRfSApAQCAtMzEzLDkgKzEzNCwxOCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbG9wZW4nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRExPUEVOCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0RNQUxMT0NfSAorCisvKiBTZXQgaWYgdGhlIGRwa2ctcXVlcnkgY29tbWFuZCBpcyBhdmFpbGFibGUgKi8KKyN1bmRlZiBIQVZFX0RQS0dfUVVFUlkKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxlcnIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9FUlJfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGV0L2NvbV9lcnIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9FVF9DT01fRVJSX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBldmFsX3B2JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0VWQUxfUFYKIApAQCAtMzI1LDI0ICsxNTUsNDIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRVZQX01EX0NUWF9kZXN0cm95JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0VWUF9NRF9DVFhfREVTVFJPWQogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgRVZQX3NoYTIyNC8yNTYgaW4gb3BlbnNzbCAqLworI3VuZGVmIEhBVkVfRVZQX1NIQTIyNAorCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgRVZQX3NoYTM4NC8yNTYgaW4gb3BlbnNzbCAqLworI3VuZGVmIEhBVkVfRVZQX1NIQTM4NAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4ZWN2JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0VYRUNWCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZmNudGwuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9GQ05UTF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZmdldGNfdW5sb2NrZWQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkdFVENfVU5MT0NLRUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmbG9ja2ZpbGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRkxPQ0tGSUxFCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZm9yaycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9GT1JLCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZnN0YWIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9GU1RBQl9ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZnVubG9ja2ZpbGUnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfRlVOTE9DS0ZJTEUKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnYWlfc3RyZXJyb3InIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0FJX1NUUkVSUk9SCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0YWRkcmluZm8nIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUQUREUklORk8KIAorLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldGRldnMoKSAqLworI3VuZGVmIEhBVkVfR0VUREVWUworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGR0YWJsZXNpemUnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VURFRBQkxFU0laRQogCkBAIC0zNTIsNiArMjAwLDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldGdybmFtJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVEdSTkFNCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5YWRkcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllBRERSCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRIT1NUQllOQU1FCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0aG9zdGJ5bmFtZTInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUSE9TVEJZTkFNRTIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRob3N0bmFtZScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9HRVRIT1NUTkFNRQogCkBAIC0zNjQsNiArMjIxLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0bW50ZW50JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVE1OVEVOVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG9wdCcgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9HRVRPUFQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxnZXRvcHQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9HRVRPUFRfSAogCkBAIC0zNzksNiArMjM5LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0dGltZW9mZGF5JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0dFVFRJTUVPRkRBWQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldHZmc3N0YXQnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfR0VUVkZTU1RBVAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGdycC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0dSUF9ICiAKQEAgLTM4OCwyOSArMjUxLDMyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX2ZyZWVuYW1laW5kZXgnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfSUZfRlJFRU5BTUVJTkRFWAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX2luZGV4dG9uYW1lJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lGX0lOREVYVE9OQU1FCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfbmFtZWluZGV4JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0lGX05BTUVJTkRFWAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWV0b2luZGV4JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5kZXgnIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfSU5ERVgKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW5ldC9jb21tb24uaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9JTkVUX0NPTU1PTl9ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW5ldC9pcC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX0lORVRfSVBfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGluZXQvbWliMi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0lORVRfTUlCMl9ICiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBpbnQxNl90Jy4gKi8KLSN1bmRlZiBIQVZFX0lOVDE2X1QKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaW5ldF9udG9wJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lORVRfTlRPUAogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MzJfdCcuICovCi0jdW5kZWYgSEFWRV9JTlQzMl9UCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZXRfcHRvbicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9JTkVUX1BUT04KIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDY0X3QnLiAqLwotI3VuZGVmIEhBVkVfSU5UNjRfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50OF90Jy4gKi8KLSN1bmRlZiBIQVZFX0lOVDhfVAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbml0Z3JvdXBzJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0lOSVRHUk9VUFMKIAogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludG1heF90Jy4gKi8KICN1bmRlZiBIQVZFX0lOVE1BWF9UCkBAIC00MjEsMjEgKzI4Nyw0MiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpbnR0eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0lOVFRZUEVTX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGluX2FkZHJfdCcuICovCisjdW5kZWYgSEFWRV9JTl9BRERSX1QKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpb2N0bHMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9JT0NUTFNfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlvLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfSU9fSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlwaGxwYXBpLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfSVBITFBBUElfSAorCisvKiBTZXQgaWYgSVBfUEtUSU5GTyBpcyB1c2FibGUgKi8KKyN1bmRlZiBIQVZFX0lQX1BLVElORk8KKworLyogU2V0IGlmIElQX1JFQ1ZEU1RBRERSIGlzIHVzYWJsZSAqLworI3VuZGVmIEhBVkVfSVBfUkVDVkRTVEFERFIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBraW5mb19nZXRfY3B1cycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9LSU5GT19HRVRfQ1BVUwogCisvKiBEZWZpbmUgaWYgeW91IGhhdmUgL2Rldi9rbWVtICovCisjdW5kZWYgSEFWRV9LTUVNCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga25saXN0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0tOTElTVAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleScgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9LUkI1X0FVVEhfQ09OX0dFVFNFTkRTVUJLRVkKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxrc3RhdC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0tTVEFUX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fZ2V0cHJvYzInIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfS1ZNX0dFVFBST0MyCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtX2dldHByb2NzJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0tWTV9HRVRQUk9DUwogCkBAIC00NDgsMzAgKzMzNSwyNCBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm1fb3BlbmZpbGVzJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0tWTV9PUEVORklMRVMKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBPcGVuU1NMIGxpYnJhcnkgKC1sY3J5cHRvIG9yIC1sZWF5MzIpLiAqLwogI3VuZGVmIEhBVkVfTElCQ1JZUFRPCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZGwnIGxpYnJhcnkgKC1sZGwpLiAqLwotI3VuZGVmIEhBVkVfTElCREwKLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBlZmVuY2UnIGxpYnJhcnkgKC1sZWZlbmNlKS4gKi8KLSN1bmRlZiBIQVZFX0xJQkVGRU5DRQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVsZicgbGlicmFyeSAoLWxlbGYpLiAqLwogI3VuZGVmIEhBVkVfTElCRUxGCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3N0YXQnIGxpYnJhcnkgKC1sa3N0YXQpLiAqLwogI3VuZGVmIEhBVkVfTElCS1NUQVQKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrdm0nIGxpYnJhcnkgKC1sa3ZtKS4gKi8KLSN1bmRlZiBIQVZFX0xJQktWTQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG0nIGxpYnJhcnkgKC1sbSkuICovCi0jdW5kZWYgSEFWRV9MSUJNCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWxkJyBsaWJyYXJ5ICgtbG1sZCkuICovCiAjdW5kZWYgSEFWRV9MSUJNTEQKIAorLyogRGVmaW5lIHRvIDEgaWYgPG5ldGxpbmsvbmV0bGluay5oPiBwcm92aWRlcyB0aGUgbGlibmwzIEFQSSAqLworI3VuZGVmIEhBVkVfTElCTkwzCisKKy8qIGRlZmluZSBpZiB5b3UgaGF2ZSBsaWJubSAqLworI3VuZGVmIEhBVkVfTElCTk0KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBuc2wnIGxpYnJhcnkgKC1sbnNsKS4gKi8KICN1bmRlZiBIQVZFX0xJQk5TTAogCkBAIC00ODEsMTIgKzM2MiwzMyBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwa2NzMTEnIGxpYnJhcnkgKC1scGtjczExKS4gKi8KICN1bmRlZiBIQVZFX0xJQlBLQ1MxMQogCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgQlNEIHBrZy1uZyAqLworI3VuZGVmIEhBVkVfTElCUEtHCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcHRocmVhZCcgbGlicmFyeSAoLWxwdGhyZWFkKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlBUSFJFQUQKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBycG0nIGxpYnJhcnkgKC1scnBtKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlJQTQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYFJTQWdsdWUnIGxpYnJhcnkgKC1sUlNBZ2x1ZSkuICovCiAjdW5kZWYgSEFWRV9MSUJSU0FHTFVFCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcnNhcmVmJyBsaWJyYXJ5ICgtbHJzYXJlZikuICovCiAjdW5kZWYgSEFWRV9MSUJSU0FSRUYKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzcmVzJyBsaWJyYXJ5ICgtbHNyZXMpLiAqLworI3VuZGVmIEhBVkVfTElCU1JFUworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNzaDInIGxpYnJhcnkgKC1sc3NoMikuICovCisjdW5kZWYgSEFWRV9MSUJTU0gyCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3NsJyBsaWJyYXJ5ICgtbHNzbCkuICovCisjdW5kZWYgSEFWRV9MSUJTU0wKKworLyogRGVmaW5lIHRvIDEgaWYgeW91ciBgc3NsJyBsaWJyYXJ5IHN1cHBvcnRzIERUTFMgKC1sc3NsKS4gKi8KKyN1bmRlZiBIQVZFX0xJQlNTTF9EVExTCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGltaXRzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTElNSVRTX0gKIApAQCAtNDk2LDYgKzM5OCwxMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9oZHJlZy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX0hEUkVHX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC9uZXRsaW5rLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElOVVhfTkVUTElOS19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bGludXgvcnRuZXRsaW5rLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTElOVVhfUlRORVRMSU5LX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW51eC90YXNrcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX0xJTlVYX1RBU0tTX0gKIApAQCAtNTA1LDYgKzQxMywxMiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9MT0NBTFRJTUVfUgogCisvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgbG9uZyBsb25nIGludCcuICovCisjdW5kZWYgSEFWRV9MT05HX0xPTkdfSU5UCisKKy8qIFNldCBpZiB0aGUgbHBzdGF0IGNvbW1hbmQgaXMgYXZhaWxhYmxlICovCisjdW5kZWYgSEFWRV9MUFNUQVQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBscmFuZDQ4JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0xSQU5ENDgKIApAQCAtNTIzLDE1ICs0MzcsMTIgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTUFMTE9DX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jcHknIGZ1bmN0aW9uLiAqLwotI3VuZGVmIEhBVkVfTUVNQ1BZCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9NRU1NT1ZFCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfTUVNT1JZX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYG1pYjJfaXBJZlN0YXRzRW50cnlfdCcuICovCisjdW5kZWYgSEFWRV9NSUIyX0lQSUZTVEFUU0VOVFJZX1QKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBta3N0ZW1wJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX01LU1RFTVAKIApAQCAtNTQ0LDYgKzQ1NSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG10YWIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9NVEFCX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuYnV0aWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9OQlVUSUxfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5kaXIuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLiAqLwogI3VuZGVmIEhBVkVfTkRJUl9ICiAKQEAgLTU3NCw2ICs0ODgsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0Ni90Y3A2X3Zhci5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVElORVQ2X1RDUDZfVkFSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2ljbXA2Lmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JQ01QNl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pY21wX3Zhci5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVElORVRfSUNNUF9WQVJfSAogCkBAIC01ODMsNiArNTAwLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pbi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVElORVRfSU5fSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW5fcGNiLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfTkVUSU5FVF9JTl9QQ0JfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaW5fc3lzdG0uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lOX1NZU1RNX0gKIApAQCAtNjI1LDYgKzU0NSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGlweC9pcHguaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRJUFhfSVBYX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRsaW5rL25ldGxpbmsuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRMSU5LX05FVExJTktfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9pZl9hcnAuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRfSUZfQVJQX0gKIApAQCAtNjQ2LDYgKzU2OSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9yb3V0ZS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVF9ST1VURV9ICiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBuZmRzX3QnLiAqLworI3VuZGVmIEhBVkVfTkZEU19UCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbmxpc3QnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfTkxJU1QKIApAQCAtNjU4LDYgKzU4NCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgb2ZmNjRfdCcuICovCiAjdW5kZWYgSEFWRV9PRkY2NF9UCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgb3BlbmRpcicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9PUEVORElSCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9hZXMuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9PUEVOU1NMX0FFU19ICiAKQEAgLTY3NiwyMSArNjA1LDQ1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9zcmVsZGF0ZS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX09TUkVMREFURV9ICiAKKy8qIGRlZmluZSBpZiB5b3UgaGF2ZSBwY2lfbG9va3VwX25hbWUoKSAqLworI3VuZGVmIEhBVkVfUENJX0xPT0tVUF9OQU1FCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGNpL3BjaS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BDSV9QQ0lfSAogCisvKiBvbiBhaXgsIGlmIHlvdSBoYXZlIHBlcmZzdGF0ICovCisjdW5kZWYgSEFWRV9QRVJGU1RBVAorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBgdGhlIHBlcmxfZXZhbF9wdicgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QRVJMX0VWQUxfUFZfTEMKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBQZXJsX2V2YWxfcHYnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfUEVSTF9FVkFMX1BWX1VDCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGljbC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1BJQ0xfSAogCisvKiBkZWZpbmUgaWYgeW91IGhhdmUgcGtnaW5mbyAqLworI3VuZGVmIEhBVkVfUEtHSU5GTworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHBrZ2luZm8uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9QS0dJTkZPX0gKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxwa2dsb2NzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfUEtHTE9DU19ICiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8cGtnLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfUEtHX0gKKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwb2xsJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BPTEwKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwcmVhZDY0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BSRUFENjQKIAorLyogU2V0IGlmIC9ldGMvcHJpbnRjYXAgZXhpc3RzICovCisjdW5kZWYgSEFWRV9QUklOVENBUAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHB0aHJlYWQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9QVEhSRUFEX0gKIApAQCAtNzAzLDYgKzY1Niw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHJhbmRvbScgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9SQU5ET00KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWFkZGlyJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1JFQURESVIKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGByZWdjb21wJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1JFR0NPTVAKIApAQCAtNzE1LDYgKzY3MSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJwbS9oZWFkZXIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9SUE1fSEVBREVSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxycG0vcnBtZmlsZXV0aWwuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9SUE1fUlBNRklMRVVUSUxfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHJwbS9ycG1saWIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9SUE1fUlBNTElCX0gKIApAQCAtNzMwLDYgKzY4OSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbGVjdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TRUxFQ1QKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzZW5zb3JzL3NlbnNvcnMuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TRU5TT1JTX1NFTlNPUlNfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNldGVudicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TRVRFTlYKIApAQCAtNzY5LDkgKzczMSwxNSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdob2xkJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NJR0hPTEQKIAorLyogRGVmaW5lIGlmIFNJR0hVUCBpcyBkZWZpbmVkIGluIDxzaWduYWwuaD4uICovCisjdW5kZWYgSEFWRV9TSUdIVVAKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWduYWwnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0lHTkFMCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2lncHJvY21hc2snIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU0lHUFJPQ01BU0sKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzaWdzZXQnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU0lHU0VUCiAKQEAgLTc4MSw3ICs3NDksMTAgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc29ja2V0JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NPQ0tFVAogCi0vKiBEZWZpbmUgaWYgdHlwZSBzc2l6ZV90IGlzIGF2YWlsYWJsZSAqLworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHNvY2tsZW5fdCcuICovCisjdW5kZWYgSEFWRV9TT0NLTEVOX1QKKworLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHNzaXplX3QnLiAqLwogI3VuZGVmIEhBVkVfU1NJWkVfVAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0YXRmcycgZnVuY3Rpb24uICovCkBAIC03OTAsOSArNzYxLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RhdHZmcycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TVEFUVkZTCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYXJnLmg+IGhlYWRlciBmaWxlLiAqLwotI3VuZGVmIEhBVkVfU1REQVJHX0gKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TVERJTlRfSAogCkBAIC04MDUsOSArNzczLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZXN0cicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TVFJDQVNFU1RSCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2hyJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX1NUUkNIUgotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9TVFJEVVAKIApAQCAtODM4LDEyICs4MDMsMjIwIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvdWwnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU1RSVE9VTAogCi0vKiBEZWZpbmUgdG8gMSBpZiBgc3BlZWRfaGknIGlzIG1lbWJlciBvZiBgc3RydWN0IGV0aHRvb2xfY21kJy4gKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RydG91bGwnIGZ1bmN0aW9uLiAqLworI3VuZGVmIEhBVkVfU1RSVE9VTEwKKworLyogRGVmaW5lIHRvIDEgaWYgYGF0X25leHQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgYXJwaGQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQKKworLyogRGVmaW5lIHRvIDEgaWYgYHdlYWtfa2V5JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGRlc19rc19zdHJ1Y3QnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0RFU19LU19TVFJVQ1RfV0VBS19LRVkKKworLyogRGVmaW5lIHRvIDEgaWYgYGRfdHlwZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBkaXJlbnQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0RJUkVOVF9EX1RZUEUKKworLyogRGVmaW5lIHRvIDEgaWYgYHNwZWVkX2hpJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGV0aHRvb2xfY21kJy4gKi8KICN1bmRlZiBIQVZFX1NUUlVDVF9FVEhUT09MX0NNRF9TUEVFRF9ISQogCi0vKiBEZWZpbmUgdG8gMSBpZiBgc2luNl9zY29wZV9pZCcgaXMgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHJfaW42Jy4gKi8KKy8qIERlZmluZSB0byAxIGlmIGBpZmFfbmV4dCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZmFkZHInLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGQUREUl9JRkFfTkVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfYWRkcmhlYWQudHFoX2ZpcnN0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSSEVBRF9UUUhfRklSU1QKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2FkZHJsaXN0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSTElTVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfYmF1ZHJhdGUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9iYXVkcmF0ZS5pZnNfdmFsdWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFX0lGU19WQUxVRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfaWJ5dGVzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JQllURVMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2ltY2FzdHMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lNQ0FTVFMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2lxZHJvcHMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lRRFJPUFMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX2xhc3RjaGFuZ2UudHZfbnNlYycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9OU0VDCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9sYXN0Y2hhbmdlLnR2X3NlYycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTEFTVENIQU5HRV9UVl9TRUMKKworLyogRGVmaW5lIHRvIDEgaWYgYGlmX210dScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTVRVCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9ub3Byb3RvJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9OT1BST1RPCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl9vYnl0ZXMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09CWVRFUworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfb21jYXN0cycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfT01DQVNUUworCisvKiBEZWZpbmUgdG8gMSBpZiBgaWZfc3BlZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaWZuZXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1NQRUVECisKKy8qIERlZmluZSB0byAxIGlmIGBpZl90eXBlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlmbmV0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9UWVBFCisKKy8qIERlZmluZSB0byAxIGlmIGBpZl94bmFtZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpZm5ldCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwNnNfZXh0aGRydG9vbG9uZyAnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXA2c3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVA2U1RBVF9JUDZTX0VYVEhEUlRPT0xPTkdfCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfY2FudGZvcndhcmQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGT1JXQVJECisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfY2FudGZyYWcnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGUkFHCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfZGVsaXZlcmVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19ERUxJVkVSRUQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19mcmFnZHJvcHBlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR0RST1BQRUQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19mcmFnbWVudGVkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHTUVOVEVECisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfZnJhZ3RpbWVvdXQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdUSU1FT1VUCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfbG9jYWxvdXQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0xPQ0FMT1VUCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfbm9wcm90bycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9QUk9UTworCisvKiBEZWZpbmUgdG8gMSBpZiBgaXBzX25vcm91dGUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX05PUk9VVEUKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19vZHJvcHBlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0RST1BQRUQKKworLyogRGVmaW5lIHRvIDEgaWYgYGlwc19vZnJhZ21lbnRzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRlJBR01FTlRTCisKKy8qIERlZmluZSB0byAxIGlmIGBpcHNfcmVhc3NlbWJsZWQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgaXBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX1JFQVNTRU1CTEVECisKKy8qIERlZmluZSB0byAxIGlmIGBtX2NsZnJlZScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBtYnN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX01CU1RBVF9NX0NMRlJFRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgbV9jbHVzdGVycycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBtYnN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX01CU1RBVF9NX0NMVVNURVJTCisKKy8qIERlZmluZSB0byAxIGlmIGBtX21idWZzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG1ic3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfTUJTVEFUX01fTUJVRlMKKworLyogRGVmaW5lIHRvIDEgaWYgYG5fdmFsdWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgbmxpc3Q2NCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfTkxJU1Q2NF9OX1ZBTFVFCisKKy8qIERlZmluZSB0byAxIGlmIGBuX3ZhbHVlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IG5saXN0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFCisKKy8qIERlZmluZSB0byAxIGlmIGBydF9kc3QnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcnRlbnRyeScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QKKworLyogRGVmaW5lIHRvIDEgaWYgYHJ0X2hhc2gnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgcnRlbnRyeScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNICisKKy8qIERlZmluZSB0byAxIGlmIGBydF9uZXh0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHJ0ZW50cnknLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfTkVYVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgcnRfcmVmY250JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHJ0ZW50cnknLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfUkVGQ05UCisKKy8qIERlZmluZSB0byAxIGlmIGBydF91bml0JyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHJ0ZW50cnknLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVU5JVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgcnRfdXNlJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHJ0ZW50cnknLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfVVNFCisKKy8qIERlZmluZSB0byAxIGlmIGBzYV9zaWdhY3Rpb24nIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc2lnYWN0aW9uJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TSUdBQ1RJT05fU0FfU0lHQUNUSU9OCisKKy8qIERlZmluZSB0byAxIGlmIGBzaW42X3Njb3BlX2lkJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHNvY2thZGRyX2luNicuICovCiAjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQKIAorLyogRGVmaW5lIHRvIDEgaWYgYHNhX2xlbicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzb2NrYWRkcicuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfTEVOCisKKy8qIERlZmluZSB0byAxIGlmIGBzYV91bmlvbi5zYV9nZW5lcmljLnNhX2ZhbWlseTInIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QKKyAgIHNvY2thZGRyJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIKKworLyogRGVmaW5lIHRvIDEgaWYgYHNzX2ZhbWlseScgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWQorCisvKiBEZWZpbmUgdG8gMSBpZiBgX19zc19mYW1pbHknIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9fX1NTX0ZBTUlMWQorCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9mYXZhaWwnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdGZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GQVZBSUwKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZmZyZWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdGZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GRlJFRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9maWxlcycgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZJTEVTCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2ZsYWdzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXRmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkxBR1MKKworLyogRGVmaW5lIHRvIDEgaWYgYGZfZnJzaXplJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXRmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRlJTSVpFCisKKy8qIERlZmluZSB0byAxIGlmIGBmX2ZpbGVzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHN0YXR2ZnMnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GSUxFUworCisvKiBEZWZpbmUgdG8gMSBpZiBgZl9mcnNpemUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3Qgc3RhdHZmcycuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZSU0laRQorCisvKiBEZWZpbmUgdG8gMSBpZiBgbW50X2RpcicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzdGF0dmZzJy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX01OVF9ESVIKKworLyogRGVmaW5lIHRvIDEgaWYgYHN3X25ibGtzZW5hYmxlZCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBzd2RldnQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1NXREVWVF9TV19OQkxLU0VOQUJMRUQKKworLyogRGVmaW5lIHRvIDEgaWYgYHRjcF9yY3ZtZW1kcm9wJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHRjcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1RDUFNUQVRfVENQX1JDVk1FTURST1AKKworLyogRGVmaW5lIHRvIDEgaWYgYHR6X2RzdHRpbWUnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdGltZXpvbmUnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1RJTUVaT05FX1RaX0RTVFRJTUUKKworLyogRGVmaW5lIHRvIDEgaWYgYHRtX2dtdG9mZicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB0bScuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisKKy8qIERlZmluZSB0byAxIGlmIGB1ZHBzX2Rpc2NhcmQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdWRwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0RJU0NBUkQKKworLyogRGVmaW5lIHRvIDEgaWYgYHVkcHNfZnVsbHNvY2snIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdWRwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0ZVTExTT0NLCisKKy8qIERlZmluZSB0byAxIGlmIGB1ZHBzX2lwYWNrZXRzJyBpcyBhIG1lbWJlciBvZiBgc3RydWN0IHVkcHN0YXQnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19JUEFDS0VUUworCisvKiBEZWZpbmUgdG8gMSBpZiBgdWRwc19ub3BvcnQnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdWRwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVAorCisvKiBEZWZpbmUgdG8gMSBpZiBgdWRwc19ub3BvcnRiY2FzdCcgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1ZHBzdGF0Jy4gKi8KKyN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfTk9QT1JUQkNBU1QKKworLyogRGVmaW5lIHRvIDEgaWYgYHVkcHNfb3BhY2tldHMnIGlzIGEgbWVtYmVyIG9mIGBzdHJ1Y3QgdWRwc3RhdCcuICovCisjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX09QQUNLRVRTCisKKy8qIERlZmluZSB0byAxIGlmIGBwZ3N3YXBpbicgaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCB1dm1leHAnLiAqLworI3VuZGVmIEhBVkVfU1RSVUNUX1VWTUVYUF9QR1NXQVBJTgorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN5c2NvbmYnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfU1lTQ09ORgogCkBAIC04NjYsNiArMTAzOSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy9kaXNraW8uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfRElTS0lPX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvZGlza2xhYmVsLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfU1lTX0RJU0tMQUJFTF9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2RraW8uaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9TWVNfREtJT19ICiAKQEAgLTkxNSw2ICsxMDkxLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3BhcmFtLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX1BBUkFNX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9sbC5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1NZU19QT0xMX0gKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvcG9vbC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19QT09MX0gKIApAQCAtOTc4LDYgKzExNTcsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGNwaXBzdGF0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NZU19UQ1BJUFNUQVRTX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZWIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9TWVNfVElNRUJfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lb3V0Lmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfU1lTX1RJTUVPVVRfSAogCkBAIC0xMDMyLDYgKzEyMTQsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB0aW1lcycgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9USU1FUwogCisvKiBEZWZpbmUgaWYgYSB0aW1lem9uZSB2YXJpYWJsZSBpcyBkZWNsYXJlZCBpbiA8c3lzL3RpbWUuaD4gKi8KKyN1bmRlZiBIQVZFX1RJTUVaT05FX1ZBUklBQkxFCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dWZzL2Zmcy9mcy5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VGU19GRlNfRlNfSAogCkBAIC0xMDQ3LDE4ICsxMjMyLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dWZzL3Vmcy9xdW90YS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VGU19VRlNfUVVPVEFfSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDE2X3QnLiAqLwotI3VuZGVmIEhBVkVfVUlOVDE2X1QKLQotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnQzMl90Jy4gKi8KLSN1bmRlZiBIQVZFX1VJTlQzMl9UCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50NjRfdCcuICovCi0jdW5kZWYgSEFWRV9VSU5UNjRfVAotCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdWludDhfdCcuICovCi0jdW5kZWYgSEFWRV9VSU5UOF9UCi0KIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1aW50bWF4X3QnLiAqLwogI3VuZGVmIEhBVkVfVUlOVE1BWF9UCiAKQEAgLTEwNzEsNiArMTI0NCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHVuaXN0ZC5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VOSVNURF9ICiAKKy8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1bnNpZ25lZCBsb25nIGxvbmcgaW50Jy4gKi8KKyN1bmRlZiBIQVZFX1VOU0lHTkVEX0xPTkdfTE9OR19JTlQKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB1c2xlZXAnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfVVNMRUVQCiAKQEAgLTEwODYsMTcgKzEyNjIsMTQgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dXZtL3V2bV9wYXJhbS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1VWTV9VVk1fUEFSQU1fSAogCi0vKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgdV9pbnQxNl90Jy4gKi8KLSN1bmRlZiBIQVZFX1VfSU5UMTZfVAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2YWxncmluZC9tZW1jaGVjay5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBTEdSSU5EX01FTUNIRUNLX0gKIAotLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVfaW50MzJfdCcuICovCi0jdW5kZWYgSEFWRV9VX0lOVDMyX1QKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8dmFsZ3JpbmQvdmFsZ3JpbmQuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9WQUxHUklORF9WQUxHUklORF9ICiAKLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1X2ludDY0X3QnLiAqLwotI3VuZGVmIEhBVkVfVV9JTlQ2NF9UCi0KLS8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGB1X2ludDhfdCcuICovCi0jdW5kZWYgSEFWRV9VX0lOVDhfVAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2YWxpZGF0b3IvdmFsaWRhdG9yLWNvbmZpZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyN1bmRlZiBIQVZFX1ZBTElEQVRPUl9WQUxJREFUT1JfQ09ORklHX0gKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx2bS9zd2FwX3BhZ2VyLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfVk1fU1dBUF9QQUdFUl9ICkBAIC0xMTEzLDE4ICsxMjg2LDYyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHZzbnByaW50ZicgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9WU05QUklOVEYKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5kb3dzLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV0lORE9XU19ICisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9XSU5TT0NLMl9ICisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jay5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1dJTlNPQ0tfSAogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdzMnRjcGlwLmg+IGhlYWRlciBmaWxlLiAqLworI3VuZGVmIEhBVkVfV1MyVENQSVBfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHh0aS5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1hUSV9ICiAKKy8qIGxvY2F0aW9uIG9mIFVOSVgga2VybmVsICovCisjdW5kZWYgS0VSTkVMX0xPQworCisvKiBQYXRoIHRvIHRoZSBscHN0YXQgY29tbWFuZCAqLworI3VuZGVmIExQU1RBVF9QQVRICisKKy8qIERlZmluZSB0byB0aGUgc3ViLWRpcmVjdG9yeSBpbiB3aGljaCBsaWJ0b29sIHN0b3JlcyB1bmluc3RhbGxlZCBsaWJyYXJpZXMuCisgICAqLworI3VuZGVmIExUX09CSkRJUgorCisvKiBkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seSAqLworI3VuZGVmIE5FVFNOTVBfQUdFTlRYX0RPTV9TT0NLX09OTFkKKwogLyogVW5peCBkb21haW4gc29ja2V0IGZvciBBZ2VudFggbWFzdGVyLXN1YmFnZW50IGNvbW11bmljYXRpb24gKi8KICN1bmRlZiBORVRTTk1QX0FHRU5UWF9TT0NLRVQKIAogLyogRGVmaW5lIGlmIHN0YXRpYyBpbmxpbmUgZnVuY3Rpb25zIGFyZSB1bnN1cHBvcnRlZCAqLwogI3VuZGVmIE5FVFNOTVBfQlJPS0VOX0lOTElORQogCisvKiAiRGVmaW5lIGlmIGNyeXRvZ3JhcGh5IHN1cHBvcnQgaXMgcG9zc2libGUiICovCisjdW5kZWYgTkVUU05NUF9DQU5fRE9fQ1JZUFRPCisKKy8qIHN5c2N0bCB3b3JrcyB0byBnZXQgYm9vdHRpbWUsIGV0Yy4uLiAqLworI3VuZGVmIE5FVFNOTVBfQ0FOX1VTRV9TWVNDVEwKKworLyogY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWVkICovCisjdW5kZWYgTkVUU05NUF9DT05GSUdVUkVfT1BUSU9OUworCisvKiBkZWZhdWx0IGxvY2F0aW9uIHRvIGxvb2sgZm9yIG1pYnMgdG8gbG9hZCB1c2luZyB0aGUgYWJvdmUgdG9rZW5zIGFuZC9vcgorICAgdGhvc2UgaW4gdGhlIE1JQlMgZW52cmlvbm1lbnQgdmFyaWFibGUgKi8KKyN1bmRlZiBORVRTTk1QX0RFRkFVTFRfTUlCRElSUworCisvKiBkZWZhdWx0IG1pYiBmaWxlcyB0byBsb2FkLCBzcGVjaWZpZWQgYnkgcGF0aC4gKi8KKyN1bmRlZiBORVRTTk1QX0RFRkFVTFRfTUlCRklMRVMKKworLyogRGVmaW5lIGlmIG5vIGFnZW50IGlzIGJ1aWx0ICovCisjdW5kZWYgTkVUU05NUF9ESVNBQkxFX0FHRU5UCisKKy8qIERlZmluZSBpZiBubyBhcHBzIGFyZSBidWlsdCAqLworI3VuZGVmIE5FVFNOTVBfRElTQUJMRV9BUFBTCisKIC8qIERlZmluZSBpZiBERVMgZW5jcnlwdGlvbiBzaG91bGQgbm90IGJlIHN1cHBvcnRlZCAqLwogI3VuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKIApAQCAtMTE0Myw5ICsxMzYwLDEwMyBAQAogLyogRGVmaW5lIGlmIFNOTVB2MmMgY29kZSBzaG91bGQgbm90IGJlIGluY2x1ZGVkICovCiAjdW5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKIAorLyogRGVmaW5lIGlmIHlvdSBhcmUgZW1iZWRkaW5nIHBlcmwgaW4gdGhlIG1haW4gYWdlbnQuICovCisjdW5kZWYgTkVUU05NUF9FTUJFRERFRF9QRVJMCisKKy8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCisjdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorCisvKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgYnkgZGVmYXVsdCAqLworI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVgKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE1GRCBtb2R1bGUgcmV3cml0ZXMgKi8KKyN1bmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKKworLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGNvbXBpbGUgc3VwcG9ydCBmb3IgYm90aCBhdXRoZW50aWNhdGlvbiBhbmQgcHJpdmFjeQorICAgc3VwcG9ydC4gKi8KKyN1bmRlZiBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorCisvKiB0ZXN0aW5nIGNvZGUgc2VjdGlvbnMuICovCisjdW5kZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCisKKy8qIFNob3VsZCBldmFsdWF0ZSB0byB0aGUgbmFtZSBvZiB0aGUgY3VycmVudCBmdW5jdGlvbiBpZiBkZWZpbmVkICovCisjdW5kZWYgTkVUU05NUF9GVU5DVElPTgorCisvKiBpZm5ldCBuZWVkcyB0byBoYXZlIF9LRVJORUwgZGVmaW5lZCAqLworI3VuZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCisKKy8qIGlmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTF9TVFJVQ1RVUkVTIGRlZmluZWQgKi8KKyN1bmRlZiBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9TVFJVQ1RVUkVTCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIG5vbi1lc3NlbnRpYWwgY29kZSBmZWF0dXJlcy4gKi8KKyN1bmRlZiBORVRTTk1QX01JTklNQUxfQ09ERQorCisvKiBEZWZpbmUgaWYgeW91IHdhbnQgdG8gb25seSBzdXBwb3J0IHNlbmRpbmcgbm90aWZpY2F0aW9ucyAqLworI3VuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKKworLyogRGVmaW5lIHRvIHN1cHByZXNzIGluY2x1c2lvbiBvZiBkZXByZWNhdGVkIGZ1bmN0aW9ucyAqLworI3VuZGVmIE5FVFNOTVBfTk9fREVQUkVDQVRFRF9GVU5DVElPTlMKKworLyogSWYgeW91IGRvbid0IHdhbnQgdGhlIGFnZW50IHRvIHJlcG9ydCBvbiB2YXJpYWJsZXMgaXQgZG9lc24ndCBoYXZlIGRhdGEgZm9yCisgICAqLworI3VuZGVmIE5FVFNOTVBfTk9fRFVNTVlfVkFMVUVTCisKKy8qIElmIHdlIGRvbid0IHdhbnQgdG8gdXNlIGttZW0uICovCisjdW5kZWYgTkVUU05NUF9OT19LTUVNX1VTQUdFCisKKy8qIERlZmluZSBpZiB5b3Ugd2FudCB0byByZW1vdmUgYWxsIGxpc3RlbmluZyBzdXBwb3J0IGZyb20gdGhlIGNvZGUgKi8KKyN1bmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisKKy8qIElmIHlvdSBkb24ndCBoYXZlIHJvb3QgYWNjZXNzIGRvbid0IGV4aXQgdXBvbiBrbWVtIGVycm9ycyAqLworI3VuZGVmIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MKKworLyogRGVmaW5lIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgU0VUL3dyaXRlIGFjY2VzcyBmcm9tIHRoZSBjb2RlICovCisjdW5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKKy8qIHVtYXNrIHBlcm1pc3Npb25zIHRvIHNldCB1cCBwZXJzaXN0ZW50IGZpbGVzIHdpdGggKi8KKyN1bmRlZiBORVRTTk1QX1BFUlNJU1RFTlRfTUFTSworCisvKiBTaXplIHByZWZpeCB0byB1c2UgdG8gcHJpbnRmIGEgdWludDMyX3QgKi8KKyN1bmRlZiBORVRTTk1QX1BSSTMyCisKKy8qIFNpemUgcHJlZml4IHRvIHVzZSB0byBwcmludGYgYSBzaXplX3Qgb3Igc3NpemVfdCAqLworI3VuZGVmIE5FVFNOTVBfUFJJegorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIHJlZW50cmFudC90aHJlYWRlZCBjb2RlIChpbmNvbXBsZXRlKS4KKyAgICovCisjdW5kZWYgTkVUU05NUF9SRUVOVFJBTlQKKworLyogZGVmaW5lIGlmIHlvdSBkbyBub3Qgd2FudCBzbm1wdHJhcGQgdG8gcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50ICovCisjdW5kZWYgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKKwogLyogUGF0dGVybiBvZiB0ZW1wb3JhcnkgZmlsZXMgKi8KICN1bmRlZiBORVRTTk1QX1RFTVBfRklMRV9QQVRURVJOCiAKKy8qICJEZWZpbmUgaWYgaW50ZXJuYWwgY3J5cHRvZ3JhcGh5IGNvZGUgc2hvdWxkIGJlIHVzZWQiICovCisjdW5kZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisKKy8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBNRDUgY29kZSAuLi4gKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKKworLyogRGVmaW5lIHRoaXMgaWYgeW91J3JlIHVzaW5nIEhlaW1kYWwgS2VyYmVyb3MgKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMCisKKy8qIERlZmluZSB0aGlzIGlmIHdlJ3JlIHVzaW5nIHRoZSBuZXcgTUlUIGNyeXB0byBBUEkgKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQKKworLyogZGVmaW5lIGlmIHlvdSBhcmUgdXNpbmcgdGhlIG15c3FsIGNvZGUgZm9yIHNubXB0cmFwZCAuLi4gKi8KKyN1bmRlZiBORVRTTk1QX1VTRV9NWVNRTAorCisvKiBEZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgY29kZVMxMSBsaWJyYXJ5IC4uLiAqLworI3VuZGVmIE5FVFNOTVBfVVNFX1BLQ1MxMQorCisvKiBEZWZpbmUgdGhpcyBpZiB5b3UgaGF2ZSBsbV9zZW5zb3JzIHYzIG9yIGxhdGVyICovCisjdW5kZWYgTkVUU05NUF9VU0VfU0VOU09SU19WMworCisvKiBTaG91bGQgd2UgY29tcGlsZSB0byB1c2Ugc3BlY2lhbCBvcGFxdWUgdHlwZXM6IGZsb2F0LCBkb3VibGUsIGNvdW50ZXI2NCwKKyAgIGk2NCwgdWk2NCwgdW5pb24/ICovCisjdW5kZWYgTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTCisKIC8qIERlZmluZSB0byB0aGUgYWRkcmVzcyB3aGVyZSBidWcgcmVwb3J0cyBmb3IgdGhpcyBwYWNrYWdlIHNob3VsZCBiZSBzZW50LiAqLwogI2lmbmRlZiBQQUNLQUdFX0JVR1JFUE9SVAogI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUCkBAIC0xMTY2LDU3ICsxNDc3LDEzNSBAQAogI3VuZGVmIFBBQ0tBR0VfVEFSTkFNRQogI2VuZGlmCiAKKy8qIERlZmluZSB0byB0aGUgaG9tZSBwYWdlIGZvciB0aGlzIHBhY2thZ2UuICovCisjdW5kZWYgUEFDS0FHRV9VUkwKKwogLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KICNpZm5kZWYgUEFDS0FHRV9WRVJTSU9OCiAjdW5kZWYgUEFDS0FHRV9WRVJTSU9OCiAjZW5kaWYKIAorLyogQ29tbWFuZCB0byBnZW5lcmF0ZSBwcyBvdXRwdXQsIHRoZSBmaW5hbCBjb2x1bW4gbXVzdCBiZSB0aGUgcHJvY2VzcyBuYW1lCisgICB3aXRoT1VUIGFyZ3VtZW50cyAqLworI3VuZGVmIFBTQ01ECisKIC8qIERlZmluZSBhcyB0aGUgcmV0dXJuIHR5cGUgb2Ygc2lnbmFsIGhhbmRsZXJzIChgaW50JyBvciBgdm9pZCcpLiAqLwogI3VuZGVmIFJFVFNJR1RZUEUKIAotLyogVGhlIHNpemUgb2YgYSBgaW50JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworLyogZGVmaW5lIHJ0ZW50cnkgdG8gb3J0ZW50cnkgb24gU1lTViBtYWNoaW5lcyAoYWxwaGFzKSAqLworI3VuZGVmIFJURU5UUlkKKworLyogVXNlIEJTRCA0LjQgcm91dGluZyB0YWJsZSBlbnRyaWVzPyAqLworI3VuZGVmIFJURU5UUllfNF80CisKKy8qIFRoZSBzaXplIG9mIGBpbnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX0lOVAogCi0vKiBUaGUgc2l6ZSBvZiBhIGBpbnRtYXhfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qIFRoZSBzaXplIG9mIGBpbnRtYXhfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfSU5UTUFYX1QKIAotLyogVGhlIHNpemUgb2YgYSBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qIFRoZSBzaXplIG9mIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI3VuZGVmIFNJWkVPRl9MT05HCiAKLS8qIFRoZSBzaXplIG9mIGEgYGxvbmcgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qIFRoZSBzaXplIG9mIGBsb25nIGxvbmcnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjdW5kZWYgU0laRU9GX0xPTkdfTE9ORwogCi0vKiBUaGUgc2l6ZSBvZiBhIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKy8qIFRoZSBzaXplIG9mIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICN1bmRlZiBTSVpFT0ZfU0hPUlQKIAorLyogVGhlIHNpemUgb2YgYHNvY2thZGRyX3VuLnN1bl9wYXRoJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI3VuZGVmIFNJWkVPRl9TT0NLQUREUl9VTl9TVU5fUEFUSAorCiAvKiBJZiB1c2luZyB0aGUgQyBpbXBsZW1lbnRhdGlvbiBvZiBhbGxvY2EsIGRlZmluZSBpZiB5b3Uga25vdyB0aGUKICAgIGRpcmVjdGlvbiBvZiBzdGFjayBncm93dGggZm9yIHlvdXIgc3lzdGVtOyBvdGhlcndpc2UgaXQgd2lsbCBiZQotICAgYXV0b21hdGljYWxseSBkZWR1Y2VkIGF0IHJ1bi10aW1lLgorICAgYXV0b21hdGljYWxseSBkZWR1Y2VkIGF0IHJ1bnRpbWUuCiAJU1RBQ0tfRElSRUNUSU9OID4gMCA9PiBncm93cyB0b3dhcmQgaGlnaGVyIGFkZHJlc3NlcwogCVNUQUNLX0RJUkVDVElPTiA8IDAgPT4gZ3Jvd3MgdG93YXJkIGxvd2VyIGFkZHJlc3NlcwogCVNUQUNLX0RJUkVDVElPTiA9IDAgPT4gZGlyZWN0aW9uIG9mIGdyb3d0aCB1bmtub3duICovCiAjdW5kZWYgU1RBQ0tfRElSRUNUSU9OCiAKKy8qIERlZmluZSBpZiBzdGF0ZnMgdGFrZXMgMiBhcmdzIGFuZCB0aGUgc2Vjb25kIGFyZ3VtZW50IGhhcyB0eXBlIHN0cnVjdAorICAgZnNfZGF0YS4gW1VsdHJpeF0gKi8KKyN1bmRlZiBTVEFUX1NUQVRGU19GU19EQVRBCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBBTlNJIEMgaGVhZGVyIGZpbGVzLiAqLwogI3VuZGVmIFNURENfSEVBREVSUwogCisvKiBkZWZpbmUgaWYgU0lPQ0dJRkFERFIgZXhpc3RzIGluIHN5cy9pb2N0bC5oICovCisjdW5kZWYgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSCisKKy8qIERlZmluZSBpZiB0aGUgVENQIHRpbWVyIGNvbnN0YW50cyBpbiA8bmV0aW5ldC90Y3BfdGltZXIuaD4gZGVwZW5kIG9uIHRoZQorICAgaW50ZWdlciB2YXJpYWJsZSAnaHonLiBbRnJlZUJTRCA0LnhdICovCisjdW5kZWYgVENQVFZfTkVFRFNfSFoKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGNhbiBzYWZlbHkgaW5jbHVkZSBib3RoIDxzeXMvdGltZS5oPiBhbmQgPHRpbWUuaD4uICovCiAjdW5kZWYgVElNRV9XSVRIX1NZU19USU1FCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0IHNpZ25pZmljYW50IGJ5dGUKLSAgIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsIGFuZCBWQVgpLiAqLwotI3VuZGVmIFdPUkRTX0JJR0VORElBTgorLyogV2hlcmUgaXMgdGhlIHVuYW1lIGNvbW1hbmQgKi8KKyN1bmRlZiBVTkFNRVBST0cKIAotLyogRGVmaW5lIHRvIDEgaWYgb24gQUlYIDMuCi0gICBTeXN0ZW0gaGVhZGVycyBzb21ldGltZXMgZGVmaW5lIHRoaXMuCi0gICBXZSBqdXN0IHdhbnQgdG8gYXZvaWQgYSByZWRlZmluaXRpb24gZXJyb3IgbWVzc2FnZS4gICovCisvKiBFbmFibGUgZXh0ZW5zaW9ucyBvbiBBSVggMywgSW50ZXJpeC4gICovCiAjaWZuZGVmIF9BTExfU09VUkNFCiAjIHVuZGVmIF9BTExfU09VUkNFCiAjZW5kaWYKKy8qIEVuYWJsZSBHTlUgZXh0ZW5zaW9ucyBvbiBzeXN0ZW1zIHRoYXQgaGF2ZSB0aGVtLiAgKi8KKyNpZm5kZWYgX0dOVV9TT1VSQ0UKKyMgdW5kZWYgX0dOVV9TT1VSQ0UKKyNlbmRpZgorLyogRW5hYmxlIHRocmVhZGluZyBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworI2lmbmRlZiBfUE9TSVhfUFRIUkVBRF9TRU1BTlRJQ1MKKyMgdW5kZWYgX1BPU0lYX1BUSFJFQURfU0VNQU5USUNTCisjZW5kaWYKKy8qIEVuYWJsZSBleHRlbnNpb25zIG9uIEhQIE5vblN0b3AuICAqLworI2lmbmRlZiBfVEFOREVNX1NPVVJDRQorIyB1bmRlZiBfVEFOREVNX1NPVVJDRQorI2VuZGlmCisvKiBFbmFibGUgZ2VuZXJhbCBleHRlbnNpb25zIG9uIFNvbGFyaXMuICAqLworI2lmbmRlZiBfX0VYVEVOU0lPTlNfXworIyB1bmRlZiBfX0VYVEVOU0lPTlNfXworI2VuZGlmCisKKworLyogRGVmaW5lIFdPUkRTX0JJR0VORElBTiB0byAxIGlmIHlvdXIgcHJvY2Vzc29yIHN0b3JlcyB3b3JkcyB3aXRoIHRoZSBtb3N0CisgICBzaWduaWZpY2FudCBieXRlIGZpcnN0IChsaWtlIE1vdG9yb2xhIGFuZCBTUEFSQywgdW5saWtlIEludGVsKS4gKi8KKyNpZiBkZWZpbmVkIEFDX0FQUExFX1VOSVZFUlNBTF9CVUlMRAorIyBpZiBkZWZpbmVkIF9fQklHX0VORElBTl9fCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbHNlCisjIGlmbmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBlbmRpZgorI2VuZGlmCisKKy8qIERlZmluZSB0byAxIGlmIG9uIE1JTklYLiAqLworI3VuZGVmIF9NSU5JWAorCisvKiBEZWZpbmUgdG8gMiBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IHByb3ZpZGUgUE9TSVguMSBmZWF0dXJlcyBleGNlcHQgd2l0aAorICAgdGhpcyBkZWZpbmVkLiAqLworI3VuZGVmIF9QT1NJWF8xX1NPVVJDRQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgbmVlZCB0byBpbiBvcmRlciBmb3IgYHN0YXQnIGFuZCBvdGhlciB0aGluZ3MgdG8gd29yay4gKi8KKyN1bmRlZiBfUE9TSVhfU09VUkNFCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSBSUE0gNC42IG9yIG5ld2VyIHRvIHR1cm4gb24gbGVnYWN5IEFQSSAqLwogI3VuZGVmIF9SUE1fNF80X0NPTVBBVAogCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQzMl90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI3VuZGVmIF9VSU5UMzJfVAorCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQ2NF90IHR5cGVkZWYgZnJvbSA8c3lzL3N5bmNoLmg+LAorICAgPHB0aHJlYWQuaD4sIG9yIDxzZW1hcGhvcmUuaD4gaXMgbm90IHVzZWQuIElmIHRoZSB0eXBlZGVmIHdlcmUgYWxsb3dlZCwgdGhlCisgICAjZGVmaW5lIGJlbG93IHdvdWxkIGNhdXNlIGEgc3ludGF4IGVycm9yLiAqLworI3VuZGVmIF9VSU5UNjRfVAorCisvKiBEZWZpbmUgZm9yIFNvbGFyaXMgMi41LjEgc28gdGhlIHVpbnQ4X3QgdHlwZWRlZiBmcm9tIDxzeXMvc3luY2guaD4sCisgICA8cHRocmVhZC5oPiwgb3IgPHNlbWFwaG9yZS5oPiBpcyBub3QgdXNlZC4gSWYgdGhlIHR5cGVkZWYgd2VyZSBhbGxvd2VkLCB0aGUKKyAgICNkZWZpbmUgYmVsb3cgd291bGQgY2F1c2UgYSBzeW50YXggZXJyb3IuICovCisjdW5kZWYgX1VJTlQ4X1QKKwogLyogRGVmaW5lIHRvIGVtcHR5IGlmIGBjb25zdCcgZG9lcyBub3QgY29uZm9ybSB0byBBTlNJIEMuICovCiAjdW5kZWYgY29uc3QKIApAQCAtMTIyNiw1OCArMTYxNSw2OCBAQAogI3VuZGVmIGlubGluZQogI2VuZGlmCiAKLS8qIERlZmluZSB0byBgbG9uZycgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgMTYgYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiBpbnQxNl90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhIHNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAzMiBiaXRzIGlmCisgICBzdWNoIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIGludDMyX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGEgc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50NjRfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIG9mIHdpZHRoIGV4YWN0bHkgOCBiaXRzIGlmIHN1Y2gKKyAgIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLworI3VuZGVmIGludDhfdAorCisvKiBEZWZpbmUgdG8gdGhlIHdpZGVzdCBzaWduZWQgaW50ZWdlciB0eXBlIGlmIDxzdGRpbnQuaD4gYW5kIDxpbnR0eXBlcy5oPiBkbworICAgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBpbnRtYXhfdAorCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYSBzaWduZWQgaW50ZWdlciB0eXBlIHdpZGUgZW5vdWdoIHRvIGhvbGQgYSBwb2ludGVyLAorICAgaWYgc3VjaCBhIHR5cGUgZXhpc3RzLCBhbmQgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgaW50cHRyX3QKKworLyogRGVmaW5lIHRvIGBsb25nIGludCcgaWYgPHN5cy90eXBlcy5oPiBkb2VzIG5vdCBkZWZpbmUuICovCiAjdW5kZWYgb2ZmX3QKIAogLyogRGVmaW5lIHRvIGBpbnQnIGlmIDxzeXMvdHlwZXMuaD4gZG9lcyBub3QgZGVmaW5lLiAqLwogI3VuZGVmIHBpZF90CiAKKy8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiA8c3lzL3R5cGVzLmg+IGRvZXMgbm90IGRlZmluZS4gKi8KKyN1bmRlZiBzaXplX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDE2IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludDE2X3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDMyIGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludDMyX3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDY0IGJpdHMgaWYKKyAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCisjdW5kZWYgdWludDY0X3QKKworLyogRGVmaW5lIHRvIHRoZSB0eXBlIG9mIGFuIHVuc2lnbmVkIGludGVnZXIgdHlwZSBvZiB3aWR0aCBleGFjdGx5IDggYml0cyBpZgorICAgc3VjaCBhIHR5cGUgZXhpc3RzIGFuZCB0aGUgc3RhbmRhcmQgaW5jbHVkZXMgZG8gbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50OF90CisKKy8qIERlZmluZSB0byB0aGUgd2lkZXN0IHVuc2lnbmVkIGludGVnZXIgdHlwZSBpZiA8c3RkaW50Lmg+IGFuZCA8aW50dHlwZXMuaD4KKyAgIGRvIG5vdCBkZWZpbmUuICovCisjdW5kZWYgdWludG1heF90CisKKy8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgd2lkZSBlbm91Z2ggdG8gaG9sZCBhCisgICBwb2ludGVyLCBpZiBzdWNoIGEgdHlwZSBleGlzdHMsIGFuZCBpZiB0aGUgc3lzdGVtIGRvZXMgbm90IGRlZmluZSBpdC4gKi8KKyN1bmRlZiB1aW50cHRyX3QKKwogLyogZW5kIG9mIGRlZmluaXRpb25zIGFkZGVkIGJ5IGNvbmZpZ3VyZSBvbi10aGUtZmx5ICovCiAKLSNpZm5kZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBIQVZFX0lOREVYCi0jIGRlZmluZSBzdHJjaHIgaW5kZXgKLSMgZGVmaW5lIHN0cnJjaHIgcmluZGV4Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfSU5ERVgKLSNpZmRlZiBIQVZFX1NUUkNIUgotI2lmZGVmIG1pbmd3MzIKLSMgZGVmaW5lIGluZGV4KGEsYikgc3RyY2hyKGEsYikKLSMgZGVmaW5lIHJpbmRleChhLGIpIHN0cnJjaHIoYSxiKQotI2Vsc2UKLSMgZGVmaW5lIGluZGV4IHN0cmNocgotIyBkZWZpbmUgcmluZGV4IHN0cnJjaHIKLSNlbmRpZgotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTUNQWQotI2lmZGVmIEhBVkVfQkNPUFkKLSMgZGVmaW5lIG1lbWNweShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbW1vdmUoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1jbXAgYmNtcAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTU1PVkUKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgbWVtbW92ZSBtZW1jcHkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9CQ09QWQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBiY29weShzLCBkLCBuKSBtZW1jcHkgKChkKSwgKHMpLCAobikpCi0jIGRlZmluZSBiemVybyhwLG4pIG1lbXNldCgocCksKDApLChuKSkKLSMgZGVmaW5lIGJjbXAgbWVtY21wCi0jZW5kaWYKLSNlbmRpZgotCiAvKiBJZiB5b3UgaGF2ZSBvcGVuc3NsIDAuOS43IG9yIGFib3ZlLCB5b3UgbGlrZWx5IGhhdmUgQUVTIHN1cHBvcnQuICovCiAjdW5kZWYgTkVUU05NUF9VU0VfT1BFTlNTTAotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX09QRU5TU0xfQUVTX0gpICYmIGRlZmluZWQoSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQpCisjaWYgKGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX09QRU5TU0xfQUVTX0gpICYmIGRlZmluZWQoSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQpKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKICNkZWZpbmUgSEFWRV9BRVMgMQogI2VuZGlmCiAKQEAgLTEzMzEsMjcgKzE3MzAsNiBAQAogLyogZGVmYXVsdCBsaXN0IG9mIG1pYnMgdG8gbG9hZCAqLwogI2RlZmluZSBORVRTTk1QX0RFRkFVTFRfTUlCUyAiSVAtTUlCOklGLU1JQjpUQ1AtTUlCOlVEUC1NSUI6U05NUHYyLU1JQjpSRkMxMjEzLU1JQiIKIAotLyogZGVmYXVsdCBsb2NhdGlvbiB0byBsb29rIGZvciBtaWJzIHRvIGxvYWQgdXNpbmcgdGhlIGFib3ZlIHRva2VucwotICAgYW5kL29yIHRob3NlIGluIHRoZSBNSUJTIGVudnJpb25tZW50IHZhcmlhYmxlKi8KLSN1bmRlZiBORVRTTk1QX0RFRkFVTFRfTUlCRElSUwotCi0vKiBkZWZhdWx0IG1pYiBmaWxlcyB0byBsb2FkLCBzcGVjaWZpZWQgYnkgcGF0aC4gKi8KLSN1bmRlZiBORVRTTk1QX0RFRkFVTFRfTUlCRklMRVMKLQotLyogc2hvdWxkIHdlIGNvbXBpbGUgdG8gdXNlIHNwZWNpYWwgb3BhcXVlIHR5cGVzOiBmbG9hdCwgZG91YmxlLAotICAgY291bnRlcjY0LCBpNjQsIHVpNjQsIHVuaW9uPyAqLwotI3VuZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUwotCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBzdXBwb3J0IGZvciBib3RoIGF1dGhlbnRpY2F0aW9uIGFuZAotICAgcHJpdmFjeSBzdXBwb3J0LiAqLwotI3VuZGVmIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi0KLS8qIGRlZmluZSBpZiB5b3UgYXJlIHVzaW5nIHRoZSBNRDUgY29kZSAuLi4qLwotI3VuZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQotCi0vKiBkZWZpbmUgaWYgeW91IGFyZSB1c2luZyB0aGUgY29kZVMxMSBsaWJyYXJ5IC4uLiovCi0jdW5kZWYgTkVUU05NUF9VU0VfUEtDUzExCi0KIC8qIGRlYnVnZ2luZyBzdHVmZiAqLwogLyogaWYgZGVmaW5lZCwgd2Ugb3B0aW1pemUgdGhlIGNvZGUgdG8gZXhjbHVkZSBhbGwgZGVidWdnaW5nIGNhbGxzLiAqLwogI3VuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCkBAIC0xMzY3LDkgKzE3NDUsNiBAQAogICAgbGluZXM6IFBFUlNJU1RFTlRfRElSRUNUT1JZL05BTUUucGVyc2lzdGVudC5jb25mICovCiAjZGVmaW5lIE5FVFNOTVBfUEVSU0lTVEVOVF9ESVJFQ1RPUlkgIi92YXIvc25tcCIKIAotLyogUEVSU0lTVEVOVF9NQVNLOiB0aGUgdW1hc2sgcGVybWlzc2lvbnMgdG8gc2V0IHVwIHBlcnNpc3RlbnQgZmlsZXMgd2l0aCAqLwotI2RlZmluZSBORVRTTk1QX1BFUlNJU1RFTlRfTUFTSyAwNzcKLQogLyogQUdFTlRfRElSRUNUT1JZX01PREU6IHRoZSBtb2RlIHRoZSBhZ2VudHMgc2hvdWxkIHVzZSB0byBjcmVhdGUKICAgIGRpcmVjdG9yaWVzIHdpdGguIFNpbmNlIHRoZSBkYXRhIHN0b3JlZCBoZXJlIGlzIHByb2JhYmx5IHNlbnNpdGl2ZSwgaXQKICAgIHByb2JhYmx5IHNob3VsZCBiZSByZWFkLW9ubHkgYnkgcm9vdC9hZG1pbmlzdHJhdG9yLiAqLwpAQCAtMTQxNCwxOSArMTc4OSw2IEBACiAvKiBVc2UgbGlid3JhcCB0byBoYW5kbGUgYWxsb3cvZGVueSBob3N0cz8gKi8KICN1bmRlZiBORVRTTk1QX1VTRV9MSUJXUkFQCiAKLS8qIHRlc3RpbmcgY29kZSBzZWN0aW9ucy4gKi8KLSN1bmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgCi0KLS8qIElmIHlvdSBkb24ndCBoYXZlIHJvb3QgYWNjZXNzIGRvbid0IGV4aXQgdXBvbiBrbWVtIGVycm9ycyAqLwotI3VuZGVmIE5FVFNOTVBfTk9fUk9PVF9BQ0NFU1MKLQotLyogSWYgd2UgZG9uJ3Qgd2FudCB0byB1c2Uga21lbS4gKi8KLSN1bmRlZiBORVRTTk1QX05PX0tNRU1fVVNBR0UKLQotLyogSWYgeW91IGRvbid0IHdhbnQgdGhlIGFnZW50IHRvIHJlcG9ydCBvbiB2YXJpYWJsZXMgaXQgZG9lc24ndCBoYXZlIGRhdGEgZm9yICovCi0jdW5kZWYgTkVUU05NUF9OT19EVU1NWV9WQUxVRVMKLQotCiAvKiBNaWItMiB0cmVlIEluZm8gKi8KIC8qIFRoZXNlIGFyZSB0aGUgc3lzdGVtIGluZm9ybWF0aW9uIHZhcmlhYmxlcy4gKi8KIApAQCAtMTUzMCw3ICsxODkyLDcgQEAKICNpZmRlZiBXSU4zMgogI2RlZmluZSBORVRTTk1QX09TVFlQRSBORVRTTk1QX1dJTjMySUQKICNlbmRpZgotI2lmIGRlZmluZWQoYWl4MykgfHwgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDMpIHx8IGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICNkZWZpbmUgTkVUU05NUF9PU1RZUEUgTkVUU05NUF9BSVhJRAogI2VuZGlmCiAjaWYgZGVmaW5lZChkYXJ3aW4pICYmIChkYXJ3aW4gPj0gOCkKQEAgLTE2MjEsOSArMTk4Myw2IEBACiAvKiBpbnRlcm5hbCBkZWZpbmUgKi8KICNkZWZpbmUgTkVUU05NUF9MQVNURklFTEQgLTEKIAotLyogY29uZmlndXJlIG9wdGlvbnMgc3BlY2lmaWVkICovCi0jZGVmaW5lIE5FVFNOTVBfQ09ORklHVVJFX09QVElPTlMgIiIKLQogLyogIFBsdWdnYWJsZSB0cmFuc3BvcnRzLiAgKi8KIAogLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVURQL0lQIHRyYW5zcG9ydCBkb21haW4gaXMKQEAgLTE2NTgsMTMgKzIwMTcsMzIgQEAKICAgICBhdmFpbGFibGUuICAqLwogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCiAKLS8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFVEUC9JUCB0cmFuc3BvcnQgZG9tYWluIGlzCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBUTFMgdHJhbnNwb3J0IGRvbWFpbiBpcwogICAgIGF2YWlsYWJsZS4gICAqLwotI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU19ET01BSU4KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNCQVNFX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBBbGlhcyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFNTSCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBEVExTL1VEUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTL1RDUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgogCiAvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHN0ZGluL291dCB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLwogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4KIAorLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgSVB2NEJhc2UgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKyN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9JUFY0QkFTRV9ET01BSU4KKwogLyogZGVmaW5lIHRoaXMgaWYgdGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjdW5kZWYgTkVUU05NUF9TRUNNT0RfVVNNCiAKQEAgLTE2NzQsMTggKzIwNTIsOSBAQAogLyogZGVmaW5lIHRoaXMgaWYgdGhlIGxvY2FsIHNlY3VyaXR5IG1vZHVsZSBpcyBhdmFpbGFibGUgKi8KICN1bmRlZiBORVRTTk1QX1NFQ01PRF9MT0NBTFNNCiAKLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCB3aXRoIHJlZW50cmFudC90aHJlYWRlZCBjb2RlIChpbmNvbXBsZXRlKSovCi0jdW5kZWYgTkVUU05NUF9SRUVOVFJBTlQKLQogLyogZGVmaW5lIGlmIGNvbmZpZ3VyZWQgYXMgYSAibWluaS1hZ2VudCIgKi8KICN1bmRlZiBORVRTTk1QX01JTklfQUdFTlQKIAotLyogZGVmaW5lIGlmIHlvdSBhcmUgZW1iZWRkaW5nIHBlcmwgaW4gdGhlIG1haW4gYWdlbnQgKi8KLSN1bmRlZiBORVRTTk1QX0VNQkVEREVEX1BFUkwKLQotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIE1GRCBtb2R1bGUgcmV3cml0ZXMqLwotI3VuZGVmIE5FVFNOTVBfRU5BQkxFX01GRF9SRVdSSVRFUwotCiAvKiB0aGlzIGlzIHRoZSBsb2NhdGlvbiBvZiB0aGUgbmV0LXNubXAgbWliIHRyZWUuICBJdCBzaG91bGRuJ3QgYmUKICAgIGNoYW5nZWQsIGFzIHRoZSBwbGFjZXMgaXQgaXMgdXNlZCBhcmUgZXhwZWN0ZWQgdG8gYmUgY29uc3RhbnQKICAgIHZhbHVlcyBvciBhcmUgZGlyZWN0bHkgdGllZCB0byB0aGUgVUNELVNOTVAtTUlCLiAqLwpAQCAtMTc1MywzMyArMjEyMiwxMiBAQAogIyAgZGVmaW5lIE5FVFNOTVBfSU1QT1JUIGV4dGVybgogI2VuZGlmCiAKLS8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgSVB2NiBzdXBwb3J0ICovCi0jdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNgotCi0vKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gcmVzdHJpY3QgU01VWCBjb25uZWN0aW9ucyB0byBsb2NhbGhvc3QgYnkgZGVmYXVsdCAqLwotI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVgKLQotLyogZGVmaW5lIGlmIGFnZW50eCB0cmFuc3BvcnQgaXMgdG8gdXNlIGRvbWFpbiBzb2NrZXRzIG9ubHkgKi8KLSN1bmRlZiBORVRTTk1QX0FHRU5UWF9ET01fU09DS19PTkxZCi0KLS8qIGRlZmluZSBpZiB5b3UgZG8gbm90IHdhbnQgc25tcHRyYXBkIHRvIHJlZ2lzdGVyIGFzIGFuIEFnZW50WCBzdWJhZ2VudCAqLwotI3VuZGVmIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCi0KLS8qIGRlZmluZSB0aGlzIGlmIHdlJ3JlIHVzaW5nIHRoZSBuZXcgTUlUIGNyeXB0byBBUEkgKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9LRVJCRVJPU19NSVQKLQotLyogZGVmaW5lIHRoaXMgaWYgeW91J3JlIHVzaW5nIEhlaW1kYWwgS2VyYmVyb3MgKi8KLSN1bmRlZiBORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMCi0KIC8qIGNvbW1lbnQgdGhlIG5leHQgbGluZSBpZiB5b3UgYXJlIGNvbXBpbGluZyB3aXRoIGxpYnNubXAuaCAKICAgIGFuZCBhcmUgbm90IHVzaW5nIHRoZSBVQy1EYXZpcyBTTk1QIGxpYnJhcnkuICovCiAjZGVmaW5lIFVDRF9TTk1QX0xJQlJBUlkgMQogCi0vKiBhZGQgaW4gcmVjZW50IENNVSBsaWJyYXJ5IGV4dGVuc2lvbnMgKG5vdCBjb21wbGV0ZSkgKi8KLSN1bmRlZiBDTVVfQ09NUEFUSUJMRQotCiAvKiBmaW5hbCBjb25jbHVzaW9uIG9uIG5saXN0IHVzYWdlICovCi0jaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRSkgJiYgIWRlZmluZWQoTkVUU05NUF9ET05UX1VTRV9OTElTVCkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQorI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFKSAmJiAhZGVmaW5lZChORVRTTk1QX0RPTlRfVVNFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfS01FTSkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQogI2RlZmluZSBORVRTTk1QX0NBTl9VU0VfTkxJU1QKICNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmggYi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM3ZTZjNQotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRVNfSAorI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVTX0gKKworLyogaW5jbHVkZSBmaWxlcyB0aGF0IGFyZSBvbmx5IG5lZWRlZCBpZiAtLWVuYWJsZS1taW5pbWFsaXN0IGlzIG9uICovCisjaWZkZWYgTkVUU05NUF9NSU5JTUFMX0NPREUKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcKKyNpbmNsdWRlIDxuZXQtc25tcC9mZWF0dXJlLWRldGFpbHMuaD4KKyNlbHNlIC8qICEgTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9mZWF0dXJlcy5oPgorI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfQUdFTlQKKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9mZWF0dXJlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2ZlYXR1cmVzLW1pYmdyb3Vwcy5oPgorI2VuZGlmCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9BUFBTCisjaW5jbHVkZSA8bmV0LXNubXAvZmVhdHVyZXMtc25tcG5ldHN0YXQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9mZWF0dXJlcy1hcHBzLmg+CisjZW5kaWYKKyNlbmRpZiAvKiAhIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAqLworI2VuZGlmIC8qIE5FVFNOTVBfTUlOSU1BTF9DT0RFICovCisKKworLyogcHJvdG90eXBlcyBhbHdheXMgbmVlZGVkICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORworI2RlZmluZSBuZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShYKQorI2RlZmluZSBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShYKQorI2RlZmluZSBuZXRzbm1wX2ZlYXR1cmVfd2FudChYKQorI2RlZmluZSBuZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoWCwgWSkKKyNlbmRpZgorCisjZGVmaW5lIG5ldHNubXBfZmVhdHVyZV91bnVzZWQoWCkgY2hhciBuZXRzbm1wX2ZlYXR1cmVfdW51c2VkXyAjIyBYCisKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVTX0ggKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAppbmRleCA1M2RjN2I4Li4zZWU2MmFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCkBAIC0zOCwxMSArMzgsNyBAQAogI2VuZGlmCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTcxLDYgKzY3LDcgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9kZWZpbml0aW9ucy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvcGR1X2FwaS5oPgpAQCAtODAsOCArNzcsNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9zbm1wdjNfYXBpLmg+CiAKLSNpZmRlZiBDTVVfQ09NUEFUSUJMRQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY211X2NvbXBhdC5oPgotI2VuZGlmCi0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUX1NOTVBfSU5DTFVERVNfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oIGIvaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlODVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL29wZW5zc2xfbWQ1LmgKQEAgLTAsMCArMSwxMTYgQEAKKy8qIGNyeXB0by9tZDUvbWQ1LmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2lmbmRlZiBIRUFERVJfTUQ1X0gKKyNkZWZpbmUgSEVBREVSX01ENV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmZGVmIE9QRU5TU0xfTk9fTUQ1CisjZXJyb3IgTUQ1IGlzIGRpc2FibGVkLgorI2VuZGlmCisKKy8qCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICogISBNRDVfTE9ORyBoYXMgdG8gYmUgYXQgbGVhc3QgMzIgYml0cyB3aWRlLiBJZiBpdCdzIHdpZGVyLCB0aGVuICEKKyAqICEgTUQ1X0xPTkdfTE9HMiBoYXMgdG8gYmUgZGVmaW5lZCBhbG9uZy4JCQkgICAhCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICovCisKKyNpZiBkZWZpbmVkKF9fTFAzMl9fKQorI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBsb25nCisjZWxpZiBkZWZpbmVkKE9QRU5TU0xfU1lTX0NSQVkpIHx8IGRlZmluZWQoX19JTFA2NF9fKQorI2RlZmluZSBNRDVfTE9ORyB1bnNpZ25lZCBsb25nCisjZGVmaW5lIE1ENV9MT05HX0xPRzIgMworLyoKKyAqIF9DUkFZIG5vdGUuIEkgY291bGQgZGVjbGFyZSBzaG9ydCwgYnV0IEkgaGF2ZSBubyBpZGVhIHdoYXQgaW1wYWN0CisgKiBkb2VzIGl0IGhhdmUgb24gcGVyZm9ybWFuY2Ugb24gbm9uZS1UM0UgbWFjaGluZXMuIEkgY291bGQgZGVjbGFyZQorICogaW50LCBidXQgYXQgbGVhc3Qgb24gQzkwIHNpemVvZihpbnQpIGNhbiBiZSBjaG9zZW4gYXQgY29tcGlsZSB0aW1lLgorICogU28gSSd2ZSBjaG9zZW4gbG9uZy4uLgorICoJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAqLworI2Vsc2UKKyNkZWZpbmUgTUQ1X0xPTkcgdW5zaWduZWQgaW50CisjZW5kaWYKKworI2RlZmluZSBNRDVfQ0JMT0NLCTY0CisjZGVmaW5lIE1ENV9MQkxPQ0sJKE1ENV9DQkxPQ0svNCkKKyNkZWZpbmUgTUQ1X0RJR0VTVF9MRU5HVEggMTYKKwordHlwZWRlZiBzdHJ1Y3QgTUQ1c3RhdGVfc3QKKwl7CisJTUQ1X0xPTkcgQSxCLEMsRDsKKwlNRDVfTE9ORyBObCxOaDsKKwlNRDVfTE9ORyBkYXRhW01ENV9MQkxPQ0tdOworCXVuc2lnbmVkIGludCBudW07CisJfSBNRDVfQ1RYOworCitpbnQgTUQ1X0luaXQoTUQ1X0NUWCAqYyk7CitpbnQgTUQ1X1VwZGF0ZShNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBNRDVfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIE1ENV9DVFggKmMpOwordW5zaWduZWQgY2hhciAqTUQ1KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIE1ENV9UcmFuc2Zvcm0oTUQ1X0NUWCAqYywgY29uc3QgdW5zaWduZWQgY2hhciAqYik7CisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaCBiL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCmluZGV4IGJlMmNlMGMuLjNiZjMxNzIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCkBAIC0xLDUgKzEsNSBAQAotI2lmbmRlZiBORVRfU05NUF9MT0dHSU5HX0FQSV9ICi0jZGVmaW5lIE5FVF9TTk1QX0xPR0dJTkdfQVBJX0gKKyNpZm5kZWYgTkVUX1NOTVBfT1VUUFVUX0FQSV9ICisjZGVmaW5lIE5FVF9TTk1QX09VVFBVVF9BUElfSAogCiAgICAgLyoqCiAgICAgICogIExpYnJhcnkgQVBJIHJvdXRpbmVzIGNvbmNlcm5lZCB3aXRoIGxvZ2dpbmcgYW5kIG1lc3NhZ2Ugb3V0cHV0CkBAIC03LDE3ICs3LDE0NSBAQAogICAgICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4JLyogZm9yIHZhX2xpc3QgKi8KKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisgICAgLyogRXJyb3IgcmVwb3J0aW5nICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgIHNubXBfZXJyb3IobmV0c25tcF9zZXNzaW9uICpzZXNzLCBpbnQgKmNsaWJfZXJyb3JubywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqc25tcF9lcnJvcm5vLCBjaGFyICoqZXJyc3RyaW5nKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgc25tcF9zZXNzX2Vycm9yKCAgICAgIHZvaWQgKnNlc3MsIGludCAqY2xpYl9lcnJvcm5vLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzbm1wX2Vycm9ybm8sIGNoYXIgKiplcnJzdHJpbmcpOworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBjb25zdCBjaGFyICpzbm1wX2FwaV9lcnJzdHJpbmcoaW50IHNubXBfZXJyb3Jubyk7ICAvKiAgbGlicmFyeSBlcnJvcnMgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGNvbnN0IGNoYXIgICAgICpzbm1wX2VycnN0cmluZyhpbnQgc25tcF9lcnJvcm5vKTsgIC8qIHByb3RvY29sIGVycm9ycyAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgIHNubXBfcGVycm9yKGNvbnN0IGNoYXIgKm1zZyk7ICAgLyogZm9yIHBhcnNpbmcgZXJyb3JzIG9ubHkgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICBzbm1wX3Nlc3NfcGVycm9yKGNvbnN0IGNoYXIgKm1zZywgbmV0c25tcF9zZXNzaW9uICpzZXNzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBhbGwgb3RoZXIgU05NUCBsaWJyYXJ5IGVycm9ycyAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICBzbm1wX2xvZ19wZXJyb3IoY29uc3QgY2hhciAqbXNnKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGZvciBzeXN0ZW0gbGlicmFyeSBlcnJvcnMgKi8KKworICAgIC8qIExvZ2dpbmcgbWVzc2FnZXMgKi8KKworI2lmICFkZWZpbmVkKF9fR05VQ19fKSB8fCBfX0dOVUNfXyA8IDIgfHwgKF9fR05VQ19fID09IDIgJiYgX19HTlVDX01JTk9SX18gPCA4KQorI2RlZmluZSBfTE9HX0FUVFIKKyNlbHNlCisjZGVmaW5lIF9MT0dfQVRUUiAgIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpCisjZW5kaWYKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICBzbm1wX2xvZyggaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikgX0xPR19BVFRSOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICBzbm1wX3Zsb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIHZhX2xpc3QgYXApOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICBzbm1wX2dldF9kb19sb2dnaW5nKCAgICB2b2lkKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQodm9pZCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkIHNubXBfZGlzYWJsZV9sb2coICAgICAgIHZvaWQpOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCBzaHV0ZG93bl9zbm1wX2xvZ2dpbmcoICB2b2lkKTsKKworI3VuZGVmIF9MT0dfQVRUUgorCisgICAgLyogRGVidWcgbWVzc2FnZXMgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19ERUJVR0dJTkcKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4JLyogZm9yIGludGVybmFsIG1hY3JvcyAqLworI2RlZmluZSBERUJVR01TRyh4KSAgICAgICAgZG8ge2lmIChfREJHX0lGXykge2RlYnVnbXNnIHg7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dUKHgpICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR1QoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdUUkFDRSAgICAgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR1RSQUNFO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHVFJBQ0VUT0soeCkgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdUUkFDRVRPSyh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR0woeCkgICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHTCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR1RMKHgpICAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHVEwoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dPSUQoeCkgICAgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR01TR09JRCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR1NVQk9JRCh4KSAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHU1VCT0lEKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHVkFSKHgpICAgICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dWQVIoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdNU0dPSURSQU5HRSh4KSBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dPSURSQU5HRSh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR0hFWCh4KSAgICAgZG8ge2lmIChfREJHX0lGXykge19fREJHTVNHSEVYKHgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHSEVYVExJKHgpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdNU0dIRVhUTEkoeCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdJTkRFTlRBREQoeCkgIGRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0lOREVOVEFERCh4KTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR0lOREVOVE1PUkUoKSAgZG8ge2lmIChfREJHX0lGXykge19fREJHSU5ERU5UTU9SRSgpO30gfXdoaWxlKDApCisjZGVmaW5lIERFQlVHSU5ERU5UTEVTUygpICBkbyB7aWYgKF9EQkdfSUZfKSB7X19EQkdJTkRFTlRMRVNTKCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdQUklOVElOREVOVCh0b2tlbikgXAorCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR1BSSU5USU5ERU5UKHRva2VuKTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR0RVTVBIRUFERVIodG9rZW4seCkgXAorCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0RVTVBIRUFERVIodG9rZW4seCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdEVU1QU0VDVElPTih0b2tlbix4KSBcCisJZG8ge2lmIChfREJHX0lGXykge19fREJHRFVNUFNFQ1RJT04odG9rZW4seCk7fSB9d2hpbGUoMCkKKyNkZWZpbmUgREVCVUdEVU1QU0VUVVAodG9rZW4sYnVmLGxlbikgXAorCWRvIHtpZiAoX0RCR19JRl8pIHtfX0RCR0RVTVBTRVRVUCh0b2tlbixidWYsbGVuKTt9IH13aGlsZSgwKQorI2RlZmluZSBERUJVR01TR19OQyh4KSAgZG8geyBfX0RCR01TR19OQyh4KTsgfXdoaWxlKDApCisjZGVmaW5lIERFQlVHTVNHVF9OQyh4KSBkbyB7IF9fREJHTVNHVF9OQyh4KTsgfXdoaWxlKDApCisKKyNlbHNlICAgICAgICAvKiBORVRTTk1QX05PX0RFQlVHR0lORyA6PSBlbmFibGUgc3RyZWFtbGluaW5nIG9mIHRoZSBjb2RlICovCisKKyNkZWZpbmUgREVCVUdNU0coeCkKKyNkZWZpbmUgREVCVUdNU0dUKHgpCisjZGVmaW5lIERFQlVHVFJBQ0UKKyNkZWZpbmUgREVCVUdUUkFDRVRPSyh4KQorI2RlZmluZSBERUJVR01TR0woeCkKKyNkZWZpbmUgREVCVUdNU0dUTCh4KQorI2RlZmluZSBERUJVR01TR09JRCh4KQorI2RlZmluZSBERUJVR01TR1NVQk9JRCh4KQorI2RlZmluZSBERUJVR01TR1ZBUih4KQorI2RlZmluZSBERUJVR01TR09JRFJBTkdFKHgpCisjZGVmaW5lIERFQlVHTVNHSEVYKHgpCisjZGVmaW5lIERFQlVHSUYoeCkgICAgICAgIGlmKDApCisjZGVmaW5lIERFQlVHRFVNUCh0LGIsbCxwKQorI2RlZmluZSBERUJVR0lOREVOVE1PUkUoKQorI2RlZmluZSBERUJVR0lOREVOVExFU1MoKQorI2RlZmluZSBERUJVR0lOREVOVEFERCh4KQorI2RlZmluZSBERUJVR01TR0hFWFRMSSh4KQorI2RlZmluZSBERUJVR1BSSU5USU5ERU5UKHRva2VuKQorI2RlZmluZSBERUJVR0RVTVBIRUFERVIodG9rZW4seCkKKyNkZWZpbmUgREVCVUdEVU1QU0VDVElPTih0b2tlbix4KQorI2RlZmluZSBERUJVR0RVTVBTRVRVUCh0b2tlbiwgYnVmLCBsZW4pCisKKyNkZWZpbmUgREVCVUdNU0dfTkMoeCkKKyNkZWZpbmUgREVCVUdNU0dUX05DKHgpCisKKyNlbmRpZiAgICAvKiBORVRTTk1QX05PX0RFQlVHR0lORyAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgZGVidWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKnRva2Vucyk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZChjb25zdCBjaGFyICp0b2tlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXRfZG9fZGVidWdnaW5nKGludCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9nZXRfZG9fZGVidWdnaW5nKHZvaWQpOwogCiAgICAgLyoKLSAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQotICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgotICAgICAqICAgIEluIGR1ZSBjb3Vyc2UsIHRoZSByb3V0aW5lcyByZWxldmFudCB0byB0aGlzIGFyZWEgb2YgdGhlCi0gICAgICogIEFQSSB3aWxsIGJlIGlkZW50aWZpZWQsIGFuZCBsaXN0ZWQgaGVyZSBkaXJlY3RseS4KKyAgICAgKiAgICBIYXZpbmcgZXh0cmFjdGVkIHRoZSBtYWluICgicHVibGljIEFQSSIpIGNhbGxzIHJlbGV2YW50CisgICAgICogIHRvIHRoaXMgYXJlYSBvZiB0aGUgTmV0LVNOTVAgcHJvamVjdCwgdGhlIG5leHQgc3RlcCBpcyB0bworICAgICAqICBpZGVudGlmeSB0aGUgcmVsYXRlZCAicHVibGljIGludGVybmFsIEFQSSIgcm91dGluZXMuCiAgICAgICoKLSAgICAgKiAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBoZWFkZXIgZmlsZSBpcyBhIHBsYWNlaG9sZGVyLAotICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCisgICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGdhdGhlcmVkCisgICAgICogIHRvZ2V0aGVyIGludG8gYSBjb21wYW5pb24gJ2xpYnJhcnkvb3V0cHV0X2FwaS5oJyBoZWFkZXIgZmlsZS4KKyAgICAgKiAgW09yIHNvbWUgc3VpdGFibGUgbmFtZV0KKyAgICAgKgorICAgICAqICAgIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZQorICAgICAqICB0cmFkaXRpb25hbCBoZWFkZXJzIHRoYXQgcHJvdmlkZWQgdGhlIGFib3ZlIGRlZmluaXRpb25zCisgICAgICogIHdpbGwgcHJvYmFibHkgYWxzbyBjb3ZlciB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgQVBJIGNhbGxzLgorICAgICAqICBIZW5jZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZToKICAgICAgKi8KIAorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KQEAgLTI2LDQgKzE1NCw0IEBACiAjZGVmaW5lIEVSUk9SX01TRyhzdHJpbmcpCXNubXBfc2V0X2RldGFpbChzdHJpbmcpCiAjZW5kaWYKIAotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRfU05NUF9MT0dHSU5HX0FQSV9IICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVF9TTk1QX09VVFBVVF9BUElfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAppbmRleCBhM2ExZGQ2Li4xMjU1OTVkIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaApAQCAtNywxNCArNywzNiBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gICAgICAgICAgIkMiIHsKKyNlbmRpZgorCitORVRTTk1QX0lNUE9SVAorbmV0c25tcF9wZHUgICAgKnNubXBfcGR1X2NyZWF0ZShpbnQgdHlwZSk7CitORVRTTk1QX0lNUE9SVAorbmV0c25tcF9wZHUgICAgKnNubXBfY2xvbmVfcGR1KG5ldHNubXBfcGR1ICpwZHUpOworTkVUU05NUF9JTVBPUlQKK25ldHNubXBfcGR1ICAgICpzbm1wX2ZpeF9wZHUoICBuZXRzbm1wX3BkdSAqcGR1LCBpbnQgaWR4KTsKK05FVFNOTVBfSU1QT1JUCit2b2lkICAgICAgICAgICAgc25tcF9mcmVlX3BkdSggbmV0c25tcF9wZHUgKnBkdSk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKICAgICAvKgotICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCi0gICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCi0gICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlIHJvdXRpbmVzIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUKLSAgICAgKiAgQVBJIHdpbGwgYmUgaWRlbnRpZmllZCwgYW5kIGxpc3RlZCBoZXJlIGRpcmVjdGx5LgorICAgICAqICAgIEhhdmluZyBleHRyYWN0ZWQgdGhlIG1haW4gKCJwdWJsaWMgQVBJIikgY2FsbHMgcmVsZXZhbnQKKyAgICAgKiAgdG8gdGhpcyBhcmVhIG9mIHRoZSBOZXQtU05NUCBwcm9qZWN0LCB0aGUgbmV4dCBzdGVwIGlzIHRvCisgICAgICogIGlkZW50aWZ5IHRoZSByZWxhdGVkICJwdWJsaWMgaW50ZXJuYWwgQVBJIiByb3V0aW5lcy4KICAgICAgKgotICAgICAqICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGlzIGhlYWRlciBmaWxlIGlzIGEgcGxhY2Vob2xkZXIsCi0gICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KKyAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZ2F0aGVyZWQKKyAgICAgKiAgdG9nZXRoZXIgaW50byBhIGNvbXBhbmlvbiAnbGlicmFyeS9wZHVfYXBpLmgnIGhlYWRlciBmaWxlLgorICAgICAqICBbT3Igc29tZSBzdWl0YWJsZSBuYW1lXQorICAgICAqCisgICAgICogICAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhlIGV4cGVjdGF0aW9uIGlzIHRoYXQgdGhlCisgICAgICogIHRyYWRpdGlvbmFsIGhlYWRlcnMgdGhhdCBwcm92aWRlZCB0aGUgYWJvdmUgZGVmaW5pdGlvbnMKKyAgICAgKiAgd2lsbCBwcm9iYWJseSBhbHNvIGNvdmVyIHRoZSByZWxldmFudCBpbnRlcm5hbCBBUEkgY2FsbHMuCisgICAgICogIEhlbmNlIHRoZXkgYXJlIGxpc3RlZCBoZXJlOgogICAgICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oIGIvaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCmluZGV4IDMzMjdmODkuLjg4ZGJjNDEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKQEAgLTgsMTQgKzgsMjcyIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3Nlc3NfaW5pdChuZXRzbm1wX3Nlc3Npb24gKik7CisKICAgICAvKgotICAgICAqICBGb3IgdGhlIGluaXRpYWwgcmVsZWFzZSwgdGhpcyB3aWxsIGp1c3QgcmVmZXIgdG8gdGhlCi0gICAgICogIHJlbGV2YW50IFVDRCBoZWFkZXIgZmlsZXMuCi0gICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlIHJvdXRpbmVzIHJlbGV2YW50IHRvIHRoaXMgYXJlYSBvZiB0aGUKLSAgICAgKiAgQVBJIHdpbGwgYmUgaWRlbnRpZmllZCwgYW5kIGxpc3RlZCBoZXJlIGRpcmVjdGx5LgorICAgICAqIG5ldHNubXBfc2Vzc2lvbiAqc25tcF9vcGVuKHNlc3Npb24pCisgICAgICogICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247CiAgICAgICoKLSAgICAgKiAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBoZWFkZXIgZmlsZSBpcyBhIHBsYWNlaG9sZGVyLAotICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCisgICAgICogU2V0cyB1cCB0aGUgc2Vzc2lvbiB3aXRoIHRoZSBzbm1wX3Nlc3Npb24gaW5mb3JtYXRpb24gcHJvdmlkZWQKKyAgICAgKiBieSB0aGUgdXNlci4gIFRoZW4gb3BlbnMgYW5kIGJpbmRzIHRoZSBuZWNlc3NhcnkgVURQIHBvcnQuCisgICAgICogQSBoYW5kbGUgdG8gdGhlIGNyZWF0ZWQgc2Vzc2lvbiBpcyByZXR1cm5lZCAodGhpcyBpcyBkaWZmZXJlbnQgdGhhbgorICAgICAqIHRoZSBwb2ludGVyIHBhc3NlZCB0byBzbm1wX29wZW4oKSkuICBPbiBhbnkgZXJyb3IsIE5VTEwgaXMgcmV0dXJuZWQKKyAgICAgKiBhbmQgc25tcF9lcnJubyBpcyBzZXQgdG8gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvZGUuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfb3BlbihuZXRzbm1wX3Nlc3Npb24gKik7CisKKyAgICAvKgorICAgICAqIGludCBzbm1wX2Nsb3NlKHNlc3Npb24pCisgICAgICogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKKyAgICAgKgorICAgICAqIENsb3NlIHRoZSBpbnB1dCBzZXNzaW9uLiAgRnJlZXMgYWxsIGRhdGEgYWxsb2NhdGVkIGZvciB0aGUgc2Vzc2lvbiwKKyAgICAgKiBkZXF1ZXVlcyBhbnkgcGVuZGluZyByZXF1ZXN0cywgYW5kIGNsb3NlcyBhbnkgc29ja2V0cyBhbGxvY2F0ZWQgZm9yCisgICAgICogdGhlIHNlc3Npb24uICBSZXR1cm5zIDAgb24gZXJyb3IsIDEgb3RoZXJ3aXNlLgorICAgICAqCisgICAgICogc25tcF9jbG9zZV9zZXNzaW9ucygpIGRvZXMgdGhlIHNhbWUgdGhpbmcgZm9yIGFsbCBvcGVuIHNlc3Npb25zCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9zZShuZXRzbm1wX3Nlc3Npb24gKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9jbG9zZV9zZXNzaW9ucyh2b2lkKTsKKworCisgICAgLyoKKyAgICAgKiBpbnQgc25tcF9zZW5kKHNlc3Npb24sIHBkdSkKKyAgICAgKiAgICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOworICAgICAqICAgICBuZXRzbm1wX3BkdSAgICAgICpwZHU7CisgICAgICoKKyAgICAgKiBTZW5kcyB0aGUgaW5wdXQgcGR1IG9uIHRoZSBzZXNzaW9uIGFmdGVyIGNhbGxpbmcgc25tcF9idWlsZCB0byBjcmVhdGUKKyAgICAgKiBhIHNlcmlhbGl6ZWQgcGFja2V0LiAgSWYgbmVjZXNzYXJ5LCBzZXQgc29tZSBvZiB0aGUgcGR1IGRhdGEgZnJvbSB0aGUKKyAgICAgKiBzZXNzaW9uIGRlZmF1bHRzLiAgQWRkIGEgcmVxdWVzdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGR1IHRvIHRoZSBsaXN0CisgICAgICogb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgb24gdGhpcyBzZXNzaW9uLCB0aGVuIHNlbmQgdGhlIHBkdS4KKyAgICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0IGlkIG9mIHRoZSBnZW5lcmF0ZWQgcGFja2V0IGlmIGFwcGxpY2FibGUsIG90aGVyd2lzZSAxLgorICAgICAqIE9uIGFueSBlcnJvciwgMCBpcyByZXR1cm5lZC4KKyAgICAgKiBUaGUgcGR1IGlzIGZyZWVkIGJ5IHNubXBfc2VuZCgpIHVubGVzcyBhIGZhaWx1cmUgb2NjdXJlZC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NlbmQobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICopOworCisgICAgLyoKKyAgICAgKiBpbnQgc25tcF9hc3luY19zZW5kKHNlc3Npb24sIHBkdSwgY2FsbGJhY2ssIGNiX2RhdGEpCisgICAgICogICAgIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbjsKKyAgICAgKiAgICAgbmV0c25tcF9wZHUgICAgICAqcGR1OworICAgICAqICAgICBuZXRzbm1wX2NhbGxiYWNrIGNhbGxiYWNrOworICAgICAqICAgICB2b2lkICAgKmNiX2RhdGE7CisgICAgICoKKyAgICAgKiBTZW5kcyB0aGUgaW5wdXQgcGR1IG9uIHRoZSBzZXNzaW9uIGFmdGVyIGNhbGxpbmcgc25tcF9idWlsZCB0byBjcmVhdGUKKyAgICAgKiBhIHNlcmlhbGl6ZWQgcGFja2V0LiAgSWYgbmVjZXNzYXJ5LCBzZXQgc29tZSBvZiB0aGUgcGR1IGRhdGEgZnJvbSB0aGUKKyAgICAgKiBzZXNzaW9uIGRlZmF1bHRzLiAgQWRkIGEgcmVxdWVzdCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgcGR1IHRvIHRoZSBsaXN0CisgICAgICogb2Ygb3V0c3RhbmRpbmcgcmVxdWVzdHMgb24gdGhpcyBzZXNzaW9uIGFuZCBzdG9yZSBjYWxsYmFjayBhbmQgZGF0YSwKKyAgICAgKiB0aGVuIHNlbmQgdGhlIHBkdS4KKyAgICAgKiBSZXR1cm5zIHRoZSByZXF1ZXN0IGlkIG9mIHRoZSBnZW5lcmF0ZWQgcGFja2V0IGlmIGFwcGxpY2FibGUsIG90aGVyd2lzZSAxLgorICAgICAqIE9uIGFueSBlcnJvciwgMCBpcyByZXR1cm5lZC4KKyAgICAgKiBUaGUgcGR1IGlzIGZyZWVkIGJ5IHNubXBfc2VuZCgpIHVubGVzcyBhIGZhaWx1cmUgb2NjdXJlZC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX2FzeW5jX3NlbmQobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfcGR1ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrLCB2b2lkICopOworCisKKyAgICAvKgorICAgICAqIHZvaWQgc25tcF9yZWFkKGZkc2V0KQorICAgICAqICAgICBmZF9zZXQgICpmZHNldDsKKyAgICAgKgorICAgICAqIENoZWNrcyB0byBzZWUgaWYgYW55IG9mIHRoZSBmZCdzIHNldCBpbiB0aGUgZmRzZXQgYmVsb25nIHRvCisgICAgICogc25tcC4gIEVhY2ggc29ja2V0IHdpdGggaXQncyBmZCBzZXQgaGFzIGEgcGFja2V0IHJlYWQgZnJvbSBpdAorICAgICAqIGFuZCBzbm1wX3BhcnNlIGlzIGNhbGxlZCBvbiB0aGUgcGFja2V0IHJlY2VpdmVkLiAgVGhlIHJlc3VsdGluZyBwZHUKKyAgICAgKiBpcyBwYXNzZWQgdG8gdGhlIGNhbGxiYWNrIHJvdXRpbmUgZm9yIHRoYXQgc2Vzc2lvbi4gIElmIHRoZSBjYWxsYmFjaworICAgICAqIHJvdXRpbmUgcmV0dXJucyBzdWNjZXNzZnVsbHksIHRoZSBwZHUgYW5kIGl0J3MgcmVxdWVzdCBhcmUgZGVsZXRlZC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX3JlYWQoZmRfc2V0ICopOworCisgICAgLyoKKyAgICAgKiBzbm1wX3JlYWQyKCkgaXMgc2ltaWxhciB0byBzbm1wX3JlYWQoKSwgYnV0IGFjY2VwdHMgYSBwb2ludGVyIHRvIGEKKyAgICAgKiBsYXJnZSBmaWxlIGRlc2NyaXB0b3Igc2V0IGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGEgcmVndWxhciBmaWxlCisgICAgICogZGVzY3JpcHRvciBzZXQuCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9yZWFkMihuZXRzbm1wX2xhcmdlX2ZkX3NldCAqKTsKKworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zeW5jaF9yZXNwb25zZShuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKik7CisKKyAgICAvKgorICAgICAqIGludCBzbm1wX3NlbGVjdF9pbmZvKG51bWZkcywgZmRzZXQsIHRpbWVvdXQsIGJsb2NrKQorICAgICAqIGludCAqbnVtZmRzOworICAgICAqIGZkX3NldCAgICpmZHNldDsKKyAgICAgKiBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dDsKKyAgICAgKiBpbnQgKmJsb2NrOworICAgICAqCisgICAgICogUmV0dXJucyBpbmZvIGFib3V0IHdoYXQgc25tcCByZXF1aXJlcyBmcm9tIGEgc2VsZWN0IHN0YXRlbWVudC4KKyAgICAgKiBudW1mZHMgaXMgdGhlIG51bWJlciBvZiBmZHMgaW4gdGhlIGxpc3QgdGhhdCBhcmUgc2lnbmlmaWNhbnQuCisgICAgICogQWxsIGZpbGUgZGVzY3JpcHRvcnMgb3BlbmVkIGZvciBTTk1QIGFyZSBPUidkIGludG8gdGhlIGZkc2V0LgorICAgICAqIElmIGFjdGl2aXR5IG9jY3VycyBvbiBhbnkgb2YgdGhlc2UgZmlsZSBkZXNjcmlwdG9ycywgc25tcF9yZWFkCisgICAgICogc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoYXQgZmlsZSBkZXNjcmlwdG9yIHNldC4KKyAgICAgKgorICAgICAqIFRoZSB0aW1lb3V0IGlzIHRoZSBsYXRlc3QgdGltZSB0aGF0IFNOTVAgY2FuIHdhaXQgZm9yIGEgdGltZW91dC4gIFRoZQorICAgICAqIHNlbGVjdCBzaG91bGQgYmUgZG9uZSB3aXRoIHRoZSBtaW5pbXVtIHRpbWUgYmV0d2VlbiB0aW1lb3V0IGFuZCBhbnkgb3RoZXIKKyAgICAgKiB0aW1lb3V0cyBuZWNlc3NhcnkuICBUaGlzIHNob3VsZCBiZSBjaGVja2VkIHVwb24gZWFjaCBpbnZvY2F0aW9uIG9mIHNlbGVjdC4KKyAgICAgKiBJZiBhIHRpbWVvdXQgaXMgcmVjZWl2ZWQsIHNubXBfdGltZW91dCBzaG91bGQgYmUgY2FsbGVkIHRvIGNoZWNrIGlmIHRoZQorICAgICAqIHRpbWVvdXQgd2FzIGZvciBTTk1QLiAgKHNubXBfdGltZW91dCBpcyBpZGVtcG90ZW50KQorICAgICAqCisgICAgICogQmxvY2sgaXMgMSBpZiB0aGUgc2VsZWN0IGlzIHJlcXVlc3RlZCB0byBibG9jayBpbmRlZmluaXRlbHksIHJhdGhlciB0aGFuCisgICAgICogdGltZSBvdXQuICBJZiBibG9jayBpcyBpbnB1dCBhcyAxLCB0aGUgdGltZW91dCB2YWx1ZSB3aWxsIGJlIHRyZWF0ZWQgYXMKKyAgICAgKiB1bmRlZmluZWQsIGJ1dCBpdCBtdXN0IGJlIGF2YWlsYWJsZSBmb3Igc2V0dGluZyBpbiBzbm1wX3NlbGVjdF9pbmZvLiAgT24KKyAgICAgKiByZXR1cm4sIGlmIGJsb2NrIGlzIHRydWUsIHRoZSB2YWx1ZSBvZiB0aW1lb3V0IHdpbGwgYmUgdW5kZWZpbmVkLgorICAgICAqCisgICAgICogc25tcF9zZWxlY3RfaW5mbyByZXR1cm5zIHRoZSBudW1iZXIgb2Ygb3BlbiBzb2NrZXRzLiAgKGkuZS4gVGhlIG51bWJlcgorICAgICAqIG9mIHNlc3Npb25zIG9wZW4pCisgICAgICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZWxlY3RfaW5mbyhpbnQgKiwgZmRfc2V0ICosIHN0cnVjdCB0aW1ldmFsICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICopOworCisgICAgLyoKKyAgICAgKiBzbm1wX3NlbGVjdF9pbmZvMigpIGlzIHNpbWlsYXIgdG8gc25tcF9zZWxlY3RfaW5mbygpLCBidXQgYWNjZXB0cyBhCisgICAgICogcG9pbnRlciB0byBhIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBzZXQgaW5zdGVhZCBvZiBhIHBvaW50ZXIgdG8gYQorICAgICAqIHJlZ3VsYXIgZmlsZSBkZXNjcmlwdG9yIHNldC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NlbGVjdF9pbmZvMihpbnQgKiwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiwgaW50ICopOworCisjZGVmaW5lIE5FVFNOTVBfU0VMRUNUX05PRkxBR1MgIDB4MDAKKyNkZWZpbmUgTkVUU05NUF9TRUxFQ1RfTk9BTEFSTVMgMHgwMQorICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mb19mbGFncyh2b2lkICosIGludCAqLCBmZF9zZXQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICosIGludCAqLCBpbnQpOworICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yX2ZsYWdzKHZvaWQgKiwgaW50ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQgKiwgaW50KTsKKworICAgIC8qCisgICAgICogdm9pZCBzbm1wX3RpbWVvdXQoKTsKKyAgICAgKgorICAgICAqIHNubXBfdGltZW91dCBzaG91bGQgYmUgY2FsbGVkIHdoZW5ldmVyIHRoZSB0aW1lb3V0IGZyb20gc25tcF9zZWxlY3RfaW5mbworICAgICAqIGV4cGlyZXMsIGJ1dCBpdCBpcyBpZGVtcG90ZW50LCBzbyBzbm1wX3RpbWVvdXQgY2FuIGJlIHBvbGxlZCAocHJvYmFibHkgYQorICAgICAqIGNwdSBleHBlbnNpdmUgcHJvcG9zaXRpb24pLiAgc25tcF90aW1lb3V0IGNoZWNrcyB0byBzZWUgaWYgYW55IG9mIHRoZQorICAgICAqIHNlc3Npb25zIGhhdmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdCB0aGF0IGhhcyB0aW1lZCBvdXQuICBJZiBpdCBmaW5kcyBvbmUKKyAgICAgKiAob3IgbW9yZSksIGFuZCB0aGF0IHBkdSBoYXMgbW9yZSByZXRyaWVzIGF2YWlsYWJsZSwgYSBuZXcgcGFja2V0IGlzIGZvcm1lZAorICAgICAqIGZyb20gdGhlIHBkdSBhbmQgaXMgcmVzZW50LiAgSWYgdGhlcmUgYXJlIG5vIG1vcmUgcmV0cmllcyBhdmFpbGFibGUsIHRoZQorICAgICAqIGNhbGxiYWNrIGZvciB0aGUgc2Vzc2lvbiBpcyB1c2VkIHRvIGFsZXJ0IHRoZSB1c2VyIG9mIHRoZSB0aW1lb3V0LgorICAgICAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF90aW1lb3V0KHZvaWQpOworCisgICAgLyoKKyAgICAgKiBzaW5nbGUgc2Vzc2lvbiBBUEkuCisgICAgICoKKyAgICAgKiBUaGVzZSBmdW5jdGlvbnMgcGVyZm9ybSBzaW1pbGFyIGFjdGlvbnMgYXMgc25tcF9YWCBmdW5jdGlvbnMsCisgICAgICogYnV0IG9wZXJhdGUgb24gYSBzaW5nbGUgc2Vzc2lvbiBvbmx5LgorICAgICAqCisgICAgICogU3lub3BzaXM6CisgICAgIAorICAgICB2b2lkICogc2Vzc3A7CisgICAgIG5ldHNubXBfc2Vzc2lvbiBzZXNzaW9uLCAqc3M7CisgICAgIG5ldHNubXBfcGR1ICpwZHUsICpyZXNwb25zZTsKKyAgICAgCisgICAgIHNubXBfc2Vzc19pbml0KCZzZXNzaW9uKTsKKyAgICAgc2Vzc2lvbi5yZXRyaWVzID0gLi4uCisgICAgIHNlc3Npb24ucmVtb3RlX3BvcnQgPSAuLi4KKyAgICAgc2Vzc3AgPSBzbm1wX3Nlc3Nfb3Blbigmc2Vzc2lvbik7CisgICAgIHNzID0gc25tcF9zZXNzX3Nlc3Npb24oc2Vzc3ApOworICAgICBpZiAoc3MgPT0gTlVMTCkKKyAgICAgZXhpdCgxKTsKKyAgICAgLi4uCisgICAgIGlmIChzcy0+Y29tbXVuaXR5KSBmcmVlKHNzLT5jb21tdW5pdHkpOworICAgICBzcy0+Y29tbXVuaXR5ID0gc3RyZHVwKGdhdGV3YXkpOworICAgICBzcy0+Y29tbXVuaXR5X2xlbiA9IHN0cmxlbihnYXRld2F5KTsKKyAgICAgLi4uCisgICAgIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZShzZXNzcCwgcGR1LCAmcmVzcG9uc2UpOworICAgICAuLi4KKyAgICAgc25tcF9zZXNzX2Nsb3NlKHNlc3NwKTsKKyAgICAgCisgICAgICogU2VlIGFsc286CisgICAgICogc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlLCBpbiBzbm1wX2NsaWVudC5oLgorICAgICAKKyAgICAgKiBOb3RlczoKKyAgICAgKiAgMS4gSW52b2tlIHNubXBfc2Vzc19zZXNzaW9uIGFmdGVyIHNubXBfc2Vzc19vcGVuLgorICAgICAqICAyLiBzbm1wX3Nlc3Nfc2Vzc2lvbiByZXR1cm4gdmFsdWUgaXMgYW4gb3BhcXVlIHBvaW50ZXIuCisgICAgICogIDMuIERvIE5PVCBmcmVlIG1lbW9yeSByZXR1cm5lZCBieSBzbm1wX3Nlc3Nfc2Vzc2lvbi4KKyAgICAgKiAgNC4gUmVwbGFjZSBzbm1wX3NlbmQoc3MscGR1KSB3aXRoIHNubXBfc2Vzc19zZW5kKHNlc3NwLHBkdSkKKyAgICAgKi8KKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgKnNubXBfc2Vzc19vcGVuKG5ldHNubXBfc2Vzc2lvbiAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICpzbm1wX3Nlc3NfcG9pbnRlcihuZXRzbm1wX3Nlc3Npb24gKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfc2Vzc19zZXNzaW9uKHZvaWQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3Nlc3Npb24gKnNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cCh2b2lkICopOworCisKKyAgICAvKgorICAgICAqIHVzZSByZXR1cm4gdmFsdWUgZnJvbSBzbm1wX3Nlc3Nfb3BlbiBhcyB2b2lkICogcGFyYW1ldGVyIAorICAgICAqLworCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbmQodm9pZCAqLCBuZXRzbm1wX3BkdSAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfYXN5bmNfc2VuZCh2b2lkICosIG5ldHNubXBfcGR1ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2ssIHZvaWQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXNzX3NlbGVjdF9pbmZvKHZvaWQgKiwgaW50ICosIGZkX3NldCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiwgaW50ICopOworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbzIodm9pZCAqLCBpbnQgKiwKKwkJCQkJICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqLCBpbnQgKik7CisgICAgLyoKKyAgICAgKiBSZXR1cm5zIDAgaWYgc3VjY2VzcywgLTEgaWYgZmFpbC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfcmVhZCh2b2lkICosIGZkX3NldCAqKTsKKyAgICAvKgorICAgICAqIFNpbWlsYXIgdG8gc25tcF9zZXNzX3JlYWQoKSwgYnV0IGFjY2VwdHMgYSBwb2ludGVyIHRvIGEgbGFyZ2UgZmlsZQorICAgICAqIGRlc2NyaXB0b3Igc2V0IGluc3RlYWQgb2YgYSBwb2ludGVyIHRvIGEgZmlsZSBkZXNjcmlwdG9yIHNldC4KKyAgICAgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfcmVhZDIodm9pZCAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICB2b2lkICAgICAgICAgICAgc25tcF9zZXNzX3RpbWVvdXQodm9pZCAqKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uodm9pZCAqKTsKKworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgaW50ICAgICAgICAgICAgIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSh2b2lkICosIG5ldHNubXBfcGR1ICosCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqKik7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKworICAgIC8qCisgICAgICogICAgSGF2aW5nIGV4dHJhY3RlZCB0aGUgbWFpbiAoInB1YmxpYyBBUEkiKSBjYWxscyByZWxldmFudAorICAgICAqICB0byB0aGlzIGFyZWEgb2YgdGhlIE5ldC1TTk1QIHByb2plY3QsIHRoZSBuZXh0IHN0ZXAgaXMgdG8KKyAgICAgKiAgaWRlbnRpZnkgdGhlIHJlbGF0ZWQgInB1YmxpYyBpbnRlcm5hbCBBUEkiIHJvdXRpbmVzLgorICAgICAqCisgICAgICogICAgSW4gZHVlIGNvdXJzZSwgdGhlc2Ugc2hvdWxkIHByb2JhYmx5IGJlIGdhdGhlcmVkCisgICAgICogIHRvZ2V0aGVyIGludG8gYSBjb21wYW5pb24gJ2xpYnJhcnkvc2Vzc2lvbl9hcGkuaCcgaGVhZGVyIGZpbGUuCisgICAgICogIFtPciBzb21lIHN1aXRhYmxlIG5hbWVdCisgICAgICoKKyAgICAgKiAgICBCdXQgZm9yIHRoZSB0aW1lIGJlaW5nLCB0aGUgZXhwZWN0YXRpb24gaXMgdGhhdCB0aGUKKyAgICAgKiAgdHJhZGl0aW9uYWwgaGVhZGVycyB0aGF0IHByb3ZpZGVkIHRoZSBhYm92ZSBkZWZpbml0aW9ucworICAgICAqICB3aWxsIHByb2JhYmx5IGFsc28gY292ZXIgdGhlIHJlbGV2YW50IGludGVybmFsIEFQSSBjYWxscy4KKyAgICAgKiAgSGVuY2UgdGhleSBhcmUgbGlzdGVkIGhlcmU6CiAgICAgICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9haXguaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oCmluZGV4IDQzMjcyZjEuLjAyZDQ5ODEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2FpeC5oCkBAIC0yMiwzICsyMiw2IEBACiAKIC8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUworCisvKiB0aGUgbGVnYWN5IHN5bWJvbCBOT0FDQ0VTUyBjbGFzaGVzIHdpdGggdGhlIHN5c3RlbSBoZWFkZXJzLiBSZW1vdmUgaXQuICovCisjZGVmaW5lIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9jeWd3aW4uaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oCmluZGV4IDE0YWU4YWUuLmE5Yjc2ZmIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2N5Z3dpbi5oCkBAIC03LDcgKzcsNiBAQAogI2luY2x1ZGUgPHN0ZGludC5oPgkvKiB1aW50MzJfdCAqLwogI2VuZGlmCiAKLSN1bmRlZiBIQVZFX1dJTlNPQ0tfSAogI3VuZGVmIGJzZGxpa2UKICN1bmRlZiBNQlNUQVRfU1lNQk9MCiAjdW5kZWYgVE9UQUxfTUVNT1JZX1NZTUJPTApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaAppbmRleCA2NzUwY2YxLi41YTA2NWI3IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4uaApAQCAtNSwzICs1LDQgQEAKICAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCiAgKi8KICN1bmRlZiBIQVZFX0ZTVEFCX0gKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTAuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzAzNzMyNAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEwLmgKQEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBXaGlsZSBEYXJ3aW4gMTAgKGFrYSwgTWFjIE9TIFggMTAuNiBTbm93IExlb3BhcmQpIGlzICJCU0QtbGlrZSIsIGl0IGRpZmZlcnMKKyAqIHN1YnN0YW50aWFsbHkgZW5vdWdoIHRvIG5vdCB3YXJyYW50IHByZXRlbmRpbmcgaXQgaXMgYSBCU0QgZmxhdm9yLgorICogVGhpcyBmaXJzdCBzZWN0aW9uIGFyZSB0aGUgdmVzdGlnYWwgQlNEIHJlbW5hbnRzLgorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworLyoKKyAqIEJTRCBzeXN0ZW1zIHVzZSBhIGRpZmZlcmVudCBtZXRob2Qgb2YgbG9va2luZyB1cCBzb2NrYWRkcl9pbiB2YWx1ZXMgCisgKi8KKy8qICNkZWZpbmUgTkVFRF9LTEdFVFNBIDEgKi8KKworLyoKKyAqIEFSUF9TY2FuX05leHQgbmVlZHMgYSA0dGggaWZJbmRleCBhcmd1bWVudCAKKyAqLworI2RlZmluZSBBUlBfU0NBTl9GT1VSX0FSR1VNRU5UUyAxCisKKyNkZWZpbmUgQ0hFQ0tfUlRfRkxBR1MgMQorCisvKgorICogdGhpcyBpcyBub3QgZ29vZCBlbm91Z2ggYmVmb3JlIGZyZWVic2QzISAKKyAqLworLyogI3VuZGVmIEhBVkVfTkVUX0lGX01JQl9IICovCisKKy8qCisgKiBUaGlzIHNlY3Rpb24gYWRkcyB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgZnJvbSBnZW5lcmljLmgKKyAqIChhIGZpbGUgd2UgZG9uJ3QgaW5jbHVkZSBoZXJlKQorICovCisKKy8qCisgKiB1ZHBfaW5wY2IgbGlzdCBzeW1ib2wsIGUuZy4gZm9yIG1pYklJL3VkcFRhYmxlLmMKKyAqLworI2RlZmluZSBJTlBfTkVYVF9TWU1CT0wgaW5wX25leHQKKworLyoKKyAqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIE1hYyBPUyBYIDEwLjUgKGFuZCBsYXRlcikgc3BlY2lmaWMgYWRkaXRpb25zLgorICovCisjZGVmaW5lIGRhcndpbiAxMAorI2lmbmRlZiBkYXJ3aW4xMAorIyAgIGRlZmluZSBkYXJ3aW4xMCBkYXJ3aW4KKyNlbmRpZgorCisvKgorICogTWFjIE9TIFggc2hvdWxkIG9ubHkgdXNlIHRoZSBtb2Rlcm4gQVBJIGFuZCBkZWZpbml0aW9ucy4KKyAqLworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworI2RlZmluZSBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyAxCisjZW5kaWYKKworLyoKKyAqIGxvb2tzIGxpa2UgdGhlIElGVGFibGUgc3R1ZmYgd29ya3MgYmV0dGVyIHRoYW4gdGhlIG1pYklJIHZlcnNpb25zCisgKi8KKyAKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKKworLyoKKyAqIHVzZSBuZXcgaG9zdCByZXNvdXJjZXMgZmlsZXMgYXMgd2VsbAorICovCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV0lOU1RfUkVXUklURVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fUkVXUklURVMKKyN1bmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjZGVmaW5lIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMIDEKKworLyoKKyAqIEVuYWJsaW5nIHRoaXMgcmVzdHJpY3RzIHRoZSBjb21waWxlciB0byBtb3N0bHkgcHVibGljIEFQSXMuCisgKi8KKyNpZm5kZWYgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRSAxCisjZW5kaWYKKyNpZm5kZWYgX19BUFBMRV9BUElfVU5TVEFCTEUKKyNkZWZpbmUgX19BUFBMRV9BUElfVU5TVEFCTEUgMQorI2VuZGlmCisKKy8qCisgKiBEYXJ3aW4ncyB0b29scyBhcmUgY2FwYWJsZSBvZiBidWlsZGluZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGluIG9uZSBwYXNzLgorICogQXMgYSByZXN1bHQsIHBsYXRmb3JtIGRlZmluaXRpb25zIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCBjb21waWxlIHRpbWUuCisgKi8KKyNpZmRlZiBCWVRFX09SREVSCisjIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGFuIGZzdGFiLmggZmlsZSwgZ2V0ZnNmaWxlIGV0Yy4gYWx3YXlzIHJldHVybiBudWxsLgorICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KKyAqLworI3VuZGVmIEhBVkVfRlNUQUJfSAorCisjZGVmaW5lIFNXQVBGSUxFX0RJUiAiL3ByaXZhdGUvdmFyL3ZtIgorI2RlZmluZSBTV0FQRklMRV9QUkVGSVggInN3YXBmaWxlIgorCisvKgorICogVGhlc2UgYXBwYXJlbnRseSB1c2VkIHRvIGJlIGluIG5ldGluZXQvdGNwX3RpbWVycy5oLCBidXQgd2VudCBhd2F5IGluCisgKiAxMC40LjIuIERlZmluZSB0aGVtIGhlcmUgdGlsIHdlIGZpbmQgb3V0IGEgd2F5IHRvIGdldCB0aGUgcmVhbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgVENQVFZfTUlOICAgICAgICggIDEqUFJfU0xPV0haKSAgICAgICAgIC8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCisjZGVmaW5lIFRDUFRWX1JFWE1UTUFYICAoIDY0KlBSX1NMT1dIWikgICAgICAgICAvKiBtYXggYWxsb3dhYmxlIFJFWE1UIHZhbHVlICovCisKKy8qCisgKiBCZWNhdXNlIE1hYyBPUyBYIGlzIGJ1aWx0IG9uIE1hY2gsIGl0IGRvZXMgbm90IHByb3ZpZGUgYSBCU0QtY29tcGF0aWJsZQorICogVk0gc3RhdGlzdGljcyBBUEkuCisgKi8KKyNkZWZpbmUgVVNFX01BQ0hfSE9TVF9TVEFUSVNUSUNTIDEKKworLyoKKyAqIFRoaXMgdGVsbHMgY29kZSB0aGF0IG1hbmlwdWxhdGVzIElQdjYgdGhhdCB0aGUgc3RydWN0dXJlcyBhcmUgdW5pZmllZCwKKyAqIGkuZS4sIElQdjQgYW5kIElQdjYgdXNlIHRoZSBzYW1lIHN0cnVjdHMuCisgKiBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIHdpdGggYSBjb25maWd1cmUgZGlyZWN0aXZlLgorICovCisvKiAjZGVmaW5lIFVTRV9VTklGSUVEX0lQVjZfU1RSVUNUUyAxICovCisjdW5kZWYgU1RSVUNUX2luNnBjYl9IQVNfaW5wX3ZmbGFnCisKKy8qCisgKiB1dGlsaXR5IG1hY3JvIHVzZWQgaW4gc2V2ZXJhbCBkYXJ3aW4gc3BlY2lmaWMgZmlsZXMKKyAqLworI2RlZmluZSBTTk1QX0NGUmVsZWFzZSh4KSBkbyB7IGlmICh4KSB7IENGUmVsZWFzZSh4KTsgeCA9IE5VTEw7IH0gfSB3aGlsZSgwKQorCisvKgorICogTWFjIE9TIFggcnVucyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUsCisgKiAgIHdoaWNoIGhhbmRsZSB1ZHBUYWJsZSBpbmRleCB2YWx1ZXMgZGlmZmVyZW50bHkKKyAqLworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorI2lmZGVmIFRBUkdFVF9SVF9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTEuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjExLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ2ZjAzZAotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjExLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qCisgKiBXaGlsZSBEYXJ3aW4gMTAgKGFrYSwgTWFjIE9TIFggMTAuNiBTbm93IExlb3BhcmQpIGlzICJCU0QtbGlrZSIsIGl0IGRpZmZlcnMKKyAqIHN1YnN0YW50aWFsbHkgZW5vdWdoIHRvIG5vdCB3YXJyYW50IHByZXRlbmRpbmcgaXQgaXMgYSBCU0QgZmxhdm9yLgorICogVGhpcyBmaXJzdCBzZWN0aW9uIGFyZSB0aGUgdmVzdGlnYWwgQlNEIHJlbW5hbnRzLgorICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KKworLyoKKyAqIEJTRCBzeXN0ZW1zIHVzZSBhIGRpZmZlcmVudCBtZXRob2Qgb2YgbG9va2luZyB1cCBzb2NrYWRkcl9pbiB2YWx1ZXMgCisgKi8KKy8qICNkZWZpbmUgTkVFRF9LTEdFVFNBIDEgKi8KKworLyoKKyAqIEFSUF9TY2FuX05leHQgbmVlZHMgYSA0dGggaWZJbmRleCBhcmd1bWVudCAKKyAqLworI2RlZmluZSBBUlBfU0NBTl9GT1VSX0FSR1VNRU5UUyAxCisKKyNkZWZpbmUgQ0hFQ0tfUlRfRkxBR1MgMQorCisvKgorICogdGhpcyBpcyBub3QgZ29vZCBlbm91Z2ggYmVmb3JlIGZyZWVic2QzISAKKyAqLworLyogI3VuZGVmIEhBVkVfTkVUX0lGX01JQl9IICovCisKKy8qCisgKiBUaGlzIHNlY3Rpb24gYWRkcyB0aGUgcmVsZXZhbnQgZGVmaW5pdGlvbnMgZnJvbSBnZW5lcmljLmgKKyAqIChhIGZpbGUgd2UgZG9uJ3QgaW5jbHVkZSBoZXJlKQorICovCisKKy8qCisgKiB1ZHBfaW5wY2IgbGlzdCBzeW1ib2wsIGUuZy4gZm9yIG1pYklJL3VkcFRhYmxlLmMKKyAqLworI2RlZmluZSBJTlBfTkVYVF9TWU1CT0wgaW5wX25leHQKKworLyoKKyAqIFRoaXMgc2VjdGlvbiBkZWZpbmVzIE1hYyBPUyBYIDEwLjUgKGFuZCBsYXRlcikgc3BlY2lmaWMgYWRkaXRpb25zLgorICovCisjZGVmaW5lIGRhcndpbiAxMQorI2lmbmRlZiBkYXJ3aW4xMQorIyAgIGRlZmluZSBkYXJ3aW4xMSBkYXJ3aW4KKyNlbmRpZgorCisvKgorICogTWFjIE9TIFggc2hvdWxkIG9ubHkgdXNlIHRoZSBtb2Rlcm4gQVBJIGFuZCBkZWZpbml0aW9ucy4KKyAqLworI2lmbmRlZiBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUworI2RlZmluZSBORVRTTk1QX05PX0xFR0FDWV9ERUZJTklUSU9OUyAxCisjZW5kaWYKKworLyoKKyAqIGxvb2tzIGxpa2UgdGhlIElGVGFibGUgc3R1ZmYgd29ya3MgYmV0dGVyIHRoYW4gdGhlIG1pYklJIHZlcnNpb25zCisgKi8KKyAKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKKworLyoKKyAqIHVzZSBuZXcgaG9zdCByZXNvdXJjZXMgZmlsZXMgYXMgd2VsbAorICovCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV0lOU1RfUkVXUklURVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fUkVXUklURVMKKyN1bmRlZiBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9XUklURV9TVVBQT1JUCisjZGVmaW5lIE5FVFNOTVBfQ0FOX0dFVF9ESVNLX0xBQkVMIDEKKworLyoKKyAqIEVuYWJsaW5nIHRoaXMgcmVzdHJpY3RzIHRoZSBjb21waWxlciB0byBtb3N0bHkgcHVibGljIEFQSXMuCisgKi8KKyNpZm5kZWYgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRSAxCisjZW5kaWYKKyNpZm5kZWYgX19BUFBMRV9BUElfVU5TVEFCTEUKKyNkZWZpbmUgX19BUFBMRV9BUElfVU5TVEFCTEUgMQorI2VuZGlmCisKKy8qCisgKiBEYXJ3aW4ncyB0b29scyBhcmUgY2FwYWJsZSBvZiBidWlsZGluZyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIGluIG9uZSBwYXNzLgorICogQXMgYSByZXN1bHQsIHBsYXRmb3JtIGRlZmluaXRpb25zIHNob3VsZCBiZSBkZWZlcnJlZCB1bnRpbCBjb21waWxlIHRpbWUuCisgKi8KKyNpZmRlZiBCWVRFX09SREVSCisjIHVuZGVmIFdPUkRTX0JJR0VORElBTgorIyBpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyMgIGRlZmluZSBXT1JEU19CSUdFTkRJQU4gMQorIyBlbmRpZgorI2VuZGlmCisKKy8qCisgKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGFuIGZzdGFiLmggZmlsZSwgZ2V0ZnNmaWxlIGV0Yy4gYWx3YXlzIHJldHVybiBudWxsLgorICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KKyAqLworI3VuZGVmIEhBVkVfRlNUQUJfSAorCisjZGVmaW5lIFNXQVBGSUxFX0RJUiAiL3ByaXZhdGUvdmFyL3ZtIgorI2RlZmluZSBTV0FQRklMRV9QUkVGSVggInN3YXBmaWxlIgorCisvKgorICogVGhlc2UgYXBwYXJlbnRseSB1c2VkIHRvIGJlIGluIG5ldGluZXQvdGNwX3RpbWVycy5oLCBidXQgd2VudCBhd2F5IGluCisgKiAxMC40LjIuIERlZmluZSB0aGVtIGhlcmUgdGlsIHdlIGZpbmQgb3V0IGEgd2F5IHRvIGdldCB0aGUgcmVhbCB2YWx1ZXMuCisgKi8KKyNkZWZpbmUgVENQVFZfTUlOICAgICAgICggIDEqUFJfU0xPV0haKSAgICAgICAgIC8qIG1pbmltdW0gYWxsb3dhYmxlIHZhbHVlICovCisjZGVmaW5lIFRDUFRWX1JFWE1UTUFYICAoIDY0KlBSX1NMT1dIWikgICAgICAgICAvKiBtYXggYWxsb3dhYmxlIFJFWE1UIHZhbHVlICovCisKKy8qCisgKiBCZWNhdXNlIE1hYyBPUyBYIGlzIGJ1aWx0IG9uIE1hY2gsIGl0IGRvZXMgbm90IHByb3ZpZGUgYSBCU0QtY29tcGF0aWJsZQorICogVk0gc3RhdGlzdGljcyBBUEkuCisgKi8KKyNkZWZpbmUgVVNFX01BQ0hfSE9TVF9TVEFUSVNUSUNTIDEKKworLyoKKyAqIFRoaXMgdGVsbHMgY29kZSB0aGF0IG1hbmlwdWxhdGVzIElQdjYgdGhhdCB0aGUgc3RydWN0dXJlcyBhcmUgdW5pZmllZCwKKyAqIGkuZS4sIElQdjQgYW5kIElQdjYgdXNlIHRoZSBzYW1lIHN0cnVjdHMuCisgKiBUaGlzIHNob3VsZCBldmVudHVhbGx5IGJlIHJlcGxhY2VkIHdpdGggYSBjb25maWd1cmUgZGlyZWN0aXZlLgorICovCisvKiAjZGVmaW5lIFVTRV9VTklGSUVEX0lQVjZfU1RSVUNUUyAxICovCisjdW5kZWYgU1RSVUNUX2luNnBjYl9IQVNfaW5wX3ZmbGFnCisKKy8qCisgKiB1dGlsaXR5IG1hY3JvIHVzZWQgaW4gc2V2ZXJhbCBkYXJ3aW4gc3BlY2lmaWMgZmlsZXMKKyAqLworI2RlZmluZSBTTk1QX0NGUmVsZWFzZSh4KSBkbyB7IGlmICh4KSB7IENGUmVsZWFzZSh4KTsgeCA9IE5VTEw7IH0gfSB3aGlsZSgwKQorCisvKgorICogTWFjIE9TIFggcnVucyBvbiBib3RoIFBQQyBhbmQgSW50ZWwgaGFyZHdhcmUsCisgKiAgIHdoaWNoIGhhbmRsZSB1ZHBUYWJsZSBpbmRleCB2YWx1ZXMgZGlmZmVyZW50bHkKKyAqLworI2luY2x1ZGUgPFRhcmdldENvbmRpdGlvbmFscy5oPgorI2lmZGVmIFRBUkdFVF9SVF9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCisjZW5kaWYKKworLyoKKyAqIGFzIG9mIDcvMjAxMCwgb3BlbnNzbCBvbiBkYXJ3aW4gZG9lcyBub3QgaGF2ZSBzaGEyNTYKKyAqLworI2RlZmluZSBPUEVOU1NMX05PX1NIQTI1NiAxCisjZGVmaW5lIE9QRU5TU0xfTk9fU0hBNTEyIDEKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjEyLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMzFkMDQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMi5oCkBAIC0wLDAgKzEsMTQzIEBACisvKgorICogV2hpbGUgRGFyd2luIDEwIChha2EsIE1hYyBPUyBYIDEwLjYgU25vdyBMZW9wYXJkKSBpcyAiQlNELWxpa2UiLCBpdCBkaWZmZXJzCisgKiBzdWJzdGFudGlhbGx5IGVub3VnaCB0byBub3Qgd2FycmFudCBwcmV0ZW5kaW5nIGl0IGlzIGEgQlNEIGZsYXZvci4KKyAqIFRoaXMgZmlyc3Qgc2VjdGlvbiBhcmUgdGhlIHZlc3RpZ2FsIEJTRCByZW1uYW50cy4KKyAqLworLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCisgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworICogdGhhdCBtYXkgYXBwbHk6CisgKi8KKy8qCisgKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgorICovCisKKy8qCisgKiBCU0Qgc3lzdGVtcyB1c2UgYSBkaWZmZXJlbnQgbWV0aG9kIG9mIGxvb2tpbmcgdXAgc29ja2FkZHJfaW4gdmFsdWVzIAorICovCisvKiAjZGVmaW5lIE5FRURfS0xHRVRTQSAxICovCisKKy8qCisgKiBBUlBfU2Nhbl9OZXh0IG5lZWRzIGEgNHRoIGlmSW5kZXggYXJndW1lbnQgCisgKi8KKyNkZWZpbmUgQVJQX1NDQU5fRk9VUl9BUkdVTUVOVFMgMQorCisjZGVmaW5lIENIRUNLX1JUX0ZMQUdTIDEKKworLyoKKyAqIHRoaXMgaXMgbm90IGdvb2QgZW5vdWdoIGJlZm9yZSBmcmVlYnNkMyEgCisgKi8KKy8qICN1bmRlZiBIQVZFX05FVF9JRl9NSUJfSCAqLworCisvKgorICogVGhpcyBzZWN0aW9uIGFkZHMgdGhlIHJlbGV2YW50IGRlZmluaXRpb25zIGZyb20gZ2VuZXJpYy5oCisgKiAoYSBmaWxlIHdlIGRvbid0IGluY2x1ZGUgaGVyZSkKKyAqLworCisvKgorICogdWRwX2lucGNiIGxpc3Qgc3ltYm9sLCBlLmcuIGZvciBtaWJJSS91ZHBUYWJsZS5jCisgKi8KKyNkZWZpbmUgSU5QX05FWFRfU1lNQk9MIGlucF9uZXh0CisKKy8qCisgKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBNYWMgT1MgWCAxMC41IChhbmQgbGF0ZXIpIHNwZWNpZmljIGFkZGl0aW9ucy4KKyAqLworI2RlZmluZSBkYXJ3aW4gMTIKKyNpZm5kZWYgZGFyd2luMTIKKyMgICBkZWZpbmUgZGFyd2luMTIgZGFyd2luCisjZW5kaWYKKworLyoKKyAqIE1hYyBPUyBYIHNob3VsZCBvbmx5IHVzZSB0aGUgbW9kZXJuIEFQSSBhbmQgZGVmaW5pdGlvbnMuCisgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKKyNkZWZpbmUgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMgMQorI2VuZGlmCisKKy8qCisgKiBsb29rcyBsaWtlIHRoZSBJRlRhYmxlIHN0dWZmIHdvcmtzIGJldHRlciB0aGFuIHRoZSBtaWJJSSB2ZXJzaW9ucworICovCisgCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCisKKy8qCisgKiB1c2UgbmV3IGhvc3QgcmVzb3VyY2VzIGZpbGVzIGFzIHdlbGwKKyAqLworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dJTlNUX1JFV1JJVEVTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1JFV1JJVEVTCisjdW5kZWYgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVAorI2RlZmluZSBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTCAxCisKKy8qCisgKiBFbmFibGluZyB0aGlzIHJlc3RyaWN0cyB0aGUgY29tcGlsZXIgdG8gbW9zdGx5IHB1YmxpYyBBUElzLgorICovCisjaWZuZGVmIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRQorI2RlZmluZSBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UgMQorI2VuZGlmCisjaWZuZGVmIF9fQVBQTEVfQVBJX1VOU1RBQkxFCisjZGVmaW5lIF9fQVBQTEVfQVBJX1VOU1RBQkxFIDEKKyNlbmRpZgorCisvKgorICogRGFyd2luJ3MgdG9vbHMgYXJlIGNhcGFibGUgb2YgYnVpbGRpbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgcGFzcy4KKyAqIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybSBkZWZpbml0aW9ucyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgY29tcGlsZSB0aW1lLgorICovCisjaWZkZWYgQllURV9PUkRFUgorIyB1bmRlZiBXT1JEU19CSUdFTkRJQU4KKyMgaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCisjICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKKyMgZW5kaWYKKyNlbmRpZgorCisvKgorICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhbiBmc3RhYi5oIGZpbGUsIGdldGZzZmlsZSBldGMuIGFsd2F5cyByZXR1cm4gbnVsbC4KKyAqIEF0IGxlYXN0LCBhcyBvZiA1LjMuCisgKi8KKyN1bmRlZiBIQVZFX0ZTVEFCX0gKKworI2RlZmluZSBTV0FQRklMRV9ESVIgIi9wcml2YXRlL3Zhci92bSIKKyNkZWZpbmUgU1dBUEZJTEVfUFJFRklYICJzd2FwZmlsZSIKKworLyoKKyAqIFRoZXNlIGFwcGFyZW50bHkgdXNlZCB0byBiZSBpbiBuZXRpbmV0L3RjcF90aW1lcnMuaCwgYnV0IHdlbnQgYXdheSBpbgorICogMTAuNC4yLiBEZWZpbmUgdGhlbSBoZXJlIHRpbCB3ZSBmaW5kIG91dCBhIHdheSB0byBnZXQgdGhlIHJlYWwgdmFsdWVzLgorICovCisjZGVmaW5lIFRDUFRWX01JTiAgICAgICAoICAxKlBSX1NMT1dIWikgICAgICAgICAvKiBtaW5pbXVtIGFsbG93YWJsZSB2YWx1ZSAqLworI2RlZmluZSBUQ1BUVl9SRVhNVE1BWCAgKCA2NCpQUl9TTE9XSFopICAgICAgICAgLyogbWF4IGFsbG93YWJsZSBSRVhNVCB2YWx1ZSAqLworCisvKgorICogQmVjYXVzZSBNYWMgT1MgWCBpcyBidWlsdCBvbiBNYWNoLCBpdCBkb2VzIG5vdCBwcm92aWRlIGEgQlNELWNvbXBhdGlibGUKKyAqIFZNIHN0YXRpc3RpY3MgQVBJLgorICovCisjZGVmaW5lIFVTRV9NQUNIX0hPU1RfU1RBVElTVElDUyAxCisKKy8qCisgKiBUaGlzIHRlbGxzIGNvZGUgdGhhdCBtYW5pcHVsYXRlcyBJUHY2IHRoYXQgdGhlIHN0cnVjdHVyZXMgYXJlIHVuaWZpZWQsCisgKiBpLmUuLCBJUHY0IGFuZCBJUHY2IHVzZSB0aGUgc2FtZSBzdHJ1Y3RzLgorICogVGhpcyBzaG91bGQgZXZlbnR1YWxseSBiZSByZXBsYWNlZCB3aXRoIGEgY29uZmlndXJlIGRpcmVjdGl2ZS4KKyAqLworLyogI2RlZmluZSBVU0VfVU5JRklFRF9JUFY2X1NUUlVDVFMgMSAqLworI3VuZGVmIFNUUlVDVF9pbjZwY2JfSEFTX2lucF92ZmxhZworCisvKgorICogdXRpbGl0eSBtYWNybyB1c2VkIGluIHNldmVyYWwgZGFyd2luIHNwZWNpZmljIGZpbGVzCisgKi8KKyNkZWZpbmUgU05NUF9DRlJlbGVhc2UoeCkgZG8geyBpZiAoeCkgeyBDRlJlbGVhc2UoeCk7IHggPSBOVUxMOyB9IH0gd2hpbGUoMCkKKworLyoKKyAqIE1hYyBPUyBYIHJ1bnMgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLAorICogICB3aGljaCBoYW5kbGUgdWRwVGFibGUgaW5kZXggdmFsdWVzIGRpZmZlcmVudGx5CisgKi8KKyNpbmNsdWRlIDxUYXJnZXRDb25kaXRpb25hbHMuaD4KKyNpZmRlZiBUQVJHRVRfUlRfTElUVExFX0VORElBTgorI2RlZmluZSBVRFBfQUREUkVTU0VTX0lOX0hPU1RfT1JERVIgMQorI2VuZGlmCisKKy8qCisgKiBhcyBvZiA3LzIwMTAsIG9wZW5zc2wgb24gZGFyd2luIGRvZXMgbm90IGhhdmUgc2hhMjU2CisgKi8KKyNkZWZpbmUgT1BFTlNTTF9OT19TSEEyNTYgMQorI2RlZmluZSBPUEVOU1NMX05PX1NIQTUxMiAxCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW4xMy5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjE4NzBiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luMTMuaApAQCAtMCwwICsxLDE0MyBAQAorLyoKKyAqIFdoaWxlIERhcndpbiAxMCAoYWthLCBNYWMgT1MgWCAxMC42IFNub3cgTGVvcGFyZCkgaXMgIkJTRC1saWtlIiwgaXQgZGlmZmVycworICogc3Vic3RhbnRpYWxseSBlbm91Z2ggdG8gbm90IHdhcnJhbnQgcHJldGVuZGluZyBpdCBpcyBhIEJTRCBmbGF2b3IuCisgKiBUaGlzIGZpcnN0IHNlY3Rpb24gYXJlIHRoZSB2ZXN0aWdhbCBCU0QgcmVtbmFudHMuCisgKi8KKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisvKgorICogQlNEIHN5c3RlbXMgdXNlIGEgZGlmZmVyZW50IG1ldGhvZCBvZiBsb29raW5nIHVwIHNvY2thZGRyX2luIHZhbHVlcyAKKyAqLworLyogI2RlZmluZSBORUVEX0tMR0VUU0EgMSAqLworCisvKgorICogQVJQX1NjYW5fTmV4dCBuZWVkcyBhIDR0aCBpZkluZGV4IGFyZ3VtZW50IAorICovCisjZGVmaW5lIEFSUF9TQ0FOX0ZPVVJfQVJHVU1FTlRTIDEKKworI2RlZmluZSBDSEVDS19SVF9GTEFHUyAxCisKKy8qCisgKiB0aGlzIGlzIG5vdCBnb29kIGVub3VnaCBiZWZvcmUgZnJlZWJzZDMhIAorICovCisvKiAjdW5kZWYgSEFWRV9ORVRfSUZfTUlCX0ggKi8KKworLyoKKyAqIFRoaXMgc2VjdGlvbiBhZGRzIHRoZSByZWxldmFudCBkZWZpbml0aW9ucyBmcm9tIGdlbmVyaWMuaAorICogKGEgZmlsZSB3ZSBkb24ndCBpbmNsdWRlIGhlcmUpCisgKi8KKworLyoKKyAqIHVkcF9pbnBjYiBsaXN0IHN5bWJvbCwgZS5nLiBmb3IgbWliSUkvdWRwVGFibGUuYworICovCisjZGVmaW5lIElOUF9ORVhUX1NZTUJPTCBpbnBfbmV4dAorCisvKgorICogVGhpcyBzZWN0aW9uIGRlZmluZXMgTWFjIE9TIFggMTAuNSAoYW5kIGxhdGVyKSBzcGVjaWZpYyBhZGRpdGlvbnMuCisgKi8KKyNkZWZpbmUgZGFyd2luIDEzCisjaWZuZGVmIGRhcndpbjEzCisjICAgZGVmaW5lIGRhcndpbjEzIGRhcndpbgorI2VuZGlmCisKKy8qCisgKiBNYWMgT1MgWCBzaG91bGQgb25seSB1c2UgdGhlIG1vZGVybiBBUEkgYW5kIGRlZmluaXRpb25zLgorICovCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCisjZGVmaW5lIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TIDEKKyNlbmRpZgorCisvKgorICogbG9va3MgbGlrZSB0aGUgSUZUYWJsZSBzdHVmZiB3b3JrcyBiZXR0ZXIgdGhhbiB0aGUgbWliSUkgdmVyc2lvbnMKKyAqLworIAorI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUworCisvKgorICogdXNlIG5ldyBob3N0IHJlc291cmNlcyBmaWxlcyBhcyB3ZWxsCisgKi8KKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXSU5TVF9SRVdSSVRFUworI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSFJTV1JVTl9SRVdSSVRFUworI3VuZGVmIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1dSSVRFX1NVUFBPUlQKKyNkZWZpbmUgTkVUU05NUF9DQU5fR0VUX0RJU0tfTEFCRUwgMQorCisvKgorICogRW5hYmxpbmcgdGhpcyByZXN0cmljdHMgdGhlIGNvbXBpbGVyIHRvIG1vc3RseSBwdWJsaWMgQVBJcy4KKyAqLworI2lmbmRlZiBfX0FQUExFX0FQSV9TVFJJQ1RfQ09ORk9STUFOQ0UKKyNkZWZpbmUgX19BUFBMRV9BUElfU1RSSUNUX0NPTkZPUk1BTkNFIDEKKyNlbmRpZgorI2lmbmRlZiBfX0FQUExFX0FQSV9VTlNUQUJMRQorI2RlZmluZSBfX0FQUExFX0FQSV9VTlNUQUJMRSAxCisjZW5kaWYKKworLyoKKyAqIERhcndpbidzIHRvb2xzIGFyZSBjYXBhYmxlIG9mIGJ1aWxkaW5nIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgaW4gb25lIHBhc3MuCisgKiBBcyBhIHJlc3VsdCwgcGxhdGZvcm0gZGVmaW5pdGlvbnMgc2hvdWxkIGJlIGRlZmVycmVkIHVudGlsIGNvbXBpbGUgdGltZS4KKyAqLworI2lmZGVmIEJZVEVfT1JERVIKKyMgdW5kZWYgV09SRFNfQklHRU5ESUFOCisjIGlmIEJZVEVfT1JERVIgPT0gQklHX0VORElBTgorIyAgZGVmaW5lIFdPUkRTX0JJR0VORElBTiAxCisjIGVuZGlmCisjZW5kaWYKKworLyoKKyAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYW4gZnN0YWIuaCBmaWxlLCBnZXRmc2ZpbGUgZXRjLiBhbHdheXMgcmV0dXJuIG51bGwuCisgKiBBdCBsZWFzdCwgYXMgb2YgNS4zLgorICovCisjdW5kZWYgSEFWRV9GU1RBQl9ICisKKyNkZWZpbmUgU1dBUEZJTEVfRElSICIvcHJpdmF0ZS92YXIvdm0iCisjZGVmaW5lIFNXQVBGSUxFX1BSRUZJWCAic3dhcGZpbGUiCisKKy8qCisgKiBUaGVzZSBhcHBhcmVudGx5IHVzZWQgdG8gYmUgaW4gbmV0aW5ldC90Y3BfdGltZXJzLmgsIGJ1dCB3ZW50IGF3YXkgaW4KKyAqIDEwLjQuMi4gRGVmaW5lIHRoZW0gaGVyZSB0aWwgd2UgZmluZCBvdXQgYSB3YXkgdG8gZ2V0IHRoZSByZWFsIHZhbHVlcy4KKyAqLworI2RlZmluZSBUQ1BUVl9NSU4gICAgICAgKCAgMSpQUl9TTE9XSFopICAgICAgICAgLyogbWluaW11bSBhbGxvd2FibGUgdmFsdWUgKi8KKyNkZWZpbmUgVENQVFZfUkVYTVRNQVggICggNjQqUFJfU0xPV0haKSAgICAgICAgIC8qIG1heCBhbGxvd2FibGUgUkVYTVQgdmFsdWUgKi8KKworLyoKKyAqIEJlY2F1c2UgTWFjIE9TIFggaXMgYnVpbHQgb24gTWFjaCwgaXQgZG9lcyBub3QgcHJvdmlkZSBhIEJTRC1jb21wYXRpYmxlCisgKiBWTSBzdGF0aXN0aWNzIEFQSS4KKyAqLworI2RlZmluZSBVU0VfTUFDSF9IT1NUX1NUQVRJU1RJQ1MgMQorCisvKgorICogVGhpcyB0ZWxscyBjb2RlIHRoYXQgbWFuaXB1bGF0ZXMgSVB2NiB0aGF0IHRoZSBzdHJ1Y3R1cmVzIGFyZSB1bmlmaWVkLAorICogaS5lLiwgSVB2NCBhbmQgSVB2NiB1c2UgdGhlIHNhbWUgc3RydWN0cy4KKyAqIFRoaXMgc2hvdWxkIGV2ZW50dWFsbHkgYmUgcmVwbGFjZWQgd2l0aCBhIGNvbmZpZ3VyZSBkaXJlY3RpdmUuCisgKi8KKy8qICNkZWZpbmUgVVNFX1VOSUZJRURfSVBWNl9TVFJVQ1RTIDEgKi8KKyN1bmRlZiBTVFJVQ1RfaW42cGNiX0hBU19pbnBfdmZsYWcKKworLyoKKyAqIHV0aWxpdHkgbWFjcm8gdXNlZCBpbiBzZXZlcmFsIGRhcndpbiBzcGVjaWZpYyBmaWxlcworICovCisjZGVmaW5lIFNOTVBfQ0ZSZWxlYXNlKHgpIGRvIHsgaWYgKHgpIHsgQ0ZSZWxlYXNlKHgpOyB4ID0gTlVMTDsgfSB9IHdoaWxlKDApCisKKy8qCisgKiBNYWMgT1MgWCBydW5zIG9uIGJvdGggUFBDIGFuZCBJbnRlbCBoYXJkd2FyZSwKKyAqICAgd2hpY2ggaGFuZGxlIHVkcFRhYmxlIGluZGV4IHZhbHVlcyBkaWZmZXJlbnRseQorICovCisjaW5jbHVkZSA8VGFyZ2V0Q29uZGl0aW9uYWxzLmg+CisjaWZkZWYgVEFSR0VUX1JUX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgVURQX0FERFJFU1NFU19JTl9IT1NUX09SREVSIDEKKyNlbmRpZgorCisvKgorICogYXMgb2YgNy8yMDEwLCBvcGVuc3NsIG9uIGRhcndpbiBkb2VzIG5vdCBoYXZlIHNoYTI1NgorICovCisjZGVmaW5lIE9QRU5TU0xfTk9fU0hBMjU2IDEKKyNkZWZpbmUgT1BFTlNTTF9OT19TSEE1MTIgMQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luNy5oCmluZGV4IGIxNTUzZGUuLjhkNDU1NGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjcuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW43LmgKQEAgLTEyLDMgKzEyLDQgQEAKIAogI2RlZmluZSBTV0FQRklMRV9ESVIgIi9wcml2YXRlL3Zhci92bSIKICNkZWZpbmUgU1dBUEZJTEVfUFJFRklYICJzd2FwZmlsZSIKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOC5oCmluZGV4IDE3NGZhNzguLjFlNmQ3ZDMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjguaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW44LmgKQEAgLTYzLDE0ICs2Myw2IEBACiAjZW5kaWYKIAogLyoKLSAqIEFsdGhvdWdoIERhcndpbiBkb2VzIGhhdmUgYSBrdm0uaCBmaWxlLCBrdm1fb3BlbmZpbGVzIGV0Yy4gYWx3YXlzCi0gKiByZXR1cm4gbnVsbCBiZWNhdXNlIC9kZXYva21lbSB3YXMgcmVtb3ZlZCBpbiBPUyBYIDEwLjQgZm9yIEludGVsLgotICovCi0jdW5kZWYgSEFWRV9LVk1fSAotI3VuZGVmIEhBVkVfS1ZNX0dFVFBST0NTCi0jdW5kZWYgSEFWRV9LVk1fT1BFTkZJTEVTCi0KLS8qCiAgKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGFuIGZzdGFiLmggZmlsZSwgZ2V0ZnNmaWxlIGV0Yy4gYWx3YXlzIHJldHVybiBudWxsLgogICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KICAqLwpAQCAtOTksMyArOTEsNCBAQAogICovCiAvKiAjZGVmaW5lIFVTRV9VTklGSUVEX0lQVjZfU1RSVUNUUyAxICovCiAjdW5kZWYgU1RSVUNUX2luNnBjYl9IQVNfaW5wX3ZmbGFnCisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2RhcndpbjkuaAppbmRleCA2MmQ4ZDMwLi5iZjNkMmRjIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9kYXJ3aW45LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZGFyd2luOS5oCkBAIC0zLDYgKzMsMTYgQEAKICAqIHN1YnN0YW50aWFsbHkgZW5vdWdoIHRvIG5vdCB3YXJyYW50IHByZXRlbmRpbmcgaXQgaXMgYSBCU0QgZmxhdm9yLgogICogVGhpcyBmaXJzdCBzZWN0aW9uIGFyZSB0aGUgdmVzdGlnYWwgQlNEIHJlbW5hbnRzLgogICovCisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKKyAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCisgKi8KIAogLyoKICAqIEJTRCBzeXN0ZW1zIHVzZSBhIGRpZmZlcmVudCBtZXRob2Qgb2YgbG9va2luZyB1cCBzb2NrYWRkcl9pbiB2YWx1ZXMgCkBAIC0zNSw2ICs0NSw5IEBACiAgKiBUaGlzIHNlY3Rpb24gZGVmaW5lcyBNYWMgT1MgWCAxMC41IChhbmQgbGF0ZXIpIHNwZWNpZmljIGFkZGl0aW9ucy4KICAqLwogI2RlZmluZSBkYXJ3aW4gOQorI2lmbmRlZiBkYXJ3aW45CisjICAgZGVmaW5lIGRhcndpbjkgZGFyd2luCisjZW5kaWYKIAogLyoKICAqIE1hYyBPUyBYIHNob3VsZCBvbmx5IHVzZSB0aGUgbW9kZXJuIEFQSSBhbmQgZGVmaW5pdGlvbnMuCkBAIC01MCw2ICs2MywxNCBAQAogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSUZUQUJMRV9SRVdSSVRFUwogCiAvKgorICogdXNlIG5ldyBob3N0IHJlc291cmNlcyBmaWxlcyBhcyB3ZWxsCisgKi8KKyNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hSU1dJTlNUX1JFV1JJVEVTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IUlNXUlVOX1JFV1JJVEVTCisjdW5kZWYgTkVUU05NUF9JTkNMVURFX0hSU1dSVU5fV1JJVEVfU1VQUE9SVAorI2RlZmluZSBORVRTTk1QX0NBTl9HRVRfRElTS19MQUJFTCAxCisKKy8qCiAgKiBFbmFibGluZyB0aGlzIHJlc3RyaWN0cyB0aGUgY29tcGlsZXIgdG8gbW9zdGx5IHB1YmxpYyBBUElzLgogICovCiAjaWZuZGVmIF9fQVBQTEVfQVBJX1NUUklDVF9DT05GT1JNQU5DRQpAQCAtNzEsMjUgKzkyLDYgQEAKICNlbmRpZgogCiAvKgotICogRGFyd2luJ3MgdG9vbHMgYXJlIGNhcGFibGUgb2YgYnVpbGRpbmcgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyBpbiBvbmUgcGFzcy4KLSAqIEFzIGEgcmVzdWx0LCBwbGF0Zm9ybSBkZWZpbml0aW9ucyBzaG91bGQgYmUgZGVmZXJyZWQgdW50aWwgY29tcGlsZSB0aW1lLgotICovCi0jaWZkZWYgQllURV9PUkRFUgotIyB1bmRlZiBXT1JEU19CSUdFTkRJQU4KLSMgaWYgQllURV9PUkRFUiA9PSBCSUdfRU5ESUFOCi0jICBkZWZpbmUgV09SRFNfQklHRU5ESUFOIDEKLSMgZW5kaWYKLSNlbmRpZgotCi0vKgotICogQWx0aG91Z2ggRGFyd2luIGRvZXMgaGF2ZSBhIGt2bS5oIGZpbGUsIGt2bV9vcGVuZmlsZXMgZXRjLiBhbHdheXMKLSAqIHJldHVybiBudWxsIGJlY2F1c2UgL2Rldi9rbWVtIHdhcyByZW1vdmVkIGNvbXBsZXRlbHkgaW4gT1MgWCAxMC41LgotICovCi0jdW5kZWYgSEFWRV9LVk1fSAotI3VuZGVmIEhBVkVfS1ZNX0dFVFBST0NTCi0jdW5kZWYgSEFWRV9LVk1fT1BFTkZJTEVTCi0KLS8qCiAgKiBBbHRob3VnaCBEYXJ3aW4gZG9lcyBoYXZlIGFuIGZzdGFiLmggZmlsZSwgZ2V0ZnNmaWxlIGV0Yy4gYWx3YXlzIHJldHVybiBudWxsLgogICogQXQgbGVhc3QsIGFzIG9mIDUuMy4KICAqLwpAQCAtMTIwLDYgKzEyMiwxMSBAQAogI3VuZGVmIFNUUlVDVF9pbjZwY2JfSEFTX2lucF92ZmxhZwogCiAvKgorICogdXRpbGl0eSBtYWNybyB1c2VkIGluIHNldmVyYWwgZGFyd2luIHNwZWNpZmljIGZpbGVzCisgKi8KKyNkZWZpbmUgU05NUF9DRlJlbGVhc2UoeCkgZG8geyBpZiAoeCkgeyBDRlJlbGVhc2UoeCk7IHggPSBOVUxMOyB9IH0gd2hpbGUoMCkKKworLyoKICAqIE1hYyBPUyBYIHJ1bnMgb24gYm90aCBQUEMgYW5kIEludGVsIGhhcmR3YXJlLAogICogICB3aGljaCBoYW5kbGUgdWRwVGFibGUgaW5kZXggdmFsdWVzIGRpZmZlcmVudGx5CiAgKi8KQEAgLTEyNywzICsxMzQsNCBAQAogI2lmZGVmIFRBUkdFVF9SVF9MSVRUTEVfRU5ESUFOCiAjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCiAjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZC5oCmluZGV4IDQxMDg0MjkuLmEzMDY4M2YgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2QuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkLmgKQEAgLTI0LDYgKzI0LDQgQEAKIAogLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCi0jaWZkZWYgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q1LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9mcmVlYnNkNS5oCmluZGV4IGVmYmM1YjMuLjM2OWMxYTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2ZyZWVic2Q1LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZnJlZWJzZDUuaApAQCAtNCw1ICs0LDUgQEAKIAogLyogZG9uJ3QgZGVmaW5lIF9LRVJORUwgb24gRnJlZUJTRCA1LjMgZXZlbiBpZiBjb25maWd1cmUgdGhpbmtzIHdlIG5lZWQgaXQgKi8KICNpZmRlZiBmcmVlYnNkNQotI3VuZGVmIElGTkVUX05FRURTX0tFUk5FTAorI3VuZGVmIE5FVFNOTVBfSUZORVRfTkVFRFNfS0VSTkVMCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2hwdXguaAppbmRleCAwYjYyN2U5Li41N2NlYTQyIDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9ocHV4LmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaHB1eC5oCkBAIC04MCw1ICs4MCwxNSBAQAogIyAgZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lOTElORSAwCiAjZW5kaWYKIAorLyoKKyAqIHByZXZlbnQgc2lnYWN0aW9uIGJlaW5nIHJlZGVmaW5lZCB0byBjbWFfc2lnYWN0aW9uCisgKiAoY2F1c2luZyBidWlsZCBlcnJvcnMgb24gSFAtVVggMTAuMjAsIGF0IGxlYXN0KQorICovCisjaWZkZWYgaHB1eDEwCisjaWZuZGVmIF9DTUFfTk9XUkFQUEVSU18KKyMgIGRlZmluZSBfQ01BX05PV1JBUFBFUlNfIDEKKyNlbmRpZgorI2VuZGlmCisKIC8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaXJpeC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vaXJpeC5oCmluZGV4IDc5ZDQxYTguLjkzM2ZlNjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2lyaXguaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9pcml4LmgKQEAgLTIzLDcgKzIzLDcgQEAKIC8qCiAgKiBkb24ndCBkZWZpbmUgX0tFUk5FTCBiZWZvcmUgaW5jbHVkaW5nIHN5cy91bmlzdGQuaCAKICAqLwotI2RlZmluZSBJRk5FVF9ORUVEU19LRVJORUxfTEFURSAgMQorI2RlZmluZSBORVRTTk1QX0lGTkVUX05FRURTX0tFUk5FTF9MQVRFICAxCiAKICNkZWZpbmUgU1RSRUFNX05FRURTX0tFUk5FTF9JU0xBTkRTCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2tmcmVlYnNkLmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9rZnJlZWJzZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZjcwMjQKLS0tIC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9rZnJlZWJzZC5oCkBAIC0wLDAgKzEsOSBAQAorI2luY2x1ZGUgImZyZWVic2Q2LmgiCisjZGVmaW5lIGZyZWVic2Q2IGZyZWVic2Q2CisKKyNpbmNsdWRlIDxvc3JlbGRhdGUuaD4KKyNkZWZpbmUgX19GcmVlQlNEX3ZlcnNpb24gX19GcmVlQlNEX2tlcm5lbF92ZXJzaW9uCisKKyNpbmNsdWRlIDxzeXMvcXVldWUuaD4KKyNpbmNsdWRlIDxzeXMvX3R5cGVzLmg+CisKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL21pbmd3MzIuaAppbmRleCAyOWQwOWE0Li42OGEzYTc2IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9taW5ndzMyLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbWluZ3czMi5oCkBAIC0xNiw2ICsxNiwxNSBAQAogICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCiAgCiAgKi8KKworLyoKKyAqIE1ha2UgdGhlIGdldG5hbWVpbmZvKCkgZnVuY3Rpb24gYXZhaWxhYmxlLgorICogTm90ZTogYWNjb3JkaW5nIHRvIE1TRE4gZ2V0bmFtZWluZm8oKSBpcyBhdmFpbGFibGUgaW4gd3MyXzMyIG9uIFdpbmRvd3MgMjAwMAorICogYW5kIGFib3ZlLiBNaW5HVyBvbmx5IG1ha2VzIGdldG5hbWVpbmZvKCkgdmlzaWJsZSB3aGVuIHNldHRpbmcgX1dJTjMyX1dJTk5UCisgKiB0byAweDA1MDEgKFdpbmRvd3MgWFApIG9yIGhpZ2hlciwgd2hpY2ggaXMgYSBidWcgaW4gdGhlIE1pbkdXIDUuMS42IGhlYWRlcnMuCisgKi8KKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4MDUwMQorCiAjaW5jbHVkZSA8bmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaD4KIAogI2lmZGVmIEhBVkVfU1RESU5UX0gKQEAgLTMwLDEwICszOSw3IEBACiAjdW5kZWYgSEFWRV9TSUdOQUwKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBnZXR0aW1lb2ZkYXkgZnVuY3Rpb24uICAqLwotLyogT25seSB3aGVuIGNvbXBpbGluZyBQZXJsIG1vZHVsZSAgICAgICAgICAgICAgICAqLwotI2lmZGVmIE1JTkdXX1BFUkwKICNkZWZpbmUgSEFWRV9HRVRUSU1FT0ZEQVkgMQotI2VuZGlmCiAKIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZSBmdW5jdGlvbi4gICovCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCkBAIC00NCw2ICs1MCw5IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgcmFpc2UoKSBpbnN0ZWFkIG9mIGFsYXJtKCkgKi8KICNkZWZpbmUgSEFWRV9SQUlTRSAxCiAKKy8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgc29ja2V0IGZ1bmN0aW9uLiAgKi8KKyNkZWZpbmUgSEFWRV9TT0NLRVQgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV4ZWN2JyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0VYRUNWCiAKQEAgLTcyLDE1ICs4MSwxMyBAQAogI2RlZmluZQlGX1NFVEZMCQk0CiAjZGVmaW5lCU9fTk9OQkxPQ0sJMHg0MDAwICAvKiBub24gYmxvY2tpbmcgSS9PIChQT1NJWCBzdHlsZSkgKi8KIAorI2lmbmRlZiBIQVZFX1NUUlVDVF9USU1FWk9ORV9UWl9EU1RUSU1FCiAvKgotICogSSBkdW5ubyB3aHkuIEl0J3MganVzdCBub3QgdGhlcmUuIERlZmluZSBzdHJ1Y3QgdGltZXpvbmUuCi0gKiBJZiBvdGhlciBzeXN0ZW1zIG5lZWQgdGhpcyBpdCBjb3VsZCBiZSBtb3ZlZCB0byBzeXN0ZW0uaAotICogYW5kIHRoZSBwcm9wZXIgY2hlY2tpbmcgZG9uZSBhdCBjb25maWcgdGltZS4gUmlnaHQgbm93IEkgaGF2ZQotICoganVzdCBwdXQgaXQgaGVyZSB0byBrZWVwIHRoZSBNaW5HVyBvdXQgb2YgdGhlIG1haW4gdHJlZSBhcyBtdWNoCi0gKiBhcyBwb3NzaWJsZS4KKyAqIE9sZGVyIE1pbkdXIHZlcnNpb25zIGRvIG5vdCBoYXZlIHN0cnVjdCB0aW1lem9uZSwgc28gZGVmaW5lIGl0IGhlcmUuCiAgKi8KIHN0cnVjdCB0aW1lem9uZSB7CiAJaW50IHR6X21pbnV0ZXN3ZXN0OwogCWludCB0el9kc3R0aW1lOwogfTsKKyNlbmRpZgogCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9uZXRic2QuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oCmluZGV4IDEzYWQ3ZWEuLjFmMjJhNDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL25ldGJzZC5oCkBAIC0zNCw4ICszNCwzNiBAQAogCiAjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCiAKKyNpZmRlZiBuZXRic2RlbGY2CisjZGVmaW5lIG5ldGJzZDYKKyNkZWZpbmUgbmV0YnNkZWxmNQorI2VuZGlmCisjaWZkZWYgbmV0YnNkZWxmNQorI2RlZmluZSBuZXRic2Q1CisjZGVmaW5lIG5ldGJzZGVsZjQKKyNlbmRpZgorI2lmZGVmIG5ldGJzZGVsZjQKKyNkZWZpbmUgbmV0YnNkNAorI2RlZmluZSBuZXRic2RlbGYzCisjZW5kaWYKKyNpZmRlZiBuZXRic2RlbGYzCisjZGVmaW5lIG5ldGJzZDMKKyNlbmRpZgorCisjaWYgZGVmaW5lZChuZXRic2Q2KSAmJiAhZGVmaW5lZChuZXRic2Q1KQorI2RlZmluZSBuZXRic2Q1IG5ldGJzZDUKKyNlbmRpZgorI2lmIGRlZmluZWQobmV0YnNkNSkgJiYgIWRlZmluZWQobmV0YnNkNCkKKyNkZWZpbmUgbmV0YnNkNCBuZXRic2Q0CisjZW5kaWYKKyNpZiBkZWZpbmVkKG5ldGJzZDQpICYmICFkZWZpbmVkKG5ldGJzZDMpCisjZGVmaW5lIG5ldGJzZDMgbmV0YnNkMworI2VuZGlmCisjaWYgZGVmaW5lZChuZXRic2QzKSAmJiAhZGVmaW5lZChuZXRic2QyKQorI2RlZmluZSBuZXRic2QyIG5ldGJzZDIKKyNlbmRpZgogI2lmbmRlZiBuZXRic2QxCi0jIGRlZmluZSBuZXRic2QxIG5ldGJzZDEKKyNkZWZpbmUgbmV0YnNkMSBuZXRic2QxCiAjZW5kaWYKIAogI2lmIF9fTmV0QlNEX1ZlcnNpb25fXyA+PSA0OTkwMDU4MDAKQEAgLTQ0LDMgKzcyLDQgQEAKIAogLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCisjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9udG8tcW54Ni5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTY1MTExCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbnRvLXFueDYuaApAQCAtMCwwICsxLDM1IEBACisjaW5jbHVkZSAiYnNkLmgiCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKworI2RlZmluZSBQQ0JfVEFCTEUgMQorI3VuZGVmIFRDUF9TWU1CT0wKKyNkZWZpbmUgVENQX1NZTUJPTCAidGNidGFibGUiCisjdW5kZWYgVENQX1RUTF9TWU1CT0wKKyNkZWZpbmUgVENQX1RUTF9TWU1CT0wgImlwX2RlZnR0bCIKKyN1bmRlZiBVREJfU1lNQk9MCisjZGVmaW5lIFVEQl9TWU1CT0wgInVkYnRhYmxlIgorI3VuZGVmIE5QUk9DX1NZTUJPTAorI3VuZGVmIFBST0NfU1lNQk9MCisKKyNkZWZpbmUgTUJQT09MX1NZTUJPTAkibWJwb29sIgorI2RlZmluZSBNQ0xQT09MX1NZTUJPTAkibWNscG9vbCIKKworLyoKKyAqIGlucF9uZXh0IHN5bWJvbCAKKyAqLworI3VuZGVmIElOUF9ORVhUX1NZTUJPTAorI2RlZmluZSBJTlBfTkVYVF9TWU1CT0wgaW5wX3F1ZXVlLmNxZV9uZXh0CisjdW5kZWYgSU5QX1BSRVZfU1lNQk9MCisjZGVmaW5lIElOUF9QUkVWX1NZTUJPTCBpbnBfcXVldWUuY3FlX3ByZXYKKyNkZWZpbmUgSEFWRV9JTlBDQlRBQkxFIDEKKworI3VuZGVmIElGQUREUl9TWU1CT0wKKyNkZWZpbmUgSUZBRERSX1NZTUJPTCAiaW5faWZhZGRyaGVhZCIKKworI2RlZmluZSBVVE1QX0ZJTEUgX1BBVEhfVVRNUAorCisjZGVmaW5lIFVEUF9BRERSRVNTRVNfSU5fSE9TVF9PUkRFUiAxCisKKy8qIGRlZmluZSB0aGUgZXh0cmEgbWliIG1vZHVsZXMgdGhhdCBhcmUgc3VwcG9ydGVkICovCisvKiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9IT1NUX1JFU09VUkNFUyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vb3BlbmJzZC5oCmluZGV4IDcxNjc5NGMuLjhkYjBlYWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL29wZW5ic2QuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9vcGVuYnNkLmgKQEAgLTE1LDYgKzE1LDQgQEAKIAogLyogZGVmaW5lIHRoZSBleHRyYSBtaWIgbW9kdWxlcyB0aGF0IGFyZSBzdXBwb3J0ZWQgKi8KICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0hPU1RfUkVTT1VSQ0VTCi0jaWZkZWYgTkVUU05NUF9FTkFCTEVfTUZEX1JFV1JJVEVTCiAjZGVmaW5lIE5FVFNOTVBfSU5DTFVERV9JRlRBQkxFX1JFV1JJVEVTCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaCBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3NvbGFyaXMuaAppbmRleCBkM2RjYjcyLi5lYzYxYzM5IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zb2xhcmlzLmgKKysrIGIvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc29sYXJpcy5oCkBAIC0yNSwxNCArMjUsOSBAQAogI2RlZmluZSBVRFBfUE9SVFNfSU5fSE9TVF9PUkRFUiAxCiAjZGVmaW5lIFRDUF9QT1JUU19JTl9IT1NUX09SREVSIDEKIAotLyogZ2V0IHNvbWUgcmVxdWlyZWQgcHJvdG90eXBlcyAoc3RydG9rX3IpIGZyb20gaW5jbHVkZSBmaWxlcyAqLwotI2RlZmluZSBfX0VYVEVOU0lPTlNfXwotCiAvKiBkZWZpbmUgdGhlIGV4dHJhIG1pYiBtb2R1bGVzIHRoYXQgYXJlIHN1cHBvcnRlZCAqLwogI2RlZmluZSBORVRTTk1QX0lOQ0xVREVfSE9TVF9SRVNPVVJDRVMKLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9NRkRfUkVXUklURVMKICNkZWZpbmUgTkVUU05NUF9JTkNMVURFX0lGVEFCTEVfUkVXUklURVMKLSNlbmRpZgogCiAvKiBTb2xhcmlzIDIuNisgKi8KICNkZWZpbmUgX1NMQVNIX1BST0NfTUVUSE9EXyAxCkBAIC00Myw2ICszOCw2IEBACiAvKgogICogTkVXX01JQl9DT01QTElBTlQgaXMgYSBkZWZpbmUgdXNlZCBpbiBTb2xhcmlzIDEwVTQrIHRvIGVuYWJsZSBhZGRpdGlvbmFsCiAgKiBNSUIgaW5mb3JtYXRpb24gKGl0IGFmZmVjdHMgdGhlIHN0cnVjdHMgaW4gPGluZXQvbWliMi5oPikKLSAqLwotCisgKi8gCisgCiAjZGVmaW5lIE5FV19NSUJfQ09NUExJQU5UCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1LmggYi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zdnI1LmgKaW5kZXggYzRhOWY5YS4uMDE3YzdjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3ZyNS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N2cjUuaApAQCAtNywxOCArNywxMiBAQAogLyoKICAqIHVzaW5nIENDUyAiY2MiLCAiY29uZmlndXJlIiBkb2VzIG5vdCBmaW5kIHRoaXMgaXRlbSAKICAqLwotI2RlZmluZSBIQVZFX01FTUNQWSAxCi0vKgotICogc28sIHVuZG8gdGhlIGRhbWFnZSBkb25lIGVhcmxpZXIgaW4gY29uZmlnLmggCi0gKi8KLSN1bmRlZiBtZW1jcHkKLSN1bmRlZiBtZW1tb3ZlCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCiAKIC8qCiAgKiBsaWUgYWJvdXQgdGhpcyBuZXh0IGRlZmluZSB0byBhdm9pZCBzYV9sZW4gYW5kIHNhX2ZhbWlseSBNQUNST1MgISEgCiAgKi8KLSNkZWZpbmUgU1RSVUNUX1NPQ0tBRERSX0hBU19TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgMQorI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9TQV9VTklPTl9TQV9HRU5FUklDX1NBX0ZBTUlMWTIgMQogCiAvKgogICogdGhpcyBoZWFkZXIgcmVxdWlyZXMgcXVldWVfdCwgbm90IGVhc2lseSBkb25lIHdpdGhvdXQga2VybmVsIGhlYWRlcnMgCmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmggYi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKaW5kZXggZDkwZGYwNzUuLjVlODBhNDUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorKysgYi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKQEAgLTE1LDExICsxNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKiBGb3IgJ3RpbWV2YWwnIAogICAgICAgICAgICAgICAgICAgICAgICAgICovCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01OCwyNiArNTQsMjkgQEAKICMgZW5kaWYKICNlbmRpZgogCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoY3lnd2luKQordHlwZWRlZiBIQU5ETEUgbmV0c25tcF9waWRfdDsKKyNkZWZpbmUgTkVUU05NUF9OT19TVUNIX1BST0NFU1MgSU5WQUxJRF9IQU5ETEVfVkFMVUUKKyNlbHNlCisvKgorICogTm90ZTogb24gUE9TSVgtY29tcGxpYW50IHN5c3RlbXMsIHBpZF90IGlzIGRlZmluZWQgaW4gPHN5cy90eXBlcy5oPi4KKyAqIEFuZCBpZiBwaWRfdCBoYXMgbm90IGJlZW4gZGVmaW5lZCBpbiA8c3lzL3R5cGVzLmg+LCBBQ19UWVBFX1BJRF9UIGVuc3VyZXMKKyAqIHRoYXQgYSBwaWRfdCBkZWZpbml0aW9uIGlzIHByZXNlbnQgaW4gbmV0LXNubXAtY29uZmlnLmguCisgKi8KK3R5cGVkZWYgcGlkX3QgbmV0c25tcF9waWRfdDsKKyNkZWZpbmUgTkVUU05NUF9OT19TVUNIX1BST0NFU1MgLTEKKyNlbmRpZgorCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CQkvKiBGb3IgZGVmaW5pdGlvbiBvZiBpbl9hZGRyX3QgKi8KICNlbmRpZgogCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vaWQuaD4KKwogI2lmZGVmIF9fY3BsdXNwbHVzCiBleHRlcm4gIkMiIHsKICNlbmRpZgogCi0jaWZuZGVmIE1BWF9TVUJJRCAgICAgICAgICAgICAgIC8qIHRlbXBvcmFyeSAtIGR1cGxpY2F0ZSBkZWZpbml0aW9uIHByb3RlY3Rpb24gKi8KLSNpZm5kZWYgRUlHSFRCSVRfU1VCSURTCi10eXBlZGVmIHVfbG9uZyAgb2lkOwotI2RlZmluZSBNQVhfU1VCSUQgICAweEZGRkZGRkZGVUwKLSNkZWZpbmUgTkVUU05NUF9QUklvICJsIgotI2Vsc2UKLXR5cGVkZWYgdV9jaGFyICBvaWQ7Ci0jZGVmaW5lIE1BWF9TVUJJRCAgIDB4RkYKLSNkZWZpbmUgTkVUU05NUF9QUklvICIiCi0jZW5kaWYKLSNlbmRpZgotCiAjaWZuZGVmIEhBVkVfU09DS0xFTl9UCiB0eXBlZGVmIHVfaW50IHNvY2tsZW5fdDsKICNlbmRpZgpAQCAtOTgsMTQyICs5NywxMCBAQAogI2VuZGlmCiAjZW5kaWYKIAotICAgIC8qCi0gICAgICogVHJ5IHRvIGVuc3VyZSB3ZSBoYXZlIDMyLWJpdCAoYW5kIGhvcGVmdWxseSA2NC1iaXQpCi0gICAgICogICAgaW50ZWdlciB0eXBlcyBhdmFpbGFibGUuCi0gICAgICovCi0KLSNpZm5kZWYgSEFWRV9JTlQ4X1QKLXR5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwotI2VuZGlmIC8qICFIQVZFX0lOVDhfVCAqLwotCi0jaWZuZGVmIEhBVkVfVUlOVDhfVAotI2lmZGVmIEhBVkVfVV9JTlQ4X1QKLXR5cGVkZWYgdV9pbnQ4X3QgICAgICB1aW50OF90OwotI2Vsc2UKLXR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90OwotI2VuZGlmCi0jZW5kaWYgLyogIUhBVkVfVUlOVDhfVCAqLwotCi0jaWZuZGVmIEhBVkVfSU5UMTZfVAotI2lmICAgU0laRU9GX0lOVCA9PSAyCi0jZGVmaW5lIElOVDE2X1QgaW50Ci0jZWxpZiBTSVpFT0ZfU0hPUlQgPT0gMgotI2RlZmluZSBJTlQxNl9UIHNob3J0Ci0jZWxzZQotI2RlZmluZSBfSU5UMTZfSVNfTk9UXzE2QklUCi0jZGVmaW5lIElOVDE2X1Qgc2hvcnQKLSNlbmRpZgotdHlwZWRlZiBJTlQxNl9UIGludDE2X3Q7Ci0jZW5kaWYgLyogIUhBVkVfSU5UMTZfVCAqLwotCi0jaWZuZGVmIEhBVkVfVUlOVDE2X1QKLSNpZmRlZiBIQVZFX1VfSU5UMTZfVAotdHlwZWRlZiB1X2ludDE2X3QgICAgICAgIHVpbnQxNl90OwotI2Vsc2UKLSNpZmRlZiBJTlQxNl9UCi10eXBlZGVmIHVuc2lnbmVkIElOVDE2X1QgdWludDE2X3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCAgIHVpbnQxNl90OwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZiAvKiAhSEFWRV9VSU5UMTZfVCAqLwotCi0jaWZuZGVmIEhBVkVfSU5UMzJfVAotI2lmICAgU0laRU9GX0lOVCA9PSA0Ci0jZGVmaW5lIElOVDMyX1QgaW50IAotI2VsaWYgU0laRU9GX0xPTkcgPT0gNAotI2RlZmluZSBJTlQzMl9UIGxvbmcgCi0jZWxpZiBTSVpFT0ZfU0hPUlQgPT0gNAotI2RlZmluZSBJTlQzMl9UIHNob3J0IAotI2Vsc2UKLSNkZWZpbmUgX0lOVDMyX0lTX05PVF8zMkJJVAotI2RlZmluZSBJTlQzMl9UIGludCAKLSNlbmRpZgotdHlwZWRlZiBJTlQzMl9UIGludDMyX3Q7Ci0jZW5kaWYgLyogIUhBVkVfSU5UMzJfVCAqLwotCi0jaWZuZGVmIEhBVkVfVUlOVDMyX1QKLSNpZmRlZiBIQVZFX1VfSU5UMzJfVAotdHlwZWRlZiB1X2ludDMyX3QgICAgICAgIHVpbnQzMl90OwotI2Vsc2UKLSNpZmRlZiBJTlQzMl9UCi10eXBlZGVmIHVuc2lnbmVkIElOVDMyX1QgdWludDMyX3Q7Ci0jZWxzZQotdHlwZWRlZiB1bnNpZ25lZCBpbnQgICAgIHVpbnQzMl90OwotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZiAvKiAhSEFWRV9VSU5UMzJfVCAqLwotCi0jaWZuZGVmIEhBVkVfSU5UNjRfVAotI2lmIFNJWkVPRl9MT05HID09IDgKLSNkZWZpbmUgSU5UNjRfVCBsb25nIAotI2VsaWYgU0laRU9GX0xPTkdfTE9ORyA9PSA4Ci0jZGVmaW5lIElOVDY0X1QgbG9uZyBsb25nCi0jZWxpZiAgIFNJWkVPRl9JTlQgPT0gOAotI2RlZmluZSBJTlQ2NF9UIGludCAKLSNlbGlmIFNJWkVPRl9MT05HID49IDgKLSNkZWZpbmUgSU5UNjRfVCBsb25nIAotI2RlZmluZSBfSU5UNjRfSVNfTk9UXzY0QklUCi0jZW5kaWYKLSNpZmRlZiBJTlQ2NF9UCi10eXBlZGVmIElOVDY0X1QgaW50NjRfdDsKLSNkZWZpbmUgSEFWRV9JTlQ2NF9UIDEKLSNlbmRpZgotI2VuZGlmIC8qICFIQVZFX0lOVDY0X1QgKi8KLQotI2lmbmRlZiBIQVZFX1VJTlQ2NF9UCi0jaWZkZWYgSEFWRV9VX0lOVDY0X1QKLXR5cGVkZWYgdV9pbnQ2NF90ICAgICAgICB1aW50NjRfdDsKLSNlbGlmIGRlZmluZWQoSU5UNjRfVCkKLXR5cGVkZWYgdW5zaWduZWQgSU5UNjRfVCB1aW50NjRfdDsKLSNlbmRpZgotI2RlZmluZSBIQVZFX1VJTlQ2NF9UIDEKKyNpZm5kZWYgSEFWRV9ORkRTX1QKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgbmZkc190OwogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9JTlRNQVhfVAotI2lmZGVmIFNJWkVPRl9MT05HX0xPTkcKLXR5cGVkZWYgbG9uZyBsb25nIGludG1heF90OwotI2RlZmluZSBTSVpFT0ZfSU5UTUFYX1QgU0laRU9GX0xPTkdfTE9ORwotI2VsaWYgZGVmaW5lZChIQVZFX0lOVDY0X1QpICYmICFkZWZpbmVkKF9JTlQ2NF9JU19OT1RfNjRCSVQpCi10eXBlZGVmIGludDY0X3QgICBpbnRtYXhfdDsKLSNkZWZpbmUgU0laRU9GX0lOVE1BWF9UIDgKLSNlbHNlCi10eXBlZGVmIGxvbmcgICAgICBpbnRtYXhfdDsKLSNkZWZpbmUgU0laRU9GX0lOVE1BWF9UIFNJWkVPRl9MT05HCi0jZW5kaWYKLSNkZWZpbmUgSEFWRV9JTlRNQVhfVCAxCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX1VJTlRNQVhfVAotI2lmZGVmIFNJWkVPRl9MT05HX0xPTkcKLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVpbnRtYXhfdDsKLSNlbGlmIGRlZmluZWQoSEFWRV9VSU5UNjRfVCkgJiYgIWRlZmluZWQoX0lOVDY0X0lTX05PVF82NEJJVCkKLXR5cGVkZWYgdWludDY0X3QgICAgICAgICAgIHVpbnRtYXhfdDsKLSNlbHNlCi10eXBlZGVmIHVuc2lnbmVkIGxvbmcgICAgICB1aW50bWF4X3Q7Ci0jZW5kaWYKLSNkZWZpbmUgSEFWRV9VSU5UTUFYX1QgMQotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9VSU5UUFRSX1QKLSNpZiBTSVpFT0ZfTE9ORyA9PSA4Ci0vKiBsaWtlbHkgNjRiaXQgbWFjaGluZSB3aXRoIDY0Yml0IGFkZHJlc3Npbmc/ICovCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIHVpbnRwdHJfdDsKLSNlbHNlCi0gICAgdHlwZWRlZiB1bnNpZ25lZCB1aW50cHRyX3Q7Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfSU5UUFRSX1QKLSNpZiBTSVpFT0ZfTE9ORyA9PSA4Ci0vKiBsaWtlbHkgNjRiaXQgbWFjaGluZSB3aXRoIDY0Yml0IGFkZHJlc3Npbmc/ICovCi0gICAgdHlwZWRlZiBsb25nIGludHB0cl90OwotI2Vsc2UKLSAgICB0eXBlZGVmIGludCBpbnRwdHJfdDsKLSNlbmRpZgotI2VuZGlmCi0gICAgCiAgICAgLyoKICAgICAgKiAgRm9yIHRoZSBpbml0aWFsIHJlbGVhc2UsIHRoaXMgd2lsbCBqdXN0IHJlZmVyIHRvIHRoZQogICAgICAqICByZWxldmFudCBVQ0QgaGVhZGVyIGZpbGVzLgpAQCAtMjQ0LDY5ICsxMTEsMzE0IEBACiAgICAgICogIHRvIGFsbG93IGFwcGxpY2F0aW9uIHdyaXRlcnMgdG8gYWRvcHQgdGhlIG5ldyBoZWFkZXIgZmlsZSBuYW1lcy4KICAgICAgKi8KIAordHlwZWRlZiB1bmlvbiB7CisgICBsb25nICAgICAgICAgICAqaW50ZWdlcjsKKyAgIHVfY2hhciAgICAgICAgICpzdHJpbmc7CisgICBvaWQgICAgICAgICAgICAqb2JqaWQ7CisgICB1X2NoYXIgICAgICAgICAqYml0c3RyaW5nOworICAgc3RydWN0IGNvdW50ZXI2NCAqY291bnRlcjY0OworI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUworICAgZmxvYXQgICAgICAgICAgKmZsb2F0VmFsOworICAgZG91YmxlICAgICAgICAgKmRvdWJsZVZhbDsKKyAgIC8qCisgICAgKiB0X3VuaW9uICp1bmlvblZhbDsgCisgICAgKi8KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9XSVRIX09QQVFVRV9TUEVDSUFMX1RZUEVTICovCit9IG5ldHNubXBfdmFyZGF0YTsKIAotI2luY2x1ZGUgPG5ldC1zbm1wL2RlZmluaXRpb25zLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgotLyoKLSAqICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xpYnNubXAuaD4gCisKKyNkZWZpbmUgTUFYX09JRF9MRU4JICAgIDEyOCAvKiBtYXggc3ViaWQncyBpbiBhbiBvaWQgKi8KKworLyoqIEB0eXBlZGVmIHN0cnVjdCB2YXJpYWJsZV9saXN0IG5ldHNubXBfdmFyaWFibGVfbGlzdAorICogVHlwZWRlZnMgdGhlIHZhcmlhYmxlX2xpc3Qgc3RydWN0IGludG8gbmV0c25tcF92YXJpYWJsZV9saXN0ICovCisvKiogQHN0cnVjdCB2YXJpYWJsZV9saXN0CisgKiBUaGUgbmV0c25tcCB2YXJpYWJsZSBsaXN0IGJpbmRpbmcgc3RydWN0dXJlLCBpdCdzIHR5cGVkZWYnZCB0bworICogbmV0c25tcF92YXJpYWJsZV9saXN0LgogICovCi0KLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2luZGV4X3MgewotICAgICAgIHNpemVfdCAgICAgIGxlbjsKLSAgICAgICBvaWQgICAgICAgICAqb2lkczsKLSAgICB9IG5ldHNubXBfaW5kZXg7Cit0eXBlZGVmIHN0cnVjdCB2YXJpYWJsZV9saXN0IHsKKyAgIC8qKiBOVUxMIGZvciBsYXN0IHZhcmlhYmxlICovCisgICBzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqbmV4dF92YXJpYWJsZTsgICAgCisgICAvKiogT2JqZWN0IGlkZW50aWZpZXIgb2YgdmFyaWFibGUgKi8KKyAgIG9pZCAgICAgICAgICAgICpuYW1lOyAgIAorICAgLyoqIG51bWJlciBvZiBzdWJpZCdzIGluIG5hbWUgKi8KKyAgIHNpemVfdCAgICAgICAgICBuYW1lX2xlbmd0aDsgICAgCisgICAvKiogQVNOIHR5cGUgb2YgdmFyaWFibGUgKi8KKyAgIHVfY2hhciAgICAgICAgICB0eXBlOyAgIAorICAgLyoqIHZhbHVlIG9mIHZhcmlhYmxlICovCisgICAgbmV0c25tcF92YXJkYXRhIHZhbDsKKyAgIC8qKiB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB0byBiZSBjb3BpZWQgaW50byBidWYgKi8KKyAgIHNpemVfdCAgICAgICAgICB2YWxfbGVuOworICAgLyoqIGJ1ZmZlciB0byBob2xkIHRoZSBPSUQgKi8KKyAgIG9pZCAgICAgICAgICAgICBuYW1lX2xvY1tNQVhfT0lEX0xFTl07ICAKKyAgIC8qKiA5MCBwZXJjZW50aWxlIDwgNDAuICovCisgICB1X2NoYXIgICAgICAgICAgYnVmWzQwXTsKKyAgIC8qKiAoT3BhcXVlKSBob29rIGZvciBhZGRpdGlvbmFsIGRhdGEgKi8KKyAgIHZvaWQgICAgICAgICAgICpkYXRhOworICAgLyoqIGNhbGxiYWNrIHRvIGZyZWUgYWJvdmUgKi8KKyAgIHZvaWQgICAgICAgICAgICAoKmRhdGFGcmVlSG9vaykodm9pZCAqKTsgICAgCisgICBpbnQgICAgICAgICAgICAgaW5kZXg7Cit9IG5ldHNubXBfdmFyaWFibGVfbGlzdDsKIAogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF92b2lkX2FycmF5X3MgewotICAgICAgIHNpemVfdCAgc2l6ZTsKLSAgICAgICB2b2lkICogKmFycmF5OwotICAgIH0gbmV0c25tcF92b2lkX2FycmF5OworLyoqIEB0eXBlZGVmIHN0cnVjdCBzbm1wX3BkdSB0byBuZXRzbm1wX3BkdQorICogVHlwZWRlZnMgdGhlIHNubXBfcGR1IHN0cnVjdCBpbnRvIG5ldHNubXBfcGR1ICovCisvKiogQHN0cnVjdCBzbm1wX3BkdQorICogVGhlIHNubXAgcHJvdG9jb2wgZGF0YSB1bml0LgorICovCQordHlwZWRlZiBzdHJ1Y3Qgc25tcF9wZHUgeworCisjZGVmaW5lIG5vbl9yZXBlYXRlcnMJZXJyc3RhdAorI2RlZmluZSBtYXhfcmVwZXRpdGlvbnMgZXJyaW5kZXgKIAogICAgIC8qCi0gICAgICogcmVmZXJlbmNlcyB0byB2YXJpb3VzIHR5cGVzCisgICAgICogUHJvdG9jb2wtdmVyc2lvbiBpbmRlcGVuZGVudCBmaWVsZHMKICAgICAgKi8KLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl92b2lkIHsKLSAgICAgICB2b2lkICogdmFsOwotICAgIH0gbmV0c25tcF9yZWZfdm9pZDsKKyAgICAvKiogc25tcCB2ZXJzaW9uICovCisgICAgbG9uZyAgICAgICAgICAgIHZlcnNpb247CisgICAgLyoqIFR5cGUgb2YgdGhpcyBQRFUgKi8JCisgICAgaW50ICAgICAgICAgICAgIGNvbW1hbmQ7CisgICAgLyoqIFJlcXVlc3QgaWQgLSBub3RlOiBub3QgaW5jcmVtZW50ZWQgb24gcmV0cmllcyAqLworICAgIGxvbmcgICAgICAgICAgICByZXFpZDsgIAorICAgIC8qKiBNZXNzYWdlIGlkIGZvciBWMyBtZXNzYWdlcyBub3RlOiBpbmNyZW1lbnRlZCBmb3IgZWFjaCByZXRyeSAqLworICAgIGxvbmcgICAgICAgICAgICBtc2dpZDsKKyAgICAvKiogVW5pcXVlIElEIGZvciBpbmNvbWluZyB0cmFuc2FjdGlvbnMgKi8KKyAgICBsb25nICAgICAgICAgICAgdHJhbnNpZDsKKyAgICAvKiogU2Vzc2lvbiBpZCBmb3IgQWdlbnRYIG1lc3NhZ2VzICovCisgICAgbG9uZyAgICAgICAgICAgIHNlc3NpZDsKKyAgICAvKiogRXJyb3Igc3RhdHVzIChub25fcmVwZWF0ZXJzIGluIEdldEJ1bGspICovCisgICAgbG9uZyAgICAgICAgICAgIGVycnN0YXQ7CisgICAgLyoqIEVycm9yIGluZGV4IChtYXhfcmVwZXRpdGlvbnMgaW4gR2V0QnVsaykgKi8KKyAgICBsb25nICAgICAgICAgICAgZXJyaW5kZXg7ICAgICAgIAorICAgIC8qKiBVcHRpbWUgKi8KKyAgICB1X2xvbmcgICAgICAgICAgdGltZTsgICAKKyAgICB1X2xvbmcgICAgICAgICAgZmxhZ3M7CiAKLSAgICB0eXBlZGVmIHVuaW9uIHsKLSAgICAgICAgdV9sb25nICB1bDsKLSAgICAgICAgdV9pbnQgICB1aTsKLSAgICAgICAgdV9zaG9ydCB1czsKLSAgICAgICAgdV9jaGFyICB1YzsKLSAgICAgICAgbG9uZyAgICBzbDsKLSAgICAgICAgaW50ICAgICBzaTsKLSAgICAgICAgc2hvcnQgICBzczsKLSAgICAgICAgY2hhciAgICBzYzsKLSAgICAgICAgY2hhciAqICBjcDsKLSAgICAgICAgdm9pZCAqICB2cDsKLSAgICB9IG5ldHNubXBfY3ZhbHVlOworICAgIGludCAgICAgICAgICAgICBzZWN1cml0eU1vZGVsOworICAgIC8qKiBub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2ICovCisgICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TGV2ZWw7ICAKKyAgICBpbnQgICAgICAgICAgICAgbXNnUGFyc2VNb2RlbDsKIAotI2lmIDAKLSAgICB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3JlZl91X2NoYXIgewotICAgICAgIHVfY2hhciAqIHZhbDsKLSAgICB9IG5ldHNubXBfcmVmX1VfY2hhcjsKKyAgICAvKioKKyAgICAgKiBUcmFuc3BvcnQtc3BlY2lmaWMgb3BhcXVlIGRhdGEuICBUaGlzIHJlcGxhY2VzIHRoZSBJUC1jZW50cmljIGFkZHJlc3MKKyAgICAgKiBmaWVsZC4gIAorICAgICAqLworICAgIAorICAgIHZvaWQgICAgICAgICAgICp0cmFuc3BvcnRfZGF0YTsKKyAgICBpbnQgICAgICAgICAgICAgdHJhbnNwb3J0X2RhdGFfbGVuZ3RoOwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfY2hhciB7Ci0gICAgICAgY2hhciAqIHZhbDsKLSAgICB9IG5ldHNubXBfcmVmX3ZvaWQ7CisgICAgLyoqCisgICAgICogVGhlIGFjdHVhbCB0cmFuc3BvcnQgZG9tYWluLiAgVGhpcyBTSE9VTEQgTk9UIEJFIEZSRUUoKUQuICAKKyAgICAgKi8KIAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX2ludF9zIHsKLSAgICAgICBpbnQgdmFsOwotICAgIH0gbmV0c25tcF9yZWZfaW50OworICAgIGNvbnN0IG9pZCAgICAgICp0RG9tYWluOworICAgIHNpemVfdCAgICAgICAgICB0RG9tYWluTGVuOwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfdV9pbnRfcyB7Ci0gICAgICAgdV9pbnQgdmFsOwotICAgIH0gbmV0c25tcF9yZWZfaW50OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyaWFibGVzOwogCi0gICAgdHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9yZWZfdV9sb25nX3MgewotICAgICAgIHVfbG9uZyB2YWw7Ci0gICAgfSBuZXRzbm1wX3JlZl91X2xvbmc7Ci0jZW5kaWYKIAotICAgIHR5cGVkZWYgc3RydWN0IG5ldHNubXBfcmVmX3NpemVfdF9zIHsKLSAgICAgICBzaXplX3QgdmFsOwotICAgIH0gKiBuZXRzbm1wX3JlZl9zaXplX3Q7CisgICAgLyoKKyAgICAgKiBTTk1QdjEgJiBTTk1QdjJjIGZpZWxkcworICAgICAqLworICAgIC8qKiBjb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiAqLworICAgIHVfY2hhciAgICAgICAgICpjb21tdW5pdHk7CisgICAgLyoqIGxlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gKi8KKyAgICBzaXplX3QgICAgICAgICAgY29tbXVuaXR5X2xlbjsgIAorCisgICAgLyoKKyAgICAgKiBUcmFwIGluZm9ybWF0aW9uCisgICAgICovCisgICAgLyoqIFN5c3RlbSBPSUQgKi8KKyAgICBvaWQgICAgICAgICAgICAqZW50ZXJwcmlzZTsgICAgIAorICAgIHNpemVfdCAgICAgICAgICBlbnRlcnByaXNlX2xlbmd0aDsKKyAgICAvKiogdHJhcCB0eXBlICovCisgICAgbG9uZyAgICAgICAgICAgIHRyYXBfdHlwZTsKKyAgICAvKiogc3BlY2lmaWMgdHlwZSAqLworICAgIGxvbmcgICAgICAgICAgICBzcGVjaWZpY190eXBlOworICAgIC8qKiBUaGlzIGlzIE9OTFkgdXNlZCBmb3IgdjEgVFJBUHMgICovCisgICAgdW5zaWduZWQgY2hhciAgIGFnZW50X2FkZHJbNF07ICAKKworICAgIC8qCisgICAgICogIFNOTVB2MyBmaWVsZHMKKyAgICAgKi8KKyAgICAvKiogY29udGV4dCBzbm1wRW5naW5lSUQgKi8KKyAgICB1X2NoYXIgICAgICAgICAqY29udGV4dEVuZ2luZUlEOworICAgIC8qKiBMZW5ndGggb2YgY29udGV4dEVuZ2luZUlEICovCisgICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHRFbmdpbmVJRExlbjsgICAgIAorICAgIC8qKiBhdXRob3JpdGF0aXZlIGNvbnRleHROYW1lICovCisgICAgY2hhciAgICAgICAgICAgKmNvbnRleHROYW1lOworICAgIC8qKiBMZW5ndGggb2YgY29udGV4dE5hbWUgKi8KKyAgICBzaXplX3QgICAgICAgICAgY29udGV4dE5hbWVMZW47CisgICAgLyoqIGF1dGhvcml0YXRpdmUgc25tcEVuZ2luZUlEIGZvciBzZWN1cml0eSAqLworICAgIHVfY2hhciAgICAgICAgICpzZWN1cml0eUVuZ2luZUlEOworICAgIC8qKiBMZW5ndGggb2Ygc2VjdXJpdHlFbmdpbmVJRCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUVuZ2luZUlETGVuOyAgICAKKyAgICAvKiogb24gYmVoYWxmIG9mIHRoaXMgcHJpbmNpcGFsICovCisgICAgY2hhciAgICAgICAgICAgKnNlY3VyaXR5TmFtZTsKKyAgICAvKiogTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlOYW1lTGVuOyAgICAgICAgCisgICAgCisgICAgLyoKKyAgICAgKiBBZ2VudFggZmllbGRzCisgICAgICogICAgICAoYWxzbyB1c2VzIFNOTVB2MSBjb21tdW5pdHkgZmllbGQpCisgICAgICovCisgICAgaW50ICAgICAgICAgICAgIHByaW9yaXR5OworICAgIGludCAgICAgICAgICAgICByYW5nZV9zdWJpZDsKKyAgICAKKyAgICB2b2lkICAgICAgICAgICAqc2VjdXJpdHlTdGF0ZVJlZjsKK30gbmV0c25tcF9wZHU7CisKKworLyoqIEB0eXBlZGVmIHN0cnVjdCBzbm1wX3Nlc3Npb24gbmV0c25tcF9zZXNzaW9uCisgKiBUeXBlZGVmcyB0aGUgc25tcF9zZXNzaW9uIHN0cnVjdCBpbnRvbmV0c25tcF9zZXNzaW9uICovCisgICAgICAgIHN0cnVjdCBzbm1wX3Nlc3Npb247Cit0eXBlZGVmIHN0cnVjdCBzbm1wX3Nlc3Npb24gbmV0c25tcF9zZXNzaW9uOworCisjZGVmaW5lIFVTTV9BVVRIX0tVX0xFTiAgICAgMzIKKyNkZWZpbmUgVVNNX1BSSVZfS1VfTEVOICAgICAzMgorCit0eXBlZGVmIGludCAgICAgICAgKCpzbm1wX2NhbGxiYWNrKSAoaW50LCBuZXRzbm1wX3Nlc3Npb24gKiwgaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiwgdm9pZCAqKTsKK3R5cGVkZWYgaW50ICAgICAoKm5ldHNubXBfY2FsbGJhY2spIChpbnQsIG5ldHNubXBfc2Vzc2lvbiAqLCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqLCB2b2lkICopOworCitzdHJ1Y3QgbmV0c25tcF9jb250YWluZXJfczsKKworLyoqIEBzdHJ1Y3Qgc25tcF9zZXNzaW9uCisgKiBUaGUgc25tcCBzZXNzaW9uIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IHNubXBfc2Vzc2lvbiB7CisgICAgLyoKKyAgICAgKiBQcm90b2NvbC12ZXJzaW9uIGluZGVwZW5kZW50IGZpZWxkcworICAgICAqLworICAgIC8qKiBzbm1wIHZlcnNpb24gKi8KKyAgICBsb25nICAgICAgICAgICAgdmVyc2lvbjsKKyAgICAvKiogTnVtYmVyIG9mIHJldHJpZXMgYmVmb3JlIHRpbWVvdXQuICovCisgICAgaW50ICAgICAgICAgICAgIHJldHJpZXM7CisgICAgLyoqIE51bWJlciBvZiB1UyB1bnRpbCBmaXJzdCB0aW1lb3V0LCB0aGVuIGV4cG9uZW50aWFsIGJhY2tvZmYgKi8KKyAgICBsb25nICAgICAgICAgICAgdGltZW91dDsgICAgICAgIAorICAgIHVfbG9uZyAgICAgICAgICBmbGFnczsKKyAgICBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzdWJzZXNzaW9uOworICAgIHN0cnVjdCBzbm1wX3Nlc3Npb24gKm5leHQ7CisKKyAgICAvKiogbmFtZSBvciBhZGRyZXNzIG9mIGRlZmF1bHQgcGVlciAobWF5IGluY2x1ZGUgdHJhbnNwb3J0IHNwZWNpZmllciBhbmQvb3IgcG9ydCBudW1iZXIpICovCisgICAgY2hhciAgICAgICAgICAgKnBlZXJuYW1lOworICAgIC8qKiBVRFAgcG9ydCBudW1iZXIgb2YgcGVlci4gKE5PIExPTkdFUiBVU0VEIC0gVVNFIHBlZXJuYW1lIElOU1RFQUQpICovCisgICAgdV9zaG9ydCAgICAgICAgIHJlbW90ZV9wb3J0OworICAgIC8qKiBNeSBEb21haW4gbmFtZSBvciBkb3R0ZWQgSVAgYWRkcmVzcywgMCBmb3IgZGVmYXVsdCAqLworICAgIGNoYXIgICAgICAgICAgICpsb2NhbG5hbWU7CisgICAgLyoqIE15IFVEUCBwb3J0IG51bWJlciwgMCBmb3IgZGVmYXVsdCwgcGlja2VkIHJhbmRvbWx5ICovCisgICAgdV9zaG9ydCAgICAgICAgIGxvY2FsX3BvcnQ7ICAgICAKKyAgICAvKioKKyAgICAgKiBBdXRoZW50aWNhdGlvbiBmdW5jdGlvbiBvciBOVUxMIGlmIG51bGwgYXV0aGVudGljYXRpb24gaXMgdXNlZCAKKyAgICAgKi8KKyAgICB1X2NoYXIgICAgICAgICAqKCphdXRoZW50aWNhdG9yKSAodV9jaGFyICosIHNpemVfdCAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKKyAgICAvKiogRnVuY3Rpb24gdG8gaW50ZXJwcmV0IGluY29taW5nIGRhdGEgKi8KKyAgICBuZXRzbm1wX2NhbGxiYWNrIGNhbGxiYWNrOyAgICAgIAorICAgIC8qKgorICAgICAqIFBvaW50ZXIgdG8gZGF0YSB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtYXkgY29uc2lkZXIgaW1wb3J0YW50IAorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICpjYWxsYmFja19tYWdpYzsKKyAgICAvKiogY29weSBvZiBzeXN0ZW0gZXJybm8gKi8KKyAgICBpbnQgICAgICAgICAgICAgc19lcnJubzsKKyAgICAvKiogY29weSBvZiBsaWJyYXJ5IGVycm5vICovCisgICAgaW50ICAgICAgICAgICAgIHNfc25tcF9lcnJubzsgICAKKyAgICAvKiogU2Vzc2lvbiBpZCAtIEFnZW50WCBvbmx5ICovCisgICAgbG9uZyAgICAgICAgICAgIHNlc3NpZDsgCisKKyAgICAvKgorICAgICAqIFNOTVB2MSAmIFNOTVB2MmMgZmllbGRzCisgICAgICovCisgICAgLyoqIGNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuICovCisgICAgdV9jaGFyICAgICAgICAgKmNvbW11bml0eTsKKyAgICAvKiogTGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiAqLworICAgIHNpemVfdCAgICAgICAgICBjb21tdW5pdHlfbGVuOyAgCisgICAgLyoqICBMYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHJlY2VpdmUuICAqLworICAgIHNpemVfdCAgICAgICAgICByY3ZNc2dNYXhTaXplOworICAgIC8qKiAgTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byBzZW5kLiAgKi8KKyAgICBzaXplX3QgICAgICAgICAgc25kTXNnTWF4U2l6ZTsgIAorCisgICAgLyoKKyAgICAgKiBTTk1QdjMgZmllbGRzCisgICAgICovCisgICAgLyoqIGFyZSB3ZSB0aGUgYXV0aG9yaXRhdGl2ZSBlbmdpbmU/ICovCisgICAgdV9jaGFyICAgICAgICAgIGlzQXV0aG9yaXRhdGl2ZTsKKyAgICAvKiogYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgKi8KKyAgICB1X2NoYXIgICAgICAgICAqY29udGV4dEVuZ2luZUlEOworICAgIC8qKiBMZW5ndGggb2YgY29udGV4dEVuZ2luZUlEICovCisgICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHRFbmdpbmVJRExlbjsgICAgIAorICAgIC8qKiBpbml0aWFsIGVuZ2luZUJvb3RzIGZvciByZW1vdGUgZW5naW5lICovCisgICAgdV9pbnQgICAgICAgICAgIGVuZ2luZUJvb3RzOworICAgIC8qKiBpbml0aWFsIGVuZ2luZVRpbWUgZm9yIHJlbW90ZSBlbmdpbmUgKi8KKyAgICB1X2ludCAgICAgICAgICAgZW5naW5lVGltZTsKKyAgICAvKiogYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSAqLworICAgIGNoYXIgICAgICAgICAgICpjb250ZXh0TmFtZTsKKyAgICAvKiogTGVuZ3RoIG9mIGNvbnRleHROYW1lICovCisgICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHROYW1lTGVuOworICAgIC8qKiBhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCAqLworICAgIHVfY2hhciAgICAgICAgICpzZWN1cml0eUVuZ2luZUlEOworICAgIC8qKiBMZW5ndGggb2YgY29udGV4dEVuZ2luZUlEICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5RW5naW5lSURMZW47ICAgIAorICAgIC8qKiBvbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgKi8KKyAgICBjaGFyICAgICAgICAgICAqc2VjdXJpdHlOYW1lOworICAgIC8qKiBMZW5ndGggb2Ygc2VjdXJpdHlOYW1lLiAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eU5hbWVMZW47CisKKyAgICAvKiogYXV0aCBwcm90b2NvbCBvaWQgKi8KKyAgICBvaWQgICAgICAgICAgICAqc2VjdXJpdHlBdXRoUHJvdG87CisgICAgLyoqIExlbmd0aCBvZiBhdXRoIHByb3RvY29sIG9pZCAqLworICAgIHNpemVfdCAgICAgICAgICBzZWN1cml0eUF1dGhQcm90b0xlbjsKKyAgICAvKiogS3UgZm9yIGF1dGggcHJvdG9jb2wgWFhYICovCisgICAgdV9jaGFyICAgICAgICAgIHNlY3VyaXR5QXV0aEtleVtVU01fQVVUSF9LVV9MRU5dOyAgICAgICAKKyAgICAvKiogTGVuZ3RoIG9mIEt1IGZvciBhdXRoIHByb3RvY29sICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5QXV0aEtleUxlbjsKKyAgICAvKiogS3VsIGZvciBhdXRoIHByb3RvY29sICovCisgICAgdV9jaGFyICAgICAgICAgICpzZWN1cml0eUF1dGhMb2NhbEtleTsgICAgICAgCisgICAgLyoqIExlbmd0aCBvZiBLdWwgZm9yIGF1dGggcHJvdG9jb2wgWFhYICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5QXV0aExvY2FsS2V5TGVuOyAgICAgICAKKworICAgIC8qKiBwcml2IHByb3RvY29sIG9pZCAqLworICAgIG9pZCAgICAgICAgICAgICpzZWN1cml0eVByaXZQcm90bzsKKyAgICAvKiogTGVuZ3RoIG9mIHByaXYgcHJvdG9jb2wgb2lkICovCisgICAgc2l6ZV90ICAgICAgICAgIHNlY3VyaXR5UHJpdlByb3RvTGVuOworICAgIC8qKiBLdSBmb3IgcHJpdmFjeSBwcm90b2NvbCBYWFggKi8KKyAgICB1X2NoYXIgICAgICAgICAgc2VjdXJpdHlQcml2S2V5W1VTTV9QUklWX0tVX0xFTl07ICAgICAgIAorICAgIC8qKiBMZW5ndGggb2YgS3UgZm9yIHByaXYgcHJvdG9jb2wgKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlQcml2S2V5TGVuOworICAgIC8qKiBLdWwgZm9yIHByaXYgcHJvdG9jb2wgKi8KKyAgICB1X2NoYXIgICAgICAgICAgKnNlY3VyaXR5UHJpdkxvY2FsS2V5OyAgICAgICAKKyAgICAvKiogTGVuZ3RoIG9mIEt1bCBmb3IgcHJpdiBwcm90b2NvbCBYWFggKi8KKyAgICBzaXplX3QgICAgICAgICAgc2VjdXJpdHlQcml2TG9jYWxLZXlMZW47ICAgICAgIAorCisgICAgLyoqIHNubXAgc2VjdXJpdHkgbW9kZWwsIHYxLCB2MmMsIHVzbSAqLworICAgIGludCAgICAgICAgICAgICBzZWN1cml0eU1vZGVsOworICAgIC8qKiBub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2ICovCisgICAgaW50ICAgICAgICAgICAgIHNlY3VyaXR5TGV2ZWw7ICAKKyAgICAvKiogdGFyZ2V0IHBhcmFtIG5hbWUgKi8KKyAgICBjaGFyICAgICAgICAgICAqcGFyYW1OYW1lOworCisgICAgLyoqCisgICAgICogc2VjdXJpdHkgbW9kdWxlIHNwZWNpZmljIAorICAgICAqLworICAgIHZvaWQgICAgICAgICAgICpzZWN1cml0eUluZm87CisKKyAgICAvKioKKyAgICAgKiB0cmFuc3BvcnQgc3BlY2lmaWMgY29uZmlndXJhdGlvbiAKKyAgICAgKi8KKyAgIHN0cnVjdCBuZXRzbm1wX2NvbnRhaW5lcl9zICp0cmFuc3BvcnRfY29uZmlndXJhdGlvbjsKKworICAgIC8qKgorICAgICAqIHVzZSBhcyB5b3Ugd2FudCBkYXRhIAorICAgICAqCisgICAgICogICAgIHVzZWQgYnkgJ1NOTVBfRkxBR1NfUkVTUF9DQUxMQkFDSycgaGFuZGxpbmcgaW4gdGhlIGFnZW50CisgICAgICogWFhYOiBvciBzaG91bGQgd2UgYWRkIGEgbmV3IGZpZWxkIGludG8gdGhpcyBzdHJ1Y3R1cmU/CisgICAgICovCisgICAgdm9pZCAgICAgICAgICAgKm15dm9pZDsKK307CisKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9kZWZpbml0aW9ucy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KIAogI2lmZGVmIF9fY3BsdXNwbHVzCiB9CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmggYi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKaW5kZXggZWQ1NzQ4Yi4uN2Y0ODUwMyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaApAQCAtNywxNiArNyw5NyBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KIAotICAgIC8qCi0gICAgICogIEZvciB0aGUgaW5pdGlhbCByZWxlYXNlLCB0aGlzIHdpbGwganVzdCByZWZlciB0byB0aGUKLSAgICAgKiAgcmVsZXZhbnQgVUNEIGhlYWRlciBmaWxlcy4KLSAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGUgcm91dGluZXMgcmVsZXZhbnQgdG8gdGhpcyBhcmVhIG9mIHRoZQotICAgICAqICBBUEkgd2lsbCBiZSBpZGVudGlmaWVkLCBhbmQgbGlzdGVkIGhlcmUgZGlyZWN0bHkuCi0gICAgICoKLSAgICAgKiAgQnV0IGZvciB0aGUgdGltZSBiZWluZywgdGhpcyBoZWFkZXIgZmlsZSBpcyBhIHBsYWNlaG9sZGVyLAotICAgICAqICB0byBhbGxvdyBhcHBsaWNhdGlvbiB3cml0ZXJzIHRvIGFkb3B0IHRoZSBuZXcgaGVhZGVyIGZpbGUgbmFtZXMuCi0gICAgICovCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAgICAgICAgICAiQyIgeworI2VuZGlmCiAKKyAgICAvKiBDcmVhdGlvbiAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoKKyAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUobmV0c25tcF9wZHUgKnBkdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIHZhbHVlLCBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCisgICAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiogdmFybGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIHZhbHVlLCBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCisgICAgICAgc25tcF9hZGRfbnVsbF92YXIobmV0c25tcF9wZHUgKnBkdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgorICAgICAgIHNubXBfY2xvbmVfdmFyYmluZChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJsaXN0KTsKKworICAgIC8qIFNldHRpbmcgVmFsdWVzICovCisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX29iamlkKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCk7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3ZhbHVlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiB2YWx1ZSwgc2l6ZV90IGxlbik7CisgICAgTkVUU05NUF9JTVBPUlQKKyAgICBpbnQgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciB0eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIHZhbHVlLCBzaXplX3QgbGVuKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlcihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgbG9uZyB2YWwpOworCisgICAgIC8qIE91dHB1dCAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHByaW50X3ZhcmlhYmxlKGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgIGZwcmludF92YXJpYWJsZShGSUxFICogZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgc25wcmludF92YXJpYWJsZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CisKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICAgcHJpbnRfdmFsdWUoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBmcHJpbnRfdmFsdWUoRklMRSAqIGZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcmlhYmxlKTsKKyAgICBORVRTTk1QX0lNUE9SVAorICAgIGludCAgICAgICAgICAgIHNucHJpbnRfdmFsdWUoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiB2YXJpYWJsZSk7CisKKyAgICAgICAgICAgLyogU2VlIG1pYl9hcGkuaCBmb3IgeyxmLHNufXByaW50X29iamlkICovCisKKyAgICAvKiBEZWxldGlvbiAqLworICAgIE5FVFNOTVBfSU1QT1JUCisgICAgdm9pZCAgICAgICAgICAgIHNubXBfZnJlZV92YXIoICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKTsgICAgIC8qIGZyZWVzIGp1c3QgdGhpcyBvbmUgKi8KKyAgICBORVRTTk1QX0lNUE9SVAorICAgIHZvaWQgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcmxpc3QpOyAvKiBmcmVlcyBhbGwgaW4gbGlzdCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiAgICBIYXZpbmcgZXh0cmFjdGVkIHRoZSBtYWluICgicHVibGljIEFQSSIpIGNhbGxzIHJlbGV2YW50CisgICAgICogIHRvIHRoaXMgYXJlYSBvZiB0aGUgTmV0LVNOTVAgcHJvamVjdCwgdGhlIG5leHQgc3RlcCBpcyB0bworICAgICAqICBpZGVudGlmeSB0aGUgcmVsYXRlZCAicHVibGljIGludGVybmFsIEFQSSIgcm91dGluZXMuCisgICAgICoKKyAgICAgKiAgICBJbiBkdWUgY291cnNlLCB0aGVzZSBzaG91bGQgcHJvYmFibHkgYmUgZ2F0aGVyZWQKKyAgICAgKiAgdG9nZXRoZXIgaW50byBhIGNvbXBhbmlvbiAnbGlicmFyeS92YXJiaW5kX2FwaS5oJyBoZWFkZXIgZmlsZS4KKyAgICAgKiAgW09yIHNvbWUgc3VpdGFibGUgbmFtZV0KKyAgICAgKgorICAgICAqICAgIEJ1dCBmb3IgdGhlIHRpbWUgYmVpbmcsIHRoZSBleHBlY3RhdGlvbiBpcyB0aGF0IHRoZQorICAgICAqICB0cmFkaXRpb25hbCBoZWFkZXJzIHRoYXQgcHJvdmlkZWQgdGhlIGFib3ZlIGRlZmluaXRpb25zCisgICAgICogIHdpbGwgcHJvYmFibHkgYWxzbyBjb3ZlciB0aGUgcmVsZXZhbnQgaW50ZXJuYWwgQVBJIGNhbGxzLgorICAgICAqICBIZW5jZSB0aGV5IGFyZSBsaXN0ZWQgaGVyZToKKyAgICAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWliLmg+CmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaCBiL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCmluZGV4IDE3YjJlNDUuLjFjMzZmZmUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisrKyBiL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCkBAIC05LDYgKzksNyBAQAogICAgIGV4dGVybiBjb25zdCBjaGFyICpOZXRTbm1wVmVyc2lvbkluZm87CiAjZW5kaWYKIAorICAgIE5FVFNOTVBfSU1QT1JUCiAgICAgY29uc3QgY2hhciAgICAgKm5ldHNubXBfZ2V0X3ZlcnNpb24odm9pZCk7CiAKICNpZmRlZiBfX2NwbHVzcGx1cwpkaWZmIC0tZ2l0IGEvaW5zdGFsbC1zaCBiL2luc3RhbGwtc2gKaW5kZXggMmMyMTJjYy4uM2Y4M2NlOSAxMDA3NTUKLS0tIGEvaW5zdGFsbC1zaAorKysgYi9pbnN0YWxsLXNoCkBAIC0xLDE5ICsxLDM4IEBACi0jISAvYmluL3NoCi0jCisjIS9iaW4vc2gKICMgaW5zdGFsbCAtIGluc3RhbGwgYSBwcm9ncmFtLCBzY3JpcHQsIG9yIGRhdGFmaWxlCi0jIFRoaXMgY29tZXMgZnJvbSBYMTFSNSAobWl0L3V0aWwvc2NyaXB0cy9pbnN0YWxsLnNoKS4KKworc2NyaXB0dmVyc2lvbj0yMDEwLTAyLTA2LjE4OyAjIFVUQworCisjIFRoaXMgb3JpZ2luYXRlcyBmcm9tIFgxMVI1IChtaXQvdXRpbC9zY3JpcHRzL2luc3RhbGwuc2gpLCB3aGljaCB3YXMKKyMgbGF0ZXIgcmVsZWFzZWQgaW4gWDExUjYgKHhjL2NvbmZpZy91dGlsL2luc3RhbGwuc2gpIHdpdGggdGhlCisjIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UuCiAjCi0jIENvcHlyaWdodCAxOTkxIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisjIENvcHlyaWdodCAoQykgMTk5NCBYIENvbnNvcnRpdW0KICMKLSMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCi0jIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Ci0jIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAotIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCi0jIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgotIyBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCi0jIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCi0jIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgotIyB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyMgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorIyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKyMgZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyMgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yCisjIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCisjIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisjCisjIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluCisjIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorIworIyBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorIyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyMgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBYIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOCisjIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQy0KKyMgVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKyMKKyMgRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgdGhlIFggQ29uc29ydGl1bSBzaGFsbCBub3QKKyMgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWwtCisjIGluZ3MgaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBYIENvbnNvci0KKyMgdGl1bS4KKyMKKyMKKyMgRlNGIGNoYW5nZXMgdG8gdGhpcyBmaWxlIGFyZSBpbiB0aGUgcHVibGljIGRvbWFpbi4KICMKICMgQ2FsbGluZyB0aGlzIHNjcmlwdCBpbnN0YWxsLXNoIGlzIHByZWZlcnJlZCBvdmVyIGluc3RhbGwuc2gsIHRvIHByZXZlbnQKICMgYG1ha2UnIGltcGxpY2l0IHJ1bGVzIGZyb20gY3JlYXRpbmcgYSBmaWxlIGNhbGxlZCBpbnN0YWxsIGZyb20gaXQKQEAgLTIxLDIzMCArNDAsNDg1IEBACiAjCiAjIFRoaXMgc2NyaXB0IGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgQlNEIGluc3RhbGwgc2NyaXB0LCBidXQgd2FzIHdyaXR0ZW4KICMgZnJvbSBzY3JhdGNoLgotIwogCitubD0nCisnCitJRlM9IiAiIgkkbmwiCiAKICMgc2V0IERPSVRQUk9HIHRvIGVjaG8gdG8gdGVzdCB0aGlzIHNjcmlwdAogCiAjIERvbid0IHVzZSA6LSBzaW5jZSA0LjNCU0QgYW5kIGVhcmxpZXIgc2hlbGxzIGRvbid0IGxpa2UgaXQuCi1kb2l0PSIke0RPSVRQUk9HLX0iCi0KLQotIyBwdXQgaW4gYWJzb2x1dGUgcGF0aHMgaWYgeW91IGRvbid0IGhhdmUgdGhlbSBpbiB5b3VyIHBhdGg7IG9yIHVzZSBlbnYuIHZhcnMuCi0KLW12cHJvZz0iJHtNVlBST0ctbXZ9IgotY3Bwcm9nPSIke0NQUFJPRy1jcH0iCi1jaG1vZHByb2c9IiR7Q0hNT0RQUk9HLWNobW9kfSIKLWNob3ducHJvZz0iJHtDSE9XTlBST0ctY2hvd259IgotY2hncnBwcm9nPSIke0NIR1JQUFJPRy1jaGdycH0iCi1zdHJpcHByb2c9IiR7U1RSSVBQUk9HLXN0cmlwfSIKLXJtcHJvZz0iJHtSTVBST0ctcm19IgotbWtkaXJwcm9nPSIke01LRElSUFJPRy1ta2Rpcn0iCi0KLXRyYW5zZm9ybWJhc2VuYW1lPSIiCi10cmFuc2Zvcm1fYXJnPSIiCi1pbnN0Y21kPSIkbXZwcm9nIgotY2htb2RjbWQ9IiRjaG1vZHByb2cgMDc1NSIKLWNob3duY21kPSIiCi1jaGdycGNtZD0iIgotc3RyaXBjbWQ9IiIKLXJtY21kPSIkcm1wcm9nIC1mIgotbXZjbWQ9IiRtdnByb2ciCi1zcmM9IiIKLWRzdD0iIgotZGlyX2FyZz0iIgotCi13aGlsZSBbIHgiJDEiICE9IHggXTsgZG8KLSAgICBjYXNlICQxIGluCi0JLWMpIGluc3RjbWQ9IiRjcHByb2ciCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1kKSBkaXJfYXJnPXRydWUKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLW0pIGNobW9kY21kPSIkY2htb2Rwcm9nICQyIgotCSAgICBzaGlmdAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktbykgY2hvd25jbWQ9IiRjaG93bnByb2cgJDIiCi0JICAgIHNoaWZ0Ci0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCS1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKLQkgICAgc2hpZnQKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotCi0JLXMpIHN0cmlwY21kPSIkc3RyaXBwcm9nIgotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktdD0qKSB0cmFuc2Zvcm1hcmc9YGVjaG8gJDEgfCBzZWQgJ3MvLXQ9Ly8nYAotCSAgICBzaGlmdAotCSAgICBjb250aW51ZTs7Ci0KLQktYj0qKSB0cmFuc2Zvcm1iYXNlbmFtZT1gZWNobyAkMSB8IHNlZCAncy8tYj0vLydgCi0JICAgIHNoaWZ0Ci0JICAgIGNvbnRpbnVlOzsKLQotCSopICBpZiBbIHgiJHNyYyIgPSB4IF0KLQkgICAgdGhlbgotCQlzcmM9JDEKLQkgICAgZWxzZQotCQkjIHRoaXMgY29sb24gaXMgdG8gd29yayBhcm91bmQgYSAzODZCU0QgL2Jpbi9zaCBidWcKLQkJOgotCQlkc3Q9JDEKLQkgICAgZmkKLQkgICAgc2hpZnQKLQkgICAgY29udGludWU7OwotICAgIGVzYWMKLWRvbmUKLQotaWYgWyB4IiRzcmMiID0geCBdCi10aGVuCi0JZWNobyAiaW5zdGFsbDoJbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQiCi0JZXhpdCAxCitkb2l0PSR7RE9JVFBST0ctfQoraWYgdGVzdCAteiAiJGRvaXQiOyB0aGVuCisgIGRvaXRfZXhlYz1leGVjCiBlbHNlCi0JdHJ1ZQorICBkb2l0X2V4ZWM9JGRvaXQKIGZpCiAKLWlmIFsgeCIkZGlyX2FyZyIgIT0geCBdOyB0aGVuCi0JZHN0PSRzcmMKLQlzcmM9IiIKLQkKLQlpZiBbIC1kICRkc3QgXTsgdGhlbgotCQlpbnN0Y21kPToKLQllbHNlCi0JCWluc3RjbWQ9bWtkaXIKLQlmaQotZWxzZQorIyBQdXQgaW4gYWJzb2x1dGUgZmlsZSBuYW1lcyBpZiB5b3UgZG9uJ3QgaGF2ZSB0aGVtIGluIHlvdXIgcGF0aDsKKyMgb3IgdXNlIGVudmlyb25tZW50IHZhcnMuCiAKLSMgV2FpdGluZyBmb3IgdGhpcyB0byBiZSBkZXRlY3RlZCBieSB0aGUgIiRpbnN0Y21kICRzcmMgJGRzdHRtcCIgY29tbWFuZAotIyBtaWdodCBjYXVzZSBkaXJlY3RvcmllcyB0byBiZSBjcmVhdGVkLCB3aGljaCB3b3VsZCBiZSBlc3BlY2lhbGx5IGJhZCAKLSMgaWYgJHNyYyAoYW5kIHRodXMgJGRzdHRtcCkgY29udGFpbnMgJyonLgorY2hncnBwcm9nPSR7Q0hHUlBQUk9HLWNoZ3JwfQorY2htb2Rwcm9nPSR7Q0hNT0RQUk9HLWNobW9kfQorY2hvd25wcm9nPSR7Q0hPV05QUk9HLWNob3dufQorY21wcHJvZz0ke0NNUFBST0ctY21wfQorY3Bwcm9nPSR7Q1BQUk9HLWNwfQorbWtkaXJwcm9nPSR7TUtESVJQUk9HLW1rZGlyfQorbXZwcm9nPSR7TVZQUk9HLW12fQorcm1wcm9nPSR7Uk1QUk9HLXJtfQorc3RyaXBwcm9nPSR7U1RSSVBQUk9HLXN0cmlwfQogCi0JaWYgWyAtZiAkc3JjIC1vIC1kICRzcmMgXQotCXRoZW4KLQkJdHJ1ZQotCWVsc2UKLQkJZWNobyAiaW5zdGFsbDogICRzcmMgZG9lcyBub3QgZXhpc3QiCi0JCWV4aXQgMQotCWZpCi0JCi0JaWYgWyB4IiRkc3QiID0geCBdCi0JdGhlbgotCQllY2hvICJpbnN0YWxsOglubyBkZXN0aW5hdGlvbiBzcGVjaWZpZWQiCi0JCWV4aXQgMQotCWVsc2UKLQkJdHJ1ZQotCWZpCi0KLSMgSWYgZGVzdGluYXRpb24gaXMgYSBkaXJlY3RvcnksIGFwcGVuZCB0aGUgaW5wdXQgZmlsZW5hbWU7IGlmIHlvdXIgc3lzdGVtCi0jIGRvZXMgbm90IGxpa2UgZG91YmxlIHNsYXNoZXMgaW4gZmlsZW5hbWVzLCB5b3UgbWF5IG5lZWQgdG8gYWRkIHNvbWUgbG9naWMKLQotCWlmIFsgLWQgJGRzdCBdCi0JdGhlbgotCQlkc3Q9IiRkc3QiL2BiYXNlbmFtZSAkc3JjYAotCWVsc2UKLQkJdHJ1ZQotCWZpCi1maQotCi0jIyB0aGlzIHNlZCBjb21tYW5kIGVtdWxhdGVzIHRoZSBkaXJuYW1lIGNvbW1hbmQKLWRzdGRpcj1gZWNobyAkZHN0IHwgc2VkIC1lICdzLFteL10qJCwsO3MsLyQsLDtzLF4kLC4sJ2AKLQotIyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVzdGluYXRpb24gZGlyZWN0b3J5IGV4aXN0cy4KLSMgIHRoaXMgcGFydCBpcyB0YWtlbiBmcm9tIE5vYWggRnJpZWRtYW4ncyBta2luc3RhbGxkaXJzIHNjcmlwdAotCi0jIFNraXAgbG90cyBvZiBzdGF0IGNhbGxzIGluIHRoZSB1c3VhbCBjYXNlLgotaWYgWyAhIC1kICIkZHN0ZGlyIiBdOyB0aGVuCi1kZWZhdWx0SUZTPScJCitwb3NpeF9nbG9iPSc/JworaW5pdGlhbGl6ZV9wb3NpeF9nbG9iPScKKyAgdGVzdCAiJHBvc2l4X2dsb2IiICE9ICI/IiB8fCB7CisgICAgaWYgKHNldCAtZikgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgIHBvc2l4X2dsb2I9CisgICAgZWxzZQorICAgICAgcG9zaXhfZ2xvYj06CisgICAgZmkKKyAgfQogJwotSUZTPSIke0lGUy0ke2RlZmF1bHRJRlN9fSIKIAotb0lGUz0iJHtJRlN9IgotIyBTb21lIHNoJ3MgY2FuJ3QgaGFuZGxlIElGUz0vIGZvciBzb21lIHJlYXNvbi4KLUlGUz0nJScKLXNldCAtIGBlY2hvICR7ZHN0ZGlyfSB8IHNlZCAtZSAnc0AvQCVAZycgLWUgJ3NAXiVAL0AnYAotSUZTPSIke29JRlN9IgorcG9zaXhfbWtkaXI9CiAKLXBhdGhjb21wPScnCisjIERlc2lyZWQgbW9kZSBvZiBpbnN0YWxsZWQgZmlsZS4KK21vZGU9MDc1NQogCi13aGlsZSBbICQjIC1uZSAwIF0gOyBkbwotCXBhdGhjb21wPSIke3BhdGhjb21wfSR7MX0iCi0Jc2hpZnQKK2NoZ3JwY21kPQorY2htb2RjbWQ9JGNobW9kcHJvZworY2hvd25jbWQ9CittdmNtZD0kbXZwcm9nCitybWNtZD0iJHJtcHJvZyAtZiIKK3N0cmlwY21kPQogCi0JaWYgWyAhIC1kICIke3BhdGhjb21wfSIgXSA7Ci0gICAgICAgIHRoZW4KLQkJJG1rZGlycHJvZyAiJHtwYXRoY29tcH0iCi0JZWxzZQotCQl0cnVlCi0JZmkKK3NyYz0KK2RzdD0KK2Rpcl9hcmc9Citkc3RfYXJnPQogCi0JcGF0aGNvbXA9IiR7cGF0aGNvbXB9LyIKK2NvcHlfb25fY2hhbmdlPWZhbHNlCitub190YXJnZXRfZGlyZWN0b3J5PQorCit1c2FnZT0iXAorVXNhZ2U6ICQwIFtPUFRJT05dLi4uIFstVF0gU1JDRklMRSBEU1RGSUxFCisgICBvcjogJDAgW09QVElPTl0uLi4gU1JDRklMRVMuLi4gRElSRUNUT1JZCisgICBvcjogJDAgW09QVElPTl0uLi4gLXQgRElSRUNUT1JZIFNSQ0ZJTEVTLi4uCisgICBvcjogJDAgW09QVElPTl0uLi4gLWQgRElSRUNUT1JJRVMuLi4KKworSW4gdGhlIDFzdCBmb3JtLCBjb3B5IFNSQ0ZJTEUgdG8gRFNURklMRS4KK0luIHRoZSAybmQgYW5kIDNyZCwgY29weSBhbGwgU1JDRklMRVMgdG8gRElSRUNUT1JZLgorSW4gdGhlIDR0aCwgY3JlYXRlIERJUkVDVE9SSUVTLgorCitPcHRpb25zOgorICAgICAtLWhlbHAgICAgIGRpc3BsYXkgdGhpcyBoZWxwIGFuZCBleGl0LgorICAgICAtLXZlcnNpb24gIGRpc3BsYXkgdmVyc2lvbiBpbmZvIGFuZCBleGl0LgorCisgIC1jICAgICAgICAgICAgKGlnbm9yZWQpCisgIC1DICAgICAgICAgICAgaW5zdGFsbCBvbmx5IGlmIGRpZmZlcmVudCAocHJlc2VydmUgdGhlIGxhc3QgZGF0YSBtb2RpZmljYXRpb24gdGltZSkKKyAgLWQgICAgICAgICAgICBjcmVhdGUgZGlyZWN0b3JpZXMgaW5zdGVhZCBvZiBpbnN0YWxsaW5nIGZpbGVzLgorICAtZyBHUk9VUCAgICAgICRjaGdycHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIEdST1VQLgorICAtbSBNT0RFICAgICAgICRjaG1vZHByb2cgaW5zdGFsbGVkIGZpbGVzIHRvIE1PREUuCisgIC1vIFVTRVIgICAgICAgJGNob3ducHJvZyBpbnN0YWxsZWQgZmlsZXMgdG8gVVNFUi4KKyAgLXMgICAgICAgICAgICAkc3RyaXBwcm9nIGluc3RhbGxlZCBmaWxlcy4KKyAgLXQgRElSRUNUT1JZICBpbnN0YWxsIGludG8gRElSRUNUT1JZLgorICAtVCAgICAgICAgICAgIHJlcG9ydCBhbiBlcnJvciBpZiBEU1RGSUxFIGlzIGEgZGlyZWN0b3J5LgorCitFbnZpcm9ubWVudCB2YXJpYWJsZXMgb3ZlcnJpZGUgdGhlIGRlZmF1bHQgY29tbWFuZHM6CisgIENIR1JQUFJPRyBDSE1PRFBST0cgQ0hPV05QUk9HIENNUFBST0cgQ1BQUk9HIE1LRElSUFJPRyBNVlBST0cKKyAgUk1QUk9HIFNUUklQUFJPRworIgorCit3aGlsZSB0ZXN0ICQjIC1uZSAwOyBkbworICBjYXNlICQxIGluCisgICAgLWMpIDs7CisKKyAgICAtQykgY29weV9vbl9jaGFuZ2U9dHJ1ZTs7CisKKyAgICAtZCkgZGlyX2FyZz10cnVlOzsKKworICAgIC1nKSBjaGdycGNtZD0iJGNoZ3JwcHJvZyAkMiIKKwlzaGlmdDs7CisKKyAgICAtLWhlbHApIGVjaG8gIiR1c2FnZSI7IGV4aXQgJD87OworCisgICAgLW0pIG1vZGU9JDIKKwljYXNlICRtb2RlIGluCisJICAqJyAnKiB8IConCScqIHwgKicKKycqCSAgfCAqJyonKiB8IConPycqIHwgKidbJyopCisJICAgIGVjaG8gIiQwOiBpbnZhbGlkIG1vZGU6ICRtb2RlIiA+JjIKKwkgICAgZXhpdCAxOzsKKwllc2FjCisJc2hpZnQ7OworCisgICAgLW8pIGNob3duY21kPSIkY2hvd25wcm9nICQyIgorCXNoaWZ0OzsKKworICAgIC1zKSBzdHJpcGNtZD0kc3RyaXBwcm9nOzsKKworICAgIC10KSBkc3RfYXJnPSQyCisJc2hpZnQ7OworCisgICAgLVQpIG5vX3RhcmdldF9kaXJlY3Rvcnk9dHJ1ZTs7CisKKyAgICAtLXZlcnNpb24pIGVjaG8gIiQwICRzY3JpcHR2ZXJzaW9uIjsgZXhpdCAkPzs7CisKKyAgICAtLSkJc2hpZnQKKwlicmVhazs7CisKKyAgICAtKikJZWNobyAiJDA6IGludmFsaWQgb3B0aW9uOiAkMSIgPiYyCisJZXhpdCAxOzsKKworICAgICopICBicmVhazs7CisgIGVzYWMKKyAgc2hpZnQKIGRvbmUKKworaWYgdGVzdCAkIyAtbmUgMCAmJiB0ZXN0IC16ICIkZGlyX2FyZyRkc3RfYXJnIjsgdGhlbgorICAjIFdoZW4gLWQgaXMgdXNlZCwgYWxsIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIGRpcmVjdG9yaWVzIHRvIGNyZWF0ZS4KKyAgIyBXaGVuIC10IGlzIHVzZWQsIHRoZSBkZXN0aW5hdGlvbiBpcyBhbHJlYWR5IHNwZWNpZmllZC4KKyAgIyBPdGhlcndpc2UsIHRoZSBsYXN0IGFyZ3VtZW50IGlzIHRoZSBkZXN0aW5hdGlvbi4gIFJlbW92ZSBpdCBmcm9tICRALgorICBmb3IgYXJnCisgIGRvCisgICAgaWYgdGVzdCAtbiAiJGRzdF9hcmciOyB0aGVuCisgICAgICAjICRAIGlzIG5vdCBlbXB0eTogaXQgY29udGFpbnMgYXQgbGVhc3QgJGFyZy4KKyAgICAgIHNldCBmbm9yZCAiJEAiICIkZHN0X2FyZyIKKyAgICAgIHNoaWZ0ICMgZm5vcmQKKyAgICBmaQorICAgIHNoaWZ0ICMgYXJnCisgICAgZHN0X2FyZz0kYXJnCisgIGRvbmUKIGZpCiAKLWlmIFsgeCIkZGlyX2FyZyIgIT0geCBdCi10aGVuCi0JJGRvaXQgJGluc3RjbWQgJGRzdCAmJgoraWYgdGVzdCAkIyAtZXEgMDsgdGhlbgorICBpZiB0ZXN0IC16ICIkZGlyX2FyZyI7IHRoZW4KKyAgICBlY2hvICIkMDogbm8gaW5wdXQgZmlsZSBzcGVjaWZpZWQuIiA+JjIKKyAgICBleGl0IDEKKyAgZmkKKyAgIyBJdCdzIE9LIHRvIGNhbGwgYGluc3RhbGwtc2ggLWQnIHdpdGhvdXQgYXJndW1lbnQuCisgICMgVGhpcyBjYW4gaGFwcGVuIHdoZW4gY3JlYXRpbmcgY29uZGl0aW9uYWwgZGlyZWN0b3JpZXMuCisgIGV4aXQgMAorZmkKIAotCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkgJiYKLQlpZiBbIHgiJGNoZ3JwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJGNoZ3JwY21kICRkc3Q7IGVsc2UgdHJ1ZSA7IGZpICYmCi0JaWYgWyB4IiRzdHJpcGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRzdHJpcGNtZCAkZHN0OyBlbHNlIHRydWUgOyBmaSAmJgotCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdDsgZWxzZSB0cnVlIDsgZmkKLWVsc2UKK2lmIHRlc3QgLXogIiRkaXJfYXJnIjsgdGhlbgorICBkb19leGl0PScoZXhpdCAkcmV0KTsgZXhpdCAkcmV0JworICB0cmFwICJyZXQ9MTI5OyAkZG9fZXhpdCIgMQorICB0cmFwICJyZXQ9MTMwOyAkZG9fZXhpdCIgMgorICB0cmFwICJyZXQ9MTQxOyAkZG9fZXhpdCIgMTMKKyAgdHJhcCAicmV0PTE0MzsgJGRvX2V4aXQiIDE1CiAKLSMgSWYgd2UncmUgZ29pbmcgdG8gcmVuYW1lIHRoZSBmaW5hbCBleGVjdXRhYmxlLCBkZXRlcm1pbmUgdGhlIG5hbWUgbm93LgorICAjIFNldCB1bWFzayBzbyBhcyBub3QgdG8gY3JlYXRlIHRlbXBzIHdpdGggdG9vLWdlbmVyb3VzIG1vZGVzLgorICAjIEhvd2V2ZXIsICdzdHJpcCcgcmVxdWlyZXMgYm90aCByZWFkIGFuZCB3cml0ZSBhY2Nlc3MgdG8gdGVtcHMuCisgIGNhc2UgJG1vZGUgaW4KKyAgICAjIE9wdGltaXplIGNvbW1vbiBjYXNlcy4KKyAgICAqNjQ0KSBjcF91bWFzaz0xMzM7OworICAgICo3NTUpIGNwX3VtYXNrPTIyOzsKIAotCWlmIFsgeCIkdHJhbnNmb3JtYXJnIiA9IHggXSAKLQl0aGVuCi0JCWRzdGZpbGU9YGJhc2VuYW1lICRkc3RgCisgICAgKlswLTddKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9JyUgMjAwJworICAgICAgZmkKKyAgICAgIGNwX3VtYXNrPWBleHByICcoJyA3NzcgLSAkbW9kZSAlIDEwMDAgJyknICR1X3BsdXNfcndgOzsKKyAgICAqKQorICAgICAgaWYgdGVzdCAteiAiJHN0cmlwY21kIjsgdGhlbgorCXVfcGx1c19ydz0KKyAgICAgIGVsc2UKKwl1X3BsdXNfcnc9LHUrcncKKyAgICAgIGZpCisgICAgICBjcF91bWFzaz0kbW9kZSR1X3BsdXNfcnc7OworICBlc2FjCitmaQorCitmb3Igc3JjCitkbworICAjIFByb3RlY3QgbmFtZXMgc3RhcnRpbmcgd2l0aCBgLScuCisgIGNhc2UgJHNyYyBpbgorICAgIC0qKSBzcmM9Li8kc3JjOzsKKyAgZXNhYworCisgIGlmIHRlc3QgLW4gIiRkaXJfYXJnIjsgdGhlbgorICAgIGRzdD0kc3JjCisgICAgZHN0ZGlyPSRkc3QKKyAgICB0ZXN0IC1kICIkZHN0ZGlyIgorICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgZWxzZQorCisgICAgIyBXYWl0aW5nIGZvciB0aGlzIHRvIGJlIGRldGVjdGVkIGJ5IHRoZSAiJGNwcHJvZyAkc3JjICRkc3R0bXAiIGNvbW1hbmQKKyAgICAjIG1pZ2h0IGNhdXNlIGRpcmVjdG9yaWVzIHRvIGJlIGNyZWF0ZWQsIHdoaWNoIHdvdWxkIGJlIGVzcGVjaWFsbHkgYmFkCisgICAgIyBpZiAkc3JjIChhbmQgdGh1cyAkZHN0dG1wKSBjb250YWlucyAnKicuCisgICAgaWYgdGVzdCAhIC1mICIkc3JjIiAmJiB0ZXN0ICEgLWQgIiRzcmMiOyB0aGVuCisgICAgICBlY2hvICIkMDogJHNyYyBkb2VzIG5vdCBleGlzdC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGlmIHRlc3QgLXogIiRkc3RfYXJnIjsgdGhlbgorICAgICAgZWNobyAiJDA6IG5vIGRlc3RpbmF0aW9uIHNwZWNpZmllZC4iID4mMgorICAgICAgZXhpdCAxCisgICAgZmkKKworICAgIGRzdD0kZHN0X2FyZworICAgICMgUHJvdGVjdCBuYW1lcyBzdGFydGluZyB3aXRoIGAtJy4KKyAgICBjYXNlICRkc3QgaW4KKyAgICAgIC0qKSBkc3Q9Li8kZHN0OzsKKyAgICBlc2FjCisKKyAgICAjIElmIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LCBhcHBlbmQgdGhlIGlucHV0IGZpbGVuYW1lOyB3b24ndCB3b3JrCisgICAgIyBpZiBkb3VibGUgc2xhc2hlcyBhcmVuJ3QgaWdub3JlZC4KKyAgICBpZiB0ZXN0IC1kICIkZHN0IjsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJG5vX3RhcmdldF9kaXJlY3RvcnkiOyB0aGVuCisJZWNobyAiJDA6ICRkc3RfYXJnOiBJcyBhIGRpcmVjdG9yeSIgPiYyCisJZXhpdCAxCisgICAgICBmaQorICAgICAgZHN0ZGlyPSRkc3QKKyAgICAgIGRzdD0kZHN0ZGlyL2BiYXNlbmFtZSAiJHNyYyJgCisgICAgICBkc3RkaXJfc3RhdHVzPTAKKyAgICBlbHNlCisgICAgICAjIFByZWZlciBkaXJuYW1lLCBidXQgZmFsbCBiYWNrIG9uIGEgc3Vic3RpdHV0ZSBpZiBkaXJuYW1lIGZhaWxzLgorICAgICAgZHN0ZGlyPWAKKwkoZGlybmFtZSAiJGRzdCIpIDI+L2Rldi9udWxsIHx8CisJZXhwciBYIiRkc3QiIDogJ1hcKC4qW14vXVwpLy8qW14vXVteL10qLyokJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXClbXi9dJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC8vXCkkJyBcfCBcCisJICAgICBYIiRkc3QiIDogJ1hcKC9cKScgXHwgLiAyPi9kZXYvbnVsbCB8fAorCWVjaG8gWCIkZHN0IiB8CisJICAgIHNlZCAnL15YXCguKlteL11cKVwvXC8qW14vXVteL10qXC8qJC97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKVteL10uKi97CisJCSAgIHMvL1wxLworCQkgICBxCisJCSB9CisJCSAvXlhcKFwvXC9cKSQveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgL15YXChcL1wpLioveworCQkgICBzLy9cMS8KKwkJICAgcQorCQkgfQorCQkgcy8uKi8uLzsgcScKKyAgICAgIGAKKworICAgICAgdGVzdCAtZCAiJGRzdGRpciIKKyAgICAgIGRzdGRpcl9zdGF0dXM9JD8KKyAgICBmaQorICBmaQorCisgIG9ic29sZXRlX21rZGlyX3VzZWQ9ZmFsc2UKKworICBpZiB0ZXN0ICRkc3RkaXJfc3RhdHVzICE9IDA7IHRoZW4KKyAgICBjYXNlICRwb3NpeF9ta2RpciBpbgorICAgICAgJycpCisJIyBDcmVhdGUgaW50ZXJtZWRpYXRlIGRpcnMgdXNpbmcgbW9kZSA3NTUgYXMgbW9kaWZpZWQgYnkgdGhlIHVtYXNrLgorCSMgVGhpcyBpcyBsaWtlIEZyZWVCU0QgJ2luc3RhbGwnIGFzIG9mIDE5OTctMTAtMjguCisJdW1hc2s9YHVtYXNrYAorCWNhc2UgJHN0cmlwY21kLiR1bWFzayBpbgorCSAgIyBPcHRpbWl6ZSBjb21tb24gY2FzZXMuCisJICAqWzIzNjddWzIzNjddKSBta2Rpcl91bWFzaz0kdW1hc2s7OworCSAgLiowWzAyXVswMl0gfCAuWzAyXVswMl0gfCAuWzAyXSkgbWtkaXJfdW1hc2s9MjI7OworCisJICAqWzAtN10pCisJICAgIG1rZGlyX3VtYXNrPWBleHByICR1bWFzayArIDIyIFwKKwkgICAgICAtICR1bWFzayAlIDEwMCAlIDQwICsgJHVtYXNrICUgMjAgXAorCSAgICAgIC0gJHVtYXNrICUgMTAgJSA0ICsgJHVtYXNrICUgMgorCSAgICBgOzsKKwkgICopIG1rZGlyX3VtYXNrPSR1bWFzayxnby13OzsKKwllc2FjCisKKwkjIFdpdGggLWQsIGNyZWF0ZSB0aGUgbmV3IGRpcmVjdG9yeSB3aXRoIHRoZSB1c2VyLXNwZWNpZmllZCBtb2RlLgorCSMgT3RoZXJ3aXNlLCByZWx5IG9uICRta2Rpcl91bWFzay4KKwlpZiB0ZXN0IC1uICIkZGlyX2FyZyI7IHRoZW4KKwkgIG1rZGlyX21vZGU9LW0kbW9kZQogCWVsc2UKLQkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdCAkdHJhbnNmb3JtYmFzZW5hbWUgfCAKLQkJCXNlZCAkdHJhbnNmb3JtYXJnYCR0cmFuc2Zvcm1iYXNlbmFtZQorCSAgbWtkaXJfbW9kZT0KIAlmaQogCi0jIGRvbid0IGFsbG93IHRoZSBzZWQgY29tbWFuZCB0byBjb21wbGV0ZWx5IGVsaW1pbmF0ZSB0aGUgZmlsZW5hbWUKKwlwb3NpeF9ta2Rpcj1mYWxzZQorCWNhc2UgJHVtYXNrIGluCisJICAqWzEyMzU2N11bMC03XVswLTddKQorCSAgICAjIFBPU0lYIG1rZGlyIC1wIHNldHMgdSt3eCBiaXRzIHJlZ2FyZGxlc3Mgb2YgdW1hc2ssIHdoaWNoCisJICAgICMgaXMgaW5jb21wYXRpYmxlIHdpdGggRnJlZUJTRCAnaW5zdGFsbCcgd2hlbiAodW1hc2sgJiAzMDApICE9IDAuCisJICAgIDs7CisJICAqKQorCSAgICB0bXBkaXI9JHtUTVBESVItL3RtcH0vaW5zJFJBTkRPTS0kJAorCSAgICB0cmFwICdyZXQ9JD87IHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIiAyPi9kZXYvbnVsbDsgZXhpdCAkcmV0JyAwCiAKLQlpZiBbIHgiJGRzdGZpbGUiID0geCBdIAotCXRoZW4KLQkJZHN0ZmlsZT1gYmFzZW5hbWUgJGRzdGAKKwkgICAgaWYgKHVtYXNrICRta2Rpcl91bWFzayAmJgorCQlleGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiR0bXBkaXIvZCIpID4vZGV2L251bGwgMj4mMQorCSAgICB0aGVuCisJICAgICAgaWYgdGVzdCAteiAiJGRpcl9hcmciIHx8IHsKKwkJICAgIyBDaGVjayBmb3IgUE9TSVggaW5jb21wYXRpYmlsaXRpZXMgd2l0aCAtbS4KKwkJICAgIyBIUC1VWCAxMS4yMyBhbmQgSVJJWCA2LjUgbWtkaXIgLW0gLXAgc2V0cyBncm91cC0gb3IKKwkJICAgIyBvdGhlci13cml0ZWFibGUgYml0IG9mIHBhcmVudCBkaXJlY3Rvcnkgd2hlbiBpdCBzaG91bGRuJ3QuCisJCSAgICMgRnJlZUJTRCA2LjEgbWtkaXIgLW0gLXAgc2V0cyBtb2RlIG9mIGV4aXN0aW5nIGRpcmVjdG9yeS4KKwkJICAgbHNfbGRfdG1wZGlyPWBscyAtbGQgIiR0bXBkaXIiYAorCQkgICBjYXNlICRsc19sZF90bXBkaXIgaW4KKwkJICAgICBkPz8/Py0/ci0qKSBkaWZmZXJlbnRfbW9kZT03MDA7OworCQkgICAgIGQ/Pz8/LT8tLSopIGRpZmZlcmVudF9tb2RlPTc1NTs7CisJCSAgICAgKikgZmFsc2U7OworCQkgICBlc2FjICYmCisJCSAgICRta2RpcnByb2cgLW0kZGlmZmVyZW50X21vZGUgLXAgLS0gIiR0bXBkaXIiICYmIHsKKwkJICAgICBsc19sZF90bXBkaXJfMT1gbHMgLWxkICIkdG1wZGlyImAKKwkJICAgICB0ZXN0ICIkbHNfbGRfdG1wZGlyIiA9ICIkbHNfbGRfdG1wZGlyXzEiCisJCSAgIH0KKwkJIH0KKwkgICAgICB0aGVuIHBvc2l4X21rZGlyPToKKwkgICAgICBmaQorCSAgICAgIHJtZGlyICIkdG1wZGlyL2QiICIkdG1wZGlyIgorCSAgICBlbHNlCisJICAgICAgIyBSZW1vdmUgYW55IGRpcnMgbGVmdCBiZWhpbmQgYnkgYW5jaWVudCBta2RpciBpbXBsZW1lbnRhdGlvbnMuCisJICAgICAgcm1kaXIgLi8kbWtkaXJfbW9kZSAuLy1wIC4vLS0gMj4vZGV2L251bGwKKwkgICAgZmkKKwkgICAgdHJhcCAnJyAwOzsKKwllc2FjOzsKKyAgICBlc2FjCisKKyAgICBpZgorICAgICAgJHBvc2l4X21rZGlyICYmICgKKwl1bWFzayAkbWtkaXJfdW1hc2sgJiYKKwkkZG9pdF9leGVjICRta2RpcnByb2cgJG1rZGlyX21vZGUgLXAgLS0gIiRkc3RkaXIiCisgICAgICApCisgICAgdGhlbiA6CisgICAgZWxzZQorCisgICAgICAjIFRoZSB1bWFzayBpcyByaWRpY3Vsb3VzLCBvciBta2RpciBkb2VzIG5vdCBjb25mb3JtIHRvIFBPU0lYLAorICAgICAgIyBvciBpdCBmYWlsZWQgcG9zc2libHkgZHVlIHRvIGEgcmFjZSBjb25kaXRpb24uICBDcmVhdGUgdGhlCisgICAgICAjIGRpcmVjdG9yeSB0aGUgc2xvdyB3YXksIHN0ZXAgYnkgc3RlcCwgY2hlY2tpbmcgZm9yIHJhY2VzIGFzIHdlIGdvLgorCisgICAgICBjYXNlICRkc3RkaXIgaW4KKwkvKikgcHJlZml4PScvJzs7CisJLSopIHByZWZpeD0nLi8nOzsKKwkqKSAgcHJlZml4PScnOzsKKyAgICAgIGVzYWMKKworICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIKKworICAgICAgb0lGUz0kSUZTCisgICAgICBJRlM9LworICAgICAgJHBvc2l4X2dsb2Igc2V0IC1mCisgICAgICBzZXQgZm5vcmQgJGRzdGRpcgorICAgICAgc2hpZnQKKyAgICAgICRwb3NpeF9nbG9iIHNldCArZgorICAgICAgSUZTPSRvSUZTCisKKyAgICAgIHByZWZpeGVzPQorCisgICAgICBmb3IgZAorICAgICAgZG8KKwl0ZXN0IC16ICIkZCIgJiYgY29udGludWUKKworCXByZWZpeD0kcHJlZml4JGQKKwlpZiB0ZXN0IC1kICIkcHJlZml4IjsgdGhlbgorCSAgcHJlZml4ZXM9CiAJZWxzZQotCQl0cnVlCisJICBpZiAkcG9zaXhfbWtkaXI7IHRoZW4KKwkgICAgKHVtYXNrPSRta2Rpcl91bWFzayAmJgorCSAgICAgJGRvaXRfZXhlYyAkbWtkaXJwcm9nICRta2Rpcl9tb2RlIC1wIC0tICIkZHN0ZGlyIikgJiYgYnJlYWsKKwkgICAgIyBEb24ndCBmYWlsIGlmIHR3byBpbnN0YW5jZXMgYXJlIHJ1bm5pbmcgY29uY3VycmVudGx5LgorCSAgICB0ZXN0IC1kICIkcHJlZml4IiB8fCBleGl0IDEKKwkgIGVsc2UKKwkgICAgY2FzZSAkcHJlZml4IGluCisJICAgICAgKlwnKikgcXByZWZpeD1gZWNobyAiJHByZWZpeCIgfCBzZWQgInMvJy8nXFxcXFxcXFwnJy9nImA7OworCSAgICAgICopIHFwcmVmaXg9JHByZWZpeDs7CisJICAgIGVzYWMKKwkgICAgcHJlZml4ZXM9IiRwcmVmaXhlcyAnJHFwcmVmaXgnIgorCSAgZmkKIAlmaQorCXByZWZpeD0kcHJlZml4LworICAgICAgZG9uZQogCi0jIE1ha2UgYSB0ZW1wIGZpbGUgbmFtZSBpbiB0aGUgcHJvcGVyIGRpcmVjdG9yeS4KKyAgICAgIGlmIHRlc3QgLW4gIiRwcmVmaXhlcyI7IHRoZW4KKwkjIERvbid0IGZhaWwgaWYgdHdvIGluc3RhbmNlcyBhcmUgcnVubmluZyBjb25jdXJyZW50bHkuCisJKHVtYXNrICRta2Rpcl91bWFzayAmJgorCSBldmFsICJcJGRvaXRfZXhlYyBcJG1rZGlycHJvZyAkcHJlZml4ZXMiKSB8fAorCSAgdGVzdCAtZCAiJGRzdGRpciIgfHwgZXhpdCAxCisJb2Jzb2xldGVfbWtkaXJfdXNlZD10cnVlCisgICAgICBmaQorICAgIGZpCisgIGZpCiAKLQlkc3R0bXA9JGRzdGRpci8jaW5zdC4kJCMKKyAgaWYgdGVzdCAtbiAiJGRpcl9hcmciOyB0aGVuCisgICAgeyB0ZXN0IC16ICIkY2hvd25jbWQiIHx8ICRkb2l0ICRjaG93bmNtZCAiJGRzdCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaGdycGNtZCIgfHwgJGRvaXQgJGNoZ3JwY21kICIkZHN0IjsgfSAmJgorICAgIHsgdGVzdCAiJG9ic29sZXRlX21rZGlyX3VzZWQkY2hvd25jbWQkY2hncnBjbWQiID0gZmFsc2UgfHwKKyAgICAgIHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0IjsgfSB8fCBleGl0IDEKKyAgZWxzZQogCi0jIE1vdmUgb3IgY29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUKKyAgICAjIE1ha2UgYSBjb3VwbGUgb2YgdGVtcCBmaWxlIG5hbWVzIGluIHRoZSBwcm9wZXIgZGlyZWN0b3J5LgorICAgIGRzdHRtcD0kZHN0ZGlyL19pbnN0LiQkXworICAgIHJtdG1wPSRkc3RkaXIvX3JtLiQkXwogCi0JJGRvaXQgJGluc3RjbWQgJHNyYyAkZHN0dG1wICYmCisgICAgIyBUcmFwIHRvIGNsZWFuIHVwIHRob3NlIHRlbXAgZmlsZXMgYXQgZXhpdC4KKyAgICB0cmFwICdyZXQ9JD87IHJtIC1mICIkZHN0dG1wIiAiJHJtdG1wIiAmJiBleGl0ICRyZXQnIDAKIAotCXRyYXAgInJtIC1mICR7ZHN0dG1wfSIgMCAmJgorICAgICMgQ29weSB0aGUgZmlsZSBuYW1lIHRvIHRoZSB0ZW1wIG5hbWUuCisgICAgKHVtYXNrICRjcF91bWFzayAmJiAkZG9pdF9leGVjICRjcHByb2cgIiRzcmMiICIkZHN0dG1wIikgJiYKIAotIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzCisgICAgIyBhbmQgc2V0IGFueSBvcHRpb25zOyBkbyBjaG1vZCBsYXN0IHRvIHByZXNlcnZlIHNldHVpZCBiaXRzLgorICAgICMKKyAgICAjIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCisgICAgIyBpZ25vcmUgZXJyb3JzIGZyb20gYW55IG9mIHRoZXNlLCBqdXN0IG1ha2Ugc3VyZSBub3QgdG8gaWdub3JlCisgICAgIyBlcnJvcnMgZnJvbSB0aGUgYWJvdmUgIiRkb2l0ICRjcHByb2cgJHNyYyAkZHN0dG1wIiBjb21tYW5kLgorICAgICMKKyAgICB7IHRlc3QgLXogIiRjaG93bmNtZCIgfHwgJGRvaXQgJGNob3duY21kICIkZHN0dG1wIjsgfSAmJgorICAgIHsgdGVzdCAteiAiJGNoZ3JwY21kIiB8fCAkZG9pdCAkY2hncnBjbWQgIiRkc3R0bXAiOyB9ICYmCisgICAgeyB0ZXN0IC16ICIkc3RyaXBjbWQiIHx8ICRkb2l0ICRzdHJpcGNtZCAiJGRzdHRtcCI7IH0gJiYKKyAgICB7IHRlc3QgLXogIiRjaG1vZGNtZCIgfHwgJGRvaXQgJGNobW9kY21kICRtb2RlICIkZHN0dG1wIjsgfSAmJgogCi0jIElmIGFueSBvZiB0aGVzZSBmYWlsLCB3ZSBhYm9ydCB0aGUgd2hvbGUgdGhpbmcuICBJZiB3ZSB3YW50IHRvCi0jIGlnbm9yZSBlcnJvcnMgZnJvbSBhbnkgb2YgdGhlc2UsIGp1c3QgbWFrZSBzdXJlIG5vdCB0byBpZ25vcmUKLSMgZXJyb3JzIGZyb20gdGhlIGFib3ZlICIkZG9pdCAkaW5zdGNtZCAkc3JjICRkc3R0bXAiIGNvbW1hbmQuCisgICAgIyBJZiAtQywgZG9uJ3QgYm90aGVyIHRvIGNvcHkgaWYgaXQgd291bGRuJ3QgY2hhbmdlIHRoZSBmaWxlLgorICAgIGlmICRjb3B5X29uX2NoYW5nZSAmJgorICAgICAgIG9sZD1gTENfQUxMPUMgbHMgLWRsTCAiJGRzdCIJMj4vZGV2L251bGxgICYmCisgICAgICAgbmV3PWBMQ19BTEw9QyBscyAtZGxMICIkZHN0dG1wIgkyPi9kZXYvbnVsbGAgJiYKIAotCWlmIFsgeCIkY2hvd25jbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2hvd25jbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCi0JaWYgWyB4IiRjaGdycGNtZCIgIT0geCBdOyB0aGVuICRkb2l0ICRjaGdycGNtZCAkZHN0dG1wOyBlbHNlIHRydWU7ZmkgJiYKLQlpZiBbIHgiJHN0cmlwY21kIiAhPSB4IF07IHRoZW4gJGRvaXQgJHN0cmlwY21kICRkc3R0bXA7IGVsc2UgdHJ1ZTtmaSAmJgotCWlmIFsgeCIkY2htb2RjbWQiICE9IHggXTsgdGhlbiAkZG9pdCAkY2htb2RjbWQgJGRzdHRtcDsgZWxzZSB0cnVlO2ZpICYmCisgICAgICAgZXZhbCAiJGluaXRpYWxpemVfcG9zaXhfZ2xvYiIgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgLWYgJiYKKyAgICAgICBzZXQgWCAkb2xkICYmIG9sZD06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICBzZXQgWCAkbmV3ICYmIG5ldz06JDI6JDQ6JDU6JDYgJiYKKyAgICAgICAkcG9zaXhfZ2xvYiBzZXQgK2YgJiYKIAotIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorICAgICAgIHRlc3QgIiRvbGQiID0gIiRuZXciICYmCisgICAgICAgJGNtcHByb2cgIiRkc3QiICIkZHN0dG1wIiA+L2Rldi9udWxsIDI+JjEKKyAgICB0aGVuCisgICAgICBybSAtZiAiJGRzdHRtcCIKKyAgICBlbHNlCisgICAgICAjIFJlbmFtZSB0aGUgZmlsZSB0byB0aGUgcmVhbCBkZXN0aW5hdGlvbi4KKyAgICAgICRkb2l0ICRtdmNtZCAtZiAiJGRzdHRtcCIgIiRkc3QiIDI+L2Rldi9udWxsIHx8CiAKLQkkZG9pdCAkcm1jbWQgLWYgJGRzdGRpci8kZHN0ZmlsZSAmJgotCSRkb2l0ICRtdmNtZCAkZHN0dG1wICRkc3RkaXIvJGRzdGZpbGUgCisgICAgICAjIFRoZSByZW5hbWUgZmFpbGVkLCBwZXJoYXBzIGJlY2F1c2UgbXYgY2FuJ3QgcmVuYW1lIHNvbWV0aGluZyBlbHNlCisgICAgICAjIHRvIGl0c2VsZiwgb3IgcGVyaGFwcyBiZWNhdXNlIG12IGlzIHNvIGFuY2llbnQgdGhhdCBpdCBkb2VzIG5vdAorICAgICAgIyBzdXBwb3J0IC1mLgorICAgICAgeworCSMgTm93IHJlbW92ZSBvciBtb3ZlIGFzaWRlIGFueSBvbGQgZmlsZSBhdCBkZXN0aW5hdGlvbiBsb2NhdGlvbi4KKwkjIFdlIHRyeSB0aGlzIHR3byB3YXlzIHNpbmNlIHJtIGNhbid0IHVubGluayBpdHNlbGYgb24gc29tZQorCSMgc3lzdGVtcyBhbmQgdGhlIGRlc3RpbmF0aW9uIGZpbGUgbWlnaHQgYmUgYnVzeSBmb3Igb3RoZXIKKwkjIHJlYXNvbnMuICBJbiB0aGlzIGNhc2UsIHRoZSBmaW5hbCBjbGVhbnVwIG1pZ2h0IGZhaWwgYnV0IHRoZSBuZXcKKwkjIGZpbGUgc2hvdWxkIHN0aWxsIGluc3RhbGwgc3VjY2Vzc2Z1bGx5LgorCXsKKwkgIHRlc3QgISAtZiAiJGRzdCIgfHwKKwkgICRkb2l0ICRybWNtZCAtZiAiJGRzdCIgMj4vZGV2L251bGwgfHwKKwkgIHsgJGRvaXQgJG12Y21kIC1mICIkZHN0IiAiJHJtdG1wIiAyPi9kZXYvbnVsbCAmJgorCSAgICB7ICRkb2l0ICRybWNtZCAtZiAiJHJtdG1wIiAyPi9kZXYvbnVsbDsgOjsgfQorCSAgfSB8fAorCSAgeyBlY2hvICIkMDogY2Fubm90IHVubGluayBvciByZW5hbWUgJGRzdCIgPiYyCisJICAgIChleGl0IDEpOyBleGl0IDEKKwkgIH0KKwl9ICYmCiAKLWZpICYmCisJIyBOb3cgcmVuYW1lIHRoZSBmaWxlIHRvIHRoZSByZWFsIGRlc3RpbmF0aW9uLgorCSRkb2l0ICRtdmNtZCAiJGRzdHRtcCIgIiRkc3QiCisgICAgICB9CisgICAgZmkgfHwgZXhpdCAxCiAKKyAgICB0cmFwICcnIDAKKyAgZmkKK2RvbmUKIAotZXhpdCAwCisjIExvY2FsIHZhcmlhYmxlczoKKyMgZXZhbDogKGFkZC1ob29rICd3cml0ZS1maWxlLWhvb2tzICd0aW1lLXN0YW1wKQorIyB0aW1lLXN0YW1wLXN0YXJ0OiAic2NyaXB0dmVyc2lvbj0iCisjIHRpbWUtc3RhbXAtZm9ybWF0OiAiJTp5LSUwMm0tJTAyZC4lMDJIIgorIyB0aW1lLXN0YW1wLXRpbWUtem9uZTogIlVUQyIKKyMgdGltZS1zdGFtcC1lbmQ6ICI7ICMgVVRDIgorIyBFbmQ6CmRpZmYgLS1naXQgYS9sb2NhbC9NYWtlZmlsZS5pbiBiL2xvY2FsL01ha2VmaWxlLmluCmluZGV4IDgyM2I2NmMuLmNiODRhZmMgMTAwNjQ0Ci0tLSBhL2xvY2FsL01ha2VmaWxlLmluCisrKyBiL2xvY2FsL01ha2VmaWxlLmluCkBAIC0xNiwxMCArMTYsMTEgQEAKICMKIFNOTVBDT05GUEFUSD1AU05NUENPTkZQQVRIQAogUEVSU0lTVEVOVF9ESVJFQ1RPUlk9QFBFUlNJU1RFTlRfRElSRUNUT1JZQAotUEVSTFNDUklQVFM9c25tcGNoZWNrIHRrbWliIG1pYjJjIGZpeHByb2MgaXBmLW1vZC5wbCBzbm1wY29uZiB0cmFwdG9lbWFpbAorUEVSTFNDUklQVFM9c25tcGNoZWNrIHRrbWliIG1pYjJjIGZpeHByb2MgaXBmLW1vZC5wbCBzbm1wY29uZiB0cmFwdG9lbWFpbCBzbm1wLWJyaWRnZS1taWIgbmV0LXNubXAtY2VydAogU0hFTExTQ1JJUFRTPW1pYjJjLXVwZGF0ZQogU0NSSVBUU01BREVGT1JQRVJMPXNubXBjaGVjay5tYWRlIHRrbWliLm1hZGUgbWliMmMubWFkZSBmaXhwcm9jLm1hZGUgXAotCWlwZi1tb2QucGwubWFkZSBzbm1wY29uZi5tYWRlIHRyYXB0b2VtYWlsLm1hZGUKKwlpcGYtbW9kLnBsLm1hZGUgc25tcGNvbmYubWFkZSB0cmFwdG9lbWFpbC5tYWRlIHNubXAtYnJpZGdlLW1pYi5tYWRlIFwKKwluZXQtc25tcC1jZXJ0Lm1hZGUKIERBVEFTUkNTPW1pYjJjLmNvbmYgbWliMmMuaXRlcmF0ZS5jb25mIG1pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYgXAogCW1pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYgbWliMmMubWZkLmNvbmYgXAogCW1pYjJjLmFycmF5LXVzZXIuY29uZiBtaWIyYy5jb2x1bW5fZW51bXMuY29uZiBcCkBAIC0yOCw3ICsyOSw4IEBACiAJbWliMmMuY2hlY2tfdmFsdWVzLmNvbmYgbWliMmMuY2hlY2tfdmFsdWVzX2xvY2FsLmNvbmYgXAogCW1pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZiBtaWIyYy5ub3RpZnkuY29uZiBcCiAJbWliMmMuaW50X3dhdGNoLmNvbmYgbWliMmMuZ2VuaHRtbC5jb25mIFwKLQltaWIyYy50YWJsZV9kYXRhLmNvbmYgbWliMmMuY29udGFpbmVyLmNvbmYgbWliMmMucGVybC5jb25mCisJbWliMmMucmF3LXRhYmxlLmNvbmYgbWliMmMudGFibGVfZGF0YS5jb25mIFwKKwltaWIyYy5jb250YWluZXIuY29uZiBtaWIyYy5wZXJsLmNvbmYKIE1JQjJDSU5TVEFMTERJUj0kKHNubXBsaWJkaXIpL21pYjJjLWRhdGEKIE1JQjJDREFUQVNSQz1taWIyYy1jb25mLmQKIE1JQjJDRklMRVM9ZGVmYXVsdC1tZmQtdG9wLm0yYyBkZXRhaWxzLWVudW1zLm0yaSBkZXRhaWxzLW5vZGUubTJpIFwKQEAgLTEwNiw2ICsxMDgsMTMgQEAKIAkgIHRvdWNoIG1pYjJjLm1hZGU7IFwKICAgICAgICAgZmkKIAorbmV0LXNubXAtY2VydC5tYWRlOiAkKHNyY2RpcikvbmV0LXNubXAtY2VydAorCWlmIHRlc3QgIngkKFBFUkwpIiAhPSAieCIgOyB0aGVuIFwKKwkgICQoUEVSTCkgLXAgLWUgJ3MlXiMhLiovcGVybC4qJSMhJChQRVJMKSU7cyMvdXNyL2xvY2FsL3NoYXJlL3NubXAjJChzbm1wbGliZGlyKSM7JyAke3NyY2Rpcn0vbmV0LXNubXAtY2VydCA+IG5ldC1zbm1wLWNlcnQubWFkZTsgXAorCWVsc2UgXAorCSAgdG91Y2ggbmV0LXNubXAtY2VydC5tYWRlOyBcCisgICAgICAgIGZpCisKIAogaXBmLW1vZC5wbC5tYWRlOiAkKHNyY2RpcikvaXBmLW1vZC5wbAogCWlmIHRlc3QgIngkKFBFUkwpIiAhPSAieCIgOyB0aGVuIFwKQEAgLTEyMSw5ICsxMzAsOSBAQAogCSAgdG91Y2ggZml4cHJvYy5tYWRlOyBcCiAgICAgICAgIGZpCiAKLXNubXBjb25mLm1hZGU6ICQoc3JjZGlyKS9zbm1wY29uZgorc25tcGNvbmYubWFkZTogc25tcGNvbmYKIAlpZiB0ZXN0ICJ4JChQRVJMKSIgIT0gIngiIDsgdGhlbiBcCi0JICAkKFBFUkwpIC1wIC1lICdzJV4jIS4qL3BlcmwuKiUjISQoUEVSTCklOyBzIy91c3IvbG9jYWwvc2hhcmUjJChkYXRhZGlyKSNnOyBzIy91c3IvbG9jYWwvZXRjL3NubXAjJChTTk1QQ09ORlBBVEgpI2c7IHMjL3Zhci9uZXQtc25tcCMkKFBFUlNJU1RFTlRfRElSRUNUT1JZKSNnJyAke3NyY2Rpcn0vc25tcGNvbmYgPiBzbm1wY29uZi5tYWRlOyBcCisJICAkKFBFUkwpIC1wIC1lICdzJV4jIS4qL3BlcmwuKiUjISQoUEVSTCklOyBzIy91c3IvbG9jYWwvc2hhcmUjJChkYXRhZGlyKSNnOyBzIy91c3IvbG9jYWwvZXRjL3NubXAjJChTTk1QQ09ORlBBVEgpI2c7IHMjL3Zhci9uZXQtc25tcCMkKFBFUlNJU1RFTlRfRElSRUNUT1JZKSNnJyBzbm1wY29uZiA+IHNubXBjb25mLm1hZGU7IFwKIAllbHNlIFwKIAkgIHRvdWNoIHNubXBjb25mLm1hZGU7IFwKICAgICAgICAgZmkKQEAgLTEzNSw2ICsxNDQsMTMgQEAKIAkgIHRvdWNoIHRyYXB0b2VtYWlsLm1hZGU7IFwKICAgICAgICAgZmkKIAorc25tcC1icmlkZ2UtbWliLm1hZGU6ICQoc3JjZGlyKS9zbm1wLWJyaWRnZS1taWIKKwlpZiB0ZXN0ICJ4JChQRVJMKSIgIT0gIngiIDsgdGhlbiBcCisJICAkKFBFUkwpIC1wIC1lICdzJV4jIS4qL3BlcmwuKiUjISQoUEVSTCklJyAke3NyY2Rpcn0vc25tcC1icmlkZ2UtbWliID4gc25tcC1icmlkZ2UtbWliLm1hZGU7IFwKKwllbHNlIFwKKwkgIHRvdWNoIHNubXAtYnJpZGdlLW1pYi5tYWRlOyBcCisgICAgICAgIGZpCisKIGxvY2FsaW5zdGFsbDogJChTQ1JJUFRTTUFERUZPUlBFUkwpCiAJQGlmIHRlc3QgIngkKFBFUkwpIiAhPSAieCIgOyB0aGVuIFwKIAkgIGZvciBpIGluICQoUEVSTFNDUklQVFMpIDsgZG8gJChJTlNUQUxMKSAkJGkubWFkZSAkKElOU1RBTExfUFJFRklYKSQoYmluZGlyKS8kJGkgOyBlY2hvICJpbnN0YWxsOiAgaW5zdGFsbGVkICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQoYmluZGlyKSIgOyBkb25lIDsgXApkaWZmIC0tZ2l0IGEvbG9jYWwvVmVyc2lvbi1NdW5nZS5wbCBiL2xvY2FsL1ZlcnNpb24tTXVuZ2UucGwKaW5kZXggZmRlNTkzOS4uN2Y2ZjI5YyAxMDA3NTUKLS0tIGEvbG9jYWwvVmVyc2lvbi1NdW5nZS5wbAorKysgYi9sb2NhbC9WZXJzaW9uLU11bmdlLnBsCkBAIC0zMywxMiArMzMsNiBAQAogfQogCiBteSBAZXhwcnMgPSAoCi0JICAgICAjIGMgZmlsZXMgd2l0aCBhIGVxdWFsIHNpZ24gYW5kIGEgc3BlY2lmaWMgdmFyaWFibGUKLQkgICAgIHsgdHlwZSA9PiAnYycsCi0JICAgICAgIGV4cHIgPT4gJ1ZlcnNpb25JbmZvKFxzKj1ccypbXiJdKikiKC4qKSInLAotCSAgICAgICByZXBsID0+ICdWZXJzaW9uSW5mbyQxIiRWRVJTSU9OIicsIAotCSAgICAgICBmaWxlcyA9PiBbcXcoc25tcGxpYi9zbm1wX3ZlcnNpb24uYyldfSwKLQogCSAgICAgIyBkb2N1bWVudGF0aW9uIGZpbGVzCiAJICAgICB7IHR5cGUgPT4gJ2RvY3MnLAogCSAgICAgICBleHByID0+ICdWZXJzaW9uOiBbXC4wLTlhLXpBLVpdKycsCkBAIC00NywxMiArNDEsNiBAQAogCSAgICAgICBub3RfcmVxdWlyZWQgPT4geydkaXN0L25ldC1zbm1wLnNwZWMnID0+IDF9CiAJICAgICB9LAogCi0JICAgICAjIHNlZCBmaWxlcwotCSAgICAgeyB0eXBlID0+ICdzZWQnLAotCSAgICAgICBleHByID0+ICdec1wvVkVSU0lPTklORk9cL1teXC9dKicsCi0JICAgICAgIHJlcGwgPT4gJ3NcL1ZFUlNJT05JTkZPXC8kVkVSU0lPTicsCi0JICAgICAgIGZpbGVzID0+IFtxdyhzZWRzY3JpcHQuaW4pXX0sCi0KIAkgICAgICMgTWFrZWZpbGVzCiAJICAgICB7IHR5cGUgPT4gJ01ha2VmaWxlJywKIAkgICAgICAgZXhwciA9PiAnVkVSU0lPTiA9IFtcLjAtOWEtekEtWl0rJywKQEAgLTYxLDEzICs0OSw2IEBACiAJICAgICAgIG5vdF9yZXF1aXJlZCA9PiB7J2Rpc3QvTWFrZWZpbGUnID0+IDF9CiAJICAgICB9LAogCi0JICAgICAjIERveHlnZW4gY29uZmlnCi0JICAgICB7IHR5cGUgPT4gJ2RveHlnZW4nLAotCSAgICAgICBleHByID0+ICdQUk9KRUNUX05VTUJFUihccyspPShccyspXCcoLiopXCcnLAotCSAgICAgICByZXBsID0+ICdQUk9KRUNUX05VTUJFUiQxPSQyXCckVkVSU0lPTlwnJywKLQkgICAgICAgZmlsZXMgPT4gW3F3KGRveHlnZW4uY29uZildCi0JICAgICB9LAotCiAJICAgICAjIHBlcmwgZmlsZXMKIAkgICAgIHsgdHlwZSA9PiAncGVybCcsCiAJICAgICAgIGV4cHIgPT4gJ1ZFUlNJT04gPSBcJyguKilcJycsCkBAIC05MCwxNyArNzEsMTEgQEAKIAkgICAgIHsgdHlwZSA9PiAnY29uZmlndXJlJywKIAkgICAgICAgZXhwciA9PiAnQUNfSU5JVFxcKFxcW05ldC1TTk1QXFxdLCBcXFsoW15cXF1dKylcXF0nLAogCSAgICAgICByZXBsID0+ICdBQ19JTklUKFtOZXQtU05NUF0sIFskVkVSU0lPTl0nLAotCSAgICAgICBmaWxlcyA9PiBbcXcoY29uZmlndXJlLmluKV0sCisJICAgICAgIGZpbGVzID0+IFtxdyhjb25maWd1cmUuYWMpXSwKIAkgICAgICAgZXhlYyA9PiAnYXV0b2NvbmYnLAogCSAgICAgICBleGZpbGVzID0+IFtxdyhjb25maWd1cmUpXSwKIAkgICAgIH0sCiAKLQkgICAgICMgY29uZmlndXJlIHNjcmlwdCBmaWxlcwotCSAgICAgeyB0eXBlID0+ICdkb3h5Z2VuJywKLQkgICAgICAgZXhwciA9PiAnUFJPSkVDVF9OVU1CRVJccyo9ICguKiknLAotCSAgICAgICByZXBsID0+ICdQUk9KRUNUX05VTUJFUiAgICAgICAgID0gJFZFUlNJT04nLAotCSAgICAgICBmaWxlcyA9PiBbcXcoZG94eWdlbi5jb25mKV0sCi0JICAgICB9LAogCSAgICApOwogCiAjCmRpZmYgLS1naXQgYS9sb2NhbC9jZXJ0Z2VuLXRlc3QucGwgYi9sb2NhbC9jZXJ0Z2VuLXRlc3QucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjMzNTQyOAotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL2NlcnRnZW4tdGVzdC5wbApAQCAtMCwwICsxLDY2IEBACisjIS91c3IvYmluL3BlcmwKKworc3lzdGVtKCJybSAtcmYgL3RtcC8uc25tcDEiKTsKK3N5c3RlbSgicm0gLXJmIC90bXAvLnNubXAyIik7CisKK3N5c3RlbSgiY3AgbmV0LXNubXAtY2VydCB+L2JpbiIpOworCiskc3RyID0gIlxuZ2VuY2EgKGluIC1DIC90bXAvLnNubXAxKSA6IGNhLXNubXBcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jYSAtSSAtQyAvdG1wLy5zbm1wMSAtLWNuIGNhLXNubXAgLS1lbWFpbCBjYVxAY2EuY29tIC0taG9zdCBob3N0LmEuYi5jb20gIC0tc2FuIEROUzpjYS5hLmIuY29tIC0tc2FuIEVNQUlMOmNhXEBjYS5jb20iKTsKKworcHJpbnQgIlxudXNpbmcgLUMgL3RtcC8uc25tcDIgZm9yIGFsbCBmb2xsb3dpbmcgdGVzdHNcbiI7Ciskc3RyID0gIlxuZ2VuY2E6IGNhLXNubXBcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jYSAtSSAtQyAvdG1wLy5zbm1wMiAtLWNuIGNhLXNubXAgLS1lbWFpbCBjYVxAY2EuY29tIC0taG9zdCBob3N0LmEuYi5jb20gIC0tc2FuIEROUzpjYS5hLmIuY29tIC0tc2FuIEVNQUlMOmNhXEBjYS5jb20iKTsKKworJHN0ciA9ICJcbmdlbmNhOiBjYS1zbm1wLTIgKHNpZ25lZCB3LyBjYS1zbm1wKVxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IGdlbmNhIC1JIC1DIC90bXAvLnNubXAyIC0td2l0aC1jYSBjYS1zbm1wIC0tY24gY2Etc25tcC0yIC0tZW1haWwgY2EyXEBjYS5jb20gLS1ob3N0IGhvc3QyLmEuYi5jb20gIC0tc2FuIEROUzpjYTIuYS5iLmNvbSAtLXNhbiBFTUFJTDpjYTJcQGNhLmNvbSIpOworCiskc3RyID0gIlxuZ2VuY3NyOiBzbm1wYXBwXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY3NyIC1JIC1DIC90bXAvLnNubXAyIC10IHNubXBhcHAgLS1jbiAnYWRtaW4nIC0tZW1haWwgYWRtaW5AbmV0LXNubXAub3JnIC0taG9zdCBhZG1pbi1ob3N0Lm5ldC1zbm1wLm9yZyAgLS1zYW4gRU1BSUw6YVxAYi5jb20gLS1zYW4gSVA6MS4yLjMuNCAtLXNhbiBETlM6YWRtaW4uYS5iLm9yZyIpOworCiskc3RyID0gIlxuc2lnbmNzcjogc25tcGFwcCB3L2NhLXNubXBcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoImRpZWQ6ICRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBzaWduY3NyIC1JIC1DIC90bXAvLnNubXAyIC0td2l0aC1jYSBjYS1zbm1wIC0tY3NyIHNubXBhcHAgIC0taW5zdGFsbCIpOworCiskc3RyID0gIlxuc2lnbmNzcjogc25tcGFwcCB3L2NhLXNubXAtMlxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IHNpZ25jc3IgLUkgLUMgL3RtcC8uc25tcDIgLS13aXRoLWNhIGNhLXNubXAtMiAtLWNzciBzbm1wYXBwIC0tc2FuIEVNQUlMOm5vaW5zdGFsbFxAYi5jb20gLS1zYW4gSVA6NS42LjcuOCIpOworCiskc3RyID0gIlxuZ2VuY2VydDogc25tcHRyYXBkIChzZWxmLXNpZ25lZClcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jZXJ0IC1JIC1DIC90bXAvLnNubXAyIC10IHNubXB0cmFwZCAtLWNuICdOT0MnIC0tZW1haWwgJ25vY1xAbmV0LXNubXAub3JnJyAtLWhvc3Qgbm9jLWhvc3QubmV0LXNubXAub3JnICAtLXNhbiBETlM6bm9jLmEuYi5vcmcgLS1zYW4gJ0VNQUlMOm5vY1xAbmV0LXNubXAub3JnJyIpOworCiskc3RyID0gIlxuZ2VuY2VydDogc25tcGQgKHNpZ25lZCB3LyBjYS1zbm1wLTIpXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtSSAtQyAvdG1wLy5zbm1wMiAtdCBzbm1wZCAtLXdpdGgtY2EgY2Etc25tcC0yIC0tZW1haWwgc25tcGRcQG5ldC1zbm1wLm9yZyAtLWhvc3Qgc25tcGQtaG9zdC5uZXQtc25tcC5vcmcgIC0tc2FuIEROUzpzbm1wZC5hLmIub3JnIC0tc2FuIEVNQUlMOnNubXBkXEBuZXQtc25tcC5vcmciKTsKKworc3lzdGVtKCJjcCBuZXQtc25tcC1jZXJ0LmNvbmYgL3RtcC8uc25tcDIiKTsKKworJHN0ciA9ICJcbmdlbmNhIChpbiAtQyAvdG1wLy5zbm1wMiAtaSBDQS1pZGVudGl0eSlcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCBnZW5jYSAtSSAtQyAvdG1wLy5zbm1wMiAtaSBDQS1pZGVudGl0eSIpOworCiskc3RyID0gIlxuZ2VuY2VydCAoaW4gLUMgL3RtcC8uc25tcDIgLWkgbm9jYWRtIC10IHNubXAtaWRlbnRpdHkpXG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgZ2VuY2VydCAtSSAtQyAvdG1wLy5zbm1wMiAtdCBzbm1wLWlkZW50aXR5IC1pIG5vY2FkbSAtLXdpdGgtY2EgQ0EtaWRlbnRpdHkiKTsKKworCiskc3RyID0gIlxuc2hvdyBDQXNcblxuIjsKK3ByaW50KCIkc3RyIik7CitkaWUoIiRzdHJcbiIpIGlmIHN5c3RlbSgibmV0LXNubXAtY2VydCAtQyAvdG1wLy5zbm1wMiBzaG93Y2EgLS1pc3N1ZXIgLS1zdWJqZWN0Iik7CisKKyRzdHIgPSAic2hvdyBDZXJ0c1xuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IC1DIC90bXAvLnNubXAyIHNob3djZXJ0IC0taXNzdWVyIC0tc3ViamVjdCIpOworCiskc3RyID0gInNob3cgQ0FzIGZpbmdlcnByaW50XG5cbiI7CitwcmludCgiJHN0ciIpOworZGllKCIkc3RyXG4iKSBpZiBzeXN0ZW0oIm5ldC1zbm1wLWNlcnQgLUMgL3RtcC8uc25tcDIgc2hvd2NhIC0tZmluZ2VycHJpbnQgLS1icmllZiIpOworCiskc3RyID0gIlxuc2hvdyBDZXJ0cyBmaW5nZXJwcmludFxuXG4iOworcHJpbnQoIiRzdHIiKTsKK2RpZSgiJHN0clxuIikgaWYgc3lzdGVtKCJuZXQtc25tcC1jZXJ0IC1DIC90bXAvLnNubXAyIHNob3djZXJ0IC0tZmluZ2VycHJpbnQgLS1icmllZiIpOwpkaWZmIC0tZ2l0IGEvbG9jYWwvaHRtbC1hZGQtaGVhZGVyLWZvb3Rlci5wbCBiL2xvY2FsL2h0bWwtYWRkLWhlYWRlci1mb290ZXIucGwKaW5kZXggOTZlNDZhNS4uYzNjYjkwMiAxMDA3NTUKLS0tIGEvbG9jYWwvaHRtbC1hZGQtaGVhZGVyLWZvb3Rlci5wbAorKysgYi9sb2NhbC9odG1sLWFkZC1oZWFkZXItZm9vdGVyLnBsCkBAIC0yMSw3ICsyMSw3IEBACiB1c2UgRmlsZTo6c3RhdDsKIHVzZSBHZXRvcHQ6Okxvbmc7CiAKLW15ICR0aWR5X29wdGlvbnMgPSAnLWYgL2Rldi9udWxsIC1tIC1pIC1hc3hodG1sIC13cmFwIDEzMCAtcXVpZXQnOworbXkgJHRpZHlfb3B0aW9ucyA9ICctZiAvZGV2L251bGwgLW0gLWkgLWFzeGh0bWwgLXdyYXAgMTMwIC1xdWlldCAtLXF1b3RlLW5ic3Agbic7CiAKIG15ICRwYXR0ZXJuID0gJyc7CiBteSAkc2VjdGlvbiA9ICcnOwpkaWZmIC0tZ2l0IGEvbG9jYWwvaHRtbC10ZXh0ZmlsZS1maXgucGwgYi9sb2NhbC9odG1sLXRleHRmaWxlLWZpeC5wbAppbmRleCBmOTQxMTk3Li5iNzIwNzViIDEwMDc1NQotLS0gYS9sb2NhbC9odG1sLXRleHRmaWxlLWZpeC5wbAorKysgYi9sb2NhbC9odG1sLXRleHRmaWxlLWZpeC5wbApAQCAtOCw2ICs4LDcgQEAKICMgRGF0ZTogICAgICAgICAgIERlY2VtYmVyIDI5dGgsIDIwMDUKICMgCiBAZmlsZXMgPSBxdyIKK0NIQU5HRVMKIEVSUkFUQQogSU5TVEFMTAogTkVXUwpAQCAtMTcsNiArMTgsNyBAQAogUkVBRE1FLmFnZW50eAogUkVBRE1FLmFpeAogUkVBRE1FLmhwdXgxMQorUkVBRE1FLmlyaXgKIFJFQURNRS5rcmI1CiBSRUFETUUubWliMmMKIFJFQURNRS5taWJzCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYyBiL2xvY2FsL21pYjJjCmluZGV4IDVmYTVjYzkuLjIwMTZmMDYgMTAwNzU1Ci0tLSBhL2xvY2FsL21pYjJjCisrKyBiL2xvY2FsL21pYjJjCkBAIC01MSw2ICs1MSw3IEBACiAkcXVpZXQ9MDsKICRzdHJpY3RfdW5rX3Rva2VuID0gMDsKICRub2luZGVudCA9IDA7Ciskbm9zZWQgPSAwOwogJGN1cnJlbnRsaW5lID0gMDsKICRjdXJyZW50bGV2ZWwgPSAtMTsKICVhc3NpZ25tZW50czsKQEAgLTczLDYgKzc0LDcgQEAKICAgICBwcmludCAiICAtZFx0XHRkZWJ1Z2dpbmcgb3V0cHV0IChkb24ndCBkbyBpdC4gIHRydXN0IG1lLilcblxuIjsKICAgICBwcmludCAiICAtUyBWQVI9VkFMXHRTZXQgXCRWQVIgdmFyaWFibGUgdG8gXCRWQUxcblxuIjsKICAgICBwcmludCAiICAtaVx0XHREb24ndCBydW4gaW5kZW50IG9uIHRoZSByZXN1bHRpbmcgY29kZVxuXG4iOworICAgIHByaW50ICIgIC1zXHRcdERvbid0IGxvb2sgZm9yIG1pYk5vZGUuc2VkIGFuZCBydW4gc2VkIG9uIHRoZSByZXN1bHRpbmcgY29kZVxuXG4iOwogICAgIHByaW50ICIgIG1pYk5vZGVcdFRoZSBuYW1lIG9mIHRoZSB0b3AgbGV2ZWwgbWliIG5vZGUgeW91IHdhbnQgdG9cblx0XHRnZW5lcmF0ZSBjb2RlIGZvci4gIEJ5IGRlZmF1bHQsIHRoZSBjb2RlIHdpbGwgYmUgc3RvcmVkIGluXG5cdFx0bWliTm9kZS5jIGFuZCBtaWJOb2RlLmggKHVzZSB0aGUgLWYgZmxhZyB0byBjaGFuZ2UgdGhpcylcblxuIjsKICAgICAxOwogfQkKQEAgLTk5LDYgKzEwMSw4IEBACiAgICAgICAgICRxdWlldCA9IDE7CiAgICAgICB9IGVsc2lmICgvXi1pLykgewogICAgICAgICAkbm9pbmRlbnQgPSAxOworICAgICAgfSBlbHNpZiAoL14tcy8pIHsKKyAgICAgICAgJG5vc2VkID0gMTsKICAgICAgIH0gZWxzaWYgKC9eLWgvKSB7CiAgICAgICAgIHVzYWdlICYmIGV4aXQoMSk7CiAgICAgICB9IGVsc2lmICgvXi1mLykgewpAQCAtMjMxLDYgKzIzNSwxNSBAQAogcHJvY2VzcygiLWJhbGFuY2VkIik7CiAkZmgtPmNsb3NlOwogCitpZiAoLWYgIiRvdXRwdXROYW1lLnNlZCIgJiYgISRub3NlZCkgeworICBmb3JlYWNoICRpIChrZXlzKCV3cml0dGVuKSkgeworICAgIG5leHQgaWYgKCRpIGVxICItIik7CisgICAgbmV4dCBpZiAoISgkaSA9fiAvXC5bY2hdJC8pKTsKKyAgICBwcmludCBTVERFUlIgInJ1bm5pbmcgc2VkIC0taW4tcGxhY2U9Lm9yaWcgLS1maWxlPSRvdXRwdXROYW1lLnNlZCAkaVxuIiBpZiAoISRxdWlldCk7CisgICAgc3lzdGVtKCJzZWQgLS1pbi1wbGFjZT0ub3JpZyAtLWZpbGU9JG91dHB1dE5hbWUuc2VkICRpIik7CisgIH0KK30KKwogaWYgKCEkbm9pbmRlbnQpIHsKICAgZm9yZWFjaCAkaSAoa2V5cygld3JpdHRlbikpIHsKICAgICBuZXh0IGlmICgkaSBlcSAiLSIpOwpAQCAtMjkwLDkgKzMwMywxMSBAQAogIyAgICR2YXIuY3JlYXRhYmxlICAgICAtLSAxIGlmIGEgY29sdW1uIG9iamVjdCBjYW4gYmUgY3JlYXRlZCBhcyBwYXJ0IG9mIGEgbmV3IHJvdywgMCBpZiBub3QKICMgICAkdmFyLm5vYWNjZXNzICAgICAgLS0gMSBpZiBub3QtYWNjZXNzaWJsZSwgMCBpZiBub3QKICMgICAkdmFyLmFjY2Vzc2libGUgICAgLS0gMSBpZiBhY2Nlc3NpYmxlLCAwIGlmIG5vdAorIyAgICR2YXIuc3RvcmFnZXR5cGUgICAtLSAxIGlmIGFuIG9iamVjdCBpcyBhIFN0b3JhZ2VUeXBlIG9iamVjdCwgMCBpZiBub3QKICMgICAkdmFyLnJvd3N0YXR1cyAgICAgLS0gMSBpZiBhbiBvYmplY3QgaXMgYSBSb3dTdGF0dXMgb2JqZWN0LCAwIGlmIG5vdAotIyAgICAgJ3NldHRhYmxlJywgJ2NyZWF0YWJsZScgYW5kICdyb3dzdGF0dXMnIGNhbiBhbHNvIGJlIHVzZWQgd2l0aCB0YWJsZSB2YXJpYWJsZXMKLSMgICAgIHRvIGluZGljYXRlIHdoZXRoZXIgaXQgY29udGFpbnMgd3JpdGFibGUsIGNyZWF0YWJsZSBvciBSb3dTdGF0dXMgY29sdW1uIG9iamVjdHMKKyMgICAgICdzZXR0YWJsZScsICdjcmVhdGFibGUnLCAnbGFzdGNoYW5nZScsICdzdG9yYWdldHlwZScgYW5kICdyb3dzdGF0dXMnIGNhbgorIyAgICAgYWxzbyBiZSB1c2VkIHdpdGggdGFibGUgdmFyaWFibGVzIHRvIGluZGljYXRlIHdoZXRoZXIgaXQgY29udGFpbnMKKyMgICAgIHdyaXRhYmxlLCBjcmVhdGFibGUsIExhc3RDaGFuZ2UsIFN0b3JhZ2VUeXBlIG9yIFJvd1N0YXR1cyBjb2x1bW4gb2JqZWN0cwogIwogIyAgICR2YXIuaGFzZGVmdmFsICAgICAtLSByZXR1cm5zIDEgaWYgdmFyIGhhcyBhIERFRlZBTCBjbGF1c2UKICMgICAkdmFyLmRlZnZhbCAgICAgICAgLS0gbm9kZSdzIERFRlZBTApAQCAtMzQ3LDYgKzM2Miw3IEBACiAgICAgJGl0ID1+IHMvXCQoXHcrKVwuKGVudW1zKS8oJXskU05NUDo6TUlCeyR2YXJzeyQxfX17J2VudW1zJ319ID09IDApID8gMCA6IDEvZWc7CiAgICAgJGl0ID1+IHMvXCQoXHcrKVwuKGVudW1yYW5nZSkvJXskU05NUDo6TUlCeyR2YXJzeyQxfX17J2VudW1zJ319L2VnOwogICAgICRpdCA9fiBzL1wkKFx3KylcLihyb3dzdGF0dXMpLygoJFNOTVA6Ok1JQnskdmFyc3skMX19e3N5bnRheH0gPX4gXC8oUm93U3RhdHVzKVwvKT8xOjApL2VnOworICAgICRpdCA9fiBzL1wkKFx3KylcLihzdG9yYWdldHlwZSkvKCgkU05NUDo6TUlCeyR2YXJzeyQxfX17c3ludGF4fSA9fiBcLyhTdG9yYWdlVHlwZSlcLyk/MTowKS9lZzsKICAgICBpZiAoICRpdCA9fiAvXCQoXHcrKVwuKFx3KykvICkgewogICAgICAgd2FybiAiUG9zc2libGUgdW5rbm93biB2YXJpYWJsZSBhdHRyaWJ1dGUgXCQkMS4kMiBhdCAkY3VycmVudGZpbGU6JGN1cnJlbnRsaW5lXG4iOwogICAgIH0KZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmkgYi9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy1zb3VyY2UtaW5jbHVkZXMubTJpCmluZGV4IGIyYjQyNWUuLjkzNDFjZjkgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmkKKysrIGIvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtc291cmNlLWluY2x1ZGVzLm0yaQpAQCAtMTAsNiArMTAsNyBAQAogIyMKIC8qIHN0YW5kYXJkIE5ldC1TTk1QIGluY2x1ZGVzICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaSBiL2xvY2FsL21pYjJjLWNvbmYuZC9nZW5lcmljLXRhYmxlLWluZGV4ZXMtdG8tb2lkLm0yaQppbmRleCBiMmFhMDc3Li5jMTdkZTRjIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy1jb25mLmQvZ2VuZXJpYy10YWJsZS1pbmRleGVzLXRvLW9pZC5tMmkKKysrIGIvbG9jYWwvbWliMmMtY29uZi5kL2dlbmVyaWMtdGFibGUtaW5kZXhlcy10by1vaWQubTJpCkBAIC0yNCwxMSArMjQsMTAgQEAKIEAgICAgICAgIGluY2x1ZGUgbTJjX3NldHVwX25vZGUubTJpQAogICAgICAgICAvKiAkbTJjX25vZGVfc3VtbWFyeSAqLwogQCAgICAgICAgaWYgJG0yY19ub2RlX25lZWRsZW5ndGggPT0gMUAKLSAgICBzbm1wX3NldF92YXJfdmFsdWUoJnZhcl8kbm9kZSwgKHVfY2hhciopJm1pYl9pZHgtPiRub2RlLAorICAgIHNubXBfc2V0X3Zhcl92YWx1ZSgmdmFyXyRub2RlLCAmbWliX2lkeC0+JG5vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgIG1pYl9pZHgtPiR7bm9kZX1fbGVuICogc2l6ZW9mKG1pYl9pZHgtPiR7bm9kZX1bMF0pKTsKIEAgICAgICAgIGVsc2VACi0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfJG5vZGUsICh1X2NoYXIqKSZtaWJfaWR4LT4kbm9kZSwKLSAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG1pYl9pZHgtPiRub2RlKSk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKCZ2YXJfJG5vZGUsICZtaWJfaWR4LT4kbm9kZSwgc2l6ZW9mKG1pYl9pZHgtPiRub2RlKSk7CiBAICAgICAgICBlbmRACiAKIEAgICAgZW5kQCAjIGZvciBlYWNoIGNvbHVtbgpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjIGIvbG9jYWwvbWliMmMtY29uZi5kL21mZC1pbnRlcmZhY2UubTJjCmluZGV4IDdlY2EzMDguLmQ2NjZjOWEgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtaW50ZXJmYWNlLm0yYworKysgYi9sb2NhbC9taWIyYy1jb25mLmQvbWZkLWludGVyZmFjZS5tMmMKQEAgLTExOCw2ICsxMTgsMTAgQEAKIAogI2luY2x1ZGUgIiR7bmFtZX1faW50ZXJmYWNlLmgiCiAKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhYnlfc3RlcHMpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShyb3dfbWVyZ2UpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjaGVja19hbGxfcmVxdWVzdHNfZXJyb3IpCisKICNpbmNsdWRlIDxjdHlwZS5oPgogCiBAZXZhbCAkbTJjX3Byb2Nlc3NpbmdfdHlwZSA9ICdpJ0AKQEAgLTIxNSwxNCArMjE5LDcgQEAKIHN0YXRpYyBOZXRzbm1wX05vZGVfSGFuZGxlciBfbWZkXyR7Y29udGV4dH1fY2hlY2tfZGVwZW5kZW5jaWVzOwogQCAgICAgIGVuZEAKIAotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludCBfJHtjb250ZXh0fV91bmRvX2NvbHVtbiggJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCBjb2x1bW4gKTsKLQogQCAgIGVuZEAgIyB3cml0YWJsZQotQGlmICgkbTJjX3RhYmxlX3BlcnNpc3RlbnQgPT0gMSkgfHwgKCRtMmNfdGFibGVfcm93X2NyZWF0aW9uID09IDEpQAotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludCBfJHtjb250ZXh0fV9jaGVja19pbmRleGVzKCR7Y29udGV4dH1fcm93cmVxX2N0eCAqIHJvd3JlcV9jdHgpOwotCi1AZW5kQAogQCAgIGlmICgiJG0yY19kYXRhX2NvbnRleHQiIGVxICJnZW5lcmF0ZWQiKSAmJiAoKCRtMmNfdW5kb19lbWJlZCA9PSAwKSB8fCAoJG0yY19kYXRhX2FsbG9jYXRlID09IDEpKUAKICR7Y29udGV4dH1fZGF0YSAqJHtjb250ZXh0fV9hbGxvY2F0ZV9kYXRhKHZvaWQpOwogCkBAIC0yNTksNyArMjU2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7CiAKICAgICAvKiAgRGVmaW5lIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGFjY2Vzc2libGUgY29sdW1ucy4gIFRoaXMKLSAgICAgICAgb3B0aW1pemVzIHJldHJpdmFsLiAqLworICAgICAgICBvcHRpbWl6ZXMgcmV0cmlldmFsLiAqLwogICAgIHRibF9pbmZvLT5taW5fY29sdW1uID0gJGNvbnRleHQudWNfTUlOX0NPTDsKICAgICB0YmxfaW5mby0+bWF4X2NvbHVtbiA9ICRjb250ZXh0LnVjX01BWF9DT0w7CiAKQEAgLTMzNSw3ICszMzIsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2NvbnRleHR9X29pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb250ZXh0fV9vaWRfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSEFORExFUl9DQU5fQkFCWV9TVEVQIHwKLSNpZmRlZiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKKyNpZiAhKGRlZmluZWQoTkVUU05NUF9OT19XUklURV9TVVBQT1JUKSB8fCBkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZCiAjZWxzZQogQGlmICRtMmNfdGFibGVfc2V0dGFibGUgPT0gMUAKQEAgLTM0Myw3ICszNDAsNyBAQAogQGVsc2VACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZCiBAZW5kQAotI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCB8fCBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKTsKICAgICBpZihOVUxMID09IHJlZ2luZm8pIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgcmVnaXN0ZXJpbmcgdGFibGUgJHtjb250ZXh0fVxuIik7CkBAIC0zNjIsNyArMzU5LDcgQEAKICAgICBpZiggYWNjZXNzX211bHRpcGxleGVyLT5wb3N0X3JlcXVlc3QgKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1BPU1RfUkVRVUVTVDsKICAgICAKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCisjaWYgIShkZWZpbmVkKE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCkgfHwgZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQpKQogICAgIGlmKCBhY2Nlc3NfbXVsdGlwbGV4ZXItPnNldF92YWx1ZXMgKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1NFVF9WQUxVRVM7CiAgICAgaWYoIGFjY2Vzc19tdWx0aXBsZXhlci0+aXJyZXZlcnNpYmxlX2NvbW1pdCApCkBAIC0zODUsNyArMzgyLDcgQEAKICAgICAgICAgbWZkX21vZGVzIHw9IEJBQllfU1RFUF9DT01NSVQ7CiAgICAgaWYoIGFjY2Vzc19tdWx0aXBsZXhlci0+dW5kb19jb21taXQgKQogICAgICAgICBtZmRfbW9kZXMgfD0gQkFCWV9TVEVQX1VORE9fQ09NTUlUOwotI2VuZGlmCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUIHx8IE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVCAqLwogICAgIAogICAgIGhhbmRsZXIgPSBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQobWZkX21vZGVzKTsKICAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZ2luZm8sIGhhbmRsZXIpOwpAQCAtNjEyLDcgKzYwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50IHJjLCBwYWNrZXRfcmM7CiAKQEAgLTY2MSw2ICs2NTgsNTEgQEAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMKIEBpZiAoJG0yY190YWJsZV9yb3dfY3JlYXRpb24gPT0gMSkgfHwgKCRtMmNfdGFibGVfcGVyc2lzdGVudCA9PSAxKUAKK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK18ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMoJHtjb250ZXh0fV9yb3dyZXFfY3R4ICogcm93cmVxX2N0eCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gU05NUEVSUl9TVUNDRVNTOworCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06XyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcyIsImNhbGxlZFxuIikpOworCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSByb3dyZXFfY3R4KTsKKworIyMKK0BpZiAkbTJjX3RhYmxlX2V4dGVybmFsX2luZGV4ZXMgIT0gMEAKKyAgICAvKgorICAgICAqIGNoZWNrIHRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgRVhURVJOQUwgcm93IGV4aXN0cworICAgICAqLworQCAgIGZvcmVhY2ggJG5vZGUgZXh0ZXJuYWxpbmRleEAKK0AgICAgICBpbmNsdWRlIG0yY19zZXR1cF9ub2RlLm0yaUAKKworICAgIC8qIChJTkRFWCkgJG0yY19ub2RlX3N1bW1hcnkgKi8KKyAgICByYyA9ICR7Y29udGV4dH1fJHtub2RlfV9jaGVja19pbmRleCggcm93cmVxX2N0eCApOworICAgIGlmKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKK0AgICBlbmRAICMgZm9yIGVhY2ggbm9uaW5kZXgKKworQGVuZEAgIyBleHRlcm5hbCBpbmRleAorQCAgIGZvcmVhY2ggJG5vZGUgaW50ZXJuYWxpbmRleEAKK0AgICAgICBpbmNsdWRlIG0yY19zZXR1cF9ub2RlLm0yaUAKKworICAgIC8qIChJTkRFWCkgJG0yY19ub2RlX3N1bW1hcnkgKi8KK0AgICBldmFsICRtMmNfbnZfdmFsID0gInJvd3JlcV9jdHgtPnRibF9pZHguJG5vZGUiQAorQCAgIGV2YWwgJG0yY19udl9sZW4gPSAicm93cmVxX2N0eC0+dGJsX2lkeC4ke25vZGV9X2xlbiJACitAICAgZXZhbCAkbTJjX252X3N0ciA9ICJyb3dyZXFfY3R4LT50YmxfaWR4LiRub2RlIkAKK0AgICBpbmNsdWRlIG5vZGUtdmFsaWRhdGUubTJpQAorICAgICAgIGlmIChNRkRfU1VDQ0VTUyAhPSByYykKKyAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgIHJjID0gJHtub2RlfV9jaGVja19pbmRleCggcm93cmVxX2N0eCApOworICAgICAgIGlmKE1GRF9TVUNDRVNTICE9IHJjKQorICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9DUkVBVElPTjsKK0AgICBlbmRAICMgZm9yIGVhY2ggaW50ZXJuYWxpbmRleAorCisgICAgLyoKKyAgICAgKiBpZiBpbmRpdmlkdWFsIHBhcnRzIGxvb2sgb2ssIGNoZWNrIHRoZW0gYXMgYSB3aG9sZQorICAgICAqLworICAgIHJldHVybiAke2NvbnRleHR9X3ZhbGlkYXRlX2luZGV4KCAke2NvbnRleHR9X2lmX2N0eC51c2VyX2N0eCwgcm93cmVxX2N0eCApOworfSAvKiBfJHtjb250ZXh0fV9jaGVja19pbmRleGVzICovCisjIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8qKgogICogQGludGVybmFsCiAgKiB3cmFwcGVyCkBAIC03NDEsNyArNzgzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYyA9IFNOTVBfRVJSX05PRVJST1I7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICAKICAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfbWZkXyR7Y29udGV4dH1fb2JqZWN0X2xvb2t1cCIsImNhbGxlZFxuIikpOwpAQCAtOTA2LDcgKzk0OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKmFndHJlcV9pbmZvLAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0cykKIHsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICogdHJpOwogICAgIHVfY2hhciAgICAgICAgICAgICAgICAgICAgICogb2xkX3N0cmluZzsKQEAgLTk3NSw1NCArMTAxNyw2IEBACiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9IC8qIF9tZmRfJHtjb250ZXh0fV9nZXRfdmFsdWVzICovCiAKLSMjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotQGlmICgkbTJjX3RhYmxlX3Jvd19jcmVhdGlvbiA9PSAxKSB8fCAoJG0yY190YWJsZV9wZXJzaXN0ZW50ID09IDEpQAotTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludAotXyR7Y29udGV4dH1fY2hlY2tfaW5kZXhlcygke2NvbnRleHR9X3Jvd3JlcV9jdHggKiByb3dyZXFfY3R4KQotewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX1NVQ0NFU1M7Ci0KLSAgICBERUJVR01TR1RMKCgiaW50ZXJuYWw6JHtjb250ZXh0fTpfJHtjb250ZXh0fV9jaGVja19pbmRleGVzIiwiY2FsbGVkXG4iKSk7Ci0KLSAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHJvd3JlcV9jdHgpOwotCi0jIwotQGlmICRtMmNfdGFibGVfZXh0ZXJuYWxfaW5kZXhlcyAhPSAwQAotICAgIC8qCi0gICAgICogY2hlY2sgdGhhdCB0aGUgY29ycmVzcG9uZGluZyBFWFRFUk5BTCByb3cgZXhpc3RzCi0gICAgICovCi1AICAgZm9yZWFjaCAkbm9kZSBleHRlcm5hbGluZGV4QAotQCAgICAgIGluY2x1ZGUgbTJjX3NldHVwX25vZGUubTJpQAotCi0gICAgLyogKElOREVYKSAkbTJjX25vZGVfc3VtbWFyeSAqLwotICAgIHJjID0gJHtjb250ZXh0fV8ke25vZGV9X2NoZWNrX2luZGV4KCByb3dyZXFfY3R4ICk7Ci0gICAgaWYoTUZEX1NVQ0NFU1MgIT0gcmMpCi0gICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwotQCAgIGVuZEAgIyBmb3IgZWFjaCBub25pbmRleAotCi1AZW5kQCAjIGV4dGVybmFsIGluZGV4Ci1AICAgZm9yZWFjaCAkbm9kZSBpbnRlcm5hbGluZGV4QAotQCAgICAgIGluY2x1ZGUgbTJjX3NldHVwX25vZGUubTJpQAotCi0gICAgLyogKElOREVYKSAkbTJjX25vZGVfc3VtbWFyeSAqLwotQCAgIGV2YWwgJG0yY19udl92YWwgPSAicm93cmVxX2N0eC0+dGJsX2lkeC4kbm9kZSJACi1AICAgZXZhbCAkbTJjX252X2xlbiA9ICJyb3dyZXFfY3R4LT50YmxfaWR4LiR7bm9kZX1fbGVuIkAKLUAgICBldmFsICRtMmNfbnZfc3RyID0gInJvd3JlcV9jdHgtPnRibF9pZHguJG5vZGUiQAotQCAgIGluY2x1ZGUgbm9kZS12YWxpZGF0ZS5tMmlACi0gICAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQotICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgcmMgPSAke25vZGV9X2NoZWNrX2luZGV4KCByb3dyZXFfY3R4ICk7Ci0gICAgICAgaWYoTUZEX1NVQ0NFU1MgIT0gcmMpCi0gICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0NSRUFUSU9OOwotQCAgIGVuZEAgIyBmb3IgZWFjaCBpbnRlcm5hbGluZGV4Ci0KLSAgICAvKgotICAgICAqIGlmIGluZGl2aWR1YWwgcGFydHMgbG9vayBvaywgY2hlY2sgdGhlbSBhcyBhIHdob2xlCi0gICAgICovCi0gICAgcmV0dXJuICR7Y29udGV4dH1fdmFsaWRhdGVfaW5kZXgoICR7Y29udGV4dH1faWZfY3R4LnVzZXJfY3R4LCByb3dyZXFfY3R4ICk7Ci19IC8qIF8ke2NvbnRleHR9X2NoZWNrX2luZGV4ZXMgKi8KLUBlbmRAICMgJG0yY190YWJsZV9yb3dfY3JlYXRpb24KLQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIwogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkBAIC0xMTEwLDcgKzExMDQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqIHRyaTsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHJjOwpAQCAtMTE1Nyw3ICsxMTUxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol9tZmRfJHtjb250ZXh0fV9jaGVja19kZXBlbmRlbmNpZXMiLCJjYWxsZWRcbiIpKTsKIApAQCAtMTIyNyw3ICsxMjIxLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06X21mZF8ke2NvbnRleHR9X3VuZG9fc2V0dXAiLCJjYWxsZWRcbiIpKTsKQEAgLTEyOTEsNyArMTI4NSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgaW50IHJjOwogCkBAIC0xMzc5LDcgKzEzNzMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvICphZ3RyZXFfaW5mbywKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKICAgICBuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mbyAqIHRyaTsKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgIHJjID0gU05NUF9FUlJfTk9FUlJPUjsKQEAgLTE0MjUsNyArMTQxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol9tZmRfJHtjb250ZXh0fV9jb21taXQiLCJjYWxsZWRcbiIpKTsKQEAgLTE0NTgsNyArMTQ1Miw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKQogewogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7Ci0gICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0KKyAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPSAoJHtjb250ZXh0fV9yb3dyZXFfY3R4KikKICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19leHRyYWN0KHJlcXVlc3RzKTsKIAogICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2NvbnRleHR9Ol9tZmRfJHtjb250ZXh0fV91bmRvX2NvbW1pdCIsImNhbGxlZFxuIikpOwpAQCAtMTUzOSw3ICsxNTMzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAqcmVxdWVzdHMpCiB7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKLSAgICAke2NvbnRleHR9X3Jvd3JlcV9jdHggKnJvd3JlcV9jdHggPQorICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9ICgke2NvbnRleHR9X3Jvd3JlcV9jdHgqKQogICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2V4dHJhY3QocmVxdWVzdHMpOwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICogdHJpOwogCkBAIC0xNTk2LDcgKzE1OTAsNyBAQAogQCAgIGlmICRtMmNfaXJyZXZlcnNpYmxlX2NvbW1pdCA9PSAxQAogICAgIGludCAgICAgICAgICAgICAgICAgICAgcmM7CiBAICAgZW5kQAotICAgICR7Y29udGV4dH1fcm93cmVxX2N0eCAqcm93cmVxX2N0eCA9CisgICAgJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopCiAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9yb3dfZXh0cmFjdChyZXF1ZXN0cyk7CiAgICAgCiAgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7Y29udGV4dH06X21mZF8ke2NvbnRleHR9X2lycmV2ZXJzaWJsZTpjb21taXQiLCJjYWxsZWRcbiIpKTsKQEAgLTE2NzcsNyArMTY3MSw3IEBACiAgICAgaWYgKE1GRF9TVUNDRVNTICE9IHJjKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIHJvd3JlcV9jdHggPSBDT05UQUlORVJfRklORCgke2NvbnRleHR9X2lmX2N0eC5jb250YWluZXIsICZvaWRfaWR4KTsKKyAgICByb3dyZXFfY3R4ID0gKCR7Y29udGV4dH1fcm93cmVxX2N0eCopQ09OVEFJTkVSX0ZJTkQoJHtjb250ZXh0fV9pZl9jdHguY29udGFpbmVyLCAmb2lkX2lkeCk7CiAKICAgICByZXR1cm4gcm93cmVxX2N0eDsKIH0KZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtcGVyc2lzdGVuY2UubTJpIGIvbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmkKaW5kZXggYzliMTUyZi4uNzc5NmNmMiAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmkKKysrIGIvbG9jYWwvbWliMmMtY29uZi5kL21mZC1wZXJzaXN0ZW5jZS5tMmkKQEAgLTE2Miw3ICsxNjIsNyBAQAogICAgICAqIGJlIHRyZWF0ZWQgYSBsaXR0bGUgZGlmZmVyZW50bHkuIFNwZWNpZmljYWxseSwgeW91IHdpbGwgbmVlZAogICAgICAqICg0ICogbGVuKSArIDQgWzMgQVNDSUkgY2hhcnMgcGVyIGJ5dGUgKyAxIGZvciAuLCArIDQgZm9yIGxlbl0uCiAgICAgICoKLSAgICAgKiAzKSBBbHNvLCByZW1lYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGVyYXRvcgorICAgICAqIDMpIEFsc28sIHJlbWVtYmVyIHRvIGFkZCBzcGFjZSBmb3IgdGhlIGlkZW50aWZpZXIgYW5kIHNlcGFyYXRvcgogICAgICAqIGNoYXJhY3RlcnMgKGZvciBleGFtcGxlLCBlYWNoIGNvbHVtbiBpcyBwcmVmaXhlZCBieSB0aGUKICAgICAgKiBjb2x1bW4gbnVtYmVyIGFuZCBhIHNlbWljb2xvbi4gVG8gYWxsb3cgZm9yIHRoZSBtYXhpbXVtCiAgICAgICogY29sdW1uIHZhbHVlcywgMTIgYnl0ZXMgWzExIGZvciBvaWQgKyAxIGZvciAnOiddIHBlcgpkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMtY29uZi5kL21mZC10b3AubTJjIGIvbG9jYWwvbWliMmMtY29uZi5kL21mZC10b3AubTJjCmluZGV4IDEyY2Y5ZGQuLmRiMGYzOTggMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLWNvbmYuZC9tZmQtdG9wLm0yYworKysgYi9sb2NhbC9taWIyYy1jb25mLmQvbWZkLXRvcC5tMmMKQEAgLTI1Miw4ICsyNTIsOCBAQAogaW50ICR7Y29udGV4dH1fcm93X3JlZl9kZWNyZW1lbnQoJHtjb250ZXh0fV9yb3dyZXFfY3R4ICpyb3dyZXFfY3R4KTsKIAogQCAgIGVuZEAKLWV4dGVybiBvaWQgJHtjb250ZXh0fV9vaWRbXTsKLWV4dGVybiBpbnQgJHtjb250ZXh0fV9vaWRfc2l6ZTsKK2V4dGVybiBjb25zdCBvaWQgJHtjb250ZXh0fV9vaWRbXTsKK2V4dGVybiBjb25zdCBpbnQgJHtjb250ZXh0fV9vaWRfc2l6ZTsKIAogQGVuZEAgIyBmb3IgZWFjaAogCkBAIC0zMDksOCArMzA5LDggQEAKIAogQGZvcmVhY2ggJHRhYmxlIHRhYmxlQAogQCAgICBpbmNsdWRlIG0yY19zZXR1cF90YWJsZS5tMmlACi1vaWQgJHtjb250ZXh0fV9vaWRbXSA9IHsgJGNvbnRleHQudWNfT0lEIH07Ci1pbnQgJHtjb250ZXh0fV9vaWRfc2l6ZSA9IE9JRF9MRU5HVEgoJHtjb250ZXh0fV9vaWQpOworY29uc3Qgb2lkICR7Y29udGV4dH1fb2lkW10gPSB7ICRjb250ZXh0LnVjX09JRCB9OworY29uc3QgaW50ICR7Y29udGV4dH1fb2lkX3NpemUgPSBPSURfTEVOR1RIKCR7Y29udGV4dH1fb2lkKTsKIAogQCAgICBpZiAieCRtMmNfY29udGV4dF9yZWciIG5lICJ4IkAKICAgICAke2NvbnRleHR9X3JlZ2lzdHJhdGlvbiAgJHtjb250ZXh0fV91c2VyX2NvbnRleHQ7CmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjIGIvbG9jYWwvbWliMmMtY29uZi5kL3N1YmFnZW50Lm0yYwppbmRleCA1MmE4MjU4Li42MWZjMjZkIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy1jb25mLmQvc3ViYWdlbnQubTJjCisrKyBiL2xvY2FsL21pYjJjLWNvbmYuZC9zdWJhZ2VudC5tMmMKQEAgLTI3LDYgKzI3LDE4IEBACiBAaW5jbHVkZSBnZW5lcmljLXNvdXJjZS1pbmNsdWRlcy5tMmlACiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAKKy8qCisgKiBJZiBjb21waWxpbmcgd2l0aGluIHRoZSBuZXQtc25tcCBzb3VyY2UgY29kZSwgdGhpcyB3aWxsIHRyaWdnZXIgdGhlIGZlYXR1cmUKKyAqIGRldGVjdGlvbiBtZWNoYW5zaW0gdG8gZW5zdXJlIHRoZSBhZ2VudF9jaGVja19hbmRfcHJvY2VzcygpIGZ1bmN0aW9uCisgKiBpcyBsZWZ0IGF2YWlsYWJsZSBldmVuIGlmIC0tZW5hYmxlLW1pbmltaWFsaXN0IGlzIHR1cm5lZCBvbi4gIElmIHlvdQorICogaGF2ZSBjb25maWd1cmVkIG5ldC1zbm1wIHVzaW5nIC0tZW5hYmxlLW1pbmltaWFsaXN0IGFuZCB3YW50IHRvIGNvbXBpbGUKKyAqIHRoaXMgY29kZSBleHRlcm5hbGx5IHRvIHRoZSBOZXQtU05NUCBjb2RlIGJhc2UsIHRoZW4gcGxlYXNlIGFkZAorICogLS13aXRoLWZlYXR1cmVzPSJhZ2VudF9jaGVja19hbmRfcHJvY2VzcyBlbmFibGVfc3RkZXJybG9nIiB0byB5b3VyCisgKiBjb25maWd1cmUgbGluZS4KKyAqLworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShlbmFibGVfc3RkZXJybG9nKQorCiBzdGF0aWMgaW50IGtlZXBfcnVubmluZzsKIAogc3RhdGljIFJFVFNJR1RZUEUKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLXVwZGF0ZSBiL2xvY2FsL21pYjJjLXVwZGF0ZQppbmRleCA2NjlhNzQ1Li40MjAxN2U1IDEwMDc1NQotLS0gYS9sb2NhbC9taWIyYy11cGRhdGUKKysrIGIvbG9jYWwvbWliMmMtdXBkYXRlCkBAIC0xLDQgKzEsNCBAQAotIyEvYmluL2Jhc2gKKyMhL2Jpbi9zaAogIwogIyAkSWQkCiAjCkBAIC0zOSw3ICszOSw3IEBACiAKIGVycm9yKCkKIHsKLSAgICBlY2hvICJFUlJPUjogJEAiID4gL2Rldi9zdGRlcnIKKyAgICBlY2hvICJFUlJPUjogJEAiID4mMgogfQogCiBkaWUoKQpAQCAtMzA4LDggKzMwOCwxNiBAQAogICAgIC4gJEhPTUUvLm1pYjJjLXVwZGF0ZXJjCiBmaQogCi1pZiBbIC1mIC5taWIyYy11cGRhdGVyYyBdOyB0aGVuCi0gICAgLiAubWliMmMtdXBkYXRlcmMKK2lmIFsgLWYgJFBXRC8ubWliMmMtdXBkYXRlcmMgXTsgdGhlbgorICAgIC4gJFBXRC8ubWliMmMtdXBkYXRlcmMKK2Vsc2UKKyAgIGVjaG8gImNyZWF0aW5nIGV4YW1wbGUgLm1pYjJjLXVkcGF0ZXJjLiBlZGl0IGFzIG5lZWRlZCBhbmQgcmUtcnVuICIKKyAgIGVjaG8gIm1pYjJjLXVwZGF0ZS4iCisgICAKKyAgIGVjaG8gIlVQREFURV9PSUQ9aXBBZGRyZXNzVGFibGUiID4+IC5taWIyYy11cGRhdGVyYworICAgZWNobyAiVVBEQVRFX0NPTkY9bWliMmMubWZkLmNvbmYiID4+IC5taWIyYy11cGRhdGVyYworICAgZWNobyAiVVBEQVRFX01JQjJDX09QVFM9IiA+PiAubWliMmMtdXBkYXRlcmMKKyAgIGVjaG8gIiNVUERBVEVfTk9QUk9CRT0xIiA+PiAubWliMmMtdXBkYXRlcmMKIGZpCiAKIGNoZWNrX3NldHVwCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYgYi9sb2NhbC9taWIyYy5hY2Nlc3NfZnVuY3Rpb25zLmNvbmYKaW5kZXggODMzYTg1Ny4uOWQ1NGYxNCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mCisrKyBiL2xvY2FsL21pYjJjLmFjY2Vzc19mdW5jdGlvbnMuY29uZgpAQCAtNzksNyArNzksNyBAQAogICAgIHZwdHIgPSBwdXRfaW5kZXhfZGF0YTsKICAgICAKICAgICBAZm9yZWFjaCAkaWR4IGluZGV4QAotICAgIHNubXBfc2V0X3Zhcl92YWx1ZSh2cHRyLCAodV9jaGFyICopIC8qKiBYWFg6ICRpZHggZGF0YSAqLywgLyoqIFhYWDogbGVuZ3RoIG9mICRpZHggZGF0YSAqLyk7CisgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsIC8qKiBYWFg6ICRpZHggZGF0YSAqLywgLyoqIFhYWDogbGVuZ3RoIG9mICRpZHggZGF0YSAqLyk7CiAgICAgdnB0ciA9IHZwdHItPm5leHRfdmFyaWFibGU7CiAgICAgQGVuZEAKIApAQCAtMTA3LDcgKzEwNyw3IEBACiAgICAgdnB0ciA9IHB1dF9pbmRleF9kYXRhOwogICAgIAogICAgIEBmb3JlYWNoICRpZHggaW5kZXhACi0gICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZwdHIsICh1X2NoYXIgKikgLyoqIFhYWDogJGlkeCBkYXRhICovLCAvKiogWFhYOiBsZW5ndGggb2YgJGlkeCBkYXRhICovKTsKKyAgICBzbm1wX3NldF92YXJfdmFsdWUodnB0ciwgLyoqIFhYWDogJGlkeCBkYXRhICovLCAvKiogWFhYOiBsZW5ndGggb2YgJGlkeCBkYXRhICovKTsKICAgICB2cHRyID0gdnB0ci0+bmV4dF92YXJpYWJsZTsKICAgICBAZW5kQAogCkBAIC0xMTYsNyArMTE2LDcgQEAKIAogLyoqIENyZWF0ZSBhIGRhdGFfY29udGV4dCBmb3Igbm9uLWV4aXN0ZW50IHJvd3MgdGhhdCBTRVRzIGFyZSBwZXJmb3JtZWQgb24uCiAgKiAgcmV0dXJuIGEgdm9pZCAqIHBvaW50ZXIgd2hpY2ggd2lsbCBiZSBwYXNzZWQgdG8gc3Vic2VxdWVudCBnZXRfWFhYCi0gKiAgYW5kIHNldF9YWFggZnVuY3Rpb25zIGZvciBkYXRhIHJldHJpdmFsIGFuZCBtb2RpZmljYXRpb24gZHVyaW5nCisgKiAgYW5kIHNldF9YWFggZnVuY3Rpb25zIGZvciBkYXRhIHJldHJpZXZhbCBhbmQgbW9kaWZpY2F0aW9uIGR1cmluZwogICogIHRoaXMgU0VUIHJlcXVlc3QuCiAgKgogICogIFRoZSBpbmRleGVzIGFyZSBlbmNvZGVkIChpbiBvcmRlcikgaW50byB0aGUgaW5kZXhfZGF0YSBwb2ludGVyLApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mIGIvbG9jYWwvbWliMmMuYXJyYXktdXNlci5jb25mCmluZGV4IGQzZTAyNmUuLjMxNTU5YWMgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLmFycmF5LXVzZXIuY29uZgorKysgYi9sb2NhbC9taWIyYy5hcnJheS11c2VyLmNvbmYKQEAgLTEzNiw4ICsxMzYsOCBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIG9pZCBkZWNsYXJhdGlvbnMKICAqLwotZXh0ZXJuIG9pZCAke2l9X29pZFtdOwotZXh0ZXJuIHNpemVfdCAke2l9X29pZF9sZW47CitleHRlcm4gY29uc3Qgb2lkICR7aX1fb2lkW107CitleHRlcm4gY29uc3Qgc2l6ZV90ICR7aX1fb2lkX2xlbjsKIAogI2RlZmluZSAke2l9X1RBQkxFX09JRCAkaS5jb21tYW9pZAogICAgIApAQCAtMjYxLDggKzI2MSw4IEBACiBzdGF0aWMgICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKm15X2hhbmRsZXIgPSBOVUxMOwogc3RhdGljICAgICBuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrcyBjYjsKIAotb2lkICR7aX1fb2lkW10gPSB7ICR7aX1fVEFCTEVfT0lEIH07Ci1zaXplX3QgJHtpfV9vaWRfbGVuID0gT0lEX0xFTkdUSCgke2l9X29pZCk7Citjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHsgJHtpfV9UQUJMRV9PSUQgfTsKK2NvbnN0IHNpemVfdCAke2l9X29pZF9sZW4gPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKIAogCiAjaWZkZWYgJHtpfV9DVVNUT01fU09SVApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMuY29uZiBiL2xvY2FsL21pYjJjLmNvbmYKaW5kZXggMzI5ZTcxZS4uYzcxOTY4YyAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuY29uZgorKysgYi9sb2NhbC9taWIyYy5jb25mCkBAIC01LDEyICs1LDEyIEBACiBZb3UgcmVxdWVzdGVkIG1pYjJjIHRvIGJlIHJ1biBvbiB0aGUgZm9sbG93aW5nIHBhcnQgb2YgdGhlIE1JQiB0cmVlOgogICBPSUQ6ICAgICAgICAgICAgICAgICAgICAgICAJICAgICRuYW1lCiAgIG51bWVyaWMgdHJhbnNsYXRpb246ICAgICAgIAkgICAgJG5hbWUub2JqZWN0SUQKLUBldmFsICRudW0gPSBjb3VudF9zY2FsYXJzQAotICBudW1iZXIgb2Ygc2NhbGFycyB3aXRoaW46ICAgICAgICAgJG51bQotQGV2YWwgJG51bSA9IGNvdW50X3RhYmxlc0AKLSAgbnVtYmVyIG9mIHRhYmxlcyB3aXRoaW46ICAgICAgICAgICRudW0KLUBldmFsICRudW0gPSBjb3VudF9ub3RpZmljYXRpb25zQAotICBudW1iZXIgb2Ygbm90aWZpY2F0aW9ucyB3aXRoaW46ICAgJG51bQorQGV2YWwgJG51bVMgPSBjb3VudF9zY2FsYXJzQAorICBudW1iZXIgb2Ygc2NhbGFycyB3aXRoaW46ICAgICAgICAgJG51bVMKK0BldmFsICRudW1UID0gY291bnRfdGFibGVzQAorICBudW1iZXIgb2YgdGFibGVzIHdpdGhpbjogICAgICAgICAgJG51bVQKK0BldmFsICRudW1OID0gY291bnRfbm90aWZpY2F0aW9uc0AKKyAgbnVtYmVyIG9mIG5vdGlmaWNhdGlvbnMgd2l0aGluOiAgICRudW1OCiAKIEZpcnN0LCBkbyB5b3Ugd2FudCB0byBnZW5lcmF0ZSBjb2RlIHRoYXQgaXMgY29tcGF0aWJsZSB3aXRoIHRoZQogdWNkLXNubXAgNC5YIGxpbmUgb2YgY29kZSwgb3IgY29kZSBmb3IgdGhlIG5ld2VyIE5ldC1TTk1QIDUuWCBjb2RlCkBAIC0zMSw3ICszMSwzMiBAQAogQGVsc2lmICRhbnMgIT0gMkAKIEludmFsaWQgYW5zd2VyLgogQGVsc2VACi1AaWYgY291bnRfc2NhbGFycygpID4gMEAKKyAgQGlmICRudW1TID4gMCAmJiAkbnVtVCA+IDBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisJCSBNSVhFRCBNSUIgVEVNUExBVEUKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1RoZSBwb3J0aW9uIG9mIHRoZSBNSUIgdHJlZSB0aGF0IHlvdSBoYXZlIHNlbGVjdGVkIGNvbnRhaW5zIGJvdGgKK3NjYWxhciBvYmplY3RzIGFuZCBNSUIgdGFibGVzLiAgVGhlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIE5ldC1TTk1QCitzdHlsZSBjb2RlIGNhbm5vdCBoYW5kbGUgYm90aCBvZiB0aGVzZSBzaW11bHRhbmVvdXNseSAodGhvdWdoIHlvdQorY291bGQgZ2VuZXJhdGUgdGhlIHR3byBmaWxlcyBzZXBhcmF0ZWx5LCBhbmQgdGhlbiBtZXJnZSB0aGUgdHdvKS4KKworV2hpY2ggY29kZSBkbyB5b3Ugd2FudCB0byBnZW5lcmF0ZToKKworICAxKSBTY2FsYXIgb2JqZWN0cworICAyKSBNSUIgdGFibGVzCisKKyAgICBAcHJvbXB0ICRhbnMgU2VsZWN0IHlvdXIgY2hvaWNlIDogQAorICAgIEBpZiAkYW5zID09IDEgQAorICAgICAgQGV2YWwgJG51bVQgPSAwQAorICAgIEBlbHNpZiAkYW5zID09IDJACisgICAgICBAZXZhbCAkbnVtUyA9IDBACisgICAgQGVsc2VACitJbnZhbGlkIGFuc3dlcgorICAgICAgQGV2YWwgJG51bVMgPSAwQAorICAgICAgQGV2YWwgJG51bVQgPSAwQAorICAgIEBlbmRACisgIEBlbmRACitAaWYgJG51bVMgPiAwQAogCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAJCSBHRU5FUkFUSU5HIENPREUgRk9SIFNDQUxBUiBPQkpFQ1RTOgpAQCAtNjMsMTkxICs4OCwxOTAgQEAKICAgQGVuZEAKIEBlbmRAICMgc2NhbGFycwogCi1AaWYgY291bnRfdGFibGVzKCkgPiAwQAorQGlmICRudW1UID4gMEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJICAgICBHRU5FUkFUSU5HIENPREUgRk9SIFRBQkxFUzoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAotICBZb3VyIHRhYmxlcyB3aWxsIGxpa2VseSBlaXRoZXIgZmFsbCBpbnRvIG9uZSBvZiB0d28gY2F0ZWdvcmllczoKKyAgVGhlIE5ldC1TTk1QIGFnZW50IEFQSSBpcyBleHRyZW1lbHkgZXh0ZW5zaXZlIGFuZCwgaW4gZmFjdCwgbGV0cworICBlYWNoIHByb2dyYW1tZXIgd3JpdGUgYWdlbnQgY29kZSBhY2NvcmRpbmcgdG8gdGhlIHN0eWxlIHRoYXQgd29ya3MKKyAgYmVzdCBmb3IgdGhlbSBiYXNlZCBvbiB0aGVpciBleHBlcmllbmNlIGFuZCB0aGVpciBwcmVmZXJlbmNlLiAgV2UncmUKKyAgZ29pbmcgdG8gYXNrIHlvdSBhIHNlcmlvdXMgb2YgcXVlc3Rpb25zIHRoYXQgd2lsbCBoZWxwIG1pYjJjCisgIGdlbmVyYXRlIGNvZGUgdGhhdCBiZXN0IHN1aXRzICp5b3VyKiBuZWVkcywgYXMgdGhlIHByb2dyYW1tZXIgdGhhdAorICB3aWxsIGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgdGhlIGNvZGUgYW5kIGZ1cnRoZXIgcmVmaW5pbmcgaXQuICBJZgorICB5b3UgZG9uJ3QgbGlrZSBob3cgdGhlIHJlc3VsdHMgbG9vaywgeW91IGFyZSBhbHdheXMgd2VsY29tZSB0bworICByZS1ydW4gbWliMmMgYW5kIHNlbGVjdCBhIGRpZmZlcmVudCBzZXQgb2Ygb3B0aW9ucy4KIAotICAgIDEpIHRhYmxlcyB3aGVyZSB0aGUgbGlzdCBvZiByb3dzIGlzIGV4dGVybmFsIHRvIHRoZSBhZ2VudC4KLSAgICAgICBUaGlzIGlzIHN1aXRlZCB0byBNSUJzIHdoaWNoIG1vbml0b3Igb3IgbWFuaXB1bGF0ZSBleHRlcm5hbAotICAgICAgIGRhdGEgKHBlcmhhcHMgZXh0cmFjdGVkIGZyb20gdGhlIG9wZXJhdGluZyBzeXN0ZW0ga2VybmVsCi0gICAgICAgb3Igb3RoZXIgc3lzdGVtIGludGVyZmFjZXMpLCBhbmQgd2hlcmUgcm93cyBhcmUgdHlwaWNhbGx5Ci0gICAgICAgY3JlYXRlZCBvciBkZXN0cm95ZWQgaW5kZXBlbmRlbnRseSBvZiB0aGUgU05NUCBhZ2VudC4KKyAgICBUaGVyZSBhcmUgZXNzZW50aWFsbHkgdHdvIHRhc2tzIGludm9sdmVkIGluIHByb2Nlc3NpbmcgcmVxdWVzdHMKKyAgZm9yIE9JRHMgd2l0aGluIGEgTUlCIHRhYmxlIC0gZmlyc3RseSBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgcm93CisgIG9mIHRoZSB0YWJsZSBmb3IgYSBnaXZlbiByZXF1ZXN0LCBhbmQgdGhlbiByZXR1cm5pbmcgKG9yIHVwZGF0aW5nKQorICB0aGUgYXBwcm9wcmlhdGUgY29sdW1uIHZhbHVlIHdpdGhpbiB0aGF0IHJvdy4gIE1hbnkgTUlCIHRhYmxlcyBtb2RlbAorICB0aGUgc3RhdGUgb2Ygc29tZSBleHRlcm5hbCBzeXN0ZW0gKHRoZSBrZXJuZWwsIGEgZGV2aWNlLCBwcm9jZXNzZXMsCisgIGV0YyksIGFuZCB0aGUgTUlCIGltcGxlbWVudGF0aW9uIG1vZHVsZSAodGhlIGNvZGUgd2UncmUgYWJvdXQgdG8KKyAgcHJvZHVjZSBhIHRlbXBsYXRlIGZvcikgYWN0cyBhcyBhbiBpbnRlcmZhY2UgYmV0d2VlbiB0aGlzIHVuZGVybHlpbmcKKyAgc3lzdGVtIGFuZCB0aGUgU05NUCBzaWRlLiAgT3RoZXIgdGFibGVzIGhvbGQgZGF0YSBpbnRlcm5hbGx5IHRoYXQgaXMKKyAgb25seSBhdmFpbGFibGUgd2l0aGluIHRoZSBhZ2VudCBpdHNlbGYsIG9yIGF0IGxlYXN0IHRoZSBtYXN0ZXIgY29weQorICBvZiB0aGUgZGF0YSBpcyBoZWxkIHdpdGhpbiB0aGUgYWdlbnQuCiAKLSAgICAyKSB0YWJsZXMgd2hlcmUgdGhlIGxpc3Qgb2Ygcm93cyBpcyBoZWxkIGJ5IHRoZSBhZ2VudCBpdHNlbGYuCi0gICAgICAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgc3VpdGVkIHRvIHRhYmxlcyB0aGF0IGFyZSBwcmltYXJpbHkKLSAgICAgICBtYW5pcHVsYXRlZCB2aWEgU05NUCwgb3Igd2hlcmUgdGhlIHJvd3Mgb2YgdGhlIHRhYmxlIGFyZQotICAgICAgIHJlbGF0aXZlbHkgc3RhdGljLgorICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgY29kZSB0ZW1wbGF0ZXMgdGhhdCBjYW4gYmUgdXNlZCB0bworICBpbXBsZW1lbnQgTUlCIHRhYmxlcywgdXNpbmcgdmFyaW91cyBhcHByb2FjaGVzIHRvIHRoZXNlIHR3byB0YXNrcy4KIAotICAgIDMpIERvIG5vdCBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGFibGVzLgorICBUaGVyZSBhcmUgdGhyZWUgYmFzaWMgYXBwcm9hY2hlcyB0byBpZGVudGlmeWluZyB0aGUgcmVsZXZhbnQgcm93OgogCi0gIEBwcm9tcHQgJGFucyBTZWxlY3QgdGhlIG9wdGlvbiB0aGF0IGJlc3QgZml0cyB5b3U6IEAKLSAgQGlmICRhbnMgIT0gM0AKLSAgICBAaWYgJGFucyA9PSAxQAorICAgIDEpIFBhc3MgdGhlIHJlcXVlc3QgdGhyb3VnaCB0byB0aGUgdGFibGUtc3BlY2lmaWMgY29kZSwgYW5kCisgICAgICAgaWRlbnRpZnkgdGhlIHJlcXVlc3RlZCByb3cgdGhlcmUgKGZvciBib3RoIEdFVCBhbmQgR0VUTkVYVAorICAgICAgIHJlcXVlc3RzKS4gIFRoaXMgaXMgdHlwaWNhbGx5IHRoZSBtb3N0IGVmZmljaWVudCB3YXkgdG8gZ2V0CisgICAgICAgdXAtdG8tZGF0ZSBpbmZvcm1hdGlvbiwgYnV0IHJlbGllcyBvbiBzdWl0YWJsZQorICAgICAgIChwcm9ncmFtbWVyLXByb3ZpZGVkKSBjb2RlIHdpdGhpbiB0aGUgTUlCIGhhbmRsZXIuCisgICAgICAgTW9zdCBpbXBvcnRhbnRseSwgeW91IHNob3VsZCBiZSBhbiBleHBlcnQgdG8gdXNlIHRoaXMgY2hvaWNlLgogCi0gICAgICBUaGlzIHN0eWxlIG9mIHRhYmxlIHRlbmRzIHRvIHVzZSB0aGUgaXRlcmF0b3IgaGVscGVyIHRvIGluc3RydW1lbnQKLSAgICAgIHRoZSBleHRlcm5hbCBkYXRhLCBzbyBpdCBjYW4gYmUgcmVwcmVzZW50ZWQgYnkgYW4gU05NUCB0YWJsZS4KLSAgICAgIFRoZSBtYWluIGNoYXJhY3RlcmlzdGljIG9mIHRoaXMgaGVscGVyIGlzIHRoZSB1c2Ugb2YgYSBwYWlyCi0gICAgICBvZiAiaXRlcmF0aW9uIGhvb2siIHJvdXRpbmVzIHRvIGxvb3AgdGhyb3VnaCB0aGUgcm93cyBpbiB0dXJuCi0gICAgICAoaW4gdGhlIG1vc3QgbmF0dXJhbCBvcmRlciBmb3IgdGhlIHVuZGVybHlpbmcgZGF0YSkuCi0gICAgICAgIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBkaWZmZXJlbnQgdGVtcGxhdGUgY29uZmlndXJhdGlvbnMgdGhhdAotICAgICAgY2FuIGJlIHVzZWQgYXMgYSBmcmFtZXdvcmsgZm9yIHRoaXM6CisgICAgICAgVGhpcyB3aWxsIHByb2R1Y2UgY29kZSBiYXNlZCBvbiB0aGUgdGFibGVfZGF0YXNldCBoYW5kbGVyLgogCi0gICAgICAxKSBPbmUgYmFzZWQgYXJvdW5kIGEgc2luZ2xlIGhhbmRsZXIsIHRoYXQgaW5jbHVkZXMgY29kZSB0byBoYW5kbGUKLSAgICAgICAgIGJvdGggR0VUIGFuZCBTRVQgcmVxdWVzdHMsIGFzIHdlbGwgYXMgcm93IGNyZWF0aW9uIGFuZCBkZWxldGlvbi4KLSAgICAgICAgIFRoaXMgdGVtcGxhdGUgZGVmaW5lcyBhIHN1aXRhYmxlIGRhdGEgc3RydWN0dXJlLCBhbmQgaW1wbGVtZW50cwotICAgICAgICAgdGhlIHRhYmxlIGFzIGFuIGludGVybmFsbHktaGVsZCBsaW5rZWQgbGlzdCwgYnV0IGJvdGggb2YgdGhlc2UKLSAgICAgICAgIGFyZSBtYWlubHkgZm9yIGlsbHVzdHJhdGlvbiwgYW5kIGNvdWxkIHJlYXNvbmFibHkgYmUgcmVwbGFjZWQgYnkKLSAgICAgICAgIGNvZGUgbW9yZSBhcHByb3ByaWF0ZSBmb3IgdGhlIHRhYmxlIGJlaW5nIGltcGxlbWVudGVkLgotICAgICAgICAgICBUaGUgc2FtZSB0ZW1wbGF0ZSBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCi0gICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLml0ZXJhdGUuY29uZiAkbmFtZQotIAotICAgICAgMikgQW4gYWx0ZXJuYXRpdmUgZnJhbWV3b3JrLCBkZXNpZ25lZCBhcyBhbiBBUEkgd3JhcHBlciBvbiB0b3Agb2YKLSAgICAgICAgIHRoZSBiYXNpYyBpdGVyYXRvciBoZWxwZXIsIHRoYXQgc2Vla3MgdG8gc2VwYXJhdGUgdGhlIHN0YW5kYXJkCi0gICAgICAgICBwcm9jZXNzaW5nIG9mIHRoZSBzeW50YXggb2YgYSBNSUIgdGFibGUgKHdoaWNoIGNhbiBiZSBnZW5lcmF0ZWQKLSAgICAgICAgIGF1dG9tYXRpY2FsbCksIGZyb20gdGhlIHNlbWFudGljcyBvZiBhIGdpdmVuIHRhYmxlICh3aGljaCBjYW5ub3QpLgotICAgICAgICAgICBJdCBnZW5lcmF0ZXMgYSBudW1iZXIgb2Ygc2VwYXJhdGUgY29kZSBmaWxlcywgYnV0IHR5cGljYWxseQotICAgICAgICAgb25seSBvbmUgb3IgdHdvIG9mIHRoZXNlIHdpbGwgbmVlZCB0byBiZSBlZGl0ZWQuICBUaGVzZSBjb250YWluCi0gICAgICAgICBzZXBhcmF0ZSAnZ2V0X2NvbHVtbigpJyBhbmQgJ3NldF9jb2x1bW4oKScgZnVuY3Rpb25zIGZvciBlYWNoCi0gICAgICAgICBjb2x1bW4gaW4gdGhlIHRhYmxlLCBwbHVzIHNvbWUgb3RoZXIgcm91dGluZXMgZm9yIG1hbmlwdWxhdGluZwotICAgICAgICAgcm93cyAocGx1cyB0aGUgc3RhbmRhcmQgaXRlcmF0b3IgaG9vayByb3V0aW5lcykuCi0gICAgICAgICAgIFRoZSBzYW1lIHRlbXBsYXRlcyBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCi0gICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYgJG5hbWUKLSAgICAgICAgIChTZWUgdGhlIGFnZW50L21pYmdyb3VwL2V4YW1wbGUvbmV0U25tcEhvc3RzVGFibGUuYyBmaWxlIGZvciBleGFtcGxlKQorICAgIDIpIEhhdmUgdGFibGUtc3BlY2lmaWMgY29kZSB0byBwcm92aWRlIGluZm9ybWF0aW9uIGFib3V0IHdoaWNoCisgICAgICAgcm93cyBleGlzdCBpbiB0aGUgdGFibGUgKGJ5IGl0ZXJhdGluZyB0aHJvdWdoIHRoZW0gaW4gdHVybiksCisgICAgICAgYnV0IHV0aWxpc2Ugc3RhbmRhcmQgaGVscGVyIGNvZGUgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZQorICAgICAgIHJvdyBmb3IgYSBnaXZlbiByZXF1ZXN0LiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgc3VpdGFibGUgZm9yCisgICAgICAgdGFibGVzIHdoZXJlIHRoZSBkYXRhIGlzIG5hdHVyYWxseSBzdG9yZWQgaW4gYSAicmFuZG9tIiBvcmRlcgorICAgICAgIChvciBkaWZmZXJlbnRseSB0byB0aGUgTUlCIHRhYmxlIGluZGV4KSwgb3Igd2hlcmUgcm93cyBhcmUKKyAgICAgICBmcmVxdWVudGx5IGFkZGVkIHRvIG9yIHJlbW92ZWQgZnJvbSB0aGUgdGFibGUuCiAKLSAgICAgIDMpIEFuIEFQSSBsYXllciAobm90IGJhc2VkIG9uIHRoZSBpdGVyYXRvciBoZWxwZXIpIHRoYXQgYXR0ZW1wdHMKLSAgICAgICAgIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIFNOTVAgc3BlY2lmaWMga25vd2xlZGdlIHJlcXVpcmVkIHRvCi0gICAgICAgICBpbXBsZW1lbnQgYSBtb2R1bGUuIEl0IHByb3ZpZGVzIG1vcmUgQVBJcyB0aGFuIDIsIHdoaWNoIGFyZQotICAgICAgICAgKGhvcGVmdWxseSkgc21hbGxlciBhbmQgbW9yZSBzcGVjaWZpYywgd2l0aCBsZXNzIFNOTVAgdGVybWlub2xvZ3kuCi0gICAgICAgICAgIFRoaXMgQVBJIGlzIGFsc28ga25vd24gYXMgIk1JQnMgZm9yIER1bW1pZXMiLiAgTnVtZXJvdXMgdGFibGVzCi0gICAgICAgICBpbiB0aGUgTmV0LVNOTVAgYWdlbnQgaGF2ZSBiZWVuIHJlLXdyaXR0ZW4gdG8gdXNlIHRoaXMgQVBJLgotICAgICAgICAgICBUaGUgc2FtZSB0ZW1wbGF0ZXMgY2FuIGJlIGdlbmVyYXRlZCB1c2luZwotICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy5tZmQuY29uZiAkbmFtZQotICAgICAgICAgKFNlZSB0aGUgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZSouYyBmaWxlcyBmb3IgZXhhbXBsZXMpCisgICAgICAgICBIb3dldmVyIHNlYXJjaGluZyBmb3IgdGhlIHJlcXVlc3RlZCByb3cgaXMgbm90IHZlcnkgZWZmaWNpZW50LAorICAgICAgIGFuZCBwZXJmb3JtYW5jZSBjYW4gYmUgc2xvdyAtIHBhcnRpY3VsYXJseSBmb3IgbGFyZ2UgdGFibGVzIHdpdGgKKyAgICAgICBtYW55IHJvd3MuCiAKLSAgICAgIDQpIERvIG5vdCBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGFibGVzLgorICAgIDMpIEhvbGQgYSBsb2NhbGx5IGNhY2hlZCBjb3B5IG9mIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgKG9yIGF0CisgICAgICAgbGVhc3QgYSBjYWNoZSBvZiB3aGljaCByb3dzIGFyZSB2YWxpZCksIGFuZCB1dGlsaXNlIHN0YW5kYXJkCisgICAgICAgaGVscGVyIGNvZGUgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSByb3cuICBUaGlzIGlzCisgICAgICAgc2lnbmlmaWNhbnRseSBmYXN0ZXIgdGhhbiB0aGUgaXRlcmF0b3ItYmFzZWQgYXBwcm9hY2gsIGJ1dAorICAgICAgIGNhY2hlZCBkYXRhIGlzIGluZXZpdGFibHkgc2xpZ2h0bHkgInN0YWxlIiB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgICAgZGF0YSBmcm9tIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBiZWluZyBtYW5hZ2VkLiAgVGhpcyBhcHByb2FjaCwKKyAgICAgICBzaW5jZSBpdCByZWxpZXMgb24gY2FjaGluZyBvZiBkYXRhLCBpcyBhbHNvIHJlc3VsdHMgaW4gYSBsYXJnZXIKKyAgICAgICBtZW1vcnkgZm9vdHByaW50LiAgSXQgaXMgbGVzcyBhcHByb3ByaWF0ZSBmb3IgdGFibGVzIHdoZXJlIHJvd3MKKyAgICAgICBhcmUgZnJlcXVlbnRseSBhZGRlZCBvciByZW1vdmVkIGV4dGVybmFsbHkgdG8gdGhlIGFnZW50IChpLmUuLAorICAgICAgIG5vdCB2aWEgU05NUCByZXF1ZXN0cykuCiAKLSAgICAgIElmIHlvdSBhcmUgdW5zdXJlIHdoaWNoIG9wdGlvbiB0byBwaWNrLCBjaG9pY2VzIDIpIG9yIDMpIGFyZSBwZXJoYXBzCi0gICAgICBtb3JlIHN1aXRlZCBmb3IgdGhvc2UgbGVzcyBmYW1pbGlhciB3aXRoIHRoZSBjb25jZXB0cyBiZWhpbmQgdGhlIFNOTVAKLSAgICAgIHByb3RvY29sIG9wZXJhdGlvbnMsIHdoaWxlIGNob2ljZSAxKSBnaXZlcyBtb3JlIGNvbnRyb2wgb3ZlciBleGFjdGx5Ci0gICAgICB3aGF0IGlzIGRvbmUuCisgICAgICAgVGhpcyBhcHByb2FjaCBjYW4gYWxzbyBiZSB1c2VkIHdoZXJlIF9hbGxfIHVzZSBvZiB0aGUgdGFibGUgaXMKKyAgICAgICB2aWEgU05NUCwgYW5kIHRoZXJlIGlzIG5vIGV4dGVybmFsICJ1bmRlcmx5aW5nIHN5c3RlbSIuICBJbgorICAgICAgIHRoaXMgY2FzZSwgdGhlIGxvY2FsIGNhY2hlIGlzIHRoZSBjYW5vbmljYWwgdmVyc2lvbiBvZiB0aGUKKyAgICAgICB0YWJsZS4KIAotICAgICBAcHJvbXB0ICRhbnMgU2VsZWN0IHRoZSBBUEkgc3R5bGUgeW91IHdpc2ggdG8gdXNlOiBACi0gICAgIEBpZiAkYW5zICE9IDVACi0gICAgICAgQGlmICRhbnMgPT0gMUAKLSAgICAgICAgIHVzaW5nIHRoZSBtaWIyYy5pdGVyYXRlLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgIEBydW4gbWliMmMuaXRlcmF0ZS5jb25mQAotICAgICAgIEBlbHNpZiAkYW5zID09IDJACi0gICAgICAgICB1c2luZyB0aGUgbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8KLSAgICAgICAgIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgIEBydW4gbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZkAKLSAgICAgICBAZWxzaWYgJGFucyA9PSAzQAotICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLm1mZC5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0bwotICAgICAgICAgZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgQHJ1biBtaWIyYy5tZmQuY29uZkAKLSAgICAgICBAZWxzZUAKLSAgICAgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KLSAgICAgICBAZW5kQAotICAgICBAZW5kQAorICAgIDQpIERvIG5vdCBnZW5lcmF0ZSBjb2RlIGZvciB0aGUgdGFibGVzLgorCisgIEBwcm9tcHQgJGFuczEgU2VsZWN0IHRoZSBvcHRpb24gdGhhdCBiZXN0IGZpdHMgeW91ciByZXF1aXJlbWVudHM6IEAKKworICBAaWYgKCRhbnMxID09IDIpIHx8ICgkYW5zMSA9PSAzKUAKKworICBIYXZpbmcgaWRlbnRpZmllZCB0aGUgYXBwcm9wcmlhdGUgcm93IGZvciBhIGdpdmVuIHJlcXVlc3QsIHRoZXJlIGFyZQorICB0aHJlZSBiYXNpYyBzdHlsZXMgb2YgY29kZSBmb3IgcmV0dXJuaW5nIChvciB1cGRhdGluZykgdGhlIHJlcXVlc3RlZAorICBjb2x1bW4gdmFsdWUgZnJvbSB3aXRoaW4gdGhpcyByb3c6CisKKyAgICAxKSBBIHNpbmdsZSBoYW5kbGVyIHJvdXRpbmUsIHdoaWNoIGNvbnRhaW5zIGFsbCB0aGUgY29kZSBuZWVkZWQgdG8KKyAgICAgICBoYW5kbGUgR0VUIGFuZCBTRVQgcmVxdWVzdHMgZm9yIGVhY2ggb2YgdGhlIGNvbHVtbiBvYmplY3RzLgorCitAaWYgJGFuczEgPT0gMkAKKyAgICAgICBUaGUgY29kZSB0eXBpY2FsbHkgbG9va3MgbGlrZSBhIHNpbmdsZSBmdW5jdGlvbiB3aXRoIGEgbGFyZ2UgJ2Nhc2UnCisgICAgICAgc3RhdGVtZW50IGNvdmVyaW5nIGVhY2ggb2YgdGhlIGNvbHVtbnMuCisKKyAgICAgICBUaGlzIHdpbGwgcHJvZHVjZSBjb2RlIGJhc2VkIG9uIHRoZSAnaXRlcmF0b3InIGhlcGxlci4KK0BlbmRACisKKyAgICAyKSBBIHNldCBvZiBpbmRpdmlkdWFsIHJvdXRpbmVzLCBlYWNoIG9mIHdoaWNoIGlzIGNvbmNlcm5lZAorICAgICAgIHdpdGggYSBwYXJ0aWN1bGFyIGFzcGVjdCBvZiBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0LgorICAgIEBpZiAkYW5zMSA9PSAyIEAKKyAgICAgICBFYWNoIGNvbHVtbiBvYmplY3Qgd2l0aGluIHRoZSB0YWJsZSBoYXMgb25lIHJvdXRpbmUgZm9yCisgICAgICAgcmV0cmlldmluZyB0aGUgY3VycmVudCB2YWx1ZSwgYW5kIGFub3RoZXIgZm9yIHNldHRpbmcgYSBuZXcgb25lLgorCisgICAgICAgVGhpcyB3aWxsIHByb2R1Y2UgY29kZSBiYXNlZCBvbiB0aGUgJ2l0ZXJhdGVfYWNjZXNzJyBoZXBsZXIuCiAgICAgQGVsc2VACi0gICAgICBAaWYgJGFucyA9PSAyQAotICAgICAgVGhpcyBzdHlsZSBvZiB0YWJsZSBob2xkcyBhIGxpc3Qgb2YgdGhlIHRhYmxlIHJvd3MgaW50ZXJuYWxseQotICAgICAgd2l0aGluIHRoZSBhZ2VudCBpdHNlbGYuICBUeXBpY2FsbHkgdGhpcyB3aWxsIHRlbmQgdG8gaW5jbHVkZQotICAgICAgdGhlIGNvbHVtbiB2YWx1ZXMgZm9yIGVhY2ggcGFydGljdWxhciByb3csIGFuZCB0aGF0IGlzIHRoZQotICAgICAgbW9kZWwgdXNlZCBieSB0aGUgZ2VuZXJhdGVkIHRlbXBsYXRlIGNvZGUuICBCdXQgaXQgc2hvdWxkIHVzdWFsbHkKLSAgICAgIGJlIHBvc3NpYmxlIHRvIHJlYWQgaW4gc29tZSBvciBhbGwgb2YgdGhlIGNvbHVtbiB2YWx1ZXMgZnJvbSBhbgotICAgICAgZXh0ZXJuYWwgc291cmNlLCBzaG91bGQgdGhpcyBiZSBuZWNlc3NhcnkgZm9yIGEgcGFydGljdWxhciBNSUIgdGFibGUuCi0gICAgICAgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBkaWZmZXJlbnQgdGVtcGxhdGUgY29uZmlndXJhdGlvbnMgdGhhdAotICAgICAgY2FuIGJlIHVzZWQgYXMgYSBmcmFtZXdvcmsgZm9yIHRoaXM6Ci0gICAgICAKLQotICAgICAgMSkgZGF0YXNldCBzdG9yYWdlOiBUaGUgZGF0YSBmb3IgdGhlIHRhYmxlIGlzIHN0b3JlZCBjb21wbGV0ZWx5Ci0gICAgICAgICB3aXRoaW4gdGhlIGFnZW50LCBhbmQgdGhlIHVzZXItdmlzaWJsZSBjb2RlIGRvZXMgbm90IG5lZWQgdG8KLSAgICAgICAgIGJlIGNvbmNlcm5lZCB3aXRoIHRoZSBpbnRlcm5hbCByZXByZXNlbnRhdGlvbiBvZiBhbiBpbmRpdmlkdWFsCi0gICAgICAgICByb3cuICBUaGlzIGlzIG1vc3Qgc3VpdGVkIHRvIE1JQiB0YWJsZXMgdGhhdCBhcmUgcHVyZWx5IGludGVybmFsCi0gICAgICAgICB0byB0aGUgYWdlbnQsIHJhdGhlciB0aGFuIG1vZGVsbGluZyBleHRlcm5hbCBkYXRhLCBvciB1c2luZwotICAgICAgICAgZXhpc3RpbmcgZGF0YSBzdHJ1Y3R1cmVzLgotICAgICAgICAgICBUaGUgc2FtZSB0ZW1wbGF0ZSBjYW4gYmUgZ2VuZXJhdGVkIHVzaW5nCi0gICAgICAgICAgICAgICAgIG1pYjJjIC1jIG1pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYgJG5hbWUKLQotICAgICAgMikgcm93LWRhdGEgc3RvcmFnZTogVGhlIGRhdGEgZm9yIHRoZSB0YWJsZSBpcyBoZWxkIGJ5IHRoZSBhZ2VudCwKLSAgICAgICAgIGJ1dCB1c2luZyBhbiBhcmJpdHJhcnkgKHVzZXItcHJvdmlkZWQpIGRhdGEgc3RydWN0dXJlIGZvciB0aGUKLSAgICAgICAgIHJlcHJlc2VudGF0aW9uIG9mIGFuIGluZGl2aWR1YWwgcm93LiBUaGlzIGlzIHN1aXRlZCBmb3IgTUlCCi0gICAgICAgICB0YWJsZXMgd2hlcmUgdGhlcmUgaXMgYSBuYXR1cmFsIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlLAotICAgICAgICAgb3Igd2hlcmUgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBtYXkgbmVlZCB0byBiZSBpbnRlcnByZXRlZAotICAgICAgICAgZm9yIHNvbWUgYWRkaXRpb25hbCBwdXJwb3NlLCBvdGhlciB0aGFuIHNpbXBseSBpbXBsZW1lbnRpbmcKLSAgICAgICAgIHRoZSB0YWJsZSBmb3IgU05NUCByZXF1ZXN0cy4KLSAgICAgICAgICAgVGhlIHNhbWUgdGVtcGxhdGUgY2FuIGJlIGdlbmVyYXRlZCB1c2luZwotICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy50YWJsZV9kYXRhLmNvbmYgJG5hbWUKLQotICAgICAgMykgY29udGFpbmVyIHN0b3JhZ2U6IFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyByb3ctZGF0YQotICAgICAgICAgbWVjaGFuaXNtLCBidXQgdXNlcyBhIGRpZmZlcmVudCAoYW5kIHNsaWdodGx5IG1vcmUgZWZmaWNpZW50KQotICAgICAgICAgaW50ZXJuYWwgcmVwcmVzZW50YXRpb24uICBUaGUgbWFpbiBwcmFjdGljYWwgZWZmZWN0IGlzIHRvCi0gICAgICAgICBpbnRyb2R1Y2UgYSBzbGlnaHQgY29uc3RyYWludCBvbiB0aGUgZm9ybSBvZiB0aGUgcGVyLXJvdyBkYXRhCi0gICAgICAgICBzdHJ1Y3R1cmUuCi0gICAgICAgICAgIFRoZSBzYW1lIHRlbXBsYXRlIGNhbiBiZSBnZW5lcmF0ZWQgdXNpbmcKLSAgICAgICAgICAgICAgICAgbWliMmMgLWMgbWliMmMuY29udGFpbmVyLmNvbmYgJG5hbWUKLQotICAgICAgQWxsIHRocmVlIG9mIHRoZXNlIHRlbXBsYXRlcyBnZW5lcmF0ZSBhIHNpbmdsZSBjb2RlIGZpbGUsIGFuZAotICAgICAgdXNlIGEgInNpbmdsZSBoYW5kbGVyIiBmb3JtYXQgZm9yIHRoZSBkcml2aW5nIGNvZGUuCi0KLSAgICAgIDQpIHNvcnRlZCBhcnJheTogIFRoZSBkYXRhIGZvciB0aGUgdGFibGUgaXMgc3RvcmVkIGluIGEgc29ydGVkCi0gICAgICAgICBhcnJheS4KLSAgICAgICAgIChtYW51YWxseSBtaWIyYyAtYyBtaWIyYy5hcnJheS11c2VyLmNvbmYgJHtuYW1lfSkKLQotICAgICAgNSkgTmV0LVNOTVAgY29udGFpbmVyOiAoQWxzbyBrbm93biBhcyAiTUlCcyBmb3IgRHVtbWllcyIsIG9yIE1GRC4pCi0gICAgICAgICBUaGUgZGF0YSBmb3IgdGhlIHRhYmxlIGlzIHN0b3JlZCB2aWEgYQotICAgICAgICAgZ2VuZXJpYyBpbnRlcmZhY2UuIFZhcmlvdXMgdHlwZXMgb2YgY29udGFpbmVycyBtYXkgYmUKLSAgICAgICAgIHNlbGVjdGVkLCBpbmNsdWRpbmcgbGlua2VkIGxpc3RzIG9yIGJpbmFyeSBhcnJheXMuCi0gICAgICAgICAobWFudWFsbHkgbWliMmMgLWMgbWliMmMubWZkLmNvbmYgJHtuYW1lfSkKLQotICAgICAgNikgRG8gbm90IGdlbmVyYXRlIGNvZGUgZm9yIHRoZSB0YWJsZXMuCi0KLSAgICAgIEFsbCBBUElzIGFyZSBmdWxseSBmdW5jdGlvbmFsIHdpdGggbGl0dGxlLXRvLW5vIHJlcXVpcmVkIGNvZGUKLSAgICAgIHRvIG1ha2UgdGhlIHRhYmxlIG9wZXJhdGlvbmFsIG9uIHlvdXIgZW5kIG9uY2UgdGhlIHRlbXBsYXRlCi0gICAgICBjb2RlIGlzIHByb2R1Y2VkLiAgVGhlIE1GRCBhbmQgZGF0YXNldCBBUElzIGFyZSBhIGJpdCBiZXR0ZXIKLSAgICAgIGRvY3VtZW50ZWQsIGJ1dCB0aGUgc29ydGVkIGFycmF5IGlzIHByb2JhYmx5IGJldHRlciB0ZXN0ZWQKLSAgICAgIGFzIGl0IHdhcyB1c2VkIGhlYXZpbHkgaW4gdGhlIG5ldC1wb2xpY3kgc291cmNlZm9yZ2UgcHJvamVjdC4KLSAgICAgIFRoZSBNRkQgQVBJIGlzIHRoZSBzdWNjZXNzb3IgdG8gdGhlIGFycmF5LXVzZXIgQVBJLCBhbmQgc2V2ZXJhbAotICAgICAgdGFibGVzIGluIHRoZSBOZXQtU05NUCBhZ2VudCBoYXZlIGJlZW4gcmUtd3JpdHRlbiB0byB1c2UgaXQuCi0gICAgICBUaGUgZGF0YXNldCBBUEkgaXMgdXNlZCBpbnNpZGUgdGhlIHNubXB0cmFwZCBhcHBsaWNhdGlvbiBmb3IKLSAgICAgIGxvZ2dpbmcgaW5jb21pbmcgdHJhcHMuCi0KLSAgICAgIEBwcm9tcHQgJGFucyBTZWxlY3QgdGhlIEFQSSBzdHlsZSB5b3Ugd2lzaCB0byB1c2U6IEAKLSAgICAgIEBpZiAkYW5zICE9IDZACi0gICAgICAgIEBpZiAkYW5zID09IDFACi0gICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYgY29uZmlndXJhdGlvbiBmaWxlCi0gICAgICAgICAgdG8gZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgIEBydW4gbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZkAKLSAgICAgICAgQGVsc2lmICRhbnMgPT0gMkAKLSAgICAgICAgICB1c2luZyB0aGUgbWliMmMudGFibGVfZGF0YS5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0bwotICAgICAgICAgIGdlbmVyYXRlIHlvdXIgY29kZS4KLSAgICAgICAgICBAcnVuIG1pYjJjLnRhYmxlX2RhdGEuY29uZkAKLSAgICAgICAgQGVsc2lmICRhbnMgPT0gM0AKLSAgICAgICAgICB1c2luZyB0aGUgbWliMmMuY29udGFpbmVyLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlIHRvCi0gICAgICAgICAgZ2VuZXJhdGUgeW91ciBjb2RlLgotICAgICAgICAgIEBydW4gbWliMmMuY29udGFpbmVyLmNvbmZACi0gICAgICAgIEBlbHNpZiAkYW5zID09IDRACi0gICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLmFycmF5LXVzZXIuY29uZiBjb25maWd1cmF0aW9uIGZpbGUgdG8KLSAgICAgICAgICBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICAgQHJ1biBtaWIyYy5hcnJheS11c2VyLmNvbmZACi0gICAgICAgIEBlbHNpZiAkYW5zID09IDVACi0gICAgICAgICAgdXNpbmcgdGhlIG1pYjJjLm1mZC5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBnZW5lcmF0ZSB5b3VyIGNvZGUuCi0gICAgICAgICAgQHJ1biBtaWIyYy5tZmQuY29uZkAKLSAgICAgICAgQGVsc2VACi0gICAgICAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgotICAgICAgICBAZW5kQAotICAgICAgQGVsc2VACi0gICAgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KLSAgICAgIEBlbmRACisgICAgICAgVGhlcmUgaXMgb25lIHJvdXRpbmUgZm9yIHJlcG9ydGluZyB2YWx1ZXMgZm9yIEdFVCByZXF1ZXN0cywKKyAgICAgICBhbmQgb25lIHJvdXRpbmUgZm9yIGVhY2ggc3RhZ2Ugb2YgcHJvY2Vzc2luZyBhIFNFVCByZXF1ZXN0LgogICAgIEBlbmRACisKKyAgICAzKSBBIChkaWZmZXJlbnQpIHNldCBvZiBpbmRpdmlkdWFsIHJvdXRpbmVzLCBlYWNoIG9mIHdoaWNoIGlzCisgICAgICAgc21hbGxlciBhbmQgbW9yZSB0aWdodGx5IGZvY3VzZWQgdGhhbiB0aGUgY29kZSBnZW5lcmF0ZWQgYnkKKyAgICAgICBzdHlsZSAyLiAgVGhlIGFpbSBoZXJlIGlzIHRvIHJlZHVjZSB0aGUgYW1vdW50IG9mIFNOTVAgc3BlY2lmaWMKKyAgICAgICBrbm93bGVkZ2UgcmVxdWlyZWQgdG8gaW1wbGVtZW50IGEgbW9kdWxlLCBhbmQgaGlkZSBtdWNoIG9mIHRoZQorICAgICAgIFNOTVAgdGVybWlub2xvZ3kgYW5kIHByb2Nlc3Npbmcgd2l0aGluIHN0YW5kYXJkIGdlbmVyYXRlZCBjb2RlCisgICAgICAgKHdoaWNoIGNhbiBzaW1wbHkgYmUgdXNlZCBzaWdodCB1bnNlZW4pLgorQGlmICRuYW1lICF+IC9UYWJsZSQvaUAKKyAgICAgICAgIEhvd2V2ZXIgdGhpcyBzdHlsZSBvZiBjb2RlIGNhbiBvbmx5IGJlIGdlbmVyYXRlZCB3aGVuIG1pYjJjCisgICAgICAgaXMgcnVuIG9uIGFuIGluZGl2aWR1YWwgTUlCIHRhYmxlLiAgVG8gdXNlIHRoaXMgYXBwcm9hY2gsIHlvdQorICAgICAgIHdpbGwgbmVlZCB0byByZS1pbnZva2UgbWliMmMgd2l0aCB0aGUgbmFtZSBvZiBhIHNpbmdsZSBNSUIgdGFibGUuCitAZW5kQAorCisgICAgICAgVGhpcyB3aWxsIHByb2R1Y2UgY29kZSBiYXNlZCBvbiB0aGUgJ21mZCcgaGVwbGVyICgnTUlCIGZvciBEdW1taWVzJykuCisKKyAgICA0KSBEbyBub3QgZ2VuZXJhdGUgY29kZSBmb3IgdGhlIHRhYmxlcy4KKworICAgKEluIGFsbCBjYXNlcywgR0VUTkVYVCByZXF1ZXN0cyBhcmUgYXV0b21hdGljYWxseSBjb252ZXJ0ZWQKKyAgICBpbnRvIHRoZSBlcXVpdmFsZW50IEdFVCByZXF1ZXN0LCBzbyB0aGUgTUlCIHNwZWNpZmljIGNvZGUKKyAgICBuZWVkIG9ubHkgYmUgY29uY2VybmVkIHdpdGggR0VUIGFuZCBTRVQgcmVxdWVzdHMuKS4KKyAgICAgICAKKyAgQHByb21wdCAkYW5zMiBTZWxlY3QgdGhlIGNvZGUgc3R5bGUgeW91IHdpc2ggdG8gdXNlOiBACiAgIEBlbmRACi0gQGVuZEAgIyAhPSAzCisKKyAgQGV2YWwgJHRlbXBsYXRlID0gTk9ORUAKKyAgQGlmICRhbnMxID09IDFACisgICAgIEBldmFsICR0ZW1wbGF0ZSA9ICJjcmVhdGUtZGF0YXNldCJACisKKyAgQGVsc2lmICRhbnMxID09IDJACisgICBAaWYgJGFuczIgPT0gMUAKKyAgICAgQGV2YWwgJHRlbXBsYXRlID0gaXRlcmF0ZUAKKyAgIEBlbHNpZiAkYW5zMiA9PSAyQAorICAgICBAZXZhbCAkdGVtcGxhdGUgPSBpdGVyYXRlX2FjY2Vzc0AKKyAgIEBlbHNpZiAkYW5zMiA9PSAzQAorICAgICBAZXZhbCAkdGVtcGxhdGUgPSBtZmRACisgICBAZWxzaWYgJGFuczIgIT0gNEAKKyAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgorICAgQGVuZEAKKworICBAZWxzaWYgJGFuczEgPT0gM0AKKyAgIEBpZiAkYW5zMiA9PSAxQAorICAgICBUaGVyZSBhcmUgYWN0dWFsbHkgdHdvIGFsdGVybmF0aXZlIHRlbXBsYXRlcyB0aGF0IHVzZSB0aGlzCisgICAgIHN0eWxlIG9mIGNvZGUgLSBkaWZmZXJpbmcgcHJpbWFyaWx5IGluIHRoZSBkYXRhIHN0cnVjdHVyZQorICAgICB1c2VkIGZvciByZXByZXNlbnRpbmcgYSByb3cgb2YgdGhlIHRhYmxlCisKKyAgICAgIDEpIFRoZSBmaXJzdCBpcyB3ZWxsIHN1aXRlZCBmb3Igc2l0dWF0aW9ucyB3aGVyZSB0aGVyZSBpcyBhCisgICAgICAgICBuYXR1cmFsIGV4aXN0aW5nIGRhdGEgc3RydWN0dXJlLCBvciB3aGVyZSB0aGUgY29udGVudHMgb2YKKyAgICAgICAgIHRoZSB0YWJsZSBtYXkgbmVlZCB0byBiZSBpbnRlcnByZXRlZCBmb3Igc29tZSBhZGRpdGlvbmFsCisgICAgICAgICBwdXJwb3NlLCBvdGhlciB0aGFuIHNpbXBseSBpbXBsZW1lbnRpbmcgdGhlIHRhYmxlIGluIFNOTVAuCisKKyAgICAgICAgIFRoaXMgd2lsbCBwcm9kdWNlIGNvZGUgYmFzZWQgb24gdGhlICd0YWJsZV9kYXRhJyBoZXBsZXIuCisKKyAgICAgIDIpIFRoZSBzZWNvbmQgaXMgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQsIGJ1dCBpbnRyb2R1Y2VzIHNvbWUKKyAgICAgICAgIG1pbm9yIGNvbnN0cmFpbnRzIG9uIHRoZSBmb3JtIG9mIHRoZSBwZXItcm93IGRhdGEgc3RydWN0dXJlLgorCisgICAgICAgICBUaGlzIHdpbGwgcHJvZHVjZSBjb2RlIGJhc2VkIG9uIHRoZSAnY29udGFpbmVyJyBoZXBsZXIuCisKKyAgICAgIEBwcm9tcHQgJGFuczMgU2VsZWN0IHRoZSByb3cgcmVwcmVzZW50YXRpb24geW91IHdpc2ggdG8gdXNlOiBACisKKyAgICAgIEBpZiAkYW5zMyA9PSAxQAorICAgICAgIEBldmFsICR0ZW1wbGF0ZSA9IHRhYmxlX2RhdGFACisgICAgICBAZWxzaWYgJGFuczMgPT0gMkAKKyAgICAgICBAZXZhbCAkdGVtcGxhdGUgPSBjb250YWluZXJACisgICAgICBAZWxzZUAKKyAgICAgV0FSTklORzogVW5rbm93biByZXNwb25zZS4gIFNraXBwaW5nIGNvZGUgZ2VuZXJhdGlvbiBmb3IgdGFibGVzLgorICAgICAgQGVuZEAKKyAgIEBlbHNpZiAkYW5zMiA9PSAyQAorICAgICBAZXZhbCAkdGVtcGxhdGUgPSAiYXJyYXktdXNlciJACisgICBAZWxzaWYgJGFuczIgPT0gM0AKKyAgICAgQGV2YWwgJHRlbXBsYXRlID0gbWZkQAorICAgQGVsc2VACisgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KKyAgIEBlbmRACisKKyAgQGVsc2lmICRhbnMxICE9IDRACisgICAgIFdBUk5JTkc6IFVua25vd24gcmVzcG9uc2UuICBTa2lwcGluZyBjb2RlIGdlbmVyYXRpb24gZm9yIHRhYmxlcy4KKyAgQGVuZEAKKworICBAaWYgJHRlbXBsYXRlIG5lIE5PTkVACisgICAgIFRoZSBzYW1lIHRlbXBsYXRlIGNvZGUgY2FuIGJlIGdlbmVyYXRlZCB1c2luZworICAgICAgICAgICAgICAgICBtaWIyYyAtYyBtaWIyYy4ke3RlbXBsYXRlfS5jb25mICRuYW1lCisgICAgIEBydW4gbWliMmMuJHt0ZW1wbGF0ZX0uY29uZkAKKyAgQGVuZEAKIEBlbmRAICMgdGFibGVzCiAKLUBpZiBjb3VudF9ub3RpZmljYXRpb25zKCkgPiAwQAorQGlmICRudW1OID4gMEAKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIAkJIEdFTkVSQVRJTkcgQ09ERSBGT1IgTk9USUZJQ0FUSU9OUzoKICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLmNvbnRhaW5lci5jb25mIGIvbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYKaW5kZXggMjY2ZjAwNy4uZTc2NjIxZiAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuY29udGFpbmVyLmNvbmYKQEAgLTEsNCArMSw3IEBACiAjIyAtKi0gYyAtKi0KKyMjIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhciBDb3B5cmlnaHQgKEMpIEFwcGxlLCBJbmMuCisjIyBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCisjIyBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyMgRG8gdGhlIC5oIGZpbGUKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKQEAgLTM2LDggKzM5LDE1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvdGFibGVfY29udGFpbmVyLmg+CiAjaW5jbHVkZSAiJHtuYW1lfS5oIgogCisjaWZkZWYgJHtpLnVjfV9VU0VfQ0FDSEUKK3N0YXRpYyB2b2lkIF9jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpOworc3RhdGljIGludCBfY2FjaGVfbG9hZChuZXRzbm1wX2NhY2hlICogY2FjaGUsIHZvaWQgKnZtYWdpYyk7CisjZW5kaWYKKwogLyoqIEluaXRpYWxpemVzIHRoZSAkbmFtZSBtb2R1bGUgKi8KIHZvaWQKIGluaXRfJG5hbWUodm9pZCkKQEAgLTQ3LDkgKzU3LDkgQEAKICAgICBpbml0aWFsaXplX3RhYmxlXyRpKCk7CiAgIEBlbmRACiB9Ci0KKyMjCiBAZm9yZWFjaCAkaSB0YWJsZUAKLSAgIyBEZXRlcm1pbmUgdGhlIGZpcnN0L2xhc3QgY29sdW1uIG5hbWVzCisjIyBEZXRlcm1pbmUgdGhlIGZpcnN0L2xhc3QgY29sdW1uIG5hbWVzCiAgIEBldmFsICRmaXJzdF9jb2x1bW4gPSAiLSJACiAgIEBldmFsICRsYXN0X2NvbHVtbiA9ICItIkAKICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtNjUsMTIgKzc1LDE4IEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKLSAgICBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKLSAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7Ci0gICAgbmV0c25tcF9jb250YWluZXIgICAgICAgICAgICAgICAqY29udGFpbmVyOwotICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OworICAgIGNvbnN0IHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOworICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZyA9IE5VTEw7CisgICAgbmV0c25tcF9taWJfaGFuZGxlciAgICAgICAgICAgICAqaGFuZGxlciA9IE5VTEw7CisgICAgbmV0c25tcF9jb250YWluZXIgICAgICAgICAgICAgICAqY29udGFpbmVyID0gTlVMTDsKKyAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvID0gTlVMTDsKKyNpZmRlZiAke2kudWN9X1VTRV9DQUNIRQorICAgIG5ldHNubXBfY2FjaGUgICpjYWNoZSA9IE5VTEw7CisjZW5kaWYKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmluaXQiLCAiaW5pdGlhbGl6aW5nIHRhYmxlICRpXG4iKSk7CisgICAgCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICIkaSIsICAgICAke2l9X2hhbmRsZXIsCiAgICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4sCkBAIC04MCw5ICs5NiwyNiBAQAogICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWQogQGVuZEAKICAgICAgICAgICAgICAgKTsKKyAgICBpZiAoTlVMTCA9PSByZWcpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgY3JlYXRpbmcgaGFuZGxlciByZWdpc3RyYXRpb24gZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KK0BpZiAkaS5zZXR0YWJsZUAKKyAgICAvKiogc2hvdWxkIGEgc2V0IG9uIGEgbm9uLWV4aXN0ZW50IHJvdyBjcmVhdGUgYSBuZXcgb25lPyAqLworICAgIC8qKiByZWctPm1vZGVzIHw9IEhBTkRMRVJfQ0FOX05PVF9DUkVBVEU7ICovCitAZW5kQAogCi0gICAgY29udGFpbmVyICA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoICJ0YWJsZV9jb250YWluZXIiICk7CisgICAgY29udGFpbmVyICA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoICIkaTp0YWJsZV9jb250YWluZXIiICk7CisgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIGNvbnRhaW5lciBmb3IgJGlcbiIpOworICAgICAgICBnb3RvIGJhaWw7CisgICAgfQorCiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CiAgICAgbmV0c25tcF90YWJsZV9oZWxwZXJfYWRkX2luZGV4ZXModGFibGVfaW5mbywKICAgICBAZm9yZWFjaCAkaWR4IGluZGV4QAogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGlkeC50eXBlLCAgLyogaW5kZXg6ICRpZHggKi8KQEAgLTkxLDEzICsxMjQsOTIgQEAKICAgICB0YWJsZV9pbmZvLT5taW5fY29sdW1uID0gQ09MVU1OXyRmaXJzdF9jb2x1bW4udWM7CiAgICAgdGFibGVfaW5mby0+bWF4X2NvbHVtbiA9IENPTFVNTl8kbGFzdF9jb2x1bW4udWM7CiAgICAgCi0gICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfcmVnaXN0ZXIoIHJlZywgdGFibGVfaW5mbywgY29udGFpbmVyLCAwICk7CisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgKgorICAgICAqIGluamVjdCBjb250YWluZXJfdGFibGUgaGVscGVyCisgICAgICovCisgICAgaGFuZGxlciA9IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0KHRhYmxlX2luZm8sIGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEFCTEVfQ09OVEFJTkVSX0tFWV9ORVRTTk1QX0lOREVYKTsKKyAgICBpZiAoTlVMTCA9PSBoYW5kbGVyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGFsbG9jYXRpbmcgdGFibGUgcmVnaXN0cmF0aW9uIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPSBuZXRzbm1wX2luamVjdF9oYW5kbGVyKHJlZywgaGFuZGxlcikpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3IgaW5qZWN0aW5nIGNvbnRhaW5lcl90YWJsZSBoYW5kbGVyIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQsIHdpbGwgcmV1c2UgYmVsb3cgKi8KIAotICAgIC8qIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlICovCisjaWZkZWYgJHtpLnVjfV9VU0VfQ0FDSEUKKyAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAqCisgICAgICogaW5qZWN0IGNhY2hlIGhlbHBlcgorICAgICAqLworICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoMzAsICAgIC8qIHRpbWVvdXQgaW4gc2Vjb25kcyAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NhY2hlX2xvYWQsIF9jYWNoZV9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbik7CisKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgY2FjaGUgZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKyAgICBjYWNoZS0+ZmxhZ3MgPSBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQ7CisgICAgY2FjaGUtPm1hZ2ljID0gY29udGFpbmVyOworCisgICAgaGFuZGxlciA9IG5ldHNubXBfY2FjaGVfaGFuZGxlcl9nZXQoY2FjaGUpOworICAgIGlmIChOVUxMID09IGhhbmRsZXIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIGNyZWF0aW5nIGNhY2hlIGhhbmRsZXIgZm9yICRpXG4iKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9pbmplY3RfaGFuZGxlcihyZWcsIGhhbmRsZXIpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGluamVjdGluZyBjYWNoZSBoYW5kbGVyIGZvciAkaVxuIik7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisgICAgaGFuZGxlciA9IE5VTEw7IC8qIHJlZyBoYXMgaXQqLworI2VuZGlmCisKKyAgICAvKgorICAgICAqIHJlZ2lzdGVyIHRoZSB0YWJsZQorICAgICAqLworICAgIGlmIChTTk1QRVJSX1NVQ0NFU1MgIT0gbmV0c25tcF9yZWdpc3Rlcl90YWJsZShyZWcsIHRhYmxlX2luZm8pKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIHJlZ2lzdGVyaW5nIHRhYmxlIGhhbmRsZXIgZm9yICRpXG4iKTsKKyAgICAgICAgcmVnID0gTlVMTDsgLyogaXQgd2FzIGZyZWVkIGluc2lkZSBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlICovCisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEluaXRpYWxpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSB0YWJsZSBoZXJlCisgICAgICovCisKKyAgICAKKyAgICByZXR1cm47IC8qIG9rICovCisKKyAgICAvKgorICAgICAqIFNvbWUgZXJyb3Igb2NjdXJyZWQgZHVyaW5nIHJlZ2lzdHJhdGlvbi4gQ2xlYW4gdXAgYW5kIGJhaWwuCisgICAgICovCisgIGJhaWw6IC8qIG5vdCBvayAqLworICAgIAorICAgIGlmIChoYW5kbGVyKQorICAgICAgICBuZXRzbm1wX2hhbmRsZXJfZnJlZShoYW5kbGVyKTsKKworI2lmZGVmICR7aS51Y31fVVNFX0NBQ0hFCisgICAgaWYgKGNhY2hlKQorICAgICAgICBuZXRzbm1wX2NhY2hlX2ZyZWUoY2FjaGUpOworI2VuZGlmCisgICAgCisgICAgaWYgKHRhYmxlX2luZm8pCisgICAgICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fZnJlZSh0YWJsZV9pbmZvKTsKKworICAgIGlmIChjb250YWluZXIpCisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CisKKyAgICBpZiAocmVnKSAKKyAgICAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlKHJlZyk7CiB9CiAKLSAgICAvKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAqLwotc3RydWN0ICR7aX1fZW50cnkgeworLyoqIFR5cGljYWwgZGF0YSBzdHJ1Y3R1cmUgZm9yIGEgcm93IGVudHJ5ICovCit0eXBlZGVmIHN0cnVjdCAke2l9X2VudHJ5X3MgewogICAgIG5ldHNubXBfaW5kZXggb2lkX2luZGV4OwogCiAgICAgLyogSW5kZXggdmFsdWVzICovCkBAIC0xMzMsMTAgKzI0NSwxMCBAQAogICAgIEBlbmRACiAKICAgICBpbnQgICB2YWxpZDsKLX07Cit9ICR7aX1fZW50cnk7CiAKLS8qIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlICovCi1zdHJ1Y3QgJHtpfV9lbnRyeSAqCisvKiogY3JlYXRlIGEgbmV3IHJvdyBpbiB0aGUgdGFibGUgKi8KKyR7aX1fZW50cnkgKgogJHtpfV9jcmVhdGVFbnRyeShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCAKICAgQGZvcmVhY2ggJGlkeCBpbmRleEAKICAgICBAaWYgJGlkeC5uZWVkbGVuZ3RoQApAQCAtMTQ3LDkgKzI1OSw5IEBACiAgICAgQGVuZEAKICAgQGVuZEAKICAgICAgICAgICAgICAgICApIHsKLSAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAqZW50cnk7CisgICAgJHtpfV9lbnRyeSAqZW50cnk7CiAKLSAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc3RydWN0ICR7aX1fZW50cnkpOworICAgIGVudHJ5ID0gU05NUF9NQUxMT0NfVFlQRURFRigke2l9X2VudHJ5KTsKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm4gTlVMTDsKIApAQCAtMTY3LDEwICsyNzksMTAgQEAKICAgICByZXR1cm4gZW50cnk7CiB9CiAKLS8qIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLworLyoqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLwogdm9pZAogJHtpfV9yZW1vdmVFbnRyeShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyLCAKLSAgICAgICAgICAgICAgICAgc3RydWN0ICR7aX1fZW50cnkgKmVudHJ5KSB7CisgICAgICAgICAgICAgICAgICR7aX1fZW50cnkgKmVudHJ5KSB7CiAKICAgICBpZiAoIWVudHJ5KQogICAgICAgICByZXR1cm47ICAgIC8qIE5vdGhpbmcgdG8gcmVtb3ZlICovCkBAIC0xNzksNiArMjkxLDE1IEBACiAgICAgICAgIFNOTVBfRlJFRSggZW50cnkgKTsgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KIH0KIAorLyoqIHJlbW92ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZSAqLwordm9pZAorJHtpfV9mcmVlRW50cnkoJHtpfV9lbnRyeSAqZW50cnkpIHsKKworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKyAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7ICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCit9CisKIC8qKiBoYW5kbGVzIHJlcXVlc3RzIGZvciB0aGUgJGkgdGFibGUgKi8KIGludAogJHtpfV9oYW5kbGVyKApAQCAtMTg5LDEwICszMTAsMTMgQEAKIAogICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICpyZXF1ZXN0OwogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOwotICAgIG5ldHNubXBfdGFibGVfZGF0YSAgICAgICAgICp0YWJsZV9kYXRhOwogICAgIG5ldHNubXBfY29udGFpbmVyICAgICAgICAgICpjb250YWluZXI7Ci0gICAgc3RydWN0ICR7aX1fZW50cnkgICAgICAgICAgKnRhYmxlX2VudHJ5OworICAgICR7aX1fZW50cnkgICAgICAgICAgICAgICAgICp0YWJsZV9lbnRyeTsKK0BpZiAkaS5zZXR0YWJsZUAKICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICAgcmV0OworQGVuZEAKKworICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmhhbmRsZXIiLCAiUHJvY2Vzc2luZyByZXF1ZXN0ICglZClcbiIsIHJlcWluZm8tPm1vZGUpKTsKIAogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgICAgICAvKgpAQCAtMjAwLDkgKzMyNCwxOCBAQAogICAgICAgICAgKi8KICAgICBjYXNlIE1PREVfR0VUOgogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKICAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTIxNSw3ICszNDgsNyBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciopdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuKTsKICAgICAgICAgICAgIEBlbHNlQAogICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCkBAIC0yMzgsOSArMzcxLDE4IEBACiAgICAgICAgICAqLwogICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQApAQCAtMjUxLDcgKzM5Myw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gUlNfQUNUSVZFIDogUlNfTk9ORVhJU1RFTlQgKSk7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAotCSAgICAgICAgLyogb3IgcG9zc2libGMgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KKwkgICAgICAgIC8qIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCiAgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLCBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CiAgICAgICAgICAgICBAZWxzZUAKQEAgLTI3NywxMCArNDE5LDE4IEBACiAgICAgY2FzZSBNT0RFX1NFVF9SRVNFUlZFMjoKIEBpZiAkaS5jcmVhdGFibGVACiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7Ci0gICAgICAgICAgICBjb250YWluZXIgICA9ICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOwotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKIEBpZiAkaS5yb3dzdGF0dXNACkBAIC0yOTAsNiArNDQwLDE0IEBACiAgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgewogICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CiAgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgICA9ICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgY29udGFpbmVyIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICR7aX1fY3JlYXRlRW50cnkoY29udGFpbmVyCiAgIEBmb3JlYWNoICRpZHggaW5kZXhACiAgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKQEAgLTMxNyw2ICs0NzUsMTQgQEAKICAgICAgICAgICAgIEBlbmRACiAgICAgICAgICAgICBAZW5kQAogICAgICAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgICAgICBjb250YWluZXIgICA9ICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOworICAgICAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBjb250YWluZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgY29udGFpbmVyIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICR7aX1fY3JlYXRlRW50cnkoY29udGFpbmVyCiAgIEBmb3JlYWNoICRpZHggaW5kZXhACiAgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKQEAgLTM0NSwxMCArNTExLDI2IEBACiAgICAgY2FzZSBNT0RFX1NFVF9GUkVFOgogQGlmICRpLmNyZWF0YWJsZUAKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGNvbnRhaW5lciAgID0gICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKE5VTEwgPT0gY29udGFpbmVyKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgY29udGFpbmVyIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKIEBpZiAkaS5yb3dzdGF0dXNACkBAIC0zODIsOSArNTY0LDE4IEBACiAKICAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKHN0cnVjdCAke2l9X2VudHJ5ICopCisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiAgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC00MTcsOSArNjA4LDE4IEBACiBAaWYgJGkucm93c3RhdHVzQAogICAgICAgICAvKiBDaGVjayB0aGUgaW50ZXJuYWwgY29uc2lzdGVuY3kgb2YgYW4gYWN0aXZlIHJvdyAqLwogICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgewotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQpCisgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gKCR7aX1fZW50cnkgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3RfY29udGV4dChyZXF1ZXN0KTsKICAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKHJlcXVlc3QpOworICAgICAgICAgICAgaWYgKChOVUxMID09IHRhYmxlX2VudHJ5KSB8fCAoTlVMTCA9PSB0YWJsZV9pbmZvKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGVudHJ5IG9yIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUocmVxdWVzdC0+cmVxdWVzdHZiLCBTTk1QX0VSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDApOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQogICAgIAogICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKICAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKQEAgLTQ0MywxMCArNjQzLDI2IEBACiAKICAgICBjYXNlIE1PREVfU0VUX1VORE86CiAgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICBpZiAocmVxdWVzdC0+cHJvY2Vzc2VkKQorICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBjb250YWluZXIgICA9ICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0KHJlcXVlc3QpOwotICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoc3RydWN0ICR7aX1fZW50cnkgKikKKyAgICAgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkIG5vdCBleHRyYWN0IHRhYmxlIGNvbnRhaW5lciBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX0dFTkVSUiwgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICgke2l9X2VudHJ5ICopCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9leHRyYWN0X2NvbnRleHQocmVxdWVzdCk7CiAgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyhyZXF1ZXN0KTsKKyAgICAgICAgICAgIGlmICgoTlVMTCA9PSB0YWJsZV9lbnRyeSkgfHwgKE5VTEwgPT0gdGFibGVfaW5mbykpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBlbnRyeSBvciBpbmZvIGZvciAkaVxuIik7CisgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgU05NUF9FUlJfR0VORVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KICAgICAKICAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CiAgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC01MTgsMTAgKzczNCwxOCBAQAogICAgIGNhc2UgTU9ERV9TRVRfQ09NTUlUOgogQGlmICRpLmNyZWF0YWJsZUAKICAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKLSAgICAgICAgICAgIGNvbnRhaW5lciAgID0gICAgIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7Ci0gICAgICAgICAgICB0YWJsZV9lbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorICAgICAgICAgICAgaWYgKHJlcXVlc3QtPnByb2Nlc3NlZCkKKyAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAoJHtpfV9lbnRyeSAqKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOwogICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8ocmVxdWVzdCk7CisgICAgICAgICAgICBpZiAoKE5VTEwgPT0gdGFibGVfZW50cnkpIHx8IChOVUxMID09IHRhYmxlX2luZm8pKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGQgbm90IGV4dHJhY3QgdGFibGUgZW50cnkgb3IgaW5mbyBmb3IgJGlcbiIpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsIFNOTVBfRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CiAgICAgCiAgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgewogQGlmICRpLnJvd3N0YXR1c0AKQEAgLTU0NCw2ICs3NjgsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIFJTX0RFU1RST1k6CisgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2V4dHJhY3QocmVxdWVzdCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgZXh0cmFjdCB0YWJsZSBjb250YWluZXIgZm9yICRpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfR0VORVJSLCBOVUxMLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICR7aX1fcmVtb3ZlRW50cnkoY29udGFpbmVyLCB0YWJsZV9lbnRyeSApOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIEBlbmRACkBAIC01NjYsNCArNzk4LDY3IEBACiAgICAgfQogICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwogfQorCisjaWZkZWYgJHtpLnVjfV9VU0VfQ0FDSEUKKy8qKgorICogQGludGVybmFsCisgKi8KK3N0YXRpYyBpbnQKK19jYWNoZV9sb2FkKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqdm1hZ2ljKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXI7CisgICAgCisgICAgREVCVUdNU0dUTCgoImludGVybmFsOiR7aX06X2NhY2hlX2xvYWQiLCAiY2FsbGVkXG4iKSk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2FjaGUpIHx8IChOVUxMID09IGNhY2hlLT5tYWdpYykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImludmFsaWQgY2FjaGUgZm9yICR7aX1fY2FjaGVfbG9hZFxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyICopY2FjaGUtPm1hZ2ljOworCisgICAgLyoqIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBmb3IgYW4gaW52YWxpZCBvciBleHBpcmVkIGNhY2hlICovCisgICAgbmV0c25tcF9hc3NlcnQoKDAgPT0gY2FjaGUtPnZhbGlkKSB8fCAoMSA9PSBjYWNoZS0+ZXhwaXJlZCkpOworCisgICAgLyoKKyAgICAgKiBsb2FkIGNhY2hlIGhlcmUgKG9yIGNhbGwgZnVuY3Rpb24gdG8gZG8gaXQpCisgICAgICovCisgICAgLyoqIENPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCByZWNvcmQpOyAqLworCisgICAgcmV0dXJuIDA7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9sb2FkICovCisKKy8qKgorICogQEludGVybmFsCisgKi8KKy8qKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KK3N0YXRpYyB2b2lkCiske2l9X2ZyZWVFbnRyeV9jYigke2l9X2VudHJ5ICplbnRyeSwgdm9pZCAqbWFnaWMpIHsKKworICAgICR7aX1fZnJlZUVudHJ5KGVudHJ5KTsKK30KKworLyoqCisgKiBAaW50ZXJuYWwKKyAqLworc3RhdGljIHZvaWQKK19jYWNoZV9mcmVlKG5ldHNubXBfY2FjaGUgKiBjYWNoZSwgdm9pZCAqbWFnaWMpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKKworICAgIERFQlVHTVNHVEwoKCJpbnRlcm5hbDoke2l9Ol9jYWNoZV9mcmVlIiwgImNhbGxlZFxuIikpOworCisgICAgaWYgKChOVUxMID09IGNhY2hlKSB8fCAoTlVMTCA9PSBjYWNoZS0+bWFnaWMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJpbnZhbGlkIGNhY2hlIGluICR7aX1fY2FjaGVfZnJlZVxuIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY29udGFpbmVyID0gKG5ldHNubXBfY29udGFpbmVyICopIGNhY2hlLT5tYWdpYzsKKworICAgIC8qCisgICAgICogZW1wdHkgKGJ1dCBkb24ndCBmcmVlKSBjYWNoZSBoZXJlCisgICAgICovCisgICAgQ09OVEFJTkVSX0NMRUFSKGNvbnRhaW5lciwKKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKikke2l9X2ZyZWVFbnRyeV9jYiwKKyAgICAgICAgICAgICAgICAgICAgTlVMTCk7Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIF9jYWNoZV9mcmVlICovCisjZW5kaWYgLyogJHtpLnVjfV9VU0VfQ0FDSEUgKi8KIEBlbmRACmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5jcmVhdGUtZGF0YXNldC5jb25mIGIvbG9jYWwvbWliMmMuY3JlYXRlLWRhdGFzZXQuY29uZgppbmRleCAxMWZkNWQyLi45Y2Y3NWZkIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5jcmVhdGUtZGF0YXNldC5jb25mCisrKyBiL2xvY2FsL21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYKQEAgLTQzLDggKzQzLDcgQEAKIHZvaWQKIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCkKIHsKLSAgICBzdGF0aWMgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OwotICAgIHNpemVfdCAke2l9X29pZF9sZW4gPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CiAgICAgbmV0c25tcF90YWJsZV9kYXRhX3NldCAqdGFibGVfc2V0OwogCiAgICAgLyogY3JlYXRlIHRoZSB0YWJsZSBzdHJ1Y3R1cmUgaXRzZWxmICovCkBAIC03OCw3ICs3Nyw3IEBACiAgICAgICAgb2YgdGhlIHJlcXVlc3QsIGNoYW5nZSAke2l9X2hhbmRsZXIgdG8gIk5VTEwiICovCiAgICAgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9kYXRhX3NldChuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigiJGkiLCAke2l9X2hhbmRsZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fb2lkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X29pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgoJHtpfV9vaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9SV1JJVEUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX3NldCwgTlVMTCk7CiB9CmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy5pbnRfd2F0Y2guY29uZiBiL2xvY2FsL21pYjJjLmludF93YXRjaC5jb25mCmluZGV4IDc3ODdhMmYuLmVjYzVkMTAgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLmludF93YXRjaC5jb25mCisrKyBiL2xvY2FsL21pYjJjLmludF93YXRjaC5jb25mCkBAIC01MCwxMiArNTAsMTIgQEAKIGluaXRfJHtuYW1lfSh2b2lkKQogewogICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWc7Ci0gIG5ldHNubXBfd2F0Y2hlcl9pbmZvICAgICAgICAgKndpbmZvOwogCiAgIEBmb3JlYWNoICRpIHNjYWxhckAKICAgICBAaWYgISRpLm5lZWRsZW5ndGhACi0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyAkaS5jb21tYW9pZCB9OworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyAkaS5jb21tYW9pZCB9OwogICAgIEBlbmRACisgIHN0YXRpYyBuZXRzbm1wX3dhdGNoZXJfaW5mbyAke2l9X3dpbmZvOwogICBAZW5kQAogCiAgIC8qCkBAIC05MiwxMCArOTIsOSBAQAogICAgIEBlbHNlQAogICAgICAgICAgICAgICBIQU5ETEVSX0NBTl9ST05MWSk7CiAgICAgQGVuZEAKLSAgICB3aW5mbyA9IG5ldHNubXBfY3JlYXRlX3dhdGNoZXJfaW5mbygKLSAgICAgICAgICAgICAgICAmJGksIHNpemVvZigkaS5kZWNsKSwKLSAgICAgICAgICAgICAgICAgJGkudHlwZSwgV0FUQ0hFUl9GSVhFRF9TSVpFKTsKLSAgICBpZiAobmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhciggcmVnLCB3aW5mbyApIDwgMCApIHsKKyAgICBuZXRzbm1wX2luaXRfd2F0Y2hlcl9pbmZvKCYke2l9X3dpbmZvLCAmJGksIHNpemVvZigkaS5kZWNsKSwKKwkJCSAgICAgICRpLnR5cGUsIFdBVENIRVJfRklYRURfU0laRSk7CitpZiAobmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhciggcmVnLCAmJHtpfV93aW5mbyApIDwgMCApIHsKICAgICAgICAgc25tcF9sb2coIExPR19FUlIsICJGYWlsZWQgdG8gcmVnaXN0ZXIgd2F0Y2hlZCAkaSIgKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLml0ZXJhdGUuY29uZiBiL2xvY2FsL21pYjJjLml0ZXJhdGUuY29uZgppbmRleCAzYTU1ZDIzLi4zYTJiNWY3IDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5pdGVyYXRlLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuaXRlcmF0ZS5jb25mCkBAIC0xLDQgKzEsMzggQEAKICMjIC0qLSBjIC0qLQorIworQGlmICIkY2FjaGUiIGVxICIiIEAKK0BvcGVuIC1ACitUaGlzIGZyYW1ld29yayBjYW4gd29yayBpbiBvbmUgb2YgdHdvIHdheXM6CisKKyAgMSkgIEhvbGQgYSBsb2NhbCBjYWNoZWQgY29weSBvZiBzb21lIGV4dGVybmFsIGRhdGEKKyAgICAgIHdoaWNoIGlzIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGluY29taW5nIHJlcXVlc3RzLgorCisgIDIpICBRdWVyeSB0aGUgZXh0ZXJuYWwgZGF0YSBkaXJlY3RseSBmb3IgZWFjaCByZXF1ZXN0LgorCitUaGUgZmlyc3QgaXMgdHlwaWNhbGx5IG1vcmUgZWZmaWNpZW50LCBidXQgcmVzdWx0cyBpbgorc2xpZ2h0bHkgInN0YWxlIiBkYXRhIChkZXBlbmRpbmcgb24gdGhlIGV4cGlyYXRpb24gdGltZW91dAorZm9yIHRoZSBjYWNoZSkgYW5kIGdyZWF0ZXIgbWVtb3J5IHVzYWdlLiAgVGhlIHNlY29uZCBjYW4KK3Byb3ZpZGUgbW9yZSB1cC10by1kYXRlIGluZm9ybWF0aW9uLCBidXQgYXQgdGhlIGNvc3Qgb2YKK2hpZ2hlciBwcm9jZXNzaW5nIG92ZXJoZWFkcy4KKworV2hpY2ggaXMgbW9yZSBhcHByb3ByaWF0ZSBmb3IgeW91ciBuZWVkcz8KKyAgICBAcHJvbXB0ICRhbnMgU2VsZWN0IHlvdXIgY2hvaWNlIDogQAorICAgIEBpZiAkYW5zID09IDEgQAorICAgICAgQGV2YWwgJGNhY2hlID0gMUAKKyAgICBAZWxzaWYgJGFucyA9PSAyQAorICAgICAgQGV2YWwgJGNhY2hlID0gMEAKKyAgICBAZWxzZUAKK0ludmFsaWQgYW5zd2VyIC0gZ2VuZXJhdGluZyBjYWNoaW5nIGNvZGUKKyAgICAgIEBldmFsICRjYWNoZSA9IDFACisgICAgQGVuZEAKK0BlbHNlQCAgICAgICAjICAtUyBjYWNoZT17c29tZXRoaW5nfQorICAgIEBpZiAiJGNhY2hlIiBuZSAiMSIgJiYgIiRjYWNoZSIgbmUgIjAiIEAKK0BvcGVuIC1ACitJbnZhbGlkIHZhbHVlIGZvciAnY2FjaGUnICgkY2FjaGUpIC0gZ2VuZXJhdGluZyBjYWNoaW5nIGNvZGUKKyAgICAgIEBldmFsICRjYWNoZSA9IDFACisgICAgQGVuZEAKK0BlbmRACisKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMjIERvIHRoZSAuaCBmaWxlCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0xNyw3ICs1MSw3IEBACiBOZXRzbm1wX05vZGVfSGFuZGxlciAke2l9X2hhbmRsZXI7CiBOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnQgICR7aX1fZ2V0X2ZpcnN0X2RhdGFfcG9pbnQ7CiBOZXRzbm1wX05leHRfRGF0YV9Qb2ludCAgICR7aX1fZ2V0X25leHRfZGF0YV9wb2ludDsKLUBpZiAiJGNhY2hlIiBuZSAiIiBACitAaWYgIiRjYWNoZSIgPT0gMSBACiBOZXRzbm1wQ2FjaGVMb2FkICR7aX1fbG9hZDsKIE5ldHNubXBDYWNoZUZyZWUgJHtpfV9mcmVlOwogI2RlZmluZSAkaS51Y19USU1FT1VUICA2MApAQCAtNzIsMTIgKzEwNiwxNCBAQAogdm9pZAogaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07Ci0gICAgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OworICAgIGNvbnN0IHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKICAgICBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gICAgICAgICAgICppaW5mbzsKICAgICBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvICp0YWJsZV9pbmZvOwogCisgICAgREVCVUdNU0dUTCgoIiR7bmFtZX06aW5pdCIsICJpbml0aWFsaXppbmcgdGFibGUgJGlcbiIpKTsKKwogICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAogICAgICAgICAgICAgICAiJGkiLCAgICAgJHtpfV9oYW5kbGVyLAogICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuLApAQCAtMTAzLDcgKzEzOSw3IEBACiAgICAgaWluZm8tPnRhYmxlX3JlZ2luZm8gICAgICAgID0gdGFibGVfaW5mbzsKICAgICAKICAgICBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yKCByZWcsIGlpbmZvICk7Ci1AaWYgIiRjYWNoZSIgbmUgIiIgQAorQGlmICIkY2FjaGUiID09IDEgQAogICAgIG5ldHNubXBfaW5qZWN0X2hhbmRsZXJfYmVmb3JlKCByZWcsIAogICAgICAgICBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyKCRpLnVjX1RJTUVPVVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9sb2FkLCAke2l9X2ZyZWUsCkBAIC0yMTEsNyArMjQ3LDcgQEAKICAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7ICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCiB9CiAKLUBpZiAiJGNhY2hlIiBuZSAiIiBACitAaWYgIiRjYWNoZSIgPT0gMSBACiAvKiBFeGFtcGxlIGNhY2hlIGhhbmRsaW5nIC0gc2V0IHVwIGxpbmtlZCBsaXN0IGZyb20gYSBzdWl0YWJsZSBmaWxlICovCiBpbnQKICR7aX1fbG9hZCggbmV0c25tcF9jYWNoZSAqY2FjaGUsIHZvaWQgKnZtYWdpYyApIHsKQEAgLTMwNyw2ICszNDMsOCBAQAogICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOwogICAgIHN0cnVjdCAke2l9X2VudHJ5ICAgICAgICAgICp0YWJsZV9lbnRyeTsKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmhhbmRsZXIiLCAiUHJvY2Vzc2luZyByZXF1ZXN0ICglZClcbiIsIHJlcWluZm8tPm1vZGUpKTsKKwogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgICAgICAvKgogICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCkBAIC0zMjgsNyArMzY2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKXRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbik7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLApAQCAtMzY0LDcgKzQwMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gUlNfQUNUSVZFIDogUlNfTk9ORVhJU1RFTlQgKSk7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAotCSAgICAgICAgLyogb3IgcG9zc2libGMgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KKwkgICAgICAgIC8qIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCiAgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLCBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CiAgICAgICAgICAgICBAZWxzZUAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYgYi9sb2NhbC9taWIyYy5pdGVyYXRlX2FjY2Vzcy5jb25mCmluZGV4IGRjN2VhZTMuLmEzOGFjMjAgMTAwNjQ0Ci0tLSBhL2xvY2FsL21pYjJjLml0ZXJhdGVfYWNjZXNzLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZgpAQCAtNzcsMTEgKzc3LDEzIEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CiAgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKICAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpteV9oYW5kbGVyOwogICAgIG5ldHNubXBfaXRlcmF0b3JfaW5mbyAqaWluZm87CiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTppbml0IiwgImluaXRpYWxpemluZyB0YWJsZSAkaVxuIikpOworCiAgICAgLyoqIGNyZWF0ZSB0aGUgdGFibGUgcmVnaXN0cmF0aW9uIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMgKi8KICAgICB0YWJsZV9pbmZvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvKTsKICAgICBpaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9pdGVyYXRvcl9pbmZvKTsKQEAgLTExMiw3ICsxMTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKIAogICAgIC8qKiBEZWZpbmUgdGhlIG1pbmltdW0gYW5kIG1heGltdW0gYWNjZXNzaWJsZSBjb2x1bW5zLiAgVGhpcwotICAgICAgICBvcHRpbWl6ZXMgcmV0cml2YWwuICovCisgICAgICAgIG9wdGltaXplcyByZXRyaWV2YWwuICovCiAgICAgQGV2YWwgJG1pbnYgPSAweGZmZmZmZmZmQAogICAgIEBldmFsICRtYXh2ID0gMEAKICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACkBAIC0xNzcsMTQgKzE3OSwxNCBAQAogCiAgICAgdm9pZCAqZGF0YV9jb250ZXh0ID0gTlVMTDsKIAotICAgIG9pZCAqc3VmZml4OwotICAgIHNpemVfdCBzdWZmaXhfbGVuOwotCiAgICAgLyoqIGNvbHVtbiBhbmQgcm93IGluZGV4IGVuY29kZWQgcG9ydGlvbiAqLwotICAgIHN1ZmZpeCA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWUgKyByZWdpbmZvLT5yb290b2lkX2xlbiArIDE7Ci0gICAgc3VmZml4X2xlbiA9IHJlcXVlc3RzLT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoIC0KKyAgICBjb25zdCBvaWQgKiBjb25zdCBzdWZmaXggPQorICAgICAgICByZXF1ZXN0cy0+cmVxdWVzdHZiLT5uYW1lICsgcmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxOworICAgIGNvbnN0IHNpemVfdCBzdWZmaXhfbGVuID0gcmVxdWVzdHMtPnJlcXVlc3R2Yi0+bmFtZV9sZW5ndGggLQogICAgICAgICAocmVnaW5mby0+cm9vdG9pZF9sZW4gKyAxKTsKICAgICAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTpoYW5kbGVyIiwgIlByb2Nlc3NpbmcgcmVxdWVzdCAoJWQpXG4iLCByZXFpbmZvLT5tb2RlKSk7CisKICAgICBmb3IocmVxdWVzdCA9IHJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0ID0gcmVxdWVzdC0+bmV4dCkgewogICAgICAgICB2YXIgPSByZXF1ZXN0LT5yZXF1ZXN0dmI7CiAgICAgICAgIGlmIChyZXF1ZXN0LT5wcm9jZXNzZWQgIT0gMCkKQEAgLTI0Miw4ICsyNDQsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwgPSBnZXRfJGMoZGF0YV9jb250ZXh0LCAmcmV0dmFsX2xlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChyZXR2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUodmFyLCAkYy50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKSByZXR2YWwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWxfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR2YWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dmFsX2xlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLm5vdGlmeS5jb25mIGIvbG9jYWwvbWliMmMubm90aWZ5LmNvbmYKaW5kZXggZDIxMTYxOS4uNzdmMzMzMCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMubm90aWZ5LmNvbmYKKysrIGIvbG9jYWwvbWliMmMubm90aWZ5LmNvbmYKQEAgLTMwLDIwICszMCwyMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L25ldC1zbm1wLWFnZW50LWluY2x1ZGVzLmg+CiAjaW5jbHVkZSAiJHtuYW1lfS5oIgogCi1zdGF0aWMgb2lkIHNubXB0cmFwX29pZFtdID0gezEsIDMsIDYsIDEsIDYsIDMsIDEsIDEsIDQsIDEsIDB9OworZXh0ZXJuIGNvbnN0IG9pZCBzbm1wdHJhcF9vaWRbXTsKK2V4dGVybiBjb25zdCBzaXplX3Qgc25tcHRyYXBfb2lkX2xlbjsKIAogQGZvcmVhY2ggJGkgbm90aWZpY2F0aW9uc0AKIGludAogc2VuZF8ke2l9X3RyYXAoIHZvaWQgKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAgKnZhcl9saXN0ID0gTlVMTDsKLSAgICBvaWQgJHtpfV9vaWRbXSA9IHsgJGkuY29tbWFvaWQgfTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHsgJGkuY29tbWFvaWQgfTsKICAgICBAZm9yZWFjaCAkdiB2YXJiaW5kc0AKICAgICBAaWYgJHYuaXNzY2FsYXJACi0gICAgb2lkICR7dn1fb2lkW10gPSB7ICR2LmNvbW1hb2lkLCAwIH07CisgICAgY29uc3Qgb2lkICR7dn1fb2lkW10gPSB7ICR2LmNvbW1hb2lkLCAwIH07CiAgICAgQGVuZEAKICAgICBAaWYgISR2Lmlzc2NhbGFyQAotICAgIG9pZCAke3Z9X29pZFtdID0geyAkdi5jb21tYW9pZCwgLyogaW5zZXJ0IGluZGV4IGhlcmUgKi8gfTsKKyAgICBjb25zdCBvaWQgJHt2fV9vaWRbXSA9IHsgJHYuY29tbWFvaWQsIC8qIGluc2VydCBpbmRleCBoZXJlICovIH07CiAgICAgQGVuZEAKICAgICBAZW5kQAogCkBAIC01MSw3ICs1Miw3IEBACiAgICAgICogU2V0IHRoZSBzbm1wVHJhcE9pZC4wIHZhbHVlCiAgICAgICovCiAgICAgc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyX2xpc3QsCi0gICAgICAgIHNubXB0cmFwX29pZCwgT0lEX0xFTkdUSChzbm1wdHJhcF9vaWQpLAorICAgICAgICBzbm1wdHJhcF9vaWQsIHNubXB0cmFwX29pZF9sZW4sCiAgICAgICAgIEFTTl9PQkpFQ1RfSUQsCiAgICAgICAgICR7aX1fb2lkLCBzaXplb2YoJHtpfV9vaWQpKTsKICAgICAKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLm9sZC1hcGkuY29uZiBiL2xvY2FsL21pYjJjLm9sZC1hcGkuY29uZgppbmRleCA4ZGFmOGYxLi44ZmEyNzBiIDEwMDY0NAotLS0gYS9sb2NhbC9taWIyYy5vbGQtYXBpLmNvbmYKKysrIGIvbG9jYWwvbWliMmMub2xkLWFwaS5jb25mCkBAIC02OSwxMCArNjksMTIgQEAKICAgICBAZXZhbCAkc3VmZml4bGVuID0gJGkub2lkbGVuZ3RoIC0gJG5hbWUub2lkbGVuZ3RoQAogI2RlZmluZSAkaS51YwkJJG1hZ2ljCiAgICAgQGlmICRpLnNldHRhYmxlQAoteyRpLnVjLCAgJGkudHlwZSwgIFJXUklURSwgIHZhcl8ke25hbWV9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4IH19LAoreyRpLnVjLCAgJGkudHlwZSwgIE5FVFNOTVBfT0xEQVBJX1JXUklURSwKKyB2YXJfJHtuYW1lfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCB9fSwKICAgICBAZW5kQAogICAgIEBpZiAhJGkuc2V0dGFibGVACi17JGkudWMsICAkaS50eXBlLCAgUk9OTFkgLCAgdmFyXyR7bmFtZX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggfX0sCit7JGkudWMsICAkaS50eXBlLCAgTkVUU05NUF9PTERBUElfUk9OTFksCisgdmFyXyR7bmFtZX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggfX0sCiAgICAgQGVuZEAKIEBlbmRACiAKQEAgLTkxLDEwICs5MywxMiBAQAogICAgIEBldmFsICRtYWdpYyA9ICRtYWdpYyArIDFACiAjZGVmaW5lICRjLnVjCQkkbWFnaWMKICAgICBAaWYgJGMuc2V0dGFibGVACi17JGMudWMsICAkYy50eXBlLCAgUldSSVRFLCAgdmFyXyR7aX0sICRzdWZmaXhsZW4sICB7ICRzdWZmaXggJGN0bXAgMSwgJGMuc3ViaWQgfX0sCit7JGMudWMsICAkYy50eXBlLCAgTkVUU05NUF9PTERBUElfUldSSVRFLAorIHZhcl8ke2l9LCAkc3VmZml4bGVuLCAgeyAkc3VmZml4ICRjdG1wIDEsICRjLnN1YmlkIH19LAogICAgIEBlbmRACiAgICAgQGlmICEkYy5zZXR0YWJsZUAKLXskYy51YywgICRjLnR5cGUsICBST05MWSwgICB2YXJfJHtpfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCAkY3RtcCAxLCAkYy5zdWJpZCB9fSwKK3skYy51YywgICRjLnR5cGUsICBORVRTTk1QX09MREFQSV9ST05MWSwKKyB2YXJfJHtpfSwgJHN1ZmZpeGxlbiwgIHsgJHN1ZmZpeCAkY3RtcCAxLCAkYy5zdWJpZCB9fSwKICAgICBAZW5kQAogIEBlbmRACiBAZW5kQApkaWZmIC0tZ2l0IGEvbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmYgYi9sb2NhbC9taWIyYy5yYXctdGFibGUuY29uZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZDg4ZmRiCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWliMmMucmF3LXRhYmxlLmNvbmYKQEAgLTAsMCArMSw2MTIgQEAKKyMjIC0qLSBjIC0qLQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMgRG8gdGhlIC5oIGZpbGUKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK0BvcGVuICR7bmFtZX0uaEAKKy8qCisgKiBOb3RlOiB0aGlzIGZpbGUgb3JpZ2luYWxseSBhdXRvLWdlbmVyYXRlZCBieSBtaWIyYyB1c2luZworICogICRJZDogbWliMmMucmF3LXRhYmxlLmNvbmYgMTc0MzYgMjAwOS0wMy0zMSAxNToxMjoxOVogZHRzMTIgJAorICovCisjaWZuZGVmICRuYW1lLnVjX0gKKyNkZWZpbmUgJG5hbWUudWNfSAorCit2b2lkIGluaXRfJG5hbWUodm9pZCk7CisKKyNlbmRpZiAvKiAkbmFtZS51Y19IICovCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyBEbyB0aGUgLmMgZmlsZQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworQG9wZW4gJHtuYW1lfS5jQAorLyoKKyAqIE5vdGU6IHRoaXMgZmlsZSBvcmlnaW5hbGx5IGF1dG8tZ2VuZXJhdGVkIGJ5IG1pYjJjIHVzaW5nCisgKiAgJElkOiBtaWIyYy5yYXctdGFibGUuY29uZiAxNzQzNiAyMDA5LTAzLTMxIDE1OjEyOjE5WiBkdHMxMiAkCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKyNpbmNsdWRlICIke25hbWV9LmgiCisKK0Bmb3JlYWNoICRpIHRhYmxlQAorICAjIyBEZXRlcm1pbmUgdGhlIGZpcnN0L2xhc3QgY29sdW1uIG5hbWVzCisgIEBldmFsICRmaXJzdF9jb2x1bW4gPSAiLSJACisgIEBldmFsICRsYXN0X2NvbHVtbiA9ICItIkAKKyAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgIEBpZiAkYy5yZWFkYWJsZUAKKyAgICAgIEBpZiAiJGZpcnN0X2NvbHVtbiIgZXEgIi0iQAorICAgICAgICBAZXZhbCAkZmlyc3RfY29sdW1uID0gJGNACisgICAgICBAZW5kQAorICAgICAgQGV2YWwgJGxhc3RfY29sdW1uID0gJGNACisgICAgQGVuZEAKKyAgQGVuZEAKKworLyogY29sdW1uIG51bWJlciBkZWZpbml0aW9ucyBmb3IgdGFibGUgJGkgKi8KKyAgQGZvcmVhY2ggJGMgY29sdW1uQAorI2RlZmluZSBDT0xVTU5fJGMudWMJCSRjLnN1YmlkCisgIEBlbmRACisKKyAgICAvKiBUeXBpY2FsIGRhdGEgc3RydWN0dXJlIGZvciBhIHJvdyBlbnRyeSAqLworc3RydWN0ICR7aX1fZW50cnkgeworICAgIC8qIEluZGV4IHZhbHVlcyAqLworICAgIEBmb3JlYWNoICRpZHggaW5kZXhACisgICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACisgICAgJGlkeC5kZWNsICRpZHhbTk5OXTsKKyAgICBzaXplX3QgJHtpZHh9X2xlbjsKKyAgICAgQGVsc2VACisgICAgJGlkeC5kZWNsICRpZHg7CisgICAgIEBlbmRACisgICAgQGVuZEAKKworICAgIC8qIENvbHVtbiB2YWx1ZXMgKi8KKyAgICBAZm9yZWFjaCAkYyBub25pbmRleEAKKyAgICBAaWYgJGMucmVhZGFibGVACisgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICRjLmRlY2wgJGNbTk5OXTsKKyAgICBzaXplX3QgJHtjfV9sZW47CisgICAgIEBlbHNlQAorICAgICRjLmRlY2wgJGM7CisgICAgIEBlbmRACisgICAgIEBpZiAkYy5zZXR0YWJsZUAKKyAgICAgIEBpZiAhJGMucm93c3RhdHVzQAorICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICRjLmRlY2wgb2xkXyRjW05OTl07CisgICAgc2l6ZV90IG9sZF8ke2N9X2xlbjsKKyAgICAgICBAZWxzZUAKKyAgICAkYy5kZWNsIG9sZF8kYzsKKyAgICAgICBAZW5kQAorICAgICAgQGVuZEAKKyAgICAgQGVuZEAKKyAgICBAZW5kQAorICAgIEBlbmRACisKKyAgICBpbnQgICB2YWxpZDsKK307CisKKy8qIGNyZWF0ZSBhIG5ldyByb3cgaW4gdGhlIHRhYmxlICovCitzdGF0aWMgc3RydWN0ICR7aX1fZW50cnkgKgorJHtpfV9jcmVhdGVFbnRyeSggaW50IGR1bW15CisgIEBmb3JlYWNoICRpZHggaW5kZXhACisgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICAgLCAkaWR4LmRlY2wqICRpZHgKKyAgICAgICAgICAgICAgICAgLCBzaXplX3QgJHtpZHh9X2xlbgorICAgIEBlbHNlQAorICAgICAgICAgICAgICAgICAsICRpZHguZGVjbCAgJGlkeAorICAgIEBlbmRACisgIEBlbmRACisgICAgICAgICAgICAgICAgKSB7CisgICAgc3RydWN0ICR7aX1fZW50cnkgKmVudHJ5OworCisgICAgZW50cnkgPSBTTk1QX01BTExPQ19UWVBFREVGKHN0cnVjdCAke2l9X2VudHJ5KTsKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIFhYWCAtIGluc2VydCBlbnRyeSBpbnRvIGxvY2FsIGRhdGEgc3RydWN0dXJlICovCisgICAgcmV0dXJuIGVudHJ5OworfQorCisvKiByZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUgKi8KK3N0YXRpYyB2b2lkCiske2l9X3JlbW92ZUVudHJ5KHN0cnVjdCAke2l9X2VudHJ5ICplbnRyeSkgeworICAgIGlmICghZW50cnkpCisgICAgICAgIHJldHVybjsgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KKworICAgIC8qIFhYWCAtIHJlbW92ZSBlbnRyeSBmcm9tIGxvY2FsIGRhdGEgc3RydWN0dXJlICovCisKKyAgICBpZiAoZW50cnkpCisgICAgICAgIFNOTVBfRlJFRSggZW50cnkgKTsgICAvKiBYWFggLSByZWxlYXNlIGFueSBvdGhlciBpbnRlcm5hbCByZXNvdXJjZXMgKi8KK30KKworCisvKiogZGV0ZXJtaW5lIHRoZSBhcHByb3ByaWF0ZSByb3cgZm9yIGFuIGV4YWN0IHJlcXVlc3QgKi8KK3N0YXRpYyBzdHJ1Y3QgJHtpfV9lbnRyeSAqCiske2l9X2dldF9lbnRyeSggbmV0c25tcF92YXJpYWJsZV9saXN0ICppbmRleGVzICkgeworICAgIHN0cnVjdCAke2l9X2VudHJ5ICpyb3cgPSBOVUxMOworCisgICAgLyogWFhYIC0gVXNlIHRoZSAnaW5kZXhlcycgcGFyYW1ldGVyIHRvIHJldHJpZXZlIHRoZSBkYXRhCisgICAgICAgc3RydWN0dXJlIGZvciB0aGUgcmVxdWVzdGVkIHJvdywgYW5kIHJldHVybiB0aGlzLiAqLworICAgIHJldHVybiByb3c7Cit9CisKKy8qKiBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIHJvdyBmb3IgYW4gZnV6enkgcmVxdWVzdCAqLworc3RhdGljIHN0cnVjdCAke2l9X2VudHJ5ICoKKyR7aX1fZ2V0X25leHRfZW50cnkoIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8sCisgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3JlcXVlc3RfaW5mbyAgICAgICAgICpyZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uLAorICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICAgICAgICAqaW5kZXhlcyApIHsKKyAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAqcm93ID0gTlVMTDsKKyAgICBvaWQgICAgICAgICAgICAgYnVpbGRfc3BhY2VbTUFYX09JRF9MRU5dOworICAgIHNpemVfdCAgICAgICAgICBidWlsZF9zcGFjZV9sZW4gPSAwOworICAgIHNpemVfdCAgICAgICAgICBpbmRleF9vaWRfbGVuID0gMDsKKworICAgIC8qIFhYWCAtIFVzZSB0aGUgJ2luZGV4ZXMnIHBhcmFtZXRlciB0byBpZGVudGlmeSB0aGUKKyAgICAgICAgICAgICBuZXh0IHJvdyBpbiB0aGUgdGFibGUuLi4uICovCisKKyAgICAvKiBYWFggICAuLi4uIHVwZGF0ZSB0aGUgJ2luZGV4ZXMnIHBhcmFtZXRlciB3aXRoIHRoZQorICAgICAgICAgICAgIGFwcHJvcHJpYXRlIGluZGV4IHZhbHVlcyAuLi4gKi8KKworICAgIC8qIC4uLiBhbmQgdXBkYXRlIHRoZSByZXF1ZXN0ZWQgT0lEIHRvIG1hdGNoIHRoaXMgaW5zdGFuY2UgKi8KKyAgICBtZW1jcHkoYnVpbGRfc3BhY2UsIHJlZ2luZm8tPnJvb3RvaWQsICAgLyogcmVnaXN0ZXJlZCBvaWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2luZm8tPnJvb3RvaWRfbGVuICogc2l6ZW9mKG9pZCkpOworICAgIGJ1aWxkX3NwYWNlX2xlbiA9IHJlZ2luZm8tPnJvb3RvaWRfbGVuOworICAgIGJ1aWxkX3NwYWNlW2J1aWxkX3NwYWNlX2xlbisrXSA9IDE7ICAvKiBlbnRyeSAqLworICAgIGJ1aWxkX3NwYWNlW2J1aWxkX3NwYWNlX2xlbisrXSA9IGNvbHVtbjsgLyogY29sdW1uICovCisgICAgYnVpbGRfb2lkX25vYWxsb2MoYnVpbGRfc3BhY2UgKyBidWlsZF9zcGFjZV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgTUFYX09JRF9MRU4gLSBidWlsZF9zcGFjZV9sZW4sICZpbmRleF9vaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIDAsIGluZGV4ZXMpOworICAgIHNubXBfc2V0X3Zhcl9vYmppZChyZXF1ZXN0LT5yZXF1ZXN0dmIsIGJ1aWxkX3NwYWNlLAorICAgICAgICAgICAgICAgICAgICAgICBidWlsZF9zcGFjZV9sZW4gKyBpbmRleF9vaWRfbGVuKTsKKworICAgIC8qICBGaW5hbGx5LCByZXR1cm4gdGhlIGRhdGEgc3RydWN0dXJlIGZvciB0aGlzIHJvdyAqLworICAgIHJldHVybiByb3c7Cit9CisKKworLyoqIGhhbmRsZXMgcmVxdWVzdHMgZm9yIHRoZSAkaSB0YWJsZSAqLworc3RhdGljIGludAorJHtpfV9oYW5kbGVyKAorICAgIG5ldHNubXBfbWliX2hhbmRsZXIgICAgICAgICAgICAgICAqaGFuZGxlciwKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICAgKnJlZ2luZm8sCisgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gICAgICAgICpyZXFpbmZvLAorICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICAgICAgICAqcmVxdWVzdHMpIHsKKworICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICAgICAgICpyZXF1ZXN0OworICAgIG5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvICp0YWJsZV9pbmZvOworICAgIHN0cnVjdCAke2l9X2VudHJ5ICAgICAgICAgICp0YWJsZV9lbnRyeTsKKyAgICBAaWYgJGkuc2V0dGFibGVACisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKKyAgICBAZW5kQAorCisgICAgc3dpdGNoIChyZXFpbmZvLT5tb2RlKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJlYWQtc3VwcG9ydAorICAgICAgICAgKi8KKyAgICBjYXNlIE1PREVfR0VUOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMucmVhZGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvcihyZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNISU5TVEFOQ0UpOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbik7CisgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMpOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX05PU1VDSE9CSkVDVCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfR0VUTkVYVDoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X25leHRfZW50cnkoIHJlZ2luZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2luZm8tPmNvbG51bSwgdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5yZWFkYWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9OT1NVQ0hJTlNUQU5DRSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuKTsKKyAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyk7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IocmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfTk9TVUNIT0JKRUNUKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworQGlmICRpLnNldHRhYmxlQAorICAgICAgICAvKgorICAgICAgICAgKiBXcml0ZS1zdXBwb3J0CisgICAgICAgICAqLworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTE6CisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5zZXR0YWJsZUAKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgQGlmICRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3Jvd3N0YXR1cyhyZXF1ZXN0LT5yZXF1ZXN0dmIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gUlNfQUNUSVZFIDogUlNfTk9ORVhJU1RFTlQgKSk7CisgICAgICAgICAgICBAZWxzZUAKKyAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorCSAgICAgICAgLyogb3IgcG9zc2libHkgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplKAorICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgIC8qIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX2ludF9yYW5nZScgKi8KKyAgICAgICAgICAgICAgICByZXQgPSBuZXRzbm1wX2NoZWNrX3ZiX2ludCggcmVxdWVzdC0+cmVxdWVzdHZiICk7CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBpZiAoIHJldCAhPSBTTk1QX0VSUl9OT0VSUk9SICkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0LCByZXQgKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfTk9UV1JJVEFCTEUgKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBicmVhazsKKworICAgIGNhc2UgTU9ERV9TRVRfUkVTRVJWRTI6CitAaWYgJGkuY3JlYXRhYmxlQAorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyA9IG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworQGlmICRpLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5yb3dzdGF0dXNACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKCpyZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5pbnRlZ2VyKSB7CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRHTzoKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFORFdBSVQ6CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gJHtpfV9jcmVhdGVFbnRyeSggMAorICBAZm9yZWFjaCAkaWR4IGluZGV4QAorICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgICAgICAgICAsICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuc3RyaW5nCisgICAgICAgICAgICAgICAgICAgICAgICAsICB0YWJsZV9pbmZvLT5pbmRleGVzLT52YWxfbGVuCisgICAgQGVsc2VACisgICAgICAgICAgICAgICAgICAgICAgICAsICp0YWJsZV9pbmZvLT5pbmRleGVzLT52YWwuaW50ZWdlcgorICAgIEBlbmRACisgIEBlbmRACisgICAgICAgICAgICAgICAgICAgICAgICApOworICAgICAgICAgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2V0X3JlcXVlc3RfZXJyb3IoIHJlcWluZm8sIHJlcXVlc3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFICk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorQGVsc2VACisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMuY3JlYXRhYmxlQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBpZiAoICF0YWJsZV9lbnRyeSApIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnkgPSAke2l9X2NyZWF0ZUVudHJ5KCAwCisgIEBmb3JlYWNoICRpZHggaW5kZXhACisgICAgQGlmICRpZHgubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICAgICAgICAgICwgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5zdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgICAgICwgIHRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbF9sZW4KKyAgICBAZWxzZUAKKyAgICAgICAgICAgICAgICAgICAgICAgICwgKnRhYmxlX2luZm8tPmluZGV4ZXMtPnZhbC5pbnRlZ2VyCisgICAgQGVuZEAKKyAgQGVuZEAKKyAgICAgICAgICAgICAgICAgICAgICAgICk7CisgICAgICAgICAgICAgICAgICAgIGlmICggIXRhYmxlX2VudHJ5ICkgeworICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvciggcmVxaW5mbywgcmVxdWVzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfRVJSX1JFU09VUkNFVU5BVkFJTEFCTEUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworQGVuZEAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorQGVuZEAKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0ZSRUU6CitAaWYgJGkuY3JlYXRhYmxlQAorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CitAaWYgJGkucm93c3RhdHVzQAorICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRhYmxlX2VudHJ5ICYmICF0YWJsZV9lbnRyeS0+dmFsaWQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fcmVtb3ZlRW50cnkodGFibGVfZW50cnkpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACitAZWxzZUAKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5jcmVhdGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGlmICggdGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgJHtpfV9yZW1vdmVFbnRyeSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworQGVuZEAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorQGVuZEAKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0FDVElPTjoKKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnNldHRhYmxlQAorICAgICAgICAgICAgQGlmICEkYy5yb3dzdGF0dXNACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT5vbGRfJGMsCisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8ke2N9X2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW47CisgICAgICAgICAgICAgICAgbWVtc2V0KCB0YWJsZV9lbnRyeS0+JGMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCB0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW4pOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmItPnZhbF9sZW47CisgICAgICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYyA9IHRhYmxlX2VudHJ5LT4kYzsKKyAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMgICAgID0gKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXI7CisgICAgICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorQGlmICRpLnJvd3N0YXR1c0AKKyAgICAgICAgLyogQ2hlY2sgdGhlIGludGVybmFsIGNvbnNpc3RlbmN5IG9mIGFuIGFjdGl2ZSByb3cgKi8KKyAgICAgICAgZm9yIChyZXF1ZXN0PXJlcXVlc3RzOyByZXF1ZXN0OyByZXF1ZXN0PXJlcXVlc3QtPm5leHQpIHsKKyAgICAgICAgICAgIHRhYmxlX2luZm8gID0gICAgIG5ldHNubXBfZXh0cmFjdF90YWJsZV9pbmZvKCByZXF1ZXN0KTsKKyAgICAgICAgICAgIHRhYmxlX2VudHJ5ID0gICAgICR7aX1fZ2V0X2VudHJ5KCB0YWJsZV9pbmZvLT5pbmRleGVzICk7CisgICAgCisgICAgICAgICAgICBzd2l0Y2ggKHRhYmxlX2luZm8tPmNvbG51bSkgeworICAgICAgICAgICAgQGZvcmVhY2ggJGMgY29sdW1uQAorICAgICAgICAgICAgQGlmICRjLnJvd3N0YXR1c0AKKyAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgorICAgICAgICAgICAgICAgIHN3aXRjaCAoKnJlcXVlc3QtPnJlcXVlc3R2Yi0+dmFsLmludGVnZXIpIHsKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0FDVElWRToKKyAgICAgICAgICAgICAgICBjYXNlIFJTX0NSRUFURUFOREdPOgorICAgICAgICAgICAgICAgICAgICBpZiAoLyogWFhYICovKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yKCByZXFpbmZvLCByZXF1ZXN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUUgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICB9CisgICAgICAgIH0KK0BlbmRACisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBNT0RFX1NFVF9VTkRPOgorICAgICAgICBmb3IgKHJlcXVlc3Q9cmVxdWVzdHM7IHJlcXVlc3Q7IHJlcXVlc3Q9cmVxdWVzdC0+bmV4dCkgeworICAgICAgICAgICAgdGFibGVfaW5mbyAgPSAgICAgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oIHJlcXVlc3QpOworICAgICAgICAgICAgdGFibGVfZW50cnkgPSAgICAgJHtpfV9nZXRfZW50cnkoIHRhYmxlX2luZm8tPmluZGV4ZXMgKTsKKyAgICAKKyAgICAgICAgICAgIHN3aXRjaCAodGFibGVfaW5mby0+Y29sbnVtKSB7CisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMuc2V0dGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKK0BpZiAkaS5yb3dzdGF0dXNACisgIEBpZiAkYy5yb3dzdGF0dXNACisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICBpZiAodGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgJHtpfV9yZW1vdmVFbnRyeSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgIEBlbHNlQAorICAgICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAorICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih0YWJsZV9lbnRyeS0+JGMpKTsKKyAgICAgICAgICAgICAgICBtZW1zZXQoIHRhYmxlX2VudHJ5LT5vbGRfJGMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiR7Y31fbGVuID0KKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJHtjfV9sZW47CisgICAgICAgICAgICAgICAgQGVsc2VACisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjICAgICA9IHRhYmxlX2VudHJ5LT5vbGRfJGM7CisgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYyA9IDA7CisgICAgICAgICAgICAgICAgQGVuZEAKKyAgQGVuZEAKK0BlbHNlQAorICBAaWYgJGMuY3JlYXRhYmxlQAorICAgICAgICAgICAgICAgIGlmICggdGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgJHtpfV9yZW1vdmVFbnRyeSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACisgICAgICAgICAgICAgICAgICAgIG1lbWNweSggdGFibGVfZW50cnktPiRjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgICAgICBtZW1zZXQoIHRhYmxlX2VudHJ5LT5vbGRfJGMsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4gPQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJHtjfV9sZW47CisgICAgICAgICAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMgICAgID0gdGFibGVfZW50cnktPm9sZF8kYzsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPm9sZF8kYyA9IDA7CisgICAgICAgICAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICAgICAgfQorICBAZWxzZUAKKyAgICAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKKyAgICAgICAgICAgICAgICBtZW1jcHkoIHRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CisgICAgICAgICAgICAgICAgbWVtc2V0KCB0YWJsZV9lbnRyeS0+b2xkXyRjLCAwLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHRhYmxlX2VudHJ5LT4kYykpOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbiA9CisgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+b2xkXyR7Y31fbGVuOworICAgICAgICAgICAgICAgIEBlbHNlQAorICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYyAgICAgPSB0YWJsZV9lbnRyeS0+b2xkXyRjOworICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT5vbGRfJGMgPSAwOworICAgICAgICAgICAgICAgIEBlbmRACisgIEBlbmRACitAZW5kQAorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE1PREVfU0VUX0NPTU1JVDoKK0BpZiAkaS5jcmVhdGFibGVACisgICAgICAgIGZvciAocmVxdWVzdD1yZXF1ZXN0czsgcmVxdWVzdDsgcmVxdWVzdD1yZXF1ZXN0LT5uZXh0KSB7CisgICAgICAgICAgICB0YWJsZV9pbmZvICA9ICAgICBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyggICAgcmVxdWVzdCk7CisgICAgICAgICAgICB0YWJsZV9lbnRyeSA9ICAgICAke2l9X2dldF9lbnRyeSggdGFibGVfaW5mby0+aW5kZXhlcyApOworICAgIAorICAgICAgICAgICAgc3dpdGNoICh0YWJsZV9pbmZvLT5jb2xudW0pIHsKK0BpZiAkaS5yb3dzdGF0dXNACisgICAgICAgICAgICBAZm9yZWFjaCAkYyBjb2x1bW5ACisgICAgICAgICAgICBAaWYgJGMucm93c3RhdHVzQAorICAgICAgICAgICAgY2FzZSBDT0xVTU5fJGMudWM6CisgICAgICAgICAgICAgICAgc3dpdGNoICgqcmVxdWVzdC0+cmVxdWVzdHZiLT52YWwuaW50ZWdlcikgeworICAgICAgICAgICAgICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086CisgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT52YWxpZCA9IDE7CisgICAgICAgICAgICAgICAgICAgIC8qIEZhbGwtdGhyb3VnaCAqLworICAgICAgICAgICAgICAgIGNhc2UgUlNfQUNUSVZFOgorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMgPSBSU19BQ1RJVkU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgY2FzZSBSU19DUkVBVEVBTkRXQUlUOgorICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+dmFsaWQgPSAxOworICAgICAgICAgICAgICAgICAgICAvKiBGYWxsLXRocm91Z2ggKi8KKyAgICAgICAgICAgICAgICBjYXNlIFJTX05PVElOU0VSVklDRToKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPiRjID0gUlNfTk9USU5TRVJWSUNFOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgIGNhc2UgUlNfREVTVFJPWToKKyAgICAgICAgICAgICAgICAgICAgJHtpfV9yZW1vdmVFbnRyeSh0YWJsZV9lbnRyeSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgQGVuZEAKKyAgICAgICAgICAgIEBlbmRACitAZWxzZUAKKyAgICAgICAgICAgIEBmb3JlYWNoICRjIGNvbHVtbkAKKyAgICAgICAgICAgIEBpZiAkYy5jcmVhdGFibGVACisgICAgICAgICAgICBjYXNlIENPTFVNTl8kYy51YzoKKyAgICAgICAgICAgIEBlbmRACisgICAgICAgICAgICBAZW5kQAorICAgICAgICAgICAgICAgIGlmICggdGFibGVfZW50cnkgJiYgIXRhYmxlX2VudHJ5LT52YWxpZCApIHsKKyAgICAgICAgICAgICAgICAgICAgdGFibGVfZW50cnktPnZhbGlkID0gMTsKKyAgICAgICAgICAgICAgICB9CitAZW5kQAorICAgICAgICAgICAgfQorICAgICAgICB9CitAZW5kQAorICAgICAgICBicmVhazsKK0BlbmRACisgICAgfQorICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworfQorCisvKiogSW5pdGlhbGl6ZSB0aGUgJGkgdGFibGUgYnkgZGVmaW5pbmcgaXRzIGNvbnRlbnRzIGFuZCBob3cgaXQncyBzdHJ1Y3R1cmVkICovCitzdGF0aWMgdm9pZAoraW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQoreworICAgIGNvbnN0IG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKKyAgICBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICAgICpyZWc7CisgICAgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyAqdGFibGVfaW5mbzsKKworICAgIHJlZyA9IG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKAorICAgICAgICAgICAgICAiJGkiLCAgICAgJHtpfV9oYW5kbGVyLAorICAgICAgICAgICAgICAke2l9X29pZCwgT0lEX0xFTkdUSCgke2l9X29pZCksCitAaWYgJGkuc2V0dGFibGVACisgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JXUklURQorQGVsc2VACisgICAgICAgICAgICAgIEhBTkRMRVJfQ0FOX1JPTkxZCitAZW5kQAorICAgICAgICAgICAgICApOworCisgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKTsKKyAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLAorICAgIEBmb3JlYWNoICRpZHggaW5kZXhACisgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWR4LnR5cGUsICAvKiBpbmRleDogJGlkeCAqLworICAgIEBlbmRACisgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKworICAgIHRhYmxlX2luZm8tPm1pbl9jb2x1bW4gPSBDT0xVTU5fJGZpcnN0X2NvbHVtbi51YzsKKyAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OXyRsYXN0X2NvbHVtbi51YzsKKworICAgIG5ldHNubXBfcmVnaXN0ZXJfdGFibGUoIHJlZywgdGFibGVfaW5mbyApOworCisgICAgLyogSW5pdGlhbGlzZSB0aGUgY29udGVudHMgb2YgdGhlIHRhYmxlIGhlcmUgKi8KK30KKworQGVuZEAKKy8qKiBJbml0aWFsaXplcyB0aGUgJG5hbWUgbW9kdWxlICovCit2b2lkCitpbml0XyRuYW1lKHZvaWQpCit7CisgIC8qIGhlcmUgd2UgaW5pdGlhbGl6ZSBhbGwgdGhlIHRhYmxlcyB3ZSdyZSBwbGFubmluZyBvbiBzdXBwb3J0aW5nICovCisgIEBmb3JlYWNoICRpIHRhYmxlQAorICAgIGluaXRpYWxpemVfdGFibGVfJGkoKTsKKyAgQGVuZEAKK30KZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLnJvdy5jb25mIGIvbG9jYWwvbWliMmMucm93LmNvbmYKaW5kZXggNDY2MTVjMC4uZjczNmJhYSAxMDA3NTUKLS0tIGEvbG9jYWwvbWliMmMucm93LmNvbmYKKysrIGIvbG9jYWwvbWliMmMucm93LmNvbmYKQEAgLTExNywxNiArMTE3LDE3IEBACiB2b2lkCiBpbml0aWFsaXplX3RhYmxlXyRpKHZvaWQpCiB7Ci0gICAgc3RhdGljIG9pZCAke2l9X29pZFtdID0geyRpLmNvbW1hb2lkfTsKLSAgICBzaXplX3QgJHtpfV9vaWRfbGVuICAgPSBPSURfTEVOR1RIKCR7aX1fb2lkKTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07CiAgICAgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAgICAqcmVnOwogICAgIHN0cnVjdCAke2l9X2VudHJ5ICAgICAgICAgICAgICAgKnJvdzsKICAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICAgICAgICAgICppZHhzOwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87CiAKKyAgICBERUJVR01TR1RMKCgiJHtuYW1lfTppbml0IiwgImluaXRpYWxpemluZyB0YWJsZSAkaVxuIikpOworCiAgICAgcmVnID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oCiAgICAgICAgICAgICAgICIkaSIsICAgICAke2l9X2hhbmRsZXIsCi0gICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4sCisgICAgICAgICAgICAgICR7aX1fb2lkLCBPSURfTEVOR1RIKCR7aX1fb2lkKSwKIEBpZiAkaS5zZXR0YWJsZUAKICAgICAgICAgICAgICAgSEFORExFUl9DQU5fUldSSVRFCiBAZWxzZUAKQEAgLTIxMiwxMCArMjEzLDkgQEAKICAgICB2MiA9IHYyLT5uZXh0X3ZhcmlhYmxlOwogICAgQGVuZEAKICAgIEBpZiAkaWR4Lm5lZWRsZW5ndGhACi0gICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCB2MiwgJGlkeC50eXBlLCAodV9jaGFyKilyb3ctPiRpZHgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3ctPiR7aWR4fV9sZW4pOworICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSggdjIsICRpZHgudHlwZSwgcm93LT4kaWR4LCByb3ctPiR7aWR4fV9sZW4pOwogICAgQGVsc2VACi0gICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHYyLCAkaWR4LnR5cGUsICh1X2NoYXIqKXJvdy0+JGlkeCk7CisgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHYyLCAkaWR4LnR5cGUsIHJvdy0+JGlkeCk7CiAgICBAZW5kQAogICAgQGV2YWwgJGZpcnN0PTBACiAgIEBlbmRACkBAIC0yMzcsNiArMjM3LDggQEAKICAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAgICAgICAgICAqdGFibGVfZW50cnk7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmhhbmRsZXIiLCAiUHJvY2Vzc2luZyByZXF1ZXN0ICglZClcbiIsIHJlcWluZm8tPm1vZGUpKTsKKwogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgICAgICAvKgogICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCkBAIC0yNTIsNyArMjU0LDcgQEAKICAgICAgICAgICAgIGNhc2UgQ09MVU1OXyRjLnVjOgogICAgICAgICAgICAgQGlmICRjLm5lZWRsZW5ndGhACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKCByZXF1ZXN0LT5yZXF1ZXN0dmIsICRjLnR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKil0YWJsZV9lbnRyeS0+JGMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JGMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZV9lbnRyeS0+JHtjfV9sZW4pOwogICAgICAgICAgICAgQGVsc2VACiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKZGlmZiAtLWdpdCBhL2xvY2FsL21pYjJjLnNjYWxhci5jb25mIGIvbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYKaW5kZXggNDM4MzYxYi4uMzAyNGZhNCAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYKKysrIGIvbG9jYWwvbWliMmMuc2NhbGFyLmNvbmYKQEAgLTM2LDcgKzM2LDcgQEAKIGluaXRfJG5hbWUodm9pZCkKIHsKICAgQGZvcmVhY2ggJGkgc2NhbGFyQAotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHsgJGkuY29tbWFvaWQgfTsKKyAgICBjb25zdCBvaWQgJHtpfV9vaWRbXSA9IHsgJGkuY29tbWFvaWQgfTsKICAgQGVuZEAKIAogICBERUJVR01TR1RMKCgiJG5hbWUiLCAiSW5pdGlhbGl6aW5nXG4iKSk7CkBAIC03NSw3ICs3NSw3IEBACiAKICAgICAgICAgY2FzZSBNT0RFX0dFVDoKICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0cy0+cmVxdWVzdHZiLCAkaS50eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgLyogWFhYOiBhIHBvaW50ZXIgdG8gdGhlIHNjYWxhcidzIGRhdGEgKi8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiBhIHBvaW50ZXIgdG8gdGhlIHNjYWxhcidzIGRhdGEgKi8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogWFhYOiB0aGUgbGVuZ3RoIG9mIHRoZSBkYXRhIGluIGJ5dGVzICovKTsKICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9sb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmYgYi9sb2NhbC9taWIyYy50YWJsZV9kYXRhLmNvbmYKaW5kZXggZWRmZjA2Yy4uMmNjNjY1YyAxMDA2NDQKLS0tIGEvbG9jYWwvbWliMmMudGFibGVfZGF0YS5jb25mCisrKyBiL2xvY2FsL21pYjJjLnRhYmxlX2RhdGEuY29uZgpAQCAtMSw0ICsxLDMyIEBACiAjIyAtKi0gYyAtKi0KKyMKK0BpZiAiJGNhY2hlIiBlcSAiIiBACitAb3BlbiAtQAorVGhpcyBmcmFtZXdvcmsgY2FuIHdvcmsgaW4gb25lIG9mIHR3byB3YXlzOgorCisgIDEpICBIb2xkIGEgbG9jYWwgY2FjaGVkIGNvcHkgb2Ygc29tZSBleHRlcm5hbCBkYXRhCisgICAgICB3aGljaCBpcyB0aGVuIHVzZWQgdG8gc2VydmljZSBpbmNvbWluZyByZXF1ZXN0cy4KKworICAyKSAgSG9sZCB0aGUgZGF0YSBmb3IgdGhlIHRhYmxlIHNvbGVseSB3aXRoaW4gdGhlIGFnZW50CisKK1doaWNoIGlzIG1vcmUgYXBwcm9wcmlhdGUgZm9yIHlvdXIgbmVlZHM/CisgICAgQHByb21wdCAkYW5zIFNlbGVjdCB5b3VyIGNob2ljZSA6IEAKKyAgICBAaWYgJGFucyA9PSAxIEAKKyAgICAgIEBldmFsICRjYWNoZSA9IDFACisgICAgQGVsc2lmICRhbnMgPT0gMkAKKyAgICAgIEBldmFsICRjYWNoZSA9IDBACisgICAgQGVsc2VACitJbnZhbGlkIGFuc3dlciAtIGdlbmVyYXRpbmcgY2FjaGluZyBjb2RlCisgICAgICBAZXZhbCAkY2FjaGUgPSAxQAorICAgIEBlbmRACitAZWxzZUAgICAgICAgIyAgLVMgY2FjaGU9e3NvbWV0aGluZ30KKyAgICBAaWYgIiRjYWNoZSIgbmUgIjEiICYmICIkY2FjaGUiIG5lICIwIiBACitAb3BlbiAtQAorSW52YWxpZCB2YWx1ZSBmb3IgJ2NhY2hlJyAoJGNhY2hlKSAtIGdlbmVyYXRpbmcgY2FjaGluZyBjb2RlCisgICAgICBAZXZhbCAkY2FjaGUgPSAxQAorICAgIEBlbmRACitAZW5kQAorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIyBEbyB0aGUgLmggZmlsZQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtMTUsNyArNDMsNyBAQAogQGZvcmVhY2ggJGkgdGFibGVACiB2b2lkIGluaXRpYWxpemVfdGFibGVfJGkodm9pZCk7CiBOZXRzbm1wX05vZGVfSGFuZGxlciAke2l9X2hhbmRsZXI7Ci1AaWYgIiRjYWNoZSIgbmUgIiIgQAorQGlmICIkY2FjaGUiID09IDEgQAogTmV0c25tcENhY2hlTG9hZCAke2l9X2xvYWQ7CiBOZXRzbm1wQ2FjaGVGcmVlICR7aX1fZnJlZTsKICNkZWZpbmUgJGkudWNfVElNRU9VVCAgNjAKQEAgLTcwLDE1ICs5OCwxNyBAQAogdm9pZAogaW5pdGlhbGl6ZV90YWJsZV8kaSh2b2lkKQogewotICAgIHN0YXRpYyBvaWQgJHtpfV9vaWRbXSA9IHskaS5jb21tYW9pZH07Ci0gICAgc2l6ZV90ICR7aX1fb2lkX2xlbiAgID0gT0lEX0xFTkdUSCgke2l9X29pZCk7CisgICAgY29uc3Qgb2lkICR7aX1fb2lkW10gPSB7JGkuY29tbWFvaWR9OworICAgIGNvbnN0IHNpemVfdCAke2l9X29pZF9sZW4gICA9IE9JRF9MRU5HVEgoJHtpfV9vaWQpOwogICAgIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gICAgKnJlZzsKICAgICBuZXRzbm1wX3RkYXRhICAgICAgICAgICAgICAgICAgICp0YWJsZV9kYXRhOwogICAgIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKnRhYmxlX2luZm87Ci1AaWYgIiRjYWNoZSIgbmUgIiIgQAorQGlmICIkY2FjaGUiID09IDEgQAogICAgIG5ldHNubXBfY2FjaGUgICAgICAgICAgICAgICAgICAgKmNhY2hlOwogQGVuZEAKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmluaXQiLCAiaW5pdGlhbGl6aW5nIHRhYmxlICRpXG4iKSk7CisKICAgICByZWcgPSBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbigKICAgICAgICAgICAgICAgIiRpIiwgICAgICR7aX1faGFuZGxlciwKICAgICAgICAgICAgICAgJHtpfV9vaWQsICR7aX1fb2lkX2xlbiwKQEAgLTkwLDcgKzEyMCwyNSBAQAogICAgICAgICAgICAgICApOwogCiAgICAgdGFibGVfZGF0YSA9IG5ldHNubXBfdGRhdGFfY3JlYXRlX3RhYmxlKCAiJGkiLCAwICk7CisgICAgaWYgKE5VTEwgPT0gdGFibGVfZGF0YSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyB0ZGF0YSB0YWJsZSBmb3IgJGlcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorQGlmICIkY2FjaGUiID09IDEgQAorICAgIGNhY2hlID0gbmV0c25tcF9jYWNoZV9jcmVhdGUoJGkudWNfVElNRU9VVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X2xvYWQsICR7aX1fZnJlZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2l9X29pZCwgJHtpfV9vaWRfbGVuKTsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBjcmVhdGluZyBjYWNoZSBmb3IgJGlcbiIpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGNhY2hlLT5tYWdpYyA9ICh2b2lkICopdGFibGVfZGF0YTsKK0BlbmRACiAgICAgdGFibGVfaW5mbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYoIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gKTsKKyAgICBpZiAoTlVMTCA9PSB0YWJsZV9pbmZvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImVycm9yIGNyZWF0aW5nIHRhYmxlIGluZm8gZm9yICRpXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBuZXRzbm1wX3RhYmxlX2hlbHBlcl9hZGRfaW5kZXhlcyh0YWJsZV9pbmZvLAogICAgIEBmb3JlYWNoICRpZHggaW5kZXhACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaWR4LnR5cGUsICAvKiBpbmRleDogJGlkeCAqLwpAQCAtMTAxLDEyICsxNDksMTAgQEAKICAgICB0YWJsZV9pbmZvLT5tYXhfY29sdW1uID0gQ09MVU1OXyRsYXN0X2NvbHVtbi51YzsKICAgICAKICAgICBuZXRzbm1wX3RkYXRhX3JlZ2lzdGVyKCByZWcsIHRhYmxlX2RhdGEsIHRhYmxlX2luZm8gKTsKLUBpZiAiJGNhY2hlIiBuZSAiIiBACi0gICAgY2FjaGUgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgkaS51Y19USU1FT1VULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fbG9hZCwgJHtpfV9mcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aX1fb2lkLCAke2l9X29pZF9sZW4pOwotICAgIGNhY2hlLT5tYWdpYyA9ICh2b2lkICopdGFibGVfZGF0YTsKLSAgICBuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZSggcmVnLCBuZXRzbm1wX2NhY2hlX2hhbmRsZXJfR0VUKGNhY2hlKSwgVEFCTEVfVERBVEFfTkFNRSk7CitAaWYgIiRjYWNoZSIgPT0gMSBACisgICAgaWYgKGNhY2hlKSAKKyAgICAgICAgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUoIHJlZywgbmV0c25tcF9jYWNoZV9oYW5kbGVyX0dFVChjYWNoZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUQUJMRV9UREFUQV9OQU1FKTsKIEBlbmRACiAKICAgICAvKiBJbml0aWFsaXNlIHRoZSBjb250ZW50cyBvZiB0aGUgdGFibGUgaGVyZSAqLwpAQCAtMTc0LDYgKzIyMCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICByb3ctPmRhdGEgPSBlbnRyeTsKKworICAgIERFQlVHTVNHVCgoIiR7aX06ZW50cnk6Y3JlYXRlIiwgInJvdyAweCV4XG4iLCAodWludHB0cl90KXJvdykpOwogICBAZm9yZWFjaCAkaWR4IGluZGV4QAogICAgQGlmICRpZHgubmVlZGxlbmd0aEAKICAgICBtZW1jcHkoZW50cnktPiRpZHgsICRpZHgsICR7aWR4fV9sZW4pOwpAQCAtMTg3LDcgKzIzNSw4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZW50cnktPiRpZHgpKTsKICAgIEBlbmRACiAgIEBlbmRACi0gICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KCB0YWJsZV9kYXRhLCByb3cgKTsKKyAgICBpZiAodGFibGVfZGF0YSkKKyAgICAgICAgbmV0c25tcF90ZGF0YV9hZGRfcm93KCB0YWJsZV9kYXRhLCByb3cgKTsKICAgICByZXR1cm4gcm93OwogfQogCkBAIC0xOTksMTMgKzI0OCwxOSBAQAogCiAgICAgaWYgKCFyb3cpCiAgICAgICAgIHJldHVybjsgICAgLyogTm90aGluZyB0byByZW1vdmUgKi8KLSAgICBlbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKQorCisgICAgREVCVUdNU0dUKCgiJHtpfTplbnRyeTpyZW1vdmUiLCAicm93IDB4JXhcbiIsICh1aW50cHRyX3Qpcm93KSk7CisKKyAgICBlbnRyeSA9IChzdHJ1Y3QgJHtpfV9lbnRyeSAqKXJvdy0+ZGF0YTsKKyAgICBTTk1QX0ZSRUUoIGVudHJ5ICk7ICAgLyogWFhYIC0gcmVsZWFzZSBhbnkgb3RoZXIgaW50ZXJuYWwgcmVzb3VyY2VzICovCisKKyAgICBpZiAodGFibGVfZGF0YSkKICAgICAgICAgbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3coIHRhYmxlX2RhdGEsIHJvdyApOwotICAgIGlmIChlbnRyeSkKLSAgICAgICAgU05NUF9GUkVFKCBlbnRyeSApOyAgIC8qIFhYWCAtIHJlbGVhc2UgYW55IG90aGVyIGludGVybmFsIHJlc291cmNlcyAqLworICAgIGVsc2UKKyAgICAgICAgbmV0c25tcF90ZGF0YV9kZWxldGVfcm93KCByb3cgKTsgICAgCiB9CiAKLUBpZiAiJGNhY2hlIiBuZSAiIiBACitAaWYgIiRjYWNoZSIgPT0gMSBACiAvKiBFeGFtcGxlIGNhY2hlIGhhbmRsaW5nIC0gc2V0IHVwIHRhYmxlX2RhdGEgbGlzdCBmcm9tIGEgc3VpdGFibGUgZmlsZSAqLwogaW50CiAke2l9X2xvYWQoIG5ldHNubXBfY2FjaGUgKmNhY2hlLCB2b2lkICp2bWFnaWMgKSB7CkBAIC0yODUsNiArMzQwLDggQEAKICAgICBzdHJ1Y3QgJHtpfV9lbnRyeSAgICAgICAgICAqdGFibGVfZW50cnk7CiAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIHJldDsKIAorICAgIERFQlVHTVNHVEwoKCIke25hbWV9OmhhbmRsZXIiLCAiUHJvY2Vzc2luZyByZXF1ZXN0ICglZClcbiIsIHJlcWluZm8tPm1vZGUpKTsKKwogICAgIHN3aXRjaCAocmVxaW5mby0+bW9kZSkgewogICAgICAgICAvKgogICAgICAgICAgKiBSZWFkLXN1cHBvcnQgKGFsc28gY292ZXJzIEdldE5leHQgcmVxdWVzdHMpCkBAIC0zMDksNyArMzY2LDcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICBAaWYgJGMubmVlZGxlbmd0aEAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIHJlcXVlc3QtPnJlcXVlc3R2YiwgJGMudHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIqKXRhYmxlX2VudHJ5LT4kYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4kYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhYmxlX2VudHJ5LT4ke2N9X2xlbik7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLApAQCAtMzQ4LDcgKzQwNSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgKHRhYmxlX2VudHJ5ID8gUlNfQUNUSVZFIDogUlNfTk9ORVhJU1RFTlQgKSk7CiAgICAgICAgICAgICBAZWxzZUAKICAgICAgICAgICAgIEBpZiAkYy5uZWVkbGVuZ3RoQAotCSAgICAgICAgLyogb3IgcG9zc2libGMgJ25ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZScgKi8KKwkgICAgICAgIC8qIG9yIHBvc3NpYmx5ICduZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX3NpemUnICovCiAgICAgICAgICAgICAgICAgcmV0ID0gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLCAkYy50eXBlLCBzaXplb2YodGFibGVfZW50cnktPiRjKSk7CiAgICAgICAgICAgICBAZWxzZUAKZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjayBiL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1jaGVjawpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5hYTQ5ODdlCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9mZWF0dXJlLWNoZWNrCkBAIC0wLDAgKzEsMTI2IEBACisjIS9iaW4vc2gKKworIworIyBmZWF0dXJlLWNoZWNrOiBUaGlzIHNjcmlwdCBsb29rcyBmb3IgZmVhdHVyZSBzdGF0ZW1lbnRzIGluIGEgZmlsZSBieQorIyBleGVjdXRpbmcgYSBjb21waWxlciB1bmRlciBDUFAgYW5kIGV4dHJhY3RpbmcgbGluZXMgb2YgdGhlIGZvbGxvd2luZworIyBmb3JtOgorIworIyBuZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZXMoZm9vKTogdXNlZCB0byBpbmRpY2F0ZSBpdCBwcm92aWRlcyBmZWF0dXJlICJmb28iCisjIG5ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGJhcik6IHVzZWQgdG8gaW5kaWNhdGUgaXQgcmVxdWlyZXMgZmVhdHVyZSAiYmFyIgorIyBuZXRzbm1wX2ZlYXR1cmVfd2FudChiYXIpOiB1c2VkIHRvIGluZGljYXRlIGl0IHdhbnRzIGZlYXR1cmUgImJhciIKKyMgICAgICAgICAgICAgICAgICAgIChidXQgY2FuIGxpdmUgd2l0aG91dCBpdCkKKyMKKyMgVXNpbmcgdGhlc2UgbGluZXMgaXQgdGhlbiBnZW5lcmF0ZXMgYSBsaXN0IG9mIGZlYXR1cmUgcmVxdWlyZW1lbnQKKyMgZGVmaW5lcyBpbiAiaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oIiB3aGljaCBjYW4gdGhlbiBiZQorIyBsb2FkZWQgaW4gbGF0ZXIgcGFzc2VzIGF0IGNvbXBpbGUgdGltZS4KKyMKKyMgRGVmaW5lcyBwcm9kdWNlZCB3aGVuIG5ldHNubXBfZmVhdHJlX3JlcXVpcmUoYmFyKSBpcyBwcmVzZW50OgorIyAgICNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQkFSIDEKKyMKKyMgRGVmaW5lcyBwcm9kdWNlZCB3aGVuIG5ldHNubXBfZmVhdHVyZV93YW50KGJhcikgaXMgcHJlc2VudDoKKyMgICAjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9XQU5UX0JBUiAxCisjCisjIEFuZCB3aGVuIGFsbCB0aGUgZmVhdHVyZXMgaGF2ZSBiZWVuIGNvbGxlY3RlZCwgdGhleSBhcmUgYWxzbyBpbnZlcnRlZCB2aWEKKyMgdGhlIGZlYXR1cmUtcG9zdC1jaGVjayBzY3JpcHQ6CisjCisjICAgI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0JBUlggMSAgLyogbmV2ZXIgcmVxdWlyZWQgKi8KKyMgICAjdW5kZWYgIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQkFSICAgICAgLyogcmVxdWlyZWQgKi8KKworIyBVc2FnZToKKworIyBmZWF0dXJlLWNoZWNrIE5PUk1BTC1DT01QSUxFLUxJTkUKKworU0VEPXNlZAorR1JFUD1ncmVwCitDQz1nY2MKK1JNPXJtCisKK2lmIHRlc3QgIngkMSIgPSAieC0tZmVhdHVyZS1nbG9iYWwiIDsgdGhlbgorICAgICMgYSBnbG9iYWwgZmlsZSBzaG91bGQgYmUgaW5jbHVkZWQKKyAgICBzaGlmdAorICAgIGdsb2JhbD0kMQorICAgIHNoaWZ0CitmaQorCitzb3VyY2VkaXI9JDEKK3NoaWZ0CisKK3NvdXJjZT0kMQorc2hpZnQKKworZGVzdGluYXRpb249JDEKK3NoaWZ0CisKK3RtcGY9IiRkZXN0aW5hdGlvbi4xIgorCitjb21waWxlbGluZT0iJEAiCiskY29tcGlsZWxpbmUgJy1ETkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HPTEnIFwKKyAgICAgICAgICAgICAnLURORVRTTk1QX01JTklNQUxfQ09ERT0xJyBcCisgICAgICAgICAgICAgJy1EbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoWCk9WCBOU0ZfUlInIFwKKyAgICAgICAgICAgICAnLURuZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZShYKT1YIE5TRl9QUCcgXAorICAgICAgICAgICAgICctRG5ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihYLFkpPVgsWSBOU0ZfQ08nIFwKKyAgICAgICAgICAgICAnLURuZXRzbm1wX2ZlYXR1cmVfd2FudChYKT1YIE5TRl9XVycgJHNvdXJjZSB8IFwKKyAgICAkR1JFUCBOU0ZfIHwgJEdSRVAgLXYgJ14jZGVmaW5lJyA+ICR0bXBmCisKKyRSTSAtZiAkZGVzdGluYXRpb247Cit0b3VjaCAkZGVzdGluYXRpb247CisKKyMgcHJvY2VzcyByZXF1aXJlcworZmlyc3RyZXF1aXJlPTEKK2ZvciBpIGluIGBncmVwIE5TRl9SUiAkdG1wZiB8IHNlZCAncy8gTlNGX1JSLy8nYCA7IGRvCisgICAgaWYgdGVzdCAkZmlyc3RyZXF1aXJlID0gMSA7IHRoZW4KKwllY2hvICIiID4+ICRkZXN0aW5hdGlvbgorCWVjaG8gIi8qIHJlcXVpcmVkIGJ5ICRzb3VyY2VkaXIvJHNvdXJjZSAqLyIgPj4gJGRlc3RpbmF0aW9uCisJZmlyc3RyZXF1aXJlPTAKKyAgICBmaQorICAgIHVwcGVyPWBlY2hvICRpIHwgdHIgYS16IEEtWmAKKyAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFXyR1cHBlciAxIiA+PiAkZGVzdGluYXRpb24KK2RvbmUKKworIyBwcm9jZXNzIHByb3ZpZGVzCitmaXJzdGZlYXR1cmU9MQorZm9yIGkgaW4gYGdyZXAgTlNGX1BQICR0bXBmIHwgc2VkICdzLyBOU0ZfUFAvLydgIDsgZG8KKyAgICBpZiB0ZXN0ICRmaXJzdGZlYXR1cmUgPSAxIDsgdGhlbgorCWVjaG8gIiIgPj4gJGRlc3RpbmF0aW9uCisJZWNobyAiLyogZmVhdHVyZXMgcHJvdmlkZWQgYnkgJHNvdXJjZWRpci8kc291cmNlICovIiA+PiAkZGVzdGluYXRpb24KKwlmaXJzdGZlYXR1cmU9MAorICAgIGZpCisgICAgdXBwZXI9YGVjaG8gJGkgfCB0ciBhLXogQS1aYAorICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1BST1ZJREVfJHVwcGVyIDEiID4+ICRkZXN0aW5hdGlvbgorZG9uZQorCisjIHByb2Nlc3MgY2hpbGRyZW4KK2ZpcnN0ZmVhdHVyZT0xCitmb3IgaSBpbiBgZ3JlcCBOU0ZfQ08gJHRtcGYgfCBzZWQgJ3MvIE5TRl9DTy8vJ2AgOyBkbworICAgIHBhcmVudD1gZWNobyAkaSB8IHNlZCAncy8uKiwvLydgCisgICAgY2hpbGQ9YGVjaG8gJGkgfCBzZWQgJ3MvLC4qLy8nYAorICAgIGlmIHRlc3QgJGZpcnN0ZmVhdHVyZSA9IDEgOyB0aGVuCisJZWNobyAiIiA+PiAkZGVzdGluYXRpb24KKwllY2hvICIvKiBmZWF0dXJlcyBwcm92aWRlZCBieSAkc291cmNlZGlyLyRzb3VyY2UgKi8iID4+ICRkZXN0aW5hdGlvbgorCWZpcnN0ZmVhdHVyZT0wCisgICAgZmkKKyAgICB1cHBlcmNoaWxkPWBlY2hvICRjaGlsZCB8IHRyIGEteiBBLVpgCisgICAgdXBwZXJwYXJlbnQ9YGVjaG8gJHBhcmVudCB8IHRyIGEteiBBLVpgCisgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfJHt1cHBlcmNoaWxkfV9DSElMRF9PRl8ke3VwcGVycGFyZW50fSAxIiA+PiAkZGVzdGluYXRpb24KKyAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9QUk9WSURFXyR1cHBlcmNoaWxkIDEiID4+ICRkZXN0aW5hdGlvbgorZG9uZQorCisjIHByb2Nlc3Mgd2FudHMKK2ZpcnN0ZmVhdHVyZT0xCitmb3IgaSBpbiBgZ3JlcCBOU0ZfV1cgJHRtcGYgfCBzZWQgJ3MvIE5TRl9XVy8vJ2AgOyBkbworICAgIGlmIHRlc3QgJGZpcnN0ZmVhdHVyZSA9IDEgOyB0aGVuCisJZWNobyAiIiA+PiAkZGVzdGluYXRpb24KKwllY2hvICIvKiBmZWF0dXJlcyB3YW50ZWQgYnkgJHNvdXJjZWRpci8kc291cmNlICovIiA+PiAkZGVzdGluYXRpb24KKwlmaXJzdGZlYXR1cmU9MAorICAgIGZpCisgICAgdXBwZXI9YGVjaG8gJGkgfCB0ciBhLXogQS1aYAorICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1dBTlRfJHVwcGVyIDEiID4+ICRkZXN0aW5hdGlvbgorZG9uZQorCitpZiB0ZXN0ICJ4JGdsb2JhbCIgIT0gIngiIDsgdGhlbgorICAgIGNhdCAkZGVzdGluYXRpb24gPj4gJGdsb2JhbAorZmkKKworCisjIGNsZWFuIHVwCisjJFJNIC1mICR0bXBmCmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3MgYi9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk2MDE5MQotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1tYWtlZG9jcwpAQCAtMCwwICsxLDIyMSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2UgSU86OkZpbGU7Cit1c2UgR2V0b3B0OjpTdGQ7CitvdXIgJW9wdHMgPSAoVyA9PiAyKTsKKworZ2V0b3B0cygnb2h3VzonLCBcJW9wdHMpIHx8IHVzYWdlKCk7CisKK3VzYWdlKCkgaWYgKCRvcHRzeydoJ30pOworCit1c2FnZSgpIGlmICgkI0FSR1YgIT0gMSk7CisKKyMgc2hvdWxkIGJlIHRoZSBmZWF0dXJlLWRldGFpbHMuaCBmaWxlCitteSAkaW5wdXRmaWxlID0gc2hpZnQgQEFSR1Y7CitteSAkb3V0cHV0ZmlsZSA9IHNoaWZ0IEBBUkdWOworCitteSAlZmVhdHVyZXM7CitteSAldG9wOworbXkgJWZpbGVzOworbXkgJHJlcWZpbGU7CisKK2dhdGhlcl9kYXRhKCRpbnB1dGZpbGUpOworaWYgKCRvcHRzeyd3J30pIHsKKyAgICBwcmludF93aWtpX21vZGUoJG91dHB1dGZpbGUpOworfSBlbHNlIHsKKyAgICBwcmludF9vcmdfbW9kZSgkb3V0cHV0ZmlsZSk7Cit9CisKK3N1YiBnYXRoZXJfZGF0YSB7CisgICAgbXkgKCRpbnB1dGZpbGUpID0gQF87CisKKyAgICBvcGVuKEksICRpbnB1dGZpbGUpOworICAgIHdoaWxlKDxJPikgeworCWlmICgvKHJlcXVpcmVkfHByb3ZpZGVkfHdhbnRlZCkgYnkgKC4qKSBcKi8pIHsKKwkgICAgJHJlcWZpbGUgPSAkMjsKKwl9IGVsc2lmICgvZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9QUk9WSURFXyguKikgMS8pIHsKKwkgICAgbXkgJGxjID0gbGMoJDEpOworCSAgICBkaWUgIm5vIHJlcWZpbGUgY3VycmVudGx5IHNldDsgYnVnISIgaWYgKCFkZWZpbmVkKCRyZXFmaWxlKSk7CisKKwkgICAgYWRkKCRsYyk7CisKKwkgICAgcHVzaCBAeyRmaWxlc3skcmVxZmlsZX17J3Byb3ZpZGVzJ319LCAkbGM7CisJICAgIHB1c2ggQHskZmVhdHVyZXN7JGxjfXsncHJvdmlkZWRieSd9fSwgJHJlcWZpbGU7CisKKwl9IGVsc2lmICgvZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFXyguKikgMS8pIHsKKwkgICAgbXkgJGxjID0gbGMoJDEpOworCSAgICBkaWUgIm5vIHJlcWZpbGUgY3VycmVudGx5IHNldDsgYnVnISIgaWYgKCFkZWZpbmVkKCRyZXFmaWxlKSk7CisKKwkgICAgYWRkKCRsYyk7CisKKwkgICAgcHVzaCBAeyRmaWxlc3skcmVxZmlsZX17J3JlcXVpcmVzJ319LCAkbGM7CisJICAgIHB1c2ggQHskZmVhdHVyZXN7JGxjfXsncmVxdWlyZWRieSd9fSwgJHJlcWZpbGU7CisKKwl9IGVsc2lmICgvZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9XQU5UXyguKikgMS8pIHsKKwkgICAgbXkgJGxjID0gbGMoJDEpOworCSAgICBkaWUgIm5vIHJlcWZpbGUgY3VycmVudGx5IHNldDsgYnVnISIgaWYgKCFkZWZpbmVkKCRyZXFmaWxlKSk7CisKKwkgICAgYWRkKCRsYyk7CisKKwkgICAgcHVzaCBAeyRmaWxlc3skcmVxZmlsZX17J3dhbnRzJ319LCAkbGM7CisJICAgIHB1c2ggQHskZmVhdHVyZXN7JGxjfXsnd2FudGVkYnknfX0sICRyZXFmaWxlOworCX0gZWxzaWYgKC9kZWZpbmUgTkVUU05NUF9GRUFUVVJFXyguKilfQ0hJTERfT0ZfKC4qKSAxLykgeworCSAgICBteSAkY2hpbGQgPSBsYygkMSk7CisJICAgIG15ICRwYXJlbnQgPSBsYygkMik7CisKKwkgICAgYWRkX2NoaWxkKCRjaGlsZCwgJHBhcmVudCk7CisJfQorICAgIH0KK30KKworc3ViIGFkZCB7CisgICAgbXkgKCRuYW1lKSA9IEBfOworICAgIGlmICghZXhpc3RzKCRmZWF0dXJlc3skbmFtZX0pKSB7CisJIyBuZXcgZmVhdHVyZSBlbnRpcmVseSwgbWFyayBpdCBhcyBhIHRvcCBub2RlCisJJHRvcHskbmFtZX0gPSAxOworICAgIH0KK30KKworc3ViIGFkZF9jaGlsZCB7CisgICAgbXkgKCRjaGlsZCwgJHBhcmVudCkgPSBAXzsKKworICAgIGFkZCgkcGFyZW50KTsKKworICAgIGlmIChleGlzdHMoJHRvcHskY2hpbGR9KSkgeworCSMgaXQncyBubyBsb25nZXIgYSB0b3Agbm9kZSBpZiBpdCdzIGEgY2hpbGQgb2Ygc29tZXRoaW5nIGVsc2UKKwlkZWxldGUgJHRvcHskY2hpbGR9OworICAgIH0KKyAgICAkZmVhdHVyZXN7JHBhcmVudH17J2NoaWxkcmVuJ317JGNoaWxkfSsrOworCisgICAgJGZlYXR1cmVzeyRjaGlsZH17J3Byb3ZpZGVkYnknfSwgJHJlcWZpbGU7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgb3JnLW1vZGUgb3V0cHV0CisjCitzdWIgcHJpbnRfb3JnX21vZGUgeworICAgIG15ICgkb3V0cHV0ZmlsZSkgPSBAXzsKKworICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZTsKKworICAgIGlmICghJGZoLT5vcGVuKCI+ICRvdXRwdXRmaWxlIikpIHsKKwlkaWUgImVycm9yIVxuIjsKKyAgICB9CisKKyAgICBmb3JlYWNoIG15ICRub2RlIChzb3J0IGtleXMoJXRvcCkpIHsKKwlwcmludF9vcmdfbm9kZSgkZmgsICRub2RlLCAiKiIpOworICAgIH0KK30KKworc3ViIHByaW50X29yZ19ub2RlIHsKKyAgICBteSAoJGZoLCAkbm9kZSwgJHByZWZpeCkgPSBAXzsKKworICAgIG15ICRzcGFjZXMgPSAkcHJlZml4OworICAgICRzcGFjZXMgPX4gcy8uLyAvZzsKKworICAgIHByaW50ICRmaCAiJHByZWZpeCAkbm9kZVxuIjsKKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J3Byb3ZpZGVkYnknfSkpIHsKKwlwcmludCAkZmggIiRzcGFjZXMgKyBwcm92aWRlZCBpbiBmaWxlOiAiIC4KKwkgICAgam9pbigiLCAiLCBvcmdfbGlua19maWxlcyhAeyRmZWF0dXJlc3skbm9kZX17J3Byb3ZpZGVkYnknfX0pKSAuICJcbiI7CisgICAgfQorICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsncmVxdWlyZWRieSd9KSkgeworCXByaW50ICRmaCAiJHNwYWNlcyArIHJlcXVpcmVkIGluIGZpbGU6ICIgLgorCSAgICBqb2luKCIsICIsIG9yZ19saW5rX2ZpbGVzKEB7JGZlYXR1cmVzeyRub2RlfXsncmVxdWlyZWRieSd9fSkpIC4gIlxuIjsKKyAgICB9CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eyd3YW50ZWRieSd9KSkgeworCXByaW50ICRmaCAiJHNwYWNlcyArIHdhbnRlZCBpbiBmaWxlOiAiIC4KKwkgICAgam9pbigiLCAiLCBvcmdfbGlua19maWxlcyhAeyRmZWF0dXJlc3skbm9kZX17J3dhbnRlZGJ5J319KSkgLiAiXG4iOworICAgIH0KKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J2NoaWxkcmVuJ30pKSB7CisJZm9yZWFjaCBteSAkY2hpbGQgKHNvcnQga2V5cygleyRmZWF0dXJlc3skbm9kZX17J2NoaWxkcmVuJ319KSkgeworCSAgICBwcmludF9vcmdfbm9kZSgkZmgsICRjaGlsZCwgJHByZWZpeCAuICIqIik7CisJfQorICAgIH0KK30KKworc3ViIG9yZ19saW5rX2ZpbGVzIHsKKyAgICBteSBAZmlsZXMgPSBAXzsKKyAgICBtYXAgeyAkXyA9ICJbW2ZpbGU6JF9dWyRfXV0iOyB9IEBmaWxlczsKKyAgICByZXR1cm4gQGZpbGVzOworfQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHdpa2kgb3V0cHV0CisjCitzdWIgcHJpbnRfd2lraV9tb2RlIHsKKyAgICBteSAoJG91dHB1dGZpbGUpID0gQF87CisKKyAgICBteSAkZmggPSBuZXcgSU86OkZpbGU7CisgICAgbXkgJGRlcHRoID0gMDsKKworICAgIGlmICghJGZoLT5vcGVuKCI+ICRvdXRwdXRmaWxlIikpIHsKKwlkaWUgImVycm9yIVxuIjsKKyAgICB9CisKKyAgICBwcmludCAkZmggIicnJ1RoZSBjb250ZW50cyBvZiB0aGlzIHBhZ2UgaXMgYXV0by1nZW5lcmF0ZWQgZnJvbSBsb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtbWFrZWRvY3M7IGRvIG5vdCBlZGl0IGJ5IGhhbmQgKGNoYW5nZXMgd2lsbCBiZSBsb3N0KScnJ1xuXG4iOworICAgIHByaW50ICRmaCAiRGV0YWlscyBvZiB0aGUgZmVhdHVyZSBtYXJraW5nIHN5c3RlbSBhbmQgaG93IGl0IGlzIHVzZWQgY2FuIGJlIGZvdW5kIGF0IFtbRmVhdHVyZSBNYXJraW5nIGFuZCBTZWxlY3Rpb25dXVxuXG4iOworCisgICAgZm9yZWFjaCBteSAkbm9kZSAoc29ydCBrZXlzKCV0b3ApKSB7CisJcHJpbnRfd2lraV9ub2RlKCRmaCwgJG5vZGUsICRkZXB0aCsxKTsKKyAgICB9Cit9CisKK3N1YiBwcmludF93aWtpX25vZGUgeworICAgIG15ICgkZmgsICRub2RlLCAkZGVwdGgpID0gQF87CisKKyAgICBteSAkZGF0YWhlYWRlcjsKKyAgICBteSAkZGVwdGhpbmNyZWFzZSA9IDE7CisKKyAgICBpZiAoJGRlcHRoID4gJG9wdHN7J1cnfSkgeworCXByaW50ICRmaCAiKiIgeCAoJGRlcHRoIC0gJG9wdHN7J1cnfSArIDEpIC4gIiAkbm9kZVxuIjsKKwkkZGF0YWhlYWRlciA9ICIqIiB4ICgkZGVwdGggLSAkb3B0c3snVyd9ICsgMik7CisJJGRlcHRoaW5jcmVhc2UrKzsKKyAgICB9IGVsc2UgeworCXByaW50ICRmaCAiPSIgeCAkZGVwdGggLiAiICRub2RlICIgLiAiPSIgeCAkZGVwdGggLiAiXG4iOworCSRkYXRhaGVhZGVyID0gIioiOworICAgIH0KKworICAgIGlmIChleGlzdHMoJGZlYXR1cmVzeyRub2RlfXsncHJvdmlkZWRieSd9KSkgeworCXByaW50ICRmaCAiJGRhdGFoZWFkZXIgcHJvdmlkZWQgaW4gZmlsZTogIiAuCisJICAgIGpvaW4oIiwgIiwgd2lraV9saW5rX2ZpbGVzKEB7JGZlYXR1cmVzeyRub2RlfXsncHJvdmlkZWRieSd9fSkpIC4iXG4iOworICAgIH0KKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J3JlcXVpcmVkYnknfSkpIHsKKwlwcmludCAkZmggIiRkYXRhaGVhZGVyIHJlcXVpcmVkIGluIGZpbGU6ICIgLgorCSAgICBqb2luKCIsICIsIHdpa2lfbGlua19maWxlcyhAeyRmZWF0dXJlc3skbm9kZX17J3JlcXVpcmVkYnknfX0pKSAuIlxuIjsKKyAgICB9CisgICAgaWYgKGV4aXN0cygkZmVhdHVyZXN7JG5vZGV9eyd3YW50ZWRieSd9KSkgeworCXByaW50ICRmaCAiJGRhdGFoZWFkZXIgd2FudGVkIGluIGZpbGU6ICIgLgorCSAgICBqb2luKCIsICIsIHdpa2lfbGlua19maWxlcyhAeyRmZWF0dXJlc3skbm9kZX17J3dhbnRlZGJ5J319KSkgLiAiXG4iOworICAgIH0KKyAgICBpZiAoZXhpc3RzKCRmZWF0dXJlc3skbm9kZX17J2NoaWxkcmVuJ30pKSB7CisJaWYgKCRkZXB0aCA+PSAkb3B0c3snVyd9KSB7CisJICAgIHByaW50ICRmaCAiJGRhdGFoZWFkZXIgQ2hpbGRyZW46XG4iOworCX0KKwlmb3JlYWNoIG15ICRjaGlsZCAoc29ydCBrZXlzKCV7JGZlYXR1cmVzeyRub2RlfXsnY2hpbGRyZW4nfX0pKSB7CisJICAgIHByaW50X3dpa2lfbm9kZSgkZmgsICRjaGlsZCwgJGRlcHRoICsgJGRlcHRoaW5jcmVhc2UpOworCX0KKyAgICB9Cit9CisKK3N1YiB3aWtpX2xpbmtfZmlsZXMgeworICAgIG15IEBmaWxlcyA9IEBfOworICAgIG1hcCB7ICRfID0gIltodHRwOi8vbmV0LXNubXAuc3ZuLnNvdXJjZWZvcmdlLm5ldC92aWV3dmMvbmV0LXNubXAvdHJ1bmsvbmV0LXNubXAvJF8/dmlldz1tYXJrdXAgJF9dIjsgfSBAZmlsZXM7CisgICAgcmV0dXJuIEBmaWxlczsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBoZWxwIG91dHB1dAorIworc3ViIHVzYWdlIHsKKyAgICBwcmludCAiVXNhZ2U6ICQwIFtGTEFHU10gSU5QVVRGSUxFIE9VVFBVVEZJTEVcblxuIjsKKyAgICBwcmludCAiRkxBR1M6XG4iOworICAgIHByaW50ICJcdC1oXHRoZWxwXG4iOworICAgIHByaW50ICJcdC1vXHRPdXRwdXQgc3R5bGU6IE9yZy1Nb2RlIFtkZWZhdWx0XVxuIjsKKyAgICBwcmludCAiXHQtd1x0T3V0cHV0IHN0eWxlOiB3aWtpXG4iOworICAgIHByaW50ICJcdC1XIERFUFRIXHRXaWtpIGhlYWRlciB0byBidWxsZXQgbGlzdCBkZXB0aCAoZGVmYXVsdCAyKVxuIjsKKyAgICBwcmludCAiXG5JTlBVVC9PVVRQVVRcbiI7CisgICAgcHJpbnQgIlx0SU5QVVRGSUxFOlx0bG9jYXRpb24gb2YgdGhlIGluY2x1ZGUvbmV0LXNubXAvZmVhdHVyZS1kZXRhaWxzLmggZmlsZVxuIjsKKyAgICBwcmludCAiXHRPVVRQVVRGSUxFOlx0dGhlIGZpbGUgdG8gd3JpdGUgdGhlIHJlc3VsdHMgdG9cbiI7CisgICAgZXhpdDsKK30KZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvZmVhdHVyZS1yZW1vdmUgYi9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFhZTM0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L2ZlYXR1cmUtcmVtb3ZlCkBAIC0wLDAgKzEsMTI4IEBACisjIS9iaW4vc2gKKworIworIyBmZWF0dXJlLXJlbW92ZTogcmVtb3ZlcyBmZWF0dXJlcyBieSBkZWZpbmluZyBzcGVjaWFsIHZhcmlhYmxlcworIyBpbmRpY2F0aW5nIHBhcnRpY3VsYXIgY29kZSBzZWdtZW50cyBhcmUgdW5uZWVkZWQuICBUaGlzIGlzIGRvbmUgYnkKKyMgZXhhbWluaW5nIHRoZSBsaXN0IG9mIHByb3ZpZGVkIGZlYXR1cmVzIGFuZCBkZWZpbmluZyBhIFJFTU9WRQorIyBlcXVpdmFsZW50IGlmIG5vIG90aGVyIG1vZHVsZSByZXF1aXJlZCBpdC4KKyMKKyMgQXJndW1lbnRzOgorIyAgIGZlYXR1cmUtcmVtb3ZlIG1haW5oZWFkZXIuaCBnbG9iYWxoZWFkZXIuaCBUSEVSRVNUCisjCisjIFdoZXJlIFRIRVJFU1QgYXJlIGEgbGlzdCBvZiBmZWF0dXJlcyB0byByZW1vdmUgKGRlZmF1bHQpIG9yIGFkZC4KKyMKKyMgICAtLWFkZCBzd2l0Y2hlcyB0byAiYWRkaW5nIiBhbmQgLS1yZW1vdmUgc3dpdGNoZXMgYmFjay4KKyMKKyMgRS5HLgorIyAgIGZlYXR1cmUtcmVtb3ZlIG1haW5oZWFkZXIuaCBnbG9iYWxoZWFkZXIuaCBvaWRfc3Rhc2ggLS1hZGQgY29udGFpbmVyX251bGwKKyMKK0NQPWNwCisKK2ZlYXR1cmVoZWFkZXI9IiQxIgorZmVhdHVyZWhlYWRlcmluPSIkMS5pbiIKK2ZlYXR1cmVoZWFkZXJnbG9iYWw9IiQyIgorc2hpZnQKK3NoaWZ0CisKK2FyZ3VtZW50dHlwZT0iLS1yZW1vdmUiCityZW1vdmV0aGVzZT0iIgorYWRkdGhlc2U9IiIKKword2hpbGUgdGVzdCAieCQxIiAhPSAieCIgOyBkbworICAgIHVjPWBlY2hvICQxIHwgdHIgYS16IEEtWmAKKyAgICBjYXNlICQxIGluCisJLS0qKQorCSAgICBhcmd1bWVudHR5cGU9IiQxIgorCSAgICA7OworCisJKikKKwkgICAgaWYgdGVzdCAieCRhcmd1bWVudHR5cGUiID0gIngtLXJlbW92ZSIgOyB0aGVuCisJCXJlbW92ZXRoZXNlPSIkcmVtb3ZldGhlc2UgJHVjIgorCSAgICBlbHNlCisJCWFkZHRoZXNlPSIkYWRkdGhlc2UgJHVjIgorCSAgICBmaQorCSAgICA7OworICAgIGVzYWMKKyAgICBzaGlmdAorZG9uZQorCitlY2hvICIiID4gJGZlYXR1cmVoZWFkZXIKK2VjaG8gIi8qIFRoZSBmb2xsb3dpbmcgZGVmaW5lcyBmZWF0dXJlcyB0aGF0IE5ldC1TTk1QIEhBUyBvciBoYXMgUkVNT1ZFZCAqLyIgPj4gJGZlYXR1cmVoZWFkZXIKKworaGFzbGlzdD0iICIKKworZm9yIGkgaW4gYGdyZXAgTkVUU05NUF9GRUFUVVJFX1BST1ZJREVfICRmZWF0dXJlaGVhZGVyaW4gfCBzZWQgJ3MvLipGRUFUVVJFX1BST1ZJREVfLy87cy8gLiovLydgIDsgZG8KKyAgICAjCisgICAgIyBJZiB3ZSB3ZXJlIHNwZWNpZmljYWxseSBhc2tlZCB0byBpbmNsdWRlIGl0LCB0aGVuIGRvIHNvCisgICAgIworICAgIGlmIGVjaG8gIiAkYWRkdGhlc2UgIiB8IGdyZXAgIiAke2l9ICIgPiAvZGV2L251bGwgOyB0aGVuCisgICAgICAgIyBUaGUgdXNlciByZXF1aXJlZCBpdCA7IHJlcG9ydCB3ZSdyZSB1c2luZyBpdAorCWVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX0hBU18kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorCWhhc2xpc3Q9IiR7aGFzbGlzdH0ke2l9ICIKKworICAgICMKKyAgICAjIGNoZWNrIHRvIHNlZSBpZiBzb21ldGhpbmcgcmVxdXJpZWQgaXQKKyAgICAjCisgICAgZWxpZiBncmVwICJORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV8ke2l9ICIgJGZlYXR1cmVoZWFkZXJnbG9iYWwgPiAvZGV2L251bGwgOyB0aGVuCisJIyBpZiBzbywgbWFrZSBzdXJlIHdlIHdlcmVuJ3QgYXNrZWQgdG8gcmVtb3ZlIGl0CisgICAgICAgCWlmIGVjaG8gICIgJHJlbW92ZXRoZXNlICJ8IGdyZXAgIiAkaSAiID4gL2Rldi9udWxsIDsgdGhlbgorICAgICAgIAkgICAjIFVoIG9oOyB0aGV5IHNwZWNpZmljYWxseSB3YW50ZWQgaXQgcmVtb3ZlZCBidXQgaXQgd2FzIHJlcXVpcmVkCisJICAgZWNobyAiRmVhdHVyZSBFcnJvcjoiCisgICAgICAgCSAgIGVjaG8gIiBGZWF0dXJlICckaScgd2FzIGFza2VkIHRvIGJlIHJlbW92ZWQgYnV0IHNvbWV0aGluZyByZXF1aXJlZCBpdCIKKyAgICAgICAJICAgZWNobyAiIFNlZSB0aGUgJGZlYXR1cmVoZWFkZXJnbG9iYWwgZmlsZSBmb3IgZGVwZW5kZW5jeSBkZXRhaWxzIgorCSAgIGVjaG8gIiIKKyAgICAgICAgICAgcm0gLWYgJGZlYXR1cmVoZWFkZXIKKyAgICAgICAJICAgZXhpdCAxCisgICAgICAgCWZpCisKKyAgICAgICAJIyBzb21ldGhpbmcgcmVxdWlyZWQgaXQgOyByZXBvcnQgd2UncmUgdXNpbmcgaXQKKyAgICAgICAJZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfSEFTXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisJaGFzbGlzdD0iJHtoYXNsaXN0fSR7aX0gIgorCisgICAgIworICAgICMgY2hlY2sgdG8gc2VlIGlmIHNvbWV0aGluZyAid2FudGVkIiBpdAorICAgICMKKyAgICBlbGlmIGdyZXAgIk5FVFNOTVBfRkVBVFVSRV9XQU5UXyR7aX0gIiAkZmVhdHVyZWhlYWRlcmdsb2JhbCA+IC9kZXYvbnVsbCA7IHRoZW4KKwkgICAjIG5vdGhpbmcgcmVxdWlyZWQgaXQsIGJ1dCBzb21ldGhpbmcgIndhbnRlZCIgaXQKKworCSAgICMgY2hlY2sgdG8gbWFrZSBzdXJlIHdlIHdlcmVuJ3QgYXNrZWQgdG8gZXhjbHVkZSBpdAorICAgICAgICAgICBpZiBlY2hvICIgJHJlbW92ZXRoZXNlICIgfCBncmVwICIgJGkgIiA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAgICAgICAgICMgd2Ugd2VyZSBzcGVjaWZpY2FsbHkgYXNrZWQgKm5vdCogdG8gdXNlIHRoaXMgZmVhdHVyZQorICAgICAgICAgICAgICAgZWNobyAiI2RlZmluZSBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFXyRpIDEiID4+ICRmZWF0dXJlaGVhZGVyCisgICAgICAgICAgIGVsc2UKKwkgICAgICAgIyBzb21ldGhpbmcgd2FudGVkIGl0LCBzbyB3ZSdsbCBpbmNsdWRlIGl0CisJICAgICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX0hBU18kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorCSAgICAgICBoYXNsaXN0PSIke2hhc2xpc3R9JHtpfSAiCisgICAgICAgICAgIGZpCisKKworICAgICMKKyAgICAjIGNoZWNrIHRvIHNlZSBpZiBzb21ldGhpbmcgcmVxdWlyZWQgYSBwYXJlbnQKKyAgICAjCisgICAgZWxpZiBlZ3JlcCBORVRTTk1QX0ZFQVRVUkVfJHtpfV9DSElMRF9PRiAkZmVhdHVyZWhlYWRlcmdsb2JhbCA+IC9kZXYvbnVsbCA7IHRoZW4KKwlwYXJlbnRuYW1lcz1gZWdyZXAgTkVUU05NUF9GRUFUVVJFXyR7aX1fQ0hJTERfT0YgJGZlYXR1cmVoZWFkZXJnbG9iYWwgfCBzZWQgJ3MvLipDSElMRF9PRl8vLztzLyAuKi8vOydgCisKKwlmb3VuZG9uZT0wCisJZm9yIHBhcmVudG5hbWUgaW4gJHBhcmVudG5hbWVzIDsgZG8KKyAgIAkgICAgIyBpZiB0aGUgcGFyZW50IHdhcyBkZXNpcmVkLCB0aGVuIHdlIGFyZSB0b286CisJICAgIAorCSAgICBpZiB0ZXN0ICRmb3VuZG9uZSA9IDAgOyB0aGVuCisJCWlmIGVncmVwICJORVRTTk1QX0ZFQVRVUkVfSEFTXyR7cGFyZW50bmFtZX0gIiAkZmVhdHVyZWhlYWRlciA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAJCSAgICBlY2hvICIjZGVmaW5lIE5FVFNOTVBfRkVBVFVSRV9IQVNfJGkgMSIgPj4gJGZlYXR1cmVoZWFkZXIKKwkJICAgIGhhc2xpc3Q9IiR7aGFzbGlzdH0ke2l9ICIKKwkJICAgIGZvdW5kb25lPTEKKwkJZmkKKwkgICAgZmkKKyAgICAgICAgZG9uZQorCWlmIHRlc3QgJGZvdW5kb25lID0gMCA7IHRoZW4KKyAgICAJICAgIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV8kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorCWZpCisKKyAgICAjCisgICAgIyBubyBvbmUgcmVxdWlyZWQgb3Igd2FudGVkIGl0IC0tIGl0IGlzIHNhZmUgdG8gcmVtb3ZlIGl0CisgICAgIworICAgIGVsc2UKKyAgICAJIGVjaG8gIiNkZWZpbmUgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV8kaSAxIiA+PiAkZmVhdHVyZWhlYWRlcgorICAgIGZpCitkb25lCisKZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZSBiL2xvY2FsL21pbmltYWxpc3QvZmluZC11bnVzZWQtY29kZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44OWUzYzhjCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlCkBAIC0wLDAgKzEsMTE3IEBACisjIS91c3IvYmluL3BlcmwKKworIyBzZWFyY2hlcyBmb3IgLm8gZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IGFuZCBleGFtaW5lcyBlYWNoIGZvcgorIyBkZWZpbmVkIGZ1bmN0aW9ucyAoVCkgYW5kIHVuZGVmaW5lZCByZWZlcmVuY2VzIChVKSBhbmQgbGlzdHMKKyMgYW55dGhpbmcgdGhhdCBpc24ndCByZXF1aXJlZCBieSBzb21ldGhpbmcgZWxzZSBvciBpdHNlbGYKKworIyB1c2VmdWwgY2FsbGluZyBzb3J0ZWQgYnkgZmlsZToKKyMgICBwZXJsIG1pbmltYWwvZmluZC11bnVzZWQtY29kZSB8IHNvcnQgCisKK3VzZSBGaWxlOjpGaW5kOwordXNlIERhdGE6OkR1bXBlcjsKK3VzZSBzdHJpY3Q7Cit1c2UgR2V0b3B0OjpHVUk6Okxvbmc7CisKK215ICVvcHRzOworCitMb2NhbEdldE9wdGlvbnMoXCVvcHRzLAorCQlbJ2d8Z3JlcCcsICAgICAgInJ1biBmaW5kL2dyZXAgdG8gbG9vayBmb3Igc3RyaW5nIHVzYWdlcyJdLAorICAgICk7CisKK215IChAZmlsZXMsICVkZWZpbmVkLCAlbG9va2luZ2Zvcik7CisKK2ZpbmQoXCZkb3Rfb3MsICIuIik7CisKK2ZvcmVhY2ggbXkgJGZpbGUgKEBmaWxlcykgeworICAgIGNvbGxlY3RfZnJvbV9maWxlKCRmaWxlKTsKK30KKworCitpZiAoJCNBUkdWID4gLTEpIHsKKyAgICBwcmludCAiRHVtcGluZyBmb3VuZCBzeW1ib2wgdXNhZ2VzOlxuXG4iOworICAgIGZvcmVhY2ggbXkgJGFyZyAoQEFSR1YpIHsKKwlwcmludCAiJGFyZzpcbiI7CisJcHJpbnQgIiAgIiwgam9pbigiXG4gICIsIEB7JGRlZmluZWR7JGFyZ317J3VzYWdlcyd9fSksIlxuXG4iOworICAgIH0KKyAgICBleGl0OworfQorCitmb3JlYWNoIG15ICRmdW5jdGlvbiAoc29ydCB7ICRkZWZpbmVkeyRhfXsnc291cmNlJ30gY21wICRkZWZpbmVkeyRifXsnc291cmNlJ30gfSBrZXlzKCVkZWZpbmVkKSkgeworICAgIGlmIChleGlzdHMoJGRlZmluZWR7JGZ1bmN0aW9ufXsnc291cmNlJ30pICYmCisJIWV4aXN0cygkZGVmaW5lZHskZnVuY3Rpb259eyd1c2FnZXMnfSkpIHsKKwlpZiAoY2hlY2tfZm9yX29uY2Vfb25seSgkZGVmaW5lZHskZnVuY3Rpb259eydzb3VyY2UnfSwgJGZ1bmN0aW9uKSkgeworCSAgICBwcmludGYoIiUtMzhzICUtMzhzXG4iLCAkZGVmaW5lZHskZnVuY3Rpb259eydzb3VyY2UnfSwgJGZ1bmN0aW9uKTsKKwkgICAgaWYgKCRvcHRzeydnJ30pIHsKKwkJb3BlbihQLCJmaW5kIC4gLXJlZ2V4ICcuKi5cXChjXFx8eHNcXCknIHwgeGFyZ3MgZ3JlcCAtbiAkZnVuY3Rpb258Iik7CisJCXdoaWxlKDxQPikgeworCQkgICAgcHJpbnQgIiAgJF8iOworCQl9CisJCWNsb3NlKFApOworCQlwcmludCAiXG4iOworCSAgICB9CisJfQorICAgIH0KK30KKworc3ViIGRvdF9vcyB7CisgICAgcmV0dXJuIGlmICghL1wubyQvKTsKKyAgICByZXR1cm4gaWYgKCRGaWxlOjpGaW5kOjpuYW1lID1+IC9cLy5saWJzXC8vKTsKKyMgICAgcmV0dXJuIGlmICgkRmlsZTo6RmluZDo6bmFtZSA9fiAvXC8ocGVybHxweXRob24pXC8vKTsKKyAgICBwdXNoIEBmaWxlcywgJEZpbGU6OkZpbmQ6Om5hbWU7Cit9CisKK3N1YiBjb2xsZWN0X2Zyb21fZmlsZSB7CisgICAgbXkgJGZpbGUgPSBzaGlmdDsKKyMgICAgcHJpbnQgInNlYXJjaGluZyAkZmlsZVxuIjsKKyAgICBvcGVuKEksIm5tICRmaWxlfCIpOworICAgIHdoaWxlKDxJPikgeworCSRkZWZpbmVkeyQxfXsnc291cmNlJ30gPSAkZmlsZSBpZiAoLyBUICguKikvKTsKKwlwdXNoIEB7JGRlZmluZWR7JDF9eyd1c2FnZXMnfX0sICRmaWxlIGlmICgvIFUgKC4qKS8pOworICAgIH0KKyAgICBjbG9zZShJKTsKK30KKwkKK3N1YiBjaGVja19mb3Jfb25jZV9vbmx5IHsKKyAgICBteSAoJGZpbGUsICRmdW5jdGlvbikgPSBAXzsKKyAgICAkZmlsZSA9fiBzL1wuby8uYy87CisgICAgb3BlbihJLCAkZmlsZSk7CisgICAgbXkgJHVzYWdlcyA9IDA7CisgICAgd2hpbGUoPEk+KSB7CisJaWYgKC8kZnVuY3Rpb24vKSB7CisJICAgICR1c2FnZXMrKzsKKwl9CisJaWYgKCR1c2FnZXMgPiAxKSB7CisJICAgIGNsb3NlKEkpOworCSAgICByZXR1cm4gMDsKKwl9CisgICAgfQorICAgIHJldHVybiAxOworfQorCisKK3N1YiBMb2NhbEdldE9wdGlvbnMgeworICAgIGlmIChldmFsIHtyZXF1aXJlIEdldG9wdDo6R1VJOjpMb25nO30pIHsKKyAgICAgICAgaW1wb3J0IEdldG9wdDo6R1VJOjpMb25nOworICAgICAgICAjIG9wdGlvbmFsIGNvbmZpZ3VyZSBjYWxsCisgICAgICAgIEdldG9wdDo6R1VJOjpMb25nOjpDb25maWd1cmUocXcoZGlzcGxheV9oZWxwIG5vX2lnbm9yZV9jYXNlIGNhcHR1cmVfb3V0cHV0IG5vX2d1aSBhbGxvd196ZXJvKSk7CisgICAgICAgIHJldHVybiBHZXRPcHRpb25zKEBfKTsKKyAgICB9CisgICAgcmVxdWlyZSBHZXRvcHQ6Okxvbmc7CisgICAgaW1wb3J0IEdldG9wdDo6TG9uZzsKKyAgICAjIG9wdGlvbmFsIGNvbmZpZ3VyZSBjYWxsCisgICAgR2V0b3B0OjpMb25nOjpDb25maWd1cmUocXcoZGlzcGxheV9oZWxwIG5vX2lnbm9yZV9jYXNlIGNhcHR1cmVfb3V0cHV0KSk7CisgICAgR2V0T3B0aW9ucyhMb2NhbE9wdGlvbnNNYXAoQF8pKTsKK30KKworc3ViIExvY2FsT3B0aW9uc01hcCB7CisgICAgbXkgKCRzdCwgJGNiLCBAb3B0cykgPSAoKHJlZigkX1swXSkgZXEgJ0hBU0gnKSAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICA/ICgxLCAxLCAkX1swXSkgOiAoMCwgMikpOworICAgIGZvciAobXkgJGkgPSAkc3Q7ICRpIDw9ICQjXzsgJGkgKz0gJGNiKSB7CisgICAgICAgIGlmICgkX1skaV0pIHsKKyAgICAgICAgICAgIG5leHQgaWYgKHJlZigkX1skaV0pIGVxICdBUlJBWScgJiYgJF9bJGldWzBdID1+IC9eR1VJOi8pOworICAgICAgICAgICAgcHVzaCBAb3B0cywgKChyZWYoJF9bJGldKSBlcSAnQVJSQVknKSA/ICRfWyRpXVswXSA6ICRfWyRpXSk7CisgICAgICAgICAgICBwdXNoIEBvcHRzLCAkX1skaSsxXSBpZiAoJGNiID09IDIpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBAb3B0czsKK30KZGlmZiAtLWdpdCBhL2xvY2FsL21pbmltYWxpc3QvaWdub3JlLnJlZ2V4cCBiL2xvY2FsL21pbmltYWxpc3QvaWdub3JlLnJlZ2V4cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDliOTljCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvbWluaW1hbGlzdC9pZ25vcmUucmVnZXhwCkBAIC0wLDAgKzEsNCBAQAorfiQKKyMkCitcLy4jCitcLy5zdm5cLwpkaWZmIC0tZ2l0IGEvbG9jYWwvbWluaW1hbGlzdC9yZW1vdmUtdW5uZWVkZWQtbW9kdWxlcyBiL2xvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYWQ0NTk1NAotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL21pbmltYWxpc3QvcmVtb3ZlLXVubmVlZGVkLW1vZHVsZXMKQEAgLTAsMCArMSwxMzAgQEAKKyMhL2Jpbi9wZXJsCisKKyMgc3RlcHM6CisjIDEpIHJ1biBjb25maWd1cmUKKyMgMikgcGVybCBsb2NhbC9taW5pbWFsaXN0L3JlbW92ZS11bm5lZWRlZC1tb2R1bGVzCisjIDMpIG1ha2UgZGVwZW5kCisjIDQpIG1ha2UKKwordXNlIEZpbGU6OkZpbmQ7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIHN0cmljdDsKKworbXkgJWV4Y2VwdGlvbnMgPSBxdygKKyAgIGFnZW50L21pYmdyb3VwL21pYmRlZnMuaCAgICAgICAgICAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvc3RydWN0LmggICAgICAgICAgICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudHgvcHJvdG9jb2wuaCAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50eC9hZ2VudHhfY29uZmlnLmggCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3N1YmFnZW50LmggICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX2luY2x1ZGVzLmggIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYl9tb2R1bGVfaW5pdHMuaCAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliX21vZHVsZV9kb3RfY29uZi5oICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9taWJfbW9kdWxlX3NodXRkb3duLmggIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9pbmNsdWRlcy5oCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvYWdlbnRfbW9kdWxlX2luaXRzLmggICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9hZ2VudF9tb2R1bGVfZG90X2NvbmYuaAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2FnZW50X21vZHVsZV9zaHV0ZG93bi5oCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmMgICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtQ29uZi5jICAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuYyAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbWliSUkvdmFjbV9jb25mLmggICAgICAJICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9zbm1wdjMvdXNtQ29uZi5oICAgICAgIAkgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL3V0aWxpdGllcy9pcXVlcnkuaCAgICAgCSAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvdXRpbF9mdW5jcy9NSUJfU1RBVFNfQ0FDSEVfVElNRU9VVC5oICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9ob3N0X3Jlcy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL2hyX2ZpbGVzeXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvaWYtbWliL2lmVGFibGUvaWZUYWJsZV9kZWZzLmggICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC9pZlRhYmxlX2RlZnMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyAgIGFnZW50L21pYmdyb3VwL21pYklJL21pYklJX2NvbW1vbi5oICAgICAgICAgICAgICAgICAgICAgICAgMQorICAgYWdlbnQvbWliZ3JvdXAvbW50dHlwZXMuaCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgICBhZ2VudC9taWJncm91cC91dGlsaXRpZXMvZXhlY3V0ZS5oICAgICAgICAgICAgICAgICAgICAgICAgIDEKKyk7CisKK215ICVvcHRzOworCitMb2NhbEdldE9wdGlvbnMoXCVvcHRzLAorCQlbJ258ZHJ5LXJ1bicsICAgICAgIkRyeS1ydW4sIGp1c3Qgc2F5IHdoYXQgeW91IHdvdWxkIGRvIl0sCisJCVsndnx2ZXJib3NlJywgICAgICAiU2hvdyB3aGF0IGZpbGVzIGFyZSBiZWluZyBsZWZ0IHRvbyJdLAorICAgICk7CisKK215ICRpbnB1dE1ha2VmaWxlID0gJEFSR1ZbMF0gfHwgImFnZW50L21pYmdyb3VwL01ha2VmaWxlIjsKK215ICRpbnB1dERpciA9ICRBUkdWWzFdIHx8ICJhZ2VudC9taWJncm91cCI7CisKK215ICRjb2xsZWN0aW5nID0gMDsKK215ICglZmlsZXMsIEBmaWxlcyk7CisKK29wZW4oSSwgJGlucHV0TWFrZWZpbGUpOword2hpbGUoPEk+KSB7CisgICAgaWYgKC9taWJfbW9kdWxlX2xpc3RfYz0vKSB7CisJJGNvbGxlY3RpbmcgPSAxOworICAgIH0gZWxzaWYgKCRjb2xsZWN0aW5nKSB7CisJaWYgKCEgL1xcXHMqJC8pIHsKKwkgICAgJGNvbGxlY3RpbmcgPSAwOworCX0KKwljaG9tcCgpOworCXMvXFwvLzsKKwlzL1xzKi8vZzsKKwlzL1wuYy8vOworCXB1c2ggQGZpbGVzLCAiYWdlbnQvbWliZ3JvdXAvJF8iOworCSRmaWxlc3siYWdlbnQvbWliZ3JvdXAvJF8uYyJ9ID0gMTsKKwkkZmlsZXN7ImFnZW50L21pYmdyb3VwLyRfLmgifSA9IDE7CisgICAgfQorfQorCitmaW5kKFwmcmVtb3ZlX2ZpbGVzLCAkaW5wdXREaXIpOworCitzdWIgcmVtb3ZlX2ZpbGVzIHsKKyAgICByZXR1cm4gaWYgKCEvXC5bY2hdJC8pOworICAgIHJldHVybiBpZiAoL1wuaCQvKTsgIyBYWFg6IHdlIG5lZWQgdG8gZGVsZXRlIGhlYWRlcnMgZXZlbnR1YWxseSB0b28KKyAgICByZXR1cm4gaWYgKC9fY29uc3RhbnRzLmgvKTsKKyAgICByZXR1cm4gaWYgKGV4aXN0cygkZXhjZXB0aW9uc3skRmlsZTo6RmluZDo6bmFtZX0pKTsKKworICAgIGlmICghZXhpc3RzKCRmaWxlc3skRmlsZTo6RmluZDo6bmFtZX0pKSB7CisJVW5saW5rKCRfLCAkRmlsZTo6RmluZDo6bmFtZSk7CisgICAgfSBlbHNpZiAoJG9wdHN7J3YnfSkgeworCXByaW50ICJMZWF2aW5nICRGaWxlOjpGaW5kOjpuYW1lXG4iOworICAgIH0KK30KKworc3ViIFVubGluayB7CisgICAgbXkgKCRmaWxlLCAkZnVsbGZpbGUpID0gQF87CisgICAgcHJpbnQgIlJlbW92aW5nICRmdWxsZmlsZVxuIjsKKyAgICBpZiAoISRvcHRzeyduJ30pIHsKKwl1bmxpbmsoJGZpbGUpOworCWlmICgtZiAiJGZpbGUiKSB7CisJICAgIHByaW50ICIqKiogRkFJTEVEIHRvIHJlbW92ZSAkZmlsZVxuIjsgCisJfQorICAgIH0KK30KKworCitzdWIgTG9jYWxHZXRPcHRpb25zIHsKKyAgICBpZiAoZXZhbCB7cmVxdWlyZSBHZXRvcHQ6OkdVSTo6TG9uZzt9KSB7CisgICAgICAgIGltcG9ydCBHZXRvcHQ6OkdVSTo6TG9uZzsKKyAgICAgICAgIyBvcHRpb25hbCBjb25maWd1cmUgY2FsbAorCW15IEBnb3B0cyA9IHF3KG5vX2lnbm9yZV9jYXNlIG5vX2d1aSBhbGxvd196ZXJvKTsKKwlpZiAoJEdldG9wdDo6R1VJOjpMb25nOjpWRVJTSU9OID4gMC4yKSB7CisJICAgIHB1c2ggQGdvcHRzLCBxdyhkaXNwbGF5X2hlbHAgY2FwdHVyZV9vdXRwdXQpOworCX0KKyAgICAgICAgR2V0b3B0OjpHVUk6Okxvbmc6OkNvbmZpZ3VyZShAZ29wdHMpOworICAgICAgICByZXR1cm4gR2V0T3B0aW9ucyhAXyk7CisgICAgfQorICAgIHJlcXVpcmUgR2V0b3B0OjpMb25nOworICAgIGltcG9ydCBHZXRvcHQ6Okxvbmc7CisgICAgIyBvcHRpb25hbCBjb25maWd1cmUgY2FsbAorICAgIEdldG9wdDo6TG9uZzo6Q29uZmlndXJlKHF3KGRpc3BsYXlfaGVscCBub19pZ25vcmVfY2FzZSBjYXB0dXJlX291dHB1dCkpOworICAgIEdldE9wdGlvbnMoTG9jYWxPcHRpb25zTWFwKEBfKSk7Cit9CisKK3N1YiBMb2NhbE9wdGlvbnNNYXAgeworICAgIG15ICgkc3QsICRjYiwgQG9wdHMpID0gKChyZWYoJF9bMF0pIGVxICdIQVNIJykgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgPyAoMSwgMSwgJF9bMF0pIDogKDAsIDIpKTsKKyAgICBmb3IgKG15ICRpID0gJHN0OyAkaSA8PSAkI187ICRpICs9ICRjYikgeworICAgICAgICBpZiAoJF9bJGldKSB7CisgICAgICAgICAgICBuZXh0IGlmIChyZWYoJF9bJGldKSBlcSAnQVJSQVknICYmICRfWyRpXVswXSA9fiAvXkdVSTovKTsKKyAgICAgICAgICAgIHB1c2ggQG9wdHMsICgocmVmKCRfWyRpXSkgZXEgJ0FSUkFZJykgPyAkX1skaV1bMF0gOiAkX1skaV0pOworICAgICAgICAgICAgcHVzaCBAb3B0cywgJF9bJGkrMV0gaWYgKCRjYiA9PSAyKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gQG9wdHM7Cit9CmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbCBiL2xvY2FsL21pbmltYWxpc3QvcmVtb3ZlaWZkZWZjb2RlLnBsCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjVhNjRjMDUKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L3JlbW92ZWlmZGVmY29kZS5wbApAQCAtMCwwICsxLDMzMyBAQAorIyEgL3Vzci9iaW4vcGVybAorCit1c2Ugc3RyaWN0OwordXNlIEZpbGU6OkNvcHk7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgSU86OkZpbGU7Cit1c2UgR2V0b3B0OjpTdGQ7CisKK215ICRJRF9OT1JFQUQgID0gIk5FVFNOTVBfTk9fUkVBRF9TVVBQT1JUIjsKK215ICRJRF9OT1dSSVRFID0gIk5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCI7CisjIG15ICRJRF9NSU4gICAgID0gIk5FVFNOTVBfTUlOSU1BTF9DT0RFIjsKKworbXkoJFNUX09GRiwgJFNUX0lGLCAkU1RfRUxTRSwgJFNUX0lGTiwgJFNUX0VMU0VOKSA9CisgICgib2ZmIiwgImlmIiwgImVsc2UiLCAiaWZub3QiLCAiZWxzZW5vdCIpOworCitteSAlb3B0cyAgICA9ICgpOworbXkgJXRoYXNoICAgPSAoKTsKK215ICRjYW53cml0ZSA9IDE7ICMgY3VycmVudCB3cml0ZSBzdGF0ZQorCitteSgkYXBwbmFtZSwkYXBwcGF0aCkgPSBmaWxlcGFyc2UoJDApOworCitteSAkbWluaW1hbF9pbmNsdWRlX3BhdGggPSAiaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oIjsKKworCitpZiAoICghZ2V0b3B0cygicndtaTp2IixcJW9wdHMpKSB8fCAoMSAhPSAkI0FSR1YpICkgeworICBwcmludCAiJGFwcG5hbWUgW29wdGlvbnNdIGZyb20tZGlyZWN0b3J5IHRvLWRpcmVwY3RvcnlcbiI7CisgIHByaW50ICItciAgICAgcGFyc2Ugb3V0IGNvZGUgdW5uZWVkZWQgYnkgJElEX05PUkVBRCBpZmRlZlxuIjsKKyAgcHJpbnQgIi13ICAgICBwYXJzZSBvdXQgY29kZSB1bm5lZWRlZCBieSAkSURfTk9XUklURSBpZmRlZiAoREVGQVVMVClcbiI7CisgIHByaW50ICItbSAgICAgcGFyc2Ugb3V0IGNvZGUgdW5uZWVkZWQgYWNjb3JkaW5nIG1pbmltYWxpc3QgaWZkZWZzXG4iOworICBwcmludCAiICAgICAgIHJlcXVpcmVzIGZyb20tZGlyZWN0b3J5IHRvIGJlIHRoZSB0b3Agb2YgdGhlIG5ldC1zbm1wIHRyZWVcbiI7CisgIHByaW50ICIgICAgICAgKFRoaXMgaXMgbXVsdGlwbGUgaWZkZWZzIGF1dG8gc2VsZWN0ZWQgZGVwZW5kaW5nXG4iOworICBwcmludCAiICAgICAgICBvbiB0aGUgbmV0LXNubXAgc291cmNlIGNvbmZpZ3VyYXRpb24pXG5cbiI7CisgIHByaW50ICItaSAnaWdub3JlLWZpbGUnICBmaWxlIG9mIGZpbGVzIHRvIGlnbm9yZSAobm90IGNvcHkpXG4iOworICBwcmludCAiLXYgICAgIHByaW50IHZlcmJvc2UgaW5mbyB0byBzdGFuZGFyZCBvdXRcbiI7CisgIGRpZSAiRXJyb3I6IHR3byBjb21tYW5kIGxpbmUgYXJndW1lbnRzIHJlcXVpcmVkXG4iOworfQorCisjZGVmYXVsdCB0byBldmVyeXRoaW5nCitpZiAoICghZXhpc3RzICRvcHRze3J9KSAmJiAoIWV4aXN0cyAkb3B0c3t3fSkgJiYgKCFleGlzdHMgJG9wdHN7bX0pICkgeworICAkdGhhc2h7IiRJRF9OT1dSSVRFIn0gPSAiJFNUX09GRiI7Cit9CitlbHNlIHsKKyAgJHRoYXNoeyIkSURfTk9SRUFEIn0gID0gIiRTVF9PRkYiIGlmICggZXhpc3RzICRvcHRze3J9ICk7CisgICR0aGFzaHsiJElEX05PV1JJVEUifSA9ICIkU1RfT0ZGIiBpZiAoIGV4aXN0cyAkb3B0c3t3fSApOworfQorCitteSAkZnJvbWRpciA9ICRBUkdWWzBdOworbXkgJHRvZGlyICAgPSAkQVJHVlsxXTsKKworaWYgKCAhKC1lICRmcm9tZGlyKSApIHsKKyAgZGllICJFcnJvcjogJGFwcG5hbWU6IGZyb20gZGlyZWN0b3J5IGRvZXMgbm90IGV4aXN0OiAnJGZyb21kaXInXG4iOworfQoraWYgKCAhKC1kICRmcm9tZGlyKSApIHsKKyAgICBkaWUgIkVycm9yOiAkYXBwbmFtZTogZnJvbSBkaXJlY3RvcnksICckZnJvbWRpcicsIG11c3QgYmUgYSBkaXJlY3RvcnlcbiI7Cit9CisKK2lmICggZXhpc3RzICRvcHRze219ICkgeworICAgIGxvYWRfbWluYW1hbF9pZmRlZnMoKTsKK30KKworIyBjcmVhdGUgc2VhcmNoIHN0cmluZyBmcm9tIHRhZ3MKKyMgbWluaW1hbCBtdXN0IGJlIGRvbmUgYmVmb3JlIHRoaXMKK215ICRzZWFyY2ggPSBqb2luICJ8IiwgKGtleXMgJXRoYXNoKTsKKworCisjIGNoZWNrIGZvciBhbmQgbG9hZCBpZ25vcmUgZmlsZQorbXkgJGlnc3RyaW5nID0gIiI7CitpZiAoIGV4aXN0cyAkb3B0c3tpfSApIHsKKyAgb3BlbiBteSgkSUgpLCAiPCAkb3B0c3tpfSIgb3IKKyAgICBkaWUgIkNvdWxkIG5vdCBvcGVuIGlnbm9yZS1maWxlICckb3B0c3tpfSc6ICQhIjsKKyAgbXkgQGlnbGlzdCA9IDwkSUg+OworICAkSUgtPmNsb3NlKCk7CisgIGNob21wIEBpZ2xpc3Q7CisgICRpZ3N0cmluZyA9IGpvaW4gInwiLCBAaWdsaXN0OworICAkaWdzdHJpbmcgPSAiKCIgLiAkaWdzdHJpbmcgLiAiKSI7CisgIHByaW50ICJpZ25vcmUgc3RyaW5nOiBcJyRpZ3N0cmluZ1wnXG4iIGlmIChleGlzdHMgJG9wdHN7dn0pOworfQorCisKKworaWYgKCAtZSAkdG9kaXIgKSB7CisgIGlmICggKCgtZCAkZnJvbWRpcikgJiYgISgtZCAkdG9kaXIpKSB8fAorCSAgICghKC1kICRmcm9tZGlyKSAmJiAoLWQgJHRvZGlyKSkgKSB7CisJZGllICJFcnJvcjogJGFwcG5hbWU6IGZyb20tZGlyZWN0b3J5IGFuZCB0by1kaXJlY3RvcnkgbXVzdCBib3RoIGVpdGhlciBiZSBhIGZpbGUgb3IgYm90aCBiZSBhIGRpcmVjdG9yeVxuIjsKKyAgfQorfQorZWxzZSB7CisgIGlmICgtZCAkZnJvbWRpcikgeworCXByaW50ICJXYXJuaW5nOiAkYXBwbmFtZTogJyR0b2RpcicgZG9lcyBub3QgZXhpc3QsIGNyZWF0aW5nXG4iOworCW1rZGlyICIkdG9kaXIiIG9yCisgICAgICBkaWUgIkVycm9yOiAkYXBwbmFtZTogVW5hYmxlIHRvIGNyZWF0ZSB0by1kaXJlY3RvcnkgJyR0b2Rpcic6ICQhXG4iOworICB9Cit9CisKK2lmICgtZCAkZnJvbWRpcikgeworICBwYXJzZWRpcmVjdG9yeSgkZnJvbWRpciwgJHRvZGlyKTsKK30KK2Vsc2UgeworICBwYXJzZWZpbGUoJGZyb21kaXIsICR0b2Rpcik7Cit9CisKKworCitleGl0KDApOworCisKKyMgUFJPQ0VEVVJFUyAgUFJPQ0VEVVJFUyAgUFJPQ0VEVVJFUyAgUFJPQ0VEVVJFUyAgUFJPQ0VEVVJFUworCisKK3N1YiBwYXJzZWRpcmVjdG9yeSB7CisgIG15KCRmZGlyLCAkdGRpcikgPSBAXzsKKworICBteSBAbGRpcnMgPSAoKTsKKyAgbXkgJERIOworICBvcGVuZGlyIG15KCRESCksICRmZGlyIG9yIGRpZSAiQ291bGQgbm90IG9wZW4gZGlyZWN0b3J5ICckZmRpcic6ICQhIjsKKyAgaWYgKCAhKC1lICR0ZGlyKSB8fCAhKC1kICR0ZGlyKSApIHsKKyAgICBta2RpciAkdGRpciBvciBkaWUgIkNvdWxkIG5vdCBjcmVhdGUgZGlyZWN0b3J5ICckdGRpcic6ICQhIjsKKyAgfQorICBteSBAZmxpc3QgPSByZWFkZGlyICRESDsKKyAgY2xvc2VkaXIgJERIOworICAjIHJlbW92ZSAuIGFuZCAuLgorICBAZmxpc3QgPSBncmVwICghIC8oXlwuJHxeXC5cLiQpLyAsIEBmbGlzdCk7CisKKyAgd2hpbGUgKG15ICRuYW1lID0gc2hpZnQgQGZsaXN0KSB7CisgICAgaWYgKC1kICIkZmRpci8kbmFtZSIpIHsKKyAgICAgIHB1c2ggQGxkaXJzLCAiJG5hbWUiOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIHBhcnNlZmlsZSgiJGZkaXIvJG5hbWUiLCAiJHRkaXIvJG5hbWUiKTsKKyAgICB9CisgIH0KKworICB3aGlsZSAobXkgJG5hbWUgPSBzaGlmdCBAbGRpcnMpIHsKKyAgICBwYXJzZWRpcmVjdG9yeSgiJGZkaXIvJG5hbWUiLCAiJHRkaXIvJG5hbWUiKQorICB9CisKK30gIyBwYXJzZWRpcmVjdG9yeQorCisKKyMgcmV0dXJucyAxIGlmIGN1cnJlbnQgc3RhdGUgZm9yIHRhZyBpcyB3cml0ZSwgMCBvdGhlcndpc2UKK3N1YiBpc3dyaXRlc3RhdGUgeworICBteSAkdGFnID0gIiI7CisKKyAgZm9yZWFjaCAkdGFnIChrZXlzICV0aGFzaCkgeworCWlmICggKCR0aGFzaHskdGFnfSBlcSAiJFNUX0VMU0UiKSB8fAorCQkgKCR0aGFzaHskdGFnfSBlcSAiJFNUX0lGTiIpICkgeworCSAgcmV0dXJuKDApOworICAgIH0KKyAgfQorCisgIHJldHVybigxKTsKK30gIyBpc3dyaXRlc3RhdGUKKworCisjIENoZWNrICRsaW5lIGZvciBpZmRlZiBzdGF0ZSBjaGFuZ2VzIGZvciBhbGwgb2YgdGhlIHRhZ3MgYW5kIGNoYW5nZQorIyBzdGF0ZS4KKyMgSWYgdGhlcmUgaXMgYSBzdGF0ZSBjaGFuZ2UgZXJyb3IgcmV0dXJuIDAsIG90aGVyd2lzZSByZXR1cm4gMTsKKworc3ViIGNoZWNraWZkZWYgeworICBteSgkVEYsICRsaW5lLCAkZnJvbWZpbGVuYW1lKSA9IEBfOworCisgIGlmICggJGxpbmUgPX4gLygjaWZkZWZ8I2lmbmRlZnwjZWxzZXwjZW5kaWYpLiooJHNlYXJjaCkoXHN8JHxcKikvICkgeworICAgIG15ICRjb3B0ID0gJDE7CisgICAgbXkgJHRhZyAgPSAkMjsKKworCWlmICggJGNvcHQgZXEgIiNpZmRlZiIgKSB7CisgICAgICBpZiAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9PRkYiKSB7CisgICAgICAgICR0aGFzaHsiJHRhZyJ9ID0gIiRTVF9JRiI7CisgICAgICAgIHByaW50ICJzdGF0ZSBjaGFuZ2UgJHRhZzogJFNUX09GRiAtPiAkU1RfSUZcbiIgaWYgKGV4aXN0cyAkb3B0c3t2fSk7CisgICAgICAgICRjYW53cml0ZSA9IGlzd3JpdGVzdGF0ZSgpOworICAgICAgfQorICAgICAgZWxzZSB7CisgICAgICAgIHByaW50ICJFcnJvcjogJGZyb21maWxlbmFtZTogRm91bmQgJyNpZmRlZiAkdGFnJyB3aXRoIHN0YXRlICR0aGFzaHskdGFnfVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2lmICggJGNvcHQgZXEgIiNpZm5kZWYiICkgeworICAgICAgaWYgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfT0ZGIikgeworICAgICAgICAjIGJlZm9yZSBjaGFuZ2luZyB0byBhIG5vbi13cml0ZSBzdGF0ZSAoaWZuKSBwcmludCAjSUZOREVGCisgICAgICAgICMgbGluZSwgaWYgY3VycmVudCBzdGF0ZSBpcyBhIHdyaXRlIHN0YXRlLgorICAgICAgICBwcmludCAkVEYgIiRsaW5lIiAgaWYgKCAkY2Fud3JpdGUgKTsKKyAgICAgICAgJHRoYXNoeyIkdGFnIn0gPSAiJFNUX0lGTiI7CisgICAgICAgIHByaW50ICJzdGF0ZSBjaGFuZ2UgJHRhZzogJFNUX09GRiAtPiAkU1RfSUZOXG4iIGlmIChleGlzdHMgJG9wdHN7dn0pOworICAgICAgICAkY2Fud3JpdGUgPSBpc3dyaXRlc3RhdGUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBwcmludCAiRXJyb3I6ICRmcm9tZmlsZW5hbWU6IEZvdW5kICcjaWZuZGVmICR0YWcnIHdpdGggc3RhdGUgJHRoYXNoeyR0YWd9XG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzaWYgKCAkY29wdCBlcSAiI2Vsc2UiICkgeworICAgICAgaWYgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfSUYiKSB7CisgICAgICAgICMgYmVmb3JlIGNoYW5naW5nIHRvIGEgbm9uLXdyaXRlIHN0YXRlIChlbHNlKSBwcmludCAjZWxzZQorICAgICAgICAjIGxpbmUsIGlmIGN1cnJlbnQgc3RhdGUgaXMgYSB3cml0ZSBzdGF0ZS4KKyAgICAgICAgcHJpbnQgJFRGICIkbGluZSIgIGlmICggJGNhbndyaXRlICk7CisgICAgICAgICR0aGFzaHsiJHRhZyJ9ID0gIiRTVF9FTFNFIjsKKyAgICAgICAgcHJpbnQgInN0YXRlIGNoYW5nZSAkdGFnOiAkU1RfSUYgLT4gJFNUX0VMU0VcbiIgaWYgKGV4aXN0cyAkb3B0c3t2fSk7CisgICAgICAgICRjYW53cml0ZSA9IGlzd3JpdGVzdGF0ZSgpOworICAgICAgfQorICAgICAgZWxzaWYgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfSUZOIikgeworICAgICAgICAkdGhhc2h7IiR0YWcifSA9ICIkU1RfRUxTRU4iOworICAgICAgICBwcmludCAic3RhdGUgY2hhbmdlICR0YWc6ICRTVF9JRk4gLT4gJFNUX0VMU0VOXG4iIGlmIChleGlzdHMgJG9wdHN7dn0pOworICAgICAgICAkY2Fud3JpdGUgPSBpc3dyaXRlc3RhdGUoKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBwcmludCAiRXJyb3I6ICRmcm9tZmlsZW5hbWU6IEZvdW5kICcjZWxzZSAoLi4uKSAkdGFnJyB3aXRoIHN0YXRlICR0aGFzaHskdGFnfVxuIjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgICB9CisgICAgfQorICAgIGVsc2lmICggJGNvcHQgZXEgIiNlbmRpZiIgKSB7CisgICAgICBpZiAoKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfRUxTRSIpICB8fCAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9JRiIpIHx8CisgICAgICAgICAgKCR0aGFzaHsiJHRhZyJ9IGVxICIkU1RfRUxTRU4iKSB8fCAoJHRoYXNoeyIkdGFnIn0gZXEgIiRTVF9JRk4iKSkKKyAgICAgIHsKKyAgICAgICAgcHJpbnQgInN0YXRlIGNoYW5nZSAkdGFnOiAkdGhhc2h7JHRhZ30gLT4gJFNUX09GRlxuIgorICAgICAgICAgIGlmIChleGlzdHMgJG9wdHN7dn0pOworICAgICAgICAkdGhhc2h7IiR0YWcifSA9ICIkU1RfT0ZGIjsKKyAgICAgICAgJGNhbndyaXRlID0gaXN3cml0ZXN0YXRlKCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgcHJpbnQgIkVycm9yOiBGb3VuZCAnI2VuZGlmICguLi4pICR0YWcnIHdpdGggc3RhdGUgJHRoYXNoeyR0YWd9XG4iOworICAgICAgICByZXR1cm4gMDsKKyAgICAgIH0KKyAgICB9CisKKyAgfSAjIGZvcmVhY2ggdGFnCisKKyAgcmV0dXJuIDE7Cit9ICMgY2hlY2tpZmRlZgorCisKK3N1YiBwYXJzZWZpbGUgeworICBteSgkZm5hbWUsICR0bmFtZSkgPSBAXzsKKyAgbXkgJEZGOyBteSAkVEY7CisgIG15IEBmcm9tZmlsZSA9ICgpOworICAkY2Fud3JpdGUgPSAxOworCisgICMgaWdub3JlIGZpbGUgZm9yIGZpbGUgbmFtZXMKKyAgaWYgKCAoZXhpc3RzICRvcHRze2l9KSAmJiAoIiRmbmFtZSIgPX4gIC8kaWdzdHJpbmcvKSApIHsKKyAgICBwcmludCAiSUdOT1JJTkcgJGZuYW1lXG4iICBpZiAoIGV4aXN0cyAkb3B0c3t2fSApOworICAgIHJldHVybiAxOworICB9CisKKyAgcHJpbnQgIkluZm86IE9wZW5pbmcgJyRmbmFtZSdcbiIgaWYgKCBleGlzdHMgJG9wdHN7dn0gKTsKKyAgaWYgKCAhKG9wZW4oJEZGLCAiPCAkZm5hbWUiKSkgKSB7CisJcHJpbnQgIldhcm5pbmc6IHVuYWJsZSB0byBvcGVuIGlucHV0IGZpbGUsIHNraXBwaW5nOiAnJGZuYW1lJzogJCFcbiI7CisJcmV0dXJuIDA7CisgIH0KKworICBteSBAZnJvbWZpbGUgPSA8JEZGPjsKKyAgJEZGLT5jbG9zZSgpOworCisgIGlmICggIShvcGVuKCRURiwgIj4gJHRuYW1lIikpICkgeworCXByaW50ICJXYXJuaW5nOiB1bmFibGUgdG8gb3BlbiBvdXRwdXQgZmlsZSwgc2tpcHBpbmc6ICckdG5hbWUnOiAkIVxuIjsKKwlyZXR1cm4gMDsKKyAgfQorICBteSAkbW9kZSA9IChzdGF0KCIkZm5hbWUiKSlbMl07CisgIGlmICgkbW9kZSkgeyBteSAkcmVzcCA9IGNobW9kICRtb2RlLCAiJHRuYW1lIjsgfQorCisgIG15ICRsaW5lICAgPSAiIjsKKyAgbXkgQHRvdXQgID0gKCk7CisgIG15ICRyZXR2YWwgPSAxOworCisgIHdoaWxlICggJGxpbmUgPSBzaGlmdCBAZnJvbWZpbGUgKSB7CisgICAgIyBjaGVjayBmb3IgYW55IGlmZGVmIHN0YXRlIGNoYW5nZXMKKwlpZiAoICEgY2hlY2tpZmRlZigkVEYsICRsaW5lLCAkZm5hbWUpICkgeworICAgICAgJEZGLT5jbG9zZSgpOworICAgICAgJFRGLT5jbG9zZSgpOworICAgICAgZGllICJFcnJvcjogdGFnIGVycm9yIGluIGZpbGUgXCckZm5hbWVcJywgZXhpdGluZ1xuIjsKKyAgICB9CisKKyAgICBpZiAoICRjYW53cml0ZSApIHsKKwkgIHByaW50ICRURiAiJGxpbmUiOworCX0KKwllbHNlIHsKKwkgIHByaW50ICJJbmZvOiBub3QgY29weWluZzogJGZuYW1lOiAkbGluZSIgaWYgKCBleGlzdHMgJG9wdHN7dn0gKTsKKyAgICB9CisKKyAgfQorCisgIGlmICghICRjYW53cml0ZSkgeworICAgICAgcHJpbnQgIkVuZCBvZiAkZm5hbWUgcmVhY2hlZCBhbmQgd2UncmUgbm90IHJlc2V0IGludG8gJ2NhbndyaXRlJyBzdGF0ZVxuIjsKKyAgfQorICAkVEYtPmNsb3NlKCk7CisKKyAgcmV0dXJuICRyZXR2YWw7Cit9ICMgcGFyc2VmaWxlCisKKworIyBub3RlLCBmcm9tZGlyIHNob3VsZCBoYXZlIGFscmVhZHkgYmVlbiBjaGVja2VkIHRvIGV4aXN0IGFuZCBiZSBhCisjIGRpcmVjdG9yeQorc3ViIGxvYWRfbWluYW1hbF9pZmRlZnMgeworICAgIG15IEBmaWxlbGlzdCA9ICgpOworICAgIG15ICRNRjsKKyAgICAKKyAgICBpZiAoICEob3BlbigkTUYsICI8ICRmcm9tZGlyLyRtaW5pbWFsX2luY2x1ZGVfcGF0aCIpKSApIHsKKyAgICAgICAgZGllICJVbmFibGUgdG8gb3BlbiBtYWluIG1pbmltYWwgZmVhdHVyZSBmaWxlOiAnJGZyb21kaXIvJG1pbmltYWxfaW5jbHVkZV9wYXRoJ1xuIjsKKyAgICB9CisgICAgbXkgJGxpbmU7CisgICAgIyBza2lwIHByZWNlZGluZyBsaW5lcworICAgIHdoaWxlICggKCRsaW5lID0gPCRNRj4pICYmCisgICAgICAgICAgICAoJGxpbmUgIX4gL14jZWxzZS4qTkVUU05NUF9GRUFUVVJFX0NIRUNLSU5HLyApICkgeworICAgIH0KKyAgICAjIGdyYWIgdGhlIGZldGF1cmUgLmggZmlsZXMKKyAgICB3aGlsZSAoICgkbGluZSA9IDwkTUY+KSAmJgorICAgICAgICAgICAgKCRsaW5lICF+IC9eI2VuZGlmLipORVRfU05NUF9GRUFUVVJFX0NIRUNLSU5HLykgKSB7CisgICAgICAgIGlmICgkbGluZSA9fiAvaW5jbHVkZS4qPCguKi5oKT4vKSB7CisgICAgICAgICAgICBwdXNoIEBmaWxlbGlzdCwgJDE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjbG9zZSgkTUYpOworCisgICAgd2hpbGUgKG15ICRmbmFtZSA9IHNoaWZ0IEBmaWxlbGlzdCkgeworICAgICAgICBpZiAoICEoIC1lICIkZnJvbWRpci9pbmNsdWRlLyRmbmFtZSIgKSApICB7CisgICAgICAgICAgICBwcmludCAiV2FybjogZmVhdHVyZSBmaWxlIGRvZXMgbm90IGV4aXN0LCBza2lwcGluZzogJyRmcm9tZGlyL2luY2x1ZGUvJGZuYW1lJyI7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisgICAgICAgIGlmICggIShvcGVuKCRNRiwgIjwgJGZyb21kaXIvaW5jbHVkZS8kZm5hbWUiKSkgKSB7CisgICAgICAgICAgICBkaWUgIlVuYWJsZSB0byBvcGVuIG1pbmltYWwgZmVhdHVyZSBmaWxlOiAnJGZyb21kaXIvaW5jbHVkZS8kZm5hbWUnXG4iOworICAgICAgICB9CisgICAgICAgIHdoaWxlICggKCRsaW5lID0gPCRNRj4pICkgeworICAgICAgICAgICAgaWYgKCAkbGluZSA9fiAvXiNkZWZpbmUuKihORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFW14gXSspIC8gKSB7CisgICAgICAgICAgICAgICAgJHRoYXNoeyIkMSJ9ID0gJFNUX09GRjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBjbG9zZSgkTUYpOworICAgIH0KKyAgICAgICAgCit9ICMgbG9hZF9taW5hbWFsX2lmZGVmcworCisKKworCmRpZmYgLS1naXQgYS9sb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0cyBiL2xvY2FsL21pbmltYWxpc3Qvc2l6ZXRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlY2Q2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9taW5pbWFsaXN0L3NpemV0ZXN0cwpAQCAtMCwwICsxLDM1OSBAQAorIyEvdXNyL2Jpbi9wZXJsCisKK3VzZSBzdHJpY3Q7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIEdldG9wdDo6U3RkOwordXNlIElPOjpGaWxlOworb3VyICVvcHRzID0gKGQgPT4gJ3NpemUtdGVzdHMnKTsKKworIyBkZWZhdWx0IGFyZ3VtZW50cyBnbyBoZXJlCitteSBAc2V0cyA9CisgICAgKHsKKwkid2l0aC1kZWZhdWx0cyIgPT4gJycsCisgICAgIH0pOworCitteSAlYmFzZV9hcmdzID0gJXskc2V0c1swXX07CitteSAoJGJhc2VuYW1lLCAkYmFzZW51bSk7CisKK2dldG9wdHMoJ3Q6aGxjRDpuajpvOmViOlQnLCBcJW9wdHMpIHx8IHVzYWdlKCk7CisKKyRvcHRzeydqJ30gPSAiLWokb3B0c3tqfSIgaWYgKGV4aXN0cygkb3B0c3snaid9KSk7CisKK3VzYWdlKCkgaWYgKCRvcHRzeydoJ30pOworCitteSBAYXJndW1lbnRzZXRzID0KKyAgICAoCisgICAgIHsKKwkgdGl0bGUgPT4gJ3NlY3VyaXR5LXR5cGVzJywKKwkgYXJndW1lbnRzID0+CisJIHsKKwkgICAgIHVzbSA9PiB7CisJCSAnd2l0aC1zZWN1cml0eS1tb2R1bGVzJyA9PiAndXNtJywKKwkgICAgIH0sCisJICAgICBkdGxzYW5kdGxzID0+IHsKKwkJICd3aXRoLXNlY3VyaXR5LW1vZHVsZXMnICAgICA9PiAndHNtJywKKwkJICd3aXRoLW91dC1zZWN1cml0eS1tb2R1bGVzJyA9PiAndXNtJywKKwkJICd3aXRoLXRyYW5zcG9ydHMnICAgICAgICAgICA9PiAnRFRMU1VEUCBUTFNUQ1AnLAorCQkgJ3dpdGgtbWliLW1vZHVsZXMnICAgICAgICAgID0+ICd0bHN0bS1taWIgdHNtLW1pYicKKwkgICAgIH0sCisJICAgICB1c21hbmRkdGxzYW5kdGxzID0+IHsKKwkJICd3aXRoLXNlY3VyaXR5LW1vZHVsZXMnICAgICA9PiAndHNtIHVzbScsCisJCSAnd2l0aC10cmFuc3BvcnRzJyAgICAgICAgICAgPT4gJ0RUTFNVRFAgVExTVENQJywKKwkJICd3aXRoLW1pYi1tb2R1bGVzJyAgICAgICAgICA9PiAndGxzdG0tbWliIHRzbS1taWInCisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAnbWluaW1hbGlzdCcsCisJIGFyZ3VtZW50cyA9PgorCSB7IAorCSAgICAgbWluaW1hbCA9PiB7CisJCSAnZW5hYmxlLW1pbmltYWxpc3QnICAgID0+ICcnLAorCSAgICAgfSwKKwkgICAgICdub3QtbWluaW1hbCcgPT4geworCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ21pYi1sb2FkaW5nJywKKwkgYXJndW1lbnRzID0+CisJIHsgCisJICAgICAnd2l0aG91dC1taWItbG9hZGluZycgPT4geworCQkgJ2Rpc2FibGUtbWliLWxvYWRpbmcnICAgID0+ICcnLAorCSAgICAgfSwKKwkgICAgICd3aXRoLW1pYi1sb2FkaW5nJyA9PiB7CisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAnZGVidWdnaW5nJywKKwkgYXJndW1lbnRzID0+CisJIHsgCisJICAgICAnd2l0aG91dC1kZWJ1Z2dpbmcnID0+IHsKKwkJICdkaXNhYmxlLWRlYnVnZ2luZycgICAgPT4gJycsCisJICAgICB9LAorCSAgICAgJ3dpdGgtZGVidWdnaW5nJyA9PiB7CisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAnbG9nZ2luZycsCisJIGFyZ3VtZW50cyA9PgorCSB7IAorCSAgICAgJ3dpdGhvdXQtbG9nZ2luZycgPT4geworCQkgJ3dpdGgtb3V0LWZlYXR1cmVzJyAgICA9PiAnbG9nZ2luZycsCisJICAgICB9LAorCSAgICAgJ3dpdGgtbG9nZ2luZycgPT4geworCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ2FnZW50LW1pYnMnLAorCSBhcmd1bWVudHMgPT4KKwkgeyAKKwkgICAgICdmdWxsLWFnZW50JyA9PiB7CisJICAgICB9LAorCSAgICAgJ21pbmktYWdlbnQnID0+IHsKKwkJICdlbmFibGUtbWluaS1hZ2VudCcgPT4gJycsCisJICAgICB9CisJIH0KKyAgICAgfSwKKyAgICAgeworCSB0aXRsZSA9PiAncHJvdG9jb2wtc3VwcG9ydCcsCisJIGFyZ3VtZW50cyA9PgorCSB7CisJICAgICAnZXZlcnl0aGluZycgPT4geworCSAgICAgfSwKKwkgICAgICdyZWFkLW9ubHknID0+IHsKKwkJICdlbmFibGUtcmVhZC1vbmx5JyA9PiAnJywKKwkgICAgIH0sCisJICAgICAnbm90aWZ5LW9ubHknID0+IHsKKwkJICdlbmFibGUtbm90aWZ5LW9ubHknID0+ICcnLAorCSAgICAgfQorCSB9CisgICAgIH0sCisgICAgIHsKKwkgdGl0bGUgPT4gJ3BlcmwnLAorCSBhcmd1bWVudHMgPT4KKwkgeyAKKwkgICAgICd3aXRob3V0LXBlcmwtbW9kdWxlcycgPT4geworCQkgJ3dpdGhvdXQtcGVybC1tb2R1bGVzJyAgICA9PiAnJywKKwkJICdkaXNhYmxlLWVtYmVkZGVkLXBlcmwnID0+ICcnLAorCSAgICAgfSwKKwkgICAgICd3aXRoLXBlcmwtbm8tZW1iZWRkaW5nJyA9PiB7CisJCSAnd2l0aC1wZXJsLW1vZHVsZXMnICAgID0+ICcnLAorCQkgJ2Rpc2FibGUtZW1iZWRkZWQtcGVybCcgPT4gJycsCisJICAgICB9LAorCSAgICAgJ3dpdGgtcGVybC1hbmQtZW1iZWRkaW5nJyA9PiB7CisJCSAnd2l0aC1wZXJsLW1vZHVsZXMnICAgID0+ICcnLAorCQkgJ2VuYWJsZS1lbWJlZGRlZC1wZXJsJyA9PiAnJywKKwkgICAgIH0KKwkgfQorICAgICB9LAorICAgICk7CisKKyMgbWFwIHRoZXNlIHRvIGEgcmVmZXJlbmNhYmxlIGxvb2t1cCBoYXNoCitteSAlYXJndW1lbnRzZXRzOworZm9yZWFjaCBteSAkc2V0IChAYXJndW1lbnRzZXRzKSB7CisgICAgJGFyZ3VtZW50c2V0c3skc2V0LT57J3RpdGxlJ319ID0gJHNldDsKK30KKworaWYgKCRvcHRzeydsJ30pIHsKKyAgICBwcmludCAiVHlwZXMgYXZhaWxhYmxlOlxuIjsKKyAgICBwcmludGYoIiAgJS00MC40MHMgJXNcbiIsICJUZXN0IFRpdGxlIiwgIk51bWJlciBvZiBzdWJ0ZXN0cyIpOworICAgIHByaW50ZigiICAlLTQwLjQwcyAlc1xuIiwgIi0iIHggMzksICItIiB4IGxlbmd0aCgiTnVtYmVyIG9mIHN1YnRlc3RzIikpOworICAgIGZvcmVhY2ggbXkgJHR5cGUgKEBhcmd1bWVudHNldHMpIHsKKwlteSBAa2V5cyA9IGtleXMoJXskdHlwZS0+eydhcmd1bWVudHMnfX0pOworCXByaW50ZigiICAlLTQwLjQwcyAlc1xuIiwgJHR5cGUtPnsndGl0bGUnfSwgJCNrZXlzKzEpOworICAgIH0KKyAgICBleGl0OworfQorCitteSAldHlwZXM7CitpZiAoJG9wdHN7J3QnfSkgeworICAgIG15IEB0eXBlcyA9IHNwbGl0KC8sXHMqLywgJG9wdHN7J3QnfSk7CisgICAgZm9yZWFjaCBteSAkdHlwZSAoQHR5cGVzKSB7CisJJHR5cGVzeyR0eXBlfSA9IDE7CisgICAgfQorfQorCitpZiAoJG9wdHN7J2InfSkgeworICAgICMgdXNlIHRoaXMgc2V0IGFzIHRoZSBiYXNlIGRlZmF1bHQgc2V0IG9mIGFyZ3VtZW50cworICAgICgkYmFzZW5hbWUsICRiYXNlbnVtKSA9ICgkb3B0c3snYid9ID1+IC8oLiopOihcZCspLyk7CisgICAgaWYgKCFleGlzdHMoJGFyZ3VtZW50c2V0c3skYmFzZW5hbWV9KSkgeworCXByaW50ZiBTVERFUlIgImZhaWxlZCB0byBmaW5kIHNldCBmb3IgLWIgYXJndW1lbnQ6ICVzXG4iLCAkYmFzZW5hbWU7CisJZXhpdCgxKTsKKyAgICB9CisgICAgQHNldHMgPSBhZGRfaW5fZmxhZ3MoJGFyZ3VtZW50c2V0c3skYmFzZW5hbWV9LCBcJWJhc2VfYXJncywgKCkpOworICAgIEBzZXRzID0gQHNldHNbJGJhc2VudW1dOworICAgICViYXNlX2FyZ3MgPSAleyRzZXRzWzBdfTsKK30KKworZm9yZWFjaCBteSAkc2V0IChAYXJndW1lbnRzZXRzKSB7CisgICAgaWYgKCEkb3B0c3sndCd9IHx8IGV4aXN0cygkdHlwZXN7JHNldC0+eyd0aXRsZSd9fSkpIHsKKyAgICAgICAgaWYgKCRiYXNlbmFtZSAmJiAkc2V0LT57J3RpdGxlJ30gZXEgJGJhc2VuYW1lKSB7CisgICAgICAgICAgICBuZXh0OworICAgICAgICB9CisJQHNldHMgPSBhZGRfaW5fZmxhZ3MoJHNldCwgXCViYXNlX2FyZ3MsIEBzZXRzKTsKKyAgICB9Cit9CisKK2lmICgkb3B0c3snYyd9KSB7CisgICAgIyBwcmludCB0aGUgY29uZmlndXJlIGZsYWdzCisgICAgZm9yZWFjaCBteSAkc2V0IChAc2V0cykgeworCXByaW50ICIkc2V0LT57J3RpdGxlJ306XG4iOworCXByaW50ICIgIiwgZ2VuZXJhdGVfY29uZmlndXJlX2ZsYWdzKCRzZXQpLCAiXG4iOworICAgIH0KKyAgICBleGl0OworfQorCitteSAkc3VtbWFyeWZpbGU7CitpZiAoJG9wdHN7J28nfSAmJiAhJG9wdHN7J24nfSkgeworICAgICRzdW1tYXJ5ZmlsZSA9IG5ldyBJTzo6RmlsZTsKKyAgICAkc3VtbWFyeWZpbGUtPm9wZW4oIj4kb3B0c3tvfSIpOworfQorCitteSAkY291bnQgPSAwOworZm9yZWFjaCBteSAkc2V0IChAc2V0cykgeworICAgICRjb3VudCsrOworICAgIGJ1aWxkX3NldCgkY291bnQsICRzZXQpOworfQorCitzdWIgYWRkX2luX2ZsYWdzIHsKKyAgICBteSAoJGFyZ3VtZW50c2V0LCAkYmFzZV9mbGFncywgQGN1cnJlbnRfZmxhZ3MpID0gQF87CisKKyAgICBteSBAbmV3X2ZsYWdzOworCisgICAgIyBkbyBhIGxpbmVhciBzZWFyY2ggb2YgdGhlIG9wdGlvbnMKKyAgICBpZiAoISAkb3B0c3snZSd9KSB7CisJQG5ld19mbGFncyA9IEBjdXJyZW50X2ZsYWdzOworCWZvcmVhY2ggbXkgJG5ld2FyZ3MgKGtleXMoJXskYXJndW1lbnRzZXQtPnsnYXJndW1lbnRzJ319KSkgeworCSAgICBteSAlZmxhZ3MgPSAlJGJhc2VfZmxhZ3M7CisKKwkgICAgJGZsYWdzeyd0aXRsZSd9ID0gIiRmbGFnc3sndGl0bGUnfTokbmV3YXJncyI7CisKKwkgICAgZm9yZWFjaCBteSAkbmV3ZmxhZyAoa2V5cygleyRhcmd1bWVudHNldC0+eydhcmd1bWVudHMnfXskbmV3YXJnc319KSkgeworCisJCSRmbGFnc3skbmV3ZmxhZ30gLj0gIiAkYXJndW1lbnRzZXQtPnsnYXJndW1lbnRzJ317JG5ld2FyZ3N9eyRuZXdmbGFnfSI7CisJICAgIH0KKwkgICAgcHVzaCBAbmV3X2ZsYWdzLCBcJWZsYWdzOworCX0KKwlyZXR1cm4gQG5ld19mbGFnczsKKyAgICB9CisKKyAgICAjIG9yIGFuIGV4cG9uZW50aWFsIHNlYXJjaAorICAgIGZvcmVhY2ggbXkgJGZsYWdzIChAY3VycmVudF9mbGFncykgeworCWZvcmVhY2ggbXkgJG5ld2FyZ3MgKGtleXMoJXskYXJndW1lbnRzZXQtPnsnYXJndW1lbnRzJ319KSkgeworCSAgICBteSAlZmxhZ3MgPSAleyRmbGFnc307ICAjIGNvcHkgdGhlIGV4aXN0aW5nIGhhc2gtc2V0IG9mIGZsYWdzCisJICAgIAorCSAgICBpZiAoZXhpc3RzKCRmbGFnc3sndGl0bGUnfSkpIHsKKwkJJGZsYWdzeyd0aXRsZSd9IC49ICIsICRuZXdhcmdzIjsKKwkgICAgfSBlbHNlIHsKKwkJJGZsYWdzeyd0aXRsZSd9IC49ICIkbmV3YXJncyI7CisJICAgIH0KKwkgICAgZm9yZWFjaCBteSAkbmV3ZmxhZyAoa2V5cygleyRhcmd1bWVudHNldC0+eydhcmd1bWVudHMnfXskbmV3YXJnc319KSkgeworCisJCSRmbGFnc3skbmV3ZmxhZ30gLj0gIiAkYXJndW1lbnRzZXQtPnsnYXJndW1lbnRzJ317JG5ld2FyZ3N9eyRuZXdmbGFnfSI7CisJICAgIH0KKworCSAgICBwdXNoIEBuZXdfZmxhZ3MsIFwlZmxhZ3M7CisJfQorICAgIH0KKworICAgIHJldHVybiBAbmV3X2ZsYWdzOworfQorCitzdWIgZ2VuZXJhdGVfY29uZmlndXJlX2ZsYWdzIHsKKyAgICBteSAoJGFyZ3VtZW50cykgPSBAXzsKKyAgICBteSAkbGluZSA9ICIiOworICAgIGZvcmVhY2ggbXkgJGFyZyAoa2V5cyglJGFyZ3VtZW50cykpIHsKKwluZXh0IGlmICgkYXJnIGVxICd0aXRsZScpOworCWlmICgkYXJndW1lbnRzLT57JGFyZ30gPX4gL15ccyokLykgeworCSAgICAkbGluZSAuPSAiIC0tJGFyZyI7CisJfSBlbHNlIHsKKwkgICAgJGxpbmUgLj0gIiAtLSRhcmc9XCIkYXJndW1lbnRzLT57JGFyZ31cIiI7CisJfQorICAgIH0KKyAgICByZXR1cm4gJGxpbmU7Cit9CisKK3N1YiBidWlsZF9zZXQgeworICAgIG15ICgkbnVtLCAkYXJndW1lbnRzKSA9IEBfOworCisgICAgJG51bSA9IHNwcmludGYoIiUwM2QiLCAkbnVtKTsKKworICAgIG15ICRmaWxlOworCisgICAgaWYgKCEkb3B0c3snbid9KSB7CisJbWtkaXIgJG9wdHN7J2QnfSBpZiAoISAtZCAkb3B0c3snZCd9KTsKKwlkaWUgImZhaWxlZCB0byBjcmVhdGUgdGhlICRvcHRzeydkJ30gZGlyZWN0b3J5IiBpZiAoISAtZCAkb3B0c3snZCd9KTsKKworCSRmaWxlID0gbmV3IElPOjpGaWxlOworCSRmaWxlLT5vcGVuKCI+JG9wdHN7J2QnfS8kbnVtLTAtY21kLXN1bW1hcnkiKTsKKwkkZmlsZS0+cHJpbnQoIkNyZWF0aW5nIG91dHB1dCBmb3I6ICRhcmd1bWVudHMtPnsndGl0bGUnfVxuIik7CisgICAgfQorCisgICAgcHJpbnQgIj09PT09PT09PT09PT09PT09PT09ICRhcmd1bWVudHMtPnsndGl0bGUnfVxuIjsKKworCisgICAgU3lzdGVtICgkZmlsZSwgJG51bSwgIjEtZGlzdGNsZWFuIiwgIm1ha2UgZGlzdGNsZWFuIik7CisgICAgU3lzdGVtICgkZmlsZSwgJG51bSwgIjItY29uZmlndXJlIiwKKwkgICAgIi4vY29uZmlndXJlICIgLiBnZW5lcmF0ZV9jb25maWd1cmVfZmxhZ3MoJGFyZ3VtZW50cykpOworICAgIFN5c3RlbSAoJGZpbGUsICRudW0sICIzLWZlYXR1cmVzIiwgIm1ha2UgZmVhdHVyZXMiKTsKKyAgICBTeXN0ZW0gKCRmaWxlLCAkbnVtLCAiNC1tYWtlIiwgIm1ha2UgJG9wdHN7J2onfSIpOworICAgIFN5c3RlbSAoJGZpbGUsICRudW0sICI1LXVudXNlZC1jb2RlIiwgInBlcmwgbG9jYWwvbWluaW1hbGlzdC9maW5kLXVudXNlZC1jb2RlIC1nIik7CisgICAgU3lzdGVtICgkZmlsZSwgJG51bSwgIjYtdGVzdGluZyIsICJtYWtlIC1DIHRlc3RpbmcgdGVzdCIpIGlmICgkb3B0c3snVCd9KTsKKworICAgIGlmICghJG9wdHN7J24nfSkgeworCWFuYWx5emVfc2l6ZSgkYXJndW1lbnRzLT57J3RpdGxlJ30sICIkb3B0c3snZCd9LyRudW0tOS1yZXN1bHRzIik7CisgICAgfQorfQorCitzdWIgYW5hbHl6ZV9zaXplIHsKKyAgICBteSAoJHRpdGxlLCAkZmlsZW5hbWUpID0gQF87CisKKyAgICBteSAkb3V0ZmlsZSA9IG5ldyBJTzo6RmlsZTsKKyAgICAkb3V0ZmlsZS0+b3BlbigiPiRmaWxlbmFtZSIpOworCisgICAgcHJpbnQgIlJlc3VsdHMgZm9yOiAkdGl0bGVcbiI7CisgICAgcHJpbnRmICRvdXRmaWxlICJSZXN1bHRzIGZvcjogJHRpdGxlXG4iOworICAgIHByaW50ZiAoIiUtNTAuNTBzICUxMHNcbiIsICItIiB4IDQ5LCAiLSIgeCAxMCk7CisgICAgcHJpbnRmICRvdXRmaWxlICgiJS01MC41MHMgJTEwc1xuIiwgIi0iIHggNDksICItIiB4IDEwKTsKKworICAgIG15ICR0b3RhbHNpemUgPSAwOworICAgIGZvcmVhY2ggbXkgJGJ1aWxkZmlsZSAoZ2xvYigic25tcGxpYi8ubGlicy9saWIqLnNvLiouMC4wIiksCisJCQkgICBnbG9iKCJhZ2VudC8ubGlicy9saWIqLnNvLiouMC4wIiksCisJCQkgICAiYWdlbnQvLmxpYnMvc25tcGQiKSB7CisKKwlteSBAaW5mbyA9IHN0YXQoJGJ1aWxkZmlsZSk7CisJcHJpbnRmICRvdXRmaWxlICgiJS01MC41MHMgJTEwc1xuIiwgJGJ1aWxkZmlsZSwgJGluZm9bN10pOworCXByaW50ZigiJS01MC41MHMgJTEwc1xuIiwgJGJ1aWxkZmlsZSwgJGluZm9bN10pOworCSR0b3RhbHNpemUgKz0gJGluZm9bN107CisgICAgfQorICAgIHByaW50ZiAkb3V0ZmlsZSAoIiUtNTAuNTBzICUxMHNcbiIsICItIiB4IDQ5LCAiLSIgeCAxMCk7CisgICAgcHJpbnRmICRvdXRmaWxlICgiJS01MC41MHMgJTEwcyBieXRlc1xuIiwgIlRPVEFMIiwgJHRvdGFsc2l6ZSk7CisKKyAgICBwcmludGYoIiUtNTAuNTBzICUxMHNcbiIsICItIiB4IDQ5LCAiLSIgeCAxMCk7CisgICAgcHJpbnRmKCIlLTUwLjUwcyAlMTBzIGJ5dGVzXG4iLCAiVE9UQUwiLCAkdG90YWxzaXplKTsKKworICAgIGlmIChkZWZpbmVkKCRzdW1tYXJ5ZmlsZSkpIHsKKwlteSAkcmVzdHJpY3RlZF90aXRsZSA9ICR0aXRsZTsKKwkkcmVzdHJpY3RlZF90aXRsZSA9fiBzL1teYS16QS1aXS9fL2c7CisJcHJpbnRmICRzdW1tYXJ5ZmlsZSAiJTEwcyAlcyBcbiIsICR0b3RhbHNpemUsICR0aXRsZTsKKyAgICB9CisKKyAgICByZXR1cm4gJHRvdGFsc2l6ZTsKK30KKworc3ViIHVzYWdlIHsKKyAgICBwcmludCAiVXNhZ2U6ICQwIFtGTEFHU11cblxuIjsKKyAgICBwcmludCAiRkxBR1M6XG4iOworICAgIHByaW50ICIgIC1oXHRcdGhlbHBcbiI7CisgICAgcHJpbnQgIiAgLXQgVFlQRVNcdFNlbGVjdCB0eXBlcyB0byBhbmFseXplIChkZWZhdWx0ID0gYWxsKVxuIjsKKyAgICBwcmludCAiICAtbFx0XHRMaXN0IGF2YWlsYWJsZSB0eXBlc1xuIjsKKyAgICBwcmludCAiICAtY1x0XHRQcmludCB0aGUgY29uZmlndXJhdGlvbiBmbGFncyB0aGF0IHdvdWxkIGJlIHVzZWRcbiI7CisgICAgcHJpbnQgIiAgLUQgRElSXHRTYXZlIGRhdGEgcmVzdWx0cyB0byB0aGlzIGRpcmVjdG9yeVxuIjsKKyAgICBwcmludCAiICAtbyBGSUxFXHRTYXZlIGEgY29tcGxldGUgc3VtbWFyeSBjaGFydCB0byBGSUxFXG4iOyAKKyAgICBwcmludCAiICAtblx0XHREcnkgcnVuIC0tIG9ubHkgc2hvdyB0aGUgY29tbWFuZHMgdG8gZXhlY3V0ZVxuIjsKKyAgICBwcmludCAiICAtaiBOVU1cdEV4ZWN1dGUgbWFrZSB3aXRoIHBhcmFsbGVsIGJ1aWxkaW5nICgtak5VTSlcbiI7CisgICAgcHJpbnQgIiAgLWVcdFx0VXNlIGV4cG9uZW50aWFsIGV4cGFuc2lvbiAoYWxsIGNvbWJvcykgb2YgdGhlIHJlcXVlc3RlZCBvcHRpb25zXG4iOworICAgIHByaW50ICIgIC1iIE5BTUU6TlVNXHRVc2UgTkFNRSBhbmQgdGhlIE5VTSd0aCBzZXQgYXMgdGhlIGJhc2UgYXJndW1lbnRzIHRvIHN0YXJ0IGZyb21cbiI7CisgICAgcHJpbnQgIiAgLVRcdFx0UnVuICdtYWtlIHRlc3QnIGF0IGVhY2ggc3RlcCBhcyB3ZWxsXG4iOworICAgIGV4aXQ7Cit9CisKK3N1YiBTeXN0ZW0geworICAgIG15ICRmaWxlICA9IHNoaWZ0OworICAgIG15ICRudW0gICA9IHNoaWZ0OworICAgIG15ICR0aXRsZSA9IHNoaWZ0OworICAgIG15ICRwaXBlID0gIiAyPiYxIHwgdGVlICRvcHRzeydkJ30vJG51bS0kdGl0bGUub3V0XG4iOworCisgICAgcHJpbnQgIiMjIyAiLCBqb2luKCIgIiwgQF8pLCAkcGlwZTsKKyAgICBpZiAoISRvcHRzeyduJ30gJiYgJGZpbGUpIHsKKwlwcmludCAkZmlsZSAiIyMjICIsIGpvaW4oIiAiLCBAXyksICJcbiI7CisgICAgfQorCisgICAgaWYgKCEkb3B0c3snbid9KSB7CisJc3lzdGVtKGpvaW4oIiAiLCBAXykgLiAkcGlwZSk7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbG9jYWwvbmV0LXNubXAtY2VydCBiL2xvY2FsL25ldC1zbm1wLWNlcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYTQ1ZGM1NwotLS0gL2Rldi9udWxsCisrKyBiL2xvY2FsL25ldC1zbm1wLWNlcnQKQEAgLTAsMCArMSwyNjkwIEBACisjIS91c3IvYmluL3BlcmwKKwordXNlIHN0cmljdDsKK3VzZSA1LjguMDsKKwordXNlIEdldG9wdDo6TG9uZyBxdyg6Y29uZmlnIGdudV9nZXRvcHQgbm9faWdub3JlX2Nhc2UgcGFzc190aHJvdWdoKTsKK3VzZSBDd2QgcXcoZ2V0Y3dkIHJlYWxwYXRoKTsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpDb3B5OwordXNlIEZpbGU6OlBhdGg7Cit1c2UgU3lzOjpIb3N0bmFtZTsKK3VzZSBDYXJwOworCitvdXIgQENDID0gKAorWyJBRiIsIkFGR0hBTklTVEFOIl0sCitbIkFYIiwiw4VMQU5EIElTTEFORFMiXSwKK1siQUwiLCJBTEJBTklBIl0sCitbIkRaIiwiQUxHRVJJQSJdLAorWyJBUyIsIkFNRVJJQ0FOIFNBTU9BIl0sCitbIkFEIiwiQU5ET1JSQSJdLAorWyJBTyIsIkFOR09MQSJdLAorWyJBSSIsIkFOR1VJTExBIl0sCitbIkFRIiwiQU5UQVJDVElDQSJdLAorWyJBRyIsIkFOVElHVUEgQU5EIEJBUkJVREEiXSwKK1siQVIiLCJBUkdFTlRJTkEiXSwKK1siQU0iLCJBUk1FTklBIl0sCitbIkFXIiwiQVJVQkEiXSwKK1siQVUiLCJBVVNUUkFMSUEiXSwKK1siQVQiLCJBVVNUUklBIl0sCitbIkFaIiwiQVpFUkJBSUpBTiJdLAorWyJCUyIsIkJBSEFNQVMiXSwKK1siQkgiLCJCQUhSQUlOIl0sCitbIkJEIiwiQkFOR0xBREVTSCJdLAorWyJCQiIsIkJBUkJBRE9TIl0sCitbIkJZIiwiQkVMQVJVUyJdLAorWyJCRSIsIkJFTEdJVU0iXSwKK1siQloiLCJCRUxJWkUiXSwKK1siQkoiLCJCRU5JTiJdLAorWyJCTSIsIkJFUk1VREEiXSwKK1siQlQiLCJCSFVUQU4iXSwKK1siQk8iLCJCT0xJVklBLCBQTFVSSU5BVElPTkFMIFNUQVRFIE9GIl0sCitbIkJBIiwiQk9TTklBIEFORCBIRVJaRUdPVklOQSJdLAorWyJCVyIsIkJPVFNXQU5BIl0sCitbIkJWIiwiQk9VVkVUIElTTEFORCJdLAorWyJCUiIsIkJSQVpJTCJdLAorWyJJTyIsIkJSSVRJU0ggSU5ESUFOIE9DRUFOIFRFUlJJVE9SWSJdLAorWyJCTiIsIkJSVU5FSSBEQVJVU1NBTEFNIl0sCitbIkJHIiwiQlVMR0FSSUEiXSwKK1siQkYiLCJCVVJLSU5BIEZBU08iXSwKK1siQkkiLCJCVVJVTkRJIl0sCitbIktIIiwiQ0FNQk9ESUEiXSwKK1siQ00iLCJDQU1FUk9PTiJdLAorWyJDQSIsIkNBTkFEQSJdLAorWyJDViIsIkNBUEUgVkVSREUiXSwKK1siS1kiLCJDQVlNQU4gSVNMQU5EUyJdLAorWyJDRiIsIkNFTlRSQUwgQUZSSUNBTiBSRVBVQkxJQyJdLAorWyJURCIsIkNIQUQiXSwKK1siQ0wiLCJDSElMRSJdLAorWyJDTiIsIkNISU5BIl0sCitbIkNYIiwiQ0hSSVNUTUFTIElTTEFORCJdLAorWyJDQyIsIkNPQ09TIChLRUVMSU5HKSBJU0xBTkRTIl0sCitbIkNPIiwiQ09MT01CSUEiXSwKK1siS00iLCJDT01PUk9TIl0sCitbIkNHIiwiQ09OR08iXSwKK1siQ0QiLCJDT05HTywgVEhFIERFTU9DUkFUSUMgUkVQVUJMSUMgT0YgVEhFIl0sCitbIkNLIiwiQ09PSyBJU0xBTkRTIl0sCitbIkNSIiwiQ09TVEEgUklDQSJdLAorWyJDSSIsIkPDlFRFIEQnSVZPSVJFIl0sCitbIkhSIiwiQ1JPQVRJQSJdLAorWyJDVSIsIkNVQkEiXSwKK1siQ1kiLCJDWVBSVVMiXSwKK1siQ1oiLCJDWkVDSCBSRVBVQkxJQyJdLAorWyJESyIsIkRFTk1BUksiXSwKK1siREoiLCJESklCT1VUSSJdLAorWyJETSIsIkRPTUlOSUNBIl0sCitbIkRPIiwiRE9NSU5JQ0FOIFJFUFVCTElDIl0sCitbIkVDIiwiRUNVQURPUiJdLAorWyJFRyIsIkVHWVBUIl0sCitbIlNWIiwiRUwgU0FMVkFET1IiXSwKK1siR1EiLCJFUVVBVE9SSUFMIEdVSU5FQSJdLAorWyJFUiIsIkVSSVRSRUEiXSwKK1siRUUiLCJFU1RPTklBIl0sCitbIkVUIiwiRVRISU9QSUEiXSwKK1siRksiLCJGQUxLTEFORCBJU0xBTkRTIChNQUxWSU5BUykiXSwKK1siRk8iLCJGQVJPRSBJU0xBTkRTIl0sCitbIkZKIiwiRklKSSJdLAorWyJGSSIsIkZJTkxBTkQiXSwKK1siRlIiLCJGUkFOQ0UiXSwKK1siR0YiLCJGUkVOQ0ggR1VJQU5BIl0sCitbIlBGIiwiRlJFTkNIIFBPTFlORVNJQSJdLAorWyJURiIsIkZSRU5DSCBTT1VUSEVSTiBURVJSSVRPUklFUyJdLAorWyJHQSIsIkdBQk9OIl0sCitbIkdNIiwiR0FNQklBIl0sCitbIkdFIiwiR0VPUkdJQSJdLAorWyJERSIsIkdFUk1BTlkiXSwKK1siR0giLCJHSEFOQSJdLAorWyJHSSIsIkdJQlJBTFRBUiJdLAorWyJHUiIsIkdSRUVDRSJdLAorWyJHTCIsIkdSRUVOTEFORCJdLAorWyJHRCIsIkdSRU5BREEiXSwKK1siR1AiLCJHVUFERUxPVVBFIl0sCitbIkdVIiwiR1VBTSJdLAorWyJHVCIsIkdVQVRFTUFMQSJdLAorWyJHRyIsIkdVRVJOU0VZIl0sCitbIkdOIiwiR1VJTkVBIl0sCitbIkdXIiwiR1VJTkVBLUJJU1NBVSJdLAorWyJHWSIsIkdVWUFOQSJdLAorWyJIVCIsIkhBSVRJIl0sCitbIkhNIiwiSEVBUkQgSVNMQU5EIEFORCBNQ0RPTkFMRCBJU0xBTkRTIl0sCitbIlZBIiwiSE9MWSBTRUUgKFZBVElDQU4gQ0lUWSBTVEFURSkiXSwKK1siSE4iLCJIT05EVVJBUyJdLAorWyJISyIsIkhPTkcgS09ORyJdLAorWyJIVSIsIkhVTkdBUlkiXSwKK1siSVMiLCJJQ0VMQU5EIl0sCitbIklOIiwiSU5ESUEiXSwKK1siSUQiLCJJTkRPTkVTSUEiXSwKK1siSVIiLCJJUkFOLCBJU0xBTUlDIFJFUFVCTElDIE9GIl0sCitbIklRIiwiSVJBUSJdLAorWyJJRSIsIklSRUxBTkQiXSwKK1siSU0iLCJJU0xFIE9GIE1BTiJdLAorWyJJTCIsIklTUkFFTCJdLAorWyJJVCIsIklUQUxZIl0sCitbIkpNIiwiSkFNQUlDQSJdLAorWyJKUCIsIkpBUEFOIl0sCitbIkpFIiwiSkVSU0VZIl0sCitbIkpPIiwiSk9SREFOIl0sCitbIktaIiwiS0FaQUtIU1RBTiJdLAorWyJLRSIsIktFTllBIl0sCitbIktJIiwiS0lSSUJBVEkiXSwKK1siS1AiLCJLT1JFQSwgREVNT0NSQVRJQyBQRU9QTEUnUyBSRVBVQkxJQyBPRiJdLAorWyJLUiIsIktPUkVBLCBSRVBVQkxJQyBPRiJdLAorWyJLVyIsIktVV0FJVCJdLAorWyJLRyIsIktZUkdZWlNUQU4iXSwKK1siTEEiLCJMQU8gUEVPUExFJ1MgREVNT0NSQVRJQyBSRVBVQkxJQyJdLAorWyJMViIsIkxBVFZJQSJdLAorWyJMQiIsIkxFQkFOT04iXSwKK1siTFMiLCJMRVNPVEhPIl0sCitbIkxSIiwiTElCRVJJQSJdLAorWyJMWSIsIkxJQllBTiBBUkFCIEpBTUFISVJJWUEiXSwKK1siTEkiLCJMSUVDSFRFTlNURUlOIl0sCitbIkxUIiwiTElUSFVBTklBIl0sCitbIkxVIiwiTFVYRU1CT1VSRyJdLAorWyJNTyIsIk1BQ0FPIl0sCitbIk1LIiwiTUFDRURPTklBLCBUSEUgRk9STUVSIFlVR09TTEFWIFJFUFVCTElDIE9GIl0sCitbIk1HIiwiTUFEQUdBU0NBUiJdLAorWyJNVyIsIk1BTEFXSSJdLAorWyJNWSIsIk1BTEFZU0lBIl0sCitbIk1WIiwiTUFMRElWRVMiXSwKK1siTUwiLCJNQUxJIl0sCitbIk1UIiwiTUFMVEEiXSwKK1siTUgiLCJNQVJTSEFMTCBJU0xBTkRTIl0sCitbIk1RIiwiTUFSVElOSVFVRSJdLAorWyJNUiIsIk1BVVJJVEFOSUEiXSwKK1siTVUiLCJNQVVSSVRJVVMiXSwKK1siWVQiLCJNQVlPVFRFIl0sCitbIk1YIiwiTUVYSUNPIl0sCitbIkZNIiwiTUlDUk9ORVNJQSwgRkVERVJBVEVEIFNUQVRFUyBPRiJdLAorWyJNRCIsIk1PTERPVkEsIFJFUFVCTElDIE9GIl0sCitbIk1DIiwiTU9OQUNPIl0sCitbIk1OIiwiTU9OR09MSUEiXSwKK1siTUUiLCJNT05URU5FR1JPIl0sCitbIk1TIiwiTU9OVFNFUlJBVCJdLAorWyJNQSIsIk1PUk9DQ08iXSwKK1siTVoiLCJNT1pBTUJJUVVFIl0sCitbIk1NIiwiTVlBTk1BUiJdLAorWyJOQSIsIk5BTUlCSUEiXSwKK1siTlIiLCJOQVVSVSJdLAorWyJOUCIsIk5FUEFMIl0sCitbIk5MIiwiTkVUSEVSTEFORFMiXSwKK1siQU4iLCJORVRIRVJMQU5EUyBBTlRJTExFUyJdLAorWyJOQyIsIk5FVyBDQUxFRE9OSUEiXSwKK1siTloiLCJORVcgWkVBTEFORCJdLAorWyJOSSIsIk5JQ0FSQUdVQSJdLAorWyJORSIsIk5JR0VSIl0sCitbIk5HIiwiTklHRVJJQSJdLAorWyJOVSIsIk5JVUUiXSwKK1siTkYiLCJOT1JGT0xLIElTTEFORCJdLAorWyJNUCIsIk5PUlRIRVJOIE1BUklBTkEgSVNMQU5EUyJdLAorWyJOTyIsIk5PUldBWSJdLAorWyJPTSIsIk9NQU4iXSwKK1siUEsiLCJQQUtJU1RBTiJdLAorWyJQVyIsIlBBTEFVIl0sCitbIlBTIiwiUEFMRVNUSU5JQU4gVEVSUklUT1JZLCBPQ0NVUElFRCJdLAorWyJQQSIsIlBBTkFNQSJdLAorWyJQRyIsIlBBUFVBIE5FVyBHVUlORUEiXSwKK1siUFkiLCJQQVJBR1VBWSJdLAorWyJQRSIsIlBFUlUiXSwKK1siUEgiLCJQSElMSVBQSU5FUyJdLAorWyJQTiIsIlBJVENBSVJOIl0sCitbIlBMIiwiUE9MQU5EIl0sCitbIlBUIiwiUE9SVFVHQUwiXSwKK1siUFIiLCJQVUVSVE8gUklDTyJdLAorWyJRQSIsIlFBVEFSIl0sCitbIlJFIiwiUsOJVU5JT04iXSwKK1siUk8iLCJST01BTklBIl0sCitbIlJVIiwiUlVTU0lBTiBGRURFUkFUSU9OIl0sCitbIlJXIiwiUldBTkRBIl0sCitbIkJMIiwiU0FJTlQgQkFSVEjDiUxFTVkiXSwKK1siU0giLCJTQUlOVCBIRUxFTkEsIEFTQ0VOU0lPTiBBTkQgVFJJU1RBTiBEQSBDVU5IQSJdLAorWyJLTiIsIlNBSU5UIEtJVFRTIEFORCBORVZJUyJdLAorWyJMQyIsIlNBSU5UIExVQ0lBIl0sCitbIk1GIiwiU0FJTlQgTUFSVElOIl0sCitbIlBNIiwiU0FJTlQgUElFUlJFIEFORCBNSVFVRUxPTiJdLAorWyJWQyIsIlNBSU5UIFZJTkNFTlQgQU5EIFRIRSBHUkVOQURJTkVTIl0sCitbIldTIiwiU0FNT0EiXSwKK1siU00iLCJTQU4gTUFSSU5PIl0sCitbIlNUIiwiU0FPIFRPTUUgQU5EIFBSSU5DSVBFIl0sCitbIlNBIiwiU0FVREkgQVJBQklBIl0sCitbIlNOIiwiU0VORUdBTCJdLAorWyJSUyIsIlNFUkJJQSJdLAorWyJTQyIsIlNFWUNIRUxMRVMiXSwKK1siU0wiLCJTSUVSUkEgTEVPTkUiXSwKK1siU0ciLCJTSU5HQVBPUkUiXSwKK1siU0siLCJTTE9WQUtJQSJdLAorWyJTSSIsIlNMT1ZFTklBIl0sCitbIlNCIiwiU09MT01PTiBJU0xBTkRTIl0sCitbIlNPIiwiU09NQUxJQSJdLAorWyJaQSIsIlNPVVRIIEFGUklDQSJdLAorWyJHUyIsIlNPVVRIIEdFT1JHSUEgQU5EIFRIRSBTT1VUSCBTQU5EV0lDSCBJU0xBTkRTIl0sCitbIkVTIiwiU1BBSU4iXSwKK1siTEsiLCJTUkkgTEFOS0EiXSwKK1siU0QiLCJTVURBTiJdLAorWyJTUiIsIlNVUklOQU1FIl0sCitbIlNKIiwiU1ZBTEJBUkQgQU5EIEpBTiBNQVlFTiJdLAorWyJTWiIsIlNXQVpJTEFORCJdLAorWyJTRSIsIlNXRURFTiJdLAorWyJDSCIsIlNXSVRaRVJMQU5EIl0sCitbIlNZIiwiU1lSSUFOIEFSQUIgUkVQVUJMSUMiXSwKK1siVFciLCJUQUlXQU4sIFBST1ZJTkNFIE9GIENISU5BIl0sCitbIlRKIiwiVEFKSUtJU1RBTiJdLAorWyJUWiIsIlRBTlpBTklBLCBVTklURUQgUkVQVUJMSUMgT0YiXSwKK1siVEgiLCJUSEFJTEFORCJdLAorWyJUTCIsIlRJTU9SLUxFU1RFIl0sCitbIlRHIiwiVE9HTyJdLAorWyJUSyIsIlRPS0VMQVUiXSwKK1siVE8iLCJUT05HQSJdLAorWyJUVCIsIlRSSU5JREFEIEFORCBUT0JBR08iXSwKK1siVE4iLCJUVU5JU0lBIl0sCitbIlRSIiwiVFVSS0VZIl0sCitbIlRNIiwiVFVSS01FTklTVEFOIl0sCitbIlRDIiwiVFVSS1MgQU5EIENBSUNPUyBJU0xBTkRTIl0sCitbIlRWIiwiVFVWQUxVIl0sCitbIlVHIiwiVUdBTkRBIl0sCitbIlVBIiwiVUtSQUlORSJdLAorWyJBRSIsIlVOSVRFRCBBUkFCIEVNSVJBVEVTIl0sCitbIkdCIiwiVU5JVEVEIEtJTkdET00iXSwKK1siVVMiLCJVTklURUQgU1RBVEVTIl0sCitbIlVNIiwiVU5JVEVEIFNUQVRFUyBNSU5PUiBPVVRMWUlORyBJU0xBTkRTIl0sCitbIlVZIiwiVVJVR1VBWSJdLAorWyJVWiIsIlVaQkVLSVNUQU4iXSwKK1siVlUiLCJWQU5VQVRVIl0sCitbIlZFIiwiVkVORVpVRUxBLCBCT0xJVkFSSUFOIFJFUFVCTElDIE9GIl0sCitbIlZOIiwiVklFVCBOQU0iXSwKK1siVkciLCJWSVJHSU4gSVNMQU5EUywgQlJJVElTSCJdLAorWyJWSSIsIlZJUkdJTiBJU0xBTkRTLCBVLlMuIl0sCitbIldGIiwiV0FMTElTIEFORCBGVVRVTkEiXSwKK1siRUgiLCJXRVNURVJOIFNBSEFSQSJdLAorWyJZRSIsIllFTUVOIl0sCitbIlpNIiwiWkFNQklBIl0sCitbIlpXIiwiWklNQkFCV0UiXSwKKyk7CisKK3BhY2thZ2UgTmV0U05NUDo6VGVybTsKKyMgZ3JhdGVmdWxseSB0YWtlbiBmcm9tIFdheW5lIFRob21wc29uJ3MgVGVybTo6Q29tcGxldGUKKyMgaWYgbmV3ZXIgQ09SRSBtb2R1bGVzIGNvdWxkIGJlIHVzZWQgdGhpcyBjb3VsZCBiZSByZW1vdmVkCitvdXIoJGNvbXBsZXRlLCAkZXhpdCwgJGRvbmUsICRraWxsLCAkZXJhc2UxLCAkZXJhc2UyLCAkdHR5X3Jhd19ub2VjaG8sICR0dHlfcmVzdG9yZSwgJHN0dHksICR0dHlfc2FmZV9yZXN0b3JlKTsKK291cigkdHR5X3NhdmVkX3N0YXRlKSA9ICcnOworQ09ORklHOiB7CisgICRleGl0ICAgPSAiXDAwMyI7CisgICRkb25lICAgPSAiXDAwNCI7CisgICRraWxsICAgPSAiXDAyNSI7CisgICRlcmFzZTEgPSAgICJcMTc3IjsKKyAgJGVyYXNlMiA9ICAgIlwwMTAiOworICBmb3JlYWNoIG15ICRzIChxdygvYmluL3N0dHkgL3Vzci9iaW4vc3R0eSkpIHsKKyAgICBpZiAoLXggJHMpIHsKKyAgICAgICR0dHlfcmF3X25vZWNobyA9ICIkcyByYXcgLWVjaG8iOworICAgICAgJHR0eV9yZXN0b3JlICAgID0gIiRzIC1yYXcgZWNobyI7CisgICAgICAkdHR5X3NhZmVfcmVzdG9yZSA9ICR0dHlfcmVzdG9yZTsKKyAgICAgICRzdHR5ID0gJHM7CisgICAgICBsYXN0OworICAgIH0KKyAgfQorfQorCitzdWIgQ29tcGxldGUgeworICBteSgkcHJvbXB0LCAkZGZsdCwgJGhlbHAsICRtYXRjaCwgQGNtcF9sc3QpOworICBteSAoJWhlbHAsICRjbXAsICR0ZXN0LCAkbCwgQG1hdGNoKTsKKyAgbXkgKCRyZXR1cm4sICRyLCAkZXhpdHRpbmcpID0gKCIiLCAwLCAwKTsKKyAgbXkgJHRhYjsKKworICAkcHJvbXB0ID0gc2hpZnQ7CisgICRkZmx0ID0gc2hpZnQ7CisgICRoZWxwID0gc2hpZnQ7CisgICRtYXRjaCA9IHNoaWZ0OworCisgIGlmIChyZWYgJF9bMF0gYW5kIHJlZigkX1swXVswXSkpIHsKKyAgICBAY21wX2xzdCA9IEB7JF9bMF19OworICB9IGVsc2UgeworICAgIEBjbXBfbHN0ID0gQF87CisgIH0KKyAgQGNtcF9sc3QgPSBtYXAge2lmIChyZWYoJF8pKSB7ICRoZWxweyRfLT5bMF19PSRfLT5bMV07ICRfLT5bMF19IGVsc2UgeyRfO319IEBjbXBfbHN0OworCisgICMgQXR0ZW1wdCB0byBzYXZlIHRoZSBjdXJyZW50IHN0dHkgc3RhdGUsIHRvIGJlIHJlc3RvcmVkIGxhdGVyCisgIGlmIChkZWZpbmVkICRzdHR5ICYmIGRlZmluZWQgJHR0eV9zYXZlZF9zdGF0ZSAmJiAkdHR5X3NhdmVkX3N0YXRlIGVxICcnKSB7CisgICAgJHR0eV9zYXZlZF9zdGF0ZSA9IHF4KCRzdHR5IC1nIDI+L2Rldi9udWxsKTsKKyAgICBpZiAoJD8pIHsKKyAgICAgICMgc3R0eSAtZyBub3Qgc3VwcG9ydGVkCisgICAgICAkdHR5X3NhdmVkX3N0YXRlID0gdW5kZWY7CisgICAgfSBlbHNlIHsKKyAgICAgICR0dHlfc2F2ZWRfc3RhdGUgPX4gcy9ccyskLy9nOworICAgICAgJHR0eV9yZXN0b3JlID0gcXEoJHN0dHkgIiR0dHlfc2F2ZWRfc3RhdGUiIDI+L2Rldi9udWxsKTsKKyAgICB9CisgIH0KKyAgc3lzdGVtICR0dHlfcmF3X25vZWNobyBpZiBkZWZpbmVkICR0dHlfcmF3X25vZWNobzsKKyBMT09QOiB7CisgICAgbG9jYWwgJF87CisgICAgcHJpbnQoJHByb21wdCwgJHJldHVybik7CisgICAgd2hpbGUgKCgkXyA9IGdldGMoU1RESU4pKSBuZSAiXHIiKSB7CisgICAgQ0FTRTogeworCSMgKFRBQikgYXR0ZW1wdCBjb21wbGV0aW9uCisJJF8gZXEgIlx0IiAmJiBkbyB7CisJICBpZiAoJHRhYikgeworCSAgICBwcmludChqb2luKCJcclxuIiwgJycsIG1hcCB7ZXhpc3RzICRoZWxweyRffSA/IHNwcmludGYoIlx0JS0xMC4xMHMgLSAlcyIsICRfLCAkaGVscHskX30pIDoKKwkJCQkJICAiXHQkXyJ9IGdyZXAoL15cUSRyZXR1cm4vLCBAY21wX2xzdCkpLCAiXHJcbiIpOworCSAgICAkdGFiLS07CisJICAgIHJlZG8gTE9PUDsKKwkgIH0KKwkgIEBtYXRjaCA9IGdyZXAoL15cUSRyZXR1cm4vLCBAY21wX2xzdCk7CisJICB1bmxlc3MgKCQjbWF0Y2ggPCAwKSB7CisJICAgICRsID0gbGVuZ3RoKCR0ZXN0ID0gc2hpZnQoQG1hdGNoKSk7CisJICAgIGZvcmVhY2ggJGNtcCAoQG1hdGNoKSB7CisJICAgICAgdW50aWwgKHN1YnN0cigkY21wLCAwLCAkbCkgZXEgc3Vic3RyKCR0ZXN0LCAwLCAkbCkpIHsKKwkJJGwtLTsKKwkgICAgICB9CisJICAgIH0KKwkgICAgcHJpbnQoIlxhIik7CisJICAgIHByaW50KCR0ZXN0ID0gc3Vic3RyKCR0ZXN0LCAkciwgJGwgLSAkcikpOworCSAgICAkciA9IGxlbmd0aCgkcmV0dXJuIC49ICR0ZXN0KTsKKwkgIH0KKwkgICR0YWIrKzsKKwkgIGxhc3QgQ0FTRTsKKwl9OworCisJIyAoXkMpIGV4aXQKKwkkXyBlcSAkZXhpdCAmJiBkbyB7CisJICBwcmludCgiXHJcbmFib3J0aW5nIGFwcGxpY2F0aW9uLi4uXHJcbiIpOworCSAgJGV4aXR0aW5nKys7CisJICB1bmRlZiAkcmV0dXJuOworCSAgbGFzdCBMT09QOworCX07CisKKwkjICheRCkgZG9uZQorCSRfIGVxICRkb25lICYmIGRvIHsKKwkgIHVuZGVmICRyZXR1cm47CisJICBsYXN0IExPT1A7CisJfTsKKworCSMgKD8pIHNob3cgaGVscCBpZiBhdmFpbGFibGUKKwkkXyBlcSAnPycgJiYgZG8geworCSAgcHJpbnQoIlxyXG4kaGVscFxyXG4iKTsKKwkgIGlmIChleGlzdHMgJGhlbHB7JHJldHVybn0pIHsKKwkgICAgcHJpbnQoIlx0JHJldHVybiAtICRoZWxweyRyZXR1cm59XHJcbiIpOworCSAgfSBlbHNlIHsKKwkgICAgcHJpbnQoam9pbigiXHJcbiIsIG1hcCB7ZXhpc3RzICRoZWxweyRffSA/ICJcdCRfIC0gJGhlbHB7JF99IiA6CisJCQkJICAgICAgIlx0JF8ifSBncmVwKC9eXFEkcmV0dXJuLywgQGNtcF9sc3QpKSwgIlxyXG4iKTsKKwkgIH0KKwkgIHJlZG8gTE9PUDsKKwl9OworCisJIyAoXlUpIGtpbGwKKwkkXyBlcSAka2lsbCAmJiBkbyB7CisJICBpZiAoJHIpIHsKKwkgICAgJHIJPSAwOworCSAgICAkcmV0dXJuCT0gIiI7CisJICAgIHByaW50KCJcclxuIik7CisJICAgIHJlZG8gTE9PUDsKKwkgIH0KKwkgIGxhc3QgQ0FTRTsKKwl9OworCisJIyAoREVMKSB8fCAoQlMpIGVyYXNlCisJKCRfIGVxICRlcmFzZTEgfHwgJF8gZXEgJGVyYXNlMikgJiYgZG8geworCSAgaWYgKCRyKSB7CisJICAgIHByaW50KCJcYiBcYiIpOworCSAgICBjaG9wKCRyZXR1cm4pOworCSAgICAkci0tOworCSAgfQorCSAgbGFzdCBDQVNFOworCX07CisKKwkjIHByaW50YWJsZSBjaGFyCisJb3JkID49IDMyICYmIGRvIHsKKwkgICRyZXR1cm4gLj0gJF87CisJICAkcisrOworCSAgcHJpbnQ7CisJICBsYXN0IENBU0U7CisJfTsKKyAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGVmaW5lZCAkcmV0dXJuKSB7CisgICAgICBpZiAobGVuZ3RoKCRyZXR1cm4pID09IDAgb3IgJHJldHVybiBlcSAkZGZsdCkgeworCSRyZXR1cm4gPSAkZGZsdDsKKyAgICAgIH0gZWxzaWYgKCRtYXRjaCA9PSAkTmV0U05NUDo6Q2VydDo6TUFUQ0ggYW5kIHNjYWxhcihncmVwIHsvXiRyZXR1cm4kL30gQGNtcF9sc3QpICE9IDEgb3IKKwkgICAgICAgJG1hdGNoID09ICROZXRTTk1QOjpDZXJ0OjpQUkVNQVRDSCBhbmQgc2NhbGFyKGdyZXAgeyRyZXR1cm49fi8kXy99IEBjbXBfbHN0KSAhPSAxKSB7CisJJHIJPSAwOworCSRyZXR1cm4JPSAiIjsKKwlwcmludCgiXHJcbkNob29zZSBhIHZhbGlkIG9wdGlvbiwgb3IgXkQgdG8gZXhpdFxyXG4iKTsKKwlyZWRvIExPT1A7CisgICAgICB9CisgICAgfQorICB9CisgRE9ORToKKyAgIyBzeXN0ZW0gJHR0eV9yZXN0b3JlIGlmIGRlZmluZWQgJHR0eV9yZXN0b3JlOworICBpZiAoZGVmaW5lZCAkdHR5X3NhdmVkX3N0YXRlICYmIGRlZmluZWQgJHR0eV9yZXN0b3JlICYmIGRlZmluZWQgJHR0eV9zYWZlX3Jlc3RvcmUpIHsKKyAgICBzeXN0ZW0gJHR0eV9yZXN0b3JlOworICAgIGlmICgkPykgeworICAgICAgIyB0dHlfcmVzdG9yZSBjYXVzZWQgZXJyb3IKKyAgICAgIHN5c3RlbSAkdHR5X3NhZmVfcmVzdG9yZTsKKyAgICB9CisgIH0KKworICBleGl0KDEpIGlmICRleGl0dGluZzsKKyAgcHJpbnQoIlxuIik7CisgIHJldHVybiAkcmV0dXJuOworfQorCitwYWNrYWdlIE5ldFNOTVA6OkNlcnQ7CisKK291ciAkVkVSU0lPTiAgICAgID0gJzAuMi45JzsKKworb3VyICRQUk9HICAgICAgICAgPSA6OmJhc2VuYW1lKCQwKTsKK291ciAkREVCVUcgICAgICAgID0gMDsKK291ciAkT0sgICAgICAgICAgID0gMDsKK291ciAkRVJSICAgICAgICAgID0gLTE7CisKKyMgdXNlciBpbnB1dCBwYXJhbQorb3VyICRNQVRDSCAgICAgICAgPSAxOworb3VyICRQUkVNQVRDSCAgICAgPSAyOworCisjIExvYWQgTFdQIGlmIHBvc3NpYmxlIHRvIGltcG9ydCBjZXJ0IGZyb20gVVJMCitldmFsKCd1c2UgTFdQOjpVc2VyQWdlbnQ7Jyk7CitvdXIgJGhhdmVVc2VyQWdlbnQgPSAoJEAgPyAwIDogMSk7CisKKyMgcmVxdWlyZWQgZXhlY3V0YWJsZXMKK291ciAkT1BFTlNTTCAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9PUEVOU1NMfSAgfHwgJ29wZW5zc2wnOworb3VyICRDRkdUT09MICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0NGR1RPT0x9ICB8fCAnbmV0LXNubXAtY29uZmlnJzsKKworIyBkZWZhdWx0IGFwcCBjb25maWcgZmlsZQorb3VyICRDRkdGSUxFICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0NGR0ZJTEV9ICB8fCAnbmV0LXNubXAtY2VydC5jb25mJzsKKworIyBkZWZhdWx0IE9wZW5TU0wgY29uZmlnIGZpbGVzCitvdXIgJFNTTENGR0lOICAgID0gJEVOVntORVRfU05NUF9DUlRfU1NMQ0ZHSU59IHx8ICdvcGVuc3NsLmluJzsKK291ciAkU1NMQ0ZHT1VUICAgPSAkRU5We05FVF9TTk1QX0NSVF9TU0xDRkdJTn0gfHwgJy5vcGVuc3NsLmNvbmYnOworb3VyICRTU0xDRkcgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX1NTTENGR307CisKKyMgZGVmYXVsdCBjbWQgbG9ncworb3VyICRPVVRMT0cgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX09VVExPR30gICB8fCAnLmNtZC5vdXQubG9nJzsKK291ciAkRVJSTE9HICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9FUlJMT0d9ICAgfHwgJy5jbWQuZXJyLmxvZyc7CisKKyMgZGVmYXVsdCBjZXJ0IGRpcnMKK291ciAkVExTRElSICAgICAgPSAkRU5We05FVF9TTk1QX0NSVF9UTFNESVJ9ICAgfHwgJ3Rscyc7CitvdXIgJENSVERJUiAgICAgID0gJEVOVntORVRfU05NUF9DUlRfQ1JURElSfSAgIHx8ICdjZXJ0cyc7CitvdXIgJE5FV0NSVERJUiAgID0gJEVOVntORVRfU05NUF9DUlRfTkVXQ1JURElSfXx8ICduZXdjZXJ0cyc7CitvdXIgJENBRElSICAgICAgID0gJEVOVntORVRfU05NUF9DUlRfQ0FESVJ9ICAgIHx8ICdjYS1jZXJ0cyc7CitvdXIgJFBSSVZESVIgICAgID0gJEVOVntORVRfU05NUF9DUlRfUFJJVkRJUn0gIHx8ICdwcml2YXRlJzsKKworb3VyICRTRVJJQUwgICAgICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX1NFUklBTH0gICB8fCAnLnNlcmlhbCc7CitvdXIgJElOREVYICAgICAgID0gJEVOVntORVRfU05NUF9DUlRfSU5ERVh9ICAgIHx8ICcuaW5kZXgnOworCitvdXIgJERFRkNBREFZUyAgID0gJEVOVntORVRfU05NUF9DUlRfREVGQ0FEQVlTfSB8fCAxODI1Oworb3VyICRERUZDUlREQVlTICA9ICRFTlZ7TkVUX1NOTVBfQ1JUX0RFRkNSVERBWVN9fHwgMzY1OworCitvdXIgQFRMU0RJUlMgICAgID0gKCRDUlRESVIsICRORVdDUlRESVIsICRDQURJUiwgJFBSSVZESVIpOworCitvdXIgQENSVFNVRkZJWEVTID0gcXcoLnBlbSAuY3NyIC5kZXIgLmNydCk7CisKK291ciBAWDUwOUZNVFMgPSBxdyh0ZXh0IG1vZHVsdXMgc2VyaWFsIHN1YmplY3RfaGFzaCBpc3N1ZXJfaGFzaCBoYXNoIHN1YmplY3QKKwkJICAgIHB1cnBvc2UgaXNzdWVyIHN0YXJ0ZGF0ZSBlbmRkYXRlIGRhdGVzIGZpbmdlcnByaW50IEMpOworCitzdWIgZHByaW50IHsKKyAgbXkgJHN0ciA9IHNoaWZ0OworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZGxldmVsID0gc2hpZnQgfHwgMTsKKyAgbXkgJGZsYWcgPSAoZGVmaW5lZCAkb3B0cyA/IGludCgkb3B0cy0+eydkZWJ1Zyd9ID49ICRkbGV2ZWwpIDogMSk7CisgIG15ICgkcGtnLCAkZmlsZSwgJGxpbmUsICRzdWIpID0gY2FsbGVyKDEpOworICBteSAoJHBrZzAsICRmaWxlMCwgJGxpbmUwKSA9IGNhbGxlcigwKTsKKyAgcHJpbnQoIiR7c3VifSgpOiRsaW5lMDogJHN0ciIpIGlmICRmbGFnOworfQorCitzdWIgZHdhcm4geworICBteSAkc3RyID0gc2hpZnQ7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRkbGV2ZWwgPSBzaGlmdCB8fCAxOworICBteSAkZmxhZyA9IChkZWZpbmVkICRvcHRzID8gJG9wdHMtPnsnZGVidWcnfSA+PSAkZGxldmVsIDogMSk7CisgIG15ICgkcGtnLCAkZmlsZSwgJGxpbmUsICRzdWIpID0gY2FsbGVyKDEpOworICBteSAoJHBrZzAsICRmaWxlMCwgJGxpbmUwKSA9IGNhbGxlcigwKTsKKyAgd2FybigiJHtzdWJ9KCk6JGxpbmUwOiAkc3RyIikgaWYgJGZsYWc7Cit9CisKK3N1YiB2cHJpbnQgeworICBteSAkc3RyID0gc2hpZnQ7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRmbGFnID0gKGRlZmluZWQgJG9wdHMgPyAkb3B0cy0+eyd2ZXJib3NlJ30gOiAxKTsKKyAgbXkgJGRlYnVnID0gKGRlZmluZWQgJG9wdHMgPyAkb3B0cy0+eydkZWJ1Zyd9IDogMSk7CisgIG15ICgkcGtnLCAkZmlsZSwgJGxpbmUsICRzdWIpID0gY2FsbGVyKDEpOworICBteSAoJHBrZzAsICRmaWxlMCwgJGxpbmUwKSA9IGNhbGxlcigwKTsKKyAgJHN0ciA9ICgkZGVidWcgPyAiJHtzdWJ9KCk6JGxpbmUwOiAkc3RyIiA6ICIkc3RyIik7CisgIHByaW50KCIkc3RyIikgaWYgJGZsYWc7Cit9CisKK3N1YiB2d2FybiB7CisgIG15ICRzdHIgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSBzaGlmdDsKKyAgbXkgJGZsYWcgPSAoZGVmaW5lZCAkb3B0cyA/ICRvcHRzLT57J3ZlcmJvc2UnfSA6IDEpOworICBteSAoJHBrZywgJGZpbGUsICRsaW5lLCAkc3ViKSA9IGNhbGxlcigxKTsKKyAgbXkgKCRwa2cwLCAkZmlsZTAsICRsaW5lMCkgPSBjYWxsZXIoMCk7CisgIHdhcm4oIiR7c3VifSgpOiRsaW5lMDogJHN0ciIpIGlmICRmbGFnOworfQorCitzdWIgcnN5c3RlbSB7CisgIG15ICRjbWQgPSBzaGlmdDsKKyAgbXkgJGZsYWcgPSBzaGlmdDsKKworICAjIGlmIG5vdCBydW5uaW5nIGFzIHJvb3QgdHJ5IHRvIHVzZSBzdWRvCisgIGlmICgkPikgeworICAgICRjbWQgPSAic3VkbyAkZmxhZyAkY21kIjsKKyAgfSBlbHNlIHsKKyAgICBpZiAoJGZsYWcgPX4gLy1iLykgeworICAgICAgJGNtZCA9ICIkY21kIFwmIjsKKyAgICB9CisgIH0KKyAgZGllKCJjbWQgZmFpbGVkKCQhKTogJGNtZFxuIikgaWYgc3lzdGVtKCIkY21kIik7Cit9CisKK3N1YiB1c3lzdGVtIHsKKyAgbXkgJGNtZCA9IHNoaWZ0OworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkcmV0OworCisgIHVubGluayAkTmV0U05NUDo6Q2VydDo6T1VUTE9HIGlmIC1lICROZXRTTk1QOjpDZXJ0OjpPVVRMT0c7CisgIHVubGluayAkTmV0U05NUDo6Q2VydDo6RVJSTE9HIGlmIC1lICROZXRTTk1QOjpDZXJ0OjpFUlJMT0c7CisKKyAgJHJldCA9IHN5c3RlbSgiJGNtZCIpOworCisgIGlmICgkcmV0KSB7CisgICAgaWYgKCRvcHRzLT57J3ZlcmJvc2UnfSkgeworICAgICAgc3lzdGVtKCJjYXQgJE5ldFNOTVA6OkNlcnQ6Ok9VVExPRyIpIGlmIC1yICROZXRTTk1QOjpDZXJ0OjpPVVRMT0c7CisgICAgICBzeXN0ZW0oImNhdCAkTmV0U05NUDo6Q2VydDo6RVJSTE9HIikgaWYgLXIgJE5ldFNOTVA6OkNlcnQ6OkVSUkxPRzsKKyAgICB9CisgICAgZGllKCJjbWQgZmFpbGVkKCQhKTogJGNtZFxuIik7CisgIH0KK30KKworc3ViIGhvbWVfZGlyIHsKKyAgbXkgJGNkaXIgPSA6OmdldGN3ZCgpOworCisgIGNoZGlyKCJ+Iik7CisgIG15ICRkaXIgPSA6OmdldGN3ZCgpOworICBjaGRpcigkY2Rpcik7CisKKyAgcmV0dXJuICRkaXI7Cit9CisKK3N1YiBmaW5kX2Jpbl9kaXIgeworICAjIFRoaXMgY29kZSBmaW5kcyB0aGUgcGF0aCB0byB0aGUgY3VycmVudGx5IGludm9rZWQgcHJvZ3JhbSBhbmQKKyAgbXkgJGRpcjsKKworICAkMCA9fiBtJV4oKFteL10qKSguKikvKShbXi9dKykkJTsKKyAgaWYgKCQxKSB7CisgICAgaWYgKCQyKSB7CisgICAgICAjIEludm9rZWQgdXNpbmcgYSByZWxhdGl2ZSBwYXRoLiAgQ0QgdGhlcmUgYW5kIHVzZSBwd2QuCisgICAgICAkZGlyID0gYGNkICQxICYmIHB3ZGA7CisgICAgICBjaG9tcCAkZGlyOworICAgIH0gZWxzZSB7CisgICAgICAjIEludm9rZWQgdXNpbmcgYW4gYWJzb2x1dGUgcGF0aDsgdGhhdCdzIGl0IQorICAgICAgJGRpciA9ICQzOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICAjIE5vIHBhdGguICBMb29rIGluIFBBVEggZm9yIHRoZSBmaXJzdCBpbnN0YW5jZS4KKyAgICBmb3JlYWNoIG15ICRwIChzcGxpdCAvOi8sICRFTlZ7UEFUSH0pIHsKKyAgICAgICRwIHx8PSAnLic7CisgICAgICAteCAiJHAvJDQiIG9yIG5leHQ7CisgICAgICAkZGlyID0gJHA7CisgICAgfQorICB9CisgICRkaXIgb3IgZGllICJDYW5ub3QgbG9jYXRlIHByb2dyYW0gJyQwJyEiOworfQorCitzdWIgZnFfcmVsX3BhdGggeworICBteSAkcGF0aCA9IHNoaWZ0OworICBteSAkY3dkID0gOjpnZXRjd2QoKTsKKyAgbXkgJHJkaXIgPSBzaGlmdCB8fCAkY3dkOworCisgIGNoZGlyKCRyZGlyKSBvciBkaWUoImNhbid0IGNoYW5nZSBkaXJlY3Rvcnk6ICRyZGlyIik7CisgICMgZ2V0IGZ1bGx5IHF1YWxpZmllZCBwYXRoCisgIGlmICgkcGF0aCAhfiBtfF4vfCkgeworICAgIG15ICRwd2QgPSBgcHdkYDsgY2hvbXAgJHB3ZDsKKyAgICAkcGF0aCA9ICIkcHdkLyRwYXRoIjsKKyAgICAkcGF0aCA9IDo6cmVhbHBhdGgoJHBhdGgpIGlmIC1lICRwYXRoOworICB9CisgIGNoZGlyKCRjd2QpIG9yIGRpZSgiY2FuJ3QgY2hhbmdlIGRpcmVjdG9yeTogJGN3ZCIpOworCisgIHJldHVybiAkcGF0aDsKK30KKworc3ViIGRpcl9lbXB0eQorICB7CisgICAgbXkgJHBhdGggPSBzaGlmdDsKKyAgICBvcGVuZGlyKERJUiwgJHBhdGgpOworICAgIGZvcmVhY2ggKHJlYWRkaXIoRElSKSkgeworICAgICAgbmV4dCBpZiAvXlwuXC4/JC87CisgICAgICBjbG9zZWRpcihESVIpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGNsb3NlZGlyKERJUik7CisgICAgcmV0dXJuIDE7CisgIH0KKworc3ViIG1ha2VfZGlycyB7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRkaXIgPSBzaGlmdDsKKyAgbXkgJG1vZGUgPSBzaGlmdDsKKyAgbXkgQGRpcnMgPSBAXzsKKworICBteSAkd2QgPSA6OmdldGN3ZCgpOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgibWFrZSBkaXJzIFskZGlyOkBkaXJzXSBmcm9tICR3ZFxuIiwgJG9wdHMpOworCisgIDo6bWtwYXRoKCRkaXIsICRvcHRzLT57J2RlYnVnJ30sICRtb2RlKSBvciBkaWUoImVycm9yIC0gY2FuJ3QgbWFrZSAkZGlyIikKKyAgICBpZiBkZWZpbmVkICRkaXIgYW5kIG5vdCAtZCAkZGlyOworCisgIGZvcmVhY2ggbXkgJHN1YmRpciAoQGRpcnMpIHsKKyAgICBteSAkZCA9ICIkc3ViZGlyIjsKKyAgICAkZCA9ICIkZGlyLyRkIiBpZiBkZWZpbmVkICRkaXI7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJtYWtpbmcgZGlyZWN0b3J5OiAkZFxuIiwgJG9wdHMpIHVubGVzcyAtZCAkZDsKKyAgICBta2RpcigkZCwgJG1vZGUpIG9yIGRpZSgiZXJyb3IgLSBjYW4ndCBtYWtlICRkIikgdW5sZXNzIC1kICRkOworICB9Cit9CisKK3N1YiBpc191cmwgeworICBteSAkdXJsID0gc2hpZnQ7CisKKyAgcmV0dXJuICR1cmwgPX4gL14oPyNQcm90b2NvbCkoPzooPzpodHxmKXRwKD86cz8pXDpcL1wvfH5cL3xcLyk/KD8jVXNlcm5hbWU6UGFzc3dvcmQpKD86XHcrOlx3K0ApPyg/I1N1YmRvbWFpbnMpKD86KD86Wy1cd10rXC4pKyg/I1RvcExldmVsIERvbWFpbnMpKD86Y29tfG9yZ3xuZXR8Z292fG1pbHxiaXp8aW5mb3xtb2JpfG5hbWV8YWVyb3xqb2JzfG11c2V1bXx0cmF2ZWx8W2Etel17Mn0pKSg/I1BvcnQpKD86OltcZF17MSw1fSk/KD8jRGlyZWN0b3JpZXMpKD86KD86KD86XC8oPzpbLVx3fiEkK3wuLD1dfCVbYS1mXGRdezJ9KSspK3xcLykrfFw/fCMpPyg/I1F1ZXJ5KSg/Oig/Olw/KD86Wy1cd34hJCt8LiwqOl18JVthLWZcZHsyfV0pKz0/KD86Wy1cd34hJCt8LiwqOj1dfCVbYS1mXGRdezJ9KSopKD86Jig/OlstXHd+ISQrfC4sKjpdfCVbYS1mXGR7Mn1dKSs9Pyg/OlstXHd+ISQrfC4sKjo9XXwlW2EtZlxkXXsyfSkqKSopKig/I0FuY2hvcikoPzojKD86Wy1cd34hJCt8LiwqOj1dfCVbYS1mXGRdezJ9KSopPyQvOworfQorCitzdWIgaW5fc2V0IHsKKyAgbXkgJGVsZW0gPSBzaGlmdDsKKyAgbXkgJHNldCA9IHNoaWZ0OworICBmb3IgbXkgJGUgKGV2YWwoJHNldCkpIHsKKyAgICByZXR1cm4gMSBpZiAkZSA9PSAkZWxlbTsKKyAgfQorICByZXR1cm4gMDsKK30KKworc3ViIGluX2FyciB7CisgIG15ICRlbGVtID0gc2hpZnQ7CisgIG15ICRhcnIgPSBzaGlmdDsKKyAgZm9yIG15ICRlIChAeyRhcnJ9KSB7CisgICAgcmV0dXJuIDEgaWYgJGUgZXEgJGVsZW07CisgIH0KKyAgcmV0dXJuIDA7Cit9CisKK3N1YiBtYXBfYm9vbCB7CisgIG15ICR2YWwgPSBzaGlmdDsKKworICByZXR1cm4gMSBpZiAkdmFsID1+IC9edHJ1ZSQvaTsKKyAgcmV0dXJuIDAgaWYgJHZhbCA9fiAvXmZhbHNlJC9pOworICByZXR1cm4gJHZhbDsKK30KKworc3ViIHZlcnNpb24geworICBteSAkcmV0ID0gKEBfID8gc2hpZnQgOiAxKTsKKyAgcHJpbnQgIiROZXRTTk1QOjpDZXJ0OjpQUk9HOiAkTmV0U05NUDo6Q2VydDo6VkVSU0lPTlxuIjsKKyAgZXhpdCgkcmV0KTsKK30KKworc3ViIEdldE9wdHNGcm9tQXJyYXkgeworICBteSAkYXJncyA9IHNoaWZ0OworICBsb2NhbCAqQVJHVjsKKyAgQEFSR1YgPSBAJGFyZ3M7CisgIG15ICRyZXQgPSA6OkdldE9wdGlvbnMoQF8pOworICBAJGFyZ3MgPSBAQVJHVjsgIyBHZXRPcHRpb25zIHN0cmlwcyBvdXQgdGhlIG9uZXMgaXQgaGFuZGxlcyBhbmQgbGVhdmVzIG90aGVycworICByZXR1cm4gJHJldDsKK30KK3N1YiBwdWxsX2NtZCB7CisgIG15ICRhcmdzID0gc2hpZnQ7CisgIG15ICRjbWQ7CisKKyAgZm9yZWFjaCAoQHskYXJnc30pIHsKKyAgICBpZiAoL14oZ2VuY2U/cnR8Z2VuY2F8Z2VuY3NyfHNpZ25jc3J8c2hvd2Nhcz98c2hvd2NlP3J0cz98aW1wb3J0KSQvKSB7CisgICAgICAkY21kID0gJDE7CisgICAgfQorICB9CisKKyAgQHskYXJnc30gPSBncmVwIHshL14kY21kJC99IEB7JGFyZ3N9OworCisgIHJldHVybiAkY21kOworfQorCisKK3N1YiB1c2FnZSB7CisgIG15ICRyZXQgPSAoQF8gPyBzaGlmdCA6IDEpOworICBteSAkYXJnID0gc2hpZnQ7CisKKyAgcHJpbnQgIkNvbW1hbmQgbm90IGltcGxtZW5ldGVkIHlldDogJGFyZ1xuIiBpZiAkcmV0ID09IDI7CisgIHByaW50ICJVbmtub3duOiAkYXJnXG4iIGlmICRyZXQgPT0gMzsKKyAgcHJpbnQgIlxuICAgTkFNRTpcbiI7CisgIHByaW50ICIgICAgICROZXRTTk1QOjpDZXJ0OjpQUk9HOiBbJE5ldFNOTVA6OkNlcnQ6OlZFUlNJT05dIC0gIjsKKyAgcHJpbnQgIk5ldC1TTk1QIENlcnRpZmljYXRlIE1hbmFnZW1lbnQgVG9vbFxuIjsKKyAgcHJpbnQgIlxuICAgREVTQ1JJUFRJT046XG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGNyZWF0ZXMsIHNpZ25zLCBpbnN0YWxscyBhbmQgZGlzcGxheXMgWC41MDlcbiI7CisgIHByaW50ICIgICAgIGNlcnRpZmljYXRlcyB1c2VkIGluIHRoZSBvcGVyYXRpb24gb2YgTmV0LVNOTVAvKEQpVExTLlxuIjsKKyAgcHJpbnQgIlxuICAgU1lOT1BTSVM6XG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IFstLWhlbHB8LT9dXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IFstLXZlcnNpb258LVZdXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNhICAgIFs8ZmxhZ3M+XSBbPGRuLW9wdHM+XSBbLS13aXRoLWNhIDxjYT5dXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNlcnQgIFs8ZmxhZ3M+XSBbPGRuLW9wdHM+XSBbLS13aXRoLWNhIDxjYT5dXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGdlbmNzciAgIFs8ZmxhZ3M+XSBbPGRuLW9wdHM+XSBbLS1mcm9tLWNydCA8Y3J0Pl1cbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgc2lnbmNzciAgWzxmbGFncz5dIFstLWluc3RhbGxdIC0tY3NyIDxjc3I+IC0td2l0aC1jYSA8Y2E+XG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IHNob3djYSAgIFs8ZmxhZ3M+XSBbPGZvcm1hdC1vcHRzPl0gWzxmaWxlPnw8c2VhcmNoLXRhZz5dXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IHNob3djZXJ0IFs8ZmxhZ3M+XSBbPGZvcm1hdC1vcHRzPl0gWzxmaWxlPnw8c2VhcmNoLXRhZz5dXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGltcG9ydCAgIFs8ZmxhZ3M+XSA8ZmlsZXx1cmw+IFs8a2V5Pl1cbiI7CisgIHByaW50ICJcbiAgIENPTU1BTkRTOlxuIjsKKyAgcHJpbnQgIiAgICAgZ2VuY2EgICAgLS0gZ2VuZXJhdGUgYSBzaWduZWQgQ0EgY2VydGlmaWNhdGUgc3VpdGFibGUgZm9yIHNpZ25pbmcgb3RoZXJcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlcy4gZGVmYXVsdDogc2VsZi1zaWduZWQgdW5sZXNzIC0td2l0aC1jYSA8Y2E+IHN1cHBsaWVkXG5cbiI7CisgIHByaW50ICIgICAgIGdlbmNlcnQgIC0tIGdlbmVyYXRlIGEgc2lnbmVkIGNlcnRpZmljYXRlIHN1aXRhYmxlIGZvciBpZGVudGlmaWNhdGlvbiwgb3JcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIHZhbGlkYXRpb24uIGRlZmF1bHQ6IHNlbGYtc2lnbmVkIHVubGVzcyAtLXdpdGgtY2EgPGNhPiBzdXBwbGllZFxuXG4iOworICBwcmludCAiICAgICBnZW5jc3IgICAtLSBnZW5lcmF0ZSBhIGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdC4gd2lsbCBjcmVhdGUgYSBuZXdcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIGtleSBhbmQgY2VydGlmaWNhdGUgdW5sZXNzIC0tZnJvbS1jcnQgPGNydD4gc3VwcGxpZWRcblxuIjsKKyAgcHJpbnQgIiAgICAgc2lnbmNzciAgLS0gc2lnbiBhIGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdCBzcGVjaWZpZWQgYnkgLS1jc3IgPGNzcj5cbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgIHdpdGggdGhlIENBIGNlcnRpZmljYXRlIHNwZWNpZmllZCBieSAtLXdpdGgtY2EgPGNhPlxuIjsKKyAgcHJpbnQgIiAgICAgaW1wb3J0ICAgLS0gaW1wb3J0IGFuIGlkZW50aXR5IG9yIENBIGNlcnRpZmljYXRlLCBvcHRpb25hbGx5IGltcG9ydCA8a2V5PlxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgaWYgYW4gVVJMIGlzIHBhc3NlZCwgd2lsbCBhdHRlbXB0IHRvIGltcG9ydCBjZXJ0aWZpY2F0ZSBmcm9tIHNpdGVcbiI7CisgIHByaW50ICIgICAgIHNob3djYSxcbiI7CisgIHByaW50ICIgICAgIHNob3djZXJ0IC0tIHNob3cgQ0Egb3IgaWRlbnRpdHkgY2VydGlmaWNhdGUocykuIG1heSBwYXNzIGZ1bGx5IHF1YWxpZmllZFxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgZmlsZSBvciBkaXJlY3RvcnkgbmFtZSwgb3IgYSBzZWFyY2gtdGFnIHdoaWNoIHByZWZpeCBtYXRjaGVzXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICBpbnN0YWxsZWQgQ0Egb3IgaWRlbnRpdHkgY2VydGlmaWNhdGUgZmlsZSBuYW1lKHMpXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICBzZWUgRk9STUFUIE9QVElPTlMgdG8gc3BlY2lmeSBvdXRwdXQgZm9ybWF0XG5cbiI7CisgIHByaW50ICJcbiAgIEZMQUdTOlxuIjsKKyAgcHJpbnQgIiAgICAgLT8sIC0taGVscCAgICAgICAgICAgIC0tIHNob3cgdGhpcyB0ZXh0IGFuZCBleGl0XG4iOworICBwcmludCAiICAgICAtViwgLS12ZXJzaW9uICAgICAgICAgLS0gc2hvdyB2ZXJzaW9uIHN0cmluZyBhbmQgZXhpdFxuIjsKKyAgcHJpbnQgIiAgICAgLUQsIC0tZGVidWcgICAgICAgICAgIC0tIHJhaXNlIGRlYnVnIGxldmVsICgtRCAtRCBmb3IgaGlnaGVyIGxldmVsKVxuIjsKKyAgcHJpbnQgIiAgICAgLUYsIC0tZm9yY2UgICAgICAgICAgIC0tIGZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBvdXRwdXQgZmlsZXNcbiI7CisgIHByaW50ICIgICAgIC1JLCAtLW5vaW50ZXJhY3RpdmUgICAtLSBub24taW50ZXJhY3RpdmUgcnVuIChkZWZhdWx0IGludGVyYWN0aXZlKVxuIjsKKyAgcHJpbnQgIiAgICAgLVEsIC0tbm92ZXJib3NlICAgICAgIC0tIG5vbi12ZXJib3NlIG91dHB1dCAoZGVmYXVsdCB2ZXJib3NlKVxuIjsKKyAgcHJpbnQgIiAgICAgLUMsIC0tY2ZnZGlyICAgPGRpcj4gIC0tIGNvbmZpZ3VyYXRpb24gZGlyIChzZWUgbWFuKDUpIHNubXBfY29uZmlnKVxuIjsKKyAgcHJpbnQgIiAgICAgLVQsIC0tdGxzZGlyICAgPGRpcj4gIC0tIHJvb3QgZm9yIGNlcnQgc3RvcmFnZSAoZGVmYXVsdCA8Y2ZnZGlyPi90bHMpXG4iOworICBwcmludCAiICAgICAtZiwgLS1jZmdmaWxlICA8ZmlsZT4gLS0gY29uZmlnIChkZWZhdWx0IDxjZmdkaXI+L25ldC1zbm1wLWNlcnQuY29uZilcbiI7CisgIHByaW50ICIgICAgIC1pLCAtLWlkZW50aXR5IDxpZD4gICAtLSBpZGVudGl0eSB0byB1c2UgZnJvbSBjb25maWdcbiI7CisgIHByaW50ICIgICAgIC10LCAtLXRhZyAgICAgIDx0YWc+ICAtLSBhcHBsaWNhdGlvbiB0YWcgKGRlZmF1bHQgJ3NubXAnKVxuIjsKKyAgcHJpbnQgIiAgICAgLS08Y2ZnLXBhcmFtPls9PHZhbD5dIC0tIGFkZGl0aW9uYWwgY29uZmlnIHBhcmFtc1xuIjsgIAorICBwcmludCAiXG4gICBDRVJUSUZJQ0FURSBPUFRJT05TICg8Y2VydC1vcHRzPik6XG4iOworICBwcmludCAiICAgICAtYSwgLS13aXRoLWNhIDxjYT4gICAgLS0gQ0EgY2VydGlmaWNhdGUgdXNlZCB0byBzaWduIHJlcXVlc3RcbiI7CisgIHByaW50ICIgICAgIC1BLCAtLWNhIDxjYT4gICAgICAgICAtLSBleHBsaWNpdCBvdXRwdXQgQ0EgY2VydGlmaWNhdGVcbiI7CisgIHByaW50ICIgICAgIC1yLCAtLWNzciA8Y3NyPiAgICAgICAtLSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3RcbiI7CisgIHByaW50ICIgICAgIC14LCAtLWZyb20tY3J0IDxjcnQ+ICAtLSBpbnB1dCBjZXJ0aWZpY2F0ZSBmb3IgY3VycmVudCBvcGVyYXRpb25cbiI7CisgIHByaW50ICIgICAgIC1YLCAtLWNydCA8Y3J0PiAgICAgICAtLSBleHBsaWNpdCBvdXRwdXQgY2VydGlmaWNhdGVcbiI7CisgIHByaW50ICIgICAgIC15LCAtLWluc3RhbGwgICAgICAgICAtLSBpbnN0YWxsIHJlc3VsdCBpbiBsb2NhbCByZXBvc2l0b3J5XG4iOworICBwcmludCAiXG4gICBESVNUSU5HVUlTSEVEIE5BTUUgT1BUSU9OUyAoPGRuLW9wdHM+KTpcbiI7CisgIHByaW50ICIgICAgIC1lLCAtLWVtYWlsIDxlbWFpbD4gICAgICAgLS0gZW1haWwgbmFtZVxuIjsKKyAgcHJpbnQgIiAgICAgLWgsIC0taG9zdCA8aG9zdD4gICAgICAgICAtLSBETlMgaG9zdCBuYW1lLCBvciBJUCBhZGRyZXNzXG4iOworICBwcmludCAiICAgICAtZCwgLS1kYXlzIDxkYXlzPiAgICAgICAgIC0tIG51bWJlciBvZiBkYXlzIGNlcnRpZmljYXRlIGlzIHZhbGlkXG4iOworICBwcmludCAiICAgICAtbiwgLS1jbiA8Y24+ICAgICAgICAgICAgIC0tIGNvbW1vbiBuYW1lIChDTilcbiI7CisgIHByaW50ICIgICAgIC1vLCAtLW9yZyA8b3JnPiAgICAgICAgICAgLS0gb3JnYW5penRpb24gbmFtZVxuIjsKKyAgcHJpbnQgIiAgICAgLXUsIC0tdW5pdCA8dW5pdD4gICAgICAgICAtLSBvcmdhbml6dGlvbiB1bml0IG5hbWVcbiI7CisgIHByaW50ICIgICAgIC1jLCAtLWNvdW50cnkgPGNvdW50cnk+ICAgLS0gY291bnRyeSBjb2RlIChlLmcuLCBVUylcbiI7CisgIHByaW50ICIgICAgIC1wLCAtLXByb3ZpbmNlIDxwcm92aW5jZT4gLS0gcHJvdmluY2UgbmFtZSAoc3lub215bm91cyB3LyBzdGF0ZSlcbiI7CisgIHByaW50ICIgICAgIC1wLCAtLXN0YXRlIDxzdGF0ZT4gICAgICAgLS0gc3RhdGUgbmFtZSAoc3lub215bm91cyB3LyBwcm92aW5jZSlcbiI7CisgIHByaW50ICIgICAgIC1sLCAtLWxvY2FsaXR5IDxsb2NhbGl0eT4gLS0gbG9jYWxpdHkgbmFtZSAoZS5nLCB0b3duKVxuIjsKKyAgcHJpbnQgIiAgICAgLXMsIC0tc2FuIDxzYW4+ICAgICAgICAgICAtLSBzdWJqZWN0QWx0TmFtZSwgcmVwZWF0IGZvciBlYWNoIDxzYW4+XG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIDxzYW4+IHZhbHVlIGZvcm1hdCAoPEZNVD46PFZBTD4pOlxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIGRpck5hbWU6L3Vzci9zaGFyZS9zbm1wL3Rsc1xuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIEROUzpuZXQtc25tcC5vcmdcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBlbWFpbDphZG1pblxAbmV0LXNubXAub3JnXG4iOworICBwcmludCAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tICAgSVA6MTkyLjE2OC4xLjFcbiI7CisgIHByaW50ICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gICBSSUQ6MS4xLjMuNlxuIjsKKyAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSAgIFVSSTpodHRwOi8vbmV0LXNubXAub3JnXG4iOworICBwcmludCAiXG4gICBGT1JNQVQgT1BUSU9OUyAoPGZvcm1hdC1vcHRzPik6IFxuIjsKKyAgcHJpbnQgIiAgICAgLS1icmllZiAgICAgICAgLS0gbWluaW1pemVkIG91dHB1dCAodmFsdWVzIG9ubHkgd2hlcmUgYXBwbGljYWJsZSlcbiI7CisgIHByaW50ICIgICAgIC0tdGV4dCAgICAgICAgIC0tIGZ1bGwgdGV4dCBkZXNjcmlwdGlvblxuIjsKKyAgcHJpbnQgIiAgICAgLS1zdWJqZWN0ICAgICAgLS0gc3ViamVjdCBkZXNjcmlwdGlvblxuIjsKKyAgcHJpbnQgIiAgICAgLS1zdWJqZWN0X2hhc2ggLS0gaGFzaCBvZiBzdWJqZWN0IGZvciBpbmRleGluZ1xuIjsKKyAgcHJpbnQgIiAgICAgLS1pc3N1ZXIgICAgICAgLS0gaXNzdWVyIGRlc2NyaXB0aW9uXG4iOworICBwcmludCAiICAgICAtLWlzc3Vlcl9oYXNoICAtLSBoYXNoIG9mIGlzc3VlciBmb3IgaW5kZXhpbmdcbiI7CisgIHByaW50ICIgICAgIC0tZmluZ2VycHJpbnQgIC0tIFNIQTEgZGlnZXN0IG9mIERFUlxuIjsKKyAgcHJpbnQgIiAgICAgLS1zZXJpYWwgICAgICAgLS0gc2VyaWFsIG51bWJlclxuIjsKKyAgcHJpbnQgIiAgICAgLS1tb2R1bHVzICAgICAgLS0gbW9kdWx1cyBvZiB0aGUgcHVibGljIGtleVxuIjsKKyAgcHJpbnQgIiAgICAgLS1kYXRlcyAgICAgICAgLS0gc3RhcnQgYW5kIGVuZCBkYXRlc1xuIjsKKyAgcHJpbnQgIiAgICAgLS1wdXJwb3NlICAgICAgLS0gZGlzcGxheXMgYWxsb3dlZCB1c2VzXG4iOworICBwcmludCAiICAgICAtLUMgICAgICAgICAgICAtLSBDIGNvZGUgZGVzY3JpcHRpb25cbiI7CisgIHByaW50ICJcbiAgIEVYQU1QTEVTOiBcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgLS1kYXlzIDEwMDBcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY2EgLWYgLnNubXAvbmV0LXNubXAtY2VydC5jb25mIC1pIG5vY2FkbSAtSVxuIjsKKyAgcHJpbnQgIiAgICAgbmV0LXNubXAtY2VydCBnZW5jZXJ0IC10IHNubXBkIC0tY24gaG9zdC5uZXQtc25tcC5vcmdcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgZ2VuY3NyIC10IHNubXBhcHBcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgc2lnbmNzciAtLWNzciBzbm1wYXBwIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmdcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgc2hvd2NlcnRzIC0tc3ViamVjdCAtLWlzc3VlciAtLWRhdGVzIHNubXBhcHBcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgc2hvd2NhcyAtLWZpbmdlcnByaW50IGNhLW5ldC1zbm1wLm9yZyAtLWJyaWVmXG4iOworICBwcmludCAiICAgICBuZXQtc25tcC1jZXJ0IGltcG9ydCBjYS10aGlyZC1wYXJ0eS5jcnRcbiI7CisgIHByaW50ICIgICAgIG5ldC1zbm1wLWNlcnQgaW1wb3J0IHNpZ25lZC1yZXF1ZXN0LmNydCBzaWduZWQtcmVxdWVzdC5rZXlcblxuIjsKKworICBleGl0ICRyZXQ7Cit9CisKK3N1YiBzZXRfZGVmYXVsdCB7CisgIG15ICRvcHRzID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSBzaGlmdDsKKyAgbXkgJGZpZWxkID0gc2hpZnQ7CisgIG15ICR2YWwgPSBzaGlmdDsKKworICBpZiAobm90IGRlZmluZWQgJG9wdHMtPnskZmllbGR9KSB7CisgICAgbXkgJGN2YWwgPSAkY29uZmlnLT5pbmhlcml0KCRmaWVsZCk7CisgICAgJG9wdHMtPnskZmllbGR9ID0gKGRlZmluZWQgJGN2YWwgPyAkY3ZhbCA6ICR2YWwpOworICB9Cit9CisKK3N1YiBjZmdfcGF0aCB7CisgIG15ICRwYXRoOworCisgICRwYXRoID0gYCROZXRTTk1QOjpDZXJ0OjpDRkdUT09MIC0tc25tcGNvbmZwYXRoYDsKKyAgY2hvbXAgJHBhdGg7CisgIHJldHVybiAod2FudGFycmF5ID8gc3BsaXQoJzonLCAkcGF0aCkgOiAkcGF0aCk7Cit9CisKK3N1YiBmaW5kX2NmZ2ZpbGUgeworICBteSAkZGlyID0gc2hpZnQ7CisgIG15ICRmaWxlID0gc2hpZnQ7CisKKyAgaWYgKGRlZmluZWQgJGRpciBhbmQgLWQgJGRpciBhbmQgCisgICAgICBkZWZpbmVkICRmaWxlIGFuZCAkZmlsZSAhfiAvXltcLlwvXS8pIHsKKyAgICByZXR1cm4gZnFfcmVsX3BhdGgoIiRkaXIvJGZpbGUiKSBpZiAtZiAiJGRpci8kZmlsZSI7CisgIH0KKworICBpZiAoZGVmaW5lZCAkZmlsZSkgeworICAgIGlmICgtZiAkZmlsZSkgeworICAgICAgcmV0dXJuIGZxX3JlbF9wYXRoKCRmaWxlKTsKKyAgICB9IGVsc2UgeworICAgICAgcmV0dXJuICRmaWxlOyAjIGZpbGUgaXMgbm90IGZvdW5kLCBjb21wbGFpbiBsYXRlcgorICAgIH0KKyAgfQorCisgIG15IEBwYXRoID0gY2ZnX3BhdGgoKTsKKyAgdW5zaGlmdChAcGF0aCwgJGRpcikgaWYgZGVmaW5lZCAkZGlyOworICB3aGlsZSAoQHBhdGgpIHsKKyAgICBteSAkcCA9IHBvcChAcGF0aCk7CisgICAgbmV4dCBpZiAkcCBlcSAnL3Zhci9saWIvc25tcCc7CisgICAgaWYgKC1yICIkcC8kTmV0U05NUDo6Q2VydDo6Q0ZHRklMRSIpIHsKKyAgICAgIHJldHVybiBmcV9yZWxfcGF0aCgiJHAvJE5ldFNOTVA6OkNlcnQ6OkNGR0ZJTEUiKTsKKyAgICB9CisgIH0KKworICByZXR1cm4gJGZpbGU7Cit9CisKK3N1YiBmaW5kX2NmZ2RpciB7CisgIG15ICRkaXIgPSBzaGlmdDsKKyAgbXkgJGZpbGUgPSBzaGlmdDsKKworICBpZiAoZGVmaW5lZCAkZGlyKSB7CisgICAgJGRpciA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCRkaXIpOworICAgIHJldHVybiAkZGlyOworICB9CisKKyAgaWYgKGRlZmluZWQgJGZpbGUgYW5kIC1mICRmaWxlKSB7CisgICAgJGRpciA9IDo6ZGlybmFtZSgkZmlsZSk7CisgICAgcmV0dXJuIE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCRkaXIpOworICB9IGVsc2UgeworICAgIG15IEBwYXRoID0gY2ZnX3BhdGgoKTsKKyAgICAjIHNlYXJjaCBmaXJzdCBmb3Igd3JpdGVhYmxlIHRscyBkaXIKKyAgICAjIGZvciByb290IHNlYXJjaCB0b3AgZG93biwgZm9yIHVzZXIgYm90dG9tIHVwCisgICAgd2hpbGUgKEBwYXRoKSB7CisgICAgICAkZGlyID0gKCQ+ID8gcG9wKEBwYXRoKTogc2hpZnQoQHBhdGgpKTsKKyAgICAgIG5leHQgaWYgJGRpciBlcSAnL3Zhci9saWIvc25tcCc7CisgICAgICByZXR1cm4gJGRpciBpZiAtZCAiJGRpci8kTmV0U05NUDo6Q2VydDo6VExTRElSIiBhbmQgLXcgIiRkaXIvJE5ldFNOTVA6OkNlcnQ6OlRMU0RJUiI7CisgICAgfQorICAgIEBwYXRoID0gY2ZnX3BhdGgoKTsKKyAgICAjIGlmIG5vIHRscyBkaXIgZm91bmQsIHBpY2sgZmlyc3Qgd3JpdGFibGUgY29uZmlnIGRpcgorICAgICMgZm9yIHJvb3Qgc2VhcmNoIHRvcCBkb3duLCBmb3IgdXNlciBib3R0b20gdXAKKyAgICB3aGlsZSAoQHBhdGgpIHsKKyAgICAgICRkaXIgPSAoJD4gPyBwb3AoQHBhdGgpOiBzaGlmdChAcGF0aCkpOworICAgICAgbmV4dCBpZiAkZGlyIGVxICcvdmFyL2xpYi9zbm1wJzsKKyAgICAgIHJldHVybiAkZGlyIGlmIC1kICRkaXIgYW5kIC13ICRkaXI7CisgICAgfQorICAgIG15ICRob21lID0gJEVOVntIT01FfSB8fCBkaWUgIlVuYWJsZSB0byBkZXRlcm1pbmUgaG9tZSBkaXJlY3Rvcnk6IHNldCBcJEhPTUVcbiI7CisgICAgcmV0dXJuICgkPiA/ICIkaG9tZS8uc25tcCIgOiAiL3Vzci9zaGFyZS9zbm1wIik7ICMgWFhYIGhhY2sgLSBubyBkaXJzIGV4aXN0ZWQgb3Igd2VyZSB3cml0YWJsZQorICB9CisgICMgdGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuCisgIHJldHVybiB1bmRlZjsKK30KKworc3ViIGZpbmRfY2VydHMgeworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZGlyID0gc2hpZnQgfHwgJ2NlcnRzJzsKKyAgbXkgJHRhcmcgPSBzaGlmdDsKKyAgbXkgJHN1ZmZpeF9yZWdleDsKKyAgbXkgJGN3ZCA9IDo6Z2V0Y3dkKCk7CisKKyAgaWYgKCRkaXIgZXEgJ2NzcnMnKSB7CisgICAgJGRpciA9ICROZXRTTk1QOjpDZXJ0OjpORVdDUlRESVI7CisgICAgJHN1ZmZpeF9yZWdleCA9ICdcLmNzcnxcLnBlbSc7CisgIH0gZWxzZSB7CisgICAgJHN1ZmZpeF9yZWdleCA9ICdcLmNydHxcLnBlbSc7CisgIH0KKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImZpbmRfY2VydHMoMTokY3dkKTokZGlyOiR0YXJnOiRzdWZmaXhfcmVnZXhcbiIsICRvcHRzKTsKKworICBpZiAoJHRhcmcgPX4gL1wuP1wvLykgeworICAgICMgc2VlIGlmIHRhcmcgY291bGQgYmUgZmlsZSAtIGNhbGMgb3JpZy4gcmVsLiBwYXRoCisgICAgbXkgJGFyZyA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCR0YXJnLCAkb3B0cy0+eydyZGlyJ30pOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZmluZF9jZXJ0cygyKTokZGlyOiR0YXJnOiRhcmdcbiIsICRvcHRzKTsKKyAgICAjIHRhcmcgaXMgYSBmaWxlIG5hbWUgLSB1c2UgaXQKKyAgICByZXR1cm4gKHdhbnRhcnJheSA/ICgkYXJnKSA6ICRhcmcpIGlmIC1mICRhcmc7CisgICAgIyBlbHNlIG1hcmsgYXMgZGlyIGlmIGl0IGlzCisgICAgJHRhcmcgPSAiJGFyZyIgaWYgLWQgJGFyZzsKKyAgfQorCisgICR0YXJnID1+IHMvXC8qJC9cLy8gaWYgLWQgJHRhcmc7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJmaW5kX2NlcnRzKDMpOiRkaXI6JHRhcmdcbiIsICRvcHRzKTsKKworICAjIGZpbmQgY2VydHMgaW4gdGFyZyBpZiBhIGRpciAoaW4gdGxzZGlyLCBvciByZWxhdGl2ZSkKKyAgJGRpciA9ICQxIGlmICR0YXJnID1+IHMvXihcUyspXC8oW15cL1xzXSopJC8kMi8gYW5kIC1kICQxOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZmluZF9jZXJ0cyg0KToke2Rpcn06JHRhcmc6JGN3ZFxuIiwgJG9wdHMpOworCisgIG15IEBjZXJ0czsKKyAgbXkgJGdsb2IgPSAiJGRpci8kdGFyZyI7CisgIGZvcmVhY2ggKDwkZGlyLyo+KSB7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjaGVja2luZygkZGlyOiR0YXJnKTogJF9cbiIsICRvcHRzKTsKKyAgICBuZXh0IHVubGVzcyAvXiRkaXJcLyR0YXJnKC4qJHN1ZmZpeF9yZWdleCk/JC87CisgICAgIyByZXR1cm4gZXhhY3QgbWF0Y2ggaWYgbm90IHdhbnRhcnJheSgpCisgICAgcmV0dXJuICRfIGlmIChub3Qgd2FudGFycmF5KCkpIGFuZCAvXiRkaXJcLyR0YXJnKCRzdWZmaXhfcmVnZXgpPyQvOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgicHVzaGluZzogJF9cbiIsICRvcHRzKTsKKyAgICBwdXNoKEBjZXJ0cywgJF8pOworICB9CisKKyAgcmV0dXJuICh3YW50YXJyYXkgPyBAY2VydHMgOiAkY2VydHNbMF0pOworfQorCitzdWIgY2hlY2tfb3V0cHV0X2ZpbGUgeworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZmlsZSA9IHNoaWZ0OworICBteSAkaW50ZXJhY3RpdmUgPSBzaGlmdDsKKyAgbXkgJGZvcmNlID0gc2hpZnQ7CisgIG15ICRjb250aW51ZSA9IDE7CisKKyAgaWYgKC13ICRmaWxlKSB7CisgICAgaWYgKCRpbnRlcmFjdGl2ZSBhbmQgbm90ICRmb3JjZSkgeworICAgICAgcHJpbnQgIk91dHB1dCBmaWxlICgkZmlsZSkgZXhpc3RzOyB3aWxsIGJlIG92ZXJ3cml0dGVuXG5Db250aW51ZSBbeS9OXTogIjsKKyAgICAgICRjb250aW51ZSA9IDxTVERJTj47IGNob21wICRjb250aW51ZTsKKyAgICAgICRjb250aW51ZSA9IDAgaWYgJGNvbnRpbnVlID1+IC9eXHMqJHxebm8/XHMqJC9pOworICAgIH0gZWxzZSB7CisgICAgICBpZiAoJGZvcmNlKSB7CisJTmV0U05NUDo6Q2VydDo6dnByaW50KCJPdXRwdXQgZmlsZSAoJGZpbGUpIGV4aXN0czsgb3ZlcndyaXRpbmcuLi5cbiIsICRvcHRzKTsKKyAgICAgIH0gZWxzZSB7CisJTmV0U05NUDo6Q2VydDo6dnByaW50KCJPdXRwdXQgZmlsZSAoJGZpbGUpIGV4aXN0czsgZXhpdGluZy4uLlxuIiwgJG9wdHMpOworCSRjb250aW51ZSA9IDA7CisgICAgICB9CisgICAgfQorICB9IGVsc2lmICgtZSAkZmlsZSkgeworICAgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiT3V0cHV0IGZpbGUgKCRmaWxlKSBub3Qgd3JpdGFibGU7IGV4aXRpbmcuLi5cbiIsICRvcHRzKTsKKyAgICAkY29udGludWUgPSAwOworICB9CisgIGV4aXQoMSkgdW5sZXNzICRjb250aW51ZTsKK30KKworc3ViIGlzX3NlcnZlciB7CisgIG15ICR0YWcgPSBzaGlmdDsKKyAgcmV0dXJuIDEgaWYgJHRhZyBlcSAnc25tcGQnIG9yICR0YWcgZXEgJ3NubXB0cmFwZCc7CisgIHJldHVybiAwOworfQorCitzdWIgaXNfY2FfY2VydCB7CisgIG15ICRjcnQgPSBzaGlmdDsKKyAgbXkgJG91dHB1dCA9IGBvcGVuc3NsIHg1MDkgLWluICckY3J0JyAtdGV4dCAtbm9vdXRgOworICByZXR1cm4gKCRvdXRwdXQgPX4gL15ccypDQTpUUlVFXHMqJC9tID8gMSA6IDApOworfQorCitzdWIgeDUwOV9mb3JtYXQgeworICBteSAkb3B0cyA9IHNoaWZ0OworICBteSAkZm10OworCisgIGZvcmVhY2ggbXkgJGYgKEBOZXRTTk1QOjpDZXJ0OjpYNTA5Rk1UUykgeworICAgICRmbXQgLj0gIiAtJGYiIGlmIGRlZmluZWQgJG9wdHMtPnskZn07CisgIH0KKworICByZXR1cm4gJGZtdDsKK30KKworc3ViIG1ha2Vfb3BlbnNzbF9jb25mIHsKKyAgbXkgJGZpbGUgPSBzaGlmdDsKKyAgcmV0dXJuIGlmIC1yICRmaWxlOworCisgIG9wZW4oRiwgIj4kZmlsZSIpIG9yIGRpZSgiY291bGQgbm90IG9wZW4gJGZpbGUiKTsKKworICBwcmludCBGIDw8J0VORCc7CisjCisjIE5ldC1TTk1QIChEKVRMUyBPcGVuU1NMIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyMKKworcmRpciAgICAgICAgICAgID0gLgorZGlyCQk9ICRFTlY6OkRJUgorUkFOREZJTEUJPSAkcmRpci8ucmFuZAorTUQJCT0gc2hhMQorS1NJWkUJCT0gMjA0OAorQ04JCT0gbmV0LXNubXAub3JnCitFTUFJTAkJPSBhZG1pbkBuZXQtc25tcC5vcmcKK0NPVU5UUlkJICAgICAgICA9IFVTCitTVEFURQkJPSBDQQorTE9DQUxJVFkJPSBEYXZpcworT1JHCQk9IE5ldC1TTk1QCitPUkdfVU5JVAk9IERldmVsb3BtZW50CitTQU4gICAgICAgICAgICAgPSBlbWFpbDpjb3B5CitEQVlTICAgICAgICAgICAgPSAzNjUKK0NSTERBWVMgICAgICAgICA9IDMwCisKK2RlZmF1bHRfZGF5cwk9ICRFTlY6OkRBWVMJCSMgaG93IGxvbmcgdG8gY2VydGlmeSBmb3IKK2RlZmF1bHRfY3JsX2RheXM9ICRFTlY6OkNSTERBWVMJCSMgaG93IGxvbmcgYmVmb3JlIG5leHQgQ1JMCitkZWZhdWx0X21kCT0gJEVOVjo6TUQJCSMgd2hpY2ggbWQgdG8gdXNlLgorCitkYXRhYmFzZQk9ICRkaXIvLmluZGV4CQkjIGRhdGFiYXNlIGluZGV4IGZpbGUuCitzZXJpYWwJCT0gJGRpci8uc2VyaWFsIAkJIyBUaGUgY3VycmVudCBzZXJpYWwgbnVtYmVyCitjZXJ0cwkJPSAkcmRpci9jZXJ0cwkJIyBpZGVudGl0eSBjZXJ0cworbmV3X2NlcnRzX2Rpcgk9ICRkaXIvbmV3Y2VydHMJIyBkZWZhdWx0IHBsYWNlIGZvciBuZXcgY2VydHMuCitjYV9jZXJ0c19kaXIJPSAkcmRpci9jYS1jZXJ0cwkjIGRlZmF1bHQgcGxhY2UgZm9yIG5ldyBjZXJ0cy4KK2tleV9kaXIJCT0gJHJkaXIvcHJpdmF0ZQorCitjcmxfZGlyCQk9ICRkaXIvY3JsCQkjIGNybCdzCitjcmxudW1iZXIJPSAkZGlyLy5jcmxudW1iZXIJIyB0aGUgY3VycmVudCBjcmwgbnVtYmVyCisJCQkJCSMgbXVzdCBiZSBjb21tZW50ZWQgb3V0IHRvIGxlYXZlIFYxIENSTAorY3JsCQk9ICRjcmxfZGlyL2NybC5wZW0JIyBUaGUgY3VycmVudCBDUkwKKworcHJlc2VydmUJPSBubwkJCSMga2VlcCBwYXNzZWQgRE4gb3JkZXJpbmcKK3VuaXF1ZV9zdWJqZWN0CT0geWVzCQkJIyBTZXQgdG8gJ25vJyB0byBhbGxvdyBjcmVhdGlvbiBvZgorCQkJCQkjIGNlcnRpZmljYXRlcyB3aXRoIHNhbWUgc3ViamVjdC4KKyMgRXh0cmEgT0JKRUNUIElERU5USUZJRVIgaW5mbzoKK29pZF9zZWN0aW9uCQk9IG5ld19vaWRzCisKK1sgbmV3X29pZHMgXQorCisjIEFkZCBuZXcgT0lEcyBpbiBoZXJlIGZvciB1c2UgYnkgJ2NhJyBhbmQgJ3JlcScuCisjIEFkZCBhIHNpbXBsZSBPSUQgbGlrZSB0aGlzOgorIyB0ZXN0b2lkMT0xLjIuMy40CisjIFVzZSBjb25maWcgZmlsZSBzdWJzdGl0dXRpb24gbGlrZSB0aGlzOgorIyB0ZXN0b2lkMj0ke3Rlc3RvaWQxfS41LjYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKK1sgY2EgXQorZGVmYXVsdF9jYQk9IENBX2RlZmF1bHQJCSMgVGhlIGRlZmF1bHQgY2Egc2VjdGlvbgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworWyBDQV9kZWZhdWx0IF0KKyMgY2VydGlmaWNhdGUJPSAkY2FfY2VydHNfZGlyLyRFTlY6OlRBRy5jcnQgCSMgQ0EgY2VydGlmaWNhdGUgc28gc2lnbiB3aXRoCituYW1lX29wdCAJPSBjYV9kZWZhdWx0CQkjIFN1YmplY3QgTmFtZSBvcHRpb25zCitjZXJ0X29wdCAJPSBjYV9kZWZhdWx0CQkjIENlcnRpZmljYXRlIGZpZWxkIG9wdGlvbnMKK3BvbGljeQkJPSBwb2xpY3lfbWF0Y2gKK2NvcHlfZXh0ZW5zaW9ucyA9IGNvcHkgICAgICAgICAgICAgICAgICAjIGNvcHkgdjMgZXh0ZW5zaW9ucyAoc3ViamVjdEFsdE5hbWUpCitzdWJqZWN0QWx0TmFtZSAgPSBjb3B5CisKKyMgRm9yIHRoZSBDQSBwb2xpY3kKK1sgcG9saWN5X21hdGNoIF0KK2NvdW50cnlOYW1lCQk9IG1hdGNoCitzdGF0ZU9yUHJvdmluY2VOYW1lCT0gbWF0Y2gKK29yZ2FuaXphdGlvbk5hbWUJPSBtYXRjaAorb3JnYW5pemF0aW9uYWxVbml0TmFtZQk9IG9wdGlvbmFsCitjb21tb25OYW1lCQk9IHN1cHBsaWVkCitlbWFpbEFkZHJlc3MJCT0gb3B0aW9uYWwKKworIyBGb3IgdGhlICdhbnl0aGluZycgcG9saWN5CisjIEF0IHRoaXMgcG9pbnQgaW4gdGltZSwgeW91IG11c3QgbGlzdCBhbGwgYWNjZXB0YWJsZSAnb2JqZWN0JworIyB0eXBlcy4KK1sgcG9saWN5X2FueXRoaW5nIF0KK2NvdW50cnlOYW1lCQk9IG9wdGlvbmFsCitzdGF0ZU9yUHJvdmluY2VOYW1lCT0gb3B0aW9uYWwKK2xvY2FsaXR5TmFtZQkJPSBvcHRpb25hbAorb3JnYW5pemF0aW9uTmFtZQk9IG9wdGlvbmFsCitvcmdhbml6YXRpb25hbFVuaXROYW1lCT0gb3B0aW9uYWwKK2NvbW1vbk5hbWUJCT0gc3VwcGxpZWQKK2VtYWlsQWRkcmVzcwkJPSBvcHRpb25hbAorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworWyByZXEgXQorZGVmYXVsdF9iaXRzCQk9ICRFTlY6OktTSVpFCitkZWZhdWx0X21kCQk9ICRFTlY6Ok1ECitkaXN0aW5ndWlzaGVkX25hbWUJPSByZXFfZGlzdGluZ3Vpc2hlZF9uYW1lCitzdHJpbmdfbWFzayAJCT0gTUFTSzoweDIwMDIKK3JlcV9leHRlbnNpb25zICAgICAgICAgID0gdjNfcmVxCit4NTA5X2V4dGVuc2lvbnMgICAgICAgICA9IHYzX3VzZXJfY3JlYXRlCisKK1sgcmVxX2Rpc3Rpbmd1aXNoZWRfbmFtZSBdCitjb3VudHJ5TmFtZQkJCT0gQ291bnRyeSBOYW1lICgyIGxldHRlciBjb2RlKQorY291bnRyeU5hbWVfZGVmYXVsdAkJPSAkRU5WOjpDT1VOVFJZCitjb3VudHJ5TmFtZV9taW4JCQk9IDIKK2NvdW50cnlOYW1lX21heAkJCT0gMgorCitzdGF0ZU9yUHJvdmluY2VOYW1lCQk9IFN0YXRlIG9yIFByb3ZpbmNlIE5hbWUgKGZ1bGwgbmFtZSkKK3N0YXRlT3JQcm92aW5jZU5hbWVfZGVmYXVsdAk9ICRFTlY6OlNUQVRFCisKK2xvY2FsaXR5TmFtZQkJCT0gTG9jYWxpdHkgTmFtZSAoZWcsIGNpdHkpCitsb2NhbGl0eU5hbWVfZGVmYXVsdAkJPSAkRU5WOjpMT0NBTElUWQorCiswLm9yZ2FuaXphdGlvbk5hbWUJCT0gT3JnYW5pemF0aW9uIE5hbWUgKGVnLCBjb21wYW55KQorMC5vcmdhbml6YXRpb25OYW1lX2RlZmF1bHQJPSAkRU5WOjpPUkcKKworb3JnYW5pemF0aW9uYWxVbml0TmFtZQkJPSBPcmdhbml6YXRpb25hbCBVbml0IE5hbWUgKGVnLCBzZWN0aW9uKQorb3JnYW5pemF0aW9uYWxVbml0TmFtZV9kZWZhdWx0CT0gJEVOVjo6T1JHX1VOSVQKKworY29tbW9uTmFtZQkJCT0gQ29tbW9uIE5hbWUgKGVnLCB5b3VyIG5hbWUgb3IgeW91ciBzZXJ2ZXJcJ3MgaG9zdG5hbWUpCitjb21tb25OYW1lX21heAkJCT0gNjQKK2NvbW1vbk5hbWVfZGVmYXVsdCAgICAgICAgICAgICAgPSAkRU5WOjpDTgorCitlbWFpbEFkZHJlc3MJCQk9IEVtYWlsIEFkZHJlc3MKK2VtYWlsQWRkcmVzc19tYXgJCT0gNjQKK2VtYWlsQWRkcmVzc19kZWZhdWx0ICAgICAgICAgICAgPSAkRU5WOjpFTUFJTAorCitbIHYzX3JlcSBdCisKKyMgRXh0ZW5zaW9ucyB0byBhZGQgdG8gYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0CitiYXNpY0NvbnN0cmFpbnRzID0gQ0E6RkFMU0UKKworIyBJbXBvcnQgdGhlIGVtYWlsIGFkZHJlc3MgYW5kL29yIHNwZWNpZmllZCBTQU5zLgorJVtzdWJqZWN0QWx0TmFtZSA9ICRFTlY6OlNBTl0KKworWyB2M191c2VyX2NyZWF0ZSBdCisKKyMgRXh0ZW5zaW9ucyB0byBhZGQgdG8gYSBjZXJ0aWZpY2F0ZSByZXF1ZXN0CitiYXNpY0NvbnN0cmFpbnRzID0gQ0E6RkFMU0UKKyNrZXlVc2FnZSA9IG5vblJlcHVkaWF0aW9uLCBkaWdpdGFsU2lnbmF0dXJlLCBrZXlFbmNpcGhlcm1lbnQKKworIyBQS0lYIHJlY29tbWVuZGF0aW9uLgorc3ViamVjdEtleUlkZW50aWZpZXIgPSBoYXNoCithdXRob3JpdHlLZXlJZGVudGlmaWVyID0ga2V5aWQ6YWx3YXlzLGlzc3VlcjphbHdheXMKKworIyBJbXBvcnQgdGhlIGVtYWlsIGFkZHJlc3MgYW5kL29yIHNwZWNpZmllZCBTQU5zLgorJVtzdWJqZWN0QWx0TmFtZSA9ICRFTlY6OlNBTl0KKworWyB2M19jYV9jcmVhdGUgXQorIyBFeHRlbnNpb25zIHRvIGFkZCB0byBhIENBIGNlcnRpZmljYXRlCitiYXNpY0NvbnN0cmFpbnRzID0gQ0E6VFJVRQorIyBUaGlzIHdpbGwgYmUgZGlzcGxheWVkIGluIE5ldHNjYXBlJ3MgY29tbWVudCBsaXN0Ym94LgorbnNDb21tZW50ID0gIk9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRlIChuZXQtc25tcCkiCisKKyMgUEtJWCByZWNvbW1lbmRhdGlvbi4KK3N1YmplY3RLZXlJZGVudGlmaWVyID0gaGFzaAorYXV0aG9yaXR5S2V5SWRlbnRpZmllciA9IGtleWlkOmFsd2F5cyxpc3N1ZXI6YWx3YXlzCisKKyMgSW1wb3J0IHRoZSBlbWFpbCBhZGRyZXNzIGFuZC9vciBzcGVjaWZpZWQgU0FOcy4KKyVbc3ViamVjdEFsdE5hbWUgPSAkRU5WOjpTQU5dCisKK1sgdjNfY2Ffc2lnbiBdCisjIEV4dGVuc2lvbnMgdG8gYWRkIHdoZW4gJ2NhJyBzaWducyBhIHJlcXVlc3QuCitiYXNpY0NvbnN0cmFpbnRzID0gQ0E6RkFMU0UKKyMgVGhpcyB3aWxsIGJlIGRpc3BsYXllZCBpbiBOZXRzY2FwZSdzIGNvbW1lbnQgbGlzdGJveC4KK25zQ29tbWVudCA9ICJPcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZSAobmV0LXNubXApIgorCitrZXlVc2FnZSA9IG5vblJlcHVkaWF0aW9uLCBkaWdpdGFsU2lnbmF0dXJlLCBrZXlFbmNpcGhlcm1lbnQKKworIyBQS0lYIHJlY29tbWVuZGF0aW9ucyBoYXJtbGVzcyBpZiBpbmNsdWRlZCBpbiBhbGwgY2VydGlmaWNhdGVzLgorc3ViamVjdEtleUlkZW50aWZpZXIgPSBoYXNoCithdXRob3JpdHlLZXlJZGVudGlmaWVyID0ga2V5aWQ6YWx3YXlzLGlzc3VlcjphbHdheXMKKworWyB2M19jYV9zaWduX2NhIF0KKyMgRXh0ZW5zaW9ucyB0byBhZGQgd2hlbiAnY2EnIHNpZ25zIGEgY2EgcmVxdWVzdC4KK2Jhc2ljQ29uc3RyYWludHMgPSBDQTpUUlVFCisKKyMgVGhpcyB3aWxsIGJlIGRpc3BsYXllZCBpbiBOZXRzY2FwZSdzIGNvbW1lbnQgbGlzdGJveC4KK25zQ29tbWVudCA9ICJPcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0ZSAobmV0LXNubXApIgorCisjIFBLSVggcmVjb21tZW5kYXRpb25zIGhhcm1sZXNzIGlmIGluY2x1ZGVkIGluIGFsbCBjZXJ0aWZpY2F0ZXMuCitzdWJqZWN0S2V5SWRlbnRpZmllciA9IGhhc2gKK2F1dGhvcml0eUtleUlkZW50aWZpZXIgPSBrZXlpZDphbHdheXMsaXNzdWVyOmFsd2F5cworCitFTkQKKworfQorCisKK3BhY2thZ2UgTmV0U05NUDo6Q2VydDo6T2JqOworCitzdWIgbmV3IHsKKyAgbXkgJGNsYXNzID0gc2hpZnQ7CisgIG15ICRjZmllbGQgPSBzaGlmdDsKKyAgbXkgJHBhcmVudCA9IHNoaWZ0OworICBteSAkaW5kID0gc2hpZnQ7CisgIG15ICR0aGlzID0ge307CisgIGJsZXNzKCR0aGlzLCAkY2xhc3MpOworCisgICMgaW5pdGlhbGl6ZSBoYXNoIG9mIGtleXMgd2hpY2ggYXJlIGR5bmFtaWNhbGx5IGNyZWF0ZWQgb3IgaW50ZXJuYWwKKyAgJHRoaXMtPnsnQVVUT0tFWVMnfXsnQVVUT0tFWVMnfSsrOworCisgICMgc3RvcmUgYSByZWZlcmVuY2UgdG8gb3Vyc2VsdmVzIHNvIG91ciBjaGlsZHJlbiBjYW4gZmluZCB1cworICAkdGhpcy0+YXV0b1NldCgnQ0ZJRUxEJywgJGNmaWVsZCk7CisgICR0aGlzLT5hdXRvU2V0KCRjZmllbGQgLCAkdGhpcyk7CisgICR0aGlzLT5hdXRvU2V0KCdDSElMRFJFTicsIFtdKTsKKyAgJHRoaXMtPmF1dG9TZXQoJ0lOREVYJywgJGluZCkgaWYgZGVmaW5lZCAkaW5kOworCisgIGlmIChkZWZpbmVkICRwYXJlbnQpIHsKKyAgICAjIGNhY2hlICdBUFAnIGluIGFsbCBvYmpzIGZvciBlYXN5IHJlZmVyZW5jZQorICAgICR0aGlzLT5hdXRvU2V0KCdBUFAnLCAkcGFyZW50LT5pbmhlcml0KCdBUFAnKSk7CisgICAgbXkgJGFwcCA9ICR0aGlzLT57J0FQUCd9OworCisgICAgZGllKCJuZXQtc25tcC1jZXJ0OiBlcnJvcjogbm8gTmV0U05NUDo6Q2VydDo6QXBwIGNvbnRleHQgcHJvdmlkZWQiKQorICAgICAgaWYgbm90IGRlZmluZWQgJGFwcCBvciBub3QgcmVmICRhcHAgZXEgJ05ldFNOTVA6OkNlcnQ6OkFwcCc7CisgICAgIyBzYXZlIGNoaWxkcmVuIGZvciBsaXN0IHRyYXZlcnNhbAorICAgIHB1c2goQHskcGFyZW50LT57J0NISUxEUkVOJ319LCAkdGhpcykgdW5sZXNzICRwYXJlbnQgZXEgJHRoaXM7CisgIH0gZWxzZSB7CisgICAgIyB3ZSBhcmUgdGhlIHRvcCBvZiB0aGUgbGlzdAorICAgICRwYXJlbnQgPSAkdGhpczsKKyAgfQorICAkdGhpcy0+YXV0b1NldCgnUEFSRU5UJyAsICRwYXJlbnQpOworCisgIHJldHVybiAkdGhpczsKK30KKworc3ViIGF1dG9TZXQgeworICBteSAkdGhpcyA9IHNoaWZ0OworICBteSAka2V5ID0gc2hpZnQ7CisgIGlmIChAXykgeworICAgIG15ICR2YWwgPSBzaGlmdDsKKyAgICAkdGhpcy0+eydBVVRPS0VZUyd9eyRrZXl9Kys7CisgICAgJHRoaXMtPnska2V5fSA9ICR2YWw7CisgIH0KKyAgcmV0dXJuIGV4aXN0cyAkdGhpcy0+eydBVVRPS0VZUyd9eyRrZXl9OworfQorCitzdWIgaW5oZXJpdCB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisgIG15ICRmaWVsZCA9IHNoaWZ0OworICBteSAkaWQ7CisKKyAgIyBjbWQgb3B0cyBvdmVycmlkZSBjb25maWcgc2V0dGluZ3MKKyAgaWYgKGV4aXN0cyAkdGhpcy0+eydBUFAnfSBhbmQgZXhpc3RzICR0aGlzLT57J0FQUCd9eydPUFRTJ30pIHsKKyAgICBteSAkb3B0cyA9ICR0aGlzLT57J0FQUCd9eydPUFRTJ307CisgICAgJGlkID0gJG9wdHMtPnsnaWRlbnRpdHknfTsKKyAgICByZXR1cm4gJG9wdHMtPnskZmllbGR9IGlmIGRlZmluZWQgJG9wdHMtPnskZmllbGR9OworICB9CisKKyAgaWYgKGRlZmluZWQgJGlkIGFuZCBleGlzdHMgJHRoaXMtPnsnaWRlbnRpdHknfSBhbmQKKyAgICAgIGV4aXN0cyAkdGhpcy0+eydpZGVudGl0eSd9eyRpZH0gYW5kCisgICAgICBleGlzdHMgJHRoaXMtPnsnaWRlbnRpdHknfXskaWR9eyRmaWVsZH0pIHsKKyAgICByZXR1cm4gJHRoaXMtPnsnaWRlbnRpdHknfXskaWR9eyRmaWVsZH07CisgIH0KKworICAjIHJldHVybiBvdXIgZmllbGQgaWYgd2UgaGF2ZSBpdAorICByZXR1cm4gJHRoaXMtPnskZmllbGR9IGlmIGRlZmluZWQgJHRoaXMtPnskZmllbGR9OworCisgICMgdGVybWluYXRlIHJlY3Vyc2lvbiBhdCB0b3AgYW5kIHJldHVybiB1bmRlZiBpZiBub3QgZm91bmQKKyAgcmV0dXJuIHVuZGVmIGlmIG5vdCBkZWZpbmVkICR0aGlzLT57J1BBUkVOVCd9IG9yICR0aGlzLT57J1BBUkVOVCd9IGVxICR0aGlzOworCisgICMgcmVjdXJzZSB0byBwYXJlbnQKKyAgJHRoaXMtPnsnUEFSRU5UJ30tPmluaGVyaXQoJGZpZWxkKTsKK30KKworc3ViIHJlc29sdmUgeworICBteSAkdGhpcyA9IHNoaWZ0OworICBteSAkb3B0cyA9ICR0aGlzLT5pbmhlcml0KCdPUFRTJyk7CisgIG15ICR2YWwgPSBzaGlmdDsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInJlc29sdmluZzogJHZhbFxuIiwgJG9wdHMpOworCisgICR2YWwgPX4gcy8oXCQoXHcrKSkvJHRoaXMtPmluaGVyaXQoJDIpIG9yIGRpZSgidW5yZXNvbHZlZCByZWZlcmVuY2UgaW4gY29uZmlnOiAkMSIpL2dlOworICAkdmFsID1+IHMvKFwmXHsoLio/KVx9KS8kMi9nZWU7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJyZXNvbHZlZDogJHZhbFxuIiwgJG9wdHMpOworCisgIHJldHVybiAkdmFsCit9CisKK3N1YiBkZWxldGUgeworICBteSAkdGhpcyA9IHNoaWZ0OworICBteSAkb3B0cyA9ICR0aGlzLT5pbmhlcml0KCdPUFRTJyk7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJPYmo6OmRlbGV0ZTogKCR0aGlzKSBbJHRoaXMtPntDRklFTER9XVxuIiwgJG9wdHMpOworCisgIG15ICRwYXJlbnQgPSAkdGhpcy0+eydQQVJFTlQnfTsKKyAgbXkgQGNoaWxkcmVuID0gQHskdGhpcy0+eydDSElMRFJFTid9fTsKKworICBmb3JlYWNoIG15ICRjaGlsZCAoQGNoaWxkcmVuKSB7CisgICAgJGNoaWxkLT5kZWxldGUoKTsKKyAgfQorCisgIE5ldFNOTVA6OkNlcnQ6OmR3YXJuKCJPYmo6IGNoaWxkcmVuIG5vdCBmcmVlZFxuIiwgJG9wdHMpIGlmIEB7JHRoaXMtPnsnQ0hJTERSRU4nfX07CisKKyAgIyBkZWxldGUgYWxsIG91ciBzZWxmLXJlZmVyZW5jZXMKKyAgZGVsZXRlKCR0aGlzLT57JHRoaXMtPnsnQ0ZJRUxEJ319KSBpZiBleGlzdHMgJHRoaXMtPnsnQ0ZJRUxEJ307CisgIGRlbGV0ZSgkdGhpcy0+eydQQVJFTlQnfSk7CisgIGRlbGV0ZSgkdGhpcy0+eydDSElMRFJFTid9KTsKKworICAkcGFyZW50LT5kaXNvd24oJHRoaXMpIGlmIGRlZmluZWQgJHBhcmVudCBhbmQgcmVmKCRwYXJlbnQpID1+IC9OZXRTTk1QOjpDZXJ0LzsKK30KKworc3ViIGRpc293biB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisgIG15ICR0aGVjaGlsZCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICR0aGlzLT5pbmhlcml0KCdPUFRTJyk7CisgIG15ICRpbmQgPSAwOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiT2JqOjpkaXNvd246ICgkdGhpcykgWyR0aGlzLT57Q0ZJRUxEfV0gZGlzb3duaW5nICgkdGhlY2hpbGQpIFskdGhlY2hpbGQtPntDRklFTER9XVxuIiwgJG9wdHMpOworCisgIGZvcmVhY2ggbXkgJGNoaWxkIChAeyR0aGlzLT57J0NISUxEUkVOJ319KSB7CisgICAgbGFzdCBpZiAkY2hpbGQgZXEgJHRoZWNoaWxkOworICAgICRpbmQrKzsKKyAgfQorICBpZiAoJGluZCA8IEB7JHRoaXMtPnsnQ0hJTERSRU4nfX0pIHsKKyAgICBzcGxpY2UoQHskdGhpcy0+eydDSElMRFJFTid9fSwgJGluZCwgMSk7CisgIH0gZWxzZSB7CisgICAgTmV0U05NUDo6Q2VydDo6ZHdhcm4oIkNoaWxkICgkdGhlY2hpbGQpIG5vdCBmb3VuZCBpbiBvYmplY3QgKCR0aGlzKVxuIiwgJG9wdHMpOworICB9Cit9CisKK3N1YiBkaXNhYmxlZCB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisgIHJldHVybiAoZXhpc3RzICR0aGlzLT57J2Rpc2FibGUnfSA/ICR0aGlzLT57J2Rpc2FibGUnfSA6IDApOworfQorCitteSAlY2ZnID0gKAorCSAgICduYW1lJyA9PiAxLAorCSAgICd0eXBlJyA9PiAyLAorCSAgICdpZCcgPT4gNiwKKwkgICk7CisKK3N1YiBjZmdzb3J0IHsKKyAgbXkgJHNlbGYgPSBzaGlmdDsKKyAgbXkgJGEgPSBzaGlmdDsKKyAgbXkgJGIgPSBzaGlmdDsKKyAgcmV0dXJuIC0xIGlmIGV4aXN0cyAkY2ZneyRhfSBhbmQgbm90IGV4aXN0cyAkY2ZneyRifTsKKyAgcmV0dXJuIDEgaWYgZXhpc3RzICRjZmd7JGJ9IGFuZCBub3QgZXhpc3RzICRjZmd7JGF9OworICByZXR1cm4gJGNmZ3skYX0gPD0+ICRjZmd7JGJ9IGlmIGV4aXN0cyAkY2ZneyRhfSBhbmQgZXhpc3RzICRjZmd7JGJ9OworICByZXR1cm4gLTEgaWYgIXJlZigkc2VsZi0+eyRhfSkgYW5kIHJlZigkc2VsZi0+eyRifSk7CisgIHJldHVybiAxIGlmICFyZWYoJHNlbGYtPnskYn0pIGFuZCByZWYoJHNlbGYtPnskYX0pOworICByZXR1cm4gLTEgaWYgcmVmKCRzZWxmLT57JGF9KSA9fiAvTmV0U05NUDo6Q2VydC8gYW5kIHJlZigkc2VsZi0+eyRifSkgIX4gL05ldFNOTVA6OkNlcnQvOworICByZXR1cm4gMSBpZiByZWYoJHNlbGYtPnskYn0pID1+IC9OZXRTTk1QOjpDZXJ0LyBhbmQgcmVmKCRzZWxmLT57JGF9KSAhfiAvTmV0U05NUDo6Q2VydC87CisgIHJldHVybiAwOworfQorCitzdWIgZHVtcCB7CisgIG15ICRzZWxmID0gc2hpZnQ7CisgIG15ICRpbmRlbnQgPSBzaGlmdDsKKyAgbXkgJHNlbGZfc3RyID0gJHNlbGYtPnsnQ0ZJRUxEJ307CisgIG15IEBkYXRhX2tleXMgPSAgZ3JlcCB7ISRzZWxmLT5hdXRvU2V0KCRfKX0ga2V5cyAlJHNlbGY7CisgIG15IEBsaW5lczsKKworICBwdXNoKEBsaW5lcywgIlxuIiAuICcgJyB4ICRpbmRlbnQgLiAiJHNlbGZfc3RyID0ge1xuIikgaWYgZGVmaW5lZCAkaW5kZW50OworCisgIHsKKyAgICBteSAkaW5kZW50ID0gKGRlZmluZWQgJGluZGVudCA/ICRpbmRlbnQgKyAzIDogMCk7CisgICAgZm9yZWFjaCBteSAka2V5IChzb3J0IHtjZmdzb3J0KCRzZWxmLCROZXRTTk1QOjpDZXJ0OjpPYmo6OmEsCisJCQkJICAgJE5ldFNOTVA6OkNlcnQ6Ok9iajo6Yil9IChzb3J0IEBkYXRhX2tleXMpKSB7CisgICAgICBpZiAocmVmKCRzZWxmLT57JGtleX0pID1+IC9OZXRTTk1QOjpDZXJ0LykgeworCXB1c2goQGxpbmVzLCAkc2VsZi0+eyRrZXl9LT5kdW1wKCRpbmRlbnQpKTsKKyAgICAgIH0gZWxzaWYgKHJlZigkc2VsZi0+eyRrZXl9KSA9fiAvQVJSQVkvKSB7CisJcHVzaChAbGluZXMsICJcbiIpIGlmIHJlZigkeyRzZWxmLT57JGtleX19WzBdKSAhfiAvTmV0U05NUDo6Q2VydC87CisJZm9yZWFjaCBteSAkZWxlbSAoQHskc2VsZi0+eyRrZXl9fSkgeworCSAgaWYgKHJlZigkZWxlbSkgPX4gL05ldFNOTVA6OkNlcnQvKSB7CisJICAgIHB1c2goQGxpbmVzLCAkZWxlbS0+ZHVtcCgkaW5kZW50KSk7CisJICB9IGVsc2UgeworCSAgICBwdXNoKEBsaW5lcywgJyAnIHggJGluZGVudCAuICIka2V5ID0gJGVsZW1cbiIpOworCSAgfQorCX0KKyAgICAgIH0gZWxzZSB7CisJbXkgJHN0ciA9ICRrZXkgLiAoZGVmaW5lZCAkc2VsZi0+eyRrZXl9ID8gIiA9ICRzZWxmLT57JGtleX1cbiIgOiAiXG4iKTsKKwlwdXNoKEBsaW5lcywgJyAnIHggJGluZGVudCAuICRzdHIpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHB1c2goQGxpbmVzLCAnICcgeCAkaW5kZW50IC4gIn07ICMgZW5kICRzZWxmX3N0clxuIikgaWYgZGVmaW5lZCAkaW5kZW50OworICByZXR1cm4gQGxpbmVzOworfQorCitzdWIgREVTVFJPWSB7CisgIG15ICR0aGlzID0gc2hpZnQ7CisKKyAgcHJpbnQoIk9iajo6REVTVFJPWSAkdGhpcyBbIiwgcmVmICR0aGlzLCAiXVxuIikgaWYgJE5ldFNOTVA6OkNlcnQ6OkRFQlVHID49IDM7Cit9CisKK3BhY2thZ2UgTmV0U05NUDo6Q2VydDo6QXBwOwordXNlIHZhcnMgcXcoQElTQSk7CisKK0BJU0EgPSBxdyhOZXRTTk1QOjpDZXJ0OjpPYmopOworCitzdWIgbmV3IHsKKyAgbXkgJGNsYXNzID0gc2hpZnQ7CisKKyAgIyB0aGUgYXBwIGlzIGdvZCwgaXQgaXMgaXRzIG93biBwYXJlbnQKKyAgbXkgJHRoaXMgPSAkY2xhc3MtPlNVUEVSOjpuZXcoJ0FQUCcpOworCisgIGJsZXNzKCR0aGlzLCAkY2xhc3MpOworCisgICMgdmVyaWZ5IHJlcXVpcmVkIHRvb2xzIG9yIGRpZQorICAkdGhpcy0+Y2hlY2tSZXFzKCk7CisKKyAgIyBpbnRlcm5hbCBpbnRpdGlhbGl6YXRpb24KKyAgJHRoaXMtPmluaXRPcHRzKCk7CisKKyAgIyBtYWtlIGEgbmV3IGVtcHR5IGNvbmZpZyBhbmQgaW5pdCAobm90IHBhcnNlZCkKKyAgJHRoaXMtPnsnY29uZmlnJ30gPSBuZXcgTmV0U05NUDo6Q2VydDo6Q29uZmlnKCR0aGlzKTsKKworICByZXR1cm4gJHRoaXM7Cit9CisKK3N1YiBjaGVja1JlcXMgeworICBteSAkYXBwID0gc2hpZnQ7CisKKyAgZGllKCIkTmV0U05NUDo6Q2VydDo6T1BFTlNTTCBkb2VzIG5vdCBleGlzdCBvciBpcyBub3QgZXhlY3V0YWJsZSIpCisgICAgaWYgc3lzdGVtKCIkTmV0U05NUDo6Q2VydDo6T1BFTlNTTCB2ZXJzaW9uID4gL2Rldi9udWxsIDI+JjEiKTsKKworICBteSAkb3NzbF92ZXIgPSBgJE5ldFNOTVA6OkNlcnQ6Ok9QRU5TU0wgdmVyc2lvbmA7IGNob21wICRvc3NsX3ZlcjsKKyAgJG9zc2xfdmVyID1+IHMvXk9wZW5TU0xccysoW1xkXC5dKykuKiQvJDEvOworICBteSAkb3NzbF9taW5fdmVyID0gJE5ldFNOTVA6OkNlcnQ6Ok9QRU5TU0xfTUlOX1ZFUjsKKworICBkaWUoIiROZXRTTk1QOjpDZXJ0OjpPUEVOU1NMICh2JG9zc2xfdmVyKTogbXVzdCBiZSAkb3NzbF9taW5fdmVyIG9yIGxhdGVyIikKKyAgICBpZiAoJG9zc2xfdmVyIGNtcCAkb3NzbF9taW5fdmVyKSA8IDA7CisKKyAgZGllKCIkTmV0U05NUDo6Q2VydDo6Q0ZHVE9PTCBub3QgZm91bmQ6IHBsZWFzZSBpbnN0YWxsIikKKyAgICBpZiBzeXN0ZW0oIiROZXRTTk1QOjpDZXJ0OjpDRkdUT09MID4gL2Rldi9udWxsIDI+JjEiKTsKK30KKworc3ViIGluaXRPcHRzIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9IHt9OworICAkYXBwLT5hdXRvU2V0KCdPUFRTJywgJG9wdHMpOworCisgICMgRGVmaW5lIGRpcmVjdG9yaWVzIHdlIG5lZWQuCisgICRvcHRzLT57J2JpbmRpcid9ID0gTmV0U05NUDo6Q2VydDo6ZmluZF9iaW5fZGlyKCk7CisKKyAgJG9wdHMtPnsnb3V0J30gPSAiPiAkTmV0U05NUDo6Q2VydDo6T1VUTE9HIjsKKyAgJG9wdHMtPnsnZXJyJ30gPSAiMj4gJE5ldFNOTVA6OkNlcnQ6OkVSUkxPRyI7CisKKyAgIyBzZXQgdXAgcGF0aHMgZm9yIGFwcCBpbnN0YWxsIGFuZCBydW50aW1lIGVudgorICAkRU5We1BBVEh9ID0gIi9zYmluOi91c3Ivc2JpbjokRU5We1BBVEh9IjsKKyAgJEVOVntQQVRIfSA9ICIkb3B0cy0+eydiaW5kaXInfTokRU5We1BBVEh9IjsKKworICAjIGRlZmF1bHQgYWxsIHByaXZzIHRvIC1ydy0tLS0tLS0KKyAgdW1hc2soMDc3KTsKK30KKworc3ViIGluaXQgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSBAYXJncyA9IEBfOyAgICMgcGFzcyBleHRlcm5hbCBhcmdzICh0eXBpY2FsbHkgQVJHVikKKworICAjIHBhcnNlIGNvbW1hbmQgbGluZQorICAkYXBwLT5wYXJzZUFyZ3MoQGFyZ3MpOworCisgICMgbGF6eSBjb25maWcgcGFyc2luZyBwb3N0cG9uZWQgdW50aWwgaGVyZSwgd2lsbCBub3QgcmVwYXJzZQorICAkY29uZmlnLT5wYXJzZSgpOworCisgICMgc2V0IGRlZmF1bHRzIGhlcmUgaWYgbm90IGFscmVhZHkgc2V0IGluIGNtZGxpbmUgb3IgY29uZmlnCisgICMgZ3VpZGVkIGludGVyYWN0aXZlIG1vZGUgYnkgZGVmYXVsdAorICBOZXRTTk1QOjpDZXJ0OjpzZXRfZGVmYXVsdCgkb3B0cywgJGNvbmZpZywgJ2ludGVyYWN0aXZlJywgMSk7CisgICMgdmVyYm9zZSBvdXRwdXQKKyAgTmV0U05NUDo6Q2VydDo6c2V0X2RlZmF1bHQoJG9wdHMsICRjb25maWcsICd2ZXJib3NlJywgMSk7CisKKyAgIyBmaW5kIHRsc2Rpci9zdWJkaXJzIG9yIG1ha2UgaXQKKyAgJG9wdHMtPnsndGxzZGlyJ30gPSAkYXBwLT5jcmVhdGVUbHNEaXIoKTsKK30KKworc3ViIHBhcnNlQXJncyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgQGFyZ3MgPSBAXzsKKworICBOZXRTTk1QOjpDZXJ0OjpHZXRPcHRzRnJvbUFycmF5KFxAYXJncywgJG9wdHMsICdoZWxwfD8nLCAndmVyc2lvbnxWJywKKwkJICAgICAgJ2ludGVyYWN0aXZlIScsICdJJywgJ3ZlcmJvc2UhJywgJ1EnLCAnZm9yY2V8RicsCisJCSAgICAgICdjZmdmaWxlfGY9cycsICdjZmdkaXJ8Qz1zJywgJ3Rsc2Rpcnx0bHNEaXJ8VD1zJywKKwkJICAgICAgJ3RhZ3x0PXMnLCAnaWRlbnRpdHl8aT1zJywgJ2RlYnVnfEQrJywpOworCisgIE5ldFNOTVA6OkNlcnQ6OnZlcnNpb24oMCkgaWYgJG9wdHMtPnsndmVyc2lvbid9OworCisgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDApIGlmICRvcHRzLT57J2hlbHAnfTsKKworICAjIHB1bGwgb3V0IHRoZSBjbWQgLSBnZXRPcHRzIHNob3VsZCBsZWF2ZSBpdCB1bnRvdWNoZWQgZm9yIHVzCisgICRvcHRzLT57J2NtZCd9ID0gTmV0U05NUDo6Q2VydDo6cHVsbF9jbWQoXEBhcmdzKTsKKworICAjIHNhdmUgZXh0cmEgYXJncyBmb3IgY29tbWFuZCBzcGVjaWZpYyBwcm9jZXNzaW5nCisgICRvcHRzLT57J2NtZGFyZ3MnfSA9IFtAYXJnc107CisKKyAgIyBDaGVjayBkZWJ1ZyBvcHRpb24gZmlyc3QKKyAgJE5ldFNOTVA6OkNlcnQ6OkRFQlVHID0gJG9wdHMtPnsnZGVidWcnfTsKKyAgJG9wdHMtPnsnZXJyJ30gPSAkb3B0cy0+eydvdXQnfSA9ICIiIGlmICRvcHRzLT57J2RlYnVnJ307CisgICRvcHRzLT57J2ludGVyYWN0aXZlJ30gPSBub3QgJG9wdHMtPnsnSSd9IGlmIGRlZmluZWQgJG9wdHMtPnsnSSd9OworICAkb3B0cy0+eyd2ZXJib3NlJ30gPSBub3QgJG9wdHMtPnsnUSd9IGlmIGRlZmluZWQgJG9wdHMtPnsnUSd9OworCisgICMgc2VhcmNoIGZvciBjZmdkaXIgYW5kIGNmZ2ZpbGUgYmFzZWQgb24gb3B0cyBhbmQgY29uZnBhdGgKKyAgJG9wdHMtPnsnY2ZnZGlyJ30gPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2NmZ2Rpcigkb3B0cy0+eydjZmdkaXInfSwKKwkJCQkJCSAkb3B0cy0+eydjZmdmaWxlJ30pOworICAkb3B0cy0+eydjZmdmaWxlJ30gPSBOZXRTTk1QOjpDZXJ0OjpmaW5kX2NmZ2ZpbGUoJG9wdHMtPnsnY2ZnZGlyJ30sCisJCQkJCQkgICAkb3B0cy0+eydjZmdmaWxlJ30pOworfQorCitzdWIgY3JlYXRlVGxzRGlyIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJGRpcjsKKyAgbXkgJGZpbGU7CisgIG15ICRjbWQ7CisKKyAgJGRpciA9ICRjb25maWctPmluaGVyaXQoJ3Rsc0RpcicpOworCisgIGlmIChub3QgZGVmaW5lZCAkZGlyKSB7CisgICAgbXkgJGNmZ2RpciA9ICRvcHRzLT57J2NmZ2Rpcid9OworICAgIGRpZSgidW5kZWZpbmVkIGNmZ2RpcjogdW5hYmxlIHRvIGNyZWF0IHRsc2RpcjogZXhpdGluZy4uLlxuIikgdW5sZXNzIGRlZmluZWQgJGNmZ2RpcjsKKyAgICAkZGlyID0gIiRjZmdkaXIvJE5ldFNOTVA6OkNlcnQ6OlRMU0RJUiI7CisgIH0KKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInRsc0RpciBpczogJGRpclxuIiwgJG9wdHMpOworICAkZGlyID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJGRpcik7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgidGxzRGlyIGlzOiAkZGlyXG4iLCAkb3B0cyk7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJ0bHNEaXIgbm90IGZvdW5kLCBjcmVhdGluZ1xuIiwgJG9wdHMpIHVubGVzcyAtZCAkZGlyOworICBOZXRTTk1QOjpDZXJ0OjptYWtlX2RpcnMoJG9wdHMsICRkaXIsIDA3MDAsIEBOZXRTTk1QOjpDZXJ0OjpUTFNESVJTKTsKKworICBteSAkc3NsX2NmZ19pbiA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCROZXRTTk1QOjpDZXJ0OjpTU0xDRkdJTiwkZGlyKTsKKworICAjIEV4aXN0aW5nIG9wZW5zc2wuY29uZiB0bXBsIHdpbGwgYmUgcHJlc2VydmVkCisgIGlmICgtZiAkc3NsX2NmZ19pbikgeworICAgIE5ldFNOTVA6OkNlcnQ6OmR3YXJuKCJPcGVuU1NMIHRlbXBsYXRlIGV4aXN0cyAoJHNzbF9jZmdfaW4pOiBwcmVzZXJ2aW5nLi4uIiwgJG9wdHMpOworICB9CisKKyAgaWYgKG5vdCAtZiAkc3NsX2NmZ19pbikgeworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgibWFrZV9vcGVuc3NsX2NvbmYoJHNzbF9jZmdfaW4pIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6Om1ha2Vfb3BlbnNzbF9jb25mKCRzc2xfY2ZnX2luKTsKKyAgICBjaG1vZCgwNjAwLCAkc3NsX2NmZ19pbik7CisgIH0KKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNyZWF0ZVRsc0RpcjogZG9uZVxuIiwgJG9wdHMpOworICByZXR1cm4gJGRpcjsKK30KKworbXkgQGludGVyYWN0aXZlX29wcyA9IChbJ2dlbmNlcnQnLCAiR2VuZXJhdGUgYSBzaWduZWQgY2VydGlmaWNhdGUiXSwKKwkgICBbJ2dlbmNhJywgIkdlbmVyYXRlIGEgQ0EgY2VydGlmaWNhdGUiXSwKKwkgICBbJ2dlbmNzcicsICJHZW5lcmF0ZSBhIENlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCJdLAorCSAgIFsnc2lnbmNzcicsICJTaWduIGEgQ2VydGlmaWNhdGUgU2lnbmluZyBSZXF1ZXN0Il0sCisJICApOworCitzdWIgcnVuIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkY21kID0gJG9wdHMtPnsnY21kJ307CisKKyAgIyBtdXN0IGhhdmUgYSBjb21tYW5kIGluIG5vbi1JbnRlcmFjdGl2ZSBtb2RlCisgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDMpIGlmICEkb3B0cy0+eydpbnRlcmFjdGl2ZSd9IGFuZCAhJG9wdHMtPnsnY21kJ307CisKKyAgIyAgY2hhbmdlIGRpciB0bHMgZGlyIC0gdGhlIGN3ZCBmb3IgYWxsIGNvbW1hbmRzIC0gc2F2ZSBjd2QgZmlyc3QKKyAgJG9wdHMtPnsncmRpcid9ID0gOjpnZXRjd2QoKTsKKyAgY2hkaXIoJG9wdHMtPnsndGxzZGlyJ30pIG9yIGRpZSgiY291bGQnbnQgY2hhbmdlIGRpcmVjdG9yeTogJG9wdHMtPnt0bHNkaXJ9Iik7CisgICMgZGlzcGxheSBjb250ZXh0CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiUEFUSDogJEVOVntQQVRIfVxuXG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY29uZmlnIGZpbGU6ICRvcHRzLT57Y2ZnZmlsZX1cbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjb25maWcgZGlyOiAgJG9wdHMtPntjZmdkaXJ9XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgidGxzIGRpcjogICAgICRvcHRzLT57dGxzZGlyfVxuIiwgJG9wdHMpOworCisgIG15ICRjbWRzdHIgPSBqb2luKCcgJywgJGNtZCwgQHskb3B0cy0+eydjbWRhcmdzJ319KTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjb21tYW5kOiAgICAgJGNtZHN0clxuIiwgJG9wdHMpOworCisgIE5ldFNOTVA6OkNlcnQ6OkdldE9wdHNGcm9tQXJyYXkoXEB7JG9wdHMtPnsnY21kYXJncyd9fSwgJG9wdHMsCisJCQkJICAnd2l0aC1jYXxhPXMnLCAnY2F8QT1zJywnY3NyfHI9cycsCisJCQkJICAnZnJvbS1jcnR8eD1zJywgJ2NydHxYPXMnLCAnZGF5c3xkPXMnLAorCQkJCSAgJ2NufG49cycsICdlbWFpbHxlPXMnLCAnaG9zdHxoPXMnLAorCQkJCSAgJ3NhbnxzPXNAJywgJ29yZ3xvPXMnLCAndW5pdHx1PXMnLAorCQkJCSAgJ2NvdW50cnl8Yz1zJywgJ3N0YXRlfHByb3ZpbmNlfHA9cycsCisJCQkJICAnbG9jYWxpdHl8bD1zJywgJ2JyaWVmfGInLAorCQkJCSAgQE5ldFNOTVA6OkNlcnQ6Olg1MDlGTVRTKTsKKworICAjIHByb2Nlc3MgZXh0cmEgYXJnczsgLS08Y2ZnLW5hbWU+Wz08dmFsPl0KKyAgJGFwcC0+cHJvY2Vzc0V4dHJhQXJncygpOworCisgICMgSWYgaW4gaW50ZXJhY3RpdmUgbW9kZSAtIGZpbGwgbWlzc2luZyBpbmZvIGJ5IGludGVydmlld2luZyB1c2VyCisgIGlmIChub3QgZGVmaW5lZCAkY21kIG9yIGdyZXAgey8kY21kL30gbWFwIHskXy0+WzBdfSBAaW50ZXJhY3RpdmVfb3BzKSB7CisgICAgJGFwcC0+dXNlcklucHV0KCkgaWYgJG9wdHMtPntpbnRlcmFjdGl2ZX07CisgICAgJGNtZCA9ICRvcHRzLT57J2NtZCd9OyAjIG1heSBoYXZlIGNoYW5nZWQKKyAgfQorCisgICMgcmVzb2x2ZSBpbnB1dCBhcmdzIHRvIGZpbGVuYW1lcworICAkYXBwLT5yZXNvbHZlQ3J0QXJncygpOworCisgICMgdXNlIGVudi4gb3IgbWVyZ2UgdGVtcGxhdGUgZm9yIE9wZW5TU0wgY29uZmlnCisgICROZXRTTk1QOjpDZXJ0OjpTU0xDRkcgfHw9ICRhcHAtPm9wZW5zc2xDZmcoKTsKKworICBpZiAoJGNtZCA9fiAvXmdlbmNhJC8pIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgxKSBpZiBkZWZpbmVkICRvcHRzLT57J2Zyb20tY3J0J30gb3IgZGVmaW5lZCAkb3B0cy0+eydjc3InfTsKKyAgICAkYXBwLT5nZW5DYSgkb3B0cy0+eyd3aXRoLWNhJ30pOworICB9IGVsc2lmICgkY21kID1+IC9eZ2VuY2U/cnQkLykgeworICAgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDEpIGlmIGRlZmluZWQgJG9wdHMtPnsnZnJvbS1jcnQnfSBvciBkZWZpbmVkICRvcHRzLT57J2Nzcid9OworICAgICRhcHAtPmdlbkNlcnQoJG9wdHMtPnsnd2l0aC1jYSd9KTsKKyAgfSBlbHNpZiAoJGNtZCA9fiAvXmdlbmNzciQvKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dXNhZ2UoMSkgaWYgZGVmaW5lZCAkb3B0cy0+eyd3aXRoLWNhJ30gb3IgZGVmaW5lZCAkb3B0cy0+eydjcnQnfTsKKyAgICAkYXBwLT5nZW5Dc3IoKTsKKyAgfSBlbHNpZiAoJGNtZCA9fiAvXnNpZ25jc3IkLykgeworICAgIE5ldFNOTVA6OkNlcnQ6OnVzYWdlKDEpIHVubGVzcyBkZWZpbmVkICRvcHRzLT57J3dpdGgtY2EnfSBhbmQgZGVmaW5lZCAkb3B0cy0+eydjc3InfTsKKyAgICAkYXBwLT5zaWduQ3NyKCk7CisgIH0gZWxzaWYgKCRjbWQgPX4gL15zaG93KGNlP3J0cz8pPyQvKSB7CisgICAgJGFwcC0+c2hvdygnY2VydHMnKTsKKyAgfSBlbHNpZiAoJGNtZCA9fiAvXnNob3djYXM/JC8pIHsKKyAgICAkYXBwLT5zaG93KCdjYS1jZXJ0cycpOworICB9IGVsc2lmICgkY21kID1+IC9eaW1wb3J0JC8pIHsKKyAgICAkYXBwLT5pbXBvcnQoKTsKKyAgfSBlbHNlIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgpOworICB9Cit9CisKK3N1YiBwcm9jZXNzRXh0cmFBcmdzIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSBAYXJnczsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInByb2Nlc3NpbmcgZXh0cmEgYXJncy4uLlxuIiwgJG9wdHMpOworCisgIHdoaWxlIChAeyRvcHRzLT57J2NtZGFyZ3MnfX0pIHsKKyAgICBteSAkYXJnID0gc2hpZnQoQHskb3B0cy0+eydjbWRhcmdzJ319KTsKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImZvdW5kOiBhcmcgLS0+ICRhcmdcbiIsICRvcHRzKTsKKyAgICBpZiAoJGFyZyA9fiAvXi0rKFx3KykoPzo9KC4qPykpP1xzKiQvKSB7CisgICAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImZvdW5kOiBhcmcoJDEpIHZhbCgkMilcbiIsICRvcHRzKTsKKyAgICAgIGlmIChleGlzdHMgJG9wdHMtPnskMX0pIHsKKyAgIAlOZXRTTk1QOjpDZXJ0Ojp2d2Fybigib3B0aW9uICgkMSkgYWxyZWFkeSBzZXQ6IG92ZXJ3cml0aW5nXG4iLCAkb3B0cyk7CisgICAgICB9IAorICAgICAgJG9wdHMtPnskMX0gPSAoZGVmaW5lZCAkMiA/ICQyIDogMSk7CisgICAgfSBlbHNlIHsKKyAgICAgIHB1c2goQGFyZ3MsICRhcmcpOworICAgIH0KKyAgfQorICBAeyRvcHRzLT57J2NtZGFyZ3MnfX0gPSBAYXJnczsKK30KKworc3ViIHJlc29sdmVDcnRBcmdzIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworCisgICMgZmluZCBjYSwgY3J0LCBjc3IgYXJncyBpZiBwcmVzZW50IGFuZCByZXR1cm4gZnVsbHkgcXVhbGlmaWVkIHBhdGgKKyAgaWYgKGRlZmluZWQgJG9wdHMtPnsnd2l0aC1jYSd9KSB7CisgICAgbXkgJGNhOworICAgICRjYSA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2VydHMoJG9wdHMsICdjYS1jZXJ0cycsICRvcHRzLT57J3dpdGgtY2EnfSk7CisgICAgZGllKCJ1bmFibGUgdG8gbG9jYXRlIENBIGNlcnRpZmljYXRlICgkb3B0cy0+eyd3aXRoLWNhJ30pXG4iKSB1bmxlc3MgLWUgJGNhOworICAgIGRpZSgidW5hYmxlIHJlYWQgQ0EgY2VydGlmaWNhdGUgKCRvcHRzLT57J3dpdGgtY2EnfSlcbiIpIHVubGVzcyAtciAkY2E7CisgICAgJG9wdHMtPnsnd2l0aC1jYSd9ID0gJGNhOworICB9CisKKyAgaWYgKGRlZmluZWQgJG9wdHMtPnsnZnJvbS1jcnQnfSkgeworICAgIG15ICRjcnQ7CisgICAgJGNydCA9IE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2VydHMoJG9wdHMsICdjZXJ0cycsICRvcHRzLT57J2Zyb20tY3J0J30pOworICAgIGRpZSgidW5hYmxlIHRvIGxvY2F0ZSBjZXJ0aWZpY2F0ZSAoJG9wdHMtPnsnZnJvbS1jcnQnfSlcbiIpIHVubGVzcyAtZSAkY3J0OworICAgIGRpZSgidW5hYmxlIHJlYWQgY2VydGlmaWNhdGUgKCRvcHRzLT57J2Zyb20tY3J0J30pXG4iKSB1bmxlc3MgLXIgJGNydDsKKyAgICAkb3B0cy0+eydmcm9tLWNydCd9ID0gJGNydDsKKyAgfQorCisgIGlmIChkZWZpbmVkICRvcHRzLT57J2Nzcid9KSB7CisgICAgbXkgJGNzcjsKKyAgICAkY3NyID0gTmV0U05NUDo6Q2VydDo6ZmluZF9jZXJ0cygkb3B0cywgJ2NzcnMnLCAkb3B0cy0+eydjc3InfSk7CisgICAgZGllKCJ1bmFibGUgdG8gbG9jYXRlIENTUiBjZXJ0aWZpY2F0ZSAoJG9wdHMtPntjc3J9KVxuIikgdW5sZXNzIC1lICRjc3I7CisgICAgZGllKCJ1bmFibGUgcmVhZCBDU1IgY2VydGlmaWNhdGUgKCRvcHRzLT57Y3NyfSlcbiIpIHVubGVzcyAtciAkY3NyOworICAgICRvcHRzLT57J2Nzcid9ID0gJGNzcjsKKyAgfQorfQorCitzdWIgb3BlbnNzbENmZyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRzYW4gPSAkY29uZmlnLT5pbmhlcml0KCdzYW4nKSB8fCAkY29uZmlnLT5pbmhlcml0KCdzdWJqZWN0QWx0TmFtZScpOworICBteSAkc3NsX2NmZ19pbiA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCROZXRTTk1QOjpDZXJ0OjpTU0xDRkdJTik7CisgIG15ICRzc2xfY2ZnX291dCA9IE5ldFNOTVA6OkNlcnQ6OmZxX3JlbF9wYXRoKCROZXRTTk1QOjpDZXJ0OjpTU0xDRkdPVVQpOworCisgIGlmIChub3QgLWYgJHNzbF9jZmdfaW4pIHsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp2d2FybigiT3BlblNTTCB0ZW1wbGF0ZSBub3QgZm91bmQ6ICRzc2xfY2ZnX2luXG4iLCAkb3B0cyk7CisgICAgZGllKCJubyBPcGVuU1NMIHRlbXBsYXRlIik7CisgIH0KKworICBvcGVuKElOLCAkc3NsX2NmZ19pbikgb3IgZGllKCJ1bmFibGUgdG8gb3BlbiBPcGVuU1NMIHRlbXBsYXRlOiAkc3NsX2NmZ19pblxuIik7CisgIG9wZW4oT1VULCAiPiRzc2xfY2ZnX291dCIpIG9yIGRpZSgidW5hYmxlIHRvIG9wZW4gT3BlblNTTCBjb25maWc6ICRzc2xfY2ZnX291dFxuIik7CisKKyAgcHJpbnQgT1VUICIjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4iOworICBwcmludCBPVVQgIiMjIyMjICAgIFdhcm5pbmc6IERvIE5vdCBFZGl0IC0gR2VuZXJhdGVkIEZpbGUgICAgIyMjIyNcbiI7CisgIHByaW50IE9VVCAiIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuIjsKKyAgd2hpbGUgKDxJTj4pIHsKKyAgICBpZiAoJHNhbikgeworICAgICAgcy9cJVxbKFteXF1dKj8pXF0vJDEvOworICAgIH0gZWxzZSB7CisgICAgICBzL1wlXFsoW15cXV0qPylcXS8vOworICAgIH0KKyAgICBwcmludCBPVVQgJF87CisgIH0KKyAgY2xvc2UoSU4pOworICBjbG9zZShPVVQpOworCisgIHJldHVybiAkc3NsX2NmZ19vdXQ7Cit9CisKK3N1YiBvcGVuc3NsRW52IHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKworICBteSAkY24gPSBzaGlmdDsKKyAgbXkgJGRheXMgPSBzaGlmdDsKKyAgbXkgJGRpciA9IHNoaWZ0IHx8ICIuIjsKKyAgIyBYWFggLSBuZWVkIHRvIGhhbmRsZSBjb25maWcnZCBpZGVudGl0eSBoZXJlCisgIG15ICRuYW1lID0gJGNvbmZpZy0+aW5oZXJpdCgibmFtZSIpOworICBteSAkaG9zdCA9ICRjb25maWctPmluaGVyaXQoImhvc3QiKTsKKyAgbXkgJGVtYWlsID0gJGNvbmZpZy0+aW5oZXJpdCgiZW1haWwiKTsKKyAgbXkgJGNvdW50cnkgPSAkY29uZmlnLT5pbmhlcml0KCJjb3VudHJ5Iik7CisgIG15ICRzdGF0ZSA9ICRjb25maWctPmluaGVyaXQoInN0YXRlIik7CisgIG15ICRsb2NhbGl0eSA9ICRjb25maWctPmluaGVyaXQoImxvY2FsaXR5Iik7CisgIG15ICRvcmcgPSAkY29uZmlnLT5pbmhlcml0KCJvcmciKTsKKyAgbXkgJG9yZ191bml0ID0gJGNvbmZpZy0+aW5oZXJpdCgidW5pdCIpIHx8ICRjb25maWctPmluaGVyaXQoIm9yZ1VuaXQiKTsKKyAgbXkgJHNhbjsKKyAgbXkgJHNhbl9hcnJfcmVmOworICBteSAkbWQgPSAkY29uZmlnLT5pbmhlcml0KCJtc2dEaWdlc3QiKTsKKyAgbXkgJGtzaXplID0gJGNvbmZpZy0+aW5oZXJpdCgia2V5U2l6ZSIpOworCisgIG15ICRlbnY7CisKKyAgJGVudiAuPSAiIEtTSVpFPSRrc2l6ZSIgaWYgZGVmaW5lZCAka3NpemU7CisgICRlbnYgLj0gIiBEQVlTPSRkYXlzIiBpZiBkZWZpbmVkICRkYXlzOworICAkZW52IC49ICIgTUQ9JG1kIiBpZiBkZWZpbmVkICRtZDsKKworICAkZW52IC49ICIgRElSPSckZGlyJyIgaWYgZGVmaW5lZCAkZGlyOworCisgICRlbnYgLj0gIiBFTUFJTD0kZW1haWwiIGlmIGRlZmluZWQgJGVtYWlsOworICAkZW52IC49ICIgQ049JyRjbiciIGlmIGRlZmluZWQgJGNuOworICAkZW52IC49ICIgT1JHPSckb3JnJyIgaWYgZGVmaW5lZCAkb3JnOworICAkZW52IC49ICIgT1JHX1VOSVQ9JyRvcmdfdW5pdCciIGlmIGRlZmluZWQgJG9yZ191bml0OworICAkZW52IC49ICIgQ09VTlRSWT0kY291bnRyeSIgaWYgZGVmaW5lZCAkY291bnRyeTsKKyAgJGVudiAuPSAiIFNUQVRFPSRzdGF0ZSIgaWYgZGVmaW5lZCAkc3RhdGU7CisgICRlbnYgLj0gIiBMT0NBTElUWT0kbG9jYWxpdHkiIGlmIGRlZmluZWQgJGxvY2FsaXR5OworCisgICRzYW5fYXJyX3JlZiA9ICRjb25maWctPmluaGVyaXQoJ3N1YmplY3RBbHROYW1lJyk7CisgICRzYW4gPSBqb2luKCdcLFwgJywgQHskc2FuX2Fycl9yZWZ9KSBpZiByZWYgJHNhbl9hcnJfcmVmOworICAkc2FuX2Fycl9yZWYgPSAkY29uZmlnLT5pbmhlcml0KCdzYW4nKTsKKyAgJHNhbiAuPSBqb2luKCdcLFwgJywgQHskc2FuX2Fycl9yZWZ9KSBpZiByZWYgJHNhbl9hcnJfcmVmOworICAkc2FuID1+IHMvRU1BSUw6L2VtYWlsOi9nOworICAkZW52IC49ICIgU0FOPSRzYW4iIGlmIGRlZmluZWQgJHNhbjsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIm9wZW5zc2xFbnY6ICRlbnZcbiIsICRvcHRzKTsKKworICByZXR1cm4gJGVudjsKK30KK291ciBAc2FuX3ByZWZpeCA9IChbJ2Rpck5hbWU6JywgImUuZy4sIGRpck5hbWU6L3Vzci9zaGFyZS9zbm1wL3RscyJdLAorCQkgICBbJ0ROUzonLCAiZS5nLiwgRE5TOnRlc3QubmV0LXNubXAub3JnKSJdLAorCQkgICBbJ2VtYWlsOicsICJlLmcuLCBlbWFpbDphZG1pblxAbmV0LXNubXAub3JnIl0sCisJCSAgIFsnSVA6JywgImUuZy4sIElQOjE5Mi4xNjguMS4xIl0sCisJCSAgIFsnUklEOicsICJlLmcuLCBSSUQ6MS4xLjMuNi4yMCJdLAorCQkgICBbJ1VSSTonLCAiZS5nLiwgVVJJOmh0dHA6Ly93d3cubmV0LXNubXAub3JnIl0pOworCitzdWIgdXNlcklucHV0RE4geworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkcHJvbXB0OworICBteSAkcmV0OworICBteSAkaG9zdCA9ICRjb25maWctPmluaGVyaXQoImhvc3QiKSB8fCA6Omhvc3RuYW1lKCk7CisgIG15ICRlbWFpbCA9ICRjb25maWctPmluaGVyaXQoJ2VtYWlsJykgfHwgZ2V0bG9naW4oKSAuICJcQCRob3N0IjsKKworICMgZ2V0IEVNQUlMCisgICRwcm9tcHQgPSAiRW50ZXIgRW1haWwiOworICAkcmV0ID0gJGVtYWlsOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIlx0RW1haWwgQWRkcmVzcyAtIChlLmcuLCA8bmFtZT5APGRvbWFpbj4pIik7CisgICRlbWFpbCA9ICRvcHRzLT57J2VtYWlsJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgQ04KKyAgJHByb21wdCA9ICJFbnRlciBDb21tb24gTmFtZSI7CisgICRyZXQgPSAoJG9wdHMtPnsnY21kJ30gZXEgJ2dlbmNhJyA/ICJjYS0kaG9zdCIgOiAkZW1haWwpOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnY24nKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjb21tb25OYW1lJykgfHwgJHJldDsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJcdENvbW1vbiBOYW1lIC0gKGUuZy4sIG5ldC1zbm1wLm9yZykiKTsKKyAgJG9wdHMtPnsnY24nfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBPUkcKKyAgJHByb21wdCA9ICJFbnRlciBPcmdhbml6YXRpb24iOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnb3JnJykgfHwgJ05ldC1TTk1QJzsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsCisJCQkJICJcdE9yZ2FuaXphdGlvbiAtIChlLmcuLCBOZXQtU05NUCkiKTsKKyAgJG9wdHMtPnsnb3JnJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldDsKKyAgIyBnZXQgT1JHX1VOSVQKKyAgJHByb21wdCA9ICJFbnRlciBPcmdhbml6YXRpb25hbCBVbml0IjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ3VuaXQnKSB8fCAnRGV2ZWxvcG1lbnQnOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIlx0T3JnYW5pemF0aW9uYWwgVW5pdCAtIChlLmcuLCBEZXZlbG9wbWVudCkiKTsKKyAgJG9wdHMtPnsndW5pdCd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IENPVU5UUlkKKyAgJHByb21wdCA9ICJFbnRlciBDb3VudHJ5IENvZGUiOworICAkcmV0ID0gJGNvbmZpZy0+aW5oZXJpdCgnY291bnRyeScpIHx8ICdVUyc7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiQ291bnRyeSBDb2RlLCAyIGxldHRlcnMgKDx0YWI+IGZvciBvcHRpb25zKSIsCisJCQkJICROZXRTTk1QOjpDZXJ0OjpNQVRDSCwgXEBDQyk7CisgICRvcHRzLT57J2NvdW50cnknfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBTVEFURShQcm92aW5jZSkKKyAgJHByb21wdCA9ICJFbnRlciBTdGF0ZSBvciBQcm92aW5jZSI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdzdGF0ZScpIHx8ICdDQSc7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiXHRTdGF0ZSBvciBQcm92aW5jZSAtIChlLmcuLCBDQSkiKTsKKyAgJG9wdHMtPnsnc3RhdGUnfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAjIGdldCBMT0NBTElUWQorICAkcHJvbXB0ID0gIkVudGVyIExvY2FsaXR5IjsKKyAgJHJldCA9ICRjb25maWctPmluaGVyaXQoJ2xvY2FsaXR5JykgfHwgJ0RhdmlzJzsKKyAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgJHJldCA9IE5ldFNOTVA6OlRlcm06OkNvbXBsZXRlKCRwcm9tcHQsICRyZXQsICJcdExvY2FsaXR5IC0gKGUuZy4sIERhdmlzKSIpOworICAkb3B0cy0+eydsb2NhbGl0eSd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgICMgZ2V0IFNBTiAobG9vcCkKKyAgaWYgKCEkY29uZmlnLT57J2JyaWVmJ30pIHsKKyAgICAgIHByaW50ICJFbnRlciBTdWJqZWN0IEFsdCBOYW1lcy4gIEV4YW1wbGVzOlxuIjsKKyAgICAgIGZvcmVhY2ggbXkgJHBhaXIgKEBzYW5fcHJlZml4KSB7CisJICBwcmludGYoIlx0JS0xMC4xMHMgJXNcbiIsICRwYWlyLT5bMF0sICRwYWlyLT5bMV0pOworICAgICAgfQorICB9CisgIGRvIHsKKyAgICAkcmV0ID0gJ2RvbmUnOworICAgICRwcm9tcHQgPSAiRW50ZXIgU3ViamVjdCBBbHQgTmFtZSAoZW50ZXIgJ2RvbmUnIHdoZW4gZmluaXNoZWQpIFskcmV0XTogIjsKKyAgICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUgKCRwcm9tcHQsICRyZXQsCisJCQkgICAgIlx0U3ViamVjdCBBbHQgTmFtZSAtICg8dHlwZT46PHZhbD4pIiwKKwkJCSAgICAgJE5ldFNOTVA6OkNlcnQ6OlBSRU1BVENILCBcQHNhbl9wcmVmaXgpOworICAgIHB1c2goQHskb3B0cy0+eydzYW4nfX0sICRyZXQpIGlmIGRlZmluZWQgJHJldCBhbmQgJHJldCBuZSAnZG9uZSc7CisgIH0gd2hpbGUgKGRlZmluZWQgJHJldCBhbmQgJHJldCBuZSAnZG9uZScpOworfQorCitvdXIgQHNubXBfYXBwcyA9IChbJ3NubXAnLCAnR2VuZXJpYyBDZXJ0aWZpY2F0ZSddLAorCQkgIFsnc25tcGFwcCcsJ0NsaWVudCBDZXJ0aWZpY2F0ZSddLAorCQkgIFsnc25tcGQnLCdBZ2VudCBDZXJ0aWZpY2F0ZSddLAorCQkgIFsnc25tcHRyYXBkJywnVHJhcC1hZ2VudCBDZXJ0aWZpY2F0ZSddKTsKKworc3ViIHVzZXJJbnB1dFRhZyB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRyZXQ7CisgIG15ICRwcm9tcHQ7CisKKyAgcHJpbnQgIkFwcGxpY2F0aW9uIFRhZzpcblx0dXNlZCB0byBuYW1lIHRoZSBjZXJ0aWZpY2F0ZSBhbmQgZGljdGF0ZSBpdHMgZmlsZW5hbWVcbiI7CisgIHByaW50ICJcdEl0IG1heSBhbHNvIGFzc29jaWF0ZSBpdCB3aXRoIGEgcGFydGljdWxhciBhcHBsaWNhdGlvbiAoZWcgXCJzbm1wZFwiKVxuIjsKKyAgcHJpbnQgIlx0aWYgJ25vbmUnLCBhIG5hbWUgd2lsbCBiZSBnZW5lcmF0ZWQgZnJvbSBvdGhlciBwYXJhbWV0ZXJzXG4iOworICBwcmludCAiXHRlbnRlciA8dGFiPjx0YWI+IGZvciB0eXBpY2FsIG9wdGlvbnMsIG9yIGVudGVyIG5ldyBuYW1lXG4iOworICAkcHJvbXB0ID0gIkVudGVyIEFwcGxpY2F0aW9uIFRhZyI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCd0YWcnKSB8fCAnbm9uZSc7CisgICRwcm9tcHQgLj0gKGRlZmluZWQgJHJldCA/ICIgWyRyZXRdOiAiIDogIjogIik7CisgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0LAorCQkJCSAiQXBwbGljYXRpb24gVGFnIGFzc29jYWlhdGVkIHdpdGggY2VydGlmaWNhdGUiLAorCQkJCSAobm90ICROZXRTTk1QOjpDZXJ0OjpNQVRDSCksIFxAc25tcF9hcHBzKTsKKyAgJG9wdHMtPnsndGFnJ30gPSAkcmV0IGlmIGRlZmluZWQgJHJldCBhbmQgJHJldCBuZSAnbm9uZSc7Cit9CisKK3N1YiB1c2VySW5wdXQgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkcHJvbXB0OworICBteSAkcmV0OworCisgIHByaW50ICJDaG9vc2UgYW4gb3BlcmF0aW9uOlxuIjsKKyAgZm9yZWFjaCBteSAkb3AgKEBpbnRlcmFjdGl2ZV9vcHMpIHsKKyAgICBwcmludCAiXHQkb3AtPlswXVx0LSAgJG9wLT5bMV1cbiI7CisgIH0KKworICAkcHJvbXB0ID0gIk9wZXJhdGlvbiI7CisgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdjbWQnKSB8fCAkaW50ZXJhY3RpdmVfb3BzWzBdWzBdOworICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCwKKwkJCQkgIkNlcnRpZmNpYXRlIE9wZXJhdGlvbiB0byBwZXJmb3JtIiwKKwkJCQkgJE5ldFNOTVA6OkNlcnQ6Ok1BVENILCBcQGludGVyYWN0aXZlX29wcyk7CisKKyAgJG9wdHMtPnsnY21kJ30gPSAkcmV0OworCisgIGlmICgkcmV0ID1+IC9eZ2VuY2VydCQvKSB7CisgICAgIyBnZXQgdGFnCisgICAgJGFwcC0+dXNlcklucHV0VGFnKCk7CisgICAgIyBnZXQgRE4KKyAgICAkYXBwLT51c2VySW5wdXRETigpOworICAgICMgc2VsZi1zaWduZWQvQ0Etc2lnbmVkKGNhLWNlcnQpCisgIH0gZWxzaWYgKCRyZXQgPX4gL15nZW5jYSQvKSB7CisgICAgIyBnZXQgRE4KKyAgICAkYXBwLT51c2VySW5wdXRETigpOworICB9IGVsc2lmICgkcmV0ID1+IC9eZ2VuY3NyJC8pIHsKKyAgICAjIGdldCB0YWcKKyAgICAkYXBwLT51c2VySW5wdXRUYWcoKTsKKyAgICAjIGdldCBETgorICAgICRhcHAtPnVzZXJJbnB1dEROKCk7CisgIH0gZWxzaWYgKCRyZXQgPX4gL15zaWduY3NyJC8pIHsKKyAgICAjIGdldCBjc3IKKyAgICAkcHJvbXB0ID0gIkNob29zZSBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3QiOworICAgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCdjc3InKTsKKyAgICAkcHJvbXB0IC49IChkZWZpbmVkICRyZXQgPyAiIFskcmV0XTogIiA6ICI6ICIpOworICAgICRyZXQgPSBOZXRTTk1QOjpUZXJtOjpDb21wbGV0ZSgkcHJvbXB0LCAkcmV0KTsKKyAgICAkb3B0cy0+eydjc3InfSA9ICRyZXQgaWYgZGVmaW5lZCAkcmV0OworICAgICMgZ2V0IGNhCisgICAgJHByb21wdCA9ICJDaG9vc2UgQ0EgQ2VydGlmaWNhdGUiOworICAgICRyZXQgPSAkY29uZmlnLT5pbmhlcml0KCd3aXRoLWNhJyk7CisgICAgJHByb21wdCAuPSAoZGVmaW5lZCAkcmV0ID8gIiBbJHJldF06ICIgOiAiOiAiKTsKKyAgICAkcmV0ID0gTmV0U05NUDo6VGVybTo6Q29tcGxldGUoJHByb21wdCwgJHJldCk7CisgICAgJG9wdHMtPnsnd2l0aC1jYSd9ID0gJHJldCBpZiBkZWZpbmVkICRyZXQ7CisgIH0gZWxzZSB7CisgICAgTmV0U05NUDo6Q2VydDo6dndhcm4oImFib3J0aW5nIG9wZXJhdGlvbjogZXhpdGluZy4uLlxuIiwgJG9wdHMpOworICAgIGV4aXQoMSk7CisgIH0KK30KKworc3ViIGNyZWF0ZUNhRGlyIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkZGlyID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkZmlsZTsKKyAgbXkgJGNtZDsKKworICBOZXRTTk1QOjpDZXJ0OjptYWtlX2RpcnMoJG9wdHMsICRkaXIsIDA3MDAsJ25ld2NlcnRzJywncHJpdmF0ZScpOworCisgICRmaWxlID0gIiRkaXIvJE5ldFNOTVA6OkNlcnQ6OlNFUklBTCI7CisgIGlmIChub3QgLWYgJGZpbGUpIHsKKyAgICAkY21kID0gImVjaG8gJzAxJyA+ICckZmlsZSciOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oJGNtZCwgJG9wdHMpOworICAgIGNobW9kKDA2MDAsICRmaWxlKTsKKyAgfQorCisgICRmaWxlID0gIiRkaXIvJE5ldFNOTVA6OkNlcnQ6OklOREVYIjsKKyAgaWYgKG5vdCAtZiAkZmlsZSkgeworICAgICRjbWQgPSAidG91Y2ggJyRmaWxlJyI7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCIkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgkY21kLCAkb3B0cyk7CisgICAgY2htb2QoMDYwMCwgJGZpbGUpOworICB9Cit9CisKK3N1YiBnZW5DYSB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRob3N0ID0gJGNvbmZpZy0+aW5oZXJpdCgnaG9zdCcpIHx8IDo6aG9zdG5hbWUoKTsKKyAgbXkgJGRheXMgPSAkY29uZmlnLT5pbmhlcml0KCdkYXlzJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY2FEYXlzJykgfHwgCisgICAgICAgICAgICAgJE5ldFNOTVA6OkNlcnQ6OkRFRkNBREFZUzsKKyAgbXkgJGNuID0gJGNvbmZpZy0+aW5oZXJpdCgnY24nKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjb21tb25OYW1lJykgfHwKKyAgICAgICAgICAgImNhLSRob3N0IjsKKyAgbXkgJGNhID0gJGNvbmZpZy0+aW5oZXJpdCgnd2l0aC1jYScpOworICBteSAkdGFnID0gJGNvbmZpZy0+aW5oZXJpdCgndGFnJykgfHwgJGNuOworCisgICMgY3JlYXRlIENBIGRpcgorICBteSAkZGlyID0gIi5jYS8kdGFnIjsKKyAgJGFwcC0+Y3JlYXRlQ2FEaXIoJGRpcik7CisKKyAgbXkgJG91dENydCA9ICIkTmV0U05NUDo6Q2VydDo6Q0FESVIvJHRhZy5jcnQiOworICBteSAkb3V0S2V5ID0gIiROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyR0YWcua2V5IjsKKworICAjIHNldCBjb21tYW5kIGVudgorICBteSAkZW52ID0gJGFwcC0+b3BlbnNzbEVudigkY24sICRkYXlzKTsKKworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dENydCwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dEtleSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworCisgIG15ICRjbWQgPSAiJGVudiBvcGVuc3NsIHJlcSAtZXh0ZW5zaW9ucyB2M19jYV9jcmVhdGUgLW5ldyAtZGF5cyAkZGF5cyAtYmF0Y2ggLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIC1rZXlvdXQgJyRvdXRLZXknIjsKKyAgJGNtZCAuPSAiIC1ub2RlcyI7CisKKyAgaWYgKGRlZmluZWQgJGNhKSB7CisgICAgIyB3ZSBoYXZlIHRvIGdlbiBhIGNzciBhbmQgdGhlbiBzaWduIGl0LCBtdXN0IHByZXNlcnZlIENBOlRSVUUKKyAgICBteSAkb3V0Q3NyID0gIiROZXRTTk1QOjpDZXJ0OjpORVdDUlRESVIvJHRhZy5jc3IiOworICAgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0Q3NyLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisgICAgJGNtZCAuPSAiIC1vdXQgJyRvdXRDc3InIjsKKworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuQ2EgKGdlbmNzcik6ICRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisKKyAgICBteSAkY2FfYmFzZSA9IDo6YmFzZW5hbWUoJGNhLCBATmV0U05NUDo6Q2VydDo6Q1JUU1VGRklYRVMpOworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiY2FfYmFzZTogJGNhX2Jhc2VcbiIsICRvcHRzKTsKKworICAgICMgc2V0IGNvbW1hbmQgZW52CisgICAgJGVudiA9ICRhcHAtPm9wZW5zc2xFbnYoJGNuLCAkZGF5cywgIi5jYS8kY2FfYmFzZSIpOworCisgICAgJGNtZCA9ICIkZW52IG9wZW5zc2wgY2EgLWV4dGVuc2lvbnMgdjNfY2Ffc2lnbl9jYSAtZGF5cyAkZGF5cyAtY2VydCAnJGNhJyAta2V5ZmlsZSAnJE5ldFNOTVA6OkNlcnQ6OlBSSVZESVIvJGNhX2Jhc2Uua2V5JyAtaW4gJyRvdXRDc3InIC1iYXRjaCAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkcgLW91dCAnJG91dENydCciOworCisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJnZW5DYSAoc2lnbmNzcik6ICRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisgIH0gZWxzZSB7CisgICAgJGNtZCAuPSAiIC14NTA5IC1vdXQgJyRvdXRDcnQnIjsKKworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuQ2E6ICRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisgIH0KKworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIkNBIEdlbmVyYXRlZDpcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRvdXRDcnRcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRvdXRLZXlcbiIsICRvcHRzKTsKK30KKworc3ViIGdlbkNlcnQgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkaG9zdCA9ICRjb25maWctPmluaGVyaXQoImhvc3QiKSB8fCA6Omhvc3RuYW1lKCk7CisgIG15ICRlbWFpbCA9ICRjb25maWctPmluaGVyaXQoImVtYWlsIikgfHwgZ2V0bG9naW4oKSAuICJcQCRob3N0IjsKKyAgbXkgJGRheXMgPSAkY29uZmlnLT5pbmhlcml0KCdkYXlzJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY3J0RGF5cycpIHx8ICROZXRTTk1QOjpDZXJ0OjpERUZDUlREQVlTOworICBteSAkY24gPSAkY29uZmlnLT5pbmhlcml0KCdjbicpIHx8ICRjb25maWctPmluaGVyaXQoJ2NvbW1vbk5hbWUnKTsKKyAgbXkgJGNhID0gJGNvbmZpZy0+aW5oZXJpdCgnd2l0aC1jYScpOworICBteSAkY21kOworCisgIG15ICR0YWcgPSAkb3B0cy0+eyd0YWcnfSB8fCAnc25tcCc7CisgICRjbiB8fD0gKE5ldFNOTVA6OkNlcnQ6OmlzX3NlcnZlcigkdGFnKSA/ICRob3N0IDogJGVtYWlsKTsKKworICBteSAkZW52ID0gJGFwcC0+b3BlbnNzbEVudigkY24sICRkYXlzKTsKKworICBteSAkb3V0Q3J0ID0gIiROZXRTTk1QOjpDZXJ0OjpDUlRESVIvJHRhZy5jcnQiOworICBteSAkb3V0S2V5ID0gIiROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyR0YWcua2V5IjsKKworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dENydCwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dEtleSwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworCisgICRjbWQgPSAiJGVudiBvcGVuc3NsIHJlcSAtZXh0ZW5zaW9ucyB2M191c2VyX2NyZWF0ZSAtbmV3IC1kYXlzICRkYXlzIC1rZXlvdXQgJyRvdXRLZXknIC1iYXRjaCAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkciOworICAkY21kIC49ICIgLW5vZGVzIjsKKworICBpZiAoZGVmaW5lZCAkY2EpIHsKKyAgICBteSAkb3V0Q3NyID0gIiROZXRTTk1QOjpDZXJ0OjpORVdDUlRESVIvJHRhZy5jc3IiOworICAgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0Q3NyLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisgICAgJGNtZCAuPSAiIC1vdXQgJyRvdXRDc3InIjsKKworICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZ2VuQ2VydCAoZ2VuY3NyKTogJGNtZFxuIiwgJG9wdHMpOworICAgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKworICAgICMgWFhYIGNsZWFudXAgdGhpcyB0ZW1wIENTUgorICAgIG15ICRjYV9iYXNlID0gOjpiYXNlbmFtZSgkY2EsIEBOZXRTTk1QOjpDZXJ0OjpDUlRTVUZGSVhFUyk7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjYV9iYXNlOiAkY2FfYmFzZVxuIiwgJG9wdHMpOworCisgICAgIyBzZXQgY29tbWFuZCBlbnYKKyAgICAkZW52ID0gJGFwcC0+b3BlbnNzbEVudigkY24sICRkYXlzLCAiLmNhLyRjYV9iYXNlIik7CisKKyAgICAkY21kID0gIiRlbnYgb3BlbnNzbCBjYSAtZXh0ZW5zaW9ucyB2M19jYV9zaWduIC1kYXlzICRkYXlzIC1jZXJ0ICckY2EnIC1rZXlmaWxlICckTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kY2FfYmFzZS5rZXknIC1pbiAnJG91dENzcicgLWJhdGNoIC1jb25maWcgJE5ldFNOTVA6OkNlcnQ6OlNTTENGRyAtb3V0ICckb3V0Q3J0JyI7CisKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbmNlcnQgKHNpZ25jc3IpOiAkY21kXG4iLCAkb3B0cyk7CisgICAgTmV0U05NUDo6Q2VydDo6dXN5c3RlbSgiJGNtZCAkb3B0cy0+e291dH0gJG9wdHMtPntlcnJ9IiwgJG9wdHMpOworICB9IGVsc2UgeworICAgICRjbWQgLj0gIiAteDUwOSAtb3V0ICckb3V0Q3J0JyI7CisKKyAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbkNlcnQ6ICRjbWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c3lzdGVtKCIkY21kICRvcHRzLT57b3V0fSAkb3B0cy0+e2Vycn0iLCAkb3B0cyk7CisgIH0KKworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIkNlcnRpZmljYXRlIEdlbmVyYXRlZDpcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRvdXRDcnRcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRvdXRLZXlcbiIsICRvcHRzKTsKK30KKworc3ViIGdlbkNzciB7CisgIG15ICRhcHAgPSBzaGlmdDsKKyAgbXkgJGlzQ2EgPSBzaGlmdDsgIyBYWFggLSBub3QgaW1wbGVtZW50ZWQgeWV0CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkaG9zdCA9ICRjb25maWctPmluaGVyaXQoImhvc3QiKSB8fCA6Omhvc3RuYW1lKCk7CisgIG15ICRlbWFpbCA9ICRjb25maWctPmluaGVyaXQoImVtYWlsIikgfHwgZ2V0bG9naW4oKSAuICJcQCRob3N0IjsKKyAgbXkgJGRheXMgPSAkY29uZmlnLT5pbmhlcml0KCdkYXlzJykgfHwgJGNvbmZpZy0+aW5oZXJpdCgnY3J0RGF5cycpIHx8ICROZXRTTk1QOjpDZXJ0OjpERUZDUlREQVlTOworICBteSAkY24gPSAkY29uZmlnLT5pbmhlcml0KCdjbicpIHx8ICRjb25maWctPmluaGVyaXQoJ2NvbW1vbk5hbWUnKTsKKyAgbXkgJHRhZyA9ICRjb25maWctPmluaGVyaXQoJ3RhZycpOworICBteSAkaW5DcnQgPSAkY29uZmlnLT5pbmhlcml0KCdmcm9tLWNydCcpIHx8ICRjb25maWctPmluaGVyaXQoJ2Zyb21DZXJ0Jyk7CisgIG15ICRvdXRDc3I7CisgIG15ICRjc3JLZXk7CisKKyAgaWYgKGRlZmluZWQgJGluQ3J0KSB7CisgICAgJGluQ3J0ID0gTmV0U05NUDo6Q2VydDo6ZmluZF9jZXJ0cygkb3B0cywgJ2NlcnRzJywgJGluQ3J0KTsKKyAgICBteSAkY3J0ID0gOjpiYXNlbmFtZSgkaW5DcnQsIEBOZXRTTk1QOjpDZXJ0OjpDUlRTVUZGSVhFUyk7CisgICAgJGNzcktleSA9ICIkTmV0U05NUDo6Q2VydDo6UFJJVkRJUi8kY3J0LmtleSI7CisgICAgJHRhZyB8fD0gJGNydDsKKyAgfSBlbHNlIHsKKyAgICAkdGFnIHx8PSAnc25tcCc7CisgICAgJGNzcktleSB8fD0gIiROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyR0YWcua2V5IjsKKyAgfQorCisgICRvdXRDc3IgPSAiJE5ldFNOTVA6OkNlcnQ6Ok5FV0NSVERJUi8kdGFnLmNzciI7CisKKyAgJGNuIHx8PSAoTmV0U05NUDo6Q2VydDo6aXNfc2VydmVyKCR0YWcpID8gJGhvc3QgOiAkZW1haWwpOworCisgIG15ICRlbnYgPSAkYXBwLT5vcGVuc3NsRW52KCRjbiwgJGRheXMpOworCisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkb3V0Q3NyLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisgIE5ldFNOTVA6OkNlcnQ6OmNoZWNrX291dHB1dF9maWxlKCRvcHRzLCAkY3NyS2V5LAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ludGVyYWN0aXZlJyksCisJCQkJICAgJGNvbmZpZy0+aW5oZXJpdCgnZm9yY2UnKSk7CisKKyAgbXkgJGNtZCA9IChkZWZpbmVkICRpbkNydCA/CisgICIkZW52IG9wZW5zc2wgeDUwOSAteDUwOXRvcmVxIC1pbiAkaW5DcnQgLW91dCAnJG91dENzcicgLXNpZ25rZXkgJyRjc3JLZXknIC1ub2RlcyAtZGF5cyAkZGF5cyAtYmF0Y2ggLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIiA6CisgICIkZW52IG9wZW5zc2wgcmVxIC1uZXcgLW5vZGVzIC1kYXlzICRkYXlzIC1iYXRjaCAta2V5b3V0ICckY3NyS2V5JyAtb3V0ICckb3V0Q3NyJyAtY29uZmlnICROZXRTTk1QOjpDZXJ0OjpTU0xDRkciKTsKKworICAkY21kIC49ICgkaXNDYSA/ICIgLWV4dGVuc2lvbnMgdjNfY2FfY3JlYXRlIiA6ICIgLWV4dGVuc2lvbnMgdjNfdXNlcl9jcmVhdGUiKTsKKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImdlbkNzcjogJGNtZFxuIiwgJG9wdHMpOworCisgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIkNlcnRpZmljYXRlIFNpZ25pbmcgUmVxdWVzdCBHZW5lcmF0ZWQ6XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkb3V0Q3NyXG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkY3NyS2V5XG4iLCAkb3B0cyk7Cit9CisKK3N1YiBzaWduQ3NyIHsKKyAgbXkgJGFwcCA9IHNoaWZ0OworICBteSAkaXNDYSA9IHNoaWZ0OworICBteSAkY29uZmlnID0gJGFwcC0+eydjb25maWcnfTsKKyAgbXkgJG9wdHMgPSAkYXBwLT57J09QVFMnfTsKKyAgbXkgJGhvc3QgPSAkY29uZmlnLT5pbmhlcml0KCJob3N0IikgfHwgOjpob3N0bmFtZSgpOworICBteSAkZW1haWwgPSAkY29uZmlnLT5pbmhlcml0KCJlbWFpbCIpIHx8IGdldGxvZ2luKCkgLiAiXEAkaG9zdCI7CisgIG15ICRkYXlzID0gJGNvbmZpZy0+aW5oZXJpdCgnZGF5cycpIHx8ICRjb25maWctPmluaGVyaXQoJ2NydERheXMnKSB8fCAkTmV0U05NUDo6Q2VydDo6REVGQ1JUREFZUzsKKyAgbXkgJGNuID0gJGNvbmZpZy0+aW5oZXJpdCgnY24nKSB8fCAkY29uZmlnLT5pbmhlcml0KCdjb21tb25OYW1lJyk7CisgIG15ICR0YWcgPSAkY29uZmlnLT5pbmhlcml0KCd0YWcnKSB8fCAnc25tcCc7CisgIG15ICRpbnN0YWxsID0gJGNvbmZpZy0+aW5oZXJpdCgnaW5zdGFsbCcpOworCisgICRjbiA9IChOZXRTTk1QOjpDZXJ0Ojppc19zZXJ2ZXIoJHRhZykgPyAkaG9zdCA6ICRlbWFpbCk7CisKKyAgbXkgJGNhID0gJG9wdHMtPnsnd2l0aC1jYSd9OworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNhOiAkY2FcbiIsICRvcHRzKTsKKyAgbXkgJGNhX2Jhc2UgPSA6OmJhc2VuYW1lKCRjYSwgQE5ldFNOTVA6OkNlcnQ6OkNSVFNVRkZJWEVTKTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjYV9iYXNlOiAkY2FfYmFzZVxuIiwgJG9wdHMpOworICBteSAkY2Ffa2V5ID0gIiROZXRTTk1QOjpDZXJ0OjpQUklWRElSLyRjYV9iYXNlLmtleSI7IAorCisgIG15ICRjc3IgPSAkb3B0cy0+eydjc3InfTsKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJjc3I6ICRjc3JcbiIsICRvcHRzKTsKKyAgbXkgJGNzcl9iYXNlID0gOjpiYXNlbmFtZSgkY3NyLCBATmV0U05NUDo6Q2VydDo6Q1JUU1VGRklYRVMpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImNzcl9iYXNlOiAkY3NyX2Jhc2VcbiIsICRvcHRzKTsKKyAgbXkgJG91dGRpciA9ICgkaW5zdGFsbCA/ICROZXRTTk1QOjpDZXJ0OjpDUlRESVIgOiAkTmV0U05NUDo6Q2VydDo6TkVXQ1JURElSKTsKKyAgbXkgJG91dENydCA9ICIkb3V0ZGlyLyRjc3JfYmFzZS5jcnQiOworCisgIG15ICRlbnYgPSAkYXBwLT5vcGVuc3NsRW52KCRjbiwgJGRheXMsICIuY2EvJGNhX2Jhc2UiKTsKKworICBOZXRTTk1QOjpDZXJ0OjpjaGVja19vdXRwdXRfZmlsZSgkb3B0cywgJG91dENydCwKKwkJCQkgICAkY29uZmlnLT5pbmhlcml0KCdpbnRlcmFjdGl2ZScpLAorCQkJCSAgICRjb25maWctPmluaGVyaXQoJ2ZvcmNlJykpOworCisgICMgWFhYIC0gaGFuZGxlIGtleWZpbGUgc2VhcmNoPz8KKyAgbXkgJGNtZCA9ICIkZW52IG9wZW5zc2wgY2EgLWJhdGNoIC1kYXlzICRkYXlzIC1leHRlbnNpb25zIHYzX2NhX3NpZ24gLWNlcnQgJyRjYScgLWtleWZpbGUgJyRjYV9rZXknIC1pbiAnJGNzcicgLW91dCAnJG91dENydCcgLWNvbmZpZyAkTmV0U05NUDo6Q2VydDo6U1NMQ0ZHIjsKKworICAjICRjbWQgLj0gKCRpc0NhID8gIiAtZXh0ZW5zaW9ucyB2M19jYV9zaWduX2NhIiA6ICIgLWV4dGVuc2lvbnMgdjNfY2Ffc2lnbiIpOworCisgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgic2lnbkNzcjogJGNtZFxuIiwgJG9wdHMpOworCisgIE5ldFNOTVA6OkNlcnQ6OnVzeXN0ZW0oIiRjbWQgJG9wdHMtPntvdXR9ICRvcHRzLT57ZXJyfSIsICRvcHRzKTsKKworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIlNpZ25lZCBDZXJ0aWZpY2F0ZSBTaWduaW5nIFJlcXVlc3Q6XG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgiICAkY3NyXG4iLCAkb3B0cyk7CisgIE5ldFNOTVA6OkNlcnQ6OnZwcmludCgid2l0aCBDQTpcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRjYVxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIiAgJGNhX2tleVxuIiwgJG9wdHMpOworICBOZXRTTk1QOjpDZXJ0Ojp2cHJpbnQoIkdlbmVyYXRlZCBDZXJ0aWZpY2F0ZTpcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIgICRvdXRDcnRcbiIsICRvcHRzKTsKK30KKworc3ViIHNob3cgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICR0eXBlID0gc2hpZnQgfHwgJ2NlcnRzJzsKKyAgbXkgJGNvbmZpZyA9ICRhcHAtPnsnY29uZmlnJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRzdGFnID0gc2hpZnQoQHskb3B0cy0+eydjbWRhcmdzJ319KTsKKyAgbXkgJGZtdCA9IE5ldFNOTVA6OkNlcnQ6Ong1MDlfZm9ybWF0KCRvcHRzKSB8fCAnLXN1YmplY3QnOworICBteSAkYnJpZWYgPSAkY29uZmlnLT5pbmhlcml0KCdicmllZicpOworICBteSAkb3V0cHV0OworICBteSAkY21kOworCisgIG15ICRjd2QgPSA6OmdldGN3ZCgpOworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoInNob3cgKCRjd2QpOiR0eXBlOiRzdGFnOiRmbXRcbiIsICRvcHRzKTsKKyAgTmV0U05NUDo6Q2VydDo6dnByaW50KCIkb3B0cy0+eyd0bHNkaXInfTpcbiIsICRvcHRzKSB1bmxlc3MgJGJyaWVmOworCisgIGZvcmVhY2ggbXkgJGMgKE5ldFNOTVA6OkNlcnQ6OmZpbmRfY2VydHMoJG9wdHMsICR0eXBlLCAkc3RhZykpIHsKKyAgICBwcmludCAiXG4kYzpcbiIgdW5sZXNzICRicmllZjsKKyAgICAkY21kID0gIm9wZW5zc2wgeDUwOSAtaW4gJyRjJyAtbm9vdXQgJGZtdCI7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJzaG93OiAkY21kXG4iLCAkb3B0cyk7CisKKyAgICAkb3V0cHV0ID0gYCRjbWRgOyBjaG9tcCAkb3V0cHV0OworICAgIE5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJzaG93LSR0eXBlIGZhaWxlZCAoJD8pOiAkb3V0cHV0XG4iLCAkb3B0cykgaWYgJD87CisKKyAgICAkb3V0cHV0ID1+IHMvXlteXG49XSs9Ly8gaWYgJGJyaWVmOworCisgICAgcHJpbnQgIiRvdXRwdXRcbiI7CisgICAgcHJpbnQgIlxuIiB1bmxlc3MgJGJyaWVmOworICB9Cit9CisKK3N1YiBpbXBvcnRfZmlsZSB7CisgIG15ICgkZmlsZSwgJHN1ZmZpeCwgJHRhcmcsICRyZGlyLCAkdGFnKSA9IEBfOworCisgIGlmIChOZXRTTk1QOjpDZXJ0Ojppc191cmwoJGZpbGUpKSB7CisgICAgaWYgKCROZXRTTk1QOjpDZXJ0OjpoYXZlVXNlckFnZW50KSB7CisKKyAgICAgIHJlcXVpcmUgRmlsZTo6VGVtcDsKKyAgICAgIGltcG9ydCBGaWxlOjpUZW1wIHF3KHRlbXBmaWxlKTsKKworICAgICAgbXkgKCRmaCwgJG5ld2ZpbGVuYW1lKSA9IHRlbXBmaWxlKFNVRkZJWCA9PiAkc3VmZml4KTsKKyAgICAgIHJldHVybiBpZiAoISRmaCB8fCAhJG5ld2ZpbGVuYW1lKTsKKyAgICAgIG15ICR1YSA9IExXUDo6VXNlckFnZW50LT5uZXc7CisgICAgICBteSAkcmVzcG9uc2UgPSAkdWEtPmdldCgkZmlsZSk7CisgICAgICBpZiAoJHJlc3BvbnNlLT5pc19zdWNjZXNzKSB7CisJcHJpbnQgJGZoICRyZXNwb25zZS0+ZGVjb2RlZF9jb250ZW50KCk7CisgICAgICB9IGVsc2UgeworCU5ldFNOTVA6OkNlcnQ6OnZ3YXJuKCJmYWlsZWQgdG8gZG93bmxvYWQgYSBjZXJ0aWZpY2F0ZSBmcm9tICRmaWxlIik7CisJcmV0dXJuOworICAgICAgfQorICAgICAgJGZoLT5jbG9zZTsKKyAgICAgICRmaWxlID0gJG5ld2ZpbGVuYW1lOworICAgIH0gZWxzZSB7CisgICAgICBOZXRTTk1QOjpDZXJ0Ojp2d2FybigiTFdQOjpVc2VyQWdlbnQgbm90IGluc3RhbGxlZDogdW5hYmxlIHRvIGltcG9ydCBjZXJ0aWZpY2F0ZSIpOworICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorCisgICRmaWxlID0gTmV0U05NUDo6Q2VydDo6ZnFfcmVsX3BhdGgoJGZpbGUsICRyZGlyKTsKKyAgZGllKCJmaWxlIHVucmVhZGFibGU6ICRmaWxlXG4iKSB1bmxlc3MgLXIgJGZpbGU7CisKKworICBpZiAoISAkdGFyZykgeworICAgICR0YXJnID0gKE5ldFNOTVA6OkNlcnQ6OmlzX2NhX2NlcnQoJGZpbGUpID8gJE5ldFNOTVA6OkNlcnQ6OkNBRElSIDogJE5ldFNOTVA6OkNlcnQ6OkNSVERJUik7CisgIH0KKworICAkdGFyZyAuPSAiLyIgLiAkdGFnIC4gJHN1ZmZpeCBpZiAoJHRhZyk7CisgIDo6Y29weSgkZmlsZSwgJHRhcmcpOworfQorCisKK3N1YiBpbXBvcnQgeworICBteSAkYXBwID0gc2hpZnQ7CisgIG15ICRjb25maWcgPSAkYXBwLT57J2NvbmZpZyd9OworICBteSAkb3B0cyA9ICRhcHAtPnsnT1BUUyd9OworICBteSAkY2FyZyA9IHNoaWZ0KEB7JG9wdHMtPnsnY21kYXJncyd9fSk7CisgIG15ICRrYXJnID0gc2hpZnQoQHskb3B0cy0+eydjbWRhcmdzJ319KTsKKyAgbXkgJHRhcmc7CisKKyAgaWYgKG5vdCBkZWZpbmVkICRjYXJnKSB7CisgICAgTmV0U05NUDo6Q2VydDo6dndhcm4oImltcG9ydDogbm8gY2VydGlmaWNhdGUgc3VwcGxpZWRcbiIsICRvcHRzKTsKKyAgICBOZXRTTk1QOjpDZXJ0Ojp1c2FnZSgxKTsKKyAgfQorCisgIGltcG9ydF9maWxlKCRjYXJnLCAnLmNydCcsICcnLCwKKwkgICAgICAkb3B0cy0+eydyZGlyJ30sICRvcHRzLT57J3RhZyd9KTsKKworICByZXR1cm4gdW5sZXNzIGRlZmluZWQgJGthcmc7CisKKyAgaW1wb3J0X2ZpbGUoJGthcmcsICcua2V5JywgJ3ByaXZhdGUnLCwKKwkgICAgICAkb3B0cy0+eydyZGlyJ30sICRvcHRzLT57J3RhZyd9KTsKK30KKworCitwYWNrYWdlIE5ldFNOTVA6OkNlcnQ6OkNvbmZpZzsKK3VzZSB2YXJzIHF3KEBJU0EpOworQElTQSA9IHF3KE5ldFNOTVA6OkNlcnQ6Ok9iaik7CisKK3N1YiBuZXcgeworICBteSAkY2xhc3MgPSBzaGlmdDsKKyAgbXkgJHBhcmVudCA9IHNoaWZ0OworICBteSAkdGhpcyA9ICRjbGFzcy0+U1VQRVI6Om5ldygnY29uZmlnJywgJHBhcmVudCk7CisKKyAgYmxlc3MoJHRoaXMsICRjbGFzcyk7Cit9CisKK3N1YiBwYXJzZSB7CisgIG15ICRjb25maWcgPSBzaGlmdDsKKyAgbXkgJGFwcCA9ICRjb25maWctPnsnQVBQJ307CisgIG15ICRvcHRzID0gJGFwcC0+eydPUFRTJ307CisgIG15ICRjZmdmaWxlID0gc2hpZnQ7CisgICRjZmdmaWxlIHx8PSAkb3B0cy0+eydjZmdmaWxlJ307CisKKyAgcmV0dXJuICcwIGJ1dCB0cnVlJyBpZiAkY29uZmlnLT57J1BBUlNFRCd9OworICByZXR1cm4gJzAgYnV0IHRydWUnIHVubGVzcyBkZWZpbmVkICRjZmdmaWxlOworCisgIG9wZW4oIENPTkZJRywgIjwkY2ZnZmlsZSIgKQorICAgIG9yIGRpZSAiZXJyb3IgLSBjb3VsZCBub3Qgb3BlbiBjb25maWd1cmF0aW9uIGZpbGU6ICRjZmdmaWxlIjsKKworICB3aGlsZSAoPENPTkZJRz4pIHsKKyAgICBuZXh0IGlmIC9eXHMqIy8gb3IgL15ccyokLzsKKworICAgIGlmICgvXlxzKihcdyspKD86XCgoW1wpXChcZFwsXC5dKylcKSk/XHMqPVxzKnsvKSB7CisgICAgICBteSAkb2JqID0gJDE7CisKKyAgICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgib2JqZWN0OiAkb2JqICgkMikgPSB7XG4iLCAkb3B0cyk7CisgICAgICBkaWUgImVycm9yIC0gaWRlbnRpdHk6IGluZGljZXMgbm90IHN1cHBvcnRlZDogJDIiIGlmIGRlZmluZWQgJDI7CisKKyAgICAgICMgRm91bmQgYW4gb2JqZWN0LgorICAgICAgaWYgKCAkb2JqIGVxICdpZGVudGl0eScgKSB7CisJbXkgJGlkZW50aXR5ID0gTmV0U05NUDo6Q2VydDo6SWRlbnRpdHk6OnBhcnNlKCpDT05GSUcsICRjb25maWcpOworCW15ICRpZCA9ICRpZGVudGl0eS0+eydpZCd9OworCWRpZSAiZXJyb3IgLSBpZGVudGl0eTogJ2lkJyBub3QgZGVmaW5lZCIgdW5sZXNzIGRlZmluZWQgJGlkOworCWRpZSAiZXJyb3IgLSBpZGVudGl0eTogZHVwbGljYXRlICckaWQnIiBpZiBleGlzdHMgJGNvbmZpZy0+eyRvYmp9eyRpZH07CisJJGNvbmZpZy0+eyRvYmp9eyRpZH0gPSAkaWRlbnRpdHk7CisgICAgICB9IGVsc2UgeworICAgICAgICBkaWUgImVycm9yIC0gdW5yZWNvZ25pemVkIG9iamVjdCAoJDEpIGF0IHNjb3BlIChjb25maWcpIjsKKyAgICAgIH0KKyAgICB9IGVsc2lmICgvXlxzKihcdyspXHMqPT9ccyooLio/KVxzKiQvKSB7CisgICAgICBteSAka2V5ID0gJDE7CisgICAgICBteSAkdmFsID0gJDI7CisKKyAgICAgICR2YWwgPSAkY29uZmlnLT5yZXNvbHZlKCR2YWwpIGlmICR2YWwgPX4gL1wkXHcrfFwmXHsuKj9cfS87CisgICAgICAjIEZvdW5kIGEgc3ltYm9sLgorICAgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCIgICRrZXkgPSAkdmFsXG4iLCAkb3B0cyk7CisgICAgICBpZiAoJGtleSBlcSAnc3ViamVjdEFsdE5hbWUnIG9yICRrZXkgZXEgJ3NhbicpIHsKKwlwdXNoKEB7JGNvbmZpZy0+eyRrZXl9fSwgJHZhbCk7CisgICAgICB9IGVsc2lmICggZGVmaW5lZCAkY29uZmlnLT57JGtleX0gKSB7CisgICAgICAgIGRpZSAiZXJyb3IgLSBkdXBsaWNhdGUgc3ltYm9sICRrZXkiOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgJGNvbmZpZy0+eyRrZXl9ID0gKGRlZmluZWQgJHZhbCA/IE5ldFNOTVA6OkNlcnQ6Om1hcF9ib29sKCR2YWwpIDogMSApOworICAgICAgfQorICAgIH0gZWxzaWYgKC9eXHMqZW52XHMqKFx3Kz1cUyspXHMqJC8pIHsKKyAgICAgICMgRm91bmQgYW4gZW52aXJvbm1lbnQgdmFyaWFibGUuCisgICAgICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoIiQmXG4iLCAkb3B0cyk7CisgICAgICBwdXNoKEB7JGNvbmZpZy0+eydlbnYnfX0sICQxKTsKKyAgICB9IGVsc2UgeworICAgICAgZGllKCJlcnJvciBpbiBjb25maWcgZmlsZSBbJGNmZ2ZpbGU6bGluZSAkLl0iKTsKKyAgICB9CisgIH0KKworICBOZXRTTk1QOjpDZXJ0OjpkcHJpbnQoImVuZCBwYXJzZSBjb25maWdcbiIsICRvcHRzKTsKKyAgY2xvc2UoQ09ORklHKTsKKworICAjIGF1Z21lbnQgd2l0aCBhbnkgY29uZmlnIGRpcmVjdGl2ZXMgc3VwcGxpZWQgaW4gb3B0cworICBmb3JlYWNoIG15ICRjZmcgKEB7JG9wdHMtPnsnY29uZmlnJ319KSB7CisgICAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJhdWdtZW50aW5nIGNvbmZpZzogJGNmZ1xuIiwgJG9wdHMpOworCisgICAgJGNvbmZpZy0+YXV0b1NldCgkMSwgKGRlZmluZWQoJDIpID8gJDIgOiAxICkpCisgICAgICBpZiAkY2ZnID1+IC9eXHMqKFx3Kylccyo9P1xzKiguKj8pXHMqJC87CisgIH0KKyAgJGNvbmZpZy0+YXV0b1NldCgnUEFSU0VEJywgMSk7CisgIHJldHVybiAkY29uZmlnLT57J1BBUlNFRCd9OworfQorCitwYWNrYWdlIE5ldFNOTVA6OkNlcnQ6OklkZW50aXR5OwordXNlIHZhcnMgcXcoQElTQSk7CitASVNBID0gcXcoTmV0U05NUDo6Q2VydDo6T2JqKTsKKworc3ViIG5ldyB7CisgIG15ICRjbGFzcyA9IHNoaWZ0OworICBteSAkdGhpcyA9IHNoaWZ0IHx8ICRjbGFzcy0+U1VQRVI6Om5ldygnaWRlbnRpdHknLCBAXyk7CisgIG15ICRpbmQgPSAkdGhpcy0+eydJTkRFWCd9IHx8IDE7CisKKyAgJHRoaXMtPmF1dG9TZXQoJ25hbWUnLCAiJHRoaXMtPnt0eXBlfS4kaW5kIikgdW5sZXNzIGV4aXN0cyAkdGhpcy0+eyduYW1lJ307CisKKyAgJHRoaXMtPmF1dG9TZXQoJ0xPRycsJycpIHVubGVzcyBleGlzdHMgJHRoaXMtPnsnTE9HJ307CisgICR0aGlzLT5hdXRvU2V0KCdUVFlfTE9HJywnJykgdW5sZXNzIGV4aXN0cyAkdGhpcy0+e1RUWV9MT0d9OworCisgIGJsZXNzKCR0aGlzLCAkY2xhc3MpOworfQorCisKK3N1YiBwYXJzZSB7CisgIG15ICRGSUxFID0gc2hpZnQ7CisgIG15ICRwYXJlbnQgPSBzaGlmdDsKKyAgbXkgJG9wdHMgPSAkcGFyZW50LT5pbmhlcml0KCdPUFRTJyk7CisgIG15ICRpZGVudGl0eSA9IG5ldyBOZXRTTk1QOjpDZXJ0OjpPYmooJ2lkZW50aXR5JywgJHBhcmVudCk7CisKKyAgTmV0U05NUDo6Q2VydDo6ZHByaW50KCJwYXJzZSBpZGVudGl0eVxuIiwgJG9wdHMpOworCisgIHdoaWxlICg8JEZJTEU+KSB7CisgICAgbmV4dCBpZiAvXlxzKiMvIG9yIC9eXHMqJC87CisKKyAgICBpZiAoL15ccyooXHcrKVxzKj1ccyp7LykgeworICAgICAgIyBGb3VuZCBhbiBvYmplY3QuCisgICAgICBkaWUgImVycm9yIC0gY2FuJ3QgaGF2ZSBuZXN0ZWQgJDEiOworICAgIH0gZWxzaWYgKC9eXHMqKFx3Kylccyo9P1xzKiguKj8pXHMqJC8pIHsKKyAgICAgIG15ICRrZXkgPSAkMTsKKyAgICAgIG15ICR2YWwgPSAkMjsKKworICAgICAgIyBGb3VuZCBhIHN5bWJvbC4KKyAgICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiICAka2V5ID0gJHZhbFxuIiwgJG9wdHMpOworCisgICAgICAkdmFsID0gJGlkZW50aXR5LT5yZXNvbHZlKCR2YWwpIGlmICR2YWwgPX4gL1wkXHcrfFwmXHsuKj9cfS87CisKKyAgICAgIGlmICggJGtleSBlcSAnc3ViamVjdEFsdE5hbWUnIG9yICRrZXkgZXEgJ3NhbicpIHsKKwlwdXNoKEB7JGlkZW50aXR5LT57JGtleX19LCAkdmFsKTsKKyAgICAgIH0gZWxzaWYgKCBkZWZpbmVkICRpZGVudGl0eS0+eyRrZXl9ICkgeworICAgICAgICBkaWUgImVycm9yIC0gZHVwbGljYXRlIHN5bWJvbCAka2V5IjsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICRpZGVudGl0eS0+eyRrZXl9ID0gKGRlZmluZWQgJHZhbCA/IE5ldFNOTVA6OkNlcnQ6Om1hcF9ib29sKCR2YWwpIDogMSApOworICAgICAgfQorICAgIH0gZWxzaWYgKC9ccypcfVxzKlw7LykgeworICAgICAgIyBFbmQgb2YgZGVmaW5pdGlvbi4KKyAgICAgIE5ldFNOTVA6OkNlcnQ6OmRwcmludCgiZW5kIHBhcnNlIGlkZW50aXR5XG4iLCAkb3B0cyk7CisgICAgICByZXR1cm4gbmV3IE5ldFNOTVA6OkNlcnQ6OklkZW50aXR5KCRpZGVudGl0eSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGRpZSgiZXJyb3IgaW4gY29uZmlnIGZpbGUgWyRvcHRzLT57Y2ZnZmlsZX06bGluZSAkLl0iKTsKKyAgICB9CisgIH0KKyAgZGllICJlcnJvciAtIHVuZXhwZWN0ZWQgZW5kIG9mIGNvbmYgZmlsZSI7Cit9CisKK3BhY2thZ2UgbWFpbjsKKworbXkgJGFwcCA9IG5ldyBOZXRTTk1QOjpDZXJ0OjpBcHAoKTsKKyRhcHAtPmluaXQoQEFSR1YpOworJGFwcC0+cnVuKCk7CisKK19fRU5EX18KKz1wb2QKKworPWhlYWQxICAgTkFNRQorCituZXQtc25tcC1jZXJ0IC0gTmV0LVNOTVAgQ2VydGlmaWNhdGUgTWFuYWdlbWVudCBUb29sCisKKz1oZWFkMSAgIFNZTk9QU0lTCisKKz1vdmVyCisKKz1pdGVtICQgbmV0LXNubXAtY2VydCBnZW5jYSAtSSAtLWNuIGNhLU5ldC1TTk1QCisKKz1pdGVtICQgbmV0LXNubXAtY2VydCBnZW5jZXJ0IC1JIC10IHNubXBhcHAgLS13aXRoLWNhIGNhLU5ldC1TTk1QCisKKz1pdGVtICQgbmV0LXNubXAtY2VydCBnZW5jZXJ0IC1JIC10IHNubXBkIC0tY24gbmV0LXNubXAub3JnCisKKz1pdGVtICQgbmV0LXNubXAtY2VydCBzaG93Y2FzCisKKz1pdGVtICQgbmV0LXNubXAtY2VydCBzaG93Y2VydHMKKworPWJhY2sKKworPWhlYWQxICAgREVTQ1JJUFRJT04KKworbmV0LXNubXAtY2VydCBjcmVhdGVzLCBzaWducywgaW5zdGFsbHMgYW5kIGRpc3BsYXlzIFguNTA5CitjZXJ0aWZpY2F0ZXMgdXNlZCBpbiB0aGUgb3BlcmF0aW9uIG9mIE5ldC1TTk1QLyhEKVRMUy4KKworPWhlYWQxICAgU1lOVEFYCisKKz1vdmVyCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgWy0taGVscHwtP10KKworPWl0ZW0gbmV0LXNubXAtY2VydCBbLS12ZXJzaW9ufC1WXQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNhICAgIFs8ZmxhZ3M+XSBbPGRuLW9wdHM+XSBbLS13aXRoLWNhIDxjYT5dCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY2VydCAgWzxmbGFncz5dIFs8ZG4tb3B0cz5dIFstLXdpdGgtY2EgPGNhPl0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBnZW5jc3IgICBbPGZsYWdzPl0gWzxkbi1vcHRzPl0gWy0tZnJvbS1jcnQgPGNydD5dCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgc2lnbmNzciAgWzxmbGFncz5dIFstLWluc3RhbGxdIC0tY3NyIDxjc3I+IC0td2l0aC1jYSA8Y2E+CisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgc2hvd2NhICAgWzxmbGFncz5dIFs8Zm9ybWF0LW9wdHM+XSBbPGZpbGU+fDxzZWFyY2gtdGFnPl0KKworPWl0ZW0gbmV0LXNubXAtY2VydCBzaG93Y2VydCBbPGZsYWdzPl0gWzxmb3JtYXQtb3B0cz5dIFs8ZmlsZT58PHNlYXJjaC10YWc+XQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGltcG9ydCAgIFs8ZmxhZ3M+XSA8ZmlsZXx1cmw+IFs8a2V5Pl0KKworPWJhY2sKKworPWhlYWQxICAgQ09NTUFORFMKKworPW92ZXIKKworPWl0ZW0gZ2VuY2EKKworZ2VuZXJhdGUgYSBzaWduZWQgQ0EgY2VydGlmaWNhdGUgc3VpdGFibGUgZm9yIHNpZ25pbmcgb3RoZXIKK2NlcnRpZmljYXRlcy4gZGVmYXVsdDogc2VsZi1zaWduZWQgdW5sZXNzIC0td2l0aC1jYSA8Y2E+IHN1cHBsaWVkCisKKz1pdGVtIGdlbmNlcnQKKworZ2VuZXJhdGUgYSBzaWduZWQgY2VydGlmaWNhdGUgc3VpdGFibGUgZm9yIGlkZW50aWZpY2F0aW9uLCBvcgordmFsaWRhdGlvbi4gZGVmYXVsdDogc2VsZi1zaWduZWQgdW5sZXNzIC0td2l0aC1jYSA8Y2E+IHN1cHBsaWVkCisKKz1pdGVtIGdlbmNzcgorCitnZW5lcmF0ZSBhIGNlcnRpZmljYXRlIHNpZ25pbmcgcmVxdWVzdC4gd2lsbCBjcmVhdGUgYSBuZXcKK2tleSBhbmQgY2VydGlmaWNhdGUgdW5sZXNzIC0tZnJvbS1jcnQgPGNydD4gc3VwcGxpZWQKKworPWl0ZW0gc2lnbmNzcgorCitzaWduIGEgY2VydGlmaWNhdGUgc2lnbmluZyByZXF1ZXN0IHNwZWNpZmllZCBieSAtLWNzciA8Y3NyPgord2l0aCB0aGUgQ0EgY2VydGlmaWNhdGUgc3BlY2lmaWVkIGJ5IC0td2l0aC1jYSA8Y2E+CisKKz1pdGVtIGltcG9ydAorCitpbXBvcnQgYW4gaWRlbnRpdHkgb3IgQ0EgY2VydGlmaWNhdGUsIG9wdGlvbmFsbHkgaW1wb3J0IDxrZXk+CitpZiBhbiBVUkwgaXMgcGFzc2VkLCB3aWxsIGF0dGVtcHQgdG8gaW1wb3J0IGNlcnRpZmljYXRlIGZyb20gc2l0ZQorCis9aXRlbSBzaG93Y2EsIHNob3djZXJ0CisKK3Nob3cgQ0Egb3IgaWRlbnRpdHkgY2VydGlmaWNhdGUocykuIG1heSBwYXNzIGZ1bGx5IHF1YWxpZmllZAorZmlsZSBvciBkaXJlY3RvcnkgbmFtZSwgb3IgYSBzZWFyY2gtdGFnIHdoaWNoIHByZWZpeCBtYXRjaGVzCitpbnN0YWxsZWQgQ0Egb3IgaWRlbnRpdHkgY2VydGlmaWNhdGUgZmlsZSBuYW1lKHMpCitzZWUgRk9STUFUIE9QVElPTlMgdG8gc3BlY2lmeSBvdXRwdXQgZm9ybWF0CisKKworPWJhY2sKKworPWhlYWQxICAgRkxBR1MKKworPW92ZXIKKworPWl0ZW0gLT8sIC0taGVscCAgICAgICAgICAgIC0tIHNob3cgdGhpcyB0ZXh0IGFuZCBleGl0CisKKz1pdGVtIC1WLCAtLXZlcnNpb24gICAgICAgICAtLSBzaG93IHZlcnNpb24gc3RyaW5nIGFuZCBleGl0CisKKz1pdGVtIC1ELCAtLWRlYnVnICAgICAgICAgICAtLSByYWlzZSBkZWJ1ZyBsZXZlbCAoLUQgLUQgZm9yIGhpZ2hlciBsZXZlbCkKKworPWl0ZW0gLUYsIC0tZm9yY2UgICAgICAgICAgIC0tIGZvcmNlIG92ZXJ3cml0ZSBvZiBleGlzdGluZyBvdXRwdXQgZmlsZXMKKworPWl0ZW0gLUksIC0tbm9pbnRlcmFjdGl2ZSAgIC0tIG5vbi1pbnRlcmFjdGl2ZSBydW4gKGRlZmF1bHQgaW50ZXJhY3RpdmUpCisKKz1pdGVtIC1RLCAtLW5vdmVyYm9zZSAgICAgICAtLSBub24tdmVyYm9zZSBvdXRwdXQgKGRlZmF1bHQgdmVyYm9zZSkKKworPWl0ZW0gLUMsIC0tY2ZnZGlyICAgPGRpcj4gIC0tIGNvbmZpZ3VyYXRpb24gZGlyIChzZWUgbWFuKDUpIHNubXBfY29uZmlnKQorCis9aXRlbSAtVCwgLS10bHNkaXIgICA8ZGlyPiAgLS0gcm9vdCBmb3IgY2VydCBzdG9yYWdlIChkZWZhdWx0IDxjZmdkaXI+L3RscykKKworPWl0ZW0gLWYsIC0tY2ZnZmlsZSAgPGZpbGU+IC0tIGNvbmZpZyAoZGVmYXVsdCA8Y2ZnZGlyPi9uZXQtc25tcC1jZXJ0LmNvbmYpCisKKz1pdGVtIC1pLCAtLWlkZW50aXR5IDxpZD4gICAtLSBpZGVudGl0eSB0byB1c2UgZnJvbSBjb25maWcKKworPWl0ZW0gLXQsIC0tdGFnICAgICAgPHRhZz4gIC0tIGFwcGxpY2F0aW9uIHRhZyAoZGVmYXVsdCAnc25tcCcpCisKKz1pdGVtIC0tPGNmZy1wYXJhbT5bPTx2YWw+XSAtLSBhZGRpdGlvbmFsIGNvbmZpZyBwYXJhbXMKKworPWJhY2sKKworPWhlYWQxICAgQ0VSVElGSUNBVEUgT1BUSU9OUyAoPGNlcnQtb3B0cz4pCisKKz1vdmVyCisKKz1pdGVtIC1hLCAtLXdpdGgtY2EgPGNhPiAgICAtLSBDQSBjZXJ0aWZpY2F0ZSB1c2VkIHRvIHNpZ24gcmVxdWVzdAorCis9aXRlbSAtQSwgLS1jYSA8Y2E+ICAgICAgICAgLS0gZXhwbGljaXQgb3V0cHV0IENBIGNlcnRpZmljYXRlCisKKz1pdGVtIC1yLCAtLWNzciA8Y3NyPiAgICAgICAtLSBjZXJ0aWZpY2F0ZSBzaWduaW5nIHJlcXVlc3QKKworPWl0ZW0gLXgsIC0tZnJvbS1jcnQgPGNydD4gIC0tIGlucHV0IGNlcnRpZmljYXRlIGZvciBjdXJyZW50IG9wZXJhdGlvbgorCis9aXRlbSAtWCwgLS1jcnQgPGNydD4gICAgICAgLS0gZXhwbGljaXQgb3V0cHV0IGNlcnRpZmljYXRlCisKKz1pdGVtIC15LCAtLWluc3RhbGwgICAgICAgICAtLSBpbnN0YWxsIHJlc3VsdCBpbiBsb2NhbCByZXBvc2l0b3J5CisKKz1iYWNrCisKKz1oZWFkMSAgIERJU1RJTkdVSVNIRUQgTkFNRSBPUFRJT05TICg8ZG4tb3B0cz4pCisKKz1vdmVyCisKKz1pdGVtIC1lLCAtLWVtYWlsIDxlbWFpbD4gICAgICAgLS0gZW1haWwgbmFtZQorCis9aXRlbSAtaCwgLS1ob3N0IDxob3N0PiAgICAgICAgIC0tIEROUyBob3N0IG5hbWUsIG9yIElQIGFkZHJlc3MKKworPWl0ZW0gLWQsIC0tZGF5cyA8ZGF5cz4gICAgICAgICAtLSBudW1iZXIgb2YgZGF5cyBjZXJ0aWZpY2F0ZSBpcyB2YWxpZAorCis9aXRlbSAtbiwgLS1jbiA8Y24+ICAgICAgICAgICAgIC0tIGNvbW1vbiBuYW1lIChDTikKKworPWl0ZW0gLW8sIC0tb3JnIDxvcmc+ICAgICAgICAgICAtLSBvcmdhbml6dGlvbiBuYW1lCisKKz1pdGVtIC11LCAtLXVuaXQgPHVuaXQ+ICAgICAgICAgLS0gb3JnYW5penRpb24gdW5pdCBuYW1lCisKKz1pdGVtIC1jLCAtLWNvdW50cnkgPGNvdW50cnk+ICAgLS0gY291bnRyeSBjb2RlIChlLmcuLCBVUykKKworPWl0ZW0gLXAsIC0tcHJvdmluY2UgPHByb3ZpbmNlPiAtLSBwcm92aW5jZSBuYW1lIChzeW5vbXlub3VzIHcvIHN0YXRlKQorCis9aXRlbSAtcCwgLS1zdGF0ZSA8c3RhdGU+ICAgICAgIC0tIHN0YXRlIG5hbWUgKHN5bm9teW5vdXMgdy8gcHJvdmluY2UpCisKKz1pdGVtIC1sLCAtLWxvY2FsaXR5IDxsb2NhbGl0eT4gLS0gbG9jYWxpdHkgbmFtZSAoZS5nLCB0b3duKQorCis9aXRlbSAtcywgLS1zYW4gPHNhbj4gICAgICAgICAgIC0tIHN1YmplY3RBbHROYW1lLCByZXBlYXQgZm9yIGVhY2ggPHNhbj4KKworPW92ZXIgMgorCis9aXRlbSAgICA8c2FuPiB2YWx1ZSBmb3JtYXQgKDxGTVQ+OjxWQUw+KToKKworPW92ZXIgMworCis9aXRlbSAgICAgICBkaXJOYW1lOi91c3Ivc2hhcmUvc25tcC90bHMKKworPWl0ZW0gICAgICAgRE5TOm5ldC1zbm1wLm9yZworCis9aXRlbSAgICAgICBlbWFpbDphZG1pbkBuZXQtc25tcC5vcmcKKworPWl0ZW0gICAgICAgSVA6MTkyLjE2OC4xLjEKKworPWl0ZW0gICAgICAgUklEOjEuMS4zLjYKKworPWl0ZW0gICAgICAgVVJJOmh0dHA6Ly9uZXQtc25tcC5vcmcKKworPWJhY2sKKworPWJhY2sKKworPWJhY2sKKworPWhlYWQxICAgRk9STUFUIE9QVElPTlMgKDxmb3JtYXQtb3B0cz4pCisKKz1vdmVyCisKKz1pdGVtIC0tYnJpZWYgICAgICAgIC0tIG1pbmltaXplZCBvdXRwdXQgKHZhbHVlcyBvbmx5IHdoZXJlIGFwcGxpY2FibGUpCisKKz1pdGVtIC0tdGV4dCAgICAgICAgIC0tIGZ1bGwgdGV4dCBkZXNjcmlwdGlvbgorCis9aXRlbSAtLXN1YmplY3QgICAgICAtLSBzdWJqZWN0IGRlc2NyaXB0aW9uCisKKz1pdGVtIC0tc3ViamVjdF9oYXNoIC0tIGhhc2ggb2Ygc3ViamVjdCBmb3IgaW5kZXhpbmcKKworPWl0ZW0gLS1pc3N1ZXIgICAgICAgLS0gaXNzdWVyIGRlc2NyaXB0aW9uCisKKz1pdGVtIC0taXNzdWVyX2hhc2ggIC0tIGhhc2ggb2YgaXNzdWVyIGZvciBpbmRleGluZworCis9aXRlbSAtLWZpbmdlcnByaW50ICAtLSBTSEExIGRpZ2VzdCBvZiBERVIKKworPWl0ZW0gLS1zZXJpYWwgICAgICAgLS0gc2VyaWFsIG51bWJlcgorCis9aXRlbSAtLW1vZHVsdXMgICAgICAtLSBtb2R1bHVzIG9mIHRoZSBwdWJsaWMga2V5CisKKz1pdGVtIC0tZGF0ZXMgICAgICAgIC0tIHN0YXJ0IGFuZCBlbmQgZGF0ZXMKKworPWl0ZW0gLS1wdXJwb3NlICAgICAgLS0gZGlzcGxheXMgYWxsb3dlZCB1c2VzCisKKz1pdGVtIC0tQyAgICAgICAgICAgIC0tIEMgY29kZSBkZXNjcmlwdGlvbgorCis9YmFjaworCis9aGVhZDEgICBPUEVSQVRJT05BTCBOT1RFUworCisKKz1oZWFkMiAgIEludGVyYWN0aXZlIE1vZGUKKworVGhlIGFwcGxpY2F0aW9uIG9wZXJhdGVzIGluIGludGVyYWN0aXZlIG1vZGUgYnkgZGVmYXVsdC4gSW4gdGhpcyBtb2RlCitiYXNpYyBvcGVyYXRpb25zIG9mIG9mZmVyZWQgYW5kIHJlcXVpcmVkIGlucHV0IGlzIHF1ZXJpZWQgdGhyb3VnaCB0aGUKK2NvbW1hbmQgbGluZS4gCisKK1R5cGljYWwgPHRhYj4gY29tcGxldGlvbiBpcyBwcm92aWRlZCB3aGVuIHBvc3NpYmxlIGFuZCBmaWVsZCBzcGVjaWZpYworaGVscCBtYXkgYmUgb2J0YWluZWQgYnkgZW50ZXJpbmcgJz8nLgorCitUbyB0dXJuIG9mZiBpbnRlcmFjdGl2ZSBtb2RlLCBzdXBwbHkgJy0tbm9pbnRlcmFjdGl2ZScgb3IgJy1JJyBvbiB0aGUKK2luaXRpYWwgY29tbWFuZCBsaW5lLiBFcXVpdmFsYW50bHksICdpbnRlcmFjdGl2ZSA9IGZhbHNlJyBtYXliZSBwbGFjZWQKK2luIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgKHNlZSBiZWxvdykuCisKKz1oZWFkMiAgIENvbmZpZ3VyYXRpb24KKworQSBjb25maWd1cmF0aW9uIGZpbGUgbWF5IGJlIHN1cHBsaWVkIG9uIHRoZSBjb21tYW5kIGxpbmUgb3IgZm91bmQgaW4gYQorZGVmYXVsdCBsb2NhdGlvbiAoPHNubXBjb25mcGF0aD4vbmV0LXNubXAtY2VydC5jb25mKS4gVGhpcyBmaWxlIG1heQorY29udGFpbiBjb25maWd1cmF0aW9uIHBhcmFtZXRlcnMgZXF1aXZhbGVudCB0byB0aG9zZSBzdXBwbGllZCBvbiB0aGUKK2NvbW1hbmQgbGluZSBhbmQgZWZmZWN0aXZlbHkgcHJvdmlkZXMgZGVmYXVsdCB2YWx1ZXMgZm9yIHRoZXNlCit2YWx1ZXMuIElmIGEgY29tbWFuZCBsaW5lIHBhcmFtZXRlciBpcyBzdXBwbGllZCBpdCB3aWxsIG92ZXJyaWRlIHRoZQordmFsdWUgaW4gdGhlIGNvbmZpZyBmaWxlLiBJZiBuZWl0aGVyIGlzIHByZXNlbnQgdGhlbiBhbiBhcHBsaWNhdGlvbgordmFsdWUgd2lsbCBiZSB1c2VkLgorCis9aGVhZDIgICBDZXJ0aWZpY2F0ZSBOYW1pbmcKKworRmlsZW5hbWVzIG9mIGNyZWF0ZWQgY2VydGlmaWNhdGVzLCBhcyBzdG9yZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24KK2RpcmVjdG9yeSwgYXJlIGNob3NlbiBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gSWYgYW5kIGFwcGxpY2F0aW9uIHRhZworaXMgc3VwcGxpZWQsIGl0IHdpbGwgYmUgdXNlZCBhcyB0aGUgYmFzZW5hbWUgZm9yIHRoZSBjZXJ0aWZpY2F0ZSBhbmQKK2tleSBnZW5lcmF0ZWQuIE90aGVyd2lzZSwgZm9yIENBIGNlcnRpZmljYXRlcywgdGhlIGJhc2VuYW1lIHdpbGwgYmUKK2Rlcml2ZWQgZnJvbSB0aGUgQ29tbW9uIE5hbWUuIEZvciBub24tQ0EgY2VydGlmaWNhdGVzIHRoZSBhcHBsaWNhdGlvbgordGFnIGRlZmF1bHRzIHRvICdzbm1wJyB3aGljaCB3aWxsIHRoZW4gYmUgdXNlZCBhcyB0aGUgYmFzZW5hbWUgb2YgdGhlCitjZXJ0aWZpY2F0ZSBhbmQga2V5LgorCis9aGVhZDEgICBFWEFNUExFUworCis9b3ZlcgorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnIC0tZGF5cyAxMDAwCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgZ2VuY2EgLWYgLnNubXAvbmV0LXNubXAtY2VydC5jb25mIC1pIG5vY2FkbQorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNlcnQgLXQgc25tcGQgLS1jbiBob3N0Lm5ldC1zbm1wLm9yZworCis9aXRlbSBuZXQtc25tcC1jZXJ0IGdlbmNzciAtdCBzbm1wYXBwCisKKz1pdGVtIG5ldC1zbm1wLWNlcnQgc2lnbmNzciAtLWNzciBzbm1wYXBwIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcKKworPWl0ZW0gbmV0LXNubXAtY2VydCBzaG93Y2VydHMgLS1zdWJqZWN0IC0taXNzdWVyIC0tZGF0ZXMgc25tcGFwcAorCis9aXRlbSBuZXQtc25tcC1jZXJ0IHNob3djYXMgLS1maW5nZXJwcmludCBjYS1uZXQtc25tcC5vcmcgLS1icmllZgorCis9aXRlbSBuZXQtc25tcC1jZXJ0IGltcG9ydCBjYS10aGlyZC1wYXJ0eS5jcnQKKworPWl0ZW0gbmV0LXNubXAtY2VydCBpbXBvcnQgc2lnbmVkLXJlcXVlc3QuY3J0IHNpZ25lZC1yZXF1ZXN0LmtleQorCis9YmFjaworCis9aGVhZDEgQ09QWVJJR0hUCisKK0NvcHlyaWdodCAoYykgMjAxMCBDb2JoYW0gQW5hbHl0aWMgU29sdXRpb25zIC0gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvcHlyaWdodCAoYykgMjAxMCBHLiBTLiBNYXJ6b3QgLSAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworPWhlYWQxICAgQVVUSE9SCisKK0cuIFMuIE1hcnpvdCAobWFyekB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQpCisKKz1jdXQKKwpkaWZmIC0tZ2l0IGEvbG9jYWwvbmV0LXNubXAtY2VydC5jb25mIGIvbG9jYWwvbmV0LXNubXAtY2VydC5jb25mCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkZWYxY2MKLS0tIC9kZXYvbnVsbAorKysgYi9sb2NhbC9uZXQtc25tcC1jZXJ0LmNvbmYKQEAgLTAsMCArMSw3MiBAQAorIworIyBOZXQtU05NUCBDZXJ0aWZpY2F0ZSBHZW5lcmF0aW9uIGFuZCBNYW5hZ2VtZW50IFRvb2wgQ29uZmlndXJhdGlvbgorIworCisjIGRlZmF1bHQgbW9kZSB0byBub24taW50ZXJhY3RpdmUKKyMgaW50ZXJhY3RpdmUgPSBmYWxzZQorCisjIGxvY2F0aW9uIG9mICd0bHMnIGRpcmVjdG9yeSByZWxhdGl2ZSB0byBjb25maWd1cmF0aW9uIGRpcgorIyB0bHNEaXIgPSAuL3RscworCisjIGVuY3J5cHRDQSA9IGZhbHNlIC0gWFhYIG5vdC1pbXBsZW1lbnRlZAorIyBlbmNyeXB0Q3J0ID0gZmFsc2UgLSBYWFggbm90LWltcGxlbWVudGVkCisKKyMgZGVmYXVsdCB2YWxpZCBsaWZldGltZSBkdXJhdGlvbiBmb3IgQ0EgY2VydGlmaWNhdGVzCisjIGNhRGF5cyA9IDE4MjUKKworIyBkZWZhdWx0IHZhbGlkIGxpZmV0aW1lIGR1cmF0aW9uIGZvciBjZXJ0aWZpY2F0ZXMKKyMgY3J0RGF5cyA9IDM2NQorCisjIGRlZmF1bHQga2V5IHR5cGVzIGdlbmVyYXRlZAorIyBrZXlUeXBlID0gcnNhCisKKyMgZGVmYXVsdCBrZXkgc2l6ZSBnZW5lcmF0ZWQKKyMga2V5U2l6ZSA9IDIwNDgKKworIyBkZWZhdWx0IHR5cGUgb2YgbWVzc2FnZSBkaWdlc3QgdXNlZAorIyBtc2dEaWdlc3QgPSBzaGExCisKKyMgdG8gc2V0IGluZGl2aWR1YWwgZGVmYXVsdHMsIGEgc3BlY2lmaWMgaWRlbnRpdHkgbWF5IGJlIGluZGljYXRlZAorIyBvbiB0aGUgbmV0LXNubXAtY2VydCBjb21tYW5kIGxpbmU6ICctLWlkZW50aXR5IDxpZD4nIG9yICctaSA8aWQ+JworIyB2YWx1ZXMgZGVmaW5lZCBhdCB0aGUgZ2xvYmFsL2ZpbGUgbGV2ZWwgd2lsbCBiZSB1c2VkIHVubGVzcworIyBvdmVycmlkZW4gYnkgdmFsdWVzIHN1cHBsaWVkIGluIHRoZSBzcGVjaWZpZWQgaWRlbnRpdHkuCisgCitpZGVudGl0eSA9IHsKKyAgIGlkID0gbm9jYWRtCisgICBob3N0ID0gbmV0LXNubXAub3JnCisgICBjbiA9IENsaWVudC1pZGVudGl0eQorICAgZW1haWwgPSBhZG1pbkBuZXQtc25tcC5vcmcKKyAgIG9yZyA9IE5ldC1TTk1QIERldmVsb3BlcnMKKyAgIG9yZ1VuaXQgPSBTTk1QLURUTFMKKyAgIGNvdW50cnkgPSBVUworICAgc3RhdGUgPSBNQQorICAgbG9jYWxpdHkgPSBCb3N0b24KKworICAgIyAxMCB5ZWFycworICAgY2FEYXlzID0gMzY1NAorICAgIyAyIHllYXJzCisgICBjcnREYXlzID0gNzMwCisKKyAgIHN1YmplY3RBbHROYW1lID0gZW1haWw6Y2xpZW50QG5ldC1zbm1wLm9yZworICAgc3ViamVjdEFsdE5hbWUgPSBVUkk6aHR0cDovL25ldC1zbm1wLm9yZworfTsKKworaWRlbnRpdHkgPSB7CisgICBpZCA9IENBLWlkZW50aXR5CisgICBob3N0ID0gbmV0LXNubXAub3JnCisgICBjbiA9IENBLWlkZW50aXR5CisgICBlbWFpbCA9IGNhLWFkbWluQG5ldC1zbm1wLm9yZworICAgb3JnID0gTmV0LVNOTVAgRGV2ZWxvcGVycworICAgb3JnVW5pdCA9IFNOTVAtRFRMUworICAgY291bnRyeSA9IFVTCisgICBzdGF0ZSA9IE1BCisgICBsb2NhbGl0eSA9IEJvc3RvbgorCisgICAjIDEwIHllYXJzCisgICBjYURheXMgPSAxMDAwCisgICAjIDIgeWVhcnMKKyAgIGNydERheXMgPSA1MDAKKworICAgc3ViamVjdEFsdE5hbWUgPSBETlM6dGVzdC5uZXQtc25tcC5vcmcKK307CisKZGlmZiAtLWdpdCBhL2xvY2FsL3NubXAtYnJpZGdlLW1pYiBiL2xvY2FsL3NubXAtYnJpZGdlLW1pYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODBlYTZiCi0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvc25tcC1icmlkZ2UtbWliCkBAIC0wLDAgKzEsMTE3MCBAQAorIyEvdXNyL2Jpbi9wZXJsCisjCisjIENvcHlyaWdodCAoYykgSUJNIENvcnAuIDIwMDksIDIwMTAsIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKyMKKyMgQXV0aG9yKHMpOglWYXNpbGVpb3MgUGFwcGFzIDx2cGFwcGFzQHVzLmlibS5jb20+CisjCQlKZW5zIE9zdGVya2FtcCA8amVuc0BsaW51eC52bmV0LmlibS5jb20+CisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCisjIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorIyBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KKyMKKyMgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyMgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisjIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorIyBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisjIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisjIEZST00sCisjIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyMgVEhFIFNPRlRXQVJFLgorCit1c2UgTmV0U05NUDo6T0lEICgnOmFsbCcpOwordXNlIE5ldFNOTVA6OkFTTiAoJzphbGwnKTsKK3VzZSBOZXRTTk1QOjphZ2VudCAoJzphbGwnKTsKKworc3ViIFNUUF9QUk9QX1ZBTFVFKCkgeyAweDAxfQorc3ViIFNUUF9QUk9QX0ZJTEUoKSB7IDB4MDJ9CitzdWIgU1RQX1BST1BfREVDKCkgeyAweDA0fQorc3ViIFNUUF9QUk9QX0hFWCgpIHsgMHgwOH0KKworc3ViIEZEQl9TVEFUVVNfT1RIRVIgeyAxIH0KK3N1YiBGREJfU1RBVFVTX0lOVkFMSUQgeyAyIH0KK3N1YiBGREJfU1RBVFVTX0xFQVJORUQgeyAzIH0KK3N1YiBGREJfU1RBVFVTX1NFTEYgeyA0IH0KK3N1YiBGREJfU1RBVFVTX01HTVQgeyA1IH0KKworbXkgJW9pZF92YWx1ZTsKK215ICVvaWRfdHlwZTsKK215ICVvaWRfbmV4dDsKK215ICglaW5kZXhlcywgJWludGVyZmFjZXMsICVtYWNzLCAlYWdlcywgJWxvY2FscywgJXZsYW5zLCAldGFnZ2VkKTsKK215ICRvaWQ7CisKKyRzdWJhZ2VudD0wOworbXkgJG5ldGRpcj0iL3N5cy9jbGFzcy9uZXQvIjsKK215ICR0YXJnZXRicmlkZ2U7CisKKyRjYWNoZV90aW1vdXQ9NjA7CiskbGFzdF9wb3B1bGF0ZWQ9MDsKKworbXkgJHJlZ29pZCA9ICIuMS4zLjYuMS4yLjEuMTciOworIyBhcmUgd2UgcnVubmluZyBlbWJlZGRlZCA/IElmIG5vdCwgcmVnaXN0ZXIgYXMgc3ViYWdlbnQKK2lmICghJGFnZW50KSB7CisgICAgJGFnZW50ID0gbmV3IE5ldFNOTVA6OmFnZW50KCdOYW1lJyA9PiAnZG90MXFicmlkZ2UnLAorCQkJCSdBZ2VudFgnID0+IDEpOworICAgICRzdWJhZ2VudCA9IDE7CisgICAgaWYgKCAkI0FSR1YgIT0gMCkgeworCXVzYWdlKCQwKTsKKwlleGl0KCk7CisgICAgfQorICAgICR0YXJnZXRicmlkZ2UgPSAkQVJHVlswXTsKK30gZWxzZSB7CisgICAgaWYgKCFkZWZpbmVkKCRicmlkZ2UpKSB7CisJdXNhZ2UoJDApOworCWV4aXQoKTsKKyAgICB9CisgICAgJHRhcmdldGJyaWRnZSA9ICRicmlkZ2U7Cit9CisKKyRhZ2VudC0+cmVnaXN0ZXIoImRvdDFxYnJpZGdlIiwgIi4xLjMuNi4xLjIuMS4xNyIsIFwmcmVxdWVzdF9oYW5kbGVyKSBvciBkaWUgInJlZ2lzdHJhdGlvbiBvZiBoYW5kbGVyIGZhaWxlZCAhXG4iOworCitpZiAoJHN1YmFnZW50KSB7CisJIyByZWdpc3RlciBoYW5kbGVyIGZvciBncmFjZWZ1bCBzaHV0ZG93bgorCSRTSUd7J0lOVCd9ID0gXCZzaHV0ZG93bjsKKwkkU0lHeydRVUlUJ30gPSBcJnNodXRkb3duOworCSRydW5uaW5nID0gMTsKKworCXdoaWxlKCRydW5uaW5nKSB7CisJCSRhZ2VudC0+YWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoMSk7CisJfQorCisJJGFnZW50LT5zaHV0ZG93bigpOworfQorCitzdWIgdXNhZ2UgeworCW15ICRuYW1lID0gc2hpZnQ7CisJaWYgKCRzdWJhZ2VudCkgeworCQlwcmludCAkbmFtZS4iXG5cbiI7CisJCXByaW50ICJ1c2FnZTogXHQkbmFtZSA8YnJpZGdlPglzdGFydCBzbm1wIGJyaWRnZSBtb2R1bGUiLgorCQkJIiBmb3IgYnJpZGdlIDxicmlkZ2U+XG5cbiI7CisJCXByaW50ICJhcmd1bWVudHM6CWJyaWRnZQkJbmFtZSBvZiB0aGUgTGludXggYnJpZGdlIi4KKwkJCSIgd2hpY2ggeW91IHdhbnQgdG8gcHJvdmlkZSBpbmZvIHZpYSBzbm1wIGZvci5cblxuIjsKKwl9IGVsc2UgeworCQlwcmludCAndXNhZ2UgaW4gc25tcGQuY29uZjogcGVybCAkYnJpZGdlPSJicjAiOyBwZXJsIGRvIDxwYXRoIHRvICRuYW1lPlxuJzsKKwl9CisJcHJpbnQgIm51bWJlciBvZiBhcmd1bWVudHMgZ2l2ZW4gJCNBUkdWXG5cbiI7Cit9CisKK3N1YiByZXF1ZXN0X2hhbmRsZXIgeworCW15ICgkaGFuZGxlciwgJHJlZ2lzdHJhdGlvbl9pbmZvLCAkcmVxdWVzdF9pbmZvLCAkcmVxdWVzdHMpPUBfOworCW15ICRyZXF1ZXN0OworCisJcG9wdWxhdGVfbWliKCR0YXJnZXRicmlkZ2UpOworCisJZm9yKCRyZXF1ZXN0ID0gJHJlcXVlc3RzOyAkcmVxdWVzdDsgJHJlcXVlc3QgPSAkcmVxdWVzdC0+bmV4dCgpKSB7CisJCWlmKCRyZXF1ZXN0X2luZm8tPmdldE1vZGUoKSA9PSBNT0RFX0dFVCkgeworCQkJbW9kZV9nZXQoJHJlcXVlc3QpOworCQl9IGVsc2lmKCRyZXF1ZXN0X2luZm8tPmdldE1vZGUoKSA9PSBNT0RFX0dFVE5FWFQpIHsKKwkJCW1vZGVfZ2V0X25leHQoJHJlcXVlc3QpOworCQl9IGVsc2UgeworCQkJcHJpbnQgU1RERVJSICJtb2RlIG5vdCBpbXBsZW1lbnRlZC5cbiI7CisJCX0KKwl9Cit9CisKK3N1YiBtb2RlX2dldHsKKwlteSAoJHJlcXVlc3QpPUBfOworCW15ICRvaWQ9JHJlcXVlc3QtPmdldE9JRCgpOworCisJJFNOTVA6OnVzZV9udW1lcmljID0gMTsKKwlteSAkbm9pZD1TTk1QOjp0cmFuc2xhdGVPYmooJG9pZCk7CisKKwlyZXBseSgkcmVxdWVzdCwgJG5vaWQpIGlmIChleGlzdHMgJG9pZF92YWx1ZXskbm9pZH0pOworfQorCitzdWIgZmluZF9uZXh0eworCW15ICgkbm9pZCkgPSBAXzsKKwlteSAkbmV4dG9pZCA9ICRvaWRfbmV4dHskbm9pZH07CisJaWYoIWRlZmluZWQoJG5leHRvaWQpIHx8ICFkZWZpbmVkKCRvaWRfdmFsdWV7JG5leHRvaWR9KSkgeworCQkjIGZpbmQgdGhlIGxvd2VzdCBPSUQgd2hpcyBpcyBoaWdoZXIgdGhhbiAkbm9pZAorCQkkcHJldiA9ICIuMS4zLjYuMS4yLjEuMTgiOworCQkkcHJldl9vaWQgPSBuZXcgTmV0U05NUDo6T0lEKCRwcmV2KTsKKwkJJG5vaWRfb2lkID0gbmV3IE5ldFNOTVA6Ok9JRCgkbm9pZCk7CisJCSNwcmludCAibG9va2luZyBmb3IgbmV4dCBvZiAkbm9pZFxuIjsKKwkJZm9yIG15ICRjYW5kaWRhdGUgKGtleXMgJW9pZF92YWx1ZSkgeworCQkJI3ByaW50ICJldmFsdWF0aW5nICRjYW5kaWRhdGVcbiI7CisJCQkkY2FuZGlkYXRlX29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoJGNhbmRpZGF0ZSk7CisJCQlpZiAoJG5vaWRfb2lkIDwgJGNhbmRpZGF0ZV9vaWQgJiYgJHByZXZfb2lkID4gJGNhbmRpZGF0ZV9vaWQpIHsKKwkJCQkjcHJpbnQgImZvdW5kIGNhbmRpZGF0ZSAkY2FuZGlkYXRlXG4iOworCQkJCSRwcmV2ID0gJGNhbmRpZGF0ZTsKKwkJCQkkcHJldl9vaWQgPSAkY2FuZGlkYXRlX29pZDsKKwkJCX0KKwkJfQorCQlpZiAoJHByZXYgZXEgIi4xLjMuNi4xLjIuMS4xOCIpIHsKKwkJCXJldHVybjsgIyBubyBPSUQgaGlnaGVyIHRoYW4gJG5vaWQgZm91bmQKKwkJfQorCQkkbmV4dG9pZCA9ICRwcmV2OworCX0KKwlyZXR1cm4gJG5leHRvaWQ7Cit9CisKK3N1YiBtb2RlX2dldF9uZXh0eworCW15ICgkcmVxdWVzdCk9QF87CisJbXkgJG9pZD0kcmVxdWVzdC0+Z2V0T0lEKCk7CisJJFNOTVA6OnVzZV9udW1lcmljID0gMTsKKwlteSAkbm9pZD1TTk1QOjp0cmFuc2xhdGVPYmooJG9pZCk7CisJbXkgJG5leHRvaWQgPSBmaW5kX25leHQoJG5vaWQpOworCSNwcmludCAiZm91bmQgJG5leHRvaWRcbiI7CisJaWYoZGVmaW5lZCgkbmV4dG9pZCkpIHsKKwkJbXkgJHR5cGUgPSAkb2lkX3R5cGV7JG5leHRvaWR9OworCQlteSAkdmFsdWUgPSAkb2lkX3ZhbHVleyRuZXh0b2lkfTsKKwkJaWYgKGRlZmluZWQoJHR5cGUpIGFuZCBkZWZpbmVkKCR2YWx1ZSkpIHsKKwkJCXJlcGx5KCRyZXF1ZXN0LAkkbmV4dG9pZCk7CisJCX0KKwl9Cit9CisKK3N1YiByZXBseXsKKwlteSAoJHJlcXVlc3QsICRvaWQpPUBfOworCisJbXkgJHR5cGU9JG9pZF90eXBleyRvaWR9OworCW15ICR2YWx1ZT0kb2lkX3ZhbHVleyRvaWR9OworCisJJHJlcXVlc3QtPnNldE9JRChuZXcgTmV0U05NUDo6T0lEKCRvaWQpKTsKKwkkcmVxdWVzdC0+c2V0VmFsdWUoJHR5cGUsICR2YWx1ZSk7Cit9CisKKyMgUG9wdWxhdGVkIE1JQiBPSUQKKyMKKyMjIGRvdDFkQmFzZVBvcnQ6CTEuMy42LjEuMi4xLjE3LjEuNC4xLjEuPGRvdDFkQmFzZVBvcnQ+CisjCQkJSU5URUdFUjMyCisjCisjIGRvdDFkQmFzZVBvcnRJZkluZGV4OgkxLjMuNi4xLjIuMS4xNy4xLjQuMS4yLjxkb3QxZEJhc2VQb3J0PgorIwkJCUlOVEVHRVIzMgorIworIyBkb3QxZFN0cCo6CQkxLjMuNi4xLjIuMS4xNy4yLjwxLTE0PgorIwkJCUlOVEVHRVIsIE9DVEVUIFNUUklORworIworIyBkb3QxZFRwRmRiQWRkcmVzczoJMS4zLjYuMS4yLjEuMTcuNC4zLjEuMS48ZG90MWRUcEZkYkFkZHJlc3M+CisjCQkJT0NURVQgU1RSSU5HIChTSVpFICg2KSkKKyMKKyMgZG90MWRUcEZkYlBvcnQ6CTEuMy42LjEuMi4xLjE3LjQuMy4xLjIuPGRvdDFkVHBGZGJBZGRyZXNzPgorIwkJCUlOVEVHRVIzMgorIworIyBkb3QxZFRwRmRiU3RhdHVzOgkxLjMuNi4xLjIuMS4xNy40LjMuMS4zLjxkb3QxZFRwRmRiQWRkcmVzcz4KKyMJCQlJTlRFR0VSCisjCQkJMSA6IG90aGVyCisjCQkJMiA6IGludmFsaWQKKyMJCQkzIDogbGVhcm5lZAorIwkJCTQgOiBzZWxmCisjCQkJNSA6IG1nbXQKKyMKKworc3ViIHBvcHVsYXRlX21pYiB7CisJbXkgJG5vdzsKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgJHNlY29uZHNfcGFzc2VkOworCSRwb3J0cz0wOworCSRvaWQ9IiI7CisKKyAgICAgICAgJG5vdz10aW1lKCk7CisJJHNlY29uZHNfcGFzc2VkPSRub3ctJGxhc3RfcG9wdWxhdGVkOworICAgICAgICByZXR1cm4gaWYoJHNlY29uZHNfcGFzc2VkIDw9ICRjYWNoZV90aW1vdXQpOworICAgICAgICAkbGFzdF9wb3B1bGF0ZWQ9JG5vdzsKKworCSVvaWRfdmFsdWU9KCk7CisJJW9pZF90eXBlPSgpOworCSVvaWRfbmV4dD0oKTsKKwklaW5kZXhlcz0oKTsKKwklaW50ZXJmYWNlcz0oKTsKKwklbWFjcz0oKTsKKwklYWdlcz0oKTsKKwklbG9jYWxzPSgpOworCSV2bGFucz0oKTsKKwkldGFnZ2VkPSgpOworCisJIyBmaXJzdCBwb3B1bGF0ZWQgb2lkCisJJG9pZF9uZXh0eyIuMS4zLjYuMS4yLjEuMTcifT0iLjEuMy42LjEuMi4xLjE3LjEuMSI7CisKKwljcmVhdGViYXNlaW5mbygkYnJpZGdlKTsKKworCXJlYWRpbmRleGVzKCRicmlkZ2UpOworCXJlYWRmb3J3YXJkcygkYnJpZGdlKTsKKwlyZWFkdmxhbnMoJGJyaWRnZSk7CisKKwljcmVhdGVwb3J0cygkYnJpZGdlKTsKKworCXN0cHByb3BlcnRpZXMoJGJyaWRnZSk7CisKKwlzdHBwb3J0cHJvcGVydGllcygkYnJpZGdlKTsKKworCWRvdDFkVHBwcm9wZXJ0aWVzKCk7CisKKwlteSAkcHJldm9pZCA9ICRvaWQ7CisJbXkgJGN1cnJvaWQgPSBjcmVhdGVtYWNzKCRicmlkZ2UpOworCSRvaWRfbmV4dHskcHJldm9pZH0gPSAkY3Vycm9pZDsKKworCXBvcnRwcm9wZXJ0aWVzKCRicmlkZ2UpOworCisKKwlkb3QxcWJhc2UoJGJyaWRnZSk7CisKKwlkb3QxcWZkYigkYnJpZGdlKTsKKworCWRvdDFxY3VycmVudHZsYW5zKCRicmlkZ2UpOworCisJcmV0dXJuIDA7Cit9CisKK3N1YiBmaW5kYnJpZGdlcygpCit7CisJbXkgQGJyaWRnZXM7CisKKwlvcGVuZGlyKERJUiwgJG5ldGRpcikgb3IgZGllICJ1bmFibGUgdG8gb3BlbiAkbmV0ZGlyICFcbiI7CisKKwl3aGlsZShteSAkYnI9cmVhZGRpcihESVIpKXsKKwkJbmV4dCBpZiAkYnIgZXEgIi4iOworCQluZXh0IGlmICRiciBlcSAiLi4iOworCQluZXh0IHVubGVzcyAtZCAkbmV0ZGlyLiRici4iL2JyaWRnZSI7CisJCXB1c2ggQGJyaWRnZXMsICRicjsKKwl9CisKKwljbG9zZShESVIpOworCisJcmV0dXJuIEBicmlkZ2VzOworfQorCitzdWIgY3JlYXRlYmFzZWluZm8oKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKworCSRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy4xLjEiOworCSRvaWRfdmFsdWV7JG9pZH09bWFjMmhleChyZWFkZmlsZSgkbmV0ZGlyLiRicmlkZ2UuIi9hZGRyZXNzIiwgMCkpOworCSRvaWRfdHlwZXskb2lkfT1BU05fT0NURVRfU1RSOworCSRvaWRfbmV4dHskb2lkfT0iLjEuMy42LjEuMi4xLjE3LjEuMiI7CisKKwlvcGVuZGlyKERJUiwgJG5ldGRpci4kYnJpZGdlLiIvYnJpZi8iKSBvciBkaWUgIkNvdWxkIG5vdCBvcGVuICIuJG5ldGRpci4kYnJpZGdlLiJicmlmICFcbiI7CisKKwlmb3JlYWNoICRlbnRyeSAocmVhZGRpcihESVIpKSB7CisJCW5leHQgaWYgJGVudHJ5IGVxICIuIjsKKwkJbmV4dCBpZiAkZW50cnkgZXEgIi4uIjsKKwkJIyBvbmx5IGNvdW50IG5vbi12bGFuIGludGVyZmFjZXMKKwkJbmV4dCBpZiAkZW50cnkgPX4gL1wuWzAtOV0qLzsKKwkJJHBvcnRzKys7CisJfQorCisJY2xvc2VkaXIoRElSKTsKKworCSRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy4xLjIiOworCSRvaWRfdmFsdWV7JG9pZH09JHBvcnRzOworCSRvaWRfdHlwZXskb2lkfT1BU05fSU5URUdFUjsKKwkkb2lkX25leHR7JG9pZH09Ii4xLjMuNi4xLjIuMS4xNy4xLjMiOworCisJJG9pZD0iLjEuMy42LjEuMi4xLjE3LjEuMyI7CisJJG9pZF92YWx1ZXskb2lkfT0iMiI7CSMgdHJhbnNwYXJlbnQgb25seQorCSRvaWRfdHlwZXskb2lkfT1BU05fSU5URUdFUjsKKwkkb2lkX25leHR7JG9pZH09Ii4xLjMuNi4xLjIuMS4xNy4xLjQuMS4xLjEiOworCit9CisKK3N1YiBjcmVhdGVtYWNzKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisgICAgICAgIG15ICRzdGFydF9vaWQgPSAkb2lkID0gIi4xLjMuNi4xLjIuMS4xNy40LjMuMSI7CisKKwlmb3JlYWNoIG15ICRtYWMgKHNvcnQgeyRhIGNtcCAkYn0ga2V5cyAlbWFjcykgeworCQlteSAkbWFjX29pZD1tYWMyb2lkKCRtYWMpOworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3RfbWFjX29pZCkpeworCQkJJGZpcnN0X21hY19vaWQ9JG1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjEifT0kb2lkLiIuMSIuJG1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMiIuJG1hY19vaWQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjMifT0kb2lkLiIuMyIuJG1hY19vaWQ7CisJCX0KKwkJbXkgJHBvcnQ9JG1hY3N7JG1hY317JGJyaWRnZX07CisJCW15ICRiYXNlcG9ydD0kYmFzZXBvcnRzeyRicmlkZ2V9eyRwb3J0fTsKKwkJbXkgJHN0YXR1cz0kbG9jYWxzeyRtYWN9eyRicmlkZ2V9OworCQlteSAkYWdlPSRhZ2VzeyRtYWN9eyRicmlkZ2V9OworCisJCSRvaWRfdmFsdWV7JG9pZC4iLjEiLiRtYWNfb2lkfT1tYWMyaGV4KCRtYWMpOworCQkkb2lkX3R5cGV7JG9pZC4iLjEiLiRtYWNfb2lkfT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcnZfbWFjX29pZCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIi4kcHJ2X21hY19vaWR9PQorCQkJCSRvaWQuIi4xIi4kbWFjX29pZDsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIiLiRtYWNfb2lkfT0kYmFzZXBvcnQ7CisJCSRvaWRfdHlwZXskb2lkLiIuMiIuJG1hY19vaWR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfbWFjX29pZCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIi4kcHJ2X21hY19vaWR9PQorCQkJCSRvaWQuIi4yIi4kbWFjX29pZDsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjMiLiRtYWNfb2lkfT0kc3RhdHVzOworCQkkb2lkX3R5cGV7JG9pZC4iLjMiLiRtYWNfb2lkfT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X21hY19vaWQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMyIuJHBydl9tYWNfb2lkfT0KKwkJCQkkb2lkLiIuMyIuJG1hY19vaWQ7CisJCX0KKworCQkkcHJ2X21hY19vaWQ9JG1hY19vaWQ7CisJfQorCisJaWYgKCRwcnZfbWFjX29pZCBhbmQgJGZpcnN0X21hY19vaWQpIHsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xIi4kcHJ2X21hY19vaWR9PSRvaWQuIi4yIi4kZmlyc3RfbWFjX29pZDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yIi4kcHJ2X21hY19vaWR9PSRvaWQuIi4zIi4kZmlyc3RfbWFjX29pZDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4zIi4kcHJ2X21hY19vaWR9PSIuMS4zLjYuMS4yLjEuMTcuNC40LjEuMS4xIjsKKwl9CisKKwl1bmRlZiAkcHJ2X21hY19vaWQ7CisJdW5kZWYgJGZpcnN0X21hY19vaWQ7CisKKwlyZXR1cm4gJHN0YXJ0X29pZC4iLjEiLiRmaXJzdF9tYWNfb2lkOworfQorCisjIFRPRE86IGlzIHRoaXMgc2VxdWVuY2UgY29tcGxldGUgPworc3ViIGNyZWF0ZXBvcnRzKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgKCRiYXNlcG9ydCwgJHByZXZfYmFzZXBvcnQsICRmaXJzdF9iYXNlcG9ydCk7CisJJGJhc2Vwb3J0PTE7CisJbXkgJG9pZD0gJy4xLjMuNi4xLjIuMS4xNy4xLjQuMSc7CisKKwlmb3JlYWNoIG15ICRwb3J0IChrZXlzICV7JGludGVyZmFjZXN7JGJyaWRnZX19KSB7CisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF9iYXNlcG9ydCkpeworCQkJJGZpcnN0X2Jhc2Vwb3J0PSRiYXNlcG9ydDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4xLiIuJGJhc2Vwb3J0OworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjIuIi4kYmFzZXBvcnQ7CisJCX0KKwkJbXkgJGluZGV4PSRpbmRleGVzeyRicmlkZ2V9eyRwb3J0fTsKKwkJJGJhc2Vwb3J0c3skYnJpZGdlfXskcG9ydH09JGJhc2Vwb3J0OworCisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuIi4kYmFzZXBvcnR9PSRiYXNlcG9ydDsKKwkJJG9pZF90eXBleyRvaWQuIi4xLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuIi4kcHJ2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMS4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuIi4kYmFzZXBvcnR9PSRpbmRleDsKKwkJJG9pZF90eXBleyRvaWQuIi4yLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJ2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuIi4kcHJ2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMi4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSRwcnZfYmFzZXBvcnQ9JGJhc2Vwb3J0OworCQkkYmFzZXBvcnQrKzsKKwl9CisKKwlpZiAoICRwcnZfYmFzZXBvcnQgYW5kICRmaXJzdF9iYXNlcG9ydCApIHsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xLiIuJHBydl9iYXNlcG9ydH09JG9pZC4iLjIuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMi4iLiRwcnZfYmFzZXBvcnR9PSIuMS4zLjYuMS4yLjEuMTcuMi4xIjsKKwl9CisKKwl1bmRlZiAkcHJ2X2Jhc2Vwb3J0OworCXVuZGVmICRmaXJzdF9iYXNlcG9ydDsKKworfQorCitzdWIgc3RwcHJvcGVydGllcygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICRkaXIgPSAkbmV0ZGlyLiRicmlkZ2UuIi9icmlkZ2UvIjsKKworCUBzdHBwcm9wcyA9ICggeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjEiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfVkFMVUUsCisJCQl2YWx1ZSA9PiAiMyIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMiIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4yIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJwcmlvcml0eSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMyIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4zIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJ0b3BvbG9neV9jaGFuZ2VfdGltZXIiLAorCQkJdHlwZSA9PiBBU05fVElNRVRJQ0tTLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNCIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi40IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJ0b3BvbG9neV9jaGFuZ2UiLAorCQkJdHlwZSA9PiBBU05fQ09VTlRFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjUiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuNSIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4icm9vdF9pZCIsCisJCQl0eXBlID0+IEFTTl9PQ1RFVF9TVFIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi42IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjYiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuInJvb3RfcGF0aF9jb3N0IiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi43IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjciLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuInJvb3RfcG9ydCIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuOCIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi44IiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJtYXhfYWdlIiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi45IiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjkiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuImhlbGxvX3RpbWUiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjExIiB9LAorCQkJIyBUT0RPIC4uLjE3LjIuMTAKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xMSIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4iZm9yd2FyZF9kZWxheSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTIiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTIiLAorCQkJZmxhZ3MgPT4gU1RQX1BST1BfRklMRSB8IFNUUF9QUk9QX0RFQywKKwkJCXZhbHVlID0+ICRkaXIuIm1heF9hZ2UiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjEzIiB9LAorCQkJeyBvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy4yLjEzIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX0ZJTEUgfCBTVFBfUFJPUF9ERUMsCisJCQl2YWx1ZSA9PiAkZGlyLiJoZWxsb190aW1lIiwKKwkJCXR5cGUgPT4gQVNOX0lOVEVHRVIsCisJCQluZXh0b2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xNCIgfSwKKwkJCXsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuMi4xNCIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9GSUxFIHwgU1RQX1BST1BfREVDLAorCQkJdmFsdWUgPT4gJGRpci4iZm9yd2FyZF9kZWxheSIsCisJCQl0eXBlID0+IEFTTl9JTlRFR0VSLAorCQkJbmV4dG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjIuMTUuMS4xLjEiIH0sCisJCQkpOworCisJZm9yICgkaT0wOyAkaSA8PSAkI3N0cHByb3BzOyAkaSsrKSB7CisJCW15ICVwcm9wcyA9ICV7JHN0cHByb3BzWyRpXX07CisJCSRvaWQgPSAkcHJvcHN7J29pZCd9OworCQlpZiAoICRwcm9wc3snZmxhZ3MnfSAmIFNUUF9QUk9QX1ZBTFVFLCkgeworCQkJJG9pZF92YWx1ZXskb2lkfSA9ICRwcm9wc3sndmFsdWUnfTsKKwkJfQorCQlpZiAoICRwcm9wc3snZmxhZ3MnfSAmIFNUUF9QUk9QX0ZJTEUsKSB7CisJCQkkb2lkX3ZhbHVleyRvaWR9ID0KKwkJCXJlYWRmaWxlKCRwcm9wc3sndmFsdWUnfSwKKwkJCSRwcm9wc3snZmxhZ3MnfSk7CisJCX0KKwkJJG9pZF90eXBleyRvaWR9ID0gJHByb3Bzeyd0eXBlJ307CisJCSRvaWRfbmV4dHskb2lkfSA9ICRwcm9wc3snbmV4dG9pZCd9OworCX0KK30KKworc3ViIHN0cHBvcnRwcm9wZXJ0aWVzCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICRicmlmZGlyID0gJG5ldGRpci4kYnJpZGdlLiIvYnJpZi8iOworCW15ICgkYmFzZXBvcnQsICRmaXJzdF9iYXNlcG9ydCwgJHByZXZfYmFzZXBvcnQpOworCisJJG9pZD0nLjEuMy42LjEuMi4xLjE3LjIuMTUuMSc7CisKKwlmb3JlYWNoIG15ICRwb3J0IChrZXlzICV7JGludGVyZmFjZXN7JGJyaWRnZX19KSB7CisJCSRiYXNlcG9ydCA9ICRiYXNlcG9ydHN7JGJyaWRnZX17JHBvcnR9OworCisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF9iYXNlcG9ydCkpeworCQkJJGZpcnN0X2Jhc2Vwb3J0PSRiYXNlcG9ydDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4xLiIuJGJhc2Vwb3J0OworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjIuIi4kYmFzZXBvcnQ7CisJCX0KKworCQlteSAkaW50ZXJmYWNlID0gJGludGVyZmFjZXN7JGJyaWRnZX17JHBvcnR9OworCQlteSAkaWZkaXIgPSAkYnJpZmRpci4kaW50ZXJmYWNlOworCisJCSMgZG90MWRTdHBQb3J0CisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuIi4kYmFzZXBvcnR9PSRiYXNlcG9ydDsKKwkJJG9pZF90eXBleyRvaWQuIi4xLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4xLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnRQcmlvcml0eQorCQkkb2lkX3ZhbHVleyRvaWQuIi4yLiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9wcmlvcml0eSIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjIuIi4kYmFzZXBvcnR9PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjIuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydFN0YXRlCisJCW15IEB0cmFuc2xhdGlvbiA9ICgxLCAzLCA0LCA1LCAyKTsKKwkJbXkgJHN0YXRlID0gcmVhZGZpbGUoJGlmZGlyLiIvc3RhdGUiLCAwKTsKKwkJJG9pZF92YWx1ZXskb2lkLiIuMy4iLiRiYXNlcG9ydH09JHRyYW5zbGF0aW9uWyRzdGF0ZV07CisJCSRvaWRfdHlwZXskb2lkLiIuMy4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMy4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMy4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0RW5hYmxlCisJCUB0cmFuc2xhdGlvbiA9ICgyLCAxLCAxLCAxLCAxKTsKKwkJJG9pZF92YWx1ZXskb2lkLiIuNC4iLiRiYXNlcG9ydH09JHRyYW5zbGF0aW9uWyRzdGF0ZV07CisJCSRvaWRfdHlwZXskb2lkLiIuNC4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNC4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuNC4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0UGF0aENvc3QKKwkJJG9pZF92YWx1ZXskb2lkLiIuNS4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvcGF0aF9jb3N0IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuNS4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNS4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuNS4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3QKKwkJJG9pZF92YWx1ZXskb2lkLiIuNi4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvZGVzaWduYXRlZF9yb290IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuNi4iLiRiYXNlcG9ydH09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi42LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi42LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdAorCQkkb2lkX3ZhbHVleyRvaWQuIi43LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9kZXNpZ25hdGVkX2Nvc3QiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi43LiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi43LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi43LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlCisJCSRvaWRfdmFsdWV7JG9pZC4iLjguIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL2Rlc2lnbmF0ZWRfYnJpZGdlIiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuOC4iLiRiYXNlcG9ydH09QVNOX09DVEVUX1NUUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi44LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi44LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydAorCQkkb2lkX3ZhbHVleyRvaWQuIi45LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9kZXNpZ25hdGVkX3BvcnQiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi45LiIuJGJhc2Vwb3J0fT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcmV2X2Jhc2Vwb3J0KSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjkuIi4kcHJldl9iYXNlcG9ydH09CisJCQkJJG9pZC4iLjkuIi4kYmFzZXBvcnQ7CisJCX0KKworCQkjIGRvdDFkU3RwUG9ydEZvcndhcmRUcmFuc2l0aW9ucyAobm8gdmFsdWUgaW4gYnJpZGdlIG1vZHVsZSkKKworCQkjIGRvdDFkU3RwUG9ydFBhdGhDb3N0MzIKKwkJJG9pZF92YWx1ZXskb2lkLiIuMTEuIi4kYmFzZXBvcnR9PXJlYWRmaWxlKCRpZmRpci4iL3BhdGhfY29zdCIsIDApOworCQkkb2lkX3R5cGV7JG9pZC4iLjExLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xMS4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMTEuIi4kYmFzZXBvcnQ7CisJCX0KKworCisJCSRwcmV2X2Jhc2Vwb3J0PSRiYXNlcG9ydDsKKwl9CisKKwlpZiAoICRwcmV2X2Jhc2Vwb3J0IGFuZCAkZmlyc3RfYmFzZXBvcnQgKSB7CisJCSRvaWRfbmV4dHskb2lkLiIuMS4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuMi4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi4zLiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjMuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjQuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuNC4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuNS4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi41LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi42LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjYuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjcuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuNy4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuOC4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi44LiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi45LiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjkuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjExLiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjExLiIuJHByZXZfYmFzZXBvcnR9PSIuMS4zLjYuMS4yLjEuMTcuNC4xIjsKKwl9CisKKwkkb2lkID0gJG9pZC4iLjExLiIuJHByZXZfYmFzZXBvcnQ7CisKKwl1bmRlZiAkcHJldl9iYXNlcG9ydDsKKwl1bmRlZiAkZmlyc3RfYmFzZXBvcnQ7CisKK30KKworc3ViIGRvdDFkVHBwcm9wZXJ0aWVzKCkKK3sKKwlAc3RwcHJvcHMgPSAoIHsgb2lkID0+ICIuMS4zLjYuMS4yLjEuMTcuNC4xIiwKKwkJCWZsYWdzID0+IFNUUF9QUk9QX1ZBTFVFLAorCQkJdmFsdWUgPT4gIjAiLAorCQkJdHlwZSA9PiBBU05fQ09VTlRFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy40LjIiIH0sCisJCQl7IG9pZCA9PiAiLjEuMy42LjEuMi4xLjE3LjQuMiIsCisJCQlmbGFncyA9PiBTVFBfUFJPUF9WQUxVRSwKKwkJCXZhbHVlID0+ICIzMDAiLAorCQkJdHlwZSA9PiBBU05fSU5URUdFUiwKKwkJCW5leHRvaWQgPT4gIi4xLjMuNi4xLjIuMS4xNy40LjMiIH0sCisJCQkpOworCisJZm9yICgkaT0wOyAkaSA8PSAkI3N0cHByb3BzOyAkaSsrKSB7CisJCW15ICVwcm9wcyA9ICV7JHN0cHByb3BzWyRpXX07CisJCSRvaWQgPSAkcHJvcHN7J29pZCd9OworCQlpZiAoICRwcm9wc3snZmxhZ3MnfSAmIFNUUF9QUk9QX1ZBTFVFLCkgeworCQkJJG9pZF92YWx1ZXskb2lkfSA9ICRwcm9wc3sndmFsdWUnfTsKKwkJfQorCQlpZiAoICRwcm9wc3snZmxhZ3MnfSAmIFNUUF9QUk9QX0ZJTEUsKSB7CisJCQkkb2lkX3ZhbHVleyRvaWR9ID0KKwkJCXJlYWRmaWxlKCRwcm9wc3sndmFsdWUnfSwKKwkJCSRwcm9wc3snZmxhZ3MnfSk7CisJCX0KKwkJJG9pZF90eXBleyRvaWR9ID0gJHByb3Bzeyd0eXBlJ307CisJCSRvaWRfbmV4dHskb2lkfSA9ICRwcm9wc3snbmV4dG9pZCd9OworCX0KK30KKworc3ViIHBvcnRwcm9wZXJ0aWVzCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCW15ICgkYmFzZXBvcnQsICRmaXJzdF9iYXNlcG9ydCwgJHByZXZfYmFzZXBvcnQpOworCisJJG9pZD0nLjEuMy42LjEuMi4xLjE3LjQuNC4xJzsKKworCWZvcmVhY2ggbXkgJHBvcnQgKGtleXMgJXskaW50ZXJmYWNlc3skYnJpZGdlfX0pIHsKKwkJJGJhc2Vwb3J0ID0gJGJhc2Vwb3J0c3skYnJpZGdlfXskcG9ydH07CisKKwkJdW5sZXNzKGRlZmluZWQoJGZpcnN0X2Jhc2Vwb3J0KSl7CisJCQkkZmlyc3RfYmFzZXBvcnQ9JGJhc2Vwb3J0OworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjEuIi4kYmFzZXBvcnQ7CisJCQkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMi4iLiRiYXNlcG9ydDsKKwkJfQorCisJCW15ICRpbnRlcmZhY2UgPSAkaW50ZXJmYWNlc3skYnJpZGdlfXskcG9ydH07CisJCW15ICRpZmRpciA9ICRuZXRkaXIuJGludGVyZmFjZTsKKworCQkjIGRvdDFkVHBQb3J0CisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuIi4kYmFzZXBvcnR9PSRiYXNlcG9ydDsKKwkJJG9pZF90eXBleyRvaWQuIi4xLiIuJGJhc2Vwb3J0fT1BU05fSU5URUdFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4xLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFRwUG9ydE1heEluZm8KKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvbXR1IiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuMi4iLiRiYXNlcG9ydH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuMi4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSMgZG90MWRUcFBvcnRJbkZyYW1lcworCQkkb2lkX3ZhbHVleyRvaWQuIi4zLiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9zdGF0aXN0aWNzL3J4X3BhY2tldHMiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi4zLiIuJGJhc2Vwb3J0fT1BU05fQ09VTlRFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4zLiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi4zLiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFRwUG9ydE91dEZyYW1lcworCQkkb2lkX3ZhbHVleyRvaWQuIi40LiIuJGJhc2Vwb3J0fT1yZWFkZmlsZSgkaWZkaXIuIi9zdGF0aXN0aWNzL3R4X3BhY2tldHMiLCAwKTsKKwkJJG9pZF90eXBleyRvaWQuIi40LiIuJGJhc2Vwb3J0fT1BU05fQ09VTlRFUjsKKwkJaWYoZGVmaW5lZCgkcHJldl9iYXNlcG9ydCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi40LiIuJHByZXZfYmFzZXBvcnR9PQorCQkJCSRvaWQuIi40LiIuJGJhc2Vwb3J0OworCQl9CisKKwkJIyBkb3QxZFRwUG9ydEluRGlzY2FyZHMKKwkJJG9pZF92YWx1ZXskb2lkLiIuNS4iLiRiYXNlcG9ydH09cmVhZGZpbGUoJGlmZGlyLiIvc3RhdGlzdGljcy9yeF9kcm9wcGVkIiwgMCk7CisJCSRvaWRfdHlwZXskb2lkLiIuNS4iLiRiYXNlcG9ydH09QVNOX0NPVU5URVI7CisJCWlmKGRlZmluZWQoJHByZXZfYmFzZXBvcnQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuNS4iLiRwcmV2X2Jhc2Vwb3J0fT0KKwkJCQkkb2lkLiIuNS4iLiRiYXNlcG9ydDsKKwkJfQorCisJCSRwcmV2X2Jhc2Vwb3J0PSRiYXNlcG9ydDsKKwl9CisKKwlpZiAoICRwcmV2X2Jhc2Vwb3J0IGFuZCAkZmlyc3RfYmFzZXBvcnQgKSB7CisJCSRvaWRfbmV4dHskb2lkLiIuMS4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuMi4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLiIuJHByZXZfYmFzZXBvcnR9PSRvaWQuIi4zLiIuJGZpcnN0X2Jhc2Vwb3J0OworCQkkb2lkX25leHR7JG9pZC4iLjMuIi4kcHJldl9iYXNlcG9ydH09JG9pZC4iLjQuIi4kZmlyc3RfYmFzZXBvcnQ7CisJCSRvaWRfbmV4dHskb2lkLiIuNC4iLiRwcmV2X2Jhc2Vwb3J0fT0kb2lkLiIuNS4iLiRmaXJzdF9iYXNlcG9ydDsKKwkJJG9pZF9uZXh0eyRvaWQuIi41LiIuJHByZXZfYmFzZXBvcnR9PSIuMS4zLjYuMS4yLjEuMTcuNS4xIjsKKwl9CisKKwkkb2lkID0gJG9pZC4iLjUuIi4kcHJldl9iYXNlcG9ydDsKKworCXVuZGVmICRwcmV2X2Jhc2Vwb3J0OworCXVuZGVmICRmaXJzdF9iYXNlcG9ydDsKK30KKworc3ViIGRvdDFxYmFzZSgpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCisJbXkgJG9pZD0iLjEuMy42LjEuMi4xLjE3LjcuMS4xIjsKKwkkb2lkX25leHR7Ii4xLjMuNi4xLjIuMS4xNy43In09JG9pZC4iLjEiOworCSRvaWRfbmV4dHsiLjEuMy42LjEuMi4xLjE3LjcuMSJ9PSRvaWQuIi4xIjsKKworCSRvaWRfdmFsdWV7JG9pZC4iLjEifT0xOworCSRvaWRfdHlwZXskb2lkLiIuMSJ9PUFTTl9JTlRFR0VSOworCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4yIjsKKworCSRvaWRfdmFsdWV7JG9pZC4iLjIifT00MDk0OworCSRvaWRfdHlwZXskb2lkLiIuMiJ9PUFTTl9VTlNJR05FRDsKKwkkb2lkX25leHR7JG9pZC4iLjIifT0kb2lkLiIuMyI7CisKKwkkb2lkX3ZhbHVleyRvaWQuIi4zIn09NDA5NDsKKwkkb2lkX3R5cGV7JG9pZC4iLjMifT1BU05fVU5TSUdORUQ7CisJJG9pZF9uZXh0eyRvaWQuIi4zIn09JG9pZC4iLjQiOworCisJJG9pZF92YWx1ZXskb2lkLiIuNCJ9PTA7ICMgZmlsbGVkIGluIGJ5IGN1cnJlbnR2bGFucworCSRvaWRfdHlwZXskb2lkLiIuNCJ9PUFTTl9VTlNJR05FRDsKKwkkb2lkX25leHR7JG9pZC4iLjQifT0kb2lkLiIuNSI7CisKKwkkb2lkX3ZhbHVleyRvaWQuIi41In09MjsKKwkkb2lkX3R5cGV7JG9pZC4iLjUifT1BU05fSU5URUdFUjsKKwkkb2lkX25leHR7JG9pZC4iLjUifT0wOyAgIyBmaWxsZWQgaW4gYnkgZG90MXFmZGIKKworfQorCitzdWIgZG90MXFmZGIoKQoreworCW15ICRicmlkZ2UgPSBzaGlmdDsKKworCW15ICRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy43LjEuMiI7CisJZm9yZWFjaCBteSAkdmxhbiAoc29ydCB7JGE8PT4kYn0ga2V5cyAldmxhbnMpeworCQl1bmxlc3MoZGVmaW5lZCgkZmlyc3RfdmxhbikpeworCQkJJGZpcnN0X3ZsYW49JHZsYW47CisJCQkkb2lkX25leHR7Ii4xLjMuNi4xLjIuMS4xNy43LjEuMS41In09JG9pZC4iLjEuMS4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWR9PSRvaWQuIi4xLjEuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMSJ9PSRvaWQuIi4xLjEuIi4kdmxhbjsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4xIn09JG9pZC4iLjEuMS4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi4xLjIifT0kb2lkLiIuMS4yLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4xLjEuIi4kdmxhbn09JHZsYW47CisJCSRvaWRfdHlwZXskb2lkLiIuMS4xLiIuJHZsYW59PUFTTl9VTlNJR05FRDsKKwkJaWYoZGVmaW5lZCgkcHJ2X3ZsYW4pKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4xLiIuJHBydl92bGFufT0kb2lkLiIuMS4xLiIuJHZsYW47CisJCX0KKworCQkkb2lkX3ZhbHVleyRvaWQuIi4xLjIuIi4kdmxhbn09MDsgIyB0byBiZSBmaWxsZWQgbGF0ZXIKKwkJJG9pZF90eXBleyRvaWQuIi4xLjIuIi4kdmxhbn09QVNOX0NPVU5URVI7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuMi4iLiRwcnZfdmxhbn09JG9pZC4iLjEuMi4iLiR2bGFuOworCQl9CisKKwkJJHBydl92bGFuPSR2bGFuOworCX0KKwlpZigkcHJ2X3ZsYW4gYW5kICRmaXJzdF92bGFuKXsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xLjEuIi4kcHJ2X3ZsYW59PSRvaWQuIi4xLjIuIi4kZmlyc3RfdmxhbjsKKwkJJG9pZF9uZXh0eyRvaWQuIi4xLjIuIi4kcHJ2X3ZsYW59PTA7ICMgdG8gYmUgZmlsbGVkIGxhdGVyCisJfQorCisJbXkgJW1hY3ZsYW49KCk7CisJbXkgJXZsYW5tYWM9KCk7CisKKwlmb3JlYWNoIG15ICR2bGFuIChzb3J0IHskYTw9PiRifSBrZXlzICV2bGFucyl7CisJCW15ICRjb3VudD0wOworCQlmb3JlYWNoIG15ICRtYWMgKHNvcnQgeyRhIGNtcCAkYn0ga2V5cyAlbWFjcykgeworCQkJbXkgJHZicmlkZ2U9JGJyaWRnZS4iX3ZsYW4iLiR2bGFuOworCQkJbmV4dCB1bmxlc3MoZGVmaW5lZCgkbWFjc3skbWFjfXskdmJyaWRnZX0pKTsKKwkJCSRjb3VudCsrOworCQkJbXkgJG1hY19vaWQ9bWFjMm9pZCgkbWFjKTsKKwkJCSRtYWN2bGFueyR2bGFuLiRtYWNfb2lkfT0kbWFjOworCQkJJHZsYW5tYWN7JHZsYW4uJG1hY19vaWR9PSR2bGFuOworCQl9CisJCSRvaWRfdmFsdWV7JG9pZC4iLjEuMi4iLiR2bGFufT0kY291bnQ7CisJfQorCisJZm9yZWFjaCBteSAkdm1hY19vaWQgKHNvcnQgeyRhIGNtcCAkYn0ga2V5cyAldmxhbm1hYyl7CisJCW15ICRtYWM9JG1hY3ZsYW57JHZtYWNfb2lkfTsKKwkJbXkgJHZsYW49JHZsYW5tYWN7JHZtYWNfb2lkfTsKKworCQkjcHJpbnQgIlZNQUM6ICR2bWFjX29pZCAoJHZsYW46JG1hYylcbiI7CisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF92bWFjX29pZCkpeworCQkJJGZpcnN0X3ZtYWNfb2lkPSR2bWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMS4yLiIuJHBydl92bGFufT0kb2lkLiIuMi4xLiIuJHZtYWNfb2lkOworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjIuMS4iLiR2bWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4xIn09JG9pZC4iLjIuMS4iLiR2bWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4yIn09JG9pZC4iLjIuMi4iLiR2bWFjX29pZDsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4zIn09JG9pZC4iLjIuMy4iLiR2bWFjX29pZDsKKwkJfQorCisJCW15ICRwb3J0PSRtYWNzeyRtYWN9eyRicmlkZ2V9OworCQlteSAkYmFzZXBvcnQ9JGJhc2Vwb3J0c3skYnJpZGdlfXskcG9ydH07CisJCW15ICRzdGF0dXM9JGxvY2Fsc3skbWFjfXskYnJpZGdlfTsKKwkJbXkgJGFnZT0kYWdlc3skbWFjfXskYnJpZGdlfTsKKworCQlwcmludCAiVkxBTiAkdmxhbjogJG1hYyAtPiAkcG9ydDokYmFzZXBvcnQgKCRzdGF0dXMsICRhZ2UpXG4iOyAKKworCQkkb2lkX3ZhbHVleyRvaWQuIi4yLjEuIi4kdm1hY19vaWR9PW1hYzJoZXgoJG1hYyk7CisJCSRvaWRfdHlwZXskb2lkLiIuMi4xLiIuJHZtYWNfb2lkfT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcnZfdm1hY19vaWQpKXsKKwkJCSRvaWRfbmV4dHskb2lkLiIuMi4xLiIuJHBydl92bWFjX29pZH09JG9pZC4iLjIuMS4iLiR2bWFjX29pZDsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjIuMi4iLiR2bWFjX29pZH09JGJhc2Vwb3J0OworCQkkb2lkX3R5cGV7JG9pZC4iLjIuMi4iLiR2bWFjX29pZH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl92bWFjX29pZCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjIuIi4kcHJ2X3ZtYWNfb2lkfT0kb2lkLiIuMi4yLiIuJHZtYWNfb2lkOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4zLiIuJHZtYWNfb2lkfT0kc3RhdHVzOworCQkkb2lkX3R5cGV7JG9pZC4iLjIuMy4iLiR2bWFjX29pZH09QVNOX0lOVEVHRVI7CisJCWlmKGRlZmluZWQoJHBydl92bWFjX29pZCkpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4yLjMuIi4kcHJ2X3ZtYWNfb2lkfT0kb2lkLiIuMi4zLiIuJHZtYWNfb2lkOworCQl9CisJCSRwcnZfdm1hY19vaWQ9JHZtYWNfb2lkOworCX0KKworCWlmICgkcHJ2X3ZtYWNfb2lkIGFuZCAkZmlyc3Rfdm1hY19vaWQpIHsKKwkJJG9pZF9uZXh0eyRvaWQuIi4yLjEuIi4kcHJ2X3ZtYWNfb2lkfT0kb2lkLiIuMi4yLiIuJGZpcnN0X3ZtYWNfb2lkOworCQkkb2lkX25leHR7JG9pZC4iLjIuMi4iLiRwcnZfdm1hY19vaWR9PSRvaWQuIi4yLjMuIi4kZmlyc3Rfdm1hY19vaWQ7CisJCSRvaWRfbmV4dHskb2lkLiIuMi4zLiIuJHBydl92bWFjX29pZH09Ii4xLjMuNi4xLjIuMS4xNy43LjEuNC4xIjsKKwl9CisKKwl1bmRlZiAkZmlyc3Rfdm1hY19vaWQ7CisJdW5kZWYgJHBydl92bWFjX29pZDsKKworCXVuZGVmICRmaXJzdF92bGFuOworCXVuZGVmICRwcnZfdmxhbjsKK30KKworc3ViIGRvdDFxY3VycmVudHZsYW5zKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisKKworCW15ICRvaWQ9Ii4xLjMuNi4xLjIuMS4xNy43LjEuNC4xIjsKKwkkb2lkX25leHR7Ii4xLjMuNi4xLjIuMS4xNy43LjEuNCJ9PSRvaWQ7CisKKwkkb2lkX3ZhbHVleyRvaWR9PTA7CSMgY2FuJ3Qga2VlcCB0cmFjayBvZiB0aGlzIGluZm8KKwkkb2lkX3R5cGV7JG9pZH09QVNOX0NPVU5URVI7CisKKwlteSAkY291bnQ9MDsKKwkkb2lkPSIuMS4zLjYuMS4yLjEuMTcuNy4xLjQuMiI7CisJZm9yZWFjaCBteSAkdmxhbiAoc29ydCB7JGE8PT4kYn0ga2V5cyAldmxhbnMpeworCQkkY291bnQrKzsKKwkJbXkgQGFsbHBvcnRzPSgpOworCQlteSBAdW50YWdnZWRwb3J0cz0oKTsKKwkJZm9yZWFjaCBteSAkcG9ydCAoa2V5cyAleyR2bGFuc3skdmxhbn19KXsKKwkJCSRiYXNlcG9ydD0kYmFzZXBvcnRzeyRicmlkZ2V9eyRwb3J0fTsKKwkJCXB1c2ggQGFsbHBvcnRzLCAkYmFzZXBvcnQ7CisJCQlwdXNoIEB1bnRhZ2dlZHBvcnRzLCAkYmFzZXBvcnQKKwkJCQl1bmxlc3MoJHRhZ2dlZHskdmxhbn17JHBvcnR9KTsKKwkJfQorCQkjcHJpbnQgIkFERElORzogdmxhbiAkdmxhbiAoQGFsbHBvcnRzLCBAdW50YWdnZWRwb3J0cylcbiI7CisJCXVubGVzcyhkZWZpbmVkKCRmaXJzdF92bGFuKSl7CisJCQkkZmlyc3Rfdmxhbj0kdmxhbjsKKwkJCSRvaWRfbmV4dHsiLjEuMy42LjEuMi4xLjE3LjcuMS40LjEifT0kb2lkLiIuMS4wLiIuJHZsYW47CisJCQkkb2lkX25leHR7JG9pZH09JG9pZC4iLjEuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi4xIn09JG9pZC4iLjEuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi4yIn09JG9pZC4iLjIuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi4zIn09JG9pZC4iLjMuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi40In09JG9pZC4iLjQuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi41In09JG9pZC4iLjUuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi42In09JG9pZC4iLjYuMC4iLiR2bGFuOworCQkJJG9pZF9uZXh0eyRvaWQuIi43In09JG9pZC4iLjcuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMS4wLiIuJHZsYW59PTA7ICMgY2FuJ3Qga2VlcCB0cmFjayBvZiB0aGlzCisJCSRvaWRfdHlwZXskb2lkLiIuMS4wLiIuJHZsYW59PUFTTl9USU1FVElDS1M7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjEuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjEuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMi4wLiIuJHZsYW59PSR2bGFuOworCQkkb2lkX3R5cGV7JG9pZC4iLjIuMC4iLiR2bGFufT1BU05fVU5TSUdORUQ7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjIuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjIuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuMy4wLiIuJHZsYW59PSR2bGFuOyAKKwkJJG9pZF90eXBleyRvaWQuIi4zLjAuIi4kdmxhbn09QVNOX1VOU0lHTkVEOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi4zLjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi4zLjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjQuMC4iLiR2bGFufT1nZXRwb3J0bGlzdChAYWxscG9ydHMpOworCQkkb2lkX3R5cGV7JG9pZC4iLjQuMC4iLiR2bGFufT1BU05fT0NURVRfU1RSOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi40LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi40LjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjUuMC4iLiR2bGFufT1nZXRwb3J0bGlzdChAdW50YWdnZWRwb3J0cyk7CisJCSRvaWRfdHlwZXskb2lkLiIuNS4wLiIuJHZsYW59PUFTTl9PQ1RFVF9TVFI7CisJCWlmKGRlZmluZWQoJHBydl92bGFuKSl7CisJCQkkb2lkX25leHR7JG9pZC4iLjUuMC4iLiRwcnZfdmxhbn09JG9pZC4iLjUuMC4iLiR2bGFuOworCQl9CisKKwkJJG9pZF92YWx1ZXskb2lkLiIuNi4wLiIuJHZsYW59PTE7CisJCSRvaWRfdHlwZXskb2lkLiIuNi4wLiIuJHZsYW59PUFTTl9JTlRFR0VSOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi42LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi42LjAuIi4kdmxhbjsKKwkJfQorCisJCSRvaWRfdmFsdWV7JG9pZC4iLjcuMC4iLiR2bGFufT0wOworCQkkb2lkX3R5cGV7JG9pZC4iLjcuMC4iLiR2bGFufT1BU05fVElNRVRJQ0tTOworCQlpZihkZWZpbmVkKCRwcnZfdmxhbikpeworCQkJJG9pZF9uZXh0eyRvaWQuIi43LjAuIi4kcHJ2X3ZsYW59PSRvaWQuIi43LjAuIi4kdmxhbjsKKwkJfQorCQkkcHJ2X3ZsYW49JHZsYW47CisJfQorCisJJG9pZF92YWx1ZXsiLjEuMy42LjEuMi4xLjE3LjcuMS4xLjQifT0kY291bnQ7CisJaWYoJHBydl92bGFuIGFuZCAkZmlyc3Rfdmxhbil7CisJCSRvaWRfbmV4dHskb2lkLiIuMS4wLiIuJHBydl92bGFufT0kb2lkLiIuMi4wLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuMi4wLiIuJHBydl92bGFufT0kb2lkLiIuMy4wLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuMy4wLiIuJHBydl92bGFufT0kb2lkLiIuNC4wLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuNC4wLiIuJHBydl92bGFufT0kb2lkLiIuNS4wLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuNS4wLiIuJHBydl92bGFufT0kb2lkLiIuNi4wLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuNi4wLiIuJHBydl92bGFufT0kb2lkLiIuNy4wLiIuJGZpcnN0X3ZsYW47CisJCSRvaWRfbmV4dHskb2lkLiIuNy4wLiIuJHBydl92bGFufT0iLjEuMy42LjEuMi4xLjE3LjcuMS40LjMiOworCX0KKworCXVuZGVmICRwcnZfdmxhbjsKKwl1bmRlZiAkZmlyc3RfdmxhbjsKKworfQorCitzdWIgcmVhZGZvcndhcmRzKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgJGZkYj0kbmV0ZGlyLiRicmlkZ2UuIi9icmZvcndhcmQiOworCisJb3BlbihGV0QsICRmZGIpIG9yIHJldHVybiAtMTsKKwl3aGlsZShzeXNyZWFkKEZXRCwgJGRhdGEsIDIwKSl7CisJCW15ICRtYWM7CisJCW15ICgkYjEsJGIyLCRiMywkYjQsJGI1LCRiNiwkcG9ydCwkbG9jYWwsJGFnZSwkaGkpPQorCQl1bnBhY2soIkM2IEMgQyBMIEMgeDMiLCAkZGF0YSk7CisJCSRtYWM9c3ByaW50ZigiJS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4OiUuMngiLAorCQkJCQkkYjEsJGIyLCRiMywkYjQsJGI1LCRiNik7CisJCSRhZ2U9JGFnZS8xMDA7CisJCSRtYWNzeyRtYWN9eyRicmlkZ2V9PSRwb3J0OworCQkkYWdlc3skbWFjfXskYnJpZGdlfT0kYWdlOworCQkkbG9jYWxzeyRtYWN9eyRicmlkZ2V9PUZEQl9TVEFUVVNfTEVBUk5FRDsKKwkJbmV4dCBpZiAoJGxvY2FsKTsKKwkJJG1hY3N7JG1hY317JGJyaWRnZX09JGJyaWRnZTsKKwkJJGxvY2Fsc3skbWFjfXskYnJpZGdlfT1GREJfU1RBVFVTX1NFTEY7CisJfQorCWNsb3NlKEZXRCk7Cit9CisKK3N1YiByZWFkaW5kZXhlcygpCit7CisJbXkgJGJyaWRnZSA9IHNoaWZ0OworCisJbXkgJGJyaWZkaXI9JG5ldGRpci4kYnJpZGdlLiIvYnJpZi8iOworCisJb3BlbmRpcihESVIsICRicmlmZGlyKSBvciByZXR1cm4gLTE7CisJbXkgQGludGVyZmFjZXMgPSByZWFkZGlyKERJUik7CisJbmV4dCBpZiAoJCNpbnRlcmZhY2VzIGx0IDIpOworCWZvcmVhY2ggbXkgJGlmIChAaW50ZXJmYWNlcykgeworCQluZXh0IGlmICRpZiBlcSAiLiI7CisJCW5leHQgaWYgICRpZiBlcSAiLi4iOworCisJCW15ICRwb3J0PWhleChyZWFkZmlsZSgkYnJpZmRpci4kaWYuIi9wb3J0X25vIiwgMCkpOworCQlteSAkaW5kZXg9cmVhZGZpbGUoJG5ldGRpci4kaWYuIi9pZmluZGV4IiwgMCk7CisKKwkJJGluZGV4ZXN7JGJyaWRnZX17JHBvcnR9PSRpbmRleDsKKwkJJGludGVyZmFjZXN7JGJyaWRnZX17JHBvcnR9PSRpZjsKKwl9CisKKwkkaW5kZXhlc3skYnJpZGdlfXskYnJpZGdlfT1yZWFkZmlsZSgkbmV0ZGlyLiRicmlkZ2UuIi9pZmluZGV4IiwgMCk7CisKKwljbG9zZShESVIpOworfQorCitzdWIgcmVhZHZsYW5zKCkKK3sKKwlteSAkYnJpZGdlID0gc2hpZnQ7CisJbXkgJGJyaWZkaXIgPSAkbmV0ZGlyLiRicmlkZ2UuIi9icmlmLyI7CisJbXkgJWlmczsKKworCW9wZW5kaXIoRElSLCAkYnJpZmRpcikgb3IgcmV0dXJuIC0xOworCW15IEBpbnRlcmZhY2VzID0gcmVhZGRpcihESVIpOworCXJldHVybiBpZiAoJCNpbnRlcmZhY2VzIDwgMik7CisJZm9yZWFjaCBteSAkaWYgKEBpbnRlcmZhY2VzKSB7CisJCW5leHQgaWYgJGlmIGVxICIuIjsKKwkJbmV4dCBpZiAgJGlmIGVxICIuLiI7CisJCSRpZnN7JGlmfT0xOworCX0KKwljbG9zZShESVIpOworCisJb3BlbmRpcihESVIsICRuZXRkaXIpIG9yIHJldHVybiAtMTsKKwlAaW50ZXJmYWNlcyA9IHJlYWRkaXIoRElSKTsKKwlyZXR1cm4gMCBpZiAoJCNpbnRlcmZhY2VzIDwgMik7CisJZm9yZWFjaCBteSAkaWYgKEBpbnRlcmZhY2VzKSB7CisJCW5leHQgaWYgJGlmIGVxICIuIjsKKwkJbmV4dCBpZiAgJGlmIGVxICIuLiI7CisJCW5leHQgdW5sZXNzKCRpZj1+L14oLiopXC4oXGQrKSQvKTsKKwkJbXkgJHBpZj0kMTsKKwkJbXkgJHZsYW49JDI7CisJCW5leHQgdW5sZXNzKGRlZmluZWQoJGlmc3skcGlmfSkpOworCQl0cmFjZXZsYW4oJHZsYW4sICRpZiwgJGJyaWRnZSk7CisJfQorCWNsb3NlKERJUik7Cit9CisKK3N1YiB0cmFjZXZsYW57CisJbXkgKCR2bGFuLCAkaW50ZXJmYWNlLCAkYnJpZGdlKT1AXzsKKworCW15ICRicmlmZGlyPSRuZXRkaXIuJGludGVyZmFjZS4iL2JycG9ydC9icmlkZ2UvYnJpZi8iOworCisJb3BlbmRpcihESVIsICRicmlmZGlyKSBvciByZXR1cm4gLTE7CisJbXkgQGludGVyZmFjZXMgPSByZWFkZGlyKERJUik7CisJcmV0dXJuIGlmICgkI2ludGVyZmFjZXMgPCAyKTsKKwlmb3JlYWNoIG15ICRpZiAoQGludGVyZmFjZXMpIHsKKwkJbmV4dCBpZiAkaWYgZXEgIi4iOworCQluZXh0IGlmICAkaWYgZXEgIi4uIjsKKwkJbXkgJHBvcnQ7CisJCW15ICRpbmRleDsKKwkJaWYoJGlmPX4vXiguKilcLihcZCspJC8peworCQkJbXkgJHBpZj0kMTsKKwkJCSRicmlmZGlyPSRuZXRkaXIuJHBpZi4iL2JycG9ydC9icmlkZ2UvYnJpZi8iOworCQkJJHBvcnQ9aGV4KHJlYWRmaWxlKCRicmlmZGlyLiRwaWYuIi9wb3J0X25vIiwgMCkpOworCQkJJGluZGV4PXJlYWRmaWxlKCRuZXRkaXIuJHBpZi4iL2lmaW5kZXgiLCAwKTsKKwkJCSMkaW5kZXhlc3skYnJpZGdlfXskcG9ydH09JGluZGV4OworCQkJIyRpbnRlcmZhY2VzeyRicmlkZ2V9eyRwb3J0fT0kaWY7CisJCQkkdGFnZ2VkeyR2bGFufXskcG9ydH09MTsKKwkJfWVsc2V7CisJCQlteSAkYnJpZD1yZWFkZmlsZSgkbmV0ZGlyLiRpZi4iL2JycG9ydC9icmlkZ2UvaWZpbmRleCIsCTApOworCQkJJGJyaWZkaXI9JG5ldGRpci4kaWYuIi9icnBvcnQvYnJpZGdlL2JyaWYvIjsKKwkJCSRwb3J0PWhleChyZWFkZmlsZSgkYnJpZmRpci4kaWYuIi9wb3J0X25vIiwgMCkpOworCQkJJHBvcnQ9JGJyaWQqMTAwMCskcG9ydDsgI2NyZWF0ZSBhIHVuaXF1ZSBwb3J0IG51bWJlcgorCQkJJGluZGV4PXJlYWRmaWxlKCRuZXRkaXIuJGlmLiIvaWZpbmRleCIsIDApOworCQkJJGluZGV4ZXN7JGJyaWRnZX17JHBvcnR9PSRpbmRleDsKKwkJCSRpbnRlcmZhY2VzeyRicmlkZ2V9eyRwb3J0fT0kaWY7CisJCQkkdGFnZ2VkeyR2bGFufXskcG9ydH09MDsKKwkJfQorCQkkdmxhbnN7JHZsYW59eyRwb3J0fT0xOworCQkjcHJpbnQgIlZMQU46ICR2bGFuIC0+ICRpZiAoJHBvcnQgPC0+ICRpbmRleClcbiI7CisJfQorCWNsb3NlKERJUik7CisKKwlteSAkYnJpZD1yZWFkZmlsZSgkbmV0ZGlyLiRpbnRlcmZhY2UuIi9icnBvcnQvYnJpZGdlL2lmaW5kZXgiLCAwKTsKKwlteSAkZmRiPSRuZXRkaXIuJGludGVyZmFjZS4iL2JycG9ydC9icmlkZ2UvYnJmb3J3YXJkIjsKKworCW15ICR2YnJpZGdlPSRicmlkZ2UuIl92bGFuIi4kdmxhbjsKKwlvcGVuKEZXRCwgJGZkYikgb3IgcmV0dXJuIC0xOworCXdoaWxlKHN5c3JlYWQoRldELCAkZGF0YSwgMjApKXsKKwkJbXkgJG1hYzsKKwkJbXkgKCRiMSwkYjIsJGIzLCRiNCwkYjUsJGI2LCRwb3J0LCRsb2NhbCwkYWdlLCRoaSk9CisJCXVucGFjaygiQzYgQyBDIEwgQyB4MyIsICRkYXRhKTsKKwkJICRtYWM9c3ByaW50ZigiJS4yeDolLjJ4OiUuMng6JS4yeDolLjJ4OiUuMngiLAorCQkJCQkkYjEsJGIyLCRiMywkYjQsJGI1LCRiNik7CisJCSAkcG9ydD0kYnJpZCoxMDAwKyRwb3J0IHVubGVzcyhkZWZpbmVkKCRpbmRleGVzeyRicmlkZ2V9eyRwb3J0fSkpOyAgI2NyZWF0ZSBhIHVuaXF1ZSBwb3J0IG51bWJlcgorCQkgJGFnZT0kYWdlLzEwMDsKKwkJICMkbWFjc3skbWFjfXskYnJpZGdlfT0kcG9ydDsKKwkJICRtYWNzeyRtYWN9eyR2YnJpZGdlfT0kcG9ydDsKKwkJICMkYWdlc3skbWFjfXskYnJpZGdlfT0kYWdlOworCQkgJGFnZXN7JG1hY317JHZicmlkZ2V9PSRhZ2U7CisJCSAjJGxvY2Fsc3skbWFjfXskYnJpZGdlfT1GREJfU1RBVFVTX0xFQVJORUQ7CisJCSAkbG9jYWxzeyRtYWN9eyR2YnJpZGdlfT1GREJfU1RBVFVTX0xFQVJORUQ7CisJCSBuZXh0IGlmICgkbG9jYWwpOworCQkgIyRtYWNzeyRtYWN9eyRicmlkZ2V9PSRicmlkZ2U7CisJCSAkbWFjc3skbWFjfXskdmJyaWRnZX09JGJyaWRnZTsKKwkJICMkbG9jYWxzeyRtYWN9eyRicmlkZ2V9PUZEQl9TVEFUVVNfU0VMRjsKKwkJICRsb2NhbHN7JG1hY317JHZicmlkZ2V9PUZEQl9TVEFUVVNfU0VMRjsKKwl9CisJY2xvc2UoRldEKTsKK30KKworc3ViIHJlYWRmaWxlKCkKK3sKKwlteSAkZmlsZSA9IHNoaWZ0OworCW15ICRmbGFncyA9IHNoaWZ0OworCisJb3BlbihGSUxFLCAkZmlsZSkgb3IgcHJpbnQgIkNvdWxkIG5vdCBvcGVuIGZpbGUgJGZpbGUgIVxuIjsKKwlteSAkdmFsdWU9PEZJTEU+OworCWNob21wICR2YWx1ZTsKKwljbG9zZShGSUxFKTsKKworCWlmICgkZmxhZ3MgJiBTVFBfUFJPUF9IRVgpIHsKKwkJcmV0dXJuIGhleCgkdmFsdWUpOworCX0KKworCXJldHVybiAkdmFsdWU7Cit9CisKK3N1YiBnZXRwb3J0bGlzdHsKKwlteSBAcG9ydHM9QF87CisJbXkgJHBvcnRsaXN0PSIiOworCisJQHBvcnRzPXNvcnQgeyRhIDw9PiAkYn0gQHBvcnRzOworCW15ICRsYXN0PTE7CisJZm9yZWFjaCBteSAkcG9ydCAoQHBvcnRzKXsKKwkJZm9yKG15ICRpPSRsYXN0OyAkaTwkcG9ydDsgJGkrKyl7CisJCQkkcG9ydGxpc3Q9JHBvcnRsaXN0LiIwIjsKKwkJfQorCQkkcG9ydGxpc3Q9JHBvcnRsaXN0LiIxIjsKKwkJJGxhc3Q9JHBvcnQrMTsKKwl9CisJcmV0dXJuIHBhY2soJ0IqJywkcG9ydGxpc3QpOyAKK30KKworc3ViIG1hYzJvaWR7CisJbXkgKCRtYWMpPUBfOworCW15IEBvY3RldHM9c3BsaXQoLzovLCRtYWMpOworCisJJG1hYz0iIjsKKwlmb3JlYWNoIG15ICRvY3RldCAoQG9jdGV0cyl7CisJCSRtYWM9JG1hYy4iLiIuaGV4KCRvY3RldCk7CisJfQorCXJldHVybiAkbWFjOworfQorCitzdWIgbWFjMmhleHsKKyAgICAgICAgbXkgKCRtYWMpPUBfOworCW15IEBkZWNpbWFsczsKKwlteSBAb2N0ZXRzPXNwbGl0KC86LywkbWFjKTsKKworCWZvcmVhY2ggbXkgJG9jdGV0IChAb2N0ZXRzKXsKKwkJcHVzaCBAZGVjaW1hbHMsIGhleCgkb2N0ZXQpOworCX0KKwlyZXR1cm4gcGFjaygiQ0NDQ0NDIiwgQGRlY2ltYWxzKTsKK30KKworc3ViIHNodXRkb3duIHsKKwkkcnVubmluZyA9IDA7Cit9CmRpZmYgLS1naXQgYS9sb2NhbC9zbm1wY2hlY2suZGVmIGIvbG9jYWwvc25tcGNoZWNrLmRlZgppbmRleCA4NDk5N2VmLi5hZDM5MmVlIDEwMDc1NQotLS0gYS9sb2NhbC9zbm1wY2hlY2suZGVmCisrKyBiL2xvY2FsL3NubXBjaGVjay5kZWYKQEAgLTMyLDcgKzMyLDcgQEAKICRhbmRsb2c9MDsKICRzbm1wcGF0aD0iQklORElSIjsKICRlcmFzZWxpbmU9IiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyIjsKLSRmaXhpdD0wOyAgIyB0aGlzIHNob3VsZCBiZSAwIG5vdCAtMSwgYnV0IGlzIG5lY2lzc2FyeSB0aWxsIGdldGMoU1RESU4pIHdvcmtzCiskZml4aXQ9MDsgICMgdGhpcyBzaG91bGQgYmUgMCBub3QgLTEsIGJ1dCBpcyBuZWNlc3NhcnkgdGlsbCBnZXRjKFNURElOKSB3b3JrcwogJHJlc2NhbldoZW4gPSAzMDA7CiAkZGlzcGxheSA9ICRFTlZ7J0RJU1BMQVknfTsKICRoaWRkZW4gPSAwOwpkaWZmIC0tZ2l0IGEvbG9jYWwvc25tcGNvbmYgYi9sb2NhbC9zbm1wY29uZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzdhNTEzNi4uMDAwMDAwMAotLS0gYS9sb2NhbC9zbm1wY29uZgorKysgL2Rldi9udWxsCkBAIC0xLDkzMyArMCwwIEBACi0jIS91c3IvYmluL3BlcmwgLXcKLQotIwotIyBBIHNpbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgYnVpbGRlciBiYXNlZCBvbiBxdWVzdGlvbnMgbGlzdGVkIGluCi0jIGl0cyBvd24gY29uZmlndXJhdGlvbiBmaWxlLiAgSXQgd291bGQgY2VydGFpbmx5IGJlIGVhc3kgdG8gdXNlIHRoaXMKLSMgZm9yIG90aGVyIChub24tc25tcCkgcHJvZ3JhbXMgYXMgd2VsbC4KLSMKLQotdXNlIEdldG9wdDo6U3RkOwotdXNlIFRlcm06OlJlYWRMaW5lOwotdXNlIElPOjpGaWxlOwotdXNlIERhdGE6OkR1bXBlcjsKLXVzZSBGaWxlOjpDb3B5OwotaWYgKCReTyBlcSAnTVNXaW4zMicpIHsKLSAgZXZhbCAncmVxdWlyZSBXaW4zMjo6UmVnaXN0cnk7JzsKLSAgaWYgKCRAKSB7Ci0gICAgcHJpbnQgIlxuV2FybmluZzogUGVybCBtb2R1bGUgV2luMzI6OlJlZ2lzdHJ5IGlzIG5vdCBpbnN0YWxsZWQuICBUaGlzIG1vZHVsZSBpc1xuIjsKLSAgICBwcmludCAiICAgICAgICAgcmVxdWlyZWQgdG8gcmVhZCB0aGUgU05NUFNIQVJFUEFUSCBhbmQgU05NUENPTkZQQVRIIHZhbHVlcyBmcm9tIFxuIjsKLSAgICBwcmludCAiICAgICAgICAgdGhlIHJlZ2lzdHJ5LiAgVG8gdXNlIHNubXBjb25mIHdpdGhvdXQgdGhlIG1vZHVsZSB5b3UgbmVlZCB0b1xuIjsKLSAgICBwcmludCAiICAgICAgICAgZGVmaW5lIFNOTVBTSEFSRVBBVEggYW5kIFNOTVBDT05GUEFUSCBhcyBlbnZpcm9ubWVudCB2YXJpYWJsZXNcbiI7Ci0gICAgcHJpbnQgIiAgICAgICAgIG9yIHVzZSB0aGUgLWMgYW5kIC1JIGNvbW1hbmQgbGluZSBvcHRpb25zLlxuIjsKLSAgfQotfQotCi0jIGdsb2JhbHMKLSV0b2tlbml0ZW1zPXF3KGxpbmUgMSBpbmZvIDEgY29tbWVudCAxKTsKLSVhcnJheWl0ZW1zPXF3KHF1ZXN0aW9uIDEgdmFsaWRhbnN3ZXIgMSk7Ci0KLSMgZGVmYXVsdCBmb2xkZXIgZm9yIHNubXBjb25mLWRhdGEKLWlmIChkZWZpbmVkKCZteV9nZXRlbnYoIlNOTVBTSEFSRVBBVEgiKSkpIHsKLSAgJG9wdHN7J2MnfSA9ICZteV9nZXRlbnYoIlNOTVBTSEFSRVBBVEgiKSAuICIvc25tcGNvbmYtZGF0YSI7Ci19Ci1lbHNlIHsKLSAgJG9wdHN7J2MnfSA9ICIvdXNyL2xvY2FsL3NoYXJlL3NubXAvc25tcGNvbmYtZGF0YSI7Ci19Ci0gCi0jIGRlZmF1bHQgY29uZmlnIGZpbGUgcGF0aAotaWYgKGRlZmluZWQoJm15X2dldGVudigiU05NUENPTkZQQVRIIikpKSB7Ci0gICRjb25mcGF0aCA9ICZteV9nZXRlbnYoIlNOTVBDT05GUEFUSCIpOwotfQotZWxzZSB7Ci0gICRjb25mcGF0aCA9ICIvdXNyL2xvY2FsL3NoYXJlL3NubXAiOwotfQotCi0jIGhvbWUgZW52aXJvbm1lbnQgdmFyaWFibGUKLWlmIChkZWZpbmVkKCZteV9nZXRlbnYoIkhPTUUiKSkpIHsKLSAgJGhvbWUgPSAmbXlfZ2V0ZW52KCJIT01FIikgLiAiLy5zbm1wIjsKLX0KLWVsc2UgewotICAkaG9tZSA9ICIoSE9NRSBkaXIgLSBuL2EpIjsKLX0KLQotIyByZWFkIHRoZSBhcmd1bWVudCBzdHJpbmcKLWdldG9wdHMoInFhZGhmYzpwaUk6cjpSOmc6RyIsIFwlb3B0cyk7Ci0KLSMgZGlzcGxheSBoZWxwCi1pZiAoJG9wdHN7J2gnfSkgewotICAgIHByaW50ICIkMCBbb3B0aW9uc10gW0ZJTEVUT0NSRUFURS4uLl1cbiI7Ci0gICAgcHJpbnQgIm9wdGlvbnM6XG4iOwotICAgIHByaW50ICIgIC1mICAgICAgICAgICBvdmVyd3JpdGUgZXhpc3RpbmcgZmlsZXMgd2l0aG91dCBwcm9tcHRpbmdcbiI7Ci0gICAgcHJpbnQgIiAgLWkgICAgICAgICAgIGluc3RhbGwgY3JlYXRlZCBmaWxlcyBpbnRvICRjb25mcGF0aC5cbiI7Ci0gICAgcHJpbnQgIiAgLXAgICAgICAgICAgIGluc3RhbGwgY3JlYXRlZCBmaWxlcyBpbnRvICRob21lLlxuIjsKLSAgICBwcmludCAiICAtSSBESVIgICAgICAgaW5zdGFsbCBjcmVhdGVkIGZpbGVzIGludG8gRElSLlxuIjsKLSAgICBwcmludCAiICAtYSAgICAgICAgICAgRG9uJ3QgYXNrIGFueSBxdWVzdGlvbnMsIGp1c3QgcmVhZCBpbiBjdXJyZW50XG4iOwotICAgIHByaW50ICIgICAgICAgICAgICAgICAgICAgY3VycmVudCAuY29uZiBmaWxlcyBhbmQgY29tbWVudCB0aGVtXG4iOwotICAgIHByaW50ICIgIC1yIGFsbHxub25lICBSZWFkIGluIGFsbCBvciBub25lIG9mIHRoZSAuY29uZiBmaWxlcyBmb3VuZC5cbiI7Ci0gICAgcHJpbnQgIiAgLVIgZmlsZSwuLi4gIFJlYWQgaW4gYSBwYXJ0aWN1bGFyIGxpc3Qgb2YgLmNvbmYgZmlsZXMuXG4iOwotICAgIHByaW50ICIgIC1nIEdST1VQICAgICBBc2sgYSBzZXJpZXMgb2YgR1JPVVBlZCBxdWVzdGlvbnMuXG4iOwotICAgIHByaW50ICIgIC1HICAgICAgICAgICBMaXN0IGtub3duIEdST1VQcy5cbiI7Ci0gICAgcHJpbnQgIiAgLWMgY29uZl9kaXIgIHVzZSBhbHRlcm5hdGUgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkuXG4iOwotICAgIHByaW50ICIgIC1xICAgICAgICAgICBydW4gbW9yZSBxdWlldGx5IHdpdGggbGVzcyBhZHZpY2UuXG4iOwotICAgIHByaW50ICIgIC1kICAgICAgICAgICB0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQuXG4iOwotICAgIHByaW50ICIgIC1EICAgICAgICAgICB0dXJuIG9uIGRlYnVnZ2luZyBkdW1wZXIgb3V0cHV0LlxuIjsKLSAgICBleGl0OwotfQotCi0jIHNldHVwIHRlcm1pbmFsIGludGVyZmFjZS4KLSRFTlZ7J1BFUkxfUkwnfT0nbz0wJyBpZiAoIWV4aXN0cygkRU5WeydQRVJMX1JMJ30pKTsKLSR0ZXJtID0gbmV3IFRlcm06OlJlYWRMaW5lICdzbm1wY29uZic7Ci0KLSMgcmVhZCBpbiBjb25maWd1cmF0aW9uIGZpbGUgc2V0Ci1yZWFkX2NvbmZpZ19maWxlcygkb3B0c3snYyd9LCBcJWZpbGV0eXBlcyk7Ci1kZWJ1ZyhteV9EdW1wZXIoXCVmaWxldHlwZXMpKTsKLQotaWYgKCRvcHRzeydHJ30pIHsKLSAgICBQcmludCgiXG5Lbm93biBHUk9VUHMgb2YgdG9rZW5zOlxuXG4iKTsKLSAgICBmb3JlYWNoIG15ICRncm91cCAoa2V5cyglZ3JvdXBzKSkgewotCXByaW50ICIgICRncm91cFxuIjsKLSAgICB9Ci0gICAgUHJpbnQoIlxuIik7Ci0gICAgZXhpdDsKLX0KLQotIwotIyBFeHBhbmQgdGhlIHNlYXJjaCBwYXRoIGluIGNhc2UgaXQgY29udGFpbnMgbXVsdGlwbGUgZGlyZWN0b3JpZXMKLSMgc2VwYXJhdGVkIGJ5IDogKFVuaXgpIG9yIDsgKFdpbjMyKQotIwotbXkgJEVOVl9TRVBBUkFUT1IgPSAnOic7Ci1pZiAoJF5PIGVxICdNU1dpbjMyJykgewotICAkRU5WX1NFUEFSQVRPUiA9ICc7JzsKLX0KLW15IEBzZWFyY2hwYXRoID0gc3BsaXQoLyRFTlZfU0VQQVJBVE9SLywgJGNvbmZwYXRoKTsKLXB1c2ggQHNlYXJjaHBhdGgsICIvdXNyL2xvY2FsL2V0Yy9zbm1wIjsKLXB1c2ggQHNlYXJjaHBhdGgsICIuIjsKLXB1c2ggQHNlYXJjaHBhdGgsICIkaG9tZSI7Ci0KLSMgUmVtb3ZlIHRyYWlsaW5nIC8ncyBvciBcJ3MKLWZvciAobXkgJGk9MDsgJGkgPD0gJCNzZWFyY2hwYXRoOyAkaSsrKSB7Ci0gICRzZWFyY2hwYXRoWyRpXSA9fiAvKC4qPykoW1wvXFxdKSokLzsKLSAgJHNlYXJjaHBhdGhbJGldID0gJDE7Ci19Ci0KLSMgRGV0ZXJtaW5lIHBlcnNpc3RlbnQgZGlyZWN0b3J5LiAgT3JkZXIgb2YgcHJlZmVyZW5jZToKLSMgCi0jIGZpbGUgaW4gU05NUF9QRVJTSVNURU5UX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUKLSMgZGlyZWN0b3J5IGRlZmluZWQgYnkgcGVyc2lzdGVudERpciBzbm1wLmNvbmYgdmFyaWFibGUKLSMgZGlyZWN0b3J5IGluIFNOTVBfUEVSU0lTVEVOVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUKLSMgZGVmYXVsdCBQRVJTSVNURU5UX0RJUkVDVE9SWSBkaXJlY3RvcnkKLW15ICRwZXJzaXN0ZW50RGlyID0gIiI7Ci1teSAkcGVyc2lzdGVudEZpbGUgPSAiIjsKLQotIyBTTk1QX1BFUlNJU1RFTlRfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZQotaWYgKGRlZmluZWQoJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0ZJTEUiKSkpIHsKLSAgJHBlcnNpc3RlbnRGaWxlID0gJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0ZJTEUiKTsKLSAgZGVidWcgKCJwZXJzaXN0ZW50IGZpbGU6IFNOTVBfUEVSU0lTVEVOVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlIHNldFxuIik7Ci19Ci0KLSMgc25tcC5jb25mIHBlcnNpc3RlbnREaXIKLWlmICghKCRwZXJzaXN0ZW50RGlyKSAmJiAhKCRwZXJzaXN0ZW50RmlsZSkpIHsKLSAgZm9yZWFjaCBteSAkaSAoQHNlYXJjaHBhdGgpIHsKLSAgICBkZWJ1ZyAoIlNlYXJjaGluZyBmaWxlICRpL3NubXAuY29uZiBmb3IgcGVyc2lzdGVudERpclxuIik7Ci0gICAgbXkgJHRlbXAgPSBnZXRfcGVyc2lzdGVudERpcigiJGkvc25tcC5jb25mIik7Ci0gICAgaWYgKCR0ZW1wKSB7Ci0gICAgICBkZWJ1ZygicGVyc2lzdGVudCBkaXJlY3Rvcnk6IHNldCB0byAkdGVtcCBpbiAkaS9zbm1wLmNvbmZcbiIpOwotICAgICAgJHBlcnNpc3RlbnREaXIgPSAkdGVtcDsKLSAgICAgIGxhc3Q7Ci0gICAgfQotICB9Ci19Ci0KLSMgU05NUF9QRVJTSVNURU5UX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZQotaWYgKCEoJHBlcnNpc3RlbnREaXIpICYmICEoJHBlcnNpc3RlbnRGaWxlKSkgewotICBpZiAoJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0RJUiIpKSB7Ci0gICAgJHBlcnNpc3RlbnREaXIgPSAmbXlfZ2V0ZW52KCJTTk1QX1BFUlNJU1RFTlRfRElSIik7Ci0gICAgZGVidWcgKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogU05NUF9QRVJTSVNURU5UX0RJUiBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRcbiIpOwotICB9Ci19Ci0KLSMgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgZGVmYXVsdCB2YXJpYWJsZQotaWYgKCEoJHBlcnNpc3RlbnREaXIpICYmICEoJHBlcnNpc3RlbnRGaWxlKSkgewotICAkcGVyc2lzdGVudERpciA9ICIvdmFyL25ldC1zbm1wIjsKLSAgZGVidWcgKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogVXNpbmcgZGVmYXVsdCB2YWx1ZVxuIik7Ci19Ci0KLSMgUmVidWlsZCBzZWFyY2ggcGF0aCB3aXRob3V0IHBlcnNpc3RlbnQgZm9sZGVyCi0jIE5vdGU6ICBwZXJzaXN0ZW50IGZpbGUgaGFuZGxlZCBpbiBGaW5kIGV4aXN0aW5nIAotIyBmaWxlcyB0byBwb3NzaWJseSByZWFkIGluIHNlY3Rpb24KLWlmICgkcGVyc2lzdGVudERpcikgewotICAjIFJlbW92ZSB0cmFpbGluZyAvJ3Mgb3IgXCdzCi0gICRwZXJzaXN0ZW50RGlyID1+IC8oLio/KShbXC9cXF0pKiQvOwotICAkcGVyc2lzdGVudERpciA9ICQxOwotICBkZWJ1ZyAoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiAkcGVyc2lzdGVudERpclxuIik7Ci0KLSAgbXkgQHNlYXJjaHBhdGhfb2xkID0gQHNlYXJjaHBhdGg7Ci0gIEBzZWFyY2hwYXRoID0gKCk7Ci0gIGZvcmVhY2ggbXkgJHBhdGhfdGVtcCAoQHNlYXJjaHBhdGhfb2xkKSB7Ci0gICAgaWYgKCRwYXRoX3RlbXAgZXEgJHBlcnNpc3RlbnREaXIpIHsKLSAgICAgIGRlYnVnKCJza2lwcGluZyBwZXJzaXN0ZW50IGRpcmVjdG9yeSAkcGF0aF90ZW1wXG4iKTsKLSAgICAgIG5leHQ7Ci0gICAgfQotICAgIHB1c2ggQHNlYXJjaHBhdGgsICRwYXRoX3RlbXA7Ci0gIH0KLX0KLQotIyBSZXNldCAkY29uZnBhdGggdG8gdGhlIGZpcnN0IHBhdGgKLSRjb25mcGF0aCA9ICRzZWFyY2hwYXRoWzBdOwotCi0jCi0jIEZpbmQgZXhpc3RpbmcgZmlsZXMgdG8gcG9zc2libHkgcmVhZCBpbi4KLSMKLXB1c2ggQHNlYXJjaHBhdGgsICRvcHRze0l9IGlmICgkb3B0c3tJfSk7Ci1mb3JlYWNoIG15ICRpIChAc2VhcmNocGF0aCkgewotICAgIGRlYnVnKCJzZWFyY2hpbmcgJGlcbiIpOwotICAgIGZvcmVhY2ggbXkgJGZ0IChrZXlzKCVmaWxldHlwZXMpKSB7Ci0gICAgICAgIGlmICgiJGkvJGZ0IiBlcSAkcGVyc2lzdGVudEZpbGUpIHsKLSAgICAgICAgICBkZWJ1Zygic2tpcHBpbmcgcGVyc2lzdGVudCBmaWxlICRpLyRmdFxuIik7Ci0gICAgICAgICAgbmV4dDsKLSAgICAgICAgfQotCWRlYnVnKCJzZWFyY2hpbmcgZm9yICRpLyRmdFxuIik7Ci0JJGtub3duZmlsZXN7IiRpLyRmdCJ9ID0gJGZ0IGlmICgtZiAiJGkvJGZ0Iik7Ci0JbXkgJGxvY2FsZnQgPSAkZnQ7Ci0JJGxvY2FsZnQgPX4gcy8uY29uZi8ubG9jYWwuY29uZi87Ci0JJGtub3duZmlsZXN7IiRpLyRsb2NhbGZ0In0gPSAkZnQgaWYgKC1mICIkaS8kbG9jYWxmdCIpOwotICAgIH0KLX0KLQotIwotIyBBc2sgdGhlIHVzZXIgaWYgdGhleSB3YW50IHRoZW0gdG8gYmUgcmVhZCBpbiBhbmQgcmVhZCB0aGVtCi0jCi1pZiAoa2V5cygla25vd25maWxlcykpIHsKLSAgICBteSBAZmlsZXM7Ci0gICAgaWYgKGRlZmluZWQoJG9wdHN7J3InfSkpIHsKLQlpZiAoJG9wdHN7J3InfSBlcSAiYWxsIiB8fCAkb3B0c3sncid9IGVxICJhIikgewotCSAgICBAZmlsZXMgPSBrZXlzKCVrbm93bmZpbGVzKTsKLQl9IGVsc2lmICgkb3B0c3sncid9IG5lICJub25lIiAmJiAkb3B0c3sncid9IG5lICJuIikgewotCSAgICBwcmludCAidW5rbm93biBhcmd1bWVudCB0byAtcjogJG9wdHN7J3InfVxuIjsKLQkgICAgZXhpdCgxKTsKLQl9Ci0gICAgfSBlbHNpZihkZWZpbmVkKCRvcHRzeydSJ30pKSB7Ci0JQGZpbGVzID0gc3BsaXQoL1xzKixccyovLCRvcHRzeydSJ30pOwotCWZvcmVhY2ggbXkgJGkgKEBmaWxlcykgewotCSAgICBteSAkeCA9ICRpOwotCSAgICAkeCA9fiBzLy4qXC8oW15cL10rKSQvJDEvOwotCSAgICAka25vd25maWxlc3skaX0gPSAkeDsKLQl9Ci0JUHJpbnQoInJlYWRpbmc6ICIsIGpvaW4oIiwiLEBmaWxlcyksIlxuIik7Ci0gICAgfSBlbHNlIHsKLQlAZmlsZXMgPSBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIlRoZSBmb2xsb3dpbmcgaW5zdGFsbGVkIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2VyZSBmb3VuZDpcbiIsCi0JCQkgICAgICAtdGFpbCA9PiAiV291bGQgeW91IGxpa2UgbWUgdG8gcmVhZCB0aGVtIGluPyAgVGhlaXIgY29udGVudCB3aWxsIGJlIG1lcmdlZCB3aXRoIHRoZVxub3V0cHV0IGZpbGVzIGNyZWF0ZWQgYnkgdGhpcyBzZXNzaW9uLlxuXG5WYWxpZCBhbnN3ZXIgZXhhbXBsZXM6IFwiYWxsXCIsIFwibm9uZVwiLFwiM1wiLFwiMSwyLDVcIlxuIiwKLQkJCSAgICAgIC1tdWx0aXBsZSA9PiAxLAotCQkJICAgICAgLXF1ZXN0aW9uID0+ICdSZWFkIGluIHdoaWNoJywKLQkJCSAgICAgIC1kZWZhdWx0dmFsdWUgPT4gJ2FsbCcsCi0JCQkgICAgICBzb3J0IGtleXMoJWtub3duZmlsZXMpKTsKLSAgICB9Ci0gICAgZm9yZWFjaCBteSAkaSAoQGZpbGVzKSB7Ci0JZGVidWcoInJlYWRpbmcgJGlcbiIpOwotCXJlYWRfY29uZmlnKCRpLCAka25vd25maWxlc3skaX0pOwotICAgIH0KLX0KLQotaWYgKCRvcHRzeydnJ30pIHsKLSAgICBteSBAZ3JvdXBzID0gc3BsaXQoLyw6XHMvLCRvcHRzeydnJ30pOwotICAgIGZvcmVhY2ggbXkgJGdyb3VwIChAZ3JvdXBzKSB7Ci0JZG9fZ3JvdXAoJGdyb3VwKTsKLSAgICB9Ci19IGVsc2lmICgkI0FSR1YgPj0gMCkgewotICAgICMKLSAgICAjIGxvb3AgdGhyb3VnaCByZXF1ZXN0ZWQgZmlsZXMuCi0gICAgIwotICAgIGZvcmVhY2ggbXkgJGkgKEBBUkdWKSB7Ci0JaWYgKCFkZWZpbmVkKCRmaWxldHlwZXN7JGl9KSkgewotCSAgICB3YXJuICJpbnZhbGlkIGZpbGU6ICRpXG4iOwotCX0gZWxzZSB7Ci0JICAgIGlmICgkb3B0c3snYSd9KSB7Ci0JCSRkaWRmaWxleyRpfSA9IDE7Ci0JICAgIH0gZWxzZSB7Ci0JCWJ1aWxkX2ZpbGUoJHRlcm0sICRpLCAkZmlsZXR5cGVzeyRpfSk7Ci0JICAgIH0KLQl9Ci0gICAgfQotfSBlbHNlIHsKLSAgICAjCi0gICAgIyBhc2sgdXNlciB0byBzZWxlY3QgZmlsZSB0eXBlIHRvIG9wZXJhdGUgb24uCi0gICAgIwotICAgIHdoaWxlKDEpIHsKLQlteSAkbGluZSA9IGRpc3BsYXlfbWVudSgtaGVhZCA9PiAiSSBjYW4gY3JlYXRlIHRoZSBmb2xsb3dpbmcgdHlwZXMgb2YgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgeW91LlxuU2VsZWN0IHRoZSBmaWxlIHR5cGUgeW91IHdpc2ggdG8gY3JlYXRlOlxuKHlvdSBjYW4gY3JlYXRlIG1vcmUgdGhhbiBvbmUgYXMgeW91IHJ1biB0aGlzIHByb2dyYW0pXG4iLAotCQkJCS1xdWVzdGlvbiA9PiAnU2VsZWN0IEZpbGUnLAotCQkJCS1vdGhlcmFuc3dlcnMgPT4gWydxdWl0J10sCi0JCQkJLW1hcGFuc3dlcnMgPT4geyAncScgPT4gJ3F1aXQnIH0sCi0JCQkJa2V5cyglZmlsZXR5cGVzKSk7Ci0JbGFzdCBpZiAoJGxpbmUgZXEgInF1aXQiKTsKLQlkZWJ1ZygiZmlsZSBzZWxlY3RlZDogJGxpbmVcbiIpOwotCWJ1aWxkX2ZpbGUoJHRlcm0sICRsaW5lLCAkZmlsZXR5cGVzeyRsaW5lfSk7Ci0gICAgfQotfQotCi0jCi0jIFdyaXRlIG91dCB0aGUgcmVzdWx0cyB0byB0aGUgb3V0cHV0IGZpbGVzLgotIwotb3V0cHV0X2ZpbGVzKFwlZmlsZXR5cGVzLCAkdGVybSk7Ci0KLQotIwotIyBEaXNwbGF5IHRoZSBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjcmVhdGVkIGZvciB0aGUgdXNlci4KLSMKLVByaW50KCJcblxuVGhlIGZvbGxvd2luZyBmaWxlcyB3ZXJlIGNyZWF0ZWQ6XG5cbiIpOwotQGRpZGZpbGVzID0ga2V5cyglZGlkZmlsZSk7Ci1mb3JlYWNoIG15ICRpIChAZGlkZmlsZXMpIHsKLSAgICBpZiAoJGRpZGZpbGV7JGl9IG5lICIxIikgewotCWlmICgkb3B0c3snaSd9IHx8ICRvcHRzeydJJ30pIHsKLSAgICAgICAgICAkb3B0c3snSSd9ID0gIiRjb25mcGF0aCIgaWYgKCEkb3B0c3snSSd9KTsKLQotICAgICAgICAgIGlmICghICgtZCAiJG9wdHN7J0knfSIpICYmICEgKG1rZGlyICgiJG9wdHN7J0knfSIsIDA3NTUpKSkgewotCSAgICBwcmludCAiXG5Db3VsZCBub3QgY3JlYXRlICRvcHRzeydJJ30gZGlyZWN0b3J5OiAkIVxuIjsKLQkgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLQkgIH0KLQkgIGVsc2UgewotICAgICAgICAgICAgbW92ZSAoIiRvcHRzeydJJ30vJGkiLCAiJG9wdHN7J0knfS8kaS5iYWsiKSBpZiAoLWYgIiRvcHRzeydJJ30vJGkiKTsKLSAgICAgICAgICAgIGlmIChtb3ZlICgiJGRpZGZpbGV7JGl9IiwgIiRvcHRzeydJJ30iKSkgewotICAgICAgICAgICAgICBwcmludCgiICAkZGlkZmlsZXskaX0gaW5zdGFsbGVkIGluICRvcHRzeydJJ31cbiIpOwkgICAgCi0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgcHJpbnQgIlxuQ291bGQgbm90IG1vdmUgZmlsZSAkZGlkZmlsZXskaX0gdG8gJG9wdHN7J0knfS8kaTogJCFcbiI7Ci0gICAgICAgICAgICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgfQotCX0gZWxzaWYgKCRvcHRzeydwJ30pIHsKLQkgIGlmICghICgtZCAiJGhvbWUiKSAmJiAhIChta2RpciAoIiRob21lIiwgMDc1NSkpKSB7Ci0JICAgIHByaW50ICJcbkNvdWxkIG5vdCBjcmVhdGUgJGhvbWUgZGlyZWN0b3J5OiAkIVxuIjsKLQkgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLQkgIH0KLQkgIGVsc2UgewkgICAgCi0JICAgIG1vdmUgKCIkaG9tZS8kaSIsICIkaG9tZS8kaS5iYWsiKSBpZiAoLWYgIiRob21lLyRpIik7Ci0JICAgIGlmIChtb3ZlICgiJGRpZGZpbGV7JGl9IiwgIiRob21lIikpIHsKLQkgICAgICBwcmludCgiICAkZGlkZmlsZXskaX0gaW5zdGFsbGVkIGluICRob21lXG4iKTsKLQkgICAgfQotCSAgICBlbHNlIHsKLQkgICAgICBwcmludCAiXG5Db3VsZCBub3QgbW92ZSBmaWxlICRkaWRmaWxleyRpfSB0byAkaG9tZTogJCFcbiI7Ci0JICAgICAgcHJpbnQgKCJGaWxlICRkaWRmaWxleyRpfSBsZWZ0IGluIGN1cnJlbnQgZGlyZWN0b3J5XG4iKTsKLSAgCSAgICB9Ci0JICB9Ci0gIAl9IGVsc2UgewotCSAgICBQcmludCgiICAkZGlkZmlsZXskaX0gIiwKLQkgICAgKCRpIG5lICRkaWRmaWxleyRpfSk/IlsgZnJvbSAkaSBzcGVjaWZpY2F0aW9uc10iOiIgIiwiXG4iKTsKLQkgICAgaWYgKCRvcHRzeydkJ30pIHsKLQkJb3BlbihJLCRkaWRmaWxleyRpfSk7Ci0JCWRlYnVnKCIgICAgIiAuIGpvaW4oIiAgICAiLDxJPikgLiAiXG4iKTsKLQkJY2xvc2UoSSk7Ci0JICAgIH0KLQl9Ci0gICAgfQotfQotCi1pZiAoISRvcHRzeydwJ30gJiYgISRvcHRzeydpJ30gJiYgISRvcHRzeydJJ30pIHsKLSAgICBQcmludCgiXG5UaGVzZSBmaWxlcyBzaG91bGQgYmUgbW92ZWQgdG8gJGNvbmZwYXRoIGlmIHlvdQotd2FudCB0aGVtIHVzZWQgYnkgZXZlcnlvbmUgb24gdGhlIHN5c3RlbS4gIEluIHRoZSBmdXR1cmUsIGlmIHlvdSBhZGQgCi10aGUgLWkgb3B0aW9uIHRvIHRoZSBjb21tYW5kIGxpbmUgSSdsbCBjb3B5IHRoZW0gdGhlcmUgYXV0b21hdGljYWxseSBmb3IgeW91LgotCi1PciwgaWYgeW91IHdhbnQgdGhlbSBmb3IgeW91ciBwZXJzb25hbCB1c2Ugb25seSwgY29weSB0aGVtIHRvCi0kaG9tZSAuICBJbiB0aGUgZnV0dXJlLCBpZiB5b3UgYWRkIHRoZSAtcCBvcHRpb24gdG8gdGhlCi1jb21tYW5kIGxpbmUgSSdsbCBjb3B5IHRoZW0gdGhlcmUgYXV0b21hdGljYWxseSBmb3IgeW91LgotCi0iKTsKLX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIEZ1bmN0aW9ucwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLXN1YiBQcmludCB7Ci0gICAgcHJpbnQgQF8gaWYgKCEkb3B0c3sncSd9KTsKLX0KLSMKLSMgaGFuZGxlIGEgZ3JvdXAgb2YgcXVlc3Rpb25zCi0jCi1zdWIgZ2V0X3luX21heWJlIHsKLSAgICBteSAkcXVlc3Rpb24gPSBzaGlmdDsKLSAgICBteSAkYW5zID0gInkiOwotICAgIGlmICgkcXVlc3Rpb24gbmUgIiIpIHsKLQkkYW5zID0gZ2V0X2Fuc3dlcigkdGVybSwgJHF1ZXN0aW9uLAotCQkJICB2YWxpZF9hbnN3ZXJzKHF3KHllcyB5IG5vIG4pKSwgJ3knKTsKLSAgICB9Ci0gICAgcmV0dXJuICgkYW5zID1+IC9eeS8pPzE6MDsKLX0KLQotc3ViIGRvX2dyb3VwIHsKLSAgICBteSAkZ3JvdXAgPSBzaGlmdDsKLSAgICBkaWUgIm5vIHN1Y2ggZ3JvdXAgJGdyb3VwXG4iIGlmICghJGdyb3Vwc3skZ3JvdXB9KTsKLSAgICBmb3JlYWNoIG15ICR0b2tlbiAoQHskZ3JvdXBzeyRncm91cH19KSB7Ci0JaWYgKCR0b2tlbi0+WzBdIGVxICJtZXNzYWdlIikgewotCSAgICBQcmludCAoIiR0b2tlbi0+WzFdICR0b2tlbi0+WzJdXG4iKTsKLQl9IGVsc2lmICgkdG9rZW4tPlswXSBlcSAic3ViZ3JvdXAiKSB7Ci0JICAgIGRvX2dyb3VwKCR0b2tlbi0+WzFdKSBpZiAoZ2V0X3luX21heWJlKCR0b2tlbi0+WzJdKSk7Ci0JfSBlbHNpZiAoZGVmaW5lZCgkdG9rZW5tYXB7JHRva2VuLT5bMV19KSkgewotCSAgICBpZiAoZ2V0X3luX21heWJlKCR0b2tlbi0+WzJdKSkgewotCQlkbyB7Ci0JCSAgICBkb19saW5lKCR0b2tlbi0+WzFdLCAkdG9rZW5tYXB7JHRva2VuLT5bMV19KTsKLQkJfSB1bnRpbCAoJHRva2VuLT5bMF0gbmUgIm11bHRpcGxlIiB8fAotCQkJIGdldF9hbnN3ZXIoJHRlcm0sICJEbyBhbm90aGVyICR0b2tlbi0+WzFdIGxpbmU/IiwKLQkJCQkgICAgdmFsaWRfYW5zd2Vycyhxdyh5ZXMgeSBubyBuKSksICd5JykKLQkJCSA9fiAvbi8pOwotCSAgICB9Ci0JfSBlbHNpZiAoZGVmaW5lZCgkZmlsZXR5cGVzeyR0b2tlbi0+WzFdfSkpIHsKLQkgICAgJGRpZGZpbGV7JHRva2VuLT5bMV19ID0gMTsKLQl9IGVsc2UgewotCSAgICBkaWUgImludmFsaWQgbWVtYmVyICR0b2tlbi0+WzFdIG9mIGdyb3VwICRncm91cFxuIjsKLQl9Ci0gICAgfQotfQotCi0jCi0jIGJ1aWxkIGEgcGFydGljdWxhciB0eXBlIG9mIGZpbGUgYnkgb3BlcmF0aW5nIG9uIHNlY3Rpb25zCi0jCi1zdWIgYnVpbGRfZmlsZSB7Ci0gICAgbXkgKCR0ZXJtLCAkZmlsZW5hbWUsICRmaWxlY29uZikgPSBAXzsKLSAgICAkZGlkZmlsZXskZmlsZW5hbWV9ID0gMTsKLSAgICBteSAoQGxpbmVzKTsKLSAgICB3aGlsZSgxKSB7Ci0JbXkgJGxpbmUgPSBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIlRoZSBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBwdXQgaW50byAkZmlsZW5hbWUgaXMgZGl2aWRlZFxuaW50byBzZWN0aW9ucy4gIFNlbGVjdCBhIGNvbmZpZ3VyYXRpb24gc2VjdGlvbiBmb3IgJGZpbGVuYW1lXG50aGF0IHlvdSB3aXNoIHRvIGNyZWF0ZTpcbiIsCi0JCQkJLW90aGVyYW5zd2VycyA9PiBbJ2ZpbmlzaGVkJ10sCi0JCQkJLW1hcGFuc3dlcnMgPT4geyAnZicgPT4gJ2ZpbmlzaGVkJyB9LAotCQkJCS1xdWVzdGlvbiA9PiAiU2VsZWN0IHNlY3Rpb24iLAotCQkJCS1udW1lcmljID0+IDEsCi0JCQkJbWFwIHsgJF8tPnsndGl0bGUnfVswXSB9IEAkZmlsZWNvbmYpOwotCi0JcmV0dXJuIEBsaW5lcyBpZiAoJGxpbmUgZXEgImZpbmlzaGVkIik7Ci0JZG9fc2VjdGlvbigkZmlsZWNvbmYtPlskbGluZS0xXSk7Ci0gICAgfQotfQotCi0jCi0jIGNvbmZpZ3VyZSBhIHBhcnRpY3VsYXIgc2VjdGlvbiBieSBvcGVyYXRpbmcgb24gdG9rZW4gdHlwZXMKLSMKLXN1YiBkb19zZWN0aW9uIHsKLSAgICBteSAkY29uZnNlY3QgPSBzaGlmdDsKLSAgICBteSBAbGluZXM7Ci0gICAgd2hpbGUoMSkgewotCVByaW50ICgiXG5TZWN0aW9uOiAkY29uZnNlY3QtPnsndGl0bGUnfVswXVxuIik7Ci0JUHJpbnQgKCJEZXNjcmlwdGlvbjpcbiIpOwotCVByaW50ICgiICAiLCBqb2luKCJcbiAgIixAeyRjb25mc2VjdC0+eydkZXNjcmlwdGlvbid9fSksIlxuIik7Ci0JbXkgJGxpbmUgPQotCSAgICBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIlNlbGVjdCBmcm9tOlxuIiwKLQkJCSAtb3RoZXJhbnN3ZXJzID0+IFsnZmluaXNoZWQnLCdsaXN0J10sCi0JCQkgLW1hcGFuc3dlcnMgPT4geyAnZicgPT4gJ2ZpbmlzaGVkJywKLQkJCQkJICAnbCcgPT4gJ2xpc3QnIH0sCi0JCQkgLXF1ZXN0aW9uID0+ICdTZWxlY3Qgc2VjdGlvbicsCi0JCQkgLWRlc2NyaXB0aW9ucyA9PiBbbWFwIHsgJGNvbmZzZWN0LT57JF99e2luZm99WzBdIH0gCi0JCQkJCSAgIEB7JGNvbmZzZWN0LT57J3RoZXRva2Vucyd9fV0sCi0JCQkgQHskY29uZnNlY3QtPnsndGhldG9rZW5zJ319KTsKLQlyZXR1cm4gQGxpbmVzIGlmICgkbGluZSBlcSAiZmluaXNoZWQiKTsKLQlpZiAoJGxpbmUgZXEgImxpc3QiKSB7Ci0JICAgIHByaW50ICJMaW5lcyBkZWZpbmVkIGZvciBzZWN0aW9uIFwiJGNvbmZzZWN0LT57dGl0bGV9WzBdXCIgc28gZmFyOlxuIjsKLQkgICAgZm9yZWFjaCBteSAkaSAoQHskY29uZnNlY3QtPnsndGhldG9rZW5zJ319KSB7Ci0JCWlmICgkI3skY29uZnNlY3QtPnskaX17J3Jlc3VsdHMnfX0gPj0gMCkgewotCQkgICAgcHJpbnQgIiAgIixqb2luKCJcbiAgIixAeyRjb25mc2VjdC0+eyRpfXsncmVzdWx0cyd9fSksIlxuIjsKLQkJfQotCSAgICB9Ci0JICAgIG5leHQ7Ci0JfQotCWRvX2xpbmUoJGxpbmUsICRjb25mc2VjdC0+eyRsaW5lfSk7Ci0gICAgfQotICAgIHJldHVybjsKLX0KLQotIwotIyBBc2sgYWxsIHRoZSBxdWVzdGlvbnMgcmVsYXRlZCB0byBhIHBhcnRpY3VsYXIgbGluZSB0eXBlCi0jCi1zdWIgZG9fbGluZSB7Ci0gICAgbXkgJHRva2VuID0gc2hpZnQ7Ci0gICAgbXkgJGNvbmZsaW5lID0gc2hpZnQ7Ci0gICAgbXkgKEBhbnN3ZXJzLCAkY291bnRlciwgJGkpOwotIyAgICBkZWJ1ZyhteV9EdW1wZXIoJGNvbmZsaW5lKSk7Ci0gICAgUHJpbnQgKCJcbkNvbmZpZ3VyaW5nOiAkdG9rZW5cbiIpOwotICAgIFByaW50ICgiRGVzY3JpcHRpb246XG4gICIsam9pbigiXG4gICAgIixAeyRjb25mbGluZS0+eydpbmZvJ319KSwiXG5cbiIpOwotICAgIGZvcigkaT0wOyAkaSA8PSAkI3skY29uZmxpbmUtPnsncXVlc3Rpb24nfX07ICRpKyspIHsKLQlpZiAoZGVmaW5lZCgkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0pICYmCi0JICAgICRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSBuZSAiIikgewotCSAgICBteSAkcSA9ICRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXTsKLQkgICAgJHEgPX4gcy9cJChcZCspLyRhbnN3ZXJzWyQxXS9nOwotCSAgICBkZWJ1ZygiYWZ0ZXI6ICR0ZXJtLCAkcSwgIiwkY29uZmxpbmUtPnsndmFsaWRhbnN3ZXInfVskaV0sIlxuIik7Ci0JICAgICRhbnN3ZXJzWyRpXSA9IGdldF9hbnN3ZXIoJHRlcm0sICRxLAotCQkJCSAgICAgICRjb25mbGluZS0+eyd2YWxpZGFuc3dlcid9WyRpXSk7Ci0JICAgICRhbnN3ZXJzWyRpXSA9fiBzL1wiL1xcXCIvZzsKLQkgICAgJGFuc3dlcnNbJGldID0gJyInIC4gJGFuc3dlcnNbJGldIC4gJyInIGlmICgkYW5zd2Vyc1skaV0gPX4gL1xzLyk7Ci0JfQotICAgIH0KLSAgICBpZiAoJCN7JGNvbmZsaW5lLT57J2xpbmUnfX0gPT0gLTEpIHsKLQlteSAoJGksJGxpbmUpOwotCWZvcigkaT0wOyAkaSA8PSAkI3skY29uZmxpbmUtPnsncXVlc3Rpb24nfX07ICRpKyspIHsKLQkgICAgbmV4dCBpZiAoIWRlZmluZWQoJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldKSB8fAotCQkgICAgICRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSBlcSAiIik7Ci0JICAgICRsaW5lIC49ICIgXCQiIC4gJGk7Ci0JfQotCXB1c2ggQHskY29uZmxpbmUtPnsnbGluZSd9fSwgJGxpbmU7Ci0gICAgfQotCi0gICAgZm9yZWFjaCBteSAkbGluZSAoQHskY29uZmxpbmUtPnsnbGluZSd9fSkgewotCW15ICRmaW5pc2hlZCA9ICRsaW5lOwotCWRlYnVnKCJwcmVsaW5lOiAkZmluaXNoZWRcbiIpOwotCWRlYnVnKCJhbnN3ZXJzOiAiLG15X0R1bXBlcihcQGFuc3dlcnMpKTsKLQkkZmluaXNoZWQgPX4gcy9cJChcZCspLyRhbnN3ZXJzWyQxXS9nOwotCWlmICgkbGluZSA9fiBzL15ldmFsXHMrLy8pIHsKLQkgICAgZGVidWcoImV2YWw6ICRmaW5pc2hlZFxuIik7Ci0JICAgICRmaW5pc2hlZCA9IGV2YWwgJGZpbmlzaGVkOwotCSAgICBkZWJ1ZygiZXZhbCByZXN1bHRzOiAkZmluaXNoZWRcbiIpOwotCX0KLQkkZmluaXNoZWQgPSAkdG9rZW4gLiAiICIgLiAkZmluaXNoZWQ7Ci0JUHJpbnQgKCJcbkZpbmlzaGVkIE91dHB1dDogJGZpbmlzaGVkXG4iKTsKLQlwdXNoIEB7JGNvbmZsaW5lLT57J3Jlc3VsdHMnfX0sJGZpbmlzaGVkOwotICAgIH0KLX0KLQotIwotIyByZWFkIGFsbCBzZXRzIG9mIGNvbmZpZyBmaWxlcyBpbiB0aGUgdmFyaW91cyBzdWJkaXJlY3Rvcmllcy4KLSMKLXN1YiByZWFkX2NvbmZpZ19maWxlcyB7Ci0gICAgbXkgJHJlYWRkaXIgPSBzaGlmdDsKLSAgICBteSAkZmlsZXR5cGVzID0gc2hpZnQ7Ci0gICAgb3BlbmRpcihESCwgJHJlYWRkaXIpIHx8IGRpZSAibm8gc3VjaCBkaXJlY3RvcnkgJHJlYWRkaXIsIGRpZCB5b3UgcnVuIG1ha2UgaW5zdGFsbD9cbiI7Ci0gICAgbXkgJGRpcjsKLSAgICBteSAkY29uZmlnZmlsZW5hbWU9InNubXBjb25mLWNvbmZpZyI7Ci0KLSAgICB3aGlsZShkZWZpbmVkKCRkaXIgPSByZWFkZGlyKERIKSkpIHsKLQluZXh0IGlmICgkZGlyID1+IC9eXC4vKTsKLQluZXh0IGlmICgkZGlyID1+IC9DVlMvKTsKLQlkZWJ1ZygiZGlyIGVudHJ5OiAkZGlyXG4iKTsKLQlpZiAoLWQgIiRyZWFkZGlyLyRkaXIiICYmIC1mICIkcmVhZGRpci8kZGlyLyRjb25maWdmaWxlbmFtZSIpIHsKLQotCSAgICBteSAkY29uZmZpbGU7Ci0KLQkgICAgIyByZWFkIHRoZSB0b3AgbGV2ZWwgY29uZmlndXJhdGlvbiBpbmZvcmFtYXRpb24gYWJvdXQgdGhlIGRpcmVjb3RyeS4KLQkgICAgb3BlbihJLCAiJHJlYWRkaXIvJGRpci8kY29uZmlnZmlsZW5hbWUiKTsKLQkgICAgd2hpbGUoPEk+KSB7Ci0JCSRjb25mZmlsZSA9ICQxIGlmICgvZm9yY29uZmZpbGU6ICguKikvKTsKLQkgICAgfQotCSAgICBjbG9zZShJKTsKLQotCSAgICAjIG5vIFJFQURNRSBpbmZvcm1hdGluby4KLQkgICAgaWYgKCRjb25mZmlsZSBlcSAiIikgewotCQlwcmludCBTVERFUlIgIldhcm5pbmc6IE5vICdmb3Jjb25mZmlsZScgaW5mb3JtYXRpb24gaW4gJHJlYWRkaXIvJGRpci8kY29uZmlnZmlsZW5hbWVcbiI7Ci0JCW5leHQ7Ci0JICAgIH0KLQotCSAgICAjIHJlYWQgYWxsIHRoZSBkYWF0IGluIHRoZSBkaXJlY3RvcnkKLQkgICAgJGZpbGV0eXBlcy0+eyRjb25mZmlsZX0gPSByZWFkX2NvbmZpZ19pdGVtcygiJHJlYWRkaXIvJGRpciIsICRjb25mZmlsZSk7Ci0JfSBlbHNlIHsKLQkgICAgIyBubyBSRUFETUUgaW5mb3JtYXRpbm8uCi0JICAgIHByaW50IFNUREVSUiAiV2FybmluZzogTm8gJGNvbmZpZ2ZpbGVuYW1lIGZpbGUgZm91bmQgaW4gJHJlYWRkaXIvJGRpclxuIjsKLQl9Ci0gICAgfQotICAgIGNsb3NlZGlyIERIOwotfQotCi0jCi0jIHJlYWQgZWFjaCBjb25maWd1cmF0aW9uIGZpbGUgaW4gYSBkaXJlY3RvcnkKLSMKLXN1YiByZWFkX2NvbmZpZ19pdGVtcyB7Ci0gICAgbXkgJGl0ZW1kaXIgPSBzaGlmdDsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG9wZW5kaXIoSVRFTVMsICRpdGVtZGlyKTsKLSAgICBteSAkZmlsZTsKLSAgICBteSBAcmVzdWx0czsKLSAgICB3aGlsZShkZWZpbmVkKCRmaWxlID0gcmVhZGRpcihJVEVNUykpKSB7Ci0JbmV4dCBpZiAoJGZpbGUgPX4gL34kLyk7Ci0JbmV4dCBpZiAoJGZpbGUgPX4gL15zbm1wY29uZi1jb25maWckLyk7Ci0JaWYgKC1mICIkaXRlbWRpci8kZmlsZSIpIHsKLQkgICAgbXkgJHJlcyA9IHJlYWRfY29uZmlnX2l0ZW0oIiRpdGVtZGlyLyRmaWxlIiwgJHR5cGUpOwotCSAgICBpZiAoc2NhbGFyKGtleXMoJSRyZXMpKSA+IDApIHsKLQkJcHVzaCBAcmVzdWx0cywgJHJlczsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgY2xvc2VkaXIoSVRFTVMpOwotICAgIHJldHVybiBcQHJlc3VsdHM7Ci19Ci0KLSMKLSMgbWFyayBhIGxpc3Qgb2YgdG9rZW5zIGFzIGEgc3BlY2lhbCAiZ3JvdXAiCi0jCi1zdWIgcmVhZF9jb25maWdfZ3JvdXAgewotICAgIG15ICgkZmgsICRncm91cCwgJHR5cGUpID0gQF87Ci0gICAgbXkgJGxpbmU7Ci0gICAgZGVidWcoImhhbmRsaW5nIGdyb3VwICRncm91cFxuIik7Ci0gICAgcHVzaCAoQHskZ3JvdXBzeyRncm91cH19LFsnZmlsZXR5cGUnLCAkdHlwZV0pOwotICAgIHdoaWxlKCRsaW5lID0gPCRmaD4pIHsKLQljaG9tcCgkbGluZSk7Ci0JbmV4dCBpZiAoJGxpbmUgPX4gL15ccyokLyk7Ci0JbmV4dCBpZiAoJGxpbmUgPX4gL15cIy8pOwotCXJldHVybiAkbGluZSBpZiAoJGxpbmUgIX4gL14oc2luZ2xlfG11bHRpcGxlfG1lc3NhZ2V8ZmlsZXR5cGV8c3ViZ3JvdXApLyk7Ci0JbXkgKCR0eXBlLCAkdG9rZW4sICRyZXN0KSA9ICgkbGluZSA9fiAvXihcdyspXHMrKFteXHNdKylccyooLiopLyk7Ci0JZGVidWcgKCJyZWFkaW5nIGdyb3VwICRncm91cCA6ICR0eXBlIC0+ICR0b2tlbiAtPiAkcmVzdFxuIik7Ci0JcHVzaCAoQHskZ3JvdXBzeyRncm91cH19LCBbJHR5cGUsICR0b2tlbiwgJHJlc3RdKTsKLSAgICB9Ci0gICAgcmV0dXJuOwotfQotCQotCi0jCi0jIFBhcnNlIG9uZSBmaWxlCi0jCi1zdWIgcmVhZF9jb25maWdfaXRlbSB7Ci0gICAgbXkgJGl0ZW1maWxlID0gc2hpZnQ7Ci0gICAgbXkgJGl0ZW1jb3VudDsKLSAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZSgkaXRlbWZpbGUpOwotICAgIHJldHVybiBpZiAoIWRlZmluZWQoJGZoKSk7Ci0gICAgbXkgKCVyZXN1bHRzLCAkY3VydG9rZW4pOwotICAgIGRlYnVnKCJ0b2tlbml0ZW1zOiAgIiwgbXlfRHVtcGVyKFwldG9rZW5pdGVtcykpOwotICB0b3B3aGlsZToKLSAgICB3aGlsZSgkbGluZSA9IDwkZmg+KSB7Ci0JbmV4dCBpZiAoJGxpbmUgPX4gL15ccypcIy8pOwotCW15ICgkdG9rZW4sICRyZXN0KSA9ICgkbGluZSA9fiAvXihcdyspXHMrKC4qKS8pOwotCW5leHQgaWYgKCFkZWZpbmVkKCR0b2tlbikgfHwgIWRlZmluZWQoJHJlc3QpKTsKLQl3aGlsZSAoJHRva2VuIGVxICdncm91cCcpIHsKLQkgICAgIyBoYW5kbGUgc3BlY2lhbCBncm91cCBsaXN0Ci0JICAgIG15ICRuZXh0ID0gcmVhZF9jb25maWdfZ3JvdXAoJGZoLCAkcmVzdCwkdHlwZSk7Ci0JICAgIGlmICgkbmV4dCkgewotCQkoJHRva2VuLCAkcmVzdCkgPSAoJG5leHQgPX4gL14oXHcrKVxzKyguKikvKTsKLQkgICAgfSBlbHNlIHsKLQkJbmV4dCB0b3B3aGlsZTsKLQkgICAgfQotCX0KLQlkZWJ1ZygidG9rZW46ICR0b2tlbiA9PiAkcmVzdFxuIik7Ci0JaWYgKCR0b2tlbiBlcSAnc3RlYWwnKSB7Ci0JICAgIGZvcmVhY2ggbXkgJHN0ZWFsZnJvbSAoa2V5cygleyRyZXN1bHRzeyRyZXN0fX0pKSB7Ci0JCWlmICghZGVmaW5lZCgkcmVzdWx0c3skY3VydG9rZW59eyRzdGVhbGZyb219KSkgewotCQkgICAgQHskcmVzdWx0c3skY3VydG9rZW59eyRzdGVhbGZyb219fSA9IAotCQkJQHskcmVzdWx0c3skcmVzdH17JHN0ZWFsZnJvbX19OwotCQl9Ci0JICAgIH0KLQl9IGVsc2lmIChkZWZpbmVkKCR0b2tlbml0ZW1zeyR0b2tlbn0pKSB7Ci0JICAgIGlmICghZGVmaW5lZCgkY3VydG9rZW4pKSB7Ci0JCWRpZSAiZXJyb3IgaW4gY29uZmlndXJhdGlvbiBmaWxlICRpdGVtZmlsZSwgbm8gdG9rZW4gc2V0XG4iOwotCSAgICB9Ci0JICAgICRyZXN0ID1+IHMvXlwjLy87Ci0JICAgIHB1c2ggQHskcmVzdWx0c3skY3VydG9rZW59eyR0b2tlbn19LCRyZXN0OwotCX0gZWxzaWYgKGRlZmluZWQoJGFycmF5aXRlbXN7JHRva2VufSkpIHsKLQkgICAgaWYgKCFkZWZpbmVkKCRjdXJ0b2tlbikpIHsKLQkJZGllICJlcnJvciBpbiBjb25maWd1cmF0aW9uIGZpbGUgJGl0ZW1maWxlLCBubyB0b2tlbiBzZXRcbiI7Ci0JICAgIH0KLQkgICAgbXkgKCRudW0sICRuZXdyZXN0KSA9ICgkcmVzdCA9fiAvXihcZCspXHMrKC4qKS8pOwotCSAgICBpZiAoIWRlZmluZWQoJG51bSkgfHwgIWRlZmluZWQoJG5ld3Jlc3QpKSB7Ci0JCXdhcm4gImludmFsaWQgY29uZmlnIGxpbmU6ICRsaW5lXG4iOwotCSAgICB9IGVsc2UgewotCQkkcmVzdWx0c3skY3VydG9rZW59eyR0b2tlbn1bJG51bV0gPSAkbmV3cmVzdDsKLQkgICAgfQotCX0gZWxzaWYgKCR0b2tlbiA9fiAvXnRva2VuXHMqJC8pIHsKLQkgICAgJHJlc3QgPSBsYygkcmVzdCk7Ci0JICAgICRjdXJ0b2tlbiA9ICRyZXN0OwotCSAgICBpZiAoISBleGlzdHMgJHJlc3VsdHN7JGN1cnRva2VufXsnZGVmaW5lZCd9KSB7Ci0JCXB1c2ggQHskcmVzdWx0c3sndGhldG9rZW5zJ319LCAkY3VydG9rZW47Ci0JCSRyZXN1bHRzeyRjdXJ0b2tlbn17J2RlZmluZWQnfSA9IDE7Ci0JICAgIH0KLQkgICAgJHRva2VubWFweyRjdXJ0b2tlbn0gPSAkcmVzdWx0c3skY3VydG9rZW59OwotCSAgICBkZWJ1ZygiY3VycmVudCB0b2tlbiBzZXQgdG8gJHRva2VuXG4iKTsKLQl9IGVsc2UgewotCSAgICBwdXNoIEB7JHJlc3VsdHN7JHRva2VufX0sJHJlc3Q7Ci0JfQotICAgIH0KLSAgICByZXR1cm4gXCVyZXN1bHRzOwotfQotCi1zdWIgZGVidWcgewotICAgIHByaW50IEBfIGlmICgkb3B0c3snZCd9KTsKLX0KLQotc3ViIG91dHB1dF9maWxlcyB7Ci0gICAgbXkgJGZpbGV0eXBlcyA9IHNoaWZ0OwotICAgIG15ICR0ZXJtID0gc2hpZnQ7Ci0gICAgZm9yZWFjaCBteSAkZnQgKGtleXMoJSRmaWxldHlwZXMpKSB7Ci0JbmV4dCBpZiAoISRkaWRmaWxleyRmdH0pOwotCW15ICRvdXRwdXRmID0gJGZ0OwotCWlmICgtZiAkb3V0cHV0ZiAmJiAhJG9wdHN7J2YnfSkgewotCSAgICBwcmludCAiXG5FcnJvcjogQW4gJG91dHB1dGYgZmlsZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIGRpcmVjdG9yeS5cblxuIjsKLQkgICAgbXkgJGFucyA9IGdldF9hbnN3ZXIoJHRlcm0sIidvdmVyd3JpdGUnLCAnc2tpcCcsICdyZW5hbWUnIG9yICdhcHBlbmQnPyAiLHZhbGlkX2Fuc3dlcnMocXcobyBvdmVyd3JpdGUgciByZW5hbWUgcyBza2lwIGEgYXBwZW5kKSkpOwotCSAgICBuZXh0IGlmICgkYW5zID1+IC9eKHN8c2tpcCkkL2kpOwotCSAgICBpZiAoJGFucyA9fiAvXihhfGFwcGVuZCkvKSB7Ci0JCSRvdXRwdXRmID0gIj4kb3V0cHV0ZiI7Ci0JICAgIH0gZWxzaWYgKCRhbnMgPX4gL14ocnxyZW5hbWUpJC9pKSB7Ci0JCSMgZGVmYXVsdCB0byByZW5hbWUgZm9yIGVycm9yIGNvbmRpdGlvbnMKLQkJJG91dHB1dGYgPSAkdGVybS0+cmVhZGxpbmUoIlNhdmUgdG8gd2hhdCBuZXcgZmlsZSBuYW1lIGluc3RlYWQgKG9yICdza2lwJyk/ICIpOwotCSAgICB9Ci0JfQotCSRkaWRmaWxleyRmdH0gPSAkb3V0cHV0ZjsKLQlvcGVuKE8sIj4kb3V0cHV0ZiIpIHx8IHdhcm4gImNvdWxkbid0IHdyaXRlIHRvICRvdXRwdXRmXG4iOwotCXByaW50IE8gIiMiIHggNzUsIlxuIjsKLQlwcmludCBPICIjXG4jICRmdFxuIjsKLQlwcmludCBPICIjXG4jICAgLSBjcmVhdGVkIGJ5IHRoZSBzbm1wY29uZiBjb25maWd1cmF0aW9uIHByb2dyYW1cbiNcbiI7Ci0JZm9yZWFjaCBteSAkc2VjdCAoQHskZmlsZXR5cGVzLT57JGZ0fX0pIHsKLQkgICAgbXkgJHNlY3RoZWxwID0gMDsKLQkgICAgZm9yZWFjaCBteSAkdG9rZW4gKEB7JHNlY3QtPnsndGhldG9rZW5zJ319KSB7Ci0JCWlmICgkI3skc2VjdC0+eyR0b2tlbn17J3Jlc3VsdHMnfX0gPj0gMCkgewotCQkgICAgaWYgKCRzZWN0aGVscCsrID09IDApIHsKLQkJCXByaW50IE8gIiMiIHggNzUsIlxuIyBTRUNUSU9OOiAiLAotCQkJam9pbigiXG4jICAgICAgICAgICIsIEB7JHNlY3QtPnt0aXRsZX19KSwgIlxuI1xuIjsKLQkJCXByaW50IE8gIiMgICAiLCBqb2luKCJcbiMgICAiLEB7JHNlY3QtPntkZXNjcmlwdGlvbn19KSwKLQkJCSJcbiI7Ci0JCSAgICB9Ci0JCSAgICBwcmludCBPICJcbiMgJHRva2VuOiAiLAotCQkgICAgam9pbigiXG4jICAgIixAeyRzZWN0LT57JHRva2VufXtpbmZvfX0pLCAiXG5cbiI7Ci0JCSAgICBmb3JlYWNoIG15ICRyZXN1bHQgKEB7JHNlY3QtPnskdG9rZW59eydyZXN1bHRzJ319KSB7Ci0JCQlwcmludCBPICIkcmVzdWx0XG4iOwotCQkgICAgfQotCQl9Ci0JICAgIH0KLQkgICAgcHJpbnQgTyAiXG5cblxuIjsKLQl9Ci0JaWYgKCQjeyR1bmtub3dueyRmdH19ID4gLTEpIHsKLQkgICAgcHJpbnQgTyAiI1xuIyBVbmtub3duIGRpcmVjdGl2ZXMgcmVhZCBpbiBmcm9tIG90aGVyIGZpbGVzIGJ5IHNubXBjb25mXG4jXG4iOwotCSAgICBmb3JlYWNoIG15ICR1bmtub3duIChAeyR1bmtub3dueyRmdH19KSB7Ci0JCXByaW50IE8gJHVua25vd24sIlxuIjsKLQkgICAgfQotCX0KLQljbG9zZShPKTsKLSAgICB9Ci19Ci0KLXN1YiBnZXRfYW5zd2VyIHsKLSAgICBteSAoJHRlcm0sICRxdWVzdGlvbiwgJHJlZ2V4cCwgJGRlZmF1bHR2YWwpID0gQF87Ci0gICAgJHF1ZXN0aW9uIC49ICIgKGRlZmF1bHQgPSAkZGVmYXVsdHZhbCkiIGlmIChkZWZpbmVkKCRkZWZhdWx0dmFsKSAmJiAkZGVmYXVsdHZhbCBuZSAiIik7Ci0gICAgJHF1ZXN0aW9uIC49ICI6ICI7Ci0gICAgbXkgJGFucyA9ICR0ZXJtLT5yZWFkbGluZSgkcXVlc3Rpb24pOwotICAgIHJldHVybiAkZGVmYXVsdHZhbCBpZiAoJGFucyBlcSAiIiAmJiBkZWZpbmVkKCRkZWZhdWx0dmFsKSAmJiAKLQkJCSAgICRkZWZhdWx0dmFsIG5lICIiKTsKLSAgICB3aGlsZSAoISghZGVmaW5lZCgkcmVnZXhwKSB8fAotCSAgICAgJHJlZ2V4cCBlcSAiIiB8fAotCSAgICAgJGFucyA9fiAvJHJlZ2V4cC8pKSB7Ci0JcHJpbnQgImludmFsaWQgYW5zd2VyISAgSXQgbXVzdCBtYXRjaCB0aGlzIHJlZ3VsYXIgZXhwcmVzc2lvbjogJHJlZ2V4cFxuIjsKLQkkYW5zID0gJHRlcm0tPnJlYWRsaW5lKCRxdWVzdGlvbik7Ci0gICAgfQotICAgIHJldHVybiAkZGVmYXVsdHZhbCBpZiAoJGFucyBlcSAiIiAmJiBkZWZpbmVkKCRkZWZhdWx0dmFsKSAmJiAKLQkJCSAgICRkZWZhdWx0dmFsIG5lICIiKTsKLSAgICByZXR1cm4gJGFuczsKLX0KLSAgICAKLXN1YiB2YWxpZF9hbnN3ZXJzIHsKLSAgICBteSBAbGlzdDsKLSAgICBmb3JlYWNoICRpIChAXykgewotCXB1c2ggQGxpc3QsICRpIGlmICgkaSk7Ci0gICAgfQotICAgIHJldHVybiAiXigiIC4gam9pbigifCIsQGxpc3QpIC4gIilcJCI7Ci19Ci0KLXN1YiByZWFkX2NvbmZpZyB7Ci0gICAgbXkgJGZpbGUgPSBzaGlmdDsKLSAgICBteSAkZmlsZXR5cGUgPSBzaGlmdDsKLSAgICByZXR1cm4gaWYgKCFkZWZpbmVkKCRmaWxldHlwZXN7JGZpbGV0eXBlfSkpOwotICAgIGlmICghIC1mICRmaWxlKSB7Ci0Jd2FybiAiJGZpbGUgZG9lcyBub3QgZXhpc3RcbiI7Ci0JcmV0dXJuOwotICAgIH0KLSAgICBvcGVuKEksJGZpbGUpOwotICAgIHdoaWxlKDxJPikgewotCW5leHQgaWYgKC9eXHMqXCMvKTsKLQluZXh0IGlmICgvXlxzKiQvKTsKLQljaG9tcDsKLQlteSAoJHRva2VuLCAkcmVzdCkgPSAvXlxzKihcdyspXHMrKC4qKS87Ci0JJHRva2VuID0gbGMoJHRva2VuKTsKLQluZXh0IGlmIChkZWZpbmVkKCRhbGxsaW5lc3skX30pKTsgIyBkcm9wIGR1cGxpY2F0ZSBsaW5lcwotCWlmIChkZWZpbmVkKCR0b2tlbm1hcHskdG9rZW59KSkgewotCSAgICBwdXNoIEB7JHRva2VubWFweyR0b2tlbn17J3Jlc3VsdHMnfX0sJF87Ci0JfSBlbHNlIHsKLQkgICAgcHVzaCBAeyR1bmtub3dueyRmaWxldHlwZX19LCRfOwotCX0KLQkkYWxsbGluZXN7JF99Kys7Ci0gICAgfQotICAgIGNsb3NlKEkpOwotfQotCi1zdWIgZGlzcGxheV9tZW51IHsKLSAgICBteSAlY29uZmlnOwotCi0gICAgd2hpbGUgKCQjXyA+IC0xICYmICRfWzBdID1+IC9eLS8pIHsKLQlteSAka2V5ID0gc2hpZnQ7Ci0JJGNvbmZpZ3ska2V5fSA9IHNoaWZ0OwotICAgIH0KLQotICAgIG15ICRjb3VudD0xOwotICAgIHByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7Ci0gICAgaWYgKCRjb25maWd7Jy1oZWFkJ30pIHsKLQlwcmludCAkY29uZmlneyctaGVhZCd9OwotCXByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7Ci0gICAgfQotICAgIG15IEBhbnN3ZXJzID0gQF87Ci0gICAgbXkgQGxpc3Q7Ci0gICAgaWYgKGRlZmluZWQoJGNvbmZpZ3snLWRlc2NyaXB0aW9ucyd9KSAmJiAKLQlyZWYoJGNvbmZpZ3snLWRlc2NyaXB0aW9ucyd9KSBlcSAiQVJSQVkiKSB7Ci0JQGxpc3QgPSBAeyRjb25maWd7Jy1kZXNjcmlwdGlvbnMnfX0KLSAgICB9IGVsc2UgewotCUBsaXN0ID0gQF87Ci0gICAgfQotICAgIGZvcmVhY2ggbXkgJGkgKEBsaXN0KSB7Ci0JcHJpbnRmICIgICUyZDogICRpXG4iLCAkY291bnQrKyBpZiAoJGkpOwotICAgIH0KLSAgICBwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOwotICAgIGlmIChkZWZpbmVkKCRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfSkpIHsKLQlpZiAocmVmKCRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfSkgZXEgJ0FSUkFZJykgewotCSAgICBwcmludCAiT3RoZXIgb3B0aW9uczogIiwgam9pbigiLCAiLAotCQkJCQkgIEB7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSksICJcbiI7Ci0JICAgIHB1c2ggQGFuc3dlcnMsIEB7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fTsKLQkgICAgcHVzaCBAYW5zd2Vycywga2V5cygleyRjb25maWd7Jy1tYXBhbnN3ZXJzJ319KTsKLQl9IGVsc2UgewotCSAgICBteSAkbWF4bGVuID0gMDsKLQkgICAgcHVzaCBAYW5zd2VycyxrZXlzKCV7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSk7Ci0JICAgIGZvcmVhY2ggbXkgJGkgKGtleXMoJXskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KSkgewotCQkkbWF4bGVuID0gbGVuZ3RoKCRpKSBpZiAobGVuZ3RoKCRpKSA+ICRtYXhsZW4pOwotCSAgICB9Ci0JICAgIGZvcmVhY2ggbXkgJGkgKGtleXMoJXskY29uZmlneyctb3RoZXJhbnN3ZXJzJ319KSkgewotCQlwcmludGYoIiAgJS0iIC4gJG1heGxlbiAuICJzOiAlc1xuIiwgJGksIAotCQkgICAgICAgJGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9eyRpfSk7Ci0JICAgIH0KLQl9Ci0JcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKLSAgICB9Ci0gICAgaWYgKCRjb25maWd7Jy10YWlsJ30pIHsKLQlwcmludCAkY29uZmlneyctdGFpbCd9OwotCXByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7Ci0gICAgfQotCi0gICAgaWYgKGRlZmluZWQoJGNvbmZpZ3snLXF1ZXN0aW9uJ30pKSB7Ci0Jd2hpbGUoMSkgewotCSAgICBteSAkbnVtZXhwcjsKLQkgICAgaWYgKCRjb25maWd7Jy1tdWx0aXBsZSd9KSB7Ci0JCSRudW1leHByID0gJ1tcZFxzLF0rfGFsbHxhfG5vbmV8bic7Ci0JICAgIH0gZWxzZSB7Ci0JCSRudW1leHByID0gJ1xkKyc7Ci0JICAgIH0KLQkgICAgcHVzaCBAYW5zd2VycywiIiBpZiAoJGNvbmZpZ3snLWRlZmF1bHR2YWx1ZSd9KTsKLQkgICAgJGFucyA9IGdldF9hbnN3ZXIoJHRlcm0sICRjb25maWd7Jy1xdWVzdGlvbid9LAotCQkJICAgICAgdmFsaWRfYW5zd2VycygkbnVtZXhwcixAYW5zd2VycyksCi0JCQkgICAgICAkY29uZmlneyctZGVmYXVsdHZhbHVlJ30pOwotCSAgICBpZiAoJGNvbmZpZ3snLW1hcGFuc3dlcnMnfXskYW5zfSkgewotCQkkYW5zID0gJGNvbmZpZ3snLW1hcGFuc3dlcnMnfXskYW5zfTsKLQkgICAgfQotCi0JICAgIGlmICgkYW5zID1+IC9eJG51bWV4cHIkLykgewotCQlpZiAoJGNvbmZpZ3snLW11bHRpcGxlJ30pIHsKLQkJICAgIG15IEBsaXN0ID0gc3BsaXQoL1xzKixccyovLCRhbnMpOwotCQkgICAgbXkgQHJldDsKLQkJICAgICRjb3VudCA9IDA7Ci0JCSAgICBmb3JlYWNoIG15ICRpIChAXykgewotCQkJJGNvdW50Kys7Ci0JCQlpZiAoJGFucyBlcSAiYWxsIiB8fCAkYW5zIGVxICJhIiAKLQkJCSAgICB8fCBncmVwKC9eJGNvdW50JC8sQGxpc3QpKSB7Ci0JCQkgICAgcHVzaCBAcmV0LCAkaTsKLQkJCX0KLQkJICAgIH0KLQkJICAgIHJldHVybiBAcmV0OwotCQl9IGVsc2UgewotCQkgICAgaWYgKCRhbnMgPD0gMCB8fCAkYW5zID4gJCNfKzEpIHsKLQkJCXdhcm4gImludmFsaWQgc2VsZWN0aW9uOiAkYW5zIFttdXN0IGJlIDEtIiAuCi0JCQkgICAgKCQjXysxKSAuICJdXG4iOwotCQkgICAgfSBlbHNlIHsKLQkJCXJldHVybiAkYW5zIGlmICgkY29uZmlneyctbnVtZXJpYyd9KTsKLQkJCSRjb3VudCA9IDA7Ci0JCQlmb3JlYWNoIG15ICRpIChAXykgewotCQkJICAgICRjb3VudCsrOwotCQkJICAgIGlmICgkYW5zIGVxICRjb3VudCkgewotCQkJCXJldHVybiAkaTsKLQkJCSAgICB9Ci0JCQl9Ci0JCSAgICB9Ci0JCX0KLQkgICAgfSBlbHNlIHsKLQkJcmV0dXJuICRhbnM7Ci0JICAgIH0KLQl9Ci0gICAgfQotfQotCi1zdWIgbXlfRHVtcGVyIHsKLSAgICBpZiAoJG9wdHN7J0QnfSkgewotCXJldHVybiBEdW1wZXIoQF8pOwotICAgIH0gZWxzZSB7Ci0JcmV0dXJuICJcbiI7Ci0gICAgfQotfQotCi1zdWIgZ2V0X3BlcnNpc3RlbnREaXIgewotICAgIG15ICRmaWxlID0gc2hpZnQ7Ci0gICAgbXkgJHJlc3VsdCA9IDA7Ci0gICAgaWYgKCEgLWYgJGZpbGUpIHsKLQlyZXR1cm4gMDsKLSAgICB9Ci0gICAgb3BlbihJLCRmaWxlKTsKLSAgICB3aGlsZSg8ST4pIHsKLQluZXh0IGlmICgvXlxzKlwjLyk7Ci0JbmV4dCBpZiAoL15ccyokLyk7Ci0JY2hvbXA7Ci0JbXkgKCR0b2tlbiwgJHJlc3QpID0gL15ccyooXHcrKVxzKyguKikvOwotICAgICAgICBpZiAobGMoJHRva2VuKSBlcSAicGVyc2lzdGVudGRpciIpIHsKLSAgICAgICAgICAkcmVzdWx0ID0gJHJlc3Q7Ci0gICAgICAgIH0KLSAgICAgICAgbmV4dDsKLSAgICB9Ci0gICAgY2xvc2UoSSk7Ci0gICAgcmV0dXJuICRyZXN1bHQ7Ci19Ci0KLSMgVXNhZ2U6ICAgJndpbjMyX3JlZ19yZWFkKCJrZXkiLCAidmFsdWUiKQotIyBFeGFtcGxlOiAmd2luMzJfcmVnX3JlYWQoIlNPRlRXQVJFXFxOZXQtU05NUCIsIlNOTVBTSEFSRVBBVEgiKTsKLSMgUmV0dXJuczogVmFsdWUgaWYgZm91bmQgaW4gSEtDVSBvciBIQ0xNLiAgT3RoZXJ3aXNlIGFuIGVtcHR5IHN0cmluZy4KLXN1YiB3aW4zMl9yZWdfcmVhZCB7Ci0gIG15ICRzdWJfa2V5ID0gc2hpZnQ7Ci0gIG15ICR2YWx1ZSA9IHNoaWZ0OwotCi0gIHJlcXVpcmUgV2luMzI6OlJlZ2lzdHJ5OwotICAgCi0gIG15ICgkaGtleSwgJWtleV92YWx1ZXMsICR0ZW1wLCAkbm9fd2Fybik7Ci0gCi0gICMgVHJ5IEhLQ1UgZmlyc3QKLSAgJG5vX3dhcm4gPSAkSEtFWV9DVVJSRU5UX1VTRVI7Ci0gIGlmICgkSEtFWV9DVVJSRU5UX1VTRVItPk9wZW4oJHN1Yl9rZXksICRoa2V5KSkKLSAgewotICAgICRoa2V5LT5HZXRWYWx1ZXMoXCVrZXlfdmFsdWVzKTsgICAKLSAgICBmb3JlYWNoICR0ZW1wIChzb3J0IGtleXMgJWtleV92YWx1ZXMpIHsKLSAgICAgIGlmICgkdGVtcCBlcSAkdmFsdWUpIHsKLSAgICAgICAgcmV0dXJuICRrZXlfdmFsdWVzeyR0ZW1wfVsyXTsKLSAgICAgIH0KLSAgICB9Ci0gICAgJGhrZXktPkNsb3NlKCk7IAotICB9Ci0KLSAgIyBUcnkgSEtMTSBzZWNvbmQKLSAgJG5vX3dhcm4gPSAkSEtFWV9MT0NBTF9NQUNISU5FOwotICBpZiAoJEhLRVlfTE9DQUxfTUFDSElORS0+T3Blbigkc3ViX2tleSwgJGhrZXkpKQotICB7Ci0gICAgJGhrZXktPkdldFZhbHVlcyhcJWtleV92YWx1ZXMpOwotICAgIGZvcmVhY2ggJHRlbXAgKHNvcnQga2V5cyAla2V5X3ZhbHVlcykgewotICAgICAgaWYgKCR0ZW1wIGVxICR2YWx1ZSkgewotICAgICAgICByZXR1cm4gJGtleV92YWx1ZXN7JHRlbXB9WzJdOwotICAgICAgfQotICAgIH0KLSAgICAkaGtleS0+Q2xvc2UoKTsgCi0gIH0KLSAgcmV0dXJuICIiOwotfQotCi0jIFVzYWdlOiAgICZteV9nZXRlbnYoImtleSIpCi0jIEV4YW1wbGU6ICZteV9nZXRlbnYoIlNOTVBTSEFSRVBBVEgiKTsKLSMgUmV0dXJuczogVW5peDogIEVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlICh1bmRlZiBpZiBub3QgZGVmaW5lZCkKLSMgICAgICAgICAgV2luMzI6IEhLQ1VcU29mdHdhcmVcTmV0LVNOTVBcKGtleSkgb3IKLSMgICAgICAgICAgV2luMzI6IEhLTE1cU29mdHdhcmVcTmV0LVNOTVBcKGtleSkgb3IKLSMgICAgICAgICAgV2luMzI6IEVudmlyb25tZW50IHZhcmlhYmxlIHZhbHVlICh1bmRlZiBpZiBub3QgZGVmaW5lZCkKLXN1YiBteV9nZXRlbnYgewotICBteSAka2V5ID0gc2hpZnQ7Ci0gIAotICAjIFVuaXgKLSAgaWYgKCReTyBuZSAnTVNXaW4zMicpIHsKLSAgICByZXR1cm4gJEVOVnska2V5fTsKLSAgfQotICAjIFdpbmRvd3MKLSAgZWxzZSB7Ci0gICAgbXkgJHRlbXAgPSAmd2luMzJfcmVnX3JlYWQoIlNPRlRXQVJFXFxOZXQtU05NUCIsIiRrZXkiKTsKLSAgICBpZiAoJHRlbXAgbmUgIiIpIHsKLSAgICAgIHJldHVybiAkdGVtcDsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICByZXR1cm4gJEVOVnska2V5fTsKLSAgICB9Ci0gIH0KLX0KLQpkaWZmIC0tZ2l0IGEvbG9jYWwvc25tcGNvbmYuaW4gYi9sb2NhbC9zbm1wY29uZi5pbgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZmY4MDI1Ci0tLSAvZGV2L251bGwKKysrIGIvbG9jYWwvc25tcGNvbmYuaW4KQEAgLTAsMCArMSw5MjkgQEAKKyMhL3Vzci9iaW4vcGVybCAtdworCisjCisjIEEgc2ltcGxlIGNvbmZpZ3VyYXRpb24gZmlsZSBidWlsZGVyIGJhc2VkIG9uIHF1ZXN0aW9ucyBsaXN0ZWQgaW4KKyMgaXRzIG93biBjb25maWd1cmF0aW9uIGZpbGUuICBJdCB3b3VsZCBjZXJ0YWlubHkgYmUgZWFzeSB0byB1c2UgdGhpcworIyBmb3Igb3RoZXIgKG5vbi1zbm1wKSBwcm9ncmFtcyBhcyB3ZWxsLgorIworCit1c2UgR2V0b3B0OjpTdGQ7Cit1c2UgVGVybTo6UmVhZExpbmU7Cit1c2UgSU86OkZpbGU7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIEZpbGU6OkNvcHk7CitpZiAoJF5PIGVxICdNU1dpbjMyJykgeworICBldmFsICdyZXF1aXJlIFdpbjMyOjpSZWdpc3RyeTsnOworICBpZiAoJEApIHsKKyAgICBwcmludCAiXG5XYXJuaW5nOiBQZXJsIG1vZHVsZSBXaW4zMjo6UmVnaXN0cnkgaXMgbm90IGluc3RhbGxlZC4gIFRoaXMgbW9kdWxlIGlzXG4iOworICAgIHByaW50ICIgICAgICAgICByZXF1aXJlZCB0byByZWFkIHRoZSBTTk1QU0hBUkVQQVRIIGFuZCBTTk1QQ09ORlBBVEggdmFsdWVzIGZyb20gXG4iOworICAgIHByaW50ICIgICAgICAgICB0aGUgcmVnaXN0cnkuICBUbyB1c2Ugc25tcGNvbmYgd2l0aG91dCB0aGUgbW9kdWxlIHlvdSBuZWVkIHRvXG4iOworICAgIHByaW50ICIgICAgICAgICBkZWZpbmUgU05NUFNIQVJFUEFUSCBhbmQgU05NUENPTkZQQVRIIGFzIGVudmlyb25tZW50IHZhcmlhYmxlc1xuIjsKKyAgICBwcmludCAiICAgICAgICAgb3IgdXNlIHRoZSAtYyBhbmQgLUkgY29tbWFuZCBsaW5lIG9wdGlvbnMuXG4iOworICB9Cit9CisKKyMgZ2xvYmFscworJXRva2VuaXRlbXM9cXcobGluZSAxIGluZm8gMSBjb21tZW50IDEpOworJWFycmF5aXRlbXM9cXcocXVlc3Rpb24gMSB2YWxpZGFuc3dlciAxKTsKKworIyBkZWZhdWx0IGZvbGRlciBmb3Igc25tcGNvbmYtZGF0YQoraWYgKGRlZmluZWQoJm15X2dldGVudigiU05NUFNIQVJFUEFUSCIpKSkgeworICAkb3B0c3snYyd9ID0gJm15X2dldGVudigiU05NUFNIQVJFUEFUSCIpIC4gIi9zbm1wY29uZi1kYXRhIjsKK30KK2Vsc2UgeworICAkb3B0c3snYyd9ID0gIi91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wY29uZi1kYXRhIjsKK30KKyAKKyMgZGVmYXVsdCBjb25maWcgZmlsZSBwYXRoCitpZiAoZGVmaW5lZCgmbXlfZ2V0ZW52KCJTTk1QQ09ORlBBVEgiKSkpIHsKKyAgJGNvbmZwYXRoID0gJm15X2dldGVudigiU05NUENPTkZQQVRIIik7Cit9CitlbHNlIHsKKyAgJGNvbmZwYXRoID0gIi91c3IvbG9jYWwvc2hhcmUvc25tcCI7Cit9CisKKyMgaG9tZSBlbnZpcm9ubWVudCB2YXJpYWJsZQoraWYgKGRlZmluZWQoJm15X2dldGVudigiSE9NRSIpKSkgeworICAkaG9tZSA9ICZteV9nZXRlbnYoIkhPTUUiKSAuICIvLnNubXAiOworfQorZWxzZSB7CisgICRob21lID0gIihIT01FIGRpciAtIG4vYSkiOworfQorCisjIHJlYWQgdGhlIGFyZ3VtZW50IHN0cmluZworZ2V0b3B0cygicWFkaGZjOnBpSTpyOlI6ZzpHIiwgXCVvcHRzKTsKKworIyBkaXNwbGF5IGhlbHAKK2lmICgkb3B0c3snaCd9KSB7CisgICAgcHJpbnQgIiQwIFtvcHRpb25zXSBbRklMRVRPQ1JFQVRFLi4uXVxuIjsKKyAgICBwcmludCAib3B0aW9uczpcbiI7CisgICAgcHJpbnQgIiAgLWYgICAgICAgICAgIG92ZXJ3cml0ZSBleGlzdGluZyBmaWxlcyB3aXRob3V0IHByb21wdGluZ1xuIjsKKyAgICBwcmludCAiICAtaSAgICAgICAgICAgaW5zdGFsbCBjcmVhdGVkIGZpbGVzIGludG8gJGNvbmZwYXRoLlxuIjsKKyAgICBwcmludCAiICAtcCAgICAgICAgICAgaW5zdGFsbCBjcmVhdGVkIGZpbGVzIGludG8gJGhvbWUuXG4iOworICAgIHByaW50ICIgIC1JIERJUiAgICAgICBpbnN0YWxsIGNyZWF0ZWQgZmlsZXMgaW50byBESVIuXG4iOworICAgIHByaW50ICIgIC1hICAgICAgICAgICBEb24ndCBhc2sgYW55IHF1ZXN0aW9ucywganVzdCByZWFkIGluIGN1cnJlbnRcbiI7CisgICAgcHJpbnQgIiAgICAgICAgICAgICAgICAgICBjdXJyZW50IC5jb25mIGZpbGVzIGFuZCBjb21tZW50IHRoZW1cbiI7CisgICAgcHJpbnQgIiAgLXIgYWxsfG5vbmUgIFJlYWQgaW4gYWxsIG9yIG5vbmUgb2YgdGhlIC5jb25mIGZpbGVzIGZvdW5kLlxuIjsKKyAgICBwcmludCAiICAtUiBmaWxlLC4uLiAgUmVhZCBpbiBhIHBhcnRpY3VsYXIgbGlzdCBvZiAuY29uZiBmaWxlcy5cbiI7CisgICAgcHJpbnQgIiAgLWcgR1JPVVAgICAgIEFzayBhIHNlcmllcyBvZiBHUk9VUGVkIHF1ZXN0aW9ucy5cbiI7CisgICAgcHJpbnQgIiAgLUcgICAgICAgICAgIExpc3Qga25vd24gR1JPVVBzLlxuIjsKKyAgICBwcmludCAiICAtYyBjb25mX2RpciAgdXNlIGFsdGVybmF0ZSBjb25maWd1cmF0aW9uIGRpcmVjdG9yeS5cbiI7CisgICAgcHJpbnQgIiAgLXEgICAgICAgICAgIHJ1biBtb3JlIHF1aWV0bHkgd2l0aCBsZXNzIGFkdmljZS5cbiI7CisgICAgcHJpbnQgIiAgLWQgICAgICAgICAgIHR1cm4gb24gZGVidWdnaW5nIG91dHB1dC5cbiI7CisgICAgcHJpbnQgIiAgLUQgICAgICAgICAgIHR1cm4gb24gZGVidWdnaW5nIGR1bXBlciBvdXRwdXQuXG4iOworICAgIGV4aXQ7Cit9CisKKyMgc2V0dXAgdGVybWluYWwgaW50ZXJmYWNlLgorJEVOVnsnUEVSTF9STCd9PSdvPTAnIGlmICghZXhpc3RzKCRFTlZ7J1BFUkxfUkwnfSkpOworJHRlcm0gPSBuZXcgVGVybTo6UmVhZExpbmUgJ3NubXBjb25mJzsKKworIyByZWFkIGluIGNvbmZpZ3VyYXRpb24gZmlsZSBzZXQKK3JlYWRfY29uZmlnX2ZpbGVzKCRvcHRzeydjJ30sIFwlZmlsZXR5cGVzKTsKK2RlYnVnKG15X0R1bXBlcihcJWZpbGV0eXBlcykpOworCitpZiAoJG9wdHN7J0cnfSkgeworICAgIFByaW50KCJcbktub3duIEdST1VQcyBvZiB0b2tlbnM6XG5cbiIpOworICAgIGZvcmVhY2ggbXkgJGdyb3VwIChrZXlzKCVncm91cHMpKSB7CisJcHJpbnQgIiAgJGdyb3VwXG4iOworICAgIH0KKyAgICBQcmludCgiXG4iKTsKKyAgICBleGl0OworfQorCisjCisjIEV4cGFuZCB0aGUgc2VhcmNoIHBhdGggaW4gY2FzZSBpdCBjb250YWlucyBtdWx0aXBsZSBkaXJlY3Rvcmllcy4KKyMKK215ICRFTlZfU0VQQVJBVE9SID0gJ0BFTlZfU0VQQVJBVE9SQCc7CitteSBAc2VhcmNocGF0aCA9IHNwbGl0KC8kRU5WX1NFUEFSQVRPUi8sICRjb25mcGF0aCk7CitwdXNoIEBzZWFyY2hwYXRoLCAiL3Vzci9sb2NhbC9ldGMvc25tcCI7CitwdXNoIEBzZWFyY2hwYXRoLCAiLiI7CitwdXNoIEBzZWFyY2hwYXRoLCAiJGhvbWUiOworCisjIFJlbW92ZSB0cmFpbGluZyAvJ3Mgb3IgXCdzCitmb3IgKG15ICRpPTA7ICRpIDw9ICQjc2VhcmNocGF0aDsgJGkrKykgeworICAkc2VhcmNocGF0aFskaV0gPX4gLyguKj8pKFtcL1xcXSkqJC87CisgICRzZWFyY2hwYXRoWyRpXSA9ICQxOworfQorCisjIERldGVybWluZSBwZXJzaXN0ZW50IGRpcmVjdG9yeS4gIE9yZGVyIG9mIHByZWZlcmVuY2U6CisjIAorIyBmaWxlIGluIFNOTVBfUEVSU0lTVEVOVF9GSUxFIGVudmlyb25tZW50IHZhcmlhYmxlCisjIGRpcmVjdG9yeSBkZWZpbmVkIGJ5IHBlcnNpc3RlbnREaXIgc25tcC5jb25mIHZhcmlhYmxlCisjIGRpcmVjdG9yeSBpbiBTTk1QX1BFUlNJU1RFTlRfRElSIGVudmlyb25tZW50IHZhcmlhYmxlCisjIGRlZmF1bHQgUEVSU0lTVEVOVF9ESVJFQ1RPUlkgZGlyZWN0b3J5CitteSAkcGVyc2lzdGVudERpciA9ICIiOworbXkgJHBlcnNpc3RlbnRGaWxlID0gIiI7CisKKyMgU05NUF9QRVJTSVNURU5UX0ZJTEUgZW52aXJvbm1lbnQgdmFyaWFibGUKK2lmIChkZWZpbmVkKCZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9GSUxFIikpKSB7CisgICRwZXJzaXN0ZW50RmlsZSA9ICZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9GSUxFIik7CisgIGRlYnVnICgicGVyc2lzdGVudCBmaWxlOiBTTk1QX1BFUlNJU1RFTlRfRklMRSBlbnZpcm9ubWVudCB2YXJpYWJsZSBzZXRcbiIpOworfQorCisjIHNubXAuY29uZiBwZXJzaXN0ZW50RGlyCitpZiAoISgkcGVyc2lzdGVudERpcikgJiYgISgkcGVyc2lzdGVudEZpbGUpKSB7CisgIGZvcmVhY2ggbXkgJGkgKEBzZWFyY2hwYXRoKSB7CisgICAgZGVidWcgKCJTZWFyY2hpbmcgZmlsZSAkaS9zbm1wLmNvbmYgZm9yIHBlcnNpc3RlbnREaXJcbiIpOworICAgIG15ICR0ZW1wID0gZ2V0X3BlcnNpc3RlbnREaXIoIiRpL3NubXAuY29uZiIpOworICAgIGlmICgkdGVtcCkgeworICAgICAgZGVidWcoInBlcnNpc3RlbnQgZGlyZWN0b3J5OiBzZXQgdG8gJHRlbXAgaW4gJGkvc25tcC5jb25mXG4iKTsKKyAgICAgICRwZXJzaXN0ZW50RGlyID0gJHRlbXA7CisgICAgICBsYXN0OworICAgIH0KKyAgfQorfQorCisjIFNOTVBfUEVSU0lTVEVOVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUKK2lmICghKCRwZXJzaXN0ZW50RGlyKSAmJiAhKCRwZXJzaXN0ZW50RmlsZSkpIHsKKyAgaWYgKCZteV9nZXRlbnYoIlNOTVBfUEVSU0lTVEVOVF9ESVIiKSkgeworICAgICRwZXJzaXN0ZW50RGlyID0gJm15X2dldGVudigiU05NUF9QRVJTSVNURU5UX0RJUiIpOworICAgIGRlYnVnICgicGVyc2lzdGVudCBkaXJlY3Rvcnk6IFNOTVBfUEVSU0lTVEVOVF9ESVIgZW52aXJvbm1lbnQgdmFyaWFibGUgc2V0XG4iKTsKKyAgfQorfQorCisjIFBFUlNJU1RFTlRfRElSRUNUT1JZIGRlZmF1bHQgdmFyaWFibGUKK2lmICghKCRwZXJzaXN0ZW50RGlyKSAmJiAhKCRwZXJzaXN0ZW50RmlsZSkpIHsKKyAgJHBlcnNpc3RlbnREaXIgPSAiL3Zhci9uZXQtc25tcCI7CisgIGRlYnVnICgicGVyc2lzdGVudCBkaXJlY3Rvcnk6IFVzaW5nIGRlZmF1bHQgdmFsdWVcbiIpOworfQorCisjIFJlYnVpbGQgc2VhcmNoIHBhdGggd2l0aG91dCBwZXJzaXN0ZW50IGZvbGRlcgorIyBOb3RlOiAgcGVyc2lzdGVudCBmaWxlIGhhbmRsZWQgaW4gRmluZCBleGlzdGluZyAKKyMgZmlsZXMgdG8gcG9zc2libHkgcmVhZCBpbiBzZWN0aW9uCitpZiAoJHBlcnNpc3RlbnREaXIpIHsKKyAgIyBSZW1vdmUgdHJhaWxpbmcgLydzIG9yIFwncworICAkcGVyc2lzdGVudERpciA9fiAvKC4qPykoW1wvXFxdKSokLzsKKyAgJHBlcnNpc3RlbnREaXIgPSAkMTsKKyAgZGVidWcgKCJwZXJzaXN0ZW50IGRpcmVjdG9yeTogJHBlcnNpc3RlbnREaXJcbiIpOworCisgIG15IEBzZWFyY2hwYXRoX29sZCA9IEBzZWFyY2hwYXRoOworICBAc2VhcmNocGF0aCA9ICgpOworICBmb3JlYWNoIG15ICRwYXRoX3RlbXAgKEBzZWFyY2hwYXRoX29sZCkgeworICAgIGlmICgkcGF0aF90ZW1wIGVxICRwZXJzaXN0ZW50RGlyKSB7CisgICAgICBkZWJ1Zygic2tpcHBpbmcgcGVyc2lzdGVudCBkaXJlY3RvcnkgJHBhdGhfdGVtcFxuIik7CisgICAgICBuZXh0OworICAgIH0KKyAgICBwdXNoIEBzZWFyY2hwYXRoLCAkcGF0aF90ZW1wOworICB9Cit9CisKKyMgUmVzZXQgJGNvbmZwYXRoIHRvIHRoZSBmaXJzdCBwYXRoCiskY29uZnBhdGggPSAkc2VhcmNocGF0aFswXTsKKworIworIyBGaW5kIGV4aXN0aW5nIGZpbGVzIHRvIHBvc3NpYmx5IHJlYWQgaW4uCisjCitwdXNoIEBzZWFyY2hwYXRoLCAkb3B0c3tJfSBpZiAoJG9wdHN7SX0pOworZm9yZWFjaCBteSAkaSAoQHNlYXJjaHBhdGgpIHsKKyAgICBkZWJ1Zygic2VhcmNoaW5nICRpXG4iKTsKKyAgICBmb3JlYWNoIG15ICRmdCAoa2V5cyglZmlsZXR5cGVzKSkgeworICAgICAgICBpZiAoIiRpLyRmdCIgZXEgJHBlcnNpc3RlbnRGaWxlKSB7CisgICAgICAgICAgZGVidWcoInNraXBwaW5nIHBlcnNpc3RlbnQgZmlsZSAkaS8kZnRcbiIpOworICAgICAgICAgIG5leHQ7CisgICAgICAgIH0KKwlkZWJ1Zygic2VhcmNoaW5nIGZvciAkaS8kZnRcbiIpOworCSRrbm93bmZpbGVzeyIkaS8kZnQifSA9ICRmdCBpZiAoLWYgIiRpLyRmdCIpOworCW15ICRsb2NhbGZ0ID0gJGZ0OworCSRsb2NhbGZ0ID1+IHMvLmNvbmYvLmxvY2FsLmNvbmYvOworCSRrbm93bmZpbGVzeyIkaS8kbG9jYWxmdCJ9ID0gJGZ0IGlmICgtZiAiJGkvJGxvY2FsZnQiKTsKKyAgICB9Cit9CisKKyMKKyMgQXNrIHRoZSB1c2VyIGlmIHRoZXkgd2FudCB0aGVtIHRvIGJlIHJlYWQgaW4gYW5kIHJlYWQgdGhlbQorIworaWYgKGtleXMoJWtub3duZmlsZXMpKSB7CisgICAgbXkgQGZpbGVzOworICAgIGlmIChkZWZpbmVkKCRvcHRzeydyJ30pKSB7CisJaWYgKCRvcHRzeydyJ30gZXEgImFsbCIgfHwgJG9wdHN7J3InfSBlcSAiYSIpIHsKKwkgICAgQGZpbGVzID0ga2V5cygla25vd25maWxlcyk7CisJfSBlbHNpZiAoJG9wdHN7J3InfSBuZSAibm9uZSIgJiYgJG9wdHN7J3InfSBuZSAibiIpIHsKKwkgICAgcHJpbnQgInVua25vd24gYXJndW1lbnQgdG8gLXI6ICRvcHRzeydyJ31cbiI7CisJICAgIGV4aXQoMSk7CisJfQorICAgIH0gZWxzaWYoZGVmaW5lZCgkb3B0c3snUid9KSkgeworCUBmaWxlcyA9IHNwbGl0KC9ccyosXHMqLywkb3B0c3snUid9KTsKKwlmb3JlYWNoIG15ICRpIChAZmlsZXMpIHsKKwkgICAgbXkgJHggPSAkaTsKKwkgICAgJHggPX4gcy8uKlwvKFteXC9dKykkLyQxLzsKKwkgICAgJGtub3duZmlsZXN7JGl9ID0gJHg7CisJfQorCVByaW50KCJyZWFkaW5nOiAiLCBqb2luKCIsIixAZmlsZXMpLCJcbiIpOworICAgIH0gZWxzZSB7CisJQGZpbGVzID0gZGlzcGxheV9tZW51KC1oZWFkID0+ICJUaGUgZm9sbG93aW5nIGluc3RhbGxlZCBjb25maWd1cmF0aW9uIGZpbGVzIHdlcmUgZm91bmQ6XG4iLAorCQkJICAgICAgLXRhaWwgPT4gIldvdWxkIHlvdSBsaWtlIG1lIHRvIHJlYWQgdGhlbSBpbj8gIFRoZWlyIGNvbnRlbnQgd2lsbCBiZSBtZXJnZWQgd2l0aCB0aGVcbm91dHB1dCBmaWxlcyBjcmVhdGVkIGJ5IHRoaXMgc2Vzc2lvbi5cblxuVmFsaWQgYW5zd2VyIGV4YW1wbGVzOiBcImFsbFwiLCBcIm5vbmVcIixcIjNcIixcIjEsMiw1XCJcbiIsCisJCQkgICAgICAtbXVsdGlwbGUgPT4gMSwKKwkJCSAgICAgIC1xdWVzdGlvbiA9PiAnUmVhZCBpbiB3aGljaCcsCisJCQkgICAgICAtZGVmYXVsdHZhbHVlID0+ICdhbGwnLAorCQkJICAgICAgc29ydCBrZXlzKCVrbm93bmZpbGVzKSk7CisgICAgfQorICAgIGZvcmVhY2ggbXkgJGkgKEBmaWxlcykgeworCWRlYnVnKCJyZWFkaW5nICRpXG4iKTsKKwlyZWFkX2NvbmZpZygkaSwgJGtub3duZmlsZXN7JGl9KTsKKyAgICB9Cit9CisKK2lmICgkb3B0c3snZyd9KSB7CisgICAgbXkgQGdyb3VwcyA9IHNwbGl0KC8sOlxzLywkb3B0c3snZyd9KTsKKyAgICBmb3JlYWNoIG15ICRncm91cCAoQGdyb3VwcykgeworCWRvX2dyb3VwKCRncm91cCk7CisgICAgfQorfSBlbHNpZiAoJCNBUkdWID49IDApIHsKKyAgICAjCisgICAgIyBsb29wIHRocm91Z2ggcmVxdWVzdGVkIGZpbGVzLgorICAgICMKKyAgICBmb3JlYWNoIG15ICRpIChAQVJHVikgeworCWlmICghZGVmaW5lZCgkZmlsZXR5cGVzeyRpfSkpIHsKKwkgICAgd2FybiAiaW52YWxpZCBmaWxlOiAkaVxuIjsKKwl9IGVsc2UgeworCSAgICBpZiAoJG9wdHN7J2EnfSkgeworCQkkZGlkZmlsZXskaX0gPSAxOworCSAgICB9IGVsc2UgeworCQlidWlsZF9maWxlKCR0ZXJtLCAkaSwgJGZpbGV0eXBlc3skaX0pOworCSAgICB9CisJfQorICAgIH0KK30gZWxzZSB7CisgICAgIworICAgICMgYXNrIHVzZXIgdG8gc2VsZWN0IGZpbGUgdHlwZSB0byBvcGVyYXRlIG9uLgorICAgICMKKyAgICB3aGlsZSgxKSB7CisJbXkgJGxpbmUgPSBkaXNwbGF5X21lbnUoLWhlYWQgPT4gIkkgY2FuIGNyZWF0ZSB0aGUgZm9sbG93aW5nIHR5cGVzIG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIHlvdS5cblNlbGVjdCB0aGUgZmlsZSB0eXBlIHlvdSB3aXNoIHRvIGNyZWF0ZTpcbih5b3UgY2FuIGNyZWF0ZSBtb3JlIHRoYW4gb25lIGFzIHlvdSBydW4gdGhpcyBwcm9ncmFtKVxuIiwKKwkJCQktcXVlc3Rpb24gPT4gJ1NlbGVjdCBGaWxlJywKKwkJCQktb3RoZXJhbnN3ZXJzID0+IFsncXVpdCddLAorCQkJCS1tYXBhbnN3ZXJzID0+IHsgJ3EnID0+ICdxdWl0JyB9LAorCQkJCWtleXMoJWZpbGV0eXBlcykpOworCWxhc3QgaWYgKCRsaW5lIGVxICJxdWl0Iik7CisJZGVidWcoImZpbGUgc2VsZWN0ZWQ6ICRsaW5lXG4iKTsKKwlidWlsZF9maWxlKCR0ZXJtLCAkbGluZSwgJGZpbGV0eXBlc3skbGluZX0pOworICAgIH0KK30KKworIworIyBXcml0ZSBvdXQgdGhlIHJlc3VsdHMgdG8gdGhlIG91dHB1dCBmaWxlcy4KKyMKK291dHB1dF9maWxlcyhcJWZpbGV0eXBlcywgJHRlcm0pOworCisKKyMKKyMgRGlzcGxheSB0aGUgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY3JlYXRlZCBmb3IgdGhlIHVzZXIuCisjCitQcmludCgiXG5cblRoZSBmb2xsb3dpbmcgZmlsZXMgd2VyZSBjcmVhdGVkOlxuXG4iKTsKK0BkaWRmaWxlcyA9IGtleXMoJWRpZGZpbGUpOworZm9yZWFjaCBteSAkaSAoQGRpZGZpbGVzKSB7CisgICAgaWYgKCRkaWRmaWxleyRpfSBuZSAiMSIpIHsKKwlpZiAoJG9wdHN7J2knfSB8fCAkb3B0c3snSSd9KSB7CisgICAgICAgICAgJG9wdHN7J0knfSA9ICIkY29uZnBhdGgiIGlmICghJG9wdHN7J0knfSk7CisKKyAgICAgICAgICBpZiAoISAoLWQgIiRvcHRzeydJJ30iKSAmJiAhIChta2RpciAoIiRvcHRzeydJJ30iLCAwNzU1KSkpIHsKKwkgICAgcHJpbnQgIlxuQ291bGQgbm90IGNyZWF0ZSAkb3B0c3snSSd9IGRpcmVjdG9yeTogJCFcbiI7CisJICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisJICB9CisJICBlbHNlIHsKKyAgICAgICAgICAgIG1vdmUgKCIkb3B0c3snSSd9LyRpIiwgIiRvcHRzeydJJ30vJGkuYmFrIikgaWYgKC1mICIkb3B0c3snSSd9LyRpIik7CisgICAgICAgICAgICBpZiAobW92ZSAoIiRkaWRmaWxleyRpfSIsICIkb3B0c3snSSd9IikpIHsKKyAgICAgICAgICAgICAgcHJpbnQoIiAgJGRpZGZpbGV7JGl9IGluc3RhbGxlZCBpbiAkb3B0c3snSSd9XG4iKTsJICAgIAorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHByaW50ICJcbkNvdWxkIG5vdCBtb3ZlIGZpbGUgJGRpZGZpbGV7JGl9IHRvICRvcHRzeydJJ30vJGk6ICQhXG4iOworICAgICAgICAgICAgICBwcmludCAoIkZpbGUgJGRpZGZpbGV7JGl9IGxlZnQgaW4gY3VycmVudCBkaXJlY3RvcnlcbiIpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKwl9IGVsc2lmICgkb3B0c3sncCd9KSB7CisJICBpZiAoISAoLWQgIiRob21lIikgJiYgISAobWtkaXIgKCIkaG9tZSIsIDA3NTUpKSkgeworCSAgICBwcmludCAiXG5Db3VsZCBub3QgY3JlYXRlICRob21lIGRpcmVjdG9yeTogJCFcbiI7CisJICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisJICB9CisJICBlbHNlIHsJICAgIAorCSAgICBtb3ZlICgiJGhvbWUvJGkiLCAiJGhvbWUvJGkuYmFrIikgaWYgKC1mICIkaG9tZS8kaSIpOworCSAgICBpZiAobW92ZSAoIiRkaWRmaWxleyRpfSIsICIkaG9tZSIpKSB7CisJICAgICAgcHJpbnQoIiAgJGRpZGZpbGV7JGl9IGluc3RhbGxlZCBpbiAkaG9tZVxuIik7CisJICAgIH0KKwkgICAgZWxzZSB7CisJICAgICAgcHJpbnQgIlxuQ291bGQgbm90IG1vdmUgZmlsZSAkZGlkZmlsZXskaX0gdG8gJGhvbWU6ICQhXG4iOworCSAgICAgIHByaW50ICgiRmlsZSAkZGlkZmlsZXskaX0gbGVmdCBpbiBjdXJyZW50IGRpcmVjdG9yeVxuIik7CisgIAkgICAgfQorCSAgfQorICAJfSBlbHNlIHsKKwkgICAgUHJpbnQoIiAgJGRpZGZpbGV7JGl9ICIsCisJICAgICgkaSBuZSAkZGlkZmlsZXskaX0pPyJbIGZyb20gJGkgc3BlY2lmaWNhdGlvbnNdIjoiICIsIlxuIik7CisJICAgIGlmICgkb3B0c3snZCd9KSB7CisJCW9wZW4oSSwkZGlkZmlsZXskaX0pOworCQlkZWJ1ZygiICAgICIgLiBqb2luKCIgICAgIiw8ST4pIC4gIlxuIik7CisJCWNsb3NlKEkpOworCSAgICB9CisJfQorICAgIH0KK30KKworaWYgKCEkb3B0c3sncCd9ICYmICEkb3B0c3snaSd9ICYmICEkb3B0c3snSSd9KSB7CisgICAgUHJpbnQoIlxuVGhlc2UgZmlsZXMgc2hvdWxkIGJlIG1vdmVkIHRvICRjb25mcGF0aCBpZiB5b3UKK3dhbnQgdGhlbSB1c2VkIGJ5IGV2ZXJ5b25lIG9uIHRoZSBzeXN0ZW0uICBJbiB0aGUgZnV0dXJlLCBpZiB5b3UgYWRkIAordGhlIC1pIG9wdGlvbiB0byB0aGUgY29tbWFuZCBsaW5lIEknbGwgY29weSB0aGVtIHRoZXJlIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4KKworT3IsIGlmIHlvdSB3YW50IHRoZW0gZm9yIHlvdXIgcGVyc29uYWwgdXNlIG9ubHksIGNvcHkgdGhlbSB0bworJGhvbWUgLiAgSW4gdGhlIGZ1dHVyZSwgaWYgeW91IGFkZCB0aGUgLXAgb3B0aW9uIHRvIHRoZQorY29tbWFuZCBsaW5lIEknbGwgY29weSB0aGVtIHRoZXJlIGF1dG9tYXRpY2FsbHkgZm9yIHlvdS4KKworIik7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGdW5jdGlvbnMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitzdWIgUHJpbnQgeworICAgIHByaW50IEBfIGlmICghJG9wdHN7J3EnfSk7Cit9CisjCisjIGhhbmRsZSBhIGdyb3VwIG9mIHF1ZXN0aW9ucworIworc3ViIGdldF95bl9tYXliZSB7CisgICAgbXkgJHF1ZXN0aW9uID0gc2hpZnQ7CisgICAgbXkgJGFucyA9ICJ5IjsKKyAgICBpZiAoJHF1ZXN0aW9uIG5lICIiKSB7CisJJGFucyA9IGdldF9hbnN3ZXIoJHRlcm0sICRxdWVzdGlvbiwKKwkJCSAgdmFsaWRfYW5zd2Vycyhxdyh5ZXMgeSBubyBuKSksICd5Jyk7CisgICAgfQorICAgIHJldHVybiAoJGFucyA9fiAvXnkvKT8xOjA7Cit9CisKK3N1YiBkb19ncm91cCB7CisgICAgbXkgJGdyb3VwID0gc2hpZnQ7CisgICAgZGllICJubyBzdWNoIGdyb3VwICRncm91cFxuIiBpZiAoISRncm91cHN7JGdyb3VwfSk7CisgICAgZm9yZWFjaCBteSAkdG9rZW4gKEB7JGdyb3Vwc3skZ3JvdXB9fSkgeworCWlmICgkdG9rZW4tPlswXSBlcSAibWVzc2FnZSIpIHsKKwkgICAgUHJpbnQgKCIkdG9rZW4tPlsxXSAkdG9rZW4tPlsyXVxuIik7CisJfSBlbHNpZiAoJHRva2VuLT5bMF0gZXEgInN1Ymdyb3VwIikgeworCSAgICBkb19ncm91cCgkdG9rZW4tPlsxXSkgaWYgKGdldF95bl9tYXliZSgkdG9rZW4tPlsyXSkpOworCX0gZWxzaWYgKGRlZmluZWQoJHRva2VubWFweyR0b2tlbi0+WzFdfSkpIHsKKwkgICAgaWYgKGdldF95bl9tYXliZSgkdG9rZW4tPlsyXSkpIHsKKwkJZG8geworCQkgICAgZG9fbGluZSgkdG9rZW4tPlsxXSwgJHRva2VubWFweyR0b2tlbi0+WzFdfSk7CisJCX0gdW50aWwgKCR0b2tlbi0+WzBdIG5lICJtdWx0aXBsZSIgfHwKKwkJCSBnZXRfYW5zd2VyKCR0ZXJtLCAiRG8gYW5vdGhlciAkdG9rZW4tPlsxXSBsaW5lPyIsCisJCQkJICAgIHZhbGlkX2Fuc3dlcnMocXcoeWVzIHkgbm8gbikpLCAneScpCisJCQkgPX4gL24vKTsKKwkgICAgfQorCX0gZWxzaWYgKGRlZmluZWQoJGZpbGV0eXBlc3skdG9rZW4tPlsxXX0pKSB7CisJICAgICRkaWRmaWxleyR0b2tlbi0+WzFdfSA9IDE7CisJfSBlbHNlIHsKKwkgICAgZGllICJpbnZhbGlkIG1lbWJlciAkdG9rZW4tPlsxXSBvZiBncm91cCAkZ3JvdXBcbiI7CisJfQorICAgIH0KK30KKworIworIyBidWlsZCBhIHBhcnRpY3VsYXIgdHlwZSBvZiBmaWxlIGJ5IG9wZXJhdGluZyBvbiBzZWN0aW9ucworIworc3ViIGJ1aWxkX2ZpbGUgeworICAgIG15ICgkdGVybSwgJGZpbGVuYW1lLCAkZmlsZWNvbmYpID0gQF87CisgICAgJGRpZGZpbGV7JGZpbGVuYW1lfSA9IDE7CisgICAgbXkgKEBsaW5lcyk7CisgICAgd2hpbGUoMSkgeworCW15ICRsaW5lID0gZGlzcGxheV9tZW51KC1oZWFkID0+ICJUaGUgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgcHV0IGludG8gJGZpbGVuYW1lIGlzIGRpdmlkZWRcbmludG8gc2VjdGlvbnMuICBTZWxlY3QgYSBjb25maWd1cmF0aW9uIHNlY3Rpb24gZm9yICRmaWxlbmFtZVxudGhhdCB5b3Ugd2lzaCB0byBjcmVhdGU6XG4iLAorCQkJCS1vdGhlcmFuc3dlcnMgPT4gWydmaW5pc2hlZCddLAorCQkJCS1tYXBhbnN3ZXJzID0+IHsgJ2YnID0+ICdmaW5pc2hlZCcgfSwKKwkJCQktcXVlc3Rpb24gPT4gIlNlbGVjdCBzZWN0aW9uIiwKKwkJCQktbnVtZXJpYyA9PiAxLAorCQkJCW1hcCB7ICRfLT57J3RpdGxlJ31bMF0gfSBAJGZpbGVjb25mKTsKKworCXJldHVybiBAbGluZXMgaWYgKCRsaW5lIGVxICJmaW5pc2hlZCIpOworCWRvX3NlY3Rpb24oJGZpbGVjb25mLT5bJGxpbmUtMV0pOworICAgIH0KK30KKworIworIyBjb25maWd1cmUgYSBwYXJ0aWN1bGFyIHNlY3Rpb24gYnkgb3BlcmF0aW5nIG9uIHRva2VuIHR5cGVzCisjCitzdWIgZG9fc2VjdGlvbiB7CisgICAgbXkgJGNvbmZzZWN0ID0gc2hpZnQ7CisgICAgbXkgQGxpbmVzOworICAgIHdoaWxlKDEpIHsKKwlQcmludCAoIlxuU2VjdGlvbjogJGNvbmZzZWN0LT57J3RpdGxlJ31bMF1cbiIpOworCVByaW50ICgiRGVzY3JpcHRpb246XG4iKTsKKwlQcmludCAoIiAgIiwgam9pbigiXG4gICIsQHskY29uZnNlY3QtPnsnZGVzY3JpcHRpb24nfX0pLCJcbiIpOworCW15ICRsaW5lID0KKwkgICAgZGlzcGxheV9tZW51KC1oZWFkID0+ICJTZWxlY3QgZnJvbTpcbiIsCisJCQkgLW90aGVyYW5zd2VycyA9PiBbJ2ZpbmlzaGVkJywnbGlzdCddLAorCQkJIC1tYXBhbnN3ZXJzID0+IHsgJ2YnID0+ICdmaW5pc2hlZCcsCisJCQkJCSAgJ2wnID0+ICdsaXN0JyB9LAorCQkJIC1xdWVzdGlvbiA9PiAnU2VsZWN0IHNlY3Rpb24nLAorCQkJIC1kZXNjcmlwdGlvbnMgPT4gW21hcCB7ICRjb25mc2VjdC0+eyRffXtpbmZvfVswXSB9IAorCQkJCQkgICBAeyRjb25mc2VjdC0+eyd0aGV0b2tlbnMnfX1dLAorCQkJIEB7JGNvbmZzZWN0LT57J3RoZXRva2Vucyd9fSk7CisJcmV0dXJuIEBsaW5lcyBpZiAoJGxpbmUgZXEgImZpbmlzaGVkIik7CisJaWYgKCRsaW5lIGVxICJsaXN0IikgeworCSAgICBwcmludCAiTGluZXMgZGVmaW5lZCBmb3Igc2VjdGlvbiBcIiRjb25mc2VjdC0+e3RpdGxlfVswXVwiIHNvIGZhcjpcbiI7CisJICAgIGZvcmVhY2ggbXkgJGkgKEB7JGNvbmZzZWN0LT57J3RoZXRva2Vucyd9fSkgeworCQlpZiAoJCN7JGNvbmZzZWN0LT57JGl9eydyZXN1bHRzJ319ID49IDApIHsKKwkJICAgIHByaW50ICIgICIsam9pbigiXG4gICIsQHskY29uZnNlY3QtPnskaX17J3Jlc3VsdHMnfX0pLCJcbiI7CisJCX0KKwkgICAgfQorCSAgICBuZXh0OworCX0KKwlkb19saW5lKCRsaW5lLCAkY29uZnNlY3QtPnskbGluZX0pOworICAgIH0KKyAgICByZXR1cm47Cit9CisKKyMKKyMgQXNrIGFsbCB0aGUgcXVlc3Rpb25zIHJlbGF0ZWQgdG8gYSBwYXJ0aWN1bGFyIGxpbmUgdHlwZQorIworc3ViIGRvX2xpbmUgeworICAgIG15ICR0b2tlbiA9IHNoaWZ0OworICAgIG15ICRjb25mbGluZSA9IHNoaWZ0OworICAgIG15IChAYW5zd2VycywgJGNvdW50ZXIsICRpKTsKKyMgICAgZGVidWcobXlfRHVtcGVyKCRjb25mbGluZSkpOworICAgIFByaW50ICgiXG5Db25maWd1cmluZzogJHRva2VuXG4iKTsKKyAgICBQcmludCAoIkRlc2NyaXB0aW9uOlxuICAiLGpvaW4oIlxuICAgICIsQHskY29uZmxpbmUtPnsnaW5mbyd9fSksIlxuXG4iKTsKKyAgICBmb3IoJGk9MDsgJGkgPD0gJCN7JGNvbmZsaW5lLT57J3F1ZXN0aW9uJ319OyAkaSsrKSB7CisJaWYgKGRlZmluZWQoJGNvbmZsaW5lLT57J3F1ZXN0aW9uJ31bJGldKSAmJgorCSAgICAkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0gbmUgIiIpIHsKKwkgICAgbXkgJHEgPSAkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV07CisJICAgICRxID1+IHMvXCQoXGQrKS8kYW5zd2Vyc1skMV0vZzsKKwkgICAgZGVidWcoImFmdGVyOiAkdGVybSwgJHEsICIsJGNvbmZsaW5lLT57J3ZhbGlkYW5zd2VyJ31bJGldLCJcbiIpOworCSAgICAkYW5zd2Vyc1skaV0gPSBnZXRfYW5zd2VyKCR0ZXJtLCAkcSwKKwkJCQkgICAgICAkY29uZmxpbmUtPnsndmFsaWRhbnN3ZXInfVskaV0pOworCSAgICAkYW5zd2Vyc1skaV0gPX4gcy9cIi9cXFwiL2c7CisJICAgICRhbnN3ZXJzWyRpXSA9ICciJyAuICRhbnN3ZXJzWyRpXSAuICciJyBpZiAoJGFuc3dlcnNbJGldID1+IC9ccy8pOworCX0KKyAgICB9CisgICAgaWYgKCQjeyRjb25mbGluZS0+eydsaW5lJ319ID09IC0xKSB7CisJbXkgKCRpLCRsaW5lKTsKKwlmb3IoJGk9MDsgJGkgPD0gJCN7JGNvbmZsaW5lLT57J3F1ZXN0aW9uJ319OyAkaSsrKSB7CisJICAgIG5leHQgaWYgKCFkZWZpbmVkKCRjb25mbGluZS0+eydxdWVzdGlvbid9WyRpXSkgfHwKKwkJICAgICAkY29uZmxpbmUtPnsncXVlc3Rpb24nfVskaV0gZXEgIiIpOworCSAgICAkbGluZSAuPSAiIFwkIiAuICRpOworCX0KKwlwdXNoIEB7JGNvbmZsaW5lLT57J2xpbmUnfX0sICRsaW5lOworICAgIH0KKworICAgIGZvcmVhY2ggbXkgJGxpbmUgKEB7JGNvbmZsaW5lLT57J2xpbmUnfX0pIHsKKwlteSAkZmluaXNoZWQgPSAkbGluZTsKKwlkZWJ1ZygicHJlbGluZTogJGZpbmlzaGVkXG4iKTsKKwlkZWJ1ZygiYW5zd2VyczogIixteV9EdW1wZXIoXEBhbnN3ZXJzKSk7CisJJGZpbmlzaGVkID1+IHMvXCQoXGQrKS8kYW5zd2Vyc1skMV0vZzsKKwlpZiAoJGxpbmUgPX4gcy9eZXZhbFxzKy8vKSB7CisJICAgIGRlYnVnKCJldmFsOiAkZmluaXNoZWRcbiIpOworCSAgICAkZmluaXNoZWQgPSBldmFsICRmaW5pc2hlZDsKKwkgICAgZGVidWcoImV2YWwgcmVzdWx0czogJGZpbmlzaGVkXG4iKTsKKwl9CisJJGZpbmlzaGVkID0gJHRva2VuIC4gIiAiIC4gJGZpbmlzaGVkOworCVByaW50ICgiXG5GaW5pc2hlZCBPdXRwdXQ6ICRmaW5pc2hlZFxuIik7CisJcHVzaCBAeyRjb25mbGluZS0+eydyZXN1bHRzJ319LCRmaW5pc2hlZDsKKyAgICB9Cit9CisKKyMKKyMgcmVhZCBhbGwgc2V0cyBvZiBjb25maWcgZmlsZXMgaW4gdGhlIHZhcmlvdXMgc3ViZGlyZWN0b3JpZXMuCisjCitzdWIgcmVhZF9jb25maWdfZmlsZXMgeworICAgIG15ICRyZWFkZGlyID0gc2hpZnQ7CisgICAgbXkgJGZpbGV0eXBlcyA9IHNoaWZ0OworICAgIG9wZW5kaXIoREgsICRyZWFkZGlyKSB8fCBkaWUgIm5vIHN1Y2ggZGlyZWN0b3J5ICRyZWFkZGlyLCBkaWQgeW91IHJ1biBtYWtlIGluc3RhbGw/XG4iOworICAgIG15ICRkaXI7CisgICAgbXkgJGNvbmZpZ2ZpbGVuYW1lPSJzbm1wY29uZi1jb25maWciOworCisgICAgd2hpbGUoZGVmaW5lZCgkZGlyID0gcmVhZGRpcihESCkpKSB7CisJbmV4dCBpZiAoJGRpciA9fiAvXlwuLyk7CisJbmV4dCBpZiAoJGRpciA9fiAvQ1ZTLyk7CisJZGVidWcoImRpciBlbnRyeTogJGRpclxuIik7CisJaWYgKC1kICIkcmVhZGRpci8kZGlyIiAmJiAtZiAiJHJlYWRkaXIvJGRpci8kY29uZmlnZmlsZW5hbWUiKSB7CisKKwkgICAgbXkgJGNvbmZmaWxlOworCisJICAgICMgcmVhZCB0aGUgdG9wIGxldmVsIGNvbmZpZ3VyYXRpb24gaW5mb3JhbWF0aW9uIGFib3V0IHRoZSBkaXJlY290cnkuCisJICAgIG9wZW4oSSwgIiRyZWFkZGlyLyRkaXIvJGNvbmZpZ2ZpbGVuYW1lIik7CisJICAgIHdoaWxlKDxJPikgeworCQkkY29uZmZpbGUgPSAkMSBpZiAoL2ZvcmNvbmZmaWxlOiAoLiopLyk7CisJICAgIH0KKwkgICAgY2xvc2UoSSk7CisKKwkgICAgIyBubyBSRUFETUUgaW5mb3JtYXRpbm8uCisJICAgIGlmICgkY29uZmZpbGUgZXEgIiIpIHsKKwkJcHJpbnQgU1RERVJSICJXYXJuaW5nOiBObyAnZm9yY29uZmZpbGUnIGluZm9ybWF0aW9uIGluICRyZWFkZGlyLyRkaXIvJGNvbmZpZ2ZpbGVuYW1lXG4iOworCQluZXh0OworCSAgICB9CisKKwkgICAgIyByZWFkIGFsbCB0aGUgZGFhdCBpbiB0aGUgZGlyZWN0b3J5CisJICAgICRmaWxldHlwZXMtPnskY29uZmZpbGV9ID0gcmVhZF9jb25maWdfaXRlbXMoIiRyZWFkZGlyLyRkaXIiLCAkY29uZmZpbGUpOworCX0gZWxzZSB7CisJICAgICMgbm8gUkVBRE1FIGluZm9ybWF0aW5vLgorCSAgICBwcmludCBTVERFUlIgIldhcm5pbmc6IE5vICRjb25maWdmaWxlbmFtZSBmaWxlIGZvdW5kIGluICRyZWFkZGlyLyRkaXJcbiI7CisJfQorICAgIH0KKyAgICBjbG9zZWRpciBESDsKK30KKworIworIyByZWFkIGVhY2ggY29uZmlndXJhdGlvbiBmaWxlIGluIGEgZGlyZWN0b3J5CisjCitzdWIgcmVhZF9jb25maWdfaXRlbXMgeworICAgIG15ICRpdGVtZGlyID0gc2hpZnQ7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBvcGVuZGlyKElURU1TLCAkaXRlbWRpcik7CisgICAgbXkgJGZpbGU7CisgICAgbXkgQHJlc3VsdHM7CisgICAgd2hpbGUoZGVmaW5lZCgkZmlsZSA9IHJlYWRkaXIoSVRFTVMpKSkgeworCW5leHQgaWYgKCRmaWxlID1+IC9+JC8pOworCW5leHQgaWYgKCRmaWxlID1+IC9ec25tcGNvbmYtY29uZmlnJC8pOworCWlmICgtZiAiJGl0ZW1kaXIvJGZpbGUiKSB7CisJICAgIG15ICRyZXMgPSByZWFkX2NvbmZpZ19pdGVtKCIkaXRlbWRpci8kZmlsZSIsICR0eXBlKTsKKwkgICAgaWYgKHNjYWxhcihrZXlzKCUkcmVzKSkgPiAwKSB7CisJCXB1c2ggQHJlc3VsdHMsICRyZXM7CisJICAgIH0KKwl9CisgICAgfQorICAgIGNsb3NlZGlyKElURU1TKTsKKyAgICByZXR1cm4gXEByZXN1bHRzOworfQorCisjCisjIG1hcmsgYSBsaXN0IG9mIHRva2VucyBhcyBhIHNwZWNpYWwgImdyb3VwIgorIworc3ViIHJlYWRfY29uZmlnX2dyb3VwIHsKKyAgICBteSAoJGZoLCAkZ3JvdXAsICR0eXBlKSA9IEBfOworICAgIG15ICRsaW5lOworICAgIGRlYnVnKCJoYW5kbGluZyBncm91cCAkZ3JvdXBcbiIpOworICAgIHB1c2ggKEB7JGdyb3Vwc3skZ3JvdXB9fSxbJ2ZpbGV0eXBlJywgJHR5cGVdKTsKKyAgICB3aGlsZSgkbGluZSA9IDwkZmg+KSB7CisJY2hvbXAoJGxpbmUpOworCW5leHQgaWYgKCRsaW5lID1+IC9eXHMqJC8pOworCW5leHQgaWYgKCRsaW5lID1+IC9eXCMvKTsKKwlyZXR1cm4gJGxpbmUgaWYgKCRsaW5lICF+IC9eKHNpbmdsZXxtdWx0aXBsZXxtZXNzYWdlfGZpbGV0eXBlfHN1Ymdyb3VwKS8pOworCW15ICgkdHlwZSwgJHRva2VuLCAkcmVzdCkgPSAoJGxpbmUgPX4gL14oXHcrKVxzKyhbXlxzXSspXHMqKC4qKS8pOworCWRlYnVnICgicmVhZGluZyBncm91cCAkZ3JvdXAgOiAkdHlwZSAtPiAkdG9rZW4gLT4gJHJlc3RcbiIpOworCXB1c2ggKEB7JGdyb3Vwc3skZ3JvdXB9fSwgWyR0eXBlLCAkdG9rZW4sICRyZXN0XSk7CisgICAgfQorICAgIHJldHVybjsKK30KKwkKKworIworIyBQYXJzZSBvbmUgZmlsZQorIworc3ViIHJlYWRfY29uZmlnX2l0ZW0geworICAgIG15ICRpdGVtZmlsZSA9IHNoaWZ0OworICAgIG15ICRpdGVtY291bnQ7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAkZmggPSBuZXcgSU86OkZpbGUoJGl0ZW1maWxlKTsKKyAgICByZXR1cm4gaWYgKCFkZWZpbmVkKCRmaCkpOworICAgIG15ICglcmVzdWx0cywgJGN1cnRva2VuKTsKKyAgICBkZWJ1ZygidG9rZW5pdGVtczogICIsIG15X0R1bXBlcihcJXRva2VuaXRlbXMpKTsKKyAgdG9wd2hpbGU6CisgICAgd2hpbGUoJGxpbmUgPSA8JGZoPikgeworCW5leHQgaWYgKCRsaW5lID1+IC9eXHMqXCMvKTsKKwlteSAoJHRva2VuLCAkcmVzdCkgPSAoJGxpbmUgPX4gL14oXHcrKVxzKyguKikvKTsKKwluZXh0IGlmICghZGVmaW5lZCgkdG9rZW4pIHx8ICFkZWZpbmVkKCRyZXN0KSk7CisJd2hpbGUgKCR0b2tlbiBlcSAnZ3JvdXAnKSB7CisJICAgICMgaGFuZGxlIHNwZWNpYWwgZ3JvdXAgbGlzdAorCSAgICBteSAkbmV4dCA9IHJlYWRfY29uZmlnX2dyb3VwKCRmaCwgJHJlc3QsJHR5cGUpOworCSAgICBpZiAoJG5leHQpIHsKKwkJKCR0b2tlbiwgJHJlc3QpID0gKCRuZXh0ID1+IC9eKFx3KylccysoLiopLyk7CisJICAgIH0gZWxzZSB7CisJCW5leHQgdG9wd2hpbGU7CisJICAgIH0KKwl9CisJZGVidWcoInRva2VuOiAkdG9rZW4gPT4gJHJlc3RcbiIpOworCWlmICgkdG9rZW4gZXEgJ3N0ZWFsJykgeworCSAgICBmb3JlYWNoIG15ICRzdGVhbGZyb20gKGtleXMoJXskcmVzdWx0c3skcmVzdH19KSkgeworCQlpZiAoIWRlZmluZWQoJHJlc3VsdHN7JGN1cnRva2VufXskc3RlYWxmcm9tfSkpIHsKKwkJICAgIEB7JHJlc3VsdHN7JGN1cnRva2VufXskc3RlYWxmcm9tfX0gPSAKKwkJCUB7JHJlc3VsdHN7JHJlc3R9eyRzdGVhbGZyb219fTsKKwkJfQorCSAgICB9CisJfSBlbHNpZiAoZGVmaW5lZCgkdG9rZW5pdGVtc3skdG9rZW59KSkgeworCSAgICBpZiAoIWRlZmluZWQoJGN1cnRva2VuKSkgeworCQlkaWUgImVycm9yIGluIGNvbmZpZ3VyYXRpb24gZmlsZSAkaXRlbWZpbGUsIG5vIHRva2VuIHNldFxuIjsKKwkgICAgfQorCSAgICAkcmVzdCA9fiBzL15cIy8vOworCSAgICBwdXNoIEB7JHJlc3VsdHN7JGN1cnRva2VufXskdG9rZW59fSwkcmVzdDsKKwl9IGVsc2lmIChkZWZpbmVkKCRhcnJheWl0ZW1zeyR0b2tlbn0pKSB7CisJICAgIGlmICghZGVmaW5lZCgkY3VydG9rZW4pKSB7CisJCWRpZSAiZXJyb3IgaW4gY29uZmlndXJhdGlvbiBmaWxlICRpdGVtZmlsZSwgbm8gdG9rZW4gc2V0XG4iOworCSAgICB9CisJICAgIG15ICgkbnVtLCAkbmV3cmVzdCkgPSAoJHJlc3QgPX4gL14oXGQrKVxzKyguKikvKTsKKwkgICAgaWYgKCFkZWZpbmVkKCRudW0pIHx8ICFkZWZpbmVkKCRuZXdyZXN0KSkgeworCQl3YXJuICJpbnZhbGlkIGNvbmZpZyBsaW5lOiAkbGluZVxuIjsKKwkgICAgfSBlbHNlIHsKKwkJJHJlc3VsdHN7JGN1cnRva2VufXskdG9rZW59WyRudW1dID0gJG5ld3Jlc3Q7CisJICAgIH0KKwl9IGVsc2lmICgkdG9rZW4gPX4gL150b2tlblxzKiQvKSB7CisJICAgICRyZXN0ID0gbGMoJHJlc3QpOworCSAgICAkY3VydG9rZW4gPSAkcmVzdDsKKwkgICAgaWYgKCEgZXhpc3RzICRyZXN1bHRzeyRjdXJ0b2tlbn17J2RlZmluZWQnfSkgeworCQlwdXNoIEB7JHJlc3VsdHN7J3RoZXRva2Vucyd9fSwgJGN1cnRva2VuOworCQkkcmVzdWx0c3skY3VydG9rZW59eydkZWZpbmVkJ30gPSAxOworCSAgICB9CisJICAgICR0b2tlbm1hcHskY3VydG9rZW59ID0gJHJlc3VsdHN7JGN1cnRva2VufTsKKwkgICAgZGVidWcoImN1cnJlbnQgdG9rZW4gc2V0IHRvICR0b2tlblxuIik7CisJfSBlbHNlIHsKKwkgICAgcHVzaCBAeyRyZXN1bHRzeyR0b2tlbn19LCRyZXN0OworCX0KKyAgICB9CisgICAgcmV0dXJuIFwlcmVzdWx0czsKK30KKworc3ViIGRlYnVnIHsKKyAgICBwcmludCBAXyBpZiAoJG9wdHN7J2QnfSk7Cit9CisKK3N1YiBvdXRwdXRfZmlsZXMgeworICAgIG15ICRmaWxldHlwZXMgPSBzaGlmdDsKKyAgICBteSAkdGVybSA9IHNoaWZ0OworICAgIGZvcmVhY2ggbXkgJGZ0IChrZXlzKCUkZmlsZXR5cGVzKSkgeworCW5leHQgaWYgKCEkZGlkZmlsZXskZnR9KTsKKwlteSAkb3V0cHV0ZiA9ICRmdDsKKwlpZiAoLWYgJG91dHB1dGYgJiYgISRvcHRzeydmJ30pIHsKKwkgICAgcHJpbnQgIlxuRXJyb3I6IEFuICRvdXRwdXRmIGZpbGUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBkaXJlY3RvcnkuXG5cbiI7CisJICAgIG15ICRhbnMgPSBnZXRfYW5zd2VyKCR0ZXJtLCInb3ZlcndyaXRlJywgJ3NraXAnLCAncmVuYW1lJyBvciAnYXBwZW5kJz8gIix2YWxpZF9hbnN3ZXJzKHF3KG8gb3ZlcndyaXRlIHIgcmVuYW1lIHMgc2tpcCBhIGFwcGVuZCkpKTsKKwkgICAgbmV4dCBpZiAoJGFucyA9fiAvXihzfHNraXApJC9pKTsKKwkgICAgaWYgKCRhbnMgPX4gL14oYXxhcHBlbmQpLykgeworCQkkb3V0cHV0ZiA9ICI+JG91dHB1dGYiOworCSAgICB9IGVsc2lmICgkYW5zID1+IC9eKHJ8cmVuYW1lKSQvaSkgeworCQkjIGRlZmF1bHQgdG8gcmVuYW1lIGZvciBlcnJvciBjb25kaXRpb25zCisJCSRvdXRwdXRmID0gJHRlcm0tPnJlYWRsaW5lKCJTYXZlIHRvIHdoYXQgbmV3IGZpbGUgbmFtZSBpbnN0ZWFkIChvciAnc2tpcCcpPyAiKTsKKwkgICAgfQorCX0KKwkkZGlkZmlsZXskZnR9ID0gJG91dHB1dGY7CisJb3BlbihPLCI+JG91dHB1dGYiKSB8fCB3YXJuICJjb3VsZG4ndCB3cml0ZSB0byAkb3V0cHV0ZlxuIjsKKwlwcmludCBPICIjIiB4IDc1LCJcbiI7CisJcHJpbnQgTyAiI1xuIyAkZnRcbiI7CisJcHJpbnQgTyAiI1xuIyAgIC0gY3JlYXRlZCBieSB0aGUgc25tcGNvbmYgY29uZmlndXJhdGlvbiBwcm9ncmFtXG4jXG4iOworCWZvcmVhY2ggbXkgJHNlY3QgKEB7JGZpbGV0eXBlcy0+eyRmdH19KSB7CisJICAgIG15ICRzZWN0aGVscCA9IDA7CisJICAgIGZvcmVhY2ggbXkgJHRva2VuIChAeyRzZWN0LT57J3RoZXRva2Vucyd9fSkgeworCQlpZiAoJCN7JHNlY3QtPnskdG9rZW59eydyZXN1bHRzJ319ID49IDApIHsKKwkJICAgIGlmICgkc2VjdGhlbHArKyA9PSAwKSB7CisJCQlwcmludCBPICIjIiB4IDc1LCJcbiMgU0VDVElPTjogIiwKKwkJCWpvaW4oIlxuIyAgICAgICAgICAiLCBAeyRzZWN0LT57dGl0bGV9fSksICJcbiNcbiI7CisJCQlwcmludCBPICIjICAgIiwgam9pbigiXG4jICAgIixAeyRzZWN0LT57ZGVzY3JpcHRpb259fSksCisJCQkiXG4iOworCQkgICAgfQorCQkgICAgcHJpbnQgTyAiXG4jICR0b2tlbjogIiwKKwkJICAgIGpvaW4oIlxuIyAgICIsQHskc2VjdC0+eyR0b2tlbn17aW5mb319KSwgIlxuXG4iOworCQkgICAgZm9yZWFjaCBteSAkcmVzdWx0IChAeyRzZWN0LT57JHRva2VufXsncmVzdWx0cyd9fSkgeworCQkJcHJpbnQgTyAiJHJlc3VsdFxuIjsKKwkJICAgIH0KKwkJfQorCSAgICB9CisJICAgIHByaW50IE8gIlxuXG5cbiI7CisJfQorCWlmICgkI3skdW5rbm93bnskZnR9fSA+IC0xKSB7CisJICAgIHByaW50IE8gIiNcbiMgVW5rbm93biBkaXJlY3RpdmVzIHJlYWQgaW4gZnJvbSBvdGhlciBmaWxlcyBieSBzbm1wY29uZlxuI1xuIjsKKwkgICAgZm9yZWFjaCBteSAkdW5rbm93biAoQHskdW5rbm93bnskZnR9fSkgeworCQlwcmludCBPICR1bmtub3duLCJcbiI7CisJICAgIH0KKwl9CisJY2xvc2UoTyk7CisgICAgfQorfQorCitzdWIgZ2V0X2Fuc3dlciB7CisgICAgbXkgKCR0ZXJtLCAkcXVlc3Rpb24sICRyZWdleHAsICRkZWZhdWx0dmFsKSA9IEBfOworICAgICRxdWVzdGlvbiAuPSAiIChkZWZhdWx0ID0gJGRlZmF1bHR2YWwpIiBpZiAoZGVmaW5lZCgkZGVmYXVsdHZhbCkgJiYgJGRlZmF1bHR2YWwgbmUgIiIpOworICAgICRxdWVzdGlvbiAuPSAiOiAiOworICAgIG15ICRhbnMgPSAkdGVybS0+cmVhZGxpbmUoJHF1ZXN0aW9uKTsKKyAgICByZXR1cm4gJGRlZmF1bHR2YWwgaWYgKCRhbnMgZXEgIiIgJiYgZGVmaW5lZCgkZGVmYXVsdHZhbCkgJiYgCisJCQkgICAkZGVmYXVsdHZhbCBuZSAiIik7CisgICAgd2hpbGUgKCEoIWRlZmluZWQoJHJlZ2V4cCkgfHwKKwkgICAgICRyZWdleHAgZXEgIiIgfHwKKwkgICAgICRhbnMgPX4gLyRyZWdleHAvKSkgeworCXByaW50ICJpbnZhbGlkIGFuc3dlciEgIEl0IG11c3QgbWF0Y2ggdGhpcyByZWd1bGFyIGV4cHJlc3Npb246ICRyZWdleHBcbiI7CisJJGFucyA9ICR0ZXJtLT5yZWFkbGluZSgkcXVlc3Rpb24pOworICAgIH0KKyAgICByZXR1cm4gJGRlZmF1bHR2YWwgaWYgKCRhbnMgZXEgIiIgJiYgZGVmaW5lZCgkZGVmYXVsdHZhbCkgJiYgCisJCQkgICAkZGVmYXVsdHZhbCBuZSAiIik7CisgICAgcmV0dXJuICRhbnM7Cit9CisgICAgCitzdWIgdmFsaWRfYW5zd2VycyB7CisgICAgbXkgQGxpc3Q7CisgICAgZm9yZWFjaCAkaSAoQF8pIHsKKwlwdXNoIEBsaXN0LCAkaSBpZiAoJGkpOworICAgIH0KKyAgICByZXR1cm4gIl4oIiAuIGpvaW4oInwiLEBsaXN0KSAuICIpXCQiOworfQorCitzdWIgcmVhZF9jb25maWcgeworICAgIG15ICRmaWxlID0gc2hpZnQ7CisgICAgbXkgJGZpbGV0eXBlID0gc2hpZnQ7CisgICAgcmV0dXJuIGlmICghZGVmaW5lZCgkZmlsZXR5cGVzeyRmaWxldHlwZX0pKTsKKyAgICBpZiAoISAtZiAkZmlsZSkgeworCXdhcm4gIiRmaWxlIGRvZXMgbm90IGV4aXN0XG4iOworCXJldHVybjsKKyAgICB9CisgICAgb3BlbihJLCRmaWxlKTsKKyAgICB3aGlsZSg8ST4pIHsKKwluZXh0IGlmICgvXlxzKlwjLyk7CisJbmV4dCBpZiAoL15ccyokLyk7CisJY2hvbXA7CisJbXkgKCR0b2tlbiwgJHJlc3QpID0gL15ccyooXHcrKVxzKyguKikvOworCSR0b2tlbiA9IGxjKCR0b2tlbik7CisJbmV4dCBpZiAoZGVmaW5lZCgkYWxsbGluZXN7JF99KSk7ICMgZHJvcCBkdXBsaWNhdGUgbGluZXMKKwlpZiAoZGVmaW5lZCgkdG9rZW5tYXB7JHRva2VufSkpIHsKKwkgICAgcHVzaCBAeyR0b2tlbm1hcHskdG9rZW59eydyZXN1bHRzJ319LCRfOworCX0gZWxzZSB7CisJICAgIHB1c2ggQHskdW5rbm93bnskZmlsZXR5cGV9fSwkXzsKKwl9CisJJGFsbGxpbmVzeyRffSsrOworICAgIH0KKyAgICBjbG9zZShJKTsKK30KKworc3ViIGRpc3BsYXlfbWVudSB7CisgICAgbXkgJWNvbmZpZzsKKworICAgIHdoaWxlICgkI18gPiAtMSAmJiAkX1swXSA9fiAvXi0vKSB7CisJbXkgJGtleSA9IHNoaWZ0OworCSRjb25maWd7JGtleX0gPSBzaGlmdDsKKyAgICB9CisKKyAgICBteSAkY291bnQ9MTsKKyAgICBwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOworICAgIGlmICgkY29uZmlneyctaGVhZCd9KSB7CisJcHJpbnQgJGNvbmZpZ3snLWhlYWQnfTsKKwlwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOworICAgIH0KKyAgICBteSBAYW5zd2VycyA9IEBfOworICAgIG15IEBsaXN0OworICAgIGlmIChkZWZpbmVkKCRjb25maWd7Jy1kZXNjcmlwdGlvbnMnfSkgJiYgCisJcmVmKCRjb25maWd7Jy1kZXNjcmlwdGlvbnMnfSkgZXEgIkFSUkFZIikgeworCUBsaXN0ID0gQHskY29uZmlneyctZGVzY3JpcHRpb25zJ319CisgICAgfSBlbHNlIHsKKwlAbGlzdCA9IEBfOworICAgIH0KKyAgICBmb3JlYWNoIG15ICRpIChAbGlzdCkgeworCXByaW50ZiAiICAlMmQ6ICAkaVxuIiwgJGNvdW50KysgaWYgKCRpKTsKKyAgICB9CisgICAgcHJpbnQgIlxuIiBpZiAoIWRlZmluZWQoJGNvbmZpZ3snLWRlbnNlJ30pKTsKKyAgICBpZiAoZGVmaW5lZCgkY29uZmlneyctb3RoZXJhbnN3ZXJzJ30pKSB7CisJaWYgKHJlZigkY29uZmlneyctb3RoZXJhbnN3ZXJzJ30pIGVxICdBUlJBWScpIHsKKwkgICAgcHJpbnQgIk90aGVyIG9wdGlvbnM6ICIsIGpvaW4oIiwgIiwKKwkJCQkJICBAeyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pLCAiXG4iOworCSAgICBwdXNoIEBhbnN3ZXJzLCBAeyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX07CisJICAgIHB1c2ggQGFuc3dlcnMsIGtleXMoJXskY29uZmlneyctbWFwYW5zd2Vycyd9fSk7CisJfSBlbHNlIHsKKwkgICAgbXkgJG1heGxlbiA9IDA7CisJICAgIHB1c2ggQGFuc3dlcnMsa2V5cygleyRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfX0pOworCSAgICBmb3JlYWNoIG15ICRpIChrZXlzKCV7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSkpIHsKKwkJJG1heGxlbiA9IGxlbmd0aCgkaSkgaWYgKGxlbmd0aCgkaSkgPiAkbWF4bGVuKTsKKwkgICAgfQorCSAgICBmb3JlYWNoIG15ICRpIChrZXlzKCV7JGNvbmZpZ3snLW90aGVyYW5zd2Vycyd9fSkpIHsKKwkJcHJpbnRmKCIgICUtIiAuICRtYXhsZW4gLiAiczogJXNcbiIsICRpLCAKKwkJICAgICAgICRjb25maWd7Jy1vdGhlcmFuc3dlcnMnfXskaX0pOworCSAgICB9CisJfQorCXByaW50ICJcbiIgaWYgKCFkZWZpbmVkKCRjb25maWd7Jy1kZW5zZSd9KSk7CisgICAgfQorICAgIGlmICgkY29uZmlneyctdGFpbCd9KSB7CisJcHJpbnQgJGNvbmZpZ3snLXRhaWwnfTsKKwlwcmludCAiXG4iIGlmICghZGVmaW5lZCgkY29uZmlneyctZGVuc2UnfSkpOworICAgIH0KKworICAgIGlmIChkZWZpbmVkKCRjb25maWd7Jy1xdWVzdGlvbid9KSkgeworCXdoaWxlKDEpIHsKKwkgICAgbXkgJG51bWV4cHI7CisJICAgIGlmICgkY29uZmlneyctbXVsdGlwbGUnfSkgeworCQkkbnVtZXhwciA9ICdbXGRccyxdK3xhbGx8YXxub25lfG4nOworCSAgICB9IGVsc2UgeworCQkkbnVtZXhwciA9ICdcZCsnOworCSAgICB9CisJICAgIHB1c2ggQGFuc3dlcnMsIiIgaWYgKCRjb25maWd7Jy1kZWZhdWx0dmFsdWUnfSk7CisJICAgICRhbnMgPSBnZXRfYW5zd2VyKCR0ZXJtLCAkY29uZmlneyctcXVlc3Rpb24nfSwKKwkJCSAgICAgIHZhbGlkX2Fuc3dlcnMoJG51bWV4cHIsQGFuc3dlcnMpLAorCQkJICAgICAgJGNvbmZpZ3snLWRlZmF1bHR2YWx1ZSd9KTsKKwkgICAgaWYgKCRjb25maWd7Jy1tYXBhbnN3ZXJzJ317JGFuc30pIHsKKwkJJGFucyA9ICRjb25maWd7Jy1tYXBhbnN3ZXJzJ317JGFuc307CisJICAgIH0KKworCSAgICBpZiAoJGFucyA9fiAvXiRudW1leHByJC8pIHsKKwkJaWYgKCRjb25maWd7Jy1tdWx0aXBsZSd9KSB7CisJCSAgICBteSBAbGlzdCA9IHNwbGl0KC9ccyosXHMqLywkYW5zKTsKKwkJICAgIG15IEByZXQ7CisJCSAgICAkY291bnQgPSAwOworCQkgICAgZm9yZWFjaCBteSAkaSAoQF8pIHsKKwkJCSRjb3VudCsrOworCQkJaWYgKCRhbnMgZXEgImFsbCIgfHwgJGFucyBlcSAiYSIgCisJCQkgICAgfHwgZ3JlcCgvXiRjb3VudCQvLEBsaXN0KSkgeworCQkJICAgIHB1c2ggQHJldCwgJGk7CisJCQl9CisJCSAgICB9CisJCSAgICByZXR1cm4gQHJldDsKKwkJfSBlbHNlIHsKKwkJICAgIGlmICgkYW5zIDw9IDAgfHwgJGFucyA+ICQjXysxKSB7CisJCQl3YXJuICJpbnZhbGlkIHNlbGVjdGlvbjogJGFucyBbbXVzdCBiZSAxLSIgLgorCQkJICAgICgkI18rMSkgLiAiXVxuIjsKKwkJICAgIH0gZWxzZSB7CisJCQlyZXR1cm4gJGFucyBpZiAoJGNvbmZpZ3snLW51bWVyaWMnfSk7CisJCQkkY291bnQgPSAwOworCQkJZm9yZWFjaCBteSAkaSAoQF8pIHsKKwkJCSAgICAkY291bnQrKzsKKwkJCSAgICBpZiAoJGFucyBlcSAkY291bnQpIHsKKwkJCQlyZXR1cm4gJGk7CisJCQkgICAgfQorCQkJfQorCQkgICAgfQorCQl9CisJICAgIH0gZWxzZSB7CisJCXJldHVybiAkYW5zOworCSAgICB9CisJfQorICAgIH0KK30KKworc3ViIG15X0R1bXBlciB7CisgICAgaWYgKCRvcHRzeydEJ30pIHsKKwlyZXR1cm4gRHVtcGVyKEBfKTsKKyAgICB9IGVsc2UgeworCXJldHVybiAiXG4iOworICAgIH0KK30KKworc3ViIGdldF9wZXJzaXN0ZW50RGlyIHsKKyAgICBteSAkZmlsZSA9IHNoaWZ0OworICAgIG15ICRyZXN1bHQgPSAwOworICAgIGlmICghIC1mICRmaWxlKSB7CisJcmV0dXJuIDA7CisgICAgfQorICAgIG9wZW4oSSwkZmlsZSk7CisgICAgd2hpbGUoPEk+KSB7CisJbmV4dCBpZiAoL15ccypcIy8pOworCW5leHQgaWYgKC9eXHMqJC8pOworCWNob21wOworCW15ICgkdG9rZW4sICRyZXN0KSA9IC9eXHMqKFx3KylccysoLiopLzsKKyAgICAgICAgaWYgKGxjKCR0b2tlbikgZXEgInBlcnNpc3RlbnRkaXIiKSB7CisgICAgICAgICAgJHJlc3VsdCA9ICRyZXN0OworICAgICAgICB9CisgICAgICAgIG5leHQ7CisgICAgfQorICAgIGNsb3NlKEkpOworICAgIHJldHVybiAkcmVzdWx0OworfQorCisjIFVzYWdlOiAgICZ3aW4zMl9yZWdfcmVhZCgia2V5IiwgInZhbHVlIikKKyMgRXhhbXBsZTogJndpbjMyX3JlZ19yZWFkKCJTT0ZUV0FSRVxcTmV0LVNOTVAiLCJTTk1QU0hBUkVQQVRIIik7CisjIFJldHVybnM6IFZhbHVlIGlmIGZvdW5kIGluIEhLQ1Ugb3IgSENMTS4gIE90aGVyd2lzZSBhbiBlbXB0eSBzdHJpbmcuCitzdWIgd2luMzJfcmVnX3JlYWQgeworICBteSAkc3ViX2tleSA9IHNoaWZ0OworICBteSAkdmFsdWUgPSBzaGlmdDsKKworICByZXF1aXJlIFdpbjMyOjpSZWdpc3RyeTsKKyAgIAorICBteSAoJGhrZXksICVrZXlfdmFsdWVzLCAkdGVtcCwgJG5vX3dhcm4pOworIAorICAjIFRyeSBIS0NVIGZpcnN0CisgICRub193YXJuID0gJEhLRVlfQ1VSUkVOVF9VU0VSOworICBpZiAoJEhLRVlfQ1VSUkVOVF9VU0VSLT5PcGVuKCRzdWJfa2V5LCAkaGtleSkpCisgIHsKKyAgICAkaGtleS0+R2V0VmFsdWVzKFwla2V5X3ZhbHVlcyk7ICAgCisgICAgZm9yZWFjaCAkdGVtcCAoc29ydCBrZXlzICVrZXlfdmFsdWVzKSB7CisgICAgICBpZiAoJHRlbXAgZXEgJHZhbHVlKSB7CisgICAgICAgIHJldHVybiAka2V5X3ZhbHVlc3skdGVtcH1bMl07CisgICAgICB9CisgICAgfQorICAgICRoa2V5LT5DbG9zZSgpOyAKKyAgfQorCisgICMgVHJ5IEhLTE0gc2Vjb25kCisgICRub193YXJuID0gJEhLRVlfTE9DQUxfTUFDSElORTsKKyAgaWYgKCRIS0VZX0xPQ0FMX01BQ0hJTkUtPk9wZW4oJHN1Yl9rZXksICRoa2V5KSkKKyAgeworICAgICRoa2V5LT5HZXRWYWx1ZXMoXCVrZXlfdmFsdWVzKTsKKyAgICBmb3JlYWNoICR0ZW1wIChzb3J0IGtleXMgJWtleV92YWx1ZXMpIHsKKyAgICAgIGlmICgkdGVtcCBlcSAkdmFsdWUpIHsKKyAgICAgICAgcmV0dXJuICRrZXlfdmFsdWVzeyR0ZW1wfVsyXTsKKyAgICAgIH0KKyAgICB9CisgICAgJGhrZXktPkNsb3NlKCk7IAorICB9CisgIHJldHVybiAiIjsKK30KKworIyBVc2FnZTogICAmbXlfZ2V0ZW52KCJrZXkiKQorIyBFeGFtcGxlOiAmbXlfZ2V0ZW52KCJTTk1QU0hBUkVQQVRIIik7CisjIFJldHVybnM6IFVuaXg6ICBFbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSAodW5kZWYgaWYgbm90IGRlZmluZWQpCisjICAgICAgICAgIFdpbjMyOiBIS0NVXFNvZnR3YXJlXE5ldC1TTk1QXChrZXkpIG9yCisjICAgICAgICAgIFdpbjMyOiBIS0xNXFNvZnR3YXJlXE5ldC1TTk1QXChrZXkpIG9yCisjICAgICAgICAgIFdpbjMyOiBFbnZpcm9ubWVudCB2YXJpYWJsZSB2YWx1ZSAodW5kZWYgaWYgbm90IGRlZmluZWQpCitzdWIgbXlfZ2V0ZW52IHsKKyAgbXkgJGtleSA9IHNoaWZ0OworICAKKyAgIyBVbml4CisgIGlmICgkXk8gbmUgJ01TV2luMzInKSB7CisgICAgcmV0dXJuICRFTlZ7JGtleX07CisgIH0KKyAgIyBXaW5kb3dzCisgIGVsc2UgeworICAgIG15ICR0ZW1wID0gJndpbjMyX3JlZ19yZWFkKCJTT0ZUV0FSRVxcTmV0LVNOTVAiLCIka2V5Iik7CisgICAgaWYgKCR0ZW1wIG5lICIiKSB7CisgICAgICByZXR1cm4gJHRlbXA7CisgICAgfQorICAgIGVsc2UgeworICAgICAgcmV0dXJuICRFTlZ7JGtleX07CisgICAgfQorICB9Cit9CisKZGlmZiAtLWdpdCBhL2x0bWFpbi5zaCBiL2x0bWFpbi5zaApvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDI3ZDQ5OGEuLmVkMTgxNGYKLS0tIGEvbHRtYWluLnNoCisrKyBiL2x0bWFpbi5zaApAQCAtMSw1MiArMSw4OSBAQAotIyBsdG1haW4uc2ggLSBQcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLSMgTk9URTogQ2hhbmdpbmcgdGhpcyBmaWxlIHdpbGwgbm90IGFmZmVjdCBhbnl0aGluZyB1bnRpbCB5b3UgcmVydW4gY29uZmlndXJlLgotIworCisjIGxpYnRvb2wgKEdOVSBsaWJ0b29sKSAyLjQKKyMgV3JpdHRlbiBieSBHb3Jkb24gTWF0emlna2VpdCA8Z29yZEBnbnUuYWkubWl0LmVkdT4sIDE5OTYKKwogIyBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsIDIwMDYsCi0jIDIwMDcsIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgotIyBPcmlnaW5hbGx5IGJ5IEdvcmRvbiBNYXR6aWdrZWl0IDxnb3JkQGdudS5haS5taXQuZWR1PiwgMTk5NgotIwotIyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorIyAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBUaGlzIGlzIGZyZWUgc29mdHdhcmU7IHNlZSB0aGUgc291cmNlIGZvciBjb3B5aW5nIGNvbmRpdGlvbnMuICBUaGVyZSBpcyBOTworIyB3YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworIyBHTlUgTGlidG9vbCBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAjIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CiAjIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCiAjIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAjCi0jIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKICMgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQogIyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAjCiAjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0jIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0jIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorIyBhbG9uZyB3aXRoIEdOVSBMaWJ0b29sOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgYSBjb3B5CisjIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC5odG1sLAorIyBvciBvYnRhaW5lZCBieSB3cml0aW5nIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sCisjIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorCisjIFVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gW01PREUtQVJHXS4uLgogIwotIyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgaWYgeW91Ci0jIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIGFzIHBhcnQgb2YgYSBwcm9ncmFtIHRoYXQgY29udGFpbnMgYQotIyBjb25maWd1cmF0aW9uIHNjcmlwdCBnZW5lcmF0ZWQgYnkgQXV0b2NvbmYsIHlvdSBtYXkgaW5jbHVkZSBpdCB1bmRlcgotIyB0aGUgc2FtZSBkaXN0cmlidXRpb24gdGVybXMgdGhhdCB5b3UgdXNlIGZvciB0aGUgcmVzdCBvZiB0aGF0IHByb2dyYW0uCisjIFByb3ZpZGUgZ2VuZXJhbGl6ZWQgbGlicmFyeS1idWlsZGluZyBzdXBwb3J0IHNlcnZpY2VzLgorIworIyAgICAgICAtLWNvbmZpZyAgICAgICAgICAgICBzaG93IGFsbCBjb25maWd1cmF0aW9uIHZhcmlhYmxlcworIyAgICAgICAtLWRlYnVnICAgICAgICAgICAgICBlbmFibGUgdmVyYm9zZSBzaGVsbCB0cmFjaW5nCisjICAgLW4sIC0tZHJ5LXJ1biAgICAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCisjICAgICAgIC0tZmVhdHVyZXMgICAgICAgICAgIGRpc3BsYXkgYmFzaWMgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQgZXhpdAorIyAgICAgICAtLW1vZGU9TU9ERSAgICAgICAgICB1c2Ugb3BlcmF0aW9uIG1vZGUgTU9ERQorIyAgICAgICAtLXByZXNlcnZlLWR1cC1kZXBzICBkb24ndCByZW1vdmUgZHVwbGljYXRlIGRlcGVuZGVuY3kgbGlicmFyaWVzCisjICAgICAgIC0tcXVpZXQsIC0tc2lsZW50ICAgIGRvbid0IHByaW50IGluZm9ybWF0aW9uYWwgbWVzc2FnZXMKKyMgICAgICAgLS1uby1xdWlldCwgLS1uby1zaWxlbnQKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnQgaW5mb3JtYXRpb25hbCBtZXNzYWdlcyAoZGVmYXVsdCkKKyMgICAgICAgLS10YWc9VEFHICAgICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRworIyAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICBwcmludCBtb3JlIGluZm9ybWF0aW9uYWwgbWVzc2FnZXMgdGhhbiBkZWZhdWx0CisjICAgICAgIC0tbm8tdmVyYm9zZSAgICAgICAgIGRvbid0IHByaW50IHRoZSBleHRyYSBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCisjICAgICAgIC0tdmVyc2lvbiAgICAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KKyMgICAtaCwgLS1oZWxwLCAtLWhlbHAtYWxsICAgcHJpbnQgc2hvcnQsIGxvbmcsIG9yIGRldGFpbGVkIGhlbHAgbWVzc2FnZQorIworIyBNT0RFIG11c3QgYmUgb25lIG9mIHRoZSBmb2xsb3dpbmc6CisjCisjICAgICAgICAgY2xlYW4gICAgICAgICAgICAgIHJlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkKKyMgICAgICAgICBjb21waWxlICAgICAgICAgICAgY29tcGlsZSBhIHNvdXJjZSBmaWxlIGludG8gYSBsaWJ0b29sIG9iamVjdAorIyAgICAgICAgIGV4ZWN1dGUgICAgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQorIyAgICAgICAgIGZpbmlzaCAgICAgICAgICAgICBjb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzCisjICAgICAgICAgaW5zdGFsbCAgICAgICAgICAgIGluc3RhbGwgbGlicmFyaWVzIG9yIGV4ZWN1dGFibGVzCisjICAgICAgICAgbGluayAgICAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQorIyAgICAgICAgIHVuaW5zdGFsbCAgICAgICAgICByZW1vdmUgbGlicmFyaWVzIGZyb20gYW4gaW5zdGFsbGVkIGRpcmVjdG9yeQorIworIyBNT0RFLUFSR1MgdmFyeSBkZXBlbmRpbmcgb24gdGhlIE1PREUuICBXaGVuIHBhc3NlZCBhcyBmaXJzdCBvcHRpb24sCisjIGAtLW1vZGU9TU9ERScgbWF5IGJlIGFiYnJldmlhdGVkIGFzIGBNT0RFJyBvciBhIHVuaXF1ZSBhYmJyZXZpYXRpb24gb2YgdGhhdC4KKyMgVHJ5IGAkcHJvZ25hbWUgLS1oZWxwIC0tbW9kZT1NT0RFJyBmb3IgYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCisjCisjIFdoZW4gcmVwb3J0aW5nIGEgYnVnLCBwbGVhc2UgZGVzY3JpYmUgYSB0ZXN0IGNhc2UgdG8gcmVwcm9kdWNlIGl0IGFuZAorIyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246CisjCisjICAgICAgICAgaG9zdC10cmlwbGV0OgkkaG9zdAorIyAgICAgICAgIHNoZWxsOgkJJFNIRUxMCisjICAgICAgICAgY29tcGlsZXI6CQkkTFRDQworIyAgICAgICAgIGNvbXBpbGVyIGZsYWdzOgkJJExUQ0ZMQUdTCisjICAgICAgICAgbGlua2VyOgkJJExEIChnbnU/ICR3aXRoX2dudV9sZCkKKyMgICAgICAgICAkcHJvZ25hbWU6CShHTlUgbGlidG9vbCkgMi40CisjICAgICAgICAgYXV0b21ha2U6CSRhdXRvbWFrZV92ZXJzaW9uCisjICAgICAgICAgYXV0b2NvbmY6CSRhdXRvY29uZl92ZXJzaW9uCisjCisjIFJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4KKyMgR05VIGxpYnRvb2wgaG9tZSBwYWdlOiA8aHR0cDovL3d3dy5nbnUub3JnL3NvZnR3YXJlL2xpYnRvb2wvPi4KKyMgR2VuZXJhbCBoZWxwIHVzaW5nIEdOVSBzb2Z0d2FyZTogPGh0dHA6Ly93d3cuZ251Lm9yZy9nZXRoZWxwLz4uCiAKLWJhc2VuYW1lPSJzLF4uKi8sLGciCi0KLSMgV29yayBhcm91bmQgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBpc3N1ZSBvbiBJUklYIDYuNS4gT24gSVJJWCA2LjQrLCBzaAotIyBpcyBrc2ggYnV0IHdoZW4gdGhlIHNoZWxsIGlzIGludm9rZWQgYXMgInNoIiBhbmQgdGhlIGN1cnJlbnQgdmFsdWUgb2YKLSMgdGhlIF9YUEcgZW52aXJvbm1lbnQgdmFyaWFibGUgaXMgbm90IGVxdWFsIHRvIDEgKG9uZSksIHRoZSBzcGVjaWFsCi0jIHBvc2l0aW9uYWwgcGFyYW1ldGVyICQwLCB3aXRoaW4gYSBmdW5jdGlvbiBjYWxsLCBpcyB0aGUgbmFtZSBvZiB0aGUKLSMgZnVuY3Rpb24uCi1wcm9ncGF0aD0iJDAiCi0KLSMgVGhlIG5hbWUgb2YgdGhpcyBwcm9ncmFtOgotcHJvZ25hbWU9YGVjaG8gIiRwcm9ncGF0aCIgfCAkU0VEICRiYXNlbmFtZWAKLW1vZGVuYW1lPSIkcHJvZ25hbWUiCi0KLSMgR2xvYmFsIHZhcmlhYmxlczoKLUVYSVRfU1VDQ0VTUz0wCi1FWElUX0ZBSUxVUkU9MQotCi1QUk9HUkFNPWx0bWFpbi5zaAorUFJPR1JBTT1saWJ0b29sCiBQQUNLQUdFPWxpYnRvb2wKLVZFUlNJT049MS41LjI2Ci1USU1FU1RBTVA9IiAoMS4xMjIwLjIuNDkyIDIwMDgvMDEvMzAgMDY6NDA6NTYpIgorVkVSU0lPTj0yLjQKK1RJTUVTVEFNUD0iIgorcGFja2FnZV9yZXZpc2lvbj0xLjMyOTMKIAotIyBCZSBCb3VybmUgY29tcGF0aWJsZSAodGFrZW4gZnJvbSBBdXRvY29uZjpfQVNfQk9VUk5FX0NPTVBBVElCTEUpLgorIyBCZSBCb3VybmUgY29tcGF0aWJsZQogaWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiAmJiAoZW11bGF0ZSBzaCkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCiAgIGVtdWxhdGUgc2gKICAgTlVMTENNRD06CkBAIC02MCwxMDQgKzk3LDQ2MiBAQAogQklOX1NIPXhwZzQ7IGV4cG9ydCBCSU5fU0ggIyBmb3IgVHJ1NjQKIERVQUxDQVNFPTE7IGV4cG9ydCBEVUFMQ0FTRSAjIGZvciBNS1Mgc2gKIAotIyBDaGVjayB0aGF0IHdlIGhhdmUgYSB3b3JraW5nICRlY2hvLgotaWYgdGVzdCAiWCQxIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAjIERpc2NhcmQgdGhlIC0tbm8tcmVleGVjIGZsYWcsIGFuZCBjb250aW51ZS4KLSAgc2hpZnQKLWVsaWYgdGVzdCAiWCQxIiA9IFgtLWZhbGxiYWNrLWVjaG87IHRoZW4KLSAgIyBBdm9pZCBpbmxpbmUgZG9jdW1lbnQgaGVyZSwgaXQgbWF5IGJlIGxlZnQgb3ZlcgotICA6Ci1lbGlmIHRlc3QgIlhgKCRlY2hvICdcdCcpIDI+L2Rldi9udWxsYCIgPSAnWFx0JzsgdGhlbgotICAjIFlpcHBlZSwgJGVjaG8gd29ya3MhCi0gIDoKLWVsc2UKLSAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSAkZWNobyB3aWxsIHdvcmsuCi0gIGV4ZWMgJFNIRUxMICIkcHJvZ3BhdGgiIC0tbm8tcmVleGVjICR7MSsiJEAifQotZmkKKyMgQSBmdW5jdGlvbiB0aGF0IGlzIHVzZWQgd2hlbiB0aGVyZSBpcyBubyBwcmludCBidWlsdGluIG9yIHByaW50Zi4KK2Z1bmNfZmFsbGJhY2tfZWNobyAoKQoreworICBldmFsICdjYXQgPDxfTFRFQ0hPX0VPRgorJDEKK19MVEVDSE9fRU9GJworfQogCi1pZiB0ZXN0ICJYJDEiID0gWC0tZmFsbGJhY2stZWNobzsgdGhlbgotICAjIHVzZWQgYXMgZmFsbGJhY2sgZWNobwotICBzaGlmdAotICBjYXQgPDxFT0YKLSQqCi1FT0YKLSAgZXhpdCAkRVhJVF9TVUNDRVNTCi1maQotCi1kZWZhdWx0X21vZGU9Ci1oZWxwPSJUcnkgXGAkcHJvZ25hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4iCi1tYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCi1ta2Rpcj0ibWtkaXIiCi1tdj0ibXYgLWYiCi1ybT0icm0gLWYiCi0KLSMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKLSMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCi1Yc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJwotc2VkX3F1b3RlX3N1YnN0PSdzL1woW1xcYFxcIiRcXFxcXVwpL1xcXDEvZycKLSMgdGVzdCBFQkNESUMgb3IgQVNDSUkKLWNhc2UgYGVjaG8gWHx0ciBYICdcMTAxJ2AgaW4KLSBBKSAjIEFTQ0lJIGJhc2VkIHN5c3RlbQotICAgICMgXG4gaXMgbm90IGludGVycHJldGVkIGNvcnJlY3RseSBieSBTb2xhcmlzIDggL3Vzci91Y2IvdHIKLSAgU1AyTkw9J3RyIFwwNDAgXDAxMicKLSAgTkwyU1A9J3RyIFwwMTVcMDEyIFwwNDBcMDQwJwotICA7OwotICopICMgRUJDRElDIGJhc2VkIHN5c3RlbQotICBTUDJOTD0ndHIgXDEwMCBcbicKLSAgTkwyU1A9J3RyIFxyXG4gXDEwMFwxMDAnCi0gIDs7Ci1lc2FjCi0KLSMgTkxTIG51aXNhbmNlcy4KLSMgT25seSBzZXQgTEFORyBhbmQgTENfQUxMIHRvIEMgaWYgYWxyZWFkeSBzZXQuCi0jIFRoZXNlIG11c3Qgbm90IGJlIHNldCB1bmNvbmRpdGlvbmFsbHkgYmVjYXVzZSBub3QgYWxsIHN5c3RlbXMgdW5kZXJzdGFuZAotIyBlLmcuIExBTkc9QyAobm90YWJseSBTQ08pLgotIyBXZSBzYXZlIHRoZSBvbGQgdmFsdWVzIHRvIHJlc3RvcmUgZHVyaW5nIGV4ZWN1dGUgbW9kZS4KLWx0X2Vudj0KKyMgTkxTIG51aXNhbmNlczogV2Ugc2F2ZSB0aGUgb2xkIHZhbHVlcyB0byByZXN0b3JlIGR1cmluZyBleGVjdXRlIG1vZGUuCitsdF91c2VyX2xvY2FsZT0KK2x0X3NhZmVfbG9jYWxlPQogZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCiBkbwogICBldmFsICJpZiB0ZXN0IFwiXCR7JGx0X3ZhcitzZXR9XCIgPSBzZXQ7IHRoZW4KLQkgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKLQkgIGx0X2Vudj1cIiRsdF92YXI9XCQkbHRfdmFyIFwkbHRfZW52XCIKLQkgICRsdF92YXI9QworICAgICAgICAgIHNhdmVfJGx0X3Zhcj1cJCRsdF92YXIKKyAgICAgICAgICAkbHRfdmFyPUMKIAkgIGV4cG9ydCAkbHRfdmFyCisJICBsdF91c2VyX2xvY2FsZT1cIiRsdF92YXI9XFxcJHNhdmVfXCRsdF92YXI7IFwkbHRfdXNlcl9sb2NhbGVcIgorCSAgbHRfc2FmZV9sb2NhbGU9XCIkbHRfdmFyPUM7IFwkbHRfc2FmZV9sb2NhbGVcIgogCWZpIgogZG9uZQorTENfQUxMPUMKK0xBTkdVQUdFPUMKK2V4cG9ydCBMQU5HVUFHRSBMQ19BTEwKIAotaWYgdGVzdCAtbiAiJGx0X2VudiI7IHRoZW4KLSAgbHRfZW52PSJlbnYgJGx0X2VudiIKLWZpCiskbHRfdW5zZXQgQ0RQQVRICisKKworIyBXb3JrIGFyb3VuZCBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IGlzc3VlIG9uIElSSVggNi41LiBPbiBJUklYIDYuNCssIHNoCisjIGlzIGtzaCBidXQgd2hlbiB0aGUgc2hlbGwgaXMgaW52b2tlZCBhcyAic2giIGFuZCB0aGUgY3VycmVudCB2YWx1ZSBvZgorIyB0aGUgX1hQRyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpcyBub3QgZXF1YWwgdG8gMSAob25lKSwgdGhlIHNwZWNpYWwKKyMgcG9zaXRpb25hbCBwYXJhbWV0ZXIgJDAsIHdpdGhpbiBhIGZ1bmN0aW9uIGNhbGwsIGlzIHRoZSBuYW1lIG9mIHRoZQorIyBmdW5jdGlvbi4KK3Byb2dwYXRoPSIkMCIKKworCisKKzogJHtDUD0iY3AgLWYifQordGVzdCAiJHtFQ0hPK3NldH0iID0gc2V0IHx8IEVDSE89JHthc19lY2hvLSdwcmludGYgJXNcbid9Cis6ICR7RUdSRVA9ImdyZXAgLUUifQorOiAke0ZHUkVQPSJncmVwIC1GIn0KKzogJHtHUkVQPSJncmVwIn0KKzogJHtMTl9TPSJsbiAtcyJ9Cis6ICR7TUFLRT0ibWFrZSJ9Cis6ICR7TUtESVI9Im1rZGlyIn0KKzogJHtNVj0ibXYgLWYifQorOiAke1JNPSJybSAtZiJ9Cis6ICR7U0VEPSJzZWQifQorOiAke1NIRUxMPSIke0NPTkZJR19TSEVMTC0vYmluL3NofSJ9Cis6ICR7WHNlZD0iJFNFRCAtZSAxcy9eWC8vIn0KKworIyBHbG9iYWwgdmFyaWFibGVzOgorRVhJVF9TVUNDRVNTPTAKK0VYSVRfRkFJTFVSRT0xCitFWElUX01JU01BVENIPTYzICAjICQ/ID0gNjMgaXMgdXNlZCB0byBpbmRpY2F0ZSB2ZXJzaW9uIG1pc21hdGNoIHRvIG1pc3NpbmcuCitFWElUX1NLSVA9NzcJICAjICQ/ID0gNzcgaXMgdXNlZCB0byBpbmRpY2F0ZSBhIHNraXBwZWQgdGVzdCB0byBhdXRvbWFrZS4KKworZXhpdF9zdGF0dXM9JEVYSVRfU1VDQ0VTUwogCiAjIE1ha2Ugc3VyZSBJRlMgaGFzIGEgc2Vuc2libGUgZGVmYXVsdAogbHRfbmw9JwogJwogSUZTPSIgCSRsdF9ubCIKIAotaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgIT0geWVzOyB0aGVuCi0gICRlY2hvICIkbW9kZW5hbWU6IG5vdCBjb25maWd1cmVkIHRvIGJ1aWxkIGFueSBraW5kIG9mIGxpYnJhcnkiIDE+JjIKLSAgJGVjaG8gIkZhdGFsIGNvbmZpZ3VyYXRpb24gZXJyb3IuICBTZWUgdGhlICRQQUNLQUdFIGRvY3MgZm9yIG1vcmUgaW5mb3JtYXRpb24uIiAxPiYyCi0gIGV4aXQgJEVYSVRfRkFJTFVSRQotZmkKK2Rpcm5hbWU9InMsL1teL10qJCwsIgorYmFzZW5hbWU9InMsXi4qLywsIgogCi0jIEdsb2JhbCB2YXJpYWJsZXMuCi1tb2RlPSRkZWZhdWx0X21vZGUKLW5vbm9wdD0KLXByZXY9Ci1wcmV2b3B0PQotcnVuPQotc2hvdz0iJGVjaG8iCi1zaG93X2hlbHA9Ci1leGVjdXRlX2RsZmlsZXM9Ci1kdXBsaWNhdGVfZGVwcz1ubwotcHJlc2VydmVfYXJncz0KLWxvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKLW8ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKLWV4dHJhY3RlZF9hcmNoaXZlcz0KLWV4dHJhY3RlZF9zZXJpYWw9MAorIyBmdW5jX2Rpcm5hbWUgZmlsZSBhcHBlbmQgbm9uZGlyX3JlcGxhY2VtZW50CisjIENvbXB1dGUgdGhlIGRpcm5hbWUgb2YgRklMRS4gIElmIG5vbmVtcHR5LCBhZGQgQVBQRU5EIHRvIHRoZSByZXN1bHQsCisjIG90aGVyd2lzZSBzZXQgcmVzdWx0IHRvIE5PTkRJUl9SRVBMQUNFTUVOVC4KK2Z1bmNfZGlybmFtZSAoKQoreworICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRkaXJuYW1lImAKKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgICAgZmkKK30gIyBmdW5jX2Rpcm5hbWUgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgU2hlbGwgZnVuY3Rpb24gZGVmaW5pdGlvbnM6Ci0jIFRoaXMgc2VlbXMgdG8gYmUgdGhlIGJlc3QgcGxhY2UgZm9yIHRoZW0KKworIyBmdW5jX2Jhc2VuYW1lIGZpbGUKK2Z1bmNfYmFzZW5hbWUgKCkKK3sKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAiJGJhc2VuYW1lImAKK30gIyBmdW5jX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSBmaWxlIGFwcGVuZCBub25kaXJfcmVwbGFjZW1lbnQKKyMgcGVyZm9ybSBmdW5jX2Jhc2VuYW1lIGFuZCBmdW5jX2Rpcm5hbWUgaW4gYSBzaW5nbGUgZnVuY3Rpb24KKyMgY2FsbDoKKyMgICBkaXJuYW1lOiAgQ29tcHV0ZSB0aGUgZGlybmFtZSBvZiBGSUxFLiAgSWYgbm9uZW1wdHksCisjICAgICAgICAgICAgIGFkZCBBUFBFTkQgdG8gdGhlIHJlc3VsdCwgb3RoZXJ3aXNlIHNldCByZXN1bHQKKyMgICAgICAgICAgICAgdG8gTk9ORElSX1JFUExBQ0VNRU5ULgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisjICAgYmFzZW5hbWU6IENvbXB1dGUgZmlsZW5hbWUgb2YgRklMRS4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dW5lZCBpbiAiJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorIyBJbXBsZW1lbnRhdGlvbiBtdXN0IGJlIGtlcHQgc3luY2hyb25pemVkIHdpdGggZnVuY19kaXJuYW1lCisjIGFuZCBmdW5jX2Jhc2VuYW1lLiBGb3IgZWZmaWNpZW5jeSwgd2UgZG8gbm90IGRlbGVnYXRlIHRvCisjIHRob3NlIGZ1bmN0aW9ucyBidXQgaW5zdGVhZCBkdXBsaWNhdGUgdGhlIGZ1bmN0aW9uYWxpdHkgaGVyZS4KK2Z1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgKCkKK3sKKyAgICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgorICAgIGZ1bmNfZGlybmFtZV9yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgICBpZiB0ZXN0ICJYJGZ1bmNfZGlybmFtZV9yZXN1bHQiID0gIlgkezF9IjsgdGhlbgorICAgICAgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIKKyAgICBlbHNlCisgICAgICBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkZnVuY19kaXJuYW1lX3Jlc3VsdCR7Mn0iCisgICAgZmkKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAtZSAiJGJhc2VuYW1lImAKK30gIyBmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19zdHJpcG5hbWUgcHJlZml4IHN1ZmZpeCBuYW1lCisjIHN0cmlwIFBSRUZJWCBhbmQgU1VGRklYIG9mZiBvZiBOQU1FLgorIyBQUkVGSVggYW5kIFNVRkZJWCBtdXN0IG5vdCBjb250YWluIGdsb2JiaW5nIG9yIHJlZ2V4IHNwZWNpYWwKKyMgY2hhcmFjdGVycywgaGFzaGVzLCBwZXJjZW50IHNpZ25zLCBidXQgU1VGRklYIG1heSBjb250YWluIGEgbGVhZGluZworIyBkb3QgKGluIHdoaWNoIGNhc2UgdGhhdCBtYXRjaGVzIG9ubHkgYSBkb3QpLgorIyBmdW5jX3N0cmlwX3N1ZmZpeCBwcmVmaXggbmFtZQorZnVuY19zdHJpcG5hbWUgKCkKK3sKKyAgICBjYXNlICR7Mn0gaW4KKyAgICAgIC4qKSBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9YCRFQ0hPICIkezN9IiB8ICRTRUQgInMlXiR7MX0lJTsgcyVcXFxcJHsyfVwkJSUiYDs7CisgICAgICAqKSAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PWAkRUNITyAiJHszfSIgfCAkU0VEICJzJV4kezF9JSU7IHMlJHsyfVwkJSUiYDs7CisgICAgZXNhYworfSAjIGZ1bmNfc3RyaXBuYW1lIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgVGhlc2UgU0VEIHNjcmlwdHMgcHJlc3VwcG9zZSBhbiBhYnNvbHV0ZSBwYXRoIHdpdGggYSB0cmFpbGluZyBzbGFzaC4KK3BhdGhjYXI9J3MsXi9cKFteL10qXCkuKiQsXDEsJworcGF0aGNkcj0ncyxeL1teL10qLCwnCityZW1vdmVkb3RwYXJ0cz0nOmRvdHNsCisJCXNAL1wuL0AvQGcKKwkJdCBkb3RzbAorCQlzLC9cLiQsLywnCitjb2xsYXBzZXNsYXNoZXM9J3NAL1x7MSxcfUAvQGcnCitmaW5hbHNsYXNoPSdzLC8qJCwvLCcKKworIyBmdW5jX25vcm1hbF9hYnNwYXRoIFBBVEgKKyMgUmVtb3ZlIGRvdWJsZWQtdXAgYW5kIHRyYWlsaW5nIHNsYXNoZXMsICIuIiBwYXRoIGNvbXBvbmVudHMsCisjIGFuZCBjYW5jZWwgb3V0IGFueSAiLi4iIHBhdGggY29tcG9uZW50cyBpbiBQQVRIIGFmdGVyIG1ha2luZworIyBpdCBhbiBhYnNvbHV0ZSBwYXRoLgorIyAgICAgICAgICAgICB2YWx1ZSByZXR1cm5lZCBpbiAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0IgorZnVuY19ub3JtYWxfYWJzcGF0aCAoKQoreworICAjIFN0YXJ0IGZyb20gcm9vdCBkaXIgYW5kIHJlYXNzZW1ibGUgdGhlIHBhdGguCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PQorICBmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoPSQxCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPQorICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIGluCisgICAgIiIpCisgICAgICAjIEVtcHR5IHBhdGgsIHRoYXQganVzdCBtZWFucyAkY3dkLgorICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICJgcHdkYCIKKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgIHJldHVybgorICAgIDs7CisgICAgIyBUaGUgbmV4dCB0aHJlZSBlbnRyaWVzIGFyZSB1c2VkIHRvIHNwb3QgYSBydW4gb2YgcHJlY2lzZWx5CisgICAgIyB0d28gbGVhZGluZyBzbGFzaGVzIHdpdGhvdXQgdXNpbmcgbmVnYXRlZCBjaGFyYWN0ZXIgY2xhc3NlczsKKyAgICAjIHdlIHRha2UgYWR2YW50YWdlIG9mIGNhc2UncyBmaXJzdC1tYXRjaCBiZWhhdmlvdXIuCisgICAgLy8vKikKKyAgICAgICMgVW51c3VhbCBmb3JtIG9mIGFic29sdXRlIHBhdGgsIGRvIG5vdGhpbmcuCisgICAgOzsKKyAgICAvLyopCisgICAgICAjIE5vdCBuZWNlc3NhcmlseSBhbiBvcmRpbmFyeSBwYXRoOyBQT1NJWCByZXNlcnZlcyBsZWFkaW5nICcvLycKKyAgICAgICMgYW5kIGZvciBleGFtcGxlIEN5Z3dpbiB1c2VzIGl0IHRvIGFjY2VzcyByZW1vdGUgZmlsZSBzaGFyZXMKKyAgICAgICMgb3ZlciBDSUZTL1NNQiwgc28gd2UgY29uc2VydmUgYSBsZWFkaW5nIGRvdWJsZSBzbGFzaCBpZiBmb3VuZC4KKyAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfYWx0bmFtZXNwYWNlPS8KKyAgICA7OworICAgIC8qKQorICAgICAgIyBBYnNvbHV0ZSBwYXRoLCBkbyBub3RoaW5nLgorICAgIDs7CisgICAgKikKKyAgICAgICMgUmVsYXRpdmUgcGF0aCwgcHJlcGVuZCAkY3dkLgorICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gcHdkYC8kZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aAorICAgIDs7CisgIGVzYWMKKyAgIyBDYW5jZWwgb3V0IGFsbCB0aGUgc2ltcGxlIHN0dWZmIHRvIHNhdmUgaXRlcmF0aW9ucy4gIFdlIGFsc28gd2FudAorICAjIHRoZSBwYXRoIHRvIGVuZCB3aXRoIGEgc2xhc2ggZm9yIGVhc2Ugb2YgcGFyc2luZywgc28gbWFrZSBzdXJlCisgICMgdGhlcmUgaXMgb25lIChhbmQgb25seSBvbmUpIGhlcmUuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGg9YCRFQ0hPICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgfCAkU0VEIFwKKyAgICAgICAgLWUgIiRyZW1vdmVkb3RwYXJ0cyIgLWUgIiRjb2xsYXBzZXNsYXNoZXMiIC1lICIkZmluYWxzbGFzaCJgCisgIHdoaWxlIDo7IGRvCisgICAgIyBQcm9jZXNzZWQgaXQgYWxsIHlldD8KKyAgICBpZiB0ZXN0ICIkZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aCIgPSAvIDsgdGhlbgorICAgICAgIyBJZiB3ZSBhc2NlbmRlZCB0byB0aGUgcm9vdCB1c2luZyAiLi4iIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5IG5vdy4KKyAgICAgIGlmIHRlc3QgLXogIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PS8KKyAgICAgIGZpCisgICAgICBicmVhaworICAgIGZpCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90Y29tcG9uZW50PWAkRUNITyAiJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdHBhdGgiIHwgJFNFRCBcCisgICAgICAgIC1lICIkcGF0aGNhciJgCisgICAgZnVuY19ub3JtYWxfYWJzcGF0aF90cGF0aD1gJEVDSE8gIiRmdW5jX25vcm1hbF9hYnNwYXRoX3RwYXRoIiB8ICRTRUQgXAorICAgICAgICAtZSAiJHBhdGhjZHIiYAorICAgICMgRmlndXJlIG91dCB3aGF0IHRvIGRvIHdpdGggaXQKKyAgICBjYXNlICRmdW5jX25vcm1hbF9hYnNwYXRoX3Rjb21wb25lbnQgaW4KKyAgICAgICIiKQorICAgICAgICAjIFRyYWlsaW5nIGVtcHR5IHBhdGggY29tcG9uZW50LCBpZ25vcmUgaXQuCisgICAgICA7OworICAgICAgLi4pCisgICAgICAgICMgUGFyZW50IGRpcjsgc3RyaXAgbGFzdCBhc3NlbWJsZWQgY29tcG9uZW50IGZyb20gcmVzdWx0LgorICAgICAgICBmdW5jX2Rpcm5hbWUgIiRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdCIKKyAgICAgICAgZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQ9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgIDs7CisgICAgICAqKQorICAgICAgICAjIEFjdHVhbCBwYXRoIGNvbXBvbmVudCwgYXBwZW5kIGl0LgorICAgICAgICBmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdD0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQvJGZ1bmNfbm9ybWFsX2Fic3BhdGhfdGNvbXBvbmVudAorICAgICAgOzsKKyAgICBlc2FjCisgIGRvbmUKKyAgIyBSZXN0b3JlIGxlYWRpbmcgZG91YmxlLXNsYXNoIGlmIG9uZSB3YXMgZm91bmQgb24gZW50cnkuCisgIGZ1bmNfbm9ybWFsX2Fic3BhdGhfcmVzdWx0PSRmdW5jX25vcm1hbF9hYnNwYXRoX2FsdG5hbWVzcGFjZSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorfQorCisjIGZ1bmNfcmVsYXRpdmVfcGF0aCBTUkNESVIgRFNURElSCisjIGdlbmVyYXRlcyBhIHJlbGF0aXZlIHBhdGggZnJvbSBTUkNESVIgdG8gRFNURElSLCB3aXRoIGEgdHJhaWxpbmcKKyMgc2xhc2ggaWYgbm9uLWVtcHR5LCBzdWl0YWJsZSBmb3IgaW1tZWRpYXRlbHkgYXBwZW5kaW5nIGEgZmlsZW5hbWUKKyMgd2l0aG91dCBuZWVkaW5nIHRvIGFwcGVuZCBhIHNlcGFyYXRvci4KKyMgICAgICAgICAgICAgdmFsdWUgcmV0dXJuZWQgaW4gIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorZnVuY19yZWxhdGl2ZV9wYXRoICgpCit7CisgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9CisgIGZ1bmNfbm9ybWFsX2Fic3BhdGggIiQxIgorICBmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpcj0kZnVuY19ub3JtYWxfYWJzcGF0aF9yZXN1bHQKKyAgZnVuY19ub3JtYWxfYWJzcGF0aCAiJDIiCisgIGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyPSRmdW5jX25vcm1hbF9hYnNwYXRoX3Jlc3VsdAorCisgICMgQXNjZW5kIHRoZSB0cmVlIHN0YXJ0aW5nIGZyb20gbGliZGlyCisgIHdoaWxlIDo7IGRvCisgICAgIyBjaGVjayBpZiB3ZSBoYXZlIGZvdW5kIGEgcHJlZml4IG9mIGJpbmRpcgorICAgIGNhc2UgJGZ1bmNfcmVsYXRpdmVfcGF0aF90YmluZGlyIGluCisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIpCisgICAgICAgICMgZm91bmQgYW4gZXhhY3QgbWF0Y2gKKyAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3RjYW5jZWxsZWQ9CisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIqKQorICAgICAgICAjIGZvdW5kIGEgbWF0Y2hpbmcgcHJlZml4CisgICAgICAgIGZ1bmNfc3RyaXBuYW1lICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RsaWJkaXIiICcnICIkZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIiCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICAgICAgaWYgdGVzdCAteiAiJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQiOyB0aGVuCisgICAgICAgICAgZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdD0uCisgICAgICAgIGZpCisgICAgICAgIGJyZWFrCisgICAgICAgIDs7CisgICAgICAqKQorICAgICAgICBmdW5jX2Rpcm5hbWUgJGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyCisgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF90bGliZGlyPSR7ZnVuY19kaXJuYW1lX3Jlc3VsdH0KKyAgICAgICAgaWYgdGVzdCAieCRmdW5jX3JlbGF0aXZlX3BhdGhfdGxpYmRpciIgPSB4IDsgdGhlbgorICAgICAgICAgICMgSGF2ZSB0byBkZXNjZW5kIGFsbCB0aGUgd2F5IHRvIHRoZSByb290IQorICAgICAgICAgIGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQ9Li4vJGZ1bmNfcmVsYXRpdmVfcGF0aF9yZXN1bHQKKyAgICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfdGNhbmNlbGxlZD0kZnVuY19yZWxhdGl2ZV9wYXRoX3RiaW5kaXIKKyAgICAgICAgICBicmVhaworICAgICAgICBmaQorICAgICAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PS4uLyRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0CisgICAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBOb3cgY2FsY3VsYXRlIHBhdGg7IHRha2UgY2FyZSB0byBhdm9pZCBkb3VibGluZy11cCBzbGFzaGVzLgorICBmdW5jX3N0cmlwbmFtZSAnJyAnLycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IgorICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZnVuY19zdHJpcG5hbWUgJy8nICcvJyAiJGZ1bmNfcmVsYXRpdmVfcGF0aF90Y2FuY2VsbGVkIgorICBpZiB0ZXN0ICJ4JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIgIT0geCA7IHRoZW4KKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSR7ZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdH0vJHtmdW5jX3N0cmlwbmFtZV9yZXN1bHR9CisgIGZpCisKKyAgIyBOb3JtYWxpc2F0aW9uLiBJZiBiaW5kaXIgaXMgbGliZGlyLCByZXR1cm4gZW1wdHkgc3RyaW5nLAorICAjIGVsc2UgcmVsYXRpdmUgcGF0aCBlbmRpbmcgd2l0aCBhIHNsYXNoOyBlaXRoZXIgd2F5LCB0YXJnZXQKKyAgIyBmaWxlIG5hbWUgY2FuIGJlIGRpcmVjdGx5IGFwcGVuZGVkLgorICBpZiB0ZXN0ICEgLXogIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0IjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICcuLycgJycgIiRmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0LyIKKyAgICBmdW5jX3JlbGF0aXZlX3BhdGhfcmVzdWx0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgZmkKK30KKworIyBUaGUgbmFtZSBvZiB0aGlzIHByb2dyYW06CitmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lICIkcHJvZ3BhdGgiCitwcm9nbmFtZT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKworIyBNYWtlIHN1cmUgd2UgaGF2ZSBhbiBhYnNvbHV0ZSBwYXRoIGZvciByZWV4ZWN1dGlvbjoKK2Nhc2UgJHByb2dwYXRoIGluCisgIFtcXC9dKnxbQS1aYS16XTpcXCopIDs7CisgICpbXFwvXSopCisgICAgIHByb2dkaXI9JGZ1bmNfZGlybmFtZV9yZXN1bHQKKyAgICAgcHJvZ2Rpcj1gY2QgIiRwcm9nZGlyIiAmJiBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7CisgICopCisgICAgIHNhdmVfSUZTPSIkSUZTIgorICAgICBJRlM9OgorICAgICBmb3IgcHJvZ2RpciBpbiAkUEFUSDsgZG8KKyAgICAgICBJRlM9IiRzYXZlX0lGUyIKKyAgICAgICB0ZXN0IC14ICIkcHJvZ2Rpci8kcHJvZ25hbWUiICYmIGJyZWFrCisgICAgIGRvbmUKKyAgICAgSUZTPSIkc2F2ZV9JRlMiCisgICAgIHRlc3QgLW4gIiRwcm9nZGlyIiB8fCBwcm9nZGlyPWBwd2RgCisgICAgIHByb2dwYXRoPSIkcHJvZ2Rpci8kcHJvZ25hbWUiCisgICAgIDs7Citlc2FjCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitYc2VkPSIke1NFRH0iJyAtZSAxcy9eWC8vJworc2VkX3F1b3RlX3N1YnN0PSdzL1woW2AiJFxcXVwpL1xcXDEvZycKKworIyBTYW1lIGFzIGFib3ZlLCBidXQgZG8gbm90IHF1b3RlIHZhcmlhYmxlIHJlZmVyZW5jZXMuCitkb3VibGVfcXVvdGVfc3Vic3Q9J3MvXChbImBcXF1cKS9cXFwxL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IHR1cm5zIGEgc3RyaW5nIGludG8gYSByZWdleCBtYXRjaGluZyBmb3IgdGhlCisjIHN0cmluZyBsaXRlcmFsbHkuCitzZWRfbWFrZV9saXRlcmFsX3JlZ2V4PSdzLFtdLlteJFxcKlwvXSxcXCYsZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRoYXQgY29udmVydHMgYSB3MzIgZmlsZSBuYW1lIG9yIHBhdGgKKyMgd2hpY2ggY29udGFpbnMgZm9yd2FyZCBzbGFzaGVzLCBpbnRvIG9uZSB0aGF0IGNvbnRhaW5zCisjIChlc2NhcGVkKSBiYWNrc2xhc2hlcy4gIEEgdmVyeSBuYWl2ZSBpbXBsZW1lbnRhdGlvbi4KK2x0X3NlZF9uYWl2ZV9iYWNrc2xhc2hpZnk9J3N8XFxcXCp8XFx8ZztzfC98XFx8ZztzfFxcfFxcXFx8ZycKKworIyBSZS1gXCcgcGFyYW1ldGVyIGV4cGFuc2lvbnMgaW4gb3V0cHV0IG9mIGRvdWJsZV9xdW90ZV9zdWJzdCB0aGF0IHdlcmUKKyMgYFwnLWVkIGluIGlucHV0IHRvIHRoZSBzYW1lLiAgSWYgYW4gb2RkIG51bWJlciBvZiBgXCcgcHJlY2VkZWQgYSAnJCcKKyMgaW4gaW5wdXQgdG8gZG91YmxlX3F1b3RlX3N1YnN0LCB0aGF0ICckJyB3YXMgcHJvdGVjdGVkIGZyb20gZXhwYW5zaW9uLgorIyBTaW5jZSBlYWNoIGlucHV0IGBcJyBpcyBub3cgdHdvIGBcJ3MsIGxvb2sgZm9yIGFueSBudW1iZXIgb2YgcnVucyBvZgorIyBmb3VyIGBcJ3MgZm9sbG93ZWQgYnkgdHdvIGBcJ3MgYW5kIHRoZW4gYSAnJCcuICBgXCcgdGhhdCAnJCcuCiticz0nXFwnCiticzI9J1xcXFwnCiticzQ9J1xcXFxcXFxcJworZG9sbGFyPSdcJCcKK3NlZF9kb3VibGVfYmFja3NsYXNoPSJcCisgIHMvJGJzNC8mXFwKKy9nCisgIHMvXiRiczIkZG9sbGFyLyRicyYvCisgIHMvXFwoW14kYnNdXFwpJGJzMiRkb2xsYXIvXFwxJGJzMiRicyRkb2xsYXIvZworICBzL1xuLy9nIgorCisjIFN0YW5kYXJkIG9wdGlvbnM6CitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2hlbHA9ZmFsc2UKK29wdF9xdWlldD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKK29wdF93YXJuaW5nPToKKworIyBmdW5jX2VjaG8gYXJnLi4uCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UsIGFsb25nIHdpdGggdGhlIGN1cnJlbnQgbW9kZQorIyBuYW1lIGlmIGl0IGhhcyBiZWVuIHNldCB5ZXQuCitmdW5jX2VjaG8gKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSQqIgorfQorCisjIGZ1bmNfdmVyYm9zZSBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSBpbiB2ZXJib3NlIG1vZGUgb25seS4KK2Z1bmNfdmVyYm9zZSAoKQoreworICAgICRvcHRfdmVyYm9zZSAmJiBmdW5jX2VjaG8gJHsxKyIkQCJ9CisKKyAgICAjIEEgYnVnIGluIGJhc2ggaGFsdHMgdGhlIHNjcmlwdCBpZiB0aGUgbGFzdCBsaW5lIG9mIGEgZnVuY3Rpb24KKyAgICAjIGZhaWxzIHdoZW4gc2V0IC1lIGlzIGluIGZvcmNlLCBzbyB3ZSBuZWVkIGFub3RoZXIgY29tbWFuZCB0bworICAgICMgd29yayBhcm91bmQgdGhhdDoKKyAgICA6Cit9CisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiCit9CisKKyMgZnVuY19lcnJvciBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvci4KK2Z1bmNfZXJyb3IgKCkKK3sKKyAgICAkRUNITyAiJHByb2duYW1lOiAke29wdF9tb2RlKyRvcHRfbW9kZTogfSIkezErIiRAIn0gMT4mMgorfQorCisjIGZ1bmNfd2FybmluZyBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgd2FybmluZyBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLgorZnVuY193YXJuaW5nICgpCit7CisgICAgJG9wdF93YXJuaW5nICYmICRFQ0hPICIkcHJvZ25hbWU6ICR7b3B0X21vZGUrJG9wdF9tb2RlOiB9d2FybmluZzogIiR7MSsiJEAifSAxPiYyCisKKyAgICAjIGJhc2ggYnVnIGFnYWluOgorICAgIDoKK30KKworIyBmdW5jX2ZhdGFsX2Vycm9yIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfZXJyb3IgKCkKK3sKKyAgICBmdW5jX2Vycm9yICR7MSsiJEAifQorICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorfQorCisjIGZ1bmNfZmF0YWxfaGVscCBhcmcuLi4KKyMgRWNobyBwcm9ncmFtIG5hbWUgcHJlZml4ZWQgbWVzc2FnZSB0byBzdGFuZGFyZCBlcnJvciwgZm9sbG93ZWQgYnkKKyMgYSBoZWxwIGhpbnQsIGFuZCBleGl0LgorZnVuY19mYXRhbF9oZWxwICgpCit7CisgICAgZnVuY19lcnJvciAkezErIiRAIn0KKyAgICBmdW5jX2ZhdGFsX2Vycm9yICIkaGVscCIKK30KK2hlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgICMjIGRlZmF1bHQKKworCisjIGZ1bmNfZ3JlcCBleHByZXNzaW9uIGZpbGVuYW1lCisjIENoZWNrIHdoZXRoZXIgRVhQUkVTU0lPTiBtYXRjaGVzIGFueSBsaW5lIG9mIEZJTEVOQU1FLCB3aXRob3V0IG91dHB1dC4KK2Z1bmNfZ3JlcCAoKQoreworICAgICRHUkVQICIkMSIgIiQyIiA+L2Rldi9udWxsIDI+JjEKK30KKworCisjIGZ1bmNfbWtkaXJfcCBkaXJlY3RvcnktcGF0aAorIyBNYWtlIHN1cmUgdGhlIGVudGlyZSBwYXRoIHRvIERJUkVDVE9SWS1QQVRIIGlzIGF2YWlsYWJsZS4KK2Z1bmNfbWtkaXJfcCAoKQoreworICAgIG15X2RpcmVjdG9yeV9wYXRoPSIkMSIKKyAgICBteV9kaXJfbGlzdD0KKworICAgIGlmIHRlc3QgLW4gIiRteV9kaXJlY3RvcnlfcGF0aCIgJiYgdGVzdCAiJG9wdF9kcnlfcnVuIiAhPSAiOiI7IHRoZW4KKworICAgICAgIyBQcm90ZWN0IGRpcmVjdG9yeSBuYW1lcyBzdGFydGluZyB3aXRoIGAtJworICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4KKyAgICAgICAgLSopIG15X2RpcmVjdG9yeV9wYXRoPSIuLyRteV9kaXJlY3RvcnlfcGF0aCIgOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBXaGlsZSBzb21lIHBvcnRpb24gb2YgRElSIGRvZXMgbm90IHlldCBleGlzdC4uLgorICAgICAgd2hpbGUgdGVzdCAhIC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiOyBkbworICAgICAgICAjIC4uLm1ha2UgYSBsaXN0IGluIHRvcG1vc3QgZmlyc3Qgb3JkZXIuICBVc2UgYSBjb2xvbiBkZWxpbWl0ZWQKKwkjIGxpc3QgaW5jYXNlIHNvbWUgcG9ydGlvbiBvZiBwYXRoIGNvbnRhaW5zIHdoaXRlc3BhY2UuCisgICAgICAgIG15X2Rpcl9saXN0PSIkbXlfZGlyZWN0b3J5X3BhdGg6JG15X2Rpcl9saXN0IgorCisgICAgICAgICMgSWYgdGhlIGxhc3QgcG9ydGlvbiBhZGRlZCBoYXMgbm8gc2xhc2ggaW4gaXQsIHRoZSBsaXN0IGlzIGRvbmUKKyAgICAgICAgY2FzZSAkbXlfZGlyZWN0b3J5X3BhdGggaW4gKi8qKSA7OyAqKSBicmVhayA7OyBlc2FjCisKKyAgICAgICAgIyAuLi5vdGhlcndpc2UgdGhyb3cgYXdheSB0aGUgY2hpbGQgZGlyZWN0b3J5IGFuZCBsb29wCisgICAgICAgIG15X2RpcmVjdG9yeV9wYXRoPWAkRUNITyAiJG15X2RpcmVjdG9yeV9wYXRoIiB8ICRTRUQgLWUgIiRkaXJuYW1lImAKKyAgICAgIGRvbmUKKyAgICAgIG15X2Rpcl9saXN0PWAkRUNITyAiJG15X2Rpcl9saXN0IiB8ICRTRUQgJ3MsOiokLCwnYAorCisgICAgICBzYXZlX21rZGlyX3BfSUZTPSIkSUZTIjsgSUZTPSc6JworICAgICAgZm9yIG15X2RpciBpbiAkbXlfZGlyX2xpc3Q7IGRvCisJSUZTPSIkc2F2ZV9ta2Rpcl9wX0lGUyIKKyAgICAgICAgIyBta2RpciBjYW4gZmFpbCB3aXRoIGEgYEZpbGUgZXhpc3QnIGVycm9yIGlmIHR3byBwcm9jZXNzZXMKKyAgICAgICAgIyB0cnkgdG8gY3JlYXRlIG9uZSBvZiB0aGUgZGlyZWN0b3JpZXMgY29uY3VycmVudGx5LiAgRG9uJ3QKKyAgICAgICAgIyBzdG9wIGluIHRoYXQgY2FzZSEKKyAgICAgICAgJE1LRElSICIkbXlfZGlyIiAyPi9kZXYvbnVsbCB8fCA6CisgICAgICBkb25lCisgICAgICBJRlM9IiRzYXZlX21rZGlyX3BfSUZTIgorCisgICAgICAjIEJhaWwgb3V0IGlmIHdlIChvciBzb21lIG90aGVyIHByb2Nlc3MpIGZhaWxlZCB0byBjcmVhdGUgYSBkaXJlY3RvcnkuCisgICAgICB0ZXN0IC1kICIkbXlfZGlyZWN0b3J5X3BhdGgiIHx8IFwKKyAgICAgICAgZnVuY19mYXRhbF9lcnJvciAiRmFpbGVkIHRvIGNyZWF0ZSBcYCQxJyIKKyAgICBmaQorfQorCiAKICMgZnVuY19ta3RlbXBkaXIgW3N0cmluZ10KICMgTWFrZSBhIHRlbXBvcmFyeSBkaXJlY3RvcnkgdGhhdCB3b24ndCBjbGFzaCB3aXRoIG90aGVyIHJ1bm5pbmcKQEAgLTE2Nyw3ICs1NjIsNyBAQAogewogICAgIG15X3RlbXBsYXRlPSIke1RNUERJUi0vdG1wfS8kezEtJHByb2duYW1lfSIKIAotICAgIGlmIHRlc3QgIiRydW4iID0gIjoiOyB0aGVuCisgICAgaWYgdGVzdCAiJG9wdF9kcnlfcnVuIiA9ICI6IjsgdGhlbgogICAgICAgIyBSZXR1cm4gYSBkaXJlY3RvcnkgbmFtZSwgYnV0IGRvbid0IGNyZWF0ZSBpdCBpbiBkcnktcnVuIG1vZGUKICAgICAgIG15X3RtcGRpcj0iJHtteV90ZW1wbGF0ZX0tJCQiCiAgICAgZWxzZQpAQCAtMTc2LDcyICs1NzEsODAwIEBACiAgICAgICBteV90bXBkaXI9YG1rdGVtcCAtZCAiJHtteV90ZW1wbGF0ZX0tWFhYWFhYWFgiIDI+L2Rldi9udWxsYAogCiAgICAgICBpZiB0ZXN0ICEgLWQgIiRteV90bXBkaXIiOyB0aGVuCi0JIyBGYWlsaW5nIHRoYXQsIGF0IGxlYXN0IHRyeSBhbmQgdXNlICRSQU5ET00gdG8gYXZvaWQgYSByYWNlCi0JbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgorICAgICAgICAjIEZhaWxpbmcgdGhhdCwgYXQgbGVhc3QgdHJ5IGFuZCB1c2UgJFJBTkRPTSB0byBhdm9pZCBhIHJhY2UKKyAgICAgICAgbXlfdG1wZGlyPSIke215X3RlbXBsYXRlfS0ke1JBTkRPTS0wfSQkIgogCi0Jc2F2ZV9ta3RlbXBkaXJfdW1hc2s9YHVtYXNrYAotCXVtYXNrIDAwNzcKLQkkbWtkaXIgIiRteV90bXBkaXIiCi0JdW1hc2sgJHNhdmVfbWt0ZW1wZGlyX3VtYXNrCisgICAgICAgIHNhdmVfbWt0ZW1wZGlyX3VtYXNrPWB1bWFza2AKKyAgICAgICAgdW1hc2sgMDA3NworICAgICAgICAkTUtESVIgIiRteV90bXBkaXIiCisgICAgICAgIHVtYXNrICRzYXZlX21rdGVtcGRpcl91bWFzawogICAgICAgZmkKIAogICAgICAgIyBJZiB3ZSdyZSBub3QgaW4gZHJ5LXJ1biBtb2RlLCBib21iIG91dCBvbiBmYWlsdXJlCi0gICAgICB0ZXN0IC1kICIkbXlfdG1wZGlyIiB8fCB7Ci0gICAgICAgICRlY2hvICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIgMT4mMgotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgfQorICAgICAgdGVzdCAtZCAiJG15X3RtcGRpciIgfHwgXAorICAgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgY3JlYXRlIHRlbXBvcmFyeSBkaXJlY3RvcnkgXGAkbXlfdG1wZGlyJyIKICAgICBmaQogCi0gICAgJGVjaG8gIlgkbXlfdG1wZGlyIiB8ICRYc2VkCisgICAgJEVDSE8gIiRteV90bXBkaXIiCiB9CiAKIAotIyBmdW5jX3dpbjMyX2xpYmlkIGFyZwotIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCi0jCi0jIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKLSMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50Ci0jIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KLWZ1bmNfd2luMzJfbGliaWQgKCkKKyMgZnVuY19xdW90ZV9mb3JfZXZhbCBhcmcKKyMgQWVzdGhldGljYWxseSBxdW90ZSBBUkcgdG8gYmUgZXZhbGVkIGxhdGVyLgorIyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdHdvIHZhbHVlczogRlVOQ19RVU9URV9GT1JfRVZBTF9SRVNVTFQKKyMgaXMgZG91YmxlLXF1b3RlZCwgc3VpdGFibGUgZm9yIGEgc3Vic2VxdWVudCBldmFsLCB3aGVyZWFzCisjIEZVTkNfUVVPVEVfRk9SX0VWQUxfVU5RVU9URURfUkVTVUxUIGhhcyBtZXJlbHkgYWxsIGNoYXJhY3RlcnMKKyMgd2hpY2ggYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlIHF1b3RlcyBiYWNrc2xhc2hpZmllZC4KK2Z1bmNfcXVvdGVfZm9yX2V2YWwgKCkKIHsKLSAgd2luMzJfbGliaWRfdHlwZT0idW5rbm93biIKLSAgd2luMzJfZmlsZXJlcz1gZmlsZSAtTCAkMSAyPi9kZXYvbnVsbGAKLSAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgotICAqYXJcIGFyY2hpdmVcIGltcG9ydFwgbGlicmFyeSopICMgZGVmaW5pdGVseSBpbXBvcnQKLSAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiCi0gICAgOzsKLSAgKmFyXCBhcmNoaXZlKikgIyBjb3VsZCBiZSBhbiBpbXBvcnQsIG9yIHN0YXRpYwotICAgIGlmIGV2YWwgJE9CSkRVTVAgLWYgJDEgfCAkU0VEIC1lICcxMHEnIDI+L2Rldi9udWxsIHwgXAotICAgICAgJEVHUkVQIC1lICdmaWxlIGZvcm1hdCBwZS1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT8nID4vZGV2L251bGwgOyB0aGVuCi0gICAgICB3aW4zMl9ubXJlcz1gZXZhbCAkTk0gLWYgcG9zaXggLUEgJDEgfCBcCi0JJFNFRCAtbiAtZSAnMSwxMDB7Ci0JCS8gSSAvewotCQkJcywuKixpbXBvcnQsCi0JCQlwCi0JCQlxCi0JCQl9Ci0JCX0nYAotICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KLSAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKLSAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKLSAgICAgIGVzYWMKLSAgICBmaQotICAgIDs7Ci0gICpETEwqKQotICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCi0gICAgOzsKLSAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCi0gICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgotICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKLSAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCi0gICAgICA7OworICAgIGNhc2UgJDEgaW4KKyAgICAgICpbXFxcYFwiXCRdKikKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdD1gJEVDSE8gIiQxIiB8ICRTRUQgIiRzZWRfcXVvdGVfc3Vic3QiYCA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF91bnF1b3RlZF9yZXN1bHQ9IiQxIiA7OwogICAgIGVzYWMKKworICAgIGNhc2UgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfdW5xdW90ZWRfcmVzdWx0IGluCisgICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgc2hlbGwgbWV0YWNoYXJhY3RlcnMgdG8gZGVsYXkKKyAgICAgICMgd29yZCBzcGxpdHRpbmcsIGNvbW1hbmQgc3Vic3RpdHV0aW9uIGFuZCBhbmQgdmFyaWFibGUKKyAgICAgICMgZXhwYW5zaW9uIGZvciBhIHN1YnNlcXVlbnQgZXZhbC4KKyAgICAgICMgTWFueSBCb3VybmUgc2hlbGxzIGNhbm5vdCBoYW5kbGUgY2xvc2UgYnJhY2tldHMgY29ycmVjdGx5CisgICAgICAjIGluIHNjYW4gc2V0cywgc28gd2Ugc3BlY2lmeSBpdCBzZXBhcmF0ZWx5LgorICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCisgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0PSJcIiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdFwiIgorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQ9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdCIKKyAgICBlc2FjCit9CisKKworIyBmdW5jX3F1b3RlX2Zvcl9leHBhbmQgYXJnCisjIEFlc3RoZXRpY2FsbHkgcXVvdGUgQVJHIHRvIGJlIGV2YWxlZCBsYXRlcjsgc2FtZSBhcyBhYm92ZSwKKyMgYnV0IGRvIG5vdCBxdW90ZSB2YXJpYWJsZSByZWZlcmVuY2VzLgorZnVuY19xdW90ZV9mb3JfZXhwYW5kICgpCit7CisgICAgY2FzZSAkMSBpbgorICAgICAgKltcXFxgXCJdKikKKwlteV9hcmc9YCRFQ0hPICIkMSIgfCAkU0VEIFwKKwkgICAgLWUgIiRkb3VibGVfcXVvdGVfc3Vic3QiIC1lICIkc2VkX2RvdWJsZV9iYWNrc2xhc2giYCA7OworICAgICAgKikKKyAgICAgICAgbXlfYXJnPSIkMSIgOzsKKyAgICBlc2FjCisKKyAgICBjYXNlICRteV9hcmcgaW4KKyAgICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBzaGVsbCBtZXRhY2hhcmFjdGVycyB0byBkZWxheQorICAgICAgIyB3b3JkIHNwbGl0dGluZyBhbmQgY29tbWFuZCBzdWJzdGl0dXRpb24gZm9yIGEgc3Vic2VxdWVudCBldmFsLgorICAgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKKyAgICAgICMgaW4gc2NhbiBzZXRzLCBzbyB3ZSBzcGVjaWZ5IGl0IHNlcGFyYXRlbHkuCisgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKKyAgICAgICAgbXlfYXJnPSJcIiRteV9hcmdcIiIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0PSIkbXlfYXJnIgorfQorCisKKyMgZnVuY19zaG93X2V2YWwgY21kIFtmYWlsX2V4cF0KKyMgVW5sZXNzIG9wdF9zaWxlbnQgaXMgdHJ1ZSwgdGhlbiBvdXRwdXQgQ01ELiAgVGhlbiwgaWYgb3B0X2RyeXJ1biBpcworIyBub3QgdHJ1ZSwgZXZhbHVhdGUgQ01ELiAgSWYgdGhlIGV2YWx1YXRpb24gb2YgQ01EIGZhaWxzLCBhbmQgRkFJTF9FWFAKKyMgaXMgZ2l2ZW4sIHRoZW4gZXZhbHVhdGUgaXQuCitmdW5jX3Nob3dfZXZhbCAoKQoreworICAgIG15X2NtZD0iJDEiCisgICAgbXlfZmFpbF9leHA9IiR7Mi06fSIKKworICAgICR7b3B0X3NpbGVudC1mYWxzZX0gfHwgeworICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkbXlfY21kIgorICAgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorICAgIH0KKworICAgIGlmICR7b3B0X2RyeV9ydW4tZmFsc2V9OyB0aGVuIDo7IGVsc2UKKyAgICAgIGV2YWwgIiRteV9jbWQiCisgICAgICBteV9zdGF0dXM9JD8KKyAgICAgIGlmIHRlc3QgIiRteV9zdGF0dXMiIC1lcSAwOyB0aGVuIDo7IGVsc2UKKwlldmFsICIoZXhpdCAkbXlfc3RhdHVzKTsgJG15X2ZhaWxfZXhwIgorICAgICAgZmkKKyAgICBmaQorfQorCisKKyMgZnVuY19zaG93X2V2YWxfbG9jYWxlIGNtZCBbZmFpbF9leHBdCisjIFVubGVzcyBvcHRfc2lsZW50IGlzIHRydWUsIHRoZW4gb3V0cHV0IENNRC4gIFRoZW4sIGlmIG9wdF9kcnlydW4gaXMKKyMgbm90IHRydWUsIGV2YWx1YXRlIENNRC4gIElmIHRoZSBldmFsdWF0aW9uIG9mIENNRCBmYWlscywgYW5kIEZBSUxfRVhQCisjIGlzIGdpdmVuLCB0aGVuIGV2YWx1YXRlIGl0LiAgVXNlIHRoZSBzYXZlZCBsb2NhbGUgZm9yIGV2YWx1YXRpb24uCitmdW5jX3Nob3dfZXZhbF9sb2NhbGUgKCkKK3sKKyAgICBteV9jbWQ9IiQxIgorICAgIG15X2ZhaWxfZXhwPSIkezItOn0iCisKKyAgICAke29wdF9zaWxlbnQtZmFsc2V9IHx8IHsKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJG15X2NtZCIKKyAgICAgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKyAgICB9CisKKyAgICBpZiAke29wdF9kcnlfcnVuLWZhbHNlfTsgdGhlbiA6OyBlbHNlCisgICAgICBldmFsICIkbHRfdXNlcl9sb2NhbGUKKwkgICAgJG15X2NtZCIKKyAgICAgIG15X3N0YXR1cz0kPworICAgICAgZXZhbCAiJGx0X3NhZmVfbG9jYWxlIgorICAgICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLWVxIDA7IHRoZW4gOjsgZWxzZQorCWV2YWwgIihleGl0ICRteV9zdGF0dXMpOyAkbXlfZmFpbF9leHAiCisgICAgICBmaQorICAgIGZpCit9CisKKyMgZnVuY190cl9zaAorIyBUdXJuICQxIGludG8gYSBzdHJpbmcgc3VpdGFibGUgZm9yIGEgc2hlbGwgdmFyaWFibGUgbmFtZS4KKyMgUmVzdWx0IGlzIHN0b3JlZCBpbiAkZnVuY190cl9zaF9yZXN1bHQuICBBbGwgY2hhcmFjdGVycworIyBub3QgaW4gdGhlIHNldCBhLXpBLVowLTlfIGFyZSByZXBsYWNlZCB3aXRoICdfJy4gRnVydGhlciwKKyMgaWYgJDEgYmVnaW5zIHdpdGggYSBkaWdpdCwgYSAnXycgaXMgcHJlcGVuZGVkIGFzIHdlbGwuCitmdW5jX3RyX3NoICgpCit7CisgIGNhc2UgJDEgaW4KKyAgWzAtOV0qIHwgKlshYS16QS1aMC05X10qKQorICAgIGZ1bmNfdHJfc2hfcmVzdWx0PWAkRUNITyAiJDEiIHwgJFNFRCAncy9eXChbMC05XVwpL19cMS87IHMvW15hLXpBLVowLTlfXS9fL2cnYAorICAgIDs7CisgICogKQorICAgIGZ1bmNfdHJfc2hfcmVzdWx0PSQxCiAgICAgOzsKICAgZXNhYwotICAkZWNobyAkd2luMzJfbGliaWRfdHlwZQogfQogCiAKKyMgZnVuY192ZXJzaW9uCisjIEVjaG8gdmVyc2lvbiBtZXNzYWdlIHRvIHN0YW5kYXJkIG91dHB1dCBhbmQgZXhpdC4KK2Z1bmNfdmVyc2lvbiAoKQoreworICAgICRvcHRfZGVidWcKKworICAgICRTRUQgLW4gJy8oQykvIWIgZ28KKwk6bW9yZQorCS9cLi8heworCSAgTgorCSAgcy9cbiMgLyAvCisJICBiIG1vcmUKKwl9CisJOmdvCisJL14jICckUFJPR1JBTScgKEdOVSAvLC8jIHdhcnJhbnR5OyAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworICAgICAgICBzL1woKEMpXClbIDAtOSwtXSpcKCBbMS05XVswLTldKlwpL1wxXDIvCisgICAgICAgIHAKKyAgICAgfScgPCAiJHByb2dwYXRoIgorICAgICBleGl0ICQ/Cit9CisKKyMgZnVuY191c2FnZQorIyBFY2hvIHNob3J0IGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQuCitmdW5jX3VzYWdlICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgJFNFRCAtbiAnL14jIFVzYWdlOi8sL14jICAqLiotLWhlbHAvIHsKKyAgICAgICAgcy9eIyAvLworCXMvXiMgKiQvLworCXMvXCRwcm9nbmFtZS8nJHByb2duYW1lJy8KKwlwCisgICAgfScgPCAiJHByb2dwYXRoIgorICAgIGVjaG8KKyAgICAkRUNITyAicnVuIFxgJHByb2duYW1lIC0taGVscCB8IG1vcmUnIGZvciBmdWxsIHVzYWdlIgorICAgIGV4aXQgJD8KK30KKworIyBmdW5jX2hlbHAgW05PRVhJVF0KKyMgRWNobyBsb25nIGhlbHAgbWVzc2FnZSB0byBzdGFuZGFyZCBvdXRwdXQgYW5kIGV4aXQsCisjIHVubGVzcyAnbm9leGl0JyBpcyBwYXNzZWQgYXMgYXJndW1lbnQuCitmdW5jX2hlbHAgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisKKyAgICAkU0VEIC1uICcvXiMgVXNhZ2U6LywvIyBSZXBvcnQgYnVncyB0by8geworCTpwcmludAorICAgICAgICBzL14jIC8vCisJcy9eIyAqJC8vCisJcypcJHByb2duYW1lKickcHJvZ25hbWUnKgorCXMqXCRob3N0KiciJGhvc3QiJyoKKwlzKlwkU0hFTEwqJyIkU0hFTEwiJyoKKwlzKlwkTFRDQyonIiRMVENDIicqCisJcypcJExUQ0ZMQUdTKiciJExUQ0ZMQUdTIicqCisJcypcJExEKiciJExEIicqCisJcy9cJHdpdGhfZ251X2xkLyciJHdpdGhfZ251X2xkIicvCisJcy9cJGF1dG9tYWtlX3ZlcnNpb24vJyJgKGF1dG9tYWtlIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcy9cJGF1dG9jb25mX3ZlcnNpb24vJyJgKGF1dG9jb25mIC0tdmVyc2lvbikgMj4vZGV2L251bGwgfCRTRUQgMXFgIicvCisJcAorCWQKKyAgICAgfQorICAgICAvXiMgLiogaG9tZSBwYWdlOi9iIHByaW50CisgICAgIC9eIyBHZW5lcmFsIGhlbHAgdXNpbmcvYiBwcmludAorICAgICAnIDwgIiRwcm9ncGF0aCIKKyAgICByZXQ9JD8KKyAgICBpZiB0ZXN0IC16ICIkMSI7IHRoZW4KKyAgICAgIGV4aXQgJHJldAorICAgIGZpCit9CisKKyMgZnVuY19taXNzaW5nX2FyZyBhcmduYW1lCisjIEVjaG8gcHJvZ3JhbSBuYW1lIHByZWZpeGVkIG1lc3NhZ2UgdG8gc3RhbmRhcmQgZXJyb3IgYW5kIHNldCBnbG9iYWwKKyMgZXhpdF9jbWQuCitmdW5jX21pc3NpbmdfYXJnICgpCit7CisgICAgJG9wdF9kZWJ1ZworCisgICAgZnVuY19lcnJvciAibWlzc2luZyBhcmd1bWVudCBmb3IgJDEuIgorICAgIGV4aXRfY21kPWV4aXQKK30KKworCisjIGZ1bmNfc3BsaXRfc2hvcnRfb3B0IHNob3J0b3B0CisjIFNldCBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmcgc2hlbGwKKyMgdmFyaWFibGVzIGFmdGVyIHNwbGl0dGluZyBTSE9SVE9QVCBhZnRlciB0aGUgMm5kIGNoYXJhY3Rlci4KK2Z1bmNfc3BsaXRfc2hvcnRfb3B0ICgpCit7CisgICAgbXlfc2VkX3Nob3J0X29wdD0nMXMvXlwoLi5cKS4qJC9cMS87cScKKyAgICBteV9zZWRfc2hvcnRfcmVzdD0nMXMvXi4uXCguKlwpJC9cMS87cScKKworICAgIGZ1bmNfc3BsaXRfc2hvcnRfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX3Nob3J0X29wdCJgCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPWAkRUNITyAiJDEiIHwgJFNFRCAiJG15X3NlZF9zaG9ydF9yZXN0ImAKK30gIyBmdW5jX3NwbGl0X3Nob3J0X29wdCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbG9uZ29wdAorIyBTZXQgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lIGFuZCBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZyBzaGVsbAorIyB2YXJpYWJsZXMgYWZ0ZXIgc3BsaXR0aW5nIExPTkdPUFQgYXQgdGhlIGA9JyBzaWduLgorZnVuY19zcGxpdF9sb25nX29wdCAoKQoreworICAgIG15X3NlZF9sb25nX29wdD0nMXMvXlwoLS1bXj1dKlwpPS4qL1wxLztxJworICAgIG15X3NlZF9sb25nX2FyZz0nMXMvXi0tW149XSo9Ly8nCisKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWU9YCRFQ0hPICIkMSIgfCAkU0VEICIkbXlfc2VkX2xvbmdfb3B0ImAKKyAgICBmdW5jX3NwbGl0X2xvbmdfb3B0X2FyZz1gJEVDSE8gIiQxIiB8ICRTRUQgIiRteV9zZWRfbG9uZ19hcmciYAorfSAjIGZ1bmNfc3BsaXRfbG9uZ19vcHQgbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKK2V4aXRfY21kPToKKworCisKKworCittYWdpYz0iJSUlTUFHSUMgdmFyaWFibGUlJSUiCittYWdpY19leGU9IiUlJU1BR0lDIEVYRSB2YXJpYWJsZSUlJSIKKworIyBHbG9iYWwgdmFyaWFibGVzLgorbm9ub3B0PQorcHJlc2VydmVfYXJncz0KK2xvMm89InMvXFwubG9cJC8uJHtvYmpleHR9LyIKK28ybG89InMvXFwuJHtvYmpleHR9XCQvLmxvLyIKK2V4dHJhY3RlZF9hcmNoaXZlcz0KK2V4dHJhY3RlZF9zZXJpYWw9MAorCisjIElmIHRoaXMgdmFyaWFibGUgaXMgc2V0IGluIGFueSBvZiB0aGUgYWN0aW9ucywgdGhlIGNvbW1hbmQgaW4gaXQKKyMgd2lsbCBiZSBleGVjZWQgYXQgdGhlIGVuZC4gIFRoaXMgcHJldmVudHMgaGVyZS1kb2N1bWVudHMgZnJvbSBiZWluZworIyBsZWZ0IG92ZXIgYnkgc2hlbGxzLgorZXhlY19jbWQ9CisKKyMgZnVuY19hcHBlbmQgdmFyIHZhbHVlCisjIEFwcGVuZCBWQUxVRSB0byB0aGUgZW5kIG9mIHNoZWxsIHZhcmlhYmxlIFZBUi4KK2Z1bmNfYXBwZW5kICgpCit7CisgICAgZXZhbCAiJHsxfT1cJCR7MX1cJHsyfSIKK30gIyBmdW5jX2FwcGVuZCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworIyBmdW5jX2FwcGVuZF9xdW90ZWQgdmFyIHZhbHVlCisjIFF1b3RlIFZBTFVFIGFuZCBhcHBlbmQgdG8gdGhlIGVuZCBvZiBzaGVsbCB2YXJpYWJsZSBWQVIsIHNlcGFyYXRlZAorIyBieSBhIHNwYWNlLgorZnVuY19hcHBlbmRfcXVvdGVkICgpCit7CisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHsyfSIKKyAgICBldmFsICIkezF9PVwkJHsxfVxcIFwkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCit9ICMgZnVuY19hcHBlbmRfcXVvdGVkIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19hcml0aCBhcml0aG1ldGljLXRlcm0uLi4KK2Z1bmNfYXJpdGggKCkKK3sKKyAgICBmdW5jX2FyaXRoX3Jlc3VsdD1gZXhwciAiJHtAfSJgCit9ICMgZnVuY19hcml0aCBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfbGVuIHN0cmluZworIyBTVFJJTkcgbWF5IG5vdCBzdGFydCB3aXRoIGEgaHlwaGVuLgorZnVuY19sZW4gKCkKK3sKKyAgICBmdW5jX2xlbl9yZXN1bHQ9YGV4cHIgIiR7MX0iIDogIi4qIiAyPi9kZXYvbnVsbCB8fCBlY2hvICRtYXhfY21kX2xlbmAKK30gIyBmdW5jX2xlbiBtYXkgYmUgcmVwbGFjZWQgYnkgZXh0ZW5kZWQgc2hlbGwgaW1wbGVtZW50YXRpb24KKworCisjIGZ1bmNfbG8ybyBvYmplY3QKK2Z1bmNfbG8ybyAoKQoreworICAgIGZ1bmNfbG8yb19yZXN1bHQ9YCRFQ0hPICIkezF9IiB8ICRTRUQgIiRsbzJvImAKK30gIyBmdW5jX2xvMm8gbWF5IGJlIHJlcGxhY2VkIGJ5IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9uCisKKworIyBmdW5jX3hmb3JtIGxpYm9iai1vci1zb3VyY2UKK2Z1bmNfeGZvcm0gKCkKK3sKKyAgICBmdW5jX3hmb3JtX3Jlc3VsdD1gJEVDSE8gIiR7MX0iIHwgJFNFRCAncy9cLlteLl0qJC8ubG8vJ2AKK30gIyBmdW5jX3hmb3JtIG1heSBiZSByZXBsYWNlZCBieSBleHRlbmRlZCBzaGVsbCBpbXBsZW1lbnRhdGlvbgorCisKKyMgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uIGFyZy4uLgorIyBFY2hvIHByb2dyYW0gbmFtZSBwcmVmaXhlZCBtZXNzYWdlIHRvIHN0YW5kYXJkIGVycm9yLCBmb2xsb3dlZCBieQorIyBhIGNvbmZpZ3VyYXRpb24gZmFpbHVyZSBoaW50LCBhbmQgZXhpdC4KK2Z1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAoKQoreworICAgIGZ1bmNfZXJyb3IgJHsxKyIkQCJ9CisgICAgZnVuY19lcnJvciAiU2VlIHRoZSAkUEFDS0FHRSBkb2N1bWVudGF0aW9uIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKKyAgICBmdW5jX2ZhdGFsX2Vycm9yICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiIKK30KKworCisjIGZ1bmNfY29uZmlnCisjIERpc3BsYXkgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCB0aGUgdGFncyBpbiB0aGlzIHNjcmlwdC4KK2Z1bmNfY29uZmlnICgpCit7CisgICAgcmVfYmVnaW5jZj0nXiMgIyMjIEJFR0lOIExJQlRPT0wnCisgICAgcmVfZW5kY2Y9J14jICMjIyBFTkQgTElCVE9PTCcKKworICAgICMgRGVmYXVsdCBjb25maWd1cmF0aW9uLgorICAgICRTRUQgIjEsLyRyZV9iZWdpbmNmIENPTkZJRy9kOy8kcmVfZW5kY2YgQ09ORklHLyxcJGQiIDwgIiRwcm9ncGF0aCIKKworICAgICMgTm93IHByaW50IHRoZSBjb25maWd1cmF0aW9ucyBmb3IgdGhlIHRhZ3MuCisgICAgZm9yIHRhZ25hbWUgaW4gJHRhZ2xpc3Q7IGRvCisgICAgICAkU0VEIC1uICIvJHJlX2JlZ2luY2YgVEFHIENPTkZJRzogJHRhZ25hbWVcJC8sLyRyZV9lbmRjZiBUQUcgQ09ORklHOiAkdGFnbmFtZVwkL3AiIDwgIiRwcm9ncGF0aCIKKyAgICBkb25lCisKKyAgICBleGl0ICQ/Cit9CisKKyMgZnVuY19mZWF0dXJlcworIyBEaXNwbGF5IHRoZSBmZWF0dXJlcyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHQuCitmdW5jX2ZlYXR1cmVzICgpCit7CisgICAgZWNobyAiaG9zdDogJGhvc3QiCisgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzaGFyZWQgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KKyAgICAgIGVjaG8gImVuYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgIGVsc2UKKyAgICAgIGVjaG8gImRpc2FibGUgc3RhdGljIGxpYnJhcmllcyIKKyAgICBmaQorCisgICAgZXhpdCAkPworfQorCisjIGZ1bmNfZW5hYmxlX3RhZyB0YWduYW1lCisjIFZlcmlmeSB0aGF0IFRBR05BTUUgaXMgdmFsaWQsIGFuZCBlaXRoZXIgZmxhZyBhbiBlcnJvciBhbmQgZXhpdCwgb3IKKyMgZW5hYmxlIHRoZSBUQUdOQU1FIHRhZy4gIFdlIGFsc28gYWRkIFRBR05BTUUgdG8gdGhlIGdsb2JhbCAkdGFnbGlzdAorIyB2YXJpYWJsZSBoZXJlLgorZnVuY19lbmFibGVfdGFnICgpCit7CisgICMgR2xvYmFsIHZhcmlhYmxlOgorICB0YWduYW1lPSIkMSIKKworICByZV9iZWdpbmNmPSJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZVwkIgorICByZV9lbmRjZj0iXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lXCQiCisgIHNlZF9leHRyYWN0Y2Y9Ii8kcmVfYmVnaW5jZi8sLyRyZV9lbmRjZi9wIgorCisgICMgVmFsaWRhdGUgdGFnbmFtZS4KKyAgY2FzZSAkdGFnbmFtZSBpbgorICAgICpbIS1fQS1aYS16MC05LC9dKikKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImludmFsaWQgdGFnIG5hbWU6ICR0YWduYW1lIgorICAgICAgOzsKKyAgZXNhYworCisgICMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdyBpdCdzCisgICMgdGhlcmUgYnV0IG5vdCBzcGVjaWFsbHkgbWFya2VkLgorICBjYXNlICR0YWduYW1lIGluCisgICAgQ0MpIDs7CisgICAgKikKKyAgICAgIGlmICRHUkVQICIkcmVfYmVnaW5jZiIgIiRwcm9ncGF0aCIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJdGFnbGlzdD0iJHRhZ2xpc3QgJHRhZ25hbWUiCisKKwkjIEV2YWx1YXRlIHRoZSBjb25maWd1cmF0aW9uLiAgQmUgY2FyZWZ1bCB0byBxdW90ZSB0aGUgcGF0aAorCSMgYW5kIHRoZSBzZWQgc2NyaXB0LCB0byBhdm9pZCBzcGxpdHRpbmcgb24gd2hpdGVzcGFjZSwgYnV0CisJIyBhbHNvIGRvbid0IHVzZSBub24tcG9ydGFibGUgcXVvdGVzIHdpdGhpbiBiYWNrcXVvdGVzIHdpdGhpbgorCSMgcXVvdGVzIHdlIGhhdmUgdG8gZG8gaXQgaW4gMiBzdGVwczoKKwlleHRyYWN0ZWRjZj1gJFNFRCAtbiAtZSAiJHNlZF9leHRyYWN0Y2YiIDwgIiRwcm9ncGF0aCJgCisJZXZhbCAiJGV4dHJhY3RlZGNmIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgImlnbm9yaW5nIHVua25vd24gdGFnICR0YWduYW1lIgorICAgICAgZmkKKyAgICAgIDs7CisgIGVzYWMKK30KKworIyBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKyMgRW5zdXJlIHRoYXQgd2UgYXJlIHVzaW5nIG00IG1hY3JvcywgYW5kIGxpYnRvb2wgc2NyaXB0IGZyb20gdGhlIHNhbWUKKyMgcmVsZWFzZSBvZiBsaWJ0b29sLgorZnVuY19jaGVja192ZXJzaW9uX21hdGNoICgpCit7CisgIGlmIHRlc3QgIiRwYWNrYWdlX3JldmlzaW9uIiAhPSAiJG1hY3JvX3JldmlzaW9uIjsgdGhlbgorICAgIGlmIHRlc3QgIiRWRVJTSU9OIiAhPSAiJG1hY3JvX3ZlcnNpb24iOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkbWFjcm9fdmVyc2lvbiI7IHRoZW4KKyAgICAgICAgY2F0ID4mMiA8PF9MVF9FT0YKKyRwcm9nbmFtZTogVmVyc2lvbiBtaXNtYXRjaCBlcnJvci4gIFRoaXMgaXMgJFBBQ0tBR0UgJFZFUlNJT04sIGJ1dCB0aGUKKyRwcm9nbmFtZTogZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSBhbiBvbGRlciByZWxlYXNlLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZWxzZQorICAgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgYnV0IHRoZQorJHByb2duYW1lOiBkZWZpbml0aW9uIG9mIHRoaXMgTFRfSU5JVCBjb21lcyBmcm9tICRQQUNLQUdFICRtYWNyb192ZXJzaW9uLgorJHByb2duYW1lOiBZb3Ugc2hvdWxkIHJlY3JlYXRlIGFjbG9jYWwubTQgd2l0aCBtYWNyb3MgZnJvbSAkUEFDS0FHRSAkVkVSU0lPTgorJHByb2duYW1lOiBhbmQgcnVuIGF1dG9jb25mIGFnYWluLgorX0xUX0VPRgorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBjYXQgPiYyIDw8X0xUX0VPRgorJHByb2duYW1lOiBWZXJzaW9uIG1pc21hdGNoIGVycm9yLiAgVGhpcyBpcyAkUEFDS0FHRSAkVkVSU0lPTiwgcmV2aXNpb24gJHBhY2thZ2VfcmV2aXNpb24sCiskcHJvZ25hbWU6IGJ1dCB0aGUgZGVmaW5pdGlvbiBvZiB0aGlzIExUX0lOSVQgY29tZXMgZnJvbSByZXZpc2lvbiAkbWFjcm9fcmV2aXNpb24uCiskcHJvZ25hbWU6IFlvdSBzaG91bGQgcmVjcmVhdGUgYWNsb2NhbC5tNCB3aXRoIG1hY3JvcyBmcm9tIHJldmlzaW9uICRwYWNrYWdlX3JldmlzaW9uCiskcHJvZ25hbWU6IG9mICRQQUNLQUdFICRWRVJTSU9OIGFuZCBydW4gYXV0b2NvbmYgYWdhaW4uCitfTFRfRU9GCisgICAgZmkKKworICAgIGV4aXQgJEVYSVRfTUlTTUFUQ0gKKyAgZmkKK30KKworCisjIFNob3J0aGFuZCBmb3IgLS1tb2RlPWZvbywgb25seSB2YWxpZCBhcyB0aGUgZmlyc3QgYXJndW1lbnQKK2Nhc2UgJDEgaW4KK2NsZWFufGNsZWF8Y2xlfGNsKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjbGVhbiAkezErIiRAIn07IHNoaWZ0CisgIDs7Citjb21waWxlfGNvbXBpbHxjb21waXxjb21wfGNvbXxjb3xjKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBjb21waWxlICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2V4ZWN1dGV8ZXhlY3V0fGV4ZWN1fGV4ZWN8ZXhlfGV4fGUpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGV4ZWN1dGUgJHsxKyIkQCJ9OyBzaGlmdAorICA7OworZmluaXNofGZpbmlzfGZpbml8ZmlufGZpfGYpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGZpbmlzaCAkezErIiRAIn07IHNoaWZ0CisgIDs7CitpbnN0YWxsfGluc3RhbHxpbnN0YXxpbnN0fGluc3xpbnxpKQorICBzaGlmdDsgc2V0IGR1bW15IC0tbW9kZSBpbnN0YWxsICR7MSsiJEAifTsgc2hpZnQKKyAgOzsKK2xpbmt8bGlufGxpfGwpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIGxpbmsgJHsxKyIkQCJ9OyBzaGlmdAorICA7OwordW5pbnN0YWxsfHVuaW5zdGFsfHVuaW5zdGF8dW5pbnN0fHVuaW5zfHVuaW58dW5pfHVufHUpCisgIHNoaWZ0OyBzZXQgZHVtbXkgLS1tb2RlIHVuaW5zdGFsbCAkezErIiRAIn07IHNoaWZ0CisgIDs7Citlc2FjCisKKworCisjIE9wdGlvbiBkZWZhdWx0czoKK29wdF9kZWJ1Zz06CitvcHRfZHJ5X3J1bj1mYWxzZQorb3B0X2NvbmZpZz1mYWxzZQorb3B0X3ByZXNlcnZlX2R1cF9kZXBzPWZhbHNlCitvcHRfZmVhdHVyZXM9ZmFsc2UKK29wdF9maW5pc2g9ZmFsc2UKK29wdF9oZWxwPWZhbHNlCitvcHRfaGVscF9hbGw9ZmFsc2UKK29wdF9zaWxlbnQ9Ogorb3B0X3ZlcmJvc2U9Ogorb3B0X3NpbGVudD1mYWxzZQorb3B0X3ZlcmJvc2U9ZmFsc2UKKworCisjIFBhcnNlIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4gIFRoaXMgY29tZXMgYXMgc29vbiBhcyBwb3NzaWJsZSBpbiB0aGUKKyMgc2NyaXB0IHRvIG1ha2UgdGhpbmdzIGxpa2UgYC0tdmVyc2lvbicgaGFwcGVuIGFzIHF1aWNrbHkgYXMgd2UgY2FuLgoreworICAjIHRoaXMganVzdCBlYXNlcyBleGl0IGhhbmRsaW5nCisgIHdoaWxlIHRlc3QgJCMgLWd0IDA7IGRvCisgICAgb3B0PSIkMSIKKyAgICBzaGlmdAorICAgIGNhc2UgJG9wdCBpbgorICAgICAgLS1kZWJ1Z3wteCkJb3B0X2RlYnVnPSdzZXQgLXgnCisJCQlmdW5jX2VjaG8gImVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCisJCQkkb3B0X2RlYnVnCisJCQk7OworICAgICAgLS1kcnktcnVufC0tZHJ5cnVufC1uKQorCQkJb3B0X2RyeV9ydW49OgorCQkJOzsKKyAgICAgIC0tY29uZmlnKQorCQkJb3B0X2NvbmZpZz06CitmdW5jX2NvbmZpZworCQkJOzsKKyAgICAgIC0tZGxvcGVufC1kbG9wZW4pCisJCQlvcHRhcmc9IiQxIgorCQkJb3B0X2Rsb3Blbj0iJHtvcHRfZGxvcGVuKyRvcHRfZGxvcGVuCit9JG9wdGFyZyIKKwkJCXNoaWZ0CisJCQk7OworICAgICAgLS1wcmVzZXJ2ZS1kdXAtZGVwcykKKwkJCW9wdF9wcmVzZXJ2ZV9kdXBfZGVwcz06CisJCQk7OworICAgICAgLS1mZWF0dXJlcykKKwkJCW9wdF9mZWF0dXJlcz06CitmdW5jX2ZlYXR1cmVzCisJCQk7OworICAgICAgLS1maW5pc2gpCisJCQlvcHRfZmluaXNoPToKK3NldCBkdW1teSAtLW1vZGUgZmluaXNoICR7MSsiJEAifTsgc2hpZnQKKwkJCTs7CisgICAgICAtLWhlbHApCisJCQlvcHRfaGVscD06CisJCQk7OworICAgICAgLS1oZWxwLWFsbCkKKwkJCW9wdF9oZWxwX2FsbD06CitvcHRfaGVscD0nOiBoZWxwLWFsbCcKKwkJCTs7CisgICAgICAtLW1vZGUpCisJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfbW9kZT0iJG9wdGFyZyIKK2Nhc2UgJG9wdGFyZyBpbgorICAjIFZhbGlkIG1vZGUgYXJndW1lbnRzOgorICBjbGVhbnxjb21waWxlfGV4ZWN1dGV8ZmluaXNofGluc3RhbGx8bGlua3xyZWxpbmt8dW5pbnN0YWxsKSA7OworCisgICMgQ2F0Y2ggYW55dGhpbmcgZWxzZSBhcyBhbiBlcnJvcgorICAqKSBmdW5jX2Vycm9yICJpbnZhbGlkIGFyZ3VtZW50IGZvciAkb3B0IgorICAgICBleGl0X2NtZD1leGl0CisgICAgIGJyZWFrCisgICAgIDs7Citlc2FjCisJCQlzaGlmdAorCQkJOzsKKyAgICAgIC0tbm8tc2lsZW50fC0tbm8tcXVpZXQpCisJCQlvcHRfc2lsZW50PWZhbHNlCitmdW5jX2FwcGVuZCBwcmVzZXJ2ZV9hcmdzICIgJG9wdCIKKwkJCTs7CisgICAgICAtLW5vLXZlcmJvc2UpCisJCQlvcHRfdmVyYm9zZT1mYWxzZQorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisJCQk7OworICAgICAgLS1zaWxlbnR8LS1xdWlldCkKKwkJCW9wdF9zaWxlbnQ9OgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCisgICAgICAgIG9wdF92ZXJib3NlPWZhbHNlCisJCQk7OworICAgICAgLS12ZXJib3NlfC12KQorCQkJb3B0X3ZlcmJvc2U9OgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQiCitvcHRfc2lsZW50PWZhbHNlCisJCQk7OworICAgICAgLS10YWcpCisJCQl0ZXN0ICQjID0gMCAmJiBmdW5jX21pc3NpbmdfYXJnICRvcHQgJiYgYnJlYWsKKwkJCW9wdGFyZz0iJDEiCisJCQlvcHRfdGFnPSIkb3B0YXJnIgorZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiICRvcHQgJG9wdGFyZyIKK2Z1bmNfZW5hYmxlX3RhZyAiJG9wdGFyZyIKKwkJCXNoaWZ0CisJCQk7OworCisgICAgICAtXD98LWgpCQlmdW5jX3VzYWdlCQkJCTs7CisgICAgICAtLWhlbHApCQlmdW5jX2hlbHAJCQkJOzsKKyAgICAgIC0tdmVyc2lvbikJZnVuY192ZXJzaW9uCQkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgb3B0YXJncyB0byBsb25nIG9wdGlvbnM6CisgICAgICAtLSo9KikKKwkJCWZ1bmNfc3BsaXRfbG9uZ19vcHQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X2xvbmdfb3B0X25hbWUiICIkZnVuY19zcGxpdF9sb25nX29wdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgICMgU2VwYXJhdGUgbm9uLWFyZ3VtZW50IHNob3J0IG9wdGlvbnM6CisgICAgICAtXD8qfC1oKnwtbip8LXYqKQorCQkJZnVuY19zcGxpdF9zaG9ydF9vcHQgIiRvcHQiCisJCQlzZXQgZHVtbXkgIiRmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lIiAiLSRmdW5jX3NwbGl0X3Nob3J0X29wdF9hcmciICR7MSsiJEAifQorCQkJc2hpZnQKKwkJCTs7CisKKyAgICAgIC0tKQkJYnJlYWsJCQkJCTs7CisgICAgICAtKikJCWZ1bmNfZmF0YWxfaGVscCAidW5yZWNvZ25pemVkIG9wdGlvbiBcYCRvcHQnIiA7OworICAgICAgKikJCXNldCBkdW1teSAiJG9wdCIgJHsxKyIkQCJ9OwlzaGlmdDsgYnJlYWsgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBWYWxpZGF0ZSBvcHRpb25zOgorCisgICMgc2F2ZSBmaXJzdCBub24tb3B0aW9uIGFyZ3VtZW50CisgIGlmIHRlc3QgIiQjIiAtZ3QgMDsgdGhlbgorICAgIG5vbm9wdD0iJG9wdCIKKyAgICBzaGlmdAorICBmaQorCisgICMgcHJlc2VydmUgLS1kZWJ1ZworICB0ZXN0ICIkb3B0X2RlYnVnIiA9IDogfHwgZnVuY19hcHBlbmQgcHJlc2VydmVfYXJncyAiIC0tZGVidWciCisKKyAgY2FzZSAkaG9zdCBpbgorICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpwdzMyKiB8ICpjZWdjYyopCisgICAgICAjIGRvbid0IGVsaW1pbmF0ZSBkdXBsaWNhdGlvbnMgaW4gJHBvc3RkZXBzIGFuZCAkcHJlZGVwcworICAgICAgb3B0X2R1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz06CisgICAgICA7OworICAgICopCisgICAgICBvcHRfZHVwbGljYXRlX2NvbXBpbGVyX2dlbmVyYXRlZF9kZXBzPSRvcHRfcHJlc2VydmVfZHVwX2RlcHMKKyAgICAgIDs7CisgIGVzYWMKKworICAkb3B0X2hlbHAgfHwgeworICAgICMgU2FuaXR5IGNoZWNrcyBmaXJzdDoKKyAgICBmdW5jX2NoZWNrX3ZlcnNpb25fbWF0Y2gKKworICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgZnVuY19mYXRhbF9jb25maWd1cmF0aW9uICJub3QgY29uZmlndXJlZCB0byBidWlsZCBhbnkga2luZCBvZiBsaWJyYXJ5IgorICAgIGZpCisKKyAgICAjIERhcndpbiBzdWNrcworICAgIGV2YWwgc3RkX3NocmV4dD1cIiRzaHJleHRfY21kc1wiCisKKyAgICAjIE9ubHkgZXhlY3V0ZSBtb2RlIGlzIGFsbG93ZWQgdG8gaGF2ZSAtZGxvcGVuIGZsYWdzLgorICAgIGlmIHRlc3QgLW4gIiRvcHRfZGxvcGVuIiAmJiB0ZXN0ICIkb3B0X21vZGUiICE9IGV4ZWN1dGU7IHRoZW4KKyAgICAgIGZ1bmNfZXJyb3IgInVucmVjb2duaXplZCBvcHRpb24gXGAtZGxvcGVuJyIKKyAgICAgICRFQ0hPICIkaGVscCIgMT4mMgorICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgZmkKKworICAgICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KKyAgICBnZW5lcmljX2hlbHA9IiRoZWxwIgorICAgIGhlbHA9IlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAgLS1tb2RlPSRvcHRfbW9kZScgZm9yIG1vcmUgaW5mb3JtYXRpb24uIgorICB9CisKKworICAjIEJhaWwgaWYgdGhlIG9wdGlvbnMgd2VyZSBzY3Jld2VkCisgICRleGl0X2NtZCAkRVhJVF9GQUlMVVJFCit9CisKKworCisKKyMjIC0tLS0tLS0tLS0tICMjCisjIyAgICBNYWluLiAgICAjIworIyMgLS0tLS0tLS0tLS0gIyMKKworIyBmdW5jX2xhbGliX3AgZmlsZQorIyBUcnVlIGlmZiBGSUxFIGlzIGEgbGlidG9vbCBgLmxhJyBsaWJyYXJ5IG9yIGAubG8nIG9iamVjdCBmaWxlLgorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbGFsaWJfcCAoKQoreworICAgIHRlc3QgLWYgIiQxIiAmJgorICAgICAgJFNFRCAtZSA0cSAiJDEiIDI+L2Rldi9udWxsIFwKKyAgICAgICAgfCAkR1JFUCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiID4gL2Rldi9udWxsIDI+JjEKK30KKworIyBmdW5jX2xhbGliX3Vuc2FmZV9wIGZpbGUKKyMgVHJ1ZSBpZmYgRklMRSBpcyBhIGxpYnRvb2wgYC5sYScgbGlicmFyeSBvciBgLmxvJyBvYmplY3QgZmlsZS4KKyMgVGhpcyBmdW5jdGlvbiBpbXBsZW1lbnRzIHRoZSBzYW1lIGNoZWNrIGFzIGZ1bmNfbGFsaWJfcCB3aXRob3V0CisjIHJlc29ydGluZyB0byBleHRlcm5hbCBwcm9ncmFtcy4gIFRvIHRoaXMgZW5kLCBpdCByZWRpcmVjdHMgc3RkaW4gYW5kCisjIGNsb3NlcyBpdCBhZnRlcndhcmRzLCB3aXRob3V0IHNhdmluZyB0aGUgb3JpZ2luYWwgZmlsZSBkZXNjcmlwdG9yLgorIyBBcyBhIHNhZmV0eSBtZWFzdXJlLCB1c2UgaXQgb25seSB3aGVyZSBhIG5lZ2F0aXZlIHJlc3VsdCB3b3VsZCBiZQorIyBmYXRhbCBhbnl3YXkuICBXb3JrcyBpZiBgZmlsZScgZG9lcyBub3QgZXhpc3QuCitmdW5jX2xhbGliX3Vuc2FmZV9wICgpCit7CisgICAgbGFsaWJfcD1ubworICAgIGlmIHRlc3QgLWYgIiQxIiAmJiB0ZXN0IC1yICIkMSIgJiYgZXhlYyA1PCYwIDwiJDEiOyB0aGVuCisJZm9yIGxhbGliX3BfbCBpbiAxIDIgMyA0CisJZG8KKwkgICAgcmVhZCBsYWxpYl9wX2xpbmUKKwkgICAgY2FzZSAiJGxhbGliX3BfbGluZSIgaW4KKwkJXCNcIEdlbmVyYXRlZFwgYnlcICokUEFDS0FHRSogKSBsYWxpYl9wPXllczsgYnJlYWs7OworCSAgICBlc2FjCisJZG9uZQorCWV4ZWMgMDwmNSA1PCYtCisgICAgZmkKKyAgICB0ZXN0ICIkbGFsaWJfcCIgPSB5ZXMKK30KKworIyBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0CisjIFRoaXMgZnVuY3Rpb24gaXMgb25seSBhIGJhc2ljIHNhbml0eSBjaGVjazsgaXQgd2lsbCBoYXJkbHkgZmx1c2ggb3V0CisjIGRldGVybWluZWQgaW1wb3N0ZXJzLgorZnVuY19sdHdyYXBwZXJfc2NyaXB0X3AgKCkKK3sKKyAgICBmdW5jX2xhbGliX3AgIiQxIgorfQorCisjIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAoKQoreworICAgIGZ1bmNfbHR3cmFwcGVyX2V4ZWNfc3VmZml4PQorICAgIGNhc2UgJDEgaW4KKyAgICAqLmV4ZSkgOzsKKyAgICAqKSBmdW5jX2x0d3JhcHBlcl9leGVjX3N1ZmZpeD0uZXhlIDs7CisgICAgZXNhYworICAgICRHUkVQICIkbWFnaWNfZXhlIiAiJDEkZnVuY19sdHdyYXBwZXJfZXhlY19zdWZmaXgiID4vZGV2L251bGwgMj4mMQorfQorCisjIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWUgZmlsZQorIyBBc3N1bWVzIGZpbGUgaXMgYW4gbHR3cmFwcGVyX2V4ZWN1dGFibGUKKyMgdXNlcyAkZmlsZSB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlIGZpbGVuYW1lIGZvciBhCisjIHRlbXBvcmFyeSBsdHdyYXBwZXJfc2NyaXB0LgorZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZSAoKQoreworICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiQxIiAiIiAiLiIKKyAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdD0iJGZ1bmNfZGlybmFtZV9yZXN1bHQvJG9iamRpci8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH1fbHRzaHdyYXBwZXIiCit9CisKKyMgZnVuY19sdHdyYXBwZXJfcCBmaWxlCisjIFRydWUgaWZmIEZJTEUgaXMgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9yIHdyYXBwZXIgZXhlY3V0YWJsZQorIyBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYSBiYXNpYyBzYW5pdHkgY2hlY2s7IGl0IHdpbGwgaGFyZGx5IGZsdXNoIG91dAorIyBkZXRlcm1pbmVkIGltcG9zdGVycy4KK2Z1bmNfbHR3cmFwcGVyX3AgKCkKK3sKKyAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRfcCAiJDEiIHx8IGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJDEiCit9CisKKworIyBmdW5jX2V4ZWN1dGVfY21kcyBjb21tYW5kcyBmYWlsX2NtZAorIyBFeGVjdXRlIHRpbGRlLWRlbGltaXRlZCBDT01NQU5EUy4KKyMgSWYgRkFJTF9DTUQgaXMgZ2l2ZW4sIGV2YWwgdGhhdCB1cG9uIGZhaWx1cmUuCisjIEZBSUxfQ01EIG1heSByZWFkLWFjY2VzcyB0aGUgY3VycmVudCBjb21tYW5kIGluIHZhcmlhYmxlIENNRCEKK2Z1bmNfZXhlY3V0ZV9jbWRzICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgIHNhdmVfaWZzPSRJRlM7IElGUz0nficKKyAgICBmb3IgY21kIGluICQxOyBkbworICAgICAgSUZTPSRzYXZlX2lmcworICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIkY21kIiAiJHsyLTp9IgorICAgIGRvbmUKKyAgICBJRlM9JHNhdmVfaWZzCit9CisKKworIyBmdW5jX3NvdXJjZSBmaWxlCisjIFNvdXJjZSBGSUxFLCBhZGRpbmcgZGlyZWN0b3J5IGNvbXBvbmVudCBpZiBuZWNlc3NhcnkuCisjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KKyMgRklMRSBldmVuIGlmIGJvdGggRklMRSBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQorIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCisjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCitmdW5jX3NvdXJjZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlICQxIGluCisgICAgKi8qIHwgKlxcKikJLiAiJDEiIDs7CisgICAgKikJCS4gIi4vJDEiIDs7CisgICAgZXNhYworfQorCisKKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3QgUEFUSAorIyBSZXBsYWNlIGEgbGVhZGluZyA9IGluIFBBVEggd2l0aCBhIHN5c3Jvb3QuICBTdG9yZSB0aGUgcmVzdWx0IGludG8KKyMgZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0CitmdW5jX3Jlc29sdmVfc3lzcm9vdCAoKQoreworICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JDEKKyAgY2FzZSAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IGluCisgID0qKQorICAgIGZ1bmNfc3RyaXBuYW1lICc9JyAnJyAiJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKKyAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQ9JGx0X3N5c3Jvb3QkZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgOzsKKyAgZXNhYworfQorCisjIGZ1bmNfcmVwbGFjZV9zeXNyb290IFBBVEgKKyMgSWYgUEFUSCBiZWdpbnMgd2l0aCB0aGUgc3lzcm9vdCwgcmVwbGFjZSBpdCB3aXRoID0gYW5kCisjIHN0b3JlIHRoZSByZXN1bHQgaW50byBmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQuCitmdW5jX3JlcGxhY2Vfc3lzcm9vdCAoKQoreworICBjYXNlICIkbHRfc3lzcm9vdDokMSIgaW4KKyAgPyo6IiRsdF9zeXNyb290IiopCisgICAgZnVuY19zdHJpcG5hbWUgIiRsdF9zeXNyb290IiAnJyAiJDEiCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSI9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKyAgICA7OworICAqKQorICAgICMgSW5jbHVkaW5nIG5vIHN5c3Jvb3QuCisgICAgZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0PSQxCisgICAgOzsKKyAgZXNhYworfQorCiAjIGZ1bmNfaW5mZXJfdGFnIGFyZwogIyBJbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiB0byB1c2UgaWYgYW55IGFyZSBhdmFpbGFibGUgYW5kCiAjIGlmIG9uZSB3YXNuJ3QgY2hvc2VuIHZpYSB0aGUgIi0tdGFnIiBjb21tYW5kIGxpbmUgb3B0aW9uLgpAQCAtMjUwLDM5ICsxMzczLDM2IEBACiAjIGFyZyBpcyB1c3VhbGx5IG9mIHRoZSBmb3JtICdnY2MgLi4uJwogZnVuY19pbmZlcl90YWcgKCkKIHsKKyAgICAkb3B0X2RlYnVnCiAgICAgaWYgdGVzdCAtbiAiJGF2YWlsYWJsZV90YWdzIiAmJiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KICAgICAgIENDX3F1b3RlZD0KICAgICAgIGZvciBhcmcgaW4gJENDOyBkbwotCWNhc2UgJGFyZyBpbgotCSAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICBhcmc9IlwiJGFyZ1wiIgotCSAgOzsKLQllc2FjCi0JQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRhcmciCisJZnVuY19hcHBlbmRfcXVvdGVkIENDX3F1b3RlZCAiJGFyZyIKICAgICAgIGRvbmUKKyAgICAgIENDX2V4cGFuZGVkPWBmdW5jX2VjaG9fYWxsICRDQ2AKKyAgICAgIENDX3F1b3RlZF9leHBhbmRlZD1gZnVuY19lY2hvX2FsbCAkQ0NfcXVvdGVkYAogICAgICAgY2FzZSAkQCBpbgogICAgICAgIyBCbGFua3MgaW4gdGhlIGNvbW1hbmQgbWF5IGhhdmUgYmVlbiBzdHJpcHBlZCBieSB0aGUgY2FsbGluZyBzaGVsbCwKICAgICAgICMgYnV0IG5vdCBmcm9tIHRoZSBDQyBlbnZpcm9ubWVudCB2YXJpYWJsZSB3aGVuIGNvbmZpZ3VyZSB3YXMgcnVuLgotICAgICAgIiAkQ0MgIiogfCAiJENDICIqIHwgIiBgJGVjaG8gJENDYCAiKiB8ICJgJGVjaG8gJENDYCAiKiB8ICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiIGAkZWNobyAkQ0NfcXVvdGVkYCAiKiB8ICJgJGVjaG8gJENDX3F1b3RlZGAgIiopIDs7CisgICAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisgICAgICAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiAkQ0NfcXVvdGVkX2V4cGFuZGVkICIqIHwgIiRDQ19xdW90ZWRfZXhwYW5kZWQgIiopIDs7CiAgICAgICAjIEJsYW5rcyBhdCB0aGUgc3RhcnQgb2YgJGJhc2VfY29tcGlsZSB3aWxsIGNhdXNlIHRoaXMgdG8gZmFpbAogICAgICAgIyBpZiB3ZSBkb24ndCBjaGVjayBmb3IgdGhlbSBhcyB3ZWxsLgogICAgICAgKikKIAlmb3IgeiBpbiAkYXZhaWxhYmxlX3RhZ3M7IGRvCi0JICBpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KKwkgIGlmICRHUkVQICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkeiQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KIAkgICAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KIAkgICAgZXZhbCAiYCR7U0VEfSAtbiAtZSAnL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICckeickLywvXiMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6ICckeickL3AnIDwgJHByb2dwYXRoYCIKIAkgICAgQ0NfcXVvdGVkPQogCSAgICBmb3IgYXJnIGluICRDQzsgZG8KLQkgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgotCSAgICBjYXNlICRhcmcgaW4KLQkgICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgICAgICBhcmc9IlwiJGFyZ1wiIgotCSAgICAgIDs7Ci0JICAgIGVzYWMKLQkgICAgQ0NfcXVvdGVkPSIkQ0NfcXVvdGVkICRhcmciCi0JICBkb25lCisJICAgICAgIyBEb3VibGUtcXVvdGUgYXJncyBjb250YWluaW5nIG90aGVyIHNoZWxsIG1ldGFjaGFyYWN0ZXJzLgorCSAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBDQ19xdW90ZWQgIiRhcmciCisJICAgIGRvbmUKKwkgICAgQ0NfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDYAorCSAgICBDQ19xdW90ZWRfZXhwYW5kZWQ9YGZ1bmNfZWNob19hbGwgJENDX3F1b3RlZGAKIAkgICAgY2FzZSAiJEAgIiBpbgotCSAgICAgICIgJENDICIqIHwgIiRDQyAiKiB8ICIgYCRlY2hvICRDQ2AgIiogfCAiYCRlY2hvICRDQ2AgIiogfCAiICRDQ19xdW90ZWQiKiB8ICIkQ0NfcXVvdGVkICIqIHwgIiBgJGVjaG8gJENDX3F1b3RlZGAgIiogfCAiYCRlY2hvICRDQ19xdW90ZWRgICIqKQorCSAgICAiICRDQyAiKiB8ICIkQ0MgIiogfCAiICRDQ19leHBhbmRlZCAiKiB8ICIkQ0NfZXhwYW5kZWQgIiogfCBcCisJICAgICIgJENDX3F1b3RlZCIqIHwgIiRDQ19xdW90ZWQgIiogfCAiICRDQ19xdW90ZWRfZXhwYW5kZWQgIiogfCAiJENDX3F1b3RlZF9leHBhbmRlZCAiKikKIAkgICAgICAjIFRoZSBjb21waWxlciBpbiB0aGUgYmFzZSBjb21waWxlIGNvbW1hbmQgbWF0Y2hlcwogCSAgICAgICMgdGhlIG9uZSBpbiB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24uCiAJICAgICAgIyBBc3N1bWUgdGhpcyBpcyB0aGUgdGFnZ2VkIGNvbmZpZ3VyYXRpb24gd2Ugd2FudC4KQEAgLTI5NiwxMSArMTQxNiwxMCBAQAogCSMgd2FzIGZvdW5kIGFuZCBsZXQgdGhlIHVzZXIga25vdyB0aGF0IHRoZSAiLS10YWciIGNvbW1hbmQKIAkjIGxpbmUgb3B0aW9uIG11c3QgYmUgdXNlZC4KIAlpZiB0ZXN0IC16ICIkdGFnbmFtZSI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHVuYWJsZSB0byBpbmZlciB0YWdnZWQgY29uZmlndXJhdGlvbiIKLQkgICRlY2hvICIkbW9kZW5hbWU6IHNwZWNpZnkgYSB0YWcgd2l0aCBcYC0tdGFnJyIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0jICAgICAgICBlbHNlCi0jICAgICAgICAgICRlY2hvICIkbW9kZW5hbWU6IHVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgorCSAgZnVuY19lY2hvICJ1bmFibGUgdG8gaW5mZXIgdGFnZ2VkIGNvbmZpZ3VyYXRpb24iCisJICBmdW5jX2ZhdGFsX2Vycm9yICJzcGVjaWZ5IGEgdGFnIHdpdGggXGAtLXRhZyciCisjCWVsc2UKKyMJICBmdW5jX3ZlcmJvc2UgInVzaW5nICR0YWduYW1lIHRhZ2dlZCBjb25maWd1cmF0aW9uIgogCWZpCiAJOzsKICAgICAgIGVzYWMKQEAgLTMwOCwzNTQgKzE0MjcsNTI4IEBACiB9CiAKIAotIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCi1mdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQorCisjIGZ1bmNfd3JpdGVfbGlidG9vbF9vYmplY3Qgb3V0cHV0X25hbWUgcGljX25hbWUgbm9ucGljX25hbWUKKyMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCisjIGJ1dCBkb24ndCBjcmVhdGUgaXQgaWYgd2UncmUgZG9pbmcgYSBkcnkgcnVuLgorZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAoKQogewotICAgIGZfZXhfYW5fYXJfZGlyPSIkMSI7IHNoaWZ0Ci0gICAgZl9leF9hbl9hcl9vbGRsaWI9IiQxIgotCi0gICAgJHNob3cgIihjZCAkZl9leF9hbl9hcl9kaXIgJiYgJEFSIHggJGZfZXhfYW5fYXJfb2xkbGliKSIKLSAgICAkcnVuIGV2YWwgIihjZCBcJGZfZXhfYW5fYXJfZGlyICYmICRBUiB4IFwkZl9leF9hbl9hcl9vbGRsaWIpIiB8fCBleGl0ICQ/Ci0gICAgaWYgKCRBUiB0ICIkZl9leF9hbl9hcl9vbGRsaWIiIHwgc29ydCB8IHNvcnQgLXVjID4vZGV2L251bGwgMj4mMSk7IHRoZW4KLSAgICAgOgotICAgIGVsc2UKLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IEVSUk9SOiBvYmplY3QgbmFtZSBjb25mbGljdHM6ICRmX2V4X2FuX2FyX2Rpci8kZl9leF9hbl9hcl9vbGRsaWIiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi19Ci0KLSMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCi1mdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKLXsKLSAgICBteV9nZW50b3A9IiQxIjsgc2hpZnQKLSAgICBteV9vbGRsaWJzPSR7MSsiJEAifQotICAgIG15X29sZG9ianM9IiIKLSAgICBteV94bGliPSIiCi0gICAgbXlfeGFicz0iIgotICAgIG15X3hkaXI9IiIKLSAgICBteV9zdGF0dXM9IiIKLQotICAgICRzaG93ICIke3JtfXIgJG15X2dlbnRvcCIKLSAgICAkcnVuICR7cm19ciAiJG15X2dlbnRvcCIKLSAgICAkc2hvdyAiJG1rZGlyICRteV9nZW50b3AiCi0gICAgJHJ1biAkbWtkaXIgIiRteV9nZW50b3AiCi0gICAgbXlfc3RhdHVzPSQ/Ci0gICAgaWYgdGVzdCAiJG15X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIkbXlfZ2VudG9wIjsgdGhlbgotICAgICAgZXhpdCAkbXlfc3RhdHVzCi0gICAgZmkKLQotICAgIGZvciBteV94bGliIGluICRteV9vbGRsaWJzOyBkbwotICAgICAgIyBFeHRyYWN0IHRoZSBvYmplY3RzLgotICAgICAgY2FzZSAkbXlfeGxpYiBpbgotCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgbXlfeGFicz0iJG15X3hsaWIiIDs7Ci0JKikgbXlfeGFicz1gcHdkYCIvJG15X3hsaWIiIDs7Ci0gICAgICBlc2FjCi0gICAgICBteV94bGliPWAkZWNobyAiWCRteV94bGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0gICAgICBteV94bGliX3U9JG15X3hsaWIKLSAgICAgIHdoaWxlIDo7IGRvCi0gICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KLQkqIiAkbXlfeGxpYl91ICIqKQotCSAgZXh0cmFjdGVkX3NlcmlhbD1gZXhwciAkZXh0cmFjdGVkX3NlcmlhbCArIDFgCi0JICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OwotCSopIGJyZWFrIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCi0gICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCi0KLSAgICAgICRzaG93ICIke3JtfXIgJG15X3hkaXIiCi0gICAgICAkcnVuICR7cm19ciAiJG15X3hkaXIiCi0gICAgICAkc2hvdyAiJG1rZGlyICRteV94ZGlyIgotICAgICAgJHJ1biAkbWtkaXIgIiRteV94ZGlyIgotICAgICAgZXhpdF9zdGF0dXM9JD8KLSAgICAgIGlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIkbXlfeGRpciI7IHRoZW4KLQlleGl0ICRleGl0X3N0YXR1cwotICAgICAgZmkKLSAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICotZGFyd2luKikKLQkkc2hvdyAiRXh0cmFjdGluZyAkbXlfeGFicyIKLQkjIERvIG5vdCBib3RoZXIgZG9pbmcgYW55dGhpbmcgaWYganVzdCBhIGRyeSBydW4KLQlpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgotCSAgZGFyd2luX29yaWdfZGlyPWBwd2RgCi0JICBjZCAkbXlfeGRpciB8fCBleGl0ICQ/Ci0JICBkYXJ3aW5fYXJjaGl2ZT0kbXlfeGFicwotCSAgZGFyd2luX2N1cmRpcj1gcHdkYAotCSAgZGFyd2luX2Jhc2VfYXJjaGl2ZT1gJGVjaG8gIlgkZGFyd2luX2FyY2hpdmUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQkgIGRhcndpbl9hcmNoZXM9YGxpcG8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkRUdSRVAgQXJjaGl0ZWN0dXJlcyAyPi9kZXYvbnVsbGAKLQkgIGlmIHRlc3QgLW4gIiRkYXJ3aW5fYXJjaGVzIjsgdGhlbiAKLQkgICAgZGFyd2luX2FyY2hlcz1gZWNobyAiJGRhcndpbl9hcmNoZXMiIHwgJFNFRCAtZSAncy8uKmFyZTovLydgCi0JICAgIGRhcndpbl9hcmNoPQotCSAgICAkc2hvdyAiJGRhcndpbl9iYXNlX2FyY2hpdmUgaGFzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgJGRhcndpbl9hcmNoZXMiCi0JICAgIGZvciBkYXJ3aW5fYXJjaCBpbiAgJGRhcndpbl9hcmNoZXMgOyBkbwotCSAgICAgIG1rZGlyIC1wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgotCSAgICAgIGxpcG8gLXRoaW4gJGRhcndpbl9hcmNoIC1vdXRwdXQgInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIgIiR7ZGFyd2luX2FyY2hpdmV9IgotCSAgICAgIGNkICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgotCSAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICJgcHdkYCIgIiR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iCi0JICAgICAgY2QgIiRkYXJ3aW5fY3VyZGlyIgotCSAgICAgICRybSAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofS8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgotCSAgICBkb25lICMgJGRhcndpbl9hcmNoZXMKLSAgICAgICMjIE9rYXkgbm93IHdlIGhhdmUgYSBidW5jaCBvZiB0aGluIG9iamVjdHMsIGdvdHRhIGZhdHRlbiB0aGVtIHVwIDopCi0JICAgIGRhcndpbl9maWxlbGlzdD1gZmluZCB1bmZhdC0kJCAtdHlwZSBmIC1uYW1lIFwqLm8gLXByaW50IC1vIC1uYW1lIFwqLmxvIC1wcmludHwgeGFyZ3MgYmFzZW5hbWUgfCBzb3J0IC11IHwgJE5MMlNQYAotCSAgICBkYXJ3aW5fZmlsZT0KLQkgICAgZGFyd2luX2ZpbGVzPQotCSAgICBmb3IgZGFyd2luX2ZpbGUgaW4gJGRhcndpbl9maWxlbGlzdDsgZG8KLQkgICAgICBkYXJ3aW5fZmlsZXM9YGZpbmQgdW5mYXQtJCQgLW5hbWUgJGRhcndpbl9maWxlIC1wcmludCB8ICROTDJTUGAKLQkgICAgICBsaXBvIC1jcmVhdGUgLW91dHB1dCAiJGRhcndpbl9maWxlIiAkZGFyd2luX2ZpbGVzCi0JICAgIGRvbmUgIyAkZGFyd2luX2ZpbGVsaXN0Ci0JICAgICR7cm19ciB1bmZhdC0kJAotCSAgICBjZCAiJGRhcndpbl9vcmlnX2RpciIKLQkgIGVsc2UKLQkgICAgY2QgIiRkYXJ3aW5fb3JpZ19kaXIiCi0gCSAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiJG15X3hkaXIiICIkbXlfeGFicyIKLQkgIGZpICMgJGRhcndpbl9hcmNoZXMKLQlmaSAjICRydW4KLQk7OwotICAgICAgKikKLSAgICAgICAgZnVuY19leHRyYWN0X2FuX2FyY2hpdmUgIiRteV94ZGlyIiAiJG15X3hhYnMiCi0gICAgICAgIDs7Ci0gICAgICBlc2FjCi0gICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJE5MMlNQYAotICAgIGRvbmUKLSAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKLX0KLSMgRW5kIG9mIFNoZWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLSMgRGFyd2luIHN1Y2tzCi1ldmFsIHN0ZF9zaHJleHQ9XCIkc2hyZXh0X2NtZHNcIgotCi1kaXNhYmxlX2xpYnM9bm8KLQotIyBQYXJzZSBvdXIgY29tbWFuZCBsaW5lIG9wdGlvbnMgb25jZSwgdGhvcm91Z2hseS4KLXdoaWxlIHRlc3QgIiQjIiAtZ3QgMAotZG8KLSAgYXJnPSIkMSIKLSAgc2hpZnQKLQotICBjYXNlICRhcmcgaW4KLSAgLSo9Kikgb3B0YXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MvWy1fYS16QS1aMC05XSo9Ly8nYCA7OwotICAqKSBvcHRhcmc9IDs7Ci0gIGVzYWMKLQotICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KLSAgaWYgdGVzdCAtbiAiJHByZXYiOyB0aGVuCi0gICAgY2FzZSAkcHJldiBpbgotICAgIGV4ZWN1dGVfZGxmaWxlcykKLSAgICAgIGV4ZWN1dGVfZGxmaWxlcz0iJGV4ZWN1dGVfZGxmaWxlcyAkYXJnIgotICAgICAgOzsKLSAgICB0YWcpCi0gICAgICB0YWduYW1lPSIkYXJnIgotICAgICAgcHJlc2VydmVfYXJncz0iJHtwcmVzZXJ2ZV9hcmdzfT0kYXJnIgotCi0gICAgICAjIENoZWNrIHdoZXRoZXIgdGFnbmFtZSBjb250YWlucyBvbmx5IHZhbGlkIGNoYXJhY3RlcnMKLSAgICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgICpbIS1fQS1aYS16MC05LC9dKikKLQkkZWNobyAiJHByb2duYW1lOiBpbnZhbGlkIHRhZyBuYW1lOiAkdGFnbmFtZSIgMT4mMgotCWV4aXQgJEVYSVRfRkFJTFVSRQotCTs7Ci0gICAgICBlc2FjCi0KLSAgICAgIGNhc2UgJHRhZ25hbWUgaW4KLSAgICAgIENDKQotCSMgRG9uJ3QgdGVzdCBmb3IgdGhlICJkZWZhdWx0IiBDIHRhZywgYXMgd2Uga25vdywgaXQncyB0aGVyZSwgYnV0Ci0JIyBub3Qgc3BlY2lhbGx5IG1hcmtlZC4KLQk7OwotICAgICAgKikKLQlpZiBncmVwICJeIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQiIDwgIiRwcm9ncGF0aCIgPiAvZGV2L251bGw7IHRoZW4KLQkgIHRhZ2xpc3Q9IiR0YWdsaXN0ICR0YWduYW1lIgotCSAgIyBFdmFsdWF0ZSB0aGUgY29uZmlndXJhdGlvbi4KLQkgIGV2YWwgImAke1NFRH0gLW4gLWUgJy9eIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiAnJHRhZ25hbWUnJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAnJHRhZ25hbWUnJC9wJyA8ICRwcm9ncGF0aGAiCi0JZWxzZQotCSAgJGVjaG8gIiRwcm9nbmFtZTogaWdub3JpbmcgdW5rbm93biB0YWcgJHRhZ25hbWUiIDE+JjIKLQlmaQotCTs7Ci0gICAgICBlc2FjCi0gICAgICA7OwotICAgICopCi0gICAgICBldmFsICIkcHJldj1cJGFyZyIKLSAgICAgIDs7Ci0gICAgZXNhYwotCi0gICAgcHJldj0KLSAgICBwcmV2b3B0PQotICAgIGNvbnRpbnVlCi0gIGZpCi0KLSAgIyBIYXZlIHdlIHNlZW4gYSBub24tb3B0aW9uYWwgYXJndW1lbnQgeWV0PwotICBjYXNlICRhcmcgaW4KLSAgLS1oZWxwKQotICAgIHNob3dfaGVscD15ZXMKLSAgICA7OwotCi0gIC0tdmVyc2lvbikKLSAgICBlY2hvICJcCi0kUFJPR1JBTSAoR05VICRQQUNLQUdFKSAkVkVSU0lPTiRUSU1FU1RBTVAKLQotQ29weXJpZ2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KLVRoaXMgaXMgZnJlZSBzb2Z0d2FyZTsgc2VlIHRoZSBzb3VyY2UgZm9yIGNvcHlpbmcgY29uZGl0aW9ucy4gIFRoZXJlIGlzIE5PCi13YXJyYW50eTsgbm90IGV2ZW4gZm9yIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4iCi0gICAgZXhpdCAkPwotICAgIDs7Ci0KLSAgLS1jb25maWcpCi0gICAgJHtTRUR9IC1lICcxLC9eIyAjIyMgQkVHSU4gTElCVE9PTCBDT05GSUcvZCcgLWUgJy9eIyAjIyMgRU5EIExJQlRPT0wgQ09ORklHLywkZCcgJHByb2dwYXRoCi0gICAgIyBOb3cgcHJpbnQgdGhlIGNvbmZpZ3VyYXRpb25zIGZvciB0aGUgdGFncy4KLSAgICBmb3IgdGFnbmFtZSBpbiAkdGFnbGlzdDsgZG8KLSAgICAgICR7U0VEfSAtbiAtZSAiL14jICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICR0YWduYW1lJC8sL14jICMjIyBFTkQgTElCVE9PTCBUQUcgQ09ORklHOiAkdGFnbmFtZSQvcCIgPCAiJHByb2dwYXRoIgotICAgIGRvbmUKLSAgICBleGl0ICQ/Ci0gICAgOzsKLQotICAtLWRlYnVnKQotICAgICRlY2hvICIkcHJvZ25hbWU6IGVuYWJsaW5nIHNoZWxsIHRyYWNlIG1vZGUiCi0gICAgc2V0IC14Ci0gICAgcHJlc2VydmVfYXJncz0iJHByZXNlcnZlX2FyZ3MgJGFyZyIKLSAgICA7OwotCi0gIC0tZHJ5LXJ1biB8IC1uKQotICAgIHJ1bj06Ci0gICAgOzsKLQotICAtLWZlYXR1cmVzKQotICAgICRlY2hvICJob3N0OiAkaG9zdCIKKyAgICB3cml0ZV9saWJvYmo9JHsxfQogICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICAkZWNobyAiZW5hYmxlIHNoYXJlZCBsaWJyYXJpZXMiCisgICAgICB3cml0ZV9sb2JqPVwnJHsyfVwnCiAgICAgZWxzZQotICAgICAgJGVjaG8gImRpc2FibGUgc2hhcmVkIGxpYnJhcmllcyIKKyAgICAgIHdyaXRlX2xvYmo9bm9uZQogICAgIGZpCisKICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCi0gICAgICAkZWNobyAiZW5hYmxlIHN0YXRpYyBsaWJyYXJpZXMiCisgICAgICB3cml0ZV9vbGRvYmo9XCckezN9XCcKICAgICBlbHNlCi0gICAgICAkZWNobyAiZGlzYWJsZSBzdGF0aWMgbGlicmFyaWVzIgorICAgICAgd3JpdGVfb2xkb2JqPW5vbmUKICAgICBmaQotICAgIGV4aXQgJD8KLSAgICA7OwogCi0gIC0tZmluaXNoKSBtb2RlPSJmaW5pc2giIDs7CisgICAgJG9wdF9kcnlfcnVuIHx8IHsKKyAgICAgIGNhdCA+JHt3cml0ZV9saWJvYmp9VCA8PEVPRgorIyAkd3JpdGVfbGlib2JqIC0gYSBsaWJ0b29sIG9iamVjdCBmaWxlCisjIEdlbmVyYXRlZCBieSAkUFJPR1JBTSAoR05VICRQQUNLQUdFJFRJTUVTVEFNUCkgJFZFUlNJT04KKyMKKyMgUGxlYXNlIERPIE5PVCBkZWxldGUgdGhpcyBmaWxlIQorIyBJdCBpcyBuZWNlc3NhcnkgZm9yIGxpbmtpbmcgdGhlIGxpYnJhcnkuCiAKLSAgLS1tb2RlKSBwcmV2b3B0PSItLW1vZGUiIHByZXY9bW9kZSA7OwotICAtLW1vZGU9KikgbW9kZT0iJG9wdGFyZyIgOzsKKyMgTmFtZSBvZiB0aGUgUElDIG9iamVjdC4KK3BpY19vYmplY3Q9JHdyaXRlX2xvYmoKIAotICAtLXByZXNlcnZlLWR1cC1kZXBzKSBkdXBsaWNhdGVfZGVwcz0ieWVzIiA7OworIyBOYW1lIG9mIHRoZSBub24tUElDIG9iamVjdAorbm9uX3BpY19vYmplY3Q9JHdyaXRlX29sZG9iagogCi0gIC0tcXVpZXQgfCAtLXNpbGVudCkKLSAgICBzaG93PToKLSAgICBwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAkYXJnIgotICAgIDs7CitFT0YKKyAgICAgICRNViAiJHt3cml0ZV9saWJvYmp9VCIgIiR7d3JpdGVfbGlib2JqfSIKKyAgICB9Cit9CiAKLSAgLS10YWcpCi0gICAgcHJldm9wdD0iLS10YWciCi0gICAgcHJldj10YWcKLSAgICBwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAtLXRhZyIKLSAgICA7OwotICAtLXRhZz0qKQotICAgIHNldCB0YWcgIiRvcHRhcmciICR7MSsiJEAifQotICAgIHNoaWZ0Ci0gICAgcHJldj10YWcKLSAgICBwcmVzZXJ2ZV9hcmdzPSIkcHJlc2VydmVfYXJncyAtLXRhZyIKLSAgICA7OwogCi0gIC1kbG9wZW4pCi0gICAgcHJldm9wdD0iLWRsb3BlbiIKLSAgICBwcmV2PWV4ZWN1dGVfZGxmaWxlcwotICAgIDs7CisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBGSUxFIE5BTUUgQU5EIFBBVEggQ09OVkVSU0lPTiBIRUxQRVIgRlVOQ1RJT05TICMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKLSAgLSopCi0gICAgJGVjaG8gIiRtb2RlbmFtZTogdW5yZWNvZ25pemVkIG9wdGlvbiBcYCRhcmcnIiAxPiYyCi0gICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgOzsKKyMgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiBBUkcKKyMgSGVscGVyIGZ1bmN0aW9uIHVzZWQgYnkgZmlsZSBuYW1lIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsCisjIGFuZCAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEKKyMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0KKyMgaW4gJGJ1aWxkJ3MgJFBBVEguCisjCisjIEFSRyBpcyB0aGUgJGJ1aWxkIGZpbGUgbmFtZSB0byBiZSBjb252ZXJ0ZWQgdG8gdzMyIGZvcm1hdC4KKyMgUmVzdWx0IGlzIGF2YWlsYWJsZSBpbiAkZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQsIGFuZCB3aWxsCisjIGJlIGVtcHR5IG9uIGVycm9yIChvciB3aGVuIEFSRyBpcyBlbXB0eSkKK2Z1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgVW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lcyBub3QgZXhpdCB3aXRoIGEgbm9uLXplcm8gZXJyb3IgY29kZSwgc28gd2UKKyAgICAjIGFyZSBmb3JjZWQgdG8gY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHN0ZG91dC4gT24gdGhlIG90aGVyIGhhbmQsIGlmIHRoZQorICAgICMgY29tbWFuZCBpcyBub3QgZm91bmQsIHRoZSBzaGVsbCB3aWxsIHNldCBhbiBleGl0IGNvZGUgb2YgMTI3IGFuZCBwcmludAorICAgICMgKmFuIGVycm9yIG1lc3NhZ2UqIHRvIHN0ZG91dC4gU28gd2UgbXVzdCBjaGVjayBmb3IgYm90aCBlcnJvciBjb2RlIG9mCisgICAgIyB6ZXJvIEFORCBub24tZW1wdHkgc3Rkb3V0LCB3aGljaCBleHBsYWlucyB0aGUgb2RkIGNvbnN0cnVjdGlvbjoKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcD1gd2luZXBhdGggLXcgIiQxIiAyPi9kZXYvbnVsbGAKKyAgICBpZiB0ZXN0ICIkPyIgLWVxIDAgJiYgdGVzdCAtbiAiJHtmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcH0iOyB0aGVuCisgICAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdD1gJEVDSE8gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3RtcCIgfAorICAgICAgICAkU0VEIC1lICIkbHRfc2VkX25haXZlX2JhY2tzbGFzaGlmeSJgCisgICAgZWxzZQorICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQ9CisgICAgZmkKKyAgZmkKK30KKyMgZW5kOiBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyCiAKLSAgKikKLSAgICBub25vcHQ9IiRhcmciCi0gICAgYnJlYWsKKworIyBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyIEFSRworIyBIZWxwZXIgZnVuY3Rpb24gdXNlZCBieSBwYXRoIGNvbnZlcnNpb24gZnVuY3Rpb25zIHdoZW4gJGJ1aWxkIGlzICpuaXgsIGFuZAorIyAkaG9zdCBpcyBtaW5ndywgY3lnd2luLCBvciBzb21lIG90aGVyIHczMiBlbnZpcm9ubWVudC4gUmVsaWVzIG9uIGEgY29ycmVjdGx5CisjIGNvbmZpZ3VyZWQgd2luZSBlbnZpcm9ubWVudCBhdmFpbGFibGUsIHdpdGggdGhlIHdpbmVwYXRoIHByb2dyYW0gaW4gJGJ1aWxkJ3MKKyMgJFBBVEguIEFzc3VtZXMgQVJHIGhhcyBubyBsZWFkaW5nIG9yIHRyYWlsaW5nIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlcnMuCisjCisjIEFSRyBpcyBwYXRoIHRvIGJlIGNvbnZlcnRlZCBmcm9tICRidWlsZCBmb3JtYXQgdG8gd2luMzIuCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0LgorIyBVbmNvbnZlcnRpYmxlIGZpbGUgKGRpcmVjdG9yeSkgbmFtZXMgaW4gQVJHIGFyZSBza2lwcGVkOyBpZiBubyBkaXJlY3RvcnkgbmFtZXMKKyMgYXJlIGNvbnZlcnRpYmxlLCB0aGVuIHRoZSByZXN1bHQgbWF5IGJlIGVtcHR5LgorZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgICMgdW5mb3J0dW5hdGVseSwgd2luZXBhdGggZG9lc24ndCBjb252ZXJ0IHBhdGhzLCBvbmx5IGZpbGUgbmFtZXMKKyAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQ9IiIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgb2xkSUZTPSRJRlMKKyAgICBJRlM9OgorICAgIGZvciBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX2YgaW4gJDE7IGRvCisgICAgICBJRlM9JG9sZElGUworICAgICAgZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMiAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfZiIKKyAgICAgIGlmIHRlc3QgLW4gIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdCI7IHRoZW4KKyAgICAgICAgICBmdW5jX2NvbnZlcnRfY29yZV9wYXRoX3dpbmVfdG9fdzMyX3Jlc3VsdD0iJGZ1bmNfY29udmVydF9jb3JlX2ZpbGVfd2luZV90b193MzJfcmVzdWx0IgorICAgICAgICBlbHNlCisgICAgICAgICAgZnVuY19hcHBlbmQgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQgIjskZnVuY19jb252ZXJ0X2NvcmVfZmlsZV93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgICAgIGZpCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9JG9sZElGUworICBmaQorfQorIyBlbmQ6IGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIKKworCisjIGZ1bmNfY3lncGF0aCBBUkdTLi4uCisjIFdyYXBwZXIgYXJvdW5kIGNhbGxpbmcgdGhlIGN5Z3BhdGggcHJvZ3JhbSB2aWEgTFRfQ1lHUEFUSC4gVGhpcyBpcyB1c2VkIHdoZW4KKyMgd2hlbiAoMSkgJGJ1aWxkIGlzICpuaXggYW5kIEN5Z3dpbiBpcyBob3N0ZWQgdmlhIGEgd2luZSBlbnZpcm9ubWVudDsgb3IgKDIpCisjICRidWlsZCBpcyBNU1lTIGFuZCAkaG9zdCBpcyBDeWd3aW4sIG9yICgzKSAkYnVpbGQgaXMgQ3lnd2luLiBJbiBjYXNlICgxKSBvcgorIyAoMiksIHJldHVybnMgdGhlIEN5Z3dpbiBmaWxlIG5hbWUgb3IgcGF0aCBpbiBmdW5jX2N5Z3BhdGhfcmVzdWx0IChpbnB1dAorIyBmaWxlIG5hbWUgb3IgcGF0aCBpcyBhc3N1bWVkIHRvIGJlIGluIHczMiBmb3JtYXQsIGFzIHByZXZpb3VzbHkgY29udmVydGVkCisjIGZyb20gJGJ1aWxkJ3MgKm5peCBvciBNU1lTIGZvcm1hdCkuIEluIGNhc2UgKDMpLCByZXR1cm5zIHRoZSB3MzIgZmlsZSBuYW1lCisjIG9yIHBhdGggaW4gZnVuY19jeWdwYXRoX3Jlc3VsdCAoaW5wdXQgZmlsZSBuYW1lIG9yIHBhdGggaXMgYXNzdW1lZCB0byBiZSBpbgorIyBDeWd3aW4gZm9ybWF0KS4gUmV0dXJucyBhbiBlbXB0eSBzdHJpbmcgb24gZXJyb3IuCisjCisjIEFSR1MgYXJlIHBhc3NlZCB0byBjeWdwYXRoLCB3aXRoIHRoZSBsYXN0IG9uZSBiZWluZyB0aGUgZmlsZSBuYW1lIG9yIHBhdGggdG8KKyMgYmUgY29udmVydGVkLgorIworIyBTcGVjaWZ5IHRoZSBhYnNvbHV0ZSAqbml4IChvciB3MzIpIG5hbWUgdG8gY3lncGF0aCBpbiB0aGUgTFRfQ1lHUEFUSAorIyBlbnZpcm9ubWVudCB2YXJpYWJsZTsgZG8gbm90IHB1dCBpdCBpbiAkUEFUSC4KK2Z1bmNfY3lncGF0aCAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLW4gIiRMVF9DWUdQQVRIIiAmJiB0ZXN0IC1mICIkTFRfQ1lHUEFUSCI7IHRoZW4KKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PWAkTFRfQ1lHUEFUSCAiJEAiIDI+L2Rldi9udWxsYAorICAgIGlmIHRlc3QgIiQ/IiAtbmUgMDsgdGhlbgorICAgICAgIyBvbiBmYWlsdXJlLCBlbnN1cmUgcmVzdWx0IGlzIGVtcHR5CisgICAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorICAgIGZpCisgIGVsc2UKKyAgICBmdW5jX2N5Z3BhdGhfcmVzdWx0PQorICAgIGZ1bmNfZXJyb3IgIkxUX0NZR1BBVEggaXMgZW1wdHkgb3Igc3BlY2lmaWVzIG5vbi1leGlzdGVudCBmaWxlOiBcYCRMVF9DWUdQQVRIJyIKKyAgZmkKK30KKyNlbmQ6IGZ1bmNfY3lncGF0aAorCisKKyMgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIG9yIHBhdGggQVJHIGZyb20gTVNZUyBmb3JtYXQgdG8gdzMyIGZvcm1hdC4gIFJldHVybgorIyByZXN1bHQgaW4gZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0LgorZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAjIGF3a3dhcmQ6IGNtZCBhcHBlbmRzIHNwYWNlcyB0byByZXN1bHQKKyAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0PWAoIGNtZCAvL2MgZWNobyAiJDEiICkgMj4vZGV2L251bGwgfAorICAgICRTRUQgLWUgJ3MvWyBdKiQvLycgLWUgIiRsdF9zZWRfbmFpdmVfYmFja3NsYXNoaWZ5ImAKK30KKyNlbmQ6IGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayBBUkcxIEFSRzIKKyMgVmVyaWZ5IHRoYXQgQVJHMSAoYSBmaWxlIG5hbWUgaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gQVJHMi4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSAocmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBBUkcxKS4KK2Z1bmNfY29udmVydF9maWxlX2NoZWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgdGVzdCAteiAiJDIiICYmIHRlc3QgLW4gIiQxIiA7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIGhvc3QgZmlsZSBuYW1lIGNvcnJlc3BvbmRpbmcgdG8iCisgICAgZnVuY19lcnJvciAiICBcYCQxJyIKKyAgICBmdW5jX2Vycm9yICJDb250aW51aW5nLCBidXQgdW5pbnN0YWxsZWQgZXhlY3V0YWJsZXMgbWF5IG5vdCB3b3JrLiIKKyAgICAjIEZhbGxiYWNrOgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjaworCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgRlJPTV9QQVRIU0VQIFRPX1BBVEhTRVAgRlJPTV9QQVRIIFRPX1BBVEgKKyMgVmVyaWZ5IHRoYXQgRlJPTV9QQVRIIChhIHBhdGggaW4gJGJ1aWxkIGZvcm1hdCkgd2FzIGNvbnZlcnRlZCB0byAkaG9zdAorIyBmb3JtYXQgaW4gVE9fUEFUSC4gT3RoZXJ3aXNlLCBlbWl0IGFuIGVycm9yIG1lc3NhZ2UsIGJ1dCBjb250aW51ZSwgcmVzZXR0aW5nCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCB0byBhIHNpbXBsaXN0aWMgZmFsbGJhY2sgdmFsdWUgKHNlZSBiZWxvdykuCitmdW5jX2NvbnZlcnRfcGF0aF9jaGVjayAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiQ0IiAmJiB0ZXN0IC1uICIkMyI7IHRoZW4KKyAgICBmdW5jX2Vycm9yICJDb3VsZCBub3QgZGV0ZXJtaW5lIHRoZSBob3N0IHBhdGggY29ycmVzcG9uZGluZyB0byIKKyAgICBmdW5jX2Vycm9yICIgIFxgJDMnIgorICAgIGZ1bmNfZXJyb3IgIkNvbnRpbnVpbmcsIGJ1dCB1bmluc3RhbGxlZCBleGVjdXRhYmxlcyBtYXkgbm90IHdvcmsuIgorICAgICMgRmFsbGJhY2suICBUaGlzIGlzIGEgZGVsaWJlcmF0ZWx5IHNpbXBsaXN0aWMgImNvbnZlcnNpb24iIGFuZAorICAgICMgc2hvdWxkIG5vdCBiZSAiaW1wcm92ZWQiLiAgU2VlIGxpYnRvb2wuaW5mby4KKyAgICBpZiB0ZXN0ICJ4JDEiICE9ICJ4JDIiOyB0aGVuCisgICAgICBsdF9yZXBsYWNlX3BhdGhzZXBfY2hhcnM9InN8JDF8JDJ8ZyIKKyAgICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gZWNobyAiJDMiIHwKKyAgICAgICAgJFNFRCAtZSAiJGx0X3JlcGxhY2VfcGF0aHNlcF9jaGFycyJgCisgICAgZWxzZQorICAgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyIKKyAgICBmaQorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCBGUk9OVFBBVCBCQUNLUEFUIFJFUEwgT1JJRworIyBNb2RpZmllcyBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQgYnkgcHJlcGVuZGluZyBSRVBMIGlmIE9SSUcgbWF0Y2hlcyBGUk9OVFBBVAorIyBhbmQgYXBwZW5kaW5nIFJFUEwgaWYgT1JJRyBtYXRjaGVzIEJBQ0tQQVQuCitmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBjYXNlICQ0IGluCisgICQxICkgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkMyRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCiAgICAgOzsKICAgZXNhYwotZG9uZQorICBjYXNlICQ0IGluCisgICQyICkgZnVuY19hcHBlbmQgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0ICIkMyIKKyAgICA7OworICBlc2FjCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAKIAotaWYgdGVzdCAtbiAiJHByZXZvcHQiOyB0aGVuCi0gICRlY2hvICIkbW9kZW5hbWU6IG9wdGlvbiBcYCRwcmV2b3B0JyByZXF1aXJlcyBhbiBhcmd1bWVudCIgMT4mMgotICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgZXhpdCAkRVhJVF9GQUlMVVJFCi1maQogCi1jYXNlICRkaXNhYmxlX2xpYnMgaW4KLW5vKSAKLSAgOzsKLXNoYXJlZCkKLSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCi0gIGJ1aWxkX29sZF9saWJzPXllcwotICA7Owotc3RhdGljKQotICBidWlsZF9vbGRfbGlicz1gY2FzZSAkYnVpbGRfbGlidG9vbF9saWJzIGluIHllcykgZWNobyBubzs7ICopIGVjaG8geWVzOzsgZXNhY2AKLSAgOzsKLWVzYWMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjICRidWlsZCB0byAkaG9zdCBGSUxFIE5BTUUgQ09OVkVSU0lPTiBGVU5DVElPTlMgIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X2ZpbGVfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgUmVzdWx0IHdpbGwgYmUgYXZhaWxhYmxlIGluICRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCiAKLSMgSWYgdGhpcyB2YXJpYWJsZSBpcyBzZXQgaW4gYW55IG9mIHRoZSBhY3Rpb25zLCB0aGUgY29tbWFuZCBpbiBpdAotIyB3aWxsIGJlIGV4ZWNlZCBhdCB0aGUgZW5kLiAgVGhpcyBwcmV2ZW50cyBoZXJlLWRvY3VtZW50cyBmcm9tIGJlaW5nCi0jIGxlZnQgb3ZlciBieSBzaGVsbHMuCi1leGVjX2NtZD0KIAotaWYgdGVzdCAteiAiJHNob3dfaGVscCI7IHRoZW4KKyMgZnVuY190b19ob3N0X2ZpbGUgQVJHCisjIENvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY190b19ob3N0X2ZpbGUgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICAkdG9faG9zdF9maWxlX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfZmlsZQogCi0gICMgSW5mZXIgdGhlIG9wZXJhdGlvbiBtb2RlLgotICBpZiB0ZXN0IC16ICIkbW9kZSI7IHRoZW4KLSAgICAkZWNobyAiKioqIFdhcm5pbmc6IGluZmVycmluZyB0aGUgbW9kZSBvZiBvcGVyYXRpb24gaXMgZGVwcmVjYXRlZC4iIDE+JjIKLSAgICAkZWNobyAiKioqIEZ1dHVyZSB2ZXJzaW9ucyBvZiBMaWJ0b29sIHdpbGwgcmVxdWlyZSAtLW1vZGU9TU9ERSBiZSBzcGVjaWZpZWQuIiAxPiYyCi0gICAgY2FzZSAkbm9ub3B0IGluCi0gICAgKmNjIHwgY2MqIHwgKisrIHwgZ2NjKiB8ICotZ2NjKiB8IGcrKyogfCB4bGMqKQotICAgICAgbW9kZT1saW5rCi0gICAgICBmb3IgYXJnCi0gICAgICBkbwotCWNhc2UgJGFyZyBpbgotCS1jKQotCSAgIG1vZGU9Y29tcGlsZQotCSAgIGJyZWFrCi0JICAgOzsKLQllc2FjCi0gICAgICBkb25lCi0gICAgICA7OwotICAgICpkYiB8ICpkYnggfCAqc3RyYWNlIHwgKnRydXNzKQotICAgICAgbW9kZT1leGVjdXRlCi0gICAgICA7OwotICAgICppbnN0YWxsKnxjcHxtdikKLSAgICAgIG1vZGU9aW5zdGFsbAotICAgICAgOzsKLSAgICAqcm0pCi0gICAgICBtb2RlPXVuaW5zdGFsbAorCisjIGZ1bmNfdG9fdG9vbF9maWxlIEFSRyBMQVpZCisjIGNvbnZlcnRzIHRoZSBmaWxlIG5hbWUgQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byB0b29sY2hhaW4gZm9ybWF0LiBSZXR1cm4KKyMgcmVzdWx0IGluIGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdC4gIElmIHRoZSBjb252ZXJzaW9uIGluIHVzZSBpcyBsaXN0ZWQKKyMgaW4gKHRoZSBjb21tYSBzZXBhcmF0ZWQpIExBWlksIG5vIGNvbnZlcnNpb24gdGFrZXMgcGxhY2UuCitmdW5jX3RvX3Rvb2xfZmlsZSAoKQoreworICAkb3B0X2RlYnVnCisgIGNhc2UgLCQyLCBpbgorICAgICosIiR0b190b29sX2ZpbGVfY21kIiwqKQorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSQxCiAgICAgICA7OwogICAgICopCi0gICAgICAjIElmIHdlIGhhdmUgbm8gbW9kZSwgYnV0IGRsZmlsZXMgd2VyZSBzcGVjaWZpZWQsIHRoZW4gZG8gZXhlY3V0ZSBtb2RlLgotICAgICAgdGVzdCAtbiAiJGV4ZWN1dGVfZGxmaWxlcyIgJiYgbW9kZT1leGVjdXRlCi0KLSAgICAgICMgSnVzdCB1c2UgdGhlIGRlZmF1bHQgb3BlcmF0aW9uIG1vZGUuCi0gICAgICBpZiB0ZXN0IC16ICIkbW9kZSI7IHRoZW4KLQlpZiB0ZXN0IC1uICIkbm9ub3B0IjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IGluZmVyIG9wZXJhdGlvbiBtb2RlIGZyb20gXGAkbm9ub3B0JyIgMT4mMgotCWVsc2UKLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBpbmZlciBvcGVyYXRpb24gbW9kZSB3aXRob3V0IE1PREUtQVJHUyIgMT4mMgotCWZpCi0gICAgICBmaQorICAgICAgJHRvX3Rvb2xfZmlsZV9jbWQgIiQxIgorICAgICAgZnVuY190b190b29sX2ZpbGVfcmVzdWx0PSRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQKICAgICAgIDs7Ci0gICAgZXNhYworICBlc2FjCit9CisjIGVuZCBmdW5jX3RvX3Rvb2xfZmlsZQorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgZmlsZSBuYW1lIEFSRyBmcm9tIChtaW5ndykgTVNZUyB0byAobWluZ3cpIHczMiBmb3JtYXQ7IGF1dG9tYXRpYworIyBjb252ZXJzaW9uIHRvIHczMiBpcyBub3QgYXZhaWxhYmxlIGluc2lkZSB0aGUgY3dyYXBwZXIuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgIGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMl9yZXN1bHQiCiAgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgogCi0gICMgT25seSBleGVjdXRlIG1vZGUgaXMgYWxsb3dlZCB0byBoYXZlIC1kbG9wZW4gZmxhZ3MuCi0gIGlmIHRlc3QgLW4gIiRleGVjdXRlX2RsZmlsZXMiICYmIHRlc3QgIiRtb2RlIiAhPSBleGVjdXRlOyB0aGVuCi0gICAgJGVjaG8gIiRtb2RlbmFtZTogdW5yZWNvZ25pemVkIG9wdGlvbiBcYC1kbG9wZW4nIiAxPiYyCi0gICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gQ3lnd2luIHRvIHczMiBmb3JtYXQuICBSZXR1cm5zIHJlc3VsdCBpbgorIyBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0PSIkMSIKKyAgaWYgdGVzdCAtbiAiJDEiOyB0aGVuCisgICAgIyBiZWNhdXNlICRidWlsZCBpcyBjeWd3aW4sIHdlIGNhbGwgInRoZSIgY3lncGF0aCBpbiAkUEFUSDsgbm8gbmVlZCB0byB1c2UKKyAgICAjIExUX0NZR1BBVEggaW4gdGhpcyBjYXNlLgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD1gY3lncGF0aCAtbSAiJDEiYAogICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfY3lnd2luX3RvX3czMgogCi0gICMgQ2hhbmdlIHRoZSBoZWxwIG1lc3NhZ2UgdG8gYSBtb2RlLXNwZWNpZmljIG9uZS4KLSAgZ2VuZXJpY19oZWxwPSIkaGVscCIKLSAgaGVscD0iVHJ5IFxgJG1vZGVuYW1lIC0taGVscCAtLW1vZGU9JG1vZGUnIGZvciBtb3JlIGluZm9ybWF0aW9uLiIKIAotICAjIFRoZXNlIG1vZGVzIGFyZSBpbiBvcmRlciBvZiBleGVjdXRpb24gZnJlcXVlbmN5IHNvIHRoYXQgdGhleSBydW4gcXVpY2tseS4KLSAgY2FzZSAkbW9kZSBpbgotICAjIGxpYnRvb2wgY29tcGlsZSBtb2RlCi0gIGNvbXBpbGUpCi0gICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogY29tcGlsZSIKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byB3MzIgZm9ybWF0LiAgUmVxdWlyZXMgYSB3aW5lIGVudmlyb25tZW50CisjIGFuZCBhIHdvcmtpbmcgd2luZXBhdGguIFJldHVybnMgcmVzdWx0IGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgZmkKKyAgZnVuY19jb252ZXJ0X2ZpbGVfY2hlY2sgIiQxIiAiJGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdCIKK30KKyMgZW5kIGZ1bmNfY29udmVydF9maWxlX25peF90b193MzIKKworCisjIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fY3lnd2luIEFSRworIyBDb252ZXJ0IGZpbGUgbmFtZSBBUkcgZnJvbSBNU1lTIHRvIEN5Z3dpbiBmb3JtYXQuICBSZXF1aXJlcyBMVF9DWUdQQVRIIHNldC4KKyMgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJDEiCisgICAgZnVuY19jeWdwYXRoIC11ICIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgIGZpCisgIGZ1bmNfY29udmVydF9maWxlX2NoZWNrICIkMSIgIiRmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQiCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBmaWxlIG5hbWUgQVJHIGZyb20gKm5peCB0byBDeWd3aW4gZm9ybWF0LiAgUmVxdWlyZXMgQ3lnd2luIGluc3RhbGxlZAorIyBpbiBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0CisjIGluIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9maWxlX25peF90b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIGNvbnZlcnQgZnJvbSAqbml4IHRvIHczMiwgdGhlbiB1c2UgY3lncGF0aCB0byBjb252ZXJ0IGZyb20gdzMyIHRvIGN5Z3dpbi4KKyAgICBmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyICIkMSIKKyAgICBmdW5jX2N5Z3BhdGggLXUgIiRmdW5jX2NvbnZlcnRfY29yZV9maWxlX3dpbmVfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICBmaQorICBmdW5jX2NvbnZlcnRfZmlsZV9jaGVjayAiJDEiICIkZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0IgorfQorIyBlbmQgZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX2N5Z3dpbgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyAkYnVpbGQgdG8gJGhvc3QgUEFUSCBDT05WRVJTSU9OIEZVTkNUSU9OUyAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgaW52b2tlZCB2aWEgYCR0b19ob3N0X3BhdGhfY21kIEFSRycKKyMKKyMgSW4gZWFjaCBjYXNlLCBBUkcgaXMgdGhlIHBhdGggdG8gYmUgY29udmVydGVkIGZyb20gJGJ1aWxkIHRvICRob3N0IGZvcm1hdC4KKyMgVGhlIHJlc3VsdCB3aWxsIGJlIGF2YWlsYWJsZSBpbiAkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorIworIyBQYXRoIHNlcGFyYXRvcnMgYXJlIGFsc28gY29udmVydGVkIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuICBJZgorIyBBUkcgYmVnaW5zIG9yIGVuZHMgd2l0aCBhIHBhdGggc2VwYXJhdG9yIGNoYXJhY3RlciwgaXQgaXMgcHJlc2VydmVkIChidXQKKyMgY29udmVydGVkIHRvICRob3N0IGZvcm1hdCkgb24gb3V0cHV0LgorIworIyBBbGwgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9ucyBhcmUgbmFtZWQgdXNpbmcgdGhlIGZvbGxvd2luZyBjb252ZW50aW9uOgorIyAgIGZpbGUgbmFtZSBjb252ZXJzaW9uIGZ1bmN0aW9uICAgIDogZnVuY19jb252ZXJ0X2ZpbGVfWF90b19ZICgpCisjICAgcGF0aCBjb252ZXJzaW9uIGZ1bmN0aW9uICAgICAgICAgOiBmdW5jX2NvbnZlcnRfcGF0aF9YX3RvX1kgKCkKKyMgd2hlcmUsIGZvciBhbnkgZ2l2ZW4gJGJ1aWxkLyRob3N0IGNvbWJpbmF0aW9uIHRoZSAnWF90b19ZJyB2YWx1ZSBpcyB0aGUKKyMgc2FtZS4gIElmIGNvbnZlcnNpb24gZnVuY3Rpb25zIGFyZSBhZGRlZCBmb3IgbmV3ICRidWlsZC8kaG9zdCBjb21iaW5hdGlvbnMsCisjIHRoZSB0d28gbmV3IGZ1bmN0aW9ucyBtdXN0IGZvbGxvdyB0aGlzIHBhdHRlcm4sIG9yIGZ1bmNfaW5pdF90b19ob3N0X3BhdGhfY21kCisjIHdpbGwgYnJlYWsuCisKKworIyBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorIyBFbnN1cmVzIHRoYXQgZnVuY3Rpb24gInBvaW50ZXIiIHZhcmlhYmxlICR0b19ob3N0X3BhdGhfY21kIGlzIHNldCB0byB0aGUKKyMgYXBwcm9wcmlhdGUgdmFsdWUsIGJhc2VkIG9uIHRoZSB2YWx1ZSBvZiAkdG9faG9zdF9maWxlX2NtZC4KK3RvX2hvc3RfcGF0aF9jbWQ9CitmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZCAoKQoreworICAkb3B0X2RlYnVnCisgIGlmIHRlc3QgLXogIiR0b19ob3N0X3BhdGhfY21kIjsgdGhlbgorICAgIGZ1bmNfc3RyaXBuYW1lICdmdW5jX2NvbnZlcnRfZmlsZV8nICcnICIkdG9faG9zdF9maWxlX2NtZCIKKyAgICB0b19ob3N0X3BhdGhfY21kPSJmdW5jX2NvbnZlcnRfcGF0aF8ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdH0iCisgIGZpCit9CisKKworIyBmdW5jX3RvX2hvc3RfcGF0aCBBUkcKKyMgQ29udmVydHMgdGhlIHBhdGggQVJHIGZyb20gJGJ1aWxkIGZvcm1hdCB0byAkaG9zdCBmb3JtYXQuIFJldHVybiByZXN1bHQKKyMgaW4gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY190b19ob3N0X3BhdGggKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX2luaXRfdG9faG9zdF9wYXRoX2NtZAorICAkdG9faG9zdF9wYXRoX2NtZCAiJDEiCit9CisjIGVuZCBmdW5jX3RvX2hvc3RfcGF0aAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbm9vcCBBUkcKKyMgQ29weSBBUkcgdG8gZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbm9vcCAoKQoreworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbm9vcAorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSAobWluZ3cpIE1TWVMgdG8gKG1pbmd3KSB3MzIgZm9ybWF0OyBhdXRvbWF0aWMKKyMgY29udmVyc2lvbiB0byB3MzIgaXMgbm90IGF2YWlsYWJsZSBpbnNpZGUgdGhlIGN3cmFwcGVyLiAgUmV0dXJucyByZXN1bHQgaW4KKyMgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20gQVJHLiAgTVNZUworICAgICMgYmVoYXZpb3IgaXMgaW5jb25zaXN0ZW50IGhlcmU7IGN5Z3BhdGggdHVybnMgdGhlbSBpbnRvICcuOycgYW5kICc7Lic7CisgICAgIyBhbmQgd2luZXBhdGggaWdub3JlcyB0aGVtIGNvbXBsZXRlbHkuCisgICAgZnVuY19zdHJpcG5hbWUgOiA6ICIkMSIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF90bXAxPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKyAgICBmdW5jX2NvbnZlcnRfY29yZV9tc3lzX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzJfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfbXN5c190b193MzIKKworCisjIGZ1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgQVJHCisjIENvbnZlcnQgcGF0aCBBUkcgZnJvbSBDeWd3aW4gdG8gdzMyIGZvcm1hdC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX2N5Z3dpbl90b193MzIgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFNlZSBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX3czMjoKKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD1gY3lncGF0aCAtbSAtcCAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiYAorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogIjsiIFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiAiOyIgIiQxIgorICBmaQorfQorIyBlbmQgZnVuY19jb252ZXJ0X3BhdGhfY3lnd2luX3RvX3czMgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gdzMyIGZvcm1hdC4gIFJlcXVpcmVzIGEgd2luZSBlbnZpcm9ubWVudCBhbmQKKyMgYSB3b3JraW5nIHdpbmVwYXRoLiAgUmV0dXJucyByZXN1bHQgaW4gZnVuY190b19ob3N0X2ZpbGVfcmVzdWx0LgorZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX3czMiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMiAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfcmVzdWx0PSIkZnVuY19jb252ZXJ0X2NvcmVfcGF0aF93aW5lX3RvX3czMl9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiAiOyIgXAorICAgICAgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIiAiJGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdCIKKyAgICBmdW5jX2NvbnZlcnRfcGF0aF9mcm9udF9iYWNrX3BhdGhzZXAgIjoqIiAiKjoiICI7IiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9uaXhfdG9fdzMyCisKKworIyBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tIE1TWVMgdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIExUX0NZR1BBVEggc2V0LgorIyBSZXR1cm5zIHJlc3VsdCBpbiBmdW5jX3RvX2hvc3RfZmlsZV9yZXN1bHQuCitmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbiAoKQoreworICAkb3B0X2RlYnVnCisgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJDEiCisgIGlmIHRlc3QgLW4gIiQxIjsgdGhlbgorICAgICMgU2VlIGZ1bmNfY29udmVydF9wYXRoX21zeXNfdG9fdzMyOgorICAgIGZ1bmNfc3RyaXBuYW1lIDogOiAiJDEiCisgICAgZnVuY190b19ob3N0X3BhdGhfdG1wMT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisgICAgZnVuY19jb252ZXJ0X2NvcmVfbXN5c190b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX21zeXNfdG9fdzMyX3Jlc3VsdCIKKyAgICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiRmdW5jX2N5Z3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2NoZWNrIDogOiBcCisgICAgICAiJGZ1bmNfdG9faG9zdF9wYXRoX3RtcDEiICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IgorICAgIGZ1bmNfY29udmVydF9wYXRoX2Zyb250X2JhY2tfcGF0aHNlcCAiOioiICIqOiIgOiAiJDEiCisgIGZpCit9CisjIGVuZCBmdW5jX2NvbnZlcnRfcGF0aF9tc3lzX3RvX2N5Z3dpbgorCisKKyMgZnVuY19jb252ZXJ0X3BhdGhfbml4X3RvX2N5Z3dpbiBBUkcKKyMgQ29udmVydCBwYXRoIEFSRyBmcm9tICpuaXggdG8gQ3lnd2luIGZvcm1hdC4gIFJlcXVpcmVzIEN5Z3dpbiBpbnN0YWxsZWQgaW4gYQorIyBhIHdpbmUgZW52aXJvbm1lbnQsIHdvcmtpbmcgd2luZXBhdGgsIGFuZCBMVF9DWUdQQVRIIHNldC4gIFJldHVybnMgcmVzdWx0IGluCisjIGZ1bmNfdG9faG9zdF9maWxlX3Jlc3VsdC4KK2Z1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4gKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQ9IiQxIgorICBpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKyAgICAjIFJlbW92ZSBsZWFkaW5nIGFuZCB0cmFpbGluZyBwYXRoIHNlcGFyYXRvciBjaGFyYWN0ZXJzIGZyb20KKyAgICAjIEFSRy4gbXN5cyBiZWhhdmlvciBpcyBpbmNvbnNpc3RlbnQgaGVyZSwgY3lncGF0aCB0dXJucyB0aGVtCisgICAgIyBpbnRvICcuOycgYW5kICc7LicsIGFuZCB3aW5lcGF0aCBpZ25vcmVzIHRoZW0gY29tcGxldGVseS4KKyAgICBmdW5jX3N0cmlwbmFtZSA6IDogIiQxIgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3RtcDE9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorICAgIGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzIgIiRmdW5jX3RvX2hvc3RfcGF0aF90bXAxIgorICAgIGZ1bmNfY3lncGF0aCAtdSAtcCAiJGZ1bmNfY29udmVydF9jb3JlX3BhdGhfd2luZV90b193MzJfcmVzdWx0IgorICAgIGZ1bmNfdG9faG9zdF9wYXRoX3Jlc3VsdD0iJGZ1bmNfY3lncGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfY2hlY2sgOiA6IFwKKyAgICAgICIkZnVuY190b19ob3N0X3BhdGhfdG1wMSIgIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiCisgICAgZnVuY19jb252ZXJ0X3BhdGhfZnJvbnRfYmFja19wYXRoc2VwICI6KiIgIio6IiA6ICIkMSIKKyAgZmkKK30KKyMgZW5kIGZ1bmNfY29udmVydF9wYXRoX25peF90b19jeWd3aW4KKworCisjIGZ1bmNfbW9kZV9jb21waWxlIGFyZy4uLgorZnVuY19tb2RlX2NvbXBpbGUgKCkKK3sKKyAgICAkb3B0X2RlYnVnCiAgICAgIyBHZXQgdGhlIGNvbXBpbGF0aW9uIGNvbW1hbmQgYW5kIHRoZSBzb3VyY2UgZmlsZS4KICAgICBiYXNlX2NvbXBpbGU9CiAgICAgc3JjZmlsZT0iJG5vbm9wdCIgICMgIGFsd2F5cyBrZWVwIGEgbm9uLWVtcHR5IHZhbHVlIGluICJzcmNmaWxlIgpAQCAtNjY0LDYgKzE5NTcsNyBAQAogICAgIGFyZ19tb2RlPW5vcm1hbAogICAgIGxpYm9iaj0KICAgICBsYXRlcj0KKyAgICBwaWVfZmxhZz0KIAogICAgIGZvciBhcmcKICAgICBkbwpAQCAtNjg0LDE2ICsxOTc4LDE5IEBACiAJIyBBY2NlcHQgYW55IGNvbW1hbmQtbGluZSBvcHRpb25zLgogCWNhc2UgJGFyZyBpbgogCS1vKQotCSAgaWYgdGVzdCAtbiAiJGxpYm9iaiIgOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIGZpCisJICB0ZXN0IC1uICIkbGlib2JqIiAmJiBcCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBjYW5ub3Qgc3BlY2lmeSBcYC1vJyBtb3JlIHRoYW4gb25jZSIKIAkgIGFyZ19tb2RlPXRhcmdldAogCSAgY29udGludWUKIAkgIDs7CiAKLQktc3RhdGljIHwgLXByZWZlci1waWMgfCAtcHJlZmVyLW5vbi1waWMpCi0JICBsYXRlcj0iJGxhdGVyICRhcmciCisJLXBpZSB8IC1mcGllIHwgLWZQSUUpCisgICAgICAgICAgZnVuY19hcHBlbmQgcGllX2ZsYWcgIiAkYXJnIgorCSAgY29udGludWUKKwkgIDs7CisKKwktc2hhcmVkIHwgLXN0YXRpYyB8IC1wcmVmZXItcGljIHwgLXByZWZlci1ub24tcGljKQorCSAgZnVuY19hcHBlbmQgbGF0ZXIgIiAkYXJnIgogCSAgY29udGludWUKIAkgIDs7CiAKQEAgLTcwOCwzMSArMjAwNSwyNCBAQAogCSAgOzsgICAgICAgICAgICAjICByZXBsYWNlZCBsYXRlci4gIEkgd291bGQgZ3Vlc3MgdGhhdCB3b3VsZCBiZSBhIGJ1Zy4KIAogCS1XYywqKQotCSAgYXJncz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICJzL14tV2MsLy8iYAorCSAgZnVuY19zdHJpcG5hbWUgJy1XYywnICcnICIkYXJnIgorCSAgYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICBsYXN0YXJnPQogCSAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCi0gCSAgZm9yIGFyZyBpbiAkYXJnczsgZG8KKwkgIGZvciBhcmcgaW4gJGFyZ3M7IGRvCiAJICAgIElGUz0iJHNhdmVfaWZzIgotCi0JICAgICMgRG91YmxlLXF1b3RlIGFyZ3MgY29udGFpbmluZyBvdGhlciBzaGVsbCBtZXRhY2hhcmFjdGVycy4KLQkgICAgIyBNYW55IEJvdXJuZSBzaGVsbHMgY2Fubm90IGhhbmRsZSBjbG9zZSBicmFja2V0cyBjb3JyZWN0bHkKLQkgICAgIyBpbiBzY2FuIHNldHMsIHNvIHdlIHNwZWNpZnkgaXQgc2VwYXJhdGVseS4KLQkgICAgY2FzZSAkYXJnIGluCi0JICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICAgICAgYXJnPSJcIiRhcmdcIiIKLQkgICAgICA7OwotCSAgICBlc2FjCi0JICAgIGxhc3Rhcmc9IiRsYXN0YXJnICRhcmciCisJICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBsYXN0YXJnICIkYXJnIgogCSAgZG9uZQogCSAgSUZTPSIkc2F2ZV9pZnMiCi0JICBsYXN0YXJnPWAkZWNobyAiWCRsYXN0YXJnIiB8ICRYc2VkIC1lICJzL14gLy8iYAorCSAgZnVuY19zdHJpcG5hbWUgJyAnICcnICIkbGFzdGFyZyIKKwkgIGxhc3Rhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCiAJICAjIEFkZCB0aGUgYXJndW1lbnRzIHRvIGJhc2VfY29tcGlsZS4KLQkgIGJhc2VfY29tcGlsZT0iJGJhc2VfY29tcGlsZSAkbGFzdGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGJhc2VfY29tcGlsZSAiICRsYXN0YXJnIgogCSAgY29udGludWUKIAkgIDs7CiAKLQkqICkKKwkqKQogCSAgIyBBY2NlcHQgdGhlIGN1cnJlbnQgYXJndW1lbnQgYXMgdGhlIHNvdXJjZSBmaWxlLgogCSAgIyBUaGUgcHJldmlvdXMgInNyY2ZpbGUiIGJlY29tZXMgdGhlIGN1cnJlbnQgYXJndW1lbnQuCiAJICAjCkBAIC03NDQsNjYgKzIwMzQsNDEgQEAKICAgICAgIGVzYWMgICAgIyAgY2FzZSAkYXJnX21vZGUKIAogICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBwcmV2aW91cyBhcmd1bWVudC4KLSAgICAgIGxhc3Rhcmc9YCRlY2hvICJYJGxhc3RhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCi0gICAgICBjYXNlICRsYXN0YXJnIGluCi0gICAgICAjIERvdWJsZS1xdW90ZSBhcmdzIGNvbnRhaW5pbmcgb3RoZXIgc2hlbGwgbWV0YWNoYXJhY3RlcnMuCi0gICAgICAjIE1hbnkgQm91cm5lIHNoZWxscyBjYW5ub3QgaGFuZGxlIGNsb3NlIGJyYWNrZXRzIGNvcnJlY3RseQotICAgICAgIyBpbiBzY2FuIHNldHMsIGFuZCBzb21lIFN1bk9TIGtzaCBtaXN0cmVhdCBiYWNrc2xhc2gtZXNjYXBpbmcKLSAgICAgICMgaW4gc2NhbiBzZXRzICh3b3JrZWQgYXJvdW5kIHdpdGggdmFyaWFibGUgZXhwYW5zaW9uKSwKLSAgICAgICMgYW5kIGZ1cnRoZXJtb3JlIGNhbm5vdCBoYW5kbGUgJ3wnICcmJyAnKCcgJyknIGluIHNjYW4gc2V0cyAKLSAgICAgICMgYXQgYWxsLCBzbyB3ZSBzcGVjaWZ5IHRoZW0gc2VwYXJhdGVseS4KLSAgICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCWxhc3Rhcmc9IlwiJGxhc3RhcmdcIiIKLQk7OwotICAgICAgZXNhYwotCi0gICAgICBiYXNlX2NvbXBpbGU9IiRiYXNlX2NvbXBpbGUgJGxhc3RhcmciCisgICAgICBmdW5jX2FwcGVuZF9xdW90ZWQgYmFzZV9jb21waWxlICIkbGFzdGFyZyIKICAgICBkb25lICMgZm9yIGFyZwogCiAgICAgY2FzZSAkYXJnX21vZGUgaW4KICAgICBhcmcpCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB5b3UgbXVzdCBzcGVjaWZ5IGFuIGFyZ3VtZW50IGZvciAtWGNvbXBpbGUiCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYW4gYXJndW1lbnQgZm9yIC1YY29tcGlsZSIKICAgICAgIDs7CiAgICAgdGFyZ2V0KQotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhIHRhcmdldCB3aXRoIFxgLW8nIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKyAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgInlvdSBtdXN0IHNwZWNpZnkgYSB0YXJnZXQgd2l0aCBcYC1vJyIKICAgICAgIDs7CiAgICAgKikKICAgICAgICMgR2V0IHRoZSBuYW1lIG9mIHRoZSBsaWJyYXJ5IG9iamVjdC4KLSAgICAgIFsgLXogIiRsaWJvYmoiIF0gJiYgbGlib2JqPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisgICAgICB0ZXN0IC16ICIkbGlib2JqIiAmJiB7CisJZnVuY19iYXNlbmFtZSAiJHNyY2ZpbGUiCisJbGlib2JqPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB9CiAgICAgICA7OwogICAgIGVzYWMKIAogICAgICMgUmVjb2duaXplIHNldmVyYWwgZGlmZmVyZW50IGZpbGUgc3VmZml4ZXMuCiAgICAgIyBJZiB0aGUgdXNlciBzcGVjaWZpZXMgLW8gZmlsZS5vLCBpdCBpcyByZXBsYWNlZCB3aXRoIGZpbGUubG8KLSAgICB4Zm9ybT0nW2NDRlNpZm1zb10nCiAgICAgY2FzZSAkbGlib2JqIGluCi0gICAgKi5hZGEpIHhmb3JtPWFkYSA7OwotICAgICouYWRiKSB4Zm9ybT1hZGIgOzsKLSAgICAqLmFkcykgeGZvcm09YWRzIDs7Ci0gICAgKi5hc20pIHhmb3JtPWFzbSA7OwotICAgICouYysrKSB4Zm9ybT1jKysgOzsKLSAgICAqLmNjKSB4Zm9ybT1jYyA7OwotICAgICouaWkpIHhmb3JtPWlpIDs7Ci0gICAgKi5jbGFzcykgeGZvcm09Y2xhc3MgOzsKLSAgICAqLmNwcCkgeGZvcm09Y3BwIDs7Ci0gICAgKi5jeHgpIHhmb3JtPWN4eCA7OwotICAgICouW2ZGXVswOV0/KSB4Zm9ybT1bZkZdWzA5XS4gOzsKLSAgICAqLmZvcikgeGZvcm09Zm9yIDs7Ci0gICAgKi5qYXZhKSB4Zm9ybT1qYXZhIDs7Ci0gICAgKi5vYmopIHhmb3JtPW9iaiA7OwotICAgICouc3gpIHhmb3JtPXN4IDs7CisgICAgKi5bY0NGU2lmbXNvXSB8IFwKKyAgICAqLmFkYSB8ICouYWRiIHwgKi5hZHMgfCAqLmFzbSB8IFwKKyAgICAqLmMrKyB8ICouY2MgfCAqLmlpIHwgKi5jbGFzcyB8ICouY3BwIHwgKi5jeHggfCBcCisgICAgKi5bZkZdWzA5XT8gfCAqLmZvciB8ICouamF2YSB8ICoub2JqIHwgKi5zeCB8ICouY3UgfCAqLmN1cCkKKyAgICAgIGZ1bmNfeGZvcm0gIiRsaWJvYmoiCisgICAgICBsaWJvYmo9JGZ1bmNfeGZvcm1fcmVzdWx0CisgICAgICA7OwogICAgIGVzYWMKIAotICAgIGxpYm9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICJzL1wuJHhmb3JtJC8ubG8vImAKLQogICAgIGNhc2UgJGxpYm9iaiBpbgotICAgICoubG8pIG9iaj1gJGVjaG8gIlgkbGlib2JqIiB8ICRYc2VkIC1lICIkbG8ybyJgIDs7CisgICAgKi5sbykgZnVuY19sbzJvICIkbGlib2JqIjsgb2JqPSRmdW5jX2xvMm9fcmVzdWx0IDs7CiAgICAgKikKLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgbmFtZSBvZiBsaWJyYXJ5IG9iamVjdCBmcm9tIFxgJGxpYm9iaiciIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorICAgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBuYW1lIG9mIGxpYnJhcnkgb2JqZWN0IGZyb20gXGAkbGlib2JqJyIKICAgICAgIDs7CiAgICAgZXNhYwogCkBAIC04MTEsNyArMjA3NiwxNSBAQAogCiAgICAgZm9yIGFyZyBpbiAkbGF0ZXI7IGRvCiAgICAgICBjYXNlICRhcmcgaW4KKyAgICAgIC1zaGFyZWQpCisJdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgIT0geWVzICYmIFwKKwkgIGZ1bmNfZmF0YWxfY29uZmlndXJhdGlvbiAiY2FuIG5vdCBidWlsZCBhIHNoYXJlZCBsaWJyYXJ5IgorCWJ1aWxkX29sZF9saWJzPW5vCisJY29udGludWUKKwk7OworCiAgICAgICAtc3RhdGljKQorCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwogCWJ1aWxkX29sZF9saWJzPXllcwogCWNvbnRpbnVlCiAJOzsKQEAgLTgyOCwyOCArMjEwMSwxNyBAQAogICAgICAgZXNhYwogICAgIGRvbmUKIAotICAgIHFsaWJvYmo9YCRlY2hvICJYJGxpYm9iaiIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgY2FzZSAkcWxpYm9iaiBpbgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JcWxpYm9iaj0iXCIkcWxpYm9ialwiIiA7OwotICAgIGVzYWMKLSAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkcWxpYm9iaiIgXAotCSYmICRlY2hvICJYJGxpYm9iaiIgfCBncmVwICdbXX4jXip7fTs8Pj8iJyInIicgCSYoKXxgJFtdJyBcCi0JJiYgJGVjaG8gIiRtb2RlbmFtZTogbGlib2JqIG5hbWUgXGAkbGlib2JqJyBtYXkgbm90IGNvbnRhaW4gc2hlbGwgc3BlY2lhbCBjaGFyYWN0ZXJzLiIKLSAgICBvYmpuYW1lPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLSAgICB4ZGlyPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLSAgICBpZiB0ZXN0ICJYJHhkaXIiID0gIlgkb2JqIjsgdGhlbgotICAgICAgeGRpcj0KLSAgICBlbHNlCi0gICAgICB4ZGlyPSR4ZGlyLwotICAgIGZpCisgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGxpYm9iaiIKKyAgICB0ZXN0ICJYJGxpYm9iaiIgIT0gIlgkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiIFwKKyAgICAgICYmICRFQ0hPICJYJGxpYm9iaiIgfCAkR1JFUCAnW11+I14qe307PD4/IiciJyInCSAmKCl8YCRbXScgXAorICAgICAgJiYgZnVuY193YXJuaW5nICJsaWJvYmogbmFtZSBcYCRsaWJvYmonIG1heSBub3QgY29udGFpbiBzaGVsbCBzcGVjaWFsIGNoYXJhY3RlcnMuIgorICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRvYmoiICIvIiAiIgorICAgIG9iam5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKyAgICB4ZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKICAgICBsb2JqPSR7eGRpcn0kb2JqZGlyLyRvYmpuYW1lCiAKLSAgICBpZiB0ZXN0IC16ICIkYmFzZV9jb21waWxlIjsgdGhlbgotICAgICAgJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhIGNvbXBpbGF0aW9uIGNvbW1hbmQiIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKKyAgICB0ZXN0IC16ICIkYmFzZV9jb21waWxlIiAmJiBcCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYSBjb21waWxhdGlvbiBjb21tYW5kIgogCiAgICAgIyBEZWxldGUgYW55IGxlZnRvdmVyIGxpYnJhcnkgb2JqZWN0cy4KICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCkBAIC04NTgsMTIgKzIxMjAsOSBAQAogICAgICAgcmVtb3ZlbGlzdD0iJGxvYmogJGxpYm9iaiAke2xpYm9ian1UIgogICAgIGZpCiAKLSAgICAkcnVuICRybSAkcmVtb3ZlbGlzdAotICAgIHRyYXAgIiRydW4gJHJtICRyZW1vdmVsaXN0OyBleGl0ICRFWElUX0ZBSUxVUkUiIDEgMiAxNQotCiAgICAgIyBPbiBDeWd3aW4gdGhlcmUncyBubyAicmVhbCIgUElDIGZsYWcgc28gd2UgbXVzdCBidWlsZCBib3RoIG9iamVjdCB0eXBlcwogICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBvczIqKQorICAgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCiAgICAgICBwaWNfbW9kZT1kZWZhdWx0CiAgICAgICA7OwogICAgIGVzYWMKQEAgLTg3NSwxMCArMjEzNCw4IEBACiAgICAgIyBDYWxjdWxhdGUgdGhlIGZpbGVuYW1lIG9mIHRoZSBvdXRwdXQgb2JqZWN0IGlmIGNvbXBpbGVyIGRvZXMKICAgICAjIG5vdCBzdXBwb3J0IC1vIHdpdGggLWMKICAgICBpZiB0ZXN0ICIkY29tcGlsZXJfY19vIiA9IG5vOyB0aGVuCi0gICAgICBvdXRwdXRfb2JqPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJScgLWUgJ3MlXC5bXi5dKiQlJSdgLiR7b2JqZXh0fQorICAgICAgb3V0cHV0X29iaj1gJEVDSE8gIiRzcmNmaWxlIiB8ICRTRUQgJ3MlXi4qLyUlOyBzJVwuW14uXSokJSUnYC4ke29iamV4dH0KICAgICAgIGxvY2tmaWxlPSIkb3V0cHV0X29iai5sb2NrIgotICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJG91dHB1dF9vYmogJGxvY2tmaWxlIgotICAgICAgdHJhcCAiJHJ1biAkcm0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CiAgICAgZWxzZQogICAgICAgb3V0cHV0X29iaj0KICAgICAgIG5lZWRfbG9ja3M9bm8KQEAgLTg4OCwxMyArMjE0NSwxMyBAQAogICAgICMgTG9jayB0aGlzIGNyaXRpY2FsIHNlY3Rpb24gaWYgaXQgaXMgbmVlZGVkCiAgICAgIyBXZSB1c2UgdGhpcyBzY3JpcHQgZmlsZSB0byBtYWtlIHRoZSBsaW5rLCBpdCBhdm9pZHMgY3JlYXRpbmcgYSBuZXcgZmlsZQogICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiA9IHllczsgdGhlbgotICAgICAgdW50aWwgJHJ1biBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KLQkkc2hvdyAiV2FpdGluZyBmb3IgJGxvY2tmaWxlIHRvIGJlIHJlbW92ZWQiCisgICAgICB1bnRpbCAkb3B0X2RyeV9ydW4gfHwgbG4gIiRwcm9ncGF0aCIgIiRsb2NrZmlsZSIgMj4vZGV2L251bGw7IGRvCisJZnVuY19lY2hvICJXYWl0aW5nIGZvciAkbG9ja2ZpbGUgdG8gYmUgcmVtb3ZlZCIKIAlzbGVlcCAyCiAgICAgICBkb25lCiAgICAgZWxpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgPSB3YXJuOyB0aGVuCiAgICAgICBpZiB0ZXN0IC1mICIkbG9ja2ZpbGUiOyB0aGVuCi0JJGVjaG8gIlwKKwkkRUNITyAiXAogKioqIEVSUk9SLCAkbG9ja2ZpbGUgZXhpc3RzIGFuZCBjb250YWluczoKIGBjYXQgJGxvY2tmaWxlIDI+L2Rldi9udWxsYAogCkBAIC05MDUsMzQgKzIxNjIsMjEgQEAKIGF2b2lkIHBhcmFsbGVsIGJ1aWxkcyAobWFrZSAtaikgaW4gdGhpcyBwbGF0Zm9ybSwgb3IgZ2V0IGEgYmV0dGVyCiBjb21waWxlci4iCiAKLQkkcnVuICRybSAkcmVtb3ZlbGlzdAorCSRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3QKIAlleGl0ICRFWElUX0ZBSUxVUkUKICAgICAgIGZpCi0gICAgICAkZWNobyAiJHNyY2ZpbGUiID4gIiRsb2NrZmlsZSIKKyAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkb3V0cHV0X29iaiIKKyAgICAgICRFQ0hPICIkc3JjZmlsZSIgPiAiJGxvY2tmaWxlIgogICAgIGZpCiAKLSAgICBpZiB0ZXN0IC1uICIkZml4X3NyY2ZpbGVfcGF0aCI7IHRoZW4KLSAgICAgIGV2YWwgc3JjZmlsZT1cIiRmaXhfc3JjZmlsZV9wYXRoXCIKLSAgICBmaQotICAgIHFzcmNmaWxlPWAkZWNobyAiWCRzcmNmaWxlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICBjYXNlICRxc3JjZmlsZSBpbgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0gICAgICBxc3JjZmlsZT0iXCIkcXNyY2ZpbGVcIiIgOzsKLSAgICBlc2FjCisgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAorICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkbG9ja2ZpbGUiCisgICAgdHJhcCAnJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkRVhJVF9GQUlMVVJFJyAxIDIgMTUKIAotICAgICRydW4gJHJtICIkbGlib2JqIiAiJHtsaWJvYmp9VCIKLQotICAgICMgQ3JlYXRlIGEgbGlidG9vbCBvYmplY3QgZmlsZSAoYW5hbG9nb3VzIHRvIGEgIi5sYSIgZmlsZSksCi0gICAgIyBidXQgZG9uJ3QgY3JlYXRlIGl0IGlmIHdlJ3JlIGRvaW5nIGEgZHJ5IHJ1bi4KLSAgICB0ZXN0IC16ICIkcnVuIiAmJiBjYXQgPiAke2xpYm9ian1UIDw8RU9GCi0jICRsaWJvYmogLSBhIGxpYnRvb2wgb2JqZWN0IGZpbGUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAotIwotIyBQbGVhc2UgRE8gTk9UIGRlbGV0ZSB0aGlzIGZpbGUhCi0jIEl0IGlzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyB0aGUgbGlicmFyeS4KLQotIyBOYW1lIG9mIHRoZSBQSUMgb2JqZWN0LgotRU9GCisgICAgZnVuY190b190b29sX2ZpbGUgIiRzcmNmaWxlIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICAgIHNyY2ZpbGU9JGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRzcmNmaWxlIgorICAgIHFzcmNmaWxlPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdAogCiAgICAgIyBPbmx5IGJ1aWxkIGEgUElDIG9iamVjdCBpZiB3ZSBhcmUgYnVpbGRpbmcgbGlidG9vbCBsaWJyYXJpZXMuCiAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXM7IHRoZW4KQEAgLTk0NiwzMiArMjE5MCwxOSBAQAogCWNvbW1hbmQ9IiRiYXNlX2NvbXBpbGUgJHFzcmNmaWxlIgogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAhIC1kICIke3hkaXJ9JG9iamRpciI7IHRoZW4KLQkkc2hvdyAiJG1rZGlyICR7eGRpcn0kb2JqZGlyIgotCSRydW4gJG1rZGlyICR7eGRpcn0kb2JqZGlyCi0JZXhpdF9zdGF0dXM9JD8KLQlpZiB0ZXN0ICIkZXhpdF9zdGF0dXMiIC1uZSAwICYmIHRlc3QgISAtZCAiJHt4ZGlyfSRvYmpkaXIiOyB0aGVuCi0JICBleGl0ICRleGl0X3N0YXR1cwotCWZpCi0gICAgICBmaQorICAgICAgZnVuY19ta2Rpcl9wICIkeGRpciRvYmpkaXIiCiAKICAgICAgIGlmIHRlc3QgLXogIiRvdXRwdXRfb2JqIjsgdGhlbgogCSMgUGxhY2UgUElDIG9iamVjdHMgaW4gJG9iamRpcgotCWNvbW1hbmQ9IiRjb21tYW5kIC1vICRsb2JqIgorCWZ1bmNfYXBwZW5kIGNvbW1hbmQgIiAtbyAkbG9iaiIKICAgICAgIGZpCiAKLSAgICAgICRydW4gJHJtICIkbG9iaiIgIiRvdXRwdXRfb2JqIgotCi0gICAgICAkc2hvdyAiJGNvbW1hbmQiCi0gICAgICBpZiAkcnVuIGV2YWwgJGx0X2VudiAiJGNvbW1hbmQiOyB0aGVuIDoKLSAgICAgIGVsc2UKLQl0ZXN0IC1uICIkb3V0cHV0X29iaiIgJiYgJHJ1biAkcm0gJHJlbW92ZWxpc3QKLQlleGl0ICRFWElUX0ZBSUxVUkUKLSAgICAgIGZpCisgICAgICBmdW5jX3Nob3dfZXZhbF9sb2NhbGUgIiRjb21tYW5kIglcCisgICAgICAgICAgJ3Rlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKIAogICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgogCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgotCSRlY2hvICJcCisJJEVDSE8gIlwKICoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgogYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCiAKQEAgLTk4NSw2NSArMjIxNiw0MiBAQAogYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKIGNvbXBpbGVyLiIKIAotCSRydW4gJHJtICRyZW1vdmVsaXN0CisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAogCWV4aXQgJEVYSVRfRkFJTFVSRQogICAgICAgZmkKIAogICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQsIHRoZW4gZ28gb24gdG8gY29tcGlsZSB0aGUgbmV4dCBvbmUKICAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJGxvYmoiOyB0aGVuCi0JJHNob3cgIiRtdiAkb3V0cHV0X29iaiAkbG9iaiIKLQlpZiAkcnVuICRtdiAkb3V0cHV0X29iaiAkbG9iajsgdGhlbiA6Ci0JZWxzZQotCSAgZXJyb3I9JD8KLQkgICRydW4gJHJtICRyZW1vdmVsaXN0Ci0JICBleGl0ICRlcnJvcgotCWZpCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkbG9iaiInIFwKKwkgICdlcnJvcj0kPzsgJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdDsgZXhpdCAkZXJyb3InCiAgICAgICBmaQogCi0gICAgICAjIEFwcGVuZCB0aGUgbmFtZSBvZiB0aGUgUElDIG9iamVjdCB0byB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KLSAgICAgIHRlc3QgLXogIiRydW4iICYmIGNhdCA+PiAke2xpYm9ian1UIDw8RU9GCi1waWNfb2JqZWN0PSckb2JqZGlyLyRvYmpuYW1lJwotCi1FT0YKLQogICAgICAgIyBBbGxvdyBlcnJvciBtZXNzYWdlcyBvbmx5IGZyb20gdGhlIGZpcnN0IGNvbXBpbGF0aW9uLgogICAgICAgaWYgdGVzdCAiJHN1cHByZXNzX29wdCIgPSB5ZXM7IHRoZW4KLSAgICAgICAgc3VwcHJlc3Nfb3V0cHV0PScgPi9kZXYvbnVsbCAyPiYxJworCXN1cHByZXNzX291dHB1dD0nID4vZGV2L251bGwgMj4mMScKICAgICAgIGZpCi0gICAgZWxzZQotICAgICAgIyBObyBQSUMgb2JqZWN0IHNvIGluZGljYXRlIGl0IGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGxpYnRvb2wKLSAgICAgICMgb2JqZWN0IGZpbGUuCi0gICAgICB0ZXN0IC16ICIkcnVuIiAmJiBjYXQgPj4gJHtsaWJvYmp9VCA8PEVPRgotcGljX29iamVjdD1ub25lCi0KLUVPRgogICAgIGZpCiAKICAgICAjIE9ubHkgYnVpbGQgYSBwb3NpdGlvbi1kZXBlbmRlbnQgb2JqZWN0IGlmIHdlIGJ1aWxkIG9sZCBsaWJyYXJpZXMuCiAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgogICAgICAgaWYgdGVzdCAiJHBpY19tb2RlIiAhPSB5ZXM7IHRoZW4KIAkjIERvbid0IGJ1aWxkIFBJQyBjb2RlCi0JY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUiCisJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUkcGllX2ZsYWciCiAgICAgICBlbHNlCiAJY29tbWFuZD0iJGJhc2VfY29tcGlsZSAkcXNyY2ZpbGUgJHBpY19mbGFnIgogICAgICAgZmkKICAgICAgIGlmIHRlc3QgIiRjb21waWxlcl9jX28iID0geWVzOyB0aGVuCi0JY29tbWFuZD0iJGNvbW1hbmQgLW8gJG9iaiIKKwlmdW5jX2FwcGVuZCBjb21tYW5kICIgLW8gJG9iaiIKICAgICAgIGZpCiAKICAgICAgICMgU3VwcHJlc3MgY29tcGlsZXIgb3V0cHV0IGlmIHdlIGFscmVhZHkgZGlkIGEgUElDIGNvbXBpbGF0aW9uLgotICAgICAgY29tbWFuZD0iJGNvbW1hbmQkc3VwcHJlc3Nfb3V0cHV0IgotICAgICAgJHJ1biAkcm0gIiRvYmoiICIkb3V0cHV0X29iaiIKLSAgICAgICRzaG93ICIkY29tbWFuZCIKLSAgICAgIGlmICRydW4gZXZhbCAkbHRfZW52ICIkY29tbWFuZCI7IHRoZW4gOgotICAgICAgZWxzZQotCSRydW4gJHJtICRyZW1vdmVsaXN0Ci0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQorICAgICAgZnVuY19hcHBlbmQgY29tbWFuZCAiJHN1cHByZXNzX291dHB1dCIKKyAgICAgIGZ1bmNfc2hvd19ldmFsX2xvY2FsZSAiJGNvbW1hbmQiIFwKKyAgICAgICAgJyRvcHRfZHJ5X3J1biB8fCAkUk0gJHJlbW92ZWxpc3Q7IGV4aXQgJEVYSVRfRkFJTFVSRScKIAogICAgICAgaWYgdGVzdCAiJG5lZWRfbG9ja3MiID0gd2FybiAmJgogCSB0ZXN0ICJYYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgIiAhPSAiWCRzcmNmaWxlIjsgdGhlbgotCSRlY2hvICJcCisJJEVDSE8gIlwKICoqKiBFUlJPUiwgJGxvY2tmaWxlIGNvbnRhaW5zOgogYGNhdCAkbG9ja2ZpbGUgMj4vZGV2L251bGxgCiAKQEAgLTEwNTcsNTMgKzIyNjUsMjgyNCBAQAogYXZvaWQgcGFyYWxsZWwgYnVpbGRzIChtYWtlIC1qKSBpbiB0aGlzIHBsYXRmb3JtLCBvciBnZXQgYSBiZXR0ZXIKIGNvbXBpbGVyLiIKIAotCSRydW4gJHJtICRyZW1vdmVsaXN0CisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkcmVtb3ZlbGlzdAogCWV4aXQgJEVYSVRfRkFJTFVSRQogICAgICAgZmkKIAogICAgICAgIyBKdXN0IG1vdmUgdGhlIG9iamVjdCBpZiBuZWVkZWQKICAgICAgIGlmIHRlc3QgLW4gIiRvdXRwdXRfb2JqIiAmJiB0ZXN0ICJYJG91dHB1dF9vYmoiICE9ICJYJG9iaiI7IHRoZW4KLQkkc2hvdyAiJG12ICRvdXRwdXRfb2JqICRvYmoiCi0JaWYgJHJ1biAkbXYgJG91dHB1dF9vYmogJG9iajsgdGhlbiA6Ci0JZWxzZQotCSAgZXJyb3I9JD8KLQkgICRydW4gJHJtICRyZW1vdmVsaXN0Ci0JICBleGl0ICRlcnJvcgotCWZpCisJZnVuY19zaG93X2V2YWwgJyRNViAiJG91dHB1dF9vYmoiICIkb2JqIicgXAorCSAgJ2Vycm9yPSQ/OyAkb3B0X2RyeV9ydW4gfHwgJFJNICRyZW1vdmVsaXN0OyBleGl0ICRlcnJvcicKICAgICAgIGZpCi0KLSAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBub24tUElDIG9iamVjdCB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KLSAgICAgICMgT25seSBhcHBlbmQgaWYgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUgZXhpc3RzLgotICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKLSMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QuCi1ub25fcGljX29iamVjdD0nJG9iam5hbWUnCi0KLUVPRgotICAgIGVsc2UKLSAgICAgICMgQXBwZW5kIHRoZSBuYW1lIG9mIHRoZSBub24tUElDIG9iamVjdCB0aGUgbGlidG9vbCBvYmplY3QgZmlsZS4KLSAgICAgICMgT25seSBhcHBlbmQgaWYgdGhlIGxpYnRvb2wgb2JqZWN0IGZpbGUgZXhpc3RzLgotICAgICAgdGVzdCAteiAiJHJ1biIgJiYgY2F0ID4+ICR7bGlib2JqfVQgPDxFT0YKLSMgTmFtZSBvZiB0aGUgbm9uLVBJQyBvYmplY3QuCi1ub25fcGljX29iamVjdD1ub25lCi0KLUVPRgogICAgIGZpCiAKLSAgICAkcnVuICRtdiAiJHtsaWJvYmp9VCIgIiR7bGlib2JqfSIKKyAgICAkb3B0X2RyeV9ydW4gfHwgeworICAgICAgZnVuY193cml0ZV9saWJ0b29sX29iamVjdCAiJGxpYm9iaiIgIiRvYmpkaXIvJG9iam5hbWUiICIkb2JqbmFtZSIKIAotICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKLSAgICBpZiB0ZXN0ICIkbmVlZF9sb2NrcyIgIT0gbm87IHRoZW4KLSAgICAgICRydW4gJHJtICIkbG9ja2ZpbGUiCi0gICAgZmkKKyAgICAgICMgVW5sb2NrIHRoZSBjcml0aWNhbCBzZWN0aW9uIGlmIGl0IHdhcyBsb2NrZWQKKyAgICAgIGlmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorCXJlbW92ZWxpc3Q9JGxvY2tmaWxlCisgICAgICAgICRSTSAiJGxvY2tmaWxlIgorICAgICAgZmkKKyAgICB9CiAKICAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKworJG9wdF9oZWxwIHx8IHsKKyAgdGVzdCAiJG9wdF9tb2RlIiA9IGNvbXBpbGUgJiYgZnVuY19tb2RlX2NvbXBpbGUgJHsxKyIkQCJ9Cit9CisKK2Z1bmNfbW9kZV9oZWxwICgpCit7CisgICAgIyBXZSBuZWVkIHRvIGRpc3BsYXkgaGVscCBmb3IgZWFjaCBvZiB0aGUgbW9kZXMuCisgICAgY2FzZSAkb3B0X21vZGUgaW4KKyAgICAgICIiKQorICAgICAgICAjIEdlbmVyaWMgaGVscCBpcyBleHRyYWN0ZWQgZnJvbSB0aGUgdXNhZ2UgY29tbWVudHMKKyAgICAgICAgIyBhdCB0aGUgc3RhcnQgb2YgdGhpcyBmaWxlLgorICAgICAgICBmdW5jX2hlbHAKKyAgICAgICAgOzsKKworICAgICAgY2xlYW4pCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jbGVhbiBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBmaWxlcyBmcm9tIHRoZSBidWlsZCBkaXJlY3RvcnkuCisKK1JNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQorKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAordG8gUk0uCisKK0lmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIG9iamVjdCBvciBwcm9ncmFtLCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQKK3dpdGggaXQgYXJlIGRlbGV0ZWQuIE90aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgY29tcGlsZSkKKyAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1jb21waWxlIENPTVBJTEUtQ09NTUFORC4uLiBTT1VSQ0VGSUxFCisKK0NvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBsaWJyYXJ5IG9iamVjdC4KKworVGhpcyBtb2RlIGFjY2VwdHMgdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIG9wdGlvbnM6CisKKyAgLW8gT1VUUFVULUZJTEUgICAgc2V0IHRoZSBvdXRwdXQgZmlsZSBuYW1lIHRvIE9VVFBVVC1GSUxFCisgIC1uby1zdXBwcmVzcyAgICAgIGRvIG5vdCBzdXBwcmVzcyBjb21waWxlciBvdXRwdXQgZm9yIG11bHRpcGxlIHBhc3NlcworICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGQgUElDIG9iamVjdHMgb25seQorICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGQgbm9uLVBJQyBvYmplY3RzIG9ubHkKKyAgLXNoYXJlZCAgICAgICAgICAgZG8gbm90IGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKKyAgLXN0YXRpYyAgICAgICAgICAgb25seSBidWlsZCBhIFxgLm8nIGZpbGUgc3VpdGFibGUgZm9yIHN0YXRpYyBsaW5raW5nCisgIC1XYyxGTEFHICAgICAgICAgIHBhc3MgRkxBRyBkaXJlY3RseSB0byB0aGUgY29tcGlsZXIKKworQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKK2Zyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCisKK1RoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQorU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCitsaWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCisgICAgICAgIDs7CisKKyAgICAgIGV4ZWN1dGUpCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCisKK0F1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgorCitUaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKKworICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAorCitUaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCitmbGFncy4KKworSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAoraW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5CitkaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KKworVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCisgICAgICAgIDs7CisKKyAgICAgIGZpbmlzaCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgorCitDb21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgorCitFYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgorCitUaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKK3RoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgorICAgICAgICA7OworCisgICAgICBpbnN0YWxsKQorICAgICAgICAkRUNITyBcCisiVXNhZ2U6ICRwcm9nbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KKworSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCisKK0lOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQorZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCisKK1RoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBJTlNUQUxMLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgorCisgIC1pbnN0LXByZWZpeC1kaXIgUFJFRklYLURJUiAgVXNlIFBSRUZJWC1ESVIgYXMgYSBzdGFnaW5nIGFyZWEgZm9yIGluc3RhbGxhdGlvbgorCitUaGUgcmVzdCBvZiB0aGUgY29tcG9uZW50cyBhcmUgaW50ZXJwcmV0ZWQgYXMgYXJndW1lbnRzIHRvIHRoYXQgY29tbWFuZCAob25seQorQlNELWNvbXBhdGlibGUgaW5zdGFsbCBvcHRpb25zIGFyZSByZWNvZ25pemVkKS4iCisgICAgICAgIDs7CisKKyAgICAgIGxpbmspCisgICAgICAgICRFQ0hPIFwKKyJVc2FnZTogJHByb2duYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1saW5rIExJTkstQ09NTUFORC4uLgorCitMaW5rIG9iamVjdCBmaWxlcyBvciBsaWJyYXJpZXMgdG9nZXRoZXIgdG8gZm9ybSBhbm90aGVyIGxpYnJhcnksIG9yIHRvCitjcmVhdGUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLgorCitMSU5LLUNPTU1BTkQgaXMgYSBjb21tYW5kIHVzaW5nIHRoZSBDIGNvbXBpbGVyIHRoYXQgeW91IHdvdWxkIHVzZSB0byBjcmVhdGUKK2EgcHJvZ3JhbSBmcm9tIHNldmVyYWwgb2JqZWN0IGZpbGVzLgorCitUaGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb2YgTElOSy1DT01NQU5EIGFyZSB0cmVhdGVkIHNwZWNpYWxseToKKworICAtYWxsLXN0YXRpYyAgICAgICBkbyBub3QgZG8gYW55IGR5bmFtaWMgbGlua2luZyBhdCBhbGwKKyAgLWF2b2lkLXZlcnNpb24gICAgZG8gbm90IGFkZCBhIHZlcnNpb24gc3VmZml4IGlmIHBvc3NpYmxlCisgIC1iaW5kaXIgQklORElSICAgIHNwZWNpZnkgcGF0aCB0byBiaW5hcmllcyBkaXJlY3RvcnkgKGZvciBzeXN0ZW1zIHdoZXJlCisgICAgICAgICAgICAgICAgICAgIGxpYnJhcmllcyBtdXN0IGJlIGZvdW5kIGluIHRoZSBQQVRIIHNldHRpbmcgYXQgcnVudGltZSkKKyAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCisgIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCisgIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCisgIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCisgICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQorICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKKyAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCisgIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKKyAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKKyAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCisgIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCisgIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQorICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKKyAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCisgIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCisgIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAorICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCisgIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCisgIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKKyAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKKyAgLXNoYXJlZCAgICAgICAgICAgb25seSBkbyBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKKyAgLXNocmV4dCBTVUZGSVggICAgb3ZlcnJpZGUgdGhlIHN0YW5kYXJkIHNoYXJlZCBsaWJyYXJ5IGZpbGUgZXh0ZW5zaW9uCisgIC1zdGF0aWMgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIHVuaW5zdGFsbGVkIGxpYnRvb2wgbGlicmFyaWVzCisgIC1zdGF0aWMtbGlidG9vbC1saWJzCisgICAgICAgICAgICAgICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIG9mIGxpYnRvb2wgbGlicmFyaWVzCisgIC12ZXJzaW9uLWluZm8gQ1VSUkVOVFs6UkVWSVNJT05bOkFHRV1dCisgICAgICAgICAgICAgICAgICAgIHNwZWNpZnkgbGlicmFyeSB2ZXJzaW9uIGluZm8gW2VhY2ggdmFyaWFibGUgZGVmYXVsdHMgdG8gMF0KKyAgLXdlYWsgTElCTkFNRSAgICAgZGVjbGFyZSB0aGF0IHRoZSB0YXJnZXQgcHJvdmlkZXMgdGhlIExJQk5BTUUgaW50ZXJmYWNlCisgIC1XYyxGTEFHCisgIC1YY29tcGlsZXIgRkxBRyAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGNvbXBpbGVyCisgIC1XbCxGTEFHCisgIC1YbGlua2VyIEZMQUcgICAgIHBhc3MgbGlua2VyLXNwZWNpZmljIEZMQUcgZGlyZWN0bHkgdG8gdGhlIGxpbmtlcgorICAtWENDbGlua2VyIEZMQUcgICBwYXNzIGxpbmstc3BlY2lmaWMgRkxBRyB0byB0aGUgY29tcGlsZXIgZHJpdmVyIChDQykKKworQWxsIG90aGVyIG9wdGlvbnMgKGFyZ3VtZW50cyBiZWdpbm5pbmcgd2l0aCBcYC0nKSBhcmUgaWdub3JlZC4KKworRXZlcnkgb3RoZXIgYXJndW1lbnQgaXMgdHJlYXRlZCBhcyBhIGZpbGVuYW1lLiAgRmlsZXMgZW5kaW5nIGluIFxgLmxhJyBhcmUKK3RyZWF0ZWQgYXMgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMsIG90aGVyIGZpbGVzIGFyZSBzdGFuZGFyZCBvciBsaWJyYXJ5CitvYmplY3QgZmlsZXMuCisKK0lmIHRoZSBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxhJywgdGhlbiBhIGxpYnRvb2wgbGlicmFyeSBpcyBjcmVhdGVkLAorb25seSBsaWJyYXJ5IG9iamVjdHMgKFxgLmxvJyBmaWxlcykgbWF5IGJlIHNwZWNpZmllZCwgYW5kIFxgLXJwYXRoJyBpcworcmVxdWlyZWQsIGV4Y2VwdCB3aGVuIGNyZWF0aW5nIGEgY29udmVuaWVuY2UgbGlicmFyeS4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5hJyBvciBcYC5saWInLCB0aGVuIGEgc3RhbmRhcmQgbGlicmFyeSBpcyBjcmVhdGVkCit1c2luZyBcYGFyJyBhbmQgXGByYW5saWInLCBvciBvbiBXaW5kb3dzIHVzaW5nIFxgbGliJy4KKworSWYgT1VUUFVULUZJTEUgZW5kcyBpbiBcYC5sbycgb3IgXGAuJHtvYmpleHR9JywgdGhlbiBhIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUKK2lzIGNyZWF0ZWQsIG90aGVyd2lzZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gaXMgY3JlYXRlZC4iCisgICAgICAgIDs7CisKKyAgICAgIHVuaW5zdGFsbCkKKyAgICAgICAgJEVDSE8gXAorIlVzYWdlOiAkcHJvZ25hbWUgW09QVElPTl0uLi4gLS1tb2RlPXVuaW5zdGFsbCBSTSBbUk0tT1BUSU9OXS4uLiBGSUxFLi4uCisKK1JlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsYXRpb24gZGlyZWN0b3J5LgorCitSTSBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvZ3JhbSB0byB1c2UgdG8gZGVsZXRlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBlYWNoIEZJTEUKKyh0eXBpY2FsbHkgXGAvYmluL3JtJykuICBSTS1PUFRJT05TIGFyZSBvcHRpb25zIChzdWNoIGFzIFxgLWYnKSB0byBiZSBwYXNzZWQKK3RvIFJNLgorCitJZiBGSUxFIGlzIGEgbGlidG9vbCBsaWJyYXJ5LCBhbGwgdGhlIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBpdCBhcmUgZGVsZXRlZC4KK090aGVyd2lzZSwgb25seSBGSUxFIGl0c2VsZiBpcyBkZWxldGVkIHVzaW5nIFJNLiIKKyAgICAgICAgOzsKKworICAgICAgKikKKyAgICAgICAgZnVuY19mYXRhbF9oZWxwICJpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG9wdF9tb2RlJyIKKyAgICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBlY2hvCisgICAgJEVDSE8gIlRyeSBcYCRwcm9nbmFtZSAtLWhlbHAnIGZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IG90aGVyIG1vZGVzLiIKK30KKworIyBOb3cgdGhhdCB3ZSd2ZSBjb2xsZWN0ZWQgYSBwb3NzaWJsZSAtLW1vZGUgYXJnLCBzaG93IGhlbHAgaWYgbmVjZXNzYXJ5CitpZiAkb3B0X2hlbHA7IHRoZW4KKyAgaWYgdGVzdCAiJG9wdF9oZWxwIiA9IDo7IHRoZW4KKyAgICBmdW5jX21vZGVfaGVscAorICBlbHNlCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwlmdW5jX21vZGVfaGVscAorICAgICAgZG9uZQorICAgIH0gfCBzZWQgLW4gJzFwOyAyLCRzL15Vc2FnZTovICBvcjogL3AnCisgICAgeworICAgICAgZnVuY19oZWxwIG5vZXhpdAorICAgICAgZm9yIG9wdF9tb2RlIGluIGNvbXBpbGUgbGluayBleGVjdXRlIGluc3RhbGwgZmluaXNoIHVuaW5zdGFsbCBjbGVhbjsgZG8KKwllY2hvCisJZnVuY19tb2RlX2hlbHAKKyAgICAgIGRvbmUKKyAgICB9IHwKKyAgICBzZWQgJzFkCisgICAgICAvXldoZW4gcmVwb3J0aW5nLywvXlJlcG9ydC97CisJSAorCWQKKyAgICAgIH0KKyAgICAgICR4CisgICAgICAvaW5mb3JtYXRpb24gYWJvdXQgb3RoZXIgbW9kZXMvZAorICAgICAgL21vcmUgZGV0YWlsZWQgLipNT0RFL2QKKyAgICAgIHMvXlVzYWdlOi4qLS1tb2RlPVwoW14gXSpcKSAuKi9EZXNjcmlwdGlvbiBvZiBcMSBtb2RlOi8nCisgIGZpCisgIGV4aXQgJD8KK2ZpCisKKworIyBmdW5jX21vZGVfZXhlY3V0ZSBhcmcuLi4KK2Z1bmNfbW9kZV9leGVjdXRlICgpCit7CisgICAgJG9wdF9kZWJ1ZworICAgICMgVGhlIGZpcnN0IGFyZ3VtZW50IGlzIHRoZSBjb21tYW5kIG5hbWUuCisgICAgY21kPSIkbm9ub3B0IgorICAgIHRlc3QgLXogIiRjbWQiICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIENPTU1BTkQiCisKKyAgICAjIEhhbmRsZSAtZGxvcGVuIGZsYWdzIGltbWVkaWF0ZWx5LgorICAgIGZvciBmaWxlIGluICRvcHRfZGxvcGVuOyBkbworICAgICAgdGVzdCAtZiAiJGZpbGUiIFwKKwl8fCBmdW5jX2ZhdGFsX2hlbHAgIlxgJGZpbGUnIGlzIG5vdCBhIGZpbGUiCisKKyAgICAgIGRpcj0KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICoubGEpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmaWxlIgorCWZpbGU9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCisJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkZmlsZSIgXAorCSAgfHwgZnVuY19mYXRhbF9oZWxwICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKworCSMgUmVhZCB0aGUgbGlidG9vbCBsaWJyYXJ5LgorCWRsbmFtZT0KKwlsaWJyYXJ5X25hbWVzPQorCWZ1bmNfc291cmNlICIkZmlsZSIKKworCSMgU2tpcCB0aGlzIGxpYnJhcnkgaWYgaXQgY2Fubm90IGJlIGRsb3BlbmVkLgorCWlmIHRlc3QgLXogIiRkbG5hbWUiOyB0aGVuCisJICAjIFdhcm4gaWYgaXQgd2FzIGEgc2hhcmVkIGxpYnJhcnkuCisJICB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYgXAorCSAgICBmdW5jX3dhcm5pbmcgIlxgJGZpbGUnIHdhcyBub3QgbGlua2VkIHdpdGggXGAtZXhwb3J0LWR5bmFtaWMnIgorCSAgY29udGludWUKKwlmaQorCisJZnVuY19kaXJuYW1lICIkZmlsZSIgIiIgIi4iCisJZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKKworCWlmIHRlc3QgLWYgIiRkaXIvJG9iamRpci8kZGxuYW1lIjsgdGhlbgorCSAgZnVuY19hcHBlbmQgZGlyICIvJG9iamRpciIKKwllbHNlCisJICBpZiB0ZXN0ICEgLWYgIiRkaXIvJGRsbmFtZSI7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgXGAkZGxuYW1lJyBpbiBcYCRkaXInIG9yIFxgJGRpci8kb2JqZGlyJyIKKwkgIGZpCisJZmkKKwk7OworCisgICAgICAqLmxvKQorCSMgSnVzdCBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIHRoZSAubG8gZmlsZS4KKwlmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKwlkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCTs7CisKKyAgICAgICopCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG5vbi1saWJ0b29sIGxpYnJhcmllcyBhbmQgb2JqZWN0cyIKKwljb250aW51ZQorCTs7CisgICAgICBlc2FjCisKKyAgICAgICMgR2V0IHRoZSBhYnNvbHV0ZSBwYXRobmFtZS4KKyAgICAgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKKyAgICAgIHRlc3QgLW4gIiRhYnNkaXIiICYmIGRpcj0iJGFic2RpciIKKworICAgICAgIyBOb3cgYWRkIHRoZSBkaXJlY3RvcnkgdG8gc2hsaWJwYXRoX3Zhci4KKyAgICAgIGlmIGV2YWwgInRlc3QgLXogXCJcJCRzaGxpYnBhdGhfdmFyXCIiOyB0aGVuCisJZXZhbCAiJHNobGlicGF0aF92YXI9XCJcJGRpclwiIgorICAgICAgZWxzZQorCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXI6XCQkc2hsaWJwYXRoX3ZhclwiIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHNobGlicGF0aF92YXIKKyAgICAjIHJhdGhlciB0aGFuIHJ1bm5pbmcgdGhlaXIgcHJvZ3JhbXMuCisgICAgbGlidG9vbF9leGVjdXRlX21hZ2ljPSIkbWFnaWMiCisKKyAgICAjIENoZWNrIGlmIGFueSBvZiB0aGUgYXJndW1lbnRzIGlzIGEgd3JhcHBlciBzY3JpcHQuCisgICAgYXJncz0KKyAgICBmb3IgZmlsZQorICAgIGRvCisgICAgICBjYXNlICRmaWxlIGluCisgICAgICAtKiB8ICoubGEgfCAqLmxvICkgOzsKKyAgICAgICopCisJIyBEbyBhIHRlc3QgdG8gc2VlIGlmIHRoaXMgaXMgcmVhbGx5IGEgbGlidG9vbCBwcm9ncmFtLgorCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkZmlsZSI7IHRoZW4KKwkgIGZ1bmNfc291cmNlICIkZmlsZSIKKwkgICMgVHJhbnNmb3JtIGFyZyB0byB3cmFwcGVkIG5hbWUuCisJICBmaWxlPSIkcHJvZ2Rpci8kcHJvZ3JhbSIKKwllbGlmIGZ1bmNfbHR3cmFwcGVyX2V4ZWN1dGFibGVfcCAiJGZpbGUiOyB0aGVuCisJICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgIGZ1bmNfc291cmNlICIkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQiCisJICAjIFRyYW5zZm9ybSBhcmcgdG8gd3JhcHBlZCBuYW1lLgorCSAgZmlsZT0iJHByb2dkaXIvJHByb2dyYW0iCisJZmkKKwk7OworICAgICAgZXNhYworICAgICAgIyBRdW90ZSBhcmd1bWVudHMgKHRvIHByZXNlcnZlIHNoZWxsIG1ldGFjaGFyYWN0ZXJzKS4KKyAgICAgIGZ1bmNfYXBwZW5kX3F1b3RlZCBhcmdzICIkZmlsZSIKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0ICJYJG9wdF9kcnlfcnVuIiA9IFhmYWxzZTsgdGhlbgorICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCisJIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCisJZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgorICAgICAgZmkKKworICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcworICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCisgICAgICBkbworCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCisgICAgICAgICAgICAgICAgJGx0X3Zhcj1cJHNhdmVfJGx0X3ZhcjsgZXhwb3J0ICRsdF92YXIKKwkgICAgICBlbHNlCisJCSRsdF91bnNldCAkbHRfdmFyCisJICAgICAgZmkiCisgICAgICBkb25lCisKKyAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KKyAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgorICAgIGVsc2UKKyAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCisgICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KKwlldmFsICJcJEVDSE8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgorCWVjaG8gImV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKKyAgICAgIGZpCisgICAgICAkRUNITyAiJGNtZCRhcmdzIgorICAgICAgZXhpdCAkRVhJVF9TVUNDRVNTCisgICAgZmkKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGV4ZWN1dGUgJiYgZnVuY19tb2RlX2V4ZWN1dGUgJHsxKyIkQCJ9CisKKworIyBmdW5jX21vZGVfZmluaXNoIGFyZy4uLgorZnVuY19tb2RlX2ZpbmlzaCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBsaWJzPQorICAgIGxpYmRpcnM9CisgICAgYWRtaW5jbWRzPQorCisgICAgZm9yIG9wdCBpbiAiJG5vbm9wdCIgJHsxKyIkQCJ9CisgICAgZG8KKyAgICAgIGlmIHRlc3QgLWQgIiRvcHQiOyB0aGVuCisJZnVuY19hcHBlbmQgbGliZGlycyAiICRvcHQiCisKKyAgICAgIGVsaWYgdGVzdCAtZiAiJG9wdCI7IHRoZW4KKwlpZiBmdW5jX2xhbGliX3Vuc2FmZV9wICIkb3B0IjsgdGhlbgorCSAgZnVuY19hcHBlbmQgbGlicyAiICRvcHQiCisJZWxzZQorCSAgZnVuY193YXJuaW5nICJcYCRvcHQnIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKKwlmaQorCisgICAgICBlbHNlCisJZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBhcmd1bWVudCBcYCRvcHQnIgorICAgICAgZmkKKyAgICBkb25lCisKKyAgICBpZiB0ZXN0IC1uICIkbGlicyI7IHRoZW4KKyAgICAgIGlmIHRlc3QgLW4gIiRsdF9zeXNyb290IjsgdGhlbgorICAgICAgICBzeXNyb290X3JlZ2V4PWAkRUNITyAiJGx0X3N5c3Jvb3QiIHwgJFNFRCAiJHNlZF9tYWtlX2xpdGVyYWxfcmVnZXgiYAorICAgICAgICBzeXNyb290X2NtZD0icy9cKFsgJ11cKSRzeXNyb290X3JlZ2V4L1wxL2c7IgorICAgICAgZWxzZQorICAgICAgICBzeXNyb290X2NtZD0KKyAgICAgIGZpCisKKyAgICAgICMgUmVtb3ZlIHN5c3Jvb3QgcmVmZXJlbmNlcworICAgICAgaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisgICAgICAgIGZvciBsaWIgaW4gJGxpYnM7IGRvCisgICAgICAgICAgZWNobyAicmVtb3ZpbmcgcmVmZXJlbmNlcyB0byAkbHRfc3lzcm9vdCBhbmQgXGA9JyBwcmVmaXhlcyBmcm9tICRsaWIiCisgICAgICAgIGRvbmUKKyAgICAgIGVsc2UKKyAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKyAgICAgICAgZm9yIGxpYiBpbiAkbGliczsgZG8KKwkgIHNlZCAtZSAiJHtzeXNyb290X2NtZH0gcy9cKFsgJ10tW0xSXVwpPS9cMS9nOyBzL1woWyAnXVwpPS9cMS9nIiAkbGliIFwKKwkgICAgPiAkdG1wZGlyL3RtcC1sYQorCSAgbXYgLWYgJHRtcGRpci90bXAtbGEgJGxpYgorCWRvbmUKKyAgICAgICAgJHtSTX1yICIkdG1wZGlyIgorICAgICAgZmkKKyAgICBmaQorCisgICAgaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzJGZpbmlzaF9ldmFsIiAmJiB0ZXN0IC1uICIkbGliZGlycyI7IHRoZW4KKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgorCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkZmluaXNoX2NtZHMiICdhZG1pbmNtZHM9IiRhZG1pbmNtZHMKKyciJGNtZCInIicKKwlmaQorCWlmIHRlc3QgLW4gIiRmaW5pc2hfZXZhbCI7IHRoZW4KKwkgICMgRG8gdGhlIHNpbmdsZSBmaW5pc2hfZXZhbC4KKwkgIGV2YWwgY21kcz1cIiRmaW5pc2hfZXZhbFwiCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJGNtZHMiIHx8IGZ1bmNfYXBwZW5kIGFkbWluY21kcyAiCisgICAgICAgJGNtZHMiCisJZmkKKyAgICAgIGRvbmUKKyAgICBmaQorCisgICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCisgICAgJG9wdF9zaWxlbnQgJiYgZXhpdCAkRVhJVF9TVUNDRVNTCisKKyAgICBpZiB0ZXN0IC1uICIkZmluaXNoX2NtZHMkZmluaXNoX2V2YWwiICYmIHRlc3QgLW4gIiRsaWJkaXJzIjsgdGhlbgorICAgICAgZWNobyAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgICAgIGVjaG8gIkxpYnJhcmllcyBoYXZlIGJlZW4gaW5zdGFsbGVkIGluOiIKKyAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCisJJEVDSE8gIiAgICRsaWJkaXIiCisgICAgICBkb25lCisgICAgICBlY2hvCisgICAgICBlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKKyAgICAgIGVjaG8gImluIGEgZ2l2ZW4gZGlyZWN0b3J5LCBMSUJESVIsIHlvdSBtdXN0IGVpdGhlciB1c2UgbGlidG9vbCwgYW5kIgorICAgICAgZWNobyAic3BlY2lmeSB0aGUgZnVsbCBwYXRobmFtZSBvZiB0aGUgbGlicmFyeSwgb3IgdXNlIHRoZSBcYC1MTElCRElSJyIKKyAgICAgIGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKKyAgICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgorCWVjaG8gIiAgIC0gYWRkIExJQkRJUiB0byB0aGUgXGAkc2hsaWJwYXRoX3ZhcicgZW52aXJvbm1lbnQgdmFyaWFibGUiCisJZWNobyAiICAgICBkdXJpbmcgZXhlY3V0aW9uIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KKwllY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKKwllY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgorCWxpYmRpcj1MSUJESVIKKwlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCisKKwkkRUNITyAiICAgLSB1c2UgdGhlIFxgJGZsYWcnIGxpbmtlciBmbGFnIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLW4gIiRhZG1pbmNtZHMiOyB0aGVuCisJJEVDSE8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgorICAgICAgZmkKKyAgICAgIGlmIHRlc3QgLWYgL2V0Yy9sZC5zby5jb25mOyB0aGVuCisJZWNobyAiICAgLSBoYXZlIHlvdXIgc3lzdGVtIGFkbWluaXN0cmF0b3IgYWRkIExJQkRJUiB0byBcYC9ldGMvbGQuc28uY29uZiciCisgICAgICBmaQorICAgICAgZWNobworCisgICAgICBlY2hvICJTZWUgYW55IG9wZXJhdGluZyBzeXN0ZW0gZG9jdW1lbnRhdGlvbiBhYm91dCBzaGFyZWQgbGlicmFyaWVzIGZvciIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwlzb2xhcmlzMi5bNjc4OV18c29sYXJpczIuMVswLTldKQorCSAgZWNobyAibW9yZSBpbmZvcm1hdGlvbiwgc3VjaCBhcyB0aGUgbGQoMSksIGNybGUoMSkgYW5kIGxkLnNvKDgpIG1hbnVhbCIKKwkgIGVjaG8gInBhZ2VzLiIKKwkgIDs7CisJKikKKwkgIGVjaG8gIm1vcmUgaW5mb3JtYXRpb24sIHN1Y2ggYXMgdGhlIGxkKDEpIGFuZCBsZC5zbyg4KSBtYW51YWwgcGFnZXMuIgorCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgICAgZmkKKyAgICBleGl0ICRFWElUX1NVQ0NFU1MKK30KKwordGVzdCAiJG9wdF9tb2RlIiA9IGZpbmlzaCAmJiBmdW5jX21vZGVfZmluaXNoICR7MSsiJEAifQorCisKKyMgZnVuY19tb2RlX2luc3RhbGwgYXJnLi4uCitmdW5jX21vZGVfaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICAjIFRoZXJlIG1heSBiZSBhbiBvcHRpb25hbCBzaCgxKSBhcmd1bWVudCBhdCB0aGUgYmVnaW5uaW5nIG9mCisgICAgIyBpbnN0YWxsX3Byb2cgKGVzcGVjaWFsbHkgb24gV2luZG93cyBOVCkuCisgICAgaWYgdGVzdCAiJG5vbm9wdCIgPSAiJFNIRUxMIiB8fCB0ZXN0ICIkbm9ub3B0IiA9IC9iaW4vc2ggfHwKKyAgICAgICAjIEFsbG93IHRoZSB1c2Ugb2YgR05VIHNodG9vbCdzIGluc3RhbGwgY29tbWFuZC4KKyAgICAgICBjYXNlICRub25vcHQgaW4gKnNodG9vbCopIDo7OyAqKSBmYWxzZTs7IGVzYWM7IHRoZW4KKyAgICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRub25vcHQiCisgICAgICBpbnN0YWxsX3Byb2c9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCAiCisgICAgICBhcmc9JDEKKyAgICAgIHNoaWZ0CisgICAgZWxzZQorICAgICAgaW5zdGFsbF9wcm9nPQorICAgICAgYXJnPSRub25vcHQKKyAgICBmaQorCisgICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgorICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KKyAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorICAgIGZ1bmNfYXBwZW5kIGluc3RhbGxfcHJvZyAiJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGluc3RhbGxfc2hhcmVkX3Byb2c9JGluc3RhbGxfcHJvZworICAgIGNhc2UgIiAkaW5zdGFsbF9wcm9nICIgaW4KKyAgICAgICpbXFxcIC9dY3BcICopIGluc3RhbGxfY3A9OiA7OworICAgICAgKikgaW5zdGFsbF9jcD1mYWxzZSA7OworICAgIGVzYWMKKworICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KKyAgICBkZXN0PQorICAgIGZpbGVzPQorICAgIG9wdHM9CisgICAgcHJldj0KKyAgICBpbnN0YWxsX3R5cGU9CisgICAgaXNkaXI9bm8KKyAgICBzdHJpcG1lPQorICAgIG5vX21vZGU9OgorICAgIGZvciBhcmcKKyAgICBkbworICAgICAgYXJnMj0KKyAgICAgIGlmIHRlc3QgLW4gIiRkZXN0IjsgdGhlbgorCWZ1bmNfYXBwZW5kIGZpbGVzICIgJGRlc3QiCisJZGVzdD0kYXJnCisJY29udGludWUKKyAgICAgIGZpCisKKyAgICAgIGNhc2UgJGFyZyBpbgorICAgICAgLWQpIGlzZGlyPXllcyA7OworICAgICAgLWYpCisJaWYgJGluc3RhbGxfY3A7IHRoZW4gOjsgZWxzZQorCSAgcHJldj0kYXJnCisJZmkKKwk7OworICAgICAgLWcgfCAtbSB8IC1vKQorCXByZXY9JGFyZworCTs7CisgICAgICAtcykKKwlzdHJpcG1lPSIgLXMiCisJY29udGludWUKKwk7OworICAgICAgLSopCisJOzsKKyAgICAgICopCisJIyBJZiB0aGUgcHJldmlvdXMgb3B0aW9uIG5lZWRlZCBhbiBhcmd1bWVudCwgdGhlbiBza2lwIGl0LgorCWlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgorCSAgaWYgdGVzdCAieCRwcmV2IiA9IHgtbSAmJiB0ZXN0IC1uICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIjsgdGhlbgorCSAgICBhcmcyPSRpbnN0YWxsX292ZXJyaWRlX21vZGUKKwkgICAgbm9fbW9kZT1mYWxzZQorCSAgZmkKKwkgIHByZXY9CisJZWxzZQorCSAgZGVzdD0kYXJnCisJICBjb250aW51ZQorCWZpCisJOzsKKyAgICAgIGVzYWMKKworICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3Byb2cgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBpZiB0ZXN0IC1uICIkYXJnMiI7IHRoZW4KKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnMiIKKyAgICAgIGZpCisgICAgICBmdW5jX2FwcGVuZCBpbnN0YWxsX3NoYXJlZF9wcm9nICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorICAgIGRvbmUKKworICAgIHRlc3QgLXogIiRpbnN0YWxsX3Byb2ciICYmIFwKKyAgICAgIGZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhbiBpbnN0YWxsIHByb2dyYW0iCisKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldicgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgorCisgICAgaWYgdGVzdCAtbiAiJGluc3RhbGxfb3ZlcnJpZGVfbW9kZSIgJiYgJG5vX21vZGU7IHRoZW4KKyAgICAgIGlmICRpbnN0YWxsX2NwOyB0aGVuIDo7IGVsc2UKKwlmdW5jX3F1b3RlX2Zvcl9ldmFsICIkaW5zdGFsbF9vdmVycmlkZV9tb2RlIgorCWZ1bmNfYXBwZW5kIGluc3RhbGxfc2hhcmVkX3Byb2cgIiAtbSAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisgICAgICBmaQorICAgIGZpCisKKyAgICBpZiB0ZXN0IC16ICIkZmlsZXMiOyB0aGVuCisgICAgICBpZiB0ZXN0IC16ICIkZGVzdCI7IHRoZW4KKwlmdW5jX2ZhdGFsX2hlbHAgIm5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIgorICAgICAgZWxzZQorCWZ1bmNfZmF0YWxfaGVscCAieW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIgorICAgICAgZmkKKyAgICBmaQorCisgICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCisgICAgZnVuY19zdHJpcG5hbWUgJycgJy8nICIkZGVzdCIKKyAgICBkZXN0PSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKworICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgorICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKKyAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCisgICAgICBkZXN0ZGlyPSIkZGVzdCIKKyAgICAgIGRlc3RuYW1lPQorICAgIGVsc2UKKyAgICAgIGZ1bmNfZGlybmFtZV9hbmRfYmFzZW5hbWUgIiRkZXN0IiAiIiAiLiIKKyAgICAgIGRlc3RkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorICAgICAgZGVzdG5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKworICAgICAgIyBOb3QgYSBkaXJlY3RvcnksIHNvIGNoZWNrIHRvIHNlZSB0aGF0IHRoZXJlIGlzIG9ubHkgb25lIGZpbGUgc3BlY2lmaWVkLgorICAgICAgc2V0IGR1bW15ICRmaWxlczsgc2hpZnQKKyAgICAgIHRlc3QgIiQjIiAtZ3QgMSAmJiBcCisJZnVuY19mYXRhbF9oZWxwICJcYCRkZXN0JyBpcyBub3QgYSBkaXJlY3RvcnkiCisgICAgZmkKKyAgICBjYXNlICRkZXN0ZGlyIGluCisgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworICAgICopCisgICAgICBmb3IgZmlsZSBpbiAkZmlsZXM7IGRvCisJY2FzZSAkZmlsZSBpbgorCSoubG8pIDs7CisJKikKKwkgIGZ1bmNfZmF0YWxfaGVscCAiXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIKKwkgIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKKyAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KKyAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKKworICAgIHN0YXRpY2xpYnM9CisgICAgZnV0dXJlX2xpYmRpcnM9CisgICAgY3VycmVudF9saWJkaXJzPQorICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KKworICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KKyAgICAgIGNhc2UgJGZpbGUgaW4KKyAgICAgICouJGxpYmV4dCkKKwkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgorCWZ1bmNfYXBwZW5kIHN0YXRpY2xpYnMgIiAkZmlsZSIKKwk7OworCisgICAgICAqLmxhKQorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZmlsZSIKKwlmaWxlPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKKworCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCisJZnVuY19sYWxpYl91bnNhZmVfcCAiJGZpbGUiIFwKKwkgIHx8IGZ1bmNfZmF0YWxfaGVscCAiXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCisJbGlicmFyeV9uYW1lcz0KKwlvbGRfbGlicmFyeT0KKwlyZWxpbmtfY29tbWFuZD0KKwlmdW5jX3NvdXJjZSAiJGZpbGUiCisKKwkjIEFkZCB0aGUgbGliZGlyIHRvIGN1cnJlbnRfbGliZGlycyBpZiBpdCBpcyB0aGUgZGVzdGluYXRpb24uCisJaWYgdGVzdCAiWCRkZXN0ZGlyIiA9ICJYJGxpYmRpciI7IHRoZW4KKwkgIGNhc2UgIiRjdXJyZW50X2xpYmRpcnMgIiBpbgorCSAgKiIgJGxpYmRpciAiKikgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGN1cnJlbnRfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZWxzZQorCSAgIyBOb3RlIHRoZSBsaWJkaXIgYXMgYSBmdXR1cmUgbGliZGlyLgorCSAgY2FzZSAiJGZ1dHVyZV9saWJkaXJzICIgaW4KKwkgICoiICRsaWJkaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmdXR1cmVfbGliZGlycyAiICRsaWJkaXIiIDs7CisJICBlc2FjCisJZmkKKworCWZ1bmNfZGlybmFtZSAiJGZpbGUiICIvIiAiIgorCWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisJZnVuY19hcHBlbmQgZGlyICIkb2JqZGlyIgorCisJaWYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgorCSAgIyBEZXRlcm1pbmUgdGhlIHByZWZpeCB0aGUgdXNlciBoYXMgYXBwbGllZCB0byBvdXIgZnV0dXJlIGRpci4KKwkgIGluc3RfcHJlZml4X2Rpcj1gJEVDSE8gIiRkZXN0ZGlyIiB8ICRTRUQgLWUgInMlJGxpYmRpclwkJSUiYAorCisJICAjIERvbid0IGFsbG93IHRoZSB1c2VyIHRvIHBsYWNlIHVzIG91dHNpZGUgb2Ygb3VyIGV4cGVjdGVkCisJICAjIGxvY2F0aW9uIGIvYyB0aGlzIHByZXZlbnRzIGZpbmRpbmcgZGVwZW5kZW50IGxpYnJhcmllcyB0aGF0CisJICAjIGFyZSBpbnN0YWxsZWQgdG8gdGhlIHNhbWUgcHJlZml4LgorCSAgIyBBdCBwcmVzZW50LCB0aGlzIGNoZWNrIGRvZXNuJ3QgYWZmZWN0IHdpbmRvd3MgLmRsbCdzIHRoYXQKKwkgICMgYXJlIGluc3RhbGxlZCBpbnRvICRsaWJkaXIvLi4vYmluIChjdXJyZW50bHksIHRoYXQgd29ya3MgZmluZSkKKwkgICMgYnV0IGl0J3Mgc29tZXRoaW5nIHRvIGtlZXAgYW4gZXllIG9uLgorCSAgdGVzdCAiJGluc3RfcHJlZml4X2RpciIgPSAiJGRlc3RkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiZXJyb3I6IGNhbm5vdCBpbnN0YWxsIFxgJGZpbGUnIHRvIGEgZGlyZWN0b3J5IG5vdCBlbmRpbmcgaW4gJGxpYmRpciIKKworCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KKwkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiYAorCSAgZWxzZQorCSAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiYAorCSAgZmkKKworCSAgZnVuY193YXJuaW5nICJyZWxpbmtpbmcgXGAkZmlsZSciCisJICBmdW5jX3Nob3dfZXZhbCAiJHJlbGlua19jb21tYW5kIiBcCisJICAgICdmdW5jX2ZhdGFsX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnXCcnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiJworCWZpCisKKwkjIFNlZSB0aGUgbmFtZXMgb2YgdGhlIHNoYXJlZCBsaWJyYXJ5LgorCXNldCBkdW1teSAkbGlicmFyeV9uYW1lczsgc2hpZnQKKwlpZiB0ZXN0IC1uICIkMSI7IHRoZW4KKwkgIHJlYWxuYW1lPSIkMSIKKwkgIHNoaWZ0CisKKwkgIHNyY25hbWU9IiRyZWFsbmFtZSIKKwkgIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCIgJiYgc3JjbmFtZT0iJHJlYWxuYW1lIlQKKworCSAgIyBJbnN0YWxsIHRoZSBzaGFyZWQgbGlicmFyeSBhbmQgYnVpbGQgdGhlIHN5bWxpbmtzLgorCSAgZnVuY19zaG93X2V2YWwgIiRpbnN0YWxsX3NoYXJlZF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiBcCisJICAgICAgJ2V4aXQgJD8nCisJICB0c3RyaXBtZT0iJHN0cmlwbWUiCisJICBjYXNlICRob3N0X29zIGluCisJICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisJICAgIGNhc2UgJHJlYWxuYW1lIGluCisJICAgICouZGxsLmEpCisJICAgICAgdHN0cmlwbWU9IiIKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJICBlc2FjCisJICBpZiB0ZXN0IC1uICIkdHN0cmlwbWUiICYmIHRlc3QgLW4gIiRzdHJpcGxpYiI7IHRoZW4KKwkgICAgZnVuY19zaG93X2V2YWwgIiRzdHJpcGxpYiAkZGVzdGRpci8kcmVhbG5hbWUiICdleGl0ICQ/JworCSAgZmkKKworCSAgaWYgdGVzdCAiJCMiIC1ndCAwOyB0aGVuCisJICAgICMgRGVsZXRlIHRoZSBvbGQgc3ltbGlua3MsIGFuZCBjcmVhdGUgbmV3IG9uZXMuCisJICAgICMgVHJ5IGBsbiAtc2YnIGZpcnN0LCBiZWNhdXNlIHRoZSBgbG4nIGJpbmFyeSBtaWdodCBkZXBlbmQgb24KKwkgICAgIyB0aGUgc3ltbGluayB3ZSByZXBsYWNlISAgU29sYXJpcyAvYmluL2xuIGRvZXMgbm90IHVuZGVyc3RhbmQgLWYsCisJICAgICMgc28gd2UgYWxzbyBuZWVkIHRvIHRyeSBybSAmJiBsbiAtcy4KKwkgICAgZm9yIGxpbmtuYW1lCisJICAgIGRvCisJICAgICAgdGVzdCAiJGxpbmtuYW1lIiAhPSAiJHJlYWxuYW1lIiBcCisJCSYmIGZ1bmNfc2hvd19ldmFsICIoY2QgJGRlc3RkaXIgJiYgeyAkTE5fUyAtZiAkcmVhbG5hbWUgJGxpbmtuYW1lIHx8IHsgJFJNICRsaW5rbmFtZSAmJiAkTE5fUyAkcmVhbG5hbWUgJGxpbmtuYW1lOyB9OyB9KSIKKwkgICAgZG9uZQorCSAgZmkKKworCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgorCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCisJICBmdW5jX2V4ZWN1dGVfY21kcyAiJHBvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworCWZpCisKKwkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KKwlmdW5jX2Jhc2VuYW1lICIkZmlsZSIKKwluYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQorCWZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIgJ2V4aXQgJD8nCisKKwkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCisJdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBmdW5jX2FwcGVuZCBzdGF0aWNsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJOzsKKworICAgICAgKi5sbykKKwkjIEluc3RhbGwgKGkuZS4gY29weSkgYSBsaWJ0b29sIG9iamVjdC4KKworCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCisJY2FzZSAkZGVzdGZpbGUgaW4KKwkqLmxvKQorCSAgZnVuY19sbzJvICIkZGVzdGZpbGUiCisJICBzdGF0aWNkZXN0PSRmdW5jX2xvMm9fcmVzdWx0CisJICA7OworCSouJG9iamV4dCkKKwkgIHN0YXRpY2Rlc3Q9IiRkZXN0ZmlsZSIKKwkgIGRlc3RmaWxlPQorCSAgOzsKKwkqKQorCSAgZnVuY19mYXRhbF9oZWxwICJjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIKKwkgIDs7CisJZXNhYworCisJIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCisJdGVzdCAtbiAiJGRlc3RmaWxlIiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyAkZmlsZSAkZGVzdGZpbGUiICdleGl0ICQ/JworCisJIyBJbnN0YWxsIHRoZSBvbGQgb2JqZWN0IGlmIGVuYWJsZWQuCisJaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllczsgdGhlbgorCSAgIyBEZWR1Y2UgdGhlIG5hbWUgb2YgdGhlIG9sZC1zdHlsZSBvYmplY3QgZmlsZS4KKwkgIGZ1bmNfbG8ybyAiJGZpbGUiCisJICBzdGF0aWNvYmo9JGZ1bmNfbG8yb19yZXN1bHQKKwkgIGZ1bmNfc2hvd19ldmFsICIkaW5zdGFsbF9wcm9nIFwkc3RhdGljb2JqIFwkc3RhdGljZGVzdCIgJ2V4aXQgJD8nCisJZmkKKwlleGl0ICRFWElUX1NVQ0NFU1MKKwk7OworCisgICAgICAqKQorCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KKwlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCisJICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgorCWVsc2UKKwkgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorCSAgZGVzdGZpbGU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCisJZmkKKworCSMgSWYgdGhlIGZpbGUgaXMgbWlzc2luZywgYW5kIHRoZXJlIGlzIGEgLmV4ZSBvbiB0aGUgZW5kLCBzdHJpcCBpdAorCSMgYmVjYXVzZSBpdCBpcyBtb3N0IGxpa2VseSBhIGxpYnRvb2wgc2NyaXB0IHdlIGFjdHVhbGx5IHdhbnQgdG8KKwkjIGluc3RhbGwKKwlzdHJpcHBlZF9leHQ9IiIKKwljYXNlICRmaWxlIGluCisJICAqLmV4ZSkKKwkgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICAgIGZpbGU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKKwkgICAgZmkKKwkgICAgOzsKKwllc2FjCisKKwkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KikKKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICBlbHNlCisJICAgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkZmlsZSIKKwkgICAgICB3cmFwcGVyPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZmkKKwkgICAgOzsKKwkqKQorCSAgICB3cmFwcGVyPSRmaWxlCisJICAgIDs7CisJZXNhYworCWlmIGZ1bmNfbHR3cmFwcGVyX3NjcmlwdF9wICIkd3JhcHBlciI7IHRoZW4KKwkgIG5vdGluc3RfZGVwbGlicz0KKwkgIHJlbGlua19jb21tYW5kPQorCisJICBmdW5jX3NvdXJjZSAiJHdyYXBwZXIiCisKKwkgICMgQ2hlY2sgdGhlIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBoYXZlIGJlZW4gc2V0LgorCSAgdGVzdCAteiAiJGdlbmVyYXRlZF9ieV9saWJ0b29sX3ZlcnNpb24iICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiaW52YWxpZCBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IFxgJHdyYXBwZXInIgorCisJICBmaW5hbGl6ZT15ZXMKKwkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KKwkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgorCSAgICBsaWJkaXI9CisJICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCisJICAgICAgZnVuY19zb3VyY2UgIiRsaWIiCisJICAgIGZpCisJICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkRUNITyAiJGxpYiIgfCAkU0VEICdzJV4uKi8lJWcnYCAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgaWYgdGVzdCAtbiAiJGxpYmRpciIgJiYgdGVzdCAhIC1mICIkbGliZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX3dhcm5pbmcgIlxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIgorCSAgICAgIGZpbmFsaXplPW5vCisJICAgIGZpCisJICBkb25lCisKKwkgIHJlbGlua19jb21tYW5kPQorCSAgZnVuY19zb3VyY2UgIiR3cmFwcGVyIgorCisJICBvdXRwdXRuYW1lPQorCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSBubyAmJiB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllczsgdGhlbgorCSAgICAgICAgdG1wZGlyPWBmdW5jX21rdGVtcGRpcmAKKwkJZnVuY19iYXNlbmFtZSAiJGZpbGUkc3RyaXBwZWRfZXh0IgorCQlmaWxlPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgorCSAgICAgICAgIyBSZXBsYWNlIHRoZSBvdXRwdXQgZmlsZSBzcGVjaWZpY2F0aW9uLgorCSAgICAgICAgcmVsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkcmVsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRuYW1lIiclZydgCisKKwkgICAgICAgICRvcHRfc2lsZW50IHx8IHsKKwkgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkcmVsaW5rX2NvbW1hbmQiCisJCSAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgICAgICAgfQorCSAgICAgICAgaWYgZXZhbCAiJHJlbGlua19jb21tYW5kIjsgdGhlbiA6CisJICAgICAgICAgIGVsc2UKKwkJICBmdW5jX2Vycm9yICJlcnJvcjogcmVsaW5rIFxgJGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmQgYmVmb3JlIGluc3RhbGxpbmcgaXQiCisJCSAgJG9wdF9kcnlfcnVuIHx8ICR7Uk19ciAiJHRtcGRpciIKKwkJICBjb250aW51ZQorCSAgICAgICAgZmkKKwkgICAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IHJlbGluayBcYCRmaWxlJyIKKwkgICAgICBmaQorCSAgICB9CisJICBlbHNlCisJICAgICMgSW5zdGFsbCB0aGUgYmluYXJ5IHRoYXQgd2UgY29tcGlsZWQgZWFybGllci4KKwkgICAgZmlsZT1gJEVDSE8gIiRmaWxlJHN0cmlwcGVkX2V4dCIgfCAkU0VEICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAorCSAgZmkKKwlmaQorCisJIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCisJIyBvbmUgYW55d2F5CisJY2FzZSAkaW5zdGFsbF9wcm9nLCRob3N0IGluCisJKi91c3IvYmluL2luc3RhbGwqLCpjeWd3aW4qKQorCSAgY2FzZSAkZmlsZTokZGVzdGZpbGUgaW4KKwkgICouZXhlOiouZXhlKQorCSAgICAjIHRoaXMgaXMgb2sKKwkgICAgOzsKKwkgICouZXhlOiopCisJICAgIGRlc3RmaWxlPSRkZXN0ZmlsZS5leGUKKwkgICAgOzsKKwkgICo6Ki5leGUpCisJICAgIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJGRlc3RmaWxlIgorCSAgICBkZXN0ZmlsZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZ1wkc3RyaXBtZSBcJGZpbGUgXCRkZXN0ZmlsZSIgJ2V4aXQgJD8nCisJJG9wdF9kcnlfcnVuIHx8IGlmIHRlc3QgLW4gIiRvdXRwdXRuYW1lIjsgdGhlbgorCSAgJHtSTX1yICIkdG1wZGlyIgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICBkb25lCisKKyAgICBmb3IgZmlsZSBpbiAkc3RhdGljbGliczsgZG8KKyAgICAgIGZ1bmNfYmFzZW5hbWUgIiRmaWxlIgorICAgICAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCisgICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCisgICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgorCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGluc3RhbGxfcHJvZyBcJGZpbGUgXCRvbGRsaWIiICdleGl0ICQ/JworCisgICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KKwlmdW5jX3Nob3dfZXZhbCAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIiAnZXhpdCAkPycKKyAgICAgIGZpCisKKyAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0aW5zdGFsbCBjb21tYW5kcy4KKyAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3RpbnN0YWxsX2NtZHMiICdleGl0ICQ/JworICAgIGRvbmUKKworICAgIHRlc3QgLW4gIiRmdXR1cmVfbGliZGlycyIgJiYgXAorICAgICAgZnVuY193YXJuaW5nICJyZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIgorCisgICAgaWYgdGVzdCAtbiAiJGN1cnJlbnRfbGliZGlycyI7IHRoZW4KKyAgICAgICMgTWF5YmUganVzdCBkbyBhIGRyeSBydW4uCisgICAgICAkb3B0X2RyeV9ydW4gJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgorICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJworICAgIGVsc2UKKyAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUworICAgIGZpCit9CisKK3Rlc3QgIiRvcHRfbW9kZSIgPSBpbnN0YWxsICYmIGZ1bmNfbW9kZV9pbnN0YWxsICR7MSsiJEAifQorCisKKyMgZnVuY19nZW5lcmF0ZV9kbHN5bXMgb3V0cHV0bmFtZSBvcmlnaW5hdG9yIHBpY19wCisjIEV4dHJhY3Qgc3ltYm9scyBmcm9tIGRscHJlZmlsZXMgYW5kIGNyZWF0ZSAke291dHB1dG5hbWV9Uy5vIHdpdGgKKyMgYSBkbHByZW9wZW4gc3ltYm9sIHRhYmxlLgorZnVuY19nZW5lcmF0ZV9kbHN5bXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfb3V0cHV0bmFtZT0iJDEiCisgICAgbXlfb3JpZ2luYXRvcj0iJDIiCisgICAgbXlfcGljX3A9IiR7My1ub30iCisgICAgbXlfcHJlZml4PWAkRUNITyAiJG15X29yaWdpbmF0b3IiIHwgc2VkICdzJVteYS16QS1aMC05XSVfJWcnYAorICAgIG15X2Rsc3ltcz0KKworICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisgICAgICBpZiB0ZXN0IC1uICIkTk0iICYmIHRlc3QgLW4gIiRnbG9iYWxfc3ltYm9sX3BpcGUiOyB0aGVuCisJbXlfZGxzeW1zPSIke215X291dHB1dG5hbWV9Uy5jIgorICAgICAgZWxzZQorCWZ1bmNfZXJyb3IgIm5vdCBjb25maWd1cmVkIHRvIGV4dHJhY3QgZ2xvYmFsIHN5bWJvbHMgZnJvbSBkbHByZW9wZW5lZCBmaWxlcyIKKyAgICAgIGZpCisgICAgZmkKKworICAgIGlmIHRlc3QgLW4gIiRteV9kbHN5bXMiOyB0aGVuCisgICAgICBjYXNlICRteV9kbHN5bXMgaW4KKyAgICAgICIiKSA7OworICAgICAgKi5jKQorCSMgRGlzY292ZXIgdGhlIG5saXN0IG9mIGVhY2ggb2YgdGhlIGRsZmlsZXMuCisJbmxpc3Q9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX0ubm0iCisKKwlmdW5jX3Nob3dfZXZhbCAiJFJNICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgorCisJIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KKwlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisKKwkkb3B0X2RyeV9ydW4gfHwgJEVDSE8gPiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIlwKKy8qICRteV9kbHN5bXMgLSBzeW1ib2wgcmVzb2x1dGlvbiB0YWJsZSBmb3IgXGAkbXlfb3V0cHV0bmFtZScgZGxzeW0gZW11bGF0aW9uLiAqLworLyogR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTiAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiBcIkNcIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICgoKF9fR05VQ19fID09IDQpICYmIChfX0dOVUNfTUlOT1JfXyA+PSA0KSkgfHwgKF9fR05VQ19fID4gNCkpCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIGlnbm9yZWQgXCItV3N0cmljdC1wcm90b3R5cGVzXCIKKyNlbmRpZgorCisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxpZiBkZWZpbmVkKF9fb3NmX18pCisvKiBUaGlzIHN5c3RlbSBkb2VzIG5vdCBjb3BlIHdlbGwgd2l0aCByZWxvY2F0aW9ucyBpbiBjb25zdCBkYXRhLiAgKi8KKyMgZGVmaW5lIExUX0RMU1lNX0NPTlNUCisjZWxzZQorIyBkZWZpbmUgTFRfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisvKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAorIgorCisJaWYgdGVzdCAiJGRsc2VsZiIgPSB5ZXM7IHRoZW4KKwkgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKKworCSAgJG9wdF9kcnlfcnVuIHx8IGVjaG8gJzogQFBST0dSQU1AICcgPiAiJG5saXN0IgorCisJICAjIEFkZCBvdXIgb3duIHByb2dyYW0gb2JqZWN0cyB0byB0aGUgc3ltYm9sIGxpc3QuCisJICBwcm9nZmlsZXM9YCRFQ0hPICIkb2JqcyRvbGRfZGVwbGlicyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJICBmb3IgcHJvZ2ZpbGUgaW4gJHByb2dmaWxlczsgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRwcm9nZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQnIgorCSAgICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAiJE5NICRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgZG9uZQorCisJICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgorCSAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgIH0KKwkgIGZpCisKKwkgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCisJICAgICAgZXZhbCAnJE1WICIkbmxpc3QiVCAiJG5saXN0IicKKwkgICAgfQorCSAgZmkKKworCSAgIyBQcmVwYXJlIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMKKwkgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KKwkgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICAkUk0gJGV4cG9ydF9zeW1ib2xzCisJICAgICAgZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorICAgICAgICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisgICAgICAgICAgICAgICAgZXZhbCAnY2F0ICIkZXhwb3J0X3N5bWJvbHMiID4+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJworCSAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGVsc2UKKwkgICAgJG9wdF9kcnlfcnVuIHx8IHsKKwkgICAgICBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKKwkgICAgICBldmFsICckR1JFUCAtZiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIiA8ICIkbmxpc3QiID4gIiRubGlzdCJUJworCSAgICAgIGV2YWwgJyRNViAiJG5saXN0IlQgIiRubGlzdCInCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgICAgIGV2YWwgImVjaG8gRVhQT1JUUyAiJz4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCisJICAgICAgICAgIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKKwkgICAgICAgICAgOzsKKwkgICAgICBlc2FjCisJICAgIH0KKwkgIGZpCisJZmkKKworCWZvciBkbHByZWZpbGUgaW4gJGRscHJlZmlsZXM7IGRvCisJICBmdW5jX3ZlcmJvc2UgImV4dHJhY3RpbmcgZ2xvYmFsIEMgc3ltYm9scyBmcm9tIFxgJGRscHJlZmlsZSciCisJICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlIgorCSAgbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorICAgICAgICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKiApCisJICAgICAgIyBpZiBhbiBpbXBvcnQgbGlicmFyeSwgd2UgbmVlZCB0byBvYnRhaW4gZGxuYW1lCisJICAgICAgaWYgZnVuY193aW4zMl9pbXBvcnRfbGliX3AgIiRkbHByZWZpbGUiOyB0aGVuCisJICAgICAgICBmdW5jX3RyX3NoICIkZGxwcmVmaWxlIgorCSAgICAgICAgZXZhbCAiY3Vycl9sYWZpbGU9XCRsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdCIKKwkgICAgICAgIGRscHJlZmlsZV9kbGJhc2VuYW1lPSIiCisJICAgICAgICBpZiB0ZXN0IC1uICIkY3Vycl9sYWZpbGUiICYmIGZ1bmNfbGFsaWJfcCAiJGN1cnJfbGFmaWxlIjsgdGhlbgorCSAgICAgICAgICAjIFVzZSBzdWJzaGVsbCwgdG8gYXZvaWQgY2xvYmJlcmluZyBjdXJyZW50IHZhcmlhYmxlIHZhbHVlcworCSAgICAgICAgICBkbHByZWZpbGVfZGxuYW1lPWBzb3VyY2UgIiRjdXJyX2xhZmlsZSIgJiYgZWNobyAiJGRsbmFtZSJgCisJICAgICAgICAgIGlmIHRlc3QgLW4gIiRkbHByZWZpbGVfZGxuYW1lIiA7IHRoZW4KKwkgICAgICAgICAgICBmdW5jX2Jhc2VuYW1lICIkZGxwcmVmaWxlX2RsbmFtZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCSAgICAgICAgICBlbHNlCisJICAgICAgICAgICAgIyBubyBsYWZpbGUuIHVzZXIgZXhwbGljaXRseSByZXF1ZXN0ZWQgLWRscHJlb3BlbiA8aW1wb3J0IGxpYnJhcnk+LgorCSAgICAgICAgICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCAiJGRscHJlZmlsZSIKKwkgICAgICAgICAgICBkbHByZWZpbGVfZGxiYXNlbmFtZT0kc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQKKwkgICAgICAgICAgZmkKKwkgICAgICAgIGZpCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBpZiB0ZXN0IC1uICIkZGxwcmVmaWxlX2RsYmFzZW5hbWUiIDsgdGhlbgorCSAgICAgICAgICAgIGV2YWwgJyRFQ0hPICI6ICRkbHByZWZpbGVfZGxiYXNlbmFtZSIgPj4gIiRubGlzdCInCisJICAgICAgICAgIGVsc2UKKwkgICAgICAgICAgICBmdW5jX3dhcm5pbmcgIkNvdWxkIG5vdCBjb21wdXRlIERMTCBuYW1lIGZyb20gJG5hbWUiCisJICAgICAgICAgICAgZXZhbCAnJEVDSE8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKKwkgICAgICAgICAgZmkKKwkgICAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICAgIGV2YWwgIiROTSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiAyPi9kZXYvbnVsbCB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfAorCSAgICAgICAgICAgICRTRUQgLWUgJy9JIF9faW1wL2QnIC1lICdzL0kgX19ubV8vRCAvO3MvX25tX18vLycgPj4gJyRubGlzdCciCisJICAgICAgICB9CisJICAgICAgZWxzZSAjIG5vdCBhbiBpbXBvcnQgbGliCisJICAgICAgICAkb3B0X2RyeV9ydW4gfHwgeworCSAgICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGRscHJlZmlsZSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKwkgICAgICAgICAgZXZhbCAiJE5NIFwiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiIDI+L2Rldi9udWxsIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSA+PiAnJG5saXN0JyIKKwkgICAgICAgIH0KKwkgICAgICBmaQorCSAgICA7OworCSAgICAqKQorCSAgICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgICBldmFsICckRUNITyAiOiAkbmFtZSAiID4+ICIkbmxpc3QiJworCSAgICAgICAgZnVuY190b190b29sX2ZpbGUgIiRkbHByZWZpbGUiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisJICAgICAgICBldmFsICIkTk0gXCIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0XCIgMj4vZGV2L251bGwgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgorCSAgICAgIH0KKwkgICAgOzsKKyAgICAgICAgICBlc2FjCisJZG9uZQorCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KKwkgIHRlc3QgLWYgIiRubGlzdCIgfHwgOiA+ICIkbmxpc3QiCisKKwkgIGlmIHRlc3QgLW4gIiRleGNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCisJICAgICRNViAiJG5saXN0IlQgIiRubGlzdCIKKwkgIGZpCisKKwkgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisJICBpZiAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiIHwKKwkgICAgICBpZiBzb3J0IC1rIDMgPC9kZXYvbnVsbCA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwkJc29ydCAtayAzCisJICAgICAgZWxzZQorCQlzb3J0ICsyCisJICAgICAgZmkgfAorCSAgICAgIHVuaXEgPiAiJG5saXN0IlM7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICAkR1JFUCAtdiAiXjogIiA8ICIkbmxpc3QiID4gIiRubGlzdCJTCisJICBmaQorCisJICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCJTID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIicKKwkgIGVsc2UKKwkgICAgZWNobyAnLyogTk9ORSAqLycgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICBmaQorCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCit0eXBlZGVmIHN0cnVjdCB7CisgIGNvbnN0IGNoYXIgKm5hbWU7CisgIHZvaWQgKmFkZHJlc3M7Cit9IGx0X2Rsc3ltbGlzdDsKK2V4dGVybiBMVF9ETFNZTV9DT05TVCBsdF9kbHN5bWxpc3QKK2x0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHNbXTsKK0xUX0RMU1lNX0NPTlNUIGx0X2Rsc3ltbGlzdAorbHRfJHtteV9wcmVmaXh9X0xUWF9wcmVsb2FkZWRfc3ltYm9sc1tdID0KK3tcCisgIHsgXCIkbXlfb3JpZ2luYXRvclwiLCAodm9pZCAqKSAwIH0sIgorCisJICBjYXNlICRuZWVkX2xpYl9wcmVmaXggaW4KKwkgIG5vKQorCSAgICBldmFsICIkZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcyIgPCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIKKwkgICAgOzsKKwkgICopCisJICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXgiIDwgIiRubGlzdCIgPj4gIiRvdXRwdXRfb2JqZGlyLyRteV9kbHN5bXMiCisJICAgIDs7CisJICBlc2FjCisJICBlY2hvID4+ICIkb3V0cHV0X29iamRpci8kbXlfZGxzeW1zIiAiXAorICB7MCwgKHZvaWQgKikgMH0KK307CisKKy8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLworI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAorc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKKyAgcmV0dXJuIGx0XyR7bXlfcHJlZml4fV9MVFhfcHJlbG9hZGVkX3N5bWJvbHM7Cit9CisjZW5kaWYKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWZcCisiCisJfSAjICEkb3B0X2RyeV9ydW4KKworCXBpY19mbGFnX2Zvcl9zeW10YWJsZT0KKwljYXNlICIkY29tcGlsZV9jb21tYW5kICIgaW4KKwkqIiAtc3RhdGljICIqKSA7OworCSopCisJICBjYXNlICRob3N0IGluCisJICAjIGNvbXBpbGluZyB0aGUgc3ltYm9sIHRhYmxlIGZpbGUgd2l0aCBwaWNfZmxhZyB3b3JrcyBhcm91bmQKKwkgICMgYSBGcmVlQlNEIGJ1ZyB0aGF0IGNhdXNlcyBwcm9ncmFtcyB0byBjcmFzaCB3aGVuIC1sbSBpcworCSAgIyBsaW5rZWQgYmVmb3JlIGFueSBvdGhlciBQSUMgb2JqZWN0LiAgQnV0IHdlIG11c3Qgbm90IHVzZQorCSAgIyBwaWNfZmxhZyB3aGVuIGxpbmtpbmcgd2l0aCAtc3RhdGljLiAgVGhlIHByb2JsZW0gZXhpc3RzIGluCisJICAjIEZyZWVCU0QgMi4yLjYgYW5kIGlzIGZpeGVkIGluIEZyZWVCU0QgMy4xLgorCSAgKi0qLWZyZWVic2QyKnwqLSotZnJlZWJzZDMuMCp8Ki0qLWZyZWVic2RlbGYzLjAqKQorCSAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWcgLURGUkVFQlNEX1dPUktBUk9VTkQiIDs7CisJICAqLSotaHB1eCopCisJICAgIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyIgIDs7CisJICAqKQorCSAgICBpZiB0ZXN0ICJYJG15X3BpY19wIiAhPSBYbm87IHRoZW4KKwkgICAgICBwaWNfZmxhZ19mb3Jfc3ltdGFibGU9IiAkcGljX2ZsYWciCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCisJICA7OworCWVzYWMKKwlzeW10YWJfY2ZsYWdzPQorCWZvciBhcmcgaW4gJExUQ0ZMQUdTOyBkbworCSAgY2FzZSAkYXJnIGluCisJICAtcGllIHwgLWZwaWUgfCAtZlBJRSkgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHN5bXRhYl9jZmxhZ3MgIiAkYXJnIiA7OworCSAgZXNhYworCWRvbmUKKworCSMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCisJZnVuY19zaG93X2V2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyRzeW10YWJfY2ZsYWdzIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRteV9kbHN5bXMiKScgJ2V4aXQgJD8nCisKKwkjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCisJZnVuY19zaG93X2V2YWwgJyRSTSAiJG91dHB1dF9vYmpkaXIvJG15X2Rsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCInCisKKwkjIFRyYW5zZm9ybSB0aGUgc3ltYm9sIGZpbGUgaW50byB0aGUgY29ycmVjdCBuYW1lLgorCXN5bWZpbGVvYmo9IiRvdXRwdXRfb2JqZGlyLyR7bXlfb3V0cHV0bmFtZX1TLiRvYmpleHQiCisJY2FzZSAkaG9zdCBpbgorCSpjeWd3aW4qIHwgKm1pbmd3KiB8ICpjZWdjYyogKQorCSAgaWYgdGVzdCAtZiAiJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmIjsgdGhlbgorCSAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyRteV9vdXRwdXRuYW1lLmRlZiAkc3ltZmlsZW9iaiUiYAorCSAgICBmaW5hbGl6ZV9jb21tYW5kPWAkRUNITyAiJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJG91dHB1dF9vYmpkaXIvJG15X291dHB1dG5hbWUuZGVmICRzeW1maWxlb2JqJSJgCisJICBlbHNlCisJICAgIGNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNFRCAicyVAU1lNRklMRUAlJHN5bWZpbGVvYmolImAKKwkgICAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICBmaQorCSAgOzsKKwkqKQorCSAgY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICJzJUBTWU1GSUxFQCUkc3ltZmlsZW9iaiUiYAorCSAgZmluYWxpemVfY29tbWFuZD1gJEVDSE8gIiRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTRUQgInMlQFNZTUZJTEVAJSRzeW1maWxlb2JqJSJgCisJICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlmdW5jX2ZhdGFsX2Vycm9yICJ1bmtub3duIHN1ZmZpeCBmb3IgXGAkbXlfZGxzeW1zJyIKKwk7OworICAgICAgZXNhYworICAgIGVsc2UKKyAgICAgICMgV2Uga2VlcCBnb2luZyBqdXN0IGluIGNhc2UgdGhlIHVzZXIgZGlkbid0IHJlZmVyIHRvCisgICAgICAjIGx0X3ByZWxvYWRlZF9zeW1ib2xzLiAgVGhlIGxpbmtlciB3aWxsIGZhaWwgaWYgZ2xvYmFsX3N5bWJvbF9waXBlCisgICAgICAjIHJlYWxseSB3YXMgcmVxdWlyZWQuCisKKyAgICAgICMgTnVsbGlmeSB0aGUgc3ltYm9sIGZpbGUuCisgICAgICBjb21waWxlX2NvbW1hbmQ9YCRFQ0hPICIkY29tcGlsZV9jb21tYW5kIiB8ICRTRUQgInMlIEBTWU1GSUxFQCUlImAKKyAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU0VEICJzJSBAU1lNRklMRUAlJSJgCisgICAgZmkKK30KKworIyBmdW5jX3dpbjMyX2xpYmlkIGFyZworIyByZXR1cm4gdGhlIGxpYnJhcnkgdHlwZSBvZiBmaWxlICdhcmcnCisjCisjIE5lZWQgYSBsb3Qgb2YgZ29vIHRvIGhhbmRsZSAqYm90aCogRExMcyBhbmQgaW1wb3J0IGxpYnMKKyMgSGFzIHRvIGJlIGEgc2hlbGwgZnVuY3Rpb24gaW4gb3JkZXIgdG8gJ2VhdCcgdGhlIGFyZ3VtZW50CisjIHRoYXQgaXMgc3VwcGxpZWQgd2hlbiAkZmlsZV9tYWdpY19jb21tYW5kIGlzIGNhbGxlZC4KKyMgRGVzcGl0ZSB0aGUgbmFtZSwgYWxzbyBkZWFsIHdpdGggNjQgYml0IGJpbmFyaWVzLgorZnVuY193aW4zMl9saWJpZCAoKQoreworICAkb3B0X2RlYnVnCisgIHdpbjMyX2xpYmlkX3R5cGU9InVua25vd24iCisgIHdpbjMyX2ZpbGVyZXM9YGZpbGUgLUwgJDEgMj4vZGV2L251bGxgCisgIGNhc2UgJHdpbjMyX2ZpbGVyZXMgaW4KKyAgKmFyXCBhcmNoaXZlXCBpbXBvcnRcIGxpYnJhcnkqKSAjIGRlZmluaXRlbHkgaW1wb3J0CisgICAgd2luMzJfbGliaWRfdHlwZT0ieDg2IGFyY2hpdmUgaW1wb3J0IgorICAgIDs7CisgICphclwgYXJjaGl2ZSopICMgY291bGQgYmUgYW4gaW1wb3J0LCBvciBzdGF0aWMKKyAgICAjIEtlZXAgdGhlIGVncmVwIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gX0xUX0NIRUNLX01BR0lDX01FVEhPRC4KKyAgICBpZiBldmFsICRPQkpEVU1QIC1mICQxIHwgJFNFRCAtZSAnMTBxJyAyPi9kZXYvbnVsbCB8CisgICAgICAgJEVHUkVQICdmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknID4vZGV2L251bGw7IHRoZW4KKyAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkMSIgZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgIHdpbjMyX25tcmVzPWBldmFsICROTSAtZiBwb3NpeCAtQSBcIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHRcIiB8CisJJFNFRCAtbiAtZSAnCisJICAgIDEsMTAweworCQkvIEkgL3sKKwkJICAgIHMsLiosaW1wb3J0LAorCQkgICAgcAorCQkgICAgcQorCQl9CisJICAgIH0nYAorICAgICAgY2FzZSAkd2luMzJfbm1yZXMgaW4KKyAgICAgIGltcG9ydCopICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBpbXBvcnQiOzsKKyAgICAgICopICAgICAgICB3aW4zMl9saWJpZF90eXBlPSJ4ODYgYXJjaGl2ZSBzdGF0aWMiOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICAgIDs7CisgICpETEwqKQorICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgOzsKKyAgKmV4ZWN1dGFibGUqKSAjIGJ1dCBzaGVsbCBzY3JpcHRzIGFyZSAiZXhlY3V0YWJsZSIgdG9vLi4uCisgICAgY2FzZSAkd2luMzJfZmlsZXJlcyBpbgorICAgICpNU1wgV2luZG93c1wgUEVcIEludGVsKikKKyAgICAgIHdpbjMyX2xpYmlkX3R5cGU9Ing4NiBETEwiCisgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgICRFQ0hPICIkd2luMzJfbGliaWRfdHlwZSIKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWIgQVJHCisjCisjIFBsYXRmb3JtLXNwZWNpZmljIGZ1bmN0aW9uIHRvIGV4dHJhY3QgdGhlCisjIG5hbWUgb2YgdGhlIERMTCBhc3NvY2lhdGVkIHdpdGggdGhlIHNwZWNpZmllZAorIyBpbXBvcnQgbGlicmFyeSBBUkcuCisjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliICgpCit7CisgICRvcHRfZGVidWcKKyAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YCRETExUT09MIC0taWRlbnRpZnktc3RyaWN0IC0taWRlbnRpZnkgIiQxImAKK30KKworIyBmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSBTRUNUSU9OX05BTUUgTElCTkFNRXMKKyMKKyMgVGhlIGlzIHRoZSBjb3JlIG9mIGEgZmFsbGJhY2sgaW1wbGVtZW50YXRpb24gb2YgYQorIyBwbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZSBuYW1lIG9mIHRoZQorIyBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkgTElCTkFNRS4KKyMKKyMgU0VDVElPTl9OQU1FIGlzIGVpdGhlciAuaWRhdGEkNiBvciAuaWRhdGEkNywgZGVwZW5kaW5nCisjIG9uIHRoZSBwbGF0Zm9ybSBhbmQgY29tcGlsZXIgdGhhdCBjcmVhdGVkIHRoZSBpbXBsaWIuCisjCisjIEVjaG9zIHRoZSBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZQorIyBzcGVjaWZpZWQgaW1wb3J0IGxpYnJhcnkuCitmdW5jX2N5Z21pbmdfZGxsX2Zvcl9pbXBsaWJfZmFsbGJhY2tfY29yZSAoKQoreworICAkb3B0X2RlYnVnCisgIG1hdGNoX2xpdGVyYWw9YCRFQ0hPICIkMSIgfCAkU0VEICIkc2VkX21ha2VfbGl0ZXJhbF9yZWdleCJgCisgICRPQkpEVU1QIC1zIC0tc2VjdGlvbiAiJDEiICIkMiIgMj4vZGV2L251bGwgfAorICAgICRTRUQgJy9eQ29udGVudHMgb2Ygc2VjdGlvbiAnIiRtYXRjaF9saXRlcmFsIic6L3sKKyAgICAgICMgUGxhY2UgbWFya2VyIGF0IGJlZ2lubmluZyBvZiBhcmNoaXZlIG1lbWJlciBkbGxuYW1lIHNlY3Rpb24KKyAgICAgIHMvLiovPT09PU1BUks9PT09LworICAgICAgcAorICAgICAgZAorICAgIH0KKyAgICAjIFRoZXNlIGxpbmVzIGNhbiBzb21ldGltZXMgYmUgbG9uZ2VyIHRoYW4gNDMgY2hhcmFjdGVycywgYnV0CisgICAgIyBhcmUgYWx3YXlzIHVuaW50ZXJlc3RpbmcKKyAgICAvOlsJIF0qZmlsZSBmb3JtYXQgcGVbaV1ceywxXH0tL2QKKyAgICAvXkluIGFyY2hpdmUgW146XSo6L2QKKyAgICAjIEVuc3VyZSBtYXJrZXIgaXMgcHJpbnRlZAorICAgIC9ePT09PU1BUks9PT09L3AKKyAgICAjIFJlbW92ZSBhbGwgbGluZXMgd2l0aCBsZXNzIHRoYW4gNDMgY2hhcmFjdGVycworICAgIC9eLlx7NDNcfS8hZAorICAgICMgRnJvbSByZW1haW5pbmcgbGluZXMsIHJlbW92ZSBmaXJzdCA0MyBjaGFyYWN0ZXJzCisgICAgcy9eLlx7NDNcfS8vJyB8CisgICAgJFNFRCAtbiAnCisgICAgICAjIEpvaW4gbWFya2VyIGFuZCBhbGwgbGluZXMgdW50aWwgbmV4dCBtYXJrZXIgaW50byBhIHNpbmdsZSBsaW5lCisgICAgICAvXj09PT1NQVJLPT09PS8gYiBwYXJhCisgICAgICBICisgICAgICAkIGIgcGFyYQorICAgICAgYgorICAgICAgOnBhcmEKKyAgICAgIHgKKyAgICAgIHMvXG4vL2cKKyAgICAgICMgUmVtb3ZlIHRoZSBtYXJrZXIKKyAgICAgIHMvXj09PT1NQVJLPT09PS8vCisgICAgICAjIFJlbW92ZSB0cmFpbGluZyBkb3RzIGFuZCB3aGl0ZXNwYWNlCisgICAgICBzL1tcLiBcdF0qJC8vCisgICAgICAjIFByaW50CisgICAgICAvLi9wJyB8CisgICAgIyB3ZSBub3cgaGF2ZSBhIGxpc3QsIG9uZSBlbnRyeSBwZXIgbGluZSwgb2YgdGhlIHN0cmluZ2lmaWVkCisgICAgIyBjb250ZW50cyBvZiB0aGUgYXBwcm9wcmlhdGUgc2VjdGlvbiBvZiBhbGwgbWVtYmVycyBvZiB0aGUKKyAgICAjIGFyY2hpdmUgd2hpY2ggcG9zc2VzcyB0aGF0IHNlY3Rpb24uIEhldXJpc3RpYzogZWxpbWluYXRlCisgICAgIyBhbGwgdGhvc2Ugd2hpY2ggaGF2ZSBhIGZpcnN0IG9yIHNlY29uZCBjaGFyYWN0ZXIgdGhhdCBpcworICAgICMgYSAnLicgKHRoYXQgaXMsIG9iamR1bXAncyByZXByZXNlbnRhdGlvbiBvZiBhbiB1bnByaW50YWJsZQorICAgICMgY2hhcmFjdGVyLikgVGhpcyBzaG91bGQgd29yayBmb3IgYWxsIGFyY2hpdmVzIHdpdGggbGVzcyB0aGFuCisgICAgIyAweDMwMmYgZXhwb3J0cyAtLSBidXQgd2lsbCBmYWlsIGZvciBETExzIHdob3NlIG5hbWUgYWN0dWFsbHkKKyAgICAjIGJlZ2lucyB3aXRoIGEgbGl0ZXJhbCAnLicgb3IgYSBzaW5nbGUgY2hhcmFjdGVyIGZvbGxvd2VkIGJ5CisgICAgIyBhICcuJy4KKyAgICAjCisgICAgIyBPZiB0aG9zZSB0aGF0IHJlbWFpbiwgcHJpbnQgdGhlIGZpcnN0IG9uZS4KKyAgICAkU0VEIC1lICcvXlwuL2Q7L14uXC4vZDtxJworfQorCisjIGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGEgR05VL2JpbnV0aWxzLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl9wICgpCit7CisgICRvcHRfZGVidWcKKyAgZnVuY190b190b29sX2ZpbGUgIiQxIiBmdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX3czMgorICBmdW5jX2N5Z21pbmdfZ251X2ltcGxpYl90bXA9YCROTSAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIgfCBldmFsICIkZ2xvYmFsX3N5bWJvbF9waXBlIiB8ICRFR1JFUCAnIChfaGVhZF9bQS1aYS16MC05X10rX1thZF1sKnxbQS1aYS16MC05X10rX1thZF1sKl9pbmFtZSkkJ2AKKyAgdGVzdCAtbiAiJGZ1bmNfY3lnbWluZ19nbnVfaW1wbGliX3RtcCIKK30KKworIyBmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgQVJHCisjIFRoaXMgcHJlZGljYXRlIHJldHVybnMgd2l0aCB6ZXJvIHN0YXR1cyAoVFJVRSkgaWYKKyMgQVJHIGlzIGFuIE1TLXN0eWxlIGltcG9ydCBsaWJyYXJ5LiBSZXR1cm5zCisjIHdpdGggbm9uemVybyBzdGF0dXMgKEZBTFNFKSBvdGhlcndpc2UuCitmdW5jX2N5Z21pbmdfbXNfaW1wbGliX3AgKCkKK3sKKyAgJG9wdF9kZWJ1ZworICBmdW5jX3RvX3Rvb2xfZmlsZSAiJDEiIGZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfdG1wPWAkTk0gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiIHwgZXZhbCAiJGdsb2JhbF9zeW1ib2xfcGlwZSIgfCAkR1JFUCAnX05VTExfSU1QT1JUX0RFU0NSSVBUT1InYAorICB0ZXN0IC1uICIkZnVuY19jeWdtaW5nX21zX2ltcGxpYl90bXAiCit9CisKKyMgZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrIEFSRworIyBQbGF0Zm9ybS1zcGVjaWZpYyBmdW5jdGlvbiB0byBleHRyYWN0IHRoZQorIyBuYW1lIG9mIHRoZSBETEwgYXNzb2NpYXRlZCB3aXRoIHRoZSBzcGVjaWZpZWQKKyMgaW1wb3J0IGxpYnJhcnkgQVJHLgorIworIyBUaGlzIGZhbGxiYWNrIGltcGxlbWVudGF0aW9uIGlzIGZvciB1c2Ugd2hlbiAkRExMVE9PTAorIyBkb2VzIG5vdCBzdXBwb3J0IHRoZSAtLWlkZW50aWZ5LXN0cmljdCBvcHRpb24uCisjIEludm9rZWQgYnkgZXZhbCdpbmcgdGhlIGxpYnRvb2wgdmFyaWFibGUKKyMgICAgJHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kCisjIFJlc3VsdCBpcyBhdmFpbGFibGUgaW4gdGhlIHZhcmlhYmxlCisjICAgICRzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdAorZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrICgpCit7CisgICRvcHRfZGVidWcKKyAgaWYgZnVuY19jeWdtaW5nX2dudV9pbXBsaWJfcCAiJDEiIDsgdGhlbgorICAgICMgYmludXRpbHMgaW1wb3J0IGxpYnJhcnkKKyAgICBzaGFyZWRsaWJfZnJvbV9saW5rbGliX3Jlc3VsdD1gZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrX2NvcmUgJy5pZGF0YSQ3JyAiJDEiYAorICBlbGlmIGZ1bmNfY3lnbWluZ19tc19pbXBsaWJfcCAiJDEiIDsgdGhlbgorICAgICMgbXMtZ2VuZXJhdGVkIGltcG9ydCBsaWJyYXJ5CisgICAgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9yZXN1bHQ9YGZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYl9mYWxsYmFja19jb3JlICcuaWRhdGEkNicgIiQxImAKKyAgZWxzZQorICAgICMgdW5rbm93bgorICAgIHNoYXJlZGxpYl9mcm9tX2xpbmtsaWJfcmVzdWx0PSIiCisgIGZpCit9CisKKworIyBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSBkaXIgb2xkbGliCitmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBmX2V4X2FuX2FyX2Rpcj0iJDEiOyBzaGlmdAorICAgIGZfZXhfYW5fYXJfb2xkbGliPSIkMSIKKyAgICBpZiB0ZXN0ICIkbG9ja19vbGRfYXJjaGl2ZV9leHRyYWN0aW9uIiA9IHllczsgdGhlbgorICAgICAgbG9ja2ZpbGU9JGZfZXhfYW5fYXJfb2xkbGliLmxvY2sKKyAgICAgIHVudGlsICRvcHRfZHJ5X3J1biB8fCBsbiAiJHByb2dwYXRoIiAiJGxvY2tmaWxlIiAyPi9kZXYvbnVsbDsgZG8KKwlmdW5jX2VjaG8gIldhaXRpbmcgZm9yICRsb2NrZmlsZSB0byBiZSByZW1vdmVkIgorCXNsZWVwIDIKKyAgICAgIGRvbmUKKyAgICBmaQorICAgIGZ1bmNfc2hvd19ldmFsICIoY2QgXCRmX2V4X2FuX2FyX2RpciAmJiAkQVIgeCBcIlwkZl9leF9hbl9hcl9vbGRsaWJcIikiIFwKKwkJICAgJ3N0YXQ9JD87IHJtIC1mICIkbG9ja2ZpbGUiOyBleGl0ICRzdGF0JworICAgIGlmIHRlc3QgIiRsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb24iID0geWVzOyB0aGVuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgcm0gLWYgIiRsb2NrZmlsZSIKKyAgICBmaQorICAgIGlmICgkQVIgdCAiJGZfZXhfYW5fYXJfb2xkbGliIiB8IHNvcnQgfCBzb3J0IC11YyA+L2Rldi9udWxsIDI+JjEpOyB0aGVuCisgICAgIDoKKyAgICBlbHNlCisgICAgICBmdW5jX2ZhdGFsX2Vycm9yICJvYmplY3QgbmFtZSBjb25mbGljdHMgaW4gYXJjaGl2ZTogJGZfZXhfYW5fYXJfZGlyLyRmX2V4X2FuX2FyX29sZGxpYiIKKyAgICBmaQorfQorCisKKyMgZnVuY19leHRyYWN0X2FyY2hpdmVzIGdlbnRvcCBvbGRsaWIgLi4uCitmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgKCkKK3sKKyAgICAkb3B0X2RlYnVnCisgICAgbXlfZ2VudG9wPSIkMSI7IHNoaWZ0CisgICAgbXlfb2xkbGlicz0kezErIiRAIn0KKyAgICBteV9vbGRvYmpzPSIiCisgICAgbXlfeGxpYj0iIgorICAgIG15X3hhYnM9IiIKKyAgICBteV94ZGlyPSIiCisKKyAgICBmb3IgbXlfeGxpYiBpbiAkbXlfb2xkbGliczsgZG8KKyAgICAgICMgRXh0cmFjdCB0aGUgb2JqZWN0cy4KKyAgICAgIGNhc2UgJG15X3hsaWIgaW4KKwlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIG15X3hhYnM9IiRteV94bGliIiA7OworCSopIG15X3hhYnM9YHB3ZGAiLyRteV94bGliIiA7OworICAgICAgZXNhYworICAgICAgZnVuY19iYXNlbmFtZSAiJG15X3hsaWIiCisgICAgICBteV94bGliPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICBteV94bGliX3U9JG15X3hsaWIKKyAgICAgIHdoaWxlIDo7IGRvCisgICAgICAgIGNhc2UgIiAkZXh0cmFjdGVkX2FyY2hpdmVzICIgaW4KKwkqIiAkbXlfeGxpYl91ICIqKQorCSAgZnVuY19hcml0aCAkZXh0cmFjdGVkX3NlcmlhbCArIDEKKwkgIGV4dHJhY3RlZF9zZXJpYWw9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICBteV94bGliX3U9bHQkZXh0cmFjdGVkX3NlcmlhbC0kbXlfeGxpYiA7OworCSopIGJyZWFrIDs7CisJZXNhYworICAgICAgZG9uZQorICAgICAgZXh0cmFjdGVkX2FyY2hpdmVzPSIkZXh0cmFjdGVkX2FyY2hpdmVzICRteV94bGliX3UiCisgICAgICBteV94ZGlyPSIkbXlfZ2VudG9wLyRteV94bGliX3UiCisKKyAgICAgIGZ1bmNfbWtkaXJfcCAiJG15X3hkaXIiCisKKyAgICAgIGNhc2UgJGhvc3QgaW4KKyAgICAgICotZGFyd2luKikKKwlmdW5jX3ZlcmJvc2UgIkV4dHJhY3RpbmcgJG15X3hhYnMiCisJIyBEbyBub3QgYm90aGVyIGRvaW5nIGFueXRoaW5nIGlmIGp1c3QgYSBkcnkgcnVuCisJJG9wdF9kcnlfcnVuIHx8IHsKKwkgIGRhcndpbl9vcmlnX2Rpcj1gcHdkYAorCSAgY2QgJG15X3hkaXIgfHwgZXhpdCAkPworCSAgZGFyd2luX2FyY2hpdmU9JG15X3hhYnMKKwkgIGRhcndpbl9jdXJkaXI9YHB3ZGAKKwkgIGRhcndpbl9iYXNlX2FyY2hpdmU9YGJhc2VuYW1lICIkZGFyd2luX2FyY2hpdmUiYAorCSAgZGFyd2luX2FyY2hlcz1gJExJUE8gLWluZm8gIiRkYXJ3aW5fYXJjaGl2ZSIgMj4vZGV2L251bGwgfCAkR1JFUCBBcmNoaXRlY3R1cmVzIDI+L2Rldi9udWxsIHx8IHRydWVgCisJICBpZiB0ZXN0IC1uICIkZGFyd2luX2FyY2hlcyI7IHRoZW4KKwkgICAgZGFyd2luX2FyY2hlcz1gJEVDSE8gIiRkYXJ3aW5fYXJjaGVzIiB8ICRTRUQgLWUgJ3MvLiphcmU6Ly8nYAorCSAgICBkYXJ3aW5fYXJjaD0KKwkgICAgZnVuY192ZXJib3NlICIkZGFyd2luX2Jhc2VfYXJjaGl2ZSBoYXMgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAkZGFyd2luX2FyY2hlcyIKKwkgICAgZm9yIGRhcndpbl9hcmNoIGluICAkZGFyd2luX2FyY2hlcyA7IGRvCisJICAgICAgZnVuY19ta2Rpcl9wICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9IgorCSAgICAgICRMSVBPIC10aGluICRkYXJ3aW5fYXJjaCAtb3V0cHV0ICJ1bmZhdC0kJC8ke2Rhcndpbl9iYXNlX2FyY2hpdmV9LSR7ZGFyd2luX2FyY2h9LyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0iICIke2Rhcndpbl9hcmNoaXZlfSIKKwkgICAgICBjZCAidW5mYXQtJCQvJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfS0ke2Rhcndpbl9hcmNofSIKKwkgICAgICBmdW5jX2V4dHJhY3RfYW5fYXJjaGl2ZSAiYHB3ZGAiICIke2Rhcndpbl9iYXNlX2FyY2hpdmV9IgorCSAgICAgIGNkICIkZGFyd2luX2N1cmRpciIKKwkgICAgICAkUk0gInVuZmF0LSQkLyR7ZGFyd2luX2Jhc2VfYXJjaGl2ZX0tJHtkYXJ3aW5fYXJjaH0vJHtkYXJ3aW5fYmFzZV9hcmNoaXZlfSIKKwkgICAgZG9uZSAjICRkYXJ3aW5fYXJjaGVzCisgICAgICAgICAgICAjIyBPa2F5IG5vdyB3ZSd2ZSBhIGJ1bmNoIG9mIHRoaW4gb2JqZWN0cywgZ290dGEgZmF0dGVuIHRoZW0gdXAgOikKKwkgICAgZGFyd2luX2ZpbGVsaXN0PWBmaW5kIHVuZmF0LSQkIC10eXBlIGYgLW5hbWUgXCoubyAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgJFNFRCAtZSAiJGJhc2VuYW1lIiB8IHNvcnQgLXVgCisJICAgIGRhcndpbl9maWxlPQorCSAgICBkYXJ3aW5fZmlsZXM9CisJICAgIGZvciBkYXJ3aW5fZmlsZSBpbiAkZGFyd2luX2ZpbGVsaXN0OyBkbworCSAgICAgIGRhcndpbl9maWxlcz1gZmluZCB1bmZhdC0kJCAtbmFtZSAkZGFyd2luX2ZpbGUgLXByaW50IHwgc29ydCB8ICROTDJTUGAKKwkgICAgICAkTElQTyAtY3JlYXRlIC1vdXRwdXQgIiRkYXJ3aW5fZmlsZSIgJGRhcndpbl9maWxlcworCSAgICBkb25lICMgJGRhcndpbl9maWxlbGlzdAorCSAgICAkUk0gLXJmIHVuZmF0LSQkCisJICAgIGNkICIkZGFyd2luX29yaWdfZGlyIgorCSAgZWxzZQorCSAgICBjZCAkZGFyd2luX29yaWdfZGlyCisJICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCSAgZmkgIyAkZGFyd2luX2FyY2hlcworCX0gIyAhJG9wdF9kcnlfcnVuCisJOzsKKyAgICAgICopCisgICAgICAgIGZ1bmNfZXh0cmFjdF9hbl9hcmNoaXZlICIkbXlfeGRpciIgIiRteV94YWJzIgorCTs7CisgICAgICBlc2FjCisgICAgICBteV9vbGRvYmpzPSIkbXlfb2xkb2JqcyAiYGZpbmQgJG15X3hkaXIgLW5hbWUgXCouJG9iamV4dCAtcHJpbnQgLW8gLW5hbWUgXCoubG8gLXByaW50IHwgc29ydCB8ICROTDJTUGAKKyAgICBkb25lCisKKyAgICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0PSIkbXlfb2xkb2JqcyIKK30KKworCisjIGZ1bmNfZW1pdF93cmFwcGVyIFthcmc9bm9dCisjCisjIEVtaXQgYSBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0IG9uIHN0ZG91dC4KKyMgRG9uJ3QgZGlyZWN0bHkgb3BlbiBhIGZpbGUgYmVjYXVzZSB3ZSBtYXkgd2FudCB0bworIyBpbmNvcnBvcmF0ZSB0aGUgc2NyaXB0IGNvbnRlbnRzIHdpdGhpbiBhIGN5Z3dpbi9taW5ndworIyB3cmFwcGVyIGV4ZWN1dGFibGUuICBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluCisjIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZXMKKyMgc2V0IHRoZXJlaW4uCisjCisjIEFSRyBpcyB0aGUgdmFsdWUgdGhhdCB0aGUgV1JBUFBFUl9TQ1JJUFRfQkVMT05HU19JTl9PQkpESVIKKyMgdmFyaWFibGUgd2lsbCB0YWtlLiAgSWYgJ3llcycsIHRoZW4gdGhlIGVtaXR0ZWQgc2NyaXB0CisjIHdpbGwgYXNzdW1lIHRoYXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCBpdCBpcyBzdG9yZWQgaXMKKyMgdGhlICRvYmpkaXIgZGlyZWN0b3J5LiAgVGhpcyBpcyBhIGN5Z3dpbi9taW5ndy1zcGVjaWZpYworIyBiZWhhdmlvci4KK2Z1bmNfZW1pdF93cmFwcGVyICgpCit7CisJZnVuY19lbWl0X3dyYXBwZXJfYXJnMT0kezEtbm99CisKKwkkRUNITyAiXAorIyEgJFNIRUxMCisKKyMgJG91dHB1dCAtIHRlbXBvcmFyeSB3cmFwcGVyIHNjcmlwdCBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCisjCisjIFRoZSAkb3V0cHV0IHByb2dyYW0gY2Fubm90IGJlIGRpcmVjdGx5IGV4ZWN1dGVkIHVudGlsIGFsbCB0aGUgbGlidG9vbAorIyBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCisjCisjIFRoaXMgd3JhcHBlciBzY3JpcHQgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorIyBJZiBpdCBpcywgaXQgd2lsbCBub3Qgb3BlcmF0ZSBjb3JyZWN0bHkuCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHBzIHVzIGRvIHJvYnVzdCBxdW90aW5nLiAgSXQgYmFja3NsYXNoaWZpZXMKKyMgbWV0YWNoYXJhY3RlcnMgdGhhdCBhcmUgc3RpbGwgYWN0aXZlIHdpdGhpbiBkb3VibGUtcXVvdGVkIHN0cmluZ3MuCitzZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCisKKyMgQmUgQm91cm5lIGNvbXBhdGlibGUKK2lmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBlbXVsYXRlIHNoCisgIE5VTExDTUQ9OgorICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAorICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgorICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCisgIHNldG9wdCBOT19HTE9CX1NVQlNUCitlbHNlCisgIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKK2ZpCitCSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAorRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAorCisjIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAorIyBpZiBDRFBBVEggaXMgc2V0LgorKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAorCityZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCisKKyMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KK2lmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgorICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlczoKKyAgZ2VuZXJhdGVkX2J5X2xpYnRvb2xfdmVyc2lvbj0nJG1hY3JvX3ZlcnNpb24nCisgIG5vdGluc3RfZGVwbGlicz0nJG5vdGluc3RfZGVwbGlicycKK2Vsc2UKKyAgIyBXaGVuIHdlIGFyZSBzb3VyY2VkIGluIGV4ZWN1dGUgbW9kZSwgXCRmaWxlIGFuZCBcJEVDSE8gYXJlIGFscmVhZHkgc2V0LgorICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgZmlsZT1cIlwkMFwiIgorCisgICAgcUVDSE89YCRFQ0hPICIkRUNITyIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgICAkRUNITyAiXAorCisjIEEgZnVuY3Rpb24gdGhhdCBpcyB1c2VkIHdoZW4gdGhlcmUgaXMgbm8gcHJpbnQgYnVpbHRpbiBvciBwcmludGYuCitmdW5jX2ZhbGxiYWNrX2VjaG8gKCkKK3sKKyAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKK1wkMQorX0xURUNIT19FT0YnCit9CisgICAgRUNITz1cIiRxRUNIT1wiCisgIGZpCisKKyMgVmVyeSBiYXNpYyBvcHRpb24gcGFyc2luZy4gVGhlc2Ugb3B0aW9ucyBhcmUgKGEpIHNwZWNpZmljIHRvCisjIHRoZSBsaWJ0b29sIHdyYXBwZXIsIChiKSBhcmUgaWRlbnRpY2FsIGJldHdlZW4gdGhlIHdyYXBwZXIKKyMgL3NjcmlwdC8gYW5kIHRoZSB3cmFwcGVyIC9leGVjdXRhYmxlLyB3aGljaCBpcyB1c2VkIG9ubHkgb24KKyMgd2luZG93cyBwbGF0Zm9ybXMsIGFuZCAoYykgYWxsIGJlZ2luIHdpdGggdGhlIHN0cmluZyAiLS1sdC0iCisjIChhcHBsaWNhdGlvbiBwcm9ncmFtcyBhcmUgdW5saWtlbHkgdG8gaGF2ZSBvcHRpb25zIHdoaWNoIG1hdGNoCisjIHRoaXMgcGF0dGVybikuCisjCisjIFRoZXJlIGFyZSBvbmx5IHR3byBzdXBwb3J0ZWQgb3B0aW9uczogLS1sdC1kZWJ1ZyBhbmQKKyMgLS1sdC1kdW1wLXNjcmlwdC4gVGhlcmUgaXMsIGRlbGliZXJhdGVseSwgbm8gLS1sdC1oZWxwLgorIworIyBUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhpcyBwYXJzaW5nIGZ1bmN0aW9uIHNob3VsZCBiZSB0aGUKKyMgc2NyaXB0J3MgJDAgdmFsdWUsIGZvbGxvd2VkIGJ5ICIkQCIuCitsdF9vcHRpb25fZGVidWc9CitmdW5jX3BhcnNlX2x0X29wdGlvbnMgKCkKK3sKKyAgbHRfc2NyaXB0X2FyZzA9XCQwCisgIHNoaWZ0CisgIGZvciBsdF9vcHQKKyAgZG8KKyAgICBjYXNlIFwiXCRsdF9vcHRcIiBpbgorICAgIC0tbHQtZGVidWcpIGx0X29wdGlvbl9kZWJ1Zz0xIDs7CisgICAgLS1sdC1kdW1wLXNjcmlwdCkKKyAgICAgICAgbHRfZHVtcF9EPVxgXCRFQ0hPIFwiWFwkbHRfc2NyaXB0X2FyZzBcIiB8ICRTRUQgLWUgJ3MvXlgvLycgLWUgJ3MlL1teL10qJCUlJ1xgCisgICAgICAgIHRlc3QgXCJYXCRsdF9kdW1wX0RcIiA9IFwiWFwkbHRfc2NyaXB0X2FyZzBcIiAmJiBsdF9kdW1wX0Q9LgorICAgICAgICBsdF9kdW1wX0Y9XGBcJEVDSE8gXCJYXCRsdF9zY3JpcHRfYXJnMFwiIHwgJFNFRCAtZSAncy9eWC8vJyAtZSAncyVeLiovJSUnXGAKKyAgICAgICAgY2F0IFwiXCRsdF9kdW1wX0QvXCRsdF9kdW1wX0ZcIgorICAgICAgICBleGl0IDAKKyAgICAgIDs7CisgICAgLS1sdC0qKQorICAgICAgICBcJEVDSE8gXCJVbnJlY29nbml6ZWQgLS1sdC0gb3B0aW9uOiAnXCRsdF9vcHQnXCIgMT4mMgorICAgICAgICBleGl0IDEKKyAgICAgIDs7CisgICAgZXNhYworICBkb25lCisKKyAgIyBQcmludCB0aGUgZGVidWcgYmFubmVyIGltbWVkaWF0ZWx5OgorICBpZiB0ZXN0IC1uIFwiXCRsdF9vcHRpb25fZGVidWdcIjsgdGhlbgorICAgIGVjaG8gXCIke291dHB1dG5hbWV9OiR7b3V0cHV0fTpcJHtMSU5FTk99OiBsaWJ0b29sIHdyYXBwZXIgKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OXCIgMT4mMgorICBmaQorfQorCisjIFVzZWQgd2hlbiAtLWx0LWRlYnVnLiBQcmludHMgaXRzIGFyZ3VtZW50cyB0byBzdGRvdXQKKyMgKHJlZGlyZWN0aW9uIGlzIHRoZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgY2FsbGVyKQorZnVuY19sdF9kdW1wX2FyZ3MgKCkKK3sKKyAgbHRfZHVtcF9hcmdzX049MTsKKyAgZm9yIGx0X2FyZworICBkbworICAgIFwkRUNITyBcIiR7b3V0cHV0bmFtZX06JHtvdXRwdXR9Olwke0xJTkVOT306IG5ld2FyZ3ZbXCRsdF9kdW1wX2FyZ3NfTl06IFwkbHRfYXJnXCIKKyAgICBsdF9kdW1wX2FyZ3NfTj1cYGV4cHIgXCRsdF9kdW1wX2FyZ3NfTiArIDFcYAorICBkb25lCit9CisKKyMgQ29yZSBmdW5jdGlvbiBmb3IgbGF1bmNoaW5nIHRoZSB0YXJnZXQgYXBwbGljYXRpb24KK2Z1bmNfZXhlY19wcm9ncmFtX2NvcmUgKCkKK3sKKyIKKyAgY2FzZSAkaG9zdCBpbgorICAjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKKyAgKi0qLW1pbmd3IHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyXFxcXFwkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2RpclxcXFxcJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCiAgICAgOzsKIAotICAjIGxpYnRvb2wgbGluayBtb2RlCi0gIGxpbmsgfCByZWxpbmspCi0gICAgbW9kZW5hbWU9IiRtb2RlbmFtZTogbGluayIKKyAgKikKKyAgICAkRUNITyAiXAorICAgICAgaWYgdGVzdCAtbiBcIlwkbHRfb3B0aW9uX2RlYnVnXCI7IHRoZW4KKyAgICAgICAgXCRFQ0hPIFwiJHtvdXRwdXRuYW1lfToke291dHB1dH06XCR7TElORU5PfTogbmV3YXJndlswXTogXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDE+JjIKKyAgICAgICAgZnVuY19sdF9kdW1wX2FyZ3MgXCR7MStcIlwkQFwifSAxPiYyCisgICAgICBmaQorICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9CisiCisgICAgOzsKKyAgZXNhYworICAkRUNITyAiXAorICAgICAgXCRFQ0hPIFwiXCQwOiBjYW5ub3QgZXhlYyBcJHByb2dyYW0gXCQqXCIgMT4mMgorICAgICAgZXhpdCAxCit9CisKKyMgQSBmdW5jdGlvbiB0byBlbmNhcHN1bGF0ZSBsYXVuY2hpbmcgdGhlIHRhcmdldCBhcHBsaWNhdGlvbgorIyBTdHJpcHMgb3B0aW9ucyBpbiB0aGUgLS1sdC0qIG5hbWVzcGFjZSBmcm9tIFwkQCBhbmQKKyMgbGF1bmNoZXMgdGFyZ2V0IGFwcGxpY2F0aW9uIHdpdGggdGhlIHJlbWFpbmluZyBhcmd1bWVudHMuCitmdW5jX2V4ZWNfcHJvZ3JhbSAoKQoreworICBmb3IgbHRfd3JfYXJnCisgIGRvCisgICAgY2FzZSBcJGx0X3dyX2FyZyBpbgorICAgIC0tbHQtKikgOzsKKyAgICAqKSBzZXQgeCBcIlwkQFwiIFwiXCRsdF93cl9hcmdcIjsgc2hpZnQ7OworICAgIGVzYWMKKyAgICBzaGlmdAorICBkb25lCisgIGZ1bmNfZXhlY19wcm9ncmFtX2NvcmUgXCR7MStcIlwkQFwifQorfQorCisgICMgUGFyc2Ugb3B0aW9ucworICBmdW5jX3BhcnNlX2x0X29wdGlvbnMgXCJcJDBcIiBcJHsxK1wiXCRAXCJ9CisKKyAgIyBGaW5kIHRoZSBkaXJlY3RvcnkgdGhhdCB0aGlzIHNjcmlwdCBsaXZlcyBpbi4KKyAgdGhpc2Rpcj1cYFwkRUNITyBcIlwkZmlsZVwiIHwgJFNFRCAncyUvW14vXSokJSUnXGAKKyAgdGVzdCBcInhcJHRoaXNkaXJcIiA9IFwieFwkZmlsZVwiICYmIHRoaXNkaXI9LgorCisgICMgRm9sbG93IHN5bWJvbGljIGxpbmtzIHVudGlsIHdlIGdldCB0byB0aGUgcmVhbCB0aGlzZGlyLgorICBmaWxlPVxgbHMgLWxkIFwiXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KKyAgICBkZXN0ZGlyPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJS9bXi9dKlwkJSUnXGAKKworICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KKyAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCisgICAgICBjYXNlIFwiXCRkZXN0ZGlyXCIgaW4KKyAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OworICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OworICAgICAgZXNhYworICAgIGZpCisKKyAgICBmaWxlPVxgXCRFQ0hPIFwiXCRmaWxlXCIgfCAkU0VEICdzJV4uKi8lJSdcYAorICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAkU0VEIC1uICdzLy4qLT4gLy9wJ1xgCisgIGRvbmUKKworICAjIFVzdWFsbHkgJ25vJywgZXhjZXB0IG9uIGN5Z3dpbi9taW5ndyB3aGVuIGVtYmVkZGVkIGludG8KKyAgIyB0aGUgY3dyYXBwZXIuCisgIFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSPSRmdW5jX2VtaXRfd3JhcHBlcl9hcmcxCisgIGlmIHRlc3QgXCJcJFdSQVBQRVJfU0NSSVBUX0JFTE9OR1NfSU5fT0JKRElSXCIgPSBcInllc1wiOyB0aGVuCisgICAgIyBzcGVjaWFsIGNhc2UgZm9yICcuJworICAgIGlmIHRlc3QgXCJcJHRoaXNkaXJcIiA9IFwiLlwiOyB0aGVuCisgICAgICB0aGlzZGlyPVxgcHdkXGAKKyAgICBmaQorICAgICMgcmVtb3ZlIC5saWJzIGZyb20gdGhpc2RpcgorICAgIGNhc2UgXCJcJHRoaXNkaXJcIiBpbgorICAgICpbXFxcXC9dJG9iamRpciApIHRoaXNkaXI9XGBcJEVDSE8gXCJcJHRoaXNkaXJcIiB8ICRTRUQgJ3MlW1xcXFwvXVteXFxcXC9dKiQlJSdcYCA7OworICAgICRvYmpkaXIgKSAgIHRoaXNkaXI9LiA7OworICAgIGVzYWMKKyAgZmkKKworICAjIFRyeSB0byBnZXQgdGhlIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lLgorICBhYnNkaXI9XGBjZCBcIlwkdGhpc2RpclwiICYmIHB3ZFxgCisgIHRlc3QgLW4gXCJcJGFic2RpclwiICYmIHRoaXNkaXI9XCJcJGFic2RpclwiCisiCisKKwlpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IHllczsgdGhlbgorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT1sdC0nJG91dHB1dG5hbWUnJGV4ZWV4dAorICBwcm9nZGlyPVwiXCR0aGlzZGlyLyRvYmpkaXJcIgorCisgIGlmIHRlc3QgISAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiB8fAorICAgICB7IGZpbGU9XGBscyAtMWR0IFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIFwiXCRwcm9nZGlyLy4uL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHwgJHtTRUR9IDFxXGA7IFxcCisgICAgICAgdGVzdCBcIlhcJGZpbGVcIiAhPSBcIlhcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH07IHRoZW4KKworICAgIGZpbGU9XCJcJFwkLVwkcHJvZ3JhbVwiCisKKyAgICBpZiB0ZXN0ICEgLWQgXCJcJHByb2dkaXJcIjsgdGhlbgorICAgICAgJE1LRElSIFwiXCRwcm9nZGlyXCIKKyAgICBlbHNlCisgICAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgICBmaSIKKworCSAgJEVDSE8gIlwKKworICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5CisgICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgorICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6CisgICAgICBlbHNlCisJJEVDSE8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgorCSRSTSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgorCWV4aXQgMQorICAgICAgZmkKKyAgICBmaQorCisgICAgJE1WIFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8CisgICAgeyAkUk0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7CisgICAgICAkTVYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KKyAgICAkUk0gXCJcJHByb2dkaXIvXCRmaWxlXCIKKyAgZmkiCisJZWxzZQorCSAgJEVDSE8gIlwKKyAgcHJvZ3JhbT0nJG91dHB1dG5hbWUnCisgIHByb2dkaXI9XCJcJHRoaXNkaXIvJG9iamRpclwiCisiCisJZmkKKworCSRFQ0hPICJcCisKKyAgaWYgdGVzdCAtZiBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIjsgdGhlbiIKKworCSMgZml4dXAgdGhlIGRsbCBzZWFyY2hwYXRoIGlmIHdlIG5lZWQgdG8uCisJIworCSMgRml4IHRoZSBETEwgc2VhcmNocGF0aCBpZiB3ZSBuZWVkIHRvLiAgRG8gdGhpcyBiZWZvcmUgcHJlcGVuZGluZworCSMgdG8gc2hsaWJwYXRoLCBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggYXJlIFBBVEggYW5kIHVuaW5zdGFsbGVkCisJIyBsaWJyYXJpZXMgbXVzdCBjb21lIGZpcnN0LgorCWlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorCSAgJEVDSE8gIlwKKyAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAorICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICisiCisJZmkKKworCSMgRXhwb3J0IG91ciBzaGxpYnBhdGhfdmFyIGlmIHdlIGhhdmUgb25lLgorCWlmIHRlc3QgIiRzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGgiID0geWVzICYmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIiAmJiB0ZXN0IC1uICIkdGVtcF9ycGF0aCI7IHRoZW4KKwkgICRFQ0hPICJcCisgICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKKyAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCisKKyAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKKyAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAorICAgICRzaGxpYnBhdGhfdmFyPVxgXCRFQ0hPIFwiXCQkc2hsaWJwYXRoX3ZhclwiIHwgJFNFRCAncy86OipcJC8vJ1xgCisKKyAgICBleHBvcnQgJHNobGlicGF0aF92YXIKKyIKKwlmaQorCisJJEVDSE8gIlwKKyAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCisgICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgorICAgICAgZnVuY19leGVjX3Byb2dyYW0gXCR7MStcIlwkQFwifQorICAgIGZpCisgIGVsc2UKKyAgICAjIFRoZSBwcm9ncmFtIGRvZXNuJ3QgZXhpc3QuCisgICAgXCRFQ0hPIFwiXCQwOiBlcnJvcjogXFxcYFwkcHJvZ2Rpci9cJHByb2dyYW0nIGRvZXMgbm90IGV4aXN0XCIgMT4mMgorICAgIFwkRUNITyBcIlRoaXMgc2NyaXB0IGlzIGp1c3QgYSB3cmFwcGVyIGZvciBcJHByb2dyYW0uXCIgMT4mMgorICAgIFwkRUNITyBcIlNlZSB0aGUgJFBBQ0tBR0UgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBpbmZvcm1hdGlvbi5cIiAxPiYyCisgICAgZXhpdCAxCisgIGZpCitmaVwKKyIKK30KKworCisjIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMKKyMgZW1pdCB0aGUgc291cmNlIGNvZGUgZm9yIGEgd3JhcHBlciBleGVjdXRhYmxlIG9uIHN0ZG91dAorIyBNdXN0IE9OTFkgYmUgY2FsbGVkIGZyb20gd2l0aGluIGZ1bmNfbW9kZV9saW5rIGJlY2F1c2UKKyMgaXQgZGVwZW5kcyBvbiBhIG51bWJlciBvZiB2YXJpYWJsZSBzZXQgdGhlcmVpbi4KK2Z1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgKCkKK3sKKwljYXQgPDxFT0YKKworLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQorICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorCisgICBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKKyAgIGxpYnJhcmllcyB0aGF0IGl0IGRlcGVuZHMgb24gYXJlIGluc3RhbGxlZC4KKworICAgVGhpcyB3cmFwcGVyIGV4ZWN1dGFibGUgc2hvdWxkIG5ldmVyIGJlIG1vdmVkIG91dCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorICAgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgorKi8KK0VPRgorCSAgICBjYXQgPDwiRU9GIgorI2lmZGVmIF9NU0NfVkVSCisjIGRlZmluZSBfQ1JUX1NFQ1VSRV9OT19ERVBSRUNBVEUgMQorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpZmRlZiBfTVNDX1ZFUgorIyBpbmNsdWRlIDxkaXJlY3QuaD4KKyMgaW5jbHVkZSA8cHJvY2Vzcy5oPgorIyBpbmNsdWRlIDxpby5oPgorI2Vsc2UKKyMgaW5jbHVkZSA8dW5pc3RkLmg+CisjIGluY2x1ZGUgPHN0ZGludC5oPgorIyBpZmRlZiBfX0NZR1dJTl9fCisjICBpbmNsdWRlIDxpby5oPgorIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8bWFsbG9jLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworLyogZGVjbGFyYXRpb25zIG9mIG5vbi1BTlNJIGZ1bmN0aW9ucyAqLworI2lmIGRlZmluZWQoX19NSU5HVzMyX18pCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworaW50IF9wdXRlbnYgKGNvbnN0IGNoYXIgKik7CisjIGVuZGlmCisjZWxpZiBkZWZpbmVkKF9fQ1lHV0lOX18pCisjIGlmZGVmIF9fU1RSSUNUX0FOU0lfXworY2hhciAqcmVhbHBhdGggKGNvbnN0IGNoYXIgKiwgY2hhciAqKTsKK2ludCBwdXRlbnYgKGNoYXIgKik7CitpbnQgc2V0ZW52IChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KTsKKyMgZW5kaWYKKy8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisjZW5kaWYKKworLyogcG9ydGFiaWxpdHkgZGVmaW5lcywgZXhjbHVkaW5nIHBhdGggaGFuZGxpbmcgbWFjcm9zICovCisjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorIyBkZWZpbmUgU19JWFVTUiBfU19JRVhFQworIyBpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKKyMgIGRlZmluZSBfSU5UUFRSX1RfREVGSU5FRAorIyAgZGVmaW5lIGludHB0cl90IGludAorIyBlbmRpZgorI2VsaWYgZGVmaW5lZChfX01JTkdXMzJfXykKKyMgZGVmaW5lIHNldG1vZGUgX3NldG1vZGUKKyMgZGVmaW5lIHN0YXQgICAgX3N0YXQKKyMgZGVmaW5lIGNobW9kICAgX2NobW9kCisjIGRlZmluZSBnZXRjd2QgIF9nZXRjd2QKKyMgZGVmaW5lIHB1dGVudiAgX3B1dGVudgorI2VsaWYgZGVmaW5lZChfX0NZR1dJTl9fKQorIyBkZWZpbmUgSEFWRV9TRVRFTlYKKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKy8qICNlbGlmIGRlZmluZWQgKG90aGVyIHBsYXRmb3JtcykgLi4uICovCisjZW5kaWYKKworI2lmIGRlZmluZWQoUEFUSF9NQVgpCisjIGRlZmluZSBMVF9QQVRITUFYIFBBVEhfTUFYCisjZWxpZiBkZWZpbmVkKE1BWFBBVEhMRU4pCisjIGRlZmluZSBMVF9QQVRITUFYIE1BWFBBVEhMRU4KKyNlbHNlCisjIGRlZmluZSBMVF9QQVRITUFYIDEwMjQKKyNlbmRpZgorCisjaWZuZGVmIFNfSVhPVEgKKyMgZGVmaW5lIFNfSVhPVEggMAorI2VuZGlmCisjaWZuZGVmIFNfSVhHUlAKKyMgZGVmaW5lIFNfSVhHUlAgMAorI2VuZGlmCisKKy8qIHBhdGggaGFuZGxpbmcgcG9ydGFiaWxpdHkgbWFjcm9zICovCisjaWZuZGVmIERJUl9TRVBBUkFUT1IKKyMgZGVmaW5lIERJUl9TRVBBUkFUT1IgJy8nCisjIGRlZmluZSBQQVRIX1NFUEFSQVRPUiAnOicKKyNlbmRpZgorCisjaWYgZGVmaW5lZCAoX1dJTjMyKSB8fCBkZWZpbmVkIChfX01TRE9TX18pIHx8IGRlZmluZWQgKF9fREpHUFBfXykgfHwgXAorICBkZWZpbmVkIChfX09TMl9fKQorIyBkZWZpbmUgSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0KKyMgZGVmaW5lIEZPUEVOX1dCICJ3YiIKKyMgaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyAgZGVmaW5lIERJUl9TRVBBUkFUT1JfMiAnXFwnCisjIGVuZGlmCisjIGlmbmRlZiBQQVRIX1NFUEFSQVRPUl8yCisjICBkZWZpbmUgUEFUSF9TRVBBUkFUT1JfMiAnOycKKyMgZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIERJUl9TRVBBUkFUT1JfMgorIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgKChjaCkgPT0gRElSX1NFUEFSQVRPUikKKyNlbHNlIC8qIERJUl9TRVBBUkFUT1JfMiAqLworIyBkZWZpbmUgSVNfRElSX1NFUEFSQVRPUihjaCkgXAorCSgoKGNoKSA9PSBESVJfU0VQQVJBVE9SKSB8fCAoKGNoKSA9PSBESVJfU0VQQVJBVE9SXzIpKQorI2VuZGlmIC8qIERJUl9TRVBBUkFUT1JfMiAqLworCisjaWZuZGVmIFBBVEhfU0VQQVJBVE9SXzIKKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUikKKyNlbHNlIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKyMgZGVmaW5lIElTX1BBVEhfU0VQQVJBVE9SKGNoKSAoKGNoKSA9PSBQQVRIX1NFUEFSQVRPUl8yKQorI2VuZGlmIC8qIFBBVEhfU0VQQVJBVE9SXzIgKi8KKworI2lmbmRlZiBGT1BFTl9XQgorIyBkZWZpbmUgRk9QRU5fV0IgInciCisjZW5kaWYKKyNpZm5kZWYgX09fQklOQVJZCisjIGRlZmluZSBfT19CSU5BUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgWE1BTExPQyh0eXBlLCBudW0pICAgICAgKCh0eXBlICopIHhtYWxsb2MgKChudW0pICogc2l6ZW9mKHR5cGUpKSkKKyNkZWZpbmUgWEZSRUUoc3RhbGUpIGRvIHsgXAorICBpZiAoc3RhbGUpIHsgZnJlZSAoKHZvaWQgKikgc3RhbGUpOyBzdGFsZSA9IDA7IH0gXAorfSB3aGlsZSAoMCkKKworI2lmIGRlZmluZWQoTFRfREVCVUdXUkFQUEVSKQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDE7CisjZWxzZQorc3RhdGljIGludCBsdF9kZWJ1ZyA9IDA7CisjZW5kaWYKKworY29uc3QgY2hhciAqcHJvZ3JhbV9uYW1lID0gImxpYnRvb2wtd3JhcHBlciI7IC8qIGluIGNhc2UgeHN0cmR1cCBmYWlscyAqLworCit2b2lkICp4bWFsbG9jIChzaXplX3QgbnVtKTsKK2NoYXIgKnhzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZyk7Citjb25zdCBjaGFyICpiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOworY2hhciAqZmluZF9leGVjdXRhYmxlIChjb25zdCBjaGFyICp3cmFwcGVyKTsKK2NoYXIgKmNoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYyk7CitpbnQgbWFrZV9leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2ludCBjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKTsKK2NoYXIgKnN0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpOwordm9pZCBsdF9kZWJ1Z3ByaW50ZiAoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbm51bGwgKGNvbnN0IGNoYXIgKnMpOworc3RhdGljIGNvbnN0IGNoYXIgKm5vbmVtcHR5IChjb25zdCBjaGFyICpzKTsKK3ZvaWQgbHRfc2V0ZW52IChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICpsdF9leHRlbmRfc3RyIChjb25zdCBjaGFyICpvcmlnX3ZhbHVlLCBjb25zdCBjaGFyICphZGQsIGludCB0b19lbmQpOwordm9pZCBsdF91cGRhdGVfZXhlX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKTsKK3ZvaWQgbHRfdXBkYXRlX2xpYl9wYXRoIChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICp2YWx1ZSk7CitjaGFyICoqcHJlcGFyZV9zcGF3biAoY2hhciAqKmFyZ3YpOwordm9pZCBsdF9kdW1wX3NjcmlwdCAoRklMRSAqZik7CitFT0YKKworCSAgICBjYXQgPDxFT0YKK3ZvbGF0aWxlIGNvbnN0IGNoYXIgKiBNQUdJQ19FWEUgPSAiJG1hZ2ljX2V4ZSI7Citjb25zdCBjaGFyICogTElCX1BBVEhfVkFSTkFNRSA9ICIkc2hsaWJwYXRoX3ZhciI7CitFT0YKKworCSAgICBpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCisgICAgICAgICAgICAgIGZ1bmNfdG9faG9zdF9wYXRoICIkdGVtcF9ycGF0aCIKKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBMSUJfUEFUSF9WQUxVRSAgID0gIiRmdW5jX3RvX2hvc3RfcGF0aF9yZXN1bHQiOworRU9GCisJICAgIGVsc2UKKwkgICAgICBjYXQgPDwiRU9GIgorY29uc3QgY2hhciAqIExJQl9QQVRIX1ZBTFVFICAgPSAiIjsKK0VPRgorCSAgICBmaQorCisJICAgIGlmIHRlc3QgLW4gIiRkbGxzZWFyY2hwYXRoIjsgdGhlbgorICAgICAgICAgICAgICBmdW5jX3RvX2hvc3RfcGF0aCAiJGRsbHNlYXJjaHBhdGg6IgorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIEVYRV9QQVRIX1ZBUk5BTUUgPSAiUEFUSCI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIkZnVuY190b19ob3N0X3BhdGhfcmVzdWx0IjsKK0VPRgorCSAgICBlbHNlCisJICAgICAgY2F0IDw8IkVPRiIKK2NvbnN0IGNoYXIgKiBFWEVfUEFUSF9WQVJOQU1FID0gIiI7Citjb25zdCBjaGFyICogRVhFX1BBVEhfVkFMVUUgICA9ICIiOworRU9GCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KKwkgICAgICBjYXQgPDxFT0YKK2NvbnN0IGNoYXIgKiBUQVJHRVRfUFJPR1JBTV9OQU1FID0gImx0LSRvdXRwdXRuYW1lIjsgLyogaG9wZWZ1bGx5LCBubyAuZXhlICovCitFT0YKKwkgICAgZWxzZQorCSAgICAgIGNhdCA8PEVPRgorY29uc3QgY2hhciAqIFRBUkdFVF9QUk9HUkFNX05BTUUgPSAiJG91dHB1dG5hbWUiOyAvKiBob3BlZnVsbHksIG5vIC5leGUgKi8KK0VPRgorCSAgICBmaQorCisKKwkgICAgY2F0IDw8IkVPRiIKKworI2RlZmluZSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAgICAgICAgICItLWx0LSIKKworc3RhdGljIGNvbnN0IGNoYXIgKmx0d3JhcHBlcl9vcHRpb25fcHJlZml4ID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVg7CitzdGF0aWMgY29uc3QgY2hhciAqZHVtcHNjcmlwdF9vcHQgICAgICAgPSBMVFdSQVBQRVJfT1BUSU9OX1BSRUZJWCAiZHVtcC1zY3JpcHQiOworc3RhdGljIGNvbnN0IGNoYXIgKmRlYnVnX29wdCAgICAgICAgICAgID0gTFRXUkFQUEVSX09QVElPTl9QUkVGSVggImRlYnVnIjsKKworaW50CittYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQoreworICBjaGFyICoqbmV3YXJnejsKKyAgaW50ICBuZXdhcmdjOworICBjaGFyICp0bXBfcGF0aHNwZWM7CisgIGNoYXIgKmFjdHVhbF9jd3JhcHBlcl9wYXRoOworICBjaGFyICphY3R1YWxfY3dyYXBwZXJfbmFtZTsKKyAgY2hhciAqdGFyZ2V0X25hbWU7CisgIGNoYXIgKmx0X2FyZ3ZfemVybzsKKyAgaW50cHRyX3QgcnZhbCA9IDEyNzsKKworICBpbnQgaTsKKworICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKKyAgbmV3YXJneiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIHZlcnkgc2ltcGxlIGFyZyBwYXJzaW5nOyBkb24ndCB3YW50IHRvIHJlbHkgb24gZ2V0b3B0CisgICAqIGFsc28sIGNvcHkgYWxsIG5vbiBjd3JhcHBlciBvcHRpb25zIHRvIG5ld2FyZ3osIGV4Y2VwdAorICAgKiBhcmd6WzBdLCB3aGljaCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5CisgICAqLworICBuZXdhcmdjPTA7CisgIGZvciAoaSA9IDE7IGkgPCBhcmdjOyBpKyspCisgICAgeworICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZHVtcHNjcmlwdF9vcHQpID09IDApCisJeworRU9GCisJICAgIGNhc2UgIiRob3N0IiBpbgorCSAgICAgICptaW5ndyogfCAqY3lnd2luKiApCisJCSMgbWFrZSBzdGRvdXQgdXNlICJ1bml4IiBsaW5lIGVuZGluZ3MKKwkJZWNobyAiICAgICAgICAgIHNldG1vZGUoMSxfT19CSU5BUlkpOyIKKwkJOzsKKwkgICAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKwkgIGx0X2R1bXBfc2NyaXB0IChzdGRvdXQpOworCSAgcmV0dXJuIDA7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgZGVidWdfb3B0KSA9PSAwKQorCXsKKyAgICAgICAgICBsdF9kZWJ1ZyA9IDE7CisgICAgICAgICAgY29udGludWU7CisJfQorICAgICAgaWYgKHN0cmNtcCAoYXJndltpXSwgbHR3cmFwcGVyX29wdGlvbl9wcmVmaXgpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAvKiBob3dldmVyLCBpZiB0aGVyZSBpcyBhbiBvcHRpb24gaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLCBidXQgaXQgaXMgbm90IG9uZSBvZiB0aGUgb25lcyB3ZSBrbm93IGFib3V0IGFuZAorICAgICAgICAgICAgIGhhdmUgYWxyZWFkeSBkZWFsdCB3aXRoLCBhYm92ZSAoaW5sdWRpbmcgZHVtcC1zY3JpcHQpLCB0aGVuCisgICAgICAgICAgICAgcmVwb3J0IGFuIGVycm9yLiBPdGhlcndpc2UsIHRhcmdldHMgbWlnaHQgYmVnaW4gdG8gYmVsaWV2ZQorICAgICAgICAgICAgIHRoZXkgYXJlIGFsbG93ZWQgdG8gdXNlIG9wdGlvbnMgaW4gdGhlIExUV1JBUFBFUl9PUFRJT05fUFJFRklYCisgICAgICAgICAgICAgbmFtZXNwYWNlLiBUaGUgZmlyc3QgdGltZSBhbnkgdXNlciBjb21wbGFpbnMgYWJvdXQgdGhpcywgd2UnbGwKKyAgICAgICAgICAgICBuZWVkIHRvIG1ha2UgTFRXUkFQUEVSX09QVElPTl9QUkVGSVggYSBjb25maWd1cmUtdGltZSBvcHRpb24KKyAgICAgICAgICAgICBvciBhIGNvbmZpZ3VyZS5hYy1zZXR0YWJsZSB2YWx1ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgInVucmVjb2duaXplZCAlcyBvcHRpb246ICclcyciLAorICAgICAgICAgICAgICAgICAgICBsdHdyYXBwZXJfb3B0aW9uX3ByZWZpeCwgYXJndltpXSk7CisgICAgICAgIH0KKyAgICAgIC8qIG90aGVyd2lzZSAuLi4gKi8KKyAgICAgIG5ld2FyZ3pbKytuZXdhcmdjXSA9IHhzdHJkdXAgKGFyZ3ZbaV0pOworICAgIH0KKyAgbmV3YXJnelsrK25ld2FyZ2NdID0gTlVMTDsKKworRU9GCisJICAgIGNhdCA8PEVPRgorICAvKiBUaGUgR05VIGJhbm5lciBtdXN0IGJlIHRoZSBmaXJzdCBub24tZXJyb3IgZGVidWcgbWVzc2FnZSAqLworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAibGlidG9vbCB3cmFwcGVyIChHTlUgJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTlxuIik7CitFT0YKKwkgICAgY2F0IDw8IkVPRiIKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWluKSBhcmd2WzBdOiAlc1xuIiwgYXJndlswXSk7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgcHJvZ3JhbV9uYW1lOiAlc1xuIiwgcHJvZ3JhbV9uYW1lKTsKKworICB0bXBfcGF0aHNwZWMgPSBmaW5kX2V4ZWN1dGFibGUgKGFyZ3ZbMF0pOworICBpZiAodG1wX3BhdGhzcGVjID09IE5VTEwpCisgICAgbHRfZmF0YWwgKF9fRklMRV9fLCBfX0xJTkVfXywgImNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChiZWZvcmUgc3ltbGluayBjaGFzZSkgYXQ6ICVzXG4iLAorCQkgIHRtcF9wYXRoc3BlYyk7CisKKyAgYWN0dWFsX2N3cmFwcGVyX3BhdGggPSBjaGFzZV9zeW1saW5rcyAodG1wX3BhdGhzcGVjKTsKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKyAgICAgICAgICAgICAgICAgICIobWFpbikgZm91bmQgZXhlIChhZnRlciBzeW1saW5rIGNoYXNlKSBhdDogJXNcbiIsCisJCSAgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHhzdHJkdXAgKGJhc2VfbmFtZSAoYWN0dWFsX2N3cmFwcGVyX3BhdGgpKTsKKyAgc3RyZW5kemFwIChhY3R1YWxfY3dyYXBwZXJfcGF0aCwgYWN0dWFsX2N3cmFwcGVyX25hbWUpOworCisgIC8qIHdyYXBwZXIgbmFtZSB0cmFuc2Zvcm1zICovCisgIHN0cmVuZHphcCAoYWN0dWFsX2N3cmFwcGVyX25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKGFjdHVhbF9jd3JhcHBlcl9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAoYWN0dWFsX2N3cmFwcGVyX25hbWUpOworICBhY3R1YWxfY3dyYXBwZXJfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICAvKiB0YXJnZXRfbmFtZSB0cmFuc2Zvcm1zIC0tIHVzZSBhY3R1YWwgdGFyZ2V0IHByb2dyYW0gbmFtZTsgbWlnaHQgaGF2ZSBsdC0gcHJlZml4ICovCisgIHRhcmdldF9uYW1lID0geHN0cmR1cCAoYmFzZV9uYW1lIChUQVJHRVRfUFJPR1JBTV9OQU1FKSk7CisgIHN0cmVuZHphcCAodGFyZ2V0X25hbWUsICIuZXhlIik7CisgIHRtcF9wYXRoc3BlYyA9IGx0X2V4dGVuZF9zdHIgKHRhcmdldF9uYW1lLCAiLmV4ZSIsIDEpOworICBYRlJFRSAodGFyZ2V0X25hbWUpOworICB0YXJnZXRfbmFtZSA9IHRtcF9wYXRoc3BlYzsKKyAgdG1wX3BhdGhzcGVjID0gMDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobWFpbikgbGlidG9vbCB0YXJnZXQgbmFtZTogJXNcbiIsCisJCSAgdGFyZ2V0X25hbWUpOworRU9GCisKKwkgICAgY2F0IDw8RU9GCisgIG5ld2FyZ3pbMF0gPQorICAgIFhNQUxMT0MgKGNoYXIsIChzdHJsZW4gKGFjdHVhbF9jd3JhcHBlcl9wYXRoKSArCisJCSAgICBzdHJsZW4gKCIkb2JqZGlyIikgKyAxICsgc3RybGVuIChhY3R1YWxfY3dyYXBwZXJfbmFtZSkgKyAxKSk7CisgIHN0cmNweSAobmV3YXJnelswXSwgYWN0dWFsX2N3cmFwcGVyX3BhdGgpOworICBzdHJjYXQgKG5ld2FyZ3pbMF0sICIkb2JqZGlyIik7CisgIHN0cmNhdCAobmV3YXJnelswXSwgIi8iKTsKK0VPRgorCisJICAgIGNhdCA8PCJFT0YiCisgIC8qIHN0b3AgaGVyZSwgYW5kIGNvcHkgc28gd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGlzIHR3aWNlICovCisgIHRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKG5ld2FyZ3pbMF0pOworCisgIC8qIGRvIE5PVCB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUsIHNvIHVzZSBhY3R1YWxfY3dyYXBwZXJfbmFtZSAqLworICBzdHJjYXQgKG5ld2FyZ3pbMF0sIGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICAvKiBETyB3YW50IHRoZSBsdC0gcHJlZml4IGhlcmUgaWYgaXQgZXhpc3RzLCBzbyB1c2UgdGFyZ2V0X25hbWUgKi8KKyAgbHRfYXJndl96ZXJvID0gbHRfZXh0ZW5kX3N0ciAodG1wX3BhdGhzcGVjLCB0YXJnZXRfbmFtZSwgMSk7CisgIFhGUkVFICh0bXBfcGF0aHNwZWMpOworICB0bXBfcGF0aHNwZWMgPSBOVUxMOworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkgICAgY2F0IDw8IkVPRiIKKyAgeworICAgIGNoYXIqIHA7CisgICAgd2hpbGUgKChwID0gc3RyY2hyIChuZXdhcmd6WzBdLCAnXFwnKSkgIT0gTlVMTCkKKyAgICAgIHsKKwkqcCA9ICcvJzsKKyAgICAgIH0KKyAgICB3aGlsZSAoKHAgPSBzdHJjaHIgKGx0X2FyZ3ZfemVybywgJ1xcJykpICE9IE5VTEwpCisgICAgICB7CisJKnAgPSAnLyc7CisgICAgICB9CisgIH0KK0VPRgorCSAgICA7OworCSAgICBlc2FjCisKKwkgICAgY2F0IDw8IkVPRiIKKyAgWEZSRUUgKHRhcmdldF9uYW1lKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9wYXRoKTsKKyAgWEZSRUUgKGFjdHVhbF9jd3JhcHBlcl9uYW1lKTsKKworICBsdF9zZXRlbnYgKCJCSU5fU0giLCAieHBnNCIpOyAvKiBmb3IgVHJ1NjQgKi8KKyAgbHRfc2V0ZW52ICgiRFVBTENBU0UiLCAiMSIpOyAgLyogZm9yIE1TSyBzaCAqLworICAvKiBVcGRhdGUgdGhlIERMTCBzZWFyY2hwYXRoLiAgRVhFX1BBVEhfVkFMVUUgKCRkbGxzZWFyY2hwYXRoKSBtdXN0CisgICAgIGJlIHByZXBlbmRlZCBiZWZvcmUgKHRoYXQgaXMsIGFwcGVhciBhZnRlcikgTElCX1BBVEhfVkFMVUUgKCR0ZW1wX3JwYXRoKQorICAgICBiZWNhdXNlIG9uIFdpbmRvd3MsIGJvdGggKl9WQVJOQU1FcyBhcmUgUEFUSCBidXQgdW5pbnN0YWxsZWQKKyAgICAgbGlicmFyaWVzIG11c3QgY29tZSBmaXJzdC4gKi8KKyAgbHRfdXBkYXRlX2V4ZV9wYXRoIChFWEVfUEFUSF9WQVJOQU1FLCBFWEVfUEFUSF9WQUxVRSk7CisgIGx0X3VwZGF0ZV9saWJfcGF0aCAoTElCX1BBVEhfVkFSTkFNRSwgTElCX1BBVEhfVkFMVUUpOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIobWFpbikgbHRfYXJndl96ZXJvOiAlc1xuIiwKKwkJICBub25udWxsIChsdF9hcmd2X3plcm8pKTsKKyAgZm9yIChpID0gMDsgaSA8IG5ld2FyZ2M7IGkrKykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKG1haW4pIG5ld2FyZ3pbJWRdOiAlc1xuIiwKKwkJICAgICAgaSwgbm9ubnVsbCAobmV3YXJneltpXSkpOworICAgIH0KKworRU9GCisKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKyAgLyogZXhlY3YgZG9lc24ndCBhY3R1YWxseSB3b3JrIG9uIG1pbmd3IGFzIGV4cGVjdGVkIG9uIHVuaXggKi8KKyAgbmV3YXJneiA9IHByZXBhcmVfc3Bhd24gKG5ld2FyZ3opOworICBydmFsID0gX3NwYXdudiAoX1BfV0FJVCwgbHRfYXJndl96ZXJvLCAoY29uc3QgY2hhciAqIGNvbnN0ICopIG5ld2FyZ3opOworICBpZiAocnZhbCA9PSAtMSkKKyAgICB7CisgICAgICAvKiBmYWlsZWQgdG8gc3RhcnQgcHJvY2VzcyAqLworICAgICAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywKKwkJICAgICAgIihtYWluKSBmYWlsZWQgdG8gbGF1bmNoIHRhcmdldCBcIiVzXCI6ICVzXG4iLAorCQkgICAgICBsdF9hcmd2X3plcm8sIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgICAgIHJldHVybiAxMjc7CisgICAgfQorICByZXR1cm4gcnZhbDsKK0VPRgorCQk7OworCSAgICAgICopCisJCWNhdCA8PCJFT0YiCisgIGV4ZWN2IChsdF9hcmd2X3plcm8sIG5ld2FyZ3opOworICByZXR1cm4gcnZhbDsgLyogPTEyNywgYnV0IGF2b2lkcyB1bnVzZWQgdmFyaWFibGUgd2FybmluZyAqLworRU9GCisJCTs7CisJICAgIGVzYWMKKworCSAgICBjYXQgPDwiRU9GIgorfQorCit2b2lkICoKK3htYWxsb2MgKHNpemVfdCBudW0pCit7CisgIHZvaWQgKnAgPSAodm9pZCAqKSBtYWxsb2MgKG51bSk7CisgIGlmICghcCkKKyAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLCAibWVtb3J5IGV4aGF1c3RlZCIpOworCisgIHJldHVybiBwOworfQorCitjaGFyICoKK3hzdHJkdXAgKGNvbnN0IGNoYXIgKnN0cmluZykKK3sKKyAgcmV0dXJuIHN0cmluZyA/IHN0cmNweSAoKGNoYXIgKikgeG1hbGxvYyAoc3RybGVuIChzdHJpbmcpICsgMSksCisJCQkgIHN0cmluZykgOiBOVUxMOworfQorCitjb25zdCBjaGFyICoKK2Jhc2VfbmFtZSAoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgY29uc3QgY2hhciAqYmFzZTsKKworI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQorICAvKiBTa2lwIG92ZXIgdGhlIGRpc2sgbmFtZSBpbiBNU0RPUyBwYXRobmFtZXMuICovCisgIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcikgbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCisgICAgbmFtZSArPSAyOworI2VuZGlmCisKKyAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKKyAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQorICAgICAgYmFzZSA9IG5hbWUgKyAxOworICByZXR1cm4gYmFzZTsKK30KKworaW50CitjaGVja19leGVjdXRhYmxlIChjb25zdCBjaGFyICpwYXRoKQoreworICBzdHJ1Y3Qgc3RhdCBzdDsKKworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLCAiKGNoZWNrX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmICgoc3RhdCAocGF0aCwgJnN0KSA+PSAwKQorICAgICAgJiYgKHN0LnN0X21vZGUgJiAoU19JWFVTUiB8IFNfSVhHUlAgfCBTX0lYT1RIKSkpCisgICAgcmV0dXJuIDE7CisgIGVsc2UKKyAgICByZXR1cm4gMDsKK30KKworaW50CittYWtlX2V4ZWN1dGFibGUgKGNvbnN0IGNoYXIgKnBhdGgpCit7CisgIGludCBydmFsID0gMDsKKyAgc3RydWN0IHN0YXQgc3Q7CisKKyAgbHRfZGVidWdwcmludGYgKF9fRklMRV9fLCBfX0xJTkVfXywgIihtYWtlX2V4ZWN1dGFibGUpOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbmVtcHR5IChwYXRoKSk7CisgIGlmICgoIXBhdGgpIHx8ICghKnBhdGgpKQorICAgIHJldHVybiAwOworCisgIGlmIChzdGF0IChwYXRoLCAmc3QpID49IDApCisgICAgeworICAgICAgcnZhbCA9IGNobW9kIChwYXRoLCBzdC5zdF9tb2RlIHwgU19JWE9USCB8IFNfSVhHUlAgfCBTX0lYVVNSKTsKKyAgICB9CisgIHJldHVybiBydmFsOworfQorCisvKiBTZWFyY2hlcyBmb3IgdGhlIGZ1bGwgcGF0aCBvZiB0aGUgd3JhcHBlci4gIFJldHVybnMKKyAgIG5ld2x5IGFsbG9jYXRlZCBmdWxsIHBhdGggbmFtZSBpZiBmb3VuZCwgTlVMTCBvdGhlcndpc2UKKyAgIERvZXMgbm90IGNoYXNlIHN5bWxpbmtzLCBldmVuIG9uIHBsYXRmb3JtcyB0aGF0IHN1cHBvcnQgdGhlbS4KKyovCitjaGFyICoKK2ZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciAqd3JhcHBlcikKK3sKKyAgaW50IGhhc19zbGFzaCA9IDA7CisgIGNvbnN0IGNoYXIgKnA7CisgIGNvbnN0IGNoYXIgKnBfbmV4dDsKKyAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCisgIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKKyAgaW50IHRtcF9sZW47CisgIGNoYXIgKmNvbmNhdF9uYW1lOworCisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sICIoZmluZF9leGVjdXRhYmxlKTogJXNcbiIsCisgICAgICAgICAgICAgICAgICBub25lbXB0eSAod3JhcHBlcikpOworCisgIGlmICgod3JhcHBlciA9PSBOVUxMKSB8fCAoKndyYXBwZXIgPT0gJ1wwJykpCisgICAgcmV0dXJuIE5VTEw7CisKKyAgLyogQWJzb2x1dGUgcGF0aD8gKi8KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgaWYgKGlzYWxwaGEgKCh1bnNpZ25lZCBjaGFyKSB3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKKyAgICB7CisgICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOworICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKwlyZXR1cm4gY29uY2F0X25hbWU7CisgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworICAgIH0KKyAgZWxzZQorICAgIHsKKyNlbmRpZgorICAgICAgaWYgKElTX0RJUl9TRVBBUkFUT1IgKHdyYXBwZXJbMF0pKQorCXsKKwkgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7CisJICBpZiAoY2hlY2tfZXhlY3V0YWJsZSAoY29uY2F0X25hbWUpKQorCSAgICByZXR1cm4gY29uY2F0X25hbWU7CisJICBYRlJFRSAoY29uY2F0X25hbWUpOworCX0KKyNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKKyAgICB9CisjZW5kaWYKKworICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQorICAgIGlmICgqcCA9PSAnLycpCisgICAgICB7CisJaGFzX3NsYXNoID0gMTsKKwlicmVhazsKKyAgICAgIH0KKyAgaWYgKCFoYXNfc2xhc2gpCisgICAgeworICAgICAgLyogbm8gc2xhc2hlczsgc2VhcmNoIFBBVEggKi8KKyAgICAgIGNvbnN0IGNoYXIgKnBhdGggPSBnZXRlbnYgKCJQQVRIIik7CisgICAgICBpZiAocGF0aCAhPSBOVUxMKQorCXsKKwkgIGZvciAocCA9IHBhdGg7ICpwOyBwID0gcF9uZXh0KQorCSAgICB7CisJICAgICAgY29uc3QgY2hhciAqcTsKKwkgICAgICBzaXplX3QgcF9sZW47CisJICAgICAgZm9yIChxID0gcDsgKnE7IHErKykKKwkJaWYgKElTX1BBVEhfU0VQQVJBVE9SICgqcSkpCisJCSAgYnJlYWs7CisJICAgICAgcF9sZW4gPSBxIC0gcDsKKwkgICAgICBwX25leHQgPSAoKnEgPT0gJ1wwJyA/IHEgOiBxICsgMSk7CisJICAgICAgaWYgKHBfbGVuID09IDApCisJCXsKKwkJICAvKiBlbXB0eSBwYXRoOiBjdXJyZW50IGRpcmVjdG9yeSAqLworCQkgIGlmIChnZXRjd2QgKHRtcCwgTFRfUEFUSE1BWCkgPT0gTlVMTCkKKwkJICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub25udWxsIChzdHJlcnJvciAoZXJybm8pKSk7CisJCSAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKwkJICBtZW1jcHkgKGNvbmNhdF9uYW1lLCB0bXAsIHRtcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOworCQkgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisJCX0KKwkgICAgICBlbHNlCisJCXsKKwkJICBjb25jYXRfbmFtZSA9CisJCSAgICBYTUFMTE9DIChjaGFyLCBwX2xlbiArIDEgKyBzdHJsZW4gKHdyYXBwZXIpICsgMSk7CisJCSAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOworCQkgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKKwkJICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKKwkJfQorCSAgICAgIGlmIChjaGVja19leGVjdXRhYmxlIChjb25jYXRfbmFtZSkpCisJCXJldHVybiBjb25jYXRfbmFtZTsKKwkgICAgICBYRlJFRSAoY29uY2F0X25hbWUpOworCSAgICB9CisJfQorICAgICAgLyogbm90IGZvdW5kIGluIFBBVEg7IGFzc3VtZSBjdXJkaXIgKi8KKyAgICB9CisgIC8qIFJlbGF0aXZlIHBhdGggfCBub3QgZm91bmQgaW4gcGF0aDogcHJlcGVuZCBjd2QgKi8KKyAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQorICAgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sICJnZXRjd2QgZmFpbGVkOiAlcyIsCisgICAgICAgICAgICAgIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKyAgdG1wX2xlbiA9IHN0cmxlbiAodG1wKTsKKyAgY29uY2F0X25hbWUgPSBYTUFMTE9DIChjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbiAod3JhcHBlcikgKyAxKTsKKyAgbWVtY3B5IChjb25jYXRfbmFtZSwgdG1wLCB0bXBfbGVuKTsKKyAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7CisgIHN0cmNweSAoY29uY2F0X25hbWUgKyB0bXBfbGVuICsgMSwgd3JhcHBlcik7CisKKyAgaWYgKGNoZWNrX2V4ZWN1dGFibGUgKGNvbmNhdF9uYW1lKSkKKyAgICByZXR1cm4gY29uY2F0X25hbWU7CisgIFhGUkVFIChjb25jYXRfbmFtZSk7CisgIHJldHVybiBOVUxMOworfQorCitjaGFyICoKK2NoYXNlX3N5bWxpbmtzIChjb25zdCBjaGFyICpwYXRoc3BlYykKK3sKKyNpZm5kZWYgU19JU0xOSworICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworI2Vsc2UKKyAgY2hhciBidWZbTFRfUEFUSE1BWF07CisgIHN0cnVjdCBzdGF0IHM7CisgIGNoYXIgKnRtcF9wYXRoc3BlYyA9IHhzdHJkdXAgKHBhdGhzcGVjKTsKKyAgY2hhciAqcDsKKyAgaW50IGhhc19zeW1saW5rcyA9IDA7CisgIHdoaWxlIChzdHJsZW4gKHRtcF9wYXRoc3BlYykgJiYgIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICAgICAiY2hlY2tpbmcgcGF0aCBjb21wb25lbnQgZm9yIHN5bWxpbmtzOiAlc1xuIiwKKwkJICAgICAgdG1wX3BhdGhzcGVjKTsKKyAgICAgIGlmIChsc3RhdCAodG1wX3BhdGhzcGVjLCAmcykgPT0gMCkKKwl7CisJICBpZiAoU19JU0xOSyAocy5zdF9tb2RlKSAhPSAwKQorCSAgICB7CisJICAgICAgaGFzX3N5bWxpbmtzID0gMTsKKwkgICAgICBicmVhazsKKwkgICAgfQorCisJICAvKiBzZWFyY2ggYmFja3dhcmRzIGZvciBsYXN0IERJUl9TRVBBUkFUT1IgKi8KKwkgIHAgPSB0bXBfcGF0aHNwZWMgKyBzdHJsZW4gKHRtcF9wYXRoc3BlYykgLSAxOworCSAgd2hpbGUgKChwID4gdG1wX3BhdGhzcGVjKSAmJiAoIUlTX0RJUl9TRVBBUkFUT1IgKCpwKSkpCisJICAgIHAtLTsKKwkgIGlmICgocCA9PSB0bXBfcGF0aHNwZWMpICYmICghSVNfRElSX1NFUEFSQVRPUiAoKnApKSkKKwkgICAgeworCSAgICAgIC8qIG5vIG1vcmUgRElSX1NFUEFSQVRPUlMgbGVmdCAqLworCSAgICAgIGJyZWFrOworCSAgICB9CisJICAqcCA9ICdcMCc7CisJfQorICAgICAgZWxzZQorCXsKKwkgIGx0X2ZhdGFsIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgICAiZXJyb3IgYWNjZXNzaW5nIGZpbGUgXCIlc1wiOiAlcyIsCisJCSAgICB0bXBfcGF0aHNwZWMsIG5vbm51bGwgKHN0cmVycm9yIChlcnJubykpKTsKKwl9CisgICAgfQorICBYRlJFRSAodG1wX3BhdGhzcGVjKTsKKworICBpZiAoIWhhc19zeW1saW5rcykKKyAgICB7CisgICAgICByZXR1cm4geHN0cmR1cCAocGF0aHNwZWMpOworICAgIH0KKworICB0bXBfcGF0aHNwZWMgPSByZWFscGF0aCAocGF0aHNwZWMsIGJ1Zik7CisgIGlmICh0bXBfcGF0aHNwZWMgPT0gMCkKKyAgICB7CisgICAgICBsdF9mYXRhbCAoX19GSUxFX18sIF9fTElORV9fLAorCQkiY291bGQgbm90IGZvbGxvdyBzeW1saW5rcyBmb3IgJXMiLCBwYXRoc3BlYyk7CisgICAgfQorICByZXR1cm4geHN0cmR1cCAodG1wX3BhdGhzcGVjKTsKKyNlbmRpZgorfQorCitjaGFyICoKK3N0cmVuZHphcCAoY2hhciAqc3RyLCBjb25zdCBjaGFyICpwYXQpCit7CisgIHNpemVfdCBsZW4sIHBhdGxlbjsKKworICBhc3NlcnQgKHN0ciAhPSBOVUxMKTsKKyAgYXNzZXJ0IChwYXQgIT0gTlVMTCk7CisKKyAgbGVuID0gc3RybGVuIChzdHIpOworICBwYXRsZW4gPSBzdHJsZW4gKHBhdCk7CisKKyAgaWYgKHBhdGxlbiA8PSBsZW4pCisgICAgeworICAgICAgc3RyICs9IGxlbiAtIHBhdGxlbjsKKyAgICAgIGlmIChzdHJjbXAgKHN0ciwgcGF0KSA9PSAwKQorCSpzdHIgPSAnXDAnOworICAgIH0KKyAgcmV0dXJuIHN0cjsKK30KKwordm9pZAorbHRfZGVidWdwcmludGYgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcmdzOworICBpZiAobHRfZGVidWcpCisgICAgeworICAgICAgKHZvaWQpIGZwcmludGYgKHN0ZGVyciwgIiVzOiVzOiVkOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUpOworICAgICAgdmFfc3RhcnQgKGFyZ3MsIGZtdCk7CisgICAgICAodm9pZCkgdmZwcmludGYgKHN0ZGVyciwgZm10LCBhcmdzKTsKKyAgICAgIHZhX2VuZCAoYXJncyk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZAorbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICpmaWxlLAorCSAgICAgICBpbnQgbGluZSwgY29uc3QgY2hhciAqbW9kZSwKKwkgICAgICAgY29uc3QgY2hhciAqbWVzc2FnZSwgdmFfbGlzdCBhcCkKK3sKKyAgZnByaW50ZiAoc3RkZXJyLCAiJXM6JXM6JWQ6ICVzOiAiLCBwcm9ncmFtX25hbWUsIGZpbGUsIGxpbmUsIG1vZGUpOworICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7CisgIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOworCisgIGlmIChleGl0X3N0YXR1cyA+PSAwKQorICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKK30KKwordm9pZAorbHRfZmF0YWwgKGNvbnN0IGNoYXIgKmZpbGUsIGludCBsaW5lLCBjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pCit7CisgIHZhX2xpc3QgYXA7CisgIHZhX3N0YXJ0IChhcCwgbWVzc2FnZSk7CisgIGx0X2Vycm9yX2NvcmUgKEVYSVRfRkFJTFVSRSwgZmlsZSwgbGluZSwgIkZBVEFMIiwgbWVzc2FnZSwgYXApOworICB2YV9lbmQgKGFwKTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorbm9ubnVsbCAoY29uc3QgY2hhciAqcykKK3sKKyAgcmV0dXJuIHMgPyBzIDogIihudWxsKSI7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK25vbmVtcHR5IChjb25zdCBjaGFyICpzKQoreworICByZXR1cm4gKHMgJiYgISpzKSA/ICIoZW1wdHkpIiA6IG5vbm51bGwgKHMpOworfQorCit2b2lkCitsdF9zZXRlbnYgKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfc2V0ZW52KSBzZXR0aW5nICclcycgdG8gJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworICB7CisjaWZkZWYgSEFWRV9TRVRFTlYKKyAgICAvKiBhbHdheXMgbWFrZSBhIGNvcHksIGZvciBjb25zaXN0ZW5jeSB3aXRoICFIQVZFX1NFVEVOViAqLworICAgIGNoYXIgKnN0ciA9IHhzdHJkdXAgKHZhbHVlKTsKKyAgICBzZXRlbnYgKG5hbWUsIHN0ciwgMSk7CisjZWxzZQorICAgIGludCBsZW4gPSBzdHJsZW4gKG5hbWUpICsgMSArIHN0cmxlbiAodmFsdWUpICsgMTsKKyAgICBjaGFyICpzdHIgPSBYTUFMTE9DIChjaGFyLCBsZW4pOworICAgIHNwcmludGYgKHN0ciwgIiVzPSVzIiwgbmFtZSwgdmFsdWUpOworICAgIGlmIChwdXRlbnYgKHN0cikgIT0gRVhJVF9TVUNDRVNTKQorICAgICAgeworICAgICAgICBYRlJFRSAoc3RyKTsKKyAgICAgIH0KKyNlbmRpZgorICB9Cit9CisKK2NoYXIgKgorbHRfZXh0ZW5kX3N0ciAoY29uc3QgY2hhciAqb3JpZ192YWx1ZSwgY29uc3QgY2hhciAqYWRkLCBpbnQgdG9fZW5kKQoreworICBjaGFyICpuZXdfdmFsdWU7CisgIGlmIChvcmlnX3ZhbHVlICYmICpvcmlnX3ZhbHVlKQorICAgIHsKKyAgICAgIGludCBvcmlnX3ZhbHVlX2xlbiA9IHN0cmxlbiAob3JpZ192YWx1ZSk7CisgICAgICBpbnQgYWRkX2xlbiA9IHN0cmxlbiAoYWRkKTsKKyAgICAgIG5ld192YWx1ZSA9IFhNQUxMT0MgKGNoYXIsIGFkZF9sZW4gKyBvcmlnX3ZhbHVlX2xlbiArIDEpOworICAgICAgaWYgKHRvX2VuZCkKKyAgICAgICAgeworICAgICAgICAgIHN0cmNweSAobmV3X3ZhbHVlLCBvcmlnX3ZhbHVlKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIG9yaWdfdmFsdWVfbGVuLCBhZGQpOworICAgICAgICB9CisgICAgICBlbHNlCisgICAgICAgIHsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSwgYWRkKTsKKyAgICAgICAgICBzdHJjcHkgKG5ld192YWx1ZSArIGFkZF9sZW4sIG9yaWdfdmFsdWUpOworICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgeworICAgICAgbmV3X3ZhbHVlID0geHN0cmR1cCAoYWRkKTsKKyAgICB9CisgIHJldHVybiBuZXdfdmFsdWU7Cit9CisKK3ZvaWQKK2x0X3VwZGF0ZV9leGVfcGF0aCAoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUpCit7CisgIGx0X2RlYnVncHJpbnRmIChfX0ZJTEVfXywgX19MSU5FX18sCisJCSAgIihsdF91cGRhdGVfZXhlX3BhdGgpIG1vZGlmeWluZyAnJXMnIGJ5IHByZXBlbmRpbmcgJyVzJ1xuIiwKKyAgICAgICAgICAgICAgICAgIG5vbm51bGwgKG5hbWUpLCBub25udWxsICh2YWx1ZSkpOworCisgIGlmIChuYW1lICYmICpuYW1lICYmIHZhbHVlICYmICp2YWx1ZSkKKyAgICB7CisgICAgICBjaGFyICpuZXdfdmFsdWUgPSBsdF9leHRlbmRfc3RyIChnZXRlbnYgKG5hbWUpLCB2YWx1ZSwgMCk7CisgICAgICAvKiBzb21lIHN5c3RlbXMgY2FuJ3QgY29wZSB3aXRoIGEgJzonLXRlcm1pbmF0ZWQgcGF0aCAjJyAqLworICAgICAgaW50IGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKTsKKyAgICAgIHdoaWxlICgoKGxlbiA9IHN0cmxlbiAobmV3X3ZhbHVlKSkgPiAwKSAmJiBJU19QQVRIX1NFUEFSQVRPUiAobmV3X3ZhbHVlW2xlbi0xXSkpCisgICAgICAgIHsKKyAgICAgICAgICBuZXdfdmFsdWVbbGVuLTFdID0gJ1wwJzsKKyAgICAgICAgfQorICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCit2b2lkCitsdF91cGRhdGVfbGliX3BhdGggKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnZhbHVlKQoreworICBsdF9kZWJ1Z3ByaW50ZiAoX19GSUxFX18sIF9fTElORV9fLAorCQkgICIobHRfdXBkYXRlX2xpYl9wYXRoKSBtb2RpZnlpbmcgJyVzJyBieSBwcmVwZW5kaW5nICclcydcbiIsCisgICAgICAgICAgICAgICAgICBub25udWxsIChuYW1lKSwgbm9ubnVsbCAodmFsdWUpKTsKKworICBpZiAobmFtZSAmJiAqbmFtZSAmJiB2YWx1ZSAmJiAqdmFsdWUpCisgICAgeworICAgICAgY2hhciAqbmV3X3ZhbHVlID0gbHRfZXh0ZW5kX3N0ciAoZ2V0ZW52IChuYW1lKSwgdmFsdWUsIDApOworICAgICAgbHRfc2V0ZW52IChuYW1lLCBuZXdfdmFsdWUpOworICAgICAgWEZSRUUgKG5ld192YWx1ZSk7CisgICAgfQorfQorCitFT0YKKwkgICAgY2FzZSAkaG9zdF9vcyBpbgorCSAgICAgIG1pbmd3KikKKwkJY2F0IDw8IkVPRiIKKworLyogUHJlcGFyZXMgYW4gYXJndW1lbnQgdmVjdG9yIGJlZm9yZSBjYWxsaW5nIHNwYXduKCkuCisgICBOb3RlIHRoYXQgc3Bhd24oKSBkb2VzIG5vdCBieSBpdHNlbGYgY2FsbCB0aGUgY29tbWFuZCBpbnRlcnByZXRlcgorICAgICAoZ2V0ZW52ICgiQ09NU1BFQyIpICE9IE5VTEwgPyBnZXRlbnYgKCJDT01TUEVDIikgOgorICAgICAgKHsgT1NWRVJTSU9OSU5GTyB2OyB2LmR3T1NWZXJzaW9uSW5mb1NpemUgPSBzaXplb2YoT1NWRVJTSU9OSU5GTyk7CisgICAgICAgICBHZXRWZXJzaW9uRXgoJnYpOworICAgICAgICAgdi5kd1BsYXRmb3JtSWQgPT0gVkVSX1BMQVRGT1JNX1dJTjMyX05UOworICAgICAgfSkgPyAiY21kLmV4ZSIgOiAiY29tbWFuZC5jb20iKS4KKyAgIEluc3RlYWQgaXQgc2ltcGx5IGNvbmNhdGVuYXRlcyB0aGUgYXJndW1lbnRzLCBzZXBhcmF0ZWQgYnkgJyAnLCBhbmQgY2FsbHMKKyAgIENyZWF0ZVByb2Nlc3MoKS4gIFdlIG11c3QgcXVvdGUgdGhlIGFyZ3VtZW50cyBzaW5jZSBXaW4zMiBDcmVhdGVQcm9jZXNzKCkKKyAgIGludGVycHJldHMgY2hhcmFjdGVycyBsaWtlICcgJywgJ1x0JywgJ1xcJywgJyInIChidXQgbm90ICc8JyBhbmQgJz4nKSBpbiBhCisgICBzcGVjaWFsIHdheToKKyAgIC0gU3BhY2UgYW5kIHRhYiBhcmUgaW50ZXJwcmV0ZWQgYXMgZGVsaW1pdGVycy4gVGhleSBhcmUgbm90IHRyZWF0ZWQgYXMKKyAgICAgZGVsaW1pdGVycyBpZiB0aGV5IGFyZSBzdXJyb3VuZGVkIGJ5IGRvdWJsZSBxdW90ZXM6ICIuLi4iLgorICAgLSBVbmVzY2FwZWQgZG91YmxlIHF1b3RlcyBhcmUgcmVtb3ZlZCBmcm9tIHRoZSBpbnB1dC4gVGhlaXIgb25seSBlZmZlY3QgaXMKKyAgICAgdGhhdCB3aXRoaW4gZG91YmxlIHF1b3Rlcywgc3BhY2UgYW5kIHRhYiBhcmUgdHJlYXRlZCBsaWtlIG5vcm1hbAorICAgICBjaGFyYWN0ZXJzLgorICAgLSBCYWNrc2xhc2hlcyBub3QgZm9sbG93ZWQgYnkgZG91YmxlIHF1b3RlcyBhcmUgbm90IHNwZWNpYWwuCisgICAtIEJ1dCAyKm4rMSBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSBiZWNvbWUKKyAgICAgbiBiYWNrc2xhc2hlcyBmb2xsb3dlZCBieSBhIGRvdWJsZSBxdW90ZSAobiA+PSAwKToKKyAgICAgICBcIiAtPiAiCisgICAgICAgXFxcIiAtPiBcIgorICAgICAgIFxcXFxcIiAtPiBcXCIKKyAqLworI2RlZmluZSBTSEVMTF9TUEVDSUFMX0NIQVJTICJcIlxcIFwwMDFcMDAyXDAwM1wwMDRcMDA1XDAwNlwwMDdcMDEwXDAxMVwwMTJcMDEzXDAxNFwwMTVcMDE2XDAxN1wwMjBcMDIxXDAyMlwwMjNcMDI0XDAyNVwwMjZcMDI3XDAzMFwwMzFcMDMyXDAzM1wwMzRcMDM1XDAzNlwwMzciCisjZGVmaW5lIFNIRUxMX1NQQUNFX0NIQVJTICIgXDAwMVwwMDJcMDAzXDAwNFwwMDVcMDA2XDAwN1wwMTBcMDExXDAxMlwwMTNcMDE0XDAxNVwwMTZcMDE3XDAyMFwwMjFcMDIyXDAyM1wwMjRcMDI1XDAyNlwwMjdcMDMwXDAzMVwwMzJcMDMzXDAzNFwwMzVcMDM2XDAzNyIKK2NoYXIgKioKK3ByZXBhcmVfc3Bhd24gKGNoYXIgKiphcmd2KQoreworICBzaXplX3QgYXJnYzsKKyAgY2hhciAqKm5ld19hcmd2OworICBzaXplX3QgaTsKKworICAvKiBDb3VudCBudW1iZXIgb2YgYXJndW1lbnRzLiAgKi8KKyAgZm9yIChhcmdjID0gMDsgYXJndlthcmdjXSAhPSBOVUxMOyBhcmdjKyspCisgICAgOworCisgIC8qIEFsbG9jYXRlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBuZXdfYXJndiA9IFhNQUxMT0MgKGNoYXIgKiwgYXJnYyArIDEpOworCisgIC8qIFB1dCBxdW90ZWQgYXJndW1lbnRzIGludG8gdGhlIG5ldyBhcmd1bWVudCB2ZWN0b3IuICAqLworICBmb3IgKGkgPSAwOyBpIDwgYXJnYzsgaSsrKQorICAgIHsKKyAgICAgIGNvbnN0IGNoYXIgKnN0cmluZyA9IGFyZ3ZbaV07CisKKyAgICAgIGlmIChzdHJpbmdbMF0gPT0gJ1wwJykKKwluZXdfYXJndltpXSA9IHhzdHJkdXAgKCJcIlwiIik7CisgICAgICBlbHNlIGlmIChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQRUNJQUxfQ0hBUlMpICE9IE5VTEwpCisJeworCSAgaW50IHF1b3RlX2Fyb3VuZCA9IChzdHJwYnJrIChzdHJpbmcsIFNIRUxMX1NQQUNFX0NIQVJTKSAhPSBOVUxMKTsKKwkgIHNpemVfdCBsZW5ndGg7CisJICB1bnNpZ25lZCBpbnQgYmFja3NsYXNoZXM7CisJICBjb25zdCBjaGFyICpzOworCSAgY2hhciAqcXVvdGVkX3N0cmluZzsKKwkgIGNoYXIgKnA7CisKKwkgIGxlbmd0aCA9IDA7CisJICBiYWNrc2xhc2hlcyA9IDA7CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICBsZW5ndGgrKzsKKwkgIGZvciAocyA9IHN0cmluZzsgKnMgIT0gJ1wwJzsgcysrKQorCSAgICB7CisJICAgICAgY2hhciBjID0gKnM7CisJICAgICAgaWYgKGMgPT0gJyInKQorCQlsZW5ndGggKz0gYmFja3NsYXNoZXMgKyAxOworCSAgICAgIGxlbmd0aCsrOworCSAgICAgIGlmIChjID09ICdcXCcpCisJCWJhY2tzbGFzaGVzKys7CisJICAgICAgZWxzZQorCQliYWNrc2xhc2hlcyA9IDA7CisJICAgIH0KKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIGxlbmd0aCArPSBiYWNrc2xhc2hlcyArIDE7CisKKwkgIHF1b3RlZF9zdHJpbmcgPSBYTUFMTE9DIChjaGFyLCBsZW5ndGggKyAxKTsKKworCSAgcCA9IHF1b3RlZF9zdHJpbmc7CisJICBiYWNrc2xhc2hlcyA9IDA7CisJICBpZiAocXVvdGVfYXJvdW5kKQorCSAgICAqcCsrID0gJyInOworCSAgZm9yIChzID0gc3RyaW5nOyAqcyAhPSAnXDAnOyBzKyspCisJICAgIHsKKwkgICAgICBjaGFyIGMgPSAqczsKKwkgICAgICBpZiAoYyA9PSAnIicpCisJCXsKKwkJICB1bnNpZ25lZCBpbnQgajsKKwkJICBmb3IgKGogPSBiYWNrc2xhc2hlcyArIDE7IGogPiAwOyBqLS0pCisJCSAgICAqcCsrID0gJ1xcJzsKKwkJfQorCSAgICAgICpwKysgPSBjOworCSAgICAgIGlmIChjID09ICdcXCcpCisJCWJhY2tzbGFzaGVzKys7CisJICAgICAgZWxzZQorCQliYWNrc2xhc2hlcyA9IDA7CisJICAgIH0KKwkgIGlmIChxdW90ZV9hcm91bmQpCisJICAgIHsKKwkgICAgICB1bnNpZ25lZCBpbnQgajsKKwkgICAgICBmb3IgKGogPSBiYWNrc2xhc2hlczsgaiA+IDA7IGotLSkKKwkJKnArKyA9ICdcXCc7CisJICAgICAgKnArKyA9ICciJzsKKwkgICAgfQorCSAgKnAgPSAnXDAnOworCisJICBuZXdfYXJndltpXSA9IHF1b3RlZF9zdHJpbmc7CisJfQorICAgICAgZWxzZQorCW5ld19hcmd2W2ldID0gKGNoYXIgKikgc3RyaW5nOworICAgIH0KKyAgbmV3X2FyZ3ZbYXJnY10gPSBOVUxMOworCisgIHJldHVybiBuZXdfYXJndjsKK30KK0VPRgorCQk7OworCSAgICBlc2FjCisKKyAgICAgICAgICAgIGNhdCA8PCJFT0YiCit2b2lkIGx0X2R1bXBfc2NyaXB0IChGSUxFKiBmKQoreworRU9GCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIHllcyB8CisgICAgICAgICAgICAgICRTRUQgLWUgJ3MvXChbXFwiXVwpL1xcXDEvZycgXAorCSAgICAgICAgICAgLWUgJ3MvXi8gIGZwdXRzICgiLycgLWUgJ3MvJC9cXG4iLCBmKTsvJworCisgICAgICAgICAgICBjYXQgPDwiRU9GIgorfQorRU9GCit9CisjIGVuZDogZnVuY19lbWl0X2N3cmFwcGVyZXhlX3NyYworCisjIGZ1bmNfd2luMzJfaW1wb3J0X2xpYl9wIEFSRworIyBUcnVlIGlmIEFSRyBpcyBhbiBpbXBvcnQgbGliLCBhcyBpbmRpY2F0ZWQgYnkgJGZpbGVfbWFnaWNfY21kCitmdW5jX3dpbjMyX2ltcG9ydF9saWJfcCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBjYXNlIGBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkMVwiIDI+L2Rldi9udWxsIHwgJFNFRCAtZSAxMHFgIGluCisgICAgKmltcG9ydCopIDogOzsKKyAgICAqKSBmYWxzZSA7OworICAgIGVzYWMKK30KKworIyBmdW5jX21vZGVfbGluayBhcmcuLi4KK2Z1bmNfbW9kZV9saW5rICgpCit7CisgICAgJG9wdF9kZWJ1ZwogICAgIGNhc2UgJGhvc3QgaW4KLSAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKKyAgICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQogICAgICAgIyBJdCBpcyBpbXBvc3NpYmxlIHRvIGxpbmsgYSBkbGwgd2l0aG91dCB0aGlzIHNldHRpbmcsIGFuZAogICAgICAgIyB3ZSBzaG91bGRuJ3QgZm9yY2UgdGhlIG1ha2VmaWxlIG1haW50YWluZXIgdG8gZmlndXJlIG91dAogICAgICAgIyB3aGljaCBzeXN0ZW0gd2UgYXJlIGNvbXBpbGluZyBmb3IgaW4gb3JkZXIgdG8gcGFzcyBhbiBleHRyYQpAQCAtMTEyMSwxMCArNTEwMCwxMCBAQAogICAgICAgYWxsb3dfdW5kZWZpbmVkPXllcwogICAgICAgOzsKICAgICBlc2FjCi0gICAgbGlidG9vbF9hcmdzPSIkbm9ub3B0IgorICAgIGxpYnRvb2xfYXJncz0kbm9ub3B0CiAgICAgYmFzZV9jb21waWxlPSIkbm9ub3B0ICRAIgotICAgIGNvbXBpbGVfY29tbWFuZD0iJG5vbm9wdCIKLSAgICBmaW5hbGl6ZV9jb21tYW5kPSIkbm9ub3B0IgorICAgIGNvbXBpbGVfY29tbWFuZD0kbm9ub3B0CisgICAgZmluYWxpemVfY29tbWFuZD0kbm9ub3B0CiAKICAgICBjb21waWxlX3JwYXRoPQogICAgIGZpbmFsaXplX3JwYXRoPQpAQCAtMTEzOSw4ICs1MTE4LDEwIEBACiAgICAgZGxsc2VhcmNocGF0aD0KICAgICBsaWJfc2VhcmNoX3BhdGg9YHB3ZGAKICAgICBpbnN0X3ByZWZpeF9kaXI9CisgICAgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9CiAKICAgICBhdm9pZF92ZXJzaW9uPW5vCisgICAgYmluZGlyPQogICAgIGRsZmlsZXM9CiAgICAgZGxwcmVmaWxlcz0KICAgICBkbHNlbGY9bm8KQEAgLTExNTQsNyArNTEzNSw2IEBACiAgICAgbm9faW5zdGFsbD1ubwogICAgIG9ianM9CiAgICAgbm9uX3BpY19vYmplY3RzPQotICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcwogICAgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PQogICAgIHByZWZlcl9zdGF0aWNfbGlicz1ubwogICAgIHByZWxvYWQ9bm8KQEAgLTExNjgsMTkgKzUxNDgsMjUgQEAKICAgICB0aHJlYWRfc2FmZT1ubwogICAgIHZpbmZvPQogICAgIHZpbmZvX251bWJlcj1ubworICAgIHdlYWtfbGlicz0KICAgICBzaW5nbGVfbW9kdWxlPSIke3dsfS1zaW5nbGVfbW9kdWxlIgotCiAgICAgZnVuY19pbmZlcl90YWcgJGJhc2VfY29tcGlsZQogCiAgICAgIyBXZSBuZWVkIHRvIGtub3cgLXN0YXRpYywgdG8gZ2V0IHRoZSByaWdodCBvdXRwdXQgZmlsZW5hbWVzLgogICAgIGZvciBhcmcKICAgICBkbwogICAgICAgY2FzZSAkYXJnIGluCisgICAgICAtc2hhcmVkKQorCXRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBcCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gImNhbiBub3QgYnVpbGQgYSBzaGFyZWQgbGlicmFyeSIKKwlidWlsZF9vbGRfbGlicz1ubworCWJyZWFrCisJOzsKICAgICAgIC1hbGwtc3RhdGljIHwgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQogCWNhc2UgJGFyZyBpbgogCS1hbGwtc3RhdGljKQogCSAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAteiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNvbXBsZXRlIHN0YXRpYyBsaW5raW5nIGlzIGltcG9zc2libGUgaW4gdGhpcyBjb25maWd1cmF0aW9uIiAxPiYyCisJICAgIGZ1bmNfd2FybmluZyAiY29tcGxldGUgc3RhdGljIGxpbmtpbmcgaXMgaW1wb3NzaWJsZSBpbiB0aGlzIGNvbmZpZ3VyYXRpb24iCiAJICBmaQogCSAgaWYgdGVzdCAtbiAiJGxpbmtfc3RhdGljX2ZsYWciOyB0aGVuCiAJICAgIGRsb3Blbl9zZWxmPSRkbG9wZW5fc2VsZl9zdGF0aWMKQEAgLTEyMTQsMjkgKzUyMDAsMzAgQEAKICAgICB3aGlsZSB0ZXN0ICIkIyIgLWd0IDA7IGRvCiAgICAgICBhcmc9IiQxIgogICAgICAgc2hpZnQKLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JcWFyZz1cImAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYFwiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAotCTs7Ci0gICAgICAqKSBxYXJnPSRhcmcgOzsKLSAgICAgIGVzYWMKLSAgICAgIGxpYnRvb2xfYXJncz0iJGxpYnRvb2xfYXJncyAkcWFyZyIKKyAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRhcmciCisgICAgICBxYXJnPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3VucXVvdGVkX3Jlc3VsdAorICAgICAgZnVuY19hcHBlbmQgbGlidG9vbF9hcmdzICIgJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCiAgICAgICAjIElmIHRoZSBwcmV2aW91cyBvcHRpb24gbmVlZHMgYW4gYXJndW1lbnQsIGFzc2lnbiBpdC4KICAgICAgIGlmIHRlc3QgLW4gIiRwcmV2IjsgdGhlbgogCWNhc2UgJHByZXYgaW4KIAlvdXRwdXQpCi0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgQE9VVFBVVEAiCi0JICBmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCBAT1VUUFVUQCIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiIEBPVVRQVVRAIgorCSAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiIEBPVVRQVVRAIgogCSAgOzsKIAllc2FjCiAKIAljYXNlICRwcmV2IGluCisJYmluZGlyKQorCSAgYmluZGlyPSIkYXJnIgorCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OwogCWRsZmlsZXN8ZGxwcmVmaWxlcykKIAkgIGlmIHRlc3QgIiRwcmVsb2FkIiA9IG5vOyB0aGVuCiAJICAgICMgQWRkIHRoZSBzeW1ib2wgb2JqZWN0IGludG8gdGhlIGxpbmtpbmcgY29tbWFuZHMuCi0JICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBAU1lNRklMRUAiCi0JICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kIEBTWU1GSUxFQCIKKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgQFNZTUZJTEVAIgorCSAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgQFNZTUZJTEVAIgogCSAgICBwcmVsb2FkPXllcwogCSAgZmkKIAkgIGNhc2UgJGFyZyBpbgpAQCAtMTI2Myw5ICs1MjUwLDkgQEAKIAkgICAgOzsKIAkgICopCiAJICAgIGlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KLQkgICAgICBkbGZpbGVzPSIkZGxmaWxlcyAkYXJnIgorCSAgICAgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkYXJnIgogCSAgICBlbHNlCi0JICAgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJGFyZyIKKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGFyZyIKIAkgICAgZmkKIAkgICAgcHJldj0KIAkgICAgY29udGludWUKQEAgLTEyNzQsMTAgKzUyNjEsOCBAQAogCSAgOzsKIAlleHBzeW1zKQogCSAgZXhwb3J0X3N5bWJvbHM9IiRhcmciCi0JICBpZiB0ZXN0ICEgLWYgIiRhcmciOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHN5bWJvbCBmaWxlIFxgJGFyZycgZG9lcyBub3QgZXhpc3QiCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKKwkgIHRlc3QgLWYgIiRhcmciIFwKKwkgICAgfHwgZnVuY19mYXRhbF9lcnJvciAic3ltYm9sIGZpbGUgXGAkYXJnJyBkb2VzIG5vdCBleGlzdCIKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKQEAgLTEyODYsMTEgKzUyNzEsMTIwIEBACiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7CisJZnJhbWV3b3JrKQorCSAgY2FzZSAkaG9zdCBpbgorCSAgICAqLSotZGFyd2luKikKKwkgICAgICBjYXNlICIkZGVwbGlicyAiIGluCisJCSoiICRxYXJnLmx0ZnJhbWV3b3JrICIqKSA7OworCQkqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJHFhcmcubHRmcmFtZXdvcmsiICMgdGhpcyBpcyBmaXhlZCBsYXRlcgorCQkgICA7OworCSAgICAgIGVzYWMKKwkgICAgICA7OworCSAgZXNhYworCSAgcHJldj0KKwkgIGNvbnRpbnVlCisJICA7OwogCWluc3RfcHJlZml4KQogCSAgaW5zdF9wcmVmaXhfZGlyPSIkYXJnIgogCSAgcHJldj0KIAkgIGNvbnRpbnVlCiAJICA7OworCW9iamVjdGxpc3QpCisJICBpZiB0ZXN0IC1mICIkYXJnIjsgdGhlbgorCSAgICBzYXZlX2FyZz0kYXJnCisJICAgIG1vcmVhcmdzPQorCSAgICBmb3IgZmlsIGluIGBjYXQgIiRzYXZlX2FyZyJgCisJICAgIGRvCisjCSAgICAgIGZ1bmNfYXBwZW5kIG1vcmVhcmdzICIgJGZpbCIKKwkgICAgICBhcmc9JGZpbAorCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgorCisJICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgorCSAgICAgIGlmIGZ1bmNfbGFsaWJfdW5zYWZlX3AgIiRhcmciOyB0aGVuCisJCXBpY19vYmplY3Q9CisJCW5vbl9waWNfb2JqZWN0PQorCisJCSMgUmVhZCB0aGUgLmxvIGZpbGUKKwkJZnVuY19zb3VyY2UgIiRhcmciCisKKwkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CisJCSAgIHRlc3QgLXogIiRub25fcGljX29iamVjdCIgfHwKKwkJICAgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSAmJgorCQkgICB0ZXN0ICIkbm9uX3BpY19vYmplY3QiID0gbm9uZTsgdGhlbgorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIgorCQlmaQorCisJCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCisJCWZ1bmNfZGlybmFtZSAiJGFyZyIgIi8iICIiCisJCXhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCWlmIHRlc3QgIiRwaWNfb2JqZWN0IiAhPSBub25lOyB0aGVuCisJCSAgIyBQcmVwZW5kIHRoZSBzdWJkaXJlY3RvcnkgdGhlIG9iamVjdCBpcyBmb3VuZCBpbi4KKwkJICBwaWNfb2JqZWN0PSIkeGRpciRwaWNfb2JqZWN0IgorCisJCSAgaWYgdGVzdCAiJHByZXYiID0gZGxmaWxlczsgdGhlbgorCQkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgorCQkgICAgICBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICAgIHByZXY9CisJCSAgICAgIGNvbnRpbnVlCisJCSAgICBlbHNlCisJCSAgICAgICMgSWYgbGlidG9vbCBvYmplY3RzIGFyZSB1bnN1cHBvcnRlZCwgdGhlbiB3ZSBuZWVkIHRvIHByZWxvYWQuCisJCSAgICAgIHByZXY9ZGxwcmVmaWxlcworCQkgICAgZmkKKwkJICBmaQorCisJCSAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKKwkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbHByZWZpbGVzOyB0aGVuCisJCSAgICAjIFByZWxvYWQgdGhlIG9sZC1zdHlsZSBvYmplY3QuCisJCSAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCisJCSAgICBwcmV2PQorCQkgIGZpCisKKwkJICAjIEEgUElDIG9iamVjdC4KKwkJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHBpY19vYmplY3QiCisJCSAgYXJnPSIkcGljX29iamVjdCIKKwkJZmkKKworCQkjIE5vbi1QSUMgb2JqZWN0LgorCQlpZiB0ZXN0ICIkbm9uX3BpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKKworCQkgICMgQSBzdGFuZGFyZCBub24tUElDIG9iamVjdAorCQkgIGZ1bmNfYXBwZW5kIG5vbl9waWNfb2JqZWN0cyAiICRub25fcGljX29iamVjdCIKKwkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KKwkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgorCQkgIGZpCisJCWVsc2UKKwkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCisJCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgorCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJCWZpCisJICAgICAgZWxzZQorCQkjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KKwkJaWYgJG9wdF9kcnlfcnVuOyB0aGVuCisJCSAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KKwkJICBmdW5jX2Rpcm5hbWUgIiRhcmciICIvIiAiIgorCQkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgorCisJCSAgZnVuY19sbzJvICIkYXJnIgorCQkgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJCSAgbm9uX3BpY19vYmplY3Q9JHhkaXIkZnVuY19sbzJvX3Jlc3VsdAorCQkgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKKwkJICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICAgICAgICBlbHNlCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIKKwkJZmkKKwkgICAgICBmaQorCSAgICBkb25lCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgImxpbmsgaW5wdXQgZmlsZSBcYCRhcmcnIGRvZXMgbm90IGV4aXN0IgorCSAgZmkKKwkgIGFyZz0kc2F2ZV9hcmcKKwkgIHByZXY9CisJICBjb250aW51ZQorCSAgOzsKIAlwcmVjaW91c19yZWdleCkKIAkgIHByZWNpb3VzX2ZpbGVzX3JlZ2V4PSIkYXJnIgogCSAgcHJldj0KQEAgLTEzMDEsMTc0ICs1Mzk1LDU5IEBACiAJICBwcmV2PQogCSAgY29udGludWUKIAkgIDs7Ci0Jb2JqZWN0bGlzdCkKLQkgIGlmIHRlc3QgLWYgIiRhcmciOyB0aGVuCi0JICAgIHNhdmVfYXJnPSRhcmcKLQkgICAgbW9yZWFyZ3M9Ci0JICAgIGZvciBmaWwgaW4gYGNhdCAkc2F2ZV9hcmdgCi0JICAgIGRvCi0jCSAgICAgIG1vcmVhcmdzPSIkbW9yZWFyZ3MgJGZpbCIKLQkgICAgICBhcmc9JGZpbAotCSAgICAgICMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgb2JqZWN0LgotCi0JICAgICAgIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgb2JqZWN0LgotCSAgICAgIGlmICgke1NFRH0gLWUgJzJxJyAkYXJnIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkJcGljX29iamVjdD0KLQkJbm9uX3BpY19vYmplY3Q9Ci0KLQkJIyBSZWFkIHRoZSAubG8gZmlsZQotCQkjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQkJY2FzZSAkYXJnIGluCi0JCSovKiB8ICpcXCopIC4gJGFyZyA7OwotCQkqKSAuIC4vJGFyZyA7OwotCQllc2FjCi0KLQkJaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8IFwKLQkJICAgdGVzdCAteiAiJG5vbl9waWNfb2JqZWN0IiB8fAotCQkgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmIFwKLQkJICAgdGVzdCAiJG5vbl9waWNfb2JqZWN0IiA9IG5vbmU7IHRoZW4KLQkJICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIgMT4mMgotCQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCQlmaQotCi0JCSMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JCXhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCQlpZiB0ZXN0ICJYJHhkaXIiID0gIlgkYXJnIjsgdGhlbgotCQkgIHhkaXI9Ci0JCWVsc2UKLQkJICB4ZGlyPSIkeGRpci8iCi0JCWZpCi0KLQkJaWYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLQkJICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgotCQkgIHBpY19vYmplY3Q9IiR4ZGlyJHBpY19vYmplY3QiCi0KLQkJICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCi0JCSAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0geWVzOyB0aGVuCi0JCSAgICAgIGRsZmlsZXM9IiRkbGZpbGVzICRwaWNfb2JqZWN0IgotCQkgICAgICBwcmV2PQotCQkgICAgICBjb250aW51ZQotCQkgICAgZWxzZQotCQkgICAgICAjIElmIGxpYnRvb2wgb2JqZWN0cyBhcmUgdW5zdXBwb3J0ZWQsIHRoZW4gd2UgbmVlZCB0byBwcmVsb2FkLgotCQkgICAgICBwcmV2PWRscHJlZmlsZXMKLQkJICAgIGZpCi0JCSAgZmkKLQotCQkgICMgQ0hFQ0sgTUU6ICBJIHRoaW5rIEkgYnVzdGVkIHRoaXMuICAtT3NzYW1hCi0JCSAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgotCQkgICAgIyBQcmVsb2FkIHRoZSBvbGQtc3R5bGUgb2JqZWN0LgotCQkgICAgZGxwcmVmaWxlcz0iJGRscHJlZmlsZXMgJHBpY19vYmplY3QiCi0JCSAgICBwcmV2PQotCQkgIGZpCi0KLQkJICAjIEEgUElDIG9iamVjdC4KLQkJICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKLQkJICBhcmc9IiRwaWNfb2JqZWN0IgotCQlmaQotCi0JCSMgTm9uLVBJQyBvYmplY3QuCi0JCWlmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgotCQkgICMgUHJlcGVuZCB0aGUgc3ViZGlyZWN0b3J5IHRoZSBvYmplY3QgaXMgZm91bmQgaW4uCi0JCSAgbm9uX3BpY19vYmplY3Q9IiR4ZGlyJG5vbl9waWNfb2JqZWN0IgotCi0JCSAgIyBBIHN0YW5kYXJkIG5vbi1QSUMgb2JqZWN0Ci0JCSAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKLQkJICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KLQkJICAgIGFyZz0iJG5vbl9waWNfb2JqZWN0IgotCQkgIGZpCi0JCWVsc2UKLQkJICAjIElmIHRoZSBQSUMgb2JqZWN0IGV4aXN0cywgdXNlIGl0IGluc3RlYWQuCi0JCSAgIyAkeGRpciB3YXMgcHJlcGVuZGVkIHRvICRwaWNfb2JqZWN0IGFib3ZlLgotCQkgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKLQkJICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgotCQlmaQotCSAgICAgIGVsc2UKLQkJIyBPbmx5IGFuIGVycm9yIGlmIG5vdCBkb2luZyBhIGRyeS1ydW4uCi0JCWlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0JCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkYXJnJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIG9iamVjdCIgMT4mMgotCQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCQllbHNlCi0JCSAgIyBEcnktcnVuIGNhc2UuCi0KLQkJICAjIEV4dHJhY3Qgc3ViZGlyZWN0b3J5IGZyb20gdGhlIGFyZ3VtZW50LgotCQkgIHhkaXI9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCQkgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRhcmciOyB0aGVuCi0JCSAgICB4ZGlyPQotCQkgIGVsc2UKLQkJICAgIHhkaXI9IiR4ZGlyLyIKLQkJICBmaQotCi0JCSAgcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHtvYmpkaXJ9LyR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAotCQkgIG5vbl9waWNfb2JqZWN0PWAkZWNobyAiWCR7eGRpcn0ke2FyZ30iIHwgJFhzZWQgLWUgIiRsbzJvImAKLQkJICBsaWJvYmpzPSIkbGlib2JqcyAkcGljX29iamVjdCIKLQkJICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgotCQlmaQotCSAgICAgIGZpCi0JICAgIGRvbmUKLQkgIGVsc2UKLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogbGluayBpbnB1dCBmaWxlIFxgJHNhdmVfYXJnJyBkb2VzIG5vdCBleGlzdCIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQotCSAgYXJnPSRzYXZlX2FyZwotCSAgcHJldj0KLQkgIGNvbnRpbnVlCi0JICA7OwogCXJwYXRoIHwgeHJwYXRoKQogCSAgIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCiAJICBjYXNlICRhcmcgaW4KIAkgIFtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgOzsKIAkgICopCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IG9ubHkgYWJzb2x1dGUgcnVuLXBhdGhzIGFyZSBhbGxvd2VkIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJvbmx5IGFic29sdXRlIHJ1bi1wYXRocyBhcmUgYWxsb3dlZCIKIAkgICAgOzsKIAkgIGVzYWMKIAkgIGlmIHRlc3QgIiRwcmV2IiA9IHJwYXRoOyB0aGVuCiAJICAgIGNhc2UgIiRycGF0aCAiIGluCiAJICAgICoiICRhcmcgIiopIDs7Ci0JICAgICopIHJwYXRoPSIkcnBhdGggJGFyZyIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgcnBhdGggIiAkYXJnIiA7OwogCSAgICBlc2FjCiAJICBlbHNlCiAJICAgIGNhc2UgIiR4cnBhdGggIiBpbgogCSAgICAqIiAkYXJnICIqKSA7OwotCSAgICAqKSB4cnBhdGg9IiR4cnBhdGggJGFyZyIgOzsKKwkgICAgKikgZnVuY19hcHBlbmQgeHJwYXRoICIgJGFyZyIgOzsKIAkgICAgZXNhYwogCSAgZmkKIAkgIHByZXY9CiAJICBjb250aW51ZQogCSAgOzsKLQl4Y29tcGlsZXIpCi0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCXNocmV4dCkKKwkgIHNocmV4dF9jbWRzPSIkYXJnIgogCSAgcHJldj0KLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkcWFyZyIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRxYXJnIgogCSAgY29udGludWUKIAkgIDs7Ci0JeGxpbmtlcikKLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkcWFyZyIKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJHdsJHFhcmciCisJd2VhaykKKwkgIGZ1bmNfYXBwZW5kIHdlYWtfbGlicyAiICRhcmciCiAJICBwcmV2PQotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR3bCRxYXJnIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHdsJHFhcmciCiAJICBjb250aW51ZQogCSAgOzsKIAl4Y2NsaW5rZXIpCi0JICBsaW5rZXJfZmxhZ3M9IiRsaW5rZXJfZmxhZ3MgJHFhcmciCi0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRxYXJnIgorCSAgZnVuY19hcHBlbmQgbGlua2VyX2ZsYWdzICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRxYXJnIgogCSAgcHJldj0KLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkcWFyZyIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCiAJICBjb250aW51ZQogCSAgOzsKLQlzaHJleHQpCi0gIAkgIHNocmV4dF9jbWRzPSIkYXJnIgorCXhjb21waWxlcikKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJHFhcmciCiAJICBwcmV2PQorCSAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHFhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJHFhcmciCiAJICBjb250aW51ZQogCSAgOzsKLQlkYXJ3aW5fZnJhbWV3b3JrfGRhcndpbl9mcmFtZXdvcmtfc2tpcCkKLQkgIHRlc3QgIiRwcmV2IiA9ICJkYXJ3aW5fZnJhbWV3b3JrIiAmJiBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCi0JICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLQkgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCisJeGxpbmtlcikKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRxYXJnIgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkcWFyZyIKIAkgIHByZXY9CisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkd2wkcWFyZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkd2wkcWFyZyIKIAkgIGNvbnRpbnVlCiAJICA7OwogCSopCkBAIC0xNDg0LDE2ICs1NDYzLDE2IEBACiAgICAgICBjYXNlICRhcmcgaW4KICAgICAgIC1hbGwtc3RhdGljKQogCWlmIHRlc3QgLW4gIiRsaW5rX3N0YXRpY19mbGFnIjsgdGhlbgotCSAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRsaW5rX3N0YXRpY19mbGFnIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGxpbmtfc3RhdGljX2ZsYWciCisJICAjIFNlZSBjb21tZW50IGZvciAtc3RhdGljIGZsYWcgYmVsb3csIGZvciBtb3JlIGRldGFpbHMuCisJICBmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkbGlua19zdGF0aWNfZmxhZyIKIAlmaQogCWNvbnRpbnVlCiAJOzsKIAogICAgICAgLWFsbG93LXVuZGVmaW5lZCkKIAkjIEZJWE1FOiByZW1vdmUgdGhpcyBmbGFnIHNvbWV0aW1lIGluIHRoZSBmdXR1cmUuCi0JJGVjaG8gIiRtb2RlbmFtZTogXGAtYWxsb3ctdW5kZWZpbmVkJyBpcyBkZXByZWNhdGVkIGJlY2F1c2UgaXQgaXMgdGhlIGRlZmF1bHQiIDE+JjIKLQljb250aW51ZQorCWZ1bmNfZmF0YWxfZXJyb3IgIlxgLWFsbG93LXVuZGVmaW5lZCcgbXVzdCBub3QgYmUgdXNlZCBiZWNhdXNlIGl0IGlzIHRoZSBkZWZhdWx0IgogCTs7CiAKICAgICAgIC1hdm9pZC12ZXJzaW9uKQpAQCAtMTUwMSw2ICs1NDgwLDExIEBACiAJY29udGludWUKIAk7OwogCisgICAgICAtYmluZGlyKQorCXByZXY9YmluZGlyCisJY29udGludWUKKwk7OworCiAgICAgICAtZGxvcGVuKQogCXByZXY9ZGxmaWxlcwogCWNvbnRpbnVlCkBAIC0xNTE4LDggKzU1MDIsNyBAQAogCiAgICAgICAtZXhwb3J0LXN5bWJvbHMgfCAtZXhwb3J0LXN5bWJvbHMtcmVnZXgpCiAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiB8fCB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiBtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2ZhdGFsX2Vycm9yICJtb3JlIHRoYW4gb25lIC1leHBvcnRlZC1zeW1ib2xzIGFyZ3VtZW50IGlzIG5vdCBhbGxvd2VkIgogCWZpCiAJaWYgdGVzdCAiWCRhcmciID0gIlgtZXhwb3J0LXN5bWJvbHMiOyB0aGVuCiAJICBwcmV2PWV4cHN5bXMKQEAgLTE1MjksMTUgKzU1MTIsOCBAQAogCWNvbnRpbnVlCiAJOzsKIAotICAgICAgLWZyYW1ld29ya3wtYXJjaHwtaXN5c3Jvb3QpCi0JY2FzZSAiICRDQyAiIGluCi0JICAqIiAke2FyZ30gJHsxfSAiKiB8ICoiICR7YXJnfQkkezF9ICIqKSAKLQkJcHJldj1kYXJ3aW5fZnJhbWV3b3JrX3NraXAgOzsKLQkgICopIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLQkgICAgIHByZXY9ZGFyd2luX2ZyYW1ld29yayA7OwotCWVzYWMKLQljb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGFyZyIKLQlmaW5hbGl6ZV9jb21tYW5kPSIkZmluYWxpemVfY29tbWFuZCAkYXJnIgorICAgICAgLWZyYW1ld29yaykKKwlwcmV2PWZyYW1ld29yawogCWNvbnRpbnVlCiAJOzsKIApAQCAtMTU1MSw0NSArNTUyNyw1OSBAQAogICAgICAgLUxbQS1aXVtBLVpdKjoqKQogCWNhc2UgJHdpdGhfZ2NjLyRob3N0IGluCiAJbm8vKi0qLWlyaXgqIHwgLyotKi1pcml4KikKLQkgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotCSAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKIAkgIDs7CiAJZXNhYwogCWNvbnRpbnVlCiAJOzsKIAogICAgICAgLUwqKQotCWRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL14tTC8vJ2AKKwlmdW5jX3N0cmlwbmFtZSAiLUwiICcnICIkYXJnIgorCWlmIHRlc3QgLXogIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiOyB0aGVuCisJICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KKwkgICAgZnVuY19mYXRhbF9lcnJvciAicmVxdWlyZSBubyBzcGFjZSBiZXR3ZWVuIFxgLUwnIGFuZCBcYCQxJyIKKwkgIGVsc2UKKwkgICAgZnVuY19mYXRhbF9lcnJvciAibmVlZCBwYXRoIGZvciBcYC1MJyBvcHRpb24iCisJICBmaQorCWZpCisJZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRmdW5jX3N0cmlwbmFtZV9yZXN1bHQiCisJZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKIAkjIFdlIG5lZWQgYW4gYWJzb2x1dGUgcGF0aC4KIAljYXNlICRkaXIgaW4KIAlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7CiAJKikKIAkgIGFic2Rpcj1gY2QgIiRkaXIiICYmIHB3ZGAKLQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkZGlyJyIgMT4mMgotCSAgICBhYnNkaXI9IiRkaXIiCi0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkZGlyIgotCSAgZmkKKwkgIHRlc3QgLXogIiRhYnNkaXIiICYmIFwKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgogCSAgZGlyPSIkYWJzZGlyIgogCSAgOzsKIAllc2FjCiAJY2FzZSAiJGRlcGxpYnMgIiBpbgotCSoiIC1MJGRpciAiKikgOzsKKwkqIiAtTCRkaXIgIiogfCAqIiAkYXJnICIqKQorCSAgIyBXaWxsIG9ubHkgaGFwcGVuIGZvciBhYnNvbHV0ZSBvciBzeXNyb290IGFyZ3VtZW50cworCSAgOzsKIAkqKQotCSAgZGVwbGlicz0iJGRlcGxpYnMgLUwkZGlyIgotCSAgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiCisJICAjIFByZXNlcnZlIHN5c3Jvb3QsIGJ1dCBuZXZlciBpbmNsdWRlIHJlbGF0aXZlIGRpcmVjdG9yaWVzCisJICBjYXNlICRkaXIgaW4KKwkgICAgW1xcL10qIHwgW0EtWmEtel06W1xcL10qIHwgPSopIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLUwkZGlyIiA7OworCSAgZXNhYworCSAgZnVuY19hcHBlbmQgbGliX3NlYXJjaF9wYXRoICIgJGRpciIKIAkgIDs7CiAJZXNhYwogCWNhc2UgJGhvc3QgaW4KLQkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKikKLQkgIHRlc3RiaW5kaXI9YCRlY2hvICJYJGRpciIgfCAkWHNlZCAtZSAncyovbGliJCovYmluKidgCisJKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLWNlZ2NjKikKKwkgIHRlc3RiaW5kaXI9YCRFQ0hPICIkZGlyIiB8ICRTRUQgJ3MqL2xpYiQqL2JpbionYAogCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCiAJICAqIjokZGlyOiIqKSA7OwotCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGRpciI7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGRpciI7OwogCSAgZXNhYwogCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCiAJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKIAkgIGVzYWMKIAkgIDs7CiAJZXNhYwpAQCAtMTU5OSw3ICs1NTg5LDcgQEAKICAgICAgIC1sKikKIAlpZiB0ZXN0ICJYJGFyZyIgPSAiWC1sYyIgfHwgdGVzdCAiWCRhcmciID0gIlgtbG0iOyB0aGVuCiAJICBjYXNlICRob3N0IGluCi0JICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyopCisJICAqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCiAJICAgICMgVGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgQyBvciBtYXRoIGxpYnJhcnkgKGFzIHN1Y2gpCiAJICAgIGNvbnRpbnVlCiAJICAgIDs7CkBAIC0xNjEzLDcgKzU2MDMsNyBAQAogCSAgICA7OwogCSAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQogCSAgICAjIFJoYXBzb2R5IEMgYW5kIG1hdGggbGlicmFyaWVzIGFyZSBpbiB0aGUgU3lzdGVtIGZyYW1ld29yawotCSAgICBkZXBsaWJzPSIkZGVwbGlicyAtZnJhbWV3b3JrIFN5c3RlbSIKKwkgICAgZnVuY19hcHBlbmQgZGVwbGlicyAiIFN5c3RlbS5sdGZyYW1ld29yayIKIAkgICAgY29udGludWUKIAkgICAgOzsKIAkgICotKi1zY28zLjJ2NSogfCAqLSotc2NvNXY2KikKQEAgLTE2MzMsMjkgKzU2MjMsNyBAQAogCSAgIDs7CiAJIGVzYWMKIAlmaQotCWRlcGxpYnM9IiRkZXBsaWJzICRhcmciCi0JY29udGludWUKLQk7OwotCi0gICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCi0gICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCi0gICAgICAtbW9kZWwpCi0JY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0JY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAkYXJnIgotCWZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCi0JcHJldj14Y29tcGlsZXIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKLQljb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICRhcmciCi0JY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0JZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKLQljb250aW51ZQotCTs7Ci0KLSAgICAgIC1tdWx0aV9tb2R1bGUpCi0Jc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgorCWZ1bmNfYXBwZW5kIGRlcGxpYnMgIiAkYXJnIgogCWNvbnRpbnVlCiAJOzsKIApAQCAtMTY2NCwzNiArNTYzMiwzMCBAQAogCWNvbnRpbnVlCiAJOzsKIAotICAgICAgIyAtNjQsIC1taXBzWzAtOV0gZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBTR0kgY29tcGlsZXIKLSAgICAgICMgLXJbMC05XVswLTldKiBzcGVjaWZpZXMgdGhlIHByb2Nlc3NvciBvbiB0aGUgU0dJIGNvbXBpbGVyCi0gICAgICAjIC14YXJjaD0qLCAteHRhcmdldD0qIGVuYWJsZSA2NC1iaXQgbW9kZSBvbiB0aGUgU3VuIGNvbXBpbGVyCi0gICAgICAjICtEQSosICtERCogZW5hYmxlIDY0LWJpdCBtb2RlIG9uIHRoZSBIUCBjb21waWxlcgotICAgICAgIyAtcSogcGFzcyB0aHJvdWdoIGNvbXBpbGVyIGFyZ3MgZm9yIHRoZSBJQk0gY29tcGlsZXIKLSAgICAgICMgLW0qIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29tcGlsZXIgYXJncyBmb3IgR0NDCi0gICAgICAjIC1tKiwgLXRbNDVdKiwgLXR4c2NhbGUqIHBhc3MgdGhyb3VnaCBhcmNoaXRlY3R1cmUtc3BlY2lmaWMKLSAgICAgICMgY29tcGlsZXIgYXJncyBmb3IgR0NDCi0gICAgICAjIC1wLCAtcGcsIC0tY292ZXJhZ2UsIC1mcHJvZmlsZS0qIHBhc3MgdGhyb3VnaCBwcm9maWxpbmcgZmxhZyBmb3IgR0NDCi0gICAgICAjIC1GL3BhdGggZ2l2ZXMgcGF0aCB0byB1bmluc3RhbGxlZCBmcmFtZXdvcmtzLCBnY2Mgb24gZGFyd2luCi0gICAgICAjIEBmaWxlIEdDQyByZXNwb25zZSBmaWxlcwotICAgICAgLTY0fC1taXBzWzAtOV18LXJbMC05XVswLTldKnwteGFyY2g9KnwteHRhcmdldD0qfCtEQSp8K0REKnwtcSp8LW0qfCBcCi0gICAgICAtdFs0NV0qfC10eHNjYWxlKnwtcHwtcGd8LS1jb3ZlcmFnZXwtZnByb2ZpbGUtKnwtRip8QCopCisgICAgICAjIFRydTY0IFVOSVggdXNlcyAtbW9kZWwgW2FyZ10gdG8gZGV0ZXJtaW5lIHRoZSBsYXlvdXQgb2YgQysrCisgICAgICAjIGNsYXNzZXMsIG5hbWUgbWFuZ2xpbmcsIGFuZCBleGNlcHRpb24gaGFuZGxpbmcuCisgICAgICAjIERhcndpbiB1c2VzIHRoZSAtYXJjaCBmbGFnIHRvIGRldGVybWluZSBvdXRwdXQgYXJjaGl0ZWN0dXJlLgorICAgICAgLW1vZGVsfC1hcmNofC1pc3lzcm9vdHwtLXN5c3Jvb3QpCisJZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisJZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisJcHJldj14Y29tcGlsZXIKKwljb250aW51ZQorCTs7CiAKLQkjIFVua25vd24gYXJndW1lbnRzIGluIGJvdGggZmluYWxpemVfY29tbWFuZCBhbmQgY29tcGlsZV9jb21tYW5kIG5lZWQKLQkjIHRvIGJlIGFlc3RoZXRpY2FsbHkgcXVvdGVkIGJlY2F1c2UgdGhleSBhcmUgZXZhbGVkIGxhdGVyLgotCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQljYXNlICRhcmcgaW4KLQkqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQkgIGFyZz0iXCIkYXJnXCIiCi0JICA7OworICAgICAgLW10fC1tdGhyZWFkc3wta3RocmVhZHwtS3RocmVhZHwtcHRocmVhZHwtcHRocmVhZHN8LS10aHJlYWQtc2FmZXwtdGhyZWFkcykKKwlmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRhcmciCisJZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKKwljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCSAgICAqIiAkYXJnICIqKSA7OworCSAgICAqICkgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkYXJnIiA7OwogCWVzYWMKLSAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0gICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRhcmciCi0gICAgICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGFyZyIKLSAgICAgICAgY29udGludWUKLSAgICAgICAgOzsKKwljb250aW51ZQorCTs7CiAKLSAgICAgIC1zaHJleHQpCi0JcHJldj1zaHJleHQKKyAgICAgIC1tdWx0aV9tb2R1bGUpCisJc2luZ2xlX21vZHVsZT0iJHt3bH0tbXVsdGlfbW9kdWxlIgogCWNvbnRpbnVlCiAJOzsKIApAQCAtMTcwNCwxMSArNTY2NiwxMSBAQAogCiAgICAgICAtbm8taW5zdGFsbCkKIAljYXNlICRob3N0IGluCi0JKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotZGFyd2luKikKKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotKi1kYXJ3aW4qIHwgKi1jZWdjYyopCiAJICAjIFRoZSBQQVRIIGhhY2tlcnkgaW4gd3JhcHBlciBzY3JpcHRzIGlzIHJlcXVpcmVkIG9uIFdpbmRvd3MKIAkgICMgYW5kIERhcndpbiBpbiBvcmRlciBmb3IgdGhlIGxvYWRlciB0byBmaW5kIGFueSBkbGxzIGl0IG5lZWRzLgotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbm8taW5zdGFsbCcgaXMgaWdub3JlZCBmb3IgJGhvc3QiIDE+JjIKLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGFzc3VtaW5nIFxgLW5vLWZhc3QtaW5zdGFsbCcgaW5zdGVhZCIgMT4mMgorCSAgZnVuY193YXJuaW5nICJcYC1uby1pbnN0YWxsJyBpcyBpZ25vcmVkIGZvciAkaG9zdCIKKwkgIGZ1bmNfd2FybmluZyAiYXNzdW1pbmcgXGAtbm8tZmFzdC1pbnN0YWxsJyBpbnN0ZWFkIgogCSAgZmFzdF9pbnN0YWxsPW5vCiAJICA7OwogCSopIG5vX2luc3RhbGw9eWVzIDs7CkBAIC0xNzQ5LDIyICs1NzExLDM2IEBACiAJOzsKIAogICAgICAgLVIqKQotCWRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzL14tUi8vJ2AKKwlmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkYXJnIgorCWRpcj0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJIyBXZSBuZWVkIGFuIGFic29sdXRlIHBhdGguCiAJY2FzZSAkZGlyIGluCiAJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSA7OworCT0qKQorCSAgZnVuY19zdHJpcG5hbWUgJz0nICcnICIkZGlyIgorCSAgZGlyPSRsdF9zeXNyb290JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAorCSAgOzsKIAkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogb25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19mYXRhbF9lcnJvciAib25seSBhYnNvbHV0ZSBydW4tcGF0aHMgYXJlIGFsbG93ZWQiCiAJICA7OwogCWVzYWMKIAljYXNlICIkeHJwYXRoICIgaW4KIAkqIiAkZGlyICIqKSA7OwotCSopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSopIGZ1bmNfYXBwZW5kIHhycGF0aCAiICRkaXIiIDs7CiAJZXNhYwogCWNvbnRpbnVlCiAJOzsKIAorICAgICAgLXNoYXJlZCkKKwkjIFRoZSBlZmZlY3RzIG9mIC1zaGFyZWQgYXJlIGRlZmluZWQgaW4gYSBwcmV2aW91cyBsb29wLgorCWNvbnRpbnVlCisJOzsKKworICAgICAgLXNocmV4dCkKKwlwcmV2PXNocmV4dAorCWNvbnRpbnVlCisJOzsKKwogICAgICAgLXN0YXRpYyB8IC1zdGF0aWMtbGlidG9vbC1saWJzKQogCSMgVGhlIGVmZmVjdHMgb2YgLXN0YXRpYyBhcmUgZGVmaW5lZCBpbiBhIHByZXZpb3VzIGxvb3AuCiAJIyBXZSB1c2VkIHRvIGRvIHRoZSBzYW1lIGFzIC1hbGwtc3RhdGljIG9uIHBsYXRmb3JtcyB0aGF0CkBAIC0xNzgzLDQ3ICs1NzU5LDQ5IEBACiAJcHJldj12aW5mbwogCWNvbnRpbnVlCiAJOzsKKwogICAgICAgLXZlcnNpb24tbnVtYmVyKQogCXByZXY9dmluZm8KIAl2aW5mb19udW1iZXI9eWVzCiAJY29udGludWUKIAk7OwogCisgICAgICAtd2VhaykKKyAgICAgICAgcHJldj13ZWFrCisJY29udGludWUKKwk7OworCiAgICAgICAtV2MsKikKLQlhcmdzPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiIC1lICdzL14tV2MsLy8nYAorCWZ1bmNfc3RyaXBuYW1lICctV2MsJyAnJyAiJGFyZyIKKwlhcmdzPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAlhcmc9CiAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9JywnCiAJZm9yIGZsYWcgaW4gJGFyZ3M7IGRvCiAJICBJRlM9IiRzYXZlX2lmcyIKLQkgIGNhc2UgJGZsYWcgaW4KLQkgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICAgIGZsYWc9IlwiJGZsYWdcIiIKLQkgICAgOzsKLQkgIGVzYWMKLQkgIGFyZz0iJGFyZyAkd2wkZmxhZyIKLQkgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGZsYWciCisgICAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGZsYWciCisJICBmdW5jX2FwcGVuZCBhcmcgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBjb21waWxlcl9mbGFncyAiICRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAlkb25lCiAJSUZTPSIkc2F2ZV9pZnMiCi0JYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgInMvXiAvLyJgCisJZnVuY19zdHJpcG5hbWUgJyAnICcnICIkYXJnIgorCWFyZz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJOzsKIAogICAgICAgLVdsLCopCi0JYXJncz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0IiAtZSAncy9eLVdsLC8vJ2AKKwlmdW5jX3N0cmlwbmFtZSAnLVdsLCcgJycgIiRhcmciCisJYXJncz0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJYXJnPQogCXNhdmVfaWZzPSIkSUZTIjsgSUZTPScsJwogCWZvciBmbGFnIGluICRhcmdzOyBkbwogCSAgSUZTPSIkc2F2ZV9pZnMiCi0JICBjYXNlICRmbGFnIGluCi0JICAgICpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgICBmbGFnPSJcIiRmbGFnXCIiCi0JICAgIDs7Ci0JICBlc2FjCi0JICBhcmc9IiRhcmcgJHdsJGZsYWciCi0JICBjb21waWxlcl9mbGFncz0iJGNvbXBpbGVyX2ZsYWdzICR3bCRmbGFnIgotCSAgbGlua2VyX2ZsYWdzPSIkbGlua2VyX2ZsYWdzICRmbGFnIgorICAgICAgICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiRmbGFnIgorCSAgZnVuY19hcHBlbmQgYXJnICIgJHdsJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgorCSAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkd2wkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCisJICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAkZnVuY19xdW90ZV9mb3JfZXZhbF9yZXN1bHQiCiAJZG9uZQogCUlGUz0iJHNhdmVfaWZzIgotCWFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICJzL14gLy8iYAorCWZ1bmNfc3RyaXBuYW1lICcgJyAnJyAiJGFyZyIKKwlhcmc9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCTs7CiAKICAgICAgIC1YY29tcGlsZXIpCkBAIC0xODQxLDUzICs1ODE5LDY5IEBACiAJY29udGludWUKIAk7OwogCisgICAgICAjIC1tc2dfKiBmb3Igb3NmIGNjCisgICAgICAtbXNnXyopCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKwk7OworCisgICAgICAjIEZsYWdzIHRvIGJlIHBhc3NlZCB0aHJvdWdoIHVuY2hhbmdlZCwgd2l0aCByYXRpb25hbGU6CisgICAgICAjIC02NCwgLW1pcHNbMC05XSAgICAgIGVuYWJsZSA2NC1iaXQgbW9kZSBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAtclswLTldWzAtOV0qICAgICAgICBzcGVjaWZ5IHByb2Nlc3NvciBmb3IgdGhlIFNHSSBjb21waWxlcgorICAgICAgIyAteGFyY2g9KiwgLXh0YXJnZXQ9KiBlbmFibGUgNjQtYml0IG1vZGUgZm9yIHRoZSBTdW4gY29tcGlsZXIKKyAgICAgICMgK0RBKiwgK0REKiAgICAgICAgICAgZW5hYmxlIDY0LWJpdCBtb2RlIGZvciB0aGUgSFAgY29tcGlsZXIKKyAgICAgICMgLXEqICAgICAgICAgICAgICAgICAgY29tcGlsZXIgYXJncyBmb3IgdGhlIElCTSBjb21waWxlcgorICAgICAgIyAtbSosIC10WzQ1XSosIC10eHNjYWxlKiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmxhZ3MgZm9yIEdDQworICAgICAgIyAtRi9wYXRoICAgICAgICAgICAgICBwYXRoIHRvIHVuaW5zdGFsbGVkIGZyYW1ld29ya3MsIGdjYyBvbiBkYXJ3aW4KKyAgICAgICMgLXAsIC1wZywgLS1jb3ZlcmFnZSwgLWZwcm9maWxlLSogIHByb2ZpbGluZyBmbGFncyBmb3IgR0NDCisgICAgICAjIC1mc3RhY2stcHJvdGVjdG9yKiAgIHN0YWNrIHByb3RlY3RvciBmbGFncyBmb3IgR0NDCisgICAgICAjIEBmaWxlICAgICAgICAgICAgICAgIEdDQyByZXNwb25zZSBmaWxlcworICAgICAgIyAtdHA9KiAgICAgICAgICAgICAgICBQb3J0bGFuZCBwZ2NjIHRhcmdldCBwcm9jZXNzb3Igc2VsZWN0aW9uCisgICAgICAjIC0tc3lzcm9vdD0qICAgICAgICAgIGZvciBzeXNyb290IHN1cHBvcnQKKyAgICAgICMgLU8qLCAtZmx0byosIC1md2hvcHIqLCAtZnVzZS1saW5rZXItcGx1Z2luIEdDQyBsaW5rLXRpbWUgb3B0aW1pemF0aW9uCisgICAgICAtNjR8LW1pcHNbMC05XXwtclswLTldWzAtOV0qfC14YXJjaD0qfC14dGFyZ2V0PSp8K0RBKnwrREQqfC1xKnwtbSp8IFwKKyAgICAgIC10WzQ1XSp8LXR4c2NhbGUqfC1wfC1wZ3wtLWNvdmVyYWdlfC1mcHJvZmlsZS0qfC1GKnxAKnwtdHA9KnwtLXN5c3Jvb3Q9KnwgXAorICAgICAgLU8qfC1mbHRvKnwtZndob3ByKnwtZnVzZS1saW5rZXItcGx1Z2lufC1mc3RhY2stcHJvdGVjdG9yKikKKyAgICAgICAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKKyAgICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGFyZyIKKyAgICAgICAgZnVuY19hcHBlbmQgZmluYWxpemVfY29tbWFuZCAiICRhcmciCisgICAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVyX2ZsYWdzICIgJGFyZyIKKyAgICAgICAgY29udGludWUKKyAgICAgICAgOzsKKwogICAgICAgIyBTb21lIG90aGVyIGNvbXBpbGVyIGZsYWcuCiAgICAgICAtKiB8ICsqKQotCSMgVW5rbm93biBhcmd1bWVudHMgaW4gYm90aCBmaW5hbGl6ZV9jb21tYW5kIGFuZCBjb21waWxlX2NvbW1hbmQgbmVlZAotCSMgdG8gYmUgYWVzdGhldGljYWxseSBxdW90ZWQgYmVjYXVzZSB0aGV5IGFyZSBldmFsZWQgbGF0ZXIuCi0JYXJnPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotCWNhc2UgJGFyZyBpbgotCSpbXFtcflwjXF5cJlwqXChcKVx7XH1cfFw7XDxcPlw/XCdcIFwJXSp8Kl0qfCIiKQotCSAgYXJnPSJcIiRhcmdcIiIKLQkgIDs7Ci0JZXNhYworICAgICAgICBmdW5jX3F1b3RlX2Zvcl9ldmFsICIkYXJnIgorCWFyZz0iJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0IgogCTs7CiAKICAgICAgICouJG9iamV4dCkKIAkjIEEgc3RhbmRhcmQgb2JqZWN0LgotCW9ianM9IiRvYmpzICRhcmciCisJZnVuY19hcHBlbmQgb2JqcyAiICRhcmciCiAJOzsKIAogICAgICAgKi5sbykKIAkjIEEgbGlidG9vbC1jb250cm9sbGVkIG9iamVjdC4KIAogCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIG9iamVjdC4KLQlpZiAoJHtTRUR9IC1lICcycScgJGFyZyB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJaWYgZnVuY19sYWxpYl91bnNhZmVfcCAiJGFyZyI7IHRoZW4KIAkgIHBpY19vYmplY3Q9CiAJICBub25fcGljX29iamVjdD0KIAogCSAgIyBSZWFkIHRoZSAubG8gZmlsZQotCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JICBjYXNlICRhcmcgaW4KLQkgICovKiB8ICpcXCopIC4gJGFyZyA7OwotCSAgKikgLiAuLyRhcmcgOzsKLQkgIGVzYWMKKwkgIGZ1bmNfc291cmNlICIkYXJnIgogCi0JICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgXAorCSAgaWYgdGVzdCAteiAiJHBpY19vYmplY3QiIHx8CiAJICAgICB0ZXN0IC16ICIkbm9uX3BpY19vYmplY3QiIHx8Ci0JICAgICB0ZXN0ICIkcGljX29iamVjdCIgPSBub25lICYmIFwKKwkgICAgIHRlc3QgIiRwaWNfb2JqZWN0IiA9IG5vbmUgJiYKIAkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgPSBub25lOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2Ygb2JqZWN0IGZvciBcYCRhcmcnIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICBmdW5jX2ZhdGFsX2Vycm9yICJjYW5ub3QgZmluZCBuYW1lIG9mIG9iamVjdCBmb3IgXGAkYXJnJyIKIAkgIGZpCiAKIAkgICMgRXh0cmFjdCBzdWJkaXJlY3RvcnkgZnJvbSB0aGUgYXJndW1lbnQuCi0JICB4ZGlyPWAkZWNobyAiWCRhcmciIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQkgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRhcmciOyB0aGVuCi0JICAgIHhkaXI9Ci0gCSAgZWxzZQotCSAgICB4ZGlyPSIkeGRpci8iCi0JICBmaQorCSAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgIHhkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0IgogCiAJICBpZiB0ZXN0ICIkcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgogCSAgICAjIFByZXBlbmQgdGhlIHN1YmRpcmVjdG9yeSB0aGUgb2JqZWN0IGlzIGZvdW5kIGluLgpAQCAtMTg5NSw3ICs1ODg5LDcgQEAKIAogCSAgICBpZiB0ZXN0ICIkcHJldiIgPSBkbGZpbGVzOyB0aGVuCiAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSB5ZXMgJiYgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiA9IHllczsgdGhlbgotCQlkbGZpbGVzPSIkZGxmaWxlcyAkcGljX29iamVjdCIKKwkJZnVuY19hcHBlbmQgZGxmaWxlcyAiICRwaWNfb2JqZWN0IgogCQlwcmV2PQogCQljb250aW51ZQogCSAgICAgIGVsc2UKQEAgLTE5MDcsMTIgKzU5MDEsMTIgQEAKIAkgICAgIyBDSEVDSyBNRTogIEkgdGhpbmsgSSBidXN0ZWQgdGhpcy4gIC1Pc3NhbWEKIAkgICAgaWYgdGVzdCAiJHByZXYiID0gZGxwcmVmaWxlczsgdGhlbgogCSAgICAgICMgUHJlbG9hZCB0aGUgb2xkLXN0eWxlIG9iamVjdC4KLQkgICAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkcGljX29iamVjdCIKKwkgICAgICBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJHBpY19vYmplY3QiCiAJICAgICAgcHJldj0KIAkgICAgZmkKIAogCSAgICAjIEEgUElDIG9iamVjdC4KLQkgICAgbGlib2Jqcz0iJGxpYm9ianMgJHBpY19vYmplY3QiCisJICAgIGZ1bmNfYXBwZW5kIGxpYm9ianMgIiAkcGljX29iamVjdCIKIAkgICAgYXJnPSIkcGljX29iamVjdCIKIAkgIGZpCiAKQEAgLTE5MjIsNyArNTkxNiw3IEBACiAJICAgIG5vbl9waWNfb2JqZWN0PSIkeGRpciRub25fcGljX29iamVjdCIKIAogCSAgICAjIEEgc3RhbmRhcmQgbm9uLVBJQyBvYmplY3QKLQkgICAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgogCSAgICBpZiB0ZXN0IC16ICIkcGljX29iamVjdCIgfHwgdGVzdCAiJHBpY19vYmplY3QiID0gbm9uZSA7IHRoZW4KIAkgICAgICBhcmc9IiRub25fcGljX29iamVjdCIKIAkgICAgZmkKQEAgLTE5MzAsNTIgKzU5MjQsNDcgQEAKIAkgICAgIyBJZiB0aGUgUElDIG9iamVjdCBleGlzdHMsIHVzZSBpdCBpbnN0ZWFkLgogCSAgICAjICR4ZGlyIHdhcyBwcmVwZW5kZWQgdG8gJHBpY19vYmplY3QgYWJvdmUuCiAJICAgIG5vbl9waWNfb2JqZWN0PSIkcGljX29iamVjdCIKLQkgICAgbm9uX3BpY19vYmplY3RzPSIkbm9uX3BpY19vYmplY3RzICRub25fcGljX29iamVjdCIKKwkgICAgZnVuY19hcHBlbmQgbm9uX3BpY19vYmplY3RzICIgJG5vbl9waWNfb2JqZWN0IgogCSAgZmkKIAllbHNlCiAJICAjIE9ubHkgYW4gZXJyb3IgaWYgbm90IGRvaW5nIGEgZHJ5LXJ1bi4KLQkgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBlbHNlCi0JICAgICMgRHJ5LXJ1biBjYXNlLgotCisJICBpZiAkb3B0X2RyeV9ydW47IHRoZW4KIAkgICAgIyBFeHRyYWN0IHN1YmRpcmVjdG9yeSBmcm9tIHRoZSBhcmd1bWVudC4KLQkgICAgeGRpcj1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JICAgIGlmIHRlc3QgIlgkeGRpciIgPSAiWCRhcmciOyB0aGVuCi0JICAgICAgeGRpcj0KLQkgICAgZWxzZQotCSAgICAgIHhkaXI9IiR4ZGlyLyIKLQkgICAgZmkKKwkgICAgZnVuY19kaXJuYW1lICIkYXJnIiAiLyIgIiIKKwkgICAgeGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCiAKLQkgICAgcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHtvYmpkaXJ9LyR7YXJnfSIgfCAkWHNlZCAtZSAiJGxvMm8iYAotCSAgICBub25fcGljX29iamVjdD1gJGVjaG8gIlgke3hkaXJ9JHthcmd9IiB8ICRYc2VkIC1lICIkbG8ybyJgCi0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRwaWNfb2JqZWN0IgotCSAgICBub25fcGljX29iamVjdHM9IiRub25fcGljX29iamVjdHMgJG5vbl9waWNfb2JqZWN0IgorCSAgICBmdW5jX2xvMm8gIiRhcmciCisJICAgIHBpY19vYmplY3Q9JHhkaXIkb2JqZGlyLyRmdW5jX2xvMm9fcmVzdWx0CisJICAgIG5vbl9waWNfb2JqZWN0PSR4ZGlyJGZ1bmNfbG8yb19yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRwaWNfb2JqZWN0IgorCSAgICBmdW5jX2FwcGVuZCBub25fcGljX29iamVjdHMgIiAkbm9uX3BpY19vYmplY3QiCisJICBlbHNlCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGFyZycgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBvYmplY3QiCiAJICBmaQogCWZpCiAJOzsKIAogICAgICAgKi4kbGliZXh0KQogCSMgQW4gYXJjaGl2ZS4KLQlkZXBsaWJzPSIkZGVwbGlicyAkYXJnIgotCW9sZF9kZXBsaWJzPSIkb2xkX2RlcGxpYnMgJGFyZyIKKwlmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGFyZyIKKwlmdW5jX2FwcGVuZCBvbGRfZGVwbGlicyAiICRhcmciCiAJY29udGludWUKIAk7OwogCiAgICAgICAqLmxhKQogCSMgQSBsaWJ0b29sLWNvbnRyb2xsZWQgbGlicmFyeS4KIAorCWZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkYXJnIgogCWlmIHRlc3QgIiRwcmV2IiA9IGRsZmlsZXM7IHRoZW4KIAkgICMgVGhpcyBsaWJyYXJ5IHdhcyBzcGVjaWZpZWQgd2l0aCAtZGxvcGVuLgotCSAgZGxmaWxlcz0iJGRsZmlsZXMgJGFyZyIKKwkgIGZ1bmNfYXBwZW5kIGRsZmlsZXMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgcHJldj0KIAllbGlmIHRlc3QgIiRwcmV2IiA9IGRscHJlZmlsZXM7IHRoZW4KIAkgICMgVGhlIGxpYnJhcnkgd2FzIHNwZWNpZmllZCB3aXRoIC1kbHByZW9wZW4uCi0JICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkYXJnIgorCSAgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCiAJICBwcmV2PQogCWVsc2UKLQkgIGRlcGxpYnM9IiRkZXBsaWJzICRhcmciCisJICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAlmaQogCWNvbnRpbnVlCiAJOzsKQEAgLTE5ODQsNzAgKzU5NzMsNTMgQEAKICAgICAgICopCiAJIyBVbmtub3duIGFyZ3VtZW50cyBpbiBib3RoIGZpbmFsaXplX2NvbW1hbmQgYW5kIGNvbXBpbGVfY29tbWFuZCBuZWVkCiAJIyB0byBiZSBhZXN0aGV0aWNhbGx5IHF1b3RlZCBiZWNhdXNlIHRoZXkgYXJlIGV2YWxlZCBsYXRlci4KLQlhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0JY2FzZSAkYXJnIGluCi0JKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JICBhcmc9IlwiJGFyZ1wiIgotCSAgOzsKLQllc2FjCisJZnVuY19xdW90ZV9mb3JfZXZhbCAiJGFyZyIKKwlhcmc9IiRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdCIKIAk7OwogICAgICAgZXNhYyAjIGFyZwogCiAgICAgICAjIE5vdyBhY3R1YWxseSBzdWJzdGl0dXRlIHRoZSBhcmd1bWVudCBpbnRvIHRoZSBjb21tYW5kcy4KICAgICAgIGlmIHRlc3QgLW4gIiRhcmciOyB0aGVuCi0JY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICRhcmciCi0JZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKwlmdW5jX2FwcGVuZCBjb21waWxlX2NvbW1hbmQgIiAkYXJnIgorCWZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkYXJnIgogICAgICAgZmkKICAgICBkb25lICMgYXJndW1lbnQgcGFyc2luZyBsb29wCiAKLSAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHRoZSBcYCRwcmV2YXJnJyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKKyAgICB0ZXN0IC1uICIkcHJldiIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ0aGUgXGAkcHJldmFyZycgb3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IgogCiAgICAgaWYgdGVzdCAiJGV4cG9ydF9keW5hbWljIiA9IHllcyAmJiB0ZXN0IC1uICIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjIjsgdGhlbgogICAgICAgZXZhbCBhcmc9XCIkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKLSAgICAgIGNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCAkYXJnIgotICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJGFyZyIKKyAgICAgIGZ1bmNfYXBwZW5kIGNvbXBpbGVfY29tbWFuZCAiICRhcmciCisgICAgICBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9jb21tYW5kICIgJGFyZyIKICAgICBmaQogCiAgICAgb2xkbGlicz0KICAgICAjIGNhbGN1bGF0ZSB0aGUgbmFtZSBvZiB0aGUgZmlsZSwgd2l0aG91dCBpdHMgZGlyZWN0b3J5Ci0gICAgb3V0cHV0bmFtZT1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisgICAgZnVuY19iYXNlbmFtZSAiJG91dHB1dCIKKyAgICBvdXRwdXRuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiAgICAgbGlib2Jqc19zYXZlPSIkbGlib2JqcyIKIAogICAgIGlmIHRlc3QgLW4gIiRzaGxpYnBhdGhfdmFyIjsgdGhlbgogICAgICAgIyBnZXQgdGhlIGRpcmVjdG9yaWVzIGxpc3RlZCBpbiAkc2hsaWJwYXRoX3ZhcgotICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkZWNobyBcIlhcJHskc2hsaWJwYXRoX3Zhcn1cIiBcfCBcJFhzZWQgLWUgXCdzLzovIC9nXCdcYAorICAgICAgZXZhbCBzaGxpYl9zZWFyY2hfcGF0aD1cYFwkRUNITyBcIlwkeyRzaGxpYnBhdGhfdmFyfVwiIFx8IFwkU0VEIFwncy86LyAvZ1wnXGAKICAgICBlbHNlCiAgICAgICBzaGxpYl9zZWFyY2hfcGF0aD0KICAgICBmaQogICAgIGV2YWwgc3lzX2xpYl9zZWFyY2hfcGF0aD1cIiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWNcIgogICAgIGV2YWwgc3lzX2xpYl9kbHNlYXJjaF9wYXRoPVwiJHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjXCIKIAotICAgIG91dHB1dF9vYmpkaXI9YCRlY2hvICJYJG91dHB1dCIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotICAgIGlmIHRlc3QgIlgkb3V0cHV0X29iamRpciIgPSAiWCRvdXRwdXQiOyB0aGVuCi0gICAgICBvdXRwdXRfb2JqZGlyPSIkb2JqZGlyIgotICAgIGVsc2UKLSAgICAgIG91dHB1dF9vYmpkaXI9IiRvdXRwdXRfb2JqZGlyLyRvYmpkaXIiCi0gICAgZmkKKyAgICBmdW5jX2Rpcm5hbWUgIiRvdXRwdXQiICIvIiAiIgorICAgIG91dHB1dF9vYmpkaXI9IiRmdW5jX2Rpcm5hbWVfcmVzdWx0JG9iamRpciIKKyAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dF9vYmpkaXIvIgorICAgIHRvb2xfb3V0cHV0X29iamRpcj0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CiAgICAgIyBDcmVhdGUgdGhlIG9iamVjdCBkaXJlY3RvcnkuCi0gICAgaWYgdGVzdCAhIC1kICIkb3V0cHV0X29iamRpciI7IHRoZW4KLSAgICAgICRzaG93ICIkbWtkaXIgJG91dHB1dF9vYmpkaXIiCi0gICAgICAkcnVuICRta2RpciAkb3V0cHV0X29iamRpcgotICAgICAgZXhpdF9zdGF0dXM9JD8KLSAgICAgIGlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIkb3V0cHV0X29iamRpciI7IHRoZW4KLQlleGl0ICRleGl0X3N0YXR1cwotICAgICAgZmkKLSAgICBmaQorICAgIGZ1bmNfbWtkaXJfcCAiJG91dHB1dF9vYmpkaXIiCiAKICAgICAjIERldGVybWluZSB0aGUgdHlwZSBvZiBvdXRwdXQKICAgICBjYXNlICRvdXRwdXQgaW4KICAgICAiIikKLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCisgICAgICBmdW5jX2ZhdGFsX2hlbHAgInlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0IGZpbGUiCiAgICAgICA7OwogICAgICouJGxpYmV4dCkgbGlua21vZGU9b2xkbGliIDs7CiAgICAgKi5sbyB8ICouJG9iamV4dCkgbGlua21vZGU9b2JqIDs7CkBAIC0yMDU1LDI3ICs2MDI3LDE4IEBACiAgICAgKikgbGlua21vZGU9cHJvZyA7OyAjIEFueXRoaW5nIGVsc2Ugc2hvdWxkIGJlIGEgcHJvZ3JhbS4KICAgICBlc2FjCiAKLSAgICBjYXNlICRob3N0IGluCi0gICAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKnB3MzIqKQotICAgICAgIyBkb24ndCBlbGltaW5hdGUgZHVwbGljYXRpb25zIGluICRwb3N0ZGVwcyBhbmQgJHByZWRlcHMKLSAgICAgIGR1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz15ZXMKLSAgICAgIDs7Ci0gICAgKikKLSAgICAgIGR1cGxpY2F0ZV9jb21waWxlcl9nZW5lcmF0ZWRfZGVwcz0kZHVwbGljYXRlX2RlcHMKLSAgICAgIDs7Ci0gICAgZXNhYwogICAgIHNwZWNpYWxkZXBsaWJzPQogCiAgICAgbGlicz0KICAgICAjIEZpbmQgYWxsIGludGVyZGVwZW5kZW50IGRlcGxpYnMgYnkgc2VhcmNoaW5nIGZvciBsaWJyYXJpZXMKICAgICAjIHRoYXQgYXJlIGxpbmtlZCBtb3JlIHRoYW4gb25jZSAoZS5nLiAtbGEgLWxiIC1sYSkKICAgICBmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbwotICAgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfZGVwcyIgPSAiWHllcyIgOyB0aGVuCisgICAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgogCWNhc2UgIiRsaWJzICIgaW4KLQkqIiAkZGVwbGliICIqKSBzcGVjaWFsZGVwbGlicz0iJHNwZWNpYWxkZXBsaWJzICRkZXBsaWIiIDs7CisJKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OwogCWVzYWMKICAgICAgIGZpCi0gICAgICBsaWJzPSIkbGlicyAkZGVwbGliIgorICAgICAgZnVuY19hcHBlbmQgbGlicyAiICRkZXBsaWIiCiAgICAgZG9uZQogCiAgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYjsgdGhlbgpAQCAtMjA4NSwxMiArNjA0OCwxMiBAQAogICAgICAgIyAkcG9zdGRlcHMgYW5kIG1hcmsgdGhlbSBhcyBzcGVjaWFsIChpLmUuLCB3aG9zZSBkdXBsaWNhdGVzIGFyZQogICAgICAgIyBub3QgdG8gYmUgZWxpbWluYXRlZCkuCiAgICAgICBwcmVfcG9zdF9kZXBzPQotICAgICAgaWYgdGVzdCAiWCRkdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorICAgICAgaWYgJG9wdF9kdXBsaWNhdGVfY29tcGlsZXJfZ2VuZXJhdGVkX2RlcHM7IHRoZW4KIAlmb3IgcHJlX3Bvc3RfZGVwIGluICRwcmVkZXBzICRwb3N0ZGVwczsgZG8KIAkgIGNhc2UgIiRwcmVfcG9zdF9kZXBzICIgaW4KLQkgICoiICRwcmVfcG9zdF9kZXAgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJHByZV9wb3N0X2RlcHMiIDs7CisJICAqIiAkcHJlX3Bvc3RfZGVwICIqKSBmdW5jX2FwcGVuZCBzcGVjaWFsZGVwbGlicyAiICRwcmVfcG9zdF9kZXBzIiA7OwogCSAgZXNhYwotCSAgcHJlX3Bvc3RfZGVwcz0iJHByZV9wb3N0X2RlcHMgJHByZV9wb3N0X2RlcCIKKwkgIGZ1bmNfYXBwZW5kIHByZV9wb3N0X2RlcHMgIiAkcHJlX3Bvc3RfZGVwIgogCWRvbmUKICAgICAgIGZpCiAgICAgICBwcmVfcG9zdF9kZXBzPQpAQCAtMjEwMSwxNSArNjA2NCwxNiBAQAogICAgIG5ld2xpYl9zZWFyY2hfcGF0aD0KICAgICBuZWVkX3JlbGluaz1ubyAjIHdoZXRoZXIgd2UncmUgbGlua2luZyBhbnkgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKICAgICBub3RpbnN0X2RlcGxpYnM9ICMgbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworICAgIG5vdGluc3RfcGF0aD0gIyBwYXRocyB0aGF0IGNvbnRhaW4gbm90LWluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcworCiAgICAgY2FzZSAkbGlua21vZGUgaW4KICAgICBsaWIpCi0JcGFzc2VzPSJjb252IGxpbmsiCisJcGFzc2VzPSJjb252IGRscHJlb3BlbiBsaW5rIgogCWZvciBmaWxlIGluICRkbGZpbGVzICRkbHByZWZpbGVzOyBkbwogCSAgY2FzZSAkZmlsZSBpbgogCSAgKi5sYSkgOzsKIAkgICopCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGxpYnJhcmllcyBjYW4gXGAtZGxvcGVuJyBvbmx5IGxpYnRvb2wgbGlicmFyaWVzOiAkZmlsZSIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgZnVuY19mYXRhbF9oZWxwICJsaWJyYXJpZXMgY2FuIFxgLWRsb3Blbicgb25seSBsaWJ0b29sIGxpYnJhcmllczogJGZpbGUiCiAJICAgIDs7CiAJICBlc2FjCiAJZG9uZQpAQCAtMjEyNSw3ICs2MDg5LDIwIEBACiAgICAgKikgIHBhc3Nlcz0iY29udiIKIAk7OwogICAgIGVzYWMKKwogICAgIGZvciBwYXNzIGluICRwYXNzZXM7IGRvCisgICAgICAjIFRoZSBwcmVvcGVuIHBhc3MgaW4gbGliIG1vZGUgcmV2ZXJzZXMgJGRlcGxpYnM7IHB1dCBpdCBiYWNrIGhlcmUKKyAgICAgICMgc28gdGhhdCAtTCBjb21lcyBiZWZvcmUgbGlicyB0aGF0IG5lZWQgaXQgZm9yIGluc3RhbmNlLi4uCisgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIjsgdGhlbgorCSMjIEZJWE1FOiBGaW5kIHRoZSBwbGFjZSB3aGVyZSB0aGUgbGlzdCBpcyByZWJ1aWx0IGluIHRoZSB3cm9uZworCSMjICAgICAgICBvcmRlciwgYW5kIGZpeCBpdCB0aGVyZSBwcm9wZXJseQorICAgICAgICB0bXBfZGVwbGlicz0KKwlmb3IgZGVwbGliIGluICRkZXBsaWJzOyBkbworCSAgdG1wX2RlcGxpYnM9IiRkZXBsaWIgJHRtcF9kZXBsaWJzIgorCWRvbmUKKwlkZXBsaWJzPSIkdG1wX2RlcGxpYnMiCisgICAgICBmaQorCiAgICAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gImxpYixsaW5rIiB8fAogCSB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csc2NhbiI7IHRoZW4KIAlsaWJzPSIkZGVwbGlicyIKQEAgLTIxMzgsMTEgKzYxMTUsMzUgQEAKIAlsaW5rKSBsaWJzPSIkZGVwbGlicyAlREVQTElCUyUgJGRlcGVuZGVuY3lfbGlicyIgOzsKIAllc2FjCiAgICAgICBmaQorICAgICAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJsaWIsZGxwcmVvcGVuIjsgdGhlbgorCSMgQ29sbGVjdCBhbmQgZm9yd2FyZCBkZXBsaWJzIG9mIHByZW9wZW5lZCBsaWJ0b29sIGxpYnMKKwlmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbworCSAgIyBJZ25vcmUgbm9uLWxpYnRvb2wtbGlicworCSAgZGVwZW5kZW5jeV9saWJzPQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRsaWIiCisJICBjYXNlICRsaWIgaW4KKwkgICoubGEpCWZ1bmNfc291cmNlICIkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IiA7OworCSAgZXNhYworCisJICAjIENvbGxlY3QgcHJlb3BlbmVkIGxpYnRvb2wgZGVwbGlicywgZXhjZXB0IGFueSB0aGlzIGxpYnJhcnkKKwkgICMgaGFzIGRlY2xhcmVkIGFzIHdlYWsgbGlicworCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBmdW5jX2Jhc2VuYW1lICIkZGVwbGliIgorICAgICAgICAgICAgZGVwbGliX2Jhc2U9JGZ1bmNfYmFzZW5hbWVfcmVzdWx0CisJICAgIGNhc2UgIiAkd2Vha19saWJzICIgaW4KKwkgICAgKiIgJGRlcGxpYl9iYXNlICIqKSA7OworCSAgICAqKSBmdW5jX2FwcGVuZCBkZXBsaWJzICIgJGRlcGxpYiIgOzsKKwkgICAgZXNhYworCSAgZG9uZQorCWRvbmUKKwlsaWJzPSIkZGxwcmVmaWxlcyIKKyAgICAgIGZpCiAgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KIAkjIENvbGxlY3QgZGxwcmVvcGVuZWQgbGlicmFyaWVzCiAJc2F2ZV9kZXBsaWJzPSIkZGVwbGlicyIKIAlkZXBsaWJzPQogICAgICAgZmkKKwogICAgICAgZm9yIGRlcGxpYiBpbiAkbGliczsgZG8KIAlsaWI9CiAJZm91bmQ9bm8KQEAgLTIxNTIsMTYgKzYxNTMsMjMgQEAKIAkgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCiAJICAgIGZpbmFsaXplX2RlcGxpYnM9IiRkZXBsaWIgJGZpbmFsaXplX2RlcGxpYnMiCiAJICBlbHNlCi0JICAgIGNvbXBpbGVyX2ZsYWdzPSIkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYiIKKwkgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAkZGVwbGliIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKIAkgIGZpCiAJICBjb250aW51ZQogCSAgOzsKIAktbCopCiAJICBpZiB0ZXN0ICIkbGlua21vZGUiICE9IGxpYiAmJiB0ZXN0ICIkbGlua21vZGUiICE9IHByb2c7IHRoZW4KLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtbCcgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMvb2JqZWN0cyIgMT4mMgorCSAgICBmdW5jX3dhcm5pbmcgIlxgLWwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiCiAJICAgIGNvbnRpbnVlCiAJICBmaQotCSAgbmFtZT1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzL14tbC8vJ2AKKwkgIGZ1bmNfc3RyaXBuYW1lICctbCcgJycgIiRkZXBsaWIiCisJICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KIAkgICAgc2VhcmNoZGlycz0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGliX3NlYXJjaF9wYXRoICRjb21waWxlcl9saWJfc2VhcmNoX2RpcnMgJHN5c19saWJfc2VhcmNoX3BhdGggJHNobGliX3NlYXJjaF9wYXRoIgogCSAgZWxzZQpAQCAtMjE5NywyMSArNjIwNSwxNyBAQAogCSAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCiAJICAgICAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJICAgICAgKiIgJGRlcGxpYiAiKikKLQkJaWYgKCR7U0VEfSAtZSAnMnEnICRsaWIgfAotICAgICAgICAgICAgICAgICAgICBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgorCQlpZiBmdW5jX2xhbGliX3AgIiRsaWIiOyB0aGVuCiAJCSAgbGlicmFyeV9uYW1lcz0KIAkJICBvbGRfbGlicmFyeT0KLQkJICBjYXNlICRsaWIgaW4KLQkJICAqLyogfCAqXFwqKSAuICRsaWIgOzsKLQkJICAqKSAuIC4vJGxpYiA7OwotCQkgIGVzYWMKKwkJICBmdW5jX3NvdXJjZSAiJGxpYiIKIAkJICBmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCiAJCSAgICBsbD0iJGwiCiAJCSAgZG9uZQogCQkgIGlmIHRlc3QgIlgkbGwiID0gIlgkb2xkX2xpYnJhcnkiIDsgdGhlbiAjIG9ubHkgc3RhdGljIHZlcnNpb24gYXZhaWxhYmxlCiAJCSAgICBmb3VuZD1ubwotCQkgICAgbGFkaXI9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCQkgICAgdGVzdCAiWCRsYWRpciIgPSAiWCRsaWIiICYmIGxhZGlyPSIuIgorCQkgICAgZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwkJICAgIGxhZGlyPSIkZnVuY19kaXJuYW1lX3Jlc3VsdCIKIAkJICAgIGxpYj0kbGFkaXIvJG9sZF9saWJyYXJ5CiAJCSAgICBpZiB0ZXN0ICIkbGlua21vZGUsJHBhc3MiID0gInByb2csbGluayI7IHRoZW4KIAkJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCkBAIC0yMjIzLDE5ICs2MjI3LDM2IEBACiAJCSAgICBjb250aW51ZQogCQkgIGZpCiAJCWZpCi0JICAgICAgICA7OworCQk7OwogCSAgICAgICopIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQogCSAgZmkKIAkgIDs7ICMgLWwKKwkqLmx0ZnJhbWV3b3JrKQorCSAgaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCisJICAgIGNvbXBpbGVfZGVwbGlicz0iJGRlcGxpYiAkY29tcGlsZV9kZXBsaWJzIgorCSAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgorCSAgZWxzZQorCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBpZiB0ZXN0ICIkbGlua21vZGUiID0gbGliIDsgdGhlbgorCQljYXNlICIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiBpbgorCQkgICAgKiIgJGRlcGxpYiAiKikgOzsKKwkJICAgICogKSBmdW5jX2FwcGVuZCBuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiICRkZXBsaWIiIDs7CisJCWVzYWMKKwkgICAgZmkKKwkgIGZpCisJICBjb250aW51ZQorCSAgOzsKIAktTCopCiAJICBjYXNlICRsaW5rbW9kZSBpbgogCSAgbGliKQogCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgogCSAgICB0ZXN0ICIkcGFzcyIgPSBjb252ICYmIGNvbnRpbnVlCiAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYAorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgICAgOzsKIAkgIHByb2cpCiAJICAgIGlmIHRlc3QgIiRwYXNzIiA9IGNvbnY7IHRoZW4KQEAgLTIyNDgsMjcgKzYyNjksMzQgQEAKIAkgICAgICBjb21waWxlX2RlcGxpYnM9IiRkZXBsaWIgJGNvbXBpbGVfZGVwbGlicyIKIAkgICAgICBmaW5hbGl6ZV9kZXBsaWJzPSIkZGVwbGliICRmaW5hbGl6ZV9kZXBsaWJzIgogCSAgICBmaQotCSAgICBuZXdsaWJfc2VhcmNoX3BhdGg9IiRuZXdsaWJfc2VhcmNoX3BhdGggImAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1MLy8nYAorCSAgICBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIKIAkgICAgOzsKIAkgICopCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLUwnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzL29iamVjdHMiIDE+JjIKKwkgICAgZnVuY193YXJuaW5nICJcYC1MJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcy9vYmplY3RzIgogCSAgICA7OwogCSAgZXNhYyAjIGxpbmttb2RlCiAJICBjb250aW51ZQogCSAgOzsgIyAtTAogCS1SKikKIAkgIGlmIHRlc3QgIiRwYXNzIiA9IGxpbms7IHRoZW4KLQkgICAgZGlyPWAkZWNobyAiWCRkZXBsaWIiIHwgJFhzZWQgLWUgJ3MvXi1SLy8nYAorCSAgICBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkZGVwbGliIgorCSAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkgICAgZGlyPSRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQKIAkgICAgIyBNYWtlIHN1cmUgdGhlIHhycGF0aCBjb250YWlucyBvbmx5IHVuaXF1ZSBkaXJlY3Rvcmllcy4KIAkgICAgY2FzZSAiJHhycGF0aCAiIGluCiAJICAgICoiICRkaXIgIiopIDs7Ci0JICAgICopIHhycGF0aD0iJHhycGF0aCAkZGlyIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkZGlyIiA7OwogCSAgICBlc2FjCiAJICBmaQogCSAgZGVwbGlicz0iJGRlcGxpYiAkZGVwbGlicyIKIAkgIGNvbnRpbnVlCiAJICA7OwotCSoubGEpIGxpYj0iJGRlcGxpYiIgOzsKKwkqLmxhKQorCSAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgOzsKIAkqLiRsaWJleHQpCiAJICBpZiB0ZXN0ICIkcGFzcyIgPSBjb252OyB0aGVuCiAJICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCkBAIC0yMjc2LDM1ICs2MzA0LDQxIEBACiAJICBmaQogCSAgY2FzZSAkbGlua21vZGUgaW4KIAkgIGxpYikKLQkgICAgdmFsaWRfYV9saWI9bm8KLQkgICAgY2FzZSAkZGVwbGlic19jaGVja19tZXRob2QgaW4KLQkgICAgICBtYXRjaF9wYXR0ZXJuKikKLQkJc2V0IGR1bW15ICRkZXBsaWJzX2NoZWNrX21ldGhvZAotCSAgICAgICAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMiBcKC4qXCkiYAotCQlpZiBldmFsICRlY2hvIFwiJGRlcGxpYlwiIDI+L2Rldi9udWxsIFwKLQkJICAgIHwgJFNFRCAxMHEgXAorCSAgICAjIExpbmtpbmcgY29udmVuaWVuY2UgbW9kdWxlcyBpbnRvIHNoYXJlZCBsaWJyYXJpZXMgaXMgYWxsb3dlZCwKKwkgICAgIyBidXQgbGlua2luZyBvdGhlciBzdGF0aWMgbGlicmFyaWVzIGlzIG5vbi1wb3J0YWJsZS4KKwkgICAgY2FzZSAiICRkbHByZWNvbnZlbmllbmNlbGlicyAiIGluCisJICAgICoiICRkZXBsaWIgIiopIDs7CisJICAgICopCisJICAgICAgdmFsaWRfYV9saWI9bm8KKwkgICAgICBjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCQltYXRjaF9wYXR0ZXJuKikKKwkJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCQkgIG1hdGNoX3BhdHRlcm5fcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDEgXCguKlwpImAKKwkJICBpZiBldmFsICJcJEVDSE8gXCIkZGVwbGliXCIiIDI+L2Rldi9udWxsIHwgJFNFRCAxMHEgXAogCQkgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkgICAgdmFsaWRfYV9saWI9eWVzCisJCSAgZmkKKwkJOzsKKwkJcGFzc19hbGwpCiAJCSAgdmFsaWRfYV9saWI9eWVzCi0JCWZpCiAJCTs7Ci0JICAgICAgcGFzc19hbGwpCi0JCXZhbGlkX2FfbGliPXllcwotCQk7OwotICAgICAgICAgICAgZXNhYwotCSAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgotCSAgICAgICRlY2hvCi0JICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBUcnlpbmcgdG8gbGluayB3aXRoIHN0YXRpYyBsaWIgYXJjaGl2ZSAkZGVwbGliLiIKLQkgICAgICAkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkgICAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkgICAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCSAgICAgICRlY2hvICIqKiogYmVjYXVzZSB0aGUgZmlsZSBleHRlbnNpb25zIC4kbGliZXh0IG9mIHRoaXMgYXJndW1lbnQgbWFrZXMgbWUgYmVsaWV2ZSIKLQkgICAgICAkZWNobyAiKioqIHRoYXQgaXQgaXMganVzdCBhIHN0YXRpYyBhcmNoaXZlIHRoYXQgSSBzaG91bGQgbm90IHVzZWQgaGVyZS4iCi0JICAgIGVsc2UKLQkgICAgICAkZWNobwotCSAgICAgICRlY2hvICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKLQkgICAgICAkZWNobyAiKioqIHN0YXRpYyBsaWJyYXJ5ICRkZXBsaWIgaXMgbm90IHBvcnRhYmxlISIKLQkgICAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgotCSAgICBmaQorCSAgICAgIGVzYWMKKwkgICAgICBpZiB0ZXN0ICIkdmFsaWRfYV9saWIiICE9IHllczsgdGhlbgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogVHJ5aW5nIHRvIGxpbmsgd2l0aCBzdGF0aWMgbGliIGFyY2hpdmUgJGRlcGxpYi4iCisJCWVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCisJCWVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCWVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKKwkJZWNobyAiKioqIGJlY2F1c2UgdGhlIGZpbGUgZXh0ZW5zaW9ucyAuJGxpYmV4dCBvZiB0aGlzIGFyZ3VtZW50IG1ha2VzIG1lIGJlbGlldmUiCisJCWVjaG8gIioqKiB0aGF0IGl0IGlzIGp1c3QgYSBzdGF0aWMgYXJjaGl2ZSB0aGF0IEkgc2hvdWxkIG5vdCB1c2UgaGVyZS4iCisJICAgICAgZWxzZQorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogTGlua2luZyB0aGUgc2hhcmVkIGxpYnJhcnkgJG91dHB1dCBhZ2FpbnN0IHRoZSIKKwkJJEVDSE8gIioqKiBzdGF0aWMgbGlicmFyeSAkZGVwbGliIGlzIG5vdCBwb3J0YWJsZSEiCisJCWRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCisJICAgICAgZmkKKwkgICAgICA7OworCSAgICBlc2FjCiAJICAgIGNvbnRpbnVlCiAJICAgIDs7CiAJICBwcm9nKQpAQCAtMjMyNSwxMSArNjM1OSwxMSBAQAogCSAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW4gfHwgdGVzdCAiJGRsb3Blbl9zdXBwb3J0IiAhPSB5ZXMgfHwgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbGlicyIgPSBubzsgdGhlbgogCSAgICAgICMgSWYgdGhlcmUgaXMgbm8gZGxvcGVuIHN1cHBvcnQgb3Igd2UncmUgbGlua2luZyBzdGF0aWNhbGx5LAogCSAgICAgICMgd2UgbmVlZCB0byBwcmVsb2FkLgotCSAgICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkZXBsaWIiCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkZXBsaWIiCiAJICAgICAgY29tcGlsZV9kZXBsaWJzPSIkZGVwbGliICRjb21waWxlX2RlcGxpYnMiCiAJICAgICAgZmluYWxpemVfZGVwbGlicz0iJGRlcGxpYiAkZmluYWxpemVfZGVwbGlicyIKIAkgICAgZWxzZQotCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRkZXBsaWIiCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRkZXBsaWIiCiAJICAgIGZpCiAJICBmaQogCSAgY29udGludWUKQEAgLTIzMzksMjEgKzYzNzMsMTggQEAKIAkgIGNvbnRpbnVlCiAJICA7OwogCWVzYWMgIyBjYXNlICRkZXBsaWIKKwogCWlmIHRlc3QgIiRmb3VuZCIgPSB5ZXMgfHwgdGVzdCAtZiAiJGxpYiI7IHRoZW4gOgogCWVsc2UKLQkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIHRoZSBsaWJyYXJ5IFxgJGxpYicgb3IgdW5oYW5kbGVkIGFyZ3VtZW50IFxgJGRlcGxpYiciIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IGZpbmQgdGhlIGxpYnJhcnkgXGAkbGliJyBvciB1bmhhbmRsZWQgYXJndW1lbnQgXGAkZGVwbGliJyIKIAlmaQogCiAJIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLQlpZiAoJHtTRUR9IC1lICcycScgJGxpYiB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKLQllbHNlCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JZmkKKwlmdW5jX2xhbGliX3Vuc2FmZV9wICIkbGliIiBcCisJICB8fCBmdW5jX2ZhdGFsX2Vycm9yICJcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIKIAotCWxhZGlyPWAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLQl0ZXN0ICJYJGxhZGlyIiA9ICJYJGxpYiIgJiYgbGFkaXI9Ii4iCisJZnVuY19kaXJuYW1lICIkbGliIiAiIiAiLiIKKwlsYWRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCiAKIAlkbG5hbWU9CiAJZGxvcGVuPQpAQCAtMjM2MSw2ICs2MzkyLDcgQEAKIAlsaWJkaXI9CiAJbGlicmFyeV9uYW1lcz0KIAlvbGRfbGlicmFyeT0KKwlpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPQogCSMgSWYgdGhlIGxpYnJhcnkgd2FzIGluc3RhbGxlZCB3aXRoIGFuIG9sZCByZWxlYXNlIG9mIGxpYnRvb2wsCiAJIyBpdCB3aWxsIG5vdCByZWRlZmluZSB2YXJpYWJsZXMgaW5zdGFsbGVkLCBvciBzaG91bGRub3RsaW5rCiAJaW5zdGFsbGVkPXllcwpAQCAtMjM2OSwxNiArNjQwMSwyNCBAQAogCiAKIAkjIFJlYWQgdGhlIC5sYSBmaWxlCi0JY2FzZSAkbGliIGluCi0JKi8qIHwgKlxcKikgLiAkbGliIDs7Ci0JKikgLiAuLyRsaWIgOzsKLQllc2FjCisJZnVuY19zb3VyY2UgIiRsaWIiCiAKKwkjIENvbnZlcnQgIi1mcmFtZXdvcmsgZm9vIiB0byAiZm9vLmx0ZnJhbWV3b3JrIgorCWlmIHRlc3QgLW4gIiRpbmhlcml0ZWRfbGlua2VyX2ZsYWdzIjsgdGhlbgorCSAgdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZ3M9YCRFQ0hPICIkaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzLy1mcmFtZXdvcmsgXChbXiAkXSpcKS9cMS5sdGZyYW1ld29yay9nJ2AKKwkgIGZvciB0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnIGluICR0bXBfaW5oZXJpdGVkX2xpbmtlcl9mbGFnczsgZG8KKwkgICAgY2FzZSAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyAiIGluCisJICAgICAgKiIgJHRtcF9pbmhlcml0ZWRfbGlua2VyX2ZsYWcgIiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgIiAkdG1wX2luaGVyaXRlZF9saW5rZXJfZmxhZyI7OworCSAgICBlc2FjCisJICBkb25lCisJZmkKKwlkZXBlbmRlbmN5X2xpYnM9YCRFQ0hPICIgJGRlcGVuZGVuY3lfbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAogCWlmIHRlc3QgIiRsaW5rbW9kZSwkcGFzcyIgPSAibGliLGxpbmsiIHx8CiAJICAgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLHNjYW4iIHx8CiAJICAgeyB0ZXN0ICIkbGlua21vZGUiICE9IHByb2cgJiYgdGVzdCAiJGxpbmttb2RlIiAhPSBsaWI7IH07IHRoZW4KLQkgIHRlc3QgLW4gIiRkbG9wZW4iICYmIGRsZmlsZXM9IiRkbGZpbGVzICRkbG9wZW4iCi0JICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkZGxwcmVvcGVuIgorCSAgdGVzdCAtbiAiJGRsb3BlbiIgJiYgZnVuY19hcHBlbmQgZGxmaWxlcyAiICRkbG9wZW4iCisJICB0ZXN0IC1uICIkZGxwcmVvcGVuIiAmJiBmdW5jX2FwcGVuZCBkbHByZWZpbGVzICIgJGRscHJlb3BlbiIKIAlmaQogCiAJaWYgdGVzdCAiJHBhc3MiID0gY29udjsgdGhlbgpAQCAtMjM4Niw0NSArNjQyNiw0NyBAQAogCSAgZGVwbGlicz0iJGxpYiAkZGVwbGlicyIKIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCiAJICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSI7IHRoZW4KLQkgICAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBuYW1lIG9mIGxpbmsgbGlicmFyeSBmb3IgXGAkbGliJyIgMT4mMgotCSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgICAgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgogCSAgICBmaQogCSAgICAjIEl0IGlzIGEgbGlidG9vbCBjb252ZW5pZW5jZSBsaWJyYXJ5LCBzbyBhZGQgaW4gaXRzIG9iamVjdHMuCi0JICAgIGNvbnZlbmllbmNlPSIkY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotCSAgICBvbGRfY29udmVuaWVuY2U9IiRvbGRfY29udmVuaWVuY2UgJGxhZGlyLyRvYmpkaXIvJG9sZF9saWJyYXJ5IgotCSAgICB0bXBfbGlicz0KLQkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWIgJGRlcGxpYnMiCi0gICAgICAgICAgICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgotCSAgICAgICAgY2FzZSAiJHRtcF9saWJzICIgaW4KLQkgICAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKLQkgICAgICAgIGVzYWMKLSAgICAgICAgICAgICAgZmkKLQkgICAgICB0bXBfbGlicz0iJHRtcF9saWJzICRkZXBsaWIiCi0JICAgIGRvbmUKKwkgICAgZnVuY19hcHBlbmQgY29udmVuaWVuY2UgIiAkbGFkaXIvJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICAgIGZ1bmNfYXBwZW5kIG9sZF9jb252ZW5pZW5jZSAiICRsYWRpci8kb2JqZGlyLyRvbGRfbGlicmFyeSIKIAkgIGVsaWYgdGVzdCAiJGxpbmttb2RlIiAhPSBwcm9nICYmIHRlc3QgIiRsaW5rbW9kZSIgIT0gbGliOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgY29udmVuaWVuY2UgbGlicmFyeSIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSBjb252ZW5pZW5jZSBsaWJyYXJ5IgogCSAgZmkKKwkgIHRtcF9saWJzPQorCSAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICBkZXBsaWJzPSIkZGVwbGliICRkZXBsaWJzIgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgorCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCisJICAgICAgKiIgJGRlcGxpYiAiKikgZnVuY19hcHBlbmQgc3BlY2lhbGRlcGxpYnMgIiAkZGVwbGliIiA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgorCSAgZG9uZQogCSAgY29udGludWUKIAlmaSAjICRwYXNzID0gY29udgogCiAKIAkjIEdldCB0aGUgbmFtZSBvZiB0aGUgbGlicmFyeSB3ZSBsaW5rIGFnYWluc3QuCiAJbGlua2xpYj0KLQlmb3IgbCBpbiAkb2xkX2xpYnJhcnkgJGxpYnJhcnlfbmFtZXM7IGRvCi0JICBsaW5rbGliPSIkbCIKLQlkb25lCisJaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJgorCSAgIHsgdGVzdCAiJHByZWZlcl9zdGF0aWNfbGlicyIgPSB5ZXMgfHwKKwkgICAgIHRlc3QgIiRwcmVmZXJfc3RhdGljX2xpYnMsJGluc3RhbGxlZCIgPSAiYnVpbHQsbm8iOyB9OyB0aGVuCisJICBsaW5rbGliPSRvbGRfbGlicmFyeQorCWVsc2UKKwkgIGZvciBsIGluICRvbGRfbGlicmFyeSAkbGlicmFyeV9uYW1lczsgZG8KKwkgICAgbGlua2xpYj0iJGwiCisJICBkb25lCisJZmkKIAlpZiB0ZXN0IC16ICIkbGlua2xpYiI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBmaW5kIG5hbWUgb2YgbGluayBsaWJyYXJ5IGZvciBcYCRsaWInIgogCWZpCiAKIAkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRsb3Blbi4KIAlpZiB0ZXN0ICIkcGFzcyIgPSBkbG9wZW47IHRoZW4KIAkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCAtZGxvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgZnVuY19mYXRhbF9lcnJvciAiY2Fubm90IC1kbG9wZW4gYSBjb252ZW5pZW5jZSBsaWJyYXJ5OiBcYCRsaWInIgogCSAgZmkKIAkgIGlmIHRlc3QgLXogIiRkbG5hbWUiIHx8CiAJICAgICB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiICE9IHllcyB8fApAQCAtMjQzMyw5ICs2NDc1LDkgQEAKIAkgICAgIyBzdGF0aWNhbGx5LCB3ZSBuZWVkIHRvIHByZWxvYWQuICBXZSBhbHNvIG5lZWQgdG8gcHJlbG9hZCBhbnkKIAkgICAgIyBkZXBlbmRlbnQgbGlicmFyaWVzIHNvIGxpYmx0ZGwncyBkZXBsaWIgcHJlbG9hZGVyIGRvZXNuJ3QKIAkgICAgIyBib21iIG91dCBpbiB0aGUgbG9hZCBkZXBsaWJzIHBoYXNlLgotCSAgICBkbHByZWZpbGVzPSIkZGxwcmVmaWxlcyAkbGliICRkZXBlbmRlbmN5X2xpYnMiCisJICAgIGZ1bmNfYXBwZW5kIGRscHJlZmlsZXMgIiAkbGliICRkZXBlbmRlbmN5X2xpYnMiCiAJICBlbHNlCi0JICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWIiCisJICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkbGliIgogCSAgZmkKIAkgIGNvbnRpbnVlCiAJZmkgIyAkcGFzcyA9IGRsb3BlbgpAQCAtMjQ0NiwyNCArNjQ4OCwyNSBAQAogCSopCiAJICBhYnNfbGFkaXI9YGNkICIkbGFkaXIiICYmIHB3ZGAKIAkgIGlmIHRlc3QgLXogIiRhYnNfbGFkaXIiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGNhbm5vdCBkZXRlcm1pbmUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUgb2YgXGAkbGFkaXInIiAxPiYyCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHBhc3NpbmcgaXQgbGl0ZXJhbGx5IHRvIHRoZSBsaW5rZXIsIGFsdGhvdWdoIGl0IG1pZ2h0IGZhaWwiIDE+JjIKKwkgICAgZnVuY193YXJuaW5nICJjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGxhZGlyJyIKKwkgICAgZnVuY193YXJuaW5nICJwYXNzaW5nIGl0IGxpdGVyYWxseSB0byB0aGUgbGlua2VyLCBhbHRob3VnaCBpdCBtaWdodCBmYWlsIgogCSAgICBhYnNfbGFkaXI9IiRsYWRpciIKIAkgIGZpCiAJICA7OwogCWVzYWMKLQlsYW5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAorCWZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJbGFuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiAKIAkjIEZpbmQgdGhlIHJlbGV2YW50IG9iamVjdCBkaXJlY3RvcnkgYW5kIGxpYnJhcnkgbmFtZS4KIAlpZiB0ZXN0ICJYJGluc3RhbGxlZCIgPSBYeWVzOyB0aGVuCi0JICBpZiB0ZXN0ICEgLWYgIiRsaWJkaXIvJGxpbmtsaWIiICYmIHRlc3QgLWYgIiRhYnNfbGFkaXIvJGxpbmtsaWIiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IGxpYnJhcnkgXGAkbGliJyB3YXMgbW92ZWQuIiAxPiYyCisJICBpZiB0ZXN0ICEgLWYgIiRsdF9zeXNyb290JGxpYmRpci8kbGlua2xpYiIgJiYgdGVzdCAtZiAiJGFic19sYWRpci8kbGlua2xpYiI7IHRoZW4KKwkgICAgZnVuY193YXJuaW5nICJsaWJyYXJ5IFxgJGxpYicgd2FzIG1vdmVkLiIKIAkgICAgZGlyPSIkbGFkaXIiCiAJICAgIGFic2Rpcj0iJGFic19sYWRpciIKIAkgICAgbGliZGlyPSIkYWJzX2xhZGlyIgogCSAgZWxzZQotCSAgICBkaXI9IiRsaWJkaXIiCi0JICAgIGFic2Rpcj0iJGxpYmRpciIKKwkgICAgZGlyPSIkbHRfc3lzcm9vdCRsaWJkaXIiCisJICAgIGFic2Rpcj0iJGx0X3N5c3Jvb3QkbGliZGlyIgogCSAgZmkKIAkgIHRlc3QgIlgkaGFyZGNvZGVfYXV0b21hdGljIiA9IFh5ZXMgJiYgYXZvaWR0ZW1wcnBhdGg9eWVzCiAJZWxzZQpAQCAtMjQ3MSwzMiArNjUxNCw2MiBAQAogCSAgICBkaXI9IiRsYWRpciIKIAkgICAgYWJzZGlyPSIkYWJzX2xhZGlyIgogCSAgICAjIFJlbW92ZSB0aGlzIHNlYXJjaCBwYXRoIGxhdGVyCi0JICAgIG5vdGluc3RfcGF0aD0iJG5vdGluc3RfcGF0aCAkYWJzX2xhZGlyIgorCSAgICBmdW5jX2FwcGVuZCBub3RpbnN0X3BhdGggIiAkYWJzX2xhZGlyIgogCSAgZWxzZQogCSAgICBkaXI9IiRsYWRpci8kb2JqZGlyIgogCSAgICBhYnNkaXI9IiRhYnNfbGFkaXIvJG9iamRpciIKIAkgICAgIyBSZW1vdmUgdGhpcyBzZWFyY2ggcGF0aCBsYXRlcgotCSAgICBub3RpbnN0X3BhdGg9IiRub3RpbnN0X3BhdGggJGFic19sYWRpciIKKwkgICAgZnVuY19hcHBlbmQgbm90aW5zdF9wYXRoICIgJGFic19sYWRpciIKIAkgIGZpCiAJZmkgIyAkaW5zdGFsbGVkID0geWVzCi0JbmFtZT1gJGVjaG8gIlgkbGFuYW1lIiB8ICRYc2VkIC1lICdzL1wubGEkLy8nIC1lICdzL15saWIvLydgCisJZnVuY19zdHJpcG5hbWUgJ2xpYicgJy5sYScgIiRsYW5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAKIAkjIFRoaXMgbGlicmFyeSB3YXMgc3BlY2lmaWVkIHdpdGggLWRscHJlb3Blbi4KIAlpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KLQkgIGlmIHRlc3QgLXogIiRsaWJkaXIiOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIgMT4mMgotCSAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGlmIHRlc3QgLXogIiRsaWJkaXIiICYmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCisJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIm9ubHkgbGlicmFyaWVzIG1heSAtZGxwcmVvcGVuIGEgY29udmVuaWVuY2UgbGlicmFyeTogXGAkbGliJyIKIAkgIGZpCi0JICAjIFByZWZlciB1c2luZyBhIHN0YXRpYyBsaWJyYXJ5IChzbyB0aGF0IG5vIHNpbGx5IF9EWU5BTUlDIHN5bWJvbHMKLQkgICMgYXJlIHJlcXVpcmVkIHRvIGxpbmspLgotCSAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgotCSAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkZGlyLyRvbGRfbGlicmFyeSIKLQkgICMgT3RoZXJ3aXNlLCB1c2UgdGhlIGRsbmFtZSwgc28gdGhhdCBsdF9kbG9wZW4gZmluZHMgaXQuCi0JICBlbGlmIHRlc3QgLW4gIiRkbG5hbWUiOyB0aGVuCi0JICAgIG5ld2RscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzICRkaXIvJGRsbmFtZSIKLQkgIGVsc2UKLQkgICAgbmV3ZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMgJGRpci8kbGlua2xpYiIKLQkgIGZpCisJICBjYXNlICIkaG9zdCIgaW4KKwkgICAgIyBzcGVjaWFsIGhhbmRsaW5nIGZvciBwbGF0Zm9ybXMgd2l0aCBQRS1ETExzLgorCSAgICAqY3lnd2luKiB8ICptaW5ndyogfCAqY2VnY2MqICkKKwkgICAgICAjIExpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgbGluayBhZ2FpbnN0IHNoYXJlZCBsaWJyYXJ5IGlmIGJvdGgKKwkgICAgICAjIHN0YXRpYyBhbmQgc2hhcmVkIGFyZSBwcmVzZW50LiAgVGhlcmVmb3JlLCBlbnN1cmUgd2UgZXh0cmFjdAorCSAgICAgICMgc3ltYm9scyBmcm9tIHRoZSBpbXBvcnQgbGlicmFyeSBpZiBhIHNoYXJlZCBsaWJyYXJ5IGlzIHByZXNlbnQKKwkgICAgICAjIChvdGhlcndpc2UsIHRoZSBkbG9wZW4gbW9kdWxlIG5hbWUgd2lsbCBiZSBpbmNvcnJlY3QpLiAgV2UgZG8KKwkgICAgICAjIHRoaXMgYnkgcHV0dGluZyB0aGUgaW1wb3J0IGxpYnJhcnkgbmFtZSBpbnRvICRuZXdkbHByZWZpbGVzLgorCSAgICAgICMgV2UgcmVjb3ZlciB0aGUgZGxvcGVuIG1vZHVsZSBuYW1lIGJ5ICdzYXZpbmcnIHRoZSBsYSBmaWxlCisJICAgICAgIyBuYW1lIGluIGEgc3BlY2lhbCBwdXJwb3NlIHZhcmlhYmxlLCBhbmQgKGxhdGVyKSBleHRyYWN0aW5nIHRoZQorCSAgICAgICMgZGxuYW1lIGZyb20gdGhlIGxhIGZpbGUuCisJICAgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfdHJfc2ggIiRkaXIvJGxpbmtsaWIiCisJICAgICAgICBldmFsICJsaWJmaWxlXyRmdW5jX3RyX3NoX3Jlc3VsdD1cJGFic19sYWRpci9cJGxhbmFtZSIKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRsaW5rbGliIgorCSAgICAgIGVsc2UKKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAgICMgS2VlcCBhIGxpc3Qgb2YgcHJlb3BlbmVkIGNvbnZlbmllbmNlIGxpYnJhcmllcyB0byBjaGVjaworCSAgICAgICAgIyB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgY29ycmVjdGx5IGluIHRoZSBsaW5rIHBhc3MuCisJICAgICAgICB0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJICAgICAgICAgIGZ1bmNfYXBwZW5kIGRscHJlY29udmVuaWVuY2VsaWJzICIgJGRpci8kb2xkX2xpYnJhcnkiCisJICAgICAgZmkKKwkgICAgOzsKKwkgICAgKiApCisJICAgICAgIyBQcmVmZXIgdXNpbmcgYSBzdGF0aWMgbGlicmFyeSAoc28gdGhhdCBubyBzaWxseSBfRFlOQU1JQyBzeW1ib2xzCisJICAgICAgIyBhcmUgcmVxdWlyZWQgdG8gbGluaykuCisJICAgICAgaWYgdGVzdCAtbiAiJG9sZF9saWJyYXJ5IjsgdGhlbgorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJG9sZF9saWJyYXJ5IgorCSAgICAgICAgIyBLZWVwIGEgbGlzdCBvZiBwcmVvcGVuZWQgY29udmVuaWVuY2UgbGlicmFyaWVzIHRvIGNoZWNrCisJICAgICAgICAjIHRoYXQgdGhleSBhcmUgYmVpbmcgdXNlZCBjb3JyZWN0bHkgaW4gdGhlIGxpbmsgcGFzcy4KKwkgICAgICAgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkgICAgICAgICAgZnVuY19hcHBlbmQgZGxwcmVjb252ZW5pZW5jZWxpYnMgIiAkZGlyLyRvbGRfbGlicmFyeSIKKwkgICAgICAjIE90aGVyd2lzZSwgdXNlIHRoZSBkbG5hbWUsIHNvIHRoYXQgbHRfZGxvcGVuIGZpbmRzIGl0LgorCSAgICAgIGVsaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KKwkgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkZGlyLyRkbG5hbWUiCisJICAgICAgZWxzZQorCSAgICAgICAgZnVuY19hcHBlbmQgbmV3ZGxwcmVmaWxlcyAiICRkaXIvJGxpbmtsaWIiCisJICAgICAgZmkKKwkgICAgOzsKKwkgIGVzYWMKIAlmaSAjICRwYXNzID0gZGxwcmVvcGVuCiAKIAlpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgpAQCAtMjUxNCw3ICs2NTg3LDcgQEAKIAogCiAJaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgJiYgdGVzdCAiJHBhc3MiICE9IGxpbms7IHRoZW4KLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkbGFkaXIiCisJICBmdW5jX2FwcGVuZCBuZXdsaWJfc2VhcmNoX3BhdGggIiAkbGFkaXIiCiAJICBkZXBsaWJzPSIkbGliICRkZXBsaWJzIgogCiAJICBsaW5rYWxsZGVwbGlicz1ubwpAQCAtMjUyNiw3ICs2NTk5LDEwIEBACiAJICB0bXBfbGlicz0KIAkgIGZvciBkZXBsaWIgaW4gJGRlcGVuZGVuY3lfbGliczsgZG8KIAkgICAgY2FzZSAkZGVwbGliIGluCi0JICAgIC1MKikgbmV3bGliX3NlYXJjaF9wYXRoPSIkbmV3bGliX3NlYXJjaF9wYXRoICJgJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzL14tTC8vJ2A7OyAjIyMgdGVzdHN1aXRlOiBza2lwIG5lc3RlZCBxdW90aW5nIHRlc3QKKwkgICAgLUwqKSBmdW5jX3N0cmlwbmFtZSAnLUwnICcnICIkZGVwbGliIgorCSAgICAgICAgIGZ1bmNfcmVzb2x2ZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCSAgICAgICAgIGZ1bmNfYXBwZW5kIG5ld2xpYl9zZWFyY2hfcGF0aCAiICRmdW5jX3Jlc29sdmVfc3lzcm9vdF9yZXN1bHQiCisJCSA7OwogCSAgICBlc2FjCiAJICAgICMgTmVlZCB0byBsaW5rIGFnYWluc3QgYWxsIGRlcGVuZGVuY3lfbGlicz8KIAkgICAgaWYgdGVzdCAiJGxpbmthbGxkZXBsaWJzIiA9IHllczsgdGhlbgpAQCAtMjUzNiwxMiArNjYxMiwxMiBAQAogCSAgICAgICMgb3IvYW5kIGxpbmsgYWdhaW5zdCBzdGF0aWMgbGlicmFyaWVzCiAJICAgICAgbmV3ZGVwZW5kZW5jeV9saWJzPSIkZGVwbGliICRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJICAgIGZpCi0JICAgIGlmIHRlc3QgIlgkZHVwbGljYXRlX2RlcHMiID0gIlh5ZXMiIDsgdGhlbgorCSAgICBpZiAkb3B0X3ByZXNlcnZlX2R1cF9kZXBzIDsgdGhlbgogCSAgICAgIGNhc2UgIiR0bXBfbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGxpYiAiKikgc3BlY2lhbGRlcGxpYnM9IiRzcGVjaWFsZGVwbGlicyAkZGVwbGliIiA7OworCSAgICAgICoiICRkZXBsaWIgIiopIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGRlcGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCi0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZGVwbGliIgogCSAgZG9uZSAjIGZvciBkZXBsaWIKIAkgIGNvbnRpbnVlCiAJZmkgIyAkbGlua21vZGUgPSBwcm9nLi4uCkBAIC0yNTQ5LDE1ICs2NjI1LDE0IEBACiAJaWYgdGVzdCAiJGxpbmttb2RlLCRwYXNzIiA9ICJwcm9nLGxpbmsiOyB0aGVuCiAJICBpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKIAkgICAgIHsgeyB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzIiA9IG5vIHx8Ci0JCSB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKKwkgICAgICAgICB0ZXN0ICIkcHJlZmVyX3N0YXRpY19saWJzLCRpbnN0YWxsZWQiID0gImJ1aWx0LHllcyI7IH0gfHwKIAkgICAgICAgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgogCSAgICAjIFdlIG5lZWQgdG8gaGFyZGNvZGUgdGhlIGxpYnJhcnkgcGF0aAogCSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAteiAiJGF2b2lkdGVtcHJwYXRoIiA7IHRoZW4KIAkgICAgICAjIE1ha2Ugc3VyZSB0aGUgcnBhdGggY29udGFpbnMgb25seSB1bmlxdWUgZGlyZWN0b3JpZXMuCi0JICAgICAgY2FzZSAiJHRlbXBfcnBhdGggIiBpbgotCSAgICAgICoiICRkaXIgIiopIDs7Ci0JICAgICAgKiIgJGFic2RpciAiKikgOzsKLQkgICAgICAqKSB0ZW1wX3JwYXRoPSIkdGVtcF9ycGF0aCAkYWJzZGlyIiA7OworCSAgICAgIGNhc2UgIiR0ZW1wX3JwYXRoOiIgaW4KKwkgICAgICAqIiRhYnNkaXI6IiopIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgdGVtcF9ycGF0aCAiJGFic2RpcjoiIDs7CiAJICAgICAgZXNhYwogCSAgICBmaQogCkBAIC0yNTY5LDcgKzY2NDQsNyBAQAogCSAgICAqKQogCSAgICAgIGNhc2UgIiRjb21waWxlX3JwYXRoICIgaW4KIAkgICAgICAqIiAkYWJzZGlyICIqKSA7OwotCSAgICAgICopIGNvbXBpbGVfcnBhdGg9IiRjb21waWxlX3JwYXRoICRhYnNkaXIiCisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9ycGF0aCAiICRhYnNkaXIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIDs7CiAJICAgIGVzYWMKQEAgLTI1NzgsNyArNjY1Myw3IEBACiAJICAgICopCiAJICAgICAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KIAkgICAgICAqIiAkbGliZGlyICIqKSA7OwotCSAgICAgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIDs7CiAJICAgIGVzYWMKQEAgLTI1OTUsMjcgKzY2NzAsNDMgQEAKIAogCWxpbmtfc3RhdGljPW5vICMgV2hldGhlciB0aGUgZGVwbGliIHdpbGwgYmUgbGlua2VkIHN0YXRpY2FsbHkKIAl1c2Vfc3RhdGljX2xpYnM9JHByZWZlcl9zdGF0aWNfbGlicwotCWlmIHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gYnVpbHQgJiYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXMgOyB0aGVuCisJaWYgdGVzdCAiJHVzZV9zdGF0aWNfbGlicyIgPSBidWlsdCAmJiB0ZXN0ICIkaW5zdGFsbGVkIiA9IHllczsgdGhlbgogCSAgdXNlX3N0YXRpY19saWJzPW5vCiAJZmkKIAlpZiB0ZXN0IC1uICIkbGlicmFyeV9uYW1lcyIgJiYKIAkgICB7IHRlc3QgIiR1c2Vfc3RhdGljX2xpYnMiID0gbm8gfHwgdGVzdCAteiAiJG9sZF9saWJyYXJ5IjsgfTsgdGhlbgotCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgotCSAgICBub3RpbnN0X2RlcGxpYnM9IiRub3RpbnN0X2RlcGxpYnMgJGxpYiIKLQkgICAgbmVlZF9yZWxpbms9eWVzCi0JICBmaQorCSAgY2FzZSAkaG9zdCBpbgorCSAgKmN5Z3dpbiogfCAqbWluZ3cqIHwgKmNlZ2NjKikKKwkgICAgICAjIE5vIHBvaW50IGluIHJlbGlua2luZyBETExzIGJlY2F1c2UgcGF0aHMgYXJlIG5vdCBlbmNvZGVkCisJICAgICAgZnVuY19hcHBlbmQgbm90aW5zdF9kZXBsaWJzICIgJGxpYiIKKwkgICAgICBuZWVkX3JlbGluaz1ubworCSAgICA7OworCSAgKikKKwkgICAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSBubzsgdGhlbgorCSAgICAgIGZ1bmNfYXBwZW5kIG5vdGluc3RfZGVwbGlicyAiICRsaWIiCisJICAgICAgbmVlZF9yZWxpbms9eWVzCisJICAgIGZpCisJICAgIDs7CisJICBlc2FjCiAJICAjIFRoaXMgaXMgYSBzaGFyZWQgbGlicmFyeQogCi0JICAjIFdhcm4gYWJvdXQgcG9ydGFiaWxpdHksIGNhbid0IGxpbmsgYWdhaW5zdCAtbW9kdWxlJ3Mgb24KLQkgICMgc29tZSBzeXN0ZW1zIChkYXJ3aW4pCi0JICBpZiB0ZXN0ICIkc2hvdWxkbm90bGluayIgPSB5ZXMgJiYgdGVzdCAiJHBhc3MiID0gbGluayA7IHRoZW4KLQkgICAgJGVjaG8KLQkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KLQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCi0JICAgIGVsc2UKLQkgICAgICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgIyBXYXJuIGFib3V0IHBvcnRhYmlsaXR5LCBjYW4ndCBsaW5rIGFnYWluc3QgLW1vZHVsZSdzIG9uIHNvbWUKKwkgICMgc3lzdGVtcyAoZGFyd2luKS4gIERvbid0IGJsZWF0IGFib3V0IGRsb3BlbmVkIG1vZHVsZXMgdGhvdWdoIQorCSAgZGxvcGVubW9kdWxlPSIiCisJICBmb3IgZGxwcmVtb2R1bGV0ZXN0IGluICRkbHByZWZpbGVzOyBkbworCSAgICBpZiB0ZXN0ICJYJGRscHJlbW9kdWxldGVzdCIgPSAiWCRsaWIiOyB0aGVuCisJICAgICAgZGxvcGVubW9kdWxlPSIkZGxwcmVtb2R1bGV0ZXN0IgorCSAgICAgIGJyZWFrCiAJICAgIGZpCi0JICAgICRlY2hvICIqKiogJGxpbmtsaWIgaXMgbm90IHBvcnRhYmxlISIKKwkgIGRvbmUKKwkgIGlmIHRlc3QgLXogIiRkbG9wZW5tb2R1bGUiICYmIHRlc3QgIiRzaG91bGRub3RsaW5rIiA9IHllcyAmJiB0ZXN0ICIkcGFzcyIgPSBsaW5rOyB0aGVuCisJICAgIGVjaG8KKwkgICAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2c7IHRoZW4KKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIGV4ZWN1dGFibGUgJG91dHB1dCBhZ2FpbnN0IHRoZSBsb2FkYWJsZSBtb2R1bGUiCisJICAgIGVsc2UKKwkgICAgICAkRUNITyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbG9hZGFibGUgbW9kdWxlIgorCSAgICBmaQorCSAgICAkRUNITyAiKioqICRsaW5rbGliIGlzIG5vdCBwb3J0YWJsZSEiCiAJICBmaQogCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IGxpYiAmJgogCSAgICAgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgPSB5ZXM7IHRoZW4KQEAgLTI2MjcsNyArNjcxOCw3IEBACiAJICAgICopCiAJICAgICAgY2FzZSAiJGNvbXBpbGVfcnBhdGggIiBpbgogCSAgICAgICoiICRhYnNkaXIgIiopIDs7Ci0JICAgICAgKikgY29tcGlsZV9ycGF0aD0iJGNvbXBpbGVfcnBhdGggJGFic2RpciIKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBjb21waWxlX3JwYXRoICIgJGFic2RpciIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgOzsKIAkgICAgZXNhYwpAQCAtMjYzNiw3ICs2NzI3LDcgQEAKIAkgICAgKikKIAkgICAgICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgogCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICAgKikgZmluYWxpemVfcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCAkbGliZGlyIgorCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgOzsKIAkgICAgZXNhYwpAQCAtMjY0NSwxNyArNjczNiwxOSBAQAogCSAgaWYgdGVzdCAtbiAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIjsgdGhlbgogCSAgICAjIGZpZ3VyZSBvdXQgdGhlIHNvbmFtZQogCSAgICBzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKLQkgICAgcmVhbG5hbWU9IiQyIgotCSAgICBzaGlmdDsgc2hpZnQKLQkgICAgbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCSAgICBzaGlmdAorCSAgICByZWFsbmFtZT0iJDEiCisJICAgIHNoaWZ0CisJICAgIGxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCSAgICAjIHVzZSBkbG5hbWUgaWYgd2UgZ290IGl0LiBpdCdzIHBlcmZlY3RseSBnb29kLCBubz8KIAkgICAgaWYgdGVzdCAtbiAiJGRsbmFtZSI7IHRoZW4KIAkgICAgICBzb25hbWU9IiRkbG5hbWUiCiAJICAgIGVsaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgogCSAgICAgICMgYmxlaCB3aW5kb3dzCiAJICAgICAgY2FzZSAkaG9zdCBpbgotCSAgICAgICpjeWd3aW4qIHwgbWluZ3cqKQotCQltYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICAgICAgKmN5Z3dpbiogfCBtaW5ndyogfCAqY2VnY2MqKQorCSAgICAgICAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkJbWFqb3I9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJCXZlcnN1ZmZpeD0iLSRtYWpvciIKIAkJOzsKIAkgICAgICBlc2FjCkBAIC0yNjY2LDQzICs2NzU5LDI5IEBACiAKIAkgICAgIyBNYWtlIGEgbmV3IG5hbWUgZm9yIHRoZSBleHRyYWN0X2V4cHN5bXNfY21kcyB0byB1c2UKIAkgICAgc29yb290PSIkc29uYW1lIgotCSAgICBzb25hbWU9YCRlY2hvICRzb3Jvb3QgfCAke1NFRH0gLWUgJ3MvXi4qXC8vLydgCi0JICAgIG5ld2xpYj0ibGliaW1wLWAkZWNobyAkc29uYW1lIHwgJHtTRUR9ICdzL15saWIvLztzL1wuZGxsJC8vJ2AuYSIKKwkgICAgZnVuY19iYXNlbmFtZSAiJHNvcm9vdCIKKwkgICAgc29uYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisJICAgIGZ1bmNfc3RyaXBuYW1lICdsaWInICcuZGxsJyAiJHNvbmFtZSIKKwkgICAgbmV3bGliPWxpYmltcC0kZnVuY19zdHJpcG5hbWVfcmVzdWx0LmEKIAogCSAgICAjIElmIHRoZSBsaWJyYXJ5IGhhcyBubyBleHBvcnQgbGlzdCwgdGhlbiBjcmVhdGUgb25lIG5vdwogCSAgICBpZiB0ZXN0IC1mICIkb3V0cHV0X29iamRpci8kc29uYW1lLWRlZiI7IHRoZW4gOgogCSAgICBlbHNlCi0JICAgICAgJHNob3cgImV4dHJhY3RpbmcgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBcYCRzb25hbWUnIgotCSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgICAgIGNtZHM9JGV4dHJhY3RfZXhwc3ltc19jbWRzCi0JICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLQkJSUZTPSIkc2F2ZV9pZnMiCi0JCWV2YWwgY21kPVwiJGNtZFwiCi0JCSRzaG93ICIkY21kIgotCQkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLQkgICAgICBkb25lCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgZnVuY192ZXJib3NlICJleHRyYWN0aW5nIGV4cG9ydGVkIHN5bWJvbCBsaXN0IGZyb20gXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJGV4dHJhY3RfZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKIAkgICAgZmkKIAogCSAgICAjIENyZWF0ZSAkbmV3bGliCiAJICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyRuZXdsaWIiOyB0aGVuIDo7IGVsc2UKLQkgICAgICAkc2hvdyAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKLQkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgICAgICBjbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kcwotCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JCUlGUz0iJHNhdmVfaWZzIgotCQlldmFsIGNtZD1cIiRjbWRcIgotCQkkc2hvdyAiJGNtZCIKLQkJJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0JICAgICAgZG9uZQotCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBpbXBvcnQgbGlicmFyeSBmb3IgXGAkc29uYW1lJyIKKwkgICAgICBmdW5jX2V4ZWN1dGVfY21kcyAiJG9sZF9hcmNoaXZlX2Zyb21fZXhwc3ltc19jbWRzIiAnZXhpdCAkPycKIAkgICAgZmkKIAkgICAgIyBtYWtlIHN1cmUgdGhlIGxpYnJhcnkgdmFyaWFibGVzIGFyZSBwb2ludGluZyB0byB0aGUgbmV3IGxpYnJhcnkKIAkgICAgZGlyPSRvdXRwdXRfb2JqZGlyCiAJICAgIGxpbmtsaWI9JG5ld2xpYgogCSAgZmkgIyB0ZXN0IC1uICIkb2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMiCiAKLQkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRtb2RlIiAhPSByZWxpbms7IHRoZW4KKwkgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRvcHRfbW9kZSIgIT0gcmVsaW5rOyB0aGVuCiAJICAgIGFkZF9zaGxpYnBhdGg9CiAJICAgIGFkZF9kaXI9CiAJICAgIGFkZD0KQEAgLTI3MTcsMTcgKzY3OTYsMjEgQEAKIAkJICAqLSotc3lzdjVPcGVuVU5JWCogfCAqLSotc3lzdjVVbml4V2FyZTcuWzAxXS5bMTBdKiB8IFwKIAkJICAgICotKi11bml4d2FyZTcqKSBhZGRfZGlyPSItTCRkaXIiIDs7CiAJCSAgKi0qLWRhcndpbiogKQotCQkgICAgIyBpZiB0aGUgbGliIGlzIGEgbW9kdWxlIHRoZW4gd2UgY2FuIG5vdCBsaW5rIGFnYWluc3QKLQkJICAgICMgaXQsIHNvbWVvbmUgaXMgaWdub3JpbmcgdGhlIG5ldyB3YXJuaW5ncyBJIGFkZGVkCisJCSAgICAjIGlmIHRoZSBsaWIgaXMgYSAobm9uLWRsb3BlbmVkKSBtb2R1bGUgdGhlbiB3ZSBjYW4gbm90CisJCSAgICAjIGxpbmsgYWdhaW5zdCBpdCwgc29tZW9uZSBpcyBpZ25vcmluZyB0aGUgZWFybGllciB3YXJuaW5ncwogCQkgICAgaWYgL3Vzci9iaW4vZmlsZSAtTCAkYWRkIDI+IC9kZXYvbnVsbCB8Ci0gICAgICAgICAgICAgICAgICAgICAgJEVHUkVQICI6IFteOl0qIGJ1bmRsZSIgPi9kZXYvbnVsbCA7IHRoZW4KLQkJICAgICAgJGVjaG8gIioqIFdhcm5pbmcsIGxpYiAkbGlua2xpYiBpcyBhIG1vZHVsZSwgbm90IGEgc2hhcmVkIGxpYnJhcnkiCi0JCSAgICAgIGlmIHRlc3QgLXogIiRvbGRfbGlicmFyeSIgOyB0aGVuCi0JCSAgICAgICAgJGVjaG8KLQkJICAgICAgICAkZWNobyAiKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKLQkJICAgICAgICAkZWNobyAiKiogVGhlIGxpbmsgd2lsbCBwcm9iYWJseSBmYWlsLCBzb3JyeSIKLQkJICAgICAgZWxzZQotCQkgICAgICAgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQkgJEdSRVAgIjogW146XSogYnVuZGxlIiA+L2Rldi9udWxsIDsgdGhlbgorCQkgICAgICBpZiB0ZXN0ICJYJGRsb3Blbm1vZHVsZSIgIT0gIlgkbGliIjsgdGhlbgorCQkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaWIgJGxpbmtsaWIgaXMgYSBtb2R1bGUsIG5vdCBhIHNoYXJlZCBsaWJyYXJ5IgorCQkJaWYgdGVzdCAteiAiJG9sZF9saWJyYXJ5IiA7IHRoZW4KKwkJCSAgZWNobworCQkJICBlY2hvICIqKiogQW5kIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIHN0YXRpYyBhcmNoaXZlIGF2YWlsYWJsZSIKKwkJCSAgZWNobyAiKioqIFRoZSBsaW5rIHdpbGwgcHJvYmFibHkgZmFpbCwgc29ycnkiCisJCQllbHNlCisJCQkgIGFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCisJCQlmaQorCQkgICAgICBlbGlmIHRlc3QgLW4gIiRvbGRfbGlicmFyeSI7IHRoZW4KKwkJCWFkZD0iJGRpci8kb2xkX2xpYnJhcnkiCiAJCSAgICAgIGZpCiAJCSAgICBmaQogCQllc2FjCkBAIC0yNzQ1LDcgKzY4MjgsOCBAQAogCSAgICAgIGZpCiAJICAgICAgOzsKIAkgICAgcmVsaW5rKQotCSAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9kaXJlY3QiID0geWVzOyB0aGVuCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgICB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlIiA9IG5vOyB0aGVuCiAJCWFkZD0iJGRpci8kbGlua2xpYiIKIAkgICAgICBlbGlmIHRlc3QgIiRoYXJkY29kZV9taW51c19MIiA9IHllczsgdGhlbgogCQlhZGRfZGlyPSItTCRkaXIiCkBAIC0yNzUzLDcgKzY4MzcsNyBAQAogCQlpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgogCQkgIGNhc2UgJGxpYmRpciBpbgogCQkgICAgW1xcL10qKQotCQkgICAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgICBmdW5jX2FwcGVuZCBhZGRfZGlyICIgLUwkaW5zdF9wcmVmaXhfZGlyJGxpYmRpciIKIAkJICAgICAgOzsKIAkJICBlc2FjCiAJCWZpCkBAIC0yNzY5LDE0ICs2ODUzLDEzIEBACiAJICAgIGVzYWMKIAogCSAgICBpZiB0ZXN0ICIkbGliX2xpbmtlZCIgIT0geWVzOyB0aGVuCi0JICAgICAgJGVjaG8gIiRtb2RlbmFtZTogY29uZmlndXJhdGlvbiBlcnJvcjogdW5zdXBwb3J0ZWQgaGFyZGNvZGUgcHJvcGVydGllcyIKLQkgICAgICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgICAgICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVuc3VwcG9ydGVkIGhhcmRjb2RlIHByb3BlcnRpZXMiCiAJICAgIGZpCiAKIAkgICAgaWYgdGVzdCAtbiAiJGFkZF9zaGxpYnBhdGgiOyB0aGVuCiAJICAgICAgY2FzZSA6JGNvbXBpbGVfc2hsaWJwYXRoOiBpbgogCSAgICAgICoiOiRhZGRfc2hsaWJwYXRoOiIqKSA7OwotCSAgICAgICopIGNvbXBpbGVfc2hsaWJwYXRoPSIkY29tcGlsZV9zaGxpYnBhdGgkYWRkX3NobGlicGF0aDoiIDs7CisJICAgICAgKikgZnVuY19hcHBlbmQgY29tcGlsZV9zaGxpYnBhdGggIiRhZGRfc2hsaWJwYXRoOiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCiAJICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCkBAIC0yNzg1LDIzICs2ODY4LDI0IEBACiAJICAgIGVsc2UKIAkgICAgICB0ZXN0IC1uICIkYWRkX2RpciIgJiYgZGVwbGlicz0iJGFkZF9kaXIgJGRlcGxpYnMiCiAJICAgICAgdGVzdCAtbiAiJGFkZCIgJiYgZGVwbGlicz0iJGFkZCAkZGVwbGlicyIKLQkgICAgICBpZiB0ZXN0ICIkaGFyZGNvZGVfZGlyZWN0IiAhPSB5ZXMgJiYgXAotCQkgdGVzdCAiJGhhcmRjb2RlX21pbnVzX0wiICE9IHllcyAmJiBcCisJICAgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgIT0geWVzICYmCisJCSB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgIT0geWVzICYmCiAJCSB0ZXN0ICIkaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciIgPSB5ZXM7IHRoZW4KIAkJY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KIAkJKiI6JGxpYmRpcjoiKikgOzsKLQkJKikgZmluYWxpemVfc2hsaWJwYXRoPSIkZmluYWxpemVfc2hsaWJwYXRoJGxpYmRpcjoiIDs7CisJCSopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CiAJCWVzYWMKIAkgICAgICBmaQogCSAgICBmaQogCSAgZmkKIAotCSAgaWYgdGVzdCAiJGxpbmttb2RlIiA9IHByb2cgfHwgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCisJICBpZiB0ZXN0ICIkbGlua21vZGUiID0gcHJvZyB8fCB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCiAJICAgIGFkZF9zaGxpYnBhdGg9CiAJICAgIGFkZF9kaXI9CiAJICAgIGFkZD0KIAkgICAgIyBGaW5hbGl6ZSBjb21tYW5kIGZvciBib3RoIGlzIHNpbXBsZToganVzdCBoYXJkY29kZSBpdC4KLQkgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgaWYgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdCIgPSB5ZXMgJiYKKwkgICAgICAgdGVzdCAiJGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSIgPSBubzsgdGhlbgogCSAgICAgIGFkZD0iJGxpYmRpci8kbGlua2xpYiIKIAkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfbWludXNfTCIgPSB5ZXM7IHRoZW4KIAkgICAgICBhZGRfZGlyPSItTCRsaWJkaXIiCkBAIC0yODA5LDE1ICs2ODkzLDE1IEBACiAJICAgIGVsaWYgdGVzdCAiJGhhcmRjb2RlX3NobGlicGF0aF92YXIiID0geWVzOyB0aGVuCiAJICAgICAgY2FzZSA6JGZpbmFsaXplX3NobGlicGF0aDogaW4KIAkgICAgICAqIjokbGliZGlyOiIqKSA7OwotCSAgICAgICopIGZpbmFsaXplX3NobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCRsaWJkaXI6IiA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3NobGlicGF0aCAiJGxpYmRpcjoiIDs7CiAJICAgICAgZXNhYwogCSAgICAgIGFkZD0iLWwkbmFtZSIKIAkgICAgZWxpZiB0ZXN0ICIkaGFyZGNvZGVfYXV0b21hdGljIiA9IHllczsgdGhlbgogCSAgICAgIGlmIHRlc3QgLW4gIiRpbnN0X3ByZWZpeF9kaXIiICYmCiAJCSB0ZXN0IC1mICIkaW5zdF9wcmVmaXhfZGlyJGxpYmRpci8kbGlua2xpYiIgOyB0aGVuCi0JICAgICAgICBhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgorCQlhZGQ9IiRpbnN0X3ByZWZpeF9kaXIkbGliZGlyLyRsaW5rbGliIgogCSAgICAgIGVsc2UKLQkgICAgICAgIGFkZD0iJGxpYmRpci8kbGlua2xpYiIKKwkJYWRkPSIkbGliZGlyLyRsaW5rbGliIgogCSAgICAgIGZpCiAJICAgIGVsc2UKIAkgICAgICAjIFdlIGNhbm5vdCBzZWVtIHRvIGhhcmRjb2RlIGl0LCBndWVzcyB3ZSdsbCBmYWtlIGl0LgpAQCAtMjgyNiw3ICs2OTEwLDcgQEAKIAkgICAgICBpZiB0ZXN0IC1uICIkaW5zdF9wcmVmaXhfZGlyIjsgdGhlbgogCQljYXNlICRsaWJkaXIgaW4KIAkJICBbXFwvXSopCi0JCSAgICBhZGRfZGlyPSIkYWRkX2RpciAtTCRpbnN0X3ByZWZpeF9kaXIkbGliZGlyIgorCQkgICAgZnVuY19hcHBlbmQgYWRkX2RpciAiIC1MJGluc3RfcHJlZml4X2RpciRsaWJkaXIiCiAJCSAgICA7OwogCQllc2FjCiAJICAgICAgZmkKQEAgLTI4NjEsMjEgKzY5NDUsMjEgQEAKIAogCSAgICAjIEp1c3QgcHJpbnQgYSB3YXJuaW5nIGFuZCBhZGQgdGhlIGxpYnJhcnkgdG8gZGVwZW5kZW5jeV9saWJzIHNvCiAJICAgICMgdGhhdCB0aGUgcHJvZ3JhbSBjYW4gYmUgbGlua2VkIGFnYWluc3QgdGhlIHN0YXRpYyBsaWJyYXJ5LgotCSAgICAkZWNobwotCSAgICAkZWNobyAiKioqIFdhcm5pbmc6IFRoaXMgc3lzdGVtIGNhbiBub3QgbGluayB0byBzdGF0aWMgbGliIGFyY2hpdmUgJGxpYi4iCi0JICAgICRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCSAgICAkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkgICAgJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZS4iCisJICAgIGVjaG8KKwkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBUaGlzIHN5c3RlbSBjYW4gbm90IGxpbmsgdG8gc3RhdGljIGxpYiBhcmNoaXZlICRsaWIuIgorCSAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCSAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUuIgogCSAgICBpZiB0ZXN0ICIkbW9kdWxlIiA9IHllczsgdGhlbgotCSAgICAgICRlY2hvICIqKiogQnV0IGFzIHlvdSB0cnkgdG8gYnVpbGQgYSBtb2R1bGUgbGlicmFyeSwgbGlidG9vbCB3aWxsIHN0aWxsIGNyZWF0ZSAiCi0JICAgICAgJGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgotCSAgICAgICRlY2hvICIqKiogaXMgbGlua2VkIHdpdGggdGhlIC1kbG9wZW4gZmxhZyB0byByZXNvbHZlIHN5bWJvbHMgYXQgcnVudGltZS4iCisJICAgICAgZWNobyAiKioqIEJ1dCBhcyB5b3UgdHJ5IHRvIGJ1aWxkIGEgbW9kdWxlIGxpYnJhcnksIGxpYnRvb2wgd2lsbCBzdGlsbCBjcmVhdGUgIgorCSAgICAgIGVjaG8gIioqKiBhIHN0YXRpYyBtb2R1bGUsIHRoYXQgc2hvdWxkIHdvcmsgYXMgbG9uZyBhcyB0aGUgZGxvcGVuaW5nIGFwcGxpY2F0aW9uIgorCSAgICAgIGVjaG8gIioqKiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnIHRvIHJlc29sdmUgc3ltYm9scyBhdCBydW50aW1lLiIKIAkgICAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotCQkkZWNobwotCQkkZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCi0JCSRlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgotCQkkZWNobyAiKioqIG5vdCBmaW5kIHN1Y2ggYSBwcm9ncmFtLiAgU28sIHRoaXMgbW9kdWxlIGlzIHByb2JhYmx5IHVzZWxlc3MuIgotCQkkZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCisJCWVjaG8KKwkJZWNobyAiKioqIEhvd2V2ZXIsIHRoaXMgd291bGQgb25seSB3b3JrIGlmIGxpYnRvb2wgd2FzIGFibGUgdG8gZXh0cmFjdCBzeW1ib2wiCisJCWVjaG8gIioqKiBsaXN0cyBmcm9tIGEgcHJvZ3JhbSwgdXNpbmcgXGBubScgb3IgZXF1aXZhbGVudCwgYnV0IGxpYnRvb2wgY291bGQiCisJCWVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkJZWNobyAiKioqIFxgbm0nIGZyb20gR05VIGJpbnV0aWxzIGFuZCBhIGZ1bGwgcmVidWlsZCBtYXkgaGVscC4iCiAJICAgICAgZmkKIAkgICAgICBpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0gbm87IHRoZW4KIAkJYnVpbGRfbGlidG9vbF9saWJzPW1vZHVsZQpAQCAtMjg5OSwxMjYgKzY5ODMsMTEzIEBACiAJICAgIHRlbXBfZGVwbGlicz0KIAkgICAgZm9yIGxpYmRpciBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbwogCSAgICAgIGNhc2UgJGxpYmRpciBpbgotCSAgICAgIC1SKikgdGVtcF94cnBhdGg9YCRlY2hvICJYJGxpYmRpciIgfCAkWHNlZCAtZSAncy9eLVIvLydgCisJICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZSAnLVInICcnICIkbGliZGlyIgorCSAgICAgICAgICAgdGVtcF94cnBhdGg9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCQkgICBjYXNlICIgJHhycGF0aCAiIGluCiAJCSAgICoiICR0ZW1wX3hycGF0aCAiKikgOzsKLQkJICAgKikgeHJwYXRoPSIkeHJwYXRoICR0ZW1wX3hycGF0aCI7OworCQkgICAqKSBmdW5jX2FwcGVuZCB4cnBhdGggIiAkdGVtcF94cnBhdGgiOzsKIAkJICAgZXNhYzs7Ci0JICAgICAgKikgdGVtcF9kZXBsaWJzPSIkdGVtcF9kZXBsaWJzICRsaWJkaXIiOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCB0ZW1wX2RlcGxpYnMgIiAkbGliZGlyIjs7CiAJICAgICAgZXNhYwogCSAgICBkb25lCiAJICAgIGRlcGVuZGVuY3lfbGlicz0iJHRlbXBfZGVwbGlicyIKIAkgIGZpCiAKLQkgIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkYWJzZGlyIgorCSAgZnVuY19hcHBlbmQgbmV3bGliX3NlYXJjaF9wYXRoICIgJGFic2RpciIKIAkgICMgTGluayBhZ2FpbnN0IHRoaXMgbGlicmFyeQogCSAgdGVzdCAiJGxpbmtfc3RhdGljIiA9IG5vICYmIG5ld2RlcGVuZGVuY3lfbGlicz0iJGFic19sYWRpci8kbGFuYW1lICRuZXdkZXBlbmRlbmN5X2xpYnMiCiAJICAjIC4uLiBhbmQgaXRzIGRlcGVuZGVuY3lfbGlicwogCSAgdG1wX2xpYnM9CiAJICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgIG5ld2RlcGVuZGVuY3lfbGlicz0iJGRlcGxpYiAkbmV3ZGVwZW5kZW5jeV9saWJzIgotCSAgICBpZiB0ZXN0ICJYJGR1cGxpY2F0ZV9kZXBzIiA9ICJYeWVzIiA7IHRoZW4KKwkgICAgY2FzZSAkZGVwbGliIGluCisgICAgICAgICAgICAgIC1MKikgZnVuY19zdHJpcG5hbWUgJy1MJyAnJyAiJGRlcGxpYiIKKyAgICAgICAgICAgICAgICAgICBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCI7OworICAgICAgICAgICAgICAqKSBmdW5jX3Jlc29sdmVfc3lzcm9vdCAiJGRlcGxpYiIgOzsKKyAgICAgICAgICAgIGVzYWMKKwkgICAgaWYgJG9wdF9wcmVzZXJ2ZV9kdXBfZGVwcyA7IHRoZW4KIAkgICAgICBjYXNlICIkdG1wX2xpYnMgIiBpbgotCSAgICAgICoiICRkZXBsaWIgIiopIHNwZWNpYWxkZXBsaWJzPSIkc3BlY2lhbGRlcGxpYnMgJGRlcGxpYiIgOzsKKwkgICAgICAqIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0ICIqKQorICAgICAgICAgICAgICAgIGZ1bmNfYXBwZW5kIHNwZWNpYWxkZXBsaWJzICIgJGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdCIgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCi0JICAgIHRtcF9saWJzPSIkdG1wX2xpYnMgJGRlcGxpYiIKKwkgICAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkZnVuY19yZXNvbHZlX3N5c3Jvb3RfcmVzdWx0IgogCSAgZG9uZQogCiAJICBpZiB0ZXN0ICIkbGlua19hbGxfZGVwbGlicyIgIT0gbm87IHRoZW4KIAkgICAgIyBBZGQgdGhlIHNlYXJjaCBwYXRocyBvZiBhbGwgZGVwZW5kZW5jeSBsaWJyYXJpZXMKIAkgICAgZm9yIGRlcGxpYiBpbiAkZGVwZW5kZW5jeV9saWJzOyBkbworCSAgICAgIHBhdGg9CiAJICAgICAgY2FzZSAkZGVwbGliIGluCiAJICAgICAgLUwqKSBwYXRoPSIkZGVwbGliIiA7OwogCSAgICAgICoubGEpCi0JCWRpcj1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgCi0JCXRlc3QgIlgkZGlyIiA9ICJYJGRlcGxpYiIgJiYgZGlyPSIuIgorCSAgICAgICAgZnVuY19yZXNvbHZlX3N5c3Jvb3QgIiRkZXBsaWIiCisJICAgICAgICBkZXBsaWI9JGZ1bmNfcmVzb2x2ZV9zeXNyb290X3Jlc3VsdAorCSAgICAgICAgZnVuY19kaXJuYW1lICIkZGVwbGliIiAiIiAiLiIKKwkJZGlyPSRmdW5jX2Rpcm5hbWVfcmVzdWx0CiAJCSMgV2UgbmVlZCBhbiBhYnNvbHV0ZSBwYXRoLgogCQljYXNlICRkaXIgaW4KIAkJW1xcL10qIHwgW0EtWmEtel06W1xcL10qKSBhYnNkaXI9IiRkaXIiIDs7CiAJCSopCiAJCSAgYWJzZGlyPWBjZCAiJGRpciIgJiYgcHdkYAogCQkgIGlmIHRlc3QgLXogIiRhYnNkaXIiOyB0aGVuCi0JCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBjYW5ub3QgZGV0ZXJtaW5lIGFic29sdXRlIGRpcmVjdG9yeSBuYW1lIG9mIFxgJGRpciciIDE+JjIKKwkJICAgIGZ1bmNfd2FybmluZyAiY2Fubm90IGRldGVybWluZSBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSBvZiBcYCRkaXInIgogCQkgICAgYWJzZGlyPSIkZGlyIgogCQkgIGZpCiAJCSAgOzsKIAkJZXNhYwotCQlpZiBncmVwICJeaW5zdGFsbGVkPW5vIiAkZGVwbGliID4gL2Rldi9udWxsOyB0aGVuCi0JCSAgcGF0aD0iJGFic2Rpci8kb2JqZGlyIgotCQllbHNlCi0JCSAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCQkgICAgJGVjaG8gIiRtb2RlbmFtZTogXGAkZGVwbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkJICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCQkgIGZpCi0JCSAgaWYgdGVzdCAiJGFic2RpciIgIT0gIiRsaWJkaXIiOyB0aGVuCi0JCSAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYCRkZXBsaWInIHNlZW1zIHRvIGJlIG1vdmVkIiAxPiYyCi0JCSAgZmkKLQkJICBwYXRoPSIkYWJzZGlyIgotCQlmaQotCQlkZXBkZXBsPQorCQlpZiAkR1JFUCAiXmluc3RhbGxlZD1ubyIgJGRlcGxpYiA+IC9kZXYvbnVsbDsgdGhlbgogCQljYXNlICRob3N0IGluCiAJCSotKi1kYXJ3aW4qKQotCQkgICMgd2UgZG8gbm90IHdhbnQgdG8gbGluayBhZ2FpbnN0IHN0YXRpYyBsaWJzLAotCQkgICMgYnV0IG5lZWQgdG8gbGluayBhZ2FpbnN0IHNoYXJlZAorCQkgIGRlcGRlcGw9CiAJCSAgZXZhbCBkZXBsaWJyYXJ5X25hbWVzPWAke1NFRH0gLW4gLWUgJ3MvXmxpYnJhcnlfbmFtZXM9XCguKlwpJC9cMS9wJyAkZGVwbGliYAotCQkgIGV2YWwgZGVwbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRkZXBsaWJgCiAJCSAgaWYgdGVzdCAtbiAiJGRlcGxpYnJhcnlfbmFtZXMiIDsgdGhlbgogCQkgICAgZm9yIHRtcCBpbiAkZGVwbGlicmFyeV9uYW1lcyA7IGRvCiAJCSAgICAgIGRlcGRlcGw9JHRtcAogCQkgICAgZG9uZQotCQkgICAgaWYgdGVzdCAtZiAiJGRlcGxpYmRpci8kZGVwZGVwbCIgOyB0aGVuCi0JCSAgICAgIGRlcGRlcGw9IiRkZXBsaWJkaXIvJGRlcGRlcGwiCi0JICAgICAgCSAgICBlbGlmIHRlc3QgLWYgIiRwYXRoLyRkZXBkZXBsIiA7IHRoZW4KLQkJICAgICAgZGVwZGVwbD0iJHBhdGgvJGRlcGRlcGwiCi0JCSAgICBlbHNlCi0JCSAgICAgICMgQ2FuJ3QgZmluZCBpdCwgb2ggd2VsbC4uLgotCQkgICAgICBkZXBkZXBsPQorCQkgICAgaWYgdGVzdCAtZiAiJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIiA7IHRoZW4KKwkJICAgICAgZGVwZGVwbD0iJGFic2Rpci8kb2JqZGlyLyRkZXBkZXBsIgorCQkgICAgICBkYXJ3aW5faW5zdGFsbF9uYW1lPWAke09UT09MfSAtTCAkZGVwZGVwbCB8IGF3ayAne2lmIChOUiA9PSAyKSB7cHJpbnQgJDE7ZXhpdH19J2AKKyAgICAgICAgICAgICAgICAgICAgICBpZiB0ZXN0IC16ICIkZGFyd2luX2luc3RhbGxfbmFtZSI7IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZGFyd2luX2luc3RhbGxfbmFtZT1gJHtPVE9PTDY0fSAtTCAkZGVwZGVwbCAgfCBhd2sgJ3tpZiAoTlIgPT0gMikge3ByaW50ICQxO2V4aXR9fSdgCisgICAgICAgICAgICAgICAgICAgICAgZmkKKwkJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZXJfZmxhZ3MgIiAke3dsfS1keWxpYl9maWxlICR7d2x9JHtkYXJ3aW5faW5zdGFsbF9uYW1lfToke2RlcGRlcGx9IgorCQkgICAgICBmdW5jX2FwcGVuZCBsaW5rZXJfZmxhZ3MgIiAtZHlsaWJfZmlsZSAke2Rhcndpbl9pbnN0YWxsX25hbWV9OiR7ZGVwZGVwbH0iCisJCSAgICAgIHBhdGg9CiAJCSAgICBmaQotCQkgICAgIyBkbyBub3QgYWRkIHBhdGhzIHdoaWNoIGFyZSBhbHJlYWR5IHRoZXJlCi0JCSAgICBjYXNlICIgJG5ld2xpYl9zZWFyY2hfcGF0aCAiIGluCi0JCSAgICAqIiAkcGF0aCAiKikgOzsKLQkJICAgICopIG5ld2xpYl9zZWFyY2hfcGF0aD0iJG5ld2xpYl9zZWFyY2hfcGF0aCAkcGF0aCI7OwotCQkgICAgZXNhYwogCQkgIGZpCi0JCSAgcGF0aD0iIgogCQkgIDs7CiAJCSopCi0JCSAgcGF0aD0iLUwkcGF0aCIKKwkJICBwYXRoPSItTCRhYnNkaXIvJG9iamRpciIKIAkJICA7OwogCQllc2FjCisJCWVsc2UKKwkJICBldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkZGVwbGliYAorCQkgIHRlc3QgLXogIiRsaWJkaXIiICYmIFwKKwkJICAgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQkgIHRlc3QgIiRhYnNkaXIiICE9ICIkbGliZGlyIiAmJiBcCisJCSAgICBmdW5jX3dhcm5pbmcgIlxgJGRlcGxpYicgc2VlbXMgdG8gYmUgbW92ZWQiCisKKwkJICBwYXRoPSItTCRhYnNkaXIiCisJCWZpCiAJCTs7Ci0JICAgICAgLWwqKQotCQljYXNlICRob3N0IGluCi0JCSotKi1kYXJ3aW4qKQotCQkgICMgQWdhaW4sIHdlIG9ubHkgd2FudCB0byBsaW5rIGFnYWluc3Qgc2hhcmVkIGxpYnJhcmllcwotCQkgIGV2YWwgdG1wX2xpYnM9YCRlY2hvICJYJGRlcGxpYiIgfCAkWHNlZCAtZSAicyxeXC1sLCwiYAotCQkgIGZvciB0bXAgaW4gJG5ld2xpYl9zZWFyY2hfcGF0aCA7IGRvCi0JCSAgICBpZiB0ZXN0IC1mICIkdG1wL2xpYiR0bXBfbGlicy5keWxpYiIgOyB0aGVuCi0JCSAgICAgIGV2YWwgZGVwZGVwbD0iJHRtcC9saWIkdG1wX2xpYnMuZHlsaWIiCi0JCSAgICAgIGJyZWFrCi0JCSAgICBmaQotCQkgIGRvbmUKLQkJICBwYXRoPSIiCi0JCSAgOzsKLQkJKikgY29udGludWUgOzsKLQkJZXNhYwotCQk7OwotCSAgICAgICopIGNvbnRpbnVlIDs7CiAJICAgICAgZXNhYwogCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCiAJICAgICAgKiIgJHBhdGggIiopIDs7CiAJICAgICAgKikgZGVwbGlicz0iJHBhdGggJGRlcGxpYnMiIDs7CiAJICAgICAgZXNhYwotCSAgICAgIGNhc2UgIiAkZGVwbGlicyAiIGluCi0JICAgICAgKiIgJGRlcGRlcGwgIiopIDs7Ci0JICAgICAgKikgZGVwbGlicz0iJGRlcGRlcGwgJGRlcGxpYnMiIDs7Ci0JICAgICAgZXNhYwogCSAgICBkb25lCiAJICBmaSAjIGxpbmtfYWxsX2RlcGxpYnMgIT0gbm8KIAlmaSAjIGxpbmttb2RlID0gbGliCiAgICAgICBkb25lICMgZm9yIGRlcGxpYiBpbiAkbGlicworICAgICAgaWYgdGVzdCAiJHBhc3MiID0gbGluazsgdGhlbgorCWlmIHRlc3QgIiRsaW5rbW9kZSIgPSAicHJvZyI7IHRoZW4KKwkgIGNvbXBpbGVfZGVwbGlicz0iJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzICRjb21waWxlX2RlcGxpYnMiCisJICBmaW5hbGl6ZV9kZXBsaWJzPSIkbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MgJGZpbmFsaXplX2RlcGxpYnMiCisJZWxzZQorCSAgY29tcGlsZXJfZmxhZ3M9IiRjb21waWxlcl9mbGFncyAiYCRFQ0hPICIgJG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJZmkKKyAgICAgIGZpCiAgICAgICBkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMiCiAgICAgICBpZiB0ZXN0ICIkcGFzcyIgPSBkbHByZW9wZW47IHRoZW4KIAkjIExpbmsgdGhlIGRscHJlb3BlbmVkIGxpYnJhcmllcyBiZWZvcmUgb3RoZXIgbGlicmFyaWVzCkBAIC0zMDMzLDcgKzcxMDQsNyBAQAogCSAgZm9yIGRpciBpbiAkbmV3bGliX3NlYXJjaF9wYXRoOyBkbwogCSAgICBjYXNlICIkbGliX3NlYXJjaF9wYXRoICIgaW4KIAkgICAgKiIgJGRpciAiKikgOzsKLQkgICAgKikgbGliX3NlYXJjaF9wYXRoPSIkbGliX3NlYXJjaF9wYXRoICRkaXIiIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIGxpYl9zZWFyY2hfcGF0aCAiICRkaXIiIDs7CiAJICAgIGVzYWMKIAkgIGRvbmUKIAkgIG5ld2xpYl9zZWFyY2hfcGF0aD0KQEAgLTMwOTEsMTAgKzcxNjIsMTAgQEAKIAkgICAgLUwqKQogCSAgICAgIGNhc2UgIiAkdG1wX2xpYnMgIiBpbgogCSAgICAgICoiICRkZXBsaWIgIiopIDs7Ci0JICAgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAgICopIGZ1bmNfYXBwZW5kIHRtcF9saWJzICIgJGRlcGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgICAgOzsKLQkgICAgKikgdG1wX2xpYnM9IiR0bXBfbGlicyAkZGVwbGliIiA7OworCSAgICAqKSBmdW5jX2FwcGVuZCB0bXBfbGlicyAiICRkZXBsaWIiIDs7CiAJICAgIGVzYWMKIAkgIGRvbmUKIAkgIGV2YWwgJHZhcj1cIiR0bXBfbGlic1wiCkBAIC0zMTEwLDk5ICs3MTgxLDk2IEBACiAJICA7OwogCWVzYWMKIAlpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCi0JICB0bXBfbGlicz0iJHRtcF9saWJzICRpIgorCSAgZnVuY19hcHBlbmQgdG1wX2xpYnMgIiAkaSIKIAlmaQogICAgICAgZG9uZQogICAgICAgZGVwZW5kZW5jeV9saWJzPSR0bXBfbGlicwogICAgIGRvbmUgIyBmb3IgcGFzcwogICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nOyB0aGVuCiAgICAgICBkbGZpbGVzPSIkbmV3ZGxmaWxlcyIKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsaW5rbW9kZSIgPSBwcm9nIHx8IHRlc3QgIiRsaW5rbW9kZSIgPSBsaWI7IHRoZW4KICAgICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgogICAgIGZpCiAKICAgICBjYXNlICRsaW5rbW9kZSBpbgogICAgIG9sZGxpYikKKyAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCisJZnVuY193YXJuaW5nICJcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgorICAgICAgZmkKKwogICAgICAgY2FzZSAiICRkZXBsaWJzIiBpbgogICAgICAgKlwgLWwqIHwgKlwgLUwqKQotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIgOzsKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDs7CiAgICAgICBlc2FjCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRkbGZpbGVzJGRscHJlZmlsZXMiIHx8IHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtZGxvcGVuJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiRycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHhycGF0aCIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiR4cnBhdGgiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtUicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mby8tdmVyc2lvbi1udW1iZXInIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtdmVyc2lvbi1pbmZvLy12ZXJzaW9uLW51bWJlcicgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkcmVsZWFzZSIgJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGFyY2hpdmVzIiAxPiYyCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiIHx8IHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1leHBvcnQtc3ltYm9scycgaXMgaWdub3JlZCBmb3IgYXJjaGl2ZXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLWV4cG9ydC1zeW1ib2xzJyBpcyBpZ25vcmVkIGZvciBhcmNoaXZlcyIKIAogICAgICAgIyBOb3cgc2V0IHRoZSB2YXJpYWJsZXMgZm9yIGJ1aWxkaW5nIG9sZCBsaWJyYXJpZXMuCiAgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KICAgICAgIG9sZGxpYnM9IiRvdXRwdXQiCi0gICAgICBvYmpzPSIkb2JqcyRvbGRfZGVwbGlicyIKKyAgICAgIGZ1bmNfYXBwZW5kIG9ianMgIiRvbGRfZGVwbGlicyIKICAgICAgIDs7CiAKICAgICBsaWIpCiAgICAgICAjIE1ha2Ugc3VyZSB3ZSBvbmx5IGdlbmVyYXRlIGxpYnJhcmllcyBvZiB0aGUgZm9ybSBgbGliTkFNRS5sYScuCiAgICAgICBjYXNlICRvdXRwdXRuYW1lIGluCiAgICAgICBsaWIqKQotCW5hbWU9YCRlY2hvICJYJG91dHB1dG5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLycgLWUgJ3MvXmxpYi8vJ2AKKwlmdW5jX3N0cmlwbmFtZSAnbGliJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKIAlldmFsIGxpYm5hbWU9XCIkbGlibmFtZV9zcGVjXCIKIAk7OwogICAgICAgKikKLQlpZiB0ZXN0ICIkbW9kdWxlIiA9IG5vOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBtdXN0IGJlZ2luIHdpdGggXGBsaWInIiAxPiYyCi0JICAkZWNobyAiJGhlbHAiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCWZpCisJdGVzdCAiJG1vZHVsZSIgPSBubyAmJiBcCisJICBmdW5jX2ZhdGFsX2hlbHAgImxpYnRvb2wgbGlicmFyeSBcYCRvdXRwdXQnIG11c3QgYmVnaW4gd2l0aCBcYGxpYiciCisKIAlpZiB0ZXN0ICIkbmVlZF9saWJfcHJlZml4IiAhPSBubzsgdGhlbgogCSAgIyBBZGQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcyBpZiByZXF1aXJlZAotCSAgbmFtZT1gJGVjaG8gIlgkb3V0cHV0bmFtZSIgfCAkWHNlZCAtZSAncy9cLmxhJC8vJ2AKKwkgIGZ1bmNfc3RyaXBuYW1lICcnICcubGEnICIkb3V0cHV0bmFtZSIKKwkgIG5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCSAgZXZhbCBzaGFyZWRfZXh0PVwiJHNocmV4dF9jbWRzXCIKIAkgIGV2YWwgbGlibmFtZT1cIiRsaWJuYW1lX3NwZWNcIgogCWVsc2UKLQkgIGxpYm5hbWU9YCRlY2hvICJYJG91dHB1dG5hbWUiIHwgJFhzZWQgLWUgJ3MvXC5sYSQvLydgCisJICBmdW5jX3N0cmlwbmFtZSAnJyAnLmxhJyAiJG91dHB1dG5hbWUiCisJICBsaWJuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAlmaQogCTs7CiAgICAgICBlc2FjCiAKICAgICAgIGlmIHRlc3QgLW4gIiRvYmpzIjsgdGhlbgogCWlmIHRlc3QgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgIT0gcGFzc19hbGw7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IGNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIiAyPiYxCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJ0b29sIGxpYnJhcnkgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMgb24gdGhpcyBob3N0OiRvYmpzIgogCWVsc2UKLQkgICRlY2hvCi0JICAkZWNobyAiKioqIFdhcm5pbmc6IExpbmtpbmcgdGhlIHNoYXJlZCBsaWJyYXJ5ICRvdXRwdXQgYWdhaW5zdCB0aGUgbm9uLWxpYnRvb2wiCi0JICAkZWNobyAiKioqIG9iamVjdHMgJG9ianMgaXMgbm90IHBvcnRhYmxlISIKLQkgIGxpYm9ianM9IiRsaWJvYmpzICRvYmpzIgorCSAgZWNobworCSAgJEVDSE8gIioqKiBXYXJuaW5nOiBMaW5raW5nIHRoZSBzaGFyZWQgbGlicmFyeSAkb3V0cHV0IGFnYWluc3QgdGhlIG5vbi1saWJ0b29sIgorCSAgJEVDSE8gIioqKiBvYmplY3RzICRvYmpzIGlzIG5vdCBwb3J0YWJsZSEiCisJICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJG9ianMiCiAJZmkKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgIiRkbHNlbGYiICE9IG5vOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAiJGRsc2VsZiIgIT0gbm8gJiYgXAorCWZ1bmNfd2FybmluZyAiXGAtZGxvcGVuIHNlbGYnIGlzIGlnbm9yZWQgZm9yIGxpYnRvb2wgbGlicmFyaWVzIgogCiAgICAgICBzZXQgZHVtbXkgJHJwYXRoCi0gICAgICBpZiB0ZXN0ICIkIyIgLWd0IDI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBpZ25vcmluZyBtdWx0aXBsZSBcYC1ycGF0aCdzIGZvciBhIGxpYnRvb2wgbGlicmFyeSIgMT4mMgotICAgICAgZmkKLSAgICAgIGluc3RhbGxfbGliZGlyPSIkMiIKKyAgICAgIHNoaWZ0CisgICAgICB0ZXN0ICIkIyIgLWd0IDEgJiYgXAorCWZ1bmNfd2FybmluZyAiaWdub3JpbmcgbXVsdGlwbGUgXGAtcnBhdGgncyBmb3IgYSBsaWJ0b29sIGxpYnJhcnkiCisKKyAgICAgIGluc3RhbGxfbGliZGlyPSIkMSIKIAogICAgICAgb2xkbGlicz0KICAgICAgIGlmIHRlc3QgLXogIiRycGF0aCI7IHRoZW4KQEAgLTMyMTYsMjUgKzcyODQsMjEgQEAKIAkgIGJ1aWxkX29sZF9saWJzPXllcwogCWZpCiAKLQlpZiB0ZXN0IC1uICIkdmluZm8iOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiIDE+JjIKLQlmaQorCXRlc3QgLW4gIiR2aW5mbyIgJiYgXAorCSAgZnVuY193YXJuaW5nICJcYC12ZXJzaW9uLWluZm8vLXZlcnNpb24tbnVtYmVyJyBpcyBpZ25vcmVkIGZvciBjb252ZW5pZW5jZSBsaWJyYXJpZXMiCiAKLQlpZiB0ZXN0IC1uICIkcmVsZWFzZSI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIGNvbnZlbmllbmNlIGxpYnJhcmllcyIgMT4mMgotCWZpCisJdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3IgY29udmVuaWVuY2UgbGlicmFyaWVzIgogICAgICAgZWxzZQogCiAJIyBQYXJzZSB0aGUgdmVyc2lvbiBpbmZvcm1hdGlvbiBhcmd1bWVudC4KIAlzYXZlX2lmcz0iJElGUyI7IElGUz0nOicKIAlzZXQgZHVtbXkgJHZpbmZvIDAgMCAwCisJc2hpZnQKIAlJRlM9IiRzYXZlX2lmcyIKIAotCWlmIHRlc3QgLW4gIiQ4IjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogdG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIiAxPiYyCi0JICAkZWNobyAiJGhlbHAiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCWZpCisJdGVzdCAtbiAiJDciICYmIFwKKwkgIGZ1bmNfZmF0YWxfaGVscCAidG9vIG1hbnkgcGFyYW1ldGVycyB0byBcYC12ZXJzaW9uLWluZm8nIgogCiAJIyBjb252ZXJ0IGFic29sdXRlIHZlcnNpb24gbnVtYmVycyB0byBsaWJ0b29sIGFnZXMKIAkjIHRoaXMgcmV0YWlucyBjb21wYXRpYmlsaXR5IHdpdGggLmxhIGZpbGVzIGFuZCBhdHRlbXB0cwpAQCAtMzI0Miw5ICs3MzA2LDkgQEAKIAogCWNhc2UgJHZpbmZvX251bWJlciBpbgogCXllcykKLQkgIG51bWJlcl9tYWpvcj0iJDIiCi0JICBudW1iZXJfbWlub3I9IiQzIgotCSAgbnVtYmVyX3JldmlzaW9uPSIkNCIKKwkgIG51bWJlcl9tYWpvcj0iJDEiCisJICBudW1iZXJfbWlub3I9IiQyIgorCSAgbnVtYmVyX3JldmlzaW9uPSIkMyIKIAkgICMKIAkgICMgVGhlcmUgYXJlIHJlYWxseSBvbmx5IHR3byBraW5kcyAtLSB0aG9zZSB0aGF0CiAJICAjIHVzZSB0aGUgY3VycmVudCByZXZpc2lvbiBhcyB0aGUgbWFqb3IgdmVyc2lvbgpAQCAtMzI1NCwxNyArNzMxOCwxOSBAQAogCSAgIwogCSAgY2FzZSAkdmVyc2lvbl90eXBlIGluCiAJICBkYXJ3aW58bGludXh8b3NmfHdpbmRvd3N8bm9uZSkKLQkgICAgY3VycmVudD1gZXhwciAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcmAKKwkgICAgZnVuY19hcml0aCAkbnVtYmVyX21ham9yICsgJG51bWJlcl9taW5vcgorCSAgICBjdXJyZW50PSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgICBhZ2U9IiRudW1iZXJfbWlub3IiCiAJICAgIHJldmlzaW9uPSIkbnVtYmVyX3JldmlzaW9uIgogCSAgICA7OwotCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHN1bm9zKQorCSAgZnJlZWJzZC1hb3V0fGZyZWVic2QtZWxmfHFueHxzdW5vcykKIAkgICAgY3VycmVudD0iJG51bWJlcl9tYWpvciIKIAkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCiAJICAgIGFnZT0iMCIKIAkgICAgOzsKIAkgIGlyaXh8bm9uc3RvcHV4KQotCSAgICBjdXJyZW50PWBleHByICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yYAorCSAgICBmdW5jX2FyaXRoICRudW1iZXJfbWFqb3IgKyAkbnVtYmVyX21pbm9yCisJICAgIGN1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICAgIGFnZT0iJG51bWJlcl9taW5vciIKIAkgICAgcmV2aXNpb249IiRudW1iZXJfbWlub3IiCiAJICAgIGx0X2lyaXhfaW5jcmVtZW50PW5vCkBAIC0zMjcyLDkgKzczMzgsOSBAQAogCSAgZXNhYwogCSAgOzsKIAlubykKLQkgIGN1cnJlbnQ9IiQyIgotCSAgcmV2aXNpb249IiQzIgotCSAgYWdlPSIkNCIKKwkgIGN1cnJlbnQ9IiQxIgorCSAgcmV2aXNpb249IiQyIgorCSAgYWdlPSIkMyIKIAkgIDs7CiAJZXNhYwogCkBAIC0zMjgyLDM0ICs3MzQ4LDMwIEBACiAJY2FzZSAkY3VycmVudCBpbgogCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKIAkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogQ1VSUkVOVCBcYCRjdXJyZW50JyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIgMT4mMgotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkdmluZm8nIGlzIG5vdCB2YWxpZCB2ZXJzaW9uIGluZm9ybWF0aW9uIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKKwkgIGZ1bmNfZXJyb3IgIkNVUlJFTlQgXGAkY3VycmVudCcgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJICA7OwogCWVzYWMKIAogCWNhc2UgJHJldmlzaW9uIGluCiAJMHxbMS05XXxbMS05XVswLTldfFsxLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XXxbMS05XVswLTldWzAtOV1bMC05XVswLTldKSA7OwogCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiBSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiIDE+JjIKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2Vycm9yICJSRVZJU0lPTiBcYCRyZXZpc2lvbicgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJICA7OwogCWVzYWMKIAogCWNhc2UgJGFnZSBpbgogCTB8WzEtOV18WzEtOV1bMC05XXxbMS05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV18WzEtOV1bMC05XVswLTldWzAtOV1bMC05XSkgOzsKIAkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogQUdFIFxgJGFnZScgbXVzdCBiZSBhIG5vbm5lZ2F0aXZlIGludGVnZXIiIDE+JjIKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2Vycm9yICJBR0UgXGAkYWdlJyBtdXN0IGJlIGEgbm9ubmVnYXRpdmUgaW50ZWdlciIKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJHZpbmZvJyBpcyBub3QgdmFsaWQgdmVyc2lvbiBpbmZvcm1hdGlvbiIKIAkgIDs7CiAJZXNhYwogCiAJaWYgdGVzdCAiJGFnZSIgLWd0ICIkY3VycmVudCI7IHRoZW4KLQkgICRlY2hvICIkbW9kZW5hbWU6IEFHRSBcYCRhZ2UnIGlzIGdyZWF0ZXIgdGhhbiB0aGUgY3VycmVudCBpbnRlcmZhY2UgbnVtYmVyIFxgJGN1cnJlbnQnIiAxPiYyCi0JICAkZWNobyAiJG1vZGVuYW1lOiBcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQorCSAgZnVuY19lcnJvciAiQUdFIFxgJGFnZScgaXMgZ3JlYXRlciB0aGFuIHRoZSBjdXJyZW50IGludGVyZmFjZSBudW1iZXIgXGAkY3VycmVudCciCisJICBmdW5jX2ZhdGFsX2Vycm9yICJcYCR2aW5mbycgaXMgbm90IHZhbGlkIHZlcnNpb24gaW5mb3JtYXRpb24iCiAJZmkKIAogCSMgQ2FsY3VsYXRlIHRoZSB2ZXJzaW9uIHZhcmlhYmxlcy4KQEAgLTMzMjIsMTAgKzczODQsMTIgQEAKIAlkYXJ3aW4pCiAJICAjIExpa2UgTGludXgsIGJ1dCB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24gYXZhaWxhYmxlIGluCiAJICAjIHZlcnN0cmluZyBmb3IgY29kaW5nIGl0IGludG8gdGhlIGxpYnJhcnkgaGVhZGVyCi0JICBtYWpvcj0uYGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPS4kZnVuY19hcml0aF9yZXN1bHQKIAkgIHZlcnN1ZmZpeD0iJG1ham9yLiRhZ2UuJHJldmlzaW9uIgogCSAgIyBEYXJ3aW4gbGQgZG9lc24ndCBsaWtlIDAgZm9yIHRoZXNlIG9wdGlvbnMuLi4KLQkgIG1pbm9yX2N1cnJlbnQ9YGV4cHIgJGN1cnJlbnQgKyAxYAorCSAgZnVuY19hcml0aCAkY3VycmVudCArIDEKKwkgIG1pbm9yX2N1cnJlbnQ9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICB4bGN2ZXJzdHJpbmc9IiR7d2x9LWNvbXBhdGliaWxpdHlfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50ICR7d2x9LWN1cnJlbnRfdmVyc2lvbiAke3dsfSRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKIAkgIHZlcnN0cmluZz0iLWNvbXBhdGliaWxpdHlfdmVyc2lvbiAkbWlub3JfY3VycmVudCAtY3VycmVudF92ZXJzaW9uICRtaW5vcl9jdXJyZW50LiRyZXZpc2lvbiIKIAkgIDs7CkBAIC0zMzM3LDE1ICs3NDAxLDE3IEBACiAKIAlmcmVlYnNkLWVsZikKIAkgIG1ham9yPSIuJGN1cnJlbnQiCi0JICB2ZXJzdWZmaXg9Ii4kY3VycmVudCI7CisJICB2ZXJzdWZmaXg9Ii4kY3VycmVudCIKIAkgIDs7CiAKIAlpcml4IHwgbm9uc3RvcHV4KQogCSAgaWYgdGVzdCAiWCRsdF9pcml4X2luY3JlbWVudCIgPSAiWG5vIjsgdGhlbgotCSAgICBtYWpvcj1gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCiAJICBlbHNlCi0JICAgIG1ham9yPWBleHByICRjdXJyZW50IC0gJGFnZSArIDFgCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlICsgMQogCSAgZmkKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAorCiAJICBjYXNlICR2ZXJzaW9uX3R5cGUgaW4KIAkgICAgbm9uc3RvcHV4KSB2ZXJzdHJpbmdfcHJlZml4PW5vbnN0b3B1eCA7OwogCSAgICAqKSAgICAgICAgIHZlcnN0cmluZ19wcmVmaXg9c2dpIDs7CkBAIC0zMzU1LDggKzc0MjEsMTAgQEAKIAkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCiAJICBsb29wPSRyZXZpc2lvbgogCSAgd2hpbGUgdGVzdCAiJGxvb3AiIC1uZSAwOyBkbwotCSAgICBpZmFjZT1gZXhwciAkcmV2aXNpb24gLSAkbG9vcGAKLQkgICAgbG9vcD1gZXhwciAkbG9vcCAtIDFgCisJICAgIGZ1bmNfYXJpdGggJHJldmlzaW9uIC0gJGxvb3AKKwkgICAgaWZhY2U9JGZ1bmNfYXJpdGhfcmVzdWx0CisJICAgIGZ1bmNfYXJpdGggJGxvb3AgLSAxCisJICAgIGxvb3A9JGZ1bmNfYXJpdGhfcmVzdWx0CiAJICAgIHZlcnN0cmluZz0iJHZlcnN0cmluZ19wcmVmaXgkbWFqb3IuJGlmYWNlOiR2ZXJzdHJpbmciCiAJICBkb25lCiAKQEAgLTMzNjYsMjUgKzc0MzQsMzQgQEAKIAkgIDs7CiAKIAlsaW51eCkKLQkgIG1ham9yPS5gZXhwciAkY3VycmVudCAtICRhZ2VgCisJICBmdW5jX2FyaXRoICRjdXJyZW50IC0gJGFnZQorCSAgbWFqb3I9LiRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgdmVyc3VmZml4PSIkbWFqb3IuJGFnZS4kcmV2aXNpb24iCiAJICA7OwogCiAJb3NmKQotCSAgbWFqb3I9LmBleHByICRjdXJyZW50IC0gJGFnZWAKKwkgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkYWdlCisJICBtYWpvcj0uJGZ1bmNfYXJpdGhfcmVzdWx0CiAJICB2ZXJzdWZmaXg9Ii4kY3VycmVudC4kYWdlLiRyZXZpc2lvbiIKIAkgIHZlcnN0cmluZz0iJGN1cnJlbnQuJGFnZS4kcmV2aXNpb24iCiAKIAkgICMgQWRkIGluIGFsbCB0aGUgaW50ZXJmYWNlcyB0aGF0IHdlIGFyZSBjb21wYXRpYmxlIHdpdGguCiAJICBsb29wPSRhZ2UKIAkgIHdoaWxlIHRlc3QgIiRsb29wIiAtbmUgMDsgZG8KLQkgICAgaWZhY2U9YGV4cHIgJGN1cnJlbnQgLSAkbG9vcGAKLQkgICAgbG9vcD1gZXhwciAkbG9vcCAtIDFgCisJICAgIGZ1bmNfYXJpdGggJGN1cnJlbnQgLSAkbG9vcAorCSAgICBpZmFjZT0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcml0aCAkbG9vcCAtIDEKKwkgICAgbG9vcD0kZnVuY19hcml0aF9yZXN1bHQKIAkgICAgdmVyc3RyaW5nPSIkdmVyc3RyaW5nOiR7aWZhY2V9LjAiCiAJICBkb25lCiAKIAkgICMgTWFrZSBleGVjdXRhYmxlcyBkZXBlbmQgb24gb3VyIGN1cnJlbnQgdmVyc2lvbi4KLQkgIHZlcnN0cmluZz0iJHZlcnN0cmluZzoke2N1cnJlbnR9LjAiCisJICBmdW5jX2FwcGVuZCB2ZXJzdHJpbmcgIjoke2N1cnJlbnR9LjAiCisJICA7OworCisJcW54KQorCSAgbWFqb3I9Ii4kY3VycmVudCIKKwkgIHZlcnN1ZmZpeD0iLiRjdXJyZW50IgogCSAgOzsKIAogCXN1bm9zKQpAQCAtMzM5NSwxNCArNzQ3MiwxMyBAQAogCXdpbmRvd3MpCiAJICAjIFVzZSAnLScgcmF0aGVyIHRoYW4gJy4nLCBzaW5jZSB3ZSBvbmx5IHdhbnQgb25lCiAJICAjIGV4dGVuc2lvbiBvbiBET1MgOC4zIGZpbGVzeXN0ZW1zLgotCSAgbWFqb3I9YGV4cHIgJGN1cnJlbnQgLSAkYWdlYAorCSAgZnVuY19hcml0aCAkY3VycmVudCAtICRhZ2UKKwkgIG1ham9yPSRmdW5jX2FyaXRoX3Jlc3VsdAogCSAgdmVyc3VmZml4PSItJG1ham9yIgogCSAgOzsKIAogCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiB1bmtub3duIGxpYnJhcnkgdmVyc2lvbiB0eXBlIFxgJHZlcnNpb25fdHlwZSciIDE+JjIKLQkgICRlY2hvICJGYXRhbCBjb25maWd1cmF0aW9uIGVycm9yLiAgU2VlIHRoZSAkUEFDS0FHRSBkb2NzIGZvciBtb3JlIGluZm9ybWF0aW9uLiIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCisJICBmdW5jX2ZhdGFsX2NvbmZpZ3VyYXRpb24gInVua25vd24gbGlicmFyeSB2ZXJzaW9uIHR5cGUgXGAkdmVyc2lvbl90eXBlJyIKIAkgIDs7CiAJZXNhYwogCkBAIC0zNDM2LDcgKzc1MTIsNyBAQAogCSMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBhcmNoaXZlIHdpbGwgaGF2ZSB1bmRlZmluZWQgc3ltYm9scy4KIAlpZiB0ZXN0ICIkYWxsb3dfdW5kZWZpbmVkIiA9IHllczsgdGhlbgogCSAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZF9mbGFnIiA9IHVuc3VwcG9ydGVkOyB0aGVuCi0JICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IHVuZGVmaW5lZCBzeW1ib2xzIG5vdCBhbGxvd2VkIGluICRob3N0IHNoYXJlZCBsaWJyYXJpZXMiIDE+JjIKKwkgICAgZnVuY193YXJuaW5nICJ1bmRlZmluZWQgc3ltYm9scyBub3QgYWxsb3dlZCBpbiAkaG9zdCBzaGFyZWQgbGlicmFyaWVzIgogCSAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KIAkgICAgYnVpbGRfb2xkX2xpYnM9eWVzCiAJICBmaQpAQCAtMzQ0NCw1OCArNzUyMCw2MiBAQAogCSAgIyBEb24ndCBhbGxvdyB1bmRlZmluZWQgc3ltYm9scy4KIAkgIGFsbG93X3VuZGVmaW5lZF9mbGFnPSIkbm9fdW5kZWZpbmVkX2ZsYWciCiAJZmkKKwogICAgICAgZmkKIAotICAgICAgaWYgdGVzdCAiJG1vZGUiICE9IHJlbGluazsgdGhlbgorICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRsaWJuYW1lIiAiJGxpYm5hbWUiICJ5ZXMiCisgICAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJHN5bWZpbGVvYmoiCisgICAgICB0ZXN0ICJYJGxpYm9ianMiID0gIlggIiAmJiBsaWJvYmpzPQorCisgICAgICBpZiB0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluazsgdGhlbgogCSMgUmVtb3ZlIG91ciBvdXRwdXRzLCBidXQgZG9uJ3QgcmVtb3ZlIG9iamVjdCBmaWxlcyBzaW5jZSB0aGV5CiAJIyBtYXkgaGF2ZSBiZWVuIGNyZWF0ZWQgd2hlbiBjb21waWxpbmcgUElDIG9iamVjdHMuCiAJcmVtb3ZlbGlzdD0KLQl0ZW1wcmVtb3ZlbGlzdD1gJGVjaG8gIiRvdXRwdXRfb2JqZGlyLyoiYAorCXRlbXByZW1vdmVsaXN0PWAkRUNITyAiJG91dHB1dF9vYmpkaXIvKiJgCiAJZm9yIHAgaW4gJHRlbXByZW1vdmVsaXN0OyBkbwogCSAgY2FzZSAkcCBpbgotCSAgICAqLiRvYmpleHQpCisJICAgICouJG9iamV4dCB8ICouZ2NubykKIAkgICAgICAgOzsKIAkgICAgJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUgfCAkb3V0cHV0X29iamRpci8kbGlibmFtZS4qIHwgJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfSR7cmVsZWFzZX0uKikKIAkgICAgICAgaWYgdGVzdCAiWCRwcmVjaW91c19maWxlc19yZWdleCIgIT0gIlgiOyB0aGVuCi0JICAgICAgICAgaWYgZWNobyAkcCB8ICRFR1JFUCAtZSAiJHByZWNpb3VzX2ZpbGVzX3JlZ2V4IiA+L2Rldi9udWxsIDI+JjEKLQkgICAgICAgICB0aGVuCisJCSBpZiAkRUNITyAiJHAiIHwgJEVHUkVQIC1lICIkcHJlY2lvdXNfZmlsZXNfcmVnZXgiID4vZGV2L251bGwgMj4mMQorCQkgdGhlbgogCQkgICBjb250aW51ZQogCQkgZmkKIAkgICAgICAgZmkKLQkgICAgICAgcmVtb3ZlbGlzdD0iJHJlbW92ZWxpc3QgJHAiCisJICAgICAgIGZ1bmNfYXBwZW5kIHJlbW92ZWxpc3QgIiAkcCIKIAkgICAgICAgOzsKIAkgICAgKikgOzsKIAkgIGVzYWMKIAlkb25lCi0JaWYgdGVzdCAtbiAiJHJlbW92ZWxpc3QiOyB0aGVuCi0JICAkc2hvdyAiJHtybX1yICRyZW1vdmVsaXN0IgotCSAgJHJ1biAke3JtfXIgJHJlbW92ZWxpc3QKLQlmaQorCXRlc3QgLW4gIiRyZW1vdmVsaXN0IiAmJiBcCisJICBmdW5jX3Nob3dfZXZhbCAiJHtSTX1yIFwkcmVtb3ZlbGlzdCIKICAgICAgIGZpCiAKICAgICAgICMgTm93IHNldCB0aGUgdmFyaWFibGVzIGZvciBidWlsZGluZyBvbGQgbGlicmFyaWVzLgogICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSBjb252ZW5pZW5jZSA7IHRoZW4KLQlvbGRsaWJzPSIkb2xkbGlicyAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgorCWZ1bmNfYXBwZW5kIG9sZGxpYnMgIiAkb3V0cHV0X29iamRpci8kbGlibmFtZS4kbGliZXh0IgogCiAJIyBUcmFuc2Zvcm0gLmxvIGZpbGVzIHRvIC5vIGZpbGVzLgotCW9sZG9ianM9IiRvYmpzICJgJGVjaG8gIlgkbGlib2JqcyIgfCAkU1AyTkwgfCAkWHNlZCAtZSAnL1wuJyR7bGliZXh0fSckL2QnIC1lICIkbG8ybyIgfCAkTkwyU1BgCisJb2xkb2Jqcz0iJG9ianMgImAkRUNITyAiJGxpYm9ianMiIHwgJFNQMk5MIHwgJFNFRCAiL1wuJHtsaWJleHR9JC9kOyAkbG8ybyIgfCAkTkwyU1BgCiAgICAgICBmaQogCiAgICAgICAjIEVsaW1pbmF0ZSBhbGwgdGVtcG9yYXJ5IGRpcmVjdG9yaWVzLgogICAgICAgI2ZvciBwYXRoIGluICRub3RpbnN0X3BhdGg7IGRvCi0gICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJGVjaG8gIiRsaWJfc2VhcmNoX3BhdGggIiB8ICR7U0VEfSAtZSAicyUgJHBhdGggJSAlZyJgCi0gICAgICAjCWRlcGxpYnM9YCRlY2hvICIkZGVwbGlicyAiIHwgJHtTRUR9IC1lICJzJSAtTCRwYXRoICUgJWciYAotICAgICAgIwlkZXBlbmRlbmN5X2xpYnM9YCRlY2hvICIkZGVwZW5kZW5jeV9saWJzICIgfCAke1NFRH0gLWUgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjCWxpYl9zZWFyY2hfcGF0aD1gJEVDSE8gIiRsaWJfc2VhcmNoX3BhdGggIiB8ICRTRUQgInMlICRwYXRoICUgJWciYAorICAgICAgIwlkZXBsaWJzPWAkRUNITyAiJGRlcGxpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCisgICAgICAjCWRlcGVuZGVuY3lfbGlicz1gJEVDSE8gIiRkZXBlbmRlbmN5X2xpYnMgIiB8ICRTRUQgInMlIC1MJHBhdGggJSAlZyJgCiAgICAgICAjZG9uZQogCiAgICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgogCSMgSWYgdGhlIHVzZXIgc3BlY2lmaWVkIGFueSBycGF0aCBmbGFncywgdGhlbiBhZGQgdGhlbS4KIAl0ZW1wX3hycGF0aD0KIAlmb3IgbGliZGlyIGluICR4cnBhdGg7IGRvCi0JICB0ZW1wX3hycGF0aD0iJHRlbXBfeHJwYXRoIC1SJGxpYmRpciIKKwkgIGZ1bmNfcmVwbGFjZV9zeXNyb290ICIkbGliZGlyIgorCSAgZnVuY19hcHBlbmQgdGVtcF94cnBhdGggIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCiAJICBjYXNlICIkZmluYWxpemVfcnBhdGggIiBpbgogCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZpbmFsaXplX3JwYXRoPSIkZmluYWxpemVfcnBhdGggJGxpYmRpciIgOzsKKwkgICopIGZ1bmNfYXBwZW5kIGZpbmFsaXplX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgIGVzYWMKIAlkb25lCiAJaWYgdGVzdCAiJGhhcmRjb2RlX2ludG9fbGlicyIgIT0geWVzIHx8IHRlc3QgIiRidWlsZF9vbGRfbGlicyIgPSB5ZXM7IHRoZW4KQEAgLTM1MDksNyArNzU4OSw3IEBACiAgICAgICBmb3IgbGliIGluICRvbGRfZGxmaWxlczsgZG8KIAljYXNlICIgJGRscHJlZmlsZXMgJGRsZmlsZXMgIiBpbgogCSoiICRsaWIgIiopIDs7Ci0JKikgZGxmaWxlcz0iJGRsZmlsZXMgJGxpYiIgOzsKKwkqKSBmdW5jX2FwcGVuZCBkbGZpbGVzICIgJGxpYiIgOzsKIAllc2FjCiAgICAgICBkb25lCiAKQEAgLTM1MTksMTkgKzc1OTksMTkgQEAKICAgICAgIGZvciBsaWIgaW4gJG9sZF9kbHByZWZpbGVzOyBkbwogCWNhc2UgIiRkbHByZWZpbGVzICIgaW4KIAkqIiAkbGliICIqKSA7OwotCSopIGRscHJlZmlsZXM9IiRkbHByZWZpbGVzICRsaWIiIDs7CisJKikgZnVuY19hcHBlbmQgZGxwcmVmaWxlcyAiICRsaWIiIDs7CiAJZXNhYwogICAgICAgZG9uZQogCiAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgogCWlmIHRlc3QgLW4gIiRycGF0aCI7IHRoZW4KIAkgIGNhc2UgJGhvc3QgaW4KLQkgICotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqIHwgKi0qLWJlb3MqKQorCSAgKi0qLWN5Z3dpbiogfCAqLSotbWluZ3cqIHwgKi0qLXB3MzIqIHwgKi0qLW9zMiogfCAqLSotYmVvcyogfCAqLWNlZ2NjKiB8ICotKi1oYWlrdSopCiAJICAgICMgdGhlc2Ugc3lzdGVtcyBkb24ndCBhY3R1YWxseSBoYXZlIGEgYyBsaWJyYXJ5IChhcyBzdWNoKSEKIAkgICAgOzsKIAkgICotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKIAkgICAgIyBSaGFwc29keSBDIGxpYnJhcnkgaXMgaW4gdGhlIFN5c3RlbSBmcmFtZXdvcmsKLQkgICAgZGVwbGlicz0iJGRlcGxpYnMgLWZyYW1ld29yayBTeXN0ZW0iCisJICAgIGZ1bmNfYXBwZW5kIGRlcGxpYnMgIiBTeXN0ZW0ubHRmcmFtZXdvcmsiCiAJICAgIDs7CiAJICAqLSotbmV0YnNkKikKIAkgICAgIyBEb24ndCBsaW5rIHdpdGggbGliYyB1bnRpbCB0aGUgYS5vdXQgbGQuc28gaXMgZml4ZWQuCkBAIC0zNTQ1LDEwICs3NjI1LDEwIEBACiAJICAqLSotc3lzdjQuMnV3MiogfCAqLSotc3lzdjUqIHwgKi0qLXVuaXh3YXJlKiB8ICotKi1PcGVuVU5JWCopCiAJICAgICMgQ29tcGlsZXIgaW5zZXJ0cyBsaWJjIGluIHRoZSBjb3JyZWN0IHBsYWNlIGZvciB0aHJlYWRzIHRvIHdvcmsKIAkgICAgOzsKLSAJICAqKQorCSAgKikKIAkgICAgIyBBZGQgbGliYyB0byBkZXBsaWJzIG9uIGFsbCBvdGhlciBzeXN0ZW1zIGlmIG5lY2Vzc2FyeS4KIAkgICAgaWYgdGVzdCAiJGJ1aWxkX2xpYnRvb2xfbmVlZF9sYyIgPSAieWVzIjsgdGhlbgotCSAgICAgIGRlcGxpYnM9IiRkZXBsaWJzIC1sYyIKKwkgICAgICBmdW5jX2FwcGVuZCBkZXBsaWJzICIgLWxjIgogCSAgICBmaQogCSAgICA7OwogCSAgZXNhYwpAQCAtMzU4MiwxMjAgKzc2NjIsMTM5IEBACiAJICAjIGxpbWl0cy4gTWF5YmUgZXZlbiBicmVha3MgaXQuICBXZSBjb21waWxlIGEgcHJvZ3JhbSwgbGlua2luZyBpdAogCSAgIyBhZ2FpbnN0IHRoZSBkZXBsaWJzIGFzIGEgcHJveHkgZm9yIHRoZSBsaWJyYXJ5LiAgVGhlbiB3ZSBjYW4gY2hlY2sKIAkgICMgd2hldGhlciB0aGV5IGxpbmtlZCBpbiBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggbGRkLgotCSAgJHJtIGNvbmZ0ZXN0LmMKKwkgICRvcHRfZHJ5X3J1biB8fCAkUk0gY29uZnRlc3QuYwogCSAgY2F0ID4gY29uZnRlc3QuYyA8PEVPRgogCSAgaW50IG1haW4oKSB7IHJldHVybiAwOyB9CiBFT0YKLQkgICRybSBjb25mdGVzdAorCSAgJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAogCSAgaWYgJExUQ0MgJExUQ0ZMQUdTIC1vIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMgJGRlcGxpYnM7IHRoZW4KIAkgICAgbGRkX291dHB1dD1gbGRkIGNvbmZ0ZXN0YAogCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KLQkgICAgICBuYW1lPWBleHByICRpIDogJy1sXCguKlwpJ2AKLQkgICAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KLSAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkgICAgICBjYXNlICRpIGluCisJICAgICAgLWwqKQorCQlmdW5jX3N0cmlwbmFtZSAtbCAnJyAiJGkiCisJCW5hbWU9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdAogCQlpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCiAJCSAgY2FzZSAiICRwcmVkZXBzICRwb3N0ZGVwcyAiIGluCiAJCSAgKiIgJGkgIiopCi0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKIAkJICAgIGk9IiIKIAkJICAgIDs7CiAJCSAgZXNhYwotCSAgICAgICAgZmkKKwkJZmkKIAkJaWYgdGVzdCAtbiAiJGkiIDsgdGhlbgotCQkgIGxpYm5hbWU9YGV2YWwgXFwkZWNobyBcIiRsaWJuYW1lX3NwZWNcImAKLQkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCBcXCRlY2hvIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiYAotCQkgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXMKLQkJICBkZXBsaWJfbWF0Y2g9JDIKKwkJICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCAiXFwkRUNITyBcIiRsaWJyYXJ5X25hbWVzX3NwZWNcIiJgCisJCSAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlczsgc2hpZnQKKwkJICBkZXBsaWJfbWF0Y2g9JDEKIAkJICBpZiB0ZXN0IGBleHByICIkbGRkX291dHB1dCIgOiAiLiokZGVwbGliX21hdGNoImAgLW5lIDAgOyB0aGVuCi0JCSAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKIAkJICBlbHNlCiAJCSAgICBkcm9wcGVkZGVwcz15ZXMKLQkJICAgICRlY2hvCi0JCSAgICAkZWNobyAiKioqIFdhcm5pbmc6IGR5bmFtaWMgbGlua2VyIGRvZXMgbm90IGFjY2VwdCBuZWVkZWQgbGlicmFyeSAkaS4iCi0JCSAgICAkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQkgICAgJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggSSBiZWxpZXZlIHlvdSBkbyBub3QgaGF2ZSIKLQkJICAgICRlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCi0JCSAgICAkZWNobyAiKioqIGl0cyBkeW5hbWljIGRlcGVuZGVuY3kgbGlzdCB0aGF0IHByb2dyYW1zIGdldCByZXNvbHZlZCB3aXRoIGF0IHJ1bnRpbWUuIgorCQkgICAgZWNobworCQkgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJICAgIGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCisJCSAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIEkgYmVsaWV2ZSB5b3UgZG8gbm90IGhhdmUiCisJCSAgICBlY2hvICIqKiogYmVjYXVzZSBhIHRlc3RfY29tcGlsZSBkaWQgcmV2ZWFsIHRoYXQgdGhlIGxpbmtlciBkaWQgbm90IHVzZSBpdCBmb3IiCisJCSAgICBlY2hvICIqKiogaXRzIGR5bmFtaWMgZGVwZW5kZW5jeSBsaXN0IHRoYXQgcHJvZ3JhbXMgZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCiAJCSAgZmkKIAkJZmkKLQkgICAgICBlbHNlCi0JCW5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRpIgotCSAgICAgIGZpCisJCTs7CisJICAgICAgKikKKwkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgorCQk7OworCSAgICAgIGVzYWMKIAkgICAgZG9uZQogCSAgZWxzZQogCSAgICAjIEVycm9yIG9jY3VycmVkIGluIHRoZSBmaXJzdCBjb21waWxlLiAgTGV0J3MgdHJ5IHRvIHNhbHZhZ2UKIAkgICAgIyB0aGUgc2l0dWF0aW9uOiBDb21waWxlIGEgc2VwYXJhdGUgcHJvZ3JhbSBmb3IgZWFjaCBsaWJyYXJ5LgogCSAgICBmb3IgaSBpbiAkZGVwbGliczsgZG8KLQkgICAgICBuYW1lPWBleHByICRpIDogJy1sXCguKlwpJ2AKLQkgICAgICAjIElmICRuYW1lIGlzIGVtcHR5IHdlIGFyZSBvcGVyYXRpbmcgb24gYSAtTCBhcmd1bWVudC4KLSAgICAgICAgICAgICAgaWYgdGVzdCAiJG5hbWUiICE9ICIiICYmIHRlc3QgIiRuYW1lIiAhPSAiMCI7IHRoZW4KLQkJJHJtIGNvbmZ0ZXN0CisJICAgICAgY2FzZSAkaSBpbgorCSAgICAgIC1sKikKKwkJZnVuY19zdHJpcG5hbWUgLWwgJycgIiRpIgorCQluYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkJJG9wdF9kcnlfcnVuIHx8ICRSTSBjb25mdGVzdAogCQlpZiAkTFRDQyAkTFRDRkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAkaTsgdGhlbgogCQkgIGxkZF9vdXRwdXQ9YGxkZCBjb25mdGVzdGAKIAkJICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCiAJCSAgICBjYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJICAgICoiICRpICIqKQotCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkaSIKKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRpIgogCQkgICAgICBpPSIiCiAJCSAgICAgIDs7CiAJCSAgICBlc2FjCiAJCSAgZmkKIAkJICBpZiB0ZXN0IC1uICIkaSIgOyB0aGVuCi0JCSAgICBsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCi0JCSAgICBkZXBsaWJfbWF0Y2hlcz1gZXZhbCBcXCRlY2hvIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiYAotCQkgICAgc2V0IGR1bW15ICRkZXBsaWJfbWF0Y2hlcwotCQkgICAgZGVwbGliX21hdGNoPSQyCisJCSAgICBsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJICAgIGRlcGxpYl9tYXRjaGVzPWBldmFsICJcXCRFQ0hPIFwiJGxpYnJhcnlfbmFtZXNfc3BlY1wiImAKKwkJICAgIHNldCBkdW1teSAkZGVwbGliX21hdGNoZXM7IHNoaWZ0CisJCSAgICBkZXBsaWJfbWF0Y2g9JDEKIAkJICAgIGlmIHRlc3QgYGV4cHIgIiRsZGRfb3V0cHV0IiA6ICIuKiRkZXBsaWJfbWF0Y2giYCAtbmUgMCA7IHRoZW4KLQkJICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCisJCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkaSIKIAkJICAgIGVsc2UKIAkJICAgICAgZHJvcHBlZGRlcHM9eWVzCi0JCSAgICAgICRlY2hvCi0JCSAgICAgICRlY2hvICIqKiogV2FybmluZzogZHluYW1pYyBsaW5rZXIgZG9lcyBub3QgYWNjZXB0IG5lZWRlZCBsaWJyYXJ5ICRpLiIKLQkJICAgICAgJGVjaG8gIioqKiBJIGhhdmUgdGhlIGNhcGFiaWxpdHkgdG8gbWFrZSB0aGF0IGxpYnJhcnkgYXV0b21hdGljYWxseSBsaW5rIGluIHdoZW4iCi0JCSAgICAgICRlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgotCQkgICAgICAkZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgotCQkgICAgICAkZWNobyAiKioqIGJlY2F1c2UgYSB0ZXN0X2NvbXBpbGUgZGlkIHJldmVhbCB0aGF0IHRoZSBsaW5rZXIgZGlkIG5vdCB1c2UgdGhpcyBvbmUiCi0JCSAgICAgICRlY2hvICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCisJCSAgICAgIGVjaG8KKwkJICAgICAgJEVDSE8gIioqKiBXYXJuaW5nOiBkeW5hbWljIGxpbmtlciBkb2VzIG5vdCBhY2NlcHQgbmVlZGVkIGxpYnJhcnkgJGkuIgorCQkgICAgICBlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQkgICAgICBlY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQkgICAgICBlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCSAgICAgIGVjaG8gIioqKiBiZWNhdXNlIGEgdGVzdF9jb21waWxlIGRpZCByZXZlYWwgdGhhdCB0aGUgbGlua2VyIGRpZCBub3QgdXNlIHRoaXMgb25lIgorCQkgICAgICBlY2hvICIqKiogYXMgYSBkeW5hbWljIGRlcGVuZGVuY3kgdGhhdCBwcm9ncmFtcyBjYW4gZ2V0IHJlc29sdmVkIHdpdGggYXQgcnVudGltZS4iCiAJCSAgICBmaQogCQkgIGZpCiAJCWVsc2UKIAkJICBkcm9wcGVkZGVwcz15ZXMKLQkJICAkZWNobwotCQkgICRlY2hvICIqKiogV2FybmluZyEgIExpYnJhcnkgJGkgaXMgbmVlZGVkIGJ5IHRoaXMgbGlicmFyeSBidXQgSSB3YXMgbm90IGFibGUgdG8iCi0JCSAgJGVjaG8gIioqKiBtYWtlIGl0IGxpbmsgaW4hICBZb3Ugd2lsbCBwcm9iYWJseSBuZWVkIHRvIGluc3RhbGwgaXQgb3Igc29tZSIKLQkJICAkZWNobyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKLQkJICAkZWNobyAiKioqIGZ1bmN0aW9uYWwuICBJbnN0YWxsaW5nIGl0IGJlZm9yZSBjb250aW51aW5nIHdvdWxkIGJlIGV2ZW4gYmV0dGVyLiIKKwkJICBlY2hvCisJCSAgJEVDSE8gIioqKiBXYXJuaW5nISAgTGlicmFyeSAkaSBpcyBuZWVkZWQgYnkgdGhpcyBsaWJyYXJ5IGJ1dCBJIHdhcyBub3QgYWJsZSB0byIKKwkJICBlY2hvICIqKiogbWFrZSBpdCBsaW5rIGluISAgWW91IHdpbGwgcHJvYmFibHkgbmVlZCB0byBpbnN0YWxsIGl0IG9yIHNvbWUiCisJCSAgZWNobyAiKioqIGxpYnJhcnkgdGhhdCBpdCBkZXBlbmRzIG9uIGJlZm9yZSB0aGlzIGxpYnJhcnkgd2lsbCBiZSBmdWxseSIKKwkJICBlY2hvICIqKiogZnVuY3Rpb25hbC4gIEluc3RhbGxpbmcgaXQgYmVmb3JlIGNvbnRpbnVpbmcgd291bGQgYmUgZXZlbiBiZXR0ZXIuIgogCQlmaQotCSAgICAgIGVsc2UKLQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGkiCi0JICAgICAgZmkKKwkJOzsKKwkgICAgICAqKQorCQlmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGkiCisJCTs7CisJICAgICAgZXNhYwogCSAgICBkb25lCiAJICBmaQogCSAgOzsKIAlmaWxlX21hZ2ljKikKLQkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2QKLQkgIGZpbGVfbWFnaWNfcmVnZXg9YGV4cHIgIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgOiAiJDIgXCguKlwpImAKKwkgIHNldCBkdW1teSAkZGVwbGlic19jaGVja19tZXRob2Q7IHNoaWZ0CisJICBmaWxlX21hZ2ljX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQxIFwoLipcKSJgCiAJICBmb3IgYV9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JICAgIG5hbWU9YGV4cHIgJGFfZGVwbGliIDogJy1sXCguKlwpJ2AKLQkgICAgIyBJZiAkbmFtZSBpcyBlbXB0eSB3ZSBhcmUgb3BlcmF0aW5nIG9uIGEgLUwgYXJndW1lbnQuCi0gICAgICAgICAgICBpZiB0ZXN0ICIkbmFtZSIgIT0gIiIgJiYgdGVzdCAgIiRuYW1lIiAhPSAiMCI7IHRoZW4KKwkgICAgY2FzZSAkYV9kZXBsaWIgaW4KKwkgICAgLWwqKQorCSAgICAgIGZ1bmNfc3RyaXBuYW1lIC1sICcnICIkYV9kZXBsaWIiCisJICAgICAgbmFtZT0kZnVuY19zdHJpcG5hbWVfcmVzdWx0CiAJICAgICAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgogCQljYXNlICIgJHByZWRlcHMgJHBvc3RkZXBzICIgaW4KIAkJKiIgJGFfZGVwbGliICIqKQotCQkgIG5ld2RlcGxpYnM9IiRuZXdkZXBsaWJzICRhX2RlcGxpYiIKKwkJICBmdW5jX2FwcGVuZCBuZXdkZXBsaWJzICIgJGFfZGVwbGliIgogCQkgIGFfZGVwbGliPSIiCiAJCSAgOzsKIAkJZXNhYwogCSAgICAgIGZpCiAJICAgICAgaWYgdGVzdCAtbiAiJGFfZGVwbGliIiA7IHRoZW4KLQkJbGlibmFtZT1gZXZhbCBcXCRlY2hvIFwiJGxpYm5hbWVfc3BlY1wiYAorCQlsaWJuYW1lPWBldmFsICJcXCRFQ0hPIFwiJGxpYm5hbWVfc3BlY1wiImAKKwkJaWYgdGVzdCAtbiAiJGZpbGVfbWFnaWNfZ2xvYiI7IHRoZW4KKwkJICBsaWJuYW1lZ2xvYj1gZnVuY19lY2hvX2FsbCAiJGxpYm5hbWUiIHwgJFNFRCAtZSAkZmlsZV9tYWdpY19nbG9iYAorCQllbHNlCisJCSAgbGlibmFtZWdsb2I9JGxpYm5hbWUKKwkJZmkKKwkJdGVzdCAiJHdhbnRfbm9jYXNlZ2xvYiIgPSB5ZXMgJiYgbm9jYXNlZ2xvYj1gc2hvcHQgLXAgbm9jYXNlZ2xvYmAKIAkJZm9yIGkgaW4gJGxpYl9zZWFyY2hfcGF0aCAkc3lzX2xpYl9zZWFyY2hfcGF0aCAkc2hsaWJfc2VhcmNoX3BhdGg7IGRvCi0JCSAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lWy4tXSogMj4vZGV2L251bGxgCisJCSAgaWYgdGVzdCAiJHdhbnRfbm9jYXNlZ2xvYiIgPSB5ZXM7IHRoZW4KKwkJICAgIHNob3B0IC1zIG5vY2FzZWdsb2IKKwkJICAgIHBvdGVudGlhbF9saWJzPWBscyAkaS8kbGlibmFtZWdsb2JbLi1dKiAyPi9kZXYvbnVsbGAKKwkJICAgICRub2Nhc2VnbG9iCisJCSAgZWxzZQorCQkgICAgcG90ZW50aWFsX2xpYnM9YGxzICRpLyRsaWJuYW1lZ2xvYlsuLV0qIDI+L2Rldi9udWxsYAorCQkgIGZpCiAJCSAgZm9yIHBvdGVudF9saWIgaW4gJHBvdGVudGlhbF9saWJzOyBkbwogCQkgICAgICAjIEZvbGxvdyBzb2Z0IGxpbmtzLgotCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgXAotCQkJIHwgZ3JlcCAiIC0+ICIgPi9kZXYvbnVsbDsgdGhlbgorCQkgICAgICBpZiBscyAtbExkICIkcG90ZW50X2xpYiIgMj4vZGV2L251bGwgfAorCQkJICRHUkVQICIgLT4gIiA+L2Rldi9udWxsOyB0aGVuCiAJCQljb250aW51ZQogCQkgICAgICBmaQogCQkgICAgICAjIFRoZSBzdGF0ZW1lbnQgYWJvdmUgdHJpZXMgdG8gYXZvaWQgZW50ZXJpbmcgYW4KQEAgLTM3MDgsMTMgKzc4MDcsMTMgQEAKIAkJCXBvdGxpYmxpbms9YGxzIC1sZCAkcG90bGliIHwgJHtTRUR9ICdzLy4qIC0+IC8vJ2AKIAkJCWNhc2UgJHBvdGxpYmxpbmsgaW4KIAkJCVtcXC9dKiB8IFtBLVphLXpdOltcXC9dKikgcG90bGliPSIkcG90bGlibGluayI7OwotCQkJKikgcG90bGliPWAkZWNobyAiWCRwb3RsaWIiIHwgJFhzZWQgLWUgJ3MsW14vXSokLCwnYCIkcG90bGlibGluayI7OworCQkJKikgcG90bGliPWAkRUNITyAiJHBvdGxpYiIgfCAkU0VEICdzLFteL10qJCwsJ2AiJHBvdGxpYmxpbmsiOzsKIAkJCWVzYWMKIAkJICAgICAgZG9uZQotCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgXAotCQkJIHwgJHtTRUR9IDEwcSBcCi0JCQkgfCAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkJbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgICAgICBpZiBldmFsICRmaWxlX21hZ2ljX2NtZCBcIlwkcG90bGliXCIgMj4vZGV2L251bGwgfAorCQkJICRTRUQgLWUgMTBxIHwKKwkJCSAkRUdSRVAgIiRmaWxlX21hZ2ljX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgorCQkJZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKIAkJCWFfZGVwbGliPSIiCiAJCQlicmVhayAyCiAJCSAgICAgIGZpCkBAIC0zNzIzLDUwICs3ODIyLDUyIEBACiAJICAgICAgZmkKIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgogCQlkcm9wcGVkZGVwcz15ZXMKLQkJJGVjaG8KLQkJJGVjaG8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgotCQkkZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKLQkJJGVjaG8gIioqKiB5b3UgbGluayB0byB0aGlzIGxpYnJhcnkuICBCdXQgSSBjYW4gb25seSBkbyB0aGlzIGlmIHlvdSBoYXZlIGEiCi0JCSRlY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCi0JCSRlY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgorCQllY2hvCisJCSRFQ0hPICIqKiogV2FybmluZzogbGlua2VyIHBhdGggZG9lcyBub3QgaGF2ZSByZWFsIGZpbGUgZm9yIGxpYnJhcnkgJGFfZGVwbGliLiIKKwkJZWNobyAiKioqIEkgaGF2ZSB0aGUgY2FwYWJpbGl0eSB0byBtYWtlIHRoYXQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGxpbmsgaW4gd2hlbiIKKwkJZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKKwkJZWNobyAiKioqIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCB3aGljaCB5b3UgZG8gbm90IGFwcGVhciB0byBoYXZlIgorCQllY2hvICIqKiogYmVjYXVzZSBJIGRpZCBjaGVjayB0aGUgbGlua2VyIHBhdGggbG9va2luZyBmb3IgYSBmaWxlIHN0YXJ0aW5nIgogCQlpZiB0ZXN0IC16ICIkcG90bGliIiA7IHRoZW4KLQkJICAkZWNobyAiKioqIHdpdGggJGxpYm5hbWUgYnV0IG5vIGNhbmRpZGF0ZXMgd2VyZSBmb3VuZC4gKC4uLmZvciBmaWxlIG1hZ2ljIHRlc3QpIgorCQkgICRFQ0hPICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIGZpbGUgbWFnaWMgdGVzdCkiCiAJCWVsc2UKLQkJICAkZWNobyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKLQkJICAkZWNobyAiKioqIHVzaW5nIGEgZmlsZSBtYWdpYy4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGFuZCBub25lIG9mIHRoZSBjYW5kaWRhdGVzIHBhc3NlZCBhIGZpbGUgZm9ybWF0IHRlc3QiCisJCSAgJEVDSE8gIioqKiB1c2luZyBhIGZpbGUgbWFnaWMuIExhc3QgZmlsZSBjaGVja2VkOiAkcG90bGliIgogCQlmaQogCSAgICAgIGZpCi0JICAgIGVsc2UKKwkgICAgICA7OworCSAgICAqKQogCSAgICAgICMgQWRkIGEgLUwgYXJndW1lbnQuCi0JICAgICAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgotCSAgICBmaQorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCisJICAgICAgOzsKKwkgICAgZXNhYwogCSAgZG9uZSAjIEdvbmUgdGhyb3VnaCBhbGwgZGVwbGlicy4KIAkgIDs7CiAJbWF0Y2hfcGF0dGVybiopCi0JICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kCi0JICBtYXRjaF9wYXR0ZXJuX3JlZ2V4PWBleHByICIkZGVwbGlic19jaGVja19tZXRob2QiIDogIiQyIFwoLipcKSJgCisJICBzZXQgZHVtbXkgJGRlcGxpYnNfY2hlY2tfbWV0aG9kOyBzaGlmdAorCSAgbWF0Y2hfcGF0dGVybl9yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICIkMSBcKC4qXCkiYAogCSAgZm9yIGFfZGVwbGliIGluICRkZXBsaWJzOyBkbwotCSAgICBuYW1lPWBleHByICRhX2RlcGxpYiA6ICctbFwoLipcKSdgCi0JICAgICMgSWYgJG5hbWUgaXMgZW1wdHkgd2UgYXJlIG9wZXJhdGluZyBvbiBhIC1MIGFyZ3VtZW50LgotCSAgICBpZiB0ZXN0IC1uICIkbmFtZSIgJiYgdGVzdCAiJG5hbWUiICE9ICIwIjsgdGhlbgorCSAgICBjYXNlICRhX2RlcGxpYiBpbgorCSAgICAtbCopCisJICAgICAgZnVuY19zdHJpcG5hbWUgLWwgJycgIiRhX2RlcGxpYiIKKwkgICAgICBuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgICAgICBpZiB0ZXN0ICJYJGFsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lcyIgPSAiWHllcyIgOyB0aGVuCiAJCWNhc2UgIiAkcHJlZGVwcyAkcG9zdGRlcHMgIiBpbgogCQkqIiAkYV9kZXBsaWIgIiopCi0JCSAgbmV3ZGVwbGlicz0iJG5ld2RlcGxpYnMgJGFfZGVwbGliIgorCQkgIGZ1bmNfYXBwZW5kIG5ld2RlcGxpYnMgIiAkYV9kZXBsaWIiCiAJCSAgYV9kZXBsaWI9IiIKIAkJICA7OwogCQllc2FjCiAJICAgICAgZmkKIAkgICAgICBpZiB0ZXN0IC1uICIkYV9kZXBsaWIiIDsgdGhlbgotCQlsaWJuYW1lPWBldmFsIFxcJGVjaG8gXCIkbGlibmFtZV9zcGVjXCJgCisJCWxpYm5hbWU9YGV2YWwgIlxcJEVDSE8gXCIkbGlibmFtZV9zcGVjXCIiYAogCQlmb3IgaSBpbiAkbGliX3NlYXJjaF9wYXRoICRzeXNfbGliX3NlYXJjaF9wYXRoICRzaGxpYl9zZWFyY2hfcGF0aDsgZG8KIAkJICBwb3RlbnRpYWxfbGlicz1gbHMgJGkvJGxpYm5hbWVbLi1dKiAyPi9kZXYvbnVsbGAKIAkJICBmb3IgcG90ZW50X2xpYiBpbiAkcG90ZW50aWFsX2xpYnM7IGRvCiAJCSAgICBwb3RsaWI9IiRwb3RlbnRfbGliIiAjIHNlZSBzeW1saW5rLWNoZWNrIGFib3ZlIGluIGZpbGVfbWFnaWMgdGVzdAotCQkgICAgaWYgZXZhbCAkZWNobyBcIiRwb3RlbnRfbGliXCIgMj4vZGV2L251bGwgXAotCQkgICAgICAgIHwgJHtTRUR9IDEwcSBcCi0JCSAgICAgICAgfCAkRUdSRVAgIiRtYXRjaF9wYXR0ZXJuX3JlZ2V4IiA+IC9kZXYvbnVsbDsgdGhlbgotCQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCisJCSAgICBpZiBldmFsICJcJEVDSE8gXCIkcG90ZW50X2xpYlwiIiAyPi9kZXYvbnVsbCB8ICRTRUQgMTBxIHwgXAorCQkgICAgICAgJEVHUkVQICIkbWF0Y2hfcGF0dGVybl9yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKIAkJICAgICAgYV9kZXBsaWI9IiIKIAkJICAgICAgYnJlYWsgMgogCQkgICAgZmkKQEAgLTM3NzUsNDYgKzc4NzYsNDggQEAKIAkgICAgICBmaQogCSAgICAgIGlmIHRlc3QgLW4gIiRhX2RlcGxpYiIgOyB0aGVuCiAJCWRyb3BwZWRkZXBzPXllcwotCQkkZWNobwotCQkkZWNobyAiKioqIFdhcm5pbmc6IGxpbmtlciBwYXRoIGRvZXMgbm90IGhhdmUgcmVhbCBmaWxlIGZvciBsaWJyYXJ5ICRhX2RlcGxpYi4iCi0JCSRlY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgotCQkkZWNobyAiKioqIHlvdSBsaW5rIHRvIHRoaXMgbGlicmFyeS4gIEJ1dCBJIGNhbiBvbmx5IGRvIHRoaXMgaWYgeW91IGhhdmUgYSIKLQkJJGVjaG8gIioqKiBzaGFyZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgd2hpY2ggeW91IGRvIG5vdCBhcHBlYXIgdG8gaGF2ZSIKLQkJJGVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCisJCWVjaG8KKwkJJEVDSE8gIioqKiBXYXJuaW5nOiBsaW5rZXIgcGF0aCBkb2VzIG5vdCBoYXZlIHJlYWwgZmlsZSBmb3IgbGlicmFyeSAkYV9kZXBsaWIuIgorCQllY2hvICIqKiogSSBoYXZlIHRoZSBjYXBhYmlsaXR5IHRvIG1ha2UgdGhhdCBsaWJyYXJ5IGF1dG9tYXRpY2FsbHkgbGluayBpbiB3aGVuIgorCQllY2hvICIqKiogeW91IGxpbmsgdG8gdGhpcyBsaWJyYXJ5LiAgQnV0IEkgY2FuIG9ubHkgZG8gdGhpcyBpZiB5b3UgaGF2ZSBhIgorCQllY2hvICIqKiogc2hhcmVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIHdoaWNoIHlvdSBkbyBub3QgYXBwZWFyIHRvIGhhdmUiCisJCWVjaG8gIioqKiBiZWNhdXNlIEkgZGlkIGNoZWNrIHRoZSBsaW5rZXIgcGF0aCBsb29raW5nIGZvciBhIGZpbGUgc3RhcnRpbmciCiAJCWlmIHRlc3QgLXogIiRwb3RsaWIiIDsgdGhlbgotCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBidXQgbm8gY2FuZGlkYXRlcyB3ZXJlIGZvdW5kLiAoLi4uZm9yIHJlZ2V4IHBhdHRlcm4gdGVzdCkiCisJCSAgJEVDSE8gIioqKiB3aXRoICRsaWJuYW1lIGJ1dCBubyBjYW5kaWRhdGVzIHdlcmUgZm91bmQuICguLi5mb3IgcmVnZXggcGF0dGVybiB0ZXN0KSIKIAkJZWxzZQotCQkgICRlY2hvICIqKiogd2l0aCAkbGlibmFtZSBhbmQgbm9uZSBvZiB0aGUgY2FuZGlkYXRlcyBwYXNzZWQgYSBmaWxlIGZvcm1hdCB0ZXN0IgotCQkgICRlY2hvICIqKiogdXNpbmcgYSByZWdleCBwYXR0ZXJuLiBMYXN0IGZpbGUgY2hlY2tlZDogJHBvdGxpYiIKKwkJICAkRUNITyAiKioqIHdpdGggJGxpYm5hbWUgYW5kIG5vbmUgb2YgdGhlIGNhbmRpZGF0ZXMgcGFzc2VkIGEgZmlsZSBmb3JtYXQgdGVzdCIKKwkJICAkRUNITyAiKioqIHVzaW5nIGEgcmVnZXggcGF0dGVybi4gTGFzdCBmaWxlIGNoZWNrZWQ6ICRwb3RsaWIiCiAJCWZpCiAJICAgICAgZmkKLQkgICAgZWxzZQorCSAgICAgIDs7CisJICAgICopCiAJICAgICAgIyBBZGQgYSAtTCBhcmd1bWVudC4KLQkgICAgICBuZXdkZXBsaWJzPSIkbmV3ZGVwbGlicyAkYV9kZXBsaWIiCi0JICAgIGZpCisJICAgICAgZnVuY19hcHBlbmQgbmV3ZGVwbGlicyAiICRhX2RlcGxpYiIKKwkgICAgICA7OworCSAgICBlc2FjCiAJICBkb25lICMgR29uZSB0aHJvdWdoIGFsbCBkZXBsaWJzLgogCSAgOzsKIAlub25lIHwgdW5rbm93biB8ICopCiAJICBuZXdkZXBsaWJzPSIiCi0JICB0bXBfZGVwbGlicz1gJGVjaG8gIlggJGRlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvIC1sYyQvLycgXAotCSAgICAtZSAncy8gLVtMUl1bXiBdKi8vZydgCisJICB0bXBfZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzLyAtbGMkLy87IHMvIC1bTFJdW14gXSovL2cnYAogCSAgaWYgdGVzdCAiWCRhbGxvd19saWJ0b29sX2xpYnNfd2l0aF9zdGF0aWNfcnVudGltZXMiID0gIlh5ZXMiIDsgdGhlbgogCSAgICBmb3IgaSBpbiAkcHJlZGVwcyAkcG9zdGRlcHMgOyBkbwogCSAgICAgICMgY2FuJ3QgdXNlIFhzZWQgYmVsb3csIGJlY2F1c2UgJGkgbWlnaHQgY29udGFpbiAnLycKLQkgICAgICB0bXBfZGVwbGlicz1gJGVjaG8gIlggJHRtcF9kZXBsaWJzIiB8ICR7U0VEfSAtZSAiMXMsXlgsLCIgLWUgInMsJGksLCJgCisJICAgICAgdG1wX2RlcGxpYnM9YCRFQ0hPICIgJHRtcF9kZXBsaWJzIiB8ICRTRUQgInMsJGksLCJgCiAJICAgIGRvbmUKIAkgIGZpCi0JICBpZiAkZWNobyAiWCAkdG1wX2RlcGxpYnMiIHwgJFhzZWQgLWUgJ3MvWyAJXS8vZycgXAotCSAgICB8IGdyZXAgLiA+L2Rldi9udWxsOyB0aGVuCi0JICAgICRlY2hvCisJICBjYXNlICR0bXBfZGVwbGlicyBpbgorCSAgKlshXAlcIF0qKQorCSAgICBlY2hvCiAJICAgIGlmIHRlc3QgIlgkZGVwbGlic19jaGVja19tZXRob2QiID0gIlhub25lIjsgdGhlbgotCSAgICAgICRlY2hvICIqKiogV2FybmluZzogaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBwbGF0Zm9ybS4iCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qgc3VwcG9ydGVkIGluIHRoaXMgcGxhdGZvcm0uIgogCSAgICBlbHNlCi0JICAgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBpbnRlci1saWJyYXJ5IGRlcGVuZGVuY2llcyBhcmUgbm90IGtub3duIHRvIGJlIHN1cHBvcnRlZC4iCisJICAgICAgZWNobyAiKioqIFdhcm5pbmc6IGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBub3Qga25vd24gdG8gYmUgc3VwcG9ydGVkLiIKIAkgICAgZmkKLQkgICAgJGVjaG8gIioqKiBBbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIGRyb3BwZWQuIgorCSAgICBlY2hvICIqKiogQWxsIGRlY2xhcmVkIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIGFyZSBiZWluZyBkcm9wcGVkLiIKIAkgICAgZHJvcHBlZGRlcHM9eWVzCi0JICBmaQorCSAgICA7OworCSAgZXNhYwogCSAgOzsKIAllc2FjCiAJdmVyc3VmZml4PSR2ZXJzdWZmaXhfc2F2ZQpAQCAtMzgyNSwyNCArNzkyOCwyNCBAQAogCiAJY2FzZSAkaG9zdCBpbgogCSotKi1yaGFwc29keSogfCAqLSotZGFyd2luMS5bMDEyXSkKLQkgICMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JICBuZXdkZXBsaWJzPWAkZWNobyAiWCAkbmV3ZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJICAjIE9uIFJoYXBzb2R5IHJlcGxhY2UgdGhlIEMgbGlicmFyeSB3aXRoIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCisJICBuZXdkZXBsaWJzPWAkRUNITyAiICRuZXdkZXBsaWJzIiB8ICRTRUQgJ3MvIC1sYyAvIFN5c3RlbS5sdGZyYW1ld29yayAvJ2AKIAkgIDs7CiAJZXNhYwogCiAJaWYgdGVzdCAiJGRyb3BwZWRkZXBzIiA9IHllczsgdGhlbgogCSAgaWYgdGVzdCAiJG1vZHVsZSIgPSB5ZXM7IHRoZW4KLQkgICAgJGVjaG8KLQkgICAgJGVjaG8gIioqKiBXYXJuaW5nOiBsaWJ0b29sIGNvdWxkIG5vdCBzYXRpc2Z5IGFsbCBkZWNsYXJlZCBpbnRlci1saWJyYXJ5IgotCSAgICAkZWNobyAiKioqIGRlcGVuZGVuY2llcyBvZiBtb2R1bGUgJGxpYm5hbWUuICBUaGVyZWZvcmUsIGxpYnRvb2wgd2lsbCBjcmVhdGUiCi0JICAgICRlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKLQkgICAgJGVjaG8gIioqKiBhcHBsaWNhdGlvbiBpcyBsaW5rZWQgd2l0aCB0aGUgLWRsb3BlbiBmbGFnLiIKKwkgICAgZWNobworCSAgICBlY2hvICIqKiogV2FybmluZzogbGlidG9vbCBjb3VsZCBub3Qgc2F0aXNmeSBhbGwgZGVjbGFyZWQgaW50ZXItbGlicmFyeSIKKwkgICAgJEVDSE8gIioqKiBkZXBlbmRlbmNpZXMgb2YgbW9kdWxlICRsaWJuYW1lLiAgVGhlcmVmb3JlLCBsaWJ0b29sIHdpbGwgY3JlYXRlIgorCSAgICBlY2hvICIqKiogYSBzdGF0aWMgbW9kdWxlLCB0aGF0IHNob3VsZCB3b3JrIGFzIGxvbmcgYXMgdGhlIGRsb3BlbmluZyIKKwkgICAgZWNobyAiKioqIGFwcGxpY2F0aW9uIGlzIGxpbmtlZCB3aXRoIHRoZSAtZGxvcGVuIGZsYWcuIgogCSAgICBpZiB0ZXN0IC16ICIkZ2xvYmFsX3N5bWJvbF9waXBlIjsgdGhlbgotCSAgICAgICRlY2hvCi0JICAgICAgJGVjaG8gIioqKiBIb3dldmVyLCB0aGlzIHdvdWxkIG9ubHkgd29yayBpZiBsaWJ0b29sIHdhcyBhYmxlIHRvIGV4dHJhY3Qgc3ltYm9sIgotCSAgICAgICRlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgotCSAgICAgICRlY2hvICIqKiogbm90IGZpbmQgc3VjaCBhIHByb2dyYW0uICBTbywgdGhpcyBtb2R1bGUgaXMgcHJvYmFibHkgdXNlbGVzcy4iCi0JICAgICAgJGVjaG8gIioqKiBcYG5tJyBmcm9tIEdOVSBiaW51dGlscyBhbmQgYSBmdWxsIHJlYnVpbGQgbWF5IGhlbHAuIgorCSAgICAgIGVjaG8KKwkgICAgICBlY2hvICIqKiogSG93ZXZlciwgdGhpcyB3b3VsZCBvbmx5IHdvcmsgaWYgbGlidG9vbCB3YXMgYWJsZSB0byBleHRyYWN0IHN5bWJvbCIKKwkgICAgICBlY2hvICIqKiogbGlzdHMgZnJvbSBhIHByb2dyYW0sIHVzaW5nIFxgbm0nIG9yIGVxdWl2YWxlbnQsIGJ1dCBsaWJ0b29sIGNvdWxkIgorCSAgICAgIGVjaG8gIioqKiBub3QgZmluZCBzdWNoIGEgcHJvZ3JhbS4gIFNvLCB0aGlzIG1vZHVsZSBpcyBwcm9iYWJseSB1c2VsZXNzLiIKKwkgICAgICBlY2hvICIqKiogXGBubScgZnJvbSBHTlUgYmludXRpbHMgYW5kIGEgZnVsbCByZWJ1aWxkIG1heSBoZWxwLiIKIAkgICAgZmkKIAkgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCiAJICAgICAgb2xkbGlicz0iJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuJGxpYmV4dCIKQEAgLTM4NTIsMTYgKzc5NTUsMTYgQEAKIAkgICAgICBidWlsZF9saWJ0b29sX2xpYnM9bm8KIAkgICAgZmkKIAkgIGVsc2UKLQkgICAgJGVjaG8gIioqKiBUaGUgaW50ZXItbGlicmFyeSBkZXBlbmRlbmNpZXMgdGhhdCBoYXZlIGJlZW4gZHJvcHBlZCBoZXJlIHdpbGwgYmUiCi0JICAgICRlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgotCSAgICAkZWNobyAiKioqIG9yIGlzIGRlY2xhcmVkIHRvIC1kbG9wZW4gaXQuIgorCSAgICBlY2hvICIqKiogVGhlIGludGVyLWxpYnJhcnkgZGVwZW5kZW5jaWVzIHRoYXQgaGF2ZSBiZWVuIGRyb3BwZWQgaGVyZSB3aWxsIGJlIgorCSAgICBlY2hvICIqKiogYXV0b21hdGljYWxseSBhZGRlZCB3aGVuZXZlciBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggdGhpcyBsaWJyYXJ5IgorCSAgICBlY2hvICIqKiogb3IgaXMgZGVjbGFyZWQgdG8gLWRsb3BlbiBpdC4iCiAKIAkgICAgaWYgdGVzdCAiJGFsbG93X3VuZGVmaW5lZCIgPSBubzsgdGhlbgotCSAgICAgICRlY2hvCi0JICAgICAgJGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCi0JICAgICAgJGVjaG8gIioqKiBiZWNhdXNlIGVpdGhlciB0aGUgcGxhdGZvcm0gZG9lcyBub3Qgc3VwcG9ydCB0aGVtIG9yIgotCSAgICAgICRlY2hvICIqKiogaXQgd2FzIGV4cGxpY2l0bHkgcmVxdWVzdGVkIHdpdGggLW5vLXVuZGVmaW5lZCwiCi0JICAgICAgJGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCisJICAgICAgZWNobworCSAgICAgIGVjaG8gIioqKiBTaW5jZSB0aGlzIGxpYnJhcnkgbXVzdCBub3QgY29udGFpbiB1bmRlZmluZWQgc3ltYm9scywiCisJICAgICAgZWNobyAiKioqIGJlY2F1c2UgZWl0aGVyIHRoZSBwbGF0Zm9ybSBkb2VzIG5vdCBzdXBwb3J0IHRoZW0gb3IiCisJICAgICAgZWNobyAiKioqIGl0IHdhcyBleHBsaWNpdGx5IHJlcXVlc3RlZCB3aXRoIC1uby11bmRlZmluZWQsIgorCSAgICAgIGVjaG8gIioqKiBsaWJ0b29sIHdpbGwgb25seSBjcmVhdGUgYSBzdGF0aWMgdmVyc2lvbiBvZiBpdC4iCiAJICAgICAgaWYgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IG5vOyB0aGVuCiAJCW9sZGxpYnM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLiRsaWJleHQiCiAJCWJ1aWxkX2xpYnRvb2xfbGlicz1tb2R1bGUKQEAgLTM4NzUsNyArNzk3OCwxNCBAQAogCSMgRG9uZSBjaGVja2luZyBkZXBsaWJzIQogCWRlcGxpYnM9JG5ld2RlcGxpYnMKICAgICAgIGZpCi0KKyAgICAgICMgVGltZSB0byBjaGFuZ2UgYWxsIG91ciAiZm9vLmx0ZnJhbWV3b3JrIiBzdHVmZiBiYWNrIHRvICItZnJhbWV3b3JrIGZvbyIKKyAgICAgIGNhc2UgJGhvc3QgaW4KKwkqLSotZGFyd2luKikKKwkgIG5ld2RlcGxpYnM9YCRFQ0hPICIgJG5ld2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwkgIG5ld19pbmhlcml0ZWRfbGlua2VyX2ZsYWdzPWAkRUNITyAiICRuZXdfaW5oZXJpdGVkX2xpbmtlcl9mbGFncyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgZGVwbGlicz1gJEVDSE8gIiAkZGVwbGlicyIgfCAkU0VEICdzJSBcKFteICRdKlwpLmx0ZnJhbWV3b3JrJSAtZnJhbWV3b3JrIFwxJWcnYAorCSAgOzsKKyAgICAgIGVzYWMKIAogICAgICAgIyBtb3ZlIGxpYnJhcnkgc2VhcmNoIHBhdGhzIHRoYXQgY29pbmNpZGUgd2l0aCBwYXRocyB0byBub3QgeWV0CiAgICAgICAjIGluc3RhbGxlZCBsaWJyYXJpZXMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbGlicmFyeSBzZWFyY2ggbGlzdApAQCAtMzg4Niw3ICs3OTk2LDcgQEAKIAkqKQogCSAgY2FzZSAiICRkZXBsaWJzICIgaW4KIAkgICoiIC1MJHBhdGgvJG9iamRpciAiKikKLQkgICAgbmV3X2xpYnM9IiRuZXdfbGlicyAtTCRwYXRoLyRvYmpkaXIiIDs7CisJICAgIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgLUwkcGF0aC8kb2JqZGlyIiA7OwogCSAgZXNhYwogCSAgOzsKIAllc2FjCkBAIC0zODk2LDE1ICs4MDA2LDE0IEBACiAJLUwqKQogCSAgY2FzZSAiICRuZXdfbGlicyAiIGluCiAJICAqIiAkZGVwbGliICIqKSA7OwotCSAgKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSAgKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwogCSAgZXNhYwogCSAgOzsKLQkqKSBuZXdfbGlicz0iJG5ld19saWJzICRkZXBsaWIiIDs7CisJKikgZnVuY19hcHBlbmQgbmV3X2xpYnMgIiAkZGVwbGliIiA7OwogCWVzYWMKICAgICAgIGRvbmUKICAgICAgIGRlcGxpYnM9IiRuZXdfbGlicyIKIAotCiAgICAgICAjIEFsbCB0aGUgbGlicmFyeS1zcGVjaWZpYyB2YXJpYWJsZXMgKGluc3RhbGxfbGliZGlyIGlzIHNldCBhYm92ZSkuCiAgICAgICBsaWJyYXJ5X25hbWVzPQogICAgICAgb2xkX2xpYnJhcnk9CkBAIC0zOTE3LDEwICs4MDI2LDEyIEBACiAJICBoYXJkY29kZV9saWJkaXJzPQogCSAgZGVwX3JwYXRoPQogCSAgcnBhdGg9IiRmaW5hbGl6ZV9ycGF0aCIKLQkgIHRlc3QgIiRtb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgorCSAgdGVzdCAiJG9wdF9tb2RlIiAhPSByZWxpbmsgJiYgcnBhdGg9IiRjb21waWxlX3JwYXRoJHJwYXRoIgogCSAgZm9yIGxpYmRpciBpbiAkcnBhdGg7IGRvCiAJICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIjsgdGhlbgogCSAgICAgIGlmIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIjsgdGhlbgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGxpYmRpciIKKwkJbGliZGlyPSRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQKIAkJaWYgdGVzdCAteiAiJGhhcmRjb2RlX2xpYmRpcnMiOyB0aGVuCiAJCSAgaGFyZGNvZGVfbGliZGlycz0iJGxpYmRpciIKIAkJZWxzZQpAQCAtMzkyOSwxOCArODA0MCwxOCBAQAogCQkgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKIAkJICAgIDs7CiAJCSAgKikKLQkJICAgIGhhcmRjb2RlX2xpYmRpcnM9IiRoYXJkY29kZV9saWJkaXJzJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgorCQkgICAgZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgogCQkgICAgOzsKIAkJICBlc2FjCiAJCWZpCiAJICAgICAgZWxzZQogCQlldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0JCWRlcF9ycGF0aD0iJGRlcF9ycGF0aCAkZmxhZyIKKwkJZnVuY19hcHBlbmQgZGVwX3JwYXRoICIgJGZsYWciCiAJICAgICAgZmkKIAkgICAgZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCiAJICAgICAgY2FzZSAiJHBlcm1fcnBhdGggIiBpbgogCSAgICAgICoiICRsaWJkaXIgIiopIDs7Ci0JICAgICAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICAgICAqKSBmdW5jX2FwcGVuZCBwZXJtX3JwYXRoICIgJGxpYmRpciIgOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCiAJICBkb25lCkBAIC0zOTQ5LDEwICs4MDYwLDcgQEAKIAkgICAgIHRlc3QgLW4gIiRoYXJkY29kZV9saWJkaXJzIjsgdGhlbgogCSAgICBsaWJkaXI9IiRoYXJkY29kZV9saWJkaXJzIgogCSAgICBpZiB0ZXN0IC1uICIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCI7IHRoZW4KLQkgICAgICBjYXNlICRhcmNoaXZlX2NtZHMgaW4KLQkgICAgICAqXCRMRCopIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIiA7OwotCSAgICAgICopICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiIDs7Ci0JICAgICAgZXNhYworCSAgICAgIGV2YWwgZGVwX3JwYXRoPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNfbGRcIgogCSAgICBlbHNlCiAJICAgICAgZXZhbCBkZXBfcnBhdGg9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCiAJICAgIGZpCkBAIC0zOTYxLDcgKzgwNjksNyBAQAogCSAgICAjIFdlIHNob3VsZCBzZXQgdGhlIHJ1bnBhdGhfdmFyLgogCSAgICBycGF0aD0KIAkgICAgZm9yIGRpciBpbiAkcGVybV9ycGF0aDsgZG8KLQkgICAgICBycGF0aD0iJHJwYXRoJGRpcjoiCisJICAgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgogCSAgICBkb25lCiAJICAgIGV2YWwgIiRydW5wYXRoX3Zhcj0nJHJwYXRoXCQkcnVucGF0aF92YXInOyBleHBvcnQgJHJ1bnBhdGhfdmFyIgogCSAgZmkKQEAgLTM5NjksNyArODA3Nyw3IEBACiAJZmkKIAogCXNobGlicGF0aD0iJGZpbmFsaXplX3NobGlicGF0aCIKLQl0ZXN0ICIkbW9kZSIgIT0gcmVsaW5rICYmIHNobGlicGF0aD0iJGNvbXBpbGVfc2hsaWJwYXRoJHNobGlicGF0aCIKKwl0ZXN0ICIkb3B0X21vZGUiICE9IHJlbGluayAmJiBzaGxpYnBhdGg9IiRjb21waWxlX3NobGlicGF0aCRzaGxpYnBhdGgiCiAJaWYgdGVzdCAtbiAiJHNobGlicGF0aCI7IHRoZW4KIAkgIGV2YWwgIiRzaGxpYnBhdGhfdmFyPSckc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3Zhcic7IGV4cG9ydCAkc2hsaWJwYXRoX3ZhciIKIAlmaQpAQCAtMzk3OCw4ICs4MDg2LDkgQEAKIAlldmFsIHNoYXJlZF9leHQ9XCIkc2hyZXh0X2NtZHNcIgogCWV2YWwgbGlicmFyeV9uYW1lcz1cIiRsaWJyYXJ5X25hbWVzX3NwZWNcIgogCXNldCBkdW1teSAkbGlicmFyeV9uYW1lcwotCXJlYWxuYW1lPSIkMiIKLQlzaGlmdDsgc2hpZnQKKwlzaGlmdAorCXJlYWxuYW1lPSIkMSIKKwlzaGlmdAogCiAJaWYgdGVzdCAtbiAiJHNvbmFtZV9zcGVjIjsgdGhlbgogCSAgZXZhbCBzb25hbWU9XCIkc29uYW1lX3NwZWNcIgpAQCAtMzk5NCw4MyArODEwMywxNjYgQEAKIAlsaW5rbmFtZXM9CiAJZm9yIGxpbmsKIAlkbwotCSAgbGlua25hbWVzPSIkbGlua25hbWVzICRsaW5rIgorCSAgZnVuY19hcHBlbmQgbGlua25hbWVzICIgJGxpbmsiCiAJZG9uZQogCiAJIyBVc2Ugc3RhbmRhcmQgb2JqZWN0cyBpZiB0aGV5IGFyZSBwaWMKLQl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRlY2hvICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKKwl0ZXN0IC16ICIkcGljX2ZsYWciICYmIGxpYm9ianM9YCRFQ0hPICIkbGlib2JqcyIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCisJdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKworCWRlbGZpbGVzPQorCWlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9scyIgJiYgdGVzdCAtbiAiJGluY2x1ZGVfZXhwc3ltcyI7IHRoZW4KKwkgICRvcHRfZHJ5X3J1biB8fCBjcCAiJGV4cG9ydF9zeW1ib2xzIiAiJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudWV4cCIKKwkgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS51ZXhwIgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMiCisJZmkKKworCW9yaWdfZXhwb3J0X3N5bWJvbHM9CisJY2FzZSAkaG9zdF9vcyBpbgorCWN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisJICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9sc19yZWdleCI7IHRoZW4KKwkgICAgIyBleHBvcnRpbmcgdXNpbmcgdXNlciBzdXBwbGllZCBzeW1maWxlCisJICAgIGlmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiAhPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICMgYW5kIGl0J3MgTk9UIGFscmVhZHkgYSAuZGVmIGZpbGUuIE11c3QgZmlndXJlIG91dAorCSAgICAgICMgd2hpY2ggb2YgdGhlIGdpdmVuIHN5bWJvbHMgYXJlIGRhdGEgc3ltYm9scyBhbmQgdGFnCisJICAgICAgIyB0aGVtIGFzIHN1Y2guIFNvLCB0cmlnZ2VyIHVzZSBvZiBleHBvcnRfc3ltYm9sc19jbWRzLgorCSAgICAgICMgZXhwb3J0X3N5bWJvbHMgZ2V0cyByZWFzc2lnbmVkIGluc2lkZSB0aGUgInByZXBhcmUKKwkgICAgICAjIHRoZSBsaXN0IG9mIGV4cG9ydGVkIHN5bWJvbHMiIGlmIHN0YXRlbWVudCwgc28gdGhlCisJICAgICAgIyBpbmNsdWRlX2V4cHN5bXMgbG9naWMgc3RpbGwgd29ya3MuCisJICAgICAgb3JpZ19leHBvcnRfc3ltYm9scz0iJGV4cG9ydF9zeW1ib2xzIgorCSAgICAgIGV4cG9ydF9zeW1ib2xzPQorCSAgICAgIGFsd2F5c19leHBvcnRfc3ltYm9scz15ZXMKKwkgICAgZmkKKwkgIGZpCisJICA7OworCWVzYWMKIAogCSMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCiAJaWYgdGVzdCAteiAiJGV4cG9ydF9zeW1ib2xzIjsgdGhlbgogCSAgaWYgdGVzdCAiJGFsd2F5c19leHBvcnRfc3ltYm9scyIgPSB5ZXMgfHwgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzX3JlZ2V4IjsgdGhlbgotCSAgICAkc2hvdyAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCiAJICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCi0JICAgICRydW4gJHJtICRleHBvcnRfc3ltYm9scworCSAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scwogCSAgICBjbWRzPSRleHBvcnRfc3ltYm9sc19jbWRzCiAJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgICBmb3IgY21kIGluICRjbWRzOyBkbworCSAgICBmb3IgY21kMSBpbiAkY21kczsgZG8KIAkgICAgICBJRlM9IiRzYXZlX2lmcyIKLQkgICAgICBldmFsIGNtZD1cIiRjbWRcIgotCSAgICAgIGlmIGxlbj1gZXhwciAiWCRjbWQiIDogIi4qImAgJiYKLQkgICAgICAgdGVzdCAiJGxlbiIgLWxlICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCi0JICAgICAgICAkc2hvdyAiJGNtZCIKLQkgICAgICAgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotCSAgICAgICAgc2tpcHBlZF9leHBvcnQ9ZmFsc2UKKwkgICAgICAjIFRha2UgdGhlIG5vcm1hbCBicmFuY2ggaWYgdGhlIG5tX2ZpbGVfbGlzdF9zcGVjIGJyYW5jaAorCSAgICAgICMgZG9lc24ndCB3b3JrIG9yIGlmIHRvb2wgY29udmVyc2lvbiBpcyBub3QgbmVlZGVkLgorCSAgICAgIGNhc2UgJG5tX2ZpbGVfbGlzdF9zcGVjfiR0b190b29sX2ZpbGVfY21kIGluCisJCSp+ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcCB8ICp+ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIgfCB+KikKKwkJICB0cnlfbm9ybWFsX2JyYW5jaD15ZXMKKwkJICBldmFsIGNtZD1cIiRjbWQxXCIKKwkJICBmdW5jX2xlbiAiICRjbWQiCisJCSAgbGVuPSRmdW5jX2xlbl9yZXN1bHQKKwkJICA7OworCQkqKQorCQkgIHRyeV9ub3JtYWxfYnJhbmNoPW5vCisJCSAgOzsKKwkgICAgICBlc2FjCisJICAgICAgaWYgdGVzdCAiJHRyeV9ub3JtYWxfYnJhbmNoIiA9IHllcyBcCisJCSAmJiB7IHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiBcCisJCSAgICAgIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB9CisJICAgICAgdGhlbgorCQlmdW5jX3Nob3dfZXZhbCAiJGNtZCIgJ2V4aXQgJD8nCisJCXNraXBwZWRfZXhwb3J0PWZhbHNlCisJICAgICAgZWxpZiB0ZXN0IC1uICIkbm1fZmlsZV9saXN0X3NwZWMiOyB0aGVuCisJCWZ1bmNfYmFzZW5hbWUgIiRvdXRwdXQiCisJCW91dHB1dF9sYT0kZnVuY19iYXNlbmFtZV9yZXN1bHQKKwkJc2F2ZV9saWJvYmpzPSRsaWJvYmpzCisJCXNhdmVfb3V0cHV0PSRvdXRwdXQKKwkJb3V0cHV0PSR7b3V0cHV0X29iamRpcn0vJHtvdXRwdXRfbGF9Lm5tCisJCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCQlsaWJvYmpzPSRubV9maWxlX2xpc3Rfc3BlYyRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQKKwkJZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCQlmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICROTSBpbnB1dCBmaWxlIGxpc3Q6ICRvdXRwdXQiCisJCWZvciBvYmogaW4gJHNhdmVfbGlib2JqczsgZG8KKwkJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG9iaiIKKwkJICAkRUNITyAiJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKKwkJZG9uZSA+ICIkb3V0cHV0IgorCQlldmFsIGNtZD1cIiRjbWQxXCIKKwkJZnVuY19zaG93X2V2YWwgIiRjbWQiICdleGl0ICQ/JworCQlvdXRwdXQ9JHNhdmVfb3V0cHV0CisJCWxpYm9ianM9JHNhdmVfbGlib2JqcworCQlza2lwcGVkX2V4cG9ydD1mYWxzZQogCSAgICAgIGVsc2UKLQkgICAgICAgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBleGVjdXRlIGluIG9uZSBzdGVwLgotCSAgICAgICAgJHNob3cgInVzaW5nIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUgZm9yIGV4cG9ydCBsaXN0Li4uIgotCSAgICAgICAgc2tpcHBlZF9leHBvcnQ9OgorCQkjIFRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gZXhlY3V0ZSBpbiBvbmUgc3RlcC4KKwkJZnVuY192ZXJib3NlICJ1c2luZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlIGZvciBleHBvcnQgbGlzdC4uLiIKKwkJc2tpcHBlZF9leHBvcnQ9OgogCQkjIEJyZWFrIG91dCBlYXJseSwgb3RoZXJ3aXNlIHNraXBwZWRfZXhwb3J0IG1heSBiZQogCQkjIHNldCB0byBmYWxzZSBieSBhIGxhdGVyIGJ1dCBzaG9ydGVyIGNtZC4KIAkJYnJlYWsKIAkgICAgICBmaQogCSAgICBkb25lCiAJICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgICAgJHNob3cgIiRFR1JFUCAtZSBcIiRleHBvcnRfc3ltYm9sc19yZWdleFwiIFwiJGV4cG9ydF9zeW1ib2xzXCIgPiBcIiR7ZXhwb3J0X3N5bWJvbHN9VFwiIgotCSAgICAgICRydW4gZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCi0JICAgICAgJHNob3cgIiRtdiBcIiR7ZXhwb3J0X3N5bWJvbHN9VFwiIFwiJGV4cG9ydF9zeW1ib2xzXCIiCi0JICAgICAgJHJ1biBldmFsICckbXYgIiR7ZXhwb3J0X3N5bWJvbHN9VCIgIiRleHBvcnRfc3ltYm9scyInCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IjsgdGhlbgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRleHBvcnRfc3ltYm9scyIgPiAiJHtleHBvcnRfc3ltYm9sc31UIicKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJE1WICIke2V4cG9ydF9zeW1ib2xzfVQiICIkZXhwb3J0X3N5bWJvbHMiJwogCSAgICBmaQogCSAgZmkKIAlmaQogCiAJaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkaW5jbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgJHJ1biBldmFsICckZWNobyAiWCRpbmNsdWRlX2V4cHN5bXMiIHwgJFNQMk5MID4+ICIkZXhwb3J0X3N5bWJvbHMiJworCSAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICB0ZXN0IC1uICIkb3JpZ19leHBvcnRfc3ltYm9scyIgJiYgdG1wX2V4cG9ydF9zeW1ib2xzPSIkb3JpZ19leHBvcnRfc3ltYm9scyIKKwkgICRvcHRfZHJ5X3J1biB8fCBldmFsICckRUNITyAiJGluY2x1ZGVfZXhwc3ltcyIgfCAkU1AyTkwgPj4gIiR0bXBfZXhwb3J0X3N5bWJvbHMiJworCWZpCisKKwlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmIHRlc3QgLW4gIiRvcmlnX2V4cG9ydF9zeW1ib2xzIjsgdGhlbgorCSAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICBmdW5jX3ZlcmJvc2UgImZpbHRlciBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYScgdG8gdGFnIERBVEEgZXhwb3J0cyIKKwkgICMgRklYTUU6ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlciBwb3RlbnRpYWxseSBjb250YWlucyBsb3RzIG9mCisJICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgIyB0aG91Z2guIEFsc28sIHRoZSBmaWx0ZXIgc2NhbGVzIHN1cGVybGluZWFybHkgd2l0aCB0aGUgbnVtYmVyIG9mCisJICAjIGdsb2JhbCB2YXJpYWJsZXMuIGpvaW4oMSkgd291bGQgYmUgbmljZSBoZXJlLCBidXQgdW5mb3J0dW5hdGVseQorCSAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICRvcHRfZHJ5X3J1biB8fCAkU0VEIC1lICcvWyAsXURBVEEvIWQ7cyxcKC4qXClcKFsgXCxdLipcKSxzfF5cMSR8XDFcMnwsJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmZpbHRlcgorCSAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIgorCSAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIgPCAkb3JpZ19leHBvcnRfc3ltYm9scyA+ICRleHBvcnRfc3ltYm9scwogCWZpCiAKIAl0bXBfZGVwbGlicz0KIAlmb3IgdGVzdF9kZXBsaWIgaW4gJGRlcGxpYnM7IGRvCi0JCWNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgotCQkqIiAkdGVzdF9kZXBsaWIgIiopIDs7Ci0JCSopCi0JCQl0bXBfZGVwbGlicz0iJHRtcF9kZXBsaWJzICR0ZXN0X2RlcGxpYiIKLQkJCTs7Ci0JCWVzYWMKKwkgIGNhc2UgIiAkY29udmVuaWVuY2UgIiBpbgorCSAgKiIgJHRlc3RfZGVwbGliICIqKSA7OworCSAgKikKKwkgICAgZnVuY19hcHBlbmQgdG1wX2RlcGxpYnMgIiAkdGVzdF9kZXBsaWIiCisJICAgIDs7CisJICBlc2FjCiAJZG9uZQogCWRlcGxpYnM9IiR0bXBfZGVwbGlicyIKIAogCWlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KKwkgIGlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyIgJiYKKwkgICAgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXMgJiYKKwkgICAgdGVzdCAteiAiJGxpYm9ianMiOyB0aGVuCisJICAgICMgZXh0cmFjdCB0aGUgYXJjaGl2ZXMsIHNvIHdlIGhhdmUgb2JqZWN0cyB0byBsaXN0LgorCSAgICAjIFRPRE86IGNvdWxkIG9wdGltaXplIHRoaXMgdG8ganVzdCBleHRyYWN0IG9uZSBhcmNoaXZlLgorCSAgICB3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYz0KKwkgIGZpCiAJICBpZiB0ZXN0IC1uICIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMiOyB0aGVuCiAJICAgIHNhdmVfbGlib2Jqcz0kbGlib2JqcwogCSAgICBldmFsIGxpYm9ianM9XCJcJGxpYm9ianMgJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjXCIKKwkgICAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KIAkgIGVsc2UKIAkgICAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKLQkgICAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisJICAgIGZ1bmNfYXBwZW5kIGdlbmVyYXRlZCAiICRnZW50b3AiCiAKIAkgICAgZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGNvbnZlbmllbmNlCi0JICAgIGxpYm9ianM9IiRsaWJvYmpzICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgICBmdW5jX2FwcGVuZCBsaWJvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CiAJICBmaQogCWZpCi0JCisKIAlpZiB0ZXN0ICIkdGhyZWFkX3NhZmUiID0geWVzICYmIHRlc3QgLW4gIiR0aHJlYWRfc2FmZV9mbGFnX3NwZWMiOyB0aGVuCiAJICBldmFsIGZsYWc9XCIkdGhyZWFkX3NhZmVfZmxhZ19zcGVjXCIKLQkgIGxpbmtlcl9mbGFncz0iJGxpbmtlcl9mbGFncyAkZmxhZyIKKwkgIGZ1bmNfYXBwZW5kIGxpbmtlcl9mbGFncyAiICRmbGFnIgogCWZpCiAKIAkjIE1ha2UgYSBiYWNrdXAgb2YgdGhlIHVuaW5zdGFsbGVkIGxpYnJhcnkgd2hlbiByZWxpbmtpbmcKLQlpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KLQkgICRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVUgJiYgJG12ICRyZWFsbmFtZSAke3JlYWxuYW1lfVUpJyB8fCBleGl0ICQ/CisJaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkUk0gJHtyZWFsbmFtZX1VICYmICRNViAkcmVhbG5hbWUgJHtyZWFsbmFtZX1VKScgfHwgZXhpdCAkPwogCWZpCiAKIAkjIERvIGVhY2ggb2YgdGhlIGFyY2hpdmUgY29tbWFuZHMuCkBAIC00MDgzLDIyICs4Mjc1LDI0IEBACiAJICAgIGNtZHM9JG1vZHVsZV9jbWRzCiAJICBmaQogCWVsc2UKLQlpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCi0JICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCi0JZWxzZQotCSAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKLQkgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgaWYgdGVzdCAtbiAiJGV4cG9ydF9zeW1ib2xzIiAmJiB0ZXN0IC1uICIkYXJjaGl2ZV9leHBzeW1fY21kcyI7IHRoZW4KKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9leHBzeW1fY21kc1wiCisJICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgIGVsc2UKKwkgICAgZXZhbCB0ZXN0X2NtZHM9XCIkYXJjaGl2ZV9jbWRzXCIKKwkgICAgY21kcz0kYXJjaGl2ZV9jbWRzCiAJICBmaQogCWZpCiAKIAlpZiB0ZXN0ICJYJHNraXBwZWRfZXhwb3J0IiAhPSAiWDoiICYmCi0JICAgbGVuPWBleHByICJYJHRlc3RfY21kcyIgOiAiLioiIDI+L2Rldi9udWxsYCAmJgotCSAgIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgorCSAgIGZ1bmNfbGVuICIgJHRlc3RfY21kcyIgJiYKKwkgICBsZW49JGZ1bmNfbGVuX3Jlc3VsdCAmJgorCSAgIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIiB8fCB0ZXN0ICIkbWF4X2NtZF9sZW4iIC1sZSAtMTsgdGhlbgogCSAgOgogCWVsc2UKLQkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZS4KLQkgICRlY2hvICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICMgVGhlIGNvbW1hbmQgbGluZSBpcyB0b28gbG9uZyB0byBsaW5rIGluIG9uZSBzdGVwLCBsaW5rIHBpZWNld2lzZQorCSAgIyBvciwgaWYgdXNpbmcgR05VIGxkIGFuZCBza2lwcGVkX2V4cG9ydCBpcyBub3QgOiwgdXNlIGEgbGlua2VyCisJICAjIHNjcmlwdC4KIAogCSAgIyBTYXZlIHRoZSB2YWx1ZSBvZiAkb3V0cHV0IGFuZCAkbGlib2JqcyBiZWNhdXNlIHdlIHdhbnQgdG8KIAkgICMgdXNlIHRoZW0gbGF0ZXIuICBJZiB3ZSBoYXZlIHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCB3ZQpAQCAtNDExMiw3NyArODMwNiwxNzEgQEAKIAkgICAgc2F2ZV9saWJvYmpzPSRsaWJvYmpzCiAJICBmaQogCSAgc2F2ZV9vdXRwdXQ9JG91dHB1dAotCSAgb3V0cHV0X2xhPWAkZWNobyAiWCRvdXRwdXQiIHwgJFhzZWQgLWUgIiRiYXNlbmFtZSJgCisJICBmdW5jX2Jhc2VuYW1lICIkb3V0cHV0IgorCSAgb3V0cHV0X2xhPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAogCiAJICAjIENsZWFyIHRoZSByZWxvYWRhYmxlIG9iamVjdCBjcmVhdGlvbiBjb21tYW5kIHF1ZXVlIGFuZAogCSAgIyBpbml0aWFsaXplIGsgdG8gb25lLgogCSAgdGVzdF9jbWRzPQogCSAgY29uY2F0X2NtZHM9CiAJICBvYmpsaXN0PQotCSAgZGVsZmlsZXM9CiAJICBsYXN0X3JvYmo9CiAJICBrPTEKLQkgIG91dHB1dD0kb3V0cHV0X29iamRpci8kb3V0cHV0X2xhLSR7a30uJG9iamV4dAotCSAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCi0JICBmb3Igb2JqIGluICRzYXZlX2xpYm9ianMKLQkgIGRvCi0JICAgIGV2YWwgdGVzdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgotCSAgICBpZiB0ZXN0ICJYJG9iamxpc3QiID0gWCB8fAotCSAgICAgICB7IGxlbj1gZXhwciAiWCR0ZXN0X2NtZHMiIDogIi4qIiAyPi9kZXYvbnVsbGAgJiYKLQkJIHRlc3QgIiRsZW4iIC1sZSAiJG1heF9jbWRfbGVuIjsgfTsgdGhlbgotCSAgICAgIG9iamxpc3Q9IiRvYmpsaXN0ICRvYmoiCi0JICAgIGVsc2UKLQkgICAgICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQotCSAgICAgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCi0JICAgICAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgotCQkjIFRoZSBmaXJzdCBmaWxlIGRvZXNuJ3QgaGF2ZSBhIHByZXZpb3VzIGNvbW1hbmQgdG8gYWRkLgotCQlldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgotCSAgICAgIGVsc2UKLQkJIyBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdCBmaWxlcyB3aWxsIGxpbmsgaW4KLQkJIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KLQkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzICRvYmpsaXN0ICRsYXN0X3JvYmpcIgotCSAgICAgIGZpCi0JICAgICAgbGFzdF9yb2JqPSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0Ci0JICAgICAgaz1gZXhwciAkayArIDFgCi0JICAgICAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0Ci0JICAgICAgb2JqbGlzdD0kb2JqCi0JICAgICAgbGVuPTEKKworCSAgaWYgdGVzdCAtbiAiJHNhdmVfbGlib2JqcyIgJiYgdGVzdCAiWCRza2lwcGVkX2V4cG9ydCIgIT0gIlg6IiAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisJICAgIG91dHB1dD0ke291dHB1dF9vYmpkaXJ9LyR7b3V0cHV0X2xhfS5sbmtzY3JpcHQKKwkgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyBHTlUgbGQgc2NyaXB0OiAkb3V0cHV0IgorCSAgICBlY2hvICdJTlBVVCAoJyA+ICRvdXRwdXQKKwkgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgIGRvCisJICAgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICAgJEVDSE8gIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiID4+ICRvdXRwdXQKKwkgICAgZG9uZQorCSAgICBlY2hvICcpJyA+PiAkb3V0cHV0CisJICAgIGZ1bmNfYXBwZW5kIGRlbGZpbGVzICIgJG91dHB1dCIKKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXQiCisJICAgIG91dHB1dD0kZnVuY190b190b29sX2ZpbGVfcmVzdWx0CisJICBlbGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiICYmIHRlc3QgIlgkc2tpcHBlZF9leHBvcnQiICE9ICJYOiIgJiYgdGVzdCAiWCRmaWxlX2xpc3Rfc3BlYyIgIT0gWDsgdGhlbgorCSAgICBvdXRwdXQ9JHtvdXRwdXRfb2JqZGlyfS8ke291dHB1dF9sYX0ubG5rCisJICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgbGlua2VyIGlucHV0IGZpbGUgbGlzdDogJG91dHB1dCIKKwkgICAgOiA+ICRvdXRwdXQKKwkgICAgc2V0IHggJHNhdmVfbGlib2JqcworCSAgICBzaGlmdAorCSAgICBmaXJzdG9iaj0KKwkgICAgaWYgdGVzdCAiJGNvbXBpbGVyX25lZWRzX29iamVjdCIgPSB5ZXM7IHRoZW4KKwkgICAgICBmaXJzdG9iaj0iJDEgIgorCSAgICAgIHNoaWZ0CiAJICAgIGZpCi0JICBkb25lCi0JICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKLQkgICMgcmVsb2FkYWJsZSBvYmplY3QgZmlsZS4gIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0Ci0JICAjIGZpbGVzIHdpbGwgbGluayBpbiB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KLQkgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgotCSAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRyZWxvYWRfY21kcyAkb2JqbGlzdCAkbGFzdF9yb2JqXCIKKwkgICAgZm9yIG9iagorCSAgICBkbworCSAgICAgIGZ1bmNfdG9fdG9vbF9maWxlICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IiA+PiAkb3V0cHV0CisJICAgIGRvbmUKKwkgICAgZnVuY19hcHBlbmQgZGVsZmlsZXMgIiAkb3V0cHV0IgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgICAgb3V0cHV0PSRmaXJzdG9ialwiJGZpbGVfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdFwiCisJICBlbHNlCisJICAgIGlmIHRlc3QgLW4gIiRzYXZlX2xpYm9ianMiOyB0aGVuCisJICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyByZWxvYWRhYmxlIG9iamVjdCBmaWxlcy4uLiIKKwkgICAgICBvdXRwdXQ9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkgICAgICBldmFsIHRlc3RfY21kcz1cIiRyZWxvYWRfY21kc1wiCisJICAgICAgZnVuY19sZW4gIiAkdGVzdF9jbWRzIgorCSAgICAgIGxlbjA9JGZ1bmNfbGVuX3Jlc3VsdAorCSAgICAgIGxlbj0kbGVuMAogCi0JICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgotCSAgICAkc2hvdyAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCi0JICAgIGV4cG9ydF9zeW1ib2xzPSIkb3V0cHV0X29iamRpci8kbGlibmFtZS5leHAiCi0JICAgICRydW4gJHJtICRleHBvcnRfc3ltYm9scwotCSAgICBsaWJvYmpzPSRvdXRwdXQKLQkgICAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gY3JlYXRlIHRoZSBleHBvcnQgZmlsZS4KLQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JGV4cG9ydF9zeW1ib2xzX2NtZHNcIgotICAgICAgICAgIGZpCisJICAgICAgIyBMb29wIG92ZXIgdGhlIGxpc3Qgb2Ygb2JqZWN0cyB0byBiZSBsaW5rZWQuCisJICAgICAgZm9yIG9iaiBpbiAkc2F2ZV9saWJvYmpzCisJICAgICAgZG8KKwkJZnVuY19sZW4gIiAkb2JqIgorCQlmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJCWxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkJaWYgdGVzdCAiWCRvYmpsaXN0IiA9IFggfHwKKwkJICAgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iOyB0aGVuCisJCSAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJCWVsc2UKKwkJICAjIFRoZSBjb21tYW5kICR0ZXN0X2NtZHMgaXMgYWxtb3N0IHRvbyBsb25nLCBhZGQgYQorCQkgICMgY29tbWFuZCB0byB0aGUgcXVldWUuCisJCSAgaWYgdGVzdCAiJGsiIC1lcSAxIDsgdGhlbgorCQkgICAgIyBUaGUgZmlyc3QgZmlsZSBkb2Vzbid0IGhhdmUgYSBwcmV2aW91cyBjb21tYW5kIHRvIGFkZC4KKwkJICAgIHJlbG9hZF9vYmpzPSRvYmpsaXN0CisJCSAgICBldmFsIGNvbmNhdF9jbWRzPVwiJHJlbG9hZF9jbWRzXCIKKwkJICBlbHNlCisJCSAgICAjIEFsbCBzdWJzZXF1ZW50IHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzIHdpbGwgbGluayBpbgorCQkgICAgIyB0aGUgbGFzdCBvbmUgY3JlYXRlZC4KKwkJICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCQkgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+JHJlbG9hZF9jbWRzflwkUk0gJGxhc3Rfcm9ialwiCisJCSAgZmkKKwkJICBsYXN0X3JvYmo9JG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2t9LiRvYmpleHQKKwkJICBmdW5jX2FyaXRoICRrICsgMQorCQkgIGs9JGZ1bmNfYXJpdGhfcmVzdWx0CisJCSAgb3V0cHV0PSRvdXRwdXRfb2JqZGlyLyRvdXRwdXRfbGEtJHtrfS4kb2JqZXh0CisJCSAgb2JqbGlzdD0iICRvYmoiCisJCSAgZnVuY19sZW4gIiAkbGFzdF9yb2JqIgorCQkgIGZ1bmNfYXJpdGggJGxlbjAgKyAkZnVuY19sZW5fcmVzdWx0CisJCSAgbGVuPSRmdW5jX2FyaXRoX3Jlc3VsdAorCQlmaQorCSAgICAgIGRvbmUKKwkgICAgICAjIEhhbmRsZSB0aGUgcmVtYWluaW5nIG9iamVjdHMgYnkgY3JlYXRpbmcgb25lIGxhc3QKKwkgICAgICAjIHJlbG9hZGFibGUgb2JqZWN0IGZpbGUuICBBbGwgc3Vic2VxdWVudCByZWxvYWRhYmxlIG9iamVjdAorCSAgICAgICMgZmlsZXMgd2lsbCBsaW5rIGluIHRoZSBsYXN0IG9uZSBjcmVhdGVkLgorCSAgICAgIHRlc3QgLXogIiRjb25jYXRfY21kcyIgfHwgY29uY2F0X2NtZHM9JGNvbmNhdF9jbWRzfgorCSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqbGlzdCAkbGFzdF9yb2JqIgorCSAgICAgIGV2YWwgY29uY2F0X2NtZHM9XCJcJHtjb25jYXRfY21kc30kcmVsb2FkX2NtZHNcIgorCSAgICAgIGlmIHRlc3QgLW4gIiRsYXN0X3JvYmoiOyB0aGVuCisJICAgICAgICBldmFsIGNvbmNhdF9jbWRzPVwiXCR7Y29uY2F0X2NtZHN9flwkUk0gJGxhc3Rfcm9ialwiCisJICAgICAgZmkKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRvdXRwdXQiCiAKLQkgICMgU2V0IHVwIGEgY29tbWFuZCB0byByZW1vdmUgdGhlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzCi0JICAjIGFmdGVyIHRoZXkgYXJlIHVzZWQuCi0JICBpPTAKLQkgIHdoaWxlIHRlc3QgIiRpIiAtbHQgIiRrIgotCSAgZG8KLQkgICAgaT1gZXhwciAkaSArIDFgCi0JICAgIGRlbGZpbGVzPSIkZGVsZmlsZXMgJG91dHB1dF9vYmpkaXIvJG91dHB1dF9sYS0ke2l9LiRvYmpleHQiCi0JICBkb25lCisJICAgIGVsc2UKKwkgICAgICBvdXRwdXQ9CisJICAgIGZpCiAKLQkgICRlY2hvICJjcmVhdGluZyBhIHRlbXBvcmFyeSByZWxvYWRhYmxlIG9iamVjdCBmaWxlOiAkb3V0cHV0IgorCSAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkbGlibmFtZS5sYSciCisJICAgICAgZXhwb3J0X3N5bWJvbHM9IiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmV4cCIKKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFJNICRleHBvcnRfc3ltYm9scworCSAgICAgIGxpYm9ianM9JG91dHB1dAorCSAgICAgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIGNyZWF0ZSB0aGUgZXhwb3J0IGZpbGUuCisJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CisJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHMkZXhwb3J0X3N5bWJvbHNfY21kc1wiCisJICAgICAgaWYgdGVzdCAtbiAiJGxhc3Rfcm9iaiI7IHRoZW4KKwkJZXZhbCBjb25jYXRfY21kcz1cIlwkY29uY2F0X2NtZHN+XCRSTSAkbGFzdF9yb2JqXCIKKwkgICAgICBmaQorCSAgICBmaQogCi0JICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCi0JICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgIGZvciBjbWQgaW4gJGNvbmNhdF9jbWRzOyBkbworCSAgICB0ZXN0IC1uICIkc2F2ZV9saWJvYmpzIiAmJgorCSAgICAgIGZ1bmNfdmVyYm9zZSAiY3JlYXRpbmcgYSB0ZW1wb3JhcnkgcmVsb2FkYWJsZSBvYmplY3QgZmlsZTogJG91dHB1dCIKKworCSAgICAjIExvb3AgdGhyb3VnaCB0aGUgY29tbWFuZHMgZ2VuZXJhdGVkIGFib3ZlIGFuZCBleGVjdXRlIHRoZW0uCisJICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JworCSAgICBmb3IgY21kIGluICRjb25jYXRfY21kczsgZG8KKwkgICAgICBJRlM9IiRzYXZlX2lmcyIKKwkgICAgICAkb3B0X3NpbGVudCB8fCB7CisJCSAgZnVuY19xdW90ZV9mb3JfZXhwYW5kICIkY21kIgorCQkgIGV2YWwgImZ1bmNfZWNobyAkZnVuY19xdW90ZV9mb3JfZXhwYW5kX3Jlc3VsdCIKKwkgICAgICB9CisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKKwkJbHRfZXhpdD0kPworCisJCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAorCQlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJCSAgKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmIFwKKwkJICAgICRSTSAiJHtyZWFsbmFtZX1UIiAmJiBcCisJCSAgICAkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQorCQlmaQorCisJCWV4aXQgJGx0X2V4aXQKKwkgICAgICB9CisJICAgIGRvbmUKIAkgICAgSUZTPSIkc2F2ZV9pZnMiCi0JICAgICRzaG93ICIkY21kIgotCSAgICAkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLQkgIGRvbmUKLQkgIElGUz0iJHNhdmVfaWZzIgorCisJICAgIGlmIHRlc3QgLW4gIiRleHBvcnRfc3ltYm9sc19yZWdleCIgJiYgJHtza2lwcGVkX2V4cG9ydC1mYWxzZX07IHRoZW4KKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJEVHUkVQIC1lICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiICIkZXhwb3J0X3N5bWJvbHMiID4gIiR7ZXhwb3J0X3N5bWJvbHN9VCInCisJICAgICAgZnVuY19zaG93X2V2YWwgJyRNViAiJHtleHBvcnRfc3ltYm9sc31UIiAiJGV4cG9ydF9zeW1ib2xzIicKKwkgICAgZmkKKwkgIGZpCisKKyAgICAgICAgICBpZiAke3NraXBwZWRfZXhwb3J0LWZhbHNlfTsgdGhlbgorCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRpbmNsdWRlX2V4cHN5bXMiOyB0aGVuCisJICAgICAgdG1wX2V4cG9ydF9zeW1ib2xzPSIkZXhwb3J0X3N5bWJvbHMiCisJICAgICAgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiICYmIHRtcF9leHBvcnRfc3ltYm9scz0iJG9yaWdfZXhwb3J0X3N5bWJvbHMiCisJICAgICAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgJyRFQ0hPICIkaW5jbHVkZV9leHBzeW1zIiB8ICRTUDJOTCA+PiAiJHRtcF9leHBvcnRfc3ltYm9scyInCisJICAgIGZpCisKKwkgICAgaWYgdGVzdCAtbiAiJG9yaWdfZXhwb3J0X3N5bWJvbHMiOyB0aGVuCisJICAgICAgIyBUaGUgZ2l2ZW4gZXhwb3J0c19zeW1ib2xzIGZpbGUgaGFzIHRvIGJlIGZpbHRlcmVkLCBzbyBmaWx0ZXIgaXQuCisJICAgICAgZnVuY192ZXJib3NlICJmaWx0ZXIgc3ltYm9sIGxpc3QgZm9yIFxgJGxpYm5hbWUubGEnIHRvIHRhZyBEQVRBIGV4cG9ydHMiCisJICAgICAgIyBGSVhNRTogJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIHBvdGVudGlhbGx5IGNvbnRhaW5zIGxvdHMgb2YKKwkgICAgICAjICdzJyBjb21tYW5kcyB3aGljaCBub3QgYWxsIHNlZHMgY2FuIGhhbmRsZS4gR05VIHNlZCBzaG91bGQgYmUgZmluZQorCSAgICAgICMgdGhvdWdoLiBBbHNvLCB0aGUgZmlsdGVyIHNjYWxlcyBzdXBlcmxpbmVhcmx5IHdpdGggdGhlIG51bWJlciBvZgorCSAgICAgICMgZ2xvYmFsIHZhcmlhYmxlcy4gam9pbigxKSB3b3VsZCBiZSBuaWNlIGhlcmUsIGJ1dCB1bmZvcnR1bmF0ZWx5CisJICAgICAgIyBpc24ndCBhIGJsZXNzZWQgdG9vbC4KKwkgICAgICAkb3B0X2RyeV9ydW4gfHwgJFNFRCAtZSAnL1sgLF1EQVRBLyFkO3MsXCguKlwpXChbIFwsXS4qXCksc3xeXDEkfFwxXDJ8LCcgPCAkZXhwb3J0X3N5bWJvbHMgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIKKwkgICAgICBmdW5jX2FwcGVuZCBkZWxmaWxlcyAiICRleHBvcnRfc3ltYm9scyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5maWx0ZXIiCisJICAgICAgZXhwb3J0X3N5bWJvbHM9JG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmCisJICAgICAgJG9wdF9kcnlfcnVuIHx8ICRTRUQgLWYgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZmlsdGVyIDwgJG9yaWdfZXhwb3J0X3N5bWJvbHMgPiAkZXhwb3J0X3N5bWJvbHMKKwkgICAgZmkKKwkgIGZpCiAKIAkgIGxpYm9ianM9JG91dHB1dAogCSAgIyBSZXN0b3JlIHRoZSB2YWx1ZSBvZiBvdXRwdXQuCkBAIC00MTkwLDYgKzg0NzgsNyBAQAogCiAJICBpZiB0ZXN0IC1uICIkY29udmVuaWVuY2UiICYmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KIAkgICAgZXZhbCBsaWJvYmpzPVwiXCRsaWJvYmpzICR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY1wiCisJICAgIHRlc3QgIlgkbGlib2JqcyIgPSAiWCAiICYmIGxpYm9ianM9CiAJICBmaQogCSAgIyBFeHBhbmQgdGhlIGxpYnJhcnkgbGlua2luZyBjb21tYW5kcyBhZ2FpbiB0byByZXNldCB0aGUKIAkgICMgdmFsdWUgb2YgJGxpYm9ianMgZm9yIHBpZWNld2lzZSBsaW5raW5nLgpAQCAtNDIwMiwyOCArODQ5MSw0NSBAQAogCSAgICAgIGNtZHM9JG1vZHVsZV9jbWRzCiAJICAgIGZpCiAJICBlbHNlCi0JICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgotCSAgICBjbWRzPSRhcmNoaXZlX2V4cHN5bV9jbWRzCi0JICBlbHNlCi0JICAgIGNtZHM9JGFyY2hpdmVfY21kcworCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHMiICYmIHRlc3QgLW4gIiRhcmNoaXZlX2V4cHN5bV9jbWRzIjsgdGhlbgorCSAgICAgIGNtZHM9JGFyY2hpdmVfZXhwc3ltX2NtZHMKKwkgICAgZWxzZQorCSAgICAgIGNtZHM9JGFyY2hpdmVfY21kcwogCSAgICBmaQogCSAgZmkKLQotCSAgIyBBcHBlbmQgdGhlIGNvbW1hbmQgdG8gcmVtb3ZlIHRoZSByZWxvYWRhYmxlIG9iamVjdCBmaWxlcwotCSAgIyB0byB0aGUganVzdC1yZXNldCAkY21kcy4KLQkgIGV2YWwgY21kcz1cIlwkY21kc35cJHJtICRkZWxmaWxlc1wiCiAJZmkKKworCWlmIHRlc3QgLW4gIiRkZWxmaWxlcyI7IHRoZW4KKwkgICMgQXBwZW5kIHRoZSBjb21tYW5kIHRvIHJlbW92ZSB0ZW1wb3JhcnkgZmlsZXMgdG8gJGNtZHMuCisJICBldmFsIGNtZHM9XCJcJGNtZHN+XCRSTSAkZGVsZmlsZXNcIgorCWZpCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgZnVuY19hcHBlbmQgbGlib2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCSAgdGVzdCAiWCRsaWJvYmpzIiA9ICJYICIgJiYgbGlib2Jqcz0KKwlmaQorCiAJc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCiAJZm9yIGNtZCBpbiAkY21kczsgZG8KIAkgIElGUz0iJHNhdmVfaWZzIgogCSAgZXZhbCBjbWQ9XCIkY21kXCIKLQkgICRzaG93ICIkY21kIgotCSAgJHJ1biBldmFsICIkY21kIiB8fCB7CisJICAkb3B0X3NpbGVudCB8fCB7CisJICAgIGZ1bmNfcXVvdGVfZm9yX2V4cGFuZCAiJGNtZCIKKwkgICAgZXZhbCAiZnVuY19lY2hvICRmdW5jX3F1b3RlX2Zvcl9leHBhbmRfcmVzdWx0IgorCSAgfQorCSAgJG9wdF9kcnlfcnVuIHx8IGV2YWwgIiRjbWQiIHx8IHsKIAkgICAgbHRfZXhpdD0kPwogCiAJICAgICMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCSAgICBpZiB0ZXN0ICIkbW9kZSIgPSByZWxpbms7IHRoZW4KLQkgICAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJHtyZWFsbmFtZX1UICYmICRtdiAke3JlYWxuYW1lfVUgJHJlYWxuYW1lKScKKwkgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IHJlbGluazsgdGhlbgorCSAgICAgICggY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiBcCisJICAgICAgICAkUk0gIiR7cmVhbG5hbWV9VCIgJiYgXAorCQkkTVYgIiR7cmVhbG5hbWV9VSIgIiRyZWFsbmFtZSIgKQogCSAgICBmaQogCiAJICAgIGV4aXQgJGx0X2V4aXQKQEAgLTQyMzIsMTMgKzg1MzgsMTIgQEAKIAlJRlM9IiRzYXZlX2lmcyIKIAogCSMgUmVzdG9yZSB0aGUgdW5pbnN0YWxsZWQgbGlicmFyeSBhbmQgZXhpdAotCWlmIHRlc3QgIiRtb2RlIiA9IHJlbGluazsgdGhlbgotCSAgJHJ1biBldmFsICcoY2QgJG91dHB1dF9vYmpkaXIgJiYgJHJtICR7cmVhbG5hbWV9VCAmJiAkbXYgJHJlYWxuYW1lICR7cmVhbG5hbWV9VCAmJiAkbXYgIiRyZWFsbmFtZSJVICRyZWFsbmFtZSknIHx8IGV4aXQgJD8KKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gcmVsaW5rOyB0aGVuCisJICAkb3B0X2RyeV9ydW4gfHwgZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRSTSAke3JlYWxuYW1lfVQgJiYgJE1WICRyZWFsbmFtZSAke3JlYWxuYW1lfVQgJiYgJE1WICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJyB8fCBleGl0ICQ/CiAKIAkgIGlmIHRlc3QgLW4gIiRjb252ZW5pZW5jZSI7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjIjsgdGhlbgotCSAgICAgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKLQkgICAgICAkcnVuICR7cm19ciAiJGdlbnRvcCIKKwkgICAgICBmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKIAkgICAgZmkKIAkgIGZpCiAKQEAgLTQyNDgsOCArODU1Myw3IEBACiAJIyBDcmVhdGUgbGlua3MgdG8gdGhlIHJlYWwgbGlicmFyeS4KIAlmb3IgbGlua25hbWUgaW4gJGxpbmtuYW1lczsgZG8KIAkgIGlmIHRlc3QgIiRyZWFsbmFtZSIgIT0gIiRsaW5rbmFtZSI7IHRoZW4KLQkgICAgJHNob3cgIihjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpIgotCSAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWUpJyB8fCBleGl0ICQ/CisJICAgIGZ1bmNfc2hvd19ldmFsICcoY2QgIiRvdXRwdXRfb2JqZGlyIiAmJiAkUk0gIiRsaW5rbmFtZSIgJiYgJExOX1MgIiRyZWFsbmFtZSIgIiRsaW5rbmFtZSIpJyAnZXhpdCAkPycKIAkgIGZpCiAJZG9uZQogCkBAIC00MjYyLDM5ICs4NTY2LDM1IEBACiAgICAgICA7OwogCiAgICAgb2JqKQorICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KKwlmdW5jX3dhcm5pbmcgIlxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKKyAgICAgIGZpCisKICAgICAgIGNhc2UgIiAkZGVwbGlicyIgaW4KICAgICAgICpcIC1sKiB8ICpcIC1MKikKLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1sJyBhbmQgXGAtTCcgYXJlIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIgOzsKKwlmdW5jX3dhcm5pbmcgIlxgLWwnIGFuZCBcYC1MJyBhcmUgaWdub3JlZCBmb3Igb2JqZWN0cyIgOzsKICAgICAgIGVzYWMKIAotICAgICAgaWYgdGVzdCAtbiAiJGRsZmlsZXMkZGxwcmVmaWxlcyIgfHwgdGVzdCAiJGRsc2VsZiIgIT0gbm87IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYC1kbG9wZW4nIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkcnBhdGgiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJwYXRoJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkcnBhdGgiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcnBhdGgnIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkeHJwYXRoIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1SJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCi0gICAgICBpZiB0ZXN0IC1uICIkeHJwYXRoIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLVInIGlzIGlnbm9yZWQgZm9yIG9iamVjdHMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIKIAotICAgICAgaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAtbiAiJHJlbGVhc2UiOyB0aGVuCi0JJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGAtcmVsZWFzZScgaXMgaWdub3JlZCBmb3Igb2JqZWN0cyIgMT4mMgotICAgICAgZmkKKyAgICAgIHRlc3QgLW4gIiRyZWxlYXNlIiAmJiBcCisJZnVuY193YXJuaW5nICJcYC1yZWxlYXNlJyBpcyBpZ25vcmVkIGZvciBvYmplY3RzIgogCiAgICAgICBjYXNlICRvdXRwdXQgaW4KICAgICAgICoubG8pCi0JaWYgdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiOyB0aGVuCi0JICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgYnVpbGQgbGlicmFyeSBvYmplY3QgXGAkb3V0cHV0JyBmcm9tIG5vbi1saWJ0b29sIG9iamVjdHMiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCWZpCi0JbGlib2JqPSIkb3V0cHV0IgotCW9iaj1gJGVjaG8gIlgkb3V0cHV0IiB8ICRYc2VkIC1lICIkbG8ybyJgCisJdGVzdCAtbiAiJG9ianMkb2xkX2RlcGxpYnMiICYmIFwKKwkgIGZ1bmNfZmF0YWxfZXJyb3IgImNhbm5vdCBidWlsZCBsaWJyYXJ5IG9iamVjdCBcYCRvdXRwdXQnIGZyb20gbm9uLWxpYnRvb2wgb2JqZWN0cyIKKworCWxpYm9iaj0kb3V0cHV0CisJZnVuY19sbzJvICIkbGlib2JqIgorCW9iaj0kZnVuY19sbzJvX3Jlc3VsdAogCTs7CiAgICAgICAqKQogCWxpYm9iaj0KQEAgLTQzMDMsNyArODYwMyw3IEBACiAgICAgICBlc2FjCiAKICAgICAgICMgRGVsZXRlIHRoZSBvbGQgb2JqZWN0cy4KLSAgICAgICRydW4gJHJtICRvYmogJGxpYm9iagorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb2JqICRsaWJvYmoKIAogICAgICAgIyBPYmplY3RzIGZyb20gY29udmVuaWVuY2UgbGlicmFyaWVzLiAgVGhpcyBhc3N1bWVzCiAgICAgICAjIHNpbmdsZS12ZXJzaW9uIGNvbnZlbmllbmNlIGxpYnJhcmllcy4gIFdoZW5ldmVyIHdlIGNyZWF0ZQpAQCAtNDMxOSwzNSArODYxOSwyOSBAQAogICAgICAgaWYgdGVzdCAtbiAiJGNvbnZlbmllbmNlIjsgdGhlbgogCWlmIHRlc3QgLW4gIiR3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYyI7IHRoZW4KIAkgIGV2YWwgdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3M9XCIkd2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWNcIgotCSAgcmVsb2FkX2NvbnZfb2Jqcz0kcmVsb2FkX29ianNcIGAkZWNobyAiWCR0bXBfd2hvbGVfYXJjaGl2ZV9mbGFncyIgfCAkWHNlZCAtZSAnc3wsfCB8ZydgCisJICByZWxvYWRfY29udl9vYmpzPSRyZWxvYWRfb2Jqc1wgYCRFQ0hPICIkdG1wX3dob2xlX2FyY2hpdmVfZmxhZ3MiIHwgJFNFRCAnc3wsfCB8ZydgCiAJZWxzZQogCSAgZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke29ian14IgotCSAgZ2VuZXJhdGVkPSIkZ2VuZXJhdGVkICRnZW50b3AiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkY29udmVuaWVuY2UKIAkgIHJlbG9hZF9jb252X29ianM9IiRyZWxvYWRfb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKIAlmaQogICAgICAgZmkKIAorICAgICAgIyBJZiB3ZSdyZSBub3QgYnVpbGRpbmcgc2hhcmVkLCB3ZSBuZWVkIHRvIHVzZSBub25fcGljX29ianMKKyAgICAgIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllcyAmJiBsaWJvYmpzPSIkbm9uX3BpY19vYmplY3RzIgorCiAgICAgICAjIENyZWF0ZSB0aGUgb2xkLXN0eWxlIG9iamVjdC4KLSAgICAgIHJlbG9hZF9vYmpzPSIkb2JqcyRvbGRfZGVwbGlicyAiYCRlY2hvICJYJGxpYm9ianMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJy9cLicke2xpYmV4dH0kJy9kJyAtZSAnL1wubGliJC9kJyAtZSAiJGxvMm8iIHwgJE5MMlNQYCIgJHJlbG9hZF9jb252X29ianMiICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAorICAgICAgcmVsb2FkX29ianM9IiRvYmpzJG9sZF9kZXBsaWJzICJgJEVDSE8gIiRsaWJvYmpzIiB8ICRTUDJOTCB8ICRTRUQgIi9cLiR7bGliZXh0fSQvZDsgL1wubGliJC9kOyAkbG8ybyIgfCAkTkwyU1BgIiAkcmVsb2FkX2NvbnZfb2JqcyIgIyMjIHRlc3RzdWl0ZTogc2tpcCBuZXN0ZWQgcXVvdGluZyB0ZXN0CiAKICAgICAgIG91dHB1dD0iJG9iaiIKLSAgICAgIGNtZHM9JHJlbG9hZF9jbWRzCi0gICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JSUZTPSIkc2F2ZV9pZnMiCi0JZXZhbCBjbWQ9XCIkY21kXCIKLQkkc2hvdyAiJGNtZCIKLQkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJHNhdmVfaWZzIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRyZWxvYWRfY21kcyIgJ2V4aXQgJD8nCiAKICAgICAgICMgRXhpdCBpZiB3ZSBhcmVuJ3QgZG9pbmcgYSBsaWJyYXJ5IG9iamVjdCBmaWxlLgogICAgICAgaWYgdGVzdCAteiAiJGxpYm9iaiI7IHRoZW4KIAlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgotCSAgJHNob3cgIiR7cm19ciAkZ2VudG9wIgotCSAgJHJ1biAke3JtfXIgJGdlbnRvcAorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCiAJZmkKIAogCWV4aXQgJEVYSVRfU1VDQ0VTUwpAQCAtNDM1NSwxNCArODY0OSwxMyBAQAogCiAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KIAlpZiB0ZXN0IC1uICIkZ2VudG9wIjsgdGhlbgotCSAgJHNob3cgIiR7cm19ciAkZ2VudG9wIgotCSAgJHJ1biAke3JtfXIgJGdlbnRvcAorCSAgZnVuY19zaG93X2V2YWwgJyR7Uk19ciAiJGdlbnRvcCInCiAJZmkKIAogCSMgQ3JlYXRlIGFuIGludmFsaWQgbGlidG9vbCBvYmplY3QgaWYgbm8gUElDLCBzbyB0aGF0IHdlIGRvbid0CiAJIyBhY2NpZGVudGFsbHkgbGluayBpdCBpbnRvIGEgcHJvZ3JhbS4KIAkjICRzaG93ICJlY2hvIHRpbWVzdGFtcCA+ICRsaWJvYmoiCi0JIyAkcnVuIGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPworCSMgJG9wdF9kcnlfcnVuIHx8IGV2YWwgImVjaG8gdGltZXN0YW1wID4gJGxpYm9iaiIgfHwgZXhpdCAkPwogCWV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICAgZmkKIApAQCAtNDM3MCwyMCArODY2MywxMSBAQAogCSMgT25seSBkbyBjb21tYW5kcyBpZiB3ZSByZWFsbHkgaGF2ZSBkaWZmZXJlbnQgUElDIG9iamVjdHMuCiAJcmVsb2FkX29ianM9IiRsaWJvYmpzICRyZWxvYWRfY29udl9vYmpzIgogCW91dHB1dD0iJGxpYm9iaiIKLQljbWRzPSRyZWxvYWRfY21kcwotCXNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCWZvciBjbWQgaW4gJGNtZHM7IGRvCi0JICBJRlM9IiRzYXZlX2lmcyIKLQkgIGV2YWwgY21kPVwiJGNtZFwiCi0JICAkc2hvdyAiJGNtZCIKLQkgICRydW4gZXZhbCAiJGNtZCIgfHwgZXhpdCAkPwotCWRvbmUKLQlJRlM9IiRzYXZlX2lmcyIKKwlmdW5jX2V4ZWN1dGVfY21kcyAiJHJlbG9hZF9jbWRzIiAnZXhpdCAkPycKICAgICAgIGZpCiAKICAgICAgIGlmIHRlc3QgLW4gIiRnZW50b3AiOyB0aGVuCi0JJHNob3cgIiR7cm19ciAkZ2VudG9wIgotCSRydW4gJHtybX1yICRnZW50b3AKKwlmdW5jX3Nob3dfZXZhbCAnJHtSTX1yICIkZ2VudG9wIicKICAgICAgIGZpCiAKICAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwpAQCAtNDM5MSwzOSArODY3NSw0NSBAQAogCiAgICAgcHJvZykKICAgICAgIGNhc2UgJGhvc3QgaW4KLQkqY3lnd2luKikgb3V0cHV0PWAkZWNobyAkb3V0cHV0IHwgJHtTRUR9IC1lICdzLC5leGUkLCw7cywkLC5leGUsJ2AgOzsKKwkqY3lnd2luKikgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkb3V0cHV0IgorCSAgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdC5leGU7OwogICAgICAgZXNhYwotICAgICAgaWYgdGVzdCAtbiAiJHZpbmZvIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiIDE+JjIKLSAgICAgIGZpCisgICAgICB0ZXN0IC1uICIkdmluZm8iICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXZlcnNpb24taW5mbycgaXMgaWdub3JlZCBmb3IgcHJvZ3JhbXMiCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRyZWxlYXNlIjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIiAxPiYyCi0gICAgICBmaQorICAgICAgdGVzdCAtbiAiJHJlbGVhc2UiICYmIFwKKwlmdW5jX3dhcm5pbmcgIlxgLXJlbGVhc2UnIGlzIGlnbm9yZWQgZm9yIHByb2dyYW1zIgogCi0gICAgICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXM7IHRoZW4KLQlpZiB0ZXN0ICIkZGxvcGVuX3N1cHBvcnQiID0gdW5rbm93biAmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biAmJgotCSAgIHRlc3QgIiRkbG9wZW5fc2VsZl9zdGF0aWMiID0gdW5rbm93bjsgdGhlbgotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogXGBBQ19MSUJUT09MX0RMT1BFTicgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKLQlmaQotICAgICAgZmkKKyAgICAgIHRlc3QgIiRwcmVsb2FkIiA9IHllcyBcCisgICAgICAgICYmIHRlc3QgIiRkbG9wZW5fc3VwcG9ydCIgPSB1bmtub3duIFwKKwkmJiB0ZXN0ICIkZGxvcGVuX3NlbGYiID0gdW5rbm93biBcCisJJiYgdGVzdCAiJGRsb3Blbl9zZWxmX3N0YXRpYyIgPSB1bmtub3duICYmIFwKKwkgIGZ1bmNfd2FybmluZyAiXGBMVF9JTklUKFtkbG9wZW5dKScgbm90IHVzZWQuIEFzc3VtaW5nIG5vIGRsb3BlbiBzdXBwb3J0LiIKIAogICAgICAgY2FzZSAkaG9zdCBpbgogICAgICAgKi0qLXJoYXBzb2R5KiB8ICotKi1kYXJ3aW4xLlswMTJdKQogCSMgT24gUmhhcHNvZHkgcmVwbGFjZSB0aGUgQyBsaWJyYXJ5IGlzIHRoZSBTeXN0ZW0gZnJhbWV3b3JrCi0JY29tcGlsZV9kZXBsaWJzPWAkZWNobyAiWCAkY29tcGlsZV9kZXBsaWJzIiB8ICRYc2VkIC1lICdzLyAtbGMgLyAtZnJhbWV3b3JrIFN5c3RlbSAvJ2AKLQlmaW5hbGl6ZV9kZXBsaWJzPWAkZWNobyAiWCAkZmluYWxpemVfZGVwbGlicyIgfCAkWHNlZCAtZSAncy8gLWxjIC8gLWZyYW1ld29yayBTeXN0ZW0gLydgCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAorCWZpbmFsaXplX2RlcGxpYnM9YCRFQ0hPICIgJGZpbmFsaXplX2RlcGxpYnMiIHwgJFNFRCAncy8gLWxjIC8gU3lzdGVtLmx0ZnJhbWV3b3JrIC8nYAogCTs7CiAgICAgICBlc2FjCiAKICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICpkYXJ3aW4qKQotICAgICAgICAjIERvbid0IGFsbG93IGxhenkgbGlua2luZywgaXQgYnJlYWtzIEMrKyBnbG9iYWwgY29uc3RydWN0b3JzCi0gICAgICAgIGlmIHRlc3QgIiR0YWduYW1lIiA9IENYWCA7IHRoZW4KLSAgICAgICAgY29tcGlsZV9jb21tYW5kPSIkY29tcGlsZV9jb21tYW5kICR7d2x9LWJpbmRfYXRfbG9hZCIKLSAgICAgICAgZmluYWxpemVfY29tbWFuZD0iJGZpbmFsaXplX2NvbW1hbmQgJHt3bH0tYmluZF9hdF9sb2FkIgotICAgICAgICBmaQotICAgICAgICA7OworICAgICAgKi0qLWRhcndpbiopCisJIyBEb24ndCBhbGxvdyBsYXp5IGxpbmtpbmcsIGl0IGJyZWFrcyBDKysgZ2xvYmFsIGNvbnN0cnVjdG9ycworCSMgQnV0IGlzIHN1cHBvc2VkbHkgZml4ZWQgb24gMTAuNCBvciBsYXRlciAoeWF5ISkuCisJaWYgdGVzdCAiJHRhZ25hbWUiID0gQ1hYIDsgdGhlbgorCSAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSBpbgorCSAgICAxMC5bMDEyM10pCisJICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJHt3bH0tYmluZF9hdF9sb2FkIgorCSAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAke3dsfS1iaW5kX2F0X2xvYWQiCisJICAgIDs7CisJICBlc2FjCisJZmkKKwkjIFRpbWUgdG8gY2hhbmdlIGFsbCBvdXIgImZvby5sdGZyYW1ld29yayIgc3R1ZmYgYmFjayB0byAiLWZyYW1ld29yayBmb28iCisJY29tcGlsZV9kZXBsaWJzPWAkRUNITyAiICRjb21waWxlX2RlcGxpYnMiIHwgJFNFRCAncyUgXChbXiAkXSpcKS5sdGZyYW1ld29yayUgLWZyYW1ld29yayBcMSVnJ2AKKwlmaW5hbGl6ZV9kZXBsaWJzPWAkRUNITyAiICRmaW5hbGl6ZV9kZXBsaWJzIiB8ICRTRUQgJ3MlIFwoW14gJF0qXCkubHRmcmFtZXdvcmslIC1mcmFtZXdvcmsgXDElZydgCisJOzsKICAgICAgIGVzYWMKIAogCkBAIC00NDM2LDcgKzg3MjYsNyBAQAogCSopCiAJICBjYXNlICIgJGNvbXBpbGVfZGVwbGlicyAiIGluCiAJICAqIiAtTCRwYXRoLyRvYmpkaXIgIiopCi0JICAgIG5ld19saWJzPSIkbmV3X2xpYnMgLUwkcGF0aC8kb2JqZGlyIiA7OworCSAgICBmdW5jX2FwcGVuZCBuZXdfbGlicyAiIC1MJHBhdGgvJG9iamRpciIgOzsKIAkgIGVzYWMKIAkgIDs7CiAJZXNhYwpAQCAtNDQ0NiwxNyArODczNiwxNyBAQAogCS1MKikKIAkgIGNhc2UgIiAkbmV3X2xpYnMgIiBpbgogCSAgKiIgJGRlcGxpYiAiKikgOzsKLQkgICopIG5ld19saWJzPSIkbmV3X2xpYnMgJGRlcGxpYiIgOzsKKwkgICopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKIAkgIGVzYWMKIAkgIDs7Ci0JKikgbmV3X2xpYnM9IiRuZXdfbGlicyAkZGVwbGliIiA7OworCSopIGZ1bmNfYXBwZW5kIG5ld19saWJzICIgJGRlcGxpYiIgOzsKIAllc2FjCiAgICAgICBkb25lCiAgICAgICBjb21waWxlX2RlcGxpYnM9IiRuZXdfbGlicyIKIAogCi0gICAgICBjb21waWxlX2NvbW1hbmQ9IiRjb21waWxlX2NvbW1hbmQgJGNvbXBpbGVfZGVwbGlicyIKLSAgICAgIGZpbmFsaXplX2NvbW1hbmQ9IiRmaW5hbGl6ZV9jb21tYW5kICRmaW5hbGl6ZV9kZXBsaWJzIgorICAgICAgZnVuY19hcHBlbmQgY29tcGlsZV9jb21tYW5kICIgJGNvbXBpbGVfZGVwbGlicyIKKyAgICAgIGZ1bmNfYXBwZW5kIGZpbmFsaXplX2NvbW1hbmQgIiAkZmluYWxpemVfZGVwbGlicyIKIAogICAgICAgaWYgdGVzdCAtbiAiJHJwYXRoJHhycGF0aCI7IHRoZW4KIAkjIElmIHRoZSB1c2VyIHNwZWNpZmllZCBhbnkgcnBhdGggZmxhZ3MsIHRoZW4gYWRkIHRoZW0uCkBAIC00NDY0LDcgKzg3NTQsNyBAQAogCSAgIyBUaGlzIGlzIHRoZSBtYWdpYyB0byB1c2UgLXJwYXRoLgogCSAgY2FzZSAiJGZpbmFsaXplX3JwYXRoICIgaW4KIAkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmaW5hbGl6ZV9ycGF0aD0iJGZpbmFsaXplX3JwYXRoICRsaWJkaXIiIDs7CisJICAqKSBmdW5jX2FwcGVuZCBmaW5hbGl6ZV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICBlc2FjCiAJZG9uZQogICAgICAgZmkKQEAgLTQ0ODMsMzAgKzg3NzMsMzIgQEAKIAkgICAgICAqIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yIiopCiAJCTs7CiAJICAgICAgKikKLQkJaGFyZGNvZGVfbGliZGlycz0iJGhhcmRjb2RlX2xpYmRpcnMkaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciRsaWJkaXIiCisJCWZ1bmNfYXBwZW5kIGhhcmRjb2RlX2xpYmRpcnMgIiRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKIAkJOzsKIAkgICAgICBlc2FjCiAJICAgIGZpCiAJICBlbHNlCiAJICAgIGV2YWwgZmxhZz1cIiRoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXCIKLQkgICAgcnBhdGg9IiRycGF0aCAkZmxhZyIKKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiAkZmxhZyIKIAkgIGZpCiAJZWxpZiB0ZXN0IC1uICIkcnVucGF0aF92YXIiOyB0aGVuCiAJICBjYXNlICIkcGVybV9ycGF0aCAiIGluCiAJICAqIiAkbGliZGlyICIqKSA7OwotCSAgKikgcGVybV9ycGF0aD0iJHBlcm1fcnBhdGggJGxpYmRpciIgOzsKKwkgICopIGZ1bmNfYXBwZW5kIHBlcm1fcnBhdGggIiAkbGliZGlyIiA7OwogCSAgZXNhYwogCWZpCiAJY2FzZSAkaG9zdCBpbgotCSotKi1jeWd3aW4qIHwgKi0qLW1pbmd3KiB8ICotKi1wdzMyKiB8ICotKi1vczIqKQotCSAgdGVzdGJpbmRpcj1gJGVjaG8gIlgkbGliZGlyIiB8ICRYc2VkIC1lICdzKi9saWIkKi9iaW4qJ2AKKwkqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotb3MyKiB8ICotY2VnY2MqKQorCSAgdGVzdGJpbmRpcj1gJHtFQ0hPfSAiJGxpYmRpciIgfCAke1NFRH0gLWUgJ3MqL2xpYiQqL2JpbionYAogCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCiAJICAqIjokbGliZGlyOiIqKSA7OwotCSAgKikgZGxsc2VhcmNocGF0aD0iJGRsbHNlYXJjaHBhdGg6JGxpYmRpciI7OworCSAgOjopIGRsbHNlYXJjaHBhdGg9JGxpYmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JGxpYmRpciI7OwogCSAgZXNhYwogCSAgY2FzZSA6JGRsbHNlYXJjaHBhdGg6IGluCiAJICAqIjokdGVzdGJpbmRpcjoiKikgOzsKLQkgICopIGRsbHNlYXJjaHBhdGg9IiRkbGxzZWFyY2hwYXRoOiR0ZXN0YmluZGlyIjs7CisJICA6OikgZGxsc2VhcmNocGF0aD0kdGVzdGJpbmRpcjs7CisJICAqKSBmdW5jX2FwcGVuZCBkbGxzZWFyY2hwYXRoICI6JHRlc3RiaW5kaXIiOzsKIAkgIGVzYWMKIAkgIDs7CiAJZXNhYwpAQCAtNDUzMiwxOCArODgyNCwxOCBAQAogCSAgICAgICoiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IiKikKIAkJOzsKIAkgICAgICAqKQotCQloYXJkY29kZV9saWJkaXJzPSIkaGFyZGNvZGVfbGliZGlycyRoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yJGxpYmRpciIKKwkJZnVuY19hcHBlbmQgaGFyZGNvZGVfbGliZGlycyAiJGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IkbGliZGlyIgogCQk7OwogCSAgICAgIGVzYWMKIAkgICAgZmkKIAkgIGVsc2UKIAkgICAgZXZhbCBmbGFnPVwiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWNcIgotCSAgICBycGF0aD0iJHJwYXRoICRmbGFnIgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiICRmbGFnIgogCSAgZmkKIAllbGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KIAkgIGNhc2UgIiRmaW5hbGl6ZV9wZXJtX3JwYXRoICIgaW4KIAkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBmaW5hbGl6ZV9wZXJtX3JwYXRoPSIkZmluYWxpemVfcGVybV9ycGF0aCAkbGliZGlyIiA7OworCSAgKikgZnVuY19hcHBlbmQgZmluYWxpemVfcGVybV9ycGF0aCAiICRsaWJkaXIiIDs7CiAJICBlc2FjCiAJZmkKICAgICAgIGRvbmUKQEAgLTQ1NTcsMjgxICs4ODQ5LDU3IEBACiAKICAgICAgIGlmIHRlc3QgLW4gIiRsaWJvYmpzIiAmJiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCiAJIyBUcmFuc2Zvcm0gYWxsIHRoZSBsaWJyYXJ5IG9iamVjdHMgaW50byBzdGFuZGFyZCBvYmplY3RzLgotCWNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkbG8ybyIgfCAkTkwyU1BgCi0JZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJGxvMm8iIHwgJE5MMlNQYAorCWNvbXBpbGVfY29tbWFuZD1gJEVDSE8gIiRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFNFRCAiJGxvMm8iIHwgJE5MMlNQYAorCWZpbmFsaXplX2NvbW1hbmQ9YCRFQ0hPICIkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICIkbG8ybyIgfCAkTkwyU1BgCiAgICAgICBmaQogCi0gICAgICBkbHN5bXM9Ci0gICAgICBpZiB0ZXN0IC1uICIkZGxmaWxlcyRkbHByZWZpbGVzIiB8fCB0ZXN0ICIkZGxzZWxmIiAhPSBubzsgdGhlbgotCWlmIHRlc3QgLW4gIiROTSIgJiYgdGVzdCAtbiAiJGdsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KLQkgIGRsc3ltcz0iJHtvdXRwdXRuYW1lfVMuYyIKLQllbHNlCi0JICAkZWNobyAiJG1vZGVuYW1lOiBub3QgY29uZmlndXJlZCB0byBleHRyYWN0IGdsb2JhbCBzeW1ib2xzIGZyb20gZGxwcmVvcGVuZWQgZmlsZXMiIDE+JjIKLQlmaQorICAgICAgZnVuY19nZW5lcmF0ZV9kbHN5bXMgIiRvdXRwdXRuYW1lIiAiQFBST0dSQU1AIiAibm8iCisKKyAgICAgICMgdGVtcGxhdGUgcHJlbGlua2luZyBzdGVwCisgICAgICBpZiB0ZXN0IC1uICIkcHJlbGlua19jbWRzIjsgdGhlbgorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcHJlbGlua19jbWRzIiAnZXhpdCAkPycKICAgICAgIGZpCiAKLSAgICAgIGlmIHRlc3QgLW4gIiRkbHN5bXMiOyB0aGVuCi0JY2FzZSAkZGxzeW1zIGluCi0JIiIpIDs7Ci0JKi5jKQotCSAgIyBEaXNjb3ZlciB0aGUgbmxpc3Qgb2YgZWFjaCBvZiB0aGUgZGxmaWxlcy4KLQkgIG5saXN0PSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Lm5tIgotCi0JICAkc2hvdyAiJHJtICRubGlzdCAke25saXN0fVMgJHtubGlzdH1UIgotCSAgJHJ1biAkcm0gIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCIKLQotCSAgIyBQYXJzZSB0aGUgbmFtZSBsaXN0IGludG8gYSBzb3VyY2UgZmlsZS4KLQkgICRzaG93ICJjcmVhdGluZyAkb3V0cHV0X29iamRpci8kZGxzeW1zIgotCi0JICB0ZXN0IC16ICIkcnVuIiAmJiAkZWNobyA+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAotLyogJGRsc3ltcyAtIHN5bWJvbCByZXNvbHV0aW9uIHRhYmxlIGZvciBcYCRvdXRwdXRuYW1lJyBkbHN5bSBlbXVsYXRpb24uICovCi0vKiBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gLSBHTlUgJFBBQ0tBR0UgJFZFUlNJT04kVElNRVNUQU1QICovCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotZXh0ZXJuIFwiQ1wiIHsKLSNlbmRpZgotCi0vKiBQcmV2ZW50IHRoZSBvbmx5IGtpbmQgb2YgZGVjbGFyYXRpb24gY29uZmxpY3RzIHdlIGNhbiBtYWtlLiAqLwotI2RlZmluZSBsdF9wcmVsb2FkZWRfc3ltYm9scyBzb21lX290aGVyX3N5bWJvbAotCi0vKiBFeHRlcm5hbCBzeW1ib2wgZGVjbGFyYXRpb25zIGZvciB0aGUgY29tcGlsZXIuICovXAotIgotCi0JICBpZiB0ZXN0ICIkZGxzZWxmIiA9IHllczsgdGhlbgotCSAgICAkc2hvdyAiZ2VuZXJhdGluZyBzeW1ib2wgbGlzdCBmb3IgXGAkb3V0cHV0JyIKLQotCSAgICB0ZXN0IC16ICIkcnVuIiAmJiAkZWNobyAnOiBAUFJPR1JBTUAgJyA+ICIkbmxpc3QiCi0KLQkgICAgIyBBZGQgb3VyIG93biBwcm9ncmFtIG9iamVjdHMgdG8gdGhlIHN5bWJvbCBsaXN0LgotCSAgICBwcm9nZmlsZXM9YCRlY2hvICJYJG9ianMkb2xkX2RlcGxpYnMiIHwgJFNQMk5MIHwgJFhzZWQgLWUgIiRsbzJvIiB8ICROTDJTUGAKLQkgICAgZm9yIGFyZyBpbiAkcHJvZ2ZpbGVzOyBkbwotCSAgICAgICRzaG93ICJleHRyYWN0aW5nIGdsb2JhbCBDIHN5bWJvbHMgZnJvbSBcYCRhcmcnIgotCSAgICAgICRydW4gZXZhbCAiJE5NICRhcmcgfCAkZ2xvYmFsX3N5bWJvbF9waXBlID4+ICckbmxpc3QnIgotCSAgICBkb25lCi0KLQkgICAgaWYgdGVzdCAtbiAiJGV4Y2x1ZGVfZXhwc3ltcyI7IHRoZW4KLQkgICAgICAkcnVuIGV2YWwgJyRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUJwotCSAgICAgICRydW4gZXZhbCAnJG12ICIkbmxpc3QiVCAiJG5saXN0IicKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IC1uICIkZXhwb3J0X3N5bWJvbHNfcmVnZXgiOyB0aGVuCi0JICAgICAgJHJ1biBldmFsICckRUdSRVAgLWUgIiRleHBvcnRfc3ltYm9sc19yZWdleCIgIiRubGlzdCIgPiAiJG5saXN0IlQnCi0JICAgICAgJHJ1biBldmFsICckbXYgIiRubGlzdCJUICIkbmxpc3QiJwotCSAgICBmaQotCi0JICAgICMgUHJlcGFyZSB0aGUgbGlzdCBvZiBleHBvcnRlZCBzeW1ib2xzCi0JICAgIGlmIHRlc3QgLXogIiRleHBvcnRfc3ltYm9scyI7IHRoZW4KLQkgICAgICBleHBvcnRfc3ltYm9scz0iJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIgotCSAgICAgICRydW4gJHJtICRleHBvcnRfc3ltYm9scwotCSAgICAgICRydW4gZXZhbCAiJHtTRUR9IC1uIC1lICcvXjogQFBST0dSQU1AICQvZCcgLWUgJ3MvXi4qIFwoLipcKSQvXDEvcCcgIic8ICIkbmxpc3QiID4gIiRleHBvcnRfc3ltYm9scyInCi0gICAgICAgICAgICAgIGNhc2UgJGhvc3QgaW4KLSAgICAgICAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLQkgICAgICAgICRydW4gZXZhbCAiZWNobyBFWFBPUlRTICInPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLQkJJHJ1biBldmFsICdjYXQgIiRleHBvcnRfc3ltYm9scyIgPj4gIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmRlZiInCi0gICAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgZXNhYwotCSAgICBlbHNlCi0JICAgICAgJHJ1biBldmFsICIke1NFRH0gLWUgJ3MvXChbXS5bKl4kXVwpL1xcXFxcMS9nJyAtZSAncy9eLyAvJyAtZSAncy8kLyQvJyInIDwgIiRleHBvcnRfc3ltYm9scyIgPiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZXhwIicKLQkgICAgICAkcnVuIGV2YWwgJ2dyZXAgLWYgIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lLmV4cCIgPCAiJG5saXN0IiA+ICIkbmxpc3QiVCcKLQkgICAgICAkcnVuIGV2YWwgJ212ICIkbmxpc3QiVCAiJG5saXN0IicKLSAgICAgICAgICAgICAgY2FzZSAkaG9zdCBpbgotICAgICAgICAgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQotCSAgICAgICAgJHJ1biBldmFsICJlY2hvIEVYUE9SVFMgIic+ICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZS5kZWYiJwotCQkkcnVuIGV2YWwgJ2NhdCAiJG5saXN0IiA+PiAiJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUuZGVmIicKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICBlc2FjCi0JICAgIGZpCi0JICBmaQotCi0JICBmb3IgYXJnIGluICRkbHByZWZpbGVzOyBkbwotCSAgICAkc2hvdyAiZXh0cmFjdGluZyBnbG9iYWwgQyBzeW1ib2xzIGZyb20gXGAkYXJnJyIKLQkgICAgbmFtZT1gJGVjaG8gIiRhcmciIHwgJHtTRUR9IC1lICdzJV4uKi8lJSdgCi0JICAgICRydW4gZXZhbCAnJGVjaG8gIjogJG5hbWUgIiA+PiAiJG5saXN0IicKLQkgICAgJHJ1biBldmFsICIkTk0gJGFyZyB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgPj4gJyRubGlzdCciCi0JICBkb25lCi0KLQkgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCi0JICAgICMgTWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgYW4gZW1wdHkgZmlsZS4KLQkgICAgdGVzdCAtZiAiJG5saXN0IiB8fCA6ID4gIiRubGlzdCIKLQotCSAgICBpZiB0ZXN0IC1uICIkZXhjbHVkZV9leHBzeW1zIjsgdGhlbgotCSAgICAgICRFR1JFUCAtdiAiICgkZXhjbHVkZV9leHBzeW1zKSQiICIkbmxpc3QiID4gIiRubGlzdCJUCi0JICAgICAgJG12ICIkbmxpc3QiVCAiJG5saXN0IgotCSAgICBmaQotCi0JICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCi0JICAgIGlmIGdyZXAgLXYgIl46ICIgPCAiJG5saXN0IiB8Ci0JCWlmIHNvcnQgLWsgMyA8L2Rldi9udWxsID4vZGV2L251bGwgMj4mMTsgdGhlbgotCQkgIHNvcnQgLWsgMwotCQllbHNlCi0JCSAgc29ydCArMgotCQlmaSB8Ci0JCXVuaXEgPiAiJG5saXN0IlM7IHRoZW4KLQkgICAgICA6Ci0JICAgIGVsc2UKLQkgICAgICBncmVwIC12ICJeOiAiIDwgIiRubGlzdCIgPiAiJG5saXN0IlMKLQkgICAgZmkKLQotCSAgICBpZiB0ZXN0IC1mICIkbmxpc3QiUzsgdGhlbgotCSAgICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NkZWNsIicgPCAiJG5saXN0IlMgPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiJwotCSAgICBlbHNlCi0JICAgICAgJGVjaG8gJy8qIE5PTkUgKi8nID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIgotCSAgICBmaQotCi0JICAgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAotCi0jdW5kZWYgbHRfcHJlbG9hZGVkX3N5bWJvbHMKLQotI2lmIGRlZmluZWQgKF9fU1REQ19fKSAmJiBfX1NURENfXwotIyBkZWZpbmUgbHRfcHRyIHZvaWQgKgotI2Vsc2UKLSMgZGVmaW5lIGx0X3B0ciBjaGFyICoKLSMgZGVmaW5lIGNvbnN0Ci0jZW5kaWYKLQotLyogVGhlIG1hcHBpbmcgYmV0d2VlbiBzeW1ib2wgbmFtZXMgYW5kIHN5bWJvbHMuICovCi0iCi0KLQkgICAgY2FzZSAkaG9zdCBpbgotCSAgICAqY3lnd2luKiB8ICptaW5ndyogKQotCSAgJGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICJcCi0vKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNhbid0IGJlIGNvbnN0LCBiZWNhdXNlCi0gICBydW50aW1lIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbgotICAgb24gcHNldWRvLXJlbG9jcyAqLwotc3RydWN0IHsKLSIKLQkgICAgICA7OwotCSAgICAqICkKLQkgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAotY29uc3Qgc3RydWN0IHsKLSIKLQkgICAgICA7OwotCSAgICBlc2FjCi0KLQotCSAgJGVjaG8gPj4gIiRvdXRwdXRfb2JqZGlyLyRkbHN5bXMiICJcCi0gIGNvbnN0IGNoYXIgKm5hbWU7Ci0gIGx0X3B0ciBhZGRyZXNzOwotfQotbHRfcHJlbG9hZGVkX3N5bWJvbHNbXSA9Ci17XAotIgotCi0JICAgIGV2YWwgIiRnbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzIiA8ICIkbmxpc3QiID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIgotCi0JICAgICRlY2hvID4+ICIkb3V0cHV0X29iamRpci8kZGxzeW1zIiAiXAotICB7MCwgKGx0X3B0cikgMH0KLX07Ci0KLS8qIFRoaXMgd29ya3MgYXJvdW5kIGEgcHJvYmxlbSBpbiBGcmVlQlNEIGxpbmtlciAqLwotI2lmZGVmIEZSRUVCU0RfV09SS0FST1VORAotc3RhdGljIGNvbnN0IHZvaWQgKmx0X3ByZWxvYWRlZF9zZXR1cCgpIHsKLSAgcmV0dXJuIGx0X3ByZWxvYWRlZF9zeW1ib2xzOwotfQotI2VuZGlmCi0KLSNpZmRlZiBfX2NwbHVzcGx1cwotfQotI2VuZGlmXAotIgotCSAgZmkKLQotCSAgcGljX2ZsYWdfZm9yX3N5bXRhYmxlPQotCSAgY2FzZSAkaG9zdCBpbgotCSAgIyBjb21waWxpbmcgdGhlIHN5bWJvbCB0YWJsZSBmaWxlIHdpdGggcGljX2ZsYWcgd29ya3MgYXJvdW5kCi0JICAjIGEgRnJlZUJTRCBidWcgdGhhdCBjYXVzZXMgcHJvZ3JhbXMgdG8gY3Jhc2ggd2hlbiAtbG0gaXMKLQkgICMgbGlua2VkIGJlZm9yZSBhbnkgb3RoZXIgUElDIG9iamVjdC4gIEJ1dCB3ZSBtdXN0IG5vdCB1c2UKLQkgICMgcGljX2ZsYWcgd2hlbiBsaW5raW5nIHdpdGggLXN0YXRpYy4gIFRoZSBwcm9ibGVtIGV4aXN0cyBpbgotCSAgIyBGcmVlQlNEIDIuMi42IGFuZCBpcyBmaXhlZCBpbiBGcmVlQlNEIDMuMS4KLQkgICotKi1mcmVlYnNkMip8Ki0qLWZyZWVic2QzLjAqfCotKi1mcmVlYnNkZWxmMy4wKikKLQkgICAgY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCi0JICAgICoiIC1zdGF0aWMgIiopIDs7Ci0JICAgICopIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyAtREZSRUVCU0RfV09SS0FST1VORCI7OwotCSAgICBlc2FjOzsKLQkgICotKi1ocHV4KikKLQkgICAgY2FzZSAiJGNvbXBpbGVfY29tbWFuZCAiIGluCi0JICAgICoiIC1zdGF0aWMgIiopIDs7Ci0JICAgICopIHBpY19mbGFnX2Zvcl9zeW10YWJsZT0iICRwaWNfZmxhZyI7OwotCSAgICBlc2FjCi0JICBlc2FjCi0KLQkgICMgTm93IGNvbXBpbGUgdGhlIGR5bmFtaWMgc3ltYm9sIGZpbGUuCi0JICAkc2hvdyAiKGNkICRvdXRwdXRfb2JqZGlyICYmICRMVENDICAkTFRDRkxBR1MgLWMkbm9fYnVpbHRpbl9mbGFnJHBpY19mbGFnX2Zvcl9zeW10YWJsZSBcIiRkbHN5bXNcIikiCi0JICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkTFRDQyAgJExUQ0ZMQUdTIC1jJG5vX2J1aWx0aW5fZmxhZyRwaWNfZmxhZ19mb3Jfc3ltdGFibGUgIiRkbHN5bXMiKScgfHwgZXhpdCAkPwotCi0JICAjIENsZWFuIHVwIHRoZSBnZW5lcmF0ZWQgZmlsZXMuCi0JICAkc2hvdyAiJHJtICRvdXRwdXRfb2JqZGlyLyRkbHN5bXMgJG5saXN0ICR7bmxpc3R9UyAke25saXN0fVQiCi0JICAkcnVuICRybSAiJG91dHB1dF9vYmpkaXIvJGRsc3ltcyIgIiRubGlzdCIgIiR7bmxpc3R9UyIgIiR7bmxpc3R9VCIKLQotCSAgIyBUcmFuc2Zvcm0gdGhlIHN5bWJvbCBmaWxlIGludG8gdGhlIGNvcnJlY3QgbmFtZS4KLSAgICAgICAgICBjYXNlICRob3N0IGluCi0gICAgICAgICAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLSAgICAgICAgICAgIGlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX0uZGVmIiA7IHRoZW4KLSAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX0uZGVmICRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiIHwgJE5MMlNQYAotICAgICAgICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9LmRlZiAkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiIHwgJE5MMlNQYAotICAgICAgICAgICAgICBmaW5hbGl6ZV9jb21tYW5kPWAkZWNobyAiWCRmaW5hbGl6ZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKLSAgICAgICAgICAgICBmaQotICAgICAgICAgICAgOzsKLSAgICAgICAgICAqICkKLSAgICAgICAgICAgIGNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJUBTWU1GSUxFQCUkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0lIiB8ICROTDJTUGAKLSAgICAgICAgICAgIGZpbmFsaXplX2NvbW1hbmQ9YCRlY2hvICJYJGZpbmFsaXplX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgInMlQFNZTUZJTEVAJSRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSUiIHwgJE5MMlNQYAotICAgICAgICAgICAgOzsKLSAgICAgICAgICBlc2FjCi0JICA7OwotCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiB1bmtub3duIHN1ZmZpeCBmb3IgXGAkZGxzeW1zJyIgMT4mMgotCSAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICA7OwotCWVzYWMKLSAgICAgIGVsc2UKLQkjIFdlIGtlZXAgZ29pbmcganVzdCBpbiBjYXNlIHRoZSB1c2VyIGRpZG4ndCByZWZlciB0bwotCSMgbHRfcHJlbG9hZGVkX3N5bWJvbHMuICBUaGUgbGlua2VyIHdpbGwgZmFpbCBpZiBnbG9iYWxfc3ltYm9sX3BpcGUKLQkjIHJlYWxseSB3YXMgcmVxdWlyZWQuCi0KLQkjIE51bGxpZnkgdGhlIHN5bWJvbCBmaWxlLgotCWNvbXBpbGVfY29tbWFuZD1gJGVjaG8gIlgkY29tcGlsZV9jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICJzJSBAU1lNRklMRUAlJSIgfCAkTkwyU1BgCi0JZmluYWxpemVfY29tbWFuZD1gJGVjaG8gIlgkZmluYWxpemVfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAicyUgQFNZTUZJTEVAJSUiIHwgJE5MMlNQYAotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgd3JhcHBlcnNfcmVxdWlyZWQ9eWVzCisgICAgICBjYXNlICRob3N0IGluCisgICAgICAqY2VnY2MqIHwgKm1pbmd3MzJjZSopCisgICAgICAgICMgRGlzYWJsZSB3cmFwcGVycyBmb3IgY2VnY2MgYW5kIG1pbmd3MzJjZSBob3N0cywgd2UgYXJlIGNyb3NzIGNvbXBpbGluZyBhbnl3YXkuCisgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIDs7CisgICAgICAqY3lnd2luKiB8ICptaW5ndyogKQorICAgICAgICBpZiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiAhPSB5ZXM7IHRoZW4KKyAgICAgICAgICB3cmFwcGVyc19yZXF1aXJlZD1ubworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgKikKKyAgICAgICAgaWYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IG5vIHx8IHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiICE9IHllczsgdGhlbgorICAgICAgICAgIHdyYXBwZXJzX3JlcXVpcmVkPW5vCisgICAgICAgIGZpCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICBpZiB0ZXN0ICIkd3JhcHBlcnNfcmVxdWlyZWQiID0gbm87IHRoZW4KIAkjIFJlcGxhY2UgdGhlIG91dHB1dCBmaWxlIHNwZWNpZmljYXRpb24uCi0JY29tcGlsZV9jb21tYW5kPWAkZWNobyAiWCRjb21waWxlX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgfCAkTkwyU1BgCisJY29tcGlsZV9jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfY29tbWFuZCIgfCAkU0VEICdzJUBPVVRQVVRAJSciJG91dHB1dCInJWcnYAogCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgogCiAJIyBXZSBoYXZlIG5vIHVuaW5zdGFsbGVkIGxpYnJhcnkgZGVwZW5kZW5jaWVzLCBzbyBmaW5hbGl6ZSByaWdodCBub3cuCi0JJHNob3cgIiRsaW5rX2NvbW1hbmQiCi0JJHJ1biBldmFsICIkbGlua19jb21tYW5kIgotCWV4aXRfc3RhdHVzPSQ/CisJZXhpdF9zdGF0dXM9MAorCWZ1bmNfc2hvd19ldmFsICIkbGlua19jb21tYW5kIiAnZXhpdF9zdGF0dXM9JD8nCisKKwlpZiB0ZXN0IC1uICIkcG9zdGxpbmtfY21kcyI7IHRoZW4KKwkgIGZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0IgorCSAgcG9zdGxpbmtfY21kcz1gZnVuY19lY2hvX2FsbCAiJHBvc3RsaW5rX2NtZHMiIHwgJFNFRCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCSAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0bGlua19jbWRzIiAnZXhpdCAkPycKKwlmaQogCiAJIyBEZWxldGUgdGhlIGdlbmVyYXRlZCBmaWxlcy4KLQlpZiB0ZXN0IC1uICIkZGxzeW1zIjsgdGhlbgotCSAgJHNob3cgIiRybSAkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9Uy4ke29iamV4dH0iCi0JICAkcnVuICRybSAiJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfVMuJHtvYmpleHR9IgorCWlmIHRlc3QgLWYgIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSI7IHRoZW4KKwkgIGZ1bmNfc2hvd19ldmFsICckUk0gIiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX1TLiR7b2JqZXh0fSInCiAJZmkKIAogCWV4aXQgJGV4aXRfc3RhdHVzCiAgICAgICBmaQogCi0gICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQkjIFdlIHNob3VsZCBzZXQgdGhlIHNobGlicGF0aF92YXIKLQlycGF0aD0KLQlmb3IgZGlyIGluICR0ZW1wX3JwYXRoOyBkbwotCSAgY2FzZSAkZGlyIGluCi0JICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopCi0JICAgICMgQWJzb2x1dGUgcGF0aC4KLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgotCSAgICA7OwotCSAgKikKLQkgICAgIyBSZWxhdGl2ZSBwYXRoOiBhZGQgYSB0aGlzZGlyIGVudHJ5LgotCSAgICBycGF0aD0iJHJwYXRoXCR0aGlzZGlyLyRkaXI6IgotCSAgICA7OwotCSAgZXNhYwotCWRvbmUKLQl0ZW1wX3JwYXRoPSIkcnBhdGgiCi0gICAgICBmaQotCiAgICAgICBpZiB0ZXN0IC1uICIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoIjsgdGhlbgogCWNvbXBpbGVfY29tbWFuZD0iJHNobGlicGF0aF92YXI9XCIkY29tcGlsZV9zaGxpYnBhdGgkZmluYWxpemVfc2hsaWJwYXRoXCQkc2hsaWJwYXRoX3ZhclwiICRjb21waWxlX2NvbW1hbmQiCiAgICAgICBmaQpAQCAtNDg0Niw3ICs4OTE0LDcgQEAKIAkgICMgV2Ugc2hvdWxkIHNldCB0aGUgcnVucGF0aF92YXIuCiAJICBycGF0aD0KIAkgIGZvciBkaXIgaW4gJHBlcm1fcnBhdGg7IGRvCi0JICAgIHJwYXRoPSIkcnBhdGgkZGlyOiIKKwkgICAgZnVuY19hcHBlbmQgcnBhdGggIiRkaXI6IgogCSAgZG9uZQogCSAgY29tcGlsZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgogCWZpCkBAIC00ODU0LDcgKzg5MjIsNyBAQAogCSAgIyBXZSBzaG91bGQgc2V0IHRoZSBydW5wYXRoX3Zhci4KIAkgIHJwYXRoPQogCSAgZm9yIGRpciBpbiAkZmluYWxpemVfcGVybV9ycGF0aDsgZG8KLQkgICAgcnBhdGg9IiRycGF0aCRkaXI6IgorCSAgICBmdW5jX2FwcGVuZCBycGF0aCAiJGRpcjoiCiAJICBkb25lCiAJICBmaW5hbGl6ZV92YXI9IiRydW5wYXRoX3Zhcj1cIiRycGF0aFwkJHJ1bnBhdGhfdmFyXCIgIgogCWZpCkBAIC00ODY0LDEyICs4OTMyLDE4IEBACiAJIyBXZSBkb24ndCBuZWVkIHRvIGNyZWF0ZSBhIHdyYXBwZXIgc2NyaXB0LgogCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgogCSMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLQlsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGxpbmtfY29tbWFuZCIgfCAkWHNlZCAtZSAncyVAT1VUUFVUQCUnIiRvdXRwdXQiJyVnJ2AKKwlsaW5rX2NvbW1hbmQ9YCRFQ0hPICIkbGlua19jb21tYW5kIiB8ICRTRUQgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZydgCiAJIyBEZWxldGUgdGhlIG9sZCBvdXRwdXQgZmlsZS4KLQkkcnVuICRybSAkb3V0cHV0CisJJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0CiAJIyBMaW5rIHRoZSBleGVjdXRhYmxlIGFuZCBleGl0Ci0JJHNob3cgIiRsaW5rX2NvbW1hbmQiCi0JJHJ1biBldmFsICIkbGlua19jb21tYW5kIiB8fCBleGl0ICQ/CisJZnVuY19zaG93X2V2YWwgIiRsaW5rX2NvbW1hbmQiICdleGl0ICQ/JworCisJaWYgdGVzdCAtbiAiJHBvc3RsaW5rX2NtZHMiOyB0aGVuCisJICBmdW5jX3RvX3Rvb2xfZmlsZSAiJG91dHB1dCIKKwkgIHBvc3RsaW5rX2NtZHM9YGZ1bmNfZWNob19hbGwgIiRwb3N0bGlua19jbWRzIiB8ICRTRUQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0IiclZycgLWUgJ3MlQFRPT0xfT1VUUFVUQCUnIiRmdW5jX3RvX3Rvb2xfZmlsZV9yZXN1bHQiJyVnJ2AKKwkgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisJZmkKKwogCWV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICAgZmkKIApAQCAtNDg3OCwxMyArODk1MiwxMyBAQAogCWxpbmtfY29tbWFuZD0iJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIgogCXJlbGlua19jb21tYW5kPSIkZmluYWxpemVfdmFyJGZpbmFsaXplX2NvbW1hbmQkZmluYWxpemVfcnBhdGgiCiAKLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiB0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIgMT4mMgotCSRlY2hvICIkbW9kZW5hbWU6IFxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIiAxPiYyCisJZnVuY193YXJuaW5nICJ0aGlzIHBsYXRmb3JtIGRvZXMgbm90IGxpa2UgdW5pbnN0YWxsZWQgc2hhcmVkIGxpYnJhcmllcyIKKwlmdW5jX3dhcm5pbmcgIlxgJG91dHB1dCcgd2lsbCBiZSByZWxpbmtlZCBkdXJpbmcgaW5zdGFsbGF0aW9uIgogICAgICAgZWxzZQogCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiICE9IG5vOyB0aGVuCiAJICBsaW5rX2NvbW1hbmQ9IiRmaW5hbGl6ZV92YXIkY29tcGlsZV9jb21tYW5kJGZpbmFsaXplX3JwYXRoIgogCSAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXM7IHRoZW4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTUDJOTCB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJVwkcHJvZ2Rpci9cJGZpbGUlZycgfCAkTkwyU1BgCisJICAgIHJlbGlua19jb21tYW5kPWAkRUNITyAiJGNvbXBpbGVfdmFyJGNvbXBpbGVfY29tbWFuZCRjb21waWxlX3JwYXRoIiB8ICRTRUQgJ3MlQE9VVFBVVEAlXCRwcm9nZGlyL1wkZmlsZSVnJ2AKIAkgIGVsc2UKIAkgICAgIyBmYXN0X2luc3RhbGwgaXMgc2V0IHRvIG5lZWRsZXNzCiAJICAgIHJlbGlua19jb21tYW5kPQpAQCAtNDg5Niw2MDggKzg5NzAsOTggQEAKICAgICAgIGZpCiAKICAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLSAgICAgIGxpbmtfY29tbWFuZD1gJGVjaG8gIlgkbGlua19jb21tYW5kIiB8ICRYc2VkIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJ2AKKyAgICAgIGxpbmtfY29tbWFuZD1gJEVDSE8gIiRsaW5rX2NvbW1hbmQiIHwgJFNFRCAncyVAT1VUUFVUQCUnIiRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lIiclZydgCiAKICAgICAgICMgRGVsZXRlIHRoZSBvbGQgb3V0cHV0IGZpbGVzLgotICAgICAgJHJ1biAkcm0gJG91dHB1dCAkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSAkb3V0cHV0X29iamRpci9sdC0kb3V0cHV0bmFtZQorICAgICAgJG9wdF9kcnlfcnVuIHx8ICRSTSAkb3V0cHV0ICRvdXRwdXRfb2JqZGlyLyRvdXRwdXRuYW1lICRvdXRwdXRfb2JqZGlyL2x0LSRvdXRwdXRuYW1lCiAKLSAgICAgICRzaG93ICIkbGlua19jb21tYW5kIgotICAgICAgJHJ1biBldmFsICIkbGlua19jb21tYW5kIiB8fCBleGl0ICQ/CisgICAgICBmdW5jX3Nob3dfZXZhbCAiJGxpbmtfY29tbWFuZCIgJ2V4aXQgJD8nCisKKyAgICAgIGlmIHRlc3QgLW4gIiRwb3N0bGlua19jbWRzIjsgdGhlbgorCWZ1bmNfdG9fdG9vbF9maWxlICIkb3V0cHV0X29iamRpci8kb3V0cHV0bmFtZSIKKwlwb3N0bGlua19jbWRzPWBmdW5jX2VjaG9fYWxsICIkcG9zdGxpbmtfY21kcyIgfCAkU0VEIC1lICdzJUBPVVRQVVRAJSciJG91dHB1dF9vYmpkaXIvJG91dHB1dG5hbWUiJyVnJyAtZSAncyVAVE9PTF9PVVRQVVRAJSciJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCInJWcnYAorCWZ1bmNfZXhlY3V0ZV9jbWRzICIkcG9zdGxpbmtfY21kcyIgJ2V4aXQgJD8nCisgICAgICBmaQogCiAgICAgICAjIE5vdyBjcmVhdGUgdGhlIHdyYXBwZXIgc2NyaXB0LgotICAgICAgJHNob3cgImNyZWF0aW5nICRvdXRwdXQiCisgICAgICBmdW5jX3ZlcmJvc2UgImNyZWF0aW5nICRvdXRwdXQiCiAKICAgICAgICMgUXVvdGUgdGhlIHJlbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KICAgICAgIGlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KIAkjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCiAJZm9yIHZhciBpbiAkdmFyaWFibGVzX3NhdmVkX2Zvcl9yZWxpbms7IGRvCiAJICBpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgotCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgorCSAgICByZWxpbmtfY29tbWFuZD0ieyB0ZXN0IC16IFwiXCR7JHZhcitzZXR9XCIgfHwgJGx0X3Vuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKIAkgIGVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgogCSAgICByZWxpbmtfY29tbWFuZD0iJHZhcj07IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCiAJICBlbHNlCi0JICAgIHZhcl92YWx1ZT1gJGVjaG8gIlgkdmFyX3ZhbHVlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQkgICAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9XCIkdmFyX3ZhbHVlXCI7IGV4cG9ydCAkdmFyOyAkcmVsaW5rX2NvbW1hbmQiCisJICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR2YXJfdmFsdWUiCisJICAgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKIAkgIGZpCiAJZG9uZQogCXJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRyZWxpbmtfY29tbWFuZCkiCi0JcmVsaW5rX2NvbW1hbmQ9YCRlY2hvICJYJHJlbGlua19jb21tYW5kIiB8ICRTUDJOTCB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0IiB8ICROTDJTUGAKKwlyZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKICAgICAgIGZpCiAKLSAgICAgICMgUXVvdGUgJGVjaG8gZm9yIHNoaXBwaW5nLgotICAgICAgaWYgdGVzdCAiWCRlY2hvIiA9ICJYJFNIRUxMICRwcm9ncGF0aCAtLWZhbGxiYWNrLWVjaG8iOyB0aGVuCi0JY2FzZSAkcHJvZ3BhdGggaW4KLQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIHFlY2hvPSIkU0hFTEwgJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OwotCSopIHFlY2hvPSIkU0hFTEwgYHB3ZGAvJHByb2dwYXRoIC0tZmFsbGJhY2stZWNobyI7OwotCWVzYWMKLQlxZWNobz1gJGVjaG8gIlgkcWVjaG8iIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgZWxzZQotCXFlY2hvPWAkZWNobyAiWCRlY2hvIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGZpCi0KLSAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgb3VyIHJ1biBjb21tYW5kIGlzIG5vbi1udWxsLgotICAgICAgaWYgdGVzdCAteiAiJHJ1biI7IHRoZW4KKyAgICAgICMgT25seSBhY3R1YWxseSBkbyB0aGluZ3MgaWYgbm90IGluIGRyeSBydW4gbW9kZS4KKyAgICAgICRvcHRfZHJ5X3J1biB8fCB7CiAJIyB3aW4zMiB3aWxsIHRoaW5rIHRoZSBzY3JpcHQgaXMgYSBiaW5hcnkgaWYgaXQgaGFzCiAJIyBhIC5leGUgc3VmZml4LCBzbyB3ZSBzdHJpcCBpdCBvZmYgaGVyZS4KIAljYXNlICRvdXRwdXQgaW4KLQkgICouZXhlKSBvdXRwdXQ9YCRlY2hvICRvdXRwdXR8JHtTRUR9ICdzLC5leGUkLCwnYCA7OworCSAgKi5leGUpIGZ1bmNfc3RyaXBuYW1lICcnICcuZXhlJyAiJG91dHB1dCIKKwkgICAgICAgICBvdXRwdXQ9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OwogCWVzYWMKIAkjIHRlc3QgZm9yIGN5Z3dpbiBiZWNhdXNlIG12IGZhaWxzIHcvbyAuZXhlIGV4dGVuc2lvbnMKIAljYXNlICRob3N0IGluCiAJICAqY3lnd2luKikKIAkgICAgZXhlZXh0PS5leGUKLQkgICAgb3V0cHV0bmFtZT1gJGVjaG8gJG91dHB1dG5hbWV8JHtTRUR9ICdzLC5leGUkLCwnYCA7OworCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRvdXRwdXRuYW1lIgorCSAgICBvdXRwdXRuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKIAkgICopIGV4ZWV4dD0gOzsKIAllc2FjCiAJY2FzZSAkaG9zdCBpbgogCSAgKmN5Z3dpbiogfCAqbWluZ3cqICkKLSAgICAgICAgICAgIG91dHB1dF9uYW1lPWBiYXNlbmFtZSAkb3V0cHV0YAotICAgICAgICAgICAgb3V0cHV0X3BhdGg9YGRpcm5hbWUgJG91dHB1dGAKLSAgICAgICAgICAgIGN3cmFwcGVyc291cmNlPSIkb3V0cHV0X3BhdGgvJG9iamRpci9sdC0kb3V0cHV0X25hbWUuYyIKLSAgICAgICAgICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKLSAgICAgICAgICAgICRybSAkY3dyYXBwZXJzb3VyY2UgJGN3cmFwcGVyCi0gICAgICAgICAgICB0cmFwICIkcm0gJGN3cmFwcGVyc291cmNlICRjd3JhcHBlcjsgZXhpdCAkRVhJVF9GQUlMVVJFIiAxIDIgMTUKKwkgICAgZnVuY19kaXJuYW1lX2FuZF9iYXNlbmFtZSAiJG91dHB1dCIgIiIgIi4iCisJICAgIG91dHB1dF9uYW1lPSRmdW5jX2Jhc2VuYW1lX3Jlc3VsdAorCSAgICBvdXRwdXRfcGF0aD0kZnVuY19kaXJuYW1lX3Jlc3VsdAorCSAgICBjd3JhcHBlcnNvdXJjZT0iJG91dHB1dF9wYXRoLyRvYmpkaXIvbHQtJG91dHB1dF9uYW1lLmMiCisJICAgIGN3cmFwcGVyPSIkb3V0cHV0X3BhdGgvJG91dHB1dF9uYW1lLmV4ZSIKKwkgICAgJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXIKKwkgICAgdHJhcCAiJFJNICRjd3JhcHBlcnNvdXJjZSAkY3dyYXBwZXI7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CiAKLQkgICAgY2F0ID4gJGN3cmFwcGVyc291cmNlIDw8RU9GCisJICAgIGZ1bmNfZW1pdF9jd3JhcHBlcmV4ZV9zcmMgPiAkY3dyYXBwZXJzb3VyY2UKIAotLyogJGN3cmFwcGVyc291cmNlIC0gdGVtcG9yYXJ5IHdyYXBwZXIgZXhlY3V0YWJsZSBmb3IgJG9iamRpci8kb3V0cHV0bmFtZQotICAgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAorCSAgICAjIFRoZSB3cmFwcGVyIGV4ZWN1dGFibGUgaXMgYnVpbHQgdXNpbmcgdGhlICRob3N0IGNvbXBpbGVyLAorCSAgICAjIGJlY2F1c2UgaXQgY29udGFpbnMgJGhvc3QgcGF0aHMgYW5kIGZpbGVzLiBJZiBjcm9zcy0KKwkgICAgIyBjb21waWxpbmcsIGl0LCBsaWtlIHRoZSB0YXJnZXQgZXhlY3V0YWJsZSwgbXVzdCBiZQorCSAgICAjIGV4ZWN1dGVkIG9uIHRoZSAkaG9zdCBvciB1bmRlciBhbiBlbXVsYXRpb24gZW52aXJvbm1lbnQuCisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgJExUQ0MgJExUQ0ZMQUdTIC1vICRjd3JhcHBlciAkY3dyYXBwZXJzb3VyY2UKKwkgICAgICAkU1RSSVAgJGN3cmFwcGVyCisJICAgIH0KIAotICAgVGhlICRvdXRwdXQgcHJvZ3JhbSBjYW5ub3QgYmUgZGlyZWN0bHkgZXhlY3V0ZWQgdW50aWwgYWxsIHRoZSBsaWJ0b29sCi0gICBsaWJyYXJpZXMgdGhhdCBpdCBkZXBlbmRzIG9uIGFyZSBpbnN0YWxsZWQuCi0KLSAgIFRoaXMgd3JhcHBlciBleGVjdXRhYmxlIHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSAgIElmIGl0IGlzLCBpdCB3aWxsIG5vdCBvcGVyYXRlIGNvcnJlY3RseS4KLQotICAgQ3VycmVudGx5LCBpdCBzaW1wbHkgZXhlY3MgdGhlIHdyYXBwZXIgKnNjcmlwdCogIi9iaW4vc2ggJG91dHB1dCIsCi0gICBidXQgY291bGQgZXZlbnR1YWxseSBhYnNvcmIgYWxsIG9mIHRoZSBzY3JpcHRzIGZ1bmN0aW9uYWxpdHkgYW5kCi0gICBleGVjICRvYmpkaXIvJG91dHB1dG5hbWUgZGlyZWN0bHkuCi0qLwotRU9GCi0JICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2U8PCJFT0YiCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNpbmNsdWRlIDxtYWxsb2MuaD4KLSNpbmNsdWRlIDxzdGRhcmcuaD4KLSNpbmNsdWRlIDxhc3NlcnQuaD4KLSNpbmNsdWRlIDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Ci0KLSNpZiBkZWZpbmVkKFBBVEhfTUFYKQotIyBkZWZpbmUgTFRfUEFUSE1BWCBQQVRIX01BWAotI2VsaWYgZGVmaW5lZChNQVhQQVRITEVOKQotIyBkZWZpbmUgTFRfUEFUSE1BWCBNQVhQQVRITEVOCi0jZWxzZQotIyBkZWZpbmUgTFRfUEFUSE1BWCAxMDI0Ci0jZW5kaWYKLQotI2lmbmRlZiBESVJfU0VQQVJBVE9SCi0jIGRlZmluZSBESVJfU0VQQVJBVE9SICcvJwotIyBkZWZpbmUgUEFUSF9TRVBBUkFUT1IgJzonCi0jZW5kaWYKLQotI2lmIGRlZmluZWQgKF9XSU4zMikgfHwgZGVmaW5lZCAoX19NU0RPU19fKSB8fCBkZWZpbmVkIChfX0RKR1BQX18pIHx8IFwKLSAgZGVmaW5lZCAoX19PUzJfXykKLSMgZGVmaW5lIEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNCi0jIGlmbmRlZiBESVJfU0VQQVJBVE9SXzIKLSMgIGRlZmluZSBESVJfU0VQQVJBVE9SXzIgJ1xcJwotIyBlbmRpZgotIyBpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgotIyAgZGVmaW5lIFBBVEhfU0VQQVJBVE9SXzIgJzsnCi0jIGVuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBESVJfU0VQQVJBVE9SXzIKLSMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpICgoY2gpID09IERJUl9TRVBBUkFUT1IpCi0jZWxzZSAvKiBESVJfU0VQQVJBVE9SXzIgKi8KLSMgZGVmaW5lIElTX0RJUl9TRVBBUkFUT1IoY2gpIFwKLSAgICAgICAgKCgoY2gpID09IERJUl9TRVBBUkFUT1IpIHx8ICgoY2gpID09IERJUl9TRVBBUkFUT1JfMikpCi0jZW5kaWYgLyogRElSX1NFUEFSQVRPUl8yICovCi0KLSNpZm5kZWYgUEFUSF9TRVBBUkFUT1JfMgotIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SKQotI2Vsc2UgLyogUEFUSF9TRVBBUkFUT1JfMiAqLwotIyBkZWZpbmUgSVNfUEFUSF9TRVBBUkFUT1IoY2gpICgoY2gpID09IFBBVEhfU0VQQVJBVE9SXzIpCi0jZW5kaWYgLyogUEFUSF9TRVBBUkFUT1JfMiAqLwotCi0jZGVmaW5lIFhNQUxMT0ModHlwZSwgbnVtKSAgICAgICgodHlwZSAqKSB4bWFsbG9jICgobnVtKSAqIHNpemVvZih0eXBlKSkpCi0jZGVmaW5lIFhGUkVFKHN0YWxlKSBkbyB7IFwKLSAgaWYgKHN0YWxlKSB7IGZyZWUgKCh2b2lkICopIHN0YWxlKTsgc3RhbGUgPSAwOyB9IFwKLX0gd2hpbGUgKDApCi0KLS8qIC1EREVCVUcgaXMgZmFpcmx5IGNvbW1vbiBpbiBDRkxBR1MuICAqLwotI3VuZGVmIERFQlVHCi0jaWYgZGVmaW5lZCBERUJVR1dSQVBQRVIKLSMgZGVmaW5lIERFQlVHKGZvcm1hdCwgLi4uKSBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0LCBfX1ZBX0FSR1NfXykKLSNlbHNlCi0jIGRlZmluZSBERUJVRyhmb3JtYXQsIC4uLikKLSNlbmRpZgotCi1jb25zdCBjaGFyICpwcm9ncmFtX25hbWUgPSBOVUxMOwotCi12b2lkICogeG1hbGxvYyAoc2l6ZV90IG51bSk7Ci1jaGFyICogeHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKTsKLWNvbnN0IGNoYXIgKiBiYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpOwotY2hhciAqIGZpbmRfZXhlY3V0YWJsZShjb25zdCBjaGFyICp3cmFwcGVyKTsKLWludCAgICBjaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKnBhdGgpOwotY2hhciAqIHN0cmVuZHphcChjaGFyICpzdHIsIGNvbnN0IGNoYXIgKnBhdCk7Ci12b2lkIGx0X2ZhdGFsIChjb25zdCBjaGFyICptZXNzYWdlLCAuLi4pOwotCi1pbnQKLW1haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCi17Ci0gIGNoYXIgKipuZXdhcmd6OwotICBpbnQgaTsKLQotICBwcm9ncmFtX25hbWUgPSAoY2hhciAqKSB4c3RyZHVwIChiYXNlX25hbWUgKGFyZ3ZbMF0pKTsKLSAgREVCVUcoIihtYWluKSBhcmd2WzBdICAgICAgOiAlc1xuIixhcmd2WzBdKTsKLSAgREVCVUcoIihtYWluKSBwcm9ncmFtX25hbWUgOiAlc1xuIixwcm9ncmFtX25hbWUpOwotICBuZXdhcmd6ID0gWE1BTExPQyhjaGFyICosIGFyZ2MrMik7Ci1FT0YKLQotICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PEVPRgotICBuZXdhcmd6WzBdID0gKGNoYXIgKikgeHN0cmR1cCgiJFNIRUxMIik7Ci1FT0YKLQotICAgICAgICAgICAgY2F0ID4+ICRjd3JhcHBlcnNvdXJjZSA8PCJFT0YiCi0gIG5ld2FyZ3pbMV0gPSBmaW5kX2V4ZWN1dGFibGUoYXJndlswXSk7Ci0gIGlmIChuZXdhcmd6WzFdID09IE5VTEwpCi0gICAgbHRfZmF0YWwoIkNvdWxkbid0IGZpbmQgJXMiLCBhcmd2WzBdKTsKLSAgREVCVUcoIihtYWluKSBmb3VuZCBleGUgYXQgOiAlc1xuIixuZXdhcmd6WzFdKTsKLSAgLyogd2Uga25vdyB0aGUgc2NyaXB0IGhhcyB0aGUgc2FtZSBuYW1lLCB3aXRob3V0IHRoZSAuZXhlICovCi0gIC8qIHNvIG1ha2Ugc3VyZSBuZXdhcmd6WzFdIGRvZXNuJ3QgZW5kIGluIC5leGUgKi8KLSAgc3RyZW5kemFwKG5ld2FyZ3pbMV0sIi5leGUiKTsKLSAgZm9yIChpID0gMTsgaSA8IGFyZ2M7IGkrKykKLSAgICBuZXdhcmd6W2krMV0gPSB4c3RyZHVwKGFyZ3ZbaV0pOwotICBuZXdhcmd6W2FyZ2MrMV0gPSBOVUxMOwotCi0gIGZvciAoaT0wOyBpPGFyZ2MrMTsgaSsrKQotICB7Ci0gICAgREVCVUcoIihtYWluKSBuZXdhcmd6WyVkXSAgIDogJXNcbiIsaSxuZXdhcmd6W2ldKTsKLSAgICA7Ci0gIH0KLQotRU9GCi0KLSAgICAgICAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KLSAgICAgICAgICAgICAgbWluZ3cqKQotICAgICAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDxFT0YKLSAgZXhlY3YoIiRTSEVMTCIsKGNoYXIgY29uc3QgKiopbmV3YXJneik7Ci1FT0YKLSAgICAgICAgICAgICAgOzsKLSAgICAgICAgICAgICAgKikKLSAgICAgICAgICAgICAgICBjYXQgPj4gJGN3cmFwcGVyc291cmNlIDw8RU9GCi0gIGV4ZWN2KCIkU0hFTEwiLG5ld2FyZ3opOwotRU9GCi0gICAgICAgICAgICAgIDs7Ci0gICAgICAgICAgICBlc2FjCi0KLSAgICAgICAgICAgIGNhdCA+PiAkY3dyYXBwZXJzb3VyY2UgPDwiRU9GIgotICByZXR1cm4gMTI3OwotfQotCi12b2lkICoKLXhtYWxsb2MgKHNpemVfdCBudW0pCi17Ci0gIHZvaWQgKiBwID0gKHZvaWQgKikgbWFsbG9jIChudW0pOwotICBpZiAoIXApCi0gICAgbHRfZmF0YWwgKCJNZW1vcnkgZXhoYXVzdGVkIik7Ci0KLSAgcmV0dXJuIHA7Ci19Ci0KLWNoYXIgKgoteHN0cmR1cCAoY29uc3QgY2hhciAqc3RyaW5nKQotewotICByZXR1cm4gc3RyaW5nID8gc3RyY3B5ICgoY2hhciAqKSB4bWFsbG9jIChzdHJsZW4gKHN0cmluZykgKyAxKSwgc3RyaW5nKSA6IE5VTEwKLTsKLX0KLQotY29uc3QgY2hhciAqCi1iYXNlX25hbWUgKGNvbnN0IGNoYXIgKm5hbWUpCi17Ci0gIGNvbnN0IGNoYXIgKmJhc2U7Ci0KLSNpZiBkZWZpbmVkIChIQVZFX0RPU19CQVNFRF9GSUxFX1NZU1RFTSkKLSAgLyogU2tpcCBvdmVyIHRoZSBkaXNrIG5hbWUgaW4gTVNET1MgcGF0aG5hbWVzLiAqLwotICBpZiAoaXNhbHBoYSAoKHVuc2lnbmVkIGNoYXIpbmFtZVswXSkgJiYgbmFtZVsxXSA9PSAnOicpCi0gICAgbmFtZSArPSAyOwotI2VuZGlmCi0KLSAgZm9yIChiYXNlID0gbmFtZTsgKm5hbWU7IG5hbWUrKykKLSAgICBpZiAoSVNfRElSX1NFUEFSQVRPUiAoKm5hbWUpKQotICAgICAgYmFzZSA9IG5hbWUgKyAxOwotICByZXR1cm4gYmFzZTsKLX0KLQotaW50Ci1jaGVja19leGVjdXRhYmxlKGNvbnN0IGNoYXIgKiBwYXRoKQotewotICBzdHJ1Y3Qgc3RhdCBzdDsKLQotICBERUJVRygiKGNoZWNrX2V4ZWN1dGFibGUpICA6ICVzXG4iLCBwYXRoID8gKCpwYXRoID8gcGF0aCA6ICJFTVBUWSEiKSA6ICJOVUxMISIpOwotICBpZiAoKCFwYXRoKSB8fCAoISpwYXRoKSkKLSAgICByZXR1cm4gMDsKLQotICBpZiAoKHN0YXQgKHBhdGgsICZzdCkgPj0gMCkgJiYKLSAgICAgICgKLSAgICAgICAgLyogTWluR1cgJiBuYXRpdmUgV0lOMzIgZG8gbm90IHN1cHBvcnQgU19JWE9USCBvciBTX0lYR1JQICovCi0jaWYgZGVmaW5lZCAoU19JWE9USCkKLSAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYT1RIKSA9PSBTX0lYT1RIKSB8fAotI2VuZGlmCi0jaWYgZGVmaW5lZCAoU19JWEdSUCkKLSAgICAgICAoKHN0LnN0X21vZGUgJiBTX0lYR1JQKSA9PSBTX0lYR1JQKSB8fAotI2VuZGlmCi0gICAgICAgKChzdC5zdF9tb2RlICYgU19JWFVTUikgPT0gU19JWFVTUikpCi0gICAgICApCi0gICAgcmV0dXJuIDE7Ci0gIGVsc2UKLSAgICByZXR1cm4gMDsKLX0KLQotLyogU2VhcmNoZXMgZm9yIHRoZSBmdWxsIHBhdGggb2YgdGhlIHdyYXBwZXIuICBSZXR1cm5zCi0gICBuZXdseSBhbGxvY2F0ZWQgZnVsbCBwYXRoIG5hbWUgaWYgZm91bmQsIE5VTEwgb3RoZXJ3aXNlICovCi1jaGFyICoKLWZpbmRfZXhlY3V0YWJsZSAoY29uc3QgY2hhciogd3JhcHBlcikKLXsKLSAgaW50IGhhc19zbGFzaCA9IDA7Ci0gIGNvbnN0IGNoYXIqIHA7Ci0gIGNvbnN0IGNoYXIqIHBfbmV4dDsKLSAgLyogc3RhdGljIGJ1ZmZlciBmb3IgZ2V0Y3dkICovCi0gIGNoYXIgdG1wW0xUX1BBVEhNQVggKyAxXTsKLSAgaW50IHRtcF9sZW47Ci0gIGNoYXIqIGNvbmNhdF9uYW1lOwotCi0gIERFQlVHKCIoZmluZF9leGVjdXRhYmxlKSAgOiAlc1xuIiwgd3JhcHBlciA/ICgqd3JhcHBlciA/IHdyYXBwZXIgOiAiRU1QVFkhIikgOiAiTlVMTCEiKTsKLQotICBpZiAoKHdyYXBwZXIgPT0gTlVMTCkgfHwgKCp3cmFwcGVyID09ICdcMCcpKQotICAgIHJldHVybiBOVUxMOwotCi0gIC8qIEFic29sdXRlIHBhdGg/ICovCi0jaWYgZGVmaW5lZCAoSEFWRV9ET1NfQkFTRURfRklMRV9TWVNURU0pCi0gIGlmIChpc2FscGhhICgodW5zaWduZWQgY2hhcil3cmFwcGVyWzBdKSAmJiB3cmFwcGVyWzFdID09ICc6JykKLSAgewotICAgIGNvbmNhdF9uYW1lID0geHN0cmR1cCAod3JhcHBlcik7Ci0gICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQotICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOwotICAgIFhGUkVFKGNvbmNhdF9uYW1lKTsKLSAgfQotICBlbHNlCi0gIHsKLSNlbmRpZgotICAgIGlmIChJU19ESVJfU0VQQVJBVE9SICh3cmFwcGVyWzBdKSkKLSAgICB7Ci0gICAgICBjb25jYXRfbmFtZSA9IHhzdHJkdXAgKHdyYXBwZXIpOwotICAgICAgaWYgKGNoZWNrX2V4ZWN1dGFibGUoY29uY2F0X25hbWUpKQotICAgICAgICByZXR1cm4gY29uY2F0X25hbWU7Ci0gICAgICBYRlJFRShjb25jYXRfbmFtZSk7Ci0gICAgfQotI2lmIGRlZmluZWQgKEhBVkVfRE9TX0JBU0VEX0ZJTEVfU1lTVEVNKQotICB9Ci0jZW5kaWYKLQotICBmb3IgKHAgPSB3cmFwcGVyOyAqcDsgcCsrKQotICAgIGlmICgqcCA9PSAnLycpCi0gICAgewotICAgICAgaGFzX3NsYXNoID0gMTsKLSAgICAgIGJyZWFrOwotICAgIH0KLSAgaWYgKCFoYXNfc2xhc2gpCi0gIHsKLSAgICAvKiBubyBzbGFzaGVzOyBzZWFyY2ggUEFUSCAqLwotICAgIGNvbnN0IGNoYXIqIHBhdGggPSBnZXRlbnYgKCJQQVRIIik7Ci0gICAgaWYgKHBhdGggIT0gTlVMTCkKLSAgICB7Ci0gICAgICBmb3IgKHAgPSBwYXRoOyAqcDsgcCA9IHBfbmV4dCkKLSAgICAgIHsKLSAgICAgICAgY29uc3QgY2hhciogcTsKLSAgICAgICAgc2l6ZV90IHBfbGVuOwotICAgICAgICBmb3IgKHEgPSBwOyAqcTsgcSsrKQotICAgICAgICAgIGlmIChJU19QQVRIX1NFUEFSQVRPUigqcSkpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgcF9sZW4gPSBxIC0gcDsKLSAgICAgICAgcF9uZXh0ID0gKCpxID09ICdcMCcgPyBxIDogcSArIDEpOwotICAgICAgICBpZiAocF9sZW4gPT0gMCkKLSAgICAgICAgewotICAgICAgICAgIC8qIGVtcHR5IHBhdGg6IGN1cnJlbnQgZGlyZWN0b3J5ICovCi0gICAgICAgICAgaWYgKGdldGN3ZCAodG1wLCBMVF9QQVRITUFYKSA9PSBOVUxMKQotICAgICAgICAgICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7Ci0gICAgICAgICAgdG1wX2xlbiA9IHN0cmxlbih0bXApOwotICAgICAgICAgIGNvbmNhdF9uYW1lID0gWE1BTExPQyhjaGFyLCB0bXBfbGVuICsgMSArIHN0cmxlbih3cmFwcGVyKSArIDEpOwotICAgICAgICAgIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7Ci0gICAgICAgICAgY29uY2F0X25hbWVbdG1wX2xlbl0gPSAnLyc7Ci0gICAgICAgICAgc3RyY3B5IChjb25jYXRfbmFtZSArIHRtcF9sZW4gKyAxLCB3cmFwcGVyKTsKLSAgICAgICAgfQotICAgICAgICBlbHNlCi0gICAgICAgIHsKLSAgICAgICAgICBjb25jYXRfbmFtZSA9IFhNQUxMT0MoY2hhciwgcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7Ci0gICAgICAgICAgbWVtY3B5IChjb25jYXRfbmFtZSwgcCwgcF9sZW4pOwotICAgICAgICAgIGNvbmNhdF9uYW1lW3BfbGVuXSA9ICcvJzsKLSAgICAgICAgICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgcF9sZW4gKyAxLCB3cmFwcGVyKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoY2hlY2tfZXhlY3V0YWJsZShjb25jYXRfbmFtZSkpCi0gICAgICAgICAgcmV0dXJuIGNvbmNhdF9uYW1lOwotICAgICAgICBYRlJFRShjb25jYXRfbmFtZSk7Ci0gICAgICB9Ci0gICAgfQotICAgIC8qIG5vdCBmb3VuZCBpbiBQQVRIOyBhc3N1bWUgY3VyZGlyICovCi0gIH0KLSAgLyogUmVsYXRpdmUgcGF0aCB8IG5vdCBmb3VuZCBpbiBwYXRoOiBwcmVwZW5kIGN3ZCAqLwotICBpZiAoZ2V0Y3dkICh0bXAsIExUX1BBVEhNQVgpID09IE5VTEwpCi0gICAgbHRfZmF0YWwgKCJnZXRjd2QgZmFpbGVkIik7Ci0gIHRtcF9sZW4gPSBzdHJsZW4odG1wKTsKLSAgY29uY2F0X25hbWUgPSBYTUFMTE9DKGNoYXIsIHRtcF9sZW4gKyAxICsgc3RybGVuKHdyYXBwZXIpICsgMSk7Ci0gIG1lbWNweSAoY29uY2F0X25hbWUsIHRtcCwgdG1wX2xlbik7Ci0gIGNvbmNhdF9uYW1lW3RtcF9sZW5dID0gJy8nOwotICBzdHJjcHkgKGNvbmNhdF9uYW1lICsgdG1wX2xlbiArIDEsIHdyYXBwZXIpOwotCi0gIGlmIChjaGVja19leGVjdXRhYmxlKGNvbmNhdF9uYW1lKSkKLSAgICByZXR1cm4gY29uY2F0X25hbWU7Ci0gIFhGUkVFKGNvbmNhdF9uYW1lKTsKLSAgcmV0dXJuIE5VTEw7Ci19Ci0KLWNoYXIgKgotc3RyZW5kemFwKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqcGF0KQotewotICBzaXplX3QgbGVuLCBwYXRsZW47Ci0KLSAgYXNzZXJ0KHN0ciAhPSBOVUxMKTsKLSAgYXNzZXJ0KHBhdCAhPSBOVUxMKTsKLQotICBsZW4gPSBzdHJsZW4oc3RyKTsKLSAgcGF0bGVuID0gc3RybGVuKHBhdCk7Ci0KLSAgaWYgKHBhdGxlbiA8PSBsZW4pCi0gIHsKLSAgICBzdHIgKz0gbGVuIC0gcGF0bGVuOwotICAgIGlmIChzdHJjbXAoc3RyLCBwYXQpID09IDApCi0gICAgICAqc3RyID0gJ1wwJzsKLSAgfQotICByZXR1cm4gc3RyOwotfQotCi1zdGF0aWMgdm9pZAotbHRfZXJyb3JfY29yZSAoaW50IGV4aXRfc3RhdHVzLCBjb25zdCBjaGFyICogbW9kZSwKLSAgICAgICAgICBjb25zdCBjaGFyICogbWVzc2FnZSwgdmFfbGlzdCBhcCkKLXsKLSAgZnByaW50ZiAoc3RkZXJyLCAiJXM6ICVzOiAiLCBwcm9ncmFtX25hbWUsIG1vZGUpOwotICB2ZnByaW50ZiAoc3RkZXJyLCBtZXNzYWdlLCBhcCk7Ci0gIGZwcmludGYgKHN0ZGVyciwgIi5cbiIpOwotCi0gIGlmIChleGl0X3N0YXR1cyA+PSAwKQotICAgIGV4aXQgKGV4aXRfc3RhdHVzKTsKLX0KLQotdm9pZAotbHRfZmF0YWwgKGNvbnN0IGNoYXIgKm1lc3NhZ2UsIC4uLikKLXsKLSAgdmFfbGlzdCBhcDsKLSAgdmFfc3RhcnQgKGFwLCBtZXNzYWdlKTsKLSAgbHRfZXJyb3JfY29yZSAoRVhJVF9GQUlMVVJFLCAiRkFUQUwiLCBtZXNzYWdlLCBhcCk7Ci0gIHZhX2VuZCAoYXApOwotfQotRU9GCi0gICAgICAgICAgIyB3ZSBzaG91bGQgcmVhbGx5IHVzZSBhIGJ1aWxkLXBsYXRmb3JtIHNwZWNpZmljIGNvbXBpbGVyCi0gICAgICAgICAgIyBoZXJlLCBidXQgT1RPSCwgdGhlIHdyYXBwZXJzIChzaGVsbCBzY3JpcHQgYW5kIHRoaXMgQyBvbmUpCi0gICAgICAgICAgIyBhcmUgb25seSB1c2VmdWwgaWYgeW91IHdhbnQgdG8gZXhlY3V0ZSB0aGUgInJlYWwiIGJpbmFyeS4KLSAgICAgICAgICAjIFNpbmNlIHRoZSAicmVhbCIgYmluYXJ5IGlzIGJ1aWx0IGZvciAkaG9zdCwgdGhlbiB0aGlzCi0gICAgICAgICAgIyB3cmFwcGVyIG1pZ2h0IGFzIHdlbGwgYmUgYnVpbHQgZm9yICRob3N0LCB0b28uCi0gICAgICAgICAgJHJ1biAkTFRDQyAkTFRDRkxBR1MgLXMgLW8gJGN3cmFwcGVyICRjd3JhcHBlcnNvdXJjZQotICAgICAgICAgIDs7Ci0gICAgICAgIGVzYWMKLSAgICAgICAgJHJtICRvdXRwdXQKLSAgICAgICAgdHJhcCAiJHJtICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1Ci0KLQkkZWNobyA+ICRvdXRwdXQgIlwKLSMhICRTSEVMTAotCi0jICRvdXRwdXQgLSB0ZW1wb3Jhcnkgd3JhcHBlciBzY3JpcHQgZm9yICRvYmpkaXIvJG91dHB1dG5hbWUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAotIwotIyBUaGUgJG91dHB1dCBwcm9ncmFtIGNhbm5vdCBiZSBkaXJlY3RseSBleGVjdXRlZCB1bnRpbCBhbGwgdGhlIGxpYnRvb2wKLSMgbGlicmFyaWVzIHRoYXQgaXQgZGVwZW5kcyBvbiBhcmUgaW5zdGFsbGVkLgotIwotIyBUaGlzIHdyYXBwZXIgc2NyaXB0IHNob3VsZCBuZXZlciBiZSBtb3ZlZCBvdXQgb2YgdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLSMgSWYgaXQgaXMsIGl0IHdpbGwgbm90IG9wZXJhdGUgY29ycmVjdGx5LgotCi0jIFNlZCBzdWJzdGl0dXRpb24gdGhhdCBoZWxwcyB1cyBkbyByb2J1c3QgcXVvdGluZy4gIEl0IGJhY2tzbGFzaGlmaWVzCi0jIG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4gZG91YmxlLXF1b3RlZCBzdHJpbmdzLgotWHNlZD0nJHtTRUR9IC1lIDFzL15YLy8nCi1zZWRfcXVvdGVfc3Vic3Q9JyRzZWRfcXVvdGVfc3Vic3QnCi0KLSMgQmUgQm91cm5lIGNvbXBhdGlibGUgKHRha2VuIGZyb20gQXV0b2NvbmY6X0FTX0JPVVJORV9DT01QQVRJQkxFKS4KLWlmIHRlc3QgLW4gXCJcJHtaU0hfVkVSU0lPTitzZXR9XCIgJiYgKGVtdWxhdGUgc2gpID4vZGV2L251bGwgMj4mMTsgdGhlbgotICBlbXVsYXRlIHNoCi0gIE5VTExDTUQ9OgotICAjIFpzaCAzLnggYW5kIDQueCBwZXJmb3JtcyB3b3JkIHNwbGl0dGluZyBvbiBcJHsxK1wiXCRAXCJ9LCB3aGljaAotICAjIGlzIGNvbnRyYXJ5IHRvIG91ciB1c2FnZS4gIERpc2FibGUgdGhpcyBmZWF0dXJlLgotICBhbGlhcyAtZyAnXCR7MStcIlwkQFwifSc9J1wiXCRAXCInCi0gIHNldG9wdCBOT19HTE9CX1NVQlNUCi1lbHNlCi0gIGNhc2UgXGAoc2V0IC1vKSAyPi9kZXYvbnVsbFxgIGluICpwb3NpeCopIHNldCAtbyBwb3NpeDs7IGVzYWMKLWZpCi1CSU5fU0g9eHBnNDsgZXhwb3J0IEJJTl9TSCAjIGZvciBUcnU2NAotRFVBTENBU0U9MTsgZXhwb3J0IERVQUxDQVNFICMgZm9yIE1LUyBzaAotCi0jIFRoZSBIUC1VWCBrc2ggYW5kIFBPU0lYIHNoZWxsIHByaW50IHRoZSB0YXJnZXQgZGlyZWN0b3J5IHRvIHN0ZG91dAotIyBpZiBDRFBBVEggaXMgc2V0LgotKHVuc2V0IENEUEFUSCkgPi9kZXYvbnVsbCAyPiYxICYmIHVuc2V0IENEUEFUSAotCi1yZWxpbmtfY29tbWFuZD1cIiRyZWxpbmtfY29tbWFuZFwiCi0KLSMgVGhpcyBlbnZpcm9ubWVudCB2YXJpYWJsZSBkZXRlcm1pbmVzIG91ciBvcGVyYXRpb24gbW9kZS4KLWlmIHRlc3QgXCJcJGxpYnRvb2xfaW5zdGFsbF9tYWdpY1wiID0gXCIkbWFnaWNcIjsgdGhlbgotICAjIGluc3RhbGwgbW9kZSBuZWVkcyB0aGUgZm9sbG93aW5nIHZhcmlhYmxlOgotICBub3RpbnN0X2RlcGxpYnM9JyRub3RpbnN0X2RlcGxpYnMnCi1lbHNlCi0gICMgV2hlbiB3ZSBhcmUgc291cmNlZCBpbiBleGVjdXRlIG1vZGUsIFwkZmlsZSBhbmQgXCRlY2hvIGFyZSBhbHJlYWR5IHNldC4KLSAgaWYgdGVzdCBcIlwkbGlidG9vbF9leGVjdXRlX21hZ2ljXCIgIT0gXCIkbWFnaWNcIjsgdGhlbgotICAgIGVjaG89XCIkcWVjaG9cIgotICAgIGZpbGU9XCJcJDBcIgotICAgICMgTWFrZSBzdXJlIGVjaG8gd29ya3MuCi0gICAgaWYgdGVzdCBcIlhcJDFcIiA9IFgtLW5vLXJlZXhlYzsgdGhlbgotICAgICAgIyBEaXNjYXJkIHRoZSAtLW5vLXJlZXhlYyBmbGFnLCBhbmQgY29udGludWUuCi0gICAgICBzaGlmdAotICAgIGVsaWYgdGVzdCBcIlhcYChcJGVjaG8gJ1x0JykgMj4vZGV2L251bGxcYFwiID0gJ1hcdCc7IHRoZW4KLSAgICAgICMgWWlwcGVlLCBcJGVjaG8gd29ya3MhCi0gICAgICA6Ci0gICAgZWxzZQotICAgICAgIyBSZXN0YXJ0IHVuZGVyIHRoZSBjb3JyZWN0IHNoZWxsLCBhbmQgdGhlbiBtYXliZSBcJGVjaG8gd2lsbCB3b3JrLgotICAgICAgZXhlYyAkU0hFTEwgXCJcJDBcIiAtLW5vLXJlZXhlYyBcJHsxK1wiXCRAXCJ9Ci0gICAgZmkKLSAgZmlcCi0iCi0JJGVjaG8gPj4gJG91dHB1dCAiXAotCi0gICMgRmluZCB0aGUgZGlyZWN0b3J5IHRoYXQgdGhpcyBzY3JpcHQgbGl2ZXMgaW4uCi0gIHRoaXNkaXI9XGBcJGVjaG8gXCJYXCRmaWxlXCIgfCBcJFhzZWQgLWUgJ3MlL1teL10qJCUlJ1xgCi0gIHRlc3QgXCJ4XCR0aGlzZGlyXCIgPSBcInhcJGZpbGVcIiAmJiB0aGlzZGlyPS4KLQotICAjIEZvbGxvdyBzeW1ib2xpYyBsaW5rcyB1bnRpbCB3ZSBnZXQgdG8gdGhlIHJlYWwgdGhpc2Rpci4KLSAgZmlsZT1cYGxzIC1sZCBcIlwkZmlsZVwiIHwgJHtTRUR9IC1uICdzLy4qLT4gLy9wJ1xgCi0gIHdoaWxlIHRlc3QgLW4gXCJcJGZpbGVcIjsgZG8KLSAgICBkZXN0ZGlyPVxgXCRlY2hvIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJS9bXi9dKlwkJSUnXGAKLQotICAgICMgSWYgdGhlcmUgd2FzIGEgZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBjaGFuZ2UgdGhpc2Rpci4KLSAgICBpZiB0ZXN0IFwieFwkZGVzdGRpclwiICE9IFwieFwkZmlsZVwiOyB0aGVuCi0gICAgICBjYXNlIFwiXCRkZXN0ZGlyXCIgaW4KLSAgICAgIFtcXFxcL10qIHwgW0EtWmEtel06W1xcXFwvXSopIHRoaXNkaXI9XCJcJGRlc3RkaXJcIiA7OwotICAgICAgKikgdGhpc2Rpcj1cIlwkdGhpc2Rpci9cJGRlc3RkaXJcIiA7OwotICAgICAgZXNhYwotICAgIGZpCi0KLSAgICBmaWxlPVxgXCRlY2hvIFwiWFwkZmlsZVwiIHwgXCRYc2VkIC1lICdzJV4uKi8lJSdcYAotICAgIGZpbGU9XGBscyAtbGQgXCJcJHRoaXNkaXIvXCRmaWxlXCIgfCAke1NFRH0gLW4gJ3MvLiotPiAvL3AnXGAKLSAgZG9uZQotCi0gICMgVHJ5IHRvIGdldCB0aGUgYWJzb2x1dGUgZGlyZWN0b3J5IG5hbWUuCi0gIGFic2Rpcj1cYGNkIFwiXCR0aGlzZGlyXCIgJiYgcHdkXGAKLSAgdGVzdCAtbiBcIlwkYWJzZGlyXCIgJiYgdGhpc2Rpcj1cIlwkYWJzZGlyXCIKLSIKLQotCWlmIHRlc3QgIiRmYXN0X2luc3RhbGwiID0geWVzOyB0aGVuCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0gIHByb2dyYW09bHQtJyRvdXRwdXRuYW1lJyRleGVleHQKLSAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKLQotICBpZiB0ZXN0ICEgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCIgfHwgXFwKLSAgICAgeyBmaWxlPVxgbHMgLTFkdCBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcIlwkcHJvZ2Rpci8uLi9cJHByb2dyYW1cIiAyPi9kZXYvbnVsbCB8ICR7U0VEfSAxcVxgOyBcXAotICAgICAgIHRlc3QgXCJYXCRmaWxlXCIgIT0gXCJYXCRwcm9nZGlyL1wkcHJvZ3JhbVwiOyB9OyB0aGVuCi0KLSAgICBmaWxlPVwiXCRcJC1cJHByb2dyYW1cIgotCi0gICAgaWYgdGVzdCAhIC1kIFwiXCRwcm9nZGlyXCI7IHRoZW4KLSAgICAgICRta2RpciBcIlwkcHJvZ2RpclwiCi0gICAgZWxzZQotICAgICAgJHJtIFwiXCRwcm9nZGlyL1wkZmlsZVwiCi0gICAgZmkiCi0KLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLQotICAgICMgcmVsaW5rIGV4ZWN1dGFibGUgaWYgbmVjZXNzYXJ5Ci0gICAgaWYgdGVzdCAtbiBcIlwkcmVsaW5rX2NvbW1hbmRcIjsgdGhlbgotICAgICAgaWYgcmVsaW5rX2NvbW1hbmRfb3V0cHV0PVxgZXZhbCBcJHJlbGlua19jb21tYW5kIDI+JjFcYDsgdGhlbiA6Ci0gICAgICBlbHNlCi0JJGVjaG8gXCJcJHJlbGlua19jb21tYW5kX291dHB1dFwiID4mMgotCSRybSBcIlwkcHJvZ2Rpci9cJGZpbGVcIgotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKLSAgICBmaQotCi0gICAgJG12IFwiXCRwcm9nZGlyL1wkZmlsZVwiIFwiXCRwcm9nZGlyL1wkcHJvZ3JhbVwiIDI+L2Rldi9udWxsIHx8Ci0gICAgeyAkcm0gXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7Ci0gICAgICAkbXYgXCJcJHByb2dkaXIvXCRmaWxlXCIgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IH0KLSAgICAkcm0gXCJcJHByb2dkaXIvXCRmaWxlXCIKLSAgZmkiCi0JZWxzZQotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotICBwcm9ncmFtPSckb3V0cHV0bmFtZScKLSAgcHJvZ2Rpcj1cIlwkdGhpc2Rpci8kb2JqZGlyXCIKLSIKLQlmaQotCi0JJGVjaG8gPj4gJG91dHB1dCAiXAotCi0gIGlmIHRlc3QgLWYgXCJcJHByb2dkaXIvXCRwcm9ncmFtXCI7IHRoZW4iCi0KLQkjIEV4cG9ydCBvdXIgc2hsaWJwYXRoX3ZhciBpZiB3ZSBoYXZlIG9uZS4KLQlpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyAmJiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciIgJiYgdGVzdCAtbiAiJHRlbXBfcnBhdGgiOyB0aGVuCi0JICAkZWNobyA+PiAkb3V0cHV0ICJcCi0gICAgIyBBZGQgb3VyIG93biBsaWJyYXJ5IHBhdGggdG8gJHNobGlicGF0aF92YXIKLSAgICAkc2hsaWJwYXRoX3Zhcj1cIiR0ZW1wX3JwYXRoXCQkc2hsaWJwYXRoX3ZhclwiCi0KLSAgICAjIFNvbWUgc3lzdGVtcyBjYW5ub3QgY29wZSB3aXRoIGNvbG9uLXRlcm1pbmF0ZWQgJHNobGlicGF0aF92YXIKLSAgICAjIFRoZSBzZWNvbmQgY29sb24gaXMgYSB3b3JrYXJvdW5kIGZvciBhIGJ1ZyBpbiBCZU9TIFI0IHNlZAotICAgICRzaGxpYnBhdGhfdmFyPVxgXCRlY2hvIFwiWFwkJHNobGlicGF0aF92YXJcIiB8IFwkWHNlZCAtZSAncy86OipcJC8vJ1xgCi0KLSAgICBleHBvcnQgJHNobGlicGF0aF92YXIKLSIKLQlmaQotCi0JIyBmaXh1cCB0aGUgZGxsIHNlYXJjaHBhdGggaWYgd2UgbmVlZCB0by4KLQlpZiB0ZXN0IC1uICIkZGxsc2VhcmNocGF0aCI7IHRoZW4KLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLSAgICAjIEFkZCB0aGUgZGxsIHNlYXJjaCBwYXRoIGNvbXBvbmVudHMgdG8gdGhlIGV4ZWN1dGFibGUgUEFUSAotICAgIFBBVEg9JGRsbHNlYXJjaHBhdGg6XCRQQVRICi0iCi0JZmkKLQotCSRlY2hvID4+ICRvdXRwdXQgIlwKLSAgICBpZiB0ZXN0IFwiXCRsaWJ0b29sX2V4ZWN1dGVfbWFnaWNcIiAhPSBcIiRtYWdpY1wiOyB0aGVuCi0gICAgICAjIFJ1biB0aGUgYWN0dWFsIHByb2dyYW0gd2l0aCBvdXIgYXJndW1lbnRzLgotIgotCWNhc2UgJGhvc3QgaW4KLQkjIEJhY2tzbGFzaGVzIHNlcGFyYXRlIGRpcmVjdG9yaWVzIG9uIHBsYWluIHdpbmRvd3MKLQkqLSotbWluZ3cgfCAqLSotb3MyKikKLQkgICRlY2hvID4+ICRvdXRwdXQgIlwKLSAgICAgIGV4ZWMgXCJcJHByb2dkaXJcXFxcXCRwcm9ncmFtXCIgXCR7MStcIlwkQFwifQotIgorCSAgICAjIE5vdywgY3JlYXRlIHRoZSB3cmFwcGVyIHNjcmlwdCBmb3IgZnVuY19zb3VyY2UgdXNlOgorCSAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICRjd3JhcHBlcgorCSAgICAkUk0gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgIHRyYXAgIiRSTSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CisJICAgICRvcHRfZHJ5X3J1biB8fCB7CisJICAgICAgIyBub3RlOiB0aGlzIHNjcmlwdCB3aWxsIG5vdCBiZSBleGVjdXRlZCwgc28gZG8gbm90IGNobW9kLgorCSAgICAgIGlmIHRlc3QgIngkYnVpbGQiID0gIngkaG9zdCIgOyB0aGVuCisJCSRjd3JhcHBlciAtLWx0LWR1bXAtc2NyaXB0ID4gJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0CisJICAgICAgZWxzZQorCQlmdW5jX2VtaXRfd3JhcHBlciBubyA+ICRmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lX3Jlc3VsdAorCSAgICAgIGZpCisJICAgIH0KIAkgIDs7CisJICAqICkKKwkgICAgJFJNICRvdXRwdXQKKwkgICAgdHJhcCAiJFJNICRvdXRwdXQ7IGV4aXQgJEVYSVRfRkFJTFVSRSIgMSAyIDE1CiAKLQkqKQotCSAgJGVjaG8gPj4gJG91dHB1dCAiXAotICAgICAgZXhlYyBcIlwkcHJvZ2Rpci9cJHByb2dyYW1cIiBcJHsxK1wiXCRAXCJ9Ci0iCisJICAgIGZ1bmNfZW1pdF93cmFwcGVyIG5vID4gJG91dHB1dAorCSAgICBjaG1vZCAreCAkb3V0cHV0CiAJICA7OwogCWVzYWMKLQkkZWNobyA+PiAkb3V0cHV0ICJcCi0gICAgICBcJGVjaG8gXCJcJDA6IGNhbm5vdCBleGVjIFwkcHJvZ3JhbSBcJCpcIgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLSAgZWxzZQotICAgICMgVGhlIHByb2dyYW0gZG9lc24ndCBleGlzdC4KLSAgICBcJGVjaG8gXCJcJDA6IGVycm9yOiBcXFxgXCRwcm9nZGlyL1wkcHJvZ3JhbScgZG9lcyBub3QgZXhpc3RcIiAxPiYyCi0gICAgXCRlY2hvIFwiVGhpcyBzY3JpcHQgaXMganVzdCBhIHdyYXBwZXIgZm9yIFwkcHJvZ3JhbS5cIiAxPiYyCi0gICAgJGVjaG8gXCJTZWUgdGhlICRQQUNLQUdFIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uXCIgMT4mMgotICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICBmaQotZmlcCi0iCi0JY2htb2QgK3ggJG91dHB1dAotICAgICAgZmkKKyAgICAgIH0KICAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwogICAgICAgOzsKICAgICBlc2FjCkBAIC01NTA2LDcgKzkwNzAsNyBAQAogICAgIGZvciBvbGRsaWIgaW4gJG9sZGxpYnM7IGRvCiAKICAgICAgIGlmIHRlc3QgIiRidWlsZF9saWJ0b29sX2xpYnMiID0gY29udmVuaWVuY2U7IHRoZW4KLQlvbGRvYmpzPSIkbGlib2Jqc19zYXZlIgorCW9sZG9ianM9IiRsaWJvYmpzX3NhdmUgJHN5bWZpbGVvYmoiCiAJYWRkbGlicz0iJGNvbnZlbmllbmNlIgogCWJ1aWxkX2xpYnRvb2xfbGlicz1ubwogICAgICAgZWxzZQpAQCAtNTUxNSwyMiArOTA3OSwzNSBAQAogCSAgYnVpbGRfbGlidG9vbF9saWJzPW5vCiAJZWxzZQogCSAgb2xkb2Jqcz0iJG9sZF9kZXBsaWJzICRub25fcGljX29iamVjdHMiCisJICBpZiB0ZXN0ICIkcHJlbG9hZCIgPSB5ZXMgJiYgdGVzdCAtZiAiJHN5bWZpbGVvYmoiOyB0aGVuCisJICAgIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkc3ltZmlsZW9iaiIKKwkgIGZpCiAJZmkKIAlhZGRsaWJzPSIkb2xkX2NvbnZlbmllbmNlIgogICAgICAgZmkKIAogICAgICAgaWYgdGVzdCAtbiAiJGFkZGxpYnMiOyB0aGVuCiAJZ2VudG9wPSIkb3V0cHV0X29iamRpci8ke291dHB1dG5hbWV9eCIKLQlnZW5lcmF0ZWQ9IiRnZW5lcmF0ZWQgJGdlbnRvcCIKKwlmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgogCiAJZnVuY19leHRyYWN0X2FyY2hpdmVzICRnZW50b3AgJGFkZGxpYnMKLQlvbGRvYmpzPSIkb2xkb2JqcyAkZnVuY19leHRyYWN0X2FyY2hpdmVzX3Jlc3VsdCIKKwlmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGZ1bmNfZXh0cmFjdF9hcmNoaXZlc19yZXN1bHQiCiAgICAgICBmaQogCiAgICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgYXJjaGl2ZSBjb21tYW5kcy4KICAgICAgIGlmIHRlc3QgLW4gIiRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzIiAmJiB0ZXN0ICIkYnVpbGRfbGlidG9vbF9saWJzIiA9IHllczsgdGhlbgotICAgICAgIGNtZHM9JG9sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHMKKwljbWRzPSRvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzCiAgICAgICBlbHNlCisKKwkjIEFkZCBhbnkgb2JqZWN0cyBmcm9tIHByZWxvYWRlZCBjb252ZW5pZW5jZSBsaWJyYXJpZXMKKwlpZiB0ZXN0IC1uICIkZGxwcmVmaWxlcyI7IHRoZW4KKwkgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCisJICBmdW5jX2FwcGVuZCBnZW5lcmF0ZWQgIiAkZ2VudG9wIgorCisJICBmdW5jX2V4dHJhY3RfYXJjaGl2ZXMgJGdlbnRvcCAkZGxwcmVmaWxlcworCSAgZnVuY19hcHBlbmQgb2xkb2JqcyAiICRmdW5jX2V4dHJhY3RfYXJjaGl2ZXNfcmVzdWx0IgorCWZpCisKIAkjIFBPU0lYIGRlbWFuZHMgbm8gcGF0aHMgdG8gYmUgZW5jb2RlZCBpbiBhcmNoaXZlcy4gIFdlIGhhdmUKIAkjIHRvIGF2b2lkIGNyZWF0aW5nIGFyY2hpdmVzIHdpdGggZHVwbGljYXRlIGJhc2VuYW1lcyBpZiB3ZQogCSMgbWlnaHQgaGF2ZSB0byBleHRyYWN0IHRoZW0gYWZ0ZXJ3YXJkcywgZS5nLiwgd2hlbiBjcmVhdGluZyBhCkBAIC01NTM5LDMyICs5MTE2LDIyIEBACiAJIyBub3Qgc3VwcG9ydGVkIGJ5IGxpYnRvb2wpLgogCWlmIChmb3Igb2JqIGluICRvbGRvYmpzCiAJICAgIGRvCi0JICAgICAgJGVjaG8gIlgkb2JqIiB8ICRYc2VkIC1lICdzJV4uKi8lJScKKwkgICAgICBmdW5jX2Jhc2VuYW1lICIkb2JqIgorCSAgICAgICRFQ0hPICIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCiAJICAgIGRvbmUgfCBzb3J0IHwgc29ydCAtdWMgPi9kZXYvbnVsbCAyPiYxKTsgdGhlbgogCSAgOgogCWVsc2UKLQkgICRlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCi0KLQkgIGlmIHRlc3QgLXogIiRnZW50b3AiOyB0aGVuCi0JICAgIGdlbnRvcD0iJG91dHB1dF9vYmpkaXIvJHtvdXRwdXRuYW1lfXgiCi0JICAgIGdlbmVyYXRlZD0iJGdlbmVyYXRlZCAkZ2VudG9wIgotCi0JICAgICRzaG93ICIke3JtfXIgJGdlbnRvcCIKLQkgICAgJHJ1biAke3JtfXIgIiRnZW50b3AiCi0JICAgICRzaG93ICIkbWtkaXIgJGdlbnRvcCIKLQkgICAgJHJ1biAkbWtkaXIgIiRnZW50b3AiCi0JICAgIGV4aXRfc3RhdHVzPSQ/Ci0JICAgIGlmIHRlc3QgIiRleGl0X3N0YXR1cyIgLW5lIDAgJiYgdGVzdCAhIC1kICIkZ2VudG9wIjsgdGhlbgotCSAgICAgIGV4aXQgJGV4aXRfc3RhdHVzCi0JICAgIGZpCi0JICBmaQotCisJICBlY2hvICJjb3B5aW5nIHNlbGVjdGVkIG9iamVjdCBmaWxlcyB0byBhdm9pZCBiYXNlbmFtZSBjb25mbGljdHMuLi4iCisJICBnZW50b3A9IiRvdXRwdXRfb2JqZGlyLyR7b3V0cHV0bmFtZX14IgorCSAgZnVuY19hcHBlbmQgZ2VuZXJhdGVkICIgJGdlbnRvcCIKKwkgIGZ1bmNfbWtkaXJfcCAiJGdlbnRvcCIKIAkgIHNhdmVfb2xkb2Jqcz0kb2xkb2JqcwogCSAgb2xkb2Jqcz0KIAkgIGNvdW50ZXI9MQogCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCiAJICBkbwotCSAgICBvYmpiYXNlPWAkZWNobyAiWCRvYmoiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKKwkgICAgZnVuY19iYXNlbmFtZSAiJG9iaiIKKwkgICAgb2JqYmFzZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgogCSAgICBjYXNlICIgJG9sZG9ianMgIiBpbgogCSAgICAiICIpIG9sZG9ianM9JG9iaiA7OwogCSAgICAqW1wgL10iJG9iamJhc2UgIiopCkBAIC01NTcyLDU4ICs5MTM5LDcyIEBACiAJCSMgTWFrZSBzdXJlIHdlIGRvbid0IHBpY2sgYW4gYWx0ZXJuYXRlIG5hbWUgdGhhdCBhbHNvCiAJCSMgb3ZlcmxhcHMuCiAJCW5ld29iaj1sdCRjb3VudGVyLSRvYmpiYXNlCi0JCWNvdW50ZXI9YGV4cHIgJGNvdW50ZXIgKyAxYAorCQlmdW5jX2FyaXRoICRjb3VudGVyICsgMQorCQljb3VudGVyPSRmdW5jX2FyaXRoX3Jlc3VsdAogCQljYXNlICIgJG9sZG9ianMgIiBpbgogCQkqW1wgL10iJG5ld29iaiAiKikgOzsKIAkJKikgaWYgdGVzdCAhIC1mICIkZ2VudG9wLyRuZXdvYmoiOyB0aGVuIGJyZWFrOyBmaSA7OwogCQllc2FjCiAJICAgICAgZG9uZQotCSAgICAgICRzaG93ICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKLQkgICAgICAkcnVuIGxuICIkb2JqIiAiJGdlbnRvcC8kbmV3b2JqIiB8fAotCSAgICAgICRydW4gY3AgIiRvYmoiICIkZ2VudG9wLyRuZXdvYmoiCi0JICAgICAgb2xkb2Jqcz0iJG9sZG9ianMgJGdlbnRvcC8kbmV3b2JqIgorCSAgICAgIGZ1bmNfc2hvd19ldmFsICJsbiAkb2JqICRnZW50b3AvJG5ld29iaiB8fCBjcCAkb2JqICRnZW50b3AvJG5ld29iaiIKKwkgICAgICBmdW5jX2FwcGVuZCBvbGRvYmpzICIgJGdlbnRvcC8kbmV3b2JqIgogCSAgICAgIDs7Ci0JICAgICopIG9sZG9ianM9IiRvbGRvYmpzICRvYmoiIDs7CisJICAgICopIGZ1bmNfYXBwZW5kIG9sZG9ianMgIiAkb2JqIiA7OwogCSAgICBlc2FjCiAJICBkb25lCiAJZmkKLQogCWV2YWwgY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKIAotCWlmIGxlbj1gZXhwciAiWCRjbWRzIiA6ICIuKiJgICYmCi0JICAgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiIgfHwgdGVzdCAiJG1heF9jbWRfbGVuIiAtbGUgLTE7IHRoZW4KKwlmdW5jX2xlbiAiICRjbWRzIgorCWxlbj0kZnVuY19sZW5fcmVzdWx0CisJaWYgdGVzdCAiJGxlbiIgLWx0ICIkbWF4X2NtZF9sZW4iIHx8IHRlc3QgIiRtYXhfY21kX2xlbiIgLWxlIC0xOyB0aGVuCisJICBjbWRzPSRvbGRfYXJjaGl2ZV9jbWRzCisJZWxpZiB0ZXN0IC1uICIkYXJjaGl2ZXJfbGlzdF9zcGVjIjsgdGhlbgorCSAgZnVuY192ZXJib3NlICJ1c2luZyBjb21tYW5kIGZpbGUgYXJjaGl2ZSBsaW5raW5nLi4uIgorCSAgZm9yIG9iaiBpbiAkb2xkb2JqcworCSAgZG8KKwkgICAgZnVuY190b190b29sX2ZpbGUgIiRvYmoiCisJICAgICRFQ0hPICIkZnVuY190b190b29sX2ZpbGVfcmVzdWx0IgorCSAgZG9uZSA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZAorCSAgZnVuY190b190b29sX2ZpbGUgIiRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmxpYmNtZCIKKwkgIG9sZG9ianM9IiAkYXJjaGl2ZXJfbGlzdF9zcGVjJGZ1bmNfdG9fdG9vbF9maWxlX3Jlc3VsdCIKIAkgIGNtZHM9JG9sZF9hcmNoaXZlX2NtZHMKIAllbHNlCiAJICAjIHRoZSBjb21tYW5kIGxpbmUgaXMgdG9vIGxvbmcgdG8gbGluayBpbiBvbmUgc3RlcCwgbGluayBpbiBwYXJ0cwotCSAgJGVjaG8gInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCisJICBmdW5jX3ZlcmJvc2UgInVzaW5nIHBpZWNld2lzZSBhcmNoaXZlIGxpbmtpbmcuLi4iCiAJICBzYXZlX1JBTkxJQj0kUkFOTElCCiAJICBSQU5MSUI9OgogCSAgb2JqbGlzdD0KIAkgIGNvbmNhdF9jbWRzPQogCSAgc2F2ZV9vbGRvYmpzPSRvbGRvYmpzCi0KKwkgIG9sZG9ianM9CiAJICAjIElzIHRoZXJlIGEgYmV0dGVyIHdheSBvZiBmaW5kaW5nIHRoZSBsYXN0IG9iamVjdCBpbiB0aGUgbGlzdD8KIAkgIGZvciBvYmogaW4gJHNhdmVfb2xkb2JqcwogCSAgZG8KIAkgICAgbGFzdF9vbGRvYmo9JG9iagogCSAgZG9uZQorCSAgZXZhbCB0ZXN0X2NtZHM9XCIkb2xkX2FyY2hpdmVfY21kc1wiCisJICBmdW5jX2xlbiAiICR0ZXN0X2NtZHMiCisJICBsZW4wPSRmdW5jX2xlbl9yZXN1bHQKKwkgIGxlbj0kbGVuMAogCSAgZm9yIG9iaiBpbiAkc2F2ZV9vbGRvYmpzCiAJICBkbwotCSAgICBvbGRvYmpzPSIkb2JqbGlzdCAkb2JqIgotCSAgICBvYmpsaXN0PSIkb2JqbGlzdCAkb2JqIgotCSAgICBldmFsIHRlc3RfY21kcz1cIiRvbGRfYXJjaGl2ZV9jbWRzXCIKLQkgICAgaWYgbGVuPWBleHByICJYJHRlc3RfY21kcyIgOiAiLioiIDI+L2Rldi9udWxsYCAmJgotCSAgICAgICB0ZXN0ICIkbGVuIiAtbGUgIiRtYXhfY21kX2xlbiI7IHRoZW4KKwkgICAgZnVuY19sZW4gIiAkb2JqIgorCSAgICBmdW5jX2FyaXRoICRsZW4gKyAkZnVuY19sZW5fcmVzdWx0CisJICAgIGxlbj0kZnVuY19hcml0aF9yZXN1bHQKKwkgICAgZnVuY19hcHBlbmQgb2JqbGlzdCAiICRvYmoiCisJICAgIGlmIHRlc3QgIiRsZW4iIC1sdCAiJG1heF9jbWRfbGVuIjsgdGhlbgogCSAgICAgIDoKIAkgICAgZWxzZQogCSAgICAgICMgdGhlIGFib3ZlIGNvbW1hbmQgc2hvdWxkIGJlIHVzZWQgYmVmb3JlIGl0IGdldHMgdG9vIGxvbmcKIAkgICAgICBvbGRvYmpzPSRvYmpsaXN0CiAJICAgICAgaWYgdGVzdCAiJG9iaiIgPSAiJGxhc3Rfb2xkb2JqIiA7IHRoZW4KLQkgICAgICAgIFJBTkxJQj0kc2F2ZV9SQU5MSUIKKwkJUkFOTElCPSRzYXZlX1JBTkxJQgogCSAgICAgIGZpCiAJICAgICAgdGVzdCAteiAiJGNvbmNhdF9jbWRzIiB8fCBjb25jYXRfY21kcz0kY29uY2F0X2NtZHN+CiAJICAgICAgZXZhbCBjb25jYXRfY21kcz1cIlwke2NvbmNhdF9jbWRzfSRvbGRfYXJjaGl2ZV9jbWRzXCIKIAkgICAgICBvYmpsaXN0PQorCSAgICAgIGxlbj0kbGVuMAogCSAgICBmaQogCSAgZG9uZQogCSAgUkFOTElCPSRzYXZlX1JBTkxJQgpAQCAtNTYzNSw0OSArOTIxNiwzOSBAQAogCSAgZmkKIAlmaQogICAgICAgZmkKLSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotICAgICAgZm9yIGNtZCBpbiAkY21kczsgZG8KLSAgICAgICAgZXZhbCBjbWQ9XCIkY21kXCIKLQlJRlM9IiRzYXZlX2lmcyIKLQkkc2hvdyAiJGNtZCIKLQkkcnVuIGV2YWwgIiRjbWQiIHx8IGV4aXQgJD8KLSAgICAgIGRvbmUKLSAgICAgIElGUz0iJHNhdmVfaWZzIgorICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRjbWRzIiAnZXhpdCAkPycKICAgICBkb25lCiAKLSAgICBpZiB0ZXN0IC1uICIkZ2VuZXJhdGVkIjsgdGhlbgotICAgICAgJHNob3cgIiR7cm19ciRnZW5lcmF0ZWQiCi0gICAgICAkcnVuICR7cm19ciRnZW5lcmF0ZWQKLSAgICBmaQorICAgIHRlc3QgLW4gIiRnZW5lcmF0ZWQiICYmIFwKKyAgICAgIGZ1bmNfc2hvd19ldmFsICIke1JNfXIkZ2VuZXJhdGVkIgogCiAgICAgIyBOb3cgY3JlYXRlIHRoZSBsaWJ0b29sIGFyY2hpdmUuCiAgICAgY2FzZSAkb3V0cHV0IGluCiAgICAgKi5sYSkKICAgICAgIG9sZF9saWJyYXJ5PQogICAgICAgdGVzdCAiJGJ1aWxkX29sZF9saWJzIiA9IHllcyAmJiBvbGRfbGlicmFyeT0iJGxpYm5hbWUuJGxpYmV4dCIKLSAgICAgICRzaG93ICJjcmVhdGluZyAkb3V0cHV0IgorICAgICAgZnVuY192ZXJib3NlICJjcmVhdGluZyAkb3V0cHV0IgogCiAgICAgICAjIFByZXNlcnZlIGFueSB2YXJpYWJsZXMgdGhhdCBtYXkgYWZmZWN0IGNvbXBpbGVyIGJlaGF2aW9yCiAgICAgICBmb3IgdmFyIGluICR2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluazsgZG8KIAlpZiBldmFsIHRlc3QgLXogXCJcJHskdmFyK3NldH1cIjsgdGhlbgotCSAgcmVsaW5rX2NvbW1hbmQ9InsgdGVzdCAteiBcIlwkeyR2YXIrc2V0fVwiIHx8IHVuc2V0ICR2YXIgfHwgeyAkdmFyPTsgZXhwb3J0ICR2YXI7IH07IH07ICRyZWxpbmtfY29tbWFuZCIKKwkgIHJlbGlua19jb21tYW5kPSJ7IHRlc3QgLXogXCJcJHskdmFyK3NldH1cIiB8fCAkbHRfdW5zZXQgJHZhciB8fCB7ICR2YXI9OyBleHBvcnQgJHZhcjsgfTsgfTsgJHJlbGlua19jb21tYW5kIgogCWVsaWYgZXZhbCB2YXJfdmFsdWU9XCQkdmFyOyB0ZXN0IC16ICIkdmFyX3ZhbHVlIjsgdGhlbgogCSAgcmVsaW5rX2NvbW1hbmQ9IiR2YXI9OyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgogCWVsc2UKLQkgIHZhcl92YWx1ZT1gJGVjaG8gIlgkdmFyX3ZhbHVlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLQkgIHJlbGlua19jb21tYW5kPSIkdmFyPVwiJHZhcl92YWx1ZVwiOyBleHBvcnQgJHZhcjsgJHJlbGlua19jb21tYW5kIgorCSAgZnVuY19xdW90ZV9mb3JfZXZhbCAiJHZhcl92YWx1ZSIKKwkgIHJlbGlua19jb21tYW5kPSIkdmFyPSRmdW5jX3F1b3RlX2Zvcl9ldmFsX3Jlc3VsdDsgZXhwb3J0ICR2YXI7ICRyZWxpbmtfY29tbWFuZCIKIAlmaQogICAgICAgZG9uZQogICAgICAgIyBRdW90ZSB0aGUgbGluayBjb21tYW5kIGZvciBzaGlwcGluZy4KICAgICAgIHJlbGlua19jb21tYW5kPSIoY2QgYHB3ZGA7ICRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1tb2RlPXJlbGluayAkbGlidG9vbF9hcmdzIEBpbnN0X3ByZWZpeF9kaXJAKSIKLSAgICAgIHJlbGlua19jb21tYW5kPWAkZWNobyAiWCRyZWxpbmtfY29tbWFuZCIgfCAkU1AyTkwgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCIgfCAkTkwyU1BgCisgICAgICByZWxpbmtfY29tbWFuZD1gJEVDSE8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU0VEICIkc2VkX3F1b3RlX3N1YnN0ImAKICAgICAgIGlmIHRlc3QgIiRoYXJkY29kZV9hdXRvbWF0aWMiID0geWVzIDsgdGhlbgogCXJlbGlua19jb21tYW5kPQogICAgICAgZmkKIAotCiAgICAgICAjIE9ubHkgY3JlYXRlIHRoZSBvdXRwdXQgaWYgbm90IGEgZHJ5IHJ1bi4KLSAgICAgIGlmIHRlc3QgLXogIiRydW4iOyB0aGVuCisgICAgICAkb3B0X2RyeV9ydW4gfHwgewogCWZvciBpbnN0YWxsZWQgaW4gbm8geWVzOyBkbwogCSAgaWYgdGVzdCAiJGluc3RhbGxlZCIgPSB5ZXM7IHRoZW4KIAkgICAgaWYgdGVzdCAteiAiJGluc3RhbGxfbGliZGlyIjsgdGhlbgpAQCAtNTY4OSwzOCArOTI2MCw1OSBAQAogCSAgICBmb3IgZGVwbGliIGluICRkZXBlbmRlbmN5X2xpYnM7IGRvCiAJICAgICAgY2FzZSAkZGVwbGliIGluCiAJICAgICAgKi5sYSkKLQkJbmFtZT1gJGVjaG8gIlgkZGVwbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCisJCWZ1bmNfYmFzZW5hbWUgIiRkZXBsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKIAkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGRlcGxpYmAKLQkJaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkJICAkZWNobyAiJG1vZGVuYW1lOiBcYCRkZXBsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCQlmaQotCQluZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGxpYmRpci8kbmFtZSIKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGRlcGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKIAkJOzsKLQkgICAgICAqKSBuZXdkZXBlbmRlbmN5X2xpYnM9IiRuZXdkZXBlbmRlbmN5X2xpYnMgJGRlcGxpYiIgOzsKKwkgICAgICAtTCopCisJCWZ1bmNfc3RyaXBuYW1lIC1MICcnICIkZGVwbGliIgorCQlmdW5jX3JlcGxhY2Vfc3lzcm9vdCAiJGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCIKKwkJZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgLUwkZnVuY19yZXBsYWNlX3N5c3Jvb3RfcmVzdWx0IgorCQk7OworCSAgICAgIC1SKikKKwkJZnVuY19zdHJpcG5hbWUgLVIgJycgIiRkZXBsaWIiCisJCWZ1bmNfcmVwbGFjZV9zeXNyb290ICIkZnVuY19zdHJpcG5hbWVfcmVzdWx0IgorCQlmdW5jX2FwcGVuZCBuZXdkZXBlbmRlbmN5X2xpYnMgIiAtUiRmdW5jX3JlcGxhY2Vfc3lzcm9vdF9yZXN1bHQiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGVwZW5kZW5jeV9saWJzICIgJGRlcGxpYiIgOzsKIAkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgICAgZGVwZW5kZW5jeV9saWJzPSIkbmV3ZGVwZW5kZW5jeV9saWJzIgogCSAgICBuZXdkbGZpbGVzPQorCiAJICAgIGZvciBsaWIgaW4gJGRsZmlsZXM7IGRvCi0JICAgICAgbmFtZT1gJGVjaG8gIlgkbGliIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JICAgICAgZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKLQkgICAgICBpZiB0ZXN0IC16ICIkbGliZGlyIjsgdGhlbgotCQkkZWNobyAiJG1vZGVuYW1lOiBcYCRsaWInIGlzIG5vdCBhIHZhbGlkIGxpYnRvb2wgYXJjaGl2ZSIgMT4mMgotCQlleGl0ICRFWElUX0ZBSUxVUkUKLQkgICAgICBmaQotCSAgICAgIG5ld2RsZmlsZXM9IiRuZXdkbGZpbGVzICRsaWJkaXIvJG5hbWUiCisJICAgICAgY2FzZSAkbGliIGluCisJICAgICAgKi5sYSkKKwkgICAgICAgIGZ1bmNfYmFzZW5hbWUgIiRsaWIiCisJCW5hbWU9IiRmdW5jX2Jhc2VuYW1lX3Jlc3VsdCIKKwkJZXZhbCBsaWJkaXI9YCR7U0VEfSAtbiAtZSAncy9ebGliZGlyPVwoLipcKSQvXDEvcCcgJGxpYmAKKwkJdGVzdCAteiAiJGxpYmRpciIgJiYgXAorCQkgIGZ1bmNfZmF0YWxfZXJyb3IgIlxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIgorCQlmdW5jX2FwcGVuZCBuZXdkbGZpbGVzICIgJHtsdF9zeXNyb290Ois9fSRsaWJkaXIvJG5hbWUiCisJCTs7CisJICAgICAgKikgZnVuY19hcHBlbmQgbmV3ZGxmaWxlcyAiICRsaWIiIDs7CisJICAgICAgZXNhYwogCSAgICBkb25lCiAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgogCSAgICBuZXdkbHByZWZpbGVzPQogCSAgICBmb3IgbGliIGluICRkbHByZWZpbGVzOyBkbwotCSAgICAgIG5hbWU9YCRlY2hvICJYJGxpYiIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCSAgICAgIGV2YWwgbGliZGlyPWAke1NFRH0gLW4gLWUgJ3MvXmxpYmRpcj1cKC4qXCkkL1wxL3AnICRsaWJgCi0JICAgICAgaWYgdGVzdCAteiAiJGxpYmRpciI7IHRoZW4KLQkJJGVjaG8gIiRtb2RlbmFtZTogXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiIDE+JjIKLQkJZXhpdCAkRVhJVF9GQUlMVVJFCi0JICAgICAgZmkKLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkbGliZGlyLyRuYW1lIgorCSAgICAgIGNhc2UgJGxpYiBpbgorCSAgICAgICoubGEpCisJCSMgT25seSBwYXNzIHByZW9wZW5lZCBmaWxlcyB0byB0aGUgcHNldWRvLWFyY2hpdmUgKGZvcgorCQkjIGV2ZW50dWFsIGxpbmtpbmcgd2l0aCB0aGUgYXBwLiB0aGF0IGxpbmtzIGl0KSBpZiB3ZQorCQkjIGRpZG4ndCBhbHJlYWR5IGxpbmsgdGhlIHByZW9wZW5lZCBvYmplY3RzIGRpcmVjdGx5IGludG8KKwkJIyB0aGUgbGlicmFyeToKKwkJZnVuY19iYXNlbmFtZSAiJGxpYiIKKwkJbmFtZT0iJGZ1bmNfYmFzZW5hbWVfcmVzdWx0IgorCQlldmFsIGxpYmRpcj1gJHtTRUR9IC1uIC1lICdzL15saWJkaXI9XCguKlwpJC9cMS9wJyAkbGliYAorCQl0ZXN0IC16ICIkbGliZGlyIiAmJiBcCisJCSAgZnVuY19mYXRhbF9lcnJvciAiXGAkbGliJyBpcyBub3QgYSB2YWxpZCBsaWJ0b29sIGFyY2hpdmUiCisJCWZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAke2x0X3N5c3Jvb3Q6Kz19JGxpYmRpci8kbmFtZSIKKwkJOzsKKwkgICAgICBlc2FjCiAJICAgIGRvbmUKIAkgICAgZGxwcmVmaWxlcz0iJG5ld2RscHJlZmlsZXMiCiAJICBlbHNlCkBAIC01NzMwLDcgKzkzMjIsNyBAQAogCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OwogCSAgICAgIGVzYWMKLQkgICAgICBuZXdkbGZpbGVzPSIkbmV3ZGxmaWxlcyAkYWJzIgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RsZmlsZXMgIiAkYWJzIgogCSAgICBkb25lCiAJICAgIGRsZmlsZXM9IiRuZXdkbGZpbGVzIgogCSAgICBuZXdkbHByZWZpbGVzPQpAQCAtNTczOSwxOSArOTMzMSwzNyBAQAogCQlbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIGFicz0iJGxpYiIgOzsKIAkJKikgYWJzPWBwd2RgIi8kbGliIiA7OwogCSAgICAgIGVzYWMKLQkgICAgICBuZXdkbHByZWZpbGVzPSIkbmV3ZGxwcmVmaWxlcyAkYWJzIgorCSAgICAgIGZ1bmNfYXBwZW5kIG5ld2RscHJlZmlsZXMgIiAkYWJzIgogCSAgICBkb25lCiAJICAgIGRscHJlZmlsZXM9IiRuZXdkbHByZWZpbGVzIgogCSAgZmkKLQkgICRybSAkb3V0cHV0CisJICAkUk0gJG91dHB1dAogCSAgIyBwbGFjZSBkbG5hbWUgaW4gY29ycmVjdCBwb3NpdGlvbiBmb3IgY3lnd2luCisJICAjIEluIGZhY3QsIGl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIHRoaXMgY29kZSBmb3IgYWxsIHRhcmdldAorCSAgIyBzeXN0ZW1zIHRoYXQgY2FuJ3QgaGFyZC1jb2RlIGxpYnJhcnkgcGF0aHMgaW50byB0aGVpciBleGVjdXRhYmxlcworCSAgIyBhbmQgdGhhdCBoYXZlIG5vIHNoYXJlZCBsaWJyYXJ5IHBhdGggdmFyaWFibGUgaW5kZXBlbmRlbnQgb2YgUEFUSCwKKwkgICMgYnV0IGl0IHR1cm5zIG91dCB3ZSBjYW4ndCBlYXNpbHkgZGV0ZXJtaW5lIHRoYXQgZnJvbSBpbnNwZWN0aW5nCisJICAjIGxpYnRvb2wgdmFyaWFibGVzLCBzbyB3ZSBoYXZlIHRvIGhhcmQtY29kZSB0aGUgT1NzIHRvIHdoaWNoIGl0CisJICAjIGFwcGxpZXMgaGVyZTsgYXQgdGhlIG1vbWVudCwgdGhhdCBtZWFucyBwbGF0Zm9ybXMgdGhhdCB1c2UgdGhlIFBFCisJICAjIG9iamVjdCBmb3JtYXQgd2l0aCBETEwgZmlsZXMuICBTZWUgdGhlIGxvbmcgY29tbWVudCBhdCB0aGUgdG9wIG9mCisJICAjIHRlc3RzL2JpbmRpci5hdCBmb3IgZnVsbCBkZXRhaWxzLgogCSAgdGRsbmFtZT0kZGxuYW1lCiAJICBjYXNlICRob3N0LCRvdXRwdXQsJGluc3RhbGxlZCwkbW9kdWxlLCRkbG5hbWUgaW4KLQkgICAgKmN5Z3dpbiosKmxhaSx5ZXMsbm8sKi5kbGwgfCAqbWluZ3cqLCpsYWkseWVzLG5vLCouZGxsKSB0ZGxuYW1lPS4uL2Jpbi8kZGxuYW1lIDs7CisJICAgICpjeWd3aW4qLCpsYWkseWVzLG5vLCouZGxsIHwgKm1pbmd3KiwqbGFpLHllcyxubywqLmRsbCB8ICpjZWdjYyosKmxhaSx5ZXMsbm8sKi5kbGwpCisJICAgICAgIyBJZiBhIC1iaW5kaXIgYXJndW1lbnQgd2FzIHN1cHBsaWVkLCBwbGFjZSB0aGUgZGxsIHRoZXJlLgorCSAgICAgIGlmIHRlc3QgIngkYmluZGlyIiAhPSB4IDsKKwkgICAgICB0aGVuCisJCWZ1bmNfcmVsYXRpdmVfcGF0aCAiJGluc3RhbGxfbGliZGlyIiAiJGJpbmRpciIKKwkJdGRsbmFtZT0kZnVuY19yZWxhdGl2ZV9wYXRoX3Jlc3VsdCRkbG5hbWUKKwkgICAgICBlbHNlCisJCSMgT3RoZXJ3aXNlIGZhbGwgYmFjayBvbiBoZXVyaXN0aWMuCisJCXRkbG5hbWU9Li4vYmluLyRkbG5hbWUKKwkgICAgICBmaQorCSAgICAgIDs7CiAJICBlc2FjCi0JICAkZWNobyA+ICRvdXRwdXQgIlwKKwkgICRFQ0hPID4gJG91dHB1dCAiXAogIyAkb3V0cHV0bmFtZSAtIGEgbGlidG9vbCBsaWJyYXJ5IGZpbGUKLSMgR2VuZXJhdGVkIGJ5ICRQUk9HUkFNIC0gR05VICRQQUNLQUdFICRWRVJTSU9OJFRJTUVTVEFNUAorIyBHZW5lcmF0ZWQgYnkgJFBST0dSQU0gKEdOVSAkUEFDS0FHRSRUSU1FU1RBTVApICRWRVJTSU9OCiAjCiAjIFBsZWFzZSBETyBOT1QgZGVsZXRlIHRoaXMgZmlsZSEKICMgSXQgaXMgbmVjZXNzYXJ5IGZvciBsaW5raW5nIHRoZSBsaWJyYXJ5LgpAQCAtNTc2NSw5ICs5Mzc1LDE1IEBACiAjIFRoZSBuYW1lIG9mIHRoZSBzdGF0aWMgYXJjaGl2ZS4KIG9sZF9saWJyYXJ5PSckb2xkX2xpYnJhcnknCiAKKyMgTGlua2VyIGZsYWdzIHRoYXQgY2FuIG5vdCBnbyBpbiBkZXBlbmRlbmN5X2xpYnMuCitpbmhlcml0ZWRfbGlua2VyX2ZsYWdzPSckbmV3X2luaGVyaXRlZF9saW5rZXJfZmxhZ3MnCisKICMgTGlicmFyaWVzIHRoYXQgdGhpcyBvbmUgZGVwZW5kcyB1cG9uLgogZGVwZW5kZW5jeV9saWJzPSckZGVwZW5kZW5jeV9saWJzJwogCisjIE5hbWVzIG9mIGFkZGl0aW9uYWwgd2VhayBsaWJyYXJpZXMgcHJvdmlkZWQgYnkgdGhpcyBsaWJyYXJ5Cit3ZWFrX2xpYnJhcnlfbmFtZXM9JyR3ZWFrX2xpYnMnCisKICMgVmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgJGxpYm5hbWUuCiBjdXJyZW50PSRjdXJyZW50CiBhZ2U9JGFnZQpAQCAtNTc4Niw3NDggKzk0MDIsMjkgQEAKICMgRGlyZWN0b3J5IHRoYXQgdGhpcyBsaWJyYXJ5IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBpbjoKIGxpYmRpcj0nJGluc3RhbGxfbGliZGlyJyIKIAkgIGlmIHRlc3QgIiRpbnN0YWxsZWQiID0gbm8gJiYgdGVzdCAiJG5lZWRfcmVsaW5rIiA9IHllczsgdGhlbgotCSAgICAkZWNobyA+PiAkb3V0cHV0ICJcCisJICAgICRFQ0hPID4+ICRvdXRwdXQgIlwKIHJlbGlua19jb21tYW5kPVwiJHJlbGlua19jb21tYW5kXCIiCiAJICBmaQogCWRvbmUKLSAgICAgIGZpCisgICAgICB9CiAKICAgICAgICMgRG8gYSBzeW1ib2xpYyBsaW5rIHNvIHRoYXQgdGhlIGxpYnRvb2wgYXJjaGl2ZSBjYW4gYmUgZm91bmQgaW4KICAgICAgICMgTERfTElCUkFSWV9QQVRIIGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBpbnN0YWxsZWQuCi0gICAgICAkc2hvdyAiKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAkb3V0cHV0bmFtZSAmJiAkTE5fUyAuLi8kb3V0cHV0bmFtZSAkb3V0cHV0bmFtZSkiCi0gICAgICAkcnVuIGV2YWwgJyhjZCAkb3V0cHV0X29iamRpciAmJiAkcm0gJG91dHB1dG5hbWUgJiYgJExOX1MgLi4vJG91dHB1dG5hbWUgJG91dHB1dG5hbWUpJyB8fCBleGl0ICQ/CisgICAgICBmdW5jX3Nob3dfZXZhbCAnKCBjZCAiJG91dHB1dF9vYmpkaXIiICYmICRSTSAiJG91dHB1dG5hbWUiICYmICRMTl9TICIuLi8kb3V0cHV0bmFtZSIgIiRvdXRwdXRuYW1lIiApJyAnZXhpdCAkPycKICAgICAgIDs7CiAgICAgZXNhYwogICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIDs7Cit9CiAKLSAgIyBsaWJ0b29sIGluc3RhbGwgbW9kZQotICBpbnN0YWxsKQotICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGluc3RhbGwiCit7IHRlc3QgIiRvcHRfbW9kZSIgPSBsaW5rIHx8IHRlc3QgIiRvcHRfbW9kZSIgPSByZWxpbms7IH0gJiYKKyAgICBmdW5jX21vZGVfbGluayAkezErIiRAIn0KIAotICAgICMgVGhlcmUgbWF5IGJlIGFuIG9wdGlvbmFsIHNoKDEpIGFyZ3VtZW50IGF0IHRoZSBiZWdpbm5pbmcgb2YKLSAgICAjIGluc3RhbGxfcHJvZyAoZXNwZWNpYWxseSBvbiBXaW5kb3dzIE5UKS4KLSAgICBpZiB0ZXN0ICIkbm9ub3B0IiA9ICIkU0hFTEwiIHx8IHRlc3QgIiRub25vcHQiID0gL2Jpbi9zaCB8fAotICAgICAgICMgQWxsb3cgdGhlIHVzZSBvZiBHTlUgc2h0b29sJ3MgaW5zdGFsbCBjb21tYW5kLgotICAgICAgICRlY2hvICJYJG5vbm9wdCIgfCBncmVwIHNodG9vbCA+IC9kZXYvbnVsbDsgdGhlbgotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIGl0LgotICAgICAgYXJnPWAkZWNobyAiWCRub25vcHQiIHwgJFhzZWQgLWUgIiRzZWRfcXVvdGVfc3Vic3QiYAotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAqW1xbXH5cI1xeXCZcKlwoXClce1x9XHxcO1w8XD5cP1wnXCBcCV0qfCpdKnwiIikKLQlhcmc9IlwiJGFyZ1wiIgotCTs7Ci0gICAgICBlc2FjCi0gICAgICBpbnN0YWxsX3Byb2c9IiRhcmcgIgotICAgICAgYXJnPSIkMSIKLSAgICAgIHNoaWZ0Ci0gICAgZWxzZQotICAgICAgaW5zdGFsbF9wcm9nPQotICAgICAgYXJnPSRub25vcHQKLSAgICBmaQogCi0gICAgIyBUaGUgcmVhbCBmaXJzdCBhcmd1bWVudCBzaG91bGQgYmUgdGhlIG5hbWUgb2YgdGhlIGluc3RhbGxhdGlvbiBwcm9ncmFtLgotICAgICMgQWVzdGhldGljYWxseSBxdW90ZSBpdC4KLSAgICBhcmc9YCRlY2hvICJYJGFyZyIgfCAkWHNlZCAtZSAiJHNlZF9xdW90ZV9zdWJzdCJgCi0gICAgY2FzZSAkYXJnIGluCi0gICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0gICAgICBhcmc9IlwiJGFyZ1wiIgotICAgICAgOzsKLSAgICBlc2FjCi0gICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nJGFyZyIKLQotICAgICMgV2UgbmVlZCB0byBhY2NlcHQgYXQgbGVhc3QgYWxsIHRoZSBCU0QgaW5zdGFsbCBmbGFncy4KLSAgICBkZXN0PQotICAgIGZpbGVzPQotICAgIG9wdHM9Ci0gICAgcHJldj0KLSAgICBpbnN0YWxsX3R5cGU9Ci0gICAgaXNkaXI9bm8KLSAgICBzdHJpcG1lPQotICAgIGZvciBhcmcKLSAgICBkbwotICAgICAgaWYgdGVzdCAtbiAiJGRlc3QiOyB0aGVuCi0JZmlsZXM9IiRmaWxlcyAkZGVzdCIKLQlkZXN0PSRhcmcKLQljb250aW51ZQotICAgICAgZmkKLQotICAgICAgY2FzZSAkYXJnIGluCi0gICAgICAtZCkgaXNkaXI9eWVzIDs7Ci0gICAgICAtZikgCi0gICAgICAJY2FzZSAiICRpbnN0YWxsX3Byb2cgIiBpbgotCSpbXFxcIC9dY3BcICopIDs7Ci0JKikgcHJldj0kYXJnIDs7Ci0JZXNhYwotCTs7Ci0gICAgICAtZyB8IC1tIHwgLW8pIHByZXY9JGFyZyA7OwotICAgICAgLXMpCi0Jc3RyaXBtZT0iIC1zIgotCWNvbnRpbnVlCi0JOzsKLSAgICAgIC0qKQotCTs7Ci0gICAgICAqKQotCSMgSWYgdGhlIHByZXZpb3VzIG9wdGlvbiBuZWVkZWQgYW4gYXJndW1lbnQsIHRoZW4gc2tpcCBpdC4KLQlpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLQkgIHByZXY9Ci0JZWxzZQotCSAgZGVzdD0kYXJnCi0JICBjb250aW51ZQotCWZpCi0JOzsKLSAgICAgIGVzYWMKLQotICAgICAgIyBBZXN0aGV0aWNhbGx5IHF1b3RlIHRoZSBhcmd1bWVudC4KLSAgICAgIGFyZz1gJGVjaG8gIlgkYXJnIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgKltcW1x+XCNcXlwmXCpcKFwpXHtcfVx8XDtcPFw+XD9cJ1wgXAldKnwqXSp8IiIpCi0JYXJnPSJcIiRhcmdcIiIKLQk7OwotICAgICAgZXNhYwotICAgICAgaW5zdGFsbF9wcm9nPSIkaW5zdGFsbF9wcm9nICRhcmciCi0gICAgZG9uZQotCi0gICAgaWYgdGVzdCAteiAiJGluc3RhbGxfcHJvZyI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gaW5zdGFsbCBwcm9ncmFtIiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiIDE+JjIKLSAgICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotICAgIGZpCi0KLSAgICBpZiB0ZXN0IC1uICIkcHJldiI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHRoZSBcYCRwcmV2JyBvcHRpb24gcmVxdWlyZXMgYW4gYXJndW1lbnQiIDE+JjIKLSAgICAgICRlY2hvICIkaGVscCIgMT4mMgotICAgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLXogIiRmaWxlcyI7IHRoZW4KLSAgICAgIGlmIHRlc3QgLXogIiRkZXN0IjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IG5vIGZpbGUgb3IgZGVzdGluYXRpb24gc3BlY2lmaWVkIiAxPiYyCi0gICAgICBlbHNlCi0JJGVjaG8gIiRtb2RlbmFtZTogeW91IG11c3Qgc3BlY2lmeSBhIGRlc3RpbmF0aW9uIiAxPiYyCi0gICAgICBmaQotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotCi0gICAgIyBTdHJpcCBhbnkgdHJhaWxpbmcgc2xhc2ggZnJvbSB0aGUgZGVzdGluYXRpb24uCi0gICAgZGVzdD1gJGVjaG8gIlgkZGVzdCIgfCAkWHNlZCAtZSAncyUvJCUlJ2AKLQotICAgICMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhlIGRlc3RpbmF0aW9uIGlzIGEgZGlyZWN0b3J5LgotICAgIHRlc3QgLWQgIiRkZXN0IiAmJiBpc2Rpcj15ZXMKLSAgICBpZiB0ZXN0ICIkaXNkaXIiID0geWVzOyB0aGVuCi0gICAgICBkZXN0ZGlyPSIkZGVzdCIKLSAgICAgIGRlc3RuYW1lPQotICAgIGVsc2UKLSAgICAgIGRlc3RkaXI9YCRlY2hvICJYJGRlc3QiIHwgJFhzZWQgLWUgJ3MlL1teL10qJCUlJ2AKLSAgICAgIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRkZXN0IiAmJiBkZXN0ZGlyPS4KLSAgICAgIGRlc3RuYW1lPWAkZWNobyAiWCRkZXN0IiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0KLSAgICAgICMgTm90IGEgZGlyZWN0b3J5LCBzbyBjaGVjayB0byBzZWUgdGhhdCB0aGVyZSBpcyBvbmx5IG9uZSBmaWxlIHNwZWNpZmllZC4KLSAgICAgIHNldCBkdW1teSAkZmlsZXMKLSAgICAgIGlmIHRlc3QgIiQjIiAtZ3QgMjsgdGhlbgotCSRlY2hvICIkbW9kZW5hbWU6IFxgJGRlc3QnIGlzIG5vdCBhIGRpcmVjdG9yeSIgMT4mMgotCSRlY2hvICIkaGVscCIgMT4mMgotCWV4aXQgJEVYSVRfRkFJTFVSRQotICAgICAgZmkKLSAgICBmaQotICAgIGNhc2UgJGRlc3RkaXIgaW4KLSAgICBbXFwvXSogfCBbQS1aYS16XTpbXFwvXSopIDs7Ci0gICAgKikKLSAgICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KLQljYXNlICRmaWxlIGluCi0JKi5sbykgOzsKLQkqKQotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkZGVzdGRpcicgbXVzdCBiZSBhbiBhYnNvbHV0ZSBkaXJlY3RvcnkgbmFtZSIgMT4mMgotCSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIDs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgOzsKLSAgICBlc2FjCi0KLSAgICAjIFRoaXMgdmFyaWFibGUgdGVsbHMgd3JhcHBlciBzY3JpcHRzIGp1c3QgdG8gc2V0IHZhcmlhYmxlcyByYXRoZXIKLSAgICAjIHRoYW4gcnVubmluZyB0aGVpciBwcm9ncmFtcy4KLSAgICBsaWJ0b29sX2luc3RhbGxfbWFnaWM9IiRtYWdpYyIKLQotICAgIHN0YXRpY2xpYnM9Ci0gICAgZnV0dXJlX2xpYmRpcnM9Ci0gICAgY3VycmVudF9saWJkaXJzPQotICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KLQotICAgICAgIyBEbyBlYWNoIGluc3RhbGxhdGlvbi4KLSAgICAgIGNhc2UgJGZpbGUgaW4KLSAgICAgICouJGxpYmV4dCkKLQkjIERvIHRoZSBzdGF0aWMgbGlicmFyaWVzIGxhdGVyLgotCXN0YXRpY2xpYnM9IiRzdGF0aWNsaWJzICRmaWxlIgotCTs7Ci0KLSAgICAgICoubGEpCi0JIyBDaGVjayB0byBzZWUgdGhhdCB0aGlzIHJlYWxseSBpcyBhIGxpYnRvb2wgYXJjaGl2ZS4KLQlpZiAoJHtTRUR9IC1lICcycScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0JZWxzZQotCSAgJGVjaG8gIiRtb2RlbmFtZTogXGAkZmlsZScgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JICAkZWNobyAiJGhlbHAiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCWZpCi0KLQlsaWJyYXJ5X25hbWVzPQotCW9sZF9saWJyYXJ5PQotCXJlbGlua19jb21tYW5kPQotCSMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCWNhc2UgJGZpbGUgaW4KLQkqLyogfCAqXFwqKSAuICRmaWxlIDs7Ci0JKikgLiAuLyRmaWxlIDs7Ci0JZXNhYwotCi0JIyBBZGQgdGhlIGxpYmRpciB0byBjdXJyZW50X2xpYmRpcnMgaWYgaXQgaXMgdGhlIGRlc3RpbmF0aW9uLgotCWlmIHRlc3QgIlgkZGVzdGRpciIgPSAiWCRsaWJkaXIiOyB0aGVuCi0JICBjYXNlICIkY3VycmVudF9saWJkaXJzICIgaW4KLQkgICoiICRsaWJkaXIgIiopIDs7Ci0JICAqKSBjdXJyZW50X2xpYmRpcnM9IiRjdXJyZW50X2xpYmRpcnMgJGxpYmRpciIgOzsKLQkgIGVzYWMKLQllbHNlCi0JICAjIE5vdGUgdGhlIGxpYmRpciBhcyBhIGZ1dHVyZSBsaWJkaXIuCi0JICBjYXNlICIkZnV0dXJlX2xpYmRpcnMgIiBpbgotCSAgKiIgJGxpYmRpciAiKikgOzsKLQkgICopIGZ1dHVyZV9saWJkaXJzPSIkZnV0dXJlX2xpYmRpcnMgJGxpYmRpciIgOzsKLQkgIGVzYWMKLQlmaQotCi0JZGlyPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJS9bXi9dKiQlJSdgLwotCXRlc3QgIlgkZGlyIiA9ICJYJGZpbGUvIiAmJiBkaXI9Ci0JZGlyPSIkZGlyJG9iamRpciIKLQotCWlmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkgICMgRGV0ZXJtaW5lIHRoZSBwcmVmaXggdGhlIHVzZXIgaGFzIGFwcGxpZWQgdG8gb3VyIGZ1dHVyZSBkaXIuCi0JICBpbnN0X3ByZWZpeF9kaXI9YCRlY2hvICIkZGVzdGRpciIgfCAkU0VEICJzJSRsaWJkaXJcJCUlImAKLQotCSAgIyBEb24ndCBhbGxvdyB0aGUgdXNlciB0byBwbGFjZSB1cyBvdXRzaWRlIG9mIG91ciBleHBlY3RlZAotCSAgIyBsb2NhdGlvbiBiL2MgdGhpcyBwcmV2ZW50cyBmaW5kaW5nIGRlcGVuZGVudCBsaWJyYXJpZXMgdGhhdAotCSAgIyBhcmUgaW5zdGFsbGVkIHRvIHRoZSBzYW1lIHByZWZpeC4KLQkgICMgQXQgcHJlc2VudCwgdGhpcyBjaGVjayBkb2Vzbid0IGFmZmVjdCB3aW5kb3dzIC5kbGwncyB0aGF0Ci0JICAjIGFyZSBpbnN0YWxsZWQgaW50byAkbGliZGlyLy4uL2JpbiAoY3VycmVudGx5LCB0aGF0IHdvcmtzIGZpbmUpCi0JICAjIGJ1dCBpdCdzIHNvbWV0aGluZyB0byBrZWVwIGFuIGV5ZSBvbi4KLQkgIGlmIHRlc3QgIiRpbnN0X3ByZWZpeF9kaXIiID0gIiRkZXN0ZGlyIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBlcnJvcjogY2Fubm90IGluc3RhbGwgXGAkZmlsZScgdG8gYSBkaXJlY3Rvcnkgbm90IGVuZGluZyBpbiAkbGliZGlyIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKLQotCSAgaWYgdGVzdCAtbiAiJGluc3RfcHJlZml4X2RpciI7IHRoZW4KLQkgICAgIyBTdGljayB0aGUgaW5zdF9wcmVmaXhfZGlyIGRhdGEgaW50byB0aGUgbGluayBjb21tYW5kLgotCSAgICByZWxpbmtfY29tbWFuZD1gJGVjaG8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJS1pbnN0LXByZWZpeC1kaXIgJGluc3RfcHJlZml4X2RpciUiIHwgJE5MMlNQYAotCSAgZWxzZQotCSAgICByZWxpbmtfY29tbWFuZD1gJGVjaG8gIiRyZWxpbmtfY29tbWFuZCIgfCAkU1AyTkwgfCAkU0VEICJzJUBpbnN0X3ByZWZpeF9kaXJAJSUiIHwgJE5MMlNQYAotCSAgZmkKLQotCSAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogcmVsaW5raW5nIFxgJGZpbGUnIiAxPiYyCi0JICAkc2hvdyAiJHJlbGlua19jb21tYW5kIgotCSAgaWYgJHJ1biBldmFsICIkcmVsaW5rX2NvbW1hbmQiOyB0aGVuIDoKLQkgIGVsc2UKLQkgICAgJGVjaG8gIiRtb2RlbmFtZTogZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKLQlmaQotCi0JIyBTZWUgdGhlIG5hbWVzIG9mIHRoZSBzaGFyZWQgbGlicmFyeS4KLQlzZXQgZHVtbXkgJGxpYnJhcnlfbmFtZXMKLQlpZiB0ZXN0IC1uICIkMiI7IHRoZW4KLQkgIHJlYWxuYW1lPSIkMiIKLQkgIHNoaWZ0Ci0JICBzaGlmdAotCi0JICBzcmNuYW1lPSIkcmVhbG5hbWUiCi0JICB0ZXN0IC1uICIkcmVsaW5rX2NvbW1hbmQiICYmIHNyY25hbWU9IiRyZWFsbmFtZSJUCi0KLQkgICMgSW5zdGFsbCB0aGUgc2hhcmVkIGxpYnJhcnkgYW5kIGJ1aWxkIHRoZSBzeW1saW5rcy4KLQkgICRzaG93ICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIgotCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRkaXIvJHNyY25hbWUgJGRlc3RkaXIvJHJlYWxuYW1lIiB8fCBleGl0ICQ/Ci0JICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJHN0cmlwbGliIjsgdGhlbgotCSAgICAkc2hvdyAiJHN0cmlwbGliICRkZXN0ZGlyLyRyZWFsbmFtZSIKLQkgICAgJHJ1biBldmFsICIkc3RyaXBsaWIgJGRlc3RkaXIvJHJlYWxuYW1lIiB8fCBleGl0ICQ/Ci0JICBmaQotCi0JICBpZiB0ZXN0ICIkIyIgLWd0IDA7IHRoZW4KLQkgICAgIyBEZWxldGUgdGhlIG9sZCBzeW1saW5rcywgYW5kIGNyZWF0ZSBuZXcgb25lcy4KLQkgICAgIyBUcnkgYGxuIC1zZicgZmlyc3QsIGJlY2F1c2UgdGhlIGBsbicgYmluYXJ5IG1pZ2h0IGRlcGVuZCBvbgotCSAgICAjIHRoZSBzeW1saW5rIHdlIHJlcGxhY2UhICBTb2xhcmlzIC9iaW4vbG4gZG9lcyBub3QgdW5kZXJzdGFuZCAtZiwKLQkgICAgIyBzbyB3ZSBhbHNvIG5lZWQgdG8gdHJ5IHJtICYmIGxuIC1zLgotCSAgICBmb3IgbGlua25hbWUKLQkgICAgZG8KLQkgICAgICBpZiB0ZXN0ICIkbGlua25hbWUiICE9ICIkcmVhbG5hbWUiOyB0aGVuCi0gICAgICAgICAgICAgICAgJHNob3cgIihjZCAkZGVzdGRpciAmJiB7ICRMTl9TIC1mICRyZWFsbmFtZSAkbGlua25hbWUgfHwgeyAkcm0gJGxpbmtuYW1lICYmICRMTl9TICRyZWFsbmFtZSAkbGlua25hbWU7IH07IH0pIgotICAgICAgICAgICAgICAgICRydW4gZXZhbCAiKGNkICRkZXN0ZGlyICYmIHsgJExOX1MgLWYgJHJlYWxuYW1lICRsaW5rbmFtZSB8fCB7ICRybSAkbGlua25hbWUgJiYgJExOX1MgJHJlYWxuYW1lICRsaW5rbmFtZTsgfTsgfSkiCi0JICAgICAgZmkKLQkgICAgZG9uZQotCSAgZmkKLQotCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIHBvc3RpbnN0YWxsIGNvbW1hbmRzLgotCSAgbGliPSIkZGVzdGRpci8kcmVhbG5hbWUiCi0JICBjbWRzPSRwb3N0aW5zdGFsbF9jbWRzCi0JICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICBldmFsIGNtZD1cIiRjbWRcIgotCSAgICAkc2hvdyAiJGNtZCIKLQkgICAgJHJ1biBldmFsICIkY21kIiB8fCB7Ci0JICAgICAgbHRfZXhpdD0kPwotCi0JICAgICAgIyBSZXN0b3JlIHRoZSB1bmluc3RhbGxlZCBsaWJyYXJ5IGFuZCBleGl0Ci0JICAgICAgaWYgdGVzdCAiJG1vZGUiID0gcmVsaW5rOyB0aGVuCi0JCSRydW4gZXZhbCAnKGNkICRvdXRwdXRfb2JqZGlyICYmICRybSAke3JlYWxuYW1lfVQgJiYgJG12ICR7cmVhbG5hbWV9VSAkcmVhbG5hbWUpJwotCSAgICAgIGZpCi0KLQkgICAgICBleGl0ICRsdF9leGl0Ci0JICAgIH0KLQkgIGRvbmUKLQkgIElGUz0iJHNhdmVfaWZzIgotCWZpCi0KLQkjIEluc3RhbGwgdGhlIHBzZXVkby1saWJyYXJ5IGZvciBpbmZvcm1hdGlvbiBwdXJwb3Nlcy4KLQluYW1lPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JaW5zdG5hbWU9IiRkaXIvJG5hbWUiaQotCSRzaG93ICIkaW5zdGFsbF9wcm9nICRpbnN0bmFtZSAkZGVzdGRpci8kbmFtZSIKLQkkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgJGluc3RuYW1lICRkZXN0ZGlyLyRuYW1lIiB8fCBleGl0ICQ/Ci0KLQkjIE1heWJlIGluc3RhbGwgdGhlIHN0YXRpYyBsaWJyYXJ5LCB0b28uCi0JdGVzdCAtbiAiJG9sZF9saWJyYXJ5IiAmJiBzdGF0aWNsaWJzPSIkc3RhdGljbGlicyAkZGlyLyRvbGRfbGlicmFyeSIKLQk7OwotCi0gICAgICAqLmxvKQotCSMgSW5zdGFsbCAoaS5lLiBjb3B5KSBhIGxpYnRvb2wgb2JqZWN0LgotCi0JIyBGaWd1cmUgb3V0IGRlc3RpbmF0aW9uIGZpbGUgbmFtZSwgaWYgaXQgd2Fzbid0IGFscmVhZHkgc3BlY2lmaWVkLgotCWlmIHRlc3QgLW4gIiRkZXN0bmFtZSI7IHRoZW4KLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdG5hbWUiCi0JZWxzZQotCSAgZGVzdGZpbGU9YCRlY2hvICJYJGZpbGUiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQkgIGRlc3RmaWxlPSIkZGVzdGRpci8kZGVzdGZpbGUiCi0JZmkKLQotCSMgRGVkdWNlIHRoZSBuYW1lIG9mIHRoZSBkZXN0aW5hdGlvbiBvbGQtc3R5bGUgb2JqZWN0IGZpbGUuCi0JY2FzZSAkZGVzdGZpbGUgaW4KLQkqLmxvKQotCSAgc3RhdGljZGVzdD1gJGVjaG8gIlgkZGVzdGZpbGUiIHwgJFhzZWQgLWUgIiRsbzJvImAKLQkgIDs7Ci0JKi4kb2JqZXh0KQotCSAgc3RhdGljZGVzdD0iJGRlc3RmaWxlIgotCSAgZGVzdGZpbGU9Ci0JICA7OwotCSopCi0JICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgY29weSBhIGxpYnRvb2wgb2JqZWN0IHRvIFxgJGRlc3RmaWxlJyIgMT4mMgotCSAgJGVjaG8gIiRoZWxwIiAxPiYyCi0JICBleGl0ICRFWElUX0ZBSUxVUkUKLQkgIDs7Ci0JZXNhYwotCi0JIyBJbnN0YWxsIHRoZSBsaWJ0b29sIG9iamVjdCBpZiByZXF1ZXN0ZWQuCi0JaWYgdGVzdCAtbiAiJGRlc3RmaWxlIjsgdGhlbgotCSAgJHNob3cgIiRpbnN0YWxsX3Byb2cgJGZpbGUgJGRlc3RmaWxlIgotCSAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nICRmaWxlICRkZXN0ZmlsZSIgfHwgZXhpdCAkPwotCWZpCi0KLQkjIEluc3RhbGwgdGhlIG9sZCBvYmplY3QgaWYgZW5hYmxlZC4KLQlpZiB0ZXN0ICIkYnVpbGRfb2xkX2xpYnMiID0geWVzOyB0aGVuCi0JICAjIERlZHVjZSB0aGUgbmFtZSBvZiB0aGUgb2xkLXN0eWxlIG9iamVjdCBmaWxlLgotCSAgc3RhdGljb2JqPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICIkbG8ybyJgCi0KLQkgICRzaG93ICIkaW5zdGFsbF9wcm9nICRzdGF0aWNvYmogJHN0YXRpY2Rlc3QiCi0JICAkcnVuIGV2YWwgIiRpbnN0YWxsX3Byb2cgXCRzdGF0aWNvYmogXCRzdGF0aWNkZXN0IiB8fCBleGl0ICQ/Ci0JZmkKLQlleGl0ICRFWElUX1NVQ0NFU1MKLQk7OwotCi0gICAgICAqKQotCSMgRmlndXJlIG91dCBkZXN0aW5hdGlvbiBmaWxlIG5hbWUsIGlmIGl0IHdhc24ndCBhbHJlYWR5IHNwZWNpZmllZC4KLQlpZiB0ZXN0IC1uICIkZGVzdG5hbWUiOyB0aGVuCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RuYW1lIgotCWVsc2UKLQkgIGRlc3RmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0JICBkZXN0ZmlsZT0iJGRlc3RkaXIvJGRlc3RmaWxlIgotCWZpCi0KLQkjIElmIHRoZSBmaWxlIGlzIG1pc3NpbmcsIGFuZCB0aGVyZSBpcyBhIC5leGUgb24gdGhlIGVuZCwgc3RyaXAgaXQKLQkjIGJlY2F1c2UgaXQgaXMgbW9zdCBsaWtlbHkgYSBsaWJ0b29sIHNjcmlwdCB3ZSBhY3R1YWxseSB3YW50IHRvCi0JIyBpbnN0YWxsCi0Jc3RyaXBwZWRfZXh0PSIiCi0JY2FzZSAkZmlsZSBpbgotCSAgKi5leGUpCi0JICAgIGlmIHRlc3QgISAtZiAiJGZpbGUiOyB0aGVuCi0JICAgICAgZmlsZT1gJGVjaG8gJGZpbGV8JHtTRUR9ICdzLC5leGUkLCwnYAotCSAgICAgIHN0cmlwcGVkX2V4dD0iLmV4ZSIKLQkgICAgZmkKLQkgICAgOzsKLQllc2FjCi0KLQkjIERvIGEgdGVzdCB0byBzZWUgaWYgdGhpcyBpcyByZWFsbHkgYSBsaWJ0b29sIHByb2dyYW0uCi0JY2FzZSAkaG9zdCBpbgotCSpjeWd3aW4qfCptaW5ndyopCi0JICAgIHdyYXBwZXI9YCRlY2hvICRmaWxlIHwgJHtTRUR9IC1lICdzLC5leGUkLCwnYAotCSAgICA7OwotCSopCi0JICAgIHdyYXBwZXI9JGZpbGUKLQkgICAgOzsKLQllc2FjCi0JaWYgKCR7U0VEfSAtZSAnNHEnICR3cmFwcGVyIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKT4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgbm90aW5zdF9kZXBsaWJzPQotCSAgcmVsaW5rX2NvbW1hbmQ9Ci0KLQkgICMgTm90ZSB0aGF0IGl0IGlzIG5vdCBuZWNlc3Nhcnkgb24gY3lnd2luL21pbmd3IHRvIGFwcGVuZCBhIGRvdCB0bwotCSAgIyBmb28gZXZlbiBpZiBib3RoIGZvbyBhbmQgRklMRS5leGUgZXhpc3Q6IGF1dG9tYXRpYy1hcHBlbmQtLmV4ZQotCSAgIyBiZWhhdmlvciBoYXBwZW5zIG9ubHkgZm9yIGV4ZWMoMyksIG5vdCBmb3Igb3BlbigyKSEgIEFsc28sIHNvdXJjaW5nCi0JICAjIGBGSUxFLicgZG9lcyBub3Qgd29yayBvbiBjeWd3aW4gbWFuYWdlZCBtb3VudHMuCi0JICAjCi0JICAjIElmIHRoZXJlIGlzIG5vIGRpcmVjdG9yeSBjb21wb25lbnQsIHRoZW4gYWRkIG9uZS4KLQkgIGNhc2UgJHdyYXBwZXIgaW4KLQkgICovKiB8ICpcXCopIC4gJHt3cmFwcGVyfSA7OwotCSAgKikgLiAuLyR7d3JhcHBlcn0gOzsKLQkgIGVzYWMKLQotCSAgIyBDaGVjayB0aGUgdmFyaWFibGVzIHRoYXQgc2hvdWxkIGhhdmUgYmVlbiBzZXQuCi0JICBpZiB0ZXN0IC16ICIkbm90aW5zdF9kZXBsaWJzIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIGxpYnRvb2wgd3JhcHBlciBzY3JpcHQgXGAkd3JhcHBlciciIDE+JjIKLQkgICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0JICBmaQotCi0JICBmaW5hbGl6ZT15ZXMKLQkgIGZvciBsaWIgaW4gJG5vdGluc3RfZGVwbGliczsgZG8KLQkgICAgIyBDaGVjayB0byBzZWUgdGhhdCBlYWNoIGxpYnJhcnkgaXMgaW5zdGFsbGVkLgotCSAgICBsaWJkaXI9Ci0JICAgIGlmIHRlc3QgLWYgIiRsaWIiOyB0aGVuCi0JICAgICAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JICAgICAgY2FzZSAkbGliIGluCi0JICAgICAgKi8qIHwgKlxcKikgLiAkbGliIDs7Ci0JICAgICAgKikgLiAuLyRsaWIgOzsKLQkgICAgICBlc2FjCi0JICAgIGZpCi0JICAgIGxpYmZpbGU9IiRsaWJkaXIvImAkZWNobyAiWCRsaWIiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlZydgICMjIyB0ZXN0c3VpdGU6IHNraXAgbmVzdGVkIHF1b3RpbmcgdGVzdAotCSAgICBpZiB0ZXN0IC1uICIkbGliZGlyIiAmJiB0ZXN0ICEgLWYgIiRsaWJmaWxlIjsgdGhlbgotCSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHdhcm5pbmc6IFxgJGxpYicgaGFzIG5vdCBiZWVuIGluc3RhbGxlZCBpbiBcYCRsaWJkaXInIiAxPiYyCi0JICAgICAgZmluYWxpemU9bm8KLQkgICAgZmkKLQkgIGRvbmUKLQotCSAgcmVsaW5rX2NvbW1hbmQ9Ci0JICAjIE5vdGUgdGhhdCBpdCBpcyBub3QgbmVjZXNzYXJ5IG9uIGN5Z3dpbi9taW5ndyB0byBhcHBlbmQgYSBkb3QgdG8KLQkgICMgZm9vIGV2ZW4gaWYgYm90aCBmb28gYW5kIEZJTEUuZXhlIGV4aXN0OiBhdXRvbWF0aWMtYXBwZW5kLS5leGUKLQkgICMgYmVoYXZpb3IgaGFwcGVucyBvbmx5IGZvciBleGVjKDMpLCBub3QgZm9yIG9wZW4oMikhICBBbHNvLCBzb3VyY2luZwotCSAgIyBgRklMRS4nIGRvZXMgbm90IHdvcmsgb24gY3lnd2luIG1hbmFnZWQgbW91bnRzLgotCSAgIwotCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JICBjYXNlICR3cmFwcGVyIGluCi0JICAqLyogfCAqXFwqKSAuICR7d3JhcHBlcn0gOzsKLQkgICopIC4gLi8ke3dyYXBwZXJ9IDs7Ci0JICBlc2FjCi0KLQkgIG91dHB1dG5hbWU9Ci0JICBpZiB0ZXN0ICIkZmFzdF9pbnN0YWxsIiA9IG5vICYmIHRlc3QgLW4gIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4KLQkgICAgaWYgdGVzdCAiJGZpbmFsaXplIiA9IHllcyAmJiB0ZXN0IC16ICIkcnVuIjsgdGhlbgotCSAgICAgIHRtcGRpcj1gZnVuY19ta3RlbXBkaXJgCi0JICAgICAgZmlsZT1gJGVjaG8gIlgkZmlsZSRzdHJpcHBlZF9leHQiIHwgJFhzZWQgLWUgJ3MlXi4qLyUlJ2AKLQkgICAgICBvdXRwdXRuYW1lPSIkdG1wZGlyLyRmaWxlIgotCSAgICAgICMgUmVwbGFjZSB0aGUgb3V0cHV0IGZpbGUgc3BlY2lmaWNhdGlvbi4KLQkgICAgICByZWxpbmtfY29tbWFuZD1gJGVjaG8gIlgkcmVsaW5rX2NvbW1hbmQiIHwgJFNQMk5MIHwgJFhzZWQgLWUgJ3MlQE9VVFBVVEAlJyIkb3V0cHV0bmFtZSInJWcnIHwgJE5MMlNQYAotCi0JICAgICAgJHNob3cgIiRyZWxpbmtfY29tbWFuZCIKLQkgICAgICBpZiAkcnVuIGV2YWwgIiRyZWxpbmtfY29tbWFuZCI7IHRoZW4gOgotCSAgICAgIGVsc2UKLQkJJGVjaG8gIiRtb2RlbmFtZTogZXJyb3I6IHJlbGluayBcYCRmaWxlJyB3aXRoIHRoZSBhYm92ZSBjb21tYW5kIGJlZm9yZSBpbnN0YWxsaW5nIGl0IiAxPiYyCi0JCSR7cm19ciAiJHRtcGRpciIKLQkJY29udGludWUKLQkgICAgICBmaQotCSAgICAgIGZpbGU9IiRvdXRwdXRuYW1lIgotCSAgICBlbHNlCi0JICAgICAgJGVjaG8gIiRtb2RlbmFtZTogd2FybmluZzogY2Fubm90IHJlbGluayBcYCRmaWxlJyIgMT4mMgotCSAgICBmaQotCSAgZWxzZQotCSAgICAjIEluc3RhbGwgdGhlIGJpbmFyeSB0aGF0IHdlIGNvbXBpbGVkIGVhcmxpZXIuCi0JICAgIGZpbGU9YCRlY2hvICJYJGZpbGUkc3RyaXBwZWRfZXh0IiB8ICRYc2VkIC1lICJzJVwoW14vXSpcKSQlJG9iamRpci9cMSUiYAotCSAgZmkKLQlmaQotCi0JIyByZW1vdmUgLmV4ZSBzaW5jZSBjeWd3aW4gL3Vzci9iaW4vaW5zdGFsbCB3aWxsIGFwcGVuZCBhbm90aGVyCi0JIyBvbmUgYW55d2F5IAotCWNhc2UgJGluc3RhbGxfcHJvZywkaG9zdCBpbgotCSovdXNyL2Jpbi9pbnN0YWxsKiwqY3lnd2luKikKLQkgIGNhc2UgJGZpbGU6JGRlc3RmaWxlIGluCi0JICAqLmV4ZToqLmV4ZSkKLQkgICAgIyB0aGlzIGlzIG9rCi0JICAgIDs7Ci0JICAqLmV4ZToqKQotCSAgICBkZXN0ZmlsZT0kZGVzdGZpbGUuZXhlCi0JICAgIDs7Ci0JICAqOiouZXhlKQotCSAgICBkZXN0ZmlsZT1gJGVjaG8gJGRlc3RmaWxlIHwgJHtTRUR9IC1lICdzLC5leGUkLCwnYAotCSAgICA7OwotCSAgZXNhYwotCSAgOzsKLQllc2FjCi0JJHNob3cgIiRpbnN0YWxsX3Byb2ckc3RyaXBtZSAkZmlsZSAkZGVzdGZpbGUiCi0JJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nXCRzdHJpcG1lIFwkZmlsZSBcJGRlc3RmaWxlIiB8fCBleGl0ICQ/Ci0JdGVzdCAtbiAiJG91dHB1dG5hbWUiICYmICR7cm19ciAiJHRtcGRpciIKLQk7OwotICAgICAgZXNhYwotICAgIGRvbmUKLQotICAgIGZvciBmaWxlIGluICRzdGF0aWNsaWJzOyBkbwotICAgICAgbmFtZT1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyVeLiovJSUnYAotCi0gICAgICAjIFNldCB1cCB0aGUgcmFubGliIHBhcmFtZXRlcnMuCi0gICAgICBvbGRsaWI9IiRkZXN0ZGlyLyRuYW1lIgotCi0gICAgICAkc2hvdyAiJGluc3RhbGxfcHJvZyAkZmlsZSAkb2xkbGliIgotICAgICAgJHJ1biBldmFsICIkaW5zdGFsbF9wcm9nIFwkZmlsZSBcJG9sZGxpYiIgfHwgZXhpdCAkPwotCi0gICAgICBpZiB0ZXN0IC1uICIkc3RyaXBtZSIgJiYgdGVzdCAtbiAiJG9sZF9zdHJpcGxpYiI7IHRoZW4KLQkkc2hvdyAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIgotCSRydW4gZXZhbCAiJG9sZF9zdHJpcGxpYiAkb2xkbGliIiB8fCBleGl0ICQ/Ci0gICAgICBmaQotCi0gICAgICAjIERvIGVhY2ggY29tbWFuZCBpbiB0aGUgcG9zdGluc3RhbGwgY29tbWFuZHMuCi0gICAgICBjbWRzPSRvbGRfcG9zdGluc3RhbGxfY21kcwotICAgICAgc2F2ZV9pZnM9IiRJRlMiOyBJRlM9J34nCi0gICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotCUlGUz0iJHNhdmVfaWZzIgotCWV2YWwgY21kPVwiJGNtZFwiCi0JJHNob3cgIiRjbWQiCi0JJHJ1biBldmFsICIkY21kIiB8fCBleGl0ICQ/Ci0gICAgICBkb25lCi0gICAgICBJRlM9IiRzYXZlX2lmcyIKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0IC1uICIkZnV0dXJlX2xpYmRpcnMiOyB0aGVuCi0gICAgICAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiByZW1lbWJlciB0byBydW4gXGAkcHJvZ25hbWUgLS1maW5pc2gkZnV0dXJlX2xpYmRpcnMnIiAxPiYyCi0gICAgZmkKLQotICAgIGlmIHRlc3QgLW4gIiRjdXJyZW50X2xpYmRpcnMiOyB0aGVuCi0gICAgICAjIE1heWJlIGp1c3QgZG8gYSBkcnkgcnVuLgotICAgICAgdGVzdCAtbiAiJHJ1biIgJiYgY3VycmVudF9saWJkaXJzPSIgLW4kY3VycmVudF9saWJkaXJzIgotICAgICAgZXhlY19jbWQ9JyRTSEVMTCAkcHJvZ3BhdGggJHByZXNlcnZlX2FyZ3MgLS1maW5pc2gkY3VycmVudF9saWJkaXJzJwotICAgIGVsc2UKLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIGZpCi0gICAgOzsKLQotICAjIGxpYnRvb2wgZmluaXNoIG1vZGUKLSAgZmluaXNoKQotICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6IGZpbmlzaCIKLSAgICBsaWJkaXJzPSIkbm9ub3B0IgotICAgIGFkbWluY21kcz0KLQotICAgIGlmIHRlc3QgLW4gIiRmaW5pc2hfY21kcyRmaW5pc2hfZXZhbCIgJiYgdGVzdCAtbiAiJGxpYmRpcnMiOyB0aGVuCi0gICAgICBmb3IgZGlyCi0gICAgICBkbwotCWxpYmRpcnM9IiRsaWJkaXJzICRkaXIiCi0gICAgICBkb25lCi0KLSAgICAgIGZvciBsaWJkaXIgaW4gJGxpYmRpcnM7IGRvCi0JaWYgdGVzdCAtbiAiJGZpbmlzaF9jbWRzIjsgdGhlbgotCSAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIGZpbmlzaCBjb21tYW5kcy4KLQkgIGNtZHM9JGZpbmlzaF9jbWRzCi0JICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JICAgIElGUz0iJHNhdmVfaWZzIgotCSAgICBldmFsIGNtZD1cIiRjbWRcIgotCSAgICAkc2hvdyAiJGNtZCIKLQkgICAgJHJ1biBldmFsICIkY21kIiB8fCBhZG1pbmNtZHM9IiRhZG1pbmNtZHMKLSAgICAgICAkY21kIgotCSAgZG9uZQotCSAgSUZTPSIkc2F2ZV9pZnMiCi0JZmkKLQlpZiB0ZXN0IC1uICIkZmluaXNoX2V2YWwiOyB0aGVuCi0JICAjIERvIHRoZSBzaW5nbGUgZmluaXNoX2V2YWwuCi0JICBldmFsIGNtZHM9XCIkZmluaXNoX2V2YWxcIgotCSAgJHJ1biBldmFsICIkY21kcyIgfHwgYWRtaW5jbWRzPSIkYWRtaW5jbWRzCi0gICAgICAgJGNtZHMiCi0JZmkKLSAgICAgIGRvbmUKLSAgICBmaQotCi0gICAgIyBFeGl0IGhlcmUgaWYgdGhleSB3YW50ZWQgc2lsZW50IG1vZGUuCi0gICAgdGVzdCAiJHNob3ciID0gOiAmJiBleGl0ICRFWElUX1NVQ0NFU1MKLQotICAgICRlY2hvICJYLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgfCAkWHNlZAotICAgICRlY2hvICJMaWJyYXJpZXMgaGF2ZSBiZWVuIGluc3RhbGxlZCBpbjoiCi0gICAgZm9yIGxpYmRpciBpbiAkbGliZGlyczsgZG8KLSAgICAgICRlY2hvICIgICAkbGliZGlyIgotICAgIGRvbmUKLSAgICAkZWNobwotICAgICRlY2hvICJJZiB5b3UgZXZlciBoYXBwZW4gdG8gd2FudCB0byBsaW5rIGFnYWluc3QgaW5zdGFsbGVkIGxpYnJhcmllcyIKLSAgICAkZWNobyAiaW4gYSBnaXZlbiBkaXJlY3RvcnksIExJQkRJUiwgeW91IG11c3QgZWl0aGVyIHVzZSBsaWJ0b29sLCBhbmQiCi0gICAgJGVjaG8gInNwZWNpZnkgdGhlIGZ1bGwgcGF0aG5hbWUgb2YgdGhlIGxpYnJhcnksIG9yIHVzZSB0aGUgXGAtTExJQkRJUiciCi0gICAgJGVjaG8gImZsYWcgZHVyaW5nIGxpbmtpbmcgYW5kIGRvIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nOiIKLSAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLSAgICAgICRlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHNobGlicGF0aF92YXInIGVudmlyb25tZW50IHZhcmlhYmxlIgotICAgICAgJGVjaG8gIiAgICAgZHVyaW5nIGV4ZWN1dGlvbiIKLSAgICBmaQotICAgIGlmIHRlc3QgLW4gIiRydW5wYXRoX3ZhciI7IHRoZW4KLSAgICAgICRlY2hvICIgICAtIGFkZCBMSUJESVIgdG8gdGhlIFxgJHJ1bnBhdGhfdmFyJyBlbnZpcm9ubWVudCB2YXJpYWJsZSIKLSAgICAgICRlY2hvICIgICAgIGR1cmluZyBsaW5raW5nIgotICAgIGZpCi0gICAgaWYgdGVzdCAtbiAiJGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMiOyB0aGVuCi0gICAgICBsaWJkaXI9TElCRElSCi0gICAgICBldmFsIGZsYWc9XCIkaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY1wiCi0KLSAgICAgICRlY2hvICIgICAtIHVzZSB0aGUgXGAkZmxhZycgbGlua2VyIGZsYWciCi0gICAgZmkKLSAgICBpZiB0ZXN0IC1uICIkYWRtaW5jbWRzIjsgdGhlbgotICAgICAgJGVjaG8gIiAgIC0gaGF2ZSB5b3VyIHN5c3RlbSBhZG1pbmlzdHJhdG9yIHJ1biB0aGVzZSBjb21tYW5kczokYWRtaW5jbWRzIgotICAgIGZpCi0gICAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KLSAgICAgICRlY2hvICIgICAtIGhhdmUgeW91ciBzeXN0ZW0gYWRtaW5pc3RyYXRvciBhZGQgTElCRElSIHRvIFxgL2V0Yy9sZC5zby5jb25mJyIKLSAgICBmaQotICAgICRlY2hvCi0gICAgJGVjaG8gIlNlZSBhbnkgb3BlcmF0aW5nIHN5c3RlbSBkb2N1bWVudGF0aW9uIGFib3V0IHNoYXJlZCBsaWJyYXJpZXMgZm9yIgotICAgICRlY2hvICJtb3JlIGluZm9ybWF0aW9uLCBzdWNoIGFzIHRoZSBsZCgxKSBhbmQgbGQuc28oOCkgbWFudWFsIHBhZ2VzLiIKLSAgICAkZWNobyAiWC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIHwgJFhzZWQKLSAgICBleGl0ICRFWElUX1NVQ0NFU1MKLSAgICA7OwotCi0gICMgbGlidG9vbCBleGVjdXRlIG1vZGUKLSAgZXhlY3V0ZSkKLSAgICBtb2RlbmFtZT0iJG1vZGVuYW1lOiBleGVjdXRlIgotCi0gICAgIyBUaGUgZmlyc3QgYXJndW1lbnQgaXMgdGhlIGNvbW1hbmQgbmFtZS4KLSAgICBjbWQ9IiRub25vcHQiCi0gICAgaWYgdGVzdCAteiAiJGNtZCI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBDT01NQU5EIiAxPiYyCi0gICAgICAkZWNobyAiJGhlbHAiCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQotCi0gICAgIyBIYW5kbGUgLWRsb3BlbiBmbGFncyBpbW1lZGlhdGVseS4KLSAgICBmb3IgZmlsZSBpbiAkZXhlY3V0ZV9kbGZpbGVzOyBkbwotICAgICAgaWYgdGVzdCAhIC1mICIkZmlsZSI7IHRoZW4KLQkkZWNobyAiJG1vZGVuYW1lOiBcYCRmaWxlJyBpcyBub3QgYSBmaWxlIiAxPiYyCi0JJGVjaG8gIiRoZWxwIiAxPiYyCi0JZXhpdCAkRVhJVF9GQUlMVVJFCi0gICAgICBmaQotCi0gICAgICBkaXI9Ci0gICAgICBjYXNlICRmaWxlIGluCi0gICAgICAqLmxhKQotCSMgQ2hlY2sgdG8gc2VlIHRoYXQgdGhpcyByZWFsbHkgaXMgYSBsaWJ0b29sIGFyY2hpdmUuCi0JaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotCWVsc2UKLQkgICRlY2hvICIkbW9kZW5hbWU6IFxgJGxpYicgaXMgbm90IGEgdmFsaWQgbGlidG9vbCBhcmNoaXZlIiAxPiYyCi0JICAkZWNobyAiJGhlbHAiIDE+JjIKLQkgIGV4aXQgJEVYSVRfRkFJTFVSRQotCWZpCi0KLQkjIFJlYWQgdGhlIGxpYnRvb2wgbGlicmFyeS4KLQlkbG5hbWU9Ci0JbGlicmFyeV9uYW1lcz0KLQotCSMgSWYgdGhlcmUgaXMgbm8gZGlyZWN0b3J5IGNvbXBvbmVudCwgdGhlbiBhZGQgb25lLgotCWNhc2UgJGZpbGUgaW4KLQkqLyogfCAqXFwqKSAuICRmaWxlIDs7Ci0JKikgLiAuLyRmaWxlIDs7Ci0JZXNhYwotCi0JIyBTa2lwIHRoaXMgbGlicmFyeSBpZiBpdCBjYW5ub3QgYmUgZGxvcGVuZWQuCi0JaWYgdGVzdCAteiAiJGRsbmFtZSI7IHRoZW4KLQkgICMgV2FybiBpZiBpdCB3YXMgYSBzaGFyZWQgbGlicmFyeS4KLQkgIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIiAmJiAkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nOiBcYCRmaWxlJyB3YXMgbm90IGxpbmtlZCB3aXRoIFxgLWV4cG9ydC1keW5hbWljJyIKLQkgIGNvbnRpbnVlCi0JZmkKLQotCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCXRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiICYmIGRpcj0uCi0KLQlpZiB0ZXN0IC1mICIkZGlyLyRvYmpkaXIvJGRsbmFtZSI7IHRoZW4KLQkgIGRpcj0iJGRpci8kb2JqZGlyIgotCWVsc2UKLQkgIGlmIHRlc3QgISAtZiAiJGRpci8kZGxuYW1lIjsgdGhlbgotCSAgICAkZWNobyAiJG1vZGVuYW1lOiBjYW5ub3QgZmluZCBcYCRkbG5hbWUnIGluIFxgJGRpcicgb3IgXGAkZGlyLyRvYmpkaXInIiAxPiYyCi0JICAgIGV4aXQgJEVYSVRfRkFJTFVSRQotCSAgZmkKLQlmaQotCTs7Ci0KLSAgICAgICoubG8pCi0JIyBKdXN0IGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIC5sbyBmaWxlLgotCWRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotCXRlc3QgIlgkZGlyIiA9ICJYJGZpbGUiICYmIGRpcj0uCi0JOzsKLQotICAgICAgKikKLQkkZWNobyAiJG1vZGVuYW1lOiB3YXJuaW5nIFxgLWRsb3BlbicgaXMgaWdub3JlZCBmb3Igbm9uLWxpYnRvb2wgbGlicmFyaWVzIGFuZCBvYmplY3RzIiAxPiYyCi0JY29udGludWUKLQk7OwotICAgICAgZXNhYwotCi0gICAgICAjIEdldCB0aGUgYWJzb2x1dGUgcGF0aG5hbWUuCi0gICAgICBhYnNkaXI9YGNkICIkZGlyIiAmJiBwd2RgCi0gICAgICB0ZXN0IC1uICIkYWJzZGlyIiAmJiBkaXI9IiRhYnNkaXIiCi0KLSAgICAgICMgTm93IGFkZCB0aGUgZGlyZWN0b3J5IHRvIHNobGlicGF0aF92YXIuCi0gICAgICBpZiBldmFsICJ0ZXN0IC16IFwiXCQkc2hsaWJwYXRoX3ZhclwiIjsgdGhlbgotCWV2YWwgIiRzaGxpYnBhdGhfdmFyPVwiXCRkaXJcIiIKLSAgICAgIGVsc2UKLQlldmFsICIkc2hsaWJwYXRoX3Zhcj1cIlwkZGlyOlwkJHNobGlicGF0aF92YXJcIiIKLSAgICAgIGZpCi0gICAgZG9uZQotCi0gICAgIyBUaGlzIHZhcmlhYmxlIHRlbGxzIHdyYXBwZXIgc2NyaXB0cyBqdXN0IHRvIHNldCBzaGxpYnBhdGhfdmFyCi0gICAgIyByYXRoZXIgdGhhbiBydW5uaW5nIHRoZWlyIHByb2dyYW1zLgotICAgIGxpYnRvb2xfZXhlY3V0ZV9tYWdpYz0iJG1hZ2ljIgotCi0gICAgIyBDaGVjayBpZiBhbnkgb2YgdGhlIGFyZ3VtZW50cyBpcyBhIHdyYXBwZXIgc2NyaXB0LgotICAgIGFyZ3M9Ci0gICAgZm9yIGZpbGUKLSAgICBkbwotICAgICAgY2FzZSAkZmlsZSBpbgotICAgICAgLSopIDs7Ci0gICAgICAqKQotCSMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIHJlYWxseSBhIGxpYnRvb2wgcHJvZ3JhbS4KLQlpZiAoJHtTRUR9IC1lICc0cScgJGZpbGUgfCBncmVwICJeIyBHZW5lcmF0ZWQgYnkgLiokUEFDS0FHRSIpID4vZGV2L251bGwgMj4mMTsgdGhlbgotCSAgIyBJZiB0aGVyZSBpcyBubyBkaXJlY3RvcnkgY29tcG9uZW50LCB0aGVuIGFkZCBvbmUuCi0JICBjYXNlICRmaWxlIGluCi0JICAqLyogfCAqXFwqKSAuICRmaWxlIDs7Ci0JICAqKSAuIC4vJGZpbGUgOzsKLQkgIGVzYWMKLQotCSAgIyBUcmFuc2Zvcm0gYXJnIHRvIHdyYXBwZWQgbmFtZS4KLQkgIGZpbGU9IiRwcm9nZGlyLyRwcm9ncmFtIgotCWZpCi0JOzsKLSAgICAgIGVzYWMKLSAgICAgICMgUXVvdGUgYXJndW1lbnRzICh0byBwcmVzZXJ2ZSBzaGVsbCBtZXRhY2hhcmFjdGVycykuCi0gICAgICBmaWxlPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKLSAgICAgIGFyZ3M9IiRhcmdzIFwiJGZpbGVcIiIKLSAgICBkb25lCi0KLSAgICBpZiB0ZXN0IC16ICIkcnVuIjsgdGhlbgotICAgICAgaWYgdGVzdCAtbiAiJHNobGlicGF0aF92YXIiOyB0aGVuCi0JIyBFeHBvcnQgdGhlIHNobGlicGF0aF92YXIuCi0JZXZhbCAiZXhwb3J0ICRzaGxpYnBhdGhfdmFyIgotICAgICAgZmkKLQotICAgICAgIyBSZXN0b3JlIHNhdmVkIGVudmlyb25tZW50IHZhcmlhYmxlcwotICAgICAgZm9yIGx0X3ZhciBpbiBMQU5HIExBTkdVQUdFIExDX0FMTCBMQ19DVFlQRSBMQ19DT0xMQVRFIExDX01FU1NBR0VTCi0gICAgICBkbwotCWV2YWwgImlmIHRlc3QgXCJcJHtzYXZlXyRsdF92YXIrc2V0fVwiID0gc2V0OyB0aGVuCi0JCSRsdF92YXI9XCRzYXZlXyRsdF92YXI7IGV4cG9ydCAkbHRfdmFyCi0JICAgICAgZmkiCi0gICAgICBkb25lCi0KLSAgICAgICMgTm93IHByZXBhcmUgdG8gYWN0dWFsbHkgZXhlYyB0aGUgY29tbWFuZC4KLSAgICAgIGV4ZWNfY21kPSJcJGNtZCRhcmdzIgotICAgIGVsc2UKLSAgICAgICMgRGlzcGxheSB3aGF0IHdvdWxkIGJlIGRvbmUuCi0gICAgICBpZiB0ZXN0IC1uICIkc2hsaWJwYXRoX3ZhciI7IHRoZW4KLQlldmFsICJcJGVjaG8gXCJcJHNobGlicGF0aF92YXI9XCQkc2hsaWJwYXRoX3ZhclwiIgotCSRlY2hvICJleHBvcnQgJHNobGlicGF0aF92YXIiCi0gICAgICBmaQotICAgICAgJGVjaG8gIiRjbWQkYXJncyIKLSAgICAgIGV4aXQgJEVYSVRfU1VDQ0VTUwotICAgIGZpCi0gICAgOzsKLQotICAjIGxpYnRvb2wgY2xlYW4gYW5kIHVuaW5zdGFsbCBtb2RlCi0gIGNsZWFuIHwgdW5pbnN0YWxsKQotICAgIG1vZGVuYW1lPSIkbW9kZW5hbWU6ICRtb2RlIgotICAgIHJtPSIkbm9ub3B0IgorIyBmdW5jX21vZGVfdW5pbnN0YWxsIGFyZy4uLgorZnVuY19tb2RlX3VuaW5zdGFsbCAoKQoreworICAgICRvcHRfZGVidWcKKyAgICBSTT0iJG5vbm9wdCIKICAgICBmaWxlcz0KICAgICBybWZvcmNlPQogICAgIGV4aXRfc3RhdHVzPTAKQEAgLTY1MzksNDQgKzk0MzYsNDEgQEAKICAgICBmb3IgYXJnCiAgICAgZG8KICAgICAgIGNhc2UgJGFyZyBpbgotICAgICAgLWYpIHJtPSIkcm0gJGFyZyI7IHJtZm9yY2U9eWVzIDs7Ci0gICAgICAtKikgcm09IiRybSAkYXJnIiA7OwotICAgICAgKikgZmlsZXM9IiRmaWxlcyAkYXJnIiA7OworICAgICAgLWYpIGZ1bmNfYXBwZW5kIFJNICIgJGFyZyI7IHJtZm9yY2U9eWVzIDs7CisgICAgICAtKikgZnVuY19hcHBlbmQgUk0gIiAkYXJnIiA7OworICAgICAgKikgZnVuY19hcHBlbmQgZmlsZXMgIiAkYXJnIiA7OwogICAgICAgZXNhYwogICAgIGRvbmUKIAotICAgIGlmIHRlc3QgLXogIiRybSI7IHRoZW4KLSAgICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYW4gUk0gcHJvZ3JhbSIgMT4mMgotICAgICAgJGVjaG8gIiRoZWxwIiAxPiYyCi0gICAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICBmaQorICAgIHRlc3QgLXogIiRSTSIgJiYgXAorICAgICAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGFuIFJNIHByb2dyYW0iCiAKICAgICBybWRpcnM9CiAKLSAgICBvcmlnb2JqZGlyPSIkb2JqZGlyIgogICAgIGZvciBmaWxlIGluICRmaWxlczsgZG8KLSAgICAgIGRpcj1gJGVjaG8gIlgkZmlsZSIgfCAkWHNlZCAtZSAncyUvW14vXSokJSUnYAotICAgICAgaWYgdGVzdCAiWCRkaXIiID0gIlgkZmlsZSI7IHRoZW4KLQlkaXI9LgotCW9iamRpcj0iJG9yaWdvYmpkaXIiCisgICAgICBmdW5jX2Rpcm5hbWUgIiRmaWxlIiAiIiAiLiIKKyAgICAgIGRpcj0iJGZ1bmNfZGlybmFtZV9yZXN1bHQiCisgICAgICBpZiB0ZXN0ICJYJGRpciIgPSBYLjsgdGhlbgorCW9kaXI9IiRvYmpkaXIiCiAgICAgICBlbHNlCi0Jb2JqZGlyPSIkZGlyLyRvcmlnb2JqZGlyIgorCW9kaXI9IiRkaXIvJG9iamRpciIKICAgICAgIGZpCi0gICAgICBuYW1lPWAkZWNobyAiWCRmaWxlIiB8ICRYc2VkIC1lICdzJV4uKi8lJSdgCi0gICAgICB0ZXN0ICIkbW9kZSIgPSB1bmluc3RhbGwgJiYgb2JqZGlyPSIkZGlyIgorICAgICAgZnVuY19iYXNlbmFtZSAiJGZpbGUiCisgICAgICBuYW1lPSIkZnVuY19iYXNlbmFtZV9yZXN1bHQiCisgICAgICB0ZXN0ICIkb3B0X21vZGUiID0gdW5pbnN0YWxsICYmIG9kaXI9IiRkaXIiCiAKLSAgICAgICMgUmVtZW1iZXIgb2JqZGlyIGZvciByZW1vdmFsIGxhdGVyLCBiZWluZyBjYXJlZnVsIHRvIGF2b2lkIGR1cGxpY2F0ZXMKLSAgICAgIGlmIHRlc3QgIiRtb2RlIiA9IGNsZWFuOyB0aGVuCisgICAgICAjIFJlbWVtYmVyIG9kaXIgZm9yIHJlbW92YWwgbGF0ZXIsIGJlaW5nIGNhcmVmdWwgdG8gYXZvaWQgZHVwbGljYXRlcworICAgICAgaWYgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB0aGVuCiAJY2FzZSAiICRybWRpcnMgIiBpbgotCSAgKiIgJG9iamRpciAiKikgOzsKLQkgICopIHJtZGlycz0iJHJtZGlycyAkb2JqZGlyIiA7OworCSAgKiIgJG9kaXIgIiopIDs7CisJICAqKSBmdW5jX2FwcGVuZCBybWRpcnMgIiAkb2RpciIgOzsKIAllc2FjCiAgICAgICBmaQogCiAgICAgICAjIERvbid0IGVycm9yIGlmIHRoZSBmaWxlIGRvZXNuJ3QgZXhpc3QgYW5kIHJtIC1mIHdhcyB1c2VkLgotICAgICAgaWYgKHRlc3QgLUwgIiRmaWxlIikgPi9kZXYvbnVsbCAyPiYxIFwKLQl8fCAodGVzdCAtaCAiJGZpbGUiKSA+L2Rldi9udWxsIDI+JjEgXAotCXx8IHRlc3QgLWYgIiRmaWxlIjsgdGhlbgorICAgICAgaWYgeyB0ZXN0IC1MICIkZmlsZSI7IH0gPi9kZXYvbnVsbCAyPiYxIHx8CisJIHsgdGVzdCAtaCAiJGZpbGUiOyB9ID4vZGV2L251bGwgMj4mMSB8fAorCSB0ZXN0IC1mICIkZmlsZSI7IHRoZW4KIAk6CiAgICAgICBlbGlmIHRlc3QgLWQgIiRmaWxlIjsgdGhlbgogCWV4aXRfc3RhdHVzPTEKQEAgLTY1OTAsNTUgKzk0ODQsMzIgQEAKICAgICAgIGNhc2UgJG5hbWUgaW4KICAgICAgICoubGEpCiAJIyBQb3NzaWJseSBhIGxpYnRvb2wgYXJjaGl2ZSwgc28gdmVyaWZ5IGl0LgotCWlmICgke1NFRH0gLWUgJzJxJyAkZmlsZSB8IGdyZXAgIl4jIEdlbmVyYXRlZCBieSAuKiRQQUNLQUdFIikgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCi0JICAuICRkaXIvJG5hbWUKKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgorCSAgZnVuY19zb3VyY2UgJGRpci8kbmFtZQogCiAJICAjIERlbGV0ZSB0aGUgbGlidG9vbCBsaWJyYXJpZXMgYW5kIHN5bWxpbmtzLgogCSAgZm9yIG4gaW4gJGxpYnJhcnlfbmFtZXM7IGRvCi0JICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvJG4iCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kbiIKIAkgIGRvbmUKLQkgIHRlc3QgLW4gIiRvbGRfbGlicmFyeSIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kb2xkX2xpYnJhcnkiCisJICB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiICYmIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkb2Rpci8kb2xkX2xpYnJhcnkiCiAKLQkgIGNhc2UgIiRtb2RlIiBpbgorCSAgY2FzZSAiJG9wdF9tb2RlIiBpbgogCSAgY2xlYW4pCi0JICAgIGNhc2UgIiAgJGxpYnJhcnlfbmFtZXMgIiBpbgotCSAgICAjICIgICIgaW4gdGhlIGJlZ2lubmluZyBjYXRjaGVzIGVtcHR5ICRkbG5hbWUKKwkgICAgY2FzZSAiICRsaWJyYXJ5X25hbWVzICIgaW4KIAkgICAgKiIgJGRsbmFtZSAiKikgOzsKLQkgICAgKikgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kZGxuYW1lIiA7OworCSAgICAqKSB0ZXN0IC1uICIkZGxuYW1lIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJGRsbmFtZSIgOzsKIAkgICAgZXNhYwotCSAgICAgdGVzdCAtbiAiJGxpYmRpciIgJiYgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1pIgorCSAgICB0ZXN0IC1uICIkbGliZGlyIiAmJiBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvJG5hbWUgJG9kaXIvJHtuYW1lfWkiCiAJICAgIDs7CiAJICB1bmluc3RhbGwpCiAJICAgIGlmIHRlc3QgLW4gIiRsaWJyYXJ5X25hbWVzIjsgdGhlbgogCSAgICAgICMgRG8gZWFjaCBjb21tYW5kIGluIHRoZSBwb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGNtZHM9JHBvc3R1bmluc3RhbGxfY21kcwotCSAgICAgIHNhdmVfaWZzPSIkSUZTIjsgSUZTPSd+JwotCSAgICAgIGZvciBjbWQgaW4gJGNtZHM7IGRvCi0JCUlGUz0iJHNhdmVfaWZzIgotCQlldmFsIGNtZD1cIiRjbWRcIgotCQkkc2hvdyAiJGNtZCIKLQkJJHJ1biBldmFsICIkY21kIgotCQlpZiB0ZXN0ICIkPyIgLW5lIDAgJiYgdGVzdCAiJHJtZm9yY2UiICE9IHllczsgdGhlbgotCQkgIGV4aXRfc3RhdHVzPTEKLQkJZmkKLQkgICAgICBkb25lCi0JICAgICAgSUZTPSIkc2F2ZV9pZnMiCisJICAgICAgZnVuY19leGVjdXRlX2NtZHMgIiRwb3N0dW5pbnN0YWxsX2NtZHMiICd0ZXN0ICIkcm1mb3JjZSIgPSB5ZXMgfHwgZXhpdF9zdGF0dXM9MScKIAkgICAgZmkKIAogCSAgICBpZiB0ZXN0IC1uICIkb2xkX2xpYnJhcnkiOyB0aGVuCiAJICAgICAgIyBEbyBlYWNoIGNvbW1hbmQgaW4gdGhlIG9sZF9wb3N0dW5pbnN0YWxsIGNvbW1hbmRzLgotCSAgICAgIGNtZHM9JG9sZF9wb3N0dW5pbnN0YWxsX2NtZHMKLQkgICAgICBzYXZlX2lmcz0iJElGUyI7IElGUz0nficKLQkgICAgICBmb3IgY21kIGluICRjbWRzOyBkbwotCQlJRlM9IiRzYXZlX2lmcyIKLQkJZXZhbCBjbWQ9XCIkY21kXCIKLQkJJHNob3cgIiRjbWQiCi0JCSRydW4gZXZhbCAiJGNtZCIKLQkJaWYgdGVzdCAiJD8iIC1uZSAwICYmIHRlc3QgIiRybWZvcmNlIiAhPSB5ZXM7IHRoZW4KLQkJICBleGl0X3N0YXR1cz0xCi0JCWZpCi0JICAgICAgZG9uZQotCSAgICAgIElGUz0iJHNhdmVfaWZzIgorCSAgICAgIGZ1bmNfZXhlY3V0ZV9jbWRzICIkb2xkX3Bvc3R1bmluc3RhbGxfY21kcyIgJ3Rlc3QgIiRybWZvcmNlIiA9IHllcyB8fCBleGl0X3N0YXR1cz0xJwogCSAgICBmaQogCSAgICAjIEZJWE1FOiBzaG91bGQgcmVpbnN0YWxsIHRoZSBiZXN0IHJlbWFpbmluZyBzaGFyZWQgbGlicmFyeS4KIAkgICAgOzsKQEAgLTY2NDgsMjg4ICs5NTE5LDk1IEBACiAKICAgICAgICoubG8pCiAJIyBQb3NzaWJseSBhIGxpYnRvb2wgb2JqZWN0LCBzbyB2ZXJpZnkgaXQuCi0JaWYgKCR7U0VEfSAtZSAnMnEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KKwlpZiBmdW5jX2xhbGliX3AgIiRmaWxlIjsgdGhlbgogCiAJICAjIFJlYWQgdGhlIC5sbyBmaWxlCi0JICAuICRkaXIvJG5hbWUKKwkgIGZ1bmNfc291cmNlICRkaXIvJG5hbWUKIAogCSAgIyBBZGQgUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkcGljX29iamVjdCIgXAotCSAgICAgJiYgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGRpci8kcGljX29iamVjdCIKKwkgIGlmIHRlc3QgLW4gIiRwaWNfb2JqZWN0IiAmJgorCSAgICAgdGVzdCAiJHBpY19vYmplY3QiICE9IG5vbmU7IHRoZW4KKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRkaXIvJHBpY19vYmplY3QiCiAJICBmaQogCiAJICAjIEFkZCBub24tUElDIG9iamVjdCB0byB0aGUgbGlzdCBvZiBmaWxlcyB0byByZW1vdmUuCi0JICBpZiB0ZXN0IC1uICIkbm9uX3BpY19vYmplY3QiIFwKLQkgICAgICYmIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgotCSAgICBybWZpbGVzPSIkcm1maWxlcyAkZGlyLyRub25fcGljX29iamVjdCIKKwkgIGlmIHRlc3QgLW4gIiRub25fcGljX29iamVjdCIgJiYKKwkgICAgIHRlc3QgIiRub25fcGljX29iamVjdCIgIT0gbm9uZTsgdGhlbgorCSAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGRpci8kbm9uX3BpY19vYmplY3QiCiAJICBmaQogCWZpCiAJOzsKIAogICAgICAgKikKLQlpZiB0ZXN0ICIkbW9kZSIgPSBjbGVhbiA7IHRoZW4KKwlpZiB0ZXN0ICIkb3B0X21vZGUiID0gY2xlYW4gOyB0aGVuCiAJICBub2V4ZW5hbWU9JG5hbWUKIAkgIGNhc2UgJGZpbGUgaW4KIAkgICouZXhlKQotCSAgICBmaWxlPWAkZWNobyAkZmlsZXwke1NFRH0gJ3MsLmV4ZSQsLCdgCi0JICAgIG5vZXhlbmFtZT1gJGVjaG8gJG5hbWV8JHtTRUR9ICdzLC5leGUkLCwnYAorCSAgICBmdW5jX3N0cmlwbmFtZSAnJyAnLmV4ZScgIiRmaWxlIgorCSAgICBmaWxlPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKKwkgICAgZnVuY19zdHJpcG5hbWUgJycgJy5leGUnICIkbmFtZSIKKwkgICAgbm9leGVuYW1lPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQKIAkgICAgIyAkZmlsZSB3aXRoIC5leGUgaGFzIGFscmVhZHkgYmVlbiBhZGRlZCB0byBybWZpbGVzLAogCSAgICAjIGFkZCAkZmlsZSB3aXRob3V0IC5leGUKLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJGZpbGUiCisJICAgIGZ1bmNfYXBwZW5kIHJtZmlsZXMgIiAkZmlsZSIKIAkgICAgOzsKIAkgIGVzYWMKIAkgICMgRG8gYSB0ZXN0IHRvIHNlZSBpZiB0aGlzIGlzIGEgbGlidG9vbCBwcm9ncmFtLgotCSAgaWYgKCR7U0VEfSAtZSAnNHEnICRmaWxlIHwgZ3JlcCAiXiMgR2VuZXJhdGVkIGJ5IC4qJFBBQ0tBR0UiKSA+L2Rldi9udWxsIDI+JjE7IHRoZW4KLQkgICAgcmVsaW5rX2NvbW1hbmQ9Ci0JICAgIC4gJGRpci8kbm9leGVuYW1lCisJICBpZiBmdW5jX2x0d3JhcHBlcl9wICIkZmlsZSI7IHRoZW4KKwkgICAgaWYgZnVuY19sdHdyYXBwZXJfZXhlY3V0YWJsZV9wICIkZmlsZSI7IHRoZW4KKwkgICAgICBmdW5jX2x0d3JhcHBlcl9zY3JpcHRuYW1lICIkZmlsZSIKKwkgICAgICByZWxpbmtfY29tbWFuZD0KKwkgICAgICBmdW5jX3NvdXJjZSAkZnVuY19sdHdyYXBwZXJfc2NyaXB0bmFtZV9yZXN1bHQKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJGZ1bmNfbHR3cmFwcGVyX3NjcmlwdG5hbWVfcmVzdWx0IgorCSAgICBlbHNlCisJICAgICAgcmVsaW5rX2NvbW1hbmQ9CisJICAgICAgZnVuY19zb3VyY2UgJGRpci8kbm9leGVuYW1lCisJICAgIGZpCiAKIAkgICAgIyBub3RlICRuYW1lIHN0aWxsIGNvbnRhaW5zIC5leGUgaWYgaXQgd2FzIGluICRmaWxlIG9yaWdpbmFsbHkKIAkgICAgIyBhcyBkb2VzIHRoZSB2ZXJzaW9uIG9mICRmaWxlIHRoYXQgd2FzIGFkZGVkIGludG8gJHJtZmlsZXMKLQkgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci8kbmFtZSAkb2JqZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKKwkgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyLyRuYW1lICRvZGlyLyR7bmFtZX1TLiR7b2JqZXh0fSIKIAkgICAgaWYgdGVzdCAiJGZhc3RfaW5zdGFsbCIgPSB5ZXMgJiYgdGVzdCAtbiAiJHJlbGlua19jb21tYW5kIjsgdGhlbgotCSAgICAgIHJtZmlsZXM9IiRybWZpbGVzICRvYmpkaXIvbHQtJG5hbWUiCisJICAgICAgZnVuY19hcHBlbmQgcm1maWxlcyAiICRvZGlyL2x0LSRuYW1lIgogCSAgICBmaQogCSAgICBpZiB0ZXN0ICJYJG5vZXhlbmFtZSIgIT0gIlgkbmFtZSIgOyB0aGVuCi0JICAgICAgcm1maWxlcz0iJHJtZmlsZXMgJG9iamRpci9sdC0ke25vZXhlbmFtZX0uYyIKKwkgICAgICBmdW5jX2FwcGVuZCBybWZpbGVzICIgJG9kaXIvbHQtJHtub2V4ZW5hbWV9LmMiCiAJICAgIGZpCiAJICBmaQogCWZpCiAJOzsKICAgICAgIGVzYWMKLSAgICAgICRzaG93ICIkcm0gJHJtZmlsZXMiCi0gICAgICAkcnVuICRybSAkcm1maWxlcyB8fCBleGl0X3N0YXR1cz0xCisgICAgICBmdW5jX3Nob3dfZXZhbCAiJFJNICRybWZpbGVzIiAnZXhpdF9zdGF0dXM9MScKICAgICBkb25lCi0gICAgb2JqZGlyPSIkb3JpZ29iamRpciIKIAogICAgICMgVHJ5IHRvIHJlbW92ZSB0aGUgJHtvYmpkaXJ9cyBpbiB0aGUgZGlyZWN0b3JpZXMgd2hlcmUgd2UgZGVsZXRlZCBmaWxlcwogICAgIGZvciBkaXIgaW4gJHJtZGlyczsgZG8KICAgICAgIGlmIHRlc3QgLWQgIiRkaXIiOyB0aGVuCi0JJHNob3cgInJtZGlyICRkaXIiCi0JJHJ1biBybWRpciAkZGlyID4vZGV2L251bGwgMj4mMQorCWZ1bmNfc2hvd19ldmFsICJybWRpciAkZGlyID4vZGV2L251bGwgMj4mMSIKICAgICAgIGZpCiAgICAgZG9uZQogCiAgICAgZXhpdCAkZXhpdF9zdGF0dXMKLSAgICA7OworfQogCi0gICIiKQotICAgICRlY2hvICIkbW9kZW5hbWU6IHlvdSBtdXN0IHNwZWNpZnkgYSBNT0RFIiAxPiYyCi0gICAgJGVjaG8gIiRnZW5lcmljX2hlbHAiIDE+JjIKLSAgICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgICA7OwotICBlc2FjCit7IHRlc3QgIiRvcHRfbW9kZSIgPSB1bmluc3RhbGwgfHwgdGVzdCAiJG9wdF9tb2RlIiA9IGNsZWFuOyB9ICYmCisgICAgZnVuY19tb2RlX3VuaW5zdGFsbCAkezErIiRAIn0KIAotICBpZiB0ZXN0IC16ICIkZXhlY19jbWQiOyB0aGVuCi0gICAgJGVjaG8gIiRtb2RlbmFtZTogaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRtb2RlJyIgMT4mMgotICAgICRlY2hvICIkZ2VuZXJpY19oZWxwIiAxPiYyCi0gICAgZXhpdCAkRVhJVF9GQUlMVVJFCi0gIGZpCi1maSAjIHRlc3QgLXogIiRzaG93X2hlbHAiCit0ZXN0IC16ICIkb3B0X21vZGUiICYmIHsKKyAgaGVscD0iJGdlbmVyaWNfaGVscCIKKyAgZnVuY19mYXRhbF9oZWxwICJ5b3UgbXVzdCBzcGVjaWZ5IGEgTU9ERSIKK30KKwordGVzdCAteiAiJGV4ZWNfY21kIiAmJiBcCisgIGZ1bmNfZmF0YWxfaGVscCAiaW52YWxpZCBvcGVyYXRpb24gbW9kZSBcYCRvcHRfbW9kZSciCiAKIGlmIHRlc3QgLW4gIiRleGVjX2NtZCI7IHRoZW4KLSAgZXZhbCBleGVjICRleGVjX2NtZAorICBldmFsIGV4ZWMgIiRleGVjX2NtZCIKICAgZXhpdCAkRVhJVF9GQUlMVVJFCiBmaQogCi0jIFdlIG5lZWQgdG8gZGlzcGxheSBoZWxwIGZvciBlYWNoIG9mIHRoZSBtb2Rlcy4KLWNhc2UgJG1vZGUgaW4KLSIiKSAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiBbTU9ERS1BUkddLi4uCitleGl0ICRleGl0X3N0YXR1cwogCi1Qcm92aWRlIGdlbmVyYWxpemVkIGxpYnJhcnktYnVpbGRpbmcgc3VwcG9ydCBzZXJ2aWNlcy4KLQotICAgIC0tY29uZmlnICAgICAgICAgIHNob3cgYWxsIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzCi0gICAgLS1kZWJ1ZyAgICAgICAgICAgZW5hYmxlIHZlcmJvc2Ugc2hlbGwgdHJhY2luZwotLW4sIC0tZHJ5LXJ1biAgICAgICAgIGRpc3BsYXkgY29tbWFuZHMgd2l0aG91dCBtb2RpZnlpbmcgYW55IGZpbGVzCi0gICAgLS1mZWF0dXJlcyAgICAgICAgZGlzcGxheSBiYXNpYyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFuZCBleGl0Ci0gICAgLS1maW5pc2ggICAgICAgICAgc2FtZSBhcyBcYC0tbW9kZT1maW5pc2gnCi0gICAgLS1oZWxwICAgICAgICAgICAgZGlzcGxheSB0aGlzIGhlbHAgbWVzc2FnZSBhbmQgZXhpdAotICAgIC0tbW9kZT1NT0RFICAgICAgIHVzZSBvcGVyYXRpb24gbW9kZSBNT0RFIFtkZWZhdWx0PWluZmVycmVkIGZyb20gTU9ERS1BUkdTXQotICAgIC0tcXVpZXQgICAgICAgICAgIHNhbWUgYXMgXGAtLXNpbGVudCcKLSAgICAtLXNpbGVudCAgICAgICAgICBkb24ndCBwcmludCBpbmZvcm1hdGlvbmFsIG1lc3NhZ2VzCi0gICAgLS10YWc9VEFHICAgICAgICAgdXNlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZyb20gdGFnIFRBRwotICAgIC0tdmVyc2lvbiAgICAgICAgIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24KLQotTU9ERSBtdXN0IGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgotCi0gICAgICBjbGVhbiAgICAgICAgICAgcmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeQotICAgICAgY29tcGlsZSAgICAgICAgIGNvbXBpbGUgYSBzb3VyY2UgZmlsZSBpbnRvIGEgbGlidG9vbCBvYmplY3QKLSAgICAgIGV4ZWN1dGUgICAgICAgICBhdXRvbWF0aWNhbGx5IHNldCBsaWJyYXJ5IHBhdGgsIHRoZW4gcnVuIGEgcHJvZ3JhbQotICAgICAgZmluaXNoICAgICAgICAgIGNvbXBsZXRlIHRoZSBpbnN0YWxsYXRpb24gb2YgbGlidG9vbCBsaWJyYXJpZXMKLSAgICAgIGluc3RhbGwgICAgICAgICBpbnN0YWxsIGxpYnJhcmllcyBvciBleGVjdXRhYmxlcwotICAgICAgbGluayAgICAgICAgICAgIGNyZWF0ZSBhIGxpYnJhcnkgb3IgYW4gZXhlY3V0YWJsZQotICAgICAgdW5pbnN0YWxsICAgICAgIHJlbW92ZSBsaWJyYXJpZXMgZnJvbSBhbiBpbnN0YWxsZWQgZGlyZWN0b3J5Ci0KLU1PREUtQVJHUyB2YXJ5IGRlcGVuZGluZyBvbiB0aGUgTU9ERS4gIFRyeSBcYCRtb2RlbmFtZSAtLWhlbHAgLS1tb2RlPU1PREUnIGZvcgotYSBtb3JlIGRldGFpbGVkIGRlc2NyaXB0aW9uIG9mIE1PREUuCi0KLVJlcG9ydCBidWdzIHRvIDxidWctbGlidG9vbEBnbnUub3JnPi4iCi0gIGV4aXQgJEVYSVRfU1VDQ0VTUwotICA7OwotCi1jbGVhbikKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWNsZWFuIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KLQotUmVtb3ZlIGZpbGVzIGZyb20gdGhlIGJ1aWxkIGRpcmVjdG9yeS4KLQotUk0gaXMgdGhlIG5hbWUgb2YgdGhlIHByb2dyYW0gdG8gdXNlIHRvIGRlbGV0ZSBmaWxlcyBhc3NvY2lhdGVkIHdpdGggZWFjaCBGSUxFCi0odHlwaWNhbGx5IFxgL2Jpbi9ybScpLiAgUk0tT1BUSU9OUyBhcmUgb3B0aW9ucyAoc3VjaCBhcyBcYC1mJykgdG8gYmUgcGFzc2VkCi10byBSTS4KLQotSWYgRklMRSBpcyBhIGxpYnRvb2wgbGlicmFyeSwgb2JqZWN0IG9yIHByb2dyYW0sIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZAotd2l0aCBpdCBhcmUgZGVsZXRlZC4gT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgotICA7OwotCi1jb21waWxlKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9Y29tcGlsZSBDT01QSUxFLUNPTU1BTkQuLi4gU09VUkNFRklMRQotCi1Db21waWxlIGEgc291cmNlIGZpbGUgaW50byBhIGxpYnRvb2wgbGlicmFyeSBvYmplY3QuCi0KLVRoaXMgbW9kZSBhY2NlcHRzIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBvcHRpb25zOgotCi0gIC1vIE9VVFBVVC1GSUxFICAgIHNldCB0aGUgb3V0cHV0IGZpbGUgbmFtZSB0byBPVVRQVVQtRklMRQotICAtcHJlZmVyLXBpYyAgICAgICB0cnkgdG8gYnVpbGRpbmcgUElDIG9iamVjdHMgb25seQotICAtcHJlZmVyLW5vbi1waWMgICB0cnkgdG8gYnVpbGRpbmcgbm9uLVBJQyBvYmplY3RzIG9ubHkKLSAgLXN0YXRpYyAgICAgICAgICAgYWx3YXlzIGJ1aWxkIGEgXGAubycgZmlsZSBzdWl0YWJsZSBmb3Igc3RhdGljIGxpbmtpbmcKLQotQ09NUElMRS1DT01NQU5EIGlzIGEgY29tbWFuZCB0byBiZSB1c2VkIGluIGNyZWF0aW5nIGEgXGBzdGFuZGFyZCcgb2JqZWN0IGZpbGUKLWZyb20gdGhlIGdpdmVuIFNPVVJDRUZJTEUuCi0KLVRoZSBvdXRwdXQgZmlsZSBuYW1lIGlzIGRldGVybWluZWQgYnkgcmVtb3ZpbmcgdGhlIGRpcmVjdG9yeSBjb21wb25lbnQgZnJvbQotU09VUkNFRklMRSwgdGhlbiBzdWJzdGl0dXRpbmcgdGhlIEMgc291cmNlIGNvZGUgc3VmZml4IFxgLmMnIHdpdGggdGhlCi1saWJyYXJ5IG9iamVjdCBzdWZmaXgsIFxgLmxvJy4iCi0gIDs7Ci0KLWV4ZWN1dGUpCi0gICRlY2hvIFwKLSJVc2FnZTogJG1vZGVuYW1lIFtPUFRJT05dLi4uIC0tbW9kZT1leGVjdXRlIENPTU1BTkQgW0FSR1NdLi4uCi0KLUF1dG9tYXRpY2FsbHkgc2V0IGxpYnJhcnkgcGF0aCwgdGhlbiBydW4gYSBwcm9ncmFtLgotCi1UaGlzIG1vZGUgYWNjZXB0cyB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgb3B0aW9uczoKLQotICAtZGxvcGVuIEZJTEUgICAgICBhZGQgdGhlIGRpcmVjdG9yeSBjb250YWluaW5nIEZJTEUgdG8gdGhlIGxpYnJhcnkgcGF0aAotCi1UaGlzIG1vZGUgc2V0cyB0aGUgbGlicmFyeSBwYXRoIGVudmlyb25tZW50IHZhcmlhYmxlIGFjY29yZGluZyB0byBcYC1kbG9wZW4nCi1mbGFncy4KLQotSWYgYW55IG9mIHRoZSBBUkdTIGFyZSBsaWJ0b29sIGV4ZWN1dGFibGUgd3JhcHBlcnMsIHRoZW4gdGhleSBhcmUgdHJhbnNsYXRlZAotaW50byB0aGVpciBjb3JyZXNwb25kaW5nIHVuaW5zdGFsbGVkIGJpbmFyeSwgYW5kIGFueSBvZiB0aGVpciByZXF1aXJlZCBsaWJyYXJ5Ci1kaXJlY3RvcmllcyBhcmUgYWRkZWQgdG8gdGhlIGxpYnJhcnkgcGF0aC4KLQotVGhlbiwgQ09NTUFORCBpcyBleGVjdXRlZCwgd2l0aCBBUkdTIGFzIGFyZ3VtZW50cy4iCi0gIDs7Ci0KLWZpbmlzaCkKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWZpbmlzaCBbTElCRElSXS4uLgotCi1Db21wbGV0ZSB0aGUgaW5zdGFsbGF0aW9uIG9mIGxpYnRvb2wgbGlicmFyaWVzLgotCi1FYWNoIExJQkRJUiBpcyBhIGRpcmVjdG9yeSB0aGF0IGNvbnRhaW5zIGxpYnRvb2wgbGlicmFyaWVzLgotCi1UaGUgY29tbWFuZHMgdGhhdCB0aGlzIG1vZGUgZXhlY3V0ZXMgbWF5IHJlcXVpcmUgc3VwZXJ1c2VyIHByaXZpbGVnZXMuICBVc2UKLXRoZSBcYC0tZHJ5LXJ1bicgb3B0aW9uIGlmIHlvdSBqdXN0IHdhbnQgdG8gc2VlIHdoYXQgd291bGQgYmUgZXhlY3V0ZWQuIgotICA7OwotCi1pbnN0YWxsKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9aW5zdGFsbCBJTlNUQUxMLUNPTU1BTkQuLi4KLQotSW5zdGFsbCBleGVjdXRhYmxlcyBvciBsaWJyYXJpZXMuCi0KLUlOU1RBTEwtQ09NTUFORCBpcyB0aGUgaW5zdGFsbGF0aW9uIGNvbW1hbmQuICBUaGUgZmlyc3QgY29tcG9uZW50IHNob3VsZCBiZQotZWl0aGVyIHRoZSBcYGluc3RhbGwnIG9yIFxgY3AnIHByb2dyYW0uCi0KLVRoZSByZXN0IG9mIHRoZSBjb21wb25lbnRzIGFyZSBpbnRlcnByZXRlZCBhcyBhcmd1bWVudHMgdG8gdGhhdCBjb21tYW5kIChvbmx5Ci1CU0QtY29tcGF0aWJsZSBpbnN0YWxsIG9wdGlvbnMgYXJlIHJlY29nbml6ZWQpLiIKLSAgOzsKLQotbGluaykKLSAgJGVjaG8gXAotIlVzYWdlOiAkbW9kZW5hbWUgW09QVElPTl0uLi4gLS1tb2RlPWxpbmsgTElOSy1DT01NQU5ELi4uCi0KLUxpbmsgb2JqZWN0IGZpbGVzIG9yIGxpYnJhcmllcyB0b2dldGhlciB0byBmb3JtIGFub3RoZXIgbGlicmFyeSwgb3IgdG8KLWNyZWF0ZSBhbiBleGVjdXRhYmxlIHByb2dyYW0uCi0KLUxJTkstQ09NTUFORCBpcyBhIGNvbW1hbmQgdXNpbmcgdGhlIEMgY29tcGlsZXIgdGhhdCB5b3Ugd291bGQgdXNlIHRvIGNyZWF0ZQotYSBwcm9ncmFtIGZyb20gc2V2ZXJhbCBvYmplY3QgZmlsZXMuCi0KLVRoZSBmb2xsb3dpbmcgY29tcG9uZW50cyBvZiBMSU5LLUNPTU1BTkQgYXJlIHRyZWF0ZWQgc3BlY2lhbGx5OgotCi0gIC1hbGwtc3RhdGljICAgICAgIGRvIG5vdCBkbyBhbnkgZHluYW1pYyBsaW5raW5nIGF0IGFsbAotICAtYXZvaWQtdmVyc2lvbiAgICBkbyBub3QgYWRkIGEgdmVyc2lvbiBzdWZmaXggaWYgcG9zc2libGUKLSAgLWRsb3BlbiBGSUxFICAgICAgXGAtZGxwcmVvcGVuJyBGSUxFIGlmIGl0IGNhbm5vdCBiZSBkbG9wZW5lZCBhdCBydW50aW1lCi0gIC1kbHByZW9wZW4gRklMRSAgIGxpbmsgaW4gRklMRSBhbmQgYWRkIGl0cyBzeW1ib2xzIHRvIGx0X3ByZWxvYWRlZF9zeW1ib2xzCi0gIC1leHBvcnQtZHluYW1pYyAgIGFsbG93IHN5bWJvbHMgZnJvbSBPVVRQVVQtRklMRSB0byBiZSByZXNvbHZlZCB3aXRoIGRsc3ltKDMpCi0gIC1leHBvcnQtc3ltYm9scyBTWU1GSUxFCi0gICAgICAgICAgICAgICAgICAgIHRyeSB0byBleHBvcnQgb25seSB0aGUgc3ltYm9scyBsaXN0ZWQgaW4gU1lNRklMRQotICAtZXhwb3J0LXN5bWJvbHMtcmVnZXggUkVHRVgKLSAgICAgICAgICAgICAgICAgICAgdHJ5IHRvIGV4cG9ydCBvbmx5IHRoZSBzeW1ib2xzIG1hdGNoaW5nIFJFR0VYCi0gIC1MTElCRElSICAgICAgICAgIHNlYXJjaCBMSUJESVIgZm9yIHJlcXVpcmVkIGluc3RhbGxlZCBsaWJyYXJpZXMKLSAgLWxOQU1FICAgICAgICAgICAgT1VUUFVULUZJTEUgcmVxdWlyZXMgdGhlIGluc3RhbGxlZCBsaWJyYXJ5IGxpYk5BTUUKLSAgLW1vZHVsZSAgICAgICAgICAgYnVpbGQgYSBsaWJyYXJ5IHRoYXQgY2FuIGRsb3BlbmVkCi0gIC1uby1mYXN0LWluc3RhbGwgIGRpc2FibGUgdGhlIGZhc3QtaW5zdGFsbCBtb2RlCi0gIC1uby1pbnN0YWxsICAgICAgIGxpbmsgYSBub3QtaW5zdGFsbGFibGUgZXhlY3V0YWJsZQotICAtbm8tdW5kZWZpbmVkICAgICBkZWNsYXJlIHRoYXQgYSBsaWJyYXJ5IGRvZXMgbm90IHJlZmVyIHRvIGV4dGVybmFsIHN5bWJvbHMKLSAgLW8gT1VUUFVULUZJTEUgICAgY3JlYXRlIE9VVFBVVC1GSUxFIGZyb20gdGhlIHNwZWNpZmllZCBvYmplY3RzCi0gIC1vYmplY3RsaXN0IEZJTEUgIFVzZSBhIGxpc3Qgb2Ygb2JqZWN0IGZpbGVzIGZvdW5kIGluIEZJTEUgdG8gc3BlY2lmeSBvYmplY3RzCi0gIC1wcmVjaW91cy1maWxlcy1yZWdleCBSRUdFWAotICAgICAgICAgICAgICAgICAgICBkb24ndCByZW1vdmUgb3V0cHV0IGZpbGVzIG1hdGNoaW5nIFJFR0VYCi0gIC1yZWxlYXNlIFJFTEVBU0UgIHNwZWNpZnkgcGFja2FnZSByZWxlYXNlIGluZm9ybWF0aW9uCi0gIC1ycGF0aCBMSUJESVIgICAgIHRoZSBjcmVhdGVkIGxpYnJhcnkgd2lsbCBldmVudHVhbGx5IGJlIGluc3RhbGxlZCBpbiBMSUJESVIKLSAgLVJbIF1MSUJESVIgICAgICAgYWRkIExJQkRJUiB0byB0aGUgcnVudGltZSBwYXRoIG9mIHByb2dyYW1zIGFuZCBsaWJyYXJpZXMKLSAgLXN0YXRpYyAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgdW5pbnN0YWxsZWQgbGlidG9vbCBsaWJyYXJpZXMKLSAgLXN0YXRpYy1saWJ0b29sLWxpYnMKLSAgICAgICAgICAgICAgICAgICAgZG8gbm90IGRvIGFueSBkeW5hbWljIGxpbmtpbmcgb2YgbGlidG9vbCBsaWJyYXJpZXMKLSAgLXZlcnNpb24taW5mbyBDVVJSRU5UWzpSRVZJU0lPTls6QUdFXV0KLSAgICAgICAgICAgICAgICAgICAgc3BlY2lmeSBsaWJyYXJ5IHZlcnNpb24gaW5mbyBbZWFjaCB2YXJpYWJsZSBkZWZhdWx0cyB0byAwXQotCi1BbGwgb3RoZXIgb3B0aW9ucyAoYXJndW1lbnRzIGJlZ2lubmluZyB3aXRoIFxgLScpIGFyZSBpZ25vcmVkLgotCi1FdmVyeSBvdGhlciBhcmd1bWVudCBpcyB0cmVhdGVkIGFzIGEgZmlsZW5hbWUuICBGaWxlcyBlbmRpbmcgaW4gXGAubGEnIGFyZQotdHJlYXRlZCBhcyB1bmluc3RhbGxlZCBsaWJ0b29sIGxpYnJhcmllcywgb3RoZXIgZmlsZXMgYXJlIHN0YW5kYXJkIG9yIGxpYnJhcnkKLW9iamVjdCBmaWxlcy4KLQotSWYgdGhlIE9VVFBVVC1GSUxFIGVuZHMgaW4gXGAubGEnLCB0aGVuIGEgbGlidG9vbCBsaWJyYXJ5IGlzIGNyZWF0ZWQsCi1vbmx5IGxpYnJhcnkgb2JqZWN0cyAoXGAubG8nIGZpbGVzKSBtYXkgYmUgc3BlY2lmaWVkLCBhbmQgXGAtcnBhdGgnIGlzCi1yZXF1aXJlZCwgZXhjZXB0IHdoZW4gY3JlYXRpbmcgYSBjb252ZW5pZW5jZSBsaWJyYXJ5LgotCi1JZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmEnIG9yIFxgLmxpYicsIHRoZW4gYSBzdGFuZGFyZCBsaWJyYXJ5IGlzIGNyZWF0ZWQKLXVzaW5nIFxgYXInIGFuZCBcYHJhbmxpYicsIG9yIG9uIFdpbmRvd3MgdXNpbmcgXGBsaWInLgotCi1JZiBPVVRQVVQtRklMRSBlbmRzIGluIFxgLmxvJyBvciBcYC4ke29iamV4dH0nLCB0aGVuIGEgcmVsb2FkYWJsZSBvYmplY3QgZmlsZQotaXMgY3JlYXRlZCwgb3RoZXJ3aXNlIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSBpcyBjcmVhdGVkLiIKLSAgOzsKLQotdW5pbnN0YWxsKQotICAkZWNobyBcCi0iVXNhZ2U6ICRtb2RlbmFtZSBbT1BUSU9OXS4uLiAtLW1vZGU9dW5pbnN0YWxsIFJNIFtSTS1PUFRJT05dLi4uIEZJTEUuLi4KLQotUmVtb3ZlIGxpYnJhcmllcyBmcm9tIGFuIGluc3RhbGxhdGlvbiBkaXJlY3RvcnkuCi0KLVJNIGlzIHRoZSBuYW1lIG9mIHRoZSBwcm9ncmFtIHRvIHVzZSB0byBkZWxldGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGVhY2ggRklMRQotKHR5cGljYWxseSBcYC9iaW4vcm0nKS4gIFJNLU9QVElPTlMgYXJlIG9wdGlvbnMgKHN1Y2ggYXMgXGAtZicpIHRvIGJlIHBhc3NlZAotdG8gUk0uCi0KLUlmIEZJTEUgaXMgYSBsaWJ0b29sIGxpYnJhcnksIGFsbCB0aGUgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGl0IGFyZSBkZWxldGVkLgotT3RoZXJ3aXNlLCBvbmx5IEZJTEUgaXRzZWxmIGlzIGRlbGV0ZWQgdXNpbmcgUk0uIgotICA7OwotCi0qKQotICAkZWNobyAiJG1vZGVuYW1lOiBpbnZhbGlkIG9wZXJhdGlvbiBtb2RlIFxgJG1vZGUnIiAxPiYyCi0gICRlY2hvICIkaGVscCIgMT4mMgotICBleGl0ICRFWElUX0ZBSUxVUkUKLSAgOzsKLWVzYWMKLQotJGVjaG8KLSRlY2hvICJUcnkgXGAkbW9kZW5hbWUgLS1oZWxwJyBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBvdGhlciBtb2Rlcy4iCi0KLWV4aXQgJD8KIAogIyBUaGUgVEFHcyBiZWxvdyBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgd2UgbmV2ZXIgZ2V0IGludG8gYSBzaXR1YXRpb24KICMgaW4gd2hpY2ggd2UgZGlzYWJsZSBib3RoIGtpbmRzIG9mIGxpYnJhcmllcy4gIEdpdmVuIGNvbmZsaWN0aW5nCkBAIC02OTQzLDE0ICs5NjIxLDE3IEBACiAjIGNvbmZpZ3VyYXRpb24uICBCdXQgd2UnbGwgbmV2ZXIgZ28gZnJvbSBzdGF0aWMtb25seSB0byBzaGFyZWQtb25seS4KIAogIyAjIyMgQkVHSU4gTElCVE9PTCBUQUcgQ09ORklHOiBkaXNhYmxlLXNoYXJlZAotZGlzYWJsZV9saWJzPXNoYXJlZAorYnVpbGRfbGlidG9vbF9saWJzPW5vCitidWlsZF9vbGRfbGlicz15ZXMKICMgIyMjIEVORCBMSUJUT09MIFRBRyBDT05GSUc6IGRpc2FibGUtc2hhcmVkCiAKICMgIyMjIEJFR0lOIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKLWRpc2FibGVfbGlicz1zdGF0aWMKK2J1aWxkX29sZF9saWJzPWBjYXNlICRidWlsZF9saWJ0b29sX2xpYnMgaW4geWVzKSBlY2hvIG5vOzsgKikgZWNobyB5ZXM7OyBlc2FjYAogIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogZGlzYWJsZS1zdGF0aWMKIAogIyBMb2NhbCBWYXJpYWJsZXM6CiAjIG1vZGU6c2hlbGwtc2NyaXB0CiAjIHNoLWluZGVudGF0aW9uOjIKICMgRW5kOgorIyB2aTpzdz0yCisKZGlmZiAtLWdpdCBhL200L2FjX2FkZF9zZWFyY2hfcGF0aC5tNCBiL200L2FjX2FkZF9zZWFyY2hfcGF0aC5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTBhODE5Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvYWNfYWRkX3NlYXJjaF9wYXRoLm00CkBAIC0wLDAgKzEsMTMgQEAKK2RubAorZG5sIEFkZCBhIHNlYXJjaCBwYXRoIHRvIHRoZSBMSUJTIGFuZCBDUFBGTEFHUyB2YXJpYWJsZXMKK2RubAorQUNfREVGVU4oW0FDX0FERF9TRUFSQ0hfUEFUSF0sWworICBpZiB0ZXN0ICJ4JDEiICE9IHggLWEgLWQgJDE7IHRoZW4KKyAgICAgaWYgdGVzdCAtZCAkMS9saWI7IHRoZW4KKyAgICAgICBMREZMQUdTPSItTCQxL2xpYiAkTERGTEFHUyIKKyAgICAgZmkKKyAgICAgaWYgdGVzdCAtZCAkMS9pbmNsdWRlOyB0aGVuCisJQ1BQRkxBR1M9Ii1JJDEvaW5jbHVkZSAkQ1BQRkxBR1MiCisgICAgIGZpCisgIGZpCitdKQpkaWZmIC0tZ2l0IGEvbTQvYWNfbXNnX2NhY2hlLm00IGIvbTQvYWNfbXNnX2NhY2hlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3ZDdjZGEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9hY19tc2dfY2FjaGUubTQKQEAgLTAsMCArMSwyNCBAQAorZG5sCitkbmwgU3RvcmUgaW5mb3JtYXRpb24gZm9yIGRpc3BsYXlpbmcgbGF0ZXIuCitkbmwKK0FDX0RFRlVOKFtBQ19NU0dfQ0FDSEVfSU5JVF0sWworICBybSAtZiBjb25maWd1cmUtc3VtbWFyeQorXSkKKworQUNfREVGVU4oW0FDX01TR19DQUNIRV9BRERdLFsKKyAgY2F0ID4+IGNvbmZpZ3VyZS1zdW1tYXJ5IDw8IEVPRgorICAkMQorRU9GCitdKQorCitBQ19ERUZVTihbQUNfTVNHX0NBQ0hFX0RJU1BMQVldLFsKKyAgZWNobyAiIgorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGVjaG8gIiAgICAgICAgICAgIE5ldC1TTk1QIGNvbmZpZ3VyYXRpb24gc3VtbWFyeToiCisgIGVjaG8gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIKKyAgZWNobyAiIgorICBjYXQgY29uZmlndXJlLXN1bW1hcnkKKyAgZWNobyAiIgorICBlY2hvICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iCisgIGVjaG8gIiIKK10pCmRpZmYgLS1naXQgYS9tNC9hY19tc2dfbW9kdWxlX2RiZy5tNCBiL200L2FjX21zZ19tb2R1bGVfZGJnLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyY2IzMTcKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9hY19tc2dfbW9kdWxlX2RiZy5tNApAQCAtMCwwICsxLDcgQEAKK0FDX0RFRlVOKFtBQ19NU0dfTU9EVUxFX0RCR10sCitbCisgIGlmIHRlc3QgJG1vZHVsZV9kZWJ1ZyA9IDE7IHRoZW4KKyAgICBlY2hvICQxICQyICQzICQ0CisgIGZpCitdCispCmRpZmYgLS1naXQgYS9tNC9hY19wcm9tcHRfdXNlci5tNCBiL200L2FjX3Byb21wdF91c2VyLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiMmRkOWEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9hY19wcm9tcHRfdXNlci5tNApAQCAtMCwwICsxLDUyIEBACitkbmwgQHN5bm9wc2lzIEFDX1BST01QVF9VU0VSX05PX0RFRklORShWQVJJQUJMRU5BTUUsUVVFU1RJT04sW0RFRkFVTFRdKQorZG5sCitkbmwgQXNrcyBhIFFVRVNUSU9OIGFuZCBwdXRzIHRoZSByZXN1bHRzIGluIFZBUklBQkxFTkFNRSB3aXRoIGFuIG9wdGlvbmFsCitkbmwgREVGQVVMVCB2YWx1ZSBpZiB0aGUgdXNlciBtZXJlbHkgaGl0cyByZXR1cm4uCitkbmwKK2RubCBAdmVyc2lvbiAxLjE1CitkbmwgQGF1dGhvciBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK2RubAorQUNfREVGVU4oW0FDX1BST01QVF9VU0VSX05PX0RFRklORV0sCitbCitpZiB0ZXN0ICJ4JGRlZmF1bHRzIiA9ICJ4bm8iOyB0aGVuCitlY2hvICRFQ0hPX04gIiQyICgkMyk6ICRFQ0hPX0MiCityZWFkIHRtcGlucHV0IDwmQVNfT1JJR0lOQUxfU1RESU5fRkQKK2lmIHRlc3QgIiR0bXBpbnB1dCIgPSAiIiAtYSAiJDMiICE9ICIiOyB0aGVuCisgIHRtcGlucHV0PSIkMyIKK2ZpCitldmFsICQxPVwiJHRtcGlucHV0XCIKK2Vsc2UKK3RtcGlucHV0PSIkMyIKK2V2YWwgJDE9XCIkdG1waW5wdXRcIgorZmkKK10pIGRubCBkb25lIEFDX1BST01QVF9VU0VSCisKK2RubCBAc3lub3BzaXMgQUNfUFJPTVBUX1VTRVIoVkFSSUFCTEVOQU1FLFFVRVNUSU9OLFtERUZBVUxUXSxRVU9URUQpCitkbmwKK2RubCBBc2tzIGEgUVVFU1RJT04gYW5kIHB1dHMgdGhlIHJlc3VsdHMgaW4gVkFSSUFCTEVOQU1FIHdpdGggYW4gb3B0aW9uYWwKK2RubCBERUZBVUxUIHZhbHVlIGlmIHRoZSB1c2VyIG1lcmVseSBoaXRzIHJldHVybi4gIEFsc28gY2FsbHMKK2RubCBBQ19ERUZJTkVfVU5RVU9URUQoKSBvbiB0aGUgVkFSSUFCTEVOQU1FIGZvciBWQVJJQUJMRU5BTUVzIHRoYXQgc2hvdWxkCitkbmwgYmUgZW50ZXJlZCBpbnRvIHRoZSBjb25maWcuaCBmaWxlIGFzIHdlbGwuICBJZiBRVU9URUQgaXMgInF1b3RlZCIgdGhlbgorZG5sIHRoZSByZXN1bHQgd2lsbCBiZSBkZWZpbmVkIHdpdGhpbiBxdW90ZXMuCitkbmwKK2RubCBAdmVyc2lvbiAxLjE1CitkbmwgQGF1dGhvciBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KK2RubAorQUNfREVGVU4oW0FDX1BST01QVF9VU0VSXSwKK1sKK01TR19DSEVDSz0icGF0c3Vic3QoWyQyXSwgWy4qCitdLCBbXSkiCitBQ19DQUNIRV9DSEVDSygkTVNHX0NIRUNLLCBhY19jdl91c2VyX3Byb21wdF8kMSwKK1tlY2hvICIiID4mQVNfTUVTU0FHRV9GRAorQUNfUFJPTVBUX1VTRVJfTk9fREVGSU5FKCQxLFskMl0sJDMpCitldmFsIGFjX2N2X3VzZXJfcHJvbXB0XyQxPVwkJDEKK2VjaG8gJEVDSE9fTiAic2V0dGluZyAkTVNHX0NIRUNLIHRvLi4uICAkRUNIT19DIiA+JkFTX01FU1NBR0VfRkQKK10pCitpZiB0ZXN0ICIkYWNfY3ZfdXNlcl9wcm9tcHRfJDEiICE9ICJub25lIjsgdGhlbgorICBpZiB0ZXN0ICJ4JDQiID0gInhxdW90ZWQiIC1vICJ4JDQiID0gInhRVU9URUQiOyB0aGVuCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKCQxLCIkYWNfY3ZfdXNlcl9wcm9tcHRfJDEiKQorICBlbHNlCisgICAgQUNfREVGSU5FX1VOUVVPVEVEKCQxLCRhY19jdl91c2VyX3Byb21wdF8kMSkKKyAgZmkKK2ZpCitdKSBkbmwKZGlmZiAtLWdpdCBhL200L2xpYnRvb2wubTQgYi9tNC9saWJ0b29sLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MTI1ODQKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9saWJ0b29sLm00CkBAIC0wLDAgKzEsNzgzMSBAQAorIyBsaWJ0b29sLm00IC0gQ29uZmlndXJlIGxpYnRvb2wgZm9yIHRoZSBob3N0IHN5c3RlbS4gLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICAgICAgICAgICAgICAgIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworbTRfZGVmaW5lKFtfTFRfQ09QWUlOR10sIFtkbmwKKyMgICBDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDMsIDIwMDQsIDIwMDUsCisjICAgICAgICAgICAgICAgICAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5LCAyMDEwIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKKyMgICAgICAgICAgICAgICAgIEluYy4KKyMgICBXcml0dGVuIGJ5IEdvcmRvbiBNYXR6aWdrZWl0LCAxOTk2CisjCisjICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgR05VIExpYnRvb2wuCisjCisjIEdOVSBMaWJ0b29sIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorIyBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworIyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorIyB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyMKKyMgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsCisjIGlmIHlvdSBkaXN0cmlidXRlIHRoaXMgZmlsZSBhcyBwYXJ0IG9mIGEgcHJvZ3JhbSBvciBsaWJyYXJ5IHRoYXQKKyMgaXMgYnVpbHQgdXNpbmcgR05VIExpYnRvb2wsIHlvdSBtYXkgaW5jbHVkZSB0aGlzIGZpbGUgdW5kZXIgdGhlCisjIHNhbWUgZGlzdHJpYnV0aW9uIHRlcm1zIHRoYXQgeW91IHVzZSBmb3IgdGhlIHJlc3Qgb2YgdGhhdCBwcm9ncmFtLgorIworIyBHTlUgTGlidG9vbCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorIyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorIyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisjIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisjCisjIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisjIGFsb25nIHdpdGggR05VIExpYnRvb2w7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCBhIGNvcHkKKyMgY2FuIGJlIGRvd25sb2FkZWQgZnJvbSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLmh0bWwsIG9yCisjIG9idGFpbmVkIGJ5IHdyaXRpbmcgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKKyMgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCitdKQorCisjIHNlcmlhbCA1NyBMVF9JTklUCisKKworIyBMVF9QUkVSRVEoVkVSU0lPTikKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGFuZCBleGl0IGlmIHRoaXMgbGlidG9vbCB2ZXJzaW9uIGlzIGxlc3MgdGhhdCBWRVJTSU9OLgorbTRfZGVmdW4oW0xUX1BSRVJFUV0sCitbbTRfaWYobTRfdmVyc2lvbl9jb21wYXJlKG00X2RlZm4oW0xUX1BBQ0tBR0VfVkVSU0lPTl0pLCBbJDFdKSwgLTEsCisgICAgICAgW200X2RlZmF1bHQoWyQzXSwKKwkJICAgW200X2ZhdGFsKFtMaWJ0b29sIHZlcnNpb24gJDEgb3IgaGlnaGVyIGlzIHJlcXVpcmVkXSwKKwkJICAgICAgICAgICAgIDYzKV0pXSwKKyAgICAgICBbJDJdKV0pCisKKworIyBfTFRfQ0hFQ0tfQlVJTERESVIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCisjIENvbXBsYWluIGlmIHRoZSBhYnNvbHV0ZSBidWlsZCBkaXJlY3RvcnkgbmFtZSBjb250YWlucyB1bnVzdWFsIGNoYXJhY3RlcnMKK200X2RlZnVuKFtfTFRfQ0hFQ0tfQlVJTERESVJdLAorW2Nhc2UgYHB3ZGAgaW4KKyAgKlwgKiB8ICpcCSopCisgICAgQUNfTVNHX1dBUk4oW0xpYnRvb2wgZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggd2hpdGVzcGFjZSBpbiBgcHdkYF0pIDs7Citlc2FjCitdKQorCisKKyMgTFRfSU5JVChbT1BUSU9OU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX0lOSVRdLAorW0FDX1BSRVJFUShbMi41OF0pZG5sIFdlIHVzZSBBQ19JTkNMVURFU19ERUZBVUxUCitBQ19SRVFVSVJFKFtBQ19DT05GSUdfQVVYX0RJUl9ERUZBVUxUXSlkbmwKK0FDX0JFRk9SRShbJDBdLCBbTFRfTEFOR10pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xUX09VVFBVVF0pZG5sCitBQ19CRUZPUkUoWyQwXSwgW0xURExfSU5JVF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfQlVJTERESVJdKWRubAorCitkbmwgQXV0b2NvbmYgZG9lc24ndCBjYXRjaCB1bmV4cGFuZGVkIExUXyBtYWNyb3MgYnkgZGVmYXVsdDoKK200X3BhdHRlcm5fZm9yYmlkKFteXz9MVF9bQS1aX10rJF0pZG5sCittNF9wYXR0ZXJuX2FsbG93KFteKF9MVF9FT0Z8TFRfRExHTE9CQUx8TFRfRExMQVpZX09SX05PV3xMVF9NVUxUSV9NT0RVTEUpJF0pZG5sCitkbmwgYWNsb2NhbCBkb2Vzbid0IHB1bGwgbHRvcHRpb25zLm00LCBsdHN1Z2FyLm00LCBvciBsdHZlcnNpb24ubTQKK2RubCB1bmxlc3Mgd2UgcmVxdWlyZSBhbiBBQ19ERUZVTmVkIG1hY3JvOgorQUNfUkVRVUlSRShbTFRPUFRJT05TX1ZFUlNJT05dKWRubAorQUNfUkVRVUlSRShbTFRTVUdBUl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUVkVSU0lPTl9WRVJTSU9OXSlkbmwKK0FDX1JFUVVJUkUoW0xUT0JTT0xFVEVfVkVSU0lPTl0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19MVE1BSU5dKWRubAorCitfTFRfU0hFTExfSU5JVChbU0hFTEw9JHtDT05GSUdfU0hFTEwtL2Jpbi9zaH1dKQorCitkbmwgUGFyc2UgT1BUSU9OUworX0xUX1NFVF9PUFRJT05TKFskMF0sIFskMV0pCisKKyMgVGhpcyBjYW4gYmUgdXNlZCB0byByZWJ1aWxkIGxpYnRvb2wgd2hlbiBuZWVkZWQKK0xJQlRPT0xfREVQUz0iJGx0bWFpbiIKKworIyBBbHdheXMgdXNlIG91ciBvd24gbGlidG9vbC4KK0xJQlRPT0w9JyQoU0hFTEwpICQodG9wX2J1aWxkZGlyKS9saWJ0b29sJworQUNfU1VCU1QoTElCVE9PTClkbmwKKworX0xUX1NFVFVQCisKKyMgT25seSBleHBhbmQgb25jZToKK200X2RlZmluZShbTFRfSU5JVF0pCitdKSMgTFRfSU5JVAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBQ19QUk9HX0xJQlRPT0xdLCBbTFRfSU5JVF0pCitBVV9BTElBUyhbQU1fUFJPR19MSUJUT09MXSwgW0xUX0lOSVRdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX0xJQlRPT0xdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fUFJPR19MSUJUT09MXSwgW10pCisKKworIyBfTFRfQ0NfQkFTRU5BTUUoQ0MpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2FsY3VsYXRlIGNjX2Jhc2VuYW1lLiAgU2tpcCBrbm93biBjb21waWxlciB3cmFwcGVycyBhbmQgY3Jvc3MtcHJlZml4LgorbTRfZGVmdW4oW19MVF9DQ19CQVNFTkFNRV0sCitbZm9yIGNjX3RlbXAgaW4gJDEiIjsgZG8KKyAgY2FzZSAkY2NfdGVtcCBpbgorICAgIGNvbXBpbGUgfCAqW1tcXC9dXWNvbXBpbGUgfCBjY2FjaGUgfCAqW1tcXC9dXWNjYWNoZSApIDs7CisgICAgZGlzdGNjIHwgKltbXFwvXV1kaXN0Y2MgfCBwdXJpZnkgfCAqW1tcXC9dXXB1cmlmeSApIDs7CisgICAgXC0qKSA7OworICAgICopIGJyZWFrOzsKKyAgZXNhYworZG9uZQorY2NfYmFzZW5hbWU9YCRFQ0hPICIkY2NfdGVtcCIgfCAkU0VEICJzJS4qLyUlOyBzJV4kaG9zdF9hbGlhcy0lJSJgCitdKQorCisKKyMgX0xUX0ZJTEVVVElMU19ERUZBVUxUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEl0IGlzIG9rYXkgdG8gdXNlIHRoZXNlIGZpbGUgY29tbWFuZHMgYW5kIGFzc3VtZSB0aGV5IGhhdmUgYmVlbiBzZXQKKyMgc2Vuc2libHkgYWZ0ZXIgYG00X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKScuCittNF9kZWZ1bihbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10sCitbOiAke0NQPSJjcCAtZiJ9Cis6ICR7TVY9Im12IC1mIn0KKzogJHtSTT0icm0gLWYifQorXSkjIF9MVF9GSUxFVVRJTFNfREVGQVVMVFMKKworCisjIF9MVF9TRVRVUAorIyAtLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfU0VUVVBdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pZG5sCitBQ19SRVFVSVJFKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK19MVF9ERUNMKFtdLCBbaG9zdF9hbGlhc10sIFswXSwgW1RoZSBob3N0IHN5c3RlbV0pZG5sCitfTFRfREVDTChbXSwgW2hvc3RdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2hvc3Rfb3NdLCBbMF0pZG5sCitkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRfYWxpYXNdLCBbMF0sIFtUaGUgYnVpbGQgc3lzdGVtXSlkbmwKK19MVF9ERUNMKFtdLCBbYnVpbGRdLCBbMF0pZG5sCitfTFRfREVDTChbXSwgW2J1aWxkX29zXSwgWzBdKWRubAorZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCitkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfTE5fU10pZG5sCit0ZXN0IC16ICIkTE5fUyIgJiYgTE5fUz0ibG4gLXMiCitfTFRfREVDTChbXSwgW0xOX1NdLCBbMV0sIFtXaGV0aGVyIHdlIG5lZWQgc29mdCBvciBoYXJkIGxpbmtzXSlkbmwKK2RubAorQUNfUkVRVUlSRShbTFRfQ01EX01BWF9MRU5dKWRubAorX0xUX0RFQ0woW29iamV4dF0sIFthY19vYmpleHRdLCBbMF0sIFtPYmplY3QgZmlsZSBzdWZmaXggKG5vcm1hbGx5ICJvIildKWRubAorX0xUX0RFQ0woW10sIFtleGVleHRdLCBbMF0sIFtFeGVjdXRhYmxlIGZpbGUgc3VmZml4IChub3JtYWxseSAiIildKWRubAorZG5sCittNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OU10pZG5sCittNF9yZXF1aXJlKFtfTFRfQ01EX1JFTE9BRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9EXSlkbmwKK200X3JlcXVpcmUoW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfT0xEX0FSQ0hJVkVdKWRubAorbTRfcmVxdWlyZShbX0xUX0NNRF9HTE9CQUxfU1lNQk9MU10pZG5sCittNF9yZXF1aXJlKFtfTFRfV0lUSF9TWVNST09UXSlkbmwKKworX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoWworIyBTZWUgaWYgd2UgYXJlIHJ1bm5pbmcgb24genNoLCBhbmQgc2V0IHRoZSBvcHRpb25zIHdoaWNoIGFsbG93IG91cgorIyBjb21tYW5kcyB0aHJvdWdoIHdpdGhvdXQgcmVtb3ZhbCBvZiBcIGVzY2FwZXMgSU5JVC4KK2lmIHRlc3QgLW4gIlwke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKK2ZpCitdKQoraWYgdGVzdCAtbiAiJHtaU0hfVkVSU0lPTitzZXR9IiA7IHRoZW4KKyAgIHNldG9wdCBOT19HTE9CX1NVQlNUCitmaQorCitfTFRfQ0hFQ0tfT0JKRElSCisKK200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisgICMgcmVhc29uLCBpZiB3ZSBzZXQgdGhlIENPTExFQ1RfTkFNRVMgZW52aXJvbm1lbnQgdmFyaWFibGUsIHRoZSBwcm9ibGVtcworICAjIHZhbmlzaCBpbiBhIHB1ZmYgb2Ygc21va2UuCisgIGlmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICAgIENPTExFQ1RfTkFNRVM9CisgICAgZXhwb3J0IENPTExFQ1RfTkFNRVMKKyAgZmkKKyAgOzsKK2VzYWMKKworIyBHbG9iYWwgdmFyaWFibGVzOgorb2ZpbGU9bGlidG9vbAorY2FuX2J1aWxkX3NoYXJlZD15ZXMKKworIyBBbGwga25vd24gbGlua2VycyByZXF1aXJlIGEgYC5hJyBhcmNoaXZlIGZvciBzdGF0aWMgbGlua2luZyAoZXhjZXB0IE1TVkMsCisjIHdoaWNoIG5lZWRzICcubGliJykuCitsaWJleHQ9YQorCit3aXRoX2dudV9sZD0iJGx0X2N2X3Byb2dfZ251X2xkIgorCitvbGRfQ0M9IiRDQyIKK29sZF9DRkxBR1M9IiRDRkxBR1MiCisKKyMgU2V0IHNhbmUgZGVmYXVsdHMgZm9yIHZhcmlvdXMgdmFyaWFibGVzCit0ZXN0IC16ICIkQ0MiICYmIENDPWNjCit0ZXN0IC16ICIkTFRDQyIgJiYgTFRDQz0kQ0MKK3Rlc3QgLXogIiRMVENGTEFHUyIgJiYgTFRDRkxBR1M9JENGTEFHUwordGVzdCAteiAiJExEIiAmJiBMRD1sZAordGVzdCAteiAiJGFjX29iamV4dCIgJiYgYWNfb2JqZXh0PW8KKworX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIE9ubHkgcGVyZm9ybSB0aGUgY2hlY2sgZm9yIGZpbGUsIGlmIHRoZSBjaGVjayBtZXRob2QgcmVxdWlyZXMgaXQKK3Rlc3QgLXogIiRNQUdJQ19DTUQiICYmIE1BR0lDX0NNRD1maWxlCitjYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorZmlsZV9tYWdpYyopCisgIGlmIHRlc3QgIiRmaWxlX21hZ2ljX2NtZCIgPSAnJE1BR0lDX0NNRCc7IHRoZW4KKyAgICBfTFRfUEFUSF9NQUdJQworICBmaQorICA7OworZXNhYworCisjIFVzZSBDIGZvciB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIGluIHRoZSBsaWJ0b29sIHNjcmlwdAorTFRfU1VQUE9SVEVEX1RBRyhbQ0NdKQorX0xUX0xBTkdfQ19DT05GSUcKK19MVF9MQU5HX0RFRkFVTFRfQ09ORklHCitfTFRfQ09ORklHX0NPTU1BTkRTCitdKSMgX0xUX1NFVFVQCisKKworIyBfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBEZWZpbmUgYSBmZXcgc2VkIHN1YnN0aXR1dGlvbiB0aGF0IGhlbHAgdXMgZG8gcm9idXN0IHF1b3RpbmcuCittNF9kZWZ1bihbX0xUX1BSRVBBUkVfU0VEX1FVT1RFX1ZBUlNdLAorWyMgQmFja3NsYXNoaWZ5IG1ldGFjaGFyYWN0ZXJzIHRoYXQgYXJlIHN0aWxsIGFjdGl2ZSB3aXRoaW4KKyMgZG91YmxlLXF1b3RlZCBzdHJpbmdzLgorc2VkX3F1b3RlX3N1YnN0PSdzL1woW1siYCRcXF1dXCkvXFxcMS9nJworCisjIFNhbWUgYXMgYWJvdmUsIGJ1dCBkbyBub3QgcXVvdGUgdmFyaWFibGUgcmVmZXJlbmNlcy4KK2RvdWJsZV9xdW90ZV9zdWJzdD0ncy9cKFtbImBcXF1dXCkvXFxcMS9nJworCisjIFNlZCBzdWJzdGl0dXRpb24gdG8gZGVsYXkgZXhwYW5zaW9uIG9mIGFuIGVzY2FwZWQgc2hlbGwgdmFyaWFibGUgaW4gYQorIyBkb3VibGVfcXVvdGVfc3Vic3QnZWQgc3RyaW5nLgorZGVsYXlfdmFyaWFibGVfc3Vic3Q9J3MvXFxcXFxcXFxcXFwkL1xcXFxcXCQvZycKKworIyBTZWQgc3Vic3RpdHV0aW9uIHRvIGRlbGF5IGV4cGFuc2lvbiBvZiBhbiBlc2NhcGVkIHNpbmdsZSBxdW90ZS4KK2RlbGF5X3NpbmdsZV9xdW90ZV9zdWJzdD0ncy8nXCcnLydcJ1xcXFxcXFwnXCcnL2cnCisKKyMgU2VkIHN1YnN0aXR1dGlvbiB0byBhdm9pZCBhY2NpZGVudGFsIGdsb2JiaW5nIGluIGV2YWxlZCBleHByZXNzaW9ucworbm9fZ2xvYl9zdWJzdD0ncy9cKi9cXFwqL2cnCitdKQorCisjIF9MVF9QUk9HX0xUTUFJTgorIyAtLS0tLS0tLS0tLS0tLS0KKyMgTm90ZSB0aGF0IHRoaXMgY29kZSBpcyBjYWxsZWQgYm90aCBmcm9tIGBjb25maWd1cmUnLCBhbmQgYGNvbmZpZy5zdGF0dXMnCisjIG5vdyB0aGF0IHdlIHVzZSBBQ19DT05GSUdfQ09NTUFORFMgdG8gZ2VuZXJhdGUgbGlidG9vbC4gIE5vdGFibHksCisjIGBjb25maWcuc3RhdHVzJyBoYXMgbm8gdmFsdWUgZm9yIGFjX2F1eF9kaXIgdW5sZXNzIHdlIGFyZSB1c2luZyBBdXRvbWFrZSwKKyMgc28gd2UgcGFzcyBhIGNvcHkgYWxvbmcgdG8gbWFrZSBzdXJlIGl0IGhhcyBhIHNlbnNpYmxlIHZhbHVlIGFueXdheS4KK200X2RlZnVuKFtfTFRfUFJPR19MVE1BSU5dLAorW200X2lmZGVmKFtBQ19SRVFVSVJFX0FVWF9GSUxFXSwgW0FDX1JFUVVJUkVfQVVYX0ZJTEUoW2x0bWFpbi5zaF0pXSlkbmwKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFthY19hdXhfZGlyPSckYWNfYXV4X2RpciddKQorbHRtYWluPSIkYWNfYXV4X2Rpci9sdG1haW4uc2giCitdKSMgX0xUX1BST0dfTFRNQUlOCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworIyMgQWNjdW11bGF0ZSBjb2RlIGZvciBjcmVhdGluZyBsaWJ0b29sLiAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIFNvIHRoYXQgd2UgY2FuIHJlY3JlYXRlIGEgZnVsbCBsaWJ0b29sIHNjcmlwdCBpbmNsdWRpbmcgYWRkaXRpb25hbAorIyB0YWdzLCB3ZSBhY2N1bXVsYXRlIHRoZSBjaHVua3Mgb2YgY29kZSB0byBzZW5kIHRvIEFDX0NPTkZJR19DT01NQU5EUworIyBpbiBtYWNyb3MgYW5kIHRoZW4gbWFrZSBhIHNpbmdsZSBjYWxsIGF0IHRoZSBlbmQgdXNpbmcgdGhlIGBsaWJ0b29sJworIyBsYWJlbC4KKworCisjIF9MVF9DT05GSUdfTElCVE9PTF9JTklUKFtJTklULUNPTU1BTkRTXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBJTklULUNPTU1BTkRTIHRvIGJlIHBhc3NlZCB0byBBQ19DT05GSUdfQ09NTUFORFMgbGF0ZXIuCittNF9kZWZpbmUoW19MVF9DT05GSUdfTElCVE9PTF9JTklUXSwKK1ttNF9pZnZhbChbJDFdLAorICAgICAgICAgIFttNF9hcHBlbmQoW19MVF9PVVRQVVRfTElCVE9PTF9JTklUXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0lOSVRdKQorCisKKyMgX0xUX0NPTkZJR19MSUJUT09MKFtDT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBSZWdpc3RlciBDT01NQU5EUyB0byBiZSBwYXNzZWQgdG8gQUNfQ09ORklHX0NPTU1BTkRTIGxhdGVyLgorbTRfZGVmaW5lKFtfTFRfQ09ORklHX0xJQlRPT0xdLAorW200X2lmdmFsKFskMV0sCisgICAgICAgICAgW200X2FwcGVuZChbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSwKKyAgICAgICAgICAgICAgICAgICAgIFskMQorXSldKV0pCisKKyMgSW5pdGlhbGl6ZS4KK200X2RlZmluZShbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTXSkKKworCisjIF9MVF9DT05GSUdfU0FWRV9DT01NQU5EUyhbQ09NTUFORFNdLCBbSU5JVF9DT01NQU5EU10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTXSwKK1tfTFRfQ09ORklHX0xJQlRPT0woWyQxXSkKK19MVF9DT05GSUdfTElCVE9PTF9JTklUKFskMl0pCitdKQorCisKKyMgX0xUX0ZPUk1BVF9DT01NRU5UKFtDT01NRU5UXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQWRkIGxlYWRpbmcgY29tbWVudCBtYXJrcyB0byB0aGUgc3RhcnQgb2YgZWFjaCBsaW5lLCBhbmQgYSB0cmFpbGluZworIyBmdWxsLXN0b3AgdG8gdGhlIHdob2xlIGNvbW1lbnQgaWYgb25lIGlzIG5vdCBwcmVzZW50IGFscmVhZHkuCittNF9kZWZpbmUoW19MVF9GT1JNQVRfQ09NTUVOVF0sCitbbTRfaWZ2YWwoWyQxXSwgWworbTRfYnBhdHN1YnN0KFttNF9icGF0c3Vic3QoWyQxXSwgW14gKl0sIFsjIF0pXSwKKyAgICAgICAgICAgICAgW1snYCRcXV0sIFtcXFwmXSldbTRfYm1hdGNoKFskMV0sIFtbIT8uXSRdLCBbXSwgWy5dKQorKV0pCisKKworCisjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIEZJWE1FOiBFbGltaW5hdGUgVkFSTkFNRSAjIworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisKKworIyBfTFRfREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dLCBbSVMtVEFHR0VEP10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ09ORklHTkFNRSBpcyB0aGUgbmFtZSBnaXZlbiB0byB0aGUgdmFsdWUgaW4gdGhlIGxpYnRvb2wgc2NyaXB0LgorIyBWQVJOQU1FIGlzIHRoZSAoYmFzZSkgbmFtZSB1c2VkIGluIHRoZSBjb25maWd1cmUgc2NyaXB0LgorIyBWQUxVRSBtYXkgYmUgMCwgMSBvciAyIGZvciBhIGNvbXB1dGVkIHF1b3RlIGVzY2FwZWQgdmFsdWUgYmFzZWQgb24KKyMgVkFSTkFNRS4gIEFueSBvdGhlciB2YWx1ZSB3aWxsIGJlIHVzZWQgZGlyZWN0bHkuCittNF9kZWZpbmUoW19MVF9ERUNMXSwKK1tsdF9pZl9hcHBlbmRfdW5pcShbbHRfZGVjbF92YXJuYW1lc10sIFskMl0sIFssIF0sCisgICAgW2x0X2RpY3RfYWRkX3N1YmtleShbbHRfZGVjbF9kaWN0XSwgWyQyXSwgW2xpYnRvb2xfbmFtZV0sCisJW200X2lmdmFsKFskMV0sIFskMV0sIFskMl0pXSkKKyAgICBsdF9kaWN0X2FkZF9zdWJrZXkoW2x0X2RlY2xfZGljdF0sIFskMl0sIFt2YWx1ZV0sIFskM10pCisgICAgbTRfaWZ2YWwoWyQ0XSwKKwlbbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLCBbZGVzY3JpcHRpb25dLCBbJDRdKV0pCisgICAgbHRfZGljdF9hZGRfc3Via2V5KFtsdF9kZWNsX2RpY3RdLCBbJDJdLAorCVt0YWdnZWQ/XSwgW200X2lmdmFsKFskNV0sIFt5ZXNdLCBbbm9dKV0pXSkKK10pCisKKworIyBfTFRfVEFHREVDTChbQ09ORklHTkFNRV0sIFZBUk5BTUUsIFZBTFVFLCBbREVTQ1JJUFRJT05dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtfTFRfVEFHREVDTF0sIFtfTFRfREVDTChbJDFdLCBbJDJdLCBbJDNdLCBbJDRdLCBbeWVzXSldKQorCisKKyMgbHRfZGVjbF90YWdfdmFybmFtZXMoW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kZWNsX3RhZ192YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt0YWdnZWQ/XSwgW3llc10sICRAKV0pCisKKworIyBfbHRfZGVjbF9maWx0ZXIoU1VCS0VZLCBWQUxVRSwgW1NFUEFSQVRPUl0sIFtWQVJOQU1FMS4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19sdF9kZWNsX2ZpbHRlcl0sCitbbTRfY2FzZShbJCNdLAorICBbMF0sIFttNF9mYXRhbChbJDA6IHRvbyBmZXcgYXJndW1lbnRzOiAkI10pXSwKKyAgWzFdLCBbbTRfZmF0YWwoWyQwOiB0b28gZmV3IGFyZ3VtZW50czogJCM6ICQxXSldLAorICBbMl0sIFtsdF9kaWN0X2ZpbHRlcihbbHRfZGVjbF9kaWN0XSwgWyQxXSwgWyQyXSwgW10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgWzNdLCBbbHRfZGljdF9maWx0ZXIoW2x0X2RlY2xfZGljdF0sIFskMV0sIFskMl0sIFskM10sIGx0X2RlY2xfdmFybmFtZXMpXSwKKyAgW2x0X2RpY3RfZmlsdGVyKFtsdF9kZWNsX2RpY3RdLCAkQCldKVtdZG5sCitdKQorCisKKyMgbHRfZGVjbF9xdW90ZV92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9xdW90ZV92YXJuYW1lc10sCitbX2x0X2RlY2xfZmlsdGVyKFt2YWx1ZV0sIFsxXSwgJEApXSkKKworCisjIGx0X2RlY2xfZHF1b3RlX3Zhcm5hbWVzKFtTRVBBUkFUT1JdLCBbVkFSTkFNRTEuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfZGVjbF9kcXVvdGVfdmFybmFtZXNdLAorW19sdF9kZWNsX2ZpbHRlcihbdmFsdWVdLCBbMl0sICRAKV0pCisKKworIyBsdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZChbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfdmFybmFtZXNfdGFnZ2VkXSwKK1ttNF9hc3NlcnQoWyQjIDw9IDJdKWRubAorXyQwKG00X3F1b3RlKG00X2RlZmF1bHQoWyQxXSwgW1ssIF1dKSksCisgICAgbTRfaWZ2YWwoWyQyXSwgW1skMl1dLCBbbTRfZHF1b3RlKGx0X2RlY2xfdGFnX3Zhcm5hbWVzKV0pLAorICAgIG00X3NwbGl0KG00X25vcm1hbGl6ZShtNF9xdW90ZShfTFRfVEFHUykpLCBbIF0pKV0pCittNF9kZWZpbmUoW19sdF9kZWNsX3Zhcm5hbWVzX3RhZ2dlZF0sCitbbTRfaWZ2YWwoWyQzXSwgW2x0X2NvbWJpbmUoWyQxXSwgWyQyXSwgW19dLCAkMyldKV0pCisKKworIyBsdF9kZWNsX2FsbF92YXJuYW1lcyhbU0VQQVJBVE9SXSwgW1ZBUk5BTUUxLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RlY2xfYWxsX3Zhcm5hbWVzXSwKK1tfJDAobTRfcXVvdGUobTRfZGVmYXVsdChbJDFdLCBbWywgXV0pKSwKKyAgICAgbTRfaWYoWyQyXSwgW10sCisJICAgbTRfcXVvdGUobHRfZGVjbF92YXJuYW1lcyksCisJbTRfcXVvdGUobTRfc2hpZnQoJEApKSkpW11kbmwKK10pCittNF9kZWZpbmUoW19sdF9kZWNsX2FsbF92YXJuYW1lc10sCitbbHRfam9pbigkQCwgbHRfZGVjbF92YXJuYW1lc190YWdnZWQoWyQxXSwKKwkJCWx0X2RlY2xfdGFnX3Zhcm5hbWVzKFtbLCBdXSwgbTRfc2hpZnQoJEApKSkpZG5sCitdKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSRShbVkFSTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBRdW90ZSBhIHZhcmlhYmxlIHZhbHVlLCBhbmQgZm9yd2FyZCBpdCB0byBgY29uZmlnLnN0YXR1cycgc28gdGhhdCBpdHMKKyMgZGVjbGFyYXRpb24gdGhlcmUgd2lsbCBoYXZlIHRoZSBzYW1lIHZhbHVlIGFzIGluIGBjb25maWd1cmUnLiAgVkFSTkFNRQorIyBtdXN0IGhhdmUgYSBzaW5nbGUgcXVvdGUgZGVsaW1pdGVkIHZhbHVlIGZvciB0aGlzIHRvIHdvcmsuCittNF9kZWZpbmUoW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkVdLAorWyQxPSdgJEVDSE8gIiRdWyQxIiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCddKQorCisKKyMgX0xUX0NPTkZJR19TVEFUVVNfREVDTEFSQVRJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBXZSBkZWxpbWl0IGxpYnRvb2wgY29uZmlnIHZhcmlhYmxlcyB3aXRoIHNpbmdsZSBxdW90ZXMsIHNvIHdoZW4KKyMgd2Ugd3JpdGUgdGhlbSB0byBjb25maWcuc3RhdHVzLCB3ZSBoYXZlIHRvIGJlIHN1cmUgdG8gcXVvdGUgYWxsCisjIGVtYmVkZGVkIHNpbmdsZSBxdW90ZXMgcHJvcGVybHkuICBJbiBjb25maWd1cmUsIHRoaXMgbWFjcm8gZXhwYW5kcworIyBlYWNoIHZhcmlhYmxlIGRlY2xhcmVkIHdpdGggX0xUX0RFQ0wgKGFuZCBfTFRfVEFHREVDTCkgaW50bzoKKyMKKyMgICAgPHZhcj49J2AkRUNITyAiJDx2YXI+IiB8ICRTRUQgIiRkZWxheV9zaW5nbGVfcXVvdGVfc3Vic3QiYCcKK200X2RlZnVuKFtfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX2FsbF92YXJuYW1lcyksCisgICAgW200X24oW19MVF9DT05GSUdfU1RBVFVTX0RFQ0xBUkUoX2x0X3ZhcildKV0pXSkKKworCisjIF9MVF9MSUJUT09MX1RBR1MKKyMgLS0tLS0tLS0tLS0tLS0tLQorIyBPdXRwdXQgY29tbWVudCBhbmQgbGlzdCBvZiB0YWdzIHN1cHBvcnRlZCBieSB0aGUgc2NyaXB0CittNF9kZWZ1bihbX0xUX0xJQlRPT0xfVEFHU10sCitbX0xUX0ZPUk1BVF9DT01NRU5UKFtUaGUgbmFtZXMgb2YgdGhlIHRhZ2dlZCBjb25maWd1cmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhpcyBzY3JpcHRdKWRubAorYXZhaWxhYmxlX3RhZ3M9Il9MVF9UQUdTImRubAorXSkKKworCisjIF9MVF9MSUJUT09MX0RFQ0xBUkUoVkFSTkFNRSwgW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEV4dHJhY3QgdGhlIGRpY3Rpb25hcnkgdmFsdWVzIGZvciBWQVJOQU1FIChvcHRpb25hbGx5IHdpdGggVEFHKSBhbmQKKyMgZXhwYW5kIHRvIGEgY29tbWVudGVkIHNoZWxsIHZhcmlhYmxlIHNldHRpbmc6CisjCisjICAgICMgU29tZSBjb21tZW50IGFib3V0IHdoYXQgVkFSIGlzIGZvci4KKyMgICAgdmlzaWJsZV9uYW1lPSRsdF9pbnRlcm5hbF9uYW1lCittNF9kZWZpbmUoW19MVF9MSUJUT09MX0RFQ0xBUkVdLAorW19MVF9GT1JNQVRfQ09NTUVOVChtNF9xdW90ZShsdF9kaWN0X2ZldGNoKFtsdF9kZWNsX2RpY3RdLCBbJDFdLAorCQkJCQkgICBbZGVzY3JpcHRpb25dKSkpW11kbmwKK200X3B1c2hkZWYoW19saWJ0b29sX25hbWVdLAorICAgIG00X3F1b3RlKGx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFtsaWJ0b29sX25hbWVdKSkpW11kbmwKK200X2Nhc2UobTRfcXVvdGUobHRfZGljdF9mZXRjaChbbHRfZGVjbF9kaWN0XSwgWyQxXSwgW3ZhbHVlXSkpLAorICAgIFswXSwgW19saWJ0b29sX25hbWU9WyRdJDFdLAorICAgIFsxXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFsyXSwgW19saWJ0b29sX25hbWU9JGx0X1tdJDFdLAorICAgIFtfbGlidG9vbF9uYW1lPWx0X2RpY3RfZmV0Y2goW2x0X2RlY2xfZGljdF0sIFskMV0sIFt2YWx1ZV0pXSlbXWRubAorbTRfaWZ2YWwoWyQyXSwgW18kMl0pW11tNF9wb3BkZWYoW19saWJ0b29sX25hbWVdKVtdZG5sCitdKQorCisKKyMgX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBjb21tZW50ZWQgZGVjbGFyYXRpb25zIG9mIG5vbi10YWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzCisjIHN1aXRhYmxlIGZvciBpbnNlcnRpb24gaW4gdGhlIExJQlRPT0wgQ09ORklHIHNlY3Rpb24gb2YgdGhlIGBsaWJ0b29sJworIyBzY3JpcHQuICBUYWdnZWQgbGlidG9vbCBjb25maWcgdmFyaWFibGVzIChldmVuIGZvciB0aGUgTElCVE9PTCBDT05GSUcKKyMgc2VjdGlvbikgYXJlIHByb2R1Y2VkIGJ5IF9MVF9MSUJUT09MX1RBR19WQVJTLgorbTRfZGVmdW4oW19MVF9MSUJUT09MX0NPTkZJR19WQVJTXSwKK1ttNF9mb3JlYWNoKFtfbHRfdmFyXSwKKyAgICBtNF9xdW90ZShfbHRfZGVjbF9maWx0ZXIoW3RhZ2dlZD9dLCBbbm9dLCBbXSwgbHRfZGVjbF92YXJuYW1lcykpLAorICAgIFttNF9uKFtfTFRfTElCVE9PTF9ERUNMQVJFKF9sdF92YXIpXSldKV0pCisKKworIyBfTFRfTElCVE9PTF9UQUdfVkFSUyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX0xJQlRPT0xfVEFHX1ZBUlNdLAorW200X2ZvcmVhY2goW19sdF92YXJdLCBtNF9xdW90ZShsdF9kZWNsX3RhZ192YXJuYW1lcyksCisgICAgW200X24oW19MVF9MSUJUT09MX0RFQ0xBUkUoX2x0X3ZhciwgWyQxXSldKV0pXSkKKworCisjIF9MVF9UQUdWQVIoVkFSTkFNRSwgW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX1RBR1ZBUl0sIFttNF9pZnZhbChbJDJdLCBbJDFfJDJdLCBbJDFdKV0pCisKKworIyBfTFRfQ09ORklHX0NPTU1BTkRTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgU2VuZCBhY2N1bXVsYXRlZCBvdXRwdXQgdG8gJENPTkZJR19TVEFUVVMuICBUaGFua3MgdG8gdGhlIGxpc3RzIG9mCisjIHZhcmlhYmxlcyBmb3Igc2luZ2xlIGFuZCBkb3VibGUgcXVvdGUgZXNjYXBpbmcgd2Ugc2F2ZWQgZnJvbSBjYWxscworIyB0byBfTFRfREVDTCwgd2UgY2FuIHB1dCBxdW90ZSBlc2NhcGVkIHZhcmlhYmxlcyBkZWNsYXJhdGlvbnMKKyMgaW50byBgY29uZmlnLnN0YXR1cycsIGFuZCB0aGVuIHRoZSBzaGVsbCBjb2RlIHRvIHF1b3RlIGVzY2FwZSB0aGVtIGluCisjIGZvciBsb29wcyBpbiBgY29uZmlnLnN0YXR1cycuICBGaW5hbGx5LCBhbnkgYWRkaXRpb25hbCBjb2RlIGFjY3VtdWxhdGVkCisjIGZyb20gY2FsbHMgdG8gX0xUX0NPTkZJR19MSUJUT09MX0lOSVQgaXMgZXhwYW5kZWQuCittNF9kZWZ1bihbX0xUX0NPTkZJR19DT01NQU5EU10sCitbQUNfUFJPVklERV9JRkVMU0UoW0xUX09VVFBVVF0sCisJZG5sIElmIHRoZSBsaWJ0b29sIGdlbmVyYXRpb24gY29kZSBoYXMgYmVlbiBwbGFjZWQgaW4gJENPTkZJR19MVCwKKwlkbmwgaW5zdGVhZCBvZiBkdXBsaWNhdGluZyBpdCBhbGwgb3ZlciBhZ2FpbiBpbnRvIGNvbmZpZy5zdGF0dXMsCisJZG5sIHRoZW4gd2Ugd2lsbCBoYXZlIGNvbmZpZy5zdGF0dXMgcnVuICRDT05GSUdfTFQgbGF0ZXIsIHNvIGl0CisJZG5sIG5lZWRzIHRvIGtub3cgd2hhdCBuYW1lIGlzIHN0b3JlZCB0aGVyZToKKyAgICAgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgICAgICBbJFNIRUxMICRDT05GSUdfTFQgfHwgQVNfRVhJVCgxKV0sIFtDT05GSUdfTFQ9JyRDT05GSUdfTFQnXSldLAorICAgIGRubCBJZiB0aGUgbGlidG9vbCBnZW5lcmF0aW9uIGNvZGUgaXMgZGVzdGluZWQgZm9yIGNvbmZpZy5zdGF0dXMsCisgICAgZG5sIGV4cGFuZCB0aGUgYWNjdW11bGF0ZWQgY29tbWFuZHMgYW5kIGluaXQgY29kZSBub3c6CisgICAgW0FDX0NPTkZJR19DT01NQU5EUyhbbGlidG9vbF0sCisgICAgICAgIFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNdLCBbX0xUX09VVFBVVF9MSUJUT09MX0NPTU1BTkRTX0lOSVRdKV0pCitdKSNfTFRfQ09ORklHX0NPTU1BTkRTCisKKworIyBJbml0aWFsaXplLgorbTRfZGVmaW5lKFtfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVF0sCitbCisKKyMgVGhlIEhQLVVYIGtzaCBhbmQgUE9TSVggc2hlbGwgcHJpbnQgdGhlIHRhcmdldCBkaXJlY3RvcnkgdG8gc3Rkb3V0CisjIGlmIENEUEFUSCBpcyBzZXQuCisodW5zZXQgQ0RQQVRIKSA+L2Rldi9udWxsIDI+JjEgJiYgdW5zZXQgQ0RQQVRICisKK3NlZF9xdW90ZV9zdWJzdD0nJHNlZF9xdW90ZV9zdWJzdCcKK2RvdWJsZV9xdW90ZV9zdWJzdD0nJGRvdWJsZV9xdW90ZV9zdWJzdCcKK2RlbGF5X3ZhcmlhYmxlX3N1YnN0PSckZGVsYXlfdmFyaWFibGVfc3Vic3QnCitfTFRfQ09ORklHX1NUQVRVU19ERUNMQVJBVElPTlMKK0xUQ0M9JyRMVENDJworTFRDRkxBR1M9JyRMVENGTEFHUycKK2NvbXBpbGVyPSckY29tcGlsZXJfREVGQVVMVCcKKworIyBBIGZ1bmN0aW9uIHRoYXQgaXMgdXNlZCB3aGVuIHRoZXJlIGlzIG5vIHByaW50IGJ1aWx0aW4gb3IgcHJpbnRmLgorZnVuY19mYWxsYmFja19lY2hvICgpCit7CisgIGV2YWwgJ2NhdCA8PF9MVEVDSE9fRU9GCitcJFtdMQorX0xURUNIT19FT0YnCit9CisKKyMgUXVvdGUgZXZhbGVkIHN0cmluZ3MuCitmb3IgdmFyIGluIGx0X2RlY2xfYWxsX3Zhcm5hbWVzKFtbIFwKK11dLCBsdF9kZWNsX3F1b3RlX3Zhcm5hbWVzKTsgZG8KKyAgICBjYXNlIFxgZXZhbCBcXFxcXCRFQ0hPIFxcXFwiIlxcXFxcJFwkdmFyIlxcXFwiXGAgaW4KKyAgICAqW1tcXFxcXFxcYFxcIlxcXCRdXSopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcYFxcXCRFQ0hPIFxcIlxcXCRcJHZhclxcIiB8IFxcXCRTRUQgXFwiXFxcJHNlZF9xdW90ZV9zdWJzdFxcIlxcXGBcXFxcXFwiIgorICAgICAgOzsKKyAgICAqKQorICAgICAgZXZhbCAibHRfXCR2YXI9XFxcXFxcIlxcXCRcJHZhclxcXFxcXCIiCisgICAgICA7OworICAgIGVzYWMKK2RvbmUKKworIyBEb3VibGUtcXVvdGUgZG91YmxlLWV2YWxlZCBzdHJpbmdzLgorZm9yIHZhciBpbiBsdF9kZWNsX2FsbF92YXJuYW1lcyhbWyBcCitdXSwgbHRfZGVjbF9kcXVvdGVfdmFybmFtZXMpOyBkbworICAgIGNhc2UgXGBldmFsIFxcXFxcJEVDSE8gXFxcXCIiXFxcXFwkXCR2YXIiXFxcXCJcYCBpbgorICAgICpbW1xcXFxcXFxgXFwiXFxcJF1dKikKKyAgICAgIGV2YWwgImx0X1wkdmFyPVxcXFxcXCJcXFxgXFxcJEVDSE8gXFwiXFxcJFwkdmFyXFwiIHwgXFxcJFNFRCAtZSBcXCJcXFwkZG91YmxlX3F1b3RlX3N1YnN0XFwiIC1lIFxcIlxcXCRzZWRfcXVvdGVfc3Vic3RcXCIgLWUgXFwiXFxcJGRlbGF5X3ZhcmlhYmxlX3N1YnN0XFwiXFxcYFxcXFxcXCIiCisgICAgICA7OworICAgICopCisgICAgICBldmFsICJsdF9cJHZhcj1cXFxcXFwiXFxcJFwkdmFyXFxcXFxcIiIKKyAgICAgIDs7CisgICAgZXNhYworZG9uZQorCitfTFRfT1VUUFVUX0xJQlRPT0xfSU5JVAorXSkKKworIyBfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChGSUxFLCBbQ09NTUVOVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBHZW5lcmF0ZSBhIGNoaWxkIHNjcmlwdCBGSUxFIHdpdGggYWxsIGluaXRpYWxpemF0aW9uIG5lY2Vzc2FyeSB0bworIyByZXVzZSB0aGUgZW52aXJvbm1lbnQgbGVhcm5lZCBieSB0aGUgcGFyZW50IHNjcmlwdCwgYW5kIG1ha2UgdGhlCisjIGZpbGUgZXhlY3V0YWJsZS4gIElmIENPTU1FTlQgaXMgc3VwcGxpZWQsIGl0IGlzIGluc2VydGVkIGFmdGVyIHRoZQorIyBgIyEnIHNlcXVlbmNlIGJ1dCBiZWZvcmUgaW5pdGlhbGl6YXRpb24gdGV4dCBiZWdpbnMuICBBZnRlciB0aGlzCisjIG1hY3JvLCBhZGRpdGlvbmFsIHRleHQgY2FuIGJlIGFwcGVuZGVkIHRvIEZJTEUgdG8gZm9ybSB0aGUgYm9keSBvZgorIyB0aGUgY2hpbGQgc2NyaXB0LiAgVGhlIG1hY3JvIGVuZHMgd2l0aCBub24temVybyBzdGF0dXMgaWYgdGhlCisjIGZpbGUgY291bGQgbm90IGJlIGZ1bGx5IHdyaXR0ZW4gKHN1Y2ggYXMgaWYgdGhlIGRpc2sgaXMgZnVsbCkuCittNF9pZmRlZihbQVNfSU5JVF9HRU5FUkFURURdLAorW200X2RlZnVuKFtfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVF0sW0FTX0lOSVRfR0VORVJBVEVEKCRAKV0pXSwKK1ttNF9kZWZ1bihbX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVRdLAorW200X3JlcXVpcmUoW0FTX1BSRVBBUkVdKV1kbmwKK1ttNF9wdXNoZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXWRubAorW2x0X3dyaXRlX2ZhaWw9MAorY2F0ID4kMSA8PF9BU0VPRiB8fCBsdF93cml0ZV9mYWlsPTEKKyMhICRTSEVMTAorIyBHZW5lcmF0ZWQgYnkgJGFzX21lLgorJDIKK1NIRUxMPVwke0NPTkZJR19TSEVMTC0kU0hFTEx9CitleHBvcnQgU0hFTEwKK19BU0VPRgorY2F0ID4+JDEgPDxcX0FTRU9GIHx8IGx0X3dyaXRlX2ZhaWw9MQorQVNfU0hFTExfU0FOSVRJWkUKK19BU19QUkVQQVJFCitleGVjIEFTX01FU1NBR0VfRkQ+JjEKK19BU0VPRgordGVzdCAkbHRfd3JpdGVfZmFpbCA9IDAgJiYgY2htb2QgK3ggJDFbXWRubAorbTRfcG9wZGVmKFtBU19NRVNTQUdFX0xPR19GRF0pXSldKSMgX0xUX0dFTkVSQVRFRF9GSUxFX0lOSVQKKworIyBMVF9PVVRQVVQKKyMgLS0tLS0tLS0tCisjIFRoaXMgbWFjcm8gYWxsb3dzIGVhcmx5IGdlbmVyYXRpb24gb2YgdGhlIGxpYnRvb2wgc2NyaXB0IChiZWZvcmUKKyMgQUNfT1VUUFVUIGlzIGNhbGxlZCksIGluY2FzZSBpdCBpcyB1c2VkIGluIGNvbmZpZ3VyZSBmb3IgY29tcGlsYXRpb24KKyMgdGVzdHMuCitBQ19ERUZVTihbTFRfT1VUUFVUXSwKK1s6ICR7Q09ORklHX0xUPS4vY29uZmlnLmx0fQorQUNfTVNHX05PVElDRShbY3JlYXRpbmcgJENPTkZJR19MVF0pCitfTFRfR0VORVJBVEVEX0ZJTEVfSU5JVChbIiRDT05GSUdfTFQiXSwKK1sjIFJ1biB0aGlzIGZpbGUgdG8gcmVjcmVhdGUgYSBsaWJ0b29sIHN0dWIgd2l0aCB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLl0pCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK2x0X2NsX3NpbGVudD1mYWxzZQorZXhlYyBBU19NRVNTQUdFX0xPR19GRD4+Y29uZmlnLmxvZworeworICBlY2hvCisgIEFTX0JPWChbUnVubmluZyAkYXNfbWUuXSkKK30gPiZBU19NRVNTQUdFX0xPR19GRAorCitsdF9jbF9oZWxwPSJcCitcYCRhc19tZScgY3JlYXRlcyBhIGxvY2FsIGxpYnRvb2wgc3R1YiBmcm9tIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24sCitmb3IgdXNlIGluIGZ1cnRoZXIgY29uZmlndXJlIHRpbWUgdGVzdHMgYmVmb3JlIHRoZSByZWFsIGxpYnRvb2wgaXMKK2dlbmVyYXRlZC4KKworVXNhZ2U6ICRbMF0gW1tPUFRJT05TXV0KKworICAtaCwgLS1oZWxwICAgICAgcHJpbnQgdGhpcyBoZWxwLCB0aGVuIGV4aXQKKyAgLVYsIC0tdmVyc2lvbiAgIHByaW50IHZlcnNpb24gbnVtYmVyLCB0aGVuIGV4aXQKKyAgLXEsIC0tcXVpZXQgICAgIGRvIG5vdCBwcmludCBwcm9ncmVzcyBtZXNzYWdlcworICAtZCwgLS1kZWJ1ZyAgICAgZG9uJ3QgcmVtb3ZlIHRlbXBvcmFyeSBmaWxlcworCitSZXBvcnQgYnVncyB0byA8YnVnLWxpYnRvb2xAZ251Lm9yZz4uIgorCitsdF9jbF92ZXJzaW9uPSJcCittNF9pZnNldChbQUNfUEFDS0FHRV9OQU1FXSwgW0FDX1BBQ0tBR0VfTkFNRSBdKWNvbmZpZy5sdFtdZG5sCittNF9pZnNldChbQUNfUEFDS0FHRV9WRVJTSU9OXSwgWyBBQ19QQUNLQUdFX1ZFUlNJT05dKQorY29uZmlndXJlZCBieSAkWzBdLCBnZW5lcmF0ZWQgYnkgbTRfUEFDS0FHRV9TVFJJTkcuCisKK0NvcHlyaWdodCAoQykgMjAxMCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK1RoaXMgY29uZmlnLmx0IHNjcmlwdCBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uCitnaXZlcyB1bmxpbWl0ZWQgcGVybWlzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBpdC4iCisKK3doaWxlIHRlc3QgJFsjXSAhPSAwCitkbworICBjYXNlICRbMV0gaW4KKyAgICAtLXZlcnNpb24gfCAtLXYqIHwgLVYgKQorICAgICAgZWNobyAiJGx0X2NsX3ZlcnNpb24iOyBleGl0IDAgOzsKKyAgICAtLWhlbHAgfCAtLWgqIHwgLWggKQorICAgICAgZWNobyAiJGx0X2NsX2hlbHAiOyBleGl0IDAgOzsKKyAgICAtLWRlYnVnIHwgLS1kKiB8IC1kICkKKyAgICAgIGRlYnVnPTogOzsKKyAgICAtLXF1aWV0IHwgLS1xKiB8IC0tc2lsZW50IHwgLS1zKiB8IC1xICkKKyAgICAgIGx0X2NsX3NpbGVudD06IDs7CisKKyAgICAtKikgQUNfTVNHX0VSUk9SKFt1bnJlY29nbml6ZWQgb3B0aW9uOiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKworICAgICopIEFDX01TR19FUlJPUihbdW5yZWNvZ25pemVkIGFyZ3VtZW50OiAkWzFdCitUcnkgXGAkWzBdIC0taGVscCcgZm9yIG1vcmUgaW5mb3JtYXRpb24uXSkgOzsKKyAgZXNhYworICBzaGlmdAorZG9uZQorCitpZiAkbHRfY2xfc2lsZW50OyB0aGVuCisgIGV4ZWMgQVNfTUVTU0FHRV9GRD4vZGV2L251bGwKK2ZpCitfTFRFT0YKKworY2F0ID4+IiRDT05GSUdfTFQiIDw8X0xURU9GCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFNfSU5JVAorX0xURU9GCisKK2NhdCA+PiIkQ09ORklHX0xUIiA8PFxfTFRFT0YKK0FDX01TR19OT1RJQ0UoW2NyZWF0aW5nICRvZmlsZV0pCitfTFRfT1VUUFVUX0xJQlRPT0xfQ09NTUFORFMKK0FTX0VYSVQoMCkKK19MVEVPRgorY2htb2QgK3ggIiRDT05GSUdfTFQiCisKKyMgY29uZmlndXJlIGlzIHdyaXRpbmcgdG8gY29uZmlnLmxvZywgYnV0IGNvbmZpZy5sdCBkb2VzIGl0cyBvd24gcmVkaXJlY3Rpb24sCisjIGFwcGVuZGluZyB0byBjb25maWcubG9nLCB3aGljaCBmYWlscyBvbiBET1MsIGFzIGNvbmZpZy5sb2cgaXMgc3RpbGwga2VwdAorIyBvcGVuIGJ5IGNvbmZpZ3VyZS4gIEhlcmUgd2UgZXhlYyB0aGUgRkQgdG8gL2Rldi9udWxsLCBlZmZlY3RpdmVseSBjbG9zaW5nCisjIGNvbmZpZy5sb2csIHNvIGl0IGNhbiBiZSBwcm9wZXJseSAocmUpb3BlbmVkIGFuZCBhcHBlbmRlZCB0byBieSBjb25maWcubHQuCitsdF9jbF9zdWNjZXNzPToKK3Rlc3QgIiRzaWxlbnQiID0geWVzICYmCisgIGx0X2NvbmZpZ19sdF9hcmdzPSIkbHRfY29uZmlnX2x0X2FyZ3MgLS1xdWlldCIKK2V4ZWMgQVNfTUVTU0FHRV9MT0dfRkQ+L2Rldi9udWxsCiskU0hFTEwgIiRDT05GSUdfTFQiICRsdF9jb25maWdfbHRfYXJncyB8fCBsdF9jbF9zdWNjZXNzPWZhbHNlCitleGVjIEFTX01FU1NBR0VfTE9HX0ZEPj5jb25maWcubG9nCiskbHRfY2xfc3VjY2VzcyB8fCBBU19FWElUKDEpCitdKSMgTFRfT1VUUFVUCisKKworIyBfTFRfQ09ORklHKFRBRykKKyMgLS0tLS0tLS0tLS0tLS0tCisjIElmIFRBRyBpcyB0aGUgYnVpbHQtaW4gdGFnLCBjcmVhdGUgYW4gaW5pdGlhbCBsaWJ0b29sIHNjcmlwdCB3aXRoIGEKKyMgZGVmYXVsdCBjb25maWd1cmF0aW9uIGZyb20gdGhlIHVudGFnZ2VkIGNvbmZpZyB2YXJzLiAgT3RoZXJ3aXNlIGFkZCBjb2RlCisjIHRvIGNvbmZpZy5zdGF0dXMgZm9yIGFwcGVuZGluZyB0aGUgY29uZmlndXJhdGlvbiBuYW1lZCBieSBUQUcgZnJvbSB0aGUKKyMgbWF0Y2hpbmcgdGFnZ2VkIGNvbmZpZyB2YXJzLgorbTRfZGVmdW4oW19MVF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTKFsKKyAgbTRfZGVmaW5lKFtfTFRfVEFHXSwgbTRfaWYoWyQxXSwgW10sIFtDXSwgWyQxXSkpZG5sCisgIG00X2lmKF9MVF9UQUcsIFtDXSwgWworICAgICMgU2VlIGlmIHdlIGFyZSBydW5uaW5nIG9uIHpzaCwgYW5kIHNldCB0aGUgb3B0aW9ucyB3aGljaCBhbGxvdyBvdXIKKyAgICAjIGNvbW1hbmRzIHRocm91Z2ggd2l0aG91dCByZW1vdmFsIG9mIFwgZXNjYXBlcy4KKyAgICBpZiB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0iIDsgdGhlbgorICAgICAgc2V0b3B0IE5PX0dMT0JfU1VCU1QKKyAgICBmaQorCisgICAgY2ZnZmlsZT0iJHtvZmlsZX1UIgorICAgIHRyYXAgIiRSTSBcIiRjZmdmaWxlXCI7IGV4aXQgMSIgMSAyIDE1CisgICAgJFJNICIkY2ZnZmlsZSIKKworICAgIGNhdCA8PF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyEgJFNIRUxMCisKKyMgYCRFQ0hPICIkb2ZpbGUiIHwgc2VkICdzJV4uKi8lJSdgIC0gUHJvdmlkZSBnZW5lcmFsaXplZCBsaWJyYXJ5LWJ1aWxkaW5nIHN1cHBvcnQgc2VydmljZXMuCisjIEdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5ICRhc19tZSAoJFBBQ0tBR0UkVElNRVNUQU1QKSAkVkVSU0lPTgorIyBMaWJ0b29sIHdhcyBjb25maWd1cmVkIG9uIGhvc3QgYChob3N0bmFtZSB8fCB1bmFtZSAtbikgMj4vZGV2L251bGwgfCBzZWQgMXFgOgorIyBOT1RFOiBDaGFuZ2VzIG1hZGUgdG8gdGhpcyBmaWxlIHdpbGwgYmUgbG9zdDogbG9vayBhdCBsdG1haW4uc2guCisjCitfTFRfQ09QWUlORworX0xUX0xJQlRPT0xfVEFHUworCisjICMjIyBCRUdJTiBMSUJUT09MIENPTkZJRworX0xUX0xJQlRPT0xfQ09ORklHX1ZBUlMKK19MVF9MSUJUT09MX1RBR19WQVJTCisjICMjIyBFTkQgTElCVE9PTCBDT05GSUcKKworX0xUX0VPRgorCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgY2F0IDw8XF9MVF9FT0YgPj4gIiRjZmdmaWxlIgorIyBBSVggc29tZXRpbWVzIGhhcyBwcm9ibGVtcyB3aXRoIHRoZSBHQ0MgY29sbGVjdDIgcHJvZ3JhbS4gIEZvciBzb21lCisjIHJlYXNvbiwgaWYgd2Ugc2V0IHRoZSBDT0xMRUNUX05BTUVTIGVudmlyb25tZW50IHZhcmlhYmxlLCB0aGUgcHJvYmxlbXMKKyMgdmFuaXNoIGluIGEgcHVmZiBvZiBzbW9rZS4KK2lmIHRlc3QgIlgke0NPTExFQ1RfTkFNRVMrc2V0fSIgIT0gWHNldDsgdGhlbgorICBDT0xMRUNUX05BTUVTPQorICBleHBvcnQgQ09MTEVDVF9OQU1FUworZmkKK19MVF9FT0YKKyAgICA7OworICBlc2FjCisKKyAgX0xUX1BST0dfTFRNQUlOCisKKyAgIyBXZSB1c2Ugc2VkIGluc3RlYWQgb2YgY2F0IGJlY2F1c2UgYmFzaCBvbiBESkdQUCBnZXRzIGNvbmZ1c2VkIGlmCisgICMgaWYgZmluZHMgbWl4ZWQgQ1IvTEYgYW5kIExGLW9ubHkgbGluZXMuICBTaW5jZSBzZWQgb3BlcmF0ZXMgaW4KKyAgIyB0ZXh0IG1vZGUsIGl0IHByb3Blcmx5IGNvbnZlcnRzIGxpbmVzIHRvIENSL0xGLiAgVGhpcyBiYXNoIHByb2JsZW0KKyAgIyBpcyByZXBvcnRlZGx5IGZpeGVkLCBidXQgd2h5IG5vdCBydW4gb24gb2xkIHZlcnNpb25zIHRvbz8KKyAgc2VkICckcScgIiRsdG1haW4iID4+ICIkY2ZnZmlsZSIgXAorICAgICB8fCAocm0gLWYgIiRjZmdmaWxlIjsgZXhpdCAxKQorCisgIF9MVF9QUk9HX1JFUExBQ0VfU0hFTExGTlMKKworICAgbXYgLWYgIiRjZmdmaWxlIiAiJG9maWxlIiB8fAorICAgIChybSAtZiAiJG9maWxlIiAmJiBjcCAiJGNmZ2ZpbGUiICIkb2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZSIpCisgIGNobW9kICt4ICIkb2ZpbGUiCitdLAorW2NhdCA8PF9MVF9FT0YgPj4gIiRvZmlsZSIKKworZG5sIFVuZm9ydHVuYXRlbHkgd2UgaGF2ZSB0byB1c2UgJDEgaGVyZSwgc2luY2UgX0xUX1RBRyBpcyBub3QgZXhwYW5kZWQKK2RubCBpbiBhIGNvbW1lbnQgKGllIGFmdGVyIGEgIykuCisjICMjIyBCRUdJTiBMSUJUT09MIFRBRyBDT05GSUc6ICQxCitfTFRfTElCVE9PTF9UQUdfVkFSUyhfTFRfVEFHKQorIyAjIyMgRU5EIExJQlRPT0wgVEFHIENPTkZJRzogJDEKK19MVF9FT0YKK10pZG5sIC9tNF9pZgorXSwKK1ttNF9pZihbJDFdLCBbXSwgWworICAgIFBBQ0tBR0U9JyRQQUNLQUdFJworICAgIFZFUlNJT049JyRWRVJTSU9OJworICAgIFRJTUVTVEFNUD0nJFRJTUVTVEFNUCcKKyAgICBSTT0nJFJNJworICAgIG9maWxlPSckb2ZpbGUnXSwgW10pCitdKWRubCAvX0xUX0NPTkZJR19TQVZFX0NPTU1BTkRTCitdKSMgX0xUX0NPTkZJRworCisKKyMgTFRfU1VQUE9SVEVEX1RBRyhUQUcpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBUcmFjZSB0aGlzIG1hY3JvIHRvIGRpc2NvdmVyIHdoYXQgdGFncyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBsaWJ0b29sCisjIC0tdGFnIG9wdGlvbiwgdXNpbmc6CisjICAgIGF1dG9jb25mIC0tdHJhY2UgJ0xUX1NVUFBPUlRFRF9UQUc6JDEnCitBQ19ERUZVTihbTFRfU1VQUE9SVEVEX1RBR10sIFtdKQorCisKKyMgQyBzdXBwb3J0IGlzIGJ1aWx0LWluIGZvciBub3cKK200X2RlZmluZShbX0xUX0xBTkdfQ19lbmFibGVkXSwgW10pCittNF9kZWZpbmUoW19MVF9UQUdTXSwgW10pCisKKworIyBMVF9MQU5HKExBTkcpCisjIC0tLS0tLS0tLS0tLS0KKyMgRW5hYmxlIGxpYnRvb2wgc3VwcG9ydCBmb3IgdGhlIGdpdmVuIGxhbmd1YWdlIGlmIG5vdCBhbHJlYWR5IGVuYWJsZWQuCitBQ19ERUZVTihbTFRfTEFOR10sCitbQUNfQkVGT1JFKFskMF0sIFtMVF9PVVRQVVRdKWRubAorbTRfY2FzZShbJDFdLAorICBbQ10sCQkJW19MVF9MQU5HKEMpXSwKKyAgW0MrK10sCQlbX0xUX0xBTkcoQ1hYKV0sCisgIFtKYXZhXSwJCVtfTFRfTEFORyhHQ0opXSwKKyAgW0ZvcnRyYW4gNzddLAkJW19MVF9MQU5HKEY3NyldLAorICBbRm9ydHJhbl0sCQlbX0xUX0xBTkcoRkMpXSwKKyAgW1dpbmRvd3MgUmVzb3VyY2VdLAlbX0xUX0xBTkcoUkMpXSwKKyAgW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX0NPTkZJR10sCisgICAgW19MVF9MQU5HKCQxKV0sCisgICAgW200X2ZhdGFsKFskMDogdW5zdXBwb3J0ZWQgbGFuZ3VhZ2U6ICIkMSJdKV0pXSlkbmwKK10pIyBMVF9MQU5HCisKKworIyBfTFRfTEFORyhMQU5HTkFNRSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0xBTkddLAorW200X2lmZGVmKFtfTFRfTEFOR19dJDFbX2VuYWJsZWRdLCBbXSwKKyAgW0xUX1NVUFBPUlRFRF9UQUcoWyQxXSlkbmwKKyAgbTRfYXBwZW5kKFtfTFRfVEFHU10sIFskMSBdKWRubAorICBtNF9kZWZpbmUoW19MVF9MQU5HX10kMVtfZW5hYmxlZF0sIFtdKWRubAorICBfTFRfTEFOR18kMV9DT05GSUcoJDEpXSlkbmwKK10pIyBfTFRfTEFORworCisKKyMgX0xUX0xBTkdfREVGQVVMVF9DT05GSUcKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfTEFOR19ERUZBVUxUX0NPTkZJR10sCitbQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfQ1hYXSwKKyAgW0xUX0xBTkcoQ1hYKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfQ1hYXSwgZGVmbihbQUNfUFJPR19DWFhdKVtMVF9MQU5HKENYWCldKV0pCisKK0FDX1BST1ZJREVfSUZFTFNFKFtBQ19QUk9HX0Y3N10sCisgIFtMVF9MQU5HKEY3NyldLAorICBbbTRfZGVmaW5lKFtBQ19QUk9HX0Y3N10sIGRlZm4oW0FDX1BST0dfRjc3XSlbTFRfTEFORyhGNzcpXSldKQorCitBQ19QUk9WSURFX0lGRUxTRShbQUNfUFJPR19GQ10sCisgIFtMVF9MQU5HKEZDKV0sCisgIFttNF9kZWZpbmUoW0FDX1BST0dfRkNdLCBkZWZuKFtBQ19QUk9HX0ZDXSlbTFRfTEFORyhGQyldKV0pCisKK2RubCBUaGUgY2FsbCB0byBbQV1bTV9QUk9HX0dDSl0gaXMgcXVvdGVkIGxpa2UgdGhhdCB0byBzdG9wIGFjbG9jYWwKK2RubCBwdWxsaW5nIHRoaW5ncyBpbiBuZWVkbGVzc2x5LgorQUNfUFJPVklERV9JRkVMU0UoW0FDX1BST0dfR0NKXSwKKyAgW0xUX0xBTkcoR0NKKV0sCisgIFtBQ19QUk9WSURFX0lGRUxTRShbQV1bTV9QUk9HX0dDSl0sCisgICAgW0xUX0xBTkcoR0NKKV0sCisgICAgW0FDX1BST1ZJREVfSUZFTFNFKFtMVF9QUk9HX0dDSl0sCisgICAgICBbTFRfTEFORyhHQ0opXSwKKyAgICAgIFttNF9pZmRlZihbQUNfUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FDX1BST0dfR0NKXSwgZGVmbihbQUNfUFJPR19HQ0pdKVtMVF9MQU5HKEdDSildKV0pCisgICAgICAgbTRfaWZkZWYoW0FdW01fUFJPR19HQ0pdLAorCVttNF9kZWZpbmUoW0FdW01fUFJPR19HQ0pdLCBkZWZuKFtBXVtNX1BST0dfR0NKXSlbTFRfTEFORyhHQ0opXSldKQorICAgICAgIG00X2lmZGVmKFtMVF9QUk9HX0dDSl0sCisJW200X2RlZmluZShbTFRfUFJPR19HQ0pdLCBkZWZuKFtMVF9QUk9HX0dDSl0pW0xUX0xBTkcoR0NKKV0pXSldKV0pXSkKKworQUNfUFJPVklERV9JRkVMU0UoW0xUX1BST0dfUkNdLAorICBbTFRfTEFORyhSQyldLAorICBbbTRfZGVmaW5lKFtMVF9QUk9HX1JDXSwgZGVmbihbTFRfUFJPR19SQ10pW0xUX0xBTkcoUkMpXSldKQorXSkjIF9MVF9MQU5HX0RFRkFVTFRfQ09ORklHCisKKyMgT2Jzb2xldGUgbWFjcm9zOgorQVVfREVGVU4oW0FDX0xJQlRPT0xfQ1hYXSwgW0xUX0xBTkcoQysrKV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GNzddLCBbTFRfTEFORyhGb3J0cmFuIDc3KV0pCitBVV9ERUZVTihbQUNfTElCVE9PTF9GQ10sIFtMVF9MQU5HKEZvcnRyYW4pXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX0dDSl0sIFtMVF9MQU5HKEphdmEpXSkKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1JDXSwgW0xUX0xBTkcoV2luZG93cyBSZXNvdXJjZSldKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0NYWF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0Y3N10sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0ZDXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfR0NKXSwgW10pCitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfUkNdLCBbXSkKKworCisjIF9MVF9UQUdfQ09NUElMRVIKKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UQUdfQ09NUElMRVJdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorCitfTFRfREVDTChbTFRDQ10sIFtDQ10sIFsxXSwgW0EgQyBjb21waWxlcl0pZG5sCitfTFRfREVDTChbTFRDRkxBR1NdLCBbQ0ZMQUdTXSwgWzFdLCBbTFRDQyBjb21waWxlciBmbGFnc10pZG5sCitfTFRfVEFHREVDTChbQ0NdLCBbY29tcGlsZXJdLCBbMV0sIFtBIGxhbmd1YWdlIHNwZWNpZmljIGNvbXBpbGVyXSlkbmwKK19MVF9UQUdERUNMKFt3aXRoX2djY10sIFtHQ0NdLCBbMF0sIFtJcyB0aGUgY29tcGlsZXIgdGhlIEdOVSBjb21waWxlcj9dKWRubAorCisjIElmIG5vIEMgY29tcGlsZXIgd2FzIHNwZWNpZmllZCwgdXNlIENDLgorTFRDQz0ke0xUQ0MtIiRDQyJ9CisKKyMgSWYgbm8gQyBjb21waWxlciBmbGFncyB3ZXJlIHNwZWNpZmllZCwgdXNlIENGTEFHUy4KK0xUQ0ZMQUdTPSR7TFRDRkxBR1MtIiRDRkxBR1MifQorCisjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorY29tcGlsZXI9JENDCitdKSMgX0xUX1RBR19DT01QSUxFUgorCisKKyMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBDaGVjayBmb3IgY29tcGlsZXIgYm9pbGVycGxhdGUgb3V0cHV0IG9yIHdhcm5pbmdzIHdpdGgKKyMgdGhlIHNpbXBsZSBjb21waWxlciB0ZXN0IGNvZGUuCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorYWNfb3V0ZmlsZT1jb25mdGVzdC4kYWNfb2JqZXh0CitlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+Y29uZnRlc3QuJGFjX2V4dAorZXZhbCAiJGFjX2NvbXBpbGUiIDI+JjEgPi9kZXYvbnVsbCB8ICRTRUQgJy9eJC9kOyAvXiAqKy9kJyA+Y29uZnRlc3QuZXJyCitfbHRfY29tcGlsZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gY29uZnRlc3QqCitdKSMgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisKKworIyBfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGxpbmtlciBib2lsZXJwbGF0ZSBvdXRwdXQgb3Igd2FybmluZ3Mgd2l0aAorIyB0aGUgc2ltcGxlIGxpbmsgdGVzdCBjb2RlLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfQk9JTEVSUExBVEVdLAorW200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCithY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHQKK2VjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID5jb25mdGVzdC4kYWNfZXh0CitldmFsICIkYWNfbGluayIgMj4mMSA+L2Rldi9udWxsIHwgJFNFRCAnL14kL2Q7IC9eICorL2QnID5jb25mdGVzdC5lcnIKK19sdF9saW5rZXJfYm9pbGVycGxhdGU9YGNhdCBjb25mdGVzdC5lcnJgCiskUk0gLXIgY29uZnRlc3QqCitdKSMgX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIF9MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuX29uY2UoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSxbCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4qKQorICAgIEFDX0NIRUNLX1RPT0woW0RTWU1VVElMXSwgW2RzeW11dGlsXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW05NRURJVF0sIFtubWVkaXRdLCBbOl0pCisgICAgQUNfQ0hFQ0tfVE9PTChbTElQT10sIFtsaXBvXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MXSwgW290b29sXSwgWzpdKQorICAgIEFDX0NIRUNLX1RPT0woW09UT09MNjRdLCBbb3Rvb2w2NF0sIFs6XSkKKyAgICBfTFRfREVDTChbXSwgW0RTWU1VVElMXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gbWFuaXB1bGF0ZSBhcmNoaXZlZCBEV0FSRiBkZWJ1ZyBzeW1ib2wgZmlsZXMgb24gTWFjIE9TIFhdKQorICAgIF9MVF9ERUNMKFtdLCBbTk1FRElUXSwgWzFdLAorICAgICAgW1Rvb2wgdG8gY2hhbmdlIGdsb2JhbCB0byBsb2NhbCBzeW1ib2xzIG9uIE1hYyBPUyBYXSkKKyAgICBfTFRfREVDTChbXSwgW0xJUE9dLCBbMV0sCisgICAgICBbVG9vbCB0byBtYW5pcHVsYXRlIGZhdCBvYmplY3RzIGFuZCBhcmNoaXZlcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTF0sIFsxXSwKKyAgICAgIFtsZGQvcmVhZGVsZiBsaWtlIHRvb2wgZm9yIE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWF0pCisgICAgX0xUX0RFQ0woW10sIFtPVE9PTDY0XSwgWzFdLAorICAgICAgW2xkZC9yZWFkZWxmIGxpa2UgdG9vbCBmb3IgNjQgYml0IE1hY2gtTyBiaW5hcmllcyBvbiBNYWMgT1MgWCAxMC40XSkKKworICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLXNpbmdsZV9tb2R1bGUgbGlua2VyIGZsYWddLFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kXSwKKyAgICAgIFtsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kPW5vCisgICAgICBpZiB0ZXN0IC16ICIke0xUX01VTFRJX01PRFVMRX0iOyB0aGVuCisJIyBCeSBkZWZhdWx0IHdlIHdpbGwgYWRkIHRoZSAtc2luZ2xlX21vZHVsZSBmbGFnLiBZb3UgY2FuIG92ZXJyaWRlCisJIyBieSBlaXRoZXIgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTFRfTVVMVElfTU9EVUxFCisJIyBub24tZW1wdHkgYXQgY29uZmlndXJlIHRpbWUsIG9yIGJ5IGFkZGluZyAtbXVsdGlfbW9kdWxlIHRvIHRoZQorCSMgbGluayBmbGFncy4KKwlybSAtcmYgbGliY29uZnRlc3QuZHlsaWIqCisJZWNobyAiaW50IGZvbyh2b2lkKXtyZXR1cm4gMTt9IiA+IGNvbmZ0ZXN0LmMKKwllY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwkkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gbGliY29uZnRlc3QuZHlsaWIgXAorCSAgLWR5bmFtaWNsaWIgLVdsLC1zaW5nbGVfbW9kdWxlIGNvbmZ0ZXN0LmMgMj5jb25mdGVzdC5lcnIKKyAgICAgICAgX2x0X3Jlc3VsdD0kPworCWlmIHRlc3QgLWYgbGliY29uZnRlc3QuZHlsaWIgJiYgdGVzdCAhIC1zIGNvbmZ0ZXN0LmVyciAmJiB0ZXN0ICRfbHRfcmVzdWx0ID0gMDsgdGhlbgorCSAgbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZD15ZXMKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorCXJtIC1yZiBsaWJjb25mdGVzdC5keWxpYioKKwlybSAtZiBjb25mdGVzdC4qCisgICAgICBmaV0pCisgICAgQUNfQ0FDSEVfQ0hFQ0soW2ZvciAtZXhwb3J0ZWRfc3ltYm9sc19saXN0IGxpbmtlciBmbGFnXSwKKyAgICAgIFtsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3RdLAorICAgICAgW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ubworICAgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgICBlY2hvICJfbWFpbiIgPiBjb25mdGVzdC5zeW0KKyAgICAgIExERkxBR1M9IiRMREZMQUdTIC1XbCwtZXhwb3J0ZWRfc3ltYm9sc19saXN0LGNvbmZ0ZXN0LnN5bSIKKyAgICAgIEFDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oW10sW10pXSwKKwlbbHRfY3ZfbGRfZXhwb3J0ZWRfc3ltYm9sc19saXN0PXllc10sCisJW2x0X2N2X2xkX2V4cG9ydGVkX3N5bWJvbHNfbGlzdD1ub10pCisJTERGTEFHUz0iJHNhdmVfTERGTEFHUyIKKyAgICBdKQorICAgIEFDX0NBQ0hFX0NIRUNLKFtmb3IgLWZvcmNlX2xvYWQgbGlua2VyIGZsYWddLFtsdF9jdl9sZF9mb3JjZV9sb2FkXSwKKyAgICAgIFtsdF9jdl9sZF9mb3JjZV9sb2FkPW5vCisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBmb3JjZWRfbG9hZGVkKCkgeyByZXR1cm4gMjt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgLWMgLW8gY29uZnRlc3QubyBjb25mdGVzdC5jIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBlY2hvICIkQVIgY3J1IGxpYmNvbmZ0ZXN0LmEgY29uZnRlc3QubyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJEFSIGNydSBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0Lm8gMj4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGVjaG8gIiRSQU5MSUIgbGliY29uZnRlc3QuYSIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgJFJBTkxJQiBsaWJjb25mdGVzdC5hIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICBjYXQgPiBjb25mdGVzdC5jIDw8IF9MVF9FT0YKK2ludCBtYWluKCkgeyByZXR1cm4gMDt9CitfTFRfRU9GCisgICAgICBlY2hvICIkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgICAkTFRDQyAkTFRDRkxBR1MgJExERkxBR1MgLW8gY29uZnRlc3QgY29uZnRlc3QuYyAtV2wsLWZvcmNlX2xvYWQsLi9saWJjb25mdGVzdC5hIDI+Y29uZnRlc3QuZXJyCisgICAgICBfbHRfcmVzdWx0PSQ/CisgICAgICBpZiB0ZXN0IC1mIGNvbmZ0ZXN0ICYmIHRlc3QgISAtcyBjb25mdGVzdC5lcnIgJiYgdGVzdCAkX2x0X3Jlc3VsdCA9IDAgJiYgJEdSRVAgZm9yY2VkX2xvYWQgY29uZnRlc3QgMj4mMSA+L2Rldi9udWxsOyB0aGVuCisJbHRfY3ZfbGRfZm9yY2VfbG9hZD15ZXMKKyAgICAgIGVsc2UKKwljYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgIGZpCisgICAgICAgIHJtIC1mIGNvbmZ0ZXN0LmVyciBsaWJjb25mdGVzdC5hIGNvbmZ0ZXN0IGNvbmZ0ZXN0LmMKKyAgICAgICAgcm0gLXJmIGNvbmZ0ZXN0LmRTWU0KKyAgICBdKQorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICByaGFwc29keSogfCBkYXJ3aW4xLltbMDEyXV0pCisgICAgICBfbHRfZGFyX2FsbG93X3VuZGVmaW5lZD0nJHt3bH0tdW5kZWZpbmVkICR7d2x9c3VwcHJlc3MnIDs7CisgICAgZGFyd2luMS4qKQorICAgICAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LWZsYXRfbmFtZXNwYWNlICR7d2x9LXVuZGVmaW5lZCAke3dsfXN1cHByZXNzJyA7OworICAgIGRhcndpbiopICMgZGFyd2luIDUueCBvbgorICAgICAgIyBpZiBydW5uaW5nIG9uIDEwLjUgb3IgbGF0ZXIsIHRoZSBkZXBsb3ltZW50IHRhcmdldCBkZWZhdWx0cworICAgICAgIyB0byB0aGUgT1MgdmVyc2lvbiwgaWYgb24geDg2LCBhbmQgMTAuNCwgdGhlIGRlcGxveW1lbnQKKyAgICAgICMgdGFyZ2V0IGRlZmF1bHRzIHRvIDEwLjQuIERvbid0IHlvdSBsb3ZlIGl0PworICAgICAgY2FzZSAke01BQ09TWF9ERVBMT1lNRU5UX1RBUkdFVC0xMC4wfSwkaG9zdCBpbgorCTEwLjAsKjg2Ki1kYXJ3aW44KnwxMC4wLCotZGFyd2luW1s5MV1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS11bmRlZmluZWQgJHt3bH1keW5hbWljX2xvb2t1cCcgOzsKKwkxMC5bWzAxMl1dKikKKwkgIF9sdF9kYXJfYWxsb3dfdW5kZWZpbmVkPScke3dsfS1mbGF0X25hbWVzcGFjZSAke3dsfS11bmRlZmluZWQgJHt3bH1zdXBwcmVzcycgOzsKKwkxMC4qKQorCSAgX2x0X2Rhcl9hbGxvd191bmRlZmluZWQ9JyR7d2x9LXVuZGVmaW5lZCAke3dsfWR5bmFtaWNfbG9va3VwJyA7OworICAgICAgZXNhYworICAgIDs7CisgIGVzYWMKKyAgICBpZiB0ZXN0ICIkbHRfY3ZfYXBwbGVfY2Nfc2luZ2xlX21vZCIgPSAieWVzIjsgdGhlbgorICAgICAgX2x0X2Rhcl9zaW5nbGVfbW9kPSckc2luZ2xlX21vZHVsZScKKyAgICBmaQorICAgIGlmIHRlc3QgIiRsdF9jdl9sZF9leHBvcnRlZF9zeW1ib2xzX2xpc3QiID0gInllcyI7IHRoZW4KKyAgICAgIF9sdF9kYXJfZXhwb3J0X3N5bXM9JyAke3dsfS1leHBvcnRlZF9zeW1ib2xzX2xpc3QsJG91dHB1dF9vYmpkaXIvJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bScKKyAgICBlbHNlCisgICAgICBfbHRfZGFyX2V4cG9ydF9zeW1zPSd+JE5NRURJVCAtcyAkb3V0cHV0X29iamRpci8ke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltICR7bGlifScKKyAgICBmaQorICAgIGlmIHRlc3QgIiREU1lNVVRJTCIgIT0gIjoiICYmIHRlc3QgIiRsdF9jdl9sZF9mb3JjZV9sb2FkIiA9ICJubyI7IHRoZW4KKyAgICAgIF9sdF9kc3ltdXRpbD0nfiREU1lNVVRJTCAkbGliIHx8IDonCisgICAgZWxzZQorICAgICAgX2x0X2RzeW11dGlsPQorICAgIGZpCisgICAgOzsKKyAgZXNhYworXSkKKworCisjIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrcyBmb3IgbGlua2VyIGFuZCBjb21waWxlciBmZWF0dXJlcyBvbiBkYXJ3aW4KK200X2RlZnVuKFtfTFRfREFSV0lOX0xJTktFUl9GRUFUVVJFU10sCitbCisgIG00X3JlcXVpcmUoW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSkKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT15ZXMKKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9dW5zdXBwb3J0ZWQKKyAgaWYgdGVzdCAiJGx0X2N2X2xkX2ZvcmNlX2xvYWQiID0gInllcyI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9J2Bmb3IgY29udiBpbiAkY29udmVuaWVuY2VcIlwiOyBkbyB0ZXN0ICAtbiBcIiRjb252XCIgJiYgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSAke3dsfS1mb3JjZV9sb2FkLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgJworICBlbHNlCisgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScnCisgIGZpCisgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9IiRfbHRfZGFyX2FsbG93X3VuZGVmaW5lZCIKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgaWZvcnQqKSBfbHRfZGFyX2Nhbl9zaGFyZWQ9eWVzIDs7CisgICAgICopIF9sdF9kYXJfY2FuX3NoYXJlZD0kR0NDIDs7CisgIGVzYWMKKyAgaWYgdGVzdCAiJF9sdF9kYXJfY2FuX3NoYXJlZCIgPSAieWVzIjsgdGhlbgorICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPWZ1bmNfZWNob19hbGwKKyAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSJcJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyAkX2x0X2Rhcl9zaW5nbGVfbW9kJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0iXCRDQyBcJGFsbG93X3VuZGVmaW5lZF9mbGFnIC1vIFwkbGliIC1idW5kbGUgXCRsaWJvYmpzIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzJHtfbHRfZHN5bXV0aWx9IgorICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3MgLWluc3RhbGxfbmFtZSBcJHJwYXRoL1wkc29uYW1lIFwkdmVyc3RyaW5nICR7X2x0X2Rhcl9zaW5nbGVfbW9kfSR7X2x0X2Rhcl9leHBvcnRfc3ltc30ke19sdF9kc3ltdXRpbH0iCisgICAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0ic2VkIC1lICdzLF4sXywnIDwgXCRleHBvcnRfc3ltYm9scyA+IFwkb3V0cHV0X29iamRpci9cJHtsaWJuYW1lfS1zeW1ib2xzLmV4cHN5bX5cJENDIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgLWJ1bmRsZSBcJGxpYm9ianMgXCRkZXBsaWJzIFwkY29tcGlsZXJfZmxhZ3Mke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIG00X2lmKFskMV0sIFtDWFhdLAorWyAgIGlmIHRlc3QgIiRsdF9jdl9hcHBsZV9jY19zaW5nbGVfbW9kIiAhPSAieWVzIjsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0iXCRDQyAtciAta2VlcF9wcml2YXRlX2V4dGVybnMgLW5vc3RkbGliIC1vIFwke2xpYn0tbWFzdGVyLm8gXCRsaWJvYmpzflwkQ0MgLWR5bmFtaWNsaWIgXCRhbGxvd191bmRlZmluZWRfZmxhZyAtbyBcJGxpYiBcJHtsaWJ9LW1hc3Rlci5vIFwkZGVwbGlicyBcJGNvbXBpbGVyX2ZsYWdzIC1pbnN0YWxsX25hbWUgXCRycGF0aC9cJHNvbmFtZSBcJHZlcnN0cmluZyR7X2x0X2RzeW11dGlsfSIKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJzZWQgJ3MsXixfLCcgPCBcJGV4cG9ydF9zeW1ib2xzID4gXCRvdXRwdXRfb2JqZGlyL1wke2xpYm5hbWV9LXN5bWJvbHMuZXhwc3ltflwkQ0MgLXIgLWtlZXBfcHJpdmF0ZV9leHRlcm5zIC1ub3N0ZGxpYiAtbyBcJHtsaWJ9LW1hc3Rlci5vIFwkbGlib2Jqc35cJENDIC1keW5hbWljbGliIFwkYWxsb3dfdW5kZWZpbmVkX2ZsYWcgLW8gXCRsaWIgXCR7bGlifS1tYXN0ZXIubyBcJGRlcGxpYnMgXCRjb21waWxlcl9mbGFncyAtaW5zdGFsbF9uYW1lIFwkcnBhdGgvXCRzb25hbWUgXCR2ZXJzdHJpbmcke19sdF9kYXJfZXhwb3J0X3N5bXN9JHtfbHRfZHN5bXV0aWx9IgorICAgIGZpCitdLFtdKQorICBlbHNlCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgZmkKK10pCisKKyMgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIExpbmtzIGEgbWluaW1hbCBwcm9ncmFtIGFuZCBjaGVja3MgdGhlIGV4ZWN1dGFibGUKKyMgZm9yIHRoZSBzeXN0ZW0gZGVmYXVsdCBoYXJkY29kZWQgbGlicmFyeSBwYXRoLiBJbiBtb3N0IGNhc2VzLAorIyB0aGlzIGlzIC91c3IvbGliOi9saWIsIGJ1dCB3aGVuIHRoZSBNUEkgY29tcGlsZXJzIGFyZSB1c2VkCisjIHRoZSBsb2NhdGlvbiBvZiB0aGUgY29tbXVuaWNhdGlvbiBhbmQgTVBJIGxpYnMgYXJlIGluY2x1ZGVkIHRvby4KKyMgSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgdXNlIHRoZSBkZWZhdWx0IGxpYnJhcnkgcGF0aCBhY2NvcmRpbmcKKyMgdG8gdGhlIGFpeCBsZCBtYW51YWwuCisjIFN0b3JlIHRoZSByZXN1bHRzIGZyb20gdGhlIGRpZmZlcmVudCBjb21waWxlcnMgZm9yIGVhY2ggVEFHTkFNRS4KKyMgQWxsb3cgdG8gb3ZlcnJpZGUgdGhlbSBmb3IgYWxsIHRhZ3MgdGhyb3VnaCBsdF9jdl9haXhfbGlicGF0aC4KK200X2RlZnVuKFtfTFRfU1lTX01PRFVMRV9QQVRIX0FJWF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK2lmIHRlc3QgIiR7bHRfY3ZfYWl4X2xpYnBhdGgrc2V0fSIgPSBzZXQ7IHRoZW4KKyAgYWl4X2xpYnBhdGg9JGx0X2N2X2FpeF9saWJwYXRoCitlbHNlCisgIEFDX0NBQ0hFX1ZBTChbX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSldLAorICBbQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sWworICBsdF9haXhfbGlicGF0aF9zZWQ9J1sKKyAgICAgIC9JbXBvcnQgRmlsZSBTdHJpbmdzLywvXiQvIHsKKwkgIC9eMC8geworCSAgICAgIHMvXjAgICpcKFteIF0qXCkgKiQvXDEvCisJICAgICAgcAorCSAgfQorICAgICAgfV0nCisgIF9MVF9UQUdWQVIoW2x0X2N2X2FpeF9saWJwYXRoX10sIFskMV0pPWBkdW1wIC1IIGNvbmZ0ZXN0JGFjX2V4ZWV4dCAyPi9kZXYvbnVsbCB8ICRTRUQgLW4gLWUgIiRsdF9haXhfbGlicGF0aF9zZWQiYAorICAjIENoZWNrIGZvciBhIDY0LWJpdCBvYmplY3QgaWYgd2UgZGlkbid0IGZpbmQgYW55dGhpbmcuCisgIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKSI7IHRoZW4KKyAgICBfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKT1gZHVtcCAtSFg2NCBjb25mdGVzdCRhY19leGVleHQgMj4vZGV2L251bGwgfCAkU0VEIC1uIC1lICIkbHRfYWl4X2xpYnBhdGhfc2VkImAKKyAgZmldLFtdKQorICBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSkiOyB0aGVuCisgICAgX0xUX1RBR1ZBUihbbHRfY3ZfYWl4X2xpYnBhdGhfXSwgWyQxXSk9Ii91c3IvbGliOi9saWIiCisgIGZpCisgIF0pCisgIGFpeF9saWJwYXRoPSRfTFRfVEFHVkFSKFtsdF9jdl9haXhfbGlicGF0aF9dLCBbJDFdKQorZmkKK10pIyBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWAorCisKKyMgX0xUX1NIRUxMX0lOSVQoQVJHKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9TSEVMTF9JTklUXSwKK1ttNF9kaXZlcnRfdGV4dChbTTRTSC1JTklUXSwgWyQxCitdKV0pIyBfTFRfU0hFTExfSU5JVAorCisKKworIyBfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSAorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBGaW5kIGhvdyB3ZSBjYW4gZmFrZSBhbiBlY2hvIGNvbW1hbmQgdGhhdCBkb2VzIG5vdCBpbnRlcnByZXQgYmFja3NsYXNoLgorIyBJbiBwYXJ0aWN1bGFyLCB3aXRoIEF1dG9jb25mIDIuNjAgb3IgbGF0ZXIgd2UgYWRkIHNvbWUgY29kZSB0byB0aGUgc3RhcnQKKyMgb2YgdGhlIGdlbmVyYXRlZCBjb25maWd1cmUgc2NyaXB0IHdoaWNoIHdpbGwgZmluZCBhIHNoZWxsIHdpdGggYSBidWlsdGluCisjIHByaW50ZiAod2hpY2ggd2UgY2FuIHVzZSBhcyBhbiBlY2hvIGNvbW1hbmQpLgorbTRfZGVmdW4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSwKK1tFQ0hPPSdcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcJworRUNITz0kRUNITyRFQ0hPJEVDSE8kRUNITyRFQ0hPCitFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBwcmludCBzdHJpbmdzXSkKKyMgVGVzdCBwcmludCBmaXJzdCwgYmVjYXVzZSBpdCB3aWxsIGJlIGEgYnVpbHRpbiBpZiBwcmVzZW50LgoraWYgdGVzdCAiWGAoIHByaW50IC1yIC0tIC1uICkgMj4vZGV2L251bGxgIiA9IFgtbiAmJiBcCisgICB0ZXN0ICJYYHByaW50IC1yIC0tICRFQ0hPIDI+L2Rldi9udWxsYCIgPSAiWCRFQ0hPIjsgdGhlbgorICBFQ0hPPSdwcmludCAtciAtLScKK2VsaWYgdGVzdCAiWGBwcmludGYgJXMgJEVDSE8gMj4vZGV2L251bGxgIiA9ICJYJEVDSE8iOyB0aGVuCisgIEVDSE89J3ByaW50ZiAlc1xuJworZWxzZQorICAjIFVzZSB0aGlzIGZ1bmN0aW9uIGFzIGEgZmFsbGJhY2sgdGhhdCBhbHdheXMgd29ya3MuCisgIGZ1bmNfZmFsbGJhY2tfZWNobyAoKQorICB7CisgICAgZXZhbCAnY2F0IDw8X0xURUNIT19FT0YKKyRbXTEKK19MVEVDSE9fRU9GJworICB9CisgIEVDSE89J2Z1bmNfZmFsbGJhY2tfZWNobycKK2ZpCisKKyMgZnVuY19lY2hvX2FsbCBhcmcuLi4KKyMgSW52b2tlICRFQ0hPIHdpdGggYWxsIGFyZ3MsIHNwYWNlLXNlcGFyYXRlZC4KK2Z1bmNfZWNob19hbGwgKCkKK3sKKyAgICAkRUNITyAiJCoiIAorfQorCitjYXNlICIkRUNITyIgaW4KKyAgcHJpbnRmKikgQUNfTVNHX1JFU1VMVChbcHJpbnRmXSkgOzsKKyAgcHJpbnQqKSBBQ19NU0dfUkVTVUxUKFtwcmludCAtcl0pIDs7CisgICopIEFDX01TR19SRVNVTFQoW2NhdF0pIDs7Citlc2FjCisKK200X2lmZGVmKFtfQVNfREVURUNUX1NVR0dFU1RFRF0sCitbX0FTX0RFVEVDVF9TVUdHRVNURUQoWworICB0ZXN0IC1uICIke1pTSF9WRVJTSU9OK3NldH0ke0JBU0hfVkVSU0lPTitzZXR9IiB8fCAoCisgICAgRUNITz0nXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXFxcXCcKKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8KKyAgICBFQ0hPPSRFQ0hPJEVDSE8kRUNITyRFQ0hPJEVDSE8kRUNITworICAgIFBBVEg9L2VtcHR5IEZQQVRIPS9lbXB0eTsgZXhwb3J0IFBBVEggRlBBVEgKKyAgICB0ZXN0ICJYYHByaW50ZiAlcyAkRUNIT2AiID0gIlgkRUNITyIgXAorICAgICAgfHwgdGVzdCAiWGBwcmludCAtciAtLSAkRUNIT2AiID0gIlgkRUNITyIgKV0pXSkKKworX0xUX0RFQ0woW10sIFtTSEVMTF0sIFsxXSwgW1NoZWxsIHRvIHVzZSB3aGVuIGludm9raW5nIHNoZWxsIHNjcmlwdHNdKQorX0xUX0RFQ0woW10sIFtFQ0hPXSwgWzFdLCBbQW4gZWNobyBwcm9ncmFtIHRoYXQgcHJvdGVjdHMgYmFja3NsYXNoZXNdKQorXSkjIF9MVF9QUk9HX0VDSE9fQkFDS1NMQVNICisKKworIyBfTFRfV0lUSF9TWVNST09UCisjIC0tLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtfTFRfV0lUSF9TWVNST09UXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBzeXNyb290XSkKK0FDX0FSR19XSVRIKFtzeXNyb290XSwKK1sgIC0td2l0aC1zeXNyb290Wz1ESVJdIFNlYXJjaCBmb3IgZGVwZW5kZW50IGxpYnJhcmllcyB3aXRoaW4gRElSCisgICAgICAgICAgICAgICAgICAgICAgICAob3IgdGhlIGNvbXBpbGVyJ3Mgc3lzcm9vdCBpZiBub3Qgc3BlY2lmaWVkKS5dLAorW10sIFt3aXRoX3N5c3Jvb3Q9bm9dKQorCitkbmwgbHRfc3lzcm9vdCB3aWxsIGFsd2F5cyBiZSBwYXNzZWQgdW5xdW90ZWQuICBXZSBxdW90ZSBpdCBoZXJlCitkbmwgaW4gY2FzZSB0aGUgdXNlciBwYXNzZWQgYSBkaXJlY3RvcnkgbmFtZS4KK2x0X3N5c3Jvb3Q9CitjYXNlICR7d2l0aF9zeXNyb290fSBpbiAjKAorIHllcykKKyAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgIGx0X3N5c3Jvb3Q9YCRDQyAtLXByaW50LXN5c3Jvb3QgMj4vZGV2L251bGxgCisgICBmaQorICAgOzsgIygKKyAvKikKKyAgIGx0X3N5c3Jvb3Q9YGVjaG8gIiR3aXRoX3N5c3Jvb3QiIHwgc2VkIC1lICIkc2VkX3F1b3RlX3N1YnN0ImAKKyAgIDs7ICMoCisgbm98JycpCisgICA7OyAjKAorICopCisgICBBQ19NU0dfUkVTVUxUKFske3dpdGhfc3lzcm9vdH1dKQorICAgQUNfTVNHX0VSUk9SKFtUaGUgc3lzcm9vdCBtdXN0IGJlIGFuIGFic29sdXRlIHBhdGguXSkKKyAgIDs7Citlc2FjCisKKyBBQ19NU0dfUkVTVUxUKFske2x0X3N5c3Jvb3Q6LW5vfV0pCitfTFRfREVDTChbXSwgW2x0X3N5c3Jvb3RdLCBbMF0sIFtUaGUgcm9vdCB3aGVyZSB0byBzZWFyY2ggZm9yIF1kbmwKK1tkZXBlbmRlbnQgbGlicmFyaWVzLCBhbmQgaW4gd2hpY2ggb3VyIGxpYnJhcmllcyBzaG91bGQgYmUgaW5zdGFsbGVkLl0pXSkKKworIyBfTFRfRU5BQkxFX0xPQ0sKKyMgLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0VOQUJMRV9MT0NLXSwKK1tBQ19BUkdfRU5BQkxFKFtsaWJ0b29sLWxvY2tdLAorICBbQVNfSEVMUF9TVFJJTkcoWy0tZGlzYWJsZS1saWJ0b29sLWxvY2tdLAorICAgIFthdm9pZCBsb2NraW5nIChtaWdodCBicmVhayBwYXJhbGxlbCBidWlsZHMpXSldKQordGVzdCAieCRlbmFibGVfbGlidG9vbF9sb2NrIiAhPSB4bm8gJiYgZW5hYmxlX2xpYnRvb2xfbG9jaz15ZXMKKworIyBTb21lIGZsYWdzIG5lZWQgdG8gYmUgcHJvcGFnYXRlZCB0byB0aGUgY29tcGlsZXIgb3IgbGlua2VyIGZvciBnb29kCisjIGxpYnRvb2wgc3VwcG9ydC4KK2Nhc2UgJGhvc3QgaW4KK2lhNjQtKi1ocHV4KikKKyAgIyBGaW5kIG91dCB3aGljaCBBQkkgd2UgYXJlIHVzaW5nLgorICBlY2hvICdpbnQgaTsnID4gY29uZnRlc3QuJGFjX2V4dAorICBpZiBBQ19UUllfRVZBTChhY19jb21waWxlKTsgdGhlbgorICAgIGNhc2UgYC91c3IvYmluL2ZpbGUgY29uZnRlc3QuJGFjX29iamV4dGAgaW4KKyAgICAgICpFTEYtMzIqKQorCUhQVVhfSUE2NF9NT0RFPSIzMiIKKwk7OworICAgICAgKkVMRi02NCopCisJSFBVWF9JQTY0X01PREU9IjY0IgorCTs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7CisqLSotaXJpeDYqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ1sjXWxpbmUgJyRMSU5FTk8nICJjb25maWd1cmUiJyA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICBpZiB0ZXN0ICIkbHRfY3ZfcHJvZ19nbnVfbGQiID0geWVzOyB0aGVuCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGYzMmJzbWlwIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbWVsZjMyYm1pcG4zMiIKKwkgIDs7CisJKjY0LWJpdCopCisJICBMRD0iJHtMRC1sZH0gLW1lbGY2NGJtaXAiCisJOzsKKyAgICAgIGVzYWMKKyAgICBlbHNlCisgICAgICBjYXNlIGAvdXNyL2Jpbi9maWxlIGNvbmZ0ZXN0LiRhY19vYmpleHRgIGluCisJKjMyLWJpdCopCisJICBMRD0iJHtMRC1sZH0gLTMyIgorCSAgOzsKKwkqTjMyKikKKwkgIExEPSIke0xELWxkfSAtbjMyIgorCSAgOzsKKwkqNjQtYml0KikKKwkgIExEPSIke0xELWxkfSAtNjQiCisJICA7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworeDg2XzY0LSprZnJlZWJzZCotZ251fHg4Nl82NC0qbGludXgqfHBwYyotKmxpbnV4Knxwb3dlcnBjKi0qbGludXgqfCBcCitzMzkwKi0qbGludXgqfHMzOTAqLSp0cGYqfHNwYXJjKi0qbGludXgqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICAgKjMyLWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODZfZmJzZCIKKwkgICAgOzsKKwkgIHg4Nl82NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX2kzODYiCisJICAgIDs7CisJICBwcGM2NC0qbGludXgqfHBvd2VycGM2NC0qbGludXgqKQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmMzJwcGNsaW51eCIKKwkgICAgOzsKKwkgIHMzOTB4LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfczM5MCIKKwkgICAgOzsKKwkgIHNwYXJjNjQtKmxpbnV4KikKKwkgICAgTEQ9IiR7TEQtbGR9IC1tIGVsZjMyX3NwYXJjIgorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKjY0LWJpdCopCisJY2FzZSAkaG9zdCBpbgorCSAgeDg2XzY0LSprZnJlZWJzZCotZ251KQorCSAgICBMRD0iJHtMRC1sZH0gLW0gZWxmX3g4Nl82NF9mYnNkIgorCSAgICA7OworCSAgeDg2XzY0LSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGZfeDg2XzY0IgorCSAgICA7OworCSAgcHBjKi0qbGludXgqfHBvd2VycGMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NHBwYyIKKwkgICAgOzsKKwkgIHMzOTAqLSpsaW51eCp8czM5MCotKnRwZiopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zMzkwIgorCSAgICA7OworCSAgc3BhcmMqLSpsaW51eCopCisJICAgIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHJtIC1yZiBjb25mdGVzdCoKKyAgOzsKKworKi0qLXNjbzMuMnY1KikKKyAgIyBPbiBTQ08gT3BlblNlcnZlciA1LCB3ZSBuZWVkIC1iZWxmIHRvIGdldCBmdWxsLWZlYXR1cmVkIGJpbmFyaWVzLgorICBTQVZFX0NGTEFHUz0iJENGTEFHUyIKKyAgQ0ZMQUdTPSIkQ0ZMQUdTIC1iZWxmIgorICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgQyBjb21waWxlciBuZWVkcyAtYmVsZl0sIGx0X2N2X2NjX25lZWRzX2JlbGYsCisgICAgW0FDX0xBTkdfUFVTSChDKQorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFtbXV0sW1tdXSldLFtsdF9jdl9jY19uZWVkc19iZWxmPXllc10sW2x0X2N2X2NjX25lZWRzX2JlbGY9bm9dKQorICAgICBBQ19MQU5HX1BPUF0pCisgIGlmIHRlc3QgeCIkbHRfY3ZfY2NfbmVlZHNfYmVsZiIgIT0geCJ5ZXMiOyB0aGVuCisgICAgIyB0aGlzIGlzIHByb2JhYmx5IGdjYyAyLjguMCwgZWdjcyAxLjAgb3IgbmV3ZXI7IG5vIG5lZWQgZm9yIC1iZWxmCisgICAgQ0ZMQUdTPSIkU0FWRV9DRkxBR1MiCisgIGZpCisgIDs7CitzcGFyYyotKnNvbGFyaXMqKQorICAjIEZpbmQgb3V0IHdoaWNoIEFCSSB3ZSBhcmUgdXNpbmcuCisgIGVjaG8gJ2ludCBpOycgPiBjb25mdGVzdC4kYWNfZXh0CisgIGlmIEFDX1RSWV9FVkFMKGFjX2NvbXBpbGUpOyB0aGVuCisgICAgY2FzZSBgL3Vzci9iaW4vZmlsZSBjb25mdGVzdC5vYCBpbgorICAgICo2NC1iaXQqKQorICAgICAgY2FzZSAkbHRfY3ZfcHJvZ19nbnVfbGQgaW4KKyAgICAgIHllcyopIExEPSIke0xELWxkfSAtbSBlbGY2NF9zcGFyYyIgOzsKKyAgICAgICopCisJaWYgJHtMRC1sZH0gLTY0IC1yIC1vIGNvbmZ0ZXN0Mi5vIGNvbmZ0ZXN0Lm8gPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisJICBMRD0iJHtMRC1sZH0gLTY0IgorCWZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBybSAtcmYgY29uZnRlc3QqCisgIDs7Citlc2FjCisKK25lZWRfbG9ja3M9IiRlbmFibGVfbGlidG9vbF9sb2NrIgorXSkjIF9MVF9FTkFCTEVfTE9DSworCisKKyMgX0xUX1BST0dfQVIKKyMgLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfUFJPR19BUl0sCitbQUNfQ0hFQ0tfVE9PTFMoQVIsIFthcl0sIGZhbHNlKQorOiAke0FSPWFyfQorOiAke0FSX0ZMQUdTPWNydX0KK19MVF9ERUNMKFtdLCBbQVJdLCBbMV0sIFtUaGUgYXJjaGl2ZXJdKQorX0xUX0RFQ0woW10sIFtBUl9GTEFHU10sIFsxXSwgW0ZsYWdzIHRvIGNyZWF0ZSBhbiBhcmNoaXZlXSkKKworQUNfQ0FDSEVfQ0hFQ0soW2ZvciBhcmNoaXZlciBARklMRSBzdXBwb3J0XSwgW2x0X2N2X2FyX2F0X2ZpbGVdLAorICBbbHRfY3ZfYXJfYXRfZmlsZT1ubworICAgQUNfQ09NUElMRV9JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTV0sCisgICAgIFtlY2hvIGNvbmZ0ZXN0LiRhY19vYmpleHQgPiBjb25mdGVzdC5sc3QKKyAgICAgIGx0X2FyX3RyeT0nJEFSICRBUl9GTEFHUyBsaWJjb25mdGVzdC5hIEBjb25mdGVzdC5sc3QgPiZBU19NRVNTQUdFX0xPR19GRCcKKyAgICAgIEFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorICAgICAgaWYgdGVzdCAiJGFjX3N0YXR1cyIgLWVxIDA7IHRoZW4KKwkjIEVuc3VyZSB0aGUgYXJjaGl2ZXIgZmFpbHMgdXBvbiBib2d1cyBmaWxlIG5hbWVzLgorCXJtIC1mIGNvbmZ0ZXN0LiRhY19vYmpleHQgbGliY29uZnRlc3QuYQorCUFDX1RSWV9FVkFMKFtsdF9hcl90cnldKQorCWlmIHRlc3QgIiRhY19zdGF0dXMiIC1uZSAwOyB0aGVuCisgICAgICAgICAgbHRfY3ZfYXJfYXRfZmlsZT1ACisgICAgICAgIGZpCisgICAgICBmaQorICAgICAgcm0gLWYgY29uZnRlc3QuKiBsaWJjb25mdGVzdC5hCisgICAgIF0pCisgIF0pCisKK2lmIHRlc3QgIngkbHRfY3ZfYXJfYXRfZmlsZSIgPSB4bm87IHRoZW4KKyAgYXJjaGl2ZXJfbGlzdF9zcGVjPQorZWxzZQorICBhcmNoaXZlcl9saXN0X3NwZWM9JGx0X2N2X2FyX2F0X2ZpbGUKK2ZpCitfTFRfREVDTChbXSwgW2FyY2hpdmVyX2xpc3Rfc3BlY10sIFsxXSwKKyAgW0hvdyB0byBmZWVkIGEgZmlsZSBsaXN0aW5nIHRvIHRoZSBhcmNoaXZlcl0pCitdKSMgX0xUX1BST0dfQVIKKworCisjIF9MVF9DTURfT0xEX0FSQ0hJVkUKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DTURfT0xEX0FSQ0hJVkVdLAorW19MVF9QUk9HX0FSCisKK0FDX0NIRUNLX1RPT0woU1RSSVAsIHN0cmlwLCA6KQordGVzdCAteiAiJFNUUklQIiAmJiBTVFJJUD06CitfTFRfREVDTChbXSwgW1NUUklQXSwgWzFdLCBbQSBzeW1ib2wgc3RyaXBwaW5nIHByb2dyYW1dKQorCitBQ19DSEVDS19UT09MKFJBTkxJQiwgcmFubGliLCA6KQordGVzdCAteiAiJFJBTkxJQiIgJiYgUkFOTElCPToKK19MVF9ERUNMKFtdLCBbUkFOTElCXSwgWzFdLAorICAgIFtDb21tYW5kcyB1c2VkIHRvIGluc3RhbGwgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorCisjIERldGVybWluZSBjb21tYW5kcyB0byBjcmVhdGUgb2xkLXN0eWxlIHN0YXRpYyBhcmNoaXZlcy4KK29sZF9hcmNoaXZlX2NtZHM9JyRBUiAkQVJfRkxBR1MgJG9sZGxpYiRvbGRvYmpzJworb2xkX3Bvc3RpbnN0YWxsX2NtZHM9J2NobW9kIDY0NCAkb2xkbGliJworb2xkX3Bvc3R1bmluc3RhbGxfY21kcz0KKworaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBvcGVuYnNkKikKKyAgICBvbGRfcG9zdGluc3RhbGxfY21kcz0iJG9sZF9wb3N0aW5zdGFsbF9jbWRzflwkUkFOTElCIC10IFwkb2xkbGliIgorICAgIDs7CisgICopCisgICAgb2xkX3Bvc3RpbnN0YWxsX2NtZHM9IiRvbGRfcG9zdGluc3RhbGxfY21kc35cJFJBTkxJQiBcJG9sZGxpYiIKKyAgICA7OworICBlc2FjCisgIG9sZF9hcmNoaXZlX2NtZHM9IiRvbGRfYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkb2xkbGliIgorZmkKKworY2FzZSAkaG9zdF9vcyBpbgorICBkYXJ3aW4qKQorICAgIGxvY2tfb2xkX2FyY2hpdmVfZXh0cmFjdGlvbj15ZXMgOzsKKyAgKikKKyAgICBsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb249bm8gOzsKK2VzYWMKK19MVF9ERUNMKFtdLCBbb2xkX3Bvc3RpbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfREVDTChbXSwgW29sZF9wb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYW4gb2xkLXN0eWxlIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtsb2NrX29sZF9hcmNoaXZlX2V4dHJhY3Rpb25dLCBbMF0sCisgICAgW1doZXRoZXIgdG8gdXNlIGEgbG9jayBmb3Igb2xkIGFyY2hpdmUgZXh0cmFjdGlvbl0pCitdKSMgX0xUX0NNRF9PTERfQVJDSElWRQorCisKKyMgX0xUX0NPTVBJTEVSX09QVElPTihNRVNTQUdFLCBWQVJJQUJMRS1OQU1FLCBGTEFHUywKKyMJCVtPVVRQVVQtRklMRV0sIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gY29tcGlsZXIgb3B0aW9uIHdvcmtzCitBQ19ERUZVTihbX0xUX0NPTVBJTEVSX09QVElPTl0sCitbbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorQUNfQ0FDSEVfQ0hFQ0soWyQxXSwgWyQyXSwKKyAgWyQyPW5vCisgICBtNF9pZihbJDRdLCAsIFthY19vdXRmaWxlPWNvbmZ0ZXN0LiRhY19vYmpleHRdLCBbYWNfb3V0ZmlsZT0kNF0pCisgICBlY2hvICIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIiA+IGNvbmZ0ZXN0LiRhY19leHQKKyAgIGx0X2NvbXBpbGVyX2ZsYWc9IiQzIgorICAgIyBJbnNlcnQgdGhlIG9wdGlvbiBlaXRoZXIgKDEpIGFmdGVyIHRoZSBsYXN0ICpGTEFHUyB2YXJpYWJsZSwgb3IKKyAgICMgKDIpIGJlZm9yZSBhIHdvcmQgY29udGFpbmluZyAiY29uZnRlc3QuIiwgb3IgKDMpIGF0IHRoZSBlbmQuCisgICAjIE5vdGUgdGhhdCAkYWNfY29tcGlsZSBpdHNlbGYgZG9lcyBub3QgY29udGFpbiBiYWNrc2xhc2hlcyBhbmQgYmVnaW5zCisgICAjIHdpdGggYSBkb2xsYXIgc2lnbiAobm90IGEgaHlwaGVuKSwgc28gdGhlIGVjaG8gc2hvdWxkIHdvcmsgY29ycmVjdGx5LgorICAgIyBUaGUgb3B0aW9uIGlzIHJlZmVyZW5jZWQgdmlhIGEgdmFyaWFibGUgdG8gYXZvaWQgY29uZnVzaW5nIHNlZC4KKyAgIGx0X2NvbXBpbGU9YGVjaG8gIiRhY19jb21waWxlIiB8ICRTRUQgXAorICAgLWUgJ3M6LipGTEFHU31cezAsMVx9IDomJGx0X2NvbXBpbGVyX2ZsYWcgOjsgdCcgXAorICAgLWUgJ3M6IFtbXiBdXSpjb25mdGVzdFwuOiAkbHRfY29tcGlsZXJfZmxhZyY6OyB0JyBcCisgICAtZSAnczokOiAkbHRfY29tcGlsZXJfZmxhZzonYAorICAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICRsdF9jb21waWxlXCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgICAoZXZhbCAiJGx0X2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICAgYWNfc3RhdHVzPSQ/CisgICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zICIkYWNfb3V0ZmlsZSI7IHRoZW4KKyAgICAgIyBUaGUgY29tcGlsZXIgY2FuIG9ubHkgd2FybiBhbmQgaWdub3JlIHRoZSBvcHRpb24gaWYgbm90IHJlY29nbml6ZWQKKyAgICAgIyBTbyBzYXkgbm8gaWYgdGhlcmUgYXJlIHdhcm5pbmdzIG90aGVyIHRoYW4gdGhlIHVzdWFsIG91dHB1dC4KKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID5jb25mdGVzdC5leHAKKyAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgIGlmIHRlc3QgISAtcyBjb25mdGVzdC5lcjIgfHwgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gY29uZnRlc3QqCitdKQorCitpZiB0ZXN0IHgiWyRdJDIiID0geHllczsgdGhlbgorICAgIG00X2lmKFskNV0sICwgOiwgWyQ1XSkKK2Vsc2UKKyAgICBtNF9pZihbJDZdLCAsIDosIFskNl0pCitmaQorXSkjIF9MVF9DT01QSUxFUl9PUFRJT04KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19MSUJUT09MX0NPTVBJTEVSX09QVElPTl0sIFtfTFRfQ09NUElMRVJfT1BUSU9OXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9DT01QSUxFUl9PUFRJT05dLCBbXSkKKworCisjIF9MVF9MSU5LRVJfT1BUSU9OKE1FU1NBR0UsIFZBUklBQkxFLU5BTUUsIEZMQUdTLAorIyAgICAgICAgICAgICAgICAgIFtBQ1RJT04tU1VDQ0VTU10sIFtBQ1RJT04tRkFJTFVSRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgd2hldGhlciB0aGUgZ2l2ZW4gbGlua2VyIG9wdGlvbiB3b3JrcworQUNfREVGVU4oW19MVF9MSU5LRVJfT1BUSU9OXSwKK1ttNF9yZXF1aXJlKFtfTFRfRklMRVVUSUxTX0RFRkFVTFRTXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCitBQ19DQUNIRV9DSEVDSyhbJDFdLCBbJDJdLAorICBbJDI9bm8KKyAgIHNhdmVfTERGTEFHUz0iJExERkxBR1MiCisgICBMREZMQUdTPSIkTERGTEFHUyAkMyIKKyAgIGVjaG8gIiRsdF9zaW1wbGVfbGlua190ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorICAgaWYgKGV2YWwgJGFjX2xpbmsgMj5jb25mdGVzdC5lcnIpICYmIHRlc3QgLXMgY29uZnRlc3QkYWNfZXhlZXh0OyB0aGVuCisgICAgICMgVGhlIGxpbmtlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgaWYgdGVzdCAtcyBjb25mdGVzdC5lcnI7IHRoZW4KKyAgICAgICAjIEFwcGVuZCBhbnkgZXJyb3JzIHRvIHRoZSBjb25maWcubG9nLgorICAgICAgIGNhdCBjb25mdGVzdC5lcnIgMT4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgICAgICAkRUNITyAiJF9sdF9saW5rZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gY29uZnRlc3QuZXhwCisgICAgICAgJFNFRCAnL14kL2Q7IC9eICorL2QnIGNvbmZ0ZXN0LmVyciA+Y29uZnRlc3QuZXIyCisgICAgICAgaWYgZGlmZiBjb25mdGVzdC5leHAgY29uZnRlc3QuZXIyID4vZGV2L251bGw7IHRoZW4KKyAgICAgICAgICQyPXllcworICAgICAgIGZpCisgICAgIGVsc2UKKyAgICAgICAkMj15ZXMKKyAgICAgZmkKKyAgIGZpCisgICAkUk0gLXIgY29uZnRlc3QqCisgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIgorXSkKKworaWYgdGVzdCB4IlskXSQyIiA9IHh5ZXM7IHRoZW4KKyAgICBtNF9pZihbJDRdLCAsIDosIFskNF0pCitlbHNlCisgICAgbTRfaWYoWyQ1XSwgLCA6LCBbJDVdKQorZmkKK10pIyBfTFRfTElOS0VSX09QVElPTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtfTFRfTElOS0VSX09QVElPTl0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sIFtdKQorCisKKyMgTFRfQ01EX01BWF9MRU4KKyMtLS0tLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9DTURfTUFYX0xFTl0sCitbQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorIyBmaW5kIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBtYXhpbXVtIGxlbmd0aCBvZiBjb21tYW5kIGxpbmUgYXJndW1lbnRzXSkKK0FDX0NBQ0hFX1ZBTChbbHRfY3Zfc3lzX21heF9jbWRfbGVuXSwgW2RubAorICBpPTAKKyAgdGVzdHN0cmluZz0iQUJDRCIKKworICBjYXNlICRidWlsZF9vcyBpbgorICBtc2Rvc2RqZ3BwKikKKyAgICAjIE9uIERKR1BQLCB0aGlzIHRlc3QgY2FuIGJsb3cgdXAgcHJldHR5IGJhZGx5IGR1ZSB0byBwcm9ibGVtcyBpbiBsaWJjCisgICAgIyAoYW55IHNpbmdsZSBhcmd1bWVudCBleGNlZWRpbmcgMjAwMCBieXRlcyBjYXVzZXMgYSBidWZmZXIgb3ZlcnJ1bgorICAgICMgZHVyaW5nIGdsb2IgZXhwYW5zaW9uKS4gIEV2ZW4gaWYgaXQgd2VyZSBmaXhlZCwgdGhlIHJlc3VsdCBvZiB0aGlzCisgICAgIyBjaGVjayB3b3VsZCBiZSBsYXJnZXIgdGhhbiBpdCBzaG91bGQgYmUuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEyMjg4OyAgICAjIDEySyBpcyBhYm91dCByaWdodAorICAgIDs7CisKKyAgZ251KikKKyAgICAjIFVuZGVyIEdOVSBIdXJkLCB0aGlzIHRlc3QgaXMgbm90IHJlcXVpcmVkIGJlY2F1c2UgdGhlcmUgaXMKKyAgICAjIG5vIGxpbWl0IHRvIHRoZSBsZW5ndGggb2YgY29tbWFuZCBsaW5lIGFyZ3VtZW50cy4KKyAgICAjIExpYnRvb2wgd2lsbCBpbnRlcnByZXQgLTEgYXMgbm8gbGltaXQgd2hhdHNvZXZlcgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj0tMTsKKyAgICA7OworCisgIGN5Z3dpbiogfCBtaW5ndyogfCBjZWdjYyopCisgICAgIyBPbiBXaW45eC9NRSwgdGhpcyB0ZXN0IGJsb3dzIHVwIC0tIGl0IHN1Y2NlZWRzLCBidXQgdGFrZXMKKyAgICAjIGFib3V0IDUgbWludXRlcyBhcyB0aGUgdGVzdHN0cmluZyBncm93cyBleHBvbmVudGlhbGx5LgorICAgICMgV29yc2UsIHNpbmNlIDl4L01FIGFyZSBub3QgcHJlLWVtcHRpdmVseSBtdWx0aXRhc2tpbmcsCisgICAgIyB5b3UgZW5kIHVwIHdpdGggYSAiZnJvemVuIiBjb21wdXRlciwgZXZlbiB0aG91Z2ggd2l0aCBwYXRpZW5jZQorICAgICMgdGhlIHRlc3QgZXZlbnR1YWxseSBzdWNjZWVkcyAod2l0aCBhIG1heCBsaW5lIGxlbmd0aCBvZiAyNTZrKS4KKyAgICAjIEluc3RlYWQsIGxldCdzIGp1c3QgcHVudDogdXNlIHRoZSBtaW5pbXVtIGxpbmVsZW5ndGggcmVwb3J0ZWQgYnkKKyAgICAjIGFsbCBvZiB0aGUgc3VwcG9ydGVkIHBsYXRmb3JtczogODE5MiAob24gTlQvMksvWFApLgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgbWludCopCisgICAgIyBPbiBNaU5UIHRoaXMgY2FuIHRha2UgYSBsb25nIHRpbWUgYW5kIHJ1biBvdXQgb2YgbWVtb3J5LgorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj04MTkyOworICAgIDs7CisKKyAgYW1pZ2FvcyopCisgICAgIyBPbiBBbWlnYU9TIHdpdGggcGRrc2gsIHRoaXMgdGVzdCB0YWtlcyBob3VycywgbGl0ZXJhbGx5LgorICAgICMgU28gd2UganVzdCBwdW50IGFuZCB1c2UgYSBtaW5pbXVtIGxpbmUgbGVuZ3RoIG9mIDgxOTIuCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTgxOTI7CisgICAgOzsKKworICBuZXRic2QqIHwgZnJlZWJzZCogfCBvcGVuYnNkKiB8IGRhcndpbiogfCBkcmFnb25mbHkqKQorICAgICMgVGhpcyBoYXMgYmVlbiBhcm91bmQgc2luY2UgMzg2QlNELCBhdCBsZWFzdC4gIExpa2VseSBmdXJ0aGVyLgorICAgIGlmIHRlc3QgLXggL3NiaW4vc3lzY3RsOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YC9zYmluL3N5c2N0bCAtbiBrZXJuLmFyZ21heGAKKyAgICBlbGlmIHRlc3QgLXggL3Vzci9zYmluL3N5c2N0bDsgdGhlbgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWAvdXNyL3NiaW4vc3lzY3RsIC1uIGtlcm4uYXJnbWF4YAorICAgIGVsc2UKKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj02NTUzNgkjIHVzYWJsZSBkZWZhdWx0IGZvciBhbGwgQlNEcworICAgIGZpCisgICAgIyBBbmQgYWRkIGEgc2FmZXR5IHpvbmUKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwqIDNgCisgICAgOzsKKworICBpbnRlcml4KikKKyAgICAjIFdlIGtub3cgdGhlIHZhbHVlIDI2MjE0NCBhbmQgaGFyZGNvZGUgaXQgd2l0aCBhIHNhZmV0eSB6b25lIChsaWtlIEJTRCkKKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTk2NjA4CisgICAgOzsKKworICBvc2YqKQorICAgICMgRHIuIEhhbnMgRWtrZWhhcmQgUGxlc3NlciByZXBvcnRzIHNlZWluZyBhIGtlcm5lbCBwYW5pYyBydW5uaW5nIGNvbmZpZ3VyZQorICAgICMgZHVlIHRvIHRoaXMgdGVzdCB3aGVuIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXQgaXMgMSBvbiBUcnU2NC4gSXQgaXMgbm90CisgICAgIyBuaWNlIHRvIGNhdXNlIGtlcm5lbCBwYW5pY3Mgc28gbGV0cyBhdm9pZCB0aGUgbG9vcCBiZWxvdy4KKyAgICAjIEZpcnN0IHNldCBhIHJlYXNvbmFibGUgZGVmYXVsdC4KKyAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49MTYzODQKKyAgICAjCisgICAgaWYgdGVzdCAteCAvc2Jpbi9zeXNjb25maWc7IHRoZW4KKyAgICAgIGNhc2UgYC9zYmluL3N5c2NvbmZpZyAtcSBwcm9jIGV4ZWNfZGlzYWJsZV9hcmdfbGltaXRgIGluCisgICAgICAgICoxKikgbHRfY3Zfc3lzX21heF9jbWRfbGVuPS0xIDs7CisgICAgICBlc2FjCisgICAgZmkKKyAgICA7OworICBzY28zLjJ2NSopCisgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTEwMjQwMAorICAgIDs7CisgIHN5c3Y1KiB8IHNjbzV2NiogfCBzeXN2NC4ydXcyKikKKyAgICBrYXJnbWF4PWBncmVwIEFSR19NQVggL2V0Yy9jb25mL2NmLmQvc3R1bmUgMj4vZGV2L251bGxgCisgICAgaWYgdGVzdCAtbiAiJGthcmdtYXgiOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGVjaG8gJGthcmdtYXggfCBzZWQgJ3MvLipbWwkgXV0vLydgCisgICAgZWxzZQorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPTMyNzY4CisgICAgZmkKKyAgICA7OworICAqKQorICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gKGdldGNvbmYgQVJHX01BWCkgMj4gL2Rldi9udWxsYAorICAgIGlmIHRlc3QgLW4gIiRsdF9jdl9zeXNfbWF4X2NtZF9sZW4iOyB0aGVuCisgICAgICBsdF9jdl9zeXNfbWF4X2NtZF9sZW49YGV4cHIgJGx0X2N2X3N5c19tYXhfY21kX2xlbiBcLyA0YAorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICRsdF9jdl9zeXNfbWF4X2NtZF9sZW4gXCogM2AKKyAgICBlbHNlCisgICAgICAjIE1ha2UgdGVzdHN0cmluZyBhIGxpdHRsZSBiaWdnZXIgYmVmb3JlIHdlIGRvIGFueXRoaW5nIHdpdGggaXQuCisgICAgICAjIGEgMUsgc3RyaW5nIHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnQuCisgICAgICBmb3IgaSBpbiAxIDIgMyA0IDUgNiA3IDggOyBkbworICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgIFNIRUxMPSR7U0hFTEwtJHtDT05GSUdfU0hFTEwtL2Jpbi9zaH19CisgICAgICAjIElmIHRlc3QgaXMgbm90IGEgc2hlbGwgYnVpbHQtaW4sIHdlJ2xsIHByb2JhYmx5IGVuZCB1cCBjb21wdXRpbmcgYQorICAgICAgIyBtYXhpbXVtIGxlbmd0aCB0aGF0IGlzIG9ubHkgaGFsZiBvZiB0aGUgYWN0dWFsIG1heGltdW0gbGVuZ3RoLCBidXQKKyAgICAgICMgd2UgY2FuJ3QgdGVsbC4KKyAgICAgIHdoaWxlIHsgdGVzdCAiWCJgZnVuY19mYWxsYmFja19lY2hvICIkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIiAyPi9kZXYvbnVsbGAgXAorCSAgICAgICAgID0gIlgkdGVzdHN0cmluZyR0ZXN0c3RyaW5nIjsgfSA+L2Rldi9udWxsIDI+JjEgJiYKKwkgICAgICB0ZXN0ICRpICE9IDE3ICMgMS8yIE1CIHNob3VsZCBiZSBlbm91Z2gKKyAgICAgIGRvCisgICAgICAgIGk9YGV4cHIgJGkgKyAxYAorICAgICAgICB0ZXN0c3RyaW5nPSR0ZXN0c3RyaW5nJHRlc3RzdHJpbmcKKyAgICAgIGRvbmUKKyAgICAgICMgT25seSBjaGVjayB0aGUgc3RyaW5nIGxlbmd0aCBvdXRzaWRlIHRoZSBsb29wLgorICAgICAgbHRfY3Zfc3lzX21heF9jbWRfbGVuPWBleHByICJYJHRlc3RzdHJpbmciIDogIi4qIiAyPiYxYAorICAgICAgdGVzdHN0cmluZz0KKyAgICAgICMgQWRkIGEgc2lnbmlmaWNhbnQgc2FmZXR5IGZhY3RvciBiZWNhdXNlIEMrKyBjb21waWxlcnMgY2FuIHRhY2sgb24KKyAgICAgICMgbWFzc2l2ZSBhbW91bnRzIG9mIGFkZGl0aW9uYWwgYXJndW1lbnRzIGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gdGhlCisgICAgICAjIGxpbmtlci4gIEl0IGFwcGVhcnMgYXMgdGhvdWdoIDEvMiBpcyBhIHVzYWJsZSB2YWx1ZS4KKyAgICAgIGx0X2N2X3N5c19tYXhfY21kX2xlbj1gZXhwciAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIFwvIDJgCisgICAgZmkKKyAgICA7OworICBlc2FjCitdKQoraWYgdGVzdCAtbiAkbHRfY3Zfc3lzX21heF9jbWRfbGVuIDsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRsdF9jdl9zeXNfbWF4X2NtZF9sZW4pCitlbHNlCisgIEFDX01TR19SRVNVTFQobm9uZSkKK2ZpCittYXhfY21kX2xlbj0kbHRfY3Zfc3lzX21heF9jbWRfbGVuCitfTFRfREVDTChbXSwgW21heF9jbWRfbGVuXSwgWzBdLAorICAgIFtXaGF0IGlzIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiBhIGNvbW1hbmQ/XSkKK10pIyBMVF9DTURfTUFYX0xFTgorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0FDX0xJQlRPT0xfU1lTX01BWF9DTURfTEVOXSwgW0xUX0NNRF9NQVhfTEVOXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfTElCVE9PTF9TWVNfTUFYX0NNRF9MRU5dLCBbXSkKKworCisjIF9MVF9IRUFERVJfRExGQ04KKyMgLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9IRUFERVJfRExGQ05dLAorW0FDX0NIRUNLX0hFQURFUlMoW2RsZmNuLmhdLCBbXSwgW10sIFtBQ19JTkNMVURFU19ERUZBVUxUXSlkbmwKK10pIyBfTFRfSEVBREVSX0RMRkNOCisKKworIyBfTFRfVFJZX0RMT1BFTl9TRUxGIChBQ1RJT04tSUYtVFJVRSwgQUNUSU9OLUlGLVRSVUUtVy1VU0NPUkUsCisjICAgICAgICAgICAgICAgICAgICAgIEFDVElPTi1JRi1GQUxTRSwgQUNUSU9OLUlGLUNST1NTLUNPTVBJTElORykKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9UUllfRExPUEVOX1NFTEZdLAorW200X3JlcXVpcmUoW19MVF9IRUFERVJfRExGQ05dKWRubAoraWYgdGVzdCAiJGNyb3NzX2NvbXBpbGluZyIgPSB5ZXM7IHRoZW4gOgorICBbJDRdCitlbHNlCisgIGx0X2RsdW5rbm93bj0wOyBsdF9kbG5vX3VzY29yZT0xOyBsdF9kbG5lZWRfdXNjb3JlPTIKKyAgbHRfc3RhdHVzPSRsdF9kbHVua25vd24KKyAgY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK1sjbGluZSAkTElORU5PICJjb25maWd1cmUiCisjaW5jbHVkZSAiY29uZmRlZnMuaCIKKworI2lmIEhBVkVfRExGQ05fSAorI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZmRlZiBSVExEX0dMT0JBTAorIyAgZGVmaW5lIExUX0RMR0xPQkFMCQlSVExEX0dMT0JBTAorI2Vsc2UKKyMgIGlmZGVmIERMX0dMT0JBTAorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCURMX0dMT0JBTAorIyAgZWxzZQorIyAgICBkZWZpbmUgTFRfRExHTE9CQUwJCTAKKyMgIGVuZGlmCisjZW5kaWYKKworLyogV2UgbWF5IGhhdmUgdG8gZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cgaW4gdGhlIGNvbW1hbmQgbGluZSBpZiB3ZQorICAgZmluZCBvdXQgaXQgZG9lcyBub3Qgd29yayBpbiBzb21lIHBsYXRmb3JtLiAqLworI2lmbmRlZiBMVF9ETExBWllfT1JfTk9XCisjICBpZmRlZiBSVExEX0xBWlkKKyMgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCVJUTERfTEFaWQorIyAgZWxzZQorIyAgICBpZmRlZiBETF9MQVpZCisjICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJCURMX0xBWlkKKyMgICAgZWxzZQorIyAgICAgIGlmZGVmIFJUTERfTk9XCisjICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlSVExEX05PVworIyAgICAgIGVsc2UKKyMgICAgICAgIGlmZGVmIERMX05PVworIyAgICAgICAgICBkZWZpbmUgTFRfRExMQVpZX09SX05PVwlETF9OT1cKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgZGVmaW5lIExUX0RMTEFaWV9PUl9OT1cJMAorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorCisvKiBXaGVuIC1mdmlzYmlsaXR5PWhpZGRlbiBpcyB1c2VkLCBhc3N1bWUgdGhlIGNvZGUgaGFzIGJlZW4gYW5ub3RhdGVkCisgICBjb3JyZXNwb25kaW5nbHkgZm9yIHRoZSBzeW1ib2xzIG5lZWRlZC4gICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgKCgoX19HTlVDX18gPT0gMykgJiYgKF9fR05VQ19NSU5PUl9fID49IDMpKSB8fCAoX19HTlVDX18gPiAzKSkKK2ludCBmbm9yZCAoKSBfX2F0dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKTsKKyNlbmRpZgorCitpbnQgZm5vcmQgKCkgeyByZXR1cm4gNDI7IH0KK2ludCBtYWluICgpCit7CisgIHZvaWQgKnNlbGYgPSBkbG9wZW4gKDAsIExUX0RMR0xPQkFMfExUX0RMTEFaWV9PUl9OT1cpOworICBpbnQgc3RhdHVzID0gJGx0X2RsdW5rbm93bjsKKworICBpZiAoc2VsZikKKyAgICB7CisgICAgICBpZiAoZGxzeW0gKHNlbGYsImZub3JkIikpICAgICAgIHN0YXR1cyA9ICRsdF9kbG5vX3VzY29yZTsKKyAgICAgIGVsc2UKKyAgICAgICAgeworCSAgaWYgKGRsc3ltKCBzZWxmLCJfZm5vcmQiKSkgIHN0YXR1cyA9ICRsdF9kbG5lZWRfdXNjb3JlOworICAgICAgICAgIGVsc2UgcHV0cyAoZGxlcnJvciAoKSk7CisJfQorICAgICAgLyogZGxjbG9zZSAoc2VsZik7ICovCisgICAgfQorICBlbHNlCisgICAgcHV0cyAoZGxlcnJvciAoKSk7CisKKyAgcmV0dXJuIHN0YXR1czsKK31dCitfTFRfRU9GCisgIGlmIEFDX1RSWV9FVkFMKGFjX2xpbmspICYmIHRlc3QgLXMgY29uZnRlc3Qke2FjX2V4ZWV4dH0gMj4vZGV2L251bGw7IHRoZW4KKyAgICAoLi9jb25mdGVzdDsgZXhpdDsgKSA+JkFTX01FU1NBR0VfTE9HX0ZEIDI+L2Rldi9udWxsCisgICAgbHRfc3RhdHVzPSQ/CisgICAgY2FzZSB4JGx0X3N0YXR1cyBpbgorICAgICAgeCRsdF9kbG5vX3VzY29yZSkgJDEgOzsKKyAgICAgIHgkbHRfZGxuZWVkX3VzY29yZSkgJDIgOzsKKyAgICAgIHgkbHRfZGx1bmtub3dufHgqKSAkMyA7OworICAgIGVzYWMKKyAgZWxzZSA6CisgICAgIyBjb21waWxhdGlvbiBmYWlsZWQKKyAgICAkMworICBmaQorZmkKK3JtIC1mciBjb25mdGVzdCoKK10pIyBfTFRfVFJZX0RMT1BFTl9TRUxGCisKKworIyBMVF9TWVNfRExPUEVOX1NFTEYKKyMgLS0tLS0tLS0tLS0tLS0tLS0tCitBQ19ERUZVTihbTFRfU1lTX0RMT1BFTl9TRUxGXSwKK1ttNF9yZXF1aXJlKFtfTFRfSEVBREVSX0RMRkNOXSlkbmwKK2lmIHRlc3QgIngkZW5hYmxlX2Rsb3BlbiIgIT0geHllczsgdGhlbgorICBlbmFibGVfZGxvcGVuPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmPXVua25vd24KKyAgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duCitlbHNlCisgIGx0X2N2X2Rsb3Blbj1ubworICBsdF9jdl9kbG9wZW5fbGlicz0KKworICBjYXNlICRob3N0X29zIGluCisgIGJlb3MqKQorICAgIGx0X2N2X2Rsb3Blbj0ibG9hZF9hZGRfb24iCisgICAgbHRfY3ZfZGxvcGVuX2xpYnM9CisgICAgbHRfY3ZfZGxvcGVuX3NlbGY9eWVzCisgICAgOzsKKworICBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBsdF9jdl9kbG9wZW49IkxvYWRMaWJyYXJ5IgorICAgIGx0X2N2X2Rsb3Blbl9saWJzPQorICAgIDs7CisKKyAgY3lnd2luKikKKyAgICBsdF9jdl9kbG9wZW49ImRsb3BlbiIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICA7OworCisgIGRhcndpbiopCisgICMgaWYgbGliZGwgaXMgaW5zdGFsbGVkIHdlIG5lZWQgdG8gbGluayBhZ2FpbnN0IGl0CisgICAgQUNfQ0hFQ0tfTElCKFtkbF0sIFtkbG9wZW5dLAorCQlbbHRfY3ZfZGxvcGVuPSJkbG9wZW4iIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsIl0sWworICAgIGx0X2N2X2Rsb3Blbj0iZHlsZCIKKyAgICBsdF9jdl9kbG9wZW5fbGlicz0KKyAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMKKyAgICBdKQorICAgIDs7CisKKyAgKikKKyAgICBBQ19DSEVDS19GVU5DKFtzaGxfbG9hZF0sCisJICBbbHRfY3ZfZGxvcGVuPSJzaGxfbG9hZCJdLAorICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW3NobF9sb2FkXSwKKwkgICAgW2x0X2N2X2Rsb3Blbj0ic2hsX2xvYWQiIGx0X2N2X2Rsb3Blbl9saWJzPSItbGRsZCJdLAorCVtBQ19DSEVDS19GVU5DKFtkbG9wZW5dLAorCSAgICAgIFtsdF9jdl9kbG9wZW49ImRsb3BlbiJdLAorCSAgW0FDX0NIRUNLX0xJQihbZGxdLCBbZGxvcGVuXSwKKwkJW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbCJdLAorCSAgICBbQUNfQ0hFQ0tfTElCKFtzdmxkXSwgW2Rsb3Blbl0sCisJCSAgW2x0X2N2X2Rsb3Blbj0iZGxvcGVuIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxzdmxkIl0sCisJICAgICAgW0FDX0NIRUNLX0xJQihbZGxkXSwgW2RsZF9saW5rXSwKKwkJICAgIFtsdF9jdl9kbG9wZW49ImRsZF9saW5rIiBsdF9jdl9kbG9wZW5fbGlicz0iLWxkbGQiXSkKKwkgICAgICBdKQorCSAgICBdKQorCSAgXSkKKwldKQorICAgICAgXSkKKyAgICA7OworICBlc2FjCisKKyAgaWYgdGVzdCAieCRsdF9jdl9kbG9wZW4iICE9IHhubzsgdGhlbgorICAgIGVuYWJsZV9kbG9wZW49eWVzCisgIGVsc2UKKyAgICBlbmFibGVfZGxvcGVuPW5vCisgIGZpCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuIGluCisgIGRsb3BlbikKKyAgICBzYXZlX0NQUEZMQUdTPSIkQ1BQRkxBR1MiCisgICAgdGVzdCAieCRhY19jdl9oZWFkZXJfZGxmY25faCIgPSB4eWVzICYmIENQUEZMQUdTPSIkQ1BQRkxBR1MgLURIQVZFX0RMRkNOX0giCisKKyAgICBzYXZlX0xERkxBR1M9IiRMREZMQUdTIgorICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjXCIKKworICAgIHNhdmVfTElCUz0iJExJQlMiCisgICAgTElCUz0iJGx0X2N2X2Rsb3Blbl9saWJzICRMSUJTIgorCisgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmLCBbZG5sCisJICBfTFRfVFJZX0RMT1BFTl9TRUxGKAorCSAgICBsdF9jdl9kbG9wZW5fc2VsZj15ZXMsIGx0X2N2X2Rsb3Blbl9zZWxmPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGY9bm8sIGx0X2N2X2Rsb3Blbl9zZWxmPWNyb3NzKQorICAgIF0pCisKKyAgICBpZiB0ZXN0ICJ4JGx0X2N2X2Rsb3Blbl9zZWxmIiA9IHh5ZXM7IHRoZW4KKyAgICAgIHdsPSRsdF9wcm9nX2NvbXBpbGVyX3dsIGV2YWwgTERGTEFHUz1cIlwkTERGTEFHUyAkbHRfcHJvZ19jb21waWxlcl9zdGF0aWNcIgorICAgICAgQUNfQ0FDSEVfQ0hFQ0soW3doZXRoZXIgYSBzdGF0aWNhbGx5IGxpbmtlZCBwcm9ncmFtIGNhbiBkbG9wZW4gaXRzZWxmXSwKKwkgIGx0X2N2X2Rsb3Blbl9zZWxmX3N0YXRpYywgW2RubAorCSAgX0xUX1RSWV9ETE9QRU5fU0VMRigKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPXllcywKKwkgICAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPW5vLCAgbHRfY3ZfZGxvcGVuX3NlbGZfc3RhdGljPWNyb3NzKQorICAgICAgXSkKKyAgICBmaQorCisgICAgQ1BQRkxBR1M9IiRzYXZlX0NQUEZMQUdTIgorICAgIExERkxBR1M9IiRzYXZlX0xERkxBR1MiCisgICAgTElCUz0iJHNhdmVfTElCUyIKKyAgICA7OworICBlc2FjCisKKyAgY2FzZSAkbHRfY3ZfZGxvcGVuX3NlbGYgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGY9JGx0X2N2X2Rsb3Blbl9zZWxmIDs7CisgICopIGVuYWJsZV9kbG9wZW5fc2VsZj11bmtub3duIDs7CisgIGVzYWMKKworICBjYXNlICRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgaW4KKyAgeWVzfG5vKSBlbmFibGVfZGxvcGVuX3NlbGZfc3RhdGljPSRsdF9jdl9kbG9wZW5fc2VsZl9zdGF0aWMgOzsKKyAgKikgZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpYz11bmtub3duIDs7CisgIGVzYWMKK2ZpCitfTFRfREVDTChbZGxvcGVuX3N1cHBvcnRdLCBbZW5hYmxlX2Rsb3Blbl0sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIGlzIHN1cHBvcnRlZF0pCitfTFRfREVDTChbZGxvcGVuX3NlbGZdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmXSwgWzBdLAorCSBbV2hldGhlciBkbG9wZW4gb2YgcHJvZ3JhbXMgaXMgc3VwcG9ydGVkXSkKK19MVF9ERUNMKFtkbG9wZW5fc2VsZl9zdGF0aWNdLCBbZW5hYmxlX2Rsb3Blbl9zZWxmX3N0YXRpY10sIFswXSwKKwkgW1doZXRoZXIgZGxvcGVuIG9mIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zIGlzIHN1cHBvcnRlZF0pCitdKSMgTFRfU1lTX0RMT1BFTl9TRUxGCisKKyMgT2xkIG5hbWU6CitBVV9BTElBUyhbQUNfTElCVE9PTF9ETE9QRU5fU0VMRl0sIFtMVF9TWVNfRExPUEVOX1NFTEZdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX0RMT1BFTl9TRUxGXSwgW10pCisKKworIyBfTFRfQ09NUElMRVJfQ19PKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIHRvIHNlZSBpZiBvcHRpb25zIC1jIGFuZCAtbyBhcmUgc2ltdWx0YW5lb3VzbHkgc3VwcG9ydGVkIGJ5IGNvbXBpbGVyLgorIyBUaGlzIG1hY3JvIGRvZXMgbm90IGhhcmQgY29kZSB0aGUgY29tcGlsZXIgbGlrZSBBQ19QUk9HX0NDX0NfTy4KK200X2RlZnVuKFtfTFRfQ09NUElMRVJfQ19PXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0ZJTEVVVElMU19ERUZBVUxUU10pZG5sCittNF9yZXF1aXJlKFtfTFRfVEFHX0NPTVBJTEVSXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtpZiAkY29tcGlsZXIgc3VwcG9ydHMgLWMgLW8gZmlsZS4kYWNfb2JqZXh0XSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9jX28sICQxKV0sCisgIFtfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9bm8KKyAgICRSTSAtciBjb25mdGVzdCAyPi9kZXYvbnVsbAorICAgbWtkaXIgY29uZnRlc3QKKyAgIGNkIGNvbmZ0ZXN0CisgICBta2RpciBvdXQKKyAgIGVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisgICBsdF9jb21waWxlcl9mbGFnPSItbyBvdXQvY29uZnRlc3QyLiRhY19vYmpleHQiCisgICAjIEluc2VydCB0aGUgb3B0aW9uIGVpdGhlciAoMSkgYWZ0ZXIgdGhlIGxhc3QgKkZMQUdTIHZhcmlhYmxlLCBvcgorICAgIyAoMikgYmVmb3JlIGEgd29yZCBjb250YWluaW5nICJjb25mdGVzdC4iLCBvciAoMykgYXQgdGhlIGVuZC4KKyAgICMgTm90ZSB0aGF0ICRhY19jb21waWxlIGl0c2VsZiBkb2VzIG5vdCBjb250YWluIGJhY2tzbGFzaGVzIGFuZCBiZWdpbnMKKyAgICMgd2l0aCBhIGRvbGxhciBzaWduIChub3QgYSBoeXBoZW4pLCBzbyB0aGUgZWNobyBzaG91bGQgd29yayBjb3JyZWN0bHkuCisgICBsdF9jb21waWxlPWBlY2hvICIkYWNfY29tcGlsZSIgfCAkU0VEIFwKKyAgIC1lICdzOi4qRkxBR1N9XHswLDFcfSA6JiRsdF9jb21waWxlcl9mbGFnIDo7IHQnIFwKKyAgIC1lICdzOiBbW14gXV0qY29uZnRlc3RcLjogJGx0X2NvbXBpbGVyX2ZsYWcmOjsgdCcgXAorICAgLWUgJ3M6JDogJGx0X2NvbXBpbGVyX2ZsYWc6J2AKKyAgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkbHRfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAgKGV2YWwgIiRsdF9jb21waWxlIiAyPm91dC9jb25mdGVzdC5lcnIpCisgICBhY19zdGF0dXM9JD8KKyAgIGNhdCBvdXQvY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgIGVjaG8gIiRhc19tZTokTElORU5POiBcJD8gPSAkYWNfc3RhdHVzIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICBpZiAoZXhpdCAkYWNfc3RhdHVzKSAmJiB0ZXN0IC1zIG91dC9jb25mdGVzdDIuJGFjX29iamV4dAorICAgdGhlbgorICAgICAjIFRoZSBjb21waWxlciBjYW4gb25seSB3YXJuIGFuZCBpZ25vcmUgdGhlIG9wdGlvbiBpZiBub3QgcmVjb2duaXplZAorICAgICAjIFNvIHNheSBubyBpZiB0aGVyZSBhcmUgd2FybmluZ3MKKyAgICAgJEVDSE8gIiRfbHRfY29tcGlsZXJfYm9pbGVycGxhdGUiIHwgJFNFRCAnL14kL2QnID4gb3V0L2NvbmZ0ZXN0LmV4cAorICAgICAkU0VEICcvXiQvZDsgL14gKisvZCcgb3V0L2NvbmZ0ZXN0LmVyciA+b3V0L2NvbmZ0ZXN0LmVyMgorICAgICBpZiB0ZXN0ICEgLXMgb3V0L2NvbmZ0ZXN0LmVyMiB8fCBkaWZmIG91dC9jb25mdGVzdC5leHAgb3V0L2NvbmZ0ZXN0LmVyMiA+L2Rldi9udWxsOyB0aGVuCisgICAgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpPXllcworICAgICBmaQorICAgZmkKKyAgIGNobW9kIHUrdyAuIDI+JkFTX01FU1NBR0VfTE9HX0ZECisgICAkUk0gY29uZnRlc3QqCisgICAjIFNHSSBDKysgY29tcGlsZXIgd2lsbCBjcmVhdGUgZGlyZWN0b3J5IG91dC9paV9maWxlcy8gZm9yCisgICAjIHRlbXBsYXRlIGluc3RhbnRpYXRpb24KKyAgIHRlc3QgLWQgb3V0L2lpX2ZpbGVzICYmICRSTSBvdXQvaWlfZmlsZXMvKiAmJiBybWRpciBvdXQvaWlfZmlsZXMKKyAgICRSTSBvdXQvKiAmJiBybWRpciBvdXQKKyAgIGNkIC4uCisgICAkUk0gLXIgY29uZnRlc3QKKyAgICRSTSBjb25mdGVzdCoKK10pCitfTFRfVEFHREVDTChbY29tcGlsZXJfY19vXSwgW2x0X2N2X3Byb2dfY29tcGlsZXJfY19vXSwgWzFdLAorCVtEb2VzIGNvbXBpbGVyIHNpbXVsdGFuZW91c2x5IHN1cHBvcnQgLWMgYW5kIC1vIG9wdGlvbnM/XSkKK10pIyBfTFRfQ09NUElMRVJfQ19PCisKKworIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgdG8gc2VlIGlmIHdlIGNhbiBkbyBoYXJkIGxpbmtzIHRvIGxvY2sgc29tZSBmaWxlcyBpZiBuZWVkZWQKK200X2RlZnVuKFtfTFRfQ09NUElMRVJfRklMRV9MT0NLU10sCitbbTRfcmVxdWlyZShbX0xUX0VOQUJMRV9MT0NLXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorX0xUX0NPTVBJTEVSX0NfTyhbJDFdKQorCitoYXJkX2xpbmtzPSJub3R0ZXN0ZWQiCitpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX2NfbywgJDEpIiA9IG5vICYmIHRlc3QgIiRuZWVkX2xvY2tzIiAhPSBubzsgdGhlbgorICAjIGRvIG5vdCBvdmVyd3JpdGUgdGhlIHZhbHVlIG9mIG5lZWRfbG9ja3MgcHJvdmlkZWQgYnkgdGhlIHVzZXIKKyAgQUNfTVNHX0NIRUNLSU5HKFtpZiB3ZSBjYW4gbG9jayB3aXRoIGhhcmQgbGlua3NdKQorICBoYXJkX2xpbmtzPXllcworICAkUk0gY29uZnRlc3QqCisgIGxuIGNvbmZ0ZXN0LmEgY29uZnRlc3QuYiAyPi9kZXYvbnVsbCAmJiBoYXJkX2xpbmtzPW5vCisgIHRvdWNoIGNvbmZ0ZXN0LmEKKyAgbG4gY29uZnRlc3QuYSBjb25mdGVzdC5iIDI+JjUgfHwgaGFyZF9saW5rcz1ubworICBsbiBjb25mdGVzdC5hIGNvbmZ0ZXN0LmIgMj4vZGV2L251bGwgJiYgaGFyZF9saW5rcz1ubworICBBQ19NU0dfUkVTVUxUKFskaGFyZF9saW5rc10pCisgIGlmIHRlc3QgIiRoYXJkX2xpbmtzIiA9IG5vOyB0aGVuCisgICAgQUNfTVNHX1dBUk4oW2AkQ0MnIGRvZXMgbm90IHN1cHBvcnQgYC1jIC1vJywgc28gYG1ha2UgLWonIG1heSBiZSB1bnNhZmVdKQorICAgIG5lZWRfbG9ja3M9d2FybgorICBmaQorZWxzZQorICBuZWVkX2xvY2tzPW5vCitmaQorX0xUX0RFQ0woW10sIFtuZWVkX2xvY2tzXSwgWzFdLCBbTXVzdCB3ZSBsb2NrIGZpbGVzIHdoZW4gZG9pbmcgY29tcGlsYXRpb24/XSkKK10pIyBfTFRfQ09NUElMRVJfRklMRV9MT0NLUworCisKKyMgX0xUX0NIRUNLX09CSkRJUgorIyAtLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NIRUNLX09CSkRJUl0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciBvYmpkaXJdLCBbbHRfY3Zfb2JqZGlyXSwKK1tybSAtZiAubGlicyAyPi9kZXYvbnVsbAorbWtkaXIgLmxpYnMgMj4vZGV2L251bGwKK2lmIHRlc3QgLWQgLmxpYnM7IHRoZW4KKyAgbHRfY3Zfb2JqZGlyPS5saWJzCitlbHNlCisgICMgTVMtRE9TIGRvZXMgbm90IGFsbG93IGZpbGVuYW1lcyB0aGF0IGJlZ2luIHdpdGggYSBkb3QuCisgIGx0X2N2X29iamRpcj1fbGlicworZmkKK3JtZGlyIC5saWJzIDI+L2Rldi9udWxsXSkKK29iamRpcj0kbHRfY3Zfb2JqZGlyCitfTFRfREVDTChbXSwgW29iamRpcl0sIFswXSwKKyAgICAgICAgIFtUaGUgbmFtZSBvZiB0aGUgZGlyZWN0b3J5IHRoYXQgY29udGFpbnMgdGVtcG9yYXJ5IGxpYnRvb2wgZmlsZXNdKWRubAorbTRfcGF0dGVybl9hbGxvdyhbTFRfT0JKRElSXSlkbmwKK0FDX0RFRklORV9VTlFVT1RFRChMVF9PQkpESVIsICIkbHRfY3Zfb2JqZGlyLyIsCisgIFtEZWZpbmUgdG8gdGhlIHN1Yi1kaXJlY3RvcnkgaW4gd2hpY2ggbGlidG9vbCBzdG9yZXMgdW5pbnN0YWxsZWQgbGlicmFyaWVzLl0pCitdKSMgX0xUX0NIRUNLX09CSkRJUgorCisKKyMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKFtUQUdOQU1FXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgQ2hlY2sgaGFyZGNvZGluZyBhdHRyaWJ1dGVzLgorbTRfZGVmdW4oW19MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSF0sCitbQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gaGFyZGNvZGUgbGlicmFyeSBwYXRocyBpbnRvIHByb2dyYW1zXSkKK19MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9CitpZiB0ZXN0IC1uICIkX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkiIHx8CisgICB0ZXN0IC1uICIkX0xUX1RBR1ZBUihydW5wYXRoX3ZhciwgJDEpIiB8fAorICAgdGVzdCAiWCRfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpIiA9ICJYeWVzIiA7IHRoZW4KKworICAjIFdlIGNhbiBoYXJkY29kZSBub24tZXhpc3RlbnQgZGlyZWN0b3JpZXMuCisgIGlmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpIiAhPSBubyAmJgorICAgICAjIElmIHRoZSBvbmx5IG1lY2hhbmlzbSB0byBhdm9pZCBoYXJkY29kaW5nIGlzIHNobGlicGF0aF92YXIsIHdlCisgICAgICMgaGF2ZSB0byByZWxpbmssIG90aGVyd2lzZSB3ZSBtaWdodCBsaW5rIHdpdGggYW4gaW5zdGFsbGVkIGxpYnJhcnkKKyAgICAgIyB3aGVuIHdlIHNob3VsZCBiZSBsaW5raW5nIHdpdGggYSB5ZXQtdG8tYmUtaW5zdGFsbGVkIG9uZQorICAgICAjIyB0ZXN0ICIkX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSkiICE9IG5vICYmCisgICAgIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKSIgIT0gbm87IHRoZW4KKyAgICAjIExpbmtpbmcgYWx3YXlzIGhhcmRjb2RlcyB0aGUgdGVtcG9yYXJ5IGxpYnJhcnkgZGlyZWN0b3J5LgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9cmVsaW5rCisgIGVsc2UKKyAgICAjIFdlIGNhbiBsaW5rIHdpdGhvdXQgaGFyZGNvZGluZywgYW5kIHdlIGNhbiBoYXJkY29kZSBub25leGlzdGluZyBkaXJzLgorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9aW1tZWRpYXRlCisgIGZpCitlbHNlCisgICMgV2UgY2Fubm90IGhhcmRjb2RlIGFueXRoaW5nLCBvciBlbHNlIHdlIGNhbiBvbmx5IGhhcmRjb2RlIGV4aXN0aW5nCisgICMgZGlyZWN0b3JpZXMuCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfYWN0aW9uLCAkMSk9dW5zdXBwb3J0ZWQKK2ZpCitBQ19NU0dfUkVTVUxUKFskX0xUX1RBR1ZBUihoYXJkY29kZV9hY3Rpb24sICQxKV0pCisKK2lmIHRlc3QgIiRfTFRfVEFHVkFSKGhhcmRjb2RlX2FjdGlvbiwgJDEpIiA9IHJlbGluayB8fAorICAgdGVzdCAiJF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpIiA9IHllczsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBzdXBwb3J0ZWQKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworZWxpZiB0ZXN0ICIkc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoIiA9IHllcyB8fAorICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSBubzsgdGhlbgorICAjIEZhc3QgaW5zdGFsbGF0aW9uIGlzIG5vdCBuZWNlc3NhcnkKKyAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1uZWVkbGVzcworZmkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYWN0aW9uXSwgWzBdLAorICAgIFtIb3cgdG8gaGFyZGNvZGUgYSBzaGFyZWQgbGlicmFyeSBwYXRoIGludG8gYW4gZXhlY3V0YWJsZV0pCitdKSMgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRICisKKworIyBfTFRfQ01EX1NUUklQTElCCisjIC0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX1NUUklQTElCXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCitzdHJpcGxpYj0KK29sZF9zdHJpcGxpYj0KK0FDX01TR19DSEVDS0lORyhbd2hldGhlciBzdHJpcHBpbmcgbGlicmFyaWVzIGlzIHBvc3NpYmxlXSkKK2lmIHRlc3QgLW4gIiRTVFJJUCIgJiYgJFNUUklQIC1WIDI+JjEgfCAkR1JFUCAiR05VIHN0cmlwIiA+L2Rldi9udWxsOyB0aGVuCisgIHRlc3QgLXogIiRvbGRfc3RyaXBsaWIiICYmIG9sZF9zdHJpcGxpYj0iJFNUUklQIC0tc3RyaXAtZGVidWciCisgIHRlc3QgLXogIiRzdHJpcGxpYiIgJiYgc3RyaXBsaWI9IiRTVFJJUCAtLXN0cmlwLXVubmVlZGVkIgorICBBQ19NU0dfUkVTVUxUKFt5ZXNdKQorZWxzZQorIyBGSVhNRSAtIGluc2VydCBzb21lIHJlYWwgdGVzdHMsIGhvc3Rfb3MgaXNuJ3QgcmVhbGx5IGdvb2QgZW5vdWdoCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZGFyd2luKikKKyAgICBpZiB0ZXN0IC1uICIkU1RSSVAiIDsgdGhlbgorICAgICAgc3RyaXBsaWI9IiRTVFJJUCAteCIKKyAgICAgIG9sZF9zdHJpcGxpYj0iJFNUUklQIC1TIgorICAgICAgQUNfTVNHX1JFU1VMVChbeWVzXSkKKyAgICBlbHNlCisgICAgICBBQ19NU0dfUkVTVUxUKFtub10pCisgICAgZmkKKyAgICA7OworICAqKQorICAgIEFDX01TR19SRVNVTFQoW25vXSkKKyAgICA7OworICBlc2FjCitmaQorX0xUX0RFQ0woW10sIFtvbGRfc3RyaXBsaWJdLCBbMV0sIFtDb21tYW5kcyB0byBzdHJpcCBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzdHJpcGxpYl0sIFsxXSkKK10pIyBfTFRfQ01EX1NUUklQTElCCisKKworIyBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBQT1JUTUUgRmlsbCBpbiB5b3VyIGxkLnNvIGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9TWVNfRFlOQU1JQ19MSU5LRVJdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX0VHUkVQXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTXSlkbmwKK0FDX01TR19DSEVDS0lORyhbZHluYW1pYyBsaW5rZXIgY2hhcmFjdGVyaXN0aWNzXSkKK200X2lmKFskMV0sCisJW10sIFsKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICBkYXJ3aW4qKSBsdF9hd2tfYXJnPSIvXmxpYnJhcmllczovLC9MUi8iIDs7CisgICAgKikgbHRfYXdrX2FyZz0iL15saWJyYXJpZXM6LyIgOzsKKyAgZXNhYworICBjYXNlICRob3N0X29zIGluCisgICAgbWluZ3cqIHwgY2VnY2MqKSBsdF9zZWRfc3RyaXBfZXE9InMsPVwoW1tBLVphLXpdXTpcKSxcMSxnIiA7OworICAgICopIGx0X3NlZF9zdHJpcF9lcT0icyw9LywvLGciIDs7CisgIGVzYWMKKyAgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJENDIC1wcmludC1zZWFyY2gtZGlycyB8IGF3ayAkbHRfYXdrX2FyZyB8ICRTRUQgLWUgInMvXmxpYnJhcmllczovLyIgLWUgJGx0X3NlZF9zdHJpcF9lcWAKKyAgY2FzZSAkbHRfc2VhcmNoX3BhdGhfc3BlYyBpbgorICAqXDsqKQorICAgICMgaWYgdGhlIHBhdGggY29udGFpbnMgIjsiIHRoZW4gd2UgYXNzdW1lIGl0IHRvIGJlIHRoZSBzZXBhcmF0b3IKKyAgICAjIG90aGVyd2lzZSBkZWZhdWx0IHRvIHRoZSBzdGFuZGFyZCBwYXRoIHNlcGFyYXRvciAoaS5lLiAiOiIpIC0gaXQgaXMKKyAgICAjIGFzc3VtZWQgdGhhdCBubyBwYXJ0IG9mIGEgbm9ybWFsIHBhdGhuYW1lIGNvbnRhaW5zICI7IiBidXQgdGhhdCBzaG91bGQKKyAgICAjIG9rYXkgaW4gdGhlIHJlYWwgd29ybGQgd2hlcmUgIjsiIGluIGRpcnBhdGhzIGlzIGl0c2VsZiBwcm9ibGVtYXRpYy4KKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAncy87LyAvZydgCisgICAgOzsKKyAgKikKKyAgICBsdF9zZWFyY2hfcGF0aF9zcGVjPWAkRUNITyAiJGx0X3NlYXJjaF9wYXRoX3NwZWMiIHwgJFNFRCAicy8kUEFUSF9TRVBBUkFUT1IvIC9nImAKKyAgICA7OworICBlc2FjCisgICMgT2ssIG5vdyB3ZSBoYXZlIHRoZSBwYXRoLCBzZXBhcmF0ZWQgYnkgc3BhY2VzLCB3ZSBjYW4gc3RlcCB0aHJvdWdoIGl0CisgICMgYW5kIGFkZCBtdWx0aWxpYiBkaXIgaWYgbmVjZXNzYXJ5LgorICBsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0KKyAgbHRfbXVsdGlfb3NfZGlyPWAkQ0MgJENQUEZMQUdTICRDRkxBR1MgJExERkxBR1MgLXByaW50LW11bHRpLW9zLWRpcmVjdG9yeSAyPi9kZXYvbnVsbGAKKyAgZm9yIGx0X3N5c19wYXRoIGluICRsdF9zZWFyY2hfcGF0aF9zcGVjOyBkbworICAgIGlmIHRlc3QgLWQgIiRsdF9zeXNfcGF0aC8kbHRfbXVsdGlfb3NfZGlyIjsgdGhlbgorICAgICAgbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWM9IiRsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYyAkbHRfc3lzX3BhdGgvJGx0X211bHRpX29zX2RpciIKKyAgICBlbHNlCisgICAgICB0ZXN0IC1kICIkbHRfc3lzX3BhdGgiICYmIFwKKwlsdF90bXBfbHRfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X3RtcF9sdF9zZWFyY2hfcGF0aF9zcGVjICRsdF9zeXNfcGF0aCIKKyAgICBmaQorICBkb25lCisgIGx0X3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkbHRfdG1wX2x0X3NlYXJjaF9wYXRoX3NwZWMiIHwgYXdrICcKK0JFR0lOIHtSUz0iICI7IEZTPSIvfFxuIjt9IHsKKyAgbHRfZm9vPSIiOworICBsdF9jb3VudD0wOworICBmb3IgKGx0X2kgPSBORjsgbHRfaSA+IDA7IGx0X2ktLSkgeworICAgIGlmICgkbHRfaSAhPSAiIiAmJiAkbHRfaSAhPSAiLiIpIHsKKyAgICAgIGlmICgkbHRfaSA9PSAiLi4iKSB7CisgICAgICAgIGx0X2NvdW50Kys7CisgICAgICB9IGVsc2UgeworICAgICAgICBpZiAobHRfY291bnQgPT0gMCkgeworICAgICAgICAgIGx0X2Zvbz0iLyIgJGx0X2kgbHRfZm9vOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGx0X2NvdW50LS07CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0KKyAgaWYgKGx0X2ZvbyAhPSAiIikgeyBsdF9mcmVxW1tsdF9mb29dXSsrOyB9CisgIGlmIChsdF9mcmVxW1tsdF9mb29dXSA9PSAxKSB7IHByaW50IGx0X2ZvbzsgfQorfSdgCisgICMgQVdLIHByb2dyYW0gYWJvdmUgZXJyb25lb3VzbHkgcHJlcGVuZHMgJy8nIHRvIEM6L2Rvcy9wYXRocworICAjIGZvciB0aGVzZSBob3N0cy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG1pbmd3KiB8IGNlZ2NjKikgbHRfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8XAorICAgICAgJFNFRCAncywvXChbW0EtWmEtel1dOlwpLFwxLGcnYCA7OworICBlc2FjCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gJEVDSE8gIiRsdF9zZWFyY2hfcGF0aF9zcGVjIiB8ICRsdF9OTDJTUGAKK2Vsc2UKKyAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIvbGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorZmldKQorbGlicmFyeV9uYW1lc19zcGVjPQorbGlibmFtZV9zcGVjPSdsaWIkbmFtZScKK3NvbmFtZV9zcGVjPQorc2hyZXh0X2NtZHM9Ii5zbyIKK3Bvc3RpbnN0YWxsX2NtZHM9Citwb3N0dW5pbnN0YWxsX2NtZHM9CitmaW5pc2hfY21kcz0KK2ZpbmlzaF9ldmFsPQorc2hsaWJwYXRoX3Zhcj0KK3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD11bmtub3duCit2ZXJzaW9uX3R5cGU9bm9uZQorZHluYW1pY19saW5rZXI9IiRob3N0X29zIGxkLnNvIgorc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Ii9saWIgL3Vzci9saWIiCituZWVkX2xpYl9wcmVmaXg9dW5rbm93bgoraGFyZGNvZGVfaW50b19saWJzPW5vCisKKyMgd2hlbiB5b3Ugc2V0IG5lZWRfdmVyc2lvbiB0byBubywgbWFrZSBzdXJlIGl0IGRvZXMgbm90IGNhdXNlIC1zZXRfdmVyc2lvbgorIyBmbGFncyB0byBiZSBsZWZ0IHdpdGhvdXQgYXJndW1lbnRzCituZWVkX3ZlcnNpb249dW5rbm93bgorCitjYXNlICRob3N0X29zIGluCithaXgzKikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZS5hJworICBzaGxpYnBhdGhfdmFyPUxJQlBBVEgKKworICAjIEFJWCAzIGhhcyBubyB2ZXJzaW9uaW5nIHN1cHBvcnQsIHNvIHdlIGFwcGVuZCBhIG1ham9yIHZlcnNpb24gdG8gdGhlIG5hbWUuCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIDs7CisKK2FpeFtbNC05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisgICAgIyBBSVggNSBzdXBwb3J0cyBJQTY0CisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgZWxzZQorICAgICMgV2l0aCBHQ0MgdXAgdG8gMi45NS54LCBjb2xsZWN0MiB3b3VsZCBjcmVhdGUgYW4gaW1wb3J0IGZpbGUKKyAgICAjIGZvciBkZXBlbmRlbmNlIGxpYnJhcmllcy4gIFRoZSBpbXBvcnQgZmlsZSB3b3VsZCBzdGFydCB3aXRoCisgICAgIyB0aGUgbGluZSBgIyEgLicuICBUaGlzIHdvdWxkIGNhdXNlIHRoZSBnZW5lcmF0ZWQgbGlicmFyeSB0bworICAgICMgZGVwZW5kIG9uIGAuJywgYWx3YXlzIGFuIGludmFsaWQgbGlicmFyeS4gIFRoaXMgd2FzIGZpeGVkIGluCisgICAgIyBkZXZlbG9wbWVudCBzbmFwc2hvdHMgb2YgR0NDIHByaW9yIHRvIDMuMC4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXg0IHwgYWl4NC5bWzAxXV0gfCBhaXg0LltbMDFdXS4qKQorICAgICAgaWYgeyBlY2hvICcjaWYgX19HTlVDX18gPiAyIHx8IChfX0dOVUNfXyA9PSAyICYmIF9fR05VQ19NSU5PUl9fID49IDk3KScKKwkgICBlY2hvICcgeWVzICcKKwkgICBlY2hvICcjZW5kaWYnOyB9IHwgJHtDQ30gLUUgLSB8ICRHUkVQIHllcyA+IC9kZXYvbnVsbDsgdGhlbgorCToKKyAgICAgIGVsc2UKKwljYW5fYnVpbGRfc2hhcmVkPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisgICAgIyBBSVggKG9uIFBvd2VyKikgaGFzIG5vIHZlcnNpb25pbmcgc3VwcG9ydCwgc28gY3VycmVudGx5IHdlIGNhbiBub3QgaGFyZGNvZGUgY29ycmVjdAorICAgICMgc29uYW1lIGludG8gZXhlY3V0YWJsZS4gUHJvYmFibHkgd2UgY2FuIGFkZCB2ZXJzaW9uaW5nIHN1cHBvcnQgdG8KKyAgICAjIGNvbGxlY3QyLCBzbyBhZGRpdGlvbmFsIGxpbmtzIGNhbiBiZSB1c2VmdWwgaW4gZnV0dXJlLgorICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorICAgICAgIyBJZiB1c2luZyBydW4gdGltZSBsaW5raW5nIChvbiBBSVggNC4yIG9yIGxhdGVyKSB1c2UgbGliPG5hbWU+LnNvCisgICAgICAjIGluc3RlYWQgb2YgbGliPG5hbWU+LmEgdG8gbGV0IHBlb3BsZSBrbm93IHRoYXQgdGhlc2UgYXJlIG5vdAorICAgICAgIyB0eXBpY2FsIEFJWCBzaGFyZWQgbGlicmFyaWVzLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgZWxzZQorICAgICAgIyBXZSBwcmVzZXJ2ZSAuYSBhcyBleHRlbnNpb24gZm9yIHNoYXJlZCBsaWJyYXJpZXMgdGhyb3VnaCBBSVg0LjIKKyAgICAgICMgYW5kIGxhdGVyIHdoZW4gd2UgYXJlIG5vdCBkb2luZyBydW4gdGltZSBsaW5raW5nLgorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfS5hICRsaWJuYW1lLmEnCisgICAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGZpCisgICAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIGZpCisgIDs7CisKK2FtaWdhb3MqKQorICBjYXNlICRob3N0X2NwdSBpbgorICBwb3dlcnBjKQorICAgICMgU2luY2UgSnVseSAyMDA3IEFtaWdhT1M0IG9mZmljaWFsbHkgc3VwcG9ydHMgLnNvIGxpYnJhcmllcy4KKyAgICAjIFdoZW4gY29tcGlsaW5nIHRoZSBleGVjdXRhYmxlLCBhZGQgLXVzZS1keW5sZCAtTHNvYmpzOiB0byB0aGUgY29tcGlsZWxpbmUuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgOzsKKyAgbTY4aykKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lLml4bGlicmFyeSAkbGlibmFtZS5hJworICAgICMgQ3JlYXRlICR7bGlibmFtZX1faXhsaWJyYXJ5LmEgZW50cmllcyBpbiAvc3lzL2xpYnMuCisgICAgZmluaXNoX2V2YWw9J2ZvciBsaWIgaW4gYGxzICRsaWJkaXIvKi5peGxpYnJhcnkgMj4vZGV2L251bGxgOyBkbyBsaWJuYW1lPWBmdW5jX2VjaG9fYWxsICIkbGliIiB8ICRTRUQgJ1wnJ3MlXi4qL1woW1teL11dKlwpXC5peGxpYnJhcnkkJVwxJSdcJydgOyB0ZXN0ICRSTSAvc3lzL2xpYnMvJHtsaWJuYW1lfV9peGxpYnJhcnkuYTsgJHNob3cgImNkIC9zeXMvbGlicyAmJiAkTE5fUyAkbGliICR7bGlibmFtZX1faXhsaWJyYXJ5LmEiOyBjZCAvc3lzL2xpYnMgJiYgJExOX1MgJGxpYiAke2xpYm5hbWV9X2l4bGlicmFyeS5hIHx8IGV4aXQgMTsgZG9uZScKKyAgICA7OworICBlc2FjCisgIDs7CisKK2Jlb3MqKQorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgbGQuc28iCisgIHNobGlicGF0aF92YXI9TElCUkFSWV9QQVRICisgIDs7CisKK2JzZGlbWzQ1XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi9zYmluIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii9zaGxpYiAvdXNyL2xpYiAvdXNyL1gxMS9saWIgL3Vzci9jb250cmliL2xpYiAvbGliIC91c3IvbG9jYWwvbGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL3NobGliIC91c3IvbGliIC91c3IvbG9jYWwvbGliIgorICAjIHRoZSBkZWZhdWx0IGxkLnNvLmNvbmYgYWxzbyBjb250YWlucyAvdXNyL2NvbnRyaWIvbGliIGFuZAorICAjIC91c3IvWDExUjYvbGliICgvdXNyL1gxMSBpcyBhIGxpbmsgdG8gL3Vzci9YMTFSNiksIGJ1dCBsZXQgdXMgYWxsb3cKKyAgIyBsaWJ0b29sIHRvIGhhcmQtY29kZSB0aGVzZSBpbnRvIHByb2dyYW1zCisgIDs7CisKK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgdmVyc2lvbl90eXBlPXdpbmRvd3MKKyAgc2hyZXh0X2NtZHM9Ii5kbGwiCisgIG5lZWRfdmVyc2lvbj1ubworICBuZWVkX2xpYl9wcmVmaXg9bm8KKworICBjYXNlICRHQ0MsJGNjX2Jhc2VuYW1lIGluCisgIHllcywqKQorICAgICMgZ2NjCisgICAgbGlicmFyeV9uYW1lc19zcGVjPSckbGlibmFtZS5kbGwuYScKKyAgICAjIERMTCBpcyBpbnN0YWxsZWQgdG8gJChsaWJkaXIpLy4uL2JpbiBieSBwb3N0aW5zdGFsbF9jbWRzCisgICAgcG9zdGluc3RhbGxfY21kcz0nYmFzZV9maWxlPWBiYXNlbmFtZSBcJHtmaWxlfWB+CisgICAgICBkbHBhdGg9YCRTSEVMTCAyPiYxIC1jICdcJycuICRkaXIvJ1wnJ1wke2Jhc2VfZmlsZX0nXCcnaTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxkaXI9JGRlc3RkaXIvYGRpcm5hbWUgXCRkbHBhdGhgfgorICAgICAgdGVzdCAtZCBcJGRsZGlyIHx8IG1rZGlyIC1wIFwkZGxkaXJ+CisgICAgICAkaW5zdGFsbF9wcm9nICRkaXIvJGRsbmFtZSBcJGRsZGlyLyRkbG5hbWV+CisgICAgICBjaG1vZCBhK3ggXCRkbGRpci8kZGxuYW1lfgorICAgICAgaWYgdGVzdCAtbiAnXCcnJHN0cmlwbWUnXCcnICYmIHRlc3QgLW4gJ1wnJyRzdHJpcGxpYidcJyc7IHRoZW4KKyAgICAgICAgZXZhbCAnXCcnJHN0cmlwbGliIFwkZGxkaXIvJGRsbmFtZSdcJycgfHwgZXhpdCBcJD87CisgICAgICBmaScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGN5Z3dpbiopCisgICAgICAjIEN5Z3dpbiBETExzIHVzZSAnY3lnJyBwcmVmaXggcmF0aGVyIHRoYW4gJ2xpYicKKyAgICAgIHNvbmFtZV9zcGVjPSdgZWNobyAke2xpYm5hbWV9IHwgc2VkIC1lICdzL15saWIvY3lnLydgYGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9JworbTRfaWYoWyQxXSwgW10sWworICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC91c3IvbGliL3czMmFwaSJdKQorICAgICAgOzsKKyAgICBtaW5ndyogfCBjZWdjYyopCisgICAgICAjIE1pbkdXIERMTHMgdXNlIHRyYWRpdGlvbmFsICdsaWInIHByZWZpeAorICAgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX1gZWNobyAke3JlbGVhc2V9IHwgJFNFRCAtZSAncy9bWy5dXS8tL2cnYCR7dmVyc3VmZml4fSR7c2hhcmVkX2V4dH0nCisgICAgICA7OworICAgIHB3MzIqKQorICAgICAgIyBwdzMyIERMTHMgdXNlICdwdycgcHJlZml4IHJhdGhlciB0aGFuICdsaWInCisgICAgICBsaWJyYXJ5X25hbWVzX3NwZWM9J2BlY2hvICR7bGlibmFtZX0gfCBzZWQgLWUgJ3MvXmxpYi9wdy8nYGBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICAgIDs7CisgICAgZXNhYworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsZC5leGUnCisgICAgOzsKKworICAqLGNsKikKKyAgICAjIE5hdGl2ZSBNU1ZDCisgICAgbGlibmFtZV9zcGVjPSckbmFtZScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfWBlY2hvICR7cmVsZWFzZX0gfCAkU0VEIC1lICdzL1tbLl1dLy0vZydgJHt2ZXJzdWZmaXh9JHtzaGFyZWRfZXh0fScKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0uZGxsLmxpYicKKworICAgIGNhc2UgJGJ1aWxkX29zIGluCisgICAgbWluZ3cqKQorICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPQorICAgICAgbHRfc2F2ZV9pZnM9JElGUworICAgICAgSUZTPSc7JworICAgICAgZm9yIGx0X3BhdGggaW4gJExJQgorICAgICAgZG8KKyAgICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgICAjIExldCBET1MgdmFyaWFibGUgZXhwYW5zaW9uIHByaW50IHRoZSBzaG9ydCA4LjMgc3R5bGUgZmlsZSBuYW1lLgorICAgICAgICBsdF9wYXRoPWBjZCAiJGx0X3BhdGgiIDI+L2Rldi9udWxsICYmIGNtZCAvL0MgImZvciAlaSBpbiAoIi4iKSBkbyBAZWNobyAlfnNpImAKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjICRsdF9wYXRoIgorICAgICAgZG9uZQorICAgICAgSUZTPSRsdF9zYXZlX2lmcworICAgICAgIyBDb252ZXJ0IHRvIE1TWVMgc3R5bGUuCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8IHNlZCAtZSAnc3xcXFxcfC98ZycgLWUgJ3N8IFxcKFtbYS16QS1aXV1cXCk6fCAvXFwxfGcnIC1lICdzfF4gfHwnYAorICAgICAgOzsKKyAgICBjeWd3aW4qKQorICAgICAgIyBDb252ZXJ0IHRvIHVuaXggZm9ybSwgdGhlbiB0byBkb3MgZm9ybSwgdGhlbiBiYWNrIHRvIHVuaXggZm9ybQorICAgICAgIyBidXQgdGhpcyB0aW1lIGRvcyBzdHlsZSAobm8gc3BhY2VzISkgc28gdGhhdCB0aGUgdW5peCBmb3JtIGxvb2tzCisgICAgICAjIGxpa2UgL2N5Z2RyaXZlL2MvUFJPR1JBfjE6L2N5Z2RyLi4uCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tdW5peCAiJExJQiJgCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YGN5Z3BhdGggLS1wYXRoIC0tZG9zICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiAyPi9kZXYvbnVsbGAKKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz1gY3lncGF0aCAtLXBhdGggLS11bml4ICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICA7OworICAgICopCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRMSUIiCisgICAgICBpZiAkRUNITyAiJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIgfCBbJEdSRVAgJztbYy16Qy1aXTovJyA+L2Rldi9udWxsXTsgdGhlbgorICAgICAgICAjIEl0IGlzIG1vc3QgcHJvYmFibHkgYSBXaW5kb3dzIGZvcm1hdCBQQVRILgorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgJ3MvOy8gL2cnYAorICAgICAgZWxzZQorICAgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9YCRFQ0hPICIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIiB8ICRTRUQgLWUgInMvJFBBVEhfU0VQQVJBVE9SLyAvZyJgCisgICAgICBmaQorICAgICAgIyBGSVhNRTogZmluZCB0aGUgc2hvcnQgbmFtZSBvciB0aGUgcGF0aCBjb21wb25lbnRzLCBhcyBzcGFjZXMgYXJlCisgICAgICAjIGNvbW1vbi4gKGUuZy4gIlByb2dyYW0gRmlsZXMiIC0+ICJQUk9HUkF+MSIpCisgICAgICA7OworICAgIGVzYWMKKworICAgICMgRExMIGlzIGluc3RhbGxlZCB0byAkKGxpYmRpcikvLi4vYmluIGJ5IHBvc3RpbnN0YWxsX2NtZHMKKyAgICBwb3N0aW5zdGFsbF9jbWRzPSdiYXNlX2ZpbGU9YGJhc2VuYW1lIFwke2ZpbGV9YH4KKyAgICAgIGRscGF0aD1gJFNIRUxMIDI+JjEgLWMgJ1wnJy4gJGRpci8nXCcnXCR7YmFzZV9maWxlfSdcJydpOyBlY2hvIFwkZGxuYW1lJ1wnJ2B+CisgICAgICBkbGRpcj0kZGVzdGRpci9gZGlybmFtZSBcJGRscGF0aGB+CisgICAgICB0ZXN0IC1kIFwkZGxkaXIgfHwgbWtkaXIgLXAgXCRkbGRpcn4KKyAgICAgICRpbnN0YWxsX3Byb2cgJGRpci8kZGxuYW1lIFwkZGxkaXIvJGRsbmFtZScKKyAgICBwb3N0dW5pbnN0YWxsX2NtZHM9J2RsZGxsPWAkU0hFTEwgMj4mMSAtYyAnXCcnLiAkZmlsZTsgZWNobyBcJGRsbmFtZSdcJydgfgorICAgICAgZGxwYXRoPSRkaXIvXCRkbGRsbH4KKyAgICAgICAkUk0gXCRkbHBhdGgnCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGR5bmFtaWNfbGlua2VyPSdXaW4zMiBsaW5rLmV4ZScKKyAgICA7OworCisgICopCisgICAgIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9YGVjaG8gJHtyZWxlYXNlfSB8ICRTRUQgLWUgJ3MvW1suXV0vLS9nJ2Ake3ZlcnN1ZmZpeH0ke3NoYXJlZF9leHR9ICRsaWJuYW1lLmxpYicKKyAgICBkeW5hbWljX2xpbmtlcj0nV2luMzIgbGQuZXhlJworICAgIDs7CisgIGVzYWMKKyAgIyBGSVhNRTogZmlyc3Qgd2Ugc2hvdWxkIHNlYXJjaCAuIGFuZCB0aGUgZGlyZWN0b3J5IHRoZSBleGVjdXRhYmxlIGlzIGluCisgIHNobGlicGF0aF92YXI9UEFUSAorICA7OworCitkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZHlsZCIKKyAgdmVyc2lvbl90eXBlPWRhcndpbgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke21ham9yfSRzaGFyZWRfZXh0ICR7bGlibmFtZX0kc2hhcmVkX2V4dCcKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHttYWpvcn0kc2hhcmVkX2V4dCcKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBzaGxpYnBhdGhfdmFyPURZTERfTElCUkFSWV9QQVRICisgIHNocmV4dF9jbWRzPSdgdGVzdCAuJG1vZHVsZSA9IC55ZXMgJiYgZWNobyAuc28gfHwgZWNobyAuZHlsaWJgJworbTRfaWYoWyQxXSwgW10sWworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9IiRzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWMgL3Vzci9sb2NhbC9saWIiXSkKKyAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC9saWIgL3Vzci9saWInCisgIDs7CisKK2RndXgqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHNoYXJlZF9leHQnCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIDs7CisKK2ZyZWVic2QxKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICAjIERyYWdvbkZseSBkb2VzIG5vdCBoYXZlIGFvdXQuICBXaGVuL2lmIHRoZXkgaW1wbGVtZW50IGEgbmV3CisgICMgdmVyc2lvbmluZyBtZWNoYW5pc20sIGFkanVzdCB0aGlzLgorICBpZiB0ZXN0IC14IC91c3IvYmluL29iamZvcm1hdDsgdGhlbgorICAgIG9iamZvcm1hdD1gL3Vzci9iaW4vb2JqZm9ybWF0YAorICBlbHNlCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGZyZWVic2RbWzEyM11dKikgb2JqZm9ybWF0PWFvdXQgOzsKKyAgICAqKSBvYmpmb3JtYXQ9ZWxmIDs7CisgICAgZXNhYworICBmaQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC0kb2JqZm9ybWF0CisgIGNhc2UgJHZlcnNpb25fdHlwZSBpbgorICAgIGZyZWVic2QtZWxmKikKKyAgICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0gJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgICAgbmVlZF92ZXJzaW9uPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgZnJlZWJzZC0qKQorICAgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXgnCisgICAgICBuZWVkX3ZlcnNpb249eWVzCisgICAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgZnJlZWJzZDIqKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKyAgICA7OworICBmcmVlYnNkMy5bWzAxXV0qIHwgZnJlZWJzZGVsZjMuW1swMV1dKikKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgICAgaGFyZGNvZGVfaW50b19saWJzPXllcworICAgIDs7CisgIGZyZWVic2QzLltbMi05XV0qIHwgZnJlZWJzZGVsZjMuW1syLTldXSogfCBcCisgIGZyZWVic2Q0LltbMC01XV0gfCBmcmVlYnNkZWxmNC5bWzAtNV1dIHwgZnJlZWJzZDQuMS4xIHwgZnJlZWJzZGVsZjQuMS4xKQorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICAqKSAjIGZyb20gNC42IG9uLCBhbmQgRHJhZ29uRmx5CisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICA7OworICBlc2FjCisgIDs7CisKK2dudSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0ke21ham9yfSAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaGFyZGNvZGVfaW50b19saWJzPXllcworICA7OworCitoYWlrdSopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIGR5bmFtaWNfbGlua2VyPSIkaG9zdF9vcyBydW50aW1lX2xvYWRlciIKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR7bWFqb3J9ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBzaGxpYnBhdGhfdmFyPUxJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvYm9vdC9ob21lL2NvbmZpZy9saWIgL2Jvb3QvY29tbW9uL2xpYiAvYm9vdC9zeXN0ZW0vbGliJworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIDs7CisKK2hwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAjIEdpdmUgYSBzb25hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgbWFqb3IgdmVyc2lvbiBzbyB0aGF0IGRsZC5zbCByZWZ1c2VzIHRvCisgICMgbGluayBhZ2FpbnN0IG90aGVyIHZlcnNpb25zLgorICB2ZXJzaW9uX3R5cGU9c3Vub3MKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBzaHJleHRfY21kcz0nLnNvJworICAgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNvIgorICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcyAjIFVubGVzcyArbm9lbnZ2YXIgaXMgc3BlY2lmaWVkLgorICAgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgICAgaWYgdGVzdCAiWCRIUFVYX0lBNjRfTU9ERSIgPSBYMzI7IHRoZW4KKyAgICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iL3Vzci9saWIvaHB1eDMyIC91c3IvbG9jYWwvbGliL2hwdXgzMiAvdXNyL2xvY2FsL2xpYiIKKyAgICBlbHNlCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL2hwdXg2NCAvdXNyL2xvY2FsL2xpYi9ocHV4NjQiCisgICAgZmkKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0kc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjCisgICAgOzsKKyAgaHBwYSo2NCopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICAgZHluYW1pY19saW5rZXI9IiRob3N0X29zIGRsZC5zbCIKKyAgICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSCAjIEhvdyBzaG91bGQgd2UgaGFuZGxlIFNITElCX1BBVEgKKyAgICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzICMgVW5sZXNzICtub2VudnZhciBpcyBzcGVjaWZpZWQuCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliL3BhMjBfNjQgL3Vzci9jY3MvbGliL3BhMjBfNjQiCisgICAgc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWM9JHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYworICAgIDs7CisgICopCisgICAgc2hyZXh0X2NtZHM9Jy5zbCcKKyAgICBkeW5hbWljX2xpbmtlcj0iJGhvc3Rfb3MgZGxkLnNsIgorICAgIHNobGlicGF0aF92YXI9U0hMSUJfUEFUSAorICAgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubyAjICtzIGlzIHJlcXVpcmVkIHRvIGVuYWJsZSBTSExJQl9QQVRICisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgICAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgICA7OworICBlc2FjCisgICMgSFAtVVggcnVucyAqcmVhbGx5KiBzbG93bHkgdW5sZXNzIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG1vZGUgNTU1LCAuLi4KKyAgcG9zdGluc3RhbGxfY21kcz0nY2htb2QgNTU1ICRsaWInCisgICMgb3IgZmFpbHMgb3V0cmlnaHQsIHNvIG92ZXJyaWRlIGF0b21pY2FsbHk6CisgIGluc3RhbGxfb3ZlcnJpZGVfbW9kZT01NTUKKyAgOzsKKworaW50ZXJpeFtbMy05XV0qKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBkeW5hbWljX2xpbmtlcj0nSW50ZXJpeCAzLnggbGQuc28uMSAoUEUsIGxpa2UgRUxGKScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG5vbnN0b3B1eCopIHZlcnNpb25fdHlwZT1ub25zdG9wdXggOzsKKyAgICAqKQorCWlmIHRlc3QgIiRsdF9jdl9wcm9nX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkJdmVyc2lvbl90eXBlPWxpbnV4CisJZWxzZQorCQl2ZXJzaW9uX3R5cGU9aXJpeAorCWZpIDs7CisgIGVzYWMKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgaXJpeDUqIHwgbm9uc3RvcHV4KikKKyAgICBsaWJzdWZmPSBzaGxpYnN1ZmY9CisgICAgOzsKKyAgKikKKyAgICBjYXNlICRMRCBpbiAjIGxpYnRvb2wubTQgd2lsbCBhZGQgb25lIG9mIHRoZXNlIHN3aXRjaGVzIHRvIExECisgICAgKi0zMnwqIi0zMiAifCotbWVsZjMyYnNtaXB8KiItbWVsZjMyYnNtaXAgIikKKyAgICAgIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9MzItYml0OzsKKyAgICAqLW4zMnwqIi1uMzIgInwqLW1lbGYzMmJtaXBuMzJ8KiItbWVsZjMyYm1pcG4zMiAiKQorICAgICAgbGlic3VmZj0zMiBzaGxpYnN1ZmY9TjMyIGxpYm1hZ2ljPU4zMjs7CisgICAgKi02NHwqIi02NCAifCotbWVsZjY0Ym1pcHwqIi1tZWxmNjRibWlwICIpCisgICAgICBsaWJzdWZmPTY0IHNobGlic3VmZj02NCBsaWJtYWdpYz02NC1iaXQ7OworICAgICopIGxpYnN1ZmY9IHNobGlic3VmZj0gbGlibWFnaWM9bmV2ZXItbWF0Y2g7OworICAgIGVzYWMKKyAgICA7OworICBlc2FjCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWSR7c2hsaWJzdWZmfV9QQVRICisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3IvbGliJHtsaWJzdWZmfSAvbGliJHtsaWJzdWZmfSAvdXNyL2xvY2FsL2xpYiR7bGlic3VmZn0iCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiR7bGlic3VmZn0gL2xpYiR7bGlic3VmZn0iCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworIyBObyBzaGFyZWQgbGliIHN1cHBvcnQgZm9yIExpbnV4IG9sZGxkLCBhb3V0LCBvciBjb2ZmLgorbGludXgqb2xkbGQqIHwgbGludXgqYW91dCogfCBsaW51eCpjb2ZmKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW4gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisKKyAgIyBTb21lIGJpbnV0aWxzIGxkIGFyZSBwYXRjaGVkIHRvIHNldCBEVF9SVU5QQVRICisgIEFDX0NBQ0hFX1ZBTChbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoXSwKKyAgICBbbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgc2F2ZV9MREZMQUdTPSRMREZMQUdTCisgICAgc2F2ZV9saWJkaXI9JGxpYmRpcgorICAgIGV2YWwgImxpYmRpcj0vZm9vOyB3bD1cIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKVwiOyBcCisJIExERkxBR1M9XCJcJExERkxBR1MgJF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpXCIiCisgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShbXSxbXSldLAorICAgICAgW0FTX0lGKFsgKCRPQkpEVU1QIC1wIGNvbmZ0ZXN0JGFjX2V4ZWV4dCkgMj4vZGV2L251bGwgfCBncmVwICJSVU5QQVRILiokbGliZGlyIiA+L2Rldi9udWxsXSwKKwkgW2x0X2N2X3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXNdKV0pCisgICAgTERGTEFHUz0kc2F2ZV9MREZMQUdTCisgICAgbGliZGlyPSRzYXZlX2xpYmRpcgorICAgIF0pCisgIHNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD0kbHRfY3Zfc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoCisKKyAgIyBUaGlzIGltcGxpZXMgbm8gZmFzdF9pbnN0YWxsLCB3aGljaCBpcyB1bmFjY2VwdGFibGUuCisgICMgU29tZSByZXdvcmsgd2lsbCBiZSBuZWVkZWQgdG8gYWxsb3cgZm9yIGZhc3RfaW5zdGFsbAorICAjIGJlZm9yZSB0aGlzIGNhbiBiZSBlbmFibGVkLgorICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisKKyAgIyBBcHBlbmQgbGQuc28uY29uZiBjb250ZW50cyB0byB0aGUgc2VhcmNoIHBhdGgKKyAgaWYgdGVzdCAtZiAvZXRjL2xkLnNvLmNvbmY7IHRoZW4KKyAgICBsdF9sZF9leHRyYT1gYXdrICcvXmluY2x1ZGUgLyB7IHN5c3RlbShzcHJpbnRmKCJjZCAvZXRjOyBjYXQgJXMgMj4vZGV2L251bGwiLCBcWyRdMikpOyBza2lwID0gMTsgfSB7IGlmICghc2tpcCkgcHJpbnQgXFskXTA7IHNraXAgPSAwOyB9JyA8IC9ldGMvbGQuc28uY29uZiB8ICRTRUQgLWUgJ3MvIy4qLy87L15bCSBdKmh3Y2FwWwkgXS9kO3MvWzosCV0vIC9nO3MvPVtePV0qJC8vO3MvPVtePSBdKiAvIC9nO3MvIi8vZzsvXiQvZCcgfCB0ciAnXG4nICcgJ2AKKyAgICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iL2xpYiAvdXNyL2xpYiAkbHRfbGRfZXh0cmEiCisgIGZpCisKKyAgIyBXZSB1c2VkIHRvIHRlc3QgZm9yIC9saWIvbGQuc28uMSBhbmQgZGlzYWJsZSBzaGFyZWQgbGlicmFyaWVzIG9uCisgICMgcG93ZXJwYywgYmVjYXVzZSBNa0xpbnV4IG9ubHkgc3VwcG9ydGVkIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB0aGUKKyAgIyBHTlUgZHluYW1pYyBsaW5rZXIuICBTaW5jZSB0aGlzIHdhcyBicm9rZW4gd2l0aCBjcm9zcyBjb21waWxlcnMsCisgICMgbW9zdCBwb3dlcnBjLWxpbnV4IGJveGVzIHN1cHBvcnQgZHluYW1pYyBsaW5raW5nIHRoZXNlIGRheXMgYW5kCisgICMgcGVvcGxlIGNhbiBhbHdheXMgLS1kaXNhYmxlLXNoYXJlZCwgdGhlIHRlc3Qgd2FzIHJlbW92ZWQsIGFuZCB3ZQorICAjIGFzc3VtZSB0aGUgR05VL0xpbnV4IGR5bmFtaWMgbGlua2VyIGlzIGluIHVzZS4KKyAgZHluYW1pY19saW5rZXI9J0dOVS9MaW51eCBsZC5zbycKKyAgOzsKKworbmV0YnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIG5lZWRfbGliX3ByZWZpeD1ubworICBuZWVkX3ZlcnNpb249bm8KKyAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICAgIGZpbmlzaF9jbWRzPSdQQVRIPSJcJFBBVEg6L3NiaW4iIGxkY29uZmlnIC1tICRsaWJkaXInCisgICAgZHluYW1pY19saW5rZXI9J05ldEJTRCAoYS5vdXQpIGxkLnNvJworICBlbHNlCisgICAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAke2xpYm5hbWV9JHtzaGFyZWRfZXh0fScKKyAgICBzb25hbWVfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yJworICAgIGR5bmFtaWNfbGlua2VyPSdOZXRCU0QgbGQuZWxmX3NvJworICBmaQorICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKworbmV3c29zNikKKyAgdmVyc2lvbl90eXBlPWxpbnV4CisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIDs7CisKKypudG8qIHwgKnFueCopCisgIHZlcnNpb25fdHlwZT1xbngKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgZHluYW1pY19saW5rZXI9J2xkcW54LnNvJworICA7OworCitvcGVuYnNkKikKKyAgdmVyc2lvbl90eXBlPXN1bm9zCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIvdXNyL2xpYiIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgICMgU29tZSBvbGRlciB2ZXJzaW9ucyBvZiBPcGVuQlNEICgzLjMgYXQgbGVhc3QpICpkbyogbmVlZCB2ZXJzaW9uZWQgbGlicy4KKyAgY2FzZSAkaG9zdF9vcyBpbgorICAgIG9wZW5ic2QzLjMgfCBvcGVuYnNkMy4zLiopCW5lZWRfdmVyc2lvbj15ZXMgOzsKKyAgICAqKQkJCQluZWVkX3ZlcnNpb249bm8gIDs7CisgIGVzYWMKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCcKKyAgZmluaXNoX2NtZHM9J1BBVEg9IlwkUEFUSDovc2JpbiIgbGRjb25maWcgLW0gJGxpYmRpcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgaWYgdGVzdCAteiAiYGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIG9wZW5ic2QyLltbODldXSB8IG9wZW5ic2QyLltbODldXS4qKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD1ubworCTs7CisgICAgICAqKQorCXNobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aD15ZXMKKwk7OworICAgICAgZXNhYworICBlbHNlCisgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBmaQorICA7OworCitvczIqKQorICBsaWJuYW1lX3NwZWM9JyRuYW1lJworICBzaHJleHRfY21kcz0iLmRsbCIKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJGxpYm5hbWUke3NoYXJlZF9leHR9ICRsaWJuYW1lLmEnCisgIGR5bmFtaWNfbGlua2VyPSdPUy8yIGxkLmV4ZScKKyAgc2hsaWJwYXRoX3Zhcj1MSUJQQVRICisgIDs7CisKK29zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgdmVyc2lvbl90eXBlPW9zZgorICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgbmVlZF92ZXJzaW9uPW5vCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIGxpYnJhcnlfbmFtZXNfc3BlYz0nJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JHZlcnN1ZmZpeCAke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Ii91c3Ivc2hsaWIgL3Vzci9jY3MvbGliIC91c3IvbGliL2NtcGxycy9jYyAvdXNyL2xpYiAvdXNyL2xvY2FsL2xpYiAvdmFyL3NobGliIgorICBzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlYz0iJHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKKyAgOzsKKworcmRvcyopCisgIGR5bmFtaWNfbGlua2VyPW5vCisgIDs7CisKK3NvbGFyaXMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgICMgbGRkIGNvbXBsYWlucyB1bmxlc3MgbGlicmFyaWVzIGFyZSBleGVjdXRhYmxlCisgIHBvc3RpbnN0YWxsX2NtZHM9J2NobW9kICt4ICRsaWInCisgIDs7CisKK3N1bm9zNCopCisgIHZlcnNpb25fdHlwZT1zdW5vcworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4JworICBmaW5pc2hfY21kcz0nUEFUSD0iXCRQQVRIOi91c3IvZXRjIiBsZGNvbmZpZyAkbGliZGlyJworICBzaGxpYnBhdGhfdmFyPUxEX0xJQlJBUllfUEFUSAorICBzaGxpYnBhdGhfb3ZlcnJpZGVzX3J1bnBhdGg9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgZmkKKyAgbmVlZF92ZXJzaW9uPXllcworICA7OworCitzeXN2NCB8IHN5c3Y0LjMqKQorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbGlicmFyeV9uYW1lc19zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kdmVyc3VmZml4ICR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvciAkbGlibmFtZSR7c2hhcmVkX2V4dH0nCisgIHNvbmFtZV9zcGVjPScke2xpYm5hbWV9JHtyZWxlYXNlfSR7c2hhcmVkX2V4dH0kbWFqb3InCisgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgICAgc25pKQorICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIHJ1bnBhdGhfdmFyPUxEX1JVTl9QQVRICisgICAgICA7OworICAgIHNpZW1lbnMpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIDs7CisgICAgbW90b3JvbGEpCisgICAgICBuZWVkX2xpYl9wcmVmaXg9bm8KKyAgICAgIG5lZWRfdmVyc2lvbj1ubworICAgICAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgICAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy9saWIgL3Vzci9saWIgL3Vzci9jY3MvbGliJworICAgICAgOzsKKyAgZXNhYworICA7OworCitzeXN2NCpNUCopCisgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKyAgICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgICBsaWJyYXJ5X25hbWVzX3NwZWM9JyRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kdmVyc3VmZml4ICRsaWJuYW1lJHtzaGFyZWRfZXh0fS4kbWFqb3IgJGxpYm5hbWUke3NoYXJlZF9leHR9JworICAgIHNvbmFtZV9zcGVjPSckbGlibmFtZSR7c2hhcmVkX2V4dH0uJG1ham9yJworICAgIHNobGlicGF0aF92YXI9TERfTElCUkFSWV9QQVRICisgIGZpCisgIDs7CisKK3N5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCogfCBzeXN2NCp1dzIqKQorICB2ZXJzaW9uX3R5cGU9ZnJlZWJzZC1lbGYKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9ICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPXllcworICBoYXJkY29kZV9pbnRvX2xpYnM9eWVzCisgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICBzeXNfbGliX3NlYXJjaF9wYXRoX3NwZWM9Jy91c3IvbG9jYWwvbGliIC91c3IvZ251L2xpYiAvdXNyL2Njcy9saWIgL3Vzci9saWIgL2xpYicKKyAgZWxzZQorICAgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0nL3Vzci9jY3MvbGliIC91c3IvbGliJworICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNjbzMuMnY1KikKKyAgICAgICAgc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjPSIkc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjIC9saWIiCisJOzsKKyAgICBlc2FjCisgIGZpCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPScvdXNyL2xpYicKKyAgOzsKKwordHBmKikKKyAgIyBUUEYgaXMgYSBjcm9zcy10YXJnZXQgb25seS4gIFByZWZlcnJlZCBjcm9zcy1ob3N0ID0gR05VL0xpbnV4LgorICB2ZXJzaW9uX3R5cGU9bGludXgKKyAgbmVlZF9saWJfcHJlZml4PW5vCisgIG5lZWRfdmVyc2lvbj1ubworICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgc2hsaWJwYXRoX292ZXJyaWRlc19ydW5wYXRoPW5vCisgIGhhcmRjb2RlX2ludG9fbGlicz15ZXMKKyAgOzsKKwordXRzNCopCisgIHZlcnNpb25fdHlwZT1saW51eAorICBsaWJyYXJ5X25hbWVzX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSR2ZXJzdWZmaXggJHtsaWJuYW1lfSR7cmVsZWFzZX0ke3NoYXJlZF9leHR9JG1ham9yICRsaWJuYW1lJHtzaGFyZWRfZXh0fScKKyAgc29uYW1lX3NwZWM9JyR7bGlibmFtZX0ke3JlbGVhc2V9JHtzaGFyZWRfZXh0fSRtYWpvcicKKyAgc2hsaWJwYXRoX3Zhcj1MRF9MSUJSQVJZX1BBVEgKKyAgOzsKKworKikKKyAgZHluYW1pY19saW5rZXI9bm8KKyAgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyRkeW5hbWljX2xpbmtlcl0pCit0ZXN0ICIkZHluYW1pY19saW5rZXIiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCit2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iUEFUSCAkc2hsaWJwYXRoX3ZhciAkcnVucGF0aF92YXIiCitpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICB2YXJpYWJsZXNfc2F2ZWRfZm9yX3JlbGluaz0iJHZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rIEdDQ19FWEVDX1BSRUZJWCBDT01QSUxFUl9QQVRIIExJQlJBUllfUEFUSCIKK2ZpCisKK2lmIHRlc3QgIiR7bHRfY3Zfc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfc2VhcmNoX3BhdGhfc3BlYz0iJGx0X2N2X3N5c19saWJfc2VhcmNoX3BhdGhfc3BlYyIKK2ZpCitpZiB0ZXN0ICIke2x0X2N2X3N5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjK3NldH0iID0gc2V0OyB0aGVuCisgIHN5c19saWJfZGxzZWFyY2hfcGF0aF9zcGVjPSIkbHRfY3Zfc3lzX2xpYl9kbHNlYXJjaF9wYXRoX3NwZWMiCitmaQorCitfTFRfREVDTChbXSwgW3ZhcmlhYmxlc19zYXZlZF9mb3JfcmVsaW5rXSwgWzFdLAorICAgIFtWYXJpYWJsZXMgd2hvc2UgdmFsdWVzIHNob3VsZCBiZSBzYXZlZCBpbiBsaWJ0b29sIHdyYXBwZXIgc2NyaXB0cyBhbmQKKyAgICByZXN0b3JlZCBhdCBsaW5rIHRpbWVdKQorX0xUX0RFQ0woW10sIFtuZWVkX2xpYl9wcmVmaXhdLCBbMF0sCisgICAgW0RvIHdlIG5lZWQgdGhlICJsaWIiIHByZWZpeCBmb3IgbW9kdWxlcz9dKQorX0xUX0RFQ0woW10sIFtuZWVkX3ZlcnNpb25dLCBbMF0sIFtEbyB3ZSBuZWVkIGEgdmVyc2lvbiBmb3IgbGlicmFyaWVzP10pCitfTFRfREVDTChbXSwgW3ZlcnNpb25fdHlwZV0sIFswXSwgW0xpYnJhcnkgdmVyc2lvbmluZyB0eXBlXSkKK19MVF9ERUNMKFtdLCBbcnVucGF0aF92YXJdLCBbMF0sICBbU2hhcmVkIGxpYnJhcnkgcnVudGltZSBwYXRoIHZhcmlhYmxlXSkKK19MVF9ERUNMKFtdLCBbc2hsaWJwYXRoX3Zhcl0sIFswXSxbU2hhcmVkIGxpYnJhcnkgcGF0aCB2YXJpYWJsZV0pCitfTFRfREVDTChbXSwgW3NobGlicGF0aF9vdmVycmlkZXNfcnVucGF0aF0sIFswXSwKKyAgICBbSXMgc2hsaWJwYXRoIHNlYXJjaGVkIGJlZm9yZSB0aGUgaGFyZC1jb2RlZCBsaWJyYXJ5IHNlYXJjaCBwYXRoP10pCitfTFRfREVDTChbXSwgW2xpYm5hbWVfc3BlY10sIFsxXSwgW0Zvcm1hdCBvZiBsaWJyYXJ5IG5hbWUgcHJlZml4XSkKK19MVF9ERUNMKFtdLCBbbGlicmFyeV9uYW1lc19zcGVjXSwgWzFdLAorICAgIFtbTGlzdCBvZiBhcmNoaXZlIG5hbWVzLiAgRmlyc3QgbmFtZSBpcyB0aGUgcmVhbCBvbmUsIHRoZSByZXN0IGFyZSBsaW5rcy4KKyAgICBUaGUgbGFzdCBuYW1lIGlzIHRoZSBvbmUgdGhhdCB0aGUgbGlua2VyIGZpbmRzIHdpdGggLWxOQU1FXV0pCitfTFRfREVDTChbXSwgW3NvbmFtZV9zcGVjXSwgWzFdLAorICAgIFtbVGhlIGNvZGVkIG5hbWUgb2YgdGhlIGxpYnJhcnksIGlmIGRpZmZlcmVudCBmcm9tIHRoZSByZWFsIG5hbWVdXSkKK19MVF9ERUNMKFtdLCBbaW5zdGFsbF9vdmVycmlkZV9tb2RlXSwgWzFdLAorICAgIFtQZXJtaXNzaW9uIG1vZGUgb3ZlcnJpZGUgZm9yIGluc3RhbGxhdGlvbiBvZiBzaGFyZWQgbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbcG9zdGluc3RhbGxfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZCB0byB1c2UgYWZ0ZXIgaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtwb3N0dW5pbnN0YWxsX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmQgdG8gdXNlIGFmdGVyIHVuaW5zdGFsbGF0aW9uIG9mIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX0RFQ0woW10sIFtmaW5pc2hfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgdXNlZCB0byBmaW5pc2ggYSBsaWJ0b29sIGxpYnJhcnkgaW5zdGFsbGF0aW9uIGluIGEgZGlyZWN0b3J5XSkKK19MVF9ERUNMKFtdLCBbZmluaXNoX2V2YWxdLCBbMV0sCisgICAgW1tBcyAiZmluaXNoX2NtZHMiLCBleGNlcHQgYSBzaW5nbGUgc2NyaXB0IGZyYWdtZW50IHRvIGJlIGV2YWxlZCBidXQKKyAgICBub3Qgc2hvd25dXSkKK19MVF9ERUNMKFtdLCBbaGFyZGNvZGVfaW50b19saWJzXSwgWzBdLAorICAgIFtXaGV0aGVyIHdlIHNob3VsZCBoYXJkY29kZSBsaWJyYXJ5IHBhdGhzIGludG8gbGlicmFyaWVzXSkKK19MVF9ERUNMKFtdLCBbc3lzX2xpYl9zZWFyY2hfcGF0aF9zcGVjXSwgWzJdLAorICAgIFtDb21waWxlLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorX0xUX0RFQ0woW10sIFtzeXNfbGliX2Rsc2VhcmNoX3BhdGhfc3BlY10sIFsyXSwKKyAgICBbUnVuLXRpbWUgc3lzdGVtIHNlYXJjaCBwYXRoIGZvciBsaWJyYXJpZXNdKQorXSkjIF9MVF9TWVNfRFlOQU1JQ19MSU5LRVIKKworCisjIF9MVF9QQVRIX1RPT0xfUFJFRklYKFRPT0wpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZpbmQgYSBmaWxlIHByb2dyYW0gd2hpY2ggY2FuIHJlY29nbml6ZSBzaGFyZWQgbGlicmFyeQorQUNfREVGVU4oW19MVF9QQVRIX1RPT0xfUFJFRklYXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2ZvciAkMV0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9NQUdJQ19DTUQsCitbY2FzZSAkTUFHSUNfQ01EIGluCitbW1xcLypdIHwgID86W1xcL10qXSkKKyAgbHRfY3ZfcGF0aF9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorICA7OworKikKKyAgbHRfc2F2ZV9NQUdJQ19DTUQ9IiRNQUdJQ19DTUQiCisgIGx0X3NhdmVfaWZzPSIkSUZTIjsgSUZTPSRQQVRIX1NFUEFSQVRPUgorZG5sICRhY19kdW1teSBmb3JjZXMgc3BsaXR0aW5nIG9uIGNvbnN0YW50IHVzZXItc3VwcGxpZWQgcGF0aHMuCitkbmwgUE9TSVguMiB3b3JkIHNwbGl0dGluZyBpcyBkb25lIG9ubHkgb24gdGhlIG91dHB1dCBvZiB3b3JkIGV4cGFuc2lvbnMsCitkbmwgbm90IGV2ZXJ5IHdvcmQuICBUaGlzIGNsb3NlcyBhIGxvbmdzdGFuZGluZyBzaCBzZWN1cml0eSBob2xlLgorICBhY19kdW1teT0ibTRfaWYoWyQyXSwgLCAkUEFUSCwgWyQyXSkiCisgIGZvciBhY19kaXIgaW4gJGFjX2R1bW15OyBkbworICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgaWYgdGVzdCAtZiAkYWNfZGlyLyQxOyB0aGVuCisgICAgICBsdF9jdl9wYXRoX01BR0lDX0NNRD0iJGFjX2Rpci8kMSIKKyAgICAgIGlmIHRlc3QgLW4gIiRmaWxlX21hZ2ljX3Rlc3RfZmlsZSI7IHRoZW4KKwljYXNlICRkZXBsaWJzX2NoZWNrX21ldGhvZCBpbgorCSJmaWxlX21hZ2ljICIqKQorCSAgZmlsZV9tYWdpY19yZWdleD1gZXhwciAiJGRlcGxpYnNfY2hlY2tfbWV0aG9kIiA6ICJmaWxlX21hZ2ljIFwoLipcKSJgCisJICBNQUdJQ19DTUQ9IiRsdF9jdl9wYXRoX01BR0lDX0NNRCIKKwkgIGlmIGV2YWwgJGZpbGVfbWFnaWNfY21kIFwkZmlsZV9tYWdpY190ZXN0X2ZpbGUgMj4gL2Rldi9udWxsIHwKKwkgICAgJEVHUkVQICIkZmlsZV9tYWdpY19yZWdleCIgPiAvZGV2L251bGw7IHRoZW4KKwkgICAgOgorCSAgZWxzZQorCSAgICBjYXQgPDxfTFRfRU9GIDE+JjIKKworKioqIFdhcm5pbmc6IHRoZSBjb21tYW5kIGxpYnRvb2wgdXNlcyB0byBkZXRlY3Qgc2hhcmVkIGxpYnJhcmllcywKKyoqKiAkZmlsZV9tYWdpY19jbWQsIHByb2R1Y2VzIG91dHB1dCB0aGF0IGxpYnRvb2wgY2Fubm90IHJlY29nbml6ZS4KKyoqKiBUaGUgcmVzdWx0IGlzIHRoYXQgbGlidG9vbCBtYXkgZmFpbCB0byByZWNvZ25pemUgc2hhcmVkIGxpYnJhcmllcworKioqIGFzIHN1Y2guICBUaGlzIHdpbGwgYWZmZWN0IHRoZSBjcmVhdGlvbiBvZiBsaWJ0b29sIGxpYnJhcmllcyB0aGF0CisqKiogZGVwZW5kIG9uIHNoYXJlZCBsaWJyYXJpZXMsIGJ1dCBwcm9ncmFtcyBsaW5rZWQgd2l0aCBzdWNoIGxpYnRvb2wKKyoqKiBsaWJyYXJpZXMgd2lsbCB3b3JrIHJlZ2FyZGxlc3Mgb2YgdGhpcyBwcm9ibGVtLiAgTmV2ZXJ0aGVsZXNzLCB5b3UKKyoqKiBtYXkgd2FudCB0byByZXBvcnQgdGhlIHByb2JsZW0gdG8geW91ciBzeXN0ZW0gbWFuYWdlciBhbmQvb3IgdG8KKyoqKiBidWctbGlidG9vbEBnbnUub3JnCisKK19MVF9FT0YKKwkgIGZpIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGJyZWFrCisgICAgZmkKKyAgZG9uZQorICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgTUFHSUNfQ01EPSIkbHRfc2F2ZV9NQUdJQ19DTUQiCisgIDs7Citlc2FjXSkKK01BR0lDX0NNRD0iJGx0X2N2X3BhdGhfTUFHSUNfQ01EIgoraWYgdGVzdCAtbiAiJE1BR0lDX0NNRCI7IHRoZW4KKyAgQUNfTVNHX1JFU1VMVCgkTUFHSUNfQ01EKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG5vKQorZmkKK19MVF9ERUNMKFtdLCBbTUFHSUNfQ01EXSwgWzBdLAorCSBbVXNlZCB0byBleGFtaW5lIGxpYnJhcmllcyB3aGVuIGZpbGVfbWFnaWNfY21kIGJlZ2lucyB3aXRoICJmaWxlIl0pZG5sCitdKSMgX0xUX1BBVEhfVE9PTF9QUkVGSVgKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19QQVRIX1RPT0xfUFJFRklYXSwgW19MVF9QQVRIX1RPT0xfUFJFRklYXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfUEFUSF9UT09MX1BSRUZJWF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTUFHSUMKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCBhIGZpbGUgcHJvZ3JhbSB3aGljaCBjYW4gcmVjb2duaXplIGEgc2hhcmVkIGxpYnJhcnkKK200X2RlZnVuKFtfTFRfUEFUSF9NQUdJQ10sCitbX0xUX1BBVEhfVE9PTF9QUkVGSVgoJHthY190b29sX3ByZWZpeH1maWxlLCAvdXNyL2JpbiRQQVRIX1NFUEFSQVRPUiRQQVRIKQoraWYgdGVzdCAteiAiJGx0X2N2X3BhdGhfTUFHSUNfQ01EIjsgdGhlbgorICBpZiB0ZXN0IC1uICIkYWNfdG9vbF9wcmVmaXgiOyB0aGVuCisgICAgX0xUX1BBVEhfVE9PTF9QUkVGSVgoZmlsZSwgL3Vzci9iaW4kUEFUSF9TRVBBUkFUT1IkUEFUSCkKKyAgZWxzZQorICAgIE1BR0lDX0NNRD06CisgIGZpCitmaQorXSkjIF9MVF9QQVRIX01BR0lDCisKKworIyBMVF9QQVRIX0xECisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gdGhlIEdOVSBvciBub24tR05VIGxpbmtlcgorQUNfREVGVU4oW0xUX1BBVEhfTERdLAorW0FDX1JFUVVJUkUoW0FDX1BST0dfQ0NdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0hPU1RdKWRubAorQUNfUkVRVUlSRShbQUNfQ0FOT05JQ0FMX0JVSUxEXSlkbmwKK200X3JlcXVpcmUoW19MVF9ERUNMX1NFRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCittNF9yZXF1aXJlKFtfTFRfUFJPR19FQ0hPX0JBQ0tTTEFTSF0pZG5sCisKK0FDX0FSR19XSVRIKFtnbnUtbGRdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLWdudS1sZF0sCisJW2Fzc3VtZSB0aGUgQyBjb21waWxlciB1c2VzIEdOVSBsZCBAPDpAZGVmYXVsdD1ub0A6PkBdKV0sCisgICAgW3Rlc3QgIiR3aXRodmFsIiA9IG5vIHx8IHdpdGhfZ251X2xkPXllc10sCisgICAgW3dpdGhfZ251X2xkPW5vXSlkbmwKKworYWNfcHJvZz1sZAoraWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKyAgIyBDaGVjayBpZiBnY2MgLXByaW50LXByb2ctbmFtZT1sZCBnaXZlcyBhIHBhdGguCisgIEFDX01TR19DSEVDS0lORyhbZm9yIGxkIHVzZWQgYnkgJENDXSkKKyAgY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqKQorICAgICMgZ2NjIGxlYXZlcyBhIHRyYWlsaW5nIGNhcnJpYWdlIHJldHVybiB3aGljaCB1cHNldHMgbWluZ3cKKyAgICBhY19wcm9nPWAoJENDIC1wcmludC1wcm9nLW5hbWU9bGQpIDI+JjUgfCB0ciAtZCAnXDAxNSdgIDs7CisgICopCisgICAgYWNfcHJvZz1gKCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkKSAyPiY1YCA7OworICBlc2FjCisgIGNhc2UgJGFjX3Byb2cgaW4KKyAgICAjIEFjY2VwdCBhYnNvbHV0ZSBwYXRocy4KKyAgICBbW1xcL11dKiB8ID86W1tcXC9dXSopCisgICAgICByZV9kaXJlbHQ9Jy9bW14vXV1bW14vXV0qL1wuXC4vJworICAgICAgIyBDYW5vbmljYWxpemUgdGhlIHBhdGhuYW1lIG9mIGxkCisgICAgICBhY19wcm9nPWAkRUNITyAiJGFjX3Byb2cifCAkU0VEICdzJVxcXFwlLyVnJ2AKKyAgICAgIHdoaWxlICRFQ0hPICIkYWNfcHJvZyIgfCAkR1JFUCAiJHJlX2RpcmVsdCIgPiAvZGV2L251bGwgMj4mMTsgZG8KKwlhY19wcm9nPWAkRUNITyAkYWNfcHJvZ3wgJFNFRCAicyUkcmVfZGlyZWx0JS8lImAKKyAgICAgIGRvbmUKKyAgICAgIHRlc3QgLXogIiRMRCIgJiYgTEQ9IiRhY19wcm9nIgorICAgICAgOzsKKyAgIiIpCisgICAgIyBJZiBpdCBmYWlscywgdGhlbiBwcmV0ZW5kIHdlIGFyZW4ndCB1c2luZyBHQ0MuCisgICAgYWNfcHJvZz1sZAorICAgIDs7CisgICopCisgICAgIyBJZiBpdCBpcyByZWxhdGl2ZSwgdGhlbiBzZWFyY2ggZm9yIHRoZSBmaXJzdCBsZCBpbiBQQVRILgorICAgIHdpdGhfZ251X2xkPXVua25vd24KKyAgICA7OworICBlc2FjCitlbGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3IgR05VIGxkXSkKK2Vsc2UKKyAgQUNfTVNHX0NIRUNLSU5HKFtmb3Igbm9uLUdOVSBsZF0pCitmaQorQUNfQ0FDSEVfVkFMKGx0X2N2X3BhdGhfTEQsCitbaWYgdGVzdCAteiAiJExEIjsgdGhlbgorICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgZm9yIGFjX2RpciBpbiAkUEFUSDsgZG8KKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICB0ZXN0IC16ICIkYWNfZGlyIiAmJiBhY19kaXI9LgorICAgIGlmIHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ciIHx8IHRlc3QgLWYgIiRhY19kaXIvJGFjX3Byb2ckYWNfZXhlZXh0IjsgdGhlbgorICAgICAgbHRfY3ZfcGF0aF9MRD0iJGFjX2Rpci8kYWNfcHJvZyIKKyAgICAgICMgQ2hlY2sgdG8gc2VlIGlmIHRoZSBwcm9ncmFtIGlzIEdOVSBsZC4gIEknZCByYXRoZXIgdXNlIC0tdmVyc2lvbiwKKyAgICAgICMgYnV0IGFwcGFyZW50bHkgc29tZSB2YXJpYW50cyBvZiBHTlUgbGQgb25seSBhY2NlcHQgLXYuCisgICAgICAjIEJyZWFrIG9ubHkgaWYgaXQgd2FzIHRoZSBHTlUvbm9uLUdOVSBsZCB0aGF0IHdlIHByZWZlci4KKyAgICAgIGNhc2UgYCIkbHRfY3ZfcGF0aF9MRCIgLXYgMj4mMSA8L2Rldi9udWxsYCBpbgorICAgICAgKkdOVSogfCAqJ3dpdGggQkZEJyopCisJdGVzdCAiJHdpdGhfZ251X2xkIiAhPSBubyAmJiBicmVhaworCTs7CisgICAgICAqKQorCXRlc3QgIiR3aXRoX2dudV9sZCIgIT0geWVzICYmIGJyZWFrCisJOzsKKyAgICAgIGVzYWMKKyAgICBmaQorICBkb25lCisgIElGUz0iJGx0X3NhdmVfaWZzIgorZWxzZQorICBsdF9jdl9wYXRoX0xEPSIkTEQiICMgTGV0IHRoZSB1c2VyIG92ZXJyaWRlIHRoZSB0ZXN0IHdpdGggYSBwYXRoLgorZmldKQorTEQ9IiRsdF9jdl9wYXRoX0xEIgoraWYgdGVzdCAtbiAiJExEIjsgdGhlbgorICBBQ19NU0dfUkVTVUxUKCRMRCkKK2Vsc2UKKyAgQUNfTVNHX1JFU1VMVChubykKK2ZpCit0ZXN0IC16ICIkTEQiICYmIEFDX01TR19FUlJPUihbbm8gYWNjZXB0YWJsZSBsZCBmb3VuZCBpbiBcJFBBVEhdKQorX0xUX1BBVEhfTERfR05VCitBQ19TVUJTVChbTERdKQorCitfTFRfVEFHREVDTChbXSwgW0xEXSwgWzFdLCBbVGhlIGxpbmtlciB1c2VkIHRvIGJ1aWxkIGxpYnJhcmllc10pCitdKSMgTFRfUEFUSF9MRAorCisjIE9sZCBuYW1lczoKK0FVX0FMSUFTKFtBTV9QUk9HX0xEXSwgW0xUX1BBVEhfTERdKQorQVVfQUxJQVMoW0FDX1BST0dfTERdLCBbTFRfUEFUSF9MRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FNX1BST0dfTERdLCBbXSkKK2RubCBBQ19ERUZVTihbQUNfUFJPR19MRF0sIFtdKQorCisKKyMgX0xUX1BBVEhfTERfR05VCisjLSAtLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9QQVRIX0xEX0dOVV0sCitbQUNfQ0FDSEVfQ0hFQ0soW2lmIHRoZSBsaW5rZXIgKCRMRCkgaXMgR05VIGxkXSwgbHRfY3ZfcHJvZ19nbnVfbGQsCitbIyBJJ2QgcmF0aGVyIHVzZSAtLXZlcnNpb24gaGVyZSwgYnV0IGFwcGFyZW50bHkgc29tZSBHTlUgbGRzIG9ubHkgYWNjZXB0IC12LgorY2FzZSBgJExEIC12IDI+JjEgPC9kZXYvbnVsbGAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBsdF9jdl9wcm9nX2dudV9sZD15ZXMKKyAgOzsKKyopCisgIGx0X2N2X3Byb2dfZ251X2xkPW5vCisgIDs7Citlc2FjXSkKK3dpdGhfZ251X2xkPSRsdF9jdl9wcm9nX2dudV9sZAorXSkjIF9MVF9QQVRIX0xEX0dOVQorCisKKyMgX0xUX0NNRF9SRUxPQUQKKyMgLS0tLS0tLS0tLS0tLS0KKyMgZmluZCByZWxvYWQgZmxhZyBmb3IgbGlua2VyCisjICAgLS0gUE9SVE1FIFNvbWUgbGlua2VycyBtYXkgbmVlZCBhIGRpZmZlcmVudCByZWxvYWQgZmxhZy4KK200X2RlZnVuKFtfTFRfQ01EX1JFTE9BRF0sCitbQUNfQ0FDSEVfQ0hFQ0soW2ZvciAkTEQgb3B0aW9uIHRvIHJlbG9hZCBvYmplY3QgZmlsZXNdLAorICBsdF9jdl9sZF9yZWxvYWRfZmxhZywKKyAgW2x0X2N2X2xkX3JlbG9hZF9mbGFnPSctciddKQorcmVsb2FkX2ZsYWc9JGx0X2N2X2xkX3JlbG9hZF9mbGFnCitjYXNlICRyZWxvYWRfZmxhZyBpbgorIiIgfCAiICIqKSA7OworKikgcmVsb2FkX2ZsYWc9IiAkcmVsb2FkX2ZsYWciIDs7Citlc2FjCityZWxvYWRfY21kcz0nJExEJHJlbG9hZF9mbGFnIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCitjYXNlICRob3N0X29zIGluCisgIGN5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHJlbG9hZF9jbWRzPWZhbHNlCisgICAgZmkKKyAgICA7OworICBkYXJ3aW4qKQorICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgICByZWxvYWRfY21kcz0nJExUQ0MgJExUQ0ZMQUdTIC1ub3N0ZGxpYiAke3dsfS1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisgICAgZWxzZQorICAgICAgcmVsb2FkX2NtZHM9JyRMRCRyZWxvYWRfZmxhZyAtbyAkb3V0cHV0JHJlbG9hZF9vYmpzJworICAgIGZpCisgICAgOzsKK2VzYWMKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2ZsYWddLCBbMV0sIFtIb3cgdG8gY3JlYXRlIHJlbG9hZGFibGUgb2JqZWN0IGZpbGVzXSlkbmwKK19MVF9UQUdERUNMKFtdLCBbcmVsb2FkX2NtZHNdLCBbMl0pZG5sCitdKSMgX0xUX0NNRF9SRUxPQUQKKworCisjIF9MVF9DSEVDS19NQUdJQ19NRVRIT0QKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBob3cgdG8gY2hlY2sgZm9yIGxpYnJhcnkgZGVwZW5kZW5jaWVzCisjICAtLSBQT1JUTUUgZmlsbCBpbiB3aXRoIHRoZSBkeW5hbWljIGxpYnJhcnkgY2hhcmFjdGVyaXN0aWNzCittNF9kZWZ1bihbX0xUX0NIRUNLX01BR0lDX01FVEhPRF0sCitbbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKQorbTRfcmVxdWlyZShbX0xUX0RFQ0xfT0JKRFVNUF0pCitBQ19DQUNIRV9DSEVDSyhbaG93IHRvIHJlY29nbml6ZSBkZXBlbmRlbnQgbGlicmFyaWVzXSwKK2x0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kLAorW2x0X2N2X2ZpbGVfbWFnaWNfY21kPSckTUFHSUNfQ01EJworbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9CitsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0ndW5rbm93bicKKyMgTmVlZCB0byBzZXQgdGhlIHByZWNlZGluZyB2YXJpYWJsZSBvbiBhbGwgcGxhdGZvcm1zIHRoYXQgc3VwcG9ydAorIyBpbnRlcmxpYnJhcnkgZGVwZW5kZW5jaWVzLgorIyAnbm9uZScgLS0gZGVwZW5kZW5jaWVzIG5vdCBzdXBwb3J0ZWQuCisjIGB1bmtub3duJyAtLSBzYW1lIGFzIG5vbmUsIGJ1dCBkb2N1bWVudHMgdGhhdCB3ZSByZWFsbHkgZG9uJ3Qga25vdy4KKyMgJ3Bhc3NfYWxsJyAtLSBhbGwgZGVwZW5kZW5jaWVzIHBhc3NlZCB3aXRoIG5vIGNoZWNrcy4KKyMgJ3Rlc3RfY29tcGlsZScgLS0gY2hlY2sgYnkgbWFraW5nIHRlc3QgcHJvZ3JhbS4KKyMgJ2ZpbGVfbWFnaWMgW1tyZWdleF1dJyAtLSBjaGVjayBieSBsb29raW5nIGZvciBmaWxlcyBpbiBsaWJyYXJ5IHBhdGgKKyMgd2hpY2ggcmVzcG9uZHMgdG8gdGhlICRmaWxlX21hZ2ljX2NtZCB3aXRoIGEgZ2l2ZW4gZXh0ZW5kZWQgcmVnZXguCisjIElmIHlvdSBoYXZlIGBmaWxlJyBvciBlcXVpdmFsZW50IG9uIHlvdXIgc3lzdGVtIGFuZCB5b3UncmUgbm90IHN1cmUKKyMgd2hldGhlciBgcGFzc19hbGwnIHdpbGwgKmFsd2F5cyogd29yaywgeW91IHByb2JhYmx5IHdhbnQgdGhpcyBvbmUuCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2FpeFtbNC05XV0qKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitiZW9zKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworYnNkaVtbNDVdXSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy91c3IvYmluL2ZpbGUgLUwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPS9zaGxpYi9saWJjLnNvCisgIDs7CisKK2N5Z3dpbiopCisgICMgZnVuY193aW4zMl9saWJpZCBpcyBhIHNoZWxsIGZ1bmN0aW9uIGRlZmluZWQgaW4gbHRtYWluLnNoCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIF54ODYgYXJjaGl2ZSBpbXBvcnR8Xng4NiBETEwnCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSdmdW5jX3dpbjMyX2xpYmlkJworICA7OworCittaW5ndyogfCBwdzMyKikKKyAgIyBCYXNlIE1TWVMvTWluR1cgZG8gbm90IHByb3ZpZGUgdGhlICdmaWxlJyBjb21tYW5kIG5lZWRlZCBieQorICAjIGZ1bmNfd2luMzJfbGliaWQgc2hlbGwgZnVuY3Rpb24sIHNvIHVzZSBhIHdlYWtlciB0ZXN0IGJhc2VkIG9uICdvYmpkdW1wJywKKyAgIyB1bmxlc3Mgd2UgZmluZCAnZmlsZScsIGZvciBleGFtcGxlIGJlY2F1c2Ugd2UgYXJlIGNyb3NzLWNvbXBpbGluZy4KKyAgIyBmdW5jX3dpbjMyX2xpYmlkIGFzc3VtZXMgQlNEIG5tLCBzbyBkaXNhbGxvdyBpdCBpZiB1c2luZyBNUyBkdW1wYmluLgorICBpZiAoIHRlc3QgIiRsdF9jdl9ubV9pbnRlcmZhY2UiID0gIkJTRCBubSIgJiYgZmlsZSAvICkgPi9kZXYvbnVsbCAyPiYxOyB0aGVuCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgXng4NiBhcmNoaXZlIGltcG9ydHxeeDg2IERMTCcKKyAgICBsdF9jdl9maWxlX21hZ2ljX2NtZD0nZnVuY193aW4zMl9saWJpZCcKKyAgZWxzZQorICAgICMgS2VlcCB0aGlzIHBhdHRlcm4gaW4gc3luYyB3aXRoIHRoZSBvbmUgaW4gZnVuY193aW4zMl9saWJpZC4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyBmaWxlIGZvcm1hdCAocGVpKi1pMzg2KC4qYXJjaGl0ZWN0dXJlOiBpMzg2KT98cGUtYXJtLXdpbmNlfHBlLXg4Ni02NCknCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9JyRPQkpEVU1QIC1mJworICBmaQorICA7OworCitjZWdjYyopCisgICMgdXNlIHRoZSB3ZWFrZXIgdGVzdCBiYXNlZCBvbiAnb2JqZHVtcCcuIFNlZSBtaW5ndyouCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIGZpbGUgZm9ybWF0IHBlLWFybS0uKmxpdHRsZSguKmFyY2hpdGVjdHVyZTogYXJtKT8nCisgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPSckT0JKRFVNUCAtZicKKyAgOzsKKworZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworZnJlZWJzZCogfCBkcmFnb25mbHkqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBjYXNlICRob3N0X2NwdSBpbgorICAgIGkqODYgKQorICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHRoZSBwcmVzZW5jZSBvZiBPcGVuQlNEIGhlcmUgd2FzIGEgbWlzdGFrZS4KKyAgICAgICMgTGV0J3MgYWNjZXB0IGJvdGggb2YgdGhlbSB1bnRpbCB0aGlzIGlzIGNsZWFyZWQgdXAuCisgICAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoRnJlZUJTRHxPcGVuQlNEfERyYWdvbkZseSkvaVtbMy05XV04NiAoY29tcGFjdCApP2RlbWFuZCBwYWdlZCBzaGFyZWQgbGlicmFyeScKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPS91c3IvYmluL2ZpbGUKKyAgICAgIGx0X2N2X2ZpbGVfbWFnaWNfdGVzdF9maWxlPWBlY2hvIC91c3IvbGliL2xpYmMuc28uKmAKKyAgICAgIDs7CisgICAgZXNhYworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgZmkKKyAgOzsKKworZ251KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworaGFpa3UqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitocHV4MTAuMjAqIHwgaHB1eDExKikKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBjYXNlICRob3N0X2NwdSBpbgorICBpYTY0KikKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nZmlsZV9tYWdpYyAoc1tbMC05XV1bWzAtOV1dW1swLTldXXxFTEYtW1swLTldXVtbMC05XV0pIHNoYXJlZCBvYmplY3QgZmlsZSAtIElBNjQnCisgICAgbHRfY3ZfZmlsZV9tYWdpY190ZXN0X2ZpbGU9L3Vzci9saWIvaHB1eDMyL2xpYmMuc28KKyAgICA7OworICBocHBhKjY0KikKKyAgICBbbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgKHNbMC05XVswLTldWzAtOV18RUxGWyAtXVswLTldWzAtOV0pKC1iaXQpPyggW0xNXVNCKT8gc2hhcmVkIG9iamVjdCggZmlsZSk/WywgLV0qIFBBLVJJU0MgWzAtOV1cLlswLTldJ10KKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9wYTIwXzY0L2xpYmMuc2wKKyAgICA7OworICAqKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIChzW1swLTldXVtbMC05XV1bWzAtOV1dfFBBLVJJU0NbWzAtOV1dXC5bWzAtOV1dKSBzaGFyZWQgbGlicmFyeScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJjLnNsCisgICAgOzsKKyAgZXNhYworICA7OworCitpbnRlcml4W1szLTldXSopCisgICMgUElDIGNvZGUgaXMgYnJva2VuIG9uIEludGVyaXggMy54LCB0aGF0J3Mgd2h5IHxcLmEgbm90IHxfcGljXC5hIGhlcmUKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xcLmEpJCcKKyAgOzsKKworaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgY2FzZSAkTEQgaW4KKyAgKi0zMnwqIi0zMiAiKSBsaWJtYWdpYz0zMi1iaXQ7OworICAqLW4zMnwqIi1uMzIgIikgbGlibWFnaWM9TjMyOzsKKyAgKi02NHwqIi02NCAiKSBsaWJtYWdpYz02NC1iaXQ7OworICAqKSBsaWJtYWdpYz1uZXZlci1tYXRjaDs7CisgIGVzYWMKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworIyBUaGlzIG11c3QgYmUgTGludXggRUxGLgorbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCituZXRic2QqKQorICBpZiBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX18gPiAvZGV2L251bGw7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJworICBlbHNlCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J21hdGNoX3BhdHRlcm4gL2xpYltbXi9dXSsoXC5zb3xfcGljXC5hKSQnCisgIGZpCisgIDs7CisKK25ld29zNiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChleGVjdXRhYmxlfGR5bmFtaWMgbGliKScKKyAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9L3Vzci9iaW4vZmlsZQorICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vdXNyL2xpYi9saWJubHMuc28KKyAgOzsKKworKm50byogfCAqcW54KikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworb3BlbmJzZCopCisgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8XC5zb3xfcGljXC5hKSQnCisgIGVsc2UKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0nbWF0Y2hfcGF0dGVybiAvbGliW1teL11dKyhcLnNvXC5bWzAtOV1dK1wuW1swLTldXSt8X3BpY1wuYSkkJworICBmaQorICA7OworCitvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3Jkb3MqKQorICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD1wYXNzX2FsbAorICA7OworCitzb2xhcmlzKikKKyAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgOzsKKworc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKiB8IHN5c3Y0KnV3MiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7CisKK3N5c3Y0IHwgc3lzdjQuMyopCisgIGNhc2UgJGhvc3RfdmVuZG9yIGluCisgIG1vdG9yb2xhKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPSdmaWxlX21hZ2ljIEVMRiBbWzAtOV1dW1swLTldXSotYml0IFtbTUxdXVNCIChzaGFyZWQgb2JqZWN0fGR5bmFtaWMgbGliKSBNW1swLTldXVtbMC05XV0qIFZlcnNpb24gW1swLTldXScKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT1gZWNobyAvdXNyL2xpYi9saWJjLnNvKmAKKyAgICA7OworICBuY3IpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBzZXF1ZW50KQorICAgIGx0X2N2X2ZpbGVfbWFnaWNfY21kPScvYmluL2ZpbGUnCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9J2ZpbGVfbWFnaWMgRUxGIFtbMC05XV1bWzAtOV1dKi1iaXQgW1tMTV1dU0IgKHNoYXJlZCBvYmplY3R8ZHluYW1pYyBsaWIgKScKKyAgICA7OworICBzbmkpCisgICAgbHRfY3ZfZmlsZV9tYWdpY19jbWQ9Jy9iaW4vZmlsZScKKyAgICBsdF9jdl9kZXBsaWJzX2NoZWNrX21ldGhvZD0iZmlsZV9tYWdpYyBFTEYgW1swLTldXVtbMC05XV0qLWJpdCBbW0xNXV1TQiBkeW5hbWljIGxpYiIKKyAgICBsdF9jdl9maWxlX21hZ2ljX3Rlc3RfZmlsZT0vbGliL2xpYmMuc28KKyAgICA7OworICBzaWVtZW5zKQorICAgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgICAgOzsKKyAgcGMpCisgICAgbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2Q9cGFzc19hbGwKKyAgICA7OworICBlc2FjCisgIDs7CisKK3RwZiopCisgIGx0X2N2X2RlcGxpYnNfY2hlY2tfbWV0aG9kPXBhc3NfYWxsCisgIDs7Citlc2FjCitdKQorCitmaWxlX21hZ2ljX2dsb2I9Cit3YW50X25vY2FzZWdsb2I9bm8KK2lmIHRlc3QgIiRidWlsZCIgPSAiJGhvc3QiOyB0aGVuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgbWluZ3cqIHwgcHczMiopCisgICAgaWYgKCBzaG9wdCB8IGdyZXAgbm9jYXNlZ2xvYiApID4vZGV2L251bGwgMj4mMTsgdGhlbgorICAgICAgd2FudF9ub2Nhc2VnbG9iPXllcworICAgIGVsc2UKKyAgICAgIGZpbGVfbWFnaWNfZ2xvYj1gZWNobyBhQWJCY0NkRGVFZkZnR2hIaUlqSmtLbExtTW5Ob09wUHFRclJzU3RUdVV2VndXeFh5WXpaIHwgJFNFRCAtZSAicy9cKC4uXCkvc1wvW1tcMV1dXC9bW1wxXV1cL2c7L2ciYAorICAgIGZpCisgICAgOzsKKyAgZXNhYworZmkKKworZmlsZV9tYWdpY19jbWQ9JGx0X2N2X2ZpbGVfbWFnaWNfY21kCitkZXBsaWJzX2NoZWNrX21ldGhvZD0kbHRfY3ZfZGVwbGlic19jaGVja19tZXRob2QKK3Rlc3QgLXogIiRkZXBsaWJzX2NoZWNrX21ldGhvZCIgJiYgZGVwbGlic19jaGVja19tZXRob2Q9dW5rbm93bgorCitfTFRfREVDTChbXSwgW2RlcGxpYnNfY2hlY2tfbWV0aG9kXSwgWzFdLAorICAgIFtNZXRob2QgdG8gY2hlY2sgd2hldGhlciBkZXBlbmRlbnQgbGlicmFyaWVzIGFyZSBzaGFyZWQgb2JqZWN0c10pCitfTFRfREVDTChbXSwgW2ZpbGVfbWFnaWNfY21kXSwgWzFdLAorICAgIFtDb21tYW5kIHRvIHVzZSB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK19MVF9ERUNMKFtdLCBbZmlsZV9tYWdpY19nbG9iXSwgWzFdLAorICAgIFtIb3cgdG8gZmluZCBwb3RlbnRpYWwgZmlsZXMgd2hlbiBkZXBsaWJzX2NoZWNrX21ldGhvZCA9ICJmaWxlX21hZ2ljIl0pCitfTFRfREVDTChbXSwgW3dhbnRfbm9jYXNlZ2xvYl0sIFsxXSwKKyAgICBbRmluZCBwb3RlbnRpYWwgZmlsZXMgdXNpbmcgbm9jYXNlZ2xvYiB3aGVuIGRlcGxpYnNfY2hlY2tfbWV0aG9kID0gImZpbGVfbWFnaWMiXSkKK10pIyBfTFRfQ0hFQ0tfTUFHSUNfTUVUSE9ECisKKworIyBMVF9QQVRIX05NCisjIC0tLS0tLS0tLS0KKyMgZmluZCB0aGUgcGF0aG5hbWUgdG8gYSBCU0QtIG9yIE1TLWNvbXBhdGlibGUgbmFtZSBsaXN0ZXIKK0FDX0RFRlVOKFtMVF9QQVRIX05NXSwKK1tBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgQlNELSBvciBNUy1jb21wYXRpYmxlIG5hbWUgbGlzdGVyIChubSldLCBsdF9jdl9wYXRoX05NLAorW2lmIHRlc3QgLW4gIiROTSI7IHRoZW4KKyAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGx0X2N2X3BhdGhfTk09IiROTSIKK2Vsc2UKKyAgbHRfbm1fdG9fY2hlY2s9IiR7YWNfdG9vbF9wcmVmaXh9bm0iCisgIGlmIHRlc3QgLW4gIiRhY190b29sX3ByZWZpeCIgJiYgdGVzdCAiJGJ1aWxkIiA9ICIkaG9zdCI7IHRoZW4KKyAgICBsdF9ubV90b19jaGVjaz0iJGx0X25tX3RvX2NoZWNrIG5tIgorICBmaQorICBmb3IgbHRfdG1wX25tIGluICRsdF9ubV90b19jaGVjazsgZG8KKyAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0kUEFUSF9TRVBBUkFUT1IKKyAgICBmb3IgYWNfZGlyIGluICRQQVRIIC91c3IvY2NzL2Jpbi9lbGYgL3Vzci9jY3MvYmluIC91c3IvdWNiIC9iaW47IGRvCisgICAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgICAgIHRlc3QgLXogIiRhY19kaXIiICYmIGFjX2Rpcj0uCisgICAgICB0bXBfbm09IiRhY19kaXIvJGx0X3RtcF9ubSIKKyAgICAgIGlmIHRlc3QgLWYgIiR0bXBfbm0iIHx8IHRlc3QgLWYgIiR0bXBfbm0kYWNfZXhlZXh0IiA7IHRoZW4KKwkjIENoZWNrIHRvIHNlZSBpZiB0aGUgbm0gYWNjZXB0cyBhIEJTRC1jb21wYXQgZmxhZy4KKwkjIEFkZGluZyB0aGUgYHNlZCAxcScgcHJldmVudHMgZmFsc2UgcG9zaXRpdmVzIG9uIEhQLVVYLCB3aGljaCBzYXlzOgorCSMgICBubTogdW5rbm93biBvcHRpb24gIkIiIGlnbm9yZWQKKwkjIFRydTY0J3Mgbm0gY29tcGxhaW5zIHRoYXQgL2Rldi9udWxsIGlzIGFuIGludmFsaWQgb2JqZWN0IGZpbGUKKwljYXNlIGAiJHRtcF9ubSIgLUIgL2Rldi9udWxsIDI+JjEgfCBzZWQgJzFxJ2AgaW4KKwkqL2Rldi9udWxsKiB8IConSW52YWxpZCBmaWxlIG9yIG9iamVjdCB0eXBlJyopCisJICBsdF9jdl9wYXRoX05NPSIkdG1wX25tIC1CIgorCSAgYnJlYWsKKwkgIDs7CisJKikKKwkgIGNhc2UgYCIkdG1wX25tIiAtcCAvZGV2L251bGwgMj4mMSB8IHNlZCAnMXEnYCBpbgorCSAgKi9kZXYvbnVsbCopCisJICAgIGx0X2N2X3BhdGhfTk09IiR0bXBfbm0gLXAiCisJICAgIGJyZWFrCisJICAgIDs7CisJICAqKQorCSAgICBsdF9jdl9wYXRoX05NPSR7bHRfY3ZfcGF0aF9OTT0iJHRtcF9ubSJ9ICMga2VlcCB0aGUgZmlyc3QgbWF0Y2gsIGJ1dAorCSAgICBjb250aW51ZSAjIHNvIHRoYXQgd2UgY2FuIHRyeSB0byBmaW5kIG9uZSB0aGF0IHN1cHBvcnRzIEJTRCBmbGFncworCSAgICA7OworCSAgZXNhYworCSAgOzsKKwllc2FjCisgICAgICBmaQorICAgIGRvbmUKKyAgICBJRlM9IiRsdF9zYXZlX2lmcyIKKyAgZG9uZQorICA6ICR7bHRfY3ZfcGF0aF9OTT1ub30KK2ZpXSkKK2lmIHRlc3QgIiRsdF9jdl9wYXRoX05NIiAhPSAibm8iOyB0aGVuCisgIE5NPSIkbHRfY3ZfcGF0aF9OTSIKK2Vsc2UKKyAgIyBEaWRuJ3QgZmluZCBhbnkgQlNEIGNvbXBhdGlibGUgbmFtZSBsaXN0ZXIsIGxvb2sgZm9yIGR1bXBiaW4uCisgIGlmIHRlc3QgLW4gIiREVU1QQklOIjsgdGhlbiA6CisgICAgIyBMZXQgdGhlIHVzZXIgb3ZlcnJpZGUgdGhlIHRlc3QuCisgIGVsc2UKKyAgICBBQ19DSEVDS19UT09MUyhEVU1QQklOLCBbZHVtcGJpbiAibGluayAtZHVtcCJdLCA6KQorICAgIGNhc2UgYCREVU1QQklOIC1zeW1ib2xzIC9kZXYvbnVsbCAyPiYxIHwgc2VkICcxcSdgIGluCisgICAgKkNPRkYqKQorICAgICAgRFVNUEJJTj0iJERVTVBCSU4gLXN5bWJvbHMiCisgICAgICA7OworICAgICopCisgICAgICBEVU1QQklOPToKKyAgICAgIDs7CisgICAgZXNhYworICBmaQorICBBQ19TVUJTVChbRFVNUEJJTl0pCisgIGlmIHRlc3QgIiREVU1QQklOIiAhPSAiOiI7IHRoZW4KKyAgICBOTT0iJERVTVBCSU4iCisgIGZpCitmaQordGVzdCAteiAiJE5NIiAmJiBOTT1ubQorQUNfU1VCU1QoW05NXSkKK19MVF9ERUNMKFtdLCBbTk1dLCBbMV0sIFtBIEJTRC0gb3IgTVMtY29tcGF0aWJsZSBuYW1lIGxpc3Rlcl0pZG5sCisKK0FDX0NBQ0hFX0NIRUNLKFt0aGUgbmFtZSBsaXN0ZXIgKCROTSkgaW50ZXJmYWNlXSwgW2x0X2N2X25tX2ludGVyZmFjZV0sCisgIFtsdF9jdl9ubV9pbnRlcmZhY2U9IkJTRCBubSIKKyAgZWNobyAiaW50IHNvbWVfdmFyaWFibGUgPSAwOyIgPiBjb25mdGVzdC4kYWNfZXh0CisgIChldmFsIGVjaG8gIlwiXCRhc19tZTokTElORU5POiAkYWNfY29tcGlsZVwiIiA+JkFTX01FU1NBR0VfTE9HX0ZEKQorICAoZXZhbCAiJGFjX2NvbXBpbGUiIDI+Y29uZnRlc3QuZXJyKQorICBjYXQgY29uZnRlc3QuZXJyID4mQVNfTUVTU0FHRV9MT0dfRkQKKyAgKGV2YWwgZWNobyAiXCJcJGFzX21lOiRMSU5FTk86ICROTSBcXFwiY29uZnRlc3QuJGFjX29iamV4dFxcXCJcIiIgPiZBU19NRVNTQUdFX0xPR19GRCkKKyAgKGV2YWwgIiROTSBcImNvbmZ0ZXN0LiRhY19vYmpleHRcIiIgMj5jb25mdGVzdC5lcnIgPiBjb25mdGVzdC5vdXQpCisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICAoZXZhbCBlY2hvICJcIlwkYXNfbWU6JExJTkVOTzogb3V0cHV0XCIiID4mQVNfTUVTU0FHRV9MT0dfRkQpCisgIGNhdCBjb25mdGVzdC5vdXQgPiZBU19NRVNTQUdFX0xPR19GRAorICBpZiAkR1JFUCAnRXh0ZXJuYWwuKnNvbWVfdmFyaWFibGUnIGNvbmZ0ZXN0Lm91dCA+IC9kZXYvbnVsbDsgdGhlbgorICAgIGx0X2N2X25tX2ludGVyZmFjZT0iTVMgZHVtcGJpbiIKKyAgZmkKKyAgcm0gLWYgY29uZnRlc3QqXSkKK10pIyBMVF9QQVRIX05NCisKKyMgT2xkIG5hbWVzOgorQVVfQUxJQVMoW0FNX1BST0dfTk1dLCBbTFRfUEFUSF9OTV0pCitBVV9BTElBUyhbQUNfUFJPR19OTV0sIFtMVF9QQVRIX05NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fUFJPR19OTV0sIFtdKQorZG5sIEFDX0RFRlVOKFtBQ19QUk9HX05NXSwgW10pCisKKyMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaG93IHRvIGRldGVybWluZSB0aGUgbmFtZSBvZiB0aGUgc2hhcmVkIGxpYnJhcnkKKyMgYXNzb2NpYXRlZCB3aXRoIGEgc3BlY2lmaWMgbGluayBsaWJyYXJ5LgorIyAgLS0gUE9SVE1FIGZpbGwgaW4gd2l0aCB0aGUgZHluYW1pYyBsaWJyYXJ5IGNoYXJhY3RlcmlzdGljcworbTRfZGVmdW4oW19MVF9DSEVDS19TSEFSRURMSUJfRlJPTV9MSU5LTElCXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pCittNF9yZXF1aXJlKFtfTFRfREVDTF9PQkpEVU1QXSkKK200X3JlcXVpcmUoW19MVF9ERUNMX0RMTFRPT0xdKQorQUNfQ0FDSEVfQ0hFQ0soW2hvdyB0byBhc3NvY2lhdGUgcnVudGltZSBhbmQgbGluayBsaWJyYXJpZXNdLAorbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQsCitbbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9J3Vua25vd24nCisKK2Nhc2UgJGhvc3Rfb3MgaW4KK2N5Z3dpbiogfCBtaW5ndyogfCBwdzMyKiB8IGNlZ2NjKikKKyAgIyB0d28gZGlmZmVyZW50IHNoZWxsIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGx0bWFpbi5zaAorICAjIGRlY2lkZSB3aGljaCB0byB1c2UgYmFzZWQgb24gY2FwYWJpbGl0aWVzIG9mICRETExUT09MCisgIGNhc2UgYCRETExUT09MIC0taGVscCAyPiYxYCBpbgorICAqLS1pZGVudGlmeS1zdHJpY3QqKQorICAgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPWZ1bmNfY3lnbWluZ19kbGxfZm9yX2ltcGxpYgorICAgIDs7CisgICopCisgICAgbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9ZnVuY19jeWdtaW5nX2RsbF9mb3JfaW1wbGliX2ZhbGxiYWNrCisgICAgOzsKKyAgZXNhYworICA7OworKikKKyAgIyBmYWxsYmFjazogYXNzdW1lIGxpbmtsaWIgSVMgc2hhcmVkbGliCisgIGx0X2N2X3NoYXJlZGxpYl9mcm9tX2xpbmtsaWJfY21kPSIkRUNITyIKKyAgOzsKK2VzYWMKK10pCitzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZD0kbHRfY3Zfc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQKK3Rlc3QgLXogIiRzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZCIgJiYgc2hhcmVkbGliX2Zyb21fbGlua2xpYl9jbWQ9JEVDSE8KKworX0xUX0RFQ0woW10sIFtzaGFyZWRsaWJfZnJvbV9saW5rbGliX2NtZF0sIFsxXSwKKyAgICBbQ29tbWFuZCB0byBhc3NvY2lhdGUgc2hhcmVkIGFuZCBsaW5rIGxpYnJhcmllc10pCitdKSMgX0xUX0NIRUNLX1NIQVJFRExJQl9GUk9NX0xJTktMSUIKKworCisjIF9MVF9QQVRIX01BTklGRVNUX1RPT0wKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBsb2NhdGUgdGhlIG1hbmlmZXN0IHRvb2wKK200X2RlZnVuKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSwKK1tBQ19DSEVDS19UT09MKE1BTklGRVNUX1RPT0wsIG10LCA6KQordGVzdCAteiAiJE1BTklGRVNUX1RPT0wiICYmIE1BTklGRVNUX1RPT0w9bXQKK0FDX0NBQ0hFX0NIRUNLKFtpZiAkTUFOSUZFU1RfVE9PTCBpcyBhIG1hbmlmZXN0IHRvb2xdLCBbbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sXSwKKyAgW2x0X2N2X3BhdGhfbWFpbmZlc3RfdG9vbD1ubworICBlY2hvICIkYXNfbWU6JExJTkVOTzogJE1BTklGRVNUX1RPT0wgJy0/JyIgPiZBU19NRVNTQUdFX0xPR19GRAorICAkTUFOSUZFU1RfVE9PTCAnLT8nIDI+Y29uZnRlc3QuZXJyID4gY29uZnRlc3Qub3V0CisgIGNhdCBjb25mdGVzdC5lcnIgPiZBU19NRVNTQUdFX0xPR19GRAorICBpZiAkR1JFUCAnTWFuaWZlc3QgVG9vbCcgY29uZnRlc3Qub3V0ID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9tYWluZmVzdF90b29sPXllcworICBmaQorICBybSAtZiBjb25mdGVzdCpdKQoraWYgdGVzdCAieCRsdF9jdl9wYXRoX21haW5mZXN0X3Rvb2wiICE9IHh5ZXM7IHRoZW4KKyAgTUFOSUZFU1RfVE9PTD06CitmaQorX0xUX0RFQ0woW10sIFtNQU5JRkVTVF9UT09MXSwgWzFdLCBbTWFuaWZlc3QgdG9vbF0pZG5sCitdKSMgX0xUX1BBVEhfTUFOSUZFU1RfVE9PTAorCisKKyMgTFRfTElCX00KKyMgLS0tLS0tLS0KKyMgY2hlY2sgZm9yIG1hdGggbGlicmFyeQorQUNfREVGVU4oW0xUX0xJQl9NXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitMSUJNPQorY2FzZSAkaG9zdCBpbgorKi0qLWJlb3MqIHwgKi0qLWNlZ2NjKiB8ICotKi1jeWd3aW4qIHwgKi0qLWhhaWt1KiB8ICotKi1wdzMyKiB8ICotKi1kYXJ3aW4qKQorICAjIFRoZXNlIHN5c3RlbSBkb24ndCBoYXZlIGxpYm0sIG9yIGRvbid0IG5lZWQgaXQKKyAgOzsKKyotbmNyLXN5c3Y0LjMqKQorICBBQ19DSEVDS19MSUIobXcsIF9td3ZhbGlkY2hlY2tsLCBMSUJNPSItbG13IikKKyAgQUNfQ0hFQ0tfTElCKG0sIGNvcywgTElCTT0iJExJQk0gLWxtIikKKyAgOzsKKyopCisgIEFDX0NIRUNLX0xJQihtLCBjb3MsIExJQk09Ii1sbSIpCisgIDs7Citlc2FjCitBQ19TVUJTVChbTElCTV0pCitdKSMgTFRfTElCX00KKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtBQ19DSEVDS19MSUJNXSwgW0xUX0xJQl9NXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQUNfQ0hFQ0tfTElCTV0sIFtdKQorCisKKyMgX0xUX0NPTVBJTEVSX05PX1JUVEkoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZ1bihbX0xUX0NPTVBJTEVSX05PX1JUVEldLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorCitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9CisKK2lmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgIG52Y2MqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1YY29tcGlsZXIgLWZuby1idWlsdGluJyA7OworICAqKQorICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0nIC1mbm8tYnVpbHRpbicgOzsKKyAgZXNhYworCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBzdXBwb3J0cyAtZm5vLXJ0dGkgLWZuby1leGNlcHRpb25zXSwKKyAgICBsdF9jdl9wcm9nX2NvbXBpbGVyX3J0dGlfZXhjZXB0aW9ucywKKyAgICBbLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9uc10sIFtdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkgLWZuby1ydHRpIC1mbm8tZXhjZXB0aW9ucyJdKQorZmkKK19MVF9UQUdERUNMKFtub19idWlsdGluX2ZsYWddLCBbbHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWddLCBbMV0sCisJW0NvbXBpbGVyIGZsYWcgdG8gdHVybiBvZmYgYnVpbHRpbiBmdW5jdGlvbnNdKQorXSkjIF9MVF9DT01QSUxFUl9OT19SVFRJCisKKworIyBfTFRfQ01EX0dMT0JBTF9TWU1CT0xTCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZnVuKFtfTFRfQ01EX0dMT0JBTF9TWU1CT0xTXSwKK1tBQ19SRVFVSVJFKFtBQ19DQU5PTklDQUxfSE9TVF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0NDXSlkbmwKK0FDX1JFUVVJUkUoW0FDX1BST0dfQVdLXSlkbmwKK0FDX1JFUVVJUkUoW0xUX1BBVEhfTk1dKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9MRF0pZG5sCittNF9yZXF1aXJlKFtfTFRfREVDTF9TRURdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCisKKyMgQ2hlY2sgZm9yIGNvbW1hbmQgdG8gZ3JhYiB0aGUgcmF3IHN5bWJvbCBuYW1lIGZvbGxvd2VkIGJ5IEMgc3ltYm9sIGZyb20gbm0uCitBQ19NU0dfQ0hFQ0tJTkcoW2NvbW1hbmQgdG8gcGFyc2UgJE5NIG91dHB1dCBmcm9tICRjb21waWxlciBvYmplY3RdKQorQUNfQ0FDSEVfVkFMKFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlXSwKK1sKKyMgVGhlc2UgYXJlIHNhbmUgZGVmYXVsdHMgdGhhdCB3b3JrIG9uIGF0IGxlYXN0IGEgZmV3IG9sZCBzeXN0ZW1zLgorIyBbVGhleSBjb21lIGZyb20gVWx0cml4LiAgV2hhdCBjb3VsZCBiZSBvbGRlciB0aGFuIFVsdHJpeD8hISA7KV0KKworIyBDaGFyYWN0ZXIgY2xhc3MgZGVzY3JpYmluZyBOTSBnbG9iYWwgc3ltYm9sIGNvZGVzLgorc3ltY29kZT0nW1tCQ0RFR1JTVF1dJworCisjIFJlZ2V4cCB0byBtYXRjaCBzeW1ib2xzIHRoYXQgY2FuIGJlIGFjY2Vzc2VkIGRpcmVjdGx5IGZyb20gQy4KK3N5bXBhdD0nXChbW19BLVphLXpdXVtbX0EtWmEtejAtOV1dKlwpJworCisjIERlZmluZSBzeXN0ZW0tc3BlY2lmaWMgdmFyaWFibGVzLgorY2FzZSAkaG9zdF9vcyBpbgorYWl4KikKKyAgc3ltY29kZT0nW1tCQ0RUXV0nCisgIDs7CitjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgIHN5bWNvZGU9J1tbQUJDREdJU1RXXV0nCisgIDs7CitocHV4KikKKyAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICBzeW1jb2RlPSdbW0FCQ0RFR1JTVF1dJworICBmaQorICA7OworaXJpeCogfCBub25zdG9wdXgqKQorICBzeW1jb2RlPSdbW0JDREVHUlNUXV0nCisgIDs7Citvc2YqKQorICBzeW1jb2RlPSdbW0JDREVHUVJTVF1dJworICA7Oworc29sYXJpcyopCisgIHN5bWNvZGU9J1tbQkRSVF1dJworICA7Oworc2NvMy4ydjUqKQorICBzeW1jb2RlPSdbW0RUXV0nCisgIDs7CitzeXN2NC4ydXcyKikKKyAgc3ltY29kZT0nW1tEVF1dJworICA7Oworc3lzdjUqIHwgc2NvNXY2KiB8IHVuaXh3YXJlKiB8IE9wZW5VTklYKikKKyAgc3ltY29kZT0nW1tBQkRUXV0nCisgIDs7CitzeXN2NCkKKyAgc3ltY29kZT0nW1tERk5TVFVdXScKKyAgOzsKK2VzYWMKKworIyBJZiB3ZSdyZSB1c2luZyBHTlUgbm0sIHRoZW4gdXNlIGl0cyBzdGFuZGFyZCBzeW1ib2wgY29kZXMuCitjYXNlIGAkTk0gLVYgMj4mMWAgaW4KKypHTlUqIHwgKid3aXRoIEJGRCcqKQorICBzeW1jb2RlPSdbW0FCQ0RHSVJTVFddXScgOzsKK2VzYWMKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbi4KKyMgU29tZSBzeXN0ZW1zIChlc3AuIG9uIGlhNjQpIGxpbmsgZGF0YSBhbmQgY29kZSBzeW1ib2xzIGRpZmZlcmVudGx5LAorIyBzbyB1c2UgdGhpcyBnZW5lcmFsIGFwcHJvYWNoLgorbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9InNlZCAtbiAtZSAncy9eVCAuKiBcKC4qXCkkL2V4dGVybiBpbnQgXDEoKTsvcCcgLWUgJ3MvXiRzeW1jb2RlKiAuKiBcKC4qXCkkL2V4dGVybiBjaGFyIFwxOy9wJyIKKworIyBUcmFuc2Zvcm0gYW4gZXh0cmFjdGVkIHN5bWJvbCBsaW5lIGludG8gc3ltYm9sIG5hbWUgYW5kIHN5bWJvbCBhZGRyZXNzCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzcz0ic2VkIC1uIC1lICdzL146IFwoW1teIF1dKlwpW1sgXV0qJC8gIHtcXFwiXDFcXFwiLCAodm9pZCAqKSAwfSwvcCcgLWUgJ3MvXiRzeW1jb2RlKiBcKFtbXiBdXSpcKSBcKFtbXiBdXSpcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvcCciCitsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc19saWJfcHJlZml4PSJzZWQgLW4gLWUgJ3MvXjogXChbW14gXV0qXClbWyBdXSokLyAge1xcXCJcMVxcXCIsICh2b2lkICopIDB9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwobGliW1teIF1dKlwpJC8gIHtcIlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyAtZSAncy9eJHN5bWNvZGUqIFwoW1teIF1dKlwpIFwoW1teIF1dKlwpJC8gIHtcImxpYlwyXCIsICh2b2lkICopIFwmXDJ9LC9wJyIKKworIyBIYW5kbGUgQ1JMRiBpbiBtaW5ndyB0b29sIGNoYWluCitvcHRfY3I9CitjYXNlICRidWlsZF9vcyBpbgorbWluZ3cqKQorICBvcHRfY3I9YCRFQ0hPICd4XHswLDFcfScgfCB0ciB4ICdcMDE1J2AgIyBvcHRpb24gY3IgaW4gcmVnZXhwCisgIDs7Citlc2FjCisKKyMgVHJ5IHdpdGhvdXQgYSBwcmVmaXggdW5kZXJzY29yZSwgdGhlbiB3aXRoIGl0LgorZm9yIGFjX3N5bXByZnggaW4gIiIgIl8iOyBkbworCisgICMgVHJhbnNmb3JtIHN5bWNvZGUsIHN5bXBhdCwgYW5kIHN5bXByZnggaW50byBhIHJhdyBzeW1ib2wgYW5kIGEgQyBzeW1ib2wuCisgIHN5bXhmcm09IlxcMSAkYWNfc3ltcHJmeFxcMiBcXDIiCisKKyAgIyBXcml0ZSB0aGUgcmF3IGFuZCBDIGlkZW50aWZpZXJzLgorICBpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICAgICMgRmFrZSBpdCBmb3IgZHVtcGJpbiBhbmQgc2F5IFQgZm9yIGFueSBub24tc3RhdGljIGZ1bmN0aW9uCisgICAgIyBhbmQgRCBmb3IgYW55IGdsb2JhbCB2YXJpYWJsZS4KKyAgICAjIEFsc28gZmluZCBDKysgYW5kIF9fZmFzdGNhbGwgc3ltYm9scyBmcm9tIE1TVkMrKywKKyAgICAjIHdoaWNoIHN0YXJ0IHdpdGggQCBvciA/LgorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRBV0sgWyciXAorIiAgICAge2xhc3Rfc2VjdGlvbj1zZWN0aW9uOyBzZWN0aW9uPVwkIDN9OyJcCisiICAgICAvU2VjdGlvbiBsZW5ndGggLiojcmVsb2NzLioocGljayBhbnkpL3toaWRlW2xhc3Rfc2VjdGlvbl09MX07IlwKKyIgICAgIFwkIDAhfi9FeHRlcm5hbCAqXHwve25leHR9OyJcCisiICAgICAvIDArIFVOREVGIC97bmV4dH07IC8gVU5ERUYgXChbXnxdXCkqKCkve25leHR9OyJcCisiICAgICB7aWYoaGlkZVtzZWN0aW9uXSkgbmV4dH07IlwKKyIgICAgIHtmPTB9OyBcJCAwfi9cKFwpLipcfC97Zj0xfTsge3ByaW50ZiBmID8gXCJUIFwiIDogXCJEIFwifTsiXAorIiAgICAge3NwbGl0KFwkIDAsIGEsIC9cfHxcci8pOyBzcGxpdChhWzJdLCBzKX07IlwKKyIgICAgIHNbMV1+L15bQD9dL3twcmludCBzWzFdLCBzWzFdOyBuZXh0fTsiXAorIiAgICAgc1sxXX5wcmZ4IHtzcGxpdChzWzFdLHQsXCJAXCIpOyBwcmludCB0WzFdLCBzdWJzdHIodFsxXSxsZW5ndGgocHJmeCkpfSJcCisiICAgICAnIHByZng9XiRhY19zeW1wcmZ4XSIKKyAgZWxzZQorICAgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9InNlZCAtbiAtZSAncy9eLipbWwkgXV1cKCRzeW1jb2RlJHN5bWNvZGUqXClbWwkgXV1bWwkgXV0qJGFjX3N5bXByZngkc3ltcGF0JG9wdF9jciQvJHN5bXhmcm0vcCciCisgIGZpCisgIGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGU9IiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIHwgc2VkICcvIF9fZ251X2x0by9kJyIKKworICAjIENoZWNrIHRvIHNlZSB0aGF0IHRoZSBwaXBlIHdvcmtzIGNvcnJlY3RseS4KKyAgcGlwZV93b3Jrcz1ubworCisgIHJtIC1mIGNvbmZ0ZXN0KgorICBjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorY2hhciBubV90ZXN0X3ZhcjsKK3ZvaWQgbm1fdGVzdF9mdW5jKHZvaWQpOwordm9pZCBubV90ZXN0X2Z1bmModm9pZCl7fQorI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKK2ludCBtYWluKCl7bm1fdGVzdF92YXI9J2EnO25tX3Rlc3RfZnVuYygpO3JldHVybigwKTt9CitfTFRfRU9GCisKKyAgaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgICAjIE5vdyB0cnkgdG8gZ3JhYiB0aGUgc3ltYm9scy4KKyAgICBubGlzdD1jb25mdGVzdC5ubQorICAgIGlmIEFDX1RSWV9FVkFMKE5NIGNvbmZ0ZXN0LiRhY19vYmpleHQgXHwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiBcPiAkbmxpc3QpICYmIHRlc3QgLXMgIiRubGlzdCI7IHRoZW4KKyAgICAgICMgVHJ5IHNvcnRpbmcgYW5kIHVuaXF1aWZ5aW5nIHRoZSBvdXRwdXQuCisgICAgICBpZiBzb3J0ICIkbmxpc3QiIHwgdW5pcSA+ICIkbmxpc3QiVDsgdGhlbgorCW12IC1mICIkbmxpc3QiVCAiJG5saXN0IgorICAgICAgZWxzZQorCXJtIC1mICIkbmxpc3QiVAorICAgICAgZmkKKworICAgICAgIyBNYWtlIHN1cmUgdGhhdCB3ZSBzbmFnZ2VkIGFsbCB0aGUgc3ltYm9scyB3ZSBuZWVkLgorICAgICAgaWYgJEdSRVAgJyBubV90ZXN0X3ZhciQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwlpZiAkR1JFUCAnIG5tX3Rlc3RfZnVuYyQnICIkbmxpc3QiID4vZGV2L251bGw7IHRoZW4KKwkgIGNhdCA8PF9MVF9FT0YgPiBjb25mdGVzdC4kYWNfZXh0CisvKiBLZWVwIHRoaXMgY29kZSBpbiBzeW5jIGJldHdlZW4gbGlidG9vbC5tNCwgbHRtYWluLCBsdF9zeXN0ZW0uaCwgYW5kIHRlc3RzLiAgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfX0NZR1dJTl9fKSB8fCBkZWZpbmVkKF9XSU4zMl9XQ0UpCisvKiBEQVRBIGltcG9ydHMgZnJvbSBETExzIG9uIFdJTjMyIGNvbid0IGJlIGNvbnN0LCBiZWNhdXNlIHJ1bnRpbWUKKyAgIHJlbG9jYXRpb25zIGFyZSBwZXJmb3JtZWQgLS0gc2VlIGxkJ3MgZG9jdW1lbnRhdGlvbiBvbiBwc2V1ZG8tcmVsb2NzLiAgKi8KKyMgZGVmaW5lIExUQCZ0QF9ETFNZTV9DT05TVAorI2VsaWYgZGVmaW5lZChfX29zZl9fKQorLyogVGhpcyBzeXN0ZW0gZG9lcyBub3QgY29wZSB3ZWxsIHdpdGggcmVsb2NhdGlvbnMgaW4gY29uc3QgZGF0YS4gICovCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QKKyNlbHNlCisjIGRlZmluZSBMVEAmdEBfRExTWU1fQ09OU1QgY29uc3QKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK19MVF9FT0YKKwkgICMgTm93IGdlbmVyYXRlIHRoZSBzeW1ib2wgZmlsZS4KKwkgIGV2YWwgIiRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbCInIDwgIiRubGlzdCIgfCAkR1JFUCAtdiBtYWluID4+IGNvbmZ0ZXN0LiRhY19leHQnCisKKwkgIGNhdCA8PF9MVF9FT0YgPj4gY29uZnRlc3QuJGFjX2V4dAorCisvKiBUaGUgbWFwcGluZyBiZXR3ZWVuIHN5bWJvbCBuYW1lcyBhbmQgc3ltYm9scy4gICovCitMVEAmdEBfRExTWU1fQ09OU1Qgc3RydWN0IHsKKyAgY29uc3QgY2hhciAqbmFtZTsKKyAgdm9pZCAgICAgICAqYWRkcmVzczsKK30KK2x0X19QUk9HUkFNX19MVFhfcHJlbG9hZGVkX3N5bWJvbHNbW11dID0KK3sKKyAgeyAiQFBST0dSQU1AIiwgKHZvaWQgKikgMCB9LAorX0xUX0VPRgorCSAgJFNFRCAicy9eJHN5bWNvZGUkc3ltY29kZSogXCguKlwpIFwoLipcKSQvICB7XCJcMlwiLCAodm9pZCAqKSBcJlwyfSwvIiA8ICIkbmxpc3QiIHwgJEdSRVAgLXYgbWFpbiA+PiBjb25mdGVzdC4kYWNfZXh0CisJICBjYXQgPDxcX0xUX0VPRiA+PiBjb25mdGVzdC4kYWNfZXh0CisgIHswLCAodm9pZCAqKSAwfQorfTsKKworLyogVGhpcyB3b3JrcyBhcm91bmQgYSBwcm9ibGVtIGluIEZyZWVCU0QgbGlua2VyICovCisjaWZkZWYgRlJFRUJTRF9XT1JLQVJPVU5ECitzdGF0aWMgY29uc3Qgdm9pZCAqbHRfcHJlbG9hZGVkX3NldHVwKCkgeworICByZXR1cm4gbHRfX1BST0dSQU1fX0xUWF9wcmVsb2FkZWRfc3ltYm9sczsKK30KKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorX0xUX0VPRgorCSAgIyBOb3cgdHJ5IGxpbmtpbmcgdGhlIHR3byBmaWxlcy4KKwkgIG12IGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRzdG0uJGFjX29iamV4dAorCSAgbHRfZ2xvYnN5bV9zYXZlX0xJQlM9JExJQlMKKwkgIGx0X2dsb2JzeW1fc2F2ZV9DRkxBR1M9JENGTEFHUworCSAgTElCUz0iY29uZnRzdG0uJGFjX29iamV4dCIKKwkgIENGTEFHUz0iJENGTEFHUyRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfbm9fYnVpbHRpbl9mbGFnLCAkMSkiCisJICBpZiBBQ19UUllfRVZBTChhY19saW5rKSAmJiB0ZXN0IC1zIGNvbmZ0ZXN0JHthY19leGVleHR9OyB0aGVuCisJICAgIHBpcGVfd29ya3M9eWVzCisJICBmaQorCSAgTElCUz0kbHRfZ2xvYnN5bV9zYXZlX0xJQlMKKwkgIENGTEFHUz0kbHRfZ2xvYnN5bV9zYXZlX0NGTEFHUworCWVsc2UKKwkgIGVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfZnVuYyBpbiAkbmxpc3QiID4mQVNfTUVTU0FHRV9MT0dfRkQKKwlmaQorICAgICAgZWxzZQorCWVjaG8gImNhbm5vdCBmaW5kIG5tX3Rlc3RfdmFyIGluICRubGlzdCIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgICAgZmkKKyAgICBlbHNlCisgICAgICBlY2hvICJjYW5ub3QgcnVuICRsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF9waXBlIiA+JkFTX01FU1NBR0VfTE9HX0ZECisgICAgZmkKKyAgZWxzZQorICAgIGVjaG8gIiRwcm9nbmFtZTogZmFpbGVkIHByb2dyYW0gd2FzOiIgPiZBU19NRVNTQUdFX0xPR19GRAorICAgIGNhdCBjb25mdGVzdC4kYWNfZXh0ID4mNQorICBmaQorICBybSAtcmYgY29uZnRlc3QqIGNvbmZ0c3QqCisKKyAgIyBEbyBub3QgdXNlIHRoZSBnbG9iYWxfc3ltYm9sX3BpcGUgdW5sZXNzIGl0IHdvcmtzLgorICBpZiB0ZXN0ICIkcGlwZV93b3JrcyIgPSB5ZXM7IHRoZW4KKyAgICBicmVhaworICBlbHNlCisgICAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZT0KKyAgZmkKK2RvbmUKK10pCitpZiB0ZXN0IC16ICIkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZSI7IHRoZW4KKyAgbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2w9CitmaQoraWYgdGVzdCAteiAiJGx0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3BpcGUkbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfdG9fY2RlY2wiOyB0aGVuCisgIEFDX01TR19SRVNVTFQoZmFpbGVkKQorZWxzZQorICBBQ19NU0dfUkVTVUxUKG9rKQorZmkKKworIyBSZXNwb25zZSBmaWxlIHN1cHBvcnQuCitpZiB0ZXN0ICIkbHRfY3Zfbm1faW50ZXJmYWNlIiA9ICJNUyBkdW1wYmluIjsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2VsaWYgJE5NIC0taGVscCAyPi9kZXYvbnVsbCB8IGdyZXAgJ1tbQF1dRklMRScgPi9kZXYvbnVsbDsgdGhlbgorICBubV9maWxlX2xpc3Rfc3BlYz0nQCcKK2ZpCisKK19MVF9ERUNMKFtnbG9iYWxfc3ltYm9sX3BpcGVdLCBbbHRfY3Zfc3lzX2dsb2JhbF9zeW1ib2xfcGlwZV0sIFsxXSwKKyAgICBbVGFrZSB0aGUgb3V0cHV0IG9mIG5tIGFuZCBwcm9kdWNlIGEgbGlzdGluZyBvZiByYXcgc3ltYm9scyBhbmQgQyBuYW1lc10pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFtsdF9jdl9zeXNfZ2xvYmFsX3N5bWJvbF90b19jZGVjbF0sIFsxXSwKKyAgICBbVHJhbnNmb3JtIHRoZSBvdXRwdXQgb2Ygbm0gaW4gYSBwcm9wZXIgQyBkZWNsYXJhdGlvbl0pCitfTFRfREVDTChbZ2xvYmFsX3N5bWJvbF90b19jX25hbWVfYWRkcmVzc10sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzXSwgWzFdLAorICAgIFtUcmFuc2Zvcm0gdGhlIG91dHB1dCBvZiBubSBpbiBhIEMgbmFtZSBhZGRyZXNzIHBhaXJdKQorX0xUX0RFQ0woW2dsb2JhbF9zeW1ib2xfdG9fY19uYW1lX2FkZHJlc3NfbGliX3ByZWZpeF0sCisgICAgW2x0X2N2X3N5c19nbG9iYWxfc3ltYm9sX3RvX2NfbmFtZV9hZGRyZXNzX2xpYl9wcmVmaXhdLCBbMV0sCisgICAgW1RyYW5zZm9ybSB0aGUgb3V0cHV0IG9mIG5tIGluIGEgQyBuYW1lIGFkZHJlc3MgcGFpciB3aGVuIGxpYiBwcmVmaXggaXMgbmVlZGVkXSkKK19MVF9ERUNMKFtdLCBbbm1fZmlsZV9saXN0X3NwZWNdLCBbMV0sCisgICAgW1NwZWNpZnkgZmlsZW5hbWUgY29udGFpbmluZyBpbnB1dCBmaWxlcyBmb3IgJE5NXSkKK10pICMgX0xUX0NNRF9HTE9CQUxfU1lNQk9MUworCisKKyMgX0xUX0NPTVBJTEVSX1BJQyhbVEFHTkFNRV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmdW4oW19MVF9DT01QSUxFUl9QSUNdLAorW200X3JlcXVpcmUoW19MVF9UQUdfQ09NUElMRVJdKWRubAorX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CitfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisKK200X2lmKFskMV0sIFtDWFhdLCBbCisgICMgQysrIHNwZWNpZmljIGNhc2VzIGZvciBwaWMsIHN0YXRpYywgd2wsIGV0Yy4KKyAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKyAgICAgICMgVGhpcyBoYWNrIGlzIHNvIHRoYXQgdGhlIHNvdXJjZSBmaWxlIGNhbiB0ZWxsIHdoZXRoZXIgaXQgaXMgYmVpbmcKKyAgICAgICMgYnVpbHQgZm9yIGluY2x1c2lvbiBpbiBhIGRsbCAoYW5kIHNob3VsZCBleHBvcnQgc3ltYm9scyBmb3IgZXhhbXBsZSkuCisgICAgICAjIEFsdGhvdWdoIHRoZSBjeWd3aW4gZ2NjIGlnbm9yZXMgLWZQSUMsIHN0aWxsIG5lZWQgdGhpcyBmb3Igb2xkLXN0eWxlCisgICAgICAjICgtLWRpc2FibGUtYXV0by1pbXBvcnQpIGxpYnJhcmllcworICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKyAgICBkYXJ3aW4qIHwgcmhhcHNvZHkqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgb24gdGhpcyBwbGF0Zm9ybQorICAgICAgIyBDb21tb24gc3ltYm9scyBub3QgYWxsb3dlZCBpbiBNSF9EWUxJQiBmaWxlcworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZm5vLWNvbW1vbicKKyAgICAgIDs7CisgICAgKmRqZ3BwKikKKyAgICAgICMgREpHUFAgZG9lcyBub3Qgc3VwcG9ydCBzaGFyZWQgbGlicmFyaWVzIGF0IGFsbAorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPQorICAgICAgOzsKKyAgICBoYWlrdSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSGFpa3UuCisgICAgICAjIFRoZSAiLXN0YXRpYyIgZmxhZyBleGlzdHMsIGJ1dCBpcyBicm9rZW4uCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9CisgICAgICA7OworICAgIGludGVyaXhbWzMtOV1dKikKKyAgICAgICMgSW50ZXJpeCAzLnggZ2NjIC1mcGljLy1mUElDIG9wdGlvbnMgZ2VuZXJhdGUgYnJva2VuIGNvZGUuCisgICAgICAjIEluc3RlYWQsIHdlIHJlbG9jYXRlIHNoYXJlZCBsaWJyYXJpZXMgYXQgcnVudGltZS4KKyAgICAgIDs7CisgICAgc3lzdjQqTVAqKQorICAgICAgaWYgdGVzdCAtZCAvdXNyL25lYzsgdGhlbgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0tS2NvbmZvcm1fcGljCisgICAgICBmaQorICAgICAgOzsKKyAgICBocHV4KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IGZvciA2NC1iaXQgUEEgSFAtVVgsIGJ1dCBub3QgZm9yIDMyLWJpdAorICAgICAgIyBQQSBIUC1VWC4gIE9uIElBNjQgSFAtVVgsIFBJQyBpcyB0aGUgZGVmYXVsdCBidXQgdGhlIHBpYyBmbGFnCisgICAgICAjIHNldHMgdGhlIGRlZmF1bHQgVExTIG1vZGVsIGFuZCBhZmZlY3RzIGlubGluaW5nLgorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIGhwcGEqNjQqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisgICAgKnFueCogfCAqbnRvKikKKyAgICAgICMgUU5YIHVzZXMgR05VIEMrKywgYnV0IG5lZWQgdG8gZGVmaW5lIC1zaGFyZWQgb3B0aW9uIHRvbywgb3RoZXJ3aXNlCisgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDIC1zaGFyZWQnCisgICAgICA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworICAgICAgOzsKKyAgICBlc2FjCisgIGVsc2UKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXhbWzQtOV1dKikKKwkjIEFsbCBBSVggY29kZSBpcyBQSUMuCisJaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkgICMgQUlYIDUgbm93IHN1cHBvcnRzIElBNjQgcHJvY2Vzc29yCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCWVsc2UKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLWJuc28gLWJJOi9saWIvc3lzY2FsbHMuZXhwJworCWZpCisJOzsKKyAgICAgIGNob3J1cyopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwljeGNoNjgqKQorCSAgIyBHcmVlbiBIaWxscyBDKysgQ29tcGlsZXIKKwkgICMgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSItLW5vX2F1dG9faW5zdGFudGlhdGlvbiAtdSBfX21haW4gLXUgX19wcmVtYWluIC11IF9hYm9ydCAtciAkQ09PTF9ESVIvbGliL2xpYk9yYi5hICRNVk1FX0RJUi9saWIvQ0MvbGliQy5hICRNVk1FX0RJUi9saWIvY2xhc3NpeC9saWJjeC5zLmEiCisJICA7OworCWVzYWMKKwk7OworICAgICAgbWluZ3cqIHwgY3lnd2luKiB8IG9zMiogfCBwdzMyKiB8IGNlZ2NjKikKKwkjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisJIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKwltNF9pZihbJDFdLCBbR0NKXSwgW10sCisJICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctRERMTF9FWFBPUlQnXSkKKwk7OworICAgICAgZGd1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIGVjKysqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgZ2hjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXBpYycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisJIyBGcmVlQlNEIHVzZXMgR05VIEMrKworCTs7CisgICAgICBocHV4OSogfCBocHV4MTAqIHwgaHB1eDExKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPScke3dsfS1hICR7d2x9YXJjaGl2ZScKKwkgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwkgICAgZmkKKwkgICAgOzsKKwkgIGFDQyopCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICBocHBhKjY0KnxpYTY0KikKKwkgICAgICAjICtaIHRoZSBkZWZhdWx0CisJICAgICAgOzsKKwkgICAgKikKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9JytaJworCSAgICAgIDs7CisJICAgIGVzYWMKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBpbnRlcml4KikKKwkjIFRoaXMgaXMgYzg5LCB3aGljaCBpcyBNUyBWaXN1YWwgQysrIChubyBzaGFyZWQgbGlicykKKwkjIEFueW9uZSB3YW50cyB0byBkbyBhIHBvcnQ/CisJOzsKKyAgICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIENDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgICMgQ0MgcGljIGZsYWcgLUtQSUMgaXMgdGhlIGRlZmF1bHQuCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBLQ0MqKQorCSAgICAjIEtBSSBDKysgQ29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICA7OworCSAgZWNwYyogKQorCSAgICAjIG9sZCBJbnRlbCBDKysgZm9yIHg4Nl82NCB3aGljaCBzdGlsbCBzdXBwb3J0ZWQgLUtQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBpY3BjKiApCisJICAgICMgSW50ZWwgQysrLCB1c2VkIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIEdDQy4KKwkgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1mUElDJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1zdGF0aWMnCisJICAgIDs7CisJICBwZ0NDKiB8IHBnY3BwKikKKwkgICAgIyBQb3J0bGFuZCBHcm91cCBDKysgY29tcGlsZXIKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgIDs7CisJICBjeHgqKQorCSAgICAjIENvbXBhcSBDKysKKwkgICAgIyBNYWtlIHN1cmUgdGhlIFBJQyBmbGFnIGlzIGVtcHR5LiAgSXQgYXBwZWFycyB0aGF0IGFsbCBBbHBoYQorCSAgICAjIExpbnV4IGFuZCBDb21wYXEgVHJ1NjQgVW5peCBvYmplY3RzIGFyZSBQSUMuCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0KKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKwkgICAgOzsKKwkgIHhsYyogfCB4bEMqIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopCisJICAgICMgSUJNIFhMIDguMCwgOS4wIG9uIFBQQyBhbmQgQmx1ZUdlbmUKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLXFwaWMnCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXFzdGF0aWNsaW5rJworCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisJICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgICA7OworCSAgICBlc2FjCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBseW54b3MqKQorCTs7CisgICAgICBtODhrKikKKwk7OworICAgICAgbXZzKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgY3h4KikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctVyBjLGV4cG9ydGFsbCcKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBuZXRic2QqKQorCTs7CisgICAgICAqcW54KiB8ICpudG8qKQorICAgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgICAjIGl0IHdpbGwgY29yZWR1bXAuCisgICAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgICAgOzsKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgS0NDKikKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy0tYmFja2VuZCAtV2wsJworCSAgICA7OworCSAgUkNDKikKKwkgICAgIyBSYXRpb25hbCBDKysgMi40LjEKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICA7OworCSAgY3h4KikKKwkgICAgIyBEaWdpdGFsL0NvbXBhcSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICAgICMgTWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBpcyBlbXB0eS4gIEl0IGFwcGVhcnMgdGhhdCBhbGwgQWxwaGEKKwkgICAgIyBMaW51eCBhbmQgQ29tcGFxIFRydTY0IFVuaXggb2JqZWN0cyBhcmUgUElDLgorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgcHNvcyopCisJOzsKKyAgICAgIHNvbGFyaXMqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyogfCBzdW5DQyopCisJICAgICMgU3VuIEMrKyA0LjIsIDUueCBhbmQgQ2VudGVybGluZSBDKysKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICcKKwkgICAgOzsKKwkgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLVBJQycKKwkgICAgOzsKKwkgICopCisJICAgIDs7CisJZXNhYworCTs7CisgICAgICBzdW5vczQqKQorCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisJICBDQyopCisJICAgICMgU3VuIEMrKyA0LngKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgICA7OworCSAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1waWMnCisJICAgIDs7CisJICAqKQorCSAgICA7OworCWVzYWMKKwk7OworICAgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKwkgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHRhbmRlbSopCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwkgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgICA7OworCSAgKikKKwkgICAgOzsKKwllc2FjCisJOzsKKyAgICAgIHZ4d29ya3MqKQorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm8KKwk7OworICAgIGVzYWMKKyAgZmkKK10sCitbCisgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKyAgICAgICMgQWxsIEFJWCBjb2RlIGlzIFBJQy4KKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBBSVggNSBub3cgc3VwcG9ydHMgSUE2NCBwcm9jZXNzb3IKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgICAgOzsKKyAgICAgIG02OGspCisgICAgICAgICAgICAjIEZJWE1FOiB3ZSBuZWVkIGF0IGxlYXN0IDY4MDIwIGNvZGUgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllcywgYnV0CisgICAgICAgICAgICAjIGFkZGluZyB0aGUgYC1tNjgwMjAnIGZsYWcgdG8gR0NDIHByZXZlbnRzIGJ1aWxkaW5nIGFueXRoaW5nIGJldHRlciwKKyAgICAgICAgICAgICMgbGlrZSBgLW02ODA0MCcuCisgICAgICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1tNjgwMjAgLXJlc2lkZW50MzIgLW1hbHdheXMtcmVzdG9yZS1hNCcKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBiZW9zKiB8IGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCogfCBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgdGhlc2UgT1Nlcy4KKyAgICAgIDs7CisKKyAgICBtaW5ndyogfCBjeWd3aW4qIHwgcHczMiogfCBvczIqIHwgY2VnY2MqKQorICAgICAgIyBUaGlzIGhhY2sgaXMgc28gdGhhdCB0aGUgc291cmNlIGZpbGUgY2FuIHRlbGwgd2hldGhlciBpdCBpcyBiZWluZworICAgICAgIyBidWlsdCBmb3IgaW5jbHVzaW9uIGluIGEgZGxsIChhbmQgc2hvdWxkIGV4cG9ydCBzeW1ib2xzIGZvciBleGFtcGxlKS4KKyAgICAgICMgQWx0aG91Z2ggdGhlIGN5Z3dpbiBnY2MgaWdub3JlcyAtZlBJQywgc3RpbGwgbmVlZCB0aGlzIGZvciBvbGQtc3R5bGUKKyAgICAgICMgKC0tZGlzYWJsZS1hdXRvLWltcG9ydCkgbGlicmFyaWVzCisgICAgICBtNF9pZihbJDFdLCBbR0NKXSwgW10sCisJW19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLURETExfRVhQT1JUJ10pCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgICMgUElDIGlzIHRoZSBkZWZhdWx0IG9uIHRoaXMgcGxhdGZvcm0KKyAgICAgICMgQ29tbW9uIHN5bWJvbHMgbm90IGFsbG93ZWQgaW4gTUhfRFlMSUIgZmlsZXMKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZuby1jb21tb24nCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIEhhaWt1LgorICAgICAgIyBUaGUgIi1zdGF0aWMiIGZsYWcgZXhpc3RzLCBidXQgaXMgYnJva2VuLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPQorICAgICAgOzsKKworICAgIGhwdXgqKQorICAgICAgIyBQSUMgaXMgdGhlIGRlZmF1bHQgZm9yIDY0LWJpdCBQQSBIUC1VWCwgYnV0IG5vdCBmb3IgMzItYml0CisgICAgICAjIFBBIEhQLVVYLiAgT24gSUE2NCBIUC1VWCwgUElDIGlzIHRoZSBkZWZhdWx0IGJ1dCB0aGUgcGljIGZsYWcKKyAgICAgICMgc2V0cyB0aGUgZGVmYXVsdCBUTFMgbW9kZWwgYW5kIGFmZmVjdHMgaW5saW5pbmcuCisgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgaHBwYSo2NCopCisJIyArWiB0aGUgZGVmYXVsdAorCTs7CisgICAgICAqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICAjIEludGVyaXggMy54IGdjYyAtZnBpYy8tZlBJQyBvcHRpb25zIGdlbmVyYXRlIGJyb2tlbiBjb2RlLgorICAgICAgIyBJbnN0ZWFkLCB3ZSByZWxvY2F0ZSBzaGFyZWQgbGlicmFyaWVzIGF0IHJ1bnRpbWUuCisgICAgICA7OworCisgICAgbXNkb3NkamdwcCopCisgICAgICAjIEp1c3QgYmVjYXVzZSB3ZSB1c2UgR0NDIGRvZXNuJ3QgbWVhbiB3ZSBzdWRkZW5seSBnZXQgc2hhcmVkIGxpYnJhcmllcworICAgICAgIyBvbiBzeXN0ZW1zIHRoYXQgZG9uJ3Qgc3VwcG9ydCB0aGVtLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgZW5hYmxlX3NoYXJlZD1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICAjIFFOWCB1c2VzIEdOVSBDKyssIGJ1dCBuZWVkIHRvIGRlZmluZSAtc2hhcmVkIG9wdGlvbiB0b28sIG90aGVyd2lzZQorICAgICAgIyBpdCB3aWxsIGNvcmVkdW1wLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQyAtc2hhcmVkJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWM7IHRoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9LUtjb25mb3JtX3BpYworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZlBJQycKKyAgICAgIDs7CisgICAgZXNhYworCisgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICBudmNjKikgIyBDdWRhIENvbXBpbGVyIERyaXZlciAyLjIKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctWGxpbmtlciAnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1YY29tcGlsZXIgLWZQSUMnCisgICAgICA7OworICAgIGVzYWMKKyAgZWxzZQorICAgICMgUE9SVE1FIENoZWNrIGZvciBmbGFnIHRvIHBhc3MgbGlua2VyIGZsYWdzIHRocm91Z2ggdGhlIHN5c3RlbSBjb21waWxlci4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4KikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKwkjIEFJWCA1IG5vdyBzdXBwb3J0cyBJQTY0IHByb2Nlc3NvcgorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctYm5zbyAtYkk6L2xpYi9zeXNjYWxscy5leHAnCisgICAgICBmaQorICAgICAgOzsKKworICAgIG1pbmd3KiB8IGN5Z3dpbiogfCBwdzMyKiB8IG9zMiogfCBjZWdjYyopCisgICAgICAjIFRoaXMgaGFjayBpcyBzbyB0aGF0IHRoZSBzb3VyY2UgZmlsZSBjYW4gdGVsbCB3aGV0aGVyIGl0IGlzIGJlaW5nCisgICAgICAjIGJ1aWx0IGZvciBpbmNsdXNpb24gaW4gYSBkbGwgKGFuZCBzaG91bGQgZXhwb3J0IHN5bWJvbHMgZm9yIGV4YW1wbGUpLgorICAgICAgbTRfaWYoWyQxXSwgW0dDSl0sIFtdLAorCVtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1ERExMX0VYUE9SVCddKQorICAgICAgOzsKKworICAgIGhwdXg5KiB8IGhwdXgxMCogfCBocHV4MTEqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAjIFBJQyBpcyB0aGUgZGVmYXVsdCBmb3IgSUE2NCBIUC1VWCBhbmQgNjQtYml0IEhQLVVYLCBidXQKKyAgICAgICMgbm90IGZvciBQQSBIUC1VWC4KKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBocHBhKjY0KnxpYTY0KikKKwkjICtaIHRoZSBkZWZhdWx0CisJOzsKKyAgICAgICopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPScrWicKKwk7OworICAgICAgZXNhYworICAgICAgIyBJcyB0aGVyZSBhIGJldHRlciBsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYyB0aGF0IHdvcmtzIHdpdGggdGhlIGJ1bmRsZWQgQ0M/CisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9JyR7d2x9LWEgJHt3bH1hcmNoaXZlJworICAgICAgOzsKKworICAgIGlyaXg1KiB8IGlyaXg2KiB8IG5vbnN0b3B1eCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgUElDICh3aXRoIC1LUElDKSBpcyB0aGUgZGVmYXVsdC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgbGludXgqIHwgaypic2QqLWdudSB8IGtvcGVuc29sYXJpcyotZ251KQorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICMgb2xkIEludGVsIGZvciB4ODZfNjQgd2hpY2ggc3RpbGwgc3VwcG9ydGVkIC1LUElDLgorICAgICAgZWNjKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLXN0YXRpYycKKyAgICAgICAgOzsKKyAgICAgICMgaWNjIHVzZWQgdG8gYmUgaW5jb21wYXRpYmxlIHdpdGggR0NDLgorICAgICAgIyBJQ0MgMTAgZG9lc24ndCBhY2NlcHQgLUtQSUMgYW55IG1vcmUuCisgICAgICBpY2MqIHwgaWZvcnQqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctc3RhdGljJworICAgICAgICA7OworICAgICAgIyBMYWhleSBGb3J0cmFuIDguMS4KKyAgICAgIGxmOTUqKQorCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworCV9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLS1zaGFyZWQnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctLXN0YXRpYycKKwk7OworICAgICAgbmFnZm9yKikKKwkjIE5BRyBGb3J0cmFuIGNvbXBpbGVyCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwtV2wsLCcKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1QSUMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwk7OworICAgICAgcGdjYyogfCBwZ2Y3NyogfCBwZ2Y5MCogfCBwZ2Y5NSogfCBwZ2ZvcnRyYW4qKQorICAgICAgICAjIFBvcnRsYW5kIEdyb3VwIGNvbXBpbGVycyAoKm5vdCogdGhlIFBlbnRpdW0gZ2NjIGNvbXBpbGVyLAorCSMgd2hpY2ggbG9va3MgdG8gYmUgYSBkZWFkIHByb2plY3QpCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctZnBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgICA7OworICAgICAgY2NjKikKKyAgICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisgICAgICAgICMgQWxsIEFscGhhIGNvZGUgaXMgUElDLgorICAgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1ub25fc2hhcmVkJworICAgICAgICA7OworICAgICAgeGwqIHwgYmd4bCogfCBiZ2YqIHwgbXBpeGwqKQorCSMgSUJNIFhMIEMgOC4wL0ZvcnRyYW4gMTAuMSwgMTEuMSBvbiBQUEMgYW5kIEJsdWVHZW5lCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcXBpYycKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1xc3RhdGljbGluaycKKwk7OworICAgICAgKikKKwljYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKwkqU3VuXCBGKiB8ICpTdW4qRm9ydHJhbiopCisJICAjIFN1biBGb3J0cmFuIDguMyBwYXNzZXMgYWxsIHVucmVjb2duaXplZCBmbGFncyB0byB0aGUgbGlua2VyCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPScnCisJICA7OworCSpTdW5cIEMqKQorCSAgIyBTdW4gQyA1LjkKKwkgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisJICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworCSAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1XbCwnCisJICA7OworCWVzYWMKKwk7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIG5ld3NvczYpCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqbnRvKiB8ICpxbngqKQorICAgICAgIyBRTlggdXNlcyBHTlUgQysrLCBidXQgbmVlZCB0byBkZWZpbmUgLXNoYXJlZCBvcHRpb24gdG9vLCBvdGhlcndpc2UKKyAgICAgICMgaXQgd2lsbCBjb3JlZHVtcC4KKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLWZQSUMgLXNoYXJlZCcKKyAgICAgIDs7CisKKyAgICBvc2YzKiB8IG9zZjQqIHwgb3NmNSopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgICMgQWxsIE9TRi8xIGNvZGUgaXMgUElDLgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctbm9uX3NoYXJlZCcKKyAgICAgIDs7CisKKyAgICByZG9zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLW5vbl9zaGFyZWQnCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICBmNzcqIHwgZjkwKiB8IGY5NSogfCBzdW5mNzcqIHwgc3VuZjkwKiB8IHN1bmY5NSopCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSk9Jy1Rb3B0aW9uIGxkICc7OworICAgICAgKikKKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCc7OworICAgICAgZXNhYworICAgICAgOzsKKworICAgIHN1bm9zNCopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVFvcHRpb24gbGQgJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctUElDJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICBzeXN2NCB8IHN5c3Y0LjJ1dzIqIHwgc3lzdjQuMyopCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfd2wsICQxKT0nLVdsLCcKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0nLUtQSUMnCisgICAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfc3RhdGljLCAkMSk9Jy1Cc3RhdGljJworICAgICAgOzsKKworICAgIHN5c3Y0Kk1QKikKKyAgICAgIGlmIHRlc3QgLWQgL3Vzci9uZWMgO3RoZW4KKwlfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9Jy1LY29uZm9ybV9waWMnCisJX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgdW5peHdhcmUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KiB8IE9wZW5VTklYKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctS1BJQycKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKT0nLUJzdGF0aWMnCisgICAgICA7OworCisgICAgdW5pY29zKikKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpPSctV2wsJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpPSctcGljJworICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPSctQnN0YXRpYycKKyAgICAgIDs7CisKKyAgICAqKQorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX2Nhbl9idWlsZF9zaGFyZWQsICQxKT1ubworICAgICAgOzsKKyAgICBlc2FjCisgIGZpCitdKQorY2FzZSAkaG9zdF9vcyBpbgorICAjIEZvciBwbGF0Zm9ybXMgd2hpY2ggZG8gbm90IHN1cHBvcnQgUElDLCAtRFBJQyBpcyBtZWFuaW5nbGVzczoKKyAgKmRqZ3BwKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9IiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSlAJnRAbTRfaWYoWyQxXSxbXSxbIC1EUElDXSxbbTRfaWYoWyQxXSxbQ1hYXSxbIC1EUElDXSxbXSldKSIKKyAgICA7OworZXNhYworCitBQ19DQUNIRV9DSEVDSyhbZm9yICRjb21waWxlciBvcHRpb24gdG8gcHJvZHVjZSBQSUNdLAorICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSwKKyAgW19MVF9UQUdWQVIobHRfY3ZfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpXSkKK19MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0kX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpYywgJDEpCisKKyMKKyMgQ2hlY2sgdG8gbWFrZSBzdXJlIHRoZSBQSUMgZmxhZyBhY3R1YWxseSB3b3Jrcy4KKyMKK2lmIHRlc3QgLW4gIiRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9PUFRJT04oW2lmICRjb21waWxlciBQSUMgZmxhZyAkX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3BpYywgJDEpIHdvcmtzXSwKKyAgICBbX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX3BpY193b3JrcywgJDEpXSwKKyAgICBbJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKUAmdEBtNF9pZihbJDFdLFtdLFsgLURQSUNdLFttNF9pZihbJDFdLFtDWFhdLFsgLURQSUNdLFtdKV0pXSwgW10sCisgICAgW2Nhc2UgJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKSBpbgorICAgICAiIiB8ICIgIiopIDs7CisgICAgICopIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9waWMsICQxKT0iICRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkiIDs7CisgICAgIGVzYWNdLAorICAgIFtfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSk9CisgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9jYW5fYnVpbGRfc2hhcmVkLCAkMSk9bm9dKQorZmkKK19MVF9UQUdERUNMKFtwaWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3BpY10sIFsxXSwKKwlbQWRkaXRpb25hbCBjb21waWxlciBmbGFncyBmb3IgYnVpbGRpbmcgbGlicmFyeSBvYmplY3RzXSkKKworX0xUX1RBR0RFQ0woW3dsXSwgW2x0X3Byb2dfY29tcGlsZXJfd2xdLCBbMV0sCisJW0hvdyB0byBwYXNzIGEgbGlua2VyIGZsYWcgdGhyb3VnaCB0aGUgY29tcGlsZXJdKQorIworIyBDaGVjayB0byBtYWtlIHN1cmUgdGhlIHN0YXRpYyBmbGFnIGFjdHVhbGx5IHdvcmtzLgorIword2w9JF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl93bCwgJDEpIGV2YWwgbHRfdG1wX3N0YXRpY19mbGFnPVwiJF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9zdGF0aWMsICQxKVwiCitfTFRfTElOS0VSX09QVElPTihbaWYgJGNvbXBpbGVyIHN0YXRpYyBmbGFnICRsdF90bXBfc3RhdGljX2ZsYWcgd29ya3NdLAorICBfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfc3RhdGljX3dvcmtzLCAkMSksCisgICRsdF90bXBfc3RhdGljX2ZsYWcsCisgIFtdLAorICBbX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3N0YXRpYywgJDEpPV0pCitfTFRfVEFHREVDTChbbGlua19zdGF0aWNfZmxhZ10sIFtsdF9wcm9nX2NvbXBpbGVyX3N0YXRpY10sIFsxXSwKKwlbQ29tcGlsZXIgZmxhZyB0byBwcmV2ZW50IGR5bmFtaWMgbGlua2luZ10pCitdKSMgX0xUX0NPTVBJTEVSX1BJQworCisKKyMgX0xUX0xJTktFUl9TSExJQlMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFNlZSBpZiB0aGUgbGlua2VyIHN1cHBvcnRzIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXMuCittNF9kZWZ1bihbX0xUX0xJTktFUl9TSExJQlNdLAorW0FDX1JFUVVJUkUoW0xUX1BBVEhfTERdKWRubAorQUNfUkVRVUlSRShbTFRfUEFUSF9OTV0pZG5sCittNF9yZXF1aXJlKFtfTFRfUEFUSF9NQU5JRkVTVF9UT09MXSlkbmwKK200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfU0VEXSlkbmwKK200X3JlcXVpcmUoW19MVF9DTURfR0xPQkFMX1NZTUJPTFNdKWRubAorbTRfcmVxdWlyZShbX0xUX1RBR19DT01QSUxFUl0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlICRjb21waWxlciBsaW5rZXIgKCRMRCkgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCittNF9pZihbJDFdLCBbQ1hYXSwgWworICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGV4Y2x1ZGVfZXhwc3ltcywgJDEpPVsnX0dMT0JBTF9PRkZTRVRfVEFCTEVffF9HTE9CQUxfX0ZbSURdXy4qJ10KKyAgY2FzZSAkaG9zdF9vcyBpbgorICBhaXhbWzQtOV1dKikKKyAgICAjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKyAgICAjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisgICAgIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsIGRlZmluZWQKKyAgICAjIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorICAgIGlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKyAgICBmaQorICAgIDs7CisgIHB3MzIqKQorICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSIkbHRkbGxfY21kcyIKKyAgICA7OworICBjeWd3aW4qIHwgbWluZ3cqIHwgY2VnY2MqKQorICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgY2wqKSA7OworICAgICopCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEIC1lICdcJycvXltbQkNER1JTXV1bWyBdXS9zLy4qW1sgXV1cKFtbXiBdXSpcKS9cMSBEQVRBLztzL14uKltbIF1dX19ubV9fXChbW14gXV0qXClbWyBdXVtbXiBdXSovXDEgREFUQS87L15JW1sgXV0vZDsvXltbQUlUV11dW1sgXV0vcy8uKiAvLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKyAgICAgIF9MVF9UQUdWQVIoZXhjbHVkZV9leHBzeW1zLCAkMSk9WydbX10rR0xPQkFMX09GRlNFVF9UQUJMRV98W19dK0dMT0JBTF9fW0ZJRF1fLip8W19dK2hlYWRfW0EtWmEtejAtOV9dK19kbGx8W0EtWmEtejAtOV9dK19kbGxfaW5hbWUnXQorICAgICAgOzsKKyAgICBlc2FjCisgICAgOzsKKyAgKikKKyAgICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgIDs7CisgIGVzYWMKK10sIFsKKyAgcnVucGF0aF92YXI9CisgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KKyAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT1ubworICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPQorICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPQorICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NICRsaWJvYmpzICRjb252ZW5pZW5jZSB8ICRnbG9iYWxfc3ltYm9sX3BpcGUgfCAkU0VEICdcJydzLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CisgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT1ubworICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorICBfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCisgIF9MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9CisgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9leHBzeW1zX2NtZHMsICQxKT0KKyAgX0xUX1RBR1ZBUih0aHJlYWRfc2FmZV9mbGFnX3NwZWMsICQxKT0KKyAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAjIGluY2x1ZGVfZXhwc3ltcyBzaG91bGQgYmUgYSBsaXN0IG9mIHNwYWNlLXNlcGFyYXRlZCBzeW1ib2xzIHRvIGJlICphbHdheXMqCisgICMgaW5jbHVkZWQgaW4gdGhlIHN5bWJvbCBsaXN0CisgIF9MVF9UQUdWQVIoaW5jbHVkZV9leHBzeW1zLCAkMSk9CisgICMgZXhjbHVkZV9leHBzeW1zIGNhbiBiZSBhbiBleHRlbmRlZCByZWdleHAgb2Ygc3ltYm9scyB0byBleGNsdWRlCisgICMgaXQgd2lsbCBiZSB3cmFwcGVkIGJ5IGAgKCcgYW5kIGApJCcsIHNvIG9uZSBtdXN0IG5vdCBtYXRjaCBiZWdpbm5pbmcgb3IKKyAgIyBlbmQgb2YgbGluZS4gIEV4YW1wbGU6IGBhfGJjfC4qZC4qJyB3aWxsIGV4Y2x1ZGUgdGhlIHN5bWJvbHMgYGEnIGFuZCBgYmMnLAorICAjIGFzIHdlbGwgYXMgYW55IHN5bWJvbCB0aGF0IGNvbnRhaW5zIGBkJy4KKyAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ19HTE9CQUxfT0ZGU0VUX1RBQkxFX3xfR0xPQkFMX19GW0lEXV8uKiddCisgICMgQWx0aG91Z2ggX0dMT0JBTF9PRkZTRVRfVEFCTEVfIGlzIGEgdmFsaWQgc3ltYm9sIEMgbmFtZSwgbW9zdCBhLm91dAorICAjIHBsYXRmb3JtcyAoYWIpdXNlIGl0IGluIFBJQyBjb2RlLCBidXQgdGhlaXIgbGlua2VycyBnZXQgY29uZnVzZWQgaWYKKyAgIyB0aGUgc3ltYm9sIGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZC4gIFNpbmNlIHBvcnRhYmxlIGNvZGUgY2Fubm90CisgICMgcmVseSBvbiB0aGlzIHN5bWJvbCBuYW1lLCBpdCdzIHByb2JhYmx5IGZpbmUgdG8gbmV2ZXIgaW5jbHVkZSBpdCBpbgorICAjIHByZWxvYWRlZCBzeW1ib2wgdGFibGVzLgorICAjIEV4Y2x1ZGUgc2hhcmVkIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24vZmluYWxpemF0aW9uIHN5bWJvbHMuCitkbmwgTm90ZSBhbHNvIGFkanVzdCBleGNsdWRlX2V4cHN5bXMgZm9yIEMrKyBhYm92ZS4KKyAgZXh0cmFjdF9leHBzeW1zX2NtZHM9CisKKyAgY2FzZSAkaG9zdF9vcyBpbgorICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgIyBGSVhNRTogdGhlIE1TVkMrKyBwb3J0IGhhc24ndCBiZWVuIHRlc3RlZCBpbiBhIGxvb29vbmcgdGltZQorICAgICMgV2hlbiBub3QgdXNpbmcgZ2NjLCB3ZSBjdXJyZW50bHkgYXNzdW1lIHRoYXQgd2UgYXJlIHVzaW5nCisgICAgIyBNaWNyb3NvZnQgVmlzdWFsIEMrKy4KKyAgICBpZiB0ZXN0ICIkR0NDIiAhPSB5ZXM7IHRoZW4KKyAgICAgIHdpdGhfZ251X2xkPW5vCisgICAgZmkKKyAgICA7OworICBpbnRlcml4KikKKyAgICAjIHdlIGp1c3QgaG9wZS9hc3N1bWUgdGhpcyBpcyBnY2MgYW5kIG5vdCBjODkgKD0gTVNWQysrKQorICAgIHdpdGhfZ251X2xkPXllcworICAgIDs7CisgIG9wZW5ic2QqKQorICAgIHdpdGhfZ251X2xkPW5vCisgICAgOzsKKyAgZXNhYworCisgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisKKyAgIyBPbiBzb21lIHRhcmdldHMsIEdOVSBsZCBpcyBjb21wYXRpYmxlIGVub3VnaCB3aXRoIHRoZSBuYXRpdmUgbGlua2VyCisgICMgdGhhdCB3ZSdyZSBiZXR0ZXIgb2ZmIHVzaW5nIHRoZSBuYXRpdmUgaW50ZXJmYWNlIGZvciBib3RoLgorICBsdF91c2VfZ251X2xkX2ludGVyZmFjZT1ubworICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0geWVzOyB0aGVuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4KikKKwkjIFRoZSBBSVggcG9ydCBvZiBHTlUgbGQgaGFzIGFsd2F5cyBhc3BpcmVkIHRvIGNvbXBhdGliaWxpdHkKKwkjIHdpdGggdGhlIG5hdGl2ZSBsaW5rZXIuICBIb3dldmVyLCBhcyB0aGUgd2FybmluZyBpbiB0aGUgR05VIGxkCisJIyBibG9jayBzYXlzLCB2ZXJzaW9ucyBiZWZvcmUgMi4xOS41KiBjb3VsZG4ndCByZWFsbHkgY3JlYXRlIHdvcmtpbmcKKwkjIHNoYXJlZCBsaWJyYXJpZXMsIHJlZ2FyZGxlc3Mgb2YgdGhlIGludGVyZmFjZSB1c2VkLgorCWNhc2UgYCRMRCAtdiAyPiYxYCBpbgorCSAgKlwgXChHTlVcIEJpbnV0aWxzXClcIDIuMTkuNSopIDs7CisJICAqXCBcKEdOVVwgQmludXRpbHNcKVwgMi5bWzItOV1dKikgOzsKKwkgICpcIFwoR05VXCBCaW51dGlsc1wpXCBbWzMtOV1dKikgOzsKKwkgICopCisJICAgIGx0X3VzZV9nbnVfbGRfaW50ZXJmYWNlPXllcworCSAgICA7OworCWVzYWMKKwk7OworICAgICAgKikKKwlsdF91c2VfZ251X2xkX2ludGVyZmFjZT15ZXMKKwk7OworICAgIGVzYWMKKyAgZmkKKworICBpZiB0ZXN0ICIkbHRfdXNlX2dudV9sZF9pbnRlcmZhY2UiID0geWVzOyB0aGVuCisgICAgIyBJZiBhcmNoaXZlX2NtZHMgcnVucyBMRCwgbm90IENDLCB3bGFyYyBzaG91bGQgYmUgZW1wdHkKKyAgICB3bGFyYz0nJHt3bH0nCisKKyAgICAjIFNldCBzb21lIGRlZmF1bHRzIGZvciBHTlUgbGQgd2l0aCBzaGFyZWQgbGlicmFyeSBzdXBwb3J0LiBUaGVzZQorICAgICMgYXJlIHJlc2V0IGxhdGVyIGlmIHNoYXJlZCBsaWJyYXJpZXMgYXJlIG5vdCBzdXBwb3J0ZWQuIFB1dHRpbmcgdGhlbQorICAgICMgaGVyZSBhbGxvd3MgdGhlbSB0byBiZSBvdmVycmlkZGVuIGlmIG5lY2Vzc2FyeS4KKyAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnbm8td2hvbGUtYXJjaGl2ZScgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0iJHdsYXJjIictLXdob2xlLWFyY2hpdmUkY29udmVuaWVuY2UgJyIkd2xhcmMiJy0tbm8td2hvbGUtYXJjaGl2ZScKKyAgICBlbHNlCisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgICBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9bm8KKyAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICpHTlVcIGdvbGQqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgICAqXCBbWzAxXV0uKiB8ICpcIDIuW1swLTldXS4qIHwgKlwgMi4xMC4qKSA7OyAjIGNhdGNoIHZlcnNpb25zIDwgMi4xMQorICAgICAgKlwgMi4xMS45My4wLjJcICopIHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZz15ZXMgOzsgIyBSSDcuMyAuLi4KKyAgICAgICpcIDIuMTEuOTIuMC4xMlwgKikgc3VwcG9ydHNfYW5vbl92ZXJzaW9uaW5nPXllcyA7OyAjIE1hbmRyYWtlIDguMiAuLi4KKyAgICAgICpcIDIuMTEuKikgOzsgIyBvdGhlciAyLjExIHZlcnNpb25zCisgICAgICAqKSBzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmc9eWVzIDs7CisgICAgZXNhYworCisgICAgIyBTZWUgaWYgR05VIGxkIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgIGFpeFtbMy05XV0qKQorICAgICAgIyBPbiBBSVgvUFBDLCB0aGUgR05VIGxpbmtlciBpcyB2ZXJ5IGJyb2tlbgorICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0OyB0aGVuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCWNhdCA8PF9MVF9FT0YgMT4mMgorCisqKiogV2FybmluZzogdGhlIEdOVSBsaW5rZXIsIGF0IGxlYXN0IHVwIHRvIHJlbGVhc2UgMi4xOSwgaXMgcmVwb3J0ZWQKKyoqKiB0byBiZSB1bmFibGUgdG8gcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gQUlYLgorKioqIFRoZXJlZm9yZSwgbGlidG9vbCBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgSWYgeW91CisqKiogcmVhbGx5IGNhcmUgZm9yIHNoYXJlZCBsaWJyYXJpZXMsIHlvdSBtYXkgd2FudCB0byBpbnN0YWxsIGJpbnV0aWxzCisqKiogMi4yMCBvciBhYm92ZSwgb3IgbW9kaWZ5IHlvdXIgUEFUSCBzbyB0aGF0IGEgbm9uLUdOVSBsaW5rZXIgaXMgZm91bmQuCisqKiogWW91IHdpbGwgdGhlbiBuZWVkIHRvIHJlc3RhcnQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2Vzcy4KKworX0xUX0VPRgorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhbWlnYW9zKikKKyAgICAgIGNhc2UgJGhvc3RfY3B1IGluCisgICAgICBwb3dlcnBjKQorICAgICAgICAgICAgIyBzZWUgY29tbWVudCBhYm91dCBBbWlnYU9TNCAuc28gc3VwcG9ydAorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJworICAgICAgICA7OworICAgICAgbTY4aykKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIE5BTUUgJGxpYm5hbWUiID4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBMSUJSQVJZX0lEIDEiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgVkVSU0lPTiAkbWFqb3IiID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgUkVWSVNJT04gJHJldmlzaW9uIiA+PiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRBUiAkQVJfRkxBR1MgJGxpYiAkbGlib2Jqc34kUkFOTElCICRsaWJ+KGNkICRvdXRwdXRfb2JqZGlyICYmIGEyaXhsaWJyYXJ5IC0zMiknCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICAgIDs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgYmVvcyopCisgICAgICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBKb3NlcGggQmVja2VuYmFjaCA8anJiM0BiZXN0LmNvbT4gc2F5cyBzb21lIHJlbGVhc2VzIG9mIGdjYworCSMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW5vc3RhcnQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBjeWd3aW4qIHwgbWluZ3cqIHwgcHczMiogfCBjZWdjYyopCisgICAgICAjIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLAorICAgICAgIyBhcyB0aGVyZSBpcyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWFsbC1zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisgICAgICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxIERBVEEvO3MvXi4qW1sgXV1fX25tX19cKFtbXiBdXSpcKVtbIF1dW1teIF1dKi9cMSBEQVRBLzsvXklbWyBdXS9kOy9eW1tBSVRXXV1bWyBdXS9zLy4qIC8vJ1wnJyB8IHNvcnQgfCB1bmlxID4gJGV4cG9ydF9zeW1ib2xzJworICAgICAgX0xUX1RBR1ZBUihleGNsdWRlX2V4cHN5bXMsICQxKT1bJ1tfXStHTE9CQUxfT0ZGU0VUX1RBQkxFX3xbX10rR0xPQkFMX19bRklEXV8uKnxbX10raGVhZF9bQS1aYS16MC05X10rX2RsbHxbQS1aYS16MC05X10rX2RsbF9pbmFtZSddCisKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICdhdXRvLWltcG9ydCcgPiAvZGV2L251bGw7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHt3bH0tLWVuYWJsZS1hdXRvLWltYWdlLWJhc2UgLVhsaW5rZXIgLS1vdXQtaW1wbGliIC1YbGlua2VyICRsaWInCisJIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSMgaXMgRVhQT1JUUyksIHVzZSBpdCBhcyBpczsgb3RoZXJ3aXNlLCBwcmVwZW5kLi4uCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2lmIHRlc3QgInhgJFNFRCAxcSAkZXhwb3J0X3N5bWJvbHNgIiA9IHhFWFBPUlRTOyB0aGVuCisJICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJZWxzZQorCSAgZWNobyBFWFBPUlRTID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCWZpfgorCSRDQyAtc2hhcmVkICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgaGFpa3UqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBpbnRlcml4W1szLTldXSopCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworICAgICAgIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorICAgICAgIyBJbnN0ZWFkLCBzaGFyZWQgbGlicmFyaWVzIGFyZSBsb2FkZWQgYXQgYW4gaW1hZ2UgYmFzZSAoMHgxMDAwMDAwMCBieQorICAgICAgIyBkZWZhdWx0KSBhbmQgcmVsb2NhdGVkIGlmIHRoZXkgY29uZmxpY3QsIHdoaWNoIGlzIGEgc2xvdyB2ZXJ5IG1lbW9yeQorICAgICAgIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorICAgICAgIyAyNTYgS2lCLWFsaWduZWQgaW1hZ2UgYmFzZSBiZXR3ZWVuIDB4NTAwMDAwMDAgYW5kIDB4NkZGQzAwMDAgYXQgbGluaworICAgICAgIyB0aW1lLiAgTW92aW5nIHVwIGZyb20gMHgxMDAwMDAwMCBhbHNvIGFsbG93cyBtb3JlIHNicmsoMikgc3BhY2UuCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3NlZCAicyxeLF8sIiAkZXhwb3J0X3N5bWJvbHMgPiRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCwkc29uYW1lICR7d2x9LS1yZXRhaW4tc3ltYm9scy1maWxlLCRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwc3ltICR7d2x9LS1pbWFnZS1iYXNlLGBleHByICR7UkFORE9NLSQkfSAlIDQwOTYgLyAyIFwqIDI2MjE0NCArIDEzNDIxNzcyODBgIC1vICRsaWInCisgICAgICA7OworCisgICAgZ251KiB8IGxpbnV4KiB8IHRwZiogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICB0bXBfZGlldD1ubworICAgICAgaWYgdGVzdCAiJGhvc3Rfb3MiID0gbGludXgtZGlldGxpYmM7IHRoZW4KKwljYXNlICRjY19iYXNlbmFtZSBpbgorCSAgZGlldFwgKikgdG1wX2RpZXQ9eWVzOzsJIyBsaW51eC1kaWV0bGliYyB3aXRoIHN0YXRpYyBsaW5raW5nICghZGlldC1keW4pCisJZXNhYworICAgICAgZmkKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRFR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsIFwKKwkgJiYgdGVzdCAiJHRtcF9kaWV0IiA9IG5vCisgICAgICB0aGVuCisJdG1wX2FkZGZsYWc9JyAkcGljX2ZsYWcnCisJdG1wX3NoYXJlZGZsYWc9Jy1zaGFyZWQnCisJY2FzZSAkY2NfYmFzZW5hbWUsJGhvc3RfY3B1IGluCisgICAgICAgIHBnY2MqKQkJCQkjIFBvcnRsYW5kIEdyb3VwIEMgY29tcGlsZXIKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZycKKwkgIDs7CisJcGdmNzcqIHwgcGdmOTAqIHwgcGdmOTUqIHwgcGdmb3J0cmFuKikKKwkJCQkJIyBQb3J0bGFuZCBHcm91cCBmNzcgYW5kIGY5MCBjb21waWxlcnMKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAgLW4gXCIkY29udlwiICYmIG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICB0bXBfYWRkZmxhZz0nICRwaWNfZmxhZyAtTW5vbWFpbicgOzsKKwllY2MqLGlhNjQqIHwgaWNjKixpYTY0KikJIyBJbnRlbCBDIGNvbXBpbGVyIG9uIGlhNjQKKwkgIHRtcF9hZGRmbGFnPScgLWlfZHluYW1pYycgOzsKKwllZmMqLGlhNjQqIHwgaWZvcnQqLGlhNjQqKQkjIEludGVsIEZvcnRyYW4gY29tcGlsZXIgb24gaWE2NAorCSAgdG1wX2FkZGZsYWc9JyAtaV9keW5hbWljIC1ub2Zvcl9tYWluJyA7OworCWlmYyogfCBpZm9ydCopCQkJIyBJbnRlbCBGb3J0cmFuIGNvbXBpbGVyCisJICB0bXBfYWRkZmxhZz0nIC1ub2Zvcl9tYWluJyA7OworCWxmOTUqKQkJCQkjIExhaGV5IEZvcnRyYW4gOC4xCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisJICB0bXBfc2hhcmVkZmxhZz0nLS1zaGFyZWQnIDs7CisJeGxbW2NDXV0qIHwgYmd4bFtbY0NdXSogfCBtcGl4bFtbY0NdXSopICMgSUJNIFhMIEMgOC4wIG9uIFBQQyAoZGVhbCB3aXRoIHhsZiBiZWxvdykKKwkgIHRtcF9zaGFyZWRmbGFnPSctcW1rc2hyb2JqJworCSAgdG1wX2FkZGZsYWc9IDs7CisJbnZjYyopCSMgQ3VkYSBDb21waWxlciBEcml2ZXIgMi4yCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworCSAgX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT15ZXMKKwkgIDs7CisJZXNhYworCWNhc2UgYCRDQyAtViAyPiYxIHwgc2VkIDVxYCBpbgorCSpTdW5cIEMqKQkJCSMgU3VuIEMgNS45CisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYG5ld19jb252ZW5pZW5jZT07IGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgLXogXCIkY29udlwiIHx8IG5ld19jb252ZW5pZW5jZT1cIiRuZXdfY29udmVuaWVuY2UsJGNvbnZcIjsgZG9uZTsgZnVuY19lY2hvX2FsbCBcIiRuZXdfY29udmVuaWVuY2VcImAgJHt3bH0tLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCSAgdG1wX3NoYXJlZGZsYWc9Jy1HJyA7OworCSpTdW5cIEYqKQkJCSMgU3VuIEZvcnRyYW4gOC4zCisJICB0bXBfc2hhcmVkZmxhZz0nLUcnIDs7CisJZXNhYworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAnIiR0bXBfc2hhcmVkZmxhZyIiJHRtcF9hZGRmbGFnIicgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisKKyAgICAgICAgaWYgdGVzdCAieCRzdXBwb3J0c19hbm9uX3ZlcnNpb25pbmciID0geHllczsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICBjYXQgJGV4cG9ydF9zeW1ib2xzIHwgc2VkIC1lICJzL1woLipcKS9cMTsvIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJICAgIGVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAkQ0MgJyIkdG1wX3NoYXJlZGZsYWciIiR0bXBfYWRkZmxhZyInICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworICAgICAgICBmaQorCisJY2FzZSAkY2NfYmFzZW5hbWUgaW4KKwl4bGYqIHwgYmdmKiB8IGJneGxmKiB8IG1waXhsZiopCisJICAjIElCTSBYTCBGb3J0cmFuIDEwLjEgb24gUFBDIGNhbm5vdCBjcmVhdGUgc2hhcmVkIGxpYnMgaXRzZWxmCisJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAtLW5vLXdob2xlLWFyY2hpdmUnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlY19sZCwgJDEpPSctcnBhdGggJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLXNvbmFtZSAkc29uYW1lIC1vICRsaWInCisJICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyfgorCSAgICAgIGNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICBlY2hvICJsb2NhbDogKjsgfTsiID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkgICAgICAkTEQgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSAtdmVyc2lvbi1zY3JpcHQgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUudmVyIC1vICRsaWInCisJICBmaQorCSAgOzsKKwllc2FjCisgICAgICBlbHNlCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgbmV0YnNkKikKKyAgICAgIGlmIGVjaG8gX19FTEZfXyB8ICRDQyAtRSAtIHwgJEdSRVAgX19FTEZfXyA+L2Rldi9udWxsOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MgLW8gJGxpYicKKwl3bGFyYz0KKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc29sYXJpcyopCisgICAgICBpZiAkTEQgLXYgMj4mMSB8ICRHUkVQICdCRkQgMlwuOCcgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBUaGUgcmVsZWFzZXMgMi44Liogb2YgdGhlIEdOVSBsaW5rZXIgY2Fubm90IHJlbGlhYmx5CisqKiogY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU29sYXJpcyBzeXN0ZW1zLiAgVGhlcmVmb3JlLCBsaWJ0b29sCisqKiogaXMgZGlzYWJsaW5nIHNoYXJlZCBsaWJyYXJpZXMgc3VwcG9ydC4gIFdlIHVyZ2UgeW91IHRvIHVwZ3JhZGUgR05VCisqKiogYmludXRpbHMgdG8gcmVsZWFzZSAyLjkuMSBvciBuZXdlci4gIEFub3RoZXIgb3B0aW9uIGlzIHRvIG1vZGlmeQorKioqIHlvdXIgUEFUSCBvciBjb21waWxlciBjb25maWd1cmF0aW9uIHNvIHRoYXQgdGhlIG5hdGl2ZSBsaW5rZXIgaXMKKyoqKiB1c2VkLCBhbmQgdGhlbiByZXN0YXJ0LgorCitfTFRfRU9GCisgICAgICBlbGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKworICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiogfCB1bml4d2FyZSogfCBPcGVuVU5JWCopCisgICAgICBjYXNlIGAkTEQgLXYgMj4mMWAgaW4KKyAgICAgICAgKlwgW1swMV1dLiogfCAqXCAyLltbMC05XV0uKiB8ICpcIDIuMVtbMC01XV0uKikKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJY2F0IDw8X0xUX0VPRiAxPiYyCisKKyoqKiBXYXJuaW5nOiBSZWxlYXNlcyBvZiB0aGUgR05VIGxpbmtlciBwcmlvciB0byAyLjE2LjkxLjAuMyBjYW4gbm90CisqKiogcmVsaWFibHkgY3JlYXRlIHNoYXJlZCBsaWJyYXJpZXMgb24gU0NPIHN5c3RlbXMuICBUaGVyZWZvcmUsIGxpYnRvb2wKKyoqKiBpcyBkaXNhYmxpbmcgc2hhcmVkIGxpYnJhcmllcyBzdXBwb3J0LiAgV2UgdXJnZSB5b3UgdG8gdXBncmFkZSBHTlUKKyoqKiBiaW51dGlscyB0byByZWxlYXNlIDIuMTYuOTEuMC4zIG9yIG5ld2VyLiAgQW5vdGhlciBvcHRpb24gaXMgdG8gbW9kaWZ5CisqKiogeW91ciBQQVRIIG9yIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gc28gdGhhdCB0aGUgbmF0aXZlIGxpbmtlciBpcworKioqIHVzZWQsIGFuZCB0aGVuIHJlc3RhcnQuCisKK19MVF9FT0YKKwk7OworCSopCisJICAjIEZvciBzZWN1cml0eSByZWFzb25zLCBpdCBpcyBoaWdobHkgcmVjb21tZW5kZWQgdGhhdCB5b3UgYWx3YXlzCisJICAjIHVzZSBhYnNvbHV0ZSBwYXRocyBmb3IgbmFtaW5nIHNoYXJlZCBsaWJyYXJpZXMsIGFuZCBleGNsdWRlIHRoZQorCSAgIyBEVF9SVU5QQVRIIHRhZyBmcm9tIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJpZXMuICBCdXQgZG9pbmcgc28KKwkgICMgcmVxdWlyZXMgdGhhdCB5b3UgY29tcGlsZSBldmVyeXRoaW5nIHR3aWNlLCB3aGljaCBpcyBhIHBhaW4uCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJICBlbHNlCisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIGZpCisJOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1hc3NlcnQgcHVyZS10ZXh0IC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIHdsYXJjPQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIGlmICRMRCAtLWhlbHAgMj4mMSB8ICRHUkVQICc6IHN1cHBvcnRlZCB0YXJnZXRzOi4qIGVsZicgPiAvZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICBmaQorICAgICAgOzsKKyAgICBlc2FjCisKKyAgICBpZiB0ZXN0ICIkX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKSIgPSBubzsgdGhlbgorICAgICAgcnVucGF0aF92YXI9CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0KKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9CisgICAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CisgICAgZmkKKyAgZWxzZQorICAgICMgUE9SVE1FIGZpbGwgaW4gYSBkZXNjcmlwdGlvbiBvZiB5b3VyIHN5c3RlbSdzIGxpbmtlciAobm90IEdOVSBsZCkKKyAgICBjYXNlICRob3N0X29zIGluCisgICAgYWl4MyopCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKyAgICAgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJExEIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAtYkU6JGV4cG9ydF9zeW1ib2xzIC1UNTEyIC1INTEyIC1iTTpTUkV+JEFSICRBUl9GTEFHUyAkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUnCisgICAgICAjIE5vdGU6IHRoaXMgbGlua2VyIGhhcmRjb2RlcyB0aGUgZGlyZWN0b3JpZXMgaW4gTElCUEFUSCBpZiB0aGVyZQorICAgICAgIyBhcmUgbm8gZGlyZWN0b3JpZXMgc3BlY2lmaWVkIGJ5IC1MLgorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0IC16ICIkbHRfcHJvZ19jb21waWxlcl9zdGF0aWMiOyB0aGVuCisJIyBOZWl0aGVyIGRpcmVjdCBoYXJkY29kaW5nIG5vciBzdGF0aWMgbGlua2luZyBpcyBzdXBwb3J0ZWQgd2l0aCBhCisJIyBicm9rZW4gY29sbGVjdDIuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT11bnN1cHBvcnRlZAorICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBhaXhbWzQtOV1dKikKKyAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJIyBPbiBJQTY0LCB0aGUgbGlua2VyIGRvZXMgcnVuIHRpbWUgbGlua2luZyBieSBkZWZhdWx0LCBzbyB3ZSBkb24ndAorCSMgaGF2ZSB0byBkbyBhbnl0aGluZyBzcGVjaWFsLgorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKwlleHBfc3ltX2ZsYWc9Jy1CZXhwb3J0JworCW5vX2VudHJ5X2ZsYWc9IiIKKyAgICAgIGVsc2UKKwkjIElmIHdlJ3JlIHVzaW5nIEdOVSBubSwgdGhlbiB3ZSBkb24ndCB3YW50IHRoZSAiLUMiIG9wdGlvbi4KKwkjIC1DIG1lYW5zIGRlbWFuZ2xlIHRvIEFJWCBubSwgYnV0IG1lYW5zIGRvbid0IGRlbWFuZ2xlIHdpdGggR05VIG5tCisJIyBBbHNvLCBBSVggbm0gdHJlYXRzIHdlYWsgZGVmaW5lZCBzeW1ib2xzIGxpa2Ugb3RoZXIgZ2xvYmFsCisJIyBkZWZpbmVkIHN5bWJvbHMsIHdoZXJlYXMgR05VIG5tIG1hcmtzIHRoZW0gYXMgIlciLgorCWlmICROTSAtViAyPiYxIHwgJEdSRVAgJ0dOVScgPiAvZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gLUJwZyAkbGlib2JqcyAkY29udmVuaWVuY2UgfCBhd2sgJ1wnJ3sgaWYgKCgoXCQgMiA9PSAiVCIpIHx8IChcJCAyID09ICJEIikgfHwgKFwkIDIgPT0gIkIiKSB8fCAoXCQgMiA9PSAiVyIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwllbHNlCisJICBfTFRfVEFHVkFSKGV4cG9ydF9zeW1ib2xzX2NtZHMsICQxKT0nJE5NIC1CQ3BnICRsaWJvYmpzICRjb252ZW5pZW5jZSB8IGF3ayAnXCcneyBpZiAoKChcJCAyID09ICJUIikgfHwgKFwkIDIgPT0gIkQiKSB8fCAoXCQgMiA9PSAiQiIpKSAmJiAoW3N1YnN0cl0oXCQgMywxLDEpICE9ICIuIikpIHsgcHJpbnQgXCQgMyB9IH0nXCcnIHwgc29ydCAtdSA+ICRleHBvcnRfc3ltYm9scycKKwlmaQorCWFpeF91c2VfcnVudGltZWxpbmtpbmc9bm8KKworCSMgVGVzdCBpZiB3ZSBhcmUgdHJ5aW5nIHRvIHVzZSBydW4gdGltZSBsaW5raW5nIG9yIG5vcm1hbAorCSMgQUlYIHN0eWxlIGxpbmtpbmcuIElmIC1icnRsIGlzIHNvbWV3aGVyZSBpbiBMREZMQUdTLCB3ZQorCSMgbmVlZCB0byBkbyBydW50aW1lIGxpbmtpbmcuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMjNdXXxhaXg0LltbMjNdXS4qfGFpeFtbNS05XV0qKQorCSAgZm9yIGxkX2ZsYWcgaW4gJExERkxBR1M7IGRvCisJICBpZiAodGVzdCAkbGRfZmxhZyA9ICItYnJ0bCIgfHwgdGVzdCAkbGRfZmxhZyA9ICItV2wsLWJydGwiKTsgdGhlbgorCSAgICBhaXhfdXNlX3J1bnRpbWVsaW5raW5nPXllcworCSAgICBicmVhaworCSAgZmkKKwkgIGRvbmUKKwkgIDs7CisJZXNhYworCisJZXhwX3N5bV9mbGFnPSctYmV4cG9ydCcKKwlub19lbnRyeV9mbGFnPSctYm5vZW50cnknCisgICAgICBmaQorCisgICAgICAjIFdoZW4gbGFyZ2UgZXhlY3V0YWJsZXMgb3Igc2hhcmVkIG9iamVjdHMgYXJlIGJ1aWx0LCBBSVggbGQgY2FuCisgICAgICAjIGhhdmUgcHJvYmxlbXMgY3JlYXRpbmcgdGhlIHRhYmxlIG9mIGNvbnRlbnRzLiAgSWYgbGlua2luZyBhIGxpYnJhcnkKKyAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAjIENYWEZMQUdTL0NGTEFHUyBmb3IgZysrL2djYy4gIEluIHRoZSBjYXNlcyB3aGVyZSB0aGF0IGlzIG5vdAorICAgICAgIyBlbm91Z2ggdG8gZml4IHRoZSBwcm9ibGVtLCBhZGQgLVdsLC1iYmlndG9jIHRvIExERkxBR1MuCisKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoZmlsZV9saXN0X3NwZWMsICQxKT0nJHt3bH0tZiwnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisJIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisJIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgIHN0cmluZ3MgIiRjb2xsZWN0Mm5hbWUiIHwgJEdSRVAgcmVzb2x2ZV9saWJfbmFtZSA+L2Rldi9udWxsCisJICB0aGVuCisJICAjIFdlIGhhdmUgcmV3b3JrZWQgY29sbGVjdDIKKwkgIDoKKwkgIGVsc2UKKwkgICMgV2UgaGF2ZSBvbGQgY29sbGVjdDIKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICMgcGF0aCBpcyBub3QgbGlzdGVkIGluIHRoZSBsaWJwYXRoLiAgU2V0dGluZyBoYXJkY29kZV9taW51c19MCisJICAjIHRvIHVuc3VwcG9ydGVkIGZvcmNlcyByZWxpbmtpbmcKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPQorCSAgZmkKKwkgIDs7CisJZXNhYworCXNoYXJlZF9mbGFnPSctc2hhcmVkJworCWlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgc2hhcmVkX2ZsYWc9IiRzaGFyZWRfZmxhZyAiJyR7d2x9LUcnCisJZmkKKyAgICAgIGVsc2UKKwkjIG5vdCB1c2luZyBnY2MKKwlpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSMgVmlzdWFsQWdlIEMrKywgVmVyc2lvbiA1LjUgZm9yIEFJWCA1TCBmb3IgSUEtNjQsIEJldGEgMyBSZWxlYXNlCisJIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKwllbHNlCisJICBpZiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSB5ZXM7IHRoZW4KKwkgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LUcnCisJICBlbHNlCisJICAgIHNoYXJlZF9mbGFnPScke3dsfS1iTTpTUkUnCisJICBmaQorCWZpCisgICAgICBmaQorCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1iZXhwYWxsJworICAgICAgIyBJdCBzZWVtcyB0aGF0IC1iZXhwYWxsIGRvZXMgbm90IGV4cG9ydCBzeW1ib2xzIGJlZ2lubmluZyB3aXRoCisgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8gZXhwb3J0LgorICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSMgV2FybmluZyAtIHdpdGhvdXQgdXNpbmcgdGhlIG90aGVyIHJ1bnRpbWUgbG9hZGluZyBmbGFncyAoLWJydGwpLAorCSMgLWJlcm9rIHdpbGwgbGluayB3aXRob3V0IGVycm9yLCBidXQgbWF5IHByb2R1Y2UgYSBicm9rZW4gbGlicmFyeS4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Jy1iZXJvaycKKyAgICAgICAgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisgICAgICAgICMgZW1wdHkgZXhlY3V0YWJsZS4KKyAgICAgICAgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAnIlwke3dsfSRub19lbnRyeV9mbGFnIicgJGNvbXBpbGVyX2ZsYWdzIGBpZiB0ZXN0ICJ4JHthbGxvd191bmRlZmluZWRfZmxhZ30iICE9ICJ4IjsgdGhlbiBmdW5jX2VjaG9fYWxsICIke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IjsgZWxzZSA6OyBmaWAgJyJcJHt3bH0kZXhwX3N5bV9mbGFnOlwkZXhwb3J0X3N5bWJvbHMgJHNoYXJlZF9mbGFnIgorICAgICAgZWxzZQorCWlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9Ii16IG5vZGVmcyIKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSJcJENDICRzaGFyZWRfZmxhZyInIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJyJcJHt3bH0kbm9fZW50cnlfZmxhZyInICRjb21waWxlcl9mbGFncyAke3dsfSR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICciXCR7d2x9JGV4cF9zeW1fZmxhZzpcJGV4cG9ydF9zeW1ib2xzIgorCWVsc2UKKwkgIyBEZXRlcm1pbmUgdGhlIGRlZmF1bHQgbGlicGF0aCBmcm9tIHRoZSB2YWx1ZSBlbmNvZGVkIGluIGFuCisJICMgZW1wdHkgZXhlY3V0YWJsZS4KKwkgX0xUX1NZU19NT0RVTEVfUEFUSF9BSVgoWyQxXSkKKwkgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJsaWJwYXRoOiRsaWJkaXI6JyIkYWl4X2xpYnBhdGgiCisJICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tYmVybm90b2snCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKwkgICAgIyBXZSBvbmx5IHVzZSB0aGlzIGNvZGUgZm9yIEdOVSBsZHMgdGhhdCBzdXBwb3J0IC0td2hvbGUtYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgIGVsc2UKKwkgICAgIyBFeHBvcnRlZCBzeW1ib2xzIGNhbiBiZSBwdWxsZWQgaW50byBzaGFyZWQgb2JqZWN0cyBmcm9tIGFyY2hpdmVzCisJICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgZmkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZCBsaWJyYXJpZXMuCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICR7d2x9LWJub2VudHJ5ICRjb21waWxlcl9mbGFncyAke3dsfS1iRTokZXhwb3J0X3N5bWJvbHMke2FsbG93X3VuZGVmaW5lZF9mbGFnfX4kQVIgJEFSX0ZMQUdTICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lJHJlbGVhc2UuYSAkb3V0cHV0X29iamRpci8kc29uYW1lJworCWZpCisgICAgICBmaQorICAgICAgOzsKKworICAgIGFtaWdhb3MqKQorICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKyAgICAgIHBvd2VycGMpCisgICAgICAgICAgICAjIHNlZSBjb21tZW50IGFib3V0IEFtaWdhT1M0IC5zbyBzdXBwb3J0CisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPScnCisgICAgICAgIDs7CisgICAgICBtNjhrKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEVDSE8gIiNkZWZpbmUgTkFNRSAkbGlibmFtZSIgPiAkb3V0cHV0X29iamRpci9hMml4bGlicmFyeS5kYXRhfiRFQ0hPICIjZGVmaW5lIExJQlJBUllfSUQgMSIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBWRVJTSU9OICRtYWpvciIgPj4gJG91dHB1dF9vYmpkaXIvYTJpeGxpYnJhcnkuZGF0YX4kRUNITyAiI2RlZmluZSBSRVZJU0lPTiAkcmV2aXNpb24iID4+ICRvdXRwdXRfb2JqZGlyL2EyaXhsaWJyYXJ5LmRhdGF+JEFSICRBUl9GTEFHUyAkbGliICRsaWJvYmpzfiRSQU5MSUIgJGxpYn4oY2QgJG91dHB1dF9vYmpkaXIgJiYgYTJpeGxpYnJhcnkgLTMyKScKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgICAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICBic2RpW1s0NV1dKikKKyAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9LXJkeW5hbWljCisgICAgICA7OworCisgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorICAgICAgIyBXaGVuIG5vdCB1c2luZyBnY2MsIHdlIGN1cnJlbnRseSBhc3N1bWUgdGhhdCB3ZSBhcmUgdXNpbmcKKyAgICAgICMgTWljcm9zb2Z0IFZpc3VhbCBDKysuCisgICAgICAjIGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsIGFzIHRoZXJlIGlzCisgICAgICAjIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgIGNsKikKKwkjIE5hdGl2ZSBNU1ZDCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9J0AnCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRjb21waWxlcl9mbGFncyAkZGVwbGlicyAtV2wsLWRsbH5saW5rbmFtZXM9JworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICBzZWQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZWxzZQorCSAgICBzZWQgLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgZml+CisJICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICBsaW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIG5vdCBhdXRvbWF0aWNhbGx5IGJ1aWxkIGEgc3RhdGljIGxpYiBpZiB3ZSBidWlsZCBhIERMTC4KKwkjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCV9MVF9UQUdWQVIoZXhwb3J0X3N5bWJvbHNfY21kcywgJDEpPSckTk0gJGxpYm9ianMgJGNvbnZlbmllbmNlIHwgJGdsb2JhbF9zeW1ib2xfcGlwZSB8ICRTRUQgLWUgJ1wnJy9eW1tCQ0RHUlNdXVtbIF1dL3MvLipbWyBdXVwoW1teIF1dKlwpL1wxLERBVEEvJ1wnJyB8ICRTRUQgLWUgJ1wnJy9eW1tBSVRXXV1bWyBdXS9zLy4qW1sgXV0vLydcJycgfCBzb3J0IHwgdW5pcSA+ICRleHBvcnRfc3ltYm9scycKKwkjIERvbid0IHVzZSByYW5saWIKKwlfTFRfVEFHVkFSKG9sZF9wb3N0aW5zdGFsbF9jbWRzLCAkMSk9J2NobW9kIDY0NCAkb2xkbGliJworCV9MVF9UQUdWQVIocG9zdGxpbmtfY21kcywgJDEpPSdsdF9vdXRwdXRmaWxlPSJAT1VUUFVUQCJ+CisJICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorCSAgY2FzZSAkbHRfb3V0cHV0ZmlsZSBpbgorCSAgICAqLmV4ZXwqLkVYRSkgOzsKKwkgICAgKikKKwkgICAgICBsdF9vdXRwdXRmaWxlPSIkbHRfb3V0cHV0ZmlsZS5leGUiCisJICAgICAgbHRfdG9vbF9vdXRwdXRmaWxlPSIkbHRfdG9vbF9vdXRwdXRmaWxlLmV4ZSIKKwkgICAgICA7OworCSAgZXNhY34KKwkgIGlmIHRlc3QgIiRNQU5JRkVTVF9UT09MIiAhPSAiOiIgJiYgdGVzdCAtZiAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOyB0aGVuCisJICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisJICAgICRSTSAiJGx0X291dHB1dGZpbGUubWFuaWZlc3QiOworCSAgZmknCisJOzsKKyAgICAgICopCisJIyBBc3N1bWUgTVNWQyB3cmFwcGVyCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyAnCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwlsaWJleHQ9bGliCisJIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5kbGwgZmlsZXMsIG5vdCAuc28gZmlsZXMuCisJc2hyZXh0X2NtZHM9Ii5kbGwiCisJIyBGSVhNRTogU2V0dGluZyBsaW5rbmFtZXMgaGVyZSBpcyBhIGJhZCBoYWNrLgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbyAkbGliICRsaWJvYmpzICRjb21waWxlcl9mbGFncyBgZnVuY19lY2hvX2FsbCAiJGRlcGxpYnMiIHwgJFNFRCAnXCcncy8gLWxjJC8vJ1wnJ2AgLWxpbmsgLWRsbH5saW5rbmFtZXM9JworCSMgVGhlIGxpbmtlciB3aWxsIGF1dG9tYXRpY2FsbHkgYnVpbGQgYSAubGliIGZpbGUgaWYgd2UgYnVpbGQgYSBETEwuCisJX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J3RydWUnCisJIyBGSVhNRTogU2hvdWxkIGxldCB0aGUgdXNlciBzcGVjaWZ5IHRoZSBsaWIgcHJvZ3JhbS4KKwlfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0nbGliIC1PVVQ6JG9sZGxpYiRvbGRvYmpzJG9sZF9kZXBsaWJzJworCV9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCTs7CisgICAgICBlc2FjCisgICAgICA7OworCisgICAgZGFyd2luKiB8IHJoYXBzb2R5KikKKyAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorICAgICAgOzsKKworICAgIGRndXgqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgZnJlZWJzZDEqKQorICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgOzsKKworICAgICMgRnJlZUJTRCAyLjIuWzAxMl0gYWxsb3dzIHVzIHRvIGluY2x1ZGUgYysrcnQwLm8gdG8gZ2V0IEMrKyBjb25zdHJ1Y3RvcgorICAgICMgc3VwcG9ydC4gIEZ1dHVyZSB2ZXJzaW9ucyBkbyB0aGlzIGF1dG9tYXRpY2FsbHksIGJ1dCBhbiBleHBsaWNpdCBjKytydDAubworICAgICMgZG9lcyBub3QgYnJlYWsgYW55dGhpbmcsIGFuZCBoZWxwcyBzaWduaWZpY2FudGx5IChhdCB0aGUgY29zdCBvZiBhIGxpdHRsZQorICAgICMgZXh0cmEgc3BhY2UpLgorICAgIGZyZWVic2QyLjIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyAvdXNyL2xpYi9jKytydDAubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICAjIFVuZm9ydHVuYXRlbHksIG9sZGVyIHZlcnNpb25zIG9mIEZyZWVCU0QgMiBkbyBub3QgaGF2ZSB0aGlzIGZlYXR1cmUuCisgICAgZnJlZWJzZDIqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1Cc2hhcmVhYmxlIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgIyBGcmVlQlNEIDMgYW5kIGdyZWF0ZXIgdXNlcyBnY2MgLXNoYXJlZCB0byBkbyBzaGFyZWQgbGlicmFyaWVzLgorICAgIGZyZWVic2QqIHwgZHJhZ29uZmx5KikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBocHV4OSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRMRCAtYiArYiAkaW5zdGFsbF9saWJkaXIgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisKKyAgICAgICMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisgICAgICAjIGJ1dCBhcyB0aGUgZGVmYXVsdCBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKyAgICAgIDs7CisKKyAgICBocHV4MTAqKQorICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXMgJiYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IG5vOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIGZpCisgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9JytiICRsaWJkaXInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSMgaGFyZGNvZGVfbWludXNfTDogTm90IHJlYWxseSBpbiB0aGUgc2VhcmNoIFBBVEgsCisJIyBidXQgYXMgdGhlIGRlZmF1bHQgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisJX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisgICAgICBmaQorICAgICAgOzsKKworICAgIGhwdXgxMSopCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllcyAmJiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWlhNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K25vZGVmYXVsdHJwYXRoIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwkqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCWVzYWMKKyAgICAgIGVsc2UKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqKQorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKwlpYTY0KikKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIDs7CisJKikKKwltNF9pZigkMSwgW10sIFsKKwkgICMgT2xkZXIgdmVyc2lvbnMgb2YgdGhlIDExLjAwIGNvbXBpbGVyIGRvIG5vdCB1bmRlcnN0YW5kIC1iIHlldAorCSAgIyAoSFA5MjQ1My0wMSBBLjExLjAxLjIwIGRvZXNuJ3QsIEhQOTI0NTMtMDEgQi4xMS5YLjM1MTc1LTM1MTc2LkdQIGRvZXMpCisJICBfTFRfTElOS0VSX09QVElPTihbaWYgJENDIHVuZGVyc3RhbmRzIC1iXSwKKwkgICAgX0xUX1RBR1ZBUihsdF9jdl9wcm9nX2NvbXBpbGVyX19iLCAkMSksIFstYl0sCisJICAgIFtfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLWIgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyddLAorCSAgICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1iICtoICRzb25hbWUgK2IgJGluc3RhbGxfbGliZGlyIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncyddKV0sCisJICBbX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lICR7d2x9K2IgJHt3bH0kaW5zdGFsbF9saWJkaXIgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnXSkKKwkgIDs7CisJZXNhYworICAgICAgZmkKKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfStiICR7d2x9JGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwljYXNlICRob3N0X2NwdSBpbgorCWhwcGEqNjQqfGlhNjQqKQorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIDs7CisJKikKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tRScKKworCSAgIyBoYXJkY29kZV9taW51c19MOiBOb3QgcmVhbGx5IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkgICMgYnV0IGFzIHRoZSBkZWZhdWx0IGxvY2F0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICA7OworCisgICAgaXJpeDUqIHwgaXJpeDYqIHwgbm9uc3RvcHV4KikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSMgVHJ5IHRvIHVzZSB0aGUgLWV4cG9ydGVkX3N5bWJvbCBsZCBvcHRpb24sIGlmIGl0IGRvZXMgbm90CisJIyB3b3JrLCBhc3N1bWUgdGhhdCAtZXhwb3J0c19maWxlIGRvZXMgbm90IHdvcmsgZWl0aGVyIGFuZAorCSMgaW1wbGljaXRseSBleHBvcnQgYWxsIHN5bWJvbHMuCisJIyBUaGlzIHNob3VsZCBiZSB0aGUgc2FtZSBmb3IgYWxsIGxhbmd1YWdlcywgc28gbm8gcGVyLXRhZyBjYWNoZSB2YXJpYWJsZS4KKwlBQ19DQUNIRV9DSEVDSyhbd2hldGhlciB0aGUgJGhvc3Rfb3MgbGlua2VyIGFjY2VwdHMgLWV4cG9ydGVkX3N5bWJvbF0sCisJICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2xdLAorCSAgW3NhdmVfTERGTEFHUz0iJExERkxBR1MiCisJICAgTERGTEFHUz0iJExERkxBR1MgLXNoYXJlZCAke3dsfS1leHBvcnRlZF9zeW1ib2wgJHt3bH1mb28gJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9L2Rldi9udWxsIgorCSAgIEFDX0xJTktfSUZFTFNFKAorCSAgICAgW0FDX0xBTkdfU09VUkNFKAorCSAgICAgICAgW0FDX0xBTkdfQ0FTRShbQ10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorCQkJICAgICAgW0MrK10sIFtbaW50IGZvbyAodm9pZCkgeyByZXR1cm4gMDsgfV1dLAorCQkJICAgICAgW0ZvcnRyYW4gNzddLCBbWworICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGVuZF1dLAorCQkJICAgICAgW0ZvcnRyYW5dLCBbWworICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGVuZF1dKV0pXSwKKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9eWVzXSwKKwkgICAgICBbbHRfY3ZfaXJpeF9leHBvcnRlZF9zeW1ib2w9bm9dKQorICAgICAgICAgICBMREZMQUdTPSIkc2F2ZV9MREZMQUdTIl0pCisJaWYgdGVzdCAiJGx0X2N2X2lyaXhfZXhwb3J0ZWRfc3ltYm9sIiA9IHllczsgdGhlbgorICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zICR7d2x9LWV4cG9ydHNfZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCWZpCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtZXhwb3J0c19maWxlICRleHBvcnRfc3ltYm9scyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBuZXRic2QqKQorICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJyAgIyBhLm91dAorICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtc2hhcmVkIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycgICAgICAjIEVMRgorICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBuZXdzb3M2KQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCAke3dsfSRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgOzsKKworICAgICpudG8qIHwgKnFueCopCisgICAgICA7OworCisgICAgb3BlbmJzZCopCisgICAgICBpZiB0ZXN0IC1mIC91c3IvbGliZXhlYy9sZC5zbzsgdGhlbgorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisJX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworCWlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8ICRHUkVQIF9fRUxGX19gIiB8fCB0ZXN0ICIkaG9zdF9vcy0kaG9zdF9jcHUiID0gIm9wZW5ic2QyLjgtcG93ZXJwYyI7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSwkZXhwb3J0X3N5bWJvbHMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJZWxzZQorCSAgY2FzZSAkaG9zdF9vcyBpbgorCSAgIG9wZW5ic2RbWzAxXV0uKiB8IG9wZW5ic2QyLltbMC03XV0gfCBvcGVuYnNkMi5bWzAtN11dLiopCisJICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUJzaGFyZWFibGUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1SJGxpYmRpcicKKwkgICAgIDs7CisJICAgKikKKwkgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICAgOzsKKwkgIGVzYWMKKwlmaQorICAgICAgZWxzZQorCV9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIGZpCisgICAgICA7OworCisgICAgb3MyKikKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctTCRsaWJkaXInCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT11bnN1cHBvcnRlZAorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJEVDSE8gIkxJQlJBUlkgJGxpYm5hbWUgSU5JVElOU1RBTkNFIiA+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kRUNITyAiREVTQ1JJUFRJT04gXCIkbGlibmFtZVwiIiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZWNobyBEQVRBID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn5lY2hvICIgU0lOR0xFIE5PTlNIQVJFRCIgPj4gJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmfmVjaG8gRVhQT1JUUyA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS5kZWZ+ZW14ZXhwICRsaWJvYmpzID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZn4kQ0MgLVpkbGwgLVpjcnRkbGwgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJG91dHB1dF9vYmpkaXIvJGxpYm5hbWUuZGVmJworICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9mcm9tX25ld19jbWRzLCAkMSk9J2VteGltcCAtbyAkb3V0cHV0X29iamRpci8kbGlibmFtZS5hICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLmRlZicKKyAgICAgIDs7CisKKyAgICBvc2YzKikKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC1leHBlY3RfdW5yZXNvbHZlZCBcKicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAtc29uYW1lICRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworICAgICAgZmkKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT0nbm8nCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorICAgICAgOzsKKworICAgIG9zZjQqIHwgb3NmNSopCSMgYXMgb3NmMyogd2l0aCB0aGUgYWRkaXRpb24gb2YgLW1zeW0gZmxhZworICAgICAgaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1leHBlY3RfdW5yZXNvbHZlZCAke3dsfVwqJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHBpY19mbGFnICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1tc3ltICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgIGVsc2UKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtZXhwZWN0X3VucmVzb2x2ZWQgXConCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZm9yIGkgaW4gYGNhdCAkZXhwb3J0X3N5bWJvbHNgOyBkbyBwcmludGYgIiVzICVzXFxuIiAtZXhwb3J0ZWRfc3ltYm9sICJcJGkiID4+ICRsaWIuZXhwOyBkb25lOyBwcmludGYgIiVzXFxuIiAiLWhpZGRlbiI+PiAkbGliLmV4cH4KKwkkQ0MgLXNoYXJlZCR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LWlucHV0ICR7d2x9JGxpYi5leHAgJGNvbXBpbGVyX2ZsYWdzICRsaWJvYmpzICRkZXBsaWJzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgJEVDSE8gIi1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGlifiRSTSAkbGliLmV4cCcKKworCSMgQm90aCBjIGFuZCBjeHggY29tcGlsZXIgc3VwcG9ydCAtcnBhdGggZGlyZWN0bHkKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSdubycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKyAgICAgIDs7CisKKyAgICBzb2xhcmlzKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nIC16IGRlZnMnCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCXdsYXJjPScke3dsfScKKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHt3bH0teiAke3dsfXRleHQgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRDQyAtc2hhcmVkICRwaWNfZmxhZyAke3dsfS16ICR7d2x9dGV4dCAke3dsfS1NICR7d2x9JGxpYi5leHAgJHt3bH0taCAke3dsfSRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworICAgICAgZWxzZQorCWNhc2UgYCRDQyAtViAyPiYxYCBpbgorCSoiQ29tcGlsZXJzIDUuMCIqKQorCSAgd2xhcmM9JycKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkbGliLmV4cH5jYXQgJGV4cG9ydF9zeW1ib2xzIHwgJFNFRCAtZSAicy9cKC4qXCkvXDE7LyIgPj4gJGxpYi5leHB+ZWNobyAibG9jYWw6ICo7IH07IiA+PiAkbGliLmV4cH4KKwkgICRMRCAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1NICRsaWIuZXhwIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKwkgIDs7CisJKikKKwkgIHdsYXJjPScke3dsfScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9IC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLU0gJGxpYi5leHAgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisJICA7OworCWVzYWMKKyAgICAgIGZpCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgICAgIHNvbGFyaXMyLltbMC01XV0gfCBzb2xhcmlzMi5bWzAtNV1dLiopIDs7CisgICAgICAqKQorCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJIyBidXQgdW5kZXJzdGFuZHMgYC16IGxpbmtlcl9mbGFnJy4gIEdDQyBkaXNjYXJkcyBpdCB3aXRob3V0IGAkd2wnLAorCSMgYnV0IGlzIGNhcmVmdWwgZW5vdWdoIG5vdCB0byByZW9yZGVyLgorCSMgU3VwcG9ydGVkIHNpbmNlIFNvbGFyaXMgMi42IChtYXliZSAyLjUuMT8pCisJaWYgdGVzdCAiJEdDQyIgPSB5ZXM7IHRoZW4KKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0teiAke3dsfWFsbGV4dHJhY3QkY29udmVuaWVuY2UgJHt3bH0teiAke3dsfWRlZmF1bHRleHRyYWN0JworCWVsc2UKKwkgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nLXogYWxsZXh0cmFjdCRjb252ZW5pZW5jZSAteiBkZWZhdWx0ZXh0cmFjdCcKKwlmaQorCTs7CisgICAgICBlc2FjCisgICAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKyAgICAgIDs7CisKKyAgICBzdW5vczQqKQorICAgICAgaWYgdGVzdCAieCRob3N0X3ZlbmRvciIgPSB4c2VxdWVudDsgdGhlbgorCSMgVXNlICRDQyB0byBsaW5rIHVuZGVyIHNlcXVlbnQsIGJlY2F1c2UgaXQgdGhyb3dzIGluIHNvbWUgZXh0cmEgLm8KKwkjIGZpbGVzIHRoYXQgbWFrZSAuaW5pdCBhbmQgLmZpbmkgc2VjdGlvbnMgd29yay4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtYXNzZXJ0IHB1cmUtdGV4dCAtQnN0YXRpYyAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX21pbnVzX0wsICQxKT15ZXMKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgc3lzdjQpCisgICAgICBjYXNlICRob3N0X3ZlbmRvciBpbgorCXNuaSkKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzICMgaXMgdGhpcyByZWFsbHkgdHJ1ZT8/PworCTs7CisJc2llbWVucykKKwkgICMjIExEIGlzIGxkIGl0IG1ha2VzIGEgUExBTUxJQgorCSAgIyMgQ0MganVzdCBtYWtlcyBhIEdyb3NzTW9kdWxlLgorCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKwkgIF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0nJENDIC1yIC1vICRvdXRwdXQkcmVsb2FkX29ianMnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vCisgICAgICAgIDs7CisJbW90b3JvbGEpCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckTEQgLUcgLWggJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRsaW5rZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPW5vICNNb3Rvcm9sYSBtYW51YWwgc2F5cyB5ZXMsIGJ1dCBteSB0ZXN0cyBzYXkgdGhleSBsaWUKKwk7OworICAgICAgZXNhYworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgIDs7CisKKyAgICBzeXN2NC4zKikKKyAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtRyAtaCAkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGxpbmtlcl9mbGFncycKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPSctQmV4cG9ydCcKKyAgICAgIDs7CisKKyAgICBzeXN2NCpNUCopCisgICAgICBpZiB0ZXN0IC1kIC91c3IvbmVjOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJcnVucGF0aF92YXI9TERfUlVOX1BBVEgKKwloYXJkY29kZV9ydW5wYXRoX3Zhcj15ZXMKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPXllcworICAgICAgZmkKKyAgICAgIDs7CisKKyAgICBzeXN2NCp1dzIqIHwgc3lzdjVPcGVuVU5JWCogfCBzeXN2NVVuaXhXYXJlNy5bWzAxXV0uW1sxMF1dKiB8IHVuaXh3YXJlNyogfCBzY28zLjJ2NS4wLltbMDI0XV0qKQorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICBydW5wYXRoX3Zhcj0nTERfUlVOX1BBVEgnCisKKyAgICAgIGlmIHRlc3QgIiRHQ0MiID0geWVzOyB0aGVuCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBlbHNlCisJX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKyAgICAgIGZpCisgICAgICA7OworCisgICAgc3lzdjUqIHwgc2NvMy4ydjUqIHwgc2NvNXY2KikKKyAgICAgICMgTm90ZTogV2UgY2FuIE5PVCB1c2UgLXogZGVmcyBhcyB3ZSBtaWdodCBkZXNpcmUsIGJlY2F1c2Ugd2UgZG8gbm90CisgICAgICAjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisgICAgICAjIGFsd2F5cyBiZSB1bnJlc29sdmVkLCB3aGljaCBtZWFucyBqdXN0IGFib3V0IG5vIGxpYnJhcnkgd291bGQKKyAgICAgICMgZXZlciBsaW5rIGNvcnJlY3RseS4gIElmIHdlJ3JlIG5vdCB1c2luZyBHTlUgbGQgd2UgdXNlIC16IHRleHQKKyAgICAgICMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorICAgICAgIyBhcyAteiBkZWZzLgorICAgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScke3dsfS16LHRleHQnCisgICAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPSc6JworICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBpZiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworICAgICAgZWxzZQorCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisgICAgICBmaQorICAgICAgOzsKKworICAgIHV0czQqKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJExEIC1HIC1oICRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkbGlua2VyX2ZsYWdzJworICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKyAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisgICAgICA7OworCisgICAgKikKKyAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgIDs7CisgICAgZXNhYworCisgICAgaWYgdGVzdCB4JGhvc3RfdmVuZG9yID0geHNuaTsgdGhlbgorICAgICAgY2FzZSAkaG9zdCBpbgorICAgICAgc3lzdjQgfCBzeXN2NC4ydXcyKiB8IHN5c3Y0LjMqIHwgc3lzdjUqKQorCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUJsYXJnZWR5bnN5bScKKwk7OworICAgICAgZXNhYworICAgIGZpCisgIGZpCitdKQorQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQordGVzdCAiJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSkiID0gbm8gJiYgY2FuX2J1aWxkX3NoYXJlZD1ubworCitfTFRfVEFHVkFSKHdpdGhfZ251X2xkLCAkMSk9JHdpdGhfZ251X2xkCisKK19MVF9ERUNMKFtdLCBbbGliZXh0XSwgWzBdLCBbT2xkIGFyY2hpdmUgc3VmZml4IChub3JtYWxseSAiYSIpXSlkbmwKK19MVF9ERUNMKFtdLCBbc2hyZXh0X2NtZHNdLCBbMV0sIFtTaGFyZWQgbGlicmFyeSBzdWZmaXggKG5vcm1hbGx5ICIuc28iKV0pZG5sCitfTFRfREVDTChbXSwgW2V4dHJhY3RfZXhwc3ltc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gZXh0cmFjdCB0aGUgZXhwb3J0ZWQgc3ltYm9sIGxpc3QgZnJvbSBhIHNoYXJlZCBhcmNoaXZlXSkKKworIworIyBEbyB3ZSBuZWVkIHRvIGV4cGxpY2l0bHkgbGluayBsaWJjPworIworY2FzZSAieCRfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSkiIGluCit4fHh5ZXMpCisgICMgQXNzdW1lIC1sYyBzaG91bGQgYmUgYWRkZWQKKyAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPXllcworCisgIGlmIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiB0ZXN0ICIkR0NDIiA9IHllczsgdGhlbgorICAgIGNhc2UgJF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSkgaW4KKyAgICAqJ34nKikKKyAgICAgICMgRklYTUU6IHdlIG1heSBoYXZlIHRvIGRlYWwgd2l0aCBtdWx0aS1jb21tYW5kIHNlcXVlbmNlcy4KKyAgICAgIDs7CisgICAgJyRDQyAnKikKKyAgICAgICMgVGVzdCB3aGV0aGVyIHRoZSBjb21waWxlciBpbXBsaWNpdGx5IGxpbmtzIHdpdGggLWxjIHNpbmNlIG9uIHNvbWUKKyAgICAgICMgc3lzdGVtcywgLWxnY2MgaGFzIHRvIGNvbWUgYmVmb3JlIC1sYy4gSWYgZ2NjIGFscmVhZHkgcGFzc2VzIC1sYworICAgICAgIyB0byBsZCwgZG9uJ3QgYWRkIC1sYyBiZWZvcmUgLWxnY2MuCisgICAgICBBQ19DQUNIRV9DSEVDSyhbd2hldGhlciAtbGMgc2hvdWxkIGJlIGV4cGxpY2l0bHkgbGlua2VkIGluXSwKKwlbbHRfY3ZfXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKSwKKwlbJFJNIGNvbmZ0ZXN0KgorCWVjaG8gIiRsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGUiID4gY29uZnRlc3QuJGFjX2V4dAorCisJaWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSkgMj5jb25mdGVzdC5lcnI7IHRoZW4KKwkgIHNvbmFtZT1jb25mdGVzdAorCSAgbGliPWNvbmZ0ZXN0CisJICBsaWJvYmpzPWNvbmZ0ZXN0LiRhY19vYmpleHQKKwkgIGRlcGxpYnM9CisJICB3bD0kX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX3dsLCAkMSkKKwkgIHBpY19mbGFnPSRfTFRfVEFHVkFSKGx0X3Byb2dfY29tcGlsZXJfcGljLCAkMSkKKwkgIGNvbXBpbGVyX2ZsYWdzPS12CisJICBsaW5rZXJfZmxhZ3M9LXYKKwkgIHZlcnN0cmluZz0KKwkgIG91dHB1dF9vYmpkaXI9LgorCSAgbGlibmFtZT1jb25mdGVzdAorCSAgbHRfc2F2ZV9hbGxvd191bmRlZmluZWRfZmxhZz0kX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9CisJICBpZiBBQ19UUllfRVZBTChfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpIDJcPlwmMSBcfCAkR1JFUCBcIiAtbGMgXCIgXD4vZGV2L251bGwgMlw+XCYxKQorCSAgdGhlbgorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCSAgZWxzZQorCSAgICBsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT15ZXMKKwkgIGZpCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JGx0X3NhdmVfYWxsb3dfdW5kZWZpbmVkX2ZsYWcKKwllbHNlCisJICBjYXQgY29uZnRlc3QuZXJyIDE+JjUKKwlmaQorCSRSTSBjb25mdGVzdCoKKwldKQorICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPSRsdF9jdl9bXV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKQorICAgICAgOzsKKyAgICBlc2FjCisgIGZpCisgIDs7Citlc2FjCisKK19MVF9UQUdERUNMKFtidWlsZF9saWJ0b29sX25lZWRfbGNdLCBbYXJjaGl2ZV9jbWRzX25lZWRfbGNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGFkZCAtbGMgZm9yIGJ1aWxkaW5nIHNoYXJlZCBsaWJyYXJpZXNdKQorX0xUX1RBR0RFQ0woW2FsbG93X2xpYnRvb2xfbGlic193aXRoX3N0YXRpY19ydW50aW1lc10sCisgICAgW2VuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXNdLCBbMF0sCisgICAgW1doZXRoZXIgb3Igbm90IHRvIGRpc2FsbG93IHNoYXJlZCBsaWJzIHdoZW4gcnVudGltZSBsaWJzIGFyZSBzdGF0aWNdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfZHluYW1pY19mbGFnX3NwZWNdLCBbMV0sCisgICAgW0NvbXBpbGVyIGZsYWcgdG8gYWxsb3cgcmVmbGV4aXZlIGRsb3BlbnNdKQorX0xUX1RBR0RFQ0woW10sIFt3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlY10sIFsxXSwKKyAgICBbQ29tcGlsZXIgZmxhZyB0byBnZW5lcmF0ZSBzaGFyZWQgb2JqZWN0cyBkaXJlY3RseSBmcm9tIGFyY2hpdmVzXSkKK19MVF9UQUdERUNMKFtdLCBbY29tcGlsZXJfbmVlZHNfb2JqZWN0XSwgWzFdLAorICAgIFtXaGV0aGVyIHRoZSBjb21waWxlciBjb3BlcyB3aXRoIHBhc3Npbmcgbm8gb2JqZWN0cyBkaXJlY3RseV0pCitfTFRfVEFHREVDTChbXSwgW29sZF9hcmNoaXZlX2Zyb21fbmV3X2NtZHNdLCBbMl0sCisgICAgW0NyZWF0ZSBhbiBvbGQtc3R5bGUgYXJjaGl2ZSBmcm9tIGEgc2hhcmVkIGFyY2hpdmVdKQorX0xUX1RBR0RFQ0woW10sIFtvbGRfYXJjaGl2ZV9mcm9tX2V4cHN5bXNfY21kc10sIFsyXSwKKyAgICBbQ3JlYXRlIGEgdGVtcG9yYXJ5IG9sZC1zdHlsZSBhcmNoaXZlIHRvIGxpbmsgaW5zdGVhZCBvZiBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9jbWRzXSwgWzJdLCBbQ29tbWFuZHMgdXNlZCB0byBidWlsZCBhIHNoYXJlZCBhcmNoaXZlXSkKK19MVF9UQUdERUNMKFtdLCBbYXJjaGl2ZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbbW9kdWxlX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIHVzZWQgdG8gYnVpbGQgYSBsb2FkYWJsZSBtb2R1bGUgaWYgZGlmZmVyZW50IGZyb20gYnVpbGRpbmcKKyAgICBhIHNoYXJlZCBhcmNoaXZlLl0pCitfTFRfVEFHREVDTChbXSwgW21vZHVsZV9leHBzeW1fY21kc10sIFsyXSkKK19MVF9UQUdERUNMKFtdLCBbd2l0aF9nbnVfbGRdLCBbMV0sCisgICAgW1doZXRoZXIgd2UgYXJlIGJ1aWxkaW5nIHdpdGggR05VIGxkIG9yIG5vdF0pCitfTFRfVEFHREVDTChbXSwgW2FsbG93X3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgYWxsb3dzIHNoYXJlZCBsaWJyYXJpZXMgd2l0aCB1bmRlZmluZWQgc3ltYm9scyB0byBiZSBidWlsdF0pCitfTFRfVEFHREVDTChbXSwgW25vX3VuZGVmaW5lZF9mbGFnXSwgWzFdLAorICAgIFtGbGFnIHRoYXQgZW5mb3JjZXMgbm8gdW5kZWZpbmVkIHN5bWJvbHNdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjXSwgWzFdLAorICAgIFtGbGFnIHRvIGhhcmRjb2RlICRsaWJkaXIgaW50byBhIGJpbmFyeSBkdXJpbmcgbGlua2luZy4KKyAgICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdKQorX0xUX1RBR0RFQ0woW10sIFtoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkXSwgWzFdLAorICAgIFtbSWYgbGQgaXMgdXNlZCB3aGVuIGxpbmtpbmcsIGZsYWcgdG8gaGFyZGNvZGUgJGxpYmRpciBpbnRvIGEgYmluYXJ5CisgICAgZHVyaW5nIGxpbmtpbmcuICBUaGlzIG11c3Qgd29yayBldmVuIGlmICRsaWJkaXIgZG9lcyBub3QgZXhpc3RdXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvcl0sIFsxXSwKKyAgICBbV2hldGhlciB3ZSBuZWVkIGEgc2luZ2xlICItcnBhdGgiIGZsYWcgd2l0aCBhIHNlcGFyYXRlZCBhcmd1bWVudF0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeV0pCitfTFRfVEFHREVDTChbXSwgW2hhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZV0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIERJUi9saWJOQU1FJHtzaGFyZWRfZXh0fSBkdXJpbmcgbGlua2luZyBoYXJkY29kZXMKKyAgICBESVIgaW50byB0aGUgcmVzdWx0aW5nIGJpbmFyeSBhbmQgdGhlIHJlc3VsdGluZyBsaWJyYXJ5IGRlcGVuZGVuY3kgaXMKKyAgICAiYWJzb2x1dGUiLCBpLmUgaW1wb3NzaWJsZSB0byBjaGFuZ2UgYnkgc2V0dGluZyAke3NobGlicGF0aF92YXJ9IGlmIHRoZQorICAgIGxpYnJhcnkgaXMgcmVsb2NhdGVkXSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfbWludXNfTF0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIHRoZSAtTERJUiBmbGFnIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfc2hsaWJwYXRoX3Zhcl0sIFswXSwKKyAgICBbU2V0IHRvICJ5ZXMiIGlmIHVzaW5nIFNITElCUEFUSF9WQVI9RElSIGR1cmluZyBsaW5raW5nIGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSByZXN1bHRpbmcgYmluYXJ5XSkKK19MVF9UQUdERUNMKFtdLCBbaGFyZGNvZGVfYXV0b21hdGljXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgYnVpbGRpbmcgYSBzaGFyZWQgbGlicmFyeSBhdXRvbWF0aWNhbGx5IGhhcmRjb2RlcyBESVIKKyAgICBpbnRvIHRoZSBsaWJyYXJ5IGFuZCBhbGwgc3Vic2VxdWVudCBsaWJyYXJpZXMgYW5kIGV4ZWN1dGFibGVzIGxpbmtlZAorICAgIGFnYWluc3QgaXRdKQorX0xUX1RBR0RFQ0woW10sIFtpbmhlcml0X3JwYXRoXSwgWzBdLAorICAgIFtTZXQgdG8geWVzIGlmIGxpbmtlciBhZGRzIHJ1bnRpbWUgcGF0aHMgb2YgZGVwZW5kZW50IGxpYnJhcmllcworICAgIHRvIHJ1bnRpbWUgcGF0aCBsaXN0XSkKK19MVF9UQUdERUNMKFtdLCBbbGlua19hbGxfZGVwbGlic10sIFswXSwKKyAgICBbV2hldGhlciBsaWJ0b29sIG11c3QgbGluayBhIHByb2dyYW0gYWdhaW5zdCBhbGwgaXRzIGRlcGVuZGVuY3kgbGlicmFyaWVzXSkKK19MVF9UQUdERUNMKFtdLCBbYWx3YXlzX2V4cG9ydF9zeW1ib2xzXSwgWzBdLAorICAgIFtTZXQgdG8gInllcyIgaWYgZXhwb3J0ZWQgc3ltYm9scyBhcmUgcmVxdWlyZWRdKQorX0xUX1RBR0RFQ0woW10sIFtleHBvcnRfc3ltYm9sc19jbWRzXSwgWzJdLAorICAgIFtUaGUgY29tbWFuZHMgdG8gbGlzdCBleHBvcnRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbZXhjbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgc2hvdWxkIG5vdCBiZSBsaXN0ZWQgaW4gdGhlIHByZWxvYWRlZCBzeW1ib2xzXSkKK19MVF9UQUdERUNMKFtdLCBbaW5jbHVkZV9leHBzeW1zXSwgWzFdLAorICAgIFtTeW1ib2xzIHRoYXQgbXVzdCBhbHdheXMgYmUgZXhwb3J0ZWRdKQorX0xUX1RBR0RFQ0woW10sIFtwcmVsaW5rX2NtZHNdLCBbMl0sCisgICAgW0NvbW1hbmRzIG5lY2Vzc2FyeSBmb3IgbGlua2luZyBwcm9ncmFtcyAoYWdhaW5zdCBsaWJyYXJpZXMpIHdpdGggdGVtcGxhdGVzXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGxpbmtfY21kc10sIFsyXSwKKyAgICBbQ29tbWFuZHMgbmVjZXNzYXJ5IGZvciBmaW5pc2hpbmcgbGlua2luZyBwcm9ncmFtc10pCitfTFRfVEFHREVDTChbXSwgW2ZpbGVfbGlzdF9zcGVjXSwgWzFdLAorICAgIFtTcGVjaWZ5IGZpbGVuYW1lIGNvbnRhaW5pbmcgaW5wdXQgZmlsZXNdKQorZG5sIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkCitkbmwgX0xUX1RBR0RFQ0woW10sIFt0aHJlYWRfc2FmZV9mbGFnX3NwZWNdLCBbMV0sCitkbmwgICAgW0NvbXBpbGVyIGZsYWcgdG8gZ2VuZXJhdGUgdGhyZWFkIHNhZmUgb2JqZWN0c10pCitdKSMgX0xUX0xJTktFUl9TSExJQlMKKworCisjIF9MVF9MQU5HX0NfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciBhIEMgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NfQ09ORklHXSwKK1ttNF9yZXF1aXJlKFtfTFRfREVDTF9FR1JFUF0pZG5sCitsdF9zYXZlX0NDPSIkQ0MiCitBQ19MQU5HX1BVU0goQykKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PWMKKworIyBPYmplY3QgZmlsZSBleHRlbnNpb24gZm9yIGNvbXBpbGVkIEMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSJpbnQgc29tZV92YXJpYWJsZSA9IDA7IgorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSdpbnQgbWFpbigpe3JldHVybigwKTt9JworCitfTFRfVEFHX0NPTVBJTEVSCisjIFNhdmUgdGhlIGRlZmF1bHQgY29tcGlsZXIsIHNpbmNlIGl0IGdldHMgb3ZlcndyaXR0ZW4gd2hlbiB0aGUgb3RoZXIKKyMgdGFncyBhcmUgYmVpbmcgdGVzdGVkLCBhbmQgX0xUX1RBR1ZBUihjb21waWxlciwgW10pIGlzIGEgTk9QLgorY29tcGlsZXJfREVGQVVMVD0kQ0MKKworIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKK19MVF9DT01QSUxFUl9CT0lMRVJQTEFURQorX0xUX0xJTktFUl9CT0lMRVJQTEFURQorCisjIyBDQVZFQVQgRU1QVE9SOgorIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyMjIHRoZSBydW5uaW5nIG9yZGVyIG9yIG90aGVyd2lzZSBtb3ZlIHRoZW0gYXJvdW5kIHVubGVzcyB5b3Uga25vdyBleGFjdGx5CisjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgX0xUX0NPTVBJTEVSX05PX1JUVEkoJDEpCisgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgIF9MVF9DT01QSUxFUl9DX08oJDEpCisgIF9MVF9DT01QSUxFUl9GSUxFX0xPQ0tTKCQxKQorICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgX0xUX1NZU19EWU5BTUlDX0xJTktFUigkMSkKKyAgX0xUX0xJTktFUl9IQVJEQ09ERV9MSUJQQVRIKCQxKQorICBMVF9TWVNfRExPUEVOX1NFTEYKKyAgX0xUX0NNRF9TVFJJUExJQgorCisgICMgUmVwb3J0IHdoaWNoIGxpYnJhcnkgdHlwZXMgd2lsbCBhY3R1YWxseSBiZSBidWlsdAorICBBQ19NU0dfQ0hFQ0tJTkcoW2lmIGxpYnRvb2wgc3VwcG9ydHMgc2hhcmVkIGxpYnJhcmllc10pCisgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgIHRlc3QgIiRjYW5fYnVpbGRfc2hhcmVkIiA9ICJubyIgJiYgZW5hYmxlX3NoYXJlZD1ubworCisgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgIGNhc2UgJGhvc3Rfb3MgaW4KKyAgYWl4MyopCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICBpZiB0ZXN0IC1uICIkUkFOTElCIjsgdGhlbgorICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgIGZpCisgICAgOzsKKworICBhaXhbWzQtOV1dKikKKyAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiICE9IGlhNjQgJiYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0gbm8gOyB0aGVuCisgICAgICB0ZXN0ICIkZW5hYmxlX3NoYXJlZCIgPSB5ZXMgJiYgZW5hYmxlX3N0YXRpYz1ubworICAgIGZpCisgICAgOzsKKyAgZXNhYworICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAjIE1ha2Ugc3VyZSBlaXRoZXIgZW5hYmxlX3NoYXJlZCBvciBlbmFibGVfc3RhdGljIGlzIHllcy4KKyAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKK0FDX0xBTkdfUE9QCitDQz0iJGx0X3NhdmVfQ0MiCitdKSMgX0xUX0xBTkdfQ19DT05GSUcKKworCisjIF9MVF9MQU5HX0NYWF9DT05GSUcoW1RBR10pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBDKysgY29tcGlsZXIgYXJlIHN1aXRhYmx5CisjIGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcgdG8gd3JpdGUKKyMgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0NYWF9DT05GSUddLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorbTRfcmVxdWlyZShbX0xUX0RFQ0xfRUdSRVBdKWRubAorbTRfcmVxdWlyZShbX0xUX1BBVEhfTUFOSUZFU1RfVE9PTF0pZG5sCitpZiB0ZXN0IC1uICIkQ1hYIiAmJiAoIHRlc3QgIlgkQ1hYIiAhPSAiWG5vIiAmJgorICAgICggKHRlc3QgIlgkQ1hYIiA9ICJYZysrIiAmJiBgZysrIC12ID4vZGV2L251bGwgMj4mMWAgKSB8fAorICAgICh0ZXN0ICJYJENYWCIgIT0gIlhnKysiKSkpIDsgdGhlbgorICBBQ19QUk9HX0NYWENQUAorZWxzZQorICBfbHRfY2F1Z2h0X0NYWF9lcnJvcj15ZXMKK2ZpCisKK0FDX0xBTkdfUFVTSChDKyspCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9uZWVkc19vYmplY3QsICQxKT1ubworX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT11bnN1cHBvcnRlZAorX0xUX1RBR1ZBUihoYXJkY29kZV9hdXRvbWF0aWMsICQxKT1ubworX0xUX1RBR1ZBUihpbmhlcml0X3JwYXRoLCAkMSk9bm8KK19MVF9UQUdWQVIobW9kdWxlX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobW9kdWxlX2V4cHN5bV9jbWRzLCAkMSk9CitfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT11bmtub3duCitfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKT0kb2xkX2FyY2hpdmVfY21kcworX0xUX1RBR1ZBUihyZWxvYWRfZmxhZywgJDEpPSRyZWxvYWRfZmxhZworX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSRyZWxvYWRfY21kcworX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPQorX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9bm8KKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIEMrKyB0ZXN0IHNvdXJjZXMuCithY19leHQ9Y3BwCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBDKysgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBDWFggY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzOyB0aGVuCisgICMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCisgIGx0X3NpbXBsZV9jb21waWxlX3Rlc3RfY29kZT0iaW50IHNvbWVfdmFyaWFibGUgPSAwOyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9J2ludCBtYWluKGludCwgY2hhciAqW1tdXSkgeyByZXR1cm4oMCk7IH0nCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSRDQworICBsdF9zYXZlX0NGTEFHUz0kQ0ZMQUdTCisgIGx0X3NhdmVfTEQ9JExECisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgR0NDPSRHWFgKKyAgbHRfc2F2ZV93aXRoX2dudV9sZD0kd2l0aF9nbnVfbGQKKyAgbHRfc2F2ZV9wYXRoX0xEPSRsdF9jdl9wYXRoX0xECisgIGlmIHRlc3QgLW4gIiR7bHRfY3ZfcHJvZ19nbnVfbGRjeHgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wcm9nX2dudV9sZD0kbHRfY3ZfcHJvZ19nbnVfbGRjeHgKKyAgZWxzZQorICAgICRhc191bnNldCBsdF9jdl9wcm9nX2dudV9sZAorICBmaQorICBpZiB0ZXN0IC1uICIke2x0X2N2X3BhdGhfTERDWFgrc2V0fSI7IHRoZW4KKyAgICBsdF9jdl9wYXRoX0xEPSRsdF9jdl9wYXRoX0xEQ1hYCisgIGVsc2UKKyAgICAkYXNfdW5zZXQgbHRfY3ZfcGF0aF9MRAorICBmaQorICB0ZXN0IC16ICIke0xEQ1hYK3NldH0iIHx8IExEPSRMRENYWAorICBDQz0ke0NYWC0iYysrIn0KKyAgQ0ZMQUdTPSRDWFhGTEFHUworICBjb21waWxlcj0kQ0MKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgICMgV2UgZG9uJ3Qgd2FudCAtZm5vLWV4Y2VwdGlvbiB3aGVuIGNvbXBpbGluZyBDKysgY29kZSwgc28gc2V0IHRoZQorICAgICMgbm9fYnVpbHRpbl9mbGFnIHNlcGFyYXRlbHkKKyAgICBpZiB0ZXN0ICIkR1hYIiA9IHllczsgdGhlbgorICAgICAgX0xUX1RBR1ZBUihsdF9wcm9nX2NvbXBpbGVyX25vX2J1aWx0aW5fZmxhZywgJDEpPScgLWZuby1idWlsdGluJworICAgIGVsc2UKKyAgICAgIF9MVF9UQUdWQVIobHRfcHJvZ19jb21waWxlcl9ub19idWlsdGluX2ZsYWcsICQxKT0KKyAgICBmaQorCisgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICMgU2V0IHVwIGRlZmF1bHQgR05VIEMrKyBjb25maWd1cmF0aW9uCisKKyAgICAgIExUX1BBVEhfTEQKKworICAgICAgIyBDaGVjayBpZiBHTlUgQysrIHVzZXMgR05VIGxkIGFzIHRoZSB1bmRlcmx5aW5nIGxpbmtlciwgc2luY2UgdGhlCisgICAgICAjIGFyY2hpdmluZyBjb21tYW5kcyBiZWxvdyBhc3N1bWUgdGhhdCBHTlUgbGQgaXMgYmVpbmcgdXNlZC4KKyAgICAgIGlmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDICRwaWNfZmxhZyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAkcGljX2ZsYWcgLXNoYXJlZCAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKyAgICAgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCisgICAgICAgICMgSWYgYXJjaGl2ZV9jbWRzIHJ1bnMgTEQsIG5vdCBDQywgd2xhcmMgc2hvdWxkIGJlIGVtcHR5CisgICAgICAgICMgWFhYIEkgdGhpbmsgd2xhcmMgY2FuIGJlIGVsaW1pbmF0ZWQgaW4gbHRjZi1jeHgsIGJ1dCBJIG5lZWQgdG8KKyAgICAgICAgIyAgICAgaW52ZXN0aWdhdGUgaXQgYSBsaXR0bGUgYml0IG1vcmUuIChNTSkKKyAgICAgICAgd2xhcmM9JyR7d2x9JworCisgICAgICAgICMgYW5jaWVudCBHTlUgbGQgZGlkbid0IHN1cHBvcnQgLS13aG9sZS1hcmNoaXZlIGV0LiBhbC4KKyAgICAgICAgaWYgZXZhbCAiYCRDQyAtcHJpbnQtcHJvZy1uYW1lPWxkYCAtLWhlbHAgMj4mMSIgfAorCSAgJEdSRVAgJ25vLXdob2xlLWFyY2hpdmUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPSIkd2xhcmMiJy0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAnIiR3bGFyYyInLS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICBlbHNlCisgICAgICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPQorICAgICAgICBmaQorICAgICAgZWxzZQorICAgICAgICB3aXRoX2dudV9sZD1ubworICAgICAgICB3bGFyYz0KKworICAgICAgICAjIEEgZ2VuZXJpYyBhbmQgdmVyeSBzaW1wbGUgZGVmYXVsdCBzaGFyZWQgbGlicmFyeSBjcmVhdGlvbgorICAgICAgICAjIGNvbW1hbmQgZm9yIEdOVSBDKysgZm9yIHRoZSBjYXNlIHdoZXJlIGl0IHVzZXMgdGhlIG5hdGl2ZQorICAgICAgICAjIGxpbmtlciwgaW5zdGVhZCBvZiBHTlUgbGQuICBJZiBwb3NzaWJsZSwgdGhpcyBzZXR0aW5nIHNob3VsZAorICAgICAgICAjIG92ZXJyaWRkZW4gdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIG5hdGl2ZSBsaW5rZXIgZmVhdHVyZXMgb24KKyAgICAgICAgIyB0aGUgcGxhdGZvcm0gaXQgaXMgYmVpbmcgdXNlZCBvbi4KKyAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkbGliJworICAgICAgZmkKKworICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKworICAgIGVsc2UKKyAgICAgIEdYWD1ubworICAgICAgd2l0aF9nbnVfbGQ9bm8KKyAgICAgIHdsYXJjPQorICAgIGZpCisKKyAgICAjIFBPUlRNRTogZmlsbCBpbiBhIGRlc2NyaXB0aW9uIG9mIHlvdXIgc3lzdGVtJ3MgQysrIGxpbmsgY2hhcmFjdGVyaXN0aWNzCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSAkY29tcGlsZXIgbGlua2VyICgkTEQpIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgICBhaXhbWzQtOV1dKikKKyAgICAgICAgaWYgdGVzdCAiJGhvc3RfY3B1IiA9IGlhNjQ7IHRoZW4KKyAgICAgICAgICAjIE9uIElBNjQsIHRoZSBsaW5rZXIgZG9lcyBydW4gdGltZSBsaW5raW5nIGJ5IGRlZmF1bHQsIHNvIHdlIGRvbid0CisgICAgICAgICAgIyBoYXZlIHRvIGRvIGFueXRoaW5nIHNwZWNpYWwuCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLUJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0iIgorICAgICAgICBlbHNlCisgICAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz1ubworCisgICAgICAgICAgIyBUZXN0IGlmIHdlIGFyZSB0cnlpbmcgdG8gdXNlIHJ1biB0aW1lIGxpbmtpbmcgb3Igbm9ybWFsCisgICAgICAgICAgIyBBSVggc3R5bGUgbGlua2luZy4gSWYgLWJydGwgaXMgc29tZXdoZXJlIGluIExERkxBR1MsIHdlCisgICAgICAgICAgIyBuZWVkIHRvIGRvIHJ1bnRpbWUgbGlua2luZy4KKyAgICAgICAgICBjYXNlICRob3N0X29zIGluIGFpeDQuW1syM11dfGFpeDQuW1syM11dLip8YWl4W1s1LTldXSopCisJICAgIGZvciBsZF9mbGFnIGluICRMREZMQUdTOyBkbworCSAgICAgIGNhc2UgJGxkX2ZsYWcgaW4KKwkgICAgICAqLWJydGwqKQorCSAgICAgICAgYWl4X3VzZV9ydW50aW1lbGlua2luZz15ZXMKKwkgICAgICAgIGJyZWFrCisJICAgICAgICA7OworCSAgICAgIGVzYWMKKwkgICAgZG9uZQorCSAgICA7OworICAgICAgICAgIGVzYWMKKworICAgICAgICAgIGV4cF9zeW1fZmxhZz0nLWJleHBvcnQnCisgICAgICAgICAgbm9fZW50cnlfZmxhZz0nLWJub2VudHJ5JworICAgICAgICBmaQorCisgICAgICAgICMgV2hlbiBsYXJnZSBleGVjdXRhYmxlcyBvciBzaGFyZWQgb2JqZWN0cyBhcmUgYnVpbHQsIEFJWCBsZCBjYW4KKyAgICAgICAgIyBoYXZlIHByb2JsZW1zIGNyZWF0aW5nIHRoZSB0YWJsZSBvZiBjb250ZW50cy4gIElmIGxpbmtpbmcgYSBsaWJyYXJ5CisgICAgICAgICMgb3IgcHJvZ3JhbSByZXN1bHRzIGluICJlcnJvciBUT0Mgb3ZlcmZsb3ciIGFkZCAtbW1pbmltYWwtdG9jIHRvCisgICAgICAgICMgQ1hYRkxBR1MvQ0ZMQUdTIGZvciBnKysvZ2NjLiAgSW4gdGhlIGNhc2VzIHdoZXJlIHRoYXQgaXMgbm90CisgICAgICAgICMgZW5vdWdoIHRvIGZpeCB0aGUgcHJvYmxlbSwgYWRkIC1XbCwtYmJpZ3RvYyB0byBMREZMQUdTLgorCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JycKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3RfYWJzb2x1dGUsICQxKT15ZXMKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9JzonCisgICAgICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworICAgICAgICBfTFRfVEFHVkFSKGZpbGVfbGlzdF9zcGVjLCAkMSk9JyR7d2x9LWYsJworCisgICAgICAgIGlmIHRlc3QgIiRHWFgiID0geWVzOyB0aGVuCisgICAgICAgICAgY2FzZSAkaG9zdF9vcyBpbiBhaXg0LltbMDEyXV18YWl4NC5bWzAxMl1dLiopCisgICAgICAgICAgIyBXZSBvbmx5IHdhbnQgdG8gZG8gdGhpcyBvbiBBSVggNC4yIGFuZCBsb3dlciwgdGhlIGNoZWNrCisgICAgICAgICAgIyBiZWxvdyBmb3IgYnJva2VuIGNvbGxlY3QyIGRvZXNuJ3Qgd29yayB1bmRlciA0LjMrCisJICBjb2xsZWN0Mm5hbWU9YCR7Q0N9IC1wcmludC1wcm9nLW5hbWU9Y29sbGVjdDJgCisJICBpZiB0ZXN0IC1mICIkY29sbGVjdDJuYW1lIiAmJgorCSAgICAgc3RyaW5ncyAiJGNvbGxlY3QybmFtZSIgfCAkR1JFUCByZXNvbHZlX2xpYl9uYW1lID4vZGV2L251bGwKKwkgIHRoZW4KKwkgICAgIyBXZSBoYXZlIHJld29ya2VkIGNvbGxlY3QyCisJICAgIDoKKwkgIGVsc2UKKwkgICAgIyBXZSBoYXZlIG9sZCBjb2xsZWN0MgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXVuc3VwcG9ydGVkCisJICAgICMgSXQgZmFpbHMgdG8gZmluZCB1bmluc3RhbGxlZCBsaWJyYXJpZXMgd2hlbiB0aGUgdW5pbnN0YWxsZWQKKwkgICAgIyBwYXRoIGlzIG5vdCBsaXN0ZWQgaW4gdGhlIGxpYnBhdGguICBTZXR0aW5nIGhhcmRjb2RlX21pbnVzX0wKKwkgICAgIyB0byB1bnN1cHBvcnRlZCBmb3JjZXMgcmVsaW5raW5nCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLUwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KKwkgIGZpCisgICAgICAgICAgZXNhYworICAgICAgICAgIHNoYXJlZF9mbGFnPSctc2hhcmVkJworCSAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisJICAgIHNoYXJlZF9mbGFnPSIkc2hhcmVkX2ZsYWcgIicke3dsfS1HJworCSAgZmkKKyAgICAgICAgZWxzZQorICAgICAgICAgICMgbm90IHVzaW5nIGdjYworICAgICAgICAgIGlmIHRlc3QgIiRob3N0X2NwdSIgPSBpYTY0OyB0aGVuCisJICAjIFZpc3VhbEFnZSBDKyssIFZlcnNpb24gNS41IGZvciBBSVggNUwgZm9yIElBLTY0LCBCZXRhIDMgUmVsZWFzZQorCSAgIyBjaG9rZXMgb24gLVdsLC1HLiBUaGUgZm9sbG93aW5nIGxpbmUgaXMgY29ycmVjdDoKKwkgIHNoYXJlZF9mbGFnPSctRycKKyAgICAgICAgICBlbHNlCisJICAgIGlmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IHllczsgdGhlbgorCSAgICAgIHNoYXJlZF9mbGFnPScke3dsfS1HJworCSAgICBlbHNlCisJICAgICAgc2hhcmVkX2ZsYWc9JyR7d2x9LWJNOlNSRScKKwkgICAgZmkKKyAgICAgICAgICBmaQorICAgICAgICBmaQorCisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LWJleHBhbGwnCisgICAgICAgICMgSXQgc2VlbXMgdGhhdCAtYmV4cGFsbCBkb2VzIG5vdCBleHBvcnQgc3ltYm9scyBiZWdpbm5pbmcgd2l0aAorICAgICAgICAjIHVuZGVyc2NvcmUgKF8pLCBzbyBpdCBpcyBiZXR0ZXIgdG8gZ2VuZXJhdGUgYSBsaXN0IG9mIHN5bWJvbHMgdG8KKwkjIGV4cG9ydC4KKyAgICAgICAgX0xUX1RBR1ZBUihhbHdheXNfZXhwb3J0X3N5bWJvbHMsICQxKT15ZXMKKyAgICAgICAgaWYgdGVzdCAiJGFpeF91c2VfcnVudGltZWxpbmtpbmciID0geWVzOyB0aGVuCisgICAgICAgICAgIyBXYXJuaW5nIC0gd2l0aG91dCB1c2luZyB0aGUgb3RoZXIgcnVudGltZSBsb2FkaW5nIGZsYWdzICgtYnJ0bCksCisgICAgICAgICAgIyAtYmVyb2sgd2lsbCBsaW5rIHdpdGhvdXQgZXJyb3IsIGJ1dCBtYXkgcHJvZHVjZSBhIGJyb2tlbiBsaWJyYXJ5LgorICAgICAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nLWJlcm9rJworICAgICAgICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbiBlbXB0eQorICAgICAgICAgICMgZXhlY3V0YWJsZS4KKyAgICAgICAgICBfTFRfU1lTX01PRFVMRV9QQVRIX0FJWChbJDFdKQorICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCisgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgYGlmIHRlc3QgIngke2FsbG93X3VuZGVmaW5lZF9mbGFnfSIgIT0gIngiOyB0aGVuIGZ1bmNfZWNob19hbGwgIiR7d2x9JHthbGxvd191bmRlZmluZWRfZmxhZ30iOyBlbHNlIDo7IGZpYCAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyAkc2hhcmVkX2ZsYWciCisgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0ICIkaG9zdF9jcHUiID0gaWE2NDsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkbGliZGlyOi91c3IvbGliOi9saWInCisJICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0iLXogbm9kZWZzIgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0iXCRDQyAkc2hhcmVkX2ZsYWciJyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICRsaWJvYmpzICRkZXBsaWJzICciXCR7d2x9JG5vX2VudHJ5X2ZsYWciJyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0ke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAnIlwke3dsfSRleHBfc3ltX2ZsYWc6XCRleHBvcnRfc3ltYm9scyIKKyAgICAgICAgICBlbHNlCisJICAgICMgRGV0ZXJtaW5lIHRoZSBkZWZhdWx0IGxpYnBhdGggZnJvbSB0aGUgdmFsdWUgZW5jb2RlZCBpbiBhbgorCSAgICAjIGVtcHR5IGV4ZWN1dGFibGUuCisJICAgIF9MVF9TWVNfTU9EVUxFX1BBVEhfQUlYKFskMV0pCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ibGlicGF0aDokbGliZGlyOiciJGFpeF9saWJwYXRoIgorCSAgICAjIFdhcm5pbmcgLSB3aXRob3V0IHVzaW5nIHRoZSBvdGhlciBydW4gdGltZSBsb2FkaW5nIGZsYWdzLAorCSAgICAjIC1iZXJvayB3aWxsIGxpbmsgd2l0aG91dCBlcnJvciwgYnV0IG1heSBwcm9kdWNlIGEgYnJva2VuIGxpYnJhcnkuCisJICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWJlcm5vdG9rJworCSAgICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAke3dsfS1iZXJvaycKKwkgICAgaWYgdGVzdCAiJHdpdGhfZ251X2xkIiA9IHllczsgdGhlbgorCSAgICAgICMgV2Ugb25seSB1c2UgdGhpcyBjb2RlIGZvciBHTlUgbGRzIHRoYXQgc3VwcG9ydCAtLXdob2xlLWFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgZWxzZQorCSAgICAgICMgRXhwb3J0ZWQgc3ltYm9scyBjYW4gYmUgcHVsbGVkIGludG8gc2hhcmVkIG9iamVjdHMgZnJvbSBhcmNoaXZlcworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJGNvbnZlbmllbmNlJworCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9eWVzCisJICAgICMgVGhpcyBpcyBzaW1pbGFyIHRvIGhvdyBBSVggdHJhZGl0aW9uYWxseSBidWlsZHMgaXRzIHNoYXJlZAorCSAgICAjIGxpYnJhcmllcy4KKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9IlwkQ0MgJHNoYXJlZF9mbGFnIicgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkZGVwbGlicyAke3dsfS1ibm9lbnRyeSAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tYkU6JGV4cG9ydF9zeW1ib2xzJHthbGxvd191bmRlZmluZWRfZmxhZ31+JEFSICRBUl9GTEFHUyAkb3V0cHV0X29iamRpci8kbGlibmFtZSRyZWxlYXNlLmEgJG91dHB1dF9vYmpkaXIvJHNvbmFtZScKKyAgICAgICAgICBmaQorICAgICAgICBmaQorICAgICAgICA7OworCisgICAgICBiZW9zKikKKwlpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnOiBzdXBwb3J0ZWQgdGFyZ2V0czouKiBlbGYnID4gL2Rldi9udWxsOyB0aGVuCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgICMgSm9zZXBoIEJlY2tlbmJhY2ggPGpyYjNAYmVzdC5jb20+IHNheXMgc29tZSByZWxlYXNlcyBvZiBnY2MKKwkgICMgc3VwcG9ydCAtLXVuZGVmaW5lZC4gIFRoaXMgZGVzZXJ2ZXMgc29tZSBpbnZlc3RpZ2F0aW9uLiAgRklYTUUKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtbm9zdGFydCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwllbHNlCisJICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJZmkKKwk7OworCisgICAgICBjaG9ydXMqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgICopCisJICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgY3lnd2luKiB8IG1pbmd3KiB8IHB3MzIqIHwgY2VnY2MqKQorCWNhc2UgJEdYWCwkY2NfYmFzZW5hbWUgaW4KKwksY2wqIHwgbm8sY2wqKQorCSAgIyBOYXRpdmUgTVNWQworCSAgIyBoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjIGlzIGFjdHVhbGx5IG1lYW5pbmdsZXNzLCBhcyB0aGVyZSBpcworCSAgIyBubyBzZWFyY2ggcGF0aCBmb3IgRExMcy4KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScgJworCSAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPXVuc3VwcG9ydGVkCisJICBfTFRfVEFHVkFSKGFsd2F5c19leHBvcnRfc3ltYm9scywgJDEpPXllcworCSAgX0xUX1RBR1ZBUihmaWxlX2xpc3Rfc3BlYywgJDEpPSdAJworCSAgIyBUZWxsIGx0bWFpbiB0byBtYWtlIC5saWIgZmlsZXMsIG5vdCAuYSBmaWxlcy4KKwkgIGxpYmV4dD1saWIKKwkgICMgVGVsbCBsdG1haW4gdG8gbWFrZSAuZGxsIGZpbGVzLCBub3QgLnNvIGZpbGVzLgorCSAgc2hyZXh0X2NtZHM9Ii5kbGwiCisJICAjIEZJWE1FOiBTZXR0aW5nIGxpbmtuYW1lcyBoZXJlIGlzIGEgYmFkIGhhY2suCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGlib2JqcyAkY29tcGlsZXJfZmxhZ3MgJGRlcGxpYnMgLVdsLC1kbGx+bGlua25hbWVzPScKKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdpZiB0ZXN0ICJ4YCRTRUQgMXEgJGV4cG9ydF9zeW1ib2xzYCIgPSB4RVhQT1JUUzsgdGhlbgorCSAgICAgICRTRUQgLW4gLWUgJ3MvXFxcXFxcXCguKlxcXFxcXFwpLy1saW5rXFxcIC1FWFBPUlQ6XFxcXFxcXDEvJyAtZSAnMVxcXCFwJyA8ICRleHBvcnRfc3ltYm9scyA+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZXhwOworCSAgICBlbHNlCisJICAgICAgJFNFRCAtZSAncy9cXFxcXFxcKC4qXFxcXFxcXCkvLWxpbmtcXFwgLUVYUE9SVDpcXFxcXFxcMS8nIDwgJGV4cG9ydF9zeW1ib2xzID4gJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5leHA7CisJICAgIGZpfgorCSAgICAkQ0MgLW8gJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUgJGxpYm9ianMgJGNvbXBpbGVyX2ZsYWdzICRkZXBsaWJzICJAJHRvb2xfb3V0cHV0X29iamRpciRzb25hbWUuZXhwIiAtV2wsLURMTCwtSU1QTElCOiIkdG9vbF9vdXRwdXRfb2JqZGlyJGxpYm5hbWUuZGxsLmxpYiJ+CisJICAgIGxpbmtuYW1lcz0nCisJICAjIFRoZSBsaW5rZXIgd2lsbCBub3QgYXV0b21hdGljYWxseSBidWlsZCBhIHN0YXRpYyBsaWIgaWYgd2UgYnVpbGQgYSBETEwuCisJICAjIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfZnJvbV9uZXdfY21kcywgJDEpPSd0cnVlJworCSAgX0xUX1RBR1ZBUihlbmFibGVfc2hhcmVkX3dpdGhfc3RhdGljX3J1bnRpbWVzLCAkMSk9eWVzCisJICAjIERvbid0IHVzZSByYW5saWIKKwkgIF9MVF9UQUdWQVIob2xkX3Bvc3RpbnN0YWxsX2NtZHMsICQxKT0nY2htb2QgNjQ0ICRvbGRsaWInCisJICBfTFRfVEFHVkFSKHBvc3RsaW5rX2NtZHMsICQxKT0nbHRfb3V0cHV0ZmlsZT0iQE9VVFBVVEAifgorCSAgICBsdF90b29sX291dHB1dGZpbGU9IkBUT09MX09VVFBVVEAifgorCSAgICBjYXNlICRsdF9vdXRwdXRmaWxlIGluCisJICAgICAgKi5leGV8Ki5FWEUpIDs7CisJICAgICAgKikKKwkJbHRfb3V0cHV0ZmlsZT0iJGx0X291dHB1dGZpbGUuZXhlIgorCQlsdF90b29sX291dHB1dGZpbGU9IiRsdF90b29sX291dHB1dGZpbGUuZXhlIgorCQk7OworCSAgICBlc2FjfgorCSAgICBmdW5jX3RvX3Rvb2xfZmlsZSAiJGx0X291dHB1dGZpbGUifgorCSAgICBpZiB0ZXN0ICIkTUFOSUZFU1RfVE9PTCIgIT0gIjoiICYmIHRlc3QgLWYgIiRsdF9vdXRwdXRmaWxlLm1hbmlmZXN0IjsgdGhlbgorCSAgICAgICRNQU5JRkVTVF9UT09MIC1tYW5pZmVzdCAiJGx0X3Rvb2xfb3V0cHV0ZmlsZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIkbHRfdG9vbF9vdXRwdXRmaWxlIiB8fCBleGl0IDE7CisJICAgICAgJFJNICIkbHRfb3V0cHV0ZmlsZS5tYW5pZmVzdCI7CisJICAgIGZpJworCSAgOzsKKwkqKQorCSAgIyBnKysKKwkgICMgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSkgaXMgYWN0dWFsbHkgbWVhbmluZ2xlc3MsCisJICAjIGFzIHRoZXJlIGlzIG5vIHNlYXJjaCBwYXRoIGZvciBETExzLgorCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1MJGxpYmRpcicKKwkgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtYWxsLXN5bWJvbHMnCisJICBfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9dW5zdXBwb3J0ZWQKKwkgIF9MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoZW5hYmxlX3NoYXJlZF93aXRoX3N0YXRpY19ydW50aW1lcywgJDEpPXllcworCisJICBpZiAkTEQgLS1oZWxwIDI+JjEgfCAkR1JFUCAnYXV0by1pbXBvcnQnID4gL2Rldi9udWxsOyB0aGVuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW8gJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAke3dsfS0tZW5hYmxlLWF1dG8taW1hZ2UtYmFzZSAtWGxpbmtlciAtLW91dC1pbXBsaWIgLVhsaW5rZXIgJGxpYicKKwkgICAgIyBJZiB0aGUgZXhwb3J0LXN5bWJvbHMgZmlsZSBhbHJlYWR5IGlzIGEgLmRlZiBmaWxlICgxc3QgbGluZQorCSAgICAjIGlzIEVYUE9SVFMpLCB1c2UgaXQgYXMgaXM7IG90aGVyd2lzZSwgcHJlcGVuZC4uLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0naWYgdGVzdCAieGAkU0VEIDFxICRleHBvcnRfc3ltYm9sc2AiID0geEVYUE9SVFM7IHRoZW4KKwkgICAgICBjcCAkZXhwb3J0X3N5bWJvbHMgJG91dHB1dF9vYmpkaXIvJHNvbmFtZS5kZWY7CisJICAgIGVsc2UKKwkgICAgICBlY2hvIEVYUE9SVFMgPiAkb3V0cHV0X29iamRpci8kc29uYW1lLmRlZjsKKwkgICAgICBjYXQgJGV4cG9ydF9zeW1ib2xzID4+ICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmOworCSAgICBmaX4KKwkgICAgJENDIC1zaGFyZWQgLW5vc3RkbGliICRvdXRwdXRfb2JqZGlyLyRzb25hbWUuZGVmICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbyAkb3V0cHV0X29iamRpci8kc29uYW1lICR7d2x9LS1lbmFibGUtYXV0by1pbWFnZS1iYXNlIC1YbGlua2VyIC0tb3V0LWltcGxpYiAtWGxpbmtlciAkbGliJworCSAgZWxzZQorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICBmaQorCSAgOzsKKwllc2FjCisJOzsKKyAgICAgIGRhcndpbiogfCByaGFwc29keSopCisgICAgICAgIF9MVF9EQVJXSU5fTElOS0VSX0ZFQVRVUkVTKCQxKQorCTs7CisKKyAgICAgIGRndXgqKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIGVjKysqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgIGdoY3gqKQorCSAgICAjIEdyZWVuIEhpbGxzIEMrKyBDb21waWxlcgorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgZnJlZWJzZFtbMTJdXSopCisgICAgICAgICMgQysrIHNoYXJlZCBsaWJyYXJpZXMgcmVwb3J0ZWQgdG8gYmUgZmFpcmx5IGJyb2tlbiBiZWZvcmUKKwkjIHN3aXRjaCB0byBFTEYKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkLWVsZiopCisgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworICAgICAgICA7OworCisgICAgICBmcmVlYnNkKiB8IGRyYWdvbmZseSopCisgICAgICAgICMgRnJlZUJTRCAzIGFuZCBsYXRlciB1c2UgR05VIEMrKyBhbmQgR05VIGxkIHdpdGggc3RhbmRhcmQgRUxGCisgICAgICAgICMgY29udmVudGlvbnMKKyAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT15ZXMKKyAgICAgICAgOzsKKworICAgICAgZ251KikKKyAgICAgICAgOzsKKworICAgICAgaGFpa3UqKQorICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKyAgICAgICAgX0xUX1RBR1ZBUihsaW5rX2FsbF9kZXBsaWJzLCAkMSk9eWVzCisgICAgICAgIDs7CisKKyAgICAgIGhwdXg5KikKKyAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9K2IgJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPXllcyAjIE5vdCBpbiB0aGUgc2VhcmNoIFBBVEgsCisJCQkJICAgICAgICAgICAgICMgYnV0IGFzIHRoZSBkZWZhdWx0CisJCQkJICAgICAgICAgICAgICMgbG9jYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBDQyopCisgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgYUNDKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRSTSAkb3V0cHV0X29iamRpci8kc29uYW1lfiRDQyAtYiAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworICAgICAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisgICAgICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKyAgICAgICAgICAgICMKKyAgICAgICAgICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKyAgICAgICAgICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisgICAgICAgICAgICAjIGZyb20gdGhlIG91dHB1dCBzbyB0aGF0IHRoZXkgZG9uJ3QgZ2V0IGluY2x1ZGVkIGluIHRoZSBsaWJyYXJ5CisgICAgICAgICAgICAjIGRlcGVuZGVuY2llcy4KKyAgICAgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkRUdSRVAgIlwtTCJgOyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworICAgICAgICAgICAgOzsKKyAgICAgICAgICAqKQorICAgICAgICAgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJFJNICRvdXRwdXRfb2JqZGlyLyRzb25hbWV+JENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRvdXRwdXRfb2JqZGlyLyRzb25hbWUgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfnRlc3QgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSA9ICRsaWIgfHwgbXYgJG91dHB1dF9vYmpkaXIvJHNvbmFtZSAkbGliJworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKyAgICAgICAgICAgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworICAgICAgICAgICAgZmkKKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaHB1eDEwKnxocHV4MTEqKQorICAgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0rYiAke3dsfSRsaWJkaXInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKyAgICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgICAgaHBwYSo2NCp8aWE2NCopCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgICAqKQorCSAgICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisgICAgICAgICAgICAgIDs7CisgICAgICAgICAgZXNhYworICAgICAgICBmaQorICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorICAgICAgICAgIGhwcGEqNjQqfGlhNjQqKQorICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT1ubworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKyAgICAgICAgICAgIDs7CisgICAgICAgICAgKikKKyAgICAgICAgICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9eWVzCisgICAgICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdF9hYnNvbHV0ZSwgJDEpPXllcworICAgICAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9taW51c19MLCAkMSk9eWVzICMgTm90IGluIHRoZSBzZWFyY2ggUEFUSCwKKwkJCQkJICAgICAgICAgIyBidXQgYXMgdGhlIGRlZmF1bHQKKwkJCQkJICAgICAgICAgIyBsb2NhdGlvbiBvZiB0aGUgbGlicmFyeS4KKyAgICAgICAgICAgIDs7CisgICAgICAgIGVzYWMKKworICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIENDKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKyAgICAgICAgICBhQ0MqKQorCSAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgIGhwcGEqNjQqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1iICR7d2x9K2ggJHt3bH0kc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgICBpYTY0KikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgIDs7CisJICAgICAgKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYiAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStiICR7d2x9JGluc3RhbGxfbGliZGlyIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgICAgOzsKKwkgICAgZXNhYworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gKCRDQyAtYiAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSkgfCAkR1JFUCAiXC1MImA7IGxpc3Q9IiI7IGZvciB6IGluICR0ZW1wbGlzdDsgZG8gY2FzZSAkeiBpbiBjb25mdGVzdC4kb2JqZXh0KSBsaXN0PSIkbGlzdCAkeiI7OyAqLiRvYmpleHQpOzsgKikgbGlzdD0iJGxpc3QgJHoiOztlc2FjOyBkb25lOyBmdW5jX2VjaG9fYWxsICIkbGlzdCInCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICR3aXRoX2dudV9sZCA9IG5vOyB0aGVuCisJICAgICAgICBjYXNlICRob3N0X2NwdSBpbgorCSAgICAgICAgICBocHBhKjY0KikKKwkgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAtbm9zdGRsaWIgLWZQSUMgJHt3bH0raCAke3dsfSRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MnCisJICAgICAgICAgICAgOzsKKwkgICAgICAgICAgaWE2NCopCisJICAgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLW5vc3RkbGliICRwaWNfZmxhZyAke3dsfStoICR7d2x9JHNvbmFtZSAke3dsfStub2RlZmF1bHRycGF0aCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgICAqKQorCSAgICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAkcGljX2ZsYWcgJHt3bH0raCAke3dsfSRzb25hbWUgJHt3bH0rYiAke3dsfSRpbnN0YWxsX2xpYmRpciAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncycKKwkgICAgICAgICAgICA7OworCSAgICAgICAgZXNhYworCSAgICAgIGZpCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgaW50ZXJpeFtbMy05XV0qKQorCV9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KKwlfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCV9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LUUnCisJIyBIYWNrOiBPbiBJbnRlcml4IDMueCwgd2UgY2Fubm90IGNvbXBpbGUgUElDIGJlY2F1c2Ugb2YgYSBicm9rZW4gZ2NjLgorCSMgSW5zdGVhZCwgc2hhcmVkIGxpYnJhcmllcyBhcmUgbG9hZGVkIGF0IGFuIGltYWdlIGJhc2UgKDB4MTAwMDAwMDAgYnkKKwkjIGRlZmF1bHQpIGFuZCByZWxvY2F0ZWQgaWYgdGhleSBjb25mbGljdCwgd2hpY2ggaXMgYSBzbG93IHZlcnkgbWVtb3J5CisJIyBjb25zdW1pbmcgYW5kIGZyYWdtZW50aW5nIHByb2Nlc3MuICBUbyBhdm9pZCB0aGlzLCB3ZSBwaWNrIGEgcmFuZG9tLAorCSMgMjU2IEtpQi1hbGlnbmVkIGltYWdlIGJhc2UgYmV0d2VlbiAweDUwMDAwMDAwIGFuZCAweDZGRkMwMDAwIGF0IGxpbmsKKwkjIHRpbWUuICBNb3ZpbmcgdXAgZnJvbSAweDEwMDAwMDAwIGFsc28gYWxsb3dzIG1vcmUgc2JyaygyKSBzcGFjZS4KKwlfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdzZWQgInMsXixfLCIgJGV4cG9ydF9zeW1ib2xzID4kb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bX4kQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LWgsJHNvbmFtZSAke3dsfS0tcmV0YWluLXN5bWJvbHMtZmlsZSwkb3V0cHV0X29iamRpci8kc29uYW1lLmV4cHN5bSAke3dsfS0taW1hZ2UtYmFzZSxgZXhwciAke1JBTkRPTS0kJH0gJSA0MDk2IC8gMiBcKiAyNjIxNDQgKyAxMzQyMTc3MjgwYCAtbyAkbGliJworCTs7CisgICAgICBpcml4NSogfCBpcml4NiopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFNHSSBDKysKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgLWFsbCAtbXVsdGlnb3QgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1zb25hbWUgJHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiLXNldF92ZXJzaW9uICR2ZXJzdHJpbmciYCAtdXBkYXRlX3JlZ2lzdHJ5ICR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1hciIsIHdoZXJlICJDQyIgaXMgdGhlIElSSVggQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAjIG5lY2Vzc2FyeSB0byBtYWtlIHN1cmUgaW5zdGFudGlhdGVkIHRlbXBsYXRlcyBhcmUgaW5jbHVkZWQKKwkgICAgIyBpbiB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtYXIgLVdSLC11IC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgIDs7CisgICAgICAgICAgKikKKwkgICAgaWYgdGVzdCAiJEdYWCIgPSB5ZXM7IHRoZW4KKwkgICAgICBpZiB0ZXN0ICIkd2l0aF9nbnVfbGQiID0gbm87IHRoZW4KKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAtbm9zdGRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmIGZ1bmNfZWNob19hbGwgIiR7d2x9LXNldF92ZXJzaW9uICR7d2x9JHZlcnN0cmluZyJgICR7d2x9LXVwZGF0ZV9yZWdpc3RyeSAke3dsfSR7b3V0cHV0X29iamRpcn0vc29fbG9jYXRpb25zIC1vICRsaWInCisJICAgICAgZWxzZQorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgLW8gJGxpYicKKwkgICAgICBmaQorCSAgICBmaQorCSAgICBfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworICAgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisgICAgICAgIF9MVF9UQUdWQVIoaW5oZXJpdF9ycGF0aCwgJDEpPXllcworICAgICAgICA7OworCisgICAgICBsaW51eCogfCBrKmJzZCotZ251IHwga29wZW5zb2xhcmlzKi1nbnUpCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgS0NDKikKKwkgICAgIyBLdWNrIGFuZCBBc3NvY2lhdGVzLCBJbmMuIChLQUkpIEMrKyBDb21waWxlcgorCisJICAgICMgS0NDIHdpbGwgb25seSBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeSBpZiB0aGUgb3V0cHV0IGZpbGUKKwkgICAgIyBlbmRzIHdpdGggIi5zbyIgKG9yICIuc2wiIGZvciBIUC1VWCksIHNvIHJlbmFtZSB0aGUgbGlicmFyeQorCSAgICAjIHRvIGl0cyBwcm9wZXIgbmFtZSAod2l0aCB2ZXJzaW9uKSBhZnRlciBsaW5raW5nLgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYjsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSd0ZW1wZXh0PWBlY2hvICRzaGFyZWRfZXh0IHwgJFNFRCAtZSAnXCcncy9cKFtbXigpMC05QS1aYS16e31dXVwpL1xcXFxcMS9nJ1wnJ2A7IHRlbXBsaWI9YGVjaG8gJGxpYiB8ICRTRUQgLWUgInMvXCR7dGVtcGV4dH1cLi4qLy5zby8iYDsgJENDICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtLXNvbmFtZSAkc29uYW1lIC1vIFwkdGVtcGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9sczsgbXYgXCR0ZW1wbGliICRsaWInCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IC1vIGxpYmNvbmZ0ZXN0JHNoYXJlZF9leHQgMj4mMSB8ICRHUkVQICJsZCJgOyBybSAtZiBsaWJjb25mdGVzdCRzaGFyZWRfZXh0OyBsaXN0PSIiOyBmb3IgeiBpbiAkdGVtcGxpc3Q7IGRvIGNhc2UgJHogaW4gY29uZnRlc3QuJG9iamV4dCkgbGlzdD0iJGxpc3QgJHoiOzsgKi4kb2JqZXh0KTs7ICopIGxpc3Q9IiRsaXN0ICR6Ijs7ZXNhYzsgZG9uZTsgZnVuY19lY2hvX2FsbCAiJGxpc3QiJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgIkNDIC1Cc3RhdGljIiwgd2hlcmUgIkNDIiBpcyB0aGUgS0FJIEMrKyBjb21waWxlci4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworCSAgaWNwYyogfCBlY3BjKiApCisJICAgICMgSW50ZWwgQysrCisJICAgIHdpdGhfZ251X2xkPXllcworCSAgICAjIHZlcnNpb24gOC4wIGFuZCBhYm92ZSBvZiBpY3BjIGNob2tlIG9uIG11bHRpcGx5IGRlZmluZWQgc3ltYm9scworCSAgICAjIGlmIHdlIGFkZCAkcHJlZGVwX29iamVjdHMgYW5kICRwb3N0ZGVwX29iamVjdHMsIGhvd2V2ZXIgNy4xIGFuZAorCSAgICAjIGVhcmxpZXIgZG8gbm90IGFkZCB0aGUgb2JqZWN0cyB0aGVtc2VsdmVzLgorCSAgICBjYXNlIGAkQ0MgLVYgMj4mMWAgaW4KKwkgICAgICAqIlZlcnNpb24gNy4iKikKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCQlfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkd2wkc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHdsJGV4cG9ydF9zeW1ib2xzIC1vICRsaWInCisJCTs7CisJICAgICAgKikgICMgVmVyc2lvbiA4LjAgb3IgbmV3ZXIKKwkgICAgICAgIHRtcF9pZHluPQorCSAgICAgICAgY2FzZSAkaG9zdF9jcHUgaW4KKwkJICBpYTY0KikgdG1wX2lkeW49JyAtaV9keW5hbWljJzs7CisJCWVzYWMKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkJX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJyIkdG1wX2lkeW4iJyAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAkd2wkZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkJOzsKKwkgICAgZXNhYworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoLCRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoZXhwb3J0X2R5bmFtaWNfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS1leHBvcnQtZHluYW1pYycKKwkgICAgX0xUX1RBR1ZBUih3aG9sZV9hcmNoaXZlX2ZsYWdfc3BlYywgJDEpPScke3dsfS0td2hvbGUtYXJjaGl2ZSRjb252ZW5pZW5jZSAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgOzsKKyAgICAgICAgICBwZ0NDKiB8IHBnY3BwKikKKyAgICAgICAgICAgICMgUG9ydGxhbmQgR3JvdXAgQysrIGNvbXBpbGVyCisJICAgIGNhc2UgYCRDQyAtVmAgaW4KKwkgICAgKnBnQ0NcIFtbMS01XV0uKiB8ICpwZ2NwcFwgW1sxLTVdXS4qKQorCSAgICAgIF9MVF9UQUdWQVIocHJlbGlua19jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvYmpzICRsaWJvYmpzICRjb21waWxlX2RlcGxpYnN+CisJCWNvbXBpbGVfY29tbWFuZD0iJGNvbXBpbGVfY29tbWFuZCBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCInCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRvbGRvYmpzJG9sZF9kZXBsaWJzfgorCQkkQVIgJEFSX0ZMQUdTICRvbGRsaWIkb2xkb2JqcyRvbGRfZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYH4KKwkJJFJBTkxJQiAkb2xkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIC1vICRsaWInCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J3RwbGRpcj1UZW1wbGF0ZS5kaXJ+CisJCXJtIC1yZiAkdHBsZGlyfgorCQkkQ0MgLS1wcmVsaW5rX29iamVjdHMgLS1pbnN0YW50aWF0aW9uX2RpciAkdHBsZGlyICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkY29udmVuaWVuY2UgJHBvc3RkZXBfb2JqZWN0c34KKwkJJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyBgZmluZCAkdHBsZGlyIC1uYW1lIFwqLm8gfCBzb3J0IHwgJE5MMlNQYCAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lICR7d2x9LXJldGFpbi1zeW1ib2xzLWZpbGUgJHt3bH0kZXhwb3J0X3N5bWJvbHMgLW8gJGxpYicKKwkgICAgICA7OworCSAgICAqKSAjIFZlcnNpb24gNiBhbmQgYWJvdmUgdXNlIHdlYWsgc3ltYm9scworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwaWNfZmxhZyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSAtbyAkbGliJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAke3dsfSRzb25hbWUgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICAgIDs7CisJICAgIGVzYWMKKworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0nJHt3bH0tLWV4cG9ydC1keW5hbWljJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LS13aG9sZS1hcmNoaXZlYGZvciBjb252IGluICRjb252ZW5pZW5jZVwiXCI7IGRvIHRlc3QgIC1uIFwiJGNvbnZcIiAmJiBuZXdfY29udmVuaWVuY2U9XCIkbmV3X2NvbnZlbmllbmNlLCRjb252XCI7IGRvbmU7IGZ1bmNfZWNob19hbGwgXCIkbmV3X2NvbnZlbmllbmNlXCJgICR7d2x9LS1uby13aG9sZS1hcmNoaXZlJworICAgICAgICAgICAgOzsKKwkgIGN4eCopCisJICAgICMgQ29tcGFxIEMrKworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAgLW8gJGxpYiAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlICR3bCRleHBvcnRfc3ltYm9scycKKworCSAgICBydW5wYXRoX3Zhcj1MRF9SVU5fUEFUSAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLXJwYXRoICRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX3NlcGFyYXRvciwgJDEpPToKKworCSAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgIworCSAgICAjIFRoZXJlIGRvZXNuJ3QgYXBwZWFyIHRvIGJlIGEgd2F5IHRvIHByZXZlbnQgdGhpcyBjb21waWxlciBmcm9tCisJICAgICMgZXhwbGljaXRseSBsaW5raW5nIHN5c3RlbSBvYmplY3QgZmlsZXMgc28gd2UgbmVlZCB0byBzdHJpcCB0aGVtCisJICAgICMgZnJvbSB0aGUgb3V0cHV0IHNvIHRoYXQgdGhleSBkb24ndCBnZXQgaW5jbHVkZWQgaW4gdGhlIGxpYnJhcnkKKwkgICAgIyBkZXBlbmRlbmNpZXMuCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSd0ZW1wbGlzdD1gJENDIC1zaGFyZWQgJENGTEFHUyAtdiBjb25mdGVzdC4kb2JqZXh0IDI+JjEgfCAkR1JFUCAibGQiYDsgdGVtcGxpc3Q9YGZ1bmNfZWNob19hbGwgIiR0ZW1wbGlzdCIgfCAkU0VEICJzL1woXi4qbGQuKlwpXCggLipsZCAuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIlgkbGlzdCIgfCAkWHNlZCcKKwkgICAgOzsKKwkgIHhsKiB8IG1waXhsKiB8IGJneGwqKQorCSAgICAjIElCTSBYTCA4LjAgb24gUFBDLCB3aXRoIEdOVSBsZAorCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGggJHt3bH0kbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS0tZXhwb3J0LWR5bmFtaWMnCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAtbyAkbGliJworCSAgICBpZiB0ZXN0ICJ4JHN1cHBvcnRzX2Fub25fdmVyc2lvbmluZyIgPSB4eWVzOyB0aGVuCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9J2VjaG8gInsgZ2xvYmFsOiIgPiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCWNhdCAkZXhwb3J0X3N5bWJvbHMgfCBzZWQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlcn4KKwkJZWNobyAibG9jYWw6ICo7IH07IiA+PiAkb3V0cHV0X29iamRpci8kbGlibmFtZS52ZXJ+CisJCSRDQyAtcW1rc2hyb2JqICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncyAke3dsfS1zb25hbWUgJHdsJHNvbmFtZSAke3dsfS12ZXJzaW9uLXNjcmlwdCAke3dsfSRvdXRwdXRfb2JqZGlyLyRsaWJuYW1lLnZlciAtbyAkbGliJworCSAgICBmaQorCSAgICA7OworCSAgKikKKwkgICAgY2FzZSBgJENDIC1WIDI+JjEgfCBzZWQgNXFgIGluCisJICAgICpTdW5cIEMqKQorCSAgICAgICMgU3VuIEMrKyA1LjkKKwkgICAgICBfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyAtemRlZnMnCisJICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HJHthbGxvd191bmRlZmluZWRfZmxhZ30gLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tcmV0YWluLXN5bWJvbHMtZmlsZSAke3dsfSRleHBvcnRfc3ltYm9scycKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgICAgIF9MVF9UQUdWQVIod2hvbGVfYXJjaGl2ZV9mbGFnX3NwZWMsICQxKT0nJHt3bH0tLXdob2xlLWFyY2hpdmVgbmV3X2NvbnZlbmllbmNlPTsgZm9yIGNvbnYgaW4gJGNvbnZlbmllbmNlXCJcIjsgZG8gdGVzdCAteiBcIiRjb252XCIgfHwgbmV3X2NvbnZlbmllbmNlPVwiJG5ld19jb252ZW5pZW5jZSwkY29udlwiOyBkb25lOyBmdW5jX2VjaG9fYWxsIFwiJG5ld19jb252ZW5pZW5jZVwiYCAke3dsfS0tbm8td2hvbGUtYXJjaGl2ZScKKwkgICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX25lZWRzX29iamVjdCwgJDEpPXllcworCisJICAgICAgIyBOb3Qgc3VyZSB3aGV0aGVyIHNvbWV0aGluZyBiYXNlZCBvbgorCSAgICAgICMgJENDICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAtbyBsaWJjb25mdGVzdCRzaGFyZWRfZXh0IDI+JjEKKwkgICAgICAjIHdvdWxkIGJlIGJldHRlci4KKwkgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nZnVuY19lY2hvX2FsbCcKKworCSAgICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAgICMgIkNDIC14YXIiLCB3aGVyZSAiQ0MiIGlzIHRoZSBTdW4gQysrIGNvbXBpbGVyLiAgVGhpcyBpcworCSAgICAgICMgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VyZSBpbnN0YW50aWF0ZWQgdGVtcGxhdGVzIGFyZSBpbmNsdWRlZAorCSAgICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAteGFyIC1vICRvbGRsaWIgJG9sZG9ianMnCisJICAgICAgOzsKKwkgICAgZXNhYworCSAgICA7OworCWVzYWMKKwk7OworCisgICAgICBseW54b3MqKQorICAgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwlfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbTg4ayopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJOzsKKworICAgICAgbXZzKikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBjeHgqKQorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworCSAgKikKKwkgICAgIyBGSVhNRTogaW5zZXJ0IHByb3BlciBDKysgbGlicmFyeSBzdXBwb3J0CisJICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwkgICAgOzsKKwllc2FjCisJOzsKKworICAgICAgbmV0YnNkKikKKyAgICAgICAgaWYgZWNobyBfX0VMRl9fIHwgJENDIC1FIC0gfCAkR1JFUCBfX0VMRl9fID4vZGV2L251bGw7IHRoZW4KKwkgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRMRCAtQnNoYXJlYWJsZSAgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkbGlua2VyX2ZsYWdzJworCSAgd2xhcmM9CisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nLVIkbGliZGlyJworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9kaXJlY3QsICQxKT15ZXMKKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJZmkKKwkjIFdvcmthcm91bmQgc29tZSBicm9rZW4gcHJlLTEuNSB0b29sY2hhaW5zCisJb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgY29uZnRlc3QuJG9iamV4dCB8ICRTRUQgLWUgInM6LWxnY2MgLWxjIC1sZ2NjOjoiJworCTs7CisKKyAgICAgICpudG8qIHwgKnFueCopCisgICAgICAgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9eWVzCisJOzsKKworICAgICAgb3BlbmJzZDIqKQorICAgICAgICAjIEMrKyBzaGFyZWQgbGlicmFyaWVzIGFyZSBmYWlybHkgYnJva2VuCisJX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCTs7CisKKyAgICAgIG9wZW5ic2QqKQorCWlmIHRlc3QgLWYgL3Vzci9saWJleGVjL2xkLnNvOyB0aGVuCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2RpcmVjdCwgJDEpPXllcworCSAgX0xUX1RBR1ZBUihoYXJkY29kZV9zaGxpYnBhdGhfdmFyLCAkMSk9bm8KKwkgIF9MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9eWVzCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzIC1vICRsaWInCisJICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tcnBhdGgsJGxpYmRpcicKKwkgIGlmIHRlc3QgLXogImBlY2hvIF9fRUxGX18gfCAkQ0MgLUUgLSB8IGdyZXAgX19FTEZfX2AiIHx8IHRlc3QgIiRob3N0X29zLSRob3N0X2NwdSIgPSAib3BlbmJzZDIuOC1wb3dlcnBjIjsgdGhlbgorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1yZXRhaW4tc3ltYm9scy1maWxlLCRleHBvcnRfc3ltYm9scyAtbyAkbGliJworCSAgICBfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1FJworCSAgICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9IiR3bGFyYyInLS13aG9sZS1hcmNoaXZlJGNvbnZlbmllbmNlICciJHdsYXJjIictLW5vLXdob2xlLWFyY2hpdmUnCisJICBmaQorCSAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9ZnVuY19lY2hvX2FsbAorCWVsc2UKKwkgIF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSk9bm8KKwlmaQorCTs7CisKKyAgICAgIG9zZjMqIHwgb3NmNCogfCBvc2Y1KikKKyAgICAgICAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgICAgICAgICBLQ0MqKQorCSAgICAjIEt1Y2sgYW5kIEFzc29jaWF0ZXMsIEluYy4gKEtBSSkgQysrIENvbXBpbGVyCisKKwkgICAgIyBLQ0Mgd2lsbCBvbmx5IGNyZWF0ZSBhIHNoYXJlZCBsaWJyYXJ5IGlmIHRoZSBvdXRwdXQgZmlsZQorCSAgICAjIGVuZHMgd2l0aCAiLnNvIiAob3IgIi5zbCIgZm9yIEhQLVVYKSwgc28gcmVuYW1lIHRoZSBsaWJyYXJ5CisJICAgICMgdG8gaXRzIHByb3BlciBuYW1lICh3aXRoIHZlcnNpb24pIGFmdGVyIGxpbmtpbmcuCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9J3RlbXBleHQ9YGVjaG8gJHNoYXJlZF9leHQgfCAkU0VEIC1lICdcJydzL1woW1teKCkwLTlBLVphLXp7fV1dXCkvXFxcXFwxL2cnXCcnYDsgdGVtcGxpYj1gZWNobyAiJGxpYiIgfCAkU0VEIC1lICJzL1wke3RlbXBleHR9XC4uKi8uc28vImA7ICRDQyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLS1zb25hbWUgJHNvbmFtZSAtbyBcJHRlbXBsaWI7IG12IFwkdGVtcGxpYiAkbGliJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPScke3dsfS1ycGF0aCwkbGliZGlyJworCSAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgIyBBcmNoaXZlcyBjb250YWluaW5nIEMrKyBvYmplY3QgZmlsZXMgbXVzdCBiZSBjcmVhdGVkIHVzaW5nCisJICAgICMgdGhlIEtBSSBDKysgY29tcGlsZXIuCisJICAgIGNhc2UgJGhvc3QgaW4KKwkgICAgICBvc2YzKikgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtQnN0YXRpYyAtbyAkb2xkbGliICRvbGRvYmpzJyA7OworCSAgICAgICopIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLW8gJG9sZGxpYiAkb2xkb2JqcycgOzsKKwkgICAgZXNhYworCSAgICA7OworICAgICAgICAgIFJDQyopCisJICAgICMgUmF0aW9uYWwgQysrIDIuNC4xCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgY3h4KikKKwkgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgIG9zZjMqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgJHt3bH0tZXhwZWN0X3VucmVzb2x2ZWQgJHt3bH1cKicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkJHthbGxvd191bmRlZmluZWRfZmxhZ30gJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzICR7d2x9LXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAkdmVyc3RyaW5nImAgLXVwZGF0ZV9yZWdpc3RyeSAke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkJOzsKKwkgICAgICAqKQorCSAgICAgICAgX0xUX1RBR1ZBUihhbGxvd191bmRlZmluZWRfZmxhZywgJDEpPScgLWV4cGVjdF91bnJlc29sdmVkIFwqJworCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgLW1zeW0gLXNvbmFtZSAkc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdmb3IgaSBpbiBgY2F0ICRleHBvcnRfc3ltYm9sc2A7IGRvIHByaW50ZiAiJXMgJXNcXG4iIC1leHBvcnRlZF9zeW1ib2wgIlwkaSIgPj4gJGxpYi5leHA7IGRvbmV+CisJICAgICAgICAgIGVjaG8gIi1oaWRkZW4iPj4gJGxpYi5leHB+CisJICAgICAgICAgICRDQyAtc2hhcmVkJGFsbG93X3VuZGVmaW5lZF9mbGFnICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAtbXN5bSAtc29uYW1lICRzb25hbWUgJHt3bH0taW5wdXQgJHt3bH0kbGliLmV4cCAgYHRlc3QgLW4gIiR2ZXJzdHJpbmciICYmICRFQ0hPICItc2V0X3ZlcnNpb24gJHZlcnN0cmluZyJgIC11cGRhdGVfcmVnaXN0cnkgJHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYn4KKwkgICAgICAgICAgJFJNICRsaWIuZXhwJworCSAgICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9Jy1ycGF0aCAkbGliZGlyJworCQk7OworCSAgICBlc2FjCisKKwkgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfc2VwYXJhdG9yLCAkMSk9OgorCisJICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICMgbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorCSAgICAjCisJICAgICMgVGhlcmUgZG9lc24ndCBhcHBlYXIgdG8gYmUgYSB3YXkgdG8gcHJldmVudCB0aGlzIGNvbXBpbGVyIGZyb20KKwkgICAgIyBleHBsaWNpdGx5IGxpbmtpbmcgc3lzdGVtIG9iamVjdCBmaWxlcyBzbyB3ZSBuZWVkIHRvIHN0cmlwIHRoZW0KKwkgICAgIyBmcm9tIHRoZSBvdXRwdXQgc28gdGhhdCB0aGV5IGRvbid0IGdldCBpbmNsdWRlZCBpbiB0aGUgbGlicmFyeQorCSAgICAjIGRlcGVuZGVuY2llcy4KKwkgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9J3RlbXBsaXN0PWAkQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQICJsZCIgfCAkR1JFUCAtdiAibGQ6ImA7IHRlbXBsaXN0PWBmdW5jX2VjaG9fYWxsICIkdGVtcGxpc3QiIHwgJFNFRCAicy9cKF4uKmxkLipcKVwoIC4qbGQuKiRcKS9cMS8iYDsgbGlzdD0iIjsgZm9yIHogaW4gJHRlbXBsaXN0OyBkbyBjYXNlICR6IGluIGNvbmZ0ZXN0LiRvYmpleHQpIGxpc3Q9IiRsaXN0ICR6Ijs7ICouJG9iamV4dCk7OyAqKSBsaXN0PSIkbGlzdCAkeiI7O2VzYWM7IGRvbmU7IGZ1bmNfZWNob19hbGwgIiRsaXN0IicKKwkgICAgOzsKKwkgICopCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LWV4cGVjdF91bnJlc29sdmVkICR7d2x9XConCisJICAgICAgY2FzZSAkaG9zdCBpbgorCSAgICAgICAgb3NmMyopCisJICAgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tc29uYW1lICR7d2x9JHNvbmFtZSBgdGVzdCAtbiAiJHZlcnN0cmluZyIgJiYgZnVuY19lY2hvX2FsbCAiJHt3bH0tc2V0X3ZlcnNpb24gJHt3bH0kdmVyc3RyaW5nImAgJHt3bH0tdXBkYXRlX3JlZ2lzdHJ5ICR7d2x9JHtvdXRwdXRfb2JqZGlyfS9zb19sb2NhdGlvbnMgLW8gJGxpYicKKwkJICA7OworCSAgICAgICAgKikKKwkgICAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0tbXN5bSAke3dsfS1zb25hbWUgJHt3bH0kc29uYW1lIGB0ZXN0IC1uICIkdmVyc3RyaW5nIiAmJiBmdW5jX2VjaG9fYWxsICIke3dsfS1zZXRfdmVyc2lvbiAke3dsfSR2ZXJzdHJpbmciYCAke3dsfS11cGRhdGVfcmVnaXN0cnkgJHt3bH0ke291dHB1dF9vYmpkaXJ9L3NvX2xvY2F0aW9ucyAtbyAkbGliJworCQkgIDs7CisJICAgICAgZXNhYworCisJICAgICAgX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXJwYXRoICR7d2x9JGxpYmRpcicKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT06CisKKwkgICAgICAjIENvbW1hbmRzIHRvIG1ha2UgY29tcGlsZXIgcHJvZHVjZSB2ZXJib3NlIG91dHB1dCB0aGF0IGxpc3RzCisJICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQ9JyRDQyAtc2hhcmVkICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCisJICAgIGVsc2UKKwkgICAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIGZpCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgcHNvcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgIHN1bm9zNCopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICAjIFN1biBDKysgNC54CisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgICAgbGNjKikKKwkgICAgIyBMdWNpZAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgc29sYXJpcyopCisgICAgICAgIGNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqIHwgc3VuQ0MqKQorCSAgICAjIFN1biBDKysgNC4yLCA1LnggYW5kIENlbnRlcmxpbmUgQysrCisgICAgICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCQxKT15ZXMKKwkgICAgX0xUX1RBR1ZBUihub191bmRlZmluZWRfZmxhZywgJDEpPScgLXpkZWZzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcke2FsbG93X3VuZGVmaW5lZF9mbGFnfSAgLWgkc29uYW1lIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCSAgICAgICRDQyAtRyR7YWxsb3dfdW5kZWZpbmVkX2ZsYWd9ICR7d2x9LU0gJHt3bH0kbGliLmV4cCAtaCRzb25hbWUgLW8gJGxpYiAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3N+JFJNICRsaWIuZXhwJworCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPSctUiRsaWJkaXInCisJICAgIF9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkgICAgICBzb2xhcmlzMi5bWzAtNV1dIHwgc29sYXJpczIuW1swLTVdXS4qKSA7OworCSAgICAgICopCisJCSMgVGhlIGNvbXBpbGVyIGRyaXZlciB3aWxsIGNvbWJpbmUgYW5kIHJlb3JkZXIgbGlua2VyIG9wdGlvbnMsCisJCSMgYnV0IHVuZGVyc3RhbmRzIGAteiBsaW5rZXJfZmxhZycuCisJICAgICAgICAjIFN1cHBvcnRlZCBzaW5jZSBTb2xhcmlzIDIuNiAobWF5YmUgMi41LjE/KQorCQlfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9Jy16IGFsbGV4dHJhY3QkY29udmVuaWVuY2UgLXogZGVmYXVsdGV4dHJhY3QnCisJICAgICAgICA7OworCSAgICBlc2FjCisJICAgIF9MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXllcworCisJICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSdmdW5jX2VjaG9fYWxsJworCisJICAgICMgQXJjaGl2ZXMgY29udGFpbmluZyBDKysgb2JqZWN0IGZpbGVzIG11c3QgYmUgY3JlYXRlZCB1c2luZworCSAgICAjICJDQyAteGFyIiwgd2hlcmUgIkNDIiBpcyB0aGUgU3VuIEMrKyBjb21waWxlci4gIFRoaXMgaXMKKwkgICAgIyBuZWNlc3NhcnkgdG8gbWFrZSBzdXJlIGluc3RhbnRpYXRlZCB0ZW1wbGF0ZXMgYXJlIGluY2x1ZGVkCisJICAgICMgaW4gdGhlIGFyY2hpdmUuCisJICAgIF9MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSckQ0MgLXhhciAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgIGdjeCopCisJICAgICMgR3JlZW4gSGlsbHMgQysrIENvbXBpbGVyCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKworCSAgICAjIFRoZSBDKysgY29tcGlsZXIgbXVzdCBiZSB1c2VkIHRvIGNyZWF0ZSB0aGUgYXJjaGl2ZS4KKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAkTERGTEFHUyAtYXJjaGl2ZSAtbyAkb2xkbGliICRvbGRvYmpzJworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgR05VIEMrKyBjb21waWxlciB3aXRoIFNvbGFyaXMgbGlua2VyCisJICAgIGlmIHRlc3QgIiRHWFgiID0geWVzICYmIHRlc3QgIiR3aXRoX2dudV9sZCIgPSBubzsgdGhlbgorCSAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nICR7d2x9LXogJHt3bH1kZWZzJworCSAgICAgIGlmICRDQyAtLXZlcnNpb24gfCAkR1JFUCAtdiAnXjJcLjcnID4gL2Rldi9udWxsOyB0aGVuCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAkcGljX2ZsYWcgLW5vc3RkbGliICRMREZMQUdTICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFncyAke3dsfS1oICR3bCRzb25hbWUgLW8gJGxpYicKKwkgICAgICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPSdlY2hvICJ7IGdsb2JhbDoiID4gJGxpYi5leHB+Y2F0ICRleHBvcnRfc3ltYm9scyB8ICRTRUQgLWUgInMvXCguKlwpL1wxOy8iID4+ICRsaWIuZXhwfmVjaG8gImxvY2FsOiAqOyB9OyIgPj4gJGxpYi5leHB+CisJCSAgJENDIC1zaGFyZWQgJHBpY19mbGFnIC1ub3N0ZGxpYiAke3dsfS1NICR3bCRsaWIuZXhwIC1vICRsaWIgJHByZWRlcF9vYmplY3RzICRsaWJvYmpzICRkZXBsaWJzICRwb3N0ZGVwX29iamVjdHMgJGNvbXBpbGVyX2ZsYWdzfiRSTSAkbGliLmV4cCcKKworCSAgICAgICAgIyBDb21tYW5kcyB0byBtYWtlIGNvbXBpbGVyIHByb2R1Y2UgdmVyYm9zZSBvdXRwdXQgdGhhdCBsaXN0cworCSAgICAgICAgIyB3aGF0ICJoaWRkZW4iIGxpYnJhcmllcywgb2JqZWN0IGZpbGVzIGFuZCBmbGFncyBhcmUgdXNlZCB3aGVuCisJICAgICAgICAjIGxpbmtpbmcgYSBzaGFyZWQgbGlicmFyeS4KKwkgICAgICAgIG91dHB1dF92ZXJib3NlX2xpbmtfY21kPSckQ0MgLXNoYXJlZCAkQ0ZMQUdTIC12IGNvbmZ0ZXN0LiRvYmpleHQgMj4mMSB8ICRHUkVQIC12ICJeQ29uZmlndXJlZCB3aXRoOiIgfCAkR1JFUCAiXC1MIicKKwkgICAgICBlbHNlCisJICAgICAgICAjIGcrKyAyLjcgYXBwZWFycyB0byByZXF1aXJlIGAtRycgTk9UIGAtc2hhcmVkJyBvbiB0aGlzCisJICAgICAgICAjIHBsYXRmb3JtLgorCSAgICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHMsICQxKT0nJENDIC1HIC1ub3N0ZGxpYiAkTERGTEFHUyAkcHJlZGVwX29iamVjdHMgJGxpYm9ianMgJGRlcGxpYnMgJHBvc3RkZXBfb2JqZWN0cyAkY29tcGlsZXJfZmxhZ3MgJHt3bH0taCAkd2wkc29uYW1lIC1vICRsaWInCisJICAgICAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nZWNobyAieyBnbG9iYWw6IiA+ICRsaWIuZXhwfmNhdCAkZXhwb3J0X3N5bWJvbHMgfCAkU0VEIC1lICJzL1woLipcKS9cMTsvIiA+PiAkbGliLmV4cH5lY2hvICJsb2NhbDogKjsgfTsiID4+ICRsaWIuZXhwfgorCQkgICRDQyAtRyAtbm9zdGRsaWIgJHt3bH0tTSAkd2wkbGliLmV4cCAtbyAkbGliICRwcmVkZXBfb2JqZWN0cyAkbGlib2JqcyAkZGVwbGlicyAkcG9zdGRlcF9vYmplY3RzICRjb21waWxlcl9mbGFnc34kUk0gJGxpYi5leHAnCisKKwkgICAgICAgICMgQ29tbWFuZHMgdG8gbWFrZSBjb21waWxlciBwcm9kdWNlIHZlcmJvc2Ugb3V0cHV0IHRoYXQgbGlzdHMKKwkgICAgICAgICMgd2hhdCAiaGlkZGVuIiBsaWJyYXJpZXMsIG9iamVjdCBmaWxlcyBhbmQgZmxhZ3MgYXJlIHVzZWQgd2hlbgorCSAgICAgICAgIyBsaW5raW5nIGEgc2hhcmVkIGxpYnJhcnkuCisJICAgICAgICBvdXRwdXRfdmVyYm9zZV9saW5rX2NtZD0nJENDIC1HICRDRkxBR1MgLXYgY29uZnRlc3QuJG9iamV4dCAyPiYxIHwgJEdSRVAgLXYgIl5Db25maWd1cmVkIHdpdGg6IiB8ICRHUkVQICJcLUwiJworCSAgICAgIGZpCisKKwkgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9mbGFnX3NwZWMsICQxKT0nJHt3bH0tUiAkd2wkbGliZGlyJworCSAgICAgIGNhc2UgJGhvc3Rfb3MgaW4KKwkJc29sYXJpczIuW1swLTVdXSB8IHNvbGFyaXMyLltbMC01XV0uKikgOzsKKwkJKikKKwkJICBfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LXogJHt3bH1hbGxleHRyYWN0JGNvbnZlbmllbmNlICR7d2x9LXogJHt3bH1kZWZhdWx0ZXh0cmFjdCcKKwkJICA7OworCSAgICAgIGVzYWMKKwkgICAgZmkKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworCisgICAgc3lzdjQqdXcyKiB8IHN5c3Y1T3BlblVOSVgqIHwgc3lzdjVVbml4V2FyZTcuW1swMV1dLltbMTBdXSogfCB1bml4d2FyZTcqIHwgc2NvMy4ydjUuMC5bWzAyNF1dKikKKyAgICAgIF9MVF9UQUdWQVIobm9fdW5kZWZpbmVkX2ZsYWcsICQxKT0nJHt3bH0teix0ZXh0JworICAgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2NtZHNfbmVlZF9sYywgJDEpPW5vCisgICAgICBfTFRfVEFHVkFSKGhhcmRjb2RlX3NobGlicGF0aF92YXIsICQxKT1ubworICAgICAgcnVucGF0aF92YXI9J0xEX1JVTl9QQVRIJworCisgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICBDQyopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtRyAke3dsfS1CZXhwb3J0OiRleHBvcnRfc3ltYm9scyAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICA7OworCSopCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLXNoYXJlZCAke3dsfS1oLCRzb25hbWUgLW8gJGxpYiAkbGlib2JqcyAkZGVwbGlicyAkY29tcGlsZXJfZmxhZ3MnCisJICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1zaGFyZWQgJHt3bH0tQmV4cG9ydDokZXhwb3J0X3N5bWJvbHMgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgOzsKKyAgICAgIGVzYWMKKyAgICAgIDs7CisKKyAgICAgIHN5c3Y1KiB8IHNjbzMuMnY1KiB8IHNjbzV2NiopCisJIyBOb3RlOiBXZSBjYW4gTk9UIHVzZSAteiBkZWZzIGFzIHdlIG1pZ2h0IGRlc2lyZSwgYmVjYXVzZSB3ZSBkbyBub3QKKwkjIGxpbmsgd2l0aCAtbGMsIGFuZCB0aGF0IHdvdWxkIGNhdXNlIGFueSBzeW1ib2xzIHVzZWQgZnJvbSBsaWJjIHRvCisJIyBhbHdheXMgYmUgdW5yZXNvbHZlZCwgd2hpY2ggbWVhbnMganVzdCBhYm91dCBubyBsaWJyYXJ5IHdvdWxkCisJIyBldmVyIGxpbmsgY29ycmVjdGx5LiAgSWYgd2UncmUgbm90IHVzaW5nIEdOVSBsZCB3ZSB1c2UgLXogdGV4dAorCSMgdGhvdWdoLCB3aGljaCBkb2VzIGNhdGNoIHNvbWUgYmFkIHN5bWJvbHMgYnV0IGlzbid0IGFzIGhlYXZ5LWhhbmRlZAorCSMgYXMgLXogZGVmcy4KKwlfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosdGV4dCcKKwlfTFRfVEFHVkFSKGFsbG93X3VuZGVmaW5lZF9mbGFnLCAkMSk9JyR7d2x9LXosbm9kZWZzJworCV9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzX25lZWRfbGMsICQxKT1ubworCV9MVF9UQUdWQVIoaGFyZGNvZGVfc2hsaWJwYXRoX3ZhciwgJDEpPW5vCisJX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjLCAkMSk9JyR7d2x9LVIsJGxpYmRpcicKKwlfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0nOicKKwlfTFRfVEFHVkFSKGxpbmtfYWxsX2RlcGxpYnMsICQxKT15ZXMKKwlfTFRfVEFHVkFSKGV4cG9ydF9keW5hbWljX2ZsYWdfc3BlYywgJDEpPScke3dsfS1CZXhwb3J0JworCXJ1bnBhdGhfdmFyPSdMRF9SVU5fUEFUSCcKKworCWNhc2UgJGNjX2Jhc2VuYW1lIGluCisgICAgICAgICAgQ0MqKQorCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfY21kcywgJDEpPSckQ0MgLUcgJHt3bH0taCwkc29uYW1lIC1vICRsaWIgJGxpYm9ianMgJGRlcGxpYnMgJGNvbXBpbGVyX2ZsYWdzJworCSAgICBfTFRfVEFHVkFSKGFyY2hpdmVfZXhwc3ltX2NtZHMsICQxKT0nJENDIC1HICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtVHByZWxpbmtfb2JqZWN0cyAkb2xkb2Jqc34KKwkgICAgICAnIiRfTFRfVEFHVkFSKG9sZF9hcmNoaXZlX2NtZHMsICQxKSIKKwkgICAgX0xUX1RBR1ZBUihyZWxvYWRfY21kcywgJDEpPSckQ0MgLVRwcmVsaW5rX29iamVjdHMgJHJlbG9hZF9vYmpzfgorCSAgICAgICciJF9MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKSIKKwkgICAgOzsKKwkgICopCisJICAgIF9MVF9UQUdWQVIoYXJjaGl2ZV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgX0xUX1RBR1ZBUihhcmNoaXZlX2V4cHN5bV9jbWRzLCAkMSk9JyRDQyAtc2hhcmVkICR7d2x9LUJleHBvcnQ6JGV4cG9ydF9zeW1ib2xzICR7d2x9LWgsJHNvbmFtZSAtbyAkbGliICRsaWJvYmpzICRkZXBsaWJzICRjb21waWxlcl9mbGFncycKKwkgICAgOzsKKwllc2FjCisgICAgICA7OworCisgICAgICB0YW5kZW0qKQorICAgICAgICBjYXNlICRjY19iYXNlbmFtZSBpbgorICAgICAgICAgIE5DQyopCisJICAgICMgTm9uU3RvcC1VWCBOQ0MgMy4yMAorCSAgICAjIEZJWE1FOiBpbnNlcnQgcHJvcGVyIEMrKyBsaWJyYXJ5IHN1cHBvcnQKKwkgICAgX0xUX1RBR1ZBUihsZF9zaGxpYnMsICQxKT1ubworCSAgICA7OworICAgICAgICAgICopCisJICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorCSAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisJICAgIDs7CisgICAgICAgIGVzYWMKKyAgICAgICAgOzsKKworICAgICAgdnh3b3JrcyopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisKKyAgICAgICopCisgICAgICAgICMgRklYTUU6IGluc2VydCBwcm9wZXIgQysrIGxpYnJhcnkgc3VwcG9ydAorICAgICAgICBfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpPW5vCisgICAgICAgIDs7CisgICAgZXNhYworCisgICAgQUNfTVNHX1JFU1VMVChbJF9MVF9UQUdWQVIobGRfc2hsaWJzLCAkMSldKQorICAgIHRlc3QgIiRfTFRfVEFHVkFSKGxkX3NobGlicywgJDEpIiA9IG5vICYmIGNhbl9idWlsZF9zaGFyZWQ9bm8KKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRHWFgiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIENDPSRsdF9zYXZlX0NDCisgIENGTEFHUz0kbHRfc2F2ZV9DRkxBR1MKKyAgTERDWFg9JExECisgIExEPSRsdF9zYXZlX0xECisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgd2l0aF9nbnVfbGQ9JGx0X3NhdmVfd2l0aF9nbnVfbGQKKyAgbHRfY3ZfcGF0aF9MRENYWD0kbHRfY3ZfcGF0aF9MRAorICBsdF9jdl9wYXRoX0xEPSRsdF9zYXZlX3BhdGhfTEQKKyAgbHRfY3ZfcHJvZ19nbnVfbGRjeHg9JGx0X2N2X3Byb2dfZ251X2xkCisgIGx0X2N2X3Byb2dfZ251X2xkPSRsdF9zYXZlX3dpdGhfZ251X2xkCitmaSAjIHRlc3QgIiRfbHRfY2F1Z2h0X0NYWF9lcnJvciIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfQ1hYX0NPTkZJRworCisKKyMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGZ1bmNfc3RyaXBuYW1lX2NuZiBwcmVmaXggc3VmZml4IG5hbWUKKyMgc3RyaXAgUFJFRklYIGFuZCBTVUZGSVggb2ZmIG9mIE5BTUUuCisjIFBSRUZJWCBhbmQgU1VGRklYIG11c3Qgbm90IGNvbnRhaW4gZ2xvYmJpbmcgb3IgcmVnZXggc3BlY2lhbAorIyBjaGFyYWN0ZXJzLCBoYXNoZXMsIHBlcmNlbnQgc2lnbnMsIGJ1dCBTVUZGSVggbWF5IGNvbnRhaW4gYSBsZWFkaW5nCisjIGRvdCAoaW4gd2hpY2ggY2FzZSB0aGF0IG1hdGNoZXMgb25seSBhIGRvdCkuCisjCisjIFRoaXMgZnVuY3Rpb24gaXMgaWRlbnRpY2FsIHRvIHRoZSAobm9uLVhTSSkgdmVyc2lvbiBvZiBmdW5jX3N0cmlwbmFtZSwKKyMgZXhjZXB0IHRoaXMgb25lIGNhbiBiZSB1c2VkIGJ5IG00IGNvZGUgdGhhdCBtYXkgYmUgZXhlY3V0ZWQgYnkgY29uZmlndXJlLAorIyByYXRoZXIgdGhhbiB0aGUgbGlidG9vbCBzY3JpcHQuCittNF9kZWZ1bihbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0sW2RubAorQUNfUkVRVUlSRShbX0xUX0RFQ0xfU0VEXSkKK0FDX1JFUVVJUkUoW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSkKK2Z1bmNfc3RyaXBuYW1lX2NuZiAoKQoreworICBjYXNlICR7Mn0gaW4KKyAgLiopIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJVxcXFwkezJ9XCQlJSJgOzsKKyAgKikgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD1gJEVDSE8gIiR7M30iIHwgJFNFRCAicyVeJHsxfSUlOyBzJSR7Mn1cJCUlImA7OworICBlc2FjCit9ICMgZnVuY19zdHJpcG5hbWVfY25mCitdKSMgX0xUX0ZVTkNfU1RSSVBOQU1FX0NORgorCisjIF9MVF9TWVNfSElEREVOX0xJQkRFUFMoW1RBR05BTUVdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRmlndXJlIG91dCAiaGlkZGVuIiBsaWJyYXJ5IGRlcGVuZGVuY2llcyBmcm9tIHZlcmJvc2UKKyMgY29tcGlsZXIgb3V0cHV0IHdoZW4gbGlua2luZyBhIHNoYXJlZCBsaWJyYXJ5LgorIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyMgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgorbTRfZGVmdW4oW19MVF9TWVNfSElEREVOX0xJQkRFUFNdLAorW200X3JlcXVpcmUoW19MVF9GSUxFVVRJTFNfREVGQVVMVFNdKWRubAorQUNfUkVRVUlSRShbX0xUX0ZVTkNfU1RSSVBOQU1FX0NORl0pZG5sCisjIERlcGVuZGVuY2llcyB0byBwbGFjZSBiZWZvcmUgYW5kIGFmdGVyIHRoZSBvYmplY3QgYmVpbmcgbGlua2VkOgorX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKT0KK19MVF9UQUdWQVIocHJlZGVwcywgJDEpPQorX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPQorX0xUX1RBR1ZBUihjb21waWxlcl9saWJfc2VhcmNoX3BhdGgsICQxKT0KKworZG5sIHdlIGNhbid0IHVzZSB0aGUgbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIGhlcmUsCitkbmwgYmVjYXVzZSBpdCBjb250YWlucyBjb2RlIGludGVuZGVkIGZvciBhbiBleGVjdXRhYmxlLAorZG5sIG5vdCBhIGxpYnJhcnkuICBJdCdzIHBvc3NpYmxlIHdlIHNob3VsZCBsZXQgZWFjaAorZG5sIHRhZyBkZWZpbmUgYSBuZXcgbHRfPz8/P19saW5rX3Rlc3RfY29kZSB2YXJpYWJsZSwKK2RubCBidXQgaXQncyBvbmx5IHVzZWQgaGVyZS4uLgorbTRfaWYoWyQxXSwgW10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgoraW50IGE7Cit2b2lkIGZvbyAodm9pZCkgeyBhID0gMDsgfQorX0xUX0VPRgorXSwgWyQxXSwgW0NYWF0sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorY2xhc3MgRm9vCit7CitwdWJsaWM6CisgIEZvbyAodm9pZCkgeyBhID0gMDsgfQorcHJpdmF0ZToKKyAgaW50IGE7Cit9OworX0xUX0VPRgorXSwgWyQxXSwgW0Y3N10sIFtjYXQgPiBjb25mdGVzdC4kYWNfZXh0IDw8X0xUX0VPRgorICAgICAgc3Vicm91dGluZSBmb28KKyAgICAgIGltcGxpY2l0IG5vbmUKKyAgICAgIGludGVnZXIqNCBhCisgICAgICBhPTAKKyAgICAgIHJldHVybgorICAgICAgZW5kCitfTFRfRU9GCitdLCBbJDFdLCBbRkNdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKKyAgICAgIHN1YnJvdXRpbmUgZm9vCisgICAgICBpbXBsaWNpdCBub25lCisgICAgICBpbnRlZ2VyIGEKKyAgICAgIGE9MAorICAgICAgcmV0dXJuCisgICAgICBlbmQKK19MVF9FT0YKK10sIFskMV0sIFtHQ0pdLCBbY2F0ID4gY29uZnRlc3QuJGFjX2V4dCA8PF9MVF9FT0YKK3B1YmxpYyBjbGFzcyBmb28geworICBwcml2YXRlIGludCBhOworICBwdWJsaWMgdm9pZCBiYXIgKHZvaWQpIHsKKyAgICBhID0gMDsKKyAgfQorfTsKK19MVF9FT0YKK10pCisKK19sdF9saWJkZXBzX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2Nhc2UgIiRDQyAkQ0ZMQUdTICIgaW4gIygKKypcIC1mbHRvKlwgKikgQ0ZMQUdTPSIkQ0ZMQUdTIC1mbm8tbHRvIiA7OworKlwgLWZ3aG9wcipcICopIENGTEFHUz0iJENGTEFHUyAtZm5vLXdob3ByIiA7OworZXNhYworCitkbmwgUGFyc2UgdGhlIGNvbXBpbGVyIG91dHB1dCBhbmQgZXh0cmFjdCB0aGUgbmVjZXNzYXJ5Citkbmwgb2JqZWN0cywgbGlicmFyaWVzIGFuZCBsaWJyYXJ5IGZsYWdzLgoraWYgQUNfVFJZX0VWQUwoYWNfY29tcGlsZSk7IHRoZW4KKyAgIyBQYXJzZSB0aGUgY29tcGlsZXIgb3V0cHV0IGFuZCBleHRyYWN0IHRoZSBuZWNlc3NhcnkKKyAgIyBvYmplY3RzLCBsaWJyYXJpZXMgYW5kIGxpYnJhcnkgZmxhZ3MuCisKKyAgIyBTZW50aW5lbCB1c2VkIHRvIGtlZXAgdHJhY2sgb2Ygd2hldGhlciBvciBub3Qgd2UgYXJlIGJlZm9yZQorICAjIHRoZSBjb25mdGVzdCBvYmplY3QgZmlsZS4KKyAgcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZT1ubworCisgIGZvciBwIGluIGBldmFsICIkb3V0cHV0X3ZlcmJvc2VfbGlua19jbWQiYDsgZG8KKyAgICBjYXNlICR7cHJldn0ke3B9IGluCisKKyAgICAtTCogfCAtUiogfCAtbCopCisgICAgICAgIyBTb21lIGNvbXBpbGVycyBwbGFjZSBzcGFjZSBiZXR3ZWVuICIte0wsUn0iIGFuZCB0aGUgcGF0aC4KKyAgICAgICAjIFJlbW92ZSB0aGUgc3BhY2UuCisgICAgICAgaWYgdGVzdCAkcCA9ICItTCIgfHwKKyAgICAgICAgICB0ZXN0ICRwID0gIi1SIjsgdGhlbgorCSBwcmV2PSRwCisJIGNvbnRpbnVlCisgICAgICAgZmkKKworICAgICAgICMgRXhwYW5kIHRoZSBzeXNyb290IHRvIGVhc2UgZXh0cmFjdGluZyB0aGUgZGlyZWN0b3JpZXMgbGF0ZXIuCisgICAgICAgaWYgdGVzdCAteiAiJHByZXYiOyB0aGVuCisgICAgICAgICBjYXNlICRwIGluCisgICAgICAgICAtTCopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnLUwnICcnICIkcCI7IHByZXY9LUw7IHA9JGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdCA7OworICAgICAgICAgLVIqKSBmdW5jX3N0cmlwbmFtZV9jbmYgJy1SJyAnJyAiJHAiOyBwcmV2PS1SOyBwPSRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICAgIC1sKikgZnVuY19zdHJpcG5hbWVfY25mICctbCcgJycgIiRwIjsgcHJldj0tbDsgcD0kZnVuY19zdHJpcG5hbWVfcmVzdWx0IDs7CisgICAgICAgICBlc2FjCisgICAgICAgZmkKKyAgICAgICBjYXNlICRwIGluCisgICAgICAgPSopIGZ1bmNfc3RyaXBuYW1lX2NuZiAnPScgJycgIiRwIjsgcD0kbHRfc3lzcm9vdCRmdW5jX3N0cmlwbmFtZV9yZXN1bHQgOzsKKyAgICAgICBlc2FjCisgICAgICAgaWYgdGVzdCAiJHByZV90ZXN0X29iamVjdF9kZXBzX2RvbmUiID0gbm87IHRoZW4KKwkgY2FzZSAke3ByZXZ9IGluCisJIC1MIHwgLVIpCisJICAgIyBJbnRlcm5hbCBjb21waWxlciBsaWJyYXJ5IHBhdGhzIHNob3VsZCBjb21lIGFmdGVyIHRob3NlCisJICAgIyBwcm92aWRlZCB0aGUgdXNlci4gIFRoZSBwb3N0ZGVwcyBhbHJlYWR5IGNvbWUgYWZ0ZXIgdGhlCisJICAgIyB1c2VyIHN1cHBsaWVkIGxpYnMgc28gdGhlcmUgaXMgbm8gbmVlZCB0byBwcm9jZXNzIHRoZW0uCisJICAgaWYgdGVzdCAteiAiJF9MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSkiOyB0aGVuCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke3ByZXZ9JHtwfSIKKwkgICBlbHNlCisJICAgICBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpPSIke19MVF9UQUdWQVIoY29tcGlsZXJfbGliX3NlYXJjaF9wYXRoLCAkMSl9ICR7cHJldn0ke3B9IgorCSAgIGZpCisJICAgOzsKKwkgIyBUaGUgIi1sIiBjYXNlIHdvdWxkIG5ldmVyIGNvbWUgYmVmb3JlIHRoZSBvYmplY3QgYmVpbmcKKwkgIyBsaW5rZWQsIHNvIGRvbid0IGJvdGhlciBoYW5kbGluZyB0aGlzIGNhc2UuCisJIGVzYWMKKyAgICAgICBlbHNlCisJIGlmIHRlc3QgLXogIiRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkiOyB0aGVuCisJICAgX0xUX1RBR1ZBUihwb3N0ZGVwcywgJDEpPSIke3ByZXZ9JHtwfSIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcHMsICQxKT0iJHtfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSl9ICR7cHJldn0ke3B9IgorCSBmaQorICAgICAgIGZpCisgICAgICAgcHJldj0KKyAgICAgICA7OworCisgICAgKi5sdG8uJG9iamV4dCkgOzsgIyBJZ25vcmUgR0NDIExUTyBvYmplY3RzCisgICAgKi4kb2JqZXh0KQorICAgICAgICMgVGhpcyBhc3N1bWVzIHRoYXQgdGhlIHRlc3Qgb2JqZWN0IGZpbGUgb25seSBzaG93cyB1cAorICAgICAgICMgb25jZSBpbiB0aGUgY29tcGlsZXIgb3V0cHV0LgorICAgICAgIGlmIHRlc3QgIiRwIiA9ICJjb25mdGVzdC4kb2JqZXh0IjsgdGhlbgorCSBwcmVfdGVzdF9vYmplY3RfZGVwc19kb25lPXllcworCSBjb250aW51ZQorICAgICAgIGZpCisKKyAgICAgICBpZiB0ZXN0ICIkcHJlX3Rlc3Rfb2JqZWN0X2RlcHNfZG9uZSIgPSBubzsgdGhlbgorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwcmVkZXBfb2JqZWN0cywgJDEpIjsgdGhlbgorCSAgIF9MVF9UQUdWQVIocHJlZGVwX29iamVjdHMsICQxKT0iJHAiCisJIGVsc2UKKwkgICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCAkMSkgJHAiCisJIGZpCisgICAgICAgZWxzZQorCSBpZiB0ZXN0IC16ICIkX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsICQxKSI7IHRoZW4KKwkgICBfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpPSIkcCIKKwkgZWxzZQorCSAgIF9MVF9UQUdWQVIocG9zdGRlcF9vYmplY3RzLCAkMSk9IiRfTFRfVEFHVkFSKHBvc3RkZXBfb2JqZWN0cywgJDEpICRwIgorCSBmaQorICAgICAgIGZpCisgICAgICAgOzsKKworICAgICopIDs7ICMgSWdub3JlIHRoZSByZXN0LgorCisgICAgZXNhYworICBkb25lCisKKyAgIyBDbGVhbiB1cC4KKyAgcm0gLWYgYS5vdXQgYS5leGUKK2Vsc2UKKyAgZWNobyAibGlidG9vbC5tNDogZXJyb3I6IHByb2JsZW0gY29tcGlsaW5nICQxIHRlc3QgcHJvZ3JhbSIKK2ZpCisKKyRSTSAtZiBjb25mZXN0LiRvYmpleHQKK0NGTEFHUz0kX2x0X2xpYmRlcHNfc2F2ZV9DRkxBR1MKKworIyBQT1JUTUU6IG92ZXJyaWRlIGFib3ZlIHRlc3Qgb24gc3lzdGVtcyB3aGVyZSBpdCBpcyBicm9rZW4KK200X2lmKFskMV0sIFtDWFhdLAorW2Nhc2UgJGhvc3Rfb3MgaW4KK2ludGVyaXhbWzMtOV1dKikKKyAgIyBJbnRlcml4IDMuNSBpbnN0YWxscyBjb21wbGV0ZWx5IGhvc2VkIC5sYSBmaWxlcyBmb3IgQysrLCBzbyByYXRoZXIgdGhhbgorICAjIGhhY2sgYWxsIGFyb3VuZCBpdCwgbGV0J3MganVzdCB0cnVzdCAiZysrIiB0byBEVFJULgorICBfTFRfVEFHVkFSKHByZWRlcF9vYmplY3RzLCQxKT0KKyAgX0xUX1RBR1ZBUihwb3N0ZGVwX29iamVjdHMsJDEpPQorICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0KKyAgOzsKKworbGludXgqKQorICBjYXNlIGAkQ0MgLVYgMj4mMSB8IHNlZCA1cWAgaW4KKyAgKlN1blwgQyopCisgICAgIyBTdW4gQysrIDUuOQorCisgICAgIyBUaGUgbW9yZSBzdGFuZGFyZHMtY29uZm9ybWluZyBzdGxwb3J0NCBsaWJyYXJ5IGlzCisgICAgIyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgQ3N0ZCBsaWJyYXJ5LiBBdm9pZCBzcGVjaWZ5aW5nCisgICAgIyBpdCBpZiBpdCdzIGluIENYWEZMQUdTLiBJZ25vcmUgbGliQ3J1biBhcworICAgICMgLWxpYnJhcnk9c3RscG9ydDQgZGVwZW5kcyBvbiBpdC4KKyAgICBjYXNlICIgJENYWCAkQ1hYRkxBR1MgIiBpbgorICAgICoiIC1saWJyYXJ5PXN0bHBvcnQ0ICIqKQorICAgICAgc29sYXJpc191c2Vfc3RscG9ydDQ9eWVzCisgICAgICA7OworICAgIGVzYWMKKworICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworCitzb2xhcmlzKikKKyAgY2FzZSAkY2NfYmFzZW5hbWUgaW4KKyAgQ0MqIHwgc3VuQ0MqKQorICAgICMgVGhlIG1vcmUgc3RhbmRhcmRzLWNvbmZvcm1pbmcgc3RscG9ydDQgbGlicmFyeSBpcworICAgICMgaW5jb21wYXRpYmxlIHdpdGggdGhlIENzdGQgbGlicmFyeS4gQXZvaWQgc3BlY2lmeWluZworICAgICMgaXQgaWYgaXQncyBpbiBDWFhGTEFHUy4gSWdub3JlIGxpYkNydW4gYXMKKyAgICAjIC1saWJyYXJ5PXN0bHBvcnQ0IGRlcGVuZHMgb24gaXQuCisgICAgY2FzZSAiICRDWFggJENYWEZMQUdTICIgaW4KKyAgICAqIiAtbGlicmFyeT1zdGxwb3J0NCAiKikKKyAgICAgIHNvbGFyaXNfdXNlX3N0bHBvcnQ0PXllcworICAgICAgOzsKKyAgICBlc2FjCisKKyAgICAjIEFkZGluZyB0aGlzIHJlcXVpcmVzIGEga25vd24tZ29vZCBzZXR1cCBvZiBzaGFyZWQgbGlicmFyaWVzIGZvcgorICAgICMgU3VuIGNvbXBpbGVyIHZlcnNpb25zIGJlZm9yZSA1LjYsIGVsc2UgUElDIG9iamVjdHMgZnJvbSBhbiBvbGQKKyAgICAjIGFyY2hpdmUgd2lsbCBiZSBsaW5rZWQgaW50byB0aGUgb3V0cHV0LCBsZWFkaW5nIHRvIHN1YnRsZSBidWdzLgorICAgIGlmIHRlc3QgIiRzb2xhcmlzX3VzZV9zdGxwb3J0NCIgIT0geWVzOyB0aGVuCisgICAgICBfTFRfVEFHVkFSKHBvc3RkZXBzLCQxKT0nLWxpYnJhcnk9Q3N0ZCAtbGlicmFyeT1DcnVuJworICAgIGZpCisgICAgOzsKKyAgZXNhYworICA7OworZXNhYworXSkKKworY2FzZSAiICRfTFRfVEFHVkFSKHBvc3RkZXBzLCAkMSkgIiBpbgorKiIgLWxjICIqKSBfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8gOzsKK2VzYWMKKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPQoraWYgdGVzdCAtbiAiJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSI7IHRoZW4KKyBfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfZGlycywgJDEpPWBlY2hvICIgJHtfTFRfVEFHVkFSKGNvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aCwgJDEpfSIgfCAke1NFRH0gLWUgJ3MhIC1MISAhZycgLWUgJ3MhXiAhISdgCitmaQorX0xUX1RBR0RFQ0woW10sIFtjb21waWxlcl9saWJfc2VhcmNoX2RpcnNdLCBbMV0sCisgICAgW1RoZSBkaXJlY3RvcmllcyBzZWFyY2hlZCBieSB0aGlzIGNvbXBpbGVyIHdoZW4gY3JlYXRpbmcgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3ByZWRlcF9vYmplY3RzXSwgWzFdLAorICAgIFtEZXBlbmRlbmNpZXMgdG8gcGxhY2UgYmVmb3JlIGFuZCBhZnRlciB0aGUgb2JqZWN0cyBiZWluZyBsaW5rZWQgdG8KKyAgICBjcmVhdGUgYSBzaGFyZWQgbGlicmFyeV0pCitfTFRfVEFHREVDTChbXSwgW3Bvc3RkZXBfb2JqZWN0c10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcHJlZGVwc10sIFsxXSkKK19MVF9UQUdERUNMKFtdLCBbcG9zdGRlcHNdLCBbMV0pCitfTFRfVEFHREVDTChbXSwgW2NvbXBpbGVyX2xpYl9zZWFyY2hfcGF0aF0sIFsxXSwKKyAgICBbVGhlIGxpYnJhcnkgc2VhcmNoIHBhdGggdXNlZCBpbnRlcm5hbGx5IGJ5IHRoZSBjb21waWxlciB3aGVuIGxpbmtpbmcKKyAgICBhIHNoYXJlZCBsaWJyYXJ5XSkKK10pIyBfTFRfU1lTX0hJRERFTl9MSUJERVBTCisKKworIyBfTFRfTEFOR19GNzdfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFbnN1cmUgdGhhdCB0aGUgY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgZm9yIGEgRm9ydHJhbiA3NyBjb21waWxlciBhcmUKKyMgc3VpdGFibHkgZGVmaW5lZC4gIFRoZXNlIHZhcmlhYmxlcyBhcmUgc3Vic2VxdWVudGx5IHVzZWQgYnkgX0xUX0NPTkZJRworIyB0byB3cml0ZSB0aGUgY29tcGlsZXIgY29uZmlndXJhdGlvbiB0byBgbGlidG9vbCcuCittNF9kZWZ1bihbX0xUX0xBTkdfRjc3X0NPTkZJR10sCitbQUNfTEFOR19QVVNIKEZvcnRyYW4gNzcpCitpZiB0ZXN0IC16ICIkRjc3IiB8fCB0ZXN0ICJYJEY3NyIgPSAiWG5vIjsgdGhlbgorICBfbHRfZGlzYWJsZV9GNzc9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZjc3IHRlc3Qgc291cmNlcy4KK2FjX2V4dD1mCisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmNzcgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIE5vIHNlbnNlIGluIHJ1bm5pbmcgYWxsIHRoZXNlIHRlc3RzIGlmIHdlIGFscmVhZHkgZGV0ZXJtaW5lZCB0aGF0CisjIHRoZSBGNzcgY29tcGlsZXIgaXNuJ3Qgd29ya2luZy4gIFNvbWUgdmFyaWFibGVzIChsaWtlIGVuYWJsZV9zaGFyZWQpCisjIGFyZSBjdXJyZW50bHkgYXNzdW1lZCB0byBhcHBseSB0byBhbGwgY29tcGlsZXJzIG9uIHRoaXMgcGxhdGZvcm0sCisjIGFuZCB3aWxsIGJlIGNvcnJ1cHRlZCBieSBzZXR0aW5nIHRoZW0gYmFzZWQgb24gYSBub24td29ya2luZyBjb21waWxlci4KK2lmIHRlc3QgIiRfbHRfZGlzYWJsZV9GNzciICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0Y3Ny0iZjc3In0KKyAgQ0ZMQUdTPSRGRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIF9MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKKyAgX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorICBHQ0M9JEc3NworICBpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgICAgQUNfTVNHX0NIRUNLSU5HKFtpZiBsaWJ0b29sIHN1cHBvcnRzIHNoYXJlZCBsaWJyYXJpZXNdKQorICAgIEFDX01TR19SRVNVTFQoWyRjYW5fYnVpbGRfc2hhcmVkXSkKKworICAgIEFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICB0ZXN0ICIkY2FuX2J1aWxkX3NoYXJlZCIgPSAibm8iICYmIGVuYWJsZV9zaGFyZWQ9bm8KKworICAgICMgT24gQUlYLCBzaGFyZWQgbGlicmFyaWVzIGFuZCBzdGF0aWMgbGlicmFyaWVzIHVzZSB0aGUgc2FtZSBuYW1lc3BhY2UsIGFuZAorICAgICMgYXJlIGFsbCBidWlsdCBmcm9tIFBJQy4KKyAgICBjYXNlICRob3N0X29zIGluCisgICAgICBhaXgzKikKKyAgICAgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKyAgICAgICAgaWYgdGVzdCAtbiAiJFJBTkxJQiI7IHRoZW4KKyAgICAgICAgICBhcmNoaXZlX2NtZHM9IiRhcmNoaXZlX2NtZHN+XCRSQU5MSUIgXCRsaWIiCisgICAgICAgICAgcG9zdGluc3RhbGxfY21kcz0nJFJBTkxJQiAkbGliJworICAgICAgICBmaQorICAgICAgICA7OworICAgICAgYWl4W1s0LTldXSopCisJaWYgdGVzdCAiJGhvc3RfY3B1IiAhPSBpYTY0ICYmIHRlc3QgIiRhaXhfdXNlX3J1bnRpbWVsaW5raW5nIiA9IG5vIDsgdGhlbgorCSAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzICYmIGVuYWJsZV9zdGF0aWM9bm8KKwlmaQorICAgICAgICA7OworICAgIGVzYWMKKyAgICBBQ19NU0dfUkVTVUxUKFskZW5hYmxlX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc3RhdGljIGxpYnJhcmllc10pCisgICAgIyBNYWtlIHN1cmUgZWl0aGVyIGVuYWJsZV9zaGFyZWQgb3IgZW5hYmxlX3N0YXRpYyBpcyB5ZXMuCisgICAgdGVzdCAiJGVuYWJsZV9zaGFyZWQiID0geWVzIHx8IGVuYWJsZV9zdGF0aWM9eWVzCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zdGF0aWNdKQorCisgICAgX0xUX1RBR1ZBUihHQ0MsICQxKT0iJEc3NyIKKyAgICBfTFRfVEFHVkFSKExELCAkMSk9IiRMRCIKKworICAgICMjIENBVkVBVCBFTVBUT1I6CisgICAgIyMgVGhlcmUgaXMgbm8gZW5jYXBzdWxhdGlvbiB3aXRoaW4gdGhlIGZvbGxvd2luZyBtYWNyb3MsIGRvIG5vdCBjaGFuZ2UKKyAgICAjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorICAgICMjIHdoYXQgeW91IGFyZSBkb2luZy4uLgorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9IiRsdF9zYXZlX0NDIgorICBDRkxBR1M9IiRsdF9zYXZlX0NGTEFHUyIKK2ZpICMgdGVzdCAiJF9sdF9kaXNhYmxlX0Y3NyIgIT0geWVzCisKK0FDX0xBTkdfUE9QCitdKSMgX0xUX0xBTkdfRjc3X0NPTkZJRworCisKKyMgX0xUX0xBTkdfRkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgYSBGb3J0cmFuIGNvbXBpbGVyIGFyZQorIyBzdWl0YWJseSBkZWZpbmVkLiAgVGhlc2UgdmFyaWFibGVzIGFyZSBzdWJzZXF1ZW50bHkgdXNlZCBieSBfTFRfQ09ORklHCisjIHRvIHdyaXRlIHRoZSBjb21waWxlciBjb25maWd1cmF0aW9uIHRvIGBsaWJ0b29sJy4KK200X2RlZnVuKFtfTFRfTEFOR19GQ19DT05GSUddLAorW0FDX0xBTkdfUFVTSChGb3J0cmFuKQorCitpZiB0ZXN0IC16ICIkRkMiIHx8IHRlc3QgIlgkRkMiID0gIlhubyI7IHRoZW4KKyAgX2x0X2Rpc2FibGVfRkM9eWVzCitmaQorCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KK19MVF9UQUdWQVIoYWxsb3dfdW5kZWZpbmVkX2ZsYWcsICQxKT0KK19MVF9UQUdWQVIoYWx3YXlzX2V4cG9ydF9zeW1ib2xzLCAkMSk9bm8KK19MVF9UQUdWQVIoYXJjaGl2ZV9leHBzeW1fY21kcywgJDEpPQorX0xUX1RBR1ZBUihleHBvcnRfZHluYW1pY19mbGFnX3NwZWMsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0LCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfZGlyZWN0X2Fic29sdXRlLCAkMSk9bm8KK19MVF9UQUdWQVIoaGFyZGNvZGVfbGliZGlyX2ZsYWdfc3BlYywgJDEpPQorX0xUX1RBR1ZBUihoYXJkY29kZV9saWJkaXJfZmxhZ19zcGVjX2xkLCAkMSk9CitfTFRfVEFHVkFSKGhhcmRjb2RlX2xpYmRpcl9zZXBhcmF0b3IsICQxKT0KK19MVF9UQUdWQVIoaGFyZGNvZGVfbWludXNfTCwgJDEpPW5vCitfTFRfVEFHVkFSKGhhcmRjb2RlX2F1dG9tYXRpYywgJDEpPW5vCitfTFRfVEFHVkFSKGluaGVyaXRfcnBhdGgsICQxKT1ubworX0xUX1RBR1ZBUihtb2R1bGVfY21kcywgJDEpPQorX0xUX1RBR1ZBUihtb2R1bGVfZXhwc3ltX2NtZHMsICQxKT0KK19MVF9UQUdWQVIobGlua19hbGxfZGVwbGlicywgJDEpPXVua25vd24KK19MVF9UQUdWQVIob2xkX2FyY2hpdmVfY21kcywgJDEpPSRvbGRfYXJjaGl2ZV9jbWRzCitfTFRfVEFHVkFSKHJlbG9hZF9mbGFnLCAkMSk9JHJlbG9hZF9mbGFnCitfTFRfVEFHVkFSKHJlbG9hZF9jbWRzLCAkMSk9JHJlbG9hZF9jbWRzCitfTFRfVEFHVkFSKG5vX3VuZGVmaW5lZF9mbGFnLCAkMSk9CitfTFRfVEFHVkFSKHdob2xlX2FyY2hpdmVfZmxhZ19zcGVjLCAkMSk9CitfTFRfVEFHVkFSKGVuYWJsZV9zaGFyZWRfd2l0aF9zdGF0aWNfcnVudGltZXMsICQxKT1ubworCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgZmMgdGVzdCBzb3VyY2VzLgorYWNfZXh0PSR7YWNfZmNfc3JjZXh0LWZ9CisKKyMgT2JqZWN0IGZpbGUgZXh0ZW5zaW9uIGZvciBjb21waWxlZCBmYyB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgTm8gc2Vuc2UgaW4gcnVubmluZyBhbGwgdGhlc2UgdGVzdHMgaWYgd2UgYWxyZWFkeSBkZXRlcm1pbmVkIHRoYXQKKyMgdGhlIEZDIGNvbXBpbGVyIGlzbid0IHdvcmtpbmcuICBTb21lIHZhcmlhYmxlcyAobGlrZSBlbmFibGVfc2hhcmVkKQorIyBhcmUgY3VycmVudGx5IGFzc3VtZWQgdG8gYXBwbHkgdG8gYWxsIGNvbXBpbGVycyBvbiB0aGlzIHBsYXRmb3JtLAorIyBhbmQgd2lsbCBiZSBjb3JydXB0ZWQgYnkgc2V0dGluZyB0aGVtIGJhc2VkIG9uIGEgbm9uLXdvcmtpbmcgY29tcGlsZXIuCitpZiB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllczsgdGhlbgorICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworICBsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9IlwKKyAgICAgIHN1YnJvdXRpbmUgdAorICAgICAgcmV0dXJuCisgICAgICBlbmQKKyIKKworICAjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworICBsdF9zaW1wbGVfbGlua190ZXN0X2NvZGU9IlwKKyAgICAgIHByb2dyYW0gdAorICAgICAgZW5kCisiCisKKyAgIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorICBfTFRfVEFHX0NPTVBJTEVSCisKKyAgIyBzYXZlIHdhcm5pbmdzL2JvaWxlcnBsYXRlIG9mIHNpbXBsZSB0ZXN0IGNvZGUKKyAgX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCisgIF9MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworICAjIEFsbG93IENDIHRvIGJlIGEgcHJvZ3JhbSBuYW1lIHdpdGggYXJndW1lbnRzLgorICBsdF9zYXZlX0NDPSIkQ0MiCisgIGx0X3NhdmVfR0NDPSRHQ0MKKyAgbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworICBDQz0ke0ZDLSJmOTUifQorICBDRkxBR1M9JEZDRkxBR1MKKyAgY29tcGlsZXI9JENDCisgIEdDQz0kYWNfY3ZfZmNfY29tcGlsZXJfZ251CisKKyAgX0xUX1RBR1ZBUihjb21waWxlciwgJDEpPSRDQworICBfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCisKKyAgaWYgdGVzdCAtbiAiJGNvbXBpbGVyIjsgdGhlbgorICAgIEFDX01TR19DSEVDS0lORyhbaWYgbGlidG9vbCBzdXBwb3J0cyBzaGFyZWQgbGlicmFyaWVzXSkKKyAgICBBQ19NU0dfUkVTVUxUKFskY2FuX2J1aWxkX3NoYXJlZF0pCisKKyAgICBBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdG8gYnVpbGQgc2hhcmVkIGxpYnJhcmllc10pCisgICAgdGVzdCAiJGNhbl9idWlsZF9zaGFyZWQiID0gIm5vIiAmJiBlbmFibGVfc2hhcmVkPW5vCisKKyAgICAjIE9uIEFJWCwgc2hhcmVkIGxpYnJhcmllcyBhbmQgc3RhdGljIGxpYnJhcmllcyB1c2UgdGhlIHNhbWUgbmFtZXNwYWNlLCBhbmQKKyAgICAjIGFyZSBhbGwgYnVpbHQgZnJvbSBQSUMuCisgICAgY2FzZSAkaG9zdF9vcyBpbgorICAgICAgYWl4MyopCisgICAgICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisgICAgICAgIGlmIHRlc3QgLW4gIiRSQU5MSUIiOyB0aGVuCisgICAgICAgICAgYXJjaGl2ZV9jbWRzPSIkYXJjaGl2ZV9jbWRzflwkUkFOTElCIFwkbGliIgorICAgICAgICAgIHBvc3RpbnN0YWxsX2NtZHM9JyRSQU5MSUIgJGxpYicKKyAgICAgICAgZmkKKyAgICAgICAgOzsKKyAgICAgIGFpeFtbNC05XV0qKQorCWlmIHRlc3QgIiRob3N0X2NwdSIgIT0gaWE2NCAmJiB0ZXN0ICIkYWl4X3VzZV9ydW50aW1lbGlua2luZyIgPSBubyA7IHRoZW4KKwkgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyAmJiBlbmFibGVfc3RhdGljPW5vCisJZmkKKyAgICAgICAgOzsKKyAgICBlc2FjCisgICAgQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9zaGFyZWRdKQorCisgICAgQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRvIGJ1aWxkIHN0YXRpYyBsaWJyYXJpZXNdKQorICAgICMgTWFrZSBzdXJlIGVpdGhlciBlbmFibGVfc2hhcmVkIG9yIGVuYWJsZV9zdGF0aWMgaXMgeWVzLgorICAgIHRlc3QgIiRlbmFibGVfc2hhcmVkIiA9IHllcyB8fCBlbmFibGVfc3RhdGljPXllcworICAgIEFDX01TR19SRVNVTFQoWyRlbmFibGVfc3RhdGljXSkKKworICAgIF9MVF9UQUdWQVIoR0NDLCAkMSk9IiRhY19jdl9mY19jb21waWxlcl9nbnUiCisgICAgX0xUX1RBR1ZBUihMRCwgJDEpPSIkTEQiCisKKyAgICAjIyBDQVZFQVQgRU1QVE9SOgorICAgICMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisgICAgIyMgdGhlIHJ1bm5pbmcgb3JkZXIgb3Igb3RoZXJ3aXNlIG1vdmUgdGhlbSBhcm91bmQgdW5sZXNzIHlvdSBrbm93IGV4YWN0bHkKKyAgICAjIyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4KKyAgICBfTFRfU1lTX0hJRERFTl9MSUJERVBTKCQxKQorICAgIF9MVF9DT01QSUxFUl9QSUMoJDEpCisgICAgX0xUX0NPTVBJTEVSX0NfTygkMSkKKyAgICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgICBfTFRfTElOS0VSX1NITElCUygkMSkKKyAgICBfTFRfU1lTX0RZTkFNSUNfTElOS0VSKCQxKQorICAgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICAgIF9MVF9DT05GSUcoJDEpCisgIGZpICMgdGVzdCAtbiAiJGNvbXBpbGVyIgorCisgIEdDQz0kbHRfc2F2ZV9HQ0MKKyAgQ0M9JGx0X3NhdmVfQ0MKKyAgQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworZmkgIyB0ZXN0ICIkX2x0X2Rpc2FibGVfRkMiICE9IHllcworCitBQ19MQU5HX1BPUAorXSkjIF9MVF9MQU5HX0ZDX0NPTkZJRworCisKKyMgX0xUX0xBTkdfR0NKX0NPTkZJRyhbVEFHXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gdmFyaWFibGVzIGZvciB0aGUgR05VIEphdmEgQ29tcGlsZXIgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX0dDSl9DT05GSUddLAorW0FDX1JFUVVJUkUoW0xUX1BST0dfR0NKXSlkbmwKK0FDX0xBTkdfU0FWRQorCisjIFNvdXJjZSBmaWxlIGV4dGVuc2lvbiBmb3IgSmF2YSB0ZXN0IHNvdXJjZXMuCithY19leHQ9amF2YQorCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgSmF2YSB0ZXN0IHNvdXJjZXMuCitvYmpleHQ9bworX0xUX1RBR1ZBUihvYmpleHQsICQxKT0kb2JqZXh0CisKKyMgQ29kZSB0byBiZSB1c2VkIGluIHNpbXBsZSBjb21waWxlIHRlc3RzCitsdF9zaW1wbGVfY29tcGlsZV90ZXN0X2NvZGU9ImNsYXNzIGZvbyB7fSIKKworIyBDb2RlIHRvIGJlIHVzZWQgaW4gc2ltcGxlIGxpbmsgdGVzdHMKK2x0X3NpbXBsZV9saW5rX3Rlc3RfY29kZT0ncHVibGljIGNsYXNzIGNvbmZ0ZXN0IHsgcHVibGljIHN0YXRpYyB2b2lkIG1haW4oU3RyaW5nW1tdXSBhcmd2KSB7fTsgfScKKworIyBsdG1haW4gb25seSB1c2VzICRDQyBmb3IgdGFnZ2VkIGNvbmZpZ3VyYXRpb25zIHNvIG1ha2Ugc3VyZSAkQ0MgaXMgc2V0LgorX0xUX1RBR19DT01QSUxFUgorCisjIHNhdmUgd2FybmluZ3MvYm9pbGVycGxhdGUgb2Ygc2ltcGxlIHRlc3QgY29kZQorX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFCitfTFRfTElOS0VSX0JPSUxFUlBMQVRFCisKKyMgQWxsb3cgQ0MgdG8gYmUgYSBwcm9ncmFtIG5hbWUgd2l0aCBhcmd1bWVudHMuCitsdF9zYXZlX0NDPSRDQworbHRfc2F2ZV9DRkxBR1M9JENGTEFHUworbHRfc2F2ZV9HQ0M9JEdDQworR0NDPXllcworQ0M9JHtHQ0otImdjaiJ9CitDRkxBR1M9JEdDSkZMQUdTCitjb21waWxlcj0kQ0MKK19MVF9UQUdWQVIoY29tcGlsZXIsICQxKT0kQ0MKK19MVF9UQUdWQVIoTEQsICQxKT0iJExEIgorX0xUX0NDX0JBU0VOQU1FKFskY29tcGlsZXJdKQorCisjIEdDSiBkaWQgbm90IGV4aXN0IGF0IHRoZSB0aW1lIEdDQyBkaWRuJ3QgaW1wbGljaXRseSBsaW5rIGxpYmMgaW4uCitfTFRfVEFHVkFSKGFyY2hpdmVfY21kc19uZWVkX2xjLCAkMSk9bm8KKworX0xUX1RBR1ZBUihvbGRfYXJjaGl2ZV9jbWRzLCAkMSk9JG9sZF9hcmNoaXZlX2NtZHMKK19MVF9UQUdWQVIocmVsb2FkX2ZsYWcsICQxKT0kcmVsb2FkX2ZsYWcKK19MVF9UQUdWQVIocmVsb2FkX2NtZHMsICQxKT0kcmVsb2FkX2NtZHMKKworIyMgQ0FWRUFUIEVNUFRPUjoKKyMjIFRoZXJlIGlzIG5vIGVuY2Fwc3VsYXRpb24gd2l0aGluIHRoZSBmb2xsb3dpbmcgbWFjcm9zLCBkbyBub3QgY2hhbmdlCisjIyB0aGUgcnVubmluZyBvcmRlciBvciBvdGhlcndpc2UgbW92ZSB0aGVtIGFyb3VuZCB1bmxlc3MgeW91IGtub3cgZXhhY3RseQorIyMgd2hhdCB5b3UgYXJlIGRvaW5nLi4uCitpZiB0ZXN0IC1uICIkY29tcGlsZXIiOyB0aGVuCisgIF9MVF9DT01QSUxFUl9OT19SVFRJKCQxKQorICBfTFRfQ09NUElMRVJfUElDKCQxKQorICBfTFRfQ09NUElMRVJfQ19PKCQxKQorICBfTFRfQ09NUElMRVJfRklMRV9MT0NLUygkMSkKKyAgX0xUX0xJTktFUl9TSExJQlMoJDEpCisgIF9MVF9MSU5LRVJfSEFSRENPREVfTElCUEFUSCgkMSkKKworICBfTFRfQ09ORklHKCQxKQorZmkKKworQUNfTEFOR19SRVNUT1JFCisKK0dDQz0kbHRfc2F2ZV9HQ0MKK0NDPSRsdF9zYXZlX0NDCitDRkxBR1M9JGx0X3NhdmVfQ0ZMQUdTCitdKSMgX0xUX0xBTkdfR0NKX0NPTkZJRworCisKKyMgX0xUX0xBTkdfUkNfQ09ORklHKFtUQUddKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEVuc3VyZSB0aGF0IHRoZSBjb25maWd1cmF0aW9uIHZhcmlhYmxlcyBmb3IgdGhlIFdpbmRvd3MgcmVzb3VyY2UgY29tcGlsZXIKKyMgYXJlIHN1aXRhYmx5IGRlZmluZWQuICBUaGVzZSB2YXJpYWJsZXMgYXJlIHN1YnNlcXVlbnRseSB1c2VkIGJ5IF9MVF9DT05GSUcKKyMgdG8gd3JpdGUgdGhlIGNvbXBpbGVyIGNvbmZpZ3VyYXRpb24gdG8gYGxpYnRvb2wnLgorbTRfZGVmdW4oW19MVF9MQU5HX1JDX0NPTkZJR10sCitbQUNfUkVRVUlSRShbTFRfUFJPR19SQ10pZG5sCitBQ19MQU5HX1NBVkUKKworIyBTb3VyY2UgZmlsZSBleHRlbnNpb24gZm9yIFJDIHRlc3Qgc291cmNlcy4KK2FjX2V4dD1yYworCisjIE9iamVjdCBmaWxlIGV4dGVuc2lvbiBmb3IgY29tcGlsZWQgUkMgdGVzdCBzb3VyY2VzLgorb2JqZXh0PW8KK19MVF9UQUdWQVIob2JqZXh0LCAkMSk9JG9iamV4dAorCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgY29tcGlsZSB0ZXN0cworbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlPSdzYW1wbGUgTUVOVSB7IE1FTlVJVEVNICImU291cCIsIDEwMCwgQ0hFQ0tFRCB9JworCisjIENvZGUgdG8gYmUgdXNlZCBpbiBzaW1wbGUgbGluayB0ZXN0cworbHRfc2ltcGxlX2xpbmtfdGVzdF9jb2RlPSIkbHRfc2ltcGxlX2NvbXBpbGVfdGVzdF9jb2RlIgorCisjIGx0bWFpbiBvbmx5IHVzZXMgJENDIGZvciB0YWdnZWQgY29uZmlndXJhdGlvbnMgc28gbWFrZSBzdXJlICRDQyBpcyBzZXQuCitfTFRfVEFHX0NPTVBJTEVSCisKKyMgc2F2ZSB3YXJuaW5ncy9ib2lsZXJwbGF0ZSBvZiBzaW1wbGUgdGVzdCBjb2RlCitfTFRfQ09NUElMRVJfQk9JTEVSUExBVEUKK19MVF9MSU5LRVJfQk9JTEVSUExBVEUKKworIyBBbGxvdyBDQyB0byBiZSBhIHByb2dyYW0gbmFtZSB3aXRoIGFyZ3VtZW50cy4KK2x0X3NhdmVfQ0M9IiRDQyIKK2x0X3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK2x0X3NhdmVfR0NDPSRHQ0MKK0dDQz0KK0NDPSR7UkMtIndpbmRyZXMifQorQ0ZMQUdTPQorY29tcGlsZXI9JENDCitfTFRfVEFHVkFSKGNvbXBpbGVyLCAkMSk9JENDCitfTFRfQ0NfQkFTRU5BTUUoWyRjb21waWxlcl0pCitfTFRfVEFHVkFSKGx0X2N2X3Byb2dfY29tcGlsZXJfY19vLCAkMSk9eWVzCisKK2lmIHRlc3QgLW4gIiRjb21waWxlciI7IHRoZW4KKyAgOgorICBfTFRfQ09ORklHKCQxKQorZmkKKworR0NDPSRsdF9zYXZlX0dDQworQUNfTEFOR19SRVNUT1JFCitDQz0kbHRfc2F2ZV9DQworQ0ZMQUdTPSRsdF9zYXZlX0NGTEFHUworXSkjIF9MVF9MQU5HX1JDX0NPTkZJRworCisKKyMgTFRfUFJPR19HQ0oKKyMgLS0tLS0tLS0tLS0KK0FDX0RFRlVOKFtMVF9QUk9HX0dDSl0sCitbbTRfaWZkZWYoW0FDX1BST0dfR0NKXSwgW0FDX1BST0dfR0NKXSwKKyAgW200X2lmZGVmKFtBXVtNX1BST0dfR0NKXSwgW0FdW01fUFJPR19HQ0pdLAorICAgIFtBQ19DSEVDS19UT09MKEdDSiwgZ2NqLCkKKyAgICAgIHRlc3QgIngke0dDSkZMQUdTK3NldH0iID0geHNldCB8fCBHQ0pGTEFHUz0iLWcgLU8yIgorICAgICAgQUNfU1VCU1QoR0NKRkxBR1MpXSldKVtdZG5sCitdKQorCisjIE9sZCBuYW1lOgorQVVfQUxJQVMoW0xUX0FDX1BST0dfR0NKXSwgW0xUX1BST0dfR0NKXSkKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbTFRfQUNfUFJPR19HQ0pdLCBbXSkKKworCisjIExUX1BST0dfUkMKKyMgLS0tLS0tLS0tLQorQUNfREVGVU4oW0xUX1BST0dfUkNdLAorW0FDX0NIRUNLX1RPT0woUkMsIHdpbmRyZXMsKQorXSkKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1JDXSwgW0xUX1BST0dfUkNdKQorZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtMVF9BQ19QUk9HX1JDXSwgW10pCisKKworIyBfTFRfREVDTF9FR1JFUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3QgZ3JlcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9FR1JFUF0sCitbQUNfUkVRVUlSRShbQUNfUFJPR19FR1JFUF0pZG5sCitBQ19SRVFVSVJFKFtBQ19QUk9HX0ZHUkVQXSlkbmwKK3Rlc3QgLXogIiRHUkVQIiAmJiBHUkVQPWdyZXAKK19MVF9ERUNMKFtdLCBbR1JFUF0sIFsxXSwgW0EgZ3JlcCBwcm9ncmFtIHRoYXQgaGFuZGxlcyBsb25nIGxpbmVzXSkKK19MVF9ERUNMKFtdLCBbRUdSRVBdLCBbMV0sIFtBbiBFUkUgbWF0Y2hlcl0pCitfTFRfREVDTChbXSwgW0ZHUkVQXSwgWzFdLCBbQSBsaXRlcmFsIHN0cmluZyBtYXRjaGVyXSkKK2RubCBOb24tYmxlZWRpbmctZWRnZSBhdXRvY29uZiBkb2Vzbid0IHN1YnN0IEdSRVAsIHNvIGRvIGl0IGhlcmUgdG9vCitBQ19TVUJTVChbR1JFUF0pCitdKQorCisKKyMgX0xUX0RFQ0xfT0JKRFVNUAorIyAtLS0tLS0tLS0tLS0tLQorIyBJZiB3ZSBkb24ndCBoYXZlIGEgbmV3IGVub3VnaCBBdXRvY29uZiB0byBjaG9vc2UgdGhlIGJlc3Qgb2JqZHVtcAorIyBhdmFpbGFibGUsIGNob29zZSB0aGUgb25lIGZpcnN0IGluIHRoZSB1c2VyJ3MgUEFUSC4KK200X2RlZnVuKFtfTFRfREVDTF9PQkpEVU1QXSwKK1tBQ19DSEVDS19UT09MKE9CSkRVTVAsIG9iamR1bXAsIGZhbHNlKQordGVzdCAteiAiJE9CSkRVTVAiICYmIE9CSkRVTVA9b2JqZHVtcAorX0xUX0RFQ0woW10sIFtPQkpEVU1QXSwgWzFdLCBbQW4gb2JqZWN0IHN5bWJvbCBkdW1wZXJdKQorQUNfU1VCU1QoW09CSkRVTVBdKQorXSkKKworIyBfTFRfREVDTF9ETExUT09MCisjIC0tLS0tLS0tLS0tLS0tLS0KKyMgRW5zdXJlIERMTFRPT0wgdmFyaWFibGUgaXMgc2V0LgorbTRfZGVmdW4oW19MVF9ERUNMX0RMTFRPT0xdLAorW0FDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCit0ZXN0IC16ICIkRExMVE9PTCIgJiYgRExMVE9PTD1kbGx0b29sCitfTFRfREVDTChbXSwgW0RMTFRPT0xdLCBbMV0sIFtETEwgY3JlYXRpb24gcHJvZ3JhbV0pCitBQ19TVUJTVChbRExMVE9PTF0pCitdKQorCisjIF9MVF9ERUNMX1NFRAorIyAtLS0tLS0tLS0tLS0KKyMgQ2hlY2sgZm9yIGEgZnVsbHktZnVuY3Rpb25hbCBzZWQgcHJvZ3JhbSwgdGhhdCB0cnVuY2F0ZXMKKyMgYXMgZmV3IGNoYXJhY3RlcnMgYXMgcG9zc2libGUuICBQcmVmZXIgR05VIHNlZCBpZiBmb3VuZC4KK200X2RlZnVuKFtfTFRfREVDTF9TRURdLAorW0FDX1BST0dfU0VECit0ZXN0IC16ICIkU0VEIiAmJiBTRUQ9c2VkCitYc2VkPSIkU0VEIC1lIDFzL15YLy8iCitfTFRfREVDTChbXSwgW1NFRF0sIFsxXSwgW0Egc2VkIHByb2dyYW0gdGhhdCBkb2VzIG5vdCB0cnVuY2F0ZSBvdXRwdXRdKQorX0xUX0RFQ0woW10sIFtYc2VkXSwgWyJcJFNFRCAtZSAxcy9eWC8vIl0sCisgICAgW1NlZCB0aGF0IGhlbHBzIHVzIGF2b2lkIGFjY2lkZW50YWxseSB0cmlnZ2VyaW5nIGVjaG8oMSkgb3B0aW9ucyBsaWtlIC1uXSkKK10pIyBfTFRfREVDTF9TRUQKKworbTRfaWZuZGVmKFtBQ19QUk9HX1NFRF0sIFsKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBOT1RFOiBUaGlzIG1hY3JvIGhhcyBiZWVuIHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGludG8gICAjCisjICBHTlUgQXV0b2NvbmYgYXMgQUNfUFJPR19TRUQuICBXaGVuIGl0IGlzIGF2YWlsYWJsZSBpbiAgICMKKyMgIGEgcmVsZWFzZWQgdmVyc2lvbiBvZiBBdXRvY29uZiB3ZSBzaG91bGQgcmVtb3ZlIHRoaXMgICAgIworIyAgbWFjcm8gYW5kIHVzZSBpdCBpbnN0ZWFkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbTRfZGVmdW4oW0FDX1BST0dfU0VEXSwKK1tBQ19NU0dfQ0hFQ0tJTkcoW2ZvciBhIHNlZCB0aGF0IGRvZXMgbm90IHRydW5jYXRlIG91dHB1dF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfcGF0aF9TRUQsCitbIyBMb29wIHRocm91Z2ggdGhlIHVzZXIncyBwYXRoIGFuZCB0ZXN0IGZvciBzZWQgYW5kIGdzZWQuCisjIFRoZW4gdXNlIHRoYXQgbGlzdCBvZiBzZWQncyBhcyBvbmVzIHRvIHRlc3QgZm9yIHRydW5jYXRpb24uCithc19zYXZlX0lGUz0kSUZTOyBJRlM9JFBBVEhfU0VQQVJBVE9SCitmb3IgYXNfZGlyIGluICRQQVRICitkbworICBJRlM9JGFzX3NhdmVfSUZTCisgIHRlc3QgLXogIiRhc19kaXIiICYmIGFzX2Rpcj0uCisgIGZvciBsdF9hY19wcm9nIGluIHNlZCBnc2VkOyBkbworICAgIGZvciBhY19leGVjX2V4dCBpbiAnJyAkYWNfZXhlY3V0YWJsZV9leHRlbnNpb25zOyBkbworICAgICAgaWYgJGFzX2V4ZWN1dGFibGVfcCAiJGFzX2Rpci8kbHRfYWNfcHJvZyRhY19leGVjX2V4dCI7IHRoZW4KKyAgICAgICAgbHRfYWNfc2VkX2xpc3Q9IiRsdF9hY19zZWRfbGlzdCAkYXNfZGlyLyRsdF9hY19wcm9nJGFjX2V4ZWNfZXh0IgorICAgICAgZmkKKyAgICBkb25lCisgIGRvbmUKK2RvbmUKK0lGUz0kYXNfc2F2ZV9JRlMKK2x0X2FjX21heD0wCitsdF9hY19jb3VudD0wCisjIEFkZCAvdXNyL3hwZzQvYmluL3NlZCBhcyBpdCBpcyB0eXBpY2FsbHkgZm91bmQgb24gU29sYXJpcworIyBhbG9uZyB3aXRoIC9iaW4vc2VkIHRoYXQgdHJ1bmNhdGVzIG91dHB1dC4KK2ZvciBsdF9hY19zZWQgaW4gJGx0X2FjX3NlZF9saXN0IC91c3IveHBnNC9iaW4vc2VkOyBkbworICB0ZXN0ICEgLWYgJGx0X2FjX3NlZCAmJiBjb250aW51ZQorICBjYXQgL2Rldi9udWxsID4gY29uZnRlc3QuaW4KKyAgbHRfYWNfY291bnQ9MAorICBlY2hvICRFQ0hPX04gIjAxMjM0NTY3ODkkRUNIT19DIiA+Y29uZnRlc3QuaW4KKyAgIyBDaGVjayBmb3IgR05VIHNlZCBhbmQgc2VsZWN0IGl0IGlmIGl0IGlzIGZvdW5kLgorICBpZiAiJGx0X2FjX3NlZCIgLS12ZXJzaW9uIDI+JjEgPCAvZGV2L251bGwgfCBncmVwICdHTlUnID4gL2Rldi9udWxsOyB0aGVuCisgICAgbHRfY3ZfcGF0aF9TRUQ9JGx0X2FjX3NlZAorICAgIGJyZWFrCisgIGZpCisgIHdoaWxlIHRydWU7IGRvCisgICAgY2F0IGNvbmZ0ZXN0LmluIGNvbmZ0ZXN0LmluID5jb25mdGVzdC50bXAKKyAgICBtdiBjb25mdGVzdC50bXAgY29uZnRlc3QuaW4KKyAgICBjcCBjb25mdGVzdC5pbiBjb25mdGVzdC5ubAorICAgIGVjaG8gPj5jb25mdGVzdC5ubAorICAgICRsdF9hY19zZWQgLWUgJ3MvYSQvLycgPCBjb25mdGVzdC5ubCA+Y29uZnRlc3Qub3V0IHx8IGJyZWFrCisgICAgY21wIC1zIGNvbmZ0ZXN0Lm91dCBjb25mdGVzdC5ubCB8fCBicmVhaworICAgICMgMTAwMDAgY2hhcnMgYXMgaW5wdXQgc2VlbXMgbW9yZSB0aGFuIGVub3VnaAorICAgIHRlc3QgJGx0X2FjX2NvdW50IC1ndCAxMCAmJiBicmVhaworICAgIGx0X2FjX2NvdW50PWBleHByICRsdF9hY19jb3VudCArIDFgCisgICAgaWYgdGVzdCAkbHRfYWNfY291bnQgLWd0ICRsdF9hY19tYXg7IHRoZW4KKyAgICAgIGx0X2FjX21heD0kbHRfYWNfY291bnQKKyAgICAgIGx0X2N2X3BhdGhfU0VEPSRsdF9hY19zZWQKKyAgICBmaQorICBkb25lCitkb25lCitdKQorU0VEPSRsdF9jdl9wYXRoX1NFRAorQUNfU1VCU1QoW1NFRF0pCitBQ19NU0dfUkVTVUxUKFskU0VEXSkKK10pI0FDX1BST0dfU0VECitdKSNtNF9pZm5kZWYKKworIyBPbGQgbmFtZToKK0FVX0FMSUFTKFtMVF9BQ19QUk9HX1NFRF0sIFtBQ19QUk9HX1NFRF0pCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSwgW10pCisKKworIyBfTFRfQ0hFQ0tfU0hFTExfRkVBVFVSRVMKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEZpbmQgb3V0IHdoZXRoZXIgdGhlIHNoZWxsIGlzIEJvdXJuZSBvciBYU0kgY29tcGF0aWJsZSwKKyMgb3IgaGFzIHNvbWUgb3RoZXIgdXNlZnVsIGZlYXR1cmVzLgorbTRfZGVmdW4oW19MVF9DSEVDS19TSEVMTF9GRUFUVVJFU10sCitbQUNfTVNHX0NIRUNLSU5HKFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyBzb21lIFhTSSBjb25zdHJ1Y3RzXSkKKyMgVHJ5IHNvbWUgWFNJIGZlYXR1cmVzCit4c2lfc2hlbGw9bm8KKyggX2x0X2R1bW15PSJhL2IvYyIKKyAgdGVzdCAiJHtfbHRfZHVtbXkjIyovfSwke19sdF9kdW1teSUvKn0sJHtfbHRfZHVtbXkjPz99IiR7X2x0X2R1bW15JSIkX2x0X2R1bW15In0sIFwKKyAgICAgID0gYyxhL2IsYi9jLCBcCisgICAgJiYgZXZhbCAndGVzdCAkKCggMSArIDEgKSkgLWVxIDIgXAorICAgICYmIHRlc3QgIiR7I19sdF9kdW1teX0iIC1lcSA1JyApID4vZGV2L251bGwgMj4mMSBcCisgICYmIHhzaV9zaGVsbD15ZXMKK0FDX01TR19SRVNVTFQoWyR4c2lfc2hlbGxdKQorX0xUX0NPTkZJR19MSUJUT09MX0lOSVQoW3hzaV9zaGVsbD0nJHhzaV9zaGVsbCddKQorCitBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIHNoZWxsIHVuZGVyc3RhbmRzICIrPSJdKQorbHRfc2hlbGxfYXBwZW5kPW5vCisoIGZvbz1iYXI7IHNldCBmb28gYmF6OyBldmFsICIkWzFdKz1cJFsyXSIgJiYgdGVzdCAiJGZvbyIgPSBiYXJiYXogKSBcCisgICAgPi9kZXYvbnVsbCAyPiYxIFwKKyAgJiYgbHRfc2hlbGxfYXBwZW5kPXllcworQUNfTVNHX1JFU1VMVChbJGx0X3NoZWxsX2FwcGVuZF0pCitfTFRfQ09ORklHX0xJQlRPT0xfSU5JVChbbHRfc2hlbGxfYXBwZW5kPSckbHRfc2hlbGxfYXBwZW5kJ10pCisKK2lmICggKE1BSUw9NjA7IHVuc2V0IE1BSUwpIHx8IGV4aXQpID4vZGV2L251bGwgMj4mMTsgdGhlbgorICBsdF91bnNldD11bnNldAorZWxzZQorICBsdF91bnNldD1mYWxzZQorZmkKK19MVF9ERUNMKFtdLCBbbHRfdW5zZXRdLCBbMF0sIFt3aGV0aGVyIHRoZSBzaGVsbCB1bmRlcnN0YW5kcyAidW5zZXQiXSlkbmwKKworIyB0ZXN0IEVCQ0RJQyBvciBBU0NJSQorY2FzZSBgZWNobyBYfHRyIFggJ1wxMDEnYCBpbgorIEEpICMgQVNDSUkgYmFzZWQgc3lzdGVtCisgICAgIyBcbiBpcyBub3QgaW50ZXJwcmV0ZWQgY29ycmVjdGx5IGJ5IFNvbGFyaXMgOCAvdXNyL3VjYi90cgorICBsdF9TUDJOTD0ndHIgXDA0MCBcMDEyJworICBsdF9OTDJTUD0ndHIgXDAxNVwwMTIgXDA0MFwwNDAnCisgIDs7CisgKikgIyBFQkNESUMgYmFzZWQgc3lzdGVtCisgIGx0X1NQMk5MPSd0ciBcMTAwIFxuJworICBsdF9OTDJTUD0ndHIgXHJcbiBcMTAwXDEwMCcKKyAgOzsKK2VzYWMKK19MVF9ERUNMKFtTUDJOTF0sIFtsdF9TUDJOTF0sIFsxXSwgW3R1cm4gc3BhY2VzIGludG8gbmV3bGluZXNdKWRubAorX0xUX0RFQ0woW05MMlNQXSwgW2x0X05MMlNQXSwgWzFdLCBbdHVybiBuZXdsaW5lcyBpbnRvIHNwYWNlc10pZG5sCitdKSMgX0xUX0NIRUNLX1NIRUxMX0ZFQVRVUkVTCisKKworIyBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFIChGVU5DTkFNRSwgUkVQTEFDRU1FTlQtQk9EWSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIEluIGAkY2ZnZmlsZScsIGxvb2sgZm9yIGZ1bmN0aW9uIEZVTkNOQU1FIGRlbGltaXRlZCBieSBgXkZVTkNOQU1FICgpJCcgYW5kCisjICdefSBGVU5DTkFNRSAnLCBhbmQgcmVwbGFjZSBpdHMgYm9keSB3aXRoIFJFUExBQ0VNRU5ULUJPRFkuCittNF9kZWZ1bihbX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRV0sCitbZG5sIHsKK3NlZCAtZSAnL14kMSAoKSQvLC9efSAjICQxIC9jXAorJDEgKClcCit7XAorbTRfYnBhdHN1YnN0cyhbJDJdLCBbJF0sIFtcXF0sIFteXChbCSBdXCldLCBbXFxcMV0pCit9ICMgRXh0ZW5kZWQtc2hlbGwgJDEgaW1wbGVtZW50YXRpb24nICIkY2ZnZmlsZSIgPiAkY2ZnZmlsZS50bXAgXAorICAmJiBtdiAtZiAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiIFwKKyAgICB8fCAocm0gLWYgIiRjZmdmaWxlIiAmJiBjcCAiJGNmZ2ZpbGUudG1wIiAiJGNmZ2ZpbGUiICYmIHJtIC1mICIkY2ZnZmlsZS50bXAiKQordGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK10pCisKKworIyBfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUmVwbGFjZSBleGlzdGluZyBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbnMgb2Ygc2V2ZXJhbCBzaGVsbCBmdW5jdGlvbnMgd2l0aAorIyBlcXVpdmFsZW50IGV4dGVuZGVkIHNoZWxsIGltcGxlbWVudGF0aW9ucyB3aGVyZSB0aG9zZSBmZWF0dXJlcyBhcmUgYXZhaWxhYmxlLi4KK200X2RlZnVuKFtfTFRfUFJPR19SRVBMQUNFX1NIRUxMRk5TXSwKK1tpZiB0ZXN0IHgiJHhzaV9zaGVsbCIgPSB4eWVzOyB0aGVuCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfZGlybmFtZV0sIFtkbmwKKyAgICBjYXNlICR7MX0gaW4KKyAgICAgICovKikgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHsxJS8qfSR7Mn0iIDs7CisgICAgICAqICApIGZ1bmNfZGlybmFtZV9yZXN1bHQ9IiR7M30iIDs7CisgICAgZXNhY10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19iYXNlbmFtZV0sIFtkbmwKKyAgICBmdW5jX2Jhc2VuYW1lX3Jlc3VsdD0iJHsxIyMqL30iXSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2Rpcm5hbWVfYW5kX2Jhc2VuYW1lXSwgW2RubAorICAgIGNhc2UgJHsxfSBpbgorICAgICAgKi8qKSBmdW5jX2Rpcm5hbWVfcmVzdWx0PSIkezElLyp9JHsyfSIgOzsKKyAgICAgICogICkgZnVuY19kaXJuYW1lX3Jlc3VsdD0iJHszfSIgOzsKKyAgICBlc2FjCisgICAgZnVuY19iYXNlbmFtZV9yZXN1bHQ9IiR7MSMjKi99Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zdHJpcG5hbWVdLCBbZG5sCisgICAgIyBwZGtzaCA1LjIuMTQgZG9lcyBub3QgZG8gJHtYJSRZfSBjb3JyZWN0bHkgaWYgYm90aCBYIGFuZCBZIGFyZQorICAgICMgcG9zaXRpb25hbCBwYXJhbWV0ZXJzLCBzbyBhc3NpZ24gb25lIHRvIG9yZGluYXJ5IHBhcmFtZXRlciBmaXJzdC4KKyAgICBmdW5jX3N0cmlwbmFtZV9yZXN1bHQ9JHszfQorICAgIGZ1bmNfc3RyaXBuYW1lX3Jlc3VsdD0ke2Z1bmNfc3RyaXBuYW1lX3Jlc3VsdCMiJHsxfSJ9CisgICAgZnVuY19zdHJpcG5hbWVfcmVzdWx0PSR7ZnVuY19zdHJpcG5hbWVfcmVzdWx0JSIkezJ9In1dKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfc3BsaXRfbG9uZ19vcHRdLCBbZG5sCisgICAgZnVuY19zcGxpdF9sb25nX29wdF9uYW1lPSR7MSUlPSp9CisgICAgZnVuY19zcGxpdF9sb25nX29wdF9hcmc9JHsxIyo9fV0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19zcGxpdF9zaG9ydF9vcHRdLCBbZG5sCisgICAgZnVuY19zcGxpdF9zaG9ydF9vcHRfYXJnPSR7MSM/P30KKyAgICBmdW5jX3NwbGl0X3Nob3J0X29wdF9uYW1lPSR7MSUiJGZ1bmNfc3BsaXRfc2hvcnRfb3B0X2FyZyJ9XSkKKworICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2xvMm9dLCBbZG5sCisgICAgY2FzZSAkezF9IGluCisgICAgICAqLmxvKSBmdW5jX2xvMm9fcmVzdWx0PSR7MSUubG99LiR7b2JqZXh0fSA7OworICAgICAgKikgICAgZnVuY19sbzJvX3Jlc3VsdD0kezF9IDs7CisgICAgZXNhY10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY194Zm9ybV0sIFsgICAgZnVuY194Zm9ybV9yZXN1bHQ9JHsxJS4qfS5sb10pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcml0aF0sIFsgICAgZnVuY19hcml0aF9yZXN1bHQ9JCgoICRbKl0gKSldKQorCisgIF9MVF9QUk9HX0ZVTkNUSU9OX1JFUExBQ0UoW2Z1bmNfbGVuXSwgWyAgICBmdW5jX2xlbl9yZXN1bHQ9JHsjMX1dKQorZmkKKworaWYgdGVzdCB4IiRsdF9zaGVsbF9hcHBlbmQiID0geHllczsgdGhlbgorICBfTFRfUFJPR19GVU5DVElPTl9SRVBMQUNFKFtmdW5jX2FwcGVuZF0sIFsgICAgZXZhbCAiJHsxfSs9XFwkezJ9Il0pCisKKyAgX0xUX1BST0dfRlVOQ1RJT05fUkVQTEFDRShbZnVuY19hcHBlbmRfcXVvdGVkXSwgW2RubAorICAgIGZ1bmNfcXVvdGVfZm9yX2V2YWwgIiR7Mn0iCitkbmwgbTQgZXhwYW5zaW9uIHR1cm5zIFxcXFwgaW50byBcXCwgYW5kIHRoZW4gdGhlIHNoZWxsIGV2YWwgdHVybnMgdGhhdCBpbnRvIFwKKyAgICBldmFsICIkezF9Kz1cXFxcIFxcJGZ1bmNfcXVvdGVfZm9yX2V2YWxfcmVzdWx0Il0pCisKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIHdoZXJlIHBvc3NpYmxlIGJ5IGRpcmVjdCB1c2Ugb2YgJys9JworICBzZWQgLWUgJ3MlZnVuY19hcHBlbmQgXChbW2EtekEtWl9dXVx7MSxcfVwpICIlXDErPSIlZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2Vsc2UKKyAgIyBTYXZlIGEgYGZ1bmNfYXBwZW5kJyBmdW5jdGlvbiBjYWxsIGV2ZW4gd2hlbiAnKz0nIGlzIG5vdCBhdmFpbGFibGUKKyAgc2VkIC1lICdzJWZ1bmNfYXBwZW5kIFwoW1thLXpBLVpfXV1cezEsXH1cKSAiJVwxPSIkXDElZycgJGNmZ2ZpbGUgPiAkY2ZnZmlsZS50bXAgXAorICAgICYmIG12IC1mICIkY2ZnZmlsZS50bXAiICIkY2ZnZmlsZSIgXAorICAgICAgfHwgKHJtIC1mICIkY2ZnZmlsZSIgJiYgY3AgIiRjZmdmaWxlLnRtcCIgIiRjZmdmaWxlIiAmJiBybSAtZiAiJGNmZ2ZpbGUudG1wIikKKyAgdGVzdCAwIC1lcSAkPyB8fCBfbHRfZnVuY3Rpb25fcmVwbGFjZV9mYWlsPToKK2ZpCisKK2lmIHRlc3QgeCIkX2x0X2Z1bmN0aW9uX3JlcGxhY2VfZmFpbCIgPSB4IjoiOyB0aGVuCisgIEFDX01TR19XQVJOKFtVbmFibGUgdG8gc3Vic3RpdHV0ZSBleHRlbmRlZCBzaGVsbCBmdW5jdGlvbnMgaW4gJG9maWxlXSkKK2ZpCitdKQorCisjIF9MVF9QQVRIX0NPTlZFUlNJT05fRlVOQ1RJT05TCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIERldGVybWluZSB3aGljaCBmaWxlIG5hbWUgY29udmVyc2lvbiBmdW5jdGlvbnMgc2hvdWxkIGJlIHVzZWQgYnkKKyMgZnVuY190b19ob3N0X2ZpbGUgKGFuZCwgaW1wbGljaXRseSwgYnkgZnVuY190b19ob3N0X3BhdGgpLiAgVGhlc2UgYXJlIG5lZWRlZAorIyBmb3IgY2VydGFpbiBjcm9zcy1jb21waWxlIGNvbmZpZ3VyYXRpb25zIGFuZCBuYXRpdmUgbWluZ3cuCittNF9kZWZ1bihbX0xUX1BBVEhfQ09OVkVSU0lPTl9GVU5DVElPTlNdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9CVUlMRF0pZG5sCitBQ19NU0dfQ0hFQ0tJTkcoW2hvdyB0byBjb252ZXJ0ICRidWlsZCBmaWxlIG5hbWVzIHRvICRob3N0IGZvcm1hdF0pCitBQ19DQUNIRV9WQUwobHRfY3ZfdG9faG9zdF9maWxlX2NtZCwKK1tjYXNlICRob3N0IGluCisgICotKi1taW5ndyogKQorICAgIGNhc2UgJGJ1aWxkIGluCisgICAgICAqLSotbWluZ3cqICkgIyBhY3R1YWxseSBtc3lzCisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbXN5c190b193MzIKKyAgICAgICAgOzsKKyAgICAgICotKi1jeWd3aW4qICkKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9jeWd3aW5fdG9fdzMyCisgICAgICAgIDs7CisgICAgICAqICkgIyBvdGhlcndpc2UsIGFzc3VtZSAqbml4CisgICAgICAgIGx0X2N2X3RvX2hvc3RfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbml4X3RvX3czMgorICAgICAgICA7OworICAgIGVzYWMKKyAgICA7OworICAqLSotY3lnd2luKiApCisgICAgY2FzZSAkYnVpbGQgaW4KKyAgICAgICotKi1taW5ndyogKSAjIGFjdHVhbGx5IG1zeXMKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9tc3lzX3RvX2N5Z3dpbgorICAgICAgICA7OworICAgICAgKi0qLWN5Z3dpbiogKQorICAgICAgICBsdF9jdl90b19ob3N0X2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX25vb3AKKyAgICAgICAgOzsKKyAgICAgICogKSAjIG90aGVyd2lzZSwgYXNzdW1lICpuaXgKKyAgICAgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9uaXhfdG9fY3lnd2luCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7CisgICogKSAjIHVuaGFuZGxlZCBob3N0cyAoYW5kICJub3JtYWwiIG5hdGl2ZSBidWlsZHMpCisgICAgbHRfY3ZfdG9faG9zdF9maWxlX2NtZD1mdW5jX2NvbnZlcnRfZmlsZV9ub29wCisgICAgOzsKK2VzYWMKK10pCit0b19ob3N0X2ZpbGVfY21kPSRsdF9jdl90b19ob3N0X2ZpbGVfY21kCitBQ19NU0dfUkVTVUxUKFskbHRfY3ZfdG9faG9zdF9maWxlX2NtZF0pCitfTFRfREVDTChbdG9faG9zdF9maWxlX2NtZF0sIFtsdF9jdl90b19ob3N0X2ZpbGVfY21kXSwKKyAgICAgICAgIFswXSwgW2NvbnZlcnQgJGJ1aWxkIGZpbGUgbmFtZXMgdG8gJGhvc3QgZm9ybWF0XSlkbmwKKworQUNfTVNHX0NIRUNLSU5HKFtob3cgdG8gY29udmVydCAkYnVpbGQgZmlsZSBuYW1lcyB0byB0b29sY2hhaW4gZm9ybWF0XSkKK0FDX0NBQ0hFX1ZBTChsdF9jdl90b190b29sX2ZpbGVfY21kLAorWyNhc3N1bWUgb3JkaW5hcnkgY3Jvc3MgdG9vbHMsIG9yIG5hdGl2ZSBidWlsZC4KK2x0X2N2X3RvX3Rvb2xfZmlsZV9jbWQ9ZnVuY19jb252ZXJ0X2ZpbGVfbm9vcAorY2FzZSAkaG9zdCBpbgorICAqLSotbWluZ3cqICkKKyAgICBjYXNlICRidWlsZCBpbgorICAgICAgKi0qLW1pbmd3KiApICMgYWN0dWFsbHkgbXN5cworICAgICAgICBsdF9jdl90b190b29sX2ZpbGVfY21kPWZ1bmNfY29udmVydF9maWxlX21zeXNfdG9fdzMyCisgICAgICAgIDs7CisgICAgZXNhYworICAgIDs7Citlc2FjCitdKQordG9fdG9vbF9maWxlX2NtZD0kbHRfY3ZfdG9fdG9vbF9maWxlX2NtZAorQUNfTVNHX1JFU1VMVChbJGx0X2N2X3RvX3Rvb2xfZmlsZV9jbWRdKQorX0xUX0RFQ0woW3RvX3Rvb2xfZmlsZV9jbWRdLCBbbHRfY3ZfdG9fdG9vbF9maWxlX2NtZF0sCisgICAgICAgICBbMF0sIFtjb252ZXJ0ICRidWlsZCBmaWxlcyB0byB0b29sY2hhaW4gZm9ybWF0XSlkbmwKK10pIyBfTFRfUEFUSF9DT05WRVJTSU9OX0ZVTkNUSU9OUwpkaWZmIC0tZ2l0IGEvbTQvbHRvcHRpb25zLm00IGIvbTQvbHRvcHRpb25zLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3Y2ZkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdG9wdGlvbnMubTQKQEAgLTAsMCArMSwzNjkgQEAKKyMgSGVscGVyIGZ1bmN0aW9ucyBmb3Igb3B0aW9uIGhhbmRsaW5nLiAgICAgICAgICAgICAgICAgICAgLSotIEF1dG9jb25mIC0qLQorIworIyAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNywgMjAwOCwgMjAwOSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sCisjICAgSW5jLgorIyAgIFdyaXR0ZW4gYnkgR2FyeSBWLiBWYXVnaGFuLCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBzZXJpYWwgNyBsdG9wdGlvbnMubTQKKworIyBUaGlzIGlzIHRvIGhlbHAgYWNsb2NhbCBmaW5kIHRoZXNlIG1hY3JvcywgYXMgaXQgY2FuJ3Qgc2VlIG00X2RlZmluZS4KK0FDX0RFRlVOKFtMVE9QVElPTlNfVkVSU0lPTl0sIFttNF9pZihbMV0pXSkKKworCisjIF9MVF9NQU5HTEVfT1BUSU9OKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbX0xUX01BTkdMRV9PUFRJT05dLAorW1tfTFRfT1BUSU9OX11tNF9icGF0c3Vic3QoJDFfXyQyLCBbW15hLXpBLVowLTlfXV0sIFtfXSldKQorCisKKyMgX0xUX1NFVF9PUFRJT04oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBTZXQgb3B0aW9uIE9QVElPTi1OQU1FIGZvciBtYWNybyBNQUNSTy1OQU1FLCBhbmQgaWYgdGhlcmUgaXMgYQorIyBtYXRjaGluZyBoYW5kbGVyIGRlZmluZWQsIGRpc3BhdGNoIHRvIGl0LiAgT3RoZXIgT1BUSU9OLU5BTUVzIGFyZQorIyBzYXZlZCBhcyBhIGZsYWcuCittNF9kZWZpbmUoW19MVF9TRVRfT1BUSU9OXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSkpZG5sCittNF9pZmRlZihfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgICAgICBfTFRfTUFOR0xFX0RFRlVOKFskMV0sIFskMl0pLAorICAgIFttNF93YXJuaW5nKFtVbmtub3duICQxIG9wdGlvbiBgJDInXSldKVtdZG5sCitdKQorCisKKyMgX0xUX0lGX09QVElPTihNQUNSTy1OQU1FLCBPUFRJT04tTkFNRSwgSUYtU0VULCBbSUYtTk9ULVNFVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLVNFVCBpZiBPUFRJT04gaXMgc2V0LCBJRi1OT1QtU0VUIG90aGVyd2lzZS4KK200X2RlZmluZShbX0xUX0lGX09QVElPTl0sCitbbTRfaWZkZWYoX0xUX01BTkdMRV9PUFRJT04oWyQxXSwgWyQyXSksIFskM10sIFskNF0pXSkKKworCisjIF9MVF9VTkxFU1NfT1BUSU9OUyhNQUNSTy1OQU1FLCBPUFRJT04tTElTVCwgSUYtTk9ULVNFVCkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBFeGVjdXRlIElGLU5PVC1TRVQgdW5sZXNzIGFsbCBvcHRpb25zIGluIE9QVElPTi1MSVNUIGZvciBNQUNSTy1OQU1FCisjIGFyZSBzZXQuCittNF9kZWZpbmUoW19MVF9VTkxFU1NfT1BUSU9OU10sCitbbTRfZm9yZWFjaChbX0xUX09wdGlvbl0sIG00X3NwbGl0KG00X25vcm1hbGl6ZShbJDJdKSksCisJICAgIFttNF9pZmRlZihfTFRfTUFOR0xFX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKSwKKwkJICAgICAgW200X2RlZmluZShbJDBfZm91bmRdKV0pXSlbXWRubAorbTRfaWZkZWYoWyQwX2ZvdW5kXSwgW200X3VuZGVmaW5lKFskMF9mb3VuZF0pXSwgWyQzCitdKVtdZG5sCitdKQorCisKKyMgX0xUX1NFVF9PUFRJT05TKE1BQ1JPLU5BTUUsIE9QVElPTi1MSVNUKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIE9QVElPTi1MSVNUIGlzIGEgc3BhY2Utc2VwYXJhdGVkIGxpc3Qgb2YgTGlidG9vbCBvcHRpb25zIGFzc29jaWF0ZWQKKyMgd2l0aCBNQUNSTy1OQU1FLiAgSWYgYW55IE9QVElPTiBoYXMgYSBtYXRjaGluZyBoYW5kbGVyIGRlY2xhcmVkIHdpdGgKKyMgTFRfT1BUSU9OX0RFRklORSwgZGlzcGF0Y2ggdG8gdGhhdCBtYWNybzsgb3RoZXJ3aXNlIGNvbXBsYWluIGFib3V0CisjIHRoZSB1bmtub3duIG9wdGlvbiBhbmQgZXhpdC4KK200X2RlZnVuKFtfTFRfU0VUX09QVElPTlNdLAorWyMgU2V0IG9wdGlvbnMKK200X2ZvcmVhY2goW19MVF9PcHRpb25dLCBtNF9zcGxpdChtNF9ub3JtYWxpemUoWyQyXSkpLAorICAgIFtfTFRfU0VUX09QVElPTihbJDFdLCBfTFRfT3B0aW9uKV0pCisKK200X2lmKFskMV0sW0xUX0lOSVRdLFsKKyAgZG5sCisgIGRubCBTaW1wbHkgc2V0IHNvbWUgZGVmYXVsdCB2YWx1ZXMgKGkuZSBvZmYpIGlmIGJvb2xlYW4gb3B0aW9ucyB3ZXJlIG5vdAorICBkbmwgc3BlY2lmaWVkOgorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49bm8KKyAgXSkKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0sIFtlbmFibGVfd2luMzJfZGxsPW5vCisgIF0pCisgIGRubAorICBkbmwgSWYgbm8gcmVmZXJlbmNlIHdhcyBtYWRlIHRvIHZhcmlvdXMgcGFpcnMgb2Ygb3Bwb3Npbmcgb3B0aW9ucywgdGhlbgorICBkbmwgd2UgcnVuIHRoZSBkZWZhdWx0IG1vZGUgaGFuZGxlciBmb3IgdGhlIHBhaXIuICBGb3IgZXhhbXBsZSwgaWYgbmVpdGhlcgorICBkbmwgYHNoYXJlZCcgbm9yIGBkaXNhYmxlLXNoYXJlZCcgd2FzIHBhc3NlZCwgd2UgZW5hYmxlIGJ1aWxkaW5nIG9mIHNoYXJlZAorICBkbmwgYXJjaGl2ZXMgYnkgZGVmYXVsdDoKKyAgX0xUX1VOTEVTU19PUFRJT05TKFtMVF9JTklUXSwgW3NoYXJlZCBkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRF0pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtzdGF0aWMgZGlzYWJsZS1zdGF0aWNdLCBbX0xUX0VOQUJMRV9TVEFUSUNdKQorICBfTFRfVU5MRVNTX09QVElPTlMoW0xUX0lOSVRdLCBbcGljLW9ubHkgbm8tcGljXSwgW19MVF9XSVRIX1BJQ10pCisgIF9MVF9VTkxFU1NfT1BUSU9OUyhbTFRfSU5JVF0sIFtmYXN0LWluc3RhbGwgZGlzYWJsZS1mYXN0LWluc3RhbGxdLAorICAJCSAgIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0pCisgIF0pCitdKSMgX0xUX1NFVF9PUFRJT05TCisKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMjCisjIyBNYWNyb3MgdG8gaGFuZGxlIExUX0lOSVQgb3B0aW9ucy4gIyMKKyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjIworCisjIF9MVF9NQU5HTEVfREVGVU4oTUFDUk8tTkFNRSwgT1BUSU9OLU5BTUUpCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW19MVF9NQU5HTEVfREVGVU5dLAorW1tfTFRfT1BUSU9OX0RFRlVOX11tNF9icGF0c3Vic3QobTRfdG91cHBlcihbJDFfXyQyXSksIFtbXkEtWjAtOV9dXSwgW19dKV0pCisKKworIyBMVF9PUFRJT05fREVGSU5FKE1BQ1JPLU5BTUUsIE9QVElPTi1OQU1FLCBDT0RFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtMVF9PUFRJT05fREVGSU5FXSwKK1ttNF9kZWZpbmUoX0xUX01BTkdMRV9ERUZVTihbJDFdLCBbJDJdKSwgWyQzXSlbXWRubAorXSkjIExUX09QVElPTl9ERUZJTkUKKworCisjIGRsb3BlbgorIyAtLS0tLS0KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbZGxvcGVuXSwgW2VuYWJsZV9kbG9wZW49eWVzCitdKQorCitBVV9ERUZVTihbQUNfTElCVE9PTF9ETE9QRU5dLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW2Rsb3Blbl0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgZGxvcGVuJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfRExPUEVOXSwgW10pCisKKworIyB3aW4zMi1kbGwKKyMgLS0tLS0tLS0tCisjIERlY2xhcmUgcGFja2FnZSBzdXBwb3J0IGZvciBidWlsZGluZyB3aW4zMiBkbGwncy4KK0xUX09QVElPTl9ERUZJTkUoW0xUX0lOSVRdLCBbd2luMzItZGxsXSwKK1tlbmFibGVfd2luMzJfZGxsPXllcworCitjYXNlICRob3N0IGluCisqLSotY3lnd2luKiB8ICotKi1taW5ndyogfCAqLSotcHczMiogfCAqLSotY2VnY2MqKQorICBBQ19DSEVDS19UT09MKEFTLCBhcywgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woRExMVE9PTCwgZGxsdG9vbCwgZmFsc2UpCisgIEFDX0NIRUNLX1RPT0woT0JKRFVNUCwgb2JqZHVtcCwgZmFsc2UpCisgIDs7Citlc2FjCisKK3Rlc3QgLXogIiRBUyIgJiYgQVM9YXMKK19MVF9ERUNMKFtdLCBbQVNdLCAgICAgIFsxXSwgW0Fzc2VtYmxlciBwcm9ncmFtXSlkbmwKKwordGVzdCAteiAiJERMTFRPT0wiICYmIERMTFRPT0w9ZGxsdG9vbAorX0xUX0RFQ0woW10sIFtETExUT09MXSwgWzFdLCBbRExMIGNyZWF0aW9uIHByb2dyYW1dKWRubAorCit0ZXN0IC16ICIkT0JKRFVNUCIgJiYgT0JKRFVNUD1vYmpkdW1wCitfTFRfREVDTChbXSwgW09CSkRVTVBdLCBbMV0sIFtPYmplY3QgZHVtcGVyIHByb2dyYW1dKWRubAorXSkjIHdpbjMyLWRsbAorCitBVV9ERUZVTihbQUNfTElCVE9PTF9XSU4zMl9ETExdLAorW0FDX1JFUVVJUkUoW0FDX0NBTk9OSUNBTF9IT1NUXSlkbmwKK19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3dpbjMyLWRsbF0pCitBQ19ESUFHTk9TRShbb2Jzb2xldGVdLAorWyQwOiBSZW1vdmUgdGhpcyB3YXJuaW5nIGFuZCB0aGUgY2FsbCB0byBfTFRfU0VUX09QVElPTiB3aGVuIHlvdQorcHV0IHRoZSBgd2luMzItZGxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0xJQlRPT0xfV0lOMzJfRExMXSwgW10pCisKKworIyBfTFRfRU5BQkxFX1NIQVJFRChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zaGFyZWQgZmxhZywgYW5kIHN1cHBvcnRzIHRoZSBgc2hhcmVkJyBhbmQKKyMgYGRpc2FibGUtc2hhcmVkJyBMVF9JTklUIG9wdGlvbnMuCisjIERFRkFVTFQgaXMgZWl0aGVyIGB5ZXMnIG9yIGBubycuICBJZiBvbWl0dGVkLCBpdCBkZWZhdWx0cyB0byBgeWVzJy4KK200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURdLAorW200X2RlZmluZShbX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVF0sIFttNF9pZigkMSwgbm8sIG5vLCB5ZXMpXSlkbmwKK0FDX0FSR19FTkFCTEUoW3NoYXJlZF0sCisgICAgW0FTX0hFTFBfU1RSSU5HKFstLWVuYWJsZS1zaGFyZWRAPDpAPVBLR1NAOj5AXSwKKwlbYnVpbGQgc2hhcmVkIGxpYnJhcmllcyBAPDpAZGVmYXVsdD1dX0xUX0VOQUJMRV9TSEFSRURfREVGQVVMVFtAOj5AXSldLAorICAgIFtwPSR7UEFDS0FHRS1kZWZhdWx0fQorICAgIGNhc2UgJGVuYWJsZXZhbCBpbgorICAgIHllcykgZW5hYmxlX3NoYXJlZD15ZXMgOzsKKyAgICBubykgZW5hYmxlX3NoYXJlZD1ubyA7OworICAgICopCisgICAgICBlbmFibGVfc2hhcmVkPW5vCisgICAgICAjIExvb2sgYXQgdGhlIGFyZ3VtZW50IHdlIGdvdC4gIFdlIHVzZSBhbGwgdGhlIGNvbW1vbiBsaXN0IHNlcGFyYXRvcnMuCisgICAgICBsdF9zYXZlX2lmcz0iJElGUyI7IElGUz0iJHtJRlN9JFBBVEhfU0VQQVJBVE9SLCIKKyAgICAgIGZvciBwa2cgaW4gJGVuYWJsZXZhbDsgZG8KKwlJRlM9IiRsdF9zYXZlX2lmcyIKKwlpZiB0ZXN0ICJYJHBrZyIgPSAiWCRwIjsgdGhlbgorCSAgZW5hYmxlX3NoYXJlZD15ZXMKKwlmaQorICAgICAgZG9uZQorICAgICAgSUZTPSIkbHRfc2F2ZV9pZnMiCisgICAgICA7OworICAgIGVzYWNdLAorICAgIFtlbmFibGVfc2hhcmVkPV1fTFRfRU5BQkxFX1NIQVJFRF9ERUZBVUxUKQorCisgICAgX0xUX0RFQ0woW2J1aWxkX2xpYnRvb2xfbGlic10sIFtlbmFibGVfc2hhcmVkXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzaGFyZWQgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NIQVJFRAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3NoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXNoYXJlZF0sIFtfTFRfRU5BQkxFX1NIQVJFRChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TSEFSRURdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc2hhcmVkXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NIQVJFRF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zaGFyZWRdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TSEFSRURdLCBbQUNfRU5BQkxFX1NIQVJFRCgkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU0hBUkVEXSwgW0FDX0RJU0FCTEVfU0hBUkVEKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NIQVJFRF0sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NIQVJFRF0sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX1NUQVRJQyhbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1zdGF0aWMgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBzdGF0aWMnIGFuZAorIyBgZGlzYWJsZS1zdGF0aWMnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ10sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbc3RhdGljXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLXN0YXRpY0A8OkA9UEtHU0A6PkBdLAorCVtidWlsZCBzdGF0aWMgbGlicmFyaWVzIEA8OkBkZWZhdWx0PV1fTFRfRU5BQkxFX1NUQVRJQ19ERUZBVUxUW0A6PkBdKV0sCisgICAgW3A9JHtQQUNLQUdFLWRlZmF1bHR9CisgICAgY2FzZSAkZW5hYmxldmFsIGluCisgICAgeWVzKSBlbmFibGVfc3RhdGljPXllcyA7OworICAgIG5vKSBlbmFibGVfc3RhdGljPW5vIDs7CisgICAgKikKKyAgICAgZW5hYmxlX3N0YXRpYz1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9zdGF0aWM9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX3N0YXRpYz1dX0xUX0VOQUJMRV9TVEFUSUNfREVGQVVMVCkKKworICAgIF9MVF9ERUNMKFtidWlsZF9vbGRfbGlic10sIFtlbmFibGVfc3RhdGljXSwgWzBdLAorCVtXaGV0aGVyIG9yIG5vdCB0byBidWlsZCBzdGF0aWMgbGlicmFyaWVzXSkKK10pIyBfTFRfRU5BQkxFX1NUQVRJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3N0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLXN0YXRpY10sIFtfTFRfRU5BQkxFX1NUQVRJQyhbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQUNfREVGVU4oW0FDX0VOQUJMRV9TVEFUSUNdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbc3RhdGljXSkKK10pCisKK0FDX0RFRlVOKFtBQ19ESVNBQkxFX1NUQVRJQ10sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1zdGF0aWNdKQorXSkKKworQVVfREVGVU4oW0FNX0VOQUJMRV9TVEFUSUNdLCBbQUNfRU5BQkxFX1NUQVRJQygkQCldKQorQVVfREVGVU4oW0FNX0RJU0FCTEVfU1RBVElDXSwgW0FDX0RJU0FCTEVfU1RBVElDKCRAKV0pCisKK2RubCBhY2xvY2FsLTEuNCBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eToKK2RubCBBQ19ERUZVTihbQU1fRU5BQkxFX1NUQVRJQ10sIFtdKQorZG5sIEFDX0RFRlVOKFtBTV9ESVNBQkxFX1NUQVRJQ10sIFtdKQorCisKKworIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbREVGQVVMVF0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgaW1wbGVtZW50IHRoZSAtLWVuYWJsZS1mYXN0LWluc3RhbGwgZmxhZywgYW5kIHN1cHBvcnQgdGhlIGBmYXN0LWluc3RhbGwnCisjIGFuZCBgZGlzYWJsZS1mYXN0LWluc3RhbGwnIExUX0lOSVQgb3B0aW9ucy4KKyMgREVGQVVMVCBpcyBlaXRoZXIgYHllcycgb3IgYG5vJy4gIElmIG9taXR0ZWQsIGl0IGRlZmF1bHRzIHRvIGB5ZXMnLgorbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF0sCitbbTRfZGVmaW5lKFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTF9ERUZBVUxUXSwgW200X2lmKCQxLCBubywgbm8sIHllcyldKWRubAorQUNfQVJHX0VOQUJMRShbZmFzdC1pbnN0YWxsXSwKKyAgICBbQVNfSEVMUF9TVFJJTkcoWy0tZW5hYmxlLWZhc3QtaW5zdGFsbEA8OkA9UEtHU0A6PkBdLAorICAgIFtvcHRpbWl6ZSBmb3IgZmFzdCBpbnN0YWxsYXRpb24gQDw6QGRlZmF1bHQ9XV9MVF9FTkFCTEVfRkFTVF9JTlNUQUxMX0RFRkFVTFRbQDo+QF0pXSwKKyAgICBbcD0ke1BBQ0tBR0UtZGVmYXVsdH0KKyAgICBjYXNlICRlbmFibGV2YWwgaW4KKyAgICB5ZXMpIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzIDs7CisgICAgbm8pIGVuYWJsZV9mYXN0X2luc3RhbGw9bm8gOzsKKyAgICAqKQorICAgICAgZW5hYmxlX2Zhc3RfaW5zdGFsbD1ubworICAgICAgIyBMb29rIGF0IHRoZSBhcmd1bWVudCB3ZSBnb3QuICBXZSB1c2UgYWxsIHRoZSBjb21tb24gbGlzdCBzZXBhcmF0b3JzLgorICAgICAgbHRfc2F2ZV9pZnM9IiRJRlMiOyBJRlM9IiR7SUZTfSRQQVRIX1NFUEFSQVRPUiwiCisgICAgICBmb3IgcGtnIGluICRlbmFibGV2YWw7IGRvCisJSUZTPSIkbHRfc2F2ZV9pZnMiCisJaWYgdGVzdCAiWCRwa2ciID0gIlgkcCI7IHRoZW4KKwkgIGVuYWJsZV9mYXN0X2luc3RhbGw9eWVzCisJZmkKKyAgICAgIGRvbmUKKyAgICAgIElGUz0iJGx0X3NhdmVfaWZzIgorICAgICAgOzsKKyAgICBlc2FjXSwKKyAgICBbZW5hYmxlX2Zhc3RfaW5zdGFsbD1dX0xUX0VOQUJMRV9GQVNUX0lOU1RBTExfREVGQVVMVCkKKworX0xUX0RFQ0woW2Zhc3RfaW5zdGFsbF0sIFtlbmFibGVfZmFzdF9pbnN0YWxsXSwgWzBdLAorCSBbV2hldGhlciBvciBub3QgdG8gb3B0aW1pemUgZm9yIGZhc3QgaW5zdGFsbGF0aW9uXSlkbmwKK10pIyBfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTAorCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW2Zhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtkaXNhYmxlLWZhc3QtaW5zdGFsbF0sIFtfTFRfRU5BQkxFX0ZBU1RfSU5TVEFMTChbbm9dKV0pCisKKyMgT2xkIG5hbWVzOgorQVVfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgbTRfaWYoWyQxXSwgW25vXSwgW2Rpc2FibGUtXSlbZmFzdC1pbnN0YWxsXSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91IHB1dAordGhlIGBmYXN0LWluc3RhbGwnIG9wdGlvbiBpbnRvIExUX0lOSVQncyBmaXJzdCBwYXJhbWV0ZXIuXSkKK10pCisKK0FVX0RFRlVOKFtBQ19ESVNBQkxFX0ZBU1RfSU5TVEFMTF0sCitbX0xUX1NFVF9PUFRJT04oW0xUX0lOSVRdLCBbZGlzYWJsZS1mYXN0LWluc3RhbGxdKQorQUNfRElBR05PU0UoW29ic29sZXRlXSwKK1skMDogUmVtb3ZlIHRoaXMgd2FybmluZyBhbmQgdGhlIGNhbGwgdG8gX0xUX1NFVF9PUFRJT04gd2hlbiB5b3UgcHV0Cit0aGUgYGRpc2FibGUtZmFzdC1pbnN0YWxsJyBvcHRpb24gaW50byBMVF9JTklUJ3MgZmlyc3QgcGFyYW1ldGVyLl0pCitdKQorCitkbmwgYWNsb2NhbC0xLjQgYmFja3dhcmRzIGNvbXBhdGliaWxpdHk6CitkbmwgQUNfREVGVU4oW0FDX0VOQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKK2RubCBBQ19ERUZVTihbQU1fRElTQUJMRV9GQVNUX0lOU1RBTExdLCBbXSkKKworCisjIF9MVF9XSVRIX1BJQyhbTU9ERV0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIGltcGxlbWVudCB0aGUgLS13aXRoLXBpYyBmbGFnLCBhbmQgc3VwcG9ydCB0aGUgYHBpYy1vbmx5JyBhbmQgYG5vLXBpYycKKyMgTFRfSU5JVCBvcHRpb25zLgorIyBNT0RFIGlzIGVpdGhlciBgeWVzJyBvciBgbm8nLiAgSWYgb21pdHRlZCwgaXQgZGVmYXVsdHMgdG8gYGJvdGgnLgorbTRfZGVmaW5lKFtfTFRfV0lUSF9QSUNdLAorW0FDX0FSR19XSVRIKFtwaWNdLAorICAgIFtBU19IRUxQX1NUUklORyhbLS13aXRoLXBpY10sCisJW3RyeSB0byB1c2Ugb25seSBQSUMvbm9uLVBJQyBvYmplY3RzIEA8OkBkZWZhdWx0PXVzZSBib3RoQDo+QF0pXSwKKyAgICBbcGljX21vZGU9IiR3aXRodmFsIl0sCisgICAgW3BpY19tb2RlPWRlZmF1bHRdKQorCit0ZXN0IC16ICIkcGljX21vZGUiICYmIHBpY19tb2RlPW00X2RlZmF1bHQoWyQxXSwgW2RlZmF1bHRdKQorCitfTFRfREVDTChbXSwgW3BpY19tb2RlXSwgWzBdLCBbV2hhdCB0eXBlIG9mIG9iamVjdHMgdG8gYnVpbGRdKWRubAorXSkjIF9MVF9XSVRIX1BJQworCitMVF9PUFRJT05fREVGSU5FKFtMVF9JTklUXSwgW3BpYy1vbmx5XSwgW19MVF9XSVRIX1BJQyhbeWVzXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRfSU5JVF0sIFtuby1waWNdLCBbX0xUX1dJVEhfUElDKFtub10pXSkKKworIyBPbGQgbmFtZToKK0FVX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLAorW19MVF9TRVRfT1BUSU9OKFtMVF9JTklUXSwgW3BpYy1vbmx5XSkKK0FDX0RJQUdOT1NFKFtvYnNvbGV0ZV0sCitbJDA6IFJlbW92ZSB0aGlzIHdhcm5pbmcgYW5kIHRoZSBjYWxsIHRvIF9MVF9TRVRfT1BUSU9OIHdoZW4geW91CitwdXQgdGhlIGBwaWMtb25seScgb3B0aW9uIGludG8gTFRfSU5JVCdzIGZpcnN0IHBhcmFtZXRlci5dKQorXSkKKworZG5sIGFjbG9jYWwtMS40IGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5OgorZG5sIEFDX0RFRlVOKFtBQ19MSUJUT09MX1BJQ01PREVdLCBbXSkKKworIyMgLS0tLS0tLS0tLS0tLS0tLS0gIyMKKyMjIExURExfSU5JVCBPcHRpb25zICMjCisjIyAtLS0tLS0tLS0tLS0tLS0tLSAjIworCittNF9kZWZpbmUoW19MVERMX01PREVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtub25yZWN1cnNpdmVdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtub25yZWN1cnNpdmVdKV0pCitMVF9PUFRJT05fREVGSU5FKFtMVERMX0lOSVRdLCBbcmVjdXJzaXZlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX01PREVdLCBbcmVjdXJzaXZlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW3N1YnByb2plY3RdLAorCQkgW200X2RlZmluZShbX0xURExfTU9ERV0sIFtzdWJwcm9qZWN0XSldKQorCittNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbXSkKK0xUX09QVElPTl9ERUZJTkUoW0xURExfSU5JVF0sIFtpbnN0YWxsYWJsZV0sCisJCSBbbTRfZGVmaW5lKFtfTFRETF9UWVBFXSwgW2luc3RhbGxhYmxlXSldKQorTFRfT1BUSU9OX0RFRklORShbTFRETF9JTklUXSwgW2NvbnZlbmllbmNlXSwKKwkJIFttNF9kZWZpbmUoW19MVERMX1RZUEVdLCBbY29udmVuaWVuY2VdKV0pCmRpZmYgLS1naXQgYS9tNC9sdHN1Z2FyLm00IGIvbTQvbHRzdWdhci5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDAwYTA1Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbHRzdWdhci5tNApAQCAtMCwwICsxLDEyMyBAQAorIyBsdHN1Z2FyLm00IC0tIGxpYnRvb2wgbTQgYmFzZSBsYXllci4gICAgICAgICAgICAgICAgICAgICAgICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorIyBXcml0dGVuIGJ5IEdhcnkgVi4gVmF1Z2hhbiwgMjAwNAorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDYgbHRzdWdhci5tNAorCisjIFRoaXMgaXMgdG8gaGVscCBhY2xvY2FsIGZpbmQgdGhlc2UgbWFjcm9zLCBhcyBpdCBjYW4ndCBzZWUgbTRfZGVmaW5lLgorQUNfREVGVU4oW0xUU1VHQVJfVkVSU0lPTl0sIFttNF9pZihbMC4xXSldKQorCisKKyMgbHRfam9pbihTRVAsIEFSRzEsIFtBUkcyLi4uXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgUHJvZHVjZSBBUkcxU0VQQVJHMi4uLlNFUEFSR24sIG9taXR0aW5nIFtdIGFyZ3VtZW50cyBhbmQgdGhlaXIKKyMgYXNzb2NpYXRlZCBzZXBhcmF0b3IuCisjIE5lZWRlZCB1bnRpbCB3ZSBjYW4gcmVseSBvbiBtNF9qb2luIGZyb20gQXV0b2NvbmYgMi42Miwgc2luY2UgYWxsIGVhcmxpZXIKKyMgdmVyc2lvbnMgaW4gbTRzdWdhciBoYWQgYnVncy4KK200X2RlZmluZShbbHRfam9pbl0sCitbbTRfaWYoWyQjXSwgWzFdLCBbXSwKKyAgICAgICBbJCNdLCBbMl0sIFtbJDJdXSwKKyAgICAgICBbbTRfaWYoWyQyXSwgW10sIFtdLCBbWyQyXV9dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorbTRfZGVmaW5lKFtfbHRfam9pbl0sCitbbTRfaWYoWyQjJDJdLCBbMl0sIFtdLAorICAgICAgIFttNF9pZihbJDJdLCBbXSwgW10sIFtbJDEkMl1dKSQwKFskMV0sIG00X3NoaWZ0KG00X3NoaWZ0KCRAKSkpXSldKQorCisKKyMgbHRfY2FyKExJU1QpCisjIGx0X2NkcihMSVNUKQorIyAtLS0tLS0tLS0tLS0KKyMgTWFuaXB1bGF0ZSBtNCBsaXN0cy4KKyMgVGhlc2UgbWFjcm9zIGFyZSBuZWNlc3NhcnkgYXMgbG9uZyBhcyB3aWxsIHN0aWxsIG5lZWQgdG8gc3VwcG9ydAorIyBBdXRvY29uZi0yLjU5IHdoaWNoIHF1b3RlcyBkaWZmZXJlbnRseS4KK200X2RlZmluZShbbHRfY2FyXSwgW1skMV1dKQorbTRfZGVmaW5lKFtsdF9jZHJdLAorW200X2lmKFskI10sIDAsIFttNF9mYXRhbChbJDA6IGNhbm5vdCBiZSBjYWxsZWQgd2l0aG91dCBhcmd1bWVudHNdKV0sCisgICAgICAgWyQjXSwgMSwgW10sCisgICAgICAgW200X2RxdW90ZShtNF9zaGlmdCgkQCkpXSldKQorbTRfZGVmaW5lKFtsdF91bnF1b3RlXSwgJDEpCisKKworIyBsdF9hcHBlbmQoTUFDUk8tTkFNRSwgU1RSSU5HLCBbU0VQQVJBVE9SXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFJlZGVmaW5lIE1BQ1JPLU5BTUUgdG8gaG9sZCBpdHMgZm9ybWVyIGNvbnRlbnQgcGx1cyBgU0VQQVJBVE9SJ2BTVFJJTkcnLgorIyBOb3RlIHRoYXQgbmVpdGhlciBTRVBBUkFUT1Igbm9yIFNUUklORyBhcmUgZXhwYW5kZWQ7IHRoZXkgYXJlIGFwcGVuZGVkCisjIHRvIE1BQ1JPLU5BTUUgYXMgaXMgKGxlYXZpbmcgdGhlIGV4cGFuc2lvbiBmb3Igd2hlbiBNQUNSTy1OQU1FIGlzIGludm9rZWQpLgorIyBObyBTRVBBUkFUT1IgaXMgb3V0cHV0IGlmIE1BQ1JPLU5BTUUgd2FzIHByZXZpb3VzbHkgdW5kZWZpbmVkIChkaWZmZXJlbnQKKyMgdGhhbiBkZWZpbmVkIGFuZCBlbXB0eSkuCisjCisjIFRoaXMgbWFjcm8gaXMgbmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIEF1dG9jb25mIDIuNjIsIHNpbmNlIGVhcmxpZXIKKyMgdmVyc2lvbnMgb2YgbTRzdWdhciBtaXN0YWtlbmx5IGV4cGFuZGVkIFNFUEFSQVRPUiBidXQgbm90IFNUUklORy4KK200X2RlZmluZShbbHRfYXBwZW5kXSwKK1ttNF9kZWZpbmUoWyQxXSwKKwkgICBtNF9pZmRlZihbJDFdLCBbbTRfZGVmbihbJDFdKVskM11dKVskMl0pXSkKKworCisKKyMgbHRfY29tYmluZShTRVAsIFBSRUZJWC1MSVNULCBJTkZJWCwgU1VGRklYMSwgW1NVRkZJWDIuLi5dKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIFByb2R1Y2UgYSBTRVAgZGVsaW1pdGVkIGxpc3Qgb2YgYWxsIHBhaXJlZCBjb21iaW5hdGlvbnMgb2YgZWxlbWVudHMgb2YKKyMgUFJFRklYLUxJU1Qgd2l0aCBTVUZGSVgxIHRocm91Z2ggU1VGRklYbi4gIEVhY2ggZWxlbWVudCBvZiB0aGUgbGlzdAorIyBoYXMgdGhlIGZvcm0gUFJFRklYbUlORklYU1VGRklYbi4KKyMgTmVlZGVkIHVudGlsIHdlIGNhbiByZWx5IG9uIG00X2NvbWJpbmUgYWRkZWQgaW4gQXV0b2NvbmYgMi42Mi4KK200X2RlZmluZShbbHRfY29tYmluZV0sCitbbTRfaWYobTRfZXZhbChbJCMgPiAzXSksIFsxXSwKKyAgICAgICBbbTRfcHVzaGRlZihbX0x0X3NlcF0sIFttNF9kZWZpbmUoW19MdF9zZXBdLCBtNF9kZWZuKFtsdF9jYXJdKSldKV1dZG5sCitbW200X2ZvcmVhY2goW19MdF9wcmVmaXhdLCBbJDJdLAorCSAgICAgW200X2ZvcmVhY2goW19MdF9zdWZmaXhdLAorCQldbTRfZHF1b3RlKG00X2RxdW90ZShtNF9zaGlmdChtNF9zaGlmdChtNF9zaGlmdCgkQCkpKSkpWywKKwlbX0x0X3NlcChbJDFdKVtdbTRfZGVmbihbX0x0X3ByZWZpeF0pWyQzXW00X2RlZm4oW19MdF9zdWZmaXhdKV0pXSldKV0pCisKKworIyBsdF9pZl9hcHBlbmRfdW5pcShNQUNSTy1OQU1FLCBWQVJOQU1FLCBbU0VQQVJBVE9SXSwgW1VOSVFdLCBbTk9ULVVOSVFdKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIyBJZmYgTUFDUk8tTkFNRSBkb2VzIG5vdCB5ZXQgY29udGFpbiBWQVJOQU1FLCB0aGVuIGFwcGVuZCBpdCAoZGVsaW1pdGVkCisjIGJ5IFNFUEFSQVRPUiBpZiBzdXBwbGllZCkgYW5kIGV4cGFuZCBVTklRLCBlbHNlIE5PVC1VTklRLgorbTRfZGVmaW5lKFtsdF9pZl9hcHBlbmRfdW5pcV0sCitbbTRfaWZkZWYoWyQxXSwKKwkgIFttNF9pZihtNF9pbmRleChbJDNdbTRfZGVmbihbJDFdKVskM10sIFskMyQyJDNdKSwgWy0xXSwKKwkJIFtsdF9hcHBlbmQoWyQxXSwgWyQyXSwgWyQzXSkkNF0sCisJCSBbJDVdKV0sCisJICBbbHRfYXBwZW5kKFskMV0sIFskMl0sIFskM10pJDRdKV0pCisKKworIyBsdF9kaWN0X2FkZChESUNULCBLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF0sCitbbTRfZGVmaW5lKFskMSgkMildLCBbJDNdKV0pCisKKworIyBsdF9kaWN0X2FkZF9zdWJrZXkoRElDVCwgS0VZLCBTVUJLRVksIFZBTFVFKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorbTRfZGVmaW5lKFtsdF9kaWN0X2FkZF9zdWJrZXldLAorW200X2RlZmluZShbJDEoJDI6JDMpXSwgWyQ0XSldKQorCisKKyMgbHRfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldKQorIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmV0Y2hdLAorW200X2lmdmFsKFskM10sCisJbTRfaWZkZWYoWyQxKCQyOiQzKV0sIFttNF9kZWZuKFskMSgkMjokMyldKV0pLAorICAgIG00X2lmZGVmKFskMSgkMildLCBbbTRfZGVmbihbJDEoJDIpXSldKSldKQorCisKKyMgbHRfaWZfZGljdF9mZXRjaChESUNULCBLRVksIFtTVUJLRVldLCBWQUxVRSwgSUYtVFJVRSwgW0lGLUZBTFNFXSkKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK200X2RlZmluZShbbHRfaWZfZGljdF9mZXRjaF0sCitbbTRfaWYobHRfZGljdF9mZXRjaChbJDFdLCBbJDJdLCBbJDNdKSwgWyQ0XSwKKwlbJDVdLAorICAgIFskNl0pXSkKKworCisjIGx0X2RpY3RfZmlsdGVyKERJQ1QsIFtTVUJLRVldLCBWQUxVRSwgW1NFUEFSQVRPUl0sIEtFWSwgWy4uLl0pCisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCittNF9kZWZpbmUoW2x0X2RpY3RfZmlsdGVyXSwKK1ttNF9pZihbJDVdLCBbXSwgW10sCisgIFtsdF9qb2luKG00X3F1b3RlKG00X2RlZmF1bHQoWyQ0XSwgW1ssIF1dKSksCisgICAgICAgICAgIGx0X3VucXVvdGUobTRfc3BsaXQobTRfbm9ybWFsaXplKG00X2ZvcmVhY2goX0x0X2tleSwgbHRfY2FyKFttNF9zaGlmdG4oNCwgJEApXSksCisJCSAgICAgIFtsdF9pZl9kaWN0X2ZldGNoKFskMV0sIF9MdF9rZXksIFskMl0sIFskM10sIFtfTHRfa2V5IF0pXSkpKSkpXSlbXWRubAorXSkKZGlmZiAtLWdpdCBhL200L2x0dmVyc2lvbi5tNCBiL200L2x0dmVyc2lvbi5tNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YzdiNWQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbTQvbHR2ZXJzaW9uLm00CkBAIC0wLDAgKzEsMjMgQEAKKyMgbHR2ZXJzaW9uLm00IC0tIHZlcnNpb24gbnVtYmVycwkJCS0qLSBBdXRvY29uZiAtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0CisjCisjIFRoaXMgZmlsZSBpcyBmcmVlIHNvZnR3YXJlOyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGdpdmVzCisjIHVubGltaXRlZCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kL29yIGRpc3RyaWJ1dGUgaXQsIHdpdGggb3Igd2l0aG91dAorIyBtb2RpZmljYXRpb25zLCBhcyBsb25nIGFzIHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZC4KKworIyBAY29uZmlndXJlX2lucHV0QAorCisjIHNlcmlhbCAzMjkzIGx0dmVyc2lvbi5tNAorIyBUaGlzIGZpbGUgaXMgcGFydCBvZiBHTlUgTGlidG9vbAorCittNF9kZWZpbmUoW0xUX1BBQ0tBR0VfVkVSU0lPTl0sIFsyLjRdKQorbTRfZGVmaW5lKFtMVF9QQUNLQUdFX1JFVklTSU9OXSwgWzEuMzI5M10pCisKK0FDX0RFRlVOKFtMVFZFUlNJT05fVkVSU0lPTl0sCitbbWFjcm9fdmVyc2lvbj0nMi40JworbWFjcm9fcmV2aXNpb249JzEuMzI5MycKK19MVF9ERUNMKCwgbWFjcm9fdmVyc2lvbiwgMCwgW1doaWNoIHJlbGVhc2Ugb2YgbGlidG9vbC5tNCB3YXMgdXNlZD9dKQorX0xUX0RFQ0woLCBtYWNyb19yZXZpc2lvbiwgMCkKK10pCmRpZmYgLS1naXQgYS9tNC9sdH5vYnNvbGV0ZS5tNCBiL200L2x0fm9ic29sZXRlLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NzNkYTkKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9sdH5vYnNvbGV0ZS5tNApAQCAtMCwwICsxLDk4IEBACisjIGx0fm9ic29sZXRlLm00IC0tIGFjbG9jYWwgc2F0aXNmeWluZyBvYnNvbGV0ZSBkZWZpbml0aW9ucy4gICAgLSotQXV0b2NvbmYtKi0KKyMKKyMgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIwMDcsIDIwMDkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisjICAgV3JpdHRlbiBieSBTY290dCBKYW1lcyBSZW1uYW50LCAyMDA0LgorIworIyBUaGlzIGZpbGUgaXMgZnJlZSBzb2Z0d2FyZTsgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcworIyB1bmxpbWl0ZWQgcGVybWlzc2lvbiB0byBjb3B5IGFuZC9vciBkaXN0cmlidXRlIGl0LCB3aXRoIG9yIHdpdGhvdXQKKyMgbW9kaWZpY2F0aW9ucywgYXMgbG9uZyBhcyB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQuCisKKyMgc2VyaWFsIDUgbHR+b2Jzb2xldGUubTQKKworIyBUaGVzZSBleGlzdCBlbnRpcmVseSB0byBmb29sIGFjbG9jYWwgd2hlbiBib290c3RyYXBwaW5nIGxpYnRvb2wuCisjCisjIEluIHRoZSBwYXN0IGxpYnRvb2wubTQgaGFzIHByb3ZpZGVkIG1hY3JvcyB2aWEgQUNfREVGVU4gKG9yIEFVX0RFRlVOKQorIyB3aGljaCBoYXZlIGxhdGVyIGJlZW4gY2hhbmdlZCB0byBtNF9kZWZpbmUgYXMgdGhleSBhcmVuJ3QgcGFydCBvZiB0aGUKKyMgZXhwb3J0ZWQgQVBJLCBvciBtb3ZlZCB0byBBdXRvY29uZiBvciBBdXRvbWFrZSB3aGVyZSB0aGV5IGJlbG9uZy4KKyMKKyMgVGhlIHRyb3VibGUgaXMsIGFjbG9jYWwgaXMgYSBiaXQgdGhpY2suICBJdCdsbCBzZWUgdGhlIG9sZCBBQ19ERUZVTgorIyBpbiAvdXNyL3NoYXJlL2FjbG9jYWwvbGlidG9vbC5tNCBhbmQgcmVtZW1iZXIgaXQsIHRoZW4gd2hlbiBpdCBzZWVzIHVzCisjIHVzaW5nIGEgbWFjcm8gd2l0aCB0aGUgc2FtZSBuYW1lIGluIG91ciBsb2NhbCBtNC9saWJ0b29sLm00IGl0J2xsCisjIHB1bGwgdGhlIG9sZCBsaWJ0b29sLm00IGluIChpdCBkb2Vzbid0IHNlZSBvdXIgc2hpbnkgbmV3IG00X2RlZmluZQorIyBhbmQgZG9lc24ndCBrbm93IGFib3V0IEF1dG9jb25mIG1hY3JvcyBhdCBhbGwuKQorIworIyBTbyB3ZSBwcm92aWRlIHRoaXMgZmlsZSwgd2hpY2ggaGFzIGEgc2lsbHkgZmlsZW5hbWUgc28gaXQncyBhbHdheXMKKyMgaW5jbHVkZWQgYWZ0ZXIgZXZlcnl0aGluZyBlbHNlLiAgVGhpcyBwcm92aWRlcyBhY2xvY2FsIHdpdGggdGhlCisjIEFDX0RFRlVOcyBpdCB3YW50cywgYnV0IHdoZW4gbTQgcHJvY2Vzc2VzIGl0LCBpdCBkb2Vzbid0IGRvIGFueXRoaW5nCisjIGJlY2F1c2UgdGhvc2UgbWFjcm9zIGFscmVhZHkgZXhpc3QsIG9yIHdpbGwgYmUgb3ZlcndyaXR0ZW4gbGF0ZXIuCisjIFdlIHVzZSBBQ19ERUZVTiBvdmVyIEFVX0RFRlVOIGZvciBjb21wYXRpYmlsaXR5IHdpdGggYWNsb2NhbC0xLjYuIAorIworIyBBbnl0aW1lIHdlIHdpdGhkcmF3IGFuIEFDX0RFRlVOIG9yIEFVX0RFRlVOLCByZW1lbWJlciB0byBhZGQgaXQgaGVyZS4KKyMgWWVzLCB0aGF0IG1lYW5zIGV2ZXJ5IG5hbWUgb25jZSB0YWtlbiB3aWxsIG5lZWQgdG8gcmVtYWluIGhlcmUgdW50aWwKKyMgd2UgZ2l2ZSB1cCBjb21wYXRpYmlsaXR5IHdpdGggdmVyc2lvbnMgYmVmb3JlIDEuNywgYXQgd2hpY2ggcG9pbnQKKyMgd2UgbmVlZCB0byBrZWVwIG9ubHkgdGhvc2UgbmFtZXMgd2hpY2ggd2Ugc3RpbGwgcmVmZXIgdG8uCisKKyMgVGhpcyBpcyB0byBoZWxwIGFjbG9jYWwgZmluZCB0aGVzZSBtYWNyb3MsIGFzIGl0IGNhbid0IHNlZSBtNF9kZWZpbmUuCitBQ19ERUZVTihbTFRPQlNPTEVURV9WRVJTSU9OXSwgW200X2lmKFsxXSldKQorCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTElOS0VSX09QVElPTl0sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MSU5LRVJfT1BUSU9OXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0VHUkVQXSwJCVtBQ19ERUZVTihbQUNfUFJPR19FR1JFUF0pXSkKK200X2lmbmRlZihbX0xUX0FDX1BST0dfRUNIT19CQUNLU0xBU0hdLAlbQUNfREVGVU4oW19MVF9BQ19QUk9HX0VDSE9fQkFDS1NMQVNIXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU0hFTExfSU5JVF0sCQlbQUNfREVGVU4oW19MVF9BQ19TSEVMTF9JTklUXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSwJW0FDX0RFRlVOKFtfTFRfQUNfU1lTX0xJQlBBVEhfQUlYXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19MVE1BSU5dLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19MVE1BSU5dKV0pCittNF9pZm5kZWYoW19MVF9BQ19UQUdWQVJdLAkJW0FDX0RFRlVOKFtfTFRfQUNfVEFHVkFSXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSwJW0FDX0RFRlVOKFtBQ19MVERMX0VOQUJMRV9JTlNUQUxMXSldKQorbTRfaWZuZGVmKFtBQ19MVERMX1BSRU9QRU5dLAkJW0FDX0RFRlVOKFtBQ19MVERMX1BSRU9QRU5dKV0pCittNF9pZm5kZWYoW19MVF9BQ19TWVNfQ09NUElMRVJdLAlbQUNfREVGVU4oW19MVF9BQ19TWVNfQ09NUElMRVJdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MT0NLXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xPQ0tdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfU1lTX09MRF9BUkNISVZFXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19PTERfQVJDSElWRV0pXSkKK200X2lmbmRlZihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0sCVtBQ19ERUZVTihbX0xUX0FDX1RSWV9ETE9QRU5fU0VMRl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9QUk9HX0NDX0NfT10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfSEFSRF9MSU5LX0xPQ0tTXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19IQVJEX0xJTktfTE9DS1NdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTElCVE9PTF9PQkpESVJdKV0pCittNF9pZm5kZWYoW0FDX0xURExfT0JKRElSXSwJCVtBQ19ERUZVTihbQUNfTFRETF9PQkpESVJdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19MRF9IQVJEQ09ERV9MSUJQQVRIXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfTERfSEFSRENPREVfTElCUEFUSF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfTElCX1NUUklQXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19MSUJfU1RSSVBdKV0pCittNF9pZm5kZWYoW0FDX1BBVEhfTUFHSUNdLAkJW0FDX0RFRlVOKFtBQ19QQVRIX01BR0lDXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0xEX0dOVV0sCQlbQUNfREVGVU4oW0FDX1BST0dfTERfR05VXSldKQorbTRfaWZuZGVmKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSwJW0FDX0RFRlVOKFtBQ19QUk9HX0xEX1JFTE9BRF9GTEFHXSldKQorbTRfaWZuZGVmKFtBQ19ERVBMSUJTX0NIRUNLX01FVEhPRF0sCVtBQ19ERUZVTihbQUNfREVQTElCU19DSEVDS19NRVRIT0RdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9OT19SVFRJXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1BST0dfQ09NUElMRVJfTk9fUlRUSV0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfR0xPQkFMX1NZTUJPTF9QSVBFXSwgW0FDX0RFRlVOKFtBQ19MSUJUT09MX1NZU19HTE9CQUxfU1lNQk9MX1BJUEVdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdLCBbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19DT01QSUxFUl9QSUNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUFJPR19MRF9TSExJQlNdKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfUE9TVERFUF9QUkVERVBdKV0pCittNF9pZm5kZWYoW0xUX0FDX1BST0dfRUdSRVBdLAkJW0FDX0RFRlVOKFtMVF9BQ19QUk9HX0VHUkVQXSldKQorbTRfaWZuZGVmKFtMVF9BQ19QUk9HX1NFRF0sCQlbQUNfREVGVU4oW0xUX0FDX1BST0dfU0VEXSldKQorbTRfaWZuZGVmKFtfTFRfQ0NfQkFTRU5BTUVdLAkJW0FDX0RFRlVOKFtfTFRfQ0NfQkFTRU5BTUVdKV0pCittNF9pZm5kZWYoW19MVF9DT01QSUxFUl9CT0lMRVJQTEFURV0sCVtBQ19ERUZVTihbX0xUX0NPTVBJTEVSX0JPSUxFUlBMQVRFXSldKQorbTRfaWZuZGVmKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSwJW0FDX0RFRlVOKFtfTFRfTElOS0VSX0JPSUxFUlBMQVRFXSldKQorbTRfaWZuZGVmKFtfQUNfUFJPR19MSUJUT09MXSwJCVtBQ19ERUZVTihbX0FDX1BST0dfTElCVE9PTF0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TRVRVUF0sCQlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU0VUVVBdKV0pCittNF9pZm5kZWYoW19MVF9BQ19DSEVDS19ETEZDTl0sCQlbQUNfREVGVU4oW19MVF9BQ19DSEVDS19ETEZDTl0pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9TWVNfRFlOQU1JQ19MSU5LRVJdLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfU1lTX0RZTkFNSUNfTElOS0VSXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfVEFHQ09ORklHXSwJCVtBQ19ERUZVTihbX0xUX0FDX1RBR0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfRElTQUJMRV9GQVNUX0lOU1RBTExdLAlbQUNfREVGVU4oW0FDX0RJU0FCTEVfRkFTVF9JTlNUQUxMXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19DWFhdLAkJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19DWFhdKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0Y3N10sCQlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0Y3N10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfR0NKXSwJCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfR0NKXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19DX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfQ1hYX0NPTkZJR10sCVtBQ19ERUZVTihbQUNfTElCVE9PTF9MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW19MVF9BQ19MQU5HX0NYWF9DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX0NYWF9DT05GSUddKV0pCittNF9pZm5kZWYoW0FDX0xJQlRPT0xfTEFOR19GNzdfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10sCVtBQ19ERUZVTihbX0xUX0FDX0xBTkdfRjc3X0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9MQU5HX0dDSl9DT05GSUddLAlbQUNfREVGVU4oW0FDX0xJQlRPT0xfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSwJW0FDX0RFRlVOKFtfTFRfQUNfTEFOR19HQ0pfQ09ORklHXSldKQorbTRfaWZuZGVmKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSwJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0xBTkdfUkNfQ09ORklHXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfTEFOR19SQ19DT05GSUddLAlbQUNfREVGVU4oW19MVF9BQ19MQU5HX1JDX0NPTkZJR10pXSkKK200X2lmbmRlZihbQUNfTElCVE9PTF9DT05GSUddLAkJW0FDX0RFRlVOKFtBQ19MSUJUT09MX0NPTkZJR10pXSkKK200X2lmbmRlZihbX0xUX0FDX0ZJTEVfTFRETExfQ10sCVtBQ19ERUZVTihbX0xUX0FDX0ZJTEVfTFRETExfQ10pXSkKK200X2lmbmRlZihbX0xUX1JFUVVJUkVEX0RBUldJTl9DSEVDS1NdLAlbQUNfREVGVU4oW19MVF9SRVFVSVJFRF9EQVJXSU5fQ0hFQ0tTXSldKQorbTRfaWZuZGVmKFtfTFRfQUNfUFJPR19DWFhDUFBdLAkJW0FDX0RFRlVOKFtfTFRfQUNfUFJPR19DWFhDUFBdKV0pCittNF9pZm5kZWYoW19MVF9QUkVQQVJFX1NFRF9RVU9URV9WQVJTXSwJW0FDX0RFRlVOKFtfTFRfUFJFUEFSRV9TRURfUVVPVEVfVkFSU10pXSkKK200X2lmbmRlZihbX0xUX1BST0dfRUNIT19CQUNLU0xBU0hdLAlbQUNfREVGVU4oW19MVF9QUk9HX0VDSE9fQkFDS1NMQVNIXSldKQorbTRfaWZuZGVmKFtfTFRfUFJPR19GNzddLAkJW0FDX0RFRlVOKFtfTFRfUFJPR19GNzddKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0ZDXSwJCVtBQ19ERUZVTihbX0xUX1BST0dfRkNdKV0pCittNF9pZm5kZWYoW19MVF9QUk9HX0NYWF0sCQlbQUNfREVGVU4oW19MVF9QUk9HX0NYWF0pXSkKZGlmZiAtLWdpdCBhL200L25ldHNubXBfYXJnLm00IGIvbTQvbmV0c25tcF9hcmcubTQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyMzMwYgotLS0gL2Rldi9udWxsCisrKyBiL200L25ldHNubXBfYXJnLm00CkBAIC0wLDAgKzEsMjcgQEAKK2RubCBSZXBvcnRzIGFuIGludmFsaWQgb3B0aW9uIGFuZCBzdWdnZXN0cyAtLWVuYWJsZS08QVJHVU1FTlQgMT4gaW5zdGVhZAorQUNfREVGVU4oW05FVFNOTVBfSU5WQUxJRF9FTkFCTEVdLAorICBbQUNfTVNHX0VSUk9SKFtJbnZhbGlkIG9wdGlvbi4gVXNlIC0tZW5hYmxlLSQxLy0tZGlzYWJsZS0kMSBpbnN0ZWFkXSldKQorCitkbmwgUmVwb3J0cyBhbiBpbnZhbGlkIG9wdGlvbiBhbmQgc3VnZ2VzdHMgLS13aXRoLTxBUkdVTUVOVCAxPiBpbnN0ZWFkCitBQ19ERUZVTihbTkVUU05NUF9JTlZBTElEX1dJVEhdLAorICBbQUNfTVNHX0VSUk9SKFtJbnZhbGlkIG9wdGlvbi4gVXNlIC0td2l0aC0kMS8tLXdpdGhvdXQtJDEgaW5zdGVhZF0pXSkKKworZG5sIFNpbWlsYXIgdG8gQUNfQVJHX0VOQUJMRSBidXQgYWxzbyBkZWZpbmVzIGEgbWF0Y2hpbmcgV0lUSCBvcHRpb24gdGhhdAorZG5sIHN1Z2dlc3RzIHRoZSB1c2Ugb2YgdGhlIEVOQUJMRSBvcHRpb24gaWYgY2FsbGVkCitBQ19ERUZVTihbTkVUU05NUF9BUkdfRU5BQkxFXSwKKyAgW0FDX0FSR19FTkFCTEUoWyQxXSxbJDJdZG5sCisgICAgIG00X2lmKG00X2V2YWwoJCMgPCAzKSwxLFtdLFssWyQzXV0pZG5sCisgICAgIG00X2lmKG00X2V2YWwoJCMgPCA0KSwxLFtdLFssWyQ0XV0pKQorICAgQUNfQVJHX1dJVEgoCisgICAgIFskMV0sLAorICAgICBbTkVUU05NUF9JTlZBTElEX0VOQUJMRShbJDFdKV0pXSkKKworZG5sIFNpbWlsYXIgdG8gQUNfQVJHX1dJVEggYnV0IGFsc28gZGVmaW5lcyBhIG1hdGNoaW5nIEVOQUJMRSBvcHRpb24gdGhhdAorZG5sIHN1Z2dlc3RzIHRoZSB1c2Ugb2YgdGhlIFdJVEggb3B0aW9uIGlmIGNhbGxlZAorQUNfREVGVU4oW05FVFNOTVBfQVJHX1dJVEhdLAorICBbQUNfQVJHX1dJVEgoWyQxXSxbJDJdZG5sCisgICAgIG00X2lmKG00X2V2YWwoJCMgPCAzKSwxLFtdLFssWyQzXV0pZG5sCisgICAgIG00X2lmKG00X2V2YWwoJCMgPCA0KSwxLFtdLFssWyQ0XV0pKQorICAgQUNfQVJHX0VOQUJMRSgKKyAgICAgWyQxXSwsCisgICAgIFtORVRTTk1QX0lOVkFMSURfV0lUSChbJDFdKV0pXSkKZGlmZiAtLWdpdCBhL200L25ldHNubXBfc2VhcmNoX2xpYnMubTQgYi9tNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZDhhMTIKLS0tIC9kZXYvbnVsbAorKysgYi9tNC9uZXRzbm1wX3NlYXJjaF9saWJzLm00CkBAIC0wLDAgKzEsMzUgQEAKK2RubCBAc3lub3BzaXMgTkVUU05NUF9TRUFSQ0hfTElCUyhGVU5DVElPTiwgU0VBUkNILUxJQlMsIFtBQ1RJT04tSUYtRk9VTkRdLAorZG5sICAgICAgICAgICAgIFtBQ1RJT04tSUYtTk9ULUZPVU5EXSwgW09USEVSLUxJQlJBUklFU10sIFtUQVJHRVQtVkFSSUFCTEVdKQorZG5sIFNpbWlsYXIgdG8gQUNfU0VBUkNIX0xJQlMgYnV0IGNoYW5nZXMgVEFSR0VULVZBUklBQkxFIGluc3RlYWQgb2YgTElCUworZG5sIElmIFRBUkdFVC1WQVJJQUJMRSBpcyB1bnNldCB0aGVuIExJQlMgaXMgdXNlZAorQUNfREVGVU4oW05FVFNOTVBfU0VBUkNIX0xJQlNdLAorW200X3B1c2hkZWYoW25ldHNubXBfdGFyZ2V0XSxtNF9pZnZhbChbJDZdLFskNl0sW0xJQlNdKSkKKyBBQ19DQUNIRV9DSEVDSyhbZm9yIGxpYnJhcnkgY29udGFpbmluZyAkMV0sCisgICAgW25ldHNubXBfY3ZfZnVuY18kMV9dbmV0c25tcF90YXJnZXQsCisgICAgW25ldHNubXBfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSIkTElCUyIKKyAgICAgbTRfaWYobmV0c25tcF90YXJnZXQsIFtMSUJTXSwKKyAgICAgICAgIFtuZXRzbm1wX3RhcmdldF92YWw9IiRMSUJTIgorICAgICAgICAgIG5ldHNubXBfdGVtcF9MSUJTPSIkNSAke0xJQlN9Il0sCisgICAgICAgICBbbmV0c25tcF90YXJnZXRfdmFsPSIkbmV0c25tcF90YXJnZXQiCisgICAgICAgICAgbmV0c25tcF90ZW1wX0xJQlM9IiR7bmV0c25tcF90YXJnZXRfdmFsfSAkNSAke0xJQlN9Il0pCisgICAgIG5ldHNubXBfcmVzdWx0PW5vCisgICAgIExJQlM9IiR7bmV0c25tcF90ZW1wX0xJQlN9IgorICAgICBBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19DQUxMKFtdLFskMV0pXSwKKyAgICAgICAgIFtuZXRzbm1wX3Jlc3VsdD0ibm9uZSByZXF1aXJlZCJdLAorICAgICAgICAgW2ZvciBuZXRzbm1wX2N1cl9saWIgaW4gJDIgOyBkbworICAgICAgICAgICAgICBMSUJTPSItbCR7bmV0c25tcF9jdXJfbGlifSAke25ldHNubXBfdGVtcF9MSUJTfSIKKyAgICAgICAgICAgICAgQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfQ0FMTChbXSxbJDFdKV0sCisgICAgICAgICAgICAgICAgICBbbmV0c25tcF9yZXN1bHQ9LWwke25ldHNubXBfY3VyX2xpYn0KKyAgICAgICAgICAgICAgICAgICBicmVha10pCisgICAgICAgICAgZG9uZV0pCisgICAgIExJQlM9IiR7bmV0c25tcF9mdW5jX3NlYXJjaF9zYXZlX0xJQlN9IgorICAgICBbbmV0c25tcF9jdl9mdW5jXyQxX11uZXRzbm1wX3RhcmdldD0iJHtuZXRzbm1wX3Jlc3VsdH0iXSkKKyBpZiB0ZXN0ICIke1tuZXRzbm1wX2N2X2Z1bmNfJDFfXW5ldHNubXBfdGFyZ2V0fSIgIT0gIm5vIiA7IHRoZW4KKyAgICBpZiB0ZXN0ICIke1tuZXRzbm1wX2N2X2Z1bmNfJDFfXW5ldHNubXBfdGFyZ2V0fSIgIT0gIm5vbmUgcmVxdWlyZWQiIDsgdGhlbgorICAgICAgIG5ldHNubXBfdGFyZ2V0PSIke25ldHNubXBfcmVzdWx0fSAke25ldHNubXBfdGFyZ2V0X3ZhbH0iCisgICAgZmkKKyAgICAkMworIG00X2lmdmFsKFskNF0sIFtlbHNlCisgICAgJDRdKQorIGZpCisgbTRfcG9wZGVmKFtuZXRzbm1wX3RhcmdldF0pXSkKZGlmZiAtLWdpdCBhL21hbi9NYWtlZmlsZS5pbiBiL21hbi9NYWtlZmlsZS5pbgppbmRleCBhYjE4Mzc1Li4wMWZlODUyIDEwMDY0NAotLS0gYS9tYW4vTWFrZWZpbGUuaW4KKysrIGIvbWFuL01ha2VmaWxlLmluCkBAIC0xNCw3MCArMTQsNjggQEAKICMgbG9jYWwgc3R1ZmYKICMKIAotTUFOMSAgPSBzbm1waW5mb3JtLjEKLU1BTjFHID0gc25tcGJ1bGtnZXQuMSBzbm1wY21kLjEgc25tcGdldC4xIHNubXBzZXQuMSBzbm1wd2Fsay4xIFwKK01BTjEgID0gc25tcGluZm9ybS4xIHNubXAtYnJpZGdlLW1pYi4xCisKK0BORVRTTk1QX0hBVkVfQUdFTlRYX0xJQlNfVFJVRUBBR0VOVFhUUkFQID0gYWdlbnR4dHJhcC4xCitATkVUU05NUF9IQVZFX0FHRU5UWF9MSUJTX0ZBTFNFQEFHRU5UWFRSQVAgPQorCitNQU4xRyA9ICQoQUdFTlRYVFJBUCkgc25tcGJ1bGtnZXQuMSBzbm1wY21kLjEgc25tcGdldC4xIHNubXBzZXQuMSBzbm1wd2Fsay4xIFwKIAlzbm1wYnVsa3dhbGsuMSBzbm1wZ2V0bmV4dC4xIHNubXB0ZXN0LjEgc25tcHRyYW5zbGF0ZS4xIHNubXB0cmFwLjEgXAogCXNubXB1c20uMSBzbm1wdmFjbS4xIHNubXB0YWJsZS4xIHNubXBzdGF0dXMuMSBzbm1wY29uZi4xIG1pYjJjLjEgXAogCXNubXBuZXRzdGF0LjEgc25tcGRlbHRhLjEgc25tcGRmLjEgZW5jb2RlX2tleWNoYW5nZS4xIGZpeHByb2MuMSBcCi0JbmV0LXNubXAtY29uZmlnLjEgbWliMmMtdXBkYXRlLjEgdGttaWIuMSB0cmFwdG9lbWFpbC4xCisJbmV0LXNubXAtY29uZmlnLjEgbWliMmMtdXBkYXRlLjEgdGttaWIuMSB0cmFwdG9lbWFpbC4xIFwKKwluZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xCiAKLU1BTjMgID0gc25tcF9jbG9zZS4zIHNubXBfZnJlZV9wZHUuMyBzbm1wX29wZW4uMyBzbm1wX3JlYWQuMyBcCi0Jc25tcF9zZWxlY3RfaW5mby4zIHNubXBfc2VuZC4zIHNubXBfdGltZW91dC4zCQkJICAgICAgIFwKLQlzbm1wX3Nlc3NfYXN5bmNfc2VuZC4zIHNubXBfc2Vzc19jbG9zZS4zIHNubXBfc2Vzc19lcnJvci4zICAgICBcCi0Jc25tcF9zZXNzX2luaXQuMyBzbm1wX3Nlc3Nfb3Blbi4zIHNubXBfc2Vzc19yZWFkLjMJICAgICAgIFwKLQlzbm1wX3Nlc3Nfc2VsZWN0X2luZm8uMyBzbm1wX3Nlc3Nfc2VuZC4zIHNubXBfc2Vzc190aW1lb3V0LjMgICBcCi0Jc25tcF9zZXNzX3Nlc3Npb24uMyBzbm1wX3BlcnJvci4zIHNubXBfc2Vzc19wZXJyb3IuMwkgICAgICAgXAotCXNubXBfZXJyb3IuMyBzbm1wX2FwaV9lcnJzdHJpbmcuMyBpbml0X21pYi4zIGFkZF9taWJkaXIuMyAgICAgIFwKLQlpbml0X21pYl9pbnRlcm5hbHMuMyBzbm1wX3NldF9taWJfd2FybmluZ3MuMyByZWFkX21vZHVsZS4zICAgICBcCi0JcmVhZF9hbGxfbWlicy4zIHJlYWRfbWliLjMgcmVhZF9tb2R1bGVfbm9kZS4zIHJlYWRfb2JqaWQuMyAgICAgXAotCWFkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMyBzaHV0ZG93bl9taWIuMyBwcmludF9taWIuMwkgICAgICAgXAotCXByaW50X3ZhcmlhYmxlLjMgcHJpbnRfdmFsdWUuMyBwcmludF9vYmppZC4zCQkgICAgICAgXAotCXByaW50X2Rlc2NyaXB0aW9uLjMgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMwkgICAgICAgXAotCWdldF9tb2R1bGVfbm9kZS4zIG5ldHNubXBfYWdlbnQuMyBuZXRzbm1wX2J1bGtfdG9fbmV4dC4zICAgICAgIFwKLQluZXRzbm1wX2RlYnVnLjMgbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMyBuZXRzbm1wX2hhbmRsZXIuMyBcCi0JbmV0c25tcF9pbnN0YW5jZS4zIG5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zCSAgICAgICBcCi0JbmV0c25tcF9tdWx0aXBsZXhlci4zIG5ldHNubXBfb2xkX2FwaS4zIG5ldHNubXBfcmVhZF9vbmx5LjMgICAgXAotCW5ldHNubXBfc2VyaWFsaXplLjMgbmV0c25tcF90YWJsZS4zIG5ldHNubXBfdGFibGVfYXJyYXkuMyAgICAgIFwKLQluZXRzbm1wX3RhYmxlX2RhdGEuMyBuZXRzbm1wX3RhYmxlX2RhdGFzZXQuMwkJICAgICAgIFwKLQluZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMgbmV0c25tcF9zY2FsYXIuMyAgICAgICBcCi0JbmV0c25tcF93YXRjaGVyLjMgbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMgbmV0c25tcF9saWJyYXJ5LjMgICAgXAotCW5ldHNubXBfbWliX3V0aWxpdGllcy4zCQkJCQkgICAgICAgXAotCW5ldHNubXBfYmFieV9zdGVwcy4zIG5ldHNubXBfY2FjaGVfaGFuZGxlci4zCQkgICAgICAgXAotCW5ldHNubXBfY29udGFpbmVyLjMgbmV0c25tcF9pdGVyYXRvcl9pbmZvX3MuMyBuZXRzbm1wX2xlYWYuMyAgIFwKLQluZXRzbm1wX3Jvd19tZXJnZS4zCQkgICAgICAgXAotCW5ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwLjMgbmV0c25tcF9zdGFzaF9jYWNoZS4zCSAgICAgICBcCi0JbmV0c25tcF91dGlsaXRpZXMuMwotCi1NQU4zRyA9IGRlZmF1bHRfc3RvcmUuMyBtaWJfYXBpLjMgcmVhZF9jb25maWcuMyBzbm1wX2FnZW50X2FwaS4zIHNubXBfYWxhcm0uMyBcCi0Jc25tcF9hcGkuMyBzbm1wX3Nlc3NfYXBpLjMgc25tcF90cmFwX2FwaS4zCisjIElmIE1BTjMgaXMgcG9wdWxhdGVkIGFnYWluLCB0aGVuIHJlbWVtYmVyIHRvIHJlLWVuYWJsZSB0aGUgY29ycmVzcG9uZGluZworIyBhY3Rpb24gbGluZSB3aXRoaW4gdGhlICdtYW5pbnN0YWxsJyB0YXJnZXQKK01BTjMgID0gCitNQU4zX0FQSSA9IG5ldHNubXBfbWliX2FwaS4zIG5ldHNubXBfY29uZmlnX2FwaS4zIHNubXBfYWxhcm0uMyBcCisJbmV0c25tcF9zZXNzaW9uX2FwaS4zIG5ldHNubXBfc2Vzc19hcGkuMyBuZXRzbm1wX3RyYXBfYXBpLjMgbmV0c25tcF92YXJiaW5kX2FwaS4zIG5ldHNubXBfcGR1X2FwaS4zIAorTUFOM0cgPSBkZWZhdWx0X3N0b3JlLjMgbmV0c25tcF9hZ2VudF9hcGkuMyAkKE1BTjNfQVBJKQogTUFONUcgPSBzbm1wZC5jb25mLjUgc25tcHRyYXBkLmNvbmYuNSBzbm1wLmNvbmYuNSBzbm1wX2NvbmZpZy41IHZhcmlhYmxlcy41IFwKICAgICAgICAgbWliMmMuY29uZi41IHNubXBkLmV4YW1wbGVzLjUgc25tcGQuaW50ZXJuYWwuNQogTUFOOEcgPSBzbm1wdHJhcGQuOCBzbm1wZC44CiAKLURFRkFVTFRfU1RPUkVfQUxJQVNFUyA9IG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4uMyBuZXRzbm1wX2RzX2dldF9pbnQuMwlcCi0JbmV0c25tcF9kc19nZXRfc3RyaW5nLjMgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcuMwkJXAotCW5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliLjMgbmV0c25tcF9kc19zZXRfYm9vbGVhbi4zIAkJXAotCW5ldHNubXBfZHNfc2V0X2ludC4zCQkJCQkJXAotCW5ldHNubXBfZHNfc2V0X3N0cmluZy4zIG5ldHNubXBfZHNfc2h1dGRvd24uMwotUkVBRF9DT05GSUdfQUxJQVNFUyA9IGNvbmZpZ19wZXJyb3IuMyBjb25maWdfcHdhcm4uMwkJCVwKLQlyZWFkX2NvbmZpZ19wcmludF91c2FnZS4zIHJlYWRfY29uZmlncy4zIHJlYWRfcHJlbWliX2NvbmZpZ3MuMwlcCi0JcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyLjMgcmVnaXN0ZXJfYXBwX3ByZW1pYl9oYW5kbGVyLjMJXAotCXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLjMgcmVnaXN0ZXJfbWliX2hhbmRsZXJzLjMgCQlcCi0JcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIuMyAJCQkJCVwKK01JQl9BTElBU0VTICAgICA9IGFkZF9taWJkaXIuMyBhZGRfbW9kdWxlX3JlcGxhY2VtZW50LjMJCVwKKwlmcHJpbnRfZGVzY3JpcHRpb24uMyBmcHJpbnRfb2JqaWQuMyBnZXRfbW9kdWxlX25vZGUuMwlcCisJbmV0c25tcF9pbml0X21pYi4zIG5ldHNubXBfcmVhZF9tb2R1bGUuMwkJXAorCXByaW50X2Rlc2NyaXB0aW9uLjMgcHJpbnRfbWliLjMgcHJpbnRfb2JqaWQuMwkJXAorCXJlYWRfYWxsX21pYnMuMyByZWFkX21pYi4zIHJlYWRfb2JqaWQuMwkJCVwKKwlzaHV0ZG93bl9taWIuMyBzbm1wX3BhcnNlX29pZC4zIHNubXBfc2V0X21pYl9lcnJvcnMuMwlcCisJc25tcF9zZXRfbWliX3dhcm5pbmdzLjMgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMwlcCisJc25wcmludF9kZXNjcmlwdGlvbi4zIHNucHJpbnRfb2JqaWQuMworQ09ORklHX0FMSUFTRVMgID0gY29uZmlnX3BlcnJvci4zIGNvbmZpZ19wd2Fybi4zCQkJICAgIFwKKwlyZWFkX2NvbmZpZ19wcmludF91c2FnZS4zIHJlYWRfY29uZmlncy4zIHJlYWRfcHJlbWliX2NvbmZpZ3MuMwkgICAgXAorCXJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlci4zIHJlZ2lzdGVyX2FwcF9wcmVuZXRzbm1wX21pYl9oYW5kbGVyLjMgXAorCXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLjMgcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIuMwkgICAgXAorCXJlZ2lzdGVyX21pYl9oYW5kbGVycy4zIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIuMwkgICAgXAorCXVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycy4zCQkJIAkgICAgXAogCXVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyLjMgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlci4zCi1TTk1QX0FMQVJNX0FMSUFTRVMgPSBzbm1wX2FsYXJtX3JlZ2lzdGVyLjMgc25tcF9hbGFybV9yZWdpc3Rlcl9oci4zIAlcCi0Jc25tcF9hbGFybV91bnJlZ2lzdGVyLjMKLVNOTVBfU0VUX1NBVkVfREVTQ1JJUFRJT05TX0FMSUFTRVMgPSBmcHJpbnRfZGVzY3JpcHRpb24uMyBmcHJpbnRfb2JqaWQuMyBcCi0JZnByaW50X3ZhbHVlLjMgZnByaW50X3ZhcmlhYmxlLjMgc25wcmludF9vYmppZC4zIHNucHJpbnRfdmFsdWUuMyBcCi0Jc25wcmludF92YXJpYWJsZS4zIHNwcmludF9yZWFsbG9jX29iamlkLjMgc3ByaW50X3JlYWxsb2NfdmFsdWUuMyBcCi0Jc3ByaW50X3JlYWxsb2NfdmFyaWFibGUuMwotU05NUF9UUkFQX0FQSV9BTElBU0VTID0gc2VuZF9lYXN5X3RyYXAuMyBzZW5kX3RyYXBfdmFycy4zIHNlbmRfdjJ0cmFwLjMKK0FMQVJNX0FMSUFTRVMgICA9IHNubXBfYWxhcm1fcmVnaXN0ZXIuMyBzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyLjMgc25tcF9hbGFybV91bnJlZ2lzdGVyLjMKK1NFU1NJT05fQUxJQVNFUyA9IHNubXBfYXBpX2VycnN0cmluZy4zIHNubXBfY2xvc2UuMyBzbm1wX2Vycm9yLjMgICAgXAorCXNubXBfb3Blbi4zIHNubXBfcGVycm9yLjMgc25tcF9yZWFkLjMgc25tcF9zZWxlY3RfaW5mby4zICAgIFwKKwlzbm1wX3NlbmQuMyBzbm1wX3Nlc3NfcGVycm9yLjMgc25tcF90aW1lb3V0LjMgICAgICAgICAgICAgICBcCisJc25tcF9hc3luY19zZW5kLjMgc25tcF9zeW5jaF9yZXNwb25zZS4zCitTU0VTU19BTElBU0VTICAgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZC4zIHNubXBfc2Vzc19jbG9zZS4zIHNubXBfc2Vzc19lcnJvci4zIFwKKwlzbm1wX3Nlc3NfaW5pdC4zIHNubXBfc2Vzc19vcGVuLjMgc25tcF9zZXNzX3JlYWQuMwkJICAgICBcCisJc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMgc25tcF9zZXNzX3NlbmQuMwkJCSAgICAgXAorCXNubXBfc2Vzc19zZXNzaW9uLjMgc25tcF9zZXNzX3RpbWVvdXQuMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwlzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UuMworVFJBUF9BTElBU0VTICAgID0gc2VuZF9lYXN5X3RyYXAuMyBzZW5kX3RyYXBfdmFycy4zIHNlbmRfdjJ0cmFwLjMgCitWQVJCSU5EX0FMSUFTRVMgPSBmcHJpbnRfdmFsdWUuMyBmcHJpbnRfdmFyaWFibGUuMwlcCisJcHJpbnRfdmFsdWUuMyBwcmludF92YXJpYWJsZS4zCQkJXAorCXNubXBfYWRkX251bGxfdmFyLjMgc25tcF9jbG9uZV92YXJiaW5kLjMJXAorCXNubXBfZnJlZV92YXIuMyBzbm1wX2ZyZWVfdmFyYmluZC4zCQlcCisJc25tcF9wZHVfYWRkX3ZhcmlhYmxlLjMJCQkJXAorCXNubXBfc2V0X3Zhcl9vYmppZC4zIHNubXBfc2V0X3Zhcl90eXBlZF9pbnRlZ2VyLjMgXAorCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZS4zIHNubXBfc2V0X3Zhcl92YWx1ZS4zICAgXAorCXNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUuMyBzbnByaW50X3ZhbHVlLjMgc25wcmludF92YXJpYWJsZS4zCitQRFVfQUxJQVNFUyAgICAgPSBzbm1wX2Nsb25lX3BkdS4zIHNubXBfZml4X3BkdS4zIHNubXBfZnJlZV9wZHUuMyBzbm1wX3BkdV9jcmVhdGUuMwogCiAKIAotTUFOQUxJQVNFUz0kKERFRkFVTFRfU1RPUkVfQUxJQVNFUykgJChSRUFEX0NPTkZJR19BTElBU0VTKSAJCVwKLQkkKFNOTVBfQUxBUk1fQUxJQVNFUykgJChTTk1QX1NFVF9TQVZFX0RFU0NSSVBUSU9OU19BTElBU0VTKSAJXAotCSQoU05NUF9UUkFQX0FQSV9BTElBU0VTKQorTUFOQUxJQVNFUz0kKE1JQl9BTElBU0VTKSAkKENPTkZJR19BTElBU0VTKSAkKEFMQVJNX0FMSUFTRVMpICQoU0VTU0lPTl9BTElBU0VTKSBcCisJJChTU0VTU19BTElBU0VTKSAkKFRSQVBfQUxJQVNFUykgJChWQVJCSU5EX0FMSUFTRVMpICQoUERVX0FMSUFTRVMpCiBNQU5BTEwgPSAkKE1BTjEpICQoTUFOMUcpICQoTUFOMykgJChNQU4zRykgJChNQU41RykgJChNQU44RykgJChNQU5BTElBU0VTKQogCiBUQVJHRVRTID0gJChNQU41RykgJChNQU4xRykgJChNQU4zRykgJChNQU44RykKQEAgLTg1LDI4ICs4MywyOSBAQAogCiBhbGw6ICQoVEFSR0VUUykgc3RhbmRhcmRhbGwgbWFuYWxpYXNlcwogCi1tYW5hbGlhc2VzOiBNYWtlZmlsZQorbWFuYWxpYXNlczogTWFrZWZpbGUgJChNQU4zX0FQSSkKIAl0b3VjaCBtYW5hbGlhc2VzCi0JQGZvciBpIGluICQoREVGQVVMVF9TVE9SRV9BTElBU0VTKSA7IGRvCQkJCVwKLQkJZWNobyAibWFraW5nIG1hbiBwYWdlIGFsaWFzICQkaSAtPiBkZWZhdWx0X3N0b3JlIEFQSXMiIDsgXAotCQllY2hvICIuc28gbWFuMy9kZWZhdWx0X3N0b3JlLjMiID4gJCRpIDsgCQlcCi0JZG9uZQotCUBmb3IgaSBpbiAkKFJFQURfQ09ORklHX0FMSUFTRVMpIDsgZG8JCQkJXAotCQllY2hvICJtYWtpbmcgbWFuIHBhZ2UgYWxpYXMgJCRpIC0+IHJlYWRfY29uZmlnIEFQSXMiIDsJXAotCQllY2hvICIuc28gbWFuMy9yZWFkX2NvbmZpZy4zIiA+ICQkaSA7IAkJCVwKLQlkb25lCi0JQGZvciBpIGluICQoU05NUF9BTEFSTV9BTElBU0VTKSA7IGRvCQkJCVwKLQkJZWNobyAibWFraW5nIG1hbiBwYWdlIGFsaWFzICQkaSAtPiBzbm1wX2FsYXJtIEFQSXMiIDsJXAotCQllY2hvICIuc28gbWFuMy9zbm1wX2FsYXJtLjMiID4gJCRpIDsgCQkJXAotCWRvbmUKLQlAZm9yIGkgaW4gJChTTk1QX1NFVF9TQVZFX0RFU0NSSVBUSU9OU19BTElBU0VTKSA7IGRvCQlcCi0JCWVjaG8gIm1ha2luZyBtYW4gcGFnZSBhbGlhcyAkJGkgLT4gc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMgQVBJcyIgOyBcCi0JCWVjaG8gIi5zbyBtYW4zL3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLjMiID4gJCRpIDsgCVwKLQlkb25lCi0JQGZvciBpIGluICQoU05NUF9UUkFQX0FQSV9BTElBU0VTKSA7IGRvCQkJCVwKLQkJZWNobyAibWFraW5nIG1hbiBwYWdlIGFsaWFzICQkaSAtPiBzbm1wX3RyYXAgQVBJcyIgOwlcCi0JCWVjaG8gIi5zbyBtYW4zL3NubXBfdHJhcF9hcGkuMyIgPiAkJGkgOwkJCVwKLQlkb25lCisJQHJlc3VsdD0wIDsgXAorICAgICAgICBmb3IgaSBpbiAkKE1BTjNfQVBJKSA7IGRvCQkJCSAgXAorICAgICAgICAgICAgZm9yIGogaW4gYCQoU0VEKSAtbiAnL14uU0ggTkFNRS8sL14uU0ggU1lOT1BTSVMvcCcgJCRpICB8ICQoU0VEKSAtZSAncy8uLSAuKi8vJyB8ICQoU0VEKSAncy8sLiovLycgIHwgJChFR1JFUCkgLXYgJ14uU0ggJyBgOyBkbyBcCisJCWVjaG8gIm1ha2luZyBtYW4gcGFnZSBhbGlhcyAkJGogLT4gJCRpIEFQSXMiIDsgICAgXAorCQllY2hvICIuc28gbWFuMy8kJGkiID4gJCRqLjMgOyAJCSAgXAorCQlpZiBleHByICIkKE1BTkFMSUFTRVMpIiA6ICIuKiQkalxcLjMiID4gL2Rldi9udWxsIDsgXAorCQl0aGVuIFwKKwkJICA6IDsgXAorCQllbHNlIFwKKwkJICAgIHZhcj1gZWNobyAkJGkgfCAkKFNFRCkgLWUgJ3MvXm5ldHNubXBfLy8nIC1lICdzL19hcGkuMy8vJyB8IHRyICdbYS16XScgJ1tBLVpdJ2AgOyBcCisJCSAgICBlY2hvICJZb3UgbXVzdCBhZGQgJCRqLjMgdG8gdGhlICQke3Zhcn1fQUxJQVNFUyB2YXJpYWJsZSBpbiB0aGUgTWFrZWZpbGUuaW4iIDsgXAorCQkgICAgcmVzdWx0PTEgOyBcCisJICAgICAgICBmaTsgXAorCSAgICBkb25lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJZG9uZSA7IFwKKwlleGl0ICQkcmVzdWx0CisKKyQoTUFOQUxJQVNFUyk6IG1hbmFsaWFzZXMKKworYWdlbnR4dHJhcC4xOiAkKHNyY2RpcikvYWdlbnR4dHJhcC4xLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL2FnZW50eHRyYXAuMS5kZWYgPiBhZ2VudHh0cmFwLjEKIAogc25tcGJ1bGtnZXQuMTogJChzcmNkaXIpL3NubXBidWxrZ2V0LjEuZGVmIC4uL3NlZHNjcmlwdAogCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGJ1bGtnZXQuMS5kZWYgPiBzbm1wYnVsa2dldC4xCkBAIC0xODAsNTYgKzE3OSw2NSBAQAogbmV0LXNubXAtY29uZmlnLjE6ICQoc3JjZGlyKS9uZXQtc25tcC1jb25maWcuMS5kZWYgLi4vc2Vkc2NyaXB0CiAJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXQtc25tcC1jb25maWcuMS5kZWYgPiBuZXQtc25tcC1jb25maWcuMQogCituZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xOiAkKHNyY2RpcikvbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZiA+IG5ldC1zbm1wLWNyZWF0ZS12My11c2VyLjEKKwogdGttaWIuMTogJChzcmNkaXIpL3RrbWliLjEuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvdGttaWIuMS5kZWYgPiB0a21pYi4xCisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS90a21pYi4xLmRlZiA+ICRACiAKIHRyYXB0b2VtYWlsLjE6ICQoc3JjZGlyKS90cmFwdG9lbWFpbC4xLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3RyYXB0b2VtYWlsLjEuZGVmID4gdHJhcHRvZW1haWwuMQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvdHJhcHRvZW1haWwuMS5kZWYgPiAkQAogCi1taWJfYXBpLjM6ICQoc3JjZGlyKS9taWJfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbWliX2FwaS4zLmRlZiA+IG1pYl9hcGkuMworbmV0c25tcF92YXJiaW5kX2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF92YXJiaW5kX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYgPiAkQAogCi1yZWFkX2NvbmZpZy4zOiAkKHNyY2RpcikvcmVhZF9jb25maWcuMy5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9yZWFkX2NvbmZpZy4zLmRlZiA+IHJlYWRfY29uZmlnLjMKK25ldHNubXBfcGR1X2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF9wZHVfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF9wZHVfYXBpLjMuZGVmID4gJEAKIAotc25tcF9hZ2VudF9hcGkuMzogJChzcmNkaXIpL3NubXBfYWdlbnRfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9hZ2VudF9hcGkuMy5kZWYgPiBzbm1wX2FnZW50X2FwaS4zCituZXRzbm1wX3Nlc3Npb25fYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX3Nlc3Npb25fYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZiA+ICRACisKK25ldHNubXBfbWliX2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF9taWJfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF9taWJfYXBpLjMuZGVmID4gJEAKKworbmV0c25tcF9jb25maWdfYXBpLjM6ICQoc3JjZGlyKS9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYgLi4vc2Vkc2NyaXB0CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9uZXRzbm1wX2NvbmZpZ19hcGkuMy5kZWYgPiAkQAogCiBzbm1wX2FsYXJtLjM6ICQoc3JjZGlyKS9zbm1wX2FsYXJtLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9hbGFybS4zLmRlZiA+IHNubXBfYWxhcm0uMworCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9hbGFybS4zLmRlZiA+ICRACiAKLXNubXBfYXBpLjM6ICQoc3JjZGlyKS9zbm1wX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfYXBpLjMuZGVmID4gc25tcF9hcGkuMworbmV0c25tcF9zZXNzX2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF9zZXNzX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfc2Vzc19hcGkuMy5kZWYgPiAkQAogCi1zbm1wX3Nlc3NfYXBpLjM6ICQoc3JjZGlyKS9zbm1wX3Nlc3NfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF9zZXNzX2FwaS4zLmRlZiA+IHNubXBfc2Vzc19hcGkuMworbmV0c25tcF9hZ2VudF9hcGkuMzogJChzcmNkaXIpL25ldHNubXBfYWdlbnRfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2RpcikvbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYgPiAkQAogCi1zbm1wX3RyYXBfYXBpLjM6ICQoc3JjZGlyKS9zbm1wX3RyYXBfYXBpLjMuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcF90cmFwX2FwaS4zLmRlZiA+IHNubXBfdHJhcF9hcGkuMworbmV0c25tcF90cmFwX2FwaS4zOiAkKHNyY2RpcikvbmV0c25tcF90cmFwX2FwaS4zLmRlZiAuLi9zZWRzY3JpcHQKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL25ldHNubXBfdHJhcF9hcGkuMy5kZWYgPiAkQAogCiBzbm1wLmNvbmYuNTogJChzcmNkaXIpL3NubXAuY29uZi41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXAuY29uZi41LmRlZiA+IHNubXAuY29uZi41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wLmNvbmYuNS5kZWYgPiAkQAogCiBzbm1wX2NvbmZpZy41OiAkKHNyY2Rpcikvc25tcF9jb25maWcuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wX2NvbmZpZy41LmRlZiA+IHNubXBfY29uZmlnLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBfY29uZmlnLjUuZGVmID4gJEAKIAogc25tcGQuY29uZi41OiAkKHNyY2Rpcikvc25tcGQuY29uZi41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBkLmNvbmYuNS5kZWYgPiBzbm1wZC5jb25mLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBkLmNvbmYuNS5kZWYgPiAkQAogCiBzbm1wZC5leGFtcGxlcy41OiAkKHNyY2Rpcikvc25tcGQuZXhhbXBsZXMuNS5kZWYgLi4vc2Vkc2NyaXB0Ci0JJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wZC5leGFtcGxlcy41LmRlZiA+IHNubXBkLmV4YW1wbGVzLjUKKwkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXBkLmV4YW1wbGVzLjUuZGVmID4gJEAKIAogc25tcGQuaW50ZXJuYWwuNTogJChzcmNkaXIpL3NubXBkLmludGVybmFsLjUuZGVmIC4uL3NlZHNjcmlwdAotCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcGQuaW50ZXJuYWwuNS5kZWYgPiBzbm1wZC5pbnRlcm5hbC41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wZC5pbnRlcm5hbC41LmRlZiA+ICRACiAKIHNubXB0cmFwZC5jb25mLjU6ICQoc3JjZGlyKS9zbm1wdHJhcGQuY29uZi41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXB0cmFwZC5jb25mLjUuZGVmID4gc25tcHRyYXBkLmNvbmYuNQorCSQoU0VEKSAtZiAuLi9zZWRzY3JpcHQgPCAkKHNyY2Rpcikvc25tcHRyYXBkLmNvbmYuNS5kZWYgPiAkQAogCiB2YXJpYWJsZXMuNTogJChzcmNkaXIpL3ZhcmlhYmxlcy41LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3ZhcmlhYmxlcy41LmRlZiA+IHZhcmlhYmxlcy41CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS92YXJpYWJsZXMuNS5kZWYgPiAkQAogCiBzbm1wdHJhcGQuODogJChzcmNkaXIpL3NubXB0cmFwZC44LmRlZiAuLi9zZWRzY3JpcHQKLQkkKFNFRCkgLWYgLi4vc2Vkc2NyaXB0IDwgJChzcmNkaXIpL3NubXB0cmFwZC44LmRlZiA+IHNubXB0cmFwZC44CisJJChTRUQpIC1mIC4uL3NlZHNjcmlwdCA8ICQoc3JjZGlyKS9zbm1wdHJhcGQuOC5kZWYgPiAkQAogCiBkZWZhdWx0X3N0b3JlLjMuaDogJChzcmNkaXIpLy4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIAlhd2sgJ3sgaWYgKCQkMCA9PSAiICAgICAqIGJlZ2luIHN0b3JhZ2UgZGVmaW5pdGlvbnMgIikgeyBwID0gMSB9IGVsc2UgaWYgKCQkMCA9PSAiICAgICAqIGVuZCBzdG9yYWdlIGRlZmluaXRpb25zICIpIHsgcCA9IDAgfSBlbHNlIGlmIChwKSB7IHByaW50ICQkMH19JyA8ICQoc3JjZGlyKS8uLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oID4gZGVmYXVsdF9zdG9yZS4zLmgKQEAgLTI0NSwxMSArMjUzLDExIEBACiAJICB0b3VjaCBtaWIyYy5jb25mLjUgOyBcCiAJZmkKIAotbWFuaW5zdGFsbDogIG1hbmluc3RhbGxkaXJzICQoTUFOMSkgJChNQU4xRykgJChNQU4zKSAkKE1BTjVHKSAkKE1BTjgpICQoTUFOQUxJQVNFUykKK21hbmluc3RhbGw6ICBtYW5pbnN0YWxsZGlycyAkKE1BTjEpICQoTUFOMUcpICQoTUFOMykgJChNQU4zX0FQSSkgJChNQU4zRykgJChNQU41RykgJChNQU44RykgJChNQU5BTElBU0VTKQogCUBmb3IgaSBpbiAkKE1BTjEpIDsgZG8gJChJTlNUQUxMX0RBVEEpICQoc3JjZGlyKS9gYmFzZW5hbWUgJCRpYCAkKElOU1RBTExfUFJFRklYKSQobWFuMWRpcikgOyBlY2hvICJpbnN0YWxsOiAgaW5zdGFsbGVkICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQobWFuMWRpcikiIDsgZG9uZQogCUAkKElOU1RBTExfREFUQSkgJChNQU4xRykgJChJTlNUQUxMX1BSRUZJWCkkKG1hbjFkaXIpCiAJQGZvciBpIGluICQoTUFOMUcpIDsgZG8gZWNobyAiaW5zdGFsbDogIGluc3RhbGxlZCAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKG1hbjFkaXIpIiA7IGRvbmUKLQlAZm9yIGkgaW4gJChNQU4zKSA7IGRvICQoSU5TVEFMTF9EQVRBKSAkKHNyY2RpcikvJCRpICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKSA7IGVjaG8gImluc3RhbGw6ICBpbnN0YWxsZWQgJCRpIGluICQoSU5TVEFMTF9QUkVGSVgpJChtYW4zZGlyKSIgOyBkb25lCisJI0VNUFRZIExJU1QjQGZvciBpIGluICQoTUFOMykgOyBkbyAkKElOU1RBTExfREFUQSkgJChzcmNkaXIpLyQkaSAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikgOyBlY2hvICJpbnN0YWxsOiAgaW5zdGFsbGVkICQkaSBpbiAkKElOU1RBTExfUFJFRklYKSQobWFuM2RpcikiIDsgZG9uZQogCUAkKElOU1RBTExfREFUQSkgJChNQU4zRykgJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpCiAJQGZvciBpIGluICQoTUFOM0cpIDsgZG8gZWNobyAiaW5zdGFsbDogIGluc3RhbGxlZCAkJGkgaW4gJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpIiA7IGRvbmUKIAlAJChJTlNUQUxMX0RBVEEpICQoTUFOQUxJQVNFUykgJChJTlNUQUxMX1BSRUZJWCkkKG1hbjNkaXIpCkBAIC0yNzQsMTEgKzI4MiwxMSBAQAogIwogaHRtbDogJChNQU5BTEwpCiAJZm9yIGkgaW4gJChNQU5BTEwpOyBkbyBcCi0JICAgaWYgdGVzdCBgd2MgLWwgJCRpIHwgYXdrICd7cHJpbnQgJCQxfSdgICE9IDEgOyB0aGVuIFwKKyMJICAgaWYgdGVzdCBgd2MgLWwgJCRpIHwgYXdrICd7cHJpbnQgJCQxfSdgICE9IDEgOyB0aGVuIFwKIAkJICAgYmFzZT1gZWNobyAkJGkgfCBzZWQgJ3MvLlswLTldJCQvLzsnYCA7IFwKIAkJICAgZWNobyAiPEhUTUw+PEJPRFkgYmdjb2xvcj1cIiNmZmZmZmZcIiBiYWNrZ3JvdW5kPVwiLi4vdWNkLXNubXAtYmczLmdpZlwiPjxQUkU+IiA+ICQkYmFzZS5odG1sOyBcCiAJCSAgIG1hbjJodG1sIC1yIC4vJCRpIHwgJChQRVJMKSAtcCAtZSAncy9IUkVGPVwiLi5cL21hbi5cLy9IUkVGPVwiL2c7cy9cLlsxLTldXC5odG1sLy5odG1sL2c7JyB8IGdyZXAgLXYgJ0NvbnRlbnQtdHlwZTonID4+ICQkYmFzZS5odG1sOyBcCiAJCSAgIGE9IiQkYSAkJGkiOyBcCi0JICAgZmkgOyBcCisjCSAgIGZpIDsgXAogCWRvbmUgO1wKIAkkKFBFUkwpIG1ha2VfaW5kZXgucGwgbWFuX3NlY3Rpb25zLnR4dCAkJGEgPiBpbmRleC5odG1sCmRpZmYgLS1naXQgYS9tYW4vYWRkX21pYmRpci4zIGIvbWFuL2FkZF9taWJkaXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vYWRkX21pYmRpci4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zIGIvbWFuL2FkZF9tb2R1bGVfcmVwbGFjZW1lbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vYWRkX21vZHVsZV9yZXBsYWNlbWVudC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vYWdlbnR4dHJhcC4xLmRlZiBiL21hbi9hZ2VudHh0cmFwLjEuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMTMyNWYKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vYWdlbnR4dHJhcC4xLmRlZgpAQCAtMCwwICsxLDExMCBAQAorLlRIIEFHRU5UWFRSQVAgMSAiMjAgRGVjIDIwMDkiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorYWdlbnR4dHJhcCAtIHNlbmQgYW4gQWdlbnRYIE5vdGlmeVBEVSB0byBhbiBBZ2VudFggbWFzdGVyIGFnZW50CisuU0ggU1lOT1BTSVMKKy5CIGFnZW50eHRyYXAKKy5SSSBbIE9QVElPTlMgXSAiIHRyYXAtb2lkICIgWyAiT0lEIFRZUEUgVkFMVUUiIC4uLl0KKy5TSCBERVNDUklQVElPTgorLkIgYWdlbnR4dHJhcAoraXNzdWVzIGFuIEFnZW50WCBOb3RpZnlQRFUgdG8gYSBtYXN0ZXIgYWdlbnQuIE9uZSBvciBtb3JlIG9iamVjdAoraWRlbnRpZmllcnMgKE9JRHMpIGNhbiBiZSBnaXZlbiBhcyBhcmd1bWVudHMgb24gdGhlIGNvbW1hbmQgbGluZS4KK0EgdHlwZSBhbmQgYSB2YWx1ZSBtdXN0IGFjY29tcGFueSBlYWNoIG9iamVjdCBpZGVudGlmaWVyLgorRWFjaCB2YXJpYWJsZSBuYW1lIGlzIGdpdmVuIGluIHRoZSBmb3JtYXQgc3BlY2lmaWVkIGluCisuSVIgdmFyaWFibGVzKDUpIC4KKy5QUAorLlNIIE9QVElPTlMKKy5QRCAwCisuVFAgNgorLkJJIFwtYyAiXHwgY29udGV4dE5hbWVcXiIKK2lmIHRoZQorLkIgXC1jCitvcHRpb24gaXMgcHJlc2VudCB0aGVuIHRoZSBub3RpZmljYXRpb24gaXMgc2VudCBpbiB0aGUgbm9uZGVmYXVsdCBuYW1lIGNvbnRleHQuCisuVFAKKy5CSSBcLVUgIlx8IHVwdGltZVxeIgoraWYgdGhlCisuQiBcLVUKK29wdGlvbiBpcyBwcmVzZW50IHRoZW4gdGhhdCB2YWx1ZSwgcGFyc2VkIGFzIGNlbnRpc2Vjb25kcywgaXMgdGFrZW4gdG8gYmUgdGhlCitzeXNVcFRpbWUgZmllbGQgb2YgdGhlIGFwcGxpY2F0aW9uLgorLlRQCisuQkkgXC14ICJcfCBBRERSRVNTXF4iCitpZiB0aGUKKy5CIFwteAorb3B0aW9uIGlzIHByZXNlbnQgdGhlbiBjb250YWN0IHRoZSBBZ2VudFggbWFzdGVyIGF0IEFERFJFU1MgYW5kIG5vdCB0aGUgZGVmYXVsdAorb25lLgorLlBECisuUFAKK0FkZGl0aW9uYWxseSBhbGwgdGhlIG9wdGlvbnMgZGVzY3JpYmVkIGluCisuSVIgc25tcGNtZCgxKQordW5kZXIgdGhlCisuQlIgIk1JQiBQQVJTSU5HIE9QVElPTlMiICIsICIgIkxPR0dJTkcgT1BUSU9OUyIgIiBhbmQgIiAiSU5QVVQgT1BUSU9OUyIKK2hlYWRlcnMgYXMgd2VsbCBhcyB0aGUKKy5CUiAtZCAiLCAiIC1EICIsICIgLW0gIiBhbmQgIiAtTQorb3B0aW9ucyBhcmUgc3VwcG9ydGVkLgorLlBQCitJbgorLkkgT0lEIFRZUEUgVkFMVUUKK3RoZSBwYXJzaW5nIG9mIHRoZQorLkkgVkFMVUUKK2ZpZWxkIGlzIGNvbnRyb2xsZWQgYnkgdGhlCisuSSBUWVBFCitmaWVsZC4gVGhlIHBvc3NpYmxlIHZhbHVlcyBmb3IgdGhlCisuSSBUWVBFCitmaWVsZCBpcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBjaGFyYWN0ZXJzOgorLlJTCisuUEQgMAorLlRQIDMKKy5CID0KK0xldAorLkkgT0lECitkZWNpZGUgaG93CisuSSBWQUxVRQorc2hvdWxkIGJlIGludGVycHJldGVkCisuVFAKKy5CIGkKK0lOVEVHRVIKKy5UUAorLkIgdQorVW5zaWduZWQKKy5UUAorLkIgYworQ291bnRlcjMyCisuVFAKKy5CIHMKK09DVEVUIFNUUklORyBvZiBjaGFhY3RlcnMKKy5UUAorLkIgeAorT0NURVQgU1RSSU5HLCBlbnRlcmVkIGFzIGEgc2VxdWVuY2Ugb2Ygb3B0aW9uYWxseSBzcGFjZSBzZXBhcmF0ZWQgaGV4YWRlY2ltYWwKK2RpZ2l0IHBhaXJzCisuVFAKKy5CIGQKK09DVEVUIFNUUklORywgZW50ZXJlZCBhcyBhIHNlcXVlbmNlIG9mIHNwYWNlIHNlcGFyYXRlZCBkZWNpbWFsIGRpZ2l0cyBpbiB0aGUKK3JhbmdlIDAgLSAyNTUKKy5UUAorLkIgbgorTlVMTAorLlRQCisuQiBvCitPQkpFQ1QgSURFTlRJRklFUgorLlRQCisuQiB0CitUaW1lVGlja3MKKy5UUAorLkIgYQorSXBBZGRyZXNzCisuVFAKKy5CIGIKK0JJVFMKKy5QRAorLlJFCit3aGljaCBhcmUgaGFuZGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlCisuQiBzbm1wc2V0Citjb21tYW5kLgorLlBQCisuU0ggRVhBTVBMRVMKK1RvIHNlbmQgYSBnZW5lcmljIGxpbmtVcCB0cmFwIHRvIHRoZSBtYW5hZ2VyIGZvciBpbnRlcmZhY2UgMSB0aGUgZm9sbG93aW5nCitjb21tYW5kIGNhbiBiZSB1c2VkOgorLlBQCithZ2VudHh0cmFwIG5ldFNubXAuMC4zIGlmaW5kZXguMSBpIDEKKy5QUAorLlNIIFNFRSBBTFNPCitzbm1wY21kKDEpLCBzbm1wc2V0KDEpLCB2YXJpYWJsZXMoNSksIFJGQyAyNzQxCmRpZmYgLS1naXQgYS9tYW4vZGVmYXVsdF9zdG9yZS4zLmJvdCBiL21hbi9kZWZhdWx0X3N0b3JlLjMuYm90CmluZGV4IDU2YTM2NzguLmViZDJiZjYgMTAwNjQ0Ci0tLSBhL21hbi9kZWZhdWx0X3N0b3JlLjMuYm90CisrKyBiL21hbi9kZWZhdWx0X3N0b3JlLjMuYm90CkBAIC0xMTEsMTAgKzExMSwxMCBAQAogYWxsb2NhdGlvbiBmYWlsdXJlKS4KIC5UUAogLkJJICJpbnQgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIodV9jaGFyICIgdHlwZSAiLCBjb25zdCBjaGFyICoiIGZ0eXBlICIsIGNvbnN0IGNoYXIgKiIgdG9rZW4gIiwgaW50ICIgc3RvcmUgIiwgaW50ICIgd2hpY2ggIik7IgotQW5hbG9nb3VzIHRvIHRoZSBwcmVjZWVkaW5nIGZ1bmN0aW9uLCBidXQgdGhlCitBbmFsb2dvdXMgdG8gdGhlIHByZWNlZGluZyBmdW5jdGlvbiwgYnV0IHRoZQogLkkgdG9rZW4KIGlzIHByb2Nlc3NlZCBiZWZvcmUgTUlCcyBhcmUgcmVhZCAodGhpcyBpcyB0aGVyZWZvcmUgdXNlZnVsIGZvciBjb250cm9sbGluZwogTUlCIHByb2Nlc3Npbmcgb3B0aW9ucykuCiAuU0ggIlNFRSBBTFNPIgotLkJSIHNubXBfY29uZmlnICIoNSksICIgcmVhZF9jb25maWcgIigzKSIKKy5CUiBzbm1wX2NvbmZpZyAiKDUpLCAiIG5ldHNubXBfY29uZmlnX2FwaSAiKDMpIgogCmRpZmYgLS1naXQgYS9tYW4vZGVmYXVsdF9zdG9yZS4zLnRvcCBiL21hbi9kZWZhdWx0X3N0b3JlLjMudG9wCmluZGV4IGVjNTI2YmIuLmNjMDQ4MjIgMTAwNjQ0Ci0tLSBhL21hbi9kZWZhdWx0X3N0b3JlLjMudG9wCisrKyBiL21hbi9kZWZhdWx0X3N0b3JlLjMudG9wCkBAIC0xLDUgKzEsNCBAQAogLlRIIERFRkFVTFRfU1RPUkUgMyAiMjUgSnVuIDIwMDIiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCi0uVUMgNQogLlNIIE5BTUUKIGRlZmF1bHRfc3RvcmUgXC0gZ2VuZXJpYyBzdG9yYWdlIG9mIGdsb2JhbCBkYXRhLgogLlNIIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9tYW4vZW5jb2RlX2tleWNoYW5nZS4xLmRlZiBiL21hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmCmluZGV4IDc0MTU2MTcuLjIwZjVjYzMgMTAwNjQ0Ci0tLSBhL21hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmCisrKyBiL21hbi9lbmNvZGVfa2V5Y2hhbmdlLjEuZGVmCkBAIC0zLDEzICszLDEzIEBACiBlbmNvZGVfa2V5Y2hhbmdlIC0gcHJvZHVjZSB0aGUgS2V5Q2hhbmdlIHN0cmluZyBmb3IgU05NUHYzCiAuU0ggU1lOT1BTSVMKIC5CIGVuY29kZV9rZXljaGFuZ2UgCi0tdCBtZDV8c2hhMQorXC10IG1kNXxzaGExCiBbXGZJT1BUSU9OU1xmUl0KIC5TSCBERVNDUklQVElPTgogLkIgZW5jb2RlX2tleWNoYW5nZQogcHJvZHVjZXMgYSBLZXlDaGFuZ2Ugc3RyaW5nIHVzaW5nIHRoZSBvbGQgYW5kIG5ldyBwYXNzcGhyYXNlcyAKIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUgb2YgUkZDIDIyNzQgIlVzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwgKFVTTSkgZm9yIAotdmVyc2lvbiAzIG9mIHRoZSBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sIChTTk1QdjMpIi4gXGZCLXRcZlIKK3ZlcnNpb24gMyBvZiB0aGUgU2ltcGxlIE5ldHdvcmsgTWFuYWdlbWVudCBQcm90b2NvbCAoU05NUHYzKSIuIFxmQlwtdFxmUgogb3B0aW9uIGlzIG1hbmRhdG9yeSBhbmQgc3BlY2lmaWVzIHRoZSBoYXNoIHRyYW5zZm9ybSB0eXBlIHRvIHVzZS4KIAogVGhlIHRyYW5zZm9ybSBpcyB1c2VkIHRvIGNvbnZlcnQgcGFzc3BocmFzZSB0byBtYXN0ZXIga2V5IGZvciBhIGdpdmVuCkBAIC0yMCw5ICsyMCw5IEBACiAoaW4gb3JkZXIgbGlzdGVkKToKIC5JUAogY29tbWFuZCBsaW5lIG9wdGlvbnMgKHNlZSAKLS5CIC1OCisuQiBcLU4KIGFuZAotLkIgLU8KKy5CIFwtTwogb3B0aW9ucyBiZWxvdyk7CiAuSVAKIHRoZSBmaWxlIApAQCAtMzUsNyArMzUsNyBAQAogLlNIIE9QVElPTlMKIC5UUAogXGZCXC1FXGZSIFsweF08XGZJZW5naW5lSURcZlI+IEVuZ2luZUlEIHVzZWQgZm9yIEt1bCBnZW5lcmF0aW9uLgotPFxmSWVuZ2luZUlEXGZSPiBpcyBpbnRlcHJldGVkIGFzIGEgaGV4IHN0cmluZyB3aGVuIHByZWNlZWRlZCBieSAweCwKKzxcZkllbmdpbmVJRFxmUj4gaXMgaW50ZXByZXRlZCBhcyBhIGhleCBzdHJpbmcgd2hlbiBwcmVjZWRlZCBieSAweCwKIG90aGVyd2lzZSBpdCBpcyB0cmVhdGVkIGFzIGEgdGV4dCBzdHJpbmcuIElmIG5vIDxcZkllbmdpbmVJRFxmUj4gaXMKIHNwZWNpZmllZCwgaXQgaXMgY29uc3RydWN0ZWQgZnJvbSB0aGUgZmlyc3QgSVAgYWRkcmVzcyBmb3IgdGhlIGxvY2FsCiBob3N0LgpkaWZmIC0tZ2l0IGEvbWFuL2ZpeHByb2MuMS5kZWYgYi9tYW4vZml4cHJvYy4xLmRlZgppbmRleCBlZjkwMDM2Li5hZTg4YTNkIDEwMDY0NAotLS0gYS9tYW4vZml4cHJvYy4xLmRlZgorKysgYi9tYW4vZml4cHJvYy4xLmRlZgpAQCAtMjcsMTAgKzI3LDEwIEBACiBjaGVjayBwcm9jZXNzIGFnYWluc3QgZGF0YWJhc2UgL2xvY2FsL2V0Yy9maXhwcm9jLmNvbmYuCiAuVFAKIC5CIFwta2lsbAota2lsbCBwcm9jZXNzLCB3YWl0IDUgc2Vjb25kcywga2lsbCAtOSBpZiBzdGlsbCBleGlzdAora2lsbCBwcm9jZXNzLCB3YWl0IDUgc2Vjb25kcywga2lsbCBcLTkgaWYgc3RpbGwgZXhpc3QKIC5UUAogLkIgXC1yZXN0YXJ0Ci1raWxsIHByb2Nlc3MsIHdhaXQgNSBzZWNvbmRzLCBraWxsIC05IGlmIHN0aWxsIGV4aXN0LCB0aGVuIHN0YXJ0IGFnYWluCitraWxsIHByb2Nlc3MsIHdhaXQgNSBzZWNvbmRzLCBraWxsIFwtOSBpZiBzdGlsbCBleGlzdCwgdGhlbiBzdGFydCBhZ2FpbgogLlRQCiAuQiBcLWV4aXN0CiBjaGVja3MgaWYgcHJvYyBleGlzdHMgaW4gcHMgJiYgKG1pbiA8PSBudW0uIG9mIHByb2Nlc3NlcyA8PSBtYXgpCmRpZmYgLS1naXQgYS9tYW4vZ2V0X21vZHVsZV9ub2RlLjMgYi9tYW4vZ2V0X21vZHVsZV9ub2RlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL2dldF9tb2R1bGVfbm9kZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vaW5pdF9taWIuMyBiL21hbi9pbml0X21pYi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9pbml0X21pYi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vaW5pdF9taWJfaW50ZXJuYWxzLjMgYi9tYW4vaW5pdF9taWJfaW50ZXJuYWxzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL2luaXRfbWliX2ludGVybmFscy4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vbWFrZV9pbmRleC5wbCBiL21hbi9tYWtlX2luZGV4LnBsCmluZGV4IDdhYjFkZDIuLjM3NTY2YmEgMTAwNjQ0Ci0tLSBhL21hbi9tYWtlX2luZGV4LnBsCisrKyBiL21hbi9tYWtlX2luZGV4LnBsCkBAIC0yNSw2ICsyNSw3IEBACiAJY2hvbXAoJG5hbWUpOwogCWlmICghZXhpc3RzKCRwYWdlc3skbmFtZX0pKSB7CiAJICAgIHByaW50IFNUREVSUiAiJG5hbWUgaXMgaW4gJGluZmlsZSwgYnV0IG5vdCBpbiB0aGUgcmVzdCBvZiB0aGUgYXJncy5cbiI7CisJICAgIHByaW50IFNUREVSUiAiTWFrZSBzdXJlIGl0J3Mgbm90IGxpc3RlZCB0d2ljZSBpbiAkaW5maWxlIVxuIjsKIAl9CiAJb3BlbihILCIkbmFtZS5odG1sIik7CiAJd2hpbGUgKDxIPikgewpkaWZmIC0tZ2l0IGEvbWFuL21hbl9zZWN0aW9ucy50eHQgYi9tYW4vbWFuX3NlY3Rpb25zLnR4dAppbmRleCBiODE4YjBkLi5mY2NlOGY5IDEwMDY0NAotLS0gYS9tYW4vbWFuX3NlY3Rpb25zLnR4dAorKysgYi9tYW4vbWFuX3NlY3Rpb25zLnR4dApAQCAtMSw0ICsxLDUgQEAKICMgU05NUCBiYXNpYyBhcHBsaWNhdGlvbnMKK2VuY29kZV9rZXljaGFuZ2UKIHNubXBjbWQKIHNubXB0cmFuc2xhdGUKIHNubXBnZXQKQEAgLTgsNiArOSw3IEBACiBzbm1wYnVsa3dhbGsKIHNubXBzZXQKIHNubXB0ZXN0Cit0a21pYgogIyBTTk1QICJzZWNvbmQtbGV2ZWwiIGFwcGxpY2F0aW9ucwogc25tcHRhYmxlCiBzbm1wZGVsdGEKQEAgLTE3LDE4ICsxOSwyNSBAQAogc25tcG5ldHN0YXQKIHNubXBkZgogIyBOb3RpZmljYXRpb24gbWFudWFsIHBhZ2VzCitzbm1waW5mb3JtCiBzbm1wdHJhcAogc25tcHRyYXBkCiBzbm1wdHJhcGQuY29uZgordHJhcHRvZW1haWwKICMgU05NUCBhcHBsaWNhdGlvbiBjb25maWd1cmF0aW9uIG1hbnVhbCBwYWdlcworbmV0LXNubXAtY29uZmlnCiBzbm1wY29uZgogc25tcF9jb25maWcKIHNubXAuY29uZgogIyBBZ2VudCBtYW51YWwgcGFnZXMKK2ZpeHByb2MKIHNubXBkCiBzbm1wZC5jb25mCitzbm1wZC5leGFtcGxlcworc25tcGQuaW50ZXJuYWwKIG1pYjJjCiBtaWIyYy5jb25mCittaWIyYy11cGRhdGUKICMgU05NUCBiYXNlIGxpYnJhcnkgQVBJcwogbmV0c25tcF9saWJyYXJ5CiByZWFkX2NvbmZpZwpAQCAtNDEsMzMgKzUwLDEwOSBAQAogbmV0c25tcF9taWJfdXRpbGl0aWVzCiBuZXRzbm1wX2RlYnVnCiAjIEFnZW50IEFQSSBtYW51YWxzCithZGRfbWliZGlyCithZGRfbW9kdWxlX3JlcGxhY2VtZW50Citjb25maWdfcGVycm9yCitjb25maWdfcHdhcm4KK2ZwcmludF9kZXNjcmlwdGlvbgorZnByaW50X29iamlkCitmcHJpbnRfdmFsdWUKK2ZwcmludF92YXJpYWJsZQorZ2V0X21vZHVsZV9ub2RlCitpbml0X21pYgoraW5pdF9taWJfaW50ZXJuYWxzCiBuZXRzbm1wX2FnZW50Ci1zbm1wX2FnZW50X2FwaQotc25tcF90cmFwX2FwaQotbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzCi1uZXRzbm1wX3V0aWxpdGllcwotbmV0c25tcF9oYW5kbGVyCi1uZXRzbm1wX3NjYWxhcgogbmV0c25tcF9iYWJ5X3N0ZXBzCiBuZXRzbm1wX2J1bGtfdG9fbmV4dAotbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAKLW5ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50Ci1uZXRzbm1wX3RhYmxlX2RhdGFzZXQKLW5ldHNubXBfaXRlcmF0b3JfaW5mb19zCi1uZXRzbm1wX29sZF9hcGkKLW5ldHNubXBfd2F0Y2hlcgotbmV0c25tcF90YWJsZV9hcnJheQotbmV0c25tcF9tdWx0aXBsZXhlcgotbmV0c25tcF9zZXJpYWxpemUKIG5ldHNubXBfY2FjaGVfaGFuZGxlcgotbmV0c25tcF9Db250YWluZXJfaXRlcmF0b3IKLW5ldHNubXBfdGFibGVfaXRlcmF0b3IKLW5ldHNubXBfdGFibGUKLW5ldHNubXBfdGFibGVfZGF0YQotbmV0c25tcF9zdGFzaF9jYWNoZQotbmV0c25tcF9yb3dfbWVyZ2UKLW5ldHNubXBfcmVhZF9vbmx5Ci1uZXRzbm1wX2xlYWYKLW5ldHNubXBfaW5zdGFuY2UKIG5ldHNubXBfY29udGFpbmVyCituZXRzbm1wX0NvbnRhaW5lcl9pdGVyYXRvcgorbmV0c25tcF9kc19nZXRfYm9vbGVhbgorbmV0c25tcF9kc19nZXRfaW50CituZXRzbm1wX2RzX2dldF9zdHJpbmcKK25ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnCituZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYgorbmV0c25tcF9kc19zZXRfYm9vbGVhbgorbmV0c25tcF9kc19zZXRfaW50CituZXRzbm1wX2RzX3NldF9zdHJpbmcKK25ldHNubXBfZHNfc2h1dGRvd24KK25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50CituZXRzbm1wX2hhbmRsZXIKK25ldHNubXBfaW5zdGFuY2UKK25ldHNubXBfaXRlcmF0b3JfaW5mb19zCituZXRzbm1wX2xlYWYKK25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcwogbmV0c25tcF9tb2RlX2VuZF9jYWxsCituZXRzbm1wX211bHRpcGxleGVyCituZXRzbm1wX29sZF9hcGkKK25ldHNubXBfcmVhZF9vbmx5CituZXRzbm1wX3Jvd19tZXJnZQorbmV0c25tcF9zY2FsYXIKK25ldHNubXBfc2NhbGFyX2dyb3VwX2dyb3VwCituZXRzbm1wX3NlcmlhbGl6ZQorbmV0c25tcF9zdGFzaF9jYWNoZQorbmV0c25tcF90YWJsZQorbmV0c25tcF90YWJsZV9hcnJheQorbmV0c25tcF90YWJsZV9kYXRhCituZXRzbm1wX3RhYmxlX2RhdGFzZXQKK25ldHNubXBfdGFibGVfaXRlcmF0b3IKK25ldHNubXBfdXRpbGl0aWVzCituZXRzbm1wX3dhdGNoZXIKK3ByaW50X2Rlc2NyaXB0aW9uCitwcmludF9taWIKK3ByaW50X29iamlkCitwcmludF92YWx1ZQorcHJpbnRfdmFyaWFibGUKK3JlYWRfYWxsX21pYnMKK3JlYWRfY29uZmlnX3ByaW50X3VzYWdlCityZWFkX2NvbmZpZ3MKK3JlYWRfbWliCityZWFkX21vZHVsZQorcmVhZF9tb2R1bGVfbm9kZQorcmVhZF9vYmppZAorcmVhZF9wcmVtaWJfY29uZmlncworcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCityZWdpc3Rlcl9hcHBfcHJlbWliX2hhbmRsZXIKK3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCityZWdpc3Rlcl9taWJfaGFuZGxlcnMKK3JlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyCitzZW5kX2Vhc3lfdHJhcAorc2VuZF90cmFwX3ZhcnMKK3NlbmRfdjJ0cmFwCitzaHV0ZG93bl9taWIKK3NubXBfYWdlbnRfYXBpCitzbm1wX2FsYXJtX3JlZ2lzdGVyCitzbm1wX2FsYXJtX3JlZ2lzdGVyX2hyCitzbm1wX2FsYXJtX3VucmVnaXN0ZXIKK3NubXBfYXBpX2VycnN0cmluZworc25tcF9jbG9zZQorc25tcF9lcnJvcgorc25tcF9mcmVlX3BkdQorc25tcF9vcGVuCitzbm1wX3BlcnJvcgorc25tcF9yZWFkCitzbm1wX3NlbGVjdF9pbmZvCitzbm1wX3NlbmQKK3NubXBfc2Vzc19hc3luY19zZW5kCitzbm1wX3Nlc3NfY2xvc2UKK3NubXBfc2Vzc19lcnJvcgorc25tcF9zZXNzX2luaXQKK3NubXBfc2Vzc19vcGVuCitzbm1wX3Nlc3NfcGVycm9yCitzbm1wX3Nlc3NfcmVhZAorc25tcF9zZXNzX3NlbGVjdF9pbmZvCitzbm1wX3Nlc3Nfc2VuZAorc25tcF9zZXNzX3Nlc3Npb24KK3NubXBfc2Vzc190aW1lb3V0Citzbm1wX3NldF9taWJfd2FybmluZ3MKK3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zCitzbm1wX3RpbWVvdXQKK3NubXBfdHJhcF9hcGkKK3NucHJpbnRfb2JqaWQKK3NucHJpbnRfdmFsdWUKK3NucHJpbnRfdmFyaWFibGUKK3NwcmludF9yZWFsbG9jX29iamlkCitzcHJpbnRfcmVhbGxvY192YWx1ZQorc3ByaW50X3JlYWxsb2NfdmFyaWFibGUKK3VucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCit1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbWFuL21pYjJjLXVwZGF0ZS4xLmRlZiBiL21hbi9taWIyYy11cGRhdGUuMS5kZWYKaW5kZXggYmQ5YWQ5My4uNTJlY2U4YSAxMDA2NDQKLS0tIGEvbWFuL21pYjJjLXVwZGF0ZS4xLmRlZgorKysgYi9tYW4vbWliMmMtdXBkYXRlLjEuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIG1pYjJjLXVwZGF0ZSAiMSIgIjE2IE5vdiAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIG1pYjJjLXVwZGF0ZSAxICIwNyBBcHIgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBtaWIyYy11cGRhdGUgLSBzY3JpcHQgdG8gbWVyZ2UgY3VzdG9tIGNvZGUgaW50byB1cGRhdGVkIG1pYjJjIGNvZGUKIC5TSCBTWU5PUFNJUwpAQCAtNiw0ICs2LDIzIEBACiAuQiBtaWIyYy11cGRhdGUKIC5TSCBERVNDUklQVElPTgogLlBQCi1tZXJnZXMgY3VzdG9tIGNvZGUgaW50byB1cGRhdGVkIG1pYjJjIGNvZGUKK1VzZSBtaWIyYy11cGRhdGUgdG8gZ2VuZXJhdGUgeW91ciBtaWIyYyBjb2RlIHRlbXBsYXRlcywgYW5kIGl0IHdpbGwgdHJhY2sKK3RoZSBvcmlnaW5hbCBjb2RlIGFuZCB0aGUgY2hhbmdlcyB5b3UgbWFrZSB0byB0aGUgY29kZS4gSWYgdGhlIG1pYjJjCit0ZW1wbGF0ZSBjaGFuZ2VzIChidWcgZml4ZXMsIGVuaGFuY2VzIGluIGxhdGVyIHJlbGVhc2VzKSwgcmUtcnVubmluZworbWliMmMgd2lsbCB1cGRhdGUgdGhlIHRlbXBsYXRlIGFuZCB0aGVuIGF0dGVtcHQgdG8gcmUtYXBwbHkgeW91cgorY2hhbmdlcy4KKy5QUAorVGhpcyBjYW4gYmUgZXh0cmVtZWx5IHVzZWZ1bCB3aGVuIGRldmVsb3BpbmcgeW91ciBvd24gbWliMmMgdGVtcGxhdGVzLgorLlBQCitXaGVuIHlvdSBmaXJzdCBydW4gbWliMmMtdXBkYXRlLCBpdCB3aWxsIGNyZWF0ZSBzZXZlcmFsIGhpZGRlbgorZGlyZWN0b3JpZXMgYW5kIGEgLm1pYjJjLXVwZGF0ZXJjIGZpbGUuIFlvdSBtdXN0IGVkaXQgdGhlIC5taWIyYy11ZHBhdGVyYworZmlsZSB0byBzcGVjaWZ5IHR3byB2YWx1ZXMuIFRoZSBmaXJzdCwgVVBEQVRFX09JRCwgaXMgdGhlIHRhYmxlIG5hbWUKK3RvIHNwZWNpZnkgd2hlbiBydW5uaW5nIG1pYjJjLiBUaGUgc2Vjb25kLCBVUERBVEVfQ09ORiwgaXMgdGhlIG1pYjJjCitjb25maWd1cmF0aW9uIGZpbGUgdG8gc3BlY2lmeSB3aGVuIHJ1bm5pbmcgbWliMmMuCisuUFAKK0FkZGl0aW9uYWwgbWliMmMgb3B0aW9ucyBjYW4gYmUgc3BlY2lmaWVkIGluIFVQREFURV9NSUIyQ19PUFRTLgorLlBQCisuU0ggQlVHUworLlBQCittaWIyYy11cGRhdGUgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgb24gaW5kaXZpZHVhbCB0YWJsZXMuIFNwZWNpZnlpbmcKK2Egc2NhbGFyIG9yIGFuZCBlbnRpcmUgTUlCIG1pZ2h0IG5vdCB3b3JrLgpkaWZmIC0tZ2l0IGEvbWFuL21pYjJjLjEuZGVmIGIvbWFuL21pYjJjLjEuZGVmCmluZGV4IDBiOGM5ODkuLmI5YzExMzQgMTAwNjQ0Ci0tLSBhL21hbi9taWIyYy4xLmRlZgorKysgYi9tYW4vbWliMmMuMS5kZWYKQEAgLTcsMTIgKzcsMTIgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggTUlCMkMgMSAiMSBTZXAgMjAwNCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBNSUIyQyAxICIwNSBBcHIgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBtaWIyYyAtLSBnZW5lcmF0ZSB0ZW1wbGF0ZSBjb2RlIGZvciBleHRlbmRpbmcgdGhlIGFnZW50CiAuU0ggU1lOT1BTSVMKIC5CIG1pYjJjCi1bLWhdIC1jIENPTkZJR0ZJTEUgWy1JIFBBVEhdIFstZiBPVVROQU1FXSBbLWldW3FdWy1TIFZBUj1WQUxdIE1JQk5PREUKK1staF0gLWMgQ09ORklHRklMRSBbLUkgUEFUSF0gWy1mIE9VVE5BTUVdIFstaV1bLXNdWy1xXVstUyBWQVI9VkFMXSBNSUJOT0RFCiAuU0ggREVTQ1JJUFRJT04KIFRoZSBtaWIyYyB0b29sIGlzIGRlc2lnbmVkIHRvIHRha2UgYSBwb3J0aW9uIG9mIHRoZSBNSUIgdHJlZSAoYXMgZGVmaW5lZAogYnkgYSBNSUIgZmlsZSkgYW5kIGdlbmVyYXRlIHRoZSB0ZW1wbGF0ZSBDIGNvZGUgbmVjZXNzYXJ5IHRvIGltcGxlbWVudApAQCAtMTc1LDYgKzE3NSwxMCBAQAogLkJJIC1pCiBEbyBub3QgcnVuIGluZGVudCBvbiB0aGUgcmVzdWx0aW5nIGNvZGUuCiAuVFAKKy5CSSAtcworRG8gbm90IGxvb2sgZm9yIE1JQk5PREUuc2VkIGFuZCBydW4gc2VkIG9uIHRoZSByZXN1bHRpbmcgY29kZS4gVGhpcworaXMgdXNlZnVsIHRvIHNob3J0ZW4gbG9uZyBtaWIgdmFyaWFibGUgbmFtZXMgaW4gdGhlIGNvZGUuCisuVFAKIC5CSSAtcQogUnVuIGluICJxdWlldCIgbW9kZSwgd2hpY2ggbWluaW1pemVzIHRoZSBzdGF0dXMgbWVzc2FnZXMKIG1pYjJjIGdlbmVyYXRlcy4KZGlmZiAtLWdpdCBhL21hbi9taWIyYy5jb25mLjUuaW4gYi9tYW4vbWliMmMuY29uZi41LmluCmluZGV4IDliZWY4NzUuLjM2OTJhNjUgMTAwNjQ0Ci0tLSBhL21hbi9taWIyYy5jb25mLjUuaW4KKysrIGIvbWFuL21pYjJjLmNvbmYuNS5pbgpAQCAtMSw3ICsxLDYgQEAKLS5USCBNSUIyQy5DT05GIDUgIjI4IEFwciAyMDA0IiBWNS4yICJOZXQtU05NUCIKLS5VQyA0CisuVEggTUlCMkMuQ09ORiA1ICIyOCBBcHIgMjAwNCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCi1taWIyYy5jb25mIC0tIEhvdyB0byB3cml0ZSBtaWIyYy5jb25mIGZpbGVzIHRvIGRvIEFOWVRISU5HIGJhc2VkIG9uIE1JQiBpbnB1dC4KK21pYjJjLmNvbmYgXFtlbV0gSG93IHRvIHdyaXRlIG1pYjJjLmNvbmYgZmlsZXMgdG8gZG8gQU5ZVEhJTkcgYmFzZWQgb24gTUlCIGlucHV0LgogLlNIIFNZTk9QU0lTCiAlIGNhdCA+IG1pYjJjLnRlc3QuY29uZiAgPDwgRU9GCiBAZm9yZWFjaCAkdCB0YWJsZUAKQEAgLTEzLDcgKzEyLDcgQEAKIEBlbmRACiBFT0YKIAotJSBtaWIyYyAtYyBtaWIyYy50ZXN0LmNvbmYgaW50ZXJuZXQKKyUgbWliMmMgXC1jIG1pYjJjLnRlc3QuY29uZiBpbnRlcm5ldAogLlNIIERFU0NSSVBUSU9OCiBUaGUgbWliMmMuY29uZiBzY3JpcHQgbGFuZ3VhZ2UgaXMgYSBNSUItcGFydGljdWxhciBsYW5ndWFnZSBkZXNpZ25lZAogdG8gZWFzaWx5IHByb2Nlc3MgTUlCIG5vZGVzIGluIHdheXMgdGhhdCB5b3Ugd2FudC4gIG1pYjJjIGlzIGEKZGlmZiAtLWdpdCBhL21hbi9taWJfYXBpLjMuZGVmIGIvbWFuL21pYl9hcGkuMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDViNmQxYjAuLjAwMDAwMDAKLS0tIGEvbWFuL21pYl9hcGkuMy5kZWYKKysrIC9kZXYvbnVsbApAQCAtMSwzMjIgKzAsMCBAQAotLlRIIE1JQl9BUEkgMyAiMjIgQXByIDIwMDkiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCi0uU0ggTkFNRQotaW5pdF9taWIsIGFkZF9taWJkaXIsIGluaXRfbWliX2ludGVybmFscywKLWFkZF9tb2R1bGVfcmVwbGFjZW1lbnQsCi1yZWFkX21vZHVsZSwgcmVhZF9taWIsIHJlYWRfYWxsX21pYnMsCi1yZWFkX29iamlkLCByZWFkX21vZHVsZV9ub2RlLCBnZXRfbW9kdWxlX25vZGUsCi1zbm1wX3NldF9taWJfd2FybmluZ3MsIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLAotc2h1dGRvd25fbWliLAotcHJpbnRfbWliLAotcHJpbnRfdmFyaWFibGUsIGZwcmludF92YXJpYWJsZSwgc25wcmludF92YXJpYWJsZSwgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUsCi1wcmludF92YWx1ZSwgZnByaW50X3ZhbHVlLCBzbnByaW50X3ZhbHVlLCBzcHJpbnRfcmVhbGxvY192YWx1ZSwKLXByaW50X29iamlkLCBmcHJpbnRfb2JqaWQsIHNucHJpbnRfb2JqaWQsIHNwcmludF9yZWFsbG9jX29iamlkLAotcHJpbnRfZGVzY3JpcHRpb24sIGZwcmludF9kZXNjcmlwdGlvbiAtIG1pYl9hcGkgZnVuY3Rpb25zCi0uU0ggU1lOT1BTSVMKLS5CICNpbmNsdWRlIDxuZXQtc25tcC9taWJfYXBpLmg+Ci0uUFAKLS5CICJ2b2lkIGluaXRfbWliKHZvaWQpOwotLmJyCi0uQkkgImludCBhZGRfbWliZGlyKGNvbnN0IGNoYXIgKiIgImRpcm5hbWUiICk7Ci0uYnIKLS5CSSAiaW50IGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQoY29uc3QgY2hhciAqIiAib2xkX21vZHVsZSIgIiwgY29uc3QgY2hhciAqIiAibmV3X21vZHVsZSIgIiwgY29uc3QgY2hhciAqIiAidGFnIiAiLCBpbnQgIiAibGVuIiApOwotLmJyCi0uQiAidm9pZCBpbml0X21pYl9pbnRlcm5hbHModm9pZCk7Ci0uYnIKLS5CSSAic3RydWN0IHRyZWUgKnJlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKiIgIm5hbWUiICk7Ci0uYnIKLS5CSSAic3RydWN0IHRyZWUgKnJlYWRfbWliKGNvbnN0IGNoYXIgKiIgImZpbGVuYW1lIiApOwotLmJyCi0uQiAic3RydWN0IHRyZWUgKnJlYWRfYWxsX21pYnModm9pZCk7Ci0uUFAKLS5CICJ2b2lkIHNodXRkb3duX21pYih2b2lkKTsKLS5QUAotLkJJICJ2b2lkIHByaW50X21pYihGSUxFICoiICJmcCIgKTsKLS5QUAotLkJJICJpbnQgcmVhZF9vYmppZChjb25zdCBjaGFyICoiICJpbnB1dCIgIiwgb2lkICoiICJvdXRwdXQiICIsIHNpemVfdCAqIiAib3V0X2xlbiIgKTsKLS5icgotLkJJICJpbnQgZ2V0X21vZHVsZV9ub2RlKGNvbnN0IGNoYXIgKiIgIm5hbWUiICIsIGNvbnN0IGNoYXIgKiIgIm1vZHVsZSIgIiwgb2lkICoiICJvYmppZCIgIiwgc2l6ZV90ICoiICJvYmppZGxlbiIgKTsKLS5QUAotLkJJICJ2b2lkIHByaW50X3ZhcmlhYmxlKGNvbnN0IG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAiICJvYmppZGxlbiIgIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiICJ2YXJpYWJsZSIgKTsKLS5icgotLkJJICJ2b2lkIGZwcmludF92YXJpYWJsZShGSUxFICoiIGZwICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgKTsKLS5icgotLkJJICJpbnQgc25wcmludF92YXJpYWJsZShjaGFyICoiICJidWYiICIsIHNpemVfdCAiICJsZW4iICIsIGNvbnN0IG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAiICJvYmppZGxlbiIgIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiICJ2YXJpYWJsZSIgKTsKLS5icgotLkJJICJpbnQgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUodV9jaGFyICoqIiBidWYgIiwgc2l6ZV90ICoiIGJ1Zl9sZW4gIiwgc2l6ZV90ICoiIG91dF9sZW4gIiwgaW50ICIgYWxsb3dfcmVhbGxvYyAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICk7Ci0uUFAKLS5CSSAidm9pZCBwcmludF92YWx1ZShvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyaWFibGUpCi0uYnIKLS5CSSAidm9pZCBmcHJpbnRfdmFsdWUoRklMRSAqIiBmcCAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICk7Ci0uYnIKLS5CSSAiaW50IHNucHJpbnRfdmFsdWUoY2hhciAqIiBidWYgIiwgc2l6ZV90ICIgImxlbiIgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSApOwotLmJyCi0uQkkgImludCBzcHJpbnRfcmVhbGxvY192YWx1ZSh1X2NoYXIgKioiIGJ1ZiAiLCBzaXplX3QgKiIgYnVmX2xlbiAiLCBzaXplX3QgKiIgb3V0X2xlbiAiLCBpbnQgIiBhbGxvd19yZWFsbG9jICIsIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgKTsKLS5QUAotLkJJICJ2b2lkIHByaW50X29iamlkKGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiApOwotLmJyCi0uQkkgInZvaWQgZnByaW50X29iamlkKEZJTEUgKiIgZnAgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICk7Ci0uYnIKLS5CSSAiaW50IHNucHJpbnRfb2JqaWQoY2hhciAqIiBidWYgIiwgc2l6ZV90ICIgImxlbiIgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICk7Ci0uYnIKLS5CSSAiaW50IHNwcmludF9yZWFsbG9jX29iamlkKHVfY2hhciAqKiIgYnVmICIsIHNpemVfdCAqIiBidWZfbGVuICIsIHNpemVfdCAqIiBvdXRfbGVuICIsIGludCAiYWxsb3dfcmVhbGxvYyAiLCBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gKTsKLS5QUAotLkJJICJ2b2lkIHByaW50X2Rlc2NyaXB0aW9uKG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBpbnQgIiB3aWR0aCApOwotLmJyCi0uQkkgInZvaWQgZnByaW50X2Rlc2NyaXB0aW9uKEZJTEUgKiIgZnAgIiwgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGludCAiIHdpZHRoICk7Ci0uUFAKLS5CSSAidm9pZCBzbm1wX3NldF9taWJfd2FybmluZ3MoaW50ICIgbGV2ZWwgKTsKLS5icgotLkJJICJ2b2lkIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKGludCAiIHNhdmUgIik7IgotLlBQCi0uU0ggREVTQ1JJUFRJT04KLVRoZSBmdW5jdGlvbnMgZGVhbGluZyB3aXRoIE1JQiBtb2R1bGVzIGZhbGwgaW50byBmb3VyIGdyb3Vwcy4gIFRob3NlCi1kZWFsaW5nIHdpdGggaW5pdGlhbGlzYXRpb24gYW5kIHNodXRkb3duLCB0aG9zZSB0aGF0IHJlYWQgaW4gYW5kCi1wYXJzZSBNSUIgZmlsZXMsIHRob3NlIHRoYXQgc2VhcmNoIHRoZSBNSUIgdHJlZSwgYW5kIHZhcmlvdXMgb3V0cHV0Ci1yb3V0aW5lcy4KLS5TUyBJbml0aWFsaXNhdGlvbiBhbmQgU2h1dGRvd24KLS5CIGluaXRfbWliCi1pcyBhIGNvbnZlbmllbmNlIGZ1bmN0aW9uIHRoYXQgaGFuZGxlcyBhbGwgY2FsbHMgdG8KLS5CUiBhZGRfbWliZGlyICIsICIgcmVhZF9tb2R1bGUgIiBhbmQgIiByZWFkX21pYgotZm9yIHN0YW5kYXJkIGFwcGxpY2F0aW9ucy4gIEl0IHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIGFueSBvdGhlcgotcm91dGluZSB0aGF0IG1hbmlwdWxhdGVzIG9yIGFjY2Vzc2VzIHRoZSBNSUIgdHJlZS4gIFRoaXMgcm91dGluZSBzZXRzCi11cCB2YXJpb3VzIGludGVybmFsIHN0cnVjdHVyZXMsIGFzIHdlbGwgYXMgcmVhZGluZyBpbiB0aGUgZGVmYXVsdCBNSUIKLW1vZHVsZXMsIGFzIGRldGFpbGVkIGJlbG93LgotLlBQCi0uQiBhZGRfbWliZGlyCi1pcyB1c2VkIHRvIGRlZmluZSB0aGUgcmFuZ2Ugb2YgZGlyZWN0b3J5IGxvY2F0aW9ucyB3aGljaCBhcmUgc2VhcmNoZWQKLWZvciBmaWxlcyBjb250YWluaW5nIE1JQiBtb2R1bGVzIChvbmUgbW9kdWxlIHBlciBmaWxlKS4gIEJ5IGRlZmF1bHQsCi10aGlzIHdpbGwgYmUgc2V0IHRvIHRoZSBkaXJlY3RvcnkKLS5JIERBVEFESVIvbWlicwotYnV0IHRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLS5JIE1JQkRJUlMKLXRvIGEgKGNvbG9uLXNlcGFyYXRlZCkgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2guCi1Ob3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3R1YWxseSBsb2FkIHRoZSBNSUIgbW9kdWxlcyBsb2NhdGVkCi1pbiB0aGF0IGRpcmVjdG9yeSwgYnV0IGlzIGFuIGluaXRpYWxpc2F0aW9uIHN0ZXAgdG8gbWFrZSB0aGVtIGF2YWlsYWJsZS4KLVRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGNvdW50IG9mIGZpbGVzIGZvdW5kIGluIHRoZSBkaXJlY3RvcnksIG9yIGEgLTEKLWlmIHRoZXJlIGlzIGFuIGVycm9yLiAgCi0uUFAKLS5CIGluaXRfbWliX2ludGVybmFscwotc2V0cyB1cCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcywgcHJlcGFyYXRvcnkgdG8gcmVhZGluZyBpbiBNSUIKLW1vZHVsZXMuICBJdCBzaG91bGQgYmUgY2FsbGVkIGFmdGVyIGFsbCBjYWxscyB0bwotLkJSIGFkZF9taWJkaXIgLAotYW5kIGJlZm9yZSBhbmQgY2FsbHMgdG8KLS5CUiByZWFkX21vZHVsZSAuCi1UaGlzIGlzIGNhbGxlZCBhdXRvbWF0aWNhbGx5IGlmCi0uQiBpbml0X21pYgotaXMgdXNlZC4KLS5QUAotLkIgc2h1dGRvd25fbWliCi13aWxsIGNsZWFyIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdhcyBnYXRoZXJlZCBieSAKLS5CUiByZWFkX21vZHVsZSAiLCAiIGFkZF9taWJkaXIgIiBhbmQgIiBhZGRfbW9kdWxlX3JlcGxhY2VtZW50IC4KLUl0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgb25lIGRvZXMgbm90IGludm9rZQotLkJSIHNodXRkb3duX21pYgotd2hpbGUgdGhlcmUgYXJlIFNOTVAgc2Vzc2lvbnMgYmVpbmcgYWN0aXZlbHkgbWFuYWdlZC4KLS5TUyBSZWFkaW5nIGFuZCBQYXJzaW5nIE1JQnMKLS5CIGFkZF9tb2R1bGVfcmVwbGFjZW1lbnQKLWNhbiBiZSB1c2VkIHRvIGFsbG93IG5ldyBNSUIgbW9kdWxlcyB0byBvYnNvbGV0ZSBvbGRlciBvbmVzLCB3aXRob3V0Ci1uZWVkaW5nIHRvIGFtZW5kIHRoZSBpbXBvcnRzIGNsYXVzZXMgb2Ygb3RoZXIgbW9kdWxlcy4gIEl0IHRha2VzIHRoZQotbmFtZXMgb2YgdGhlIG9sZCBhbmQgbmV3IG1vZHVsZXMsIHRvZ2V0aGVyIHdpdGggYW4gaW5kaWNhdGlvbiBvZiB3aGljaAotcG9ydGlvbnMgb2YgdGhlIG9sZCBtb2R1bGUgYXJlIGFmZmVjdGVkLgotLlJTCi0uVFMKLXRhYigrKTsKLWxiIGxiIGxiCi1sICBsICBsLgotdGFnICsgbGVuICsgbG9hZCB0aGUgbmV3IG1vZHVsZSB3aGVuOgotTlVMTCArIDAgKyBhbHdheXMgKHRoZSBvbGQgbW9kdWxlIGlzIGEgc3RyaWN0IHN1YnNldCBvZgotICsgKyB0aGUgbmV3KQotbmFtZSArIDAgKyBmb3IgdGhlIGdpdmVuIHRhZyBvbmx5Ci1uYW1lICsgbm9uLTAgKyBmb3IgYW55IGlkZW50aWZpZXIgd2l0aCB0aGlzIHByZWZpeAotLlRFCi0uUkUKLUl0IGNhbiBhbHNvIGJlIHVzZWQgdG8gaGFuZGxlIGVycm9ycyBpbiB0aGUgbW9kdWxlIGlkZW50aWZpZXJzIHVzZWQKLWluIE1JQiBpbXBvcnQgY2xhdXNlcyAoc3VjaCBhcyByZWZlcnJpbmcgdG8KLS5JIFJGQzEyMTMKLWluc3RlYWQgb2YKLS5JUiBSRkMxMjEzLU1JQiApLgotLlBQCi0uQiByZWFkX21vZHVsZQotbG9jYXRlcyBhbmQgcGFyc2VzIHRoZSBtb2R1bGUgc3BlY2lmaWVkLCB0b2dldGhlciB3aXRoIGFueSBtb2R1bGVzCi10aGF0IGl0IGltcG9ydHMgZnJvbSwgYW5kIGFkZHMgdGhlIGNvbnRlbnRzIG9mIHRoZXNlIG1vZHVsZXMgdG8gdGhlCi1hY3RpdmUgTUlCIHRyZWUuICBOb3RlIHRoYXQKLS5CIGFkZF9taWJkaXIKLW11c3QgZmlyc3QgYmUgY2FsbGVkIHRvIGFkZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGZpbGUgd2l0aCB0aGUKLW1vZHVsZSBkZWZpbml0aW9uLCBpZiB0aGlzIGlzIG5vdCBpbiB0aGUgc3RhbmRhcmQgcGF0aC4KLS5icgotQnkgZGVmYXVsdCwgdGhlIGZvbGxvd2luZyBNSUIgbW9kdWxlcyB3aWxsIGJlIGxvYWRlZDogIElQLU1JQiwgSUYtTUlCLAotVENQLU1JQiwgVURQLU1JQiwgU05NUHYyLU1JQiwgUkZDMTIxMy1NSUIsIFVDRC1TTk1QLU1JQi4KLVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUKLS5JIE1JQlMKLXRvIGEgKGNvbG9uLXNlcGFyYXRlZCkgbGlzdCBvZiBtb2R1bGVzIHRvIGxvYWQuCi1JZiB0aGlzIHZhcmlhYmxlIHN0YXJ0cyB3aXRoIGEgcGx1cyBjaGFyYWN0ZXIsIHRoZW4gdGhlIHNwZWNpZmllZCBtb2R1bGVzCi1hcmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQgbGlzdC4gIE90aGVyd2lzZSBvbmx5IHRob3NlIG1vZHVsZXMgbGlzdGVkIGFyZQotbG9hZGVkICh0b2dldGhlciB3aXRoIGFueSBvdGhlcnMgdGhleSBpbXBvcnQgZnJvbSkuCi1JZgotLkkgTUlCUwotaXMgc2V0IHRvCi0uSVIgQUxMICwKLS5CIHJlYWRfYWxsX21pYnMKLWlzIGNhbGxlZCB0byBsb2FkIGFsbCB0aGUgTUlCIGZpbGVzIGZvdW5kIGluIGFsbCB0aGUgc3BlY2lmaWVkCi0uSVIgTUlCRElSUyAuCi0uUFAKLS5CIHJlYWRfbWliCi1wYXJzZXMgdGhlIGZpbGUgc3BlY2lmaWVkLCB0b2dldGhlciB3aXRoIGFueSBtb2R1bGVzIHRoYXQgaXQgaW1wb3J0cwotZnJvbSwgYW5kIGFkZHMgdGhlIGNvbnRlbnRzIHRvIHRoZSBhY3RpdmUgTUlCIHRyZWUuICBTdWNoIGEgZmlsZSBjYW4KLWNvbnRhaW4gbW9yZSB0aGVuIG9uZSBtb2R1bGUsIHRob3VnaCBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCBhbnkKLWltcG9ydHMgb2NjdXIgZWFybGllciBpbiB0aGUgZmlsZSwgaWYgdGhleSBhcmUgbm90IHRvIGJlIHJlYWQgZnJvbSB0aGUKLWluc3RhbGxlZCBtb2R1bGVzLiAgTm90ZSB0aGF0IHRoZSBmaWxlIHNwZWNpZmllZCBkb2VzIG5vdCBuZWVkIHRvIGJlCi1pbiBhbnkgb2YgdGhlIGRpcmVjdG9yaWVzIGluaXRpYWxpc2VkIGJ5Ci0uQiBhZGRfbWliZGlyCi0ob3IgdGhlIGRlZmF1bHQgc2V0dXApLCB0aG91Z2ggYW55IGltcG9ydGVkIG1vZHVsZXMgZG8uCi0uYnIKLVRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZQotLkkgTUlCRklMRVMKLWNhbiBiZSBzZXQgdG8gYSAoY29sb24tc2VwYXJhdGVkKSBsaXN0IG9mIGZpbGVzIGNvbnRhaW5pbmcgTUlCcyB0byBsb2FkLgotLlBQCi0uQiByZWFkX29iamlkCi10YWtlcyBhIHN0cmluZyBjb250YWluaW5nIGEgdGV4dHVhbCB2ZXJzaW9uIG9mIGFuIG9iamVjdCBpZGVudGlmaWVyCi0oaW4gZWl0aGVyIG51bWVyaWMgb3IgZGVzY3JpcHRvciBmb3JtKSwgYW5kIHRyYW5zZm9ybXMgdGhpcyBpbnRvIHRoZQotY29ycmVzcG9uZGluZyBsaXN0IG9mIHN1Yi1pZGVudGlmaWVycy4gIFRoaXMgaXMgcmV0dXJuZWQgaW4gdGhlCi0uSSBvdXRwdXQKLXBhcmFtZXRlciwgd2l0aCB0aGUgbnVtYmVyIG9mIHN1Yi1pZGVudGlmaWVycyByZXR1cm5lZCB2aWEKLS5JUiBvdXRfbGVuIC4KLVdoZW4gY2FsbGVkLCAKLS5JIG91dF9sZW4KLW11c3QgaG9sZCB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlCi0uSSBvdXRwdXQKLWFycmF5LgotSWYgbXVsdGlwbGUgb2JqZWN0IGlkZW50aWZpZXJzIGFyZSBiZWluZyBwcm9jZXNzZWQsIHRoZW4gdGhpcwotbGVuZ3RoIHNob3VsZCBiZSByZXNldCBiZWZvcmUgZWFjaCBjYWxsLgotVGhpcyBmdW5jdGlvbiByZXR1cm5zIGEgdmFsdWUgb2YgMSBpZiBpdCBzdWNjZWVkcyBpbiBwYXJzaW5nIHRoZSBzdHJpbmcKLWFuZCAwIG90aGVyd2lzZS4KLS5TUyBTZWFyY2hpbmcgdGhlIE1JQiBUcmVlCi0uQiBnZXRfbW9kdWxlX25vZGUKLXRha2VzIGEgZGVzY3JpcHRvciBhbmQgdGhlIG5hbWUgb2YgYSBtb2R1bGUsIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nCi1vaWQgbGlzdCwgaW4gdGhlIHNhbWUgd2F5IGFzCi0uQiByZWFkX29iamlkCi1hYm92ZS4KLS5icgotSWYgdGhlIG1vZHVsZSBuYW1lIGlzIHNwZWNpZmllZCBhcyAiQU5ZIiwgdGhlbiB0aGlzIHJvdXRpbmUgd2lsbAotYXNzdW1lIHRoYXQgdGhlIGRlc2NyaXB0b3IgZ2l2ZW4gaXMgdW5pcXVlIHdpdGhpbiB0aGUgdHJlZSwgYW5kIHdpbGwKLXJldHVybiB0aGUgbWF0Y2hpbmcgZW50cnkuICBJZiB0aGlzIGFzc3VtcHRpb24gaXMgaW52YWxpZCwgdGhlbiB0aGUKLWJlaGF2aW91ciBhcyB0byB3aGljaCB2YXJpYWJsZSBpcyByZXR1cm5lZCBpcyBpbXBsZW1lbnRhdGlvbgotZGVwZW5kZW50LgotLlNTIE91dHB1dAotLkIgcHJpbnRfbWliCi13aWxsIHByaW50IG91dCBhIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIE1JQiB0cmVlIHRvCi10aGUgc3BlY2lmaWVkIEZJTEUgcG9pbnRlci4KLS5QUAotLkIgcHJpbnRfdmFyaWFibGUKLXdpbGwgdGFrZSBhbiBvYmplY3QgaWRlbnRpZmllciAoYXMgcmV0dXJuZWQgYnkKLS5CIHJlYWRfb2JqaWQKLW9yCi0uQlIgZ2V0X21vZHVsZV9ub2RlICkKLWFuZCBhbiBpbnN0YW5jZSBvZiBzdWNoIGEgdmFyaWFibGUsIGFuZCBwcmludHMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dAotdGhlIHRleHR1YWwgZm9ybSBvZiB0aGUgb2JqZWN0IGlkZW50aWZpZXIgdG9nZXRoZXIgd2l0aCB0aGUgdmFsdWUKLW9mIHRoZSB2YXJpYWJsZS4KLS5CIGZwcmludF92YXJpYWJsZQotZG9lcyB0aGUgc2FtZSwgYnV0IHByaW50cyB0byB0aGUgRklMRSBwb2ludGVyIHNwZWNpZmllZCBieSB0aGUgaW5pdGlhbAotcGFyYW1ldGVyLgotLmJyCi0uQiBzbnByaW50X3ZhcmlhYmxlCi1wcmludHMgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW50byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkKLS5JIGJ1Zgotd2hpY2ggaXMgb2YgbGVuZ3RoCi0uSVIgbGVuIAotYW5kIHJldHVybnMgZWl0aGVyIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLCBvciAtMSBpZiB0aGUKLWJ1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwKLS5JIGJ1Zgotd2lsbCB0eXBpY2FsbHkgY29udGFpbmVkIGEgdHJ1bmNhdGVkIHZlcnNpb24gb2YgdGhlIGluZm9ybWF0aW9uIChidXQKLXRoaXMgYmVoYXZpb3VyIGlzIG5vdCBndWFyYW50ZWVkKS4gIFRoaXMgZnVuY3Rpb24gcmVwbGFjZXMgdGhlCi1vYnNvbGV0ZSBmdW5jdGlvbgotLkJSIHNwcmludF92YXJpYWJsZSAuCi0uYnIKLS5CIHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlCi1pcyB0aGUgbG93LWxldmVsIGZ1bmN0aW9uIHVzZWQgdG8gaW1wbGVtZW50IGFsbCB0aGVzZSBmdW5jdGlvbnMuICBJdAotcHJpbnRzIHRvIGEgc3BlY2lmaWVkIG9mZnNldCBpbiBhIHN0cmluZyBidWZmZXIuICBUaGUKLS5JIGJ1ZgotcGFyYW1ldGVyIHBvaW50cyB0byBhIHBvaW50ZXIgdG8gdGhhdCBidWZmZXI7Ci0uSSBidWZfbGVuCi1wb2ludHMgdG8gYSB2YXJpYWJsZSBob2xkaW5nIHRoZSBjdXJyZW50IHNpemUgb2YgdGhhdCBidWZmZXIsIGFuZAotLkkgb3V0X2xlbgotcG9pbnRzIHRvIGEgdmFyaWFibGUgaG9sZGluZyB0aGUgb2Zmc2V0IHRvIHdoaWNoIHRvIHByaW50LgotLkkgb3V0X2xlbgotd2lsbCBiZSB1cGRhdGVkIHRvIGhvbGQgdGhlIG9mZnNldCBvZiB0aGUgY2hhcmFjdGVyIGZvbGxvd2luZyB0aGUgbGFzdAotb25lIGFkZGVkIHRvIHRoZSBidWZmZXIuICBJZgotLkkgYWxsb3dfcmVhbGxvYwotaXMgMSwgdGhlIGJ1ZmZlciB3aWxsIGJlIGR5bmFtaWNhbGx5IGV4cGFuZGVkLCBhcyBuZWNlc3NhcnksIHRvIGhvbGQKLXRoZSBvdXRwdXQ7IHRoZSB2YXJpYWJsZXMgcG9pbnRlZCB0byBieQotLkkgYnVmCi1hbmQKLS5JIGJ1Zl9sZW4KLXdpbGwgYmUgdXBkYXRlZC4gIElmCi0uSSBhbGxvd19yZWFsbG9jCi1pcyAwLCB0aGUgYnVmZmVyIHdpbGwgbm90IGJlIGR5bmFtaWNhbGx5IGV4cGFuZGVkLgotLkIgc3ByaW50X3JlYWxsb2NfdmFyaWFibGUKLXJldHVybnMgMCBpZgotLkkgYWxsb3dfcmVhbGxvYwotaXMgMSBhbmQgYW4gYXR0ZW1wdCB0byBhbGxvY2F0ZSBtZW1vcnkgdG8gZXhwYW5kIHRoZSBidWZmZXIgZmFpbHMsIG9yCi1pZgotLkkgYWxsb3dfcmVhbGxvYwotaXMgMCBhbmQgdGhlIG91dHB1dCB3b3VsZG4ndCBmaXQgaW4gdGhlIGJ1ZmZlci4gIE90aGVyd2lzZSBpdCByZXR1cm5zCi0xLiAgV2hlbiB1c2luZyB0aGlzIGZ1bmN0aW9uIHlvdSBzaG91bGQgYmUgY2FyZWZ1bCB0byBjYWxsCi0uQlIgZnJlZSAoMykKLW9uCi0uSSAqYnVmCi13aGVuIHlvdSBoYXZlIGZpbmlzaGVkIHdpdGggaXQuCi0uUFAKLS5CUiBwcmludF92YWx1ZSAsCi0uQlIgZnByaW50X3ZhbHVlICwKLS5CUiBzbnByaW50X3ZhbHVlCi1hbmQKLS5CIHNwcmludF9yZWFsbG9jX3ZhbHVlCi1kbyB0aGUgc2FtZSBhcyB0aGUgZXF1aXZhbGVudAotLkIgcHJpbnRfdmFyaWFibGUKLXJvdXRpbmVzLCBidXQgb25seSBkaXNwbGF5aW5nIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUsIHdpdGhvdXQgdGhlCi1jb3JyZXNwb25kaW5nIG9iamVjdCBpZGVudGlmaWVyLgotLlBQCi0uQlIgcHJpbnRfb2JqaWQgLAotLkJSIGZwcmludF9vYmppZCAsCi0uQlIgc25wcmludF9vYmppZCAsCi1hbmQKLS5CIHNwcmludF9yZWFsbG9jX29iamlkCi10YWtlIGFuIG9iamVjdCBpZGVudGlmaWVyICh3aXRob3V0IGFuIGFjY29tcGFueWluZyB2YXJpYWJsZSBpbnN0YW5jZSkKLWFuZCBwcmludCBvdXQgdGhlIHRleHR1YWwgcmVwcmVzZW50YXRpb24uCi0uUFAKLS5CSSBwcmludF9kZXNjcmlwdGlvbiAsCi0uQkkgZnByaW50X2Rlc2NyaXB0aW9uICwKLS5CSSBzbnByaW50X2Rlc2NyaXB0aW9uICwKLWFuZAotLkIgc3ByaW50X3JlYWxsb2NfZGVzY3JpcHRpb24KLXRha2UgYW4gb2JqZWN0IGlkZW50aWZpZXIgKGFzIGZvcgotLkIgcHJpbnRfb2JqaWQKLWFib3ZlKSBhbmQgcHJpbnQgb3V0IGEgdmVyc2lvbiBvZiB0aGUgTUlCIGRlZmluaXRpb24gZm9yIHRoYXQgb2JqZWN0LAotdG9nZXRoZXIgd2l0aCB0aGUgZnVsbCBPSUQuIFRoZQotLkkgd2lkdGgKLWFyZ3VtZW50IGNvbnRyb2xzIGhvdyB0aGUgT0lEIGlzIGxheWVkIG91dC4KLS5QUAotQnkgZGVmYXVsdCB0aGUgcGFyc2VyIGRvZXMgbm90IHNhdmUgZGVzY3JpcHRpb25zIHNpbmNlIHRoZXkgbWF5IGJlCi1odWdlLiAgSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwcmludCB0aGVtLCB5b3UgbXVzdCBjYWxsCi0uQlIgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMoMSkgLgotLlBQCi1JbiBnZW5lcmFsIHRoZSBwYXJzZXIgaXMgc2lsZW50IGFib3V0IHdoYXQgc3RyYW5nZW5lc3NlcyBpdCBzZWVzIGluCi10aGUgTUlCIGZpbGVzLiBUbyBnZXQgd2FybmluZ3MgcmVwb3J0ZWQsIGNhbGwKLS5CIHNubXBfc2V0X21pYl93YXJuaW5ncwotd2l0aCBhCi0uSSBsZXZlbAotb2YgMSAob3IgMiBmb3IgZXZlbiBtb3JlIHdhcm5pbmdzKS4KLS5TSCAiRU5WSVJPTk1FTlQgVkFSSUFCTEVTIgotLlRQIDEwCi1NSUJESVJTCi1BIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCIG1vZHVsZXMuCi1EZWZhdWx0OiBEQVRBRElSL3NubXAvbWlicwotLlRQIDEwCi1NSUJGSUxFUwotQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyB0byBsb2FkLgotRGVmYXVsdDogKG5vbmUpCi0uVFAgMTAKLU1JQlMKLUEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgTUlCIG1vZHVsZXMgdG8gbG9hZC4KLURlZmF1bHQ6IElQLU1JQjpJRi1NSUI6VENQLU1JQjpVRFAtTUlCOlNOTVB2Mi1NSUI6IFJGQzEyMTMtTUlCOlVDRC1TTk1QLU1JQi4KLS5TSCAiU0VFIEFMU08iCi0uQlIgc25tcF9hcGkgIigzKSIKZGlmZiAtLWdpdCBhL21hbi9uZXQtc25tcC1jb25maWcuMS5kZWYgYi9tYW4vbmV0LXNubXAtY29uZmlnLjEuZGVmCmluZGV4IDY1MjFjOWUuLjNhMGZhMmIgMTAwNjQ0Ci0tLSBhL21hbi9uZXQtc25tcC1jb25maWcuMS5kZWYKKysrIGIvbWFuL25ldC1zbm1wLWNvbmZpZy4xLmRlZgpAQCAtMSwxNyArMSwxNyBAQAogLlRIIG5ldC1zbm1wLWNvbmZpZyAxICIxNiBOb3YgMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCi1uZXQtc25tcC1jb25maWcgXC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBpbnN0YWxsZWQgbmV0LXNubXAgbGlicmFyaWVzIGFuZCBiaW5hcmllcyAKK25ldFwtc25tcFwtY29uZmlnIC0gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBpbnN0YWxsZWQgbmV0LXNubXAgbGlicmFyaWVzIGFuZCBiaW5hcmllcyAKIC5TSCBTWU5PUFNJUwogLlBQCi0uQiBuZXQtc25tcC1jb25maWcKKy5CIG5ldFwtc25tcFwtY29uZmlnCiBbT1BUSU9OU10KIC5TSCBERVNDUklQVElPTgogLlBQCi1UaGUgXGZJbmV0LXNubXAtY29uZmlnXGZQIHNoZWxsIHNjcmlwdCBpcyBkZXNpZ25lZCB0byByZXRyaWV2ZSB0aGUKK1RoZSBcZkluZXRcLXNubXBcLWNvbmZpZ1xmUCBzaGVsbCBzY3JpcHQgaXMgZGVzaWduZWQgdG8gcmV0cmlldmUgdGhlCiBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaWJyYXJpZXMgYW5kIGJpbmFyaWVzIGRlYWxpbmcgd2l0aAogdGhlIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgKFNOTVApLCBidWlsdCBmcm9tIHRoZSAKIC5CIG5ldC1zbm1wIAotc291cmNlIHBhY2thZ2UuIFRoZSBpbmZvcm1hdGlvbiBpcyBwYXJ0aWN1bGFyaWx5IHVzZWZ1bCBmb3IKK3NvdXJjZSBwYWNrYWdlLiBUaGUgaW5mb3JtYXRpb24gaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKIGFwcGxpY2F0aW9ucyB0aGF0IG5lZWQgdG8gbGluayBhZ2FpbnN0IHRoZSBTTk1QIGxpYnJhcmllcyBhbmQgaGVuY2UKIG11c3Qga25vdyBhYm91dCBhbnkgb3RoZXIgbGlicmFyaWVzIHRoYXQgbXVzdCBiZSBsaW5rZWQgaW4gYXMgd2VsbC4KIApAQCAtMjksOCArMjksOCBAQAogLlBQCiBTTk1QIFNldHVwIGNvbW1hbmRzOgogLlRQCi1cZkJcLVwtY3JlYXRlXC1zbm1wdjNcLXVzZXJcZlIgWy1yb10gWy1hIGF1dGhwYXNzXSBbLXggcHJpdnBhc3NdIFstWCBERVN8QUVTXQotWy1BIE1ENXxTSEFdIFt1c2VybmFtZV0KK1xmQlwtXC1jcmVhdGVcLXNubXB2M1wtdXNlclxmUiBbXC1yb10gW1wtYSBhdXRocGFzc10gW1wteCBwcml2cGFzc10KK1tcLVggREVTfEFFU10gW1wtQSBNRDV8U0hBXSBbdXNlcm5hbWVdCiAuUFAKIFRoZXNlIG9wdGlvbnMgcHJvZHVjZSB0aGUgdmFyaW91cyBjb21waWxhdGlvbiBmbGFncyBuZWVkZWQgd2hlbgogYnVpbGRpbmcgZXh0ZXJuYWwgU05NUCBhcHBsaWNhdGlvbnM6CkBAIC02Myw4ICs2Myw4IEBACiBBdXRvbWF0ZWQgc3ViYWdlbnQgYnVpbGRpbmcgKHByb2R1Y2VzIGFuIE9VVFBVVE5BTUUgYmluYXJ5IGZpbGUpOgogW1RoaXMgZmVhdHVyZSBoYXMgbm90IGJlZW4gZXh0ZW5zaXZlbHkgdGVzdGVkLCAgdXNlIGF0IHlvdXIgb3duIHJpc2suXQogLlRQCi1cZkJcLVwtY29tcGlsZVwtc3ViYWdlbnRcZlIgT1VUUFVUTkFNRSBbLS1ub3JtXSBbLS1jZmxhZ3MgZmxhZ3NdCi1bLS1sZGZsYWdzIGZsYWdzXSBtaWJtb2R1bGUxLmMgWy4uLl1dCitcZkJcLVwtY29tcGlsZVwtc3ViYWdlbnRcZlIgT1VUUFVUTkFNRSBbXC1cLW5vcm1dIFtcLVwtY2ZsYWdzIGZsYWdzXQorW1wtXC1sZGZsYWdzIGZsYWdzXSBtaWJtb2R1bGUxLmMgWy4uLl1dCiAuVFAKIFxmQlwtXC1ub3JtXGZSCiBsZWF2ZSB0aGUgZ2VuZXJhdGVkIC5jIGZpbGUgYXJvdW5kIHRvIHJlYWQuCmRpZmYgLS1naXQgYS9tYW4vbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYgYi9tYW4vbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuMS5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE2OTQ0YwotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXQtc25tcC1jcmVhdGUtdjMtdXNlci4xLmRlZgpAQCAtMCwwICsxLDI4IEBACisuVEggbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgMSAiMTcgU2VwIDIwMDgiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgXC0gY3JlYXRlIGEgU05NUHYzIHVzZXIgaW4gbmV0LXNubXAgY29uZmlndXJhdGlvbiBmaWxlCisuU0ggU1lOT1BTSVMKKy5QUAorLkIgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgWy1yb10gWy1hIGF1dGhwYXNzXSBbLXggcHJpdnBhc3NdIFstWCBERVN8QUVTXQorLkIgW3VzZXJuYW1lXQorLlNIIERFU0NSSVBUSU9OCisuUFAKK1RoZSBcZkluZXQtc25tcC1jcmVhdGUtdjMtdXNlclxmUCBzaGVsbCBzY3JpcHQgaXMgZGVzaWduZWQgdG8gY3JlYXRlIGEKK25ldyB1c2VyIGluIG5ldC1zbm1wIGNvbmZpZ3VyYXRpb24gZmlsZSAoL3Zhci9uZXQtc25tcC9zbm1wZC5jb25mIGJ5IGRlZmF1bHQpLgorCisuU0ggT1BUSU9OUworLlRQCitcZkJcLVwtdmVyc2lvblxmUgorZGlzcGxheXMgdGhlIG5ldC1zbm1wIHZlcnNpb24gbnVtYmVyCisuVFAKK1xmQlwtcm9cZlIKK2NyZWF0ZSBhbiB1c2VyIHdpdGggcmVhZC1vbmx5IHBlcm1pc3Npb25zCisuVFAKK1xmQlwtYSBhdXRocGFzc1xmUgorc3BlY2lmeSBhdXRoZW50aWNhdGlvbiBwYXNzd29yZAorLlRQCitcZkJcLXggcHJpdnBhc3NcZlIKK3NwZWNpZnkgZW5jcnlwdGlvbiBwYXNzd29yZAorLlRQCitcZkJcLVggREVTfEFFU1xmUgorc3BlY2lmeSBlbmNyeXB0aW9uIGFsZ29yaXRobQpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYWdlbnQuMyBiL21hbi9uZXRzbm1wX2FnZW50LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYzYzdkZDUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfYWdlbnQuMworKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLS5USCAiVGhlIE5ldC1TTk1QIGFnZW50IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotVGhlIE5ldC1TTk1QIGFnZW50IFwtIAotLlBQCi1UaGUgc25tcCBhZ2VudCByZXNwb25kcyB0byBTTk1QIHF1ZXJpZXMgZnJvbSBtYW5hZ2VtZW50IHN0YXRpb25zLiAgCi0KLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJOZXQtU05NUCBBZ2VudCBoYW5kbGVyIGFuZCBleHRlbnNpYmlsaXR5IEFQSVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJVGhlIGJhc2ljIHRoZW9yeSBnb2VzIHNvbWV0aGluZyBsaWtlIHRoaXM6IEluIHRoZSBwYXN0LCB3aXRoIHRoZSBvcmlnaW5hbCBtaWIgXGZCbW9kdWxlXGZQIGFwaSAod2hpY2ggZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCBDTVUgU05NUCBjb2RlKSB0aGUgdW5kZXJseWluZyBtaWIgbW9kdWxlcyB3ZXJlIHBhc3NlZCB2ZXJ5IGxpdHRsZSBpbmZvcm1hdGlvbiAob25seSB0aGUgdHJ1bHkgbW9zdCBiYXNpYyBpbmZvcm1hdGlvbiBhYm91dCBhIHJlcXVlc3QpLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQk1haW50YWluIGEgcmVnaXN0cnkgb2YgTUlCIHN1YnRyZWVzLCB0b2dldGhlciB3aXRoIHJlbGF0ZWQgaW5mb3JtYXRpb24gcmVnYXJkaW5nIG1pYm1vZHVsZSwgc2Vzc2lvbnMsIGV0Y1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJUcmFwIGdlbmVyYXRpb24gcm91dGluZXMgZm9yIG1pYiBtb2R1bGVzIHRvIHVzZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXQtc25tcCBhZ2VudCByZWxhdGVkIHByb2Nlc3NpbmdcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgc25tcCBhZ2VudCByZXNwb25kcyB0byBTTk1QIHF1ZXJpZXMgZnJvbSBtYW5hZ2VtZW50IHN0YXRpb25zLiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF9hZ2VudF9hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTllZmQwMAotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX2FnZW50X2FwaS4zLmRlZgpAQCAtMCwwICsxLDEzMiBAQAorLlRIIE5FVFNOTVBfQUdFTlRfQVBJIDMgIjEzIEF1ZyAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK25ldHNubXBfYWdlbnRfYXBpIC0gZW1iZWRkaW5nIGFuIGFnZW50IGludG8gYSBleHRlcm5hbCBhcHBsaWNhdGlvbgorLlNIIFNZTk9QU0lTCisubmYKKyNpbmNsdWRlIDxuZXRcLXNubXAvbmV0XC1zbm1wXC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXRcLXNubXAvbmV0XC1zbm1wXC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldFwtc25tcC9hZ2VudC9uZXRcLXNubXBcLWFnZW50XC1pbmNsdWRlcy5oPgorCitpbnQKK21haW4gKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgIGludCBhZ2VudHhfc3ViYWdlbnQgPSAxOyAgLyogQ2hhbmdlIHRoaXMgaWYgeW91J3JlIGEgbWFzdGVyIGFnZW50LiAgKi8KKworICBzbm1wX2VuYWJsZV9zdGRlcnJsb2coKTsKKworICAvKiAgSWYgd2UncmUgYW4gQWdlbnRYIHN1YmFnZW50Li4uICAqLworICBpZiAoYWdlbnR4X3N1YmFnZW50KSB7CisgICAgICAvKiAuLi5tYWtlIHVzIGFuIEFnZW50WCBjbGllbnQuICAqLworICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUsIDEpOworICB9CisKKyAgaW5pdF9hZ2VudCgieW91cmFwcG5hbWUiKTsKKworICAvKiAgSW5pdGlhbGl6ZSB5b3VyIE1JQiBjb2RlIGhlcmUuICAqLworICBpbml0X215X21pYl9jb2RlKCk7CisKKyAgLyogIGB5b3VyYXBwbmFtZScgd2lsbCBiZSB1c2VkIHRvIHJlYWQgeW91cmFwcG5hbWUuY29uZiBmaWxlcy4gICovCisgIGluaXRfc25tcCgieW91cmFwcG5hbWUiKTsKKworICAvKiAgSWYgd2UncmUgZ29pbmcgdG8gYmUgYSBTTk1QIG1hc3RlciBhZ2VudC4uLiAgKi8KKyAgaWYgKCFhZ2VudHhfc3ViYWdlbnQpCisgICAgICBpbml0X21hc3Rlcl9hZ2VudCgpOyAgLyogIExpc3RlbiBvbiBkZWZhdWx0IHBvcnQgKDE2MSkuICAqLworCisgIC8qICBZb3VyIG1haW4gbG9vcCBoZXJlLi4uICAqLworICB3aGlsZSAod2hhdGV2ZXIpIHsKKyAgICAgIC8qIGlmIHlvdSB1c2Ugc2VsZWN0KCksIHNlZSBzbm1wX2FwaSgzKSAqLworICAgICAgLyogICAgIC0tLSBPUiAtLS0gICovCisgICAgICBhZ2VudF9jaGVja19hbmRfcHJvY2VzcygwKTsgLyogMCA9PSBkb24ndCBibG9jayAqLworICB9CisKKyAgLyogIEF0IHNodXRkb3duIHRpbWU6ICAqLworICBzbm1wX3NodXRkb3duKCJ5b3VyYXBwbmFtZSIpOworfQorCitUaGVuOgorJChDQykgLi4uIGBuZXRcLXNubXBcLWNvbmZpZyBcLVwtYWdlbnRcLWxpYnNgCisKKy5maQorLlNIIERFU0NSSVBUSU9OCisuUFAKK091ciBnb2FsIGlzIHRvIGNyZWF0ZSBhIGVhc3kgdG8gdXNlIGludGVyZmFjZSB0byB0aGUgTmV0LVNOTVAgcGFja2FnZQorc3VjaCB0aGF0IHlvdSBjYW4gdGFrZSBjb2RlIHRoYXQgeW91IGhhdmUgd3JpdHRlbiB0aGF0IGhhcyBiZWVuCitkZXNpZ25lZCB0byBiZSBhIE5ldC1TTk1QIE1JQiBtb2R1bGUgYW5kIGVtYmVkIGl0IGludG8gYW4gZXh0ZXJuYWwKK2FwcGxpY2F0aW9uIHdoZXJlIHlvdSBjYW4gZWl0aGVyIGNob3NlIHRvIGJlIGEgU05NUCBtYXN0ZXIgYWdlbnQgb3IgYW4KK0FnZW50WCBzdWItYWdlbnQgdXNpbmcgdGhlIHNhbWUgTUlCIG1vZHVsZSBjb2RlLiAgT3VyIHN1Z2dlc3Rpb24gaXMKK3RoYXQgeW91IHVzZSBvdXIgKG9yIGFub3RoZXIpIFNOTVAgYWdlbnQgYXMgdGhlIEFnZW50WCBtYXN0ZXIgYWdlbnQKK2FuZCBjaG9zZSB0byBiZWNvbWUgYW4gQWdlbnRYIHN1YmFnZW50IHdoaWNoIHRoZW4gYXR0YWNoZXMgdG8gdGhlCittYXN0ZXIuCisuUFAKK1RoZSBOZXQtU05NUCBwYWNrYWdlIHByb3ZpZGVzIGEgcGFpciBvZiBsaWJyYXJpZXMgdGhhdCBlbmFibGVzIGVhc3kKK2VtYmVkZGluZyBvZiBhbiBTTk1QIG9yIEFnZW50WCBhZ2VudCBpbnRvIGFuIGV4dGVybmFsIHNvZnR3YXJlCitwYWNrYWdlLiBBZ2VudFggaXMgYW4gZXh0ZW5zaWJsZSBwcm90b2NvbCBkZXNpZ25lZCB0byBhbGxvdyBtdWx0aXBsZQorU05NUCBzdWItYWdlbnRzIGFsbCBydW4gb24gb25lIG1hY2hpbmUgdW5kZXIgYSBzaW5nbGUgU05NUCBtYXN0ZXIKK2FnZW50LiAgSXQgaXMgZGVmaW5lZCBpbiBSRkMgMjc0MS4KKy5QUAorWW91IHdpbGwgbmVlZCB0byBwZXJmb3JtIGEgZmV3IHRhc2tzIGluIG9yZGVyIHRvIGFjY29tcGxpc2gKK3RoaXMuIEZpcnN0IG9mZiwgeW91IHdpbGwgbmVlZCB0byBpbml0aWFsaXplIGJvdGggdGhlIFNOTVAgbGlicmFyeSBhbmQKK3RoZSBTTk1QIGFnZW50IGxpYnJhcnkuIEFzIGluZGljYXRlZCBhYm92ZSwgdGhpcyBpcyBkb25lIHNsaWdodGx5CitkaWZmZXJlbnRseSBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3QgeW91IGFyZSBnb2luZyB0byBwZXJmb3JtIGFzIGEKK21hc3RlciBhZ2VudCBvciBhbiBBZ2VudFggc3ViLWFnZW50LgorLlNIIENPTkZJR1VSQVRJT04KKy5QUAorSWYgeW91IGludGVuZCB0byBvcGVyYXRlIGFzIGFuIEFnZW50WCBzdWItYWdlbnQsIHlvdSB3aWxsIGhhdmUgdG8KK2NvbmZpZ3VyZWQgdGhlIE5ldC1TTk1QIHBhY2thZ2Ugd2l0aCBhZ2VudHggc3VwcG9ydCAod2hpY2ggaXMgdHVybmVkCitvbiBieSBkZWZhdWx0LCBzbyBqdXN0IGRvbid0IHR1cm4gaXQgb2ZmKQorLlBQCitBZGRpdGlvbmFsbHksIHlvdSB3aWxsIG5lZWQgdG8gbGluayBhZ2FpbnN0IHRoZSBOZXQtU05NUCBsaWJyYXJpZXMKKyh1c2UgdGhlIG91dHB1dCBvZiAibmV0XC1zbm1wXC1jb25maWcgXC1cLWFnZW50XC1saWJzIiB0byBnZXQgYSBsaWJyYXJ5CitsaXN0KSBhbmQgY2FsbCBzdWJhZ2VudF9wcmVfaW5pdCgpIGFzIGluZGljYXRlZCBhYm92ZS4KKy5TSCBDT01QSUxJTkcKKy5QUAorSW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgYW55IG9mIHRoZSBhYm92ZSBBUEksIHlvdSB3aWxsIG5lZWQgdG8gbGluaworYWdhaW5zdCBhdCBsZWFzdCB0aGUgZm91ciBsaWJyYXJpZXMgbGlzdGVkIGFib3ZlLgorLlNIIEZVTkNUSU9OUworLlBQIFRoaXMgaXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGNhbGxlZCBhYm92ZSBhbmQKK3doZXJlIHRvIGZpbmQgb3V0IG1vcmUgaW5mb3JtYXRpb24gb24gdGhlbS4gIEl0IGlzIGNlcnRhaW5seSBub3QgYQorY29tcGxldGUgbGlzdCBvZiB3aGF0IGlzIGF2YWlsYWJsZSB3aXRoaW4gYWxsIHRoZSBOZXQtU05NUCBsaWJyYXJpZXMuIAorLklQICJzbm1wX2VuYWJsZV9zdGRlcnJsb2coKSIKK0xvZ3MgZXJyb3Igb3V0cHV0IGZyb20gdGhlIFNOTVAgYWdlbnQgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KKy5JUCAibmV0c25tcF9kc19zZXRfYm9vbGVhbigpIgorUGxlYXNlIHNlZSB0aGUKKy5JUiBkZWZhdWx0X3N0b3JlKDMpCittYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbgorYWJvdXQgdGhpcyBBUEkuCisuSVAgImluaXRfYWdlbnQoY2hhciAqbmFtZSkiCitJbml0aWFsaXplcyB0aGUgZW1iZWRkZWQgYWdlbnQuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZQorLkJSICJpbml0X3NubXAoKSIKK2NhbGwuICAKKy5JIG5hbWUKK2lzIHVzZWQgdG8gZGljdGF0ZSB3aGF0IC5jb25mIGZpbGUgdG8gcmVhZCB3aGVuCisuQlIgImluaXRfc25tcCgpIgoraXMgY2FsbGVkIGxhdGVyLgorLklQICJpbml0X3NubXAoY2hhciAqbmFtZSkiCitJbml0aWFsaXplcyB0aGUgU05NUCBsaWJyYXJ5LiAgTm90ZSB0aGF0IG9uZSBvZiB0aGUgdGhpbmdzIHRoaXMgd2lsbAorZG8gd2lsbCBiZSB0byByZWFkIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gYW4gZWZmb3J0IHRvIGNvbmZpZ3VyZSB5b3VyCithcHBsaWNhdGlvbi4gSXQgd2lsbCBhdHRlbXB0IHRvIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmFtZWQgYnkKK3RoZQorLkkgbmFtZQorc3RyaW5nIHRoYXQgeW91IHBhc3NlZCBpbi4gIEl0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBhY2Nlc3MKK2NvbnRyb2wsIGZvciBpbnN0YW5jZS4gICBQbGVhc2Ugc2VlIHRoZQorLklSIG5ldHNubXBfY29uZmlnX2FwaSgzKSAiLCAiIHNubXBfY29uZmlnKDUpICIsIGFuZCAiIHNubXBkLmNvbmYoNSkKK21hbnVhbCBwYWdlcyBmb3IgZnVydGhlciBkZXRhaWxzIG9uIHRoaXMgc3ViamVjdC4KKy5JUCAiaW5pdF9tYXN0ZXJfYWdlbnQodm9pZCkiCitJbml0aWFsaXplcyB0aGUgbWFzdGVyIGFnZW50IGFuZCBjYXVzZXMgaXQgdG8gbGlzdGVuIGZvciBTTk1QIHJlcXVlc3RzIAorb24gaXRzIGRlZmF1bHQgVURQIHBvcnQgb2YgMTYxLgorLklQICJhZ2VudF9jaGVja19hbmRfcHJvY2VzcyhpbnQgYmxvY2spIgorVGhpcyBjaGVja3MgZm9yIHBhY2tldHMgYXJyaXZpbmcgb24gdGhlIFNOTVAgcG9ydCBhbmQgcHJvY2Vzc2VzIHRoZW0KK2lmIHNvbWUgYXJlIGZvdW5kLiAgSWYgCisuSSBibG9jaworaXMgbm9uLXplcm8sIHRoZSBmdW5jdGlvbiBjYWxsIHdpbGwgYmxvY2sgdW50aWwgYSBwYWNrZXQgYXJyaXZlcyBvciBhbiAKK2FsYXJtIG11c3QgYmUgcnVuIChzZWUKKy5JUiBzbm1wX2FsYXJtKDMpICkuCitUaGUgcmV0dXJuIHZhbHVlIGZyb20gdGhpcyBmdW5jdGlvbiBpcyBhIHBvc2l0aXZlIGludGVnZXIgaWYgcGFja2V0cword2VyZSBwcm9jZXNzZWQsIHplcm8gaWYgYW4gYWxhcm0gb2NjdXJyZWQgYW5kIFwtMSBpZiBhbiBlcnJvciBvY2N1cmVkLgorLklQICJzbm1wX3NodXRkb3duKGNoYXIgKm5hbWUpOyIKK1RoaXMgc2h1dHMgZG93biB0aGUgYWdlbnQsIHNhdmluZyBhbnkgbmVlZGVkIHBlcnNpc3RlbnQgc3RvcmFnZSwgZXRjLgorLlNIICJTRUUgQUxTTyIKK2h0dHA6Ly93d3cubmV0XC1zbm1wLm9yZy90dXRvcmlhbFwtNS90b29sa2l0LyBzZWxlY3QoMiksIHNubXBfYXBpKDMpLAorZGVmYXVsdF9zdG9yZSgzKSwgc25tcF9hbGFybSgzKSwgbmV0c25tcF9jb25maWdfYXBpKDMpLCBzbm1wX2NvbmZpZyg1KSwKK3NubXBkLmNvbmYoNSkKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMgYi9tYW4vbmV0c25tcF9hZ2VudF9yZWdpc3RyeS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMGJhMmYyLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2FnZW50X3JlZ2lzdHJ5LjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNzggKzAsMCBAQAotLlRIICJNYWludGFpbiBhIHJlZ2lzdHJ5IG9mIE1JQiBzdWJ0cmVlcywgdG9nZXRoZXIgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBtaWJtb2R1bGUsIHNlc3Npb25zLCBldGMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1NYWludGFpbiBhIHJlZ2lzdHJ5IG9mIE1JQiBzdWJ0cmVlcywgdG9nZXRoZXIgd2l0aCByZWxhdGVkIGluZm9ybWF0aW9uIHJlZ2FyZGluZyBtaWJtb2R1bGUsIHNlc3Npb25zLCBldGMgXC0gCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbG9va3VwX2NhY2hlX3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmxvb2t1cF9jYWNoZV9jb250ZXh0X3NcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQklOX1NOTVBfVkFSU19DXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU1VCVFJFRV9ERUZBVUxUX0NBQ0hFX1NJWkVcZlAgICA4IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU1VCVFJFRV9NQVhfQ0FDSEVfU0laRVxmUCAgIDMyIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQmxvb2t1cF9jYWNoZV9zXGZQIFxmQmxvb2t1cF9jYWNoZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJsb29rdXBfY2FjaGVfY29udGV4dF9zXGZQIFxmQmxvb2t1cF9jYWNoZV9jb250ZXh0XGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZCBcZkJpbnZhbGlkYXRlX2xvb2t1cF9jYWNoZVxmUCAoY29uc3QgY2hhciAqY29udGV4dCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3NldF9sb29rdXBfY2FjaGVfc2l6ZVxmUCAoaW50IG5ld3NpemUpIgotLmJyCi0uUkkgIlxmSXNldCB0aGUgbG9va3VwIGNhY2hlIHNpemUgZm9yIG9wdGltaXplZCBhZ2VudCByZWdpc3RyYXRpb24gcGVyZm9ybWFuY2UuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZ2V0X2xvb2t1cF9jYWNoZV9zaXplXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXRyaWV2ZXMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGxvb2t1cCBjYWNoZSBzaXplIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3N1YnRyZWVfZnJlZVxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICphKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfZGVlcGNvcHlcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqYSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCc3VidHJlZV9jb250ZXh0X2NhY2hlXGZQICogXGZCZ2V0X3RvcF9jb250ZXh0X2NhY2hlXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfZmluZF9maXJzdFxmUCAoY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJhZGRfc3VidHJlZVxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpuZXdfdHJlZSwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfcmVwbGFjZV9maXJzdFxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpuZXdfdHJlZSwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfc3VidHJlZV9jaGFuZ2VfbmV4dFxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpwdHIsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqdGhlbmV4dCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3N1YnRyZWVfY2hhbmdlX3ByZXZcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqcHRyLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnRoZXByZXYpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3N1YnRyZWVfY29tcGFyZVxmUCAoY29uc3QgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICphcCwgY29uc3QgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpicCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3N1YnRyZWVfam9pblxmUCAoXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpyb290KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfc3BsaXRcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqY3VycmVudCwgb2lkIG5hbWVbXSwgaW50IG5hbWVfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zdWJ0cmVlX2xvYWRcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqbmV3X3N1YiwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9taWJcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHksIGludCByYW5nZV9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcywgY29uc3QgY2hhciAqY29udGV4dCwgaW50IHRpbWVvdXQsIGludCBmbGFncywgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgaW50IHBlcmZvcm1fY2FsbGJhY2spIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVnaXN0ZXJfbWliX3JlYXR0YWNoXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlZ2lzdGVyX21pYl9kZXRhY2hcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9taWJfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICp2YXIsIHNpemVfdCB2YXJzaXplLCBzaXplX3QgbnVtdmFycywgb2lkICptaWJsb2MsIHNpemVfdCBtaWJsb2NsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBjb25zdCBjaGFyICpjb250ZXh0LCBpbnQgdGltZW91dCwgaW50IGZsYWdzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfbWliX3JhbmdlXGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9taWJfcHJpb3JpdHlcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuLCBpbnQgcHJpb3JpdHkpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9taWJcZlAgKGNvbnN0IGNoYXIgKm1vZHVsZU5hbWUsIHN0cnVjdCBcZkJ2YXJpYWJsZVxmUCAqdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqbWlibG9jLCBzaXplX3QgbWlibG9jbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc3VidHJlZV91bmxvYWRcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqc3ViLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnByZXYsIGNvbnN0IGNoYXIgKmNvbnRleHQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJ1bnJlZ2lzdGVyX21pYl9jb250ZXh0XGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBjb25zdCBjaGFyICpjb250ZXh0KSIKLS5icgotLlJJICJcZklVbnJlZ2lzdGVycyBhbiBPSUQgdGhhdCBoYXMgYW4gYXNzb2NpYXRlZCBjb250ZXh0IG5hbWUgdmFsdWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdW5yZWdpc3Rlcl9taWJfdGFibGVfcm93XGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwgaW50IHZhcl9zdWJpZCwgb2lkIHJhbmdlX3Vib3VuZCwgY29uc3QgY2hhciAqY29udGV4dCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnVucmVnaXN0ZXJfbWliX3JhbmdlXGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdW5yZWdpc3Rlcl9taWJfcHJpb3JpdHlcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbiwgaW50IHByaW9yaXR5KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdW5yZWdpc3Rlcl9taWJcZlAgKG9pZCAqbmFtZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJ1bnJlZ2lzdGVyX21pYnNfYnlfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmluX2Ffdmlld1xmUCAob2lkICpuYW1lLCBzaXplX3QgKm5hbWVsZW4sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGludCB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY2hlY2tfYWNjZXNzXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hY21fY2hlY2tfc3VidHJlZVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgb2lkICpuYW1lLCBzaXplX3QgbmFtZWxlbikiCi0uYnIKLS5SSSAiXGZJY2hlY2tzIHRvIHNlZSBpZiBldmVyeXRoaW5nIHdpdGhpbiBhIGdpdmVuIHN1YnRyZWUgaXMgZWl0aGVyOiBpbiB2aWV3LCBub3QgaW4gdmlldywgb3IgcG9zc2libHkgYm90aC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgXGZCbG9va3VwX2NhY2hlX2NvbnRleHRcZlAgKiBcZkJnZXRfY29udGV4dF9sb29rdXBfY2FjaGVcZlAgKGNvbnN0IGNoYXIgKmNvbnRleHQpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSB2b2lkIFxmQmxvb2t1cF9jYWNoZV9hZGRcZlAgKGNvbnN0IGNoYXIgKmNvbnRleHQsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqbmV4dCwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICpwcmV2aW91cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgXGZCbG9va3VwX2NhY2hlX3JlcGxhY2VcZlAgKFxmQmxvb2t1cF9jYWNoZVxmUCAqcHRyLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKm5leHQsIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqcHJldmlvdXMpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSBcZkJsb29rdXBfY2FjaGVcZlAgKiBcZkJsb29rdXBfY2FjaGVfZmluZFxmUCAoY29uc3QgY2hhciAqY29udGV4dCwgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW4sIGludCAqcmV0Y21wKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfZmluZF9wcmV2XGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqc3VidHJlZSwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfZmluZF9uZXh0XGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4sIFxmQm5ldHNubXBfc3VidHJlZVxmUCAqc3VidHJlZSwgY29uc3QgY2hhciAqY29udGV4dF9uYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJuZXRzbm1wX3N1YnRyZWVfZmluZFxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnN1YnRyZWUsIGNvbnN0IGNoYXIgKmNvbnRleHRfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCZ2V0X3Nlc3Npb25fZm9yX29pZFxmUCAob2lkICpuYW1lLCBzaXplX3QgbGVuLCBjb25zdCBjaGFyICpjb250ZXh0X25hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2V0dXBfdHJlZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlbW92ZV90cmVlX2VudHJ5XGZQIChvaWQgKm5hbWUsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2h1dGRvd25fdHJlZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjbGVhcl9zdWJ0cmVlXGZQIChcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKnN1YikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjbGVhcl9sb29rdXBfY2FjaGVcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY2xlYXJfY29udGV4dFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJkdW1wX2lkeF9yZWdpc3RyeVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJkdW1wX3JlZ2lzdHJ5XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJSRVRTSUdUWVBFIFxmQmFnZW50X1NJR0NITERfaGFuZGxlclxmUCAoaW50IHNpZykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlZ2lzdGVyX3NpZ25hbFxmUCAoaW50IHNpZywgdm9pZCgqZnVuYykoaW50KSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnVucmVnaXN0ZXJfc2lnbmFsXGZQIChpbnQgc2lnKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCc3VidHJlZV9jb250ZXh0X2NhY2hlXGZQICogXGZCY29udGV4dF9zdWJ0cmVlc1xmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvb2t1cF9jYWNoZV9zaXplXGZQID0gMCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZXh0ZXJuYWxfc2lnbmFsX3NjaGVkdWxlZFxmUCBbTlVNX0VYVEVSTkFMX1NJR1NdIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQoKiBcZkJleHRlcm5hbF9zaWduYWxfaGFuZGxlclxmUCBbTlVNX0VYVEVSTkFMX1NJR1NdKShpbnQpIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2FjbV9jaGVja19zdWJ0cmVlIChcZkJuZXRzbm1wX3BkdVxmUCAqIHBkdSwgb2lkICogbmFtZSwgc2l6ZV90IG5hbWVsZW4pIgotLlBQCi1jaGVja3MgdG8gc2VlIGlmIGV2ZXJ5dGhpbmcgd2l0aGluIGEgZ2l2ZW4gc3VidHJlZSBpcyBlaXRoZXI6IGluIHZpZXcsIG5vdCBpbiB2aWV3LCBvciBwb3NzaWJseSBib3RoLiBJZiB0aGUgZW50aXJlIHN1YnRyZWUgaXMgbm90LWluLXZpZXcgd2UgY2FuIHVzZSB0aGlzIGluZm9ybWF0aW9uIHRvIHNraXAgY2FsbGluZyB0aGUgc3ViLWhhbmRsZXJzIGVudGlyZWx5LiAKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIGlmIGVudGlyZSBzdWJ0cmVlIGlzIGFjY2Vzc2libGUsIDUgaWYgbm90IGFuZCA3IGlmIHBvcnRpb25zIGFyZSBib3RoLiAxIG9uIGVycm9yIChpbGxlZ2FsIHBkdSB2ZXJzaW9uKS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzIzIG9mIGZpbGUgYWdlbnRfcmVnaXN0cnkuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2V0X2xvb2t1cF9jYWNoZV9zaXplICh2b2lkKSIKLS5QUAotcmV0cmlldmVzIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBcZkJSZXR1cm5zOlxmUAotLlJTIDQKLXRoZSBjdXJyZW50IGxvb2t1cCBjYWNoZSBzaXplIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM5NiBvZiBmaWxlIGFnZW50X3JlZ2lzdHJ5LmMuCi0uU1MgInZvaWQgbmV0c25tcF9zZXRfbG9va3VwX2NhY2hlX3NpemUgKGludCBuZXdzaXplKSIKLS5QUAotc2V0IHRoZSBsb29rdXAgY2FjaGUgc2l6ZSBmb3Igb3B0aW1pemVkIGFnZW50IHJlZ2lzdHJhdGlvbiBwZXJmb3JtYW5jZS4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluZXdzaXplXGZQIHNldCB0byB0aGUgbWF4aW11bSBzaXplIG9mIGEgY2FjaGUgZm9yIGEgZ2l2ZW4gY29udGV4dC4gU2V0IHRvIDAgdG8gY29tcGxldGVseSBkaXNhYmxlIGNhY2hpbmcsIG9yIHRvIC0xIHRvIHNldCB0byB0aGUgZGVmYXVsdCBjYWNoZSBzaXplICg4KSwgb3IgdG8gYSBudW1iZXIgb2YgeW91ciBjaG9zaW5nLiBUaGUgcm91Z2ggZ3VpZGUgaXMgdGhhdCBpdCBzaG91bGQgYmUgZXF1YWwgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIHNpbXVsdGFuaW91cyBtYW5hZ2VycyB5b3UgZXhwZWN0IHRvIHRhbGsgdG8gdGhlIGFnZW50IChNKSB0aW1lcyA4MCUgKG9yIHNvLCBoZSBzYXlzIHJhbmRvbWx5KSB0aGUgYXZlcmFnZSBudW1iZXIgKE4pIG9mIHZhcmJpbmRzIHlvdSBleHBlY3QgdG8gcmVjZWl2ZSBpbiBhIGdpdmVuIHJlcXVlc3QgZm9yIGEgbWFuYWdlci4gaWUsIE0gdGltZXMgTi4gQmlnZ2VyIGRvZXMgTk9UIG5lY2Vzc2FyaWx5IG1lYW4gYmV0dGVyLiBDZXJ0YWlubHkgMTYgc2hvdWxkIGJlIGFuIHVwcGVyIGxpbWl0LiAzMiBpcyB0aGUgaGFyZCBjb2RlZCBsaW1pdC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzgzIG9mIGZpbGUgYWdlbnRfcmVnaXN0cnkuYy4KLS5TUyAiaW50IHVucmVnaXN0ZXJfbWliX2NvbnRleHQgKG9pZCAqIG5hbWUsIHNpemVfdCBsZW4sIGludCBwcmlvcml0eSwgaW50IHJhbmdlX3N1YmlkLCBvaWQgcmFuZ2VfdWJvdW5kLCBjb25zdCBjaGFyICogY29udGV4dCkiCi0uUFAKLVVucmVnaXN0ZXJzIGFuIE9JRCB0aGF0IGhhcyBhbiBhc3NvY2lhdGVkIGNvbnRleHQgbmFtZSB2YWx1ZS4gVHlwaWNhbGx5IHVzZWQgd2hlbiBhIFxmQm1vZHVsZVxmUCBoYXMgbXVsdGlwbGUgY29udGV4dHMgZGVmaW5lZC4gVGhlIHBhcmFtZXRlcnMgcHJpb3JpdHksIHJhbmdlX3N1YmlkLCBhbmQgcmFuZ2VfdWJvdW5kIHNob3VsZCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYWdlbnR4LCBzZWUgUkZDIDI3NDEsIG90aGVyd2lzZSB0aGVzZSB2YWx1ZXMgc2hvdWxkIGFsd2F5cyBiZSAwLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5hbWVcZlAgdGhlIHNwZWNpZmljIE9JRCB0byB1bnJlZ2lzdGVyIGlmIGl0IGNvbmF0aW5zIHRoZSBhc3NvY2lhdGVkIGNvbnRleHQuCi0uYnIKLVxmSWxlblxmUCB0aGUgbGVuZ3RoIG9mIHRoZSBPSUQsIHVzZSBPSURfTEVOR1RIIG1hY3JvLgotLmJyCi1cZklwcmlvcml0eVxmUCBhIHZhbHVlIGJldHdlZW4gMSBhbmQgMjU1LCB1c2VkIHRvIGFjaGlldmUgYSBkZXNpcmVkIGNvbmZpZ3VyYXRpb24gd2hlbiBkaWZmZXJlbnQgc2Vzc2lvbnMgcmVnaXN0ZXIgaWRlbnRpY2FsIG9yIG92ZXJsYXBwaW5nIHJlZ2lvbnMuIFN1YmFnZW50cyB3aXRoIG5vIHBhcnRpY3VsYXIga25vd2xlZGdlIG9mIHByaW9yaXR5IHNob3VsZCByZWdpc3RlciB3aXRoIHRoZSBkZWZhdWx0IHZhbHVlIG9mIDEyNy4KLS5icgotXGZJcmFuZ2Vfc3ViaWRcZlAgcGVybWl0cyBzcGVjaWZ5aW5nIGEgcmFuZ2UgaW4gcGxhY2Ugb2Ygb25lIG9mIGEgc3VidHJlZSBzdWItaWRlbnRpZmllcnMuIFdoZW4gdGhpcyB2YWx1ZSBpcyB6ZXJvLCBubyByYW5nZSBpcyBiZWluZyBzcGVjaWZpZWQuCi0uYnIKLVxmSXJhbmdlX3Vib3VuZFxmUCB0aGUgdXBwZXIgYm91bmQgb2YgYSBzdWItaWRlbnRpZmllcidzIHJhbmdlLiBUaGlzIGZpZWxkIGlzIHByZXNlbnQgb25seSBpZiByYW5nZV9zdWJpZCBpcyBub3QgMC4KLS5icgotXGZJY29udGV4dFxmUCBhIGNvbnRleHQgbmFtZSB0aGF0IGhhcyBiZWVuIGNyZWF0ZWQKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk2OSBvZiBmaWxlIGFnZW50X3JlZ2lzdHJ5LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zIGIvbWFuL25ldHNubXBfYWdlbnRfdHJhcC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YjUxNzFkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2FnZW50X3RyYXAuMworKysgL2Rldi9udWxsCkBAIC0xLDMxNyArMCwwIEBACi0uVEggIlRyYXAgZ2VuZXJhdGlvbiByb3V0aW5lcyBmb3IgbWliIG1vZHVsZXMgdG8gdXNlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotVHJhcCBnZW5lcmF0aW9uIHJvdXRpbmVzIGZvciBtaWIgbW9kdWxlcyB0byB1c2UgXC0gCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJhcF9zaW5rXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QVjJfVFJBUFNfUFJFRklYXGZQICAgU05NUF9PSURfU05NUE1PRFVMRVMsMSwxLDUiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QVjJfVFJBUF9PQkpTX1BSRUZJWFxmUCAgIFNOTVBfT0lEX1NOTVBNT0RVTEVTLDEsMSw0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUFYyX0NPTU1fT0JKU19QUkVGSVhcZlAgICBTTk1QX09JRF9TTk1QTU9EVUxFUywxOCwxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9BVVRIRU5USUNBVEVEX1RSQVBTX0VOQUJMRURcZlAgICAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9BVVRIRU5USUNBVEVEX1RSQVBTX0RJU0FCTEVEXGZQICAgMiIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1BWF9BUkdTXGZQICAgMTI4IgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmluaXRfdHJhcHNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhZGRfdHJhcF9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBpbnQgcGR1dHlwZSwgaW50IGNvbmZpcm0sIGludCB2ZXJzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVtb3ZlX3RyYXBfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNyZWF0ZV90cmFwX3Nlc3Npb25cZlAgKGNoYXIgKnNpbmssIHVfc2hvcnQgc2lua3BvcnQsIGNoYXIgKmNvbSwgaW50IHZlcnNpb24sIGludCBwZHV0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX2ZyZWVfdHJhcHNpbmtzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3BkdVxmUCAqIFxmQmNvbnZlcnRfdjJwZHVfdG9fdjFcZlAgKFxmQm5ldHNubXBfcGR1XGZQICp0ZW1wbGF0ZV92MnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJjb252ZXJ0X3YxcGR1X3RvX3YyXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqdGVtcGxhdGVfdjFwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NlbmRfdHJhcHNcZlAgKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsIG9pZCAqZW50ZXJwcmlzZSwgaW50IGVudGVycHJpc2VfbGVuZ3RoLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcnMsIGNoYXIgKmNvbnRleHQsIGludCBmbGFncykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiBhbGxvd3MgeW91IHRvIG1ha2UgYSBkaXN0aW5jdGlvbiBiZXR3ZWVuIGdlbmVyaWMgdHJhcHMgZnJvbSBkaWZmZXJlbnQgY2xhc3NlcyBvZiBlcXVpcG1lbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZW5kX2VudGVycHJpc2VfdHJhcF92YXJzXGZQIChpbnQgdHJhcCwgaW50IHNwZWNpZmljLCBvaWQgKmVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX2luZm9ybV9yZXNwb25zZVxmUCAoaW50IG9wLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIGludCByZXFpZCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdm9pZCAqbWFnaWMpIgotLmJyCi0uUkkgIlxmSUNhcHR1cmVzIHJlc3BvbnNlcyBvciB0aGUgbGFjayB0aGVyZSBvZiBmcm9tIElORk9STXMgdGhhdCB3ZXJlIHNlbnQgMSkgYSByZXNwb25zZSBpcyByZWNlaXZlZCBmcm9tIGFuIElORk9STSAyKSBvbmUgaXNuJ3QgcmVjZWl2ZWQgYW5kIHRoZSByZXRyaWVzL3RpbWVvdXRzIGhhdmUgZmFpbGVkLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2VuZF90cmFwX3RvX3Nlc3NcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2VzcywgXGZCbmV0c25tcF9wZHVcZlAgKnRlbXBsYXRlX3BkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZW5kX3RyYXBfdmFyc1xmUCAoaW50IHRyYXAsIGludCBzcGVjaWZpYywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNlbmRfZWFzeV90cmFwXGZQIChpbnQgdHJhcCwgaW50IHNwZWNpZmljKSIKLS5icgotLlJJICJcZklTZW5kcyBhbiBTTk1QdjEgdHJhcCAob3IgdGhlIFNOTVB2MiBlcXVpdmFsZW50KSB0byB0aGUgbGlzdCBvZiBjb25maWd1cmVkIHRyYXAgZGVzdGluYXRpb25zIChvciAnc2lua3MnKSwgdXNpbmcgdGhlIHByb3ZpZGVkIHZhbHVlcyBmb3IgdGhlIGdlbmVyaWMgdHJhcCB0eXBlIGFuZCBzcGVjaWZpYyB0cmFwIHZhbHVlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2VuZF92MnRyYXBcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFycykiCi0uYnIKLS5SSSAiXGZJVXNlcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiBcZkJ2YXJpYWJsZVxmUCBiaW5kaW5ncyB0byBmb3JtIGFuIFNOTVB2MiB0cmFwLCB3aGljaCBpcyBzZW50IHRvIFNOTVB2Mi1jYXBhYmxlIHNpbmtzIG9uIHRoZSBjb25maWd1cmVkIGxpc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZW5kX3RyYXBfcGR1XGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX3BhcnNlX2NvbmZpZ19hdXRodHJhcFxmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcGRfcGFyc2VfY29uZmlnX3RyYXBzaW5rXGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9wYXJzZV9jb25maWdfdHJhcDJzaW5rXGZQIChjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX3BhcnNlX2NvbmZpZ19pbmZvcm1zaW5rXGZQIChjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBkX3BhcnNlX2NvbmZpZ190cmFwc2Vzc1xmUCAoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9wYXJzZV9jb25maWdfdHJhcGNvbW11bml0eVxmUCAoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wZF9mcmVlX3RyYXBjb21tdW5pdHlcZlAgKHZvaWQpIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJhcF9zaW5rXGZQICogXGZCc2lua3NcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCB0aW1ldmFsIFxmQnN0YXJ0dGltZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCb2JqaWRfZW50ZXJwcmlzZXRyYXBcZlAgW10gPSB7IE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJ0cmFwX3ZlcnNpb25faWRcZlAgW10gPSB7IE5FVFNOTVBfU1lTVEVNX01JQiB9IgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJlbnRlcnByaXNldHJhcF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnRyYXBfdmVyc2lvbl9pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQnRyYXBfcHJlZml4XGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmNvbGRfc3RhcnRfb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAxIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQndhcm1fc3RhcnRfb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUFNfUFJFRklYLCAyIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmxpbmtfZG93bl9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDMgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCbGlua191cF9vaWRcZlAgW10gPSB7IFNOTVBWMl9UUkFQU19QUkVGSVgsIDQgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCYXV0aF9mYWlsX29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgNSB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJlZ3BfeHh4X29pZFxmUCBbXSA9IHsgU05NUFYyX1RSQVBTX1BSRUZJWCwgOTkgfSIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCc25tcHRyYXBfb2lkXGZQIFtdID0geyBTTk1QVjJfVFJBUF9PQkpTX1BSRUZJWCwgMSwgMCB9IgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJzbm1wdHJhcGVudGVycHJpc2Vfb2lkXGZQIFtdIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJzeXN1cHRpbWVfb2lkXGZQIFtdID0geyBTTk1QX09JRF9NSUIyLCAxLCAzLCAwIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNubXB0cmFwX29pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQnNubXB0cmFwZW50ZXJwcmlzZV9vaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzeXN1cHRpbWVfb2lkX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCYWdlbnRhZGRyX29pZFxmUCBbXSA9IHsgU05NUFYyX0NPTU1fT0JKU19QUkVGSVgsIDMsIDAgfSIKLS5icgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCYWdlbnRhZGRyX29pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkIFxmQmNvbW11bml0eV9vaWRcZlAgW10gPSB7IFNOTVBWMl9DT01NX09CSlNfUFJFRklYLCA0LCAwIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbW11bml0eV9vaWRfbGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzbm1wX3RyYXBjb21tdW5pdHlcZlAgPSBOVUxMIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2VuYWJsZWF1dGhlbnRyYXBzXGZQID0gU05NUF9BVVRIRU5USUNBVEVEX1RSQVBTX0RJU0FCTEVEIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2VuYWJsZWF1dGhlbnRyYXBzc2V0XGZQID0gMCIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgaGFuZGxlX2luZm9ybV9yZXNwb25zZSAoaW50IG9wLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBzZXNzaW9uLCBpbnQgcmVxaWQsIFxmQm5ldHNubXBfcGR1XGZQICogcGR1LCB2b2lkICogbWFnaWMpIgotLlBQCi1DYXB0dXJlcyByZXNwb25zZXMgb3IgdGhlIGxhY2sgdGhlcmUgb2YgZnJvbSBJTkZPUk1zIHRoYXQgd2VyZSBzZW50IDEpIGEgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgZnJvbSBhbiBJTkZPUk0gMikgb25lIGlzbid0IHJlY2VpdmVkIGFuZCB0aGUgcmV0cmllcy90aW1lb3V0cyBoYXZlIGZhaWxlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NTAgb2YgZmlsZSBhZ2VudF90cmFwLmMuCi0uU1MgImludCBuZXRzbm1wX3NlbmRfdHJhcHMgKGludCB0cmFwLCBpbnQgc3BlY2lmaWMsIG9pZCAqIGVudGVycHJpc2UsIGludCBlbnRlcnByaXNlX2xlbmd0aCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFycywgY2hhciAqIGNvbnRleHQsIGludCBmbGFncykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gYWxsb3dzIHlvdSB0byBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBnZW5lcmljIHRyYXBzIGZyb20gZGlmZmVyZW50IGNsYXNzZXMgb2YgZXF1aXBtZW50LiBGb3IgZXhhbXBsZSwgeW91IG1heSB3YW50IHRvIGhhbmRsZSBhIFNOTVBfVFJBUF9MSU5LRE9XTiB0cmFwIGZvciBhIHBhcnRpY3VsYXIgZGV2aWNlIGluIGEgZGlmZmVyZW50IG1hbm5lciB0byBhIGdlbmVyaWMgc3lzdGVtIFNOTVBfVFJBUF9MSU5LRE9XTiB0cmFwLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXRyYXBcZlAgaXMgdGhlIGdlbmVyaWMgdHJhcCB0eXBlLiBUaGUgdHJhcCB0eXBlcyBhcmU6Ci0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9DT0xEU1RBUlQ6IGNvbGQgc3RhcnQKLS5JUCAiXChidSIgMgotU05NUF9UUkFQX1dBUk1TVEFSVDogd2FybSBzdGFydAotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfTElOS0RPV046IGxpbmsgZG93bgotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfTElOS1VQOiBsaW5rIHVwCi0uSVAgIlwoYnUiIDIKLVNOTVBfVFJBUF9BVVRIRkFJTDogYXV0aGVudGljYXRpb24gZmFpbHVyZQotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfRUdQTkVJR0hCT1JMT1NTOiBlZ3AgbmVpZ2hib3IgbG9zcwotLklQICJcKGJ1IiAyCi1TTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDOiBlbnRlcnByaXNlIHNwZWNpZmljCi0uUFAKLS5icgotXGZJc3BlY2lmaWNcZlAgaXMgdGhlIHNwZWNpZmljIHRyYXAgdmFsdWUuCi0uYnIKLVxmSWVudGVycHJpc2VcZlAgaXMgYW4gZW50ZXJwcmlzZSBvaWQgaW4gd2hpY2ggeW91IHdhbnQgdG8gc2VuZCBzcGVjaWZpYyB0cmFwcyBmcm9tLgotLmJyCi1cZkllbnRlcnByaXNlX2xlbmd0aFxmUCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBlbnRlcnByaXNlIG9pZCwgdXNlIG1hY3JvLCBPSURfTEVOR1RILCB0byBjb21wdXRlIGxlbmd0aC4KLS5icgotXGZJdmFyc1xmUCBpcyB1c2VkIHRvIHN1cHBseSBsaXN0IG9mIFxmQnZhcmlhYmxlXGZQIGJpbmRpbmdzIHRvIGZvcm0gYW4gU05NUHYyIHRyYXAuCi0uYnIKLVxmSWNvbnRleHRcZlAgY3VycmVudGx5IHVudXNlZAotLmJyCi1cZklmbGFnc1xmUCBjdXJyZW50bHkgdW51c2VkCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc2VuZF9lYXN5X3RyYXBcZlAgCi0uUFAKLVxmQnNlbmRfdjJ0cmFwXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjI5IG9mIGZpbGUgYWdlbnRfdHJhcC5jLgotLlNTICJ2b2lkIHNlbmRfZWFzeV90cmFwIChpbnQgdHJhcCwgaW50IHNwZWNpZmljKSIKLS5QUAotU2VuZHMgYW4gU05NUHYxIHRyYXAgKG9yIHRoZSBTTk1QdjIgZXF1aXZhbGVudCkgdG8gdGhlIGxpc3Qgb2YgY29uZmlndXJlZCB0cmFwIGRlc3RpbmF0aW9ucyAob3IgJ3NpbmtzJyksIHVzaW5nIHRoZSBwcm92aWRlZCB2YWx1ZXMgZm9yIHRoZSBnZW5lcmljIHRyYXAgdHlwZSBhbmQgc3BlY2lmaWMgdHJhcCB2YWx1ZS4gVGhpcyBmdW5jdGlvbiBldmVudHVhbGx5IGNhbGxzIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMuIElmIHRoZSB0cmFwIHR5cGUgaXMgbm90IHNldCB0byBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDIHRoZSBlbnRlcnByaXNlIGFuZCBlbnRlcnByaXNlX2xlbmd0aCBwYXJhbWF0ZXIgaXMgc2V0IHRvIHRoZSBwcmUgZGVmaW5lZCBORVRTTk1QX1NZU1RFTV9NSUIgb2lkIGFuZCBsZW5ndGggcmVzcGVjdGl2ZWx5LiBJZiB0aGUgdHJhcCB0eXBlIGlzIHNldCB0byBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDIHRoZSBlbnRlcnByaXNlIGFuZCBlbnRlcnByaXNlX2xlbmd0aCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gdGhlIHByZS1kZWZpbmVkIE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiBvaWQgYW5kIGxlbmd0aCByZXNwZWN0aXZlbHkuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHJhcFxmUCBpcyB0aGUgZ2VuZXJpYyB0cmFwIHR5cGUuCi0uYnIKLVxmSXNwZWNpZmljXGZQIGlzIHRoZSBzcGVjaWZpYyB0cmFwIHZhbHVlLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotdm9pZAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLXNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMgCi0uUFAKLVxmQnNlbmRfdjJ0cmFwXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTc4IG9mIGZpbGUgYWdlbnRfdHJhcC5jLgotLlNTICJ2b2lkIHNlbmRfdjJ0cmFwIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXJzKSIKLS5QUAotVXNlcyB0aGUgc3VwcGxpZWQgbGlzdCBvZiBcZkJ2YXJpYWJsZVxmUCBiaW5kaW5ncyB0byBmb3JtIGFuIFNOTVB2MiB0cmFwLCB3aGljaCBpcyBzZW50IHRvIFNOTVB2Mi1jYXBhYmxlIHNpbmtzIG9uIHRoZSBjb25maWd1cmVkIGxpc3QuIEFuIGVxdWl2YWxlbnQgSU5GT1JNIGlzIHNlbnQgdG8gdGhlIGNvbmZpZ3VyZWQgbGlzdCBvZiBpbmZvcm0gc2lua3MuIFNpbmtzIHRoYXQgY2FuIG9ubHkgaGFuZGxlIFNOTVB2MSB0cmFwcyBhcmUgc2tpcHBlZC4KLS5QUAotVGhpcyBmdW5jdGlvbiBldmVudHVhbGx5IGNhbGxzIHNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMuIElmIHRoZSB0cmFwIHR5cGUgaXMgbm90IHNldCB0byBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDIHRoZSBlbnRlcnByaXNlIGFuZCBlbnRlcnByaXNlX2xlbmd0aCBwYXJhbWF0ZXIgaXMgc2V0IHRvIHRoZSBwcmUgZGVmaW5lZCBORVRTTk1QX1NZU1RFTV9NSUIgb2lkIGFuZCBsZW5ndGggcmVzcGVjdGl2ZWx5LiBJZiB0aGUgdHJhcCB0eXBlIGlzIHNldCB0byBTTk1QX1RSQVBfRU5URVJQUklTRVNQRUNJRklDIHRoZSBlbnRlcnByaXNlIGFuZCBlbnRlcnByaXNlX2xlbmd0aCBwYXJhbWV0ZXJzIGFyZSBzZXQgdG8gdGhlIHByZS1kZWZpbmVkIE5FVFNOTVBfTk9USUZJQ0FUSU9OX01JQiBvaWQgYW5kIGxlbmd0aCByZXNwZWN0aXZlbHkuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdmFyc1xmUCBpcyB1c2VkIHRvIHN1cHBseSBsaXN0IG9mIFxmQnZhcmlhYmxlXGZQIGJpbmRpbmdzIHRvIGZvcm0gYW4gU05NUHYyIHRyYXAuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc2VuZF9lYXN5X3RyYXBcZlAgCi0uUFAKLXNlbmRfZW50ZXJwcmlzZV90cmFwX3ZhcnMgCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQm5vdGlmaWNhdGlvbi5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAwNyBvZiBmaWxlIGFnZW50X3RyYXAuYy4KLS5TSCAiVmFyaWFibGUgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAib2lkIHNubXB0cmFwZW50ZXJwcmlzZV9vaWRbXSJcZkJJbml0aWFsIHZhbHVlOlxmUAotLlBQCi0ubmYKLQotICAgIHsgU05NUFYyX1RSQVBfT0JKU19QUkVGSVgsIDMsIDAgfQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5OSBvZiBmaWxlIGFnZW50X3RyYXAuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zIGIvbWFuL25ldHNubXBfYXNuMV9wYWNrZXRfcGFyc2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTUyZDViMC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9hc24xX3BhY2tldF9wYXJzZS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS5USCAiYXNuMSBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotYXNuMSBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuIFwtIAotLlBQCi1Ob3RlIG9uLiAgCi0KLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk5VTExcZlAgICAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSU5UMzJfTUFYXGZQICAgMjE0NzQ4MzY0NyIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQklOVDMyX01JTlxmUCAgICgwIC0gSU5UMzJfTUFYIC0gMSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJDSEVDS19PVkVSRkxPV19TXGZQKHgsIHkpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQ0hFQ0tfT1ZFUkZMT1dfVVxmUCh4LCB5KSIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9jaGVja19wYWNrZXRcZlAgKHVfY2hhciAqcGt0LCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfaW50XGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCBsb25nICppbnRwLCBzaXplX3QgaW50c2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX3BhcnNlX3Vuc2lnbmVkX2ludFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgdV9sb25nICppbnRwLCBzaXplX3QgaW50c2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX2ludFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCBsb25nICppbnRwLCBzaXplX3QgaW50c2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX3Vuc2lnbmVkX2ludFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBjb25zdCB1X2xvbmcgKmludHAsIHNpemVfdCBpbnRzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2Vfc3RyaW5nXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCB1X2NoYXIgKnN0ciwgc2l6ZV90ICpzdHJsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9zdHJpbmdcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICpzdHIsIHNpemVfdCBzdHJsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9oZWFkZXJcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9zZXF1ZW5jZVxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgdV9jaGFyIGV4cGVjdGVkX3R5cGUsIGNvbnN0IGNoYXIgKmVzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9oZWFkZXJcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgc2l6ZV90IGxlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX3NlcXVlbmNlXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIHNpemVfdCBsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9sZW5ndGhcZlAgKHVfY2hhciAqZGF0YSwgdV9sb25nICpsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9sZW5ndGhcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCBzaXplX3QgbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2Vfb2JqaWRcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgKnR5cGUsIG9pZCAqb2JqaWQsIHNpemVfdCAqb2JqaWRsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9vYmppZFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlLCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV9udWxsXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fYnVpbGRfbnVsbFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJhc25fcGFyc2VfYml0c3RyaW5nXGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyICp0eXBlLCB1X2NoYXIgKnN0ciwgc2l6ZV90ICpzdHJsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9idWlsZF9iaXRzdHJpbmdcZlAgKHVfY2hhciAqZGF0YSwgc2l6ZV90ICpkYXRhbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICpzdHIsIHNpemVfdCBzdHJsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NFxmUCAodV9jaGFyICpkYXRhLCBzaXplX3QgKmRhdGFsZW5ndGgsIHVfY2hhciAqdHlwZSwgc3RydWN0IFxmQmNvdW50ZXI2NFxmUCAqY3AsIHNpemVfdCBjb3VudGVyc2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0XGZQICh1X2NoYXIgKmRhdGEsIHNpemVfdCAqZGF0YWxlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IHN0cnVjdCBcZkJjb3VudGVyNjRcZlAgKmNwLCBzaXplX3QgY291bnRlcnNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY1xmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfbGVuZ3RoXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCBzaXplX3QgbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYXNuX3JlYWxsb2NfcmJ1aWxkX2hlYWRlclxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIHNpemVfdCBsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfaW50XGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgY29uc3QgbG9uZyAqaW50cCwgc2l6ZV90IGludHNpemUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfc3RyaW5nXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICpzdHIsIHNpemVfdCBzdHJsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50XGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9sb25nICppbnRwLCBzaXplX3QgaW50c2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmFzbl9yZWFsbG9jX3JidWlsZF9zZXF1ZW5jZVxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUsIHNpemVfdCBsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfb2JqaWRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfbnVsbFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgciwgdV9jaGFyIHR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfYml0c3RyaW5nXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCByLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICpzdHIsIHNpemVfdCBzdHJsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgaW50IHIsIHVfY2hhciB0eXBlLCBjb25zdCBzdHJ1Y3QgXGZCY291bnRlcjY0XGZQICpjcCwgc2l6ZV90IGNvdW50ZXJzaXplKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLU5vdGUgb24uIAotCi1SZS1hbGxvY2F0aW5nIHJldmVyc2UgQVNOLjEgZW5jb2RlciBmdW5jdGlvbnMuIFN5bm9wc2lzOgotLlBQCi0uUFAKLS5uZgotIHVfY2hhciAqYnVmID0gKHVfY2hhciopbWFsbG9jKDEwMCk7Ci0gdV9jaGFyIHR5cGUgPSAoQVNOX1VOSVZFUlNBTCB8IEFTTl9QUklNSVRJVkUgfCBBU05fSU5URUdFUik7Ci0gc2l6ZV90IGJ1Zl9sZW4gPSAxMDAsIG9mZnNldCA9IDA7Ci0gbG9uZyBkYXRhID0gMTIzNDU7Ci0gaW50IGFsbG93X3JlYWxsb2MgPSAxOwotIAotIGlmIChhc25fcmVhbGxvY19yYnVpbGRfaW50KCZidWYsICZidWZfbGVuLCAmb2Zmc2V0LCBhbGxvd19yZWFsbG9jLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZkYXRhLCBzaXplb2YobG9uZykpID09IDApIHsKLSAgICAgZXJyb3I7Ci0gfQotLmZpCi0uUFAKLS5QUAotTk9URSBXRUxMOiBhZnRlciBjYWxsaW5nIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2l0aCBhbGxvd19yZWFsbG9jIG5vbi16ZXJvLCBidWYgbWlnaHQgaGF2ZSBtb3ZlZCwgYnVmX2xlbiBtaWdodCBoYXZlIGdyb3duIGFuZCBvZmZzZXQgd2lsbCBoYXZlIGluY3JlYXNlZCBieSB0aGUgc2l6ZSBvZiB0aGUgZW5jb2RlZCBkYXRhLiBZb3Ugc2hvdWxkICoqTkVWRVIqKiBkbyBzb21ldGhpbmcgbGlrZSB0aGlzOgotLlBQCi0uUFAKLS5uZgotIHVfY2hhciAqYnVmID0gKHVfY2hhciAqKW1hbGxvYygxMDApLCAqcHRyOwotIHVfY2hhciB0eXBlID0gKEFTTl9VTklWRVJTQUwgfCBBU05fUFJJTUlUSVZFIHwgQVNOX0lOVEVHRVIpOwotIHNpemVfdCBidWZfbGVuID0gMTAwLCBvZmZzZXQgPSAwOwotIGxvbmcgZGF0YTEgPSAxMjM0LCBkYXRhMiA9IDU2Nzg7Ci0gaW50IHJjID0gMCwgYWxsb3dfcmVhbGxvYyA9IDE7Ci0gCi0gcmMgID0gYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCgmYnVmLCAmYnVmX2xlbiwgJm9mZnNldCwgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZSwgJmRhdGExLCBzaXplb2YobG9uZykpOwotIHB0ciA9IGJ1ZltidWZfbGVuIC0gb2Zmc2V0XTsgICAvICogcG9pbnRzIGF0IGVuY29kaW5nIG9mIGRhdGExICogLwotIGlmIChyYyA9PSAwKSB7Ci0gICAgICBlcnJvcjsKLSB9Ci0gcmMgID0gYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCgmYnVmLCAmYnVmX2xlbiwgJm9mZnNldCwgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZkYXRhMiwgc2l6ZW9mKGxvbmcpKTsKLSBtYWtlIHVzZSBvZiBwdHIgaGVyZTsKLS5maQotLlBQCi0uUFAKLXB0ciBpcyAqKklOVkFMSUQqKiBhdCB0aGlzIHBvaW50LiBJbiBnZW5lcmFsLCB5b3Ugc2hvdWxkIHN0b3JlIHRoZSBvZmZzZXQgdmFsdWUgYW5kIGNvbXB1dGUgcG9pbnRlcnMgd2hlbiB5b3UgbmVlZCB0aGVtOgotLlBQCi0uUFAKLS5uZgotIHVfY2hhciAqYnVmID0gKHVfY2hhciAqKW1hbGxvYygxMDApLCAqcHRyOwotIHVfY2hhciB0eXBlID0gKEFTTl9VTklWRVJTQUwgfCBBU05fUFJJTUlUSVZFIHwgQVNOX0lOVEVHRVIpOwotIHNpemVfdCBidWZfbGVuID0gMTAwLCBvZmZzZXQgPSAwLCBwdHJfb2Zmc2V0OwotIGxvbmcgZGF0YTEgPSAxMjM0LCBkYXRhMiA9IDU2Nzg7Ci0gaW50IHJjID0gMCwgYWxsb3dfcmVhbGxvYyA9IDE7Ci0gCi0gcmMgID0gYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCgmYnVmLCAmYnVmX2xlbiwgJm9mZnNldCwgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZkYXRhMSwgc2l6ZW9mKGxvbmcpKTsKLSBwdHJfb2Zmc2V0ID0gb2Zmc2V0OwotIGlmIChyYyA9PSAwKSB7Ci0gICAgICBlcnJvcjsKLSB9Ci0gcmMgID0gYXNuX3JlYWxsb2NfcmJ1aWxkX2ludCgmYnVmLCAmYnVmX2xlbiwgJm9mZnNldCwgYWxsb3dfcmVhbGxvYywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsICZkYXRhMiwgc2l6ZW9mKGxvbmcpKTsKLSBwdHIgPSBidWYgKyBidWZfbGVuIC0gcHRyX29mZnNldAotIG1ha2UgdXNlIG9mIHB0ciBoZXJlOwotLmZpCi0uUFAKLS5QUAotSGVyZSwgeW91IGNhbiBzZWUgdGhhdCBwdHIgd2lsbCBiZSBhIHZhbGlkIHBvaW50ZXIgZXZlbiBpZiB0aGUgYmxvY2sgb2YgbWVtb3J5IGhhcyBiZWVuIG1vdmVkLCBhcyBpdCBtYXkgd2VsbCBoYXZlIGJlZW4uIFBsZW50eSBvZiBleGFtcGxlcyBvZiB1c2FnZSBhbGwgb3ZlciBcZkJhc24xLmNcZlAsIFxmQnNubXBfYXBpLmNcZlAsIFxmQnNubXB1c20uY1xmUC4KLS5QUAotVGhlIG90aGVyIHRoaW5nIHlvdSBzaG91bGQgKipORVZFUioqIGRvIGlzIHRvIHBhc3MgYSBwb2ludGVyIHRvIGEgYnVmZmVyIG9uIHRoZSBzdGFjayBhcyB0aGUgZmlyc3QgYXJndW1lbnQgd2hlbiBhbGxvd19yZWFsbG9jIGlzIG5vbi16ZXJvLCB1bmxlc3MgeW91IHJlYWxseSBrbm93IHdoYXQgeW91IGFyZSBkb2luZyBhbmQgeW91ciBtYWNoaW5lL2NvbXBpbGVyIGFsbG93cyB5b3UgdG8gZnJlZSBub24taGVhcCBtZW1vcnkuIFRoZXJlIGFyZSBydW1vdXJzIHRoYXQgc3VjaCB0aGluZ3MgZXhpc3QsIGJ1dCBtYW55IGNvbnNpZGVyIHRoZW0gbm8gbW9yZSB0aGFuIHRoZSB3aWxkIHRhbGVzIG9mIGEgZm9vbC4KLS5QUAotT2YgY291cnNlLCB5b3UgY2FuIHBhc3MgYWxsb3dfcmVhbGxvYyBhcyB6ZXJvLCB0byBpbmRpY2F0ZSB0aGF0IHlvdSBkbyBub3Qgd2lzaCB0aGUgcGFja2V0IGJ1ZmZlciB0byBiZSByZWFsbG9jYXRlZCBmb3Igc29tZSByZWFzb247IHBlcmhhcHMgYmVjYXVzZSBpdCBpcyBvbiB0aGUgc3RhY2suIFRoaXMgbWF5IGJlIHVzZWZ1bCB0byBlbXVsYXRlIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBvbGQgQVBJOgotLlBQCi0uUFAKLS5uZgotIHVfY2hhciBteV9zdGF0aWNfYnVmZmVyWzEwMF0sICpjcCA9IE5VTEw7Ci0gc2l6ZV90IG15X3N0YXRpY19idWZmZXJfbGVuID0gMTAwOwotIGZsb2F0IG15X3BpID0gKGZsb2F0KTIyLyhmbG9hdCk3OwotIAotIGNwID0gYXNuX3JidWlsZF9mbG9hdChteV9zdGF0aWNfYnVmZmVyLCAmbXlfc3RhdGljX2J1ZmZlcl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIEFTTl9PUEFRVUVfRkxPQVQsICZteV9waSwgc2l6ZW9mKGZsb2F0KSk7Ci0gaWYgKGNwID09IE5VTEwpIHsKLSBlcnJvcjsKLSB9Ci0uZmkKLS5QUAotLlBQCi1JUyBFUVVJVkFMRU5UIFRPOgotLlBQCi0uUFAKLS5uZgotIHVfY2hhciBteV9zdGF0aWNfYnVmZmVyWzEwMF07Ci0gc2l6ZV90IG15X3N0YXRpY19idWZmZXJfbGVuID0gMTAwLCBteV9vZmZzZXQgPSAwOwotIGZsb2F0IG15X3BpID0gKGZsb2F0KTIyLyhmbG9hdCk3OwotIGludCByYyA9IDA7Ci0gCi0gcmMgPSBhc25fcmVhbGxvY19yYnVpbGRfZmxvYXQoJm15X3N0YXRpY19idWZmZXIsICZteV9zdGF0aWNfYnVmZmVyX2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbXlfb2Zmc2V0LCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PUEFRVUVfRkxPQVQsICZteV9waSwgc2l6ZW9mKGZsb2F0KSk7Ci0gaWYgKHJjID09IDApIHsKLSAgIGVycm9yOwotIH0KLS5maQotLlBQCi0gCi0uU0ggIkRlZmluZSBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICIjZGVmaW5lIENIRUNLX09WRVJGTE9XX1MoeCwgeSkiXGZCVmFsdWU6XGZQCi0uUFAKLS5uZgotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHggPiBJTlQzMl9NQVgpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIERFQlVHTVNHKCgnYXNuJywndHJ1bmNhdGluZyBzaWduZWQgdmFsdWUgJWxkIHRvIDMyIGJpdHMgKCVkKVxuJywobG9uZykoeCkseSkpOyBcCi0gICAgICAgICAgICB4ICY9IDB4ZmZmZmZmZmY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIH0gZWxzZSBpZiAoeCA8IElOVDMyX01JTikgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICBERUJVR01TRygoJ2FzbicsJ3RydW5jYXRpbmcgc2lnbmVkIHZhbHVlICVsZCB0byAzMiBiaXRzICglZClcbicsKGxvbmcpKHgpLHkpKTsgXAotICAgICAgICAgICAgeCA9IDAgLSAoeCAmIDB4ZmZmZmZmZmYpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIH0gd2hpbGUoMCkKLS5maQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjE0IG9mIGZpbGUgYXNuMS5jLgotLlNTICIjZGVmaW5lIENIRUNLX09WRVJGTE9XX1UoeCwgeSkiXGZCVmFsdWU6XGZQCi0uUFAKLS5uZgotZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgaWYgKHggPiBVSU5UMzJfTUFYKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIHggJj0gMHhmZmZmZmZmZjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgIERFQlVHTVNHKCgnYXNuJywndHJ1bmNhdGluZyB1bnNpZ25lZCB2YWx1ZSB0byAzMiBiaXRzICglZClcbicseSkpOyBcCi0gICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSB3aGlsZSgwKQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjQgb2YgZmlsZSBhc24xLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYmFieV9zdGVwcy4zIGIvbWFuL25ldHNubXBfYmFieV9zdGVwcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTg3NGJiLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2JhYnlfc3RlcHMuMworKysgL2Rldi9udWxsCkBAIC0xLDQ1ICswLDAgQEAKLS5USCAiYmFieV9zdGVwcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWJhYnlfc3RlcHMgXC0gCi0uUFAKLUNhbGxzIHlvdXIgaGFuZGxlciBpbiBiYWJ5X3N0ZXBzIGZvciBzZXQgcHJvY2Vzc2luZy4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCYmFieV9zdGVwc19hY2Nlc3NfbXVsdGlwbGV4ZXI6IGNhbGxzIGluZGl2aWR1YWwgYWNjZXNzIG1ldGhvZHMgYmFzZWQgb24gYmFieV9zdGVwIG1vZGUuXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfZ2V0XGZQICh1X2xvbmcgbW9kZXMpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBiYWJ5X3N0ZXBzIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9pbml0XGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgYmFieV9zdGVwcyBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBiYWJ5X3N0ZXBzIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1DYWxscyB5b3VyIGhhbmRsZXIgaW4gYmFieV9zdGVwcyBmb3Igc2V0IHByb2Nlc3NpbmcuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2JhYnlfc3RlcHNfaGFuZGxlcl9nZXQgKHVfbG9uZyBtb2RlcykiCi0uUFAKLXJldHVybnMgYSBiYWJ5X3N0ZXBzIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTggb2YgZmlsZSBiYWJ5X3N0ZXBzLmMuCi0uU1MgInZvaWQgbmV0c25tcF9iYWJ5X3N0ZXBzX2hhbmRsZXJfaW5pdCAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBiYWJ5X3N0ZXBzIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGJhYnlfc3RlcHMgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMTkgb2YgZmlsZSBiYWJ5X3N0ZXBzLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfYnVsa190b19uZXh0LjMgYi9tYW4vbmV0c25tcF9idWxrX3RvX25leHQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOWQyODIyMC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9idWxrX3RvX25leHQuMworKysgL2Rldi9udWxsCkBAIC0xLDUyICswLDAgQEAKLS5USCAiYnVsa190b19uZXh0IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotYnVsa190b19uZXh0IFwtIAotLlBQCi1Db252ZXJ0IEdFVEJVTEsgcmVxdWVzdHMgaW50byBHRVRORVhUIHJlcXVlc3RzIGZvciB0aGUgaGFuZGxlci4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfYnVsa190b19uZXh0X2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBidWxrX3RvX25leHQgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfYnVsa190b19uZXh0X2ZpeF9yZXF1ZXN0c1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZkl0YWtlcyBhbnN3ZXJlZCByZXF1ZXN0cyBhbmQgZGVjcmVtZW50cyB0aGUgcmVwZWF0IGNvdW50IGFuZCB1cGRhdGVzIHRoZSByZXF1ZXN0cyB0byB0aGUgbmV4dCB0by1kbyB2YXJiaW5kIGluIHRoZSBsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYnVsa190b19uZXh0X2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIGJ1bGtfdG9fbmV4dCBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBidWxrX3RvX25leHQgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUNvbnZlcnQgR0VUQlVMSyByZXF1ZXN0cyBpbnRvIEdFVE5FWFQgcmVxdWVzdHMgZm9yIHRoZSBoYW5kbGVyLiAKLQotVGhlIG9ubHkgcHVycG9zZSBvZiB0aGlzIGhhbmRsZXIgaXMgdG8gY29udmVydCBhIEdFVEJVTEsgcmVxdWVzdCB0byBhIEdFVE5FWFQgcmVxdWVzdC4gSXQgaXMgaW5zZXJ0ZWQgaW50byBoYW5kbGVyIGNoYWlucyB3aGVyZSB0aGUgaGFuZGxlciBoYXMgbm90IHNldCB0aGUgSEFORExFUl9DQU5fR0VUQlVMSyBmbGFnLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidm9pZCBuZXRzbm1wX2J1bGtfdG9fbmV4dF9maXhfcmVxdWVzdHMgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdHMpIgotLlBQCi10YWtlcyBhbnN3ZXJlZCByZXF1ZXN0cyBhbmQgZGVjcmVtZW50cyB0aGUgcmVwZWF0IGNvdW50IGFuZCB1cGRhdGVzIHRoZSByZXF1ZXN0cyB0byB0aGUgbmV4dCB0by1kbyB2YXJiaW5kIGluIHRoZSBsaXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDIgb2YgZmlsZSBidWxrX3RvX25leHQuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfYnVsa190b19uZXh0X2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgYnVsa190b19uZXh0IGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjcgb2YgZmlsZSBidWxrX3RvX25leHQuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfYnVsa190b19uZXh0X2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBidWxrX3RvX25leHQgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgYnVsa190b19uZXh0IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM5IG9mIGZpbGUgYnVsa190b19uZXh0LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zIGIvbWFuL25ldHNubXBfY2FjaGVfaGFuZGxlci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiNTNiYjgxLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2NhY2hlX2hhbmRsZXIuMworKysgL2Rldi9udWxsCkBAIC0xLDIyNSArMCwwIEBACi0uVEggImNhY2hlX2hhbmRsZXIiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1jYWNoZV9oYW5kbGVyIFwtIAotLlBQCi1NYWludGFpbnMgYSBjYWNoZSBvZiBkYXRhIGZvciB1c2UgYnkgbG93ZXIgbGV2ZWwgaGFuZGxlcnMuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfY2FjaGVfZ2V0X2hlYWRcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWdldCBjYWNoZSBoZWFkIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWRcZlAgKG9pZCAqcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKSIKLS5icgotLlJJICJcZklmaW5kIGV4aXN0aW5nIGNhY2hlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jYWNoZVxmUCAqIFxmQm5ldHNubXBfY2FjaGVfY3JlYXRlXGZQIChpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqbG9hZF9ob29rLCBOZXRzbm1wQ2FjaGVGcmVlICpmcmVlX2hvb2ssIG9pZCAqcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgY2FjaGUgXGZQIgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCbmV0c25tcF9jYWNoZV90aW1lcl9zdGFydFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUpIgotLmJyCi0uUkkgIlxmSXN0YXJ0cyB0aGUgcmVjdXJyaW5nIGNhY2hlX2xvYWQgY2FsbGJhY2sgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY2FjaGVfdGltZXJfc3RvcFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUpIgotLmJyCi0uUkkgIlxmSXN0b3BzIHRoZSByZWN1cnJpbmcgY2FjaGVfbG9hZCBjYWxsYmFjayBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2NhY2hlX2hhbmRsZXJfZ2V0XGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGNhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X2NhY2hlX2hhbmRsZXJcZlAgKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICpsb2FkX2hvb2ssIE5ldHNubXBDYWNoZUZyZWUgKmZyZWVfaG9vaywgb2lkICpyb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBjYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NhY2hlX2hhbmRsZXJfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlKSIKLS5icgotLlJJICJcZklmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgY2FjaGUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfY2FjaGVfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgaW50IHRpbWVvdXQsIE5ldHNubXBDYWNoZUxvYWQgKmxvYWRfaG9vaywgTmV0c25tcENhY2hlRnJlZSAqZnJlZV9ob29rKSIKLS5icgotLlJJICJcZklmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgY2FjaGUgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIGNoYXIgKiBcZkJfYnVpbGRfY2FjaGVfbmFtZVxmUCAoY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NhY2hlX3JlcWluZm9faW5zZXJ0XGZQIChcZkJuZXRzbm1wX2NhY2hlXGZQICpjYWNoZSwgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSUluc2VydCB0aGUgY2FjaGUgaW5mb3JtYXRpb24gZm9yIGEgZ2l2ZW4gcmVxdWVzdCAoUERVKS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NhY2hlXGZQICogXGZCbmV0c25tcF9jYWNoZV9yZXFpbmZvX2V4dHJhY3RcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklFeHRyYWN0IHRoZSBjYWNoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiByZXF1ZXN0IChQRFUpLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfY2FjaGVfaW5mb1xmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8pIgotLmJyCi0uUkkgIlxmSUV4dHJhY3QgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FjaGVfY2hlY2tfZXhwaXJlZFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUpIgotLmJyCi0uUkkgIlxmSUNoZWNrIGlmIHRoZSBjYWNoZSB0aW1lb3V0IGhhcyBwYXNzZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZFxmUCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqY2FjaGUpIgotLmJyCi0uUkkgIlxmSVJlbG9hZCB0aGUgY2FjaGUgaWYgcmVxdWlyZWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FjaGVfaXNfdmFsaWRcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklJcyB0aGUgY2FjaGUgdmFsaWQgZm9yIGEgZ2l2ZW4gcmVxdWVzdD8gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pc19jYWNoZV92YWxpZFxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8pIgotLmJyCi0uUkkgIlxmSUlzIHRoZSBjYWNoZSB2YWxpZCBmb3IgYSBnaXZlbiByZXF1ZXN0PyBmb3IgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FjaGVfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSUltcGxlbWVudHMgdGhlIGNhY2hlIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWxlYXNlX2NhY2hlZF9yZXNvdXJjZXNcZlAgKHVuc2lnbmVkIGludCByZWdObywgdm9pZCAqY2xpZW50YXJncykiCi0uYnIKLS5SSSAiXGZJcnVuIHJlZ3VsYXJseSB0byBhdXRvbWF0aWNhbGx5IHJlbGVhc2UgY2FjaGVkIHJlc291cmNlcy4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLU1haW50YWlucyBhIGNhY2hlIG9mIGRhdGEgZm9yIHVzZSBieSBsb3dlciBsZXZlbCBoYW5kbGVycy4gCi0KLVRoaXMgaGVscGVyIGNoZWNrcyB0byBzZWUgd2hldGhlciB0aGUgZGF0YSBoYXMgYmVlbiBsb2FkZWQgJ3JlY2VudGx5JyAoYWNjb3JkaW5nIHRvIHRoZSB0aW1lb3V0IGZvciB0aGF0IHBhcnRpY3VsYXIgY2FjaGUpIGFuZCBjYWxscyB0aGUgcmVnaXN0ZXJlZCAnbG9hZF9jYWNoZScgcm91dGluZSBpZiBuZWNlc3NhcnkuIFRoZSBsb3dlciBoYW5kbGVycyBjYW4gdGhlbiB3b3JrIHdpdGggdGhpcyBsb2NhbCBjYWNoZWQgZGF0YS4KLS5QUAotQSB0aW1lb3V0IHZhbHVlIG9mIC0xIHdpbGwgY2F1c2UgXGZCbmV0c25tcF9jYWNoZV9jaGVja19leHBpcmVkKClcZlAgdG8gYWx3YXlzIHJldHVybiB0cnVlLCBhbmQgdGh1cyB0aGUgY2FjaGUgd2lsbCBiZSByZWxvYWRlZCBmb3IgZXZlcnkgcmVxdWVzdC4KLS5QUAotVG8gbWluaW16ZSByZXNvdXJjZSB1c2UgYnkgdGhlIGFnZW50LCBhIHBlcmlvZGljIGNhbGxiYWNrIGNoZWNrcyBmb3IgZXhwaXJlZCBjYWNoZXMsIGFuZCB3aWxsIGNhbGwgdGhlIGZyZWVfY2FjaGUgZnVuY3Rpb24gZm9yIGFueSBleHBpcmVkIGNhY2hlLgotLlBQCi1UaGUgbG9hZF9jYWNoZSByb3V0ZSBzaG91bGQgcmV0dXJuIGEgbmVnYXRpdmUgbnVtYmVyIGlmIHRoZSBjYWNoZSB3YXMgbm90IHN1Y2Nlc3NmdWxseSBsb2FkZWQuIDAgb3IgYW55IHBvc2l0aXZlIG51bWJlciBpbmRpY2F0ZXMgc3VjY2Vzc3MuCi0uUFAKLVNldmVyYWwgZmxhZ3MgY2FuIGJlIHNldCB0byBhZmZlY3QgdGhlIG9wZXJhdGlvbnMgb24gdGhlIGNhY2hlLgotLlBQCi1JZiBORVRTTk1QX0NBQ0hFX0RPTlRfSU5WQUxJREFURV9PTl9TRVQgaXMgc2V0LCB0aGUgZnJlZV9jYWNoZSBtZXRob2Qgd2lsbCBub3QgYmUgY2FsbGVkIGFmdGVyIGEgc2V0IHJlcXVlc3QgaGFzIHByb2Nlc3NlZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsb3dlciBtaWIgaGFuZGxlciB1c2luZyB0aGUgY2FjaGUgaGFzIG1haW50YWluZWQgY2FjaGUgY29uc2lzdGVuY3kuCi0uUFAKLUlmIE5FVFNOTVBfQ0FDSEVfRE9OVF9GUkVFX0JFRk9SRV9MT0FEIGlzIHNldCwgdGhlIGZyZWVfY2FjaGUgbWV0aG9kIHdpbGwgbm90IGJlIGNhbGxlZCBiZWZvcmUgdGhlIGxvYWRfY2FjaGUgbWV0aG9kIGlzIGNhbGxlZC4gSXQgaXMgYXNzdW1lZCB0aGF0IHRoZSBsb2FkX2NhY2hlIHJvdXRpbmUgd2lsbCBwcm9wZXJseSBkZWFsIHdpdGggYmVpbmcgY2FsbGVkIHdpdGggYSB2YWxpZCBjYWNoZS4KLS5QUAotSWYgTkVUU05NUF9DQUNIRV9ET05UX0ZSRUVfRVhQSVJFRCBpcyBzZXQsIHRoZSBmcmVlX2NhY2hlIG1ldGhvZCB3aWxsIG5vdCBiZSBjYWxsZWQgd2l0aCB0aGUgY2FjaGUgZXhwaXJlcy4gVGhlIGV4cGlyZWQgZmxhZyB3aWxsIGJlIHNldCwgYnV0IHRoZSB2YWxpZCBmbGFnIHdpbGwgbm90IGJlIGNsZWFyZWQuIEl0IGlzIGFzc3VtZWQgdGhhdCB0aGUgbG9hZF9jYWNoZSByb3V0aW5lIHdpbGwgcHJvcGVybHkgZGVhbCB3aXRoIGJlaW5nIGNhbGxlZCB3aXRoIGEgdmFsaWQgY2FjaGUuCi0uUFAKLUlmIE5FVFNOTVBfQ0FDSEVfUFJFTE9BRCBpcyBzZXQgd2hlbiBhIHRoZSBjYWNoZSBoYW5kbGVyIGlzIGNyZWF0ZWQsIHRoZSBjYWNoZSBsb2FkIHJvdXRpbmUgd2lsbCBiZSBjYWxsZWQgaW1tZWRpYXRlbHkuCi0uUFAKLUlmIE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UgaXMgc2V0LCB0aGUgcGVyaW9kaWMgY2FsbGJhY2sgdGhhdCBjaGVja3MgZm9yIGV4cGlyZWQgY2FjaGVzIHdpbGwgc2tpcCB0aGUgY2FjaGUuIFRoZSBjYWNoZSB3aWxsIG9ubHkgYmUgY2hlY2tlZCBmb3IgZXhwaXJhdGlvbiB3aGVuIGEgcmVxdWVzdCB0cmlnZ2VycyB0aGUgY2FjaGUgaGFuZGxlci4gVGhpcyBpcyB1c2VmdWwgaWYgdGhlIGNhY2hlIGhhcyBpdCdzIG93biBwZXJpb2RpYyBjYWxsYmFjayB0byBrZWVwIHRoZSBjYWNoZSBmcmVzaC4KLS5QUAotSWYgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCBpcyBzZXQsIGEgdGltZXIgd2lsbCBiZSBzZXQgdXAgdG8gcmVsb2FkIHRoZSBjYWNoZSB3aGVuIGl0IGV4cGlyZXMuIFRoaXMgaXMgdXNlZnVsIGZvciBrZWVwaW5nIHRoZSBjYWNoZSBmcmVzaCwgZXZlbiBpbiB0aGUgYWJzZW5jZSBvZiBpbmNvbWluZyBzbm1wIHJlcXVlc3RzLgotLlBQCi1IZXJlIGFyZSBzb21lIHN1Z2dlc3Rpb25zIGZvciBzb21lIGNvbW1vbiBzaXR1YXRpb25zLgotLlBQCi1DYWNoZWQgRmlsZTogSWYgeW91ciB0YWJsZSBpcyBiYXNlZCBvbiBhIGZpbGUgdGhhdCBtYXkgcGVyaW9kaWNhbGx5IGNoYW5nZSwgeW91IGNhbiB0ZXN0IHRoZSBtb2RpZmljYXRpb24gZGF0ZSB0byBzZWUgaWYgdGhlIGZpbGUgaGFzIGNoYW5nZWQgc2luY2UgdGhlIGxhc3QgY2FjaGUgbG9hZC4gVG8gZ2V0IHRoZSBjYWNoZSBoZWxwZXIgdG8gY2FsbCB0aGUgbG9hZCBmdW5jdGlvbiBmb3IgZXZlcnkgcmVxdWVzdCwgc2V0IHRoZSB0aW1lb3V0IHRvIC0xLCB3aGljaCB3aWxsIGNhdXNlIHRoZSBjYWNoZSB0byBhbHdheXMgcmVwb3J0IHRoYXQgaXQgaXMgZXhwaXJlZC4gVGhpcyBtZWFucyB0aGF0IHlvdSB3aWxsIHdhbnQgdG8gcHJldmVudCB0aGUgYWdlbnQgZnJvbSBmbHVzaGluZyB0aGUgY2FjaGUgd2hlbiBpdCBoYXMgZXhwaXJlZCwgYW5kIHlvdSB3aWxsIGhhdmUgdG8gZmx1c2ggaXQgbWFudWFsbHkgaWYgeW91IGRldGVjdCB0aGF0IHRoZSBmaWxlIGhhcyBjaGFuZ2VkLiBUbyBhY2NvbXBsaXNoIHRoaXMsIHNldCB0aGUgZm9sbG93aW5nIGZsYWdzOgotLlBQCi1ORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9FWFBJUkVEIE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UKLS5QUAotQ29uc3RhbnQgKHBlcmlvZGljKSByZWxvYWQ6IElmIHlvdSB3YW50IHRoZSBjYWNoZSBrZXB0IHVwIHRvIGRhdGUgcmVndWxhcmx5LCBldmVuIGlmIG5vIHJlcXVlc3RzIGZvciB0aGUgdGFibGUgYXJlIHJlY2VpdmVkLCB5b3UgY2FuIGhhdmUgeW91ciBjYWNoZSBsb2FkIHJvdXRpbmUgY2FsbGVkIHBlcmlvZGljYWxseS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBpZiB5b3UgbmVlZCB0byBtb25pdG9yIHRoZSBkYXRhIGZvciBjaGFuZ2VzIChlZyBhIFxmSUxhc3RDaGFuZ2VkXGZQIG9iamVjdCkuIFlvdSB3aWxsIG5lZWQgdG8gcHJldmVudCB0aGUgYWdlbnQgZnJvbSBmbHVzaGluZyB0aGUgY2FjaGUgd2hlbiBpdCBleHBpcmVzLiBTZXQgdGhlIGNhY2hlIHRpbWVvdXQgdG8gdGhlIGZyZXF1ZW5jeSwgaW4gc2Vjb25kcywgdGhhdCB5b3Ugd2lzaCB0byByZWxvYWQgeW91ciBjYWNoZSwgYW5kIHNldCB0aGUgZm9sbG93aW5nIGZsYWdzOgotLlBQCi1ORVRTTk1QX0NBQ0hFX0RPTlRfRlJFRV9FWFBJUkVEIE5FVFNOTVBfQ0FDSEVfRE9OVF9BVVRPX1JFTEVBU0UgTkVUU05NUF9DQUNIRV9BVVRPX1JFTE9BRCAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfY2FjaGVfY2hlY2tfYW5kX3JlbG9hZCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlKSIKLS5QUAotUmVsb2FkIHRoZSBjYWNoZSBpZiByZXF1aXJlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzODUgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgImludCBuZXRzbm1wX2NhY2hlX2NoZWNrX2V4cGlyZWQgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSkiCi0uUFAKLUNoZWNrIGlmIHRoZSBjYWNoZSB0aW1lb3V0IGhhcyBwYXNzZWQuIFNldHMgYW5kIHJldHVybiB0aGUgZXhwaXJlZCBmbGFnLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3MCBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9jYWNoZVxmUCogbmV0c25tcF9jYWNoZV9jcmVhdGUgKGludCB0aW1lb3V0LCBOZXRzbm1wQ2FjaGVMb2FkICogbG9hZF9ob29rLCBOZXRzbm1wQ2FjaGVGcmVlICogZnJlZV9ob29rLCBvaWQgKiByb290b2lkLCBpbnQgcm9vdG9pZF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgY2FjaGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzYgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfY2FjaGVcZlAqIG5ldHNubXBfY2FjaGVfZmluZF9ieV9vaWQgKG9pZCAqIHJvb3RvaWQsIGludCByb290b2lkX2xlbikiCi0uUFAKLWZpbmQgZXhpc3RpbmcgY2FjaGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjAgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgIlxmQm5ldHNubXBfY2FjaGVcZlAqIG5ldHNubXBfY2FjaGVfZ2V0X2hlYWQgKHZvaWQpIgotLlBQCi1nZXQgY2FjaGUgaGVhZCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMiBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9jYWNoZV9oYW5kbGVyX2dldCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlKSIKLS5QUAotcmV0dXJucyBhIGNhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ3IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJpbnQgbmV0c25tcF9jYWNoZV9oYW5kbGVyX3JlZ2lzdGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlKSIKLS5QUAotZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIGNhY2hlIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5NSBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfY2FjaGVfaGVscGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotSW1wbGVtZW50cyB0aGUgY2FjaGUgaGFuZGxlci4gCi0uUFAKLW5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnCi0uUFAKLW5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnCi0uUFAKLW5leHQgaGFuZGxlciBjYWxsZWQgYXV0b21hdGljYWxseSAtICdBVVRPX05FWFQnIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDIwIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJpbnQgbmV0c25tcF9jYWNoZV9pc192YWxpZCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLUlzIHRoZSBjYWNoZSB2YWxpZCBmb3IgYSBnaXZlbiByZXF1ZXN0PyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQwMiBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9jYWNoZVxmUCogbmV0c25tcF9jYWNoZV9yZXFpbmZvX2V4dHJhY3QgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1FeHRyYWN0IHRoZSBjYWNoZSBpbmZvcm1hdGlvbiBmb3IgYSBnaXZlbiByZXF1ZXN0IChQRFUpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM1MCBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2NhY2hlX3JlcWluZm9faW5zZXJ0IChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUsIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1JbnNlcnQgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzMzIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJ1bnNpZ25lZCBpbnQgbmV0c25tcF9jYWNoZV90aW1lcl9zdGFydCAoXGZCbmV0c25tcF9jYWNoZVxmUCAqIGNhY2hlKSIKLS5QUAotc3RhcnRzIHRoZSByZWN1cnJpbmcgY2FjaGVfbG9hZCBjYWxsYmFjayAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5MSBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2NhY2hlX3RpbWVyX3N0b3AgKFxmQm5ldHNubXBfY2FjaGVcZlAgKiBjYWNoZSkiCi0uUFAKLXN0b3BzIHRoZSByZWN1cnJpbmcgY2FjaGVfbG9hZCBjYWxsYmFjayAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIyNiBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9jYWNoZVxmUCogbmV0c25tcF9leHRyYWN0X2NhY2hlX2luZm8gKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbykiCi0uUFAKLUV4dHJhY3QgdGhlIGNhY2hlIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuIHJlcXVlc3QgKFBEVSkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzYyIG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9jYWNoZV9oYW5kbGVyIChpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaywgb2lkICogcm9vdG9pZCwgaW50IHJvb3RvaWRfbGVuKSIKLS5QUAotcmV0dXJucyBhIGNhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc2IG9mIGZpbGUgY2FjaGVfaGFuZGxlci5jLgotLlNTICJpbnQgbmV0c25tcF9pc19jYWNoZV92YWxpZCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvKSIKLS5QUAotSXMgdGhlIGNhY2hlIHZhbGlkIGZvciBhIGdpdmVuIHJlcXVlc3Q/IGZvciBiYWNrd2FyZHMgY29tcGF0YWJpbGl0eS4gZm9yIGJhY2t3YXJkcyBjb21wYXQKLS5QUAotXGZCbmV0c25tcF9jYWNoZV9pc192YWxpZCgpXGZQIGlzIHByZWZlcnJlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MTMgb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX2NhY2hlX2hhbmRsZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBpbnQgdGltZW91dCwgTmV0c25tcENhY2hlTG9hZCAqIGxvYWRfaG9vaywgTmV0c25tcENhY2hlRnJlZSAqIGZyZWVfaG9vaykiCi0uUFAKLWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSBjYWNoZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDggb2YgZmlsZSBjYWNoZV9oYW5kbGVyLmMuCi0uU1MgInZvaWQgcmVsZWFzZV9jYWNoZWRfcmVzb3VyY2VzICh1bnNpZ25lZCBpbnQgcmVnTm8sIHZvaWQgKiBjbGllbnRhcmdzKSIKLS5QUAotcnVuIHJlZ3VsYXJseSB0byBhdXRvbWF0aWNhbGx5IHJlbGVhc2UgY2FjaGVkIHJlc291cmNlcy4geHh4IC0gbWV0aG9kIHRvIHByZXZlbnQgY2FjaGUgZnJvbSBleHBpcmluZyB3aGlsZSBhIHJlcXVlc3QgaXMgYmVpbmcgcHJvY2Vzc2VkIChlLmcuIGRlbGVnYXRlZCByZXF1ZXN0KS4gcHJvcG9zYWw6IHNldCBhIGZsYWcsIHdoaWNoIHdvdWxkIGJlIGNsZWFyZWQgd2hlbiByZXF1ZXN0IGZpbmlzaGVkICh3aGljaCBjb3VsZCBiZSBhY29tcGxpc2hlZCBieSBhIGR1bW15IGRhdGEgbGlzdCBpdGVtIGluIGFnZW50IHJlcSBpbmZvICYgY3VzdG9tIGZyZWUgZnVuY3Rpb24pLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU4MSBvZiBmaWxlIGNhY2hlX2hhbmRsZXIuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9jYWxsYmFjay4zIGIvbWFuL25ldHNubXBfY2FsbGJhY2suMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2ZlZWM4OS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9jYWxsYmFjay4zCisrKyAvZGV2L251bGwKQEAgLTEsMjA1ICswLDAgQEAKLS5USCAiQSBnZW5lcmljIGNhbGxiYWNrIG1lY2hhbmlzbSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLUEgZ2VuZXJpYyBjYWxsYmFjayBtZWNoYW5pc20gXC0gCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJDQUxMQkFDS19OQU1FX0xPR0dJTkdcZlAgICAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTE9DS19QRVJfQ0FMTEJBQ0tfU1VCSURcZlAgICAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQ0FMTEJBQ0tfTE9DS1xmUChtYWosIG1pbikgICArK19sb2Nrc1ttYWpdW21pbl0iCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJDQUxMQkFDS19VTkxPQ0tcZlAobWFqLCBtaW4pICAgLS1fbG9ja3NbbWFqXVttaW5dIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQ0FMTEJBQ0tfTE9DS19DT1VOVFxmUChtYWosIG1pbikgICBfbG9ja3NbbWFqXVttaW5dIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgaW50IFxmQl9jYWxsYmFja19sb2NrXGZQIChpbnQgbWFqb3IsIGludCBtaW5vciwgY29uc3QgY2hhciAqd2FybiwgaW50IGFzc2VydCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgXGZCX2NhbGxiYWNrX3VubG9ja1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaW5pdF9jYWxsYmFja3NcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrXGZQIChpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICpuZXdfY2FsbGJhY2ssIHZvaWQgKmFyZykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBnZW5lcmljIGNhbGxiYWNrIGZ1bmN0aW9uLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrXGZQIChpbnQgbWFqb3IsIGludCBtaW5vciwgU05NUENhbGxiYWNrICpuZXdfY2FsbGJhY2ssIHZvaWQgKmFyZywgaW50IHByaW9yaXR5KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jYWxsX2NhbGxiYWNrc1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQgKmNhbGxlcl9hcmcpIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gY2FsbHMgdGhlIGNhbGxiYWNrIGZ1bmN0aW9uIGZvciBlYWNoIHJlZ2lzdGVyZWQgY2FsbGJhY2sgb2YgdHlwZSBtYWpvciBhbmQgbWlub3IuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY291bnRfY2FsbGJhY2tzXGZQIChpbnQgbWFqb3IsIGludCBtaW5vcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY2FsbGJhY2tfYXZhaWxhYmxlXGZQIChpbnQgbWFqb3IsIGludCBtaW5vcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfdW5yZWdpc3Rlcl9jYWxsYmFja1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqdGFyZ2V0LCB2b2lkICphcmcsIGludCBtYXRjaGFyZ3MpIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gdW5yZWdpc3RlcnMgYSBzcGVjaWZpZWQgY2FsbGJhY2sgZnVuY3Rpb24gZ2l2ZW4gYSBtYWpvciBhbmQgbWlub3IgdHlwZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jYWxsYmFja19jbGVhcl9jbGllbnRfYXJnXGZQICh2b2lkICpwdHIsIGludCBpLCBpbnQgaikiCi0uYnIKLS5SSSAiXGZJZmluZCBhbmQgY2xlYXIgY2xpZW50IGFyZ3MgdGhhdCBtYXRjaCBwdHIgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNsZWFyX2NhbGxiYWNrXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc25tcF9nZW5fY2FsbGJhY2tcZlAgKiBcZkJzbm1wX2NhbGxiYWNrX2xpc3RcZlAgKGludCBtYWpvciwgaW50IG1pbm9yKSIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9jYWxsYmFja19jbGVhcl9jbGllbnRfYXJnICh2b2lkICogcHRyLCBpbnQgaSwgaW50IGopIgotLlBQCi1maW5kIGFuZCBjbGVhciBjbGllbnQgYXJncyB0aGF0IG1hdGNoIHB0ciBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXB0clxmUCBwb2ludGVyIHRvIHNlYXJjaCBmb3IgCi0uYnIKLVxmSWlcZlAgY2FsbGJhY2sgaWQgdG8gc3RhcnQgYXQgCi0uYnIKLVxmSWpcZlAgY2FsbGJhY2sgc3ViaWQgdG8gc3RhcnQgYXQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0Nzcgb2YgZmlsZSBjYWxsYmFjay5jLgotLlNTICJpbnQgc25tcF9jYWxsX2NhbGxiYWNrcyAoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQgKiBjYWxsZXJfYXJnKSIKLS5QUAotVGhpcyBmdW5jdGlvbiBjYWxscyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIGVhY2ggcmVnaXN0ZXJlZCBjYWxsYmFjayBvZiB0eXBlIG1ham9yIGFuZCBtaW5vci4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkltYWpvclxmUCBpcyB0aGUgU05NUCBjYWxsYmFjayBtYWpvciB0eXBlIHVzZWQKLS5icgotXGZJbWlub3JcZlAgaXMgdGhlIFNOTVAgY2FsbGJhY2sgbWlub3IgdHlwZSB1c2VkCi0uYnIKLVxmSWNhbGxlcl9hcmdcZlAgaXMgYSB2b2lkIHBvaW50ZXIgd2hpY2ggaXMgc2VudCBpbiBhcyB0aGUgY2FsbGJhY2sncyBzZXJ2ZXJhcmcgcGFyYW1ldGVyLCBpZiBuZWVkZWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIFNOTVBFUlJfR0VORVJSIGlmIG1ham9yIGlzID49IE1BWF9DQUxMQkFDS19JRFMgb3IgbWlub3IgaXMgPj0gTUFYX0NBTExCQUNLX1NVQklEUywgb3RoZXJ3aXNlIFNOTVBFUlJfU1VDQ0VTUyBpcyByZXR1cm5lZC4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrXGZQIAotLlBQCi1cZkJzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2tcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDEgb2YgZmlsZSBjYWxsYmFjay5jLgotLlNTICJpbnQgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayAoaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqIG5ld19jYWxsYmFjaywgdm9pZCAqIGFyZykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgZ2VuZXJpYyBjYWxsYmFjayBmdW5jdGlvbi4gVGhlIG1ham9yIGFuZCBtaW5vciB2YWx1ZXMgYXJlIHVzZWQgdG8gc2V0IHRoZSBuZXdfY2FsbGJhY2sgZnVuY3Rpb24gaW50byBhIGdsb2JhbCBzdGF0aWMgbXVsdGktZGltZW5zaW9uYWwgYXJyYXkgb2YgdHlwZSBzdHJ1Y3QgXGZCc25tcF9nZW5fY2FsbGJhY2tcZlAuIFRoZSBmdW5jdGlvbiBtYWtlcyBzdXJlIHRvIGFwcGVuZCB0aGlzIGNhbGxiYWNrIGZ1bmN0aW9uIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmsgbGlzdCwgc25tcF9nZW5fY2FsbGJhY2stPm5leHQuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbWFqb3JcZlAgaXMgdGhlIFNOTVAgY2FsbGJhY2sgbWFqb3IgdHlwZSB1c2VkCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfTElCUkFSWQotLlBQCi0uUkUKLS5QUAotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX0FQUExJQ0FUSU9OCi0uUFAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkltaW5vclxmUCBpcyB0aGUgU05NUCBjYWxsYmFjayBtaW5vciB0eXBlIHVzZWQKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19QT1NUX1JFQURfQ09ORklHCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQQotLklQICJcKGJ1IiAyCi1TTk1QX0NBTExCQUNLX1NIVVRET1dOCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfUE9TVF9QUkVNSUJfUkVBRF9DT05GSUcKLS5JUCAiXChidSIgMgotU05NUF9DQUxMQkFDS19MT0dHSU5HCi0uSVAgIlwoYnUiIDIKLVNOTVBfQ0FMTEJBQ0tfU0VTU0lPTl9JTklUCi0uUFAKLS5icgotXGZJbmV3X2NhbGxiYWNrXGZQIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIHJlZ2lzdGVyZWQuCi0uYnIKLVxmSWFyZ1xmUCB3aGVuIG5vdCBOVUxMIGlzIGEgdm9pZCBwb2ludGVyIHVzZWQgd2hlbmV2ZXIgbmV3X2NhbGxiYWNrIGZ1bmN0aW9uIGlzIGV4ZXJjaXNlZC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgU05NUEVSUl9HRU5FUlIgaWYgbWFqb3IgaXMgPj0gTUFYX0NBTExCQUNLX0lEUyBvciBtaW5vciBpcyA+PSBNQVhfQ0FMTEJBQ0tfU1VCSURTIG9yIGEgXGZCc25tcF9nZW5fY2FsbGJhY2tcZlAgcG9pbnRlciBjb3VsZCBub3QgYmUgYWxsb2NhdGVkLCBvdGhlcndpc2UgU05NUEVSUl9TVUNDRVNTIGlzIHJldHVybmVkLgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE1BWF9DQUxMQkFDS19JRFMgMgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE1BWF9DQUxMQkFDS19TVUJJRFMgMTYKLS5QUAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNubXBfY2FsbF9jYWxsYmFja3NcZlAgCi0uUFAKLVxmQnNubXBfdW5yZWdpc3Rlcl9jYWxsYmFja1xmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzMyBvZiBmaWxlIGNhbGxiYWNrLmMuCi0uU1MgImludCBzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2sgKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKiB0YXJnZXQsIHZvaWQgKiBhcmcsIGludCBtYXRjaGFyZ3MpIgotLlBQCi1UaGlzIGZ1bmN0aW9uIHVucmVnaXN0ZXJzIGEgc3BlY2lmaWVkIGNhbGxiYWNrIGZ1bmN0aW9uIGdpdmVuIGEgbWFqb3IgYW5kIG1pbm9yIHR5cGUuIE5vdGU6IG5vIGJvdW5kIGNoZWNraW5nIG9uIG1ham9yIGFuZCBtaW5vci4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkltYWpvclxmUCBpcyB0aGUgU05NUCBjYWxsYmFjayBtYWpvciB0eXBlIHVzZWQKLS5icgotXGZJbWlub3JcZlAgaXMgdGhlIFNOTVAgY2FsbGJhY2sgbWlub3IgdHlwZSB1c2VkCi0uYnIKLVxmSXRhcmdldFxmUCBpcyB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIHVucmVnaXN0ZXJlZC4KLS5icgotXGZJYXJnXGZQIGlzIGEgdm9pZCBwb2ludGVyIHVzZWQgZm9yIGNvbXBhcmlzb24gYWdhaW5zdCB0aGUgcmVnaXN0ZXJlZCBjYWxsYmFjaydzIHNjX2NsaWVudF9hcmcgXGZCdmFyaWFibGVcZlAuCi0uYnIKLVxmSW1hdGNoYXJnc1xmUCBpcyBhbiBpbnRlZ2VyIHVzZWQgdG8gYnlwYXNzIHRoZSBjb21wYXJpc29uIG9mIGFyZyBhbmQgdGhlIGNhbGxiYWNrJ3Mgc2NfY2xpZW50X2FyZyBcZkJ2YXJpYWJsZVxmUCBvbmx5IHdoZW4gbWF0Y2hhcmdzIGlzIHNldCB0byAwLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNhbGxiYWNrcyB0aGF0IHdlcmUgdW5yZWdpc3RlcmVkLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQnNubXBfcmVnaXN0ZXJfY2FsbGJhY2tcZlAgCi0uUFAKLVxmQnNubXBfY2FsbF9jYWxsYmFja3NcZlAgCi0uUkUKLS5QUAotCi0uUFAKLXNldCBjbGVhbnVwIGZsYWc/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDIxIG9mIGZpbGUgY2FsbGJhY2suYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9jb25maWdfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA5ZmM1Ci0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfY29uZmlnX2FwaS4zLmRlZgpAQCAtMCwwICsxLDM3MyBAQAorLlRIIE5FVFNOTVBfQ09ORklHX0FQSSAzICIxMyBBdWcgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCityZWdpc3Rlcl9jb25maWdfaGFuZGxlciwKK3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyLAorcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlciwKK3VucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIsCityZWdpc3Rlcl9taWJfaGFuZGxlcnMsCit1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMsCityZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIsCityZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlciwKK3VucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyLAorcmVhZF9jb25maWdzLAorcmVhZF9wcmVtaWJfY29uZmlncywKK3JlYWRfY29uZmlnX3ByaW50X3VzYWdlLAorY29uZmlnX3BlcnJvciwKK2NvbmZpZ19wd2FybiAtIG5ldHNubXBfY29uZmlnX2FwaSBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKy5icgorLlNTIENvbmZpZyBIYW5kbGVycworLlBQCisuQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgorLmJyCisuQkkgIiAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAsCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiJ1c2FnZUxpbmUgIik7IgorLlBQCisuQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgorLmJyCisuQkkgIiAgcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsIAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gLAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHVzYWdlTGluZSAiKTsiCisuUFAKKy5QUAorLkIgc3RydWN0IGNvbmZpZ19saW5lICoKKy5icgorLkJJICIgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoY29uc3QgY2hhciAqIiBmaWxlUHJlZml4ICIsIAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gLAorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHVzYWdlTGluZSAiKTsiCisuUFAKKy5CSSAidm9pZCB1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICIpOyIKKy5QUAorLlwiIERlZmluZWQgaW4gbWliLmMsIHJhdGhlciB0aGFuIHJlYWRfY29uZmlnLmMKKy5CICAidm9pZCByZWdpc3Rlcl9taWJfaGFuZGxlcnModm9pZCk7IgorLmJyCisuQiAgInZvaWQgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKHZvaWQpOyIKKy5icgorLlNTIEFwcGxpY2F0aW9uIEhhbmRsZXJzCisuUFAKKy5CIHN0cnVjdCBjb25maWdfbGluZSAqCisuYnIKKy5CSSAiICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAsCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiJ1c2FnZUxpbmUgIik7IgorLlBQCisuQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgorLmJyCisuQkkgIiAgcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAsCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdXNhZ2VMaW5lICIpOyIKKy5QUAorLkJJICJ2b2lkIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gIik7IgorLmJyCisuU1MgUmVhZGluZyBDb25maWd1cmF0aW9uIEZpbGVzCisuUFAKKy5CICJ2b2lkIHJlYWRfcHJlbWliX2NvbmZpZ3Modm9pZCk7IgorLmJyCisuQiAidm9pZCByZWFkX2NvbmZpZ3Modm9pZCk7IgorLmJyCisuU1MgSGVscCBTdHJpbmdzIGFuZCBFcnJvcnMKKy5QUAorLkJJICJ2b2lkIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKGNoYXIgKiIgbGVhZCAiKTsiCisuYnIKKy5CSSAidm9pZCBjb25maWdfcHdhcm4oY29uc3QgY2hhciAqIiBzdHJpbmcgIik7IgorLmJyCisuQkkgInZvaWQgY29uZmlnX3BlcnJvcihjb25zdCBjaGFyICoiIHN0cmluZyAiKTsiCisKKy5TSCBERVNDUklQVElPTgorVGhlIGZ1bmN0aW9ucyBhcmUgYSBmYWlybHkgZXh0ZW5zaWJsZSBzeXN0ZW0gb2YgcGFyc2luZyB2YXJpb3VzCitjb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBydW4gdGltZSBvZiBhbiBhcHBsaWNhdGlvbi4gIFRoZQorY29uZmlndXJhdGlvbiBmaWxlIGZsb3cgaXMgYnJva2VuIGludG8gdGhlIGZvbGxvd2luZyBwaGFzZXM6CisuUlMgNAorLlRQIDQKKzEuCitSZWdpc3RyYXRpb24gb2YgaGFuZGxlcnMuCisuVFAKKzIuCitSZWFkaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBwcmUtTUlCIHBhcnNpbmcgcmVxdWlyZW1lbnRzLgorLlRQCiszLgorUmVhZGluZyBhbmQgcGFyc2luZyBvZiB0aGUgdGV4dHVhbCBNSUIgZmlsZXMuCisuVFAKKzQuCitSZWFkaW5nIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMuCisuVFAKKzUuCitPcHRpb25hbGx5IHJlLXJlYWRpbmcgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgYSBmdXR1cmUgZGF0ZS4KKy5SRQorLlBQCitUaGUgaWRlYSBpcyB0aGF0IHRoZSBjYWxsaW5nIGFwcGxpY2F0aW9uIGlzIGFibGUgdG8gcmVnaXN0ZXIKKy5JIGhhbmRsZXJzCitmb3IgY2VydGFpbgorLkkgdG9rZW5zCitzcGVjaWZpZWQgaW4gY2VydGFpbiBuYW1lZAorLkkgImNvbmZpZ3VyYXRpb24gZmlsZXMuIgorVGhlIAorLkIgcmVhZF9jb25maWdzKCkKK2Z1bmN0aW9uIGNhbiB0aGVuIGJlIGNhbGxlZCB0byBsb29rIGZvciBhbGwgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBmaWxlcywKK21hdGNoIHRoZSBmaXJzdCB3b3JkIG9uIGVhY2ggbGluZSBhZ2FpbnN0IHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgdG9rZW5zCithbmQgcGFzcyB0aGUgcmVtYWluZGVyIG9mIHRoZSBsaW5lIHRvIHRoZSBhcHByb3ByaWF0ZSByZWdpc3RlcmVkIGhhbmRsZXIuCisuU0ggUkVHSVNURVJJTkcgQSBIQU5ETEVSCisuVFAKKy5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKK1JlZ2lzdGVycyBhIGNvbmZpZ3VyYXRpb24gaGFuZGxlciByb3V0aW5lLCB3aGljaCBzaG91bGQgYmUgY2FsbGVkCit0byBwcm9jZXNzIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcyBzdGFydGluZyB3aXRoIHRoZSBzcGVjaWZpZWQgdG9rZW4uCitGb3IgZXhhbXBsZToKKy5QUAorLlJTCisuUlMKK3JlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImV4YW1wbGVUb2tlbiIsIGV4YW1wbGVfaGFuZGxlciwgTlVMTCwgIkFSRzEgW0FSRzJdIik7CisuUkUKKy5SRQorLklQCit3b3VsZCByZWdpc3RlciB0aGUKKy5CIGV4YW1wbGVfaGFuZGxlcigpCitmdW5jdGlvbiBzbyB0aGF0IGl0IHdpbGwgZ2V0IGNhbGxlZCBldmVyeSB0aW1lIHRoZSBmaXJzdCB3b3JkIG9mIGEKK2xpbmUgaW4gdGhlIAorLkkgc25tcC5jb25mCitjb25maWd1cmF0aW9uIGZpbGUocykgbWF0Y2hlcyAiZXhhbXBsZVRva2VuIi4KKy5icgorQ2FsbGluZyB0aGUgYXBwcm9wcmlhdGUgaGFuZGxlcnMgdG8gcHJvY2VzcyB0aGUgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMKK2lzIHRoZSByZXNwb25zaWJpbGl0eSBvZiAKKy5CIHJlYWRfY29uZmlncygpIAorKHNlZSBiZWxvdykuCisuVFAKKy5CIHJlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKCkKK1NpbWlsYXIgdG8gdGhlCisuQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCitmdW5jdGlvbiwgYnV0IHRoZSBwYXJzZXIgcm91dGluZSBpcyBleHBsaWNpdGx5IGNvbnN0cmFpbmVkCit0byBub3QgbW9kaWZ5IHRoZSBzdHJpbmcgYmVpbmcgcGFyc2VkLgorLlRQCisuQiByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCkKK1NpbWlsYXIgdG8gdGhlCisuQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCitmdW5jdGlvbiwgYnV0IHRoZSByZWdpc3RlcmVkIGhhbmRsZXIgcm91dGluZSB3aWxsIGJlIGNhbGxlZAorXGZJYmVmb3JlXGZQIHRoZSB0ZXh0dWFsIE1JQnMgYXJlIHJlYWQgaW4uCitUaGlzIGlzIHR5cGljYWxseSB1c2VkIGZvciB0b2tlbnMgdGhhdCB3aWxsIGFmZmVjdCB0aGUgY29uZmlndXJhdGlvbiBvZgordGhlIE1JQiBwYXJzZXIsIGFuZCB3aWxsIG5vcm1hbGx5IG9ubHkgYmUgdXNlZCB3aXRoaW4gdGhlIFNOTVAgbGlicmFyeSBpdHNlbGYuCisuVFAKKy5CIHJlZ2lzdGVyX21pYl9oYW5kbGVycygpCitJbml0aWFsaXNhdGlvbiByb3V0aW5lIHRvIHJlZ2lzdGVyIHRoZSBpbnRlcm5hbCBTTk1QIGxpYnJhcnkgY29uZmlndXJhdGlvbiBoYW5kbGVycy4KKy5UUAorLkIgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCitSZW1vdmVzIHRoZSByZWdpc3RlcmVkIGNvbmZpZ3VyYXRpb24gaGFuZGxlciBmb3IgdGhlIHNwZWNpZmllZAorLkkgZmlsZVByZWZpeAorYW5kCisuSVIgdG9rZW4gLgorLlRQCisuQiB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMoKQorUmVtb3ZlcyBhbGwgcmVnaXN0ZXJlZCBjb25maWd1cmF0aW9uIGhhbmRsZXJzLgorCisuU1MgVG9rZW4gSGFuZGxlcnMKKy5QUAorSGFuZGxlciBmdW5jdGlvbnMgc2hvdWxkIGhhdmUgdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6CisuUFAKKy5SUworLkJJICJ2b2lkIGhhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAiLCBjaGFyICoiIGxpbmUgIik7IgorLmJyCitvcgorLmJyCisuQkkgInZvaWQgaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICIsIGNvbnN0IGNoYXIgKiIgbGluZSAiKTsiCiticgorKGlmIHJlZ2lzdGVyZWQgdXNpbmcgXGZJcmVnaXN0ZXJfY29uc3RfY29uZmlnX2hhbmRsZXJcZlApCisuUkUKKy5QUAorVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGJlaW5nIHRoZQordG9rZW4gdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiAoaS5lLiB0aGUgdG9rZW4gdXNlZAord2hlbiByZWdpc3RlcmluZyB0aGUgaGFuZGxlciksIGFuZCB0aGUgc2Vjb25kCitiZWluZyB0aGUgcmVtYWluZGVyIG9mIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgbGluZSAoaS5lLiBldmVyeXRoaW5nCitmb2xsb3dpbmcgdGhlIHdoaXRlIHNwYWNlIGZvbGxvd2luZyB0aGUgbWF0Y2hlZCB0b2tlbikuCisKKy5TUyBGcmVlaW5nIEhhbmRsZXJzCisuUFAKK0lmIHRoZSB0b2tlbiBoYW5kbGVyIGZ1bmN0aW9uIGR5bmFtaWNhbGx5IGFsbG9jYXRlcyByZXNvdXJjZXMgd2hlbgorcHJvY2Vzc2luZyBhIGNvbmZpZ3VyYXRpb24gZW50cnksIHRoZW4gdGhlc2UgbWF5IG5lZWQgdG8gYmUgcmVsZWFzZWQKK2JlZm9yZSByZS1yZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLgorSWYgdGhlIGZvdXJ0aCBwYXJhbWV0ZXIgKAorLkkgcmVsZWFzZXIKKykgcGFzc2VkIHRvCisuQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcgoraXMgbm9uLU5VTEwsIHRoZW4gdGhpcyBzcGVjaWZpZXMgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgYmVmb3JlCityZS1yZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgZnJlZSBhbnkKK3Jlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHRva2VuIGhhbmRsZXIgZnVuY3Rpb24gYW5kIHJlc2V0IGl0cyBub3Rpb24KK29mIHRoZSBjb25maWd1cmF0aW9uIHRvIGl0cyBkZWZhdWx0LiAgVGhlIHRva2VuIGhhbmRsZXIgZnVuY3Rpb24gY2FuCit0aGVuIHNhZmVseSBiZSBjYWxsZWQgYWdhaW4uCitObyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgcmVzb3VyY2UgZnJlZWluZyBoYW5kbGVyLgorLmJyCitOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBub3QgY2FsbGVkIHdoZW4gdGhlIGhhbmRsZXIgaXMKK3VucmVnaXN0ZXJlZCBpbmRpdmlkdWFsbHkgKGJ1dCBcZklpc1xmUCBjYWxsZWQgYXMgcGFydCBvZgorLkIgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKCkKKykuCisKKy5TUyBBcHBsaWNhdGlvbiBIYW5kbGVycworLlRQCisuQiByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoKQorLlRQCisuQiByZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlcigpCisuVFAKKy5CIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCkKK1RoZXNlIGZ1bmN0aW9ucyBhcmUgYW5hbGFnb3VzIHRvIAorLkJSIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkgIiwgIiByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCkgIiBhbmQgIgorLkIgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCitidXQgZG8gbm90IHJlcXVpcmUgdGhlIGZpbGUgdHlwZSBhcmd1bWVudCAod2hpY2ggaXMgZmlsbGVkIGluIGJ5IHRoZQorYXBwbGljYXRpb24pLiAgSXQgaXMgaW50ZW5kZWQgdGhhdCBNSUIgbW9kdWxlcyB3cml0dGVuIGZvciB0aGUgYWdlbnQKK3VzZSB0aGVzZSBmdW5jdGlvbnMgdG8gYWxsb3cgdGhlIGFnZW50IHRvIGhhdmUgbW9yZSBjb250cm9sIG92ZXIgd2hpY2gKK2NvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIHJlYWQgKHR5cGljYWxseSB0aGUKKy5JIHNubXBkLmNvbmYKK2ZpbGVzKS4KKy5TSCBSRUFESU5HIENPTkZJR1VSQVRJT04gRklMRVMKKy5UUAorLkIgcmVhZF9wcmVtaWJfY29uZmlncygpCisuVFAKKy5CIHJlYWRfY29uZmlncygpCitUaGVzZSByb3V0aW5lcyBwcm9jZXNzIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvdW5kIGluIHRoZQorY29uZmlndXJhdGlvbiBzZWFyY2ggcGF0aCAoc2VlIGJlbG93KS4gIEZvciBlYWNoIGVudHJ5LCB0aGUKK2hhbmRsZXIgcmVnaXN0ZXJlZCBmb3IgdGhhdCBjb25maWd1cmF0aW9uIHRva2VuIGlzIGNhbGxlZC4KKy5QUAorLkIgcmVhZF9wcmVtaWJfY29uZmlncygpCitpcyBydW4gYmVmb3JlIHRoZSBNSUIgZmlsZXMgYXJlIHJlYWQgaW4sIGFuZCBwcm9jZXNzZXMgdGhvc2UKK2NvbmZpZ3VyYXRpb24gdG9rZW5zIHJlZ2lzdGVyZWQgdXNpbmcKKy5CIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoKQorKG9yCisuQiByZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlcigpCispLgorQWxsIG90aGVyIGVudHJpZXMgYXJlIGlnbm9yZWQuCisuUFAKKy5CIHJlYWRfY29uZmlncygpCitpcyBydW4gYWZ0ZXIgdGhlIE1JQiBmaWxlcyBoYXZlIGJlZW4gcmVhZCBpbiwgYW5kIHByb2Nlc3NlcyB0aG9zZQorY29uZmlndXJhdGlvbiB0b2tlbnMgcmVnaXN0ZXJlZCB1c2luZworLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQorKG9yCisuQiByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoKQorKS4KK0lmIGl0IGVuY291bnRlcnMgYSBjb25maWd1cmF0aW9uIHRva2VuIGZvciB3aGljaCBubyBoYW5kbGVyIGhhcworYmVlbiByZWdpc3RlcmVkIChlaXRoZXIgcHJlLSBvciBwb3N0LW1pYiksIHRoZW4gaXQgd2lsbCBkaXNwbGF5CithIHdhcm5pbmcgbWVzc2FnZSwgYW5kIGNvbnRpbnVlIHByb2Nlc3Npbmcgd2l0aCB0aGUgbmV4dCBsaW5lCitvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlLgorLlNTIENvbmZpZ3VyYXRpb24gU2VhcmNoIFBhdGgKKy5QUAorVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gYmUgcmVhZCBhcmUgZm91bmQgYnkgc2VhcmNoaW5nIGEgbGlzdAorb2YgY29uZmlndXJhdGlvbiBkaXJlY3RvcmllcyBmb3IgYXBwcm9wcmlhdGVseSBuYW1lZCBmaWxlcy4KK0luIGVhY2ggc3VjaCBkaXJlY3RvcnksIHRoZSBsaWJyYXJ5IHdpbGwgbG9vayBmb3IgZmlsZXMgbmFtZWQKK1xmQyBzbm1wLmNvbmZcZlAsCitcZkMgc25tcC5sb2NhbC5jb25mXGZQLAorXGZJIGFwcFxmUFxmQy5jb25mXGZQLAorXGZJIGFwcFxmUFxmQy5sb2NhbC5jb25mXGZQLAorLmJyCisod2hlcmUgXGZJYXBwXGZQIGlzIHRoZSBhcHBpY2F0aW9uLXNwZWNpZmljIGZpbGVQcmVmaXggdXNlZCB0bworcmVnaXN0ZXIgY29uZmlndXJhdGlvbiBoYW5kbGVycykuCitJdCBpcyBub3QgbmVjZXNzYXJ5IGZvciBhbnkgb3IgYWxsIG9mIHRoZXNlIGZpbGVzIHRvIGJlIHByZXNlbnQKK2luIGVhY2ggZGlyZWN0b3J5LiAgTWlzc2luZyBmaWxlcyB3aWxsIGJlIHNpbGVudGx5IHNraXBwZWQuCisuYnIKK1RoZSBpZGVhIGJlaGluZCB0aGUgdHdvIGRpZmZlcmVudCBzdWZmaXhlcyBpcyB0aGF0IHRoZSBmaXJzdCBmaWxlIGNhbgorYmUgc2hhcmVkICh2aWEgcmRpc3Qgb3IgYW4gTkZTIG1vdW50KSBhY3Jvc3MgYSBsYXJnZSBudW1iZXIgb2YKK21hY2hpbmVzIGFuZCB0aGUgc2Vjb25kIGZpbGUgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIGxvY2FsIHNldHRpbmdzCitmb3Igb25lIHBhcnRpY3VsYXIgbWFjaGluZS4KKy5QUAorVGhlIGRlZmF1bHQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggaXMgXGZDIFNZU0NPTkZESVIvc25tcFxmUCwKK2ZvbGxvd2VkIGJ5IFxmQyBEQVRBRElSL3NubXBcZlAsCitmb2xsb3dlZCBieSBcZkMgTElCRElSL3NubXBcZlAsCitmb2xsb3dlZCBieSBcZkMgJEhPTUUvLnNubXBcZlAuCitUaGlzIGxpc3QgY2FuIGJlIGNoYW5nZWQgYnkgc2V0dGluZyB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZQorLkkgU05NUENPTkZQQVRICit0byBiZSBhIChjb2xvbiBzZXBhcmF0ZWQpIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoLgorLmJyCisuU1MgaW5pdF9zbm1wKCkKKy5QUAorVGhlIG5vcm1hbCBtb2RlIG9mIG9wZXJhdGlvbiB3b3VsZCBiZSB0byByZWdpc3RlciB0aGUgYXBwbGljYXRpb24tc3BlY2lmaWMKK2NvbmZpZ3VyYXRpb24gaGFuZGxlcnMsIGFuZCB0aGVuIGludm9rZQorLkJSIGluaXRfc25tcCgpICIuIgorVGhpcyB3b3VsZCBjYWxsIHRoZSByb3V0aW5lcyBsaXN0ZWQgYWJvdmUgdG8gcmVnaXN0ZXIgdGhlIGludGVybmFsIGxpYnJhcnkKK2NvbmZpZ3VyYXRpb24gaGFuZGxlcnMsIHByb2Nlc3MgYW55IGNvbmZpZ3VyYXRpb24gdG9rZW5zIHJlZ2lzdGVyZWQgd2l0aAorLkIgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigpLAorcmVhZCBpbiB0aGUgdGV4dHVhbCBNSUIgZmlsZXMgdXNpbmcKKy5CIGluaXRfbWliKCksCithbmQgZmluYWxseSBwYXJzZSB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHRva2VucyByZWdpc3RlcmVkIHdpdGggCisuQlIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKSAuCisuUFAKK0lmIHRoZSAKKy5CIGluaXRfc25tcCgpCitmdW5jdGlvbiBpcyB1c2VkLCBub25lIG9mIHRoZXNlIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGV4cGxpY2l0bHkKK2NhbGxlZCBieSB0aGUgYXBwbGljYXRpb24uCisuU0ggSEVMUCBTVFJJTkdTIEFORCBFUlJPUlMKKy5QUAorVGhlCisuSSB1c2FnZUxpbmUKK3BhcmFtZXRlciBwYXNzZWQgdG8KKy5CIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkKK2FuZCBzaW1pbGFyIGNhbGxzLCBpcyB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiB3aGVuIHRoZQorLkIgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoKQorZnVuY3Rpb24gaXMgY2FsbGVkLiAgVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGJ5IGFsbCBvZiB0aGUgYXBwbGljYXRpb25zCit3aGVuIHRoZSAKKy5CIC1ICitmbGFnIGlzIHBhc3NlZCBvbiB0aGUgY29tbWFuZCBsaW5lLiAgSXQgcHJpbnRzIGEgc3VtbWFyeSBvZiBhbGwgb2YgdGhlCitjb25maWd1cmF0aW9uIGZpbGUgbGluZXMsIGFuZCB0aGUgYXNzb2NpYXRlZCBmaWxlcywgdGhhdCB0aGUKK2NvbmZpZ3VyYXRpb24gc3lzdGVtIHVuZGVyc3RhbmRzLiAgVGhlCisuSSB1c2FnZUxpbmUKK3BhcmFtZXRlciBzaG91bGQgYmUgYSBsaXN0IG9mIGFyZ3VtZW50cyBleHBlY3RlZCBhZnRlciB0aGUgdG9rZW4sIGFuZAorbm90IGEgbGVuZ3RoeSBkZXNjcmlwdGlvbiAod2hpY2ggc2hvdWxkIGdvIGludG8gYSBtYW51YWwgcGFnZQoraW5zdGVhZCkuICBUaGUKKy5JIGxlYWQKK3ByZWZpeCB3aWxsIGJlIHByZXBlbmRlZCB0byBlYWNoIGxpbmUgdGhhdCB0aGUgZnVuY3Rpb24gcHJpbnRzIHRvCitzdGRlcnIsIHdoZXJlIGl0IGRpc3BsYXlzIGl0cyBvdXRwdXQuCisuUFAKK1RoZQorLkIgaW5pdF9zbm1wKCkKK2Z1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZQorLkIgcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UoKQorZnVuY3Rpb24gaXMgY2FsbGVkLCBzbyB0aGF0IHRoZSBsaWJyYXJ5IGNhbiByZWdpc3RlciBpdHMgY29uZmlndXJhdGlvbiAKK2ZpbGUgZGlyZWN0aXZlcyBhcyB3ZWxsIGZvciB0aGUgCisuQiByZWFkX2NvbmZpZ19wcmludF91c2FnZSgpCitmdW5jdGlvbiB0byBkaXNwbGF5LgorLlNTIEVycm9yIEhhbmRsaW5nIEZ1bmN0aW9ucworLlBQCitUaGUgdHdvIGZ1bmN0aW9ucworLkIgY29uZmlnX3B3YXJuKCkKK2FuZAorLkIgY29uZmlnX3BlcnJvcigpCitib3RoIHRha2UgYW4gZXJyb3Igc3RyaW5nIGFzIGFuIGFyZ3VtZW50IGFuZCBwcmludCBpdCB0byBzdGRlcnIgYWxvbmcKK3dpdGggdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHRoYXQgY2F1c2VkIHRoZSBlcnJvci4gIEEgY2FsbCB0byB0aGUKK3NlY29uZCBmdW5jdGlvbiB3aWxsIGFsc28gZm9yY2UgCisuQiByZWFkX2NvbmZpZ3MoKSAKK3RvIGV2ZW50dWFsbHkgcmV0dXJuIHdpdGggYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRvIGl0J3MgY2FsbGluZworZnVuY3Rpb24gdGhhdCBpdCBzaG91bGQgYWJvcnQgdGhlIG9wZXJhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uCisuU0ggIkVOVklST05NRU5UIFZBUklBQkxFUyIKKy5UUCAxMAorU05NUENPTkZQQVRICitBIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgY29uZmlndXJhdGlvbgorZmlsZXMgaW4uCitEZWZhdWx0OiBTWVNDT05GRElSL3NubXA6REFUQURJUi9zbm1wOkxJQkRJUi9zbm1wOiRIT01FLy5zbm1wCisuU0ggIlNFRSBBTFNPIgorbmV0c25tcF9taWJfYXBpKDMpLCBzbm1wX2FwaSgzKQorLlwiIExvY2FsIFZhcmlhYmxlczoKKy5cIiAgbW9kZTogbnJvZmYKKy5cIiBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9jb250YWluZXIuMyBiL21hbi9uZXRzbm1wX2NvbnRhaW5lci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMmY0MTRkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2NvbnRhaW5lci4zCisrKyAvZGV2L251bGwKQEAgLTEsMTggKzAsMCBAQAotLlRIICJjb250YWluZXIiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1jb250YWluZXIgXC0gCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbnVsbF9jb250YWluZXJcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgc3BlY2lhbGl6ZWQgY29udGFpbmVycy4gXGZQIgotLmluIC0xYwotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2RhdGFfbGlzdC4zIGIvbWFuL25ldHNubXBfZGF0YV9saXN0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBlY2NhZmUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfZGF0YV9saXN0LjMKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLlRIICJnZW5lcmljIGxpbmtlZC1saXN0IGRhdGEgaGFuZGxpbmcgd2l0aCBhIHN0cmluZyBhcyBhIGtleS4iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1nZW5lcmljIGxpbmtlZC1saXN0IGRhdGEgaGFuZGxpbmcgd2l0aCBhIHN0cmluZyBhcyBhIGtleS4gXC0gCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpcZkJub2RlXGZQKSIKLS5icgotLlJJICJcZklmcmVlcyB0aGUgZGF0YSBhbmQgYSBuYW1lIGF0IGEgZ2l2ZW4gZGF0YV9saXN0IFxmQm5vZGVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKmhlYWQpIgotLmJyCi0uUkkgIlxmSWZyZWVzIGFsbCBkYXRhIGFuZCBub2RlcyBpbiBhIGxpc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3RcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmRhdGEsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKmJlZXIpIgotLmJyCi0uUkkgIlxmSWFkZHMgY3JlYXRlcyBhIGRhdGFfbGlzdCBcZkJub2RlXGZQIGdpdmVuIGEgbmFtZSwgZGF0YSBhbmQgYSBmcmVlIGZ1bmN0aW9uIHB0ci4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfYWRkX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKipoZWFkLCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqXGZCbm9kZVxmUCkiCi0uYnIKLS5SSSAiXGZJYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKmhlYWQsIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpcZkJub2RlXGZQKSIKLS5icgotLlJJICJcZklhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogXGZCbmV0c25tcF9kYXRhX2xpc3RfYWRkX2RhdGFcZlAgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqaGVhZCwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqZGF0YSwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqYmVlcikiCi0uYnIKLS5SSSAiXGZJYWRkcyBkYXRhIHRvIGEgZGF0YWxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkICogXGZCbmV0c25tcF9nZXRfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGRhdGFfbGlzdCBub2RlJ3MgZGF0YSBmb3IgYSBnaXZlbiBuYW1lIHdpdGhpbiBhIGRhdGFfbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogXGZCbmV0c25tcF9nZXRfbGlzdF9ub2RlXGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIGRhdGFfbGlzdCBcZkJub2RlXGZQIGZvciBhIGdpdmVuIG5hbWUgd2l0aGluIGEgZGF0YV9saXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKipyZWFsaGVhZCwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJUmVtb3ZlcyBhIG5hbWVkIFxmQm5vZGVcZlAgZnJvbSBhIGRhdGFfbGlzdCAoYW5kIGZyZWVzIGl0KS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfcmVnaXN0ZXJfc2F2ZV9saXN0XGZQIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKmRhdGFsaXN0LCBjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp0b2tlbiwgTmV0c25tcF9TYXZlX0xpc3RfRGF0YSAqZGF0YV9saXN0X3NhdmVfcHRyLCBOZXRzbm1wX1JlYWRfTGlzdF9EYXRhICpkYXRhX2xpc3RfcmVhZF9wdHIsIE5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKmRhdGFfbGlzdF9mcmVlX3B0cikiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXJzIHRvIHN0b3JlIGEgZGF0YV9saXN0IHNldCBvZiBkYXRhIGF0IHBlcnNpc3RlbnQgc3RvcmFnZSB0aW1lIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2F2ZV9hbGxfZGF0YV9jYWxsYmFja1xmUCAoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQgKnNlcnZlcmFyZywgdm9pZCAqY2xpZW50YXJnKSIKLS5icgotLlJJICJcZklpbnRlbmRlZCB0byBiZSByZWdpc3RlcmQgYXMgYSBjYWxsYmFjayBvcGVyYXRpb24uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2F2ZV9hbGxfZGF0YVxmUCAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKmhlYWQsIGNvbnN0IGNoYXIgKnR5cGUsIGNvbnN0IGNoYXIgKnRva2VuLCBOZXRzbm1wX1NhdmVfTGlzdF9EYXRhICpkYXRhX2xpc3Rfc2F2ZV9wdHIpIgotLmJyCi0uUkkgIlxmSWludGVuZGVkIHRvIGJlIGNhbGxlZCBhcyBhIGNhbGxiYWNrIGR1cmluZyBwZXJzaXN0ZW50IHNhdmUgb3BlcmF0aW9ucy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfcmVhZF9kYXRhX2NhbGxiYWNrXGZQIChjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkiCi0uYnIKLS5SSSAiXGZJaW50ZW5kZWQgdG8gYmUgcmVnaXN0ZXJkIGFzIGEgLmNvbmYgcGFyc2VyIEl0IHNob3VsZCBiZSByZWdpc3RlcmVkIHVzaW5nOiBcZlAiCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF9hZGRfbGlzdF9kYXRhIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKiBoZWFkLCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIG5vZGUpIgotLlBQCi1hZGRzIGRhdGEgdG8gYSBkYXRhbGlzdCBkZXByZWNpYXRlZDogdXNlIFxmQm5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKClcZlAKLS5QUAotXGZCTm90ZTpcZlAKLS5SUyA0Ci1uZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSBpcyBwcmVmZXJyZWQgCi0uUkUKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkloZWFkXGZQIGEgcG9pbnRlciB0byB0aGUgaGVhZCBcZkJub2RlXGZQIG9mIGEgZGF0YV9saXN0IAotLmJyCi1cZklcZkJub2RlXGZQXGZQIGEgXGZCbm9kZVxmUCB0byBzdGFzaCBpbiB0aGUgZGF0YV9saXN0IAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODcgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAqIG5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdCAoY29uc3QgY2hhciAqIG5hbWUsIHZvaWQgKiBkYXRhLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICogYmVlcikiCi0uUFAKLWFkZHMgY3JlYXRlcyBhIGRhdGFfbGlzdCBcZkJub2RlXGZQIGdpdmVuIGEgbmFtZSwgZGF0YSBhbmQgYSBmcmVlIGZ1bmN0aW9uIHB0ci4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluYW1lXGZQIHRoZSBuYW1lIG9mIHRoZSBcZkJub2RlXGZQIHRvIGNhY2hlIHRoZSBkYXRhLiAKLS5icgotXGZJZGF0YVxmUCB0aGUgZGF0YSB0byBiZSBzdG9yZWQgdW5kZXIgdGhhdCBuYW1lIAotLmJyCi1cZkliZWVyXGZQIEEgZnVuY3Rpb24gdGhhdCBjYW4gZnJlZSB0aGUgZGF0YSBwb2ludGVyIChpbiB0aGUgZnV0dXJlKSAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgbmV3bHkgY3JlYXRlZCBkYXRhX2xpc3QgXGZCbm9kZVxmUCB3aGljaCBjYW4gYmUgZ2l2ZW4gdG8gdGhlIG5ldHNubXBfYWRkX2xpc3RfZGF0YSBmdW5jdGlvbi4gCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYwIG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQKiBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfZGF0YSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiogaGVhZCwgY29uc3QgY2hhciAqIG5hbWUsIHZvaWQgKiBkYXRhLCBOZXRzbm1wX0ZyZWVfTGlzdF9EYXRhICogYmVlcikiCi0uUFAKLWFkZHMgZGF0YSB0byBhIGRhdGFsaXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaGVhZFxmUCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgXGZCbm9kZVxmUCBvZiBhIGRhdGFfbGlzdCAKLS5icgotXGZJbmFtZVxmUCB0aGUgbmFtZSBvZiB0aGUgXGZCbm9kZVxmUCB0byBjYWNoZSB0aGUgZGF0YS4gCi0uYnIKLVxmSWRhdGFcZlAgdGhlIGRhdGEgdG8gYmUgc3RvcmVkIHVuZGVyIHRoYXQgbmFtZSAKLS5icgotXGZJYmVlclxmUCBBIGZ1bmN0aW9uIHRoYXQgY2FuIGZyZWUgdGhlIGRhdGEgcG9pbnRlciAoaW4gdGhlIGZ1dHVyZSkgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIG5ld2x5IGNyZWF0ZWQgZGF0YV9saXN0IFxmQm5vZGVcZlAgd2hpY2ggd2FzIGluc2VydGVkIGluIHRoZSBsaXN0IAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQxIG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICoqIGhlYWQsIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogbm9kZSkiCi0uUFAKLWFkZHMgZGF0YSB0byBhIGRhdGFsaXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaGVhZFxmUCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgXGZCbm9kZVxmUCBvZiBhIGRhdGFfbGlzdCAKLS5icgotXGZJXGZCbm9kZVxmUFxmUCBhIFxmQm5vZGVcZlAgdG8gc3Rhc2ggaW4gdGhlIGRhdGFfbGlzdCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk3IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogaGVhZCkiCi0uUFAKLWZyZWVzIGFsbCBkYXRhIGFuZCBub2RlcyBpbiBhIGxpc3QuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJaGVhZFxmUCB0aGUgdG9wIFxmQm5vZGVcZlAgb2YgdGhlIGxpc3QgdG8gYmUgZnJlZWQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDIgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX2ZyZWVfbGlzdF9kYXRhIChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIG5vZGUpIgotLlBQCi1mcmVlcyB0aGUgZGF0YSBhbmQgYSBuYW1lIGF0IGEgZ2l2ZW4gZGF0YV9saXN0IFxmQm5vZGVcZlAuIE5vdGUgdGhhdCB0aGlzIGRvZXNuJ3QgZnJlZSB0aGUgXGZCbm9kZVxmUCBpdHNlbGYuIAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSVxmQm5vZGVcZlBcZlAgdGhlIFxmQm5vZGVcZlAgZm9yIHdoaWNoIHRoZSBkYXRhIHNob3VsZCBiZSBmcmVlZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQqIG5ldHNubXBfZ2V0X2xpc3RfZGF0YSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBoZWFkLCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLXJldHVybnMgYSBkYXRhX2xpc3Qgbm9kZSdzIGRhdGEgZm9yIGEgZ2l2ZW4gbmFtZSB3aXRoaW4gYSBkYXRhX2xpc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkloZWFkXGZQIHRoZSBoZWFkIFxmQm5vZGVcZlAgb2YgYSBkYXRhX2xpc3QgCi0uYnIKLVxmSW5hbWVcZlAgdGhlIG5hbWUgdG8gZmluZCAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgcG9pbnRlciB0byB0aGUgZGF0YSBjYWNoZWQgYXQgdGhhdCBcZkJub2RlXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTY2IG9mIGZpbGUgZGF0YV9saXN0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQKiBuZXRzbm1wX2dldF9saXN0X25vZGUgKFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogaGVhZCwgY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1yZXR1cm5zIGEgZGF0YV9saXN0IFxmQm5vZGVcZlAgZm9yIGEgZ2l2ZW4gbmFtZSB3aXRoaW4gYSBkYXRhX2xpc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkloZWFkXGZQIHRoZSBoZWFkIFxmQm5vZGVcZlAgb2YgYSBkYXRhX2xpc3QgCi0uYnIKLVxmSW5hbWVcZlAgdGhlIG5hbWUgdG8gZmluZCAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWEgcG9pbnRlciB0byB0aGUgZGF0YV9saXN0IFxmQm5vZGVcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODQgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3JlYWRfZGF0YV9jYWxsYmFjayAoY29uc3QgY2hhciAqIHRva2VuLCBjaGFyICogbGluZSkiCi0uUFAKLWludGVuZGVkIHRvIGJlIHJlZ2lzdGVyZCBhcyBhIC5jb25mIHBhcnNlciBJdCBzaG91bGQgYmUgcmVnaXN0ZXJlZCB1c2luZzogcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCd0b2tlbicsIG5ldHNubXBfcmVhZF9kYXRhX2NhbGxiYWNrLCBYWFgpCi0uUFAKLXdoZXJlIElORk9fUE9JTlRFUiBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2RhdGFfbGlzdF9zYXZlaW5mbyBvYmplY3QgY29udGFpbmluZyBhcHBvcnByaWF0ZSByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gCi0uUFAKLVxmQlRvZG9cZlAKLS5SUyA0Ci1tYWtlIG5ldHNubXBfcmVhZF9kYXRhX2NhbGxiYWNrIGRlYWwgd2l0aCBhIGZyZWUgcm91dGluZSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzNyBvZiBmaWxlIGRhdGFfbGlzdC5jLgotLlNTICJ2b2lkIG5ldHNubXBfcmVnaXN0ZXJfc2F2ZV9saXN0IChcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqKiBkYXRhbGlzdCwgY29uc3QgY2hhciAqIHR5cGUsIGNvbnN0IGNoYXIgKiB0b2tlbiwgTmV0c25tcF9TYXZlX0xpc3RfRGF0YSAqIGRhdGFfbGlzdF9zYXZlX3B0ciwgTmV0c25tcF9SZWFkX0xpc3RfRGF0YSAqIGRhdGFfbGlzdF9yZWFkX3B0ciwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqIGRhdGFfbGlzdF9mcmVlX3B0cikiCi0uUFAKLXJlZ2lzdGVycyB0byBzdG9yZSBhIGRhdGFfbGlzdCBzZXQgb2YgZGF0YSBhdCBwZXJzaXN0ZW50IHN0b3JhZ2UgdGltZSBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWRhdGFsaXN0XGZQIHRoZSBkYXRhIHRvIGJlIHNhdmVkIAotLmJyCi1cZkl0eXBlXGZQIHRoZSBuYW1lIG9mIHRoZSBhcHBsaWNhdGlvbiB0byBzYXZlIHRoZSBkYXRhIGFzLiBJZiBsZWZ0IE5VTEwgdGhlIGRlZmF1bHQgYXBwbGljYXRpb24gbmFtZSB0aGF0IHdhcyByZWdpc3RlcmVkIGR1cmluZyB0aGUgaW5pdF9zbm1wIGNhbGwgd2lsbCBiZSB1c2VkIChyZWNvbW1lbmRlZCkuIAotLmJyCi1cZkl0b2tlblxmUCB0aGUgdW5pcXVlIHRva2VuIGlkZW50aWZpZXIgc3RyaW5nIHRvIHVzZSBhcyB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgcGVyc2lzdGVudCBmaWxlIGxpbmUuIAotLmJyCi1cZklkYXRhX2xpc3Rfc2F2ZV9wdHJcZlAgYSBmdW5jdGlvbiBwb2ludGVyIHdoaWNoIHdpbGwgYmUgY2FsbGVkIHRvIHNhdmUgdGhlIHJlc3Qgb2YgdGhlIGRhdGEgdG8gYSBidWZmZXIuIAotLmJyCi1cZklkYXRhX2xpc3RfcmVhZF9wdHJcZlAgYSBmdW5jdGlvbiBwb2ludGVyIHdoaWNoIGNhbiByZWFkIHRoZSByZW1haW5kZXIgb2YgYSBzYXZlZCBsaW5lIGFuZCByZXR1cm4gdGhlIGFwcGxpY2F0aW9uIHNwZWNpZmljIHZvaWQgKiBwb2ludGVyLiAKLS5icgotXGZJZGF0YV9saXN0X2ZyZWVfcHRyXGZQIGEgZnVuY3Rpb24gcG9pbnRlciB3aGljaCB3aWxsIGJlIHBhc3NlZCB0byB0aGUgZGF0YSBcZkJub2RlXGZQIGZvciBmcmVlaW5nIGl0IGluIHRoZSBmdXR1cmUgd2hlbi9pZiB0aGUgbGlzdC9ub2RlIGlzIGNsZWFuZWQgdXAgb3IgZGVzdHJveWVkLiAKLS5SRQotLlBQCi0KLS5QUAotXGZCVG9kb1xmUAotLlJTIDQKLW5ldHNubXBfcmVnaXN0ZXJfc2F2ZV9saXN0IHNob3VsZCBoYW5kbGUgdGhlIHNhbWUgdG9rZW4gbmFtZSBiZWluZyBzYXZlZCBmcm9tIGRpZmZlcmVudCB0eXBlcz8gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzUgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVtb3ZlX2xpc3Rfbm9kZSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiogcmVhbGhlYWQsIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotUmVtb3ZlcyBhIG5hbWVkIFxmQm5vZGVcZlAgZnJvbSBhIGRhdGFfbGlzdCAoYW5kIGZyZWVzIGl0KS4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZWFsaGVhZFxmUCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgXGZCbm9kZVxmUCBvZiBhIGRhdGFfbGlzdCAKLS5icgotXGZJbmFtZVxmUCB0aGUgbmFtZSB0byBmaW5kIGFuZCByZW1vdmUgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIG9uIHN1Y2Nlc3NmdWwgZmluZC1hbmQtZGVsZXRlLCAxIG90aGVyd2lzZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDIgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiaW50IG5ldHNubXBfc2F2ZV9hbGxfZGF0YSAoXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAgKiBoZWFkLCBjb25zdCBjaGFyICogdHlwZSwgY29uc3QgY2hhciAqIHRva2VuLCBOZXRzbm1wX1NhdmVfTGlzdF9EYXRhICogZGF0YV9saXN0X3NhdmVfcHRyKSIKLS5QUAotaW50ZW5kZWQgdG8gYmUgY2FsbGVkIGFzIGEgY2FsbGJhY2sgZHVyaW5nIHBlcnNpc3RlbnQgc2F2ZSBvcGVyYXRpb25zLiBTZWUgdGhlIG5ldHNubXBfc2F2ZV9hbGxfZGF0YV9jYWxsYmFjayBmb3Igd2hlcmUgdGhpcyBpcyB0eXBpY2FsbHkgdXNlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDEgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TUyAiaW50IG5ldHNubXBfc2F2ZV9hbGxfZGF0YV9jYWxsYmFjayAoaW50IG1ham9yLCBpbnQgbWlub3IsIHZvaWQgKiBzZXJ2ZXJhcmcsIHZvaWQgKiBjbGllbnRhcmcpIgotLlBQCi1pbnRlbmRlZCB0byBiZSByZWdpc3RlcmQgYXMgYSBjYWxsYmFjayBvcGVyYXRpb24uIEl0IHNob3VsZCBiZSByZWdpc3RlcmVkIHVzaW5nOgotLlBQCi1zbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TVE9SRV9EQVRBLCBuZXRzbm1wX3NhdmVfYWxsX2RhdGFfY2FsbGJhY2ssIElORk9fUE9JTlRFUik7Ci0uUFAKLXdoZXJlIElORk9fUE9JTlRFUiBpcyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX2RhdGFfbGlzdF9zYXZlaW5mbyBvYmplY3QgY29udGFpbmluZyBhcHBvcnByaWF0ZSByZWdpc3RyYXRpb24gaW5mb3JtYXRpb24gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODQgb2YgZmlsZSBkYXRhX2xpc3QuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9kZWJ1Zy4zIGIvbWFuL25ldHNubXBfZGVidWcuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjNhOGI4OS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9kZWJ1Zy4zCisrKyAvZGV2L251bGwKQEAgLTEsMTA2ICswLDAgQEAKLS5USCAiZGVidWciIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1kZWJ1ZyBcLSAKLS5QUAotUHJpbnQgb3V0IGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaGFuZGxlciBjaGFpbiBiZWluZyBjYWxsZWQuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X2RlYnVnX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBkZWJ1ZyBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZGVidWdfcHJpbnRfcmVxdWVzdHNcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZGVidWdfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9kZWJ1Z19oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBkZWJ1ZyBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBkZWJ1ZyBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU1MgImhhbmRsZXIiCi0gCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3NlcmlhbGl6ZVxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHNlcmlhbGl6ZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzZXJpYWxpemUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9yZWFkX29ubHlfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgcmVhZF9vbmx5IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHJlYWRfb25seSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X2J1bGtfdG9fbmV4dF9oZWxwZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSWluaXRpYWxpemVzIHRoZSBidWxrX3RvX25leHQgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgYnVsa190b19uZXh0IGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfdGFibGVfZGF0YXNldFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgc3Rhc2hfY2FjaGUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF9oZWxwZXJzXGZQICh2b2lkKSIKLS5icgotLlJJICJcZkljYWxsIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgYWxsIGhhbmRsZXJzIHdpdGggaW5pdF8gcm91dGluZXMuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1QcmludCBvdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYW5kbGVyIGNoYWluIGJlaW5nIGNhbGxlZC4gCi0KLVRoaXMgaXMgYSB1c2VmdWwgXGZCbW9kdWxlXGZQIGZvciBydW4tdGltZSBkZWJ1Z2dpbmcgb2YgcmVxdWVzdHMgYXMgdGhlIHBhc3MgdGhpcyBoYW5kbGVyIGluIGEgY2FsbGluZyBjaGFpbi4gQWxsIGRlYnVnZ2luZyBvdXRwdXQgaXMgZG9uZSB2aWEgdGhlIHN0YW5kYXJkIGRlYnVnZ2luZyByb3V0aW5lcyB3aXRoIGEgdG9rZW4gbmFtZSBvZiAnaGVscGVyOmRlYnVnJywgc28gdXNlIHRoZSAtRGhlbHBlcjpkZWJ1ZyBjb21tYW5kIGxpbmUgZmxhZyB0byBzZWUgdGhlIG91dHB1dCB3aGVuIHJ1bm5pbmcgdGhlIHNubXBkIGRlbW9uLiBJdCdzIG5vdCByZWNvbW1lbmRlZCB5b3UgY29tcGlsZSB0aGlzIGludG8gYSBoYW5kbGVyIGNoYWluIGR1cmluZyBjb21waWxlIHRpbWUsIGJ1dCBpbnN0ZWFkIHVzZSB0aGUgJ2luamVjdEhhbmRsZXInIHRva2VuIGluIHRoZSBzbm1wZC5jb25mIGZpbGUgKG9yIHNpbWlsYXIpIHRvIGFkZCBpdCB0byB0aGUgY2hhaW4gbGF0ZXI6Ci0uUFAKLWluamVjdEhhbmRsZXIgZGVidWcgbXlfbW9kdWxlX25hbWUKLS5QUAotdG8gc2VlIGFuIGV4YW1wbGUgb3V0cHV0LCB0cnk6Ci0uUFAKLWluamVjdEhhbmRsZXIgZGVidWcgbWliSUkvc3lzdGVtCi0uUFAKLWFuZCB0aGVuIHJ1biBzbm1wd2FsayBvbiB0aGUgJ3N5c3RlbScgZ3JvdXAuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9kZWJ1Z19oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIGRlYnVnIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTEgb2YgZmlsZSBkZWJ1Z19oYW5kbGVyLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X2J1bGtfdG9fbmV4dF9oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgYnVsa190b19uZXh0IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIGJ1bGtfdG9fbmV4dCBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzOSBvZiBmaWxlIGJ1bGtfdG9fbmV4dC5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9kZWJ1Z19oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgZGVidWcgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgZGVidWcgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTUgb2YgZmlsZSBkZWJ1Z19oYW5kbGVyLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X2hlbHBlcnMgKHZvaWQpIgotLlBQCi1jYWxsIHRoZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSBmb3IgYWxsIGhhbmRsZXJzIHdpdGggaW5pdF8gcm91dGluZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzYgb2YgZmlsZSBhbGxfaGVscGVycy5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9yZWFkX29ubHlfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHJlYWRfb25seSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByZWFkX29ubHkgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MSBvZiBmaWxlIHJlYWRfb25seS5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9zZXJpYWxpemUgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgc2VyaWFsaXplIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkzIG9mIGZpbGUgc2VyaWFsaXplLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3N0YXNoX2NhY2hlX2hlbHBlciAodm9pZCkiCi0uUFAKLWluaXRpYWxpemVzIHRoZSBzdGFzaF9jYWNoZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzdGFzaF9jYWNoZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzOCBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zIGIvbWFuL25ldHNubXBfZGVmYXVsdF9zdG9yZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YTMyODdiLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2RlZmF1bHRfc3RvcmUuMworKysgL2Rldi9udWxsCkBAIC0xLDI1MCArMCwwIEBACi0uVEggInN0b3JhZ2Ugc3BhY2UgZm9yIGRlZmF1bHRzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc3RvcmFnZSBzcGFjZSBmb3IgZGVmYXVsdHMgXC0gCi0uUFAKLVRoZSBwdXJwb3NlIG9mIHRoZSBkZWZhdWx0IHN0b3JhZ2UgaXMgdGhyZWUtZm9sZDouICAKLQotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfZHNfcmVhZF9jb25maWdfc1xmUCIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX2RzX3JlYWRfY29uZmlnX3NcZlAgXGZCbmV0c25tcF9kc19yZWFkX2NvbmZpZ1xmUCIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2RzX2hhbmRsZV9jb25maWdcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19zZXRfYm9vbGVhblxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCwgaW50IHZhbHVlKSIKLS5icgotLlJJICJcZklTdG9yZXMgJ3RydWUnIG9yICdmYWxzZScgZ2l2ZW4gYW4gaW50IHZhbHVlIGZvciB2YWx1ZSBpbnRvIG5ldHNubXBfZHNfYm9vbGVhbnNbc3RvcmVdW3doaWNoXSBzbG90LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19nZXRfYm9vbGVhblxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfc2V0X2ludFxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCwgaW50IHZhbHVlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19nZXRfaW50XGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19zZXRfc3RyaW5nXGZQIChpbnQgc3RvcmVpZCwgaW50IHdoaWNoLCBjb25zdCBjaGFyICp2YWx1ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQm5ldHNubXBfZHNfZ2V0X3N0cmluZ1xmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfc2V0X3ZvaWRcZlAgKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIHZvaWQgKnZhbHVlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9kc19nZXRfdm9pZFxmUCAoaW50IHN0b3JlaWQsIGludCB3aGljaCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfcGFyc2VfYm9vbGVhblxmUCAoY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnXGZQICh1X2NoYXIgdHlwZSwgY29uc3QgY2hhciAqZnR5cGUsIGNvbnN0IGNoYXIgKnRva2VuLCBpbnQgc3RvcmVpZCwgaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWJcZlAgKHVfY2hhciB0eXBlLCBjb25zdCBjaGFyICpmdHlwZSwgY29uc3QgY2hhciAqdG9rZW4sIGludCBzdG9yZWlkLCBpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9kc19zaHV0ZG93blxmUCAoKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBwdXJwb3NlIG9mIHRoZSBkZWZhdWx0IHN0b3JhZ2UgaXMgdGhyZWUtZm9sZDouIAotCi0xKSBUbyBjcmVhdGUgYSBnbG9iYWwgc3RvcmFnZSBzcGFjZSB3aXRob3V0IGNyZWF0aW5nIGEgd2hvbGUgYnVuY2ggb2YgZ2xvYmFsbHkgYWNjZXNzaWJsZSB2YXJpYWJsZXMgb3IgYSB3aG9sZSBidW5jaCBvZiBhY2Nlc3MgZnVuY3Rpb25zIHRvIHdvcmsgd2l0aCBtb3JlIHByaXZhdGVseSByZXN0cmljdGVkIHZhcmlhYmxlcy4KLS5QUAotMikgVG8gcHJvdmlkZSBhIHNpbmdsZSBsb2NhdGlvbiB3aGVyZSB0aGUgdGhyZWFkIGxvY2stIGluZyBuZWVkcyB0byBiZSBpbXBsZW1lbnRlZC4gQXQgdGhlIHRpbWUgb2YgdGhpcyB3cml0aW5nLCBob3dldmVyLCB0aHJlYWQgbG9ja2luZyBpcyBub3QgeWV0IGluIHBsYWNlLgotLlBQCi0zKSBUbyByZWR1Y2UgdGhlIG51bWJlciBvZiBjcm9zcyBkZXBlbmRlbmNpZXMgYmV0d2VlbiBjb2RlIHBpZWNlcyB0aGF0IG1heSBvciBtYXkgbm90IGJlIGxpbmtlZCB0b2dldGhlciBpbiB0aGUgbG9uZyBydW4uIFRoaXMgcHJvdmlkZXMgZm9yIGEgc2luZ2xlIGxvY2EtIHRpb24gaW4gd2hpY2ggY29uZmlndXJhdGlvbiBkYXRhLCBmb3IgZXhhbXBsZSwgY2FuIGJlIHN0b3JlZCBmb3IgYSBzZXBhcmF0ZSBzZWN0aW9uIG9mIGNvZGUgdGhhdCBtYXkgbm90IGJlIGxpbmtlZCBpbiB0byB0aGUgYXBwbGljYXRpb24gaW4gcXVlc3Rpb24uCi0uUFAKLVRoZSBmdW5jdGlvbnMgZGVmaW5lZCBoZXJlIGltcGxlbWVudCB0aGVzZSBnb2Fscy4KLS5QUAotQ3VycmVudGx5LCB0aHJlZSBkYXRhIHR5cGVzIGFyZSBzdXBwb3J0ZWQ6IGJvb2xlYW5zLCBpbnRlLSBnZXJzLCBhbmQgc3RyaW5ncy4gRWFjaCBvZiB0aGVzZSBkYXRhIHR5cGVzIGhhdmUgc2VwYXJhdGUgc3RvcmFnZSBzcGFjZXMuIEluIGFkZGl0aW9uLCB0aGUgc3RvcmFnZSBzcGFjZSBmb3IgZWFjaCBkYXRhIHR5cGUgaXMgZGl2aWRlZCBmdXJ0aGVyIGJ5IHRoZSBhcHBsaWNhdGlvbiBsZXZlbC4gQ3VycmVudGx5LCB0aGVyZSBhcmUgdHdvIHN0b3JhZ2Ugc3BhY2VzLiBUaGUgZmlyc3QgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBTTk1QIGxpYnJhcnkgaXRzZWxmLiBUaGUgc2Vjb25kIGlzIGludGVuZGVkIGZvciB1c2UgaW4gYXBwbGljYXRpb25zIGFuZCBpcyBub3QgbW9kaWZpZWQgb3IgY2hlY2tlZCBieSB0aGUgbGlicmFyeSwgYW5kLCB0aGVyZWZvcmUsIHRoaXMgaXMgdGhlIHNwYWNlIHVzYWJsZSBieSB5b3UuCi0uUFAKLVRoZXNlIGRlZmluaXRpb25zIGNvcnJlc3BvbmQgd2l0aCB0aGUgJ3N0b3JpZCcgYXJndW1lbnQgdG8gdGhlIEFQSQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCUkFSWV9JRCAwCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCAxCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19UT0tFTl9JRCAyCi0uUFAKLS5QUAotVGhlc2UgZGVmaW5pdGlvbnMgY29ycmVzcG9uZCB3aXRoIHRoZSAnd2hpY2gnIGFyZ3VtZW50IHRvIHRoZSBBUEksIHdoZW4gdGhlIHN0b3JlaWQgYXJndW1lbnQgaXMgTkVUU05NUF9EU19MSUJSQVJZX0lECi0uUFAKLWxpYnJhcnkgYm9vbGVhbnMKLS5QUAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9FUlJPUlMgMAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NBVkVfTUlCX0RFU0NSUyAxCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX0NPTU1FTlRfVEVSTSAyCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCX1BBUlNFX0xBQkVMIDMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCA0Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTE9HX1RJTUVTVEFNUCA1Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9SRUFEX0NPTkZJR1MgNgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX01JQl9SRVBMQUNFIDcgcmVwbGFjZSBvYmplY3RzIGZyb20gbGF0ZXN0IFxmQm1vZHVsZVxmUAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX05VTUVSSUNfRU5VTSA4IHByaW50IG9ubHkgbnVtZXJpYyBlbnVtIHZhbHVlcwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX05VTUVSSUNfT0lEUyA5IHByaW50IG9ubHkgbnVtZXJpYyBlbnVtIHZhbHVlcwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RPTlRfQlJFQUtET1dOX09JRFMgMTAgZG9udCBwcmludCBvaWQgaW5kZXhlcyBzcGVjaWFsbHkKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcgMTEgZG9uJ3QgdXNlIHRoZSBhbGFybSgpIHNpZ25hbAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSU5UX0ZVTExfT0lEIDEyIHByaW50IGZ1bGx5IHF1YWxpZmllZCBvaWRzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQgMTMgcHJpbnQgdmVyeSBicmllZiBvdXRwdXQgZm9yIHBhcnNpbmcKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9SQU5ET01fQUNDRVNTIDE0IHJhbmRvbSBhY2Nlc3MgdG8gb2lkIGxhYmVscwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JFR0VYX0FDQ0VTUyAxNSByZWdleCBtYXRjaGluZyB0byBvaWQgbGFiZWxzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRE9OVF9DSEVDS19SQU5HRSAxNiBkb24ndCBjaGVjayB2YWx1ZXMgZm9yIHJhbmdlcyBvbiBzZW5kCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTk9fVE9LRU5fV0FSTklOR1MgMTcgbm8gd2FybiBhYm91dCB1bmtub3duIGNvbmZpZyB0b2tlbnMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9OVU1FUklDX1RJTUVUSUNLUyAxOCBwcmludCB0aW1ldGlja3MgYXMgYSBudW1iZXIKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9FU0NBUEVfUVVPVEVTIDE5IHNoZWxsIGVzY2FwZSBxdW90ZSBtYXJrcyBpbiBvaWRzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUkVWRVJTRV9FTkNPREUgMjAgZW5jb2RlIHBhY2tldHMgZnJvbSBiYWNrIHRvIGZyb250Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfQkFSRV9WQUxVRSAyMSBqdXN0IHByaW50IHZhbHVlIChub3QgT0lEID0gdmFsdWUpCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfRVhURU5ERURfSU5ERVggMjIgcHJpbnQgZXh0ZW5kZWQgaW5kZXggZm9ybWF0IFt4MV1beDJdCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfSEVYX1RFWFQgMjMgcHJpbnQgQVNDSUkgdGV4dCBhbG9uZyB3aXRoIGhleCBzdHJpbmdzCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJTlRfVUNEX1NUWUxFX09JRCAyNCBwcmludCBPSUQncyB1c2luZyB0aGUgVUNELXN0eWxlIHByZWZpeCBzdXBwcmVzc2lvbgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1JFQURfVUNEX1NUWUxFX09JRCAyNSByZXF1aXJlIHRvcC1sZXZlbCBPSURzIHRvIGJlIHByZWZpeGVkIHdpdGggYSBkb3QKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9IQVZFX1JFQURfUFJFTUlCX0NPTkZJRyAyNiBoYXZlIHRoZSBwcmUtbWliIHBhcnNpbmcgY29uZmlnIHRva2VucyBiZWVuIHByb2Nlc3NlZAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0hBVkVfUkVBRF9DT05GSUcgMjcgaGF2ZSB0aGUgY29uZmlnIHRva2VucyBiZWVuIHByb2Nlc3NlZAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1FVSUNLRV9QUklOVCAyOAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0RPTlRfUFJJTlRfVU5JVFMgMjkgZG9uJ3QgcHJpbnQgVU5JVFMgc3VmZml4Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTk9fRElTUExBWV9ISU5UIDMwIGRvbid0IGFwcGx5IERJU1BMQVktSElOVHMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl8xNkJJVF9JRFMgMzEgcmVzdHJpY3QgcmVxdWVzdElEcywgZXRjIHRvIDE2LWJpdCB2YWx1ZXMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9ET05UX1BFUlNJU1RfU1RBVEUgMzIgZG9uJ3Qgc2F2ZS9sb2FkIGFueSBwZXJzaXN0YW50IHN0YXRlCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfMkRJR0lUX0hFWF9PVVRQVVQgMzMgcHJpbnQgYSBsZWFkaW5nIDAgb24gaGV4IHZhbHVlcyA8PSAnZicKLS5QUAotLlBQCi1saWJyYXJ5IGludGVnZXJzCi0uUFAKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9NSUJfV0FSTklOR1MgMAotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ0xFVkVMIDEKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9TTk1QVkVSU0lPTiAyCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUIDMKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PSURfT1VUUFVUX0ZPUk1BVCA0Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU1RSSU5HX09VVFBVVF9GT1JNQVQgNQotLlBQCi0uUFAKLWxpYnJhcnkgc3RyaW5ncwotLlBQCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfU0VDTkFNRSAwCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ09OVEVYVCAxCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSAyCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVVUSFBBU1NQSFJBU0UgMwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1BSSVZQQVNTUEhSQVNFIDQKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9PUFRJT05BTENPTkZJRyA1Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQVBQVFlQRSA2Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ09NTVVOSVRZIDcKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QRVJTSVNURU5UX0RJUiA4Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfQ09ORklHVVJBVElPTl9ESVIgOQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX1NFQ01PREVMIDEwCi0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfTUlCRElSUyAxMQotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX09JRFNVRkZJWCAxMgotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX09JRFBSRUZJWCAxMwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSIDE0Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfVEVNUF9GSUxFX1BBVFRFUk4gMTUKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9BVVRITUFTVEVSS0VZIDE2Ci0uSVAgIlwoYnUiIDIKLSNkZWZpbmUgTkVUU05NUF9EU19MSUJfUFJJVk1BU1RFUktFWSAxNwotLklQICJcKGJ1IiAyCi0jZGVmaW5lIE5FVFNOTVBfRFNfTElCX0FVVEhMT0NBTElaRURLRVkgMTgKLS5JUCAiXChidSIgMgotI2RlZmluZSBORVRTTk1QX0RTX0xJQl9QUklWTE9DQUxJWkVES0VZIDE5IAotLlBQCi0KLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4gKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIGludCB2YWx1ZSkiCi0uUFAKLVN0b3JlcyAndHJ1ZScgb3IgJ2ZhbHNlJyBnaXZlbiBhbiBpbnQgdmFsdWUgZm9yIHZhbHVlIGludG8gbmV0c25tcF9kc19ib29sZWFuc1tzdG9yZV1bd2hpY2hdIHNsb3QuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJc3RvcmVpZFxmUCBhbiBpbmRleCB0byB0aGUgYm9vbGVhbiBzdG9yYWdlIGNvbnRhaW5lcidzIGZpcnN0IGluZGV4KHN0b3JlKQotLmJyCi1cZkl3aGljaFxmUCBhbiBpbmRleCB0byB0aGUgYm9vbGVhbiBzdG9yYWdlIGNvbnRhaW5lcidzIHNlY29uZCBpbmRleCh3aGljaCkKLS5icgotXGZJdmFsdWVcZlAgaWYgPiAwLCAndHJ1ZScgaXMgc2V0IGludG8gdGhlIHNsb3Qgb3RoZXJ3aXNlICdmYWxzZScKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgU05NUFBFUlJfR0VORVJSIGlmIHRoZSBzdG9yZWlkIGFuZCB3aGljaCBwYXJhbWV0ZXJzIGRvIG5vdCBjb3JyZXNwb25kIHRvIGEgdmFsaWQgc2xvdCwgb3IgU05NUEVSUl9TVUNDRVNTIG90aGVyd2lzZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDAgb2YgZmlsZSBkZWZhdWx0X3N0b3JlLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfZXhhbXBsZV9zY2FsYXJfaW50LjMgYi9tYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZmU0YTIzYi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9leGFtcGxlX3NjYWxhcl9pbnQuMworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLS5USCAiZXhhbXBsZV9zY2FsYXJfaW50OiBpbnN0YW50aWF0ZXMgYSBmZXcgZXhhbXBsZSBzY2FsYXJzLiIgMyAiNiBNYXIgMjAwMiIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotZXhhbXBsZV9zY2FsYXJfaW50IFwtIFRoaXMgZXhhbXBsZSBtZXJlbHkgY3JlYXRlcyBzb21lIHNjYWxhciByZWdpc3RyYXRpb25zIHRoYXQgYWxsb3dzIHNvbWUgc2ltcGxlIHZhcmlhYmxlcyB0byBiZSBhY2Nlc3NlZCB2aWEgU05NUC4KLU1vcmUuLi4KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCaW5pdF9zY2FsYXJfaW50XGZQICh2b2lkKSIKLS5icgotLmluIC0xYwotLlNIICJERVRBSUxFRCBERVNDUklQVElPTiIKLS5QUCAKLVRoaXMgZXhhbXBsZSBtZXJlbHkgY3JlYXRlcyBzb21lIHNjYWxhciByZWdpc3RyYXRpb25zIHRoYXQgYWxsb3dzIHNvbWUgc2ltcGxlIHZhcmlhYmxlcyB0byBiZSBhY2Nlc3NlZCB2aWEgU05NUC4KLS5QUAotSW4gYSBtb3JlIHJlYWxpc3RpYyBleGFtcGxlLCBpdCBpcyBsaWtlbHkgdGhhdCB0aGVzZSB2YXJpYWJsZXMgd291bGQgYWxzbyBiZSBtYW5pcHVsYXRlZCBpbiBvdGhlciB3YXlzIG91dHNpZGUgb2YgU05NUCBnZXRzL3NldHMuCi0uUFAKLUlmIHRoaXMgbW9kdWxlIGlzIGNvbXBpbGVkIGludG8gYW4gYWdlbnQsIHlvdSBzaG91bGQgYmUgYWJsZSB0byBpc3N1ZSBzbm1wIGNvbW1hbmRzIHRoYXQgbG9vayBzb21ldGhpbmcgbGlrZSAoYXV0aGVudGljYXRpb24gaW5mb3JtYXRpb24gbm90IHNob3duIGluIHRoZXNlIGNvbW1hbmRzKToKLS5QUAotc25tcGdldCBsb2NhbGhvc3QgbmV0U25tcEV4YW1wbGVJbnRlZ2VyLjAgbmV0U25tcEV4YW1wbGVTY2FsYXJzID0gNDIKLS5QUAotc25tcHNldCBsb2NhbGhvc3QgbmV0U25tcEV4YW1wbGVJbnRlZ2VyLjAgPSAxMjM0IG5ldFNubXBFeGFtcGxlU2NhbGFycyA9IDEyMzQKLS5QUAotc25tcGdldCBsb2NhbGhvc3QgbmV0U25tcEV4YW1wbGVJbnRlZ2VyLjAgbmV0U25tcEV4YW1wbGVTY2FsYXJzID0gMTIzNApkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfaGFuZGxlci4zIGIvbWFuL25ldHNubXBfaGFuZGxlci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxMWNhM2EwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2hhbmRsZXIuMworKysgL2Rldi9udWxsCkBAIC0xLDUxNSArMCwwIEBACi0uVEggIk5ldC1TTk1QIEFnZW50IGhhbmRsZXIgYW5kIGV4dGVuc2liaWxpdHkgQVBJIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotTmV0LVNOTVAgQWdlbnQgaGFuZGxlciBhbmQgZXh0ZW5zaWJpbGl0eSBBUEkgXC0gCi0uUFAKLVRoZSBiYXNpYyB0aGVvcnkgZ29lcyBzb21ldGhpbmcgbGlrZSB0aGlzOiBJbiB0aGUgcGFzdCwgd2l0aCB0aGUgb3JpZ2luYWwgbWliIFxmQm1vZHVsZVxmUCBhcGkgKHdoaWNoIGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwgQ01VIFNOTVAgY29kZSkgdGhlIHVuZGVybHlpbmcgbWliIG1vZHVsZXMgd2VyZSBwYXNzZWQgdmVyeSBsaXR0bGUgaW5mb3JtYXRpb24gKG9ubHkgdGhlIHRydWx5IG1vc3QgYmFzaWMgaW5mb3JtYXRpb24gYWJvdXQgYSByZXF1ZXN0KS4gIAotCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQIgotLmJyCi0uUkkgIlxmSXRoZSBtaWIgaGFuZGxlciBzdHJ1Y3R1cmUgdG8gYmUgcmVnaXN0ZXJlZCBcZlAiCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAiCi0uYnIKLS5SSSAiXGZJUm9vdCByZWdpc3RyYXRpb24gaW5mby4gXGZQIgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX2FyZ3Nfc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVfc1xmUCIKLS5icgotLmluIC0xYwotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQnV0aWxpdHlfaGFuZGxlcnNcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVNpbXBsaWZ5IHJlcXVlc3QgcHJvY2Vzc2luZyBBIGdyb3VwIG9mIGhhbmRsZXJzIGludGVuZGVkIHRvIHNpbXBsaWZ5IGNlcnRhaW4gYXNwZWN0cyBvZiBwcm9jZXNzaW5nIGEgcmVxdWVzdCBmb3IgYSBNSUIgb2JqZWN0LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQmxlYWZfaGFuZGxlcnNcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVByb2Nlc3MgaW5kaXZpZHVhbCBsZWFmIG9iamVjdHMgQSBncm91cCBvZiBoYW5kbGVycyB0byBpbXBsZW1lbnQgaW5kaXZpZHVhbCBsZWFmIG9iamVjdHMgYW5kIGluc3RhbmNlcyAoYm90aCBzY2FsYXIgb2JqZWN0cywgYW5kIGluZGl2aWR1YWwgb2JqZWN0cyBhbmQgaW5zdGFuY2VzIHdpdGhpbiBhIHRhYmxlKS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJiYWJ5X3N0ZXBzXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklDYWxscyB5b3VyIGhhbmRsZXIgaW4gYmFieV9zdGVwcyBmb3Igc2V0IHByb2Nlc3NpbmcuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCb2xkX2FwaVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQ2FsbHMgbWliIFxmQm1vZHVsZVxmUCBjb2RlIHdyaXR0ZW4gaW4gdGhlIG9sZCBzdHlsZSBvZiBjb2RlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnN0YXNoX2NhY2hlXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklBdXRvbWF0aWNhbGx5IGNhY2hlcyBkYXRhIGZvciBjZXJ0YWluIGhhbmRsZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklIZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUuIFxmUCIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0FVVE9fTkVYVFxmUCAgIDB4MDAwMDAwMDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9BVVRPX05FWFRfT1ZFUlJJREVfT05DRVxmUCAgIDB4MDAwMDAwMDIiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9JTlNUQU5DRVxmUCAgIDB4MDAwMDAwMDQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9DVVNUT000XGZQICAgMHgxMDAwMDAwMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk1JQl9IQU5ETEVSX0NVU1RPTTNcZlAgICAweDIwMDAwMDAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0hBTkRMRVJfQ1VTVE9NMlxmUCAgIDB4NDAwMDAwMDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSUJfSEFORExFUl9DVVNUT00xXGZQICAgMHg4MDAwMDAwMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX0dFVEFOREdFVE5FWFRcZlAgICAweDAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fU0VUXGZQICAgMHgwMiIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX0dFVEJVTEtcZlAgICAweDA0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fTk9UX0NSRUFURVxmUCAgIDB4MDgiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9CQUJZX1NURVBcZlAgICAweDEwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fU1RBU0hcZlAgICAweDIwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEFORExFUl9DQU5fUk9OTFlcZlAgICAoSEFORExFUl9DQU5fR0VUQU5ER0VUTkVYVCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9SV1JJVEVcZlAgICAoSEFORExFUl9DQU5fR0VUQU5ER0VUTkVYVCB8IEhBTkRMRVJfQ0FOX1NFVCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJIQU5ETEVSX0NBTl9TRVRfT05MWVxmUCAgIChIQU5ETEVSX0NBTl9TRVQgfCBIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkhBTkRMRVJfQ0FOX0RFRkFVTFRcZlAgICAoSEFORExFUl9DQU5fUk9OTFkgfCBIQU5ETEVSX0NBTl9OT1RfQ1JFQVRFKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJFUVVFU1RfSVNfREVMRUdBVEVEXGZQICAgMSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJFUVVFU1RfSVNfTk9UX0RFTEVHQVRFRFxmUCAgIDAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAiCi0uYnIKLS5SSSAiXGZJVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCBzdHJ1Y3QgaW50byBuZXRzbm1wX21pYl9oYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQIgotLmJyCi0uUkkgIlxmSVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4gXGZQIgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIGludCggXGZCTmV0c25tcF9Ob2RlX0hhbmRsZXJcZlAgKShcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX2hhbmRsZXJfYXJnc19zXGZQIFxmQm5ldHNubXBfaGFuZGxlcl9hcmdzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlX3NcZlAgXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyXGZQIChjb25zdCBjaGFyICpuYW1lLCBOZXRzbm1wX05vZGVfSGFuZGxlciAqaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGEgbmV0c25tcF9taWJfaGFuZGxlciBzdHJ1Y3R1cmUgZ2l2ZW4gYSBuYW1lIGFuZCBhIGFjY2VzcyBtZXRob2QuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlXGZQIChjb25zdCBjaGFyICpuYW1lLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50IG1vZGVzKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIGdpdmVuIGEgbmFtZSwgYSBhY2Nlc3NfbWV0aG9kIGZ1bmN0aW9uLCBhIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBvaWQgYW5kIHRoZSBtb2RlcyB0aGUgaGFuZGxlciBzdXBwb3J0cy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogXGZCbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKGNvbnN0IGNoYXIgKm5hbWUsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpoYW5kbGVyX2FjY2Vzc19tZXRob2QsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgbW9kZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJdW5yZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX25vY2FsbGJhY2tcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2luamVjdF9oYW5kbGVyX2JlZm9yZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgY29uc3QgY2hhciAqYmVmb3JlX3doYXQpIgotLmJyCi0uUkkgIlxmSWluamVjdCBhIG5ldyBoYW5kbGVyIGludG8gdGhlIGNhbGxpbmcgY2hhaW4gb2YgdGhlIGhhbmRsZXJzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbmplY3RfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlcikiCi0uYnIKLS5SSSAiXGZJaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIGludCBcZkJuZXRzbm1wX2NhbGxfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqbmV4dF9oYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZkljYWxscyBhIGhhbmRsZXIgd2l0aCB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcgb2YgYXJndW1lbnRzLCBldGMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2FsbF9oYW5kbGVyc1xmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgaW50IFxmQm5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmN1cnJlbnQsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWNhbGxzIHRoZSBuZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZywgZXRjLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIGludCBcZkJuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyX29uZV9yZXF1ZXN0XGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpjdXJyZW50LCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZkljYWxscyB0aGUgbmV4dCBoYW5kbGVyIGluIHRoZSBjaGFpbiBhZnRlciB0aGUgY3VycmVudCBvbmUgd2l0aCB3aXRoIGFwcHJvcHJpYXRlIE5VTEwgY2hlY2tpbmcsIGV0Yy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaGFuZGxlcl9mcmVlXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyKSIKLS5icgotLlJJICJcZklmcmVlcyB0aGUgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIGhhbmRsZXIgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9oYW5kbGVyX2R1cFxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlcikiCi0uYnIKLS5SSSAiXGZJZHVwbGljYXRlcyBhIGhhbmRsZXIgYW5kIGFsbCBzdWJzZXF1ZW50IGhhbmRsZXJzIHNlZSBhbHNvIF9jbG9uZV9oYW5kbGVyIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWVcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSWZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9kdXBcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSWR1cGxpY2F0ZXMgdGhlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIG9iamVjdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICogXGZCbmV0c25tcF9jcmVhdGVfZGVsZWdhdGVkX2NhY2hlXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzLCB2b2lkICpsb2NhbGluZm8pIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYSBjYWNoZSBvZiBpbmZvcm1hdGlvbiB3aGljaCBjYW4gYmUgc2F2ZWQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKiBcZkJuZXRzbm1wX2hhbmRsZXJfY2hlY2tfY2FjaGVcZlAgKFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICpkY2FjaGUpIgotLmJyCi0uUkkgIlxmSWNoZWNrJ3MgYSBnaXZlbiBjYWNoZSBhbmQgcmV0dXJucyBpdCBpZiBpdCBpcyBzdGlsbCB2YWxpZCAoaWUsIHRoZSBhZ2VudCBzdGlsbCBjb25zaWRlcnMgaXQgdG8gYmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGVcZlAgKFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICpkY2FjaGUpIgotLmJyCi0uUkkgIlxmSWZyZWVzIGEgY2FjaGUgb25jZSB5b3UncmUgZmluaXNoZWQgdXNpbmcgaXQgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaGFuZGxlcl9tYXJrX3JlcXVlc3RzX2FzX2RlbGVnYXRlZFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzLCBpbnQgaXNkZWxlZ2F0ZWQpIgotLmJyCi0uUkkgIlxmSW1hcmtzIGEgbGlzdCBvZiByZXF1ZXN0cyBhcyBkZWxlZ2F0ZWQgKG9yIG5vdCBpZiBpc2RlbGVnYWRlZCA9IDApIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3JlcXVlc3RfYWRkX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICpcZkJub2RlXGZQKSIKLS5icgotLlJJICJcZklhZGQgZGF0YSB0byBhIHJlcXVlc3QgdGhhdCBjYW4gYmUgZXh0cmFjdGVkIGxhdGVyIGJ5IHN1Ym1vZHVsZXMgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBpbnQgXGZCbmV0c25tcF9yZXF1ZXN0X3JlbW92ZV9saXN0X2RhdGFcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklyZW1vdmUgZGF0YSBmcm9tIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3QgZGF0YSBmcm9tIGEgcmVxdWVzdCB0aGF0IHdhcyBhZGRlZCBwcmV2aW91c2x5IGJ5IGEgcGFyZW50IFxmQm1vZHVsZVxmUCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX3JlcXVlc3RfZGF0YV9zZXRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIHJlcXVlc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfcmVxdWVzdF9kYXRhX3NldHNcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklGcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIGJ1bmNoIG9mIHJlcXVlc3RzIChhbGwgZGF0YSBpbiB0aGUgY2hhaW4pLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2ZpbmRfaGFuZGxlcl9ieV9uYW1lXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBjb25zdCBjaGFyICpuYW1lKSIKLS5icgotLlJJICJcZklSZXR1cm5zIGEgaGFuZGxlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZmluZF9oYW5kbGVyX2RhdGFfYnlfbmFtZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS5SSSAiXGZJUmV0dXJucyBhIGhhbmRsZXIncyB2b2lkICogcG9pbnRlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJoYW5kbGVyX2ZyZWVfY2FsbGJhY2tcZlAgKHZvaWQgKmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIpIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyBhIGdpdmVuIGhhbmRsZXIgYnkgbmFtZSBzbyB0aGF0IGl0IGNhbiBiZSBmb3VuZCBlYXNpbHkgbGF0ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NsZWFyX2hhbmRsZXJfbGlzdFxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJY2xlYXJzIHRoZSBlbnRpcmUgaGFuZGxlci1yZWdpc3RyYXRpb24gbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbmplY3RfaGFuZGxlcl9pbnRvX3N1YnRyZWVcZlAgKFxmQm5ldHNubXBfc3VidHJlZVxmUCAqdHAsIGNvbnN0IGNoYXIgKm5hbWUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIGNvbnN0IGNoYXIgKmJlZm9yZV93aGF0KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnBhcnNlX2luamVjdEhhbmRsZXJfY29uZlxmUCAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X2hhbmRsZXJfY29uZlxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaGFuZGxlcl9nZXRfcGFyZW50X2RhdGFcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICosIGNvbnN0IGNoYXIgKikiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgYmFzaWMgdGhlb3J5IGdvZXMgc29tZXRoaW5nIGxpa2UgdGhpczogSW4gdGhlIHBhc3QsIHdpdGggdGhlIG9yaWdpbmFsIG1pYiBcZkJtb2R1bGVcZlAgYXBpICh3aGljaCBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsIENNVSBTTk1QIGNvZGUpIHRoZSB1bmRlcmx5aW5nIG1pYiBtb2R1bGVzIHdlcmUgcGFzc2VkIHZlcnkgbGl0dGxlIGluZm9ybWF0aW9uIChvbmx5IHRoZSB0cnVseSBtb3N0IGJhc2ljIGluZm9ybWF0aW9uIGFib3V0IGEgcmVxdWVzdCkuIAotCi1UaGlzIHdvcmtlZCB3ZWxsIGF0IHRoZSB0aW1lIGJ1dCBpbiB0b2RheXMgd29ybGQgb2Ygc3ViYWdlbnRzLCBkZXZpY2UgaW5zdHJ1bWVudGF0aW9uLCBsb3cgcmVzb3VyY2UgY29uc3VtcHRpb24sIGV0YywgaXQganVzdCBpc24ndCBmbGV4aWJsZSBlbm91Z2guICdoYW5kbGVycycgYXJlIGhlcmUgdG8gZml4IGFsbCB0aGF0LgotLlBQCi1XaXRoIHRoZSByZXdyaXRlIG9mIHRoZSBhZ2VudCBpbnRlcm5hbHMgZm9yIHRoZSBuZXQtc25tcCA1LjAgcmVsZWFzZSwgd2UgaW50cm9kdWNlIGEgbW9kdWxhciBjYWxsaW5nIHNjaGVtZSB0aGF0IGFsbG93cyBhZ2VudCBtb2R1bGVzIHRvIGJlIHdyaXR0ZW4gaW4gYSB2ZXJ5IGZsZXhpYmxlIG1hbm5lciwgYW5kIG1vcmUgaW1wb3J0YW50bHkgYWxsb3dzIHJldXNlIG9mIGNvZGUgaW4gYSBkZWNlbnQgd2F5IChhbmQgd2l0aG91dCB0aGUgbWVtb3J5IGFuZCBzcGVlZCBvdmVyaGVhZHMgb2YgT08gbGFuZ3VhZ2VzIGxpa2UgQysrKS4KLS5QUAotRnVuY3Rpb25hbGx5LCB0aGUgbm90aW9uIG9mIHdoYXQgYSBoYW5kbGVyIGRvZXMgaXMgdGhlIHNhbWUgYXMgdGhlIG9sZGVyIGFwaTogQSBoYW5kbGVyIGlzIFxmQmNyZWF0ZWRcZlAgYW5kIHRoZW4gXGZCcmVnaXN0ZXJlZFxmUCB3aXRoIHRoZSBtYWluIGFnZW50IGF0IGEgZ2l2ZW4gT0lEIGluIHRoZSBPSUQgXGZCdHJlZVxmUCBhbmQgZ2V0cyBjYWxsZWQgYW55IHRpbWUgYSByZXF1ZXN0IGlzIG1hZGUgdGhhdCBpdCBzaG91bGQgcmVzcG9uZCB0by4gWW91IHByb2JhYmx5IHNob3VsZCB1c2Ugb25lIG9mIHRoZSBjb252ZW5pZW5jZSBoZWxwZXJzIGluc3RlYWQgb2YgZG9pbmcgYW55dGhpbmcgZWxzZSB5b3Vyc2VsZiB0aG91Z2g6Ci0uUFAKLU1vc3QgaW1wb3J0YW50bHksIHRob3VnaCwgaXMgdGhhdCB0aGUgaGFuZGxlcnMgYXJlIGJ1aWx0IG9uIHRoZSBub3Rpb24gb2YgbW9kdWxhcml0eSBhbmQgcmV1c2UuIFNwZWNpZmljYWxseSwgcmF0aGVyIHRoYW4gZG8gYWxsIHRoZSByZWFsbHkgaGFyZCB3b3JrIChsaWtlIHBhcnNpbmcgdGFibGUgaW5kZXhlcyBvdXQgb2YgYW4gaW5jb21pbmcgb2lkIHJlcXVlc3QpIGluIGVhY2ggXGZCbW9kdWxlXGZQLCB0aGUgQVBJIGlzIGRlc2lnbmVkIHRvIG1ha2UgaXQgZWFzeSB0byB3cml0ZSAnaGVscGVyJyBoYW5kbGVycyB0aGF0IG1lcmVseSBwcm9jZXNzIHNvbWUgYXNwZWN0IG9mIHRoZSByZXF1ZXN0IGJlZm9yZSBwYXNzaW5nIGl0IGFsb25nIHRvIHRoZSBmaW5hbCBoYW5kbGVyIHRoYXQgcmV0dXJucyB0aGUgcmVhbCBhbnN3ZXIuIE1vc3QgcGVvcGxlIHdpbGwgd2FudCB0byBtYWtlIHVzZSBvZiB0aGUgXGZCaW5zdGFuY2VcZlAsIFxmQnRhYmxlXGZQLCBcZkJ0YWJsZV9pdGVyYXRvclxmUCwgXGZCdGFibGVfZGF0YVxmUCwgb3IgXGZCdGFibGVfZGF0YXNldFxmUCBoZWxwZXJzIHRvIG1ha2UgdGhlaXIgbGlmZSBlYXNpZXIuIFRoZXNlICdoZWxwZXJzJyBpbnRlcnBlcnQgaW1wb3J0YW50IGFzcGVjdHMgb2YgdGhlIHJlcXVlc3QgYW5kIHBhc3MgdGhlbSBvbiB0byB5b3UuCi0uUFAKLUZvciBpbnN0YW5jZSwgdGhlIFxmQnRhYmxlXGZQIGhlbHBlciBpcyBkZXNpZ25lZCB0byBoYW5kIHlvdSBhIGxpc3Qgb2YgZXh0cmFjdGVkIGluZGV4IHZhbHVlcyBmcm9tIGFuIGluY29taW5nIHJlcXVlc3QuIFRIZSBcZkJ0YWJsZV9pdGVyYXRvclxmUCBoZWxwZXIgaXMgYnVpbHQgb24gdG9wIG9mIHRoZSB0YWJsZSBoZWxwZXIsIGFuZCBpcyBkZXNpZ25lZCB0byBoZWxwIHlvdSBpdGVyYXRlIHRocm91Z2ggZGF0YSBzdG9yZWQgZWxzZXdoZXJlIChsaWtlIGluIGEga2VybmVsKSB0aGF0IGlzIG5vdCBpbiBPSUQgbGV4b2dyYXBoaWNhbCBvcmRlciAoaWUsIGRvbid0IHdyaXRlIHlvdXIgb3duIGluZGV4L29pZCBzb3J0aW5nIHJvdXRpbmUsIHVzZSB0aGlzIGhlbHBlciBpbnN0ZWFkKS4gVGhlIGJlYXV0eSBvZiB0aGUgXGZCdGFibGVfaXRlcmF0b3IgaGVscGVyXGZQLCBhcyB3ZWxsIGFzIHRoZSBcZkJpbnN0YW5jZVxmUCBoZWxwZXIgaXMgdGhhdCB0aGV5IHRha2UgY2FyZSBvZiB0aGUgY29tcGxleCBHRVRORVhUIHByb2Nlc3NpbmcgZW50aXJlbHkgZm9yIHlvdSBhbmQgaGFuZCB5b3UgZXZlcnl0aGluZyB5b3UgbmVlZCB0byBtZXJlbHkgcmV0dXJuIHRoZSBkYXRhIGFzIGlmIGl0IHdhcyBhIEdFVCByZXF1ZXN0LiBNdWNoIGxlc3MgY29kZSBhbmQgaGFpciBwdWxsaW5nLiBJJ3ZlIHB1bGxlZCBhbGwgbXkgaGFpciBvdXQgdG8gaGVscCB5b3Ugc28gdGhhdCBvbmx5IG9uZSBvZiB1cyBoYXMgdG8gYmUgYmFsZC4gCi0uU0ggIlR5cGVkZWYgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAic3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQIgotLlBQCi1UeXBlZGVmcyB0aGUgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24uIAotLlNTICJzdHJ1Y3QgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zXGZQIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAiCi0uUFAKLVR5cGVkZWZzIHRoZSBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgc3RydWN0IGludG8gbmV0c25tcF9taWJfaGFuZGxlci4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBuZXRzbm1wX2NhbGxfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIG5leHRfaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWNhbGxzIGEgaGFuZGxlciB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZyBvZiBhcmd1bWVudHMsIGV0Yy4gCi0uU1MgImludCBuZXRzbm1wX2NhbGxfbmV4dF9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogY3VycmVudCwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cykiCi0uUFAKLWNhbGxzIHRoZSBuZXh0IGhhbmRsZXIgaW4gdGhlIGNoYWluIGFmdGVyIHRoZSBjdXJyZW50IG9uZSB3aXRoIHdpdGggYXBwcm9wcmlhdGUgTlVMTCBjaGVja2luZywgZXRjLiAKLS5TUyAiaW50IG5ldHNubXBfY2FsbF9uZXh0X2hhbmRsZXJfb25lX3JlcXVlc3QgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBjdXJyZW50LCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotY2FsbHMgdGhlIG5leHQgaGFuZGxlciBpbiB0aGUgY2hhaW4gYWZ0ZXIgdGhlIGN1cnJlbnQgb25lIHdpdGggd2l0aCBhcHByb3ByaWF0ZSBOVUxMIGNoZWNraW5nLCBldGMuIAotLlNTICJ2b2lkIG5ldHNubXBfY2xlYXJfaGFuZGxlcl9saXN0ICh2b2lkKSIKLS5QUAotY2xlYXJzIHRoZSBlbnRpcmUgaGFuZGxlci1yZWdpc3RyYXRpb24gbGlzdCAKLS5TUyAiXGZCbmV0c25tcF9kZWxlZ2F0ZWRfY2FjaGVcZlAgKiBuZXRzbm1wX2NyZWF0ZV9kZWxlZ2F0ZWRfY2FjaGUgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzLCB2b2lkICogbG9jYWxpbmZvKSIKLS5QUAotY3JlYXRlcyBhIGNhY2hlIG9mIGluZm9ybWF0aW9uIHdoaWNoIGNhbiBiZSBzYXZlZCBmb3IgZnV0dXJlIHJlZmVyZW5jZS4gVXNlIFxmQm5ldHNubXBfaGFuZGxlcl9jaGVja19jYWNoZSgpXGZQIGxhdGVyIHRvIG1ha2Ugc3VyZSBpdCdzIHN0aWxsIHZhbGlkIGJlZm9yZSByZWZlcmVuY2luZyBpdCBpbiB0aGUgZnV0dXJlLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogbmV0c25tcF9jcmVhdGVfaGFuZGxlciAoY29uc3QgY2hhciAqIG5hbWUsIE5ldHNubXBfTm9kZV9IYW5kbGVyICogaGFuZGxlcl9hY2Nlc3NfbWV0aG9kKSIKLS5QUAotY3JlYXRlcyBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0dXJlIGdpdmVuIGEgbmFtZSBhbmQgYSBhY2Nlc3MgbWV0aG9kLiBUaGUgcmV0dXJuZWQgaGFuZGxlciBzaG91bGQgdGhlbiBiZSBcZkJyZWdpc3RlcmVkLlxmUAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW5hbWVcZlAgaXMgdGhlIGhhbmRsZXIgbmFtZSBhbmQgaXMgY29waWVkIHRoZW4gYXNzaWduZWQgdG8gbmV0c25tcF9taWJfaGFuZGxlci0+aGFuZGxlcl9uYW1lCi0uYnIKLVxmSWhhbmRsZXJfYWNjZXNzX21ldGhvZFxmUCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdXNlZCBhcyB0aGUgYWNjZXNzIG1ldGhvZCBmb3IgdGhpcyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBpbnN0YW5jZSBmb3Igd2hhdGV2ZXIgcmVxdWlyZWQgbmVlZHMuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIHBvaW50ZXIgdG8gYSBwb3B1bGF0ZWQgbmV0c25tcF9taWJfaGFuZGxlciBzdHJ1Y3QgdG8gYmUgcmVnaXN0ZXJlZAotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLW5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uKCkgCi0uUFAKLVxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIAotLlJFCi0uUFAKLQotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogbmV0c25tcF9maW5kX2hhbmRsZXJfYnlfbmFtZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotUmV0dXJucyBhIGhhbmRsZXIgZnJvbSBhIGNoYWluIGJhc2VkIG9uIHRoZSBuYW1lLiAKLS5TUyAidm9pZCAqIG5ldHNubXBfZmluZF9oYW5kbGVyX2RhdGFfYnlfbmFtZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotUmV0dXJucyBhIGhhbmRsZXIncyB2b2lkICogcG9pbnRlciBmcm9tIGEgY2hhaW4gYmFzZWQgb24gdGhlIG5hbWUuIFRoaXMgcHJvYmFibHkgc2hvdWxkbid0IGJlIHVzZWQgYnkgdGhlIGdlbmVyYWwgcHVibGljIGFzIHRoZSB2b2lkICogZGF0YSBtYXkgY2hhbmdlIGFzIGEgaGFuZGxlciBldm9sdmVzLiBIYW5kbGVycyBzaG91bGQgcmVhbGx5IGFkdmVydGlzZSBzb21lIGZ1bmN0aW9uIGZvciB5b3UgdG8gdXNlIGluc3RlYWQuIAotLlNTICJ2b2lkIG5ldHNubXBfZnJlZV9kZWxlZ2F0ZWRfY2FjaGUgKFxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICogZGNhY2hlKSIKLS5QUAotZnJlZXMgYSBjYWNoZSBvbmNlIHlvdSdyZSBmaW5pc2hlZCB1c2luZyBpdCAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlNTICJ2b2lkIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1GcmVlIHRoZSBleHRyYSBkYXRhIHN0b3JlZCBpbiBhIHJlcXVlc3QuIAotLlNTICJ2b2lkIG5ldHNubXBfZnJlZV9yZXF1ZXN0X2RhdGFfc2V0cyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotRnJlZSB0aGUgZXh0cmEgZGF0YSBzdG9yZWQgaW4gYSBidW5jaCBvZiByZXF1ZXN0cyAoYWxsIGRhdGEgaW4gdGhlIGNoYWluKS4gCi0uU1MgIlxmQm5ldHNubXBfZGVsZWdhdGVkX2NhY2hlXGZQICogbmV0c25tcF9oYW5kbGVyX2NoZWNrX2NhY2hlIChcZkJuZXRzbm1wX2RlbGVnYXRlZF9jYWNoZVxmUCAqIGRjYWNoZSkiCi0uUFAKLWNoZWNrJ3MgYSBnaXZlbiBjYWNoZSBhbmQgcmV0dXJucyBpdCBpZiBpdCBpcyBzdGlsbCB2YWxpZCAoaWUsIHRoZSBhZ2VudCBzdGlsbCBjb25zaWRlcnMgaXQgdG8gYmUgYW4gb3V0c3RhbmRpbmcgcmVxdWVzdC4gUmV0dXJucyBOVUxMIGlmIGl0J3Mgbm8gbG9uZ2VyIHZhbGlkLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogbmV0c25tcF9oYW5kbGVyX2R1cCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIpIgotLlBQCi1kdXBsaWNhdGVzIGEgaGFuZGxlciBhbmQgYWxsIHN1YnNlcXVlbnQgaGFuZGxlcnMgc2VlIGFsc28gX2Nsb25lX2hhbmRsZXIgCi0uU1MgInZvaWQgbmV0c25tcF9oYW5kbGVyX2ZyZWUgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyKSIKLS5QUAotZnJlZXMgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBoYW5kbGVyIAotLlBQCi1tYWtlIHN1cmUgd2UgYXJlbid0IHBvaW50aW5nIHRvIG91cnNlbHZlcy4gCi0uU1MgInZvaWQgbmV0c25tcF9oYW5kbGVyX21hcmtfcmVxdWVzdHNfYXNfZGVsZWdhdGVkIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzLCBpbnQgaXNkZWxlZ2F0ZWQpIgotLlBQCi1tYXJrcyBhIGxpc3Qgb2YgcmVxdWVzdHMgYXMgZGVsZWdhdGVkIChvciBub3QgaWYgaXNkZWxlZ2FkZWQgPSAwKSAKLS5TUyAiXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY3JlYXRlIChjb25zdCBjaGFyICogbmFtZSwgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIsIG9pZCAqIHJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50IG1vZGVzKSIKLS5QUAotY3JlYXRlcyBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSBnaXZlbiBhIG5hbWUsIGEgYWNjZXNzX21ldGhvZCBmdW5jdGlvbiwgYSByZWdpc3RyYXRpb24gbG9jYXRpb24gb2lkIGFuZCB0aGUgbW9kZXMgdGhlIGhhbmRsZXIgc3VwcG9ydHMuIElmIG1vZGVzID09IDAsIHRoZW4gbW9kZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBvbmx5IEhBTkRMRVJfQ0FOX0RFRkFVTFQsIHdoaWNoIGlzIGJ5IGRlZmF1bHQgcmVhZC1vbmx5IEdFVCBhbmQgR0VUTkVYVCByZXF1ZXN0cy4gQSBoYW5kZXIgd2hpY2ggc3VwcG9ydHMgc2V0cyBidXQgbm90IHJvdyBjcmVhdGlvbiBzaG91bGQgc2V0IHVzIGEgbW9kZSBvZiBIQU5ETEVSX0NBTl9TRVRfT05MWS4gCi0uUFAKLVxmQk5vdGU6XGZQCi0uUlMgNAotVGhpcyBlbmRzIHVwIGNhbGxpbmcgbmV0c25tcF9jcmVhdGVfaGFuZGxlcihuYW1lLCBoYW5kbGVyX2FjY2Vzc19tZXRob2QpIAotLlJFCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJbmFtZVxmUCBpcyB0aGUgaGFuZGxlciBuYW1lIGFuZCBpcyBjb3BpZWQgdGhlbiBhc3NpZ25lZCB0byBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uLT5oYW5kbGVyTmFtZS4KLS5icgotXGZJaGFuZGxlclxmUCBpcyBhIGZ1bmN0aW9uIHBvaW50ZXIgdXNlZCBhcyB0aGUgYWNjZXNzIG1ldGhvZCBmb3IgdGhpcyBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBpbnN0YW5jZSBmb3Igd2hhdGV2ZXIgcmVxdWlyZWQgbmVlZHMuCi0uYnIKLVxmSXJlZ19vaWRcZlAgaXMgdGhlIHJlZ2lzdHJhdGlvbiBsb2NhdGlvbiBvaWQuCi0uYnIKLVxmSXJlZ19vaWRfbGVuXGZQIGlzIHRoZSBsZW5ndGggb2YgcmVnX29pZCwgY2FuIHVzZSB0aGUgbWFjcm8sIE9JRF9MRU5HVEgKLS5icgotXGZJbW9kZXNcZlAgaXMgdXNlZCB0byBjb25maWd1cmUgcmVhZC93cml0ZSBhY2Nlc3MuIElmIG1vZGVzID09IDAsIHRoZW4gbW9kZXMgd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNldCB0byB0aGUgZGVmYXVsdCB2YWx1ZSBvZiBvbmx5IEhBTkRMRVJfQ0FOX0RFRkFVTFQsIHdoaWNoIGlzIGJ5IGRlZmF1bHQgcmVhZC1vbmx5IEdFVCBhbmQgR0VUTkVYVCByZXF1ZXN0cy4gVGhlIG90aGVyIHR3byBtb2RlIG9wdGlvbnMgYXJlIHJlYWQgb25seSwgSEFORExFUl9DQU5fUk9OTFksIGFuZCByZWFkL3dyaXRlLCBIQU5ETEVSX0NBTl9SV1JJVEUuCi0uUkUKLS5QUAotLklQICJcKGJ1IiAyCi1IQU5ETEVSX0NBTl9HRVRBTkRHRVRORVhUCi0uSVAgIlwoYnUiIDIKLUhBTkRMRVJfQ0FOX1NFVAotLklQICJcKGJ1IiAyCi1IQU5ETEVSX0NBTl9HRVRCVUxLCi0uUFAKLS5QUAotLklQICJcKGJ1IiAyCi1IQU5ETEVSX0NBTl9ST05MWSAoSEFORExFUl9DQU5fR0VUQU5ER0VUTkVYVCkKLS5JUCAiXChidSIgMgotSEFORExFUl9DQU5fUldSSVRFIChIQU5ETEVSX0NBTl9HRVRBTkRHRVRORVhUIHwgSEFORExFUl9DQU5fU0VUKQotLklQICJcKGJ1IiAyCi1IQU5ETEVSX0NBTl9ERUZBVUxUIEhBTkRMRVJfQ0FOX1JPTkxZCi0uUFAKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0LiBOVUxMIGlzIHJldHVybmVkIG9ubHkgd2hlbiBtZW1vcnkgY291bGQgbm90IGJlIGFsbG9jYXRlZCBmb3IgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0LgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQm5ldHNubXBfY3JlYXRlX2hhbmRsZXIoKVxmUCAKLS5QUAotXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgCi0uUkUKLS5QUAotCi0uU1MgIlxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2R1cCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1kdXBsaWNhdGVzIHRoZSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgCi0uU1MgInZvaWQgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9mcmVlIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLWZyZWUgdGhlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBoYW5kbGVyIHJlZ2lzdHJhdGlvbiBvYmplY3QgCi0uU1MgImludCBuZXRzbm1wX2luamVjdF9oYW5kbGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIGhhbmRsZXIpIgotLlBQCi1pbmplY3QgYSBuZXcgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIG9mIHRoZSBoYW5kbGVycyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIFRoZSBuZXcgaGFuZGxlciBpcyBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0IGFuZCBoZW5jZSB3aWxsIGJlIHRoZSBuZXcgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuIAotLlNTICJpbnQgbmV0c25tcF9pbmplY3RfaGFuZGxlcl9iZWZvcmUgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlciwgY29uc3QgY2hhciAqIGJlZm9yZV93aGF0KSIKLS5QUAotaW5qZWN0IGEgbmV3IGhhbmRsZXIgaW50byB0aGUgY2FsbGluZyBjaGFpbiBvZiB0aGUgaGFuZGxlcnMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiBUaGUgbmV3IGhhbmRsZXIgaXMgaW5qZWN0ZWQgYWZ0ZXIgdGhlIGJlZm9yZV93aGF0IGhhbmRsZXIsIG9yIGlmIE5VTEwgYXQgdGhlIHRvcCBvZiB0aGUgbGlzdCBhbmQgaGVuY2Ugd2lsbCBiZSB0aGUgbmV3IGhhbmRsZXIgdG8gYmUgY2FsbGVkIGZpcnN0LiAKLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi1yZWdpc3RlciBhIGhhbmRsZXIsIGFzIGRlZmluZWQgYnkgdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlci4gCi0uU1MgInZvaWQgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX2J5X25hbWUgKGNvbnN0IGNoYXIgKiBuYW1lLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlcikiCi0uUFAKLXJlZ2lzdGVycyBhIGdpdmVuIGhhbmRsZXIgYnkgbmFtZSBzbyB0aGF0IGl0IGNhbiBiZSBmb3VuZCBlYXNpbHkgbGF0ZXIuIAotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyX25vY2FsbGJhY2sgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotcmVnaXN0ZXIgYSBoYW5kbGVyLCBhcyBkZWZpbmVkIGJ5IHRoZSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIHBvaW50ZXIuIAotLlNTICJ2b2lkIG5ldHNubXBfcmVxdWVzdF9hZGRfbGlzdF9kYXRhIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIFxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogbm9kZSkiCi0uUFAKLWFkZCBkYXRhIHRvIGEgcmVxdWVzdCB0aGF0IGNhbiBiZSBleHRyYWN0ZWQgbGF0ZXIgYnkgc3VibW9kdWxlcyBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZQotLmJyCi1cZklcZkJub2RlXGZQXGZQIHRoaXMgaXMgdGhlIGRhdGEgdG8gYmUgYWRkZWQgdG8gdGhlIGxpbmtlZCBsaXN0IHJlcXVlc3QtPnBhcmVudF9kYXRhCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uU1MgInZvaWQgKiBuZXRzbm1wX3JlcXVlc3RfZ2V0X2xpc3RfZGF0YSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLWV4dHJhY3QgZGF0YSBmcm9tIGEgcmVxdWVzdCB0aGF0IHdhcyBhZGRlZCBwcmV2aW91c2x5IGJ5IGEgcGFyZW50IFxmQm1vZHVsZVxmUCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIGZ1bmN0aW9uCi0uYnIKLVxmSW5hbWVcZlAgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgdGhlIHJlcXVlc3QtPnBhcmVudF9kYXRhLT5uYW1lIHZhbHVlLCBpZiBhIG1hdGNoIGlzIGZvdW5kIHJlcXVlc3QtPnBhcmVudF9kYXRhLT5kYXRhIGlzIHJldHVybmVkCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIHZvaWQgcG9pbnRlcihyZXF1ZXN0LT5wYXJlbnRfZGF0YS0+ZGF0YSksIG90aGVyd2lzZSBOVUxMIGlzIHJldHVybmVkIGlmIHJlcXVlc3QgaXMgTlVMTCBvciByZXF1ZXN0LT5wYXJlbnRfZGF0YSBpcyBOVUxMIG9yIHJlcXVlc3QtPnBhcmVudF9kYXRhIG9iamVjdCBpcyBub3QgZm91bmQuIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uU1MgImludCBuZXRzbm1wX3JlcXVlc3RfcmVtb3ZlX2xpc3RfZGF0YSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBjb25zdCBjaGFyICogbmFtZSkiCi0uUFAKLXJlbW92ZSBkYXRhIGZyb20gYSByZXF1ZXN0IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxdWVzdFxmUCB0aGUgbmV0c25tcCByZXF1ZXN0IGluZm8gc3RydWN0dXJlCi0uYnIKLVxmSW5hbWVcZlAgdGhpcyBpcyB0aGUgbmFtZSBvZiB0aGUgcHJldmlvdXNseSBhZGRlZCBkYXRhCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIG9uIHN1Y2Nlc3NmdWwgZmluZC1hbmQtZGVsZXRlLCAxIG90aGVyd2lzZS4gCi0uUkUKLS5QUAotCi0uU1MgImludCBuZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8pIgotLlBQCi11bnJlZ2lzdGVyIGEgaGFuZGxlciwgYXMgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyLiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9pbnN0YW5jZS4zIGIvbWFuL25ldHNubXBfaW5zdGFuY2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM4NzcyNS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9pbnN0YW5jZS4zCisrKyAvZGV2L251bGwKQEAgLTEsMTg3ICswLDAgQEAKLS5USCAiaW5zdGFuY2UiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1pbnN0YW5jZSBcLSAKLS5QUAotUHJvY2VzcyBpbmRpdmlkdWFsIE1JQiBpbnN0YW5jZXMgZWFzaWx5LiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGFuIGluc3RhbmNlIGhlbHBlciBoYW5kbGVyLCBjYWxscyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyLCB3aGljaCB0aGVuIGNvdWxkIGJlIHJlZ2lzdGVyZWQsIHVzaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIHJlZ2lzdGVycyBhbiBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlciwgd2hpY2ggaXMgYSB3YXkgb2YgcmVnaXN0ZXJpbmcgYW4gZXhhY3QgT0lEIHN1Y2ggdGhhdCBHRU5FWFQgcmVxdWVzdHMgYXJlIGhhbmRsZWQgZW50aXJlbHkgYnkgdGhlIGhlbHBlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW5zdGFuY2VcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gaW5qZWN0cyBhICdyZWFkIG9ubHknIGhhbmRsZXIgaW50byB0aGUgaGFuZGxlciBjaGFpbiBwcmlvciB0byBzZXJpYWxpemluZy9yZWdpc3RlcmluZyB0aGUgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdWxvbmdfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfbG9uZ19pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGxvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3VpbnRfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1bnNpZ25lZCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdWludF9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVuc2lnbmVkIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJyZWdpc3Rlcl9yZWFkX29ubHlfaW50X2luc3RhbmNlXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV91bG9uZ19pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl91bG9uZ19pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfY291bnRlcjMyX2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlciwgY29uc3QgY2hhciAqY29udGV4dE5hbWUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9sb25nX2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBsb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9sb25nX2luc3RhbmNlX2NvbnRleHRcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBsb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2VfY29udGV4dFxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGludCAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyLCBjb25zdCBjaGFyICpjb250ZXh0TmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9pbnN0YW5jZV9jb250ZXh0XGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgaW50ICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9udW1fZmlsZV9pbnN0YW5jZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIGNoYXIgKmZpbGVfbmFtZSwgaW50IGFzbl90eXBlLCBpbnQgbW9kZSwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIsIGNvbnN0IGNoYXIgKmNvbnRleHROYW1lKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9pbnRfaW5zdGFuY2VcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYW4gaW50IGhlbHBlciBoYW5kbGVyIHRvIGEgc3BlY2lmaWVkIE9JRC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV91bG9uZ19oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV9jb3VudGVyMzJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfbG9uZ19oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV9pbnRfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfbnVtX2ZpbGVfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaW5zdGFuY2VfdWludF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9pbnN0YW5jZV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Qcm9jZXNzIGluZGl2aWR1YWwgTUlCIGluc3RhbmNlcyBlYXNpbHkuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9pbnN0YW5jZV9oYW5kbGVyICh2b2lkKSIKLS5QUAotQ3JlYXRlcyBhbiBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlciwgY2FsbHMgbmV0c25tcF9jcmVhdGVfaGFuZGxlciwgd2hpY2ggdGhlbiBjb3VsZCBiZSByZWdpc3RlcmVkLCB1c2luZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUC4gXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBoYW5kbGVyJ3MgbmFtZSBhbmQgdGhlIGFjY2VzcyBtZXRob2QgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0OCBvZiBmaWxlIGluc3RhbmNlLmMuCi0uU1MgImludCBuZXRzbm1wX2luc3RhbmNlX251bV9maWxlX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotZmFsbCB0aHJvdWdoIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzQyIG9mIGZpbGUgaW5zdGFuY2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYW4gaW5zdGFuY2UgaGVscGVyIGhhbmRsZXIsIHdoaWNoIGlzIGEgd2F5IG9mIHJlZ2lzdGVyaW5nIGFuIGV4YWN0IE9JRCBzdWNoIHRoYXQgR0VORVhUIHJlcXVlc3RzIGFyZSBoYW5kbGVkIGVudGlyZWx5IGJ5IHRoZSBoZWxwZXIuIEZpcnN0IG5lZWQgdG8gaW5qZWN0IGl0IGludG8gdGhlIGNhbGxpbmcgY2hhaW4gb2YgdGhlIGhhbmRsZXIgZGVmaW5lZCBieSB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBzdHJ1Y3QsIHJlZ2luZm8uIFRoZSBuZXcgaGFuZGxlciBpcyBpbmplY3RlZCBhdCB0aGUgdG9wIG9mIHRoZSBsaXN0IGFuZCB3aWxsIGJlIHRoZSBuZXcgaGFuZGxlciB0byBiZSBjYWxsZWQgZmlyc3QuIFRoaXMgZnVuY3Rpb24gYWxzbyBpbmplY3RzIGEgc2VyaWFsaXplIGhhbmRsZXIgYmVmb3JlIGFjdHVhbGx5IGNhbGxpbmcgbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGUsIHJlZ2lzdGVyaW5nIHJlZ2luZm8uCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVnaW5mb1xmUCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSB3aGljaCBjb3VsZCBnZXQgY3JlYXRlZCB1c2luZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4gVXNlZCB0byByZWdpc3RlciBhbiBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlci4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU1JQl9SRUdJU1RFUkVEX09LIGlzIHJldHVybmVkIGlmIHRoZSByZWdpc3RyYXRpb24gd2FzIGEgc3VjY2Vzcy4gRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVEIGFuZCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4gCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDczIG9mIGZpbGUgaW5zdGFuY2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfaW50X2luc3RhbmNlIChjb25zdCBjaGFyICogbmFtZSwgb2lkICogcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKiBpdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKiBzdWJoYW5kbGVyKSIKLS5QUAotVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYW4gaW50IGhlbHBlciBoYW5kbGVyIHRvIGEgc3BlY2lmaWVkIE9JRC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluYW1lXGZQIHRoZSBuYW1lIHVzZWQgZm9yIHJlZ2lzdHJhdGlvbiBwcnVwb3Nlcy4KLS5icgotXGZJcmVnX29pZFxmUCB0aGUgT0lEIHdoZXJlIHlvdSB3YW50IHRvIHJlZ2lzdGVyIHlvdXIgaW50ZWdlciBhdAotLmJyCi1cZklyZWdfb2lkX2xlblxmUCB0aGUgbGVuZ3RoIG9mIHRoZSBPSUQKLS5icgotXGZJaXRcZlAgdGhlIGludGVnZXIgdmFsdWUgdG8gYmUgcmVnaXN0ZXJlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24KLS5icgotXGZJc3ViaGFuZGxlclxmUCBhIGhhbmRsZXIgdG8gZG8gd2hhdGV2ZXIgeW91IHdhbnQgdG8gZG8sIG90aGVyd2lzZSB1c2UgTlVMTCB0byB1c2UgdGhlIGRlZmF1bHQgaW50IGhhbmRsZXIuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1NSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuIEZhaWx1cmVzIGFyZSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxFRCBhbmQgTUlCX0RVUExJQ0FURV9SRUdJU1RSQVRJT04uIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDYxIG9mIGZpbGUgaW5zdGFuY2UuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2luc3RhbmNlIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gaW5qZWN0cyBhICdyZWFkIG9ubHknIGhhbmRsZXIgaW50byB0aGUgaGFuZGxlciBjaGFpbiBwcmlvciB0byBzZXJpYWxpemluZy9yZWdpc3RlcmluZyB0aGUgaGFuZGxlci4gVGhlIG9ubHkgcHVycG9zZSBvZiB0aGlzICdyZWFkIG9ubHknIGhhbmRsZXIgaXMgdG8gcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGVycm9yIGZvciBhbnkgcmVxdWVzdHMgcGFzc2VkIHRvIGl0IGluIGEgU0VUIG1vZGUuIEluc2VydGluZyBpdCBpbnRvIHlvdXIgaGFuZGxlciBjaGFpbiB3aWxsIGVuc3VyZSB5b3UncmUgbmV2ZXIgYXNrZWQgdG8gcGVyZm9ybSBhIFNFVCByZXF1ZXN0IHNvIHlvdSBjYW4gaWdub3JlIHRob3NlIGVycm9yIGNvbmRpdGlvbnMuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVnaW5mb1xmUCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSB3aGljaCBjb3VsZCBnZXQgY3JlYXRlZCB1c2luZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4gVXNlZCB0byByZWdpc3RlciBhIHJlYWQgb25seSBpbnN0YW5jZSBoZWxwZXIgaGFuZGxlci4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU1JQl9SRUdJU1RFUkVEX09LIGlzIHJldHVybmVkIGlmIHRoZSByZWdpc3RyYXRpb24gd2FzIGEgc3VjY2Vzcy4gRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVEIGFuZCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDAgb2YgZmlsZSBpbnN0YW5jZS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zIGIvbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMGJjYzAuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw3NiArMCwwIEBACi0uVEggIml0ZXJhdG9yX2luZm9fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWl0ZXJhdG9yX2luZm9fcyBcLSAKLS5QUAotSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhIFNOTVAgc3BlY2lmaWMgbWFubmVyLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jb250YWluZXJcZlAgXGZCY1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0xvb3BfS2V5ICogXGZCZ2V0X2ZpcnN0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfTG9vcF9LZXkgKiBcZkJnZXRfbmV4dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0xvb3BfRGF0YSAqIFxmQmdldF9kYXRhXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfRGF0YSAqIFxmQmZyZWVfdXNlcl9jdHhcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9DdHggKiBcZkJpbml0X2xvb3BfY3R4XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfSXRlcmF0b3JfQ3R4ICogXGZCY2xlYW51cF9sb29wX2N0eFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0N0eF9EdXAgKiBcZkJzYXZlX3Bvc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0l0ZXJhdG9yX0RhdGEgKiBcZkJyZWxlYXNlX2RhdGFcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9EYXRhICogXGZCaW5zZXJ0X2RhdGFcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9EYXRhICogXGZCcmVtb3ZlX2RhdGFcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9JdGVyYXRvcl9PcCAqIFxmQmdldF9zaXplXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzb3J0ZWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnVzZXJfY3R4XGZQIgotLmJyCi0uUkkgIlxmSVRoaXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGhhbmRsZXJzIHRvIHN0b3JlIGFueSBpbmZvcm1hdGlvbiB0aGV5IG5lZWQuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Ib2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEgU05NUCBzcGVjaWZpYyBtYW5uZXIuIAotCi1UaGUgaXRlcmF0b3JfaW5mbyB0eXBlZGVmIGNhbiBiZSB1c2VkIGluc3RlYWQgb2YgZGlyZWN0bHkgY2FsbGluZyB0aGlzIHN0cnVjdCBpZiB5b3Ugd291bGQgcHJlZmVyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM5IG9mIGZpbGUgY29udGFpbmVyX2l0ZXJhdG9yLmMuCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInZvaWQqIFxmQml0ZXJhdG9yX2luZm9fczo6dXNlcl9jdHhcZlAiCi0uUFAKLVRoaXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGhhbmRsZXJzIHRvIHN0b3JlIGFueSBpbmZvcm1hdGlvbiB0aGV5IG5lZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjkgb2YgZmlsZSBjb250YWluZXJfaXRlcmF0b3IuYy4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX2xlYWYuMyBiL21hbi9uZXRzbm1wX2xlYWYuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjhiNjlhMC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9sZWFmLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0NCArMCwwIEBACi0uVEggImxlYWZfaGFuZGxlcnMiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1sZWFmX2hhbmRsZXJzIFwtIAotLlBQCi1Qcm9jZXNzIGluZGl2aWR1YWwgbGVhZiBvYmplY3RzIEEgZ3JvdXAgb2YgaGFuZGxlcnMgdG8gaW1wbGVtZW50IGluZGl2aWR1YWwgbGVhZiBvYmplY3RzIGFuZCBpbnN0YW5jZXMgKGJvdGggc2NhbGFyIG9iamVjdHMsIGFuZCBpbmRpdmlkdWFsIG9iamVjdHMgYW5kIGluc3RhbmNlcyB3aXRoaW4gYSB0YWJsZSkuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQmluc3RhbmNlXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklQcm9jZXNzIGluZGl2aWR1YWwgTUlCIGluc3RhbmNlcyBlYXNpbHkuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCc2NhbGFyXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklQcm9jZXNzIHNjYWxhcnMgZWFzaWx5LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnNjYWxhcl9ncm91cFxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUHJvY2VzcyBncm91cHMgb2Ygc2NhbGFycy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ3YXRjaGVyXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklXYXRjaCBhIHNwZWNpZmllZCBcZkJ2YXJpYWJsZVxmUCBhbmQgcHJvY2VzcyBpdCBhcyBhbiBpbnN0YW5jZSBvciBzY2FsYXIgb2JqZWN0LiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUHJvY2VzcyBpbmRpdmlkdWFsIGxlYWYgb2JqZWN0cyBBIGdyb3VwIG9mIGhhbmRsZXJzIHRvIGltcGxlbWVudCBpbmRpdmlkdWFsIGxlYWYgb2JqZWN0cyBhbmQgaW5zdGFuY2VzIChib3RoIHNjYWxhciBvYmplY3RzLCBhbmQgaW5kaXZpZHVhbCBvYmplY3RzIGFuZCBpbnN0YW5jZXMgd2l0aGluIGEgdGFibGUpLiAKLQotVGhlc2UgaGFuZGxlcnMgd2lsbCB0eXBpY2FsbHkgYWxsb3cgY29udHJvbCB0byBiZSBwYXNzZWQgZG93biB0byBhIGxvd2VyIGxldmVsLCB1c2VyLXByb3ZpZGVkIGhhbmRsZXIsIGJ1dCB0aGlzIGlzICh1c3VhbGx5KSBvcHRpb25hbC4gCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbGlicmFyeS4zIGIvbWFuL25ldHNubXBfbGlicmFyeS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MDk2ZDM4Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX2xpYnJhcnkuMworKysgL2Rldi9udWxsCkBAIC0xLDY3MCArMCwwIEBACi0uVEggIlRoZSBOZXQtU05NUCBsaWJyYXJ5IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotVGhlIE5ldC1TTk1QIGxpYnJhcnkgXC0gCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc25tcF9pbnRlcm5hbF9zZXNzaW9uXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzZXNzaW9uX2xpc3RcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiTW9kdWxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJhc24xIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy5cZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSU5vdGUgb24uIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCQSBnZW5lcmljIGNhbGxiYWNrIG1lY2hhbmlzbVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJnZW5lcmljIGxpbmtlZC1saXN0IGRhdGEgaGFuZGxpbmcgd2l0aCBhIHN0cmluZyBhcyBhIGtleS5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCc3RvcmFnZSBzcGFjZSBmb3IgZGVmYXVsdHNcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVRoZSBwdXJwb3NlIG9mIHRoZSBkZWZhdWx0IHN0b3JhZ2UgaXMgdGhyZWUtZm9sZDouIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbWliIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCU3RvcmUgYW5kIHJldHJpZXZlIGRhdGEgcmVmZXJlbmNlZCBieSBhbiBPSUQuXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklUaGlzIGlzIGVzc2VudGlhbGx5IGEgd2F5IG9mIHN0b3JpbmcgZGF0YSBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCcGFyc2luZyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgcnVuIHRpbWVcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVRoZSByZWFkX2NvbmZpZyByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgYSBmYWlybHkgZXh0ZW5zaWJsZSBzeXN0ZW0gb2YgcGFyc2luZyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgdGhlIHJ1biB0aW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQmdlbmVyaWMgbGlicmFyeSBiYXNlZCBhbGFybSB0aW1lcnMgZm9yIHZhcmlvdXMgcGFydHMgb2YgYW4gYXBwbGljYXRpb25cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCdmFyaW91cyBQRFUgcHJvY2Vzc2luZyByb3V0aW5lc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJnZW5lcmljIGxvZ2dpbmcgZm9yIG5ldC1zbm1wXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQk1lbW9yeSBVdGlsaXR5IFJvdXRpbmVzXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNSU5cZlAoYSwgYikgICAoKChhKSA8IChiKSkgPyAoYSkgOiAoYikpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUlCX0NMSUVOVFNfQVJFX0VWSUxcZlAgICAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCX2luaXRfYWdlbnRfY2FsbGJhY2tfdHJhbnNwb3J0XGZQKCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX05FRURfUkVRVUVTVF9MSVNUXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCdGltZXJjbXBcZlAodHZwLCB1dnAsIGNtcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJ0aW1lcmNsZWFyXGZQKHR2cCkgICAodHZwKS0+dHZfc2VjID0gKHR2cCktPnR2X3VzZWMgPSAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTUFYX1BBQ0tFVF9MRU5HVEhcZlAgICAoMHg3ZmZmZmZmZikiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU5cZlAgICA1IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQlNENF8yXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCREVGQVVMVF9DT01NVU5JVFlcZlAgICAncHVibGljJyIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFRkFVTFRfUkVUUklFU1xmUCAgIDUiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJERUZBVUxUX1RJTUVPVVRcZlAgICAxMDAwMDAwTCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFRkFVTFRfUkVNUE9SVFxmUCAgIFNOTVBfUE9SVCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFRkFVTFRfRU5URVJQUklTRVxmUCAgIGRlZmF1bHRfZW50ZXJwcmlzZSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFRkFVTFRfVElNRVxmUCAgIDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJNQVhJTVVNX1BBQ0tFVF9TSVpFXGZQICAgMHg3ZmZmZmZmZiIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQkRFQlVHUFJJTlRQRFVUWVBFXGZQKHRva2VuLCB0eXBlKSAgIERFQlVHRFVNUFNFQ1RJT04odG9rZW4sIHNubXBfcGR1X3R5cGUodHlwZSkpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCRVJST1JfU1RBVF9MRU5HVEhcZlAgICAxMSIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQmluaXRfYWdlbnRcZlAgKGNvbnN0IGNoYXIgKmFwcCkiCi0uYnIKLS5SSSAiXGZJSW5pdGlhbGl6ZSB0aGUgYWdlbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzaHV0ZG93bl9hZ2VudFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJhZGRfdG9faW5pdF9saXN0XGZQIChjaGFyICptb2R1bGVfbGlzdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNob3VsZF9pbml0XGZQIChjb25zdCBjaGFyICptb2R1bGVfbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfYnVpbGRcZlAgKHVfY2hhciAqKnBrdCwgc2l6ZV90ICpwa3RfbGVuLCBzaXplX3QgKm9mZnNldCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpwc3MsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2dldF9lcnJub1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3N5bmNoX3Jlc2V0XGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKm5vdHVzZWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zeW5jaF9zZXR1cFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpub3R1c2VkKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCc3RyZXJyb3JcZlAgKGludCBlcnIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJzbm1wX3BkdV90eXBlXGZQIChpbnQgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJzbm1wX2dldF9uZXh0X3JlcWlkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNubXBfZ2V0X25leHRfbXNnaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc25tcF9nZXRfbmV4dF9zZXNzaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCc25tcF9nZXRfbmV4dF90cmFuc2lkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfcGVycm9yXGZQIChjb25zdCBjaGFyICpwcm9nX3N0cmluZykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3NldF9kZXRhaWxcZlAgKGNvbnN0IGNoYXIgKmRldGFpbF9zdHJpbmcpIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJzbm1wX2FwaV9lcnJzdHJpbmdcZlAgKGludCBzbm1wX2Vycm51bWJlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Vycm9yXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnBzZXNzLCBpbnQgKnBfZXJybm8sIGludCAqcF9zbm1wX2Vycm5vLCBjaGFyICoqcF9zdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zZXNzX2Vycm9yXGZQICh2b2lkICpzZXNzcCwgaW50ICpwX2Vycm5vLCBpbnQgKnBfc25tcF9lcnJubywgY2hhciAqKnBfc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfc2Vzc19sb2dfZXJyb3JcZlAgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zZXNzX3BlcnJvclxmUCAoY29uc3QgY2hhciAqcHJvZ19zdHJpbmcsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zZXNzX2luaXRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJpbml0X3NubXBcZlAgKGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0uUkkgIlxmSUNhbGxzIHRoZSBmdW5jdGlvbnMgdG8gZG8gY29uZmlnIGZpbGUgbG9hZGluZyBhbmQgbWliIFxmQm1vZHVsZVxmUCBwYXJzaW5nIGluIHRoZSBjb3JyZWN0IG9yZGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zdG9yZVxmUCAoY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3NodXRkb3duXGZQIChjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLlJJICJcZklTaHV0cyBkb3duIHRoZSBhcHBsaWNhdGlvbiwgc2F2aW5nIGFueSBuZWVkZWQgcGVyc2lzdGVudCBzdG9yYWdlLCBhbmQgYXBwcm9wcmlhdGUgY2xlYW4gdXAuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCc25tcF9vcGVuXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQnNubXBfb3Blbl9leFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBpbnQoKmZwcmVfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIGludCksIGludCgqZnBhcnNlKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICosIHNpemVfdCksIGludCgqZnBvc3RfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCBpbnQpLCBpbnQoKmZidWlsZCkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqLCBzaXplX3QgKiksIGludCgqZnJidWlsZCkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIHVfY2hhciAqKiwgc2l6ZV90ICosIHNpemVfdCAqKSwgaW50KCpmY2hlY2spKHVfY2hhciAqLCBzaXplX3QpKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX2VuZ2luZUlEX3Byb2JlXGZQIChzdHJ1Y3QgXGZCc2Vzc2lvbl9saXN0XGZQICpzbHAsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqaW5fc2Vzc2lvbikiCi0uYnIKLS5SSSAiXGZJcHJvYmUgZm9yIHBlZXIgZW5naW5lSUQgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJzbm1wX2FkZFxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICppbl9zZXNzaW9uLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqdHJhbnNwb3J0LCBpbnQoKmZwcmVfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIGludCksIGludCgqZnBvc3RfcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCBpbnQpKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJzbm1wX2FkZF9mdWxsXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKmluX3Nlc3Npb24sIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0cmFuc3BvcnQsIGludCgqZnByZV9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgaW50KSwgaW50KCpmcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiwgc2l6ZV90KSwgaW50KCpmcG9zdF9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIGludCksIGludCgqZmJ1aWxkKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICosIHNpemVfdCAqKSwgaW50KCpmcmJ1aWxkKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICoqLCBzaXplX3QgKiwgc2l6ZV90ICopLCBpbnQoKmZjaGVjaykodV9jaGFyICosIHNpemVfdCksIFxmQm5ldHNubXBfcGR1XGZQICooKmZjcmVhdGVfcGR1KShcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIHNpemVfdCkpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJzbm1wX3Nlc3NfYWRkX2V4XGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKmluX3Nlc3Npb24sIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0cmFuc3BvcnQsIGludCgqZnByZV9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgaW50KSwgaW50KCpmcGFyc2UpKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqLCBcZkJuZXRzbm1wX3BkdVxmUCAqLCB1X2NoYXIgKiwgc2l6ZV90KSwgaW50KCpmcG9zdF9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIGludCksIGludCgqZmJ1aWxkKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICosIHNpemVfdCAqKSwgaW50KCpmcmJ1aWxkKShcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgdV9jaGFyICoqLCBzaXplX3QgKiwgc2l6ZV90ICopLCBpbnQoKmZjaGVjaykodV9jaGFyICosIHNpemVfdCksIFxmQm5ldHNubXBfcGR1XGZQICooKmZjcmVhdGVfcGR1KShcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqLCB2b2lkICosIHNpemVfdCkpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJzbm1wX3Nlc3NfYWRkXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKmluX3Nlc3Npb24sIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICp0cmFuc3BvcnQsIGludCgqZnByZV9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfdHJhbnNwb3J0XGZQICosIHZvaWQgKiwgaW50KSwgaW50KCpmcG9zdF9wYXJzZSkoXGZCbmV0c25tcF9zZXNzaW9uXGZQICosIFxmQm5ldHNubXBfcGR1XGZQICosIGludCkpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJzbm1wX3Nlc3Nfb3BlblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpwc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2Vzc19jbG9zZVxmUCAodm9pZCAqc2Vzc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2Nsb3NlXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2Nsb3NlX3Nlc3Npb25zXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX2hlYWRlcl9yZWFsbG9jX3JidWlsZFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfc2NvcGVkUERVX2hlYWRlcl9yZWFsbG9jX3JidWlsZFxmUCAodV9jaGFyICoqcGt0LCBzaXplX3QgKnBrdF9sZW4sIHNpemVfdCAqb2Zmc2V0LCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBzaXplX3QgYm9keV9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfcGFja2V0X3JlYWxsb2NfcmJ1aWxkXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdV9jaGFyICpwZHVfZGF0YSwgc2l6ZV90IHBkdV9kYXRhX2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXB2M19wYWNrZXRfYnVpbGRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdV9jaGFyICpwYWNrZXQsIHNpemVfdCAqb3V0X2xlbmd0aCwgdV9jaGFyICpwZHVfZGF0YSwgc2l6ZV90IHBkdV9kYXRhX2xlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCc25tcF9wZHVfYnVpbGRcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHVfY2hhciAqY3AsIHNpemVfdCAqb3V0X2xlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfcGR1X3JlYWxsb2NfcmJ1aWxkXGZQICh1X2NoYXIgKipwa3QsIHNpemVfdCAqcGt0X2xlbiwgc2l6ZV90ICpvZmZzZXQsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfcGFyc2VcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHVfY2hhciAqZGF0YSwgc2l6ZV90ICpsZW5ndGgsIHVfY2hhciAqKmFmdGVyX2hlYWRlciwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcHYzX21ha2VfcmVwb3J0XGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBpbnQgZXJyb3IpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wdjNfZ2V0X3JlcG9ydF90eXBlXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9wZHVfcGFyc2VcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHVfY2hhciAqZGF0YSwgc2l6ZV90ICpsZW5ndGgpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQnNubXB2M19zY29wZWRQRFVfcGFyc2VcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIHVfY2hhciAqY3AsIHNpemVfdCAqbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zZW5kXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Nlc3Nfc2VuZFxmUCAodm9pZCAqc2Vzc3AsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2FzeW5jX3NlbmRcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbiwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgc25tcF9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqY2JfZGF0YSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2Vzc19hc3luY19zZW5kXGZQICh2b2lkICpzZXNzcCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgc25tcF9jYWxsYmFjayBjYWxsYmFjaywgdm9pZCAqY2JfZGF0YSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2ZyZWVfdmFyXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2ZyZWVfdmFyYmluZFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9mcmVlX3BkdVxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJzbm1wX2NyZWF0ZV9zZXNzX3BkdVxmUCAoXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnRyYW5zcG9ydCwgdm9pZCAqb3BhcXVlLCBzaXplX3Qgb2xlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3JlYWRcZlAgKGZkX3NldCAqZmRzZXQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJfc2Vzc19yZWFkXGZQICh2b2lkICpzZXNzcCwgZmRfc2V0ICpmZHNldCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2Vzc19yZWFkXGZQICh2b2lkICpzZXNzcCwgZmRfc2V0ICpmZHNldCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2VsZWN0X2luZm9cZlAgKGludCAqbnVtZmRzLCBmZF9zZXQgKmZkc2V0LCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2Vzc19zZWxlY3RfaW5mb1xmUCAodm9pZCAqc2Vzc3AsIGludCAqbnVtZmRzLCBmZF9zZXQgKmZkc2V0LCBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3RpbWVvdXRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9zZXNzX3RpbWVvdXRcZlAgKHZvaWQgKnNlc3NwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9vaWRfbmNvbXBhcmVcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMiwgc2l6ZV90IG1heF9sZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX29pZF9jb21wYXJlXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLmJyCi0uUkkgIlxmSWxleGljb2dyYXBoaWNhbCBjb21wYXJlIHR3byBvYmplY3QgaWRlbnRpZmllcnMuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkX2NvbXBhcmVfbGxcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMiwgc2l6ZV90ICpvZmZwdCkiCi0uYnIKLS5SSSAiXGZJbGV4aWNvZ3JhcGhpY2FsIGNvbXBhcmUgdHdvIG9iamVjdCBpZGVudGlmaWVycyBhbmQgcmV0dXJuIHRoZSBwb2ludCB3aGVyZSB0aGV5IGRpZmZlciBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX29pZHRyZWVfY29tcGFyZVxmUCAoY29uc3Qgb2lkICppbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5icgotLlJJICJcZklDb21wYXJlcyAyIE9JRHMgdG8gZGV0ZXJtaW5lIGlmIHRoZXkgYXJlIGVxdWFsIHVwIHVudGlsIHRoZSBzaG9ydGVzdCBsZW5ndGguIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfb2lkc3VidHJlZV9jb21wYXJlXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZF9lcXVhbHNcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uYnIKLS5SSSAiXGZJQ29tcGFyZXMgMiBPSURzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBleGFjdGx5IGVxdWFsLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZF9pc19zdWJ0cmVlXGZQIChjb25zdCBvaWQgKmluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICppbl9uYW1lMiwgc2l6ZV90IGxlbjIpIgotLmJyCi0uUkkgIlxmSUlkZW50aWNhbCB0byBuZXRzbm1wX29pZF9lcXVhbHMsIGV4Y2VwdCBvbmx5IHRoZSBsZW5ndGggdXAgdG8gbGVuMSBpcyBjb21wYXJlZC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWRfZmluZF9wcmVmaXhcZlAgKGNvbnN0IG9pZCAqaW5fbmFtZTEsIHNpemVfdCBsZW4xLCBjb25zdCBvaWQgKmluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uYnIKLS5SSSAiXGZJR2l2ZW4gdHdvIE9JRHMsIGRldGVybWluZSB0aGUgY29tbW9uIHByZWZpeCB0byB0aGVtIGJvdGguIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCc25tcF9wZHVfYWRkX3ZhcmlhYmxlXGZQIChcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBjb25zdCBvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbmd0aCwgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqdmFsdWUsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnNubXBfdmFybGlzdF9hZGRfdmFyaWFibGVcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKnZhcmxpc3QsIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICp2YWx1ZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfYWRkX3ZhclxmUCAoXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbmFtZV9sZW5ndGgsIGNoYXIgdHlwZSwgY29uc3QgY2hhciAqdmFsdWUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJzbm1wX3Nlc3NfcG9pbnRlclxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJzbm1wX3Nlc3Nfc2Vzc2lvblxmUCAodm9pZCAqc2Vzc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIFxmQnNubXBfc2Vzc19zZXNzaW9uX2xvb2t1cFxmUCAodm9pZCAqc2Vzc3ApIgotLmJyCi0uUkkgIlxmSUxvb2sgdXAgYSBzZXNzaW9uIHRoYXQgYWxyZWFkeSBtYXkgaGF2ZSBiZWVuIGNsb3NlZC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RyYW5zcG9ydFxmUCAqIFxmQnNubXBfc2Vzc190cmFuc3BvcnRcZlAgKHZvaWQgKnNlc3NwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfc2Vzc190cmFuc3BvcnRfc2V0XGZQICh2b2lkICpzcCwgXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnQpIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCAqIFxmQnNubXBfZHVwbGljYXRlX29iamlkXGZQIChjb25zdCBvaWQgKm9ialRvQ29weSwgc2l6ZV90IG9ialRvQ29weUxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidV9pbnQgXGZCc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljXGZQIChpbnQgd2hpY2gpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfaW50IFxmQnNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieVxmUCAoaW50IHdoaWNoLCBpbnQgY291bnQpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfaW50IFxmQnNubXBfZ2V0X3N0YXRpc3RpY1xmUCAoaW50IHdoaWNoKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfaW5pdF9zdGF0aXN0aWNzXGZQICh2b2lkKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm1vZHVsZV9pbml0X2xpc3RcZlAgKiBcZkJpbml0bGlzdFxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm1vZHVsZV9pbml0X2xpc3RcZlAgKiBcZkJub2luaXRsaXN0XGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiBcZkJzdWJ0cmVlc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJsb25nIFxmQmxvbmdfcmV0dXJuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJyZXR1cm5fYnVmXGZQIFsyNThdIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCB0aW1ldmFsIFxmQnN0YXJ0dGltZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCY2FsbGJhY2tfbWFzdGVyX251bVxmUCA9IC0xIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJudWxsT2lkXGZQIFtdID0geyAwLCAwIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm51bGxPaWRMZW5cZlAgPSBzaXplb2YobnVsbE9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnNlc3Npb25fbGlzdFxmUCAqIFxmQlNlc3Npb25zXGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9lcnJub1xmUCA9IDAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGVmaW5lIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIiNkZWZpbmUgdGltZXJjbXAodHZwLCB1dnAsIGNtcCkiXGZCVmFsdWU6XGZQCi0uUFAKLS5uZgotLyogQ1NUWUxFRCAqLyBcCi0gICAgICAgICgodHZwKS0+dHZfc2VjIGNtcCAodXZwKS0+dHZfc2VjIHx8IFwKLSAgICAgICAgKCh0dnApLT50dl9zZWMgPT0gKHV2cCktPnR2X3NlYyAmJiBcCi0gICAgICAgIC8qIENTVFlMRUQgKi8gXAotICAgICAgICAodHZwKS0+dHZfdXNlYyBjbXAgKHV2cCktPnR2X3VzZWMpKQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDggb2YgZmlsZSBzbm1wX2FwaS5jLgotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgX3Nlc3NfcmVhZCAodm9pZCAqIHNlc3NwLCBmZF9zZXQgKiBmZHNldCkiCi0uUFAKLVhYWC1ya3M6IHdoeSBubyBTTk1QX0ZSRUUoaXNwLT5wYWNrZXQpOyA/PwotLlBQCi1YWFgtcmtzOiB3aHkgbm8gU05NUF9GUkVFKGlzcC0+cGFja2V0KTsgPz8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NDQ4IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IGluaXRfYWdlbnQgKGNvbnN0IGNoYXIgKiBhcHApIgotLlBQCi1Jbml0aWFsaXplIHRoZSBhZ2VudC4gQ2FsbHMgaW50byBpbml0X2FnZW50X3JlYWRfY29uZmlnIHRvIHNldCB0aGEgYXBwJ3MgY29uZmlndXJhdGlvbiBmaWxlIGluIHRoZSBhcHByb3ByaWF0ZSBkZWZhdWx0IHN0b3JhZ2Ugc3BhY2UsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUuIE5lZWQgdG8gY2FsbCBpbml0X2FnZW50IGJlZm9yZSBjYWxsaW5nIGluaXRfc25tcC4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklhcHBcZlAgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0byBiZSByZWFkIGluLCBnZXRzIHN0b3JlZCBpbiBkZWZhdWx0IHN0b3JhZ2UKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgbm9uLXplcm8gb24gZmFpbHVyZSBhbmQgemVybyBvbiBzdWNjZXNzLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQmluaXRfc25tcFxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3MCBvZiBmaWxlIHNubXBfdmFycy5jLgotLlNTICJ2b2lkIGluaXRfc25tcCAoY29uc3QgY2hhciAqIHR5cGUpIgotLlBQCi1DYWxscyB0aGUgZnVuY3Rpb25zIHRvIGRvIGNvbmZpZyBmaWxlIGxvYWRpbmcgYW5kIG1pYiBcZkJtb2R1bGVcZlAgcGFyc2luZyBpbiB0aGUgY29ycmVjdCBvcmRlci4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlXGZQIGxhYmVsIGZvciB0aGUgY29uZmlnIGZpbGUgJ3R5cGUnCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCaW5pdF9hZ2VudFxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc4NyBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX29pZF9jb21wYXJlX2xsIChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMiwgc2l6ZV90ICogb2ZmcHQpIgotLlBQCi1sZXhpY29ncmFwaGljYWwgY29tcGFyZSB0d28gb2JqZWN0IGlkZW50aWZpZXJzIGFuZCByZXR1cm4gdGhlIHBvaW50IHdoZXJlIHRoZXkgZGlmZmVyIENhdXRpb246IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvZnRlbiBieSBjb21tYW5kIHJlc3BvbmRlciBhcHBsaWNhdGlvbnMgKGllLCBhZ2VudCkuCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotLTEgaWYgbmFtZTEgPCBuYW1lMiwgMCBpZiBuYW1lMSA9IG5hbWUyLCAxIGlmIG5hbWUxID4gbmFtZTIgYW5kIG9mZnB0ID0gbGVuIHdoZXJlIG5hbWUxICE9IG5hbWUyIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjM4NiBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX29pZF9lcXVhbHMgKGNvbnN0IG9pZCAqIGluX25hbWUxLCBzaXplX3QgbGVuMSwgY29uc3Qgb2lkICogaW5fbmFtZTIsIHNpemVfdCBsZW4yKSIKLS5QUAotQ29tcGFyZXMgMiBPSURzIHRvIGRldGVybWluZSBpZiB0aGV5IGFyZSBleGFjdGx5IGVxdWFsLiBUaGlzIHNob3VsZCBiZSBmYXN0ZXIgdGhhbiBkb2luZyBhIHNubXBfb2lkX2NvbXBhcmUgZm9yIGRpZmZlcmVudCBsZW5ndGggT0lEcywgc2luY2UgdGhlIGxlbmd0aCBpcyBjaGVja2VkIGZpcnN0IGFuZCBpZiAhPSByZXR1cm5zIGltbWVkaWF0ZWx5LiBNaWdodCBiZSB2ZXJ5IHNsaWdobHkgZmFzdGVyIGlmIGxlbmd0aHMgYXJlID09LiAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklpbl9uYW1lMVxmUCBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9pZC4gCi0uYnIKLVxmSWxlbjFcZlAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBPSUQgKGluIHNlZ21lbnRzLCBub3QgYnl0ZXMpIAotLmJyCi1cZklpbl9uYW1lMlxmUCBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBvaWQuIAotLmJyCi1cZklsZW4yXGZQIGxlbmd0aCBvZiB0aGUgc2Vjb25kIE9JRCAoaW4gc2VnbWVudHMsIG5vdCBieXRlcykgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIGlmIHRoZXkgYXJlIGVxdWFsLCAxIGlmIHRoZXkgYXJlIG5vdC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NDY3IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkX2ZpbmRfcHJlZml4IChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uUFAKLUdpdmVuIHR3byBPSURzLCBkZXRlcm1pbmUgdGhlIGNvbW1vbiBwcmVmaXggdG8gdGhlbSBib3RoLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWluX25hbWUxXGZQIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2lkLiAKLS5icgotXGZJbGVuMVxmUCBMZW5ndGggb2YgdGhlIGZpcnN0IG9pZC4gCi0uYnIKLVxmSWluX25hbWUyXGZQIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIG9pZC4gCi0uYnIKLVxmSWxlbjJcZlAgTGVuZ3RoIG9mIHRoZSBzZWNvbmQgb2lkLiAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLWxlbmd0aCBvZiBjb21tb24gcHJlZml4IDAgaWYgbm8gY29tbW9uIHByZWZpeCwgLTEgb24gZXJyb3IuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjUzMSBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBuZXRzbm1wX29pZF9pc19zdWJ0cmVlIChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uUFAKLUlkZW50aWNhbCB0byBuZXRzbm1wX29pZF9lcXVhbHMsIGV4Y2VwdCBvbmx5IHRoZSBsZW5ndGggdXAgdG8gbGVuMSBpcyBjb21wYXJlZC4gRnVuY3Rpb25hbGx5LCB0aGlzIGRldGVybWluZXMgaWYgaW5fbmFtZTIgaXMgZXF1YWwgb3IgYSBzdWJ0cmVlIG9mIGluX25hbWUxIAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWluX25hbWUxXGZQIEEgcG9pbnRlciB0byB0aGUgZmlyc3Qgb2lkLiAKLS5icgotXGZJbGVuMVxmUCBsZW5ndGggb2YgdGhlIGZpcnN0IE9JRCAoaW4gc2VnbWVudHMsIG5vdCBieXRlcykgCi0uYnIKLVxmSWluX25hbWUyXGZQIEEgcG9pbnRlciB0byB0aGUgc2Vjb25kIG9pZC4gCi0uYnIKLVxmSWxlbjJcZlAgbGVuZ3RoIG9mIHRoZSBzZWNvbmQgT0lEIChpbiBzZWdtZW50cywgbm90IGJ5dGVzKSAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTAgaWYgb25lIGlzIGEgY29tbW9uIHByZWZpeCBvZiB0aGUgb3RoZXIuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjUxMCBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgImludCBzbm1wX29pZF9jb21wYXJlIChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uUFAKLWxleGljb2dyYXBoaWNhbCBjb21wYXJlIHR3byBvYmplY3QgaWRlbnRpZmllcnMuIENhdXRpb246IHRoaXMgbWV0aG9kIGlzIGNhbGxlZCBvZnRlbiBieSBjb21tYW5kIHJlc3BvbmRlciBhcHBsaWNhdGlvbnMgKGllLCBhZ2VudCkuCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotLTEgaWYgbmFtZTEgPCBuYW1lMiwgMCBpZiBuYW1lMSA9IG5hbWUyLCAxIGlmIG5hbWUxID4gbmFtZTIgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MzM3IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IHNubXBfb2lkdHJlZV9jb21wYXJlIChjb25zdCBvaWQgKiBpbl9uYW1lMSwgc2l6ZV90IGxlbjEsIGNvbnN0IG9pZCAqIGluX25hbWUyLCBzaXplX3QgbGVuMikiCi0uUFAKLUNvbXBhcmVzIDIgT0lEcyB0byBkZXRlcm1pbmUgaWYgdGhleSBhcmUgZXF1YWwgdXAgdW50aWwgdGhlIHNob3J0ZXN0IGxlbmd0aC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklpbl9uYW1lMVxmUCBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9pZC4gCi0uYnIKLVxmSWxlbjFcZlAgbGVuZ3RoIG9mIHRoZSBmaXJzdCBPSUQgKGluIHNlZ21lbnRzLCBub3QgYnl0ZXMpIAotLmJyCi1cZklpbl9uYW1lMlxmUCBBIHBvaW50ZXIgdG8gdGhlIHNlY29uZCBvaWQuIAotLmJyCi1cZklsZW4yXGZQIGxlbmd0aCBvZiB0aGUgc2Vjb25kIE9JRCAoaW4gc2VnbWVudHMsIG5vdCBieXRlcykgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIGlmIHRoZXkgYXJlIGVxdWFsLCAxIGlmIGluX25hbWUxIGlzID4gaW5fbmFtZTIsIG9yIC0xIGlmIDwuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjQzOSBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgIlxmQm5ldHNubXBfc2Vzc2lvblxmUCogc25tcF9zZXNzX3Nlc3Npb25fbG9va3VwICh2b2lkICogc2Vzc3ApIgotLlBQCi1Mb29rIHVwIGEgc2Vzc2lvbiB0aGF0IGFscmVhZHkgbWF5IGhhdmUgYmVlbiBjbG9zZWQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJc2Vzc3BcZlAgT3BhcXVlIHBvaW50ZXIsIHJldHVybmVkIGJ5IHNubXBfc2Vzc19vcGVuLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUG9pbnRlciB0byBzZXNzaW9uIHVwb24gc3VjY2VzcyBvciBOVUxMIHVwb24gZmFpbHVyZS4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1zbm1wX3Nlc3Nfc2Vzc2lvbigpIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzE5NyBvZiBmaWxlIHNubXBfYXBpLmMuCi0uU1MgInZvaWQgc25tcF9zaHV0ZG93biAoY29uc3QgY2hhciAqIHR5cGUpIgotLlBQCi1TaHV0cyBkb3duIHRoZSBhcHBsaWNhdGlvbiwgc2F2aW5nIGFueSBuZWVkZWQgcGVyc2lzdGVudCBzdG9yYWdlLCBhbmQgYXBwcm9wcmlhdGUgY2xlYW4gdXAuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZVxmUCBMYWJlbCBmb3IgdGhlIGNvbmZpZyBmaWxlICd0eXBlJyB1c2VkCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci12b2lkIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUzIG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TUyAiaW50IHNubXB2M19lbmdpbmVJRF9wcm9iZSAoc3RydWN0IFxmQnNlc3Npb25fbGlzdFxmUCAqIHNscCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICogaW5fc2Vzc2lvbikiCi0uUFAKLXByb2JlIGZvciBwZWVyIGVuZ2luZUlEIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJc2xwXGZQIHNlc3Npb24gbGlzdCBwb2ludGVyLiAKLS5icgotXGZJaW5fc2Vzc2lvblxmUCBzZXNzaW9uIGZvciBlcnJvcnMKLS5SRQotLlBQCi1cZkJOb3RlOlxmUAotLlJTIDQKLS5JUCAiXChidSIgMgotY2FsbGVkIGJ5IF9zZXNzX29wZW4oKSwgc25tcF9zZXNzX2FkZF9leCgpCi0uSVAgIlwoYnUiIDIKLWluX3Nlc3Npb24gaXMgdGhlIHVzZXIgc3VwcGxpZWQgc2Vzc2lvbiBwcm92aWRlZCB0byB0aG9zZSBmdW5jdGlvbnMuCi0uSVAgIlwoYnUiIDIKLXRoZSBmaXJzdCBzZXNzaW9uIGluIHNscCBzaG91bGQgdGhlIGludGVybmFsIGFsbG9jYXRlZCBjb3B5IG9mIGluX3Nlc3Npb24KLS5QUAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMCA6IGVycm9yIAotLlBQCi0xIDogb2sgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjc4IG9mIGZpbGUgc25tcF9hcGkuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9taWJfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTFkYThmCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfbWliX2FwaS4zLmRlZgpAQCAtMCwwICsxLDMwOSBAQAorLlRIIE5FVFNOTVBfTUlCX0FQSSAzICIxMyBBdWcgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCithZGRfbWliZGlyLAorbmV0c25tcF9pbml0X21pYiwKK3NodXRkb3duX21pYiwKK25ldHNubXBfcmVhZF9tb2R1bGUsCityZWFkX21pYiwKK3JlYWRfYWxsX21pYnMsCithZGRfbW9kdWxlX3JlcGxhY2VtZW50LAorc25tcF9zZXRfbWliX2Vycm9ycywKK3NubXBfc2V0X21pYl93YXJuaW5ncywKK3NubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zLAorcmVhZF9vYmppZCwKK3NubXBfcGFyc2Vfb2lkLAorZ2V0X21vZHVsZV9ub2RlLAorcHJpbnRfbWliLAorcHJpbnRfb2JqaWQsCitmcHJpbnRfb2JqaWQsCitzbnByaW50X29iamlkLAorcHJpbnRfZGVzY3JpcHRpb24sCitmcHJpbnRfZGVzY3JpcHRpb24sCitzbnByaW50X2Rlc2NyaXB0aW9uIC0gbmV0c25tcF9taWJfYXBpIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0XC1zbm1wL21pYl9hcGkuaD4KKy5QUAorLlNTIEluaXRpYWxpc2F0aW9uIGFuZCBTaHV0ZG93bgorLkJJICJpbnQgYWRkX21pYmRpcihjb25zdCBjaGFyICoiICJkaXJuYW1lIiApOworLlBQCisuQiAidm9pZCBuZXRzbm1wX2luaXRfbWliKHZvaWQpOworLlwiLmJyCisuXCIuQkkgInZvaWQgaW5pdF9taWIodm9pZCk7IiAgIiAgICAgICAgICAgICAgICAoZGVwcmVjYXRlZCkiCisuXCIuYnIKKy5cIi5CSSAidm9pZCBpbml0X21pYl9pbnRlcm5hbHModm9pZCk7IiAgIiAgICAgICAgKGRlcHJlY2F0ZWQpIgorLmJyCisuQiAidm9pZCBzaHV0ZG93bl9taWIodm9pZCk7CisuU1MgUmVhZGluZyBhbmQgUGFyc2luZyBNSUJzCisuQkkgInN0cnVjdCB0cmVlICpuZXRzbm1wX3JlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKiIgIm5hbWUiICk7CisuYnIKKy5cIi5CSSAic3RydWN0IHRyZWUgKnJlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKiIgIm5hbWUiICIpOyIgICIgICAgICAgIChkZXByZWNhdGVkKSIKKy5cIi5QUAorLkJJICJzdHJ1Y3QgdHJlZSAqcmVhZF9taWIoY29uc3QgY2hhciAqIiAiZmlsZW5hbWUiICk7CisuYnIKKy5CICJzdHJ1Y3QgdHJlZSAqcmVhZF9hbGxfbWlicyh2b2lkKTsKKy5QUAorLkJJICJpbnQgYWRkX21vZHVsZV9yZXBsYWNlbWVudChjb25zdCBjaGFyICoiICJvbGRfbW9kdWxlIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiICJuZXdfbW9kdWxlIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiICJ0YWciICIsIGludCAiICJsZW4iICk7CisuUFAKKy5CSSAidm9pZCBzbm1wX3NldF9taWJfd2FybmluZ3MoaW50ICIgbGV2ZWwgKTsKKy5icgorLkJJICJ2b2lkIHNubXBfc2V0X21pYl9lcnJvcnMoaW50ICIgbGV2ZWwgKTsKKy5icgorLkJJICJ2b2lkIHNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zKGludCAiIHNhdmUgIik7IgorLlNTIFNlYXJjaGluZyB0aGUgTUlCIFRyZWUKKy5QUAorLkJJICJpbnQgIHJlYWRfb2JqaWQoY29uc3QgY2hhciAqIiAiaW5wdXQiICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgKiIgIm9iamlkbGVuIiApOworLmJyCisuQkkgIm9pZCAqc25tcF9wYXJzZV9vaWQoY29uc3QgY2hhciAqIiAiaW5wdXQiICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICBvaWQgKiIgIm9iamlkIiAiLCBzaXplX3QgKiIgIm9iamlkbGVuIiApOworLmJyCisuQkkgImludCAgZ2V0X21vZHVsZV9ub2RlKGNvbnN0IGNoYXIgKiIgIm5hbWUiICIsIGNvbnN0IGNoYXIgKiIgIm1vZHVsZSIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgIG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAqIiAib2JqaWRsZW4iICk7CisuU1MgT3V0cHV0CisuUFAKKy5CSSAidm9pZCAgcHJpbnRfbWliKEZJTEUgKiIgImZwIiApOworLlBQCisuQkkgInZvaWQgIHByaW50X29iamlkKGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiApOworLmJyCisuQkkgInZvaWQgZnByaW50X29iamlkKEZJTEUgKiIgZnAgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIpOyIKKy5icgorLkJJICJpbnQgc25wcmludF9vYmppZChjaGFyICoiIGJ1ZiAiLCBzaXplX3QgIiAibGVuIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIik7IgorLlBQCisuQkkgInZvaWQgIHByaW50X2Rlc2NyaXB0aW9uKGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCBpbnQgIiB3aWR0aCApOworLmJyCisuQkkgInZvaWQgZnByaW50X2Rlc2NyaXB0aW9uKEZJTEUgKiIgZnAgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGludCAiIHdpZHRoICk7CisuYnIKKy5CSSAiaW50IHNucHJpbnRfZGVzY3JpcHRpb24oY2hhciAqIiBidWYgIiwgc2l6ZV90ICIgImxlbiIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIGludCAiIHdpZHRoICk7CisuYnIKKy5QUAorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCBNSUIgbW9kdWxlcyBmYWxsIGludG8gZm91ciBncm91cHMgLSB0aG9zZQorZGVhbGluZyB3aXRoIGluaXRpYWxpc2F0aW9uIGFuZCBzaHV0ZG93biwgd2l0aCByZWFkaW5nIGluIGFuZCBwYXJzaW5nCitNSUIgZmlsZXMsIHdpdGggc2VhcmNoaW5nIHRoZSBNSUIgdHJlZSwgYW5kIG91dHB1dCByb3V0aW5lcy4KKy5TUyBJbml0aWFsaXNhdGlvbiBhbmQgU2h1dGRvd24KKy5QUAorLkIgYWRkX21pYmRpcgoraXMgdXNlZCB0byBhZGQgdGhlIHNwZWNpZmllZCBkaXJlY3RvcnkgdG8gdGhlIHBhdGggb2YgbG9jYXRpb25zIHdoaWNoIGFyZQorc2VhcmNoZWQgZm9yIGZpbGVzIGNvbnRhaW5pbmcgTUlCIG1vZHVsZXMuCitOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBhY3R1YWxseSBsb2FkIHRoZSBNSUIgbW9kdWxlcyBsb2NhdGVkCitpbiB0aGF0IGRpcmVjdG9yeSwgYnV0IGlzIHNpbXBseSBhbiBpbml0aWFsaXNhdGlvbiBzdGVwIHRvIG1ha2UKK3RoZW0gYXZhaWxhYmxlIHRvCisuQlIgbmV0c25tcF9yZWFkX21vZHVsZSAuCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSBjb3VudCBvZiBmaWxlcyBmb3VuZCBpbiB0aGUgZGlyZWN0b3J5LCBvciBhIFwtMQoraWYgdGhlcmUgaXMgYW4gZXJyb3IuICAKK0l0IHNob3VsZCBiZSBjYWxsZWQgXGZJYmVmb3JlXGZQIGludm9raW5nIFxmQm5ldHNubXBfaW5pdF9taWJcZlAuCisuUFAKKy5cIi5CIGluaXRfbWliX2ludGVybmFscworLlwic2V0cyB1cCB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcywgcHJlcGFyYXRvcnkgdG8gcmVhZGluZyBpbiBNSUIKKy5cIm1vZHVsZXMuICBJdCBzaG91bGQgYmUgY2FsbGVkIFxmSWFmdGVyXGZQIGFsbCBjYWxscyB0bworLlwiLkJSIGFkZF9taWJkaXIgLAorLlwiYW5kIGJlZm9yZSBhbnkgY2FsbHMgdG8KKy5cIi5CUiBuZXRzbm1wX3JlYWRfbW9kdWxlIC4KKy5cIi5QUAorLkIgbmV0c25tcF9pbml0X21pYgorY29uZmlndXJlcyB0aGUgTUlCIGRpcmVjdG9yeSBzZWFyY2ggcGF0aCAodXNpbmcKKy5CIGFkZF9taWJkaXIKKyksIHNldHMgdXAgdGhlIGludGVybmFsIE1JQiBmcmFtZXdvcmssCithbmQgdGhlbiBsb2FkcyB0aGUgYXBwcm9wcmlhdGUgTUlCIG1vZHVsZXMgKHVzaW5nCisuQlIgbmV0c25tcF9yZWFkX21vZHVsZSAiIGFuZCAiIHJlYWRfbWliICIpLiIKK1NlZSB0aGUgRU5WSVJPTk1FTlRBTCBWQVJJQUJMRVMgc2VjdGlvbiBmb3IgZGV0YWlscy4KKy5icgorSXQgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyCityb3V0aW5lIHRoYXQgbWFuaXB1bGF0ZXMgb3IgYWNjZXNzZXMgdGhlIE1JQiB0cmVlCisoYnV0IGFmdGVyIGFueSBhZGRpdGlvbmFsCisuQiBhZGRfbWliZGlyCitjYWxscykuCisuUFAKKy5CIHNodXRkb3duX21pYgord2lsbCBjbGVhciB0aGUgaW5mb3JtYXRpb24gdGhhdCB3YXMgZ2F0aGVyZWQgYnkgCisuQlIgbmV0c25tcF9yZWFkX21vZHVsZSAiLCAiIGFkZF9taWJkaXIgIiBhbmQgIiBhZGRfbW9kdWxlX3JlcGxhY2VtZW50IC4KK0l0IGlzIHN0cm9uZ2x5IHJlY29tbWVuZGVkIHRoYXQgb25lIGRvZXMgbm90IGludm9rZQorLkJSIHNodXRkb3duX21pYgord2hpbGUgdGhlcmUgYXJlIFNOTVAgc2Vzc2lvbnMgYmVpbmcgYWN0aXZlbHkgbWFuYWdlZC4KKy5TUyBSZWFkaW5nIGFuZCBQYXJzaW5nIE1JQnMKKy5QUAorLkIgbmV0c25tcF9yZWFkX21vZHVsZQordGFrZXMgdGhlIG5hbWUgb2YgYSBNSUIgbW9kdWxlICh3aGljaCBuZWVkIG5vdCBiZSB0aGUgc2FtZSBhcyB0aGUKK25hbWUgb2YgdGhlIGZpbGUgdGhhdCBjb250YWlucyB0aGUgbW9kdWxlKSwgbG9jYXRlcyB0aGlzIHdpdGhpbiB0aGUKK2NvbmZpZ3VyZWQgbGlzdCBvZiBNSUIgZGlyZWN0b3JpZXMsIGFuZCBsb2FkcyB0aGUgZGVmaW5pdGlvbnMgZnJvbQordGhlIG1vZHVsZSBpbnRvIHRoZSBhY3RpdmUgTUlCIHRyZWUuCitJdCBhbHNvIGxvYWRzIGFueSBNSUIgbW9kdWxlcyBsaXN0ZWQgaW4gdGhlIElNUE9SVFMgY2xhdXNlIG9mIHRoaXMgbW9kdWxlLgorLlBQCisuQiByZWFkX21pYgoraXMgc2ltaWxhciwgYnV0IHRha2VzIHRoZSBuYW1lIG9mIHRoZSBmaWxlIGNvbnRhaW5pbmcgdGhlIE1JQiBtb2R1bGUuCitOb3RlIHRoYXQgdGhpcyBmaWxlIG5lZWQgbm90IGJlIGxvY2F0ZWQgd2l0aGluIHRoZSBNSUIgZGlyZWN0b3J5CitzZWFyY2ggbGlzdCAoYWx0aG91Z2ggYW55IG1vZHVsZXMgbGlzdGVkIGluIHRoZSBJTVBPUlRTIGNsYXVzZSBkbykuCisuUFAKKy5CIHJlYWRfYWxsX21pYnMKK3dpbGwgcmVhZCBpbiBhbGwgdGhlIE1JQiBtb2R1bGVzIGZvdW5kIG9uIHRoZSBNSUIgZGlyZWN0b3J5IHNlYXJjaCBsaXN0LgorLlBQCitJbiBnZW5lcmFsIHRoZSBwYXJzZXIgaXMgc2lsZW50IGFib3V0IHdoYXQgc3RyYW5nZW5lc3NlcyBpdCBzZWVzIGluCit0aGUgTUlCIGZpbGVzLiBUbyBnZXQgd2FybmluZ3MgcmVwb3J0ZWQsIGNhbGwKKy5CIHNubXBfc2V0X21pYl93YXJuaW5ncword2l0aCBhCisuSSBsZXZlbAorb2YgMSAob3IgMiBmb3IgZXZlbiBtb3JlIHdhcm5pbmdzKS4KKy5QUAorLkIgYWRkX21vZHVsZV9yZXBsYWNlbWVudAorY2FuIGJlIHVzZWQgdG8gYWxsb3cgbmV3IE1JQiBtb2R1bGVzIHRvIG9ic29sZXRlIG9sZGVyIG9uZXMsIHdpdGhvdXQKK25lZWRpbmcgdG8gYW1lbmQgdGhlIElNUE9SVFMgY2xhdXNlcyBvZiBvdGhlciBtb2R1bGVzLiAgSXQgdGFrZXMgdGhlCituYW1lcyBvZiB0aGUgb2xkIGFuZCBuZXcgbW9kdWxlcywgdG9nZXRoZXIgd2l0aCBhbiBpbmRpY2F0aW9uIG9mIHdoaWNoCitwb3J0aW9ucyBvZiB0aGUgb2xkIG1vZHVsZSBhcmUgYWZmZWN0ZWQuCisuUlMKKy5UUwordGFiKCspOworbGIgbGIgbGIKK2wgIGwgIGwuCit0YWcgKyBsZW4gKyBsb2FkIHRoZSBuZXcgbW9kdWxlIHdoZW46CitOVUxMICsgMCArIGFsd2F5cyAodGhlIG9sZCBtb2R1bGUgaXMgYSBzdHJpY3Qgc3Vic2V0IG9mCisgKyArIHRoZSBuZXcpCituYW1lICsgMCArIGZvciB0aGUgZ2l2ZW4gdGFnIG9ubHkKK25hbWUgKyBub24tMCArIGZvciBhbnkgaWRlbnRpZmllciB3aXRoIHRoaXMgcHJlZml4CisuVEUKKy5SRQorSXQgY2FuIGFsc28gYmUgdXNlZCB0byBoYW5kbGUgZXJyb3JzIGluIHRoZSBtb2R1bGUgaWRlbnRpZmllcnMgdXNlZAoraW4gTUlCIElNUE9SVFMgY2xhdXNlcyAoc3VjaCBhcyByZWZlcnJpbmcgdG8KKy5JIFJGQzEyMTMKK2luc3RlYWQgb2YKKy5JUiBSRkMxMjEzXC1NSUIgKS4KKy5TUyBTZWFyY2hpbmcgdGhlIE1JQiBUcmVlCisuUFAKKy5CIHJlYWRfb2JqaWQKK3Rha2VzIGEgc3RyaW5nIGNvbnRhaW5pbmcgYSB0ZXh0dWFsIHZlcnNpb24gb2YgYW4gb2JqZWN0IGlkZW50aWZpZXIKKyhpbiBlaXRoZXIgbnVtZXJpYyBvciBkZXNjcmlwdG9yIGZvcm0pLCBhbmQgdHJhbnNmb3JtcyB0aGlzIGludG8gdGhlCitjb3JyZXNwb25kaW5nIGxpc3Qgb2Ygc3ViLWlkZW50aWZpZXJzLiAgVGhpcyBpcyByZXR1cm5lZCBpbiB0aGUKKy5JIG91dHB1dAorcGFyYW1ldGVyLCB3aXRoIHRoZSBudW1iZXIgb2Ygc3ViLWlkZW50aWZpZXJzIHJldHVybmVkIHZpYQorLklSIG91dF9sZW4gLgorV2hlbiBjYWxsZWQsIAorLkkgb3V0X2xlbgorbXVzdCBob2xkIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUKKy5JIG91dHB1dAorYXJyYXkuCitJZiBtdWx0aXBsZSBvYmplY3QgaWRlbnRpZmllcnMgYXJlIGJlaW5nIHByb2Nlc3NlZCwgdGhlbiB0aGlzCitsZW5ndGggc2hvdWxkIGJlIHJlc2V0IGJlZm9yZSBlYWNoIGNhbGwuCitUaGlzIGZ1bmN0aW9uIHJldHVybnMgYSB2YWx1ZSBvZiAxIGlmIGl0IHN1Y2NlZWRzIGluIHBhcnNpbmcgdGhlIHN0cmluZworYW5kIDAgb3RoZXJ3aXNlLgorLlBQCisuQiBzbm1wX3BhcnNlX29pZAoraXMgc2ltaWxhciwgYnV0IHJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBwYXJzZWQgT0lEIGJ1ZmZlciAob3IgTlVMTCkuCisuUFAKKy5CIGdldF9tb2R1bGVfbm9kZQordGFrZXMgYSBkZXNjcmlwdG9yIGFuZCB0aGUgbmFtZSBvZiBhIG1vZHVsZSwgYW5kIHJldHVybnMgdGhlIGNvcnJlc3BvbmRpbmcKK29pZCBsaXN0LCBpbiB0aGUgc2FtZSB3YXkgYXMKKy5CIHJlYWRfb2JqaWQKK2Fib3ZlLgorLmJyCitJZiB0aGUgbW9kdWxlIG5hbWUgaXMgc3BlY2lmaWVkIGFzICJBTlkiLCB0aGVuIHRoaXMgcm91dGluZSB3aWxsCithc3N1bWUgdGhhdCB0aGUgZGVzY3JpcHRvciBnaXZlbiBpcyB1bmlxdWUgd2l0aGluIHRoZSB0cmVlLCBhbmQgd2lsbAorcmV0dXJuIHRoZSBtYXRjaGluZyBlbnRyeS4gIElmIHRoaXMgYXNzdW1wdGlvbiBpcyBpbnZhbGlkLCB0aGVuIHRoZQorYmVoYXZpb3VyIGFzIHRvIHdoaWNoIHZhcmlhYmxlIGlzIHJldHVybmVkIGlzIGltcGxlbWVudGF0aW9uCitkZXBlbmRlbnQuCisuYnIKKy5TUyBPdXRwdXQKKy5CIHByaW50X21pYgord2lsbCBwcmludCBvdXQgYSByZXByZXNlbnRhdGlvbiBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBNSUIgdHJlZSB0bwordGhlIHNwZWNpZmllZCBGSUxFIHBvaW50ZXIuCisuUFAKKy5CIHByaW50X29iamlkCit3aWxsIHRha2UgYW4gb2JqZWN0IGlkZW50aWZpZXIgKGFzIHJldHVybmVkIGJ5CisuQlIgcmVhZF9vYmppZCAiLCAiIHNubXBfcGFyc2Vfb2lkICIgb3IgIiBnZXRfbW9kdWxlX25vZGUgIiksIgorYW5kIHByaW50cyB0aGUgdGV4dHVhbCBmb3JtIG9mIHRoaXMgT0lEIHRvIHRoZSBzdGFuZGFyZCBvdXRwdXQuCisuUFAKKy5CIGZwcmludF9vYmppZAorZG9lcyB0aGUgc2FtZSwgYnV0IHByaW50cyB0byB0aGUgRklMRSBwb2ludGVyIHNwZWNpZmllZCBieSB0aGUgaW5pdGlhbAorcGFyYW1ldGVyLgorLlBQCisuQiBzbnByaW50X29iamlkCitwcmludHMgdGhlIHNhbWUgaW5mb3JtYXRpb24gaW50byB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkKKy5JIGJ1Zgord2hpY2ggaXMgb2YgbGVuZ3RoCisuSVIgbGVuIC4KK0l0IHJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQsIG9yIFwtMSBpZiB0aGUKK2J1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwKKy5JIGJ1Zgord2lsbCB0eXBpY2FsbHkgY29udGFpbiBhIHRydW5jYXRlZCB2ZXJzaW9uIG9mIHRoZSBpbmZvcm1hdGlvbiAoYnV0Cit0aGlzIGJlaGF2aW91ciBpcyBub3QgZ3VhcmFudGVlZCkuCisuUFAKKy5CUiBwcmludF9kZXNjcmlwdGlvbiAsCisuQlIgZnByaW50X2Rlc2NyaXB0aW9uICwKK2FuZAorLkIgc25wcmludF9kZXNjcmlwdGlvbgordGFrZSBhIHNpbWlsYXIgb2JqZWN0IGlkZW50aWZpZXIKK2FuZCBwcmludCBvdXQgYSB2ZXJzaW9uIG9mIHRoZSBNSUIgZGVmaW5pdGlvbiBmb3IgdGhhdCBvYmplY3QsCit0b2dldGhlciB3aXRoIHRoZSBmdWxsIE9JRC4gVGhlCisuSSB3aWR0aAorYXJndW1lbnQgY29udHJvbHMgaG93IHRoZSBPSUQgaXMgbGF5ZWQgb3V0LgorLlBQCitCeSBkZWZhdWx0IHRoZSBwYXJzZXIgZG9lcyBub3Qgc2F2ZSBkZXNjcmlwdGlvbnMgc2luY2UgdGhleSBtYXkgYmUKK2h1Z2UuICBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHByaW50IHRoZW0sIGl0IGlzIG5lY2Vzc2FyeSB0byBpbnZva2UKKy5CSSBzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucygxKSBiZWZvcmUKK2NhbGxpbmcKKy5CIGluaXRfbWliCisob3Igc2ltaWxhcikuCisuU0ggIkVOVklST05NRU5UIFZBUklBQkxFUyIKKy5QUAorVGhlIG1haW4gdXNlIG9mIGVudmlyb25tZW50YWwgdmFyaWFibGVzIHdpdGggcmVzcGVjdCB0byB0aGVzZSBBUEkgY2FsbHMKK2lzIHRvIGNvbmZpZ3VyZSB3aGljaCBNSUIgbW9kdWxlcyBzaG91bGQgYmUgbG9hZGVkLCBhbmQgd2hlcmUgdGhleSBhcmUKK2xvY2F0ZWQuCisuVFAgMTAKK01JQkRJUlMKK0EgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUIgbW9kdWxlcy4KKy5icgorRGVmYXVsdDogREFUQURJUi9zbm1wL21pYnMKKy5icgorVXNlZCBieQorLkJSIGluaXRfbWliICIsICIgbmV0c25tcF9yZWFkX21vZHVsZSAiLCAiIHJlYWRfYWxsX21pYnMKK2FuZCAoaW1wbGljaXRseSkgYnkKKy5CUiByZWFkX21pYiAuCisuVFAgMTAKK01JQlMKK0EgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgTUlCIG1vZHVsZXMgdG8gbG9hZC4KKy5icgorVGhlIGRlZmF1bHQgbGlzdCBvZiBtb2R1bGVzIHdpbGwgZGVwZW5kIG9uIGhvdyB0aGUgTmV0LVNOTVAgc29mdHdhcmUKK3dhcyBvcmlnaW5hbGx5IGNvbXBpbGVkLCBidXQgaXMgdHlwaWNhbGx5OgorSVBcLU1JQjpJRlwtTUlCOlRDUFwtTUlCOlVEUFwtTUlCOlNOTVB2MlwtTUlCOlJGQzEyMTNcLU1JQjogVUNEXC1TTk1QXC1NSUI6SE9TVFwtUkVTT1VSQ0VTXC1NSUIKKy5JUAorSWYgdGhlIHZhbHVlIG9mIHRoZQorLkIgTUlCUworZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBzdGFydHMgd2l0aCBhICcrJyBjaGFyYWN0ZXIsCit0aGVuIHRoZXNlIE1JQiBtb2R1bGVzIHdpbGwgYmUgYWRkZWQgdG8gdGhlIGRlZmF1bHQgbGlzdC4KK090aGVyd2lzZSB0aGVzZSBtb2R1bGVzIChwbHVzIGFueSB0aGF0IHRoZXkgSU1QT1JUIGZyb20pIHdpbGwgYmUgbG9hZGVkCisuSSBpbnN0ZWFkCitvZiB0aGUgZGVmYXVsdCBsaXN0LgorLklQCitJZiB0aGUgCisuQiBNSUJTCitlbnZpcm9ubWVudGFsIHZhcmlhYmxlIGhhcyB0aGUgdmFsdWUKKy5CUiBBTEwgIiB0aGVuICIgcmVhZF9hbGxfbWlicword2lsbCBiZSBjYWxsZWQgdG8gbG9hZCB0aGUgZnVsbCBjb2xsZWN0aW9uIG9mIGFsbCBhdmFpbGFibGUgTUlCIG1vZHVsZXMuCisuSVAKK1VzZWQgYnkKKy5CIGluaXRfbWliCitvbmx5LgorLlRQIDEwCitNSUJGSUxFUworQSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBmaWxlcyB0byBsb2FkLgorLmJyCitEZWZhdWx0OiAobm9uZSkKKy5icgorVXNlZCBieQorLkIgaW5pdF9taWIKK29ubHkuCisuU0ggIlNFRSBBTFNPIgorbmV0c25tcF9zZXNzaW9uX2FwaSgzKSwgbmV0c25tcF9wZHVfYXBpKDMpLCBuZXRzbm1wX3ZhcmJpbmRfYXBpKDMpCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMgYi9tYW4vbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0ZDdkY2MuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMTkgKzAsMCBAQAotLlRIICJtaWJfaGFuZGxlcl9tZXRob2RzIiAzICIyMyBEZWMgMjAwMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbWliX2hhbmRsZXJfbWV0aG9kcyBcLSBEZWZpbmVzIHRoZSBzdWJoYW5kbGVycyB0byBiZSBjYWxsZWQgYnkgdGhlIG11bHRpcGxleGVyIGhlbHBlci4gCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi1cZkMjaW5jbHVkZSA8bXVsdGlwbGV4ZXIuaD5cZlAKLS5QUAotLlNIICJERVRBSUxFRCBERVNDUklQVElPTiIKLS5QUCAKLURlZmluZXMgdGhlIHN1YmhhbmRsZXJzIHRvIGJlIGNhbGxlZCBieSB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyLgotLlBQCi0KLQotLlNIICJBVVRIT1IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9taWJfbWFpbnRlbmFuY2UuMyBiL21hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWIzOTE2Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX21pYl9tYWludGVuYW5jZS4zCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLlRIICJtaWJfbWFpbnRlbmFuY2UiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1taWJfbWFpbnRlbmFuY2UgXC0gCi0uUFAKLVJvdXRpbmVzIGZvciBtYWludGFpbmluZyBhIE1JQiB0YWJsZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZW5lcmljX2dldF9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklDcmVhdGUgYSBNSUIgaGFuZGxlciBzdHJ1Y3R1cmUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9nZW5lcmljX2ZyZWVfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlcikiCi0uYnIKLS5SSSAiXGZJRnJlZSBhIE1JQiBoYW5kbGVyIHN0cnVjdHVyZSwgcmVsZWFzaW5nIGFueSByZWxhdGVkIHJlc291cmNlcy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCB2b2lkICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJUmVnaXN0ZXIgYSBNSUIgdGFibGUgd2l0aCB0aGUgU05NUCBhZ2VudC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX3VucmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSVVucmVnaXN0ZXIgYSBNSUIgdGFibGUgZnJvbSB0aGUgU05NUCBhZ2VudC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZ2VuZXJpY19leHRyYWN0X3RhYmxlXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJRXh0cmFjdCB0aGUgdGFibGUgcmVsYXRpbmcgdG8gYSByZXF1ZXN0ZWQgdmFyYmluZC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZ2VuZXJpY19leHRyYWN0X3Jvd1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSUV4dHJhY3QgdGhlIHJvdyByZWxhdGluZyB0byBhIHJlcXVlc3RlZCB2YXJiaW5kLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9nZW5lcmljX2luc2VydF9yb3dcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCB2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSUFzc29jaWF0ZSBhIChuZXcpIHJvdyB3aXRoIHRoZSByZXF1ZXN0ZWQgdmFyYmluZC4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVJvdXRpbmVzIGZvciBtYWludGFpbmluZyBhIE1JQiB0YWJsZS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInZvaWQgbmV0c25tcF9nZW5lcmljX2V4dHJhY3Rfcm93IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1FeHRyYWN0IHRoZSByb3cgcmVsYXRpbmcgdG8gYSByZXF1ZXN0ZWQgdmFyYmluZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTUgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQgbmV0c25tcF9nZW5lcmljX2V4dHJhY3RfdGFibGUgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLUV4dHJhY3QgdGhlIHRhYmxlIHJlbGF0aW5nIHRvIGEgcmVxdWVzdGVkIHZhcmJpbmQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg5IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJuZXRzbm1wX2dlbmVyaWNfZnJlZV9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogaGFuZGxlcikiCi0uUFAKLUZyZWUgYSBNSUIgaGFuZGxlciBzdHJ1Y3R1cmUsIHJlbGVhc2luZyBhbnkgcmVsYXRlZCByZXNvdXJjZXMuIFBvc3NpYmx5IGNhbGxlZCBhdXRvbWF0aWNhbGx5IGJ5ICduZXRzbm1wX3VucmVnaXN0ZXJfaGFuZGxlcicgPyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2NSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZW5lcmljX2dldF9oYW5kbGVyICh2b2lkKSIKLS5QUAotQ3JlYXRlIGEgTUlCIGhhbmRsZXIgc3RydWN0dXJlLiBUaGlzIHdpbGwgdHlwaWNhbGx5IGJlIGludm9rZWQgd2l0aGluIHRoZSBjb3JyZXNwb25kaW5nICduZXRzbm1wX2dlbmVyaWNfcmVnaXN0ZXInIHJvdXRpbmUgKG9yIHRoZSByZWdpc3RyYXRpb24gY29kZSBvZiBhIHN1Yi1oZWxwZXIgYmFzZWQgb24gdGhpcyBoZWxwZXIpLgotLlBQCi1BbHRlcm5hdGl2ZWx5LCBpdCBtaWdodCBiZSBjYWxsZWQgZnJvbSB0aGUgaW5pdGlhbGlzYXRpb24gY29kZSBvZiBhIHBhcnRpY3VsYXIgTUlCIHRhYmxlIGltcGxlbWVudGF0aW9uLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1OCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2dlbmVyaWNfaW5zZXJ0X3JvdyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCB2b2lkICogcm93KSIKLS5QUAotQXNzb2NpYXRlIGEgKG5ldykgcm93IHdpdGggdGhlIHJlcXVlc3RlZCB2YXJiaW5kLiBUaGUgcm93IHNob3VsZCBhbHNvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbnkgb3RoZXIgdmFyYmluZHMgdGhhdCByZWZlciB0byB0aGUgc2FtZSBpbmRleCB2YWx1ZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjAzIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX3JlZ2lzdGVyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgdm9pZCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLVJlZ2lzdGVyIGEgTUlCIHRhYmxlIHdpdGggdGhlIFNOTVAgYWdlbnQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTcyIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX3VucmVnaXN0ZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotVW5yZWdpc3RlciBhIE1JQiB0YWJsZSBmcm9tIHRoZSBTTk1QIGFnZW50LiBUaGlzIHNob3VsZCBhbHNvIHJlbGVhc2UgdGhlIGludGVybmFsIHJlcHJlc2VudGF0aW9uIG9mIHRoZSB0YWJsZS4gPz8gSXMgYSB0YWJsZS1zcGVjaWZpYyB2ZXJzaW9uIG9mIHRoaXMgbmVlZGVkLCBvciB3b3VsZCAnbmV0c25tcF91bnJlZ2lzdGVyX2hhbmRsZXInICsgJ25ldHNubXBfZ2VuZXJpY19mcmVlX2hhbmRsZXInIGRvPyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4MyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMgYi9tYW4vbmV0c25tcF9taWJfdXRpbGl0aWVzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3NzI3YmQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbWliX3V0aWxpdGllcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMTI4MyArMCwwIEBACi0uVEggIm1pYiBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbWliIHBhcnNpbmcgYW5kIGRhdGF0eXBlIG1hbmlwdWxhdGlvbiByb3V0aW5lcy4gXC0gCi0uU1MgIkRhdGEgU3RydWN0dXJlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCX1ByZWZpeExpc3RcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnBhcnNlX2hpbnRzXGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIlR5cGVkZWZzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQl9QcmVmaXhMaXN0XGZQICogXGZCUHJlZml4TGlzdFB0clxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJfUHJlZml4TGlzdFxmUCBcZkJQcmVmaXhMaXN0XGZQIgotLmJyCi0uaW4gLTFjCi0uU1MgIkVudW1lcmF0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJlbnVtIFxmQmluZXRfYWRkcmVzc190eXBlXGZQIHsgXGZCSVBWNFxmUCA9ICAxLCBcZkJJUFY2XGZQID0gIDIsIFxmQklQVjRaXGZQID0gIDMsIFxmQklQVjZaXGZQID0gIDQsIFxmQkROU1xmUCA9ICAxNiB9IgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCX3NwcmludF9oZXhzdHJpbmdfbGluZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IHVfY2hhciAqY3AsIHNpemVfdCBsaW5lX2xlbikiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgaGV4YWRlY2ltYWwgc3RyaW5nIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2hleHN0cmluZ1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IHVfY2hhciAqY3AsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19hc2NpaXN0cmluZ1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IHVfY2hhciAqY3AsIHNpemVfdCBsZW4pIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBhc2NpaSBzdHJpbmcgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2Nfb2N0ZXRfc3RyaW5nXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIG9jdGV0IHN0cmluZyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19jb3VudGVyNjRcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSBjb3VudGVyIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX29wYXF1ZVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBvYmplY3QgaWRlbnRpZmllciBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19vYmplY3RfaWRlbnRpZmllclxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBvYmplY3QgaWRlbnRpZmllciBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY190aW1ldGlja3NcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSB0aW1ldGljayBcZkJ2YXJpYWJsZVxmUCBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19oaW50ZWRfaW50ZWdlclxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGxvbmcgdmFsLCBjb25zdCBjaGFyIGRlY2ltYWx0eXBlLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIGludGVnZXIgYWNjb3JkaW5nIHRvIHRoZSBoaW50IGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2ludGVnZXJcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYW4gaW50ZWdlciBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY191aW50ZWdlclxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2dhdWdlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgZ2F1Z2UgdmFsdWUgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfY291bnRlclxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIGNvdW50ZXIgdmFsdWUgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfbmV0d29ya2FkZHJlc3NcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklQcmludHMgYSBuZXR3b3JrIGFkZHJlc3MgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfaXBhZGRyZXNzXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGFuIGlwLWFkZHJlc3MgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfbnVsbFxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIG51bGwgdmFsdWUgaW50byBhIGJ1ZmZlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfYml0c3RyaW5nXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIGEgYml0IHN0cmluZyBpbnRvIGEgYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19uc2FwYWRkcmVzc1xmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzcHJpbnRfcmVhbGxvY19iYWR0eXBlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS5SSSAiXGZJRmFsbGJhY2sgcm91dGluZSBmb3IgYSBiYWQgdHlwZSwgcHJpbnRzICdWYXJpYWJsZSBoYXMgYmFkIHR5cGUnIGludG8gYSBidWZmZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX2J5X3R5cGVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLlJJICJcZklVbml2ZXJzYWwgcHJpbnQgcm91dGluZSwgcHJpbnRzIGEgXGZCdmFyaWFibGVcZlAgaW50byBhIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIFxmQnZhcmlhYmxlXGZQIHR5cGUuIFxmUCIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRyZWVcZlAgKiBcZkJnZXRfdHJlZV9oZWFkXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZXMgdGhlIFxmQnRyZWVcZlAgaGVhZC4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc25tcF9vdXRfdG9nZ2xlX29wdGlvbnNcZlAgKGNoYXIgKm9wdGlvbnMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9vdXRfdG9nZ2xlX29wdGlvbnNfdXNhZ2VcZlAgKGNvbnN0IGNoYXIgKmxlYWQsIEZJTEUgKm91dGYpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzbm1wX2luX29wdGlvbnNcZlAgKGNoYXIgKm9wdGFyZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc25tcF9pbl90b2dnbGVfb3B0aW9uc1xmUCAoY2hhciAqb3B0aW9ucykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2luX3RvZ2dsZV9vcHRpb25zX3VzYWdlXGZQIChjb25zdCBjaGFyICpsZWFkLCBGSUxFICpvdXRmKSIKLS5icgotLlJJICJcZklQcmludHMgb3V0IGEgaGVscCB1c2FnZSBmb3IgdGhlIGluKiB0b2dnbGUgb3B0aW9ucy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlZ2lzdGVyX21pYl9oYW5kbGVyc1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3NldF9taWJfZGlyZWN0b3J5XGZQIChjb25zdCBjaGFyICpkaXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJuZXRzbm1wX2dldF9taWJfZGlyZWN0b3J5XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZml4dXBfbWliX2RpcmVjdG9yeVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfbWliXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklJbml0aWFsaXNlcyB0aGUgbWliIHJlYWRlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmluaXRfbWliXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNodXRkb3duX21pYlxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJVW5sb2FkcyBhbGwgbWlicy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X21pYlxmUCAoRklMRSAqZnApIgotLmJyCi0uUkkgIlxmSVByaW50cyB0aGUgTUlCcyB0byB0aGUgZmlsZSBmcC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X2FzY2lpX2R1bXBcZlAgKEZJTEUgKmZwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNldF9mdW5jdGlvblxmUCAoc3RydWN0IFxmQnRyZWVcZlAgKnN1YnRyZWUpIgotLmJyCi0uUkkgIlxmSVNldCdzIHRoZSBwcmludGluZyBmdW5jdGlvbiBwcmludG9tYXQgaW4gYSBzdWJ0cmVlIGFjY29yZGluZyBpdCdzIHR5cGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJlYWRfb2JqaWRcZlAgKGNvbnN0IGNoYXIgKmlucHV0LCBvaWQgKm91dHB1dCwgc2l6ZV90ICpvdXRfbGVuKSIKLS5icgotLlJJICJcZklSZWFkcyBhbiBvYmplY3QgaWRlbnRpZmllciBmcm9tIGFuIGlucHV0IHN0cmluZyBpbnRvIGludGVybmFsIE9JRCBmb3JtLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZFxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGludCAqYnVmX292ZXJmbG93LCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJ0cmVlXGZQICogXGZCbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgaW50ICpidWZfb3ZlcmZsb3csIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX29iamlkXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9vYmppZFxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29iamlkXGZQIChjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBvaWQgdG8gc3Rkb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZnByaW50X29iamlkXGZQIChGSUxFICpmLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4pIgotLmJyCi0uUkkgIlxmSVByaW50cyBhbiBvaWQgdG8gYSBmaWxlIGRlc2NyaXB0b3IuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNwcmludF9yZWFsbG9jX3ZhcmlhYmxlXGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF92YXJpYWJsZVxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X3ZhcmlhYmxlXGZQIChjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0uUkkgIlxmSVByaW50cyBhIFxmQnZhcmlhYmxlXGZQIHRvIHN0ZG91dC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZwcmludF92YXJpYWJsZVxmUCAoRklMRSAqZiwgY29uc3Qgb2lkICpvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKlxmQnZhcmlhYmxlXGZQKSIKLS5icgotLlJJICJcZklQcmludHMgYSBcZkJ2YXJpYWJsZVxmUCB0byBhIGZpbGUgZGVzY3JpcHRvci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfdmFsdWVcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X3ZhbHVlXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqXGZCdmFyaWFibGVcZlApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfdmFsdWVcZlAgKGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcHJpbnRfdmFsdWVcZlAgKEZJTEUgKmYsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpcZkJ2YXJpYWJsZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmJ1aWxkX29pZF9zZWdtZW50XGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcikiCi0uYnIKLS5SSSAiXGZJVGFrZXMgdGhlIHZhbHVlIGluIFZBUiBhbmQgdHVybnMgaXQgaW50byBhbiBPSUQgc2VnbWVudCBpbiB2YXItPm5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmJ1aWxkX29pZF9ub2FsbG9jXGZQIChvaWQgKmluLCBzaXplX3QgaW5fbGVuLCBzaXplX3QgKm91dF9sZW4sIG9pZCAqcHJlZml4LCBzaXplX3QgcHJlZml4X2xlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYnVpbGRfb2lkXGZQIChvaWQgKipvdXQsIHNpemVfdCAqb3V0X2xlbiwgb2lkICpwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJwYXJzZV9vaWRfaW5kZXhlc1xmUCAob2lkICpvaWRJbmRleCwgc2l6ZV90IG9pZExlbiwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpkYXRhKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCcGFyc2Vfb25lX29pZF9pbmRleFxmUCAob2lkICoqb2lkU3RhcnQsIHNpemVfdCAqb2lkTGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmRhdGEsIGludCBjb21wbGV0ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmR1bXBfcmVhbGxvY19vaWRfdG9faW5ldGFkZHJlc3NcZlAgKGNvbnN0IGludCBhZGRyX3R5cGUsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgdV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNoYXIgcXVvdGVjaGFyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZHVtcF9yZWFsbG9jX29pZF90b19zdHJpbmdcZlAgKGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgdV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNoYXIgcXVvdGVjaGFyKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJlZVxmUCAqIFxmQmdldF90cmVlXGZQIChjb25zdCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIHN0cnVjdCBcZkJ0cmVlXGZQICpzdWJ0cmVlKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X2Rlc2NyaXB0aW9uXGZQIChvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkiCi0uYnIKLS5SSSAiXGZJUHJpbnRzIG9uIG9pZCBkZXNjcmlwdGlvbiBvbiBzdGRvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcHJpbnRfZGVzY3JpcHRpb25cZlAgKEZJTEUgKmYsIG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKSIKLS5icgotLlJJICJcZklQcmludHMgb24gb2lkIGRlc2NyaXB0aW9uIGludG8gYSBmaWxlIGRlc2NyaXB0b3IuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfZGVzY3JpcHRpb25cZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIG9pZCAqb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3ByaW50X3JlYWxsb2NfZGVzY3JpcHRpb25cZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBvaWQgKm9iamlkLCBzaXplX3Qgb2JqaWRsZW4sIGludCB3aWR0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmdldF9tb2R1bGVfbm9kZVxmUCAoY29uc3QgY2hhciAqZm5hbWUsIGNvbnN0IGNoYXIgKlxmQm1vZHVsZVxmUCwgb2lkICpvYmppZCwgc2l6ZV90ICpvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmdldF93aWxkX25vZGVcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqb2JqaWQsIHNpemVfdCAqb2JqaWRsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJnZXRfbm9kZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpvYmppZCwgc2l6ZV90ICpvYmppZGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjbGVhcl90cmVlX2ZsYWdzXGZQIChyZWdpc3RlciBzdHJ1Y3QgXGZCdHJlZVxmUCAqdHApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2lkX3JlcG9ydFxmUCAoRklMRSAqZnApIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbGFiZWxlZG9pZFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9vaWRcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3VmZml4XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N5bWJvbGljXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnByaW50X29pZF9yZXBvcnRfZW5hYmxlX21pYmNoaWxkb2lkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCdXB0aW1lX3N0cmluZ1xmUCAodV9sb25nIHRpbWV0aWNrcywgY2hhciAqYnVmKSIKLS5icgotLlJJICJcZklDb252ZXJ0cyB0aW1ldGlja3MgdG8gaG91cnMsIG1pbnV0ZXMsIHNlY29uZHMgc3RyaW5nLiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJ1cHRpbWVfc3RyaW5nX25cZlAgKHVfbG9uZyB0aW1ldGlja3MsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCc25tcF9wYXJzZV9vaWRcZlAgKGNvbnN0IGNoYXIgKmFyZ3YsIG9pZCAqcm9vdCwgc2l6ZV90ICpyb290bGVuKSIKLS5icgotLlJJICJcZklHaXZlbiBhIHN0cmluZywgcGFyc2VzIGFuIG9pZCBvdXQgb2YgaXQgKGlmIHBvc3NpYmxlKS4gXGZQIgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCcGFyc2Vfb2N0ZXRfaGludFxmUCAoY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdmFsdWUsIHVuc2lnbmVkIGNoYXIgKipuZXdfdmFsLCBpbnQgKm5ld192YWxfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCbWliX3RvX2Fzbl90eXBlXGZQIChpbnQgbWliX3R5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3N0cjJvaWRcZlAgKGNvbnN0IGNoYXIgKlMsIG9pZCAqTywgaW50IEwpIgotLmJyCi0uUkkgIlxmSUNvbnZlcnRzIGEgc3RyaW5nIHRvIGl0cyBPSUQgZm9ybS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9vaWQyY2hhcnNcZlAgKGNoYXIgKkMsIGludCBMLCBjb25zdCBvaWQgKk8pIgotLmJyCi0uUkkgIlxmSUNvbnZlcnRzIGFuIE9JRCB0byBpdHMgY2hhcmFjdGVyIGZvcm0uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkMnN0clxmUCAoY2hhciAqUywgaW50IEwsIG9pZCAqTykiCi0uYnIKLS5SSSAiXGZJQ29udmVydHMgYW4gT0lEIHRvIGl0cyBzdHJpbmcgZm9ybS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9ieV90eXBlXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9oZXhzdHJpbmdcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IHVfY2hhciAqY3AsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2FzY2lpc3RyaW5nXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCB1X2NoYXIgKmNwLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9vY3RldF9zdHJpbmdcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X29wYXF1ZVxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfb2JqZWN0X2lkZW50aWZpZXJcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X3RpbWV0aWNrc1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfaGludGVkX2ludGVnZXJcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGxvbmcgdmFsLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfaW50ZWdlclxmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfdWludGVnZXJcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2dhdWdlXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9jb3VudGVyXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9uZXR3b3JrYWRkcmVzc1xmUCAoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKmVudW1zLCBjb25zdCBjaGFyICpoaW50LCBjb25zdCBjaGFyICp1bml0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNucHJpbnRfaXBhZGRyZXNzXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9udWxsXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9iaXRzdHJpbmdcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X25zYXBhZGRyZXNzXGZQIChjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqZW51bXMsIGNvbnN0IGNoYXIgKmhpbnQsIGNvbnN0IGNoYXIgKnVuaXRzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25wcmludF9jb3VudGVyNjRcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbnByaW50X2JhZHR5cGVcZlAgKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICplbnVtcywgY29uc3QgY2hhciAqaGludCwgY29uc3QgY2hhciAqdW5pdHMpIgotLmJyCi0uaW4gLTFjCi0uU1MgIlZhcmlhYmxlcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJlZVxmUCAqIFxmQnRyZWVfaGVhZFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdHJlZVxmUCAqIFxmQk1pYlxmUCIKLS5icgotLnRpIC0xYwotLlJJICJvaWQgXGZCUkZDMTIxM19NSUJcZlAgW10gPSB7IDEsIDMsIDYsIDEsIDIsIDEgfSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJQcmVmaXhMaXN0XGZQIFxmQm1pYl9wcmVmaXhlc1xmUCBbXSIKLS5icgotLmluIC0xYwotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgX3NwcmludF9oZXhzdHJpbmdfbGluZSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IHVfY2hhciAqIGNwLCBzaXplX3QgbGluZV9sZW4pIgotLlBQCi1QcmludHMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgaW50byBhIGJ1ZmZlci4gVGhlIGNoYXJhY3RlcnMgcG9pbnRlZCBieSAqY3AgYXJlIGVuY29kZWQgYXMgaGV4YWRlY2ltYWwgc3RyaW5nLgotLlBQCi1JZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgYWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBpbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkljcFxmUCB0aGUgYXJyYXkgb2YgY2hhcmFjdGVycyB0byBlbmNvZGUuIAotLmJyCi1cZklsaW5lX2xlblxmUCB0aGUgYXJyYXkgbGVuZ3RoIG9mIGNwLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgYnVpbGRfb2lkIChvaWQgKiogb3V0LCBzaXplX3QgKiBvdXRfbGVuLCBvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAoteHh4LXJrczogc2hvdWxkIGZyZWUgcHJldmlvdXMgdmFsdWU/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzU4MiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgYnVpbGRfb2lkX3NlZ21lbnQgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcikiCi0uUFAKLVRha2VzIHRoZSB2YWx1ZSBpbiBWQVIgYW5kIHR1cm5zIGl0IGludG8gYW4gT0lEIHNlZ21lbnQgaW4gdmFyLT5uYW1lLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1TTk1QRVJSX1NVQ0NFU1Mgb3IgU05NUEVSUl9HRU5FUlIgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNDQ4IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgZnByaW50X2Rlc2NyaXB0aW9uIChGSUxFICogZiwgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKSIKLS5QUAotUHJpbnRzIG9uIG9pZCBkZXNjcmlwdGlvbiBpbnRvIGEgZmlsZSBkZXNjcmlwdG9yLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWZcZlAgVGhlIGZpbGUgZGVzY3JpcHRvciB0byBwcmludCB0by4gCi0uYnIKLVxmSW9iamlkXGZQIFRoZSBvYmplY3QgaWRlbnRpZmllci4gCi0uYnIKLVxmSW9iamlkbGVuXGZQIFRoZSBvYmplY3QgaWQgbGVuZ3RoLiAKLS5icgotXGZJd2lkdGhcZlAgTnVtYmVyIG9mIHN1YmlkZW50aWZpZXJzLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ0NTIgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBmcHJpbnRfb2JqaWQgKEZJTEUgKiBmLCBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuKSIKLS5QUAotUHJpbnRzIGFuIG9pZCB0byBhIGZpbGUgZGVzY3JpcHRvci4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklmXGZQIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklvYmppZFxmUCBUaGUgb2lkIHRvIHByaW50IAotLmJyCi1cZklvYmppZGxlblxmUCBUaGUgbGVuZ3RoIG9mIG9pZGlkLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMxNjcgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBmcHJpbnRfdmFyaWFibGUgKEZJTEUgKiBmLCBjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXJpYWJsZSkiCi0uUFAKLVByaW50cyBhIFxmQnZhcmlhYmxlXGZQIHRvIGEgZmlsZSBkZXNjcmlwdG9yLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWZcZlAgVGhlIGZpbGUgZGVzY3JpcHRvciB0byBwcmludCB0by4gCi0uYnIKLVxmSW9iamlkXGZQIFRoZSBvYmplY3QgaWQuIAotLmJyCi1cZklvYmppZGxlblxmUCBUaGUgbGVuZ3RoIG9mIHRlaCBvYmplY3QgaWQuIAotLmJyCi1cZklcZkJ2YXJpYWJsZVxmUFxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gcHJpbnQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzMyMSBvZiBmaWxlIG1pYi5jLgotLlNTICJzdHJ1Y3QgXGZCdHJlZVxmUCogZ2V0X3RyZWVfaGVhZCAodm9pZClcZkMgW3JlYWRdXGZQIgotLlBQCi1SZXRyaWV2ZXMgdGhlIFxmQnRyZWVcZlAgaGVhZC4gXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci10aGUgXGZCdHJlZVxmUCBoZWFkLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwMjAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IGdldF93aWxkX25vZGUgKGNvbnN0IGNoYXIgKiBuYW1lLCBvaWQgKiBvYmppZCwgc2l6ZV90ICogb2JqaWRsZW4pIlxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLWNvbW1lbnRzIG9uIGZpbmRfYmVzdF90cmVlX25vZGUgZm9yIHVzYWdlIGFmdGVyIGZpcnN0IHRpbWUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQ5MSBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIG5ldHNubXBfZml4dXBfbWliX2RpcmVjdG9yeSAodm9pZCkiCi0uUFAKLXN3YXAgaW4gdGhlIG5ldyB2YWx1ZSBhbmQgcmVwZWF0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ4MyBvZiBmaWxlIG1pYi5jLgotLlNTICJjaGFyKiBuZXRzbm1wX2dldF9taWJfZGlyZWN0b3J5ICh2b2lkKSIKLS5QUAotQ2hlY2sgaWYgdGhlIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQIGlzIHNldAotLlBQCi1Ob3Qgc2V0IHVzZSBoYXJkIGNvZGVkIHBhdGggCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDM2IG9mIGZpbGUgbWliLmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X21pYiAodm9pZCkiCi0uUFAKLUluaXRpYWxpc2VzIHRoZSBtaWIgcmVhZGVyLiBSZWFkcyBpbiBhbGwgc2V0dGluZ3MgZnJvbSB0aGUgZW52aXJvbm1lbnQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjUzMCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgbmV0c25tcF9vaWQyY2hhcnMgKGNoYXIgKiBDLCBpbnQgTCwgY29uc3Qgb2lkICogTykiCi0uUFAKLUNvbnZlcnRzIGFuIE9JRCB0byBpdHMgY2hhcmFjdGVyIGZvcm0uIGluIGV4YW1wbGUgNSAuIDEgLiAyIC4gMyAuIDQgLiA1ID0gMTIzNDUKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklDXGZQIFRoZSBjaGFyYWN0ZXIgYnVmZmVyLiAKLS5icgotXGZJTFxmUCBUaGUgbGVuZ3RoIG9mIHRoZSBidWZmZXIuIAotLmJyCi1cZklPXGZQIFRoZSBvaWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIG9uIFN1Y2VzcywgMSBvbiBmYWlsdXJlLiAKLS5SRQotLlBQCi0KLS5QUAotbGVuZ3RoIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjI3OCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgbmV0c25tcF9vaWQyc3RyIChjaGFyICogUywgaW50IEwsIG9pZCAqIE8pIgotLlBQCi1Db252ZXJ0cyBhbiBPSUQgdG8gaXRzIHN0cmluZyBmb3JtLiBpbiBleGFtcGxlIDUgLiAnaCcgLiAnZScgLiAnbCcgLiAnbCcgLiAnbycgPSAnaGVsbG9cXDAnIChudWxsIHRlcm1pbmF0ZWQpCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJU1xmUCBUaGUgY2hhcmFjdGVyIHN0cmluZyBidWZmZXIuIAotLmJyCi1cZklMXGZQIFRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBidWZmZXIuIAotLmJyCi1cZklPXGZQIFRoZSBvaWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIG9uIFN1Y2VzcywgMSBvbiBmYWlsdXJlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYzMDYgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3NldF9taWJfZGlyZWN0b3J5IChjb25zdCBjaGFyICogZGlyKSIKLS5QUAotTmV3IGRpciBzdGFydHMgd2l0aCAnKycsIHRodXMgd2UgYWRkIGl0LgotLlBQCi1JZiBkaXIgc3RhcnRzIHdpdGggJysnIHNraXAgJysnIGl0LgotLlBQCi1zZXRfc3RyaW5nIGNhbGxzIHN0cmR1cCwgc28gaWYgd2UgYWxsb2NhdGVkIG1lbW9yeSwgZnJlZSBpdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzODEgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IG5ldHNubXBfc3RyMm9pZCAoY29uc3QgY2hhciAqIFMsIG9pZCAqIE8sIGludCBMKSIKLS5QUAotQ29udmVydHMgYSBzdHJpbmcgdG8gaXRzIE9JRCBmb3JtLiBpbiBleGFtcGxlICdoZWxsbycgPSA1IC4gJ2gnIC4gJ2UnIC4gJ2wnIC4gJ2wnIC4gJ28nCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJU1xmUCBUaGUgc3RyaW5nLiAKLS5icgotXGZJT1xmUCBUaGUgb2lkLiAKLS5icgotXGZJTFxmUCBUaGUgbGVuZ3RoIG9mIHRoZSBvaWQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0wIG9uIFN1Y2VzcywgMSBvbiBmYWlsdXJlLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYyNDMgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBwcmludF9kZXNjcmlwdGlvbiAob2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKSIKLS5QUAotUHJpbnRzIG9uIG9pZCBkZXNjcmlwdGlvbiBvbiBzdGRvdXQuIFxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQmZwcmludF9kZXNjcmlwdGlvblxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ0MzYgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBwcmludF9taWIgKEZJTEUgKiBmcCkiCi0uUFAKLVByaW50cyB0aGUgTUlCcyB0byB0aGUgZmlsZSBmcC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklmcFxmUCBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHByaW50IHRvLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NDUgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBwcmludF9vYmppZCAoY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbikiCi0uUFAKLVByaW50cyBhbiBvaWQgdG8gc3Rkb3V0LiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW9iamlkXGZQIFRoZSBvaWQgdG8gcHJpbnQgCi0uYnIKLVxmSW9iamlkbGVuXGZQIFRoZSBsZW5ndGggb2Ygb2lkaWQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzE1MyBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHByaW50X3ZhcmlhYmxlIChjb25zdCBvaWQgKiBvYmppZCwgc2l6ZV90IG9iamlkbGVuLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXJpYWJsZSkiCi0uUFAKLVByaW50cyBhIFxmQnZhcmlhYmxlXGZQIHRvIHN0ZG91dC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklvYmppZFxmUCBUaGUgb2JqZWN0IGlkLiAKLS5icgotXGZJb2JqaWRsZW5cZlAgVGhlIGxlbmd0aCBvZiB0ZWggb2JqZWN0IGlkLiAKLS5icgotXGZJXGZCdmFyaWFibGVcZlBcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIHByaW50LiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzMDUgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHJlYWRfb2JqaWQgKGNvbnN0IGNoYXIgKiBpbnB1dCwgb2lkICogb3V0cHV0LCBzaXplX3QgKiBvdXRfbGVuKSIKLS5QUAotUmVhZHMgYW4gb2JqZWN0IGlkZW50aWZpZXIgZnJvbSBhbiBpbnB1dCBzdHJpbmcgaW50byBpbnRlcm5hbCBPSUQgZm9ybS4gV2hlbiBjYWxsZWQsIG91dF9sZW4gbXVzdCBob2xkIHRoZSBtYXhpbXVtIGxlbmd0aCBvZiB0aGUgb3V0cHV0IGFycmF5LgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWlucHV0XGZQIHRoZSBpbnB1dCBzdHJpbmcuIAotLmJyCi1cZklvdXRwdXRcZlAgdGhlIG9pZCB3aXJ0ZS4gCi0uYnIKLVxmSW91dF9sZW5cZlAgbnVtYmVyIG9mIHN1YmlkJ3MgaW4gb3V0cHV0LgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBpZiBzdWNjZXNzZnVsLgotLlJFCi0uUFAKLUlmIGFuIGVycm9yIG9jY3VycywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIDAgYW5kIE1BWSBzZXQgc25tcF9lcnJuby4gc25tcF9lcnJubyBpcyBOT1Qgc2V0IGlmIFNFVF9TTk1QX0VSUk9SIGV2YWx1YXRlcyB0byBub3RoaW5nLiBUaGlzIGNhbiBtYWtlIG11bHRpLXRocmVhZGVkIHVzZSBhIHRpbnkgYml0IG1vcmUgcm9idXN0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4NDMgb2YgZmlsZSBtaWIuYy4KLS5TUyAidm9pZCBzZXRfZnVuY3Rpb24gKHN0cnVjdCBcZkJ0cmVlXGZQICogc3VidHJlZSkiCi0uUFAKLVNldCdzIHRoZSBwcmludGluZyBmdW5jdGlvbiBwcmludG9tYXQgaW4gYSBzdWJ0cmVlIGFjY29yZGluZyBpdCdzIHR5cGUuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJc3VidHJlZVxmUCBUaGUgc3VidHJlZSB0byBzZXQuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc2NiBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHNodXRkb3duX21pYiAodm9pZCkiCi0uUFAKLVVubG9hZHMgYWxsIG1pYnMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjcyMCBvZiBmaWxlIG1pYi5jLgotLlNTICJ2b2lkIHNubXBfaW5fdG9nZ2xlX29wdGlvbnNfdXNhZ2UgKGNvbnN0IGNoYXIgKiBsZWFkLCBGSUxFICogb3V0ZikiCi0uUFAKLVByaW50cyBvdXQgYSBoZWxwIHVzYWdlIGZvciB0aGUgaW4qIHRvZ2dsZSBvcHRpb25zLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWxlYWRcZlAgVGhlIGxlYWQgdG8gcHJpbnQgZm9yIGV2ZXJ5IGxpbmUuIAotLmJyCi1cZklvdXRmXGZQIFRoZSBmaWxlIGRlc2NyaXB0b3IgdG8gd3JpdGUgdG8uIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI5MyBvZiBmaWxlIG1pYi5jLgotLlNTICJvaWQqIHNubXBfcGFyc2Vfb2lkIChjb25zdCBjaGFyICogYXJndiwgb2lkICogcm9vdCwgc2l6ZV90ICogcm9vdGxlbikiCi0uUFAKLUdpdmVuIGEgc3RyaW5nLCBwYXJzZXMgYW4gb2lkIG91dCBvZiBpdCAoaWYgcG9zc2libGUpLiBJdCB3aWxsIHRyeSB0byBwYXJzZSBpdCBiYXNlZCBvbiBwcmVkZXRlcm1pbmVkIGNvbmZpZ3VyYXRpb24gaWYgcHJlc2VudCBvciBieSBldmVyeSBtZXRob2QgcG9zc2libGUgb3RoZXJ3aXNlLiBJZiBhIHN1ZmZpeCBoYXMgYmVlbiByZWdpc3RlcmVkIHVzaW5nIE5FVFNOTVBfRFNfTElCX09JRFNVRkZJWCwgaXQgd2lsbCBiZSBhcHBlbmRlZCB0byB0aGUgaW5wdXQgc3RyaW5nIGJlZm9yZSBwcm9jZXNzaW5nLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWFyZ3ZcZlAgVGhlIE9JRCB0byBzdHJpbmcgcGFyc2UgCi0uYnIKLVxmSXJvb3RcZlAgQW4gT0lEIGFycmF5IHdoZXJlIHRoZSByZXN1bHRzIGFyZSBzdG9yZWQuIAotLmJyCi1cZklyb290bGVuXGZQIFRoZSBtYXggbGVuZ3RoIG9mIHRoZSBhcnJheSBnb2luZyBpbiBhbmQgdGhlIGRhdGEgbGVuZ3RoIGNvbWluZyBvdXQuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1UaGUgcm9vdCBvaWQgcG9pbnRlciBpZiBzdWNjZXNzZnVsLCBvciBOVUxMIG90aGVyd2lzZS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1ODQ5IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19hc2NpaXN0cmluZyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IHVfY2hhciAqIGNwLCBzaXplX3QgbGVuKSIKLS5QUAotUHJpbnRzIGFuIGFzY2lpIHN0cmluZyBpbnRvIGEgYnVmZmVyLiBUaGUgY2hhcmFjdGVycyBwb2ludGVkIGJ5ICpjcCBhcmUgZW5jb2RlZCBhcyBhbiBhc2NpaSBzdHJpbmcuCi0uUFAKLUlmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgYWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBhZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIGluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSWNwXGZQIHRoZSBhcnJheSBvZiBjaGFyYWN0ZXJzIHRvIGVuY29kZS4gCi0uYnIKLVxmSWxlblxmUCB0aGUgYXJyYXkgbGVuZ3RoIG9mIGNwLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3MCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfYmFkdHlwZSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotRmFsbGJhY2sgcm91dGluZSBmb3IgYSBiYWQgdHlwZSwgcHJpbnRzICdWYXJpYWJsZSBoYXMgYmFkIHR5cGUnIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5MDUgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2JpdHN0cmluZyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgYml0IHN0cmluZyBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNzY2IG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19ieV90eXBlICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1Vbml2ZXJzYWwgcHJpbnQgcm91dGluZSwgcHJpbnRzIGEgXGZCdmFyaWFibGVcZlAgaW50byBhIGJ1ZmZlciBhY2NvcmRpbmcgdG8gdGhlIFxmQnZhcmlhYmxlXGZQIHR5cGUuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5NDAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2NvdW50ZXIgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIGNvdW50ZXIgdmFsdWUgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTUzMyBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfY291bnRlcjY0ICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYSBjb3VudGVyIGludG8gYSBidWZmZXIuIFRoZSBcZkJ2YXJpYWJsZVxmUCB2YXIgaXMgZW5jb2RlZCBhcyBhIGNvdW50ZXIgdmFsdWUuCi0uUFAKLUlmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg0OSBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfZ2F1Z2UgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIGdhdWdlIHZhbHVlIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0NjAgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX2hpbnRlZF9pbnRlZ2VyICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgbG9uZyB2YWwsIGNvbnN0IGNoYXIgZGVjaW1hbHR5cGUsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gaW50ZWdlciBhY2NvcmRpbmcgdG8gdGhlIGhpbnQgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFsXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZklkZWNpbWFsdHlwZVxmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgX05PVF8gYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTE4NiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfaW50ZWdlciAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGFuIGludGVnZXIgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI2MCBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfaXBhZGRyZXNzICh1X2NoYXIgKiogYnVmLCBzaXplX3QgKiBidWZfbGVuLCBzaXplX3QgKiBvdXRfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogdmFyLCBjb25zdCBzdHJ1Y3QgXGZCZW51bV9saXN0XGZQICogZW51bXMsIGNvbnN0IGNoYXIgKiBoaW50LCBjb25zdCBjaGFyICogdW5pdHMpIgotLlBQCi1QcmludHMgYW4gaXAtYWRkcmVzcyBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjYyIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19uZXR3b3JrYWRkcmVzcyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgbmV0d29yayBhZGRyZXNzIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1OTYgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX251bGwgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhIG51bGwgdmFsdWUgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTcyMiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2Nfb2JqZWN0X2lkZW50aWZpZXIgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiBvYmplY3QgaWRlbnRpZmllciBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDQyIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19vY3RldF9zdHJpbmcgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiBvY3RldCBzdHJpbmcgaW50byBhIGJ1ZmZlci4gVGhlIFxmQnZhcmlhYmxlXGZQIHZhciBpcyBlbmNvZGVkIGFzIG9jdGV0IHN0cmluZy4KLS5QUAotSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDMwIG9mIGZpbGUgbWliLmMuCi0uU1MgImludCBzcHJpbnRfcmVhbGxvY19vcGFxdWUgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiBvYmplY3QgaWRlbnRpZmllciBpbnRvIGEgYnVmZmVyLiBJZiBhbGxvd19yZWFsbG9jIGlzIHRydWUgdGhlIGJ1ZmZlciB3aWxsIGJlIChyZSlhbGxvY2F0ZWQgdG8gZml0IGluIHRoZSBuZWVkZWQgc2l6ZS4gKE5vdGU6ICpidWYgbWF5IGNoYW5nZSBkdWUgdG8gdGhpcy4pCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIEFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciB0byBwcmludCB0by4gCi0uYnIKLVxmSWJ1Zl9sZW5cZlAgQWRkcmVzcyB0byBhbiBpbnRlZ2VyIGNvbnRhaW5pbmcgdGhlIHNpemUgb2YgYnVmLiAKLS5icgotXGZJb3V0X2xlblxmUCBJbmNyZW1lbnRlZCBieSB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgcHJpbnRlZC4gCi0uYnIKLVxmSWFsbG93X3JlYWxsb2NcZlAgaWYgbm90IHplcm8gcmVhbGxvY2F0ZSB0aGUgYnVmZmVyIHRvIGZpdCB0aGUgbmVlZGVkIHNpemUuIAotLmJyCi1cZkl2YXJcZlAgVGhlIFxmQnZhcmlhYmxlXGZQIHRvIGVuY29kZS4gCi0uYnIKLVxmSWVudW1zXGZQIFRoZSBlbnVtZXJhdGlvbiBmZiB0aGlzIFxmQnZhcmlhYmxlXGZQIGlzIGVudW1lcmF0ZWQuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJaGludFxmUCBDb250ZW50cyBvZiB0aGUgRElTUExBWS1ISU5UIGNsYXVzZSBvZiB0aGUgTUlCLiBTZWUgUkZDIDE5MDMgU2VjdGlvbiAzLjEgZm9yIGRldGFpbHMuIG1heSBiZSBOVUxMLiAKLS5icgotXGZJdW5pdHNcZlAgQ29udGVudHMgb2YgdGhlIFVOSVRTIGNsYXVzZSBvZiB0aGUgTUlCLiBtYXkgYmUgTlVMTC4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLTEgb24gc3VjY2Vzcywgb3IgMCBvbiBmYWlsdXJlIChvdXQgb2YgbWVtb3J5LCBvciBidWZmZXIgdG8gc21hbGwgd2hlbiBub3QgYWxsb3dlZCB0byByZWFsbG9jLikgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5NTIgb2YgZmlsZSBtaWIuYy4KLS5TUyAiaW50IHNwcmludF9yZWFsbG9jX3RpbWV0aWNrcyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb3V0X2xlbiwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhciwgY29uc3Qgc3RydWN0IFxmQmVudW1fbGlzdFxmUCAqIGVudW1zLCBjb25zdCBjaGFyICogaGludCwgY29uc3QgY2hhciAqIHVuaXRzKSIKLS5QUAotUHJpbnRzIGEgdGltZXRpY2sgXGZCdmFyaWFibGVcZlAgaW50byBhIGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyB0cnVlIHRoZSBidWZmZXIgd2lsbCBiZSAocmUpYWxsb2NhdGVkIHRvIGZpdCBpbiB0aGUgbmVlZGVkIHNpemUuIChOb3RlOiAqYnVmIG1heSBjaGFuZ2UgZHVlIHRvIHRoaXMuKQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJ1ZlxmUCBBZGRyZXNzIG9mIHRoZSBidWZmZXIgdG8gcHJpbnQgdG8uIAotLmJyCi1cZklidWZfbGVuXGZQIEFkZHJlc3MgdG8gYW4gaW50ZWdlciBjb250YWluaW5nIHRoZSBzaXplIG9mIGJ1Zi4gCi0uYnIKLVxmSW91dF9sZW5cZlAgSW5jcmVtZW50ZWQgYnkgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHByaW50ZWQuIAotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIGlmIG5vdCB6ZXJvIHJlYWxsb2NhdGUgdGhlIGJ1ZmZlciB0byBmaXQgdGhlIG5lZWRlZCBzaXplLiAKLS5icgotXGZJdmFyXGZQIFRoZSBcZkJ2YXJpYWJsZVxmUCB0byBlbmNvZGUuIAotLmJyCi1cZkllbnVtc1xmUCBUaGUgZW51bWVyYXRpb24gZmYgdGhpcyBcZkJ2YXJpYWJsZVxmUCBpcyBlbnVtZXJhdGVkLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSWhpbnRcZlAgQ29udGVudHMgb2YgdGhlIERJU1BMQVktSElOVCBjbGF1c2Ugb2YgdGhlIE1JQi4gU2VlIFJGQyAxOTAzIFNlY3Rpb24gMy4xIGZvciBkZXRhaWxzLiBtYXkgYmUgTlVMTC4gCi0uYnIKLVxmSXVuaXRzXGZQIENvbnRlbnRzIG9mIHRoZSBVTklUUyBjbGF1c2Ugb2YgdGhlIE1JQi4gbWF5IGJlIE5VTEwuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci0xIG9uIHN1Y2Nlc3MsIG9yIDAgb24gZmFpbHVyZSAob3V0IG9mIG1lbW9yeSwgb3IgYnVmZmVyIHRvIHNtYWxsIHdoZW4gbm90IGFsbG93ZWQgdG8gcmVhbGxvYy4pIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTExMiBvZiBmaWxlIG1pYi5jLgotLlNTICJpbnQgc3ByaW50X3JlYWxsb2NfdWludGVnZXIgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXIsIGNvbnN0IHN0cnVjdCBcZkJlbnVtX2xpc3RcZlAgKiBlbnVtcywgY29uc3QgY2hhciAqIGhpbnQsIGNvbnN0IGNoYXIgKiB1bml0cykiCi0uUFAKLVByaW50cyBhbiB1bnNpZ25lZCBpbnRlZ2VyIGludG8gYSBidWZmZXIuIElmIGFsbG93X3JlYWxsb2MgaXMgdHJ1ZSB0aGUgYnVmZmVyIHdpbGwgYmUgKHJlKWFsbG9jYXRlZCB0byBmaXQgaW4gdGhlIG5lZWRlZCBzaXplLiAoTm90ZTogKmJ1ZiBtYXkgY2hhbmdlIGR1ZSB0byB0aGlzLikKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgQWRkcmVzcyBvZiB0aGUgYnVmZmVyIHRvIHByaW50IHRvLiAKLS5icgotXGZJYnVmX2xlblxmUCBBZGRyZXNzIHRvIGFuIGludGVnZXIgY29udGFpbmluZyB0aGUgc2l6ZSBvZiBidWYuIAotLmJyCi1cZklvdXRfbGVuXGZQIEluY3JlbWVudGVkIGJ5IHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLiAKLS5icgotXGZJYWxsb3dfcmVhbGxvY1xmUCBpZiBub3QgemVybyByZWFsbG9jYXRlIHRoZSBidWZmZXIgdG8gZml0IHRoZSBuZWVkZWQgc2l6ZS4gCi0uYnIKLVxmSXZhclxmUCBUaGUgXGZCdmFyaWFibGVcZlAgdG8gZW5jb2RlLiAKLS5icgotXGZJZW51bXNcZlAgVGhlIGVudW1lcmF0aW9uIGZmIHRoaXMgXGZCdmFyaWFibGVcZlAgaXMgZW51bWVyYXRlZC4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkloaW50XGZQIENvbnRlbnRzIG9mIHRoZSBESVNQTEFZLUhJTlQgY2xhdXNlIG9mIHRoZSBNSUIuIFNlZSBSRkMgMTkwMyBTZWN0aW9uIDMuMSBmb3IgZGV0YWlscy4gbWF5IGJlIE5VTEwuIAotLmJyCi1cZkl1bml0c1xmUCBDb250ZW50cyBvZiB0aGUgVU5JVFMgY2xhdXNlIG9mIHRoZSBNSUIuIG1heSBiZSBOVUxMLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotMSBvbiBzdWNjZXNzLCBvciAwIG9uIGZhaWx1cmUgKG91dCBvZiBtZW1vcnksIG9yIGJ1ZmZlciB0byBzbWFsbCB3aGVuIG5vdCBhbGxvd2VkIHRvIHJlYWxsb2MuKSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzNjMgb2YgZmlsZSBtaWIuYy4KLS5TUyAiY2hhciogdXB0aW1lX3N0cmluZyAodV9sb25nIHRpbWV0aWNrcywgY2hhciAqIGJ1ZikiCi0uUFAKLUNvbnZlcnRzIHRpbWV0aWNrcyB0byBob3VycywgbWludXRlcywgc2Vjb25kcyBzdHJpbmcuIENNVSBjb21wYXRpYmxlIGRvZXMgbm90IHNob3cgY2VudGlzZWNvbmRzLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXRpbWV0aWNrc1xmUCBUaGUgdGltZXRpY2tzIHRvIGNvbnZlcnQuIAotLmJyCi1cZklidWZcZlAgQnVmZmVyIHRvIHdyaXRlIHRvLCBoYXMgdG8gYmUgYXQgbGVhc3QgNDAgQnl0ZXMgbGFyZ2UuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1UaGUgYnVmZmVyCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotdXB0aW1lU3RyaW5nIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTgxNCBvZiBmaWxlIG1pYi5jLgotLlNIICJWYXJpYWJsZSBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJcZkJQcmVmaXhMaXN0XGZQIG1pYl9wcmVmaXhlc1tdIlxmQkluaXRpYWwgdmFsdWU6XGZQCi0uUFAKLS5uZgotIHsKLSAgICB7JlN0YW5kYXJkX1ByZWZpeFswXX0sICAgICAgCi0gICAgeycuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMid9LAotICAgIHsnLmlzby5vcmcuZG9kLmludGVybmV0LmV4cGVyaW1lbnRhbCd9LAotICAgIHsnLmlzby5vcmcuZG9kLmludGVybmV0LnByaXZhdGUnfSwKLSAgICB7Jy5pc28ub3JnLmRvZC5pbnRlcm5ldC5zbm1wUGFydGllcyd9LAotICAgIHsnLmlzby5vcmcuZG9kLmludGVybmV0LnNubXBTZWNyZXRzJ30sCi0gICAge05VTEwsIDB9ICAgICAgICAgICAgICAgICAgIAotfQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjMgb2YgZmlsZSBtaWIuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMgYi9tYW4vbmV0c25tcF9tb2RlX2VuZF9jYWxsLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU5NDFiMDkuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbW9kZV9lbmRfY2FsbC4zCisrKyAvZGV2L251bGwKQEAgLTEsNjkgKzAsMCBAQAotLlRIICJtb2RlX2VuZF9jYWxsIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbW9kZV9lbmRfY2FsbCBcLSAKLS5QUAotQXQgdGhlIGVuZCBvZiBhIHNlcmllcyBvZiByZXF1ZXN0cywgY2FsbCBhbm90aGVyIGhhbmRsZXIgaG9vay4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfbW9kZV9lbmRfY2FsbF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0XGZQICplbmRsaXN0KSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgbW9kZV9lbmRfY2FsbCBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbW9kZV9oYW5kbGVyX2xpc3RcZlAgKiBcZkJuZXRzbm1wX21vZGVfZW5kX2NhbGxfYWRkX21vZGVfY2FsbGJhY2tcZlAgKFxmQm5ldHNubXBfbW9kZV9oYW5kbGVyX2xpc3RcZlAgKmVuZGxpc3QsIGludCBtb2RlLCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpjYWxsYmFja2gpIgotLmJyCi0uUkkgIlxmSWFkZHMgYSBtb2RlIHNwZWNpZmljIGNhbGxiYWNrIHRvIHRoZSBjYWxsYmFjayBsaXN0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX21vZGVfZW5kX2NhbGxfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUF0IHRoZSBlbmQgb2YgYSBzZXJpZXMgb2YgcmVxdWVzdHMsIGNhbGwgYW5vdGhlciBoYW5kbGVyIGhvb2suIAotCi1IYW5kbGVycyB0aGF0IHdhbnQgdG8gbG9vcCB0aHJvdWdoIGEgc2VyaWVzIG9mIHJlcXVlc3RzIGFuZCB0aGVuIHJlY2VpdmUgYSBjYWxsYmFjayBhdCB0aGUgZW5kIG9mIGEgcGFydGljdWxhciBNT0RFIGNhbiB1c2UgdGhpcyBoZWxwZXIgdG8gbWFrZSB0aGlzIHBvc3NpYmxlLiBGb3IgbW9zdCBtb2R1bGVzLCB0aGlzIGlzIG5vdCBuZWVkZWQgYXMgdGhlIGhhbmRsZXIgaXRzZWxmIGNvdWxkIHBlcmZvcm0gYSBmb3IoKSBsb29wIGFyb3VuZCB0aGUgcmVxdWVzdCBsaXN0IGFuZCB0aGVuIHBlcmZvcm0gaXRzIGFjdGlvbnMgYWZ0ZXJ3YXJkcy4gSG93ZXZlciwgaWYgc29tZXRoaW5nIGxpa2UgdGhlIHNlcmlhbGl6ZSBoZWxwZXIgaXMgaW4gdXNlIHRoaXMgaXNuJ3QgcG9zc2libGUgYmVjYXVzZSBub3QgYWxsIHRoZSByZXF1ZXN0cyBmb3IgYSBnaXZlbiBoYW5kbGVyIGFyZSBiZWluZyBwYXNzZWQgZG93bndhcmQgaW4gYSBzaW5nbGUgZ3JvdXAuIFRodXMsIHRoaXMgaGVscGVyICptdXN0KiBiZSBhZGRlZCBhYm92ZSBvdGhlciBoZWxwZXJzIGxpa2UgdGhlIHNlcmlhbGl6ZSBoZWxwZXIgdG8gYmUgdXNlZnVsLgotLlBQCi1NdWx0aXBsZSBtb2RlIHNwZWNpZmljIGhhbmRsZXJzIGNhbiBiZSByZWdpc3RlcmVkIGFuZCB3aWxsIGJlIGNhbGxlZCBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIHJlZ2VzdGVyZWQgaW4uIENhbGxiYWNrcyByZWdlc3RlcmQgd2l0aCBhIG1vZGUgb2YgTkVUU05NUF9NT0RFX0VORF9BTExfTU9ERVMgd2lsbCBiZSBjYWxsZWQgZm9yIGFsbCBtb2Rlcy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X21vZGVfZW5kX2NhbGxfaGFuZGxlciAoXGZCbmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdFxmUCAqIGVuZGxpc3QpIgotLlBQCi1yZXR1cm5zIGEgbW9kZV9lbmRfY2FsbCBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWVuZGxpc3RcZlAgVGhlIGNhbGxiYWNrIGxpc3QgZm9yIHRoZSBoYW5kbGVyIHRvIG1ha2UgdXNlIG9mLiAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLUFuIGluamVjdGFibGUgTmV0LVNOTVAgaGFuZGxlci4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NSBvZiBmaWxlIG1vZGVfZW5kX2NhbGwuYy4KLS5TUyAiXGZCbmV0c25tcF9tb2RlX2hhbmRsZXJfbGlzdFxmUCogbmV0c25tcF9tb2RlX2VuZF9jYWxsX2FkZF9tb2RlX2NhbGxiYWNrIChcZkJuZXRzbm1wX21vZGVfaGFuZGxlcl9saXN0XGZQICogZW5kbGlzdCwgaW50IG1vZGUsIFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBjYWxsYmFja2gpIgotLlBQCi1hZGRzIGEgbW9kZSBzcGVjaWZpYyBjYWxsYmFjayB0byB0aGUgY2FsbGJhY2sgbGlzdC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkllbmRsaXN0XGZQIHRoZSBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmUgZm9yIHRoZSBtb2RlX2VuZF9jYWxsIGhlbHBlci4gQ2FuIGJlIE5VTEwgdG8gY3JlYXRlIGEgbmV3IGxpc3QuIAotLmJyCi1cZkltb2RlXGZQIHRoZSBtb2RlIHRvIGJlIGNhbGxlZCB1cG9uLiBBIG1vZGUgb2YgTkVUU05NUF9NT0RFX0VORF9BTExfTU9ERVMgPSBhbGwgbW9kZXMuIAotLmJyCi1cZkljYWxsYmFja2hcZlAgdGhlIG5ldHNubXBfbWliX2hhbmRsZXIgY2FsbGJhY2sgdG8gY2FsbC4gCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci10aGUgbmV3IHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBsaXN0IHVwb24gc3VjY2Vzcy4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NSBvZiBmaWxlIG1vZGVfZW5kX2NhbGwuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zIGIvbWFuL25ldHNubXBfbXVsdGlwbGV4ZXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzZiMmM0ZC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9tdWx0aXBsZXhlci4zCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotLlRIICJtdWx0aXBsZXhlciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW11bHRpcGxleGVyIFwtIAotLlBQCi1TcGxpdHMgbW9kZSByZXF1ZXN0cyBpbnRvIGNhbGxzIHRvIGRpZmZlcmVudCBoYW5kbGVycy4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfbXVsdGlwbGV4ZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQICpyZXEpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBtdWx0aXBsaXhlciBoYW5kbGVyIGdpdmVuIGEgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQIHN0cnVjdHVyZSBvZiBzdWJoYW5kbGVycy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9tdWx0aXBsZXhlcl9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJaW1wbGVtZW50cyB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1TcGxpdHMgbW9kZSByZXF1ZXN0cyBpbnRvIGNhbGxzIHRvIGRpZmZlcmVudCBoYW5kbGVycy4gCi0KLVRoZSBtdWx0aXBsZXhlciBoZWxwZXIgbGV0cyB5b3Ugc3BsaXQgdGhlIGNhbGxpbmcgY2hhaW4gZGVwZW5kaW5nIG9uIHRoZSBjYWxsaW5nIG1vZGUgKGdldCB2cyBnZXRuZXh0IHZzIHNldCkuIFVzZWZ1bCBpZiB5b3Ugd2FudCBkaWZmZXJlbnQgcm91dGluZXMgdG8gaGFuZGxlIGRpZmZlcmVudCBhc3BlY3RzIG9mIFNOTVAgcmVxdWVzdHMsIHdoaWNoIGlzIHZlcnkgY29tbW9uIGZvciBHRVQgdnMgU0VUIHR5cGUgYWN0aW9ucy4KLS5QUAotRnVuY3Rpb25hbGx5OgotLlBQCi0uSVAgIjEuIiA0Ci1HRVQgcmVxdWVzdHMgY2FsbCB0aGUgZ2V0X21ldGhvZAotLklQICIyLiIgNAotR0VUTkVYVCByZXF1ZXN0cyBjYWxsIHRoZSBnZXRuZXh0X21ldGhvZCwgb3IgaWYgbm90IHByZXNlbnQsIHRoZSBnZXRfbWV0aG9kLgotLklQICIzLiIgNAotR0VUQlVMSyByZXF1ZXN0cyBjYWxsIHRoZSBnZXRidWxrX21ldGhvZCwgb3IgaWYgbm90IHByZXNlbnQsIHRoZSBnZXRuZXh0X21ldGhvZCwgb3IgaWYgZXZlbiB0aGF0IGlzbid0IHByZXNlbnQgdGhlIGdldF9tZXRob2QuCi0uSVAgIjQuIiA0Ci1TRVQgcmVxdWVzdHMgY2FsbCB0aGUgc2V0X21ldGhvZCwgb3IgaWYgbm90IHByZXNlbnQgcmV0dXJuIGEgU05NUF9FUlJfTk9UV1JJVEFCTEUgZXJyb3IuIAotLlBQCi0KLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfbXVsdGlwbGV4ZXJfaGFuZGxlciAoXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQICogcmVxKSIKLS5QUAotcmV0dXJucyBhIG11bHRpcGxpeGVyIGhhbmRsZXIgZ2l2ZW4gYSBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgc3RydWN0dXJlIG9mIHN1YmhhbmRsZXJzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzIG9mIGZpbGUgbXVsdGlwbGV4ZXIuYy4KLS5TUyAiaW50IG5ldHNubXBfbXVsdGlwbGV4ZXJfaGVscGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotaW1wbGVtZW50cyB0aGUgbXVsdGlwbGV4ZXIgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTQgb2YgZmlsZSBtdWx0aXBsZXhlci5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmZlNmZlNC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0OCArMCwwIEBACi0uVEggIm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zIFwtIAotLlBQCi1UaGUgYWdlbnQgdHJhbnNhY3Rpb24gcmVxdWVzdCBzdHJ1Y3R1cmUuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8c25tcF9hZ2VudC5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCbW9kZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uX3NcZlAgKiBcZkJhc3BcZlAiCi0uYnIKLS5SSSAiXGZJcGR1IGNvbnRhaW5zIGF1dGhpbmZvLCBlZyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfZGF0YV9saXN0XGZQICogXGZCYWdlbnRfZGF0YVxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBhZ2VudCB0cmFuc2FjdGlvbiByZXF1ZXN0IHN0cnVjdHVyZS4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLS5QUAotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU4IG9mIGZpbGUgc25tcF9hZ2VudC5oLgotLlNIICJGaWVsZCBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJzdHJ1Y3QgXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uX3NcZlAqIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvX3M6OmFzcFxmUFxmQyBbcmVhZF1cZlAiCi0uUFAKLXBkdSBjb250YWlucyBhdXRoaW5mbywgZWcgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjIgb2YgZmlsZSBzbm1wX2FnZW50LmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX2NvbHVtbl9pbmZvX3QuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3ZTg1MmJjLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfY29sdW1uX2luZm9fdC4zCisrKyAvZGV2L251bGwKQEAgLTEsNTcgKzAsMCBAQAotLlRIICJuZXRzbm1wX2NvbHVtbl9pbmZvX3QiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX2NvbHVtbl9pbmZvX3QgXC0gCi0uUFAKLWNvbHVtbiBpbmZvIHN0cnVjdC4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDx0YWJsZS5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJjaGFyIFxmQmlzUmFuZ2VcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciBcZkJsaXN0X2NvdW50XGZQIgotLmJyCi0uUkkgIlxmSW9ubHkgdXNlZnVsIGlmIGlzUmFuZ2UgPT0gMCBcZlAiCi0udGkgLTFjCi0uUkkgInVuaW9uIHsiCi0uYnIKLS50aSAtMWMKLS5SSSAiICAgdW5zaWduZWQgaW50IFxmQnJhbmdlXGZQIFsyXSIKLS5icgotLnRpIC0xYwotLlJJICIgICB1bnNpZ25lZCBpbnQgKiBcZkJsaXN0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIn0gXGZCZGV0YWlsc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9jb2x1bW5faW5mb190XGZQICogXGZCbmV4dFxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLWNvbHVtbiBpbmZvIHN0cnVjdC4gCi0KLU9WRVJMQVBQSU5HIFJBTkdFUyBBUkUgTk9UIFNVUFBPUlRFRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MiBvZiBmaWxlIHRhYmxlLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImNoYXIgXGZCbmV0c25tcF9jb2x1bW5faW5mb190OjpsaXN0X2NvdW50XGZQIgotLlBQCi1vbmx5IHVzZWZ1bCBpZiBpc1JhbmdlID09IDAgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NSBvZiBmaWxlIHRhYmxlLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX2RhdGFfbGlzdF9zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRlNTc5YTguLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9kYXRhX2xpc3Rfcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNTIgKzAsMCBAQAotLlRIICJuZXRzbm1wX2RhdGFfbGlzdF9zIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotbmV0c25tcF9kYXRhX2xpc3RfcyBcLSAKLS5QUAotdXNlZCB0byBpdGVyYXRlIHRocm91Z2ggbGlzdHMgb2YgZGF0YSAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPGRhdGFfbGlzdC5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9kYXRhX2xpc3Rfc1xmUCAqIFxmQm5leHRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQm5hbWVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQmRhdGFcZlAiCi0uYnIKLS5SSSAiXGZJVGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgcGFzc2VkIG9uLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfRnJlZV9MaXN0X0RhdGEgKiBcZkJmcmVlX2Z1bmNcZlAiCi0uYnIKLS5SSSAiXGZJbXVzdCBrbm93IGhvdyB0byBmcmVlIG5ldHNubXBfZGF0YV9saXN0LT5kYXRhIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi11c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCBsaXN0cyBvZiBkYXRhIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDEgb2YgZmlsZSBkYXRhX2xpc3QuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidm9pZCogXGZCbmV0c25tcF9kYXRhX2xpc3Rfczo6ZGF0YVxmUCIKLS5QUAotVGhlIHBvaW50ZXIgdG8gdGhlIGRhdGEgcGFzc2VkIG9uLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ1IG9mIGZpbGUgZGF0YV9saXN0LmguCi0uU1MgIk5ldHNubXBfRnJlZV9MaXN0X0RhdGEqIFxmQm5ldHNubXBfZGF0YV9saXN0X3M6OmZyZWVfZnVuY1xmUCIKLS5QUAotbXVzdCBrbm93IGhvdyB0byBmcmVlIG5ldHNubXBfZGF0YV9saXN0LT5kYXRhIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDcgb2YgZmlsZSBkYXRhX2xpc3QuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA3MzFhZDIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDcgKzAsMCBAQAotLlRIICJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3MgXC0gCi0uUFAKLVJvb3QgcmVnaXN0cmF0aW9uIGluZm8uICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8YWdlbnRfaGFuZGxlci5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJjaGFyICogXGZCaGFuZGxlck5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJZm9yIG1yVGFibGUgbGlzdGluZ3MsIGFuZCBvdGhlciB1c2VzIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmNvbnRleHROYW1lXGZQIgotLmJyCi0uUkkgIlxmSU5VTEwgPSBkZWZhdWx0IGNvbnRleHQuIFxmUCIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCcm9vdG9pZFxmUCIKLS5icgotLlJJICJcZkl3aGVyZSBhcmUgd2UgcmVnaXN0ZXJlZCBhdD8gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCcm9vdG9pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQmhhbmRsZXJcZlAiCi0uYnIKLS5SSSAiXGZJaGFuZGxlciBkZXRhaWxzIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm1vZGVzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJwcmlvcml0eVxmUCIKLS5icgotLlJJICJcZkltb3JlIG9wdGlvbmFsIHN0dWZmIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJhbmdlX3N1YmlkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJyYW5nZV91Ym91bmRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnRpbWVvdXRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmdsb2JhbF9jYWNoZWlkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJteV9yZWdfdm9pZFxmUCIKLS5icgotLlJJICJcZkl2b2lkIHB0ciBmb3IgcmVnaXN0ZXJlZSBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUm9vdCByZWdpc3RyYXRpb24gaW5mby4gCi0KLVRoZSB2YXJpYWJsZXMgaGFuZGxlck5hbWUsIGNvbnRleHROYW1lLCBhbmQgcm9vdG9pZCBuZWVkIHRvIGJlIGFsbG9jYXRlZCBvbiB0aGUgaGVhcCwgd2hlbiB0aGUgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSBpcyB1bnJlZ2lzdGVyZWQgdXNpbmcgXGZCdW5yZWdpc3Rlcl9taWJfY29udGV4dCgpXGZQIHRoZSBjb2RlIGF0dGVtcHRzIHRvIGZyZWUgdGhlbS4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLS5QUAotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLCBhbmQgXGZCd2F0Y2hlZC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTUgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImNoYXIqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fczo6Y29udGV4dE5hbWVcZlAiCi0uUFAKLU5VTEwgPSBkZWZhdWx0IGNvbnRleHQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAwIG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3M6OmhhbmRsZXJcZlAiCi0uUFAKLWhhbmRsZXIgZGV0YWlscyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMSBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TUyAiY2hhciogXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zOjpoYW5kbGVyTmFtZVxmUCIKLS5QUAotZm9yIG1yVGFibGUgbGlzdGluZ3MsIGFuZCBvdGhlciB1c2VzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTggb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU1MgInZvaWQqIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fczo6bXlfcmVnX3ZvaWRcZlAiCi0uUFAKLXZvaWQgcHRyIGZvciByZWdpc3RlcmVlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI2IG9mIGZpbGUgYWdlbnRfaGFuZGxlci5oLgotLlNTICJpbnQgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zOjpwcmlvcml0eVxmUCIKLS5QUAotbW9yZSBvcHRpb25hbCBzdHVmZiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExNyBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TUyAib2lkKiBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX3M6OnJvb3RvaWRcZlAiCi0uUFAKLXdoZXJlIGFyZSB3ZSByZWdpc3RlcmVkIGF0PyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNSBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX2l0ZXJhdG9yX2luZm9fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNTlmNzg4Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfaXRlcmF0b3JfaW5mb19zLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLlRIICJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfaXRlcmF0b3JfaW5mb19zIFwtIAotLlBQCi1Ib2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEgU05NUCBzcGVjaWZpYyBtYW5uZXIuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8dGFibGVfaXRlcmF0b3IuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICogXGZCZ2V0X2ZpcnN0X2RhdGFfcG9pbnRcZlAiCi0uYnIKLS5SSSAiXGZJUmVzcG9uc2libGUgZm9yOiByZXR1cm5pbmcgdGhlIGZpcnN0IHNldCBvZiAnaW5kZXgnIGRhdGEsIGEgbG9vcC1jb250ZXh0IHBvaW50ZXIsIGFuZCBvcHRpb25hbGx5IGEgZGF0YSBjb250ZXh0IHBvaW50ZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9OZXh0X0RhdGFfUG9pbnQgKiBcZkJnZXRfbmV4dF9kYXRhX3BvaW50XGZQIgotLmJyCi0uUkkgIlxmSUdpdmVuIHRoZSBwcmV2aW91cyBsb29wIGNvbnRleHQsIHRoaXMgc2hvdWxkIHJldHVybiB0aGUgbmV4dCBsb29wIGNvbnRleHQsIGFzc29jaWF0ZWQgaW5kZXggc2V0IGFuZCBvcHRpb25hbGx5IGEgZGF0YSBjb250ZXh0LiBcZlAiCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfTWFrZV9EYXRhX0NvbnRleHQgKiBcZkJtYWtlX2RhdGFfY29udGV4dFxmUCIKLS5icgotLlJJICJcZklJZiBhIGRhdGEgY29udGV4dCB3YXNuJ3Qgc3VwcGxpZWQgYnkgdGhlIGdldF9maXJzdF9kYXRhX3BvaW50IG9yIGdldF9uZXh0X2RhdGFfcG9pbnQgZnVuY3Rpb25zIGFuZCB0aGUgbWFrZV9kYXRhX2NvbnRleHQgcG9pbnRlciBpcyBkZWZpbmVkLCBpdCB3aWxsIGJlIGNhbGxlZCB0byBjb252ZXJ0IGEgbG9vcCBjb250ZXh0IGludG8gYSBkYXRhIGNvbnRleHQuIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9GcmVlX0xvb3BfQ29udGV4dCAqIFxmQmZyZWVfbG9vcF9jb250ZXh0XGZQIgotLmJyCi0uUkkgIlxmSUEgZnVuY3Rpb24gd2hpY2ggc2hvdWxkIGZyZWUgdGhlIGxvb3AgY29udGV4dC4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0ZyZWVfRGF0YV9Db250ZXh0ICogXGZCZnJlZV9kYXRhX2NvbnRleHRcZlAiCi0uYnIKLS5SSSAiXGZJRnJlZXMgYSBkYXRhIGNvbnRleHQuIFxmUCIKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9GcmVlX0xvb3BfQ29udGV4dCAqIFxmQmZyZWVfbG9vcF9jb250ZXh0X2F0X2VuZFxmUCIKLS5icgotLlJJICJcZklGcmVlcyBhIGxvb3AgY29udGV4dCBhdCB0aGUgZW5kIG9mIHRoZSBlbnRpcmUgaXRlcmF0aW9uIHNlcXVlbmNlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJteXZvaWRcZlAiCi0uYnIKLS5SSSAiXGZJVGhpcyBjYW4gYmUgdXNlZCBieSBjbGllbnQgaGFuZGxlcnMgdG8gc3RvcmUgYW55IGluZm9ybWF0aW9uIHRoZXkgbmVlZC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCZmxhZ3NcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIFxmQnRhYmxlX3JlZ2luZm9cZlAiCi0uYnIKLS5SSSAiXGZJQSBwb2ludGVyIHRvIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCB0aGlzIGl0ZXJhdG9yIGlzIHJlZ2lzdGVyZWQgYWxvbmcgd2l0aC4gXGZQIgotLnRpIC0xYwotLlJJICJOZXRzbm1wX0ZpcnN0X0RhdGFfUG9pbnQgKiBcZkJnZXRfcm93X2luZGV4ZXNcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCaW5kZXhlc1xmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhvbGRzIGl0ZXJhdG9yIGluZm9ybWF0aW9uIGNvbnRhaW5pbmcgZnVuY3Rpb25zIHdoaWNoIHNob3VsZCBiZSBjYWxsZWQgYnkgdGhlIGl0ZXJhdG9yX2hhbmRsZXIgdG8gbG9vcCBvdmVyIHlvdXIgZGF0YSBzZXQgYW5kIHNvcnQgaXQgaW4gYSBTTk1QIHNwZWNpZmljIG1hbm5lci4gCi0KLVRoZSBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gdHlwZWRlZiBjYW4gYmUgdXNlZCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGNhbGxpbmcgdGhpcyBzdHJ1Y3QgaWYgeW91IHdvdWxkIHByZWZlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MyBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIk5ldHNubXBfRnJlZV9EYXRhX0NvbnRleHQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjpmcmVlX2RhdGFfY29udGV4dFxmUCIKLS5QUAotRnJlZXMgYSBkYXRhIGNvbnRleHQuIFRoaXMgd2lsbCBiZSBjYWxsZWQgYXQgYW55IHRpbWUgYSBkYXRhIGNvbnRleHQgbmVlZHMgdG8gYmUgZnJlZWQuIFRoaXMgbWF5IGJlIGF0IHRoZSBzYW1lIHRpbWUgYXMgYSBjb3JyZXNwb25kbmcgbG9vcCBjb250ZXh0IGlzIGZyZWVkLCBvciBtdWNoIG11Y2ggbGF0ZXIuIE11bHRpcGxlIGRhdGEgY29udGV4dHMgbWF5IGJlIGtlcHQgaW4gZXhpc3RlbmNlIGF0IGFueSB0aW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgyIG9mIGZpbGUgdGFibGVfaXRlcmF0b3IuaC4KLS5TUyAiTmV0c25tcF9GcmVlX0xvb3BfQ29udGV4dCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6OmZyZWVfbG9vcF9jb250ZXh0XGZQIgotLlBQCi1BIGZ1bmN0aW9uIHdoaWNoIHNob3VsZCBmcmVlIHRoZSBsb29wIGNvbnRleHQuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0ICplYWNoKiBpdGVyYXRpb24gc3RlcCwgd2hpY2ggaXMgbm90LW9wdGltYWwgZm9yIHNwZWVkIHB1cnBvc2VzLiBUaGUgdXNlIG9mIGZyZWVfbG9vcF9jb250ZXh0X2F0X2VuZCBpbnN0ZWFkIGlzIHN0cm9uZ2x5IGVuY291cmFnZWQuIFRoaXMgY2FuIGJlIHNldCB0byBOVUxMIHRvIGF2b2lkIGl0cyB1c2FnZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NSBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgIk5ldHNubXBfRnJlZV9Mb29wX0NvbnRleHQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjpmcmVlX2xvb3BfY29udGV4dF9hdF9lbmRcZlAiCi0uUFAKLUZyZWVzIGEgbG9vcCBjb250ZXh0IGF0IHRoZSBlbmQgb2YgdGhlIGVudGlyZSBpdGVyYXRpb24gc2VxdWVuY2UuIEdlbmVyYWxseSwgdGhpcyB3b3VsZCBmcmVlIHRoZSBsb29wIGNvbnRleHQgYWxsb2NhdGVkIGJ5IHRoZSBnZXRfZmlyc3RfZGF0YV9wb2ludCBmdW5jdGlvbiAod2hpY2ggd291bGQgdGhlbiBiZSB1cGRhdGVkIGJ5IGVhY2ggY2FsbCB0byB0aGUgZ2V0X25leHRfZGF0YV9wb2ludCBmdW5jdGlvbikuIEl0IGlzIG5vdCBjYWxsZWQgdW50aWwgdGhlIGdldF9uZXh0X2RhdGFfcG9pbnQgZnVuY3Rpb24gcmV0dXJucyBhIE5VTEwgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MCBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgIk5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCogXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3M6OmdldF9maXJzdF9kYXRhX3BvaW50XGZQIgotLlBQCi1SZXNwb25zaWJsZSBmb3I6IHJldHVybmluZyB0aGUgZmlyc3Qgc2V0IG9mICdpbmRleCcgZGF0YSwgYSBsb29wLWNvbnRleHQgcG9pbnRlciwgYW5kIG9wdGlvbmFsbHkgYSBkYXRhIGNvbnRleHQgcG9pbnRlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NyBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgIk5ldHNubXBfTmV4dF9EYXRhX1BvaW50KiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6Z2V0X25leHRfZGF0YV9wb2ludFxmUCIKLS5QUAotR2l2ZW4gdGhlIHByZXZpb3VzIGxvb3AgY29udGV4dCwgdGhpcyBzaG91bGQgcmV0dXJuIHRoZSBuZXh0IGxvb3AgY29udGV4dCwgYXNzb2NpYXRlZCBpbmRleCBzZXQgYW5kIG9wdGlvbmFsbHkgYSBkYXRhIGNvbnRleHQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjIgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJOZXRzbm1wX01ha2VfRGF0YV9Db250ZXh0KiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6bWFrZV9kYXRhX2NvbnRleHRcZlAiCi0uUFAKLUlmIGEgZGF0YSBjb250ZXh0IHdhc24ndCBzdXBwbGllZCBieSB0aGUgZ2V0X2ZpcnN0X2RhdGFfcG9pbnQgb3IgZ2V0X25leHRfZGF0YV9wb2ludCBmdW5jdGlvbnMgYW5kIHRoZSBtYWtlX2RhdGFfY29udGV4dCBwb2ludGVyIGlzIGRlZmluZWQsIGl0IHdpbGwgYmUgY2FsbGVkIHRvIGNvbnZlcnQgYSBsb29wIGNvbnRleHQgaW50byBhIGRhdGEgY29udGV4dC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2OCBvZiBmaWxlIHRhYmxlX2l0ZXJhdG9yLmguCi0uU1MgInZvaWQqIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zOjpteXZvaWRcZlAiCi0uUFAKLVRoaXMgY2FuIGJlIHVzZWQgYnkgY2xpZW50IGhhbmRsZXJzIHRvIHN0b3JlIGFueSBpbmZvcm1hdGlvbiB0aGV5IG5lZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTQgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fczo6dGFibGVfcmVnaW5mb1xmUCIKLS5QUAotQSBwb2ludGVyIHRvIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCB0aGlzIGl0ZXJhdG9yIGlzIHJlZ2lzdGVyZWQgYWxvbmcgd2l0aC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDAgb2YgZmlsZSB0YWJsZV9pdGVyYXRvci5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzNjc5MWIxLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMuMworKysgL2Rldi9udWxsCkBAIC0xLDIwICswLDAgQEAKLS5USCAibmV0c25tcF9taWJfaGFuZGxlcl9hY2Nlc3NfbWV0aG9kcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfbWliX2hhbmRsZXJfYWNjZXNzX21ldGhvZHMgXC0gCi0uUFAKLURlZmluZXMgdGhlIGFjY2VzcyBtZXRob2RzIHRvIGJlIGNhbGxlZCBieSB0aGUgYWNjZXNzX211bHRpcGxleGVyIGhlbHBlci4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxiYWJ5X3N0ZXBzLmg+XGZQCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotRGVmaW5lcyB0aGUgYWNjZXNzIG1ldGhvZHMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBhY2Nlc3NfbXVsdGlwbGV4ZXIgaGVscGVyLiAKLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzNGFlMDkuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyMCArMCwwIEBACi0uVEggIm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kcyBcLSAKLS5QUAotRGVmaW5lcyB0aGUgc3ViaGFuZGxlcnMgdG8gYmUgY2FsbGVkIGJ5IHRoZSBtdWx0aXBsZXhlciBoZWxwZXIuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8bXVsdGlwbGV4ZXIuaD5cZlAKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1EZWZpbmVzIHRoZSBzdWJoYW5kbGVycyB0byBiZSBjYWxsZWQgYnkgdGhlIG11bHRpcGxleGVyIGhlbHBlci4gCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX21pYl9oYW5kbGVyX3MuMyBiL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2NWZiM2NhLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfbWliX2hhbmRsZXJfcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLlRIICJuZXRzbm1wX21pYl9oYW5kbGVyX3MiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1uZXRzbm1wX21pYl9oYW5kbGVyX3MgXC0gCi0uUFAKLXRoZSBtaWIgaGFuZGxlciBzdHJ1Y3R1cmUgdG8gYmUgcmVnaXN0ZXJlZCAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPGFnZW50X2hhbmRsZXIuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmhhbmRsZXJfbmFtZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbXl2b2lkXGZQIgotLmJyCi0uUkkgIlxmSWZvciBoYW5kbGVyJ3MgaW50ZXJuYWwgdXNlIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmZsYWdzXGZQIgotLmJyCi0uUkkgIlxmSWZvciBhZ2VudF9oYW5kbGVyJ3MgaW50ZXJuYWwgdXNlIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50KCogXGZCYWNjZXNzX21ldGhvZFxmUCApKHN0cnVjdCBcZkJuZXRzbm1wX21pYl9oYW5kbGVyX3NcZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fc1xmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9fc1xmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fc1xmUCAqKSIKLS5icgotLlJJICJcZklpZiB5b3UgYWRkIG1vcmUgbWVtYmVycywgeW91IHByb2JhYmx5IGFsc28gd2FudCB0byB1cGRhdGUgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkKCogXGZCZGF0YV9mcmVlXGZQICkodm9pZCAqXGZCbXl2b2lkXGZQKSIKLS5icgotLlJJICJcZklkYXRhIGZyZWUgaG9vayBmb3IgbXl2b2lkIFxmUCIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCAqIFxmQm5leHRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCAqIFxmQnByZXZcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi10aGUgbWliIGhhbmRsZXIgc3RydWN0dXJlIHRvIGJlIHJlZ2lzdGVyZWQgCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLS5QUAotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDggb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCgqIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfczo6YWNjZXNzX21ldGhvZFxmUCkoc3RydWN0IFxmQm5ldHNubXBfbWliX2hhbmRsZXJfc1xmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbl9zXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zXGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zXGZQICopIgotLlBQCi1pZiB5b3UgYWRkIG1vcmUgbWVtYmVycywgeW91IHByb2JhYmx5IGFsc28gd2FudCB0byB1cGRhdGUgX2Nsb25lX2hhbmRsZXIgaW4gXGZCYWdlbnRfaGFuZGxlci5jXGZQLiAKLS5TUyAidm9pZCgqIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfczo6ZGF0YV9mcmVlXGZQKSh2b2lkICpcZkJteXZvaWRcZlApIgotLlBQCi1kYXRhIGZyZWUgaG9vayBmb3IgbXl2b2lkIAotLlNTICJpbnQgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zOjpmbGFnc1xmUCIKLS5QUAotZm9yIGFnZW50X2hhbmRsZXIncyBpbnRlcm5hbCB1c2UgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1MyBvZiBmaWxlIGFnZW50X2hhbmRsZXIuaC4KLS5TUyAidm9pZCogXGZCbmV0c25tcF9taWJfaGFuZGxlcl9zOjpteXZvaWRcZlAiCi0uUFAKLWZvciBoYW5kbGVyJ3MgaW50ZXJuYWwgdXNlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTEgb2YgZmlsZSBhZ2VudF9oYW5kbGVyLmguCi0KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMgYi9tYW4vbmV0c25tcF9uZXRzbm1wX3JlcXVlc3RfaW5mb19zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1YmQxNjguLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF9yZXF1ZXN0X2luZm9fcy4zCisrKyAvZGV2L251bGwKQEAgLTEsMTE1ICswLDAgQEAKLS5USCAibmV0c25tcF9yZXF1ZXN0X2luZm9fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfcmVxdWVzdF9pbmZvX3MgXC0gCi0uUFAKLVRoZSBuZXRzbm1wIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8c25tcF9hZ2VudC5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJyZXF1ZXN0dmJcZlAiCi0uYnIKLS5SSSAiXGZJXGZCdmFyaWFibGVcZlAgYmluZGluZ3MgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqIFxmQnBhcmVudF9kYXRhXGZQIgotLmJyCi0uUkkgIlxmSWNhbiBiZSB1c2VkIHRvIHBhc3MgaW5mb3JtYXRpb24gb24gYSBwZXItcmVxdWVzdCBiYXNpcyBmcm9tIGEgaGVscGVyIHRvIHRoZSBsYXRlciBoYW5kbGVycyBcZlAiCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb19zXGZQICogXGZCYWdlbnRfcmVxX2luZm9cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCcmFuZ2VfZW5kXGZQIgotLmJyCi0uUkkgIlxmSWRvbid0IGZyZWUsIHJlZmVyZW5jZSB0byAoc3RydWN0IFxmQnRyZWVcZlApLT5lbmQgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCcmFuZ2VfZW5kX2xlblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZGVsZWdhdGVkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJwcm9jZXNzZWRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmluY2x1c2l2ZVxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc3RhdHVzXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJpbmRleFxmUCIKLS5icgotLlJJICJcZklpbmRleCBpbiBvcmlnaW5hbCBwZHUgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCcmVwZWF0XGZQIgotLmJyCi0uUkkgIlxmSWdldC1idWxrIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm9yaWdfcmVwZWF0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnJlcXVlc3R2Yl9zdGFydFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9fc1xmUCAqIFxmQm5leHRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3NcZlAgKiBcZkJwcmV2XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX3N1YnRyZWVfc1xmUCAqIFxmQnN1YnRyZWVcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgbmV0c25tcCByZXF1ZXN0IGluZm8gc3RydWN0dXJlLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotLlBQCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NCBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3M6OmluZGV4XGZQIgotLlBQCi1pbmRleCBpbiBvcmlnaW5hbCBwZHUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NCBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLS5TUyAiXGZCbmV0c25tcF9kYXRhX2xpc3RcZlAqIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3M6OnBhcmVudF9kYXRhXGZQIgotLlBQCi1jYW4gYmUgdXNlZCB0byBwYXNzIGluZm9ybWF0aW9uIG9uIGEgcGVyLXJlcXVlc3QgYmFzaXMgZnJvbSBhIGhlbHBlciB0byB0aGUgbGF0ZXIgaGFuZGxlcnMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NCBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLS5TUyAib2lkKiBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zOjpyYW5nZV9lbmRcZlAiCi0uUFAKLWRvbid0IGZyZWUsIHJlZmVyZW5jZSB0byAoc3RydWN0IFxmQnRyZWVcZlApLT5lbmQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MiBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLS5TUyAiaW50IFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvX3M6OnJlcGVhdFxmUCIKLS5QUAotZ2V0LWJ1bGsgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NyBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLS5TUyAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQKiBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb19zOjpyZXF1ZXN0dmJcZlAiCi0uUFAKLVxmQnZhcmlhYmxlXGZQIGJpbmRpbmdzIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1OCBvZiBmaWxlIHNubXBfYWdlbnQuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlYzVlOWIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zLjMKKysrIC9kZXYvbnVsbApAQCAtMSw3MyArMCwwIEBACi0uVEggIm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fcyBcLSAKLS5QUAotVGFibGUgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZS4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDx0YWJsZS5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJpbmRleGVzXGZQIgotLmJyCi0uUkkgIlxmSWxpc3Qgb2YgdmFyYmluZHMgd2l0aCBvbmx5ICd0eXBlJyBzZXQgXGZQIgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCbnVtYmVyX2luZGV4ZXNcZlAiCi0uYnIKLS5SSSAiXGZJY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IFxmUCIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQm1pbl9jb2x1bW5cZlAiCi0uYnIKLS5SSSAiXGZJdGhlIG1pbmltdW0gY29sdW1ucyBudW1iZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQm1heF9jb2x1bW5cZlAiCi0uYnIKLS5SSSAiXGZJdGhlIG1heGltdW0gY29sdW1ucyBudW1iZXIgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NvbHVtbl9pbmZvXGZQICogXGZCdmFsaWRfY29sdW1uc1xmUCIKLS5icgotLlJJICJcZkltb3JlIGRldGFpbHMgb24gY29sdW1ucyBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGFibGUgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3NCBvZiBmaWxlIHRhYmxlLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCogXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zOjppbmRleGVzXGZQIgotLlBQCi1saXN0IG9mIHZhcmJpbmRzIHdpdGggb25seSAndHlwZScgc2V0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzYgb2YgZmlsZSB0YWJsZS5oLgotLlNTICJ1bnNpZ25lZCBpbnQgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zOjptYXhfY29sdW1uXGZQIgotLlBQCi10aGUgbWF4aW11bSBjb2x1bW5zIG51bWJlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg3IG9mIGZpbGUgdGFibGUuaC4KLS5TUyAidW5zaWduZWQgaW50IFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9fczo6bWluX2NvbHVtblxmUCIKLS5QUAotdGhlIG1pbmltdW0gY29sdW1ucyBudW1iZXIuIElmIHRoZXJlIGFyZSBjb2x1bW5zIGluLWJldHdlZW4gd2hpY2ggYXJlIG5vdCB2YWxpZCwgdXNlIHZhbGlkX2NvbHVtbnMgdG8gZ2V0IGF1dG9tYXRpYyBjb2x1bW4gcmFuZ2UgY2hlY2tpbmcuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUgb2YgZmlsZSB0YWJsZS5oLgotLlNTICJ1bnNpZ25lZCBpbnQgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb19zOjpudW1iZXJfaW5kZXhlc1xmUCIKLS5QUAotY2FsY3VsYXRlZCBhdXRvbWF0aWNhbGx5IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzggb2YgZmlsZSB0YWJsZS5oLgotLlNTICJcZkJuZXRzbm1wX2NvbHVtbl9pbmZvXGZQKiBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvX3M6OnZhbGlkX2NvbHVtbnNcZlAiCi0uUFAKLW1vcmUgZGV0YWlscyBvbiBjb2x1bW5zIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTAgb2YgZmlsZSB0YWJsZS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zIGIvbWFuL25ldHNubXBfbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NTZjODY5Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX25ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MuMworKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLS5USCAibmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9fcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3MgXC0gCi0uUFAKLVRoZSB0YWJsZSByZXF1ZXN0IGluZm8gc3RydWN0dXJlLiAgCi0KLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5QUAotXGZDI2luY2x1ZGUgPHRhYmxlLmg+XGZQCi0uU1MgIkRhdGEgRmllbGRzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJjb2xudW1cZlAiCi0uYnIKLS5SSSAiXGZJMCBpZiBPSUQgbm90IGxvbmcgZW5vdWdoIFxmUCIKLS50aSAtMWMKLS5SSSAidW5zaWduZWQgaW50IFxmQm51bWJlcl9pbmRleGVzXGZQIgotLmJyCi0uUkkgIlxmSTAgaWYgZmFpbHVyZSB0byBwYXJzZSBhbnkgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJpbmRleGVzXGZQIgotLmJyCi0uUkkgIlxmSWNvbnRlbnRzIGZyZWVkIGJ5IGhlbHBlciB1cG9uIGV4aXQgXGZQIgotLnRpIC0xYwotLlJJICJvaWQgXGZCaW5kZXhfb2lkXGZQIFtNQVhfT0lEX0xFTl0iCi0uYnIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmluZGV4X29pZF9sZW5cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIFxmQnJlZ19pbmZvXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHRhYmxlIHJlcXVlc3QgaW5mbyBzdHJ1Y3R1cmUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAyIG9mIGZpbGUgdGFibGUuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidW5zaWduZWQgaW50IFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3M6OmNvbG51bVxmUCIKLS5QUAotMCBpZiBPSUQgbm90IGxvbmcgZW5vdWdoIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA0IG9mIGZpbGUgdGFibGUuaC4KLS5TUyAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQKiBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb19zOjppbmRleGVzXGZQIgotLlBQCi1jb250ZW50cyBmcmVlZCBieSBoZWxwZXIgdXBvbiBleGl0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA4IG9mIGZpbGUgdGFibGUuaC4KLS5TUyAidW5zaWduZWQgaW50IFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvX3M6Om51bWJlcl9pbmRleGVzXGZQIgotLlBQCi0wIGlmIGZhaWx1cmUgdG8gcGFyc2UgYW55IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA2IG9mIGZpbGUgdGFibGUuaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX29pZF9zdGFzaC4zIGIvbWFuL25ldHNubXBfb2lkX3N0YXNoLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhYjAzNGIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfb2lkX3N0YXNoLjMKKysrIC9kZXYvbnVsbApAQCAtMSwyMTAgKzAsMCBAQAotLlRIICJTdG9yZSBhbmQgcmV0cmlldmUgZGF0YSByZWZlcmVuY2VkIGJ5IGFuIE9JRC4iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1TdG9yZSBhbmQgcmV0cmlldmUgZGF0YSByZWZlcmVuY2VkIGJ5IGFuIE9JRC4gXC0gCi0uUFAKLVRoaXMgaXMgZXNzZW50aWFsbHkgYSB3YXkgb2Ygc3RvcmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogXGZCbmV0c25tcF9vaWRfc3Rhc2hfY3JlYXRlX3NpemVkX25vZGVcZlAgKHNpemVfdCBteXNpemUpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZSBhbiBuZXRzbm1wX29pZF9zdGFzaCBcZkJub2RlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiBcZkJuZXRzbm1wX29pZF9zdGFzaF9jcmVhdGVfbm9kZVxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJQ3JlYXRlcyBhIG5ldHNubXBfb2lkX3N0YXNoX25vZGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2lkX3N0YXNoX2FkZF9kYXRhXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICoqcm9vdCwgb2lkICpsb29rdXAsIHNpemVfdCBsb29rdXBfbGVuLCB2b2lkICpteWRhdGEpIgotLmJyCi0uUkkgIlxmSWFkZHMgZGF0YSB0byB0aGUgc3Rhc2ggYXQgYSBnaXZlbiBvaWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIFxmQm5ldHNubXBfb2lkX3N0YXNoX2dldF9ub2RlXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICpyb290LCBvaWQgKmxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBcZkJub2RlXGZQIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogXGZCbmV0c25tcF9vaWRfc3Rhc2hfZ2V0bmV4dF9ub2RlXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICpyb290LCBvaWQgKmxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIG5leHQgXGZCbm9kZVxmUCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICpyb290LCBvaWQgKmxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBkYXRhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX29pZF9zdGFzaF9zdG9yZV9hbGxcZlAgKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpIgotLmJyCi0uUkkgIlxmSWEgd3JhcHBlciBhcm91bmQgbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmUgZm9yIHVzZSB3aXRoIGEgXGZCc25tcF9hbGFybVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfb2lkX3N0YXNoX3N0b3JlXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICpyb290LCBjb25zdCBjaGFyICp0b2tlbm5hbWUsIE5ldFNOTVBTdGFzaER1bXAgKmR1bXBmbiwgb2lkICpjdXJvaWQsIHNpemVfdCBjdXJvaWRfbGVuKSIKLS5icgotLlJJICJcZklzdG9yZXMgZGF0YSBpbiBhIHN0YXJzaCBcZkJ0cmVlXGZQIHRvIHBlcmlzdGVudCBzdG9yYWdlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCb2lkX3N0YXNoX2R1bXBcZlAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKnJvb3QsIGNoYXIgKnByZWZpeCkiCi0uYnIKLS5SSSAiXGZJRm9yIGRlYnVnZ2luZzogZHVtcCB0aGUgbmV0c25tcF9vaWRfc3Rhc2ggXGZCdHJlZVxmUCB0byBzdGRvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX29pZF9zdGFzaF9mcmVlXGZQIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICoqcm9vdCwgTmV0U05NUFN0YXNoRnJlZU5vZGUgKmZyZWVmbikiCi0uYnIKLS5SSSAiXGZJRnJlZXMgdGhlIGNvbnRlbnRzIG9mIGEgbmV0c25tcF9vaWRfc3Rhc2ggXGZCdHJlZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfb2lkX3N0YXNoX25vX2ZyZWVcZlAgKHZvaWQgKmJvZ3VzKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoaXMgaXMgZXNzZW50aWFsbHkgYSB3YXkgb2Ygc3RvcmluZyBkYXRhIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gCi0KLUl0IHN0b3JlcyBhIGJ1bmNoIG9mIGRhdGEgcG9pbnRlcnMgd2l0aGluIGEgbWVtb3J5IFxmQnRyZWVcZlAgdGhhdCBhbGxvd3MgZmFpcmx5IGVmZmljaWVudCBsb29rdXBzIHdpdGggYSBoZWF2aWx5IHBvcHVsYXRlZCBcZkJ0cmVlXGZQLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfb2lkX3N0YXNoX2FkZF9kYXRhIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICoqIHJvb3QsIG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4sIHZvaWQgKiBteWRhdGEpIgotLlBQCi1hZGRzIGRhdGEgdG8gdGhlIHN0YXNoIGF0IGEgZ2l2ZW4gb2lkLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJvb3RcZlAgdGhlIHRvcCBvZiB0aGUgc3Rhc2ggXGZCdHJlZVxmUCAKLS5icgotXGZJbG9va3VwXGZQIHRoZSBvaWQgaW5kZXggdG8gc3RvcmUgdGhlIGRhdGEgYXQuIAotLmJyCi1cZklsb29rdXBfbGVuXGZQIHRoZSBsZW5ndGggb2YgdGhlIGxvb2t1cCBvaWQuIAotLmJyCi1cZklteWRhdGFcZlAgdGhlIGRhdGEgdG8gc3RvcmUKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVNOTVBFUlJfU1VDQ0VTUyBvbiBzdWNjZXNzLCBTTk1QRVJSX0dFTkVSUiBpZiBkYXRhIGlzIGFscmVhZHkgdGhlcmUsIFNOTVBFUlJfTUFMTE9DIG9uIG1hbGxvYyBmYWlsdXJlcyBvciBpZiBhcmd1bWVudHMgcGFzc2VkIGluIHdpdGggTlVMTCB2YWx1ZXMuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODMgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCogbmV0c25tcF9vaWRfc3Rhc2hfY3JlYXRlX25vZGUgKHZvaWQpIgotLlBQCi1DcmVhdGVzIGEgbmV0c25tcF9vaWRfc3Rhc2hfbm9kZS4gQXNzdW1lcyB5b3Ugd2FudCB0aGUgZGVmYXVsdCBPSURfU1RBU0hfQ0hJTERSRU5fU0laRSBoYXNoIHNpemUgZm9yIHRoZSBcZkJub2RlXGZQLiAKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1OVUxMIG9uIGVycm9yLCBvdGhlcndpc2UgdGhlIG5ld2x5IGFsbG9jYXRlZCBcZkJub2RlXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjYgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCogbmV0c25tcF9vaWRfc3Rhc2hfY3JlYXRlX3NpemVkX25vZGUgKHNpemVfdCBteXNpemUpIgotLlBQCi1DcmVhdGUgYW4gbmV0c25tcF9vaWRfc3Rhc2ggXGZCbm9kZVxmUC4gXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklteXNpemVcZlAgdGhlIHNpemUgb2YgdGhlIGNoaWxkIHBvaW50ZXIgYXJyYXkKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU5VTEwgb24gZXJyb3IsIG90aGVyd2lzZSB0aGUgbmV3bHkgYWxsb2NhdGVkIFxmQm5vZGVcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NiBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJ2b2lkIG5ldHNubXBfb2lkX3N0YXNoX2ZyZWUgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiogcm9vdCwgTmV0U05NUFN0YXNoRnJlZU5vZGUgKiBmcmVlZm4pIgotLlBQCi1GcmVlcyB0aGUgY29udGVudHMgb2YgYSBuZXRzbm1wX29pZF9zdGFzaCBcZkJ0cmVlXGZQLiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJvb3RcZlAgdGhlIHRvcCBvZiB0aGUgXGZCdHJlZVxmUCAob3IgYnJhbmNoIHRvIGJlIGZyZWVkKSAKLS5icgotXGZJZnJlZWZuXGZQIFRoZSBmdW5jdGlvbiB0byBiZSBjYWxsZWQgb24gZWFjaCBkYXRhICh2b2lkICopIHBvaW50ZXIuIElmIGxlZnQgTlVMTCB0aGUgc3lzdGVtIGZyZWUoKSBmdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQwMSBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX29pZF9zdGFzaF9nZXRfZGF0YSAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIHJvb3QsIG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgZGF0YSBwb2ludGVyIGFzc29jaWF0ZWQgd2l0aCBhIGdpdmVuIE9JRC4gVGhpcyBpcyBlcXVpdmVsZW50IHRvIG5ldHNubXBfb2lkX3N0YXNoX2dldF9ub2RlLCBidXQgcmV0dXJucyBvbmx5IHRoZSBkYXRhIG5vdCB0aGUgZW50aXJlIFxmQm5vZGVcZlAuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcm9vdFxmUCB0aGUgdG9wIG9mIHRoZSBzdGFzaCAKLS5icgotXGZJbG9va3VwXGZQIHRoZSBvaWQgdG8gc2VhcmNoIGZvciAKLS5icgotXGZJbG9va3VwX2xlblxmUCB0aGUgbGVuZ3RoIG9mIHRoZSBzZWFyY2ggb2lkLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4MiBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQKiBuZXRzbm1wX29pZF9zdGFzaF9nZXRfbm9kZSAoXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCAqIHJvb3QsIG9pZCAqIGxvb2t1cCwgc2l6ZV90IGxvb2t1cF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgXGZCbm9kZVxmUCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcm9vdFxmUCB0aGUgdG9wIG9mIHRoZSBzdGFzaCBcZkJ0cmVlXGZQIAotLmJyCi1cZklsb29rdXBcZlAgdGhlIG9pZCB0byBsb29rIHVwIGEgXGZCbm9kZVxmUCBmb3IuIAotLmJyCi1cZklsb29rdXBfbGVuXGZQIHRoZSBsZW5ndGggb2YgdGhlIGxvb2t1cCBvaWQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTQgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCogbmV0c25tcF9vaWRfc3Rhc2hfZ2V0bmV4dF9ub2RlIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogcm9vdCwgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikiCi0uUFAKLXJldHVybnMgdGhlIG5leHQgXGZCbm9kZVxmUCBhc3NvY2lhdGVkIHdpdGggYSBnaXZlbiBPSUQuIElOQ09NUExFVEUuIFRoaXMgaXMgZXF1aXZlbGVudCB0byBhIEdFVE5FWFQgb3BlcmF0aW9uLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5MSBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNTICJ2b2lkIG5ldHNubXBfb2lkX3N0YXNoX3N0b3JlIChcZkJuZXRzbm1wX29pZF9zdGFzaF9ub2RlXGZQICogcm9vdCwgY29uc3QgY2hhciAqIHRva2VubmFtZSwgTmV0U05NUFN0YXNoRHVtcCAqIGR1bXBmbiwgb2lkICogY3Vyb2lkLCBzaXplX3QgY3Vyb2lkX2xlbikiCi0uUFAKLXN0b3JlcyBkYXRhIGluIGEgc3RhcnNoIFxmQnRyZWVcZlAgdG8gcGVyaXN0ZW50IHN0b3JhZ2UuIFRoaXMgZnVuY3Rpb24gY2FuIGJlIGNhbGxlZCB0byBzYXZlIGFsbCBkYXRhIGluIGEgc3Rhc2ggXGZCdHJlZVxmUCB0byBOZXQtU05NUCdzIHBlcmNlbnQgc3RvcmFnZS4gTWFrZSBzdXJlIHlvdSByZWdpc3RlciBhIHBhcnNpbmcgZnVuY3Rpb24gd2l0aCB0aGUgcmVhZF9jb25maWcgc3lzdGVtIHRvIHJlLWluY29ycGVyYXRlIHlvdXIgc2F2ZWQgZGF0YSBpbnRvIGZ1dHVyZSB0cmVlcy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyb290XGZQIHRoZSB0b3Agb2YgdGhlIHN0YXNoIHRvIHN0b3JlLiAKLS5icgotXGZJdG9rZW5uYW1lXGZQIHRoZSBmaWxlIHRva2VuIG5hbWUgdG8gc2F2ZSBpbiAocGFzc2luZyAnc25tcGQnIHdpbGwgc2F2ZSB0aGluZ3MgaW50byBzbm1wZC5jb25mKS4gCi0uYnIKLVxmSWR1bXBmblxmUCBBIGZ1bmN0aW9uIHdoaWNoIGNhbiBkdW1wIHRoZSBkYXRhIHN0b3JlZCBhdCBhIHBhcnRpY3VsYXIgXGZCbm9kZVxmUCBpbnRvIGEgY2hhciBidWZmZXIuIAotLmJyCi1cZkljdXJvaWRcZlAgbXVzdCBiZSBhIHBvaW50ZXIgdG8gYSBPSUQgYXJyYXkgb2YgbGVuZ3RoIE1BWF9PSURfTEVOLiAKLS5icgotXGZJY3Vyb2lkX2xlblxmUCBtdXN0IGJlIDAgZm9yIHRoZSB0b3AgbGV2ZWwgY2FsbC4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMzQgb2YgZmlsZSBvaWRfc3Rhc2guYy4KLS5TUyAiaW50IG5ldHNubXBfb2lkX3N0YXNoX3N0b3JlX2FsbCAoaW50IG1ham9ySUQsIGludCBtaW5vcklELCB2b2lkICogc2VydmVyYXJnLCB2b2lkICogY2xpZW50YXJnKSIKLS5QUAotYSB3cmFwcGVyIGFyb3VuZCBuZXRzbm1wX29pZF9zdGFzaF9zdG9yZSBmb3IgdXNlIHdpdGggYSBcZkJzbm1wX2FsYXJtXGZQLiB3aGVuIGNhbGxpbmcgXGZCc25tcF9hbGFybVxmUCwgeW91IGNhbiBsaXN0IHRoaXMgYXMgYSBjYWxsYmFjay4gVGhlIGNsaWVudGFyZyBzaG91bGQgYmUgYSBwb2ludGVyIHRvIGEgbmV0c25tcF9vaWRfc3Rhc2hfc2F2ZV9pbmZvIHBvaW50ZXIuIEl0IGNhbiBhbHNvIGJlIGNhbGxlZCBkaXJlY3RseSwgb2YgY291cnNlLiBUaGUgbGFzdCBhcmd1bWVudCAoY2xpZW50YXJnKSBpcyB0aGUgb25seSBvbmUgdGhhdCBpcyB1c2VkLiBUaGUgcmVzdCBhcmUgaWdub3JlZCBieSB0aGUgZnVuY3Rpb24uIAotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW1ham9ySURcZlAgCi0uYnIKLVxmSW1pbm9ySURcZlAgCi0uYnIKLVxmSXNlcnZlcmFyZ1xmUCAKLS5icgotXGZJY2xpZW50YXJnXGZQIEEgcG9pbnRlciB0byBhIG5ldHNubXBfb2lkX3N0YXNoX3NhdmVfaW5mbyBzdHJ1Y3R1cmUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzA0IG9mIGZpbGUgb2lkX3N0YXNoLmMuCi0uU1MgInZvaWQgb2lkX3N0YXNoX2R1bXAgKFxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiByb290LCBjaGFyICogcHJlZml4KSIKLS5QUAotRm9yIGRlYnVnZ2luZzogZHVtcCB0aGUgbmV0c25tcF9vaWRfc3Rhc2ggXGZCdHJlZVxmUCB0byBzdGRvdXQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcm9vdFxmUCBUaGUgdG9wIG9mIHRoZSBcZkJ0cmVlXGZQIAotLmJyCi1cZklwcmVmaXhcZlAgYSBjaGFyYWN0ZXIgc3RyaW5nIHByZWZpeCBwcmludGVkIHRvIHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBsaW5lLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3NCBvZiBmaWxlIG9pZF9zdGFzaC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX29sZF9hcGkuMyBiL21hbi9uZXRzbm1wX29sZF9hcGkuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWU2Y2M3NS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9vbGRfYXBpLjMKKysrIC9kZXYvbnVsbApAQCAtMSw2MCArMCwwIEBACi0uVEggIm9sZF9hcGkiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1vbGRfYXBpIFwtIAotLlBQCi1DYWxscyBtaWIgXGZCbW9kdWxlXGZQIGNvZGUgd3JpdHRlbiBpbiB0aGUgb2xkIHN0eWxlIG9mIGNvZGUuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQmdldF9vbGRfYXBpX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBvbGRfYXBpIGhhbmRsZXIgdGhhdCBzaG91bGQgYmUgdGhlIGZpbmFsIGNhbGxpbmcgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpXGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIGNvbnN0IGNoYXIgKmNvbnRleHQsIGludCB0aW1lb3V0LCBpbnQgZmxhZ3MpIgotLmJyCi0uUkkgIlxmSVJlZ2lzdGVycyBhbiBvbGQgQVBJIHNldCBpbnRvIHRoZSBtaWIgXGZCdHJlZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93XGZQIChjb25zdCBjaGFyICptb2R1bGVOYW1lLCBzdHJ1Y3QgXGZCdmFyaWFibGVcZlAgKnZhciwgc2l6ZV90IHZhcnNpemUsIHNpemVfdCBudW12YXJzLCBvaWQgKm1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgdmFyX3N1YmlkLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBjb25zdCBjaGFyICpjb250ZXh0LCBpbnQgdGltZW91dCwgaW50IGZsYWdzKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgYSByb3cgd2l0aGluIGEgbWliIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfb2xkX2FwaV9oZWxwZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSWltcGxlbWVudHMgdGhlIG9sZF9hcGkgaGFuZGxlciBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQ2FsbHMgbWliIFxmQm1vZHVsZVxmUCBjb2RlIHdyaXR0ZW4gaW4gdGhlIG9sZCBzdHlsZSBvZiBjb2RlLiAKLQotVGhpcyBpcyBhIGJhY2t3YXJkcyBjb21wYXRpbGliaXR5IFxmQm1vZHVsZVxmUCB0aGF0IGFsbG93cyBjb2RlIHdyaXR0ZW4gaW4gdGhlIG9sZCBBUEkgdG8gYmUgcnVuIHVuZGVyIHRoZSBuZXcgaGFuZGxlciBiYXNlZCBhcmNoaXRlY3R1cmUuIFVzZSBpdCBieSBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgpXGZQLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogZ2V0X29sZF9hcGlfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBvbGRfYXBpIGhhbmRsZXIgdGhhdCBzaG91bGQgYmUgdGhlIGZpbmFsIGNhbGxpbmcgaGFuZGxlci4gRG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24uIFVzZSB0aGUgXGZCbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpKClcZlAgZnVuY3Rpb24gaW5zdGVhZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzNyBvZiBmaWxlIG9sZF9hcGkuYy4KLS5TUyAiaW50IG5ldHNubXBfb2xkX2FwaV9oZWxwZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotaW1wbGVtZW50cyB0aGUgb2xkX2FwaSBoYW5kbGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI2IG9mIGZpbGUgb2xkX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93IChjb25zdCBjaGFyICogbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICogdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqIG1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgdmFyX3N1YmlkLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBzcywgY29uc3QgY2hhciAqIGNvbnRleHQsIGludCB0aW1lb3V0LCBpbnQgZmxhZ3MpIgotLlBQCi1yZWdpc3RlcnMgYSByb3cgd2l0aGluIGEgbWliIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA3IG9mIGZpbGUgb2xkX2FwaS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9vbGRfYXBpIChjb25zdCBjaGFyICogbW9kdWxlTmFtZSwgc3RydWN0IFxmQnZhcmlhYmxlXGZQICogdmFyLCBzaXplX3QgdmFyc2l6ZSwgc2l6ZV90IG51bXZhcnMsIG9pZCAqIG1pYmxvYywgc2l6ZV90IG1pYmxvY2xlbiwgaW50IHByaW9yaXR5LCBpbnQgcmFuZ2Vfc3ViaWQsIG9pZCByYW5nZV91Ym91bmQsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqIHNzLCBjb25zdCBjaGFyICogY29udGV4dCwgaW50IHRpbWVvdXQsIGludCBmbGFncykiCi0uUFAKLVJlZ2lzdGVycyBhbiBvbGQgQVBJIHNldCBpbnRvIHRoZSBtaWIgXGZCdHJlZVxmUC4gRnVuY3Rpb25hbGx5IHRoaXMgbWltaWNzIHRoZSBvbGQgcmVnaXN0ZXJfbWliX2NvbnRleHQoKSBmdW5jdGlvbiAoYW5kIGluIGZhY3QgdGhlIG5ldyByZWdpc3Rlcl9taWJfY29udGV4dCgpIGZ1bmN0aW9uIG1lcmVseSBjYWxscyB0aGlzIG5ldyBvbGRfYXBpIG9uZSkuIAotLlBQCi1uZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2ZyZWUocmVnaW5mbyk7IGFscmVhZHkgZnJlZWQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0OCBvZiBmaWxlIG9sZF9hcGkuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9wZHVfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGYxYWExCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfcGR1X2FwaS4zLmRlZgpAQCAtMCwwICsxLDI5IEBACisuVEggTkVUU05NUF9QRFVfQVBJIDMgIjEzIEF1ZyAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK3NubXBfcGR1X2NyZWF0ZSwKK3NubXBfY2xvbmVfcGR1LAorc25tcF9maXhfcGR1LAorc25tcF9mcmVlX3BkdSAtIG5ldHNubXBfcGR1X2FwaSBmdW5jdGlvbnMKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KKy5QUAorLkJJICJuZXRzbm1wX3BkdSAqc25tcF9wZHVfY3JlYXRlKCBpbnQiICJ0eXBlIiAiKTsiCisuUFAKKy5CSSAibmV0c25tcF9wZHUgKnNubXBfY2xvbmVfcGR1KCBuZXRzbm1wX3BkdSoiICJwZHUiICIpOyIKKy5QUAorLkJJICJuZXRzbm1wX3BkdSAqc25tcF9maXhfcGR1KCBuZXRzbm1wX3BkdSoiICJwZHUiICIsIGludCAiICJpZHgiICIpOyIKKy5QUAorLkJJICJuZXRzbm1wX3BkdSAqc25tcF9mcmVlX3BkdSggbmV0c25tcF9wZHUqIiAicGR1IiAiKTsiCisuUFAKKy5TSCBERVNDUklQVElPTgorVGhlc2UgZnVuY3Rpb25zIGRlYWwgd2l0aCBTTk1QIHJlcXVlc3Qgc3RydWN0dXJlcy4KKy5QUAorLkIgc25tcF9wZHVfY3JlYXRlCisuUFAKKy5CIHNubXBfY2xvbmVfcGR1CisuUFAKKy5CIHNubXBfZml4X3BkdQorLlBQCisuQiBzbm1wX2ZyZWVfcGR1CisuU0ggIlNFRSBBTFNPIgorbmV0c25tcF92YXJiaW5kX2FwaSgzKSwgbmV0c25tcF9zZXNzaW9uX2FwaSgzKQpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfcmVhZF9jb25maWcuMyBiL21hbi9uZXRzbm1wX3JlYWRfY29uZmlnLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQyNDBlMWIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfcmVhZF9jb25maWcuMworKysgL2Rldi9udWxsCkBAIC0xLDM1NiArMCwwIEBACi0uVEggInBhcnNpbmcgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHJ1biB0aW1lIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotcGFyc2luZyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgcnVuIHRpbWUgXC0gCi0uUFAKLVRoZSByZWFkX2NvbmZpZyByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgYSBmYWlybHkgZXh0ZW5zaWJsZSBzeXN0ZW0gb2YgcGFyc2luZyB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXQgdGhlIHJ1biB0aW1lLiAgCi0KLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfQ09ORklHX0RFTElNRVRFUlNcZlAgICAnIFxcdD0nIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKiBcZkJyZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyXGZQIChjb25zdCBjaGFyICp0eXBlLCBjb25zdCBjaGFyICp0b2tlbiwgdm9pZCgqcGFyc2VyKShjb25zdCBjaGFyICosIGNoYXIgKiksIHZvaWQoKnJlbGVhc2VyKSh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICogXGZCcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCB2b2lkKCpwYXJzZXIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwgdm9pZCgqcmVsZWFzZXIpKHZvaWQpLCBjb25zdCBjaGFyICpoZWxwKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKiBcZkJyZWdpc3Rlcl9jb25maWdfaGFuZGxlclxmUCAoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqdG9rZW4sIHZvaWQoKnBhcnNlcikoY29uc3QgY2hhciAqLCBjaGFyICopLCB2b2lkKCpyZWxlYXNlcikodm9pZCksIGNvbnN0IGNoYXIgKmhlbHApIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIHJlZ2lzdGVycyBoYW5kbGVycyBmb3IgY2VydGFpbiB0b2tlbnMgc3BlY2lmaWVkIGluIGNlcnRhaW4gdHlwZXMgb2YgZmlsZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19saW5lXGZQICogXGZCcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyXGZQIChjb25zdCBjaGFyICp0b2tlbiwgdm9pZCgqcGFyc2VyKShjb25zdCBjaGFyICosIGNoYXIgKiksIHZvaWQoKnJlbGVhc2VyKSh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJ1bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyXGZQIChjb25zdCBjaGFyICp0eXBlX3BhcmFtLCBjb25zdCBjaGFyICp0b2tlbikiCi0uYnIKLS5SSSAiXGZJdXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyIHVuLXJlZ2lzdGVycyBoYW5kbGVycyBnaXZlbiBhIHNwZWNpZmljIHR5cGVfcGFyYW0gYW5kIHRva2VuLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnRva2VuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVyc1xmUCAoKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKiBcZkJyZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnNcZlAgKGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdfd2l0aF90eXBlX3doZW5cZlAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgd2hlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ193aXRoX3R5cGVcZlAgKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCY29uZmlnX2xpbmVcZlAgKiBcZkJyZWFkX2NvbmZpZ19maW5kX2hhbmRsZXJcZlAgKHN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqbGluZV9oYW5kbGVycywgY29uc3QgY2hhciAqdG9rZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJydW5fY29uZmlnX2hhbmRsZXJcZlAgKHN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqbHB0ciwgY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIsIGludCB3aGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jb25maWdfd2hlblxmUCAoY2hhciAqbGluZSwgaW50IHdoZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NvbmZpZ1xmUCAoY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19yZW1lbWJlcl9pbl9saXN0XGZQIChjaGFyICpsaW5lLCBzdHJ1Y3QgXGZCcmVhZF9jb25maWdfbWVtb3J5XGZQICoqbWVtKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3JlbWVtYmVyX2ZyZWVfbGlzdFxmUCAoc3RydWN0IFxmQnJlYWRfY29uZmlnX21lbW9yeVxmUCAqKm1lbSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19wcm9jZXNzX21lbW9yeV9saXN0XGZQIChzdHJ1Y3QgXGZCcmVhZF9jb25maWdfbWVtb3J5XGZQICoqbWVtcCwgaW50IHdoZW4sIGludCBjbGVhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19yZW1lbWJlclxmUCAoY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19wcm9jZXNzX21lbW9yaWVzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3Byb2Nlc3NfbWVtb3JpZXNfd2hlblxmUCAoaW50IHdoZW4sIGludCBjbGVhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ1xmUCAoY29uc3QgY2hhciAqZmlsZW5hbWUsIHN0cnVjdCBcZkJjb25maWdfbGluZVxmUCAqbGluZV9oYW5kbGVyLCBpbnQgd2hlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJmcmVlX2NvbmZpZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ3Nfb3B0aW9uYWxcZlAgKGNvbnN0IGNoYXIgKm9wdGlvbmFsX2NvbmZpZywgaW50IHdoZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCcmVhZF9jb25maWdzXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfcHJlbWliX2NvbmZpZ3NcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5XGZQIChjb25zdCBjaGFyICpkaXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IGNoYXIgKiBcZkJnZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnlcZlAgKCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzZXRfcGVyc2lzdGVudF9kaXJlY3RvcnlcZlAgKGNvbnN0IGNoYXIgKmRpcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQmdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeVxmUCAoKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNldF90ZW1wX2ZpbGVfcGF0dGVyblxmUCAoY29uc3QgY2hhciAqcGF0dGVybikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY29uc3QgY2hhciAqIFxmQmdldF90ZW1wX2ZpbGVfcGF0dGVyblxmUCAoKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfY29uZmlnX2ZpbGVzXGZQIChpbnQgd2hlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ19wcmludF91c2FnZVxmUCAoY29uc3QgY2hhciAqbGVhZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJyZWFkX2NvbmZpZ19zdG9yZVxmUCAoY29uc3QgY2hhciAqdHlwZSwgY29uc3QgY2hhciAqbGluZSkiCi0uYnIKLS5SSSAiXGZJcmVhZF9jb25maWdfc3RvcmUgaW50ZW5kZWQgZm9yIHVzZSBieSBhcHBsaWNhdGlvbnMgdG8gc3RvcmUgcGVybWVuYW50IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZ2VuZXJhdGVkIGJ5IHNldHMgb3IgcGVyc2lzdGVudCBjb3VudGVycy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnJlYWRfYXBwX2NvbmZpZ19zdG9yZVxmUCAoY29uc3QgY2hhciAqbGluZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3NhdmVfcGVyc2lzdGVudFxmUCAoY29uc3QgY2hhciAqdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2NsZWFuX3BlcnNpc3RlbnRcZlAgKGNvbnN0IGNoYXIgKnR5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCY29uZmlnX3BlcnJvclxmUCAoY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmNvbmZpZ19wd2FyblxmUCAoY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc2tpcF93aGl0ZVxmUCAoY2hhciAqcHRyKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc2tpcF9ub3Rfd2hpdGVcZlAgKGNoYXIgKnB0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNraXBfdG9rZW5cZlAgKGNoYXIgKnB0cikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQmNvcHlfbndvcmRcZlAgKGNoYXIgKmZyb20sIGNoYXIgKnRvLCBpbnQgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCY29weV93b3JkXGZQIChjaGFyICpmcm9tLCBjaGFyICp0bykiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nXGZQIChjaGFyICpzYXZldG8sIHVfY2hhciAqc3RyLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdcZlAgKGNoYXIgKnJlYWRmcm9tLCB1X2NoYXIgKipzdHIsIHNpemVfdCAqbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfc2F2ZV9vYmppZFxmUCAoY2hhciAqc2F2ZXRvLCBvaWQgKm9iamlkLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfcmVhZF9vYmppZFxmUCAoY2hhciAqcmVhZGZyb20sIG9pZCAqKm9iamlkLCBzaXplX3QgKmxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnJlYWRfY29uZmlnX3JlYWRfZGF0YVxmUCAoaW50IHR5cGUsIGNoYXIgKnJlYWRmcm9tLCB2b2lkICpkYXRhcHRyLCBzaXplX3QgKmxlbikiCi0uYnIKLS5SSSAiXGZJcmVhZF9jb25maWdfcmVhZF9kYXRhIHJlYWRzIGRhdGEgb2YgYSBnaXZlbiB0eXBlIGZyb20gYSB0b2tlbihzKSBvbiBhIGNvbmZpZ3VyYXRpb24gbGluZS4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcmVhZF9jb25maWdfcmVhZF9tZW1vcnlcZlAgKGludCB0eXBlLCBjaGFyICpyZWFkZnJvbSwgY2hhciAqZGF0YXB0ciwgc2l6ZV90ICpsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19zdG9yZV9kYXRhXGZQIChpbnQgdHlwZSwgY2hhciAqc3RvcmV0bywgdm9pZCAqZGF0YXB0ciwgc2l6ZV90ICpsZW4pIgotLmJyCi0uUkkgIlxmSXJlYWRfY29uZmlnX3N0b3JlX2RhdGEgc3RvcmVzIGRhdGEgb2YgYSBnaXZlbiB0eXBlIHRvIGEgY29uZmlndXJhdGlvbiBsaW5lIGludG8gdGhlIHN0b3JldG8gYnVmZmVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJyZWFkX2NvbmZpZ19zdG9yZV9kYXRhX3ByZWZpeFxmUCAoY2hhciBwcmVmaXgsIGludCB0eXBlLCBjaGFyICpzdG9yZXRvLCB2b2lkICpkYXRhcHRyLCBzaXplX3QgbGVuKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQmNvbmZpZ19maWxlc1xmUCAqIFxmQmNvbmZpZ19maWxlc1xmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxpbmVjb3VudFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCY3VyZmlsZW5hbWVcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgcmVhZF9jb25maWcgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIGEgZmFpcmx5IGV4dGVuc2libGUgc3lzdGVtIG9mIHBhcnNpbmcgdmFyaW91cyBjb25maWd1cmF0aW9uIGZpbGVzIGF0IHRoZSBydW4gdGltZS4gCi0KLVRoZSBpZGVhIGlzIHRoYXQgdGhlIGNhbGxpbmcgYXBwbGljYXRpb24gaXMgYWJsZSB0byByZWdpc3RlciBoYW5kbGVycyBmb3IgY2VydGFpbiB0b2tlbnMgc3BlY2lmaWVkIGluIGNlcnRhaW4gdHlwZXMgb2YgZmlsZXMuIFRoZSByZWFkX2NvbmZpZ3MgZnVuY3Rpb24gY2FuIHRoZW4gYmUgY2FsbGVkIHRvIGxvb2sgZm9yIGFsbCB0aGUgZmlsZXMgdGhhdCBpdCBoYXMgcmVnaXN0cmF0aW9ucyBmb3IsIGZpbmQgdGhlIGZpcnN0IHdvcmQgb24gZWFjaCBsaW5lLCBhbmQgcGFzcyB0aGUgcmVtYWluZGVyIHRvIHRoZSBhcHByb3ByaWF0ZWx5IHJlZ2lzdGVyZWQgaGFuZGxlci4KLS5QUAotRm9yIHBlcnNpc3RlbnQgY29uZmlndXJhdGlvbiBzdG9yYWdlIHlvdSB3aWxsIG5lZWQgdG8gdXNlIHRoZSByZWFkX2NvbmZpZ19yZWFkX2RhdGEsIHJlYWRfY29uZmlnX3N0b3JlLCBhbmQgcmVhZF9jb25maWdfc3RvcmVfZGF0YSBBUElzIGluIGNvbmp1bmN0aW9uIHdpdGggZmlyc3QgcmVnaXN0ZXJpbmcgYSBjYWxsYmFjayBzbyB3aGVuIHRoZSBhZ2VudCBzaHV0c2Rvd24gZm9yIHdoYXRldmVyIHJlYXNvbiBkYXRhIGlzIHdyaXR0ZW4gdG8geW91ciBjb25maWd1cmF0aW9uIGZpbGVzLiBUaGUgZm9sbG93aW5nIGV4cGxhaW5zIGluIG1vcmUgZGV0YWlsIHRoZSBzZXF1ZW5jZSB0byBtYWtlIHRoaXMgaGFwcGVuLgotLlBQCi1UaGlzIGlzIHRoZSBjYWxsYmFjayByZWdpc3RyYXRpb24gQVBJLCB5b3UgbmVlZCB0byBjYWxsIHRoaXMgQVBJIHdpdGggdGhlIGFwcHJvcHJpYXRlIHBhcmFtZXRlcnMgaW4gb3JkZXIgdG8gY29uZmlndXJlIHBlcnNpc3RlbnQgc3RvcmFnZSBuZWVkcy4KLS5QUAotaW50IHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soaW50IG1ham9yLCBpbnQgbWlub3IsIFNOTVBDYWxsYmFjayAqbmV3X2NhbGxiYWNrLCB2b2lkICphcmcpOwotLlBQCi1Zb3Ugd2lsbCBuZWVkIHRvIHNldCBtYWpvciB0byBTTk1QX0NBTExCQUNLX0xJQlJBUlksIG1pbm9yIHRvIFNOTVBfQ0FMTEJBQ0tfU1RPUkVfREFUQS4gYXJnIGlzIHdoYXRldmVyIHlvdSB3YW50LgotLlBQCi1Zb3VyIGNhbGxiYWNrIGZ1bmN0aW9uJ3MgcHJvdG90eXBlIGlzOiBpbnQgKFNOTVBDYWxsYmFjaykgKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpOwotLlBQCi1UaGUgbWFqb3JJRCwgbWlub3JJRCBhbmQgY2xpZW50YXJnIGFyZSB3aGF0IHlvdSBwYXNzZWQgaW4gdGhlIGNhbGxiYWNrIHJlZ2lzdHJhdGlvbiBhYm92ZS4gV2hlbiB0aGUgY2FsbGJhY2sgaXMgY2FsbGVkIHlvdSBoYXZlIHRvIGVzc2VudGlhbGx5IHRyYW5zZmVyIGFsbCB5b3VyIHN0YXRlIGZyb20gbWVtb3J5IHRvIGRpc2suIFlvdSBkbyB0aGlzIGJ5IGdlbmVyYXRpbmcgY29uZmlndXJhdGlvbiBsaW5lcyBpbnRvIGEgYnVmZmVyLiBUaGUgbGluZXMgYXJlIG9mIHRoZSBmb3JtIHRva2VuIGZvbGxvd2VkIGJ5IHRva2VuIHBhcmFtZXRlcnMuCi0uUFAKLUZpbmFsbHkgc3RvcmluZyBpcyBkb25lIHVzaW5nIHJlYWRfY29uZmlnX3N0b3JlKHR5cGUsIGJ1ZmZlcik7IHR5cGUgaXMgdGhlIGFwcGxpY2F0aW9uIG5hbWUgdGhpcyBjYW4gYmUgb2J0YWluZWQgZnJvbToKLS5QUAotbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7Ci0uUFAKLU5vdywgcmVhZGluZyBiYWNrIHRoZSBkYXRhOiBUaGlzIGlzIGRvbmUgYnkgcmVnaXN0ZXJpbmcgYSBjb25maWcgaGFuZGxlciBmb3IgeW91ciB0b2tlbiB1c2luZyB0aGUgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgZnVuY3Rpb24uIFlvdXIgaGFuZGxlciB3aWxsIGJlIGludm9rZWQgYW5kIHlvdSBjYW4gcGFyc2UgaW4gdGhlIGRhdGEgdXNpbmcgdGhlIHJlYWRfY29uZmlnX3JlYWQgQVBJcy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImNoYXIqIHJlYWRfY29uZmlnX3JlYWRfZGF0YSAoaW50IHR5cGUsIGNoYXIgKiByZWFkZnJvbSwgdm9pZCAqIGRhdGFwdHIsIHNpemVfdCAqIGxlbikiCi0uUFAKLXJlYWRfY29uZmlnX3JlYWRfZGF0YSByZWFkcyBkYXRhIG9mIGEgZ2l2ZW4gdHlwZSBmcm9tIGEgdG9rZW4ocykgb24gYSBjb25maWd1cmF0aW9uIGxpbmUuIFRoZSBzdXBwb3J0ZWQgdHlwZXMgYXJlOgotLlBQCi0uSVAgIlwoYnUiIDIKLUFTTl9JTlRFR0VSCi0uSVAgIlwoYnUiIDIKLUFTTl9USU1FVElDS1MKLS5JUCAiXChidSIgMgotQVNOX1VOU0lHTkVECi0uSVAgIlwoYnUiIDIKLUFTTl9PQ1RFVF9TVFIKLS5JUCAiXChidSIgMgotQVNOX0JJVF9TVFIKLS5JUCAiXChidSIgMgotQVNOX09CSkVDVF9JRAotLlBQCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZVxmUCB0aGUgYXNuIGRhdGEgdHlwZSB0byBiZSByZWFkIGluLgotLmJyCi1cZklyZWFkZnJvbVxmUCB0aGUgY29uZmlndXJhdGlvbiBsaW5lIGRhdGEgdG8gYmUgcmVhZC4KLS5icgotXGZJZGF0YXB0clxmUCBhbiBhbGxvY2F0ZWQgcG9pbnRlciBleHBlY3RlZCB0byBtYXRjaCB0aGUgdHlwZSBiZWluZyByZWFkIChpbnQgKiwgdV9pbnQgKiwgY2hhciAqKiwgb2lkICoqKQotLmJyCi1cZklsZW5cZlAgaXMgdGhlIGxlbmd0aCBvZiBhbiBhc24gb2lkIG9yIG9jdGV0L2JpdCBzdHJpbmcsIG5vdCByZXF1aXJlZCBmb3IgdGhlIGFzbiBpbnRlZ2VyLCB1bnNpZ25lZCBpbnRlZ2VyLCBhbmQgdGltZXRpY2tzIHR5cGVzCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci10aGUgbmV4dCB0b2tlbiBpbiB0aGUgY29uZmlndXJhdGlvbiBsaW5lLiBOVUxMIGlmIG5vbmUgbGVmdCBvciBpZiBhbiB1bmtub3duIHR5cGUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTgzNiBvZiBmaWxlIHJlYWRfY29uZmlnLmMuCi0uU1MgInZvaWQgcmVhZF9jb25maWdfc3RvcmUgKGNvbnN0IGNoYXIgKiB0eXBlLCBjb25zdCBjaGFyICogbGluZSkiCi0uUFAKLXJlYWRfY29uZmlnX3N0b3JlIGludGVuZGVkIGZvciB1c2UgYnkgYXBwbGljYXRpb25zIHRvIHN0b3JlIHBlcm1lbmFudCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGdlbmVyYXRlZCBieSBzZXRzIG9yIHBlcnNpc3RlbnQgY291bnRlcnMuIEFwcGVuZHMgbGluZSB0byBhIGZpbGUgbmFtZWQgZWl0aGVyIEVOVihTTk1QX1BFUlNJU1RFTlRfRklMRSkgb3IgJzxORVRTTk1QX1BFUlNJU1RFTlRfRElSRUNUT1JZPi88dHlwZT4uY29uZicuIEFkZHMgYSB0cmFpbGluZyBuZXdsaW5lIHRvIHRoZSBzdG9yZWQgZmlsZSBpZiBuZWNlc3NhcnkuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZVxmUCBpcyB0aGUgYXBwbGljYXRpb24gbmFtZSAKLS5icgotXGZJbGluZVxmUCBpcyB0aGUgY29uZmlndXJhdGlvbiBsaW5lIHdyaXR0ZW4gdG8gdGhlIGFwcGxpY2F0aW9uIG5hbWUncyBjb25maWd1cmF0aW9uIGZpbGUKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjcyIG9mIGZpbGUgcmVhZF9jb25maWcuYy4KLS5TUyAiY2hhciogcmVhZF9jb25maWdfc3RvcmVfZGF0YSAoaW50IHR5cGUsIGNoYXIgKiBzdG9yZXRvLCB2b2lkICogZGF0YXB0ciwgc2l6ZV90ICogbGVuKSIKLS5QUAotcmVhZF9jb25maWdfc3RvcmVfZGF0YSBzdG9yZXMgZGF0YSBvZiBhIGdpdmVuIHR5cGUgdG8gYSBjb25maWd1cmF0aW9uIGxpbmUgaW50byB0aGUgc3RvcmV0byBidWZmZXIuIENhbGxzIHJlYWRfY29uZmlnX3N0b3JlX2RhdGFfcHJlZml4IHdpdGggdGhlIHByZWZpeCBwYXJhbWV0ZXIgc2V0IHRvIGEgY2hhciBzcGFjZS4gVGhlIHN1cHBvcnRlZCB0eXBlcyBhcmU6Ci0uUFAKLS5JUCAiXChidSIgMgotQVNOX0lOVEVHRVIKLS5JUCAiXChidSIgMgotQVNOX1RJTUVUSUNLUwotLklQICJcKGJ1IiAyCi1BU05fVU5TSUdORUQKLS5JUCAiXChidSIgMgotQVNOX09DVEVUX1NUUgotLklQICJcKGJ1IiAyCi1BU05fQklUX1NUUgotLklQICJcKGJ1IiAyCi1BU05fT0JKRUNUX0lECi0uUFAKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlXGZQIHRoZSBhc24gZGF0YSB0eXBlIHRvIGJlIHN0b3JlZAotLmJyCi1cZklzdG9yZXRvXGZQIGEgcHJlLWFsbG9jYXRlZCBjaGFyIGJ1ZmZlciB3aGljaCB3aWxsIGNvbnRhaW4gdGhlIGRhdGEgdG8gYmUgc3RvcmVkCi0uYnIKLVxmSWRhdGFwdHJcZlAgY29udGFpbnMgdGhlIHZhbHVlIHRvIGJlIHN0b3JlZCwgdGhlIHN1cHBvcnRlZCBwb2ludGVyczogKGludCAqLCB1X2ludCAqLCBjaGFyICoqLCBvaWQgKiopCi0uYnIKLVxmSWxlblxmUCBpcyB0aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB0byBiZSBzdG9yZWQgKG5vdCByZXF1aXJlZCBmb3IgdGhlIGFzbiBpbnRlZ2VyLCB1bnNpZ25lZCBpbnRlZ2VyLCBhbmQgdGltZXRpY2tzIHR5cGVzKQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotY2hhcmFjdGVyIHBvaW50ZXIgdG8gdGhlIGVuZCBvZiB0aGUgbGluZS4gTlVMTCBpZiBhbiB1bmtub3duIHR5cGUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk5NSBvZiBmaWxlIHJlYWRfY29uZmlnLmMuCi0uU1MgInN0cnVjdCBcZkJjb25maWdfbGluZVxmUCogcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgKGNvbnN0IGNoYXIgKiB0eXBlLCBjb25zdCBjaGFyICogdG9rZW4sIHZvaWQoKikoY29uc3QgY2hhciAqLCBjaGFyICopIHBhcnNlciwgdm9pZCgqKSh2b2lkKSByZWxlYXNlciwgY29uc3QgY2hhciAqIGhlbHApXGZDIFtyZWFkXVxmUCIKLS5QUAotcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgcmVnaXN0ZXJzIGhhbmRsZXJzIGZvciBjZXJ0YWluIHRva2VucyBzcGVjaWZpZWQgaW4gY2VydGFpbiB0eXBlcyBvZiBmaWxlcy4gQWxsb3dzIGEgXGZCbW9kdWxlXGZQIHdyaXRlciB1c2UvcmVnaXN0ZXIgbXVsdGlwbGUgY29uZmlndXJhdGlvbiBmaWxlcyBiYXNlZCBvZmYgb2YgdGhlIHR5cGUgcGFyYW1ldGVyLiBBIFxmQm1vZHVsZVxmUCB3cml0ZXIgbWF5IHdhbnQgdG8gc2V0IHVwIG11bHRpcGxlIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VwYXJhdGUgb3V0IHJlbGF0ZWQgdGFza3MvdmFyaWFibGVzIG9yIGp1c3QgZm9yIG1hbmFnZW1lbnQgb2Ygd2hlcmUgdG8gcHV0IHRva2VucyBhcyB0aGUgXGZCbW9kdWxlXGZQIG9yIG1vZHVsZXMgZ2V0IG1vcmUgY29tcGxleCBpbiByZWdhcmQgdG8gaGFuZGxpbmcgdG9rZW4gcmVnaXN0cmF0aW9ucy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkl0eXBlXGZQIHRoZSBjb25maWd1cmF0aW9uIGZpbGUgdXNlZCwgZS5nLiwgaWYgc25tcC5jb25mIGlzIHRoZSBmaWxlIHdoZXJlIHRoZSB0b2tlbiBpcyBsb2NhdGVkIHVzZSAnc25tcCcgaGVyZS4gTXVsdGlwbGUgY29sb24gc2VwYXJhdGVkIHRva2VucyBtaWdodCBiZSB1c2VkLiBJZiBOVUxMIG9yICcnIHRoZW4gdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2VkIHdpbGwgYmUgPGFwcGxpY2F0aW9uPi5jb25mLgotLmJyCi1cZkl0b2tlblxmUCB0aGUgdG9rZW4gYmVpbmcgcGFyc2VkIGZyb20gdGhlIGZpbGUuIE11c3QgYmUgbm9uLU5VTEwuCi0uYnIKLVxmSXBhcnNlclxmUCB0aGUgaGFuZGxlciBmdW5jdGlvbiBwb2ludGVyIHRoYXQgdXNlIHRoZSBzcGVjaWZpZWQgdG9rZW4gYW5kIHRoZSByZXN0IG9mIHRoZSBsaW5lIHRvIGRvIHdoYXRldmVyIGlzIHJlcXVpcmVkIFNob3VsZCBiZSBub24tTlVMTCBpbiBvcmRlciB0byBtYWtlIHVzZSBvZiB0aGlzIEFQSS4KLS5icgotXGZJcmVsZWFzZXJcZlAgaWYgbm9uLU5VTEwsIHRoZSBmdW5jdGlvbiBzcGVjaWZpZWQgaXMgY2FsbGVkIGlmIGFuZCB3aGVuIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGFyZSByZS1yZWFkLiBUaGlzIGZ1bmN0aW9uIHNob3VsZCBmcmVlIGFueSByZXNvdXJjZXMgYWxsb2NhdGVkIGJ5IHRoZSB0b2tlbiBoYW5kbGVyIGZ1bmN0aW9uLgotLmJyCi1cZkloZWxwXGZQIGlmIG5vbi1OVUxMLCB1c2VkIHRvIGRpc3BsYXkgaGVscCBpbmZvcm1hdGlvbiBvbiB0aGUgZXhwZWN0ZWQgYXJndW1lbnRzIGFmdGVyIHRoZSB0b2tlbi4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVBvaW50ZXIgdG8gYSBuZXcgY29uZmlnIGxpbmUgZW50cnkgb3IgTlVMTCBvbiBlcnJvci4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODQgb2YgZmlsZSByZWFkX2NvbmZpZy5jLgotLlNTICJ2b2lkIHVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgKGNvbnN0IGNoYXIgKiB0eXBlX3BhcmFtLCBjb25zdCBjaGFyICogdG9rZW4pIgotLlBQCi11cmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIgdW4tcmVnaXN0ZXJzIGhhbmRsZXJzIGdpdmVuIGEgc3BlY2lmaWMgdHlwZV9wYXJhbSBhbmQgdG9rZW4uIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdHlwZV9wYXJhbVxmUCB0aGUgY29uZmlndXJhdGlvbiBmaWxlIHVzZWQgd2hlcmUgdGhlIHRva2VuIGlzIGxvY2F0ZWQuIFVzZWQgdG8gbG9va3VwIHRoZSBjb25maWcgZmlsZSBlbnRyeQotLmJyCi1cZkl0b2tlblxmUCB0aGUgdG9rZW4gdGhhdCBpcyBiZWluZyB1bnJlZ2lzdGVyZWQKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXZvaWQgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMTUgb2YgZmlsZSByZWFkX2NvbmZpZy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3JlYWRfb25seS4zIGIvbWFuL25ldHNubXBfcmVhZF9vbmx5LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDUzYTQwZmQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfcmVhZF9vbmx5LjMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0uVEggInJlYWRfb25seSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXJlYWRfb25seSBcLSAKLS5QUAotTWFrZSB5b3VyIGhhbmRsZXIgcmVhZF9vbmx5IGF1dG9tYXRpY2FsbHkgVGhlIG9ubHkgcHVycG9zZSBvZiB0aGlzIGhhbmRsZXIgaXMgdG8gcmV0dXJuIGFuIGFwcHJvcHJpYXRlIGVycm9yIGZvciBhbnkgcmVxdWVzdHMgcGFzc2VkIHRvIGl0IGluIGEgU0VUIG1vZGUuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3JlYWRfb25seV9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgcmVhZF9vbmx5IGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVhZF9vbmx5X2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfcmVhZF9vbmx5X2hlbHBlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHJlYWRfb25seSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByZWFkX29ubHkgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLU1ha2UgeW91ciBoYW5kbGVyIHJlYWRfb25seSBhdXRvbWF0aWNhbGx5IFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBmb3IgYW55IHJlcXVlc3RzIHBhc3NlZCB0byBpdCBpbiBhIFNFVCBtb2RlLiAKLQotSW5zZXJ0aW5nIGl0IGludG8geW91ciBoYW5kbGVyIGNoYWluIHdpbGwgZW5zdXJlIHlvdSdyZSBuZXZlciBhc2tlZCB0byBwZXJmb3JtIGEgU0VUIHJlcXVlc3Qgc28geW91IGNhbiBpZ25vcmUgdGhvc2UgZXJyb3IgY29uZGl0aW9ucy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3JlYWRfb25seV9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIHJlYWRfb25seSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI5IG9mIGZpbGUgcmVhZF9vbmx5LmMuCi0uU1MgInZvaWQgbmV0c25tcF9pbml0X3JlYWRfb25seV9oZWxwZXIgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgcmVhZF9vbmx5IGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHJlYWRfb25seSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDgxIG9mIGZpbGUgcmVhZF9vbmx5LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfcm93X21lcmdlLjMgYi9tYW4vbmV0c25tcF9yb3dfbWVyZ2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTZjNjJkMi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9yb3dfbWVyZ2UuMworKysgL2Rldi9udWxsCkBAIC0xLDEwMSArMCwwIEBACi0uVEggInJvd19tZXJnZSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXJvd19tZXJnZSBcLSAKLS5QUAotQ2FsbHMgc3ViIGhhbmRsZXJzIHdpdGggcmVxdWVzdCBmb3Igb25lIHJvdyBhdCBhIHRpbWUuICAKLQotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUk9XX01FUkdFX1dBSVRJTkdcZlAgICAwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCUk9XX01FUkdFX0FDVElWRVxmUCAgIDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJST1dfTUVSR0VfRE9ORVxmUCAgIDIiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJST1dfTUVSR0VfSEVBRFxmUCAgIDMiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF9yb3dfbWVyZ2VfaGFuZGxlclxmUCAoaW50IHByZWZpeF9sZW4pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSByb3dfbWVyZ2UgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yb3dfbWVyZ2VcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8pIgotLmJyCi0uUkkgIlxmSWZ1bmN0aW9uYWxseSB0aGUgc2FtZSBhcyBjYWxsaW5nIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIGJ1dCBhbHNvIGluamVjdHMgYSByb3dfbWVyZ2UgaGFuZGxlciBhdCB0aGUgc2FtZSB0aW1lIGZvciB5b3UuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzXGZQICogXGZCbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2dldFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIGludCBjcmVhdGVfbWlzc2luZykiCi0uYnIKLS5SSSAiXGZJcmV0cmlldmUgcm93X21lcmdlX3N0YXR1cyBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3RcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvKSIKLS5icgotLlJJICJcZklEZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8pIgotLmJyCi0uUkkgIlxmSURldGVybWluZSBpZiB0aGlzIGlzIHRoZSBsYXN0IHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yb3dfbWVyZ2VfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0uUkkgIlxmSUltcGxlbWVudHMgdGhlIHJvd19tZXJnZSBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9pbml0X3Jvd19tZXJnZVxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJaW5pdGlhbGl6ZXMgdGhlIHJvd19tZXJnZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSByb3dfbWVyZ2UgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUNhbGxzIHN1YiBoYW5kbGVycyB3aXRoIHJlcXVlc3QgZm9yIG9uZSByb3cgYXQgYSB0aW1lLiAKLQotVGhpcyBoZWxwZXIgc3BsaXRzIGEgd2hvbGUgYnVuY2ggb2YgcmVxdWVzdHMgaW50byBjaHVua3MgYmFzZWQgb24gdGhlIHJvdyBpbmRleCB0aGF0IHRoZXkgcmVmZXIgdG8sIGFuZCBwYXNzZXMgYWxsIHJlcXVlc3RzIGZvciBhIGdpdmVuIHJvdyB0byB0aGUgbG93ZXIgaGFuZGxlcnMuIFRoaXMgaXMgdXNlZnVsIGZvciBoYW5kbGVycyB0aGF0IGRvbid0IHdhbnQgdG8gcHJvY2VzcyBtdWx0aXBsZSByb3dzIGF0IHRoZSBzYW1lIHRpbWUsIGJ1dCBhcmUgaGFwcHkgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSByZXF1ZXN0IGxpc3QgZm9yIGEgc2luZ2xlIHJvdy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3Jvd19tZXJnZV9oYW5kbGVyIChpbnQgcHJlZml4X2xlbikiCi0uUFAKLXJldHVybnMgYSByb3dfbWVyZ2UgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOCBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNTICJ2b2lkIG5ldHNubXBfaW5pdF9yb3dfbWVyZ2UgKHZvaWQpIgotLlBQCi1pbml0aWFsaXplcyB0aGUgcm93X21lcmdlIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHJvd19tZXJnZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM2MCBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9yb3dfbWVyZ2UgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIHJvd19tZXJnZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MiBvZiBmaWxlIHJvd19tZXJnZS5jLgotLlNTICJpbnQgbmV0c25tcF9yb3dfbWVyZ2VfaGVscGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotSW1wbGVtZW50cyB0aGUgcm93X21lcmdlIGhhbmRsZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU0IG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU1MgImludCBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfZmlyc3QgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8pIgotLlBQCi1EZXRlcm1pbmUgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgcm93LiByZXR1cm5zIDEgaWYgdGhpcyBpcyB0aGUgZmlyc3Qgcm93IGZvciB0aGlzIHBhc3Mgb2YgdGhlIGhhbmRsZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTEwIG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU1MgIlxmQm5ldHNubXBfcm93X21lcmdlX3N0YXR1c1xmUCogbmV0c25tcF9yb3dfbWVyZ2Vfc3RhdHVzX2dldCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgaW50IGNyZWF0ZV9taXNzaW5nKSIKLS5QUAotcmV0cmlldmUgcm93X21lcmdlX3N0YXR1cyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY3IG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU1MgImludCBuZXRzbm1wX3Jvd19tZXJnZV9zdGF0dXNfbGFzdCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbykiCi0uUFAKLURldGVybWluZSBpZiB0aGlzIGlzIHRoZSBsYXN0IHJvdy4gcmV0dXJucyAxIGlmIHRoaXMgaXMgdGhlIGxhc3Qgcm93IGZvciB0aGlzIHBhc3Mgb2YgdGhlIGhhbmRsZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTMwIG9mIGZpbGUgcm93X21lcmdlLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc2NhbGFyLjMgYi9tYW4vbmV0c25tcF9zY2FsYXIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODllZDRjYy4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zY2FsYXIuMworKysgL2Rldi9udWxsCkBAIC0xLDEwMiArMCwwIEBACi0uVEggInNjYWxhciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNjYWxhciBcLSAKLS5QUAotUHJvY2VzcyBzY2FsYXJzIGVhc2lseS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYSBzY2FsYXIgaGFuZGxlciBjYWxsaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIgd2l0aCBhIGhhbmRsZXIgbmFtZSBkZWZhdWx0ZWQgdG8gJ3NjYWxhcicgYW5kIGFjY2VzcyBtZXRob2QsIG5ldHNubXBfc2NhbGFyX2hlbHBlcl9oYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3NjYWxhclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBzY2FsYXIgaGVscGVyIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3NjYWxhclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSByZWFkIG9ubHkgc2NhbGFyIGhlbHBlciBoYW5kbGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NjYWxhcl9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Qcm9jZXNzIHNjYWxhcnMgZWFzaWx5LiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfc2NhbGFyX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1DcmVhdGVzIGEgc2NhbGFyIGhhbmRsZXIgY2FsbGluZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyIHdpdGggYSBoYW5kbGVyIG5hbWUgZGVmYXVsdGVkIHRvICdzY2FsYXInIGFuZCBhY2Nlc3MgbWV0aG9kLCBuZXRzbm1wX3NjYWxhcl9oZWxwZXJfaGFuZGxlci4gXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ldHNubXBfbWliX2hhbmRsZXIgc3RydWN0IHdoaWNoIGNvbnRhaW5zIHRoZSBoYW5kbGVyJ3MgbmFtZSBhbmQgdGhlIGFjY2VzcyBtZXRob2QKLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJuZXRzbm1wX2dldF9zY2FsYXJfaGFuZGxlclxmUCAKLS5QUAotXGZCbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NiBvZiBmaWxlIHNjYWxhci5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfc2NhbGFyIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLVRoaXMgZnVuY3Rpb24gcmVnaXN0ZXJzIGEgcmVhZCBvbmx5IHNjYWxhciBoZWxwZXIgaGFuZGxlci4gVGhpcyBmdW5jdGlvbiBpcyB2ZXJ5IHNpbWlsYXIgdG8gbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIgdGhlIG9ubHkgYWRkaXRpb24gaXMgdGhhdCB0aGUgJ3JlYWRfb25seScgaGFuZGxlciBpcyBpbmplY3RlZCBpbnRvIHRoZSBoYW5kbGVyIGNoYWluIHByaW9yIHRvIGluamVjdGluZyB0aGUgc2VyaWFsaXplIGhhbmRsZXIgYW5kIHJlZ2lzdGVyaW5nIHJlZ2luZm8uCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVnaW5mb1xmUCBhIGhhbmRsZXIgcmVnaXN0cmF0aW9uIHN0cnVjdHVyZSB3aGljaCBjb3VsZCBnZXQgY3JlYXRlZCB1c2luZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyX3JlZ2lzdHJhdGlvbi4gVXNlZCB0byByZWdpc3RlciBhIHJlYWQgb25seSBzY2FsYXIgaGVscGVyIGhhbmRsZXIuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1NSUJfUkVHSVNURVJFRF9PSyBpcyByZXR1cm5lZCBpZiB0aGUgcmVnaXN0cmF0aW9uIHdhcyBhIHN1Y2Nlc3MuIEZhaWx1cmVzIGFyZSBNSUJfUkVHSVNUUkFUSU9OX0ZBSUxVUkUgYW5kIE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLgotLlJFCi0uUFAKLVxmQlNlZSBhbHNvOlxmUAotLlJTIDQKLVxmQm5ldHNubXBfcmVnaXN0ZXJfc2NhbGFyXGZQIAotLlBQCi1cZkJuZXRzbm1wX2dldF9zY2FsYXJfaGFuZGxlclxmUCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwOSBvZiBmaWxlIHNjYWxhci5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotVGhpcyBmdW5jdGlvbiByZWdpc3RlcnMgYSBzY2FsYXIgaGVscGVyIGhhbmRsZXIuIFRoZSByZWdpc3RlcmVkIE9JRCwgcmVnaW5mby0+cm9vdG9pZCwgc3BhY2UgaXMgZXh0ZW5kZWQgZm9yIHRoZSBpbnN0YW5jZSBzdWJpZCB1c2luZyByZWFsbG9jKCkgYnV0IHRoZSByZWdpbmZvLT5yb290b2lkX2xlbiBsZW5ndGggaXMgbm90IGV4dGVuZGVkIGp1c3QgeWV0LiAuVGhpcyBmdW5jdGlvbiBzdWJzZXF1ZW50bHkgaW5qZWN0cyB0aGUgaW5zdGFuY2UsIHNjYWxhciwgYW5kIHNlcmlhbGl6ZSBoZWxwZXIgaGFuZGxlcnMgYmVmb3JlIGFjdHVhbGx5IHJlZ2lzdGVyaW5nIHJlZ2luZm8uCi0uUFAKLUVhY2ggaGFuZGxlciBpcyBpbmplY3RlZC9wdXNoZWQgdG8gdGhlIHRvcCBvZiB0aGUgaGFuZGxlciBjaGFpbiBsaXN0IGFuZCB3aWxsIGJlIHByb2Nlc3NlZCBsYXN0IGluIGZpcnN0IG91dCwgTElGTy4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZWdpbmZvXGZQIGEgaGFuZGxlciByZWdpc3RyYXRpb24gc3RydWN0dXJlIHdoaWNoIGNvdWxkIGdldCBjcmVhdGVkIHVzaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXJfcmVnaXN0cmF0aW9uLiBVc2VkIHRvIHJlZ2lzdGVyIGEgc2NhbGFyIGhlbHBlciBoYW5kbGVyLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotTUlCX1JFR0lTVEVSRURfT0sgaXMgcmV0dXJuZWQgaWYgdGhlIHJlZ2lzdHJhdGlvbiB3YXMgYSBzdWNjZXNzLiBGYWlsdXJlcyBhcmUgTUlCX1JFR0lTVFJBVElPTl9GQUlMVVJFIGFuZCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4KLS5SRQotLlBQCi1cZkJTZWUgYWxzbzpcZlAKLS5SUyA0Ci1cZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV9zY2FsYXJcZlAgCi0uUFAKLVxmQm5ldHNubXBfZ2V0X3NjYWxhcl9oYW5kbGVyXGZQIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzQgb2YgZmlsZSBzY2FsYXIuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zY2FsYXJfZ3JvdXBfZ3JvdXAuMyBiL21hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYmJhOWIwLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NjYWxhcl9ncm91cF9ncm91cC4zCisrKyAvZGV2L251bGwKQEAgLTEsMjcgKzAsMCBAQAotLlRIICJzY2FsYXJfZ3JvdXAiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zY2FsYXJfZ3JvdXAgXC0gCi0uUFAKLVByb2Nlc3MgZ3JvdXBzIG9mIHNjYWxhcnMuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3NjYWxhcl9ncm91cF9oYW5kbGVyXGZQIChvaWQgZmlyc3QsIG9pZCBsYXN0KSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9zY2FsYXJfZ3JvdXBcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIG9pZCBmaXJzdCwgb2lkIGxhc3QpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NjYWxhcl9ncm91cF9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Qcm9jZXNzIGdyb3VwcyBvZiBzY2FsYXJzLiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zZXJpYWxpemUuMyBiL21hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NDc0ZjNkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NlcmlhbGl6ZS4zCisrKyAvZGV2L251bGwKQEAgLTEsNTggKzAsMCBAQAotLlRIICJzZXJpYWxpemUiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zZXJpYWxpemUgXC0gCi0uUFAKLUNhbGxzIHN1YiBoYW5kbGVycyBvbmUgcmVxdWVzdCBhdCBhIHRpbWUuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3NlcmlhbGl6ZV9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgc2VyaWFsaXplIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfc2VyaWFsaXplXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklmdW5jdGlvbmFsbHkgdGhlIHNhbWUgYXMgY2FsbGluZyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCBidXQgYWxzbyBpbmplY3RzIGEgc2VyaWFsaXplIGhhbmRsZXIgYXQgdGhlIHNhbWUgdGltZSBmb3IgeW91LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NlcmlhbGl6ZV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS5SSSAiXGZJSW1wbGVtZW50cyB0aGUgc2VyaWFsIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfc2VyaWFsaXplXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgc2VyaWFsaXplIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGFzIGEgcnVuLXRpbWUgaW5qZWN0YWJsZSBoYW5kbGVyIGZvciBjb25maWd1cmF0aW9uIGZpbGUgdXNlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotQ2FsbHMgc3ViIGhhbmRsZXJzIG9uZSByZXF1ZXN0IGF0IGEgdGltZS4gCi0KLVRoaXMgZnVuY3Rpb25hbGx5IHBhc3NlcyBpbiBvbmUgcmVxdWVzdCBhdCBhIHRpbWUgaW50byBsb3dlciBoYW5kbGVycyByYXRoZXIgdGhhbiBhIHdob2xlIGJ1bmNoIG9mIHJlcXVlc3RzIGF0IG9uY2UuIFRoaXMgaXMgdXNlZnVsIGZvciBoYW5kbGVycyB0aGF0IGRvbid0IHdhbnQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSByZXF1ZXN0IGxpc3RzIHRoZW1zZWx2ZXMuIEdlbmVyYWxseSwgdGhpcyBpcyBwcm9iYWJseSBsZXNzIGVmZmljaWVudCBzbyB1c2Ugd2l0aCBjYXV0aW9uLiBUaGUgc2VyaWFsaXplIGhhbmRsZXIgbWlnaHQgYmUgdXNlYWJsZSB0byBkeW5hbWljYWxseSBmaXggaGFuZGxlcnMgd2l0aCBicm9rZW4gbG9vcGluZyBjb2RlLCBob3dldmVyLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfc2VyaWFsaXplX2hhbmRsZXIgKHZvaWQpIgotLlBQCi1yZXR1cm5zIGEgc2VyaWFsaXplIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzEgb2YgZmlsZSBzZXJpYWxpemUuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfc2VyaWFsaXplICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHNlcmlhbGl6ZSBoZWxwZXIgd2hpY2ggdGhlbiByZWdpc3RlcnMgYSBzZXJpYWxpemUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MyBvZiBmaWxlIHNlcmlhbGl6ZS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl9zZXJpYWxpemUgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotZnVuY3Rpb25hbGx5IHRoZSBzYW1lIGFzIGNhbGxpbmcgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgYnV0IGFsc28gaW5qZWN0cyBhIHNlcmlhbGl6ZSBoYW5kbGVyIGF0IHRoZSBzYW1lIHRpbWUgZm9yIHlvdS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0MCBvZiBmaWxlIHNlcmlhbGl6ZS5jLgotLlNTICJpbnQgbmV0c25tcF9zZXJpYWxpemVfaGVscGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotSW1wbGVtZW50cyB0aGUgc2VyaWFsIGhhbmRsZXIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDggb2YgZmlsZSBzZXJpYWxpemUuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX3Nlc3NfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MDM1M2QKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF9zZXNzX2FwaS4zLmRlZgpAQCAtMCwwICsxLDIzNiBAQAorLlRIIE5FVFNOTVBfU0VTU19BUEkgMyAiMTkgTWF5IDIwMTEiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuU0ggTkFNRQorc25tcF9zZXNzX2luaXQsCitzbm1wX3Nlc3Nfb3BlbiwKK3NubXBfc2Vzc19zZXNzaW9uLAorc25tcF9zZXNzX3NlbmQsCitzbm1wX3Nlc3NfYXN5bmNfc2VuZCwKK3NubXBfc2Vzc19zZWxlY3RfaW5mbywKK3NubXBfc2Vzc19yZWFkLAorc25tcF9zZXNzX3RpbWVvdXQsCitzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UsCitzbm1wX3Nlc3NfY2xvc2UsCitzbm1wX3Nlc3NfZXJyb3IgLSBzZXNzaW9uIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KKy5QUAorLkJJICJ2b2lkIHNubXBfc2Vzc19pbml0KHN0cnVjdCBzbm1wX3Nlc3Npb24gKiIgc2Vzc2lvbiAiKTsiCisuUFAKKy5CSSAidm9pZCAqc25tcF9zZXNzX29wZW4oc3RydWN0IHNubXBfc2Vzc2lvbiAqIiBzZXNzaW9uICIpOyIKKy5QUAorLkJJICJzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzbm1wX3Nlc3Nfc2Vzc2lvbih2b2lkICoiIGhhbmRsZSAiKTsiCisuUFAKKy5CSSAiaW50IHNubXBfc2Vzc19zZW5kKHZvaWQgKiIgaGFuZGxlICIsIHN0cnVjdCBzbm1wX3BkdSAqIiBwZHUgIik7IgorLlBQCisuQkkgImludCBzbm1wX3Nlc3NfYXN5bmNfc2VuZCh2b2lkICoiIGhhbmRsZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICoiIHBkdSAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfY2FsbGJhY2sgIiBjYWxsYmFjayAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiIgY2FsbGJhY2tEYXRhICIpOyIKKy5QUAorLkJJICJpbnQgc25tcF9zZXNzX3NlbGVjdF9pbmZvKHZvaWQgKiIgaGFuZGxlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICoiIG51bWZkcyAiLCBmZF9zZXQgKiIgZmRzZXQgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKiIgdGltZW91dCAiLCAiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKiIgYmxvY2sgIik7IgorLlBQCisuQkkgImludCBzbm1wX3Nlc3NfcmVhZCh2b2lkICoiIGhhbmRsZSAiLCBmZF9zZXQgKiIgZmRzZXQgIik7IgorLlBQCisuQkkgInZvaWQgc25tcF9zZXNzX3RpbWVvdXQodm9pZCAqIiBoYW5kbGUgIik7IgorLlBQCisuQkkgImludCBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UgKCB2b2lkICoiICJoYW5kbGUsIgorLlJTCisuQkkgIm5ldHNubXBfcGR1ICoiICJwZHUiICIsICIKKy5icgorLkJJICJuZXRzbm1wX3BkdSAqKiIgInJlc3BvbnNlIiApOworLlJFCisuUFAKKy5CSSAiaW50IHNubXBfc2Vzc19jbG9zZSh2b2lkICoiIGhhbmRsZSAiKTsiCisuUFAKKy5CSSAidm9pZCBzbm1wX3Nlc3NfZXJyb3Iodm9pZCAqIiBoYW5kbGUgIiwgaW50ICoiIHBjbGliZXJyICIsICIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgIGludCAqIiBwc25tcGVyciAiLCBjaGFyICoqIiBwcGVycnN0cmluZyAiKTsiCisuU0ggREVTQ1JJUFRJT04KK1RoZXNlIGZ1bmN0aW9ucyBkZWZpbmUgYSBzdWJzZXQgb2YgdGhlIEFQSSB0aGF0IGNhbiBiZSB1c2VkCit0byBtYW5hZ2Ugc2luZ2xlIFNOTVAgc2Vzc2lvbnMgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbi4KK0V4Y2VwdCBmb3IKKy5CUiBzbm1wX3Nlc3Nfc2Vzc2lvbigpICwKK3RoZXNlIGZ1bmN0aW9ucyBhcmUgc2luZ2xlIHNlc3Npb24gdmVyc2lvbnMgb2YgdGhlIHRyYWRpdGlvbmFsCitTTk1QIGxpYnJhcnkgQVBJLgorLlBQCitOb3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHVzZSBhbiBvcGFxdWUgcG9pbnRlcgorLlJJICggaGFuZGxlCitpbiB0aGUgYWJvdmUgcHJvdG90eXBlcykgdG8gaWRlbnRpZnkgYSBzaW5nbGUgc2Vzc2lvbiBpbiBsaWV1IG9mIGEKKy5JIHNlc3Npb24KK3BvaW50ZXIgKGFzIGluIHRoZSB0cmFkaXRpb25hbCBBUEkpLgorLlBQCisuQiBzbm1wX3Nlc3NfaW5pdCgpCitwcmVwYXJlcyBhIHN0cnVjdCBzbm1wX3Nlc3Npb24gdGhhdCBzb3VyY2VzIHRyYW5zcG9ydCBjaGFyYWN0ZXJpc3RpY3MKK2FuZCBjb21tb24gaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEgc2V0IG9mIFNOTVAgdHJhbnNhY3Rpb25zLgorQWZ0ZXIgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvCisuQiBzbm1wX3Nlc3Nfb3BlbigpCit0byBjcmVhdGUgYW4gU05NUCBzZXNzaW9uLCB0aGUgc3RydWN0dXJlIGlzIG5vIGxvbmdlciB1c2VkLiAgSW5zdGVhZAordGhlIG9wYXF1ZSBwb2ludGVyIHJldHVybmVkIGJ5CisuQiBzbm1wX3Nlc3Nfb3BlbigpCitpcyB1c2VkIHRvIHJlZmVyIHRvIHRoYXQgc2Vzc2lvbiBoZW5jZWZvcnRoLgorLlBQCitTTk1QIHNlc3Npb25zIHRoYXQgYXJlIGNyZWF0ZWQgd2l0aAorLkIgc25tcF9zZXNzX29wZW4oKQorYXJlIG5vdCBhZmZlY3RlZCBieSwgYW5kIFNIT1VMRCBOT1QgQkUgVVNFRCBXSVRILAorLkJSIHNubXBfc2VsZWN0X2luZm8oKSAiLCAiIHNubXBfcmVhZCgpICIsICIgc25tcF90aW1lb3V0KCkgIiBub3IiCisuQlIgc25tcF9jbG9zZSgpIC4KK1JhdGhlciB0aGUgZXF1aXZhbGVudCBzaW5nbGUgc2Vzc2lvbiBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgc2hvdWxkCitiZSB1c2VkLgorLlBQCisuQiBzbm1wX3Nlc3NfaW5pdCgpCithbmQKKy5CIHNubXBfc2Vzc19vcGVuKCkKK2VhY2ggdGFrZSBhcyBpbnB1dCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgc25tcF9zZXNzaW9uIG9iamVjdC4KK1RoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBhIHNldCBvZiB0cmFuc2FjdGlvbnMgdGhhdAord2lsbCBzaGFyZSBzaW1pbGFyIHRyYW5zcG9ydCBjaGFyYWN0ZXJpc3RpY3MuCisuQiBzbm1wX3Nlc3Nfc2Vzc2lvbigpCit0YWtlcyB0aGUgb3BhcXVlIHNlc3Npb24gaGFuZGxlIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0bworaXRzIGFzc29jaWF0ZWQgc3RydWN0IHNubXBfc2Vzc2lvbi4KKy5QUAorLkIgc25tcF9zZXNzX3NlbmQoKQorYW5kCisuQiBzbm1wX3Nlc3NfYXN5bmNfc2VuZCgpCitlYWNoIHRha2UgYQorLkkgcGR1CitwYXJhbWV0ZXIsIHdoaWNoIHBvaW50cyB0byBhIHN0cnVjdCBzbm1wX3BkdSBvYmplY3QgY29udGFpbmluZworaW5mb3JtYXRpb24gdGhhdCBkZXNjcmliZXMgYSB0cmFuc2FjdGlvbiB0aGF0IHdpbGwgYmUgcGVyZm9ybWVkIG92ZXIKK2FuIG9wZW4gc2Vzc2lvbi4KKy5QUAorQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2Ugc3RydWN0dXJlcy4KKy5QUAorV2l0aCB0aGUKKy5JIHNubXBfc2Vzc19hc3luY19zZW5kKCkKK2NhbGwsCisuSSBzbm1wX3Nlc3NfcmVhZAord2lsbCBpbnZva2UgdGhlIHNwZWNpZmllZCBjYWxsYmFjayB3aGVuIHRoZSByZXNwb25zZSBpcyByZWNlaXZlZC4KKy5QUAorLkJSIHNubXBfc2Vzc19zZWxlY3RfaW5mbygpICIsICIgc25tcF9zZXNzX3JlYWQoKSAiIGFuZCAiIHNubXBfc2Vzc190aW1lb3V0KCkKK3Byb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciB0aGUgdXNlIG9mIHRoZQorLkJSIHNlbGVjdCAoMikKK3N5c3RlbSBjYWxsIHNvIHRoYXQgU05NUCB0cmFuc2FjdGlvbnMgZm9yIGEgc2luZ2xlIHNlc3Npb24gY2FuIG9jY3VyCithc3luY2hyb25vdXNseS4KKy5QUAorLkIgc25tcF9zZXNzX3NlbGVjdF9pbmZvKCkKK2lzIHBhc3NlZCB0aGUgaW5mb3JtYXRpb24gdGhhdCB3b3VsZCBoYXZlIGJlZW4gcGFzc2VkIHRvCisuQlIgc2VsZWN0ICgyKQoraW4gdGhlIGFic2VuY2Ugb2YgU05NUC4gIEZvciBleGFtcGxlLCB0aGlzIG1pZ2h0IGluY2x1ZGUgZmlsZQorZGVzY3JpcHRvcnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYWluIGxvb3Agb2YgYSBncmFwaGljYWwKK2FwcGxpY2F0aW9uLiBUaGlzIGluZm9ybWF0aW9uIGlzIG1vZGlmaWVkIHNvIHRoYXQgU05NUCB3aWxsIGdldCB0aGUKK3NlcnZpY2UgaXQgcmVxdWlyZXMgZnJvbSB0aGUgY2FsbCB0bworLkJSIHNlbGVjdCAoMikuCitJbiB0aGlzIGNhc2UsCisuSVIgbnVtZmRzICIsICIgZmRzZXQgIiBhbmQgIiB0aW1lb3V0Citjb3JyZXNwb25kIHRvIHRoZQorLklSIG5mZHMgIiwgIiByZWFkZmRzICIgYW5kICIgdGltZW91dAorYXJndW1lbnRzIHRvCisuQlIgc2VsZWN0ICgyKQorcmVzcGVjdGl2ZWx5LiAgVGhlIG9ubHkgZXhjZXB0aW9uIGlzIHRoYXQgdGltZW91dCBtdXN0IEFMV0FZUyBwb2ludCB0bworYW4gYWxsb2NhdGVkIChidXQgcGVyaGFwcyB1bmluaXRpYWxpemVkKQorLkkgc3RydWN0IHRpbWV2YWwKKyhpdCBjYW5ub3QgYmUgTlVMTCBhcyBmb3IKKy5CUiBzZWxlY3QgKDIpKS4KK0lmCisuSSB0aW1lb3V0Cit3b3VsZCBoYXZlIGJlZW4gcGFzc2VkIGFzIE5VTEwsCisuSSBibG9jaworaXMgaW5zdGVhZCBzZXQgdG8gdHJ1ZSwgYW5kCisuSSB0aW1lb3V0CitpcyB0cmVhdGVkIGFzIHVuZGVmaW5lZC4gIFRoaXMgc2FtZSBydWxlIGFwcGxpZXMgdXBvbiByZXR1cm4gZnJvbQorLkJSIHNubXBfc2VsZWN0X2luZm8oKSAuCisuUFAKK0FmdGVyIGNhbGxpbmcKKy5CIHNubXBfc2Vzc19zZWxlY3RfaW5mbygpICwKKy5CUiBzZWxlY3QgKDIpCitzaG91bGQgYmUgY2FsbGVkIHdpdGggdGhlIHJldHVybmVkIGRhdGEuICBXaGVuIGl0IHJldHVybnMsCisuQiBzbm1wX3Nlc3NfcmVhZCgpCitzaG91bGQgdGhlbiBiZSBjYWxsZWQgd2l0aCB0aGUKKy5JIGZkX3NldAorcmV0dXJuZWQgZnJvbQorLkJSIHNlbGVjdCAoMikuCitUaGlzIHdpbGwgcmVhZCBhbnkgaW5wdXQgZnJvbSB0aGlzIHNlc3Npb24ncyBTTk1QIHNvY2tldC4gIElmCisuQlIgc2VsZWN0ICgyKQordGltZXMgb3V0ICh0aGF0IGlzLCBpdCByZXR1cm5zIHplcm8pLAorLkIgc25tcF9zZXNzX3RpbWVvdXQoKQorc2hvdWxkIGJlIGNhbGxlZCB0byBzZWUgaWYgYSB0aW1lb3V0IGhhcyBvY2N1cnJlZCBvbiB0aGUgU05NUAorc2Vzc2lvbi4KKy5QUAorLkkgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlCitpcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgdGhhdCB3aWxsIHNlbmQgdGhlIHJlcXVlc3QsCit3YWl0IGZvciB0aGUgcmVzcG9uc2UgYW5kIHByb2Nlc3MgaXQgYmVmb3JlIHJldHVybmluZy4KK1NlZSB0aGUgZGVzY3JpcHRpb25zIG9mCisuSSAic25tcF9zZXNzX3NlbmQiICIsICIgInNubXBfc2Vzc19yZWFkIgorZXRjIGZvciBkZXRhaWxzLgorLlNIIERJQUdOT1NUSUNTCisuUFAKK0Vycm9yIHJldHVybiBzdGF0dXMgZnJvbSAKKy5CIHNubXBfc2Vzc19vcGVuKCkKK2lzIGluZGljYXRlZCBieSByZXR1cm4gb2YgYSBOVUxMIHBvaW50ZXIuCitFcnJvciByZXR1cm4gc3RhdHVzIGZyb20gCisuQiBzbm1wX3Nlc3NfY2xvc2UoKQorYW5kCisuQiBzbm1wX3Nlc3Nfc2VuZCgpCitpcyBpbmRpY2F0ZWQgYnkgYSByZXR1cm4gdmFsdWUgb2YgMC4gIEEgc3VjY2Vzc2Z1bCBzdGF0dXMgd2lsbCByZXR1cm4KKzEuCisuUFAKK0Z1cnRoZXIgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IHVzaW5nCisuQiBzbm1wX3Nlc3NfZXJyb3IoKQordG8gc2VlIHdoYXQgdHlwZSBvZiBlcnJvciBoYXMgb2NjdXJyZWQuICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlCitTTk1QCisuSSBzbm1wX2Vycm5vCit2YXJpYWJsZSwgdGhlIHZhbHVlIG9mIHRoZSBzeXN0ZW0KKy5JIGVycm5vCit2YXJpYWJsZSwgYW5kIGEgc3RyaW5nIGludGVycHJldGF0aW9uIG9mIGJvdGggdmFyaWFibGVzLiAgVGhlIHN0cmluZworbXVzdCBiZSBmcmVlZCBhZnRlciB1c2UgYnkgdGhlIGNhbGxlci4KKy5QUAorRm9yIGVycm9ycyByZXR1cm5lZCBieQorLkJSIHNubXBfc2Vzc19vcGVuKCkgLAordXNlIHRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9uCisuQiBzbm1wX2Vycm9yKCkKK2luc3RlYWQgb2YKKy5CUiBzbm1wX3Nlc3NfZXJyb3IoKSAuCisuUFAKK0NvbnN1bHQgc25tcF9hcGkuaCBmb3IgdGhlIGNvbXBsZXRlIHNldCBvZiBTTk1QIGxpYnJhcnkKK2Vycm9yIHZhbHVlcy4KK1RoZSBTTk1QIGxpYnJhcnkgZXJyb3IgdmFsdWUKKy5JUiBzbm1wZXJyCitjYW4gYmUgb25lIG9mIHRoZSBmb2xsb3dpbmcgdmFsdWVzOgorLlJTIDJuCisuSVAgU05NUEVSUl9HRU5FUlIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorQSBnZW5lcmljIGVycm9yIG9jY3VycmVkLgorLklQIFNOTVBFUlJfQkFEX0xPQ1BPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorVGhlIGxvY2FsIHBvcnQgd2FzIGJhZCBiZWNhdXNlIGl0IGhhZCBhbHJlYWR5IGJlZW4KK2FsbG9jYXRlZCBvciBwZXJtaXNzaW9uIHdhcyBkZW5pZWQuCisuSVAgU05NUEVSUl9CQURfQUREUkVTUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCitUaGUgaG9zdCBuYW1lIG9yIGFkZHJlc3MgZ2l2ZW4gd2FzIG5vdCB1c2VhYmxlLgorLklQIFNOTVBFUlJfQkFEX1NFU1NJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorVGhlIHNwZWNpZmllZCBzZXNzaW9uIHdhcyBub3Qgb3Blbi4KKy5JUCBTTk1QRVJSX1RPT19MT05HIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX05PX1NPQ0tFVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9WMl9JTl9WMSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9WMV9JTl9WMiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUkVQRUFURVJTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfQVNOMV9CVUlMRCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfU0VORFRPIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9SQ1ZGUk9NIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0JBRF9QQVJTRSBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfVkVSU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfQ09NTVVOSVRZIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX05PQVVUSF9ERVNQUklWIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX0FCT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1VOS05PV05fUERVIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KKy5JUCBTTk1QRVJSX1RJTUVPVVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLlJFCisuUFAKKy5TSCAiU0VFIEFMU08iCitzZWxlY3QoMiksIG5ldHNubXBfc2Vzc2lvbl9hcGkoMyksIG5ldHNubXBfcGR1X2FwaSgzKSwKK25ldHNubXBfdmFyYmluZF9hcGkoMyksIG5ldHNubXBfbWliX2FwaSgzKSwgc25tcF9hcGkuaApkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYgYi9tYW4vbmV0c25tcF9zZXNzaW9uX2FwaS4zLmRlZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODg5MWExCi0tLSAvZGV2L251bGwKKysrIGIvbWFuL25ldHNubXBfc2Vzc2lvbl9hcGkuMy5kZWYKQEAgLTAsMCArMSwyODIgQEAKKy5cIiAtKi0gbnJvZmYgLSotCisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CisuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisuXCIgCUNvcHlyaWdodCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CisuXCIgCisuXCIgICAgICAgICAgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy5cIiAKKy5cIiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgCisuXCIgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCAKKy5cIiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0CisuXCIgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIAorLlwiIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ01VIG5vdCBiZQorLlwiIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIAorLlwiIAorLlwiIENNVSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HCisuXCIgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMCisuXCIgQ01VIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUgorLlwiIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywKKy5cIiBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sCisuXCIgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworLlwiIFNPRlRXQVJFLgorLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy5USCBORVRTTk1QX1NFU1NJT05fQVBJIDMgIjE5IE1heSAyMDExIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlNIIE5BTUUKK3NubXBfc2Vzc19pbml0LAorc25tcF9vcGVuLAorc25tcF9zZW5kLAorc25tcF9hc3luY19zZW5kLAorc25tcF9zZWxlY3RfaW5mbywKK3NubXBfcmVhZCwKK3NubXBfdGltZW91dCwKK3NubXBfc3luY2hfcmVzcG9uc2UsCitzbm1wX2Nsb3NlLAorc25tcF9wZXJyb3IsCitzbm1wX3Nlc3NfcGVycm9yLAorc25tcF9lcnJvciwKK3NubXBfYXBpX2VycnN0cmluZyBcLSBuZXRzbm1wX3Nlc3Npb25fYXBpIGZ1bmN0aW9ucworLlNIIFNZTk9QU0lTCisuQiAjaW5jbHVkZSA8bmV0LXNubXAvc2Vzc2lvbl9hcGkuaD4KKy5QUAorLkJJICJ2b2lkIHNubXBfc2Vzc19pbml0ICggbmV0c25tcF9zZXNzaW9uKiIgInNlc3MiICk7CisuUFAKKy5CSSAibmV0c25tcF9zZXNzaW9uKiBzbm1wX29wZW4gKCBuZXRzbm1wX3Nlc3Npb24gKiIgInNlc3MiKTsKKy5SUworLkkgLyogSW5wdXQgcGFyYW1ldGVyIG5vdCB1c2VkIGluIGFjdGl2ZSBzZXNzaW9ucyAqLworLlJFCisuUFAKKy5CSSAiaW50IHNubXBfc2VuZCAoIG5ldHNubXBfc2Vzc2lvbiAqIiAic2Vzc2lvbiwiCisuUlMKKy5CSSAibmV0c25tcF9wZHUgKiIgInBkdSIgKTsKKy5SRQorLlBQCisuQkkgImludCBzbm1wX2FzeW5jX3NlbmQgKCBuZXRzbm1wX3Nlc3Npb24gKiIgInNlc3Npb24sIgorLlJTCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqIiBwZHUgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2NhbGxiYWNrICIgY2FsbGJhY2sgIiwgIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoiIGNhbGxiYWNrRGF0YSAiKTsiCisuUkUKKy5QUAorLkJJICJpbnQgc25tcF9zZWxlY3RfaW5mbyAoIGludCAqICIgbnVtZmRzLCAiZmRfc2V0ICoiIGZkc2V0LAorLlJTCisuQkkgInN0cnVjdCB0aW1ldmFsICoiIHRpbWVvdXQsICJpbnQgKiIgYmxvY2sgKTsKKy5SRQorLlBQCisuQkkgInZvaWQgc25tcF9yZWFkICggZmRfc2V0ICoiIGZkc2V0ICk7CisuUFAKKy5CICB2b2lkIHNubXBfdGltZW91dCAoIHZvaWQgKTsKKy5QUAorLkJJICJpbnQgc25tcF9zeW5jaF9yZXNwb25zZSAoIG5ldHNubXBfc2Vzc2lvbiAqIiAic2Vzc2lvbiwiCisuUlMKKy5CSSAibmV0c25tcF9wZHUgKiIgInBkdSIgIiwgIgorLmJyCisuQkkgIm5ldHNubXBfcGR1ICoqIiAicmVzcG9uc2UiICk7CisuUkUKKy5QUAorLkJJICJpbnQgc25tcF9jbG9zZSAoIG5ldHNubXBfc2Vzc2lvbiAqIiBzZXNzaW9uICk7CisuYnIKKy5CICAiaW50IHNubXBfY2xvc2Vfc2Vzc2lvbnMgKCB2b2lkICk7CisuUFAKKy5TUyBFcnJvciBSZXBvcnRpbmcKKy5JIChNb3ZlIHRvIG91dHB1dF9hcGkoMykpCisuYnIKKy5CSSAidm9pZCBzbm1wX2Vycm9yICggbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uLAorLlJTCisuQkkgImludCAqIiBwY2xpYmVyciwgImludCAqIiBwc25tcGVyciwgImNoYXIgKioiIHBwZXJyc3RyaW5nICk7CisuUkUKKy5QUAorLkJJICJjaGFyICpzbm1wX2FwaV9lcnJzdHJpbmcgKCBpbnQiIHNubXBlcnIgKTsKKy5QUAorLkJJICJ2b2lkIHNubXBfcGVycm9yICggY2hhciAqIiBtc2cgKTsKKy5SUworLkkgLyogZm9yIHBhcnNpbmcgZXJyb3JzIG9ubHkgKi8KKy5SRQorLlBQCisuQkkgInZvaWQgc25tcF9zZXNzX3BlcnJvciAoY2hhciAqIiBtc2csICJuZXRzbm1wX3Nlc3Npb24gKiIgc2VzcyApOworLlJTCisuSSAvKiBhbGwgb3RoZXIgU05NUCBsaWJyYXJ5IGVycm9ycyAqLworLlJFCisuUFAKKy5TSCBERVNDUklQVElPTgorLkkgU25tcF9zZXNzX2luaXQKK3ByZXBhcmVzIGEgbmV0c25tcF9zZXNzaW9uIHRoYXQgc291cmNlcyB0cmFuc3BvcnQgY2hhcmFjdGVyaXN0aWNzCithbmQgY29tbW9uIGluZm9ybWF0aW9uIHRoYXQgd2lsbCBiZSB1c2VkIGZvciBhIHNldCBvZiBTTk1QIHRyYW5zYWN0aW9ucy4KK0FmdGVyIHRoaXMgc3RydWN0dXJlIGlzIHBhc3NlZCB0bworLkkgc25tcF9vcGVuCit0byBjcmVhdGUgYW4gU05NUCBzZXNzaW9uLCB0aGUgc3RydWN0dXJlIGlzIG5vdCB1c2VkLgorLlBQCisuSSBTbm1wX29wZW4KK3JldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHktZm9ybWVkCisuSSBuZXRzbm1wX3Nlc3Npb24KK29iamVjdCwgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG11c3QgdXNlIHRvIHJlZmVyZW5jZSB0aGUKK2FjdGl2ZSBTTk1QIHNlc3Npb24uCisuUFAKKy5JIHNubXBfc2VuZAorYW5kCisuSSBzbm1wX2FzeW5jX3NlbmQoKQorZWFjaCB0YWtlIGFzIGlucHV0IGEgcG9pbnRlciB0byBhCisuSSBuZXRzbm1wX3BkdQorb2JqZWN0LgorVGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgaW5mb3JtYXRpb24gdGhhdCBkZXNjcmliZXMgYSB0cmFuc2FjdGlvbgordGhhdCB3aWxsIGJlIHBlcmZvcm1lZCBvdmVyIGFuIG9wZW4gc2Vzc2lvbi4KKy5QUAorQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2Ugc3RydWN0dXJlcy4KKy5QUAorV2l0aCB0aGUKKy5JIHNubXBfYXN5bmNfc2VuZCgpCitjYWxsLAorLkkgc25tcF9yZWFkCit3aWxsIGludm9rZSB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgorLlBQCisuSSBTbm1wX3JlYWQsIHNubXBfc2VsZWN0X2luZm8sCithbmQKKy5JIHNubXBfdGltZW91dAorcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHRoZSB1c2Ugb2YgdGhlCisuSVIgc2VsZWN0KDIpCitzeXN0ZW0gY2FsbCBzbyB0aGF0IFNOTVAgdHJhbnNhY3Rpb25zIGNhbiBvY2N1ciBhc3luY2hyb25vdXNseS4KKy5QUAorLkkgU25tcF9zZWxlY3RfaW5mbworaXMgZ2l2ZW4gdGhlIGluZm9ybWF0aW9uIHRoYXQgd291bGQgaGF2ZSBiZWVuIHBhc3NlZCB0bworLkkgc2VsZWN0CitpbiB0aGUgYWJzZW5jZSBvZiBTTk1QLiAgRm9yIGV4YW1wbGUsIHRoaXMgbWlnaHQgaW5jbHVkZSB3aW5kb3cgdXBkYXRlIGluZm9ybWF0aW9uLgorVGhpcyBpbmZvcm1hdGlvbiBpcyBtb2RpZmllZCBzbyB0aGF0IFNOTVAgd2lsbCBnZXQgdGhlIHNlcnZpY2UgaXQgcmVxdWlyZXMgZnJvbSB0aGUKK2NhbGwgdG8KKy5JIHNlbGVjdC4KK0luIHRoaXMgY2FzZSwKKy5JIG51bWZkcywgZmRzZXQsCithbmQKKy5JIHRpbWVvdXQKK2NvcnJlc3BvbmQgdG8gdGhlCisuSSBuZmRzLCByZWFkZmRzLAorYW5kCisuSSB0aW1lb3V0Cithcmd1bWVudHMgdG8KKy5JIHNlbGVjdCwKK3Jlc3BlY3RpdmVseS4gIFRoZSBvbmx5IGV4Y2VwdGlvbiBpcyB0aGF0IHRpbWVvdXQgbXVzdCBhbHdheXMgcG9pbnQgdG8gYW4gYWxsb2NhdGVkIChidXQgcGVyaGFwcyB1bmluaXRpYWxpemVkKQorLkkgc3RydWN0IHRpbWV2YWwuCitJZgorLkkgdGltZW91dAord291bGQgaGF2ZSBiZWVuIHBhc3NlZCBhcyBOVUxMLAorLkkgYmxvY2sKK2lzIHNldCB0byB0cnVlLCBhbmQKKy5JIHRpbWVvdXQKK2lzIHRyZWF0ZWQgYXMgdW5kZWZpbmVkLiAgVGhpcyBzYW1lIHJ1bGUgYXBwbGllcyB1cG9uIHJldHVybiBmcm9tCisuSSBzbm1wX3NlbGVjdF9pbmZvLgorLlBQCitBZnRlciBjYWxsaW5nCisuSSBzbm1wX3NlbGVjdF9pbmZvLCBzZWxlY3QKK2lzIGNhbGxlZCB3aXRoIHRoZSByZXR1cm5lZCBkYXRhLiAgV2hlbiBzZWxlY3QgcmV0dXJucywKKy5JIHNubXBfcmVhZAorc2hvdWxkIGJlIGNhbGxlZCB3aXRoIHRoZQorLkkgZmRfc2V0CityZXR1cm5lZCBmcm9tCisuSSBzZWxlY3QKK3RvIHJlYWQgZWFjaCBTTk1QIHNvY2tldCB0aGF0IGhhcyBpbnB1dC4KK0lmCisuSSBzZWxlY3QKK3RpbWVzIG91dCwKKy5JIHNubXBfdGltZW91dAorc2hvdWxkIGJlIGNhbGxlZCB0byBzZWUgaWYgdGhlIHRpbWVvdXQgd2FzIGludGVuZGVkIGZvciBTTk1QLgorLlBQCisuSSBzbm1wX3N5bmNoX3Jlc3BvbnNlCitpcyBhIGNvbnZlbmllbmNlIHJvdXRpbmUgdGhhdCB3aWxsIHNlbmQgdGhlIHJlcXVlc3QsCit3YWl0IGZvciB0aGUgcmVzcG9uc2UgYW5kIHByb2Nlc3MgaXQgYmVmb3JlIHJldHVybmluZy4KK1NlZSB0aGUgZGVzY3JpcHRpb25zIG9mCisuSSAic25tcF9zZW5kIiAiLCAiICJzbm1wX3JlYWQiCitldGMgZm9yIGRldGFpbHMuCisuU0ggRElBR05PU1RJQ1MKKy5QUAorUHJldmlvdXMgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkgdXNlZAorLklSIHNubXBfZ2V0X2Vycm5vCit0byByZWFkIHRoZSBnbG9iYWwgdmFyaWFibGUKKy5JIHNubXBfZXJybm8KK3doaWNoIG1heSBoYXZlIGhlbGQgdGhlIGVycm9yIHN0YXR1cyB3aXRoaW4gdGhlIFNOTVAgbGlicmFyeS4KK1RoZSBleGlzdGluZyBtZXRob2QKKy5JIHNubXBfcGVycm9yCitzaG91bGQgYmUgdXNlZCB0byBsb2cgQVNOLjEgY29kaW5nIGVycm9ycyBvbmx5LgorLlBQCitUaGUgbmV3IG1ldGhvZAorLkkgc25tcF9zZXNzX3BlcnJvcgoraXMgcHJvdmlkZWQgdG8gY2FwdHVyZSBlcnJvcnMgdGhhdCBvY2N1ciBkdXJpbmcgdGhlIHByb2Nlc3NpbmcKK29mIGEgcGFydGljdWxhciBTTk1QIHNlc3Npb24uCisuSSBTbm1wX3Nlc3NfcGVycm9yCitjYWxscworLklSIHNubXBfZXJyb3IKK2Z1bmN0aW9uIHRvIG9idGFpbiB0aGUgIkMiIGxpYnJhcnkgZXJyb3IKKy5JIGVycm5vCissIHRoZSBTTk1QIGxpYnJhcnkgZXJyb3IKKy5JIHNubXBlcnIKKywgYW5kIHRoZSBTTk1QIGxpYnJhcnkgZGV0YWlsZWQgZXJyb3IgbWVzc2FnZQordGhhdCBpcyBhc3NvY2lhdGVkIHdpdGggYW4gZXJyb3IgdGhhdCBvY2N1cnJlZCBkdXJpbmcgYSBnaXZlbiBzZXNzaW9uLgorLlBQCitOb3RlIHRoYXQgaW4gYWxsIGNhc2VzIGV4Y2VwdCBvbmUsCisuSVIgc25tcF9zZXNzX3BlcnJvcgorc2hvdWxkIGJlIGhhbmRlZCB0aGUKKy5JIG5ldHNubXBfc2Vzc2lvbiAqCitwb2ludGVyIHJldHVybmVkIGZyb20KKy5JUiBzbm1wX29wZW4uCitJZgorLklSIHNubXBfb3BlbgorcmV0dXJucyBhIG51bGwgcG9pbnRlciwgcGFzcyB0aGUgSU5QVVQKKy5JIG5ldHNubXBfc2Vzc2lvbiAqCitwb2ludGVyIHVzZWQgdG8gY2FsbAorLklSIHNubXBfb3Blbi4KKy5QUAorRXJyb3IgcmV0dXJuIHN0YXR1cyBmcm9tIAorLkkgc25tcF9jbG9zZQorYW5kCisuSSBzbm1wX3NlbmQKK2lzIGluZGljYXRlZCBieSByZXR1cm4gb2YgMC4gIEEgc3VjY2Vzc2Z1bCBzdGF0dXMgd2lsbCByZXR1cm4gYSAxIGZvcgorLkkgc25tcF9jbG9zZQorYW5kIHRoZSByZXF1ZXN0IGlkIG9mIHRoZSBwYWNrZXQgZm9yCisuSSBzbm1wX3NlbmQuCitVcG9uIHN1Y2Nlc3NmdWwgcmV0dXJuIGZyb20KKy5JIHNubXBfc2VuZAordGhlIHBkdSB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBsaWJyYXJ5LgorLlBQCitDb25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBjb21wbGV0ZSBzZXQgb2YgU05NUCBsaWJyYXJ5CitlcnJvciB2YWx1ZXMuCitUaGUgU05NUCBsaWJyYXJ5IGVycm9yIHZhbHVlCisuSVIgc25tcGVycgorY2FuIGJlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHZhbHVlczoKKy5SUyAybgorLklQIFNOTVBFUlJfR0VORVJSIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK0EgZ2VuZXJpYyBlcnJvciBvY2N1cnJlZC4KKy5JUCBTTk1QRVJSX0JBRF9MT0NQT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK1RoZSBsb2NhbCBwb3J0IHdhcyBiYWQgYmVjYXVzZSBpdCBoYWQgYWxyZWFkeSBiZWVuCithbGxvY2F0ZWQgb3IgcGVybWlzc2lvbiB3YXMgZGVuaWVkLgorLklQIFNOTVBFUlJfQkFEX0FERFJFU1MgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorVGhlIGhvc3QgbmFtZSBvciBhZGRyZXNzIGdpdmVuIHdhcyBub3QgdXNlYWJsZS4KKy5JUCBTTk1QRVJSX0JBRF9TRVNTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KK1RoZSBzcGVjaWZpZWQgc2Vzc2lvbiB3YXMgbm90IG9wZW4uCisuSVAgU05NUEVSUl9UT09fTE9ORyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9OT19TT0NLRVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVjJfSU5fVjEgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVjFfSU5fVjIgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1JFUEVBVEVSUyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUkVQRVRJVElPTlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX0FTTjFfQlVJTEQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1NFTkRUTyBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuSVAgU05NUEVSUl9CQURfUEFSU0UgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQkFEX1ZFUlNJT04gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfTk9BVVRIX0RFU1BSSVYgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfQUJPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVU5LTk9XTl9QRFUgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgorLklQIFNOTVBFUlJfVElNRU9VVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCisuUkUKKy5QUAorQSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGVycm9yIGNvZGUgY2FuIGJlIG9idGFpbmVkIHdpdGgKKy5JUiBzbm1wX2FwaV9lcnJzdHJpbmcgLAorYW5kIGEgc3RhbmRhcmQgZXJyb3IgbWVzc2FnZSBtYXkgYmUgcHJpbnRlZCB1c2luZworLkkgc25tcF9wZXJyb3IKK3RoYXQgZnVuY3Rpb25zIGxpa2UgdGhlCisuSSBwZXJyb3IKK3N0YW5kYXJkIHJvdXRpbmUuCisuU0ggIlNFRSBBTFNPIgorc2VsZWN0KDIpLCBuZXRzbm1wX3Nlc3NfYXBpKDMpLCBuZXRzbm1wX21pYl9hcGkoMyksIG5ldHNubXBfcGR1X2FwaSgzKSwKK25ldHNubXBfdmFyYmluZF9hcGkoMyksIHNubXBfYXBpLmgKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NldF9kYXRhLjMgYi9tYW4vbmV0c25tcF9zZXRfZGF0YS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YWI0MmE0Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NldF9kYXRhLjMKKysrIC9kZXYvbnVsbApAQCAtMSw2MSArMCwwIEBACi0uVEggInNldF9kYXRhOiBoZWxwcyBzdG9yaW5nIGFuZCByZXRyaXZpbmcgb2YgZGF0YSBkdXJpbmcgc2V0IHRyYW5zYWN0aW9ucyIgMyAiMTcgT2N0IDIwMDMiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNldF9kYXRhOiBoZWxwcyBzdG9yaW5nIGFuZCByZXRyaXZpbmcgb2YgZGF0YSBkdXJpbmcgc2V0IHRyYW5zYWN0aW9ucyBcLSBUaGUgc2V0X2RhdGEgaGVscGVyLiAKLU1vcmUuLi4KLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX3NldF9kYXRhX21hc3Rlcl9zXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX3NldF9kYXRhX3N0b3JlX3NcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9zZXRfZGF0YV9jYWNoZVxmUCAobmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3QsIHVuc2lnbmVkIGludCBtYWdpY19udW0sIHZvaWQgKm5ld19kYXRhLCBzaXplX3QgbmV3X2RhdGFfbGVuLCB2b2lkICpvbGRfZGF0YSwgc2l6ZV90IG9sZF9kYXRhX2xlbikiCi0uYnIKLS5SSSAiXGZJc3RvcmVzIG5ldyBhbmQgb2xkIGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoZSBtYWdpYyBudW1iZXIuXGZQIgotLnRpIC0xYwotLlJJICJuZXRzbm1wX3NldF9kYXRhXyBuZXRzbm1wX21pYl9oYW5kbGVyICogXGZCbmV0c25tcF9nZXRfbXVsdGlwbGV4ZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQICpyZXEpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBtdWx0aXBsaXhlciBoYW5kbGVyIGdpdmVuIGEgXGZCbmV0c25tcF9taWJfaGFuZGxlcl9tZXRob2RzXGZQIHN0cnVjdHVyZSBvZiBzdWJoYW5kbGVycy5cZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX211bHRpcGxleGVyX2hlbHBlcl9oYW5kbGVyXGZQIChuZXRzbm1wX21pYl9oYW5kbGVyICpoYW5kbGVyLCBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uICpyZWdpbmZvLCBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqcmVxaW5mbywgbmV0c25tcF9yZXF1ZXN0X2luZm8gKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklpbXBsZW1lbnRzIHRoZSBtdWx0aXBsZXhlciBoZWxwZXJcZlAiCi0uaW4gLTFjCi0uU0ggIkRFVEFJTEVEIERFU0NSSVBUSU9OIgotLlBQIAotVGhlIHNldF9kYXRhIGhlbHBlci4KLS5QUAotLlNIICJGVU5DVElPTiBET0NVTUVOVEFUSU9OIgotLlBQIAotLlNTICJuZXRzbm1wX3NldF9kYXRhXyBuZXRzbm1wX21pYl9oYW5kbGVyKiBuZXRzbm1wX2dldF9tdWx0aXBsZXhlcl9oYW5kbGVyIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyX21ldGhvZHNcZlAgKiByZXEpIgotLlBQCi1yZXR1cm5zIGEgbXVsdGlwbGl4ZXIgaGFuZGxlciBnaXZlbiBhIFxmQm5ldHNubXBfbWliX2hhbmRsZXJfbWV0aG9kc1xmUCBzdHJ1Y3R1cmUgb2Ygc3ViaGFuZGxlcnMuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NCBvZiBmaWxlIHNldF9kYXRhLmMuCi0uUFAKLVJlZmVyZW5jZXMgbmV0c25tcF9jcmVhdGVfaGFuZGxlcigpLCBhbmQgbmV0c25tcF9tdWx0aXBsZXhlcl9oZWxwZXJfaGFuZGxlcigpLgotLlNTICJpbnQgbmV0c25tcF9tdWx0aXBsZXhlcl9oZWxwZXJfaGFuZGxlciAobmV0c25tcF9taWJfaGFuZGxlciAqIGhhbmRsZXIsIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKiByZWdpbmZvLCBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyAqIHJlcWluZm8sIG5ldHNubXBfcmVxdWVzdF9pbmZvICogcmVxdWVzdHMpIgotLlBQCi1pbXBsZW1lbnRzIHRoZSBtdWx0aXBsZXhlciBoZWxwZXIKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNSBvZiBmaWxlIHNldF9kYXRhLmMuCi0uUFAKLVJlZmVyZW5jZXMgbmV0c25tcF9jYWxsX2hhbmRsZXIoKSwgYW5kIG5ldHNubXBfZXh0cmFjdF9pdGVyYXRvcl9jb250ZXh0KCkuCi0uUFAKLVJlZmVyZW5jZWQgYnkgbmV0c25tcF9nZXRfbXVsdGlwbGV4ZXJfaGFuZGxlcigpLgotLlNTICJ2b2lkIG5ldHNubXBfc2V0X2RhdGFfY2FjaGUgKG5ldHNubXBfcmVxdWVzdF9pbmZvICogcmVxdWVzdCwgdW5zaWduZWQgaW50IG1hZ2ljX251bSwgdm9pZCAqIG5ld19kYXRhLCBzaXplX3QgbmV3X2RhdGFfbGVuLCB2b2lkICogb2xkX2RhdGEsIHNpemVfdCBvbGRfZGF0YV9sZW4pIgotLlBQCi1zdG9yZXMgbmV3IGFuZCBvbGQgaW5mb3JtYXRpb24gYmFzZWQgb24gdGhlIG1hZ2ljIG51bWJlci4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ1IG9mIGZpbGUgc2V0X2RhdGEuYy4KLS5QUAotUmVmZXJlbmNlcyBuZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QoKSwgbmV0c25tcF9leHRyYWN0X3RhYmxlX2luZm8oKSwgbmV0c25tcF9yZXF1ZXN0X2FkZF9saXN0X2RhdGEoKSwgYW5kIFNOTVBfTUlOLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc25tcF9hZ2VudC4zIGIvbWFuL25ldHNubXBfc25tcF9hZ2VudC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiOTIxZGFkLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NubXBfYWdlbnQuMworKysgL2Rldi9udWxsCkBAIC0xLDU3MSArMCwwIEBACi0uVEggIm5ldC1zbm1wIGFnZW50IHJlbGF0ZWQgcHJvY2Vzc2luZyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLW5ldC1zbm1wIGFnZW50IHJlbGF0ZWQgcHJvY2Vzc2luZyBcLSAKLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJhZGRyQ2FjaGVcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQl9hZ2VudF9uc2FwXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJhZ2VudF9zZXRfY2FjaGVfc1xmUCIKLS5icgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9ORUVEX1JFUVVFU1RfTElTVFxmUCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfQUREUkNBQ0hFX1NJWkVcZlAgICAxMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfQUREUkNBQ0hFX01BWEFHRVxmUCAgIDMwMCIKLS5icgotLmluIC0xYwotLlNTICJUeXBlZGVmcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJfYWdlbnRfbnNhcFxmUCBcZkJhZ2VudF9uc2FwXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInR5cGVkZWYgc3RydWN0IFxmQmFnZW50X3NldF9jYWNoZV9zXGZQIFxmQmFnZW50X3NldF9jYWNoZVxmUCIKLS5icgotLmluIC0xYwotLlNTICJFbnVtZXJhdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiZW51bSB7IFxmQlNOTVBfQUREUkNBQ0hFX1VOVVNFRFxmUCA9ICAwLCBcZkJTTk1QX0FERFJDQUNIRV9VU0VEXGZQID0gIDEgfSIKLS5icgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfYWdlbnRfY2hlY2tfcGFja2V0XGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgc3RydWN0IFxmQm5ldHNubXBfdHJhbnNwb3J0X3NcZlAgKiwgdm9pZCAqLCBpbnQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FnZW50X2NoZWNrX3BhcnNlXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiwgXGZCbmV0c25tcF9wZHVcZlAgKiwgaW50KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmRlbGV0ZV9zdWJuZXRzbm1wX3RyZWVfY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX3BkdVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0uUkkgIlxmSVRoaXMgZnVuY3Rpb24gY2FsbHMgaW50byBuZXRzbm1wX3NldF9tb2RlX3JlcXVlc3RfZXJyb3IsIHNldHMgZXJyb3JfdmFsdWUgZ2l2ZW4gYSByZXFpbmZvLT5tb2RlIHZhbHVlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2hhbmRsZV9yZXF1ZXN0XGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgaW50IHN0YXR1cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfd3JhcF91cF9yZXF1ZXN0XGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgaW50IHN0YXR1cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNoZWNrX2RlbGF5ZWRfcmVxdWVzdFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJoYW5kbGVfZ2V0bmV4dF9sb29wXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS5SSSAiXGZJcmVwZWF0ZWRseSBjYWxscyBnZXRuZXh0IGhhbmRsZXJzIGxvb2tpbmcgZm9yIGFuIGFuc3dlciB0aWxsIGFsbCByZXF1ZXN0cyBhcmUgc2F0aXNpZmllZC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX3NldF9sb29wXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfcXVldWVkX2NoYWluX2ZvclxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2FkZF9xdWV1ZWRcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZW1vdmVfZnJvbV9kZWxlZ2F0ZWRcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hbGxvY2F0ZV9nbG9iYWxjYWNoZWlkXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZXRfbG9jYWxfY2FjaGlkXGZQIChcZkJuZXRzbm1wX2NhY2hlbWFwXGZQICpjYWNoZV9zdG9yZSwgaW50IGdsb2JhbGlkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2NhY2hlbWFwXGZQICogXGZCbmV0c25tcF9nZXRfb3JfYWRkX2xvY2FsX2NhY2hpZFxmUCAoXGZCbmV0c25tcF9jYWNoZW1hcFxmUCAqKmNhY2hlX3N0b3JlLCBpbnQgZ2xvYmFsaWQsIGludCBsb2NhbGlkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZnJlZV9jYWNoZW1hcFxmUCAoXGZCbmV0c25tcF9jYWNoZW1hcFxmUCAqY2FjaGVfc3RvcmUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQmFnZW50X3NldF9jYWNoZVxmUCAqIFxmQnNhdmVfc2V0X2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmdldF9zZXRfY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZCBcZkJfcmVvcmRlcl9nZXRidWxrXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIHZvaWQgXGZCX2ZpeF9lbmRvZm1pYnZpZXdcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCZ2V0TmV4dFNlc3NJRFxmUCAoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3NcZlAgKGludCBibG9jaykiCi0uYnIKLS5SSSAiXGZJVGhpcyBmdW5jdGlvbiBjaGVja3MgZm9yIHBhY2tldHMgYXJyaXZpbmcgb24gdGhlIFNOTVAgcG9ydCBhbmQgcHJvY2Vzc2VzIHRoZW0oc25tcF9yZWFkKSBpZiBzb21lIGFyZSBmb3VuZCwgdXNpbmcgdGhlIHNlbGVjdCgpLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9hZGRyY2FjaGVfaW5pdGlhbGlzZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2FkZHJjYWNoZV9kZXN0cm95XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hZGRyY2FjaGVfYWRkXGZQIChjb25zdCBjaGFyICphZGRyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfYWRkcmNhY2hlX2FnZVxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfYWdlbnRfbnNhcFxmUCAoXGZCbmV0c25tcF90cmFuc3BvcnRcZlAgKnQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9kZXJlZ2lzdGVyX2FnZW50X25zYXBcZlAgKGludCBoYW5kbGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJpbml0X21hc3Rlcl9hZ2VudFxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJjbGVhcl9uc2FwX2xpc3RcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc2h1dGRvd25fbWFzdGVyX2FnZW50XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBcZkJpbml0X2FnZW50X3NubXBfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZyZWVfYWdlbnRfc25tcF9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfZm9yX2RlbGVnYXRlZFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX2RlbGVnYXRlZF9jaGFpbl9mb3JcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19mb3JfZGVsZWdhdGVkX2FuZF9hZGRcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZW1vdmVfZGVsZWdhdGVkX3JlcXVlc3RzX2Zvcl9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3MpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCZHVtcF9zZXNzX2xpc3RcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9yZW1vdmVfYW5kX2ZyZWVfYWdlbnRfc25tcF9zZXNzaW9uXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2ZyZWVfYWdlbnRfc25tcF9zZXNzaW9uX2J5X3Nlc3Npb25cZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzcywgdm9pZCgqZnJlZV9yZXF1ZXN0KShcZkJuZXRzbm1wX3JlcXVlc3RfbGlzdFxmUCAqKSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV9zbm1wX3BhY2tldFxmUCAoaW50IG9wLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24sIGludCByZXFpZCwgXGZCbmV0c25tcF9wZHVcZlAgKnBkdSwgdm9pZCAqbWFnaWMpIgotLmJyCi0uUkkgIlxmSWhhbmRsZXMgYW4gaW5jb21pbmcgU05NUCBwYWNrZXQgaW50byB0aGUgYWdlbnQgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIFxmQm5ldHNubXBfYWRkX3ZhcmJpbmRfdG9fY2FjaGVcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCBpbnQgdmJjb3VudCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJiaW5kX3B0ciwgXGZCbmV0c25tcF9zdWJ0cmVlXGZQICp0cCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNoZWNrX2FjbVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIHVfY2hhciB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jcmVhdGVfc3VidHJlZV9jYWNoZVxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlYXNzaWduX3JlcXVlc3RzXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2RlbGV0ZV9yZXF1ZXN0X2luZm9zXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxbGlzdCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2RlbGV0ZV9zdWJ0cmVlX2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX2Vycm9yXGZQIChcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKmFzcCwgaW50IGxvb2tfZm9yX3NwZWNpZmljKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19yZXF1ZXN0c19lcnJvclxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19yZXF1ZXN0c19zdGF0dXNcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMsIGludCBsb29rX2Zvcl9zcGVjaWZpYykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfY2hlY2tfYWxsX3JlcXVlc3RzX3N0YXR1c1xmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3AsIGludCBsb29rX2Zvcl9zcGVjaWZpYykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmhhbmRsZV92YXJfcmVxdWVzdHNcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY2hlY2tfb3V0c3RhbmRpbmdfYWdlbnRfcmVxdWVzdHNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2NoZWNrX3RyYW5zYWN0aW9uX2lkXGZQIChpbnQgdHJhbnNhY3Rpb25faWQpIgotLmJyCi0uUkkgIlxmSURlY2lkZSBpZiB0aGUgcmVxdWVzdGVkIHRyYW5zYWN0aW9uX2lkIGlzIHN0aWxsIGJlaW5nIHByb2Nlc3NlZCB3aXRoaW4gdGhlIGFnZW50LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJjaGVja19nZXRuZXh0X3Jlc3VsdHNcZlAgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqYXNwKSIKLS5icgotLlJJICJcZklyZXR1cm5zIDEgaWYgdGhlcmUgYXJlIHZhbGlkIEdFVE5FWFQgcmVxdWVzdHMgbGVmdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGFuZGxlX3NldFxmUCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICphc3ApIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQgXGZCX3JlcXVlc3Rfc2V0X2Vycm9yXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgaW50IG1vZGUsIGludCBlcnJvcl92YWx1ZSkiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvclxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSkiCi0uYnIKLS5SSSAiXGZJc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9pZHhcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUsIGludCBpZHgpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IHdpdGhpbiBhIHJlcXVlc3QgbGlzdCBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIGludCBcZkJuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzLCBpbnQgZXJyb3IpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYWxsIHJlcXVlc3RzIFxmUCIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQm5ldHNubXBfbWFya2VyX3VwdGltZVxmUCAobWFya2VyX3QgcG0pIgotLmJyCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJuZXRzbm1wX3RpbWV2YWxfdXB0aW1lXGZQIChzdHJ1Y3QgdGltZXZhbCAqdHYpIgotLmJyCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJuZXRzbm1wX2dldF9hZ2VudF91cHRpbWVcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9hZ2VudF9hZGRfbGlzdF9kYXRhXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqYXJpLCBcZkJuZXRzbm1wX2RhdGFfbGlzdFxmUCAqXGZCbm9kZVxmUCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgaW50IFxmQm5ldHNubXBfYWdlbnRfcmVtb3ZlX2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKmFyaSwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCAqIFxmQm5ldHNubXBfYWdlbnRfZ2V0X2xpc3RfZGF0YVxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKmFyaSwgY29uc3QgY2hhciAqbmFtZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfYWdlbnRfZGF0YV9zZXRcZlAgKFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICphcmkpIgotLmJyCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF9mcmVlX2FnZW50X2RhdGFfc2V0c1xmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKmFyaSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2ZyZWVfYWdlbnRfcmVxdWVzdF9pbmZvXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqYXJpKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9zZXRfcmVxdWVzdF9lcnJvclxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2V0X21vZGVfcmVxdWVzdF9lcnJvclxmUCAoaW50IG1vZGUsIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUpIgotLmJyCi0uUkkgIlxmSXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc2V0X2FsbF9yZXF1ZXN0c19lcnJvclxmUCAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cywgaW50IGVycm9yX3ZhbHVlKSIKLS5icgotLlJJICJcZklzZXQgZXJyb3IgZm9yIGFsbCByZXF1ZXN0IFxmUCIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJ2ZXJzaW9uX3N5c29pZFxmUCBbXSA9IHsgTkVUU05NUF9TWVNURU1fTUlCIH0iCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnZlcnNpb25fc3lzb2lkX2xlblxmUCA9IE9JRF9MRU5HVEgodmVyc2lvbl9zeXNvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb2dfYWRkcmVzc2VzXGZQID0gMCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBcZkJuZXRzbm1wX3Byb2Nlc3Npbmdfc2V0XGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2FnZW50X3Nlc3Npb25cZlAgKiBcZkJhZ2VudF9kZWxlZ2F0ZWRfbGlzdFxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogXGZCbmV0c25tcF9hZ2VudF9xdWV1ZWRfbGlzdFxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcnVubmluZ1xmUCA9IDEiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9zZXNzaW9uXGZQICogXGZCbWFpbl9zZXNzaW9uXGZQID0gTlVMTCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgdGltZXZhbCBcZkJzdGFydHRpbWVcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiTkVUU05NUF9TVEFUSUNfSU5MSU5FIGludCBfcmVxdWVzdF9zZXRfZXJyb3IgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgaW50IG1vZGUsIGludCBlcnJvcl92YWx1ZSkiCi0uUFAKLXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzQxNyBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzIChpbnQgYmxvY2spIgotLlBQCi1UaGlzIGZ1bmN0aW9uIGNoZWNrcyBmb3IgcGFja2V0cyBhcnJpdmluZyBvbiB0aGUgU05NUCBwb3J0IGFuZCBwcm9jZXNzZXMgdGhlbShzbm1wX3JlYWQpIGlmIHNvbWUgYXJlIGZvdW5kLCB1c2luZyB0aGUgc2VsZWN0KCkuIElmIGJsb2NrIGlzIG5vbiB6ZXJvLCB0aGUgZnVuY3Rpb24gY2FsbCBibG9ja3MgdW50aWwgYSBwYWNrZXQgYXJyaXZlcwotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSWJsb2NrXGZQIHVzZWQgdG8gY29udHJvbCBibG9ja2luZyBpbiB0aGUgc2VsZWN0KCkgZnVuY3Rpb24sIDEgPSBibG9jayBmb3JldmVyLCBhbmQgMCA9IGRvbid0IGJsb2NrCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1SZXR1cm5zIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBwYWNrZXRzIHdlcmUgcHJvY2Vzc2VkLCBhbmQgLTEgaWYgYW4gZXJyb3Igd2FzIGZvdW5kLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU2NiBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IGNoZWNrX2dldG5leHRfcmVzdWx0cyAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogYXNwKSIKLS5QUAotcmV0dXJucyAxIGlmIHRoZXJlIGFyZSB2YWxpZCBHRVRORVhUIHJlcXVlc3RzIGxlZnQuIFJldHVybnMgMCBpZiBub3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjgxOCBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IGhhbmRsZV9nZXRuZXh0X2xvb3AgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIGFzcCkiCi0uUFAKLXJlcGVhdGVkbHkgY2FsbHMgZ2V0bmV4dCBoYW5kbGVycyBsb29raW5nIGZvciBhbiBhbnN3ZXIgdGlsbCBhbGwgcmVxdWVzdHMgYXJlIHNhdGlzaWZpZWQuIEl0J3MgZXhwZWN0ZWQgdGhhdCBvbmUgcGFzcyBoYXMgYmVlbiBtYWRlIGJlZm9yZSBlbnRlcmluZyB0aGlzIGZ1bmN0aW9uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjkzNSBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IGhhbmRsZV9wZHUgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIGFzcCkiCi0uUFAKLVRoaXMgZnVuY3Rpb24gY2FsbHMgaW50byBuZXRzbm1wX3NldF9tb2RlX3JlcXVlc3RfZXJyb3IsIHNldHMgZXJyb3JfdmFsdWUgZ2l2ZW4gYSByZXFpbmZvLT5tb2RlIHZhbHVlLiBJdCdzIHVzZWQgdG8gc2VuZCBzcGVjaWZpYyBlcnJvcnMgYmFjayB0byB0aGUgYWdlbnQgdG8gcHJvY2VzcyBhY2NvcmRpbmdseS4KLS5QUAotSWYgZXJyb3JfdmFsdWUgaXMgc2V0IHRvIFNOTVBfTk9TVUNIT0JKRUNULCBTTk1QX05PU1VDSElOU1RBTkNFLCBvciBTTk1QX0VORE9GTUlCVklFVyB0aGUgZm9sbG93aW5nIGlzIGFwcGxpY2FibGU6IFNldHMgdGhlIGVycm9yX3ZhbHVlIHRvIHJlcXVlc3QtPnJlcXVlc3R2Yi0+dHlwZSBpZiByZXFpbmZvLT5tb2RlIHZhbHVlIGlzIHNldCB0byBNT0RFX0dFVC4gSWYgdGhlIHJlcWluZm8tPm1vZGUgdmFsdWUgaXMgc2V0IHRvIE1PREVfR0VUTkVYVCBvciBNT0RFX0dFVEJVTEsgdGhlIGNvZGUgY2FsbHMgc25tcF9sb2cgbG9nZ2luZyBhbiBlcnJvciBtZXNzYWdlLgotLlBQCi1PdGhlcndpc2UsIHRoZSByZXF1ZXN0LT5zdGF0dXMgdmFsdWUgaXMgY2hlY2tlZCwgaWYgaXQncyA8IDAgc25tcF9sb2cgaXMgY2FsbGVkIHdpdGggYW4gZXJyb3IgbWVzc2FnZSBhbmQgU05NUF9FUlJfR0VORVJSIGlzIGFzc2lnbmVkIHRvIHJlcXVlc3QtPnN0YXR1cy4gSWYgdGhlIHJlcXVlc3QtPnN0YXR1cyB2YWx1ZSBpcyA+PSAwIHRoZSBlcnJvcl92YWx1ZSBpcyBzZXQgdG8gcmVxdWVzdC0+c3RhdHVzLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcWluZm9cZlAgaXMgYSBwb2ludGVyIHRvIHRoZSBuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mbyBzdHJ1Y3QuIEl0IGNvbnRhaW5zIHRoZSByZXFpbmZvLT5tb2RlIHdoaWNoIGlzIHJlcXVpcmVkIHRvIHNldCBlcnJvcl92YWx1ZSBvciBsb2cgZXJyb3IgbWVzc2FnZXMuCi0uYnIKLVxmSXJlcXVlc3RcZlAgaXMgYSBwb2ludGVyIHRvIHRoZSBuZXRzbm1wX3JlcXVlc3RfaW5mbyBzdHJ1Y3QuIFRoZSBlcnJvcl92YWx1ZSBpcyBzZXQgdG8gcmVxdWVzdC0+cmVxdWVzdHZiLT50eXBlCi0uYnIKLVxmSWVycm9yX3ZhbHVlXGZQIGlzIHRoZSBleGNlcHRpb24gdmFsdWUgeW91IHdhbnQgdG8gc2V0LCBiZWxvdyBhcmUgcG9zc2libGUgdmFsdWVzLgotLklQICJcKGJ1IiAyCi1TTk1QX05PU1VDSE9CSkVDVAotLklQICJcKGJ1IiAyCi1TTk1QX05PU1VDSElOU1RBTkNFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRU5ET0ZNSUJWSUVXCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX05PRVJST1IKLS5JUCAiXChidSIgMgotU05NUF9FUlJfVE9PQklHCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX05PU1VDSE5BTUUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfQkFEVkFMVUUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfUkVBRE9OTFkKLS5JUCAiXChidSIgMgotU05NUF9FUlJfR0VORVJSCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX05PQUNDRVNTCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1dST05HVFlQRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9XUk9OR0xFTkdUSAotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9XUk9OR0VOQ09ESU5HCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX1dST05HVkFMVUUKLS5JUCAiXChidSIgMgotU05NUF9FUlJfTk9DUkVBVElPTgotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9JTkNPTlNJU1RFTlRWQUxVRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9SRVNPVVJDRVVOQVZBSUxBQkxFCi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX0NPTU1JVEZBSUxFRAotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9VTkRPRkFJTEVECi0uSVAgIlwoYnUiIDIKLVNOTVBfRVJSX0FVVEhPUklaQVRJT05FUlJPUgotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9OT1RXUklUQUJMRQotLklQICJcKGJ1IiAyCi1TTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FCi0uUFAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgZXJyb3JfdmFsdWUgdW5kZXIgYWxsIGNvbmRpdGlvbnMuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzIyOSBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IGhhbmRsZV9zbm1wX3BhY2tldCAoaW50IG9wLCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBzZXNzaW9uLCBpbnQgcmVxaWQsIFxmQm5ldHNubXBfcGR1XGZQICogcGR1LCB2b2lkICogbWFnaWMpIgotLlBQCi1oYW5kbGVzIGFuIGluY29taW5nIFNOTVAgcGFja2V0IGludG8gdGhlIGFnZW50IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTc3NCBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAqIG5ldHNubXBfYWRkX3ZhcmJpbmRfdG9fY2FjaGUgKFxmQm5ldHNubXBfYWdlbnRfc2Vzc2lvblxmUCAqIGFzcCwgaW50IHZiY291bnQsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIHZhcmJpbmRfcHRyLCBcZkJuZXRzbm1wX3N1YnRyZWVcZlAgKiB0cCkiCi0uUFAKLVxmQlRvZG9cZlAKLS5SUyA0Ci1tYWtlIHRoaXMgYmUgbW9yZSBpbnRlbGxpZ2VudCBhYm91dCByYW5nZXMuIFJpZ2h0IG5vdyB3ZSBtZXJlbHkgdGFrZSB0aGUgaGlnaGVzdCBsZXZlbCBjb21tb25hbGl0eSBvZiBhIHJlZ2lzdHJhdGlvbiByYW5nZSBhbmQgdXNlIHRoYXQuIEF0IHRpbWVzIHdlIG1pZ2h0IGJlIGFibGUgdG8gYmUgc21hcnRlciBhYm91dCBjaGVja2luZyB0aGUgcmFuZ2UgaXRzZWxmIGFzIG9wcG9zZWQgdG8gdGhlIFxmQm5vZGVcZlAgYWJvdmUgd2hlcmUgdGhlIHJhbmdlIGV4aXN0cywgYnV0IEkgZG91YnQgdGhpcyB3aWxsIGNvbWUgdXAgYWxsIHRoYXQgZnJlcXVlbnRseS4gCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxODgzIG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNTICJpbnQgbmV0c25tcF9jaGVja190cmFuc2FjdGlvbl9pZCAoaW50IHRyYW5zYWN0aW9uX2lkKSIKLS5QUAotRGVjaWRlIGlmIHRoZSByZXF1ZXN0ZWQgdHJhbnNhY3Rpb25faWQgaXMgc3RpbGwgYmVpbmcgcHJvY2Vzc2VkIHdpdGhpbiB0aGUgYWdlbnQuIFRoaXMgaXMgdXNlZCB0byB2YWxpZGF0ZSB3aGV0aGVyIGEgZGVsYXllZCBjYWNoZSAoY29udGFpbmluZyBwb3NzaWJseSBmcmVlZCBwb2ludGVycykgaXMgc3RpbGwgdXNhYmxlLgotLlBQCi1yZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBpZiBpdCdzIHN0aWxsIHZhbGlkLCBvciBTTk1QRVJSX0dFTkVSUiBpZiBub3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjcyMSBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlKSIKLS5QUAotc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIHJlcXVlc3Qgd2hpY2ggaGFzIGVycm9yIAotLmJyCi1cZkllcnJvcl92YWx1ZVxmUCBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdCAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM0ODUgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIGludCBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2FsbCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0cywgaW50IGVycm9yKSIKLS5QUAotc2V0IGVycm9yIGZvciBhbGwgcmVxdWVzdHMgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0c1xmUCByZXF1ZXN0IGxpc3QgCi0uYnIKLVxmSWVycm9yXGZQIGVycm9yIHZhbHVlIGZvciByZXF1ZXN0cyAKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVNOTVBFUlJfU1VDQ0VTUywgb3IgYW4gZXJyb3IgY29kZSAKLS5SRQotLlBQCi0KLS5QUAotcGFyYW5vaWQgc2FuaXR5IGNoZWNrcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM1Mjggb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yX2lkeCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBpbnQgZXJyb3JfdmFsdWUsIGludCBpZHgpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGEgcmVxdWVzdCB3aXRoaW4gYSByZXF1ZXN0IGxpc3QgXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIGhlYWQgb2YgdGhlIHJlcXVlc3QgbGlzdCAKLS5icgotXGZJZXJyb3JfdmFsdWVcZlAgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3QgCi0uYnIKLVxmSWlkeFxmUCBpbmRleCBvZiB0aGUgcmVxdWVzdCB3aGljaCBoYXMgdGhlIGVycm9yIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzUwMCBvZiBmaWxlIHNubXBfYWdlbnQuYy4KLS5TUyAiaW50IG5ldHNubXBfc2V0X2FsbF9yZXF1ZXN0c19lcnJvciAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzLCBpbnQgZXJyb3JfdmFsdWUpIgotLlBQCi1zZXQgZXJyb3IgZm9yIGFsbCByZXF1ZXN0IFxmQkRlcHJlY2F0ZWRcZlAKLS5SUyA0Ci11c2UgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvcl9hbGwgCi0uUkUKLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXFpbmZvXGZQIGFnZW50X3JlcXVlc3RfaW5mbyBwb2ludGVyIGZvciByZXF1ZXN0cyAKLS5icgotXGZJcmVxdWVzdHNcZlAgcmVxdWVzdCBsaXN0IAotLmJyCi1cZkllcnJvcl92YWx1ZVxmUCBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdHMgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1lcnJvcl92YWx1ZSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3MDIgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX3NldF9tb2RlX3JlcXVlc3RfZXJyb3IgKGludCBtb2RlLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIGludCBlcnJvcl92YWx1ZSkiCi0uUFAKLXNldCBlcnJvciBmb3IgYSByZXF1ZXN0IGRlcHJlY2F0ZWQsIHVzZSBuZXRzbm1wX3JlcXVlc3Rfc2V0X2Vycm9yIGluc3RlYWQKLS5QUAotXGZCRGVwcmVjYXRlZFxmUAotLlJTIDQKLSwgdXNlIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IgaW5zdGVhZCAKLS5SRQotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSW1vZGVcZlAgTmV0LVNOTVAgYWdlbnQgcHJvY2Vzc2luZyBtb2RlIAotLmJyCi1cZklyZXF1ZXN0XGZQIHJlcXVlc3RfaW5mbyBwb2ludGVyIAotLmJyCi1cZkllcnJvcl92YWx1ZVxmUCBlcnJvciB2YWx1ZSBmb3IgcmVxdWVzdHMgCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1lcnJvcl92YWx1ZSAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM2ODYgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX3NldF9yZXF1ZXN0X2Vycm9yIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgaW50IGVycm9yX3ZhbHVlKSIKLS5QUAotc2V0IGVycm9yIGZvciBhIHJlcXVlc3QgZGVwcmVjYXRlZCwgdXNlIG5ldHNubXBfcmVxdWVzdF9zZXRfZXJyb3IgaW5zdGVhZAotLlBQCi1cZkJEZXByZWNhdGVkXGZQCi0uUlMgNAotLCB1c2UgbmV0c25tcF9yZXF1ZXN0X3NldF9lcnJvciBpbnN0ZWFkIAotLlJFCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJcmVxaW5mb1xmUCBhZ2VudF9yZXF1ZXN0X2luZm8gcG9pbnRlciBmb3IgcmVxdWVzdCAKLS5icgotXGZJcmVxdWVzdFxmUCByZXF1ZXN0X2luZm8gcG9pbnRlciAKLS5icgotXGZJZXJyb3JfdmFsdWVcZlAgZXJyb3IgdmFsdWUgZm9yIHJlcXVlc3RzIAotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotZXJyb3JfdmFsdWUgCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM2Njcgb2YgZmlsZSBzbm1wX2FnZW50LmMuCi0uU1MgImludCBuZXRzbm1wX3dyYXBfdXBfcmVxdWVzdCAoXGZCbmV0c25tcF9hZ2VudF9zZXNzaW9uXGZQICogYXNwLCBpbnQgc3RhdHVzKSIKLS5QUAotaWYgYXNwLT5wZHUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTIwIG9mIGZpbGUgc25tcF9hZ2VudC5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NubXBfYWxhcm0uMyBiL21hbi9uZXRzbm1wX3NubXBfYWxhcm0uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4M2Q1OC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zbm1wX2FsYXJtLjMKKysrIC9kZXYvbnVsbApAQCAtMSw0MyArMCwwIEBACi0uVEggInNubXBfYWxhcm0iIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zbm1wX2FsYXJtIFwtIAotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgdGltZXZhbCBcZkJ0XGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGludCBcZkJmbGFnc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBpbnQgXGZCY2xpZW50cmVnXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCB0aW1ldmFsIFxmQnRfbGFzdFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgdGltZXZhbCBcZkJ0X25leHRcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQmNsaWVudGFyZ1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJTTk1QQWxhcm1DYWxsYmFjayAqIFxmQnRoZWNhbGxiYWNrXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJzbm1wX2FsYXJtXGZQICogXGZCbmV4dFxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLURlZmluaXRpb24gYXQgbGluZSAxNiBvZiBmaWxlIHNubXBfYWxhcm0uaC4KLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMgYi9tYW4vbmV0c25tcF9zbm1wX2NsaWVudC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZmZmMWM1Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3NubXBfY2xpZW50LjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMzcgKzAsMCBAQAotLlRIICJ2YXJpb3VzIFBEVSBwcm9jZXNzaW5nIHJvdXRpbmVzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdmFyaW91cyBQRFUgcHJvY2Vzc2luZyByb3V0aW5lcyBcLSAKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCc25tcF9wZHVfY3JlYXRlXGZQIChpbnQgY29tbWFuZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCc25tcF9hZGRfbnVsbF92YXJcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGNvbnN0IG9pZCAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuZ3RoKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9jbG9uZV92YXJcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFyLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKm5ld3ZhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfY2xvbmVfbWVtXGZQICh2b2lkICoqZHN0UHRyLCB2b2lkICpzcmNQdHIsIHVuc2lnbmVkIGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3Jlc2V0X3Zhcl9idWZmZXJzXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCc25tcF9jbG9uZV92YXJiaW5kXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcmxpc3QpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCc25tcF9jbG9uZV9wZHVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfcGR1XGZQICogXGZCc25tcF9zcGxpdF9wZHVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGludCBza2lwX2NvdW50LCBpbnQgY29weV9jb3VudCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9wZHVcZlAgKiBcZkJzbm1wX2ZpeF9wZHVcZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIGludCBjb21tYW5kKSIKLS5icgotLnRpIC0xYwotLlJJICJ1bnNpZ25lZCBsb25nIFxmQnNubXBfdmFyYmluZF9sZW5cZlAgKFxmQm5ldHNubXBfcGR1XGZQICpwZHUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3NldF92YXJfb2JqaWRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdnAsIGNvbnN0IG9pZCAqb2JqaWQsIHNpemVfdCBuYW1lX2xlbmd0aCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZVxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpuZXd2YXIsIHVfY2hhciB0eXBlLCBjb25zdCB1X2NoYXIgKnZhbF9zdHIsIHNpemVfdCB2YWxfbGVuKSIKLS5icgotLlJJICJcZklzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUgaXMgdXNlZCB0byBzZXQgZGF0YSBpbnRvIHRoZSBuZXRzbm1wX3ZhcmlhYmxlX2xpc3Qgc3RydWN0dXJlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlclxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpuZXd2YXIsIHVfY2hhciB0eXBlLCBsb25nIHZhbCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNvdW50X3ZhcmJpbmRzXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcl9wdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJjb3VudF92YXJiaW5kc19vZl90eXBlXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZhcl9wdHIsIHVfY2hhciB0eXBlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJmaW5kX3ZhcmJpbmRfb2ZfdHlwZVxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICp2YXJfcHRyLCB1X2NoYXIgdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCZmluZF92YXJiaW5kX2luX2xpc3RcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmJsaXN0LCBvaWQgKm5hbWUsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3NldF92YXJfdmFsdWVcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmFycywgY29uc3QgdV9jaGFyICp2YWx1ZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX3JlcGxhY2VfdmFyX3R5cGVzXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKnZibCwgdV9jaGFyIG9sZF90eXBlLCB1X2NoYXIgbmV3X3R5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9yZXNldF92YXJfdHlwZXNcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqdmJsLCB1X2NoYXIgbmV3X3R5cGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiXGZQIChcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNzLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBcZkJuZXRzbm1wX3BkdVxmUCAqKnJlc3BvbnNlLCBzbm1wX2NhbGxiYWNrIHBjYikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfc3luY2hfcmVzcG9uc2VcZlAgKFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc3MsIFxmQm5ldHNubXBfcGR1XGZQICpwZHUsIFxmQm5ldHNubXBfcGR1XGZQICoqcmVzcG9uc2UpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2VcZlAgKHZvaWQgKnNlc3NwLCBcZkJuZXRzbm1wX3BkdVxmUCAqcGR1LCBcZkJuZXRzbm1wX3BkdVxmUCAqKnJlc3BvbnNlKSIKLS5icgotLnRpIC0xYwotLlJJICJjb25zdCBjaGFyICogXGZCc25tcF9lcnJzdHJpbmdcZlAgKGludCBlcnJzdGF0KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvblxmUCAoXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKiBcZkJuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb25cZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3F1ZXJ5X2dldFxmUCAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICpsaXN0LCBcZkJuZXRzbm1wX3Nlc3Npb25cZlAgKnNlc3Npb24pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3F1ZXJ5X2dldG5leHRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbGlzdCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9xdWVyeV9zZXRcZlAgKFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqbGlzdCwgXGZCbmV0c25tcF9zZXNzaW9uXGZQICpzZXNzaW9uKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9xdWVyeV93YWxrXGZQIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmxpc3QsIFxmQm5ldHNubXBfc2Vzc2lvblxmUCAqc2Vzc2lvbikiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZSAoXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogbmV3dmFyLCB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICogdmFsX3N0ciwgc2l6ZV90IHZhbF9sZW4pIgotLlBQCi1zbm1wX3NldF92YXJfdHlwZWRfdmFsdWUgaXMgdXNlZCB0byBzZXQgZGF0YSBpbnRvIHRoZSBuZXRzbm1wX3ZhcmlhYmxlX2xpc3Qgc3RydWN0dXJlLiBVc2VkIHRvIHJldHVybiBkYXRhIHRvIHRoZSBzbm1wIHJlcXVlc3QgdmlhIHRoZSBuZXRzbm1wX3JlcXVlc3RfaW5mbyBzdHJ1Y3R1cmUncyByZXF1ZXN0dmIgcG9pbnRlci4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZkluZXd2YXJcZlAgdGhlIHN0cnVjdHVyZSBnZXRzIHBvcHVsYXRlZCB3aXRoIHRoZSBnaXZlbiBkYXRhLCB0eXBlLCB2YWxfc3RyLCBhbmQgdmFsX2xlbi4gCi0uYnIKLVxmSXR5cGVcZlAgaXMgdGhlIGFzbiBkYXRhIHR5cGUgdG8gYmUgY29waWVkIAotLmJyCi1cZkl2YWxfc3RyXGZQIGlzIGEgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIHZhbHVlIHRvIGJlIGNvcGllZCBpbnRvIHRoZSBuZXd2YXIgc3RydWN0dXJlLiAKLS5icgotXGZJdmFsX2xlblxmUCB0aGUgbGVuZ3RoIG9mIHZhbF9zdHIKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLXJldHVybnMgMCBvbiBzdWNjZXNzIGFuZCAxIG9uIGEgbWFsbG9jIGVycm9yIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2ODcgb2YgZmlsZSBzbm1wX2NsaWVudC5jLgotLlNTICJpbnQgc25tcF9zZXRfdmFyX3ZhbHVlIChcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiB2YXJzLCBjb25zdCB1X2NoYXIgKiB2YWx1ZSwgc2l6ZV90IGxlbikiCi0uUFAKLUZBTEwgVEhST1VHSCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc1NCBvZiBmaWxlIHNubXBfY2xpZW50LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc25tcF9sb2dnaW5nLjMgYi9tYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2RmY2ZiYS4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zbm1wX2xvZ2dpbmcuMworKysgL2Rldi9udWxsCkBAIC0xLDI0NiArMCwwIEBACi0uVEggImdlbmVyaWMgbG9nZ2luZyBmb3IgbmV0LXNubXAiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1nZW5lcmljIGxvZ2dpbmcgZm9yIG5ldC1zbm1wIFwtIAotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTE9HTEVOR1RIXGZQICAgMTAyNCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQnZhX2NvcHlcZlAoZGVzdCwgc3JjKSAgIG1lbWNweSAoJmRlc3QsICZzcmMsIHNpemVvZiAodmFfbGlzdCkpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCTE9HX1VTRVJcZlAgICAwIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfZW5hYmxlX2ZpbGVsb2dcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gsIGludCBkb250X3plcm9fbG9nKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCdnNucHJpbnRmXGZQIChjaGFyICpzdHIsIHNpemVfdCBjb3VudCwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJpbml0X3NubXBfbG9nZ2luZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzaHV0ZG93bl9zbm1wX2xvZ2dpbmdcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJkZWNvZGVfcHJpb3JpdHlcZlAgKGNoYXIgKipvcHRhcmcsIGludCAqcHJpX21heCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmRlY29kZV9mYWNpbGl0eVxmUCAoY2hhciAqb3B0YXJnKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9sb2dfb3B0aW9uc1xmUCAoY2hhciAqb3B0YXJnLCBpbnQgYXJnYywgY2hhciAqY29uc3QgKmFyZ3YpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJzbm1wX2xvZ19zeXNsb2duYW1lXGZQIChjb25zdCBjaGFyICpwc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfbG9nX29wdGlvbnNfdXNhZ2VcZlAgKGNvbnN0IGNoYXIgKmxlYWQsIEZJTEUgKm91dGYpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2dldF9kb19sb2dnaW5nXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklJcyBsb2dnaW5nIGRvbmU/IFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfc3lzbG9nX2VudHJ5XGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZGlzYWJsZV9zeXNsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX2ZpbGVsb2dfZW50cnlcZlAgKFxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKmxvZ2gpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX2ZpbGVsb2dcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3N0ZGVycmxvZ19zdGF0dXNcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9kaXNhYmxlX3N0ZGVycmxvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfY2FsbGxvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2Rpc2FibGVfbG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZW5hYmxlX3N5c2xvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnRcZlAgKGNvbnN0IGNoYXIgKmlkZW50LCBjb25zdCBpbnQgZmFjaWxpdHkpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCc25tcF9lbmFibGVfZmlsZWxvZ1xmUCAoY29uc3QgY2hhciAqbG9nZmlsZW5hbWUsIGludCBkb250X3plcm9fbG9nKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfZW5hYmxlX3N0ZGVycmxvZ1xmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2VuYWJsZV9jYWxsbG9nXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICogXGZCbmV0c25tcF9maW5kX2xvZ2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnRva2VuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hZGRfbG9naGFuZGxlclxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfcmVnaXN0ZXJfbG9naGFuZGxlclxmUCAoaW50IHR5cGUsIGludCBwcmlvcml0eSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfZW5hYmxlX2xvZ2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnRva2VuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9kaXNhYmxlX2xvZ2hhbmRsZXJcZlAgKGNvbnN0IGNoYXIgKnRva2VuKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZW1vdmVfbG9naGFuZGxlclxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmxvZ19oYW5kbGVyX3N0ZG91dGVyclxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9nX2hhbmRsZXJfc3lzbG9nXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb2dfaGFuZGxlcl9maWxlXGZQIChcZkJuZXRzbm1wX2xvZ19oYW5kbGVyXGZQICpsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJsb2dfaGFuZGxlcl9jYWxsYmFja1xmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbG9nX2hhbmRsZXJfbnVsbFxmUCAoXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQnNubXBfbG9nX3N0cmluZ1xmUCAoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpzdHIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3Zsb2dcZlAgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqZm9ybWF0LCB2YV9saXN0IGFwKSIKLS5icgotLlJJICJcZklUaGlzIHNubXAgbG9nZ2luZyBmdW5jdGlvbiBhbGxvd3MgXGZCdmFyaWFibGVcZlAgYXJndW1lbnQgbGlzdCBnaXZlbiB0aGUgc3BlY2lmaWVkIHByaW9yaXR5LCBmb3JtYXQgYW5kIGEgcG9wdWxhdGVkIHZhX2xpc3Qgc3RydWN0dXJlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX2xvZ1xmUCAoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsLi4uKSIKLS5icgotLlJJICJcZklUaGlzIHNubXAgbG9nZ2luZyBmdW5jdGlvbiBhbGxvd3MgXGZCdmFyaWFibGVcZlAgYXJndW1lbnQgbGlzdCBnaXZlbiB0aGUgc3BlY2lmaWVkIGZvcm1hdCBhbmQgcHJpb3JpdHkuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJzbm1wX2xvZ19wZXJyb3JcZlAgKGNvbnN0IGNoYXIgKnMpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbG9nX2hhbmRsZXJcZlAgKiBcZkJnZXRfbG9naF9oZWFkXGZQICh2b2lkKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqIFxmQmxvZ2hfaGVhZFxmUCA9IE5VTEwiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9sb2dfaGFuZGxlclxmUCAqIFxmQmxvZ2hfcHJpb3JpdGllc1xmUCBbTE9HX0RFQlVHKzFdIgotLmJyCi0uaW4gLTFjCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInZvaWQgbmV0c25tcF9sb2dnaW5nX3Jlc3RhcnQgKHZvaWQpIgotLlBQCi1obW0sIGRvbid0IHplcm8gc3RhdHVzIGlzbid0IHNhdmVkLi4gaSB0aGluayBpdCdzIHNhZmVyIG5vdCB0byBvdmVyd3JpdGUsIGluIGNhc2UgYSBodXAgaXMganVzdCB0byByZS1yZWFkIGNvbmZpZyBmaWxlcy4uLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjM5IG9mIGZpbGUgc25tcF9sb2dnaW5nLmMuCi0uU1MgImludCBzbm1wX2dldF9kb19sb2dnaW5nICh2b2lkKSIKLS5QUAotSXMgbG9nZ2luZyBkb25lPyBcZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgMCBpZiBsb2dnaW5nIGlzIG9mZiwgMSB3aGVuIGl0IGlzIGRvbmUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDk2IG9mIGZpbGUgc25tcF9sb2dnaW5nLmMuCi0uU1MgImludCBzbm1wX2xvZyAoaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICogZm9ybWF0LCAgLi4uKSIKLS5QUAotVGhpcyBzbm1wIGxvZ2dpbmcgZnVuY3Rpb24gYWxsb3dzIFxmQnZhcmlhYmxlXGZQIGFyZ3VtZW50IGxpc3QgZ2l2ZW4gdGhlIHNwZWNpZmllZCBmb3JtYXQgYW5kIHByaW9yaXR5LiBDYWxscyB0aGUgc25tcF92bG9nIGZ1bmN0aW9uLiBUaGUgZGVmYXVsdCBsb2dmaWxlIHRoaXMgZnVuY3Rpb24gd3JpdGVzIHRvIGlzIC92YXIvbG9nL3NubXBkLmxvZy4KLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc25tcF92bG9nXGZQIAotLlJFCi0uUFAKLQotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkZWxheWVkX2luc3RhbmNlLmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjc4IG9mIGZpbGUgc25tcF9sb2dnaW5nLmMuCi0uU1MgImludCBzbm1wX3Zsb2cgKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqIGZvcm1hdCwgdmFfbGlzdCBhcCkiCi0uUFAKLVRoaXMgc25tcCBsb2dnaW5nIGZ1bmN0aW9uIGFsbG93cyBcZkJ2YXJpYWJsZVxmUCBhcmd1bWVudCBsaXN0IGdpdmVuIHRoZSBzcGVjaWZpZWQgcHJpb3JpdHksIGZvcm1hdCBhbmQgYSBwb3B1bGF0ZWQgdmFfbGlzdCBzdHJ1Y3R1cmUuIFRoZSBkZWZhdWx0IGxvZ2ZpbGUgdGhpcyBmdW5jdGlvbiB3cml0ZXMgdG8gaXMgL3Zhci9sb2cvc25tcGQubG9nLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXByaW9yaXR5XGZQIGlzIGFuIGludGVnZXIgcmVwcmVzZW50aW5nIHRoZSB0eXBlIG9mIG1lc3NhZ2UgdG8gYmUgd3JpdHRlbiB0byB0aGUgc25tcCBsb2cgZmlsZS4gVGhlIHR5cGVzIGFyZSBlcnJvcnMsIHdhcm5pbmcsIGFuZCBpbmZvcm1hdGlvbi4KLS5JUCAiXChidSIgMgotVGhlIGVycm9yIHR5cGVzIGFyZToKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfRU1FUkcgc3lzdGVtIGlzIHVudXNhYmxlCi0uSVAgIiAgXChidSIgNAotTE9HX0FMRVJUIGFjdGlvbiBtdXN0IGJlIHRha2VuIGltbWVkaWF0ZWx5Ci0uSVAgIiAgXChidSIgNAotTE9HX0NSSVQgY3JpdGljYWwgY29uZGl0aW9ucwotLklQICIgIFwoYnUiIDQKLUxPR19FUlIgZXJyb3IgY29uZGl0aW9ucwotLlBQCi0KLS5JUCAiXChidSIgMgotVGhlIHdhcm5pbmcgdHlwZSBpczoKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfV0FSTklORyB3YXJuaW5nIGNvbmRpdGlvbnMKLS5QUAotCi0uSVAgIlwoYnUiIDIKLVRoZSBpbmZvcm1hdGlvbiB0eXBlcyBhcmU6Ci0uSVAgIiAgXChidSIgNAotTE9HX05PVElDRSBub3JtYWwgYnV0IHNpZ25pZmljYW50IGNvbmRpdGlvbgotLklQICIgIFwoYnUiIDQKLUxPR19JTkZPIGluZm9ybWF0aW9uYWwKLS5JUCAiICBcKGJ1IiA0Ci1MT0dfREVCVUcgZGVidWctbGV2ZWwgbWVzc2FnZXMKLS5QUAotCi0uUFAKLS5icgotXGZJZm9ybWF0XGZQIGlzIGEgcG9pbnRlciB0byBhIGNoYXIgcmVwcmVzZW50aW5nIHRoZSBcZkJ2YXJpYWJsZVxmUCBhcmd1bWVudCBsaXN0IGZvcm1hdCB1c2VkLgotLmJyCi1cZklhcFxmUCBpcyBhIHZhX2xpc3QgdHlwZSB1c2VkIHRvIHRyYXZlcnNlIHRoZSBsaXN0IG9mIGFyZ3VtZW50cy4KLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLVJldHVybnMgMCBvbiBzdWNjZXNzLCAtMSB3aGVuIHRoZSBjb2RlIGNvdWxkIG5vdCBmb3JtYXQgdGhlIGxvZy0gc3RyaW5nLCAtMiB3aGVuIGR5bmFtaWMgbWVtb3J5IGNvdWxkIG5vdCBiZSBhbGxvY2F0ZWQgaWYgdGhlIGxlbmd0aCBvZiB0aGUgbG9nIGJ1ZmZlciBpcyBncmVhdGVyIHRoZW4gMTAyNCBieXRlcy4gRm9yIGVhY2ggb2YgdGhlc2UgZXJyb3JzIGEgTE9HX0VSUiBtZXNzZ2FlIGlzIHdyaXR0ZW4gdG8gdGhlIGxvZ2ZpbGUuCi0uUkUKLS5QUAotXGZCU2VlIGFsc286XGZQCi0uUlMgNAotXGZCc25tcF9sb2dcZlAgCi0uUkUKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjE3IG9mIGZpbGUgc25tcF9sb2dnaW5nLmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc25tcF9wZHUuMyBiL21hbi9uZXRzbm1wX3NubXBfcGR1LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc5NjQ4MjcuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc25tcF9wZHUuMworKysgL2Rldi9udWxsCkBAIC0xLDI5MiArMCwwIEBACi0uVEggInNubXBfcGR1IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc25tcF9wZHUgXC0gCi0uUFAKLVRoZSBzbm1wIHByb3RvY29sIGRhdGEgdW5pdC4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxzbm1wX2FwaS5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJsb25nIFxmQnZlcnNpb25cZlAiCi0uYnIKLS5SSSAiXGZJc25tcCB2ZXJzaW9uIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmNvbW1hbmRcZlAiCi0uYnIKLS5SSSAiXGZJVHlwZSBvZiB0aGlzIFBEVS4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQnJlcWlkXGZQIgotLmJyCi0uUkkgIlxmSVJlcXVlc3QgaWQgLSBub3RlOiBub3QgaW5jcmVtZW50ZWQgb24gcmV0cmllcy4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQm1zZ2lkXGZQIgotLmJyCi0uUkkgIlxmSU1lc3NhZ2UgaWQgZm9yIFYzIG1lc3NhZ2VzIG5vdGU6IGluY3JlbWVudGVkIGZvciBlYWNoIHJldHJ5LiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCdHJhbnNpZFxmUCIKLS5icgotLlJJICJcZklVbmlxdWUgSUQgZm9yIGluY29taW5nIHRyYW5zYWN0aW9ucy4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNlc3NpZFxmUCIKLS5icgotLlJJICJcZklTZXNzaW9uIGlkIGZvciBBZ2VudFggbWVzc2FnZXMuIFxmUCIKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJlcnJzdGF0XGZQIgotLmJyCi0uUkkgIlxmSUVycm9yIHN0YXR1cyAobm9uX3JlcGVhdGVycyBpbiBHZXRCdWxrKS4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQmVycmluZGV4XGZQIgotLmJyCi0uUkkgIlxmSUVycm9yIGluZGV4IChtYXhfcmVwZXRpdGlvbnMgaW4gR2V0QnVsaykuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9sb25nIFxmQnRpbWVcZlAiCi0uYnIKLS5SSSAiXGZJVXB0aW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJmbGFnc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc2VjdXJpdHlNb2RlbFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc2VjdXJpdHlMZXZlbFxmUCIKLS5icgotLlJJICJcZklub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm1zZ1BhcnNlTW9kZWxcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQnRyYW5zcG9ydF9kYXRhXGZQIgotLmJyCi0uUkkgIlxmSVRyYW5zcG9ydC1zcGVjaWZpYyBvcGFxdWUgZGF0YS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCdHJhbnNwb3J0X2RhdGFfbGVuZ3RoXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgImNvbnN0IG9pZCAqIFxmQnREb21haW5cZlAiCi0uYnIKLS5SSSAiXGZJVGhlIGFjdHVhbCB0cmFuc3BvcnQgZG9tYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJ0RG9tYWluTGVuXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIFxmQnZhcmlhYmxlc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKiBcZkJjb21tdW5pdHlcZlAiCi0uYnIKLS5SSSAiXGZJY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCY29tbXVuaXR5X2xlblxmUCIKLS5icgotLlJJICJcZklsZW5ndGggb2YgY29tbXVuaXR5IG5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCZW50ZXJwcmlzZVxmUCIKLS5icgotLlJJICJcZklTeXN0ZW0gT0lELiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJlbnRlcnByaXNlX2xlbmd0aFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJsb25nIFxmQnRyYXBfdHlwZVxmUCIKLS5icgotLlJJICJcZkl0cmFwIHR5cGUgXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNwZWNpZmljX3R5cGVcZlAiCi0uYnIKLS5SSSAiXGZJc3BlY2lmaWMgdHlwZSBcZlAiCi0udGkgLTFjCi0uUkkgInVuc2lnbmVkIGNoYXIgXGZCYWdlbnRfYWRkclxmUCBbNF0iCi0uYnIKLS5SSSAiXGZJVGhpcyBpcyBPTkxZIHVzZWQgZm9yIHYxIFRSQVBzLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmNvbnRleHRFbmdpbmVJRFxmUCIKLS5icgotLlJJICJcZkljb250ZXh0IHNubXBFbmdpbmVJRCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb250ZXh0RW5naW5lSURMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRC4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCY29udGV4dE5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb250ZXh0TmFtZUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgY29udGV4dE5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCc2VjdXJpdHlFbmdpbmVJRFxmUCIKLS5icgotLlJJICJcZklhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCBmb3Igc2VjdXJpdHkgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlFbmdpbmVJRExlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2Ygc2VjdXJpdHlFbmdpbmVJRC4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCc2VjdXJpdHlOYW1lXGZQIgotLmJyCi0uUkkgIlxmSW9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eU5hbWVMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCcHJpb3JpdHlcZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnJhbmdlX3N1YmlkXGZQIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJzZWN1cml0eVN0YXRlUmVmXGZQIgotLmJyCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotVGhlIHNubXAgcHJvdG9jb2wgZGF0YSB1bml0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidW5zaWduZWQgY2hhciBcZkJzbm1wX3BkdTo6YWdlbnRfYWRkclxmUFs0XSIKLS5QUAotVGhpcyBpcyBPTkxZIHVzZWQgZm9yIHYxIFRSQVBzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE0MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3BkdTo6Y29tbWFuZFxmUCIKLS5QUAotVHlwZSBvZiB0aGlzIFBEVS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9wZHU6OmNvbW11bml0eVxmUCIKLS5QUAotY29tbXVuaXR5IGZvciBvdXRnb2luZyByZXF1ZXN0cy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9wZHU6OmNvbW11bml0eV9sZW5cZlAiCi0uUFAKLWxlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjkgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfcGR1Ojpjb250ZXh0RW5naW5lSURcZlAiCi0uUFAKLWNvbnRleHQgc25tcEVuZ2luZUlEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQ4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfcGR1Ojpjb250ZXh0RW5naW5lSURMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTUwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9wZHU6OmNvbnRleHROYW1lXGZQIgotLlBQCi1hdXRob3JpdGF0aXZlIGNvbnRleHROYW1lIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTUyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfcGR1Ojpjb250ZXh0TmFtZUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGNvbnRleHROYW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1NCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgIm9pZCogXGZCc25tcF9wZHU6OmVudGVycHJpc2VcZlAiCi0uUFAKLVN5c3RlbSBPSUQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6ZXJyaW5kZXhcZlAiCi0uUFAKLUVycm9yIGluZGV4IChtYXhfcmVwZXRpdGlvbnMgaW4gR2V0QnVsaykuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1OjplcnJzdGF0XGZQIgotLlBQCi1FcnJvciBzdGF0dXMgKG5vbl9yZXBlYXRlcnMgaW4gR2V0QnVsaykuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTMgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1Ojptc2dpZFxmUCIKLS5QUAotTWVzc2FnZSBpZCBmb3IgVjMgbWVzc2FnZXMgbm90ZTogaW5jcmVtZW50ZWQgZm9yIGVhY2ggcmV0cnkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1OjpyZXFpZFxmUCIKLS5QUAotUmVxdWVzdCBpZCAtIG5vdGU6IG5vdCBpbmNyZW1lbnRlZCBvbiByZXRyaWVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyKiBcZkJzbm1wX3BkdTo6c2VjdXJpdHlFbmdpbmVJRFxmUCIKLS5QUAotYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgZm9yIHNlY3VyaXR5IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTU2IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfcGR1OjpzZWN1cml0eUVuZ2luZUlETGVuXGZQIgotLlBQCi1MZW5ndGggb2Ygc2VjdXJpdHlFbmdpbmVJRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9wZHU6OnNlY3VyaXR5TGV2ZWxcZlAiCi0uUFAKLW5vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXYgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3BkdTo6c2VjdXJpdHlOYW1lXGZQIgotLlBQCi1vbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9wZHU6OnNlY3VyaXR5TmFtZUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNjIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfcGR1OjpzZXNzaWRcZlAiCi0uUFAKLVNlc3Npb24gaWQgZm9yIEFnZW50WCBtZXNzYWdlcy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OnNwZWNpZmljX3R5cGVcZlAiCi0uUFAKLXNwZWNpZmljIHR5cGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjb25zdCBvaWQqIFxmQnNubXBfcGR1Ojp0RG9tYWluXGZQIgotLlBQCi1UaGUgYWN0dWFsIHRyYW5zcG9ydCBkb21haW4uIFRoaXMgU0hPVUxEIE5PVCBCRSBGUkVFKClELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExNyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfbG9uZyBcZkJzbm1wX3BkdTo6dGltZVxmUCIKLS5QUAotVXB0aW1lLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDk3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6dHJhbnNpZFxmUCIKLS5QUAotVW5pcXVlIElEIGZvciBpbmNvbWluZyB0cmFuc2FjdGlvbnMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODkgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ2b2lkKiBcZkJzbm1wX3BkdTo6dHJhbnNwb3J0X2RhdGFcZlAiCi0uUFAKLVRyYW5zcG9ydC1zcGVjaWZpYyBvcGFxdWUgZGF0YS4gVGhpcyByZXBsYWNlcyB0aGUgSVAtY2VudHJpYyBhZGRyZXNzIGZpZWxkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9wZHU6OnRyYXBfdHlwZVxmUCIKLS5QUAotdHJhcCB0eXBlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTM4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAibG9uZyBcZkJzbm1wX3BkdTo6dmVyc2lvblxmUCIKLS5QUAotc25tcCB2ZXJzaW9uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODEgb2YgZmlsZSBzbm1wX2FwaS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc25tcF9zZXNzaW9uLjMgYi9tYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDBlMzgzZi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF9zbm1wX3Nlc3Npb24uMworKysgL2Rldi9udWxsCkBAIC0xLDQ0MCArMCwwIEBACi0uVEggInNubXBfc2Vzc2lvbiIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXNubXBfc2Vzc2lvbiBcLSAKLS5QUAotVGhlIHNubXAgc2Vzc2lvbiBzdHJ1Y3R1cmUuICAKLQotLlNIIFNZTk9QU0lTCi0uYnIKLS5QUAotLlBQCi1cZkMjaW5jbHVkZSA8c25tcF9hcGkuaD5cZlAKLS5TUyAiRGF0YSBGaWVsZHMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAibG9uZyBcZkJ2ZXJzaW9uXGZQIgotLmJyCi0uUkkgIlxmSXNubXAgdmVyc2lvbiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJyZXRyaWVzXGZQIgotLmJyCi0uUkkgIlxmSU51bWJlciBvZiByZXRyaWVzIGJlZm9yZSB0aW1lb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgImxvbmcgXGZCdGltZW91dFxmUCIKLS5icgotLlJJICJcZklOdW1iZXIgb2YgdVMgdW50aWwgZmlyc3QgdGltZW91dCwgdGhlbiBleHBvbmVudGlhbCBiYWNrb2ZmLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJmbGFnc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc25tcF9zZXNzaW9uXGZQICogXGZCc3Vic2Vzc2lvblxmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCc25tcF9zZXNzaW9uXGZQICogXGZCbmV4dFxmUCIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCcGVlcm5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJbmFtZSBvciBhZGRyZXNzIG9mIGRlZmF1bHQgcGVlciAobWF5IGluY2x1ZGUgdHJhbnNwb3J0IHNwZWNpZmllciBhbmQvb3IgcG9ydCBudW1iZXIpIFxmUCIKLS50aSAtMWMKLS5SSSAidV9zaG9ydCBcZkJyZW1vdGVfcG9ydFxmUCIKLS5icgotLlJJICJcZklVRFAgcG9ydCBudW1iZXIgb2YgcGVlci4gXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCbG9jYWxuYW1lXGZQIgotLmJyCi0uUkkgIlxmSU15IERvbWFpbiBuYW1lIG9yIGRvdHRlZCBJUCBhZGRyZXNzLCAwIGZvciBkZWZhdWx0LiBcZlAiCi0udGkgLTFjCi0uUkkgInVfc2hvcnQgXGZCbG9jYWxfcG9ydFxmUCIKLS5icgotLlJJICJcZklNeSBVRFAgcG9ydCBudW1iZXIsIDAgZm9yIGRlZmF1bHQsIHBpY2tlZCByYW5kb21seS4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgKigqIFxmQmF1dGhlbnRpY2F0b3JcZlAgKSh1X2NoYXIgKiwgc2l6ZV90ICosIHVfY2hhciAqLCBzaXplX3QpIgotLmJyCi0uUkkgIlxmSUF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIG9yIE5VTEwgaWYgbnVsbCBhdXRoZW50aWNhdGlvbiBpcyB1c2VkLiBcZlAiCi0udGkgLTFjCi0uUkkgIm5ldHNubXBfY2FsbGJhY2sgXGZCY2FsbGJhY2tcZlAiCi0uYnIKLS5SSSAiXGZJRnVuY3Rpb24gdG8gaW50ZXJwcmV0IGluY29taW5nIGRhdGEuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQmNhbGxiYWNrX21hZ2ljXGZQIgotLmJyCi0uUkkgIlxmSVBvaW50ZXIgdG8gZGF0YSB0aGF0IHRoZSBjYWxsYmFjayBmdW5jdGlvbiBtYXkgY29uc2lkZXIgaW1wb3J0YW50LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJzX2Vycm5vXGZQIgotLmJyCi0uUkkgIlxmSWNvcHkgb2Ygc3lzdGVtIGVycm5vIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNfc25tcF9lcnJub1xmUCIKLS5icgotLlJJICJcZkljb3B5IG9mIGxpYnJhcnkgZXJybm8gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQnNlc3NpZFxmUCIKLS5icgotLlJJICJcZklTZXNzaW9uIGlkIC0gQWdlbnRYIG9ubHkuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCY29tbXVuaXR5XGZQIgotLmJyCi0uUkkgIlxmSWNvbW11bml0eSBmb3Igb3V0Z29pbmcgcmVxdWVzdHMuIFxmUCIKLS50aSAtMWMKLS5SSSAic2l6ZV90IFxmQmNvbW11bml0eV9sZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGNvbW11bml0eSBuYW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJyY3ZNc2dNYXhTaXplXGZQIgotLmJyCi0uUkkgIlxmSUxhcmdlc3QgbWVzc2FnZSB0byB0cnkgdG8gcmVjZWl2ZS4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc25kTXNnTWF4U2l6ZVxmUCIKLS5icgotLlJJICJcZklMYXJnZXN0IG1lc3NhZ2UgdG8gdHJ5IHRvIHNlbmQuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQmlzQXV0aG9yaXRhdGl2ZVxmUCIKLS5icgotLlJJICJcZklhcmUgd2UgdGhlIGF1dGhvcml0YXRpdmUgZW5naW5lPyBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQmNvbnRleHRFbmdpbmVJRFxmUCIKLS5icgotLlJJICJcZklhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb250ZXh0RW5naW5lSURMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRC4gXGZQIgotLnRpIC0xYwotLlJJICJ1X2ludCBcZkJlbmdpbmVCb290c1xmUCIKLS5icgotLlJJICJcZklpbml0aWFsIGVuZ2luZUJvb3RzIGZvciByZW1vdGUgZW5naW5lIFxmUCIKLS50aSAtMWMKLS5SSSAidV9pbnQgXGZCZW5naW5lVGltZVxmUCIKLS5icgotLlJJICJcZklpbml0aWFsIGVuZ2luZVRpbWUgZm9yIHJlbW90ZSBlbmdpbmUgXGZQIgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCY29udGV4dE5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJYXV0aG9yaXRhdGl2ZSBjb250ZXh0TmFtZSBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJjb250ZXh0TmFtZUxlblxmUCIKLS5icgotLlJJICJcZklMZW5ndGggb2YgY29udGV4dE5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyICogXGZCc2VjdXJpdHlFbmdpbmVJRFxmUCIKLS5icgotLlJJICJcZklhdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eUVuZ2luZUlETGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBjb250ZXh0RW5naW5lSUQuIFxmUCIKLS50aSAtMWMKLS5SSSAiY2hhciAqIFxmQnNlY3VyaXR5TmFtZVxmUCIKLS5icgotLlJJICJcZklvbiBiZWhhbGYgb2YgdGhpcyBwcmluY2lwYWwgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlOYW1lTGVuXGZQIgotLmJyCi0uUkkgIlxmSUxlbmd0aCBvZiBzZWN1cml0eU5hbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCc2VjdXJpdHlBdXRoUHJvdG9cZlAiCi0uYnIKLS5SSSAiXGZJYXV0aCBwcm90b2NvbCBvaWQgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlBdXRoUHJvdG9MZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIGF1dGggcHJvdG9jb2wgb2lkLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJzZWN1cml0eUF1dGhLZXlcZlAgW1VTTV9BVVRIX0tVX0xFTl0iCi0uYnIKLS5SSSAiXGZJS3UgZm9yIGF1dGggcHJvdG9jb2wgWFhYLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eUF1dGhLZXlMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIEt1IGZvciBhdXRoIHByb3RvY29sLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQnNlY3VyaXR5QXV0aExvY2FsS2V5XGZQIgotLmJyCi0uUkkgIlxmSUt1bCBmb3IgYXV0aCBwcm90b2NvbC4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlBdXRoTG9jYWxLZXlMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIEt1bCBmb3IgYXV0aCBwcm90b2NvbCBYWFguIFxmUCIKLS50aSAtMWMKLS5SSSAib2lkICogXGZCc2VjdXJpdHlQcml2UHJvdG9cZlAiCi0uYnIKLS5SSSAiXGZJcHJpdiBwcm90b2NvbCBvaWQgXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlQcml2UHJvdG9MZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIHByaXYgcHJvdG9jb2wgb2lkLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciBcZkJzZWN1cml0eVByaXZLZXlcZlAgW1VTTV9QUklWX0tVX0xFTl0iCi0uYnIKLS5SSSAiXGZJS3UgZm9yIHByaXZhY3kgcHJvdG9jb2wgWFhYLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJzZWN1cml0eVByaXZLZXlMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIEt1IGZvciBwcml2IHByb3RvY29sLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQnNlY3VyaXR5UHJpdkxvY2FsS2V5XGZQIgotLmJyCi0uUkkgIlxmSUt1bCBmb3IgcHJpdiBwcm90b2NvbC4gXGZQIgotLnRpIC0xYwotLlJJICJzaXplX3QgXGZCc2VjdXJpdHlQcml2TG9jYWxLZXlMZW5cZlAiCi0uYnIKLS5SSSAiXGZJTGVuZ3RoIG9mIEt1bCBmb3IgcHJpdiBwcm90b2NvbCBYWFguIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNlY3VyaXR5TW9kZWxcZlAiCi0uYnIKLS5SSSAiXGZJc25tcCBzZWN1cml0eSBtb2RlbCwgdjEsIHYyYywgdXNtIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNlY3VyaXR5TGV2ZWxcZlAiCi0uYnIKLS5SSSAiXGZJbm9BdXRoTm9Qcml2LCBhdXRoTm9Qcml2LCBhdXRoUHJpdiBcZlAiCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJwYXJhbU5hbWVcZlAiCi0uYnIKLS5SSSAiXGZJdGFyZ2V0IHBhcmFtIG5hbWUgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCc2VjdXJpdHlJbmZvXGZQIgotLmJyCi0uUkkgIlxmSXNlY3VyaXR5IFxmQm1vZHVsZVxmUCBzcGVjaWZpYyBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJteXZvaWRcZlAiCi0uYnIKLS5SSSAiXGZJdXNlIGFzIHlvdSB3YW50IGRhdGEgXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLVRoZSBzbm1wIHNlc3Npb24gc3RydWN0dXJlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4NyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU0ggIkZpZWxkIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInVfY2hhciooKiBcZkJzbm1wX3Nlc3Npb246OmF1dGhlbnRpY2F0b3JcZlApKHVfY2hhciAqLCBzaXplX3QgKiwgdV9jaGFyICosIHNpemVfdCkiCi0uUFAKLUF1dGhlbnRpY2F0aW9uIGZ1bmN0aW9uIG9yIE5VTEwgaWYgbnVsbCBhdXRoZW50aWNhdGlvbiBpcyB1c2VkLiAKLS5TUyAibmV0c25tcF9jYWxsYmFjayBcZkJzbm1wX3Nlc3Npb246OmNhbGxiYWNrXGZQIgotLlBQCi1GdW5jdGlvbiB0byBpbnRlcnByZXQgaW5jb21pbmcgZGF0YS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMTQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ2b2lkKiBcZkJzbm1wX3Nlc3Npb246OmNhbGxiYWNrX21hZ2ljXGZQIgotLlBQCi1Qb2ludGVyIHRvIGRhdGEgdGhhdCB0aGUgY2FsbGJhY2sgZnVuY3Rpb24gbWF5IGNvbnNpZGVyIGltcG9ydGFudC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMTggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfc2Vzc2lvbjo6Y29tbXVuaXR5XGZQIgotLlBQCi1jb21tdW5pdHkgZm9yIG91dGdvaW5nIHJlcXVlc3RzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzMCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OmNvbW11bml0eV9sZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBjb21tdW5pdHkgbmFtZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfc2Vzc2lvbjo6Y29udGV4dEVuZ2luZUlEXGZQIgotLlBQCi1hdXRob3JpdGF0aXZlIHNubXBFbmdpbmVJRCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0NCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OmNvbnRleHRFbmdpbmVJRExlblxmUCIKLS5QUAotTGVuZ3RoIG9mIGNvbnRleHRFbmdpbmVJRC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNDYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJjaGFyKiBcZkJzbm1wX3Nlc3Npb246OmNvbnRleHROYW1lXGZQIgotLlBQCi1hdXRob3JpdGF0aXZlIGNvbnRleHROYW1lIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjUyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6Y29udGV4dE5hbWVMZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBjb250ZXh0TmFtZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTQgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2ludCBcZkJzbm1wX3Nlc3Npb246OmVuZ2luZUJvb3RzXGZQIgotLlBQCi1pbml0aWFsIGVuZ2luZUJvb3RzIGZvciByZW1vdGUgZW5naW5lIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9pbnQgXGZCc25tcF9zZXNzaW9uOjplbmdpbmVUaW1lXGZQIgotLlBQCi1pbml0aWFsIGVuZ2luZVRpbWUgZm9yIHJlbW90ZSBlbmdpbmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIgXGZCc25tcF9zZXNzaW9uOjppc0F1dGhvcml0YXRpdmVcZlAiCi0uUFAKLWFyZSB3ZSB0aGUgYXV0aG9yaXRhdGl2ZSBlbmdpbmU/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9zaG9ydCBcZkJzbm1wX3Nlc3Npb246OmxvY2FsX3BvcnRcZlAiCi0uUFAKLU15IFVEUCBwb3J0IG51bWJlciwgMCBmb3IgZGVmYXVsdCwgcGlja2VkIHJhbmRvbWx5LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwOCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImNoYXIqIFxmQnNubXBfc2Vzc2lvbjo6bG9jYWxuYW1lXGZQIgotLlBQCi1NeSBEb21haW4gbmFtZSBvciBkb3R0ZWQgSVAgYWRkcmVzcywgMCBmb3IgZGVmYXVsdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMDYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ2b2lkKiBcZkJzbm1wX3Nlc3Npb246Om15dm9pZFxmUCIKLS5QUAotdXNlIGFzIHlvdSB3YW50IGRhdGEgdXNlZCBieSAnU05NUF9GTEFHU19SRVNQX0NBTExCQUNLJyBoYW5kbGluZyBpbiB0aGUgYWdlbnQgWFhYOiBvciBzaG91bGQgd2UgYWRkIGEgbmV3IGZpZWxkIGludG8gdGhpcyBzdHJ1Y3R1cmU/IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzA4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9zZXNzaW9uOjpwYXJhbU5hbWVcZlAiCi0uUFAKLXRhcmdldCBwYXJhbSBuYW1lIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjk1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9zZXNzaW9uOjpwZWVybmFtZVxmUCIKLS5QUAotbmFtZSBvciBhZGRyZXNzIG9mIGRlZmF1bHQgcGVlciAobWF5IGluY2x1ZGUgdHJhbnNwb3J0IHNwZWNpZmllciBhbmQvb3IgcG9ydCBudW1iZXIpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjAyIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6cmN2TXNnTWF4U2l6ZVxmUCIKLS5QUAotTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byByZWNlaXZlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzNCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfc2hvcnQgXGZCc25tcF9zZXNzaW9uOjpyZW1vdGVfcG9ydFxmUCIKLS5QUAotVURQIHBvcnQgbnVtYmVyIG9mIHBlZXIuIChOTyBMT05HRVIgVVNFRCAtIFVTRSBwZWVybmFtZSBJTlNURUFEKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwNCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3Nlc3Npb246OnJldHJpZXNcZlAiCi0uUFAKLU51bWJlciBvZiByZXRyaWVzIGJlZm9yZSB0aW1lb3V0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5NCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImludCBcZkJzbm1wX3Nlc3Npb246OnNfZXJybm9cZlAiCi0uUFAKLWNvcHkgb2Ygc3lzdGVtIGVycm5vIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjIwIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfc2Vzc2lvbjo6c19zbm1wX2Vycm5vXGZQIgotLlBQCi1jb3B5IG9mIGxpYnJhcnkgZXJybm8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUF1dGhLZXlcZlBbVVNNX0FVVEhfS1VfTEVOXSIKLS5QUAotS3UgZm9yIGF1dGggcHJvdG9jb2wgWFhYLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2OSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5QXV0aEtleUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIEt1IGZvciBhdXRoIHByb3RvY29sLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3MSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUF1dGhMb2NhbEtleVxmUCIKLS5QUAotS3VsIGZvciBhdXRoIHByb3RvY29sLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3MyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuXGZQIgotLlBQCi1MZW5ndGggb2YgS3VsIGZvciBhdXRoIHByb3RvY29sIFhYWC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJvaWQqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlBdXRoUHJvdG9cZlAiCi0uUFAKLWF1dGggcHJvdG9jb2wgb2lkIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjY1IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlBdXRoUHJvdG9MZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBhdXRoIHByb3RvY29sIG9pZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlFbmdpbmVJRFxmUCIKLS5QUAotYXV0aG9yaXRhdGl2ZSBzbm1wRW5naW5lSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNTYgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzaXplX3QgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUVuZ2luZUlETGVuXGZQIgotLlBQCi1MZW5ndGggb2YgY29udGV4dEVuZ2luZUlELiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1OCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInZvaWQqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlJbmZvXGZQIgotLlBQCi1zZWN1cml0eSBcZkJtb2R1bGVcZlAgc3BlY2lmaWMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJpbnQgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eUxldmVsXGZQIgotLlBQCi1ub0F1dGhOb1ByaXYsIGF1dGhOb1ByaXYsIGF1dGhQcml2IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjkzIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiaW50IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlNb2RlbFxmUCIKLS5QUAotc25tcCBzZWN1cml0eSBtb2RlbCwgdjEsIHYyYywgdXNtIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjkxIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiY2hhciogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eU5hbWVcZlAiCi0uUFAKLW9uIGJlaGFsZiBvZiB0aGlzIHByaW5jaXBhbCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2MCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5TmFtZUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIHNlY3VyaXR5TmFtZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNjIgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ1X2NoYXIgXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eVByaXZLZXlcZlBbVVNNX1BSSVZfS1VfTEVOXSIKLS5QUAotS3UgZm9yIHByaXZhY3kgcHJvdG9jb2wgWFhYLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4MiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5UHJpdktleUxlblxmUCIKLS5QUAotTGVuZ3RoIG9mIEt1IGZvciBwcml2IHByb3RvY29sLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4NCBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInVfY2hhciogXGZCc25tcF9zZXNzaW9uOjpzZWN1cml0eVByaXZMb2NhbEtleVxmUCIKLS5QUAotS3VsIGZvciBwcml2IHByb3RvY29sLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI4NiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJzbm1wX3Nlc3Npb246OnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuXGZQIgotLlBQCi1MZW5ndGggb2YgS3VsIGZvciBwcml2IHByb3RvY29sIFhYWC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODggb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJvaWQqIFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlQcml2UHJvdG9cZlAiCi0uUFAKLXByaXYgcHJvdG9jb2wgb2lkIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjc4IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c2VjdXJpdHlQcml2UHJvdG9MZW5cZlAiCi0uUFAKLUxlbmd0aCBvZiBwcml2IHByb3RvY29sIG9pZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyODAgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJsb25nIFxmQnNubXBfc2Vzc2lvbjo6c2Vzc2lkXGZQIgotLlBQCi1TZXNzaW9uIGlkIC0gQWdlbnRYIG9ubHkuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI0IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAic2l6ZV90IFxmQnNubXBfc2Vzc2lvbjo6c25kTXNnTWF4U2l6ZVxmUCIKLS5QUAotTGFyZ2VzdCBtZXNzYWdlIHRvIHRyeSB0byBzZW5kLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzNiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9zZXNzaW9uOjp0aW1lb3V0XGZQIgotLlBQCi1OdW1iZXIgb2YgdVMgdW50aWwgZmlyc3QgdGltZW91dCwgdGhlbiBleHBvbmVudGlhbCBiYWNrb2ZmLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5NiBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgImxvbmcgXGZCc25tcF9zZXNzaW9uOjp2ZXJzaW9uXGZQIgotLlBQCi1zbm1wIHZlcnNpb24gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxOTIgb2YgZmlsZSBzbm1wX2FwaS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMyBiL21hbi9uZXRzbm1wX3N0YXNoX2NhY2hlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmM2E0NzQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc3Rhc2hfY2FjaGUuMworKysgL2Rldi9udWxsCkBAIC0xLDk0ICswLDAgQEAKLS5USCAic3Rhc2hfY2FjaGUiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi1zdGFzaF9jYWNoZSBcLSAKLS5QUAotQXV0b21hdGljYWxseSBjYWNoZXMgZGF0YSBmb3IgY2VydGFpbiBoYW5kbGVycy4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3N0YXNoX2NhY2hlX2luZm9cZlAgKiBcZkJuZXRzbm1wX2dldF9uZXdfc3Rhc2hfY2FjaGVcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX2dldF90aW1lZF9iYXJlX3N0YXNoX2NhY2hlX2hhbmRsZXJcZlAgKGludCB0aW1lb3V0LCBvaWQgKnJvb3RvaWQsIHNpemVfdCByb290b2lkX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4gKHdpdGggdGhlIHNwZWNpZmllZCB0aW1lb3V0IGFuZCByb290IE9JRCB2YWx1ZXMpLCBidXQgKm9ubHkqIGlmIHRoYXQgaGFuZGxlciBjaGFpbiBleHBsaWNpdGx5IHN1cHBvcnRzIHN0YXNoIGNhY2hlIHByb2Nlc3NpbmcuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X2JhcmVfc3Rhc2hfY2FjaGVfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHNpbmdsZSBzdGFzaF9jYWNoZSBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluICh3aXRoIGEgZml4ZWQgdGltZW91dCksIGJ1dCAqb25seSogaWYgdGhhdCBoYW5kbGVyIGNoYWluIGV4cGxpY2l0bHkgc3VwcG9ydHMgc3Rhc2ggY2FjaGUgcHJvY2Vzc2luZy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfc3Rhc2hfY2FjaGVfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgc3ViLWNoYWluIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiAoYXJiaXRyYXJ5KSBoYW5kbGVyIGNoYWluLCB1c2luZyBhIGZpeGVkIGNhY2hlIHRpbWVvdXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RpbWVkX3N0YXNoX2NhY2hlX2hhbmRsZXJcZlAgKGludCB0aW1lb3V0LCBvaWQgKnJvb3RvaWQsIHNpemVfdCByb290b2lkX2xlbikiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgc3ViLWNoYWluIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiAoYXJiaXRyYXJ5KSBoYW5kbGVyIGNoYWluLCB1c2luZyBhIGNvbmZpZ3VyYWJsZSBjYWNoZSB0aW1lb3V0LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfb2lkX3N0YXNoX25vZGVcZlAgKiogXGZCbmV0c25tcF9leHRyYWN0X3N0YXNoX2NhY2hlXGZQIChcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbykiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgYSBwb2ludGVyIHRvIHRoZSBzdGFzaF9jYWNoZSBpbmZvIGZyb20gdGhlIHJlcWluZm8gc3RydWN0dXJlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3N0YXNoX2NhY2hlX2hlbHBlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQl9uZXRzbm1wX3N0YXNoX2NhY2hlX2xvYWRcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlLCB2b2lkICptYWdpYykiCi0uYnIKLS5SSSAiXGZJdXBkYXRlcyBhIGdpdmVuIGNhY2hlIGRlcGVuZGluZyBvbiB3aGV0aGVyIGl0IG5lZWRzIHRvIG9yIG5vdC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQl9uZXRzbm1wX3N0YXNoX2NhY2hlX2ZyZWVcZlAgKFxmQm5ldHNubXBfY2FjaGVcZlAgKmNhY2hlLCB2b2lkICptYWdpYykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklpbml0aWFsaXplcyB0aGUgc3Rhc2hfY2FjaGUgaGVscGVyIHdoaWNoIHRoZW4gcmVnaXN0ZXJzIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBhcyBhIHJ1bi10aW1lIGluamVjdGFibGUgaGFuZGxlciBmb3IgY29uZmlndXJhdGlvbiBmaWxlIHVzZS4gXGZQIgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUF1dG9tYXRpY2FsbHkgY2FjaGVzIGRhdGEgZm9yIGNlcnRhaW4gaGFuZGxlcnMuIAotCi1UaGlzIGhhbmRsZXIgY2FjaGVzIGRhdGEgaW4gYW4gb3B0aW1pemVkIHdheSB3aGljaCBtYXkgYWxsZXZpYXRlIHRoZSBuZWVkIGZvciB0aGUgbG93ZXIgbGV2ZWwgaGFuZGxlcnMgdG8gcGVyZm9ybSBhcyBtdWNoIG9wdGltaXphdGlvbi4gU3BlY2lmaWNhbGx5LCBzb21ld2hlcmUgaW4gdGhlIGxvd2VyIGxldmVsIGhhbmRsZXJzIG11c3QgYmUgYSBoYW5kbGVyIHRoYXQgc3VwcG9ydHMgdGhlIE1PREVfR0VUX1NUQVNIIG9wZXJhdGlvbi4gTm90ZSB0aGF0IHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIgc3VwcG9ydHMgdGhpcy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgImludCBfbmV0c25tcF9zdGFzaF9jYWNoZV9sb2FkIChcZkJuZXRzbm1wX2NhY2hlXGZQICogY2FjaGUsIHZvaWQgKiBtYWdpYykiCi0uUFAKLXVwZGF0ZXMgYSBnaXZlbiBjYWNoZSBkZXBlbmRpbmcgb24gd2hldGhlciBpdCBuZWVkcyB0byBvciBub3QuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTk1IG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TUyAiXGZCbmV0c25tcF9vaWRfc3Rhc2hfbm9kZVxmUCoqIG5ldHNubXBfZXh0cmFjdF9zdGFzaF9jYWNoZSAoXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvKSIKLS5QUAotZXh0cmFjdHMgYSBwb2ludGVyIHRvIHRoZSBzdGFzaF9jYWNoZSBpbmZvIGZyb20gdGhlIHJlcWluZm8gc3RydWN0dXJlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMyBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X2JhcmVfc3Rhc2hfY2FjaGVfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBzaW5nbGUgc3Rhc2hfY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbiAod2l0aCBhIGZpeGVkIHRpbWVvdXQpLCBidXQgKm9ubHkqIGlmIHRoYXQgaGFuZGxlciBjaGFpbiBleHBsaWNpdGx5IHN1cHBvcnRzIHN0YXNoIGNhY2hlIHByb2Nlc3NpbmcuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzkgb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF9zdGFzaF9jYWNoZV9oYW5kbGVyICh2b2lkKSIKLS5QUAotcmV0dXJucyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgc3ViLWNoYWluIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiAoYXJiaXRyYXJ5KSBoYW5kbGVyIGNoYWluLCB1c2luZyBhIGZpeGVkIGNhY2hlIHRpbWVvdXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODggb2YgZmlsZSBzdGFzaF9jYWNoZS5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF90aW1lZF9iYXJlX3N0YXNoX2NhY2hlX2hhbmRsZXIgKGludCB0aW1lb3V0LCBvaWQgKiByb290b2lkLCBzaXplX3Qgcm9vdG9pZF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciB0aGF0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGEgZ2l2ZW4gaGFuZGxlciBjaGFpbiAod2l0aCB0aGUgc3BlY2lmaWVkIHRpbWVvdXQgYW5kIHJvb3QgT0lEIHZhbHVlcyksIGJ1dCAqb25seSogaWYgdGhhdCBoYW5kbGVyIGNoYWluIGV4cGxpY2l0bHkgc3VwcG9ydHMgc3Rhc2ggY2FjaGUgcHJvY2Vzc2luZy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NCBvZiBmaWxlIHN0YXNoX2NhY2hlLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3RpbWVkX3N0YXNoX2NhY2hlX2hhbmRsZXIgKGludCB0aW1lb3V0LCBvaWQgKiByb290b2lkLCBzaXplX3Qgcm9vdG9pZF9sZW4pIgotLlBQCi1yZXR1cm5zIGEgc3Rhc2hfY2FjaGUgaGFuZGxlciBzdWItY2hhaW4gdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIChhcmJpdHJhcnkpIGhhbmRsZXIgY2hhaW4sIHVzaW5nIGEgY29uZmlndXJhYmxlIGNhY2hlIHRpbWVvdXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTAxIG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2luaXRfc3Rhc2hfY2FjaGVfaGVscGVyICh2b2lkKSIKLS5QUAotaW5pdGlhbGl6ZXMgdGhlIHN0YXNoX2NhY2hlIGhlbHBlciB3aGljaCB0aGVuIHJlZ2lzdGVycyBhIHN0YXNoX2NhY2hlIGhhbmRsZXIgYXMgYSBydW4tdGltZSBpbmplY3RhYmxlIGhhbmRsZXIgZm9yIGNvbmZpZ3VyYXRpb24gZmlsZSB1c2UuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM4IG9mIGZpbGUgc3Rhc2hfY2FjaGUuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMgYi9tYW4vbmV0c25tcF9zdGFzaF90b19uZXh0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ3ODIyMGUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfc3Rhc2hfdG9fbmV4dC4zCisrKyAvZGV2L251bGwKQEAgLTEsMzQgKzAsMCBAQAotLlRIICJzdGFzaF90b19uZXh0IiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotc3Rhc2hfdG9fbmV4dCBcLSAKLS5QUAotQ29udmVydCBHRVRfU1RBU0ggcmVxdWVzdHMgaW50byBHRVRORVhUIHJlcXVlc3RzIGZvciB0aGUgaGFuZGxlci4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfc3Rhc2hfdG9fbmV4dF9oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZklyZXR1cm5zIGEgc3Rhc2hfdG9fbmV4dCBoYW5kbGVyIHRoYXQgY2FuIGJlIGluamVjdGVkIGludG8gYSBnaXZlbiBoYW5kbGVyIGNoYWluLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3N0YXNoX3RvX25leHRfaGVscGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUNvbnZlcnQgR0VUX1NUQVNIIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuIAotCi1UaGUgcHVycG9zZSBvZiB0aGlzIGhhbmRsZXIgaXMgdG8gY29udmVydCBhIEdFVF9TVEFTSCBhdXRvLWNhY2hlIHJlcXVlc3QgdG8gYSBzZXJpZXMgb2YgR0VUTkVYVCByZXF1ZXN0cy4gSXQgY2FuIGJlIGluc2VydGVkIGludG8gYSBoYW5kbGVyIGNoYWluIHdoZXJlIHRoZSBsb3dlci1sZXZlbCBoYW5kbGVycyBkb24ndCBwcm9jZXNzIHN1Y2ggcmVxdWVzdHMgdGhlbXNlbHZlcy4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3N0YXNoX3RvX25leHRfaGFuZGxlciAodm9pZCkiCi0uUFAKLXJldHVybnMgYSBzdGFzaF90b19uZXh0IGhhbmRsZXIgdGhhdCBjYW4gYmUgaW5qZWN0ZWQgaW50byBhIGdpdmVuIGhhbmRsZXIgY2hhaW4uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjggb2YgZmlsZSBzdGFzaF90b19uZXh0LmMuCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfdGFibGUuMyBiL21hbi9uZXRzbm1wX3RhYmxlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA5ZTU1MTUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGUuMworKysgL2Rldi9udWxsCkBAIC0xLDIzNCArMCwwIEBACi0uVEggInRhYmxlIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGUgXC0gCi0uUFAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZS4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfYXJyYXlcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVuIGRhdGEgY2FuIGJlIHN0b3JlZCBsb2NhbGx5LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX2NvbnRhaW5lclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZW4gZGF0YSBjYW4gYmUgZm91bmQgdmlhIGEgbmV0c25tcF9jb250YWluZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfZGF0YVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggZGF0YW1hdHRlZCBzdG9yYWdlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQmdlbmVyaWNfdGFibGVfQVBJXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklHZW5lcmFsIHJlcXVpcmVtZW50cyBmb3IgYSB0YWJsZSBoZWxwZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfaXRlcmF0b3JcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVRoZSB0YWJsZSBpdGVyYXRvciBoZWxwZXIgaXMgZGVzaWduZWQgdG8gc2ltcGxpZnkgdGhlIHRhc2sgb2Ygd3JpdGluZyBhIHRhYmxlIGhhbmRsZXIgZm9yIHRoZSBuZXQtc25tcCBhZ2VudCB3aGVuIHRoZSBkYXRhIGJlaW5nIGFjY2Vzc2VkIGlzIG5vdCBpbiBhbiBvaWQgc29ydGVkIGZvcm0gYW5kIG11c3QgYmUgYWNjZXNzZWQgZXh0ZXJuYWxseS4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJ0YWJsZV9yb3dcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSBzaGFyZWQgYWNyb3NzIHR3byBvciBtb3JlIHN1YmFnZW50cywgb3Igb3RoZXJ3aXNlIHNwbGl0IGludG8gaW5kaXZpZHVhbCByb3cgc2xpY2VzLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRkYXRhXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklJbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4gXGZQIgotLmluIC0xYwotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU1BBUlNFX1RBQkxFX0hBTkRMRVJfTkFNRVxmUCAgICdzcGFyc2VfdGFibGUnIgotLmJyCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGFibGVfaGFuZGxlclxmUCAoXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVxKSIKLS5icgotLlJJICJcZklHaXZlbiBhIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LCBjcmVhdGVzIGEgdGFibGUgaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl90YWJsZVxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqdGFicmVxKSIKLS5icgotLlJJICJcZkljcmVhdGVzIGEgdGFibGUgaGFuZGxlciBnaXZlbiB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QsIGluc2VydHMgaXQgaW50byB0aGUgcmVxdWVzdCBjaGFpbiBhbmQgdGhlbiBjYWxscyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCB0byByZWdpc3RlciB0aGUgdGFibGUgaW50byB0aGUgYWdlbnQuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mb1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSUV4dHJhY3RzIHRoZSBwcm9jZXNzZWQgdGFibGUgaW5mb3JtYXRpb24gZnJvbSBhIGdpdmVuIHJlcXVlc3QuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIFxmQm5ldHNubXBfZmluZF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbykiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHJlZ2lzdGVyZWQgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QgZnJvbSBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gb2JqZWN0IFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnRhYmxlX2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLlJJICJcZklpbXBsZW1lbnRzIHRoZSB0YWJsZSBoZWxwZXIgaGFuZGxlciBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBcZkJuZXRzbm1wX3NwYXJzZV90YWJsZV9oYW5kbGVyX2dldFxmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlIHNwYXJzZSB0YWJsZSBoYW5kbGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfc3BhcnNlX3RhYmxlX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZXEpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYSB0YWJsZSBoYW5kbGVyIGdpdmVuIHRoZSBuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIG9iamVjdCwgaW5zZXJ0cyBpdCBpbnRvIHRoZSByZXF1ZXN0IGNoYWluIGFuZCB0aGVuIGNhbGxzIFxmQm5ldHNubXBfcmVnaXN0ZXJfaGFuZGxlcigpXGZQIHRvIHJlZ2lzdGVyIHRoZSB0YWJsZSBpbnRvIHRoZSBhZ2VudC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9idWlsZF9yZXN1bHRcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdGFibGVfaW5mbywgdV9jaGFyIHR5cGUsIHVfY2hhciAqcmVzdWx0LCBzaXplX3QgcmVzdWx0X2xlbikiCi0uYnIKLS5SSSAiXGZJQnVpbGRzIHRoZSByZXN1bHQgdG8gYmUgcmV0dXJuZWQgdG8gdGhlIGFnZW50IGdpdmVuIHRoZSB0YWJsZSBpbmZvcm1hdGlvbi4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9idWlsZF9vaWRcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdGFibGVfaW5mbykiCi0uYnIKLS5SSSAiXGZJZ2l2ZW4gYSByZWdpc3RyYXRpb24gaW5mbyBvYmplY3QsIGEgcmVxdWVzdCBvYmplY3QgYW5kIHRoZSB0YWJsZSBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUgaW5kZXggdmFsdWVzIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIHRhYmxlX2luZm8gb2JqZWN0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2J1aWxkX29pZF9mcm9tX2luZGV4XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSWdpdmVuIGEgcmVnaXN0cmF0aW9uIGluZm8gb2JqZWN0LCBhIHJlcXVlc3Qgb2JqZWN0IGFuZCB0aGUgdGFibGUgaW5mbyBvYmplY3QgaXQgYnVpbGRzIHRoZSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWUgb2lkIGZyb20gdGhlIGluZGV4IHZhbHVlcyBhbmQgY29sdW1uIGluZm9ybWF0aW9uIGZvdW5kIGluIHRoZSB0YWJsZV9pbmZvIG9iamVjdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF91cGRhdGVfdmFyaWFibGVfbGlzdF9mcm9tX2luZGV4XGZQIChcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqdHJpKSIKLS5icgotLlJJICJcZklwYXJzZXMgYW4gT0lEIGludG8gdGFibGUgaW5kZXhzZXMgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF91cGRhdGVfaW5kZXhlc19mcm9tX3ZhcmlhYmxlX2xpc3RcZlAgKFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICp0cmkpIgotLmJyCi0uUkkgIlxmSWJ1aWxkcyBhbiBvaWQgZ2l2ZW4gYSBzZXQgb2YgaW5kZXhlcy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jaGVja19nZXRuZXh0X3JlcGx5XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgb2lkICpwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKm5ld3ZhciwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICoqb3V0dmFyKSIKLS5icgotLlJJICJcZkljaGVja3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYWdhaW5zdCB0aGUgY3VycmVudCBkYXRhIGJlaW5nIHBhc3NlZCBpbiBpZiBpdHMgZ3JlYXRlciB0aGFuIHRoZSByZXF1ZXN0IG9pZCBidXQgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHZhbGlkIHJldHVybiwgc2V0IHRoZSBjdXJyZW50IHZhbGlkIHJldHVybiB0byB0aGUgbmV3IHZhbHVlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlLiAKLQotVGhpcyBoYW5kbGVyIGhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSBieSBkb2luZyBzb21lIG9mIHRoZSBwcm9jZXNzaW5nIGZvciB5b3UuCi0uUFAKLVRoaXMgaGFuZGxlciB0cnVseSBzaG93cyB0aGUgcG93ZXIgb2YgdGhlIG5ldyBoYW5kbGVyIG1lY2hhbmlzbS4gQnkgY3JlYXRpbmcgYSB0YWJsZSBoYW5kbGVyIGFuZCBpbmplY3RpbmcgaXQgaW50byB5b3VyIGNhbGxpbmcgY2hhaW4sIG9yIGJ5IHVzaW5nIHRoZSBcZkJuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlKClcZlAgZnVuY3Rpb24gdG8gcmVnaXN0ZXIgeW91ciB0YWJsZSwgeW91IGdldCBhY2Nlc3MgdG8gc29tZSBwcmUtcGFyc2VkIGluZm9ybWF0aW9uLiBTcGVjaWZpY2FsbHksIHRoZSB0YWJsZSBoYW5kbGVyIHB1bGxzIG91dCB0aGUgY29sdW1uIG51bWJlciBhbmQgaW5kZXhlcyBmcm9tIHRoZSByZXF1ZXN0IG9pZCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIGRvIHRoZSBjb21wbGV4IHdvcmsgdG8gZG8gdGhhdCBwYXJzaW5nIHdpdGhpbiB5b3VyIG93biBjb2RlLgotLlBQCi1UbyBkbyB0aGlzLCB0aGUgdGFibGUgaGFuZGxlciBuZWVkcyB0byBrbm93IHVwIGZyb250IGhvdyB5b3VyIHRhYmxlIGlzIHN0cnVjdHVyZWQuIFRvIGluZm9ybSBpdCBhYm91dCB0aGlzLCB5b3UgZmlsbCBpbiBhIHRhYmxlX3JlZ2lzdGVyYXRpb25faW5mbyBzdHJ1Y3R1cmUgdGhhdCBpcyBwYXNzZWQgdG8gdGhlIHRhYmxlIGhhbmRsZXIuIEl0IGNvbnRhaW5zIHRoZSBhc24gaW5kZXggdHlwZXMgZm9yIHRoZSB0YWJsZSBhcyB3ZWxsIGFzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvbHVtbiB0aGF0IHNob3VsZCBiZSB1c2VkLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfY2hlY2tfZ2V0bmV4dF9yZXBseSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0LCBvaWQgKiBwcmVmaXgsIHNpemVfdCBwcmVmaXhfbGVuLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBuZXd2YXIsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKiBvdXR2YXIpIgotLlBQCi1jaGVja3MgdGhlIG9yaWdpbmFsIHJlcXVlc3QgYWdhaW5zdCB0aGUgY3VycmVudCBkYXRhIGJlaW5nIHBhc3NlZCBpbiBpZiBpdHMgZ3JlYXRlciB0aGFuIHRoZSByZXF1ZXN0IG9pZCBidXQgbGVzcyB0aGFuIHRoZSBjdXJyZW50IHZhbGlkIHJldHVybiwgc2V0IHRoZSBjdXJyZW50IHZhbGlkIHJldHVybiB0byB0aGUgbmV3IHZhbHVlLiByZXR1cm5zIDEgaWYgb3V0dmFyIHdhcyByZXBsYWNlZCB3aXRoIHRoZSBvaWQgZnJvbSBuZXd2YXIgKHN1Y2Nlc3MpLiByZXR1cm5zIDAgaWYgbm90LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg4MSBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQKiBuZXRzbm1wX2V4dHJhY3RfdGFibGVfaW5mbyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotRXh0cmFjdHMgdGhlIHByb2Nlc3NlZCB0YWJsZSBpbmZvcm1hdGlvbiBmcm9tIGEgZ2l2ZW4gcmVxdWVzdC4gQ2FsbCB0aGlzIGZyb20gc3ViaGFuZGxlcnMgb24gYSByZXF1ZXN0IHRvIGV4dHJhY3QgdGhlIHByb2Nlc3NlZCBuZXRzbm1wX3JlcXVlc3RfaW5mbyBpbmZvcm1hdGlvbi4gVGhlIHJlc3VsdGluZyBpbmZvcm1hdGlvbiBpbmNsdWRlcyB0aGUgaW5kZXggdmFsdWVzIGFuZCB0aGUgY29sdW1uIG51bWJlci4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZXF1ZXN0XGZQIHBvcHVsYXRlZCBuZXRzbm1wIHJlcXVlc3Qgc3RydWN0dXJlCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1wb3B1bGF0ZWQgbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm8gc3RydWN0dXJlIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTI1IG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCogbmV0c25tcF9maW5kX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbykiCi0uUFAKLWV4dHJhY3RzIHRoZSByZWdpc3RlcmVkIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0IGZyb20gYSBuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uIG9iamVjdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzNCBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3RhYmxlX2hhbmRsZXIgKFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJyZXEpIgotLlBQCi1HaXZlbiBhIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LCBjcmVhdGVzIGEgdGFibGUgaGFuZGxlci4gWW91IGNhbiB1c2UgdGhpcyB0YWJsZSBoYW5kbGVyIGJ5IGluamVjdGluZyBpdCBpbnRvIGEgY2FsbGluZyBjaGFpbi4gV2hlbiB0aGUgaGFuZGxlciBnZXRzIGNhbGxlZCwgaXQnbGwgZG8gcHJvY2Vzc2luZyBhbmQgc3RvcmUgaXQncyBpbmZvcm1hdGlvbiBpbnRvIHRoZSByZXF1ZXN0LT5wYXJlbnRfZGF0YSBzdHJ1Y3R1cmUuCi0uUFAKLVRoZSB0YWJsZSBoZWxwZXIgaGFuZGxlciBwdWxscyBvdXQgdGhlIGNvbHVtbiBudW1iZXIgYW5kIGluZGV4ZXMgZnJvbSB0aGUgcmVxdWVzdCBvaWQgc28gdGhhdCB5b3UgZG9uJ3QgaGF2ZSB0byBkbyB0aGUgY29tcGxleCB3b3JrIG9mIHBhcnNpbmcgd2l0aGluIHlvdXIgb3duIGNvZGUuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJdGFicmVxXGZQIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gc3RydWN0LiBUaGUgdGFibGUgaGFuZGxlciBuZWVkcyB0byBrbm93IHVwIGZyb250IGhvdyB5b3VyIHRhYmxlIGlzIHN0cnVjdHVyZWQuIEEgbmV0c25tcF90YWJsZV9yZWdpc3RlcmF0aW9uX2luZm8gc3RydWN0dXJlIHRoYXQgaXMgcGFzc2VkIHRvIHRoZSB0YWJsZSBoYW5kbGVyIHNob3VsZCBjb250YWluIHRoZSBhc24gaW5kZXggdHlwZXMgZm9yIHRoZSB0YWJsZSBhcyB3ZWxsIGFzIHRoZSBtaW5pbXVtIGFuZCBtYXhpbXVtIGNvbHVtbiB0aGF0IHNob3VsZCBiZSB1c2VkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotUmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXRzbm1wX21pYl9oYW5kbGVyIHN0cnVjdCB3aGljaCBjb250YWlucyB0aGUgaGFuZGxlcidzIG5hbWUgYW5kIHRoZSBhY2Nlc3MgbWV0aG9kIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODUgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJyZXEpIgotLlBQCi1jcmVhdGVzIGEgdGFibGUgaGFuZGxlciBnaXZlbiB0aGUgbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mbyBvYmplY3QsIGluc2VydHMgaXQgaW50byB0aGUgcmVxdWVzdCBjaGFpbiBhbmQgdGhlbiBjYWxscyBcZkJuZXRzbm1wX3JlZ2lzdGVyX2hhbmRsZXIoKVxmUCB0byByZWdpc3RlciB0aGUgdGFibGUgaW50byB0aGUgYWdlbnQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA4IG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9zcGFyc2VfdGFibGVfaGFuZGxlcl9nZXQgKHZvaWQpIgotLlBQCi1jcmVhdGUgc3BhcnNlIHRhYmxlIGhhbmRsZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MjIgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF9zcGFyc2VfdGFibGVfcmVnaXN0ZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFicmVxKSIKLS5QUAotY3JlYXRlcyBhIHRhYmxlIGhhbmRsZXIgZ2l2ZW4gdGhlIG5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm8gb2JqZWN0LCBpbnNlcnRzIGl0IGludG8gdGhlIHJlcXVlc3QgY2hhaW4gYW5kIHRoZW4gY2FsbHMgXGZCbmV0c25tcF9yZWdpc3Rlcl9oYW5kbGVyKClcZlAgdG8gcmVnaXN0ZXIgdGhlIHRhYmxlIGludG8gdGhlIGFnZW50LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDczMyBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3RhYmxlX2J1aWxkX29pZCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotZ2l2ZW4gYSByZWdpc3RyYXRpb24gaW5mbyBvYmplY3QsIGEgcmVxdWVzdCBvYmplY3QgYW5kIHRoZSB0YWJsZSBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUgaW5kZXggdmFsdWVzIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIHRhYmxlX2luZm8gb2JqZWN0LiBJbmRleCB2YWx1ZXMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSB0YWJsZV9pbmZvIHZhcmJpbmRzLiAKLS5QUAotLkVudHJ5Ci0uUFAKLS5jb2x1bW4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3ODQgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9idWlsZF9vaWRfZnJvbV9pbmRleCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxaW5mbywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotZ2l2ZW4gYSByZWdpc3RyYXRpb24gaW5mbyBvYmplY3QsIGEgcmVxdWVzdCBvYmplY3QgYW5kIHRoZSB0YWJsZSBpbmZvIG9iamVjdCBpdCBidWlsZHMgdGhlIHJlcXVlc3QtPnJlcXVlc3R2Yi0+bmFtZSBvaWQgZnJvbSB0aGUgaW5kZXggdmFsdWVzIGFuZCBjb2x1bW4gaW5mb3JtYXRpb24gZm91bmQgaW4gdGhlIHRhYmxlX2luZm8gb2JqZWN0LiBJbmRleCB2YWx1ZXMgYXJlIGV4dHJhY3RlZCBmcm9tIHRoZSB0YWJsZV9pbmZvIGluZGV4IG9pZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MjEgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9idWlsZF9yZXN1bHQgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcWluZm8sIFxmQm5ldHNubXBfdGFibGVfcmVxdWVzdF9pbmZvXGZQICogdGFibGVfaW5mbywgdV9jaGFyIHR5cGUsIHVfY2hhciAqIHJlc3VsdCwgc2l6ZV90IHJlc3VsdF9sZW4pIgotLlBQCi1CdWlsZHMgdGhlIHJlc3VsdCB0byBiZSByZXR1cm5lZCB0byB0aGUgYWdlbnQgZ2l2ZW4gdGhlIHRhYmxlIGluZm9ybWF0aW9uLiBVc2UgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gcmVzdWx0cyBmcm9tIGxvd2VsIGxldmVsIGhhbmRsZXJzIHRvIHRoZSBhZ2VudC4gSXQgdGFrZXMgY2FyZSBvZiBidWlsZGluZyB0aGUgcHJvcGVyIHJlc3VsdGluZyBvaWQgKGNvbnRhaW5pbmcgcHJvcGVyIGluZGV4aW5nKSBhbmQgaW5zZXJ0cyB0aGUgcmVzdWx0IHZhbHVlIGludG8gdGhlIHJldHVybmluZyB2YXJiaW5kLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc1MSBvZiBmaWxlIHRhYmxlLmMuCi0uU1MgImludCBuZXRzbm1wX3VwZGF0ZV9pbmRleGVzX2Zyb21fdmFyaWFibGVfbGlzdCAoXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiB0cmkpIgotLlBQCi1idWlsZHMgYW4gb2lkIGdpdmVuIGEgc2V0IG9mIGluZGV4ZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODYzIG9mIGZpbGUgdGFibGUuYy4KLS5TUyAiaW50IG5ldHNubXBfdXBkYXRlX3ZhcmlhYmxlX2xpc3RfZnJvbV9pbmRleCAoXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKiB0cmkpIgotLlBQCi1wYXJzZXMgYW4gT0lEIGludG8gdGFibGUgaW5kZXhzZXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NDcgb2YgZmlsZSB0YWJsZS5jLgotLlNTICJpbnQgdGFibGVfaGVscGVyX2hhbmRsZXIgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKiByZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3RzKSIKLS5QUAotaW1wbGVtZW50cyB0aGUgdGFibGUgaGVscGVyIGhhbmRsZXIgCi0uUFAKLVhYWC1ya3M6IG1lbW9yeSBsZWFrLiBhZGQgY2xlYW51cCBoYW5kbGVyPwotLlBQCi1ub25lIGF2YWlsYWJsZQotLlBQCi1nb3Qgb25lIG9rCi0uUFAKLWZvciBsb29wIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTQyIG9mIGZpbGUgdGFibGUuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9hcnJheS4zIGIvbWFuL25ldHNubXBfdGFibGVfYXJyYXkuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRlYjQwNC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9hcnJheS4zCisrKyAvZGV2L251bGwKQEAgLTEsODUgKzAsMCBAQAotLlRIICJ0YWJsZV9hcnJheSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2FycmF5IFwtIAotLlBQCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlbiBkYXRhIGNhbiBiZSBzdG9yZWQgbG9jYWxseS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9jb250YWluZXJfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlZywgXGZCbmV0c25tcF90YWJsZV9hcnJheV9jYWxsYmFja3NcZlAgKmNiLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqY29udGFpbmVyLCBpbnQgZ3JvdXBfcm93cykiCi0uYnIKLS5SSSAiXGZJcmVnaXN0ZXIgc3BlY2lmaWVkIGNhbGxiYWNrcyBmb3IgdGhlIHNwZWNpZmllZCB0YWJsZS9vaWQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfYXJyYXlfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlZywgXGZCbmV0c25tcF90YWJsZV9hcnJheV9jYWxsYmFja3NcZlAgKmNiLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqY29udGFpbmVyLCBpbnQgZ3JvdXBfcm93cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZmluZF90YWJsZV9hcnJheV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvKSIKLS5icgotLlJJICJcZklmaW5kIHRoZSBoYW5kbGVyIGZvciB0aGUgdGFibGVfYXJyYXkgaGVscGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfY29udGFpbmVyXGZQICogXGZCbmV0c25tcF9leHRyYWN0X2FycmF5X2NvbnRleHRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklmaW5kIHRoZSBjb250ZXh0IGRhdGEgdXNlZCBieSB0aGUgdGFibGVfYXJyYXkgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfYXJyYXlfY2hlY2tfcm93X3N0YXR1c1xmUCAoXGZCbmV0c25tcF90YWJsZV9hcnJheV9jYWxsYmFja3NcZlAgKmNiLCBcZkJuZXRzbm1wX3JlcXVlc3RfZ3JvdXBcZlAgKmFnLCBsb25nICpyc19uZXcsIGxvbmcgKnJzX29sZCkiCi0uYnIKLS5SSSAiXGZJdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gdmFsaWRhdGUgUm93U3RhdHVzIHRyYW5zaXRpb25zLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZW4gZGF0YSBjYW4gYmUgc3RvcmVkIGxvY2FsbHkuIAotCi1UaGUgZGF0YSBpcyBzdG9yZWQgaW4gYSBzb3J0ZWQgYXJyYXksIHVzaW5nIGEgYmluYXJ5IHNlYXJjaCBmb3IgbG9va3Vwcy4KLS5QUAotVGhlIHRhYmxlX2FycmF5IGhhbmRsZXIgaXMgdXNlZCAoYXV0b21hdGljYWxseSkgaW4gY29uanVudGlvbiB3aXRoIHRoZSBcZkJ0YWJsZVxmUCBoYW5kbGVyLiBJdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgdG8gYmUgdXNlZCB3aXRoIHRoZSBtaWIyYyBjb25maWd1cmF0aW9uIGZpbGUgbWliMmMuYXJyYXktdXNlci5jb25mLgotLlBQCi1UaGUgY29kZSBnZW5lcmF0ZWQgYnkgbWliMmMgaXMgdXNlZnVsIHdoZW4geW91IGhhdmUgY29udHJvbCBvZiB0aGUgZGF0YSBmb3IgZWFjaCByb3cuIElmIHlvdSBjYW5ub3QgY29udHJvbCB3aGVuIHJvd3MgYXJlIGFkZGVkIGFuZCBkZWxldGVkIChvciBhdCBsZWFzdCBiZSBub3RpZmllZCBvZiBjaGFuZ2VzIHRvIHJvdyBkYXRhKSwgdGhlbiB0aGlzIGhhbmRsZXIgaXMgcHJvYmFibHkgbm90IGZvciB5b3UuCi0uUFAKLVRoaXMgaGFuZGxlciBtYWtlcyB1c2Ugb2YgY2FsbGJhY2tzIChmdW5jdGlvbiBwb2ludGVycykgdG8gaGFuZGxlIHZhcmlvdXMgdGFza3MuIENvZGUgaXMgZ2VuZXJhdGVkIGZvciBlYWNoIGNhbGxiYWNrLCBidXQgd2lsbCBuZWVkIHRvIGJlIHJldmlld2VkIGFuZCBmbHVzaGVkIG91dCBieSB0aGUgdXNlci4KLS5QUAotTk9URSBOT1RFIE5PVEU6IE9uY2UgcGxhY2Ugd2hlcmUgbWliMmMgaXMgc29tZXdoYXQgbGFja2luZyBpcyB3aXRoIHJlZ2FyZHMgdG8gdGFibGVzIHdpdGggZXh0ZXJuYWwgaW5kaWNlcy4gSWYgeW91ciB0YWJsZSBtYWtlcyB1c2Ugb2Ygb25lIG9yIG1vcmUgZXh0ZXJuYWwgaW5kaWNlcywgcGxlYXNlIHJldmlldyB0aGUgZ2VuZXJhdGVkIGNvZGUgdmVyeSBjYXJlZnVsbHkgZm9yIGNvbW1lbnRzIHJlZ2FyZGluZyBleHRlcm5hbCBpbmRpY2VzLgotLlBQCi1OT1RFIE5PVEUgTk9URTogVGhpcyBoZWxwZXIsIHRoZSBBUEkgYW5kIGNhbGxiYWNrcyBhcmUgc3RpbGwgYmVpbmcgdGVzdGVkIGFuZCBtYXkgY2hhbmdlLgotLlBQCi1UaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBkZWZpbmUgYSBzdHJ1Y3R1cmUgZm9yIHN0b3JhZ2Ugb2YgdGFibGUgcmVsYXRlZCBkYXRhLiBUaGlzIHN0cnVjdHVyZSBtdXN0IGJlIHVzZWQsIGFzIGl0IGNvbnRhaW5zIHRoZSBpbmRleCBPSUQgZm9yIHRoZSByb3csIHdoaWNoIGlzIHVzZWQgZm9yIGtlZXBpbmcgdGhlIGFycmF5IHNvcnRlZC4gWW91IGNhbiBhZGQgYWRkaXRpb24gZmllbGRzIG9yIGRhdGEgdG8gdGhlIHN0cnVjdHVyZSBmb3IgeW91ciBvd24gdXNlLgotLlBQCi1UaGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBhbHNvIGhhdmUgY29kZSB0byBoYW5kbGUgU05NUC1TRVQgcHJvY2Vzc2luZy4gSWYgeW91ciB0YWJsZSBkb2VzIG5vdCBzdXBwb3J0IGFueSBTRVQgb3BlcmF0aW9ucywgc2ltcGx5IGNvbW1lbnQgb3V0IHRoZSAjZGVmaW5lIDxQUkVGSVg+X1NFVF9IQU5ETElORyAod2hlcmUgPFBSRUZJWD4gaXMgeW91ciB0YWJsZSBuYW1lKSBpbiB0aGUgaGVhZGVyIGZpbGUuCi0uUFAKLVNFVCBwcm9jZXNzaW5nIG1vZGlmaWVzIHRoZSByb3cgaW4tcGxhY2UuIFRoZSBkdXBsaWNhdGVfcm93IGNhbGxiYWNrIHdpbGwgYmUgY2FsbGVkIHRvIHNhdmUgYSBjb3B5IG9mIHRoZSBvcmlnaW5hbCByb3cuIEluIHRoZSBldmVudCBvZiBhIGZhaWx1cmUgYmVmb3JlIHRoZSBjb21taXRlIHBoYXNlLCB0aGUgcm93X2NvcHkgY2FsbGJhY2sgd2lsbCBiZSBjYWxsZWQgdG8gcmVzdG9yZSB0aGUgb3JpZ2luYWwgcm93IGZyb20gdGhlIGNvcHkuCi0uUFAKLUNvZGUgd2lsbCBiZSBnZW5lcmF0ZWQgdG8gaGFuZGxlIHJvdyBjcmVhdGlvbi4gVGhpcyBjb2RlIG1heSBiZSBkaXNhYmxlZCBieSBjb21tZW50aW5nIG91dCB0aGUgI2RlZmluZSA8UFJFRklYPl9ST1dfQ1JFQVRJT04gaW4gdGhlIGhlYWRlciBmaWxlLgotLlBQCi1JZiB5b3VyIHRhYmxlIGNvbnRhaW5zIGEgUm93U3RhdHVzIG9iamVjdCwgYnkgZGVmYXVsdCB0aGUgY29kZSB3aWxsIG5vdCBhbGxvdyBvYmplY3QgaW4gYW4gYWN0aXZlIHJvdyB0byBiZSBtb2RpZmllZC4gVG8gYWxsb3cgYWN0aXZlIHJvd3MgdG8gYmUgbW9kaWZpZWQsIHJlbW92ZSB0aGUgY29tbWVudCBibG9jayBhcm91bmQgdGhlICNkZWZpbmUgPFBSRUZJWD5fQ0FOX01PRElGWV9BQ1RJVkVfUk9XIGluIHRoZSBoZWFkZXIgZmlsZS4KLS5QUAotQ29kZSB3aWxsIGJlIGdlbmVyYXRlZCB0byBtYWludGFpbiBhIHNlY29uZGFyeSBpbmRleCBmb3IgYWxsIHJvd3MsIHN0b3JlZCBpbiBhIGJpbmFyeSBcZkJ0cmVlXGZQLiBUaGlzIGlzIHZlcnkgdXNlZnVsIGZvciBmaW5kaW5nIHJvd3MgYnkgYSBrZXkgb3RoZXIgdGhhbiB0aGUgT0lEIGluZGV4LiBCeSBkZWZhdWx0LCB0aGUgZnVuY3Rpb25zIGZvciBtYWludGFpbmluZyB0aGlzIFxmQnRyZWVcZlAgd2lsbCBiZSBiYXNlZCBvbiBhIGNoYXJhY3RlciBzdHJpbmcuIE5PVEU6IHRoaXMgd2lsbCBsaWtlbHkgYmUgbWFkZSBpbnRvIGEgbW9yZSBnZW5lcmljIG1lY2hhbmlzbSwgdXNpbmcgbmV3IGNhbGxiYWNrIG1ldGhvZHMsIGluIHRoZSBuZWFyIGZ1dHVyZS4KLS5QUAotVGhlIGdlbmVyYXRlZCBjb2RlIGNvbnRhaW5zIG1hbnkgVE9ETyBjb21tZW50cy4gTWFrZSBzdXJlIHlvdSBjaGVjayBlYWNoIG9uZSB0byBzZWUgaWYgaXQgYXBwbGllcyB0byB5b3VyIGNvZGUuIEV4YW1wbGVzIGluY2x1ZGUgY2hlY2tpbmcgaW5kaWNlcyBmb3Igc3ludGF4IChyYW5nZXMsIGV0YyksIGluaXRpYWxpemluZyBkZWZhdWx0IHZhbHVlcyBpbiBuZXdseSBjcmVhdGVkIHJvd3MsIGNoZWNraW5nIGZvciByb3cgYWN0aXZhdGlvbiBhbmQgZGVhY3RpdmF0aW9uIHJlcXVpcmVtZW50cywgZXRjLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9jb250YWluZXJcZlAqIG5ldHNubXBfZXh0cmFjdF9hcnJheV9jb250ZXh0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1maW5kIHRoZSBjb250ZXh0IGRhdGEgdXNlZCBieSB0aGUgdGFibGVfYXJyYXkgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjI5IG9mIGZpbGUgdGFibGVfYXJyYXkuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9maW5kX3RhYmxlX2FycmF5X2hhbmRsZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvKSIKLS5QUAotZmluZCB0aGUgaGFuZGxlciBmb3IgdGhlIHRhYmxlX2FycmF5IGhlbHBlci4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMTIgb2YgZmlsZSB0YWJsZV9hcnJheS5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9hcnJheV9jaGVja19yb3dfc3RhdHVzIChcZkJuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrc1xmUCAqIGNiLCBcZkJuZXRzbm1wX3JlcXVlc3RfZ3JvdXBcZlAgKiBhZywgbG9uZyAqIHJzX25ldywgbG9uZyAqIHJzX29sZCkiCi0uUFAKLXRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIHZhbGlkYXRlIFJvd1N0YXR1cyB0cmFuc2l0aW9ucy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMzYgb2YgZmlsZSB0YWJsZV9hcnJheS5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9jb250YWluZXJfcmVnaXN0ZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFicmVnLCBcZkJuZXRzbm1wX3RhYmxlX2FycmF5X2NhbGxiYWNrc1xmUCAqIGNiLCBcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqIGNvbnRhaW5lciwgaW50IGdyb3VwX3Jvd3MpIgotLlBQCi1yZWdpc3RlciBzcGVjaWZpZWQgY2FsbGJhY2tzIGZvciB0aGUgc3BlY2lmaWVkIHRhYmxlL29pZC4gSWYgdGhlIGdyb3VwX3Jvd3MgcGFyYW1ldGVyIGlzIHNldCwgdGhlIHJvdyByZWxhdGVkIGNhbGxiYWNrcyB3aWxsIGJlIGNhbGxlZCBvbmNlIGZvciBlYWNoIHVuaXF1ZSByb3cgaW5kZXguIE90aGVyd2lzZSwgZWFjaCBjYWxsYmFjayB3aWxsIGJlIGNhbGxlZCBvbmx5IG9uY2UsIGZvciBhbGwgb2JqZWN0cy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNDkgb2YgZmlsZSB0YWJsZV9hcnJheS5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2NvbnRhaW5lci4zIGIvbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGMwODcyNTguLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfY29udGFpbmVyLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTcgKzAsMCBAQAotLlRIICJ0YWJsZV9jb250YWluZXIiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9jb250YWluZXIgXC0gCi0uUFAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVuIGRhdGEgY2FuIGJlIGZvdW5kIHZpYSBhIG5ldHNubXBfY29udGFpbmVyLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQmNvbnRhaW5lcl90YWJsZV9kYXRhXGZQICogXGZCbmV0c25tcF90Y29udGFpbmVyX2NyZWF0ZV90YWJsZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKmNvbnRhaW5lciwgbG9uZyBmbGFncykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3Rjb250YWluZXJfZGVsZXRlX3RhYmxlXGZQIChcZkJjb250YWluZXJfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3Rjb250YWluZXJfYWRkX3Jvd1xmUCAoXGZCY29udGFpbmVyX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX2luZGV4XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfaW5kZXhcZlAgKiBcZkJuZXRzbm1wX3Rjb250YWluZXJfcmVtb3ZlX3Jvd1xmUCAoXGZCY29udGFpbmVyX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX2luZGV4XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3Rjb250YWluZXJfcmVwbGFjZV9yb3dcZlAgKFxmQmNvbnRhaW5lcl90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF9pbmRleFxmUCAqb2xkX3JvdywgXGZCbmV0c25tcF9pbmRleFxmUCAqbmV3X3JvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfY29udGFpbmVyX3RhYmxlX2hhbmRsZXJfZ2V0XGZQIChcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJyZWcsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICpjb250YWluZXIsIGNoYXIga2V5X3R5cGUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIG9iamVjdCBmb3IgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9jb250YWluZXJfdGFibGVfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYnJlZywgXGZCbmV0c25tcF9jb250YWluZXJcZlAgKmNvbnRhaW5lciwgY2hhciBrZXlfdHlwZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jb250YWluZXJcZlAgKiBcZkJuZXRzbm1wX2NvbnRhaW5lcl90YWJsZV9jb250YWluZXJfZXh0cmFjdFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSXJldHJpZXZlIHRoZSBjb250YWluZXIgdXNlZCBieSB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9jb250YWluZXJfdGFibGVfcm93X2luc2VydFxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIFxmQm5ldHNubXBfaW5kZXhcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJaW5zZXJ0cyBhIG5ld2x5IGNyZWF0ZWQgdGFibGVfY29udGFpbmVyIGVudHJ5IGludG8gYSByZXF1ZXN0IGxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX2luZGV4XGZQICogXGZCbmV0c25tcF90YWJsZV9pbmRleF9maW5kX25leHRfcm93XGZQIChcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCAqYywgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRibHJlcSkiCi0uYnIKLS5SSSAiXGZJZGVwcmVjYXRlZCwgYmFja3dhcmRzIGNvbXBhdGFiaWxpdHkgb25seSBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZW4gZGF0YSBjYW4gYmUgZm91bmQgdmlhIGEgbmV0c25tcF9jb250YWluZXIuIAotCi1UaGUgdGFibGVfY29udGFpbmVyIGhhbmRsZXIgaXMgdXNlZCAoYXV0b21hdGljYWxseSkgaW4gY29uanVudGlvbiB3aXRoIHRoZSBcZkJ0YWJsZVxmUCBoYW5kbGVyLgotLlBQCi1UaGlzIGhhbmRsZXIgd2lsbCB1c2UgdGhlIGluZGV4IGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5IHRoZSBcZkJ0YWJsZVxmUCBoYW5kbGVyIHRvIGZpbmQgdGhlIHJvdyBuZWVkZWQgdG8gcHJvY2VzcyB0aGUgcmVxdWVzdC4KLS5QUAotVGhlIGNvbnRhaW5lciBtdXN0IHVzZSBvbmUgb2YgMyBrZXkgdHlwZXMuIEl0IGlzIHRoZSBzdWItaGFuZGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZSBjb250YWluZXIgYW5kIGtleSB0eXBlIG1hdGNoICh1bmxlc3MgbmVpdGhlciBpcyBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2UgYSBkZWZhdWx0IHdpbGwgYmUgdXNlZC4pCi0uUFAKLVRoZSBjdXJyZW50IGtleSB0eXBlcyBhcmU6Ci0uUFAKLVRBQkxFX0NPTlRBSU5FUl9LRVlfTkVUU05NUF9JTkRFWCBUaGUgY29udGFpbmVyIHNob3VsZCBkbyBjb21wYXJpc29ucyBiYXNlZCBvbiBhIGtleSB0aGF0IG1heSBiZSBjYXN0IHRvIGEgbmV0c25tcCBpbmRleCAobmV0c25tcF9pbmRleCAqKS4gVGhpcyBpbmRleCBjb250YWlucyBvbmx5IHRoZSBpbmRleCBwb3J0aW9uIG9mIHRoZSBPSUQsIG5vdCB0aGUgZW50aXJlIE9JRC4KLS5QUAotVEFCTEVfQ09OVEFJTkVSX0tFWV9WQVJCSU5EX0lOREVYIFRoZSBjb250YWluZXIgc2hvdWxkIGRvIGNvbXBhcmlzb25zIGJhc2VkIG9uIGEga2V5IHRoYXQgbWF5IGJlIGNhc3QgdG8gYSBuZXRzbm1wIFxmQnZhcmlhYmxlXGZQIGxpc3QgKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKS4gVGhpcyBcZkJ2YXJpYWJsZVxmUCBsaXN0IHdpbGwgY29udGFpbiBvbmUgdmFyYmluZCBmb3IgZWFjaCBpbmRleCBjb21wb25lbnQuCi0uUFAKLVRBQkxFX0NPTlRBSU5FUl9LRVlfVkFSQklORF9SQVcgKE5PVEU6IHVuaW1wbGVtZW50ZWQpIFdoaWxlIG5vdCB5ZXQgaW1wbGVtZW50ZWQsIGZ1dHVyZSBwbGFucyBpbmNsdWRlIHBhc3NpbmcgdGhlIHJlcXVlc3QgdmFyYmluZCB3aXRoIHRoZSBmdWxsIE9JRCB0byBhIGNvbnRhaW5lci4KLS5QUAotSWYgYSBrZXkgdHlwZSBpcyBub3Qgc3BlY2lmaWVkIGF0IHJlZ2lzdHJhdGlvbiB0aW1lLCB0aGUgZGVmYXVsdCBrZXkgdHlwZSBvZiBUQUJMRV9DT05UQUlORVJfS0VZX05FVFNOTVBfSU5ERVggd2lsbCBiZSB1c2VkLiBJZiBhIGNvbnRhaW5lciBpcyBwcm92aWRlZCwgb3IgdGhlIGhhbmRsZXIgbmFtZSBpcyBhbGlhc2VkIHRvIGEgY29udGFpbmVyIHR5cGUsIHRoZSBjb250YWluZXIgbXVzdCB1c2UgYSBuZXRzbm1wIGluZGV4LgotLlBQCi1JZiBubyBjb250YWluZXIgaXMgcHJvdmlkZWQsIGEgbG9va3VwIHdpbGwgYmUgbWFkZSBiYXNlZCBvbiB0aGUgc3ViLWhhbmRsZXIncyBuYW1lLCBvciBpZiB0aGF0IGlzbid0IGZvdW5kLCAndGFibGVfY29udGFpbmVyJy4gVGhlIHRhYmxlX2NvbnRhaW5lciBrZXkgdHlwZSB3aWxsIGJlIG5ldHNubXBfaW5kZXguCi0uUFAKLVRoZSBjb250YWluZXIgbXVzdCwgYXQgYSBtaW5pbXVtLCBpbXBsZW1lbnQgZmluZCBhbmQgZmluZF9uZXh0LiBJZiBhIE5VTEwga2V5IGlzIHBhc3NlZCB0byB0aGUgY29udGFpbmVyLCBpdCBtdXN0IHJldHVybiB0aGUgZmlyc3QgaXRlbSwgaWYgYW55LiBBbGwgY29udGFpbmVycyBwcm92aWRlZCBieSBuZXQtc25tcCBmdWxmaWwgdGhpcyByZXF1aXJlbWVudC4KLS5QUAotVGhpcyBoYW5kbGVyIHdpbGwgb25seSByZWdpc3RlciB0byBwcm9jZXNzICdkYXRhIGxvb2t1cCcgbW9kZXMuIEluIHRyYWRpdGlvbmFsIG5ldC1zbm1wIG1vZGVzLCB0aGF0IGlzIGFueSBHRVQtbGlrZSBtb2RlIChHRVQsIEdFVC1ORVhULCBHRVQtQlVMSykgb3IgdGhlIGZpcnN0IHBoYXNlIG9mIGEgU0VUIChSRVNFUlZFMSkuIEluIHRoZSBuZXcgYmFieS1zdGVwcyBtb2RlLCBEQVRBX0xPT0tVUCBpcyBpdCdzIG93biBtb2RlLCBhbmQgaXMgYSBwcmUtY3Vyc29yIHRvIG90aGVyIG1vZGVzLgotLlBQCi1XaGVuIGNhbGxlZCwgdGhlIGhhbmRsZXIgd2lsbCBjYWxsIHRoZSBhcHByb3ByaWF0ZSBjb250YWluZXIgbWV0aG9kIHdpdGggdGhlIGFwcHJvcHJpYXRlIGtleSB0eXBlLiBJZiBhIHJvdyB3YXMgbm90IGZvdW5kLCB0aGUgcmVzdWx0IGRlcGVuZHMgb24gdGhlIG1vZGUuCi0uUFAKLUdFVCBQcm9jZXNzaW5nIEFuIGV4YWN0IG1hdGNoIG11c3QgYmUgZm91bmQuIElmIG9uZSBpcyBub3QsIHRoZSBlcnJvciBOT1NVQ0hJTlNUQU5DRSBpcyBzZXQuCi0uUFAKLUdFVC1ORVhUIC8gR0VULUJVTEsgSWYgbm8gcm93IGlzIGZvdW5kLCB0aGUgY29sdW1uIG51bWJlciB3aWxsIGJlIGluY3JlYXNlZCAodXNpbmcgYW55IHZhbGlkX2NvbHVtbnMgc3RydWN0dXJlIHRoYXQgbWF5IGhhdmUgYmVlbiBwcm92aWRlZCksIGFuZCB0aGUgZmlyc3Qgcm93IHdpbGwgYmUgcmV0cmlldmVkLiBJZiBubyBmaXJzdCByb3cgaXMgZm91bmQsIHRoZSBwcm9jZXNzZWQgZmxhZyB3aWxsIGJlIHNldCwgc28gdGhhdCB0aGUgc3ViLWhhbmRsZXIgY2FuIHNraXAgYW55IHByb2Nlc3NpbmcgcmVsYXRlZCB0byB0aGUgcmVxdWVzdC4gVGhlIGFnZW50IHdpbGwgbm90aWNlIHRoaXMgdW5zYXRpc2ZpZWQgcmVxdWVzdCwgYW5kIGF0dGVtcHQgdG8gcGFzcyBpdCB0byB0aGUgbmV4dCBhcHByb3ByaWF0ZSBoYW5kbGVyLgotLlBQCi1TRVQgSWYgdGhlIGhhbmRlciBkaWQgbm90IHJlZ2lzdGVyIHdpdGggdGhlIEhBTkRMRVJfQ0FOX05PVF9DUkVBVEUgZmxhZyBzZXQgaW4gdGhlIHJlZ2lzdHJhdGlvbiBtb2RlcywgaXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMgaXMgYSByb3cgY3JlYXRpb24gcmVxdWVzdCBhbmQgYSBOVUxMIHJvdyBpcyBhZGRlZCB0byB0aGUgcmVxdWVzdCdzIGRhdGEgbGlzdC4gVGhlIHN1Yi1oYW5kbGVyIGlzIHJlc3BvbnNiaWxlIGZvciBkZWFsaW5nIHdpdGggYW55IHJvdyBjcmVhdGlvbiBjb250cmFpbnRzIGFuZCBpbnNlcnRpbmcgYW55IG5ld2x5IGNyZWF0ZWQgcm93cyBpbnRvIHRoZSBjb250YWluZXIgYW5kIHRoZSByZXF1ZXN0J3MgZGF0YSBsaXN0LgotLlBQCi1JZiBhIHJvdyBpcyBmb3VuZCwgaXQgd2lsbCBiZSBpbnNlcnRlZCBpbnRvIHRoZSByZXF1ZXN0J3MgZGF0YSBsaXN0LiBUaGUgc3ViLWhhbmRsZXIgbWF5IHJldHJpZXZlIGl0IGJ5IGNhbGxpbmcgbmV0c25tcF9jb250YWluZXJfdGFibGVfZXh0cmFjdF9jb250ZXh0KHJlcXVlc3QpOyAqIE5PVEUgTk9URSBOT1RFOgotLlBQCi1UaGlzIGhlbHBlciBhbmQgaXQncyBBUEkgYXJlIHN0aWxsIGJlaW5nIHRlc3RlZCBhbmQgYXJlIHN1YmplY3QgdG8gY2hhbmdlLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9jb250YWluZXJcZlAqIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX2NvbnRhaW5lcl9leHRyYWN0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QpIgotLlBQCi1yZXRyaWV2ZSB0aGUgY29udGFpbmVyIHVzZWQgYnkgdGhlIHRhYmxlX2NvbnRhaW5lciBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMjAgb2YgZmlsZSB0YWJsZV9jb250YWluZXIuYy4KLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9jb250YWluZXJfdGFibGVfaGFuZGxlcl9nZXQgKFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJyZWcsIFxmQm5ldHNubXBfY29udGFpbmVyXGZQICogY29udGFpbmVyLCBjaGFyIGtleV90eXBlKSIKLS5QUAotcmV0dXJucyBhIG5ldHNubXBfbWliX2hhbmRsZXIgb2JqZWN0IGZvciB0aGUgdGFibGVfY29udGFpbmVyIGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1NCBvZiBmaWxlIHRhYmxlX2NvbnRhaW5lci5jLgotLlNTICJ2b2lkIG5ldHNubXBfY29udGFpbmVyX3RhYmxlX3Jvd19pbnNlcnQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgXGZCbmV0c25tcF9pbmRleFxmUCAqIHJvdykiCi0uUFAKLWluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRhYmxlX2NvbnRhaW5lciBlbnRyeSBpbnRvIGEgcmVxdWVzdCBsaXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzUxIG9mIGZpbGUgdGFibGVfY29udGFpbmVyLmMuCi0uU1MgIlxmQm5ldHNubXBfaW5kZXhcZlAqIG5ldHNubXBfdGFibGVfaW5kZXhfZmluZF9uZXh0X3JvdyAoXGZCbmV0c25tcF9jb250YWluZXJcZlAgKiBjLCBcZkJuZXRzbm1wX3RhYmxlX3JlcXVlc3RfaW5mb1xmUCAqIHRibHJlcSkiCi0uUFAKLWRlcHJlY2F0ZWQsIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5IG9ubHkgZXhwZWN0ZWQgaW1wYWN0IHRvIHJlbW92ZTogbm9uZQotLklQICJcKGJ1IiAyCi11c2VkIGJldHdlZW4gaGVscGVycywgc2hvdWxkbid0IGhhdmUgYmVlbiB1c2VkIGJ5IGVuZCB1c2VycwotLlBQCi0uUFAKLXJlcGxhY2VtZW50OiBub25lCi0uSVAgIlwoYnUiIDIKLW5ldmVyIHNob3VsZCBoYXZlIGJlZW4gYSBwdWJsaWMgbWV0aG9kIGluIHRoZSBmaXJzdCBwbGFjZSAKLS5QUAotCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3MjEgb2YgZmlsZSB0YWJsZV9jb250YWluZXIuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9kYXRhLjMgYi9tYW4vbmV0c25tcF90YWJsZV9kYXRhLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGUzMzI5MGIuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfZGF0YS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjgzICswLDAgQEAKLS5USCAidGFibGVfZGF0YSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2RhdGEgXC0gCi0uUFAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4gIAotCi0uU1MgIk1vZHVsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfZGF0YXNldFxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJSGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdpdGggYXV0b21hdHRlZCBzdG9yYWdlLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YV9nZW5lcmF0ZV9pbmRleF9vaWRcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIFxmQm5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFcZlAgKGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSWNyZWF0ZXMgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIHRhYmxlIGRhdGEgc2V0IFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV90YWJsZV9kYXRhX3Jvd1xmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGFibGUgZGF0YSBzZXQgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9jbG9uZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWNsb25lcyBhIGRhdGEgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJZGVsZXRlcyBhIHJvdydzIG1lbW9yeS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9kYXRhX2FkZF9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSUFkZHMgYSByb3cgb2YgZGF0YSB0byBhIGdpdmVuIHRhYmxlIChzdG9yZWQgaW4gcHJvcGVyIGxleG9ncmFwaGljYWwgb3JkZXIpLiBcZlAiCi0udGkgLTFjCi0uUkkgIk5FVFNOTVBfSU5MSU5FIHZvaWQgXGZCbmV0c25tcF90YWJsZV9kYXRhX3JlcGxhY2Vfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqb3JpZ3JvdywgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKm5ld3JvdykiCi0uYnIKLS5SSSAiXGZJc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlcyBhIHJvdyBvZiBkYXRhIHRvIGEgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgaXQgKG5vIGZyZWUncyBjYWxsZWQpIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJlbW92ZXMgYW5kIGZyZWVzIGEgcm93IG9mIGRhdGEgdG8gYSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyB0aGUgdm9pZCAqIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2NyZWF0ZV90YWJsZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgbG9uZyBmbGFncykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZGVsZXRlX3RhYmxlXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9jcmVhdGVfcm93XGZQICh2b2lkICplbnRyeSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9jb3B5X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKm9sZF9yb3csIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpuZXdfcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3JlbW92ZV9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGFibGVfZGF0YV9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGEgdGFibGVfZGF0YSBoYW5kbGVyIGFuZCByZXR1cm5zIGl0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0uUkkgIlxmSXJlZ2lzdGVycyBhIGhhbmRsZXIgYXMgYSBkYXRhIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3JlYWRfb25seV90YWJsZV9kYXRhXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgYSBoYW5kbGVyIGFzIGEgcmVhZC1vbmx5IGRhdGEgdGFibGUgSWYgdGFibGVfaW5mbyAhPSBOVUxMLCBpdCByZWdpc3RlcnMgaXQgYXMgYSBub3JtYWwgdGFibGUgdG9vLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfaGVscGVyX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF90YWJsZVxmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSB0YWJsZSBiZWluZyBhY2Nlc3NlZCBwYXNzZWQgZnJvbSB0aGUgdGFibGVfZGF0YSBoZWxwZXIgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3dcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgcm93IGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZSB0YWJsZV9kYXRhIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93X2RhdGFcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgZGF0YSBmcm9tIHRoZSByb3cgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlIHRhYmxlX2RhdGEgaGVscGVyIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX2luc2VydF90YWJsZV9yb3dcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklpbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0YWJsZV9kYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfYnVpbGRfcmVzdWx0XGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3csIGludCBjb2x1bW4sIHVfY2hhciB0eXBlLCB1X2NoYXIgKnJlc3VsdF9kYXRhLCBzaXplX3QgcmVzdWx0X2RhdGFfbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9nZXRfZmlyc3Rfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBmaXJzdCByb3cgaW4gdGhlIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0X25leHRfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9nZXRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS5SSSAiXGZJZmluZHMgdGhlIGRhdGEgaW4gJ2RhdGFsaXN0JyBzdG9yZWQgYXQgJ2luZGV4ZXMnIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0X2Zyb21fb2lkXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBvaWQgKnNlYXJjaGZvciwgc2l6ZV90IHNlYXJjaGZvcl9sZW4pIgotLmJyCi0uUkkgIlxmSWZpbmRzIHRoZSBkYXRhIGluICdkYXRhbGlzdCcgc3RvcmVkIGF0IHRoZSBzZWFyY2hmb3Igb2lkIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9udW1fcm93c1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2ZpcnN0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfZ2V0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfbmV4dFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X2dldF9ieW9pZFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X25leHRfYnlvaWRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3Jvd19nZXRfYnlpZHhcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfcm93X25leHRfYnlpZHhcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfZGF0YV9yb3dfY291bnRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfZmlyc3RcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfZ2V0XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93KSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X25leHRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfZ2V0X2J5aWR4XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfZW50cnlfbmV4dF9ieWlkeFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90YWJsZV9kYXRhX2VudHJ5X2dldF9ieW9pZFxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICp0YWJsZSwgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9lbnRyeV9uZXh0X2J5b2lkXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKnRhYmxlLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4gCi0KLVRoaXMgaGVscGVyIGlzIG9ic29sZXRlLiBJZiB5b3UgYXJlIHdyaXRpbmcgYSBuZXcgXGZCbW9kdWxlXGZQLCBwbGVhc2UgY29uc2lkZXIgdXNpbmcgdGhlIHRhYmxlX3RkYXRhIGhlbHBlciBpbnN0ZWFkLgotLlBQCi1UaGlzIGhlbHBlciBoZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2hlcmUgYWxsIHRoZSBpbmRleGVzIGFyZSBleHBlY3RlZCB0byBiZSBzdG9yZWQgd2l0aGluIHRoZSBhZ2VudCBpdHNlbGYgYW5kIG5vdCBpbiBzb21lIGV4dGVybmFsIHN0b3JhZ2UgbG9jYXRpb24uIEl0IGNhbiBiZSB1c2VkIHRvIHN0b3JlIGEgbGlzdCBvZiByb3dzLCB3aGVyZSBhIHJvdyBjb25zaXN0cyBvZiB0aGUgaW5kZXhlcyB0byB0aGUgdGFibGUgYW5kIGEgZ2VuZXJpYyBkYXRhIHBvaW50ZXIuIFlvdSBjYW4gdGhlbiBpbXBsZW1lbnQgYSBzdWJoYW5kbGVyIHdoaWNoIGlzIHBhc3NlZCB0aGUgZXhhY3Qgcm93IGRlZmluaXRpb24gYW5kIGRhdGEgaXQgbXVzdCByZXR1cm4gZGF0YSBmb3Igb3IgYWNjZXB0IGRhdGEgZm9yLiBDb21wbGV4IEdFVE5FWFQgaGFuZGxpbmcgaXMgZ3JlYXRseSBzaW1wbGlmaWVkIGluIHRoaXMgY2FzZS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCogbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YSAoY29uc3QgY2hhciAqIG5hbWUpIgotLlBQCi1jcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0YWJsZSBkYXRhIHNldCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUyIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9yb3cgKHZvaWQpIgotLlBQCi1jcmVhdGVzIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byB0YWJsZSBkYXRhIHNldCAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDYyIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAqIG5ldHNubXBfZXh0cmFjdF90YWJsZSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIHRhYmxlIGJlaW5nIGFjY2Vzc2VkIHBhc3NlZCBmcm9tIHRoZSB0YWJsZV9kYXRhIGhlbHBlciAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY1NiBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfZXh0cmFjdF90YWJsZV9yb3cgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSByb3cgYmVpbmcgYWNjZXNzZWQgcGFzc2VkIGZyb20gdGhlIHRhYmxlX2RhdGEgaGVscGVyIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjY0IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2V4dHJhY3RfdGFibGVfcm93X2RhdGEgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIHRoZSBkYXRhIGZyb20gdGhlIHJvdyBiZWluZyBhY2Nlc3NlZCBwYXNzZWQgZnJvbSB0aGUgdGFibGVfZGF0YSBoZWxwZXIgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2NzMgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAqIG5ldHNubXBfZ2V0X3RhYmxlX2RhdGFfaGFuZGxlciAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUpIgotLlBQCi1DcmVhdGVzIGEgdGFibGVfZGF0YSBoYW5kbGVyIGFuZCByZXR1cm5zIGl0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3OCBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX2luc2VydF90YWJsZV9yb3cgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1pbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0YWJsZV9kYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY4NSBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X3RhYmxlX2RhdGEgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZWdpc3RyYXRpb25faW5mb1xmUCAqIHRhYmxlX2luZm8pIgotLlBQCi1yZWdpc3RlcnMgYSBoYW5kbGVyIGFzIGEgcmVhZC1vbmx5IGRhdGEgdGFibGUgSWYgdGFibGVfaW5mbyAhPSBOVUxMLCBpdCByZWdpc3RlcnMgaXQgYXMgYSBub3JtYWwgdGFibGUgdG9vLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQxMiBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YSAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLXJlZ2lzdGVycyBhIGhhbmRsZXIgYXMgYSBkYXRhIHRhYmxlLiBJZiB0YWJsZV9pbmZvICE9IE5VTEwsIGl0IHJlZ2lzdGVycyBpdCBhcyBhIG5vcm1hbCB0YWJsZSB0b28uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDAxIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF90YWJsZV9kYXRhX2FkZF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLUFkZHMgYSByb3cgb2YgZGF0YSB0byBhIGdpdmVuIHRhYmxlIChzdG9yZWQgaW4gcHJvcGVyIGxleG9ncmFwaGljYWwgb3JkZXIpLiByZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUyBvbiBzdWNjZXNzZnVsIGFkZGl0aW9uLiBvciBTTk1QRVJSX0dFTkVSUiBvbiBmYWlsdXJlIChFLkcuLCBpbmRleGVzIGFscmVhZHkgZXhpc3RlZCkgCi0uUFAKLXh4eC1ya3M6IHJlbW92ZSBpbnZhbGlkIHJvdz8gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzQgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfY2xvbmVfcm93IChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWNsb25lcyBhIGRhdGEgcm93LiBET0VTIE5PVCBDTE9ORSBUSEUgQ09OVEFJTkVEIERBVEEuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzAgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfdGFibGVfZGF0YV9kZWxldGVfcm93IChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWRlbGV0ZXMgYSByb3cncyBtZW1vcnkuIHJldHVybnMgdGhlIHZvaWQgZGF0YSB0aGF0IGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVsZXRlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEwNSBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9nZXQgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAotZmluZHMgdGhlIGRhdGEgaW4gJ2RhdGFsaXN0JyBzdG9yZWQgYXQgJ2luZGV4ZXMnIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODExIG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX2dldF9maXJzdF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlKSIKLS5QUAotcmV0dXJucyB0aGUgZmlyc3Qgcm93IGluIHRoZSB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc5MiBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9nZXRfZnJvbV9vaWQgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBvaWQgKiBzZWFyY2hmb3IsIHNpemVfdCBzZWFyY2hmb3JfbGVuKSIKLS5QUAotZmluZHMgdGhlIGRhdGEgaW4gJ2RhdGFsaXN0JyBzdG9yZWQgYXQgdGhlIHNlYXJjaGZvciBvaWQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MjUgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfZ2V0X25leHRfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZXR1cm5zIHRoZSBuZXh0IHJvdyBpbiB0aGUgdGFibGUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MDEgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfdGFibGVfZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJlbW92ZXMgYW5kIGZyZWVzIGEgcm93IG9mIGRhdGEgdG8gYSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyB0aGUgdm9pZCAqIHJldHVybnMgdGhlIHZvaWQgKiBkYXRhIG9uIHN1Y2Nlc3NmdWwgZGVsZXRpb24uIG9yIE5VTEwgb24gZmFpbHVyZSAoYmFkIGFyZ3VtZW50cykgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyNzQgb2YgZmlsZSB0YWJsZV9kYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfcmVtb3ZlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotcmVtb3ZlcyBhIHJvdyBvZiBkYXRhIHRvIGEgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgaXQgKG5vIGZyZWUncyBjYWxsZWQpIHJldHVybnMgdGhlIHJvdyBwb2ludGVyIGl0c2VsZiBvbiBzdWNjZXNzZnVsIHJlbW92aW5nLiBvciBOVUxMIG9uIGZhaWx1cmUgKGJhZCBhcmd1bWVudHMpIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQ4IG9mIGZpbGUgdGFibGVfZGF0YS5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YV9yZXBsYWNlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogb3JpZ3JvdywgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBuZXdyb3cpIgotLlBQCi1zd2FwcyBvdXQgb3JpZ3JvdyB3aXRoIG5ld3Jvdy4gVGhpcyBkb2VzICpub3QqIGRlbGV0ZS9mcmVlIGFueXRoaW5nISAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIzMyBvZiBmaWxlIHRhYmxlX2RhdGEuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMgYi9tYW4vbmV0c25tcF90YWJsZV9kYXRhc2V0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhhMDFjM2MuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfZGF0YXNldC4zCisrKyAvZGV2L251bGwKQEAgLTEsMzAyICswLDAgQEAKLS5USCAidGFibGVfZGF0YXNldCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2RhdGFzZXQgXC0gCi0uUFAKLUhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGF1dG9tYXR0ZWQgc3RvcmFnZS4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaW5pdF90YWJsZV9kYXRhc2V0XGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogXGZCbmV0c25tcF9jcmVhdGVfdGFibGVfZGF0YV9zZXRcZlAgKGNvbnN0IGNoYXIgKnRhYmxlX25hbWUpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZSBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgc3RydWN0dXJlIGdpdmVuIGEgdGFibGVfZGF0YSBkZWZpbml0aW9uLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXRcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlX3NldCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2Nsb25lX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJY2xvbmVzIGEgZGF0YXNldCByb3csIGluY2x1ZGluZyBhbGwgZGF0YS4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2RhdGFcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqZGF0YSkiCi0uYnIKLS5SSSAiXGZJZGVsZXRlcyBhIHNpbmdsZSBkYXRhc2V0IHRhYmxlIGRhdGEuIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2FsbF9kYXRhXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKmRhdGEpIgotLmJyCi0uUkkgIlxmSWRlbGV0ZXMgYWxsIHRoZSBkYXRhIGZyb20gdGhpcyBcZkJub2RlXGZQIGFuZCBiZXlvbmQgaW4gdGhlIGxpbmtlZCBsaXN0IFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJZGVsZXRlcyBhbGwgdGhlIGRhdGEgZnJvbSB0aGlzIFxmQm5vZGVcZlAgYW5kIGJleW9uZCBpbiB0aGUgbGlua2VkIGxpc3QgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJYWRkcyBhIG5ldyByb3cgdG8gYSBkYXRhc2V0IHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVwbGFjZV9yb3dcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqb3JpZ3JvdywgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKm5ld3JvdykiCi0uYnIKLS5SSSAiXGZJYWRkcyBhIG5ldyByb3cgdG8gYSBkYXRhc2V0IHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUsIGJ1dCBkb2Vzbid0IGRlbGV0ZS9mcmVlIHRoZSBjb2x1bW4gdmFsdWVzIFxmUCIKLS50aSAtMWMKLS5SSSAiTkVUU05NUF9JTkxJTkUgdm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVtb3ZlX2FuZF9kZWxldGVfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSB0YWJsZSBhbmQgdGhlbiBkZWxldGVzIGl0IChhbmQgYWxsIGl0cyBkYXRhKSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9jcmVhdGVfcm93X2Zyb21fZGVmYXVsdHNcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqZGVmcm93KSIKLS5icgotLlJJICJcZkljcmVhdGVzIGEgbmV3IHJvdyBmcm9tIGFuIGV4aXN0aW5nIGRlZmluZWQgZGVmYXVsdCBzZXQgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9zZXRfYWRkX2RlZmF1bHRfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZV9zZXQsIHVuc2lnbmVkIGludCBjb2x1bW4sIGludCB0eXBlLCBpbnQgd3JpdGFibGUsIHZvaWQgKmRlZmF1bHRfdmFsdWUsIHNpemVfdCBkZWZhdWx0X3ZhbHVlX2xlbikiCi0uYnIKLS5SSSAiXGZJYWRkcyBhIG5ldyBkZWZhdWx0IHJvdyB0byBhIHRhYmxlX3NldC4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGFibGVfc2V0X211bHRpX2FkZF9kZWZhdWx0X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdHNldCwuLi4pIgotLmJyCi0uUkkgIlxmSWFkZHMgbXVsdGlwbGUgZGF0YSBjb2x1bW4gZGVmaW5pdGlvbnMgdG8gZWFjaCByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RhYmxlX2RhdGFfc2V0X2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKmRhdGFfc2V0KSIKLS5icgotLlJJICJcZklHaXZlbiBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgZGVmaW5pdGlvbiwgY3JlYXRlIGEgaGFuZGxlciBmb3IgaXQuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YV9zZXRcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKmRhdGFfc2V0LCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklyZWdpc3RlciBhIGdpdmVuIGRhdGFfc2V0IGF0IGEgZ2l2ZW4gb2lkIChzcGVjaWZpZWQgaW4gdGhlIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gcG9pbnRlcikuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV3cm93X3N0YXNoXGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9jcmVhdGVfbmV3cm93c3Rhc2hcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKmRhdGF0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yZXF1ZXN0X2luZm9cZlAgKnRhYmxlX2luZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2hlbHBlcl9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogXGZCbmV0c25tcF9leHRyYWN0X3RhYmxlX2RhdGFfc2V0XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHBvaW50ZXIgZnJvbSBhIGdpdmVuIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAgKiBcZkJuZXRzbm1wX2V4dHJhY3RfdGFibGVfZGF0YV9zZXRfY29sdW1uXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCwgdW5zaWduZWQgaW50IGNvbHVtbikiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgYSBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0IHBvaW50ZXIgZnJvbSBhIGdpdmVuIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfcmVnaXN0ZXJfYXV0b19kYXRhX3RhYmxlXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZV9zZXQsIGNoYXIgKnJlZ2lzdHJhdGlvbl9uYW1lKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgYSB0YWJsZV9kYXRhc2V0IHNvIHRoYXQgdGhlICdhZGRfcm93JyBzbm1wZC5jb25mIHRva2VuIGNhbiBiZSB1c2VkIHRvIGFkZCBkYXRhIHRvIHRoaXMgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2NvbmZpZ19wYXJzZV90YWJsZV9zZXRcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfY29uZmlnX3BhcnNlX2FkZF9yb3dcZlAgKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfZ2V0X2ZpcnN0X3Jvd1xmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIGZpcnN0IHJvdyBpbiB0aGUgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfZ2V0X25leHRfcm93XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGFibGVfc2V0X251bV9yb3dzXGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9maW5kX2NvbHVtblxmUCAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICpzdGFydCwgdW5zaWduZWQgaW50IGNvbHVtbikiCi0uYnIKLS5SSSAiXGZJRmluZHMgYSBjb2x1bW4gd2l0aGluIGEgZ2l2ZW4gc3RvcmFnZSBzZXQsIGdpdmVuIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RvcmFnZSBzZXQgbGlzdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9tYXJrX3Jvd19jb2x1bW5fd3JpdGFibGVcZlAgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICpyb3csIGludCBjb2x1bW4sIGludCB3cml0YWJsZSkiCi0uYnIKLS5SSSAiXGZJbWFya3MgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgYXMgd3JpdGFibGUgb3Igbm90LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3NldF9yb3dfY29sdW1uXGZQIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqcm93LCB1bnNpZ25lZCBpbnQgY29sdW1uLCBpbnQgdHlwZSwgY29uc3QgY2hhciAqdmFsdWUsIHNpemVfdCB2YWx1ZV9sZW4pIgotLmJyCi0uUkkgIlxmSXNldHMgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgd2l0aCBkYXRhIGdpdmVuIGEgdHlwZSwgdmFsdWUsIGFuZCBsZW5ndGguIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX2luZGV4XGZQIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICp0YWJsZSwgdV9jaGFyIHR5cGUpIgotLmJyCi0uUkkgIlxmSWFkZHMgYW4gaW5kZXggdG8gdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF90YWJsZV9zZXRfYWRkX2luZGV4ZXNcZlAgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKnRzZXQsLi4uKSIKLS5icgotLlJJICJcZklhZGRzIG11bHRpcGxlIGluZGV4ZXMgdG8gYSB0YWJsZV9kYXRhc2V0IGhlbHBlciBvYmplY3QuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1IZWxwcyB5b3UgaW1wbGVtZW50IGEgdGFibGUgd2l0aCBhdXRvbWF0dGVkIHN0b3JhZ2UuIAotCi1UaGlzIGhhbmRsZXIgaGVscHMgeW91IGltcGxlbWVudCBhIHRhYmxlIHdoZXJlIGFsbCB0aGUgZGF0YSBpcyBleHBlY3RlZCB0byBiZSBzdG9yZWQgd2l0aGluIHRoZSBhZ2VudCBpdHNlbGYgYW5kIG5vdCBpbiBzb21lIGV4dGVybmFsIHN0b3JhZ2UgbG9jYXRpb24uIEl0IGhhbmRsZXMgYWxsIE1JQiByZXF1ZXN0cyBpbmNsdWRpbmcgR0VUcywgR0VUTkVYVHMgYW5kIFNFVHMuIEl0J3MgcG9zc2libGUgdG8gc2ltcGx5IGNyZWF0ZSBhIHRhYmxlIHdpdGhvdXQgYWN0dWFsbHkgZXZlciBkZWZpbmluZyBhIGhhbmRsZXIgdG8gYmUgY2FsbGVkIHdoZW4gU05NUCByZXF1ZXN0cyBjb21lIGluLiBUbyB1c2UgdGhlIGRhdGEsIHlvdSBjYW4gZWl0aGVyIGF0dGFjaCBhIHN1Yi1oYW5kbGVyIHRoYXQgbWVyZWx5IHVzZXMvbWFuaXB1bGF0ZXMgdGhlIGRhdGEgZnVydGhlciB3aGVuIHJlcXVlc3RzIGNvbWUgaW4sIG9yIHlvdSBjYW4gbG9vcCB0aHJvdWdoIGl0IGV4dGVybmFsbHkgd2hlbiBpdCdzIGFjdHVhbGx5IG5lZWRlZC4gVGhpcyBoYW5kbGVyIGlzIG1vc3QgdXNlZnVsIGluIGNhc2VzIHdoZXJlIGEgdGFibGUgaXMgaG9sZGluZyBjb25maWd1cmF0aW9uIGRhdGEgZm9yIHNvbWV0aGluZyB3aGljaCBnZXRzIHRyaWdnZXJlZCB2aWEgYW5vdGhlciBldmVudC4KLS5QUAotTk9URSBOT1RFIE5PVEU6IFRoaXMgaGVscGVyIGlzbid0IGNvbXBsZXRlIGFuZCBpcyBsaWtlbHkgdG8gY2hhbmdlIHNvbWV3aGF0IG92ZXIgdGltZS4gU3BlY2lmaWNhbGx5LCB0aGUgd2F5IGl0IHN0b3JlcyBkYXRhIGludGVybmFsbHkgbWF5IGNoYW5nZSBkcmFzdGljYWxseS4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAqIG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfc2V0IChjb25zdCBjaGFyICogdGFibGVfbmFtZSkiCi0uUFAKLUNyZWF0ZSBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgc3RydWN0dXJlIGdpdmVuIGEgdGFibGVfZGF0YSBkZWZpbml0aW9uLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc3IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSBcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQKiBuZXRzbm1wX2V4dHJhY3RfdGFibGVfZGF0YV9zZXQgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCkiCi0uUFAKLWV4dHJhY3RzIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBwb2ludGVyIGZyb20gYSBnaXZlbiByZXF1ZXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODM4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAqIG5ldHNubXBfZXh0cmFjdF90YWJsZV9kYXRhX3NldF9jb2x1bW4gKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgdW5zaWduZWQgaW50IGNvbHVtbikiCi0uUFAKLWV4dHJhY3RzIGEgbmV0c25tcF90YWJsZV9kYXRhX3NldCBwb2ludGVyIGZyb20gYSBnaXZlbiByZXF1ZXN0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODQ4IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQKiBuZXRzbm1wX2dldF90YWJsZV9kYXRhX3NldF9oYW5kbGVyIChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogZGF0YV9zZXQpIgotLlBQCi1HaXZlbiBhIG5ldHNubXBfdGFibGVfZGF0YV9zZXQgZGVmaW5pdGlvbiwgY3JlYXRlIGEgaGFuZGxlciBmb3IgaXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzcyIG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJpbnQgbmV0c25tcF9tYXJrX3Jvd19jb2x1bW5fd3JpdGFibGUgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93LCBpbnQgY29sdW1uLCBpbnQgd3JpdGFibGUpIgotLlBQCi1tYXJrcyBhIGdpdmVuIGNvbHVtbiBpbiBhIHJvdyBhcyB3cml0YWJsZSBvciBub3QuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTIxNCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3JlZ2lzdGVyX2F1dG9fZGF0YV90YWJsZSAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlX3NldCwgY2hhciAqIHJlZ2lzdHJhdGlvbl9uYW1lKSIKLS5QUAotcmVnaXN0ZXJzIGEgdGFibGVfZGF0YXNldCBzbyB0aGF0IHRoZSAnYWRkX3Jvdycgc25tcGQuY29uZiB0b2tlbiBjYW4gYmUgdXNlZCB0byBhZGQgZGF0YSB0byB0aGlzIHRhYmxlLiBJZiByZWdpc3RyYXRpb25fbmFtZSBpcyBOVUxMIHRoZW4gdGhlIG5hbWUgdXNlZCB3aGVuIHRoZSB0YWJsZSB3YXMgY3JlYXRlZCB3aWxsIGJlIHVzZWQgaW5zdGVhZC4KLS5QUAotXGZCVG9kb1xmUAotLlJTIDQKLWNyZWF0ZSBhIHByb3Blcmx5IGZyZWUnaW5nIHJlZ2lzdGVyYXRpb24gcG9pbnRlciBmb3IgdGhlIGRhdGFsaXN0LCBhbmQgZ2V0IHRoZSBkYXRhbGlzdCBmcmVlZCBhdCBzaHV0ZG93bi4gCi0uUkUKLS5QUAotCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NzUgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgImludCBuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2RhdGFfc2V0IChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICogcmVnaW5mbywgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIGRhdGFfc2V0LCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICogdGFibGVfaW5mbykiCi0uUFAKLXJlZ2lzdGVyIGEgZ2l2ZW4gZGF0YV9zZXQgYXQgYSBnaXZlbiBvaWQgKHNwZWNpZmllZCBpbiB0aGUgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiBwb2ludGVyKS4gVGhlIHJlZ2luZm8tPmhhbmRsZXItPmFjY2Vzc19tZXRob2QgKm1heSogYmUgbnVsbCBpZiB0aGUgY2FsbCBkb2Vzbid0IGV2ZXIgd2FudCB0byBiZSBjYWxsZWQgZm9yIFNOTVAgb3BlcmF0aW9ucy4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzOTggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgImludCBuZXRzbm1wX3NldF9yb3dfY29sdW1uIChcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdywgdW5zaWduZWQgaW50IGNvbHVtbiwgaW50IHR5cGUsIGNvbnN0IGNoYXIgKiB2YWx1ZSwgc2l6ZV90IHZhbHVlX2xlbikiCi0uUFAKLXNldHMgYSBnaXZlbiBjb2x1bW4gaW4gYSByb3cgd2l0aCBkYXRhIGdpdmVuIGEgdHlwZSwgdmFsdWUsIGFuZCBsZW5ndGguIERhdGEgaXMgbWVtZHVwJ2VkIGJ5IHRoZSBmdW5jdGlvbi4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjQ5IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX3NldF9jbG9uZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotY2xvbmVzIGEgZGF0YXNldCByb3csIGluY2x1ZGluZyBhbGwgZGF0YS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMDggb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIlxmQm5ldHNubXBfdGFibGVfcm93XGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X2NyZWF0ZV9yb3dfZnJvbV9kZWZhdWx0cyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQICogZGVmcm93KSIKLS5QUAotY3JlYXRlcyBhIG5ldyByb3cgZnJvbSBhbiBleGlzdGluZyBkZWZpbmVkIGRlZmF1bHQgc2V0IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQyIG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0X3N0b3JhZ2VcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfZmluZF9jb2x1bW4gKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIHN0YXJ0LCB1bnNpZ25lZCBpbnQgY29sdW1uKSIKLS5QUAotRmluZHMgYSBjb2x1bW4gd2l0aGluIGEgZ2l2ZW4gc3RvcmFnZSBzZXQsIGdpdmVuIHRoZSBwb2ludGVyIHRvIHRoZSBzdGFydCBvZiB0aGUgc3RvcmFnZSBzZXQgbGlzdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjAyIG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCogbmV0c25tcF90YWJsZV9kYXRhX3NldF9nZXRfZmlyc3Rfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUpIgotLlBQCi1yZXR1cm5zIHRoZSBmaXJzdCByb3cgaW4gdGhlIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTE3MSBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiXGZCbmV0c25tcF90YWJsZV9yb3dcZlAqIG5ldHNubXBfdGFibGVfZGF0YV9zZXRfZ2V0X25leHRfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotcmV0dXJucyB0aGUgbmV4dCByb3cgaW4gdGhlIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTE3OCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX2luZGV4IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUsIHVfY2hhciB0eXBlKSIKLS5QUAotYWRkcyBhbiBpbmRleCB0byB0aGUgdGFibGUuIENhbGwgdGhpcyByZXBlYXRseSBmb3IgZWFjaCBpbmRleC4gCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRhdGFfc2V0LmNcZlAuCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMzAzIG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfcm93IChcZkJuZXRzbm1wX3RhYmxlX2RhdGFfc2V0XGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotYWRkcyBhIG5ldyByb3cgdG8gYSBkYXRhc2V0IHRhYmxlIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi1cZkJkYXRhX3NldC5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg3IG9mIGZpbGUgdGFibGVfZGF0YXNldC5jLgotLlNTICJORVRTTk1QX0lOTElORSB2b2lkIG5ldHNubXBfdGFibGVfZGF0YXNldF9kZWxldGVfYWxsX2RhdGEgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIGRhdGEpIgotLlBQCi1kZWxldGVzIGFsbCB0aGUgZGF0YSBmcm9tIHRoaXMgXGZCbm9kZVxmUCBhbmQgYmV5b25kIGluIHRoZSBsaW5rZWQgbGlzdCAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE2NCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldF9zdG9yYWdlXGZQKiBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfZGVsZXRlX2RhdGEgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRfc3RvcmFnZVxmUCAqIGRhdGEpIgotLlBQCi1kZWxldGVzIGEgc2luZ2xlIGRhdGFzZXQgdGFibGUgZGF0YS4gcmV0dXJucyB0aGUgKHBvc3NpYmx5IHN0aWxsIGdvb2QpIG5leHQgcG9pbnRlciBvZiB0aGUgZGVsZXRlZCBkYXRhIG9iamVjdC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNTEgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X2RlbGV0ZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfcm93XGZQICogcm93KSIKLS5QUAotZGVsZXRlcyBhbGwgdGhlIGRhdGEgZnJvbSB0aGlzIFxmQm5vZGVcZlAgYW5kIGJleW9uZCBpbiB0aGUgbGlua2VkIGxpc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxNzQgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9hbmRfZGVsZXRlX3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJlbW92ZXMgYSByb3cgZnJvbSB0aGUgdGFibGUgYW5kIHRoZW4gZGVsZXRlcyBpdCAoYW5kIGFsbCBpdHMgZGF0YSkgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMTkgb2YgZmlsZSB0YWJsZV9kYXRhc2V0LmMuCi0uU1MgIk5FVFNOTVBfSU5MSU5FIHZvaWQgbmV0c25tcF90YWJsZV9kYXRhc2V0X3JlbW92ZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZW1vdmVzIGEgcm93IGZyb20gdGhlIHRhYmxlLCBidXQgZG9lc24ndCBkZWxldGUvZnJlZSB0aGUgY29sdW1uIHZhbHVlcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwOCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfcmVwbGFjZV9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90YWJsZV9yb3dcZlAgKiBvcmlncm93LCBcZkJuZXRzbm1wX3RhYmxlX3Jvd1xmUCAqIG5ld3JvdykiCi0uUFAKLWFkZHMgYSBuZXcgcm93IHRvIGEgZGF0YXNldCB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE5NyBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAiaW50IG5ldHNubXBfdGFibGVfc2V0X2FkZF9kZWZhdWx0X3JvdyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRhYmxlX3NldCwgdW5zaWduZWQgaW50IGNvbHVtbiwgaW50IHR5cGUsIGludCB3cml0YWJsZSwgdm9pZCAqIGRlZmF1bHRfdmFsdWUsIHNpemVfdCBkZWZhdWx0X3ZhbHVlX2xlbikiCi0uUFAKLWFkZHMgYSBuZXcgZGVmYXVsdCByb3cgdG8gYSB0YWJsZV9zZXQuIEFyZ3VtZW50cyBzaG91bGQgYmUgdGhlIHRhYmxlX3NldCwgY29sdW1uIG51bWJlciwgXGZCdmFyaWFibGVcZlAgdHlwZSBhbmQgZmluYWxseSBhIDEgaWYgaXQgaXMgYWxsb3dlZCB0byBiZSB3cml0YWJsZSwgb3IgYSAwIGlmIG5vdC4gSWYgdGhlIGRlZmF1bHRfdmFsdWUgZmllbGQgaXMgbm90IE5VTEwsIGl0IHdpbGwgYmUgdXNlZCB0byBwb3B1bGF0ZSBuZXcgdmFsdXNlIGluIHRoYXQgY29sdW1uIGZybyBuZXdseSBjcmVhdGVkIHJvd3MuIEl0IGlzIGNvcGllZCBpbnRvIHRoZSBzdG9yYWdlIHRlbXBsYXRlIChmcmVlIHlvdXIgY2FsbGluZyBhcmd1bWVudCkuCi0uUFAKLXJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9yIFNOTVBFUlJfRkFJTFVSRSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2OCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3RhYmxlX3NldF9hZGRfaW5kZXhlcyAoXGZCbmV0c25tcF90YWJsZV9kYXRhX3NldFxmUCAqIHRzZXQsICAuLi4pIgotLlBQCi1hZGRzIG11bHRpcGxlIGluZGV4ZXMgdG8gYSB0YWJsZV9kYXRhc2V0IGhlbHBlciBvYmplY3QuIFRvIGVuZCB0aGUgbGlzdCwgdXNlIGEgMCBhZnRlciB0aGUgbGlzdCBvZiBBU04gaW5kZXggdHlwZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTMxNCBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TUyAidm9pZCBuZXRzbm1wX3RhYmxlX3NldF9tdWx0aV9hZGRfZGVmYXVsdF9yb3cgKFxmQm5ldHNubXBfdGFibGVfZGF0YV9zZXRcZlAgKiB0c2V0LCAgLi4uKSIKLS5QUAotYWRkcyBtdWx0aXBsZSBkYXRhIGNvbHVtbiBkZWZpbml0aW9ucyB0byBlYWNoIHJvdy4gRnVuY3Rpb25hbGx5LCB0aGlzIGlzIGEgd3JhcHBlciBhcm91bmQgY2FsbGluZyBuZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3cgcmVwZWF0ZWRseSBmb3IgeW91LiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGF0YV9zZXQuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMyOSBvZiBmaWxlIHRhYmxlX2RhdGFzZXQuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMgYi9tYW4vbmV0c25tcF90YWJsZV9nZW5lcmljLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFlYmM4OWUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfZ2VuZXJpYy4zCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotLlRIICJnZW5lcmljX3RhYmxlX0FQSSIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLWdlbmVyaWNfdGFibGVfQVBJIFwtIAotLlBQCi1HZW5lcmFsIHJlcXVpcmVtZW50cyBmb3IgYSB0YWJsZSBoZWxwZXIuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX21haW50ZW5hbmNlXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklSb3V0aW5lcyBmb3IgbWFpbnRhaW5pbmcgdGhlIGNvbnRlbnRzIG9mIGEgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbWliX21haW50ZW5hbmNlXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklSb3V0aW5lcyBmb3IgbWFpbnRhaW5pbmcgYSBNSUIgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCdGFibGVfcm93c1xmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJUm91dGluZXMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgcm93cyBvZiBhIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnRhYmxlX2luZGV4ZXNcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSVJvdXRpbmVzIGZvciB3b3JraW5nIHdpdGggcm93IGluZGV4ZXMuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1HZW5lcmFsIHJlcXVpcmVtZW50cyBmb3IgYSB0YWJsZSBoZWxwZXIuIAotCi1BIGdpdmVuIHRhYmxlIGhlbHBlciBuZWVkIG5vdCBpbXBsZW1lbnQgdGhlIHdob2xlIG9mIHRoaXMgQVBJLCBhbmQgbWF5IG5lZWQgdG8gYWRqdXN0IHRoZSBwcm90b3R5cGUgb2YgY2VydGFpbiByb3V0aW5lcy4gQnV0IHRoaXMgZGVzY3JpcHRpb24gcHJvdmlkZXMgYSBzdWl0YWJsZSBzdGFuZGFyZCBkZXNpZ24gZnJhbWV3b3JrLiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMgYi9tYW4vbmV0c25tcF90YWJsZV9pbmRleGVzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDFlOTQ2NjcuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfaW5kZXhlcy4zCisrKyAvZGV2L251bGwKQEAgLTEsODMgKzAsMCBAQAotLlRIICJ0YWJsZV9pbmRleGVzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfaW5kZXhlcyBcLSAKLS5QUAotUm91dGluZXMgZm9yIHdvcmtpbmcgd2l0aCByb3cgaW5kZXhlcy4gIAotCi0uU1MgIkZ1bmN0aW9ucyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBcZkJuZXRzbm1wX2dlbmVyaWNfaWR4XGZQICh2b2lkICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIGluZGV4aW5nIHN0cnVjdHVyZSBvZiB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19pZHhcZlAgKHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJUmVwb3J0IHRoZSBpbmRleCB2YWx1ZXMgZm9yIGEgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X29pZFxmUCAodm9pZCAqcm93LCBvaWQgKmluc3RhbmNlcykiCi0uYnIKLS5SSSAiXGZJUmVwb3J0IHRoZSBpbnN0YW5jZSBPSURzIGZvciBhIHJvdy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfaWR4XGZQICh2b2lkICpyb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXgpIgotLmJyCi0uUkkgIlxmSUNvbXBhcmUgYSByb3cgYWdhaW5zdCB0aGUgc3BlY2lmaWVkIGluZGV4IHZhbHVlcy4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfb2lkXGZQICh2b2lkICpyb3csIG9pZCAqaW5zdGFuY2VzLCBzaXplX3QgbGVuKSIKLS5icgotLlJJICJcZklDb21wYXJlIGEgcm93IGFnYWluc3QgdGhlIHNwZWNpZmllZCBpbnN0YW5jZSBPSURzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9zdWJ0cmVlX2lkeFxmUCAodm9pZCAqcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4KSIKLS5icgotLlJJICJcZklDaGVjayBpZiBhIHJvdyBsaWVzIHdpdGhpbiBhIHN1YnRyZWUgb2YgaW5kZXggdmFsdWVzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfY29tcGFyZV9zdWJ0cmVlX29pZFxmUCAodm9pZCAqcm93LCBvaWQgKmluc3RhbmNlcywgc2l6ZV90IGxlbikiCi0uYnIKLS5SSSAiXGZJQ2hlY2sgaWYgYSByb3cgbGllcyB3aXRoaW4gYSBzdWJ0cmVlIG9mIGluc3RhbmNlIE9JRHMuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Sb3V0aW5lcyBmb3Igd29ya2luZyB3aXRoIHJvdyBpbmRleGVzLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19jb21wYXJlX2lkeCAodm9pZCAqIHJvdywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICogaW5kZXgpIgotLlBQCi1Db21wYXJlIGEgcm93IGFnYWluc3QgdGhlIHNwZWNpZmllZCBpbmRleCB2YWx1ZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzI1IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfb2lkICh2b2lkICogcm93LCBvaWQgKiBpbnN0YW5jZXMsIHNpemVfdCBsZW4pIgotLlBQCi1Db21wYXJlIGEgcm93IGFnYWluc3QgdGhlIHNwZWNpZmllZCBpbnN0YW5jZSBPSURzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDMzMSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiaW50IG5ldHNubXBfZ2VuZXJpY19jb21wYXJlX3N1YnRyZWVfaWR4ICh2b2lkICogcm93LCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleCkiCi0uUFAKLUNoZWNrIGlmIGEgcm93IGxpZXMgd2l0aGluIGEgc3VidHJlZSBvZiBpbmRleCB2YWx1ZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzM3IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX2NvbXBhcmVfc3VidHJlZV9vaWQgKHZvaWQgKiByb3csIG9pZCAqIGluc3RhbmNlcywgc2l6ZV90IGxlbikiCi0uUFAKLUNoZWNrIGlmIGEgcm93IGxpZXMgd2l0aGluIGEgc3VidHJlZSBvZiBpbnN0YW5jZSBPSURzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM0MyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAiXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQKiBuZXRzbm1wX2dlbmVyaWNfaWR4ICh2b2lkICogdGFibGUpIgotLlBQCi1SZXRyaWV2ZSB0aGUgaW5kZXhpbmcgc3RydWN0dXJlIG9mIHRoZSB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzMDcgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgIlxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCogbmV0c25tcF9nZW5lcmljX3Jvd19pZHggKHZvaWQgKiByb3cpIgotLlBQCi1SZXBvcnQgdGhlIGluZGV4IHZhbHVlcyBmb3IgYSByb3cuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzEzIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJzaXplX3QgbmV0c25tcF9nZW5lcmljX3Jvd19vaWQgKHZvaWQgKiByb3csIG9pZCAqIGluc3RhbmNlcykiCi0uUFAKLVJlcG9ydCB0aGUgaW5zdGFuY2UgT0lEcyBmb3IgYSByb3cuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzE5IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMgYi9tYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NzY1YWVhLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxOTIgKzAsMCBAQAotLlRIICJ0YWJsZV9pdGVyYXRvciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXRhYmxlX2l0ZXJhdG9yIFwtIAotLlBQCi1UaGUgdGFibGUgaXRlcmF0b3IgaGVscGVyIGlzIGRlc2lnbmVkIHRvIHNpbXBsaWZ5IHRoZSB0YXNrIG9mIHdyaXRpbmcgYSB0YWJsZSBoYW5kbGVyIGZvciB0aGUgbmV0LXNubXAgYWdlbnQgd2hlbiB0aGUgZGF0YSBiZWluZyBhY2Nlc3NlZCBpcyBub3QgaW4gYW4gb2lkIHNvcnRlZCBmb3JtIGFuZCBtdXN0IGJlIGFjY2Vzc2VkIGV4dGVybmFsbHkuICAKLQotLlNTICJEYXRhIFN0cnVjdHVyZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAic3RydWN0IFxmQnRpX2NhY2hlX2luZm9fc1xmUCIKLS5icgotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAiCi0uYnIKLS5SSSAiXGZJSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZCBieSB0aGUgaXRlcmF0b3JfaGFuZGxlciB0byBsb29wIG92ZXIgeW91ciBkYXRhIHNldCBhbmQgc29ydCBpdCBpbiBhIFNOTVAgc3BlY2lmaWMgbWFubmVyLiBcZlAiCi0uaW4gLTFjCi0uU1MgIkRlZmluZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJUSV9SRVFVRVNUX0NBQ0hFXGZQICAgJ3RpX2NhY2hlJyIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlRBQkxFX0lURVJBVE9SX05PVEFHQUlOXGZQICAgMjU1IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVEFCTEVfSVRFUkFUT1JfTkFNRVxmUCAgICd0YWJsZV9pdGVyYXRvciciCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBzdHJ1Y3QgXGZCdGlfY2FjaGVfaW5mb19zXGZQIFxmQnRpX2NhY2hlX2luZm9cZlAiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiggXGZCTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50XGZQICkodm9pZCAqKmxvb3BfY29udGV4dCwgdm9pZCAqKmRhdGFfY29udGV4dCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKCBcZkJOZXRzbm1wX05leHRfRGF0YV9Qb2ludFxmUCApKHZvaWQgKipsb29wX2NvbnRleHQsIHZvaWQgKipkYXRhX2NvbnRleHQsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkICooIFxmQk5ldHNubXBfTWFrZV9EYXRhX0NvbnRleHRcZlAgKSh2b2lkICpsb29wX2NvbnRleHQsIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQoIFxmQk5ldHNubXBfRnJlZV9Mb29wX0NvbnRleHRcZlAgKSh2b2lkICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQoIFxmQk5ldHNubXBfRnJlZV9EYXRhX0NvbnRleHRcZlAgKSh2b2lkICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAiCi0uYnIKLS5SSSAiXGZJVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfaXRlcmF0b3JfaW5mby4gXGZQIgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICogXGZCbmV0c25tcF9pdGVyYXRvcl9jcmVhdGVfdGFibGVcZlAgKE5ldHNubXBfRmlyc3RfRGF0YV9Qb2ludCAqZmlyc3REUCwgTmV0c25tcF9OZXh0X0RhdGFfUG9pbnQgKm5leHREUCwgTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50ICpnZXRpZHgsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2RlbGV0ZV90YWJsZVxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIG9iamVjdCBmb3IgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGFuZCByZWdpc3RlcnMgYSB0YWJsZSBpdGVyYXRvciBoZWxwZXIgaGFuZGxlciBjYWxsaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIgd2l0aCBhIGhhbmRsZXIgbmFtZSBzZXQgdG8gVEFCTEVfSVRFUkFUT1JfTkFNRSBhbmQgYWNjZXNzIG1ldGhvZCwgbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkICogXGZCbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgdGFibGVfaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmcm9tIGEgcmVxdWVzdC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfaW5zZXJ0X2l0ZXJhdG9yX2NvbnRleHRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCB2b2lkICpkYXRhKSIKLS5icgotLlJJICJcZklpbnNlcnRzIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZm9yIGEgbmV3bHkgY3JlYXRlZCByb3cgaW50byBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2ZpcnN0XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZ2V0XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCB2b2lkICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19uZXh0XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCB2b2lkICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXRfYnlpZHhcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X25leHRfYnlpZHhcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2dldF9ieW9pZFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X25leHRfYnlvaWRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIG9pZCAqaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19jb3VudFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbykiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVmFyaWFibGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIk5ldHNubXBfTm9kZV9IYW5kbGVyIFxmQm5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXJcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgdGFibGUgaXRlcmF0b3IgaGVscGVyIGlzIGRlc2lnbmVkIHRvIHNpbXBsaWZ5IHRoZSB0YXNrIG9mIHdyaXRpbmcgYSB0YWJsZSBoYW5kbGVyIGZvciB0aGUgbmV0LXNubXAgYWdlbnQgd2hlbiB0aGUgZGF0YSBiZWluZyBhY2Nlc3NlZCBpcyBub3QgaW4gYW4gb2lkIHNvcnRlZCBmb3JtIGFuZCBtdXN0IGJlIGFjY2Vzc2VkIGV4dGVybmFsbHkuIAotCi1GdW5jdGlvbmFsbHksIGl0IGlzIGEgc3BlY2lhbGl6ZWQgdmVyc2lvbiBvZiB0aGUgbW9yZSBnZW5lcmljIHRhYmxlIGhlbHBlciBidXQgZWFzaWVzIHRoZSBidXJkZW4gb2YgR0VUTkVYVCBwcm9jZXNzaW5nIGJ5IG1hbnVhbGx5IGxvb3BpbmcgdGhyb3VnaCBhbGwgdGhlIGRhdGEgaW5kZXhlcyByZXRyaWV2ZWQgdGhyb3VnaCBmdW5jdGlvbiBjYWxscyB3aGljaCBzaG91bGQgYmUgc3VwcGxpZWQgYnkgdGhlIFxmQm1vZHVsZVxmUCB0aGF0IHdpc2hlcyBoZWxwLiBUaGUgXGZCbW9kdWxlXGZQIHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwcyBzaG91bGQsIGFmdGVyd2FyZHMsIG5ldmVyIGJlIGNhbGxlZCBmb3IgdGhlIGNhc2Ugb2YgJ01PREVfR0VUTkVYVCcgYW5kIG9ubHkgZm9yIHRoZSBHRVQgYW5kIFNFVCByZWxhdGVkIG1vZGVzIGluc3RlYWQuCi0uUFAKLVRoZSBmdW5kYW1lbnRhbCBub3Rpb24gYmV0d2VlbiB0aGUgdGFibGUgaXRlcmF0b3IgaXMgdGhhdCBpdCBhbGxvd3MgeW91ciBjb2RlIHRvIGl0ZXJhdGUgb3ZlciBlYWNoICdyb3cnIHdpdGhpbiB5b3VyIGRhdGEgc3RvcmFnZSBtZWNoYW5pc20sIHdpdGhvdXQgcmVxdWlyaW5nIHRoYXQgaXQgYmUgc29ydGVkIGluIGEgU05NUC1pbmRleC1jb21wbGlhbnQgbWFubmVyLiBUaHJvdWdoIHRoZSBnZXRfZmlyc3RfZGF0YV9wb2ludCBhbmQgZ2V0X25leHRfZGF0YV9wb2ludCBob29rcywgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlciB3aWxsIHJlcGVhdGVkbHkgY2FsbCB5b3VyIGhvb2tzIHRvIGZpbmQgdGhlICdwcm9wZXInIHJvdyBvZiBkYXRhIHRoYXQgbmVlZHMgcHJvY2Vzc2luZy4gVGhlIGZvbGxvd2luZyBjb25jZXB0cyBhcmUgaW1wb3J0YW50OgotLlBQCi0uSVAgIlwoYnUiIDIKLUEgbG9vcCBjb250ZXh0IGlzIGEgcG9pbnRlciB3aGljaCBpbmRpY2F0ZXMgd2hlcmUgaW4gdGhlIGN1cnJlbnQgcHJvY2Vzc2luZyBvZiBhIHNldCBvZiByb3dzIHlvdSBjdXJyZW50bHkgYXJlLiBBbGxvd3MgdGhlIGdldF8qX2RhdGFfcG9pbnQgcm91dGluZXMgdG8gbW92ZSBmcm9tIG9uZSByb3cgdG8gdGhlIG5leHQsIG9uY2UgdGhlIGl0ZXJhdG9yIGhhbmRsZXIgaGFzIGlkZW50aWZpZWQgdGhlIGFwcHJvcHJpYXRlIHJvdyBmb3IgdGhpcyByZXF1ZXN0LCB0aGUgam9iIG9mIHRoZSBsb29wIGNvbnRleHQgaXMgZG9uZS4gVGhlIG1vc3Qgc2ltcGxlIGV4YW1wbGUgd291bGQgYmUgYSBwb2ludGVyIHRvIGFuIGludGVnZXIgd2hpY2ggc2ltcGx5IGNvdW50cyByb3dzIGZyb20gMSB0byBYLiBNb3JlIGNvbW1vbmx5LCBpdCBtaWdodCBiZSBhIHBvaW50ZXIgdG8gYSBsaW5rZWQgbGlzdCBcZkJub2RlXGZQLCBvciBzb21lb3RoZXIgaW50ZXJuYWwgb3IgZXh0ZXJuYWwgcmVmZXJlbmNlIHRvIGEgZGF0YSBzZXQgKGZpbGUgc2VlayB2YWx1ZSwgYXJyYXkgcG9pbnRlciwgLi4uKS4gSWYgYWxsb2NhdGVkIGR1cmluZyBpdGVyYXRpb24sIGVpdGhlciB0aGUgZnJlZV9sb29wX2NvbnRleHRfYXRfZW5kIChwcmVmZXJhYmx5KSBvciB0aGUgZnJlZV9sb29wX2NvbnRleHQgcG9pbnRlcnMgc2hvdWxkIGJlIHNldC4KLS5QUAotLlBQCi0uSVAgIlwoYnUiIDIKLUEgZGF0YSBjb250ZXh0IGlzIHNvbWV0aGluZyB0aGF0IHlvdXIgaGFuZGxlciBjb2RlIGNhbiB1c2UgaW4gb3JkZXIgdG8gcmV0cmlldmUgdGhlIHJlc3Qgb2YgdGhlIGRhdGEgZm9yIHRoZSBuZWVkZWQgcm93LiBUaGlzIGRhdGEgY2FuIGJlIGFjY2Vzc2VkIGluIHlvdXIgaGFuZGxlciB2aWEgbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHQgYXBpIHdpdGggdGhlIG5ldHNubXBfcmVxdWVzdF9pbmZvIHN0cnVjdHVyZSB0aGF0J3MgcGFzc2VkIGluLiBUaGUgaW1wb3J0YW50IGRpZmZlcmVuY2UgYmV0d2VlbiBhIGxvb3AgY29udGV4dCBhbmQgYSBkYXRhIGNvbnRleHQgaXMgdGhhdCBtdWx0aXBsZSBkYXRhIGNvbnRleHRzIGNhbiBiZSBrZXB0IGJ5IHRoZSB0YWJsZV9pdGVyYXRvciBoZWxwZXIsIHdoZXJlIGFzIG9ubHkgb25lIGxvb3AgY29udGV4dCB3aWxsIGV2ZXIgYmUgaGVsZCBieSB0aGUgdGFibGVfaXRlcmF0b3IgaGVscGVyLiBJZiBhbGxvY2F0ZWQgZHVyaW5nIGl0ZXJhdGlvbiB0aGUgZnJlZV9kYXRhX2NvbnRleHQgcG9pbnRlciBzaG91bGQgYmUgc2V0IHRvIGFuIGFwcHJvcHJpYXRlIGZ1bmN0aW9uLgotLlBQCi0uUFAKLVRoZSB0YWJsZSBpdGVyYXRvciBvcGVyYXRlcyBpbiBhIHNlcmllcyBvZiBzdGVwcyB0aGF0IGNhbGwgeW91ciBjb2RlIGhvb2tzIGZyb20geW91ciBuZXRzbm1wX2l0ZXJhdG9yX2luZm8gcmVnaXN0cmF0aW9uIHBvaW50ZXIuCi0uUFAKLS5JUCAiXChidSIgMgotdGhlIGdldF9maXJzdF9kYXRhX3BvaW50IGhvb2sgaXMgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgcHJvY2Vzc2luZy4gSXQgc2hvdWxkIHNldCB0aGUgXGZCdmFyaWFibGVcZlAgbGlzdCB0byBhIGxpc3Qgb2YgaW5kZXhlcyBmb3IgdGhlIGdpdmVuIHRhYmxlLiBJdCBzaG91bGQgYWxzbyBzZXQgdGhlIGxvb3BfY29udGV4dCBhbmQgbWF5YmUgYSBkYXRhX2NvbnRleHQgd2hpY2ggeW91IHdpbGwgZ2V0IGEgcG9pbnRlciBiYWNrIHRvIHdoZW4gaXQgbmVlZHMgdG8gY2FsbCB5b3VyIGNvZGUgdG8gcmV0cmlldmUgYWN0dWFsIGRhdGEgbGF0ZXIuIFRoZSBsaXN0IG9mIGluZGV4ZXMgc2hvdWxkIGJlIHJldHVybmVkIGFmdGVyIGJlaW5nIHVwZGF0ZS4KLS5QUAotLlBQCi0uSVAgIlwoYnUiIDIKLXRoZSBnZXRfbmV4dF9kYXRhX3BvaW50IGhvb2sgaXMgdGhlbiBjYWxsZWQgcmVwZWF0ZWRseSBhbmQgaXMgcGFzc2VkIHRoZSBsb29wIGNvbnRleHQgYW5kIHRoZSBkYXRhIGNvbnRleHQgZm9yIGl0IHRvIHVwZGF0ZS4gVGhlIGluZGV4ZXMsIGxvb3AgY29udGV4dCBhbmQgZGF0YSBjb250ZXh0IHNob3VsZCBhbGwgYmUgdXBkYXRlZCBpZiBtb3JlIGRhdGEgaXMgYXZhaWxhYmxlLCBvdGhlcndpc2UgdGhleSBzaG91bGQgYmUgbGVmdCBhbG9uZSBhbmQgYSBOVUxMIHNob3VsZCBiZSByZXR1cm5lZC4gSWRlYWxseSwgaXQgc2hvdWxkIHVwZGF0ZSB0aGUgbG9vcCBjb250ZXh0IHdpdGhvdXQgdGhlIG5lZWQgdG8gcmVhbGxvY2F0ZSBpdC4gSWYgcmVhbGxvY2F0aW9uIGlzIG5lY2Vzc2FyeSBmb3IgZXZlcnkgaXRlcmF0aXZlIHN0ZXAsIHRoZW4gdGhlIGZyZWVfbG9vcF9jb250ZXh0IGZ1bmN0aW9uIHBvaW50ZXIgc2hvdWxkIGJlIHNldC4gSWYgbm90LCB0aGVuIHRoZSBmcmVlX2xvb3BfY29udGV4dF9hdF9lbmQgcG9pbnRlciBzaG91bGQgYmUgc2V0LCB3aGljaCBpcyBtb3JlIGVmZmljaWVudCBzaW5jZSBhIG1hbGxvYy9mcmVlIHdpbGwgb25seSBiZSBwZXJmb3JtZWQgb25jZSBmb3IgZXZlcnkgaXRlcmF0aW9uLiAKLS5QUAotCi0uU0ggIlR5cGVkZWYgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAic3RydWN0IFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCIKLS5QUAotVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfaXRlcmF0b3JfaW5mby4gCi0uU0ggIkZ1bmN0aW9uIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgInZvaWQgKiBuZXRzbm1wX2V4dHJhY3RfaXRlcmF0b3JfY29udGV4dCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZnJvbSBhIHJlcXVlc3QuIFRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgdGhlIHRhYmxlIGl0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZnJvbSBhIG5ldHNubXBfcmVxdWVzdF9pbmZvIG9iamVjdC4gQ2FsbHMgbmV0c25tcF9yZXF1ZXN0X2dldF9saXN0X2RhdGEgd2l0aCByZXF1ZXN0LT5wYXJlbnRfZGF0YSBzZXQgd2l0aCBkYXRhIGZyb20gYSByZXF1ZXN0IHRoYXQgd2FzIGFkZGVkIHByZXZpb3VzbHkgYnkgYSBcZkJtb2R1bGVcZlAgYW5kIFRBQkxFX0lURVJBVE9SX05BTUUgaGFuZGxlciBuYW1lLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXJlcXVlc3RcZlAgdGhlIG5ldHNubXAgcmVxdWVzdCBpbmZvIHN0cnVjdHVyZQotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotYSB2b2lkIHBvaW50ZXIocmVxdWVzdC0+cGFyZW50X2RhdGEtPmRhdGEpLCBvdGhlcndpc2UgTlVMTCBpcyByZXR1cm5lZCBpZiByZXF1ZXN0IGlzIE5VTEwgb3IgcmVxdWVzdC0+cGFyZW50X2RhdGEgaXMgTlVMTCBvciByZXF1ZXN0LT5wYXJlbnRfZGF0YSBvYmplY3QgaXMgbm90IGZvdW5kLnRoZSBuZXQgCi0uUkUKLS5QUAotCi0uU1MgIlxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKiBuZXRzbm1wX2dldF90YWJsZV9pdGVyYXRvcl9oYW5kbGVyIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKiBpaW5mbykiCi0uUFAKLXJldHVybnMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIG9iamVjdCBmb3IgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlciAKLS5TUyAidm9pZCBuZXRzbm1wX2luc2VydF9pdGVyYXRvcl9jb250ZXh0IChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqIHJlcXVlc3QsIHZvaWQgKiBkYXRhKSIKLS5QUAotaW5zZXJ0cyB0YWJsZV9pdGVyYXRvciBzcGVjaWZpYyBkYXRhIGZvciBhIG5ld2x5IGNyZWF0ZWQgcm93IGludG8gYSByZXF1ZXN0IAotLlNTICJpbnQgbmV0c25tcF9yZWdpc3Rlcl90YWJsZV9pdGVyYXRvciAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqIHJlZ2luZm8sIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqIGlpbmZvKSIKLS5QUAotQ3JlYXRlcyBhbmQgcmVnaXN0ZXJzIGEgdGFibGUgaXRlcmF0b3IgaGVscGVyIGhhbmRsZXIgY2FsbGluZyBuZXRzbm1wX2NyZWF0ZV9oYW5kbGVyIHdpdGggYSBoYW5kbGVyIG5hbWUgc2V0IHRvIFRBQkxFX0lURVJBVE9SX05BTUUgYW5kIGFjY2VzcyBtZXRob2QsIG5ldHNubXBfdGFibGVfaXRlcmF0b3JfaGVscGVyX2hhbmRsZXIuIElmIE5PVF9TRVJJQUxJWkVEIGlzIG5vdCBkZWZpbmVkIHRoZSBmdW5jdGlvbiBpbmplY3RzIHRoZSBzZXJpYWxpemUgaGFuZGxlciBpbnRvIHRoZSBjYWxsaW5nIGNoYWluIHByaW9yIHRvIGNhbGxpbmcgbmV0c25tcF9yZWdpc3Rlcl90YWJsZS4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklyZWdpbmZvXGZQIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gc3RydWN0Ci0uYnIKLVxmSWlpbmZvXGZQIGlzIGEgcG9pbnRlciB0byBhIG5ldHNubXBfaXRlcmF0b3JfaW5mbyBzdHJ1Y3QKLS5SRQotLlBQCi1cZkJSZXR1cm5zOlxmUAotLlJTIDQKLU1JQl9SRUdJU1RFUkVEX09LIGlzIHJldHVybmVkIGlmIHRoZSByZWdpc3RyYXRpb24gd2FzIGEgc3VjY2Vzcy4gRmFpbHVyZXMgYXJlIE1JQl9SRUdJU1RSQVRJT05fRkFJTEVELCBNSUJfRFVQTElDQVRFX1JFR0lTVFJBVElPTi4gSWYgaWluZm8gaXMgTlVMTCwgU05NUEVSUl9HRU5FUlIgaXMgcmV0dXJuZWQuIAotLlJFCi0uUFAKLQotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMyBiL21hbi9uZXRzbm1wX3RhYmxlX2l0ZXJhdG9yLmguMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmMwNmRiNC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9pdGVyYXRvci5oLjMKKysrIC9kZXYvbnVsbApAQCAtMSwxMTEgKzAsMCBAQAotLlRIICJ0YWJsZV9pdGVyYXRvci5oIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfaXRlcmF0b3IuaCBcLSAKLS5TSCBTWU5PUFNJUwotLmJyCi0uUFAKLS5TUyAiRGF0YSBTdHJ1Y3R1cmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCIKLS5icgotLlJJICJcZklIb2xkcyBpdGVyYXRvciBpbmZvcm1hdGlvbiBjb250YWluaW5nIGZ1bmN0aW9ucyB3aGljaCBzaG91bGQgYmUgY2FsbGVkIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEgU05NUCBzcGVjaWZpYyBtYW5uZXIuIFxmUCIKLS5pbiAtMWMKLS5TUyAiRGVmaW5lcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQk5FVFNOTVBfSVRFUkFUT1JfRkxBR19TT1JURURcZlAgICAweDAxIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVEFCTEVfSVRFUkFUT1JfTkFNRVxmUCAgICd0YWJsZV9pdGVyYXRvciciCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiggXGZCTmV0c25tcF9GaXJzdF9EYXRhX1BvaW50XGZQICkodm9pZCAqKmxvb3BfY29udGV4dCwgdm9pZCAqKmRhdGFfY29udGV4dCwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqKCBcZkJOZXRzbm1wX05leHRfRGF0YV9Qb2ludFxmUCApKHZvaWQgKipsb29wX2NvbnRleHQsIHZvaWQgKipkYXRhX2NvbnRleHQsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqLCBzdHJ1Y3QgXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvX3NcZlAgKikiCi0uYnIKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkICooIFxmQk5ldHNubXBfTWFrZV9EYXRhX0NvbnRleHRcZlAgKSh2b2lkICpsb29wX2NvbnRleHQsIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQoIFxmQk5ldHNubXBfRnJlZV9Mb29wX0NvbnRleHRcZlAgKSh2b2lkICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHZvaWQoIFxmQk5ldHNubXBfRnJlZV9EYXRhX0NvbnRleHRcZlAgKSh2b2lkICosIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCAqKSIKLS5icgotLnRpIC0xYwotLlJJICJ0eXBlZGVmIHN0cnVjdCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9fc1xmUCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAiCi0uYnIKLS5SSSAiXGZJVHlwZWRlZnMgdGhlIFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb19zXGZQIHN0cnVjdCBpbnRvIG5ldHNubXBfaXRlcmF0b3JfaW5mby4gXGZQIgotLmluIC0xYwotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3RhYmxlX2l0ZXJhdG9yX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0uUkkgIlxmSXJldHVybnMgYSBuZXRzbm1wX21pYl9oYW5kbGVyIG9iamVjdCBmb3IgdGhlIHRhYmxlX2l0ZXJhdG9yIGhlbHBlciBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3RhYmxlX2l0ZXJhdG9yXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLlJJICJcZklDcmVhdGVzIGFuZCByZWdpc3RlcnMgYSB0YWJsZSBpdGVyYXRvciBoZWxwZXIgaGFuZGxlciBjYWxsaW5nIG5ldHNubXBfY3JlYXRlX2hhbmRsZXIgd2l0aCBhIGhhbmRsZXIgbmFtZSBzZXQgdG8gVEFCTEVfSVRFUkFUT1JfTkFNRSBhbmQgYWNjZXNzIG1ldGhvZCwgbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlci4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfaXRlcmF0b3JfZGVsZXRlX3RhYmxlXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkICogXGZCbmV0c25tcF9leHRyYWN0X2l0ZXJhdG9yX2NvbnRleHRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0KSIKLS5icgotLlJJICJcZklleHRyYWN0cyB0aGUgdGFibGVfaXRlcmF0b3Igc3BlY2lmaWMgZGF0YSBmcm9tIGEgcmVxdWVzdC4gXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfaW5zZXJ0X2l0ZXJhdG9yX2NvbnRleHRcZlAgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0LCB2b2lkICpkYXRhKSIKLS5icgotLlJJICJcZklpbnNlcnRzIHRhYmxlX2l0ZXJhdG9yIHNwZWNpZmljIGRhdGEgZm9yIGEgbmV3bHkgY3JlYXRlZCByb3cgaW50byBhIHJlcXVlc3QgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZmlyc3RcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8pIgotLmJyCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2l0ZXJhdG9yX3Jvd19nZXRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIHZvaWQgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X25leHRcZlAgKFxmQm5ldHNubXBfaXRlcmF0b3JfaW5mb1xmUCAqaWluZm8sIHZvaWQgKnJvdykiCi0uYnIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2dldF9ieWlkeFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfbmV4dF9ieWlkeFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfZ2V0X2J5b2lkXGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9pdGVyYXRvcl9yb3dfbmV4dF9ieW9pZFxmUCAoXGZCbmV0c25tcF9pdGVyYXRvcl9pbmZvXGZQICppaW5mbywgb2lkICppbnN0YW5jZSwgc2l6ZV90IGxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaXRlcmF0b3Jfcm93X2NvdW50XGZQIChcZkJuZXRzbm1wX2l0ZXJhdG9yX2luZm9cZlAgKmlpbmZvKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9Ob2RlX0hhbmRsZXIgXGZCbmV0c25tcF90YWJsZV9pdGVyYXRvcl9oZWxwZXJfaGFuZGxlclxmUCIKLS5icgotLmluIC0xYwotLlNIICJEZXRhaWxlZCBEZXNjcmlwdGlvbiIKLS5QUCAKLQotLlBQCi1EZWZpbml0aW9uIGluIGZpbGUgXGZCdGFibGVfaXRlcmF0b3IuaFxmUC4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zIGIvbWFuL25ldHNubXBfdGFibGVfbWFpbnRlbmFuY2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODQ0NjNhZi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90YWJsZV9tYWludGVuYW5jZS4zCisrKyAvZGV2L251bGwKQEAgLTEsMTE2ICswLDAgQEAKLS5USCAidGFibGVfbWFpbnRlbmFuY2UiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10YWJsZV9tYWludGVuYW5jZSBcLSAKLS5QUAotUm91dGluZXMgZm9yIG1haW50YWluaW5nIHRoZSBjb250ZW50cyBvZiBhIHRhYmxlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfY3JlYXRlX3RhYmxlXGZQIChjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZSBhIHN0cnVjdHVyZSB0byByZXByZXNlbnQgdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9nZW5lcmljX2RlbGV0ZV90YWJsZVxmUCAodm9pZCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSVJlbGVhc2UgdGhlIHN0cnVjdHVyZSByZXByZXNlbnRpbmcgYSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX2NyZWF0ZV9yb3dcZlAgKHZvaWQpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZSBhIG5ldyByb3cgc3RydWN0dXJlIHN1aXRhYmxlIGZvciB0aGlzIHN0eWxlIG9mIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfY2xvbmVfcm93XGZQICh2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZSBhIG5ldyBjb3B5IG9mIHRoZSBzcGVjaWZpZWQgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfY29weV9yb3dcZlAgKHZvaWQgKmRzdF9yb3csIHZvaWQgKnNyY19yb3cpIgotLmJyCi0uUkkgIlxmSUNvcHkgdGhlIGNvbnRlbnRzIG9mIG9uZSByb3cgaW50byBhbm90aGVyLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgXGZCbmV0c25tcF9nZW5lcmljX2RlbGV0ZV9yb3dcZlAgKHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJRGVsZXRlIGEgcm93IGRhdGEgc3RydWN0dXJlLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfYWRkX3Jvd1xmUCAodm9pZCAqdGFibGUsIHZvaWQgKnJvdykiCi0uYnIKLS5SSSAiXGZJQWRkIGEgcm93IHRvIHRoZSB0YWJsZS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9nZW5lcmljX3JlcGxhY2Vfcm93XGZQICh2b2lkICp0YWJsZSwgdm9pZCAqb2xkX3Jvdywgdm9pZCAqbmV3X3JvdykiCi0uYnIKLS5SSSAiXGZJUmVwbGFjZSBvbmUgcm93IHdpdGggYW5vdGhlciBpbiB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yZW1vdmVfcm93XGZQICh2b2lkICp0YWJsZSwgdm9pZCAqcm93KSIKLS5icgotLlJJICJcZklSZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX2dlbmVyaWNfcmVtb3ZlX2RlbGV0ZV9yb3dcZlAgKHZvaWQgKnRhYmxlLCB2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSVJlbW92ZSBhbmQgZGVsZXRlIGEgcm93IGZyb20gdGhlIHRhYmxlLiBcZlAiCi0uaW4gLTFjCi0uU0ggIkRldGFpbGVkIERlc2NyaXB0aW9uIgotLlBQIAotUm91dGluZXMgZm9yIG1haW50YWluaW5nIHRoZSBjb250ZW50cyBvZiBhIHRhYmxlLiAKLQotVGhpcyB3b3VsZCB0eXBpY2FsbHkgYmUgcGFydCBvZiBpbXBsZW1lbnRpbmcgYW4gU05NUCBNSUIsIGJ1dCBjb3VsZCBwb3RlbnRpYWxseSBhbHNvIGJlIHVzZWQgZm9yIGEgc3RhbmRhbG9uZSB0YWJsZS4KLS5QUAotVGhpcyBzZWN0aW9uIG9mIHRoZSBnZW5lcmljIEFQSSBpcyBwcmltYXJpbHkgcmVsZXZhbnQgdG8gdGFibGUgaGVscGVycyB3aGVyZSB0aGUgcmVwcmVzZW50YXRpb24gb2YgdGhlIHRhYmxlIGlzIGNvbnN0cnVjdGVkIGFuZCBtYWludGFpbmVkIHdpdGhpbiB0aGUgaGVscGVyIGl0c2VsZi4gJ0V4dGVybmFsJyB0YWJsZXMgd2lsbCB0eXBpY2FsbHkgbG9vayBhZnRlciBzdWNoIGFzcGVjdHMgZGlyZWN0bHksIGFsdGhvdWdoIHRoaXMgc2VjdGlvbiBvZiB0aGUgYWJzdHJhY3QgQVBJIGZyYW1ld29yayBjb3VsZCBhbHNvIGhlbHAgZGlyZWN0IHRoZSBkZXNpZ24gb2Ygc3VjaCB0YWJsZS1zcGVjaWZpYyBpbXBsZW1lbnRhdGlvbnMuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX2FkZF9yb3cgKHZvaWQgKiB0YWJsZSwgdm9pZCAqIHJvdykiCi0uUFAKLUFkZCBhIHJvdyB0byB0aGUgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTA0IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfY2xvbmVfcm93ICh2b2lkICogcm93KSIKLS5QUAotQ3JlYXRlIGEgbmV3IGNvcHkgb2YgdGhlIHNwZWNpZmllZCByb3cuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODIgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgImludCBuZXRzbm1wX2dlbmVyaWNfY29weV9yb3cgKHZvaWQgKiBkc3Rfcm93LCB2b2lkICogc3JjX3JvdykiCi0uUFAKLUNvcHkgdGhlIGNvbnRlbnRzIG9mIG9uZSByb3cgaW50byBhbm90aGVyLiBUaGUgZGVzdGluYXRpb24gcm93IHN0cnVjdHVyZSBzaG91bGQgYmUgY3JlYXRlZCBiZWZvcmUgdGhpcyByb3V0aW5lIGlzIGNhbGxlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5MCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX2NyZWF0ZV9yb3cgKHZvaWQpIgotLlBQCi1DcmVhdGUgYSBuZXcgcm93IHN0cnVjdHVyZSBzdWl0YWJsZSBmb3IgdGhpcyBzdHlsZSBvZiB0YWJsZS4gTm90ZSB0aGF0IHRoaXMgd291bGQgdHlwaWNhbGx5IGJlIGEgJ3N0YW5kYWxvbmUnIHJvdywgYW5kIHdvdWxkIG5vdCBhdXRvbWF0aWNhbGx5IGJlIGluc2VydGVkIGludG8gYW4gYWN0dWFsIHRhYmxlLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc2IG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfY3JlYXRlX3RhYmxlIChjb25zdCBjaGFyICogbmFtZSwgaW50IGZsYWdzKSIKLS5QUAotQ3JlYXRlIGEgc3RydWN0dXJlIHRvIHJlcHJlc2VudCB0aGUgdGFibGUuIFRoaXMgY291bGQgYmUgYXMgc2ltcGxlIGFzIHRoZSBoZWFkIG9mIGEgbGlua2VkIGxpc3QsIG9yIGEgbW9yZSBjb21wbGV4IGNvbnRhaW5lciBzdHJ1Y3R1cmUuIFRoZSAnbmFtZScgZmllbGQgd291bGQgdHlwaWNhbGx5IGJlIHVzZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiBzZXZlcmFsIHRhYmxlcyBpbXBsZW1lbnRlZCB1c2luZyB0aGUgc2FtZSB0YWJsZSBoZWxwZXIuIFRoZSAnZmxhZ3MnIGZpZWxkIHdvdWxkIGJlIHVzZWQgdG8gY29udHJvbCB2YXJpb3VzIChoZWxwZXItc3BlY2lmaWMpIGFzcGVjdHMgb2YgdGFibGUgYmVoYXZpb3VyLgotLlBQCi1UaGUgdGFibGUgc3RydWN0dXJlIHJldHVybmVkIHNob3VsZCB0eXBpY2FsbHkgYmUgcmVnYXJkZWQgYXMgYW4gb3BhcXVlLCBwcml2YXRlIHN0cnVjdHVyZS4gQWxsIG9wZXJhdGlvbnMgb24gdGhlIGNvbnRlbnQgb2YgdGhlIHRhYmxlIHNob3VsZCBpZGVhbGx5IHVzZSB0aGUgYXBwcm9wcmlhdGUgcm91dGluZXMgZnJvbSB0aGlzIEFQSS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA2MCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2dlbmVyaWNfZGVsZXRlX3JvdyAodm9pZCAqIHJvdykiCi0uUFAKLURlbGV0ZSBhIHJvdyBkYXRhIHN0cnVjdHVyZS4gVGhlIHJvdyBzaG91bGQgYmUgcmVtb3ZlZCBmcm9tIGFueSByZWxldmFudCB0YWJsZShzKSBiZWZvcmUgdGhpcyByb3V0aW5lIGlzIGNhbGxlZC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5OCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCBuZXRzbm1wX2dlbmVyaWNfZGVsZXRlX3RhYmxlICh2b2lkICogdGFibGUpIgotLlBQCi1SZWxlYXNlIHRoZSBzdHJ1Y3R1cmUgcmVwcmVzZW50aW5nIGEgdGFibGUuIEFueSByb3dzIHN0aWxsIGNvbnRhaW5lZCB3aXRoaW4gdGhlIHRhYmxlIHNob3VsZCBhbHNvIGJlIHJlbW92ZWQgYW5kIGRlbGV0ZWQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjggb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQgbmV0c25tcF9nZW5lcmljX3JlbW92ZV9kZWxldGVfcm93ICh2b2lkICogdGFibGUsIHZvaWQgKiByb3cpIgotLlBQCi1SZW1vdmUgYW5kIGRlbGV0ZSBhIHJvdyBmcm9tIHRoZSB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjcgb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yZW1vdmVfcm93ICh2b2lkICogdGFibGUsIHZvaWQgKiByb3cpIgotLlBQCi1SZW1vdmUgYSByb3cgZnJvbSB0aGUgdGFibGUuIFRoZSBkYXRhIHN0cnVjdHVyZSBmb3IgdGhlIHJvdyBzaG91bGQgbm90IGJlIHJlbGVhc2VkLCBhbmQgd291bGQgYmUgdGhlIHJldHVybiB2YWx1ZSBvZiB0aGlzIHJvdXRpbmUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTIxIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX3JlcGxhY2Vfcm93ICh2b2lkICogdGFibGUsIHZvaWQgKiBvbGRfcm93LCB2b2lkICogbmV3X3JvdykiCi0uUFAKLVJlcGxhY2Ugb25lIHJvdyB3aXRoIGFub3RoZXIgaW4gdGhlIHRhYmxlLiBUaGlzIHdpbGwgdHlwaWNhbGx5IChidXQgbm90IG5lY2Vzc2FyaWx5KSBpbnZvbHZlIHR3byByb3dzIHNoYXJpbmcgdGhlIHNhbWUgaW5kZXggaW5mb3JtYXRpb24gKGUuZy4gdG8gaW1wbGVtZW50IHVwZGF0ZS9yZXN0b3JlLXN0eWxlIFNFVCBiZWhhdmlvdXIpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDExMyBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90YWJsZV9yb3dzLjMgYi9tYW4vbmV0c25tcF90YWJsZV9yb3dzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNmMzdiMmQuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdGFibGVfcm93cy4zCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotLlRIICJ0YWJsZV9yb3dzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdGFibGVfcm93cyBcLSAKLS5QUAotUm91dGluZXMgZm9yIHdvcmtpbmcgd2l0aCB0aGUgcm93cyBvZiBhIHRhYmxlLiAgCi0KLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X2ZpcnN0XGZQICh2b2lkICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIGZpcnN0IHJvdyBvZiB0aGUgdGFibGUuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfZ2VuZXJpY19yb3dfZ2V0XGZQICh2b2lkICp0YWJsZSwgdm9pZCAqcm93KSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgZ2l2ZW4gcm93IGZyb20gdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X25leHRcZlAgKHZvaWQgKnRhYmxlLCB2b2lkICpyb3cpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSBmb2xsb3dpbmcgcm93IGZyb20gdGhlIHRhYmxlLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X2dldF9ieWlkeFxmUCAodm9pZCAqdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS5SSSAiXGZJUmV0cmlldmUgdGhlIHJvdyB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXggdmFsdWVzLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X25leHRfYnlpZHhcZlAgKHZvaWQgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0uUkkgIlxmSVJldHJpZXZlIHRoZSBuZXh0IHJvdyBhZnRlciB0aGUgc3BlY2lmaWVkIGluZGV4IHZhbHVlcy4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF9nZW5lcmljX3Jvd19nZXRfYnlvaWRcZlAgKHZvaWQgKnRhYmxlLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgcm93IHdpdGggdGhlIHNwZWNpZmllZCBpbnN0YW5jZSBPSURzLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X25leHRfYnlvaWRcZlAgKHZvaWQgKnRhYmxlLCBvaWQgKmluc3RhbmNlLCBzaXplX3QgbGVuKSIKLS5icgotLlJJICJcZklSZXRyaWV2ZSB0aGUgbmV4dCByb3cgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW5jZSBPSURzLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX2dlbmVyaWNfcm93X2NvdW50XGZQICh2b2lkICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJUmVwb3J0IHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGUuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1Sb3V0aW5lcyBmb3Igd29ya2luZyB3aXRoIHRoZSByb3dzIG9mIGEgdGFibGUuIAotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJpbnQgbmV0c25tcF9nZW5lcmljX3Jvd19jb3VudCAodm9pZCAqIHRhYmxlKSIKLS5QUAotUmVwb3J0IHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjgyIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X2ZpcnN0ICh2b2lkICogdGFibGUpIgotLlBQCi1SZXRyaWV2ZSB0aGUgZmlyc3Qgcm93IG9mIHRoZSB0YWJsZS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjggb2YgZmlsZSB0YWJsZV9nZW5lcmljLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfZ2VuZXJpY19yb3dfZ2V0ICh2b2lkICogdGFibGUsIHZvaWQgKiByb3cpIgotLlBQCi1SZXRyaWV2ZSB0aGUgZ2l2ZW4gcm93IGZyb20gdGhlIHRhYmxlLiBUaGlzIGNvdWxkIGVpdGhlciBiZSB0aGUgc2FtZSBkYXRhIHBvaW50ZXIsIHBhc3NlZCBpbiwgb3IgYSBzZXBhcmF0ZSByb3cgc3RydWN0dXJlIHNoYXJpbmcgdGhlIHNhbWUgaW5kZXggdmFsdWVzIChvciBOVUxMKS4KLS5QUAotVGhpcyByb3V0aW5lIGFsc28gcHJvdmlkZXMgYSBtZWFucyB0byB0ZWxsIHdoZXRoZXIgYSBnaXZlbiByb3cgaXMgcHJlc2VudCBpbiB0aGUgdGFibGUuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjQwIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X2dldF9ieWlkeCAodm9pZCAqIHRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAotUmV0cmlldmUgdGhlIHJvdyB3aXRoIHRoZSBzcGVjaWZpZWQgaW5kZXggdmFsdWVzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI1NSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19nZXRfYnlvaWQgKHZvaWQgKiB0YWJsZSwgb2lkICogaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLlBQCi1SZXRyaWV2ZSB0aGUgcm93IHdpdGggdGhlIHNwZWNpZmllZCBpbnN0YW5jZSBPSURzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3MCBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19uZXh0ICh2b2lkICogdGFibGUsIHZvaWQgKiByb3cpIgotLlBQCi1SZXRyaWV2ZSB0aGUgZm9sbG93aW5nIHJvdyBmcm9tIHRoZSB0YWJsZS4gSWYgdGhlIHNwZWNpZmllZCByb3cgaXMgbm90IHByZXNlbnQsIHRoaXMgcm91dGluZSBzaG91bGQgcmV0dXJuIHRoZSBlbnRyeSBuZXh0IGFmdGVyIHRoZSBwb3NpdGlvbiB0aGlzIHJvdyB3b3VsZCBoYXZlIG9jY3VwaWVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0OSBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TUyAidm9pZCogbmV0c25tcF9nZW5lcmljX3Jvd19uZXh0X2J5aWR4ICh2b2lkICogdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi1SZXRyaWV2ZSB0aGUgbmV4dCByb3cgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbmRleCB2YWx1ZXMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjYyIG9mIGZpbGUgdGFibGVfZ2VuZXJpYy5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX2dlbmVyaWNfcm93X25leHRfYnlvaWQgKHZvaWQgKiB0YWJsZSwgb2lkICogaW5zdGFuY2UsIHNpemVfdCBsZW4pIgotLlBQCi1SZXRyaWV2ZSB0aGUgbmV4dCByb3cgYWZ0ZXIgdGhlIHNwZWNpZmllZCBpbnN0YW5jZSBPSURzLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI3NiBvZiBmaWxlIHRhYmxlX2dlbmVyaWMuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90ZGF0YS4zIGIvbWFuL25ldHNubXBfdGRhdGEuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZiZDZhMi4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF90ZGF0YS4zCisrKyAvZGV2L251bGwKQEAgLTEsMjg3ICswLDAgQEAKLS5USCAidGRhdGEiIDMgIjI0IEp1biAyMDExIiAiVmVyc2lvbiA1LjQuMy5wcmUxIiAibmV0LXNubXAiIFwiIC0qLSBucm9mZiAtKi0KLS5hZCBsCi0ubmgKLS5TSCBOQU1FCi10ZGF0YSBcLSAKLS5QUAotSW1wbGVtZW50IGEgdGFibGUgd2l0aCBkYXRhbWF0dGVkIHN0b3JhZ2UuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJfbmV0c25tcF90ZGF0YV9nZW5lcmF0ZV9pbmRleF9vaWRcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX2NyZWF0ZV90YWJsZVxmUCAoY29uc3QgY2hhciAqbmFtZSwgbG9uZyBmbGFncykiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhbmQgcmV0dXJucyBhICd0ZGF0YScgdGFibGUgZGF0YSBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQm5ldHNubXBfdGRhdGFfZGVsZXRlX3RhYmxlXGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhbmQgcmV0dXJucyBhICd0ZGF0YScgdGFibGUgZGF0YSBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfY3JlYXRlX3Jvd1xmUCAodm9pZCkiCi0uYnIKLS5SSSAiXGZJY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IHJvdyBkYXRhIHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9jbG9uZV9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWNsb25lcyBhICd0ZGF0YScgcm93LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX2NvcHlfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqZHN0X3JvdywgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnNyY19yb3cpIgotLmJyCi0uUkkgIlxmSWNvcHkgdGhlIGNvbnRlbnRzIG9mIGEgJ3RkYXRhJyByb3cuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCAqIFxmQm5ldHNubXBfdGRhdGFfZGVsZXRlX3Jvd1xmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJZGVsZXRlcyB0aGUgbWVtb3J5IHVzZWQgYnkgdGhlIHNwZWNpZmllZCByb3cgcmV0dXJucyB0aGUgdGFibGUtc3BlY2lmaWMgZW50cnkgZGF0YSAodGhhdCBpdCBkb2Vzbid0IGtub3cgaG93IHRvIGRlbGV0ZSkgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9hZGRfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJQWRkcyBhIHJvdyB0byB0aGUgZ2l2ZW4gdGFibGUgKHN0b3JlZCBpbiBwcm9wZXIgbGV4b2dyYXBoaWNhbCBvcmRlcikuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJuZXRzbm1wX3RkYXRhX3JlcGxhY2Vfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKm9yaWdyb3csIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpuZXdyb3cpIgotLmJyCi0uUkkgIlxmSXN3YXBzIG91dCBvcmlncm93IHdpdGggbmV3cm93LiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yZW1vdmVfcm93XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmVtb3ZlcyBhIHJvdyBmcm9tIHRoZSBnaXZlbiB0YWJsZSBhbmQgcmV0dXJucyBpdCAobm8gZnJlZSdzIGNhbGxlZCkgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3dcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklyZW1vdmVzIGFuZCBmcmVlcyBhIHJvdyBvZiB0aGUgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgdGhlIHRhYmxlLXNwZWNpZmljIGVudHJ5IGRhdGEgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfdGRhdGFfaGFuZGxlclxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUpIgotLmJyCi0uUkkgIlxmSUNyZWF0ZXMgYSB0ZGF0YSBoYW5kbGVyIGFuZCByZXR1cm5zIGl0LiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJfbmV0c25tcF90ZGF0YV9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfcmVnaXN0ZXJcZlAgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RhYmxlX3JlZ2lzdHJhdGlvbl9pbmZvXGZQICp0YWJsZV9pbmZvKSIKLS5icgotLlJJICJcZklyZWdpc3RlcnMgYSB0ZGF0YS1iYXNlZCBNSUIgdGFibGUgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhXGZQICogXGZCbmV0c25tcF90ZGF0YV9leHRyYWN0X3RhYmxlXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHRkYXRhIHRhYmxlIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9jb250YWluZXJcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX2V4dHJhY3RfY29udGFpbmVyXGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlIHRkYXRhIGNvbnRhaW5lciBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9leHRyYWN0X3Jvd1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QpIgotLmJyCi0uUkkgIlxmSWV4dHJhY3RzIHRoZSB0ZGF0YSByb3cgYmVpbmcgYWNjZXNzZWQgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkICogXGZCbmV0c25tcF90ZGF0YV9leHRyYWN0X2VudHJ5XGZQIChcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdCkiCi0uYnIKLS5SSSAiXGZJZXh0cmFjdHMgdGhlICh0YWJsZS1zcGVjaWZpYykgZW50cnkgYmVpbmcgYWNjZXNzZWQgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgXGZQIgotLnRpIC0xYwotLlJJICJORVRTTk1QX0lOTElORSB2b2lkIFxmQm5ldHNubXBfaW5zZXJ0X3RkYXRhX3Jvd1xmUCAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3QsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSWluc2VydHMgYSBuZXdseSBjcmVhdGVkIHRkYXRhIHJvdyBpbnRvIGEgcmVxdWVzdCBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19lbnRyeVxmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdykiCi0uYnIKLS5SSSAiXGZJcmV0dXJucyB0aGUgKHRhYmxlLXNwZWNpZmljKSBlbnRyeSBkYXRhIGZvciBhIGdpdmVuIHJvdyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfZmlyc3RcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlKSIKLS5icgotLlJJICJcZklyZXR1cm5zIHRoZSBmaXJzdCByb3cgaW4gdGhlIHRhYmxlIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19nZXRcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqcm93KSIKLS5icgotLlJJICJcZklmaW5kcyBhIHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiBhbm90aGVyIHJvdyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfbmV4dFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3cpIgotLmJyCi0uUkkgIlxmSXJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfZ2V0X2J5aWR4XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSwgXGZCbmV0c25tcF92YXJpYWJsZV9saXN0XGZQICppbmRleGVzKSIKLS5icgotLlJJICJcZklmaW5kcyBhIHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggdmFsdWVzIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBcZkJuZXRzbm1wX3RkYXRhX3Jvd19nZXRfYnlvaWRcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBvaWQgKnNlYXJjaGZvciwgc2l6ZV90IHNlYXJjaGZvcl9sZW4pIgotLmJyCi0uUkkgIlxmSWZpbmRzIGEgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCBPSUQgXGZQIgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIFxmQm5ldHNubXBfdGRhdGFfcm93X25leHRfYnlpZHhcZlAgKFxmQm5ldHNubXBfdGRhdGFcZlAgKnRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKmluZGV4ZXMpIgotLmJyCi0uUkkgIlxmSWZpbmRzIHRoZSBsZXhpY2FsbHkgbmV4dCByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IHZhbHVlcyBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogXGZCbmV0c25tcF90ZGF0YV9yb3dfbmV4dF9ieW9pZFxmUCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqdGFibGUsIG9pZCAqc2VhcmNoZm9yLCBzaXplX3Qgc2VhcmNoZm9yX2xlbikiCi0uYnIKLS5SSSAiXGZJZmluZHMgdGhlIGxleGljYWxseSBuZXh0IHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggT0lEIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfcm93X2NvdW50XGZQIChcZkJuZXRzbm1wX3RkYXRhXGZQICp0YWJsZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfY29tcGFyZV9pZHhcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS5SSSAiXGZJY29tcGFyZSBhIHJvdyB3aXRoIHRoZSBnaXZlbiBpbmRleCB2YWx1ZXMgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF90ZGF0YV9jb21wYXJlX29pZFxmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdywgb2lkICpjb21wYXJldG8sIHNpemVfdCBjb21wYXJldG9fbGVuKSIKLS5icgotLlJJICJcZkljb21wYXJlIGEgcm93IHdpdGggdGhlIGdpdmVuIGluZGV4IE9JRCBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3RkYXRhX2NvbXBhcmVfc3VidHJlZV9pZHhcZlAgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICpyb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqaW5kZXhlcykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfdGRhdGFfY29tcGFyZV9zdWJ0cmVlX29pZFxmUCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKnJvdywgb2lkICpjb21wYXJldG8sIHNpemVfdCBjb21wYXJldG9fbGVuKSIKLS5icgotLmluIC0xYwotLlNTICJWYXJpYWJsZXMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiTmV0c25tcF9Ob2RlX0hhbmRsZXIgXGZCX25ldHNubXBfdGRhdGFfaGVscGVyX2hhbmRsZXJcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1JbXBsZW1lbnQgYSB0YWJsZSB3aXRoIGRhdGFtYXR0ZWQgc3RvcmFnZS4gCi0KLVRoaXMgaGVscGVyIGhlbHBzIHlvdSBpbXBsZW1lbnQgYSB0YWJsZSB3aGVyZSBhbGwgdGhlIHJvd3MgYXJlIGV4cGVjdGVkIHRvIGJlIHN0b3JlZCB3aXRoaW4gdGhlIGFnZW50IGl0c2VsZiBhbmQgbm90IGluIHNvbWUgZXh0ZXJuYWwgc3RvcmFnZSBsb2NhdGlvbi4gSXQgY2FuIGJlIHVzZWQgdG8gc3RvcmUgYSBsaXN0IG9mIHJvd3MsIHdoZXJlIGEgcm93IGNvbnNpc3RzIG9mIHRoZSBpbmRleGVzIHRvIHRoZSB0YWJsZSBhbmQgYSBnZW5lcmljIGRhdGEgcG9pbnRlci4gWW91IGNhbiB0aGVuIGltcGxlbWVudCBhIHN1YmhhbmRsZXIgd2hpY2ggaXMgcGFzc2VkIHRoZSBleGFjdCByb3cgZGVmaW5pdGlvbiBhbmQgZGF0YSBpdCBtdXN0IHJldHVybiBkYXRhIGZvciBvciBhY2NlcHQgZGF0YSBmb3IuIENvbXBsZXggR0VUTkVYVCBoYW5kbGluZyBpcyBncmVhdGx5IHNpbXBsaWZpZWQgaW4gdGhpcyBjYXNlLiAKLS5TSCAiRnVuY3Rpb24gRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCogbmV0c25tcF9nZXRfdGRhdGFfaGFuZGxlciAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlKSIKLS5QUAotQ3JlYXRlcyBhIHRkYXRhIGhhbmRsZXIgYW5kIHJldHVybnMgaXQuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjg0IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiTkVUU05NUF9JTkxJTkUgdm9pZCBuZXRzbm1wX2luc2VydF90ZGF0YV9yb3cgKFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICogcmVxdWVzdCwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1pbnNlcnRzIGEgbmV3bHkgY3JlYXRlZCB0ZGF0YSByb3cgaW50byBhIHJlcXVlc3QgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzOTkgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF90ZGF0YV9hZGRfcm93IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogcm93KSIKLS5QUAotQWRkcyBhIHJvdyB0byB0aGUgZ2l2ZW4gdGFibGUgKHN0b3JlZCBpbiBwcm9wZXIgbGV4b2dyYXBoaWNhbCBvcmRlcikuIHJldHVybnMgU05NUEVSUl9TVUNDRVNTIG9uIHN1Y2Nlc3NmdWwgYWRkaXRpb24uIG9yIFNOTVBFUlJfR0VORVJSIG9uIGZhaWx1cmUgKEUuRy4sIGluZGV4ZXMgYWxyZWFkeSBleGlzdGVkKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE4NiBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX2Nsb25lX3JvdyAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1jbG9uZXMgYSAndGRhdGEnIHJvdy4gRE9FUyBOT1QgQ0xPTkUgVEhFIFRBQkxFLVNQRUNJRklDIEVOVFJZIERBVEEuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgOTIgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJpbnQgbmV0c25tcF90ZGF0YV9jb21wYXJlX2lkeCAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3csIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi1jb21wYXJlIGEgcm93IHdpdGggdGhlIGdpdmVuIGluZGV4IHZhbHVlcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUxOCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgImludCBuZXRzbm1wX3RkYXRhX2NvbXBhcmVfb2lkIChcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdywgb2lkICogY29tcGFyZXRvLCBzaXplX3QgY29tcGFyZXRvX2xlbikiCi0uUFAKLWNvbXBhcmUgYSByb3cgd2l0aCB0aGUgZ2l2ZW4gaW5kZXggT0lEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTMxIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfdGRhdGFfY29weV9yb3cgKFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogZHN0X3JvdywgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiBzcmNfcm93KSIKLS5QUAotY29weSB0aGUgY29udGVudHMgb2YgYSAndGRhdGEnIHJvdy4gRE9FUyBOT1QgQ09QWSBUSEUgVEFCTEUtU1BFQ0lGSUMgRU5UUlkgREFUQS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMjkgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9jcmVhdGVfcm93ICh2b2lkKSIKLS5QUAotY3JlYXRlcyBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gbmV3IHJvdyBkYXRhIHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg0IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YVxmUCogbmV0c25tcF90ZGF0YV9jcmVhdGVfdGFibGUgKGNvbnN0IGNoYXIgKiBuYW1lLCBsb25nIGZsYWdzKSIKLS5QUAotY3JlYXRlcyBhbmQgcmV0dXJucyBhICd0ZGF0YScgdGFibGUgZGF0YSBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfdGRhdGFfZGVsZXRlX3JvdyAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1kZWxldGVzIHRoZSBtZW1vcnkgdXNlZCBieSB0aGUgc3BlY2lmaWVkIHJvdyByZXR1cm5zIHRoZSB0YWJsZS1zcGVjaWZpYyBlbnRyeSBkYXRhICh0aGF0IGl0IGRvZXNuJ3Qga25vdyBob3cgdG8gZGVsZXRlKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1NyBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgInZvaWQgbmV0c25tcF90ZGF0YV9kZWxldGVfdGFibGUgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSkiCi0uUFAKLWNyZWF0ZXMgYW5kIHJldHVybnMgYSAndGRhdGEnIHRhYmxlIGRhdGEgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNjggb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX2NvbnRhaW5lclxmUCogbmV0c25tcF90ZGF0YV9leHRyYWN0X2NvbnRhaW5lciAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIHRkYXRhIGNvbnRhaW5lciBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3MCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgInZvaWQqIG5ldHNubXBfdGRhdGFfZXh0cmFjdF9lbnRyeSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlICh0YWJsZS1zcGVjaWZpYykgZW50cnkgYmVpbmcgYWNjZXNzZWQgZnJvbSB0aGUgcmVxdWVzdCBzdHJ1Y3R1cmUgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAzODcgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9leHRyYWN0X3JvdyAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIHRkYXRhIHJvdyBiZWluZyBhY2Nlc3NlZCBmcm9tIHRoZSByZXF1ZXN0IHN0cnVjdHVyZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDM3OSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFcZlAqIG5ldHNubXBfdGRhdGFfZXh0cmFjdF90YWJsZSAoXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKiByZXF1ZXN0KSIKLS5QUAotZXh0cmFjdHMgdGhlIHRkYXRhIHRhYmxlIGZyb20gdGhlIHJlcXVlc3Qgc3RydWN0dXJlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzYyIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiaW50IG5ldHNubXBfdGRhdGFfcmVnaXN0ZXIgKFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKiByZWdpbmZvLCBcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdGFibGVfcmVnaXN0cmF0aW9uX2luZm9cZlAgKiB0YWJsZV9pbmZvKSIKLS5QUAotcmVnaXN0ZXJzIGEgdGRhdGEtYmFzZWQgTUlCIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzUxIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAidm9pZCogbmV0c25tcF90ZGF0YV9yZW1vdmVfYW5kX2RlbGV0ZV9yb3cgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZW1vdmVzIGFuZCBmcmVlcyBhIHJvdyBvZiB0aGUgZ2l2ZW4gdGFibGUgYW5kIHJldHVybnMgdGhlIHRhYmxlLXNwZWNpZmljIGVudHJ5IGRhdGEgcmV0dXJucyB0aGUgdm9pZCAqIHBvaW50ZXIgb24gc3VjY2Vzc2Z1bCBkZWxldGlvbi4gb3IgTlVMTCBvbiBmYWlsdXJlIChiYWQgYXJndW1lbnRzKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI2MCBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3JlbW92ZV9yb3cgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZW1vdmVzIGEgcm93IGZyb20gdGhlIGdpdmVuIHRhYmxlIGFuZCByZXR1cm5zIGl0IChubyBmcmVlJ3MgY2FsbGVkKSByZXR1cm5zIHRoZSByb3cgcG9pbnRlciBpdHNlbGYgb24gc3VjY2Vzc2Z1bCByZW1vdmluZy4gb3IgTlVMTCBvbiBmYWlsdXJlIChiYWQgYXJndW1lbnRzKSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDI0MiBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgInZvaWQgbmV0c25tcF90ZGF0YV9yZXBsYWNlX3JvdyAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIG9yaWdyb3csIFxmQm5ldHNubXBfdGRhdGFfcm93XGZQICogbmV3cm93KSIKLS5QUAotc3dhcHMgb3V0IG9yaWdyb3cgd2l0aCBuZXdyb3cuIFRoaXMgZG9lcyAqbm90KiBkZWxldGUvZnJlZSBhbnl0aGluZyEgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyMjcgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJ2b2lkKiBuZXRzbm1wX3RkYXRhX3Jvd19lbnRyeSAoXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAgKiByb3cpIgotLlBQCi1yZXR1cm5zIHRoZSAodGFibGUtc3BlY2lmaWMpIGVudHJ5IGRhdGEgZm9yIGEgZ2l2ZW4gcm93IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDE0IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X2ZpcnN0IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUpIgotLlBQCi1yZXR1cm5zIHRoZSBmaXJzdCByb3cgaW4gdGhlIHRhYmxlIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDI0IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X2dldCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLWZpbmRzIGEgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIGFub3RoZXIgcm93IAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDMxIG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TUyAiXGZCbmV0c25tcF90ZGF0YV9yb3dcZlAqIG5ldHNubXBfdGRhdGFfcm93X2dldF9ieWlkeCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3ZhcmlhYmxlX2xpc3RcZlAgKiBpbmRleGVzKSIKLS5QUAotZmluZHMgYSByb3cgaW4gdGhlICd0ZGF0YScgdGFibGUgZ2l2ZW4gdGhlIGluZGV4IHZhbHVlcyAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQ0NyBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19nZXRfYnlvaWQgKFxmQm5ldHNubXBfdGRhdGFcZlAgKiB0YWJsZSwgb2lkICogc2VhcmNoZm9yLCBzaXplX3Qgc2VhcmNoZm9yX2xlbikiCi0uUFAKLWZpbmRzIGEgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCBPSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NjAgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfbmV4dCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCAqIHJvdykiCi0uUFAKLXJldHVybnMgdGhlIG5leHQgcm93IGluIHRoZSB0YWJsZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDQzOSBvZiBmaWxlIHRhYmxlX3RkYXRhLmMuCi0uU1MgIlxmQm5ldHNubXBfdGRhdGFfcm93XGZQKiBuZXRzbm1wX3RkYXRhX3Jvd19uZXh0X2J5aWR4IChcZkJuZXRzbm1wX3RkYXRhXGZQICogdGFibGUsIFxmQm5ldHNubXBfdmFyaWFibGVfbGlzdFxmUCAqIGluZGV4ZXMpIgotLlBQCi1maW5kcyB0aGUgbGV4aWNhbGx5IG5leHQgcm93IGluIHRoZSAndGRhdGEnIHRhYmxlIGdpdmVuIHRoZSBpbmRleCB2YWx1ZXMgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA0NzUgb2YgZmlsZSB0YWJsZV90ZGF0YS5jLgotLlNTICJcZkJuZXRzbm1wX3RkYXRhX3Jvd1xmUCogbmV0c25tcF90ZGF0YV9yb3dfbmV4dF9ieW9pZCAoXGZCbmV0c25tcF90ZGF0YVxmUCAqIHRhYmxlLCBvaWQgKiBzZWFyY2hmb3IsIHNpemVfdCBzZWFyY2hmb3JfbGVuKSIKLS5QUAotZmluZHMgdGhlIGxleGljYWxseSBuZXh0IHJvdyBpbiB0aGUgJ3RkYXRhJyB0YWJsZSBnaXZlbiB0aGUgaW5kZXggT0lEIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDg5IG9mIGZpbGUgdGFibGVfdGRhdGEuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZiBiL21hbi9uZXRzbm1wX3RyYXBfYXBpLjMuZGVmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyNGViNmQKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vbmV0c25tcF90cmFwX2FwaS4zLmRlZgpAQCAtMCwwICsxLDU4IEBACisuVEggTkVUU05NUF9UUkFQX0FQSSAzICIxMyBBdWcgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCitzZW5kX2Vhc3lfdHJhcCwKK3NlbmRfdHJhcF92YXJzLAorc2VuZF92MnRyYXAgLSBzZW5kIFRSQVBzIG9yIElORk9STXMgZnJvbSBhIE5ldC1TTk1QIE1JQiBtb2R1bGUKKy5TSCBTWU5PUFNJUworLkIgI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KKy5QUAorLkJJICJ2b2lkIHNlbmRfZWFzeV90cmFwKGludCAiIHRyYXAgIiwgaW50ICIgc3BlY2lmaWMgIik7IgorLlBQCisuQkkgInZvaWQgc2VuZF90cmFwX3ZhcnMoaW50ICIgdHJhcCAiLCBpbnQgIiBzcGVjaWZpYyAiLCBzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqIiB2YXJzICIpOyIKKy5QUAorLkJJICJ2b2lkIHNlbmRfdjJ0cmFwKHN0cnVjdCB2YXJpYWJsZV9saXN0ICoiIHZhcnMgIik7IgorLlNIIERFU0NSSVBUSU9OCitUaGVzZSB0aHJlZSByb3V0aW5lcyBtYXkgYmUgdXNlZCB0byBzZW5kIHRyYXBzIGZyb20gYSBNSUIgbW9kdWxlCit3aXRoaW4gdGhlIE5ldC1TTk1QIGFnZW50IChpbmNsdWRpbmcgYW4gQWdlbnRYIHN1YmFnZW50KS4KKy5QUAorLkIgc2VuZF9lYXN5X3RyYXAoKQorc2VuZHMgYW4gU05NUHYxIHRyYXAgKG9yIHRoZSBTTk1QdjIgZXF1aXZhbGVudCkgdG8gdGhlIGxpc3Qgb2YKK2NvbmZpZ3VyZWQgdHJhcCBkZXN0aW5hdGlvbnMgKG9yICJzaW5rcyIpLCB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzCitmb3IgdGhlIGdlbmVyaWMgdHJhcCB0eXBlLCBhbmQgc3BlY2lmaWMgdHJhcCB2YWx1ZS4KKy5QUAorLkIgc2VuZF90cmFwX3ZhcnMoKQoraXMgc2ltaWxhciwgYnV0IGFwcGVuZHMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgdmFyaWFibGUgYmluZGluZ3MgdG8gdGhlCit0cmFwcyB0aGF0IGFyZSBzZW50LgorLlBQCisuQiBzZW5kX3YydHJhcCgpCit1c2VzIHRoZSBzdXBwbGllZCBsaXN0IG9mIHZhcmlhYmxlIGJpbmRpbmdzIHRvIGZvcm0gYW4gU05NUHYyIHRyYXAsCit3aGljaCBpcyBzZW50IHRvIFNOTVB2Mi1jYXBhYmxlIHNpbmtzIG9uIHRoZSBjb25maWd1cmVkIGxpc3QuICBBbgorZXF1aXZhbGVudCBJTkZPUk0gaXMgc2VudCB0byB0aGUgY29uZmlndXJlZHEgbGlzdCBvZiBpbmZvcm0gc2lua3MuCitTaW5rcyB0aGF0IGNhbiBvbmx5IGhhbmRsZSBTTk1QdjEgdHJhcHMgYXJlIHNraXBwZWQuCisuUFAKK1RoZSB2YXJpb3VzICJzZW5kX3RyYXAoKSIgY2FsbHMgYWxsb3cgeW91IHRvIHNwZWNpZnkgdHJhcHMgaW4gZGlmZmVyZW50Citmb3JtYXRzLiAgQW5kIHRoZSB2YXJpb3VzICJ0cmFwc2luayIgZGlyZWN0aXZlcyBhbGxvdyB5b3UgdG8gc3BlY2lmeQorZGVzdGluYXRpb25zIHRvIHJlY2VpdmUgZGlmZmVyZW50IGZvcm1hdHMuCitCdXQgKmFsbCogdHJhcHMgYXJlIHNlbnQgdG8gKmFsbCogZGVzdGluYXRpb25zLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5Cit3ZXJlIHNwZWNpZmllZC4KKy5uZgorSS5lLiBpdCdzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fXyAgdHJhcHNpbmsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCisgICAgc2VuZF9lYXN5X3RyYXAgXF9fXyAgWyAgVHJhcCAgICAgIF0gX19fXyAgdHJhcDJzaW5rCisgICAgICAgICAgICAgICAgICAgIF9fXyAgWyBHZW5lcmF0b3IgIF0KKyAgICBzZW5kX3YydHJhcCAgICAvICAgICBbICAgICAgICAgICAgXSAtLS0tLSBpbmZvcm1zaW5rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX18KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwc2VzcworCisqTm90KgorICAgICBzZW5kX2Vhc3lfdHJhcCAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIHRyYXBzaW5rCisgICAgIHNlbmRfdjJ0cmFwICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgdHJhcDJzaW5rCisgICAgID8/Pz8gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgaW5mb3Jtc2luaworICAgICA/Pz8/ICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIHRyYXBzZXNzCisuZmkKKy5TSCBXQVJOSU5HUworVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gc2VuZCB0aGUgdHJhcHMgaW1tZWRpYXRlbHkgdGhleSBhcmUgY2FsbGVkLgorSW52b2tpbmcgdGhlbSBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSBpcyBsZWZ0IHRvIHRoZSBNSUIgbW9kdWxlIHByb2dyYW1tZXIuCisuU0ggIlNFRSBBTFNPIgorLkJSIHNubXBkLmNvbmYgIig1KSwgIiBzbm1wdHJhcGQgIig4KSIKZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3V0aWwuMyBiL21hbi9uZXRzbm1wX3V0aWwuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzA0NmQ5MC4uMDAwMDAwMAotLS0gYS9tYW4vbmV0c25tcF91dGlsLjMKKysrIC9kZXYvbnVsbApAQCAtMSw1MDMgKzAsMCBAQAotLlRIICJNZW1vcnkgVXRpbGl0eSBSb3V0aW5lcyIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLU1lbW9yeSBVdGlsaXR5IFJvdXRpbmVzIFwtIAotLlNTICJEZWZpbmVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhQQVRIXGZQICAgUEFUSF9NQVgiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWEJVRlxmUCAgICgxMDI0ICogNCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWEJVRl9NRURJVU1cZlAgICAxMDI0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQVhCVUZfU01BTExcZlAgICA1MTIiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWEJVRl9NRVNTQUdFXGZQICAgMTUwMCIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYT0lEXGZQICAgNjQiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BWF9DTURMSU5FX09JRFNcZlAgICAxMjgiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0ZJTEVNT0RFX0NMT1NFRFxmUCAgIDA2MDAiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX0ZJTEVNT0RFX09QRU5cZlAgICAwNjQ0IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCQllURVNJWkVcZlAoYml0c2l6ZSkgICAoKGJpdHNpemUgKyA3KSA+PiAzKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlJPVU5EVVA4XGZQKHgpICAgKCAoICh4KzcpID4+IDMgKSAqIDggKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfU1RST1JOVUxMXGZQKHgpICAgKCB4ID8geCA6ICcobnVsbCknKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfRlJFRVxmUChzKSAgIGRvIHsgaWYgKHMpIHsgZnJlZSgodm9pZCAqKXMpOyBzPU5VTEw7IH0gfSB3aGlsZSgwKSIKLS5icgotLlJJICJcZklGcmVlcyBhIHBvaW50ZXIgb25seSBpZiBpdCBpcyAhTlVMTCBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gTlVMTC4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfU1dJUEVfTUVNXGZQKG4sIHMpICAgZG8geyBpZiAobikgZnJlZSgodm9pZCAqKW4pOyBuID0gczsgcz1OVUxMOyB9IHdoaWxlKDApIgotLmJyCi0uUkkgIlxmSUZyZWVzIHBvaW50ZXIgbiBvbmx5IGlmIGl0IGlzICFOVUxMLCBzZXRzIG4gdG8gcyBhbmQgc2V0cyBzIHRvIE5VTEwuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01BTExPQ19TVFJVQ1RcZlAocykgICAoc3RydWN0IHMgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgcykpIgotLmJyCi0uUkkgIlxmSU1hbGxvY3MgbWVtb3J5IG9mIHNpemVvZihzdHJ1Y3QgcyksIHplcm9zIGl0IGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFMTE9DX1RZUEVERUZcZlAodGQpICAgKHRkICopIGNhbGxvYygxLCBzaXplb2YodGQpKSIKLS5icgotLlJJICJcZklNYWxsb2NzIG1lbW9yeSBvZiBzaXplb2YodCksIHplcm9zIGl0IGFuZCByZXR1cm5zIGEgcG9pbnRlciB0byBpdC4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfWkVST1xmUChzLCBsKSAgIGRvIHsgaWYgKHMpIG1lbXNldChzLCAwLCBsKTsgfSB3aGlsZSgwKSIKLS5icgotLlJJICJcZklaZXJvcyBsIGJ5dGVzIG9mIG1lbW9yeSBzdGFydGluZyBhdCBzLiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVE9VUFBFUlxmUChjKSAgIChjID49ICdhJyAmJiBjIDw9ICd6JyA/IGMgLSAoJ2EnIC0gJ0EnKSA6IGMpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCVE9MT1dFUlxmUChjKSAgIChjID49ICdBJyAmJiBjIDw9ICdaJyA/IGMgKyAoJ2EnIC0gJ0EnKSA6IGMpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSEVYMlZBTFxmUChzKSAgICgoaXNhbHBoYShzKSA/IChUT0xPV0VSKHMpLSdhJysxMCkgOiAoVE9MT1dFUihzKS0nMCcpKSAmIDB4ZikiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJWQUwySEVYXGZQKHMpICAgKCAocykgKyAoKChzKSA+PSAxMCkgPyAoJ2EnLTEwKSA6ICcwJykgKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFYXGZQKGEsIGIpICAgKChhKSA+IChiKSA/IChhKSA6IChiKSkiCi0uYnIKLS5SSSAiXGZJQ29tcHV0ZXJzIHRoZSBtYXhpbXVtIG9mIGEgYW5kIGIuIFxmUCIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJTTk1QX01JTlxmUChhLCBiKSAgICgoYSkgPiAoYikgPyAoYikgOiAoYSkpIgotLmJyCi0uUkkgIlxmSUNvbXB1dGVycyB0aGUgbWluaW11bSBvZiBhIGFuZCBiLiBcZlAiCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCU05NUF9NQUNST19WQUxfVE9fU1RSXGZQKHMpICAgU05NUF9NQUNST19WQUxfVE9fU1RSX1BSSVYocykiCi0uYnIKLS5SSSAiXGZJRXhwYW5kcyB0byBzdHJpbmcgd2l0aCB2YWx1ZSBvZiB0aGUgcy4gXGZQIgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlNOTVBfTUFDUk9fVkFMX1RPX1NUUl9QUklWXGZQKHMpICAgI3MiCi0uYnIKLS50aSAtMWMKLS5SSSAiI2RlZmluZSBcZkJRVUlURlVOXGZQKGUsIGwpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCRElGRlRJTUVWQUxcZlAobm93LCB0aGVuLCBkaWZmKSIKLS5icgotLnRpIC0xYwotLlJJICIjZGVmaW5lIFxmQlVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STVxmUCAgIDEwIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCSVNUUkFOU0ZPUk1cZlAodHR5cGUsIHRvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCRU5HSU5FVElNRV9NQVhcZlAgICAyMTQ3NDgzNjQ3IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCRU5HSU5FQk9PVF9NQVhcZlAgICAyMTQ3NDgzNjQ3IgotLmJyCi0udGkgLTFjCi0uUkkgIiNkZWZpbmUgXGZCc25tcF9jc3RyY2F0XGZQKGIsIGwsIG8sIGEsIHMpICAgc25tcF9zdHJjYXQoYixsLG8sYSwoY29uc3QgdV9jaGFyICopcykiCi0uYnIKLS5pbiAtMWMKLS5TUyAiVHlwZWRlZnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAidHlwZWRlZiB2b2lkICogXGZCbWFya2VyX3RcZlAiCi0uYnIKLS5pbiAtMWMKLS5TUyAiRnVuY3Rpb25zIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgImludCBcZkJzbm1wX3JlYWxsb2NcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuKSIKLS5icgotLlJJICJcZklUaGlzIGZ1bmN0aW9uIGluY3JlYXNlIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgcG9pbnRlZCBhdCBieSAqYnVmLCB3aGljaCBpcyBpbml0aWFsbHkgb2Ygc2l6ZSAqYnVmX2xlbi4gXGZQIgotLnRpIC0xYwotLlJJICJ2b2lkIFxmQmZyZWVfemVyb1xmUCAodm9pZCAqYnVmLCBzaXplX3Qgc2l6ZSkiCi0uYnIKLS5SSSAiXGZJemVyb3MgbWVtb3J5IGJlZm9yZSBmcmVlaW5nIGl0LiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQm1hbGxvY19yYW5kb21cZlAgKHNpemVfdCAqc2l6ZSkiCi0uYnIKLS5SSSAiXGZJUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYWVkICYgc2V0IGJ1ZmZlciBvbiBzdWNjZXNzLCBzaXplIGNvbnRhaW5zIG51bWJlciBvZiByYW5kb20gYnl0ZXMgZmlsbGVkLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfY2hhciAqIFxmQm1hbGxvY196ZXJvXGZQIChzaXplX3Qgc2l6ZSkiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm1lbWR1cFxmUCAodV9jaGFyICoqdG8sIGNvbnN0IHVfY2hhciAqZnJvbSwgc2l6ZV90IHNpemUpIgotLmJyCi0uUkkgIlxmSUR1cGxpY2F0ZXMgYSBtZW1vcnkgYmxvY2suIFxmUCIKLS50aSAtMWMKLS5SSSAidV9pbnQgXGZCYmluYXJ5X3RvX2hleFxmUCAoY29uc3QgdV9jaGFyICppbnB1dCwgc2l6ZV90IGxlbiwgY2hhciAqKm91dHB1dCkiCi0uYnIKLS5SSSAiXGZJY29udmVydHMgYmluYXJ5IHRvIGhleGlkZWNpbWFsIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfaGV4X3RvX2JpbmFyeVxmUCAodV9jaGFyICoqYnVmLCBzaXplX3QgKmJ1Zl9sZW4sIHNpemVfdCAqb2Zmc2V0LCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgY2hhciAqaGV4LCBjb25zdCBjaGFyICpkZWxpbSkiCi0uYnIKLS5SSSAiXGZJY29udmVydCBhbiBBU0NJSSBoZXggc3RyaW5nICh3aXRoIHNwZWNpZmllZCBkZWxpbWl0ZXJzKSB0byBiaW5hcnkgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9oZXhfdG9fYmluYXJ5XGZQICh1X2NoYXIgKipidWYsIHNpemVfdCAqYnVmX2xlbiwgc2l6ZV90ICpvZmZzZXQsIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBjaGFyICpoZXgpIgotLmJyCi0uUkkgIlxmSWNvbnZlcnQgYW4gQVNDSUkgaGV4IHN0cmluZyB0byBiaW5hcnkgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCaGV4X3RvX2JpbmFyeTJcZlAgKGNvbnN0IHVfY2hhciAqaW5wdXQsIHNpemVfdCBsZW4sIGNoYXIgKipvdXRwdXQpIgotLmJyCi0uUkkgIlxmSWhleF90b19iaW5hcnkyIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQnNubXBfZGVjaW1hbF90b19iaW5hcnlcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCBjaGFyICpkZWNpbWFsKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCc25tcF9zdHJjYXRcZlAgKHVfY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZfbGVuLCBzaXplX3QgKm91dF9sZW4sIGludCBhbGxvd19yZWFsbG9jLCBjb25zdCB1X2NoYXIgKnMpIgotLmJyCi0udGkgLTFjCi0uUkkgImNoYXIgKiBcZkJuZXRzbm1wX3N0cmR1cF9hbmRfbnVsbFxmUCAoY29uc3QgdV9jaGFyICpmcm9tLCBzaXplX3QgZnJvbV9sZW4pIgotLmJyCi0uUkkgIlxmSWNvcGllcyBhIChwb3NzaWJsZSkgdW50ZXJtaW5hdGVkIHN0cmluZyBvZiBhIGdpdmVuIGxlbmd0aCBpbnRvIGEgbmV3IGJ1ZmZlciBhbmQgbnVsbCB0ZXJtaW5hdGVzIGl0IGFzIHdlbGwgKG5ldyBidWZmZXIgTUFZIGJlIG9uZSBieXRlIGxvbmdlciB0byBhY2NvdW50IGZvciB0aGlzIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJkdW1wX2NodW5rXGZQIChjb25zdCBjaGFyICpkZWJ1Z3Rva2VuLCBjb25zdCBjaGFyICp0aXRsZSwgY29uc3QgdV9jaGFyICpidWYsIGludCBzaXplKSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCZHVtcF9zbm1wRW5naW5lSURcZlAgKGNvbnN0IHVfY2hhciAqYnVmLCBzaXplX3QgKmJ1ZmxlbikiCi0uYnIKLS50aSAtMWMKLS5SSSAibWFya2VyX3QgXGZCYXRpbWVfbmV3TWFya2VyXGZQICh2b2lkKSIKLS5icgotLlJJICJcZkljcmVhdGUgYSBuZXcgdGltZSBtYXJrZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAidm9pZCBcZkJhdGltZV9zZXRNYXJrZXJcZlAgKG1hcmtlcl90IHBtKSIKLS5icgotLlJJICJcZklzZXQgYSB0aW1lIG1hcmtlci4gXGZQIgotLnRpIC0xYwotLlJJICJsb25nIFxmQmF0aW1lX2RpZmZcZlAgKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpIgotLmJyCi0uUkkgIlxmSVJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIG1zZWMpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJ1YXRpbWVfZGlmZlxmUCAobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkiCi0uYnIKLS5SSSAiXGZJUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gdV9sb25nIG1zZWMpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgInVfbG9uZyBcZkJ1YXRpbWVfaGRpZmZcZlAgKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpIgotLmJyCi0uUkkgIlxmSVJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIHVfbG9uZyAxLzEwMHRoIHNlY3MpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzIChmdW5jdGlvbmFsbHkgdGhpcyBpcyB3aGF0IHN5c1VwVGltZSBuZWVkcykuIFxmUCIKLS50aSAtMWMKLS5SSSAiaW50IFxmQmF0aW1lX3JlYWR5XGZQIChtYXJrZXJfdCBwbSwgaW50IGRlbHRhVCkiCi0uYnIKLS5SSSAiXGZJVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgKGluIG1zZWMpID8gUmV0dXJucyAwIGlmIHRlc3QgZmFpbHMgb3IgY2Fubm90IGJlIHRlc3RlZCAobm8gbWFya2VyKS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCdWF0aW1lX3JlYWR5XGZQIChtYXJrZXJfdCBwbSwgdW5zaWduZWQgaW50IGRlbHRhVCkiCi0uYnIKLS5SSSAiXGZJVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgKGluIG1zZWMpID8gUmV0dXJucyAwIGlmIHRlc3QgZmFpbHMgb3IgY2Fubm90IGJlIHRlc3RlZCAobm8gbWFya2VyKS4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbWFya2VyX3R0aWNrc1xmUCAobWFya2VyX3QgcG0pIgotLmJyCi0uUkkgIlxmSVJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVUaWNrcyBzaW5jZSB0aGUgZ2l2ZW4gbWFya2VyLiBcZlAiCi0udGkgLTFjCi0uUkkgImludCBcZkJ0aW1ldmFsX3R0aWNrc1xmUCAoc3RydWN0IHRpbWV2YWwgKnR2KSIKLS5icgotLnRpIC0xYwotLlJJICJjaGFyICogXGZCbmV0c25tcF9nZXRlbnZcZlAgKGNvbnN0IGNoYXIgKm5hbWUpIgotLmJyCi0uUkkgIlxmSU5vbiBXaW5kb3dzOiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUCBvciBOVUxMIGlmIHRoZSBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUCBkb2VzIG5vdCBleGlzdC4gXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9hZGRyc3RyX2h0b25cZlAgKGNoYXIgKnB0ciwgc2l6ZV90IGxlbikiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGVmaW5lIERvY3VtZW50YXRpb24iCi0uUFAgCi0uU1MgIiNkZWZpbmUgRElGRlRJTUVWQUwobm93LCB0aGVuLCBkaWZmKSJcZkJWYWx1ZTpcZlAKLS5QUAotLm5mCi17ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgbm93LnR2X3NlYy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICBub3cudHZfdXNlYyArPSAxMDAwMDAwTDsgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGRpZmYudHZfc2VjICA9IG5vdy50dl9zZWMgIC0gdGhlbi50dl9zZWM7ICAgICAgIFwKLSAgICAgICAgZGlmZi50dl91c2VjID0gbm93LnR2X3VzZWMgLSB0aGVuLnR2X3VzZWM7ICAgICAgXAotICAgICAgICBpZiAoZGlmZi50dl91c2VjID4gMTAwMDAwMEwpeyAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgZGlmZi50dl91c2VjIC09IDEwMDAwMDBMOyAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBkaWZmLnR2X3NlYysrOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi19Ci0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEzMSBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgSVNUUkFOU0ZPUk0odHR5cGUsIHRvaWQpIlxmQlZhbHVlOlxmUAotLlBQCi0ubmYKLSFzbm1wX29pZF9jb21wYXJlKHR0eXBlLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHVzbSAjIyB0b2lkICMjIFByb3RvY29sLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0pCi0uZmkKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDE1MCBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgUVVJVEZVTihlLCBsKSJcZkJWYWx1ZTpcZlAKLS5QUAotLm5mCi1pZiAoIChlKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsgICBcCi0gICAgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfR0VORVJSOyAgXAotICAgICAgICAgICAgICAgIGdvdG8gbCA7ICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfQotLmZpCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAxMTggb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfRlJFRShzKSAgIGRvIHsgaWYgKHMpIHsgZnJlZSgodm9pZCAqKXMpOyBzPU5VTEw7IH0gfSB3aGlsZSgwKSIKLS5QUAotRnJlZXMgYSBwb2ludGVyIG9ubHkgaWYgaXQgaXMgIU5VTEwgYW5kIHNldHMgaXRzIHZhbHVlIHRvIE5VTEwuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTMgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfTUFDUk9fVkFMX1RPX1NUUihzKSAgIFNOTVBfTUFDUk9fVkFMX1RPX1NUUl9QUklWKHMpIgotLlBQCi1FeHBhbmRzIHRvIHN0cmluZyB3aXRoIHZhbHVlIG9mIHRoZSBzLiBJZiBzIGlzIG1hY3JvLCB0aGUgcmVzdWx0aW5nIHN0cmluZyBpcyB2YWx1ZSBvZiB0aGUgbWFjcm8uIEV4YW1wbGU6IGRlZmluZSBURVNUIDEyMzQgXGZCU05NUF9NQUNST19WQUxfVE9fU1RSKFRFU1QpXGZQIGV4cGFuZHMgdG8gJzEyMzQnIFNOTVBfTUFDUk9fVkFMX1RPX1NUUihURVNUKzEpIGV4cGFuZHMgdG8gJzEyMzQrMScgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA5OSBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9NQUxMT0NfU1RSVUNUKHMpICAgKHN0cnVjdCBzICopIGNhbGxvYygxLCBzaXplb2Yoc3RydWN0IHMpKSIKLS5QUAotTWFsbG9jcyBtZW1vcnkgb2Ygc2l6ZW9mKHN0cnVjdCBzKSwgemVyb3MgaXQgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY0IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX01BTExPQ19UWVBFREVGKHRkKSAgICh0ZCAqKSBjYWxsb2MoMSwgc2l6ZW9mKHRkKSkiCi0uUFAKLU1hbGxvY3MgbWVtb3J5IG9mIHNpemVvZih0KSwgemVyb3MgaXQgYW5kIHJldHVybnMgYSBwb2ludGVyIHRvIGl0LiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDY4IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX01BWChhLCBiKSAgICgoYSkgPiAoYikgPyAoYSkgOiAoYikpIgotLlBQCi1Db21wdXRlcnMgdGhlIG1heGltdW0gb2YgYSBhbmQgYi4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4NSBvZiBmaWxlIHRvb2xzLmguCi0uU1MgIiNkZWZpbmUgU05NUF9NSU4oYSwgYikgICAoKGEpID4gKGIpID8gKGIpIDogKGEpKSIKLS5QUAotQ29tcHV0ZXJzIHRoZSBtaW5pbXVtIG9mIGEgYW5kIGIuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODkgb2YgZmlsZSB0b29scy5oLgotLlNTICIjZGVmaW5lIFNOTVBfU1dJUEVfTUVNKG4sIHMpICAgZG8geyBpZiAobikgZnJlZSgodm9pZCAqKW4pOyBuID0gczsgcz1OVUxMOyB9IHdoaWxlKDApIgotLlBQCi1GcmVlcyBwb2ludGVyIG4gb25seSBpZiBpdCBpcyAhTlVMTCwgc2V0cyBuIHRvIHMgYW5kIHNldHMgcyB0byBOVUxMLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDU3IG9mIGZpbGUgdG9vbHMuaC4KLS5TUyAiI2RlZmluZSBTTk1QX1pFUk8ocywgbCkgICBkbyB7IGlmIChzKSBtZW1zZXQocywgMCwgbCk7IH0gd2hpbGUoMCkiCi0uUFAKLVplcm9zIGwgYnl0ZXMgb2YgbWVtb3J5IHN0YXJ0aW5nIGF0IHMuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNzIgb2YgZmlsZSB0b29scy5oLgotLlNIICJGdW5jdGlvbiBEb2N1bWVudGF0aW9uIgotLlBQIAotLlNTICJsb25nIGF0aW1lX2RpZmYgKG1hcmtlcl90IGZpcnN0LCBtYXJrZXJfdCBzZWNvbmQpIgotLlBQCi1SZXR1cm5zIHRoZSBkaWZmZXJlbmNlIChpbiBtc2VjKSBiZXR3ZWVuIHRoZSB0d28gbWFya2Vycy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA3OTggb2YgZmlsZSB0b29scy5jLgotLlNTICJtYXJrZXJfdCBhdGltZV9uZXdNYXJrZXIgKHZvaWQpIgotLlBQCi1jcmVhdGUgYSBuZXcgdGltZSBtYXJrZXIuIE5PVEU6IENhbGxlciBtdXN0IGZyZWUgdGltZSBtYXJrZXIgd2hlbiBubyBsb25nZXIgbmVlZGVkLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc3NCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCBhdGltZV9yZWFkeSAobWFya2VyX3QgcG0sIGludCBkZWx0YVQpIgotLlBQCi1UZXN0OiBIYXMgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpIGV4Y2VlZGVkIGN1cnJlbnQgdGltZSAoaW4gbXNlYykgPyBSZXR1cm5zIDAgaWYgdGVzdCBmYWlscyBvciBjYW5ub3QgYmUgdGVzdGVkIChubyBtYXJrZXIpLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDg1MyBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInZvaWQgYXRpbWVfc2V0TWFya2VyIChtYXJrZXJfdCBwbSkiCi0uUFAKLXNldCBhIHRpbWUgbWFya2VyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDc4NSBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInVfaW50IGJpbmFyeV90b19oZXggKGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuLCBjaGFyICoqIG91dHB1dCkiCi0uUFAKLWNvbnZlcnRzIGJpbmFyeSB0byBoZXhpZGVjaW1hbCBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSSppbnB1dFxmUCBCaW5hcnkgZGF0YS4gCi0uYnIKLVxmSWxlblxmUCBMZW5ndGggb2YgYmluYXJ5IGRhdGEuIAotLmJyCi1cZkkqKm91dHB1dFxmUCBOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nIGVxdWl2YWxlbnQgaW4gaGV4LgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotb2xlbiBMZW5ndGggb2Ygb3V0cHV0IHN0cmluZyBub3QgaW5jbHVkaW5nIE5VTEwgdGVybWluYXRvci4KLS5SRQotLlBQCi1GSVggSXMgdGhlcmUgYWxyZWFkeSBvbmUgb2YgdGhlc2UgaW4gdGhlIFVDRCBTTk1QIGNvZGViYXNlPyBUaGUgb2xkIG9uZSBzaG91bGQgYmUgdXNlZCwgb3IgdGhpcyBvbmUgc2hvdWxkIGJlIG1vdmVkIHRvIFxmQnNubXBsaWIvc25tcF9hcGkuY1xmUC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSAyOTAgb2YgZmlsZSB0b29scy5jLgotLlNTICJ2b2lkIGZyZWVfemVybyAodm9pZCAqIGJ1Ziwgc2l6ZV90IHNpemUpIgotLlBQCi16ZXJvcyBtZW1vcnkgYmVmb3JlIGZyZWVpbmcgaXQuIFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJKmJ1ZlxmUCBQb2ludGVyIGF0IGJ5dGVzIHRvIGZyZWUuIAotLmJyCi1cZklzaXplXGZQIE51bWJlciBvZiBieXRlcyBpbiBidWYuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMTg4IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IGhleF90b19iaW5hcnkyIChjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbiwgY2hhciAqKiBvdXRwdXQpIgotLlBQCi1oZXhfdG9fYmluYXJ5MiBcZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSSppbnB1dFxmUCBQcmludGFibGUgZGF0YSBpbiBiYXNlMTYuIAotLmJyCi1cZklsZW5cZlAgTGVuZ3RoIGluIGJ5dGVzIG9mIGRhdGEuIAotLmJyCi1cZkkqKm91dHB1dFxmUCBCaW5hcnkgZGF0YSBlcXVpdmFsZW50IHRvIGlucHV0LgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotU05NUEVSUl9HRU5FUlIgb24gZmFpbHVyZSwgb3RoZXJ3aXNlIGxlbmd0aCBvZiBhbGxvY2F0ZWQgc3RyaW5nLgotLlJFCi0uUFAKLUlucHV0IG9mIGFuIG9kZCBsZW5ndGggaXMgcmlnaHQgYWxpZ25lZC4KLS5QUAotRklYIEFub3RoZXIgdmVyc2lvbiBvZiAnaGV4LXRvLWJpbmFyeScgd2hpY2ggdGFrZXMgb2RkIGxlbmd0aCBpbnB1dCBzdHJpbmdzLiBJdCBhbHNvIGFsbG9jYXRlcyB0aGUgbWVtb3J5IHRvIGhvbGQgdGhlIGJpbmFyeSBkYXRhLiBTaG91bGQgYmUgaW50ZWdyYXRlZCB3aXRoIHRoZSBvZmZpY2lhbCBoZXhfdG9fYmluYXJ5KCkgZnVuY3Rpb24uIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMzI3IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAidV9jaGFyKiBtYWxsb2NfcmFuZG9tIChzaXplX3QgKiBzaXplKSIKLS5QUAotUmV0dXJucyBwb2ludGVyIHRvIGFsbG9jYWVkICYgc2V0IGJ1ZmZlciBvbiBzdWNjZXNzLCBzaXplIGNvbnRhaW5zIG51bWJlciBvZiByYW5kb20gYnl0ZXMgZmlsbGVkLiBidWYgaXMgTlVMTCBhbmQgKnNpemUgc2V0IHRvIEtNVCBlcnJvciB2YWx1ZSB1cG9uIGZhaWx1cmUuCi0uUFAKLVxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJc2l6ZVxmUCBOdW1iZXIgb2YgYnl0ZXMgdG8gbWFsbG9jKCkgYW5kIGZpbGwgd2l0aCByYW5kb20gYnl0ZXMuCi0uUkUKLS5QUAotXGZCUmV0dXJuczpcZlAKLS5SUyA0Ci1hIG1hbGxvY2VkIGJ1ZmZlciAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDIwOCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCBtYXJrZXJfdHRpY2tzIChtYXJrZXJfdCBwbSkiCi0uUFAKLVJldHVybiB0aGUgbnVtYmVyIG9mIHRpbWVUaWNrcyBzaW5jZSB0aGUgZ2l2ZW4gbWFya2VyLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkwMSBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInZvaWQgKiBuZXRzbm1wX21lbWR1cCAoY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBzaXplKSIKLS5QUAotRHVwbGljYXRlcyBhIG1lbW9yeSBibG9jay4gQ29waWVzIGEgZXhpc3RpbmcgbWVtb3J5IGxvY2F0aW9uIGZyb20gYSBwb2ludGVyIHRvIGFub3RoZXIsIG5ld2x5IG1hbGxvY2VkLCBwb2ludGVyLgotLlBQCi1cZkJQYXJhbWV0ZXJzOlxmUAotLlJTIDQKLVxmSXRvXGZQIFBvaW50ZXIgdG8gYWxsb2NhdGUgYW5kIGNvcHkgbWVtb3J5IHRvLiAKLS5icgotXGZJZnJvbVxmUCBQb2ludGVyIHRvIGNvcHkgbWVtb3J5IGZyb20uIAotLmJyCi1cZklzaXplXGZQIFNpemUgb2YgdGhlIGRhdGEgdG8gYmUgY29waWVkLgotLlJFCi0uUFAKLVxmQlJldHVybnM6XGZQCi0uUlMgNAotU05NUEVSUl9TVUNDRVNTIG9uIHN1Y2Nlc3MsIFNOTVBFUlJfR0VORVJSIG9uIGZhaWx1cmUuIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjM5IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiY2hhciogbmV0c25tcF9nZXRlbnYgKGNvbnN0IGNoYXIgKiBuYW1lKSIKLS5QUAotTm9uIFdpbmRvd3M6IFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQIG9yIE5VTEwgaWYgdGhlIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQIGRvZXMgbm90IGV4aXN0LiBXaW5kb3dzOiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgZGVzaXJlZCBlbnZpcm9ubWVudCBcZkJ2YXJpYWJsZVxmUCBpZiBpdCBleGlzdHMuIElmIGl0IGRvZXMgbm90LCB0aGUgXGZCdmFyaWFibGVcZlAgaXMgbG9va2VkIHVwIGluIHRoZSByZWdpc3RyeSBpbiBIS0NVXFxOZXQtU05NUCBvciBIS0xNXFxOZXQtU05NUCAod2hpY2hldmVyIGl0IGZpbmRzIGZpcnN0KSBhbmQgc3RvcmVzIHRoZSByZXN1bHQgaW4gdGhlIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQLiBJdCB0aGVuIHJldHVybnMgYSBwb2ludGVyIHRvIGVudmlyb25tZW50IFxmQnZhcmlhYmxlXGZQLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDkyOSBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgImludCBuZXRzbm1wX2hleF90b19iaW5hcnkgKHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG9mZnNldCwgaW50IGFsbG93X3JlYWxsb2MsIGNvbnN0IGNoYXIgKiBoZXgsIGNvbnN0IGNoYXIgKiBkZWxpbSkiCi0uUFAKLWNvbnZlcnQgYW4gQVNDSUkgaGV4IHN0cmluZyAod2l0aCBzcGVjaWZpZWQgZGVsaW1pdGVycykgdG8gYmluYXJ5IFxmQlBhcmFtZXRlcnM6XGZQCi0uUlMgNAotXGZJYnVmXGZQIGFkZHJlc3Mgb2YgYSBwb2ludGVyIChwb2ludGVyIHRvIHBvaW50ZXIpIGZvciB0aGUgb3V0cHV0IGJ1ZmZlci4gSWYgYWxsb3dfcmVhbGxvYyBpcyBzZXQsIHRoZSBidWZmZXIgbWF5IGJlIGdyb3duIHZpYSBzbm1wX3JlYWxsb2MgdG8gYWNjb21vZGF0ZSB0aGUgZGF0YS4KLS5icgotXGZJYnVmX2xlblxmUCBwb2ludGVyIHRvIGEgc2l6ZV90IGNvbnRhaW5pbmcgdGhlIGluaXRpYWwgc2l6ZSBvZiBidWYuCi0uYnIKLVxmSW9mZnNldFxmUCBPbiBpbnB1dCwgYSBwb2ludGVyIHRvIGEgc2l6ZV90IGluZGljYXRpbmcgYW4gb2Zmc2V0IGludG8gYnVmLiBUaGUgYmluYXJ5IGRhdGEgd2lsbCBiZSBzdG9yZWQgYXQgdGhpcyBvZmZzZXQuIE9uIG91dHB1dCwgdGhpcyBwb2ludGVyIHdpbGwgaGF2ZSB1cGRhdGVkIHRoZSBvZmZzZXQgdG8gYmUgdGhlIGZpcnN0IGJ5dGUgYWZ0ZXIgdGhlIGNvbnZlcnRlZCBkYXRhLgotLmJyCi1cZklhbGxvd19yZWFsbG9jXGZQIElmIHRydWUsIHRoZSBidWZmZXIgY2FuIGJlIHJlYWxsb2NhdGVkLiBJZiBmYWxzZSwgYW5kIHRoZSBidWZmZXIgaXMgbm90IGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoZSBzdHJpbmcsIGFuIGVycm9yIHdpbGwgYmUgcmV0dXJuZWQuCi0uYnIKLVxmSWhleFxmUCBwb2ludGVyIHRvIGhleCBzdHJpbmcgdG8gYmUgY29udmVydGVkLiBNYXkgYmUgcHJlZml4ZWQgYnkgJzB4JyBvciAnMFgnLgotLmJyCi1cZklkZWxpbVxmUCBwb2ludCB0byBhIHN0cmluZyBvZiBhbGxvd2VkIGRlbGltaXRlcnMgYmV0d2VlbiBieXRlcy4gSWYgbm90IHNwZWNpZmllZCwgYW55IG5vbi1oZXggY2hhcmFjdGVycyB3aWxsIGJlIGFuIGVycm9yLgotLlJFCi0uUFAKLVxmQlJldHVybiB2YWx1ZXM6XGZQCi0uUlMgNAotXGZJMVxmUCBzdWNjZXNzIAotLmJyCi1cZkkwXGZQIGVycm9yIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDI4IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiY2hhciogbmV0c25tcF9zdHJkdXBfYW5kX251bGwgKGNvbnN0IHVfY2hhciAqIGZyb20sIHNpemVfdCBmcm9tX2xlbikiCi0uUFAKLWNvcGllcyBhIChwb3NzaWJsZSkgdW50ZXJtaW5hdGVkIHN0cmluZyBvZiBhIGdpdmVuIGxlbmd0aCBpbnRvIGEgbmV3IGJ1ZmZlciBhbmQgbnVsbCB0ZXJtaW5hdGVzIGl0IGFzIHdlbGwgKG5ldyBidWZmZXIgTUFZIGJlIG9uZSBieXRlIGxvbmdlciB0byBhY2NvdW50IGZvciB0aGlzIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgMjU4IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IHNubXBfaGV4X3RvX2JpbmFyeSAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwgc2l6ZV90ICogb2Zmc2V0LCBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgY2hhciAqIGhleCkiCi0uUFAKLWNvbnZlcnQgYW4gQVNDSUkgaGV4IHN0cmluZyB0byBiaW5hcnkgXGZCTm90ZTpcZlAKLS5SUyA0Ci1UaGlzIGlzIGEgd3JhcHBlciB3aGljaCBjYWxscyBuZXRzbm1wX2hleF90b19iaW5hcnkgd2l0aCBhIGRlbGltaXRlciBzdHJpbmcgb2YgJyAnLgotLlJFCi0uUFAKLVNlZSBuZXRzbm1wX2hleF90b19iaW5hcnkgZm9yIHBhcmFtZXRlciBkZXNjcmlwdGlvbnMuCi0uUFAKLVxmQlJldHVybiB2YWx1ZXM6XGZQCi0uUlMgNAotXGZJMVxmUCBzdWNjZXNzIAotLmJyCi1cZkkwXGZQIGVycm9yIAotLlJFCi0uUFAKLQotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNDg4IG9mIGZpbGUgdG9vbHMuYy4KLS5TUyAiaW50IHNubXBfcmVhbGxvYyAodV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbikiCi0uUFAKLVRoaXMgZnVuY3Rpb24gaW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIGJ1ZmZlciBwb2ludGVkIGF0IGJ5ICpidWYsIHdoaWNoIGlzIGluaXRpYWxseSBvZiBzaXplICpidWZfbGVuLiBDb250ZW50cyBhcmUgcHJlc2VydmVkICoqQVQgVEhFIEJPVFRPTSBFTkQgT0YgVEhFIEJVRkZFUioqLiBJZiBtZW1vcnkgY2FuIGJlIChyZS0pYWxsb2NhdGVkIHRoZW4gaXQgcmV0dXJucyAxLCBlbHNlIGl0IHJldHVybnMgMC4KLS5QUAotXGZCUGFyYW1ldGVyczpcZlAKLS5SUyA0Ci1cZklidWZcZlAgcG9pbnRlciB0byBhIGJ1ZmZlciBwb2ludGVyIAotLmJyCi1cZklidWZfbGVuXGZQIHBvaW50ZXIgdG8gY3VycmVudCBzaXplIG9mIGJ1ZmZlciBpbiBieXRlcwotLlJFCi0uUFAKLVxmQk5vdGU6XGZQCi0uUlMgNAotVGhlIGN1cnJlbnQgcmUtYWxsb2NhdGlvbiBhbGdvcml0aG0gaXMgdG8gaW5jcmVhc2UgdGhlIGJ1ZmZlciBzaXplIGJ5IHdoaWNoZXZlciBpcyB0aGUgZ3JlYXRlciBvZiAyNTYgYnl0ZXMgb3IgdGhlIGN1cnJlbnQgYnVmZmVyIHNpemUsIHVwIHRvIGEgbWF4aW11bSBpbmNyZWFzZSBvZiA4MTkyIGJ5dGVzLiAKLS5SRQotLlBQCi0KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDEyNCBvZiBmaWxlIHRvb2xzLmMuCi0uU1MgInVfbG9uZyB1YXRpbWVfZGlmZiAobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkiCi0uUFAKLVJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIHVfbG9uZyBtc2VjKSBiZXR3ZWVuIHRoZSB0d28gbWFya2Vycy4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MTUgb2YgZmlsZSB0b29scy5jLgotLlNTICJ1X2xvbmcgdWF0aW1lX2hkaWZmIChtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKSIKLS5QUAotUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gdV9sb25nIDEvMTAwdGggc2VjcykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMgKGZ1bmN0aW9uYWxseSB0aGlzIGlzIHdoYXQgc3lzVXBUaW1lIG5lZWRzKS4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA4MzMgb2YgZmlsZSB0b29scy5jLgotLlNTICJpbnQgdWF0aW1lX3JlYWR5IChtYXJrZXJfdCBwbSwgdW5zaWduZWQgaW50IGRlbHRhVCkiCi0uUFAKLVRlc3Q6IEhhcyAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgZXhjZWVkZWQgY3VycmVudCB0aW1lIChpbiBtc2VjKSA/IFJldHVybnMgMCBpZiB0ZXN0IGZhaWxzIG9yIGNhbm5vdCBiZSB0ZXN0ZWQgKG5vIG1hcmtlcikuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgODc1IG9mIGZpbGUgdG9vbHMuYy4KLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF91dGlsaXRpZXMuMyBiL21hbi9uZXRzbm1wX3V0aWxpdGllcy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5NmJmNTMzLi4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3V0aWxpdGllcy4zCisrKyAvZGV2L251bGwKQEAgLTEsNzQgKzAsMCBAQAotLlRIICJ1dGlsaXR5X2hhbmRsZXJzIiAzICIyNCBKdW4gMjAxMSIgIlZlcnNpb24gNS40LjMucHJlMSIgIm5ldC1zbm1wIiBcIiAtKi0gbnJvZmYgLSotCi0uYWQgbAotLm5oCi0uU0ggTkFNRQotdXRpbGl0eV9oYW5kbGVycyBcLSAKLS5QUAotU2ltcGxpZnkgcmVxdWVzdCBwcm9jZXNzaW5nIEEgZ3JvdXAgb2YgaGFuZGxlcnMgaW50ZW5kZWQgdG8gc2ltcGxpZnkgY2VydGFpbiBhc3BlY3RzIG9mIHByb2Nlc3NpbmcgYSByZXF1ZXN0IGZvciBhIE1JQiBvYmplY3QuICAKLQotLlNTICJNb2R1bGVzIgotCi0uaW4gKzFjCi0udGkgLTFjCi0uUkkgIlxmQmJ1bGtfdG9fbmV4dFxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQ29udmVydCBHRVRCVUxLIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCY2FjaGVfaGFuZGxlclxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJTWFpbnRhaW5zIGEgY2FjaGUgb2YgZGF0YSBmb3IgdXNlIGJ5IGxvd2VyIGxldmVsIGhhbmRsZXJzLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQmRlYnVnXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklQcmludCBvdXQgZGVidWdnaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSBoYW5kbGVyIGNoYWluIGJlaW5nIGNhbGxlZC4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJtb2RlX2VuZF9jYWxsXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklBdCB0aGUgZW5kIG9mIGEgc2VyaWVzIG9mIHJlcXVlc3RzLCBjYWxsIGFub3RoZXIgaGFuZGxlciBob29rLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQm11bHRpcGxleGVyXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklTcGxpdHMgbW9kZSByZXF1ZXN0cyBpbnRvIGNhbGxzIHRvIGRpZmZlcmVudCBoYW5kbGVycy4gXGZQIgotLnRpIC0xYwotLlJJICJcZkJyZWFkX29ubHlcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSU1ha2UgeW91ciBoYW5kbGVyIHJlYWRfb25seSBhdXRvbWF0aWNhbGx5IFRoZSBvbmx5IHB1cnBvc2Ugb2YgdGhpcyBoYW5kbGVyIGlzIHRvIHJldHVybiBhbiBhcHByb3ByaWF0ZSBlcnJvciBmb3IgYW55IHJlcXVlc3RzIHBhc3NlZCB0byBpdCBpbiBhIFNFVCBtb2RlLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnJvd19tZXJnZVxmUCIKLS5icgotLlBQCi0KLS5SSSAiXGZJQ2FsbHMgc3ViIGhhbmRsZXJzIHdpdGggcmVxdWVzdCBmb3Igb25lIHJvdyBhdCBhIHRpbWUuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCc2VyaWFsaXplXGZQIgotLmJyCi0uUFAKLQotLlJJICJcZklDYWxscyBzdWIgaGFuZGxlcnMgb25lIHJlcXVlc3QgYXQgYSB0aW1lLiBcZlAiCi0udGkgLTFjCi0uUkkgIlxmQnN0YXNoX3RvX25leHRcZlAiCi0uYnIKLS5QUAotCi0uUkkgIlxmSUNvbnZlcnQgR0VUX1NUQVNIIHJlcXVlc3RzIGludG8gR0VUTkVYVCByZXF1ZXN0cyBmb3IgdGhlIGhhbmRsZXIuIFxmUCIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1TaW1wbGlmeSByZXF1ZXN0IHByb2Nlc3NpbmcgQSBncm91cCBvZiBoYW5kbGVycyBpbnRlbmRlZCB0byBzaW1wbGlmeSBjZXJ0YWluIGFzcGVjdHMgb2YgcHJvY2Vzc2luZyBhIHJlcXVlc3QgZm9yIGEgTUlCIG9iamVjdC4gCi0KLVRoZXNlIGhlbHBlcnMgZG8gbm90IGltcGxlbWVudCBhbnkgTUlCIG9iamVjdHMgdGhlbXNlbHZlcy4gUmF0aGVyIHRoZXkgaGFuZGxlIHNwZWNpZmljIGdlbmVyaWMgc2l0dWF0aW9ucywgZWl0aGVyIHJldHVybmluZyBhbiBlcnJvciwgb3IgcGFzc2luZyBhIChwb3NzaWJseSBzaW1wbGVyKSByZXF1ZXN0IGRvd24gdG8gbG93ZXIgbGV2ZWwgaGFuZGxlcnMuIAotLlNIICJBdXRob3IiCi0uUFAgCi1HZW5lcmF0ZWQgYXV0b21hdGljYWxseSBieSBEb3h5Z2VuIGZvciBuZXQtc25tcCBmcm9tIHRoZSBzb3VyY2UgY29kZS4KZGlmZiAtLWdpdCBhL21hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmIGIvbWFuL25ldHNubXBfdmFyYmluZF9hcGkuMy5kZWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0MWY5ZgotLS0gL2Rldi9udWxsCisrKyBiL21hbi9uZXRzbm1wX3ZhcmJpbmRfYXBpLjMuZGVmCkBAIC0wLDAgKzEsMjE2IEBACisuVEggTkVUU05NUF9WQVJCSU5EX0FQSSAzICIxMyBBdWcgMjAxMCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5TSCBOQU1FCitzbm1wX3BkdV9hZGRfdmFyaWFibGUsCitzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlLAorc25tcF9hZGRfbnVsbF92YXIsCitzbm1wX2Nsb25lX3ZhcmJpbmQsCitzbm1wX3NldF92YXJfb2JqaWQsCitzbm1wX3NldF92YXJfdmFsdWUsCitzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUsCitzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciwKK3ByaW50X3ZhcmlhYmxlLAorZnByaW50X3ZhcmlhYmxlLAorc25wcmludF92YXJpYWJsZSwKK3ByaW50X3ZhbHVlLAorZnByaW50X3ZhbHVlLAorc25wcmludF92YWx1ZSwKK3NubXBfZnJlZV92YXIsCitzbm1wX2ZyZWVfdmFyYmluZCAtIG5ldHNubXBfdmFyYmluZF9hcGkgZnVuY3Rpb25zCisuU0ggU1lOT1BTSVMKKy5CICNpbmNsdWRlIDxuZXQtc25tcC92YXJiaW5kX2FwaS5oPgorLlNTIENyZWF0aW9uCisuUFAKKy5CICJuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfcGR1X2FkZF92YXJpYWJsZSgiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiIgcGR1ICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgIiB0eXBlICIsIGNvbnN0IHZvaWQgKiIgdmFsdWUgIiwgc2l6ZV90ICIgbGVuICIpOyIKKy5icgorLkIgIm5ldHNubXBfdmFyaWFibGVfbGlzdCAqc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmxpc3QgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAiIHR5cGUgIiwgY29uc3Qgdm9pZCAqIiB2YWx1ZSAiLCBzaXplX3QgIiBsZW4gIik7IgorLmJyCisuQiAibmV0c25tcF92YXJpYWJsZV9saXN0ICpzbm1wX2FkZF9udWxsX3ZhcigiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKiIgcGR1ICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiKTsiCisuUFAKKy5CICJuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnNubXBfY2xvbmVfdmFyYmluZCgiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmxpc3QgIik7IgorLlNTIFNldHRpbmcgVmFsdWVzCisuUFAKKy5CSSAiaW50ICBzbm1wX3NldF92YXJfb2JqaWQoIG5ldHNubXBfdmFyaWFibGVfbGlzdCogIiB2YXJpYWJsZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiAiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIpOyIKKy5icgorLkJJICJpbnQgIHNubXBfc2V0X3Zhcl92YWx1ZSggbmV0c25tcF92YXJpYWJsZV9saXN0KiAiIHZhcmlhYmxlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiAiIHZhbHVlICIsIHNpemVfdCAiIHZhbGxlbiAiKTsiCisuYnIKKy5CSSAiaW50ICBzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUoIG5ldHNubXBfdmFyaWFibGVfbGlzdCogIiB2YXJpYWJsZSAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgIiB0eXBlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKiAiIHZhbHVlICIsIHNpemVfdCAiIHZhbGxlbiAiKTsiCisuYnIKKy5CSSAiaW50ICBzbm1wX3NldF92YXJfdHlwZWRfaW50ZWdlciggbmV0c25tcF92YXJpYWJsZV9saXN0KiAiIHZhcmlhYmxlICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAiIHR5cGUgIiwgbG9uZyAiIHZhbHVlICIpOyIKKy5icgorLlNTIE91dHB1dAorLlBQCisuQkkgInZvaWQgIHByaW50X3ZhcmlhYmxlKGNvbnN0IG9pZCAqIiAib2JqaWQiICIsIHNpemVfdCAiICJvYmppZGxlbiIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5icgorLkJJICJ2b2lkIGZwcmludF92YXJpYWJsZShGSUxFICoiIGZwICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIiBvYmppZCAiLCBzaXplX3QgIiBvYmppZGxlbiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiIgdmFyaWFibGUgIik7IgorLmJyCisuQkkgImludCBzbnByaW50X3ZhcmlhYmxlKGNoYXIgKiIgImJ1ZiIgIiwgc2l6ZV90ICIgImxlbiIgIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuUFAKKy5CSSAidm9pZCAgcHJpbnRfdmFsdWUoY29uc3Qgb2lkICoiIG9iamlkICIsIHNpemVfdCAiIG9iamlkbGVuICIsIgorLmJyCisuQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuYnIKKy5CSSAidm9pZCBmcHJpbnRfdmFsdWUoRklMRSAqIiBmcCAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5icgorLkJJICJpbnQgc25wcmludF92YWx1ZShjaGFyICoiIGJ1ZiAiLCBzaXplX3QgIiAibGVuIiAiLCIKKy5icgorLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiIgb2JqaWQgIiwgc2l6ZV90ICIgb2JqaWRsZW4gIiwiCisuYnIKKy5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlICIpOyIKKy5icgorLmJyCisuU1MgRGVsZXRpb24KKy5QUAorLkJJICJ2b2lkIHNubXBfZnJlZV92YXIoICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIiB2YXJpYWJsZSAiKTsiCisuYnIKKy5CSSAidm9pZCBzbm1wX2ZyZWVfdmFyYmluZCggbmV0c25tcF92YXJpYWJsZV9saXN0ICoiIHZhcmlhYmxlcyAiKTsiCisuYnIKKy5QUAorLlNIIERFU0NSSVBUSU9OCitUaGUgZnVuY3Rpb25zIGRlYWxpbmcgd2l0aCB2YXJpYWJsZSBiaW5kaW5ncyBmYWxsIGludG8gZm91ciBncm91cHMgLSAKK2RlYWxpbmcgd2l0aCB0aGUgY3JlYXRpb24sIHNldHRpbmcgb2YgdmFsdWVzLCBvdXRwdXQgYW5kIGRlbGV0aW9uIG9mIHZhcmJpbmRzLgorLlNTIENyZWF0aW9uCisuQiBzbm1wX3BkdV9hZGRfdmFyaWFibGUKK3dpbGwgY3JlYXRlIGEgbmV3IHZhcmJpbmQgc3RydWN0dXJlLCBpbml0aWFsaXNlZCB3aXRoIHRoZSBuYW1lICgKKy5JUiBvYmppZCAiLCAiIG9iamlkbGVuCispLCBzeW50YXggKAorLkkgdHlwZQorKSBhbmQgdmFsdWUgKAorLkkgdmFsdWUgIiwgIiBsZW4KKykgcHJvdmlkZWQuCitUaGlzIHZhcmJpbmQgaXMgdGhlbiBhZGRlZCB0byB0aGUgZW5kIG9mIHRoZSB2YXJiaW5kIGxpc3QgaW4KK3RoZSBnaXZlbiBQRFUuCisuUFAKKy5CIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUKK2lzIHNpbWlsYXIsIGJ1dCBhcHBlbmRzIHRoZSBuZXcgdmFyYmluZCB0byB0aGUgZW5kIG9mIHRoZQordmFyYmluZCBsaXN0IHByb3ZpZGVkLgorV2hlbiBhZGRpbmcgdGhlIGZpcnN0IHZhcmJpbmQgdG8gYW4gZW1wdHkgbGlzdCwgc2ltcGx5CitwYXNzIHRoZSBhZGRyZXNzIG9mIHRoZSBoZWFkIG9mIHRoZSBsaXN0OgorLklQCisgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmwgPSBOVUxMOworICBzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlKAorICAgICAgICAgICAgJnZsLCBuYW1lMSwgbmFtZTFfbGVuLAorICAgICAgICAgICAgQVNOX1xmSVRZUEVcZlAsICZ2YWwxLCB2YWwxX2xlbik7CisgIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUoCisgICAgICAgICAgICAmdmwsIG5hbWUyLCBuYW1lMl9sZW4sCisgICAgICAgICAgICBBU05fXGZJVFlQRVxmUCwgJnZhbDIsIHZhbDJfbGVuKTsKKy5QUAorSW4gYm90aCBjYXNlcywgdGhlIHJvdXRpbmUgd2lsbCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBuZXcKK3ZhcmJpbmQgc3RydWN0dXJlIChvciBOVUxMIGlmIHRoZSB2YXJiaW5kIGNyZWF0aW9uIGZhaWxzKS4KKy5QUAorLkIgc25tcF9hZGRfbnVsbF92YXIKK2lzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gYWRkIGFuIGVtcHR5IHZhcmJpbmQgdG8gdGhlIFBEVS4KK3dpdGhvdXQgbmVlZGluZyB0byBzcGVjaWZ5IHRoZSBOVUxMIHZhbHVlIGV4cGxpY2l0bHkuCitUaGlzIGlzIHRoZSBub3JtYWwgbWVjaGFuaXNtIGZvciBjb25zdHJ1Y3RpbmcgYSBHRVQgKG9yIHNpbWlsYXIpCitpbmZvcm1hdGlvbiByZXRyaWV2YWwgcmVxdWVzdC4KKy5icgorQWdhaW4sIHRoaXMgcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG5ldyB2YXJiaW5kLCBvciBOVUxMLgorLlBQCisuQiBzbm1wX2Nsb25lX3ZhcmJpbmQKK2NyZWF0ZXMgYSBjb3B5IG9mIGVhY2ggdmFyYmluZCBpbiB0aGUgc3BlY2lmaWVkIGxpc3QsCityZXR1cm5pbmcgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG9mIHRoZSBuZXcgbGlzdAorKG9yIE5VTEwgaWYgdGhlIGNsb25pbmcgZmFpbHMpLgorLmJyCisuU1MgU2V0dGluZyBvZiB2YWx1ZXMKKy5CIHNubXBfc2V0X3Zhcl9vYmppZAorc2V0cyB0aGUgbmFtZSBvZiB0aGUgdmFyYmluZCBzdHJ1Y3R1cmUgdG8gdGhlIHNwZWNpZmllZCBPSUQuCisuYnIKKy5CIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZQorc2V0cyB0aGUgc3ludGF4IHR5cGUgYW5kIHZhbHVlIG9mIHRoZSB2YXJiaW5kIHN0cnVjdHVyZS4KKy5icgorLkIgc25tcF9zZXRfdmFyX3ZhbHVlCitzZXRzIHRoZSB2YWx1ZSBvZiB0aGUgdmFyYmluZCBzdHJ1Y3R1cmUsIGxlYXZpbmcgdGhlIHN5bnRheCB0eXBlIHVuY2hhbmdlZC4KKy5icgorLkIgc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIKK2lzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gdG8gc2V0IHRoZSBzeW50YXggdHlwZSBhbmQgdmFsdWUgZm9yCithIDMyLWJpdCBpbnRlZ2VyLWJhc2VkIHZhcmJpbmQuCisuUFAKK0FsbCBmb3VyIG9mIHRoZXNlIHJldHVybiAwIGlmIHRoZSBhc3NpZ25tZW50IGlzIHN1Y2Nlc3NmdWwsCitvciAxIGlmIGl0IGlzIG5vdC4KKy5TUyBPdXRwdXQKKy5CIHByaW50X3ZhcmlhYmxlCit3aWxsIHRha2UgYW4gb2JqZWN0IGlkZW50aWZpZXIgKGFzIHJldHVybmVkIGJ5CisuQlIgcmVhZF9vYmppZCAiLCAiIHNubXBfcGFyc2Vfb2lkICIgb3IgIiBnZXRfbW9kdWxlX25vZGUgKQorYW5kIGFuIGluc3RhbmNlIG9mIHN1Y2ggYSB2YXJpYWJsZSwgYW5kIHByaW50cyB0byB0aGUgc3RhbmRhcmQgb3V0cHV0Cit0aGUgdGV4dHVhbCBmb3JtIG9mIHRoZSBvYmplY3QgaWRlbnRpZmllciB0b2dldGhlciB3aXRoIHRoZSB2YWx1ZQorb2YgdGhlIHZhcmlhYmxlLgorLlBQCisuQiBmcHJpbnRfdmFyaWFibGUKK2RvZXMgdGhlIHNhbWUsIGJ1dCBwcmludHMgdG8gdGhlIEZJTEUgcG9pbnRlciBzcGVjaWZpZWQgYnkgdGhlIGluaXRpYWwKK3BhcmFtZXRlci4KKy5QUAorLkIgc25wcmludF92YXJpYWJsZQorcHJpbnRzIHRoZSBzYW1lIGluZm9ybWF0aW9uIGludG8gdGhlIGJ1ZmZlciBwb2ludGVkIHRvIGJ5CisuSSBidWYKK3doaWNoIGlzIG9mIGxlbmd0aAorLklSIGxlbiAuCitJdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBwcmludGVkLCBvciAtMSBpZiB0aGUKK2J1ZmZlciB3YXMgbm90IGxhcmdlIGVub3VnaC4gIEluIHRoZSBsYXR0ZXIgY2FzZSwKKy5JIGJ1Zgord2lsbCB0eXBpY2FsbHkgY29udGFpbmVkIGEgdHJ1bmNhdGVkIHZlcnNpb24gb2YgdGhlIGluZm9ybWF0aW9uIChidXQKK3RoaXMgYmVoYXZpb3VyIGlzIG5vdCBndWFyYW50ZWVkKS4gIFRoaXMgZnVuY3Rpb24gcmVwbGFjZXMgdGhlCitvYnNvbGV0ZSBmdW5jdGlvbgorLkJSIHNwcmludF92YXJpYWJsZSAuCisuUFAKKy5CUiBwcmludF92YWx1ZSAsCisuQlIgZnByaW50X3ZhbHVlICwKK2FuZAorLkIgc25wcmludF92YWx1ZQorZG8gdGhlIHNhbWUgYXMgdGhlIGVxdWl2YWxlbnQKKy5CIHByaW50X3ZhcmlhYmxlCityb3V0aW5lcywgYnV0IG9ubHkgZGlzcGxheWluZyB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLCB3aXRob3V0IHRoZQorY29ycmVzcG9uZGluZyBvYmplY3QgaWRlbnRpZmllci4KKy5QUAorRm9yIGRpc3BsYXlpbmcgdGhlIE9JRCBvZiBhIHZhcmJpbmQsIHNlZSBcZkJuZXRzbm1wX21pYl9hcGlcZlAoMykuCisuYnIKKy5TUyBEZWxldGlvbgorLkIgc25tcF9mcmVlX3ZhcgorcmVsZWFzZXMgYWxsIG1lbW9yeSB1c2VkIGJ5IHRoZSBnaXZlbiB2YXJiaW5kIHN0cnVjdHVyZS4KKy5icgorLkIgc25tcF9mcmVlX3ZhcmJpbmQKK3JlbGVhc2VzIGFsbCBtZW1vcnkgdXNlZCBieSBlYWNoIHZhcmJpbmQgc3RydWN0dXJlIGluIHRoZSB2YXJiaW5kIGxpc3QgcHJvdmlkZWQuCisuYnIKKy5TSCAiU0VFIEFMU08iCisuQlIgbmV0c25tcF9wZHVfYXBpICIoMykiCisuQlIgbmV0c25tcF9taWJfYXBpICIoMykiCmRpZmYgLS1naXQgYS9tYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMgYi9tYW4vbmV0c25tcF92YXJpYWJsZV9saXN0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE4OTdjNWUuLjAwMDAwMDAKLS0tIGEvbWFuL25ldHNubXBfdmFyaWFibGVfbGlzdC4zCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS5USCAidmFyaWFibGVfbGlzdCIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXZhcmlhYmxlX2xpc3QgXC0gCi0uUFAKLVRoZSBuZXRzbm1wIFxmQnZhcmlhYmxlXGZQIGxpc3QgYmluZGluZyBzdHJ1Y3R1cmUsIGl0J3MgdHlwZWRlZidkIHRvIG5ldHNubXBfdmFyaWFibGVfbGlzdC4gIAotCi0uU0ggU1lOT1BTSVMKLS5icgotLlBQCi0uUFAKLVxmQyNpbmNsdWRlIDxzbm1wX2FwaS5oPlxmUAotLlNTICJEYXRhIEZpZWxkcyIKLQotLmluICsxYwotLnRpIC0xYwotLlJJICJzdHJ1Y3QgXGZCdmFyaWFibGVfbGlzdFxmUCAqIFxmQm5leHRfdmFyaWFibGVcZlAiCi0uYnIKLS5SSSAiXGZJTlVMTCBmb3IgbGFzdCBcZkJ2YXJpYWJsZVxmUC4gXGZQIgotLnRpIC0xYwotLlJJICJvaWQgKiBcZkJuYW1lXGZQIgotLmJyCi0uUkkgIlxmSU9iamVjdCBpZGVudGlmaWVyIG9mIFxmQnZhcmlhYmxlXGZQLiBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJuYW1lX2xlbmd0aFxmUCIKLS5icgotLlJJICJcZkludW1iZXIgb2Ygc3ViaWQncyBpbiBuYW1lIFxmUCIKLS50aSAtMWMKLS5SSSAidV9jaGFyIFxmQnR5cGVcZlAiCi0uYnIKLS5SSSAiXGZJQVNOIHR5cGUgb2YgXGZCdmFyaWFibGVcZlAuIFxmUCIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF92YXJkYXRhXGZQIFxmQnZhbFxmUCIKLS5icgotLlJJICJcZkl2YWx1ZSBvZiBcZkJ2YXJpYWJsZVxmUCBcZlAiCi0udGkgLTFjCi0uUkkgInNpemVfdCBcZkJ2YWxfbGVuXGZQIgotLmJyCi0uUkkgIlxmSXRoZSBsZW5ndGggb2YgdGhlIHZhbHVlIHRvIGJlIGNvcGllZCBpbnRvIGJ1ZiBcZlAiCi0udGkgLTFjCi0uUkkgIm9pZCBcZkJuYW1lX2xvY1xmUCBbTUFYX09JRF9MRU5dIgotLmJyCi0uUkkgIlxmSWJ1ZmZlciB0byBob2xkIHRoZSBPSUQgXGZQIgotLnRpIC0xYwotLlJJICJ1X2NoYXIgXGZCYnVmXGZQIFs0MF0iCi0uYnIKLS5SSSAiXGZJOTAgcGVyY2VudGlsZSA8IDQwLiBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQgKiBcZkJkYXRhXGZQIgotLmJyCi0uUkkgIlxmSShPcGFxdWUpIGhvb2sgZm9yIGFkZGl0aW9uYWwgZGF0YSBcZlAiCi0udGkgLTFjCi0uUkkgInZvaWQoKiBcZkJkYXRhRnJlZUhvb2tcZlAgKSh2b2lkICopIgotLmJyCi0uUkkgIlxmSWNhbGxiYWNrIHRvIGZyZWUgYWJvdmUgXGZQIgotLnRpIC0xYwotLlJJICJpbnQgXGZCaW5kZXhcZlAiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1UaGUgbmV0c25tcCBcZkJ2YXJpYWJsZVxmUCBsaXN0IGJpbmRpbmcgc3RydWN0dXJlLCBpdCdzIHR5cGVkZWYnZCB0byBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QuIAotLlBQCi1cZkJFeGFtcGxlczogXGZQCi0uaW4gKzFjCi0uUFAKLVxmQm5vdGlmaWNhdGlvbi5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTI5IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TSCAiRmllbGQgRG9jdW1lbnRhdGlvbiIKLS5QUCAKLS5TUyAidV9jaGFyIFxmQnZhcmlhYmxlX2xpc3Q6OmJ1ZlxmUFs0MF0iCi0uUFAKLTkwIHBlcmNlbnRpbGUgPCA0MC4gCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NDUgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ2b2lkKiBcZkJ2YXJpYWJsZV9saXN0OjpkYXRhXGZQIgotLlBQCi0oT3BhcXVlKSBob29rIGZvciBhZGRpdGlvbmFsIGRhdGEgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NDcgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJ2b2lkKCogXGZCdmFyaWFibGVfbGlzdDo6ZGF0YUZyZWVIb29rXGZQKSh2b2lkICopIgotLlBQCi1jYWxsYmFjayB0byBmcmVlIGFib3ZlIAotLlNTICJvaWQqIFxmQnZhcmlhYmxlX2xpc3Q6Om5hbWVcZlAiCi0uUFAKLU9iamVjdCBpZGVudGlmaWVyIG9mIFxmQnZhcmlhYmxlXGZQLiAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzMyBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJ2YXJpYWJsZV9saXN0OjpuYW1lX2xlbmd0aFxmUCIKLS5QUAotbnVtYmVyIG9mIHN1YmlkJ3MgaW4gbmFtZSAKLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzNSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgIm9pZCBcZkJ2YXJpYWJsZV9saXN0OjpuYW1lX2xvY1xmUFtNQVhfT0lEX0xFTl0iCi0uUFAKLWJ1ZmZlciB0byBob2xkIHRoZSBPSUQgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NDMgb2YgZmlsZSBzbm1wX2FwaS5oLgotLlNTICJzdHJ1Y3QgXGZCdmFyaWFibGVfbGlzdFxmUCogXGZCdmFyaWFibGVfbGlzdDo6bmV4dF92YXJpYWJsZVxmUFxmQyBbcmVhZF1cZlAiCi0uUFAKLU5VTEwgZm9yIGxhc3QgXGZCdmFyaWFibGVcZlAuIAotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTMxIG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAidV9jaGFyIFxmQnZhcmlhYmxlX2xpc3Q6OnR5cGVcZlAiCi0uUFAKLUFTTiB0eXBlIG9mIFxmQnZhcmlhYmxlXGZQLiAKLS5QUAotXGZCRXhhbXBsZXM6IFxmUAotLmluICsxYwotXGZCZGVsYXllZF9pbnN0YW5jZS5jXGZQLgotLlBQCi1EZWZpbml0aW9uIGF0IGxpbmUgNTM3IG9mIGZpbGUgc25tcF9hcGkuaC4KLS5TUyAiXGZCbmV0c25tcF92YXJkYXRhXGZQIFxmQnZhcmlhYmxlX2xpc3Q6OnZhbFxmUCIKLS5QUAotdmFsdWUgb2YgXGZCdmFyaWFibGVcZlAgCi0uUFAKLVxmQkV4YW1wbGVzOiBcZlAKLS5pbiArMWMKLVxmQmRlbGF5ZWRfaW5zdGFuY2UuY1xmUC4KLS5QUAotRGVmaW5pdGlvbiBhdCBsaW5lIDUzOSBvZiBmaWxlIHNubXBfYXBpLmguCi0uU1MgInNpemVfdCBcZkJ2YXJpYWJsZV9saXN0Ojp2YWxfbGVuXGZQIgotLlBQCi10aGUgbGVuZ3RoIG9mIHRoZSB2YWx1ZSB0byBiZSBjb3BpZWQgaW50byBidWYgCi0uUFAKLURlZmluaXRpb24gYXQgbGluZSA1NDEgb2YgZmlsZSBzbm1wX2FwaS5oLgotCi0uU0ggIkF1dGhvciIKLS5QUCAKLUdlbmVyYXRlZCBhdXRvbWF0aWNhbGx5IGJ5IERveHlnZW4gZm9yIG5ldC1zbm1wIGZyb20gdGhlIHNvdXJjZSBjb2RlLgpkaWZmIC0tZ2l0IGEvbWFuL25ldHNubXBfd2F0Y2hlci4zIGIvbWFuL25ldHNubXBfd2F0Y2hlci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1NThmNGY2Li4wMDAwMDAwCi0tLSBhL21hbi9uZXRzbm1wX3dhdGNoZXIuMworKysgL2Rldi9udWxsCkBAIC0xLDc1ICswLDAgQEAKLS5USCAid2F0Y2hlciIgMyAiMjQgSnVuIDIwMTEiICJWZXJzaW9uIDUuNC4zLnByZTEiICJuZXQtc25tcCIgXCIgLSotIG5yb2ZmIC0qLQotLmFkIGwKLS5uaAotLlNIIE5BTUUKLXdhdGNoZXIgXC0gCi0uUFAKLVdhdGNoIGEgc3BlY2lmaWVkIFxmQnZhcmlhYmxlXGZQIGFuZCBwcm9jZXNzIGl0IGFzIGFuIGluc3RhbmNlIG9yIHNjYWxhciBvYmplY3QuICAKLQotLlNTICJGdW5jdGlvbnMiCi0KLS5pbiArMWMKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3dhdGNoZXJfaGFuZGxlclxmUCAodm9pZCkiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF93YXRjaGVyX2luZm9cZlAgKiBcZkJuZXRzbm1wX2NyZWF0ZV93YXRjaGVyX2luZm9cZlAgKHZvaWQgKmRhdGEsIHNpemVfdCBzaXplLCB1X2NoYXIgdHlwZSwgaW50IGZsYWdzKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX2luc3RhbmNlXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX3dhdGNoZXJfaW5mb1xmUCAqd2F0Y2hpbmZvKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NjYWxhclxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF93YXRjaGVyX2luZm9cZlAgKndhdGNoaW5mbykiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfd2F0Y2hlcl9oZWxwZXJfaGFuZGxlclxmUCAoXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqaGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgXGZCbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm9cZlAgKnJlcWluZm8sIFxmQm5ldHNubXBfcmVxdWVzdF9pbmZvXGZQICpyZXF1ZXN0cykiCi0uYnIKLS50aSAtMWMKLS5SSSAiXGZCbmV0c25tcF9taWJfaGFuZGxlclxmUCAqIFxmQm5ldHNubXBfZ2V0X3dhdGNoZWRfdGltZXN0YW1wX2hhbmRsZXJcZlAgKHZvaWQpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3dhdGNoZWRfdGltZXN0YW1wX3JlZ2lzdGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICp3aGFuZGxlciwgXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgbWFya2VyX3QgdGltZXN0YW1wKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3RpbWVzdGFtcFxmUCAoXGZCbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvblxmUCAqcmVnaW5mbywgbWFya2VyX3QgdGltZXN0YW1wKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF93YXRjaGVkX3RpbWVzdGFtcF9oYW5kbGVyXGZQIChcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICpoYW5kbGVyLCBcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBcZkJuZXRzbm1wX2FnZW50X3JlcXVlc3RfaW5mb1xmUCAqcmVxaW5mbywgXGZCbmV0c25tcF9yZXF1ZXN0X2luZm9cZlAgKnJlcXVlc3RzKSIKLS5icgotLnRpIC0xYwotLlJJICJcZkJuZXRzbm1wX21pYl9oYW5kbGVyXGZQICogXGZCbmV0c25tcF9nZXRfd2F0Y2hlZF9zcGlubG9ja19oYW5kbGVyXGZQICh2b2lkKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl93YXRjaGVkX3NwaW5sb2NrXGZQIChcZkJuZXRzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uXGZQICpyZWdpbmZvLCBpbnQgKnNwaW5sb2NrKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF93YXRjaGVkX3NwaW5sb2NrX2hhbmRsZXJcZlAgKFxmQm5ldHNubXBfbWliX2hhbmRsZXJcZlAgKmhhbmRsZXIsIFxmQm5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25cZlAgKnJlZ2luZm8sIFxmQm5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvXGZQICpyZXFpbmZvLCBcZkJuZXRzbm1wX3JlcXVlc3RfaW5mb1xmUCAqcmVxdWVzdHMpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX3Vsb25nX3NjYWxhclxmUCAoY29uc3QgY2hhciAqbmFtZSwgb2lkICpyZWdfb2lkLCBzaXplX3QgcmVnX29pZF9sZW4sIHVfbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfdWxvbmdfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgdV9sb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2xvbmdfc2NhbGFyXGZQIChjb25zdCBjaGFyICpuYW1lLCBvaWQgKnJlZ19vaWQsIHNpemVfdCByZWdfb2lkX2xlbiwgbG9uZyAqaXQsIE5ldHNubXBfTm9kZV9IYW5kbGVyICpzdWJoYW5kbGVyKSIKLS5icgotLnRpIC0xYwotLlJJICJpbnQgXGZCbmV0c25tcF9yZWdpc3Rlcl9yZWFkX29ubHlfbG9uZ19zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBsb25nICppdCwgTmV0c25tcF9Ob2RlX0hhbmRsZXIgKnN1YmhhbmRsZXIpIgotLmJyCi0udGkgLTFjCi0uUkkgImludCBcZkJuZXRzbm1wX3JlZ2lzdGVyX2ludF9zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2ludF9zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCBpbnQgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS50aSAtMWMKLS5SSSAiaW50IFxmQm5ldHNubXBfcmVnaXN0ZXJfcmVhZF9vbmx5X2NvdW50ZXIzMl9zY2FsYXJcZlAgKGNvbnN0IGNoYXIgKm5hbWUsIG9pZCAqcmVnX29pZCwgc2l6ZV90IHJlZ19vaWRfbGVuLCB1X2xvbmcgKml0LCBOZXRzbm1wX05vZGVfSGFuZGxlciAqc3ViaGFuZGxlcikiCi0uYnIKLS5pbiAtMWMKLS5TSCAiRGV0YWlsZWQgRGVzY3JpcHRpb24iCi0uUFAgCi1XYXRjaCBhIHNwZWNpZmllZCBcZkJ2YXJpYWJsZVxmUCBhbmQgcHJvY2VzcyBpdCBhcyBhbiBpbnN0YW5jZSBvciBzY2FsYXIgb2JqZWN0LiAKLS5TSCAiQXV0aG9yIgotLlBQIAotR2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgRG94eWdlbiBmb3IgbmV0LXNubXAgZnJvbSB0aGUgc291cmNlIGNvZGUuCmRpZmYgLS1naXQgYS9tYW4vcHJpbnRfZGVzY3JpcHRpb24uMyBiL21hbi9wcmludF9kZXNjcmlwdGlvbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9wcmludF9kZXNjcmlwdGlvbi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcHJpbnRfbWliLjMgYi9tYW4vcHJpbnRfbWliLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3ByaW50X21pYi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcHJpbnRfb2JqaWQuMyBiL21hbi9wcmludF9vYmppZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9wcmludF9vYmppZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcHJpbnRfdmFsdWUuMyBiL21hbi9wcmludF92YWx1ZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9wcmludF92YWx1ZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcHJpbnRfdmFyaWFibGUuMyBiL21hbi9wcmludF92YXJpYWJsZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9wcmludF92YXJpYWJsZS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcmVhZF9hbGxfbWlicy4zIGIvbWFuL3JlYWRfYWxsX21pYnMuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcmVhZF9hbGxfbWlicy4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vcmVhZF9jb25maWcuMy5kZWYgYi9tYW4vcmVhZF9jb25maWcuMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGRiODBkMjEuLjAwMDAwMDAKLS0tIGEvbWFuL3JlYWRfY29uZmlnLjMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMjkyICswLDAgQEAKLS5USCBSRUFEX0NPTkZJRyAzICIyMyBGZWIgMjAwMyIgIiIgIk5ldC1TTk1QIgotLlNIIE5BTUUKLXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyLCByZWdpc3Rlcl9wcmVtaWJfaGFuZGxlcgotdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciwgcmVnaXN0ZXJfbWliX2hhbmRsZXJzLCByZWFkX2NvbmZpZ3MsCi1yZWFkX3ByZW1pYl9jb25maWdzLCBjb25maWdfcGVycm9yLCBjb25maWdfcHdhcm4gLSByZWFkX2NvbmZpZyBmdW5jdGlvbnMKLS5TSCBTWU5PUFNJUwotLkIgI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLS5QUAotLkIgc3RydWN0IGNvbmZpZ19saW5lICoKLS5icgotLkJJICIgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLAotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiIgdG9rZW4gLAotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoidXNhZ2VMaW5lICIpOyIKLS5QUAotLkIgc3RydWN0IGNvbmZpZ19saW5lICoKLS5icgotLkJJICIgIHJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKiIgZmlsZVByZWZpeCAiLCAKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHRva2VuICwKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiBwYXJzZXIgIikoY29uc3QgY2hhciAqLCBjaGFyICopLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICB2b2lkICgqIiByZWxlYXNlciAiKSh2b2lkKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB1c2FnZUxpbmUgIik7IgotLlBQCi0uQkkgInZvaWQgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIGZpbGVQcmVmaXggIiwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIiB0b2tlbiAiKTsiCi0uUFAKLS5CIHN0cnVjdCBjb25maWdfbGluZSAqCi0uYnIKLS5CSSAiICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqIiB0b2tlbiAsCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcGFyc2VyICIpKGNvbnN0IGNoYXIgKiwgY2hhciAqKSwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKiIgcmVsZWFzZXIgIikodm9pZCksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiJ1c2FnZUxpbmUgIik7IgotLlBQCi0uQiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgotLmJyCi0uQkkgIiAgcmVnaXN0ZXJfYXBwX3ByZW1pYl9oYW5kbGVyKGNvbnN0IGNoYXIgKiIgdG9rZW4gLAotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHBhcnNlciAiKShjb25zdCBjaGFyICosIGNoYXIgKiksIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCoiIHJlbGVhc2VyICIpKHZvaWQpLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoiIHVzYWdlTGluZSAiKTsiCi0uUFAKLS5CSSAidm9pZCB1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICIpOyIKLS5QUAotLkJJICJ2b2lkIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKGNoYXIgKiIgbGVhZCAiKTsiCi0uUFAKLS5CICJ2b2lkIHJlYWRfY29uZmlncyh2b2lkKTsiCi0uUFAKLS5CICJ2b2lkIHJlYWRfcHJlbWliX2NvbmZpZ3Modm9pZCk7IgotLlBQCi0uQkkgInZvaWQgY29uZmlnX3B3YXJuKGNvbnN0IGNoYXIgKiIgc3RyaW5nICIpOyIKLS5icgotLkJJICJ2b2lkIGNvbmZpZ19wZXJyb3IoY29uc3QgY2hhciAqIiBzdHJpbmcgIik7IgotCi0uU0ggREVTQ1JJUFRJT04KLVRoZSBmdW5jdGlvbnMgYXJlIGEgZmFpcmx5IGV4dGVuc2libGUgc3lzdGVtIG9mIHBhcnNpbmcgdmFyaW91cwotY29uZmlndXJhdGlvbiBmaWxlcyBhdCB0aGUgcnVuIHRpbWUgb2YgYW4gYXBwbGljYXRpb24uICBUaGUKLWNvbmZpZ3VyYXRpb24gZmlsZSBmbG93IGlzIGJyb2tlbiBpbnRvIHRoZSBmb2xsb3dpbmcgcGhhc2VzOgotLlJTIDQKLS5UUCA0Ci0xLgotUmVnaXN0cmF0aW9uIG9mIGhhbmRsZXJzLgotLlRQCi0yLgotUmVhZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgcHJlLU1JQiBwYXJzaW5nIHJlcXVpcmVtZW50cy4KLS5UUAotMy4KLVJlYWRpbmcgYW5kIHBhcnNpbmcgb2YgdGhlIHRleHR1YWwgTUlCIGZpbGVzLgotLlRQCi00LgotUmVhZGluZyBvZiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzLgotLlRQCi01LgotT3B0aW9uYWxseSByZS1yZWFkaW5nIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGF0IGEgZnV0dXJlIGRhdGUuCi0uUkUKLS5QUAotVGhlIGlkZWEgaXMgdGhhdCB0aGUgY2FsbGluZyBhcHBsaWNhdGlvbiBpcyBhYmxlIHRvIHJlZ2lzdGVyCi0uSSBoYW5kbGVycwotZm9yIGNlcnRhaW4KLS5JIHRva2Vucwotc3BlY2lmaWVkIGluIGNlcnRhaW4gdHlwZXMgb2YKLS5JIGZpbGVzLgotVGhlIAotLkIgcmVhZF9jb25maWdzKCkKLWZ1bmN0aW9uIGNhbiB0aGVuIGJlIGNhbGxlZCB0byBsb29rIGZvciBhbGwgdGhlIGZpbGVzIHRoYXQgaXQgaGFzCi1yZWdpc3RyYXRpb25zIGZvciwgZmluZCB0aGUgZmlyc3Qgd29yZCBvbiBlYWNoIGxpbmUsIGFuZCBwYXNzIHRoZQotcmVtYWluZGVyIHRvIHRoZSBhcHByb3ByaWF0ZWx5IHJlZ2lzdGVyZWQgaGFuZGxlci4KLS5TSCBUT0tFTiBIQU5ETEVSUwotLlBQCi1IYW5kbGVyIGZ1bmN0aW9ucyBzaG91bGQgaGF2ZSB0aGUgZm9sbG93aW5nIHNpZ25hdHVyZToKLS5QUAotLlJTCi0uQkkgInZvaWQgaGFuZGxlcihjb25zdCBjaGFyICoiIHRva2VuICIsIGNoYXIgKiIgbGluZSAiKTsiCi0uUkUKLS5QUAotVGhlIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdpdGggdHdvIGFyZ3VtZW50cywgdGhlIGZpcnN0IGJlaW5nIHRoZQotdG9rZW4gdGhhdCB0cmlnZ2VyZWQgdGhlIGNhbGwgdG8gdGhpcyBmdW5jdGlvbiAod2hpY2ggd291bGQgYmUgb25lIG9mCi10aGUgdG9rZW5zIHRoYXQgdGhlIGZ1bmN0aW9uIGhhZCBiZWVuIHJlZ2lzdGVyZWQgZm9yKSwgYW5kIHRoZSBzZWNvbmQKLWJlaW5nIHRoZSByZW1haW5kZXIgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBsaW5lIGJleW9uZCB0aGUgd2hpdGUKLXNwYWNlIGZvbGxvd2luZyB0aGUgdG9rZW4uCi0uU0ggUkVTT1VSQ0UgRlJFRUlORyBIQU5ETEVSUwotLlBQCi1JZiB0aGUgcGFyYW1ldGVyCi0uSSByZWxlYXNlcgotcGFzc2VkIHRvCi0uQiByZWdpc3Rlcl9jb25maWdfaGFuZGxlcgotaXMgbm9uLU5VTEwsIHRoZW4gdGhlIGZ1bmN0aW9uIHNwZWNpZmllZCBpcyBjYWxsZWQgaWYgYW5kIHdoZW4gdGhlCi1jb25maWd1cmF0aW9uIGZpbGVzIGFyZSByZS1yZWFkLiAgVGhpcyBmdW5jdGlvbiBzaG91bGQgZnJlZSBhbnkKLXJlc291cmNlcyBhbGxvY2F0ZWQgYnkgdGhlIHRva2VuIGhhbmRsZXIgZnVuY3Rpb24gYW5kIHJlc2V0IGl0cyBub3Rpb24KLW9mIHRoZSBjb25maWd1cmF0aW9uIHRvIGl0cyBkZWZhdWx0LiAgVGhlIHRva2VuIGhhbmRsZXIgZnVuY3Rpb24gd2lsbAotdGhlbiBiZSBjYWxsZWQgYWdhaW4uICBObyBhcmd1bWVudHMgYXJlIHBhc3NlZCB0byB0aGUgcmVzb3VyY2UgZnJlZWluZwotaGFuZGxlci4KLS5TSCBSRUdJU1RFUklORyBBIEhBTkRMRVIKLS5UUAotLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQotVGhlCi0uQiBoYW5kbGVyKCkKLWZ1bmN0aW9uIGFib3ZlIGNvdWxkIGJlIHJlZ2lzdGVyZWQgZm9yIHRoZSBjb25maWd1cmF0aW9uIGZpbGUKLS5JIHNubXAuY29uZiwKLXdpdGggdGhlIHRva2VuCi0uSSBnZW5lcmljVG9rZW4KLWFuZCB0aGUgaGVscCBzdHJpbmcgKGRpc2N1c3NlZCBsYXRlcikKLS5JICIiIkFSRzEgW0FSRzJdIiIiCi11c2luZyB0aGUgZm9sbG93aW5nIGNhbGwgdG8gdGhlIAotLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQotZnVuY3Rpb246Ci0uUFAKLS5SUwotLlJTCi1yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJnZW5lcmljVG9rZW4iLCBoYW5kbGVyLCBOVUxMLCAiQVJHMSBbQVJHMl0iKTsKLS5SRQotLlJFCi0uSVAKLVRoaXMgd291bGQgcmVnaXN0ZXIgdGhlCi0uQiBoYW5kbGVyKCkKLWZ1bmN0aW9uIHNvIHRoYXQgaXQgd2lsbCBnZXQgY2FsbGVkIGV2ZXJ5IHRpbWUgdGhlIGZpcnN0IHdvcmQgb2YgYQotbGluZSBpbiB0aGUgCi0uSSBzbm1wLmNvbmYKLWNvbmZpZ3VyYXRpb24gZmlsZShzKSBtYXRjaGVzICJnZW5lcmljVG9rZW4iIChzZWUgCi0uQiByZWFkX2NvbmZpZ3MoKSAKLWJlbG93KS4KLS5UUAotLkIgcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIoKQotVGhlIAotLkIgcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIoKQotZnVuY3Rpb24gd29ya3MgaWRlbnRpY2FsbHkgdG8gdGhlIAotLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQotZnVuY3Rpb24gYnV0IGlzIGludGVuZGVkIGZvciBjb25maWcgZmlsZSB0b2tlbnMgdGhhdCBuZWVkIHRvIGJlIHJlYWQKLWluIGJlZm9yZSB0aGUgdGV4dHVhbCBNSUJzIGFyZSByZWFkIGluLCBwcm9iYWJseSBiZWNhdXNlIHRoZXkgd2lsbCBiZQotdXNlZCB0byBjb25maWd1cmUgdGhlIE1JQiBwYXJzZXIuICBJdCBpcyByYXJlbHkgdGhlIGNhc2UgdGhhdCBhbnl0aGluZyAKLWJ1dCB0aGUgU05NUCBsaWJyYXJ5IGl0c2VsZiBzaG91bGQgbmVlZCB0byB1c2UgdGhpcyBmdW5jdGlvbi4KLS5UUAotLkIgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCi1SZW1vdmVzIHRoZSByZWdpc3RlcmVkIGNvbmZpZ3VyYXRpb24gaGFuZGxlciBmb3IgdGhlCi0uSSBmaWxlUHJlZml4Ci1hbmQKLS5JUiB0b2tlbiAuCi0KLS5UUAotLkIgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCkKLS5UUAotLkIgcmVnaXN0ZXJfYXBwX3ByZW1pYl9oYW5kbGVyKCkKLS5UUAotLkIgdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoKQotVGhlc2UgZnVuY3Rpb25zIGFyZSBhbmFsYWdvdXMgdG8gCi0uQlIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKSAiLCAiIHJlZ2lzdGVyX3ByZW1pYl9oYW5kbGVyKCkgIiBhbmQgIgotLkIgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcigpCi1idXQgZG9uJ3QgcmVxdWlyZSB0aGUgZmlsZSB0eXBlIGFyZ3VtZW50ICh3aGljaCBpcyBmaWxsZWQgaW4gYnkgdGhlCi1hcHBsaWNhdGlvbikuICBJdCBpcyBpbnRlbmRlZCB0aGF0IE1JQiBtb2R1bGVzIHdyaXR0ZW4gZm9yIHRoZSBhZ2VudAotdXNlIHRoZXNlIGZ1bmN0aW9ucyB0byBhbGxvdyB0aGUgYWdlbnQgdG8gaGF2ZSBtb3JlIGNvbnRyb2wgb3ZlciB3aGljaAotY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgcmVhZCAodHlwaWNhbGx5IHRoZQotLkkgc25tcGQuY29uZgotZmlsZXMpLgotLlNIIEhFTFAgU1RSSU5HUwotLlBQCi1UaGUKLS5JIHVzYWdlTGluZQotcGFyYW1ldGVyIHBhc3NlZCB0bwotLkIgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoKQotYW5kIHNpbWlsYXIgY2FsbHMsIGlzIHVzZWQgdG8gZGlzcGxheSBoZWxwIGluZm9ybWF0aW9uIHdoZW4gdGhlCi0uQiByZWFkX2NvbmZpZ19wcmludF91c2FnZSgpCi1mdW5jdGlvbiBpcyBjYWxsZWQuICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgYnkgYWxsIG9mIHRoZSBhcHBsaWNhdGlvbnMKLXdoZW4gdGhlIAotLkIgLUgKLWZsYWcgaXMgcGFzc2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuICBJdCBwcmludHMgYSBzdW1tYXJ5IG9mIGFsbCBvZiB0aGUKLWNvbmZpZ3VyYXRpb24gZmlsZSBsaW5lcywgYW5kIHRoZSBhc3NvY2lhdGVkIGZpbGVzLCB0aGF0IHRoZQotY29uZmlndXJhdGlvbiBzeXN0ZW0gdW5kZXJzdGFuZHMuICBUaGUKLS5JIHVzYWdlTGluZQotcGFyYW1ldGVyIHNob3VsZCBiZSBhIGxpc3Qgb2YgYXJndW1lbnRzIGV4cGVjdGVkIGFmdGVyIHRoZSB0b2tlbiwgYW5kCi1ub3QgYSBsZW5ndGh5IGRlc2NyaXB0aW9uICh3aGljaCBzaG91bGQgZ28gaW50byBhIG1hbnVhbCBwYWdlCi1pbnN0ZWFkKS4gIFRoZQotLkkgbGVhZAotcHJlZml4IHdpbGwgYmUgcHJlcGVuZGVkIHRvIGVhY2ggbGluZSB0aGF0IHRoZSBmdW5jdGlvbiBwcmludHMgdG8KLXN0ZGVyciwgd2hlcmUgaXQgZGlzcGxheXMgaXRzIG91dHB1dC4KLS5QUAotVGhlCi0uQiBpbml0X3NubXAoKQotZnVuY3Rpb24gc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhlCi0uQiByZWFkX2NvbmZpZ19wcmludF91c2FnZSgpCi1mdW5jdGlvbiBpcyBjYWxsZWQsIHNvIHRoYXQgdGhlIGxpYnJhcnkgY2FuIHJlZ2lzdGVyIGl0cyBjb25maWd1cmF0aW9uIAotZmlsZSBkaXJlY3RpdmVzIGFzIHdlbGwgZm9yIHRoZSAKLS5CIHJlYWRfY29uZmlnX3ByaW50X3VzYWdlKCkKLWZ1bmN0aW9uIHRvIGRpc3BsYXkuCi0uU0ggUkVBRElORyBDT05GSUdVUkFUSU9OIEZJTEVTCi0uVFAKLS5CIGluaXRfc25tcCgpCi1PbmNlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIHRva2VuIHBhcnNlcnMgaGF2ZSBiZWVuIHJlZ2lzdGVyZWQsCi0uQiBpbml0X3NubXAoKQotc2hvdWxkIGJlIGNhbGxlZC4gIEl0IHdpbGwgcGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0b2tlbnMKLXJlZ2lzdGVyZWQgd2l0aAotLkIgcmVnaXN0ZXJfcHJlbWliX2hhbmRsZXIoKSwKLXJlYWQgaW4gdGhlIHRleHR1YWwgTUlCIGZpbGVzIHVzaW5nCi0uQiBpbml0X21pYigpLAotYW5kIGZpbmFsbHkgcGFyc2UgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSB0b2tlbnMgcmVnaXN0ZXJlZCB3aXRoIAotLkJSIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCkgLgotLlBQCi1JZiB0aGUgCi0uQiBpbml0X3NubXAoKQotZnVuY3Rpb24gaXMgdXNlZCwgbm9uZSBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBuZWVkIHRvIGJlIGNhbGxlZCBieSAKLXRoZSBhcHBsaWNhdGlvbjoKLS5UUAotLkIgcmVnaXN0ZXJfbWliX2hhbmRsZXJzKCkKLVRoZSBTTk1QIGxpYnJhcnkncyByb3V0aW5lIHRvIHJlZ2lzdGVyIGl0cyBjb25maWd1cmF0aW9uIGZpbGUKLWhhbmRsZXJzLgotLlRQCi0uQiByZWFkX3ByZW1pYl9jb25maWdzKCkKLVRoZSByb3V0aW5lIHRoYXQgcGFyc2VzIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0b2tlbnMgcmVnaXN0ZXJlZAotdG8gYmUgZGVhbHQgd2l0aCBiZWZvcmUgdGhlIHRleHR1YWwgTUlCcyBhcmUgcmVhZCBpbi4gIFNlZSAKLS5CIHJlYWRfY29uZmlncygpCi1iZWxvdy4KLS5UUAotLkIgcmVhZF9jb25maWdzKCkKLVJlYWRzIGFsbCB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBpdCBjYW4gZmluZCBpbiB0aGUgCi0uSSBTTk1QQ09ORlBBVEgKLWVudmlyb25tZW50IHZhcmlhYmxlIChvciBpdHMgZGVmYXVsdCB2YWx1ZSkgZm9yIHRva2VucyBhbmQKLWFwcHJvcHJpYXRlbHkgY2FsbHMgdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWQgdG8gaXQsIG9yIHByaW50cyBhCi0iVW5rbm93biB0b2tlbiIgd2FybmluZyBtZXNzYWdlLiAgSXQgbG9va3MgZm9yIGFueSBmaWxlIHRoYXQgaXQgaGFzCi1wcmV2aW91c2x5IHJlY2VpdmVkIGEgcmVnaXN0cmF0aW9uIHJlcXVlc3QgZm9yLgotLlNIIENPTkZJR1VSQVRJT04gRklMRVMgUkVBRAotLlBQCi1UaGUgY29uZmlndXJhdGlvbiBmaWxlcyByZWFkIGFyZSBmb3VuZCBieSB1c2luZyB0aGUgY29sb24gc2VwYXJhdGVkCi0uSSBTTk1QQ09ORlBBVEgKLWVudmlyb25tZW50IHZhcmlhYmxlIChvciBpdHMgZGVmYXVsdCB2YWx1ZSwgd2hpY2ggd2lsbCBiZQotU1lTQ09ORkRJUi9zbm1wLCBmb2xsb3dlZCBieQotREFUQURJUi9zbm1wLCBmb2xsb3dlZCBieSBMSUJESVIvc25tcCwgZm9sbG93ZWQgYnkgJEhPTUUvLnNubXApIGFuZAotcmVhZGluZyBpbiB0aGUgZmlsZXMgZm91bmQgdGhhdCBtYXRjaCBib3RoIHRoZSBwcmVmaXggcmVnaXN0ZXJlZCBhbmQKLXRoZSB0d28gc3VmZml4ZXMKLS5JIC5jb25mCi1hbmQKLS5JIC5sb2NhbC5jb25mLgotVGhlIGlkZWEgYmVoaW5kIHRoZSB0d28gZGlmZmVyZW50IHN1ZmZpeGVzIGlzIHRoYXQgdGhlIGZpcnN0IGZpbGUgY2FuCi1iZSBzaGFyZWQgKHZpYSByZGlzdCBvciBhbiBORlMgbW91bnQpIGFjcm9zcyBhIGxhcmdlIG51bWJlciBvZgotbWFjaGluZXMgYW5kIHRoZSBzZWNvbmQgZmlsZSBjYW4gYmUgdXNlZCB0byBjb25maWd1cmUgbG9jYWwgc2V0dGluZ3MKLWZvciBvbmUgcGFydGljdWxhciBtYWNoaW5lLiAgVGhleSBkbyBub3QgbmVlZCB0byBiZSBwcmVzZW50LCBhbmQgd2lsbAotb25seSBiZSByZWFkIGlmIGZvdW5kLgotLlNIIEVSUk9SIEhBTkRMSU5HIEZVTkNUSU9OUwotLlBQCi1UaGUgdHdvIGZ1bmN0aW9ucwotLkIgY29uZmlnX3B3YXJuKCkKLWFuZAotLkIgY29uZmlnX3BlcnJvcigpCi1ib3RoIHRha2UgYW4gZXJyb3Igc3RyaW5nIGFzIGFuIGFyZ3VtZW50IGFuZCBwcmludCBpdCB0byBzdGRlcnIgYWxvbmcKLXdpdGggdGhlIGZpbGUgYW5kIGxpbmUgbnVtYmVyIHRoYXQgY2F1c2VkIHRoZSBlcnJvci4gIEEgY2FsbCB0byB0aGUKLXNlY29uZCBmdW5jdGlvbiB3aWxsIGFsc28gZm9yY2UgCi0uQiByZWFkX2NvbmZpZ3MoKSAKLXRvIGV2ZW50dWFsbHkgcmV0dXJuIHdpdGggYW4gZXJyb3IgY29kZSBpbmRpY2F0aW5nIHRvIGl0J3MgY2FsbGluZwotZnVuY3Rpb24gdGhhdCBpdCBzaG91bGQgYWJvcnQgdGhlIG9wZXJhdGlvbiBvZiB0aGUgYXBwbGljYXRpb24uCi0uU0ggIkVOVklST05NRU5UIFZBUklBQkxFUyIKLS5UUCAxMAotU05NUENPTkZQQVRICi1BIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgY29uZmlndXJhdGlvbgotZmlsZXMgaW4uCi1EZWZhdWx0OiBTWVNDT05GRElSL3NubXA6REFUQURJUi9zbm1wOkxJQkRJUi9zbm1wOiRIT01FLy5zbm1wCi0uU0ggIlNFRSBBTFNPIgotLkJSIG1pYl9hcGkgIigzKSwgIiBzbm1wX2FwaSAoMykKLS5cIiBMb2NhbCBWYXJpYWJsZXM6Ci0uXCIgIG1vZGU6IG5yb2ZmCi0uXCIgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3JlYWRfbWliLjMgYi9tYW4vcmVhZF9taWIuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcmVhZF9taWIuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3JlYWRfbW9kdWxlLjMgYi9tYW4vcmVhZF9tb2R1bGUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODBmMzQ4Yi4uMDAwMDAwMAotLS0gYS9tYW4vcmVhZF9tb2R1bGUuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3JlYWRfbW9kdWxlX25vZGUuMyBiL21hbi9yZWFkX21vZHVsZV9ub2RlLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3JlYWRfbW9kdWxlX25vZGUuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3JlYWRfb2JqaWQuMyBiL21hbi9yZWFkX29iamlkLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3JlYWRfb2JqaWQuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NodXRkb3duX21pYi4zIGIvbWFuL3NodXRkb3duX21pYi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9zaHV0ZG93bl9taWIuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL21pYl9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXAtYnJpZGdlLW1pYi4xIGIvbWFuL3NubXAtYnJpZGdlLW1pYi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwZjJiNWUKLS0tIC9kZXYvbnVsbAorKysgYi9tYW4vc25tcC1icmlkZ2UtbWliLjEKQEAgLTAsMCArMSwyMDggQEAKKydcIiB0CisuXCIgICAgIFRpdGxlOiBzbm1wLWJyaWRnZS1taWIKKy5cIiAgICBBdXRob3I6IEplbnMgT3N0ZXJrYW1wIDxqZW5zQGxpbnV4LnZuZXQuaWJtLmNvbT4KKy5cIiBHZW5lcmF0b3I6IERvY0Jvb2sgWFNMIFN0eWxlc2hlZXRzIHYxLjc1LjIgPGh0dHA6Ly9kb2Nib29rLnNmLm5ldC8+CisuXCIgICAgICBEYXRlOiAwMy8yNi8yMDEwCisuXCIgICAgTWFudWFsOiBOZXQtU05NUAorLlwiICAgIFNvdXJjZTogaHR0cDovL3d3dy5pYm0uY29tLyB2NgorLlwiICBMYW5ndWFnZTogRW5nbGlzaAorLlwiCisuVEggIlNOTVBcLUJSSURHRVwtTUlCIiAxICIyNiBNYXIgMjAxMCIgImh0dHA6Ly93d3dcJi5pYm1cJi5jb20vIHY2IiAiTmV0XC1TTk1QIgorLlwiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuXCIgKiBzZXQgZGVmYXVsdCBmb3JtYXR0aW5nCisuXCIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy5cIiBkaXNhYmxlIGh5cGhlbmF0aW9uCisubmgKKy5cIiBkaXNhYmxlIGp1c3RpZmljYXRpb24gKGFkanVzdCB0ZXh0IHRvIGxlZnQgbWFyZ2luIG9ubHkpCisuYWQgbAorLlwiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuXCIgKiBNQUlOIENPTlRFTlQgU1RBUlRTIEhFUkUgKgorLlwiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisuU0ggIk5BTUUiCitzbm1wLWJyaWRnZS1taWIgXC0gcHJvdmlkZSBMaW51eCBicmlkZ2UgaW5mb3JtYXRpb24gdmlhIFNOTVAKKy5TSCAiU1lOT1BTSVMiCisuSFAgXHcnXGZCc25tcFwtYnJpZGdlXC1taWJcZlJcICd1CitcZkJzbm1wXC1icmlkZ2VcLW1pYlxmUiB7YnJpZGdlfQorLlNIICJBUkdVTUVOVFMiCisuUFAKK1RoZSBmb2xsb3dpbmcgYXJndW1lbnRzIGFyZSByZXF1aXJlZDoKKy5QUAorXGZCYnJpZGdlXGZSCisuUlMgNAorVGhlIG5hbWUgb2YgdGhlIExpbnV4IGJyaWRnZSBmb3Igd2hpY2ggeW91IHdhbnQgdG8gcHJvdmlkZSBpbmZvcm1hdGlvbiB2aWEgU05NUCwgZVwmLmdcJi4gYnIwXCYuCisuUkUKKy5TSCAiREVTQ1JJUFRJT04iCisuUFAKK1RoZSBzbm1wXC1icmlkZ2VcLW1pYiBpcyBhbiBleHRlbnNpb24gdG8gbmV0XC1zbm1wXCYuIEl0IGNvbGxlY3RzIGluZm9ybWF0aW9uIGFib3V0IGEgYnJpZGdlIGluIGEgTGludXggc3lzdGVtIGFuZCBleHBvcnRzIHRoZW0gZm9yIHF1ZXJ5IGZyb20gb3RoZXIgKHJlbW90ZSkgc3lzdGVtcyBmb3IgbWFuYWdlbWVudCBwdXJwb3Nlc1wmLgorLlNIICJDT05GSUdVUkFUSU9OOiIKKy5QUAorVGhlIHByZWZlcnJlZCBtZXRob2Qgb2Ygc25tcFwtYnJpZGdlXC1taWIgdG8gYXR0YWNoIHRvIG5ldFwtc25tcCBpcyBhZ2VudHhcJi4gRm9yIHRoaXMgdG8gd29yaywgeW91IHdpbGwgaGF2ZSB0byBhZGQgdGhlIGZvbGxvd2luZyBsaW5lIHRvIC9ldGMvc25tcC9zbm1wZFwmLmNvbmYsCisuc3AKKy5pZiBuIFx7XAorLlJTIDQKKy5cfQorLm5mCisgICAgbWFzdGVyIGFnZW50eAorICAgIAorLmZpCisuaWYgbiBce1wKKy5SRQorLlx9CisuUFAKK3Jlc3RhcnQgc25tcGQgYW5kIHN0YXJ0IHNubXBcLWJyaWRnZVwtbWliXCYuIHNubXBcLWJyaWRnZVwtbWliIHdpbGwgdGhlbiBjb25uZWN0IHRvIHRoZSBydW5uaW5nIHNubXBkIGRhZW1vblwmLgorLlBQCitBbm90aGVyIHdheSBvZiBhdHRhY2hpbmcgc25tcFwtYnJpZGdlXC1taWIgdG8gaXMgdG8gcnVuIGl0IGFzIGFuIGVtYmVkZGVkIHBlcmwgbW9kdWxlXCYuIFlvdSBoYXZlIHRvIGFkZAorLnNwCisuaWYgbiBce1wKKy5SUyA0CisuXH0KKy5uZgorICAgIHBlcmwgZG8gInBhdGggdG8gbG9jYXRpb24gb2Ygc25tcFwtYnJpZGdlXC1taWIiCisgICAgCisuZmkKKy5pZiBuIFx7XAorLlJFCisuXH0KKy5QUAorYW5kIHJlc3RhcnQgc25tcGRcJi4KKy5TSCAiRVhBTVBMRToiCisuUFAKK0ZvbGxvdyB0aGUgaW5zdHJ1Y3Rpb25zIGluIHRoaXMgbWFucGFnZSBhbmQgdHlwZQorLnNwCisuaWYgbiBce1wKKy5SUyA0CisuXH0KKy5uZgorICAgIHBlcmwgL3Vzci9iaW4vc25tcFwtYnJpZGdlXC1taWIgYnIwCisgICAgCisuZmkKKy5pZiBuIFx7XAorLlJFCisuXH0KKy5QUAorWW91XCdsbCBnZXQgdGhlIGZvbGxvd2luZyBvdXRwdXQ6Cisuc3AKKy5pZiBuIFx7XAorLlJTIDQKKy5cfQorLm5mCisgICAgIHJlZ2lzdGVyaW5nIGF0IFwmLjFcJi4zXCYuNlwmLjFcJi4yXCYuMVwmLjE3CisgICAgIHJ1bm5pbmcgYXMgYSBzdWJhZ2VudFwmLgorICAgICBkb3QxcWJyaWRnZSBhZ2VudCBzdGFydGVkXCYuCisgICAgIE5FVFwtU05NUCB2ZXJzaW9uIDVcJi40XCYuMlwmLjEgQWdlbnRYIHN1YmFnZW50IGNvbm5lY3RlZAorICAgICAKKy5maQorLmlmIG4gXHtcCisuUkUKKy5cfQorLlBQCitOb3cgaXRcJ3MgdGltZSBmb3IgYSBmaXJzdCB0ZXN0OgorLnNwCisuaWYgbiBce1wKKy5SUyA0CisuXH0KKy5uZgorICAgICQgZXhwb3J0IE1JQlM9K0JSSURHRVwtTUlCCisgICAgJCBzbm1wd2FsayBsb2NhbGhvc3QgXCYuMVwmLjNcJi42XCYuMVwmLjJcJi4xXCYuMTcKKyAgICAKKy5maQorLmlmIG4gXHtcCisuUkUKKy5cfQorLlBQCitUaGUgb3V0cHV0IHByb2R1Y2VkIHNob3VsZCBsb29rIGxpa2UKKy5zcAorLmlmIG4gXHtcCisuUlMgNAorLlx9CisubmYKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBCcmlkZ2VIZWxsb1RpbWUgPSBJTlRFR0VSOiAxOTkgY2VudGlcLXNlY29uZHMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBCcmlkZ2VGb3J3YXJkRGVsYXkgPSBJTlRFR0VSOiAxNDk5IGNlbnRpXC1zZWNvbmRzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFwmLjEgPSBJTlRFR0VSOiAxCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFwmLjMgPSBJTlRFR0VSOiAzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFByaW9yaXR5XCYuMSA9IElOVEVHRVI6IDMyCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFByaW9yaXR5XCYuMyA9IElOVEVHRVI6IDMyCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFN0YXRlXCYuMSA9IElOVEVHRVI6IGRpc2FibGVkKDEpCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydFN0YXRlXCYuMyA9IElOVEVHRVI6IGRpc2FibGVkKDEpCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydEVuYWJsZVwmLjEgPSBJTlRFR0VSOiBkaXNhYmxlZCgyKQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRFbmFibGVcJi4zID0gSU5URUdFUjogZGlzYWJsZWQoMikKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0UGF0aENvc3RcJi4xID0gSU5URUdFUjogMgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRQYXRoQ29zdFwmLjMgPSBJTlRFR0VSOiA0CisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290XCYuMSA9IFNUUklORzogIjgwMDBcJi4wMDEwMTgzODJjNzgiCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290XCYuMyA9IFNUUklORzogIjgwMDBcJi4wMDEwMTgzODJjNzgiCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0XCYuMSA9IElOVEVHRVI6IDAKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3RcJi4zID0gSU5URUdFUjogMAorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlXCYuMSA9IFNUUklORzogIjgwMDBcJi4wMDEwMTgzODJjNzgiCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRCcmlkZ2VcJi4zID0gU1RSSU5HOiAiODAwMFwmLjAwMTAxODM4MmM3OCIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnRcJi4xID0gU1RSSU5HOiAiMzI3NjkiCisgICAgQlJJREdFXC1NSUI6OmRvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0XCYuMyA9IFNUUklORzogIjMyNzcwIgorICAgIEJSSURHRVwtTUlCOjpkb3QxZFN0cFBvcnRQYXRoQ29zdDMyXCYuMSA9IElOVEVHRVI6IDIKKyAgICBCUklER0VcLU1JQjo6ZG90MWRTdHBQb3J0UGF0aENvc3QzMlwmLjMgPSBJTlRFR0VSOiA0CisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBMZWFybmVkRW50cnlEaXNjYXJkcyA9IENvdW50ZXIzMjogMAorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwQWdpbmdUaW1lID0gSU5URUdFUjogMzAwIHNlY29uZHMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEZkYkFkZHJlc3NcJi5cJ1wmLlwmLlwmLjgseFwnID0gU1RSSU5HOiAwOjEwOjE4OjM4OjJjOjc4CisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBGZGJBZGRyZXNzXCYuXCdcJi4hXi9CfFwnID0gU1RSSU5HOiAwOjIxOjVlOjJmOjQyOjdjCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBGZGJQb3J0XCYuXCdcJi5cJi5cJi44LHhcJyA9IElOVEVHRVI6IDEKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcEZkYlBvcnRcJi5cJ1wmLiFeL0J8XCcgPSBJTlRFR0VSOiAzCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBGZGJTdGF0dXNcJi5cJ1wmLlwmLlwmLjgseFwnID0gSU5URUdFUjogbGVhcm5lZCgzKQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwRmRiU3RhdHVzXCYuXCdcJi4hXi9CfFwnID0gSU5URUdFUjogbGVhcm5lZCgzKQorICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydFwmLjEgPSBJTlRFR0VSOiAxCisgICAgQlJJREdFXC1NSUI6OmRvdDFkVHBQb3J0XCYuMyA9IElOVEVHRVI6IDMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRNYXhJbmZvXCYuMSA9IElOVEVHRVI6IDE1MDAgYnl0ZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRNYXhJbmZvXCYuMyA9IElOVEVHRVI6IDE1MDAgYnl0ZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRJbkZyYW1lc1wmLjEgPSBDb3VudGVyMzI6IDE4MDgyIGZyYW1lcworICAgIEJSSURHRVwtTUlCOjpkb3QxZFRwUG9ydEluRnJhbWVzXCYuMyA9IENvdW50ZXIzMjogMTU0NjA3MiBmcmFtZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRPdXRGcmFtZXNcJi4xID0gQ291bnRlcjMyOiAxMTYwMSBmcmFtZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRPdXRGcmFtZXNcJi4zID0gQ291bnRlcjMyOiAxMDk4OCBmcmFtZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRJbkRpc2NhcmRzXCYuMSA9IENvdW50ZXIzMjogMCBmcmFtZXMKKyAgICBCUklER0VcLU1JQjo6ZG90MWRUcFBvcnRJbkRpc2NhcmRzXCYuMyA9IENvdW50ZXIzMjogMCBmcmFtZXMKKyAgICAKKy5maQorLmlmIG4gXHtcCisuUkUKKy5cfQorLlNIICJCVUdTIgorLnNwCisuUlMgNAorLmllIG4gXHtcCitcaCctMDQnIDEuXGgnKzAxJ1xjCisuXH0KKy5lbCBce1wKKy5zcCAtMQorLklQICIgIDEuIiA0LjIKKy5cfQorc25tcFwtYnJpZGdlXC1taWIgY3VycmVudGx5IG9ubHkgc3VwcG9ydHMgb25lIGJyaWRnZSB3aGljaCBoYXMgdG8gYmUgc3BlY2lmaWVkIG9uIHRoZSBjb21tYW5kbGluZVwmLgorLlJFCisuc3AKKy5SUyA0CisuaWUgbiBce1wKK1xoJy0wNCcgMi5caCcrMDEnXGMKKy5cfQorLmVsIFx7XAorLnNwIC0xCisuSVAgIiAgMi4iIDQuMgorLlx9CitOb3QgYWxsIGVsZW1lbnRzIG9mIFJGQyA0MTg4IGJlY2F1c2UgdGhleSBhcmUgZWl0aGVyIG5vdCBhdmFpbGFibGUgaW4gc3lzZnMgb3IgZGlmZmljdWx0IHRvIGV4dHJhY3QgZnJvbSB0aGUgZXhpc3RpbmcgZGF0YVwmLgorLlJFCisuUFAKKy5TSCAiU0VFIEFMU08iCisuUFAKK1xmQnNubXBkLmNvbmZcZlIoNSksCitcZkJOZXQ6OlNOTVBcZlIoMykKKy5TSCAiQVVUSE9SIgorLlBQCitcZkJKZW5zIE9zdGVya2FtcFxmUiA8XCZqZW5zQGxpbnV4XCYudm5ldFwmLmlibVwmLmNvbVwmPgorLlJTIDQKK0RldmVsb3BlcgorLlJFCisuU0ggIkNPUFlSSUdIVCIKKy5icgorQ29weXJpZ2h0IFwoY28gMjAwOSwgMjAxMCBJQk0gQ29ycC4sIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKy5icgorLlBQCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKy5QUAorVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmVcJi4KKy5QUAorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlRcJi4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkVcJi4KKy5zcApkaWZmIC0tZ2l0IGEvbWFuL3NubXAuY29uZi41LmRlZiBiL21hbi9zbm1wLmNvbmYuNS5kZWYKaW5kZXggNDMyZTA0Yi4uNDYyMDNkMCAxMDA2NDQKLS0tIGEvbWFuL3NubXAuY29uZi41LmRlZgorKysgYi9tYW4vc25tcC5jb25mLjUuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIFNOTVAuQ09ORiA1ICIyMSBGZWIgMjAwNyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QLkNPTkYgNSAiMjEgQXByIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcC5jb25mIC0gY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgdGhlIE5ldC1TTk1QIGFwcGxpY2F0aW9ucwogLlNIIERFU0NSSVBUSU9OCkBAIC0xMiw2ICsxMiwzMiBAQAogY29udGFpbmluZyB0aGUgc2V0dGluZ3Mgc2hhcmVkIGJ5IGFsbCB1c2VycyBvZiB0aGUgc3lzdGVtLgogXGZDfi8uc25tcC9zbm1wLmNvbmZcZlIgaXMgYSBwZXJzb25hbCBmaWxlLCB3aXRoIHRoZSBzZXR0aW5ncwogc3BlY2lmaWMgdG8gYSBwYXJ0aWN1bGFyIHVzZXIuCisuU0ggSE9TVC1TUEVDSUZJQyBGSUxFUworSG9zdC1zcGVjaWZpYyBmaWxlcyBtYXkgYWxzbyBiZSBsb2FkZWQgYW5kIHdpbGwgYmUgc2VhcmNoZWQgZm9yIGlmIGEKK3RyYW5zcG9ydCBuYW1lIGlzIHNwZWNpZmllZCB0aGF0IG1hdGNoZXMgYSBcZklQQVRIL2hvc3RzL0hPU1QuY29uZlxmUgorZmlsZS4gIEZvciBleGFtcGxlLCBpZiB5b3Ugd2FudGVkIGEgcGFydGljdWxhciBob3N0IHRvIHVzZSBTTk1QdjJjIGJ5CitkZWZhdWx0IHlvdSBjb3VsZCBjcmVhdGUgYSB+Ly5zbm1wL2hvc3RzL05BTUUuY29uZiBmaWxlIGFuZCBpbiBpdCBwdXQ6CisuUlMKKy5QUAorZGVmVmVyc2lvbiAyYworLlJFCisuUFAKK0FueSBjb25uZWN0aW9ucyBzZXQgdG8gY29ubmVjdCB0byB0aGUgaG9zdG5hbWUgXGZJTkFNRVxmUiB3aWxsIHVzZQorU05NUHYyYy4gIEFsc28gc2VlIHRoZSBcZkl0cmFuc3BvcnRcZlIgdG9rZW4gYmVsb3cgZm9yIGFkZGl0aW9uYWwKK2hvc3Qtc3BlY2lmaWMgZXhhbXBsZXMuCisuUFAKK0hvc3Qtc3BlY2lmaWMgY29uZmlndXJhdGlvbiBmaWxlcyBhcmUgbG9hZGVkIGF0IHRoZSB0aW1lIHRoZQorY29ubmVjdGlvbiBpcyBvcGVuZWQuICBUaHVzIHRoZXkncmUgZ2VuZXJhbGx5IGxvYWRlZCBhZnRlciBhbGwgb3RoZXIKK2NvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIGNhbiBiZSB1c2VkIHRvIG92ZXJyaWRlIHNldHRpbmdzIGZyb20gdGhlCitnZW5lcmljIGZpbGVzLgorLlBQCitUbyBhdm9pZCBsb2FkaW5nIGFueSBob3N0LXNwZWNpZmljIGNvbmZpZyBmaWxlcyBzZXQKKyJkb250TG9hZEhvc3RDb25maWcgdHJ1ZSIgaW4geW91ciBzbm1wLmNvbmYgZmlsZS4KKy5TSCBDT01NQU5ELUxJTkUgT1BUSU9OUworQWxsIG9mIHRoZSB0b2tlbnMgZGVzY3JpYmVkIGluIHRoaXMgZmlsZSBjYW4gYmUgdXNlZCBvbiB0aGUgY29tbWFuZAorbGluZSBvZiBOZXQtU05NUCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBieSBwcmVmaXhpbmcgdGhlbSB3aXRoICJcLVwtIi4KK0VHLCBzcGVjaWZ5aW5nIFxmSVwtXC1kb250TG9hZEhvc3RDb25maWc9dHJ1ZVxmUiBvbiB0aGUgY29tbWFuZCBsaW5lIHdpbGwKK3R1cm4gb2YgbG9hZGluZyBvZiB0aGUgaG9zdCBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzLgogLlNIIElNUE9SVEFOVCBOT1RFCiBTZXZlcmFsIG9mIHRoZXNlIGRpcmVjdGl2ZXMgbWF5IGNvbnRhaW4gc2Vuc2l0aXZlIGluZm9ybWF0aW9uCiAoc3VjaCBhcyBwYXNzIHBocmFzZXMpLiAgQ29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IGluY2x1ZGUgc3VjaApAQCAtMzgsMTcgKzY0LDQwIEBACiBTZWUgdGhlIFxmSXNubXBjbWQoMSlcZlIgbWFudWFsIHBhZ2UgZm9yIG1vcmUgZGV0YWlscy4KIC5JUAogSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgdG9rZW4gaXMgMTYxLgorLklQICJ0cmFuc3BvcnQgSE9TVFNQRUNJRklFUiIKK1RoaXMgc3BlY2lhbCB0b2tlbiBzaG91bGQgZ28gaW50byBhIGhvc3RuYW1lLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24KK2ZpbGUgaW4gYSBcZklob3N0c1xmUiBzdWItZGlyZWN0b3J5LiAgRm9yIGV4YW1wbGUgaWYgdGhlIGZpbGUKK1xmSWhvc3RzL2Zvby5jb25mXGZSIGV4aXN0cyBpbiB0aGUgc2VhcmNoIHBhdGggaXQgd2lsbCBiZSBsb2FkZWQgaWYgYQordHJhbnNwb3J0IG5hbWUgb2YgXGZJZm9vXGZSIHdhcyB1c2VkLiAgV2l0aGluIHRoZSBmb28uY29uZiBmaWxlIHlvdSBtYXkKK3B1dCBib3RoIGdlbmVyYWwgc25tcC5jb25mIHNldHRpbmdzIGFzIHdlbGwgYXMgYSBzcGVjaWFsCitcZkl0cmFuc3BvcnRcZlIgc3RyaW5nIHRvIHNwZWNpZnkgdGhlIGRlc3RpbmF0aW9uIHRvIGNvbm5lY3QgdG8uICBGb3IKK2V4YW1wbGUsIHB1dHRpbmc6CisuUlMKKy5JUAordHJhbnNwb3J0IHRjcDpmb28uZXhhbXBsZS5jb206OTg3NgorLlJFCisuSVAKK2luIHRoZSBcZklob3N0cy9mb28uY29uZlxmUiBmaWxlIHdpbGwgbWFrZSBhcHBsaWNhdGlvbnMgcmVmZXJlbmNpbmcKK3RoZSBcZklmb29cZlIgaG9zdG5hbWUgKGUuZy4gXGZJc25tcGdldFxmUikgdG8gYWN0dWFsbHkgY29ubmVjdCB2aWEKK1RDUCB0byBcZklmb28uZXhtYXBsZS5jb21cZlIgb24gcG9ydCA5ODc2LgogLklQICJkZWZWZXJzaW9uICgxfDJjfDMpIgogZGVmaW5lcyB0aGUgZGVmYXVsdCB2ZXJzaW9uIG9mIFNOTVAgdG8gdXNlLgotVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLXZcZlIgb3B0aW9uLgorVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC12XGZSIG9wdGlvbi4KIC5JUCAiZGVmQ29tbXVuaXR5IFNUUklORyIKIGRlZmluZXMgdGhlIGRlZmF1bHQgY29tbXVuaXR5IHRvIHVzZSBmb3IgU05NUHYxIGFuZCBTTk1QdjJjIHJlcXVlc3RzLgotVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLWNcZlIgb3B0aW9uLgorVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC1jXGZSIG9wdGlvbi4KIC5cIi5JUCAiZHVtcFBhY2tldCAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKKy5JUCAiYWxpYXMgTkFNRSBERUZJTklUSU9OIgorQ3JlYXRlcyBhbiBhbGlhc2VkIHRpZWQgdG8gTkFNRSBmb3IgYSBnaXZlbiB0cmFuc3BvcnQgZGVmaW5pdGlvbi4gIFRoZQorYWxpYXMgY2FuIHRoZSBiZSByZWZlcnJlZCB0byB1c2luZyBhbiBhbGlhczogcHJlZml4LiAgRWcsIGEgbGluZSBvZgorImFsaWFzIGhlcmUgdWRwOjEyNy4wLjAuMTo2MTYxIiB3b3VsZCBhbGxvdyB5b3UgdG8gdXNlIGEgZGVzdGluYXRpb24KK2hvc3Qgb2YgImFsaWFzOmhlcmUiIGluc3RlYWQgb2YgInVkcDoxMjcuMC4wLjE6NjE2MSIuICBUaGlzIGJlY29tZXMKK21vcmUgdXNlZnVsIHdpdGggY29tcGxleCB0cmFuc3BvcnQgYWRkcmVzc2VzIGludm9sdmluZyBJUHY2IGFkZHJlc3NlcywKK2V0Yy4KIC5JUCAiZHVtcFBhY2tldCB5ZXMiCiBkZWZpbmVzIHdoZXRoZXIgdG8gZGlzcGxheSBhIGhleGFkZWNpbWFsIGR1bXAgb2YgdGhlIHJhdyBTTk1QIHJlcXVlc3RzCiBzZW50IGFuZCByZWNlaXZlZCBieSB0aGUgYXBwbGljYXRpb24uCi1UaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQi1kXGZSIG9wdGlvbi4KK1RoaXMgaXMgZXF1aXZhbGVudCB0byB0aGUgXGZCXC1kXGZSIG9wdGlvbi4KIC5JUCAiZG9EZWJ1Z2dpbmcgKDF8MCkiCiB0dXJucyBvbiBkZWJ1Z2dpbmcgZm9yIGFsbCBhcHBsaWNhdGlvbnMgcnVuIGlmIHNldCB0byAxLgogLlwiCkBAIC01OCw3ICsxMDcsNyBAQAogLklQICJkZWJ1Z1Rva2VucyBUT0tFTlssVE9LRU4uLi5dIgogZGVmaW5lcyB0aGUgZGVidWdnaW5nIHRva2VucyB0aGF0IHNob3VsZCBiZSB0dXJuZWQgb24gd2hlbgogXGZJZG9EZWJ1Z2dpbmdcZlIgaXMgc2V0LgotVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkItRFxmUiBvcHRpb24uCitUaGlzIGlzIGVxdWl2YWxlbnQgdG8gdGhlIFxmQlwtRFxmUiBvcHRpb24uCiAuXCIuSVAgIjE2Yml0SURzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogLklQICIxNmJpdElEcyB5ZXMiCiByZXN0cmljdHMgcmVxdWVzdElEcywgZXRjIHRvIDE2LWJpdCB2YWx1ZXMuCkBAIC05NCw3ICsxNDMsNyBAQAogLklQICJub1JhbmdlQ2hlY2sgeWVzIgogZGlzYWJsZXMgdGhlIHZhbGlkYXRpb24gb2YgdmFyYmluZCB2YWx1ZXMgYWdhaW5zdCB0aGUgTUlCIGRlZmluaXRpb24KIGZvciB0aGUgcmVsZXZhbnQgT0lELgotVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkItSXJcZlIgb3B0aW9uLgorVGhpcyBpcyBlcXVpdmFsZW50IHRvIHRoZSBcZkJcLUlyXGZSIG9wdGlvbi4KIC5JUAogVGhpcyBkaXJlY3RpdmUgaXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvIHRoZSBcZkJzbm1wc2V0XGZSIGNvbW1hbmQsCiBidXQgd2lsbCBhbHNvIGFwcGx5IHRvIGFueSBhcHBsaWNhdGlvbiB0aGF0IGNhbGxzIFxmSXNubXBfYWRkX3ZhcigpXGZSCkBAIC0xMTcsMTYgKzE2NiwyNCBAQAogdGhlIGVuY29kaW5nIGlzIGJhc2ljYWxseSB0aGUgc2FtZSBpbiBlaXRoZXIgY2FzZSAtIGJ1dCB3b3JraW5nCiBiYWNrd2FyZHMgdHlwaWNhbGx5IHByb2R1Y2VzIGEgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgZW5jb2RpbmcsCiBhbmQgaGVuY2UgYSBzbWFsbGVyIG5ldHdvcmsgZGF0YWdyYW0uCisuSVAgImRvbnRMb2FkSG9zdENvbmZpZyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKK1NwZWNpZmllcyB3aGV0aGVyIG9yIG5vdCB0aGUgaG9zdC1zcGVjaWZpYyBjb25maWd1cmF0aW9uIGZpbGVzIGFyZQorbG9hZGVkLiAgU2V0IHRvICJ0cnVlIiB0byB0dXJuIG9mZiB0aGUgbG9hZGluZyBvZiB0aGUgaG9zdCBzcGVjaWZpYworY29uZmlndXJhdGlvbiBmaWxlcy4KKy5JUCAicmV0cmllcyBJTlRFR0VSIgorU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyB0byBiZSB1c2VkIGluIHRoZSByZXF1ZXN0cy4KKy5JUCAidGltZW91dCBJTlRFR0VSIgorU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGluIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzLgogLlwiCiAuXCIgWFhYIC0gSXQgaXMgcHJvYmFibHkgYWJvdXQgdGltZSB0byByZW1vdmUgdGhpcyBjaG9pY2UhCiAuXCIKIC5TSCBTTk1QdjMgU0VUVElOR1MKIC5JUCAiZGVmU2VjdXJpdHlOYW1lIFNUUklORyIKIGRlZmluZXMgdGhlIGRlZmF1bHQgc2VjdXJpdHkgbmFtZSB0byB1c2UgZm9yIFNOTVB2MyByZXF1ZXN0cy4KLVRoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi11XGZSIG9wdGlvbi4KK1RoaXMgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtdVxmUiBvcHRpb24uCiAuSVAgImRlZlNlY3VyaXR5TGV2ZWwgbm9BdXRoTm9Qcml2fGF1dGhOb1ByaXZ8YXV0aFByaXYiCiBkZWZpbmVzIHRoZSBkZWZhdWx0IHNlY3VyaXR5IGxldmVsIHRvIHVzZSBmb3IgU05NUHYzIHJlcXVlc3RzLgotVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLWxcZlIgb3B0aW9uLgorVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC1sXGZSIG9wdGlvbi4KIC5JUAogSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgdG9rZW4gaXMgXGZJbm9BdXRoTm9Qcml2XGZSLgogLlwiCkBAIC0xNDIsNyArMTk5LDcgQEAKIC5JUCAiZGVmUHJpdlBhc3NwaHJhc2UgU1RSSU5HIgogZGVmaW5lIHRoZSBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIGFuZCBwcml2YWN5IHBhc3MgcGhyYXNlcyB0byB1c2UKIGZvciBTTk1QdjMgcmVxdWVzdHMuCi1UaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLUFcZlIgYW5kIFxmQi1YXGZSIG9wdGlvbnMgcmVzcGVjdGl2ZWx5LgorVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQlwtQVxmUiBhbmQgXGZCXC1YXGZSIG9wdGlvbnMgcmVzcGVjdGl2ZWx5LgogLklQCiBUaGUgCiAuQiBkZWZQYXNzcGhyYXNlCkBAIC0xNTIsNyArMjA5LDcgQEAKIC5JUCAiZGVmUHJpdlR5cGUgREVTfEFFUyIKIGRlZmluZSB0aGUgZGVmYXVsdCBhdXRoZW50aWNhdGlvbiBhbmQgcHJpdmFjeSBwcm90b2NvbHMgdG8gdXNlIGZvcgogU05NUHYzIHJlcXVlc3RzLgotVGhlc2UgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIFxmQi1hXGZSIGFuZCBcZkIteFxmUiBvcHRpb25zIHJlc3BlY3RpdmVseS4KK1RoZXNlIGNhbiBiZSBvdmVycmlkZGVuIHVzaW5nIHRoZSBcZkJcLWFcZlIgYW5kIFxmQlwteFxmUiBvcHRpb25zIHJlc3BlY3RpdmVseS4KIC5JUAogSWYgbm90IHNwZWNpZmllZCwgU05NUHYzIHJlcXVlc3RzIHdpbGwgZGVmYXVsdCB0byBNRDUgYXV0aGVudGljYXRpb24KIGFuZCBERVMgZW5jcnlwdGlvbi4KQEAgLTE2NCw3ICsyMjEsNyBAQAogLlJFCiAuSVAgImRlZkNvbnRleHQgU1RSSU5HIgogZGVmaW5lcyB0aGUgZGVmYXVsdCBjb250ZXh0IHRvIHVzZSBmb3IgU05NUHYzIHJlcXVlc3RzLgotVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCLW5cZlIgb3B0aW9uLgorVGhpcyBjYW4gYmUgb3ZlcnJpZGRlbiB1c2luZyB0aGUgXGZCXC1uXGZSIG9wdGlvbi4KIC5JUAogSWYgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgdG9rZW4gaXMgdGhlIGRlZmF1bHQgY29udGV4dAogKGkuZS4gdGhlIGVtcHR5IHN0cmluZyAiIikuCkBAIC0xODMsNyArMjQwLDcgQEAKIG5vcm1hbGx5IGhhcyBiZXR0ZXIgZW50cm9weSB0aGFuIGEgcGFzc3dvcmQgdW5sZXNzIGl0IGlzCiBhbWF6aW5nbHkgbG9uZykuCiBUaGUgZGlyZWN0aXZlcyBhcmUgZXF1aXZhbGVudCB0byB0aGUgc2hvcnQtZm9ybQotY29tbWFuZCBsaW5lIG9wdGlvbnMgXGZCLTNtXGZSLCBcZkItM01cZlIsIFxmQi0za1xmUiwgYW5kIFxmQi0zS1xmUi4KK2NvbW1hbmQgbGluZSBvcHRpb25zIFxmQlwtM21cZlIsIFxmQlwtM01cZlIsIFxmQlwtM2tcZlIsIGFuZCBcZkJcLTNLXGZSLgogLklQCiBMb2NhbGl6ZWQga2V5cyBhcmUKIG1hc3RlciBrZXlzIHdoaWNoIGhhdmUgYmVlbiBjb252ZXJ0ZWQgdG8gYSB1bmlxdWUga2V5IHdoaWNoIGlzIG9ubHkKQEAgLTE5Miw2ICsyNDksMjMgQEAKIGJlaW5nIHVzZWQgKGF1dGgga2V5czogTUQ1PTE2IGJ5dGVzLCBTSEExPTIwIGJ5dGVzOwogcHJpdiBrZXlzOiBERVM9MTYgYnl0ZXMgKDgKIGJ5dGVzIG9mIHdoaWNoIGlzIHVzZWQgYXMgYW4gSVYgYW5kIG5vdCBhIGtleSksIGFuZCBBRVM9MTYgYnl0ZXMpLgorLklQICJzc2h0b3NubXBzb2NrZXQgUEFUSCIKK1NldHMgdGhlIHBhdGggb2YgdGhlIFxmQnNzaHRvc25tcFxmUiBzb2NrZXQgY3JlYXRlZCBieSBhbiBhcHBsaWNhdGlvbgorKGUuZy4gc25tcGQpIGxpc3RlbmluZyBmb3IgaW5jb21pbmcgc3NoIGNvbm5lY3Rpb25zIHRocm91Z2ggdGhlCitcZkJzc2h0b3NubXBcZlIgdW5peCBzb2NrZXQuCisuSVAgInNzaHRvc25tcHNvY2tldHBlcm1zIE1PREUgW09XTkVSIFtHUk9VUF1dIgorU2V0cyB0aGUgbW9kZSwgb3duZXIgYW5kIGdyb3VwIG9mIHRoZSBcZkJzc2h0b3NubXBcZlIgc29ja2V0IGNyZWF0ZWQgYnkKK2FuIGFwcGxpY2F0aW9uIChlLmcuIFxmQnNubXBkXGZSKSBsaXN0ZW5pbmcgZm9yIGluY29taW5nIHNzaCBjb25uZWN0aW9ucwordGhyb3VnaCB0aGUgXGZCc3NodG9zbm1wXGZSIHVuaXggc29ja2V0LiAgVGhlIHNvY2tldCBuZWVkcyB0byBiZSByZWFkL3dyaXRlCitwcml2aWxlZ2VkIGZvciBTU0ggdXNlcnMgdGhhdCBhcmUgYWxsb3dlZCB0byBjb25uZWN0IHRvIHRoZSBTTk1QCitzZXJ2aWNlIChWQUNNIGFjY2VzcyBzdGlsbCBuZWVkcyB0byBiZSBncmFudGVkIGFzIHdlbGwsIG1vc3QgbGlrZWx5Cit0aHJvdWdoIHRoZSBUU00gc2VjdXJpdHkgbW9kZWwpLgorLklQICJzc2h1c2VybmFtZSBOQU1FIgorU2V0cyB0aGUgU1NIIHVzZXIgbmFtZSBmb3IgbG9nZ2luZyBpbnRvIHRoZSByZW1vdGUgc3lzdGVtLgorLklQICJzc2hwdWJrZXkgRklMRSIKK1NldCB0aGUgcHVibGljIGtleSBmaWxlIHRvIHVzZSB3aGVuIGNvbm5lY3RpbmcgdG8gYSByZW1vdGUgc3lzdGVtLgorLklQICJzc2hwcml2a2V5IEZJTEUiCitTZXQgdGhlIHByaXZhdGUga2V5IGZpbGUgdG8gdXNlIHdoZW4gY29ubmVjdGluZyB0byBhIHJlbW90ZSBzeXN0ZW0uCiAuXCIKIC5cIiBYWFggLSBhcmUgdGhlc2UgbGVuZ3RocyBzdGlsbCBjb3JyZWN0ID8KIC5cIgpAQCAtMjE1LDcgKzI4OSw3IEBACiBmb3IgaGFuZGxpbmcgaW5wdXQgdG8gYW5kIG91dHB1dCBmcm9tIGV4dGVybmFsIHNoZWxsIGNvbW1hbmRzLgogVXNlZCBieSB0aGUgXGZJbWtzdGVtcCgpXGZSIGFuZCBcZklta3RlbXAoKVxmUiBmdW5jdGlvbnMuCiAuSVAKLUlmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHBhdHRlcm4gaXMgXGZDL3RtcC9zbm1wZFhYWFhYWFxmUi4KK0lmIG5vdCBzcGVjaWZpZWQsIHRoZSBkZWZhdWx0IHBhdHRlcm4gaXMgXGZDTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTlxmUi4KIC5JUCAic2VydmVyUmVjdkJ1ZiBJTlRFR0VSIgogc3BlY2lmaWVzIHRoZSBkZXNpcmVkIHNpemUgb2YgdGhlIGJ1ZmZlciB0byBiZSB1c2VkIHdoZW4gcmVjZWl2aW5nCiBpbmNvbWluZyBTTk1QIHJlcXVlc3RzLgpAQCAtMjMyLDE4ICszMDYsMTggQEAKIC5TSCBNSUIgSEFORExJTkcKIC5JUCAibWliZGlycyBESVJMSVNUIgogc3BlY2lmaWVzIGEgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQiBmaWxlcy4KLVRoaXMgb3BlcmF0ZXMgaW4gdGhlIHNhbWUgd2F5IGFzIHRoZSBcZkItTVxmUiBvcHRpb24gLQorVGhpcyBvcGVyYXRlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIFxmQlwtTVxmUiBvcHRpb24gLQogc2VlIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiBOb3RlIHRoYXQgdGhpcyB2YWx1ZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUKIC5CIE1JQkRJUlMKLWVudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgdGhlIFxmQi1NXGZSIG9wdGlvbi4KK2Vudmlyb25tZW50IHZhcmlhYmxlLCBhbmQgdGhlIFxmQlwtTVxmUiBvcHRpb24uCiAuSVAgIm1pYnMgTUlCTElTVCIKIHNwZWNpZmllcyBhIGxpc3Qgb2YgTUlCIG1vZHVsZXMgKG5vdCBmaWxlcykgdGhhdCBzaG91bGQgYmUgbG9hZGVkLgotVGhpcyBvcGVyYXRlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIFxmQi1tXGZSIG9wdGlvbiAtCitUaGlzIG9wZXJhdGVzIGluIHRoZSBzYW1lIHdheSBhcyB0aGUgXGZCXC1tXGZSIG9wdGlvbiAtCiBzZWUgXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIE5vdGUgdGhhdCB0aGlzIGxpc3QgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlCiAuQiBNSUJTCi1lbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIHRoZSBcZkItbVxmUiBvcHRpb24uCitlbnZpcm9ubWVudCB2YXJpYWJsZSwgYW5kIHRoZSBcZkJcLW1cZlIgb3B0aW9uLgogLklQICJtaWJmaWxlIEZJTEUiCiBzcGVjaWZpZXMgYSAoc2luZ2xlKSBNSUIgZmlsZSB0byBsb2FkLCBpbiBhZGRpdGlvbiB0byB0aGUKIGxpc3QgcmVhZCBmcm9tIHRoZSBcZkltaWJzXGZSIHRva2VuIChvciBlcXVpdmFsZW50IGNvbmZpZ3VyYXRpb24pLgpAQCAtMjUyLDE0ICszMjYsMTUgQEAKIGVudmlyb25tZW50IHZhcmlhYmxlLgogLklQICJzaG93TWliRXJyb3JzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogd2hldGhlciB0byBkaXNwbGF5IE1JQiBwYXJzaW5nIGVycm9ycy4KLS5JUCAic3RyaWN0Q29tbWVudFRlcm0gKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCisuSVAgImNvbW1lbnRUb0VPTCAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIHdoZXRoZXIgTUlCIHBhcnNpbmcgc2hvdWxkIGJlIHN0cmljdCBhYm91dCBjb21tZW50IHRlcm1pbmF0aW9uLgogTWFueSBNSUIgd3JpdGVycyBhc3N1bWUgdGhhdCBBU04uMSBjb21tZW50cyBleHRlbmQgdG8gdGhlIGVuZCBvZgotdGhlIHRleHQgbGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgdGVybWluYXRlZCBieSB0aGUgbmV4dCAiLS0iIHRva2VuLgordGhlIHRleHQgbGluZSwgcmF0aGVyIHRoYW4gYmVpbmcgdGVybWluYXRlZCBieSB0aGUgbmV4dCAiXC1cLSIgdG9rZW4uCiBUaGlzIHRva2VuIGNhbiBiZSB1c2VkIHRvIGFjY2VwdCBzdWNoIChzdHJpY3RseSBpbmNvcnJlY3QpIE1JQnMuCiAuYnIKLU5vdGUgdGhhdCB0aGlzIGRpcmVjdGl2ZSBpcyBwb29ybHkgbmFtZWQsIHNpbmNlIGEgdmFsdWUgb2YgInRydWUiCi13aWxsIHR1cm4gXGZJb2ZmXGZQIHRoZSBzdHJpY3QgaW50ZXJwcmV0YXRpb24gb2YgTUlCIGNvbW1lbnRzLgorTm90ZSB0aGF0IHRoaXMgZGlyZWN0aXZlIHdhcyBwcmV2aW91cyAobWlzLSluYW1lZCBcZklzdHJpY3RDb21tZW50VGVybVxmUiwKK2J1dCB3aXRoIHRoZSByZXZlcnNlIGJlaGF2aW91ciBmcm9tIHRoYXQgaW1wbGllZCBieSB0aGUgbmFtZS4KK1RoaXMgZWFybGllciB0b2tlbiBpcyBzdGlsbCBhY2NlcHRlZCBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuCiAuSVAgIm1pYkFsbG93VW5kZXJsaW5lICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogd2hldGhlciB0byBhbGxvdyB1bmRlcmxpbmUgY2hhcmFjdGVycyBpbiBNSUIgb2JqZWN0IG5hbWVzIGFuZAogZW51bWVyYXRpb24gdmFsdWVzLgpAQCAtMjc1LDU2ICszNTAsNjUgQEAKIGJlaW5nIHBhc3NlZCB0byB0aGUgbG9nZ2luZyByb3V0aW5lcy4gIFRoaXMgb3B0aW9uIGlzIG9ubHkgdXNlZCB3aGVuIGZpbGUgbG9nZ2luZyBpcyBhY3RpdmUuIAogLklQICJwcmludE51bWVyaWNFbnVtcyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT2UgLgorLkJSIFwtT2UgLgogLklQICJwcmludE51bWVyaWNPaWRzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PbiAuCisuQlIgXC1PbiAuCiAuSVAgImRvbnRCcmVha2Rvd25PaWRzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PYiAuCisuQlIgXC1PYiAuCiAuSVAgImVzY2FwZVF1b3RlcyAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIEVxdWl2YWxlbnQgdG8KLS5CUiAtT0UgLgorLkJSIFwtT0UgLgogLklQICJxdWlja1ByaW50aW5nICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PcSAuCisuQlIgXC1PcSAuCiAuSVAgInByaW50VmFsdWVPbmx5ICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PdiAuCisuQlIgXC1PdiAuCiAuSVAgImRvbnRQcmludFVuaXRzICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PVSAuCisuQlIgXC1PVSAuCiAuSVAgIm51bWVyaWNUaW1ldGlja3MgKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU90IC4KKy5CUiBcLU90IC4KIC5JUCAicHJpbnRIZXhUZXh0ICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgogRXF1aXZhbGVudCB0bwotLkJSIC1PVCAuCisuQlIgXC1PVCAuCiAuSVAgImhleE91dHB1dExlbmd0aCBpbnRlZ2VyIgogU3BlY2lmaWVzIHdoZXJlIHRvIGJyZWFrIHVwIHRoZSBvdXRwdXQgb2YgaGV4YWRlY2ltYWwgc3RyaW5ncy4gIAogU2V0IHRvIDAgdG8gZGlzYWJsZSBsaW5lIGJyZWFrcy4gIERlZmF1bHRzIHRvIDE2LgogLklQICJzdWZmaXhQcmludGluZyAoMHwxfDIpIgogVGhlIHZhbHVlIDEgaXMgZXF1aXZhbGVudCB0bwotLkIgLU9zCisuQiBcLU9zCiBhbmQgdGhlIHZhbHVlIDIgaXMgZXF1aXZhbGVudCB0bwotLkJSIC1PUyAuCisuQlIgXC1PUyAuCiAuSVAgIm9pZE91dHB1dEZvcm1hdCAoMXwyfDN8NHw1fDYpIgotTWFwcyAtTyBvcHRpb25zIGFzIGZvbGxvdzogLU9zPTEsIC1PUz0yLCAtT2Y9MywgLU9uPTQsIC1PdT01LgotVGhlIHZhbHVlIDYgaGFzIG5vIG1hdGNoaW5nIC1PIG9wdGlvbi4gSXQgc3VwcHJlc3NlcyBvdXRwdXQuCitNYXBzIFwtTyBvcHRpb25zIGFzIGZvbGxvdzogXC1Pcz0xLCBcLU9TPTIsIFwtT2Y9MywgXC1Pbj00LCBcLU91PTUuCitUaGUgdmFsdWUgNiBoYXMgbm8gbWF0Y2hpbmcgXC1PIG9wdGlvbi4gSXQgc3VwcHJlc3NlcyBvdXRwdXQuCiAuSVAgImV4dGVuZGVkSW5kZXggKDF8eWVzfHRydWV8MHxub3xmYWxzZSkiCiBFcXVpdmFsZW50IHRvCi0uQlIgLU9YIC4KKy5CUiBcLU9YIC4KIC5JUCAibm9EaXNwbGF5SGludCAoMXx5ZXN8dHJ1ZXwwfG5vfGZhbHNlKSIKIERpc2FibGVzIHRoZSB1c2Ugb2YgRElTUExBWS1ISU5UIGluZm9ybWF0aW9uIHdoZW4gcGFyc2luZyBpbmRpY2VzIGFuZAogdmFsdWVzIHRvIHNldC4gRXF1aXZhbGVudCB0bwotLkJSIC1JaCAuCisuQlIgXC1JaCAuCiAuU0ggRklMRVMKLVNZU0NPTkZESVIvc25tcC9zbm1wLmNvbmYsCi1TWVNDT05GRElSL3NubXAvc25tcC5sb2NhbC5jb25mIC0gY29tbW9uIGNvbmZpZ3VyYXRpb24gc2V0dGluZ3MKKy5JUCAiU3lzdGVtLXdpZGUgY29uZmlndXJhdGlvbiBmaWxlczoiCitTWVNDT05GRElSL3NubXAvc25tcC5jb25mCiAuYnIKLX4vLnNubXAvc25tcC5jb25mIC0gdXNlci1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHNldHRpbmdzCitTWVNDT05GRElSL3NubXAvc25tcC5sb2NhbC5jb25mCisuSVAgIlVzZXItc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXR0aW5nczoiCiskSE9NRS8uc25tcC9zbm1wLmNvbmYKKy5icgorJEhPTUUvLnNubXAvc25tcC5sb2NhbC5jb25mCisuSVAgIkRlc3RpbmF0aW9uIGhvc3Qgc3BlY2lmaWMgZmlsZXM6CitTWVNDT05GRElSL3NubXAvaG9zdHMvSE9TVE5BTUUuY29uZgorLmJyCiskSE9NRS8uc25tcC9ob3N0cy9IT1NUTkFNRS5jb25mCisKIC5TSCAiU0VFIEFMU08iCi1zbm1wX2NvbmZpZyg1KSwgcmVhZF9jb25maWcoMyksIHNubXBjbWQoMSkuCitzbm1wX2NvbmZpZyg1KSwgbmV0c25tcF9jb25maWdfYXBpKDMpLCBzbm1wY21kKDEpLgogLlwiIExvY2FsIFZhcmlhYmxlczoKIC5cIiAgbW9kZTogbnJvZmYKIC5cIiBFbmQ6CmRpZmYgLS1naXQgYS9tYW4vc25tcF9hZ2VudF9hcGkuMy5kZWYgYi9tYW4vc25tcF9hZ2VudF9hcGkuMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzZTQwZGUuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfYWdlbnRfYXBpLjMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMTMyICswLDAgQEAKLS5USCBTTk1QX0FHRU5UX0FQSSAzICIwMSBBdWcgMjAwMiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKLS5TSCBOQU1FCi1zbm1wX2FnZW50X2FwaSBcLSBlbWJlZGRpbmcgYW4gYWdlbnQgaW50byBhIGV4dGVybmFsIGFwcGxpY2F0aW9uCi0uU0ggU1lOT1BTSVMKLS5uZgotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KLQotaW50Ci1tYWluIChpbnQgYXJnYywgY2hhciAqYXJndltdKQotewotICBpbnQgYWdlbnR4X3N1YmFnZW50ID0gMTsgIC8qIENoYW5nZSB0aGlzIGlmIHlvdSdyZSBhIG1hc3RlciBhZ2VudC4gICovCi0KLSAgc25tcF9lbmFibGVfc3RkZXJybG9nKCk7Ci0KLSAgLyogIElmIHdlJ3JlIGFuIEFnZW50WCBzdWJhZ2VudC4uLiAgKi8KLSAgaWYgKGFnZW50eF9zdWJhZ2VudCkgewotICAgICAgLyogLi4ubWFrZSB1cyBhbiBBZ2VudFggY2xpZW50LiAgKi8KLSAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9ST0xFLCAxKTsKLSAgfQotCi0gIGluaXRfYWdlbnQoInlvdXJhcHBuYW1lIik7Ci0KLSAgLyogIEluaXRpYWxpemUgeW91ciBNSUIgY29kZSBoZXJlLiAgKi8KLSAgaW5pdF9teV9taWJfY29kZSgpOwotCi0gIC8qICBgeW91cmFwcG5hbWUnIHdpbGwgYmUgdXNlZCB0byByZWFkIHlvdXJhcHBuYW1lLmNvbmYgZmlsZXMuICAqLwotICBpbml0X3NubXAoInlvdXJhcHBuYW1lIik7Ci0KLSAgLyogIElmIHdlJ3JlIGdvaW5nIHRvIGJlIGEgU05NUCBtYXN0ZXIgYWdlbnQuLi4gICovCi0gIGlmICghYWdlbnR4X3N1YmFnZW50KQotICAgICAgaW5pdF9tYXN0ZXJfYWdlbnQoKTsgIC8qICBMaXN0ZW4gb24gZGVmYXVsdCBwb3J0ICgxNjEpLiAgKi8KLQotICAvKiAgWW91ciBtYWluIGxvb3AgaGVyZS4uLiAgKi8KLSAgd2hpbGUgKHdoYXRldmVyKSB7Ci0gICAgICAvKiBpZiB5b3UgdXNlIHNlbGVjdCgpLCBzZWUgc25tcF9hcGkoMykgKi8KLSAgICAgIC8qICAgICAtLS0gT1IgLS0tICAqLwotICAgICAgYWdlbnRfY2hlY2tfYW5kX3Byb2Nlc3MoMCk7IC8qIDAgPT0gZG9uJ3QgYmxvY2sgKi8KLSAgfQotCi0gIC8qICBBdCBzaHV0ZG93biB0aW1lOiAgKi8KLSAgc25tcF9zaHV0ZG93bigieW91cmFwcG5hbWUiKTsKLX0KLQotVGhlbjoKLSQoQ0MpIC4uLiBgbmV0LXNubXAtY29uZmlnIC0tYWdlbnQtbGlic2AKLQotLmZpCi0uU0ggREVTQ1JJUFRJT04KLS5QUAotT3VyIGdvYWwgaXMgdG8gY3JlYXRlIGEgZWFzeSB0byB1c2UgaW50ZXJmYWNlIHRvIHRoZSBOZXQtU05NUCBwYWNrYWdlCi1zdWNoIHRoYXQgeW91IGNhbiB0YWtlIGNvZGUgdGhhdCB5b3UgaGF2ZSB3cml0dGVuIHRoYXQgaGFzIGJlZW4KLWRlc2lnbmVkIHRvIGJlIGEgTmV0LVNOTVAgTUlCIG1vZHVsZSBhbmQgZW1iZWQgaXQgaW50byBhbiBleHRlcm5hbAotYXBwbGljYXRpb24gd2hlcmUgeW91IGNhbiBlaXRoZXIgY2hvc2UgdG8gYmUgYSBTTk1QIG1hc3RlciBhZ2VudCBvciBhbgotQWdlbnRYIHN1Yi1hZ2VudCB1c2luZyB0aGUgc2FtZSBNSUIgbW9kdWxlIGNvZGUuICBPdXIgc3VnZ2VzdGlvbiBpcwotdGhhdCB5b3UgdXNlIG91ciAob3IgYW5vdGhlcikgU05NUCBhZ2VudCBhcyB0aGUgQWdlbnRYIG1hc3RlciBhZ2VudAotYW5kIGNob3NlIHRvIGJlY29tZSBhbiBBZ2VudFggc3ViYWdlbnQgd2hpY2ggdGhlbiBhdHRhY2hlcyB0byB0aGUKLW1hc3Rlci4KLS5QUAotVGhlIE5ldC1TTk1QIHBhY2thZ2UgcHJvdmlkZXMgYSBwYWlyIG9mIGxpYnJhcmllcyB0aGF0IGVuYWJsZXMgZWFzeQotZW1iZWRkaW5nIG9mIGFuIFNOTVAgb3IgQWdlbnRYIGFnZW50IGludG8gYW4gZXh0ZXJuYWwgc29mdHdhcmUKLXBhY2thZ2UuIEFnZW50WCBpcyBhbiBleHRlbnNpYmxlIHByb3RvY29sIGRlc2lnbmVkIHRvIGFsbG93IG11bHRpcGxlCi1TTk1QIHN1Yi1hZ2VudHMgYWxsIHJ1biBvbiBvbmUgbWFjaGluZSB1bmRlciBhIHNpbmdsZSBTTk1QIG1hc3RlcgotYWdlbnQuICBJdCBpcyBkZWZpbmVkIGluIFJGQyAyNzQxLgotLlBQCi1Zb3Ugd2lsbCBuZWVkIHRvIHBlcmZvcm0gYSBmZXcgdGFza3MgaW4gb3JkZXIgdG8gYWNjb21wbGlzaAotdGhpcy4gRmlyc3Qgb2ZmLCB5b3Ugd2lsbCBuZWVkIHRvIGluaXRpYWxpemUgYm90aCB0aGUgU05NUCBsaWJyYXJ5IGFuZAotdGhlIFNOTVAgYWdlbnQgbGlicmFyeS4gQXMgaW5kaWNhdGVkIGFib3ZlLCB0aGlzIGlzIGRvbmUgc2xpZ2h0bHkKLWRpZmZlcmVudGx5IGRlcGVuZGluZyBvbiB3aGV0aGVyIG9yIG5vdCB5b3UgYXJlIGdvaW5nIHRvIHBlcmZvcm0gYXMgYQotbWFzdGVyIGFnZW50IG9yIGFuIEFnZW50WCBzdWItYWdlbnQuCi0uU0ggQ09ORklHVVJBVElPTgotLlBQCi1JZiB5b3UgaW50ZW5kIHRvIG9wZXJhdGUgYXMgYW4gQWdlbnRYIHN1Yi1hZ2VudCwgeW91IHdpbGwgaGF2ZSB0bwotY29uZmlndXJlZCB0aGUgTmV0LVNOTVAgcGFja2FnZSB3aXRoIGFnZW50eCBzdXBwb3J0ICh3aGljaCBpcyB0dXJuZWQKLW9uIGJ5IGRlZmF1bHQsIHNvIGp1c3QgZG9uJ3QgdHVybiBpdCBvZmYpCi0uUFAKLUFkZGl0aW9uYWxseSwgeW91IHdpbGwgbmVlZCB0byBsaW5rIGFnYWluc3QgdGhlIG5ldC1zbm1wIGxpYnJhcmllcwotKHVzZSB0aGUgb3V0cHV0IG9mICJuZXQtc25tcC1jb25maWcgLS1hZ2VudC1saWJzIiB0byBnZXQgYSBsaWJyYXJ5Ci1saXN0KSBhbmQgY2FsbCBzdWJhZ2VudF9wcmVfaW5pdCgpIGFzIGluZGljYXRlZCBhYm92ZS4KLS5TSCBDT01QSUxJTkcKLS5QUAotSW4gb3JkZXIgdG8gbWFrZSB1c2Ugb2YgYW55IG9mIHRoZSBhYm92ZSBBUEksIHlvdSB3aWxsIG5lZWQgdG8gbGluawotYWdhaW5zdCBhdCBsZWFzdCB0aGUgZm91ciBsaWJyYXJpZXMgbGlzdGVkIGFib3ZlLgotLlNIIEZVTkNUSU9OUwotLlBQIFRoaXMgaXMgYSBicmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgZnVuY3Rpb25zIGNhbGxlZCBhYm92ZSBhbmQKLXdoZXJlIHRvIGZpbmQgb3V0IG1vcmUgaW5mb3JtYXRpb24gb24gdGhlbS4gIEl0IGlzIGNlcnRhaW5seSBub3QgYQotY29tcGxldGUgbGlzdCBvZiB3aGF0IGlzIGF2YWlsYWJsZSB3aXRoaW4gYWxsIHRoZSBuZXQtc25tcCBsaWJyYXJpZXMuIAotLklQICJzbm1wX2VuYWJsZV9zdGRlcnJsb2coKSIKLUxvZ3MgZXJyb3Igb3V0cHV0IGZyb20gdGhlIFNOTVAgYWdlbnQgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KLS5JUCAibmV0c25tcF9kc19zZXRfYm9vbGVhbigpIgotUGxlYXNlIHNlZSB0aGUKLS5JUiBkZWZhdWx0X3N0b3JlKDMpCi1tYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbgotYWJvdXQgdGhpcyBBUEkuCi0uSVAgImluaXRfYWdlbnQoY2hhciAqbmFtZSkiCi1Jbml0aWFsaXplcyB0aGUgZW1iZWRkZWQgYWdlbnQuICBUaGlzIHNob3VsZCBiZSBjYWxsZWQgYmVmb3JlIHRoZQotLkJSICJpbml0X3NubXAoKSIKLWNhbGwuICAKLS5JIG5hbWUKLWlzIHVzZWQgdG8gZGljdGF0ZSB3aGF0IC5jb25mIGZpbGUgdG8gcmVhZCB3aGVuCi0uQlIgImluaXRfc25tcCgpIgotaXMgY2FsbGVkIGxhdGVyLgotLklQICJpbml0X3NubXAoY2hhciAqbmFtZSkiCi1Jbml0aWFsaXplcyB0aGUgU05NUCBsaWJyYXJ5LiAgTm90ZSB0aGF0IG9uZSBvZiB0aGUgdGhpbmdzIHRoaXMgd2lsbAotZG8gd2lsbCBiZSB0byByZWFkIGNvbmZpZ3VyYXRpb24gZmlsZXMgaW4gYW4gZWZmb3J0IHRvIGNvbmZpZ3VyZSB5b3VyCi1hcHBsaWNhdGlvbi4gSXQgd2lsbCBhdHRlbXB0IHRvIHJlYWQgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgbmFtZWQgYnkKLXRoZQotLkkgbmFtZQotc3RyaW5nIHRoYXQgeW91IHBhc3NlZCBpbi4gIEl0IGNhbiBiZSB1c2VkIHRvIGNvbmZpZ3VyZSBhY2Nlc3MKLWNvbnRyb2wsIGZvciBpbnN0YW5jZS4gICBQbGVhc2Ugc2VlIHRoZQotLklSIHJlYWRfY29uZmlnKDMpICIsICIgc25tcF9jb25maWcoNSkgIiwgYW5kICIgc25tcGQuY29uZig1KQotbWFudWFsIHBhZ2VzIGZvciBmdXJ0aGVyIGRldGFpbHMgb24gdGhpcyBzdWJqZWN0LgotLklQICJpbml0X21hc3Rlcl9hZ2VudCh2b2lkKSIKLUluaXRpYWxpemVzIHRoZSBtYXN0ZXIgYWdlbnQgYW5kIGNhdXNlcyBpdCB0byBsaXN0ZW4gZm9yIFNOTVAgcmVxdWVzdHMgCi1vbiBpdHMgZGVmYXVsdCBVRFAgcG9ydCBvZiAxNjEuCi0uSVAgImFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKGludCBibG9jaykiCi1UaGlzIGNoZWNrcyBmb3IgcGFja2V0cyBhcnJpdmluZyBvbiB0aGUgU05NUCBwb3J0IGFuZCBwcm9jZXNzZXMgdGhlbQotaWYgc29tZSBhcmUgZm91bmQuICBJZiAKLS5JIGJsb2NrCi1pcyBub24temVybywgdGhlIGZ1bmN0aW9uIGNhbGwgd2lsbCBibG9jayB1bnRpbCBhIHBhY2tldCBhcnJpdmVzIG9yIGFuIAotYWxhcm0gbXVzdCBiZSBydW4gKHNlZQotLklSIHNubXBfYWxhcm0oMykgKS4KLVRoZSByZXR1cm4gdmFsdWUgZnJvbSB0aGlzIGZ1bmN0aW9uIGlzIGEgcG9zaXRpdmUgaW50ZWdlciBpZiBwYWNrZXRzCi13ZXJlIHByb2Nlc3NlZCwgemVybyBpZiBhbiBhbGFybSBvY2N1cnJlZCBhbmQgLTEgaWYgYW4gZXJyb3Igb2NjdXJlZC4KLS5JUCAic25tcF9zaHV0ZG93bihjaGFyICpuYW1lKTsiCi1UaGlzIHNodXRzIGRvd24gdGhlIGFnZW50LCBzYXZpbmcgYW55IG5lZWRlZCBwZXJzaXN0ZW50IHN0b3JhZ2UsIGV0Yy4KLS5TSCAiU0VFIEFMU08iCi1odHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L3Rvb2xraXQvLCBzZWxlY3QoMiksIHNubXBfYXBpKDMpLAotZGVmYXVsdF9zdG9yZSgzKSwgc25tcF9hbGFybSgzKSwgcmVhZF9jb25maWcoMyksIHNubXBfY29uZmlnKDUpLAotc25tcGQuY29uZig1KQpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfYWxhcm0uMy5kZWYgYi9tYW4vc25tcF9hbGFybS4zLmRlZgppbmRleCAwOTFmMjIwLi42Yzc5YTIwIDEwMDY0NAotLS0gYS9tYW4vc25tcF9hbGFybS4zLmRlZgorKysgYi9tYW4vc25tcF9hbGFybS4zLmRlZgpAQCAtMSw2ICsxLDggQEAKIC5USCBTTk1QX0FMQVJNIDMgIjAxIEF1ZyAyMDAyIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKLXNubXBfYWxhcm1fcmVnaXN0ZXIsIHNubXBfYWxhcm1fcmVnaXN0ZXJfaHIsIHNubXBfYWxhcm1fdW5yZWdpc3RlciAtIGFsYXJtIGZ1bmN0aW9ucworc25tcF9hbGFybV9yZWdpc3RlciwKK3NubXBfYWxhcm1fcmVnaXN0ZXJfaHIsCitzbm1wX2FsYXJtX3VucmVnaXN0ZXIgLSBhbGFybSBmdW5jdGlvbnMKIC5TSCBTWU5PUFNJUwogLkIgI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgogLlBQCkBAIC0xNjEsNyArMTYzLDcgQEAKIHN5c3RlbSBjYWxsLCBhbHRob3VnaCBvdmVyYWxsIHByZWNpc2lvbiBpcyBvZiBjb3Vyc2Ugc3RpbGwgZGV0ZXJtaW5lZAogYnkgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbS4gIFJlY29tbWVuZGVkLgogLlNIICJTRUUgQUxTTyIKLS5CUiBzbm1wX2FwaSAiKDMpLCAiIGRlZmF1bHRfc3RvcmUgIigzKSwgIiBzbm1wX3NlbGVjdF9pbmZvICIoMyksICIKKy5CUiBuZXRzbm1wX3Nlc3Npb25fYXBpICIoMyksICIgZGVmYXVsdF9zdG9yZSAiKDMpLCAiCiAuQlIgYWxhcm0gIigyKSwgIiBzZXRpdGltZXIgIigyKSwgIiBzZWxlY3QgIigyKSIKIC5cIiBMb2NhbCBWYXJpYWJsZXM6CiAuXCIgIG1vZGU6IG5yb2ZmCmRpZmYgLS1naXQgYS9tYW4vc25tcF9hcGkuMy5kZWYgYi9tYW4vc25tcF9hcGkuMy5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxY2I5OTEuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfYXBpLjMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMjYzICswLDAgQEAKLS5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLS5cIiAJQ29weXJpZ2h0IDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKLS5cIiAKLS5cIiAgICAgICAgICAgICAgICAgICAgICAgQWxsIFJpZ2h0cyBSZXNlcnZlZAotLlwiIAotLlwiIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyAKLS5cIiBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIAotLlwiIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKLS5cIiBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gCi0uXCIgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBDTVUgbm90IGJlCi0uXCIgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlCi0uXCIgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgCi0uXCIgCi0uXCIgQ01VIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcKLS5cIiBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwKLS5cIiBDTVUgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SCi0uXCIgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLAotLlwiIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKLS5cIiBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCi0uXCIgU09GVFdBUkUuCi0uXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBfQVBJIDMgIjE5IE1heSAyMDExIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgotLlNIIE5BTUUKLXNubXBfc2Vzc19pbml0LCBzbm1wX29wZW4sIHNubXBfc2VuZCwgc25tcF9hc3luY19zZW5kLCBzbm1wX2ZyZWVfcGR1LCBzbm1wX3NlbGVjdF9pbmZvLCBzbm1wX3JlYWQsIHNubXBfdGltZW91dCwgc25tcF9zeW5jaF9yZXNwb25zZSwgc25tcF9jbG9zZSwgc25tcF9wZXJyb3IsIHNubXBfc2Vzc19wZXJyb3IsIHNubXBfZXJyb3IsIHNubXBfYXBpX2VycnN0cmluZyBcLSBzZW5kIGFuZCByZWNlaXZlIFNOTVAgbWVzc2FnZXMKLS5TSCBTWU5PUFNJUwotI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+Ci0uUFAKLXZvaWQgc25tcF9zZXNzX2luaXQgKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICogKTsKLS5QUAotc3RydWN0IHNubXBfc2Vzc2lvbiAqIHNubXBfb3BlbiAoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKik7Ci0uUlMKLS5CIC8qIElucHV0IHBhcmFtZXRlciBub3QgdXNlZCBpbiBhY3RpdmUgc2Vzc2lvbnMgKi8KLS5SRQotLlBQCi1pbnQgc25tcF9zZW5kICggc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKLS5SUwotc3RydWN0IHNubXBfcGR1ICpwZHUgKTsKLS5SRQotLlBQCi1pbnQgc25tcF9hc3luY19zZW5kICggc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKLS5SUwotc3RydWN0IHNubXBfcGR1ICpwZHUsCi1zbm1wX2NhbGxiYWNrIGNhbGxiYWNrLAotdm9pZCAqY2FsbGJhY2tEYXRhICk7Ci0uUkUKLS5QUAotaW50IHNubXBfc2VsZWN0X2luZm8gKCBpbnQgKm51bWZkcywgZmRfc2V0ICpmZHNldCwKLS5SUwotc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2sgKTsKLS5SRQotLlBQCi12b2lkIHNubXBfcmVhZCAoIGZkX3NldCAqZmRzZXQgKTsKLS5QUAotdm9pZCBzbm1wX3RpbWVvdXQgKCB2b2lkICk7Ci0uUFAKLWludCBzbm1wX3N5bmNoX3Jlc3BvbnNlICggc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKLS5SUwotc3RydWN0IHNubXBfcGR1ICpwZHUsCi1zdHJ1Y3Qgc25tcF9wZHUgKipyZXNwb25zZSk7Ci0uUkUKLS5QUAotaW50IHNubXBfY2xvc2UgKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzZXNzaW9uICk7Ci0uUFAKLXZvaWQgc25tcF9mcmVlX3BkdSAoCi1zdHJ1Y3Qgc25tcF9wZHUgKnBkdSApOwotLlBQCi12b2lkIHNubXBfZXJyb3IgKAotc3RydWN0IHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKLS5SUwotaW50ICpwY2xpYmVyciwKLWludCAqcHNubXBlcnIsCi1jaGFyICoqcHBlcnJzdHJpbmcgKTsKLS5SRQotLlBQCi1jaGFyICpzbm1wX2FwaV9lcnJzdHJpbmcgKCBpbnQgc25tcGVyciApOwotLlBQCi12b2lkIHNubXBfcGVycm9yICggY2hhciAqIG1zZyApOwotLlJTCi0uQiAvKiBmb3IgcGFyc2luZyBlcnJvcnMgb25seSAqLwotLlJFCi0uUFAKLXZvaWQgc25tcF9zZXNzX3BlcnJvciAoY2hhciAqIG1zZywgc3RydWN0IHNubXBfc2Vzc2lvbiAqKTsKLS5SUwotLkIgLyogYWxsIG90aGVyIFNOTVAgbGlicmFyeSBlcnJvcnMgKi8KLS5SRQotLlBQCi0uU0ggREVTQ1JJUFRJT04KLS5JIFNubXBfc2Vzc19pbml0Ci1wcmVwYXJlcyBhIHN0cnVjdCBzbm1wX3Nlc3Npb24gdGhhdCBzb3VyY2VzIHRyYW5zcG9ydCBjaGFyYWN0ZXJpc3RpY3MKLWFuZCBjb21tb24gaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEgc2V0IG9mIFNOTVAgdHJhbnNhY3Rpb25zLgotQWZ0ZXIgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvCi0uSSBzbm1wX29wZW4KLXRvIGNyZWF0ZSBhbiBTTk1QIHNlc3Npb24sIHRoZSBzdHJ1Y3R1cmUgaXMgbm90IHVzZWQuCi0uUFAKLS5JIFNubXBfb3BlbgotcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseS1mb3JtZWQKLS5JIHN0cnVjdCBzbm1wX3Nlc3Npb24KLW9iamVjdCwgd2hpY2ggdGhlIGFwcGxpY2F0aW9uIG11c3QgdXNlIHRvIHJlZmVyZW5jZSB0aGUKLWFjdGl2ZSBTTk1QIHNlc3Npb24uCi0uUFAKLS5JIFNubXBfc2VuZCwgc25tcF9hc3luY19zZW5kCi1hbmQKLS5JIHNubXBfZnJlZV9wZHUKLWVhY2ggdGFrZSBhcyBpbnB1dCBhIHBvaW50ZXIgdG8gYQotLkkgc3RydWN0IHNubXBfcGR1Ci1vYmplY3QuCi1UaGlzIHN0cnVjdHVyZSBjb250YWlucyBpbmZvcm1hdGlvbiB0aGF0IGRlc2NyaWJlcyBhIHRyYW5zYWN0aW9uCi10aGF0IHdpbGwgYmUgcGVyZm9ybWVkIG92ZXIgYW4gb3BlbiBzZXNzaW9uLgotLlBQCi1Db25zdWx0IHNubXBfYXBpLmggZm9yIHRoZSBkZWZpbml0aW9ucyBvZiB0aGVzZSBzdHJ1Y3R1cmVzLgotLlBQCi1XaXRoIHRoZQotLkkgc25tcF9hc3luY19zZW5kKCkKLWNhbGwsCi0uSSBzbm1wX3JlYWQoKQotd2lsbCBpbnZva2UgdGhlIHNwZWNpZmllZCBjYWxsYmFjayB3aGVuIHRoZSByZXNwb25zZSBpcyByZWNlaXZlZC4KLS5QUAotLkkgU25tcF9yZWFkLCBzbm1wX3NlbGVjdF9pbmZvLAotYW5kCi0uSSBzbm1wX3RpbWVvdXQKLXByb3ZpZGUgYW4gaW50ZXJmYWNlIGZvciB0aGUgdXNlIG9mIHRoZQotLklSIHNlbGVjdCgyKQotc3lzdGVtIGNhbGwgc28gdGhhdCBTTk1QIHRyYW5zYWN0aW9ucyBjYW4gb2NjdXIgYXN5bmNocm9ub3VzbHkuCi0uUFAKLS5JIFNubXBfc2VsZWN0X2luZm8KLWlzIGdpdmVuIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwYXNzZWQgdG8KLS5JIHNlbGVjdAotaW4gdGhlIGFic2VuY2Ugb2YgU05NUC4gIEZvciBleGFtcGxlLCB0aGlzIG1pZ2h0IGluY2x1ZGUgd2luZG93IHVwZGF0ZSBpbmZvcm1hdGlvbi4KLVRoaXMgaW5mb3JtYXRpb24gaXMgbW9kaWZpZWQgc28gdGhhdCBTTk1QIHdpbGwgZ2V0IHRoZSBzZXJ2aWNlIGl0IHJlcXVpcmVzIGZyb20gdGhlCi1jYWxsIHRvCi0uSSBzZWxlY3QuCi1JbiB0aGlzIGNhc2UsCi0uSSBudW1mZHMsIGZkc2V0LAotYW5kCi0uSSB0aW1lb3V0Ci1jb3JyZXNwb25kIHRvIHRoZQotLkkgbmZkcywgcmVhZGZkcywKLWFuZAotLkkgdGltZW91dAotYXJndW1lbnRzIHRvCi0uSSBzZWxlY3QsCi1yZXNwZWN0aXZlbHkuICBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aW1lb3V0IG11c3QgYWx3YXlzIHBvaW50IHRvIGFuIGFsbG9jYXRlZCAoYnV0IHBlcmhhcHMgdW5pbml0aWFsaXplZCkKLS5JIHN0cnVjdCB0aW1ldmFsLgotSWYKLS5JIHRpbWVvdXQKLXdvdWxkIGhhdmUgYmVlbiBwYXNzZWQgYXMgTlVMTCwKLS5JIGJsb2NrCi1pcyBzZXQgdG8gdHJ1ZSwgYW5kCi0uSSB0aW1lb3V0Ci1pcyB0cmVhdGVkIGFzIHVuZGVmaW5lZC4gIFRoaXMgc2FtZSBydWxlIGFwcGxpZXMgdXBvbiByZXR1cm4gZnJvbQotLkkgc25tcF9zZWxlY3RfaW5mby4KLS5QUAotQWZ0ZXIgY2FsbGluZwotLkkgc25tcF9zZWxlY3RfaW5mbywgc2VsZWN0Ci1pcyBjYWxsZWQgd2l0aCB0aGUgcmV0dXJuZWQgZGF0YS4gIFdoZW4gc2VsZWN0IHJldHVybnMsCi0uSSBzbm1wX3JlYWQKLXNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUKLS5JIGZkX3NldAotcmV0dXJuZWQgZnJvbQotLkkgc2VsZWN0Ci10byByZWFkIGVhY2ggU05NUCBzb2NrZXQgdGhhdCBoYXMgaW5wdXQuCi1JZgotLkkgc2VsZWN0Ci10aW1lcyBvdXQsCi0uSSBzbm1wX3RpbWVvdXQKLXNob3VsZCBiZSBjYWxsZWQgdG8gc2VlIGlmIHRoZSB0aW1lb3V0IHdhcyBpbnRlbmRlZCBmb3IgU05NUC4KLS5QUAotLkkgc25tcF9zeW5jaF9yZXNwb25zZQotaXMgYSBjb252ZW5pZW5jZSByb3V0aW5lIHRoYXQgd2lsbCBzZW5kIHRoZSByZXF1ZXN0LAotd2FpdCBmb3IgdGhlIHJlc3BvbnNlIGFuZCBwcm9jZXNzIGl0IGJlZm9yZSByZXR1cm5pbmcuCi1TZWUgdGhlIGRlc2NyaXB0aW9ucyBvZgotLkkgc25tcF9zZW5kLCBzbm1wX3JlYWQKLWV0YyBmb3IgZGV0YWlscy4KLS5TSCBESUFHTk9TVElDUwotLlBQCi1QcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgbGlicmFyeSB1c2VkCi0uSVIgc25tcF9nZXRfZXJybm8KLXRvIHJlYWQgdGhlIGdsb2JhbCB2YXJpYWJsZQotLkkgc25tcF9lcnJubwotd2hpY2ggbWF5IGhhdmUgaGVsZCB0aGUgZXJyb3Igc3RhdHVzIHdpdGhpbiB0aGUgU05NUCBsaWJyYXJ5LgotVGhlIGV4aXN0aW5nIG1ldGhvZAotLkkgc25tcF9wZXJyb3IKLXNob3VsZCBiZSB1c2VkIHRvIGxvZyBBU04uMSBjb2RpbmcgZXJyb3JzIG9ubHkuCi0uUFAKLVRoZSBuZXcgbWV0aG9kCi0uSSBzbm1wX3Nlc3NfcGVycm9yCi1pcyBwcm92aWRlZCB0byBjYXB0dXJlIGVycm9ycyB0aGF0IG9jY3VyIGR1cmluZyB0aGUgcHJvY2Vzc2luZwotb2YgYSBwYXJ0aWN1bGFyIFNOTVAgc2Vzc2lvbi4KLS5JIFNubXBfc2Vzc19wZXJyb3IKLWNhbGxzCi0uSVIgc25tcF9lcnJvcgotZnVuY3Rpb24gdG8gb2J0YWluIHRoZSAiQyIgbGlicmFyeSBlcnJvcgotLkkgZXJybm8KLSwgdGhlIFNOTVAgbGlicmFyeSBlcnJvcgotLkkgc25tcGVycgotLCBhbmQgdGhlIFNOTVAgbGlicmFyeSBkZXRhaWxlZCBlcnJvciBtZXNzYWdlCi10aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhbiBlcnJvciB0aGF0IG9jY3VycmVkIGR1cmluZyBhIGdpdmVuIHNlc3Npb24uCi0uUFAKLU5vdGUgdGhhdCBpbiBhbGwgY2FzZXMgZXhjZXB0IG9uZSwKLS5JUiBzbm1wX3Nlc3NfcGVycm9yCi1zaG91bGQgYmUgaGFuZGVkIHRoZQotLkkgc3RydWN0IHNubXBfc2Vzc2lvbiAqCi1wb2ludGVyIHJldHVybmVkIGZyb20KLS5JUiBzbm1wX29wZW4uCi1JZgotLklSIHNubXBfb3BlbgotcmV0dXJucyBhIG51bGwgcG9pbnRlciwgcGFzcyB0aGUgSU5QVVQKLS5JIHN0cnVjdCBzbm1wX3Nlc3Npb24gKgotcG9pbnRlciB1c2VkIHRvIGNhbGwKLS5JUiBzbm1wX29wZW4uCi0uUFAKLUVycm9yIHJldHVybiBzdGF0dXMgZnJvbSAKLS5JIHNubXBfY2xvc2UKLWFuZAotLkkgc25tcF9zZW5kCi1pcyBpbmRpY2F0ZWQgYnkgcmV0dXJuIG9mIDAuICBBIHN1Y2Nlc3NmdWwgc3RhdHVzIHdpbGwgcmV0dXJuIGEgMSBmb3IKLS5JIHNubXBfY2xvc2UKLWFuZCB0aGUgcmVxdWVzdCBpZCBvZiB0aGUgcGFja2V0IGZvcgotLkkgc25tcF9zZW5kLgotVXBvbiBzdWNjZXNzZnVsIHJldHVybiBmcm9tCi0uSSBzbm1wX3NlbmQKLXRoZSBwZHUgd2lsbCBiZSBmcmVlZCBieSB0aGUgbGlicmFyeS4KLS5QUAotQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgY29tcGxldGUgc2V0IG9mIFNOTVAgbGlicmFyeQotZXJyb3IgdmFsdWVzLgotVGhlIFNOTVAgbGlicmFyeSBlcnJvciB2YWx1ZQotLklSIHNubXBlcnIKLWNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0uUlMgMm4KLS5JUCBTTk1QRVJSX0dFTkVSUiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1BIGdlbmVyaWMgZXJyb3Igb2NjdXJyZWQuCi0uSVAgU05NUEVSUl9CQURfTE9DUE9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1UaGUgbG9jYWwgcG9ydCB3YXMgYmFkIGJlY2F1c2UgaXQgaGFkIGFscmVhZHkgYmVlbgotYWxsb2NhdGVkIG9yIHBlcm1pc3Npb24gd2FzIGRlbmllZC4KLS5JUCBTTk1QRVJSX0JBRF9BRERSRVNTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLVRoZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBnaXZlbiB3YXMgbm90IHVzZWFibGUuCi0uSVAgU05NUEVSUl9CQURfU0VTU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1UaGUgc3BlY2lmaWVkIHNlc3Npb24gd2FzIG5vdCBvcGVuLgotLklQIFNOTVBFUlJfVE9PX0xPTkcgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfTk9fU09DS0VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1YyX0lOX1YxIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1YxX0lOX1YyIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9SRVBFQVRFUlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1JFUEVUSVRJT05TIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9BU04xX0JVSUxEIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9TRU5EVE8gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1BBUlNFIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9WRVJTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX05PQVVUSF9ERVNQUklWIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0FCT1JUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1VOS05PV05fUERVIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1RJTUVPVVQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLlJFCi0uUFAKLUEgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlcnJvciBjb2RlIGNhbiBiZSBvYnRhaW5lZCB3aXRoCi0uSVIgc25tcF9hcGlfZXJyc3RyaW5nICwKLWFuZCBhIHN0YW5kYXJkIGVycm9yIG1lc3NhZ2UgbWF5IGJlIHByaW50ZWQgdXNpbmcKLS5JIHNubXBfcGVycm9yCi10aGF0IGZ1bmN0aW9ucyBsaWtlIHRoZQotLkkgcGVycm9yCi1zdGFuZGFyZCByb3V0aW5lLgotLlNIICJTRUUgQUxTTyIKLXNlbGVjdCgyKSwgc25tcF9hcGkuaApkaWZmIC0tZ2l0IGEvbWFuL3NubXBfYXBpX2VycnN0cmluZy4zIGIvbWFuL3NubXBfYXBpX2VycnN0cmluZy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX2FwaV9lcnJzdHJpbmcuMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2Nsb3NlLjMgYi9tYW4vc25tcF9jbG9zZS4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX2Nsb3NlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9jb25maWcuNS5kZWYgYi9tYW4vc25tcF9jb25maWcuNS5kZWYKaW5kZXggZTdhYzRhNi4uZmQzMDg3MyAxMDA2NDQKLS0tIGEvbWFuL3NubXBfY29uZmlnLjUuZGVmCisrKyBiL21hbi9zbm1wX2NvbmZpZy41LmRlZgpAQCAtMSw0ICsxLDQgQEAKLS5USCBTTk1QX0NPTkZJRyA1ICI1IE1heSAyMDA1IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBfQ09ORklHIDUgIjA4IE1hciAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBfY29uZmlnIC0gaGFuZGxpbmcgb2YgTmV0LVNOTVAgY29uZmlndXJhdGlvbiBmaWxlcwogLlNIIERFU0NSSVBUSU9OCkBAIC0xMSw5ICsxMSwxMCBAQAogY29uZmlndXJhdGlvbiBmaWxlcyBpbiB0aGUgZm9sbG93aW5nIDQgZGlyZWN0b3JpZXMsIGluIG9yZGVyOgogU1lTQ09ORkRJUi9zbm1wLAogREFUQURJUi9zbm1wLCBMSUJESVIvc25tcCwgYW5kICRIT01FLy5zbm1wLiAgSW4gZWFjaCBvZiB0aGVzZQotZGlyZWN0b3JpZXMsIGl0IGxvb2tzIGZvciBmaWxlcyB3aXRoIHRoZSBleHRlbnNpb24gb2YgYm90aAotLklSIGNvbmYgIiBhbmQgIiBsb2NhbC5jb25mCi0ocmVhZGluZyB0aGUgc2Vjb25kIG9uZXMgbGFzdCkuICBJbiB0aGlzIG1hbm5lciwgdGhlcmUgYXJlCitkaXJlY3RvcmllcywgaXQgbG9va3MgZm9yIGZpbGVzIHNubXAuY29uZiwgc25tcGQuY29uZiBhbmQvb3IKK3NubXB0cmFwZC5jb25mLCBhcyB3ZWxsIGFzIHNubXAubG9jYWwuY29uZiwgc25tcGQubG9jYWwuY29uZgorYW5kL29yIHNubXB0cmFwZC5sb2NhbC5jb25mLiAqLmxvY2FsLmNvbmYgYXJlIGFsd2F5cworcmVhZCBsYXN0LiBJbiB0aGlzIG1hbm5lciwgdGhlcmUgYXJlCiA4IGRlZmF1bHQgcGxhY2VzIGEgY29uZmlndXJhdGlvbiBmaWxlIGNhbiBleGlzdCBmb3IgYW55IGdpdmVuCiBjb25maWd1cmF0aW9uIGZpbGUgdHlwZS4KIC5QUApAQCAtMTcxLDE1ICsxNzIsNDQgQEAKIC5QUAogQW55IGxpbmVzIGJlZ2lubmluZyB3aXRoIHRoZSBjaGFyYWN0ZXIgJyMnIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzCiBhcmUgdHJlYXRlZCBhcyBhIGNvbW1lbnQgYW5kIGFyZSBub3QgcGFyc2VkLgorLlNIICJJTkNMVURJTkcgT1RIRVIgQ09ORklHVVJBVElPTiBGSUxFUyIKK0l0IGlzIHBvc3NpYmxlIHRvIGluY2x1ZGUgb3RoZXIgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgcHJvY2Vzc2luZworZHVyaW5nIG5vcm1hbCBjb25maWd1cmF0aW9uIGZpbGUgcHJvY2Vzc2luZy46CisuUFAKKy5SUworLm5mCisjIGluY2x1ZGUgc2l0ZSBzcGVjaWZpYyBjb25maWcKK2luY2x1ZGVGaWxlIHNpdGUuY29uZgorLlJFCisuUFAKK1RoaXMgd2lsbCBsb2FkIHRoZSBzcGVjaWZpZWQgY29uZmlndXJhdGlvbiBmaWxlLiBUaGUKK3BhdGggdG8gZmlsZSBtdXN0IGJlIGVpdGhlciBhYnNvbHV0ZSwgc3RhcnRpbmcgd2l0aCAnLycsCitvciByZWxhdGl2ZS4gVGhlIHJlbGF0aXZlIHBhdGggaXMgdGhlbiByZWxhdGl2ZSB0byB0aGUgZGlyZWN0b3J5Cit3aGVyZSB0aGUgcGFyZW50IGZpbGUgd2l0aCAnaW5jbHVkZUZpbGUnIGRpcmVjdGl2ZSByZXNpZGVzLgorLlBQCitUaGUgaW5jbHVkZWQgZmlsZSBuYW1lIGRvZXMgbm90IG5lZWQgdG8gaGF2ZSAnLmNvbmYnIHN1ZmZpeC4KKy5QUAorLlJTCisubmYKKyMgaW5jbHVkZSBhIGFsbCAqLmNvbmYgZmlsZXMgaW4gYSBkaXJlY3RvcnkKK2luY2x1ZGVEaXIgL2V0Yy9zbm1wL2NvbmZpZy5kCisuUkUKKy5QUAorVGhpcyB3aWxsIHNlYXJjaCBzcGVjaWZpZWQgZGlyZWN0b3J5IGZvciBhbGwgZmlsZXMgd2l0aCAnLmNvbmYnCitzdWZmaXggYW5kIHByb2Nlc3MgdGhlbSBhcyBpZiB0aGV5IHdlcmUgaW5jbHVkZWQgdXNpbmcgaW5jbHVkZUZpbGUKK2RpcmVjdGl2ZS4gVGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgYXJlIG5vdCBwcm9jZXNzZWQgaW4gYW55IHBhcnRpY3VsYXIKK29yZGVyLgorLlBQCitUaGUgc3BlY2lmaWVkIGRpcmVjdG9yeSBtdXN0IGJlIGFic29sdXRlIGRpcmVjdG9yeSBwYXRoLgogLlNIICJBUEkgSU5URVJGQUNFIgogLlBQCiBJbmZvcm1hdGlvbiBhYm91dCB3cml0aW5nIEMgY29kZSB0aGF0IG1ha2VzIHVzZSBvZiB0aGlzIHN5c3RlbSBpbgogZWl0aGVyIHRoZSBhZ2VudCdzIE1JQiBtb2R1bGVzIG9yIGluIGFwcGxpY2F0aW9ucyBjYW4gYmUgZm91bmQgaW4gdGhlCi0uSSByZWFkX2NvbmZpZygzKQorLkkgbmV0c25tcF9jb25maWdfYXBpKDMpCiBtYW51YWwgcGFnZS4KIC5TSCAiU0VFIEFMU08iCiBzbm1wY29uZigxKSwKLXJlYWRfY29uZmlnKDMpLAorbmV0c25tcF9jb25maWdfYXBpKDMpLAogc25tcC5jb25mKDUpLAogc25tcGQuY29uZig1KQogLlwiIExvY2FsIFZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL21hbi9zbm1wX2Vycm9yLjMgYi9tYW4vc25tcF9lcnJvci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX2Vycm9yLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9mcmVlX3BkdS4zIGIvbWFuL3NubXBfZnJlZV9wZHUuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9mcmVlX3BkdS4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfb3Blbi4zIGIvbWFuL3NubXBfb3Blbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX29wZW4uMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3BlcnJvci4zIGIvbWFuL3NubXBfcGVycm9yLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfcGVycm9yLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9yZWFkLjMgYi9tYW4vc25tcF9yZWFkLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfcmVhZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfc2VsZWN0X2luZm8uMyBiL21hbi9zbm1wX3NlbGVjdF9pbmZvLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2VsZWN0X2luZm8uMworKysgL2Rldi9udWxsCkBAIC0xICswLDAgQEAKLS5zbyBtYW4zL3NubXBfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3NlbmQuMyBiL21hbi9zbm1wX3NlbmQuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGMxNmJhZi4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZW5kLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX2FwaS4zLmRlZiBiL21hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODQxNGZjLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfYXBpLjMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMjI4ICswLDAgQEAKLS5USCBTTk1QX1NFU1NfQVBJIDMgIjE5IE1heSAyMDExIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgotLlNIIE5BTUUKLXNubXBfc2Vzc19pbml0LCBzbm1wX3Nlc3Nfb3Blbiwgc25tcF9zZXNzX3Nlc3Npb24sCi1zbm1wX3Nlc3Nfc2VuZCwgc25tcF9zZXNzX2FzeW5jX3NlbmQsCi1zbm1wX3Nlc3Nfc2VsZWN0X2luZm8sIHNubXBfc2Vzc19yZWFkLAotc25tcF9zZXNzX3RpbWVvdXQsIHNubXBfc2Vzc19zeW5jaF9yZXNwb25zZSwKLXNubXBfc2Vzc19jbG9zZSwgc25tcF9zZXNzX2Vycm9yIC0gc2Vzc2lvbiBmdW5jdGlvbnMKLS5TSCBTWU5PUFNJUwotLkIgI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+Ci0uUFAKLS5CSSAidm9pZCBzbm1wX3Nlc3NfaW5pdChzdHJ1Y3Qgc25tcF9zZXNzaW9uICoiIHNlc3Npb24gIik7IgotLlBQCi0uQkkgInZvaWQgKnNubXBfc2Vzc19vcGVuKHN0cnVjdCBzbm1wX3Nlc3Npb24gKiIgc2Vzc2lvbiAiKTsiCi0uUFAKLS5CSSAic3RydWN0IHNubXBfc2Vzc2lvbiAqc25tcF9zZXNzX3Nlc3Npb24odm9pZCAqIiBoYW5kbGUgIik7IgotLlBQCi0uQkkgImludCBzbm1wX3Nlc3Nfc2VuZCh2b2lkICoiIGhhbmRsZSAiLCBzdHJ1Y3Qgc25tcF9wZHUgKiIgcGR1ICIpOyIKLS5QUAotLkJJICJpbnQgc25tcF9zZXNzX2FzeW5jX3NlbmQodm9pZCAqIiBoYW5kbGUgIiwiCi0uYnIKLS5CSSAiICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzbm1wX3BkdSAqIiBwZHUgIiwgIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2NhbGxiYWNrICIgY2FsbGJhY2sgIiwgIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoiIGNhbGxiYWNrRGF0YSAiKTsiCi0uUFAKLS5CSSAiaW50IHNubXBfc2Vzc19zZWxlY3RfaW5mbyh2b2lkICoiIGhhbmRsZSAiLCIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIiBudW1mZHMgIiwgZmRfc2V0ICoiIGZkc2V0ICIsICIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsICoiIHRpbWVvdXQgIiwgIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICoiIGJsb2NrICIpOyIKLS5QUAotLkJJICJpbnQgc25tcF9zZXNzX3JlYWQodm9pZCAqIiBoYW5kbGUgIiwgZmRfc2V0ICoiIGZkc2V0ICIpOyIKLS5QUAotLkJJICJ2b2lkIHNubXBfc2Vzc190aW1lb3V0KHZvaWQgKiIgaGFuZGxlICIpOyIKLS5QUAotLkJJICJpbnQgc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHZvaWQgKiIgaGFuZGxlICIsIgotLmJyCi0uQkkgIiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc25tcF9wZHUgKiIgcGR1ICIsICIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfcGR1ICoqIiByZXNwb25zZSAiKTsiCi0uUFAKLS5CSSAiaW50IHNubXBfc2Vzc19jbG9zZSh2b2lkICoiIGhhbmRsZSAiKTsiCi0uUFAKLS5CSSAidm9pZCBzbm1wX3Nlc3NfZXJyb3Iodm9pZCAqIiBoYW5kbGUgIiwgaW50ICoiIHBjbGliZXJyICIsICIKLS5icgotLkJJICIgICAgICAgICAgICAgICAgICAgIGludCAqIiBwc25tcGVyciAiLCBjaGFyICoqIiBwcGVycnN0cmluZyAiKTsiCi0uU0ggREVTQ1JJUFRJT04KLVRoZXNlIGZ1bmN0aW9ucyBkZWZpbmUgYSBzdWJzZXQgb2YgdGhlIEFQSSB0aGF0IGNhbiBiZSB1c2VkCi10byBtYW5hZ2Ugc2luZ2xlIFNOTVAgc2Vzc2lvbnMgaW4gYSBtdWx0aS10aHJlYWRlZCBhcHBsaWNhdGlvbi4KLUV4Y2VwdCBmb3IKLS5CUiBzbm1wX3Nlc3Nfc2Vzc2lvbigpICwKLXRoZXNlIGZ1bmN0aW9ucyBhcmUgc2luZ2xlIHNlc3Npb24gdmVyc2lvbnMgb2YgdGhlIHRyYWRpdGlvbmFsCi1TTk1QIGxpYnJhcnkgQVBJLgotLlBQCi1Ob3RlIHRoYXQgdGhlc2UgZnVuY3Rpb25zIHVzZSBhbiBvcGFxdWUgcG9pbnRlcgotLlJJICggaGFuZGxlCi1pbiB0aGUgYWJvdmUgcHJvdG90eXBlcykgdG8gaWRlbnRpZnkgYSBzaW5nbGUgc2Vzc2lvbiBpbiBsaWV1IG9mIGEKLS5JIHNlc3Npb24KLXBvaW50ZXIgKGFzIGluIHRoZSB0cmFkaXRpb25hbCBBUEkpLgotLlBQCi0uQiBzbm1wX3Nlc3NfaW5pdCgpCi1wcmVwYXJlcyBhIHN0cnVjdCBzbm1wX3Nlc3Npb24gdGhhdCBzb3VyY2VzIHRyYW5zcG9ydCBjaGFyYWN0ZXJpc3RpY3MKLWFuZCBjb21tb24gaW5mb3JtYXRpb24gdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGEgc2V0IG9mIFNOTVAgdHJhbnNhY3Rpb25zLgotQWZ0ZXIgdGhpcyBzdHJ1Y3R1cmUgaXMgcGFzc2VkIHRvCi0uQiBzbm1wX3Nlc3Nfb3BlbigpCi10byBjcmVhdGUgYW4gU05NUCBzZXNzaW9uLCB0aGUgc3RydWN0dXJlIGlzIG5vIGxvbmdlciB1c2VkLiAgSW5zdGVhZAotdGhlIG9wYXF1ZSBwb2ludGVyIHJldHVybmVkIGJ5Ci0uQiBzbm1wX3Nlc3Nfb3BlbigpCi1pcyB1c2VkIHRvIHJlZmVyIHRvIHRoYXQgc2Vzc2lvbiBoZW5jZWZvcnRoLgotLlBQCi1TTk1QIHNlc3Npb25zIHRoYXQgYXJlIGNyZWF0ZWQgd2l0aAotLkIgc25tcF9zZXNzX29wZW4oKQotYXJlIG5vdCBhZmZlY3RlZCBieSwgYW5kIFNIT1VMRCBOT1QgQkUgVVNFRCBXSVRILAotLkJSIHNubXBfc2VsZWN0X2luZm8oKSAiLCAiIHNubXBfcmVhZCgpICIsICIgc25tcF90aW1lb3V0KCkgIiBub3IiCi0uQlIgc25tcF9jbG9zZSgpIC4KLVJhdGhlciB0aGUgZXF1aXZhbGVudCBzaW5nbGUgc2Vzc2lvbiBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgc2hvdWxkCi1iZSB1c2VkLgotLlBQCi0uQiBzbm1wX3Nlc3NfaW5pdCgpCi1hbmQKLS5CIHNubXBfc2Vzc19vcGVuKCkKLWVhY2ggdGFrZSBhcyBpbnB1dCBhIHBvaW50ZXIgdG8gYSBzdHJ1Y3Qgc25tcF9zZXNzaW9uIG9iamVjdC4KLVRoaXMgc3RydWN0dXJlIGNvbnRhaW5zIGluZm9ybWF0aW9uIGZvciBhIHNldCBvZiB0cmFuc2FjdGlvbnMgdGhhdAotd2lsbCBzaGFyZSBzaW1pbGFyIHRyYW5zcG9ydCBjaGFyYWN0ZXJpc3RpY3MuCi0uQiBzbm1wX3Nlc3Nfc2Vzc2lvbigpCi10YWtlcyB0aGUgb3BhcXVlIHNlc3Npb24gaGFuZGxlIGFuZCByZXR1cm5zIGEgcG9pbnRlciB0bwotaXRzIGFzc29jaWF0ZWQgc3RydWN0IHNubXBfc2Vzc2lvbi4KLS5QUAotLkIgc25tcF9zZXNzX3NlbmQoKQotYW5kCi0uQiBzbm1wX3Nlc3NfYXN5bmNfc2VuZCgpCi1lYWNoIHRha2UgYQotLkkgcGR1Ci1wYXJhbWV0ZXIsIHdoaWNoIHBvaW50cyB0byBhIHN0cnVjdCBzbm1wX3BkdSBvYmplY3QgY29udGFpbmluZwotaW5mb3JtYXRpb24gdGhhdCBkZXNjcmliZXMgYSB0cmFuc2FjdGlvbiB0aGF0IHdpbGwgYmUgcGVyZm9ybWVkIG92ZXIKLWFuIG9wZW4gc2Vzc2lvbi4KLS5QUAotQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgZGVmaW5pdGlvbnMgb2YgdGhlc2Ugc3RydWN0dXJlcy4KLS5QUAotV2l0aCB0aGUKLS5JIHNubXBfc2Vzc19hc3luY19zZW5kKCkKLWNhbGwsCi0uSSBzbm1wX3Nlc3NfcmVhZCgpCi13aWxsIGludm9rZSB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIHdoZW4gdGhlIHJlc3BvbnNlIGlzIHJlY2VpdmVkLgotLlBQCi0uQlIgc25tcF9zZXNzX3NlbGVjdF9pbmZvKCkgIiwgIiBzbm1wX3Nlc3NfcmVhZCgpICIgYW5kICIgc25tcF9zZXNzX3RpbWVvdXQoKQotcHJvdmlkZSBhbiBpbnRlcmZhY2UgZm9yIHRoZSB1c2Ugb2YgdGhlCi0uQlIgc2VsZWN0ICgyKQotc3lzdGVtIGNhbGwgc28gdGhhdCBTTk1QIHRyYW5zYWN0aW9ucyBmb3IgYSBzaW5nbGUgc2Vzc2lvbiBjYW4gb2NjdXIKLWFzeW5jaHJvbm91c2x5LgotLlBQCi0uQiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKQotaXMgcGFzc2VkIHRoZSBpbmZvcm1hdGlvbiB0aGF0IHdvdWxkIGhhdmUgYmVlbiBwYXNzZWQgdG8KLS5CUiBzZWxlY3QgKDIpCi1pbiB0aGUgYWJzZW5jZSBvZiBTTk1QLiAgRm9yIGV4YW1wbGUsIHRoaXMgbWlnaHQgaW5jbHVkZSBmaWxlCi1kZXNjcmlwdG9ycyBhc3NvY2lhdGVkIHdpdGggdGhlIG1haW4gbG9vcCBvZiBhIGdyYXBoaWNhbAotYXBwbGljYXRpb24uIFRoaXMgaW5mb3JtYXRpb24gaXMgbW9kaWZpZWQgc28gdGhhdCBTTk1QIHdpbGwgZ2V0IHRoZQotc2VydmljZSBpdCByZXF1aXJlcyBmcm9tIHRoZSBjYWxsIHRvCi0uQlIgc2VsZWN0ICgyKS4KLUluIHRoaXMgY2FzZSwKLS5JUiBudW1mZHMgIiwgIiBmZHNldCAiIGFuZCAiIHRpbWVvdXQKLWNvcnJlc3BvbmQgdG8gdGhlCi0uSVIgbmZkcyAiLCAiIHJlYWRmZHMgIiBhbmQgIiB0aW1lb3V0Ci1hcmd1bWVudHMgdG8KLS5CUiBzZWxlY3QgKDIpCi1yZXNwZWN0aXZlbHkuICBUaGUgb25seSBleGNlcHRpb24gaXMgdGhhdCB0aW1lb3V0IG11c3QgQUxXQVlTIHBvaW50IHRvCi1hbiBhbGxvY2F0ZWQgKGJ1dCBwZXJoYXBzIHVuaW5pdGlhbGl6ZWQpCi0uSSBzdHJ1Y3QgdGltZXZhbAotKGl0IGNhbm5vdCBiZSBOVUxMIGFzIGZvcgotLkJSIHNlbGVjdCAoMikpLgotSWYKLS5JIHRpbWVvdXQKLXdvdWxkIGhhdmUgYmVlbiBwYXNzZWQgYXMgTlVMTCwKLS5JIGJsb2NrCi1pcyBpbnN0ZWFkIHNldCB0byB0cnVlLCBhbmQKLS5JIHRpbWVvdXQKLWlzIHRyZWF0ZWQgYXMgdW5kZWZpbmVkLiAgVGhpcyBzYW1lIHJ1bGUgYXBwbGllcyB1cG9uIHJldHVybiBmcm9tCi0uQlIgc25tcF9zZWxlY3RfaW5mbygpIC4KLS5QUAotQWZ0ZXIgY2FsbGluZwotLkIgc25tcF9zZXNzX3NlbGVjdF9pbmZvKCkgLAotLkJSIHNlbGVjdCAoMikKLXNob3VsZCBiZSBjYWxsZWQgd2l0aCB0aGUgcmV0dXJuZWQgZGF0YS4gIFdoZW4gaXQgcmV0dXJucywKLS5CIHNubXBfc2Vzc19yZWFkKCkKLXNob3VsZCB0aGVuIGJlIGNhbGxlZCB3aXRoIHRoZQotLkkgZmRfc2V0Ci1yZXR1cm5lZCBmcm9tCi0uQlIgc2VsZWN0ICgyKS4KLVRoaXMgd2lsbCByZWFkIGFueSBpbnB1dCBmcm9tIHRoaXMgc2Vzc2lvbidzIFNOTVAgc29ja2V0LiAgSWYKLS5CUiBzZWxlY3QgKDIpCi10aW1lcyBvdXQgKHRoYXQgaXMsIGl0IHJldHVybnMgemVybyksCi0uQiBzbm1wX3Nlc3NfdGltZW91dCgpCi1zaG91bGQgYmUgY2FsbGVkIHRvIHNlZSBpZiBhIHRpbWVvdXQgaGFzIG9jY3VycmVkIG9uIHRoZSBTTk1QCi1zZXNzaW9uLgotLlBQCi0uSSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UKLWlzIGEgY29udmVuaWVuY2Ugcm91dGluZSB0aGF0IHdpbGwgc2VuZCB0aGUgcmVxdWVzdCwKLXdhaXQgZm9yIHRoZSByZXNwb25zZSBhbmQgcHJvY2VzcyBpdCBiZWZvcmUgcmV0dXJuaW5nLgotU2VlIHRoZSBkZXNjcmlwdGlvbnMgb2YKLS5JICJzbm1wX3Nlc3Nfc2VuZCIgIiwgIiAic25tcF9zZXNzX3JlYWQiCi1ldGMgZm9yIGRldGFpbHMuCi0uU0ggRElBR05PU1RJQ1MKLS5QUAotRXJyb3IgcmV0dXJuIHN0YXR1cyBmcm9tIAotLkIgc25tcF9zZXNzX29wZW4oKQotaXMgaW5kaWNhdGVkIGJ5IHJldHVybiBvZiBhIE5VTEwgcG9pbnRlci4KLUVycm9yIHJldHVybiBzdGF0dXMgZnJvbSAKLS5CIHNubXBfc2Vzc19jbG9zZSgpCi1hbmQKLS5CIHNubXBfc2Vzc19zZW5kKCkKLWlzIGluZGljYXRlZCBieSBhIHJldHVybiB2YWx1ZSBvZiAwLiAgQSBzdWNjZXNzZnVsIHN0YXR1cyB3aWxsIHJldHVybgotMS4KLS5QUAotRnVydGhlciBpbmZvcm1hdGlvbiBjYW4gYmUgb2J0YWluZWQgYnkgdXNpbmcKLS5CIHNubXBfc2Vzc19lcnJvcigpCi10byBzZWUgd2hhdCB0eXBlIG9mIGVycm9yIGhhcyBvY2N1cnJlZC4gIFRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUKLVNOTVAKLS5JIHNubXBfZXJybm8KLXZhcmlhYmxlLCB0aGUgdmFsdWUgb2YgdGhlIHN5c3RlbQotLkkgZXJybm8KLXZhcmlhYmxlLCBhbmQgYSBzdHJpbmcgaW50ZXJwcmV0YXRpb24gb2YgYm90aCB2YXJpYWJsZXMuICBUaGUgc3RyaW5nCi1tdXN0IGJlIGZyZWVkIGFmdGVyIHVzZSBieSB0aGUgY2FsbGVyLgotLlBQCi1Gb3IgZXJyb3JzIHJldHVybmVkIGJ5Ci0uQlIgc25tcF9zZXNzX29wZW4oKSAsCi11c2UgdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24KLS5CIHNubXBfZXJyb3IoKQotaW5zdGVhZCBvZgotLkJSIHNubXBfc2Vzc19lcnJvcigpIC4KLS5QUAotQ29uc3VsdCBzbm1wX2FwaS5oIGZvciB0aGUgY29tcGxldGUgc2V0IG9mIFNOTVAgbGlicmFyeQotZXJyb3IgdmFsdWVzLgotVGhlIFNOTVAgbGlicmFyeSBlcnJvciB2YWx1ZQotLklSIHNubXBlcnIKLWNhbiBiZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB2YWx1ZXM6Ci0uUlMgMm4KLS5JUCBTTk1QRVJSX0dFTkVSUiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1BIGdlbmVyaWMgZXJyb3Igb2NjdXJyZWQuCi0uSVAgU05NUEVSUl9CQURfTE9DUE9SVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1UaGUgbG9jYWwgcG9ydCB3YXMgYmFkIGJlY2F1c2UgaXQgaGFkIGFscmVhZHkgYmVlbgotYWxsb2NhdGVkIG9yIHBlcm1pc3Npb24gd2FzIGRlbmllZC4KLS5JUCBTTk1QRVJSX0JBRF9BRERSRVNTIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLVRoZSBob3N0IG5hbWUgb3IgYWRkcmVzcyBnaXZlbiB3YXMgbm90IHVzZWFibGUuCi0uSVAgU05NUEVSUl9CQURfU0VTU0lPTiBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi1UaGUgc3BlY2lmaWVkIHNlc3Npb24gd2FzIG5vdCBvcGVuLgotLklQIFNOTVBFUlJfVE9PX0xPTkcgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfTk9fU09DS0VUIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1YyX0lOX1YxIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX1YxX0lOX1YyIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9SRVBFQVRFUlMgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1JFUEVUSVRJT05TIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9BU04xX0JVSUxEIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9TRU5EVE8gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1JDVkZST00gXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQkFEX1BBUlNFIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9WRVJTSU9OIFx3J1NOTVBFUlJfQkFEX1JFUEVUSVRJT05TJ3UrMm4KLS5JUCBTTk1QRVJSX0JBRF9DT01NVU5JVFkgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfTk9BVVRIX0RFU1BSSVYgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfQUJPUlQgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVU5LTk9XTl9QRFUgXHcnU05NUEVSUl9CQURfUkVQRVRJVElPTlMndSsybgotLklQIFNOTVBFUlJfVElNRU9VVCBcdydTTk1QRVJSX0JBRF9SRVBFVElUSU9OUyd1KzJuCi0uUkUKLS5QUAotLlNIICJTRUUgQUxTTyIKLS5CUiBzZWxlY3QgIigyKSwgIiBzbm1wX2FwaSAiKDMpLCAiIHNubXBfYXBpLmgKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfYXN5bmNfc2VuZC4zIGIvbWFuL3NubXBfc2Vzc19hc3luY19zZW5kLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19hc3luY19zZW5kLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfY2xvc2UuMyBiL21hbi9zbm1wX3Nlc3NfY2xvc2UuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX2Nsb3NlLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfZXJyb3IuMyBiL21hbi9zbm1wX3Nlc3NfZXJyb3IuMwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDFlNmJjMC4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF9zZXNzX2Vycm9yLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfaW5pdC4zIGIvbWFuL3NubXBfc2Vzc19pbml0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19pbml0LjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3Nfb3Blbi4zIGIvbWFuL3NubXBfc2Vzc19vcGVuLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19vcGVuLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX3Nlc3NfYXBpLjMKZGlmZiAtLWdpdCBhL21hbi9zbm1wX3Nlc3NfcGVycm9yLjMgYi9tYW4vc25tcF9zZXNzX3BlcnJvci4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YzE2YmFmLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfcGVycm9yLjMKKysrIC9kZXYvbnVsbApAQCAtMSArMCwwIEBACi0uc28gbWFuMy9zbm1wX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX3JlYWQuMyBiL21hbi9zbm1wX3Nlc3NfcmVhZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfcmVhZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMgYi9tYW4vc25tcF9zZXNzX3NlbGVjdF9pbmZvLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQxZTZiYzAuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2Vzc19zZWxlY3RfaW5mby4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX3NlbmQuMyBiL21hbi9zbm1wX3Nlc3Nfc2VuZC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3Nfc2VuZC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX3Nlc3Npb24uMyBiL21hbi9zbm1wX3Nlc3Nfc2Vzc2lvbi4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3Nfc2Vzc2lvbi4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXNzX3RpbWVvdXQuMyBiL21hbi9zbm1wX3Nlc3NfdGltZW91dC4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkMWU2YmMwLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3Nlc3NfdGltZW91dC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9zZXNzX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXRfbWliX3dhcm5pbmdzLjMgYi9tYW4vc25tcF9zZXRfbWliX3dhcm5pbmdzLjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDgwZjM0OGIuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfc2V0X21pYl93YXJuaW5ncy4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnMuMyBiL21hbi9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MGYzNDhiLi4wMDAwMDAwCi0tLSBhL21hbi9zbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucy4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvbWliX2FwaS4zCmRpZmYgLS1naXQgYS9tYW4vc25tcF90aW1lb3V0LjMgYi9tYW4vc25tcF90aW1lb3V0LjMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRjMTZiYWYuLjAwMDAwMDAKLS0tIGEvbWFuL3NubXBfdGltZW91dC4zCisrKyAvZGV2L251bGwKQEAgLTEgKzAsMCBAQAotLnNvIG1hbjMvc25tcF9hcGkuMwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBfdHJhcF9hcGkuMy5kZWYgYi9tYW4vc25tcF90cmFwX2FwaS4zLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTEzZDY3Ny4uMDAwMDAwMAotLS0gYS9tYW4vc25tcF90cmFwX2FwaS4zLmRlZgorKysgL2Rldi9udWxsCkBAIC0xLDU2ICswLDAgQEAKLS5USCBTTk1QX1RSQVBfQVBJIDMgIjI5IFNlcCAyMDAzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgotLlNIIE5BTUUKLXNlbmRfZWFzeV90cmFwLCBzZW5kX3RyYXBfdmFycywgc2VuZF92MnRyYXAgLSBzZW5kIFRSQVBzIG9yIElORk9STXMgZnJvbSBhIE5ldC1TTk1QIE1JQiBtb2R1bGUKLS5TSCBTWU5PUFNJUwotLkIgI2luY2x1ZGUgPG5ldC1zbm1wL2FnZW50L2FnZW50X3RyYXAuaD4KLS5QUAotLkJJICJ2b2lkIHNlbmRfZWFzeV90cmFwKGludCAiIHRyYXAgIiwgaW50ICIgc3BlY2lmaWMgIik7IgotLlBQCi0uQkkgInZvaWQgc2VuZF90cmFwX3ZhcnMoaW50ICIgdHJhcCAiLCBpbnQgIiBzcGVjaWZpYyAiLCBzdHJ1Y3QgdmFyaWFibGVfbGlzdCAqIiB2YXJzICIpOyIKLS5QUAotLkJJICJ2b2lkIHNlbmRfdjJ0cmFwKHN0cnVjdCB2YXJpYWJsZV9saXN0ICoiIHZhcnMgIik7IgotLlNIIERFU0NSSVBUSU9OCi1UaGVzZSB0aHJlZSByb3V0aW5lcyBtYXkgYmUgdXNlZCB0byBzZW5kIHRyYXBzIGZyb20gYSBNSUIgbW9kdWxlCi13aXRoaW4gdGhlIE5ldC1TTk1QIGFnZW50IChpbmNsdWRpbmcgYW4gQWdlbnRYIHN1YmFnZW50KS4KLS5QUAotLkIgc2VuZF9lYXN5X3RyYXAoKQotc2VuZHMgYW4gU05NUHYxIHRyYXAgKG9yIHRoZSBTTk1QdjIgZXF1aXZhbGVudCkgdG8gdGhlIGxpc3Qgb2YKLWNvbmZpZ3VyZWQgdHJhcCBkZXN0aW5hdGlvbnMgKG9yICJzaW5rcyIpLCB1c2luZyB0aGUgcHJvdmlkZWQgdmFsdWVzCi1mb3IgdGhlIGdlbmVyaWMgdHJhcCB0eXBlLCBhbmQgc3BlY2lmaWMgdHJhcCB2YWx1ZS4KLS5QUAotLkIgc2VuZF90cmFwX3ZhcnMoKQotaXMgc2ltaWxhciwgYnV0IGFwcGVuZHMgdGhlIHN1cHBsaWVkIGxpc3Qgb2YgdmFyaWFibGUgYmluZGluZ3MgdG8gdGhlCi10cmFwcyB0aGF0IGFyZSBzZW50LgotLlBQCi0uQiBzZW5kX3YydHJhcCgpCi11c2VzIHRoZSBzdXBwbGllZCBsaXN0IG9mIHZhcmlhYmxlIGJpbmRpbmdzIHRvIGZvcm0gYW4gU05NUHYyIHRyYXAsCi13aGljaCBpcyBzZW50IHRvIFNOTVB2Mi1jYXBhYmxlIHNpbmtzIG9uIHRoZSBjb25maWd1cmVkIGxpc3QuICBBbgotZXF1aXZhbGVudCBJTkZPUk0gaXMgc2VudCB0byB0aGUgY29uZmlndXJlZHEgbGlzdCBvZiBpbmZvcm0gc2lua3MuCi1TaW5rcyB0aGF0IGNhbiBvbmx5IGhhbmRsZSBTTk1QdjEgdHJhcHMgYXJlIHNraXBwZWQuCi0uUFAKLVRoZSB2YXJpb3VzICJzZW5kX3RyYXAoKSIgY2FsbHMgYWxsb3cgeW91IHRvIHNwZWNpZnkgdHJhcHMgaW4gZGlmZmVyZW50Ci1mb3JtYXRzLiAgQW5kIHRoZSB2YXJpb3VzICJ0cmFwc2luayIgZGlyZWN0aXZlcyBhbGxvdyB5b3UgdG8gc3BlY2lmeQotZGVzdGluYXRpb25zIHRvIHJlY2VpdmUgZGlmZmVyZW50IGZvcm1hdHMuCi1CdXQgKmFsbCogdHJhcHMgYXJlIHNlbnQgdG8gKmFsbCogZGVzdGluYXRpb25zLCByZWdhcmRsZXNzIG9mIGhvdyB0aGV5Ci13ZXJlIHNwZWNpZmllZC4KLS5uZgotSS5lLiBpdCdzCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fXyAgdHJhcHNpbmsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvCi0gICAgc2VuZF9lYXN5X3RyYXAgXF9fXyAgWyAgVHJhcCAgICAgIF0gX19fXyAgdHJhcDJzaW5rCi0gICAgICAgICAgICAgICAgICAgIF9fXyAgWyBHZW5lcmF0b3IgIF0KLSAgICBzZW5kX3YydHJhcCAgICAvICAgICBbICAgICAgICAgICAgXSAtLS0tLSBpbmZvcm1zaW5rCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF9fX18KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cmFwc2VzcwotCi0qTm90KgotICAgICBzZW5kX2Vhc3lfdHJhcCAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIHRyYXBzaW5rCi0gICAgIHNlbmRfdjJ0cmFwICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgdHJhcDJzaW5rCi0gICAgID8/Pz8gICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tPiAgaW5mb3Jtc2luawotICAgICA/Pz8/ICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLT4gIHRyYXBzZXNzCi0uZmkKLS5TSCBXQVJOSU5HUwotVGhlc2Ugcm91dGluZXMgYXJlIHVzZWQgdG8gc2VuZCB0aGUgdHJhcHMgaW1tZWRpYXRlbHkgdGhleSBhcmUgY2FsbGVkLgotSW52b2tpbmcgdGhlbSBhdCB0aGUgYXBwcm9wcmlhdGUgdGltZSBpcyBsZWZ0IHRvIHRoZSBNSUIgbW9kdWxlIHByb2dyYW1tZXIuCi0uU0ggIlNFRSBBTFNPIgotLkJSIHNubXBkLmNvbmYgIig1KSwgIiBzbm1wdHJhcGQgIig4KSIKZGlmZiAtLWdpdCBhL21hbi9zbm1wYnVsa2dldC4xLmRlZiBiL21hbi9zbm1wYnVsa2dldC4xLmRlZgppbmRleCBiNGUwNjJkLi4yNTIxMGYzIDEwMDY0NAotLS0gYS9tYW4vc25tcGJ1bGtnZXQuMS5kZWYKKysrIGIvbWFuL3NubXBidWxrZ2V0LjEuZGVmCkBAIC0xNywxMyArMTcsMTMgQEAKIHBpbnBvaW50IHdoeSB0aGUgcmVxdWVzdCB3YXMgbWFsZm9ybWVkLgogLlNIIE9QVElPTlMKIC5UUCA4Ci0uQkkgLUNuIDxOVU0+CisuQkkgXC1DbiA8TlVNPgogU2V0IHRoZQogLkkgbm9uLXJlcGVhdGVycwogZmllbGQgaW4gdGhlIEdFVEJVTEsgUERVLiAgVGhpcyBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzdXBwbGllZAogdmFyaWFibGVzIHRoYXQgc2hvdWxkIG5vdCBiZSBpdGVyYXRlZCBvdmVyLiAgVGhlIGRlZmF1bHQgaXMgMC4KIC5UUAotLkJJIC1DciA8TlVNPgorLkJJIFwtQ3IgPE5VTT4KIFNldCB0aGUKIC5JIG1heC1yZXBldGl0aW9ucwogZmllbGQgaW4gdGhlIEdFVEJVTEsgUERVLiAgVGhpcyBzcGVjaWZpZXMgdGhlIG1heGltdW0gbnVtYmVyIG9mCkBAIC00MSw3ICs0MSw3IEBACiAuU0ggRVhBTVBMRQogVGhlIGNvbW1hbmQ6CiAuUFAKLXNubXBidWxrZ2V0IC12MmMgLUNuMSAtQ3I1IC1PcyAtYyBwdWJsaWMgemV1cyBzeXN0ZW0gaWZUYWJsZQorc25tcGJ1bGtnZXQgXC12MmMgXC1DbjEgXC1DcjUgXC1PcyBcLWMgcHVibGljIHpldXMgc3lzdGVtIGlmVGFibGUKIC5QUAogd2lsbCByZXRyaWV2ZSB0aGUgdmFyaWFibGUgc3lzdGVtLnN5c0Rlc2NyLjAgKHdoaWNoIGlzIHRoZQogbGV4aWNvZ3JhcGhpY2FsbHkgbmV4dCBvYmplY3QgdG8gc3lzdGVtKSBhbmQgdGhlIGZpcnN0IDUgb2JqZWN0cyBpbgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBidWxrd2Fsay4xLmRlZiBiL21hbi9zbm1wYnVsa3dhbGsuMS5kZWYKaW5kZXggZTZjN2E2OS4uYzVmNGEwNiAxMDA2NDQKLS0tIGEvbWFuL3NubXBidWxrd2Fsay4xLmRlZgorKysgYi9tYW4vc25tcGJ1bGt3YWxrLjEuZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuIAotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODgsIDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTQyLDcgKzQyLDcgQEAKIC5JUiB2YXJpYWJsZXMoNSkgLgogSWYgbm8gT0lEIGFyZ3VtZW50IGlzIHByZXNlbnQsCiAuQiBzbm1wYnVsa3dhbGsKLXdpbGwgc2VhcmNoIE1JQi0yLgord2lsbCBzZWFyY2ggTUlCXC0yLgogLlBQCiBJZiB0aGUgbmV0d29yayBlbnRpdHkgaGFzIGFuIGVycm9yIHByb2Nlc3NpbmcgdGhlIHJlcXVlc3QgcGFja2V0LCBhbgogZXJyb3IgcGFja2V0IHdpbGwgYmUgcmV0dXJuZWQgYW5kIGEgbWVzc2FnZSB3aWxsIGJlIHNob3duLCBoZWxwaW5nIHRvCkBAIC01Miw3ICs1Miw3IEBACiBNSUIsIHRoZSBtZXNzYWdlICJFbmQgb2YgTUlCIiB3aWxsIGJlIGRpc3BsYXllZC4KIC5TSCBPUFRJT05TCiAuVFAgOAotLkIgLUNjCisuQiBcLUNjCiBEbyBub3QgY2hlY2sgd2hldGhlciB0aGUgcmV0dXJuZWQgT0lEcyBhcmUgaW5jcmVhc2luZy4gIFNvbWUgYWdlbnRzCiAoTGFzZXJKZXRzIGFyZSBhbiBleGFtcGxlKSByZXR1cm4gT0lEcyBvdXQgb2Ygb3JkZXIsIGJ1dCBjYW4KIGNvbXBsZXRlIHRoZSB3YWxrIGFueXdheS4gIE90aGVyIGFnZW50cyByZXR1cm4gT0lEcyB0aGF0IGFyZSBvdXQgb2YKQEAgLTYyLDEwICs2MiwxMCBAQAogLkIgc25tcGJ1bGt3YWxrCiB0cmllcyB0byBkZXRlY3QgdGhpcyBiZWhhdmlvciBhbmQgd2FybnMgeW91IHdoZW4gaXQgaGl0cyBhbiBhZ2VudAogYWN0aW5nIGlsbGVnYWxseS4gIFVzZQotLkIgLUNjCisuQiBcLUNjCiB0byB0dXJuIG9mZiB0aGlzIGJlaGF2aW91ci4KIC5UUAotLkIgLUNpCisuQiBcLUNpCiBJbmNsdWRlIHRoZSBnaXZlbiBPSUQgaW4gdGhlIHNlYXJjaCByYW5nZS4gIE5vcm1hbGx5CiAuQiBzbm1wYnVsa3dhbGsKIHVzZXMgR0VUQlVMSyByZXF1ZXN0cyBzdGFydGluZyB3aXRoIHRoZSBPSUQgeW91IHNwZWNpZmllZCBhbmQgcmV0dXJucwpAQCAtNzQsMTYgKzc0LDE2IEBACiByZXN1bHRzIGlmIGl0IGlzIGEgdmFsaWQgT0lEIGluIHRoZSB0cmVlIGl0c2VsZi4gIFRoaXMgb3B0aW9uIGxldHMgeW91CiBkbyB0aGlzLgogLlRQCi0uQkkgLUNuIDxOVU0+CisuQkkgXC1DbiA8TlVNPgogU2V0IHRoZQogLkkgbm9uLXJlcGVhdGVycwogZmllbGQgaW4gdGhlIEdFVEJVTEsgUERVcy4gIFRoaXMgc3BlY2lmaWVzIHRoZSBudW1iZXIgb2Ygc3VwcGxpZWQKIHZhcmlhYmxlcyB0aGF0IHNob3VsZCBub3QgYmUgaXRlcmF0ZWQgb3Zlci4gIFRoZSBkZWZhdWx0IGlzIDAuCiAuVFAKLS5CIC1DcAorLkIgXC1DcAogVXBvbiBjb21wbGV0aW9uIG9mIHRoZSB3YWxrLCBwcmludCB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBmb3VuZC4KIC5UUAotLkJJIC1DciA8TlVNPgorLkJJIFwtQ3IgPE5VTT4KIFNldCB0aGUKIC5JIG1heC1yZXBldGl0aW9ucwogZmllbGQgaW4gdGhlIEdFVEJVTEsgUERVcy4gIFRoaXMgc3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZgpAQCAtMTAxLDcgKzEwMSw3IEBACiAuU0ggRVhBTVBMRQogVGhlIGNvbW1hbmQ6CiAuUFAKLXNubXBidWxrd2FsayAtdjJjIC1PcyAtYyBwdWJsaWMgemV1cyBzeXN0ZW0KK3NubXBidWxrd2FsayBcLXYyYyBcLU9zIFwtYyBwdWJsaWMgemV1cyBzeXN0ZW0KIC5QUAogd2lsbCByZXRyaWV2ZSBhbGwgb2YgdGhlIHZhcmlhYmxlcyB1bmRlciBzeXN0ZW06CiAuUFAKZGlmZiAtLWdpdCBhL21hbi9zbm1wY21kLjEuZGVmIGIvbWFuL3NubXBjbWQuMS5kZWYKaW5kZXggNDg1M2NhZi4uZTRkZjhiMiAxMDA2NDQKLS0tIGEvbWFuL3NubXBjbWQuMS5kZWYKKysrIGIvbWFuL3NubXBjbWQuMS5kZWYKQEAgLTEsMyArMSw0IEBACisuXCIgLSotIG5yb2ZmIC0qLQogLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQogLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwogLlwiIHRoYXQgbWF5IGFwcGx5OgpAQCAtMjcsNyArMjgsNyBAQAogLlwiIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKIC5cIiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QQ01EIDEgIjAxIFNlcCAyMDA2IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBDTUQgMSAiMjAgSnVsIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcGNtZCAtIG9wdGlvbnMgYW5kIGJlaGF2aW91ciBjb21tb24gdG8gbW9zdCBvZiB0aGUgTmV0LVNOTVAgY29tbWFuZC1saW5lIHRvb2xzCiAuU0ggU1lOT1BTSVMKQEAgLTQ0LDkyICs0NSw1NCBAQAogYXBwbGljYXRpb25zIHR5cGljYWxseSAoYnV0IG5vdCBuZWNlc3NhcmlseSkgdGFrZSBhZGRpdGlvbmFsCiBwYXJhbWV0ZXJzIHRoYXQgYXJlIGdpdmVuIGFmdGVyIHRoZSBhZ2VudCBzcGVjaWZpY2F0aW9uLiAgVGhlc2UKIHBhcmFtZXRlcnMgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIG1hbnVhbCBwYWdlcyBmb3IgZWFjaCBhcHBsaWNhdGlvbi4KLQotLlNIIE9QVElPTlMKKy5TSCBDT01NQU5ELUxJTkUgQ09ORklHIE9QVElPTlMKK0luIGFkZGl0aW9uIHRvIHRoZSBvcHRpb25zIGRlc2NyaWJlZCBpbiB0aGlzIG1hbnVhbCBwYWdlLCBhbGwgb2YgdGhlCit0b2tlbnMgZGVzY3JpYmVkIGluIHRoZSBcZklzbm1wLmNvbmZcZlIgYW5kIG90aGVyIC5jb25mIG1hbnVhbCBwYWdlcworY2FuIGJlIHVzZWQgb24gdGhlIGNvbW1hbmQgbGluZSBvZiBOZXQtU05NUCBhcHBsaWNhdGlvbnMgYXMgd2VsbCBieQorcHJlZml4aW5nIHRoZW0gd2l0aCAiXC1cLSIuICBFRywgc3BlY2lmeWluZworXGZJXC1cLWRvbnRMb2FkSG9zdENvbmZpZz10cnVlXGZSIG9uIHRoZSBjb21tYW5kIGxpbmUgd2lsbCB0dXJuIG9mCitsb2FkaW5nIG9mIHRoZSBob3N0IHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisuUFAKK1RoZSBzbm1wLmNvbmYgZmlsZSBzZXR0aW5ncyBhbmQgdGhlIGRvdWJsZS1kYXNoIGFyZ3VtZW50cyBvdmVyLXJpZGUKK3RoZSBzaW5nbGUtZGFzaCBhcmd1bWVudHMuICBTbyBpdCdzIGltcG9ydGFudCB0byBub3RlIHRoYXQgaWYKK3NpbmdsZS1kYXNoIGFyZ3VtZW50cyBhcmVuJ3Qgd29ya2luZyBiZWNhdXNlIHlvdSBoYXZlIHNldHRpbmdzIGluIHRoZQorXGZJc25tcC5jb25mXGZSIGZpbGUgdGhhdCBjb25mbGljdCB3aXRoIHRoZW0gdGhlbiB5b3UnbGwgbmVlZCB0byB1c2UKK3RoZSBsb25nZXItZm9ybSBkb3VibGUtZGFzaCBhcmd1bWVudHMgdG8gc3VjY2Vzc2Z1bGx5IHRydW1wIHRoZQorXGZJc25tcC5jb25mXGZSIGZpbGUgc2V0dGluZ3MuCisuU0ggR2VuZXJpYyBPcHRpb25zCitUaGVzZSBvcHRpb25zIGNvbnRyb2wgaG93IHRoZSBOZXQtU05NUCBjb21tYW5kcyBiZWhhdmUgcmVnYXJkbGVzcyBvZgord2hhdCB2ZXJzaW9uIG9mIFNOTVAgeW91IGFyZSB1c2luZy4gIFNlZSBmdXJ0aGVyIGJlbG93IGZvciBvcHRpb25zCit0aGF0IGNvbnRyb2wgc3BlY2lmaWMgdmVyc2lvbnMgb3Igc3ViLW1vZHVsZXMgb2YgdGhlIFNOTVAgcHJvdG9jb2wuIAogLlRQCi0uQkkgIi0zW01tS2tdICAweEhFWEtFWSIKLVNldHMgdGhlIGtleXMgdG8gYmUgdXNlZCBmb3IgU05NUHYzIHRyYW5zYWN0aW9ucy4gIFRoZXNlIG9wdGlvbnMgYWxsb3cKLXlvdSB0byBzZXQgdGhlIG1hc3RlciBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBrZXlzICgtM20gYW5kIC0zTQotcmVzcGVjdGl2ZWx5KSBvciBzZXQgdGhlIGxvY2FsaXplZCBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBrZXlzCi0oLTNrIGFuZCAtM0sgcmVzcGVjdGl2ZWx5KS4gIFNOTVB2MyBrZXlzIGNhbiBiZSBlaXRoZXIgcGFzc2VkIGluIGJ5Ci1oYW5kIHVzaW5nIHRoZXNlIGZsYWdzLCBvciBieSB0aGUgdXNlIG9mIGtleXMgZ2VuZXJhdGVkIGZyb20gcGFzc3dvcmRzCi11c2luZyB0aGUgLUEgYW5kIC1YIGZsYWdzIGRpc2N1c3NlZCBiZWxvdy4gIEZvciBmdXJ0aGVyIGRldGFpbHMgb24KLVNOTVB2MyBhbmQgaXRzIHVzYWdlIG9mIGtleWluZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBOZXQtU05NUCB0dXRvcmlhbAotd2ViIHNpdGUgKCBodHRwOi8vd3d3Lk5ldC1TTk1QLm9yZy90dXRvcmlhbC01L2NvbW1hbmRzLyApLiAKLU92ZXJyaWRlcyB0aGUgZGVmQXV0aE1hc3RlcktleSAoLTNtKSwgZGVmUHJpdk1hc3RlcktleSAoLTNNKSwgCi1kZWZBdXRoTG9jYWxpemVkS2V5ICgtM2spIG9yIGRlZlByaXZMb2NhbGl6ZWRLZXkgKC0zSykgdG9rZW5zLCByZXNwZWN0aXZlbHksIAotaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUsIHNlZQotLkkgc25tcC5jb25mKDUpLgotLlRQCi0uQkkgLWEgIiBhdXRoUHJvdG9jb2wiCi1TZXQgdGhlIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIChNRDUgb3IgU0hBKSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MwotbWVzc2FnZXMuIE92ZXJyaWRlcyB0aGUgXGZJZGVmQXV0aFR5cGVcZlIgdG9rZW4gaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuCi0uVFAKLS5CSSAtQSAiIGF1dGhQYXNzd29yZCIKLVNldCB0aGUgYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMKLW1lc3NhZ2VzLiAgT3ZlcnJpZGVzIHRoZSBcZklkZWZBdXRoUGFzc3BocmFzZVxmUiB0b2tlbiBpbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4gSXQgaXMgaW5zZWN1cmUgdG8gc3BlY2lmeSBwYXNzIHBocmFzZXMgb24gdGhlIGNvbW1hbmQgbGluZSwKLXNlZQotLkkgc25tcC5jb25mKDUpLgotLlRQCi0uQkkgLWMgIiBjb21tdW5pdHkiCi1TZXQgdGhlIGNvbW11bml0eSBzdHJpbmcgZm9yIFNOTVB2MS92MmMgdHJhbnNhY3Rpb25zLgotT3ZlcnJpZGVzIHRoZSBcZklkZWZDb21tdW5pdHlcZlIgdG9rZW4gaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuCi0uVFAKLS5CIC1kCisuQiBcLWQKIER1bXAgKGluIGhleGFkZWNpbWFsKSB0aGUgcmF3IFNOTVAgcGFja2V0cyBzZW50IGFuZCByZWNlaXZlZC4KIC5UUAotLkIgLURcZklbVE9LRU5bLC4uLl1dCisuQiBcLURcZklbVE9LRU5bLC4uLl1dCiBUdXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBnaXZlbgogLklSICJUT0tFTiIgIihzKS4iCiBUcnkKIC5JUiBBTEwKIGZvciBleHRyZW1lbHkgdmVyYm9zZSBvdXRwdXQuCiAuVFAKLS5CSSAtZSAiIGVuZ2luZUlEIgotU2V0IHRoZSBhdXRob3JpdGF0aXZlIChzZWN1cml0eSkgZW5naW5lSUQgdXNlZCBmb3IgU05NUHYzIFJFUVVFU1QKLW1lc3NhZ2VzLCBnaXZlbiBhcyBhIGhleGFkZWNpbWFsIHN0cmluZyAob3B0aW9uYWxseSBwcmVmaXhlZCBieSAiMHgiKS4KLUl0IGlzIHR5cGljYWxseSBub3QgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgdGhpcyBlbmdpbmUgSUQsIGFzIGl0IHdpbGwKLXVzdWFsbHkgYmUgZGlzY292ZXJlZCBhdXRvbWF0aWNhbGx5LgogLlRQCi0uQkkgLUUgIiBlbmdpbmVJRCIKLVNldCB0aGUgY29udGV4dCBlbmdpbmVJRCB1c2VkIGZvciBTTk1QdjMgUkVRVUVTVCBtZXNzYWdlcyBzY29wZWRQZHUsCi1naXZlbiBhcyBhIGhleGFkZWNpbWFsIHN0cmluZy4KLUlmIG5vdCBzcGVjaWZpZWQsIHRoaXMgd2lsbCBkZWZhdWx0IHRvIHRoZSBhdXRob3JpdGF0aXZlIGVuZ2luZUlELgotLlRQCi0uQiAtaCwgLS1oZWxwCisuQiBcLWgsIFwtXC1oZWxwCiBEaXNwbGF5IGEgYnJpZWYgdXNhZ2UgbWVzc2FnZSBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAtSAorLkIgXC1ICiBEaXNwbGF5IGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcyB1bmRlcnN0b29kIGJ5IHRoZQogY29tbWFuZCBhbmQgdGhlbiBleGl0LgogLlRQCi0uQkkgLUkgIiBbYnJSaHVdIgorLkJJIFwtSSAiIFticlJodV0iCiBTcGVjaWZpZXMgaW5wdXQgcGFyc2luZyBvcHRpb25zLiBTZWUgCiAuQiBJTlBVVCBPUFRJT05TIAogYmVsb3cuCiAuVFAKLS5CSSAtbCAiIHNlY0xldmVsIgotU2V0IHRoZSBzZWN1cml0eUxldmVsIHVzZWQgZm9yIFNOTVB2MyBtZXNzYWdlcwotKG5vQXV0aE5vUHJpdnxhdXRoTm9Qcml2fGF1dGhQcml2KS4gIEFwcHJvcHJpYXRlIHBhc3MgcGhyYXNlKHMpIG11c3QKLXByb3ZpZGVkIHdoZW4gdXNpbmcgYW55IGxldmVsIGhpZ2hlciB0aGFuIG5vQXV0aE5vUHJpdi4KLU92ZXJyaWRlcyB0aGUgXGZJZGVmU2VjdXJpdHlMZXZlbFxmUiB0b2tlbiBpbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4KLS5UUAotLkJJIC1MICIgW2VFZkZvT3NTXSIKKy5CSSBcLUwgIiBbZUVmRm9Pc1NdIgogU3BlY2lmaWVzIG91dHB1dCBsb2dnaW5nIG9wdGlvbnMuIFNlZSAKIC5CIExPR0dJTkcgT1BUSU9OUyAKIGJlbG93LgogLlRQCi0uQkkgLW0gIiBNSUJMSVNUIgorLkJJIFwtbSAiIE1JQkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBNSUIgbW9kdWxlcyAobm90IGZpbGVzKSB0byBsb2FkIGZvcgogdGhpcyBhcHBsaWNhdGlvbi4gIFRoaXMgb3ZlcnJpZGVzIChvciBhdWdtZW50cykgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlCiBNSUJTLCB0aGUgXGZJc25tcC5jb25mXGZSIGRpcmVjdGl2ZSBcZkltaWJzXGZSLCBhbmQgdGhlIGxpc3Qgb2YgTUlCcwpAQCAtMTM3LDcgKzEwMCw3IEBACiAuSVAKIElmIAogLkkgTUlCTElTVAotaGFzIGEgbGVhZGluZyAnLScgb3IgJysnIGNoYXJhY3RlciwgdGhlbiB0aGUgTUlCIG1vZHVsZXMgbGlzdGVkIGFyZQoraGFzIGEgbGVhZGluZyAnXC0nIG9yICcrJyBjaGFyYWN0ZXIsIHRoZW4gdGhlIE1JQiBtb2R1bGVzIGxpc3RlZCBhcmUKIGxvYWRlZCBpbiBhZGRpdGlvbiB0byB0aGUgZGVmYXVsdCBsaXN0LCBjb21pbmcgYmVmb3JlIG9yIGFmdGVyCiB0aGlzIGxpc3QgcmVzcGVjdGl2ZWx5LgogT3RoZXJ3aXNlLCB0aGUgc3BlY2lmaWVkIE1JQnMgYXJlIGxvYWRlZCBcZklpbnN0ZWFkXGZSIG9mIHRoaXMKQEAgLTE0OSw3ICsxMTIsNyBAQAogRXZlcnkgZmlsZSB3aG9zZSBuYW1lIGRvZXMgbm90IGJlZ2luIHdpdGggIi4iIHdpbGwgYmUgcGFyc2VkIGFzCiBpZiBpdCB3ZXJlIGEgTUlCIGZpbGUuCiAuVFAKLS5CSSAtTSAiIERJUkxJU1QiCisuQkkgXC1NICIgRElSTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCcy4KIFRoaXMgb3ZlcnJpZGVzIChvciBhdWdtZW50cykgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQkRJUlMsCiB0aGUgXGZJc25tcC5jb25mXGZSIGRpcmVjdGl2ZSBcZkltaWJkaXJzXGZSLCBhbmQgdGhlIGRlZmF1bHQKQEAgLTE1OCw3ICsxMjEsNyBAQAogLklQCiBJZiAKIC5JIERJUkxJU1QKLWhhcyBhIGxlYWRpbmcgJy0nIG9yICcrJyBjaGFyYWN0ZXIsIHRoZW4gdGhlIGdpdmVuIGRpcmVjdG9yaWVzIGFyZQoraGFzIGEgbGVhZGluZyAnXC0nIG9yICcrJyBjaGFyYWN0ZXIsIHRoZW4gdGhlIGdpdmVuIGRpcmVjdG9yaWVzIGFyZQogYWRkZWQgdG8gdGhlIGRlZmF1bHQgbGlzdCwgYmVpbmcgc2VhcmNoZWQgYmVmb3JlIG9yIGFmdGVyIHRoZQogZGlyZWN0b3JpZXMgb24gdGhpcyBsaXN0IHJlc3BlY3RpdmVseS4KIE90aGVyd2lzZSwgdGhlIHNwZWNpZmllZCBkaXJlY3RvcmllcyBhcmUgc2VhcmNoZWQgXGZJaW5zdGVhZFxmUgpAQCAtMTcyLDYzICsxMzUsMTg4IEBACiBUbyBhdm9pZCBzZWFyY2hpbmcgYW55IE1JQiBkaXJlY3Rvcmllcywgc2V0IHRoZSBNSUJESVJTCiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0byB0aGUgZW1wdHkgc3RyaW5nICgiIikuCiAuXCIKLS5cIiBYWFggLSBvciAgICAgLU0gIiIgICAgPz8KKy5cIiBYWFggLSBvciAgICAgXC1NICIiICAgID8/CiAuXCIKIAotTm90ZSB0aGF0IE1JQnMgc3BlY2lmaWVkIHVzaW5nIHRoZSAtbSBvcHRpb24gb3IgdGhlIFxmSW1pYnNcZlIKK05vdGUgdGhhdCBNSUJzIHNwZWNpZmllZCB1c2luZyB0aGUgXC1tIG9wdGlvbiBvciB0aGUgXGZJbWlic1xmUgogY29uZmlndXJhdGlvbiBkaXJlY3RpdmUgd2lsbCBiZSBsb2FkZWQgZnJvbSBvbmUgb2YgdGhlIGRpcmVjdG9yaWVzCi1saXN0ZWQgYnkgdGhlIC1NIG9wdGlvbiAob3IgZXF1aXZhbGVudHMpLgorbGlzdGVkIGJ5IHRoZSBcLU0gb3B0aW9uIChvciBlcXVpdmFsZW50cykuCiBUaGUgXGZJbWliZmlsZVxmUiBkaXJlY3RpdmUgdGFrZXMgYSBmdWxsIHBhdGggdG8gdGhlIHNwZWNpZmllZCBNSUIKIGZpbGUsIHNvIHRoaXMgZG9lcyBub3QgbmVlZCB0byBiZSBpbiB0aGUgTUlCIGRpcmVjdG9yeSBzZWFyY2ggbGlzdC4KIC5UUAotLkJJIC1uICIgY29udGV4dE5hbWUiCi1TZXQgdGhlIGNvbnRleHROYW1lIHVzZWQgZm9yIFNOTVB2MyBtZXNzYWdlcy4gIFRoZSBkZWZhdWx0Ci1jb250ZXh0TmFtZSBpcyB0aGUgZW1wdHkgc3RyaW5nICIiLiAgT3ZlcnJpZGVzIHRoZSBcZklkZWZDb250ZXh0XGZSIHRva2VuCi1pbiB0aGUKLS5JIHNubXAuY29uZgotZmlsZS4gCi0uVFAKLS5CSSAtTyAiIFthYmVFZm5xUXNTdFR1VXZ4WF0iCi1TcGVjaWZpZXMgb3V0cHV0IHByaW50aW5nIG9wdGlvbnMuIFNlZSAKLS5CIE9VVFBVVCBPUFRJT05TCi1iZWxvdy4KLS5UUAotLkJJIC1QICIgW2NkZVJ1d1ddIgotU3BlY2lmaWVzIE1JQiBwYXJzaW5nIG9wdGlvbnMuICBTZWUKLS5CIE1JQiBQQVJTSU5HIE9QVElPTlMKLWJlbG93LgotLlRQCi0uQkkgLXIgIiByZXRyaWVzIgotU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyB0byBiZSB1c2VkIGluIHRoZSByZXF1ZXN0cy4gVGhlIGRlZmF1bHQKLWlzIDUuCi0uVFAKLS5CSSAtdCAiIHRpbWVvdXQiCi1TcGVjaWZpZXMgdGhlIHRpbWVvdXQgaW4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMuIFRoZSBkZWZhdWx0IGlzIDEuCi0uVFAKLS5CSSAtdSAiIHNlY05hbWUiCi1TZXQgdGhlIHNlY3VyaXR5TmFtZSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MyBtZXNzYWdlcy4KLU92ZXJyaWRlcyB0aGUgXGZJZGVmU2VjdXJpdHlOYW1lXGZSIHRva2VuIGluIHRoZQotLkkgc25tcC5jb25mCi1maWxlLgotLlRQCi0uQiAtdiBcZkkxXGZSIHwgXGZJMmNcZlIgfCBcZkkzCisuQiBcLXYgXGZJMVxmUiB8IFxmSTJjXGZSIHwgXGZJMwogU3BlY2lmaWVzIHRoZSBwcm90b2NvbCB2ZXJzaW9uIHRvIHVzZTogMSAoUkZDcyAxMTU1LTExNTcpLCAyYyAoUkZDcyAxOTAxLTE5MDgpLAogb3IgMyAoUkZDcyAyNTcxLTI1NzQpLiAgVGhlIGRlZmF1bHQgaXMgdHlwaWNhbGx5IHZlcnNpb24gMy4KIE92ZXJyaWRlcyB0aGUgXGZJZGVmVmVyc2lvblxmUiB0b2tlbiBpbiB0aGUKIC5JIHNubXAuY29uZgogZmlsZS4KKy5CSSBcLU8gIiBbYWJlRWZucVFzU3RUdVV2eFhdIgorU3BlY2lmaWVzIG91dHB1dCBwcmludGluZyBvcHRpb25zLiBTZWUgCisuQiBPVVRQVVQgT1BUSU9OUworYmVsb3cuCiAuVFAKLS5CIC1WLCAtLXZlcnNpb24KKy5CSSBcLVAgIiBbY2RlUnV3V10iCitTcGVjaWZpZXMgTUlCIHBhcnNpbmcgb3B0aW9ucy4gIFNlZQorLkIgTUlCIFBBUlNJTkcgT1BUSU9OUworYmVsb3cuCisuVFAKKy5CSSBcLXIgIiByZXRyaWVzIgorU3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgcmV0cmllcyB0byBiZSB1c2VkIGluIHRoZSByZXF1ZXN0cy4gVGhlIGRlZmF1bHQKK2lzIDUuCisuVFAKKy5CSSBcLXQgIiB0aW1lb3V0IgorU3BlY2lmaWVzIHRoZSB0aW1lb3V0IGluIHNlY29uZHMgYmV0d2VlbiByZXRyaWVzLiBUaGUgZGVmYXVsdCBpcyAxLgorRmxvYXRpbmcgcG9pbnQgbnVtYmVycyBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IGZyYWN0aW9ucyBvZiBzZWNvbmRzLgorLlRQCisuQiBcLVYsIFwtXC12ZXJzaW9uCiBEaXNwbGF5IHZlcnNpb24gaW5mb3JtYXRpb24gZm9yIHRoZSBhcHBsaWNhdGlvbiBhbmQgdGhlbiBleGl0LgogLlRQCi0uQkkgLXggIiBwcml2UHJvdG9jb2wiCisuQkkgXC1ZICJuYW1lIj0idmFsdWUiCisuVFAKKy5CSSBcLVwtICJuYW1lIj0idmFsdWUiCitBbGxvd3Mgb25lIHRvIHNwZWNpZnkgYW55IHRva2VuICgibmFtZSIpIHN1cHBvcnRlZCBpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZSBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gInZhbHVlIi4gT3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIHRva2VuIGluIHRoZQorLkkgc25tcC5jb25mCitmaWxlLiBTZWUKKy5JIHNubXAuY29uZig1KQorZm9yIHRoZSBmdWxsIGxpc3Qgb2YgdG9rZW5zLgorCisKKy5TSCBTTk1QdjMgT3B0aW9ucworVGhlIGZvbGxvd2luZyBvcHRpb25zIGFyZSBnZW5lcmljIHRvIGFsbCBmb3JtcyBvZiBTTk1QdjMsIHJlZ2FyZGxlc3MKK29mIHdoZXRoZXIgaXQncyB0aGUgb3JpZ2luYWwgU05NUHYzIHdpdGggVVNNIG9yIHRoZSBuZXdlciBTTk1QdjMgb3ZlcgorKEQpVExTIHN1cHBvcnQuCisKKy5UUAorLkJJIFwtbCAiIHNlY0xldmVsIgorU2V0IHRoZSBzZWN1cml0eUxldmVsIHVzZWQgZm9yIFNOTVB2MyBtZXNzYWdlcworKG5vQXV0aE5vUHJpdnxhdXRoTm9Qcml2fGF1dGhQcml2KS4gIEFwcHJvcHJpYXRlIHBhc3MgcGhyYXNlKHMpIG11c3QKK3Byb3ZpZGVkIHdoZW4gdXNpbmcgYW55IGxldmVsIGhpZ2hlciB0aGFuIG5vQXV0aE5vUHJpdi4KK092ZXJyaWRlcyB0aGUgXGZJZGVmU2VjdXJpdHlMZXZlbFxmUiB0b2tlbiBpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZS4KKy5UUAorLkJJIFwtbiAiIGNvbnRleHROYW1lIgorU2V0IHRoZSBjb250ZXh0TmFtZSB1c2VkIGZvciBTTk1QdjMgbWVzc2FnZXMuICBUaGUgZGVmYXVsdAorY29udGV4dE5hbWUgaXMgdGhlIGVtcHR5IHN0cmluZyAiIi4gIE92ZXJyaWRlcyB0aGUgXGZJZGVmQ29udGV4dFxmUiB0b2tlbgoraW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUuIAorCisuU0ggU05NUHYzIG92ZXIgVExTIE9wdGlvbnMKK1RoZXNlIG9wdGlvbnMgcGFzcyB0cmFuc3BvcnQtc3BlY2lmaWMgcGFyYW1ldGVycyB0byB0aGUgVExTIGxheWVyLiAgSWYKK3lvdSdyZSB1c2luZyBTTk1QIG92ZXIgVExTIG9yIERUTFMgeW91J2xsIG5lZWQgdG8gcGFzcyBhIGNvbWJpbmF0aW9uCitvZiB0aGVzZSBlaXRoZXIgdGhyb3VnaCB0aGVzZSBjb21tYW5kIGxpbmUgb3B0aW9ucyBvciB0aHJvdWdoCitzbm1wLmNvbmYgY29uZmlndXJhdGlvbiB0b2tlbnMuCisuUFAKK0Egbm90ZSBhYm91dAorLkkgIjxjZXJ0aWZpY2F0ZS1zcGVjaWZpZXI+cyI6CitOZXQtU05NUCBsb29rcyBmb3IgWC41MDkgY2VydGlmaWNhdGVzIGluIGVhY2ggb2YgdGhlIG5vcm1hbCBTTk1QCitjb25maWd1cmF0aW9uIGRpcmVjdG9yeSBzZWFyY2ggcGF0aHMgdW5kZXIgYSAidGxzIiBzdWJkaXJlY3RvcnkuICBJRSwKK2l0IHdpbGwgbG9vayBpbiB+Ly5zbm1wL3RscyBhbmQgaW4gL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3RscyBmb3IKK2NlcnRpZmljYXRlcy4gIFRoZSBjZXJ0aWZpY2F0ZSBjb21wb25lbnRzIChlZywgdGhlIHB1YmxpYyBhbmQgcHJpdmF0ZQoraGFsdmVzKSBhcmUgc3RvcmVkIGluIHN1Yi1kaXJlY3RvcmllcyB1bmRlcm5lYXRoIHRoaXMgcm9vdCBzZXQgb2YKK2RpcmVjdG9yaWVzLiAgU2VlIHRoZSBuZXRcLXNubXBcLWNlcnQgdG9vbCBmb3IgaGVscCBpbiBpbXBvcnRpbmcsCitjcmVhdGluZyBhbmQgbWFuYWdpbmcgTmV0LVNOTVAgY2VydGlmaWNhdGVzLgorLkkgIjxjZXJ0aWZpY2F0ZS1zcGVjaWZpZXI+cyIKK2NhbiByZWZlcmVuY2UgZWl0aGVyIGEgZmluZ2VycHJpbnQgb2YgdGhlIGNlcnRpZmljYXRlIHRvIHVzZSAodGhlCituZXRcLXNubXBcLWNlcnQgdG9vbCBjYW4gaGVscCB5b3UgZmlndXJlIG91dCB0aGUgY2VydGlmaWNhdGVzKSBvciB0aGUKK2ZpbGVuYW1lJ3MgcHJlZml4IGNhbiBiZSB1c2VkLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBoYWQgYSAic25tcGQuY3J0IgorY2VydGlmaWNhdGUgZmlsZSB0aGVuIHlvdSBjb3VsZCBzaW1wbHkgcmVmZXIgdG8gdGhlIGNlcnRpZmljYXRlIHZpYQordGhlICJzbm1wZCIgc3BlY2lmaWVyLgorLlRQCisuQkkgIlwtVCBsb2NhbENlcnQ9PGNlcnRpZmljYXRlLXNwZWNpZmllcj4iCitJbmRpY2F0ZXMgdG8gdGhlIHRyYW5zcG9ydCB3aGljaCBrZXkgc2hvdWxkIGJlIHVzZWQgdG8gaW5pdGlhdGUgKEQpVExTCitjbGllbnQgY29ubmVjdGlvbnMuICBUaGlzIHdvdWxkIHR5cGljYWxseSBiZSBhIGNlcnRpZmljYXRlIGZvdW5kIHVzaW5nCit0aGUgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQsIHRoZSBhcHBsaWNhdGlvbiBuYW1lIChlZyBzbm1wZCwgc25tcHRyYXBkLCBwZXJsLCBweXRob24pIG9yCitnZW5lcmljaXplZCBuYW1lICJzbm1wYXBwIiBpZiB1c2luZyBvbmUgb2YgdGhlIGdlbmVyaWMgYXBwbGljYXRpb25zCisoc25tcGdldCwgc25tcHdhbGssIGV0YykuICBUaGlzIGNhbiBhbHNvIGJlIHNldCB1c2luZyB0aGUKK2xvY2FsQ2VydCBzcGVjaWZpZXIgaW4gYSBzbm1wLmNvbmYgY29uZmlndXJhdGlvbiBmaWxlLgorLlRQCisuQkkgIlwtVCBwZWVyQ2VydD08Y2VydGlmaWNhdGUtc3BlY2lmaWVyPiIKK0lmIHlvdSBleHBlY3QgYSBwYXJ0aWN1bGFyIGNlcnRpZmljYXRlIHRvIGJlIHByZXNlbnRlZCBieSB0aGUgb3RoZXIKK3NpZGUgdGhlbiB5b3UgY2FuIHVzZSB0aGlzIHNwZWNpZmllciB0byBpbmRpY2F0ZSB0aGUgY2VydGlmaWNhdGUgaXQKK3Nob3VsZCBwcmVzZW50LiAgSWYgaXQgZmFpbHMgdG8gcHJlc2VudCB0aGUgZXhwZWN0ZWQgY2VydGlmaWNhdGUgdGhlCitjbGllbnQgd2lsbCByZWZ1c2UgdG8gb3BlbiB0aGUgY29ubmVjdGlvbiAoYmVjYXVzZSBkb2luZyBvdGhlcndpc2UKK2NvdWxkIGxlYWQgdG8gbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcykuICBUaGlzIGNhbiBhbHNvIGJlIHNldCB1c2luZwordGhlIHBlZXJDZXJ0IHNwZWNpZmllciBpbiBhIHNubXAuY29uZiBjb25maWd1cmF0aW9uIGZpbGUuCisuVFAKKy5CSSAiXC1UIHRydXN0X2NlcnQ9PGNlcnRpZmljYXRlLXNwZWNpZmllcj4iCitJZiB5b3UgaGF2ZSBhIHRydXN0ZWQgQ0EgY2VydGlmaWNhdGUgeW91IHdpc2ggdG8gYW5jaG9yIHRydXN0IHdpdGgsCit5b3UgY2FuIHVzZSB0aGlzIGZsYWcgdG8gbG9hZCBhIGdpdmVuIGNlcnRpZmljYXRlIGFzIGEgdHJ1c3QgYW5jaG9yLgorQSBjb3B5IG9mIHRoZSBjZXJ0aWZpY2F0ZSBtdXN0IGV4aXN0IHdpdGhpbiB0aGUgTmV0LVNOTVAgY2VydGlmaWNhdGUKK3N0b3JhZ2Ugc3lzdGVtIG9yIHRoaXMgbXVzdCBwb2ludCB0byBhIGNvbXBsZXRlIHBhdGggbmFtZS4gIEFsc28gc2VlCit0aGUgInRydXN0Q2VydCIgc25tcC5jb25mIGNvbmZpZ3VyYXRpb24gdG9rZW4uCisuVFAKKy5CSSAiXC1UIHRoZWlyX2hvc3RuYW1lPTxuYW1lPiIKK0lmIHRoZSBzZXJ2ZXIncyBwcmVzZW50ZWQgY2VydGlmaWNhdGUgY2FuIGJlIHZhbGlkYXRpbmcgdXNpbmcgYSB0cnVzdAorYW5jaG9yIHRoZW4gdGhlaXIgaG9zdG5hbWUgd2lsbCBiZSBjaGVja2VkIHRvIGVuc3VyZSB0aGVpciBwcmVzZW50ZWQKK2hvc3RuYW1lIG1hdGNoZXMgb25lIHRoYXQgaXMgZXhwZWN0ZWQgKHlvdSBkb24ndCB3YW50IHRvIGNvbm5lY3QgdG8KK2dvb2Rob3N0LmV4YW1wbGUuY29tIGFuZCBhY2NlcHQgYSBjZXJ0aWZpY2F0ZSBwcmVzZW50ZWQgYnkKK2JhZGhvc3QuZXhhbXBsZS5jb20gZG8geW91PykuICBUaGlzIHRva2VuIGNhbiBzcGVjaWZ5IHRoZSBleGFjdCBob3N0CituYW1lIGV4cGVjdGVkIHRvIGJlIHByZXNlbnRlZCBieSB0aGUgcmVtb3RlIHNpZGUsIGVpdGhlciBpbiBhCitzdWJqZWN0QWx0TmFtZSBmaWVsZCBvciBpbiB0aGUgQ29tbW9uTmFtZSBmaWVsZCBvZiB0aGUgc2VydmVyJ3MgWC41MDkKK2NlcnRpZmljYXRlLgorLlNIIFNOTVB2MyB3aXRoIFVTTSBPcHRpb25zCitUaGVzZSBvcHRpb25zIGFyZSBzcGVjaWZpYyB0byB1c2luZyBTTk1QdjMgd2l0aCB0aGUgb3JpZ2luYWwKK1VzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwgKFVTTSkuCisuVFAKKy5CSSAiXC0zW01tS2tdICAweEhFWEtFWSIKK1NldHMgdGhlIGtleXMgdG8gYmUgdXNlZCBmb3IgU05NUHYzIHRyYW5zYWN0aW9ucy4gIFRoZXNlIG9wdGlvbnMgYWxsb3cKK3lvdSB0byBzZXQgdGhlIG1hc3RlciBhdXRoZW50aWNhdGlvbiBhbmQgZW5jcnlwdGlvbiBrZXlzIChcLTNtIGFuZCBcLTNNCityZXNwZWN0aXZlbHkpIG9yIHNldCB0aGUgbG9jYWxpemVkIGF1dGhlbnRpY2F0aW9uIGFuZCBlbmNyeXB0aW9uIGtleXMKKyhcLTNrIGFuZCBcLTNLIHJlc3BlY3RpdmVseSkuICBTTk1QdjMga2V5cyBjYW4gYmUgZWl0aGVyIHBhc3NlZCBpbiBieQoraGFuZCB1c2luZyB0aGVzZSBmbGFncywgb3IgYnkgdGhlIHVzZSBvZiBrZXlzIGdlbmVyYXRlZCBmcm9tIHBhc3N3b3JkcwordXNpbmcgdGhlIFwtQSBhbmQgXC1YIGZsYWdzIGRpc2N1c3NlZCBiZWxvdy4gIEZvciBmdXJ0aGVyIGRldGFpbHMgb24KK1NOTVB2MyBhbmQgaXRzIHVzYWdlIG9mIGtleWluZyBpbmZvcm1hdGlvbiwgc2VlIHRoZSBOZXQtU05NUCB0dXRvcmlhbAord2ViIHNpdGUgKCBodHRwOi8vd3d3Lk5ldFwtU05NUC5vcmcvdHV0b3JpYWxcLTUvY29tbWFuZHMvICkuIAorT3ZlcnJpZGVzIHRoZSBkZWZBdXRoTWFzdGVyS2V5IChcLTNtKSwgZGVmUHJpdk1hc3RlcktleSAoXC0zTSksIAorZGVmQXV0aExvY2FsaXplZEtleSAoXC0zaykgb3IgZGVmUHJpdkxvY2FsaXplZEtleSAoXC0zSykgdG9rZW5zLCByZXNwZWN0aXZlbHksIAoraW4gdGhlCisuSSBzbm1wLmNvbmYKK2ZpbGUsIHNlZQorLkkgc25tcC5jb25mKDUpLgorLlRQCisuQkkgXC1hICIgYXV0aFByb3RvY29sIgorU2V0IHRoZSBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCAoTUQ1IG9yIFNIQSkgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMKK21lc3NhZ2VzLiBPdmVycmlkZXMgdGhlIFxmSWRlZkF1dGhUeXBlXGZSIHRva2VuIGluIHRoZQorLkkgc25tcC5jb25mCitmaWxlLgorLlRQCisuQkkgXC1BICIgYXV0aFBhc3N3b3JkIgorU2V0IHRoZSBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZSB1c2VkIGZvciBhdXRoZW50aWNhdGVkIFNOTVB2MworbWVzc2FnZXMuICBPdmVycmlkZXMgdGhlIFxmSWRlZkF1dGhQYXNzcGhyYXNlXGZSIHRva2VuIGluIHRoZQorLkkgc25tcC5jb25mCitmaWxlLiBJdCBpcyBpbnNlY3VyZSB0byBzcGVjaWZ5IHBhc3MgcGhyYXNlcyBvbiB0aGUgY29tbWFuZCBsaW5lLAorc2VlCisuSSBzbm1wLmNvbmYoNSkuCisuVFAKKy5CSSBcLWUgIiBlbmdpbmVJRCIKK1NldCB0aGUgYXV0aG9yaXRhdGl2ZSAoc2VjdXJpdHkpIGVuZ2luZUlEIHVzZWQgZm9yIFNOTVB2MyBSRVFVRVNUCittZXNzYWdlcywgZ2l2ZW4gYXMgYSBoZXhhZGVjaW1hbCBzdHJpbmcgKG9wdGlvbmFsbHkgcHJlZml4ZWQgYnkgIjB4IikuCitJdCBpcyB0eXBpY2FsbHkgbm90IG5lY2Vzc2FyeSB0byBzcGVjaWZ5IHRoaXMgZW5naW5lIElELCBhcyBpdCB3aWxsCit1c3VhbGx5IGJlIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseS4KKy5UUAorLkJJIFwtRSAiIGVuZ2luZUlEIgorU2V0IHRoZSBjb250ZXh0IGVuZ2luZUlEIHVzZWQgZm9yIFNOTVB2MyBSRVFVRVNUIG1lc3NhZ2VzIHNjb3BlZFBkdSwKK2dpdmVuIGFzIGEgaGV4YWRlY2ltYWwgc3RyaW5nLgorSWYgbm90IHNwZWNpZmllZCwgdGhpcyB3aWxsIGRlZmF1bHQgdG8gdGhlIGF1dGhvcml0YXRpdmUgZW5naW5lSUQuCisuVFAKKy5CSSBcLXUgIiBzZWNOYW1lIgorU2V0IHRoZSBzZWN1cml0eU5hbWUgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMgbWVzc2FnZXMuCitPdmVycmlkZXMgdGhlIFxmSWRlZlNlY3VyaXR5TmFtZVxmUiB0b2tlbiBpbiB0aGUKKy5JIHNubXAuY29uZgorZmlsZS4KKy5UUAorLkJJIFwteCAiIHByaXZQcm90b2NvbCIKIFNldCB0aGUgcHJpdmFjeSBwcm90b2NvbCAoREVTIG9yIEFFUykgdXNlZCBmb3IgZW5jcnlwdGVkIFNOTVB2MyBtZXNzYWdlcy4gCiBPdmVycmlkZXMgdGhlIFxmSWRlZlByaXZUeXBlXGZSIHRva2VuIGluIHRoZQogLkkgc25tcC5jb25mCiBmaWxlLiBUaGlzIG9wdGlvbiBpcyBvbmx5IHZhbGlkIGlmIHRoZSBOZXQtU05NUCBzb2Z0d2FyZSB3YXMgYnVpbGQKIHRvIHVzZSBPcGVuU1NMLgogLlRQCi0uQkkgLVggIiBwcml2UGFzc3dvcmQiCisuQkkgXC1YICIgcHJpdlBhc3N3b3JkIgogU2V0IHRoZSBwcml2YWN5IHBhc3MgcGhyYXNlIHVzZWQgZm9yIGVuY3J5cHRlZCBTTk1QdjMgbWVzc2FnZXMuCiBPdmVycmlkZXMgdGhlIFxmSWRlZlByaXZQYXNzcGhyYXNlXGZSIHRva2VuIGluIHRoZQogLkkgc25tcC5jb25mCkBAIC0yMzYsMjMgKzMyNCwyMSBAQAogSXQgaXMgaW5zZWN1cmUgdG8gc3BlY2lmeSBwYXNzIHBocmFzZXMgb24gdGhlIGNvbW1hbmQgbGluZSwgc2VlCiAuSSBzbm1wLmNvbmYoNSkuCiAuVFAKLS5CSSAtWiAiIGJvb3RzLHRpbWUiCisuQkkgXC1aICIgYm9vdHMsdGltZSIKIFNldCB0aGUgZW5naW5lQm9vdHMgYW5kIGVuZ2luZVRpbWUgdXNlZCBmb3IgYXV0aGVudGljYXRlZCBTTk1QdjMKIG1lc3NhZ2VzLiAgVGhpcyB3aWxsIGluaXRpYWxpemUgdGhlIGxvY2FsIG5vdGlvbiBvZiB0aGUgYWdlbnRzCiBib290cy90aW1lIHdpdGggYW4gYXV0aGVudGljYXRlZCB2YWx1ZSBzdG9yZWQgaW4gdGhlIExDRC4KIEl0IGlzIHR5cGljYWxseSBub3QgbmVjZXNzYXJ5IHRvIHNwZWNpZnkgdGhpcyBvcHRpb24sIGFzIHRoZXNlIHZhbHVlcwogd2lsbCB1c3VhbGx5IGJlIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseS4KKworCisuU0ggU05NUHYxIGFuZCBTTk1QdjJjIE9wdGlvbnMgCiAuVFAKLS5CSSAtWSAibmFtZSI9InZhbHVlIgotLlRQCi0uQkkgLS0gIm5hbWUiPSJ2YWx1ZSIKLUFsbG93cyB0byBzcGVjaWZ5IGFueSB0b2tlbiAoIm5hbWUiKSBzdXBwb3J0ZWQgaW4gdGhlCisuQkkgXC1jICIgY29tbXVuaXR5IgorU2V0IHRoZSBjb21tdW5pdHkgc3RyaW5nIGZvciBTTk1QdjEvdjJjIHRyYW5zYWN0aW9ucy4KK092ZXJyaWRlcyB0aGUgXGZJZGVmQ29tbXVuaXR5XGZSIHRva2VuIGluIHRoZQogLkkgc25tcC5jb25mCi1maWxlIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byAidmFsdWUiLiBPdmVycmlkZXMgdGhlIGNvcnJlc3BvbmRpbmcgdG9rZW4gaW4gdGhlCi0uSSBzbm1wLmNvbmYKLWZpbGUuIFNlZQotLkkgc25tcC5jb25mKDUpCi1mb3IgdGhlIGZ1bGwgbGlzdCBvZiB0b2tlbnMuCitmaWxlLgogCiAuU0ggQUdFTlQgU1BFQ0lGSUNBVElPTgogLlBQCkBAIC0zMjcsNDEgKzQxMyw2IEBACiBvbiBwb3J0CiAuSSAxMTYxCiB1c2luZyBUQ1AvSVB2NCBhbmQgcGVyZm9ybSBxdWVyeSBvdmVyIHRoYXQgY29ubmVjdGlvbi4KLS5UUCAyNAotLklSICJpcHg6OjAwRDBCN0FBRTMwOCIKLXBlcmZvcm0gcXVlcnkgdXNpbmcgSVBYIGRhdGFncmFtcyB0byBub2RlIG51bWJlciAKLS5JIDAwRDBCN0FBRTMwOAotb24gdGhlIGRlZmF1bHQgbmV0d29yaywgYW5kIHVzaW5nIHRoZSBkZWZhdWx0IElQWCBwb3J0IG9mIDM2ODc5ICg5MDBGCi1oZXhhZGVjaW1hbCksIGFzIHN1Z2dlc3RlZCBpbiBSRkMgMTkwNi4KLS5UUCAyNAotLklSICJpcHg6MEFFNDM0MDk6MDBEMEI3MjFDNkMwLzExNjEiCi1wZXJmb3JtIHF1ZXJ5IHVzaW5nIElQWCBkYXRhZ3JhbXMgdG8gcG9ydAotLkkgMTE2MQotb24gbm9kZSBudW1iZXIKLS5JIDAwRDBCNzIxQzZDMAotb24gbmV0d29yayBudW1iZXIKLS5JUiAwQUU0MzQwOSAuCi0uVFAgMjQKLS5JUiAidW5peDovdG1wL2xvY2FsLWFnZW50IgotY29ubmVjdCB0byB0aGUgVW5peCBkb21haW4gc29ja2V0IAotLklSIC90bXAvbG9jYWwtYWdlbnQgLAotYW5kIHBlcmZvcm0gdGhlIHF1ZXJ5IG92ZXIgdGhhdCBjb25uZWN0aW9uLgotLlRQIDI0Ci0uSVIgIi90bXAvbG9jYWwtYWdlbnQiCi1pZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb24sIHNpbmNlIHRoZSBVbml4IGRvbWFpbiBpcyB0aGUKLWRlZmF1bHQgdHJhbnNwb3J0IGlmZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSA8dHJhbnNwb3J0LWFkZHJlc3M+Ci1pcyBhICcvJy4KLS5UUCAyNAotLklSICJBQUw1UFZDOjEwMCIKLXBlcmZvcm0gdGhlIHF1ZXJ5IHVzaW5nIEFBTDUgUERVcyBzZW50IG9uIHRoZSBwZXJtYW5lbnQgdmlydHVhbAotY2lyY3VpdCB3aXRoIFZQST0wIGFuZCBWQ0k9MTAwIChkZWNpbWFsKSBvbiB0aGUgZmlyc3QgQVRNIGFkYXB0ZXIgaW4gdGhlCi1tYWNoaW5lLgotLlRQIDI0Ci0uSVIgIlBWQzoxLjEwLjMyIgotcGVyZm9ybSB0aGUgcXVlcnkgdXNpbmcgQUFMNSBQRFVzIHNlbnQgb24gdGhlIHBlcm1hbmVudCB2aXJ0dWFsCi1jaXJjdWl0IHdpdGggVlBJPTEwIChkZWNpbWFsKSBhbmQgVkNJPTMyIChkZWNpbWFsKSBvbiB0aGUgc2Vjb25kIEFUTQotYWRhcHRlciBpbiB0aGUgbWFjaGluZS4gIE5vdGUgdGhhdCAiUFZDIiBpcyBhIHN5bm9ueW0gZm9yICJBQUw1UFZDIi4KLS5UUCAyNAogLklSICJ1ZHA2Omhvc3RuYW1lOjEwMTYxIgogcGVyZm9ybSB0aGUgcXVlcnkgdXNpbmcgVURQL0lQdjYgZGF0YWdyYW1zIHRvIHBvcnQKIC5JIDEwMTYxCkBAIC0zNzcsNiArNDI4LDY0IEBACiBjb25uZWN0IHRvIHBvcnQgMTYxMSBvbiB0aGUgbG9jYWwgaG9zdAogLklSICIiICggOjoxIAogaW4gSVB2NiBwYXJsYW5jZSkgdXNpbmcgVENQL0lQdjYgYW5kIHBlcmZvcm0gcXVlcnkgb3ZlciB0aGF0IGNvbm5lY3Rpb24uCisuVFAgMjQKKy5JUiAidGxzOmhvc3RuYW1lOjEwMTYxIgorLlRQIDI0CisuSVIgImR0bHM6aG9zdG5hbWU6MTAxNjEiCitDb25uZWN0cyB1c2luZyBTTk1QIG92ZXIgRFRMUyBvciBUTFMgYXMgZG9jdW1lbnRlZCBieSB0aGUgSVNNUyB3b3JraW5nCitncm91cCAoUkZDcyBub3QgeWV0IHB1Ymxpc2hlZCBhcyBvZiB0aGlzIGRhdGUpLiAgVGhpcyB3aWxsIHJlcXVpcmUKKyhhbmQgYXV0b21hdGljYWxseSBlbnN1cmVzKSB0aGF0IHRoZSBUU00gc2VjdXJpdHkgbW9kZWwgaXMgaW4gdXNlLgorWW91J2xsIGFsc28gbmVlZCB0byBzZXQgdXAgdHJ1c3QgcGF0aHMgZm9yIHRoZSBjZXJ0aWZpY2F0ZXMgcHJlc2VudGVkCitieSB0aGUgc2VydmVyIChzZWUgYWJvdmUgZm9yIGRlc2NyaXB0aW9ucyBvZiB0aGlzKS4KKy5UUCAyNAorLklSICJzc2g6aG9zdG5hbWU6MjIiCitDb25uZWN0cyB1c2luZyBTTk1QIG92ZXIgU1NIIGFzIGRvY3VtZW50ZWQgYnkgdGhlIElTTVMgd29ya2luZyBncm91cAorKFJGQ3Mgbm90IHlldCBwdWJsaXNoZWQgYXMgb2YgdGhpcyBkYXRlKS4gIFRoaXMgd2lsbCByZXF1aXJlIHRoYXQgdGhlCitUU00gc2VjdXJpdHkgbW9kZWwgaXMgaW4gdXNlIChcLVwtZGVmU2VjdXJpdHlNb2RlbD10c20pLgorLlRQIDI0CisuSVIgImlweDo6MDBEMEI3QUFFMzA4IgorcGVyZm9ybSBxdWVyeSB1c2luZyBJUFggZGF0YWdyYW1zIHRvIG5vZGUgbnVtYmVyIAorLkkgMDBEMEI3QUFFMzA4CitvbiB0aGUgZGVmYXVsdCBuZXR3b3JrLCBhbmQgdXNpbmcgdGhlIGRlZmF1bHQgSVBYIHBvcnQgb2YgMzY4NzkgKDkwMEYKK2hleGFkZWNpbWFsKSwgYXMgc3VnZ2VzdGVkIGluIFJGQyAxOTA2LgorLlRQIDI0CisuSVIgImlweDowQUU0MzQwOTowMEQwQjcyMUM2QzAvMTE2MSIKK3BlcmZvcm0gcXVlcnkgdXNpbmcgSVBYIGRhdGFncmFtcyB0byBwb3J0CisuSSAxMTYxCitvbiBub2RlIG51bWJlcgorLkkgMDBEMEI3MjFDNkMwCitvbiBuZXR3b3JrIG51bWJlcgorLklSIDBBRTQzNDA5IC4KKy5UUCAyNAorLklSICJ1bml4Oi90bXAvbG9jYWxcLWFnZW50IgorY29ubmVjdCB0byB0aGUgVW5peCBkb21haW4gc29ja2V0IAorLklSIC90bXAvbG9jYWxcLWFnZW50ICwKK2FuZCBwZXJmb3JtIHRoZSBxdWVyeSBvdmVyIHRoYXQgY29ubmVjdGlvbi4KKy5UUCAyNAorLklSICIvdG1wL2xvY2FsXC1hZ2VudCIKK2lkZW50aWNhbCB0byB0aGUgcHJldmlvdXMgc3BlY2lmaWNhdGlvbiwgc2luY2UgdGhlIFVuaXggZG9tYWluIGlzIHRoZQorZGVmYXVsdCB0cmFuc3BvcnQgaWZmIHRoZSBmaXJzdCBjaGFyYWN0ZXIgb2YgdGhlIDx0cmFuc3BvcnQtYWRkcmVzcz4KK2lzIGEgJy8nLgorLlRQIDI0CisuSVIgImFsaWFzOm15bmFtZSIKK3BlcmZvcm0gYSBjb25uZWN0aW9uIHRvIHRoZQorLkkgbXluYW1lCithbGlhcyB3aGljaCBuZWVkcyB0byBiZSBkZWZpbmVkIGluIHRoZSBzbm1wLmNvbmYgZmlsZSB1c2luZyBhIGxpbmUKK2xpa2UgIgorLkkgImFsaWFzIG15bmFtZSB1ZHA6MTI3LjAuMC4xOjkxNjEiCisiLiAgQW55IHR5cGUgb2YgdHJhbnNwb3J0IGRlZmluaXRpb24gY2FuIGJlIHVzZWQgYXMgdGhlIGFsaWFzIGV4cGFuc2lvbgorcGFyYW1ldGVyLiAgQWxpYXNlcyBhcmUgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IgdXNpbmcgcmVwZWF0ZWQgY29tcGxleAordHJhbnNwb3J0IHN0cmluZ3MuCisuVFAgMjQKKy5JUiAiQUFMNVBWQzoxMDAiCitwZXJmb3JtIHRoZSBxdWVyeSB1c2luZyBBQUw1IFBEVXMgc2VudCBvbiB0aGUgcGVybWFuZW50IHZpcnR1YWwKK2NpcmN1aXQgd2l0aCBWUEk9MCBhbmQgVkNJPTEwMCAoZGVjaW1hbCkgb24gdGhlIGZpcnN0IEFUTSBhZGFwdGVyIGluIHRoZQorbWFjaGluZS4KKy5UUCAyNAorLklSICJQVkM6MS4xMC4zMiIKK3BlcmZvcm0gdGhlIHF1ZXJ5IHVzaW5nIEFBTDUgUERVcyBzZW50IG9uIHRoZSBwZXJtYW5lbnQgdmlydHVhbAorY2lyY3VpdCB3aXRoIFZQST0xMCAoZGVjaW1hbCkgYW5kIFZDST0zMiAoZGVjaW1hbCkgb24gdGhlIHNlY29uZCBBVE0KK2FkYXB0ZXIgaW4gdGhlIG1hY2hpbmUuICBOb3RlIHRoYXQgIlBWQyIgaXMgYSBzeW5vbnltIGZvciAiQUFMNVBWQyIuCiAuUFAKIE5vdGUgdGhhdCBub3QgYWxsIHRoZSB0cmFuc3BvcnQgZG9tYWlucyBsaXN0ZWQgYWJvdmUgd2lsbCBhbHdheXMgYmUKIGF2YWlsYWJsZTsgZm9yIGluc3RhbmNlLCBob3N0cyB3aXRoIG5vIElQdjYgc3VwcG9ydCB3aWxsIG5vdCBiZSBhYmxlCkBAIC0zODQsMzMgKzQ5MywzMiBAQAogdGhlIGVycm9yICJVbmtub3duIGhvc3QiLiAgTGlrZXdpc2UsIHNpbmNlIEFBTDUgUFZDIHN1cHBvcnQgaXMgb25seQogY3VycmVudGx5IGF2YWlsYWJsZSBvbiBMaW51eCwgaXQgd2lsbCBmYWlsIHdpdGggdGhlIHNhbWUgZXJyb3Igb24KIG90aGVyIHBsYXRmb3Jtcy4KLQogLlNIICJNSUIgUEFSU0lORyBPUFRJT05TIgogVGhlIE5ldC1TTk1QIE1JQiBwYXJzZXIgbW9zdGx5IGFkaGVyZXMgdG8gdGhlIFN0cnVjdHVyZSBvZiBNYW5hZ2VtZW50CiBJbmZvcm1hdGlvbiAoU01JKS4gIEFzIHRoYXQgc3BlY2lmaWNhdGlvbiBoYXMgY2hhbmdlZCB0aHJvdWdoIHRpbWUsIGFuZAogaW4gcmVjb2duaXRpb24gb2YgdGhlIChhaGVtKSBkaXZlcnNpdHkgaW4gY29tcGxpYW5jZSBleHByZXNzZWQgaW4gTUlCCiBmaWxlcywgYWRkaXRpb25hbCBvcHRpb25zIHByb3ZpZGUgbW9yZSBmbGV4aWJpbGl0eSBpbiByZWFkaW5nIE1JQiBmaWxlcy4KIC5UUAotLkIgIi1QYyIKKy5CICJcLVBjIgogVG9nZ2xlcyB3aGV0aGVyIEFTTi4xIGNvbW1lbnRzIHNob3VsZCBleHRlbmQgdG8gdGhlIGVuZCBvZiB0aGUgTUlCCiBzb3VyY2UgbGluZS4KLVN0cmljdGx5IHNwZWFraW5nLCBhIHNlY29uZCBhcHBlYXJhbmNlIG9mICItLSIgc2hvdWxkIHRlcm1pbmF0ZSB0aGUKK1N0cmljdGx5IHNwZWFraW5nLCBhIHNlY29uZCBhcHBlYXJhbmNlIG9mICJcLVwtIiBzaG91bGQgdGVybWluYXRlIHRoZQogY29tbWVudCwgYnV0IHRoaXMgYnJlYWtzIHNvbWUgTUlCIGZpbGVzLgogVGhlIGRlZmF1bHQgYmVoYXZpb3VyICh0byBpbnRlcnByZXQgY29tbWVudHMgY29ycmVjdGx5KSBjYW4gYWxzbwotYmUgc2V0IHdpdGggdGhlIChtaXNuYW1lZCkgY29uZmlndXJhdGlvbiB0b2tlbiBcZklzdHJpY3RDb21tZW50VGVybVxmUi4KK2JlIHNldCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHRva2VuIFxmSWNvbW1lbnRUb0VPTFxmUi4KIC5UUAotLkIgIi1QZCIKKy5CICJcLVBkIgogRGlzYWJsZXMgdGhlIGxvYWRpbmcgb2YgTUlCIG9iamVjdCBERVNDUklQVElPTnMgd2hlbiBwYXJzaW5nIE1JQiBmaWxlcy4KIFRoaXMgcmVkdWNlcyB0aGUgYW1vdW50IG9mIG1lbW9yeSB1c2VkIGJ5IHRoZSBydW5uaW5nIGFwcGxpY2F0aW9uLgogLlRQCi0uQiAiLVBlIgorLkIgIlwtUGUiCiBUb2dnbGVzIHdoZXRoZXIgdG8gc2hvdyBlcnJvcnMgZW5jb3VudGVyZWQgd2hlbiBwYXJzaW5nIE1JQiBmaWxlcy4KIFRoZXNlIGluY2x1ZGUKIHJlZmVyZW5jZXMgdG8gSU1QT1JUZWQgbW9kdWxlcyBhbmQgTUlCIG9iamVjdHMgdGhhdCBjYW5ub3QgYmUKIGxvY2F0ZWQgaW4gdGhlIE1JQiBkaXJlY3Rvcnkgc2VhcmNoIGxpc3QuCiBUaGUgZGVmYXVsdCBiZWhhdmlvdXIgY2FuIGFsc28gYmUgc2V0IHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gdG9rZW4gXGZJc2hvd01pYkVycm9yc1xmUi4KIC5UUAotLkIgIi1QUiIKKy5CICJcLVBSIgogSWYgdGhlIHNhbWUgTUlCIG9iamVjdCAocGFyZW50IG5hbWUgYW5kIHN1Yi1pZGVudGlmaWVyKSBhcHBlYXJzIG11bHRpcGxlCiB0aW1lcyBpbiB0aGUgbGlzdCBvZiBNSUIgZGVmaW5pdGlvbnMgbG9hZGVkLCB1c2UgdGhlIGxhc3QgdmVyc2lvbiB0byBiZQogcmVhZCBpbi4gIEJ5IGRlZmF1bHQsIHRoZSBmaXJzdCB2ZXJzaW9uIHdpbGwgYmUgdXNlZCwgYW5kIGFueSBkdXBsaWNhdGVzCkBAIC00MjQsMjAgKzUzMiwyMCBAQAogLlwiIFNldHRpbmcgdGhpcyBvcHRpb24gbWF5IHJlc3VsdCBpbiBhbiBpbmNvcnJlY3QgaGllcmFyY2h5LgogLlwiIFhYWCAtIFdoeT8KIC5UUAotLkIgIi1QdSIKKy5CICJcLVB1IgogVG9nZ2xlcyB3aGV0aGVyIHRvIGFsbG93IHRoZSB1bmRlcmxpbmUgY2hhcmFjdGVyIGluIE1JQiBvYmplY3QgbmFtZXMKIGFuZCBvdGhlciBzeW1ib2xzLgogU3RyaWN0bHkgc3BlYWtpbmcsIHRoaXMgaXMgbm90IHZhbGlkIFNNSSBzeW50YXgsIGJ1dCBzb21lIHZlbmRvciBNSUIKIGZpbGVzIGRlZmluZSBzdWNoIG5hbWVzLgogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGNhbiBhbHNvIGJlIHNldCB3aXRoIHRoZSBjb25maWd1cmF0aW9uIHRva2VuIFxmSW1pYkFsbG93VW5kZXJsaW5lXGZSLgogLlRQCi0uQiAiLVB3IgorLkIgIlwtUHciCiBTaG93IHZhcmlvdXMgd2FybmluZyBtZXNzYWdlcyBpbiBwYXJzaW5nIE1JQiBmaWxlcyBhbmQgYnVpbGRpbmcKIHRoZSBvdmVyYWxsIE9JRCB0cmVlLgogVGhpcyBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUKIFxmSW1pYldhcm5pbmdMZXZlbCAxXGZSCiAuVFAKLS5CICItUFciCisuQiAiXC1QVyIKIFNob3cgc29tZSBhZGRpdGlvbmFsIHdhcm5pbmcgbWVzc2FnZXMsIG1vc3RseSByZWxhdGluZyB0byBwYXJzaW5nCiBpbmRpdmlkdWFsIE1JQiBvYmplY3RzLgogVGhpcyBjYW4gYWxzbyBiZSBzZXQgd2l0aCB0aGUgY29uZmlndXJhdGlvbiBkaXJlY3RpdmUKQEAgLTQ0NSwxMDcgKzU1MywxMDcgQEAKIAogLlNIICJPVVRQVVQgT1BUSU9OUyIKIFRoZSBmb3JtYXQgb2YgdGhlIG91dHB1dCBmcm9tIFNOTVAgY29tbWFuZHMgY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcKLXZhcmlvdXMgcGFyYW1ldGVycyBvZiB0aGUgXGZCLU9cZlIgZmxhZy4KK3ZhcmlvdXMgcGFyYW1ldGVycyBvZiB0aGUgXGZCXC1PXGZSIGZsYWcuCiBUaGUgZWZmZWN0cyBvZiB0aGVzZSBzdWItb3B0aW9ucyBjYW4gYmUgc2VlbiBieSBjb21wYXJpc29uIHdpdGgKIHRoZSBmb2xsb3dpbmcgZGVmYXVsdCBvdXRwdXQgKHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkKToKIC5SUwogLm5mCi1cZkMkIHNubXBnZXQgLWMgcHVibGljIC12IDEgbG9jYWxob3N0IHN5c1VwVGltZS4wCi1TTk1QdjItTUlCOjpzeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKK1xmQyQgc25tcGdldCBcLWMgcHVibGljIFwtdiAxIGxvY2FsaG9zdCBzeXNVcFRpbWUuMAorU05NUHYyXC1NSUI6OnN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgogLmZpCiAuUkUKIAogLlRQCi0uQiAtT2EKKy5CIFwtT2EKIERpc3BsYXkgc3RyaW5nIHZhbHVlcyBhcyBBU0NJSSBzdHJpbmdzICh1bmxlc3MgdGhlcmUgaXMgYSAKLVxmQ0RJU1BMQVktSElOVFxmUiBkZWZpbmVkIGZvciB0aGUgY29ycmVzcG9uZGluZyBNSUIgb2JqZWN0KS4KK1xmQ0RJU1BMQVlcLUhJTlRcZlIgZGVmaW5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIG9iamVjdCkuCiBCeSBkZWZhdWx0LCB0aGUgbGlicmFyeSBhdHRlbXB0cyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgdmFsdWUgaXMKIGEgcHJpbnRhYmxlIG9yIGJpbmFyeSBzdHJpbmcsIGFuZCBkaXNwbGF5cyBpdCBhY2NvcmRpbmdseS4KIAogVGhpcyBvcHRpb24gZG9lcyBub3QgYWZmZWN0IG9iamVjdHMgdGhhdCBcZklkb1xmUiBoYXZlIGEgRGlzcGxheSBIaW50LgogLlRQCi0uQiAtT2IKKy5CIFwtT2IKIERpc3BsYXkgdGFibGUgaW5kZXhlcyBudW1lcmljYWxseSwgcmF0aGVyIHRoYW4gdHJ5aW5nIHRvIGludGVycHJldAogdGhlIGluc3RhbmNlIHN1YmlkZW50aWZpZXJzIGFzIHN0cmluZyBvciBPSUQgdmFsdWVzOgogLlJTCiAubmYKLVxmQyAgICAkIHNubXBnZXRuZXh0IC1jIHB1YmxpYyAtdiAxIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAotICAgIFNOTVAtVklFVy1CQVNFRC1BQ00tTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLiJ3ZXMiID0geHh4Ci0gICAgJCBzbm1wZ2V0bmV4dCAtYyBwdWJsaWMgLXYgMSBcZkItT2JcZlAgbG9jYWxob3N0IHZhY21TZWN1cml0eU1vZGVsCi0gICAgU05NUC1WSUVXLUJBU0VELUFDTS1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuMy4xMTkuMTAxLjExNSA9IHh4eFxmUgorXGZDICAgICQgc25tcGdldG5leHQgXC1jIHB1YmxpYyBcLXYgMSBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKKyAgICBTTk1QXC1WSUVXXC1CQVNFRFwtQUNNXC1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuIndlcyIgPSB4eHgKKyAgICAkIHNubXBnZXRuZXh0IFwtYyBwdWJsaWMgXC12IDEgXGZCXC1PYlxmUCBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKKyAgICBTTk1QXC1WSUVXXC1CQVNFRFwtQUNNXC1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuMy4xMTkuMTAxLjExNSA9IHh4eFxmUgogLmZpCiAuUkUKIC5UUAotLkIgLU9lCisuQiBcLU9lCiBSZW1vdmVzIHRoZSBzeW1ib2xpYyBsYWJlbHMgZnJvbSBlbnVtZXJhdGlvbiB2YWx1ZXM6CiAuUlMKIC5uZgotXGZDICAgICQgc25tcGdldCAtYyBwdWJsaWMgLXYgMSBsb2NhbGhvc3QgaXBGb3J3YXJkaW5nLjAKLSAgICBJUC1NSUI6OmlwRm9yd2FyZGluZy4wID0gSU5URUdFUjogZm9yd2FyZGluZygxKQotXGZDICAgICQgc25tcGdldCAtYyBwdWJsaWMgLXYgMSBcZkItT2VcZlAgbG9jYWxob3N0IGlwRm9yd2FyZGluZy4wCi0gICAgSVAtTUlCOjppcEZvcndhcmRpbmcuMCA9IElOVEVHRVI6IDFcZlIKK1xmQyAgICAkIHNubXBnZXQgXC1jIHB1YmxpYyBcLXYgMSBsb2NhbGhvc3QgaXBGb3J3YXJkaW5nLjAKKyAgICBJUFwtTUlCOjppcEZvcndhcmRpbmcuMCA9IElOVEVHRVI6IGZvcndhcmRpbmcoMSkKK1xmQyAgICAkIHNubXBnZXQgXC1jIHB1YmxpYyBcLXYgMSBcZkJcLU9lXGZQIGxvY2FsaG9zdCBpcEZvcndhcmRpbmcuMAorICAgIElQXC1NSUI6OmlwRm9yd2FyZGluZy4wID0gSU5URUdFUjogMVxmUgogLmZpCiAuUkUKIC5UUAotLkIgLU9FCisuQiBcLU9FCiBNb2RpZmllcyBpbmRleCBzdHJpbmdzIHRvIGVzY2FwZSB0aGUgcXVvdGUgY2hhcmFjdGVyczoKIC5SUwogLm5mCi1cZkMgICAgJCBzbm1wZ2V0bmV4dCAtYyBwdWJsaWMgLXYgMSBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKLSAgICBTTk1QLVZJRVctQkFTRUQtQUNNLU1JQjo6dmFjbVNlY3VyaXR5TW9kZWwuMC4id2VzIiA9IHh4eAotICAgICQgc25tcGdldG5leHQgLWMgcHVibGljIC12IDEgXGZCLU9FXGZQIGxvY2FsaG9zdCB2YWNtU2VjdXJpdHlNb2RlbAotICAgIFNOTVAtVklFVy1CQVNFRC1BQ00tTUlCOjp2YWNtU2VjdXJpdHlNb2RlbC4wLlxcIndlc1xcIiA9IHh4eFxmUgorXGZDICAgICQgc25tcGdldG5leHQgXC1jIHB1YmxpYyBcLXYgMSBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKKyAgICBTTk1QXC1WSUVXXC1CQVNFRFwtQUNNXC1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuIndlcyIgPSB4eHgKKyAgICAkIHNubXBnZXRuZXh0IFwtYyBwdWJsaWMgXC12IDEgXGZCXC1PRVxmUCBsb2NhbGhvc3QgdmFjbVNlY3VyaXR5TW9kZWwKKyAgICBTTk1QXC1WSUVXXC1CQVNFRFwtQUNNXC1NSUI6OnZhY21TZWN1cml0eU1vZGVsLjAuXFwid2VzXFwiID0geHh4XGZSCiAuZmkKIC5SRQogLklQCiBUaGlzIGFsbG93cyB0aGUgb3V0cHV0IHRvIGJlIHJldXNlZCBpbiBzaGVsbCBjb21tYW5kcy4KIC5UUAotLkIgLU9mCisuQiBcLU9mCiBJbmNsdWRlIHRoZSBmdWxsIGxpc3Qgb2YgTUlCIG9iamVjdHMgd2hlbiBkaXNwbGF5aW5nIGFuIE9JRDoKIC5SUwotXGZDICAgIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbS5zeXNVcFRpbWUuMCA9XGZSCitcZkMgICAgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yLnN5c3RlbS5zeXNVcFRpbWUuMCA9XGZSCiAuUlMKIFxmQyAgICAgICAgVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgogLlJFCiAuUkUKIC5UUAotLkIgLU9uCisuQiBcLU9uCiBEaXNwbGF5cyB0aGUgT0lEIG51bWVyaWNhbGx5OgogLmJyCiBcZkMgICAgLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgogLlRQCi0uQiAtT3EKKy5CIFwtT3EKIFJlbW92ZXMgdGhlIGVxdWFsIHNpZ24gYW5kIHR5cGUgaW5mb3JtYXRpb24gd2hlbiBkaXNwbGF5aW5nIHZhcmJpbmQgdmFsdWVzOgogLmJyCi1cZkMgICAgU05NUHYyLU1JQjo6c3lzVXBUaW1lLjAgMToxNTowOToyNy42M1xmUgorXGZDICAgIFNOTVB2MlwtTUlCOjpzeXNVcFRpbWUuMCAxOjE1OjA5OjI3LjYzXGZSCiAuVFAKLS5CIC1PUQorLkIgXC1PUQogUmVtb3ZlcyB0aGUgdHlwZSBpbmZvcm1hdGlvbiB3aGVuIGRpc3BsYXlpbmcgdmFyYmluZCB2YWx1ZXM6CiAuYnIKLVxmQyAgICBTTk1QdjItTUlCOjpzeXNVcFRpbWUuMCA9IDE6MTU6MDk6MjcuNjNcZlIKK1xmQyAgICBTTk1QdjJcLU1JQjo6c3lzVXBUaW1lLjAgPSAxOjE1OjA5OjI3LjYzXGZSCiAuVFAKLS5CIC1PcworLkIgXC1PcwogRGlzcGxheSB0aGUgTUlCIG9iamVjdCBuYW1lIChwbHVzIGFueSBpbnN0YW5jZSBvciBvdGhlciBzdWJpZGVudGlmaWVycyk6CiAuYnIKIFxmQyAgICBzeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDE0MDk2NzYzKSAxIGRheSwgMTU6MDk6MjcuNjNcZlIKIC5UUAotLkIgLU9TCisuQiBcLU9TCiBEaXNwbGF5IHRoZSBuYW1lIG9mIHRoZSBNSUIsIGFzIHdlbGwgYXMgdGhlIG9iamVjdCBuYW1lOgogLmJyCi1cZkMgICAgU05NUHYyLU1JQjo6c3lzVXBUaW1lLjAgPSBUaW1ldGlja3M6ICgxNDA5Njc2MykgMSBkYXksIDE1OjA5OjI3LjYzXGZSCitcZkMgICAgU05NUHYyXC1NSUI6OnN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgogLklQCiBUaGlzIGlzIHRoZSBkZWZhdWx0IE9JRCBvdXRwdXQgZm9ybWF0LgogLlRQCi0uQiAtT3QKKy5CIFwtT3QKIERpc3BsYXkgXGZDVGltZVRpY2tzXGZSIHZhbHVlcyBhcyByYXcgbnVtYmVyczoKIC5icgotXGZDICAgIFNOTVB2Mi1NSUI6OnN5c1VwVGltZS4wID0gMTQwOTY3NjNcZlIKK1xmQyAgICBTTk1QdjJcLU1JQjo6c3lzVXBUaW1lLjAgPSAxNDA5Njc2M1xmUgogLlRQCi0uQiAtT1QKKy5CIFwtT1QKIElmIHZhbHVlcyBhcmUgcHJpbnRlZCBhcyBIZXggc3RyaW5ncywKIGRpc3BsYXkgYSBwcmludGFibGUgdmVyc2lvbiBhcyB3ZWxsLgogLlRQCi0uQiAtT3UKKy5CIFwtT3UKIERpc3BsYXkgdGhlIE9JRCBpbiB0aGUgdHJhZGl0aW9uYWwgVUNELXN0eWxlIChpbmhlcml0ZWQgZnJvbSB0aGUgb3JpZ2luYWwKIENNVSBjb2RlKS4KIFRoYXQgbWVhbnMgcmVtb3ZpbmcgYSBzZXJpZXMgb2YgInN0YW5kYXJkIiBwcmVmaXhlcyBmcm9tIHRoZSBPSUQsCkBAIC01NTQsMzUgKzY2MiwzNSBAQAogLmJyCiBcZkMgICAgc3lzdGVtLnN5c1VwVGltZS4wID0gVGltZXRpY2tzOiAoMTQwOTY3NjMpIDEgZGF5LCAxNTowOToyNy42M1xmUgogLlRQCi0uQiAtT1UKKy5CIFwtT1UKIERvIG5vdCBwcmludCB0aGUgVU5JVFMgc3VmZml4IGF0IHRoZSBlbmQgb2YgdGhlIHZhbHVlLgogLlRQCi0uQiAtT3YKKy5CIFwtT3YKIERpc3BsYXkgdGhlIHZhcmJpbmQgdmFsdWUgb25seSwgbm90IHRoZSBPSUQ6CiAuUlMKIC5uZgotXGZDICAgICQgc25tcGdldCAtYyBwdWJsaWMgLXYgMSBcZkItT3ZcZlAgbG9jYWxob3N0IGlwRm9yd2FyZGluZy4wCitcZkMgICAgJCBzbm1wZ2V0IFwtYyBwdWJsaWMgXC12IDEgXGZCXC1PdlxmUCBsb2NhbGhvc3QgaXBGb3J3YXJkaW5nLjAKICAgICBJTlRFR0VSOiBmb3J3YXJkaW5nKDEpXGZSCiAuZmkKIC5SRQogLlRQCi0uQiAtT3gKKy5CIFwtT3gKIERpc3BsYXkgc3RyaW5nIHZhbHVlcyBhcyBIZXggc3RyaW5ncyAodW5sZXNzIHRoZXJlIGlzIGEgCi1cZkNESVNQTEFZLUhJTlRcZlIgZGVmaW5lZCBmb3IgdGhlIGNvcnJlc3BvbmRpbmcgTUlCIG9iamVjdCkuCitcZkNESVNQTEFZXC1ISU5UXGZSIGRlZmluZWQgZm9yIHRoZSBjb3JyZXNwb25kaW5nIE1JQiBvYmplY3QpLgogQnkgZGVmYXVsdCwgdGhlIGxpYnJhcnkgYXR0ZW1wdHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHZhbHVlIGlzCiBhIHByaW50YWJsZSBvciBiaW5hcnkgc3RyaW5nLCBhbmQgZGlzcGxheXMgaXQgYWNjb3JkaW5nbHkuCiAKIFRoaXMgb3B0aW9uIGRvZXMgbm90IGFmZmVjdCBvYmplY3RzIHRoYXQgXGZJZG9cZlIgaGF2ZSBhIERpc3BsYXkgSGludC4KIC5UUAotLkIgLU9YCisuQiBcLU9YCiBEaXNwbGF5IHRhYmxlIGluZGV4ZXMgaW4gYSBtb3JlICJwcm9ncmFtIGxpa2UiIG91dHB1dCwgaW1pdGF0aW5nCiBhIHRyYWRpdGlvbmFsIGFycmF5LXN0eWxlIGluZGV4IGZvcm1hdDoKIC5SUwogLm5mCi1cZkMgICAgJCBzbm1wZ2V0bmV4dCAtYyBwdWJsaWMgLXYgMSBsb2NhbGhvc3QgaXB2NlJvdXRlVGFibGUKLSAgICBJUHY2LU1JQjo6aXB2NlJvdXRlSWZJbmRleC42My4yNTQuMS4wLjI1NS4wLjAuMC4wLjAuMC4wLjAuMC4wLjAuNjQuMSA9IElOVEVHRVI6IDIKLSAgICAkIHNubXBnZXRuZXh0IC1jIHB1YmxpYyAtdiAxIFxmQi1PWFxmUCBsb2NhbGhvc3QgaXB2NlJvdXRlVGFibGUKLSAgICBJUHY2LU1JQjo6aXB2NlJvdXRlSWZJbmRleFszZmZlOjEwMDpmZjAwOjA6MDowOjA6MF1bNjRdWzFdID0gSU5URUdFUjogMgorXGZDICAgICQgc25tcGdldG5leHQgXC1jIHB1YmxpYyBcLXYgMSBsb2NhbGhvc3QgaXB2NlJvdXRlVGFibGUKKyAgICBJUHY2XC1NSUI6OmlwdjZSb3V0ZUlmSW5kZXguNjMuMjU0LjEuMC4yNTUuMC4wLjAuMC4wLjAuMC4wLjAuMC4wLjY0LjEgPSBJTlRFR0VSOiAyCisgICAgJCBzbm1wZ2V0bmV4dCBcLWMgcHVibGljIFwtdiAxIFxmQlwtT1hcZlAgbG9jYWxob3N0IGlwdjZSb3V0ZVRhYmxlCisgICAgSVB2NlwtTUlCOjppcHY2Um91dGVJZkluZGV4WzNmZmU6MTAwOmZmMDA6MDowOjA6MDowXVs2NF1bMV0gPSBJTlRFR0VSOiAyCiAuZmkKIC5SRQogLlBQCkBAIC01OTQsMTkgKzcwMiwxOSBAQAogLlNIICJMT0dHSU5HIE9QVElPTlMiCiBUaGUgbWVjaGFuaXNtIGFuZCBkZXN0aW5hdGlvbiB0byB1c2UgZm9yIGxvZ2dpbmcgb2Ygd2FybmluZyBhbmQgZXJyb3IKIG1lc3NhZ2VzIGNhbiBiZSBjb250cm9sbGVkIGJ5IHBhc3NpbmcgdmFyaW91cyBwYXJhbWV0ZXJzIHRvIHRoZQotLkIgLUwKKy5CIFwtTAogZmxhZy4KIC5UUAotLkIgLUxlCisuQiBcLUxlCiBMb2cgbWVzc2FnZXMgdG8gdGhlIHN0YW5kYXJkIGVycm9yIHN0cmVhbS4KIC5UUAotLkIgLUxmIEZJTEUKKy5CIFwtTGYgRklMRQogTG9nIG1lc3NhZ2VzIHRvIHRoZSBzcGVjaWZpZWQgZmlsZS4KIC5UUAotLkIgLUxvCisuQiBcLUxvCiBMb2cgbWVzc2FnZXMgdG8gdGhlIHN0YW5kYXJkIG91dHB1dCBzdHJlYW0uCiAuVFAKLS5CIC1McyBGQUNJTElUWQorLkIgXC1McyBGQUNJTElUWQogTG9nIG1lc3NhZ2VzIHZpYSBzeXNsb2csIHVzaW5nIHRoZSBzcGVjaWZpZWQgZmFjaWxpdHkKICgnZCcgZm9yIExPR19EQUVNT04sICd1JyBmb3IgTE9HX1VTRVIsCiBvciAnMCctJzcnIGZvciBMT0dfTE9DQUwwIHRocm91Z2ggTE9HX0xPQ0FMNykuCkBAIC02MTYsMTcgKzcyNCwxNyBAQAogYWxsb3cgdGhlIGNvcnJlc3BvbmRpbmcgbG9nZ2luZyBtZWNoYW5pc20gdG8gYmUgcmVzdHJpY3RlZCB0byBjZXJ0YWluCiBwcmlvcml0aWVzIG9mIG1lc3NhZ2UuICBVc2luZyBzdGFuZGFyZCBlcnJvciBsb2dnaW5nIGFzIGFuIGV4YW1wbGU6CiAuVFAKLS5CIC1MRSBwcmkKKy5CIFwtTEUgcHJpCiB3aWxsIGxvZyBtZXNzYWdlcyBvZiBwcmlvcml0eSAncHJpJyBhbmQgYWJvdmUgdG8gc3RhbmRhcmQgZXJyb3IuCiAuVFAKLS5CIC1MRSBwMS1wMgorLkIgXC1MRSBwMVwtcDIKIHdpbGwgbG9nIG1lc3NhZ2VzIHdpdGggcHJpb3JpdHkgYmV0d2VlbiAncDEnIGFuZCAncDInIChpbmNsdXNpdmUpIHRvCiBzdGFuZGFyZCBlcnJvci4KIC5QUAogRm9yCi0uQiAtTEYKKy5CIFwtTEYKIGFuZAotLkIgLUxTCisuQiBcLUxTCiB0aGUgcHJpb3JpdHkgc3BlY2lmaWNhdGlvbiBjb21lcyBiZWZvcmUgdGhlIGZpbGUgb3IgZmFjaWxpdHkgdG9rZW4uCiBUaGUgcHJpb3JpdGllcyByZWNvZ25pc2VkIGFyZToKIC5JUApAQCAtNjc1LDEwICs3ODMsMTAgQEAKIAogLlNIICJJTlBVVCBPUFRJT05TIgogVGhlIGludGVycHJldGF0aW9uIG9mIGlucHV0IG9iamVjdCBuYW1lcyBhbmQgdGhlIHZhbHVlcyB0byBiZSBhc3NpZ25lZAotY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgdmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRoZSBcZkItSVxmUiBmbGFnLgorY2FuIGJlIGNvbnRyb2xsZWQgdXNpbmcgdmFyaW91cyBwYXJhbWV0ZXJzIG9mIHRoZSBcZkJcLUlcZlIgZmxhZy4KIFRoZSBkZWZhdWx0IGJlaGF2aW91ciB3aWxsIGJlIGRlc2NyaWJlZCBhdCB0aGUgZW5kIG9mIHRoaXMgc2VjdGlvbi4KIC5UUAotLkIgLUliCisuQiBcLUliCiBzcGVjaWZpZXMgdGhhdCB0aGUgZ2l2ZW4gbmFtZSBzaG91bGQgYmUgcmVnYXJkZWQgYXMgYSByZWd1bGFyIGV4cHJlc3Npb24sCiB0byBtYXRjaCAoY2FzZS1pbnNlbnNpdGl2ZWx5KSBhZ2FpbnN0IG9iamVjdCBuYW1lcyBpbiB0aGUgTUlCIHRyZWUuCiBUaGUgImJlc3QiIG1hdGNoIHdpbGwgYmUgdXNlZCAtIGNhbGN1bGF0ZWQgYXMgdGhlIG9uZSB0aGF0IG1hdGNoZXMgdGhlCkBAIC02OTksMjMgKzgwNywyMyBAQAogaW5zdGFuY2UgXGZDc3lzQ29udGFjdC4wXGZSIChhbHRob3VnaCBcZklzeXMqb250YWN0XGZSIHdvdWxkIG1hdGNoCiBcZkNzeXNDb250YWN0XGZSKS4KIFNpbWlsYXJseSwgc3BlY2lmeWluZyBhIE1JQiBtb2R1bGUgbmFtZSB3aWxsIG5vdCBzdWNjZWVkCi0oc28gXGZJU05NUHYyLU1JQjo6c3lzLipvbnRhY3RcZlIgd291bGQgbm90IG1hdGNoIGVpdGhlcikuCisoc28gXGZJU05NUHYyXC1NSUI6OnN5cy4qb250YWN0XGZSIHdvdWxkIG5vdCBtYXRjaCBlaXRoZXIpLgogLlRQCi0uQiAtSWgKLWRpc2FibGVzIHRoZSB1c2Ugb2YgRElTUExBWS1ISU5UIGluZm9ybWF0aW9uIHdoZW4gYXNzaWduaW5nIHZhbHVlcy4KKy5CIFwtSWgKK2Rpc2FibGVzIHRoZSB1c2Ugb2YgRElTUExBWVwtSElOVCBpbmZvcm1hdGlvbiB3aGVuIGFzc2lnbmluZyB2YWx1ZXMuCiBUaGlzIHdvdWxkIHRoZW4gcmVxdWlyZSBwcm92aWRpbmcgdGhlIHJhdyB2YWx1ZToKIC5icgotXGZDICAgIHNubXBzZXQgLi4uIEhPU1QtUkVTT1VSQ0VTLU1JQjo6aHJTeXN0ZW1EYXRlLjAKK1xmQyAgICBzbm1wc2V0IC4uLiBIT1NUXC1SRVNPVVJDRVNcLU1JQjo6aHJTeXN0ZW1EYXRlLjAKIC5icgogICAgICAgICAgICAgICAgICAgICB4ICIwNyBEMiAwQyAwQSAwMiAwNCAwNiAwOCJcZlIKIC5icgogaW5zdGVhZCBvZiBhIGZvcm1hdHRlZCB2ZXJzaW9uOgogLmJyCi1cZkMgICAgc25tcHNldCAuLi4gSE9TVC1SRVNPVVJDRVMtTUlCOjpoclN5c3RlbURhdGUuMAorXGZDICAgIHNubXBzZXQgLi4uIEhPU1RcLVJFU09VUkNFU1wtTUlCOjpoclN5c3RlbURhdGUuMAogLmJyCi0gICAgICAgICAgICAgICAgICAgID0gMjAwMi0xMi0xMCwyOjQ6Ni44XGZSCisgICAgICAgICAgICAgICAgICAgID0gMjAwMlwtMTJcLTEwLDI6NDo2LjhcZlIKIC5UUAotLkIgLUlyCisuQiBcLUlyCiBkaXNhYmxlcyBjaGVja2luZyB0YWJsZSBpbmRleGVzIGFuZCB0aGUgdmFsdWUgdG8gYmUgYXNzaWduZWQgYWdhaW5zdCB0aGUKIHJlbGV2YW50IE1JQiBkZWZpbml0aW9ucy4gIFRoaXMgd2lsbCAoaG9wZWZ1bGx5KSByZXN1bHQgaW4gdGhlIHJlbW90ZQogYWdlbnQgcmVwb3J0aW5nIGFuIGludmFsaWQgcmVxdWVzdCwgcmF0aGVyIHRoYW4gY2hlY2tpbmcgKGFuZCByZWplY3RpbmcpCkBAIC03MjUsMTMgKzgzMywxMyBAQAogdGVuZCB0byBiZSBtb3JlIHByZWNpc2UpLCBidXQgZGlzYWJsaW5nIHRoaXMgYmVoYXZpb3VyIGlzIHBhcnRpY3VsYXJseQogdXNlZnVsIHdoZW4gdGVzdGluZyB0aGUgcmVtb3RlIGFnZW50LgogLlRQCi0uQiAtSVIKKy5CIFwtSVIKIGVuYWJsZXMgInJhbmRvbSBhY2Nlc3MiIGxvb2t1cCBvZiBNSUIgbmFtZXMuCiBSYXRoZXIgdGhhbiBwcm92aWRpbmcgYSBmdWxsIE9JRCBwYXRoIHRvIHRoZSBkZXNpcmVkIE1JQiBvYmplY3QKIChvciBxdWFsaWZ5aW5nIHRoaXMgb2JqZWN0IHdpdGggYW4gZXhwbGljaXQgTUlCIG1vZHVsZSBuYW1lKSwKIHRoZSBNSUIgdHJlZSB3aWxsIGJlIHNlYXJjaGVkIGZvciB0aGUgbWF0Y2hpbmcgb2JqZWN0IG5hbWUuCi1UaHVzIFxmQy5pc28ub3JnLmRvZC5pbnRlcm5ldC5taWItMi5zeXN0ZW0uc3lzRGVzY3IuMFxmUgotKG9yIFxmQ1NOTVB2Mi1NSUI6OnN5c0Rlc2NyLjBcZlIpIGNhbiBiZSBzcGVjaWZpZWQgc2ltcGx5CitUaHVzIFxmQy5pc28ub3JnLmRvZC5pbnRlcm5ldC5taWJcLTIuc3lzdGVtLnN5c0Rlc2NyLjBcZlIKKyhvciBcZkNTTk1QdjJcLU1JQjo6c3lzRGVzY3IuMFxmUikgY2FuIGJlIHNwZWNpZmllZCBzaW1wbHkKIGFzIFxmQ3N5c0Rlc2NyLjBcZlIuCiAuUlMKIC5JUCAiV2FybmluZzoiCkBAIC03NDAsMjQgKzg0OCwyNCBAQAogaGF2ZSBiZWVuIGxvYWRlZC4KIC5SRQogLklQCi1UaGUgXGZJTUlCLU1PRFVMRTo6b2JqZWN0TmFtZVxmUiBzeW50YXggaGFzCitUaGUgXGZJTUlCXC1NT0RVTEU6Om9iamVjdE5hbWVcZlIgc3ludGF4IGhhcwogdGhlIGFkdmFudGFnZSBvZiB1bmlxdWVseSBpZGVudGlmeWluZyBhIHBhcnRpY3VsYXIgTUlCIG9iamVjdCwKIGFzIHdlbGwgYXMgYmVpbmcgc2xpZ2h0bHkgbW9yZSBlZmZpY2llbnQgKGFuZCBhdXRvbWF0aWNhbGx5CiBsb2FkaW5nIHRoZSBuZWNlc3NhcnkgTUlCIGZpbGUgaWYgbmVjZXNzYXJ5KS4KIC5UUAotLkIgLUlzIFNVRkZJWAorLkIgXC1JcyBTVUZGSVgKIGFkZHMgdGhlIHNwZWNpZmllZCBzdWZmaXggdG8gZWFjaCB0ZXh0dWFsIE9JRCBnaXZlbiBvbiB0aGUgY29tbWFuZCBsaW5lLgogVGhpcyBjYW4gYmUgdXNlZCB0byByZXRyaWV2ZSBtdWx0aXBsZSBvYmplY3RzIGZyb20gdGhlIHNhbWUgcm93IG9mCiBhIHRhYmxlLCBieSBzcGVjaWZ5aW5nIGEgY29tbW9uIGluZGV4IHZhbHVlLgogLlRQCi0uQiAtSVMgUFJFRklYCisuQiBcLUlTIFBSRUZJWAogYWRkcyB0aGUgc3BlY2lmaWVkIHByZWZpeCB0byBlYWNoIHRleHR1YWwgT0lEIGdpdmVuIG9uIHRoZSBjb21tYW5kIGxpbmUuCiBUaGlzIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgYW4gZXhwbGljaXQgTUlCIG1vZHVsZSBuYW1lIGZvciBhbGwgb2JqZWN0cwogYmVpbmcgcmV0cmlldmVkIChvciBmb3IgaW5jdXJhYmx5IGxhenkgdHlwaXN0cykuCiAuVFAKLS5CIC1JdQorLkIgXC1JdQogZW5hYmxlcyB0aGUgdHJhZGl0aW9uYWwgVUNELXN0eWxlIGFwcHJvYWNoIHRvIGludGVycHJldGluZyBpbnB1dCBPSURzLgotVGhpcyBhc3N1bWVzIHRoYXQgT0lEcyBhcmUgcm9vdGVkIGF0IHRoZSAnbWliLTInIHBvaW50IGluIHRoZSB0cmVlCitUaGlzIGFzc3VtZXMgdGhhdCBPSURzIGFyZSByb290ZWQgYXQgdGhlICdtaWJcLTInIHBvaW50IGluIHRoZSB0cmVlCiAodW5sZXNzIHRoZXkgc3RhcnQgd2l0aCBhbiBleHBsaWNpdCAnLicgb3IgaW5jbHVkZSBhIE1JQiBtb2R1bGUgbmFtZSkuCiBTbyB0aGUgXGZDc3lzRGVzY3JcZlIgaW5zdGFuY2UgYWJvdmUgd291bGQgYmUgcmVmZXJlbmNlZCBhcwogXGZDc3lzdGVtLnN5c0Rlc2NyLjBcZlIuIApAQCAtNzY2LDI4ICs4NzQsMjggQEAKIE9iamVjdCBuYW1lcyBzcGVjaWZpZWQgd2l0aCBhIGxlYWRpbmcgJy4nIGFyZSBhbHdheXMgaW50ZXJwcmV0ZWQgYXMKICJmdWxseSBxdWFsaWZpZWQiIE9JRHMsIGxpc3RpbmcgdGhlIHNlcXVlbmNlIG9mIE1JQiBvYmplY3RzIGZyb20gdGhlCiByb290IG9mIHRoZSBNSUIgdHJlZS4gIFN1Y2ggb2JqZWN0cyBhbmQgdGhvc2UgcXVhbGlmaWVkIGJ5IGFuIGV4cGxpY2l0Ci1NSUIgbW9kdWxlIG5hbWUgYXJlIHVuYWZmZWN0ZWQgYnkgdGhlIFxmQi1JYlxmUiwgXGZCLUlSXGZSIGFuZCBcZkItSXVcZlIgZmxhZ3MuCitNSUIgbW9kdWxlIG5hbWUgYXJlIHVuYWZmZWN0ZWQgYnkgdGhlIFxmQlwtSWJcZlIsIFxmQlwtSVJcZlIgYW5kIFxmQlwtSXVcZlIgZmxhZ3MuCiAKIE90aGVyd2lzZSwgaWYgbm9uZSBvZiB0aGUgYWJvdmUgaW5wdXQgb3B0aW9ucyBhcmUgc3BlY2lmaWVkLCB0aGUKIGRlZmF1bHQgYmVoYXZpb3VyIGZvciBhICJyZWxhdGl2ZSIgT0lEIGlzIHRvIHRyeSBhbmQgaW50ZXJwcmV0IGl0CiBhcyBhbiAoaW1wbGljaXRseSkgZnVsbHkgcXVhbGlmaWVkIE9JRCwKLXRoZW4gYXBwbHkgInJhbmRvbSBhY2Nlc3MiIGxvb2t1cCAoXGZCLUlSXGZSKSwKLWZvbGxvd2VkIGJ5ICJiZXN0IG1hdGNoIiBwYXR0ZXJuIG1hdGNoaW5nIChcZkItSWJcZlIpLgordGhlbiBhcHBseSAicmFuZG9tIGFjY2VzcyIgbG9va3VwIChcZkJcLUlSXGZSKSwKK2ZvbGxvd2VkIGJ5ICJiZXN0IG1hdGNoIiBwYXR0ZXJuIG1hdGNoaW5nIChcZkJcLUliXGZSKS4KIAogLlNIICJFTlZJUk9OTUVOVCBWQVJJQUJMRVMiCiAuSVAgUFJFRklYCiBUaGUgc3RhbmRhcmQgcHJlZml4IGZvciBvYmplY3QgaWRlbnRpZmllcnMgKHdoZW4gdXNpbmcgVUNELXN0eWxlIG91dHB1dCkuCi1EZWZhdWx0cyB0byAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMgorRGVmYXVsdHMgdG8gLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yCiAuSVAgTUlCUwogVGhlIGxpc3Qgb2YgTUlCcyB0byBsb2FkLiBEZWZhdWx0cyB0bwotU05NUHYyLVRDOlNOTVB2Mi1NSUI6SUYtTUlCOklQLU1JQjpUQ1AtTUlCOlVEUC1NSUI6U05NUC1WQUNNLU1JQi4KK1NOTVB2MlwtVEM6U05NUHYyXC1NSUI6SUZcLU1JQjpJUFwtTUlCOlRDUFwtTUlCOlVEUFwtTUlCOlNOTVBcLVZBQ01cLU1JQi4KIE92ZXJyaWRkZW4gYnkgdGhlCi0uQiAtbQorLkIgXC1tCiBvcHRpb24uCiAuSVAgTUlCRElSUwogVGhlIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUJzLiBEZWZhdWx0cyB0byBEQVRBRElSL3NubXAvbWlicy4KIE92ZXJyaWRkZW4gYnkgdGhlCi0uQiAtTQorLkIgXC1NCiBvcHRpb24uCiAKIC5TSCBGSUxFUwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBjb25mLjEuZGVmIGIvbWFuL3NubXBjb25mLjEuZGVmCmluZGV4IDg0ODhhYTUuLmNkMGMxMDQgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wY29uZi4xLmRlZgorKysgYi9tYW4vc25tcGNvbmYuMS5kZWYKQEAgLTYsNyArNiw3IEBACiBbT1BUSU9OU10gW2ZpbGVUb0NyZWF0ZV0KIC5JUCAiU3RhcnQgd2l0aDoiCiAuQiBzbm1wY29uZgotLWcgYmFzaWNfc2V0dXAKK1wtZyBiYXNpY19zZXR1cAogLklQICJPciBldmVuIGp1c3Q6IgogLkIgc25tcGNvbmYKIC5TSCBERVNDUklQVElPTgpAQCAtMjcsMzUgKzI3LDM1IEBACiBjb21tZW50ZWQuCiAuUFAKIEEgcGFydGljdWxhcmx5IHVzZWZ1bCBvcHRpb24gaXMgdGhlCi0uQiAtZworLkIgXC1nCiBzd2l0Y2gsIHdoaWNoIHdhbGtzIGEgdXNlciB0aHJvdWdoIGEgc3BlY2lmaWMgc2V0IG9mIGNvbmZpZ3VyYXRpb24KIHF1ZXN0aW9ucy4gIFJ1bjoKIC5SUwogLlBQCi1zbm1wY29uZiAtZyBiYXNpY19zZXR1cAorc25tcGNvbmYgXC1nIGJhc2ljX3NldHVwCiAuUkUKIC5QUAogZm9yIGFuIGV4YW1wbGUuCiAuU0ggIk9QVElPTlMiCiAuVFAgOAotLkIgLWYKKy5CIFwtZgogRm9yY2Ugb3ZlcndyaXRpbmcgZXhpc3RpbmcgZmlsZXMgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IHdpdGhvdXQKIHByb21wdGluZyB0aGUgdXNlciBpZiB0aGlzIGlzIGEgZGVzaXJlZCB0aGluZyB0byBkby4KIC5UUCAKLS5CIC1pCisuQiBcLWkKIFdoZW4gZmluaXNoZWQsIGluc3RhbGwgdGhlIGZpbGVzIGludG8gdGhlIGxvY2F0aW9uIHdoZXJlIHRoZSBnbG9iYWwKIHN5c3RlbSBjb21tYW5kcyBleHBlY3QgdG8gZmluZCB0aGVtLgogLlRQCi0uQiAtcAorLkIgXC1wCiBXaGVuIGZpbmlzaGVkLCBpbnN0YWxsIHRoZSBmaWxlcyBpbnRvIHRoZSB1c2VycyBob21lIGRpcmVjdG9yeSdzIC5zbm1wCiBzdWJkaXJlY3RvcnkgKHdoZXJlIHRoZSBhcHBsaWNhdGlvbnMgd2lsbCBhbHNvIHNlYXJjaCBmb3IKIGNvbmZpZ3VyYXRpb24gZmlsZXMpLgogLlRQCi0uQkkgLUkgIiBESVJFQ1RPUlkiCisuQkkgXC1JICIgRElSRUNUT1JZIgogV2hlbiBmaW5pc2hlZCwgaW5zdGFsbCB0aGUgZmlsZXMgaW50byB0aGUgZGlyZWN0b3J5IAogLklSIERJUkVDVE9SWSAuCiAuVFAKLS5CIC1hCisuQiBcLWEKIERvbid0IGFzayBhbnkgcXVlc3Rpb25zLiAgU2ltcGx5IHJlYWQgaW4gdGhlIHZhcmlvdXMga25vd24KIGNvbmZpZ3VyYXRpb24gZmlsZXMgYW5kIHdyaXRlIHRoZW0gYmFjayBvdXQgYWdhaW4uICBUaGlzIGhhcyB0aGUKIGVmZmVjdCBvZiAiYXV0by1jb21tZW50aW5nIiB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBmb3IgeW91LiAgU2VlCkBAIC02MywxNyArNjMsMTcgQEAKIC5CIE5FQVQgVFJJQ0tTCiBzZWN0aW9uIGJlbG93LgogLlRQCi0uQkkgLXIgYWxsfG5vbmUKKy5CSSBcLXIgYWxsfG5vbmUKIFJlYWQgaW4gZWl0aGVyIGFsbCBvciBub25lIG9mIHRoZSBmb3VuZCBjb25maWd1cmF0aW9uIGZpbGVzLiAgTm9ybWFsbHkKIC5CIHNubXBjb25mCiBwcm9tcHRzIHlvdSBmb3Igd2hpY2ggZmlsZXMgeW91IHdpc2ggdG8gcmVhZCBpbi4gIFJlYWRpbmcgaW4KIHRoZXNlIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2lsbCBtZXJnZSB0aGVzZSBmaWxlcyB3aXRoIHRoZSByZXN1bHRzIG9mCiB0aGUgcXVlc3Rpb25zIHRoYXQgaXQgYXNrcyBvZiB5b3UuCiAuVFAKLS5CSSAtUiAiIEZJTEUsLi4uIgorLkJJIFwtUiAiIEZJTEUsLi4uIgogUmVhZCBpbiBhIHNwZWNpZmljIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlcy4KIC5UUAotLkJJIC1nICIgR1JPVVBOQU1FIgorLkJJIFwtZyAiIEdST1VQTkFNRSIKIEdyb3VwcyBvZiBjb25maWd1cmF0aW9uIGVudHJpZXMgY2FuIGJlIGNyZWF0ZWQgdGhhdCBjYW4gYmUgdXNlZCB0bwogd2FsayBhIHVzZXIgdGhyb3VnaCBhIHNlcmllcyBvZiBxdWVzdGlvbnMgdG8gY3JlYXRlIGFuIGluaXRpYWwKIGNvbmZpZ3VyYXRpb24gZmlsZS4gIFRoZXJlIGFyZSBubyBtZW51cyB0byBuYXZpZ2F0ZSwganVzdCBhIGxpc3Qgb2YKQEAgLTgxLDQ0ICs4MSw0NCBAQAogLlJTCiAuUlMKIC5QUAotc25tcGNvbmYgLWcgYmFzaWNfc2V0dXAKK3NubXBjb25mIFwtZyBiYXNpY19zZXR1cAogLlJFCiAuUFAKIGZvciBhIGdvb2QgZXhhbXBsZS4KIC5SRQogLlRQCi0uQiAtRworLkIgXC1HCiBMaXN0IGFsbCB0aGUga25vd24gZ3JvdXBzLgogLlRQCi0uQkkgLWMgIiBDT05GSUdESVIiCisuQkkgXC1jICIgQ09ORklHRElSIgogLkIgc25tcGNvbmYKIHVzZXMgYSBkaXJlY3Rvcnkgb2YgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiB0byBsZWFybiBhYm91dAogdGhlIGZpbGVzIGFuZCBxdWVzdGlvbnMgdGhhdCBpdCBzaG91bGQgYmUgYXNraW5nLiAgVGhpcyBvcHRpb24gdGVsbHMKIC5CIHNubXBjb25mCiB0byB1c2UgYSBkaWZmZXJlbnQgbG9jYXRpb24gZm9yIGNvbmZpZ3VyaW5nIGl0c2VsZi4KIC5UUAotLkIgLXEKKy5CIFwtcQogUnVuIHNsaWdodGx5IG1vcmUgcXVpZXRseS4gIFNpbmNlIHRoaXMgaXMgYW4gaW50ZXJhY3RpdmUgcHJvZ3JhbSwgSQogZG9uJ3QgcmVjb21tZW5kIHRoaXMgb3B0aW9uIHNpbmNlIGl0IG9ubHkgcmVtb3ZlcyBpbmZvcm1hdGlvbiBmcm9tIHRoZQogb3V0cHV0IHRoYXQgaXMgZGVzaWduZWQgdG8gaGVscCB5b3UuCiAuVFAKLS5CIC1kCisuQiBcLWQKIFR1cm4gb24gCiAuQiBsb3RzCiBvZiBkZWJ1Z2dpbmcgb3V0cHV0LgogLlRQCi0uQiAtRAorLkIgXC1ECiBBZGQgCiAuQiBldmVuIG1vcmUKIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGZvcm0gb2YgUGVybCB2YXJpYWJsZSBkdW1wcy4KIC5JUAogLlNIICJORUFUIFRSSUNLUyIKLS5JUCAic25tcGNvbmYgLWcgYmFzaWNfc2V0dXAiCisuSVAgInNubXBjb25mIFwtZyBiYXNpY19zZXR1cCIKIEhhdmUgSSBtZW50aW9uZWQgdGhpcyBjb21tYW5kIGVub3VnaCB5ZXQ/ICBJdCdzIGRlc2lnbmVkIHRvIHdhbGsKIHNvbWVvbmUgdGhyb3VnaCBhbiBpbml0aWFsIHNldHVwIGZvciB0aGUKIC5JIHNubXBkKDgpCiBkYWVtb24uICBSZWFsbHksIHlvdSBzaG91bGQgdHJ5IGl0LgotLklQICJzbm1wY29uZiAtUiAvdXNyL2xvY2FsL3NubXAvc25tcGQuY29uZiAtYSAtZiBzbm1wZC5jb25mIgorLklQICJzbm1wY29uZiBcLVIgL3Vzci9sb2NhbC9zbm1wL3NubXBkLmNvbmYgXC1hIFwtZiBzbm1wZC5jb25mIgogQXV0b21hdGljYWxseSByZWFkcyBpbiBhbiBzbm1wZC5jb25mIGZpbGUgKGZvciBleGFtcGxlKSBhbmQgYWRkcwogY29tbWVudHMgdG8gdGhlbSBkZXNjcmliaW5nIHdoYXQgZWFjaCB0b2tlbiBkb2VzLiAgVHJ5IGl0LiAgSXQncyBjb29sLgogLlNIICJOT1RFUyIKZGlmZiAtLWdpdCBhL21hbi9zbm1wZC44LmRlZiBiL21hbi9zbm1wZC44LmRlZgppbmRleCAyYTIwODZmLi5mMTczMzk2IDEwMDY0NAotLS0gYS9tYW4vc25tcGQuOC5kZWYKKysrIGIvbWFuL3NubXBkLjguZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIFNOTVBEIDggIjEwIEphbiAyMDA3IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBEIDggIjMwIEp1biAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBkIC0gZGFlbW9uIHRvIHJlc3BvbmQgdG8gU05NUCByZXF1ZXN0IHBhY2tldHMuCiAuU0ggU1lOT1BTSVMKQEAgLTEyLDEzICsxMiwxMyBAQAogcmVxdWVzdGVkIG9wZXJhdGlvbihzKSBhbmQgcmV0dXJucyB0aGUgaW5mb3JtYXRpb24gdG8gdGhlIHNlbmRlci4KIC5TSCBPUFRJT05TCiAuVFAgOAotLkIgLWEKKy5CIFwtYQogTG9nIHRoZSBzb3VyY2UgYWRkcmVzc2VzIG9mIGluY29taW5nIHJlcXVlc3RzLgogLlRQCi0uQiAtQQorLkIgXC1BCiBBcHBlbmQgdG8gdGhlIGxvZyBmaWxlIHJhdGhlciB0aGFuIHRydW5jYXRpbmcgaXQuCiAuVFAKLS5CICItYyIgXGZJRklMRQorLkIgIlwtYyIgXGZJRklMRQogUmVhZCAKIC5JIEZJTEUKIGFzIGEgY29uZmlndXJhdGlvbiBmaWxlCkBAIC0yNywyMSArMjcsMjEgQEAKIGlzIHNwZWNpZmllZCBpbiB0aGUgZmlsZSBhcyBkZXNjcmliZWQgaW4gdGhlIHNubXBfY29uZmlnIG1hbiBwYWdlIHVuZGVyCiBTV0lUQ0hJTkcgQ09ORklHVVJBVElPTiBUWVBFUyBJTiBNSUQtRklMRS4KIC5UUAotLkIgLUMKKy5CIFwtQwogRG8gbm90IHJlYWQgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgZXhjZXB0IHRoZSBvbmVzIG9wdGlvbmFsbHkgc3BlY2lmaWVkIGJ5IHRoZSAKLS5CIC1jIAorLkIgXC1jIAogb3B0aW9uLgogTm90ZSB0aGF0IHRoaXMgYmVoYXZpb3VyIGFsc28gY292ZXJzIHRoZSBwZXJzaXN0ZW50IGNvbmZpZ3VyYXRpb24gZmlsZXMuCiBUaGlzIG1heSByZXN1bHQgaW4gZHluYW1pY2FsbHktYXNzaWduZWQgdmFsdWVzIGJlaW5nIHJlc2V0IGZvbGxvd2luZyBhbgogYWdlbnQgcmVzdGFydCwgdW5sZXNzIHRoZSByZWxldmFudCBwZXJzaXN0ZW50IGNvbmZpZyBmaWxlcyBhcmUKIGV4cGxpY2l0bHkgbG9hZGVkIHVzaW5nIHRoZQotLkIgLWMgCisuQiBcLWMgCiBvcHRpb24uCiAuVFAKLS5CIC1kCisuQiBcLWQKIER1bXAgKGluIGhleGFkZWNpbWFsKSB0aGUgc2VudCBhbmQgcmVjZWl2ZWQgU05NUCBwYWNrZXRzLgogLlRQCi0uQiAtRFxmSVtUT0tFTlssLi4uXV0KKy5CIFwtRFxmSVtUT0tFTlssLi4uXV0KIFR1cm4gb24gZGVidWdnaW5nIG91dHB1dCBmb3IgdGhlIGdpdmVuCiAuSVIgIlRPS0VOIiAiKHMpLiIKIFdpdGhvdXQgYW55IHRva2VucyBzcGVjaWZpZWQsIGl0IGRlZmF1bHRzIHRvIHByaW50aW5nIGFsbCB0aGUgdG9rZW5zCkBAIC00OSw5OSArNDksOTkgQEAKIFlvdSBtaWdodCB3YW50IHRvIHRyeQogLklSIEFMTAogZm9yIGV4dHJlbWVseSB2ZXJib3NlIG91dHB1dC4gIE5vdGU6IFlvdSBjYW4gbm90IHB1dCBhIHNwYWNlIGJldHdlZW4KLXRoZSAtRCBmbGFnIGFuZCB0aGUgbGlzdGVkIFRPS0VOcy4KK3RoZSBcLUQgZmxhZyBhbmQgdGhlIGxpc3RlZCBUT0tFTnMuCiAuVFAKLS5CIC1mCisuQiBcLWYKIERvIG5vdCBmb3JrKCkgZnJvbSB0aGUgY2FsbGluZyBzaGVsbC4KIC5UUAotLkIgLWcgXGZJR0lECisuQiBcLWcgXGZJR0lECiBDaGFuZ2UgdG8gdGhlIG51bWVyaWNhbCBncm91cCBJRAogLkkgR0lECiBhZnRlciBvcGVuaW5nIGxpc3RlbmluZyBzb2NrZXRzLgogLlRQCi0uQiAtaCwgLS1oZWxwCisuQiBcLWgsIFwtXC1oZWxwCiBEaXNwbGF5IGEgYnJpZWYgdXNhZ2UgbWVzc2FnZSBhbmQgdGhlbiBleGl0LgogLlRQCi0uQiAtSAorLkIgXC1ICiBEaXNwbGF5IGEgbGlzdCBvZiBjb25maWd1cmF0aW9uIGZpbGUgZGlyZWN0aXZlcyB1bmRlcnN0b29kIGJ5IHRoZQogYWdlbnQgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLUkgXGZJWy1dSU5JVExJU1QKKy5CIFwtSSBcZklbXC1dSU5JVExJU1QKIFNwZWNpZmllcyB3aGljaCBtb2R1bGVzIHNob3VsZCAob3Igc2hvdWxkIG5vdCkgYmUgaW5pdGlhbGl6ZWQKIHdoZW4gdGhlIGFnZW50IHN0YXJ0cyB1cC4gIElmIHRoZSBjb21tYS1zZXBhcmF0ZWQKIC5JIElOSVRMSVNUCiBpcyBwcmVjZWRlZAotd2l0aCBhICctJywgaXQgaXMgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IHNob3VsZCBcZklub3RcZlIgYmUgc3RhcnRlZC4KK3dpdGggYSAnXC0nLCBpdCBpcyB0aGUgbGlzdCBvZiBtb2R1bGVzIHRoYXQgc2hvdWxkIFxmSW5vdFxmUiBiZSBzdGFydGVkLgogT3RoZXJ3aXNlIHRoaXMgaXMgdGhlIGxpc3Qgb2YgdGhlIFxmSW9ubHlcZlIgbW9kdWxlcyB0aGF0IHNob3VsZCBiZSBzdGFydGVkLgogCiBUbyBnZXQgYSBsaXN0IG9mIGNvbXBpbGVkIG1vZHVsZXMsIHJ1biB0aGUgYWdlbnQgd2l0aCB0aGUgYXJndW1lbnRzCi0uSSAiLURtaWJfaW5pdCAtSCIKKy5JICJcLURtaWJfaW5pdCBcLUgiCiAoYXNzdW1pbmcgZGVidWdnaW5nIHN1cHBvcnQgaGFzIGJlZW4gY29tcGlsZWQgaW4pLgogLlRQCi0uQiAtTFtlZm9zXQorLkIgXC1MW2Vmb3NdCiBTcGVjaWZ5IHdoZXJlIGxvZ2dpbmcgb3V0cHV0IHNob3VsZCBiZSBkaXJlY3RlZCAoc3RhbmRhcmQgZXJyb3Igb3Igb3V0cHV0LAogdG8gYSBmaWxlIG9yIHZpYSBzeXNsb2cpLiAgU2VlIExPR0dJTkcgT1BUSU9OUyBpbiBzbm1wY21kKDUpIGZvciBkZXRhaWxzLgogLlRQCi0uQlIgLW0gIiBcZklNSUJMSVNUIgorLkJSIFwtbSAiIFxmSU1JQkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBNSUIgbW9kdWxlcyB0byBsb2FkIGZvciB0aGlzCiBhcHBsaWNhdGlvbi4gIFRoaXMgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJTLgogU2VlIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiAuVFAKLS5CUiAtTSAiIFxmSURJUkxJU1QiCisuQlIgXC1NICIgXGZJRElSTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIGRpcmVjdG9yaWVzIHRvIHNlYXJjaCBmb3IgTUlCcy4KIFRoaXMgb3ZlcnJpZGVzIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSBNSUJESVJTLgogU2VlIFxmSXNubXBjbWQoMSlcZlIgZm9yIGRldGFpbHMuCiAuVFAKLS5CIC1uIFxmSU5BTUUKKy5CIFwtbiBcZklOQU1FCiBTZXQgYW4gYWx0ZXJuYXRpdmUgYXBwbGljYXRpb24gbmFtZSAod2hpY2ggd2lsbCBhZmZlY3QgdGhlCiBjb25maWd1cmF0aW9uIGZpbGVzIGxvYWRlZCkuCiBCeSBkZWZhdWx0IHRoaXMgd2lsbCBiZSBcZklzbm1wZFxmUiwgcmVnYXJkbGVzcyBvZiB0aGUgbmFtZQogb2YgdGhlIGFjdHVhbCBiaW5hcnkuCiAuVFAKLS5CIC1wIFxmSUZJTEUKKy5CIFwtcCBcZklGSUxFCiBTYXZlIHRoZSBwcm9jZXNzIElEIG9mIHRoZSBkYWVtb24gaW4KIC5JUiBGSUxFICIuIgogLlRQIAotLkIgLXEKKy5CIFwtcQogUHJpbnQgc2ltcGxlciBvdXRwdXQgZm9yIGVhc2llciBhdXRvbWF0ZWQgcGFyc2luZy4KIC5UUAotLkIgLXIKKy5CIFwtcgogRG8gbm90IHJlcXVpcmUgcm9vdCBhY2Nlc3MgdG8gcnVuIHRoZSBkYWVtb24uICBTcGVjaWZpY2FsbHksIGRvIG5vdCBleGl0CiBpZiBmaWxlcyBvbmx5IGFjY2Vzc2libGUgdG8gcm9vdCAoc3VjaCBhcyAvZGV2L2ttZW0gZXRjLikgY2Fubm90IGJlCiBvcGVuZWQuCiAuVFAKLS5CIC11IFxmSVVJRAorLkIgXC11IFxmSVVJRAogQ2hhbmdlIHRvIHRoZSB1c2VyIElECiAuSSBVSUQKICh3aGljaCBjYW4gYmUgZ2l2ZW4gaW4gbnVtZXJpY2FsIG9yIHRleHR1YWwgZm9ybSkgYWZ0ZXIgb3BlbmluZwogbGlzdGVuaW5nIHNvY2tldHMuCiAuVFAKLS5CIC1VCisuQiBcLVUKIEluc3RydWN0cyB0aGUgYWdlbnQgdG8gbm90IHJlbW92ZSBpdHMgcGlkIGZpbGUgKHNlZSB0aGUKLS5CIC1wCisuQiBcLXAKIG9wdGlvbikgb24gc2h1dGRvd24uIE92ZXJyaWRlcyB0aGUgbGVhdmVfcGlkZmlsZSB0b2tlbiBpbiB0aGUKIC5JIHNubXBkLmNvbmYKIGZpbGUsIHNlZQogLkkgc25tcGQuY29uZig1KS4KIC5UUAotLkIgLXYsIC0tdmVyc2lvbgorLkIgXC12LCBcLVwtdmVyc2lvbgogUHJpbnQgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGFnZW50IGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC1WCisuQiBcLVYKIFN5bWJvbGljYWxseSBkdW1wIFNOTVAgdHJhbnNhY3Rpb25zLgogLlRQCi0uQiAteCBcZklBRERSRVNTCisuQiBcLXggXGZJQUREUkVTUwogTGlzdGVucyBmb3IgQWdlbnRYIGNvbm5lY3Rpb25zIG9uIHRoZSBzcGVjaWZpZWQgYWRkcmVzcwogcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgQUdFTlRYX1NPQ0tFVC4KIFRoZSBhZGRyZXNzIGNhbiBlaXRoZXIgYmUgYSBVbml4IGRvbWFpbiBzb2NrZXQgcGF0aCwKIG9yIHRoZSBhZGRyZXNzIG9mIGEgbmV0d29yayBpbnRlcmZhY2UuICBUaGUgZm9ybWF0IGlzIHRoZSBzYW1lIGFzIHRoZQogZm9ybWF0IG9mIGxpc3RlbmluZyBhZGRyZXNzZXMgZGVzY3JpYmVkIGJlbG93LgogLlRQCi0uQiAtWAorLkIgXC1YCiBSdW4gYXMgYW4gQWdlbnRYIHN1YmFnZW50IHJhdGhlciB0aGFuIGFzIGFuIFNOTVAgbWFzdGVyIGFnZW50LgogLlRQCi0uQkkgLS0gIm5hbWUiPSJ2YWx1ZSIKLUFsbG93cyB0byBzcGVjaWZ5IGFueSB0b2tlbiAoIm5hbWUiKSBzdXBwb3J0ZWQgaW4gdGhlCisuQkkgXC1cLSAibmFtZSI9InZhbHVlIgorQWxsb3dzIG9uZSB0byBzcGVjaWZ5IGFueSB0b2tlbiAoIm5hbWUiKSBzdXBwb3J0ZWQgaW4gdGhlCiAuSSBzbm1wZC5jb25mCiBmaWxlIGFuZCBzZXRzIGl0cyB2YWx1ZSB0byAidmFsdWUiLiBPdmVycmlkZXMgdGhlIGNvcnJlc3BvbmRpbmcgdG9rZW4gaW4gdGhlCiAuSSBzbm1wZC5jb25mCkBAIC0xOTMsNiArMTkzLDEyIEBACiBob3N0bmFtZVs6cG9ydF0KIC5JIG9yCiBJUHY2LWFkZHJlc3NbOnBvcnRdCisuVFAgMjgKKy5JUiAiIiAic3NoIgoraG9zdG5hbWU6cG9ydAorLlRQIDI4CisuSVIgIiIgImR0bHN1ZHAiCitob3N0bmFtZTpwb3J0CiAuUkUKIC5QUAogTm90ZSB0aGF0IDx0cmFuc3BvcnQtc3BlY2lmaWVyPiBzdHJpbmdzIGFyZSBjYXNlLWluc2Vuc2l0aXZlIHNvIHRoYXQsCkBAIC0yMTIsMTAgKzIxOCwxMCBAQAogLklSICJpcHg6LzQwMDAwIgogbGlzdGVuIG9uIElQWCBwb3J0IDQwMDAwIG9uIGFsbCBJUFggaW50ZXJmYWNlcy4KIC5UUCAyNAotLklSICJ1bml4Oi90bXAvbG9jYWwtYWdlbnQiCi1saXN0ZW4gb24gdGhlIFVuaXggZG9tYWluIHNvY2tldCBcZkkvdG1wL2xvY2FsLWFnZW50XGZSLgorLklSICJ1bml4Oi90bXAvbG9jYWxcLWFnZW50IgorbGlzdGVuIG9uIHRoZSBVbml4IGRvbWFpbiBzb2NrZXQgXGZJL3RtcC9sb2NhbFwtYWdlbnRcZlIuCiAuVFAgMjQKLS5JUiAiL3RtcC9sb2NhbC1hZ2VudCIKKy5JUiAiL3RtcC9sb2NhbFwtYWdlbnQiCiBpcyBpZGVudGljYWwgdG8gdGhlIHByZXZpb3VzIHNwZWNpZmljYXRpb24sIHNpbmNlIHRoZSBVbml4IGRvbWFpbiBpcwogYXNzdW1lZCBpZiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIHRoZSA8dHJhbnNwb3J0LWFkZHJlc3M+IGlzICcvJy4KIC5UUCAyNApAQCAtMjI1LDYgKzIzMSwxNiBAQAogLlRQIDI0CiAuSVIgInVkcDY6MTAxNjEiCiBsaXN0ZW4gb24gcG9ydCAxMDE2MSBvbiBhbGwgSVB2NiBpbnRlcmZhY2VzLgorLlRQIDI0CisuSVIgInNzaDoxMjcuMC4wLjE6MjIiCitBbGxvd3MgY29ubmVjdGlvbnMgZnJvbSB0aGUgc25tcCBzdWJzeXN0ZW0gb24gdGhlIHNzaCBzZXJ2ZXIgb24gcG9ydAorMjIuICBUaGUgZGV0YWlscyBvZiB1c2luZyBTTk1QIG92ZXIgU1NIIGFyZSBkZWZpbmVkIGJlbG93LgorLlRQIDI0CisuSVIgImR0bHN1ZHA6MTI3LjAuMC4xOjkxNjEiCitMaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIG92ZXIgRFRMUyBvbiBVRFAgcG9ydCA5MTYxLiAgVGhlIHNubXAuY29uZiBmaWxlCittdXN0IGhhdmUgdGhlCisuSVIgc2VydmVyQ2VydCwKK2NvbmZpZ3VyYXRpb24gdG9rZW5zIGRlZmluZWQuCiAuUFAKIE5vdGUgdGhhdCBub3QgYWxsIHRoZSB0cmFuc3BvcnQgZG9tYWlucyBsaXN0ZWQgYWJvdmUgd2lsbCBhbHdheXMgYmUKIGF2YWlsYWJsZTsgZm9yIGluc3RhbmNlLCBob3N0cyB3aXRoIG5vIElQdjYgc3VwcG9ydCB3aWxsIG5vdCBiZSBhYmxlCkBAIC0yMzIsNiArMjQ4LDcxIEBACiB0aGUgZXJyb3IgIkVycm9yIG9wZW5pbmcgc3BlY2lmaWVkIGVuZHBvaW50Ii4gIExpa2V3aXNlLCBzaW5jZSBBQUw1CiBQVkMgc3VwcG9ydCBpcyBvbmx5IGN1cnJlbnRseSBhdmFpbGFibGUgb24gTGludXgsIGl0IHdpbGwgZmFpbCB3aXRoCiB0aGUgc2FtZSBlcnJvciBvbiBvdGhlciBwbGF0Zm9ybXMuCisuU0ggVHJhbnNwb3J0IFNwZWNpZmljIE5vdGVzCisuUlMgMAorLlRQIDgKK3NzaAorVGhlIFNTSCB0cmFuc3BvcnQsIG9uIHRoZSBzZXJ2ZXIgc2lkZSwgaXMgYWN0dWFsbHkganVzdCBhIHVuaXgKK25hbWVkIHBpcGUgdGhhdCBjYW4gYmUgY29ubmVjdGVkIHRvIHZpYSBhIHNzaCBzdWJzeXN0ZW0gY29uZmlndXJlZCBpbgordGhlIG1haW4gc3NoIHNlcnZlci4gIFRoZSBwaXBlIGxvY2F0aW9uIChjb25maWd1cmFibGUgd2l0aCB0aGUKK3NzaHRvc25tcHNvY2tldCB0b2tlbiBpbiBzbm1wLmNvbmYpIGlzCisuSSAvdmFyL25ldFwtc25tcC9zc2h0b3NubXAuCitQYWNrZXRzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gaXQgdmlhIHRoZSBzc2h0b3NubXAgYXBwbGljYXRpb24sIHdoaWNoCithbHNvIHNlbmRzIHRoZSB1c2VyIElEIGFzIHdlbGwgd2hlbiBzdGFydGluZyB0aGUgY29ubmVjdGlvbi4gIFRoZSBUU00KK3NlY3VyaXR5IG1vZGVsIHNob3VsZCBiZSB1c2VkIHdoZW4gcGFja2V0cyBzaG91bGQgcHJvY2VzcyBpdC4KKy5JUAorVGhlCisuSSBzc2h0b3NubXAKK2NvbW1hbmQga25vd3MgaG93IHRvIGNvbm5lY3QgdG8gdGhpcyBwaXBlIGFuZCB0YWxrIHRvCitpdC4gIEl0IHNob3VsZCBiZSBjb25maWd1cmVkIGluIHRoZQorLklSICJPcGVuU1NIIHNzaGQiCitjb25maWd1cmF0aW9uIGZpbGUgKHdoaWNoIGlzIG5vcm1hbGx5CisuSVIgIi9ldGMvc3NoL3NzaGRfY29uZmlnIgordXNpbmcgdGhlIGZvbGxvd2luZyBjb25maWd1cmF0aW9uIGxpbmU6CisuVFAgOAorLklQCitTdWJzeXN0ZW0gc25tcCAvdXNyL2xvY2FsL2Jpbi9zc2h0b3NubXAKKy5JUAorVGhlCisuSSBzc2h0b3NubXAKK2NvbW1hbmQgd2lsbCBuZWVkIHJlYWQvd3JpdGUgYWNjZXNzIHRvIHRoZSAKKy5JIC92YXIvbmV0XC1zbm1wL3NzaHRvc25tcAorcGlwZS4gIEFsdGhvdWdoIGl0IHNob3VsZCBiZSBmYWlybHkgc2FmZSB0byBncmFudCBhY2Nlc3MgdG8gdGhlCithdmVyYWdlIHVzZXIgc2luY2UgaXQgc3RpbGwgcmVxdWlyZXMgbW9kaWZpY2F0aW9ucyB0byB0aGUgQUNNIHNldHRpbmdzCitiZWZvcmUgdGhlIHVzZXIgY2FuIHBlcmZvcm0gb3BlcmF0aW9ucywgcGFyYW5vaWQgYWRtaW5pc3RyYXRvcnMgbWF5Cit3YW50IHRvIG1ha2UgdGhlIC92YXIvbmV0XC1zbm1wIGRpcmVjdG9yeSBhY2Nlc3NpYmxlIG9ubHkgYnkgdXNlcnMgaW4gYQorcGFydGljdWxhciBncm91cC4gIFVzZSB0aGUKKy5JIHNzaHRvc25tcHNvY2tldHBlcm1zCitzbm1wLmNvbmYgY29uZmlndXJlIG9wdGlvbiB0byBzZXQgdGhlIHBlcm1pc3Npb25zLCBvd25lciBhbmQgZ3JvdXAgb2YKK3RoZSBjcmVhdGVkIHNvY2tldC4KKy5JUAorQWNjZXNzIGNvbnRyb2wgY2FuIGJlIGdyYW50ZWQgdG8gdGhlIHVzZXIgImZvbyIgdXNpbmcgdGhlIGZvbGxvd2luZworc3R5bGUgb2Ygc2ltcGxlIHNubXBkLmNvbmYgc2V0dGluZ3M6CisuVFAgOAorLklQCityb3VzZXIgXC1zIHRzbSBmb28gYXV0aHByaXYKKy5JUAorTm90ZSB0aGF0ICJhdXRocHJpdiIgaXMgYWNjZXB0YWJsZSBhc3N1bWluZyBhcyBTU0ggcHJvdGVjdHMgZXZlcnl0aGluZwordGhhdCB3YXkgKGFzc3VtaW5nIHlvdSBoYXZlIGEgbm9uLWluc2FuZSBzZXR1cCkuCitzbm1wZCBoYXMgbm8gbm90aW9uIG9mIGhvdyBTU0ggaGFzIGFjdHVhbGx5IHByb3RlY3RlZCBhIHBhY2tldCBhbmQKK3RodXMgdGhlIHNubXAgYWdlbnQgYXNzdW1lcyBhbGwgcGFja2V0cyBwYXNzZWQgdGhyb3VnaCB0aGUgU1NICit0cmFuc3BvcnQgaGF2ZSBiZWVuIHByb3RlY3RlZCBhdCB0aGUgYXV0aHByaXYgbGV2ZWwuCisuVFAgOAorZHRsc3VkcAorVGhlIERUTFMgcHJvdG9jb2wsIHdoaWNoIGlzIGJhc2VkIG9mZiBvZiBUTFMsIHJlcXVpcmVzIGJvdGggY2xpZW50IGFuZAorc2VydmVyIGNlcnRpZmljYXRlcyB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gYW5kIGF1dGhlbnRpY2F0ZSBib3RoCitzaWRlcy4gIEluIG9yZGVyIHRvIGRvIHRoaXMsIHRoZSBjbGllbnQgd2lsbCBuZWVkIHRvIGNvbmZpZ3VyZSB0aGUKK3NubXAuY29uZiBmaWxlCit3aXRoIHRoZQorLklSIGNsaWVudENlcnQKK2NvbmZpZ3VyYXRpb24gdG9rZW5zLiAgVGhlIHNlcnZlciB3aWxsIG5lZWQgdG8gY29uZmlndXJlIHRoZSBzbm1wLmNvbmYKK2ZpbGUgd2l0aCB0aGUKKy5JUiBzZXJ2ZXJDZXJ0Citjb25maWd1cmF0aW9uIHRva2VucyBkZWZpbmVkLgorLklQCitBY2Nlc3MgY29udHJvbCBzZXR1cCBpcyBzaW1pbGFyIHRvIHRoZSBzc2ggdHJhbnNwb3J0IGFzIHRoZSBUU00KK3NlY3VyaXR5IG1vZGVsIHNob3VsZCBiZSB1c2VkIHRvIHByb3RlY3QgdGhlIHBhY2tldC4KKy5SRQogLlNIIENPTkZJR1VSQVRJT04gRklMRVMKIC5QUAogLkIgc25tcGQKZGlmZiAtLWdpdCBhL21hbi9zbm1wZC5jb25mLjUuZGVmIGIvbWFuL3NubXBkLmNvbmYuNS5kZWYKaW5kZXggMWU3Y2IyYy4uMmE4YTNkMyAxMDA2NDQKLS0tIGEvbWFuL3NubXBkLmNvbmYuNS5kZWYKKysrIGIvbWFuL3NubXBkLmNvbmYuNS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggU05NUEQuQ09ORiA1ICIwMSBKdW4gMjAwOSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QRC5DT05GIDUgIjMwIEp1biAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBkLmNvbmYgLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBOZXQtU05NUCBTTk1QIGFnZW50CiAuU0ggREVTQ1JJUFRJT04KQEAgLTE4LDcgKzE4LDcgQEAKIG1hbnVhbCBwYWdlIGZvciBtb3JlIGluZm9ybWF0aW9uLCBvciB0cnkgcnVubmluZyB0aGUKIGNvbW1hbmQ6CiAuUlMKLS5JUCAic25tcGNvbmYgLWcgYmFzaWNfc2V0dXAiCisuSVAgInNubXBjb25mIFwtZyBiYXNpY19zZXR1cCIKIC5SRQogLlBQCiBUaGVyZSBhcmUgYSBsYXJnZSBudW1iZXIgb2YgZGlyZWN0aXZlcyB0aGF0IGNhbiBiZSBzcGVjaWZpZWQsCkBAIC00MCw3ICs0MCw3IEBACiBBIGZ1bGwgbGlzdCBvZiByZWNvZ25pc2VkIGRpcmVjdGl2ZXMgY2FuIGJlIG9idGFpbmVkIGJ5IHJ1bm5pbmcKIHRoZSBjb21tYW5kOgogLlJTCi0uSVAgInNubXBkIC1IIgorLklQICJzbm1wZCBcLUgiCiAuUkUKIC5TSCBBR0VOVCBCRUhBVklPVVIKIEFsdGhvdWdoIG1vc3QgY29uZmlndXJhdGlvbiBkaXJlY3RpdmVzIGFyZSBjb25jZXJuZWQgd2l0aCB0aGUgTUlCCkBAIC02OSwxMSArNjksMTEgQEAKIHN0YXJ0aW5nIHdpdGggJyMnICgjVUlEKS4KIC5JUCAibGVhdmVfcGlkZmlsZSB5ZXMiCiBpbnN0cnVjdHMgdGhlIGFnZW50IHRvIG5vdCByZW1vdmUgaXRzIHBpZCBmaWxlIG9uIHNodXRkb3duLiBFcXVpdmFsZW50IHRvCi1zcGVjaWZ5aW5nICItVSIgb24gdGhlIGNvbW1hbmQgbGluZS4KK3NwZWNpZnlpbmcgIlwtVSIgb24gdGhlIGNvbW1hbmQgbGluZS4KIC5JUCAibWF4R2V0YnVsa1JlcGVhdHMgTlVNIgogU2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzcG9uc2VzIGFsbG93ZWQgZm9yIGEgc2luZ2xlIHZhcmlhYmxlIGluCi1hIGdldGJ1bGsgcmVxdWVzdC4gIFNldCB0byAwIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCBhbmQgc2V0IGl0IHRvIC0xIHRvCi1lbmFibGUgdW5saW1pdGVkLiAgQmVjYXVzZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFoZWFkIG9mIHRpbWUsIHNpdHRpbmcKK2EgZ2V0YnVsayByZXF1ZXN0LiAgU2V0IHRvIDAgdG8gZW5hYmxlIHRoZSBkZWZhdWx0IGFuZCBzZXQgaXQgdG8gXC0xIHRvCitlbmFibGUgdW5saW1pdGVkLiAgQmVjYXVzZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFoZWFkIG9mIHRpbWUsIHNldHRpbmcKIHRoaXMgdG8gdW5saW1pdGVkIGlzIG5vdCBjb25zaWRlcmVkIHNhZmUgaWYgeW91ciB1c2VyIHBvcHVsYXRpb24gY2FuCiBub3QgYmUgdHJ1c3RlZC4gIEEgcmVwZWF0IG51bWJlciBncmVhdGVyIHRoYW4gdGhpcyB3aWxsIGJlIHRydW5jYXRlZAogdG8gdGhpcyB2YWx1ZS4KQEAgLTgyLDggKzgyLDggQEAKIC5JUCAibWF4R2V0YnVsa1Jlc3BvbnNlcyBOVU0iCiBTZXRzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNwb25zZXMgYWxsb3dlZCBmb3IgYSBnZXRidWxrIHJlcXVlc3QuCiBUaGlzIGlzIHNldCBieSBkZWZhdWx0IHRvIDEwMC4gIFNldCB0byAwIHRvIGVuYWJsZSB0aGUgZGVmYXVsdCBhbmQgc2V0Ci1pdCB0byAtMSB0byBlbmFibGUgdW5saW1pdGVkLiAgQmVjYXVzZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGFoZWFkIG9mCi10aW1lLCBzaXR0aW5nIHRoaXMgdG8gdW5saW1pdGVkIGlzIG5vdCBjb25zaWRlcmVkIHNhZmUgaWYgeW91ciB1c2VyCitpdCB0byBcLTEgdG8gZW5hYmxlIHVubGltaXRlZC4gIEJlY2F1c2UgbWVtb3J5IGlzIGFsbG9jYXRlZCBhaGVhZCBvZgordGltZSwgc2V0dGluZyB0aGlzIHRvIHVubGltaXRlZCBpcyBub3QgY29uc2lkZXJlZCBzYWZlIGlmIHlvdXIgdXNlcgogcG9wdWxhdGlvbiBjYW4gbm90IGJlIHRydXN0ZWQuCiAuSVAKIEluIGdlbmVyYWwsIHRoZSB0b3RhbCBudW1iZXIgb2YgcmVzcG9uc2VzIHdpbGwgbm90IGJlIGFsbG93ZWQgdG8KQEAgLTkyLDEzICs5Miw0MiBAQAogdGhlIGNhbGN1bGF0ZWQgbnVtYmVyIG9mIHJlcGVhdHMgYWxsb3cgdG8gZml0IGJlbG93IHRoaXMgbnVtYmVyLgogLklQCiBBbHNvIG5vdCB0aGF0IHByb2Nlc3Npbmcgb2YgbWF4R2V0YnVsa1JlcGVhdHMgaXMgaGFuZGxlZCBmaXJzdC4KLS5TUyBTTk1QdjMgQ29uZmlndXJhdGlvbgotU05NUHYzIHJlcXVpcmVzIGFuIFNOTVAgYWdlbnQgdG8gZGVmaW5lIGEgdW5pcXVlICJlbmdpbmUgSUQiCi1pbiBvcmRlciB0byByZXNwb25kIHRvIFNOTVB2MyByZXF1ZXN0cy4KLVRoaXMgSUQgd2lsbCBub3JtYWxseSBiZSBkZXRlcm1pbmVkIGF1dG9tYXRpY2FsbHksIHVzaW5nIHR3byByZWFzb25hYmx5Ci1ub24tcHJlZGljdGFibGUgdmFsdWVzIC0gYSAocHNldWRvLSlyYW5kb20gbnVtYmVyIGFuZCB0aGUgY3VycmVudAotdXB0aW1lIGluIHNlY29uZHMuIFRoaXMgaXMgdGhlIHJlY29tbWVuZGVkIGFwcHJvYWNoLiBIb3dldmVyIHRoZQotY2FwYWNpdHkgZXhpc3RzIHRvIGRlZmluZSB0aGUgZW5naW5lSUQgaW4gb3RoZXIgd2F5czoKKy5TUyBTTk1QdjMgQ29uZmlndXJhdGlvbiAtIFJlYWwgU2VjdXJpdHkKK1NOTVB2MyBpcyBhZGRlZCBmbGV4aWJsZSBzZWN1cml0eSBtb2RlbHMgdG8gdGhlIFNOTVAgcGFja2V0IHN0cnVjdHVyZQorc28gdGhhdCBtdWx0aXBsZSBzZWN1cml0eSBzb2x1dGlvbnMgY291bGQgYmUgdXNlZC4gIFNOTVB2MyB3YXMKK29yaWdpbmFsIGRlZmluZWQgd2l0aCBhICJVc2VyLWJhc2VkIFNlY3VyaXR5IE1vZGVsIiAoVVNNKSBbUkZDMzQxNF0KK3RoYXQgcmVxdWlyZWQgbWFpbnRhaW5pbmcgYSBTTk1QLXNwZWNpZmljIHVzZXIgZGF0YWJhc2UuICBUaGlzIHdhcworbGF0ZXIgZGV0ZXJtaW5lZCB0byBiZSB0cm91Ymxlc29tZSB0byBtYWludGFpbiBhbmQgaGFkIHNvbWUgbWlub3IKK3NlY3VyaXR5IGlzc3Vlcy4gIFRoZSBJRVRGIGhhcyBzaW5jZSBhZGRlZCBhZGRpdGlvbmFsIHNlY3VyaXR5IG1vZGVscwordG8gdHVubmVsIFNOTVAgb3ZlciBTU0ggW1JGQzU1OTJdIGFuZCBEVExTL1RMUyBbUkZDLXRvLWJlXS4gIE5ldC1TTk1QCitjb250YWlucyByb2J1c3Qgc3VwcG9ydCBmb3IgU05NUHYzL1VTTSwgU05NUHYzL1RMUywgYW5kIFNOTVB2My9EVExTLgorSXQgY29udGFpbnMgcGFydGlhbCBzdXBwb3J0IGZvciBTTk1QdjMvU1NIIGFzIHdlbGwgYnV0IGhhcyBub3QgYmVlbiBhcworZXh0ZW5zaXZlbHkgdGVzdGVkLiAgSXQgYWxzbyBjb250YWlucyBjb2RlIGZvciBzdXBwb3J0IGZvciBhbgorZXhwZXJpbWVudGFsIEtlcmJlcm9zIGJhc2VkIFNOTVB2MyB0aGF0IG5ldmVyIGdvdCBzdGFuZGFyZGl6ZWQuCisuUFAKK0hvcGVmdWxseSBtb3JlIFNOTVAgc29mdHdhcmUgYW5kIGRldmljZXMgd2lsbCBldmVudHVhbGx5IHN1cHBvcnQgU05NUAorb3ZlciAoRClUTFMgb3IgU1NILCBidXQgaXQgaXMgbGlrZWx5IHRoYXQgZGV2aWNlcyB3aXRoIG9yaWdpbmFsCitzdXBwb3J0IGZvciBTTk1QIHdpbGwgb25seSBjb250YWluIHN1cHBvcnQgZm9yIFVTTSB1c2Vycy4gIElmIHlvdXIKK25ldHdvcmsgbWFuYWdlciBzdXBwb3J0cyBTTk1QIG92ZXIgKEQpVExTIG9yIFNOTVAgb3ZlciBTU0ggd2Ugc3VnZ2VzdAoreW91IHVzZSBvbmUgb2YgdGhlc2UgbWVjaGFuaXNtcyBpbnN0ZWFkIG9mIHVzaW5nIFVTTSwgYnV0IGFzIGFsd2F5cword2l0aCBOZXQtU05NUCB3ZSBnaXZlIHlvdSB0aGUgb3B0aW9ucyB0byBwaWNrIGZyb20gc28geW91IGNhbiBtYWtlIHRoZQorY2hvaWNlIHRoYXQgaXMgYmVzdCBmb3IgeW91LgorLlNTIFNOTVB2MyBnZW5lcmljIHBhcmFtZXRlcnMKK1RoZXNlIHBhcmFtZXRlcnMgYXJlIGdlbmVyaWMgdG8gYWxsIHRoZSBmb3JtcyBvZiBTTk1QdjMuICBUaGUgU05NUHYzCitwcm90b2NvbCBkZWZpbmVzICJlbmdpbmVJRHMiIHRoYXQgdW5pcXVlbHkgaWRlbnRpZnkgYW4gYWdlbnQuICBUaGUKK3N0cmluZyBtdXN0IGJlIGNvbnNpc3RlbnQgdGhyb3VnaCB0aW1lIGFuZCBzaG91bGQgbm90IGNoYW5nZSBvcgorY29uZmxpY3Qgd2l0aCBhbm90aGVyIGFnZW50J3MgZW5naW5lSUQuICBFdmVyLiAgSW50ZXJuYWxseSwgTmV0LVNOTVAKK2J5IGRlZmF1bHQgY3JlYXRlcyBhIHVuaXF1ZSBlbmdpbmVJRCB0aGF0IGlzIGJhc2VkIG9mZiBvZiB0aGUgY3VycmVudCBzeXN0ZW0KK3RpbWUgYW5kIGEgcmFuZG9tIG51bWJlci4gIFRoaXMgc2hvdWxkIGJlIHN1ZmZpY2llbnQgZm9yIG1vc3QgdXNlcnMKK3VubGVzcyB5b3UncmUgZW1iZWRkaW5nIG91ciBhZ2VudCBpbiBhIGRldmljZSB3aGVyZSB0aGVzZSBudW1iZXJzCit3b24ndCB2YXJ5IGJldHdlZW4gYm94ZXMgb24gdGhlIGRldmljZXMgaW5pdGlhbCBib290LgorLklQCitFbmdpbmVJRHMgYXJlIHVzZWQgYm90aCBhcyBhICJjb250ZXh0IiBmb3Igc2VsZWN0aW5nIGluZm9ybWF0aW9uIGZyb20KK3RoZSBkZXZpY2UgYW5kIFNOTVB2MyB3aXRoIFVTTSB1c2VzIGl0IHRvIGNyZWF0ZSB1bmlxdWUgZW50cmllcyBmb3IKK3VzZXJzIGluIGl0cyB1c2VyIHRhYmxlLgorLklQCitUaGUgTmV0LVNOTVAgYWdlbnQgb2ZmZXJzIHRoZSBmb2xsb3dpbmcgbWVjaGFuaXNtcyBmb3Igc2V0dGluZyB0aGUKK2VuZ2luZUlELCBidXQgYWdhaW4geW91IHNob3VsZCBvbmx5IHVzZSB0aGVtIGlmIHlvdSBrbm93IHdoYXQgeW91J3JlIGRvaW5nOgogLklQICJlbmdpbmVJRCBTVFJJTkciCiBzcGVjaWZpZXMgdGhhdCB0aGUgZW5naW5lSUQgc2hvdWxkIGJlIGJ1aWx0IGZyb20gdGhlIGdpdmVuIHRleHQgU1RSSU5HLgogLklQICJlbmdpbmVJRFR5cGUgMXwyfDMiCkBAIC0xMTQsMTQgKzE0MywxMjYgQEAKIC5cIgogLlwiIFdoYXQgaWYgdGhpcyBkb2Vzbid0IGV4aXN0ID8KIC5cIgotLlNIIEFDQ0VTUyBDT05UUk9MCi0uQiBzbm1wZAotc3VwcG9ydHMgdGhlIFZpZXctQmFzZWQgQWNjZXNzIENvbnRyb2wgTW9kZWwgKFZBQ00pIGFzIGRlZmluZWQgaW4gUkZDCi0yNTc1LCB0byBjb250cm9sIHdobyBjYW4gcmV0cmlldmUgb3IgdXBkYXRlIGluZm9ybWF0aW9uLiAgVG8gdGhpcyBlbmQsCi1pdCByZWNvZ25pemVzIHZhcmlvdXMgZGlyZWN0aXZlcyByZWxhdGluZyB0byBhY2Nlc3MgY29udHJvbC4KLVRoZXNlIGZhbGwgaW50byBmb3VyIGJhc2ljIGdyb3Vwcy4KLS5TUyBTTk1QdjMgVXNlcnMKLS5JUCAiY3JlYXRlVXNlciBbLWUgRU5HSU5FSURdIHVzZXJuYW1lIChNRDV8U0hBKSBhdXRocGFzc3BocmFzZSBbREVTfEFFU10gW3ByaXZwYXNzcGhyYXNlXSIKKy5TUyBTTk1QdjMgb3ZlciBUTFMKK1NOTVB2MyBtYXkgYmUgdHVubmVsZWQgb3ZlciBUTFMgYW5kIERUTFMuICBUTFMgcnVucyBvdmVyIFRDUCBhbmQgRFRMUworaXMgdGhlIFVEUCBlcXVpdmFsZW50LiAgV2VzIEhhcmRha2VyICh0aGUgZm91bmRlciBvZiBOZXQtU05NUCkKK3BlcmZvcm1lZCBhIHN0dWR5IGFuZCBwcmVzZW50ZWQgaXQgYXQgYW4gSUVURiBtZWV0aW5nIHRoYXQgc2hvd2VkIHRoYXQKK1RDUCBiYXNlZCBwcm90b2NvbHMgYXJlIHN1ZmZpY2llbnQgZm9yIHN0YWJsZSBuZXR3b3JrcyBidXQgcXVpY2tseQorYmVjb21lcyBhIHByb2JsZW0gaW4gdW5zdGFibGUgbmV0d29ya3Mgd2l0aCBldmVuIG1vZGVyYXRlIGxldmVscyBvZgorcGFja2V0IGxvc3MgKH4gMjAtMzAlKS4gIElmIHlvdSBhcmUgZ29pbmcgdG8gdXNlIFRMUyBvciBEVExTLCB5b3UKK3Nob3VsZCB1c2UgdGhlIG9uZSBhcHByb3ByaWF0ZSBmb3IgeW91ciBuZXR3b3JraW5nIGVudmlyb25tZW50LiAgWW91CitzaG91bGQgcG90ZW50aWFsbHkgdHVybiB0aGVtIGJvdGggb24gc28geW91ciBtYW5hZ2VtZW50IHN5c3RlbSBjYW4KK2FjY2VzcyBlaXRoZXIgdGhlIFVEUCBvciB0aGUgVENQIHBvcnQgYXMgbmVlZGVkLgorLlBQCitNYW55IG9mIHRoZSBjb25maWd1cmF0aW9uIHRva2VucyBkZXNjcmliZWQgYmVsb3cgYXJlIHByZWZpeGVkIHdpdGgKK2EgJ1tzbm1wXScgdGFnLiAgSWYgeW91IHBsYWNlIHRoZXNlIHRva2VucyBpbiB5b3VyIHNubXBkLmNvbmYgZmlsZSwKK3RoaXMgdGFrZSBpcyByZXF1aXJlZC4gIFNlZSB0aGUgc25tcF9jb25maWcoNSkgbWFudWFsIHBhZ2UgZm9yIHRoZQorbWVhbmluZyBvZiB0aGlzIGNvbnRleHQgc3dpdGNoLgorLklQICJbc25tcF0gbG9jYWxDZXJ0IDxzcGVjaWZpZXI+IgorVGhpcyB0b2tlbiBkZWZpbmVzIHRoZSBkZWZhdWx0IFguNTA5IHB1YmxpYyBrZXkgdG8gdXNlIGFzIHRoZSBzZXJ2ZXIncworaWRlbnRpdHkuICBJdCBzaG91bGQgZWl0aGVyIGJlIGEgZmluZ2VycHJpbnQgb3IgYSBmaWxlbmFtZS4gIFRvIGNyZWF0ZQorYSBwdWJsaWMga2V5IGZvciB1c2UsIHBsZWFzZSBydW4gdGhlICJuZXRcLXNubXBcLWNlcnQiIHV0aWxpdHkgd2hpY2gKK3dpbGwgaGVscCB5b3UgY3JlYXRlIHRoZSByZXF1aXJlZCBjZXJ0aWZpY2F0ZS4KKy5JUAorVGhlIGRlZmF1bHQgdmFsdWUgZm9yIHRoaXMgaXMgdGhlIGNlcnRpZmljYXRlIGluIHRoZSAic25tcGQiIG5hbWVkCitjZXJ0aWZpY2F0ZSBmaWxlLgorLklQICJbc25tcF0gdGxzQWxnb3JpdGhtcyA8YWxnb3JpdGhtcz4iCitUaGlzIHN0cmluZyB3aWxsIHNlbGVjdCB0aGUgYWxnb3JpdGhtcyB0byB1c2Ugd2hlbiBuZWdvdGlhdGluZworc2VjdXJpdHkgZHVyaW5nIChEKVRMUyBzZXNzaW9uIGVzdGFibGlzaG1lbnQuICBTZWUgdGhlIG9wZW5zc2wgbWFudWFsCitwYWdlIGNpcGhlcnMoMSkgZm9yIGRldGFpbHMgb24gdGhlIGZvcm1hdC4gIEV4YW1wbGVzIHN0cmluZ3MgaW5jbHVkZToKKy5SUworLm5mCisKK0RFRkFVTFQKK0FMTAorSElHSAorSElHSDohQUVTMTI4XC1TSEEKKy5maQorLlJFCisuSVAKK1RoZSBkZWZhdWx0IHZhbHVlIGlzIHdoYXRldmVyIG9wZW5zc2wgaXRzZWxmIHdhcyBjb25maWd1cmVkIHdpdGguCisuSVAgIltzbm1wXSB4NTA5Q1JMRmlsZSIKK0lmIHlvdSBhcmUgdXNpbmcgYSBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgKENBKSB0aGF0IHB1Ymxpc2hlcyBhCitDZXJ0aWZpY2F0ZSBSZXZvY2F0aW9uIExpc3QgKENSTCkgdGhlbiB0aGlzIHRva2VuIGNhbiBiZSB1c2VkIHRvCitzcGVjaWZ5IHRoZSBsb2NhdGlvbiBpbiB0aGUgZmlsZXN5c3RlbSBvZiBhIGNvcHkgb2YgdGhlIENSTCBmaWxlLgorTm90ZSB0aGF0IE5ldC1TTk1QIHdpbGwgbm90IHB1bGwgYSBDUkwgb3ZlciBodHRwIGFuZCB0aGlzIG11c3QgYmUgYQorZmlsZSwgbm90IGEgVVJMLiAgQWRkaXRpb25hbGx5LCBPcGVuU1NMIGRvZXMgbm90IHJlbG9hZCBhIENSTCBmaWxlCit3aGVuIGl0IGhhcyBjaGFuZ2VkIHNvIG1vZGlmaWNhdGlvbnMgb3IgdXBkYXRlcyB0byB0aGUgZmlsZSB3aWxsIG9ubHkKK2JlIG5vdGljZWQgdXBvbiBhIHJlc3RhcnQgb2YgdGhlIHNubXBkIGFnZW50LgorCisuSVAgImNlcnRTZWNOYW1lIFBSSU9SSVRZIEZJTkdFUlBSSU5UIE9QVElPTlMiCitPUFRJT05TIGNhbiBiZSBvbmUgb2YgPFwtXC1zbiBTRUNOQU1FIHwgXC1cLXJmYzgyMiB8IFwtXC1kbnMgfCBcLVwtaXAgfCBcLVwtY24gfCBcLVwtYW55Pi4KKy5JUAorVGhlIGNlcnRTZWNOYW1lIHRva2VuIHdpbGwgc3BlY2lmeSBob3cgdG8gbWFwIGEgY2VydGlmaWNhdGUgZmllbGQgZnJvbQordGhlIGNsaWVudCdzIFguNTA5IGNlcnRpZmljYXRlIHRvIGEgU05NUHYzIHVzZXJuYW1lLiAgVXNlIHRoZSBcLVwtc24KK1NFQ05BTUUgZmxhZyB0byBkaXJlY3RseSBzcGVjaWZ5IGEgc2VjdXJpdHlOYW1lIGZvciBhIGdpdmVuCitjZXJ0aWZpY2F0ZS4gIFRoZSBvdGhlciBmbGFncyBleHRyYWN0IGEgcGFydGljdWxhciBjb21wb25lbnQgb2YgdGhlCitjZXJ0aWZpY2F0ZSBmb3IgdXNlIGFzIGEgc25tcHYzIHNlY3VyaXR5TmFtZS4gIFRoZXNlIGZpZWxkcyBhcmUgb25lCitvZjogQSBTdWJqZWN0QWx0TmFtZSBjb250YWluaW5nIGFuIHJmYzgyMiB2YWx1ZSAoZWcgaGFyZGFrZXJAbmV0XC1zbm1wLm9yZyksCitBIFN1YmplY3RBbHROYW1lIGNvbnRhaW5pbmcgYSBkbnMgbmFtZSB2YWx1ZSAoZWcgZm9vLm5ldFwtc25tcC5vcmcpLAorYW4gSVAgYWRkcmVzcyAoZWcgMTkyLjAuMi4xKSBvciBhIGNvbW1vbiBuYW1lICJXZXMgSGFyZGFrZXIiLiAgVGhlCitcLVwtYW55IGZsYWcgc3BlY2lmaWVzIHRoYXQgYW55IG9mIHRoZSBzdWJqZWNBbHROYW1lIGZpZWxkcyBtYXkgYmUKK3VzZWQuICBNYWtlIHN1cmUgb25jZSBhIHNlY3VyaXR5TmFtZSBoYXMgYmVlbiBzZWxlY3RlZCB0aGF0IGl0IGlzCitnaXZlbiBhdXRob3JpemF0aW9uIHZpYSB0aGUgVkFDTSBjb250cm9scyBkaXNjdXNzZWQgbGF0ZXIgaW4gdGhpcworbWFudWFsIHBhZ2UuCisuSVAKK1NlZSB0aGUgaHR0cDovL3d3dy5uZXRcLXNubXAub3JnL3dpa2kvaW5kZXgucGhwL1VzaW5nX0RUTFMgd2ViIHBhZ2UgZm9yCittb3JlIGRldGFpbGVkIGluc3RydWN0aW9ucyBmb3Igc2V0dGluZyB1cCAoRClUTFMuCisuSVAgInRydXN0Q2VydCA8c3BlY2lmaWVyPiIKK0ZvciBYNTA5IHRvIHByb3Blcmx5IHZlcmlmeSBhIGNlcnRpZmljYXRlLCBpdCBzaG91bGQgYmUgdmVyaWZpYWJsZSB1cAordW50aWwgYSB0cnVzdCBhbmNob3IgZm9yIGl0LiAgVGhpcyB0cnVzdCBhbmNob3IgaXMgdHlwaWNhbGx5IGEgQ0EKK2NlcnRpZmljYXRlIGJ1dCBpdCBjb3VsZCBhbHNvIGJlIGEgc2VsZi1zaWduZWQgY2VydGlmaWNhdGUuICBUaGUKKyJ0cnVzdENlcnQiIHRva2VuIHNob3VsZCBiZSB1c2VkIHRvIGxvYWQgc3BlY2lmaWMgdHJ1c3QgYW5jaG9ycyBpbnRvIHRoZQordmVyaWZpY2F0aW9uIGVuZ2luZS4KKy5QUAorU05NUCBvdmVyIChEKVRMUyByZXF1aXJlcyB0aGUgdXNlIG9mIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwKKyhUU00pLCBzbyByZWFkIHRoZSBzZWN0aW9uIG9uIHRoZSB1c2FnZSBvZiB0aGUgVHJhbnNwb3J0IFNlY3VyaXR5CitNb2RlbCBhcyB3ZWxsLiAgTWFrZSBzdXJlIHdoZW4geW91IGNvbmZpZ3VyZSB0aGUgVkFDTSB0byBhY2NlcHQKK2Nvbm5lY3Rpb25zIGZyb20gKEQpVExTIHRoYXQgeW91IHVzZSB0aGUgInRzbSIgc2VjdXJpdHkgbW9kZWwuICBFLkcuOgorLmZpCisKK3J3dXNlciBcLXMgdHNtIGhhcmRha2VyQG5ldFwtc25tcC5vcmcKKy5maQorLlNTIFNOTVB2MyBvdmVyIFNTSCBTdXBwb3J0CitUbyB1c2UgU1NILCB5b3UnbGwgbmVlZCB0byBjb25maWd1cmUgc3NoZCB0byBpbnZva2UgdGhlIHNzaHRvc25tcAorcHJvZ3JhbSBhcyB3ZWxsIGFzIGNvbmZpZ3VyZSB0aGUgYWNjZXNzIGNvbnRyb2wgc2V0dGluZ3MgdG8gYWxsb3cKK2FjY2VzcyB0aHJvdWdoIHRoZSB0c20gc2VjdXJpdHkgbW9kZWwgdXNpbmcgdGhlIHVzZXIgbmFtZSBwcm92aWRlZCB0bworc25tcGQgYnkgdGhlIHNzaCB0cmFuc3BvcnQuCisuU1MgU05NUHYzIHdpdGggdGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCAoVFNNKQorVGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCBbUkZDNTU5MV0gZGVmaW5lcyBhIFNOTVB2MyBzZWN1cml0eQorc3lzdGVtIGZvciB1c2Ugd2l0aCAidHVubmVsZWQiIHNlY3VyaXR5IHByb3RvY29scyBsaWtlIFRMUywgRFRMUyBhbmQKK1NTSC4gIEl0IGlzIGEgdmVyeSBzaW1wbGUgc2VjdXJpdHkgbW9kZWwgdGhhdCBzaW1wbHkgbGV0cyBwcm9wZXJseQorcHJvdGVjdGVkIHBhY2tldHMgdG8gcGFzcyB0aHJvdWdoIGludG8gdGhlIHNubXAgYXBwbGljYXRpb24uICBUaGUKK3RyYW5zcG9ydCBpcyByZXF1aXJlZCB0byBwYXNzIGEgc2VjdXJpdHlOYW1lIHRvIHVzZSB0byB0aGUgVFNNIGFuZCB0aGUKK1RTTSBtYXkgb3B0aW9uYWxseSBwcmVmaXggdGhpcyB3aXRoIGEgdHJhbnNwb3J0IHN0cmluZyAoc2VlIGJlbG93KS4KKy5JUCAidHNtVXNlVHJhbnNwb3J0UHJlZml4ICgxfHllc3x0cnVlfDB8bm98ZmFsc2UpIgorSWYgc2V0IHRvIHRydWUsIHRoZSBUU00gbW9kdWxlIHdpbGwgdGFrZSBldmVyeSBzZWN1cml0eU5hbWUgcGFzc2VkIHRvCitpdCBmcm9tIHRoZSB0cmFuc3BvcnRzIHVuZGVybmVhdGggYW5kIHByZWZpeCBpdCB3aXRoIGEgc3RyaW5nIHRoYXQKK3NwZWNpZmljYWxseSBpZGVudGl0aWVzIHRoZSB0cmFuc3BvcnQgaXQgY2FtZSBmcm9tLiAgVGhpcyBpcyB1c2VmdWwgdG8KK2F2b2lkIHNlY3VyaXR5TmFtZSBjbGFzaGVzIHdpdGggdHJhbnNwb3J0cyB0aGF0IGdlbmVyYXRlIGlkZW50aWNhbAorc2VjdXJpdHkgbmFtZXMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHNzaCBzZWN1cml0eSB0cmFuc3BvcnQgZGVsaXZlcmVkCit0aGUgc2VjdXJpdHkgbmFtZSBvZiAiaGFyZGFrZXIiIGZvciBhIFNTSCBjb25uZWN0aW9uIGFuZCB0aGUgVExTCitzZWN1cml0eSB0cmFuc3BvcnQgYWxzbyBkZWxpdmVyZWQgdGhlIHNlY3VyaXR5IG5hbWUgb2YgImhhcmRha2VyIiBmb3IKK2EgVExTIGNvbm5lY3Rpb24gdGhlbiBpdCB3b3VsZCBiZSBpbXBvc3NpYmxlIHRvIHNlcGFyYXRlIG91dCB0aGVzZSB0d28KK3VzZXJzIHRvIHByb3ZpZGUgc2VwYXJhdGUgYWNjZXNzIGNvbnRyb2wgcmlnaHRzLiAgV2l0aCB0aGUKK3RzbVVzZVRyYW5zcG9ydFByZWZpeCBzZXQgdG8gdHJ1ZSwgaG93ZXZlciwgdGhlIHNlY3VyaXR5TmFtZXMgd291bGQgYmUKK3ByZWZpeGVkIGFwcHJvcHJpYXRlbHkgd2l0aCBvbmUgb2Y6ICJ0bHM6IiwgImR0bHM6IiBvciAic3NoOiIuCisuU1MgU05NUHYzIHdpdGggdGhlIFVzZXItYmFzZWQgU2VjdXJpdHkgTW9kZWwgKFVTTSkKK1NOTVB2MyB3YXMgb3JpZ2luYWxseSBkZWZpbmVkIHVzaW5nIHRoZSBVc2VyLUJhc2VkIFNlY3VyaXR5IE1vZGVsCisoVVNNKSwgd2hpY2ggY29udGFpbnMgYSBwcml2YXRlIGxpc3Qgb2YgdXNlcnMgYW5kIGtleXMgc3BlY2lmaWMgdG8gdGhlCitTTk1QdjMgcHJvdG9jb2wuICBUaGUgb3BlcmF0aW9uYWwgY29tbXVuaXR5LCBob3dldmVyLCBkZWNsYXJlZCBpdCBhCitwYWluIHRvIG1hbmlwdWxhdGUgeWV0IGFub3RoZXIgZGF0YWJhc2UgYW5kIHdvdWxkIHByZWZlciB0byB1c2UKK2V4aXN0aW5nIGluZnJhc3RydWN0dXJlLiAgVG8gdGhhdCBlbmQgdGhlIElFVEYgY3JlYXRlZCB0aGUgSVNNUword29ya2luZyBncm91cCB0byBiYXR0bGUgdGhhdCBwcm9ibGVtLCBhbmQgdGhlIElTTVMgd29ya2luZyBncm91cAorZGVjaWRlZCB0byB0dW5uZWwgU05NUCBvdmVyIFNTSCBhbmQgRFRMUyB0byBtYWtlIHVzZSBleGlzdGluZyB1c2VyIGFuZAorYXV0aGVudGljYXRpb24gaW5mcmFzdHJ1Y3R1cmVzLgorLlNTIFNOTVB2MyBVU00gVXNlcnMKK1RvIHVzZSB0aGUgVVNNIGJhc2VkIFNOTVB2My1zcGVjaWZpYyB1c2VycywgeW91J2xsIG5lZWQgdG8gY3JlYXRlCit0aGVtLiAgSXQgaXMgcmVjb21tZW5kZWQgeW91CisuQiAidXNlIHRoZSBuZXRcLXNubXBcLWNvbmZpZyBjb21tYW5kIgordG8gZG8gdGhpcywgYnV0IHlvdSBjYW4gYWxzbyBkbyBpdCBieSBkaXJlY3RseSBzcGVjaWZ5aW5nIGNyZWF0ZVVzZXIKK2RpcmVjdGl2ZXMgeW91cnNlbGYgaW5zdGVhZDoKKy5JUCAiY3JlYXRlVXNlciBbXC1lIEVOR0lORUlEXSB1c2VybmFtZSAoTUQ1fFNIQSkgYXV0aHBhc3NwaHJhc2UgW0RFU3xBRVNdIFtwcml2cGFzc3BocmFzZV0iCiAuSVAKIE1ENSBhbmQgU0hBIGFyZSB0aGUgYXV0aGVudGljYXRpb24gdHlwZXMgdG8gdXNlLiAgREVTIGFuZCBBRVMgYXJlIHRoZQogcHJpdmFjeSBwcm90b2NvbHMgdG8gdXNlLiAgSWYgdGhlIHByaXZhY3kKQEAgLTE0MSw3ICsyODIsNyBAQAogY29tbWFuZC4KIC5JUAogSW5zdGVhZCBvZiBmaWd1cmluZyBvdXQgaG93IHRvIHVzZSB0aGlzIGRpcmVjdGl2ZSBhbmQgd2hlcmUgdG8gcHV0IGl0Ci0oc2VlIGJlbG93KSwganVzdCBydW4gIm5ldC1zbm1wLWNvbmZpZyAtLWNyZWF0ZS1zbm1wdjMtdXNlciIgaW5zdGVhZCwKKyhzZWUgYmVsb3cpLCBqdXN0IHJ1biAibmV0XC1zbm1wXC1jb25maWcgXC1cLWNyZWF0ZVwtc25tcHYzXC11c2VyIiBpbnN0ZWFkLAogd2hpY2ggd2lsbCBhZGQgb25lIG9mIHRoZXNlIGxpbmVzIHRvIHRoZSByaWdodCBwbGFjZS4KIC5JUAogVGhpcyBkaXJlY3RpdmUgc2hvdWxkIGJlIHBsYWNlZCBpbnRvIHRoZQpAQCAtMTU0LDEyICsyOTUsMTIgQEAKIGl0IGNhbiBiZS4KIC5JUAogSWYgeW91IG5lZWQgdG8gbG9jYWxpemUgdGhlIHVzZXIgdG8gYSBwYXJ0aWN1bGFyIEVuZ2luZUlEICh0aGlzIGlzCi11c2VmdWwgbW9zdGx5IGluIHRoZSBzaW1pbGFyIHNubXB0cmFwZC5jb25mIGZpbGUpLCB5b3UgY2FuIHVzZSB0aGUgLWUKK3VzZWZ1bCBtb3N0bHkgaW4gdGhlIHNpbWlsYXIgc25tcHRyYXBkLmNvbmYgZmlsZSksIHlvdSBjYW4gdXNlIHRoZSBcLWUKIGFyZ3VtZW50IHRvIHNwZWNpZnkgYW4gRW5naW5lSUQgYXMgYSBoZXggdmFsdWUgKEVHLCAiMHgwMTAyMDMwNCIpLgogLklQCiBJZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBlaXRoZXIgeW91ciBtYXN0ZXIgb3IgbG9jYWxpemVkIGtleXMgZGlyZWN0bHksCi1yZXBsYWNlIHRoZSBnaXZlbiBwYXNzd29yZCB3aXRoIGEgaGV4c3RyaW5nIChwcmVjZWVkZWQgYnkgYSAiMHgiKSBhbmQKLXByZWNlZGUgdGhlIGhleCBzdHJpbmcgYnkgYSAtbSBvciAtbCB0b2tlbiAocmVzcGVjdGl2ZWx5KS4gIEVHczoKK3JlcGxhY2UgdGhlIGdpdmVuIHBhc3N3b3JkIHdpdGggYSBoZXhzdHJpbmcgKHByZWNlZGVkIGJ5IGEgIjB4IikgYW5kCitwcmVjZWRlIHRoZSBoZXggc3RyaW5nIGJ5IGEgXC1tIG9yIFwtbCB0b2tlbiAocmVzcGVjdGl2ZWx5KS4gIEVHczoKIC5JUAogLlJTCiAubmYKQEAgLTE2Nyw4ICszMDgsOCBAQAogY291bnRpbmcgcHVycG9zZXMuICBQbGVhc2UgZ2VuZXJhdGUgcmFuZG9tIGtleXMgaW5zdGVhZCBvZiB1c2luZwogdGhlc2UgZXhhbXBsZXNdCiAKLWNyZWF0ZVVzZXIgbXl1c2VyIFNIQSAtbCAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1MDYwNzA4MDkgQUVTIC1sIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUKLWNyZWF0ZVVzZXIgbXl1c2VyIFNIQSAtbSAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1MDYwNzA4MDkgQUVTIC1tIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUwNjA3MDgwOQorY3JlYXRlVXNlciBteXVzZXIgU0hBIFwtbCAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1MDYwNzA4MDkgQUVTIFwtbCAweDAwMDEwMjAzMDQwNTA2MDcwODA5MDAwMTAyMDMwNDA1CitjcmVhdGVVc2VyIG15dXNlciBTSEEgXC1tIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUwNjA3MDgwOSBBRVMgXC1tIDB4MDAwMTAyMDMwNDA1MDYwNzA4MDkwMDAxMDIwMzA0MDUwNjA3MDgwOQogLmZpCiAuUkUKIC5JUApAQCAtMTc3LDEyICszMTgsMTcgQEAKIHN1cHBvcnRlZCBhbGdvcml0aG1zKS4gIE1hc3RlciBlbmNyeXB0aW9uIGtleXMsIHRob3VnaCwgbmVlZCB0byBiZSB0aGUKIGxlbmd0aCByZXF1aXJlZCBieSB0aGUgYXV0aGVudGljYXRpb24gYWxnb3JpdGhtIG5vdCB0aGUgbGVuZ3RoCiByZXF1aXJlZCBieSB0aGUgZW5jcnlwdGluZyBhbGdvcml0aG0gKE1ENTogMTYgYnl0ZXMsIFNIQTogMjAgYnl0ZXMpLgorLlNIIEFDQ0VTUyBDT05UUk9MCisuQiBzbm1wZAorc3VwcG9ydHMgdGhlIFZpZXctQmFzZWQgQWNjZXNzIENvbnRyb2wgTW9kZWwgKFZBQ00pIGFzIGRlZmluZWQgaW4gUkZDCisyNTc1LCB0byBjb250cm9sIHdobyBjYW4gcmV0cmlldmUgb3IgdXBkYXRlIGluZm9ybWF0aW9uLiAgVG8gdGhpcyBlbmQsCitpdCByZWNvZ25pemVzIHZhcmlvdXMgZGlyZWN0aXZlcyByZWxhdGluZyB0byBhY2Nlc3MgY29udHJvbC4KIC5TUyBUcmFkaXRpb25hbCBBY2Nlc3MgQ29udHJvbAogTW9zdCBzaW1wbGUgYWNjZXNzIGNvbnRyb2wgcmVxdWlyZW1lbnRzIGNhbiBiZSBzcGVjaWZpZWQgdXNpbmcgdGhlCiBkaXJlY3RpdmVzIFxmSXJvdXNlclxmUi9cZklyd3VzZXJcZlIgKGZvciBTTk1QdjMpIG9yCiBcZklyb2NvbW11bml0eVxmUi9cZklyd2NvbW11bml0eVxmUiAoZm9yIFNOTVB2MSBvciBTTk1QdjJjKS4KLS5JUCAicm91c2VyIFVTRVIgW25vYXV0aHxhdXRofHByaXYgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCi0uSVAgInJ3dXNlciBVU0VSIFtub2F1dGh8YXV0aHxwcml2IFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJyb3VzZXIgW1wtcyBTRUNNT0RFTF0gVVNFUiBbbm9hdXRofGF1dGh8cHJpdiBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgInJ3dXNlciBbXC1zIFNFQ01PREVMXSAgVVNFUiBbbm9hdXRofGF1dGh8cHJpdiBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCiBzcGVjaWZ5IGFuIFNOTVB2MyB1c2VyIHRoYXQgd2lsbCBiZSBhbGxvd2VkIHJlYWQtb25seSAoR0VUIGFuZCBHRVRORVhUKQogb3IgcmVhZC13cml0ZSAoR0VULCBHRVRORVhUIGFuZCBTRVQpIGFjY2VzcyByZXNwZWN0aXZlbHkuCiBCeSBkZWZhdWx0LCB0aGlzIHdpbGwgcHJvdmlkZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgT0lEIHRyZWUgZm9yIGF1dGhlbnRpY2F0ZWQKQEAgLTE5NCw4ICszNDAsMTUgQEAKIEFuIG9wdGlvbmFsIGNvbnRleHQgY2FuIGFsc28gYmUgc3BlY2lmaWVkLCBvciAiY29udGV4dCoiIHRvIGRlbm90ZSBhIGNvbnRleHQKIHByZWZpeC4gIElmIG5vIGNvbnRleHQgZmllbGQgaXMgc3BlY2lmaWVkIChvciB0aGUgdG9rZW4gIioiIGlzIHVzZWQpLCB0aGUKIGRpcmVjdGl2ZSB3aWxsIG1hdGNoIGFsbCBwb3NzaWJsZSBjb250ZXh0cy4KLS5JUCAicm9jb21tdW5pdHkgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCi0uSVAgInJ3Y29tbXVuaXR5IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgorLklQCitJZiBTRUNNT0RFTCBpcyBzcGVjaWZpZWQgdGhlbiBpdCB3aWxsIGJlIHRoZSBzZWN1cml0eSBtb2RlbCByZXF1aXJlZAorZm9yIHRoYXQgdXNlciAobm90ZSB0aGF0IGlkZW50aWNhbCB1c2VyIG5hbWVzIG1heSBjb21lIGluIG92ZXIKK2RpZmZlcmVudCBzZWN1cml0eSBtb2RlbHMgYW5kIHdpbGwgYmUgYXBwcm9wcmlhdGVseSBzZXBhcmF0ZWQgdmlhIHRoZQorYWNjZXNzIGNvbnRyb2wgc2V0dGluZ3MpLiAgVGhlIGRlZmF1bHQgc2VjdXJpdHkgbW9kZWwgaXMgInVzbSIgYW5kIHRoZQorb3RoZXIgY29tbW9uIHNlY3VyaXR5IG1vZGVscyBhcmUgbGlrZWx5ICJ0c20iIHdoZW4gdXNpbmcgKEQpVExTIG9yIFNTSAorc3VwcG9ydCBhbmQgImtzbSIgaWYgdGhlIEtlcmJlcm9zIHN1cHBvcnQgaGFzIGJlZW4gY29tcGlsZWQgaW4uCisuSVAgInJvY29tbXVuaXR5IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCBcLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAicndjb21tdW5pdHkgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgogc3BlY2lmeSBhbiBTTk1QdjEgb3IgU05NUHYyYyBjb21tdW5pdHkgdGhhdCB3aWxsIGJlIGFsbG93ZWQgcmVhZC1vbmx5CiAoR0VUIGFuZCBHRVRORVhUKSBvciByZWFkLXdyaXRlIChHRVQsIEdFVE5FWFQgYW5kIFNFVCkgYWNjZXNzIHJlc3BlY3RpdmVseS4KIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBwcm92aWRlIGFjY2VzcyB0byB0aGUgZnVsbCBPSUQgdHJlZSBmb3Igc3VjaCByZXF1ZXN0cywKQEAgLTIwNSw4ICszNTgsOCBAQAogdGhhdCBjb21tdW5pdHkgdG8gdGhlIHN1YnRyZWUgcm9vdGVkIGF0IHRoZSBnaXZlbiBPSUQsIG9yIG5hbWVkIHZpZXcuCiBDb250ZXh0cyBhcmUgdHlwaWNhbGx5IGxlc3MgcmVsZXZhbnQgdG8gY29tbXVuaXR5LWJhc2VkIFNOTVAgdmVyc2lvbnMsCiBidXQgdGhlIHNhbWUgYmVoYXZpb3VyIGFwcGxpZXMgaGVyZS4KLS5JUCAicm9jb21tdW5pdHk2IENPTU1VTklUWSBbU09VUkNFIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgotLklQICJyd2NvbW11bml0eTYgQ09NTVVOSVRZIFtTT1VSQ0UgW09JRCB8IC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgInJvY29tbXVuaXR5NiBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCisuSVAgInJ3Y29tbXVuaXR5NiBDT01NVU5JVFkgW1NPVVJDRSBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCiBhcmUgZGlyZWN0aXZlcyByZWxhdGluZyB0byByZXF1ZXN0cyByZWNlaXZlZCB1c2luZyBJUHY2CiAoaWYgdGhlIGFnZW50IHN1cHBvcnRzIHN1Y2ggdHJhbnNwb3J0IGRvbWFpbnMpLgogVGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBTT1VSQ0UsIE9JRCwgVklFVyBhbmQgQ09OVEVYVCB0b2tlbnMgYXJlIGV4YWN0bHkKQEAgLTIyOCwxMCArMzgxLDEwIEBACiBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZXMuCiAuU1MgVkFDTSBDb25maWd1cmF0aW9uCiBUaGUgZnVsbCBmbGV4aWJpbGl0eSBvZiB0aGUgVkFDTSBpcyBhdmFpbGFibGUgdXNpbmcgZm91ciBjb25maWd1cmF0aW9uCi1kaXJlY3RpdmVzIC0gXGZJY29tMnNlY1xmUiwgXGZJZ3JvdXBcZlIsIFxmSXZpZXdcZlIgYW5kIFxmSWFjY2Vzc1xmUi4KK2RpcmVjdGl2ZXMgXC0gXGZJY29tMnNlY1xmUiwgXGZJZ3JvdXBcZlIsIFxmSXZpZXdcZlIgYW5kIFxmSWFjY2Vzc1xmUi4KIFRoZXNlIHByb3ZpZGUgZGlyZWN0IGNvbmZpZ3VyYXRpb24gb2YgdGhlIHVuZGVybHlpbmcgVkFDTSB0YWJsZXMuCi0uSVAgImNvbTJzZWMgIFstQ24gQ09OVEVYVF0gU0VDTkFNRSBTT1VSQ0UgQ09NTVVOSVRZIgotLklQICJjb20yc2VjNiBbLUNuIENPTlRFWFRdIFNFQ05BTUUgU09VUkNFIENPTU1VTklUWSIKKy5JUCAiY29tMnNlYyAgW1wtQ24gQ09OVEVYVF0gU0VDTkFNRSBTT1VSQ0UgQ09NTVVOSVRZIgorLklQICJjb20yc2VjNiBbXC1DbiBDT05URVhUXSBTRUNOQU1FIFNPVVJDRSBDT01NVU5JVFkiCiBtYXAgYW4gU05NUHYxIG9yIFNOTVB2MmMgY29tbXVuaXR5IHN0cmluZyB0byBhIHNlY3VyaXR5IG5hbWUgLSBlaXRoZXIgZnJvbQogYSBwYXJ0aWN1bGFyIHJhbmdlIG9mIHNvdXJjZSBhZGRyZXNzZXMsIG9yIGdsb2JhbGx5IChcZkkiZGVmYXVsdCJcZlIpLgogQSByZXN0cmljdGVkIHNvdXJjZSBjYW4gZWl0aGVyIGJlIGEgc3BlY2lmaWMgaG9zdG5hbWUgKG9yIGFkZHJlc3MpLCBvcgpAQCAtMjQzLDEyICszOTYsMTIgQEAKIGNvbWJpbmF0aW9uIHRoYXQgbWF0Y2hlcyB0aGUgaW5jb21pbmcgcmVxdWVzdCB3aWxsIGJlIHNlbGVjdGVkLgogVmFyaW91cyBzb3VyY2UvY29tbXVuaXR5IGNvbWJpbmF0aW9ucyBjYW4gYWxzbyBtYXAgdG8gdGhlIHNhbWUgc2VjdXJpdHkgbmFtZS4KIC5JUAotSWYgYSBDT05URVhUIGlzIHNwZWNpZmllZCAodXNpbmcgXGZJLUNuXGZSKSwgdGhlIGNvbW11bml0eSBzdHJpbmcgd2lsbCBiZQorSWYgYSBDT05URVhUIGlzIHNwZWNpZmllZCAodXNpbmcgXGZJXC1DblxmUiksIHRoZSBjb21tdW5pdHkgc3RyaW5nIHdpbGwgYmUKIG1hcHBlZCB0byBhIHNlY3VyaXR5IG5hbWUgaW4gdGhlIG5hbWVkIFNOTVB2MyBjb250ZXh0LiBPdGhlcndpc2UgdGhlCiBkZWZhdWx0IGNvbnRleHQgKCIiKSB3aWxsIGJlIHVzZWQuCi0uSVAgImNvbTJzZWN1bml4IFstQ24gQ09OVEVYVF0gU0VDTkFNRSBTT0NLUEFUSCBDT01NVU5JVFkiCisuSVAgImNvbTJzZWN1bml4IFtcLUNuIENPTlRFWFRdIFNFQ05BTUUgU09DS1BBVEggQ09NTVVOSVRZIgogaXMgdGhlIFVuaXggZG9tYWluIHNvY2tldHMgdmVyc2lvbiBvZiBcZkljb20yc2VjXGZSLgotLklQICJncm91cCBHUk9VUCB7djF8djJjfHVzbX0gU0VDTkFNRSIKKy5JUCAiZ3JvdXAgR1JPVVAge3YxfHYyY3x1c218dHNtfGtzbX0gU0VDTkFNRSIKIG1hcHMgYSBzZWN1cml0eSBuYW1lIChpbiB0aGUgc3BlY2lmaWVkIHNlY3VyaXR5IG1vZGVsKSBpbnRvCiBhIG5hbWVkIGdyb3VwLiAgU2V2ZXJhbCBcZklncm91cFxmUiBkaXJlY3RpdmVzIGNhbiBzcGVjaWZ5IHRoZQogc2FtZSBncm91cCBuYW1lLCBhbGxvd2luZyBhIHNpbmdsZSBhY2Nlc3Mgc2V0dGluZyB0byBhcHBseSB0byBzZXZlcmFsIApAQCAtMjkzLDcgKzQ0Niw3IEBACiAuSVAKIE5vdGUgdGhhdCBhIG1hc2sgbG9uZ2VyIHRoYW4gOCBiaXRzIG11c3QgdXNlICc6JyB0byBzZXBhcmF0ZSB0aGUgaW5kaXZpZHVhbAogb2N0ZXRzLgotLklQICJhY2Nlc3MgR1JPVVAgQ09OVEVYVCB7YW55fHYxfHYyY3x1c219IExFVkVMIFBSRUZYIFJFQUQgV1JJVEUgTk9USUZZIgorLklQICJhY2Nlc3MgR1JPVVAgQ09OVEVYVCB7YW55fHYxfHYyY3x1c218dHNtfGtzbX0gTEVWRUwgUFJFRlggUkVBRCBXUklURSBOT1RJRlkiCiBtYXBzIGZyb20gYSBncm91cCBvZiB1c2Vycy9jb21tdW5pdGllcyAod2l0aCBhIHBhcnRpY3VsYXIgc2VjdXJpdHkgbW9kZWwKIGFuZCBtaW5pbXVtIHNlY3VyaXR5IGxldmVsLCBhbmQgaW4gYSBzcGVjaWZpYyBjb250ZXh0KSB0byBvbmUgb2YgdGhyZWUgdmlld3MsCiBkZXBlbmRpbmcgb24gdGhlIHJlcXVlc3QgYmVpbmcgcHJvY2Vzc2VkLgpAQCAtMzEyLDcgKzQ2NSw3IEBACiBjb25jZXJuZWQsIHRoZSB0d28gbWFpbiB2aWV3IHR5cGVzIGFyZSBcZklyZWFkXGZSIGFuZCBcZkl3cml0ZVxmUiwKIGNvcnJlc3BvbmRpbmcgdG8gdGhlIFJFQUQgYW5kIFdSSVRFIHZpZXdzIG9mIHRoZSBtYWluIFxmSWFjY2Vzc1xmUiBkaXJlY3RpdmUuCiBTZWUgdGhlICdzbm1wdHJhcGQuY29uZig1KScgbWFuIHBhZ2UgZm9yIGRpc2N1c3Npb24gb2Ygb3RoZXIgdmlldyB0eXBlcy4KLS5JUCAiYXV0aGNvbW11bml0eSBUWVBFUyAgQ09NTVVOSVRZICAgW1NPVVJDRSBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAiYXV0aGNvbW11bml0eSBUWVBFUyAgQ09NTVVOSVRZICAgW1NPVVJDRSBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCiBpcyBhbiBhbHRlcm5hdGl2ZSB0byB0aGUgXGZJcm9jb21tdW5pdHlcZlIvXGZJcndjb21tdW5pdHlcZlIgZGlyZWN0aXZlcy4KIFRZUEVTIHdpbGwgdXN1YWxseSBiZSBcZklyZWFkXGZSIG9yIFxmSXJlYWQsd3JpdGVcZlIgcmVzcGVjdGl2ZWx5LgogVGhlIHZpZXcgc3BlY2lmaWNhdGlvbiBjYW4gZWl0aGVyIGJlIGFuIE9JRCBzdWJ0cmVlIChhcyBiZWZvcmUpLApAQCAtMzIxLDIwICs0NzQsMjAgQEAKIHRoZW4gYWNjZXNzIHdpbGwgYmUgYWxsb3dlZCB0byB0aGUgZnVsbCBPSUQgdHJlZS4KIElmIENPTlRFWFQgaXMgc3BlY2lmaWVkLCBhY2Nlc3MgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhpcyBTTk1QdjMgY29udGV4dC4KIE90aGVyd2lzZSB0aGUgZGVmYXVsdCBjb250ZXh0ICgiIikgaXMgdXNlZC4KLS5JUCAiYXV0aHVzZXIgICBUWVBFUyBbLXMgTU9ERUxdIFVTRVIgIFtMRVZFTCBbT0lEIHwgLVYgVklFVyBbQ09OVEVYVF1dXSIKKy5JUCAiYXV0aHVzZXIgICBUWVBFUyBbXC1zIE1PREVMXSBVU0VSICBbTEVWRUwgW09JRCB8IFwtViBWSUVXIFtDT05URVhUXV1dIgogaXMgYW4gYWx0ZXJuYXRpdmUgdG8gdGhlIFxmSXJvdXNlclxmUi9cZklyd3VzZXJcZlIgZGlyZWN0aXZlcy4KIFRoZSBmaWVsZHMgVFlQRVMsIE9JRCwgVklFVyBhbmQgQ09OVEVYVCBoYXZlIHRoZSBzYW1lIG1lYW5pbmcgYXMgZm9yCiBcZklhdXRoY29tbXVuaXR5XGZSLgotLklQICJhdXRoZ3JvdXAgIFRZUEVTIFstcyBNT0RFTF0gR1JPVVAgW0xFVkVMIFtPSUQgfCAtViBWSUVXIFtDT05URVhUXV1dIgorLklQICJhdXRoZ3JvdXAgIFRZUEVTIFtcLXMgTU9ERUxdIEdST1VQIFtMRVZFTCBbT0lEIHwgXC1WIFZJRVcgW0NPTlRFWFRdXV0iCiBpcyBhIGNvbXBhbmlvbiB0byB0aGUgXGZJYXV0aHVzZXJcZlIgZGlyZWN0aXZlLCBzcGVjaWZ5aW5nIGFjY2VzcwogZm9yIGEgcGFydGljdWxhciBncm91cCAoZGVmaW5lZCB1c2luZyB0aGUgXGZJZ3JvdXBcZlIgZGlyZWN0aXZlIGFzIHVzdWFsKS4KIEJvdGggXGZJYXV0aHVzZXJcZlIgYW5kIFxmSWF1dGhncm91cFxmUiBkZWZhdWx0IHRvIGF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMgLQogTEVWRUwgY2FuIGFsc28gYmUgc3BlY2lmaWVkIGFzIFxmSW5vYXV0aFxmUiBvciBcZklwcml2XGZSIHRvIGFsbG93CiB1bmF1dGhlbnRpY2F0ZWQgcmVxdWVzdHMsIG9yIHJlcXVpcmUgZW5jcnlwdGlvbiByZXNwZWN0aXZlbHkuCiBCb3RoIFxmSWF1dGh1c2VyXGZSIGFuZCBcZklhdXRoZ3JvdXBcZlIgZGlyZWN0aXZlcyBhbHNvIGRlZmF1bHQgdG8gY29uZmlndXJpbmcKLWFjY2VzcyBmb3IgU05NUHYzL1VTTSByZXF1ZXN0cyAtIHVzZSB0aGUgJy1zJyBmbGFnIHRvIHNwZWNpZnkgYW4gYWx0ZXJuYXRpdmUKK2FjY2VzcyBmb3IgU05NUHYzL1VTTSByZXF1ZXN0cyAtIHVzZSB0aGUgJ1wtcycgZmxhZyB0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlCiBzZWN1cml0eSBtb2RlbCAodXNpbmcgdGhlIHNhbWUgdmFsdWVzIGFzIGZvciBcZklhY2Nlc3NcZlIgYWJvdmUpLgotLklQICJhdXRoYWNjZXNzIFRZUEVTIFstcyBNT0RFTF0gR1JPVVAgVklFVyBbTEVWRUwgW0NPTlRFWFRdXSIKKy5JUCAiYXV0aGFjY2VzcyBUWVBFUyBbXC1zIE1PREVMXSBHUk9VUCBWSUVXIFtMRVZFTCBbQ09OVEVYVF1dIgogYWxzbyBjb25maWd1cmVzIHRoZSBhY2Nlc3MgZm9yIGEgcGFydGljdWxhciBncm91cCwKIHNwZWNpZnlpbmcgdGhlIG5hbWUgYW5kIHR5cGUgb2YgdmlldyB0byBhcHBseS4gVGhlIE1PREVMIGFuZCBMRVZFTCBmaWVsZHMKIGFyZSBpbnRlcnByZXRlZCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIFxmSWF1dGhncm91cFxmUi4KQEAgLTM2MCw3ICs1MTMsNyBAQAogLklQICJzeXNOYW1lIFNUUklORyIKIHNldCB0aGUgc3lzdGVtIGxvY2F0aW9uLCBzeXN0ZW0gY29udGFjdCBvciBzeXN0ZW0gbmFtZQogKFxmQ3N5c0xvY2F0aW9uLjBcZlIsIFxmQ3N5c0NvbnRhY3QuMFxmUiBhbmQgXGZDc3lzTmFtZS4wXGZSKSBmb3IgdGhlIGFnZW50IHJlc3BlY3RpdmVseS4KLU9yZGluYXJpbHkgdGhlc2Ugb2JqZWN0cyBhcmUgd3JpdGVhYmxlIHZpYSBzdWl0YWJseSBhdXRob3JpemVkIFNOTVAgU0VUCitPcmRpbmFyaWx5IHRoZXNlIG9iamVjdHMgYXJlIHdyaXRhYmxlIHZpYSBzdWl0YWJseSBhdXRob3JpemVkIFNOTVAgU0VUCiByZXF1ZXN0cy4gIEhvd2V2ZXIsIHNwZWNpZnlpbmcgb25lIG9mIHRoZXNlIGRpcmVjdGl2ZXMgbWFrZXMgdGhlCiBjb3JyZXNwb25kaW5nIG9iamVjdCByZWFkLW9ubHksIGFuZCBhdHRlbXB0cyB0byBTRVQgaXQgd2lsbCByZXN1bHQgaW4KIGEgXGZJbm90V3JpdGFibGVcZlIgZXJyb3IgcmVzcG9uc2UuCkBAIC0zNzgsOCArNTMxLDIwIEBACiAuSVAgImludGVyZmFjZSBOQU1FIFRZUEUgU1BFRUQiCiBjYW4gYmUgdXNlZCB0byBwcm92aWRlIGFwcHJvcHJpYXRlIHR5cGUgYW5kIHNwZWVkIHNldHRpbmdzIGZvcgogaW50ZXJmYWNlcyB3aGVyZSB0aGUgYWdlbnQgZmFpbHMgdG8gZGV0ZXJtaW5lIHRoaXMgaW5mb3JtYXRpb24gY29ycmVjdGx5LgotVFlQRSBpcyBhIHR5cGUgdmFsdWUgYXMgZ2l2ZW4gaW4gdGhlIElBTkFpZlR5cGUtTUlCLAorVFlQRSBpcyBhIHR5cGUgdmFsdWUgYXMgZ2l2ZW4gaW4gdGhlIElBTkFpZlR5cGVcLU1JQiwKIGFuZCBjYW4gYmUgc3BlY2lmaWVkIG51bWVyaWNhbGx5IG9yIGJ5IG5hbWUgKGFzc3VtaW5nIHRoaXMgTUlCIGlzIGxvYWRlZCkuCisuSVAgImludGVyZmFjZV9mYWRlb3V0IFRJTUVPVVQiCitzcGVjaWZpZXMsIGZvciBob3cgbG9uZyB0aGUgYWdlbnQga2VlcHMgZW50cmllcyBpbiBcZkNpZlRhYmxlXGZSIGFmdGVyCithcHByb3ByaWF0ZSBpbnRlcmZhY2VzIGhhdmUgYmVlbiByZW1vdmVkIGZyb20gc3lzdGVtICh0eXBpY2FsbHkgdmFyaW91cyBwcHAsCit0YXAgb3IgdHVuIGludGVyZmFjZXMpLiBUaW1lb3V0IHZhbHVlIGlzIGluIHNlY29uZHMuIERlZmF1bHQgdmFsdWUgaXMgMzAwCisoPTUgbWludXRlcykuCisuSVAgImludGVyZmFjZV9yZXBsYWNlX29sZCB5ZXMiCitjYW4gYmUgdXNlZCB0byByZW1vdmUgYWxyZWFkeSBleGlzdGluZyBlbnRyaWVzIGluIFxmQ2lmVGFibGVcZlIgd2hlbiBhbgoraW50ZXJmYWNlIHdpdGggdGhlIHNhbWUgbmFtZSBhcHBlYXJzIG9uIHRoZSBzeXN0ZW0uIEUuZy4gd2hlbiBwcHAwIGludGVyZmFjZQoraXMgcmVtb3ZlZCwgaXQgaXMgc3RpbGwgbGlzdGVkIGluIHRoZSB0YWJsZSBmb3IgXGZJaW50ZXJmYWNlX2ZhZGVvdXRcZlIKK3NlY29uZHMuIFRoaXMgb3B0aW9uIGVuc3VyZXMsIHRoYXQgdGhlIG9sZCBwcHAwIGludGVyZmFjZSBpcyByZW1vdmVkIGV2ZW4KK2JlZm9yZSB0aGUgXGZJaW50ZXJmYWNlX2ZhZGVvdXRcZlIgdGltZW91ciB3aGVuIG5ldyBwcHAwICh3aXRoIGRpZmZlcmVudAorXGZDaWZJbmRleFxmUikgc2hvd3MgdXAuCiAuU1MgSG9zdCBSZXNvdXJjZXMgR3JvdXAKIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCiBcZklob3N0XGZSIG1vZHVsZSAod2hpY2ggaXMgbm93IGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgCkBAIC00MTksMTMgKzU4NCwzMiBAQAogYXMgJ0ZpeGVkIERpc2tzJywgYW5kIHRoaXMgaXMgc3RpbGwgdGhlIGRlZmF1bHQgYmVoYXZpb3VyLgogU2V0dGluZyB0aGlzIGRpcmVjdGl2ZSB0byAnMScgcmVwb3J0cyBzdWNoIGZpbGUgc3lzdGVtcyBhcwogXCdOZXR3b3JrIERpc2tzJywgYXMgcmVxdWlyZWQgYnkgdGhlIEhvc3QgUmVzb3VyY2VzIE1JQi4KKy5JUCAicmVhbFN0b3JhZ2VVbml0cyIKK2NvbnRyb2xscyBob3cgdGhlIGFnZW50IHJlcG9ydHMgaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzLCBoclN0b3JhZ2VTaXplIGFuZAoraHJTdG9yYWdlVXNlZCBpbiBoclN0b3JhZ2VUYWJsZS4KK0ZvciBiaWcgc3RvcmFnZSBkcml2ZXMgd2l0aCBzbWFsbCBhbGxvY2F0aW9uIHVuaXRzIHRoZSBhZ2VudCByZS1jYWxjdWxhdGVzCit0aGVzZSB2YWx1ZXMgc28gdGhleSBhbGwgZml0IEludGVnZXIzMiBhbmQKK2hyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyB4IGhyU3RvcmFnZVNpemUKK2dpdmVzIHJlYWwgc2l6ZSBvZiB0aGUgc3RvcmFnZS4KKy5SUworLklQICJFeGFtcGxlOiIKK0xpbnV4IHhmcyAxNlRCIGZpbGVzeXN0ZW0gd2l0aCA0MDk2IGJ5dGVzIGxhcmdlIGJsb2NrcyB3aWxsIGJlCityZXBvcnRlZCBhcyAgaHJTdG9yYWdlQWxsb2NhdGlvblVuaXRzID0gODE5MiBhbmQgaHJTdG9yYWdlU2l6ZSA9IDIxNDc0ODM2NDcsCitzbyA4MTkyIHggMjE0NzQ4MzY0NyBnaXZlcyByZWFsIHNpemUgb2YgdGhlIGZpbGVzeXN0ZW0gKD0xNiBUQikuCisuUkUKKy5JUAorU2V0dGluZyB0aGlzIGRpcmVjdGl2ZSB0byAnMScgdHVybnMgb2ZmCit0aGlzIGNhbGN1bGF0aW9uIGFuZCB0aGUgYWdlbnQgcmVwb3J0cyByZWFsIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cywgYnV0IGl0CittaWdodCByZXBvcnQgd3JvbmcgaHJTdG9yYWdlU2l6ZSBmb3IgYmlnIGRyaXZlcyBiZWNhdXNlIHRoZSB2YWx1ZSB3b24ndCBmaXQgaW50bworSW50ZWdlcjMyLiBJbiB0aGlzIGNhc2UsIGhyU3RvcmFnZUFsbG9jYXRpb25Vbml0cyB4IGhyU3RvcmFnZVNpemUgd29uJ3QgZ2l2ZQorcmVhbCBzaXplIG9mIHRoZSBzdG9yYWdlLgogLlNTIFByb2Nlc3MgTW9uaXRvcmluZyAKIFRoZSBcZkNoclNXUnVuXGZSIGdyb3VwIG9mIHRoZSBIb3N0IFJlc291cmNlcyBNSUIgcHJvdmlkZXMKIGluZm9ybWF0aW9uIGFib3V0IGluZGl2aWR1YWwgcHJvY2Vzc2VzIHJ1bm5pbmcgb24gdGhlIGxvY2FsIHN5c3RlbS4KLVRoZSBcZkNwclRhYmxlXGZSIG9mIHRoZSBVQ0QtU05NUC1NSUIgY29tcGxlbWVudHMgdGhpcyBieSByZXBvcnRpbmcKK1RoZSBcZkNwclRhYmxlXGZSIG9mIHRoZSBVQ0RcLVNOTVBcLU1JQiBjb21wbGVtZW50cyB0aGlzIGJ5IHJlcG9ydGluZwogb24gc2VsZWN0ZWQgc2VydmljZXMgKHdoaWNoIG1heSBpbnZvbHZlIG11bHRpcGxlIHByb2Nlc3NlcykuCiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQotXGZJdWNkLXNubXAvcHJvY1xmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCitcZkl1Y2RcLXNubXAvcHJvY1xmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCiBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgogLklQICJwcm9jIE5BTUUgW01BWCBbTUlOXV0iCiBtb25pdG9ycyB0aGUgbnVtYmVyIG9mIHByb2Nlc3NlcyBjYWxsZWQgTkFNRSAoYXMgcmVwb3J0ZWQgYnkgUFNDTUQpCkBAIC00NDEsOSArNjI1LDEyIEBACiB0aGUgcHJvYmxlbSAtIHNlZSB0aGUgRGlzTWFuIEV2ZW50IE1JQiBzZWN0aW9uIGxhdGVyLgogLlJFCiAuSVAKLUlmIG5laXRoZXIgTUFYIG5vciBNSU4gYXJlIHNwZWNpZmllZCAob3IgYXJlIGJvdGggMCksIHRoZXkgd2lsbAorSWYgbmVpdGhlciBNQVggbm9yIE1JTiBhcmUgc3BlY2lmaWVkLCB0aGV5IHdpbGwKIGRlZmF1bHQgdG8gXGZCaW5maW5pdHlcZlIgYW5kIDEgcmVzcGVjdGl2ZWx5ICgiYXQgbGVhc3Qgb25lIikuCiBJZiBvbmx5IE1BWCBpcyBzcGVjaWZpZWQsIE1JTiB3aWxsIGRlZmF1bHQgdG8gMCAoIm5vIG1vcmUgdGhhbiBNQVgiKS4KK0lmIE1BWCBpcyAwIChhbmQgTUlOIGlzIG5vdCksIHRoaXMgaW5kaWNhdGVzIGluZmluaXR5ICgiYXQgbGVhc3QgTUlOIikuCitJZiBib3RoIE1BWCBhbmQgTUlOIGFyZSAwLCB0aGlzIGluZGljYXRlcyBhIHByb2Nlc3MgdGhhdCBzaG91bGQgXGZCbm90XGZQCitiZSBydW5uaW5nLgogLklQICJwcm9jZml4IE5BTUUgUFJPRyBBUkdTIgogcmVnaXN0ZXJzIGEgY29tbWFuZCB0aGF0IGNhbiBiZSBydW4gdG8gZml4IGVycm9ycyB3aXRoIHRoZSBnaXZlbgogcHJvY2VzcyBOQU1FLiAgVGhpcyB3aWxsIGJlIGludm9rZWQgd2hlbiB0aGUgY29ycmVzcG9uZGluZwpAQCAtNDYxLDcgKzY0OCw3IEBACiBcZkNwclRhYmxlXGZSIHdpbGwgZmFpbCAoXGZJbm9TdWNoT2JqZWN0XGZJKS4KIC5TUyBEaXNrIFVzYWdlIE1vbml0b3JpbmcKIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCi1cZkl1Y2Qtc25tcC9kaXNrXGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKK1xmSXVjZFwtc25tcC9kaXNrXGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCiAuSVAgImRpc2sgUEFUSCBbIE1JTlNQQUNFIHwgTUlOUEVSQ0VOVCUgXSIKIG1vbml0b3JzIHRoZSBkaXNrIG1vdW50ZWQgYXQgUEFUSCBmb3IgYXZhaWxhYmxlIGRpc2sgc3BhY2UuCkBAIC01MDUsOSArNjkyLDMxIEBACiAuUFAKIElmIG5laXRoZXIgYW55IFxmSWRpc2tcZlIgZGlyZWN0aXZlcyBvciBcZklpbmNsdWRlQWxsRGlza3NcZlIgYXJlIGRlZmluZWQsCiB0aGVuIHdhbGtpbmcgdGhlIFxmQ2Rza1RhYmxlXGZSIHdpbGwgZmFpbCAoXGZJbm9TdWNoT2JqZWN0XGZJKS4KKy5TUyBEaXNrIEkvTyBNb25pdG9yaW5nCitUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQorXGZJdWNkXC1zbm1wL2Rpc2tpb1xmUiBtb2R1bGUgKHdoaWNoIGlzIG5vdCBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZQorZGVmYXVsdCBidWlsZCBjb25maWd1cmF0aW9uKS4KKy5QUAorQnkgZGVmYXVsdCwgYWxsIGJsb2NrIGRldmljZXMga25vd24gdG8gdGhlIG9wZXJhdGluZyBzeXN0ZW0gYXJlCitpbmNsdWRlZCBpbiB0aGUgZGlza0lPVGFibGUuIE9uIHBsYXRmb3JtcyBvdGhlciB0aGFuIExpbnV4LCB0aGlzIG1vZHVsZQoraGFzIG5vIGNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcy4KKy5QUAorT24gTGludXggc3lzdGVtcywgaXQgaXMgcG9zc2libGUgdG8gZXhjbHVkZSBzZXZlcmFsIGNsYXNzZXMgb2YgYmxvY2sKK2RldmljZXMgZnJvbSB0aGUgZGlza0lPVGFibGUgaW4gb3JkZXIgdG8gYXZvaWQgY2x1dHRlcmluZyB0aGUgdGFibGUgd2l0aAordXNlbGVzcyB6ZXJvIHN0YXRpc3RpY3MgZm9yIHBzZXVkby1kZXZpY2VzIHRoYXQgb2Z0ZW4gYXJlIG5vdCBpbiB1c2UgYnV0CithcmUgY29uZmlndXJlZCBieSBkZWZhdWx0IHRvIGV4aXN0IGluIG1vc3QgcmVjZW50IExpbnV4IGRpc3RyaWJ1dGlvbnMuCisuSVAgImRpc2tpb19leGNsdWRlX2ZkIHllcyIKK0V4Y2x1ZGVzIGFsbCBMaW51eCBmbG9wcHkgZGlzayBibG9jayBkZXZpY2VzLCB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJmZCIsCitlLmcuICJmZDAiCisuSVAgImRpc2tpb19leGNsdWRlX2xvb3AgeWVzIgorRXhjbHVkZXMgYWxsIExpbnV4IGxvb3BiYWNrIGJsb2NrIGRldmljZXMsIHdob3NlIG5hbWVzIHN0YXJ0IHdpdGggImxvb3AiLAorZS5nLiAibG9vcDAiCisuSVAgImRpc2tpb19leGNsdWRlX3JhbSB5ZXMiCitFeGNsdWRlcyBhbGwgTEludXggcmFtZGlzayBibG9jayBkZXZpY2VzLCB3aG9zZSBuYW1lcyBzdGFydCB3aXRoICJyYW0iLCBlLmcuCisicmFtMCIKIC5TUyBTeXN0ZW0gTG9hZCBNb25pdG9yaW5nCiBUaGlzIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIGVpdGhlciB0aGUKLVxmSXVjZC1zbm1wL2xvYWRhdmVcZlIgbW9kdWxlIG9yIHRoZSBcZkl1Y2Qtc25tcC9tZW1vcnlcZlIgbW9kdWxlCitcZkl1Y2RcLXNubXAvbG9hZGF2ZVxmUiBtb2R1bGUgb3IgdGhlIFxmSXVjZFwtc25tcC9tZW1vcnlcZlIgbW9kdWxlCiByZXNwZWN0aXZlbHkgKGJvdGggb2Ygd2hpY2ggYXJlIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCiBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgogLklQICJsb2FkIE1BWDEgW01BWDUgW01BWDE1XV0iCkBAIC01MzQsNyArNzQzLDcgQEAKIC5QUAogVW5saWtlIHRoZSBcZklwcm9jXGZSIGFuZCBcZklkaXNrXGZSIGRpcmVjdGl2ZXMsIHdhbGtpbmcgdGhlCiB3YWxraW5nIHRoZSBcZkNsYVRhYmxlXGZSIHdpbGwgc3VjY2VlZCAoYXNzdW1pbmcgdGhlCi1cZkl1Y2Qtc25tcC9sb2FkYXZlXGZSIG1vZHVsZSB3YXMgY29uZmlndXJlZCBpbnRvIHRoZSBhZ2VudCksCitcZkl1Y2RcLXNubXAvbG9hZGF2ZVxmUiBtb2R1bGUgd2FzIGNvbmZpZ3VyZWQgaW50byB0aGUgYWdlbnQpLAogZXZlbiBpZiB0aGUgXGZJbG9hZFxmUiBkaXJlY3RpdmUgaXMgbm90IHByZXNlbnQuCiAuSVAgInN3YXAgTUlOICIKIG1vbml0b3JzIHRoZSBhbW91bnQgb2Ygc3dhcCBzcGFjZSBhdmFpbGFibGUgb24gdGhlIGxvY2FsIHN5c3RlbS4KQEAgLTU0OSw3ICs3NTgsNyBAQAogSWYgdGhpcyBkaXJlY3RpdmUgaXMgbm90IHNwZWNpZmllZCwgdGhlIGRlZmF1bHQgdGhyZXNob2xkIGlzIDE2IE1CLgogLlNTIExvZyBGaWxlIE1vbml0b3JpbmcKIFRoaXMgcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgZWl0aGVyIHRoZQotXGZJdWNkLXNubXAvZmlsZVxmUiBvciBcZkl1Y2Qtc25tcC9sb2dtYXRjaFxmUiBtb2R1bGVzIHJlc3BlY3RpdmVseQorXGZJdWNkXC1zbm1wL2ZpbGVcZlIgb3IgXGZJdWNkXC1zbm1wL2xvZ21hdGNoXGZSIG1vZHVsZXMgcmVzcGVjdGl2ZWx5CiAoYm90aCBvZiB3aGljaCBhcmUgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCiAuSVAgImZpbGUgRklMRSBbTUFYU0laRV0iCkBAIC01NzYsNyArNzg1LDcgQEAKIC5SUwogLklQIE5BTUUKIG5hbWUgb2YgdGhlIGxvZ21hdGNoIGluc3RhbmNlICh3aWxsIGFwcGVhciBhcyBsb2dNYXRjaE5hbWUgdW5kZXIKLWxvZ01hdGNoL2xvZ01hdGNoVGFibGUvbG9nTWF0Y2hFbnRyeS9sb2dNYXRjaE5hbWUgaW4gdGhlIHVjZC1zbm1wIE1JQiB0cmVlKQorbG9nTWF0Y2gvbG9nTWF0Y2hUYWJsZS9sb2dNYXRjaEVudHJ5L2xvZ01hdGNoTmFtZSBpbiB0aGUgdWNkXC1zbm1wIE1JQiB0cmVlKQogLklQIEZJTEUKIGFic29sdXRlIHBhdGggdG8gdGhlIGxvZ2ZpbGUgdG8gYmUgbW9uaXRvcmVkLiBOb3RlIHRoYXQgdGhpcyBwYXRoCiBjYW4gY29udGFpbiBkYXRlL3RpbWUgZGlyZWN0aXZlcyAobGlrZSBpbiB0aGUgVU5JWCAnZGF0ZScgY29tbWFuZCkuIFNlZSB0aGUKQEAgLTU5NCwxMiArODAzLDEyIEBACiBFeGFtcGxlOgogLlJTCiAuSVAKLWxvZ21hdGNoIGFwYWNoZS1HRVRzIC91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZy0lWS0lbS0lZCA2MCBHRVQuKkhUVFAuKgorbG9nbWF0Y2ggYXBhY2hlXC1HRVRzIC91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZ1wtJVlcLSVtXC0lZCA2MCBHRVQuKkhUVFAuKgogLklQCi1UaGlzIGxvZ21hdGNoIGluc3RhbmNlIGlzIG5hbWVkICdhcGFjaGUtR0VUcycsIHVzZXMgJ0dFVC4qSFRUUC4qJyBhcyBpdHMKK1RoaXMgbG9nbWF0Y2ggaW5zdGFuY2UgaXMgbmFtZWQgJ2FwYWNoZVwtR0VUcycsIHVzZXMgJ0dFVC4qSFRUUC4qJyBhcyBpdHMKIHJlZ3VsYXIgZXhwcmVzc2lvbiBhbmQgaXQgd2lsbCBtb25pdG9yIHRoZSBmaWxlIG5hbWVkCi0oYXNzdW1pbmcgdG9kYXkgaXMgTWF5IDZ0aCAyMDA5KTogJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzLmxvZy0yMDA5LTA1LTA2JywKLXRvbW9ycm93IGl0IHdpbGwgbG9vayBmb3IgJ2FjY2Vzcy5sb2ctMjAwOS0wNS0wNycuIFRoZSBsb2dmaWxlIGlzIHJlYWQgZXZlcnkgNjAKKyhhc3N1bWluZyB0b2RheSBpcyBNYXkgNnRoIDIwMDkpOiAnL3Vzci9sb2NhbC9hcGFjaGUvbG9ncy9hY2Nlc3MubG9nXC0yMDA5XC0wNVwtMDYnLAordG9tb3Jyb3cgaXQgd2lsbCBsb29rIGZvciAnYWNjZXNzLmxvZ1wtMjAwOVwtMDVcLTA3Jy4gVGhlIGxvZ2ZpbGUgaXMgcmVhZCBldmVyeSA2MAogc2Vjb25kcy4KIC5SRQogLklQCkBAIC02NTQsMTIgKzg2MywxMiBAQAogLkkgIlNOTVBDTURfQVJHUyIKIHNob3VsZCBiZSB0aGUgY29tbWFuZC1saW5lIG9wdGlvbnMgcmVxdWlyZWQgZm9yIGFuIGVxdWl2YWxlbnQKIFxmSXNubXB0cmFwXGZSIChvciBcZklzbm1waW5mb3JtXGZSKSBjb21tYW5kIHRvIHNlbmQgdGhlIGRlc2lyZWQgbm90aWZpY2F0aW9uLgotVGhlIG9wdGlvbiBcZkktQ2lcZlIgY2FuIGJlIHVzZWQgKHdpdGggXGZJLXYyY1xmUiBvciBcZkktdjNcZlIpIHRvIGdlbmVyYXRlCitUaGUgb3B0aW9uIFxmSVwtQ2lcZlIgY2FuIGJlIHVzZWQgKHdpdGggXGZJXC12MmNcZlIgb3IgXGZJXC12M1xmUikgdG8gZ2VuZXJhdGUKIGFuIElORk9STSBub3RpZmljYXRpb24gcmF0aGVyIHRoYW4gYW4gdW5hY2tub3dsZWRnZWQgVFJBUC4KIC5JUAogVGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgZGlyZWN0aXZlIGZvciBkZWZpbmluZyBTTk1QdjMgdHJhcCByZWNlaXZlcnMuCiBTZWUKLWh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsL3R1dG9yaWFsLTUvY29tbWFuZHMvc25tcHRyYXAtdjMuaHRtbAoraHR0cDovL3d3dy5uZXRcLXNubXAub3JnL3R1dG9yaWFsL3R1dG9yaWFsXC01L2NvbW1hbmRzL3NubXB0cmFwXC12My5odG1sCiBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBTTk1QdjMgbm90aWZpY2F0aW9uIGJlaGF2aW91ci4KIC5JUCAiYXV0aHRyYXBlbmFibGUgezF8Mn0iCiBkZXRlcm1pbmVzIHdoZXRoZXIgdG8gZ2VuZXJhdGUgYXV0aGVudGljYXRpb24gZmFpbHVyZSB0cmFwcwpAQCAtNjY4LDYgKzg3NywxMiBAQAogb2JqZWN0IChcZkNzbm1wRW5hYmxlQXV0aGVuVHJhcHMuMFxmUikgaXMgcmVhZC13cml0ZSwgYnV0IHNwZWNpZnlpbmcKIHRoaXMgZGlyZWN0aXZlIG1ha2VzIHRoaXMgb2JqZWN0IHJlYWQtb25seSwgYW5kIGF0dGVtcHRzIHRvIHNldCB0aGUKIHZhbHVlIHZpYSBTRVQgcmVxdWVzdHMgd2lsbCByZXN1bHQgaW4gYSBcZklub3RXcml0YWJsZVxmUiBlcnJvciByZXNwb25zZS4KKy5SRQorLklQICJ2MXRyYXBhZGRyZXNzIEhPU1QiCitkZWZpbmVzIHRoZSBhZ2VudCBhZGRyZXNzLCB3aGljaCBpcyBpbnNlcnRlZCBpbnRvIFNOTVB2MSBUUkFQcy4gQXJiaXRyYXJ5IGxvY2FsIAorSVB2NCBhZGRyZXNzIGlzIGNob3NlbiBpZiB0aGlzIG9wdGlvbiBpcyBvbW1pdGVkLiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgbWFpbmx5IAord2hlbiB0aGUgYWdlbnQgaXMgdmlzaWJsZSBmcm9tIG91dHNpZGUgd29ybGQgYnkgc3BlY2lmaWMgYWRkcmVzcyBvbmx5IChlLmcuIAorYmVjYXVzZSBvZiBuZXR3b3JrIGFkZHJlc3MgdHJhbnNsYXRpb24gb3IgZmlyZXdhbGwpLgogLlNTICJEaXNNYW4gRXZlbnQgTUlCIgogVGhlIHByZXZpb3VzIGRpcmVjdGl2ZXMgY2FuIGJlIHVzZWQgdG8gY29uZmlndXJlIHdoZXJlIHRyYXBzIHNob3VsZAogYmUgc2VudCwgYnV0IGFyZSBub3QgY29uY2VybmVkIHdpdGggXGZJd2hlblxmUiB0byBzZW5kIHN1Y2ggdHJhcHMKQEAgLTc1NSw0NyArOTcwLDQ5IEBACiBUaGVyZSBhcmUgdmFyaW91cyBvcHRpb25zIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW91ciBvZiB0aGUgbW9uaXRvcmVkCiBleHByZXNzaW9uLiAgVGhlc2UgaW5jbHVkZToKIC5SUwotLklQICItRCIKKy5JUCAiXC1EIgogaW5kaWNhdGVzIHRoYXQgdGhlIGV4cHJlc3Npb24gc2hvdWxkIGJlIGV2YWx1YXRlZCB1c2luZyBkZWx0YSBkaWZmZXJlbmNlcwogYmV0d2VlbiBzYW1wbGUgdmFsdWVzIChyYXRoZXIgdGhhbiB0aGUgdmFsdWVzIHRoZW1zZWx2ZXMpLgotLklQICItZCBPSUQiCi0uSVAgIi1kaSBPSUQiCisuSVAgIlwtZCBPSUQiCisuSVAgIlwtZGkgT0lEIgogc3BlY2lmaWVzIGEgZGlzY29udGludWl0eSBtYXJrZXIgZm9yIHZhbGlkYXRpbmcgZGVsdGEgZGlmZmVyZW5jZXMuCi1BIFxmSS1kaVxmUiBvYmplY3QgaW5zdGFuY2Ugd2lsbCBiZSB1c2VkIGV4YWN0bHkgYXMgZ2l2ZW4uCi1BIFxmSS1kXGZSIG9iamVjdCB3aWxsIGhhdmUgdGhlIGluc3RhbmNlIHN1YmlkZW50aWZpZXJzIGZyb20gdGhlCitBIFxmSVwtZGlcZlIgb2JqZWN0IGluc3RhbmNlIHdpbGwgYmUgdXNlZCBleGFjdGx5IGFzIGdpdmVuLgorQSBcZklcLWRcZlIgb2JqZWN0IHdpbGwgaGF2ZSB0aGUgaW5zdGFuY2Ugc3ViaWRlbnRpZmllcnMgZnJvbSB0aGUKIGNvcnJlc3BvbmRpbmcgKHdpbGRjYXJkZWQpIGV4cHJlc3Npb24gb2JqZWN0IGFwcGVuZGVkLgotSWYgdGhlIFxmSS1JXGZSIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UKK0lmIHRoZSBcZklcLUlcZlIgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZQogYmV0d2VlbiB0aGVzZSB0d28gb3B0aW9ucy4KIC5JUAotVGhpcyBvcHRpb24gYWxzbyBpbXBsaWVzIFxmSS1EXGZSLgotLklQICItZSBFVkVOVCIKK1RoaXMgb3B0aW9uIGFsc28gaW1wbGllcyBcZklcLURcZlIuCisuSVAgIlwtZSBFVkVOVCIKIHNwZWNpZmllcyB0aGUgZXZlbnQgdG8gYmUgaW52b2tlZCB3aGVuIHRoaXMgbW9uaXRvciBlbnRyeSBpcyB0cmlnZ2VyZWQuCiBJZiB0aGlzIG9wdGlvbiBpcyBub3QgZ2l2ZW4sIHRoZSBtb25pdG9yIGVudHJ5IHdpbGwgZ2VuZXJhdGUgb25lCi1vZiB0aGUgc3RhbmRhcmQgbm90aWZpY2F0aW9ucyBkZWZpbmVkIGluIHRoZSBESVNNQU4tRVZFTlQtTUlCLgotLklQICItSSIKK29mIHRoZSBzdGFuZGFyZCBub3RpZmljYXRpb25zIGRlZmluZWQgaW4gdGhlIERJU01BTlwtRVZFTlRcLU1JQi4KKy5JUCAiXC1JIgogaW5kaWNhdGVzIHRoYXQgdGhlIG1vbml0b3JlZCBleHByZXNzaW9uIHNob3VsZCBiZSBhcHBsaWVkIHRvIHRoZQogc3BlY2lmaWVkIE9JRCBhcyBhIHNpbmdsZSBpbnN0YW5jZS4gIEJ5IGRlZmF1bHQsIHRoZSBPSUQgd2lsbAogYmUgdHJlYXRlZCBhcyBhIHdpbGRjYXJkZWQgb2JqZWN0LCBhbmQgdGhlIG1vbml0b3IgZXhwYW5kZWQKIHRvIGNvdmVyIGFsbCBtYXRjaGluZyBpbnN0YW5jZXMuCi0uSVAgIi1pIE9JRCIKLS5JUCAiLW8gT0lEIgorLklQICJcLWkgT0lEIgorLklQICJcLW8gT0lEIgogZGVmaW5lIGFkZGl0aW9uYWwgdmFyYmluZHMgdG8gYmUgYWRkZWQgdG8gdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkCiB3aGVuIHRoaXMgbW9uaXRvciB0cmlnZ2VyIGZpcmVzLgogRm9yIGEgd2lsZGNhcmRlZCBleHByZXNzaW9uLCB0aGUgc3VmZml4IG9mIHRoZSBtYXRjaGVkIGluc3RhbmNlCi13aWxsIGJlIGFkZGVkIHRvIGFueSBPSURzIHNwZWNpZmllZCB1c2luZyBcZkktb1xmUiwgd2hpbGUgT0lEcwotc3BlY2lmaWVkIHVzaW5nIFxmSS1pXGZSIHdpbGwgYmUgdHJlYXRlZCBhcyBleGFjdCBpbnN0YW5jZXMuCi1JZiB0aGUgXGZJLUlcZlIgZmxhZyBpcyBzcGVjaWZpZWQsIHRoZW4gdGhlcmUgaXMgbm8gZGlmZmVyZW5jZQord2lsbCBiZSBhZGRlZCB0byBhbnkgT0lEcyBzcGVjaWZpZWQgdXNpbmcgXGZJXC1vXGZSLCB3aGlsZSBPSURzCitzcGVjaWZpZWQgdXNpbmcgXGZJXC1pXGZSIHdpbGwgYmUgdHJlYXRlZCBhcyBleGFjdCBpbnN0YW5jZXMuCitJZiB0aGUgXGZJXC1JXGZSIGZsYWcgaXMgc3BlY2lmaWVkLCB0aGVuIHRoZXJlIGlzIG5vIGRpZmZlcmVuY2UKIGJldHdlZW4gdGhlc2UgdHdvIG9wdGlvbnMuCiAuSVAKIFNlZSBcZklzdHJpY3REaXNtYW5cZlIgZm9yIGRldGFpbHMgb2YgdGhlIG9yZGVyaW5nIG9mIG5vdGlmaWNhdGlvbiBwYXlsb2Fkcy4KLS5JUCAiLXIgRlJFUVVFTkNZIgotbW9uaXRvcnMgdGhlIGdpdmVuIGV4cHJlc3Npb24gZXZlcnkgRlJFUVVFTkNZIHNlY29uZHMuCi1CeSBkZWZhdWx0LCB0aGUgZXhwcmVzc2lvbiB3aWxsIGJlIGV2YWx1YXRlZCBldmVyeSA2MDBzICgxMCBtaW51dGVzKS4gCi0uSVAgIi1TIgorLklQICJcLXIgRlJFUVVFTkNZIgorbW9uaXRvcnMgdGhlIGdpdmVuIGV4cHJlc3Npb24gZXZlcnkgRlJFUVVFTkNZLCB3aGVyZSBGUkVRVUVOQ1kgaXMgaW4KK3NlY29uZHMgb3Igb3B0aW9uYWxseSBzdWZmaXhlZCBieSBvbmUgb2YgcyAoZm9yIHNlY29uZHMpLCBtIChmb3IKK21pbnV0ZXMpLCBoIChmb3IgaG91cnMpLCBkIChmb3IgZGF5cyksIG9yIHcgKGZvciB3ZWVrcykuICBCeSBkZWZhdWx0LAordGhlIGV4cHJlc3Npb24gd2lsbCBiZSBldmFsdWF0ZWQgZXZlcnkgNjAwcyAoMTAgbWludXRlcykuCisuSVAgIlwtUyIKIGluZGljYXRlcyB0aGF0IHRoZSBtb25pdG9yIGV4cHJlc3Npb24gc2hvdWxkIFxmSW5vdFxmUiBiZSBldmFsdWF0ZWQKIHdoZW4gdGhlIGFnZW50IGZpcnN0IHN0YXJ0cyB1cC4gIFRoZSBmaXJzdCBldmFsdWF0aW9uIHdpbGwgYmUgZG9uZQogb25jZSB0aGUgZmlyc3QgcmVwZWF0IGludGVydmFsIGhhcyBleHBpcmVkLgotLklQICItcyIKKy5JUCAiXC1zIgogaW5kaWNhdGVzIHRoYXQgdGhlIG1vbml0b3IgZXhwcmVzc2lvbiBcZklzaG91bGRcZlIgYmUgZXZhbHVhdGVkIHdoZW4gdGhlCiBhZ2VudCBmaXJzdCBzdGFydHMgdXAuICBUaGlzIGlzIHRoZSBkZWZhdWx0IGJlaGF2aW91ci4KIC5SUwpAQCAtODAzLDIwICsxMDIwLDIwIEBACiBOb3RpZmljYXRpb25zIHRyaWdnZXJlZCBieSB0aGlzIGluaXRpYWwgZXZhbHVhdGlvbiB3aWxsIGJlIHNlbnQKIFxmSWJlZm9yZVxmUiB0aGUgXGZDY29sZFN0YXJ0XGZSIHRyYXAuCiAuUkUKLS5JUCAiLXUgU0VDTkFNRSIKKy5JUCAiXC11IFNFQ05BTUUiCiBzcGVjaWZpZXMgYSBzZWN1cml0eSBuYW1lIHRvIHVzZSBmb3Igc2Nhbm5pbmcgdGhlIGxvY2FsIGhvc3QsCiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IFxmSWlxdWVyeVNlY05hbWVcZlIuCiBPbmNlIGFnYWluLCB0aGlzIHVzZXIgbXVzdCBiZSBleHBsaWNpdGx5IGNyZWF0ZWQgYW5kIGdpdmVuCiBzdWl0YWJsZSBhY2Nlc3MgcmlnaHRzLgogLlJFCi0uSVAgIm5vdGlmaWNhdGlvbkV2ZW50IEVOQU1FIE5PVElGSUNBVElPTiBbLW1dIFstaSBPSUQgfCAtbyBPSUQgXSoiCisuSVAgIm5vdGlmaWNhdGlvbkV2ZW50IEVOQU1FIE5PVElGSUNBVElPTiBbXC1tXSBbXC1pIE9JRCB8IFwtbyBPSUQgXSoiCiBkZWZpbmVzIGEgbm90aWZpY2F0aW9uIGV2ZW50IG5hbWVkIEVOQU1FLgogVGhpcyBjYW4gYmUgdHJpZ2dlcmVkIGZyb20gYSBnaXZlbiBcZkltb25pdG9yXGZSIGVudHJ5IGJ5IHNwZWNpZnlpbmcKLXRoZSBvcHRpb24gXGZJLWUgRU5BTUVcZlIgKHNlZSBhYm92ZSkuCi1OT1RJRklDQVRJT04gc2hvdWxkIGJlIHRoZSBPSUQgb2YgdGhlIE5PVElGSUNBVElPTi1UWVBFIGRlZmluaXRpb24KK3RoZSBvcHRpb24gXGZJXC1lIEVOQU1FXGZSIChzZWUgYWJvdmUpLgorTk9USUZJQ0FUSU9OIHNob3VsZCBiZSB0aGUgT0lEIG9mIHRoZSBOT1RJRklDQVRJT05cLVRZUEUgZGVmaW5pdGlvbgogZm9yIHRoZSBub3RpZmljYXRpb24gdG8gYmUgZ2VuZXJhdGVkLgogLklQCi1JZiB0aGUgXGZJLW1cZlIgb3B0aW9uIGlzIGdpdmVuLCB0aGUgbm90aWZpY2F0aW9uIHBheWxvYWQgd2lsbAorSWYgdGhlIFxmSVwtbVxmUiBvcHRpb24gaXMgZ2l2ZW4sIHRoZSBub3RpZmljYXRpb24gcGF5bG9hZCB3aWxsCiBpbmNsdWRlIHRoZSBzdGFuZGFyZCB2YXJiaW5kcyBhcyBzcGVjaWZpZWQgaW4gdGhlIE9CSkVDVFMgY2xhdXNlCiBvZiB0aGUgbm90aWZpY2F0aW9uIE1JQiBkZWZpbml0aW9uLgogVGhpcyBvcHRpb24gbXVzdCBjb21lIFxmQmFmdGVyXGZSIHRoZSBOT1RJRklDQVRJT04gT0lECkBAIC04MjUsMjUgKzEwNDIsMjUgQEAKIGJlIGxpc3RlZCBleHBsaWNpdGx5IChlaXRoZXIgaGVyZSBvciBpbiB0aGUgY29ycmVzcG9uZGluZwogXGZJbW9uaXRvclxmUiBkaXJlY3RpdmUpLgogLklQCi1UaGUgXGZJLWkgT0lEXGZSIGFuZCBcZkktbyBPSURcZlIgb3B0aW9ucyBzcGVjaWZ5IGFkZGl0aW9uYWwKK1RoZSBcZklcLWkgT0lEXGZSIGFuZCBcZklcLW8gT0lEXGZSIG9wdGlvbnMgc3BlY2lmeSBhZGRpdGlvbmFsCiB2YXJiaW5kcyB0byBiZSBhcHBlbmRlZCB0byB0aGUgbm90aWZpY2F0aW9uIHBheWxvYWQsIGFmdGVyIHRoZQogc3RhbmRhcmQgbGlzdC4KIElmIHRoZSBtb25pdG9yIGVudHJ5IHRoYXQgdHJpZ2dlcmVkIHRoaXMgZXZlbnQgaW52b2x2ZWQgYQogd2lsZGNhcmRlZCBleHByZXNzaW9uLCB0aGUgc3VmZml4IG9mIHRoZSBtYXRjaGVkIGluc3RhbmNlCi13aWxsIGJlIGFkZGVkIHRvIGFueSBPSURzIHNwZWNpZmllZCB1c2luZyBcZkktb1xmUiwgd2hpbGUgT0lEcwotc3BlY2lmaWVkIHVzaW5nIFxmSS1pXGZSIHdpbGwgYmUgdHJlYXRlZCBhcyBleGFjdCBpbnN0YW5jZXMuCi1JZiB0aGUgXGZJLUlcZlIgZmxhZyB3YXMgc3BlY2lmaWVkIHRvIHRoZSBcZkltb25pdG9yXGZSIGRpcmVjdGl2ZSwKK3dpbGwgYmUgYWRkZWQgdG8gYW55IE9JRHMgc3BlY2lmaWVkIHVzaW5nIFxmSVwtb1xmUiwgd2hpbGUgT0lEcworc3BlY2lmaWVkIHVzaW5nIFxmSVwtaVxmUiB3aWxsIGJlIHRyZWF0ZWQgYXMgZXhhY3QgaW5zdGFuY2VzLgorSWYgdGhlIFxmSVwtSVxmUiBmbGFnIHdhcyBzcGVjaWZpZWQgdG8gdGhlIFxmSW1vbml0b3JcZlIgZGlyZWN0aXZlLAogdGhlbiB0aGVyZSBpcyBubyBkaWZmZXJlbmNlIGJldHdlZW4gdGhlc2UgdHdvIG9wdGlvbnMuCi0uSVAgInNldEV2ZW50IEVOQU1FIFstSV0gT0lEID0gVkFMVUUgIgorLklQICJzZXRFdmVudCBFTkFNRSBbXC1JXSBPSUQgPSBWQUxVRSAiCiBkZWZpbmVzIGEgc2V0IGV2ZW50IG5hbWVkIEVOQU1FLCBhc3NpZ25pbmcgdGhlIChpbnRlZ2VyKSBWQUxVRQogdG8gdGhlIHNwZWNpZmllZCBPSUQuCiBUaGlzIGNhbiBiZSB0cmlnZ2VyZWQgZnJvbSBhIGdpdmVuIFxmSW1vbml0b3JcZlIgZW50cnkgYnkgc3BlY2lmeWluZwotdGhlIG9wdGlvbiBcZkktZSBFTkFNRVxmUiAoc2VlIGFib3ZlKS4KK3RoZSBvcHRpb24gXGZJXC1lIEVOQU1FXGZSIChzZWUgYWJvdmUpLgogLklQCiBJZiB0aGUgbW9uaXRvciBlbnRyeSB0aGF0IHRyaWdnZXJlZCB0aGlzIGV2ZW50IGludm9sdmVkIGEKIHdpbGRjYXJkZWQgZXhwcmVzc2lvbiwgdGhlIHN1ZmZpeCBvZiB0aGUgbWF0Y2hlZCBpbnN0YW5jZQogd2lsbCBub3JtYWxseSBiZSBhZGRlZCB0byB0aGUgT0lELgotSWYgdGhlIFxmSS1JXGZSIGZsYWcgd2FzIHNwZWNpZmllZCB0byBlaXRoZXIgb2YgdGhlCitJZiB0aGUgXGZJXC1JXGZSIGZsYWcgd2FzIHNwZWNpZmllZCB0byBlaXRoZXIgb2YgdGhlCiBcZkltb25pdG9yXGZSIG9yIFxmSXNldEV2ZW50XGZSIGRpcmVjdGl2ZXMsIHRoZQogc3BlY2lmaWVkIE9JRCB3aWxsIGJlIHJlZ2FyZGVkIGFzIGFuIGV4YWN0IHNpbmdsZSBpbnN0YW5jZS4KIC5JUCAic3RyaWN0RGlzbWFuIHllcyIKQEAgLTg2NCw4ICsxMDgxLDggQEAKIC5SUwogLklQICJOb3RlOiIKIFN0cmljdCBEaXNNYW4gb3JkZXJpbmcgbWF5IHJlc3VsdCBpbiBnZW5lcmF0aW5nIGludmFsaWQgbm90aWZpY2F0aW9ucwotcGF5bG9hZCBsaXN0cyBpZiB0aGUgXGZJbm90aWZpY2F0aW9uRXZlbnQgLW5cZlIgZmxhZyBpcyB1c2VkIHRvZ2V0aGVyCi13aXRoIFxmSW1vbml0b3IgLW9cZlIgKG9yIFxmSS1pXGZSKSB2YXJiaW5kIG9wdGlvbnMuCitwYXlsb2FkIGxpc3RzIGlmIHRoZSBcZklub3RpZmljYXRpb25FdmVudCBcLW5cZlIgZmxhZyBpcyB1c2VkIHRvZ2V0aGVyCit3aXRoIFxmSW1vbml0b3IgXC1vXGZSIChvciBcZklcLWlcZlIpIHZhcmJpbmQgb3B0aW9ucy4KIC5SRQogLklQCiBJZiBubyBcZkltb25pdG9yXGZSIGVudHJpZXMgc3BlY2lmeSBwYXlsb2FkIHZhcmJpbmRzLApAQCAtODgyLDI1ICsxMDk5LDI1IEBACiBub3RpZmljYXRpb25FdmVudCAgbGlua1VwVHJhcCAgICBsaW5rVXAgICBpZkluZGV4IGlmQWRtaW5TdGF0dXMgaWZPcGVyU3RhdHVzCiBub3RpZmljYXRpb25FdmVudCAgbGlua0Rvd25UcmFwICBsaW5rRG93biBpZkluZGV4IGlmQWRtaW5TdGF0dXMgaWZPcGVyU3RhdHVzCiAKLW1vbml0b3IgIC1yIDYwIC1lIGxpbmtVcFRyYXAgICAiR2VuZXJhdGUgbGlua1VwIiBpZk9wZXJTdGF0dXMgIT0gMgotbW9uaXRvciAgLXIgNjAgLWUgbGlua0Rvd25UcmFwICJHZW5lcmF0ZSBsaW5rRG93biIgaWZPcGVyU3RhdHVzID09IDIKK21vbml0b3IgIFwtciA2MCBcLWUgbGlua1VwVHJhcCAgICJHZW5lcmF0ZSBsaW5rVXAiIGlmT3BlclN0YXR1cyAhPSAyCittb25pdG9yICBcLXIgNjAgXC1lIGxpbmtEb3duVHJhcCAiR2VuZXJhdGUgbGlua0Rvd24iIGlmT3BlclN0YXR1cyA9PSAyCiAuZmkKIC5SRQogLklQICJkZWZhdWx0TW9uaXRvcnMgeWVzIgogd2lsbCBjb25maWd1cmUgdGhlIEV2ZW50IE1JQiB0YWJsZXMgdG8gbW9uaXRvciB0aGUgdmFyaW91cwotXGZDVUNELVNOTVAtTUlCXGZSIHRhYmxlcyBmb3IgcHJvYmxlbXMgKGFzIGluZGljYXRlZCBieQorXGZDVUNEXC1TTk1QXC1NSUJcZlIgdGFibGVzIGZvciBwcm9ibGVtcyAoYXMgaW5kaWNhdGVkIGJ5CiB0aGUgYXBwcm9wcmlhdGUgXGZDeHhFcnJGbGFnXGZSIGNvbHVtbiBvYmplY3RzKS4KIC5JUAogVGhpcyBpcyBleGFjdGx5IGVxdWl2YWxlbnQgdG8gdGhlIGNvbmZpZ3VyYXRpb246CiAuUlMKIC5JUAogLm5mCi1tb25pdG9yCS1vIHByTmFtZXMgLW8gcHJFcnJNZXNzYWdlICJwcm9jZXNzIHRhYmxlIiBwckVycm9yRmxhZyAhPSAwCi1tb25pdG9yCS1vIG1lbUVycm9yTmFtZSAtbyBtZW1Td2FwRXJyb3JNc2cgIm1lbW9yeSIgbWVtU3dhcEVycm9yICE9IDAKLW1vbml0b3IJLW8gZXh0TmFtZXMgLW8gZXh0T3V0cHV0ICJleHRUYWJsZSIgZXh0UmVzdWx0ICE9IDAKLW1vbml0b3IJLW8gZHNrUGF0aCAtbyBkc2tFcnJvck1zZyAiZHNrVGFibGUiIGRza0Vycm9yRmxhZyAhPSAwCi1tb25pdG9yCS1vIGxhTmFtZXMgLW8gbGFFcnJNZXNzYWdlICAibGFUYWJsZSIgbGFFcnJvckZsYWcgIT0gMAotbW9uaXRvcgktbyBmaWxlTmFtZSAtbyBmaWxlRXJyb3JNc2cgICJmaWxlVGFibGUiIGZpbGVFcnJvckZsYWcgIT0gMAorbW9uaXRvcglcLW8gcHJOYW1lcyBcLW8gcHJFcnJNZXNzYWdlICJwcm9jZXNzIHRhYmxlIiBwckVycm9yRmxhZyAhPSAwCittb25pdG9yCVwtbyBtZW1FcnJvck5hbWUgXC1vIG1lbVN3YXBFcnJvck1zZyAibWVtb3J5IiBtZW1Td2FwRXJyb3IgIT0gMAorbW9uaXRvcglcLW8gZXh0TmFtZXMgXC1vIGV4dE91dHB1dCAiZXh0VGFibGUiIGV4dFJlc3VsdCAhPSAwCittb25pdG9yCVwtbyBkc2tQYXRoIFwtbyBkc2tFcnJvck1zZyAiZHNrVGFibGUiIGRza0Vycm9yRmxhZyAhPSAwCittb25pdG9yCVwtbyBsYU5hbWVzIFwtbyBsYUVyck1lc3NhZ2UgICJsYVRhYmxlIiBsYUVycm9yRmxhZyAhPSAwCittb25pdG9yCVwtbyBmaWxlTmFtZSBcLW8gZmlsZUVycm9yTXNnICAiZmlsZVRhYmxlIiBmaWxlRXJyb3JGbGFnICE9IDAKIC5maQogLlJFCiAuUFAKQEAgLTkxNyw3ICsxMTM0LDkgQEAKIFRoZXJlIGFyZSB0aHJlZSB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHNjaGVkdWxlZCBhY3Rpb246CiAuSVAgInJlcGVhdCBGUkVRVUVOQ1kgT0lEID0gVkFMVUUiCiBjb25maWd1cmVzIGEgU0VUIGFzc2lnbm1lbnQgb2YgdGhlIChpbnRlZ2VyKSBWQUxVRSB0byB0aGUgTUlCIGluc3RhbmNlCi1PSUQsIHRvIGJlIHJ1biBldmVyeSBGUkVRVUVOQ1kgc2Vjb25kcy4KK09JRCwgdG8gYmUgcnVuIGV2ZXJ5IEZSRVFVRU5DWSBzZWNvbmRzLCB3aGVyZSBGUkVRVUVOQ1kgaXMgaW4KK3NlY29uZHMgb3Igb3B0aW9uYWxseSBzdWZmaXhlZCBieSBvbmUgb2YgcyAoZm9yIHNlY29uZHMpLCBtIChmb3IKK21pbnV0ZXMpLCBoIChmb3IgaG91cnMpLCBkIChmb3IgZGF5cyksIG9yIHcgKGZvciB3ZWVrcykuCiAuSVAgImNyb24gTUlOVVRFIEhPVVIgREFZIE1PTlRIIFdFRUtEQVkgIE9JRCA9IFZBTFVFIgogY29uZmlndXJlcyBhIFNFVCBhc3NpZ25tZW50IG9mIHRoZSAoaW50ZWdlcikgVkFMVUUgdG8gdGhlIE1JQiBpbnN0YW5jZQogT0lELCB0byBiZSBydW4gYXQgdGhlIHRpbWVzIHNwZWNpZmllZCBieSB0aGUgZmllbGRzIE1JTlVURSB0byBXRUVLREFZLgpAQCAtOTM1LDYgKzExNTQsNzAgQEAKIGNvbmZpZ3VyZXMgYSBvbmUtc2hvdCBTRVQgYXNzaWdubWVudCwgdG8gYmUgcnVuIGF0IHRoZSBmaXJzdCBtYXRjaGluZwogdGltZSBhcyBzcGVjaWZpZWQgYnkgdGhlIGZpZWxkcyBNSU5VVEUgdG8gV0VFS0RBWS4gIFRoZSBpbnRlcnByZXRhdGlvbgogb2YgdGhlc2UgZmllbGRzIGlzIGV4YWN0bHkgdGhlIHNhbWUgYXMgZm9yIHRoZSBcZkljcm9uXGZSIGRpcmVjdGl2ZS4KKy5TUyAiRGF0YSBEZWxpdmVyeSB2aWEgTm90ZmlpY2F0aW9ucyIKK05vdGU6IHRoaXMgZnVuY3Rpb25hbGl0eSBpcyBvbmx5IGF2YWlsYWJsZSBpZiB0aGUKK1xmSWRlbGl2ZXIvZGVsaXZlckJ5Tm90aWZ5XGZSIG1pYiBtb2R1bGUgd2FzIGNvbXBsaWVkIGluIHRvIHRoZSBhZ2VudAorLlBQCitJbiBzb21lIHNpdHVhdGlvbnMgaXQgbWF5IGJlIGFkdmFudGFnZW91cyB0byBkZWxpdmVyIFNOTVAgZGF0YSBvdmVyCitTTk1QIE5vdGlmaWNhdGlvbnMgKFRSQVBzIGFuZCBJTkZPUk1zKSByYXRoZXIgdGhhbiB0aGUgdHlwaWNhbCBwcm9jZXNzCitvZiBoYXZpbmcgdGhlIG1hbmFnZXIgaXNzdWUgcmVxdWVzdHMgZm9yIHRoZSBkYXRhICh2aWEgR0VUcyBhbmQKK0dFVE5FWFRzKS4gIFJlYXNvbnMgZm9yIGRvaW5nIHRoaXMgYXJlIG51bWVyb3VzLCBidXQgZnJlcXVlbnRseSBjb3JuZXIKK2Nhc2VzLiAgVGhlIG1vc3QgY29tbW9uIHJlYXNvbiBmb3Igd2FudGluZyB0aGlzIGJlaGF2aW91ciBtaWdodCBiZSB0bworbW9uaXRvciBkZXZpY2VzIHRoYXQgcmVzaWRlIGJlaGluZCBOQVRzIG9yIEZpcmV3YWxscyB0aGF0IHByZXZlbnQKK2luY29taW5nIFNOTVAgdHJhZmZpYy4KKy5QUAorSXQgc2hvdWxkIGJlIG5vdGVkIHRoYXQgYWx0aG91Z2ggbW9zdCBtYW5hZ2VtZW50IHNvZnR3YXJlIGlzIGNhcGFibGUKK29mIGxvZ2dpbmcgbm90aWZpY2F0aW9ucywgdmVyeSBsaXR0bGUgKGlmIGFueSkgbWFuYWdlbWVudCBzb2Z0d2FyZQord2lsbCB1cGRhdGVkIHRoZWlyICJrbm93bGVkZ2UgZGF0YWJhc2UiIGJhc2VkIG9uIHRoZSBjb250ZW50cyBvZiBTTk1QCitub3RpZmljYXRpb25zLiAgSUUsIGl0IHdvbid0IChmb3IgZXhhbXBsZSkgdXBkYXRlIHRoZSBpbnRlcmZhY2UKK3RyYWZmaWMgY291bnRlciBoaXN0b3J5IHRoYXQgaXMgdXNlZCB0byBwcm9kdWNlIGdyYXBocy4gIE1vc3QgbGFyZ2VyCituZXR3b3JrIG1hbmFnZW1lbnQgcGFja2FnZXMgaGF2ZSBhIHNlcGFyYXRlIGRhdGFiYXNlIGZvciBzdG9yaW5nIGRhdGEKK3JlY2VpdmVkIHZpYSBTTk1QIHJlcXVlc3RzIChHRVRzIGFuZCBHRVRORVhUcykgdnMgdGhvc2UgcmVjZWl2ZWQgZnJvbQorbm90aWZpY2F0aW9ucy4gIFJlc2VhcmNoaW5nIHRoZSBjYXBhYmlsaXRpZXMgb2YgeW91ciBtYW5hZ2VtZW50CitzdGF0aW9uIHNvZnR3YXJlIGlzIHJlcXVpcmVkIGJlZm9yZSBhc3N1bWluZyB0aGlzIGZ1bmN0aW9uYWxpdHkgd2lsbAorc29sdmUgeW91ciBkYXRhIGRlbGl2ZXJ5IHJlcXVpcmVtZW50cy4KKy5QUAorTm90aWZpY2F0aW9ucyBnZW5lcmF0ZWQgdmlhIHRoaXMgbWVjaGFuaXNtIHdpbGwgYmUgc2VudCB0byB0aGUKK3N0YW5kYXJkIHNldCBvZiBjb25maWd1cmVkIG5vdGlmaWNhdGlvbiB0YXJnZXRzLiAgU2VlIHRoZQorIk5vdGlmaWNhdGlvbiBIYW5kbGluZyIgc2VjdGlvbiBvZiB0aGlzIGRvY3VtZW50IGZvciBmdXJ0aGVyCitpbmZvcm1hdGlvbi4KKy5JUCAiZGVsaXZlckJ5Tm90aWZ5IFtcLXBdIFtcLW1dIFtcLXMgTUFYU0laRV0gRlJFUVVFTkNZIE9JRCIKK1RoaXMgZGlyZWN0aXZlIHRlbGxzIHRoZSBTTk1QIGFnZW50IHRvIHNlbGYtd2FsayB0aGUgXGZJT0lEXGZSLAorY29sbGVjdCBhbGwgdGhlIGRhdGEgYW5kIHNlbmQgaXQgb3V0IGV2ZXJ5IFxmSUZSRVFVRU5DWVxmUiBzZWNvbmRzLAord2hlcmUgRlJFUVVFTkNZIGlzIGluIHNlY29uZHMgb3Igb3B0aW9uYWxseSBzdWZmaXhlZCBieSBvbmUgb2YgcyAoZm9yCitzZWNvbmRzKSwgbSAoZm9yIG1pbnV0ZXMpLCBoIChmb3IgaG91cnMpLCBkIChmb3IgZGF5cyksIG9yIHcgKGZvcgord2Vla3MpLiAgQnkgZGVmYXVsdCBzY2FsYXJzIGFyZSBpbmNsdWRlZCBpbiB0aGUgbm90aWZpY2F0aW9uIHRoYXQKK3NwZWNpZnkgdGhlIGhvdyBvZnRlbiB0aGUgbm90aWZpY2F0aW9uIHdpbGwgYmUgc2VudCAodW5sZXNzIHRoZQorXGZJXC1wXGZSIG9wdGlvbiBpcyBzcGVjaWZpZWQpIGFuZCB3aGljaCBtZXNzYWdlIG51bWJlciBvZiBob3cgbWFueQorbWVzc2FnZXMgYSBwYXJ0aWN1bGFyIG5vdGlmaWNhdGlvbiBpcyAodW5sZXNzIFxmSVwtbVxmUiBpcyBzcGVjaWZpZWQpLgorVG8gYnJlYWsgdGhlIG5vdGlmaWNhdGlvbnMgaW50byBtYW5hZ2VhYmxlIHBhY2tldCBzaXplcywgdXNlIHRoZQorXGZJXC1zXGZSIGZsYWcgdG8gc3BlY2lmeSB0aGUgYXBwcm94aW1hdGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdAorYSBub3RpZmljYXRpb24gbWVzc2FnZSBzaG91bGQgYmUgbGltaXRlZCB0by4gIElmIG1vcmUgdGhhbgorXGZJTUFYU0laRVxmUiBvZiBieXRlcyBpcyBuZWVkZWQgdGhlbiBtdWx0aXBsZSBub3RpZmljYXRpb25zIHdpbGwgYmUKK3NlbnQgdG8gZGVsaXZlciB0aGUgZGF0YS4gIE5vdGUgdGhhdCB0aGUgY2FsY3VsYXRpb25zIGZvciBlbnN1cmluZyB0aGUKK21heGltdW0gc2l6ZSBpcyBtZXQgYXJlIGFwcHJveGltYXRpb25zIGFuZCB0aHVzIGl0IGNhbiBiZSBhYnNvbHV0ZWx5CitndWFyYW50ZWVkIHRoZXknbGwgYmUgdW5kZXIgdGhhdCBzaXplLCBzbyBsZWF2ZSBhIHBhZGRpbmcgYnVmZmVyIGlmIGl0CitpcyBjcml0aWNhbCB0aGF0IHlvdSBhdm9pZCBmcmFnbWVudGF0aW9uLiAgQSB2YWx1ZSBvZiBcLTEgaW5kaWNhdGVzCitmb3JjZSBldmVyeXRoaW5nIGludG8gYSBzaW5nbGUgbWVzc2FnZSBubyBtYXR0ZXIgaG93IGJpZyBpdCBpcy4KKy5JUAorRXhhbXBsZSB1c2FnZTogdGhlIGZvbGxvd2luZyB3aWxsIGRlbGl2ZXIgdGhlIGNvbnRlbnRzIG9mIHRoZSBpZlRhYmxlCitvbmNlIGFuIGhvdXIgYW5kIHRoZSBjb250ZW50cyBvZiB0aGUgc3lzdGVtIGdyb3VwIG9uY2UgZXZlcnkgMiBob3VyczoKKy5SUworLm5mCisKK2RlbGl2ZXJCeU5vdGlmeSAzNjAwIGlmVGFibGUKK2RlbGl2ZXJCeU5vdGlmeSA3MjAwIHN5c3RlbQorLmZpCisuUkUKKy5JUCAiZGVsaXZlckJ5Tm90aWZ5TWF4UGFja2V0U2l6ZSBTSVpFSU5CWVRFUyIKK1NldHMgdGhlIGRlZmF1bHQgbm90aWZpY2F0aW9uIHNpemUgbGltaXQgKHNlZSB0aGUgXGZJXC1zXGZSIGZsYWcgYWJvdmUpLgorLklQICJkZWxpdmVyQnlOb3RpZnlPaWQgT0lEIgorLklQICJkZWxpdmVyQnlOb3RpZnlGcmVxdWVuY3lPaWQgT0lEIgorLklQICJkZWxpdmVyQnlOb3RpZnlNZXNzYWdlTnVtYmVyT2lkIE9JRCIKKy5JUCAiZGVsaXZlckJ5Tm90aWZ5TWF4TWVzc2FnZU51bWJlck9pZCBPSUQiCitUaGVzZSBzZXQgdGhlIGRhdGEgT0lEIHRoYXQgdGhlIG5vdGlmaWNhdGlvbiB3aWxsIGJlIHNlbnQgdW5kZXIsIHRoZQorc2NhbGFyIE9JRCwgdGhlIG1lc3NhZ2UgbnVtYmVyIE9JRCwgYW5kIHRoZSBtYXhpbXVtIG1lc3NhZ2UgbnVtYmVyCitPSUQuICBUaGVzZSBkZWZhdWx0IHRvIG9iamVjdHMgaW4gdGhlIE5FVFwtU05NUFwtUEVSSU9ESUNcLU5PVElGWVwtTUlCLgogLlNIICJFWFRFTkRJTkcgQUdFTlQgRlVOQ1RJT05BTElUWSIKIE9uZSBvZiB0aGUgZmlyc3QgZGlzdGluZ3Vpc2hpbmcgZmVhdHVyZXMgb2YgdGhlIG9yaWdpbmFsIFVDRCBzdWl0ZSB3YXMKIHRoZSBhYmlsaXR5IHRvIGV4dGVuZCB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWdlbnQgLSBub3QganVzdCBieQpAQCAtOTUzLDcgKzEyMzYsNyBAQAogU05NUCBvcGVyYXRpb25zLCBvciBjb25mb3JtIHRvIGFueSBwYXJ0aWN1bGFyIGJlaGF2aW91ciAtIHRoZSBNSUIKIHN0cnVjdHVyZXMgYXJlIGRlc2lnbmVkIHRvIGFjY29tbW9kYXRlIGFueSBmb3JtIG9mIGNvbW1hbmQgb3V0cHV0LgogVXNlIG9mIHRoaXMgbWVjaGFuaXNtIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZQotXGZJdWNkLXNubXAvZXh0ZW5zaWJsZVxmUiBhbmQvb3IgXGZJYWdlbnQvZXh0ZW5kXGZSIG1vZHVsZXMgKHdoaWNoCitcZkl1Y2RcLXNubXAvZXh0ZW5zaWJsZVxmUiBhbmQvb3IgXGZJYWdlbnQvZXh0ZW5kXGZSIG1vZHVsZXMgKHdoaWNoCiBhcmUgYm90aCBpbmNsdWRlZCBhcyBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgogLklQICJleGVjIFtNSUJPSURdIE5BTUUgUFJPRyBBUkdTIgogLklQICJzaCBbTUlCT0lEXSBOQU1FIFBST0cgQVJHUyIKQEAgLTEwMjcsNyArMTMxMCw3IEBACiBcZklleHRlbmRcZlIgZW50cnksIGFuZCBjYW4gYXBwZWFyIG9uIGl0cyBvd24uCiAuUFAKIEJvdGggXGZJZXh0ZW5kXGZSIGFuZCBcZklleHRlbmRmaXhcZlIgZGlyZWN0aXZlcyBjYW4gYmUgY29uZmlndXJlZAotZHluYW1pY2FsbHksIHVzaW5nIFNOTVAgU0VUIHJlcXVlc3RzIHRvIHRoZSBORVQtU05NUC1FWFRFTkQtTUlCLgorZHluYW1pY2FsbHksIHVzaW5nIFNOTVAgU0VUIHJlcXVlc3RzIHRvIHRoZSBORVRcLVNOTVBcLUVYVEVORFwtTUlCLgogLlNTICJNSUItU3BlY2lmaWMgRXh0ZW5zaW9uIENvbW1hbmRzIgogVGhlIGZpcnN0IGdyb3VwIG9mIGV4dGVuc2lvbiBkaXJlY3RpdmVzIGludm9rZSBhcmJpdHJhcnkgY29tbWFuZHMsCiBhbmQgcmVseSBvbiB0aGUgTUlCIHN0cnVjdHVyZSAoYW5kIG1hbmFnZW1lbnQgYXBwbGljYXRpb25zKSBoYXZpbmcKQEAgLTEwMzgsMTcgKzEzMjEsMTcgQEAKIFRoZSByZW1haW5pbmcgZXh0ZW5zaW9uIG1lY2hhbmlzbXMgYXJlIGFsbCBjb25jZXJuZWQgd2l0aCBzdWNoCiBNSUItc3BlY2lmaWMgc2l0dWF0aW9ucyAtIHN0YXJ0aW5nIHdpdGggInBhc3MtdGhyb3VnaCIgc2NyaXB0cy4KIFVzZSBvZiB0aGlzIG1lY2hhbmlzbSByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKLVxmSXVjZC1zbm1wL3Bhc3NcZlIgYW5kIFxmSXVjZC1zbm1wL3Bhc3NfcGVyc2lzdFxmUiBtb2R1bGVzICh3aGljaAorXGZJdWNkXC1zbm1wL3Bhc3NcZlIgYW5kIFxmSXVjZFwtc25tcC9wYXNzX3BlcnNpc3RcZlIgbW9kdWxlcyAod2hpY2gKIGFyZSBib3RoIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgY29uZmlndXJhdGlvbikuCi0uSVAgInBhc3MgWy1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKKy5JUCAicGFzcyBbXC1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKIHdpbGwgcGFzcyBjb250cm9sIG9mIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBNSUJPSUQgdG8gdGhlIHNwZWNpZmllZAogUFJPRyBjb21tYW5kLiAgR0VUIGFuZCBHRVRORVhUIHJlcXVlc3RzIGZvciBPSURzIHdpdGhpbiB0aGlzIHRyZWUgd2lsbAogdHJpZ2dlciB0aGlzIGNvbW1hbmQsIGNhbGxlZCBhczoKIC5SUwogLklQCi1QUk9HIC1nIE9JRAorUFJPRyBcLWcgT0lECiAuSVAKLVBST0cgLW4gT0lECitQUk9HIFwtbiBPSUQKIC5SRQogLklQCiByZXNwZWN0aXZlbHksIHdoZXJlIE9JRCBpcyB0aGUgcmVxdWVzdGVkIE9JRC4KQEAgLTEwNzYsNyArMTM1OSw3IEBACiBBIFNFVCByZXF1ZXN0IHdpbGwgcmVzdWx0IGluIHRoZSBjb21tYW5kIGJlaW5nIGNhbGxlZCBhczoKIC5SUwogLklQCi1QUk9HIC1zIE9JRCBUWVBFIFZBTFVFCitQUk9HIFwtcyBPSUQgVFlQRSBWQUxVRQogLlJFCiAuSVAKIHdoZXJlIFRZUEUgaXMgb25lIG9mIHRoZSB0b2tlbnMgbGlzdGVkIGFib3ZlLCBpbmRpY2F0aW5nIHRoZSB0eXBlIG9mIHRoZQpAQCAtMTExMCw5ICsxMzkzLDkgQEAKIGEgc2VwYXJhdGUgaW52b2NhdGlvbiBvZiB0aGUgY29tbWFuZC4KIC5JUAogVGhlIGRlZmF1bHQgcmVnaXN0cmF0aW9uIHByaW9yaXR5IGlzIDEyNy4gIFRoaXMgY2FuIGJlCi1jaGFuZ2VkIGJ5IHN1cHBseWluZyB0aGUgb3B0aW9uYWwgLXAgZmxhZywgd2l0aCBsb3dlciBwcmlvcml0eQorY2hhbmdlZCBieSBzdXBwbHlpbmcgdGhlIG9wdGlvbmFsIFwtcCBmbGFnLCB3aXRoIGxvd2VyIHByaW9yaXR5CiByZWdpc3RyYXRpb25zIGJlaW5nIHVzZWQgaW4gcHJlZmVyZW5jZSB0byBoaWdoZXIgcHJpb3JpdHkgdmFsdWVzLgotLklQICJwYXNzX3BlcnNpc3QgWy1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKKy5JUCAicGFzc19wZXJzaXN0IFtcLXAgcHJpb3JpdHldIE1JQk9JRCBQUk9HIgogd2lsbCBhbHNvIHBhc3MgY29udHJvbCBvZiB0aGUgc3VidHJlZSByb290ZWQgYXQgTUlCT0lEIHRvIHRoZSBzcGVjaWZpZWQKIFBST0cgY29tbWFuZC4gIEhvd2V2ZXIgdGhpcyBjb21tYW5kIHdpbGwgY29udGludWUgdG8gcnVuIGFmdGVyIHRoZSBpbml0aWFsCiByZXF1ZXN0IGhhcyBiZWVuIGFuc3dlcmVkLCBzbyBzdWJzZXF1ZW50IHJlcXVlc3RzIGNhbiBiZSBwcm9jZXNzZWQgd2l0aG91dApAQCAtMTEzNSwxOCArMTQxOCwxOCBAQAogSWYgdGhlIGFzc2lnbm1lbnQgaXMgc3VjY2Vzc2Z1bCwgdGhlIGNvbW1hbmQgc2hvdWxkIHByaW50CiAiRE9ORVxcbiIgdG8gc3Rkb3V0LgogRXJyb3JzIHNob3VsZCBiZSBpbmRpY2F0ZWQgYnkgd3JpdGluZyBvbmUgb2YgdGhlIHN0cmluZ3MKLS5CIG5vdC13cml0YWJsZSwgCi0uQiB3cm9uZy10eXBlLAotLkIgd3JvbmctbGVuZ3RoLAotLkIgd3JvbmctdmFsdWUKKy5CIG5vdFwtd3JpdGFibGUsIAorLkIgd3JvbmdcLXR5cGUsCisuQiB3cm9uZ1wtbGVuZ3RoLAorLkIgd3JvbmdcLXZhbHVlCiBvcgotLkIgaW5jb25zaXN0ZW50LXZhbHVlCisuQiBpbmNvbnNpc3RlbnRcLXZhbHVlCiB0byBzdGRvdXQsCiBhbmQgdGhlIGFnZW50IHdpbGwgZ2VuZXJhdGUgdGhlIGFwcHJvcHJpYXRlIGVycm9yIHJlc3BvbnNlLgogSW4gZWl0aGVyIGNhc2UsIHRoZSBjb21tYW5kIHNob3VsZCBjb250aW51ZSBydW5uaW5nLgogLklQCiBUaGUgcmVnaXN0cmF0aW9uIHByaW9yaXR5IGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBvcHRpb25hbAotLXAgZmxhZywganVzdCBhcyBmb3IgdGhlIFxmSXBhc3NcZlIgZGlyZWN0aXZlLgorXC1wIGZsYWcsIGp1c3QgYXMgZm9yIHRoZSBcZklwYXNzXGZSIGRpcmVjdGl2ZS4KIC5QUAogXGZJcGFzc1xmUiBhbmQgXGZJcGFzc19wZXJzaXN0XGZSIGV4dGVuc2lvbnMgY2FuIG9ubHkgYmUgY29uZmlndXJlZCB2aWEgdGhlCiBzbm1wZC5jb25mIGZpbGUuICBUaGV5IGNhbm5vdCBiZSBzZXQgdXAgdmlhIFNOTVAgU0VUIHJlcXVlc3RzLgpAQCAtMTE2NCw3ICsxNDQ3LDcgQEAKIC5QUAogVXNlIG9mIHRoaXMgbWVjaGFuaXNtIHJlcXVpcmVzIHRoYXQgdGhlIGFnZW50IHdhcyBidWlsdCB3aXRoIHN1cHBvcnQgZm9yIHRoZSBlbWJlZGRlZAogcGVybCBtZWNoYW5pc20sIHdoaWNoIGlzIG5vdCBwYXJ0IG9mIHRoZSBkZWZhdWx0IGJ1aWxkIGVudmlyb25tZW50LiBJdAotbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGJ5IHNwZWNpZnlpbmcgdGhlICctLWVuYWJsZS1lbWJlZGRlZC1wZXJsJworbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGJ5IHNwZWNpZnlpbmcgdGhlICdcLVwtZW5hYmxlXC1lbWJlZGRlZFwtcGVybCcKIG9wdGlvbiB0byB0aGUgY29uZmlndXJlIHNjcmlwdCB3aGVuIHRoZSBwYWNrYWdlIGlzIGZpcnN0IGJ1aWx0LgogLlBQCiBJZiBlbmFibGVkLCB0aGUgZm9sbG93aW5nIGRpcmVjdGl2ZXMgd2lsbCBiZSByZWNvZ25pc2VkOgpAQCAtMTE4OSw3ICsxNDcyLDcgQEAKIC5uZgogXGZDcGVybCB1c2UgRGF0YTo6RHVtcGVyOwogcGVybCBzdWIgbXlyb3V0aW5lICB7IHByaW50ICJnb3QgY2FsbGVkOiAiLER1bXBlcihAXyksIlxcbiI7IH0KLXBlcmwgJGFnZW50LT5yZWdpc3RlcignbXlsaW5rJywgJy4xLjMuNi4xLjg3NjUnLCBcXCZteXJvdXRpbmUpO1xmUgorcGVybCAkYWdlbnRcLT5yZWdpc3RlcignbXlsaW5rJywgJy4xLjMuNi4xLjg3NjUnLCBcXCZteXJvdXRpbmUpO1xmUgogLmZpCiAuUkUKIC5SRQpAQCAtMTIxMSw3ICsxNDk0LDcgQEAKIHdoZW4gdGhlIHN1aXRlIHdhcyBmaXJzdCBidWlsdC4gIFN1Y2ggaW1wbGVtZW50YXRpb24gbW9kdWxlcyBjYW4gYWxzbyBiZQogY29tcGlsZWQgaW5kZXBlbmRlbnRseSBhbmQgbG9hZGVkIGludG8gdGhlIHJ1bm5pbmcgYWdlbnQgb25jZSBpdCBoYXMKIHN0YXJ0ZWQuICBVc2Ugb2YgdGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCi1cZkl1Y2Qtc25tcC9kbG1vZFxmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQKK1xmSXVjZFwtc25tcC9kbG1vZFxmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlIGRlZmF1bHQKIGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgogLklQICJkbG1vZCBOQU1FIFBBVEgiCiB3aWxsIGxvYWQgdGhlIHNoYXJlZCBvYmplY3QgbW9kdWxlIGZyb20gdGhlIGZpbGUgUEFUSCAoYW4gYWJzb2x1dGUKQEAgLTEyMjQsNyArMTUwNyw3IEBACiAuUkUKIC5QUAogVGhpcyBmdW5jdGlvbmFsaXR5IGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdXNpbmcgU05NUCBTRVQgcmVxdWVzdHMKLXRvIHRoZSBVQ0QtRExNT0QtTUlCLgordG8gdGhlIFVDRFwtRExNT0RcLU1JQi4KIC5TUyAiUHJveHkgU3VwcG9ydCIKIEFub3RoZXIgbWVjaGFuaXNtIGZvciBleHRlbmRpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIGFnZW50CiBpcyB0byBwYXNzIHNlbGVjdGVkIHJlcXVlc3RzIChvciBzZWxlY3RlZCB2YXJiaW5kcykgdG8gYW5vdGhlcgpAQCAtMTIzMyw5ICsxNTE2LDkgQEAKIFRoaXMgY2FuIGJlIHZpZXdlZCBlaXRoZXIgYXMgdGhlIG1haW4gYWdlbnQgZGVsZWdhdGluZyByZXF1ZXN0cyB0bwogdGhlIHJlbW90ZSBvbmUsIG9yIGFjdGluZyBhcyBhIHByb3h5IGZvciBpdC4KIFVzZSBvZiB0aGlzIG1lY2hhbmlzbSByZXF1aXJlcyB0aGF0IHRoZSBhZ2VudCB3YXMgYnVpbHQgd2l0aCBzdXBwb3J0IGZvciB0aGUKLVxmSXVjZC1zbm1wL3Byb3h5XGZSIG1vZHVsZSAod2hpY2ggaXMgaW5jbHVkZWQgYXMgcGFydCBvZiB0aGUKK1xmSXVjZFwtc25tcC9wcm94eVxmUiBtb2R1bGUgKHdoaWNoIGlzIGluY2x1ZGVkIGFzIHBhcnQgb2YgdGhlCiBkZWZhdWx0IGJ1aWxkIGNvbmZpZ3VyYXRpb24pLgotLklQICJwcm94eSBbLUNuIENPTlRFWFROQU1FXSBbU05NUENNRF9BUkdTXSBIT1NUIE9JRCBbUkVNT1RFT0lEXSIKKy5JUCAicHJveHkgW1wtQ24gQ09OVEVYVE5BTUVdIFtTTk1QQ01EX0FSR1NdIEhPU1QgT0lEIFtSRU1PVEVPSURdIgogd2lsbCBwYXNzIGFueSBpbmNvbWluZyByZXF1ZXN0cyB1bmRlciBPSUQgdG8gdGhlIGFnZW50IGxpc3RlbmluZwogb24gdGhlIHBvcnQgc3BlY2lmaWVkIGJ5IHRoZSB0cmFuc3BvcnQgYWRkcmVzcyBIT1NULgogU2VlIHRoZSBzZWN0aW9uIApAQCAtMTI3NCw3ICsxNTU3LDcgQEAKIHdpdGggU01VWC1iYXNlZCBzdWJhZ2VudHMgKHN1Y2ggYXMgXGZJZ2F0ZWRcZlIsIFxmSXplYnJhXGZSIG9yIFxmSXF1YWdnYVxmUikuCiBVc2Ugb2YgdGhpcyBtZWNoYW5pc20gcmVxdWlyZXMgdGhhdCB0aGUgYWdlbnQgd2FzIGJ1aWx0IHdpdGggc3VwcG9ydCBmb3IgdGhlCiBcZklzbXV4XGZSIG1vZHVsZSwgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhlIGRlZmF1bHQgYnVpbGQgZW52aXJvbm1lbnQsIGFuZAotbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGJ5IHNwZWNpZnlpbmcgdGhlICctLXdpdGgtbWliLW1vZHVsZXM9c211eCcKK211c3QgYmUgZXhwbGljaXRseSBpbmNsdWRlZCBieSBzcGVjaWZ5aW5nIHRoZSAnXC1cLXdpdGhcLW1pYlwtbW9kdWxlcz1zbXV4Jwogb3B0aW9uIHRvIHRoZSBjb25maWd1cmUgc2NyaXB0IHdoZW4gdGhlIHBhY2thZ2UgaXMgZmlyc3QgYnVpbHQuCiAuUlMKIC5JUCAiTm90ZToiCkBAIC0xMzAxLDcgKzE1ODQsNyBAQAogLklQICJzbXV4c29ja2V0IDxJUHY0LWFkZHJlc3M+IgogZGVmaW5lcyB0aGUgSVB2NCBhZGRyZXNzIGZvciBTTVVYIHBlZXJzIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIE5ldC1TTk1QIGFnZW50LgogVGhlIGRlZmF1bHQgaXMgdG8gbGlzdGVuIG9uIGFsbCBJUHY0IGludGVyZmFjZXMgKCIwLjAuMC4wIiksIHVubGVzcyB0aGUgCi1wYWNrYWdlIGhhcyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCAiLS1lbmFibGUtbG9jYWwtc211eCIgYXQgYnVpbGQgdGltZSwgd2hpY2ggCitwYWNrYWdlIGhhcyBiZWVuIGNvbmZpZ3VyZWQgd2l0aCAiXC1cLWVuYWJsZVwtbG9jYWxcLXNtdXgiIGF0IGJ1aWxkIHRpbWUsIHdoaWNoIAogY2F1c2VzIGl0IHRvIG9ubHkgbGlzdGVuIG9uIDEyNy4wLjAuMSBieSBkZWZhdWx0LiBTTVVYIHVzZXMgdGhlIHdlbGwta25vd24KIFRDUCBwb3J0IDE5OS4KIC5QUApAQCAtMTMyMCw3ICsxNjAzLDcgQEAKIC5JUCAibWFzdGVyIGFnZW50eCIKIHdpbGwgZW5hYmxlIHRoZSBBZ2VudFggZnVuY3Rpb25hbGl0eSBhbmQgY2F1c2UgdGhlIGFnZW50IHRvCiBzdGFydCBsaXN0ZW5pbmcgZm9yIGluY29taW5nIEFnZW50WCByZWdpc3RyYXRpb25zLgotVGhpcyBjYW4gYWxzbyBiZSBhY3RpdmF0ZWQgYnkgc3BlY2lmeWluZyB0aGUgJy14JyBjb21tYW5kLWxpbmUKK1RoaXMgY2FuIGFsc28gYmUgYWN0aXZhdGVkIGJ5IHNwZWNpZnlpbmcgdGhlICdcLXgnIGNvbW1hbmQtbGluZQogb3B0aW9uICh0byBzcGVjaWZ5IGFuIGFsdGVybmF0aXZlIGxpc3RlbmluZyBzb2NrZXQpLgogLklQICJhZ2VudFhQZXJtcyBTT0NLUEVSTVMgW0RJUlBFUk1TIFtVU0VSfFVJRCBbR1JPVVB8R0lEXV1dIgogRGVmaW5lcyB0aGUgcGVybWlzc2lvbnMgYW5kIG93bmVyc2hpcCBvZiB0aGUgQWdlbnRYIFVuaXggRG9tYWluIHNvY2tldCwKQEAgLTEzNTEsMTEgKzE2MzQsMTMgQEAKIC5SUwogLklQICJOb3RlOiIKIFNwZWNpZnlpbmcgYW4gQWdlbnRYIHNvY2tldCBkb2VzIFxmQm5vdFxmUiBhdXRvbWF0aWNhbGx5IGVuYWJsZQotQWdlbnRYIGZ1bmN0aW9uYWxpdHkgKHVubGlrZSB0aGUgJy14JyBjb21tYW5kLWxpbmUgb3B0aW9uKS4KK0FnZW50WCBmdW5jdGlvbmFsaXR5ICh1bmxpa2UgdGhlICdcLXgnIGNvbW1hbmQtbGluZSBvcHRpb24pLgogLlJFCiAuSVAgImFnZW50WFRpbWVvdXQgTlVNIgogZGVmaW5lcyB0aGUgdGltZW91dCBwZXJpb2QgKE5VTSBzZWNvbmRzKSBmb3IgYW4gQWdlbnRYIHJlcXVlc3QuCi1EZWZhdWx0IGlzIDEgc2Vjb25kLgorRGVmYXVsdCBpcyAxIHNlY29uZC4gIE5VTSBhbHNvIGJlIHNwZWNpZmllZCB3aXRoIGEgc3VmZml4IG9mIG9uZSBvZiBzCisoZm9yIHNlY29uZHMpLCBtIChmb3IgbWludXRlcyksIGggKGZvciBob3VycyksIGQgKGZvciBkYXlzKSwgb3IgdyAoZm9yCit3ZWVrcykuCiAuSVAgImFnZW50WFJldHJpZXMgTlVNIgogZGVmaW5lcyB0aGUgbnVtYmVyIG9mIHJldHJpZXMgZm9yIGFuIEFnZW50WCByZXF1ZXN0LgogRGVmYXVsdCBpcyA1IHJldHJpZXMuCkBAIC0xMzYzLDkgKzE2NDgsOSBAQAogbmV0LXNubXAgc2hpcHMgd2l0aCBib3RoIEMgYW5kIFBlcmwgQVBJcyB0byBkZXZlbG9wIHlvdXIgb3duIEFnZW50WAogc3ViYWdlbnQuCiAuU0ggIk9USEVSIENPTkZJR1VSQVRJT04iCi0uSVAgIm92ZXJyaWRlIFstcnddIE9JRCBUWVBFIFZBTFVFIgorLklQICJvdmVycmlkZSBbXC1yd10gT0lEIFRZUEUgVkFMVUUiCiBUaGlzIGRpcmVjdGl2ZSBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIGEgcGFydGljdWxhciBPSUQgd2l0aCBhCi1kaWZmZXJlbnQgdmFsdWUgKGFuZCBwb3NzaWJseSBhIGRpZmZlcmVudCB0eXBlIG9mIHZhbHVlKS4gIFRoZSAtcncKK2RpZmZlcmVudCB2YWx1ZSAoYW5kIHBvc3NpYmx5IGEgZGlmZmVyZW50IHR5cGUgb2YgdmFsdWUpLiAgVGhlIFwtcncKIGZsYWcgd2lsbCBhbGxvdyBzbm1wIFNFVHMgdG8gbW9kaWZ5IGl0J3MgdmFsdWUgYXMgd2VsbC4gKG5vdGUgdGhhdCBpZgogeW91J3JlIG92ZXJyaWRpbmcgb3JpZ2luYWwgZnVuY3Rpb25hbGl0eSwgdGhhdCBmdW5jdGlvbmFsaXR5IHdpbGwgYmUKIGVudGlyZWx5IGxvc3QuICBUaHVzIFNFVFMgd2lsbCBkbyBub3RoaW5nIG1vcmUgdGhhbiBtb2RpZnkgdGhlCkBAIC0xMzk3LDggKzE2ODIsOCBAQAogSWYgeW91J3JlIHRyeWluZyB0byBmaWd1cmUgb3V0IGFzcGVjdHMgb2YgdGhlIHZhcmlvdXMgbWliIG1vZHVsZXMKIChwb3NzaWJseSBzb21lIHRoYXQgeW91J3ZlIGFkZGVkIHlvdXJzZWxmKSwgdGhlIGZvbGxvd2luZyBtYXkgaGVscCB5b3UKIHNwaXQgb3V0IHNvbWUgdXNlZnVsIGRlYnVnZ2luZyBpbmZvcm1hdGlvbi4gIEZpcnN0IG9mZiwgcGxlYXNlIHJlYWQKLXRoZSBzbm1wZCBtYW51YWwgcGFnZSBvbiB0aGUgLUQgZmxhZy4gIFRoZW4gdGhlIGZvbGxvd2luZwotY29uZmlndXJhdGlvbiBzbm1wZC5jb25mIHRva2VuLCBjb21iaW5lZCB3aXRoIHRoZSAtRCBmbGFnLCBjYW4gcHJvZHVjZQordGhlIHNubXBkIG1hbnVhbCBwYWdlIG9uIHRoZSBcLUQgZmxhZy4gIFRoZW4gdGhlIGZvbGxvd2luZworY29uZmlndXJhdGlvbiBzbm1wZC5jb25mIHRva2VuLCBjb21iaW5lZCB3aXRoIHRoZSBcLUQgZmxhZywgY2FuIHByb2R1Y2UKIHVzZWZ1bCBvdXRwdXQ6CiAuSVAgImluamVjdEhhbmRsZXIgSEFORExFUiBtb2R1bGVuYW1lIFtiZWZvcmVUaGlzXSIKIFRoaXMgd2lsbCBpbnNlcnQgbmV3IGhhbmRsZXJzIGludG8gdGhlIHNlY3Rpb24gb2YgdGhlIG1pYiB0cmVlCkBAIC0xNDI3LDcgKzE3MTIsNyBAQAogCiAuSVAgZGVidWcKIFByaW50cyBvdXQgbG90cyBvZiBkZWJ1Z2dpbmcgaW5mb3JtYXRpb24gd2hlbgotdGhlIC1EaGVscGVyOmRlYnVnIGZsYWcgaXMgcGFzc2VkIHRvIHRoZSBzbm1wZAordGhlIFwtRGhlbHBlcjpkZWJ1ZyBmbGFnIGlzIHBhc3NlZCB0byB0aGUgc25tcGQKIGFwcGxpY2F0aW9uLgogCiAuSVAgcmVhZF9vbmx5CkBAIC0xNDYyLDggKzE3NDcsOCBAQAogLklQIG8KIFRoZSBOZXQtU05NUCBhZ2VudCBjYW4gYmUgaW5zdHJ1Y3RlZCB0byByZS1yZWFkIHRoZSB2YXJpb3VzIGNvbmZpZ3VyYXRpb24gZmlsZXMsCiBlaXRoZXIgdmlhIGFuIFxmQnNubXBzZXRcZlIgYXNzaWdubWVudCBvZiBpbnRlZ2VyKDEpIHRvCi1cZkNVQ0QtU05NUC1NSUI6OnZlcnNpb25VcGRhdGVDb25maWcuMFxmUiAoLjEuMy42LjEuNC4xLjIwMjEuMTAwLjExLjApLAotb3IgYnkgc2VuZGluZyBhIFxmQmtpbGwgLUhVUFxmUiBzaWduYWwgdG8gdGhlIGFnZW50IHByb2Nlc3MuCitcZkNVQ0RcLVNOTVBcLU1JQjo6dmVyc2lvblVwZGF0ZUNvbmZpZy4wXGZSICguMS4zLjYuMS40LjEuMjAyMS4xMDAuMTEuMCksCitvciBieSBzZW5kaW5nIGEgXGZCa2lsbCBcLUhVUFxmUiBzaWduYWwgdG8gdGhlIGFnZW50IHByb2Nlc3MuCiAuSVAgbwogQWxsIGRpcmVjdGl2ZXMgbGlzdGVkIHdpdGggYSB2YWx1ZSBvZiAieWVzIiBhY3R1YWxseSBhY2NlcHQgYSByYW5nZQogb2YgYm9vbGVhbiB2YWx1ZXMuICBUaGVzZSB3aWxsIGFjY2VwdCBhbnkgb2YgXGZJMVxmUiwgXGZJeWVzXGZSIG9yCkBAIC0xNDc4LDcgKzE3NjMsNyBAQAogLlNIICJGSUxFUyIKIFNZU0NPTkZESVIvc25tcC9zbm1wZC5jb25mCiAuU0ggIlNFRSBBTFNPIgotc25tcGNvbmYoMSksIHNubXB1c20oMSksIHNubXAuY29uZig1KSwgc25tcF9jb25maWcoNSksIHNubXBkKDgpLCBFWEFNUExFLmNvbmYsIHJlYWRfY29uZmlnKDMpLgorc25tcGNvbmYoMSksIHNubXB1c20oMSksIHNubXAuY29uZig1KSwgc25tcF9jb25maWcoNSksIHNubXBkKDgpLCBFWEFNUExFLmNvbmYsIG5ldHNubXBfY29uZmlnX2FwaSgzKS4KIC5cIiBMb2NhbCBWYXJpYWJsZXM6CiAuXCIgIG1vZGU6IG5yb2ZmCiAuXCIgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmIGIvbWFuL3NubXBkLmV4YW1wbGVzLjUuZGVmCmluZGV4IDY4OTBiMjAuLjM2MDI4NjkgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZC5leGFtcGxlcy41LmRlZgorKysgYi9tYW4vc25tcGQuZXhhbXBsZXMuNS5kZWYKQEAgLTEwNCw3ICsxMDQsNyBAQAogUEVSU0lTVEVOVF9ESVJFQ1RPUlkvc25tcGQuY29uZiBmaWxlLCByYXRoZXIgdGhhbiB0aGUgdXN1YWwgbG9jYXRpb24uCiAuUkUKIC5cIgotLlwiICA/Pz8gSWxsdXN0cmF0ZSAiLWUiLCAiLWwiIGFuZCAiLW0iIGZvcm1zID8/CisuXCIgID8/PyBJbGx1c3RyYXRlICJcLWUiLCAiXC1sIiBhbmQgIlwtbSIgZm9ybXMgPz8KIC5cIgogLlNTIFRyYWRpdGlvbmFsIEFjY2VzcyBDb250cm9sCiBUaGUgU05NUHYzIHVzZXJzIGRlZmluZWQgYWJvdmUgY2FuIGJlIGdyYW50ZWQgYWNjZXNzIHRvIHRoZSBmdWxsCkBAIC0yMTksNyArMjE5LDcgQEAKIHZpZXcgICBzeXMyVmlldyBpbmNsdWRlZCAgICBzeXN0ZW0KIHZpZXcgICBzeXMyVmlldyBpbmNsdWRlZCAgICAuMS4zLjYuMS4yLjEuMjUuMQogCi1hdXRoY29tbXVuaXR5IHJlYWQgICAgICAgcHVibGljICBkZWZhdWx0ICAgICAgLXYgc3lzMlZpZXcKK2F1dGhjb21tdW5pdHkgcmVhZCAgICAgICBwdWJsaWMgIGRlZmF1bHQgICAgICBcLXYgc3lzMlZpZXcKIGF1dGhjb21tdW5pdHkgcmVhZCx3cml0ZSBwcml2YXRlIDEwLjEwLjEwLjAvOAogLmZpCiAuUkUKQEAgLTIzOCwxMiArMjM4LDEyIEBACiBjYW4gYmUgZXhwbGljaXRseSBjb25maWd1cmVkIHVzaW5nOgogLlJTCiAubmYKLVxmSSMgT3ZlcnJpZGUgJ3VuYW1lIC1hJyBhbmQgaGFyZGNvZGVkIHN5c3RlbSBPSUQgLSBpbmhlcmVudGx5IHJlYWQtb25seSB2YWx1ZXNcZlIKK1xmSSMgT3ZlcnJpZGUgJ3VuYW1lIFwtYScgYW5kIGhhcmRjb2RlZCBzeXN0ZW0gT0lEIC0gaW5oZXJlbnRseSByZWFkLW9ubHkgdmFsdWVzXGZSCiBzeXNEZXNjciAgICAgVW5pdmVyc2FsIFR1cmluZyBNYWNoaW5lIG1rIEkKIHN5c09iamVjdElEICAuMS4zLjYuMS40LjEuODA3Mi4zLjIuMTA2NgogCiBcZkkjIE92ZXJyaWRlIGRlZmF1bHQgdmFsdWVzIGZyb20gJ2NvbmZpZ3VyZScgLSBtYWtlcyB0aGVzZSBvYmplY3RzIHJlYWQtb25seVxmUgotc3lzQ29udGFjdCAgIEFsYW4uVHVyaW5nQHByZS1jcy5tYW4uYWMudWsKK3N5c0NvbnRhY3QgICBBbGFuLlR1cmluZ0BwcmVcLWNzLm1hbi5hYy51awogc3lzTmFtZSAgICAgIHRvcnRvaXNlLnR1cmluZy5jb20KIHN5c0xvY2F0aW9uICBBbiBpZGVhIGluIHRoZSBtaW5kIG9mIEFUCiAKQEAgLTI2Miw3ICsyNjIsNyBAQAogLlJTCiAubmYKIGlnbm9yZWRpc2sgL2Rldi9yZHNrL2MwdFshNl1kMAotaWdub3JlZGlzayAvZGV2L3Jkc2svYzB0WzAtNTctOWEtZl1kMAoraWdub3JlZGlzayAvZGV2L3Jkc2svYzB0WzBcLTU3XC05YVwtZl1kMAogLmZpCiAuUkUKIGVpdGhlciBvZiB3aGljaCBwcmV2ZW50cyBhbGwgZGV2aWNlcyBcZkkvZGV2L3Jkc2svYzB0XGZSWFxmSWQwXGZSCkBAIC0zODgsNyArMzg4LDcgQEAKIC5QUAogQSBtb3JlIGRldGFpbGVkIG1vbml0b3IgZXhhbXBsZSBpcyBnaXZlbiBieToKIC5SUwotbW9uaXRvciAtdSBtZSAtbyBoclNXUnVuTmFtZSAiaGlnaCBwcm9jZXNzIG1lbW9yeSIgaHJTV1J1blBlcmZNZW0gPiAxMDAwMAorbW9uaXRvciBcLXUgbWUgXC1vIGhyU1dSdW5OYW1lICJoaWdoIHByb2Nlc3MgbWVtb3J5IiBoclNXUnVuUGVyZk1lbSA+IDEwMDAwCiAuUkUKIC5QUAogVGhpcyBkZWZpbmVzIGFuIGV4cGxpY2l0IGJvb2xlYW4gbW9uaXRvciBlbnRyeSwgbG9va2luZyBmb3IgYW55IHByb2Nlc3MKQEAgLTQwMiw3ICs0MDIsNyBAQAogT2JqZWN0cyB0aGF0IGNvdWxkIHBvdGVudGlhbGx5IGZsdWN0dWF0ZSBhcm91bmQgdGhlIHNwZWNpZmllZCBsZXZlbAogYXJlIGJldHRlciBtb25pdG9yZWQgdXNpbmcgYSB0aHJlc2hvbGQgbW9uaXRvciBlbnRyeTogCiAuUlMKLW1vbml0b3IgLUQgLXIgMTAgIm5ldHdvcmsgdHJhZmZpYyIgaWZJbk9jdGV0cyAxMDAwMDAwIDUwMDAwMDAKK21vbml0b3IgXC1EIFwtciAxMCAibmV0d29yayB0cmFmZmljIiBpZkluT2N0ZXRzIDEwMDAwMDAgNTAwMDAwMAogLlJFCiAuUFAKIFRoaXMgd2lsbCBzZW5kIGEgXGZDbXRlVHJpZ2dlclJpc2luZ1xmUiB0cmFwIHdoZW5ldmVyIHRoZSBpbmNvbWluZwpAQCAtNDEwLDExICs0MTAsMTEgQEAKIGFuZCBhIGNvcnJlc3BvbmRpbmcgXGZDbXRlVHJpZ2dlckZhbGxpbmdcZlIgdHJhcCB3aGVuIGl0IGZhbGxzIGJlbG93CiAxMDAga0IvcyBhZ2Fpbi4KIC5QUAotTm90ZSB0aGF0IHRoaXMgbW9uaXRvcnMgdGhlIGRlbHRhcyBiZXR3ZWVuIHN1Y2Nlc3NpdmUgc2FtcGxlcyAoXGZJLURcZlIpCitOb3RlIHRoYXQgdGhpcyBtb25pdG9ycyB0aGUgZGVsdGFzIGJldHdlZW4gc3VjY2Vzc2l2ZSBzYW1wbGVzIChcZklcLURcZlIpCiByYXRoZXIgdGhhbiB0aGUgYWN0dWFsIHNhbXBsZSB2YWx1ZXMgdGhlbXNlbHZlcy4gIFRoZSBzYW1lIGVmZmVjdAogY291bGQgYmUgb2J0YWluZWQgdXNpbmc6CiAuUlMKLW1vbml0b3IgLXIgMTAgIm5ldHdvcmsgdHJhZmZpYyIgaWZJbk9jdGV0cyAtIC0gMTAwMDAwMCA1MDAwMDAwCittb25pdG9yIFwtciAxMCAibmV0d29yayB0cmFmZmljIiBpZkluT2N0ZXRzIFwtIFwtIDEwMDAwMDAgNTAwMDAwMAogLlJFCiAuUFAKIFRoZSBcZklsaW5rVXBEb3duTm90aWZpY2F0aW9uc1xmUiBkaXJlY3RpdmUgYWJvdmUgaXMgYnJvYWRseQpAQCAtNDI0LDggKzQyNCw4IEBACiBub3RpZmljYXRpb25FdmVudCAgbGlua1VwVHJhcCAgICBsaW5rVXAgICBpZkluZGV4IGlmQWRtaW5TdGF0dXMgaWZPcGVyU3RhdHVzCiBub3RpZmljYXRpb25FdmVudCAgbGlua0Rvd25UcmFwICBsaW5rRG93biBpZkluZGV4IGlmQWRtaW5TdGF0dXMgaWZPcGVyU3RhdHVzCiAKLW1vbml0b3IgIC1yIDYwIC1lIGxpbmtVcFRyYXAgICAiR2VuZXJhdGUgbGlua1VwIiAgIGlmT3BlclN0YXR1cyAhPSAyCi1tb25pdG9yICAtciA2MCAtZSBsaW5rRG93blRyYXAgIkdlbmVyYXRlIGxpbmtEb3duIiBpZk9wZXJTdGF0dXMgPT0gMgorbW9uaXRvciAgXC1yIDYwIFwtZSBsaW5rVXBUcmFwICAgIkdlbmVyYXRlIGxpbmtVcCIgICBpZk9wZXJTdGF0dXMgIT0gMgorbW9uaXRvciAgXC1yIDYwIFwtZSBsaW5rRG93blRyYXAgIkdlbmVyYXRlIGxpbmtEb3duIiBpZk9wZXJTdGF0dXMgPT0gMgogLmZpCiAuUkUKIC5QUApAQCAtNDM3LDEyICs0MzcsMTIgQEAKIG9mIChib29sZWFuKSBtb25pdG9yIGVudHJpZXM6CiAuUlMKIC5uZgotbW9uaXRvcgktbyBwck5hbWVzICAgICAgLW8gcHJFcnJNZXNzYWdlICAicHJvY1RhYmxlIiBwckVycm9yRmxhZyAgICE9IDAKLW1vbml0b3IJLW8gbWVtRXJyb3JOYW1lIC1vIG1lbVN3YXBFcnJvck1zZyAibWVtb3J5IiAgbWVtU3dhcEVycm9yICAhPSAwCi1tb25pdG9yCS1vIGV4dE5hbWVzICAgICAtbyBleHRPdXRwdXQgICAgICJleHRUYWJsZSIgIGV4dFJlc3VsdCAgICAgIT0gMAotbW9uaXRvcgktbyBkc2tQYXRoICAgICAgLW8gZHNrRXJyb3JNc2cgICAiZHNrVGFibGUiICBkc2tFcnJvckZsYWcgICE9IDAKLW1vbml0b3IJLW8gbGFOYW1lcyAgICAgIC1vIGxhRXJyTWVzc2FnZSAgImxhVGFibGUiICAgbGFFcnJvckZsYWcgICAhPSAwCi1tb25pdG9yCS1vIGZpbGVOYW1lICAgICAtbyBmaWxlRXJyb3JNc2cgICJmaWxlVGFibGUiIGZpbGVFcnJvckZsYWcgIT0gMAorbW9uaXRvcglcLW8gcHJOYW1lcyAgICAgIFwtbyBwckVyck1lc3NhZ2UgICJwcm9jVGFibGUiIHByRXJyb3JGbGFnICAgIT0gMAorbW9uaXRvcglcLW8gbWVtRXJyb3JOYW1lIFwtbyBtZW1Td2FwRXJyb3JNc2cgIm1lbW9yeSIgIG1lbVN3YXBFcnJvciAgIT0gMAorbW9uaXRvcglcLW8gZXh0TmFtZXMgICAgIFwtbyBleHRPdXRwdXQgICAgICJleHRUYWJsZSIgIGV4dFJlc3VsdCAgICAgIT0gMAorbW9uaXRvcglcLW8gZHNrUGF0aCAgICAgIFwtbyBkc2tFcnJvck1zZyAgICJkc2tUYWJsZSIgIGRza0Vycm9yRmxhZyAgIT0gMAorbW9uaXRvcglcLW8gbGFOYW1lcyAgICAgIFwtbyBsYUVyck1lc3NhZ2UgICJsYVRhYmxlIiAgIGxhRXJyb3JGbGFnICAgIT0gMAorbW9uaXRvcglcLW8gZmlsZU5hbWUgICAgIFwtbyBmaWxlRXJyb3JNc2cgICJmaWxlVGFibGUiIGZpbGVFcnJvckZsYWcgIT0gMAogLmZpCiAuUkUKIGFuZCB3aWxsIHNlbmQgYSB0cmFwIHdoZW5ldmVyIGFueSBvZiB0aGVzZSBlbnRyaWVzIGluZGljYXRlIGEgcHJvYmxlbS4KQEAgLTQ1Miw3ICs0NTIsNyBAQAogLlJTCiAubmYKIHNldEV2ZW50ICAgcHJGaXhJdCAgcHJFcnJGaXggPSAxCi1tb25pdG9yIC1lIHByRml4SXQgInByb2NUYWJsZSIgcHJFcnJvckZsYWcgICAhPSAwCittb25pdG9yIFwtZSBwckZpeEl0ICJwcm9jVGFibGUiIHByRXJyb3JGbGFnICAgIT0gMAogLmZpCiAuUkUKIChhbmQgc2ltaWxhcmx5IGZvciBhbnkgb2YgdGhlIG90aGVyIFxmSWRlZmF1bHRNb25pdG9yXGZSIGVudHJpZXMpLgpAQCAtNDk0LDEyICs0OTQsMTIgQEAKIC5TUyAiTUlCLVNwZWNpZmljIEV4dGVuc2lvbiBDb21tYW5kcyIKIC5JIE9uZS1TaG90CiAuUlMKLSJwYXNzIFstcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCisicGFzcyBbXC1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKIC5SRQogLklQCiAuSSBQZXJzaXN0ZW50CiAuUlMKLSJwYXNzX3BlcnNpc3QgWy1wIHByaW9yaXR5XSBNSUJPSUQgUFJPRyIKKyJwYXNzX3BlcnNpc3QgW1wtcCBwcmlvcml0eV0gTUlCT0lEIFBST0ciCiAuUkUKIC5TUyAiRW1iZWRkZWQgUGVybCBTdXBwb3J0IgogSWYgZW1iZWRkZWQgcGVybCBzdXBwb3J0IGlzIGVuYWJsZWQgaW4gdGhlIGFnZW50LCB0aGUgZGVmYXVsdApAQCAtNTE3LDcgKzUxNyw3IEBACiAubmYKIHBlcmwgdXNlIERhdGE6OkR1bXBlcjsKIHBlcmwgc3ViIG15cm91dGluZSAgeyBwcmludCAiZ290IGNhbGxlZDogIixEdW1wZXIoQF8pLCJcXG4iOyB9Ci1wZXJsICRhZ2VudC0+cmVnaXN0ZXIoJ215bGluaycsICcuMS4zLjYuMS44NzY1JywgXFwmbXlyb3V0aW5lKTsKK3BlcmwgJGFnZW50XC0+cmVnaXN0ZXIoJ215bGluaycsICcuMS4zLjYuMS44NzY1JywgXFwmbXlyb3V0aW5lKTsKIC5maQogLlJFCiAuUFAKQEAgLTU0OCwxMSArNTQ4LDExIEBACiBTTk1QIGFnZW50cyAocnVubmluZyBvbiByZW1vdGUgc3lzdGVtcykgbWlnaHQgYmU6CiAuUlMKIC5uZgotY29tMnNlYyAtQ24gcmVtMWNvbnRleHQgIHJlbTF1c2VyIGRlZmF1bHQgIHJlbW90ZWhvc3QxCi1jb20yc2VjIC1DbiByZW0yY29udGV4dCAgcmVtMnVzZXIgZGVmYXVsdCAgcmVtb3RlaG9zdDIKK2NvbTJzZWMgXC1DbiByZW0xY29udGV4dCAgcmVtMXVzZXIgZGVmYXVsdCAgcmVtb3RlaG9zdDEKK2NvbTJzZWMgXC1DbiByZW0yY29udGV4dCAgcmVtMnVzZXIgZGVmYXVsdCAgcmVtb3RlaG9zdDIKIAotcHJveHkgLUNuIHJlbTFjb250ZXh0ICAtdiAxIC1jIHB1YmxpYyAgcmVtb3RlaG9zdDEgIC4xLjMKLXByb3h5IC1DbiByZW0yY29udGV4dCAgLXYgMSAtYyBwdWJsaWMgIHJlbW90ZWhvc3QyICAuMS4zCitwcm94eSBcLUNuIHJlbTFjb250ZXh0ICBcLXYgMSAtYyBwdWJsaWMgIHJlbW90ZWhvc3QxICAuMS4zCitwcm94eSBcLUNuIHJlbTJjb250ZXh0ICBcLXYgMSAtYyBwdWJsaWMgIHJlbW90ZWhvc3QyICAuMS4zCiAuZmkKIC5SRQogKHBsdXMgc3VpdGFibGUgYWNjZXNzIGNvbnRyb2wgZW50cmllcykuCkBAIC01NzIsNyArNTcyLDcgQEAKIG9yIGxpc3RlbmluZyBvbiBhIGRpZmZlcmVudCBwb3J0IG9uIHRoZSBzYW1lIHN5c3RlbSksCiB3aGlsZSBoYW5kbGluZyB0aGUgcmVzdCBpbnRlcm5hbGx5OgogLlJTCi1wcm94eSAtdiAxIC1jIHB1YmxpYyAgbG9jYWxob3N0OjYxNjEgIC4xLjMuNi4xLjQuMS45OQorcHJveHkgXC12IDEgXC1jIHB1YmxpYyAgbG9jYWxob3N0OjYxNjEgIC4xLjMuNi4xLjQuMS45OQogLlJFCiBUaGlzIG1lY2hhbmlzbSBjYW4gYmUgdXNlZCB0byBsaW5rIHRvZ2V0aGVyIHR3byBzZXBhcmF0ZSBTTk1QIGFnZW50cy4KIC5QUApAQCAtNTgyLDcgKzU4Miw3IEBACiAubmYKIFxmSSMgdXNlcyBTTk1QdjMgdG8gYWNjZXNzIHRoZSBNSUIgdHJlZSAuMS4zLjYuMS4yLjEuMSBvbiAncmVtb3RlaG9zdCcKICMgYW5kIG1hcHMgdGhpcyB0byB0aGUgbG9jYWwgdHJlZSAuMS4zLjYuMS4zLjEwXGZSCi1wcm94eSAtdiAzIC1sIG5vQXV0aE5vUHJpdiAtdSB1c2VyIHJlbW90ZWhvc3QgLjEuMy42LjEuMy4xMCAuMS4zLjYuMS4yLjEuMQorcHJveHkgXC12IDMgXC1sIG5vQXV0aE5vUHJpdiBcLXUgdXNlciByZW1vdGVob3N0IC4xLjMuNi4xLjMuMTAgLjEuMy42LjEuMi4xLjEKIC5maQogLlJFCiAuU1MgU01VWCBTdWItQWdlbnRzCkBAIC02NDksNyArNjQ5LDcgQEAKIC5TSCAiRklMRVMiCiBTWVNDT05GRElSL3NubXAvc25tcGQuY29uZgogLlNIICJTRUUgQUxTTyIKLXNubXBjb25mKDEpLCBzbm1wZC5jb25mKDUpLCBzbm1wLmNvbmYoNSksIHNubXBfY29uZmlnKDUpLCBzbm1wZCg4KSwgRVhBTVBMRS5jb25mLCByZWFkX2NvbmZpZygzKS4KK3NubXBjb25mKDEpLCBzbm1wZC5jb25mKDUpLCBzbm1wLmNvbmYoNSksIHNubXBfY29uZmlnKDUpLCBzbm1wZCg4KSwgRVhBTVBMRS5jb25mLCBuZXRzbm1wX2NvbmZpZ19hcGkoMykuCiAuXCIgTG9jYWwgVmFyaWFibGVzOgogLlwiICBtb2RlOiBucm9mZgogLlwiIEVuZDoKZGlmZiAtLWdpdCBhL21hbi9zbm1wZC5pbnRlcm5hbC41LmRlZiBiL21hbi9zbm1wZC5pbnRlcm5hbC41LmRlZgppbmRleCBkMWRhOGIzLi44MTE0N2M3IDEwMDY0NAotLS0gYS9tYW4vc25tcGQuaW50ZXJuYWwuNS5kZWYKKysrIGIvbWFuL3NubXBkLmludGVybmFsLjUuZGVmCkBAIC0xLDQgKzEsNCBAQAotLlRIIFNOTVBELklOVEVSTkFMIDUgIjA1IERlYyAyMDA1IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBELklOVEVSTkFMIDUgIjA2IERlYyAyMDA1IiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBkLmludGVybmFsIC0gaW50ZXJuYWwgY29uZmlndXJhdGlvbiBvZiB0aGUgTmV0LVNOTVAgYWdlbnQKIC5TSCBERVNDUklQVElPTgpAQCAtODYsNyArODYsNyBAQAogLlNIICJGSUxFUyIKIFNZU0NPTkZESVIvc25tcC9zbm1wZC5jb25mCiAuU0ggIlNFRSBBTFNPIgotc25tcGNvbmYoMSksIHNubXBkLmNvbmYoNSksIHNubXAuY29uZig1KSwgc25tcF9jb25maWcoNSksIHNubXBkKDgpLCBFWEFNUExFLmNvbmYsIHJlYWRfY29uZmlnKDMpLgorc25tcGNvbmYoMSksIHNubXBkLmNvbmYoNSksIHNubXAuY29uZig1KSwgc25tcF9jb25maWcoNSksIHNubXBkKDgpLCBFWEFNUExFLmNvbmYsIG5ldHNubXBfY29uZmlnX2FwaSgzKS4KIC5cIiBMb2NhbCBWYXJpYWJsZXM6CiAuXCIgIG1vZGU6IG5yb2ZmCiAuXCIgRW5kOgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBkZWx0YS4xLmRlZiBiL21hbi9zbm1wZGVsdGEuMS5kZWYKaW5kZXggNmZiMDMyNi4uZTk1YTY5YiAxMDA2NDQKLS0tIGEvbWFuL3NubXBkZWx0YS4xLmRlZgorKysgYi9tYW4vc25tcGRlbHRhLjEuZGVmCkBAIC0xMiw3ICsxMiw3IEBACiBzbm1wZGVsdGEgXC0gTW9uaXRvciBkZWx0YSBkaWZmZXJlbmNlcyBpbiBTTk1QIENvdW50ZXIgdmFsdWVzCiAuU0ggU1lOT1BTSVMKIC5CIHNubXBkZWx0YQotWyBDT01NT04gT1BUSU9OUyBdIFstQ2ZdIFsgLUN0IF0gWyAtQ3MgXSBbIC1DUyBdIFsgLUNtIF0gWyAtQ0YgY29uZmlnZmlsZSBdIFsgLUNsIF0gWyAtQ3AgcGVyaW9kIF0gWyAtQ1AgUGVha3MgXSBbIC1DayBdIFsgLUNUIF0gQUdFTlQgT0lEIFsgT0lEIC4uLiBdCitbIENPTU1PTiBPUFRJT05TIF0gW1wtQ2ZdIFsgXC1DdCBdIFsgXC1DcyBdIFsgXC1DUyBdIFsgXC1DbSBdIFsgXC1DRiBjb25maWdmaWxlIF0gWyBcLUNsIF0gWyBcLUNwIHBlcmlvZCBdIFsgXC1DUCBQZWFrcyBdIFsgXC1DayBdIFsgXC1DVCBdIEFHRU5UIE9JRCBbIE9JRCAuLi4gXQogLlNIICJERVNDUklQVElPTiIKIC5CIHNubXBkZWx0YQogd2lsbCBtb25pdG9yIHRoZSBzcGVjaWZpZWQgaW50ZWdlciB2YWx1ZWQgT0lEcywgYW5kIHJlcG9ydCBjaGFuZ2VzCkBAIC0zOCw1MSArMzgsNTEgQEAKIGZvciBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBDT01NT04gT1BUSU9OUwogYXMgd2VsbCBhcyB0aGVpciBkZXNjcmlwdGlvbnMuCiAuVFAKLS5CIC1DZgorLkIgXC1DZgogRG9uJ3QgZml4IGVycm9ycyBhbmQgcmV0cnkgdGhlIHJlcXVlc3QuCiBXaXRob3V0IHRoaXMgb3B0aW9uLCBpZiBtdWx0aXBsZSBvaWRzIGhhdmUgYmVlbiBzcGVjaWZpZWQgZm9yCiBhIHNpbmdsZSByZXF1ZXN0IGFuZCBpZiB0aGUgcmVxdWVzdCBmb3Igb25lIG9yIG1vcmUgb2YgdGhlCiBvaWRzIGZhaWxzLCBzbm1wZGVsdGEgd2lsbCByZXRyeSB0aGUgcmVxdWVzdCBzbyB0aGF0IGRhdGEgZm9yCiBvaWRzIGFwYXJ0IGZyb20gdGhlIG9uZXMgdGhhdCBmYWlsZWQgd2lsbCBzdGlsbCBiZSByZXR1cm5lZC4gCi1TcGVjaWZ5aW5nIC1DZiB0ZWxscworU3BlY2lmeWluZyBcLUNmIHRlbGxzCiAuSSAgc25tcGRlbHRhCiBub3QgdG8gcmV0cnkgYSByZXF1ZXN0LCBldmVuCiBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgb2lkcyBzcGVjaWZpZWQuCiAuVFAKLS5CIC1DdAorLkIgXC1DdAogRmxhZyB3aWxsIGRldGVybWluZSB0aW1lIGludGVydmFsIGZyb20gdGhlIG1vbml0b3JlZCBlbnRpdHkuCiAuVFAKLS5CIC1DcworLkIgXC1DcwogRmxhZyB3aWxsIGRpc3BsYXkgYSB0aW1lc3RhbXAuCiAuVFAKLS5CIC1DUworLkIgXC1DUwogR2VuZXJhdGVzIGEgInN1bSBjb3VudCIgaW4gYWRkaXRpb24gdG8gdGhlIGluZGl2aWR1YWwgaW5zdGFuY2UKIGNvdW50cy4gIFRoZSAic3VtIGNvdW50IiBpcyB0aGUgdG90YWwgb2YgYWxsIHRoZSBpbmRpdmlkdWFsCiBkZWx0YXMgZm9yIGVhY2ggdGltZSBwZXJpb2QuCiAuVFAKLS5CIC1DbQorLkIgXC1DbQogUHJpbnRzIHRoZSBtYXggdmFsdWUgZXZlciBhdHRhaW5lZC4KIC5UUAotLkIgLUNGIGNvbmZpZ2ZpbGUKKy5CIFwtQ0YgY29uZmlnZmlsZQogVGVsbHMKIC5CIHNubXBkZWx0YQogdG8gcmVhZCBpdCdzIGNvbmZpZ3VyYXRpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGZpbGUuCiBUaGlzIG9wdGlvbnMgYWxsb3dzIHRoZSBpbnB1dCB0byBiZSBzZXQgdXAgaW4gYWR2YW5jZSByYXRoZXIKIHRoYW4gaGF2aW5nIHRvIGJlIHNwZWNpZmllZCBvbiB0aGUgY29tbWFuZCBsaW5lLgogLlRQCi0uQiAtQ2wKKy5CIFwtQ2wKIFRlbGxzCiAuQiBzbm1wZGVsdGEKIHRvIHdyaXRlIGl0J3MgY29uZmlndXJhdGlvbiB0byBmaWxlcyB3aG9zZSBuYW1lcyBjb3JyZXNwb25kIHRvIHRoZSBNSUIKLWluc3RhbmNlcyBtb25pdG9yZWQuICBGb3IgZXhhbXBsZSwgc25tcGRlbHRhIC1DbCBsb2NhbGhvc3QgaWZJbk9jdGV0cy4xCi13aWxsIGNyZWF0ZSBhIGZpbGUgImxvY2FsaG9zdC1pZkluT2N0ZXRzLjEiLgoraW5zdGFuY2VzIG1vbml0b3JlZC4gIEZvciBleGFtcGxlLCBzbm1wZGVsdGEgXC1DbCBsb2NhbGhvc3QgaWZJbk9jdGV0cy4xCit3aWxsIGNyZWF0ZSBhIGZpbGUgImxvY2FsaG9zdFwtaWZJbk9jdGV0cy4xIi4KIC5UUAotLkIgLUNwCisuQiBcLUNwCiBTcGVjaWZpZXMgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gcG9sbGluZyBwZXJpb2RzLgogUG9sbGluZyBjb25zdGl0dXRlcyBzZW5kaW5nIGEgcmVxdWVzdCB0byB0aGUgYWdlbnQuIFRoZQogZGVmYXVsdCBwb2xsaW5nIHBlcmlvZCBpcyBvbmUgc2Vjb25kLgogLlRQCi0uQiAtQ1AgcGVha3MKKy5CIFwtQ1AgcGVha3MKIFNwZWNpZmllcyB0aGUgcmVwb3J0aW5nIHBlcmlvZCBpbiBudW1iZXIgb2YgcG9sbGluZyBwZXJpb2RzLgogSWYgdGhpcyBvcHRpb24gaXMgc3BlY2lmaWVkLCBzbm1wZGVsdGEgcG9sbHMgdGhlIGFnZW50CiAuSSBwZWFrcwpAQCAtOTEsMjQgKzkxLDI0IEBACiB0aGUgcmVwb3J0aW5nIHBlcmlvZC4gSW4gYWRkaXRpb24sIHRoZSBoaWdoZXN0IHBvbGxlZAogdmFsdWUgd2l0aGluIHRoZSByZXBvcnRpbmcgcGVyaW9kIGlzIHNob3duLgogLlRQCi0uQiAtQ2sKLVdoZW4gdGhlIHBvbGxpbmcgcGVyaW9kICgtQ3ApIGlzIGFuIGluY3JlbWVudCBvZiA2MCBzZWNvbmRzCi1hbmQgdGhlIHRpbWVzdGFtcCBpcyBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCAoLUNzKSwgdGhlbgorLkIgXC1DaworV2hlbiB0aGUgcG9sbGluZyBwZXJpb2QgKFwtQ3ApIGlzIGFuIGluY3JlbWVudCBvZiA2MCBzZWNvbmRzCithbmQgdGhlIHRpbWVzdGFtcCBpcyBkaXNwbGF5ZWQgaW4gdGhlIG91dHB1dCAoXC1DcyksIHRoZW4KIHRoZSBkZWZhdWx0IGRpc3BsYXkgc2hvd3MgdGhlIHRpbWVzdGFtcCBpbiB0aGUgZm9ybWF0CiBoaDptbSBtbS9kZC4gVGhpcyBvcHRpb24gY2F1c2VzIHRoZSB0aW1lc3RhbXAgZm9ybWF0CiB0byBiZSBoaDptbTpzcyBtbS9kZC4KIC5UUAotLkIgLUNUCisuQiBcLUNUCiBNYWtlcyAKIC5CIHNubXBkZWx0YQogcHJpbnQgaXRzIG91dHB1dCBpbiB0YWJ1bGFyIGZvcm0uCiAuVFAKLS5CIC1DdiB2YXJzL3BrdAorLkIgXC1DdiB2YXJzL3BrdAogU3BlY2lmaWVzIHRoZSBtYXhpbXVtIG51bWJlciBvZiBvaWRzIGFsbG93ZWQgdG8gYmUgcGFja2FnZWQKIGluIGEgc2luZ2xlIFBEVS4gTXVsdGlwbGUgUERVcyBjYW4gYmUgY3JlYXRlZCBpbiBhIHNpbmdsZQogcmVxdWVzdC4gVGhlIGRlZmF1bHQgdmFsdWUgb2YgdmFyaWFibGVzIHBlciBwYWNrZXQgaXMgNjAuCiBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgaWYgYSByZXF1ZXN0IHJlc3BvbnNlIHJlc3VsdHMgaW4gYW4KLWVycm9yIGJlY2F1ZXMgdGhlIHBhY2tldCBpcyB0b28gYmlnLgorZXJyb3IgYmVjYXVzZSB0aGUgcGFja2V0IGlzIHRvbyBiaWcuCiAuUFAKIE5vdGUgdGhhdAogLkIgc25tcGRlbHRhCkBAIC0xMTgsNyArMTE4LDcgQEAKIG1hbnVhbCBwYWdlLgogLlNIIEVYQU1QTEVTCiAubmYKLSQgc25tcGRlbHRhIC1jIHB1YmxpYyAtdiAxIC1DcyBsb2NhbGhvc3QgSUYtTUlCOjppZkluVWNhc3RQa3RzLjMgSUYtTUlCOjppZk91dFVjYXN0UGt0cy4zCiskIHNubXBkZWx0YSBcLWMgcHVibGljIFwtdiAxIFwtQ3MgbG9jYWxob3N0IElGXC1NSUI6OmlmSW5VY2FzdFBrdHMuMyBJRlwtTUlCOjppZk91dFVjYXN0UGt0cy4zCiBbMjA6MTU6NDMgNi8xNF0gaWZJblVjYXN0UGt0cy4zIC8xIHNlYzogMTU4CiBbMjA6MTU6NDMgNi8xNF0gaWZPdXRVY2FzdFBrdHMuMyAvMSBzZWM6IDE1OAogWzIwOjE1OjQ0IDYvMTRdIGlmSW5VY2FzdFBrdHMuMyAvMSBzZWM6IDE4NApAQCAtMTM0LDcgKzEzNCw3IEBACiBbMjA6MTU6NDkgNi8xNF0gaWZJblVjYXN0UGt0cy4zIC8xIHNlYzogMTU4CiBbMjA6MTU6NDkgNi8xNF0gaWZPdXRVY2FzdFBrdHMuMyAvMSBzZWM6IDE1OAogXkMKLSQgc25tcGRlbHRhIC1jIHB1YmxpYyAtdiAxIC1DcyAtQ1QgbG9jYWxob3N0IElGLU1JQjppZkluVWNhc3RQa3RzLjMgSUYtTUlCOmlmT3V0Y2FzdFBrdHMuMworJCBzbm1wZGVsdGEgXC1jIHB1YmxpYyBcLXYgMSBcLUNzIFwtQ1QgbG9jYWxob3N0IElGXC1NSUI6aWZJblVjYXN0UGt0cy4zIElGXC1NSUI6aWZPdXRjYXN0UGt0cy4zCiBsb2NhbGhvc3QJaWZJblVjYXN0UGt0cy4zCWlmT3V0VWNhc3RQa3RzLjMKIFsyMDoxNTo1OSA2LzE0XQkxODQuMDAJMTg0LjAwCiBbMjA6MTY6MDAgNi8xNF0JMTU4LjAwCTE1OC4wMApAQCAtMTUzLDggKzE1Myw4IEBACiBzY3JlZW4uCiAuUFAKIC5uZgotJCBzbm1wZGVsdGEgLWMgcHVibGljIC12IDEgLUN0IC1DcyAtQ1MgLUNtIC1DbCAtQ3AgNjAgLUNQIDYwCiskIHNubXBkZWx0YSBcLWMgcHVibGljIFwtdiAxIFwtQ3QgXC1DcyBcLUNTIFwtQ20gXC1DbCBcLUNwIDYwIFwtQ1AgNjAKICAgaW50ZXJsaW5rLnN3Lm5ldC5jbXUuZWR1IC4xLjMuNi4xLjIuMS4yLjIuMS4xNi4zIC4xLjMuNi4xLjIuMS4yLjIuMS4xNi40Ci1maQorLmZpCiAuU0ggIlNFRSBBTFNPIgogc25tcGNtZCgxKSwgdmFyaWFibGVzKDUpLgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBkZi4xLmRlZiBiL21hbi9zbm1wZGYuMS5kZWYKaW5kZXggNzY1MzM0Ny4uNDA2ODQ1YSAxMDA2NDQKLS0tIGEvbWFuL3NubXBkZi4xLmRlZgorKysgYi9tYW4vc25tcGRmLjEuZGVmCkBAIC03LDE5ICs3LDE5IEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBERiAxICIyNSBKdWwgMjAwMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QREYgMSAiMjggSmFuIDIwMTMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcGRmIC0gZGlzcGxheSBkaXNrIHNwYWNlIHVzYWdlIG9uIGEgbmV0d29yayBlbnRpdHkgdmlhIFNOTVAKIC5TSCBTWU5PUFNJUwogLkIgc25tcGRmCi1bQ09NTU9OIE9QVElPTlNdIFstQ3VdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUN1XSBbXC1DaF0gQUdFTlQKIC5TSCBERVNDUklQVElPTgogLkIgc25tcGRmCi1pcyBzaW1wbHkgYSBuZXR3b3JrZWQgdmVyaXNvbiBvZiB0aGUgdHlwaWNhbCBkZiBjb21tYW5kLiAgSXQKK2lzIHNpbXBseSBhIG5ldHdvcmtlZCB2ZXJzaW9uIG9mIHRoZSB0eXBpY2FsIGRmIGNvbW1hbmQuICBJdAogY2hlY2tzIHRoZSBkaXNrIHNwYWNlIG9uIHRoZSByZW1vdGUgbWFjaGluZSBieSBleGFtaW5pbmcgdGhlCi1IT1NULVJFU09VUkNFUy1NSUIncyBoclN0b3JhZ2VUYWJsZSBvciB0aGUgVUNELVNOTVAtTUlCJ3MgZHNrVGFibGUuCitIT1NUXC1SRVNPVVJDRVNcLU1JQidzIGhyU3RvcmFnZVRhYmxlIG9yIHRoZSBVQ0RcLVNOTVBcLU1JQidzIGRza1RhYmxlLgogQnkgZGVmYXVsdCwgdGhlIGhyU3RvcmFnZVRhYmxlIGlzIHByZWZlcnJlZCBhcyBpdCB0eXBpY2FsbHkgY29udGFpbnMKLW1vcmUgaW5mb3JtYXRpb24uICBIb3dldmVyLCB0aGUgLUN1IGFyZ3VtZW50IGNhbiBiZSBwYXNzZWQgdG8gc25tcGRmCittb3JlIGluZm9ybWF0aW9uLiAgSG93ZXZlciwgdGhlIFwtQ3UgYXJndW1lbnQgY2FuIGJlIHBhc3NlZCB0byBzbm1wZGYKIHRvIGZvcmNlIHRoZSB1c2FnZSBvZiB0aGUgZHNrVGFibGUuCiAuUFAKIEFHRU5UIGlkZW50aWZpZXMgYSB0YXJnZXQgU05NUCBhZ2VudCwgd2hpY2ggaXMgaW5zdHJ1bWVudGVkCkBAIC00NCwxNiArNDQsMjIgQEAKIGZvciBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBDT01NT04gT1BUSU9OUwogYXMgd2VsbCBhcyB0aGVpciBkZXNjcmlwdGlvbnMuCiAuVFAKLS5CIC1DdQorLkIgXC1DdQogRm9yY2VzIHRoZSBjb21tYW5kIHRvIHVzZSBkc2tUYWJsZSBpbiBtaWIKLVVDRC1TTk1QLU1JQiBpbnN0ZWFkIG9mIHRoZSBkZWZhdWx0IHRvIGRldGVybWluZQorVUNEXC1TTk1QXC1NSUIgaW5zdGVhZCBvZiB0aGUgZGVmYXVsdCB0byBkZXRlcm1pbmUKIHRoZSBzdG9yYWdlIGluZm9ybWF0aW9uLiBHZW5lcmFsbHksIHRoZSBkZWZhdWx0Ci11c2Ugb2YgaHJTdG9yYWdlVGFibGUgaW4gbWliIEhPU1QtUkVTT1VSQ0VTLU1JQgordXNlIG9mIGhyU3RvcmFnZVRhYmxlIGluIG1pYiBIT1NUXC1SRVNPVVJDRVNcLU1JQgogaXMgcHJlZmVycmVkIGJlY2F1c2UgaXQgdHlwaWNhbGx5IGNvbnRhaW5zCiBtb3JlIGluZm9ybWF0aW9uLgorLlRQCisuQiBcLUNoCitQcmludCBzaXplcyBpbiBodW1hbiByZWFkYWJsZSBmb3JtYXQgKGkuZS4gTWlCLCBHaUIsIFRpQikKKy5UUAorLkIgXC1DSAorUHJpbnQgc2l6ZXMgaW4gaHVtYW4gcmVhZGFibGUgU0kgZm9ybWF0IChpLmUuIE1CLCBHQiwgVEIpCiAuU0ggIkVYQU1QTEVTIgogLlBQCi0lIHNubXBkZiAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0CislIHNubXBkZiBcLXYgMmMgXC1jIHB1YmxpYyBsb2NhbGhvc3QKIC5QUAogLm5mCiBEZXNjcmlwdGlvbiAgICAgICBzaXplIChrQikgICAgICAgICBVc2VkICAgIEF2YWlsYWJsZSBVc2VkJQpkaWZmIC0tZ2l0IGEvbWFuL3NubXBnZXQuMS5kZWYgYi9tYW4vc25tcGdldC4xLmRlZgppbmRleCBlYWJlOTAyLi4wZWNhYzE5IDEwMDY0NAotLS0gYS9tYW4vc25tcGdldC4xLmRlZgorKysgYi9tYW4vc25tcGdldC4xLmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAKLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg4LCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC0yOCw3ICsyOCw3IEBACiBzbm1wZ2V0IC0gY29tbXVuaWNhdGVzIHdpdGggYSBuZXR3b3JrIGVudGl0eSB1c2luZyBTTk1QIEdFVCByZXF1ZXN0cwogLlNIIFNZTk9QU0lTCiAuQiBzbm1wZ2V0Ci1bQ09NTU9OIE9QVElPTlNdIFstQ2ZdIEFHRU5UIE9JRCBbT0lEXS4uLgorW0NPTU1PTiBPUFRJT05TXSBbXC1DZl0gQUdFTlQgT0lEIFtPSURdLi4uCiAuU0ggREVTQ1JJUFRJT04KIC5CIHNubXBnZXQKIGlzIGFuIFNOTVAgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBTTk1QIEdFVCByZXF1ZXN0IHRvIHF1ZXJ5IGZvcgpAQCAtMzgsOSArMzgsOSBAQAogLklSIHZhcmlhYmxlcyg1KSAuCiAuU0ggIk9QVElPTlMiCiAuVFAgOAotLkIgLUNmCisuQiBcLUNmCiBJZgotLkIgLUNmCisuQiBcLUNmCiBpcwogLkkgbm90CiBzcGVjaWZpZWQsIHNvbWUgYXBwbGljYXRpb25zCkBAIC01NSwxNCArNTUsMTQgQEAKIHRha2VzIHRoZSBjb21tb24gb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlCiAuSSBzbm1wY21kKDEpCiBtYW51YWwgcGFnZS4gIAotTm90ZSB0aGF0CitOb3RlIHRoYXQgCiAuQiBzbm1wZ2V0Ci1SRVFVSVJFUyAgYW4gYXJndW1lbnQgc3BlY2lmeWluZyB0aGUgYWdlbnQgdG8gcXVlcnkKLWFuZCBhdCBsZWFzdCBvbmUgT0lEIGFyZ3VtZW50LCBhcyBkZXNjcmliZWQgdGhlcmUuCitSRVFVSVJFUyBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSBhZ2VudCB0byBxdWVyeQorYW5kIGF0IGxlYXN0IG9uZSBPSUQgYXJndW1lbnQsIGFzIGRlc2NyaWJlZCB0aGVyZS4gCiAuU0ggIkVYQU1QTEVTIgogVGhlIGNvbW1hbmQ6CiAuUFAKLSAgICBzbm1wZ2V0IC1jIHB1YmxpYyB6ZXVzIHN5c3RlbS5zeXNEZXNjci4wCisgICAgc25tcGdldCBcLWMgcHVibGljIHpldXMgc3lzdGVtLnN5c0Rlc2NyLjAKIC5QUAogd2lsbCByZXRyaWV2ZSB0aGUgdmFyaWFibGUgc3lzdGVtLnN5c0Rlc2NyLjAgZnJvbSB0aGUgaG9zdCAKIC5CIHpldXMgCkBAIC03OCwxMyArNzgsMTMgQEAKIHZhcmlhYmxlcyBpbiB0aGUgcmVxdWVzdCwgdGhlIHJlcXVlc3Qgd2lsbCBiZSByZXNlbnQgd2l0aG91dCB0aGUgYmFkCiB2YXJpYWJsZS4KIC5QUAotSGVyZSBpcyBhbm90aGVyIGV4YW1wbGUuIFRoZSAtYyBhbmQgLXYgb3B0aW9ucyBhcmUgZGVmaW5lZCBpbiB0aGUgCitIZXJlIGlzIGFub3RoZXIgZXhhbXBsZS4gVGhlIFwtYyBhbmQgXC12IG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIAogLkkgc25tcGNtZCgxKQogbWFudWFsIHBhZ2UuIChOb3RlIHRoYXQgc3lzdGVtLnN5c1VwVGltZSBpcyBhbiBpbmNvbXBsZXRlCiBPSUQsIGFzIGl0IG5lZWRzIHRoZSAuMCBpbmRleCBhcHBlbmRlZCB0byBpdCk6CiAuUFAKIC5uZgotICAgIHNubXBnZXQgLXYxIC1DZiAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNVcFRpbWUgc3lzdGVtLnN5c0NvbnRhY3QuMAorICAgIHNubXBnZXQgXC12MSBcLUNmIFwtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNVcFRpbWUgc3lzdGVtLnN5c0NvbnRhY3QuMAogLmZpCiAuUFAKIFRoaXMgZXhhbXBsZSB3aWxsIHJldHVybiB0aGUgZm9sbG93aW5nOgpAQCAtOTcsNyArOTcsNyBAQAogLlBQCiBTaW1pbGFybHksIHRoZSBjb21tYW5kOgogLm5mCi0gICAgc25tcGdldCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzVXBUaW1lIHN5c3RlbS5zeXNDb250YWN0LjAKKyAgICBzbm1wZ2V0IFwtdjEgXC1jIHB1YmxpYyBsb2NhbGhvc3Qgc3lzdGVtLnN5c1VwVGltZSBzeXN0ZW0uc3lzQ29udGFjdC4wCiAuZmkKIC5QUAogV2lsbCByZXR1cm46CkBAIC0xMTIsNyArMTEyLDcgQEAKIC5QUAogV2l0aCB0aGUKIC5CCi0tQ2YKK1wtQ2YKIGZsYWcgc3BlY2lmaWVkIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCB0cnkgdG8gZml4IHRoZSBQRFUgZm9yIHlvdS4KIC5TSCAiU0VFIEFMU08iCiBzbm1wY21kKDEpLCBzbm1wd2FsaygxKSwgdmFyaWFibGVzKDUpLgpkaWZmIC0tZ2l0IGEvbWFuL3NubXBnZXRuZXh0LjEuZGVmIGIvbWFuL3NubXBnZXRuZXh0LjEuZGVmCmluZGV4IDNiMTNkNGQuLmU2YzZlNjAgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wZ2V0bmV4dC4xLmRlZgorKysgYi9tYW4vc25tcGdldG5leHQuMS5kZWYKQEAgLTEsNyArMSw3IEBACiAuXCIgLSotIG5yb2ZmIC0qLQotLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gCi0uXCIgU2VlIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIKLS5cIiBjb3B5cmlnaHRzIHRoYXQgbWF5IGFwcGx5OgorLlwiIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4gIFNlZQorLlwiIHRoZSBOZXQtU05NUCBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cworLlwiIHRoYXQgbWF5IGFwcGx5OgogLlwiIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogLlwiIAlDb3B5cmlnaHQgMTk4OCwgMTk4OSBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQogLlwiIApAQCAtMjgsOSArMjgsOSBAQAogc25tcGdldG5leHQgLSBjb21tdW5pY2F0ZXMgd2l0aCBhIG5ldHdvcmsgZW50aXR5IHVzaW5nIFNOTVAgR0VUTkVYVCByZXF1ZXN0cwogLlNIIFNZTk9QU0lTCiAuQiBzbm1wZ2V0bmV4dAotW0NPTU1PTiBPUFRJT05TXSBbLUNmXSBBR0VOVCBPSUQgW09JRF0uLi4KK1tDT01NT04gT1BUSU9OU10gW1wtQ2ZdIEFHRU5UIE9JRCBbT0lEXS4uLgogLlNIIERFU0NSSVBUSU9OCi0uQiBzbm1wZ2V0CisuQiBzbm1wZ2V0bmV4dAogaXMgYW4gU05NUCBhcHBsaWNhdGlvbiB0aGF0IHVzZXMgdGhlIFNOTVAgR0VUTkVYVCByZXF1ZXN0IHRvIHF1ZXJ5IGZvcgogaW5mb3JtYXRpb24gb24gYSBuZXR3b3JrIGVudGl0eS4gIE9uZSBvciBtb3JlIG9iamVjdCBpZGVudGlmaWVycwogKE9JRHMpIG1heSBiZSBnaXZlbiBhcyBhcmd1bWVudHMgb24gdGhlIGNvbW1hbmQgbGluZS4gIEVhY2ggdmFyaWFibGUKQEAgLTQxLDcgKzQxLDcgQEAKIC5QUAogRm9yIGV4YW1wbGU6CiAuUFAKLXNubXBnZXRuZXh0IC1jIHB1YmxpYyB6ZXVzIGludGVyZmFjZXMuaWZUYWJsZS5pZkVudHJ5LmlmVHlwZS4xCitzbm1wZ2V0bmV4dCBcLWMgcHVibGljIHpldXMgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZUeXBlLjEKIC5QUAogd2lsbCByZXRyaWV2ZSB0aGUgdmFyaWFibGUgaW50ZXJmYWNlcy5pZlRhYmxlLmlmRW50cnkuaWZUeXBlLjI6CiAuUFAKQEAgLTUwLDExICs1MCwxMSBAQAogSWYgdGhlIG5ldHdvcmsgZW50aXR5IGhhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0IHBhY2tldCwgYW4KIGVycm9yIG1lc3NhZ2Ugd2lsbCBiZSBzaG93biwgaGVscGluZyB0byBwaW5wb2ludCBpbiB3aGF0IHdheSB0aGUKIHJlcXVlc3Qgd2FzIG1hbGZvcm1lZC4KLS5TSCBPUFRJT05TCisuU0ggIk9QVElPTlMiCiAuVFAgOAotLkIgLUNmCisuQiBcLUNmCiBJZgotLkIgLUNmCisuQiBcLUNmCiBpcwogLkkgbm90CiBzcGVjaWZpZWQsIHNvbWUgYXBwbGljYXRpb25zCkBAIC02OSw3ICs2OSw3IEBACiB0YWtlcyB0aGUgY29tbW9uIG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZQogLkkgc25tcGNtZCgxKQogbWFudWFsIHBhZ2UuCi1Ob3RlIHRoYXQKK05vdGUgdGhhdCAKIC5CIHNubXBnZXRuZXh0CiBSRVFVSVJFUyBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSBhZ2VudCB0byBxdWVyeQogYW5kIGF0IGxlYXN0IG9uZSBPSUQgYXJndW1lbnQsIGFzIGRlc2NyaWJlZCB0aGVyZS4KZGlmZiAtLWdpdCBhL21hbi9zbm1wbmV0c3RhdC4xLmRlZiBiL21hbi9zbm1wbmV0c3RhdC4xLmRlZgppbmRleCA4ZTE0NTBhLi40NTBhYjdmIDEwMDY0NAotLS0gYS9tYW4vc25tcG5ldHN0YXQuMS5kZWYKKysrIGIvbWFuL3NubXBuZXRzdGF0LjEuZGVmCkBAIC0xMiw3ICsxMiw3IEBACiAuXCIgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIAogLlwiIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQ01VIG5vdCBiZQogLlwiIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZQotLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIAorLlwiIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KIC5cIiAKIC5cIiBDTVUgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORwogLlwiIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTApAQCAtNTgsMjEgKzU4LDIxIEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBORVRTVEFUIDEgIjIwIEphbiAyMDEwIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgorLlRIIFNOTVBORVRTVEFUIDEgIjA0IE5vdiAyMDEzIiBWVkVSU0lPTklORk8gIk5ldC1TTk1QIgogLlNIIE5BTUUKIHNubXBuZXRzdGF0IFwtIGRpc3BsYXkgbmV0d29ya2luZyBzdGF0dXMgYW5kIGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZnJvbSBhIG5ldHdvcmsgZW50aXR5IHZpYSBTTk1QCiAuU0ggU1lOT1BTSVMKIC5CIHNubXBuZXRzdGF0Ci1bQ09NTU9OIE9QVElPTlNdIFstQ2FdIFstQ25dIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUNhXSBbXC1Dbl0gW1wtQ3ZdIFtcLUNmIGFkZHJlc3NfZmFtaWx5XSBBR0VOVAogLmJyCiAuQiBzbm1wbmV0c3RhdAotW0NPTU1PTiBPUFRJT05TXSBbLUNpXSBbLUNvXSBbLUNyXSBbLUNuXSBbLUNzXSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1Dcl0gW1wtQ25dIFtcLUN2XSBbXC1DZiBhZGRyZXNzX2ZhbWlseV0gQUdFTlQKIC5icgogLkIgc25tcG5ldHN0YXQKLVtDT01NT04gT1BUSU9OU10gWy1DaV0gWy1Dbl0gWy1DSSBpbnRlcmZhY2VdIEFHRU5UIFtpbnRlcnZhbF0KK1tDT01NT04gT1BUSU9OU10gW1wtQ2ldIFtcLUMgbyB8IGIgfCBkXSBbXC1Dbl0gW1wtQ3ZdIFtcLUNJIGludGVyZmFjZV0gW1wtQ3cgaW50ZXJ2YWxdIEFHRU5UCiAuYnIKIC5CIHNubXBuZXRzdGF0Ci1bQ09NTU9OIE9QVElPTlNdIFstQ2FdIFstQ25dIFstQ3NdIFstQ3AgcHJvdG9jb2xdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUNzW3NdXSBbXC1DcCBwcm90b2NvbF0gQUdFTlQKIC5TSCBERVNDUklQVElPTgogVGhlCiAuQiBzbm1wbmV0c3RhdCAKQEAgLTkxLDYgKzkxLDEyIEBACiB0cmFmZmljIG9uIHRoZSBjb25maWd1cmVkIG5ldHdvcmsgaW50ZXJmYWNlcy4KIFRoZSBmb3VydGggZm9ybSBkaXNwbGF5cyBzdGF0aXN0aWNzIGFib3V0IHRoZSBuYW1lZCBwcm90b2NvbC4KIC5QUAorLkIgc25tcG5ldHN0YXQKK3dpbGwgaXNzdWUgR0VUQlVMSyByZXF1ZXN0cyB0byBxdWVyeSBmb3IgaW5mb3JtYXRpb24KK2lmIGF0IGxlYXN0IHByb3RvY29sIHZlcnNpb24KKy5JIHYyCitpcyB1c2VkLgorLlBQCiBBR0VOVCBpZGVudGlmaWVzIGEgdGFyZ2V0IFNOTVAgYWdlbnQsIHdoaWNoIGlzCiBpbnN0cnVtZW50ZWQgdG8gbW9uaXRvciB0aGUgZ2l2ZW4gb2JqZWN0cy4KIEF0IGl0cyBzaW1wbGVzdCwgdGhlIEFHRU5UIHNwZWNpZmljYXRpb24gd2lsbApAQCAtMTA5LDE4ICsxMTUsMzIgQEAKIGZvciBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBjb21tb24gb3B0aW9ucwogYXMgd2VsbCBhcyB0aGVpciBkZXNjcmlwdGlvbnMuCiAuUFAKKy5CIFwtQ0wKK3VzZSB0aGUgbGVnYWN5IFNOTVAgTUlCIGVsZW1lbnRzLCBub3QgdGhlIG1vZGVybiBJUCB2ZXJzaW9uIGFnbm9zdGljCit0YWJsZXMuIFxmSXNubXBuZXRzdGF0XGZSICB3aWxsIGF1dG9tYXRpY2FsbHkgZmFsbCBiYWNrIHRvIHRoZSBsZWdhY3kKK3RhYmxlcyBpZiB0aGUgbW9kZXJuIG9uZXMgYXJlIG5vdCBhdmFpbGFibGUuCisuUFAKIC5CIFwtQ2EKIFdpdGggdGhlIGRlZmF1bHQgZGlzcGxheSwKIHNob3cgdGhlIHN0YXRlIG9mIGFsbCBzb2NrZXRzOyBub3JtYWxseSBzb2NrZXRzIHVzZWQgYnkKIHNlcnZlciBwcm9jZXNzZXMgYXJlIG5vdCBzaG93bi4KIC5QUAorLkJJIFwtQ2YgIiBhZGRyZXNzX2ZhbWlseSIKK09ubHkgc2hvdyBlbnRyaWVzIGZvciB0aGUgc2VsZWN0ZWQgYWRkcmVzcyBmYW1pbHkgKGluZXQsIGluZXQ2KQorLlBQCiAuQiBcLUNpCiBTaG93IHRoZSBzdGF0ZSBvZiBhbGwgb2YgdGhlIG5ldHdvcmsgaW50ZXJmYWNlcy4KLVRoZSAgaW50ZXJmYWNlICBkaXNwbGF5ICBwcm92aWRlcyAgYSAgdGFibGUgIG9mIGN1bXVsYXRpdmUKK1RoZSBpbnRlcmZhY2UgZGlzcGxheSBwcm92aWRlcyBhIHRhYmxlIG9mIGN1bXVsYXRpdmUKIHN0YXRpc3RpY3MgcmVnYXJkaW5nIHBhY2tldHMgdHJhbnNmZXJyZWQsIGVycm9ycywgYW5kIGNvbGxpc2lvbnMuCi1UaGUgIG5ldHdvcmsgYWRkcmVzc2VzIG9mIHRoZSBpbnRlcmZhY2UgYW5kIHRoZSBtYXhpbXVtIHRyYW5zbWlzc2lvbiAKK1RoZSBuZXR3b3JrIGFkZHJlc3NlcyBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUgbWF4aW11bSB0cmFuc21pc3Npb24gCiB1bml0IChgYG10dScnKSBhcmUgYWxzbyBkaXNwbGF5ZWQuCiAuUFAKKy5CIFwtQ2QKK0FkZCBkcm9wcGVkIHBhY2tldHMgdG8gdGhlIGludGVyZmFjZSBkaXNwbGF5LgorLlBQCisuQiBcLUNiCitTaG93IGFuIGV4dGVuZGVkIGludGVyZmFjZSBzdGF0dXMsIGdpdmluZyBvY3RldHMgaW4gYWRkaXRpb24gdG8gcGFja2V0cy4KKy5QUAogLkIgXC1DbwogU2hvdyBhbiBhYmJyZXZpYXRlZCBpbnRlcmZhY2Ugc3RhdHVzLCBnaXZpbmcgb2N0ZXRzIGluIHBsYWNlIG9mIHBhY2tldHMuCiBUaGlzIGlzIHVzZWZ1bCB3aGVuIGVucXVpcmluZyB2aXJ0dWFsIGludGVyZmFjZXMgKHN1Y2ggYXMgRnJhbWUtUmVsYXkgY2lyY3VpdHMpCkBAIC0xMzksNiArMTU5LDEwIEBACiBzeW1ib2xpY2FsbHkpLgogVGhpcyBvcHRpb24gbWF5IGJlIHVzZWQgd2l0aCBhbnkgb2YgdGhlIGRpc3BsYXkgZm9ybWF0cy4KIC5QUAorLkIgXC1DdgorQWxsb3cgbG9uZyBob3N0IG9yIHNlcnZpY2UgbmFtZXMgdG8gYnJlYWsgdGhlIGNvbHVtbmFyIG91dHB1dC4KK1RoaXMgb3B0aW9uIG1heSBiZSB1c2VkIHdpdGggYW55IG9mIHRoZSBkaXNwbGF5IGZvcm1hdHMuCisuUFAKIC5CSSBcLUNwICIgcHJvdG9jb2wiCiBTaG93IHN0YXRpc3RpY3MgYWJvdXQgCiAuSVIgcHJvdG9jb2wsCkBAIC0xNTIsMTkgKzE3NiwyMCBAQAogaXMgdW5rbm93biBvciBpZiB0aGVyZSBpcyBubyBzdGF0aXN0aWNzIHJvdXRpbmUgZm9yIGl0LgogLlBQCiAuQiBcLUNzCi1TaG93IHBlci1wcm90b2NvbCBzdGF0aXN0aWNzLiAgV2hlbiB1c2VkIHdpdGggdGhlCi0uQiBcLUNyCi1vcHRpb24sIHNob3cgcm91dGluZyBzdGF0aXN0aWNzIGluc3RlYWQuCitTaG93IHBlci1wcm90b2NvbCBzdGF0aXN0aWNzLgorSWYgdGhpcyBpcyBkdXBsaWNhdGVkICgtQ3NzKSBzdGF0aXN0aWNzIGVudHJpZXMgd2hpY2ggYXJlIHplcm8gd2lsbAorYmUgc3VwcHJlc3NlZC4KIC5QUAogLkIgXC1DcgogU2hvdyB0aGUgcm91dGluZyB0YWJsZXMuCi1XaGVuCi0uQiBcLUNzCi1pcyBhbHNvIHByZXNlbnQsIHNob3cgcGVyLXByb3RvY29sIHJvdXRpbmcgc3RhdGlzdGljcyBpbnN0ZWFkIG9mIAotdGhlIHJvdXRpbmcgdGFibGVzLgogLlBQCi1XaGVuICBzbm1wbmV0c3RhdCBpcyBpbnZva2VkIHdpdGggYW4gaW50ZXJ2YWwgYXJndW1lbnQsIGl0Ci1kaXNwbGF5cyBhIHJ1bm5pbmcgY291bnQgb2Ygc3RhdGlzdGljcyByZWxhdGVkIHRvICBuZXR3b3JrCisuQkkgXC1DUiAiIHJlcGVhdGVycyIKK0ZvciBHRVRCVUxLIHJlcXVlc3RzLAorLkkgcmVwZWF0ZXJzCitzcGVjaWZpZXMgdGhlIG1heC1yZXBlYXRlcnMgdmFsdWUgdG8gdXNlLgorLlBQCitXaGVuIHNubXBuZXRzdGF0IGlzIGludm9rZWQgd2l0aCBhbiBpbnRlcnZhbCBhcmd1bWVudCwgaXQKK2Rpc3BsYXlzIGEgcnVubmluZyBjb3VudCBvZiBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gbmV0d29yawogaW50ZXJmYWNlcy4KIC5JIGludGVydmFsCiBpcyB0aGUgbnVtYmVyIG9mIHNlY29uZHMgYmV0d2VlbgpAQCAtMTczLDQzICsxOTgsNDMgQEAKIC5JIFRoZSBBY3RpdmUgU29ja2V0cyBEaXNwbGF5IChkZWZhdWx0KQogLlBQCiBUaGUgZGVmYXVsdCBkaXNwbGF5LCBmb3IgYWN0aXZlIHNvY2tldHMsIHNob3dzIHRoZSBsb2NhbAotYW5kIHJlbW90ZSBhZGRyZXNzZXMsIHByb3RvY29sLCBhbmQgdGhlIGludGVybmFsIHN0YXRlICBvZgotdGhlICAgcHJvdG9jb2wuICAgIEFkZHJlc3MgICBmb3JtYXRzICAgYXJlICAgb2YgIHRoZSAgZm9ybQotYGBob3N0LnBvcnQnJyBvciBgYG5ldHdvcmsucG9ydCcnIGlmICBhICBzb2NrZXQncyAgYWRkcmVzcwotc3BlY2lmaWVzICBhICBuZXR3b3JrICBidXQgbm8gc3BlY2lmaWMgaG9zdCBhZGRyZXNzLiAgV2hlbgorYW5kIHJlbW90ZSBhZGRyZXNzZXMsIHByb3RvY29sLCBhbmQgdGhlIGludGVybmFsIHN0YXRlIG9mCit0aGUgcHJvdG9jb2wuICBBZGRyZXNzIGZvcm1hdHMgYXJlIG9mIHRoZSBmb3JtCitgYGhvc3QucG9ydCcnIG9yIGBgbmV0d29yay5wb3J0JycgaWYgYSBzb2NrZXQncyBhZGRyZXNzCitzcGVjaWZpZXMgYSBuZXR3b3JrIGJ1dCBubyBzcGVjaWZpYyBob3N0IGFkZHJlc3MuICBXaGVuCiBrbm93biwgdGhlIGhvc3QgYW5kIG5ldHdvcmsgYWRkcmVzc2VzIGFyZSBkaXNwbGF5ZWQgc3ltYm9saWNhbGx5Ci1hY2NvcmRpbmcgICB0byAgdGhlICBkYXRhICBiYXNlcyAKLS5JIC9ldGMvaG9zdHMgIGFuZAorYWNjb3JkaW5nIHRvIHRoZSBkYXRhYmFzZXMgCisuSSAvZXRjL2hvc3RzIGFuZAogLklSIC9ldGMvbmV0d29ya3MsCi1yZXNwZWN0aXZlbHkuICBJZiBhIHN5bWJvbGljICBuYW1lICBmb3IgIGFuCi1hZGRyZXNzICBpcyB1bmtub3duLCBvciBpZiB0aGUKK3Jlc3BlY3RpdmVseS4gIElmIGEgc3ltYm9saWMgbmFtZSBmb3IgYW4KK2FkZHJlc3MgaXMgdW5rbm93biwgb3IgaWYgdGhlCiAuQiBcLUNuCiBvcHRpb24gaXMgc3BlY2lmaWVkLCB0aGUKLWFkZHJlc3MgaXMgcHJpbnRlZCBudW1lcmljYWxseSwgYWNjb3JkaW5nIHRvICB0aGUgIGFkZHJlc3MKK2FkZHJlc3MgaXMgcHJpbnRlZCBudW1lcmljYWxseSwgYWNjb3JkaW5nIHRvIHRoZSBhZGRyZXNzCiBmYW1pbHkuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIEludGVybmV0IGBgZG90Ci1mb3JtYXQsJycgcmVmZXIgIHRvCitmb3JtYXQsJycgcmVmZXIgdG8KIC5JUiBpbmV0KDNOKS4KLVVuc3BlY2lmaWVkLCAgb3IgIGBgd2lsZGNhcmQnJywgYWRkcmVzc2VzIGFuZCBwb3J0cyBhcHBlYXIgYXMgYGAqJycuCitVbnNwZWNpZmllZCwgb3IgYGB3aWxkY2FyZCcnLCBhZGRyZXNzZXMgYW5kIHBvcnRzIGFwcGVhciBhcyBgYConJy4KIC5QUAogLkkgVGhlIEludGVyZmFjZSBEaXNwbGF5CiAuUFAKLVRoZSAgaW50ZXJmYWNlICBkaXNwbGF5ICBwcm92aWRlcyAgYSAgdGFibGUgIG9mIGN1bXVsYXRpdmUKK1RoZSBpbnRlcmZhY2UgZGlzcGxheSBwcm92aWRlcyBhIHRhYmxlIG9mIGN1bXVsYXRpdmUKIHN0YXRpc3RpY3MgcmVnYXJkaW5nIHBhY2tldHMgdHJhbnNmZXJyZWQsIGVycm9ycywgYW5kIGNvbC0KLWxpc2lvbnMuICAgVGhlICBuZXR3b3JrIGFkZHJlc3NlcyBvZiB0aGUgaW50ZXJmYWNlIGFuZCB0aGUKK2xpc2lvbnMuICBUaGUgbmV0d29yayBhZGRyZXNzZXMgb2YgdGhlIGludGVyZmFjZSBhbmQgdGhlCiBtYXhpbXVtIHRyYW5zbWlzc2lvbiB1bml0IChgYG10dScnKSBhcmUgYWxzbyBkaXNwbGF5ZWQuCiAuUFAKIC5JIFRoZSBSb3V0aW5nIFRhYmxlIERpc3BsYXkKIC5QUAotVGhlIHJvdXRpbmcgdGFibGUgZGlzcGxheSBpbmRpY2F0ZXMgdGhlICBhdmFpbGFibGUgIHJvdXRlcwotYW5kICB0aGVpciAgc3RhdHVzLiAgIEVhY2ggcm91dGUgY29uc2lzdHMgb2YgYSBkZXN0aW5hdGlvbgotaG9zdCBvciBuZXR3b3JrIGFuZCBhIGdhdGV3YXkgdG8gdXNlIGluICBmb3J3YXJkaW5nICBwYWNrLQotZXRzLiAgIFRoZSBmbGFncyBmaWVsZCBzaG93cyB0aGUgc3RhdGUgb2YgdGhlIHJvdXRlIChgYFUnJwotaWYgYGB1cCcnKSwgd2hldGhlciB0aGUgcm91dGUgaXMgIHRvICBhICBnYXRld2F5ICAoYGBHJycpLAotd2hldGhlciAgdGhlICByb3V0ZSAgd2FzIGNyZWF0ZWQgZHluYW1pY2FsbHkgYnkgYSByZWRpcmVjdAotKGBgRCcnKSwgYW5kIHdoZXRoZXIgdGhlIHJvdXRlICBoYXMgIGJlZW4gIG1vZGlmaWVkICBieSAgYQotcmVkaXJlY3QgIChgYE0nJykuICAgRGlyZWN0ICByb3V0ZXMgIGFyZSAgY3JlYXRlZCBmb3IgZWFjaAotaW50ZXJmYWNlIGF0dGFjaGVkIHRvIHRoZSBsb2NhbCBob3N0OyAgdGhlICBnYXRld2F5ICBmaWVsZAotZm9yICBzdWNoIGVudHJpZXMgc2hvd3MgdGhlIGFkZHJlc3Mgb2YgdGhlIG91dGdvaW5nIGludGVyLQorVGhlIHJvdXRpbmcgdGFibGUgZGlzcGxheSBpbmRpY2F0ZXMgdGhlIGF2YWlsYWJsZSByb3V0ZXMKK2FuZCB0aGVpciBzdGF0dXMuICBFYWNoIHJvdXRlIGNvbnNpc3RzIG9mIGEgZGVzdGluYXRpb24KK2hvc3Qgb3IgbmV0d29yayBhbmQgYSBnYXRld2F5IHRvIHVzZSBpbiBmb3J3YXJkaW5nIHBhY2stCitldHMuICBUaGUgZmxhZ3MgZmllbGQgc2hvd3MgdGhlIHN0YXRlIG9mIHRoZSByb3V0ZSAoYGBVJycKK2lmIGBgdXAnJyksIHdoZXRoZXIgdGhlIHJvdXRlIGlzIHRvIGEgZ2F0ZXdheSAoYGBHJycpLAord2hldGhlciB0aGUgcm91dGUgd2FzIGNyZWF0ZWQgZHluYW1pY2FsbHkgYnkgYSByZWRpcmVjdAorKGBgRCcnKSwgYW5kIHdoZXRoZXIgdGhlIHJvdXRlIGhhcyBiZWVuIG1vZGlmaWVkIGJ5IGEKK3JlZGlyZWN0IChgYE0nJykuICBEaXJlY3Qgcm91dGVzIGFyZSBjcmVhdGVkIGZvciBlYWNoCitpbnRlcmZhY2UgYXR0YWNoZWQgdG8gdGhlIGxvY2FsIGhvc3Q7IHRoZSBnYXRld2F5IGZpZWxkCitmb3Igc3VjaCBlbnRyaWVzIHNob3dzIHRoZSBhZGRyZXNzIG9mIHRoZSBvdXRnb2luZyBpbnRlci0KIGZhY2UuICBUaGUgaW50ZXJmYWNlIGVudHJ5IGluZGljYXRlcyB0aGUgbmV0d29yayBpbnRlcmZhY2UKIHV0aWxpemVkIGZvciB0aGUgcm91dGUuCiAuUFAKQEAgLTIyMCwxMCArMjQ1LDEwIEBACiBpcyBpbnZva2VkIHdpdGggYW4KIC5JIGludGVydmFsCiBhcmd1bWVudCwgaXQKLWRpc3BsYXlzIGEgcnVubmluZyBjb3VudCBvZiBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gIG5ldHdvcmsKLWludGVyZmFjZXMuICAgVGhpcyAgZGlzcGxheSAgY29uc2lzdHMgIG9mIGEgY29sdW1uIGZvciB0aGUKK2Rpc3BsYXlzIGEgcnVubmluZyBjb3VudCBvZiBzdGF0aXN0aWNzIHJlbGF0ZWQgdG8gbmV0d29yaworaW50ZXJmYWNlcy4gIFRoaXMgZGlzcGxheSBjb25zaXN0cyBvZiBhIGNvbHVtbiBmb3IgdGhlCiBwcmltYXJ5IGludGVyZmFjZSBhbmQgYSBjb2x1bW4gc3VtbWFyaXppbmcgaW5mb3JtYXRpb24gZm9yCi1hbGwgIGludGVyZmFjZXMuICAgVGhlICBwcmltYXJ5ICBpbnRlcmZhY2UgbWF5IGJlIHJlcGxhY2VkCithbGwgaW50ZXJmYWNlcy4gIFRoZSBwcmltYXJ5IGludGVyZmFjZSBtYXkgYmUgcmVwbGFjZWQKIHdpdGggYW5vdGhlciBpbnRlcmZhY2Ugd2l0aCB0aGUKIC5CIFwtQ0kKIG9wdGlvbi4gIFRoZSBmaXJzdCBsaW5lCkBAIC0yNDMsNyArMjY4LDcgQEAKIC5TSCBFWEFNUExFUwogRXhhbXBsZSBvZiB1c2luZyBzbm1wbmV0c3RhdCB0byBkaXNwbGF5IGFjdGl2ZSBzb2NrZXRzIChkZWZhdWx0KToKIC5QUAotJSBzbm1wbmV0c3RhdCAtdiAyYyAtYyBwdWJsaWMgLUNhIHRlc3Rob3N0CislIHNubXBuZXRzdGF0IFwtdiAyYyBcLWMgcHVibGljIFwtQ2EgdGVzdGhvc3QKIC5QUAogLm5mCiBBY3RpdmUgSW50ZXJuZXQgKHRjcCkgQ29ubmVjdGlvbnMgKGluY2x1ZGluZyBzZXJ2ZXJzKQpAQCAtMjY3LDcgKzI5Miw3IEBACiBcJi4uLgogLmZpCiAuUFAKLSUgc25tcG5ldHN0YXQgLXYgMmMgLWMgcHVibGljIC1DaSB0ZXN0aG9zdAorJSBzbm1wbmV0c3RhdCBcLXYgMmMgXC1jIHB1YmxpYyBcLUNpIHRlc3Rob3N0CiAuUFAKIC5uZgogTmFtZSAgICAgTXR1IE5ldHdvcmsgICAgQWRkcmVzcyAgICAgICAgICBJcGt0cyAgIEllcnJzICAgIE9wa3RzIE9lcnJzIFF1ZXVlCkBAIC0yNzgsNyArMzAzLDcgQEAKIEV4YW1wbGUgb2YgdXNpbmcgc25tcG5ldHN0YXQgdG8gc2hvdyBzdGF0aXN0aWNzIGFib3V0IGEgc3BlY2lmaWMgcHJvdG9jb2w6CiAuUFAKIC5uZgotJSBzbm1wbmV0c3RhdCAtdiAyYyAtYyBwdWJsaWMgLUNwIHRjcCB0ZXN0aG9zdAorJSBzbm1wbmV0c3RhdCBcLXYgMmMgXC1jIHB1YmxpYyBcLUNwIHRjcCB0ZXN0aG9zdAogCiBBY3RpdmUgSW50ZXJuZXQgKHRjcCkgQ29ubmVjdGlvbnMKIFByb3RvIExvY2FsIEFkZHJlc3MgICAgICAgICAgICAgICAgRm9yZWlnbiBBZGRyZXNzICAgICAgICAgICAgICAgICAoc3RhdGUpCmRpZmYgLS1naXQgYS9tYW4vc25tcHNldC4xLmRlZiBiL21hbi9zbm1wc2V0LjEuZGVmCmluZGV4IDM0NmFlM2EuLmIwYzRlMDcgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wc2V0LjEuZGVmCisrKyBiL21hbi9zbm1wc2V0LjEuZGVmCkBAIC0xLDcgKzEsNyBAQAogLlwiIC0qLSBucm9mZiAtKi0KLS5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuIAotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODgsIDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTg2LDEzICs4NiwxMyBAQAogLlBQCiBGb3IgZXhhbXBsZToKIC5QUAotc25tcHNldCAtYyBwcml2YXRlIC12IDEgdGVzdC1odWIgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGRwekBub2MucnV0Z2Vycy5lZHUgaXAuaXBmb3J3YXJkaW5nLjAgPSAyCitzbm1wc2V0IFwtYyBwcml2YXRlIFwtdiAxIHRlc3RcLWh1YiBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgZHB6QG5vYy5ydXRnZXJzLmVkdSBpcC5pcGZvcndhcmRpbmcuMCA9IDIKIC5QUAogd2lsbCBzZXQgdGhlIHZhcmlhYmxlcyBzeXNDb250YWN0LjAgYW5kIGlwRm9yd2FyZGluZy4wOgogLlBQCiBzeXN0ZW0uc3lzQ29udGFjdC4wID0gU1RSSU5HOiAiZHB6QG5vYy5ydXRnZXJzLmVkdSIKIC5icgotaXAuaXBGb3J3YXJkaW5nLjAgPSBJTlRFR0VSOiBub3QtZm9yd2FyZGluZygyKQoraXAuaXBGb3J3YXJkaW5nLjAgPSBJTlRFR0VSOiBub3RcLWZvcndhcmRpbmcoMikKIC5QUAogSWYgdGhlIG5ldHdvcmsgZW50aXR5IGhhcyBhbiBlcnJvciBwcm9jZXNzaW5nIHRoZSByZXF1ZXN0IHBhY2tldCwgYW4KIGVycm9yIHBhY2tldCB3aWxsIGJlIHJldHVybmVkIGFuZCBhIG1lc3NhZ2Ugd2lsbCBiZSBzaG93biwgaGVscGluZyB0bwpkaWZmIC0tZ2l0IGEvbWFuL3NubXBzdGF0dXMuMS5kZWYgYi9tYW4vc25tcHN0YXR1cy4xLmRlZgppbmRleCBiYmE0OGIzLi4xMTI2MTQ2IDEwMDY0NAotLS0gYS9tYW4vc25tcHN0YXR1cy4xLmRlZgorKysgYi9tYW4vc25tcHN0YXR1cy4xLmRlZgpAQCAtMzIsNyArMzIsNyBAQAogc25tcHN0YXR1cyAtIHJldHJpZXZlcyBhIGZpeGVkIHNldCBvZiBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIGZyb20gYSBuZXR3b3JrIGVudGl0eQogLlNIIFNZTk9QU0lTCiAuQiBzbm1wc3RhdHVzCi1bQ09NTU9OIE9QVElPTlNdIFstQ2ZdIEFHRU5UCitbQ09NTU9OIE9QVElPTlNdIFtcLUNmXSBBR0VOVAogLlNIIERFU0NSSVBUSU9OCiAuQiBzbm1wc3RhdHVzCiBpcyBhbiBTTk1QIGFwcGxpY2F0aW9uIHRoYXQgcmV0cmlldmVzIHNldmVyYWwgaW1wb3J0YW50IHN0YXRpc3RpY3MKQEAgLTY4LDcgKzY4LDcgQEAKIC5QUAogRm9yIGV4YW1wbGU6CiAuUFAKLXNubXBzdGF0dXMgLWMgcHVibGljIC12IDEgbmV0ZGV2LWtib3guY2MuY211LmVkdQorc25tcHN0YXR1cyBcLWMgcHVibGljIFwtdiAxIG5ldGRldlwta2JveC5jYy5jbXUuZWR1CiAuUFAKIHdpbGwgcHJvZHVjZSBvdXRwdXQgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgogLlBQCkBAIC05MCw3ICs5MCw3IEBACiAuQiBzbm1wc3RhdHVzCiB3aWxsIGF0dGVtcHQgdG8gcmVmb3JtIGl0cyByZXF1ZXN0IHRvIGVsaW1pbmF0ZSB0aGUgbWFsZm9ybWVkCiB2YXJpYWJsZSAodW5sZXNzIHRoZQotLkIgLUNmCisuQiBcLUNmCiBvcHRpb24gaXMgZ2l2ZW4sIHNlZSBiZWxvdyksIGJ1dCB0aGlzIHZhcmlhYmxlIHdpbGwgdGhlbiBiZSBtaXNzaW5nCiBmcm9tIHRoZSBkaXNwbGF5ZWQgZGF0YS4KIC5QUApAQCAtMTAyLDEwICsxMDIsMTAgQEAKIGZvciBhIGxpc3Qgb2YgcG9zc2libGUgdmFsdWVzIGZvciBDT01NT04gT1BUSU9OUwogYXMgd2VsbCBhcyB0aGVpciBkZXNjcmlwdGlvbnMuCiAuVFAKLS5CIC1DZgorLkIgXC1DZgogQnkgZGVmYXVsdCwgc25tcHN0YXR1cyB3aWxsIHRyeSB0byBmaXggZXJyb3JzIHJldHVybmVkCiBieSB0aGUgYWdlbnQgYW5kIHJldHJ5IGEgcmVxdWVzdC4gSW4gdGhpcyBzaXR1YXRpb24sCi10aGUgY29tbWFuZCB3aWxsIGRpc3BsYXkgdGhlIGRhdGEgdGhhdCBpdCBjYW4uIElmIHRoZSAtQ2Ygb3B0aW9uCit0aGUgY29tbWFuZCB3aWxsIGRpc3BsYXkgdGhlIGRhdGEgdGhhdCBpdCBjYW4uIElmIHRoZSBcLUNmIG9wdGlvbgogaXMgc3BlY2lmaWVkLCB0aGVuIHNubXBzdGF0dXMgd2lsbCBub3QgdHJ5IHRvIGZpeAogZXJyb3JzLCBhbmQgdGhlIGVycm9yIHdpbGwgY2F1c2UgdGhlIGNvbW1hbmQgdG8gdGVybWluYXRlLgogLlNIICJTRUUgQUxTTyIKZGlmZiAtLWdpdCBhL21hbi9zbm1wdGFibGUuMS5kZWYgYi9tYW4vc25tcHRhYmxlLjEuZGVmCmluZGV4IDU3NWIwMzQuLjRlNjVjYjQgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdGFibGUuMS5kZWYKKysrIGIvbWFuL3NubXB0YWJsZS4xLmRlZgpAQCAtMjAsMjggKzIwLDIxIEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBUQUJMRSAxICIwNiBTZXAgMjAwMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QVEFCTEUgMSAiMjUgSnVsIDIwMDMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHRhYmxlIC0gcmV0cmlldmUgYW4gU05NUCB0YWJsZSBhbmQgZGlzcGxheSBpdCBpbiB0YWJ1bGFyIGZvcm0KIC5TSCBTWU5PUFNJUwogLkIgc25tcHRhYmxlCi1bQ09NTU9OIE9QVElPTlNdIFstQ2JdIFstQ0JdIFstQ2hdIFstQ0hdIFstQ2ldIFstQ2YgU1RSSU5HXSBbLUN3IFdJRFRIXQotQUdFTlQgVEFCTEUtT0lECitbQ09NTU9OIE9QVElPTlNdIFtcLUNiXSBbXC1DQl0gW1wtQ2hdIFtcLUNIXSBbXC1DaV0gW1wtQ2YgU1RSSU5HXSBbXC1DdyBXSURUSF0KK0FHRU5UIFRBQkxFXC1PSUQKIC5TSCBERVNDUklQVElPTgogLkIgc25tcHRhYmxlCiBpcyBhbiBTTk1QIGFwcGxpY2F0aW9uIHRoYXQgcmVwZWF0ZWRseSB1c2VzIHRoZSBTTk1QIEdFVE5FWFQgb3IKIEdFVEJVTEsgcmVxdWVzdHMgdG8gcXVlcnkgZm9yIGluZm9ybWF0aW9uIG9uIGEgbmV0d29yayBlbnRpdHkuICBUaGUKLXBhcmFtZXRlcgotLkkgVEFCTEUtT0lECi1tdXN0IHNwZWNpZnkgYW4gU05NUCB0YWJsZS4KLS5QUAotc25tcHRhYmxlIGlzIGFuIFNOTVAgYXBwbGljYXRpb24gdGhhdCByZXBlYXRlZGx5IHVzZXMgdGhlCi1TTk1QIEdFVE5FWFQgb3IgR0VUQlVMSyByZXF1ZXN0cyB0byBxdWVyeSBmb3IgIGluZm9ybWF0aW9uCi1vbiBhIG5ldHdvcmsgZW50aXR5LiAgVGhlIHBhcmFtZXRlciBUQUJMRS1PSUQgbXVzdCBzcGVjaWZ5Ci1hbiBTTk1QIHRhYmxlLgorcGFyYW1ldGVyIFRBQkxFXC1PSUQgbXVzdCBzcGVjaWZ5IGFuIFNOTVAgdGFibGUuCiAKIEFHRU5UIGlkZW50aWZpZXMgYSB0YXJnZXQgU05NUCBhZ2VudCwgd2hpY2ggaXMgaW5zdHJ1bWVudGVkCi10byBtb25pdG9yIHRoZSBnaWV2biBvYmplY3RzLiAgQXQgaXRzIHNpbXBsZXN0LCB0aGUgQUdFTlQKK3RvIG1vbml0b3IgdGhlIGdpdmVuIG9iamVjdHMuICBBdCBpdHMgc2ltcGxlc3QsIHRoZSBBR0VOVAogc3BlY2lmaWNhdGlvbiB3aWxsIGNvbnNpc3Qgb2YgYSBob3N0bmFtZSBvciBhbiBJUHY0CiBhZGRyZXNzLiAgSW4gdGhpcyBzaXR1YXRpb24sIHRoZSBjb21tYW5kIHdpbGwgYXR0ZW1wdAogY29tbXVuaWNhdGlvbiB3aXRoIHRoZSBhZ2VudCwgdXNpbmcgVURQL0lQdjQgdG8gcG9ydCAxNjEKQEAgLTU3LDE5ICs1MCwxOSBAQAogZm9yIGEgbGlzdCBvZiBwb3NzaWJsZSB2YWx1ZXMgZm9yIENPTU1PTiBPUFRJT05TCiBhcyB3ZWxsIGFzIHRoZWlyIGRlc2NyaXB0aW9ucy4KIC5UUAotLkIgLUNiCisuQiBcLUNiCiBEaXNwbGF5IG9ubHkgYSBicmllZiBoZWFkaW5nLiBBbnkgY29tbW9uIHByZWZpeCBvZiB0aGUgdGFibGUgZmllbGQKIG5hbWVzIHdpbGwgYmUgZGVsZXRlZC4KIC5UUCAKLS5CIC1DQgorLkIgXC1DQgogRG8gbm90IHVzZSBHRVRCVUxLIHJlcXVlc3RzIHRvIHJldHJpZXZlIGRhdGEsIG9ubHkgR0VUTkVYVC4KIC5UUCAKLS5CSSAtQ2MgIiBDSEFSUyIKKy5CSSBcLUNjICIgQ0hBUlMiCiBQcmludCB0YWJsZSBpbiBjb2x1bW5zIG9mCiAuSSBDSEFSUwogY2hhcmFjdGVycyB3aWR0aC4KIC5UUAotLkJJIC1DZiAiIFNUUklORyIKKy5CSSBcLUNmICIgU1RSSU5HIgogVGhlIHN0cmluZwogLkkgU1RSSU5HCiBpcyB1c2VkIHRvIHNlcGFyYXRlIHRhYmxlIGNvbHVtbnMuICBXaXRoIHRoaXMgb3B0aW9uLCBlYWNoIHRhYmxlIGVudHJ5CkBAIC03NywyOCArNzAsMjggQEAKIHNlcGFyYXRlIHRoZSBjb2x1bW5zICh1c2VmdWwgaWYgeW91IHdhbnQgdG8gaW1wb3J0IGl0IGludG8gYQogZGF0YWJhc2UpLiAgT3RoZXJ3aXNlIGl0IGlzIHByaW50ZWQgaW4gbmljZWx5IGFsaWduZWQgY29sdW1ucy4KIC5UUAotLkIgLUNoCisuQiBcLUNoCiBEaXNwbGF5CiAuSSBvbmx5CiB0aGUgY29sdW1uIGhlYWRpbmdzLgogLlRQCi0uQiAtQ0gKKy5CIFwtQ0gKIERvIG5vdCBkaXNwbGF5IHRoZSBjb2x1bW4gaGVhZGluZ3MuCiAuVFAKLS5CIC1DaQorLkIgXC1DaQogVGhpcyBvcHRpb24gcHJlcGVuZHMgdGhlIGluZGV4IG9mIHRoZSBlbnRyeSB0byBhbGwgcHJpbnRlZCBsaW5lcy4KIC5UUAotLkIgLUNsCisuQiBcLUNsCiBMZWZ0IGp1c3RpZnkgdGhlIGRhdGEgaW4gZWFjaCBjb2x1bW4uCiAuVFAgCi0uQkkgLUNyICIgUkVQRUFURVJTIgorLkJJIFwtQ3IgIiBSRVBFQVRFUlMiCiBGb3IgR0VUQlVMSyByZXF1ZXN0cywgCiAuSSBSRVBFQVRFUlMKIHNwZWNpZmllcyB0aGUgbWF4LXJlcGVhdGVycyB2YWx1ZSB0byB1c2UuICBGb3IgR0VUTkVYVCByZXF1ZXN0cywKIC5JIFJFUEVBVEVSUwogc3BlY2lmaWVzIHRoZSBudW1iZXIgb2YgZW50cmllcyB0byByZXRyaWV2ZSBhdCBhIHRpbWUuCiAuVFAgCi0uQkkgLUN3ICIgV0lEVEgiCisuQkkgXC1DdyAiIFdJRFRIIgogU3BlY2lmaWVzIHRoZSB3aWR0aCBvZiB0aGUgbGluZXMgd2hlbiB0aGUgdGFibGUgaXMgcHJpbnRlZC4KIElmIHRoZSBsaW5lcyB3aWxsIGJlIGxvbmdlciwgdGhlIHRhYmxlIHdpbGwgYmUgcHJpbnRlZCBpbiBzZWN0aW9ucyBvZgogYXQgbW9zdCAKQEAgLTExNSwxNCArMTA4LDE0IEBACiAuSSBzbm1wY21kKDEpCiBtYW51YWwgcGFnZS4gIFRoaXMgT0lEIFxmQm11c3RcZlAgYmUgdGhhdCBvZiBhIE1JQiB0YWJsZSBvYmplY3QuCiAuU0ggRVhBTVBMRVMKLSQgc25tcHRhYmxlIC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3QgYXQuYXRUYWJsZQorJCBzbm1wdGFibGUgXC12IDJjIFwtYyBwdWJsaWMgbG9jYWxob3N0IGF0LmF0VGFibGUKIAotU05NUCB0YWJsZTogYXQuYXRUYWJsZSBSRkMxMjEzLU1JQjo6YXRUYWJsZQorU05NUCB0YWJsZTogYXQuYXRUYWJsZSBSRkMxMjEzXC1NSUI6OmF0VGFibGUKIAogYXRJZkluZGV4ICAgYXRQaHlzQWRkcmVzcyAgIGF0TmV0QWRkcmVzcwogICAgICAgICAxICA4OjA6MjA6MjA6MDphYiAxMzAuMjI1LjI0My4zMwogLlBQCi0kIHNubXB0YWJsZSAtdiAyYyAtYyBwdWJsaWMgLUNmICsgbG9jYWxob3N0IGF0LmF0VGFibGUKKyQgc25tcHRhYmxlIFwtdiAyYyBcLWMgcHVibGljIFwtQ2YgKyBsb2NhbGhvc3QgYXQuYXRUYWJsZQogCiBTTk1QIHRhYmxlOiBhdC5hdFRhYmxlCiAKQEAgLTEzMCw3ICsxMjMsNyBAQAogMSs4OjA6MjA6MjA6MDphYisxMzAuMjI1LjI0My4zMwogLlBQCiAubmYKLSQgc25tcHRhYmxlIGxvY2FsaG9zdCAtQ2wgLUNCIC1DaSAtT1ggLUNiIC1DYyAxNiAtQ3cgNjQgaWZUYWJsZQorJCBzbm1wdGFibGUgbG9jYWxob3N0IFwtQ2wgXC1DQiBcLUNpIFwtT1ggXC1DYiBcLUNjIDE2IFwtQ3cgNjQgaWZUYWJsZQogCiBTTk1QIHRhYmxlOiBpZlRhYmxlCiAKQEAgLTE1OSw3ICsxNTIsNyBAQAogLlBQCiAuU0ggIkJVR1MiCiBUaGUgdGVzdCBmb3IKLS5JIFRBQkxFLU9JRAorLkkgVEFCTEVcLU9JRAogYWN0dWFsbHkgc3BlY2lmeWluZyBhIHRhYmxlIGlzIHJhdGhlciBoZXVyaXN0aWMuICBOb3RlIGFsc28gdGhhdCB0aGUKIHRlc3QgcmVxdWlyZXMgdGhlIGRlZmluaW5nIE1JQiBmaWxlIHRvIGJlIGxvYWRlZC4KIC5QUApkaWZmIC0tZ2l0IGEvbWFuL3NubXB0ZXN0LjEuZGVmIGIvbWFuL3NubXB0ZXN0LjEuZGVmCmluZGV4IGMxZWRiNDguLmRmZGFlZDggMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdGVzdC4xLmRlZgorKysgYi9tYW4vc25tcHRlc3QuMS5kZWYKQEAgLTI3LDcgKzI3LDcgQEAKIC5cIiBVc2UgaXMgc3ViamVjdCB0byBsaWNlbnNlIHRlcm1zIHNwZWNpZmllZCBpbiB0aGUgQ09QWUlORyBmaWxlCiAuXCIgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KIC5cIiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0uVEggU05NUFRFU1QgMSAiMDYgU2VwIDIwMDMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFRFU1QgMSAiMjUgSnVsIDIwMDMiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHRlc3QgLSBjb21tdW5pY2F0ZXMgd2l0aCBhIG5ldHdvcmsgZW50aXR5IHVzaW5nIFNOTVAgcmVxdWVzdHMKIC5TSCBTWU5PUFNJUwpAQCAtNjIsNyArNjIsNyBAQAogLklSIHZhcmlhYmxlcyg1KSAuCiBGb3IgZXhhbXBsZToKIC5QUAotc25tcHRlc3QgLWMgcHVibGljIC12IDEgemV1cworc25tcHRlc3QgXC1jIHB1YmxpYyBcLXYgMSB6ZXVzCiAuYnIKIC5CUiBWYXJpYWJsZTogIiBzeXN0ZW0uc3lzRGVzY3IuMCIKIC5icgpAQCAtMTE0LDcgKzExNCw3IEBACiAuUFAKIEdFVE5FWFQgUmVxdWVzdDoKIC5QUAotVGhlICJHRVRORVhUIHJlcXVlc3QiIG1vZGUgKCROKSBpcyBzaW1sYXIgdG8gdGhlICJHZXQgcmVxdWVzdCIKK1RoZSAiR0VUTkVYVCByZXF1ZXN0IiBtb2RlICgkTikgaXMgc2ltaWxhciB0byB0aGUgIkdldCByZXF1ZXN0IgogbW9kZSwgZGVzY3JpYmVkIGFib3ZlLgogLlBQCiBTRVQgUmVxdWVzdDoKQEAgLTE3NSw3ICsxNzUsNyBAQAogLlBQCiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2Ygc2VuZGluZyBhIEdFVCByZXF1ZXN0IGZvciB0d28gT0lEczoKIC5QUAotJSBzbm1wdGVzdCAtdiAyYyAtYyBwdWJsaWMgdGVzdGhvc3Q6OTk5OQorJSBzbm1wdGVzdCBcLXYgMmMgXC1jIHB1YmxpYyB0ZXN0aG9zdDo5OTk5CiAuUFAKIC5uZgogVmFyaWFibGU6IHN5c3RlbS5zeXNEZXNjci4wCkBAIC0xODMsMTggKzE4MywxOCBAQAogVmFyaWFibGU6CiBSZWNlaXZlZCBHZXQgUmVzcG9uc2UgZnJvbSAxMjguMi41Ni4yMjAKIHJlcXVlc3RpZCAweDdEOUZDRDYzIGVycnN0YXQgMHgwIGVycmluZGV4IDB4MAotU05NUHYyLU1JQjo6c3lzRGVzY3IuMCA9IFNUUklORzogU3VuT1MgdGVzdGhvc3QgNS45IEdlbmVyaWNfMTEyMjMzLTAyIHN1bjR1Ci1TTk1QdjItTUlCOjpzeXNDb250YWN0LjAgPSBTVFJJTkc6IHgxMTExCitTTk1QdjJcLU1JQjo6c3lzRGVzY3IuMCA9IFNUUklORzogU3VuT1MgdGVzdGhvc3QgNS45IEdlbmVyaWNfMTEyMjMzXC0wMiBzdW40dQorU05NUHYyXC1NSUI6OnN5c0NvbnRhY3QuMCA9IFNUUklORzogeDExMTEKIC5maQogLlBQCiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2Ygc2VuZGluZyBhIEdFVE5FWFQgcmVxdWVzdDoKIC5QUAogLm5mCi1WYXJpYWJsZTogU05NUHYyLU1JQjo6c3lzT1JVcFRpbWUKK1ZhcmlhYmxlOiBTTk1QdjJcLU1JQjo6c3lzT1JVcFRpbWUKIFZhcmlhYmxlOgogUmVjZWl2ZWQgR2V0IFJlc3BvbnNlIGZyb20gMTI4LjIuNTYuMjIwCiByZXF1ZXN0aWQgMHg3RDlGQ0Q2NCBlcnJzdGF0IDB4MCBlcnJpbmRleCAweDAKLVNOTVB2Mi1NSUI6OnN5c09SVXBUaW1lLjEgPSBUaW1ldGlja3M6ICg2KSAwOjAwOjAwLjA2CitTTk1QdjJcLU1JQjo6c3lzT1JVcFRpbWUuMSA9IFRpbWV0aWNrczogKDYpIDA6MDA6MDAuMDYKIFZhcmlhYmxlOgogLmZpCiAuUFAKQEAgLTIwOSw3ICsyMDksNyBAQAogVmFyaWFibGU6CiBSZWNlaXZlZCBHZXQgUmVzcG9uc2UgZnJvbSAxMjguMi41Ni4yMjAKIHJlcXVlc3RpZCAweDdEOUZDRDY1IGVycnN0YXQgMHgwIGVycmluZGV4IDB4MAotU05NUHYyLU1JQjo6c3lzTG9jYXRpb24uMCA9IFNUUklORzogYnVpbGRpbmcgQQorU05NUHYyXC1NSUI6OnN5c0xvY2F0aW9uLjAgPSBTVFJJTkc6IGJ1aWxkaW5nIEEKIFZhcmlhYmxlOgogLmZpCiAuUFAKQEAgLTIyOCwxNyArMjI4LDE3IEBACiBXaGF0IHJlcGVhdCBjb3VudD8gMgogUmVjZWl2ZWQgR2V0IFJlc3BvbnNlIGZyb20gMTI4LjIuNTYuMjIwCiByZXF1ZXN0aWQgMHgyRUE3OTQyQSBlcnJzdGF0IDB4MCBlcnJpbmRleCAweDAKLVNOTVB2Mi1NSUI6OnN5c05hbWUuMCA9IFNUUklORzogdGVzdGhvc3QKLVNOTVB2Mi1NSUI6OnN5c09STGFzdENoYW5nZS4wID0gVGltZXRpY2tzOiAoNTgpIDA6MDA6MDAuNTgKLVNOTVB2Mi1NSUI6OnN5c0xvY2F0aW9uLjAgPSBTVFJJTkc6IGJsZGcgQQotU05NUHYyLU1JQjo6c3lzT1JJRC4xID0gT0lEOiBJRi1NSUI6OmlmTUlCCitTTk1QdjJcLU1JQjo6c3lzTmFtZS4wID0gU1RSSU5HOiB0ZXN0aG9zdAorU05NUHYyXC1NSUI6OnN5c09STGFzdENoYW5nZS4wID0gVGltZXRpY2tzOiAoNTgpIDA6MDA6MDAuNTgKK1NOTVB2MlwtTUlCOjpzeXNMb2NhdGlvbi4wID0gU1RSSU5HOiBibGRnIEEKK1NOTVB2MlwtTUlCOjpzeXNPUklELjEgPSBPSUQ6IElGXC1NSUI6OmlmTUlCCiBWYXJpYWJsZToKIC5maQogLlBQCiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4YW1wbGUgb2Ygc2VuZGluZyBhbiBJbmZvcm0gcmVxdWVzdDoKIC5QUAogLm5mCi1zbm1wdGVzdCAtdiAyYyAtYyBwdWJsaWMgc25tcHRyYXBkX2hvc3QKK3NubXB0ZXN0IFwtdiAyYyBcLWMgcHVibGljIHNubXB0cmFwZF9ob3N0CiBWYXJpYWJsZTogJEkKIFJlcXVlc3QgdHlwZSBpcyBJbmZvcm0gUmVxdWVzdAogKEFyZSB5b3Ugc2VuZGluZyB0byB0aGUgcmlnaHQgcG9ydD8pCkBAIC0yNTIsMTMgKzI1MiwxMyBAQAogLlBQCiBUaGUgc25tcHRyYXBkX2hvc3Qgd2lsbCBzaG93OgogLlBQCi1zbm1wdHJhcGRfaG9zdCBbPGlwIGFkZHJlc3M+XTogVHJhcCBTTk1QdjItTUlCOjpzeXNDb250YWN0LjAgPSBTVFJJTkc6Citzbm1wdHJhcGRfaG9zdCBbPGlwIGFkZHJlc3M+XTogVHJhcCBTTk1QdjJcLU1JQjo6c3lzQ29udGFjdC4wID0gU1RSSU5HOgogeDEyMzQ1CiAuUFAKIFRoZSBmb2xsb3dpbmcgaXMgYW4gZXhhbXBsZSBvZiBzZW5kaW5nIGFuIFNOTVB2MiBUcmFwIHJlcXVlc3Q6CiAuUFAKIC5uZgotc25tcHRlc3QgLXYgMmMgLWMgcHVibGljIHNubXB0cmFwZF9ob3N0Citzbm1wdGVzdCBcLXYgMmMgXC1jIHB1YmxpYyBzbm1wdHJhcGRfaG9zdAogVmFyaWFibGU6ICRUCiBSZXF1ZXN0IHR5cGUgaXMgU05NUHYyIFRyYXAgUmVxdWVzdAogKEFyZSB5b3Ugc2VuZGluZyB0byB0aGUgcmlnaHQgcG9ydD8pCkBAIC0yNzEsNyArMjcxLDcgQEAKIFRoZSBzbm1wdHJhcGRfaG9zdCB3aWxsIHNob3c6CiAuUFAKIC5uZgotc25tcHRyYXBkX2hvc3QgWzxpcCBhZGRyZXNzPl06IFRyYXAgU05NUHYyLU1JQjo6c3lzLjAgPSBTVFJJTkc6Citzbm1wdHJhcGRfaG9zdCBbPGlwIGFkZHJlc3M+XTogVHJhcCBTTk1QdjJcLU1JQjo6c3lzLjAgPSBTVFJJTkc6CiBidWlsZGluZyBhCiAuZmkKIC5TSCAiU0VFIEFMU08iCmRpZmYgLS1naXQgYS9tYW4vc25tcHRyYW5zbGF0ZS4xLmRlZiBiL21hbi9zbm1wdHJhbnNsYXRlLjEuZGVmCmluZGV4IDBmMzFhNTUuLjcyMWFmOTkgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdHJhbnNsYXRlLjEuZGVmCisrKyBiL21hbi9zbm1wdHJhbnNsYXRlLjEuZGVmCkBAIC0yNyw3ICsyNyw3IEBACiAuXCIgVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQogLlwiIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBUUkFOU0xBVEUgMSAiMjAgSnVsIDIwMTAiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFRSQU5TTEFURSAxICIxMyBOb3YgMjAxMyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wdHJhbnNsYXRlIC0gdHJhbnNsYXRlIE1JQiBPSUQgbmFtZXMgYmV0d2VlbiBudW1lcmljIGFuZCB0ZXh0dWFsIGZvcm1zCiAuU0ggU1lOT1BTSVMKQEAgLTQyLDE3ICs0MiwxNyBAQAogT0lEIGlzIGVpdGhlciBhIG51bWVyaWMgb3IgdGV4dHVhbCBvYmplY3QgaWRlbnRpZmllci4KIC5TSCBPUFRJT05TCiAuVFAgOAotLkIgLURcZklbVE9LRU5bLC4uLl1dCisuQiBcLURcZklbVE9LRU5bLC4uLl1dCiBUdXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBnaXZlbgogLklSICJUT0tFTiIgIihzKS4iCiBUcnkKIC5JUiBBTEwKIGZvciBleHRyZW1lbHkgdmVyYm9zZSBvdXRwdXQuCiAuVFAKLS5CIC1oCisuQiBcLWgKIERpc3BsYXkgYSBicmllZiB1c2FnZSBtZXNzYWdlIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CSSAtbSAiIE1JQkxJU1QiCisuQkkgXC1tICIgTUlCTElTVCIKIFNwZWNpZmllcyBhIGNvbG9uIHNlcGFyYXRlZCBsaXN0IG9mIE1JQiBtb2R1bGVzIHRvIGxvYWQgZm9yIHRoaXMKIGFwcGxpY2F0aW9uLiAgVGhpcyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQlMuCiAuSVAKQEAgLTYyLDE3ICs2MiwyMCBAQAogZmlsZXMuICBFdmVyeSBmaWxlIHdob3NlIG5hbWUgZG9lcyBub3QgYmVnaW4gd2l0aCAiLiIgd2lsbCBiZSBwYXJzZWQgYXMKIGlmIGl0IHdlcmUgYSBNSUIgZmlsZS4KIC5UUAotLkJJIC1NICIgRElSTElTVCIKKy5CSSBcLU0gIiBESVJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgZGlyZWN0b3JpZXMgdG8gc2VhcmNoIGZvciBNSUJzLgogVGhpcyBvdmVycmlkZXMgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlIE1JQkRJUlMuCiAuVFAKLS5CSSAtVCAiIFRSQU5TT1BUUyIKKy5CSSBcLVQgIiBUUkFOU09QVFMiCiBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIHRyYW5zbGF0aW9uIG9mIHRoZSBPSUQgdmFsdWVzLiAgVGhlCiBmb2xsb3dpbmcKIC5JIFRSQU5TT1BUUwogYXJlIGF2YWlsYWJsZToKIC5SUwogLlRQIDYKKy5CIFwtVEIKK1ByaW50IGFsbCBtYXRjaGluZyBvYmplY3RzIGZvciBhIHJlZ2V4IHNlYXJjaC4KKy5UUAogLkIgXC1UZAogUHJpbnQgZnVsbCBkZXRhaWxzIG9mIHRoZSBzcGVjaWZpZWQgT0lELgogLlRQCkBAIC05OCwyNCArMTAxLDI0IEBACiBEdW1wIGEgbnVtZXJpYyBhbmQgbGFiZWxlZCBmb3JtIG9mIGFsbCBvYmplY3RzIChjb21wYXRpYmxlIHdpdGggTUlCMlNDSEVNQSBmb3JtYXQpLgogLlJFCiAuVFAKLS5CIC1WCisuQiBcLVYKIERpc3BsYXkgdmVyc2lvbiBpbmZvcm1hdGlvbiBmb3IgdGhlIGFwcGxpY2F0aW9uIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CSSAtdyAiIFdJRFRIIgorLkJJIFwtdyAiIFdJRFRIIgogU3BlY2lmaWVzIHRoZSB3aWR0aCBvZgotLkIgLVRwCisuQiBcLVRwCiBhbmQKLS5CIC1UZAorLkIgXC1UZAogb3V0cHV0LiBUaGUgZGVmYXVsdCBpcyB2ZXJ5IGxhcmdlLgogLlBQCiBJbiBhZGRpdGlvbiB0byB0aGUgYWJvdmUgb3B0aW9ucywgCiAuQiBzbm1wdHJhbnNsYXRlCiB0YWtlcyB0aGUgT0lEIGlucHV0IAotLlJCICggLUkgKSwKKy5SQiAoIFwtSSApLAogTUlCIHBhcnNpbmcKLS5SQiAoIC1NICkKKy5SQiAoIFwtTSApCiBhbmQgT0lEIG91dHB1dAotLlJCICggLU8gKQorLlJCICggXC1PICkKIG9wdGlvbnMgZGVzY3JpYmVkIGluIHRoZSAKIC5CUiAiSU5QVVQgT1BUSU9OUyIgIiwgIiAiTUlCIFBBUlNJTkcgT1BUSU9OUyIgIiBhbmQgIiAiT1VUUFVUIE9QVElPTlMiCiBzZWN0aW9ucyBvZiB0aGUKQEAgLTEyMyw0MCArMTI2LDQwIEBACiBtYW51YWwgcGFnZS4KIC5TSCBFWEFNUExFUwogLklQIFwoYnUgNAotc25tcHRyYW5zbGF0ZSAtT24gLUlSIHN5c0Rlc2NyCitzbm1wdHJhbnNsYXRlIFwtT24gXC1JUiBzeXNEZXNjcgogLmJyCiB3aWxsIHRyYW5zbGF0ZSAic3lzRGVzY3IiIHRvIGEgbW9yZSBxdWFsaWZpZWQgZm9ybToKIC5JUAogc3lzdGVtLnN5c0Rlc2NyCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1PbmYgLUlSIHN5c0Rlc2NyCitzbm1wdHJhbnNsYXRlIFwtT25mIFwtSVIgc3lzRGVzY3IKIC5icgogd2lsbCB0cmFuc2xhdGUgInN5c0RlY3IiIHRvOgogLklQCi0uUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIuc3lzdGVtLnN5c0Rlc2NyCisuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yLnN5c3RlbS5zeXNEZXNjcgogLklQIFwoYnUgNCAKLXNubXB0cmFuc2xhdGUgLVRkIC1PUyBzeXN0ZW0uc3lzRGVzY3IKK3NubXB0cmFuc2xhdGUgXC1UZCBcLU9TIHN5c3RlbS5zeXNEZXNjcgogLmJyCiB3aWxsIHRyYW5zbGF0ZSAic3lzRGVjciIgaW50bzoKIC5JUAogLm5mCi1TTk1QdjItTUlCOjpzeXNEZXNjcgotc3lzRGVzY3IgT0JKRUNULVRZUEUKLSAgLS0gRlJPTSBTTk1QdjItTUlCCi0gIC0tIFRFWFRVQUwgQ09OVkVOVElPTiBEaXNwbGF5U3RyaW5nCitTTk1QdjJcLU1JQjo6c3lzRGVzY3IKK3N5c0Rlc2NyIE9CSkVDVFwtVFlQRQorICBcLVwtIEZST00gU05NUHYyXC1NSUIKKyAgXC1cLSBURVhUVUFMIENPTlZFTlRJT04gRGlzcGxheVN0cmluZwogICBTWU5UQVggT0NURVQgU1RSSU5HICgwLi4yNTUpCi0gIERJU1BMQVktSElOVCAiMjU1YSIKLSAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKKyAgRElTUExBWVwtSElOVCAiMjU1YSIKKyAgTUFYXC1BQ0NFU1MgcmVhZFwtb25seQogICBTVEFUVVMgY3VycmVudAogICBERVNDUklQVElPTiAiQSB0ZXh0dWFsIGRlc2NyaXB0aW9uIG9mIHRoZSBlbnRpdHkuIFRoaXMKICAgICAgICAgICAgICAgIHZhbHVlIHNob3VsZCBpbmNsdWRlIHRoZSBmdWxsIG5hbWUgYW5kCiAgICAgICAgICAgICAgICB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIG9mIHRoZSBzeXN0ZW0ncwotICAgICAgICAgICAgICAgaGFyZHdhcmUgdHlwZSwgc29mdHdhcmUgb3BlcmF0aW5nLXN5c3RlbSwKKyAgICAgICAgICAgICAgIGhhcmR3YXJlIHR5cGUsIHNvZnR3YXJlIG9wZXJhdGluZ1wtc3lzdGVtLAogICAgICAgICAgICAgICAgYW5kIG5ldHdvcmtpbmcgc29mdHdhcmUuIgotOjo9IHsgaXNvKDEpIG9yZygzKSBkb2QoNikgaW50ZXJuZXQoMSkgbWdtdCgyKSBtaWItMigxKSBzeXN0ZW0oMSkgMSB9Cis6Oj0geyBpc28oMSkgb3JnKDMpIGRvZCg2KSBpbnRlcm5ldCgxKSBtZ210KDIpIG1pYlwtMigxKSBzeXN0ZW0oMSkgMSB9CiAuZmkKIC5JUCBcKGJ1IDQgCi1zbm1wdHJhbnNsYXRlIC1UcCAtT1Mgc3lzdGVtCitzbm1wdHJhbnNsYXRlIFwtVHAgXC1PUyBzeXN0ZW0KIC5icgogd2lsbCBwcmludCB0aGUgZm9sbG93aW5nIHRyZWU6CiAuSVAKQEAgLTE5Niw3ICsxOTksNyBAQAogLmZpCiAuUFAKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLVRhIHwgaGVhZAorc25tcHRyYW5zbGF0ZSBcLVRhIHwgaGVhZAogLmJyCiB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBkdW1wOgogLklQCkBAIC0yMTQsNyArMjE3LDcgQEAKIC5maQogLlBQCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1UbCB8IGhlYWQKK3NubXB0cmFuc2xhdGUgXC1UbCB8IGhlYWQKIC5icgogd2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgZHVtcDoKIC5JUApAQCAtMjI0LDE1ICsyMjcsMTUgQEAKIC5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkKIC5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkuZGlyZWN0b3J5KDEpCiAuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikKLS5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWItMigxKQotLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYi0yKDEpLnN5c3RlbSgxKQotLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYi0yKDEpLnN5c3RlbSgxKS5zeXNEZXNjcigxKQotLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYi0yKDEpLnN5c3RlbSgxKS5zeXNPYmplY3RJRCgyKQotLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYi0yKDEpLnN5c3RlbSgxKS5zeXNVcFRpbWUoMykKKy5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWJcLTIoMSkKKy5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWJcLTIoMSkuc3lzdGVtKDEpCisuUkkgLmlzbygxKS5vcmcoMykuZG9kKDYpLmludGVybmV0KDEpLm1nbXQoMikubWliXC0yKDEpLnN5c3RlbSgxKS5zeXNEZXNjcigxKQorLlJJIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbnRlcm5ldCgxKS5tZ210KDIpLm1pYlwtMigxKS5zeXN0ZW0oMSkuc3lzT2JqZWN0SUQoMikKKy5SSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW50ZXJuZXQoMSkubWdtdCgyKS5taWJcLTIoMSkuc3lzdGVtKDEpLnN5c1VwVGltZSgzKQogLmZpCiAuUFAKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLVRvIHwgaGVhZAorc25tcHRyYW5zbGF0ZSBcLVRvIHwgaGVhZAogLmJyCiB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBkdW1wCiAuSVAKQEAgLTI1MCw3ICsyNTMsNyBAQAogLmZpCiAuUFAKIC5JUCBcKGJ1IDQKLXNubXB0cmFuc2xhdGUgLVRzIHwgaGVhZAorc25tcHRyYW5zbGF0ZSBcLVRzIHwgaGVhZAogLmJyCiB3aWxsIHByb2R1Y2UgdGhlIGZvbGxvd2luZyBkdW1wCiAuSVAKQEAgLTI2MCwxNSArMjYzLDE1IEBACiAuUkkgLmlzby5vcmcuZG9kLmludGVybmV0CiAuUkkgLmlzby5vcmcuZG9kLmludGVybmV0LmRpcmVjdG9yeQogLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Ci0uUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliLTIKLS5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0KLS5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0uc3lzRGVzY3IKLS5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0uc3lzT2JqZWN0SUQKLS5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWItMi5zeXN0ZW0uc3lzVXBUaW1lCisuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yCisuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yLnN5c3RlbQorLlJJIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYlwtMi5zeXN0ZW0uc3lzRGVzY3IKKy5SSSAuaXNvLm9yZy5kb2QuaW50ZXJuZXQubWdtdC5taWJcLTIuc3lzdGVtLnN5c09iamVjdElECisuUkkgLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliXC0yLnN5c3RlbS5zeXNVcFRpbWUKIC5maQogLlBQCiAuSVAgXChidSA0Ci1zbm1wdHJhbnNsYXRlIC1UdCB8IGhlYWQKK3NubXB0cmFuc2xhdGUgXC1UdCB8IGhlYWQKIC5icgogd2lsbCBwcm9kdWNlIHRoZSBmb2xsb3dpbmcgZHVtcAogLklQCkBAIC0yNzgsNyArMjgxLDcgQEAKICAgICAgIGludGVybmV0KDEpIHR5cGU9MAogICAgICAgICBkaXJlY3RvcnkoMSkgdHlwZT0wCiAgICAgICAgIG1nbXQoMikgdHlwZT0wCi0gICAgICAgICAgbWliLTIoMSkgdHlwZT0wCisgICAgICAgICAgbWliXC0yKDEpIHR5cGU9MAogICAgICAgICAgICAgc3lzdGVtKDEpIHR5cGU9MAogICAgICAgICAgICAgICBzeXNEZXNjcigxKSB0eXBlPTIgdGM9NCBoaW50PTI1NWEKICAgICAgICAgICAgICAgc3lzT2JqZWN0SUQoMikgdHlwZT0xCmRpZmYgLS1naXQgYS9tYW4vc25tcHRyYXAuMS5kZWYgYi9tYW4vc25tcHRyYXAuMS5kZWYKaW5kZXggMDlhZWM3OS4uNTVjMTlkMSAxMDA2NDQKLS0tIGEvbWFuL3NubXB0cmFwLjEuZGVmCisrKyBiL21hbi9zbm1wdHJhcC4xLmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAKLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg4LCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC0yNywxMyArMjcsMTMgQEAKIC5TSCBOQU1FCiBzbm1wdHJhcCwgc25tcGluZm9ybSAtIHNlbmRzIGFuIFNOTVAgbm90aWZpY2F0aW9uIHRvIGEgbWFuYWdlcgogLlNIIFNZTk9QU0lTCi0uQiBzbm1wdHJhcCAtdiAxCisuQiBzbm1wdHJhcCBcLXYgMQogW0NPTU1PTiBPUFRJT05TXSBBR0VOVCBlbnRlcnByaXNlLW9pZCBhZ2VudCBnZW5lcmljLXRyYXAgc3BlY2lmaWMtdHJhcCB1cHRpbWUgW09JRCBUWVBFIFZBTFVFXS4uLgogLlBQCi0uQiBzbm1wdHJhcCAtdiBbMmN8M10KLVtDT01NT04gT1BUSU9OU10gWy1DaV0gQUdFTlQgdXB0aW1lIHRyYXAtb2lkIFtPSUQgVFlQRSBWQUxVRV0uLi4KKy5CIHNubXB0cmFwIFwtdiBbMmN8M10KK1tDT01NT04gT1BUSU9OU10gW1wtQ2ldIEFHRU5UIHVwdGltZSB0cmFwLW9pZCBbT0lEIFRZUEUgVkFMVUVdLi4uCiAuUFAKLS5CIHNubXBpbmZvcm0gLXYgWzJjfDNdCisuQiBzbm1waW5mb3JtIFwtdiBbMmN8M10KIFtDT01NT04gT1BUSU9OU10gQUdFTlQgdXB0aW1lIHRyYXAtb2lkIFtPSUQgVFlQRSBWQUxVRV0uLi4KIC5TSCBERVNDUklQVElPTgogLkIgc25tcHRyYXAKQEAgLTQ3LDcgKzQ3LDcgQEAKIFdoZW4gaW52b2tlZCBhcwogLkIgc25tcGluZm9ybSwKIG9yIHdoZW4KLS5CIC1DaQorLkIgXC1DaQogaXMgYWRkZWQgdG8gdGhlIGNvbW1hbmQgbGluZSBmbGFncyBvZiBzbm1wdHJhcCwgaXQgc2VuZHMgYW4KIElORk9STS1QRFUsIGV4cGVjdGluZyBhIHJlc3BvbnNlIGZyb20gdGhlIHRyYXAgcmVjZWl2ZXIsCiByZXRyYW5zbWl0dGluZyBpZiByZXF1aXJlZC4gIE90aGVyd2lzZSBpdCBzZW5kcyBhbiBUUkFQLVBEVSBvcgpAQCAtMTExLDcgKzExMSw3IEBACiAuUFAKIEZvciBleGFtcGxlOgogLlBQCi1zbm1wdHJhcCAtdiAxIC1jIHB1YmxpYyBtYW5hZ2VyIGVudGVycHJpc2VzLnNwaWRlciB0ZXN0LWh1YiAzIDAgJycgaW50ZXJmYWNlcy5pZnRhYmxlLmlmZW50cnkuaWZpbmRleC4xIGkgMQorc25tcHRyYXAgXC12IDEgXC1jIHB1YmxpYyBtYW5hZ2VyIGVudGVycHJpc2VzLnNwaWRlciB0ZXN0XC1odWIgMyAwICcnIGludGVyZmFjZXMuaWZ0YWJsZS5pZmVudHJ5LmlmaW5kZXguMSBpIDEKIC5QUAogd2lsbCBzZW5kIGEgZ2VuZXJpYyBsaW5rVXAgdHJhcCB0byBtYW5hZ2VyLCBmb3IgaW50ZXJmYWNlIDEuCiAuU0ggT1BUSU9OUwpAQCAtMTIwLDcgKzEyMCw3IEBACiAuSSBzbm1wY21kKDEpIAogbWFudWFsIHBhZ2UgaW4KIGFkZGl0aW9uIHRvIHRoZSAKLS5CIC1DaQorLkIgXC1DaQogb3B0aW9uIGRlc2NyaWJlZCBhYm92ZS4KIE5vdGUgdGhhdAogLkIgc25tcHRyYXAKZGlmZiAtLWdpdCBhL21hbi9zbm1wdHJhcGQuOC5kZWYgYi9tYW4vc25tcHRyYXBkLjguZGVmCmluZGV4IDI5ZDU2NWEuLjQ1YmQwMzQgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdHJhcGQuOC5kZWYKKysrIGIvbWFuL3NubXB0cmFwZC44LmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LgotLlwiIFNlZSB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyCi0uXCIgY29weXJpZ2h0cyB0aGF0IG1heSBhcHBseToKKy5cIiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQuICBTZWUKKy5cIiB0aGUgTmV0LVNOTVAgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKy5cIiB0aGF0IG1heSBhcHBseToKIC5cIiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKIC5cIiAJQ29weXJpZ2h0IDE5ODkgYnkgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkKIC5cIiAKQEAgLTIzLDcgKzIzLDcgQEAKIC5cIiBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCiAuXCIgU09GVFdBUkUuCiAuXCIgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotLlRIIFNOTVBUUkFQRCA4ICIzMCBNYXIgMjAxMSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QVFJBUEQgOCAiMjcgQXByIDIwMTQiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHRyYXBkIC0gUmVjZWl2ZSBhbmQgbG9nIFNOTVAgdHJhcCBtZXNzYWdlcy4KIC5TSCBTWU5PUFNJUwpAQCAtMzksOTIgKzM5LDg4IEBACiBtdXN0IHR5cGljYWxseSBiZSBydW4gYXMgcm9vdC4KIC5TSCBPUFRJT05TCiAuVFAgOAotLkIgLWEKKy5CIFwtYQogSWdub3JlIGF1dGhlbnRpY2F0aW9uRmFpbHVyZSB0cmFwcy4KIC5UUAotLkIgLUEKKy5CIFwtQQogQXBwZW5kIHRvIHRoZSBsb2cgZmlsZSByYXRoZXIgdGhhbiB0cnVuY2F0aW5nIGl0LgogCi1Ob3RlIHRoYXQgdGhpcyBuZWVkcyB0byBjb21lIFxmSWJlZm9yZVxmUCBhbnkgLUxmIG9wdGlvbnMKK05vdGUgdGhhdCB0aGlzIG5lZWRzIHRvIGNvbWUgXGZJYmVmb3JlXGZQIGFueSBcLUxmIG9wdGlvbnMKIHRoYXQgaXQgc2hvdWxkIGFwcGx5IHRvLgogLlRQCi0uQkkgIi1jIiAiIEZJTEUiCisuQkkgIlwtYyIgIiBGSUxFIgogUmVhZCAKIC5JIEZJTEUKLWFzIGEgY29uZmlndXJhdGlvbiBmaWxlLgorYXMgYSBjb25maWd1cmF0aW9uIGZpbGUKKyhvciBhIGNvbW1hLXNlcGFyYXRlZCBsaXN0IG9mIGNvbmZpZ3VyYXRpb24gZmlsZXMpLgogLlRQCi0uQiAtQworLkIgXC1DCiBEbyBub3QgcmVhZCBhbnkgY29uZmlndXJhdGlvbiBmaWxlcyBleGNlcHQgdGhlIG9uZSBvcHRpb25hbGx5IHNwZWNpZmllZCBieSB0aGUgCi0uQiAtYyAKKy5CIFwtYyAKIG9wdGlvbi4KIC5UUAotLkIgLWQKKy5CIFwtZAogRHVtcCAoaW4gaGV4YWRlY2ltYWwpIHRoZSBzZW50IGFuZCByZWNlaXZlZCBTTk1QIHBhY2tldHMuCiAuVFAKLS5CSSAtRFtUT0tFTlssLi4uXV0KKy5CSSBcLURbVE9LRU5bLC4uLl1dCiBUdXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBnaXZlbgogLklSICJUT0tFTiIgIihzKS4iCiBUcnkKIC5JUiBBTEwKIGZvciBleHRyZW1lbHkgdmVyYm9zZSBvdXRwdXQuCiAuVFAKLS5CIC1lCi1QcmludCBldmVudCBudW1iZXJzIChyaXNpbmcvZmFsbGluZyBhbGFybSBldGMuKSBmcm9tIHRoZSAob2Jzb2xldGUpIE0yTS1NSUIuCi0uYnIKLVRoaXMgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyBkZXByZWNhdGVkIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gZHVlIGNvdXJzZS4KLS5UUAotLkIgLWYKKy5CIFwtZgogRG8gbm90IGZvcmsoKSBmcm9tIHRoZSBjYWxsaW5nIHNoZWxsLgogLlRQCi0uQkkgLUYgIiBGT1JNQVQiCisuQkkgXC1GICIgRk9STUFUIgogV2hlbiBsb2dnaW5nIHRvIHN0YW5kYXJkIG91dHB1dCwgdXNlIHRoZSBmb3JtYXQgaW4gdGhlIHN0cmluZwogLklSIEZPUk1BVCAuCiBTZWUgdGhlIHNlY3Rpb24KIC5CIEZPUk1BVCBTUEVDSUZJQ0FUSU9OUwogYmVsb3cgZm9yIG1vcmUgZGV0YWlscy4KIC5UUAotLkIgLWgsIC0taGVscAorLkIgXC1oLCBcLVwtaGVscAogRGlzcGxheSBhIGJyaWVmIHVzYWdlIG1lc3NhZ2UgYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLUgKKy5CIFwtSAogRGlzcGxheSBhIGxpc3Qgb2YgY29uZmlndXJhdGlvbiBmaWxlIGRpcmVjdGl2ZXMgdW5kZXJzdG9vZCBieSB0aGUKIHRyYXAgZGFlbW9uIGFuZCB0aGVuIGV4aXQuCiAuVFAKLS5CIC1JIFxmSVstXUlOSVRMSVNUCisuQiBcLUkgXGZJW1wtXUlOSVRMSVNUCiBTcGVjaWZpZXMgd2hpY2ggbW9kdWxlcyBzaG91bGQgKG9yIHNob3VsZCBub3QpIGJlIGluaXRpYWxpemVkCiB3aGVuIHNubXB0cmFwZCBzdGFydHMgdXAuICBJZiB0aGUgY29tbWEtc2VwYXJhdGVkCiAuSSBJTklUTElTVAogaXMgcHJlY2VkZWQKLXdpdGggYSAnLScsIGl0IGlzIHRoZSBsaXN0IG9mIG1vZHVsZXMgdGhhdCBzaG91bGQgXGZJbm90XGZSIGJlIHN0YXJ0ZWQuCit3aXRoIGEgJ1wtJywgaXQgaXMgdGhlIGxpc3Qgb2YgbW9kdWxlcyB0aGF0IHNob3VsZCBcZklub3RcZlIgYmUgc3RhcnRlZC4KIE90aGVyd2lzZSB0aGlzIGlzIHRoZSBsaXN0IG9mIHRoZSBcZklvbmx5XGZSIG1vZHVsZXMgdGhhdCBzaG91bGQgYmUgc3RhcnRlZC4KIAogVG8gZ2V0IGEgbGlzdCBvZiBjb21waWxlZCBtb2R1bGVzLCBydW4gc25tcHRyYXBkIHdpdGggdGhlIGFyZ3VtZW50cwotLkkgIi1EbWliX2luaXQgLUgiCisuSSAiXC1EbWliX2luaXQgXC1IIgogKGFzc3VtaW5nIGRlYnVnZ2luZyBzdXBwb3J0IGhhcyBiZWVuIGNvbXBpbGVkIGluKS4KIC5UUAotLkIgLUxbZWZvc10KKy5CIFwtTFtlZm9zXQogU3BlY2lmeSB3aGVyZSBsb2dnaW5nIG91dHB1dCBzaG91bGQgYmUgZGlyZWN0ZWQgKHN0YW5kYXJkIGVycm9yIG9yIG91dHB1dCwKIHRvIGEgZmlsZSBvciB2aWEgc3lzbG9nKS4gIFNlZSBMT0dHSU5HIE9QVElPTlMgaW4gXGZJc25tcGNtZCgxKVxmUiBmb3IgZGV0YWlscy4KIC5UUAotLkJSIC1tICIgXGZJTUlCTElTVCIKKy5CUiBcLW0gIiBcZklNSUJMSVNUIgogU3BlY2lmaWVzIGEgY29sb24gc2VwYXJhdGVkIGxpc3Qgb2YgTUlCIG1vZHVsZXMgdG8gbG9hZCBmb3IgdGhpcwogYXBwbGljYXRpb24uICBUaGlzIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCUy4KIFNlZSBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogLlRQCi0uQlIgLU0gIiBcZklESVJMSVNUIgorLkJSIFwtTSAiIFxmSURJUkxJU1QiCiBTcGVjaWZpZXMgYSBjb2xvbiBzZXBhcmF0ZWQgbGlzdCBvZiBkaXJlY3RvcmllcyB0byBzZWFyY2ggZm9yIE1JQnMuCiBUaGlzIG92ZXJyaWRlcyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgTUlCRElSUy4KIFNlZSBcZklzbm1wY21kKDEpXGZSIGZvciBkZXRhaWxzLgogLlRQCi0uQlIgLW4KKy5CUiBcLW4KIERvIG5vdCBhdHRlbXB0IHRvIHRyYW5zbGF0ZSBzb3VyY2UgYWRkcmVzc2VzIG9mIGluY29taW5nIHBhY2tldHMgaW50bwogaG9zdG5hbWVzLgogLlRQCi0uQkkgLXAgIiBGSUxFIgorLkJJIFwtcCAiIEZJTEUiCiBTYXZlIHRoZSBwcm9jZXNzIElEIG9mIHRoZSB0cmFwIGRhZW1vbiBpbgogLklSIEZJTEUgIi4iCiAuVFAKLS5CSSAtTyAiIFthYmVFZm5xUXNTdFR1VXZ4WF0iCisuQkkgXC1PICIgW2FiZUVmbnFRc1N0VHVVdnhYXSIKIFNwZWNpZmllcyBob3cgTUlCIG9iamVjdHMgYW5kIG90aGVyIG91dHB1dCBzaG91bGQgYmUgZGlzcGxheWVkLgogU2VlIHRoZSBzZWN0aW9uCiAuQiBPVVRQVVQgT1BUSU9OUwpAQCAtMTMyLDIyICsxMjgsMjUgQEAKIC5JIHNubXBjbWQoMSkKIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgogLlRQCi0uQkkgLXQKKy5CSSBcLXQKIERvIG5vdCBsb2cgdHJhcHMgdG8gc3lzbG9nLiAgVGhpcyBkaXNhYmxlcyBsb2dnaW5nIHRvIHN5c2xvZy4gIFRoaXMgaXMKIHVzZWZ1bCBpZiB5b3Ugd2FudCB0aGUgc25tcHRyYXBkIGFwcGxpY2F0aW9uIHRvCiAuQiBvbmx5CiBydW4gdHJhcGhhbmRsZSBob29rcyBhbmQgbm90IHRvIGxvZyBhbnkgdHJhcHMgdG8gYW55IGxvY2F0aW9uLgogLlRQCi0uQiAtdiwgLS12ZXJzaW9uCisuQiBcLXYsIFwtXC12ZXJzaW9uCiBQcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGZvciB0aGUgdHJhcCBkYWVtb24gYW5kIHRoZW4gZXhpdC4KIC5UUAotLkIgLXggXGZJQUREUkVTUworLkIgXC14IFxmSUFERFJFU1MKIENvbm5lY3QgdG8gdGhlIEFnZW50WCBtYXN0ZXIgYWdlbnQgb24gdGhlIHNwZWNpZmllZCBhZGRyZXNzLAogcmF0aGVyIHRoYW4gdGhlIGRlZmF1bHQgQUdFTlRYX1NPQ0tFVC4KIFNlZSBcZklzbm1wZCg4KVxmUiBmb3IgZGV0YWlscyBvZiB0aGUgZm9ybWF0IG9mIHN1Y2ggYWRkcmVzc2VzLgogLlRQCi0uQkkgLS0gIm5hbWUiPSJ2YWx1ZSIKLUFsbG93cyB0byBzcGVjaWZ5IGFueSB0b2tlbiAoIm5hbWUiKSBzdXBwb3J0ZWQgaW4gdGhlCisuQiBcLVgKK0RvIG5vdCBjb25uZWN0IHRvIGEgQWdlbnRYIG1hc3RlciBhZ2VudAorLlRQCisuQkkgXC1cLSAibmFtZSI9InZhbHVlIgorQWxsb3dzIG9uZSB0byBzcGVjaWZ5IGFueSB0b2tlbiAoIm5hbWUiKSBzdXBwb3J0ZWQgaW4gdGhlCiAuSSBzbm1wdHJhcGQuY29uZgogZmlsZSBhbmQgc2V0cyBpdHMgdmFsdWUgdG8gInZhbHVlIi4gT3ZlcnJpZGVzIHRoZSBjb3JyZXNwb25kaW5nIHRva2VuIGluIHRoZQogLkkgc25tcHRyYXBkLmNvbmYKQEAgLTE2NiwyMSArMTY1LDI2IEBACiBhIGxpdGVyYWwgJQogLlRQCiAuQiAlYQotdGhlIGNvbnRlbnRzIG9mIHRoZSBhZ2VudC1hZGRyIGZpZWxkIG9mIHRoZSBQRFUgKHYxIFRSQVBzIG9ubHkpCit0aGUgY29udGVudHMgb2YgdGhlIGFnZW50XC1hZGRyIGZpZWxkIG9mIHRoZSBQRFUgKHYxIFRSQVBzIG9ubHkpCiAuVFAKIC5CICVBCi10aGUgaG9zdG5hbWUgY29ycmVzcG9uZGluZyB0byB0aGUgY29udGVudHMgb2YgdGhlIGFnZW50LWFkZHIgZmllbGQgb2YKLXRoZSBQRFUsIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIHRoZSBjb250ZW50cyBvZiB0aGUgYWdlbnQtYWRkciBmaWVsZAordGhlIGhvc3RuYW1lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGNvbnRlbnRzIG9mIHRoZSBhZ2VudFwtYWRkciBmaWVsZCBvZgordGhlIFBEVSwgaWYgYXZhaWxhYmxlLCBvdGhlcndpc2UgdGhlIGNvbnRlbnRzIG9mIHRoZSBhZ2VudFwtYWRkciBmaWVsZAogb2YgdGhlIFBEVSAodjEgVFJBUHMgb25seSkuCiAuVFAKIC5CICViCi1QRFUgc291cmNlIGFkZHJlc3MgKE5vdGU6IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElQdjQKLWFkZHJlc3MpCitQRFUgdHJhbnNwb3J0IGFkZHJlc3MgKE5vdGU6IHRoaXMgaXMgbm90IG5lY2Vzc2FyaWx5IGFuIElQdjQKK2FkZHJlc3MpLgorLmJyCitTb21ldGhpbmcgbGlrZSAiW1VEUDogWzE3Mi4xNi4xMC4xMl06MjM0NTYtPlsxMC4xNTAuMC44XV0iCiAuVFAKIC5CICVCCiBQRFUgc291cmNlIGhvc3RuYW1lIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIFBEVSBzb3VyY2UgYWRkcmVzcyAoc2VlCiBub3RlIGFib3ZlKSAKIC5UUAorLkIgJUUKK1NOTVB2MyBjb250ZXh0IGVuZ2luZSBpZAorLlRQCiAuQiAlaAogY3VycmVudCBob3VyIG9uIHRoZSBsb2NhbCBzeXN0ZW0KIC5UUApAQCAtMjE0LDEzICsyMTgsMTkgQEAKIC5CICVOCiBlbnRlcnByaXNlIHN0cmluZwogLlRQCi0uQiAlcQotdHJhcCBzdWItdHlwZSAobnVtZXJpYywgaW4gZGVjaW1hbCkKLS5UUAogLkIgJVAKIHNlY3VyaXR5IGluZm9ybWF0aW9uIGZyb20gdGhlIFBEVSAoY29tbXVuaXR5IG5hbWUgZm9yIHYxL3YyYywKIHVzZXIgYW5kIGNvbnRleHQgZm9yIHYzKQogLlRQCisuQiAlcQordHJhcCBzdWItdHlwZSAobnVtZXJpYywgaW4gZGVjaW1hbCkKKy5UUAorLkIgJXMKK1NOTVAgdmVyc2lvbiBudW1iZXIgKDA6IHYxLCAxOiB2MmMsIDI6IHYzKQorLlRQCisuQiAlUworU05NUHYzIHNlY3VyaXR5IG1vZGVsIHZlcnNpb24gbnVtYmVyCisuVFAKIC5CICV0CiBkZWNpbWFsIG51bWJlciBvZiBzZWNvbmRzIHNpbmNlIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGVwb2NoIChhcwogcmV0dXJuZWQgYnkKQEAgLTIyOSw2ICsyMzksOSBAQAogLkIgJVQKIHRoZSB2YWx1ZSBvZiB0aGUgXGZDc3lzVXBUaW1lLjBcZlIgdmFyYmluZCBpbiBzZWNvbmRzCiAuVFAKKy5CICV1CitTTk1QdjMgc2VjdXJpdHkgbmFtZSwgb3IgdjEvdjJjIGNvbW11bml0eSBuYW1lCisuVFAKIC5CICV2CiBsaXN0IG9mIHZhcmlhYmxlLWJpbmRpbmdzIGZyb20gdGhlIG5vdGlmaWNhdGlvbiBwYXlsb2FkLgogVGhlc2Ugd2lsbCBiZSBzZXBhcmF0ZWQgYnkgYSB0YWIsIApAQCAtMjU4LDcgKzI3MSw3IEBACiBhbmQgYSBmbGFnIHZhbHVlLiBUaGUgZm9sbG93aW5nIGZsYWdzIGFyZSBzdXBwb3J0ZWQ6CiAuUlMgNCAKIC5UUCA0Ci0uQiAtCisuQiBcLQogbGVmdCBqdXN0aWZ5CiAuVFAKIC5CIDAKQEAgLTI4Myw3ICsyOTYsNyBAQAogLlBQCiAuUlMKIC5uZgotc25tcHRyYXBkIC1QIC1GICIlMDIuMmg6JTAyLjJqIFRSQVAldy4lcSBmcm9tICVBXGVuIgorc25tcHRyYXBkIFwtUCBcLUYgIiUwMi4yaDolMDIuMmogVFJBUCV3LiVxIGZyb20gJUFcZW4iCiAuZmkKIC5SRQogLlBQCkBAIC0yOTEsNyArMzA0LDcgQEAKIC5QUAogLlJTCiAubmYKLXNubXB0cmFwZCAtUCAtRiAiJSMwMi4yaDolIzAyLjJqIFRSQVAldy4lcSBmcm9tICVBXGVuIgorc25tcHRyYXBkIFwtUCBcLUYgIiUjMDIuMmg6JSMwMi4yaiBUUkFQJXcuJXEgZnJvbSAlQVxlbiIKIC5maQogLlJFCiAuU0ggTElTVEVOSU5HIEFERFJFU1NFUwpAQCAtMzA1LDIwICszMTgsMjAgQEAKIC5JIHNubXBkKDgpCiBtYW51YWwgcGFnZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZm9ybWF0IG9mIGxpc3RlbmluZwogYWRkcmVzc2VzLgotLlNIIE5PVElGSUNBVElPTi1MT0ctTUlCIFNVUFBPUlQKKy5TSCBOT1RJRklDQVRJT05cLUxPR1wtTUlCIFNVUFBPUlQKIEFzIG9mIG5ldC1zbm1wIDUuMCwgdGhlIHNubXB0cmFwZCBhcHBsaWNhdGlvbiBzdXBwb3J0cyB0aGUKLU5PVElGSUNBVElPTi1MT0ctTUlCLiAgSXQgZG9lcyB0aGlzIGJ5IG9wZW5pbmcgYW4gQWdlbnRYIHN1YmFnZW50CitOT1RJRklDQVRJT05cLUxPR1wtTUlCLiAgSXQgZG9lcyB0aGlzIGJ5IG9wZW5pbmcgYW4gQWdlbnRYIHN1YmFnZW50CiBjb25uZWN0aW9uIHRvIHRoZSBtYXN0ZXIgc25tcGQgYWdlbnQgYW5kIHJlZ2lzdGVyaW5nIHRoZSBub3RpZmljYXRpb24KIGxvZyB0YWJsZXMuICBBcyBsb25nIGFzIHRoZSBzbm1wZCBhcHBsaWNhdGlvbiBpcyBzdGFydGVkIGZpcnN0LCBpdAogd2lsbCBhdHRhY2ggaXRzZWxmIHRvIGl0IGFuZCB0aHVzIHlvdSBzaG91bGQgYmUgYWJsZSB0byB2aWV3IHRoZSBsYXN0CiByZWNvcmRlZCBub3RpZmljYXRpb25zIHZpYSB0aGUgbmxtTG9nVGFibGUgYW5kIG5sbUxvZ1ZhcmlhYmxlVGFibGUuCiBTZWUgdGhlIHNubXB0cmFwZC5jb25mIGZpbGUgYW5kIHRoZSAiZG9Ob3RSZXRhaW5Ob3RpZmljYXRpb25Mb2dzIiB0b2tlbgogZm9yIHR1cm5pbmcKLW9mZiB0aGlzIHN1cHBvcnQuICBTZWUgdGhlIE5PVElGSUNBVElPTi1MT0ctTUlCIGZvciBtb3JlIGRldGFpbHMgYWJvdXQKK29mZiB0aGlzIHN1cHBvcnQuICBTZWUgdGhlIE5PVElGSUNBVElPTlwtTE9HXC1NSUIgZm9yIG1vcmUgZGV0YWlscyBhYm91dAogdGhlIE1JQiBpdHNlbGYuCiAuU0ggRVhURU5TSUJJTElUWSBBTkQgQ09ORklHVVJBVElPTgogU2VlIHRoZQogLkkgc25tcHRyYXBkLmNvbmYoNSkKIG1hbnVhbCBwYWdlLgogLlNIICJTRUUgQUxTTyIKLXNubXBjbWQoMSksIHNubXBkKDgpLCBwcmludGYoMyksIHNubXB0cmFwZC5jb25mKDUpLCBzeXNsb2coOCksIHZhcmlhYmxlcyg1KQorc25tcGNtZCgxKSwgc25tcGQoOCksIHByaW50ZigzKSwgc25tcHRyYXBkLmNvbmYoNSksIHN5c2xvZyg4KSwgdHJhcHRvZW1haWwoMSksIHZhcmlhYmxlcyg1KQpkaWZmIC0tZ2l0IGEvbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmIGIvbWFuL3NubXB0cmFwZC5jb25mLjUuZGVmCmluZGV4IDMyZTNhZjUuLjFiYmJmYmIgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdHJhcGQuY29uZi41LmRlZgorKysgYi9tYW4vc25tcHRyYXBkLmNvbmYuNS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggU05NUFRSQVBELkNPTkYgNSAiMjUgU2VwIDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFRSQVBELkNPTkYgNSAiMTMgTWFyIDIwMTQiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCiAuU0ggTkFNRQogc25tcHRyYXBkLmNvbmYgLSBjb25maWd1cmF0aW9uIGZpbGUgZm9yIHRoZSBOZXQtU05NUCBub3RpZmljYXRpb24gcmVjZWl2ZXIKIC5TSCBERVNDUklQVElPTgpAQCAtNyw3ICs3LDcgQEAKIChhbmQgSU5GT1JNIHJlcXVlc3RzKSBzaG91bGQgYmUgcHJvY2Vzc2VkLgogVGhpcyBmaWxlIChcZkJzbm1wdHJhcGQuY29uZlxmUikgY2FuIGJlIGxvY2F0ZWQgaW4KIG9uZSBvZiBzZXZlcmFsIGxvY2F0aW9ucywgYXMgZGVzY3JpYmVkIGluIHRoZQotLkkgc25tcF9jb25maWcoNSkKKy5JUiBzbm1wX2NvbmZpZyAoNSkKIG1hbnVhbCBwYWdlLgogLlNIIElNUE9SVEFOVAogUHJldmlvdXNseSwKQEAgLTMyLDIyICszMiwyMiBAQAogU2VlIHRoZSBzZWN0aW9uIAogLkIgTElTVEVOSU5HIEFERFJFU1NFUwogaW4gdGhlCi0uSSBzbm1wZCg4KQorLklSIHNubXBkICg4KQogbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBsaXN0ZW5pbmcKIGFkZHJlc3Nlcy4KIC5JUAogVGhlIGRlZmF1bHQgYmVoYXZpb3VyIGlzIHRvCiBsaXN0ZW4gb24gVURQIHBvcnQgMTYyIG9uIGFsbCBJUHY0IGludGVyZmFjZXMuCiAuSVAgImRvTm90UmV0YWluTm90aWZpY2F0aW9uTG9ncyB5ZXMiCi1kaXNhYmxlcyBzdXBwb3J0IGZvciB0aGUgTk9USUZJQ0FUSU9OLUxPRy1NSUIuCitkaXNhYmxlcyBzdXBwb3J0IGZvciB0aGUgTk9USUZJQ0FUSU9OXC1MT0dcLU1JQi4KIE5vcm1hbGx5IHRoZSBzbm1wdHJhcGQgcHJvZ3JhbSBrZWVwcyBhIHJlY29yZCBvZiB0aGUgdHJhcHMKIHJlY2VpdmVkLCB3aGljaCBjYW4gYmUgcmV0cmlldmVkIGJ5IHF1ZXJ5aW5nCiB0aGUgXGZDbmxtTG9nVGFibGVcZlIgYW5kIFxmQ25sbUxvZ3ZhcmlhYmxlVGFibGVcZlIgdGFibGVzLiAgCiBUaGlzIGRpcmVjdGl2ZSBjYW4gYmUgdXNlZCB0byBzdXBwcmVzcyB0aGlzIGJlaGF2aW91ci4KIC5JUAogU2VlIHRoZSAKLS5JIHNubXB0cmFwZCg4KSAKLW1hbnVhbCBwYWdlIGFuZCB0aGUgTk9USUZJQ0FUSU9OLUxPRy1NSUIgZm9yIGRldGFpbHMuCisuSVIgc25tcHRyYXBkICg4KSAKK21hbnVhbCBwYWdlIGFuZCB0aGUgTk9USUZJQ0FUSU9OXC1MT0dcLU1JQiBmb3IgZGV0YWlscy4KIC5JUCAiZG9Ob3RMb2dUcmFwcyB5ZXMiCiBkaXNhYmxlcyB0aGUgbG9nZ2luZyBvZiBub3RpZmljYXRpb25zIGFsdG9nZXRoZXIuCiBUaGlzIGlzIHVzZWZ1bCBpZiB0aGUgXGZCc25tcHRyYXBkXGZSIGFwcGxpY2F0aW9uIHNob3VsZApAQCAtODEsMTQgKzgxLDE2IEBACiBmb3IgYSBwYXJ0aWN1bGFyIGNhdGVnb3J5IG9mIG5vdGlmaWNhdGlvbi4gQnV0IGl0IGlzIHBlcmZlY3RseQogcG9zc2libGUgKGV2ZW4gZGVzaXJhYmxlKSB0byBsaW1pdCBjZXJ0YWluIG5vdGlmaWNhdGlvbiBzb3VyY2VzIHRvCiBzZWxlY3RlZCBwcm9jZXNzaW5nIG9ubHkuCi0uSVAgImF1dGhDb21tdW5pdHkgICBUWVBFUyBDT01NVU5JVFkgIFtTT1VSQ0UgW09JRCB8IC12IFZJRVcgXV0iCisuSVAgImF1dGhDb21tdW5pdHkgICBUWVBFUyBDT01NVU5JVFkgIFtTT1VSQ0UgW09JRCB8IFwtdiBWSUVXIF1dIgogYXV0aG9yaXNlcyB0cmFwcyAoYW5kIFNOTVB2MmMgSU5GT1JNIHJlcXVlc3RzKSB3aXRoIHRoZSBzcGVjaWZpZWQKIGNvbW11bml0eSB0byB0cmlnZ2VyIHRoZSB0eXBlcyBvZiBwcm9jZXNzaW5nIGxpc3RlZC4KIEJ5IGRlZmF1bHQsIHRoaXMgd2lsbCBhbGxvdyBhbnkgbm90aWZpY2F0aW9uIHVzaW5nIHRoaXMgY29tbXVuaXR5CiB0byBiZSBwcm9jZXNzZWQuICBUaGUgU09VUkNFIGZpZWxkIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkgdGhhdCB0aGUKIGNvbmZpZ3VyYXRpb24gc2hvdWxkIG9ubHkgYXBwbHkgdG8gbm90aWZpY2F0aW9ucyByZWNlaXZlZCBmcm9tCi1wYXJ0aWN1bGFyIHNvdXJjZXMgLSBzZWUgXGZJc25tcGQuY29uZig1KVxmUiBmb3IgbW9yZSBkZXRhaWxzLgotLklQICJhdXRoVXNlciAgIFRZUEVTIFstcyBNT0RFTF0gVVNFUiAgW0xFVkVMIFtPSUQgfCAtdiBWSUVXIF1dIgorcGFydGljdWxhciBzb3VyY2VzIC0gc2VlCisuSVIgc25tcGQuY29uZiAoNSkKK2ZvciBtb3JlIGRldGFpbHMuCisuSVAgImF1dGhVc2VyICAgVFlQRVMgW1wtcyBNT0RFTF0gVVNFUiAgW0xFVkVMIFtPSUQgfCBcLXYgVklFVyBdXSIKIGF1dGhvcmlzZXMgU05NUHYzIG5vdGlmaWNhdGlvbnMgd2l0aCB0aGUgc3BlY2lmaWVkCiB1c2VyIHRvIHRyaWdnZXIgdGhlIHR5cGVzIG9mIHByb2Nlc3NpbmcgbGlzdGVkLgogQnkgZGVmYXVsdCwgdGhpcyB3aWxsIGFjY2VwdCBhdXRoZW50aWNhdGVkIHJlcXVlc3RzLgpAQCAtOTYsNyArOTgsNyBAQAogYmUgdXNlZCB0byBhbGxvdyB1bmF1dGhlbnRpY2F0ZWQgbm90aWZpY2F0aW9ucyAoXGZJbm9hdXRoXGZSKSwKIG9yIHRvIHJlcXVpcmUgZW5jcnlwdGlvbiAoXGZJcHJpdlxmUiksIGp1c3QgYXMgZm9yIHRoZSBTTk1QIGFnZW50LgogLklQCi1XaXRoIGJvdGggb2YgdGhlc2UgZGlyZWN0aXZlcywgdGhlIE9JRCAob3IgXGZJLXYgVklFV1xmUikgZmllbGQKK1dpdGggYm90aCBvZiB0aGVzZSBkaXJlY3RpdmVzLCB0aGUgT0lEIChvciBcZklcLXYgVklFV1xmUikgZmllbGQKIGNhbiBiZSB1c2VkIHRvIHJldHJpY3QgdGhpcyBjb25maWd1cmF0aW9uIHRvIHRoZSBwcm9jZXNzaW5nIG9mCiBwYXJ0aWN1bGFyIG5vdGlmaWNhdGlvbnMuCiAuUlMKQEAgLTEwNiwxNiArMTA4LDE4IEBACiBpbmNvbWluZyBub3RpZmljYXRpb24uICBJdCBpcyBub3QgYXBwbGllZCB0byB0aGUgcGF5bG9hZCB2YXJiaW5kcwogaGVsZCB3aXRoaW4gdGhhdCBub3RpZmljYXRpb24uCiAuUkUKLS5JUCAiYXV0aEdyb3VwICBUWVBFUyBbLXMgTU9ERUxdIEdST1VQICBbTEVWRUwgW09JRCB8IC12IFZJRVcgXV0iCi0uSVAgImF1dGhBY2Nlc3MgVFlQRVMgWy1zIE1PREVMXSBHUk9VUCBWSUVXICBbTEVWRUwgW0NPTlRFWFRdXSIKKy5JUCAiYXV0aEdyb3VwICBUWVBFUyBbXC1zIE1PREVMXSBHUk9VUCAgW0xFVkVMIFtPSUQgfCBcLXYgVklFVyBdXSIKKy5JUCAiYXV0aEFjY2VzcyBUWVBFUyBbXC1zIE1PREVMXSBHUk9VUCBWSUVXICBbTEVWRUwgW0NPTlRFWFRdXSIKIC5JUCAic2V0QWNjZXNzIEdST1VQIENPTlRFWFQgTU9ERUwgTEVWRUwgUFJFRklYIFZJRVcgVFlQRVMiCiBhdXRob3Jpc2Ugbm90aWZpY2F0aW9ucyBpbiB0aGUgc3BlY2lmaWVkIEdST1VQCiAoY29uZmlndXJlZCB1c2luZyB0aGUgXGZJZ3JvdXBcZlIgZGlyZWN0aXZlKQogdG8gdHJpZ2dlciB0aGUgdHlwZXMgb2YgcHJvY2Vzc2luZyBsaXN0ZWQuCi1TZWUgXGZJc25tcGQuY29uZig1KVxmUiBmb3IgbW9yZSBkZXRhaWxzLgorU2VlCisuSVIgc25tcGQuY29uZiAoNSkKK2ZvciBtb3JlIGRldGFpbHMuCiAuSVAgImNyZWF0ZVVzZXIgWy1lICBFTkdJTkVJRF0gdXNlcm5hbWUgKE1ENXxTSEEpIGF1dGhwYXNzcGhyYXNlIFtERVN8QUVTXSIKIFNlZSB0aGUgCi0uSSBzbm1wZC5jb25mKDUpCisuSVIgc25tcGQuY29uZiAoNSkKIG1hbnVhbCBwYWdlIGZvciBhIGRlc2NyaXB0aW9uIG9mIGhvdyB0byBjcmVhdGUgU05NUHYzIHVzZXJzLiAgVGhpcwogaXMgcm91Z2hseSB0aGUgc2FtZSwgYnV0IHRoZSBmaWxlIG5hbWUgY2hhbmdlcyB0byBzbm1wdHJhcGQuY29uZiBmcm9tCiBzbm1wZC5jb25mLgpAQCAtMTMxLDkgKzEzNSwzOCBAQAogc3BlY2lmeSB0aGUgZm9ybWF0IHVzZWQgdG8gZGlzcGxheSBTTk1QdjEgVFJBUHMgYW5kIFNOTVB2Mgogbm90aWZpY2F0aW9ucyByZXNwZWN0aXZlbHkuICBOb3RlIHRoYXQgU05NUHYyYyBhbmQgU05NUHYzCiBib3RoIHVzZSB0aGUgc2FtZSBTTk1QdjIgUERVIGZvcm1hdC4KKy5JUCAiZm9ybWF0IERFU1RJTkFUSU9OIEZPUk1BVCIKK3NwZWNpZnkgdGhlIGZvcm1hdCB1c2VkIGZvciBkaWZmZXJlbnQgZGVzdGluYXRpb25zLgorREVTVElOQVRJT04gaXMgb25lIG9mOgorLklSIHByaW50ICIsICIgcHJpbnQxICIsICIgcHJpbnQyICIsICIgCisuSVIgc3lzbG9nICIsICIgc3lzbG9nMSAiLCAiIHN5c2xvZzIgIiwgIiAKKy5JUiBleGVjdXRlICIsICIgZXhlY3V0ZTEgIiwgIiBleGVjdXRlMiAuCisuSSBwcmludDEKK2lzIHVzZWQgZm9yIHByaW50aW5nIFNOTVB2MSB0cmFwcywKKy5JIHByaW50MgoraXMgZm9yIFNOTVB2Mi4KKy5JIHByaW50CitpcyB1c2VkIGZvciBib3RoIHZlcnNpb25zLgorLkkgc3lzbG9nCitpcyBzaW1pbGFybHkgdXNlZCB3aGVuIHNlbmRpbmcgdHJhcHMgdG8gc3lzbG9nLCBhbmQKKy5JIGV4ZWN1dGUKK3VzZWQgd2hlbiBzZW5kaW5nIHRyYXBzIHRvIGEgcHJvZ3JhbSBzdWNoIGFzCisuSVIgdHJhcHRvZW1haWwgKDEpLgorLklQCitUaGUgZGVmYXVsdCBmb3JtYXRzIGFyZQorLmJyCisuSSBmb3JtYXQgcHJpbnQxICUuNHktJS4ybS0lLjJsICUuMmg6JS4yajolLjJrICVCIFslYl0gKHZpYSAlQSBbJWFdKTogJU5cZW5cZXQlVyBUcmFwICglcSkgVXB0aW1lOiAlI1RcZW4ldlxlbgorLmJyCisuSSBmb3JtYXQgcHJpbnQyICUuNHktJS4ybS0lLjJsICUuMmg6JS4yajolLjJrICVCIFslYl06XGVuJXZcZW4KKy5icgorLkkgZm9ybWF0IHN5c2xvZzEgJWE6ICVXIFRyYXAgKCVxKSBVcHRpbWU6ICUjVCUjdlxlbgorLmJyCisuSSBmb3JtYXQgc3lzbG9nMiAlQiBbJWJdOiBUcmFwICUjdlxlbgorLmJyCisuSSBmb3JtYXQgZXhlY3V0ZSAlQlxlbiViXGVuJVZcZW4ldlxlbgogLklQCiBTZWUKLS5JUiBzbm1wdHJhcGQoOCkKKy5JUiBzbm1wdHJhcGQgKDgpCiBmb3IgdGhlIGxheW91dCBjaGFyYWN0ZXJzIGF2YWlsYWJsZS4KIC5JUCAiaWdub3JlQXV0aEZhaWx1cmUgeWVzIgogaW5zdHJ1Y3RzIHRoZSByZWNlaXZlciB0byBpZ25vcmUgXGZJYXV0aGVudGljYXRpb25GYWlsdXJlXGZSIHRyYXBzLgpAQCAtMTQ5LDE5ICsxODIsMjYgQEAKIHNwZWNpZmllcyB3aGVyZSBub3RpZmljYXRpb25zIHNob3VsZCBiZSBsb2dnZWQgLSB0byBzdGFuZGFyZAogb3V0cHV0LCBzdGFuZGFyZCBlcnJvciwgYSBzcGVjaWZpZWQgZmlsZSBvciB2aWEgXGZJc3lzbG9nXGZSLgogU2VlIHRoZSBzZWN0aW9uIExPR0dJTkcgT1BUSU9OUyBpbiB0aGUKLVxmSXNubXBjbWQoMSlcZlIgbWFudWFsIHBhZ2UgZm9yIGRldGFpbHMuCisuSVIgc25tcGNtZCAoMSkKK21hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgogLklQICJvdXRwdXRPcHRpb24gc3RyaW5nIgogc3BlY2lmaWVzIHZhcmlvdXMgY2hhcmFjdGVyaXN0aWNzIG9mIGhvdyBPSURzIGFuZCBvdGhlciB2YWx1ZXMKIHNob3VsZCBiZSBkaXNwbGF5ZWQuCiBTZWUgdGhlIHNlY3Rpb24gT1VUUFVUIE9QVElPTlMgaW4gdGhlCi1cZklzbm1wY21kKDEpXGZSIG1hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgotLklQICJwcmludEV2ZW50TnVtYmVycyB5ZXMiCi1lbmFibGVzIHNwZWNpYWxpc2VkIGxvZ2dpbmcgb2YgZXZlbnQtcmVsYXRlZCBub3RpZmljYXRpb25zIGZyb20KLXRoZSAobG9uZyBvYnNvbGV0ZSkgTTJNLU1JQi4KLS5cIgotLlwiIFhYWCAtIENIRUNLIEVYQUNUTFkgV0hJQ0ggVFJBUFMKLS5cIiBYWFggLSBUSElTIEZFRUxTIE9CU09MRVRFIFRPIE1FIQotLlwiCisuSVIgc25tcGNtZCAoMSkKK21hbnVhbCBwYWdlIGZvciBkZXRhaWxzLgorLlNIIE15U1FMIExvZ2dpbmcKK1RoZXJlIGFyZSB0d28gY29uZmlndXJhdGlvbiB2YXJpYWJsZXMgdGhhdCB3b3JrIHRvZ2V0aGVyIHRvIGNvbnRyb2wKK3doZW4gcXVldWVkIHRyYXBzIGFyZSBsb2dnZWQgdG8gdGhlIE15U1FMIGRhdGFiYXNlLiBBIG5vbi16ZXJvCit2YWx1ZSBtdXN0IGJlIHNwZWNpZmllZCBmb3Igc3FsU2F2ZUludGVydmFsIHRvIGVuYWJsZSBNeVNRTCBsb2dnaW5nLgorLlJFCisuSVAgInNxbE1heFF1ZXVlIG1heCIKK3NwZWNpZmllcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgdHJhcHMgdG8gcXVldWUgYmVmb3JlIGEgZm9yY2VkIGZsdXNoCit0byB0aGUgTXlTUUwgZGF0YWJhc2UuCisuUkUKKy5JUCAic3FsU2F2ZUludGVydmFsIHNlY29uZHMiCitzcGVjaWZpZWQgdGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gcGVyaW9kaWMgcXVldWUgZmx1c2hlcy4KK0EgdmFsdWUgb2YgMCBmb3Igd2lsbCBkaXNhYmxlIE15U1FMIGxvZ2dpbmcuCiAuU0ggTk9USUZJQ0FUSU9OIFBST0NFU1NJTkcKIEFzIHdlbGwgYXMgbG9nZ2luZyBpbmNvbWluZyBub3RpZmljYXRpb25zLCB0aGV5IGNhbiBhbHNvCiBiZSBmb3J3YXJkZWQgb24gdG8gYW5vdGhlciBub3RpZmljYXRpb24gcmVjZWl2ZXIsIG9yIHBhc3NlZApAQCAtMTk2LDE0ICsyMzYsMTcgQEAKIE5vdGUgdGhhdCB0aGlzIHdpbGwgYWx3YXlzIHVzZSB0aGUgU05NUHYyLXN0eWxlIG5vdGlmaWNhdGlvbiBmb3JtYXQsIHdpdGgKIFNOTVB2MSB0cmFwcyBiZWluZyBjb252ZXJ0ZWQgYXMgcGVyIFJGQyAyNTc2LCBiZWZvcmUgYmVpbmcgcGFzc2VkIHRvIHRoZQogcHJvZ3JhbS4KLVRoZSBpbnB1dCBmb3JtYXQgaXMgYXMgZm9sbG93cywgb25lIGVudHJ5IHBlciBsaW5lOgorVGhlIGlucHV0IGZvcm1hdCBpcywgaWYgeW91IHVzZSB0aGUgZGVmYXVsdCBzZXQgYnkKK3RoZSAiZm9ybWF0IGV4ZWN1dGUgJUJcZW4lYlxlbiVWXGVuJXZcZW4iLCBvbmUgZW50cnkgcGVyIGxpbmU6CiAuUlMKIC5JUCBIT1NUTkFNRQogVGhlIG5hbWUgb2YgdGhlIGhvc3QgdGhhdCBzZW50IHRoZSBub3RpZmljYXRpb24sIGFzIGRldGVybWluZWQgYnkKLS5JUiBnZXRob3N0YnlhZGRyKDMpIC4KKy5JUiBnZXRob3N0YnlhZGRyICgzKS4KIC5icgotLklQIElQQUREUkVTUwotVGhlIElQIGFkZHJlc3Mgb2YgdGhlIGhvc3QgdGhhdCBzZW50IHRoZSBub3RpZmljYXRpb24uCisuSVAgQUREUkVTUworVGhlIHRyYW5zcG9ydCBhZGRyZXNzLCBsaWtlCisuYnIKKyJbVURQOiBbMTcyLjE2LjEwLjEyXToyMzQ1Ni0+WzEwLjE1MC4wLjhdXSIKIC5cIgogLlwiIFhYWCAtIFdoYXQgYWJvdXQgbm9uLUlQdjQgdHJhbnNwb3J0cz8KIC5cIgpAQCAtMjE0LDEwICsyNTcsMTAgQEAKIFRoZSBmb3JtYXQgb2YgYm90aCBvZiB0aGVzZSBhcmUgY29udHJvbGxlZCBieSB0aGUgXGZJb3V0cHV0T3B0aW9uXGZSCiBkaXJlY3RpdmUgKG9yIHNpbWlsYXIgY29uZmlndXJhdGlvbikuCiAuSVAKLVRoZSBmaXJzdCBPSUQgc2hvdWxkIGFsd2F5cyBiZSBcZkNTTk1QdjItTUlCOjpzeXNVcFRpbWUuMFxmUiwKLWFuZCB0aGUgc2Vjb25kIHNob3VsZCBiZSBcZkNTTk1QdjItTUlCOjpzbm1wVHJhcE9JRC4wXGZSLgorVGhlIGZpcnN0IE9JRCBzaG91bGQgYWx3YXlzIGJlIFxmQ1NOTVB2MlwtTUlCOjpzeXNVcFRpbWUuMFxmUiwKK2FuZCB0aGUgc2Vjb25kIHNob3VsZCBiZSBcZkNTTk1QdjJcLU1JQjo6c25tcFRyYXBPSUQuMFxmUi4KIFRoZSByZW1haW5pbmcgbGluZXMgd2lsbCBjb250YWluIHRoZSBwYXlsb2FkIHZhcmJpbmQgbGlzdC4KLUZvciBTTk1QdjEgdHJhcHMsIHRoZSBmaW5hbCBPSUQgd2lsbCBiZSBcZkNTTk1QdjItTUlCOjpzbm1wVHJhcEVudGVycHJpc2UuMFxmUi4KK0ZvciBTTk1QdjEgdHJhcHMsIHRoZSBmaW5hbCBPSUQgd2lsbCBiZSBcZkNTTk1QdjJcLU1JQjo6c25tcFRyYXBFbnRlcnByaXNlLjBcZlIuCiAuYnIKIC5JUCBFeGFtcGxlOgogQSBcZkJ0cmFwdG9lbWFpbFxmUiBzY3JpcHQgaGFzIGJlZW4gaW5jbHVkZWQgaW4gdGhlIE5ldC1TTk1QIHBhY2thZ2UgdGhhdApAQCAtMjI1LDcgKzI2OCw3IEBACiAuYnIKIC5SUwogLlAKLXRyYXBoYW5kbGUgZGVmYXVsdCAvdXNyL2Jpbi9wZXJsIEJJTkRJUi90cmFwdG9lbWFpbCAtcyBteXNtdHAuc29tZXdoZXJlLmNvbSAtZiBhZG1pbkBzb21ld2hlcmUuY29tIG1lQHNvbWV3aGVyZS5jb20KK3RyYXBoYW5kbGUgZGVmYXVsdCAvdXNyL2Jpbi9wZXJsIEJJTkRJUi90cmFwdG9lbWFpbCBcLXMgbXlzbXRwLnNvbWV3aGVyZS5jb20gXC1mIGFkbWluQHNvbWV3aGVyZS5jb20gbWVAc29tZXdoZXJlLmNvbQogLlJFCiAuUkUKIC5JUCAiZm9yd2FyZCBPSUR8ZGVmYXVsdCBERVNUSU5BVElPTiIKQEAgLTIzNyw3ICsyODAsNyBAQAogU2VlIHRoZSBzZWN0aW9uIAogLkIgTElTVEVOSU5HIEFERFJFU1NFUwogaW4gdGhlCi0uSSBzbm1wZCg4KQorLklSIHNubXBkICg4KQogbWFudWFsIHBhZ2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZvcm1hdCBvZiBsaXN0ZW5pbmcKIGFkZHJlc3Nlcy4KIC5SRQpAQCAtMjU3LDUgKzMwMCw1IEBACiAuU0ggRklMRVMKIFNZU0NPTkZESVIvc25tcC9zbm1wdHJhcGQuY29uZgogLlNIICJTRUUgQUxTTyIKLXNubXBfY29uZmlnKDUpLCBzbm1wdHJhcGQoOCksIHN5c2xvZyg4KSwgdmFyaWFibGVzKDUpLCBzbm1wZC5jb25mKDUpLCByZWFkX2NvbmZpZygzKS4KK3NubXBfY29uZmlnKDUpLCBzbm1wdHJhcGQoOCksIHN5c2xvZyg4KSwgdHJhcHRvZW1haWwoMSksIHZhcmlhYmxlcyg1KSwgbmV0c25tcF9jb25maWdfYXBpKDMpLgogCmRpZmYgLS1naXQgYS9tYW4vc25tcHVzbS4xLmRlZiBiL21hbi9zbm1wdXNtLjEuZGVmCmluZGV4IDYzNTI3M2YuLjkwNjEyMTMgMTAwNjQ0Ci0tLSBhL21hbi9zbm1wdXNtLjEuZGVmCisrKyBiL21hbi9zbm1wdXNtLjEuZGVmCkBAIC0xLDkgKzEsOSBAQAotLlRIIFNOTVBVU00gMSAiMjAgSmFuIDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggU05NUFVTTSAxICIxMSBEZWMgMjAwOSIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wdXNtIC0gY3JlYXRlcyBhbmQgbWFpbnRhaW5zIFNOTVB2MyB1c2VycyBvbiBhIG5ldHdvcmsgZW50aXR5CiAuU0ggU1lOT1BTSVMKIC5CIHNubXB1c20KLVtDT01NT04gT1BUSU9OU10gQUdFTlQKK1tDT01NT04gT1BUSU9OU10gW1wtQ3ddIEFHRU5UCiAuQiBjcmVhdGUKIFVTRVIgW0NMT05FRlJPTS1VU0VSXQogLmJyCkBAIC0xOCwxNyArMTgsMTcgQEAKIFVTRVIgQ0xPTkVGUk9NLVVTRVIKIC5icgogLkIgc25tcHVzbQotW0NPTU1PTiBPUFRJT05TXSBbLUNhXSBbLUN4XSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1DYV0gW1wtQ3hdIEFHRU5UCiAuQiBwYXNzd2QKIE9MRC1QQVNTUEhSQVNFIE5FVy1QQVNTUEhSQVNFIFtVU0VSXQogLmJyCiAuQiBzbm1wdXNtCi1bQ09NTU9OIE9QVElPTlNdIDwtQ2EgfCAtQ3g+IC1DayBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSA8XC1DYSB8IFwtQ3g+IFwtQ2sgQUdFTlQKIC5CIHBhc3N3ZAogT0xELUtFWS1PUi1QQVNTUEhSQVNFIE5FVy1LRVktT1ItUEFTU1BIUkFTRSBbVVNFUl0KIC5icgogLkIgc25tcHVzbQotW0NPTU1PTiBPUFRJT05TXSBbLUNhXSBbLUN4XSBBR0VOVAorW0NPTU1PTiBPUFRJT05TXSBbXC1DYV0gW1wtQ3hdIEFHRU5UCiAuQiBjaGFuZ2VrZXkKIFtVU0VSXQogCkBAIC00NiwxMiArNDYsMTIgQEAKIC5CIHNubXB1c20KIGNvbW1hbmRzOgogLlRQCi0uQkkgLUNFICIgRU5HSU5FLUlEIgorLkJJIFwtQ0UgIiBFTkdJTkUtSUQiCiBTZXQgdXNtVXNlckVuZ2luZUlEIHRvIGJlIHVzZWQgYXMgcGFydCBvZiB0aGUgaW5kZXggb2YgdGhlIHVzbVVzZXJUYWJsZS4KLURlZmF1bHQgaXMgdG8gdXNlIHRoZSBjb250ZXh0RW5naW5lSUQgKHNldCB2aWEgLUUgb3IgcHJvYmVkKSBhcyB0aGUgCitEZWZhdWx0IGlzIHRvIHVzZSB0aGUgY29udGV4dEVuZ2luZUlEIChzZXQgdmlhIFwtRSBvciBwcm9iZWQpIGFzIHRoZSAKIHVzbVVzZXJFbmdpbmVJRC4KIC5UUAotLkJJIC1DcCAiIFNUUklORyIKKy5CSSBcLUNwICIgU1RSSU5HIgogU2V0IHRoZSB1c21Vc2VyUHVibGljIHZhbHVlIG9mIHRoZSAobmV3KSB1c2VyIHRvIHRoZSBzcGVjaWZpZWQgU1RSSU5HLgogLlBQCiBPcHRpb25zIGZvciB0aGUKQEAgLTYwLDE1ICs2MCwxNSBAQAogLkIgY2hhbmdla2V5CiBjb21tYW5kczoKIC5UUAotLkJJIC1DYQorLkJJIFwtQ2EKIENoYW5nZSB0aGUgYXV0aGVudGljYXRpb24ga2V5LgogLlRQCi0uQkkgLUN4CisuQkkgXC1DeAogQ2hhbmdlIHRoZSBwcml2YWN5IGtleS4KIC5UUAotLkJJIC1DawotQWxsb3dzIHRvIHVzZSBsb2NhbGl6ZWQga2V5IChtdXN0IHN0YXJ0IHdpdGggMHgpIGluc3RlYWQgb2YgcGFzc3BocmFzZS4KLVdoZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgZWl0aGVyIHRoZSAtQ2Egb3IgLUN4IG9wdGlvbiAoYnV0IG5vdCBib3RoKSBtdXN0IGFsc28KKy5CSSBcLUNrCitBbGxvd3Mgb25lIHRvIHVzZSBsb2NhbGl6ZWQga2V5IChtdXN0IHN0YXJ0IHdpdGggMHgpIGluc3RlYWQgb2YgcGFzc3BocmFzZS4KK1doZW4gdGhpcyBvcHRpb24gaXMgdXNlZCwgZWl0aGVyIHRoZSBcLUNhIG9yIFwtQ3ggb3B0aW9uIChidXQgbm90IGJvdGgpIG11c3QgYWxzbwogYmUgdXNlZC4KIAogLlNIIENSRUFUSU5HIFVTRVJTCkBAIC03NiwyMCArNzYsMjMgQEAKIEFuIHVuYXV0aGVudGljYXRlZCBTTk1QdjMgdXNlciBjYW4gYmUgY3JlYXRlZCB1c2luZyB0aGUgY29tbWFuZAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gQUdFTlQgY3JlYXRlIFVTRVIKK1tDT01NT04gT1BUSU9OU10gQUdFTlQgY3JlYXRlIFVTRVIKIC5QUAogVGhpcyBjb25zdHJ1Y3RzIGFuIChpbmFjdGl2ZSkgZW50cnkgaW4gdGhlIHVzbVVzZXJUYWJsZSwKIHdpdGggbm8gYXV0aGVudGljYXRpb24gb3IgcHJpdmFjeSBzZXR0aW5ncy4KIEluIHByaW5jaXBsZSwgdGhpcyB1c2VyIHNob3VsZCBiZSB1c2VhYmxlIGZvciAnbm9BdXRoTm9Qcml2JyByZXF1ZXN0cywKIGJ1dCBpbiBwcmFjdGlzZSB0aGUgTmV0LVNOTVAgYWdlbnQgd2lsbCBub3QgYWxsb3cgc3VjaCBhbiBlbnRyeQotdG8gYmUgbWFkZSBhY3RpdmUuCit0byBiZSBtYWRlIGFjdGl2ZS4gIFRoZSB1c2VyIGNhbiBiZSBjcmVhdGVkIHZpYSB0aGUgY3JlYXRlQW5kV2FpdAorb3BlcmF0aW9uIGluc3RlYWQgYnkgdXNpbmcgdGhlIFwtQ2EgZmxhZy4gIFRoaXMgd2lsbCBwcmV2ZW50IHRoZSB1c2VyCitmcm9tIGJlaW5nIG1hcmtlZCBhcyBhY3RpdmUgaW4gYW55IGFnZW50IHVudGlsIGV4cGxpY2l0bHkgYWN0aXZhdGVkCitsYXRlciB2aWEgdGhlIGFjdGl2YXRlIGNvbW1hbmQuCiAKIC5QUAogSW4gb3JkZXIgdG8gYWN0aXZhdGUgdGhpcyBlbnRyeSwgaXQgaXMgbmVjZXNzYXJ5IHRvICJjbG9uZSIgYW4gZXhpc3RpbmcKIHVzZXIsIHVzaW5nIHRoZSBjb21tYW5kCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSBBR0VOVCBjbG9uZUZyb20gVVNFUiBDTE9ORUZST00tVVNFUgorW0NPTU1PTiBPUFRJT05TXSBBR0VOVCBjbG9uZUZyb20gVVNFUiBDTE9ORUZST00tVVNFUgogLlBQCiBUaGUgVVNFUiBlbnRyeSB0aGVuIGluaGVyaXRzIHRoZSBzYW1lIGF1dGhlbnRpY2F0aW9uIGFuZCBwcml2YWN5CiBzZXR0aW5ncyAoaW5jbHVkaW5nIHBhc3MgcGhyYXNlcykgYXMgdGhlIENMT05FRlJPTSB1c2VyLgpAQCAtOTgsNyArMTAxLDcgQEAKIFRoZXNlIHR3byBzdGVwcyBjYW4gYmUgY29tYmluZWQgaW50byBvbmUsIGJ5IHVzaW5nIHRoZSBjb21tYW5kCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSBBR0VOVCBjcmVhdGUgVVNFUiBDTE9ORUZST00tVVNFUgorW0NPTU1PTiBPUFRJT05TXSBBR0VOVCBjcmVhdGUgVVNFUiBDTE9ORUZST00tVVNFUgogCiAuUFAKIFRoZSB0d28gZm9ybXMgb2YgdGhlCkBAIC0xMzQsNyArMTM3LDcgQEAKIEEgdXNlciBjYW4gYmUgZGVsZXRlZCBmcm9tIHRoZSB1c21Vc2VyVGFibGUgdXNpbmcgdGhlIGNvbW1hbmQKIC5JUAogLkIgc25tcHVzbQotW09QVElPTlNdIEFHRU5UIGRlbGV0ZSBVU0VSCitbQ09NTU9OIE9QVElPTlNdIEFHRU5UIGRlbGV0ZSBVU0VSCiAKIC5TSCBDSEFOR0lORyBQQVNTIFBIUkFTRVMKIFVzZXIgcHJvZmlsZXMgY29udGFpbiBwcml2YXRlIGtleXMgdGhhdCBhcmUgbmV2ZXIKQEAgLTE0NSw3ICsxNDgsNyBAQAogVGhpcyB1c2VzIHRoZSBjb21tYW5kCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSBbLUNhXSBbLUN4XSBBR0VOVCBwYXNzd2QgT0xELVBBU1NQSFJBU0UgTkVXLVBBU1NQSFJBU0UgW1VTRVJdCitbQ09NTU9OIE9QVElPTlNdIFtcLUNhXSBbXC1DeF0gQUdFTlQgcGFzc3dkIE9MRC1QQVNTUEhSQVNFIE5FVy1QQVNTUEhSQVNFIFtVU0VSXQogCiAuUFAKIEFmdGVyIGNsb25pbmcgYSBuZXcgdXNlciBlbnRyeSBmcm9tIHRoZSBhcHByb3ByaWF0ZSB0ZW1wbGF0ZSwKQEAgLTE1MywyMSArMTU2LDIxIEBACiAKIC5QUAogSWYgVVNFUiBpcyBub3Qgc3BlY2lmaWVkLCB0aGlzIGNvbW1hbmQgd2lsbCBjaGFuZ2UgdGhlIHBhc3NwaHJhc2UKLW9mIHRoZSAoU05NUHYzKSB1c2VyIGlzc3VpbmcgdGhlIGNvbW1hbmQuICBJZiB0aGUgLUNhIG9yIC1DeCBvcHRpb25zCitvZiB0aGUgKFNOTVB2MykgdXNlciBpc3N1aW5nIHRoZSBjb21tYW5kLiAgSWYgdGhlIFwtQ2Egb3IgXC1DeCBvcHRpb25zCiBhcmUgc3BlY2lmaWVkLCB0aGVuIG9ubHkgdGhlIGF1dGhlbnRpY2F0aW9uIG9yIHByaXZhY3kga2V5cyBhcmUgY2hhbmdlZC4gIElmCiB0aGVzZSBvcHRpb25zIGFyZSBub3Qgc3BlY2lmaWVkLCB0aGVuIGJvdGggdGhlIGF1dGhlbnRpY2F0aW9uIGFuZCBwcml2YWN5IGtleXMKIGFyZSBjaGFuZ2VkLgogCiAuSVAKIC5CIHNubXB1c20KLVtPUFRJT05TXSBbLUNhXSBbLUN4XSBBR0VOVCBjaGFuZ2VrZXkgW1VTRVJdCitbQ09NTU9OIE9QVElPTlNdIFtcLUNhXSBbXC1DeF0gQUdFTlQgY2hhbmdla2V5IFtVU0VSXQogCiAuUFAKIFRoaXMgY29tbWFuZCBjaGFuZ2VzIHRoZSBrZXkgaW4gYSBwZXJmZWN0LWZvcndhcmQtc2VjcmVjeSBjb21wbGlhbnQKIHdheSB0aHJvdWdoIGEgZGlmZmllLWhlbG1hbiBleGNoYW5nZS4gIFRoZSByZW1vdGUgYWdlbnQgbXVzdCBzdXBwb3J0Ci10aGUgU05NUC1VU00tREgtT0JKRUNUUy1NSUIgZm9yIHRoaXMgY29tbWFuZCB0byB3b3JrLiAgVGhlIHJlc3VsdGluZwordGhlIFNOTVBcLVVTTVwtREhcLU9CSkVDVFNcLU1JQiBmb3IgdGhpcyBjb21tYW5kIHRvIHdvcmsuICBUaGUgcmVzdWx0aW5nCiBrZXlzIGFyZSBwcmludGVkIHRvIHRoZSBjb25zb2xlIGFuZCBtYXkgYmUgdGhlbiBzZXQgaW4gZnV0dXJlIGNvbW1hbmQKLWludm9jYXRpb25zIHVzaW5nIHRoZSAtLWRlZkF1dGhMb2NhbGl6ZWRLZXkgYW5kIC0tZGVmUHJpdkxvY2FsaXplZEtleQoraW52b2NhdGlvbnMgdXNpbmcgdGhlIFwtXC1kZWZBdXRoTG9jYWxpemVkS2V5IGFuZCBcLVwtZGVmUHJpdkxvY2FsaXplZEtleQogb3B0aW9ucyBvciBpbiB5b3VyIHNubXAuY29uZiBmaWxlIHVzaW5nIHRoZSBkZWZBdXRoTG9jYWxpemVkS2V5IGFuZAogZGVmUHJpdkxvY2FsaXplZEtleSBrZXl3b3Jkcy4KIApAQCAtMTg0LDEwICsxODcsMTAgQEAKIAogLklQCiAuQiBzbm1wdXNtCi1bT1BUSU9OU10gPC1DYSB8IC1DeD4gLUNrIEFHRU5UIHBhc3N3ZCBPTEQtS0VZLU9SLVBBU1NQSFJBU0UgTkVXLUtFWS1PUi1QQVNTUEhSQVNFIFtVU0VSXQorW0NPTU1PTiBPUFRJT05TXSA8XC1DYSB8IFwtQ3g+IFwtQ2sgQUdFTlQgcGFzc3dkIE9MRC1LRVktT1ItUEFTU1BIUkFTRSBORVctS0VZLU9SLVBBU1NQSFJBU0UgW1VTRVJdCiAKIC5QUAotRWl0aGVyIHRoZSAtQ2Egb3IgdGhlIC1DeCBvcHRpb24gbXVzdCBiZSBzcGVjaWZpZWQuICBUaGUgT0xELUtFWS1PUi1QQVNTUEhSQVNFCitFaXRoZXIgdGhlIFwtQ2Egb3IgdGhlIFwtQ3ggb3B0aW9uIG11c3QgYmUgc3BlY2lmaWVkLiAgVGhlIE9MRC1LRVktT1ItUEFTU1BIUkFTRQogYW5kL29yIE5FVy1LRVktT1ItUEFTU1BIUkFTRSBhcmd1bWVudHMgY2FuIGVpdGhlciBiZSBhIHBhc3NwaHJhc2Ugb3IgYQogbG9jYWxpemVkIGtleSBzdGFydGluZyB3aXRoICIweCIsIGUuZy4gYXMgcHJpbnRlZCBvdXQgYnkgdGhlCiAuQiBjaGFuZ2VrZXkKQEAgLTIyNiw3ICsyMjksNyBAQAogaW4gbGVuZ3RoLgogLlNTIENyZWF0ZSBhIG5ldyB1c2VyCiAuUFAKLXNubXB1c20gLXYzIC11IGluaXRpYWwgLW4gIiIgLWwgYXV0aE5vUHJpdiAtYSBNRDUgLUEgc2V0dXBfcGFzc3BocmFzZQorc25tcHVzbSBcLXYzIFwtdSBpbml0aWFsIFwtbiAiIiBcLWwgYXV0aE5vUHJpdiBcLWEgTUQ1IFwtQSBzZXR1cF9wYXNzcGhyYXNlCiBsb2NhbGhvc3QgY3JlYXRlIHdlcyBpbml0aWFsCiAuSVAKIENyZWF0ZXMgYSBuZXcgdXNlciwgaGVyZSBuYW1lZCAid2VzIiB1c2luZyB0aGUgdXNlciAiaW5pdGlhbCIgdG8gZG8KQEAgLTIzNCw3ICsyMzcsNyBAQAogdGhhdCB1c2VyJ3MgcGFzc3BocmFzZSAoInNldHVwX3Bhc3NwaHJhc2UiKS4KIC5TUyBDaGFuZ2UgdGhlIHVzZXIncyBwYXNzcGhyYXNlCiAuUFAKLXNubXB1c20gLXYgMyAtdSB3ZXMgLW4gIiIgLWwgYXV0aE5vUHJpdiAtYSBNRDUgLUEgc2V0dXBfcGFzc3BocmFzZQorc25tcHVzbSBcLXYgMyBcLXUgd2VzIFwtbiAiIiBcLWwgYXV0aE5vUHJpdiBcLWEgTUQ1IFwtQSBzZXR1cF9wYXNzcGhyYXNlCiBsb2NhbGhvc3QgcGFzc3dkIHNldHVwX3Bhc3NwaHJhc2UgbmV3X3Bhc3NwaHJhc2UKIC5JUAogQWZ0ZXIgY3JlYXRpbmcgdGhlIHVzZXIgIndlcyIgd2l0aCB0aGUgc2FtZSBwYXNzcGhyYXNlIGFzIHRoZQpAQCAtMjQzLDcgKzI0Niw3IEBACiB0aGUgaW5pdGlhbCB1c2VyLCB0byAibmV3X3Bhc3NwaHJhc2UiLgogLlNTIFRlc3QgdGhlIG5ldyB1c2VyCiAuUFAKLXNubXBnZXQgLXYgMyAtdSB3ZXMgLW4gIiIgLWwgYXV0aE5vUHJpdiAtYSBNRDUgLUEgbmV3X3Bhc3NwaHJhc2UKK3NubXBnZXQgXC12IDMgXC11IHdlcyBcLW4gIiIgXC1sIGF1dGhOb1ByaXYgXC1hIE1ENSBcLUEgbmV3X3Bhc3NwaHJhc2UKIGxvY2FsaG9zdCBzeXNVcFRpbWUuMAogLklQCiBJZiB0aGUgYWJvdmUgY29tbWFuZHMgd2VyZSBzdWNjZXNzZnVsLCB0aGlzIGNvbW1hbmQgc2hvdWxkIGhhdmUKZGlmZiAtLWdpdCBhL21hbi9zbm1wdmFjbS4xLmRlZiBiL21hbi9zbm1wdmFjbS4xLmRlZgppbmRleCA2YWUxZjAzLi43MGIwODllIDEwMDY0NAotLS0gYS9tYW4vc25tcHZhY20uMS5kZWYKKysrIGIvbWFuL3NubXB2YWNtLjEuZGVmCkBAIC0xNSw3ICsxNSw3IEBACiAuQiBzbm1wdmFjbQogW0NPTU1PTiBPUFRJT05TXSBBR0VOVAogLkIgY3JlYXRlVmlldwotWy1DZV0gTkFNRSBTVUJUUkVFIE1BU0sKK1tcLUNlXSBOQU1FIFNVQlRSRUUgTUFTSwogLmJyCiAuQiBzbm1wdmFjbQogW0NPTU1PTiBPUFRJT05TXSBBR0VOVApAQCAtMTAyLDcgKzEwMiw3IEBACiAuQiBjcmVhdGVTZWMyR3JvdXAKIGNvbW1hbmQgKG9yIGVxdWl2YWxlbnQpLgogCi0uU1MgY3JlYXRlVmlldyBcZlJbLUNlXSBOQU1FIFNVQlRSRUUgTUFTS1xmUAorLlNTIGNyZWF0ZVZpZXcgXGZSW1wtQ2VdIE5BTUUgU1VCVFJFRSBNQVNLXGZQCiAuUFAKIENyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgU05NUHYzIE1JQiB2aWV3IHRhYmxlLgogQSBNSUIgdmlldyBjb25zaXN0cyBvZiBhIGZhbWlseSBvZiB2aWV3IHN1YnRyZWVzIHdoaWNoIG1heSBiZSBpbmRpdmlkdWFsbHkKQEAgLTExMCw3ICsxMTAsNyBAQAogZGVmaW5lZCBieSBhIGNvbWJpbmF0aW9uIG9mIGFuIE9JRCBzdWJ0cmVlIHRvZ2V0aGVyIHdpdGggYSBiaXQgc3RyaW5nIG1hc2suCiBUaGUgdmlldyB0YWJsZSBpcyBpbmRleGVkIGJ5IHRoZSB2aWV3IG5hbWUgYW5kIHN1YnRyZWUgT0lEIHZhbHVlcy4KIC5QUAotWy1DZV0KK1tcLUNlXQogLklQCiBBbiBvcHRpb25hbCBmbGFnIHRvIGluZGljYXRlIHRoYXQgdGhpcyB2aWV3IHN1YnRyZWUgc2hvdWxkIGJlIGV4Y2x1ZGVkCiBmcm9tIHRoZSBuYW1lZCB2aWV3LgpAQCAtMzI3LDcgKzMyNyw3IEBACiAuUFAKIFRoaXMgY3JlYXRlcyBhIG5ldyBzZWN1cml0eSBncm91cCBuYW1lZCAiUk9Hcm91cCIgY29udGFpbmluZyB0aGUgKHByZS1leGlzdGluZykKIHVzZXIgIndlcyIsIGEgbmV3IHZpZXcgInN5c1ZpZXciIGNvbnRhaW5pbmcganVzdCB0aGUgT0lEIHRyZWUgYmFzZWQgb24KLS5JIC5pc28oMSkub3JnKDMpLmRvZCg2KS5pbmV0KDEpLm1nbXQoMikubWliLTIoMSkuc3lzdGVtKDEpCisuSSAuaXNvKDEpLm9yZygzKS5kb2QoNikuaW5ldCgxKS5tZ210KDIpLm1pYlwtMigxKS5zeXN0ZW0oMSkKICwgYW5kIHRoZW4gYWxsb3dzIHRob3NlIHVzZXJzIGluIHRoZSBncm91cCAiUk9Hcm91cCIgKGkuZS4gIndlcyIpCiByZWFkLWFjY2VzcywgYnV0IG5vdCB3cml0ZS1hY2Nlc3MgdG8gdGhlIHZpZXcgInN5c1ZpZXciIChpLmUuIHRoZSBzeXN0ZW0gZ3JvdXApLgogCmRpZmYgLS1naXQgYS9tYW4vc25tcHdhbGsuMS5kZWYgYi9tYW4vc25tcHdhbGsuMS5kZWYKaW5kZXggMGM1NWQ3Mi4uZDlmM2Q1YyAxMDA2NDQKLS0tIGEvbWFuL3NubXB3YWxrLjEuZGVmCisrKyBiL21hbi9zbm1wd2Fsay4xLmRlZgpAQCAtMSw3ICsxLDcgQEAKIC5cIiAtKi0gbnJvZmYgLSotCi0uXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAKLS5cIiBTZWUgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlcgotLlwiIGNvcHlyaWdodHMgdGhhdCBtYXkgYXBwbHk6CisuXCIgUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0LiAgU2VlCisuXCIgdGhlIE5ldC1TTk1QIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisuXCIgdGhhdCBtYXkgYXBwbHk6CiAuXCIgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAuXCIgCUNvcHlyaWdodCAxOTg4LCAxOTg5IGJ5IENhcm5lZ2llIE1lbGxvbiBVbml2ZXJzaXR5CiAuXCIgCkBAIC0yMyw3ICsyMyw3IEBACiAuXCIgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUwogLlwiIFNPRlRXQVJFLgogLlwiICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS5USCBTTk1QV0FMSyAxICIyMyBBdWcgMjAwNCIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKKy5USCBTTk1QV0FMSyAxICIyOCBNYXkgMjAwNyIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiBzbm1wd2FsayAtIHJldHJpZXZlIGEgc3VidHJlZSBvZiBtYW5hZ2VtZW50IHZhbHVlcyB1c2luZyBTTk1QIEdFVE5FWFQgcmVxdWVzdHMKIC5TSCBTWU5PUFNJUwpAQCAtNDMsNyArNDMsNyBAQAogLlBQCiBJZiBubyBPSUQgYXJndW1lbnQgaXMgcHJlc2VudCwKIC5CIHNubXB3YWxrCi13aWxsIHNlYXJjaCB0aGUgc3VidHJlZSByb290ZWQgYXQgU05NUHYyLVNNSTo6bWliLTIKK3dpbGwgc2VhcmNoIHRoZSBzdWJ0cmVlIHJvb3RlZCBhdCBTTk1QdjJcLVNNSTo6bWliXC0yCiAoaW5jbHVkaW5nIGFueSBNSUIgb2JqZWN0IHZhbHVlcyBmcm9tIG90aGVyIE1JQiBtb2R1bGVzLAogdGhhdCBhcmUgZGVmaW5lZCBhcyBseWluZyB3aXRoaW4gdGhpcyBzdWJ0cmVlKS4KIElmIHRoZSBuZXR3b3JrIGVudGl0eSBoYXMgYW4gZXJyb3IgcHJvY2Vzc2luZyB0aGUgcmVxdWVzdCBwYWNrZXQsIGFuCkBAIC01NCw3ICs1NCw3IEBACiBNSUIsIHRoZSBtZXNzYWdlICJFbmQgb2YgTUlCIiB3aWxsIGJlIGRpc3BsYXllZC4KIC5TSCBPUFRJT05TCiAuVFAgOAotLkIgLUNjCisuQiBcLUNjCiBEbyBub3QgY2hlY2sgd2hldGhlciB0aGUgcmV0dXJuZWQgT0lEcyBhcmUgaW5jcmVhc2luZy4gIFNvbWUgYWdlbnRzCiAoTGFzZXJKZXRzIGFyZSBhbiBleGFtcGxlKSByZXR1cm4gT0lEcyBvdXQgb2Ygb3JkZXIsIGJ1dCBjYW4KIGNvbXBsZXRlIHRoZSB3YWxrIGFueXdheS4gIE90aGVyIGFnZW50cyByZXR1cm4gT0lEcyB0aGF0IGFyZSBvdXQgb2YKQEAgLTY0LDEwICs2NCwxNSBAQAogLkIgc25tcHdhbGsKIHRyaWVzIHRvIGRldGVjdCB0aGlzIGJlaGF2aW9yIGFuZCB3YXJucyB5b3Ugd2hlbiBpdCBoaXRzIGFuIGFnZW50CiBhY3RpbmcgaWxsZWdhbGx5LiAgVXNlCi0uQiAtQ2MKKy5CIFwtQ2MKIHRvIHR1cm4gb2ZmIHRoaXMgY2hlY2suCiAuVFAKLS5CIC1DaQorLkIgXC1DRSB7T0lEfQorRW5kIHRoZSB3YWxrIGF0IHRoZSBzcGVjaWZpZWQgT0lELCByYXRoZXIgdGhhbiBhIHNpbXBsZSBzdWJ0cmVlLgorVGhpcyBjYW4gYmUgdXNlZCB0byB3YWxrIGEgcGFydGlhbCBzdWJ0cmVlLCBzZWxlY3RlZCBjb2x1bW5zIG9mCithIHRhYmxlLCBvciBldmVuIHR3byBvciBtb3JlIHRhYmxlcyB3aXRoaW4gYSBzaW5nbGUgY29tbWFuZC4KKy5UUAorLkIgXC1DaQogSW5jbHVkZSB0aGUgZ2l2ZW4gT0lEIGluIHRoZSBzZWFyY2ggcmFuZ2UuICBOb3JtYWxseQogLkIgc25tcHdhbGsKIHVzZXMgR0VUTkVYVCByZXF1ZXN0cyBzdGFydGluZyB3aXRoIHRoZSBPSUQgeW91IHNwZWNpZmllZCBhbmQgcmV0dXJucwpAQCAtNzYsNyArODEsNyBAQAogcmVzdWx0cyBpZiBpdCBpcyBhIHZhbGlkIE9JRCBpbiB0aGUgdHJlZSBpdHNlbGYuICBUaGlzIG9wdGlvbiBsZXRzIHlvdQogZG8gdGhpcyBleHBsaWNpdGx5LgogLlRQCi0uQiAtQ0kKKy5CIFwtQ0kKIEluIGZhY3QsIHRoZSBnaXZlbiBPSUQgd2lsbCBiZSByZXRyaWV2ZWQgYXV0b21hdGljYWxseSBpZiB0aGUgbWFpbgogc3VidHJlZSB3YWxrIHJldHVybnMgbm8gdXNlYWJsZSB2YWx1ZXMuICBUaGlzIGFsbG93cyBhIHdhbGsgb2YgYQogc2luZ2xlIGluc3RhbmNlIHRvIGJlaGF2ZSBhcyBnZW5lcmFsbHkgZXhwZWN0ZWQsIGFuZCByZXR1cm4gdGhlCkBAIC04NCwxMCArODksMTAgQEAKIFRoaXMgb3B0aW9uIHR1cm5zIG9mZiB0aGlzIGZpbmFsIEdFVCByZXF1ZXN0LCBzbyBhIHdhbGsgb2YgYQogc2luZ2xlIGluc3RhbmNlIHdpbGwgcmV0dXJuIG5vdGhpbmcuCiAuVFAKLS5CIC1DcAorLkIgXC1DcAogVXBvbiBjb21wbGV0aW9uIG9mIHRoZSB3YWxrLCBwcmludCB0aGUgbnVtYmVyIG9mIHZhcmlhYmxlcyBmb3VuZC4KIC5UUAotLkIgLUN0CisuQiBcLUN0CiBVcG9uIGNvbXBsZXRpb24gb2YgdGhlIHdhbGssIHByaW50IHRoZSB0b3RhbCB3YWxsLWNsb2NrIHRpbWUgaXQgdG9vawogdG8gY29sbGVjdCB0aGUgZGF0YSAoaW4gc2Vjb25kcykuICBOb3RlIHRoYXQgdGhlIHRpbWVyIGlzIHN0YXJ0ZWQganVzdAogYmVmb3JlIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGRhdGEgcmVxdWVzdCBzZXJpZXMgYW5kIHN0b3BwZWQganVzdCBhZnRlcgpAQCAtMTAwLDE1ICsxMDUsMTUgQEAKIHRha2VzIHRoZSBjb21tb24gb3B0aW9ucyBkZXNjcmliZWQgaW4gdGhlIAogLkkgc25tcGNtZCgxKQogbWFudWFsIHBhZ2UuCisuU0ggRVhBTVBMRVMKIC5icgogTm90ZSB0aGF0Ci0uQiBzbm1wYnVsa2dldAorLkIgc25tcHdhbGsKIFJFUVVJUkVTICBhbiBhcmd1bWVudCBzcGVjaWZ5aW5nIHRoZSBhZ2VudCB0byBxdWVyeQogYW5kIGF0IG1vc3Qgb25lIE9JRCBhcmd1bWVudCwgYXMgZGVzY3JpYmVkIHRoZXJlLgotLlNIIEVYQU1QTEUKIFRoZSBjb21tYW5kOgogLlBQCi1zbm1wd2FsayAtT3MgLWMgcHVibGljIC12IDEgemV1cyBzeXN0ZW0KK3NubXB3YWxrIFwtT3MgXC1jIHB1YmxpYyBcLXYgMSB6ZXVzIHN5c3RlbQogLlBQCiB3aWxsIHJldHJpZXZlIGFsbCBvZiB0aGUgdmFyaWFibGVzIHVuZGVyIHN5c3RlbToKIC5QUApAQCAtMTI1LDUgKzEzMCwxMyBAQAogc3lzTG9jYXRpb24uMCA9IFNUUklORzogIiIKIC5icgogc3lzU2VydmljZXMuMCA9IElOVEVHRVI6IDcyCisuYnIKKyhwbHVzIHRoZSBjb250ZW50cyBvZiB0aGUgc3lzT1JUYWJsZSkuCisKK1RoZSBjb21tYW5kOgorLlBQCitzbm1wd2FsayBcLU9zIFwtYyBwdWJsaWMgXC12IDEgXC1DRSBzeXNPUlRhYmxlIHpldXMgc3lzdGVtCisuUFAKK3dpbGwgcmV0cmlldmUgdGhlIHNjYWxhciB2YWx1ZXMsIGJ1dCBvbWl0IHRoZSBzeXNPUlRhYmxlLgogLlNIICJTRUUgQUxTTyIKIHNubXBjbWQoMSksIHNubXBidWxrd2FsaygxKSwgdmFyaWFibGVzKDUpLgpkaWZmIC0tZ2l0IGEvbWFuL3RrbWliLjEuZGVmIGIvbWFuL3RrbWliLjEuZGVmCmluZGV4IGZhNDVkY2UuLmYwMjUzYjkgMTAwNjQ0Ci0tLSBhL21hbi90a21pYi4xLmRlZgorKysgYi9tYW4vdGttaWIuMS5kZWYKQEAgLTEsNCArMSw0IEBACi0uVEggdGttaWIgMSAiMTYgTm92IDIwMDYiIFZWRVJTSU9OSU5GTyAiTmV0LVNOTVAiCisuVEggdGttaWIgIjEiICIxNiBOb3YgMjAwNiIgVlZFUlNJT05JTkZPICJOZXQtU05NUCIKIC5TSCBOQU1FCiB0a21pYiAtIGFuIGludGVyYWN0aXZlIGdyYXBoaWNhbCBNSUIgYnJvd3NlciBmb3IgU05NUAogLlNIIFNZTk9QU0lTCmRpZmYgLS1naXQgYS9taWJzL0JSSURHRS1NSUIudHh0IGIvbWlicy9CUklER0UtTUlCLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTc3YTE5Ci0tLSAvZGV2L251bGwKKysrIGIvbWlicy9CUklER0UtTUlCLnR4dApAQCAtMCwwICsxLDE0NzIgQEAKK0JSSURHRS1NSUIgREVGSU5JVElPTlMgOjo9IEJFR0lOCisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIE1JQiBmb3IgSUVFRSA4MDIuMUQgZGV2aWNlcworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorSU1QT1JUUworICAgIE1PRFVMRS1JREVOVElUWSwgT0JKRUNULVRZUEUsIE5PVElGSUNBVElPTi1UWVBFLAorICAgIENvdW50ZXIzMiwgSW50ZWdlcjMyLCBUaW1lVGlja3MsIG1pYi0yCisgICAgICAgIEZST00gU05NUHYyLVNNSQorICAgIFRFWFRVQUwtQ09OVkVOVElPTiwgTWFjQWRkcmVzcworICAgICAgICBGUk9NIFNOTVB2Mi1UQworICAgIE1PRFVMRS1DT01QTElBTkNFLCBPQkpFQ1QtR1JPVVAsIE5PVElGSUNBVElPTi1HUk9VUAorICAgICAgICBGUk9NIFNOTVB2Mi1DT05GCisgICAgSW50ZXJmYWNlSW5kZXggRlJPTSBJRi1NSUIKKyAgICA7CisKK2RvdDFkQnJpZGdlIE1PRFVMRS1JREVOVElUWQorICAgIExBU1QtVVBEQVRFRCAiMjAwNTA5MTkwMDAwWiIKKyAgICBPUkdBTklaQVRJT04gIklFVEYgQnJpZGdlIE1JQiBXb3JraW5nIEdyb3VwIgorICAgIENPTlRBQ1QtSU5GTworICAgICAgICAiRW1haWw6IGJyaWRnZS1taWJAaWV0Zi5vcmcKKworICAgICAgICAgICAgICAgICBLLkMuIE5vcnNldGggKEVkaXRvcikKKyAgICAgICAgICAgICAgICAgTC0zIENvbW11bmljYXRpb25zCisgICAgICAgICAgICBUZWw6ICsxIDgwMS01OTQtMjgwOQorICAgICAgICAgIEVtYWlsOiBrZW55b24uYy5ub3JzZXRoQEwtM2NvbS5jb20KKyAgICAgICAgIFBvc3RhbDogNjQwIE4uIDIyMDAgV2VzdC4KKyAgICAgICAgICAgICAgICAgU2FsdCBMYWtlIENpdHksIFV0YWggODQxMTYtMDg1MAorCisgICAgICAgICAgICAgICAgIExlcyBCZWxsIChFZGl0b3IpCisgICAgICAgICAgICAgICAgIDNDb20gRXVyb3BlIExpbWl0ZWQKKyAgICAgICAgICBQaG9uZTogKzQ0IDE0NDIgNDM4MDI1CisgICAgICAgICAgRW1haWw6IGVsYmVsbEBudGx3b3JsZC5jb20KKyAgICAgICAgIFBvc3RhbDogM0NvbSBDZW50cmUsIEJvdW5kYXJ5IFdheQorICAgICAgICAgICAgICAgICBIZW1lbCBIZW1wc3RlYWQKKyAgICAgICAgICAgICAgICAgSGVydHMuICBIUDIgN1lVCisgICAgICAgICAgICAgICAgIFVLCisKKyAgICAgICAgIFNlbmQgY29tbWVudHMgdG8gPGJyaWRnZS1taWJAaWV0Zi5vcmc+IgorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgQnJpZGdlIE1JQiBtb2R1bGUgZm9yIG1hbmFnaW5nIGRldmljZXMgdGhhdCBzdXBwb3J0CisgICAgICAgIElFRUUgODAyLjFELgorCisgICAgICAgIENvcHlyaWdodCAoQykgVGhlIEludGVybmV0IFNvY2lldHkgKDIwMDUpLiAgVGhpcyB2ZXJzaW9uIG9mCisgICAgICAgIHRoaXMgTUlCIG1vZHVsZSBpcyBwYXJ0IG9mIFJGQyA0MTg4OyBzZWUgdGhlIFJGQyBpdHNlbGYgZm9yCisgICAgICAgIGZ1bGwgbGVnYWwgbm90aWNlcy4iCisgICAgUkVWSVNJT04gICAgICIyMDA1MDkxOTAwMDBaIgorICAgIERFU0NSSVBUSU9OCisgICAgICAgICAiVGhpcmQgcmV2aXNpb24sIHB1Ymxpc2hlZCBhcyBwYXJ0IG9mIFJGQyA0MTg4LgorCisgICAgICAgICBUaGUgTUlCIG1vZHVsZSBoYXMgYmVlbiBjb252ZXJ0ZWQgdG8gU01JdjIgZm9ybWF0LgorICAgICAgICAgQ29uZm9ybWFuY2Ugc3RhdGVtZW50cyBoYXZlIGJlZW4gYWRkZWQgYW5kIHNvbWUKKyAgICAgICAgIGRlc2NyaXB0aW9uIGFuZCByZWZlcmVuY2UgY2xhdXNlcyBoYXZlIGJlZW4gdXBkYXRlZC4KKworICAgICAgICAgVGhlIG9iamVjdCBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyIHdhcyBhZGRlZCB0bworICAgICAgICAgc3VwcG9ydCBJRUVFIDgwMi4xdCBhbmQgdGhlIHBlcm1pc3NpYmxlIHZhbHVlcyBvZgorICAgICAgICAgZG90MWRTdHBQcmlvcml0eSBhbmQgZG90MWRTdHBQb3J0UHJpb3JpdHkgaGF2ZSBiZWVuCisgICAgICAgICBjbGFyaWZpZWQgZm9yIGJyaWRnZXMgc3VwcG9ydGluZyBJRUVFIDgwMi4xdCBvcgorICAgICAgICAgSUVFRSA4MDIuMXcuCisKKyAgICAgICAgIFRoZSBpbnRlcnByZXRhdGlvbiBvZiBkb3QxZFN0cFRpbWVTaW5jZVRvcG9sb2d5Q2hhbmdlCisgICAgICAgICBoYXMgYmVlbiBjbGFyaWZpZWQgZm9yIGJyaWRnZXMgc3VwcG9ydGluZyB0aGUgUmFwaWQKKyAgICAgICAgIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgKFJTVFApLiIKKyAgICBSRVZJU0lPTiAgICAgIjE5OTMwNzMxMDAwMFoiCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgICJTZWNvbmQgcmV2aXNpb24sIHB1Ymxpc2hlZCBhcyBwYXJ0IG9mIFJGQyAxNDkzLiIKKyAgICBSRVZJU0lPTiAgICAgIjE5OTExMjMxMDAwMFoiCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgICJJbml0aWFsIHJldmlzaW9uLCBwdWJsaXNoZWQgYXMgcGFydCBvZiBSRkMgMTI4Ni4iCisgICAgOjo9IHsgbWliLTIgMTcgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBUZXh0dWFsIENvbnZlbnRpb25zCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK0JyaWRnZUlkIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBCcmlkZ2UtSWRlbnRpZmllciwgYXMgdXNlZCBpbiB0aGUgU3Bhbm5pbmcgVHJlZQorICAgICAgICBQcm90b2NvbCwgdG8gdW5pcXVlbHkgaWRlbnRpZnkgYSBicmlkZ2UuICBJdHMgZmlyc3QgdHdvCisgICAgICAgIG9jdGV0cyAoaW4gbmV0d29yayBieXRlIG9yZGVyKSBjb250YWluIGEgcHJpb3JpdHkgdmFsdWUsCisgICAgICAgIGFuZCBpdHMgbGFzdCA2IG9jdGV0cyBjb250YWluIHRoZSBNQUMgYWRkcmVzcyB1c2VkIHRvCisgICAgICAgIHJlZmVyIHRvIGEgYnJpZGdlIGluIGEgdW5pcXVlIGZhc2hpb24gKHR5cGljYWxseSwgdGhlCisgICAgICAgIG51bWVyaWNhbGx5IHNtYWxsZXN0IE1BQyBhZGRyZXNzIG9mIGFsbCBwb3J0cyBvbiB0aGUKKyAgICAgICAgYnJpZGdlKS4iCisgICAgU1lOVEFYICAgICAgT0NURVQgU1RSSU5HIChTSVpFICg4KSkKKworVGltZW91dCA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCisgICAgRElTUExBWS1ISU5UICJkIgorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBTcGFubmluZyBUcmVlIFByb3RvY29sIChTVFApIHRpbWVyIGluIHVuaXRzIG9mIDEvMTAwCisgICAgICAgIHNlY29uZHMuICBTZXZlcmFsIG9iamVjdHMgaW4gdGhpcyBNSUIgbW9kdWxlIHJlcHJlc2VudAorICAgICAgICB2YWx1ZXMgb2YgdGltZXJzIHVzZWQgYnkgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuCisgICAgICAgIEluIHRoaXMgTUlCLCB0aGVzZSB0aW1lcnMgaGF2ZSB2YWx1ZXMgaW4gdW5pdHMgb2YKKyAgICAgICAgaHVuZHJlZHRocyBvZiBhIHNlY29uZCAoaS5lLiwgMS8xMDAgc2VjcykuCisKKyAgICAgICAgVGhlc2UgdGltZXJzLCB3aGVuIHN0b3JlZCBpbiBhIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wncworICAgICAgICBCUERVLCBhcmUgaW4gdW5pdHMgb2YgMS8yNTYgc2Vjb25kcy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQKKyAgICAgICAgODAyLjFELTE5OTggc3BlY2lmaWVzIGEgc2V0dGFibGUgZ3JhbnVsYXJpdHkgb2Ygbm8gbW9yZQorICAgICAgICB0aGFuIG9uZSBzZWNvbmQgZm9yIHRoZXNlIHRpbWVycy4gIFRvIGF2b2lkIGFtYmlndWl0eSwKKyAgICAgICAgYSBjb252ZXJzaW9uIGFsZ29yaXRobSBpcyBkZWZpbmVkIGJlbG93IGZvciBjb252ZXJ0aW5nCisgICAgICAgIGJldHdlZW4gdGhlIGRpZmZlcmVudCB1bml0cywgd2hpY2ggZW5zdXJlcyBhIHRpbWVyJ3MKKyAgICAgICAgdmFsdWUgaXMgbm90IGRpc3RvcnRlZCBieSBtdWx0aXBsZSBjb252ZXJzaW9ucy4KKworICAgICAgICBUbyBjb252ZXJ0IGEgVGltZW91dCB2YWx1ZSBpbnRvIGEgdmFsdWUgaW4gdW5pdHMgb2YKKyAgICAgICAgMS8yNTYgc2Vjb25kcywgdGhlIGZvbGxvd2luZyBhbGdvcml0aG0gc2hvdWxkIGJlIHVzZWQ6CisKKyAgICAgICAgICAgIGIgPSBmbG9vciggKG4gKiAyNTYpIC8gMTAwKQorCisgICAgICAgIHdoZXJlOgorICAgICAgICAgICAgZmxvb3IgICA9ICBxdW90aWVudCBbaWdub3JlIHJlbWFpbmRlcl0KKyAgICAgICAgICAgIG4gaXMgdGhlIHZhbHVlIGluIDEvMTAwIHNlY29uZCB1bml0cworICAgICAgICAgICAgYiBpcyB0aGUgdmFsdWUgaW4gMS8yNTYgc2Vjb25kIHVuaXRzCisKKyAgICAgICAgVG8gY29udmVydCB0aGUgdmFsdWUgZnJvbSAxLzI1NiBzZWNvbmQgdW5pdHMgYmFjayB0bworICAgICAgICAxLzEwMCBzZWNvbmRzLCB0aGUgZm9sbG93aW5nIGFsZ29yaXRobSBzaG91bGQgYmUgdXNlZDoKKworICAgICAgICAgICAgbiA9IGNlaWxpbmcoIChiICogMTAwKSAvIDI1NikKKworICAgICAgICB3aGVyZToKKyAgICAgICAgICAgIGNlaWxpbmcgPSBxdW90aWVudCBbaWYgcmVtYWluZGVyIGlzIDBdLCBvcgorICAgICAgICAgICAgICAgICAgICAgIHF1b3RpZW50ICsgMSBbaWYgcmVtYWluZGVyIGlzIG5vbnplcm9dCisgICAgICAgICAgICBuIGlzIHRoZSB2YWx1ZSBpbiAxLzEwMCBzZWNvbmQgdW5pdHMKKworICAgICAgICAgICAgYiBpcyB0aGUgdmFsdWUgaW4gMS8yNTYgc2Vjb25kIHVuaXRzCisKKyAgICAgICAgTm90ZTogaXQgaXMgaW1wb3J0YW50IHRoYXQgdGhlIGFyaXRobWV0aWMgb3BlcmF0aW9ucyBhcmUKKyAgICAgICAgZG9uZSBpbiB0aGUgb3JkZXIgc3BlY2lmaWVkIChpLmUuLCBtdWx0aXBseSBmaXJzdCwKKyAgICAgICAgZGl2aWRlIHNlY29uZCkuIgorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBzdWJ0cmVlcyBpbiB0aGUgQnJpZGdlIE1JQgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZE5vdGlmaWNhdGlvbnMgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDAgfQorCitkb3QxZEJhc2UgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IGRvdDFkQnJpZGdlIDEgfQorZG90MWRTdHAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSAyIH0KKworZG90MWRTciAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSAzIH0KKy0tIGRvY3VtZW50ZWQgaW4gUkZDIDE1MjUKKworZG90MWRUcCAgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSA0IH0KK2RvdDFkU3RhdGljICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgZG90MWRCcmlkZ2UgNSB9CisKKy0tIFN1YnRyZWVzIHVzZWQgYnkgQnJpZGdlIE1JQiBFeHRlbnNpb25zOgorLS0gICAgICBwQnJpZGdlTUlCICBNT0RVTEUtSURFTlRJVFkgICA6Oj0geyBkb3QxZEJyaWRnZSA2IH0KKy0tICAgICAgcUJyaWRnZU1JQiAgTU9EVUxFLUlERU5USVRZICAgOjo9IHsgZG90MWRCcmlkZ2UgNyB9CistLSBOb3RlIHRoYXQgdGhlIHByYWN0aWNlIG9mIHJlZ2lzdGVyaW5nIHJlbGF0ZWQgTUlCIG1vZHVsZXMKKy0tIGJlbG93IGRvdDFkQnJpZGdlIGhhcyBiZWVuIGRpc2NvdXJhZ2VkIHNpbmNlIHRoZXJlIGlzIG5vCistLSByb2J1c3QgbWVjaGFuaXNtIHRvIHRyYWNrIHN1Y2ggcmVnaXN0cmF0aW9ucy4KKworZG90MWRDb25mb3JtYW5jZSAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZEJyaWRnZSA4IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdGhlIGRvdDFkQmFzZSBzdWJ0cmVlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG90MWRCYXNlIHN1YnRyZWUgaXMgbWFuZGF0b3J5IGZvciBhbGwKKy0tIGJyaWRnZXMuCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkQmFzZUJyaWRnZUFkZHJlc3MgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBNYWNBZGRyZXNzCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgTUFDIGFkZHJlc3MgdXNlZCBieSB0aGlzIGJyaWRnZSB3aGVuIGl0IG11c3QgYmUKKyAgICAgICAgcmVmZXJyZWQgdG8gaW4gYSB1bmlxdWUgZmFzaGlvbi4gIEl0IGlzIHJlY29tbWVuZGVkCisgICAgICAgIHRoYXQgdGhpcyBiZSB0aGUgbnVtZXJpY2FsbHkgc21hbGxlc3QgTUFDIGFkZHJlc3Mgb2YKKyAgICAgICAgYWxsIHBvcnRzIHRoYXQgYmVsb25nIHRvIHRoaXMgYnJpZGdlLiAgSG93ZXZlciwgaXQgaXMgb25seQorCisgICAgICAgIHJlcXVpcmVkIHRvIGJlIHVuaXF1ZS4gIFdoZW4gY29uY2F0ZW5hdGVkIHdpdGgKKyAgICAgICAgZG90MWRTdHBQcmlvcml0eSwgYSB1bmlxdWUgQnJpZGdlSWRlbnRpZmllciBpcyBmb3JtZWQsCisgICAgICAgIHdoaWNoIGlzIHVzZWQgaW4gdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlcyAxNC40LjEuMS4zIGFuZCA3LjEyLjUiCisgICAgOjo9IHsgZG90MWRCYXNlIDEgfQorCitkb3QxZEJhc2VOdW1Qb3J0cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIFVOSVRTICAgICAgICJwb3J0cyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgcG9ydHMgY29udHJvbGxlZCBieSB0aGlzIGJyaWRnaW5nCisgICAgICAgIGVudGl0eS4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNC4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZEJhc2UgMiB9CisKK2RvdDFkQmFzZVR5cGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJTlRFR0VSIHsKKyAgICAgICAgICAgICAgICAgICAgdW5rbm93bigxKSwKKyAgICAgICAgICAgICAgICAgICAgdHJhbnNwYXJlbnQtb25seSgyKSwKKyAgICAgICAgICAgICAgICAgICAgc291cmNlcm91dGUtb25seSgzKSwKKyAgICAgICAgICAgICAgICAgICAgc3J0KDQpCisgICAgICAgICAgICAgICAgfQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW5kaWNhdGVzIHdoYXQgdHlwZSBvZiBicmlkZ2luZyB0aGlzIGJyaWRnZSBjYW4KKyAgICAgICAgcGVyZm9ybS4gIElmIGEgYnJpZGdlIGlzIGFjdHVhbGx5IHBlcmZvcm1pbmcgYQorICAgICAgICBjZXJ0YWluIHR5cGUgb2YgYnJpZGdpbmcsIHRoaXMgd2lsbCBiZSBpbmRpY2F0ZWQgYnkKKyAgICAgICAgZW50cmllcyBpbiB0aGUgcG9ydCB0YWJsZSBmb3IgdGhlIGdpdmVuIHR5cGUuIgorICAgIDo6PSB7IGRvdDFkQmFzZSAzIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gVGhlIEdlbmVyaWMgQnJpZGdlIFBvcnQgVGFibGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KK2RvdDFkQmFzZVBvcnRUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIERvdDFkQmFzZVBvcnRFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHRhYmxlIHRoYXQgY29udGFpbnMgZ2VuZXJpYyBpbmZvcm1hdGlvbiBhYm91dCBldmVyeQorICAgICAgICBwb3J0IHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgYnJpZGdlLiAgVHJhbnNwYXJlbnQsCisgICAgICAgIHNvdXJjZS1yb3V0ZSwgYW5kIHNydCBwb3J0cyBhcmUgaW5jbHVkZWQuIgorICAgIDo6PSB7IGRvdDFkQmFzZSA0IH0KKworZG90MWRCYXNlUG9ydEVudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgRG90MWRCYXNlUG9ydEVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgbGlzdCBvZiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwb3J0IG9mIHRoZSBicmlkZ2UuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjQuMiwgMTQuNi4xIgorICAgIElOREVYICB7IGRvdDFkQmFzZVBvcnQgfQorICAgIDo6PSB7IGRvdDFkQmFzZVBvcnRUYWJsZSAxIH0KKworRG90MWRCYXNlUG9ydEVudHJ5IDo6PQorICAgIFNFUVVFTkNFIHsKKyAgICAgICAgZG90MWRCYXNlUG9ydAorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZEJhc2VQb3J0SWZJbmRleAorICAgICAgICAgICAgSW50ZXJmYWNlSW5kZXgsCisgICAgICAgIGRvdDFkQmFzZVBvcnRDaXJjdWl0CisgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiwKKyAgICAgICAgZG90MWRCYXNlUG9ydERlbGF5RXhjZWVkZWREaXNjYXJkcworICAgICAgICAgICAgQ291bnRlcjMyLAorICAgICAgICBkb3QxZEJhc2VQb3J0TXR1RXhjZWVkZWREaXNjYXJkcworICAgICAgICAgICAgQ291bnRlcjMyCisgICAgfQorCitkb3QxZEJhc2VQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgxLi42NTUzNSkKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3J0IG51bWJlciBvZiB0aGUgcG9ydCBmb3Igd2hpY2ggdGhpcyBlbnRyeQorICAgICAgICBjb250YWlucyBicmlkZ2UgbWFuYWdlbWVudCBpbmZvcm1hdGlvbi4iCisgICAgOjo9IHsgZG90MWRCYXNlUG9ydEVudHJ5IDEgfQorCitkb3QxZEJhc2VQb3J0SWZJbmRleCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVyZmFjZUluZGV4CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgb2YgdGhlIGluc3RhbmNlIG9mIHRoZSBpZkluZGV4IG9iamVjdCwKKyAgICAgICAgZGVmaW5lZCBpbiBJRi1NSUIsIGZvciB0aGUgaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcKKyAgICAgICAgdG8gdGhpcyBwb3J0LiIKKyAgICA6Oj0geyBkb3QxZEJhc2VQb3J0RW50cnkgMiB9CisKK2RvdDFkQmFzZVBvcnRDaXJjdWl0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgT0JKRUNUIElERU5USUZJRVIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkZvciBhIHBvcnQgdGhhdCAocG90ZW50aWFsbHkpIGhhcyB0aGUgc2FtZSB2YWx1ZSBvZgorICAgICAgICBkb3QxZEJhc2VQb3J0SWZJbmRleCBhcyBhbm90aGVyIHBvcnQgb24gdGhlIHNhbWUgYnJpZGdlLgorICAgICAgICBUaGlzIG9iamVjdCBjb250YWlucyB0aGUgbmFtZSBvZiBhbiBvYmplY3QgaW5zdGFuY2UKKyAgICAgICAgdW5pcXVlIHRvIHRoaXMgcG9ydC4gIEZvciBleGFtcGxlLCBpbiB0aGUgY2FzZSB3aGVyZQorICAgICAgICBtdWx0aXBsZSBwb3J0cyBjb3JyZXNwb25kIG9uZS10by1vbmUgd2l0aCBtdWx0aXBsZSBYLjI1CisgICAgICAgIHZpcnR1YWwgY2lyY3VpdHMsIHRoaXMgdmFsdWUgbWlnaHQgaWRlbnRpZnkgYW4gKGUuZy4sCisgICAgICAgIHRoZSBmaXJzdCkgb2JqZWN0IGluc3RhbmNlIGFzc29jaWF0ZWQgd2l0aCB0aGUgWC4yNQorICAgICAgICB2aXJ0dWFsIGNpcmN1aXQgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQuCisKKyAgICAgICAgRm9yIGEgcG9ydCB3aGljaCBoYXMgYSB1bmlxdWUgdmFsdWUgb2YKKyAgICAgICAgZG90MWRCYXNlUG9ydElmSW5kZXgsIHRoaXMgb2JqZWN0IGNhbiBoYXZlIHRoZSB2YWx1ZQorICAgICAgICB7IDAgMCB9LiIKKyAgICA6Oj0geyBkb3QxZEJhc2VQb3J0RW50cnkgMyB9CisKK2RvdDFkQmFzZVBvcnREZWxheUV4Y2VlZGVkRGlzY2FyZHMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGlzIHBvcnQgZHVlCisgICAgICAgIHRvIGV4Y2Vzc2l2ZSB0cmFuc2l0IGRlbGF5IHRocm91Z2ggdGhlIGJyaWRnZS4gIEl0CisgICAgICAgIGlzIGluY3JlbWVudGVkIGJ5IGJvdGggdHJhbnNwYXJlbnQgYW5kIHNvdXJjZQorICAgICAgICByb3V0ZSBicmlkZ2VzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC42LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkQmFzZVBvcnRFbnRyeSA0IH0KKworZG90MWRCYXNlUG9ydE10dUV4Y2VlZGVkRGlzY2FyZHMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgZnJhbWVzIGRpc2NhcmRlZCBieSB0aGlzIHBvcnQgZHVlCisgICAgICAgIHRvIGFuIGV4Y2Vzc2l2ZSBzaXplLiAgSXQgaXMgaW5jcmVtZW50ZWQgYnkgYm90aAorICAgICAgICB0cmFuc3BhcmVudCBhbmQgc291cmNlIHJvdXRlIGJyaWRnZXMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjYuMS4xLjMiCisgICAgOjo9IHsgZG90MWRCYXNlUG9ydEVudHJ5IDUgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB0aGUgZG90MWRTdHAgc3VidHJlZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gSW1wbGVtZW50YXRpb24gb2YgdGhlIGRvdDFkU3RwIHN1YnRyZWUgaXMgb3B0aW9uYWwuICBJdCBpcworLS0gaW1wbGVtZW50ZWQgYnkgdGhvc2UgYnJpZGdlcyB0aGF0IHN1cHBvcnQgdGhlIFNwYW5uaW5nIFRyZWUKKy0tIFByb3RvY29sLgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFN0cFByb3RvY29sU3BlY2lmaWNhdGlvbiBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeworICAgICAgICAgICAgICAgICAgICB1bmtub3duKDEpLAorICAgICAgICAgICAgICAgICAgICBkZWNMYjEwMCgyKSwKKyAgICAgICAgICAgICAgICAgICAgaWVlZTgwMjFkKDMpCisgICAgICAgICAgICAgICAgfQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQW4gaW5kaWNhdGlvbiBvZiB3aGF0IHZlcnNpb24gb2YgdGhlIFNwYW5uaW5nIFRyZWUKKyAgICAgICAgUHJvdG9jb2wgaXMgYmVpbmcgcnVuLiAgVGhlIHZhbHVlICdkZWNMYjEwMCgyKScKKyAgICAgICAgaW5kaWNhdGVzIHRoZSBERUMgTEFOYnJpZGdlIDEwMCBTcGFubmluZyBUcmVlIHByb3RvY29sLgorICAgICAgICBJRUVFIDgwMi4xRCBpbXBsZW1lbnRhdGlvbnMgd2lsbCByZXR1cm4gJ2llZWU4MDIxZCgzKScuCisgICAgICAgIElmIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgSUVFRSBTcGFubmluZyBUcmVlIFByb3RvY29sCisgICAgICAgIHRoYXQgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBjdXJyZW50IHZlcnNpb24KKyAgICAgICAgYXJlIHJlbGVhc2VkIGEgbmV3IHZhbHVlIHdpbGwgYmUgZGVmaW5lZC4iCisgICAgOjo9IHsgZG90MWRTdHAgMSB9CisKK2RvdDFkU3RwUHJpb3JpdHkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDAuLjY1NTM1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSBvZiB0aGUgd3JpdGUtYWJsZSBwb3J0aW9uIG9mIHRoZSBCcmlkZ2UgSUQKKyAgICAgICAgKGkuZS4sIHRoZSBmaXJzdCB0d28gb2N0ZXRzIG9mIHRoZSAoOCBvY3RldCBsb25nKSBCcmlkZ2UKKyAgICAgICAgSUQpLiAgVGhlIG90aGVyIChsYXN0KSA2IG9jdGV0cyBvZiB0aGUgQnJpZGdlIElEIGFyZQorICAgICAgICBnaXZlbiBieSB0aGUgdmFsdWUgb2YgZG90MWRCYXNlQnJpZGdlQWRkcmVzcy4KKyAgICAgICAgT24gYnJpZGdlcyBzdXBwb3J0aW5nIElFRUUgODAyLjF0IG9yIElFRUUgODAyLjF3LAorICAgICAgICBwZXJtaXNzaWJsZSB2YWx1ZXMgYXJlIDAtNjE0NDAsIGluIHN0ZXBzIG9mIDQwOTYuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5OCBjbGF1c2UgOC4xMC4yLCBUYWJsZSA4LTQsCisgICAgICAgIElFRUUgODAyLjF0IGNsYXVzZSA4LjEwLjIsIFRhYmxlIDgtNCwgY2xhdXNlIDE0LjMuIgorICAgIDo6PSB7IGRvdDFkU3RwIDIgfQorCitkb3QxZFN0cFRpbWVTaW5jZVRvcG9sb2d5Q2hhbmdlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZVRpY2tzCisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdGltZSAoaW4gaHVuZHJlZHRocyBvZiBhIHNlY29uZCkgc2luY2UgdGhlCisgICAgICAgIGxhc3QgdGltZSBhIHRvcG9sb2d5IGNoYW5nZSB3YXMgZGV0ZWN0ZWQgYnkgdGhlCisgICAgICAgIGJyaWRnZSBlbnRpdHkuCisgICAgICAgIEZvciBSU1RQLCB0aGlzIHJlcG9ydHMgdGhlIHRpbWUgc2luY2UgdGhlIHRjV2hpbGUKKyAgICAgICAgdGltZXIgZm9yIGFueSBwb3J0IG9uIHRoaXMgQnJpZGdlIHdhcyBub256ZXJvLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTggY2xhdXNlIDE0LjguMS4xLiwKKyAgICAgICAgSUVFRSA4MDIuMXcgY2xhdXNlIDE0LjguMS4xLiIKKyAgICA6Oj0geyBkb3QxZFN0cCAzIH0KKworZG90MWRTdHBUb3BDaGFuZ2VzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdG90YWwgbnVtYmVyIG9mIHRvcG9sb2d5IGNoYW5nZXMgZGV0ZWN0ZWQgYnkKKyAgICAgICAgdGhpcyBicmlkZ2Ugc2luY2UgdGhlIG1hbmFnZW1lbnQgZW50aXR5IHdhcyBsYXN0CisgICAgICAgIHJlc2V0IG9yIGluaXRpYWxpemVkLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTggY2xhdXNlIDE0LjguMS4xLiIKKyAgICA6Oj0geyBkb3QxZFN0cCA0IH0KKworZG90MWRTdHBEZXNpZ25hdGVkUm9vdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEJyaWRnZUlkCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgYnJpZGdlIGlkZW50aWZpZXIgb2YgdGhlIHJvb3Qgb2YgdGhlIHNwYW5uaW5nCisgICAgICAgIHRyZWUsIGFzIGRldGVybWluZWQgYnkgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wsCisgICAgICAgIGFzIGV4ZWN1dGVkIGJ5IHRoaXMgbm9kZS4gIFRoaXMgdmFsdWUgaXMgdXNlZCBhcworICAgICAgICB0aGUgUm9vdCBJZGVudGlmaWVyIHBhcmFtZXRlciBpbiBhbGwgQ29uZmlndXJhdGlvbgorICAgICAgICBCcmlkZ2UgUERVcyBvcmlnaW5hdGVkIGJ5IHRoaXMgbm9kZS4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgOC41LjMuMSIKKyAgICA6Oj0geyBkb3QxZFN0cCA1IH0KKworZG90MWRTdHBSb290Q29zdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGNvc3Qgb2YgdGhlIHBhdGggdG8gdGhlIHJvb3QgYXMgc2VlbiBmcm9tCisgICAgICAgIHRoaXMgYnJpZGdlLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy4yIgorICAgIDo6PSB7IGRvdDFkU3RwIDYgfQorCitkb3QxZFN0cFJvb3RQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9ydCBudW1iZXIgb2YgdGhlIHBvcnQgdGhhdCBvZmZlcnMgdGhlIGxvd2VzdAorICAgICAgICBjb3N0IHBhdGggZnJvbSB0aGlzIGJyaWRnZSB0byB0aGUgcm9vdCBicmlkZ2UuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjMiCisgICAgOjo9IHsgZG90MWRTdHAgNyB9CisKK2RvdDFkU3RwTWF4QWdlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZW91dAorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG1heGltdW0gYWdlIG9mIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wgaW5mb3JtYXRpb24KKyAgICAgICAgbGVhcm5lZCBmcm9tIHRoZSBuZXR3b3JrIG9uIGFueSBwb3J0IGJlZm9yZSBpdCBpcworICAgICAgICBkaXNjYXJkZWQsIGluIHVuaXRzIG9mIGh1bmRyZWR0aHMgb2YgYSBzZWNvbmQuICBUaGlzIGlzCisgICAgICAgIHRoZSBhY3R1YWwgdmFsdWUgdGhhdCB0aGlzIGJyaWRnZSBpcyBjdXJyZW50bHkgdXNpbmcuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS4zLjQiCisgICAgOjo9IHsgZG90MWRTdHAgOCB9CisKK2RvdDFkU3RwSGVsbG9UaW1lIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZW91dAorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGFtb3VudCBvZiB0aW1lIGJldHdlZW4gdGhlIHRyYW5zbWlzc2lvbiBvZgorICAgICAgICBDb25maWd1cmF0aW9uIGJyaWRnZSBQRFVzIGJ5IHRoaXMgbm9kZSBvbiBhbnkgcG9ydCB3aGVuCisgICAgICAgIGl0IGlzIHRoZSByb290IG9mIHRoZSBzcGFubmluZyB0cmVlLCBvciB0cnlpbmcgdG8gYmVjb21lCisgICAgICAgIHNvLCBpbiB1bml0cyBvZiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLiAgVGhpcyBpcyB0aGUKKyAgICAgICAgYWN0dWFsIHZhbHVlIHRoYXQgdGhpcyBicmlkZ2UgaXMgY3VycmVudGx5IHVzaW5nLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy41IgorICAgIDo6PSB7IGRvdDFkU3RwIDkgfQorCitkb3QxZFN0cEhvbGRUaW1lIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIHRpbWUgdmFsdWUgZGV0ZXJtaW5lcyB0aGUgaW50ZXJ2YWwgbGVuZ3RoCisgICAgICAgIGR1cmluZyB3aGljaCBubyBtb3JlIHRoYW4gdHdvIENvbmZpZ3VyYXRpb24gYnJpZGdlCisgICAgICAgIFBEVXMgc2hhbGwgYmUgdHJhbnNtaXR0ZWQgYnkgdGhpcyBub2RlLCBpbiB1bml0cworICAgICAgICBvZiBodW5kcmVkdGhzIG9mIGEgc2Vjb25kLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy4xNCIKKyAgICA6Oj0geyBkb3QxZFN0cCAxMCB9CisKK2RvdDFkU3RwRm9yd2FyZERlbGF5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZW91dAorICAgIFVOSVRTICAgICAgICJjZW50aS1zZWNvbmRzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyB0aW1lIHZhbHVlLCBtZWFzdXJlZCBpbiB1bml0cyBvZiBodW5kcmVkdGhzIG9mIGEKKyAgICAgICAgc2Vjb25kLCBjb250cm9scyBob3cgZmFzdCBhIHBvcnQgY2hhbmdlcyBpdHMgc3Bhbm5pbmcKKyAgICAgICAgc3RhdGUgd2hlbiBtb3ZpbmcgdG93YXJkcyB0aGUgRm9yd2FyZGluZyBzdGF0ZS4gIFRoZQorICAgICAgICB2YWx1ZSBkZXRlcm1pbmVzIGhvdyBsb25nIHRoZSBwb3J0IHN0YXlzIGluIGVhY2ggb2YgdGhlCisgICAgICAgIExpc3RlbmluZyBhbmQgTGVhcm5pbmcgc3RhdGVzLCB3aGljaCBwcmVjZWRlIHRoZQorICAgICAgICBGb3J3YXJkaW5nIHN0YXRlLiAgVGhpcyB2YWx1ZSBpcyBhbHNvIHVzZWQgd2hlbiBhCisgICAgICAgIHRvcG9sb2d5IGNoYW5nZSBoYXMgYmVlbiBkZXRlY3RlZCBhbmQgaXMgdW5kZXJ3YXksIHRvCisgICAgICAgIGFnZSBhbGwgZHluYW1pYyBlbnRyaWVzIGluIHRoZSBGb3J3YXJkaW5nIERhdGFiYXNlLgorICAgICAgICBbTm90ZSB0aGF0IHRoaXMgdmFsdWUgaXMgdGhlIG9uZSB0aGF0IHRoaXMgYnJpZGdlIGlzCisgICAgICAgIGN1cnJlbnRseSB1c2luZywgaW4gY29udHJhc3QgdG8KKyAgICAgICAgZG90MWRTdHBCcmlkZ2VGb3J3YXJkRGVsYXksIHdoaWNoIGlzIHRoZSB2YWx1ZSB0aGF0IHRoaXMKKyAgICAgICAgYnJpZGdlIGFuZCBhbGwgb3RoZXJzIHdvdWxkIHN0YXJ0IHVzaW5nIGlmL3doZW4gdGhpcworICAgICAgICBicmlkZ2Ugd2VyZSB0byBiZWNvbWUgdGhlIHJvb3QuXSIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy42IgorICAgIDo6PSB7IGRvdDFkU3RwIDExIH0KKworZG90MWRTdHBCcmlkZ2VNYXhBZ2UgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lb3V0ICg2MDAuLjQwMDApCisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIHRoYXQgYWxsIGJyaWRnZXMgdXNlIGZvciBNYXhBZ2Ugd2hlbiB0aGlzCisgICAgICAgIGJyaWRnZSBpcyBhY3RpbmcgYXMgdGhlIHJvb3QuICBOb3RlIHRoYXQgODAyLjFELTE5OTgKKyAgICAgICAgc3BlY2lmaWVzIHRoYXQgdGhlIHJhbmdlIGZvciB0aGlzIHBhcmFtZXRlciBpcyByZWxhdGVkCisgICAgICAgIHRvIHRoZSB2YWx1ZSBvZiBkb3QxZFN0cEJyaWRnZUhlbGxvVGltZS4gIFRoZQorICAgICAgICBncmFudWxhcml0eSBvZiB0aGlzIHRpbWVyIGlzIHNwZWNpZmllZCBieSA4MDIuMUQtMTk5OCB0bworICAgICAgICBiZSAxIHNlY29uZC4gIEFuIGFnZW50IG1heSByZXR1cm4gYSBiYWRWYWx1ZSBlcnJvciBpZiBhCisgICAgICAgIHNldCBpcyBhdHRlbXB0ZWQgdG8gYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIHdob2xlIG51bWJlcgorICAgICAgICBvZiBzZWNvbmRzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy44IgorICAgIDo6PSB7IGRvdDFkU3RwIDEyIH0KKworZG90MWRTdHBCcmlkZ2VIZWxsb1RpbWUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lb3V0ICgxMDAuLjEwMDApCisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIHRoYXQgYWxsIGJyaWRnZXMgdXNlIGZvciBIZWxsb1RpbWUgd2hlbiB0aGlzCisgICAgICAgIGJyaWRnZSBpcyBhY3RpbmcgYXMgdGhlIHJvb3QuICBUaGUgZ3JhbnVsYXJpdHkgb2YgdGhpcworICAgICAgICB0aW1lciBpcyBzcGVjaWZpZWQgYnkgODAyLjFELTE5OTggdG8gYmUgMSBzZWNvbmQuICBBbgorICAgICAgICBhZ2VudCBtYXkgcmV0dXJuIGEgYmFkVmFsdWUgZXJyb3IgaWYgYSBzZXQgaXMgYXR0ZW1wdGVkCisKKyAgICAgICAgdG8gYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIHdob2xlIG51bWJlciBvZiBzZWNvbmRzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy45IgorICAgIDo6PSB7IGRvdDFkU3RwIDEzIH0KKworZG90MWRTdHBCcmlkZ2VGb3J3YXJkRGVsYXkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBUaW1lb3V0ICg0MDAuLjMwMDApCisgICAgVU5JVFMgICAgICAgImNlbnRpLXNlY29uZHMiCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIHRoYXQgYWxsIGJyaWRnZXMgdXNlIGZvciBGb3J3YXJkRGVsYXkgd2hlbgorICAgICAgICB0aGlzIGJyaWRnZSBpcyBhY3RpbmcgYXMgdGhlIHJvb3QuICBOb3RlIHRoYXQKKyAgICAgICAgODAyLjFELTE5OTggc3BlY2lmaWVzIHRoYXQgdGhlIHJhbmdlIGZvciB0aGlzIHBhcmFtZXRlcgorICAgICAgICBpcyByZWxhdGVkIHRvIHRoZSB2YWx1ZSBvZiBkb3QxZFN0cEJyaWRnZU1heEFnZS4gIFRoZQorICAgICAgICBncmFudWxhcml0eSBvZiB0aGlzIHRpbWVyIGlzIHNwZWNpZmllZCBieSA4MDIuMUQtMTk5OCB0bworICAgICAgICBiZSAxIHNlY29uZC4gIEFuIGFnZW50IG1heSByZXR1cm4gYSBiYWRWYWx1ZSBlcnJvciBpZiBhCisgICAgICAgIHNldCBpcyBhdHRlbXB0ZWQgdG8gYSB2YWx1ZSB0aGF0IGlzIG5vdCBhIHdob2xlIG51bWJlcgorICAgICAgICBvZiBzZWNvbmRzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuMy4xMCIKKyAgICA6Oj0geyBkb3QxZFN0cCAxNCB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIFRoZSBTcGFubmluZyBUcmVlIFBvcnQgVGFibGUKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRTdHBQb3J0VGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBEb3QxZFN0cFBvcnRFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHRhYmxlIHRoYXQgY29udGFpbnMgcG9ydC1zcGVjaWZpYyBpbmZvcm1hdGlvbgorICAgICAgICBmb3IgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuIgorICAgIDo6PSB7IGRvdDFkU3RwIDE1IH0KKworZG90MWRTdHBQb3J0RW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBEb3QxZFN0cFBvcnRFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGxpc3Qgb2YgaW5mb3JtYXRpb24gbWFpbnRhaW5lZCBieSBldmVyeSBwb3J0IGFib3V0CisgICAgICAgIHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sIHN0YXRlIGZvciB0aGF0IHBvcnQuIgorICAgIElOREVYICAgeyBkb3QxZFN0cFBvcnQgfQorICAgIDo6PSB7IGRvdDFkU3RwUG9ydFRhYmxlIDEgfQorCitEb3QxZFN0cFBvcnRFbnRyeSA6Oj0KKyAgICBTRVFVRU5DRSB7CisKKyAgICAgICAgZG90MWRTdHBQb3J0CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkU3RwUG9ydFByaW9yaXR5CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkU3RwUG9ydFN0YXRlCisgICAgICAgICAgICBJTlRFR0VSLAorICAgICAgICBkb3QxZFN0cFBvcnRFbmFibGUKKyAgICAgICAgICAgIElOVEVHRVIsCisgICAgICAgIGRvdDFkU3RwUG9ydFBhdGhDb3N0CisgICAgICAgICAgICBJbnRlZ2VyMzIsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290CisgICAgICAgICAgICBCcmlkZ2VJZCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZENvc3QKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZQorICAgICAgICAgICAgQnJpZGdlSWQsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0CisgICAgICAgICAgICBPQ1RFVCBTVFJJTkcsCisgICAgICAgIGRvdDFkU3RwUG9ydEZvcndhcmRUcmFuc2l0aW9ucworICAgICAgICAgICAgQ291bnRlcjMyLAorICAgICAgICBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyCisgICAgICAgICAgICBJbnRlZ2VyMzIKKyAgICB9CisKK2RvdDFkU3RwUG9ydCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMS4uNjU1MzUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcG9ydCBudW1iZXIgb2YgdGhlIHBvcnQgZm9yIHdoaWNoIHRoaXMgZW50cnkKKyAgICAgICAgY29udGFpbnMgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbCBtYW5hZ2VtZW50IGluZm9ybWF0aW9uLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC44LjIuMS4yIgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDEgfQorCitkb3QxZFN0cFBvcnRQcmlvcml0eSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMC4uMjU1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB2YWx1ZSBvZiB0aGUgcHJpb3JpdHkgZmllbGQgdGhhdCBpcyBjb250YWluZWQgaW4KKyAgICAgICAgdGhlIGZpcnN0IChpbiBuZXR3b3JrIGJ5dGUgb3JkZXIpIG9jdGV0IG9mIHRoZSAoMiBvY3RldAorICAgICAgICBsb25nKSBQb3J0IElELiAgVGhlIG90aGVyIG9jdGV0IG9mIHRoZSBQb3J0IElEIGlzIGdpdmVuCisgICAgICAgIGJ5IHRoZSB2YWx1ZSBvZiBkb3QxZFN0cFBvcnQuCisgICAgICAgIE9uIGJyaWRnZXMgc3VwcG9ydGluZyBJRUVFIDgwMi4xdCBvciBJRUVFIDgwMi4xdywKKyAgICAgICAgcGVybWlzc2libGUgdmFsdWVzIGFyZSAwLTI0MCwgaW4gc3RlcHMgb2YgMTYuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5OCBjbGF1c2UgOC4xMC4yLCBUYWJsZSA4LTQsCisgICAgICAgIElFRUUgODAyLjF0IGNsYXVzZSA4LjEwLjIsIFRhYmxlIDgtNCwgY2xhdXNlIDE0LjMuIgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDIgfQorCitkb3QxZFN0cFBvcnRTdGF0ZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIElOVEVHRVIgeworICAgICAgICAgICAgICAgICAgICBkaXNhYmxlZCgxKSwKKyAgICAgICAgICAgICAgICAgICAgYmxvY2tpbmcoMiksCisgICAgICAgICAgICAgICAgICAgIGxpc3RlbmluZygzKSwKKyAgICAgICAgICAgICAgICAgICAgbGVhcm5pbmcoNCksCisgICAgICAgICAgICAgICAgICAgIGZvcndhcmRpbmcoNSksCisgICAgICAgICAgICAgICAgICAgIGJyb2tlbig2KQorICAgICAgICAgICAgICAgIH0KKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBwb3J0J3MgY3VycmVudCBzdGF0ZSwgYXMgZGVmaW5lZCBieSBhcHBsaWNhdGlvbiBvZgorICAgICAgICB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4gIFRoaXMgc3RhdGUgY29udHJvbHMgd2hhdAorICAgICAgICBhY3Rpb24gYSBwb3J0IHRha2VzIG9uIHJlY2VwdGlvbiBvZiBhIGZyYW1lLiAgSWYgdGhlCisgICAgICAgIGJyaWRnZSBoYXMgZGV0ZWN0ZWQgYSBwb3J0IHRoYXQgaXMgbWFsZnVuY3Rpb25pbmcsIGl0CisgICAgICAgIHdpbGwgcGxhY2UgdGhhdCBwb3J0IGludG8gdGhlIGJyb2tlbig2KSBzdGF0ZS4gIEZvcgorICAgICAgICBwb3J0cyB0aGF0IGFyZSBkaXNhYmxlZCAoc2VlIGRvdDFkU3RwUG9ydEVuYWJsZSksIHRoaXMKKyAgICAgICAgb2JqZWN0IHdpbGwgaGF2ZSBhIHZhbHVlIG9mIGRpc2FibGVkKDEpLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS4yIgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDMgfQorCitkb3QxZFN0cFBvcnRFbmFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJTlRFR0VSIHsKKyAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCgxKSwKKyAgICAgICAgICAgICAgICAgICAgZGlzYWJsZWQoMikKKyAgICAgICAgICAgICAgICB9CisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGVuYWJsZWQvZGlzYWJsZWQgc3RhdHVzIG9mIHRoZSBwb3J0LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS4yIgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDQgfQorCitkb3QxZFN0cFBvcnRQYXRoQ29zdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMS4uNjU1MzUpCisgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGNvbnRyaWJ1dGlvbiBvZiB0aGlzIHBvcnQgdG8gdGhlIHBhdGggY29zdCBvZgorICAgICAgICBwYXRocyB0b3dhcmRzIHRoZSBzcGFubmluZyB0cmVlIHJvb3Qgd2hpY2ggaW5jbHVkZQorICAgICAgICB0aGlzIHBvcnQuICA4MDIuMUQtMTk5OCByZWNvbW1lbmRzIHRoYXQgdGhlIGRlZmF1bHQKKyAgICAgICAgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIgYmUgaW4gaW52ZXJzZSBwcm9wb3J0aW9uIHRvCisKKyAgICAgICAgdGhlIHNwZWVkIG9mIHRoZSBhdHRhY2hlZCBMQU4uCisKKyAgICAgICAgTmV3IGltcGxlbWVudGF0aW9ucyBzaG91bGQgc3VwcG9ydCBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyLgorICAgICAgICBJZiB0aGUgcG9ydCBwYXRoIGNvc3RzIGV4Y2VlZHMgdGhlIG1heGltdW0gdmFsdWUgb2YgdGhpcworICAgICAgICBvYmplY3QgdGhlbiB0aGlzIG9iamVjdCBzaG91bGQgcmVwb3J0IHRoZSBtYXhpbXVtIHZhbHVlLAorICAgICAgICBuYW1lbHkgNjU1MzUuICBBcHBsaWNhdGlvbnMgc2hvdWxkIHRyeSB0byByZWFkIHRoZQorICAgICAgICBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyIG9iamVjdCBpZiB0aGlzIG9iamVjdCByZXBvcnRzCisgICAgICAgIHRoZSBtYXhpbXVtIHZhbHVlLiIKKyAgICBSRUZFUkVOQ0UgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS4zIgorICAgICAgICA6Oj0geyBkb3QxZFN0cFBvcnRFbnRyeSA1IH0KKworZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3QgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBCcmlkZ2VJZAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHVuaXF1ZSBCcmlkZ2UgSWRlbnRpZmllciBvZiB0aGUgQnJpZGdlCisgICAgICAgIHJlY29yZGVkIGFzIHRoZSBSb290IGluIHRoZSBDb25maWd1cmF0aW9uIEJQRFVzCisgICAgICAgIHRyYW5zbWl0dGVkIGJ5IHRoZSBEZXNpZ25hdGVkIEJyaWRnZSBmb3IgdGhlCisgICAgICAgIHNlZ21lbnQgdG8gd2hpY2ggdGhlIHBvcnQgaXMgYXR0YWNoZWQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjQiCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgNiB9CisKK2RvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgcGF0aCBjb3N0IG9mIHRoZSBEZXNpZ25hdGVkIFBvcnQgb2YgdGhlIHNlZ21lbnQKKyAgICAgICAgY29ubmVjdGVkIHRvIHRoaXMgcG9ydC4gIFRoaXMgdmFsdWUgaXMgY29tcGFyZWQgdG8gdGhlCisgICAgICAgIFJvb3QgUGF0aCBDb3N0IGZpZWxkIGluIHJlY2VpdmVkIGJyaWRnZSBQRFVzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS41IgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDcgfQorCitkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQnJpZGdlSWQKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBCcmlkZ2UgSWRlbnRpZmllciBvZiB0aGUgYnJpZGdlIHRoYXQgdGhpcworICAgICAgICBwb3J0IGNvbnNpZGVycyB0byBiZSB0aGUgRGVzaWduYXRlZCBCcmlkZ2UgZm9yCisgICAgICAgIHRoaXMgcG9ydCdzIHNlZ21lbnQuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDguNS41LjYiCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgOCB9CisKK2RvdDFkU3RwUG9ydERlc2lnbmF0ZWRQb3J0IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgT0NURVQgU1RSSU5HIChTSVpFICgyKSkKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBQb3J0IElkZW50aWZpZXIgb2YgdGhlIHBvcnQgb24gdGhlIERlc2lnbmF0ZWQKKyAgICAgICAgQnJpZGdlIGZvciB0aGlzIHBvcnQncyBzZWdtZW50LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSA4LjUuNS43IgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDkgfQorCitkb3QxZFN0cFBvcnRGb3J3YXJkVHJhbnNpdGlvbnMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgdGhpcyBwb3J0IGhhcyB0cmFuc2l0aW9uZWQKKyAgICAgICAgZnJvbSB0aGUgTGVhcm5pbmcgc3RhdGUgdG8gdGhlIEZvcndhcmRpbmcgc3RhdGUuIgorICAgIDo6PSB7IGRvdDFkU3RwUG9ydEVudHJ5IDEwIH0KKworZG90MWRTdHBQb3J0UGF0aENvc3QzMiBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEludGVnZXIzMiAoMS4uMjAwMDAwMDAwKQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBjb250cmlidXRpb24gb2YgdGhpcyBwb3J0IHRvIHRoZSBwYXRoIGNvc3Qgb2YKKyAgICAgICAgcGF0aHMgdG93YXJkcyB0aGUgc3Bhbm5pbmcgdHJlZSByb290IHdoaWNoIGluY2x1ZGUKKyAgICAgICAgdGhpcyBwb3J0LiAgODAyLjFELTE5OTggcmVjb21tZW5kcyB0aGF0IHRoZSBkZWZhdWx0CisgICAgICAgIHZhbHVlIG9mIHRoaXMgcGFyYW1ldGVyIGJlIGluIGludmVyc2UgcHJvcG9ydGlvbiB0bworICAgICAgICB0aGUgc3BlZWQgb2YgdGhlIGF0dGFjaGVkIExBTi4KKworICAgICAgICBUaGlzIG9iamVjdCByZXBsYWNlcyBkb3QxZFN0cFBvcnRQYXRoQ29zdCB0byBzdXBwb3J0CisgICAgICAgIElFRUUgODAyLjF0LiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjF0IGNsYXVzZSA4LjEwLjIsIFRhYmxlIDgtNS4iCisgICAgOjo9IHsgZG90MWRTdHBQb3J0RW50cnkgMTEgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB0aGUgZG90MWRUcCBzdWJ0cmVlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgZG90MWRUcCBzdWJ0cmVlIGlzIG9wdGlvbmFsLiAgSXQgaXMKKy0tIGltcGxlbWVudGVkIGJ5IHRob3NlIGJyaWRnZXMgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudAorLS0gYnJpZGdpbmcgbW9kZS4gIEEgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudAorLS0gdGhpcyBzdWJ0cmVlLgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFRwTGVhcm5lZEVudHJ5RGlzY2FyZHMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSB0b3RhbCBudW1iZXIgb2YgRm9yd2FyZGluZyBEYXRhYmFzZSBlbnRyaWVzIHRoYXQKKyAgICAgICAgaGF2ZSBiZWVuIG9yIHdvdWxkIGhhdmUgYmVlbiBsZWFybmVkLCBidXQgaGF2ZSBiZWVuCisgICAgICAgIGRpc2NhcmRlZCBkdWUgdG8gYSBsYWNrIG9mIHN0b3JhZ2Ugc3BhY2UgaW4gdGhlCisgICAgICAgIEZvcndhcmRpbmcgRGF0YWJhc2UuICBJZiB0aGlzIGNvdW50ZXIgaXMgaW5jcmVhc2luZywgaXQKKyAgICAgICAgaW5kaWNhdGVzIHRoYXQgdGhlIEZvcndhcmRpbmcgRGF0YWJhc2UgaXMgcmVndWxhcmx5CisgICAgICAgIGJlY29taW5nIGZ1bGwgKGEgY29uZGl0aW9uIHRoYXQgaGFzIHVucGxlYXNhbnQKKyAgICAgICAgcGVyZm9ybWFuY2UgZWZmZWN0cyBvbiB0aGUgc3VibmV0d29yaykuICBJZiB0aGlzIGNvdW50ZXIKKyAgICAgICAgaGFzIGEgc2lnbmlmaWNhbnQgdmFsdWUgYnV0IGlzIG5vdCBwcmVzZW50bHkgaW5jcmVhc2luZywKKyAgICAgICAgaXQgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2JsZW0gaGFzIGJlZW4gb2NjdXJyaW5nIGJ1dCBpcworICAgICAgICBub3QgcGVyc2lzdGVudC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNy4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZFRwIDEgfQorCitkb3QxZFRwQWdpbmdUaW1lIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgxMC4uMTAwMDAwMCkKKyAgICBVTklUUyAgICAgICAic2Vjb25kcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdGltZW91dCBwZXJpb2QgaW4gc2Vjb25kcyBmb3IgYWdpbmcgb3V0CisgICAgICAgIGR5bmFtaWNhbGx5LWxlYXJuZWQgZm9yd2FyZGluZyBpbmZvcm1hdGlvbi4KKyAgICAgICAgODAyLjFELTE5OTggcmVjb21tZW5kcyBhIGRlZmF1bHQgb2YgMzAwIHNlY29uZHMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjcuMS4xLjMiCisgICAgOjo9IHsgZG90MWRUcCAyIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gIFRoZSBGb3J3YXJkaW5nIERhdGFiYXNlIGZvciBUcmFuc3BhcmVudCBCcmlkZ2VzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkVHBGZGJUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIERvdDFkVHBGZGJFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHRhYmxlIHRoYXQgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQgdW5pY2FzdAorICAgICAgICBlbnRyaWVzIGZvciB3aGljaCB0aGUgYnJpZGdlIGhhcyBmb3J3YXJkaW5nIGFuZC9vcgorICAgICAgICBmaWx0ZXJpbmcgaW5mb3JtYXRpb24uICBUaGlzIGluZm9ybWF0aW9uIGlzIHVzZWQKKyAgICAgICAgYnkgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nIGZ1bmN0aW9uIGluCisgICAgICAgIGRldGVybWluaW5nIGhvdyB0byBwcm9wYWdhdGUgYSByZWNlaXZlZCBmcmFtZS4iCisgICAgOjo9IHsgZG90MWRUcCAzIH0KKworZG90MWRUcEZkYkVudHJ5IE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgRG90MWRUcEZkYkVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkluZm9ybWF0aW9uIGFib3V0IGEgc3BlY2lmaWMgdW5pY2FzdCBNQUMgYWRkcmVzcworICAgICAgICBmb3Igd2hpY2ggdGhlIGJyaWRnZSBoYXMgc29tZSBmb3J3YXJkaW5nIGFuZC9vcgorICAgICAgICBmaWx0ZXJpbmcgaW5mb3JtYXRpb24uIgorICAgIElOREVYICAgeyBkb3QxZFRwRmRiQWRkcmVzcyB9CisgICAgOjo9IHsgZG90MWRUcEZkYlRhYmxlIDEgfQorCitEb3QxZFRwRmRiRW50cnkgOjo9CisgICAgU0VRVUVOQ0UgeworICAgICAgICBkb3QxZFRwRmRiQWRkcmVzcworICAgICAgICAgICAgTWFjQWRkcmVzcywKKyAgICAgICAgZG90MWRUcEZkYlBvcnQKKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRUcEZkYlN0YXR1cworICAgICAgICAgICAgSU5URUdFUgorICAgIH0KKworZG90MWRUcEZkYkFkZHJlc3MgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBNYWNBZGRyZXNzCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHVuaWNhc3QgTUFDIGFkZHJlc3MgZm9yIHdoaWNoIHRoZSBicmlkZ2UgaGFzCisgICAgICAgIGZvcndhcmRpbmcgYW5kL29yIGZpbHRlcmluZyBpbmZvcm1hdGlvbi4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgNy45LjEsIDcuOS4yIgorICAgIDo6PSB7IGRvdDFkVHBGZGJFbnRyeSAxIH0KKworZG90MWRUcEZkYlBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkVpdGhlciB0aGUgdmFsdWUgJzAnLCBvciB0aGUgcG9ydCBudW1iZXIgb2YgdGhlIHBvcnQgb24KKyAgICAgICAgd2hpY2ggYSBmcmFtZSBoYXZpbmcgYSBzb3VyY2UgYWRkcmVzcyBlcXVhbCB0byB0aGUgdmFsdWUKKyAgICAgICAgb2YgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YgZG90MWRUcEZkYkFkZHJlc3MgaGFzCisgICAgICAgIGJlZW4gc2Vlbi4gIEEgdmFsdWUgb2YgJzAnIGluZGljYXRlcyB0aGF0IHRoZSBwb3J0CisgICAgICAgIG51bWJlciBoYXMgbm90IGJlZW4gbGVhcm5lZCwgYnV0IHRoYXQgdGhlIGJyaWRnZSBkb2VzCisgICAgICAgIGhhdmUgc29tZSBmb3J3YXJkaW5nL2ZpbHRlcmluZyBpbmZvcm1hdGlvbiBhYm91dCB0aGlzCisgICAgICAgIGFkZHJlc3MgKGUuZy4sIGluIHRoZSBkb3QxZFN0YXRpY1RhYmxlKS4gIEltcGxlbWVudG9ycworICAgICAgICBhcmUgZW5jb3VyYWdlZCB0byBhc3NpZ24gdGhlIHBvcnQgdmFsdWUgdG8gdGhpcyBvYmplY3QKKyAgICAgICAgd2hlbmV2ZXIgaXQgaXMgbGVhcm5lZCwgZXZlbiBmb3IgYWRkcmVzc2VzIGZvciB3aGljaCB0aGUKKyAgICAgICAgY29ycmVzcG9uZGluZyB2YWx1ZSBvZiBkb3QxZFRwRmRiU3RhdHVzIGlzIG5vdAorICAgICAgICBsZWFybmVkKDMpLiIKKyAgICA6Oj0geyBkb3QxZFRwRmRiRW50cnkgMiB9CisKK2RvdDFkVHBGZGJTdGF0dXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJTlRFR0VSIHsKKyAgICAgICAgICAgICAgICAgICAgb3RoZXIoMSksCisgICAgICAgICAgICAgICAgICAgIGludmFsaWQoMiksCisgICAgICAgICAgICAgICAgICAgIGxlYXJuZWQoMyksCisgICAgICAgICAgICAgICAgICAgIHNlbGYoNCksCisgICAgICAgICAgICAgICAgICAgIG1nbXQoNSkKKyAgICAgICAgICAgICAgICB9CisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RhdHVzIG9mIHRoaXMgZW50cnkuICBUaGUgbWVhbmluZ3Mgb2YgdGhlCisgICAgICAgIHZhbHVlcyBhcmU6CisgICAgICAgICAgICBvdGhlcigxKSAtIG5vbmUgb2YgdGhlIGZvbGxvd2luZy4gIFRoaXMgd291bGQKKyAgICAgICAgICAgICAgICBpbmNsdWRlIHRoZSBjYXNlIHdoZXJlIHNvbWUgb3RoZXIgTUlCIG9iamVjdAorICAgICAgICAgICAgICAgIChub3QgdGhlIGNvcnJlc3BvbmRpbmcgaW5zdGFuY2Ugb2YKKyAgICAgICAgICAgICAgICBkb3QxZFRwRmRiUG9ydCwgbm9yIGFuIGVudHJ5IGluIHRoZQorICAgICAgICAgICAgICAgIGRvdDFkU3RhdGljVGFibGUpIGlzIGJlaW5nIHVzZWQgdG8gZGV0ZXJtaW5lIGlmCisgICAgICAgICAgICAgICAgYW5kIGhvdyBmcmFtZXMgYWRkcmVzc2VkIHRvIHRoZSB2YWx1ZSBvZiB0aGUKKyAgICAgICAgICAgICAgICBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mIGRvdDFkVHBGZGJBZGRyZXNzIGFyZQorICAgICAgICAgICAgICAgIGJlaW5nIGZvcndhcmRlZC4KKyAgICAgICAgICAgIGludmFsaWQoMikgLSB0aGlzIGVudHJ5IGlzIG5vIGxvbmdlciB2YWxpZCAoZS5nLiwKKyAgICAgICAgICAgICAgICBpdCB3YXMgbGVhcm5lZCBidXQgaGFzIHNpbmNlIGFnZWQgb3V0KSwgYnV0IGhhcworICAgICAgICAgICAgICAgIG5vdCB5ZXQgYmVlbiBmbHVzaGVkIGZyb20gdGhlIHRhYmxlLgorICAgICAgICAgICAgbGVhcm5lZCgzKSAtIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZQorICAgICAgICAgICAgICAgIG9mIGRvdDFkVHBGZGJQb3J0IHdhcyBsZWFybmVkLCBhbmQgaXMgYmVpbmcKKyAgICAgICAgICAgICAgICB1c2VkLgorICAgICAgICAgICAgc2VsZig0KSAtIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZgorICAgICAgICAgICAgICAgIGRvdDFkVHBGZGJBZGRyZXNzIHJlcHJlc2VudHMgb25lIG9mIHRoZSBicmlkZ2UncworICAgICAgICAgICAgICAgIGFkZHJlc3Nlcy4gIFRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgZG90MWRUcEZkYlBvcnQgaW5kaWNhdGVzIHdoaWNoIG9mIHRoZSBicmlkZ2UncworICAgICAgICAgICAgICAgIHBvcnRzIGhhcyB0aGlzIGFkZHJlc3MuCisgICAgICAgICAgICBtZ210KDUpIC0gdGhlIHZhbHVlIG9mIHRoZSBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mCisgICAgICAgICAgICAgICAgZG90MWRUcEZkYkFkZHJlc3MgaXMgYWxzbyB0aGUgdmFsdWUgb2YgYW4KKyAgICAgICAgICAgICAgICBleGlzdGluZyBpbnN0YW5jZSBvZiBkb3QxZFN0YXRpY0FkZHJlc3MuIgorICAgIDo6PSB7IGRvdDFkVHBGZGJFbnRyeSAzIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gIFBvcnQgVGFibGUgZm9yIFRyYW5zcGFyZW50IEJyaWRnZXMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRUcFBvcnRUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIERvdDFkVHBQb3J0RW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSB0YWJsZSB0aGF0IGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IGV2ZXJ5IHBvcnQgdGhhdAorICAgICAgICBpcyBhc3NvY2lhdGVkIHdpdGggdGhpcyB0cmFuc3BhcmVudCBicmlkZ2UuIgorICAgIDo6PSB7IGRvdDFkVHAgNCB9CisKK2RvdDFkVHBQb3J0RW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBEb3QxZFRwUG9ydEVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgbGlzdCBvZiBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwb3J0IG9mIGEgdHJhbnNwYXJlbnQKKyAgICAgICAgYnJpZGdlLiIKKyAgICBJTkRFWCAgIHsgZG90MWRUcFBvcnQgfQorICAgIDo6PSB7IGRvdDFkVHBQb3J0VGFibGUgMSB9CisKK0RvdDFkVHBQb3J0RW50cnkgOjo9CisgICAgU0VRVUVOQ0UgeworICAgICAgICBkb3QxZFRwUG9ydAorICAgICAgICAgICAgSW50ZWdlcjMyLAorICAgICAgICBkb3QxZFRwUG9ydE1heEluZm8KKyAgICAgICAgICAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRUcFBvcnRJbkZyYW1lcworICAgICAgICAgICAgQ291bnRlcjMyLAorICAgICAgICBkb3QxZFRwUG9ydE91dEZyYW1lcworICAgICAgICAgICAgQ291bnRlcjMyLAorICAgICAgICBkb3QxZFRwUG9ydEluRGlzY2FyZHMKKyAgICAgICAgICAgIENvdW50ZXIzMgorICAgIH0KKworZG90MWRUcFBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDEuLjY1NTM1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwb3J0IGZvciB3aGljaCB0aGlzIGVudHJ5CisgICAgICAgIGNvbnRhaW5zIFRyYW5zcGFyZW50IGJyaWRnaW5nIG1hbmFnZW1lbnQgaW5mb3JtYXRpb24uIgorICAgIDo6PSB7IGRvdDFkVHBQb3J0RW50cnkgMSB9CisKKy0tIEl0IHdvdWxkIGJlIG5pY2UgaWYgd2UgY291bGQgdXNlIGlmTXR1IGFzIHRoZSBzaXplIG9mIHRoZQorLS0gbGFyZ2VzdCBJTkZPIGZpZWxkLCBidXQgd2UgY2FuJ3QgYmVjYXVzZSBpZk10dSBpcyBkZWZpbmVkCistLSB0byBiZSB0aGUgc2l6ZSB0aGF0IHRoZSAoaW50ZXItKW5ldHdvcmsgbGF5ZXIgY2FuIHVzZSwgd2hpY2gKKy0tIGNhbiBkaWZmZXIgZnJvbSB0aGUgTUFDIGxheWVyIChlc3BlY2lhbGx5IGlmIHNldmVyYWwgbGF5ZXJzCistLSBvZiBlbmNhcHN1bGF0aW9uIGFyZSB1c2VkKS4KKworZG90MWRUcFBvcnRNYXhJbmZvIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgVU5JVFMgICAgICAgImJ5dGVzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG1heGltdW0gc2l6ZSBvZiB0aGUgSU5GTyAobm9uLU1BQykgZmllbGQgdGhhdAorCisgICAgICAgIHRoaXMgcG9ydCB3aWxsIHJlY2VpdmUgb3IgdHJhbnNtaXQuIgorICAgIDo6PSB7IGRvdDFkVHBQb3J0RW50cnkgMiB9CisKK2RvdDFkVHBQb3J0SW5GcmFtZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBDb3VudGVyMzIKKyAgICBVTklUUyAgICAgICAiZnJhbWVzIgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiBmcmFtZXMgdGhhdCBoYXZlIGJlZW4gcmVjZWl2ZWQgYnkgdGhpcworICAgICAgICBwb3J0IGZyb20gaXRzIHNlZ21lbnQuICBOb3RlIHRoYXQgYSBmcmFtZSByZWNlaXZlZCBvbiB0aGUKKyAgICAgICAgaW50ZXJmYWNlIGNvcnJlc3BvbmRpbmcgdG8gdGhpcyBwb3J0IGlzIG9ubHkgY291bnRlZCBieQorICAgICAgICB0aGlzIG9iamVjdCBpZiBhbmQgb25seSBpZiBpdCBpcyBmb3IgYSBwcm90b2NvbCBiZWluZworICAgICAgICBwcm9jZXNzZWQgYnkgdGhlIGxvY2FsIGJyaWRnaW5nIGZ1bmN0aW9uLCBpbmNsdWRpbmcKKyAgICAgICAgYnJpZGdlIG1hbmFnZW1lbnQgZnJhbWVzLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICAgIklFRUUgODAyLjFELTE5OTg6IGNsYXVzZSAxNC42LjEuMS4zIgorICAgIDo6PSB7IGRvdDFkVHBQb3J0RW50cnkgMyB9CisKK2RvdDFkVHBQb3J0T3V0RnJhbWVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgVU5JVFMgICAgICAgImZyYW1lcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgZnJhbWVzIHRoYXQgaGF2ZSBiZWVuIHRyYW5zbWl0dGVkIGJ5IHRoaXMKKyAgICAgICAgcG9ydCB0byBpdHMgc2VnbWVudC4gIE5vdGUgdGhhdCBhIGZyYW1lIHRyYW5zbWl0dGVkIG9uCisgICAgICAgIHRoZSBpbnRlcmZhY2UgY29ycmVzcG9uZGluZyB0byB0aGlzIHBvcnQgaXMgb25seSBjb3VudGVkCisgICAgICAgIGJ5IHRoaXMgb2JqZWN0IGlmIGFuZCBvbmx5IGlmIGl0IGlzIGZvciBhIHByb3RvY29sIGJlaW5nCisgICAgICAgIHByb2Nlc3NlZCBieSB0aGUgbG9jYWwgYnJpZGdpbmcgZnVuY3Rpb24sIGluY2x1ZGluZworICAgICAgICBicmlkZ2UgbWFuYWdlbWVudCBmcmFtZXMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjYuMS4xLjMiCisgICAgOjo9IHsgZG90MWRUcFBvcnRFbnRyeSA0IH0KKworZG90MWRUcFBvcnRJbkRpc2NhcmRzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgVU5JVFMgICAgICAgImZyYW1lcyIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkNvdW50IG9mIHJlY2VpdmVkIHZhbGlkIGZyYW1lcyB0aGF0IHdlcmUgZGlzY2FyZGVkCisgICAgICAgIChpLmUuLCBmaWx0ZXJlZCkgYnkgdGhlIEZvcndhcmRpbmcgUHJvY2Vzcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNi4xLjEuMyIKKyAgICA6Oj0geyBkb3QxZFRwUG9ydEVudHJ5IDUgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKKy0tIFRoZSBTdGF0aWMgKERlc3RpbmF0aW9uLUFkZHJlc3MgRmlsdGVyaW5nKSBEYXRhYmFzZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gSW1wbGVtZW50YXRpb24gb2YgdGhpcyBzdWJ0cmVlIGlzIG9wdGlvbmFsLgorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCitkb3QxZFN0YXRpY1RhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgRG90MWRTdGF0aWNFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHRhYmxlIGNvbnRhaW5pbmcgZmlsdGVyaW5nIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQKKyAgICAgICAgaW50byB0aGUgYnJpZGdlIGJ5IChsb2NhbCBvciBuZXR3b3JrKSBtYW5hZ2VtZW50CisgICAgICAgIHNwZWNpZnlpbmcgdGhlIHNldCBvZiBwb3J0cyB0byB3aGljaCBmcmFtZXMgcmVjZWl2ZWQKKyAgICAgICAgZnJvbSBzcGVjaWZpYyBwb3J0cyBhbmQgY29udGFpbmluZyBzcGVjaWZpYyBkZXN0aW5hdGlvbgorICAgICAgICBhZGRyZXNzZXMgYXJlIGFsbG93ZWQgdG8gYmUgZm9yd2FyZGVkLiAgVGhlIHZhbHVlIG9mCisgICAgICAgIHplcm8gaW4gdGhpcyB0YWJsZSwgYXMgdGhlIHBvcnQgbnVtYmVyIGZyb20gd2hpY2ggZnJhbWVzCisgICAgICAgIHdpdGggYSBzcGVjaWZpYyBkZXN0aW5hdGlvbiBhZGRyZXNzIGFyZSByZWNlaXZlZCwgaXMKKyAgICAgICAgdXNlZCB0byBzcGVjaWZ5IGFsbCBwb3J0cyBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gc3BlY2lmaWMKKyAgICAgICAgZW50cnkgaW4gdGhpcyB0YWJsZSBmb3IgdGhhdCBwYXJ0aWN1bGFyIGRlc3RpbmF0aW9uCisgICAgICAgIGFkZHJlc3MuICBFbnRyaWVzIGFyZSB2YWxpZCBmb3IgdW5pY2FzdCBhbmQgZm9yCisgICAgICAgIGdyb3VwL2Jyb2FkY2FzdCBhZGRyZXNzZXMuIgorICAgIFJFRkVSRU5DRQorICAgICAgICAiSUVFRSA4MDIuMUQtMTk5ODogY2xhdXNlIDE0LjcuMiIKKyAgICA6Oj0geyBkb3QxZFN0YXRpYyAxIH0KKworZG90MWRTdGF0aWNFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIERvdDFkU3RhdGljRW50cnkKKyAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiRmlsdGVyaW5nIGluZm9ybWF0aW9uIGNvbmZpZ3VyZWQgaW50byB0aGUgYnJpZGdlIGJ5CisgICAgICAgIChsb2NhbCBvciBuZXR3b3JrKSBtYW5hZ2VtZW50IHNwZWNpZnlpbmcgdGhlIHNldCBvZgorICAgICAgICBwb3J0cyB0byB3aGljaCBmcmFtZXMgcmVjZWl2ZWQgZnJvbSBhIHNwZWNpZmljIHBvcnQgYW5kCisgICAgICAgIGNvbnRhaW5pbmcgYSBzcGVjaWZpYyBkZXN0aW5hdGlvbiBhZGRyZXNzIGFyZSBhbGxvd2VkIHRvCisgICAgICAgIGJlIGZvcndhcmRlZC4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgMTQuNy4yIgorICAgIElOREVYICAgeyBkb3QxZFN0YXRpY0FkZHJlc3MsIGRvdDFkU3RhdGljUmVjZWl2ZVBvcnQgfQorICAgIDo6PSB7IGRvdDFkU3RhdGljVGFibGUgMSB9CisKK0RvdDFkU3RhdGljRW50cnkgOjo9CisgICAgU0VRVUVOQ0UgeworICAgICAgICBkb3QxZFN0YXRpY0FkZHJlc3MgICAgICAgTWFjQWRkcmVzcywKKyAgICAgICAgZG90MWRTdGF0aWNSZWNlaXZlUG9ydCAgIEludGVnZXIzMiwKKyAgICAgICAgZG90MWRTdGF0aWNBbGxvd2VkVG9Hb1RvIE9DVEVUIFNUUklORywKKyAgICAgICAgZG90MWRTdGF0aWNTdGF0dXMgICAgICAgIElOVEVHRVIKKyAgICB9CisKK2RvdDFkU3RhdGljQWRkcmVzcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE1hY0FkZHJlc3MKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzIGluIGEgZnJhbWUgdG8gd2hpY2ggdGhpcworICAgICAgICBlbnRyeSdzIGZpbHRlcmluZyBpbmZvcm1hdGlvbiBhcHBsaWVzLiAgVGhpcyBvYmplY3QgY2FuCisgICAgICAgIHRha2UgdGhlIHZhbHVlIG9mIGEgdW5pY2FzdCBhZGRyZXNzLCBhIGdyb3VwIGFkZHJlc3MsIG9yCisgICAgICAgIHRoZSBicm9hZGNhc3QgYWRkcmVzcy4iCisgICAgUkVGRVJFTkNFCisgICAgICAgICJJRUVFIDgwMi4xRC0xOTk4OiBjbGF1c2UgNy45LjEsIDcuOS4yIgorICAgIDo6PSB7IGRvdDFkU3RhdGljRW50cnkgMSB9CisKK2RvdDFkU3RhdGljUmVjZWl2ZVBvcnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBJbnRlZ2VyMzIgKDAuLjY1NTM1KQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJFaXRoZXIgdGhlIHZhbHVlICcwJywgb3IgdGhlIHBvcnQgbnVtYmVyIG9mIHRoZSBwb3J0CisgICAgICAgIGZyb20gd2hpY2ggYSBmcmFtZSBtdXN0IGJlIHJlY2VpdmVkIGluIG9yZGVyIGZvciB0aGlzCisgICAgICAgIGVudHJ5J3MgZmlsdGVyaW5nIGluZm9ybWF0aW9uIHRvIGFwcGx5LiAgQSB2YWx1ZSBvZiB6ZXJvCisgICAgICAgIGluZGljYXRlcyB0aGF0IHRoaXMgZW50cnkgYXBwbGllcyBvbiBhbGwgcG9ydHMgb2YgdGhlCisgICAgICAgIGJyaWRnZSBmb3Igd2hpY2ggdGhlcmUgaXMgbm8gb3RoZXIgYXBwbGljYWJsZSBlbnRyeS4iCisgICAgOjo9IHsgZG90MWRTdGF0aWNFbnRyeSAyIH0KKworZG90MWRTdGF0aWNBbGxvd2VkVG9Hb1RvIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgT0NURVQgU1RSSU5HIChTSVpFICgwLi41MTIpKQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc2V0IG9mIHBvcnRzIHRvIHdoaWNoIGZyYW1lcyByZWNlaXZlZCBmcm9tIGEKKyAgICAgICAgc3BlY2lmaWMgcG9ydCBhbmQgZGVzdGluZWQgZm9yIGEgc3BlY2lmaWMgTUFDIGFkZHJlc3MsCisgICAgICAgIGFyZSBhbGxvd2VkIHRvIGJlIGZvcndhcmRlZC4gIEVhY2ggb2N0ZXQgd2l0aGluIHRoZQorICAgICAgICB2YWx1ZSBvZiB0aGlzIG9iamVjdCBzcGVjaWZpZXMgYSBzZXQgb2YgZWlnaHQgcG9ydHMsCisgICAgICAgIHdpdGggdGhlIGZpcnN0IG9jdGV0IHNwZWNpZnlpbmcgcG9ydHMgMSB0aHJvdWdoIDgsIHRoZQorICAgICAgICBzZWNvbmQgb2N0ZXQgc3BlY2lmeWluZyBwb3J0cyA5IHRocm91Z2ggMTYsIGV0Yy4gIFdpdGhpbgorICAgICAgICBlYWNoIG9jdGV0LCB0aGUgbW9zdCBzaWduaWZpY2FudCBiaXQgcmVwcmVzZW50cyB0aGUKKyAgICAgICAgbG93ZXN0IG51bWJlcmVkIHBvcnQsIGFuZCB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0CisgICAgICAgIHJlcHJlc2VudHMgdGhlIGhpZ2hlc3QgbnVtYmVyZWQgcG9ydC4gIFRodXMsIGVhY2ggcG9ydAorICAgICAgICBvZiB0aGUgYnJpZGdlIGlzIHJlcHJlc2VudGVkIGJ5IGEgc2luZ2xlIGJpdCB3aXRoaW4gdGhlCisgICAgICAgIHZhbHVlIG9mIHRoaXMgb2JqZWN0LiAgSWYgdGhhdCBiaXQgaGFzIGEgdmFsdWUgb2YgJzEnLAorICAgICAgICB0aGVuIHRoYXQgcG9ydCBpcyBpbmNsdWRlZCBpbiB0aGUgc2V0IG9mIHBvcnRzOyB0aGUgcG9ydAorICAgICAgICBpcyBub3QgaW5jbHVkZWQgaWYgaXRzIGJpdCBoYXMgYSB2YWx1ZSBvZiAnMCcuICAoTm90ZQorICAgICAgICB0aGF0IHRoZSBzZXR0aW5nIG9mIHRoZSBiaXQgY29ycmVzcG9uZGluZyB0byB0aGUgcG9ydAorICAgICAgICBmcm9tIHdoaWNoIGEgZnJhbWUgaXMgcmVjZWl2ZWQgaXMgaXJyZWxldmFudC4pICBUaGUKKyAgICAgICAgZGVmYXVsdCB2YWx1ZSBvZiB0aGlzIG9iamVjdCBpcyBhIHN0cmluZyBvZiBvbmVzIG9mCisgICAgICAgIGFwcHJvcHJpYXRlIGxlbmd0aC4KKworICAgICAgICBUaGUgdmFsdWUgb2YgdGhpcyBvYmplY3QgbWF5IGV4Y2VlZCB0aGUgcmVxdWlyZWQgbWluaW11bQorICAgICAgICBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZSBvZiBzb21lIFNOTVAgdHJhbnNwb3J0ICg0ODQgYnl0ZXMsCisgICAgICAgIGluIHRoZSBjYXNlIG9mIFNOTVAgb3ZlciBVRFAsIHNlZSBSRkMgMzQxNywgc2VjdGlvbiAzLjIpLgorICAgICAgICBTTk1QIGVuZ2luZXMgb24gYnJpZGdlcyBzdXBwb3J0aW5nIGEgbGFyZ2UgbnVtYmVyIG9mCisgICAgICAgIHBvcnRzIG11c3Qgc3VwcG9ydCBhcHByb3ByaWF0ZSBtYXhpbXVtIG1lc3NhZ2Ugc2l6ZXMuIgorICAgIDo6PSB7IGRvdDFkU3RhdGljRW50cnkgMyB9CisKK2RvdDFkU3RhdGljU3RhdHVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSU5URUdFUiB7CisgICAgICAgICAgICAgICAgICAgIG90aGVyKDEpLAorICAgICAgICAgICAgICAgICAgICBpbnZhbGlkKDIpLAorICAgICAgICAgICAgICAgICAgICBwZXJtYW5lbnQoMyksCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZU9uUmVzZXQoNCksCisgICAgICAgICAgICAgICAgICAgIGRlbGV0ZU9uVGltZW91dCg1KQorICAgICAgICAgICAgICAgIH0KKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhpcyBvYmplY3QgaW5kaWNhdGVzIHRoZSBzdGF0dXMgb2YgdGhpcyBlbnRyeS4KKyAgICAgICAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgcGVybWFuZW50KDMpLgorICAgICAgICAgICAgb3RoZXIoMSkgLSB0aGlzIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UgYnV0IHRoZQorICAgICAgICAgICAgICAgIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgd2lsbCByZW1haW4gc28gYXJlCisgICAgICAgICAgICAgICAgZGlmZmVyZW50IGZyb20gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHZhbHVlcy4KKyAgICAgICAgICAgIGludmFsaWQoMikgLSB3cml0aW5nIHRoaXMgdmFsdWUgdG8gdGhlIG9iamVjdAorICAgICAgICAgICAgICAgIHJlbW92ZXMgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkuCisgICAgICAgICAgICBwZXJtYW5lbnQoMykgLSB0aGlzIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UgYW5kCisgICAgICAgICAgICAgICAgd2lsbCByZW1haW4gc28gYWZ0ZXIgdGhlIG5leHQgcmVzZXQgb2YgdGhlCisgICAgICAgICAgICAgICAgYnJpZGdlLgorICAgICAgICAgICAgZGVsZXRlT25SZXNldCg0KSAtIHRoaXMgZW50cnkgaXMgY3VycmVudGx5IGluIHVzZQorICAgICAgICAgICAgICAgIGFuZCB3aWxsIHJlbWFpbiBzbyB1bnRpbCB0aGUgbmV4dCByZXNldCBvZiB0aGUKKyAgICAgICAgICAgICAgICBicmlkZ2UuCisgICAgICAgICAgICBkZWxldGVPblRpbWVvdXQoNSkgLSB0aGlzIGVudHJ5IGlzIGN1cnJlbnRseSBpbiB1c2UKKyAgICAgICAgICAgICAgICBhbmQgd2lsbCByZW1haW4gc28gdW50aWwgaXQgaXMgYWdlZCBvdXQuIgorICAgIDo6PSB7IGRvdDFkU3RhdGljRW50cnkgNCB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIE5vdGlmaWNhdGlvbnMgZm9yIHVzZSBieSBCcmlkZ2VzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBOb3RpZmljYXRpb25zIGZvciB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbAorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCituZXdSb290IE5PVElGSUNBVElPTi1UWVBFCisgICAgLS0gT0JKRUNUUyAgICAgeyB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbmV3Um9vdCB0cmFwIGluZGljYXRlcyB0aGF0IHRoZSBzZW5kaW5nIGFnZW50IGhhcworICAgICAgICBiZWNvbWUgdGhlIG5ldyByb290IG9mIHRoZSBTcGFubmluZyBUcmVlOyB0aGUgdHJhcCBpcworICAgICAgICBzZW50IGJ5IGEgYnJpZGdlIHNvb24gYWZ0ZXIgaXRzIGVsZWN0aW9uIGFzIHRoZSBuZXcKKworICAgICAgICByb290LCBlLmcuLCB1cG9uIGV4cGlyYXRpb24gb2YgdGhlIFRvcG9sb2d5IENoYW5nZSBUaW1lciwKKyAgICAgICAgaW1tZWRpYXRlbHkgc3Vic2VxdWVudCB0byBpdHMgZWxlY3Rpb24uICBJbXBsZW1lbnRhdGlvbgorICAgICAgICBvZiB0aGlzIHRyYXAgaXMgb3B0aW9uYWwuIgorICAgIDo6PSB7IGRvdDFkTm90aWZpY2F0aW9ucyAxIH0KKwordG9wb2xvZ3lDaGFuZ2UgTk9USUZJQ0FUSU9OLVRZUEUKKyAgICAtLSBPQkpFQ1RTICAgICB7IH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgdG9wb2xvZ3lDaGFuZ2UgdHJhcCBpcyBzZW50IGJ5IGEgYnJpZGdlIHdoZW4gYW55IG9mCisgICAgICAgIGl0cyBjb25maWd1cmVkIHBvcnRzIHRyYW5zaXRpb25zIGZyb20gdGhlIExlYXJuaW5nIHN0YXRlCisgICAgICAgIHRvIHRoZSBGb3J3YXJkaW5nIHN0YXRlLCBvciBmcm9tIHRoZSBGb3J3YXJkaW5nIHN0YXRlIHRvCisgICAgICAgIHRoZSBCbG9ja2luZyBzdGF0ZS4gIFRoZSB0cmFwIGlzIG5vdCBzZW50IGlmIGEgbmV3Um9vdAorICAgICAgICB0cmFwIGlzIHNlbnQgZm9yIHRoZSBzYW1lIHRyYW5zaXRpb24uICBJbXBsZW1lbnRhdGlvbiBvZgorICAgICAgICB0aGlzIHRyYXAgaXMgb3B0aW9uYWwuIgorICAgIDo6PSB7IGRvdDFkTm90aWZpY2F0aW9ucyAyIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gSUVFRSA4MDIuMUQgTUlCIC0gQ29uZm9ybWFuY2UgSW5mb3JtYXRpb24KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRHcm91cHMgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZENvbmZvcm1hbmNlIDEgfQorZG90MWRDb21wbGlhbmNlcyAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBkb3QxZENvbmZvcm1hbmNlIDIgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB1bml0cyBvZiBjb25mb3JtYW5jZQorLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSB0aGUgZG90MWRCYXNlIGdyb3VwCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkQmFzZUJyaWRnZUdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZEJhc2VCcmlkZ2VBZGRyZXNzLAorICAgICAgICBkb3QxZEJhc2VOdW1Qb3J0cywKKyAgICAgICAgZG90MWRCYXNlVHlwZQorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkJyaWRnZSBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhpcyBkZXZpY2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDEgfQorCitkb3QxZEJhc2VQb3J0R3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkQmFzZVBvcnQsCisgICAgICAgIGRvdDFkQmFzZVBvcnRJZkluZGV4LAorICAgICAgICBkb3QxZEJhc2VQb3J0Q2lyY3VpdCwKKyAgICAgICAgZG90MWRCYXNlUG9ydERlbGF5RXhjZWVkZWREaXNjYXJkcywKKyAgICAgICAgZG90MWRCYXNlUG9ydE10dUV4Y2VlZGVkRGlzY2FyZHMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbmZvcm1hdGlvbiBmb3IgZWFjaCBwb3J0IG9uIHRoaXMgZGV2aWNlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyAyIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdGhlIGRvdDFkU3RwIGdyb3VwCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkU3RwQnJpZGdlR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkU3RwUHJvdG9jb2xTcGVjaWZpY2F0aW9uLAorICAgICAgICBkb3QxZFN0cFByaW9yaXR5LAorICAgICAgICBkb3QxZFN0cFRpbWVTaW5jZVRvcG9sb2d5Q2hhbmdlLAorICAgICAgICBkb3QxZFN0cFRvcENoYW5nZXMsCisgICAgICAgIGRvdDFkU3RwRGVzaWduYXRlZFJvb3QsCisgICAgICAgIGRvdDFkU3RwUm9vdENvc3QsCisgICAgICAgIGRvdDFkU3RwUm9vdFBvcnQsCisgICAgICAgIGRvdDFkU3RwTWF4QWdlLAorICAgICAgICBkb3QxZFN0cEhlbGxvVGltZSwKKyAgICAgICAgZG90MWRTdHBIb2xkVGltZSwKKyAgICAgICAgZG90MWRTdHBGb3J3YXJkRGVsYXksCisgICAgICAgIGRvdDFkU3RwQnJpZGdlTWF4QWdlLAorICAgICAgICBkb3QxZFN0cEJyaWRnZUhlbGxvVGltZSwKKyAgICAgICAgZG90MWRTdHBCcmlkZ2VGb3J3YXJkRGVsYXkKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJCcmlkZ2UgbGV2ZWwgU3Bhbm5pbmcgVHJlZSBkYXRhIGZvciB0aGlzIGRldmljZS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgMyB9CisKK2RvdDFkU3RwUG9ydEdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFN0cFBvcnQsCisgICAgICAgIGRvdDFkU3RwUG9ydFByaW9yaXR5LAorICAgICAgICBkb3QxZFN0cFBvcnRTdGF0ZSwKKyAgICAgICAgZG90MWRTdHBQb3J0RW5hYmxlLAorICAgICAgICBkb3QxZFN0cFBvcnRQYXRoQ29zdCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZFJvb3QsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRDb3N0LAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQnJpZGdlLAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkUG9ydCwKKyAgICAgICAgZG90MWRTdHBQb3J0Rm9yd2FyZFRyYW5zaXRpb25zCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiU3Bhbm5pbmcgVHJlZSBkYXRhIGZvciBlYWNoIHBvcnQgb24gdGhpcyBkZXZpY2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDQgfQorCitkb3QxZFN0cFBvcnRHcm91cDIgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkU3RwUG9ydCwKKyAgICAgICAgZG90MWRTdHBQb3J0UHJpb3JpdHksCisgICAgICAgIGRvdDFkU3RwUG9ydFN0YXRlLAorICAgICAgICBkb3QxZFN0cFBvcnRFbmFibGUsCisgICAgICAgIGRvdDFkU3RwUG9ydERlc2lnbmF0ZWRSb290LAorICAgICAgICBkb3QxZFN0cFBvcnREZXNpZ25hdGVkQ29zdCwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZEJyaWRnZSwKKyAgICAgICAgZG90MWRTdHBQb3J0RGVzaWduYXRlZFBvcnQsCisgICAgICAgIGRvdDFkU3RwUG9ydEZvcndhcmRUcmFuc2l0aW9ucywKKyAgICAgICAgZG90MWRTdHBQb3J0UGF0aENvc3QzMgorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlNwYW5uaW5nIFRyZWUgZGF0YSBmb3IgZWFjaCBwb3J0IG9uIHRoaXMgZGV2aWNlLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyA1IH0KKworZG90MWRTdHBQb3J0R3JvdXAzIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFN0cFBvcnRQYXRoQ29zdDMyCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiU3Bhbm5pbmcgVHJlZSBkYXRhIGZvciBkZXZpY2VzIHN1cHBvcnRpbmcgMzItYml0CisgICAgICAgICBwYXRoIGNvc3RzLiIKKyAgICA6Oj0geyBkb3QxZEdyb3VwcyA2IH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gdGhlIGRvdDFkVHAgZ3JvdXAKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRUcEJyaWRnZUdyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBkb3QxZFRwTGVhcm5lZEVudHJ5RGlzY2FyZHMsCisgICAgICAgIGRvdDFkVHBBZ2luZ1RpbWUKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJCcmlkZ2UgbGV2ZWwgVHJhbnNwYXJlbnQgQnJpZGdpbmcgZGF0YS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgNyB9CisKK2RvdDFkVHBGZGJHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKworICAgICAgICBkb3QxZFRwRmRiQWRkcmVzcywKKyAgICAgICAgZG90MWRUcEZkYlBvcnQsCisgICAgICAgIGRvdDFkVHBGZGJTdGF0dXMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJGaWx0ZXJpbmcgRGF0YWJhc2UgaW5mb3JtYXRpb24gZm9yIHRoZSBCcmlkZ2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDggfQorCitkb3QxZFRwR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIGRvdDFkVHBQb3J0LAorICAgICAgICBkb3QxZFRwUG9ydE1heEluZm8sCisgICAgICAgIGRvdDFkVHBQb3J0SW5GcmFtZXMsCisgICAgICAgIGRvdDFkVHBQb3J0T3V0RnJhbWVzLAorICAgICAgICBkb3QxZFRwUG9ydEluRGlzY2FyZHMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJEeW5hbWljIEZpbHRlcmluZyBEYXRhYmFzZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwb3J0IG9mCisgICAgICAgIHRoZSBCcmlkZ2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDkgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBUaGUgU3RhdGljIChEZXN0aW5hdGlvbi1BZGRyZXNzIEZpbHRlcmluZykgRGF0YWJhc2UKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworZG90MWRTdGF0aWNHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgZG90MWRTdGF0aWNBZGRyZXNzLAorICAgICAgICBkb3QxZFN0YXRpY1JlY2VpdmVQb3J0LAorICAgICAgICBkb3QxZFN0YXRpY0FsbG93ZWRUb0dvVG8sCisgICAgICAgIGRvdDFkU3RhdGljU3RhdHVzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiU3RhdGljIEZpbHRlcmluZyBEYXRhYmFzZSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBwb3J0IG9mCisgICAgICAgIHRoZSBCcmlkZ2UuIgorICAgIDo6PSB7IGRvdDFkR3JvdXBzIDEwIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtLQorLS0gVGhlIFRyYXAgTm90aWZpY2F0aW9uIEdyb3VwCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCisKK2RvdDFkTm90aWZpY2F0aW9uR3JvdXAgTk9USUZJQ0FUSU9OLUdST1VQCisgICAgTk9USUZJQ0FUSU9OUyB7CisgICAgICAgIG5ld1Jvb3QsCisgICAgICAgIHRvcG9sb2d5Q2hhbmdlCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiR3JvdXAgb2Ygb2JqZWN0cyBkZXNjcmliaW5nIG5vdGlmaWNhdGlvbnMgKHRyYXBzKS4iCisgICAgOjo9IHsgZG90MWRHcm91cHMgMTEgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC0tCistLSBjb21wbGlhbmNlIHN0YXRlbWVudHMKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworYnJpZGdlQ29tcGxpYW5jZTE0OTMgTU9EVUxFLUNPTVBMSUFOQ0UKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBjb21wbGlhbmNlIHN0YXRlbWVudCBmb3IgZGV2aWNlIHN1cHBvcnQgb2YgYnJpZGdpbmcKKyAgICAgICAgc2VydmljZXMsIGFzIHBlciBSRkMxNDkzLiIKKworICAgIE1PRFVMRQorICAgICAgICBNQU5EQVRPUlktR1JPVVBTIHsKKyAgICAgICAgICAgIGRvdDFkQmFzZUJyaWRnZUdyb3VwLAorICAgICAgICAgICAgZG90MWRCYXNlUG9ydEdyb3VwCisgICAgICAgIH0KKworICAgIEdST1VQICAgZG90MWRTdHBCcmlkZ2VHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYnJpZGdlcworICAgICAgICB0aGF0IHN1cHBvcnQgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuIgorCisgICAgR1JPVVAgICBkb3QxZFN0cFBvcnRHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYnJpZGdlcworICAgICAgICB0aGF0IHN1cHBvcnQgdGhlIFNwYW5uaW5nIFRyZWUgUHJvdG9jb2wuIgorCisgICAgR1JPVVAgICBkb3QxZFRwQnJpZGdlR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGJyaWRnZXMKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZyBtb2RlLiAgQQorICAgICAgICB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50IHRoaXMgZ3JvdXAuIgorCisgICAgR1JPVVAgICBkb3QxZFRwRmRiR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGJyaWRnZXMKKyAgICAgICAgdGhhdCBzdXBwb3J0IHRoZSB0cmFuc3BhcmVudCBicmlkZ2luZyBtb2RlLiAgQQorICAgICAgICB0cmFuc3BhcmVudCBvciBTUlQgYnJpZGdlIHdpbGwgaW1wbGVtZW50IHRoaXMgZ3JvdXAuIgorCisgICAgR1JPVVAgICBkb3QxZFRwR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGJyaWRnZXMKKworICAgICAgICB0aGF0IHN1cHBvcnQgdGhlIHRyYW5zcGFyZW50IGJyaWRnaW5nIG1vZGUuICBBCisgICAgICAgIHRyYW5zcGFyZW50IG9yIFNSVCBicmlkZ2Ugd2lsbCBpbXBsZW1lbnQgdGhpcyBncm91cC4iCisKKyAgICBHUk9VUCAgIGRvdDFkU3RhdGljR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBvcHRpb25hbC4iCisKKyAgICBHUk9VUCBkb3QxZE5vdGlmaWNhdGlvbkdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgb3B0aW9uYWwuIgorICAgIDo6PSB7IGRvdDFkQ29tcGxpYW5jZXMgMSB9CisKK2JyaWRnZUNvbXBsaWFuY2U0MTg4IE1PRFVMRS1DT01QTElBTkNFCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgY29tcGxpYW5jZSBzdGF0ZW1lbnQgZm9yIGRldmljZSBzdXBwb3J0IG9mIGJyaWRnaW5nCisgICAgICAgIHNlcnZpY2VzLiAgVGhpcyBzdXBwb3J0cyAzMi1iaXQgUGF0aCBDb3N0IHZhbHVlcyBhbmQgdGhlCisgICAgICAgIG1vcmUgcmVzdHJpY3RlZCBicmlkZ2UgYW5kIHBvcnQgcHJpb3JpdGllcywgYXMgcGVyIElFRUUKKyAgICAgICAgODAyLjF0LgorCisgICAgICAgIEZ1bGwgc3VwcG9ydCBmb3IgdGhlIDgwMi4xRCBtYW5hZ2VtZW50IG9iamVjdHMgcmVxdWlyZXMgdGhhdAorICAgICAgICB0aGUgU05NUHYyLU1JQiBbUkZDMzQxOF0gb2JqZWN0cyBzeXNEZXNjciwgYW5kIHN5c1VwVGltZSwgYXMKKyAgICAgICAgd2VsbCBhcyB0aGUgSUYtTUlCIFtSRkMyODYzXSBvYmplY3RzIGlmSW5kZXgsIGlmVHlwZSwKKyAgICAgICAgaWZEZXNjciwgaWZQaHlzQWRkcmVzcywgYW5kIGlmTGFzdENoYW5nZSBhcmUgaW1wbGVtZW50ZWQuIgorCisgICAgTU9EVUxFCisgICAgICAgIE1BTkRBVE9SWS1HUk9VUFMgeworICAgICAgICAgICAgZG90MWRCYXNlQnJpZGdlR3JvdXAsCisgICAgICAgICAgICBkb3QxZEJhc2VQb3J0R3JvdXAKKyAgICAgICAgfQorCisgICAgR1JPVVAgICBkb3QxZFN0cEJyaWRnZUdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvcgorICAgICAgICBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4iCisKKyAgICBPQkpFQ1QgZG90MWRTdHBQcmlvcml0eQorICAgIFNZTlRBWCBJbnRlZ2VyMzIgKDB8NDA5Nnw4MTkyfDEyMjg4fDE2Mzg0fDIwNDgwfDI0NTc2CisgICAgICAgICAgICAgICAgICAgICB8Mjg2NzJ8MzI3Njh8MzY4NjR8NDA5NjB8NDUwNTZ8NDkxNTIKKyAgICAgICAgICAgICAgICAgICAgIHw1MzI0OHw1NzM0NHw2MTQ0MCkKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvc3NpYmxlIHZhbHVlcyBkZWZpbmVkIGJ5IElFRUUgODAyLjF0LiIKKworICAgIEdST1VQICAgZG90MWRTdHBQb3J0R3JvdXAyCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvcgorICAgICAgICBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgU3Bhbm5pbmcgVHJlZSBQcm90b2NvbC4iCisKKyAgICBHUk9VUCAgIGRvdDFkU3RwUG9ydEdyb3VwMworICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBmb3IgYnJpZGdlcworICAgICAgICAgdGhhdCBzdXBwb3J0IHRoZSBTcGFubmluZyBUcmVlIFByb3RvY29sIGFuZCAzMi1iaXQgcGF0aAorICAgICAgICAgY29zdHMuICBJbiBwYXJ0aWN1bGFyLCB0aGlzIGluY2x1ZGVzIGRldmljZXMgc3VwcG9ydGluZworICAgICAgICAgSUVFRSA4MDIuMXQgYW5kIElFRUUgODAyLjF3LiIKKworICAgIE9CSkVDVCBkb3QxZFN0cFBvcnRQcmlvcml0eQorICAgIFNZTlRBWCBJbnRlZ2VyMzIgKDB8MTZ8MzJ8NDh8NjR8ODB8OTZ8MTEyfDEyOAorICAgICAgICAgICAgICAgICAgICAgfDE0NHwxNjB8MTc2fDE5MnwyMDh8MjI0fDI0MCkKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHBvc3NpYmxlIHZhbHVlcyBkZWZpbmVkIGJ5IElFRUUgODAyLjF0LiIKKworICAgIEdST1VQICAgZG90MWRUcEJyaWRnZUdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvcgorICAgICAgICBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcKKyAgICAgICAgbW9kZS4gIEEgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudAorICAgICAgICB0aGlzIGdyb3VwLiIKKworICAgIEdST1VQICAgZG90MWRUcEZkYkdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvcgorICAgICAgICBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcKKyAgICAgICAgbW9kZS4gIEEgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudAorICAgICAgICB0aGlzIGdyb3VwLiIKKworICAgIEdST1VQICAgZG90MWRUcEdyb3VwCisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkltcGxlbWVudGF0aW9uIG9mIHRoaXMgZ3JvdXAgaXMgbWFuZGF0b3J5IGZvcgorICAgICAgICBicmlkZ2VzIHRoYXQgc3VwcG9ydCB0aGUgdHJhbnNwYXJlbnQgYnJpZGdpbmcKKyAgICAgICAgbW9kZS4gIEEgdHJhbnNwYXJlbnQgb3IgU1JUIGJyaWRnZSB3aWxsIGltcGxlbWVudAorICAgICAgICB0aGlzIGdyb3VwLiIKKworICAgIEdST1VQICAgZG90MWRTdGF0aWNHcm91cAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJJbXBsZW1lbnRhdGlvbiBvZiB0aGlzIGdyb3VwIGlzIG9wdGlvbmFsLiIKKworICAgIEdST1VQIGRvdDFkTm90aWZpY2F0aW9uR3JvdXAKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW1wbGVtZW50YXRpb24gb2YgdGhpcyBncm91cCBpcyBvcHRpb25hbC4iCisgICAgOjo9IHsgZG90MWRDb21wbGlhbmNlcyAyIH0KKworRU5ECmRpZmYgLS1naXQgYS9taWJzL0RJU01BTi1FVkVOVC1NSUIudHh0IGIvbWlicy9ESVNNQU4tRVZFTlQtTUlCLnR4dAppbmRleCBiZGUxY2RiLi5mMDBjN2NjIDEwMDY0NAotLS0gYS9taWJzL0RJU01BTi1FVkVOVC1NSUIudHh0CisrKyBiL21pYnMvRElTTUFOLUVWRU5ULU1JQi50eHQKQEAgLTgsNyArOCw2IEBACiAgICAgVEVYVFVBTC1DT05WRU5USU9OLCBSb3dTdGF0dXMsCiAgICAgVHJ1dGhWYWx1ZSAgICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1UQwogCi0KICAgICBNT0RVTEUtQ09NUExJQU5DRSwgT0JKRUNULUdST1VQLAogICAgIE5PVElGSUNBVElPTi1HUk9VUCAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1DT05GCiAgICAgc3lzVXBUaW1lICAgICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1NSUIKQEAgLTU4LDcgKzU3LDYgQEAKICAgICAgICAgcGFydGljdWxhciBlcnJvciBjb2RlIGhlcmUgZG9lcyBub3QgaW1wbHkgdGhhdCBhbGwKICAgICAgICAgaW1wbGVtZW50YXRpb25zIGFyZSBjYXBhYmxlIG9mIHNlbnNpbmcgdGhhdCBlcnJvciBhbmQKIAotCiAgICAgICAgIHJldHVybmluZyB0aGF0IGNvZGUuCiAKICAgICAgICAgVGhlIHNlY29uZCBncm91cCwgbnVtYmVyZWQgZ3JlYXRlciB0aGFuIDAsIGFyZSBjb3BpZWQKQEAgLTc4LDE2ICs3NiwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcyBub3QgYXMgZXhwZWN0ZWQKICAgICAgICAgc2FtcGxlT3ZlcnJ1biAgICAgICAgICAgYW5vdGhlciBzYW1wbGUgYXR0ZW1wdCBvY2N1cnJlZCBiZWZvcmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlIHByZXZpb3VzIG9uZSBjb21wbGV0ZWQiCi0KICAgICBTWU5UQVggICAgICBJTlRFR0VSIHsgbG9jYWxSZXNvdXJjZUxhY2soLTEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiYWREZXN0aW5hdGlvbigtMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc3RpbmF0aW9uVW5yZWFjaGFibGUoLTMpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBub1Jlc3BvbnNlKC00KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkVHlwZSgtNSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNhbXBsZU92ZXJydW4oLTYpLAotCiAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vRXJyb3IoMCksCi0KICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9vQmlnKDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBub1N1Y2hOYW1lKDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRWYWx1ZSgzKSwKQEAgLTEwOCw3ICsxMDMsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbmNvbnNpc3RlbnROYW1lKDE4KSB9CiAtLQogCi0KIC0tIFJlc291cmNlIENvbnRyb2wgU2VjdGlvbgogLS0KIApAQCAtMTU3LDggKzE1MSw2IEBACiAgICAgICAgIENoYW5naW5nIHRoaXMgdmFsdWUgd2lsbCBub3QgZWxpbWluYXRlIG9yIGluaGliaXQgZXhpc3RpbmcKICAgICAgICAgc2FtcGxlIHN0YXRlIGJ1dCBjb3VsZCBwcmV2ZW50IGFsbG9jYXRpb24gb2YgYWRkaXRpb25hbCBzdGF0ZQogICAgICAgICBpbmZvcm1hdGlvbi4iCi0KLQogICAgIDo6PSB7IG10ZVJlc291cmNlIDIgfQogCiBtdGVSZXNvdXJjZVNhbXBsZUluc3RhbmNlcyBPQkpFQ1QtVFlQRQpAQCAtMjA4LDcgKzIwMCw2IEBACiAgICAgICAgIGNvbmRpdGlvbiBoYXMgZmFpbGVkLiAgVGhpcyBjb3VudHMgaW5kaXZpZHVhbGx5IGZvciBlYWNoCiAgICAgICAgIGF0dGVtcHQgaW4gYSBncm91cCBvZiB0YXJnZXRzIG9yIGVhY2ggYXR0ZW1wdCBmb3IgYQogCi0KICAgICAgICAgd2lsZGNhcmRlZCBvYmplY3QuIgogICAgIDo6PSB7IG10ZVRyaWdnZXIgMSB9CiAKQEAgLTI1Nyw4ICsyNDgsNiBAQAogICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgIERFU0NSSVBUSU9OCi0KLQogICAgICAgICAiVGhlIG93bmVyIG9mIHRoaXMgZW50cnkuIFRoZSBleGFjdCBzZW1hbnRpY3Mgb2YgdGhpcwogICAgICAgICBzdHJpbmcgYXJlIHN1YmplY3QgdG8gdGhlIHNlY3VyaXR5IHBvbGljeSBkZWZpbmVkIGJ5IHRoZQogICAgICAgICBzZWN1cml0eSBhZG1pbmlzdHJhdG9yLiIKQEAgLTMwOCw3ICsyOTcsNiBAQAogCiAgICAgICAgIEZvciAndGhyZXNob2xkJyB0aGUgdGVzdCB3b3JrcyBhcyBkZXNjcmliZWQgYmVsb3cgZm9yCiAKLQogICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkU3RhcnR1cCwgbXRlVHJpZ2dlclRocmVzaG9sZFJpc2luZywgYW5kCiAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nLgogCkBAIC0zNTgsNyArMzQ2LDYgQEAKICAgICAgICAgaW5zdGFuY2UgcG9ydGlvbiwgaW4gd2hpY2ggY2FzZSB0aGUgdmFsdWUgaXMgb2J0YWluZWQKICAgICAgICAgYXMgaWYgd2l0aCBhIEdldE5leHQgZnVuY3Rpb24sIGNoZWNraW5nIG11bHRpcGxlIHZhbHVlcwogCi0KICAgICAgICAgaWYgdGhleSBleGlzdC4gIElmIHN1Y2ggd2lsZGNhcmRpbmcgaXMgYXBwbGllZCwKICAgICAgICAgbXRlVHJpZ2dlclZhbHVlSURXaWxkY2FyZCBtdXN0IGJlICd0cnVlJyBhbmQgaWYgbm90IGl0IG11c3QKICAgICAgICAgYmUgJ2ZhbHNlJy4KQEAgLTQwOCw3ICszOTUsNiBAQAogCiAgICAgICAgIE90aGVyd2lzZSBhY2Nlc3MgcmlnaHRzIGFyZSBjaGVja2VkIGFjY29yZGluZyB0byB0aGUgc2VjdXJpdHkKIAotCiAgICAgICAgIHBhcmFtZXRlcnMgcmVzdWx0aW5nIGZyb20gdGhlIHRhZy4iCiAgICAgREVGVkFMIHsgJydIIH0KICAgICA6Oj0geyBtdGVUcmlnZ2VyRW50cnkgOCB9CkBAIC00NTcsOCArNDQzLDYgQEAKICAgICBVTklUUyAgICAgICAic2Vjb25kcyIKICAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSBudW1iZXIgb2Ygc2Vjb25kcyB0byB3YWl0IGJldHdlZW4gdHJpZ2dlciBzYW1wbGVzLiAgVG8KICAgICAgICAgZW5jb3VyYWdlIGNvbnNpc3RlbmN5IGluIHNhbXBsaW5nLCB0aGUgaW50ZXJ2YWwgaXMgbWVhc3VyZWQKQEAgLTUwNyw4ICs0OTEsNiBAQAogICAgICAgICBBIGxpc3Qgb2Ygb2JqZWN0cyBtYXkgYWxzbyBiZSBhZGRlZCBiYXNlZCBvbiB0aGUgZXZlbnQgb3Igb24KICAgICAgICAgdGhlIHZhbHVlIG9mIG10ZVRyaWdnZXJUZXN0LgogCi0KLQogICAgICAgICBBIGxlbmd0aCBvZiAwIGluZGljYXRlcyBubyBhZGRpdGlvbmFsIG9iamVjdHMuIgogICAgIERFRlZBTCB7ICcnSCB9CiAgICAgOjo9IHsgbXRlVHJpZ2dlckVudHJ5IDEzIH0KQEAgLTU1Nyw4ICs1MzksNiBAQAogICAgIElOREVYICAgICAgIHsgbXRlT3duZXIsIElNUExJRUQgbXRlVHJpZ2dlck5hbWUgfQogICAgIDo6PSB7IG10ZVRyaWdnZXJEZWx0YVRhYmxlIDEgfQogCi0KLQogTXRlVHJpZ2dlckRlbHRhRW50cnkgOjo9IFNFUVVFTkNFIHsKICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SUQgICAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIsCiAgICAgbXRlVHJpZ2dlckRlbHRhRGlzY29udGludWl0eUlEV2lsZGNhcmQgICAgICAgIFRydXRoVmFsdWUsCkBAIC02MDgsNyArNTg4LDYgQEAKICAgICAgICAgYmUgdGhlIHNhbWUgYXMgdGhhdCBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZgogICAgICAgICBtdGVUcmlnZ2VyVmFsdWVJRFdpbGRjYXJkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcKIAotCiAgICAgICAgIG10ZVRyaWdnZXJTYW1wbGVUeXBlIGlzICdkZWx0YVZhbHVlJy4iCiAgICAgREVGVkFMIHsgZmFsc2UgfQogICAgIDo6PSB7IG10ZVRyaWdnZXJEZWx0YUVudHJ5IDIgfQpAQCAtNjU4LDcgKzYzNyw2IEBACiAgICAgbXRlVHJpZ2dlckV4aXN0ZW5jZUV2ZW50ICAgICAgICAgICAgIFNubXBBZG1pblN0cmluZwogfQogCi0KIG10ZVRyaWdnZXJFeGlzdGVuY2VUZXN0IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgQklUUyB7IHByZXNlbnQoMCksIGFic2VudCgxKSwgY2hhbmdlZCgyKSB9CiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQpAQCAtNzA3LDggKzY4NSw2IEBACiAKIG10ZVRyaWdnZXJFeGlzdGVuY2VPYmplY3RzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgU25tcEFkbWluU3RyaW5nIChTSVpFICgwLi4zMikpCi0KLQogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTc1OCw3ICs3MzQsNiBAQAogICAgICAgICB0cmlnZ2Vycy4iCiAgICAgOjo9IHsgbXRlVHJpZ2dlciA1IH0KIAotCiBtdGVUcmlnZ2VyQm9vbGVhbkVudHJ5IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgTXRlVHJpZ2dlckJvb2xlYW5FbnRyeQogICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCkBAIC04MDcsOCArNzgyLDYgQEAKICAgICBERUZWQUwgeyAwIH0KICAgICA6Oj0geyBtdGVUcmlnZ2VyQm9vbGVhbkVudHJ5IDIgfQogCi0KLQogbXRlVHJpZ2dlckJvb2xlYW5TdGFydHVwIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgVHJ1dGhWYWx1ZQogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKQEAgLTg1Nyw4ICs4MzAsNiBAQAogICAgICAgICAiVG8gZ28gd2l0aCBtdGVUcmlnZ2VyQm9vbGVhbkV2ZW50LCB0aGUgbXRlT3duZXIgb2YgYW4gZXZlbnQKICAgICAgICAgZW50cnkgZnJvbSBtdGVFdmVudFRhYmxlLiIKICAgICBERUZWQUwgeyAnJ0ggfQotCi0KICAgICA6Oj0geyBtdGVUcmlnZ2VyQm9vbGVhbkVudHJ5IDYgfQogCiBtdGVUcmlnZ2VyQm9vbGVhbkV2ZW50IE9CSkVDVC1UWVBFCkBAIC05MDcsOCArODc4LDYgQEAKICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnRPd25lciAgICAgICAgIFNubXBBZG1pblN0cmluZywKICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkUmlzaW5nRXZlbnQgICAgICAgICAgICAgIFNubXBBZG1pblN0cmluZywKICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZ0V2ZW50T3duZXIgICAgICAgIFNubXBBZG1pblN0cmluZywKLQotCiAgICAgbXRlVHJpZ2dlclRocmVzaG9sZEZhbGxpbmdFdmVudCAgICAgICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCiAgICAgbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnRPd25lciAgICBTbm1wQWRtaW5TdHJpbmcsCiAgICAgbXRlVHJpZ2dlclRocmVzaG9sZERlbHRhUmlzaW5nRXZlbnQgICAgICAgICBTbm1wQWRtaW5TdHJpbmcsCkBAIC05NTcsOCArOTI2LDYgQEAKICAgICAgICAgdHJpZ2dlcmVkIHVudGlsIHRoZSBzYW1wbGVkIHZhbHVlIGZhbGxzIGJlbG93IHRoaXMgdGhyZXNob2xkCiAgICAgICAgIGFuZCByZWFjaGVzIG10ZVRyaWdnZXJUaHJlc2hvbGRGYWxsaW5nLiIKICAgICBERUZWQUwgeyAwIH0KLQotCiAgICAgOjo9IHsgbXRlVHJpZ2dlclRocmVzaG9sZEVudHJ5IDIgfQogCiBtdGVUcmlnZ2VyVGhyZXNob2xkRmFsbGluZyBPQkpFQ1QtVFlQRQpAQCAtMTAwNyw4ICs5NzQsNiBAQAogICAgICAgICB0cmlnZ2VyZWQgdW50aWwgdGhlIGRlbHRhIHZhbHVlIGZhbGxzIGJlbG93IHRoaXMgdGhyZXNob2xkIGFuZAogICAgICAgICByZWFjaGVzIG10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmcuIgogICAgIERFRlZBTCB7IDAgfQotCi0KICAgICA6Oj0geyBtdGVUcmlnZ2VyVGhyZXNob2xkRW50cnkgNCB9CiAKIG10ZVRyaWdnZXJUaHJlc2hvbGREZWx0YUZhbGxpbmcgT0JKRUNULVRZUEUKQEAgLTEwNTgsNyArMTAyMyw2IEBACiAKICAgICAgICAgQSBsaXN0IG9mIG9iamVjdHMgbWF5IGFsc28gYmUgYWRkZWQgYmFzZWQgb24gdGhlIG92ZXJhbGwKIAotCiAgICAgICAgIHRyaWdnZXIsIHRoZSBldmVudCBvciBvdGhlciBzZXR0aW5ncyBpbiBtdGVUcmlnZ2VyVGVzdC4KIAogICAgICAgICBBIGxlbmd0aCBvZiAwIGluZGljYXRlcyBubyBhZGRpdGlvbmFsIG9iamVjdHMuIgpAQCAtMTEwNyw4ICsxMDcxLDYgQEAKICAgICBERUZWQUwgeyAnJ0ggfQogICAgIDo6PSB7IG10ZVRyaWdnZXJUaHJlc2hvbGRFbnRyeSAxMSB9CiAKLQotCiBtdGVUcmlnZ2VyVGhyZXNob2xkRGVsdGFSaXNpbmdFdmVudE93bmVyIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgU25tcEFkbWluU3RyaW5nIChTSVpFICgwLi4zMikpCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC13cml0ZQpAQCAtMTE1Nyw4ICsxMTE5LDYgQEAKIC0tIE9iamVjdHMgVGFibGUKIC0tCiAKLQotCiBtdGVPYmplY3RzVGFibGUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBNdGVPYmplY3RzRW50cnkKICAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQpAQCAtMTIwOCw3ICsxMTY4LDYgQEAKICAgICAgICAgIkFuIGFyYml0cmFyeSBpbnRlZ2VyIGZvciB0aGUgcHVycG9zZSBvZiBpZGVudGlmeWluZwogICAgICAgICBpbmRpdmlkdWFsIG9iamVjdHMgd2l0aGluIGEgbXRlT2JqZWN0c05hbWUgZ3JvdXAuCiAKLQogICAgICAgICBPYmplY3RzIHdpdGhpbiBhIGdyb3VwIGFyZSBwbGFjZWQgaW4gdGhlIG5vdGlmaWNhdGlvbiBpbiB0aGUKICAgICAgICAgbnVtZXJpY2FsIG9yZGVyIG9mIHRoaXMgaW5kZXguCiAKQEAgLTEyNTgsNyArMTIxNyw2IEBACiAgICAgREVGVkFMIHsgZmFsc2UgfQogICAgIDo6PSB7IG10ZU9iamVjdHNFbnRyeSA0IH0KIAotCiBtdGVPYmplY3RzRW50cnlTdGF0dXMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBSb3dTdGF0dXMKICAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQpAQCAtMTMwOCw3ICsxMjY2LDYgQEAKICAgICBJTkRFWCAgICAgICB7IG10ZU93bmVyLCBJTVBMSUVEIG10ZUV2ZW50TmFtZSB9CiAgICAgOjo9IHsgbXRlRXZlbnRUYWJsZSAxIH0KIAotCiBNdGVFdmVudEVudHJ5IDo6PSBTRVFVRU5DRSB7CiAgICAgbXRlRXZlbnROYW1lICAgICAgICAgICAgICAgICAgICAgICAgU25tcEFkbWluU3RyaW5nLAogICAgIG10ZUV2ZW50Q29tbWVudCAgICAgICAgICAgICAgICAgICAgIFNubXBBZG1pblN0cmluZywKQEAgLTEzNTgsNyArMTMxNSw2IEBACiAgICAgICAgICJBIGNvbnRyb2wgdG8gYWxsb3cgYW4gZXZlbnQgdG8gYmUgY29uZmlndXJlZCBidXQgbm90IHVzZWQuCiAgICAgICAgIFdoZW4gdGhlIHZhbHVlIGlzICdmYWxzZScgdGhlIGV2ZW50IGRvZXMgbm90IGV4ZWN1dGUgZXZlbiBpZgogCi0KICAgICAgICAgdHJpZ2dlcmVkLiIKICAgICBERUZWQUwgeyBmYWxzZSB9CiAgICAgOjo9IHsgbXRlRXZlbnRFbnRyeSA0IH0KQEAgLTE0MDcsOCArMTM2Myw2IEBACiAgICAgU1lOVEFYICAgICAgT0JKRUNUIElERU5USUZJRVIKICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCiAgICAgU1RBVFVTICAgICAgY3VycmVudAotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIG9iamVjdCBpZGVudGlmaWVyIGZyb20gdGhlIE5PVElGSUNBVElPTi1UWVBFIGZvciB0aGUKICAgICAgICAgbm90aWZpY2F0aW9uIHRvIHVzZSBpZiBtZXRFdmVudEFjdGlvbnMgaGFzICdub3RpZmljYXRpb24nIHNldC4iCkBAIC0xNDU3LDggKzE0MTEsNiBAQAogbXRlRXZlbnRTZXRFbnRyeSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIE10ZUV2ZW50U2V0RW50cnkKICAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQotCi0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIkluZm9ybWF0aW9uIGFib3V0IGEgc2luZ2xlIGV2ZW50J3Mgc2V0IG9wdGlvbi4gIEVudHJpZXMKQEAgLTE1MDgsNyArMTQ2MCw2IEBACiAgICAgREVGVkFMIHsgemVyb0RvdFplcm8gfQogICAgIDo6PSB7IG10ZUV2ZW50U2V0RW50cnkgMSB9CiAKLQogbXRlRXZlbnRTZXRPYmplY3RXaWxkY2FyZCBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFRydXRoVmFsdWUKICAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCkBAIC0xNTU3LDggKzE1MDgsNiBAQAogbXRlRXZlbnRTZXRDb250ZXh0TmFtZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFNubXBBZG1pblN0cmluZwogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKLQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgbWFuYWdlbWVudCBjb250ZXh0IGluIHdoaWNoIHRvIHNldCBtdGVFdmVudE9iamVjdElELgpAQCAtMTYwNyw4ICsxNTU2LDYgQEAKICAgICAgICAgIlRoZSBuYW1lIG9mIHRoZSB0cmlnZ2VyIGNhdXNpbmcgdGhlIG5vdGlmaWNhdGlvbi4iCiAgICAgOjo9IHsgZGlzbWFuRXZlbnRNSUJOb3RpZmljYXRpb25PYmplY3RzIDEgfQogCi0KLQogbXRlSG90VGFyZ2V0TmFtZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgIFNubXBBZG1pblN0cmluZwogICAgIE1BWC1BQ0NFU1MgIGFjY2Vzc2libGUtZm9yLW5vdGlmeQpAQCAtMTY1Nyw4ICsxNjA0LDYgQEAKICAgICBTWU5UQVggICAgICBGYWlsdXJlUmVhc29uCiAgICAgTUFYLUFDQ0VTUyAgYWNjZXNzaWJsZS1mb3Itbm90aWZ5CiAgICAgU1RBVFVTICAgICAgY3VycmVudAotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgb2YgYW4gYXR0ZW1wdCB0byBjaGVjayBmb3IgYQogICAgICAgICB0cmlnZ2VyIGNvbmRpdGlvbiBvciBzZXQgYW4gb2JqZWN0IGluIHJlc3BvbnNlIHRvIGFuIGV2ZW50LiIKQEAgLTE3MDcsOCArMTY1Miw2IEBACiAKIG10ZVRyaWdnZXJGYWlsdXJlIE5PVElGSUNBVElPTi1UWVBFCiAgICAgT0JKRUNUUyB7IG10ZUhvdFRyaWdnZXIsCi0KLQogICAgICAgICAgICAgICBtdGVIb3RUYXJnZXROYW1lLAogICAgICAgICAgICAgICBtdGVIb3RDb250ZXh0TmFtZSwKICAgICAgICAgICAgICAgbXRlSG90T0lELApAQCAtMTc1Nyw4ICsxNzAwLDYgQEAKIGRpc21hbkV2ZW50TUlCQ29tcGxpYW5jZSBNT0RVTEUtQ09NUExJQU5DRQogICAgICAgICBTVEFUVVMgY3VycmVudAogICAgICAgICBERVNDUklQVElPTgotCi0KICAgICAgICAgICAgICAgICAiVGhlIGNvbXBsaWFuY2Ugc3RhdGVtZW50IGZvciBlbnRpdGllcyB3aGljaCBpbXBsZW1lbnQKICAgICAgICAgICAgICAgICB0aGUgRXZlbnQgTUlCLiIKICAgICAgICAgTU9EVUxFICAtLSB0aGlzIG1vZHVsZQpAQCAtMTc5Nyw3ICsxNzM4LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLCB0aHVzIGFsbG93aW5nCiAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgc3lzdGVtIG5vdCB0byBpbXBsZW1lbnQgd2lsZGNhcmRpbmcuIgogCi0KICAgICAgICAgICAgICAgICBPQkpFQ1QgbXRlT2JqZWN0c0lEV2lsZGNhcmQKICAgICAgICAgICAgICAgICBNSU4tQUNDRVNTICByZWFkLW9ubHkKICAgICAgICAgICAgICAgICBERVNDUklQVElPTgpAQCAtMTgwNywxMSArMTc0Nyw4IEBACiAgICAgICAgICAgICAgICAgT0JKRUNUIG10ZUV2ZW50U2V0Q29udGV4dE5hbWVXaWxkY2FyZAogICAgICAgICAgICAgICAgIE1JTi1BQ0NFU1MgIHJlYWQtb25seQogICAgICAgICAgICAgICAgIERFU0NSSVBUSU9OCi0KLQogICAgICAgICAgICAgICAgICAgICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQsIHRodXMgYWxsb3dpbmcKICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBzeXN0ZW0gbm90IHRvIGltcGxlbWVudCB3aWxkY2FyZGluZy4iCi0KICAgICAgICAgOjo9IHsgZGlzbWFuRXZlbnRNSUJDb21wbGlhbmNlcyAxIH0KIAogLS0gVW5pdHMgb2YgQ29uZm9ybWFuY2UKQEAgLTE4MzIsNyArMTc2OSw2IEBACiBkaXNtYW5FdmVudFRyaWdnZXJHcm91cCBPQkpFQ1QtR1JPVVAKICAgICAgICAgT0JKRUNUUyB7CiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckZhaWx1cmVzLAotCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckNvbW1lbnQsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclRlc3QsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlclNhbXBsZVR5cGUsCkBAIC0xODQ2LDcgKzE3ODIsNiBAQAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJPYmplY3RzLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFbmFibGVkLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJFbnRyeVN0YXR1cywKLQogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJEZWx0YURpc2NvbnRpbnVpdHlJRCwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURXaWxkY2FyZCwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRGVsdGFEaXNjb250aW51aXR5SURUeXBlLApAQCAtMTg1Niw5ICsxNzkxLDYgQEAKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRXhpc3RlbmNlT2JqZWN0cywKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnRPd25lciwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyRXhpc3RlbmNlRXZlbnQsCi0KLQotCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5Db21wYXJpc29uLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuVmFsdWUsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5TdGFydHVwLApAQCAtMTg2Niw3ICsxNzk4LDYgQEAKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyQm9vbGVhbk9iamVjdHMsCiAgICAgICAgICAgICAgICAgbXRlVHJpZ2dlckJvb2xlYW5FdmVudE93bmVyLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJCb29sZWFuRXZlbnQsCi0KICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkU3RhcnR1cCwKICAgICAgICAgICAgICAgICBtdGVUcmlnZ2VyVGhyZXNob2xkT2JqZWN0c093bmVyLAogICAgICAgICAgICAgICAgIG10ZVRyaWdnZXJUaHJlc2hvbGRPYmplY3RzLApAQCAtMTkwMiwxNyArMTgzMywxMyBAQAogZGlzbWFuRXZlbnRFdmVudEdyb3VwIE9CSkVDVC1HUk9VUAogICAgICAgICBPQkpFQ1RTIHsKICAgICAgICAgICAgICAgICBtdGVFdmVudEZhaWx1cmVzLAotCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRDb21tZW50LAogICAgICAgICAgICAgICAgIG10ZUV2ZW50QWN0aW9ucywKICAgICAgICAgICAgICAgICBtdGVFdmVudEVuYWJsZWQsCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRFbnRyeVN0YXR1cywKLQotCiAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb24sCiAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25PYmplY3RzT3duZXIsCiAgICAgICAgICAgICAgICAgbXRlRXZlbnROb3RpZmljYXRpb25PYmplY3RzLAotCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRPYmplY3QsCiAgICAgICAgICAgICAgICAgbXRlRXZlbnRTZXRPYmplY3RXaWxkY2FyZCwKICAgICAgICAgICAgICAgICBtdGVFdmVudFNldFZhbHVlLApkaWZmIC0tZ2l0IGEvbWlicy9ESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0IGIvbWlicy9ESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0CmluZGV4IDQ5OWVlODYuLmY3M2U1YmYgMTAwNjQ0Ci0tLSBhL21pYnMvRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dAorKysgYi9taWJzL0RJU01BTi1FWFBSRVNTSU9OLU1JQi50eHQKQEAgLTI5LDcgKzI5LDYgQEAKICAgICAgICAgICAgICAgICAgICAgUHVibGlzaGVkIGFzIFJGQyAyOTgyIgogICAgIDo6PSB7IG1pYi0yIDkwIH0KIAotCiBkaXNtYW5FeHByZXNzaW9uTUlCT2JqZWN0cyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeyBkaXNtYW5FeHByZXNzaW9uTUlCIDEgfQogCkBAIC00MSw3ICs0MCw2IEBACiAtLSBSZXNvdXJjZSBDb250cm9sCiAtLQogCi0KIGV4cFJlc291cmNlRGVsdGFNaW5pbXVtIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyICgtMSB8IDEuLjYwMCkKICAgICBVTklUUyAgICAgICAic2Vjb25kcyIKQEAgLTkwLDcgKzg4LDYgQEAKICAgICAgVW5sZXNzIGV4cGxpY2l0bHkgcmVzb3VyY2UgbGltaXRlZCwgYSBzeXN0ZW0ncyB2YWx1ZSBmb3IKICAgICAgdGhpcyBvYmplY3Qgc2hvdWxkIGJlIDAuCiAKLQogICAgICBDaGFuZ2luZyB0aGlzIHZhbHVlIHdpbGwgbm90IGVsaW1pbmF0ZSBvciBpbmhpYml0IGV4aXN0aW5nIGRlbHRhCiAgICAgIHdpbGRjYXJkIGluc3RhbmNlIG9iamVjdHMgYnV0IHdpbGwgcHJldmVudCB0aGUgY3JlYXRpb24gb2YgbW9yZQogICAgICBzdWNoIG9iamVjdHMuCkBAIC0xMzksNyArMTM2LDYgQEAKIC0tCiAKIGV4cEV4cHJlc3Npb25UYWJsZSBPQkpFQ1QtVFlQRQotCiAgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgRXhwRXhwcmVzc2lvbkVudHJ5CiAgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgICBjdXJyZW50CkBAIC0zMzUsNyArMzMxLDYgQEAKIAogICAgICAgICAgIElmIGVpdGhlciBzaWRlIGlzIElwQWRkcmVzcywgdXNlIHRoYXQuCiAKLQogICAgICAgICAgIElmIGVpdGhlciBzaWRlIGlzIFRpbWVUaWNrcywgdXNlIHRoYXQuCiAKICAgICAgICAgICBJZiBlaXRoZXIgc2lkZSBpcyBDb3VudGVyMzIsIHVzZSB0aGF0LgpAQCAtMzg0LDcgKzM3OSw2IEBACiAgICAgICAgICAgc3VtCiAgICAgICAgICAgZXhpc3RzCiAKLQogICAgICBUaGUgZm9sbG93aW5nIGZ1bmN0aW9uIGRlZmluaXRpb25zIGluZGljYXRlIHRoZWlyIHBhcmFtZXRlcnMgYnkKICAgICAgbmFtaW5nIHRoZSBkYXRhIHR5cGUgb2YgdGhlIHBhcmFtZXRlciBpbiB0aGUgcGFyYW1ldGVyJ3MgcG9zaXRpb24KICAgICAgaW4gdGhlIHBhcmFtZXRlciBsaXN0LiAgVGhlIHBhcmFtZXRlciBtdXN0IGJlIG9mIHRoZSB0eXBlIGluZGljYXRlZApAQCAtNDMzLDcgKzQyNyw2IEBACiAgICAgIGV4aXN0cyhhbnlUeXBlT2JqZWN0KSAtIHZlcmlmaWVzIHRoZSBvYmplY3QgaW5zdGFuY2UgZXhpc3RzLiBBCiAgICAgIHJldHVybiB2YWx1ZSBvZiAwIGluZGljYXRlcyBOb1N1Y2hJbnN0YW5jZSAoaS5lLiBib29sZWFuCiAgICAgIGZhbHNlKS4iCi0KICAgICA6Oj0geyBleHBFeHByZXNzaW9uRW50cnkgMyB9CiAKIGV4cEV4cHJlc3Npb25WYWx1ZVR5cGUgT0JKRUNULVRZUEUKQEAgLTUzMSw3ICs1MjQsNiBAQAogICAgIDo6PSB7IGV4cEV4cHJlc3Npb25FbnRyeSA3IH0KIAogZXhwRXhwcmVzc2lvbkVycm9ycyBPQkpFQ1QtVFlQRQotCiAgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICAgY3VycmVudApAQCAtNTgwLDcgKzU3Miw2IEBACiAgICAgIGVycm9yIGZvciB0aGF0IGV4cHJlc3Npb24gYXMgcmVmbGVjdGVkIGJ5IHRoZSBlcnJvciBjb2RlcwogICAgICBkZWZpbmVkIGZvciBleHBFcnJvckNvZGUuIgogICAgIElOREVYICAgICAgIHsgZXhwRXhwcmVzc2lvbk93bmVyLCBleHBFeHByZXNzaW9uTmFtZSB9Ci0KICAgICA6Oj0geyBleHBFcnJvclRhYmxlIDEgfQogCiBFeHBFcnJvckVudHJ5IDo6PSBTRVFVRU5DRSB7CkBAIC02NzgsNyArNjY5LDYgQEAKIGV4cEVycm9ySW5zdGFuY2UgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBPQkpFQ1QgSURFTlRJRklFUgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICJUaGUgZXhwVmFsdWVJbnN0YW5jZSBiZWluZyBldmFsdWF0ZWQgd2hlbiB0aGUgZXJyb3IKQEAgLTcyNyw3ICs3MTcsNiBAQAogICAgIGV4cE9iamVjdEluZGV4ICAgICAgICAgICAgICAgICAgICAgVW5zaWduZWQzMiwKICAgICBleHBPYmplY3RJRCAgICAgICAgICAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSLAogICAgIGV4cE9iamVjdElEV2lsZGNhcmQgICAgICAgICAgICAgICAgVHJ1dGhWYWx1ZSwKLQogICAgIGV4cE9iamVjdFNhbXBsZVR5cGUgICAgICAgICAgICAgICAgSU5URUdFUiwKICAgICBleHBPYmplY3REZWx0YURpc2NvbnRpbnVpdHlJRCAgICAgIE9CSkVDVCBJREVOVElGSUVSLAogICAgIGV4cE9iamVjdERpc2NvbnRpbnVpdHlJRFdpbGRjYXJkICAgVHJ1dGhWYWx1ZSwKQEAgLTc3Niw3ICs3NjUsNiBAQAogICAgICAgICAiQSB0cnVlIHZhbHVlIGluZGljYXRlcyB0aGUgZXhwT2JqZWNJRCBvZiB0aGlzIHJvdyBpcyBhIHdpbGRjYXJkCiAgICAgICAgIG9iamVjdC4gRmFsc2UgaW5kaWNhdGVzIHRoYXQgZXhwT2JqZWN0SUQgaXMgZnVsbHkgaW5zdGFuY2VkLgogICAgICAgICBJZiBhbGwgZXhwT2JqZWN0V2lsZGNhcmQgdmFsdWVzIGZvciBhIGdpdmVuIGV4cHJlc3Npb24gYXJlIEZBTFNFLAotCiAgICAgICAgIGV4cEV4cHJlc3Npb25QcmVmaXggd2lsbCByZWZsZWN0IGEgc2NhbGFyIG9iamVjdCAoaS5lLiB3aWxsCiAgICAgICAgIGJlIDAuMCkuCiAKQEAgLTgyNSw3ICs4MTMsNiBAQAogICAgICBEYXRlQW5kVGltZSBvYmplY3QgdGhhdCBpbmRpY2F0ZXMgYSBkaXNjb250aW51aXR5IGluIHRoZSB2YWx1ZQogICAgICBhdCBleHBPYmplY3RJRC4KIAotCiAgICAgIFRoaXMgb2JqZWN0IGlzIGluc3RhbnRpYXRlZCBvbmx5IGlmIGV4cE9iamVjdFNhbXBsZVR5cGUgaXMKICAgICAgJ2RlbHRhVmFsdWUnIG9yICdjaGFuZ2VkVmFsdWUnLgogCkBAIC04NzQsNyArODYxLDYgQEAKICAgICBERUZWQUwgICAgICB7IHRpbWVUaWNrcyB9CiAgICAgIDo6PSB7IGV4cE9iamVjdEVudHJ5IDcgfQogCi0KIGV4cE9iamVjdENvbmRpdGlvbmFsIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgT0JKRUNUIElERU5USUZJRVIKICAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQpAQCAtOTEwLDcgKzg5Niw2IEBACiAgICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCiAgICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICAgREVTQ1JJUFRJT04KLQogICAgICAiQSB0cnVlIHZhbHVlIGluZGljYXRlcyB0aGUgZXhwT2JqZWN0Q29uZGl0aW9uYWwgb2YgdGhpcyByb3cgaXMKICAgICAgYSB3aWxkY2FyZCBvYmplY3QuIEZhbHNlIGluZGljYXRlcyB0aGF0IGV4cE9iamVjdENvbmRpdGlvbmFsIGlzCiAgICAgIGZ1bGx5IGluc3RhbmNlZC4KQEAgLTkyMyw3ICs5MDgsNiBAQAogZXhwT2JqZWN0RW50cnlTdGF0dXMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBSb3dTdGF0dXMKICAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICJUaGUgY29udHJvbCB0aGF0IGFsbG93cyBjcmVhdGlvbi9kZWxldGlvbiBvZiBlbnRyaWVzLgpAQCAtMTAyMSw3ICsxMDA1LDYgQEAKIGV4cFZhbHVlQ291bnRlcjMyVmFsIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5Ci0KICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgIlRoZSB2YWx1ZSB3aGVuIGV4cEV4cHJlc3Npb25WYWx1ZVR5cGUgaXMgJ2NvdW50ZXIzMicuIgpAQCAtMTA2MCw3ICsxMDQzLDcgQEAKICAgICA6Oj0geyBleHBWYWx1ZUVudHJ5IDYgfQogCiBleHBWYWx1ZU9jdGV0U3RyaW5nVmFsIE9CSkVDVC1UWVBFCi0gICAgU1lOVEFYICAgICAgT0NURVQgU1RSSU5HIC0tIChTSVpFICgwLi42NTUzNikpCisgICAgU1lOVEFYICAgICAgT0NURVQgU1RSSU5HIChTSVpFICgwLi42NTUzNikpCiAgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0xMDcwLDcgKzEwNTMsNiBAQAogZXhwVmFsdWVPaWRWYWwgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBPQkpFQ1QgSURFTlRJRklFUgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICJUaGUgdmFsdWUgd2hlbiBleHBFeHByZXNzaW9uVmFsdWVUeXBlIGlzICdvYmplY3RJZCcuIgpAQCAtMTEzNiw3ICsxMTE4LDYgQEAKICAgICAgV1JJVEUtU1lOVEFYICAgSU5URUdFUiB7IGZhbHNlKDIpIH0KICAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAiSW1wbGVtZW50YXRpb24gbmVlZCBub3QgYWxsb3cgZGVsdGFzIHdpbGRjYXJkcy4iCi0KICAgICAgOjo9IHsgZGlzbWFuRXhwcmVzc2lvbk1JQkNvbXBsaWFuY2VzIDEgfQogCiAtLSBVbml0cyBvZiBDb25mb3JtYW5jZQpAQCAtMTE2MywxMiArMTE0NCwxMCBAQAogICAgICAgICAgIGV4cEV4cHJlc3Npb25QcmVmaXgsCiAgICAgICAgICAgZXhwRXhwcmVzc2lvbkVycm9ycywKICAgICAgICAgICBleHBFeHByZXNzaW9uRW50cnlTdGF0dXMsCi0KICAgICAgICAgICBleHBFcnJvclRpbWUsCiAgICAgICAgICAgZXhwRXJyb3JJbmRleCwKICAgICAgICAgICBleHBFcnJvckNvZGUsCiAgICAgICAgICAgZXhwRXJyb3JJbnN0YW5jZSwKLQogICAgICAgICAgIGV4cE9iamVjdElELAogICAgICAgICAgIGV4cE9iamVjdElEV2lsZGNhcmQsCiAgICAgICAgICAgZXhwT2JqZWN0U2FtcGxlVHlwZSwKQEAgLTEyMDEsNSArMTE4MCwzIEBACiAgICAgIDo6PSB7IGRpc21hbkV4cHJlc3Npb25NSUJHcm91cHMgMyB9CiAKIEVORAotCi0KZGlmZiAtLWdpdCBhL21pYnMvSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQgYi9taWJzL0lBTkEtQUREUkVTUy1GQU1JTFktTlVNQkVSUy1NSUIudHh0CmluZGV4IDE2ODBhY2UuLjc5OTVmYzQgMTAwNjQ0Ci0tLSBhL21pYnMvSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQi50eHQKKysrIGIvbWlicy9JQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dApAQCAtNiwyNCArNiwzNyBAQAogICAgICAgVEVYVFVBTC1DT05WRU5USU9OICAgICAgICAgICAgICAgICAgRlJPTSBTTk1QdjItVEM7CiAKICAgaWFuYUFkZHJlc3NGYW1pbHlOdW1iZXJzIE1PRFVMRS1JREVOVElUWQotICAgICAgTEFTVC1VUERBVEVEICIyMDAyMDMxNDAwMDBaIiAgLS0gTWFyY2ggMTQsIDIwMDIKKyAgICAgIExBU1QtVVBEQVRFRCAiMjAxMzA5MjUwMDAwWiIgIC0tIFNlcHRlbWJlciAyNSwgMjAxMwogICAgICAgT1JHQU5JWkFUSU9OICJJQU5BIgogICAgICAgQ09OVEFDVC1JTkZPCiAgICAgICAgICAgIlBvc3RhbDogICAgSW50ZXJuZXQgQXNzaWduZWQgTnVtYmVycyBBdXRob3JpdHkKICAgICAgICAgICAgICAgICAgICAgICBJbnRlcm5ldCBDb3Jwb3JhdGlvbiBmb3IgQXNzaWduZWQgTmFtZXMKIAkJICAgICAgYW5kIE51bWJlcnMKLSAgICAgICAgICAgICAgICAgICAgICA0Njc2IEFkbWlyYWx0eSBXYXksIFN1aXRlIDMzMAotICAgICAgICAgICAgICAgICAgICAgIE1hcmluYSBkZWwgUmV5LCBDQSA5MDI5Mi02NjAxCisgICAgICAgICAgICAgICAgICAgICAgMTIwMjUgV2F0ZXJmcm9udCBEcml2ZSwgU3VpdGUgMzAwCisgICAgICAgICAgICAgICAgICAgICAgTG9zIEFuZ2VsZXMsIENBIDkwMDk0LTI1MzYKICAgICAgICAgICAgICAgICAgICAgICBVU0EKIAotICAgICAgICAgIFRlbDogICAgKzEgIDMxMC04MjMtOTM1OAotICAgICAgICAgIEUtTWFpbDogaWFuYUBpYW5hLm9yZyIKKyAgICAgICAgICBUZWw6ICAgICsxICAzMTAtMzAxLTU4MDAKKyAgICAgICAgICBFLU1haWw6IGlhbmEmaWFuYS5vcmciCiAgICAgICBERVNDUklQVElPTgogICAgICAgICAgICJUaGUgTUlCIG1vZHVsZSBkZWZpbmVzIHRoZSBBZGRyZXNzRmFtaWx5TnVtYmVycwogICAgICAgICAgIHRleHR1YWwgY29udmVudGlvbi4iCiAKICAgICAgIC0tIHJldmlzaW9uIGhpc3RvcnkKIAorICAgICAgUkVWSVNJT04gICAgICIyMDEzMDkyNTAwMDBaIiAgLS0gU2VwdGVtYmVyIDI1LCAyMDEzCisgICAgICBERVNDUklQVElPTiAgIkZpeGVkIGxhYmVscyBmb3IgMTYzODktMTYzOTAuIgorCisgICAgICBSRVZJU0lPTiAgICAgIjIwMTMwNzE2MDAwMFoiICAtLSBKdWx5IDE2LCAyMDEzCisgICAgICBERVNDUklQVElPTiAgIkZpeGVkIGxhYmVscyBmb3IgMTYzODktMTYzOTAuIgorCisgICAgICBSRVZJU0lPTiAgICAgIjIwMTMwNjI2MDAwMFoiICAtLSBKdW5lIDI2LCAyMDEzCisgICAgICBERVNDUklQVElPTiAgIkFkZGVkIGFzc2lnbm1lbnRzIDI2LTI4LiIKKworICAgICAgUkVWSVNJT04gICAgICIyMDEzMDYxODAwMDBaIiAgLS0gSnVuZSAxOCwgMjAxMworICAgICAgREVTQ1JJUFRJT04gICJBZGRlZCBhc3NpZ25tZW50cyAxNjM4NC0xNjM5MC4gQXNzaWdubWVudCAKKyAgICAgICAgICAgICAgICAgICAgMjUgYWRkZWQgaW4gMjAwNyByZXZpc2lvbi4iCisKICAgICAgIFJFVklTSU9OICAgICAiMjAwMjAzMTQwMDAwWiIgIC0tIE1hcmNoIDE0LCAyMDAyCiAgICAgICBERVNDUklQVElPTiAgIkFkZHJlc3NGYW1pbHlOdW1iZXJzIGFzc2lnbm1lbnQgMjIgdG8gCiAgICAgICAgICAgICAgICAgICAgZmlicmVDaGFubmVsV1dQTi4gQWRkcmVzc0ZhbWlseU51bWJlcnMgCkBAIC04NiwxMCArOTksMjYgQEAKICAgICAgICAgICBmaWJyZUNoYW5uZWxXV1BOKDIyKSwgIC0tIEZpYnJlIENoYW5uZWwgV29ybGQtV2lkZSBQb3J0IE5hbWUgCiAgICAgICAgICAgZmlicmVDaGFubmVsV1dOTigyMyksICAtLSBGaWJyZSBDaGFubmVsIFdvcmxkLVdpZGUgTm9kZSBOYW1lCiAgICAgICAgICAgZ3dpZCgyNCksICAgIC0tIEdhdGV3YXkgSWRlbnRpZmllciAKKyAgICAgICAgICBhZmkoMjUpLCAgLS0gQUZJIGZvciBMMlZQTiBpbmZvcm1hdGlvbgorICAgICAgICAgIG1wbHNUcFNlY3Rpb25FbmRwb2ludElkZW50aWZpZXIoMjYpLCAgLS0gTVBMUy1UUCBTZWN0aW9uIEVuZHBvaW50IElkZW50aWZpZXIKKyAgICAgICAgICBtcGxzVHBMc3BFbmRwb2ludElkZW50aWZpZXIoMjcpLCAgLS0gTVBMUy1UUCBMU1AgRW5kcG9pbnQgSWRlbnRpZmllcgorICAgICAgICAgIG1wbHNUcFBzZXVkb3dpcmVFbmRwb2ludElkZW50aWZpZXIoMjgpLCAgLS0gTVBMUy1UUCBQc2V1ZG93aXJlIEVuZHBvaW50IElkZW50aWZpZXIKKyAgICAgICAgICBlaWdycENvbW1vblNlcnZpY2VGYW1pbHkoMTYzODQpLCAgLS0gRUlHUlAgQ29tbW9uIFNlcnZpY2UgRmFtaWx5CisgICAgICAgICAgZWlncnBJcHY0U2VydmljZUZhbWlseSgxNjM4NSksICAtLSBFSUdSUCBJUHY0IFNlcnZpY2UgRmFtaWx5CisgICAgICAgICAgZWlncnBJcHY2U2VydmljZUZhbWlseSgxNjM4NiksICAtLSBFSUdSUCBJUHY2IFNlcnZpY2UgRmFtaWx5CisgICAgICAgICAgbGlzcENhbm9uaWNhbEFkZHJlc3NGb3JtYXQoMTYzODcpLCAgLS0gTElTUCBDYW5vbmljYWwgQWRkcmVzcyBGb3JtYXQgKExDQUYpCisgICAgICAgICAgYmdwTHMoMTYzODgpLCAgLS0gQkdQLUxTCisgICAgICAgICAgZm9ydHllaWdodEJpdE1hY0JpdE1hYygxNjM4OSksICAtLSA0OC1iaXQgTUFDCisgICAgICAgICAgc2l4dHlmb3VyQml0TWFjKDE2MzkwKSwgIC0tIDY0LWJpdCBNQUMKKyAgICAgICAgICBvdWkoMTYzOTEpLCAgLS0gT1VJCisgICAgICAgICAgbWFjMjQoMTYzOTIpLCAgLS0gTUFDLzI0CisgICAgICAgICAgbWFjNDAoMTYzOTMpLCAgLS0gTUFDLzQwCisgICAgICAgICAgaXB2NjY0KDE2Mzk0KSwgIC0tIElQdjYvNjQKKyAgICAgICAgICByQnJpZGdlUG9ydElEKDE2Mzk1KSwgIC0tIFJCcmlkZ2UgUG9ydCBJRAogICAgICAgICAgIHJlc2VydmVkKDY1NTM1KQogCiAgICAgICAgICAgUmVxdWVzdHMgZm9yIG5ldyB2YWx1ZXMgc2hvdWxkIGJlIG1hZGUgdG8gSUFOQSB2aWEKLSAgICAgICAgICBlbWFpbCAoaWFuYUBpYW5hLm9yZykuIgorICAgICAgICAgIGVtYWlsIChpYW5hJmlhbmEub3JnKS4iCiAgICAgICBTWU5UQVggIElOVEVHRVIgewogICAgICAgICAgICAgICAgICAgb3RoZXIoMCksCiAgICAgICAgICAgICAgICAgICBpcFY0KDEpLApAQCAtMTE2LDYgKzE0NSwyMiBAQAogICAgICAgICAgICAgICAgICAgZmlicmVDaGFubmVsV1dQTigyMiksCiAgICAgICAgICAgICAgICAgICBmaWJyZUNoYW5uZWxXV05OKDIzKSwKICAgICAgICAgICAgICAgICAgIGd3aWQoMjQpLAorICAgICAgICAgICAgICAgICAgYWZpKDI1KSwKKyAgICAgICAgICAgICAgICAgIG1wbHNUcFNlY3Rpb25FbmRwb2ludElkZW50aWZpZXIoMjYpLAorICAgICAgICAgICAgICAgICAgbXBsc1RwTHNwRW5kcG9pbnRJZGVudGlmaWVyKDI3KSwKKyAgICAgICAgICAgICAgICAgIG1wbHNUcFBzZXVkb3dpcmVFbmRwb2ludElkZW50aWZpZXIoMjgpLAorICAgICAgICAgICAgICAgICAgZWlncnBDb21tb25TZXJ2aWNlRmFtaWx5KDE2Mzg0KSwKKyAgICAgICAgICAgICAgICAgIGVpZ3JwSXB2NFNlcnZpY2VGYW1pbHkoMTYzODUpLAorICAgICAgICAgICAgICAgICAgZWlncnBJcHY2U2VydmljZUZhbWlseSgxNjM4NiksCisgICAgICAgICAgICAgICAgICBsaXNwQ2Fub25pY2FsQWRkcmVzc0Zvcm1hdCgxNjM4NyksCisgICAgICAgICAgICAgICAgICBiZ3BMcygxNjM4OCksCisgICAgICAgICAgICAgICAgICBmb3J0eWVpZ2h0Qml0TWFjKDE2Mzg5KSwKKyAgICAgICAgICAgICAgICAgIHNpeHR5Zm91ckJpdE1hYygxNjM5MCksCisgICAgICAgICAgICAgICAgICBvdWkoMTYzOTEpLAorICAgICAgICAgICAgICAgICAgbWFjMjQoMTYzOTIpLAorICAgICAgICAgICAgICAgICAgbWFjNDAoMTYzOTMpLAorICAgICAgICAgICAgICAgICAgaXB2NjY0KDE2Mzk0KSwKKyAgICAgICAgICAgICAgICAgIHJCcmlkZ2VQb3J0SUQoMTYzOTUpLAogICAgICAgICAgICAgICAgICAgcmVzZXJ2ZWQoNjU1MzUpCiAgICAgICAgICAgICAgIH0KICAgICAgIEVORApkaWZmIC0tZ2l0IGEvbWlicy9JQU5BLUxBTkdVQUdFLU1JQi50eHQgYi9taWJzL0lBTkEtTEFOR1VBR0UtTUlCLnR4dAppbmRleCBiMGFkM2VkLi40Yjk3YmRkIDEwMDY0NAotLS0gYS9taWJzL0lBTkEtTEFOR1VBR0UtTUlCLnR4dAorKysgYi9taWJzL0lBTkEtTEFOR1VBR0UtTUlCLnR4dApAQCAtNSwxNyArNSwxNyBAQAogICAgICAgICBGUk9NIFNOTVB2Mi1TTUk7CiAKIGlhbmFMYW5ndWFnZXMgTU9EVUxFLUlERU5USVRZCi0gICAgTEFTVC1VUERBVEVEICIyMDAwMDUxMDAwMDBaIiAgLS0gTWF5IDEwLCAyMDAwCisgICAgTEFTVC1VUERBVEVEICIyMDE0MDUyMjAwMDBaIiAtLSBNYXkgMjIsIDIwMTQKICAgICBPUkdBTklaQVRJT04gIklBTkEiCiAgICAgQ09OVEFDVC1JTkZPCiAgICAgICAgICJJbnRlcm5ldCBBc3NpZ25lZCBOdW1iZXJzIEF1dGhvcml0eSAoSUFOQSkKIAogICAgICAgICAgUG9zdGFsOiBJQ0FOTgotICAgICAgICAgICAgICAgICA0Njc2IEFkbWlyYWx0eSBXYXksIFN1aXRlIDMzMAotICAgICAgICAgICAgICAgICBNYXJpbmEgZGVsIFJleSwgQ0EgOTAyOTIKKyAgICAgICAgICAgICAgICAgMTIwMjUgV2F0ZXJmcm9udCBEcml2ZSwgU3VpdGUgMzAwCisgICAgICAgICAgICAgICAgIExvcyBBbmdlbGVzLCBDQSA5MDA5NC0yNTM2CiAKLSAgICAgICAgIFRlbDogICAgKzEgMzEwIDgyMyA5MzU4IHgyMAotICAgICAgICAgRS1NYWlsOiBpYW5hQGlhbmEub3JnIgorICAgICAgICAgVGVsOiAgICArMSAzMTAtMzAxLTU4MDAKKyAgICAgICAgIEUtTWFpbDogaWFuYSZpYW5hLm9yZyIKICAgICBERVNDUklQVElPTgogICAgICAgICAiVGhlIE1JQiBtb2R1bGUgcmVnaXN0ZXJzIG9iamVjdCBpZGVudGlmaWVyIHZhbHVlcyBmb3IKICAgICAgICAgIHdlbGwta25vd24gcHJvZ3JhbW1pbmcgYW5kIHNjcmlwdGluZyBsYW5ndWFnZXMuIEV2ZXJ5CkBAIC0zOSw2ICszOSw5IEBACiAKICAtLSBSZXZpc2lvbiBsb2csIGluIHJldmVyc2UgY2hyb25vbG9naWNhbCBvcmRlcgogCisgICAgUkVWSVNJT04gICAgIjIwMTQwNTIyMDAwMFoiIC0tIE1heSAyMiwgMjAxNAorICAgIERFU0NSSVBUSU9OICJVcGRhdGVkIGNvbnRhY3QgaW5mby4iCisKICAgICBSRVZJU0lPTiAgICAiMjAwMDA1MTAwMDAwWiIgLS0gTWF5IDEwLCAyMDAwCiAgICAgREVTQ1JJUFRJT04gIkltcG9ydCBtaWItMiBpbnN0ZWFkIG9mIGV4cGVyaW1lbnRhbCwgc28gdGhhdAogICAgICAgICAgICAgICAgICB0aGlzIG1vZHVsZSBjb21waWxlcyIKZGlmZiAtLWdpdCBhL21pYnMvSUFOQS1SVFBST1RPLU1JQi50eHQgYi9taWJzL0lBTkEtUlRQUk9UTy1NSUIudHh0CmluZGV4IDU3ZTczYTIuLmY3YmMxZWIgMTAwNjQ0Ci0tLSBhL21pYnMvSUFOQS1SVFBST1RPLU1JQi50eHQKKysrIGIvbWlicy9JQU5BLVJUUFJPVE8tTUlCLnR4dApAQCAtMSw0ICsxLDMgQEAKLQogSUFOQS1SVFBST1RPLU1JQiBERUZJTklUSU9OUyA6Oj0gQkVHSU4KIAogSU1QT1JUUwpAQCAtNiwxNiArNSwxNiBAQAogICAgIFRFWFRVQUwtQ09OVkVOVElPTiAgICAgICAgICAgICAgIEZST00gU05NUHYyLVRDOwogCiBpYW5hUnRQcm90b01JQiAgTU9EVUxFLUlERU5USVRZCi0gICAgTEFTVC1VUERBVEVEICIyMDAwMDkyNjAwMDBaIiAtLSBTZXB0ZW1iZXIgMjYsIDIwMDAKKyAgICBMQVNULVVQREFURUQgIjIwMTIwODMwMDAwMFoiIC0tIEF1Z3VzdCAzMCwgMjAxMgogICAgIE9SR0FOSVpBVElPTiAiSUFOQSIKICAgICBDT05UQUNULUlORk8KICAgICAgICAgICAgICIgSW50ZXJuZXQgQXNzaWduZWQgTnVtYmVycyBBdXRob3JpdHkKICAgICAgICAgICAgICAgSW50ZXJuZXQgQ29ycG9yYXRpb24gZm9yIEFzc2lnbmVkIE5hbWVzIGFuZCBOdW1iZXJzCi0gICAgICAgICAgICAgIDQ2NzYgQWRtaXJhbHR5IFdheSwgU3VpdGUgMzMwCi0gICAgICAgICAgICAgIE1hcmluYSBkZWwgUmV5LCBDQSA5MDI5Mi02NjAxCisgICAgICAgICAgICAgIDEyMDI1IFdhdGVyZnJvbnQgRHJpdmUsIFN1aXRlIDMwMAorICAgICAgICAgICAgICBMb3MgQW5nZWxlcywgQ0EgOTAwOTQtMjUzNgogCi0gICAgICAgICAgICAgIFBob25lOiArMSAzMTAgODIzIDkzNTgKLSAgICAgICAgICAgICAgRU1haWw6IGlhbmFAaWFuYS5vcmciCisgICAgICAgICAgICAgIFBob25lOiArMSAzMTAgMzAxIDU4MDAKKyAgICAgICAgICAgICAgRU1haWw6IGlhbmEmaWFuYS5vcmciCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgICJUaGlzIE1JQiBtb2R1bGUgZGVmaW5lcyB0aGUgSUFOQWlwUm91dGVQcm90b2NvbCBhbmQKICAgICAgICAgICAgIElBTkFpcE1Sb3V0ZVByb3RvY29sIHRleHR1YWwgY29udmVudGlvbnMgZm9yIHVzZSBpbiBNSUJzCkBAIC0yOSwxNSArMjgsMTkgQEAKICAgICAgICAgICAgIHdpbGwgYmUgc2VsZWN0ZWQgYnkgdGhlIElFU0cgQXJlYSBEaXJlY3RvcihzKSBvZiB0aGUgUm91dGluZwogICAgICAgICAgICAgQXJlYS4iCiAKKyAgICBSRVZJU0lPTiAgICAgIjIwMTIwODMwMDAwMFoiICAtLSBBdWd1c3QgMzAsIDIwMTIgCisgICAgREVTQ1JJUFRJT04gICJBZGRlZCBkaGNwKDE5KS4iCisKKyAgICBSRVZJU0lPTiAgICAgIjIwMTEwNzIyMDAwMFoiICAtLSBKdWx5IDIyLCAyMDExIAorICAgIERFU0NSSVBUSU9OICAiQWRkZWQgcnBsKDE4KSAuIgorCiAgICAgUkVWSVNJT04gICAgICIyMDAwMDkyNjAwMDBaIiAgLS0gU2VwdGVtYmVyIDI2LCAyMDAwIAogICAgIERFU0NSSVBUSU9OICAiT3JpZ2luYWwgdmVyc2lvbiwgcHVibGlzaGVkIGluIGNvb3JkaW5hdGlvbgogICAgICAgICAgICAgICAgICB3aXRoIFJGQyAyOTMyLiIKLQogICAgIDo6PSB7IG1pYi0yIDg0IH0KIAogSUFOQWlwUm91dGVQcm90b2NvbCA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCiAgICBTVEFUVVMgICAgICBjdXJyZW50Ci0KICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiQSBtZWNoYW5pc20gZm9yIGxlYXJuaW5nIHJvdXRlcy4gIEluY2x1c2lvbiBvZiB2YWx1ZXMgZm9yCiAgICAgICAgICAgICByb3V0aW5nIHByb3RvY29scyBpcyBub3QgaW50ZW5kZWQgdG8gaW1wbHkgdGhhdCB0aG9zZQpAQCAtNjMsNyArNjYsOSBAQAogICAgICAgICAgICAgICAgIGJncCAgICAgICAgKDE0KSwgLS0gQm9yZGVyIEdhdGV3YXkgUHJvdG9jb2wKICAgICAgICAgICAgICAgICBpZHByICAgICAgICgxNSksIC0tIEludGVyRG9tYWluIFBvbGljeSBSb3V0aW5nCiAgICAgICAgICAgICAgICAgY2lzY29FaWdycCAoMTYpLCAtLSBDaXNjbyBFSUdSUAotICAgICAgICAgICAgICAgIGR2bXJwICAgICAgKDE3KSAgLS0gRFZNUlAKKyAgICAgICAgICAgICAgICBkdm1ycCAgICAgICgxNyksIC0tIERWTVJQCisgICAgICAgICAgICAgICAgcnBsICAgICAgICAoMTgpLCAtLSBSUEwgW1JGQy1pZXRmLXJvbGwtcnBsLTE5XQorICAgICAgICAgICAgICAgIGRoY3AgICAgICAgKDE5KSAgLS0gREhDUCBbUkZDMjEzMl0KICAgICAgICAgICAgICAgIH0KIAogSUFOQWlwTVJvdXRlUHJvdG9jb2wgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgpAQCAtODgsNSArOTMsMyBAQAogICAgICAgICAgICAgICAgfQogCiBFTkQKLQotCmRpZmYgLS1naXQgYS9taWJzL0lBTkFpZlR5cGUtTUlCLnR4dCBiL21pYnMvSUFOQWlmVHlwZS1NSUIudHh0CmluZGV4IDU0MmUyNDcuLjAyN2ExNTMgMTAwNjQ0Ci0tLSBhL21pYnMvSUFOQWlmVHlwZS1NSUIudHh0CisrKyBiL21pYnMvSUFOQWlmVHlwZS1NSUIudHh0CkBAIC01LDIxICs1LDEyMyBAQAogICAgICAgIFRFWFRVQUwtQ09OVkVOVElPTiAgICAgICAgICBGUk9NIFNOTVB2Mi1UQzsKIAogICAgaWFuYWlmVHlwZSBNT0RVTEUtSURFTlRJVFkKLSAgICAgICBMQVNULVVQREFURUQgIjIwMDUxMDEwMDAwMFoiICAtLSBPY3RvYmVyIDEwLCAyMDA1CisgICAgICAgTEFTVC1VUERBVEVEICIyMDE0MDcwMzAwMDBaIiAtLSBKdWx5IDMsIDIwMTQKICAgICAgICBPUkdBTklaQVRJT04gIklBTkEiCiAgICAgICAgQ09OVEFDVC1JTkZPICIgICAgICAgIEludGVybmV0IEFzc2lnbmVkIE51bWJlcnMgQXV0aG9yaXR5CiAKICAgICAgICAgICAgICAgICAgICAgIFBvc3RhbDogSUNBTk4KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDY3NiBBZG1pcmFsdHkgV2F5LCBTdWl0ZSAzMzAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTWFyaW5hIGRlbCBSZXksIENBIDkwMjkyCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyMDI1IFdhdGVyZnJvbnQgRHJpdmUsIFN1aXRlIDMwMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb3MgQW5nZWxlcywgQ0EgOTAwOTQtMjUzNgogCi0gICAgICAgICAgICAgICAgICAgICBUZWw6ICAgICsxIDMxMCA4MjMgOTM1OAotICAgICAgICAgICAgICAgICAgICAgRS1NYWlsOiBpYW5hQGlhbmEub3JnIgotCisgICAgICAgICAgICAgICAgICAgICBUZWw6ICAgICsxIDMxMC0zMDEtNTgwMAorICAgICAgICAgICAgICAgICAgICAgRS1NYWlsOiBpYW5hJmlhbmEub3JnIgogICAgICAgIERFU0NSSVBUSU9OICAiVGhpcyBNSUIgbW9kdWxlIGRlZmluZXMgdGhlIElBTkFpZlR5cGUgVGV4dHVhbAogICAgICAgICAgICAgICAgICAgICAgQ29udmVudGlvbiwgYW5kIHRodXMgdGhlIGVudW1lcmF0ZWQgdmFsdWVzIG9mCiAgICAgICAgICAgICAgICAgICAgICB0aGUgaWZUeXBlIG9iamVjdCBkZWZpbmVkIGluIE1JQi1JSSdzIGlmVGFibGUuIgogCisgICAgICAgUkVWSVNJT04gICAgICIyMDE0MDcwMzAwMDBaIiAgLS0gSnVseSAzLCAyMDE0CisJICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI3Ny0yNzguIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDE0MDUyMjAwMDBaIiAtLSBNYXkgMjIsIDIwMTQKKyAgICAgICBERVNDUklQVElPTiAgIlVwZGF0ZWQgY29udGFjdCBpbmZvLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMjA1MTcwMDAwWiIgIC0tIE1heSAxNywgMjAxMgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI3Mi4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTIwMTExMDAwMFoiICAtLSBKYW51YXJ5IDExLCAyMDEyCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI2Ni0yNzEuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDExMTIxODAwMDBaIiAgLS0gRGVjZW1iZXIgMTgsIDIwMTEKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjYzLTI2NS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTExMDI2MDAwMFoiICAtLSBPY3RvYmVyIDI2LCAyMDExCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjYyLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMTA5MDcwMDAwWiIgIC0tIFNlcHRlbWJlciA3LCAyMDExCisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzIDI2MCBhbmQgMjYxLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMTA3MjIwMDAwWiIgIC0tIEp1bHkgMjIsIDIwMTEKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNTkuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDExMDYwMzAwMDBaIiAgLS0gSnVuZSAwMywgMjAxMQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI1OC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTAwOTIxMDAwMFoiICAtLSBTZXB0ZW1iZXIgMjEsIDIwMTAKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjU2IGFuZCAyNTcuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDEwMDcyMTAwMDBaIiAgLS0gSnVseSAyMSwgMjAxMAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI1NS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTAwMjExMDAwMFoiICAtLSBGZWJydWFyeSAxMSwgMjAxMAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI1NC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTAwMjA4MDAwMFoiICAtLSBGZWJydWFyeSAwOCwgMjAxMAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNTIgYW5kIDI1My4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDkwNTA2MDAwMFoiICAtLSBNYXkgMDYsIDIwMDkKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNTEuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA5MDIwNjAwMDBaIiAgLS0gRmVicnVhcnkgMDYsIDIwMDkKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQXR1bm5lbFR5cGUgMTUuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA4MTAwOTAwMDBaIiAgLS0gT2N0b2JlciAwOSwgMjAwOAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI1MC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDgwODEyMDAwMFoiICAtLSBBdWd1c3QgMTIsIDIwMDgKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNDkuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA4MDcyMjAwMDBaIiAgLS0gSnVseSAyMiwgMjAwOAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyNDcgYW5kIDI0OC4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDgwNjI0MDAwMFoiICAtLSBKdW5lIDI0LCAyMDA4CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUgMjQ2LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwODA1MjkwMDAwWiIgIC0tIE1heSAyOSwgMjAwOAorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlIDI0NS4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDcwOTEzMDAwMFoiICAtLSBTZXB0ZW1iZXIgMTMsIDIwMDcKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMgMjQzIGFuZCAyNDQuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA3MDUyOTAwMDBaIiAgLS0gTWF5IDI5LCAyMDA3CisgICAgICAgREVTQ1JJUFRJT04gICJDaGFuZ2VkIHRoZSBkZXNjcmlwdGlvbiBmb3IgSUFOQWlmVHlwZSAyMjguIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA3MDMwODAwMDBaIiAgLS0gTWFyY2ggMDgsIDIwMDcKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAyNDIuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA3MDEyMzAwMDBaIiAgLS0gSmFudWFyeSAyMywgMjAwNworICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcyAyMzksIDI0MCwgYW5kIDI0MS4iIAorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MTAxNzAwMDBaIiAgLS0gT2N0b2JlciAxNywgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiRGVwcmVjYXRlZC9PYnNvbGV0ZWQgSUFOQWlmVHlwZSAyMzAuICBSZWdpc3RyYXRpb24gb2YgCisgICAgICAgICAgICAgICAgICAgICBJQU5BaWZUeXBlIDIzOC4iIAorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDkyNTAwMDBaIiAgLS0gU2VwdGVtYmVyIDI1LCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJDaGFuZ2VkIHRoZSBkZXNjcmlwdGlvbiBmb3IgSUFOQSBpZlR5cGUgCisgICAgICAgICAgICAgICAgICAgICAxODQgYW5kIGFkZGVkIG5ldyBJQU5BIGlmVHlwZSAyMzcuIiAgCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwODE3MDAwMFoiICAtLSBBdWd1c3QgMTcsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIkNoYW5nZWQgdGhlIGRlc2NyaXB0aW9ucyBmb3IgSUFOQWlmVHlwZXMKKyAgICAgICAgICAgICAgICAgICAgIDIwIGFuZCAyMS4iICAgCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDYwODExMDAwMFoiICAtLSBBdWd1c3QgMTEsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIkNoYW5nZWQgdGhlIGRlc2NyaXB0aW9ucyBmb3IgSUFOQWlmVHlwZXMKKyAgICAgICAgICAgICAgICAgICAgIDcsIDExLCA2MiwgNjksIGFuZCAxMTcuIiAgIAorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDcyNTAwMDBaIiAgLS0gSnVseSAyNSwgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMzYuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDYxNDAwMDBaIiAgLS0gSnVuZSAxNCwgMjAwNgorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMzUuIgorCisgICAgICAgUkVWSVNJT04gICAgICIyMDA2MDMzMTAwMDBaIiAgLS0gTWFyY2ggMzEsIDIwMDYKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjM0LiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAwNjAzMzAwMDAwWiIgIC0tIE1hcmNoIDMwLCAyMDA2CisgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkEgaWZUeXBlIDIzMy4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMDUxMjIyMDAwMFoiICAtLSBEZWNlbWJlciAyMiwgMjAwNQorICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZXMgMjMxIGFuZCAyMzIuIgorCiAgICAgICAgUkVWSVNJT04gICAgICIyMDA1MTAxMDAwMDBaIiAgLS0gT2N0b2JlciAxMCwgMjAwNQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BIGlmVHlwZSAyMzAuIgogCkBAIC0zMSwxMSArMTMzLDEwIEBACiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDUwMzAzMDAwMFoiICAtLSBNYXJjaCAzLCAyMDA1CiAgICAgICAgREVTQ1JJUFRJT04gICJBZGRlZCB0aGUgSUFOQXR1bm5lbFR5cGUgVEMgYW5kIGRlcHJlY2F0ZWQKLQkgICAgICAgICAgICAgICAgIElBTkFpZlR5cGUgc2l4VG9Gb3VyICgyMTUpIHBlciAKLQkgICAgICAgICAgICAgICAgIFJGQzQwODcuIgorCSAgICAgICAgICAgICAgICAgSUFOQWlmVHlwZSBzaXhUb0ZvdXIgKDIxNSkgcGVyIFJGQzQwODcuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDA0MTEyMjAwMDBaIiAgLS0gTm92ZW1iZXIgMjIsIDIwMDQKLSAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjI3LiIKKyAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjI3IHBlciBSRkM0NjMxLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwNDA2MTcwMDAwWiIgIC0tIEp1bmUgMTcsIDIwMDQKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQSBpZlR5cGUgMjI2LiIKQEAgLTUwLDkyICsxNTEsOTIgQEAKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMzA4MjUwMDAwWiIgIC0tIEF1ZyAyNSwgMjAwMwogICAgICAgIERFU0NSSVBUSU9OICAiRGVwcmVjYXRlZCBJQU5BaWZUeXBlcyA3IGFuZCAxMS4gT2Jzb2xldGVkCi0gICAgICAgICAgICAgICAgICAgIElBTkFpZlR5cGVzIDYyLCA2OSwgYW5kIDExNy4gIGV0aGVybmV0Q3NtYWNkICg2KQotICAgICAgICAgICAgICAgICAgICBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkIG9mIHRoZXNlIHZhbHVlcyIKKyAgICAgICAgICAgICAgICAgICAgIElBTkFpZlR5cGVzIDYyLCA2OSwgYW5kIDExNy4gIGV0aGVybmV0Q3NtYWNkICg2KQorICAgICAgICAgICAgICAgICAgICAgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGVzZSB2YWx1ZXMiCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDMwODE4MDAwMFoiICAtLSBBdWcgMTgsIDIwMDMKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMjQuIgorICAgICAgICAgICAgICAgICAgICAgMjI0LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMzA4MDcwMDAwWiIgIC0tIEF1ZyA3LCAyMDAzCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDIyMiBhbmQgMjIzLiIKKyAgICAgICAgICAgICAgICAgICAgIDIyMiBhbmQgMjIzLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMzAzMTgwMDAwWiIgIC0tIE1hciAxOCwgMjAwMwogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIyMS4iCisgICAgICAgICAgICAgICAgICAgICAyMjEuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAzMDExMzAwMDBaIiAgLS0gSmFuIDEzLCAyMDAzCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjIwLiIKKyAgICAgICAgICAgICAgICAgICAgIDIyMC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDIxMDE3MDAwMFoiICAtLSBPY3QgMTcsIDIwMDIKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMTkuIgorICAgICAgICAgICAgICAgICAgICAgMjE5LiIKIAotCSAgIFJFVklTSU9OICAgICAiMjAwMjA3MTYwMDAwWiIgIC0tIEp1bCAxNiwgMjAwMgorICAgICAgIFJFVklTSU9OICAgICAiMjAwMjA3MTYwMDAwWiIgIC0tIEp1bCAxNiwgMjAwMgogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAyMTcgYW5kIDIxOC4iCisgICAgICAgICAgICAgICAgICAgICAyMTcgYW5kIDIxOC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDIwNzEwMDAwMFoiICAtLSBKdWwgMTAsIDIwMDIKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMjE1IGFuZCAyMTYuIgorICAgICAgICAgICAgICAgICAgICAgMjE1IGFuZCAyMTYuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAyMDYxOTAwMDBaIiAgLS0gSnVuIDE5LCAyMDAyCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMjE0LiIKKyAgICAgICAgICAgICAgICAgICAgIDIxNC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDIwMTA0MDAwMFoiICAtLSBKYW4gNCwgMjAwMgogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAyMTEsIDIxMiBhbmQgMjEzLiIKKyAgICAgICAgICAgICAgICAgICAgIDIxMSwgMjEyIGFuZCAyMTMuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMTIyMDAwMDBaIiAgLS0gRGVjIDIwLCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDIwOSBhbmQgMjEwLiIKKyAgICAgICAgICAgICAgICAgICAgIDIwOSBhbmQgMjEwLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTExMTUwMDAwWiIgIC0tIE5vdiAxNSwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAyMDcgYW5kIDIwOC4iCisgICAgICAgICAgICAgICAgICAgICAyMDcgYW5kIDIwOC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDExMTA2MDAwMFoiICAtLSBOb3YgNiwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDIwNi4iCisgICAgICAgICAgICAgICAgICAgICAyMDYuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAxMTEwMjAwMDBaIiAgLS0gTm92IDIsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAyMDUuIgorICAgICAgICAgICAgICAgICAgICAgMjA1LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTEwMTYwMDAwWiIgIC0tIE9jdCAxNiwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgYW5kIDIwNC4iCisgICAgICAgICAgICAgICAgICAgICAxOTksIDIwMCwgMjAxLCAyMDIsIDIwMywgYW5kIDIwNC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDEwOTE5MDAwMFoiICAtLSBTZXB0IDE5LCAyMDAxCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGUKLSAgICAgICAgICAgICAgICAgICAgMTk4LiIKKyAgICAgICAgICAgICAgICAgICAgIDE5OC4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDEwNTExMDAwMFoiICAtLSBNYXkgMTEsIDIwMDEKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZQotICAgICAgICAgICAgICAgICAgICAxOTcuIgorICAgICAgICAgICAgICAgICAgICAgMTk3LiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMTAxMTIwMDAwWiIgIC0tIEphbiAxMiwgMjAwMQogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlcwotICAgICAgICAgICAgICAgICAgICAxOTUgYW5kIDE5Ni4iCisgICAgICAgICAgICAgICAgICAgICAxOTUgYW5kIDE5Ni4iCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDAxMjE5MDAwMFoiICAtLSBEZWMgMTksIDIwMDAKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZXMKLSAgICAgICAgICAgICAgICAgICAgMTkzIGFuZCAxOTQuIgorICAgICAgICAgICAgICAgICAgICAgMTkzIGFuZCAxOTQuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAwMTIwNzAwMDBaIiAgLS0gRGVjIDA3LCAyMDAwCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDE5MSBhbmQgMTkyLiIKKyAgICAgICAgICAgICAgICAgICAgIDE5MSBhbmQgMTkyLiIKIAogICAgICAgIFJFVklTSU9OICAgICAiMjAwMDEyMDQwMDAwWiIgIC0tIERlYyAwNCwgMjAwMAogICAgICAgIERFU0NSSVBUSU9OICAiUmVnaXN0cmF0aW9uIG9mIG5ldyBJQU5BaWZUeXBlCi0gICAgICAgICAgICAgICAgICAgIDE5MC4iCisgICAgICAgICAgICAgICAgICAgICAxOTAuIgogCiAgICAgICAgUkVWSVNJT04gICAgICIyMDAwMTAxNzAwMDBaIiAgLS0gT2N0IDE3LCAyMDAwCiAgICAgICAgREVTQ1JJUFRJT04gICJSZWdpc3RyYXRpb24gb2YgbmV3IElBTkFpZlR5cGVzCi0gICAgICAgICAgICAgICAgICAgIDE4OCBhbmQgMTg5LiIgIAorICAgICAgICAgICAgICAgICAgICAgMTg4IGFuZCAxODkuIiAgCiAKICAgICAgICBSRVZJU0lPTiAgICAgIjIwMDAxMDAyMDAwMFoiICAtLSBPY3QgMDIsIDIwMDAKICAgICAgICBERVNDUklQVElPTiAgIlJlZ2lzdHJhdGlvbiBvZiBuZXcgSUFOQWlmVHlwZSAxODcuIiAKQEAgLTE5MSw3ICsyOTIsNyBAQAogICAgICAgICAgICAgICAgSUFOQS4pCiAKICAgICAgICAgICAgICAgIFJlcXVlc3RzIGZvciBuZXcgdmFsdWVzIHNob3VsZCBiZSBtYWRlIHRvIElBTkEgdmlhCi0gICAgICAgICAgICAgICBlbWFpbCAoaWFuYUBpYW5hLm9yZykuCisgICAgICAgICAgICAgICBlbWFpbCAoaWFuYSZpYW5hLm9yZykuCiAKICAgICAgICAgICAgICAgIFRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgYXNzaWdubWVudCBvZiBpZlR5cGUKICAgICAgICAgICAgICAgIHZhbHVlcyBhbmQgb2YgT0lEcyB0byBwYXJ0aWN1bGFyIG1lZGlhLXNwZWNpZmljIE1JQnMKQEAgLTIxMSwxMSArMzEyLDEzIEBACiAgICAgICAgICAgICAgICAgICAgcmZjODc3eDI1KDUpLAogICAgICAgICAgICAgICAgICAgIGV0aGVybmV0Q3NtYWNkKDYpLCAtLSBmb3IgYWxsIGV0aGVybmV0LWxpa2UgaW50ZXJmYWNlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gcmVnYXJkbGVzcyBvZiBzcGVlZCwgYXMgcGVyIFJGQzM2MzUKLSAgICAgICAgICAgICAgICAgICBpc284ODAyM0NzbWFjZCg3KSwgLS0gRGVwcmVjYXRlZCB2aWEgUkZDLWRyYWZ0LWlldGYtaHVibWliLWV0aGVyaWYtbWliLXYzICBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAorICAgICAgICAgICAgICAgICAgIGlzbzg4MDIzQ3NtYWNkKDcpLCAtLSBEZXByZWNhdGVkIHZpYSBSRkMzNjM1CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCiAgICAgICAgICAgICAgICAgICAgaXNvODgwMjRUb2tlbkJ1cyg4KSwKICAgICAgICAgICAgICAgICAgICBpc284ODAyNVRva2VuUmluZyg5KSwKICAgICAgICAgICAgICAgICAgICBpc284ODAyNk1hbigxMCksCi0gICAgICAgICAgICAgICAgICAgc3RhckxhbigxMSksIC0tIERlcHJlY2F0ZWQgdmlhIFJGQy1kcmFmdC1pZXRmLWh1Ym1pYi1ldGhlcmlmLW1pYi12MyAgZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICBzdGFyTGFuKDExKSwgLS0gRGVwcmVjYXRlZCB2aWEgUkZDMzYzNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAogICAgICAgICAgICAgICAgICAgIHByb3Rlb24xME1iaXQoMTIpLAogICAgICAgICAgICAgICAgICAgIHByb3Rlb244ME1iaXQoMTMpLAogICAgICAgICAgICAgICAgICAgIGh5cGVyY2hhbm5lbCgxNCksCkBAIC0yMjQsOCArMzI3LDEwIEBACiAgICAgICAgICAgICAgICAgICAgc2RsYygxNyksCiAgICAgICAgICAgICAgICAgICAgZHMxKDE4KSwgICAgICAgICAgICAtLSBEUzEtTUlCCiAgICAgICAgICAgICAgICAgICAgZTEoMTkpLCAgICAgICAgICAgICAtLSBPYnNvbGV0ZSBzZWUgRFMxLU1JQgotICAgICAgICAgICAgICAgICAgIGJhc2ljSVNETigyMCksCi0gICAgICAgICAgICAgICAgICAgcHJpbWFyeUlTRE4oMjEpLAorICAgICAgICAgICAgICAgICAgIGJhc2ljSVNETigyMCksICAgICAgICAgICAgICAtLSBubyBsb25nZXIgdXNlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBzZWUgYWxzbyBSRkMyMTI3CisgICAgICAgICAgICAgICAgICAgcHJpbWFyeUlTRE4oMjEpLCAgICAgICAgICAgIC0tIG5vIGxvbmdlciB1c2VkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIHNlZSBhbHNvIFJGQzIxMjcKICAgICAgICAgICAgICAgICAgICBwcm9wUG9pbnRUb1BvaW50U2VyaWFsKDIyKSwgLS0gcHJvcHJpZXRhcnkgc2VyaWFsCiAgICAgICAgICAgICAgICAgICAgcHBwKDIzKSwKICAgICAgICAgICAgICAgICAgICBzb2Z0d2FyZUxvb3BiYWNrKDI0KSwKQEAgLTI2MiwyMyArMzY3LDI1IEBACiAgICAgICAgICAgICAgICAgICAgaWVlZTgwMjEyKDU1KSwgICAgICAtLSAxMDBCYXNlVkcKICAgICAgICAgICAgICAgICAgICBmaWJyZUNoYW5uZWwoNTYpLCAgIC0tIEZpYnJlIENoYW5uZWwKICAgICAgICAgICAgICAgICAgICBoaXBwaUludGVyZmFjZSg1NyksIC0tIEhJUFBJIGludGVyZmFjZXMgICAgIAotICAgICAgICAgICAgICAgICAgIGZyYW1lUmVsYXlJbnRlcmNvbm5lY3QoNTgpLCAtLSBPYnNvbGV0ZSB1c2UgZWl0aGVyCisgICAgICAgICAgICAgICAgICAgZnJhbWVSZWxheUludGVyY29ubmVjdCg1OCksIC0tIE9ic29sZXRlLCB1c2UgZWl0aGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBmcmFtZVJlbGF5KDMyKSBvciAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGZyYW1lUmVsYXlTZXJ2aWNlKDQ0KS4KICAgICAgICAgICAgICAgICAgICBhZmxhbmU4MDIzKDU5KSwgICAgIC0tIEFUTSBFbXVsYXRlZCBMQU4gZm9yIDgwMi4zCiAgICAgICAgICAgICAgICAgICAgYWZsYW5lODAyNSg2MCksICAgICAtLSBBVE0gRW11bGF0ZWQgTEFOIGZvciA4MDIuNQogICAgICAgICAgICAgICAgICAgIGNjdEVtdWwoNjEpLCAgICAgICAgLS0gQVRNIEVtdWxhdGVkIGNpcmN1aXQgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgZmFzdEV0aGVyKDYyKSwgICAgICAtLSBPYnNvbGV0ZWQgdmlhIFJGQy1kcmFmdC1pZXRmLWh1Ym1pYi1ldGhlcmlmLW1pYi12MyAgZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICBmYXN0RXRoZXIoNjIpLCAgICAgIC0tIE9ic29sZXRlZCB2aWEgUkZDMzYzNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICBpc2RuKDYzKSwgICAgICAgICAgIC0tIElTRE4gYW5kIFguMjUgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHYxMSg2NCksICAgICAgICAgICAgLS0gQ0NJVFQgVi4xMS9YLjIxICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIHYzNig2NSksICAgICAgICAgICAgLS0gQ0NJVFQgVi4zNiAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgIGc3MDNhdDY0ayg2NiksICAgICAgLS0gQ0NJVFQgRzcwMyBhdCA2NEticHMKICAgICAgICAgICAgICAgICAgICBnNzAzYXQybWIoNjcpLCAgICAgIC0tIE9ic29sZXRlIHNlZSBEUzEtTUlCCiAgICAgICAgICAgICAgICAgICAgcWxsYyg2OCksICAgICAgICAgICAtLSBTTkEgUUxMQyAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgZmFzdEV0aGVyRlgoNjkpLCAgICAtLSBPYnNvbGV0ZWQgdmlhIFJGQy1kcmFmdC1pZXRmLWh1Ym1pYi1ldGhlcmlmLW1pYi12MyAgZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKKyAgICAgICAgICAgICAgICAgICBmYXN0RXRoZXJGWCg2OSksICAgIC0tIE9ic29sZXRlZCB2aWEgUkZDMzYzNQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZXRoZXJuZXRDc21hY2QgKDYpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQKICAgICAgICAgICAgICAgICAgICBjaGFubmVsKDcwKSwgICAgICAgIC0tIGNoYW5uZWwgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICBpZWVlODAyMTEoNzEpLCAgICAgIC0tIHJhZGlvIHNwcmVhZCBzcGVjdHJ1bSAgICAgICAKLQkgICAgICAgICAgIGlibTM3MHBhckNoYW4oNzIpLCAgLS0gSUJNIFN5c3RlbSAzNjAvMzcwIE9FTUkgQ2hhbm5lbAorICAgICAgICAgICAgICAgICAgIGlibTM3MHBhckNoYW4oNzIpLCAgLS0gSUJNIFN5c3RlbSAzNjAvMzcwIE9FTUkgQ2hhbm5lbAogICAgICAgICAgICAgICAgICAgIGVzY29uKDczKSwgICAgICAgICAgLS0gSUJNIEVudGVycHJpc2UgU3lzdGVtcyBDb25uZWN0aW9uCiAgICAgICAgICAgICAgICAgICAgZGxzdyg3NCksICAgICAgICAgICAtLSBEYXRhIExpbmsgU3dpdGNoaW5nCiAgICAgICAgICAgICAgICAgICAgaXNkbnMoNzUpLCAgICAgICAgICAtLSBJU0ROIFMvVCBpbnRlcmZhY2UKQEAgLTMxMyw2MSArNDIwLDYyIEBACiAgICAgICAgICAgICAgICAgICAgdm9pY2VPdmVySXAoMTA0KSwgICAtLSB2b2ljZSBvdmVyIElQIGVuY2Fwc3VsYXRpb24KICAgICAgICAgICAgICAgICAgICBhdG1EeGkoMTA1KSwgICAgICAgIC0tIEFUTSBEWEkKICAgICAgICAgICAgICAgICAgICBhdG1GdW5pKDEwNiksICAgICAgIC0tIEFUTSBGVU5JCi0JCSAgIGF0bUltYSAoMTA3KSwgICAgICAgLS0gQVRNIElNQQkJICAgCisgICAgICAgICAgICAgICAgICAgYXRtSW1hICgxMDcpLCAgICAgICAtLSBBVE0gSU1BCQkgICAKICAgICAgICAgICAgICAgICAgICBwcHBNdWx0aWxpbmtCdW5kbGUoMTA4KSwgLS0gUFBQIE11bHRpbGluayBCdW5kbGUKICAgICAgICAgICAgICAgICAgICBpcE92ZXJDZGxjICgxMDkpLCAgIC0tIElCTSBpcE92ZXJDZGxjCi0JCSAgIGlwT3ZlckNsYXcgKDExMCksICAgLS0gSUJNIENvbW1vbiBMaW5rIEFjY2VzcyB0byBXb3Jrc3RuCisgICAgICAgICAgICAgICAgICAgaXBPdmVyQ2xhdyAoMTEwKSwgICAtLSBJQk0gQ29tbW9uIExpbmsgQWNjZXNzIHRvIFdvcmtzdG4KICAgICAgICAgICAgICAgICAgICBzdGFja1RvU3RhY2sgKDExMSksIC0tIElCTSBzdGFja1RvU3RhY2sKICAgICAgICAgICAgICAgICAgICB2aXJ0dWFsSXBBZGRyZXNzICgxMTIpLCAtLSBJQk0gVklQQQotCQkgICBtcGMgKDExMyksICAgICAgICAgIC0tIElCTSBtdWx0aS1wcm90b2NvbCBjaGFubmVsIHN1cHBvcnQKLQkJICAgaXBPdmVyQXRtICgxMTQpLCAgICAtLSBJQk0gaXBPdmVyQXRtCi0JCSAgIGlzbzg4MDI1RmliZXIgKDExNSksIC0tIElTTyA4MDIuNWogRmliZXIgVG9rZW4gUmluZwotCQkgICB0ZGxjICgxMTYpLAkgICAgICAgLS0gSUJNIHR3aW5heGlhbCBkYXRhIGxpbmsgY29udHJvbAotCQkgICBnaWdhYml0RXRoZXJuZXQgKDExNyksIC0tIE9ic29sZXRlZCB2aWEgUkZDLWRyYWZ0LWlldGYtaHVibWliLWV0aGVyaWYtbWliLXYzICBldGhlcm5ldENzbWFjZCAoNikgc2hvdWxkIGJlIHVzZWQgaW5zdGVhZAotCQkgICBoZGxjICgxMTgpLCAgICAgICAgIC0tIEhETEMKLQkJICAgbGFwZiAoMTE5KSwJICAgICAgIC0tIExBUCBGCi0JCSAgIHYzNyAoMTIwKSwJICAgICAgIC0tIFYuMzcKLQkJICAgeDI1bWxwICgxMjEpLCAgICAgICAtLSBNdWx0aS1MaW5rIFByb3RvY29sCi0JCSAgIHgyNWh1bnRHcm91cCAoMTIyKSwgLS0gWDI1IEh1bnQgR3JvdXAKLQkJICAgdHJhc25wSGRsYyAoMTIzKSwgICAtLSBUcmFuc3AgSERMQwotCQkgICBpbnRlcmxlYXZlICgxMjQpLCAgIC0tIEludGVybGVhdmUgY2hhbm5lbAotCQkgICBmYXN0ICgxMjUpLCAgICAgICAgIC0tIEZhc3QgY2hhbm5lbAotCQkgICBpcCAoMTI2KSwJICAgICAgIC0tIElQIChmb3IgQVBQTiBIUFIgaW4gSVAgbmV0d29ya3MpCi0JCSAgIGRvY3NDYWJsZU1hY2xheWVyICgxMjcpLCAgLS0gQ0FUViBNYWMgTGF5ZXIKLQkJICAgZG9jc0NhYmxlRG93bnN0cmVhbSAoMTI4KSwgLS0gQ0FUViBEb3duc3RyZWFtIGludGVyZmFjZQotCQkgICBkb2NzQ2FibGVVcHN0cmVhbSAoMTI5KSwgIC0tIENBVFYgVXBzdHJlYW0gaW50ZXJmYWNlCi0JCSAgIGExMk1wcFN3aXRjaCAoMTMwKSwgLS0gQXZhbG9uIFBhcmFsbGVsIFByb2Nlc3NvcgotCQkgICB0dW5uZWwgKDEzMSksICAgICAgIC0tIEVuY2Fwc3VsYXRpb24gaW50ZXJmYWNlCi0JCSAgIGNvZmZlZSAoMTMyKSwgICAgICAgLS0gY29mZmVlIHBvdAotCQkgICBjZXMgKDEzMyksICAgICAgICAgIC0tIENpcmN1aXQgRW11bGF0aW9uIFNlcnZpY2UKLQkJICAgYXRtU3ViSW50ZXJmYWNlICgxMzQpLCAtLSBBVE0gU3ViIEludGVyZmFjZQotCQkgICBsMnZsYW4gKDEzNSksICAgICAgIC0tIExheWVyIDIgVmlydHVhbCBMQU4gdXNpbmcgODAyLjFRCi0JCSAgIGwzaXB2bGFuICgxMzYpLCAgICAgLS0gTGF5ZXIgMyBWaXJ0dWFsIExBTiB1c2luZyBJUAotCQkgICBsM2lweHZsYW4gKDEzNyksICAgIC0tIExheWVyIDMgVmlydHVhbCBMQU4gdXNpbmcgSVBYCi0JCSAgIGRpZ2l0YWxQb3dlcmxpbmUgKDEzOCksIC0tIElQIG92ZXIgUG93ZXIgTGluZXMJCi0JCSAgIG1lZGlhTWFpbE92ZXJJcCAoMTM5KSwgLS0gTXVsdGltZWRpYSBNYWlsIG92ZXIgSVAKLQkJICAgZHRtICgxNDApLCAgICAgICAgLS0gRHluYW1pYyBzeW5jcm9ub3VzIFRyYW5zZmVyIE1vZGUKLQkJICAgZGNuICgxNDEpLCAgICAtLSBEYXRhIENvbW11bmljYXRpb25zIE5ldHdvcmsKLQkJICAgaXBGb3J3YXJkICgxNDIpLCAgICAtLSBJUCBGb3J3YXJkaW5nIEludGVyZmFjZQotCQkgICBtc2RzbCAoMTQzKSwgICAgICAgLS0gTXVsdGktcmF0ZSBTeW1tZXRyaWMgRFNMCi0JCSAgIGllZWUxMzk0ICgxNDQpLCAtLSBJRUVFMTM5NCBIaWdoIFBlcmZvcm1hbmNlIFNlcmlhbCBCdXMKLQkJICAgaWYtZ3NuICgxNDUpLCAgICAgICAtLSAgIEhJUFBJLTY0MDAgCi0JCSAgIGR2YlJjY01hY0xheWVyICgxNDYpLCAtLSBEVkItUkNDIE1BQyBMYXllcgotCQkgICBkdmJSY2NEb3duc3RyZWFtICgxNDcpLCAgLS0gRFZCLVJDQyBEb3duc3RyZWFtIENoYW5uZWwKLQkJICAgZHZiUmNjVXBzdHJlYW0gKDE0OCksICAtLSBEVkItUkNDIFVwc3RyZWFtIENoYW5uZWwKLQkJICAgYXRtVmlydHVhbCAoMTQ5KSwgICAtLSBBVE0gVmlydHVhbCBJbnRlcmZhY2UKLQkJICAgbXBsc1R1bm5lbCAoMTUwKSwgICAtLSBNUExTIFR1bm5lbCBWaXJ0dWFsIEludGVyZmFjZQotCQkgICBzcnAgKDE1MSksCS0tIFNwYXRpYWwgUmV1c2UgUHJvdG9jb2wJCi0JCSAgIHZvaWNlT3ZlckF0bSAoMTUyKSwgIC0tIFZvaWNlIE92ZXIgQVRNCi0JCSAgIHZvaWNlT3ZlckZyYW1lUmVsYXkgKDE1MyksICAgLS0gVm9pY2UgT3ZlciBGcmFtZSBSZWxheSAKLQkJICAgaWRzbCAoMTU0KSwJCS0tIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIG92ZXIgSVNETgotCQkgICBjb21wb3NpdGVMaW5rICgxNTUpLCAgLS0gQXZpY2kgQ29tcG9zaXRlIExpbmsgSW50ZXJmYWNlCi0JCSAgIHNzN1NpZ0xpbmsgKDE1NiksICAgICAtLSBTUzcgU2lnbmFsaW5nIExpbmsgCi0JCSAgIHByb3BXaXJlbGVzc1AyUCAoMTU3KSwgIC0tICBQcm9wLiBQMlAgd2lyZWxlc3MgaW50ZXJmYWNlCi0JCSAgIGZyRm9yd2FyZCAoMTU4KSwgICAgLS0gRnJhbWUgRm9yd2FyZCBJbnRlcmZhY2UKLQkJICAgcmZjMTQ4MyAoMTU5KSwJLS0gTXVsdGlwcm90b2NvbCBvdmVyIEFUTSBBQUw1Ci0JCSAgIHVzYiAoMTYwKSwJCS0tIFVTQiBJbnRlcmZhY2UKLQkJICAgaWVlZTgwMjNhZExhZyAoMTYxKSwgIC0tIElFRUUgODAyLjNhZCBMaW5rIEFnZ3JlZ2F0ZQorICAgICAgICAgICAgICAgICAgIG1wYyAoMTEzKSwgICAgICAgICAgLS0gSUJNIG11bHRpLXByb3RvY29sIGNoYW5uZWwgc3VwcG9ydAorICAgICAgICAgICAgICAgICAgIGlwT3ZlckF0bSAoMTE0KSwgICAgLS0gSUJNIGlwT3ZlckF0bQorICAgICAgICAgICAgICAgICAgIGlzbzg4MDI1RmliZXIgKDExNSksIC0tIElTTyA4MDIuNWogRmliZXIgVG9rZW4gUmluZworICAgICAgICAgICAgICAgICAgIHRkbGMgKDExNiksCSAgICAgICAtLSBJQk0gdHdpbmF4aWFsIGRhdGEgbGluayBjb250cm9sCisgICAgICAgICAgICAgICAgICAgZ2lnYWJpdEV0aGVybmV0ICgxMTcpLCAtLSBPYnNvbGV0ZWQgdmlhIFJGQzM2MzUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGV0aGVybmV0Q3NtYWNkICg2KSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkCisgICAgICAgICAgICAgICAgICAgaGRsYyAoMTE4KSwgICAgICAgICAtLSBIRExDCisgICAgICAgICAgICAgICAgICAgbGFwZiAoMTE5KSwJICAgICAgIC0tIExBUCBGCisgICAgICAgICAgICAgICAgICAgdjM3ICgxMjApLAkgICAgICAgLS0gVi4zNworICAgICAgICAgICAgICAgICAgIHgyNW1scCAoMTIxKSwgICAgICAgLS0gTXVsdGktTGluayBQcm90b2NvbAorICAgICAgICAgICAgICAgICAgIHgyNWh1bnRHcm91cCAoMTIyKSwgLS0gWDI1IEh1bnQgR3JvdXAKKyAgICAgICAgICAgICAgICAgICB0cmFuc3BIZGxjICgxMjMpLCAgIC0tIFRyYW5zcCBIRExDCisgICAgICAgICAgICAgICAgICAgaW50ZXJsZWF2ZSAoMTI0KSwgICAtLSBJbnRlcmxlYXZlIGNoYW5uZWwKKyAgICAgICAgICAgICAgICAgICBmYXN0ICgxMjUpLCAgICAgICAgIC0tIEZhc3QgY2hhbm5lbAorICAgICAgICAgICAgICAgICAgIGlwICgxMjYpLAkgICAgICAgLS0gSVAgKGZvciBBUFBOIEhQUiBpbiBJUCBuZXR3b3JrcykKKyAgICAgICAgICAgICAgICAgICBkb2NzQ2FibGVNYWNsYXllciAoMTI3KSwgIC0tIENBVFYgTWFjIExheWVyCisgICAgICAgICAgICAgICAgICAgZG9jc0NhYmxlRG93bnN0cmVhbSAoMTI4KSwgLS0gQ0FUViBEb3duc3RyZWFtIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGRvY3NDYWJsZVVwc3RyZWFtICgxMjkpLCAgLS0gQ0FUViBVcHN0cmVhbSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBhMTJNcHBTd2l0Y2ggKDEzMCksIC0tIEF2YWxvbiBQYXJhbGxlbCBQcm9jZXNzb3IKKyAgICAgICAgICAgICAgICAgICB0dW5uZWwgKDEzMSksICAgICAgIC0tIEVuY2Fwc3VsYXRpb24gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgY29mZmVlICgxMzIpLCAgICAgICAtLSBjb2ZmZWUgcG90CisgICAgICAgICAgICAgICAgICAgY2VzICgxMzMpLCAgICAgICAgICAtLSBDaXJjdWl0IEVtdWxhdGlvbiBTZXJ2aWNlCisgICAgICAgICAgICAgICAgICAgYXRtU3ViSW50ZXJmYWNlICgxMzQpLCAtLSBBVE0gU3ViIEludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGwydmxhbiAoMTM1KSwgICAgICAgLS0gTGF5ZXIgMiBWaXJ0dWFsIExBTiB1c2luZyA4MDIuMVEKKyAgICAgICAgICAgICAgICAgICBsM2lwdmxhbiAoMTM2KSwgICAgIC0tIExheWVyIDMgVmlydHVhbCBMQU4gdXNpbmcgSVAKKyAgICAgICAgICAgICAgICAgICBsM2lweHZsYW4gKDEzNyksICAgIC0tIExheWVyIDMgVmlydHVhbCBMQU4gdXNpbmcgSVBYCisgICAgICAgICAgICAgICAgICAgZGlnaXRhbFBvd2VybGluZSAoMTM4KSwgLS0gSVAgb3ZlciBQb3dlciBMaW5lcwkKKyAgICAgICAgICAgICAgICAgICBtZWRpYU1haWxPdmVySXAgKDEzOSksIC0tIE11bHRpbWVkaWEgTWFpbCBvdmVyIElQCisgICAgICAgICAgICAgICAgICAgZHRtICgxNDApLCAgICAgICAgLS0gRHluYW1pYyBzeW5jcm9ub3VzIFRyYW5zZmVyIE1vZGUKKyAgICAgICAgICAgICAgICAgICBkY24gKDE0MSksICAgIC0tIERhdGEgQ29tbXVuaWNhdGlvbnMgTmV0d29yaworICAgICAgICAgICAgICAgICAgIGlwRm9yd2FyZCAoMTQyKSwgICAgLS0gSVAgRm9yd2FyZGluZyBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBtc2RzbCAoMTQzKSwgICAgICAgLS0gTXVsdGktcmF0ZSBTeW1tZXRyaWMgRFNMCisgICAgICAgICAgICAgICAgICAgaWVlZTEzOTQgKDE0NCksIC0tIElFRUUxMzk0IEhpZ2ggUGVyZm9ybWFuY2UgU2VyaWFsIEJ1cworICAgICAgICAgICAgICAgICAgIGlmLWdzbiAoMTQ1KSwgICAgICAgLS0gICBISVBQSS02NDAwIAorICAgICAgICAgICAgICAgICAgIGR2YlJjY01hY0xheWVyICgxNDYpLCAtLSBEVkItUkNDIE1BQyBMYXllcgorICAgICAgICAgICAgICAgICAgIGR2YlJjY0Rvd25zdHJlYW0gKDE0NyksICAtLSBEVkItUkNDIERvd25zdHJlYW0gQ2hhbm5lbAorICAgICAgICAgICAgICAgICAgIGR2YlJjY1Vwc3RyZWFtICgxNDgpLCAgLS0gRFZCLVJDQyBVcHN0cmVhbSBDaGFubmVsCisgICAgICAgICAgICAgICAgICAgYXRtVmlydHVhbCAoMTQ5KSwgICAtLSBBVE0gVmlydHVhbCBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBtcGxzVHVubmVsICgxNTApLCAgIC0tIE1QTFMgVHVubmVsIFZpcnR1YWwgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgc3JwICgxNTEpLAktLSBTcGF0aWFsIFJldXNlIFByb3RvY29sCQorICAgICAgICAgICAgICAgICAgIHZvaWNlT3ZlckF0bSAoMTUyKSwgIC0tIFZvaWNlIE92ZXIgQVRNCisgICAgICAgICAgICAgICAgICAgdm9pY2VPdmVyRnJhbWVSZWxheSAoMTUzKSwgICAtLSBWb2ljZSBPdmVyIEZyYW1lIFJlbGF5IAorICAgICAgICAgICAgICAgICAgIGlkc2wgKDE1NCksCQktLSBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCBvdmVyIElTRE4KKyAgICAgICAgICAgICAgICAgICBjb21wb3NpdGVMaW5rICgxNTUpLCAgLS0gQXZpY2kgQ29tcG9zaXRlIExpbmsgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgc3M3U2lnTGluayAoMTU2KSwgICAgIC0tIFNTNyBTaWduYWxpbmcgTGluayAKKyAgICAgICAgICAgICAgICAgICBwcm9wV2lyZWxlc3NQMlAgKDE1NyksICAtLSAgUHJvcC4gUDJQIHdpcmVsZXNzIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGZyRm9yd2FyZCAoMTU4KSwgICAgLS0gRnJhbWUgRm9yd2FyZCBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICByZmMxNDgzICgxNTkpLAktLSBNdWx0aXByb3RvY29sIG92ZXIgQVRNIEFBTDUKKyAgICAgICAgICAgICAgICAgICB1c2IgKDE2MCksCQktLSBVU0IgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgaWVlZTgwMjNhZExhZyAoMTYxKSwgIC0tIElFRUUgODAyLjNhZCBMaW5rIEFnZ3JlZ2F0ZQogICAgICAgICAgICAgICAgICAgIGJncHBvbGljeWFjY291bnRpbmcgKDE2MiksIC0tIEJHUCBQb2xpY3kgQWNjb3VudGluZwogICAgICAgICAgICAgICAgICAgIGZyZjE2TWZyQnVuZGxlICgxNjMpLCAtLSBGUkYgLjE2IE11bHRpbGluayBGcmFtZSBSZWxheSAKICAgICAgICAgICAgICAgICAgICBoMzIzR2F0ZWtlZXBlciAoMTY0KSwgLS0gSDMyMyBHYXRla2VlcGVyCkBAIC0zOTEsNiArNDk5LDkgQEAKICAgICAgICAgICAgICAgICAgICBwcm9wRG9jc1dpcmVsZXNzVXBzdHJlYW0gKDE4MiksIC0tIENpc2NvIHByb3ByaWV0YXJ5IFVwc3RyZWFtCiAgICAgICAgICAgICAgICAgICAgaGlwZXJsYW4yICgxODMpLCAtLSBISVBFUkxBTiBUeXBlIDIgUmFkaW8gSW50ZXJmYWNlCiAgICAgICAgICAgICAgICAgICAgcHJvcEJXQXAyTXAgKDE4NCksIC0tIFByb3BCcm9hZGJhbmRXaXJlbGVzc0FjY2Vzc3B0Mm11bHRpcHQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gdXNlIG9mIHRoaXMgaWZ0eXBlIGZvciBJRUVFIDgwMi4xNiBXTUFOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGludGVyZmFjZXMgYXMgcGVyIElFRUUgU3RkIDgwMi4xNmYgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gZGVwcmVjYXRlZCBhbmQgaWZUeXBlIDIzNyBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgogICAgICAgICAgICAgICAgICAgIHNvbmV0T3ZlcmhlYWRDaGFubmVsICgxODUpLCAtLSBTT05FVCBPdmVyaGVhZCBDaGFubmVsCiAgICAgICAgICAgICAgICAgICAgZGlnaXRhbFdyYXBwZXJPdmVyaGVhZENoYW5uZWwgKDE4NiksIC0tIERpZ2l0YWwgV3JhcHBlcgogICAgICAgICAgICAgICAgICAgIGFhbDIgKDE4NyksIC0tIEFUTSBhZGFwdGF0aW9uIGxheWVyIDIKQEAgLTQxNiw3ICs1MjcsNyBAQAogICAgICAgICAgICAgICAgICAgIHBvbjE1NSAoMjA3KSwgLS0gRlNBTiAxNTVNYiBTeW1ldHJpY2FsIFBPTiBpbnRlcmZhY2UKICAgICAgICAgICAgICAgICAgICBwb242MjIgKDIwOCksIC0tIEZTQU42MjJNYiBTeW1ldHJpY2FsIFBPTiBpbnRlcmZhY2UKICAgICAgICAgICAgICAgICAgICBicmlkZ2UgKDIwOSksIC0tIFRyYW5zcGFyZW50IGJyaWRnZSBpbnRlcmZhY2UKLSAgICAgICAgICAgICAgICAgICBsaW5lZ3JvdXAgKDIxMCksIC0tIEludGVyZmFjZSBjb21tb24gdG8gbXVsdGlwbGUgbGluZXMJCSAgIAorICAgICAgICAgICAgICAgICAgIGxpbmVncm91cCAoMjEwKSwgLS0gSW50ZXJmYWNlIGNvbW1vbiB0byBtdWx0aXBsZSBsaW5lcyAgIAogICAgICAgICAgICAgICAgICAgIHZvaWNlRU1GR0QgKDIxMSksIC0tIHZvaWNlIEUmTSBGZWF0dXJlIEdyb3VwIEQKICAgICAgICAgICAgICAgICAgICB2b2ljZUZHREVBTkEgKDIxMiksIC0tIHZvaWNlIEZHRCBFeGNoYW5nZSBBY2Nlc3MgTm9ydGggQW1lcmljYW4KICAgICAgICAgICAgICAgICAgICB2b2ljZURJRCAoMjEzKSwgLS0gdm9pY2UgRGlyZWN0IElud2FyZCBEaWFsaW5nCkBAIC00MjYsNyArNTM3LDcgQEAKICAgICAgICAgICAgICAgICAgICBwZG5FdGhlckxvb3AxICgyMTcpLCAtLSBQYXJhZHluZSBFdGhlckxvb3AgMQogICAgICAgICAgICAgICAgICAgIHBkbkV0aGVyTG9vcDIgKDIxOCksIC0tIFBhcmFkeW5lIEV0aGVyTG9vcCAyCiAgICAgICAgICAgICAgICAgICAgb3B0aWNhbENoYW5uZWxHcm91cCAoMjE5KSwgLS0gT3B0aWNhbCBDaGFubmVsIEdyb3VwCi0gICAgICAgICAgICAgICAgICAgaG9tZXBuYSAoMjIwKSwgLS0gSG9tZVBOQSBJVFUtVCBHLjk4OQkJCQkgICAKKyAgICAgICAgICAgICAgICAgICBob21lcG5hICgyMjApLCAtLSBIb21lUE5BIElUVS1UIEcuOTg5CiAgICAgICAgICAgICAgICAgICAgZ2ZwICgyMjEpLCAtLSBHZW5lcmljIEZyYW1pbmcgUHJvY2VkdXJlIChHRlApCiAgICAgICAgICAgICAgICAgICAgY2lzY29JU0x2bGFuICgyMjIpLCAtLSBMYXllciAyIFZpcnR1YWwgTEFOIHVzaW5nIENpc2NvIElTTAogICAgICAgICAgICAgICAgICAgIGFjdGVsaXNNZXRhTE9PUCAoMjIzKSwgLS0gQWN0ZWxlaXMgcHJvcHJpZXRhcnkgTWV0YUxPT1AgSGlnaCBTcGVlZCBMaW5rIApAQCAtNDM0LDEwICs1NDUsNTcgQEAKICAgICAgICAgICAgICAgICAgICBycHIgKDIyNSksIC0tIFJlc2lsaWVudCBQYWNrZXQgUmluZyBJbnRlcmZhY2UgVHlwZQogICAgICAgICAgICAgICAgICAgIHFhbSAoMjI2KSwgLS0gUkYgUWFtIEludGVyZmFjZQogICAgICAgICAgICAgICAgICAgIGxtcCAoMjI3KSwgLS0gTGluayBNYW5hZ2VtZW50IFByb3RvY29sCi0gICAgICAgICAgICAgICAgICAgY2JsVmVjdGFTdGFyICgyMjgpLCAtLSBDYW1icmlkZ2UgQnJvYWRiYW5kIExpbWl0ZWQgVmVjdGFTdGFyCisgICAgICAgICAgICAgICAgICAgY2JsVmVjdGFTdGFyICgyMjgpLCAtLSBDYW1icmlkZ2UgQnJvYWRiYW5kIE5ldHdvcmtzIExpbWl0ZWQgVmVjdGFTdGFyCiAgICAgICAgICAgICAgICAgICAgZG9jc0NhYmxlTUNtdHNEb3duc3RyZWFtICgyMjkpLCAtLSBDQVRWIE1vZHVsYXIgQ01UUyBEb3duc3RyZWFtIEludGVyZmFjZQotICAgICAgICAgICAgICAgICAgIGFkc2wyICgyMzApIC0tIEFzeW1tZXRyaWMgRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AgVmVyc2lvbiAyCi0gICAgCQkJICAgfQorICAgICAgICAgICAgICAgICAgIGFkc2wyICgyMzApLCAtLSBBc3ltbWV0cmljIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIFZlcnNpb24gMiAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gKERFUFJFQ0FURUQvT0JTT0xFVEVEIC0gcGxlYXNlIHVzZSBhZHNsMnBsdXMgMjM4IGluc3RlYWQpCisgICAgICAgICAgICAgICAgICAgbWFjU2VjQ29udHJvbGxlZElGICgyMzEpLCAtLSBNQUNTZWNDb250cm9sbGVkIAorICAgICAgICAgICAgICAgICAgIG1hY1NlY1VuY29udHJvbGxlZElGICgyMzIpLCAtLSBNQUNTZWNVbmNvbnRyb2xsZWQKKyAgICAgICAgICAgICAgICAgICBhdmljaU9wdGljYWxFdGhlciAoMjMzKSwgLS0gQXZpY2kgT3B0aWNhbCBFdGhlcm5ldCBBZ2dyZWdhdGUKKyAgICAgICAgICAgICAgICAgICBhdG1ib25kICgyMzQpLCAtLSBhdG1ib25kCisgICAgICAgICAgICAgICAgICAgdm9pY2VGR0RPUyAoMjM1KSwgLS0gdm9pY2UgRkdEIE9wZXJhdG9yIFNlcnZpY2VzCisgICAgICAgICAgICAgICAgICAgbW9jYVZlcnNpb24xICgyMzYpLCAtLSBNdWx0aU1lZGlhIG92ZXIgQ29heCBBbGxpYW5jZSAoTW9DQSkgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIGFzIGRvY3VtZW50ZWQgaW4gaW5mb3JtYXRpb24gcHJvdmlkZWQgcHJpdmF0ZWx5IHRvIElBTkEKKyAgICAgICAgICAgICAgICAgICBpZWVlODAyMTZXTUFOICgyMzcpLCAtLSBJRUVFIDgwMi4xNiBXTUFOIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGFkc2wycGx1cyAoMjM4KSwgLS0gQXN5bW1ldHJpYyBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCBWZXJzaW9uIDIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLSBWZXJzaW9uIDIgUGx1cyBhbmQgYWxsIHZhcmlhbnRzCisgICAgICAgICAgICAgICAgICAgZHZiUmNzTWFjTGF5ZXIgKDIzOSksIC0tIERWQi1SQ1MgTUFDIExheWVyCisgICAgICAgICAgICAgICAgICAgZHZiVGRtICgyNDApLCAtLSBEVkIgU2F0ZWxsaXRlIFRETQorICAgICAgICAgICAgICAgICAgIGR2YlJjc1RkbWEgKDI0MSksIC0tIERWQi1SQ1MgVERNQQorICAgICAgICAgICAgICAgICAgIHg4NkxhcHMgKDI0MiksIC0tIExBUFMgYmFzZWQgb24gSVRVLVQgWC44Ni9ZLjEzMjMKKyAgICAgICAgICAgICAgICAgICB3d2FuUFAgKDI0MyksIC0tIDNHUFAgV1dBTgorICAgICAgICAgICAgICAgICAgIHd3YW5QUDIgKDI0NCksIC0tIDNHUFAyIFdXQU4KKyAgICAgICAgICAgICAgICAgICB2b2ljZUVCUyAoMjQ1KSwgLS0gdm9pY2UgUC1waG9uZSBFQlMgcGh5c2ljYWwgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgaWZQd1R5cGUgKDI0NiksIC0tIFBzZXVkb3dpcmUgaW50ZXJmYWNlIHR5cGUKKyAgICAgICAgICAgICAgICAgICBpbGFuICgyNDcpLCAtLSBJbnRlcm5hbCBMQU4gb24gYSBicmlkZ2UgcGVyIElFRUUgODAyLjFhcAorICAgICAgICAgICAgICAgICAgIHBpcCAoMjQ4KSwgLS0gUHJvdmlkZXIgSW5zdGFuY2UgUG9ydCBvbiBhIGJyaWRnZSBwZXIgSUVFRSA4MDIuMWFoIFBCQgorICAgICAgICAgICAgICAgICAgIGFsdUVMUCAoMjQ5KSwgLS0gQWxjYXRlbC1MdWNlbnQgRXRoZXJuZXQgTGluayBQcm90ZWN0aW9uCisgICAgICAgICAgICAgICAgICAgZ3BvbiAoMjUwKSwgLS0gR2lnYWJpdC1jYXBhYmxlIHBhc3NpdmUgb3B0aWNhbCBuZXR3b3JrcyAoRy1QT04pIGFzIHBlciBJVFUtVCBHLjk0OAorICAgICAgICAgICAgICAgICAgIHZkc2wyICgyNTEpLCAtLSBWZXJ5IGhpZ2ggc3BlZWQgZGlnaXRhbCBzdWJzY3JpYmVyIGxpbmUgVmVyc2lvbiAyIChhcyBwZXIgSVRVLVQgUmVjb21tZW5kYXRpb24gRy45OTMuMikKKyAgICAgICAgICAgICAgICAgICBjYXB3YXBEb3QxMVByb2ZpbGUgKDI1MiksIC0tIFdMQU4gUHJvZmlsZSBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBjYXB3YXBEb3QxMUJzcyAoMjUzKSwgLS0gV0xBTiBCU1MgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgY2Fwd2FwV3RwVmlydHVhbFJhZGlvICgyNTQpLCAtLSBXVFAgVmlydHVhbCBSYWRpbyBJbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBiaXRzICgyNTUpLCAtLSBiaXRzcG9ydAorICAgICAgICAgICAgICAgICAgIGRvY3NDYWJsZVVwc3RyZWFtUmZQb3J0ICgyNTYpLCAtLSBET0NTSVMgQ0FUViBVcHN0cmVhbSBSRiBQb3J0CisgICAgICAgICAgICAgICAgICAgY2FibGVEb3duc3RyZWFtUmZQb3J0ICgyNTcpLCAtLSBDQVRWIGRvd25zdHJlYW0gUkYgcG9ydAorICAgICAgICAgICAgICAgICAgIHZtd2FyZVZpcnR1YWxOaWMgKDI1OCksIC0tIFZNd2FyZSBWaXJ0dWFsIE5ldHdvcmsgSW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgaWVlZTgwMjE1NCAoMjU5KSwgLS0gSUVFRSA4MDIuMTUuNCBXUEFOIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIG90bk9kdSAoMjYwKSwgLS0gT1ROIE9wdGljYWwgRGF0YSBVbml0CisgICAgICAgICAgICAgICAgICAgb3RuT3R1ICgyNjEpLCAtLSBPVE4gT3B0aWNhbCBjaGFubmVsIFRyYW5zcG9ydCBVbml0CisgICAgICAgICAgICAgICAgICAgaWZWZmlUeXBlICgyNjIpLCAtLSBWUExTIEZvcndhcmRpbmcgSW5zdGFuY2UgSW50ZXJmYWNlIFR5cGUKKyAgICAgICAgICAgICAgICAgICBnOTk4MSAoMjYzKSwgLS0gRy45OTguMSBib25kZWQgaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgZzk5ODIgKDI2NCksIC0tIEcuOTk4LjIgYm9uZGVkIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGc5OTgzICgyNjUpLCAtLSBHLjk5OC4zIGJvbmRlZCBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICBhbHVFcG9uICgyNjYpLCAtLSBFdGhlcm5ldCBQYXNzaXZlIE9wdGljYWwgTmV0d29ya3MgKEUtUE9OKQorICAgICAgICAgICAgICAgICAgIGFsdUVwb25PbnUgKDI2NyksIC0tIEVQT04gT3B0aWNhbCBOZXR3b3JrIFVuaXQKKyAgICAgICAgICAgICAgICAgICBhbHVFcG9uUGh5c2ljYWxVbmkgKDI2OCksIC0tIEVQT04gcGh5c2ljYWwgVXNlciB0byBOZXR3b3JrIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIGFsdUVwb25Mb2dpY2FsTGluayAoMjY5KSwgLS0gVGhlIGVtdWxhdGlvbiBvZiBhIHBvaW50LXRvLXBvaW50IGxpbmsgb3ZlciB0aGUgRVBPTiBsYXllcgorICAgICAgICAgICAgICAgICAgIGFsdUdwb25PbnUgKDI3MCksIC0tIEdQT04gT3B0aWNhbCBOZXR3b3JrIFVuaXQKKyAgICAgICAgICAgICAgICAgICBhbHVHcG9uUGh5c2ljYWxVbmkgKDI3MSksIC0tIEdQT04gcGh5c2ljYWwgVXNlciB0byBOZXR3b3JrIGludGVyZmFjZQorICAgICAgICAgICAgICAgICAgIHZtd2FyZU5pY1RlYW0gKDI3MiksIC0tIFZNd2FyZSBOSUMgVGVhbQorICAgICAgICAgICAgICAgICAgIGRvY3NPZmRtRG93bnN0cmVhbSAoMjc3KSwgLS0gQ0FUViBEb3duc3RyZWFtIE9GRE0gaW50ZXJmYWNlCisgICAgICAgICAgICAgICAgICAgZG9jc09mZG1hVXBzdHJlYW0gKDI3OCkgLS0gQ0FUViBVcHN0cmVhbSBPRkRNQSBpbnRlcmZhY2UKKyAgICAgICAgICAgICAgICAgICB9CiAKIElBTkF0dW5uZWxUeXBlIDo6PSBURVhUVUFMLUNPTlZFTlRJT04KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKQEAgLTQ4MSw3ICs2MzksOCBAQAogICAgICAgICAgICAgICAgICAgIHNpeFRvRm91cigxMSksICAgLS0gNnRvNCBlbmNhcHN1bGF0aW9uCiAgICAgICAgICAgICAgICAgICAgc2l4T3ZlckZvdXIoMTIpLCAtLSA2b3ZlcjQgZW5jYXBzdWxhdGlvbgogICAgICAgICAgICAgICAgICAgIGlzYXRhcCgxMyksICAgICAgLS0gSVNBVEFQIGVuY2Fwc3VsYXRpb24KLSAgICAgICAgICAgICAgICAgICB0ZXJlZG8oMTQpICAgICAgIC0tIFRlcmVkbyBlbmNhcHN1bGF0aW9uCisgICAgICAgICAgICAgICAgICAgdGVyZWRvKDE0KSwgICAgICAtLSBUZXJlZG8gZW5jYXBzdWxhdGlvbgorICAgICAgICAgICAgICAgICAgIGlwSHR0cHMoMTUpICAgICAgLS0gSVBIVFRQUwogICAgICAgICAgICAgICAgfQogCiAgICBFTkQKZGlmZiAtLWdpdCBhL21pYnMvSVAtRk9SV0FSRC1NSUIudHh0IGIvbWlicy9JUC1GT1JXQVJELU1JQi50eHQKaW5kZXggMzA5MGZmNy4uMzQ3YjVlMCAxMDA2NDQKLS0tIGEvbWlicy9JUC1GT1JXQVJELU1JQi50eHQKKysrIGIvbWlicy9JUC1GT1JXQVJELU1JQi50eHQKQEAgLTYsOCArNiw2IEBACiAgICAgQ291bnRlcjMyICAgICAgICAgICAgICAgICAgICAgICAgICBGUk9NIFNOTVB2Mi1TTUkKICAgICBSb3dTdGF0dXMgICAgICAgICAgICAgICAgICAgICAgICAgIEZST00gU05NUHYyLVRDCiAKLQotCiAgICAgTU9EVUxFLUNPTVBMSUFOQ0UsIE9CSkVDVC1HUk9VUCAgICBGUk9NIFNOTVB2Mi1DT05GCiAgICAgSW50ZXJmYWNlSW5kZXhPclplcm8gICAgICAgICAgICAgICBGUk9NIElGLU1JQgogICAgIGlwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRlJPTSBJUC1NSUIKQEAgLTU2LDkgKzU0LDYgQEAKICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uIG9mIHRoZSBJUCBGb3J3YXJkaW5nIE1JQiBpbiBhCiAgICAgICAgICAgICByZWFkLW9ubHkgbW9kZS4KIAotCi0KLQogICAgICAgICAgICAgVGhlIGluZXRDaWRyUm91dGVUYWJsZSByZXBsYWNlcyB0aGUgSVB2NC1zcGVjaWZpYwogICAgICAgICAgICAgaXBDaWRyUm91dGVUYWJsZSwgaXRzIHJlbGF0ZWQgb2JqZWN0cywgYW5kIHJlbGF0ZWQKICAgICAgICAgICAgIGNvbmZvcm1hbmNlIHN0YXRlbWVudHMuCkBAIC0xMDcsOSArMTAyLDYgQEAKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoaXMgZW50aXR5J3MgSVAgUm91dGluZyB0YWJsZS4iCiAgICAgUkVGRVJFTkNFCiAgICAgICAgICAgICJSRkMgMTIxMyBTZWN0aW9uIDYuNiwgVGhlIElQIEdyb3VwIgpAQCAtMTU4LDkgKzE1MCw2IEBACiAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWMxICAgICAgSW50ZWdlcjMyLAogICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljMiAgICAgIEludGVnZXIzMiwKICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzMgICAgICBJbnRlZ2VyMzIsCi0KLQotCiAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWM0ICAgICAgSW50ZWdlcjMyLAogICAgICAgICBpbmV0Q2lkclJvdXRlTWV0cmljNSAgICAgIEludGVnZXIzMiwKICAgICAgICAgaW5ldENpZHJSb3V0ZVN0YXR1cyAgICAgICBSb3dTdGF0dXMKQEAgLTE5OCw3ICsxODcsNiBAQAogICAgICAgICAgICAgZXF1YWwgdG8geC4gIElmIG5vdCwgdGhlbiB0aGUgaW5kZXggcGFpciBpcyBub3QKICAgICAgICAgICAgIGNvbnNpc3RlbnQgYW5kIGFuIGluY29uc2lzdGVudE5hbWUgZXJyb3IgbXVzdCBiZQogICAgICAgICAgICAgcmV0dXJuZWQgb24gU0VUIG9yIENSRUFURSByZXF1ZXN0cy4iCi0KICAgICA6Oj0geyBpbmV0Q2lkclJvdXRlRW50cnkgMiB9CiAKIGluZXRDaWRyUm91dGVQZnhMZW4gT0JKRUNULVRZUEUKQEAgLTIxMCw4ICsxOTgsNiBAQAogICAgICAgICAgICAgbWFzayB0byBiZSBsb2dpY2FsLUFORGVkIHdpdGggdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MKICAgICAgICAgICAgIGJlZm9yZSBiZWluZyBjb21wYXJlZCB0byB0aGUgdmFsdWUgaW4gdGhlCiAKLQotCiAgICAgICAgICAgICBpbmV0Q2lkclJvdXRlRGVzdCBmaWVsZC4KIAogICAgICAgICAgICAgVGhlIHZhbHVlcyBmb3IgdGhlIGluZGV4IG9iamVjdHMgaW5ldENpZHJSb3V0ZURlc3QgYW5kCkBAIC0yMjMsNyArMjA5LDYgQEAKICAgICAgICAgICAgIGVxdWFsIHRvIHguICBJZiBub3QsIHRoZW4gdGhlIGluZGV4IHBhaXIgaXMgbm90CiAgICAgICAgICAgICBjb25zaXN0ZW50IGFuZCBhbiBpbmNvbnNpc3RlbnROYW1lIGVycm9yIG11c3QgYmUKICAgICAgICAgICAgIHJldHVybmVkIG9uIFNFVCBvciBDUkVBVEUgcmVxdWVzdHMuIgotCiAgICAgOjo9IHsgaW5ldENpZHJSb3V0ZUVudHJ5IDMgfQogCiBpbmV0Q2lkclJvdXRlUG9saWN5IE9CSkVDVC1UWVBFCkBAIC0yNjEsOCArMjQ2LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiT24gcmVtb3RlIHJvdXRlcywgdGhlIGFkZHJlc3Mgb2YgdGhlIG5leHQgc3lzdGVtIGVuCiAKLQotCiAgICAgICAgICAgICByb3V0ZS4gIEZvciBub24tcmVtb3RlIHJvdXRlcywgYSB6ZXJvIGxlbmd0aCBzdHJpbmcuCiAKICAgICAgICAgICAgIFRoZSB0eXBlIG9mIHRoaXMgYWRkcmVzcyBpcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSBvZgpAQCAtMzEyLDkgKzI5NSw2IEBACiAgICAgICAgICAgICBkaXNjYXJkcyB0aGUgbWVzc2FnZSBzaWxlbnRseS4iCiAgICAgOjo9IHsgaW5ldENpZHJSb3V0ZUVudHJ5IDggfQogCi0KLQotCiBpbmV0Q2lkclJvdXRlUHJvdG8gT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIElBTkFpcFJvdXRlUHJvdG9jb2wKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQpAQCAtMzYyLDkgKzM0Miw2IEBACiAgICAgICAgICAgICB2YWx1ZS4gIElmIHRoaXMgbWV0cmljIGlzIG5vdCB1c2VkLCBpdHMgdmFsdWUgc2hvdWxkIGJlCiAgICAgICAgICAgICBzZXQgdG8gLTEuIgogICAgIERFRlZBTCB7IC0xIH0KLQotCi0KICAgICA6Oj0geyBpbmV0Q2lkclJvdXRlRW50cnkgMTIgfQogCiBpbmV0Q2lkclJvdXRlTWV0cmljMiBPQkpFQ1QtVFlQRQpAQCAtNDE0LDggKzM5MSw2IEBACiAgICAgICAgICAgICJBbiBhbHRlcm5hdGUgcm91dGluZyBtZXRyaWMgZm9yIHRoaXMgcm91dGUuICBUaGUKICAgICAgICAgICAgIHNlbWFudGljcyBvZiB0aGlzIG1ldHJpYyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgcm91dGluZy0KIAotCi0KICAgICAgICAgICAgIHByb3RvY29sIHNwZWNpZmllZCBpbiB0aGUgcm91dGUncyBpbmV0Q2lkclJvdXRlUHJvdG8KICAgICAgICAgICAgIHZhbHVlLiAgSWYgdGhpcyBtZXRyaWMgaXMgbm90IHVzZWQsIGl0cyB2YWx1ZSBzaG91bGQgYmUKICAgICAgICAgICAgIHNldCB0byAtMS4iCkBAIC00NjUsOCArNDQwLDYgQEAKICAgICAgICAgICAgIC0tICAgICBUaGlzIE1JQiByZXF1aXJlcyBzdXBwb3J0IGZvciBnbG9iYWwgYW5kCiAgICAgICAgICAgICAtLSAgICAgbm9uLWdsb2JhbCBpcHY0IGFuZCBpcHY2IGFkZHJlc3Nlcy4KIAotCi0KICAgICAgICAgICAgIC0tCiAgICAgICAgICAgICAtLSBPQkpFQ1QgICAgICBpbmV0Q2lkclJvdXRlRGVzdAogICAgICAgICAgICAgLS0gU1lOVEFYICAgICAgSW5ldEFkZHJlc3MgKFNJWkUgKDQgfCA4IHwgMTYgfCAyMCkpCkBAIC00OTcsNyArNDcwLDYgQEAKICAgIFdSSVRFLVNZTlRBWCAgUm93U3RhdHVzIHsgYWN0aXZlKDEpLCBub3RJblNlcnZpY2UgKDIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVBbmRHbyg0KSwgZGVzdHJveSg2KSB9CiAgICBERVNDUklQVElPTiAgIlN1cHBvcnQgZm9yIGNyZWF0ZUFuZFdhaXQgaXMgbm90IHJlcXVpcmVkLiIKLQogICAgOjo9IHsgaXBGb3J3YXJkQ29tcGxpYW5jZXMgMyB9CiAKIGlwRm9yd2FyZFJlYWRPbmx5Q29tcGxpYW5jZSBNT0RVTEUtQ09NUExJQU5DRQpAQCAtNTE1LDkgKzQ4Nyw2IEBACiAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4iCiAKICAgIE9CSkVDVCAgICAgIGluZXRDaWRyUm91dGVUeXBlCi0KLQotCiAgICBNSU4tQUNDRVNTICByZWFkLW9ubHkKICAgIERFU0NSSVBUSU9OCiAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4iCkBAIC01NTcsNyArNTI2LDYgQEAKICAgIE1JTi1BQ0NFU1MgIHJlYWQtb25seQogICAgREVTQ1JJUFRJT04KICAgICAgICJXcml0ZSBhY2Nlc3MgaXMgbm90IHJlcXVpcmVkLiIKLQogICAgOjo9IHsgaXBGb3J3YXJkQ29tcGxpYW5jZXMgNCB9CiAKIC0tIHVuaXRzIG9mIGNvbmZvcm1hbmNlCkBAIC01NjYsOSArNTM0LDYgQEAKICAgICBPQkpFQ1RTIHsgaW5ldENpZHJSb3V0ZURpc2NhcmRzLAogICAgICAgICAgICAgICBpbmV0Q2lkclJvdXRlSWZJbmRleCwgaW5ldENpZHJSb3V0ZVR5cGUsCiAgICAgICAgICAgICAgIGluZXRDaWRyUm91dGVQcm90bywgaW5ldENpZHJSb3V0ZUFnZSwKLQotCi0KICAgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZU5leHRIb3BBUywgaW5ldENpZHJSb3V0ZU1ldHJpYzEsCiAgICAgICAgICAgICAgIGluZXRDaWRyUm91dGVNZXRyaWMyLCBpbmV0Q2lkclJvdXRlTWV0cmljMywKICAgICAgICAgICAgICAgaW5ldENpZHJSb3V0ZU1ldHJpYzQsIGluZXRDaWRyUm91dGVNZXRyaWM1LApAQCAtNjE4LDggKzU4Myw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkEgcGFydGljdWxhciByb3V0ZSB0byBhIHBhcnRpY3VsYXIgZGVzdGluYXRpb24sIHVuZGVyIGEKIAotCi0KICAgICAgICAgICAgIHBhcnRpY3VsYXIgcG9saWN5LiIKICAgICBJTkRFWCB7CiAgICAgICAgIGlwQ2lkclJvdXRlRGVzdCwKQEAgLTY2OCw5ICs2MzEsNiBAQAogaXBDaWRyUm91dGVNYXNrIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJcEFkZHJlc3MKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQotCi0KLQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJJbmRpY2F0ZSB0aGUgbWFzayB0byBiZSBsb2dpY2FsLUFORGVkIHdpdGggdGhlCkBAIC03MjAsOCArNjgwLDYgQEAKICAgICAgICAgICAgICAgIDEgMCAwIDAgID09PiAgMTYgICAgICAxIDAgMCAxICA9PT4gIDE4CiAgICAgICAgICAgICAgICAxIDAgMSAwICA9PT4gIDIwICAgICAgMSAwIDEgMSAgPT0+ICAyMgogCi0KLQogICAgICAgICAgICAgICAgMSAxIDAgMCAgPT0+ICAyNCAgICAgIDEgMSAwIDEgID09PiAgMjYKICAgICAgICAgICAgICAgIDEgMSAxIDAgID09PiAgMjggICAgICAxIDEgMSAxICA9PT4gIDMwIgogICAgIDo6PSB7IGlwQ2lkclJvdXRlRW50cnkgMyB9CkBAIC03NzEsOSArNzI5LDYgQEAKICAgICAgICAgICAgIHJvdXRlcy4iCiAgICAgOjo9IHsgaXBDaWRyUm91dGVFbnRyeSA2IH0KIAotCi0KLQogaXBDaWRyUm91dGVQcm90byBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSU5URUdFUiB7CiAgICAgICAgICAgICAgICAgb3RoZXIgICAgICgxKSwgIC0tIG5vdCBzcGVjaWZpZWQKQEAgLTgyMSw5ICs3NzYsNiBAQAogaXBDaWRyUm91dGVJbmZvIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBPQkpFQ1QgSURFTlRJRklFUgogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKLQotCi0KICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiQSByZWZlcmVuY2UgdG8gTUlCIGRlZmluaXRpb25zIHNwZWNpZmljIHRvIHRoZQpAQCAtODczLDggKzgyNSw2IEBACiAgICAgICAgICAgICBwcm90b2NvbCBzcGVjaWZpZWQgaW4gdGhlIHJvdXRlJ3MgaXBDaWRyUm91dGVQcm90bwogICAgICAgICAgICAgdmFsdWUuICBJZiB0aGlzIG1ldHJpYyBpcyBub3QgdXNlZCwgaXRzIHZhbHVlIHNob3VsZCBiZQogCi0KLQogICAgICAgICAgICAgc2V0IHRvIC0xLiIKICAgICBERUZWQUwgeyAtMSB9CiAgICAgOjo9IHsgaXBDaWRyUm91dGVFbnRyeSAxMiB9CkBAIC05MjMsOSArODczLDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSByb3cgc3RhdHVzIHZhcmlhYmxlLCB1c2VkIGFjY29yZGluZyB0byByb3cKICAgICAgICAgICAgIGluc3RhbGxhdGlvbiBhbmQgcmVtb3ZhbCBjb252ZW50aW9ucy4iCiAgICAgOjo9IHsgaXBDaWRyUm91dGVFbnRyeSAxNiB9CkBAIC05NDQsNyArODkxLDYgQEAKIAogICAgTU9EVUxFICAtLSB0aGlzIG1vZHVsZQogICAgTUFOREFUT1JZLUdST1VQUyB7IGlwRm9yd2FyZENpZHJSb3V0ZUdyb3VwIH0KLQogICAgOjo9IHsgaXBGb3J3YXJkQ29tcGxpYW5jZXMgMSB9CiAKIC0tIHVuaXRzIG9mIGNvbmZvcm1hbmNlCkBAIC05NzQsOSArOTIwLDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgb2Jzb2xldGUKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIG51bWJlciBvZiBjdXJyZW50IGlwRm9yd2FyZFRhYmxlIGVudHJpZXMgdGhhdCBhcmUKICAgICAgICAgICAgIG5vdCBpbnZhbGlkLiIKICAgICA6Oj0geyBpcEZvcndhcmQgMSB9CkBAIC0xMDI1LDkgKzk2OCw2IEBACiAgICAgICAgIGlwRm9yd2FyZEluZm8gICAgICAgT0JKRUNUIElERU5USUZJRVIsCiAgICAgICAgIGlwRm9yd2FyZE5leHRIb3BBUyAgSW50ZWdlcjMyLAogICAgICAgICBpcEZvcndhcmRNZXRyaWMxICAgIEludGVnZXIzMiwKLQotCi0KICAgICAgICAgaXBGb3J3YXJkTWV0cmljMiAgICBJbnRlZ2VyMzIsCiAgICAgICAgIGlwRm9yd2FyZE1ldHJpYzMgICAgSW50ZWdlcjMyLAogICAgICAgICBpcEZvcndhcmRNZXRyaWM0ICAgIEludGVnZXIzMiwKQEAgLTEwNzcsOCArMTAxNyw2IEBACiAtLSBhbmQgdGhlIFJvdXRlciBSZXF1aXJlbWVudHMgZG9jdW1lbnRzIGRpc2FncmVlIG9uIHRoZSB3aWR0aAogLS0gb2YgdGhlIFRPUyBmaWVsZC4gIFRoaXMgbWFwcGluZyBkZXNjcmliZXMgdGhlIFJvdXRlcgogCi0KLQogLS0gUmVxdWlyZW1lbnRzIG1hcHBpbmcsIGFuZCBsZWF2ZXMgcm9vbSB0byB3aWRlbiB0aGUgVE9TIGZpZWxkCiAtLSB3aXRob3V0IGltcGFjdCB0byBmaWVsZGVkIHN5c3RlbXMuCiAKQEAgLTExMDUsOCArMTA0Myw2IEBACiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICB8ICAgICB8CiAgICAgICAgICAgICArLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rLS0tLS0rCiAKLQotCiAgICAgICAgICAgICAgICAgICAgICAgICAgSVAgVE9TICAgICAgICAgICAgICAgIElQIFRPUwogICAgICAgICAgICAgICAgRmllbGQgICAgIFBvbGljeSAgICAgIEZpZWxkICAgICBQb2xpY3kKICAgICAgICAgICAgICAgIENvbnRlbnRzICAgIENvZGUgICAgICBDb250ZW50cyAgICBDb2RlCkBAIC0xMTI3LDkgKzEwNjMsNiBAQAogICAgIDo6PSB7IGlwRm9yd2FyZEVudHJ5IDMgfQogCiBpcEZvcndhcmROZXh0SG9wIE9CSkVDVC1UWVBFCi0KLQotCiAgICAgU1lOVEFYICAgICBJcEFkZHJlc3MKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgb2Jzb2xldGUKQEAgLTExNzksOSArMTExMiw2IEBACiAgICAgREVGVkFMIHsgaW52YWxpZCB9CiAgICAgOjo9IHsgaXBGb3J3YXJkRW50cnkgNiB9CiAKLQotCi0KIGlwRm9yd2FyZFByb3RvIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJTlRFR0VSIHsKICAgICAgICAgICAgICAgICBvdGhlciAgICAgKDEpLCAgLS0gbm90IHNwZWNpZmllZApAQCAtMTIyOSw5ICsxMTU5LDYgQEAKICAgICBTWU5UQVggICAgIE9CSkVDVCBJREVOVElGSUVSCiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQogICAgIFNUQVRVUyAgICAgb2Jzb2xldGUKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiQSByZWZlcmVuY2UgdG8gTUlCIGRlZmluaXRpb25zIHNwZWNpZmljIHRvIHRoZQogICAgICAgICAgICAgcGFydGljdWxhciByb3V0aW5nIHByb3RvY29sIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yCkBAIC0xMjgxLDkgKzEyMDgsNiBAQAogICAgIERFRlZBTCB7IC0xIH0KICAgICA6Oj0geyBpcEZvcndhcmRFbnRyeSAxMiB9CiAKLQotCi0KIGlwRm9yd2FyZE1ldHJpYzMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIEludGVnZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKQEAgLTEzMzIsMTIgKzEyNTYsOCBAQAogICAgICAgICAgICAiVGhlIGNvbXBsaWFuY2Ugc3RhdGVtZW50IGZvciBTTk1QIGVudGl0aWVzIHRoYXQKICAgICAgICAgICAgIGltcGxlbWVudCB0aGUgaXBGb3J3YXJkIE1JQi4iCiAKLQotCi0KICAgIE1PRFVMRSAgLS0gdGhpcyBtb2R1bGUKICAgIE1BTkRBVE9SWS1HUk9VUFMgeyBpcEZvcndhcmRNdWx0aVBhdGhHcm91cCB9Ci0KICAgIDo6PSB7IGlwRm9yd2FyZENvbXBsaWFuY2VzIDIgfQogCiBpcEZvcndhcmRNdWx0aVBhdGhHcm91cCBPQkpFQ1QtR1JPVVAKZGlmZiAtLWdpdCBhL21pYnMvSVAtTUlCLnR4dCBiL21pYnMvSVAtTUlCLnR4dAppbmRleCAwYTkzNTAxLi5mZTJkYjVmIDEwMDY0NAotLS0gYS9taWJzL0lQLU1JQi50eHQKKysrIGIvbWlicy9JUC1NSUIudHh0CkBAIC0yMSw4ICsyMSw2IEBACiAgICAgQ09OVEFDVC1JTkZPCiAgICAgICAgICAgICJFZGl0b3I6CiAKLQotCiAgICAgICAgICAgICBTaGF3biBBLiBSb3V0aGllcgogICAgICAgICAgICAgSW50ZXJ3b3JraW5nIExhYnMKICAgICAgICAgICAgIDEwOCBXaGlzcGVyaW5nIFBpbmVzIERyLiBTdWl0ZSAyMzUKQEAgLTcyLDggKzcwLDYgQEAKIAogICAgICAgICAgICAgbGlua2xheWVyKDUpIGluZGljYXRlcyBhbiBhZGRyZXNzIGNyZWF0ZWQgYnkgSVB2NiBzdGF0ZWxlc3MKIAotCi0KICAgICAgICAgICAgIGF1dG8tY29uZmlndXJhdGlvbi4KIAogICAgICAgICAgICAgcmFuZG9tKDYpIGluZGljYXRlcyBhbiBhZGRyZXNzIGNob3NlbiBieSB0aGUgc3lzdGVtIGF0CkBAIC0xMjMsOCArMTE5LDYgQEAKICAgICAgICAgICAgIFRoZSBkdXBsaWNhdGUoNykgc3RhdGUgaW5kaWNhdGVzIHRoZSBhZGRyZXNzIGhhcyBiZWVuCiAgICAgICAgICAgICBkZXRlcm1pbmVkIHRvIGJlIG5vbi11bmlxdWUgb24gdGhlIGxpbmsgYW5kIHNvIG11c3Qgbm90IGJlCiAKLQotCiAgICAgICAgICAgICB1c2VkLgogCiAgICAgICAgICAgICBUaGUgb3B0aW1pc3RpYyg4KSBzdGF0ZSBpbmRpY2F0ZXMgdGhlIGFkZHJlc3MgaXMgYXZhaWxhYmxlCkBAIC0xNzMsOSArMTY3LDYgQEAKICAgICAgICAgbWFudWFsKDIpLAogICAgICAgICB3ZWxsa25vd24oMyksCiAgICAgICAgIGRoY3AoNCksCi0KLQotCiAgICAgICAgIHJvdXRlcmFkdig1KQogICAgIH0KIApAQCAtMjI1LDggKzIxNiw2IEBACiAgICAgICAgICAgICB0aGUgSVB2NCBoZWFkZXIgb2YgZGF0YWdyYW1zIG9yaWdpbmF0ZWQgYXQgdGhpcyBlbnRpdHksCiAgICAgICAgICAgICB3aGVuZXZlciBhIFRUTCB2YWx1ZSBpcyBub3Qgc3VwcGxpZWQgYnkgdGhlIHRyYW5zcG9ydCBsYXllcgogCi0KLQogICAgICAgICAgICAgcHJvdG9jb2wuCiAKICAgICAgICAgICAgIFdoZW4gdGhpcyBvYmplY3QgaXMgd3JpdHRlbiwgdGhlIGVudGl0eSBzaG91bGQgc2F2ZSB0aGUKQEAgLTI3NSw5ICsyNjQsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC13cml0ZQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgZGVmYXVsdCB2YWx1ZSBpbnNlcnRlZCBpbnRvIHRoZSBIb3AgTGltaXQgZmllbGQgb2YgdGhlCiAgICAgICAgICAgICBJUHY2IGhlYWRlciBvZiBkYXRhZ3JhbXMgb3JpZ2luYXRlZCBhdCB0aGlzIGVudGl0eSB3aGVuZXZlcgogICAgICAgICAgICAgYSBIb3AgTGltaXQgdmFsdWUgaXMgbm90IHN1cHBsaWVkIGJ5IHRoZSB0cmFuc3BvcnQgbGF5ZXIKQEAgLTMyNiw5ICszMTIsNiBAQAogICAgICAgICAgICAiQW4gZW50cnkgY29udGFpbmluZyBJUHY0LXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciBhIHNwZWNpZmljCiAgICAgICAgICAgICBpbnRlcmZhY2UuIgogICAgIElOREVYIHsgaXB2NEludGVyZmFjZUlmSW5kZXggfQotCi0KLQogICAgIDo6PSB7IGlwdjRJbnRlcmZhY2VUYWJsZSAxIH0KIAogSXB2NEludGVyZmFjZUVudHJ5IDo6PSBTRVFVRU5DRSB7CkBAIC0zNzcsOSArMzYwLDYgQEAKIGlwdjRJbnRlcmZhY2VSZXRyYW5zbWl0VGltZSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgVW5zaWduZWQzMgogICAgIFVOSVRTICAgICAgIm1pbGxpc2Vjb25kcyIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC00MjgsOSArNDA4LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiQW4gZW50cnkgY29udGFpbmluZyBJUHY2LXNwZWNpZmljIGluZm9ybWF0aW9uIGZvciBhIGdpdmVuCiAgICAgICAgICAgICBpbnRlcmZhY2UuIgotCi0KLQogICAgIElOREVYIHsgaXB2NkludGVyZmFjZUlmSW5kZXggfQogICAgIDo6PSB7IGlwdjZJbnRlcmZhY2VUYWJsZSAxIH0KIApAQCAtNDc5LDkgKzQ1Niw2IEBACiAgICAgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIG9mIHRoZSBsaW5rIHR5cGUgdG8gd2hpY2ggdGhpcwogICAgICAgICAgICAgaW50ZXJmYWNlIGlzIGF0dGFjaGVkLgogCi0KLQotCiAgICAgICAgICAgICBBIHplcm8gbGVuZ3RoIGlkZW50aWZpZXIgbWF5IGJlIHVzZWQgd2hlcmUgYXBwcm9wcmlhdGUuICBPbmUKICAgICAgICAgICAgIHBvc3NpYmxlIGV4YW1wbGUgaXMgYSBsb29wYmFjayBpbnRlcmZhY2UuIgogICAgIDo6PSB7IGlwdjZJbnRlcmZhY2VFbnRyeSAzIH0KQEAgLTUzMCw5ICs1MDQsNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSB0aW1lIGJldHdlZW4gcmV0cmFuc21pc3Npb25zIG9mIE5laWdoYm9yIFNvbGljaXRhdGlvbgogICAgICAgICAgICAgbWVzc2FnZXMgdG8gYSBuZWlnaGJvciB3aGVuIHJlc29sdmluZyB0aGUgYWRkcmVzcyBvciB3aGVuCiAgICAgICAgICAgICBwcm9iaW5nIHRoZSByZWFjaGFiaWxpdHkgb2YgYSBuZWlnaGJvci4iCkBAIC01ODIsOCArNTUzLDYgQEAKIC0tCiAtLSBOb3RlIHdlbGw6IEJvdGggb2YgdGhlc2UgdGFibGVzIGNvbnRhaW4gc29tZSBpdGVtcyB0aGF0IGFyZQogCi0KLQogLS0gcmVwcmVzZW50ZWQgYnkgdHdvIG9iamVjdHMsIHJlcHJlc2VudGluZyB0aGUgdmFsdWUgaW4gZWl0aGVyIDMyCiAtLSBvciA2NCBiaXRzLiAgRm9yIHRob3NlIG9iamVjdHMsIHRoZSAzMi1iaXQgdmFsdWUgTVVTVCBiZSB0aGUgbG93CiAtLSBvcmRlciAzMiBiaXRzIG9mIHRoZSA2NC1iaXQgdmFsdWUuICBBbHNvIG5vdGUgdGhhdCB0aGUgMzItYml0CkBAIC02MzIsOSArNjAxLDYgQEAKICAgICAgICAgaXBTeXN0ZW1TdGF0c1JlYXNtRmFpbHMgICAgICAgICAgQ291bnRlcjMyLAogICAgICAgICBpcFN5c3RlbVN0YXRzSW5EaXNjYXJkcyAgICAgICAgICBDb3VudGVyMzIsCiAgICAgICAgIGlwU3lzdGVtU3RhdHNJbkRlbGl2ZXJzICAgICAgICAgIENvdW50ZXIzMiwKLQotCi0KICAgICAgICAgaXBTeXN0ZW1TdGF0c0hDSW5EZWxpdmVycyAgICAgICAgQ291bnRlcjY0LAogICAgICAgICBpcFN5c3RlbVN0YXRzT3V0UmVxdWVzdHMgICAgICAgICBDb3VudGVyMzIsCiAgICAgICAgIGlwU3lzdGVtU3RhdHNIQ091dFJlcXVlc3RzICAgICAgIENvdW50ZXI2NCwKQEAgLTY4Myw5ICs2NDksNiBAQAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgIlRoZSB0b3RhbCBudW1iZXIgb2YgaW5wdXQgSVAgZGF0YWdyYW1zIHJlY2VpdmVkLCBpbmNsdWRpbmcKICAgICAgICAgICAgIHRob3NlIHJlY2VpdmVkIGluIGVycm9yLgogCkBAIC03MzUsOCArNjk4LDYgQEAKICAgICAgICAgICAgIGluY2x1ZGluZyB0aG9zZSByZWNlaXZlZCBpbiBlcnJvci4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUKICAgICAgICAgICAgIHNhbWUgb2N0ZXRzIGFzIGlwU3lzdGVtU3RhdHNJbk9jdGV0cywgYnV0IGFsbG93cyBmb3IgbGFyZ2VyCiAKLQotCiAgICAgICAgICAgICB2YWx1ZXMuCiAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdApAQCAtNzg2LDggKzc0Nyw2IEBACiAgICAgICAgICAgICBpbmNsdWRlcyBpbnZhbGlkIGFkZHJlc3NlcyAoZS5nLiwgOjowKS4gIEZvciBlbnRpdGllcwogICAgICAgICAgICAgdGhhdCBhcmUgbm90IElQIHJvdXRlcnMgYW5kIHRoZXJlZm9yZSBkbyBub3QgZm9yd2FyZAogCi0KLQogICAgICAgICAgICAgZGF0YWdyYW1zLCB0aGlzIGNvdW50ZXIgaW5jbHVkZXMgZGF0YWdyYW1zIGRpc2NhcmRlZAogICAgICAgICAgICAgYmVjYXVzZSB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB3YXMgbm90IGEgbG9jYWwgYWRkcmVzcy4KIApAQCAtODM2LDkgKzc5NSw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIG51bWJlciBvZiBpbnB1dCBkYXRhZ3JhbXMgZm9yIHdoaWNoIHRoaXMgZW50aXR5IHdhcyBub3QKICAgICAgICAgICAgIHRoZWlyIGZpbmFsIElQIGRlc3RpbmF0aW9uIGFuZCBmb3Igd2hpY2ggdGhpcyBlbnRpdHkKICAgICAgICAgICAgIGF0dGVtcHRlZCB0byBmaW5kIGEgcm91dGUgdG8gZm9yd2FyZCB0aGVtIHRvIHRoYXQgZmluYWwKQEAgLTg4OCw4ICs4NDQsNiBAQAogCiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKIAotCi0KICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUuIgpAQCAtOTM4LDkgKzg5Miw2IEBACiAKIGlwU3lzdGVtU3RhdHNJbkRpc2NhcmRzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC05ODksOSArOTQwLDYgQEAKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUuIgotCi0KLQogICAgIDo6PSB7IGlwU3lzdGVtU3RhdHNFbnRyeSAxOSB9CiAKIGlwU3lzdGVtU3RhdHNPdXRSZXF1ZXN0cyBPQkpFQ1QtVFlQRQpAQCAtMTA0MSw4ICs5ODksNiBAQAogICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcFN5c3RlbVN0YXRzRW50cnkgMjIgfQogCi0KLQogaXBTeXN0ZW1TdGF0c091dEZvcndEYXRhZ3JhbXMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CkBAIC0xMDkyLDggKzEwMzgsNiBAQAogICAgICAgICAgICAgZGVzdGluYXRpb24sIGJ1dCB3ZXJlIGRpc2NhcmRlZCAoZS5nLiwgZm9yIGxhY2sgb2YKICAgICAgICAgICAgIGJ1ZmZlciBzcGFjZSkuICBOb3RlIHRoYXQgdGhpcyBjb3VudGVyIHdvdWxkIGluY2x1ZGUKIAotCi0KICAgICAgICAgICAgIGRhdGFncmFtcyBjb3VudGVkIGluIGlwU3lzdGVtU3RhdHNPdXRGb3J3RGF0YWdyYW1zIGlmIGFueQogICAgICAgICAgICAgc3VjaCBkYXRhZ3JhbXMgbWV0IHRoaXMgKGRpc2NyZXRpb25hcnkpIGRpc2NhcmQgY3JpdGVyaW9uLgogCkBAIC0xMTQyLDkgKzEwODYsNiBAQAogaXBTeXN0ZW1TdGF0c091dEZyYWdGYWlscyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKLQotCi0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIG51bWJlciBvZiBJUCBkYXRhZ3JhbXMgdGhhdCBoYXZlIGJlZW4gZGlzY2FyZGVkIGJlY2F1c2UKQEAgLTExOTQsOCArMTEzNSw2IEBACiAgICAgICAgICAgICBEaXNjb250aW51aXRpZXMgaW4gdGhlIHZhbHVlIG9mIHRoaXMgY291bnRlciBjYW4gb2NjdXIgYXQKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAKLQotCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwU3lzdGVtU3RhdHNFbnRyeSAzMCB9CkBAIC0xMjQ1LDggKzExODQsNiBAQAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKIAotCi0KICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBTeXN0ZW1TdGF0c0VudHJ5IDMzIH0KIApAQCAtMTI5NSw5ICsxMjMyLDYgQEAKIAogaXBTeXN0ZW1TdGF0c0hDSW5NY2FzdE9jdGV0cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjY0Ci0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMTM0Nyw4ICsxMjgxLDYgQEAKICAgICAgICAgICAgIlRoZSB0b3RhbCBudW1iZXIgb2Ygb2N0ZXRzIHRyYW5zbWl0dGVkIGluIElQIG11bHRpY2FzdAogICAgICAgICAgICAgZGF0YWdyYW1zLiAgT2N0ZXRzIGZyb20gZGF0YWdyYW1zIGNvdW50ZWQgaW4KIAotCi0KICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNPdXRNY2FzdFBrdHMgTVVTVCBiZSBjb3VudGVkIGhlcmUuCiAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdApAQCAtMTM5OCw4ICsxMzMwLDYgQEAKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAKLQotCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzRGlzY29udGludWl0eVRpbWUuIgogICAgIDo6PSB7IGlwU3lzdGVtU3RhdHNFbnRyeSA0MyB9CiAKQEAgLTE0NDgsOSArMTM3OCw2IEBACiBpcFN5c3RlbVN0YXRzUmVmcmVzaFJhdGUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIFVuc2lnbmVkMzIKICAgICBVTklUUyAgICAgICJtaWxsaS1zZWNvbmRzIgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTE0OTksOSArMTQyNiw2IEBACiBJcElmU3RhdHNFbnRyeSA6Oj0gU0VRVUVOQ0UgewogICAgICAgICBpcElmU3RhdHNJUFZlcnNpb24gICAgICAgICAgIEluZXRWZXJzaW9uLAogICAgICAgICBpcElmU3RhdHNJZkluZGV4ICAgICAgICAgICAgIEludGVyZmFjZUluZGV4LAotCi0KLQogICAgICAgICBpcElmU3RhdHNJblJlY2VpdmVzICAgICAgICAgIENvdW50ZXIzMiwKICAgICAgICAgaXBJZlN0YXRzSENJblJlY2VpdmVzICAgICAgICBDb3VudGVyNjQsCiAgICAgICAgIGlwSWZTdGF0c0luT2N0ZXRzICAgICAgICAgICAgQ291bnRlcjMyLApAQCAtMTU1MCw5ICsxNDc0LDYgQEAKIAogaXBJZlN0YXRzSVBWZXJzaW9uIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBJbmV0VmVyc2lvbgotCi0KLQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgpAQCAtMTYwMSw5ICsxNTIyLDYgQEAKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSA0IH0KIAogaXBJZlN0YXRzSW5PY3RldHMgT0JKRUNULVRZUEUKLQotCi0KICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CkBAIC0xNjUyLDkgKzE1NzAsNiBAQAogCiBpcElmU3RhdHNJbk5vUm91dGVzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0xNzA0LDggKzE2MTksNiBAQAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKIAotCi0KICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSAxMCB9CiAKQEAgLTE3NTUsOCArMTY2OCw2IEBACiAgICAgICAgICAgICBhdHRlbXB0ZWQgdG8gZmluZCBhIHJvdXRlIHRvIGZvcndhcmQgdGhlbSB0byB0aGF0IGZpbmFsCiAgICAgICAgICAgICBkZXN0aW5hdGlvbi4gIFRoaXMgb2JqZWN0IGNvdW50cyB0aGUgc2FtZSBwYWNrZXRzIGFzCiAKLQotCiAgICAgICAgICAgICBpcElmU3RhdHNJbkZvcndEYXRhZ3JhbXMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCiAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdApAQCAtMTgwNSw5ICsxNzE2LDYgQEAKIGlwSWZTdGF0c1JlYXNtRmFpbHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5Ci0KLQotCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBudW1iZXIgb2YgZmFpbHVyZXMgZGV0ZWN0ZWQgYnkgdGhlIElQIHJlLWFzc2VtYmx5CkBAIC0xODU3LDggKzE3NjUsNiBAQAogICAgICAgICAgICAgaW50ZXJmYWNlIHRvIHdoaWNoIHRoZXNlIGRhdGFncmFtcyB3ZXJlIGFkZHJlc3NlZCBpcwogICAgICAgICAgICAgaW5jcmVtZW50ZWQuICBUaGlzIGludGVyZmFjZSBtaWdodCBub3QgYmUgdGhlIHNhbWUgYXMgdGhlCiAKLQotCiAgICAgICAgICAgICBpbnB1dCBpbnRlcmZhY2UgZm9yIHNvbWUgb2YgdGhlIGRhdGFncmFtcy4KIAogICAgICAgICAgICAgRGlzY29udGludWl0aWVzIGluIHRoZSB2YWx1ZSBvZiB0aGlzIGNvdW50ZXIgY2FuIG9jY3VyIGF0CkBAIC0xOTA4LDggKzE4MTQsNiBAQAogICAgICAgICAgICAgcHJvdG9jb2xzIChpbmNsdWRpbmcgSUNNUCkgc3VwcGxpZWQgdG8gSVAgaW4gcmVxdWVzdHMgZm9yCiAgICAgICAgICAgICB0cmFuc21pc3Npb24uICBUaGlzIG9iamVjdCBjb3VudHMgdGhlIHNhbWUgcGFja2V0cyBhcwogCi0KLQogICAgICAgICAgICAgaXBJZlN0YXRzT3V0UmVxdWVzdHMsIGJ1dCBhbGxvd3MgZm9yIGxhcmdlciB2YWx1ZXMuCiAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdApAQCAtMTk1OSw4ICsxODYzLDYgQEAKICAgICAgICAgICAgIHJlLWluaXRpYWxpemF0aW9uIG9mIHRoZSBtYW5hZ2VtZW50IHN5c3RlbSwgYW5kIGF0IG90aGVyCiAgICAgICAgICAgICB0aW1lcyBhcyBpbmRpY2F0ZWQgYnkgdGhlIHZhbHVlIG9mCiAKLQotCiAgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgMjQgfQogCkBAIC0yMDEwLDggKzE5MTIsNiBAQAogCiAgICAgICAgICAgICBXaGVuIHRyYWNraW5nIGludGVyZmFjZSBzdGF0aXN0aWNzLCB0aGUgY291bnRlciBvZiB0aGUKIAotCi0KICAgICAgICAgICAgIG91dGdvaW5nIGludGVyZmFjZSBpcyBpbmNyZW1lbnRlZCBmb3IgYSBzdWNjZXNzZnVsbHkKICAgICAgICAgICAgIGZyYWdtZW50ZWQgZGF0YWdyYW0uCiAKQEAgLTIwNjAsOSArMTk2MCw2IEBACiAgICAgICAgICAgICBpcElmU3RhdHNEaXNjb250aW51aXR5VGltZS4iCiAgICAgOjo9IHsgaXBJZlN0YXRzRW50cnkgMjkgfQogCi0KLQotCiBpcElmU3RhdHNPdXRUcmFuc21pdHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CkBAIC0yMTExLDkgKzIwMDgsNiBAQAogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDMyIH0KIAogaXBJZlN0YXRzSENPdXRPY3RldHMgT0JKRUNULVRZUEUKLQotCi0KICAgICBTWU5UQVggICAgIENvdW50ZXI2NAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50CkBAIC0yMTYzLDggKzIwNTcsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgdG90YWwgbnVtYmVyIG9mIG9jdGV0cyByZWNlaXZlZCBpbiBJUCBtdWx0aWNhc3QKIAotCi0KICAgICAgICAgICAgIGRhdGFncmFtcy4gIE9jdGV0cyBmcm9tIGRhdGFncmFtcyBjb3VudGVkIGluCiAgICAgICAgICAgICBpcElmU3RhdHNJbk1jYXN0UGt0cyBNVVNUIGJlIGNvdW50ZWQgaGVyZS4KIApAQCAtMjIxNCw4ICsyMTA2LDYgQEAKICAgICAgICAgICAgIERpc2NvbnRpbnVpdGllcyBpbiB0aGUgdmFsdWUgb2YgdGhpcyBjb3VudGVyIGNhbiBvY2N1ciBhdAogICAgICAgICAgICAgcmUtaW5pdGlhbGl6YXRpb24gb2YgdGhlIG1hbmFnZW1lbnQgc3lzdGVtLCBhbmQgYXQgb3RoZXIKIAotCi0KICAgICAgICAgICAgIHRpbWVzIGFzIGluZGljYXRlZCBieSB0aGUgdmFsdWUgb2YKICAgICAgICAgICAgIGlwSWZTdGF0c0Rpc2NvbnRpbnVpdHlUaW1lLiIKICAgICA6Oj0geyBpcElmU3RhdHNFbnRyeSAzOSB9CkBAIC0yMjY0LDkgKzIxNTQsNiBAQAogICAgIDo6PSB7IGlwSWZTdGF0c0VudHJ5IDQyIH0KIAogaXBJZlN0YXRzSENJbkJjYXN0UGt0cyBPQkpFQ1QtVFlQRQotCi0KLQogICAgIFNZTlRBWCAgICAgQ291bnRlcjY0CiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKQEAgLTIzMTYsOCArMjIwMyw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSB2YWx1ZSBvZiBzeXNVcFRpbWUgb24gdGhlIG1vc3QgcmVjZW50IG9jY2FzaW9uIGF0IHdoaWNoCiAKLQotCiAgICAgICAgICAgICBhbnkgb25lIG9yIG1vcmUgb2YgdGhpcyBlbnRyeSdzIGNvdW50ZXJzIHN1ZmZlcmVkIGEKICAgICAgICAgICAgIGRpc2NvbnRpbnVpdHkuCiAKQEAgLTIzNjcsOCArMjI1Miw2IEBACiAgICAgICAgICAgICB0YWJsZSBpbmRlcGVuZGVudCBvZiBob3cgdGhlIGVudGl0eSBsZWFybmVkIHRoZSBwcmVmaXguCiAgICAgICAgICAgICAoVGhpcyB0YWJsZSBpc24ndCBsaW1pdGVkIHRvIHByZWZpeGVzIGxlYXJuZWQgZnJvbSByb3V0ZXIKIAotCi0KICAgICAgICAgICAgIGFkdmVydGlzZW1lbnRzLikiCiAgICAgOjo9IHsgaXAgMzIgfQogCkBAIC0yNDE3LDkgKzIzMDAsNiBAQAogICAgIFNZTlRBWCAgICAgSW5ldEFkZHJlc3MKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBhZGRyZXNzIHByZWZpeC4gIFRoZSBhZGRyZXNzIHR5cGUgb2YgdGhpcyBvYmplY3QgaXMKICAgICAgICAgICAgIHNwZWNpZmllZCBpbiBpcEFkZHJlc3NQcmVmaXhUeXBlLiAgVGhlIGxlbmd0aCBvZiB0aGlzIG9iamVjdApAQCAtMjQ2OCw5ICsyMzQ4LDYgQEAKIAogaXBBZGRyZXNzUHJlZml4QXV0b25vbW91c0ZsYWcgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIFRydXRoVmFsdWUKLQotCi0KICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0yNTE5LDkgKzIzOTYsNiBAQAogICAgICAgICAgICAgVGhlIGFkZHJlc3MgZ2VuZXJhdGVkIGZyb20gYW4gaW52YWxpZGF0ZWQgcHJlZml4IHNob3VsZCBub3QKICAgICAgICAgICAgIGFwcGVhciBhcyB0aGUgZGVzdGluYXRpb24gb3Igc291cmNlIGFkZHJlc3Mgb2YgYSBwYWNrZXQuCiAKLQotCi0KICAgICAgICAgICAgIFRoZSBkZWZhdWx0IGZvciBJUHY0IHByZWZpeGVzIGlzIDQsMjk0LDk2NywyOTUgKGluZmluaXR5KS4iCiAgICAgUkVGRVJFTkNFICJGb3IgSVB2NiBSRkMgMjQ2MSwgZXNwZWNpYWxseSBzZWN0aW9ucyAyIGFuZCA0LjYuMiBhbmQKICAgICAgICAgICAgICAgIFJGQyAyNDYyIgpAQCAtMjU3MSw4ICsyNDQ1LDYgQEAKICAgICAgICAgICAgIGludGVudGlvbiBpbiBhbGxvd2luZyBhIHVzZXIgdG8gd3JpdGUgdG8gdGhpcyB0YWJsZSBpcyB0bwogICAgICAgICAgICAgYWxsb3cgdGhlbSB0byBhZGQgb3IgcmVtb3ZlIGFueSBlbnRyeSB0aGF0IGlzbid0CiAKLQotCiAgICAgICAgICAgICBwZXJtYW5lbnQuICBUaGUgdXNlciBzaG91bGQgYmUgYWxsb3dlZCB0byBtb2RpZnkgb2JqZWN0cwogICAgICAgICAgICAgYW5kIGVudHJpZXMgd2hlbiB0aGF0IHdvdWxkIG5vdCBjYXVzZSBpbmNvbnNpc3RlbmNpZXMKICAgICAgICAgICAgIHdpdGhpbiB0aGUgdGFibGUuICBBbGxvd2luZyB3cml0ZSBhY2Nlc3MgdG8gb2JqZWN0cywgc3VjaApAQCAtMjYyMiw4ICsyNDk0LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIElQIGFkZHJlc3MgdG8gd2hpY2ggdGhpcyBlbnRyeSdzIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24KIAotCi0KICAgICAgICAgICAgIHBlcnRhaW5zLiAgVGhlIGFkZHJlc3MgdHlwZSBvZiB0aGlzIG9iamVjdCBpcyBzcGVjaWZpZWQgaW4KICAgICAgICAgICAgIGlwQWRkcmVzc0FkZHJUeXBlLgogCkBAIC0yNjcyLDkgKzI1NDIsNiBAQAogICAgIFNZTlRBWCAgICAgSXBBZGRyZXNzT3JpZ2luVEMKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgb3JpZ2luIG9mIHRoZSBhZGRyZXNzLiIKICAgICA6Oj0geyBpcEFkZHJlc3NFbnRyeSA2IH0KQEAgLTI3MjQsOCArMjU5MSw2IEBACiAgICAgICAgICAgICBUaGUgUm93U3RhdHVzIFRDIHJlcXVpcmVzIHRoYXQgdGhpcyBERVNDUklQVElPTiBjbGF1c2UKICAgICAgICAgICAgIHN0YXRlcyB1bmRlciB3aGljaCBjaXJjdW1zdGFuY2VzIG90aGVyIG9iamVjdHMgaW4gdGhpcyByb3cKIAotCi0KICAgICAgICAgICAgIGNhbiBiZSBtb2RpZmllZC4gIFRoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCBoYXMgbm8gZWZmZWN0IG9uCiAgICAgICAgICAgICB3aGV0aGVyIG90aGVyIG9iamVjdHMgaW4gdGhpcyBjb25jZXB0dWFsIHJvdyBjYW4gYmUKICAgICAgICAgICAgIG1vZGlmaWVkLgpAQCAtMjc3NCw5ICsyNjM5LDYgQEAKICAgICBTWU5UQVggICAgIElwTmV0VG9QaHlzaWNhbEVudHJ5CiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJFYWNoIGVudHJ5IGNvbnRhaW5zIG9uZSBJUCBhZGRyZXNzIHRvIGBwaHlzaWNhbCcgYWRkcmVzcwogICAgICAgICAgICAgZXF1aXZhbGVuY2UuIgpAQCAtMjgyNiw4ICsyNjg4LDYgQEAKIAogICAgICAgICAgICAgSW1wbGVtZW50b3JzIG5lZWQgdG8gYmUgYXdhcmUgdGhhdCBpZiB0aGUgc2l6ZSBvZgogCi0KLQogICAgICAgICAgICAgaXBOZXRUb1BoeXNpY2FsTmV0QWRkcmVzcyBleGNlZWRzIDExNSBvY3RldHMsIHRoZW4gT0lEUyBvZgogICAgICAgICAgICAgaW5zdGFuY2VzIG9mIGNvbHVtbnMgaW4gdGhpcyByb3cgd2lsbCBoYXZlIG1vcmUgdGhhbiAxMjgKICAgICAgICAgICAgIHN1Yi1pZGVudGlmaWVycyBhbmQgY2Fubm90IGJlIGFjY2Vzc2VkIHVzaW5nIFNOTVB2MSwKQEAgLTI4NzcsOCArMjczNyw2IEBACiAgICAgICAgICAgICBtYXBwaW5nIGlkZW50aWZpZWQgd2l0aCBzYWlkIGVudHJ5LiAgSXQgaXMgYW4KICAgICAgICAgICAgIGltcGxlbWVudGF0aW9uLXNwZWNpZmljIG1hdHRlciBhcyB0byB3aGV0aGVyIHRoZSBhZ2VudAogCi0KLQogICAgICAgICAgICAgcmVtb3ZlcyBhbiBpbnZhbGlkYXRlZCBlbnRyeSBmcm9tIHRoZSB0YWJsZS4gIEFjY29yZGluZ2x5LAogICAgICAgICAgICAgbWFuYWdlbWVudCBzdGF0aW9ucyBtdXN0IGJlIHByZXBhcmVkIHRvIHJlY2VpdmUgdGFidWxhcgogICAgICAgICAgICAgaW5mb3JtYXRpb24gZnJvbSBhZ2VudHMgdGhhdCBjb3JyZXNwb25kcyB0byBlbnRyaWVzIG5vdApAQCAtMjkyNyw5ICsyNzg1LDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgTmVpZ2hib3IgVW5yZWFjaGFiaWxpdHkgRGV0ZWN0aW9uIHN0YXRlIGZvciB0aGUKICAgICAgICAgICAgIGludGVyZmFjZSB3aGVuIHRoZSBhZGRyZXNzIG1hcHBpbmcgaW4gdGhpcyBlbnRyeSBpcyB1c2VkLgogICAgICAgICAgICAgSWYgTmVpZ2hib3IgVW5yZWFjaGFiaWxpdHkgRGV0ZWN0aW9uIGlzIG5vdCBpbiB1c2UgKGUuZy4gZm9yCkBAIC0yOTc4LDkgKzI4MzMsNiBAQAogCiBpcHY2U2NvcGVab25lSW5kZXhFbnRyeSBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgSXB2NlNjb3BlWm9uZUluZGV4RW50cnkKLQotCi0KICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KQEAgLTMwMjksOSArMjg4MSw2IEBACiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiVGhlIHpvbmUgaW5kZXggZm9yIHNjb3BlIDMgb24gdGhpcyBpbnRlcmZhY2UuIgogICAgIDo6PSB7IGlwdjZTY29wZVpvbmVJbmRleEVudHJ5IDMgfQogCkBAIC0zMDgwLDkgKzI5MjksNiBAQAogICAgIFNZTlRBWCAgICAgSW5ldFpvbmVJbmRleAogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBjdXJyZW50Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSB6b25lIGluZGV4IGZvciBzY29wZSA5IG9uIHRoaXMgaW50ZXJmYWNlLiIKICAgICA6Oj0geyBpcHY2U2NvcGVab25lSW5kZXhFbnRyeSA5IH0KQEAgLTMxMzIsOCArMjk3OCw2IEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSB0YWJsZSB1c2VkIHRvIGRlc2NyaWJlIHRoZSBkZWZhdWx0IHJvdXRlcnMga25vd24gdG8gdGhpcwogCi0KLQogICAgICAgICAgICAgZW50aXR5LiIKICAgICA6Oj0geyBpcCAzNyB9CiAKQEAgLTMxODIsOSArMzAyNiw2IEBACiAKIGlwRGVmYXVsdFJvdXRlcklmSW5kZXggT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIEludGVyZmFjZUluZGV4Ci0KLQotCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCkBAIC0zMjM0LDggKzMwNzUsNiBAQAogICAgIFJFRkVSRU5DRSAiUkZDIDQyOTEsIHNlY3Rpb24gMi4xIgogICAgIDo6PSB7IGlwRGVmYXVsdFJvdXRlckVudHJ5IDUgfQogCi0KLQogLS0KIC0tIENvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gZm9yIGNvbnN0cnVjdGluZyByb3V0ZXIgYWR2ZXJ0aXNlbWVudHMKIC0tCkBAIC0zMjg0LDkgKzMxMjMsNiBAQAogICAgICAgICAgICAgb2JqZWN0IGlzIHdyaXR0ZW4sIHRoZSBlbnRpdHkgU0hPVUxEIHNhdmUgdGhlIGNoYW5nZSB0bwogICAgICAgICAgICAgbm9uLXZvbGF0aWxlIHN0b3JhZ2UuIgogICAgIElOREVYIHsgaXB2NlJvdXRlckFkdmVydElmSW5kZXggfQotCi0KLQogICAgIDo6PSB7IGlwdjZSb3V0ZXJBZHZlcnRUYWJsZSAxIH0KIAogSXB2NlJvdXRlckFkdmVydEVudHJ5IDo6PSBTRVFVRU5DRSB7CkBAIC0zMzM2LDggKzMxNzIsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgbWF4aW11bSB0aW1lIGFsbG93ZWQgYmV0d2VlbiBzZW5kaW5nIHVuc29saWNpdGVkIHJvdXRlcgogCi0KLQogICAgICAgICAgICAgYWR2ZXJ0aXNlbWVudHMgZnJvbSB0aGlzIGludGVyZmFjZS4iCiAgICAgUkVGRVJFTkNFICJSRkMgMjQ2MSBTZWN0aW9uIDYuMi4xIgogICAgIERFRlZBTCB7IDYwMCB9CkBAIC0zMzg2LDkgKzMyMjAsNiBAQAogICAgIFNZTlRBWCAgICAgVW5zaWduZWQzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1jcmVhdGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKLQotCi0KICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIHZhbHVlIHRvIGJlIHBsYWNlZCBpbiBNVFUgb3B0aW9ucyBzZW50IGJ5IHRoZSByb3V0ZXIgb24KICAgICAgICAgICAgIHRoaXMgaW50ZXJmYWNlLgpAQCAtMzQzOCw4ICszMjY5LDYgQEAKICAgICAgICAgICAgIlRoZSBkZWZhdWx0IHZhbHVlIHRvIGJlIHBsYWNlZCBpbiB0aGUgY3VycmVudCBob3AgbGltaXQKICAgICAgICAgICAgIGZpZWxkIGluIHJvdXRlciBhZHZlcnRpc2VtZW50cyBzZW50IGZyb20gdGhpcyBpbnRlcmZhY2UuCiAKLQotCiAgICAgICAgICAgICBUaGUgdmFsdWUgc2hvdWxkIGJlIHNldCB0byB0aGUgY3VycmVudCBkaWFtZXRlciBvZiB0aGUKICAgICAgICAgICAgIEludGVybmV0LgogCkBAIC0zNDg5LDggKzMzMTgsNiBAQAogCiAtLQogCi0KLQogLS0gSUNNUCBzZWN0aW9uCiAtLQogCkBAIC0zNTM5LDkgKzMzNjYsNiBAQAogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgSVAgdmVyc2lvbiBvZiB0aGUgc3RhdGlzdGljcy4iCi0KLQotCiAgICAgOjo9IHsgaWNtcFN0YXRzRW50cnkgMSB9CiAKIGljbXBTdGF0c0luTXNncyBPQkpFQ1QtVFlQRQpAQCAtMzU5MSw4ICszNDE1LDYgQEAKIC0tCiAtLSBwZXItdmVyc2lvbiwgcGVyLW1lc3NhZ2UgdHlwZSBJQ01QIGNvdW50ZXJzCiAKLQotCiAtLQogCiBpY21wTXNnU3RhdHNUYWJsZSBPQkpFQ1QtVFlQRQpAQCAtMzY0MSw5ICszNDYzLDYgQEAKIGljbXBNc2dTdGF0c1R5cGUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIEludGVnZXIzMiAoMC4uMjU1KQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKLQotCi0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIElDTVAgdHlwZSBmaWVsZCBvZiB0aGUgbWVzc2FnZSB0eXBlIGJlaW5nIGNvdW50ZWQgYnkKQEAgLTM2OTIsOSArMzUxMSw2IEBACiAgICAgICAgICAgICBleHByZXNzZWQgaW4gT0JKRUNUIGNsYXVzZSBmb3JtIGluIHRoaXMgZGVzY3JpcHRpb24KICAgICAgICAgICAgIGNsYXVzZToKIAotCi0KLQogICAgICAgICAgICAgLS0gT0JKRUNUICAgICAgICBpcFN5c3RlbVN0YXRzSVBWZXJzaW9uCiAgICAgICAgICAgICAtLSBTWU5UQVggICAgICAgIEluZXRWZXJzaW9uIHtpcHY0KDEpLCBpcHY2KDIpfQogICAgICAgICAgICAgLS0gREVTQ1JJUFRJT04KQEAgLTM3NDQsOCArMzU2MCw2IEBACiAgICAgICAgICAgICAtLSBERVNDUklQVElPTgogICAgICAgICAgICAgLS0gICAgIFRoaXMgTUlCIHJlcXVpcmVzIHN1cHBvcnQgZm9yIG9ubHkgZ2xvYmFsIGFuZAogCi0KLQogICAgICAgICAgICAgLS0gICAgIG5vbi1nbG9iYWwgSVB2NCBhbmQgSVB2NiBhZGRyZXNzZXMgYW5kIHNvIHRoZSBzaXplCiAgICAgICAgICAgICAtLSAgICAgY2FuIGJlIDQsIDgsIDE2LCBvciAyMCBieXRlcy4KICAgICAgICAgICAgIC0tCkBAIC0zNzk1LDggKzM2MDksNiBAQAogICAgICAgICAgICAiVGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIHN5c3RlbXMgdGhhdCBoYXZlIGFuIGFnZ3JlZ2F0ZQogICAgICAgICAgICAgYmFuZHdpZHRoIG9mIGdyZWF0ZXIgdGhhbiA2NTBNQi4gIEluY2x1ZGluZyB0aGlzIGdyb3VwCiAKLQotCiAgICAgICAgICAgICBkb2VzIG5vdCBhbGxvdyBhbiBlbnRpdHkgdG8gbmVnbGVjdCB0aGUgMzIgYml0IHZlcnNpb25zIG9mCiAgICAgICAgICAgICB0aGVzZSBvYmplY3RzLiIKIApAQCAtMzg0Niw4ICszNjU4LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhpcyBncm91cCBpcyBtYW5kYXRvcnkgZm9yIGFsbCBzeXN0ZW1zIHN1cHBvcnRpbmcgSVB2NCBhbmQKIAotCi0KICAgICAgICAgICAgIGluY2x1ZGluZyB0aGUgaXBJZlN0YXRzSENQYWNrZXRHcm91cC4gIEluY2x1ZGluZyB0aGlzIGdyb3VwCiAgICAgICAgICAgICBkb2VzIG5vdCBhbGxvdyBhbiBlbnRpdHkgdG8gbmVnbGVjdCB0aGUgMzIgYml0IHZlcnNpb25zIG9mCiAgICAgICAgICAgICB0aGVzZSBvYmplY3RzLiIKQEAgLTM4OTYsOSArMzcwNiw2IEBACiAKICAgICBPQkpFQ1QgICAgIGlwdjZJbnRlcmZhY2VFbmFibGVTdGF0dXMKICAgICBNSU4tQUNDRVNTIHJlYWQtb25seQotCi0KLQogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJBbiBhZ2VudCBpcyBub3QgcmVxdWlyZWQgdG8gcHJvdmlkZSB3cml0ZSBhY2Nlc3MgdG8gdGhpcwogICAgICAgICAgICAgb2JqZWN0LiIKQEAgLTM5NDgsOCArMzc1NSw2IEBACiAgICAgICAgICAgICJBbiBhZ2VudCBpcyBub3QgcmVxdWlyZWQgdG8gcHJvdmlkZSB3cml0ZSBvciBjcmVhdGUgYWNjZXNzCiAgICAgICAgICAgICB0byB0aGlzIG9iamVjdC4KIAotCi0KICAgICAgICAgICAgIElmIGFuIGFnZW50IGFsbG93cyB0aGlzIG9iamVjdCB0byBiZSB3cml0dGVuIG9yIGNyZWF0ZWQsIGl0CiAgICAgICAgICAgICBpcyBub3QgcmVxdWlyZWQgdG8gYWxsb3cgdGhpcyBvYmplY3QgdG8gYmUgc2V0IHRvIHJlYWRPbmx5LAogICAgICAgICAgICAgcGVybWFuZW50LCBvciBub25Wb2xhdGlsZS4iCkBAIC0zOTk4LDkgKzM4MDMsNiBAQAogICAgICAgICAgICAiQW4gYWdlbnQgaXMgbm90IHJlcXVpcmVkIHRvIHByb3ZpZGUgd3JpdGUgYWNjZXNzIHRvIHRoaXMKICAgICAgICAgICAgIG9iamVjdC4iCiAKLQotCi0KICAgICBPQkpFQ1QgICAgIGlwdjZSb3V0ZXJBZHZlcnRPdGhlckNvbmZpZ0ZsYWcKICAgICBNSU4tQUNDRVNTIHJlYWQtb25seQogICAgIERFU0NSSVBUSU9OCkBAIC00MDQyLDE2ICszODQ0LDEyIEBACiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIkFuIGFnZW50IGlzIG5vdCByZXF1aXJlZCB0byBwcm92aWRlIHdyaXRlIG9yIGNyZWF0ZSBhY2Nlc3MKICAgICAgICAgICAgIHRvIHRoaXMgb2JqZWN0LiIKLQogICAgIDo6PSB7IGlwTUlCQ29tcGxpYW5jZXMgMiB9CiAKIC0tIHVuaXRzIG9mIGNvbmZvcm1hbmNlCiAKIGlwdjRHZW5lcmFsR3JvdXAgT0JKRUNULUdST1VQCiAgICAgT0JKRUNUUyAgIHsgaXBGb3J3YXJkaW5nLCBpcERlZmF1bHRUVEwsIGlwUmVhc21UaW1lb3V0IH0KLQotCi0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiVGhlIGdyb3VwIG9mIElQdjQtc3BlY2lmaWMgb2JqZWN0cyBmb3IgYmFzaWMgbWFuYWdlbWVudCBvZgpAQCAtNDEwMSw4ICszODk5LDYgQEAKICAgICAgICAgICAgIHZhbHVlLiIKICAgICA6Oj0geyBpcE1JQkdyb3VwcyA3IH0KIAotCi0KIGlwU3lzdGVtU3RhdHNHcm91cCBPQkpFQ1QtR1JPVVAKICAgICBPQkpFQ1RTICAgeyBpcFN5c3RlbVN0YXRzSW5SZWNlaXZlcywKICAgICAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzSW5PY3RldHMsCkBAIC00MTUxLDkgKzM5NDcsNiBAQAogICAgICAgICAgICAgICAgIGlwU3lzdGVtU3RhdHNIQ0luTWNhc3RPY3RldHMsCiAgICAgICAgICAgICAgICAgaXBTeXN0ZW1TdGF0c0hDT3V0TWNhc3RPY3RldHMKIH0KLQotCi0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAiSVAgc3lzdGVtIHdpZGUgc3RhdGlzdGljcyBmb3Igc3lzdGVtcyB0aGF0IG1heSBvdmVyZmxvdyB0aGUKQEAgLTQyMDIsOSArMzk5NSw2IEBACiAgICAgICAgICAgICAgICAgaXBJZlN0YXRzRGlzY29udGludWl0eVRpbWUsIGlwSWZTdGF0c1JlZnJlc2hSYXRlIH0KICAgICBTVEFUVVMgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KLQogICAgICAgICAgICAiSVAgcGVyLWludGVyZmFjZSBzdGF0aXN0aWNzLiIKICAgICA6Oj0geyBpcE1JQkdyb3VwcyAxMyB9CiAKQEAgLTQyNTMsOSArNDA0Myw2IEBACiAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4QWR2UHJlZmVycmVkTGlmZXRpbWUsCiAgICAgICAgICAgICAgICAgaXBBZGRyZXNzUHJlZml4QWR2VmFsaWRMaWZldGltZSB9CiAgICAgU1RBVFVTICAgICBjdXJyZW50Ci0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBncm91cCBvZiBvYmplY3RzIGZvciBwcm92aWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgYWRkcmVzcwogICAgICAgICAgICAgcHJlZml4ZXMgdXNlZCBieSB0aGlzIG5vZGUuIgpAQCAtNDMwNCw5ICs0MDkxLDYgQEAKIAogaXBEZWZhdWx0Um91dGVyR3JvdXAgT0JKRUNULUdST1VQCiAgICAgT0JKRUNUUyAgIHsgaXBEZWZhdWx0Um91dGVyTGlmZXRpbWUsIGlwRGVmYXVsdFJvdXRlclByZWZlcmVuY2UgfQotCi0KLQogICAgIFNUQVRVUyAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICJUaGUgZ3JvdXAgb2Ygb2JqZWN0cyBmb3IgcHJvdmlkaW5nIGluZm9ybWF0aW9uIGFib3V0IGRlZmF1bHQKQEAgLTQzNTYsOCArNDE0MCw2IEBACiAKICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFzIGEgbmV3IElQIHZlcnNpb24tbmV1dHJhbAogCi0KLQogICAgICAgICAgICAgdGFibGUgaGFzIGJlZW4gYWRkZWQuICBJdCBpcyBsb29zZWx5IHJlcGxhY2VkIGJ5CiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzSW5SZWNpZXZlcy4iCiAgICAgOjo9IHsgaXAgMyB9CkBAIC00NDA3LDggKzQxODksNiBAQAogICAgICAgICAgICAgZmluYWwgZGVzdGluYXRpb24uICBJbiBlbnRpdGllcyB3aGljaCBkbyBub3QgYWN0IGFzIElQdjQKICAgICAgICAgICAgIHJvdXRlcnMsIHRoaXMgY291bnRlciB3aWxsIGluY2x1ZGUgb25seSB0aG9zZSBwYWNrZXRzIHdoaWNoCiAKLQotCiAgICAgICAgICAgICB3ZXJlIFNvdXJjZS1Sb3V0ZWQgdmlhIHRoaXMgZW50aXR5LCBhbmQgdGhlIFNvdXJjZS1Sb3V0ZQogICAgICAgICAgICAgb3B0aW9uIHByb2Nlc3Npbmcgd2FzIHN1Y2Nlc3NmdWwuCiAKQEAgLTQ0NTgsOCArNDIzOCw2IEBACiAgICAgICAgICAgICBUaGlzIG9iamVjdCBoYXMgYmVlbiBkZXByZWNhdGVkIGFzIGEgbmV3IElQIHZlcnNpb24gbmV1dHJhbAogICAgICAgICAgICAgdGFibGUgaGFzIGJlZW4gYWRkZWQuICBJdCBpcyBsb29zZWx5IHJlcGxhY2VkIGJ5CiAKLQotCiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzSW5kZWxpdmVycy4iCiAgICAgOjo9IHsgaXAgOSB9CiAKQEAgLTQ1MDksOCArNDI4Nyw2IEBACiAKICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFzIGEgbmV3IElQIHZlcnNpb24tbmV1dHJhbAogCi0KLQogICAgICAgICAgICAgdGFibGUgaGFzIGJlZW4gYWRkZWQuICBJdCBpcyBsb29zZWx5IHJlcGxhY2VkIGJ5CiAgICAgICAgICAgICBpcFN5c3RlbVN0YXRzT3V0Tm9Sb3V0ZXMuIgogICAgIDo6PSB7IGlwIDEyIH0KQEAgLTQ1NTksOSArNDMzNSw2IEBACiAKIGlwRnJhZ09LcyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgIGRlcHJlY2F0ZWQKICAgICBERVNDUklQVElPTgpAQCAtNDYxMSw4ICs0Mzg0LDYgQEAKICAgICAgICAgICAgIGZvciBkaXNjYXJkaW5nIHN1Y2ggYW4gZW50cnkgY291bGQgYmUgdG8gZnJlZS11cCBidWZmZXIKICAgICAgICAgICAgIHNwYWNlIGZvciBvdGhlciByb3V0aW5nIGVudHJpZXMuCiAKLQotCiAgICAgICAgICAgICBUaGlzIG9iamVjdCB3YXMgZGVmaW5lZCBpbiBwcmUtSVB2NiB2ZXJzaW9ucyBvZiB0aGUgSVAgTUlCLgogICAgICAgICAgICAgSXQgd2FzIGltcGxpY2l0bHkgSVB2NCBvbmx5LCBidXQgdGhlIG9yaWdpbmFsIHNwZWNpZmljYXRpb25zCiAgICAgICAgICAgICBkaWQgbm90IGluZGljYXRlIHRoaXMgcHJvdG9jb2wgcmVzdHJpY3Rpb24uICBJbiBvcmRlciB0bwpAQCAtNDY2MSw5ICs0NDMyLDYgQEAKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCi0KLQotCiAgICAgICAgICAgICJUaGUgSVB2NCBhZGRyZXNzIHRvIHdoaWNoIHRoaXMgZW50cnkncyBhZGRyZXNzaW5nCiAgICAgICAgICAgICBpbmZvcm1hdGlvbiBwZXJ0YWlucy4iCiAgICAgOjo9IHsgaXBBZGRyRW50cnkgMSB9CkBAIC00NzEzLDggKzQ0ODEsNiBAQAogICAgICAgICAgICAgb24gdGhpcyBpbnRlcmZhY2UuIgogICAgIDo6PSB7IGlwQWRkckVudHJ5IDUgfQogCi0KLQogLS0gdGhlIGRlcHJlY2F0ZWQgSVB2NCBBZGRyZXNzIFRyYW5zbGF0aW9uIHRhYmxlCiAKIC0tIFRoZSBBZGRyZXNzIFRyYW5zbGF0aW9uIHRhYmxlcyBjb250YWluIHRoZSBJcEFkZHJlc3MgdG8KQEAgLTQ3NjQsOCArNDUzMCw2IEBACiAgICAgICAgICAgICBlZmZlY3RpdmUuICBUaGUgaW50ZXJmYWNlIGlkZW50aWZpZWQgYnkgYSBwYXJ0aWN1bGFyIHZhbHVlCiAgICAgICAgICAgICBvZiB0aGlzIGluZGV4IGlzIHRoZSBzYW1lIGludGVyZmFjZSBhcyBpZGVudGlmaWVkIGJ5IHRoZQogCi0KLQogICAgICAgICAgICAgc2FtZSB2YWx1ZSBvZiB0aGUgSUYtTUlCJ3MgaWZJbmRleC4KIAogICAgICAgICAgICAgVGhpcyBvYmplY3QgcHJlZGF0ZXMgdGhlIHJ1bGUgbGltaXRpbmcgaW5kZXggb2JqZWN0cyB0byBhCkBAIC00ODE1LDggKzQ1NzksNiBAQAogCiAgICAgICAgICAgICBTZXR0aW5nIHRoaXMgb2JqZWN0IHRvIHRoZSB2YWx1ZSBpbnZhbGlkKDIpIGhhcyB0aGUgZWZmZWN0CiAKLQotCiAgICAgICAgICAgICBvZiBpbnZhbGlkYXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgZW50cnkgaW4gdGhlCiAgICAgICAgICAgICBpcE5ldFRvTWVkaWFUYWJsZS4gIFRoYXQgaXMsIGl0IGVmZmVjdGl2ZWx5IGRpcy1hc3NvY2lhdGVzCiAgICAgICAgICAgICB0aGUgaW50ZXJmYWNlIGlkZW50aWZpZWQgd2l0aCBzYWlkIGVudHJ5IGZyb20gdGhlIG1hcHBpbmcKQEAgLTQ4NjUsOSArNDYyNyw2IEBACiAgICAgICAgICAgICBpY21wU3RhdHNJbkVycm9ycy4iCiAgICAgOjo9IHsgaWNtcCAyIH0KIAotCi0KLQogaWNtcEluRGVzdFVucmVhY2hzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQpAQCAtNDkxNyw4ICs0Njc2LDYgQEAKICAgICAgICAgICAgIHRoZSBpY21wTXNnU3RhdHNUYWJsZS4iCiAgICAgOjo9IHsgaWNtcCA2IH0KIAotCi0KIGljbXBJblJlZGlyZWN0cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgQ291bnRlcjMyCiAgICAgTUFYLUFDQ0VTUyByZWFkLW9ubHkKQEAgLTQ5NjcsOSArNDcyNCw2IEBACiAgICAgICAgICAgICB0aGUgaWNtcE1zZ1N0YXRzVGFibGUuIgogICAgIDo6PSB7IGljbXAgMTAgfQogCi0KLQotCiBpY21wSW5UaW1lc3RhbXBSZXBzIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBDb3VudGVyMzIKICAgICBNQVgtQUNDRVNTIHJlYWQtb25seQpAQCAtNTAxOCw5ICs0NzcyLDYgQEAKICAgICAgICAgICAgIFRoaXMgb2JqZWN0IGhhcyBiZWVuIGRlcHJlY2F0ZWQsIGFzIGEgbmV3IElQIHZlcnNpb24tbmV1dHJhbAogICAgICAgICAgICAgdGFibGUgaGFzIGJlZW4gYWRkZWQuICBJdCBpcyBsb29zZWx5IHJlcGxhY2VkIGJ5CiAgICAgICAgICAgICBpY21wU3RhdHNPdXRNc2dzLiIKLQotCi0KICAgICA6Oj0geyBpY21wIDE0IH0KIAogaWNtcE91dEVycm9ycyBPQkpFQ1QtVFlQRQpAQCAtNTA2OSw5ICs0ODIwLDYgQEAKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCi0KLQotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgICAgIlRoZSBudW1iZXIgb2YgSUNNUCBQYXJhbWV0ZXIgUHJvYmxlbSBtZXNzYWdlcyBzZW50LgogCkBAIC01MTIwLDkgKzQ4NjgsNiBAQAogCiBpY21wT3V0RWNob1JlcHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KQEAgLTUxNzEsOSArNDkxNiw2IEBACiAKIGljbXBPdXRBZGRyTWFza1JlcHMgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIENvdW50ZXIzMgotCi0KLQogICAgIE1BWC1BQ0NFU1MgcmVhZC1vbmx5CiAgICAgU1RBVFVTICAgICBkZXByZWNhdGVkCiAgICAgREVTQ1JJUFRJT04KQEAgLTUyMjIsOSArNDk2NCw2IEBACiAgICAgICAgICAgICJUaGUgaXAgZ3JvdXAgb2Ygb2JqZWN0cyBwcm92aWRpbmcgZm9yIGJhc2ljIG1hbmFnZW1lbnQgb2YgSVAKICAgICAgICAgICAgIGVudGl0aWVzLCBleGNsdXNpdmUgb2YgdGhlIG1hbmFnZW1lbnQgb2YgSVAgcm91dGVzLgogCi0KLQotCiAgICAgICAgICAgICBBcyBwYXJ0IG9mIHRoZSB2ZXJzaW9uIGluZGVwZW5kZW5jZSwgdGhpcyBncm91cCBoYXMgYmVlbgogICAgICAgICAgICAgZGVwcmVjYXRlZC4gICIKICAgICA6Oj0geyBpcE1JQkdyb3VwcyAxIH0KZGlmZiAtLWdpdCBhL21pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQgYi9taWJzL0lQVjYtRkxPVy1MQUJFTC1NSUIudHh0CmluZGV4IGYzMGY0Y2EuLjZmYjM2NTkgMTAwNjQ0Ci0tLSBhL21pYnMvSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQKKysrIGIvbWlicy9JUFY2LUZMT1ctTEFCRUwtTUlCLnR4dApAQCAtMTUsMTAgKzE1LDYgQEAKICAgICAgICAgICAgICAgICAgICAzNDYxIEdMIExpbnNjaG90ZW4KICAgICAgICAgICAgICAgICAgICBOZXRoZXJsYW5kcwogCi0KLQotCi0KICAgICAgICAgICAgICAgICAgICBQaG9uZTogKzMxIDM0OC00MDctNzc1CiAgICAgICAgICAgICAgICAgICAgRU1haWw6IGJ3aWpuZW5AbHVjZW50LmNvbQogCkBAIC0zNSw3ICszMSw2IEBACiAKICAgICBSRVZJU0lPTiAgICAgICIyMDAzMDgyODAwMDBaIiAgLS0gMjggQXVndXN0IDIwMDMKICAgICBERVNDUklQVElPTiAgICJJbml0aWFsIHZlcnNpb24sIHB1Ymxpc2hlZCBhcyBSRkMgMzU5NS4iCi0KICAgICA6Oj0geyBtaWItMiAxMDMgfQogCiBJUHY2Rmxvd0xhYmVsICAgICAgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgpkaWZmIC0tZ2l0IGEvbWlicy9NYWtlZmlsZS5pbiBiL21pYnMvTWFrZWZpbGUuaW4KaW5kZXggZWE5N2U2Ny4uZjE4NTAwMiAxMDA2NDQKLS0tIGEvbWlicy9NYWtlZmlsZS5pbgorKysgYi9taWJzL01ha2VmaWxlLmluCkBAIC0zNiwxMSArMzYsMTIgQEAKIAlIT1NULVJFU09VUkNFUy1NSUIudHh0IEhPU1QtUkVTT1VSQ0VTLVRZUEVTLnR4dCBcCiAJUk1PTi1NSUIudHh0IFwKIAlJUFY2LVRDLnR4dCBJUFY2LU1JQi50eHQgSVBWNi1JQ01QLU1JQi50eHQgSVBWNi1UQ1AtTUlCLnR4dCBcCi0JSVBWNi1VRFAtTUlCLnR4dCBcCisJSVBWNi1VRFAtTUlCLnR4dCBJUFY2LUZMT1ctTEFCRUwtTUlCLnR4dCBUVU5ORUwtTUlCLnR4dCBcCiAJRElTTUFOLUVWRU5ULU1JQi50eHQgRElTTUFOLVNDUklQVC1NSUIudHh0IERJU01BTi1TQ0hFRFVMRS1NSUIudHh0IFwKIAlOT1RJRklDQVRJT04tTE9HLU1JQi50eHQgU05NUC1VU00tQUVTLU1JQi50eHQgXAogCVNOTVAtVVNNLURILU9CSkVDVFMtTUlCLnR4dCBcCi0JU0NUUC1NSUIudHh0CisJU05NUC1UTFMtVE0tTUlCLnR4dCBTTk1QLVRTTS1NSUIudHh0IFwKKwlTQ1RQLU1JQi50eHQgQlJJREdFLU1JQi50eHQKIAogTkVUU05NUE1JQlMgPSBORVQtU05NUC1UQy50eHQgTkVULVNOTVAtTUlCLnR4dCBORVQtU05NUC1BR0VOVC1NSUIudHh0IFwKIAlORVQtU05NUC1FWEFNUExFUy1NSUIudHh0IE5FVC1TTk1QLUVYVEVORC1NSUIudHh0IE5FVC1TTk1QLVBBU1MtTUlCLnR4dApkaWZmIC0tZ2l0IGEvbWlicy9NYWtlZmlsZS5taWIgYi9taWJzL01ha2VmaWxlLm1pYgppbmRleCAxMzYxOTljLi42ZDMxMjQyIDEwMDY0NAotLS0gYS9taWJzL01ha2VmaWxlLm1pYgorKysgYi9taWJzL01ha2VmaWxlLm1pYgpAQCAtMTQsMTkgKzE0LDI2IEBACiAJU05NUC1GUkFNRVdPUkstTUlCLnR4dCBTTk1QLU1QRC1NSUIudHh0IFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIudHh0IFwKIAlTTk1QLVZJRVctQkFTRUQtQUNNLU1JQi50eHQgU05NUC1DT01NVU5JVFktTUlCLnR4dCBcCiAJU05NUC1UQVJHRVQtTUlCLnR4dCBTTk1QLU5PVElGSUNBVElPTi1NSUIudHh0IFNOTVAtUFJPWFktTUlCLnR4dCBcCisJU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0IFNOTVAtVVNNLUFFUy1NSUIudHh0IFwKKwlTTk1QLVRMUy1UTS1NSUIudHh0IFwKIAlBR0VOVFgtTUlCLnR4dCBTTVVYLU1JQi50eHQgXAotCURJU01BTi1TQ1JJUFQtTUlCLnR4dCAgRElTTUFOLVNDSEVEVUxFLU1JQi50eHQgXAorCURJU01BTi1TQ1JJUFQtTUlCLnR4dCBESVNNQU4tU0NIRURVTEUtTUlCLnR4dCBcCisJRElTTUFOLVBJTkctTUlCLnR4dCBESVNNQU4tVFJBQ0VST1VURS1NSUIudHh0IFwKKwlESVNNQU4tTlNMT09LVVAtTUlCLnR4dCBESVNNQU4tRVZFTlQtTUlCLnR4dCBcCisJRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dCBOT1RJRklDQVRJT04tTE9HLU1JQi50eHQgXAogCUlBTkEtTEFOR1VBR0UtTUlCLnR4dCBJQU5BLUFERFJFU1MtRkFNSUxZLU5VTUJFUlMtTUlCLnR4dCBcCiAJSUYtTUlCLnR4dCBJRi1JTlZFUlRFRC1TVEFDSy1NSUIudHh0IFwKIAlJUC1NSUIudHh0IElQLUZPUldBUkQtTUlCLnR4dCBUQ1AtTUlCLnR4dCBVRFAtTUlCLnR4dCBcCi0JSUFOQWlmVHlwZS1NSUIudHh0IEV0aGVyTGlrZS1NSUIudHh0IFwKKwlJQU5BaWZUeXBlLU1JQi50eHQgSUFOQS1SVFBST1RPLU1JQi50eHQgRXRoZXJMaWtlLU1JQi50eHQgXAogCUlQVjYtVEMudHh0IElQVjYtTUlCLnR4dCBJUFY2LUlDTVAtTUlCLnR4dCBcCi0JSVBWNi1UQ1AtTUlCLnR4dCBJUFY2LVVEUC1NSUIudHh0IFwKKwlJUFY2LVRDUC1NSUIudHh0IElQVjYtVURQLU1JQi50eHQgSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQgXAogCUhPU1QtUkVTT1VSQ0VTLU1JQi50eHQgSE9TVC1SRVNPVVJDRVMtVFlQRVMudHh0IFwKIAlORVRXT1JLLVNFUlZJQ0VTLU1JQi50eHQgTVRBLU1JQi50eHQgXAogCVJNT04tTUlCLnR4dCBcCi0JUkZDMTE1NS1TTUkudHh0IFJGQzEyMTMtTUlCLnR4dCBcCi0JU0NUUC1NSUIudHh0CisJVFVOTkVMLU1JQi50eHQgXAorCVRSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQgXAorCVJGQzExNTUtU01JLnR4dCBSRkMxMjEzLU1JQi50eHRcCisJU0NUUC1NSUIudHh0IEJSSURHRS1NSUIudHh0CiAKIE1JQkRFUFMgPSBNYWtlZmlsZS5taWIgbWliZmV0Y2ggc21pc3RyaXAKIApAQCAtNjUsNiArNzIsMTUgQEAKIFNOTVAtQ09NTVVOSVRZLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI1NzYKIAorU05NUC1VU00tQUVTLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDM4MjYKKworU05NUC1UTFMtVE0tTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNjM1MworCitTTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI3ODYKKwogU05NUHYyLVNNSS50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI1NzggU05NUHYyLVNNSQogCkBAIC05Miw2ICsxMDgsMTggQEAKIERJU01BTi1TQ1JJUFQtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMzE2NQogCitESVNNQU4tRVhQUkVTU0lPTi1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyOTgyCisKK0RJU01BTi1FVkVOVC1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyOTgxCisKK0RJU01BTi1OU0xPT0tVUC1NSUIudHh0IERJU01BTi1UUkFDRVJPVVRFLU1JQi50eHQgRElTTUFOLVBJTkctTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgNDU2MAorCitOT1RJRklDQVRJT04tTE9HLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDMwMTQKKwogSUYtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggJChSRkNIT1NUKSAkKFJGQ0RJUikgMjg2MwogCkBAIC0xMTAsNiArMTM4LDkgQEAKIElBTkFpZlR5cGUtTUlCLnR4dDoJJChNSUJERVBTKQogCS4vbWliZmV0Y2ggLXggJChJQU5BSE9TVCkgJChJQU5BRElSKSBpYW5haWZ0eXBlLW1pYgogCitJQU5BLVJUUFJPVE8tTUlCLnR4dDoJJChNSUJERVBTKQorCS4vbWliZmV0Y2ggLXggJChJQU5BSE9TVCkgJChJQU5BRElSKSBpYW5haXByb3V0ZXByb3RvY29sLW1pYgorCiBJQU5BLUxBTkdVQUdFLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoIC14ICQoSUFOQUhPU1QpICQoSUFOQURJUikgaWFuYWxhbmd1YWdlLW1pYgogCkBAIC0xMTcsMTYgKzE0OCwyMiBAQAogCS4vbWliZmV0Y2ggLXggJChJQU5BSE9TVCkgJChJQU5BRElSKSBpYW5hYWRkcmVzc2ZhbWlseW51bWJlcnMtbWliCiAKIElQLU1JQi50eHQ6CSQoTUlCREVQUykKLQkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDIwMTEKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQyOTMKIAogSVAtRk9SV0FSRC1NSUIudHh0OgkkKE1JQkRFUFMpCi0JLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyMDk2CisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0MjkyCiAKIFRDUC1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0MDIyCiAKIFVEUC1NSUIudHh0OgkkKE1JQkRFUFMpCi0JLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyMDEzCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0MTEzCisKK1RVTk5FTC1NSUIudHh0OgkkKE1JQkRFUFMpCisJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSA0MDg3CisKK1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDM0MTkKIAogSVBWNi1UQy50eHQgSVBWNi1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAyNDY1CkBAIC0xNDAsNiArMTc3LDkgQEAKIElQVjYtVURQLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI0NTQKIAorSVBWNi1GTE9XLUxBQkVMLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDM1OTUKKwogSE9TVC1SRVNPVVJDRVMtTUlCLnR4dCBIT1NULVJFU09VUkNFUy1UWVBFUy50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDI3OTAKIApAQCAtMTU4LDkgKzE5OCwxMiBAQAogUkZDMTIxMy1NSUIudHh0OgkkKE1JQkRFUFMpCiAJLi9taWJmZXRjaCAkKFJGQ0hPU1QpICQoUkZDRElSKSAxMjEzCiAKLVNDVFAudHh0OgkkKE1JQkRFUFMpCitTQ1RQLU1JQi50eHQ6CSQoTUlCREVQUykKIAkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDM4NzMKIAorQlJJREdFLU1JQi50eHQ6CSQoTUlCREVQUykKKwkuL21pYmZldGNoICQoUkZDSE9TVCkgJChSRkNESVIpIDQxODgKKwogaWFuYW1pYnM6CWlhbmFsaXN0CiAJWyAtZCAkKEFMTERJUikgXSB8fCBta2RpciAkKEFMTERJUikKIAljYXQgaWFuYWxpc3QgfCB3aGlsZSByZWFkIGZpbGUgbWliczsgXApkaWZmIC0tZ2l0IGEvbWlicy9ORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dCBiL21pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNlYWNhZAotLS0gL2Rldi9udWxsCisrKyBiL21pYnMvTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQi50eHQKQEAgLTAsMCArMSw4MyBAQAorTkVULVNOTVAtUEVSSU9ESUMtTk9USUZZLU1JQiBERUZJTklUSU9OUyA6Oj0gQkVHSU4KKworLS0KKy0tIE9iamVjdHMgZm9yIHBlcmlvZGljIG5vdGlmaWNhdGlvbnMgY29udGFpbmluZyBkYXRhIHBheWxvYWRzCistLQorCitJTVBPUlRTCisgICAgbmV0U25tcE1vZHVsZUlEcywgbmV0U25tcE9iamVjdHMsIG5ldFNubXBOb3RpZmljYXRpb25zIEZST00gTkVULVNOTVAtTUlCCisKKyAgICBPQkpFQ1QtVFlQRSwgTk9USUZJQ0FUSU9OLVRZUEUsIE1PRFVMRS1JREVOVElUWSwgSW50ZWdlcjMyLCBVbnNpZ25lZDMyCisgICAgICAgIEZST00gU05NUHYyLVNNSQorCisgICAgRGlzcGxheVN0cmluZyBGUk9NIFNOTVB2Mi1UQzsKKworCituZXRTbm1wUGVyaW9kaWNOb3RpZnlNaWIgTU9EVUxFLUlERU5USVRZCisgICAgTEFTVC1VUERBVEVEICIyMDExMDQyMDAwMDBaIgorICAgIE9SR0FOSVpBVElPTiAid3d3Lm5ldC1zbm1wLm9yZyIKKyAgICBDT05UQUNULUlORk8gICAgCisJICJwb3N0YWw6ICAgV2VzIEhhcmRha2VyCisgICAgICAgICAgICAgICAgICAgIFAuTy4gQm94IDM4MgorICAgICAgICAgICAgICAgICAgICBEYXZpcyBDQSAgOTU2MTcKKworICAgICAgICAgIGVtYWlsOiAgICBuZXQtc25tcC1jb2RlcnNAbGlzdHMuc291cmNlZm9yZ2UubmV0IgorICAgIERFU0NSSVBUSU9OCisJIk9iamVjdHMgZm9yIHBlcmlvZGljIG5vdGlmaWNhdGlvbnMgY29udGFpbmluZyBkYXRhIHBheWxvYWRzIgorICAgIFJFVklTSU9OICAgICAiMjAxMTA0MjAwMDAwWiIKKyAgICBERVNDUklQVElPTgorCSJGaXJzdCByZXZpc2lvbi4iCisgICAgOjo9IHsgbmV0U25tcE1vZHVsZUlEcyA1IH0KKworbnNQTlNjYWxhcnMgICAgICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7bmV0U25tcFBlcmlvZGljTm90aWZ5TWliIDF9Cituc1BOVGFibGVzICAgICAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHtuZXRTbm1wUGVyaW9kaWNOb3RpZnlNaWIgMn0KK25zUE5vdGlmeU9iamVjdHMgICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge25ldFNubXBQZXJpb2RpY05vdGlmeU1pYiAzfQorbnNQTm90aWZpY2F0aW9uUHJlZml4ICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7bmV0U25tcFBlcmlvZGljTm90aWZ5TWliIDR9Cituc1BOb3RpZmljYXRpb25zICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHtuc1BOb3RpZmljYXRpb25QcmVmaXggMH0KK25zUE5vdGlmaWNhdGlvbk9iamVjdHMgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0ge25zUE5vdGlmaWNhdGlvblByZWZpeCAxfQorCistLQorLS0gTm90aWZpY2F0aW9uIERlZmluaXRpb25zCistLQorCituc05vdGlmeVBlcmlvZGljTm90aWZpY2F0aW9uICAgICAgICBOT1RJRklDQVRJT04tVFlQRQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04KKwkiRGF0YSBkZWxpdmVyeSBub3RpZmljYXRpb24gZnJvbSBhIGNvbmZpZ3VyZWQgbGlzdCBvZiBwZXJpb2RpYworCWRhdGEgc2V0cyB0byBkZWxpdmVyLiAgU2VlIHRoZSBzbm1wZC5jb25mIG1hbnVhbCBwYWdlIGZvcgorCWRldGFpbHMgYWJvdXQgY29uZmlndXJpbmcgTmV0LVNOTVAgYWdlbnRzIGZvciBzZW5kaW5nIHRoZXNlCisJbm90aWZpY2F0aW9ucyBvdXQgb24gYSByZWd1bGFyIGJhc2lzLiIKKyAgICA6Oj0geyBuc1BOb3RpZmljYXRpb25zIDEgfQorCistLQorLS0gT2JqZWN0cyB0aGF0IGNhbiBiZSBwdXQgaW50byB0aGUgbm90aWZpY2F0aW9ucworLS0KKworbnNQTlBlcmlvZGljVGltZSBPQkpFQ1QtVFlQRQorICAgICBTWU5UQVggICAgICBVbnNpZ25lZDMyCisgICAgIE1BWC1BQ0NFU1MgIGFjY2Vzc2libGUtZm9yLW5vdGlmeQorICAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgIERFU0NSSVBUSU9OCisgICAgICAgICAiVGhlIG51bWJlciBvZiBzZWNvbmRzIGJldHdlZW4gbm90aWZpY2F0aW9ucyBjb250YWluaW5nIHRoaXMgZGF0YSBzZXQuIgorICAgICA6Oj0geyBuc1BOb3RpZnlPYmplY3RzIDEgfQorCituc1BOb3RpZnlNZXNzYWdlTnVtYmVyIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MgIGFjY2Vzc2libGUtZm9yLW5vdGlmeQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiSW5kaWNhdGVzIHRoaXMgaXMgdGhlIE50aCBub3RpZmljYXRpb24gaW4gYSBsb25nZXIgc2VxdWVuY2UKKyAgICAgICAgb2Ygbm90aWZpY2F0aW9ucyIKKyAgICA6Oj0geyBuc1BOb3RpZnlPYmplY3RzIDIgfQorCituc1BOb3RpZnlNYXhNZXNzYWdlTnVtYmVyIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MgIGFjY2Vzc2libGUtZm9yLW5vdGlmeQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG1heGltdW0gbnVtYmVyIG9mIG1lc3NhZ2VzIHRoaXMgbm90aWZpY2F0aW9uIHNlcXVlbmNlCisgICAgICAgIHdpbGwgY29udGFpbi4iCisgICAgOjo9IHsgbnNQTm90aWZ5T2JqZWN0cyAzIH0KKworCitFTkQKZGlmZiAtLWdpdCBhL21pYnMvTkVULVNOTVAtVEMudHh0IGIvbWlicy9ORVQtU05NUC1UQy50eHQKaW5kZXggZjNmZjVkZi4uNDZmNzMwMiAxMDA2NDQKLS0tIGEvbWlicy9ORVQtU05NUC1UQy50eHQKKysrIGIvbWlicy9ORVQtU05NUC1UQy50eHQKQEAgLTEyMCw1ICsxMjAsOSBAQAogbmV0U25tcFVEUElQdjZEb21haW4JT0JKRUNUIElERU5USUZJRVIgOjo9IHsgbmV0U25tcERvbWFpbnMgNCB9IC0tIG9ic29sZXRlCiBuZXRTbm1wVENQSVB2NkRvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyA1IH0gLS0gb2Jzb2xldGUKIG5ldFNubXBDYWxsYmFja0RvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyA2IH0KK25ldFNubXBBbGlhc0RvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyA3IH0KK25ldFNubXBEVExTVURQRG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDggfQorbmV0U25tcERUTFNTQ1RQRG9tYWluCU9CSkVDVCBJREVOVElGSUVSIDo6PSB7IG5ldFNubXBEb21haW5zIDkgfQorbmV0U25tcFRMU1RDUERvbWFpbglPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBuZXRTbm1wRG9tYWlucyAxMCB9CiAKIEVORApkaWZmIC0tZ2l0IGEvbWlicy9OT1RJRklDQVRJT04tTE9HLU1JQi50eHQgYi9taWJzL05PVElGSUNBVElPTi1MT0ctTUlCLnR4dAppbmRleCBjNjBiN2QyLi5jN2RhOTM0IDEwMDY0NAotLS0gYS9taWJzL05PVElGSUNBVElPTi1MT0ctTUlCLnR4dAorKysgYi9taWJzL05PVElGSUNBVElPTi1MT0ctTUlCLnR4dApAQCAtMjMsNyArMjMsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICJUaGUgTUlCIG1vZHVsZSBmb3IgbG9nZ2luZyBTTk1QIE5vdGlmaWNhdGlvbnMsIHRoYXQgaXMsIFRyYXBzCiAKLQogICAgICBhbmQgSW5mb3Jtcy4iCiAtLSBSZXZpc2lvbiBIaXN0b3J5CiAKQEAgLTMyLDcgKzMxLDYgQEAKICAgICAgICAgICAgICAgIFB1Ymxpc2hlZCBhcyBSRkMgMzAxNCIKICAgICA6Oj0geyBtaWItMiA5MiB9CiAKLQogbm90aWZpY2F0aW9uTG9nTUlCT2JqZWN0cyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBub3RpZmljYXRpb25Mb2dNSUIgMSB9CiAKIG5sbUNvbmZpZyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBub3RpZmljYXRpb25Mb2dNSUJPYmplY3RzIDEgfQpAQCAtNzIsOCArNzAsNiBAQAogCiBubG1Db25maWdHbG9iYWxBZ2VPdXQgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBVbnNpZ25lZDMyCi0KLQogICAgIFVOSVRTICAgICAgICJtaW51dGVzIgogICAgIE1BWC1BQ0NFU1MgIHJlYWQtd3JpdGUKICAgICBTVEFUVVMgICAgICBjdXJyZW50CkBAIC05Myw3ICs4OSw2IEBACiAgICAgREVGVkFMIHsgMTQ0MCB9ICAtLSAyNCBob3VycwogICAgIDo6PSB7IG5sbUNvbmZpZyAyIH0KIAotCiAtLQogLS0gQmFzaWMgTG9nIENvbmZpZ3VyYXRpb24gVGFibGUKIC0tCkBAIC0xMjIsOCArMTE3LDYgQEAKICAgICBubG1Db25maWdMb2dGaWx0ZXJOYW1lICAgIFNubXBBZG1pblN0cmluZywKICAgICBubG1Db25maWdMb2dFbnRyeUxpbWl0ICAgIFVuc2lnbmVkMzIsCiAgICAgbmxtQ29uZmlnTG9nQWRtaW5TdGF0dXMgICBJTlRFR0VSLAotCi0KICAgICBubG1Db25maWdMb2dPcGVyU3RhdHVzICAgIElOVEVHRVIsCiAgICAgbmxtQ29uZmlnTG9nU3RvcmFnZVR5cGUgICBTdG9yYWdlVHlwZSwKICAgICBubG1Db25maWdMb2dFbnRyeVN0YXR1cyAgIFJvd1N0YXR1cwpAQCAtMTcyLDggKzE2NSw2IEBACiAgICAgIE5vdGlmaWNhdGlvbnMgaW4gdGhlIGxvZywgdGhlIG9sZGVzdCBOb3RpZmljYXRpb25zIGFyZSBkaXNjYXJkZWQKICAgICAgdG8gYnJpbmcgdGhlIGxvZyBkb3duIHRvIHRoZSBuZXcgbGltaXQuCiAKLQotCiAgICAgIEEgdmFsdWUgb2YgMCBpbmRpY2F0ZXMgbm8gbGltaXQuCiAKICAgICAgUGxlYXNlIGJlIGF3YXJlIHRoYXQgY29udGVudGlvbiBiZXR3ZWVuIG11bHRpcGxlIG1hbmFnZXJzCkBAIC0yMjIsOCArMjEzLDYgQEAKICAgICA6Oj0geyBubG1Db25maWdMb2dFbnRyeSA2IH0KIAogbmxtQ29uZmlnTG9nRW50cnlTdGF0dXMgT0JKRUNULVRZUEUKLQotCiAgICAgU1lOVEFYICAgICBSb3dTdGF0dXMKICAgICBNQVgtQUNDRVNTIHJlYWQtY3JlYXRlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CkBAIC0yNzIsOCArMjYxLDYgQEAKIG5sbVN0YXRzTG9nVGFibGUgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBObG1TdGF0c0xvZ0VudHJ5CiAgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKLQotCiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICJBIHRhYmxlIG9mIE5vdGlmaWNhdGlvbiBsb2cgc3RhdGlzdGljcyBlbnRyaWVzLiIKQEAgLTMxNSwxMyArMzAyLDEzIEBACiAgICAgIG5sbUNvbmZpZ0dsb2JhbEFnZU91dC4iCiAgICAgOjo9IHsgbmxtU3RhdHNMb2dFbnRyeSAyIH0KIAotCiAtLQogLS0gTG9nIFNlY3Rpb24KIC0tCiAKIC0tCiAtLSBMb2cgVGFibGUKKwogLS0KIAogbmxtTG9nVGFibGUgT0JKRUNULVRZUEUKQEAgLTM3MCw4ICszNTcsNiBAQAogICAgIElOREVYICAgICAgIHsgbmxtTG9nTmFtZSwgbmxtTG9nSW5kZXggfQogICAgIDo6PSB7IG5sbUxvZ1RhYmxlIDEgfQogCi0KLQogTmxtTG9nRW50cnkgOjo9IFNFUVVFTkNFIHsKICAgICBubG1Mb2dJbmRleCAgICAgICAgICAgICAgICBVbnNpZ25lZDMyLAogICAgIG5sbUxvZ1RpbWUgICAgICAgICAgICAgICAgIFRpbWVTdGFtcCwKQEAgLTQyMSw3ICs0MDYsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICJUaGUgaWRlbnRpZmljYXRpb24gb2YgdGhlIFNOTVAgZW5naW5lIGF0IHdoaWNoIHRoZSBOb3RpZmljYXRpb24KIAotCiAgICAgIG9yaWdpbmF0ZWQuCiAKICAgICAgSWYgdGhlIGxvZyBjYW4gY29udGFpbiBOb3RpZmljYXRpb25zIGZyb20gb25seSBvbmUgZW5naW5lCkBAIC00NzAsOCArNDU0LDYgQEAKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCiAgICAgICJJZiB0aGUgTm90aWZpY2F0aW9uIHdhcyByZWNlaXZlZCBpbiBhIHByb3RvY29sIHdoaWNoIGhhcyBhCiAgICAgICBjb250ZXh0RW5naW5lSUQgZWxlbWVudCBsaWtlIFNOTVB2MywgdGhpcyBvYmplY3QgaGFzIHRoYXQgdmFsdWUuCiAgICAgICBPdGhlcndpc2UgaXRzIHZhbHVlIGlzIGEgemVyby1sZW5ndGggc3RyaW5nLiIKQEAgLTUyMSw3ICs1MDMsNiBAQAogCiBObG1Mb2dWYXJpYWJsZUVudHJ5IDo6PSBTRVFVRU5DRSB7CiAKLQogICAgIG5sbUxvZ1ZhcmlhYmxlSW5kZXggICAgICAgICAgICAgIFVuc2lnbmVkMzIsCiAgICAgbmxtTG9nVmFyaWFibGVJRCAgICAgICAgICAgICAgICAgT0JKRUNUIElERU5USUZJRVIsCiAgICAgbmxtTG9nVmFyaWFibGVWYWx1ZVR5cGUgICAgICAgICAgSU5URUdFUiwKQEAgLTU3MCw4ICs1NTEsNiBAQAogICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCi0KICAgICAgIlRoZSB2YWx1ZSB3aGVuIG5sbUxvZ1ZhcmlhYmxlVHlwZSBpcyAnY291bnRlcjMyJy4iCiAgICAgOjo9IHsgbmxtTG9nVmFyaWFibGVFbnRyeSA0IH0KIApAQCAtNjIxLDcgKzYwMCw2IEBACiAgICAgIElQdjYgYWRkcmVzc2VzIGFyZSByZXByZXNlbnRlZCB1c2luZyBUQWRkcmVzcyBvcgogICAgICBJbmV0QWRkcmVzcywgYW5kIHNvIHRoZSB1bmRlcmx5aW5nIGRhdGF0eXBlIGlzCiAKLQogICAgICBPQ1RFVCBTVFJJTkcsIGFuZCB0aGVpciB2YWx1ZSB3b3VsZCBiZSBzdG9yZWQgaW4KICAgICAgdGhlIG5sbUxvZ1ZhcmlhYmxlT2N0ZXRTdHJpbmdWYWwgY29sdW1uLiIKICAgICA6Oj0geyBubG1Mb2dWYXJpYWJsZUVudHJ5IDkgfQpAQCAtNjUwLDcgKzYyOCw2IEBACiAgICAgICJUaGUgdmFsdWUgd2hlbiBubG1Mb2dWYXJpYWJsZVR5cGUgaXMgJ29wYXF1ZScuIgogICAgIDo6PSB7IG5sbUxvZ1ZhcmlhYmxlRW50cnkgMTIgfQogCi0KIC0tCiAtLSBDb25mb3JtYW5jZQogLS0KQEAgLTY3MSw3ICs2NDgsNiBAQAogICAgICAgICAgIHRoZSBOb3RpZmljYXRpb24gTG9nIE1JQi4iCiAgICAgIE1PRFVMRSAgICAtLSB0aGlzIG1vZHVsZQogCi0KICAgICAgICAgICBNQU5EQVRPUlktR1JPVVBTIHsKICAgICAgICAgICAgICAgIG5vdGlmaWNhdGlvbkxvZ0NvbmZpZ0dyb3VwLAogICAgICAgICAgICAgICAgbm90aWZpY2F0aW9uTG9nU3RhdHNHcm91cCwKQEAgLTcwNCw3ICs2ODAsNiBAQAogICAgICAgICAgICJUaGlzIGdyb3VwIGlzIG1hbmRhdG9yeSBvbiBzeXN0ZW1zIHRoYXQga2VlcCB3YWxsIGNsb2NrCiAgICAgICAgICAgZGF0ZSBhbmQgdGltZSBhbmQgc2hvdWxkIG5vdCBiZSBpbXBsZW1lbnRlZCBvbiBzeXN0ZW1zIHRoYXQKICAgICAgICAgICBkbyBub3QgaGF2ZSBhIHdhbGwgY2xvY2sgZGF0ZS4iCi0KICAgICAgOjo9IHsgbm90aWZpY2F0aW9uTG9nTUlCQ29tcGxpYW5jZXMgMSB9CiAKIC0tIFVuaXRzIG9mIENvbmZvcm1hbmNlCkBAIC03MjAsOCArNjk1LDYgQEAKICAgICAgICAgICBubG1Db25maWdMb2dTdG9yYWdlVHlwZSwKICAgICAgICAgICBubG1Db25maWdMb2dFbnRyeVN0YXR1cwogICAgICB9Ci0KLQogICAgICBTVEFUVVMgY3VycmVudAogICAgICBERVNDUklQVElPTgogICAgICAgICAgICJOb3RpZmljYXRpb24gbG9nIGNvbmZpZ3VyYXRpb24gbWFuYWdlbWVudC4iCkBAIC03NzAsOCArNzQzLDYgQEAKICAgICAgICAgICBubG1Mb2dEYXRlQW5kVGltZQogICAgICB9CiAgICAgIFNUQVRVUyBjdXJyZW50Ci0KLQogICAgICBERVNDUklQVElPTgogICAgICAgICAgICJDb25kaXRpb25hbGx5IG1hbmRhdG9yeSBub3RpZmljYXRpb24gbG9nIGRhdGEuCiAgICAgICAgICAgVGhpcyBncm91cCBpcyBtYW5kYXRvcnkgb24gc3lzdGVtcyB0aGF0IGtlZXAgd2FsbApkaWZmIC0tZ2l0IGEvbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0IGIvbWlicy9TTk1QLVRMUy1UTS1NSUIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGRmZjEKLS0tIC9kZXYvbnVsbAorKysgYi9taWJzL1NOTVAtVExTLVRNLU1JQi50eHQKQEAgLTAsMCArMSwxMDY1IEBACitTTk1QLVRMUy1UTS1NSUIgREVGSU5JVElPTlMgOjo9IEJFR0lOCisKK0lNUE9SVFMKKyAgICBNT0RVTEUtSURFTlRJVFksIE9CSkVDVC1UWVBFLAorICAgIE9CSkVDVC1JREVOVElUWSwgbWliLTIsIHNubXBEb21haW5zLAorICAgIENvdW50ZXIzMiwgVW5zaWduZWQzMiwgR2F1Z2UzMiwgTk9USUZJQ0FUSU9OLVRZUEUKKyAgICAgIEZST00gU05NUHYyLVNNSSAgICAgICAgICAgICAgICAgLS0gUkZDIDI1Nzggb3IgYW55IHVwZGF0ZSB0aGVyZW9mCisgICAgVEVYVFVBTC1DT05WRU5USU9OLCBUaW1lU3RhbXAsIFJvd1N0YXR1cywgU3RvcmFnZVR5cGUsCisgICAgQXV0b25vbW91c1R5cGUKKyAgICAgIEZST00gU05NUHYyLVRDICAgICAgICAgICAgICAgICAgLS0gUkZDIDI1Nzkgb3IgYW55IHVwZGF0ZSB0aGVyZW9mCisgICAgTU9EVUxFLUNPTVBMSUFOQ0UsIE9CSkVDVC1HUk9VUCwgTk9USUZJQ0FUSU9OLUdST1VQCisgICAgICBGUk9NIFNOTVB2Mi1DT05GICAgICAgICAgICAgICAgIC0tIFJGQyAyNTgwIG9yIGFueSB1cGRhdGUgdGhlcmVvZgorICAgIFNubXBBZG1pblN0cmluZworICAgICAgRlJPTSBTTk1QLUZSQU1FV09SSy1NSUIgICAgICAgICAtLSBSRkMgMzQxMSBvciBhbnkgdXBkYXRlIHRoZXJlb2YKKyAgICBzbm1wVGFyZ2V0UGFyYW1zTmFtZSwgc25tcFRhcmdldEFkZHJOYW1lCisgICAgICBGUk9NIFNOTVAtVEFSR0VULU1JQiAgICAgICAgICAgIC0tIFJGQyAzNDEzIG9yIGFueSB1cGRhdGUgdGhlcmVvZgorICAgIDsKKworc25tcFRsc3RtTUlCIE1PRFVMRS1JREVOVElUWQorICAgIExBU1QtVVBEQVRFRCAiMjAxMTA3MTkwMDAwWiIKKworICAgIE9SR0FOSVpBVElPTiAiSVNNUyBXb3JraW5nIEdyb3VwIgorICAgIENPTlRBQ1QtSU5GTyAiV0ctRU1haWw6ICAgaXNtc0BsaXN0cy5pZXRmLm9yZworICAgICAgICAgICAgICAgICAgU3Vic2NyaWJlOiAgaXNtcy1yZXF1ZXN0QGxpc3RzLmlldGYub3JnCisKKyAgICAgICAgICAgICAgICAgIENoYWlyczoKKyAgICAgICAgICAgICAgICAgICAgIEp1ZXJnZW4gU2Nob2Vud2FlbGRlcgorICAgICAgICAgICAgICAgICAgICAgSmFjb2JzIFVuaXZlcnNpdHkgQnJlbWVuCisgICAgICAgICAgICAgICAgICAgICBDYW1wdXMgUmluZyAxCisgICAgICAgICAgICAgICAgICAgICAyODcyNSBCcmVtZW4KKyAgICAgICAgICAgICAgICAgICAgIEdlcm1hbnkKKyAgICAgICAgICAgICAgICAgICAgICs0OSA0MjEgMjAwLTM1ODcKKyAgICAgICAgICAgICAgICAgICAgIGouc2Nob2Vud2FlbGRlckBqYWNvYnMtdW5pdmVyc2l0eS5kZQorCisgICAgICAgICAgICAgICAgICAgICBSdXNzIE11bmR5CisgICAgICAgICAgICAgICAgICAgICBTUEFSVEEsIEluYy4KKyAgICAgICAgICAgICAgICAgICAgIDcxMTAgU2FtdWVsIE1vcnNlIERyaXZlCisgICAgICAgICAgICAgICAgICAgICBDb2x1bWJpYSwgTUQgIDIxMDQ2CisgICAgICAgICAgICAgICAgICAgICBVU0EKKworICAgICAgICAgICAgICAgICAgRWRpdG9yOgorICAgICAgICAgICAgICAgICAgICAgV2VzIEhhcmRha2VyCisgICAgICAgICAgICAgICAgICAgICBTUEFSVEEsIEluYy4KKyAgICAgICAgICAgICAgICAgICAgIFAuTy4gQm94IDM4MgorICAgICAgICAgICAgICAgICAgICAgRGF2aXMsIENBICA5NTYxNworICAgICAgICAgICAgICAgICAgICAgVVNBCisgICAgICAgICAgICAgICAgICAgICBpZXRmQGhhcmRha2Vycy5uZXQKKyAgICAgICAgICAgICAgICAgICIKKyAgICBERVNDUklQVElPTiAgIgorICAgICAgICBUaGUgVExTIFRyYW5zcG9ydCBNb2RlbCBNSUIKKworICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTAtMjAxMSBJRVRGIFRydXN0IGFuZCB0aGUgcGVyc29ucyBpZGVudGlmaWVkCisgICAgICAgIGFzIGF1dGhvcnMgb2YgdGhlIGNvZGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAgICAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwdXJzdWFudCB0bywgYW5kIHN1YmplY3QKKyAgICAgICAgdG8gdGhlIGxpY2Vuc2UgdGVybXMgY29udGFpbmVkIGluLCB0aGUgU2ltcGxpZmllZCBCU0QgTGljZW5zZQorICAgICAgICBzZXQgZm9ydGggaW4gU2VjdGlvbiA0LmMgb2YgdGhlIElFVEYgVHJ1c3QncyBMZWdhbCBQcm92aXNpb25zCisgICAgICAgIFJlbGF0aW5nIHRvIElFVEYgRG9jdW1lbnRzCisgICAgICAgIChodHRwOi8vdHJ1c3RlZS5pZXRmLm9yZy9saWNlbnNlLWluZm8pLiIKKworICAgICAgIFJFVklTSU9OICAgICAiMjAxMTA3MTkwMDAwWiIKKyAgICAgICBERVNDUklQVElPTiAgIlRoaXMgdmVyc2lvbiBvZiB0aGlzIE1JQiBtb2R1bGUgaXMgcGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgUkZDIDYzNTM7IHNlZSB0aGUgUkZDIGl0c2VsZiBmb3IgZnVsbCBsZWdhbAorICAgICAgICAgICAgICAgICAgICAgbm90aWNlcy4gIFRoZSBvbmx5IGNoYW5nZSB3YXMgdG8gaW50cm9kdWNlCisgICAgICAgICAgICAgICAgICAgICBuZXcgd29yZGluZyB0byByZWZsZWN0IHJlcXVpcmUgY2hhbmdlcyBmb3IKKyAgICAgICAgICAgICAgICAgICAgIElETkEgYWRkcmVzc2VzIGluIHRoZSBTbm1wVExTQWRkcmVzcyBUQy4iCisKKyAgICAgICBSRVZJU0lPTiAgICAgIjIwMTAwNTA3MDAwMFoiCisgICAgICAgREVTQ1JJUFRJT04gICJUaGlzIHZlcnNpb24gb2YgdGhpcyBNSUIgbW9kdWxlIGlzIHBhcnQgb2YKKyAgICAgICAgICAgICAgICAgICAgIFJGQyA1OTUzOyBzZWUgdGhlIFJGQyBpdHNlbGYgZm9yIGZ1bGwgbGVnYWwKKyAgICAgICAgICAgICAgICAgICAgIG5vdGljZXMuIgorICAgIDo6PSB7IG1pYi0yIDE5OCB9CisKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorLS0gc3VidHJlZXMgb2YgdGhlIFNOTVAtVExTLVRNLU1JQgorLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3NubXBUbHN0bU5vdGlmaWNhdGlvbnMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtTUlCIDAgfQorc25tcFRsc3RtSWRlbnRpdGllcyAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1NSUIgMSB9Citzbm1wVGxzdG1PYmplY3RzICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bU1JQiAyIH0KK3NubXBUbHN0bUNvbmZvcm1hbmNlICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtTUlCIDMgfQorCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKy0tIHNubXBUbHN0bU9iamVjdHMgLSBPYmplY3RzCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc25tcFRMU1RDUERvbWFpbiBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBTTk1QIG92ZXIgVExTIHZpYSBUQ1AgdHJhbnNwb3J0IGRvbWFpbi4gIFRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIHRyYW5zcG9ydCBhZGRyZXNzIGlzIG9mIHR5cGUgU25tcFRMU0FkZHJlc3MuCisKKyAgICAgICAgVGhlIHNlY3VyaXR5TmFtZSBwcmVmaXggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICBzbm1wVExTVENQRG9tYWluIGlzICd0bHMnLiAgVGhpcyBwcmVmaXggbWF5IGJlIHVzZWQgYnkKKyAgICAgICAgc2VjdXJpdHkgbW9kZWxzIG9yIG90aGVyIGNvbXBvbmVudHMgdG8gaWRlbnRpZnkgd2hpY2ggc2VjdXJlCisgICAgICAgIHRyYW5zcG9ydCBpbmZyYXN0cnVjdHVyZSBhdXRoZW50aWNhdGVkIGEgc2VjdXJpdHlOYW1lLiIKKyAgICBSRUZFUkVOQ0UKKyAgICAgICJSRkMgMjU3OTogVGV4dHVhbCBDb252ZW50aW9ucyBmb3IgU01JdjIiCisgICAgOjo9IHsgc25tcERvbWFpbnMgOCB9CisKK3NubXBEVExTVURQRG9tYWluIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIFNOTVAgb3ZlciBEVExTIHZpYSBVRFAgdHJhbnNwb3J0IGRvbWFpbi4gIFRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIHRyYW5zcG9ydCBhZGRyZXNzIGlzIG9mIHR5cGUgU25tcFRMU0FkZHJlc3MuCisKKyAgICAgICAgVGhlIHNlY3VyaXR5TmFtZSBwcmVmaXggdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgICAgICBzbm1wRFRMU1VEUERvbWFpbiBpcyAnZHRscycuICBUaGlzIHByZWZpeCBtYXkgYmUgdXNlZCBieQorICAgICAgICBzZWN1cml0eSBtb2RlbHMgb3Igb3RoZXIgY29tcG9uZW50cyB0byBpZGVudGlmeSB3aGljaCBzZWN1cmUKKyAgICAgICAgdHJhbnNwb3J0IGluZnJhc3RydWN0dXJlIGF1dGhlbnRpY2F0ZWQgYSBzZWN1cml0eU5hbWUuIgorICAgIFJFRkVSRU5DRQorICAgICAgIlJGQyAyNTc5OiBUZXh0dWFsIENvbnZlbnRpb25zIGZvciBTTUl2MiIKKyAgICA6Oj0geyBzbm1wRG9tYWlucyA5IH0KKworU25tcFRMU0FkZHJlc3MgOjo9IFRFWFRVQUwtQ09OVkVOVElPTgorICAgIERJU1BMQVktSElOVCAiMWEiCisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiUmVwcmVzZW50cyBhbiBJUHY0IGFkZHJlc3MsIGFuIElQdjYgYWRkcmVzcywgb3IgYQorICAgICAgICAgVVMtQVNDSUktZW5jb2RlZCBob3N0bmFtZSBhbmQgcG9ydCBudW1iZXIuCisKKyAgICAgICAgQW4gSVB2NCBhZGRyZXNzIG11c3QgYmUgaW4gZG90dGVkIGRlY2ltYWwgZm9ybWF0IGZvbGxvd2VkIGJ5IGEKKyAgICAgICAgY29sb24gJzonIChVUy1BU0NJSSBjaGFyYWN0ZXIgMHgzQSkgYW5kIGEgZGVjaW1hbCBwb3J0IG51bWJlcgorICAgICAgICBpbiBVUy1BU0NJSS4KKworICAgICAgICBBbiBJUHY2IGFkZHJlc3MgbXVzdCBiZSBhIGNvbG9uLXNlcGFyYXRlZCBmb3JtYXQgKGFzIGRlc2NyaWJlZAorICAgICAgICBpbiBSRkMgNTk1MiksIHN1cnJvdW5kZWQgYnkgc3F1YXJlIGJyYWNrZXRzICgnWycsIFVTLUFTQ0lJCisgICAgICAgIGNoYXJhY3RlciAweDVCLCBhbmQgJ10nLCBVUy1BU0NJSSBjaGFyYWN0ZXIgMHg1RCksIGZvbGxvd2VkIGJ5CisgICAgICAgIGEgY29sb24gJzonIChVUy1BU0NJSSBjaGFyYWN0ZXIgMHgzQSkgYW5kIGEgZGVjaW1hbCBwb3J0IG51bWJlcgorICAgICAgICBpbiBVUy1BU0NJSS4KKworICAgICAgICBBIGhvc3RuYW1lIGlzIGFsd2F5cyBpbiBVUy1BU0NJSSAoYXMgcGVyIFJGQyAxMTIzKTsKKyAgICAgICAgaW50ZXJuYXRpb25hbGl6ZWQgaG9zdG5hbWVzIGFyZSBlbmNvZGVkIGFzIEEtbGFiZWxzIGFzIHNwZWNpZmllZAorICAgICAgICBpbiAgUkZDIDU4OTAuICBUaGUgaG9zdG5hbWUgaXMgZm9sbG93ZWQgYnkgYQorICAgICAgICBjb2xvbiAnOicgKFVTLUFTQ0lJIGNoYXJhY3RlciAweDNBKSBhbmQgYSBkZWNpbWFsIHBvcnQgbnVtYmVyCisgICAgICAgIGluIFVTLUFTQ0lJLiAgVGhlIG5hbWUgU0hPVUxEIGJlIGZ1bGx5IHF1YWxpZmllZCB3aGVuZXZlcgorICAgICAgICBwb3NzaWJsZS4KKworICAgICAgICBWYWx1ZXMgb2YgdGhpcyB0ZXh0dWFsIGNvbnZlbnRpb24gbWF5IG5vdCBiZSBkaXJlY3RseSB1c2FibGUKKyAgICAgICAgYXMgdHJhbnNwb3J0LWxheWVyIGFkZHJlc3NpbmcgaW5mb3JtYXRpb24sIGFuZCBtYXkgcmVxdWlyZQorICAgICAgICBydW4tdGltZSByZXNvbHV0aW9uLiAgQXMgc3VjaCwgYXBwbGljYXRpb25zIHRoYXQgd3JpdGUgdGhlbQorICAgICAgICBtdXN0IGJlIHByZXBhcmVkIGZvciBoYW5kbGluZyBlcnJvcnMgaWYgc3VjaCB2YWx1ZXMgYXJlIG5vdAorICAgICAgICBzdXBwb3J0ZWQsIG9yIGNhbm5vdCBiZSByZXNvbHZlZCAoaWYgcmVzb2x1dGlvbiBvY2N1cnMgYXQgdGhlCisgICAgICAgIHRpbWUgb2YgdGhlIG1hbmFnZW1lbnQgb3BlcmF0aW9uKS4KKworICAgICAgICBUaGUgREVTQ1JJUFRJT04gY2xhdXNlIG9mIFRyYW5zcG9ydEFkZHJlc3Mgb2JqZWN0cyB0aGF0IG1heQorICAgICAgICBoYXZlIFNubXBUTFNBZGRyZXNzIHZhbHVlcyBtdXN0IGZ1bGx5IGRlc2NyaWJlIGhvdyAoYW5kCisgICAgICAgIHdoZW4pIHN1Y2ggbmFtZXMgYXJlIHRvIGJlIHJlc29sdmVkIHRvIElQIGFkZHJlc3NlcyBhbmQgdmljZQorICAgICAgICB2ZXJzYS4KKworICAgICAgICBUaGlzIHRleHR1YWwgY29udmVudGlvbiBTSE9VTEQgTk9UIGJlIHVzZWQgZGlyZWN0bHkgaW4gb2JqZWN0CisgICAgICAgIGRlZmluaXRpb25zIHNpbmNlIGl0IHJlc3RyaWN0cyBhZGRyZXNzZXMgdG8gYSBzcGVjaWZpYworICAgICAgICBmb3JtYXQuICBIb3dldmVyLCBpZiBpdCBpcyB1c2VkLCBpdCBNQVkgYmUgdXNlZCBlaXRoZXIgb24gaXRzCisgICAgICAgIG93biBvciBpbiBjb25qdW5jdGlvbiB3aXRoIFRyYW5zcG9ydEFkZHJlc3NUeXBlIG9yCisgICAgICAgIFRyYW5zcG9ydERvbWFpbiBhcyBhIHBhaXIuCisKKyAgICAgICAgV2hlbiB0aGlzIHRleHR1YWwgY29udmVudGlvbiBpcyB1c2VkIGFzIGEgc3ludGF4IG9mIGFuIGluZGV4CisgICAgICAgIG9iamVjdCwgdGhlcmUgbWF5IGJlIGlzc3VlcyB3aXRoIHRoZSBsaW1pdCBvZiAxMjgKKyAgICAgICAgc3ViLWlkZW50aWZpZXJzIHNwZWNpZmllZCBpbiBTTUl2MiAoU1REIDU4KS4gIEl0IGlzIFJFQ09NTUVOREVECisgICAgICAgIHRoYXQgYWxsIE1JQiBkb2N1bWVudHMgdXNpbmcgdGhpcyB0ZXh0dWFsIGNvbnZlbnRpb24gbWFrZQorICAgICAgICBleHBsaWNpdCBhbnkgbGltaXRhdGlvbnMgb24gaW5kZXggY29tcG9uZW50IGxlbmd0aHMgdGhhdAorICAgICAgICBtYW5hZ2VtZW50IHNvZnR3YXJlIG11c3Qgb2JzZXJ2ZS4gIFRoaXMgbWF5IGJlIGRvbmUgZWl0aGVyIGJ5CisKKyAgICAgICAgaW5jbHVkaW5nIFNJWkUgY29uc3RyYWludHMgb24gdGhlIGluZGV4IGNvbXBvbmVudHMgb3IgYnkKKyAgICAgICAgc3BlY2lmeWluZyBhcHBsaWNhYmxlIGNvbnN0cmFpbnRzIGluIHRoZSBjb25jZXB0dWFsIHJvdworICAgICAgICBERVNDUklQVElPTiBjbGF1c2Ugb3IgaW4gdGhlIHN1cnJvdW5kaW5nIGRvY3VtZW50YXRpb24uIgorICAgIFJFRkVSRU5DRQorICAgICAgIlJGQyAxMTIzOiBSZXF1aXJlbWVudHMgZm9yIEludGVybmV0IEhvc3RzIC0gQXBwbGljYXRpb24gYW5kCisgICAgICAgICAgICAgICAgIFN1cHBvcnQKKyAgICAgICBSRkMgNTg5MDogSW50ZXJuYXRpb25hbGl6ZWQgRG9tYWluIE5hbWVzIGZvciBBcHBsaWNhdGlvbnMgKElETkEpOgorICAgICAgICAgICAgICAgICBEZWZpbml0aW9ucyBhbmQgRG9jdW1lbnQgRnJhbWV3b3JrCisgICAgICAgUkZDIDU5NTI6IEEgUmVjb21tZW5kYXRpb24gZm9yIElQdjYgQWRkcmVzcyBUZXh0IFJlcHJlc2VudGF0aW9uCisgICAgICAiCisgICAgU1lOVEFYICAgICAgIE9DVEVUIFNUUklORyAoU0laRSAoMS4uMjU1KSkKKworU25tcFRMU0ZpbmdlcnByaW50IDo6PSBURVhUVUFMLUNPTlZFTlRJT04KKyAgICBESVNQTEFZLUhJTlQgIjF4OjF4IgorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAiQSBmaW5nZXJwcmludCB2YWx1ZSB0aGF0IGNhbiBiZSB1c2VkIHRvIHVuaXF1ZWx5IHJlZmVyZW5jZQorICAgICAgIG90aGVyIGRhdGEgb2YgcG90ZW50aWFsbHkgYXJiaXRyYXJ5IGxlbmd0aC4KKworICAgICAgIEFuIFNubXBUTFNGaW5nZXJwcmludCB2YWx1ZSBpcyBjb21wb3NlZCBvZiBhIDEtb2N0ZXQgaGFzaGluZworICAgICAgIGFsZ29yaXRobSBpZGVudGlmaWVyIGZvbGxvd2VkIGJ5IHRoZSBmaW5nZXJwcmludCB2YWx1ZS4gIFRoZQorICAgICAgIG9jdGV0IHZhbHVlIGVuY29kZWQgaXMgdGFrZW4gZnJvbSB0aGUgSUFOQSBUTFMgSGFzaEFsZ29yaXRobQorICAgICAgIFJlZ2lzdHJ5IChSRkMgNTI0NikuICBUaGUgcmVtYWluaW5nIG9jdGV0cyBhcmUgZmlsbGVkIHVzaW5nIHRoZQorICAgICAgIHJlc3VsdHMgb2YgdGhlIGhhc2hpbmcgYWxnb3JpdGhtLgorCisgICAgICAgVGhpcyBURVhUVUFMLUNPTlZFTlRJT04gYWxsb3dzIGZvciBhIHplcm8tbGVuZ3RoIChibGFuaykKKyAgICAgICBTbm1wVExTRmluZ2VycHJpbnQgdmFsdWUgZm9yIHVzZSBpbiB0YWJsZXMgd2hlcmUgdGhlCisgICAgICAgZmluZ2VycHJpbnQgdmFsdWUgbWF5IGJlIG9wdGlvbmFsLiAgTUlCIGRlZmluaXRpb25zIG9yCisgICAgICAgaW1wbGVtZW50YXRpb25zIG1heSByZWZ1c2UgdG8gYWNjZXB0IGEgemVyby1sZW5ndGggdmFsdWUgYXMKKyAgICAgICBhcHByb3ByaWF0ZS4iCisgICAgICAgUkVGRVJFTkNFICJSRkMgNTI0NjogVGhlIFRyYW5zcG9ydCBMYXllcgorICAgICAgICAgICAgICAgICAgU2VjdXJpdHkgKFRMUykgUHJvdG9jb2wgVmVyc2lvbiAxLjIKKyAgICAgICAgICAgICAgICAgIGh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvdGxzLXBhcmFtZXRlcnMvCisgICAgICAgIgorICAgIFNZTlRBWCBPQ1RFVCBTVFJJTkcgKFNJWkUgKDAuLjI1NSkpCisKKy0tIElkZW50aXRpZXMgZm9yIHVzZSBpbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUKKworc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgT0JKRUNUIElERU5USUZJRVIKKyAgICA6Oj0geyBzbm1wVGxzdG1JZGVudGl0aWVzIDEgfQorCitzbm1wVGxzdG1DZXJ0U3BlY2lmaWVkIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICAiRGlyZWN0bHkgc3BlY2lmaWVzIHRoZSB0bVNlY3VyaXR5TmFtZSB0byBiZSB1c2VkIGZvcgorICAgICAgICAgICAgICAgICAgdGhpcyBjZXJ0aWZpY2F0ZS4gIFRoZSB2YWx1ZSBvZiB0aGUgdG1TZWN1cml0eU5hbWUKKyAgICAgICAgICAgICAgICAgIHRvIHVzZSBpcyBzcGVjaWZpZWQgaW4gdGhlIHNubXBUbHN0bUNlcnRUb1RTTkRhdGEKKyAgICAgICAgICAgICAgICAgIGNvbHVtbi4gIFRoZSBzbm1wVGxzdG1DZXJ0VG9UU05EYXRhIGNvbHVtbiBtdXN0CisgICAgICAgICAgICAgICAgICBjb250YWluIGEgbm9uLXplcm8gbGVuZ3RoIFNubXBBZG1pblN0cmluZyBjb21wbGlhbnQKKworICAgICAgICAgICAgICAgICAgdmFsdWUgb3IgdGhlIG1hcHBpbmcgZGVzY3JpYmVkIGluIHRoaXMgcm93IG11c3QgYmUKKyAgICAgICAgICAgICAgICAgIGNvbnNpZGVyZWQgYSBmYWlsdXJlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05NSWRlbnRpdGllcyAxIH0KKworc25tcFRsc3RtQ2VydFNBTlJGQzgyMk5hbWUgT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gICJNYXBzIGEgc3ViamVjdEFsdE5hbWUncyByZmM4MjJOYW1lIHRvIGEKKyAgICAgICAgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lLiAgVGhlIGxvY2FsIHBhcnQgb2YgdGhlIHJmYzgyMk5hbWUgaXMKKyAgICAgICAgICAgICAgICAgIHBhc3NlZCB1bmFsdGVyZWQgYnV0IHRoZSBob3N0LXBhcnQgb2YgdGhlIG5hbWUgbXVzdAorICAgICAgICAgICAgICAgICAgYmUgcGFzc2VkIGluIGxvd2VyY2FzZS4gIFRoaXMgbWFwcGluZyByZXN1bHRzIGluIGEKKyAgICAgICAgICAgICAgICAgIDE6MSBjb3JyZXNwb25kZW5jZSBiZXR3ZWVuIGVxdWl2YWxlbnQgc3ViamVjdEFsdE5hbWUKKyAgICAgICAgICAgICAgICAgIHJmYzgyMk5hbWUgdmFsdWVzIGFuZCB0bVNlY3VyaXR5TmFtZSB2YWx1ZXMgZXhjZXB0CisgICAgICAgICAgICAgICAgICB0aGF0IHRoZSBob3N0LXBhcnQgb2YgdGhlIG5hbWUgTVVTVCBiZSBwYXNzZWQgaW4KKyAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZS4KKworICAgICAgICAgICAgICAgICAgRXhhbXBsZSByZmM4MjJOYW1lIEZpZWxkOiAgRm9vQmFyQEV4YW1wbGUuQ09NCisgICAgICAgICAgICAgICAgICBpcyBtYXBwZWQgdG8gdG1TZWN1cml0eU5hbWU6IEZvb0JhckBleGFtcGxlLmNvbS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgMiB9CisKK3NubXBUbHN0bUNlcnRTQU5ETlNOYW1lIE9CSkVDVC1JREVOVElUWQorICAgIFNUQVRVUyAgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICAiTWFwcyBhIHN1YmplY3RBbHROYW1lJ3MgZE5TTmFtZSB0byBhCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSBhZnRlciBmaXJzdCBjb252ZXJ0aW5nIGl0IHRvIGFsbAorICAgICAgICAgICAgICAgICAgbG93ZXJjYXNlIChSRkMgNTI4MCBkb2VzIG5vdCBzcGVjaWZ5IGNvbnZlcnRpbmcgdG8KKyAgICAgICAgICAgICAgICAgIGxvd2VyY2FzZSBzbyB0aGlzIGludm9sdmVzIGFuIGV4dHJhIHN0ZXApLiAgVGhpcworICAgICAgICAgICAgICAgICAgbWFwcGluZyByZXN1bHRzIGluIGEgMToxIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgIHN1YmplY3RBbHROYW1lIGROU05hbWUgdmFsdWVzIGFuZCB0aGUgdG1TZWN1cml0eU5hbWUKKyAgICAgICAgICAgICAgICAgIHZhbHVlcy4iCisgICAgUkVGRVJFTkNFICJSRkMgNTI4MCAtIEludGVybmV0IFguNTA5IFB1YmxpYyBLZXkgSW5mcmFzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgICAgICBDZXJ0aWZpY2F0ZSBhbmQgQ2VydGlmaWNhdGUgUmV2b2NhdGlvbgorICAgICAgICAgICAgICAgICAgICAgICAgIExpc3QgKENSTCkgUHJvZmlsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgMyB9CisKK3NubXBUbHN0bUNlcnRTQU5JcEFkZHJlc3MgT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gICJNYXBzIGEgc3ViamVjdEFsdE5hbWUncyBpUEFkZHJlc3MgdG8gYQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUgYnkgdHJhbnNmb3JtaW5nIHRoZSBiaW5hcnkgZW5jb2RlZAorICAgICAgICAgICAgICAgICAgYWRkcmVzcyBhcyBmb2xsb3dzOgorCisgICAgICAgICAgICAgICAgICAxKSBmb3IgSVB2NCwgdGhlIHZhbHVlIGlzIGNvbnZlcnRlZCBpbnRvIGEKKyAgICAgICAgICAgICAgICAgICAgIGRlY2ltYWwtZG90dGVkIHF1YWQgYWRkcmVzcyAoZS5nLiwgJzE5Mi4wLjIuMScpLgorCisgICAgICAgICAgICAgICAgICAyKSBmb3IgSVB2NiBhZGRyZXNzZXMsIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgaW50byBhCisgICAgICAgICAgICAgICAgICAgICAzMi1jaGFyYWN0ZXIgYWxsIGxvd2VyY2FzZSBoZXhhZGVjaW1hbCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgYW55IGNvbG9uIHNlcGFyYXRvcnMuCisKKyAgICAgICAgICAgICAgICAgIFRoaXMgbWFwcGluZyByZXN1bHRzIGluIGEgMToxIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgIHN1YmplY3RBbHROYW1lIGlQQWRkcmVzcyB2YWx1ZXMgYW5kIHRoZQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUgdmFsdWVzLgorCisgICAgICAgICAgICAgICAgICBUaGUgcmVzdWx0aW5nIGxlbmd0aCBvZiBhbiBlbmNvZGVkIElQdjYgYWRkcmVzcyBpcworICAgICAgICAgICAgICAgICAgdGhlIG1heGltdW0gbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGUgVmlldy1CYXNlZAorICAgICAgICAgICAgICAgICAgQWNjZXNzIENvbnRyb2wgTW9kZWwgKFZBQ00pLiAgVXNpbmcgYm90aCB0aGUKKyAgICAgICAgICAgICAgICAgIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbCdzIHN1cHBvcnQgZm9yIHRyYW5zcG9ydAorICAgICAgICAgICAgICAgICAgcHJlZml4ZXMgKHNlZSB0aGUgU05NUC1UU00tTUlCJ3MKKyAgICAgICAgICAgICAgICAgIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IG9iamVjdCBmb3IgZGV0YWlscykKKyAgICAgICAgICAgICAgICAgIHdpbGwgcmVzdWx0IGluIHNlY3VyaXR5TmFtZSBsZW5ndGhzIHRoYXQgZXhjZWVkIHdoYXQKKyAgICAgICAgICAgICAgICAgIFZBQ00gY2FuIGhhbmRsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNOTUlkZW50aXRpZXMgNCB9CisKK3NubXBUbHN0bUNlcnRTQU5BbnkgT0JKRUNULUlERU5USVRZCisgICAgU1RBVFVTICAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gICJNYXBzIGFueSBvZiB0aGUgZm9sbG93aW5nIGZpZWxkcyB1c2luZyB0aGUKKyAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRpbmcgbWFwcGluZyBhbGdvcml0aG1zOgorCisgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgICAgICAgICB8IFR5cGUgICAgICAgfCBBbGdvcml0aG0gICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisgICAgICAgICAgICAgICAgICB8IHJmYzgyMk5hbWUgfCBzbm1wVGxzdG1DZXJ0U0FOUkZDODIyTmFtZSB8CisgICAgICAgICAgICAgICAgICB8IGROU05hbWUgICAgfCBzbm1wVGxzdG1DZXJ0U0FORE5TTmFtZSAgICB8CisgICAgICAgICAgICAgICAgICB8IGlQQWRkcmVzcyAgfCBzbm1wVGxzdG1DZXJ0U0FOSXBBZGRyZXNzICB8CisgICAgICAgICAgICAgICAgICB8LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS18CisKKyAgICAgICAgICAgICAgICAgIFRoZSBmaXJzdCBtYXRjaGluZyBzdWJqZWN0QWx0TmFtZSB2YWx1ZSBmb3VuZCBpbiB0aGUKKyAgICAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIG9mIHRoZSBhYm92ZSB0eXBlcyBNVVNUIGJlIHVzZWQgd2hlbgorICAgICAgICAgICAgICAgICAgZGVyaXZpbmcgdGhlIHRtU2VjdXJpdHlOYW1lLiAgVGhlIG1hcHBpbmcgYWxnb3JpdGhtCisgICAgICAgICAgICAgICAgICBzcGVjaWZpZWQgaW4gdGhlICdBbGdvcml0aG0nIGNvbHVtbiBNVVNUIGJlIHVzZWQgdG8KKyAgICAgICAgICAgICAgICAgIGRlcml2ZSB0aGUgdG1TZWN1cml0eU5hbWUuCisKKyAgICAgICAgICAgICAgICAgIFRoaXMgbWFwcGluZyByZXN1bHRzIGluIGEgMToxIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4KKyAgICAgICAgICAgICAgICAgIHN1YmplY3RBbHROYW1lIHZhbHVlcyBhbmQgdG1TZWN1cml0eU5hbWUgdmFsdWVzLiAgVGhlCisgICAgICAgICAgICAgICAgICB0aHJlZSBzdWItbWFwcGluZyBhbGdvcml0aG1zIHByb2R1Y2VkIGJ5IHRoaXMKKyAgICAgICAgICAgICAgICAgIGNvbWJpbmVkIGFsZ29yaXRobSBjYW5ub3QgcHJvZHVjZSBjb25mbGljdGluZworICAgICAgICAgICAgICAgICAgcmVzdWx0cyBiZXR3ZWVuIHRoZW1zZWx2ZXMuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIDUgfQorCitzbm1wVGxzdG1DZXJ0Q29tbW9uTmFtZSBPQkpFQ1QtSURFTlRJVFkKKyAgICBTVEFUVVMgICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgIk1hcHMgYSBjZXJ0aWZpY2F0ZSdzIENvbW1vbk5hbWUgdG8gYSB0bVNlY3VyaXR5TmFtZQorICAgICAgICAgICAgICAgICAgYWZ0ZXIgY29udmVydGluZyBpdCB0byBhIFVURi04IGVuY29kaW5nLiAgVGhlIHVzYWdlCisgICAgICAgICAgICAgICAgICBvZiBDb21tb25OYW1lcyBpcyBkZXByZWNhdGVkIGFuZCB1c2VycyBhcmUKKyAgICAgICAgICAgICAgICAgIGVuY291cmFnZWQgdG8gdXNlIHN1YmplY3RBbHROYW1lIG1hcHBpbmcgbWV0aG9kcworICAgICAgICAgICAgICAgICAgaW5zdGVhZC4gIFRoaXMgbWFwcGluZyByZXN1bHRzIGluIGEgMToxCisKKyAgICAgICAgICAgICAgICAgIGNvcnJlc3BvbmRlbmNlIGJldHdlZW4gY2VydGlmaWNhdGUgQ29tbW9uTmFtZSB2YWx1ZXMKKyAgICAgICAgICAgICAgICAgIGFuZCB0bVNlY3VyaXR5TmFtZSB2YWx1ZXMuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIDYgfQorCistLSBUaGUgc25tcFRsc3RtU2Vzc2lvbiBHcm91cAorCitzbm1wVGxzdG1TZXNzaW9uICAgICAgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1PYmplY3RzIDEgfQorCitzbm1wVGxzdG1TZXNzaW9uT3BlbnMgIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gb3BlblNlc3Npb24oKSByZXF1ZXN0IGhhcyBiZWVuIGV4ZWN1dGVkCisgICAgICAgYXMgYSAoRClUTFMgY2xpZW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgc3VjY2VlZGVkIG9yCisgICAgICAgZmFpbGVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDEgfQorCitzbm1wVGxzdG1TZXNzaW9uQ2xpZW50Q2xvc2VzICBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhIGNsb3NlU2Vzc2lvbigpIHJlcXVlc3QgaGFzIGJlZW4KKyAgICAgICAgZXhlY3V0ZWQgYXMgYSAoRClUTFMgY2xpZW50LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQKKyAgICAgICAgc3VjY2VlZGVkIG9yIGZhaWxlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiAyIH0KKworc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMgIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIG9wZW5TZXNzaW9uKCkgcmVxdWVzdCBmYWlsZWQgdG8gb3BlbiBhCisgICAgICAgIHNlc3Npb24gYXMgYSAoRClUTFMgY2xpZW50LCBmb3IgYW55IHJlYXNvbi4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiAzIH0KKworc25tcFRsc3RtU2Vzc2lvbkFjY2VwdHMgIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYSAoRClUTFMgc2VydmVyIGhhcyBhY2NlcHRlZCBhIG5ldworICAgICAgIGNvbm5lY3Rpb24gZnJvbSBhIGNsaWVudCBhbmQgaGFzIHJlY2VpdmVkIGF0IGxlYXN0IG9uZSBTTk1QCisgICAgICAgbWVzc2FnZSB0aHJvdWdoIGl0LiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDQgfQorCitzbm1wVGxzdG1TZXNzaW9uU2VydmVyQ2xvc2VzICBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhIGNsb3NlU2Vzc2lvbigpIHJlcXVlc3QgaGFzIGJlZW4KKyAgICAgICAgZXhlY3V0ZWQgYXMgYSAoRClUTFMgc2VydmVyLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQKKyAgICAgICAgc3VjY2VlZGVkIG9yIGZhaWxlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiA1IH0KKworc25tcFRsc3RtU2Vzc2lvbk5vU2Vzc2lvbnMgIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIG91dGdvaW5nIG1lc3NhZ2Ugd2FzIGRyb3BwZWQgYmVjYXVzZQorICAgICAgICB0aGUgc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHBhc3NlZCB0bVN0YXRlUmVmZXJlbmNlIHdhcyBubworICAgICAgICBsb25nZXIgKG9yIHdhcyBuZXZlcikgYXZhaWxhYmxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1TZXNzaW9uIDYgfQorCitzbm1wVGxzdG1TZXNzaW9uSW52YWxpZENsaWVudENlcnRpZmljYXRlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiB0aW1lcyBhbiBpbmNvbWluZyBzZXNzaW9uIHdhcyBub3QgZXN0YWJsaXNoZWQKKyAgICAgICAgb24gYSAoRClUTFMgc2VydmVyIGJlY2F1c2UgdGhlIHByZXNlbnRlZCBjbGllbnQgY2VydGlmaWNhdGUKKyAgICAgICAgd2FzIGludmFsaWQuICBSZWFzb25zIGZvciBpbnZhbGlkYXRpb24gaW5jbHVkZSwgYnV0IGFyZSBub3QKKyAgICAgICAgbGltaXRlZCB0bywgY3J5cHRvZ3JhcGhpYyB2YWxpZGF0aW9uIGZhaWx1cmVzIG9yIGxhY2sgb2YgYQorICAgICAgICBzdWl0YWJsZSBtYXBwaW5nIHJvdyBpbiB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gNyB9CisKK3NubXBUbHN0bVNlc3Npb25Vbmtub3duU2VydmVyQ2VydGlmaWNhdGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2YgdGltZXMgYW4gb3V0Z29pbmcgc2Vzc2lvbiB3YXMgbm90IGVzdGFibGlzaGVkCisgICAgICAgICBvbiBhIChEKVRMUyBjbGllbnQgYmVjYXVzZSB0aGUgc2VydmVyIGNlcnRpZmljYXRlIHByZXNlbnRlZAorICAgICAgICAgYnkgYW4gU05NUCBvdmVyIChEKVRMUyBzZXJ2ZXIgd2FzIGludmFsaWQgYmVjYXVzZSBubworICAgICAgICAgY29uZmlndXJlZCBmaW5nZXJwcmludCBvciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAoQ0EpIHdhcworICAgICAgICAgYWNjZXB0YWJsZSB0byB2YWxpZGF0ZSBpdC4KKyAgICAgICAgIFRoaXMgbWF5IHJlc3VsdCBiZWNhdXNlIHRoZXJlIHdhcyBubyBlbnRyeSBpbiB0aGUKKyAgICAgICAgIHNubXBUbHN0bUFkZHJUYWJsZSBvciBiZWNhdXNlIG5vIHBhdGggY291bGQgYmUgZm91bmQgdG8gYQorICAgICAgICAga25vd24gQ0EuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gOCB9CisKK3NubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHRpbWVzIGFuIG91dGdvaW5nIHNlc3Npb24gd2FzIG5vdCBlc3RhYmxpc2hlZAorICAgICAgICAgb24gYSAoRClUTFMgY2xpZW50IGJlY2F1c2UgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBwcmVzZW50ZWQKKyAgICAgICAgIGJ5IGFuIFNOTVAgb3ZlciAoRClUTFMgc2VydmVyIGNvdWxkIG5vdCBiZSB2YWxpZGF0ZWQgZXZlbiBpZgorICAgICAgICAgdGhlIGZpbmdlcnByaW50IG9yIGV4cGVjdGVkIHZhbGlkYXRpb24gcGF0aCB3YXMga25vd24uICBUaGF0CisgICAgICAgICBpcywgYSBjcnlwdG9ncmFwaGljIHZhbGlkYXRpb24gZXJyb3Igb2NjdXJyZWQgZHVyaW5nCisgICAgICAgICBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIHByb2Nlc3NpbmcuCisKKyAgICAgICAgUmVhc29ucyBmb3IgaW52YWxpZGF0aW9uIGluY2x1ZGUsIGJ1dCBhcmUgbm90CisgICAgICAgIGxpbWl0ZWQgdG8sIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbiBmYWlsdXJlcy4iCisgICAgOjo9IHsgc25tcFRsc3RtU2Vzc2lvbiA5IH0KKworc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDYWNoZXMgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBudW1iZXIgb2Ygb3V0Z29pbmcgbWVzc2FnZXMgZHJvcHBlZCBiZWNhdXNlIHRoZQorICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIHJlZmVycmVkIHRvIGFuIGludmFsaWQgY2FjaGUuIgorICAgIDo6PSB7IHNubXBUbHN0bVNlc3Npb24gMTAgfQorCistLSBDb25maWd1cmF0aW9uIE9iamVjdHMKKworc25tcFRsc3RtQ29uZmlnICAgICAgICAgICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bU9iamVjdHMgMiB9CisKKy0tIENlcnRpZmljYXRlIG1hcHBpbmcKKworc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUbHN0bUNvbmZpZyAxIH0KKworc25tcFRsc3RtQ2VydFRvVFNOQ291bnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBHYXVnZTMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyAxIH0KKworc25tcFRsc3RtQ2VydFRvVFNOVGFibGVMYXN0Q2hhbmdlZCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRpbWVTdGFtcAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHZhbHVlIG9mIHN5c1VwVGltZS4wIHdoZW4gdGhlIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlIHdhcworICAgICAgICBsYXN0IG1vZGlmaWVkIHRocm91Z2ggYW55IG1lYW5zLCBvciAwIGlmIGl0IGhhcyBub3QgYmVlbgorICAgICAgICBtb2RpZmllZCBzaW5jZSB0aGUgY29tbWFuZCByZXNwb25kZXIgd2FzIHN0YXJ0ZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyAyIH0KKworc25tcFRsc3RtQ2VydFRvVFNOVGFibGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTRVFVRU5DRSBPRiBTbm1wVGxzdG1DZXJ0VG9UU05FbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIHRhYmxlIGlzIHVzZWQgYnkgYSAoRClUTFMgc2VydmVyIHRvIG1hcCB0aGUgKEQpVExTCisgICAgICAgIGNsaWVudCdzIHByZXNlbnRlZCBYLjUwOSBjZXJ0aWZpY2F0ZSB0byBhIHRtU2VjdXJpdHlOYW1lLgorCisgICAgICAgIE9uIGFuIGluY29taW5nIChEKVRMUy9TTk1QIGNvbm5lY3Rpb24sIHRoZSBjbGllbnQncyBwcmVzZW50ZWQKKyAgICAgICAgY2VydGlmaWNhdGUgbXVzdCBlaXRoZXIgYmUgdmFsaWRhdGVkIGJhc2VkIG9uIGFuIGVzdGFibGlzaGVkCisgICAgICAgIHRydXN0IGFuY2hvciwgb3IgaXQgbXVzdCBkaXJlY3RseSBtYXRjaCBhIGZpbmdlcnByaW50IGluIHRoaXMKKyAgICAgICAgdGFibGUuICBUaGlzIHRhYmxlIGRvZXMgbm90IHByb3ZpZGUgYW55IG1lY2hhbmlzbXMgZm9yCisgICAgICAgIGNvbmZpZ3VyaW5nIHRoZSB0cnVzdCBhbmNob3JzOyB0aGUgdHJhbnNmZXIgb2YgYW55IG5lZWRlZAorICAgICAgICB0cnVzdGVkIGNlcnRpZmljYXRlcyBmb3IgcGF0aCB2YWxpZGF0aW9uIGlzIGV4cGVjdGVkIHRvIG9jY3VyCisgICAgICAgIHRocm91Z2ggYW4gb3V0LW9mLWJhbmQgdHJhbnNmZXIuCisKKyAgICAgICAgT25jZSB0aGUgY2VydGlmaWNhdGUgaGFzIGJlZW4gZm91bmQgYWNjZXB0YWJsZSAoZWl0aGVyIGJ5IHBhdGgKKyAgICAgICAgdmFsaWRhdGlvbiBvciBkaXJlY3RseSBtYXRjaGluZyBhIGZpbmdlcnByaW50IGluIHRoaXMgdGFibGUpLAorICAgICAgICB0aGlzIHRhYmxlIGlzIGNvbnN1bHRlZCB0byBkZXRlcm1pbmUgdGhlIGFwcHJvcHJpYXRlCisgICAgICAgIHRtU2VjdXJpdHlOYW1lIHRvIGlkZW50aWZ5IHdpdGggdGhlIHJlbW90ZSBjb25uZWN0aW9uLiAgVGhpcworICAgICAgICBpcyBkb25lIGJ5IGNvbnNpZGVyaW5nIGVhY2ggYWN0aXZlIHJvdyBmcm9tIHRoaXMgdGFibGUgaW4KKyAgICAgICAgcHJpb3JpdGl6ZWQgb3JkZXIgYWNjb3JkaW5nIHRvIGl0cyBzbm1wVGxzdG1DZXJ0VG9UU05JRCB2YWx1ZS4KKyAgICAgICAgRWFjaCByb3cncyBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCB2YWx1ZSBkZXRlcm1pbmVzCisgICAgICAgIHdoZXRoZXIgdGhlIHJvdyBpcyBhIG1hdGNoIGZvciB0aGUgaW5jb21pbmcgY29ubmVjdGlvbjoKKworICAgICAgICAgICAgMSkgSWYgdGhlIHJvdydzIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50IHZhbHVlCisgICAgICAgICAgICAgICBpZGVudGlmaWVzIHRoZSBwcmVzZW50ZWQgY2VydGlmaWNhdGUsIHRoZW4gY29uc2lkZXIgdGhlCisgICAgICAgICAgICAgICByb3cgYXMgYSBzdWNjZXNzZnVsIG1hdGNoLgorCisgICAgICAgICAgICAyKSBJZiB0aGUgcm93J3Mgc25tcFRsc3RtQ2VydFRvVFNORmluZ2VycHJpbnQgdmFsdWUKKyAgICAgICAgICAgICAgIGlkZW50aWZpZXMgYSBsb2NhbGx5IGhlbGQgY29weSBvZiBhIHRydXN0ZWQgQ0EKKyAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIGFuZCB0aGF0IENBIGNlcnRpZmljYXRlIHdhcyB1c2VkIHRvCisgICAgICAgICAgICAgICB2YWxpZGF0ZSB0aGUgcGF0aCB0byB0aGUgcHJlc2VudGVkIGNlcnRpZmljYXRlLCB0aGVuCisgICAgICAgICAgICAgICBjb25zaWRlciB0aGUgcm93IGFzIGEgc3VjY2Vzc2Z1bCBtYXRjaC4KKworICAgICAgICBPbmNlIGEgbWF0Y2hpbmcgcm93IGhhcyBiZWVuIGZvdW5kLCB0aGUKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSB2YWx1ZSBjYW4gYmUgdXNlZCB0byBkZXRlcm1pbmUgaG93CisgICAgICAgIHRoZSB0bVNlY3VyaXR5TmFtZSB0byBhc3NvY2lhdGUgd2l0aCB0aGUgc2Vzc2lvbiBzaG91bGQgYmUKKyAgICAgICAgZGV0ZXJtaW5lZC4gIFNlZSB0aGUgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSBjb2x1bW4ncworICAgICAgICBERVNDUklQVElPTiBmb3IgZGV0YWlscyBvbiBkZXRlcm1pbmluZyB0aGUgdG1TZWN1cml0eU5hbWUKKyAgICAgICAgdmFsdWUuICBJZiBpdCBpcyBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBhIHRtU2VjdXJpdHlOYW1lIGZyb20KKyAgICAgICAgdGhlIHJvdydzIGRhdGEgY29tYmluZWQgd2l0aCB0aGUgZGF0YSBwcmVzZW50ZWQgaW4gdGhlCisKKyAgICAgICAgY2VydGlmaWNhdGUsIHRoZW4gYWRkaXRpb25hbCByb3dzIE1VU1QgYmUgc2VhcmNoZWQgbG9va2luZyBmb3IKKyAgICAgICAgYW5vdGhlciBwb3RlbnRpYWwgbWF0Y2guICBJZiBhIHJlc3VsdGluZyB0bVNlY3VyaXR5TmFtZSBtYXBwZWQKKyAgICAgICAgZnJvbSBhIGdpdmVuIHJvdyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZSBuZWVkZWQKKyAgICAgICAgcmVxdWlyZW1lbnRzIG9mIGEgdG1TZWN1cml0eU5hbWUgKGUuZy4sIFZBQ00gaW1wb3NlcyBhCisgICAgICAgIDMyLW9jdGV0LW1heGltdW0gbGVuZ3RoIGFuZCB0aGUgY2VydGlmaWNhdGUgZGVyaXZlZAorICAgICAgICBzZWN1cml0eU5hbWUgY291bGQgYmUgbG9uZ2VyKSwgdGhlbiBpdCBtdXN0IGJlIGNvbnNpZGVyZWQgYW4KKyAgICAgICAgaW52YWxpZCBtYXRjaCBhbmQgYWRkaXRpb25hbCByb3dzIE1VU1QgYmUgc2VhcmNoZWQgbG9va2luZyBmb3IKKyAgICAgICAgYW5vdGhlciBwb3RlbnRpYWwgbWF0Y2guCisKKyAgICAgICAgSWYgbm8gbWF0Y2hpbmcgYW5kIHZhbGlkIHJvdyBjYW4gYmUgZm91bmQsIHRoZSBjb25uZWN0aW9uIE1VU1QKKyAgICAgICAgYmUgY2xvc2VkIGFuZCBTTk1QIG1lc3NhZ2VzIE1VU1QgTk9UIGJlIGFjY2VwdGVkIG92ZXIgaXQuCisKKyAgICAgICAgTWlzc2luZyB2YWx1ZXMgb2Ygc25tcFRsc3RtQ2VydFRvVFNOSUQgYXJlIGFjY2VwdGFibGUgYW5kCisgICAgICAgIGltcGxlbWVudGF0aW9ucyBzaG91bGQgY29udGludWUgdG8gdGhlIG5leHQgaGlnaGVzdCBudW1iZXJlZAorICAgICAgICByb3cuICBJdCBpcyByZWNvbW1lbmRlZCB0aGF0IGFkbWluaXN0cmF0b3JzIHNraXAgaW5kZXggdmFsdWVzCisgICAgICAgIHRvIGxlYXZlIHJvb20gZm9yIHRoZSBpbnNlcnRpb24gb2YgZnV0dXJlIHJvd3MgKGZvciBleGFtcGxlLAorICAgICAgICB1c2UgdmFsdWVzIG9mIDEwIGFuZCAyMCB3aGVuIGNyZWF0aW5nIGluaXRpYWwgcm93cykuCisKKyAgICAgICAgVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gbWFrZSB1c2Ugb2YgY2VydGlmaWNhdGVzIHdpdGgKKyAgICAgICAgc3ViamVjdEFsdE5hbWUgZmllbGRzIHRoYXQgY2FuIGJlIHVzZWQgYXMgdG1TZWN1cml0eU5hbWVzIHNvCisgICAgICAgIHRoYXQgYSBzaW5nbGUgcm9vdCBDQSBjZXJ0aWZpY2F0ZSBjYW4gYWxsb3cgYWxsIGNoaWxkCisgICAgICAgIGNlcnRpZmljYXRlJ3Mgc3ViamVjdEFsdE5hbWUgdG8gbWFwIGRpcmVjdGx5IHRvIGEKKyAgICAgICAgdG1TZWN1cml0eU5hbWUgdmlhIGEgMToxIHRyYW5zZm9ybWF0aW9uLiAgSG93ZXZlciwgdGhpcyB0YWJsZQorICAgICAgICBpcyBmbGV4aWJsZSB0byBhbGxvdyBmb3Igc2l0dWF0aW9ucyB3aGVyZSBleGlzdGluZyBkZXBsb3llZAorICAgICAgICBjZXJ0aWZpY2F0ZSBpbmZyYXN0cnVjdHVyZXMgZG8gbm90IHByb3ZpZGUgYWRlcXVhdGUKKyAgICAgICAgc3ViamVjdEFsdE5hbWUgdmFsdWVzIGZvciB1c2UgYXMgdG1TZWN1cml0eU5hbWVzLgorICAgICAgICBDZXJ0aWZpY2F0ZXMgbWF5IGFsc28gYmUgbWFwcGVkIHRvIHRtU2VjdXJpdHlOYW1lcyB1c2luZyB0aGUKKyAgICAgICAgQ29tbW9uTmFtZSBwb3J0aW9uIG9mIHRoZSBTdWJqZWN0IGZpZWxkLiAgSG93ZXZlciwgdGhlIHVzYWdlCisgICAgICAgIG9mIHRoZSBDb21tb25OYW1lIGZpZWxkIGlzIGRlcHJlY2F0ZWQgYW5kIHRodXMgdGhpcyB1c2FnZSBpcworICAgICAgICBOT1QgUkVDT01NRU5ERUQuICBEaXJlY3QgbWFwcGluZyBmcm9tIGVhY2ggaW5kaXZpZHVhbAorICAgICAgICBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCB0byBhIHRtU2VjdXJpdHlOYW1lIGlzIGFsc28gcG9zc2libGUKKyAgICAgICAgYnV0IHJlcXVpcmVzIG9uZSBlbnRyeSBpbiB0aGUgdGFibGUgcGVyIHRtU2VjdXJpdHlOYW1lIGFuZAorICAgICAgICByZXF1aXJlcyBtb3JlIG1hbmFnZW1lbnQgb3BlcmF0aW9ucyB0byBjb21wbGV0ZWx5IGNvbmZpZ3VyZSBhCisgICAgICAgIGRldmljZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDMgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBUbHN0bUNlcnRUb1RTTkVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgcm93IGluIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSB0aGF0IHNwZWNpZmllcyBhIG1hcHBpbmcKKyAgICAgICAgZm9yIGFuIGluY29taW5nIChEKVRMUyBjZXJ0aWZpY2F0ZSB0byBhIHRtU2VjdXJpdHlOYW1lIHRvIHVzZQorICAgICAgICBmb3IgYSBjb25uZWN0aW9uLiIKKyAgICBJTkRFWCAgIHsgc25tcFRsc3RtQ2VydFRvVFNOSUQgfQorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlIDEgfQorCitTbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSA6Oj0gU0VRVUVOQ0UgeworICAgIHNubXBUbHN0bUNlcnRUb1RTTklEICAgICAgICAgICBVbnNpZ25lZDMyLAorICAgIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50ICBTbm1wVExTRmluZ2VycHJpbnQsCisgICAgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSAgICAgIEF1dG9ub21vdXNUeXBlLAorICAgIHNubXBUbHN0bUNlcnRUb1RTTkRhdGEgICAgICAgICBPQ1RFVCBTVFJJTkcsCisgICAgc25tcFRsc3RtQ2VydFRvVFNOU3RvcmFnZVR5cGUgIFN0b3JhZ2VUeXBlLAorICAgIHNubXBUbHN0bUNlcnRUb1RTTlJvd1N0YXR1cyAgICBSb3dTdGF0dXMKK30KKworc25tcFRsc3RtQ2VydFRvVFNOSUQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBVbnNpZ25lZDMyICgxLi40Mjk0OTY3Mjk1KQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIHVuaXF1ZSwgcHJpb3JpdGl6ZWQgaW5kZXggZm9yIHRoZSBnaXZlbiBlbnRyeS4gIExvd2VyCisgICAgICAgIG51bWJlcnMgaW5kaWNhdGUgYSBoaWdoZXIgcHJpb3JpdHkuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDEgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBUTFNGaW5nZXJwcmludCAoU0laRSgxLi4yNTUpKQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiBhbiBYLjUwOSBjZXJ0aWZpY2F0ZS4gIFRoZSByZXN1bHRzIG9mCisgICAgICAgIGEgc3VjY2Vzc2Z1bCBtYXRjaGluZyBmaW5nZXJwcmludCB0byBlaXRoZXIgdGhlIHRydXN0ZWQgQ0EgaW4KKyAgICAgICAgdGhlIGNlcnRpZmljYXRlIHZhbGlkYXRpb24gcGF0aCBvciB0byB0aGUgY2VydGlmaWNhdGUgaXRzZWxmCisgICAgICAgIGlzIGRpY3RhdGVkIGJ5IHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlIGNvbHVtbi4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNORW50cnkgMiB9CisKK3NubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBBdXRvbm9tb3VzVHlwZQorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJTcGVjaWZpZXMgdGhlIG1hcHBpbmcgdHlwZSBmb3IgZGVyaXZpbmcgYSB0bVNlY3VyaXR5TmFtZSBmcm9tCisgICAgICAgIGEgY2VydGlmaWNhdGUuICBEZXRhaWxzIGZvciBtYXBwaW5nIG9mIGEgcGFydGljdWxhciB0eXBlIFNIQUxMCisgICAgICAgIGJlIHNwZWNpZmllZCBpbiB0aGUgREVTQ1JJUFRJT04gY2xhdXNlIG9mIHRoZSBPQkpFQ1QtSURFTlRJVFkKKyAgICAgICAgdGhhdCBkZXNjcmliZXMgdGhlIG1hcHBpbmcuICBJZiBhIG1hcHBpbmcgc3VjY2VlZHMgaXQgd2lsbAorICAgICAgICByZXR1cm4gYSB0bVNlY3VyaXR5TmFtZSBmb3IgdXNlIGJ5IHRoZSBUTFNUTSBtb2RlbCBhbmQKKyAgICAgICAgcHJvY2Vzc2luZyBzdG9wcy4KKworICAgICAgICBJZiB0aGUgcmVzdWx0aW5nIG1hcHBlZCB2YWx1ZSBpcyBub3QgY29tcGF0aWJsZSB3aXRoIHRoZQorICAgICAgICBuZWVkZWQgcmVxdWlyZW1lbnRzIG9mIGEgdG1TZWN1cml0eU5hbWUgKGUuZy4sIFZBQ00gaW1wb3NlcyBhCisgICAgICAgIDMyLW9jdGV0LW1heGltdW0gbGVuZ3RoIGFuZCB0aGUgY2VydGlmaWNhdGUgZGVyaXZlZAorICAgICAgICBzZWN1cml0eU5hbWUgY291bGQgYmUgbG9uZ2VyKSwgdGhlbiBmdXR1cmUgcm93cyBNVVNUIGJlCisgICAgICAgIHNlYXJjaGVkIGZvciBhZGRpdGlvbmFsIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50IG1hdGNoZXMKKyAgICAgICAgdG8gbG9vayBmb3IgYSBtYXBwaW5nIHRoYXQgc3VjY2VlZHMuCisKKyAgICAgICAgU3VpdGFibGUgdmFsdWVzIGZvciBhc3NpZ25pbmcgdG8gdGhpcyBvYmplY3QgdGhhdCBhcmUgZGVmaW5lZAorICAgICAgICB3aXRoaW4gdGhlIFNOTVAtVExTLVRNLU1JQiBjYW4gYmUgZm91bmQgaW4gdGhlCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTk1JZGVudGl0aWVzIHBvcnRpb24gb2YgdGhlIE1JQiB0cmVlLiIKKyAgICBERUZWQUwgeyBzbm1wVGxzdG1DZXJ0U3BlY2lmaWVkIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSAzIH0KKworc25tcFRsc3RtQ2VydFRvVFNORGF0YSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIE9DVEVUIFNUUklORyAoU0laRSgwLi4xMDI0KSkKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQXV4aWxpYXJ5IGRhdGEgdXNlZCBhcyBvcHRpb25hbCBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uIGZvcgorICAgICAgICBhIGdpdmVuIG1hcHBpbmcgc3BlY2lmaWVkIGJ5IHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlCisgICAgICAgIGNvbHVtbi4gIE9ubHkgc29tZSBtYXBwaW5nIHN5c3RlbXMgd2lsbCBtYWtlIHVzZSBvZiB0aGlzCisgICAgICAgIGNvbHVtbi4gIFRoZSB2YWx1ZSBpbiB0aGlzIGNvbHVtbiBNVVNUIGJlIGlnbm9yZWQgZm9yIGFueQorICAgICAgICBtYXBwaW5nIHR5cGUgdGhhdCBkb2VzIG5vdCByZXF1aXJlIGRhdGEgcHJlc2VudCBpbiB0aGlzCisgICAgICAgIGNvbHVtbi4iCisgICAgREVGVkFMIHsgIiIgfQorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRUb1RTTkVudHJ5IDQgfQorCitzbm1wVGxzdG1DZXJ0VG9UU05TdG9yYWdlVHlwZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBTdG9yYWdlVHlwZQorICAgIE1BWC1BQ0NFU1MgICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdG9yYWdlIHR5cGUgZm9yIHRoaXMgY29uY2VwdHVhbCByb3cuICBDb25jZXB0dWFsIHJvd3MKKyAgICAgICAgaGF2aW5nIHRoZSB2YWx1ZSAncGVybWFuZW50JyBuZWVkIG5vdCBhbGxvdyB3cml0ZS1hY2Nlc3MgdG8KKyAgICAgICAgYW55IGNvbHVtbmFyIG9iamVjdHMgaW4gdGhlIHJvdy4iCisgICAgREVGVkFMICAgICAgeyBub25Wb2xhdGlsZSB9CisgICAgOjo9IHsgc25tcFRsc3RtQ2VydFRvVFNORW50cnkgNSB9CisKK3NubXBUbHN0bUNlcnRUb1RTTlJvd1N0YXR1cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFJvd1N0YXR1cworICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RhdHVzIG9mIHRoaXMgY29uY2VwdHVhbCByb3cuICBUaGlzIG9iamVjdCBtYXkgYmUgdXNlZAorICAgICAgICB0byBjcmVhdGUgb3IgcmVtb3ZlIHJvd3MgZnJvbSB0aGlzIHRhYmxlLgorCisgICAgICAgIFRvIGNyZWF0ZSBhIHJvdyBpbiB0aGlzIHRhYmxlLCBhbiBhZG1pbmlzdHJhdG9yIG11c3Qgc2V0IHRoaXMKKyAgICAgICAgb2JqZWN0IHRvIGVpdGhlciBjcmVhdGVBbmRHbyg0KSBvciBjcmVhdGVBbmRXYWl0KDUpLgorCisgICAgICAgIFVudGlsIGluc3RhbmNlcyBvZiBhbGwgY29ycmVzcG9uZGluZyBjb2x1bW5zIGFyZSBhcHByb3ByaWF0ZWx5CisgICAgICAgIGNvbmZpZ3VyZWQsIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIGNvbHVtbiBpcyBub3RSZWFkeSgzKS4KKworICAgICAgICBJbiBwYXJ0aWN1bGFyLCBhIG5ld2x5IGNyZWF0ZWQgcm93IGNhbm5vdCBiZSBtYWRlIGFjdGl2ZSB1bnRpbAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBzbm1wVGxzdG1DZXJ0VG9UU05GaW5nZXJwcmludCwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOTWFwVHlwZSwgYW5kIHNubXBUbHN0bUNlcnRUb1RTTkRhdGEgY29sdW1ucworICAgICAgICBoYXZlIGJlZW4gc2V0LgorCisgICAgICAgIFRoZSBmb2xsb3dpbmcgb2JqZWN0cyBtYXkgbm90IGJlIG1vZGlmaWVkIHdoaWxlIHRoZQorICAgICAgICB2YWx1ZSBvZiB0aGlzIG9iamVjdCBpcyBhY3RpdmUoMSk6CisgICAgICAgICAgICAtIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50CisgICAgICAgICAgICAtIHNubXBUbHN0bUNlcnRUb1RTTk1hcFR5cGUKKyAgICAgICAgICAgIC0gc25tcFRsc3RtQ2VydFRvVFNORGF0YQorICAgICAgICBBbiBhdHRlbXB0IHRvIHNldCB0aGVzZSBvYmplY3RzIHdoaWxlIHRoZSB2YWx1ZSBvZgorICAgICAgICBzbm1wVGxzdG1QYXJhbXNSb3dTdGF0dXMgaXMgYWN0aXZlKDEpIHdpbGwgcmVzdWx0IGluCisgICAgICAgIGFuIGluY29uc2lzdGVudFZhbHVlIGVycm9yLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0VG9UU05FbnRyeSA2IH0KKworLS0gTWFwcyB0bVNlY3VyaXR5TmFtZXMgdG8gY2VydGlmaWNhdGVzIGZvciB1c2UgYnkgdGhlIFNOTVAtVEFSR0VULU1JQgorCitzbm1wVGxzdG1QYXJhbXNDb3VudCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIEdhdWdlMzIKKyAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY291bnQgb2YgdGhlIG51bWJlciBvZiBlbnRyaWVzIGluIHRoZSBzbm1wVGxzdG1QYXJhbXNUYWJsZS4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDQgfQorCitzbm1wVGxzdG1QYXJhbXNUYWJsZUxhc3RDaGFuZ2VkIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZVN0YW1wCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgb2Ygc3lzVXBUaW1lLjAgd2hlbiB0aGUgc25tcFRsc3RtUGFyYW1zVGFibGUKKyAgICAgICAgd2FzIGxhc3QgbW9kaWZpZWQgdGhyb3VnaCBhbnkgbWVhbnMsIG9yIDAgaWYgaXQgaGFzIG5vdCBiZWVuCisgICAgICAgIG1vZGlmaWVkIHNpbmNlIHRoZSBjb21tYW5kIHJlc3BvbmRlciB3YXMgc3RhcnRlZC4iCisgICAgOjo9IHsgc25tcFRsc3RtQ2VydGlmaWNhdGVNYXBwaW5nIDUgfQorCitzbm1wVGxzdG1QYXJhbXNUYWJsZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNFUVVFTkNFIE9GIFNubXBUbHN0bVBhcmFtc0VudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgdGFibGUgaXMgdXNlZCBieSBhIChEKVRMUyBjbGllbnQgd2hlbiBhIChEKVRMUworICAgICAgICBjb25uZWN0aW9uIGlzIGJlaW5nIHNldCB1cCB1c2luZyBhbiBlbnRyeSBpbiB0aGUKKyAgICAgICAgU05NUC1UQVJHRVQtTUlCLiAgSXQgZXh0ZW5kcyB0aGUgU05NUC1UQVJHRVQtTUlCJ3MKKyAgICAgICAgc25tcFRhcmdldFBhcmFtc1RhYmxlIHdpdGggYSBmaW5nZXJwcmludCBvZiBhIGNlcnRpZmljYXRlIHRvCisgICAgICAgIHVzZSB3aGVuIGVzdGFibGlzaGluZyBzdWNoIGEgKEQpVExTIGNvbm5lY3Rpb24uIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyA2IH0KKworc25tcFRsc3RtUGFyYW1zRW50cnkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wVGxzdG1QYXJhbXNFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvbmNlcHR1YWwgcm93IGNvbnRhaW5pbmcgYSBmaW5nZXJwcmludCBoYXNoIG9mIGEgbG9jYWxseQorICAgICAgICBoZWxkIGNlcnRpZmljYXRlIGZvciBhIGdpdmVuIHNubXBUYXJnZXRQYXJhbXNFbnRyeS4gIFRoZQorICAgICAgICB2YWx1ZXMgaW4gdGhpcyByb3cgc2hvdWxkIGJlIGlnbm9yZWQgaWYgdGhlIGNvbm5lY3Rpb24gdGhhdAorICAgICAgICBuZWVkcyB0byBiZSBlc3RhYmxpc2hlZCwgYXMgaW5kaWNhdGVkIGJ5IHRoZSBTTk1QLVRBUkdFVC1NSUIKKyAgICAgICAgaW5mcmFzdHJ1Y3R1cmUsIGlzIG5vdCBhIGNlcnRpZmljYXRlIGFuZCAoRClUTFMgYmFzZWQKKyAgICAgICAgY29ubmVjdGlvbi4gIFRoZSBjb25uZWN0aW9uIFNIT1VMRCBOT1QgYmUgZXN0YWJsaXNoZWQgaWYgdGhlCisgICAgICAgIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHN0b3JlZCBpbiB0aGlzIGVudHJ5IGRvZXMgbm90IHBvaW50IHRvCisgICAgICAgIGEgdmFsaWQgbG9jYWxseSBoZWxkIGNlcnRpZmljYXRlIG9yIGlmIGl0IHBvaW50cyB0byBhbgorICAgICAgICB1bnVzYWJsZSBjZXJ0aWZpY2F0ZSAoc3VjaCBhcyBtaWdodCBoYXBwZW4gd2hlbiB0aGUKKyAgICAgICAgY2VydGlmaWNhdGUncyBleHBpcmF0aW9uIGRhdGUgaGFzIGJlZW4gcmVhY2hlZCkuIgorICAgIElOREVYICAgIHsgSU1QTElFRCBzbm1wVGFyZ2V0UGFyYW1zTmFtZSB9CisgICAgOjo9IHsgc25tcFRsc3RtUGFyYW1zVGFibGUgMSB9CisKK1NubXBUbHN0bVBhcmFtc0VudHJ5IDo6PSBTRVFVRU5DRSB7CisgICAgc25tcFRsc3RtUGFyYW1zQ2xpZW50RmluZ2VycHJpbnQgU25tcFRMU0ZpbmdlcnByaW50LAorICAgIHNubXBUbHN0bVBhcmFtc1N0b3JhZ2VUeXBlICAgICAgIFN0b3JhZ2VUeXBlLAorICAgIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyAgICAgICAgIFJvd1N0YXR1cworfQorCitzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBUTFNGaW5nZXJwcmludAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGlzIG9iamVjdCBzdG9yZXMgdGhlIGhhc2ggb2YgdGhlIHB1YmxpYyBwb3J0aW9uIG9mIGEKKyAgICAgICAgbG9jYWxseSBoZWxkIFguNTA5IGNlcnRpZmljYXRlLiAgVGhlIFguNTA5IGNlcnRpZmljYXRlLCBpdHMKKyAgICAgICAgcHVibGljIGtleSwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHByaXZhdGUga2V5IHdpbGwgYmUgdXNlZAorICAgICAgICB3aGVuIGluaXRpYXRpbmcgYSAoRClUTFMgY29ubmVjdGlvbiBhcyBhIChEKVRMUyBjbGllbnQuIgorICAgIDo6PSB7IHNubXBUbHN0bVBhcmFtc0VudHJ5IDEgfQorCitzbm1wVGxzdG1QYXJhbXNTdG9yYWdlVHlwZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBTdG9yYWdlVHlwZQorICAgIE1BWC1BQ0NFU1MgICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdG9yYWdlIHR5cGUgZm9yIHRoaXMgY29uY2VwdHVhbCByb3cuICBDb25jZXB0dWFsIHJvd3MKKyAgICAgICAgaGF2aW5nIHRoZSB2YWx1ZSAncGVybWFuZW50JyBuZWVkIG5vdCBhbGxvdyB3cml0ZS1hY2Nlc3MgdG8KKyAgICAgICAgYW55IGNvbHVtbmFyIG9iamVjdHMgaW4gdGhlIHJvdy4iCisgICAgREVGVkFMICAgICAgeyBub25Wb2xhdGlsZSB9CisgICAgOjo9IHsgc25tcFRsc3RtUGFyYW1zRW50cnkgMiB9CisKK3NubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFJvd1N0YXR1cworICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgc3RhdHVzIG9mIHRoaXMgY29uY2VwdHVhbCByb3cuICBUaGlzIG9iamVjdCBtYXkgYmUgdXNlZAorICAgICAgICB0byBjcmVhdGUgb3IgcmVtb3ZlIHJvd3MgZnJvbSB0aGlzIHRhYmxlLgorCisgICAgICAgIFRvIGNyZWF0ZSBhIHJvdyBpbiB0aGlzIHRhYmxlLCBhbiBhZG1pbmlzdHJhdG9yIG11c3Qgc2V0IHRoaXMKKyAgICAgICAgb2JqZWN0IHRvIGVpdGhlciBjcmVhdGVBbmRHbyg0KSBvciBjcmVhdGVBbmRXYWl0KDUpLgorCisgICAgICAgIFVudGlsIGluc3RhbmNlcyBvZiBhbGwgY29ycmVzcG9uZGluZyBjb2x1bW5zIGFyZSBhcHByb3ByaWF0ZWx5CisgICAgICAgIGNvbmZpZ3VyZWQsIHRoZSB2YWx1ZSBvZiB0aGUgY29ycmVzcG9uZGluZyBpbnN0YW5jZSBvZiB0aGUKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zUm93U3RhdHVzIGNvbHVtbiBpcyBub3RSZWFkeSgzKS4KKworICAgICAgICBJbiBwYXJ0aWN1bGFyLCBhIG5ld2x5IGNyZWF0ZWQgcm93IGNhbm5vdCBiZSBtYWRlIGFjdGl2ZSB1bnRpbAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCBjb2x1bW4gaGFzCisgICAgICAgIGJlZW4gc2V0LgorCisgICAgICAgIFRoZSBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCBvYmplY3QgbWF5IG5vdCBiZSBtb2RpZmllZAorICAgICAgICB3aGlsZSB0aGUgdmFsdWUgb2YgdGhpcyBvYmplY3QgaXMgYWN0aXZlKDEpLgorCisgICAgICAgIEFuIGF0dGVtcHQgdG8gc2V0IHRoZXNlIG9iamVjdHMgd2hpbGUgdGhlIHZhbHVlIG9mCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cyBpcyBhY3RpdmUoMSkgd2lsbCByZXN1bHQgaW4KKyAgICAgICAgYW4gaW5jb25zaXN0ZW50VmFsdWUgZXJyb3IuIgorICAgIDo6PSB7IHNubXBUbHN0bVBhcmFtc0VudHJ5IDMgfQorCitzbm1wVGxzdG1BZGRyQ291bnQgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBHYXVnZTMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiB0aGUgc25tcFRsc3RtQWRkclRhYmxlLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgNyB9CisKK3NubXBUbHN0bUFkZHJUYWJsZUxhc3RDaGFuZ2VkIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgVGltZVN0YW1wCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgdmFsdWUgb2Ygc3lzVXBUaW1lLjAgd2hlbiB0aGUgc25tcFRsc3RtQWRkclRhYmxlCisgICAgICAgIHdhcyBsYXN0IG1vZGlmaWVkIHRocm91Z2ggYW55IG1lYW5zLCBvciAwIGlmIGl0IGhhcyBub3QgYmVlbgorICAgICAgICBtb2RpZmllZCBzaW5jZSB0aGUgY29tbWFuZCByZXNwb25kZXIgd2FzIHN0YXJ0ZWQuIgorICAgIDo6PSB7IHNubXBUbHN0bUNlcnRpZmljYXRlTWFwcGluZyA4IH0KKworc25tcFRsc3RtQWRkclRhYmxlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgU0VRVUVOQ0UgT0YgU25tcFRsc3RtQWRkckVudHJ5CisgICAgTUFYLUFDQ0VTUyAgbm90LWFjY2Vzc2libGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoaXMgdGFibGUgaXMgdXNlZCBieSBhIChEKVRMUyBjbGllbnQgd2hlbiBhIChEKVRMUworICAgICAgICBjb25uZWN0aW9uIGlzIGJlaW5nIHNldCB1cCB1c2luZyBhbiBlbnRyeSBpbiB0aGUKKyAgICAgICAgU05NUC1UQVJHRVQtTUlCLiAgSXQgZXh0ZW5kcyB0aGUgU05NUC1UQVJHRVQtTUlCJ3MKKworICAgICAgICBzbm1wVGFyZ2V0QWRkclRhYmxlIHNvIHRoYXQgdGhlIGNsaWVudCBjYW4gdmVyaWZ5IHRoYXQgdGhlCisgICAgICAgIGNvcnJlY3Qgc2VydmVyIGhhcyBiZWVuIHJlYWNoZWQuICBUaGlzIHZlcmlmaWNhdGlvbiBjYW4gdXNlCisgICAgICAgIGVpdGhlciBhIGNlcnRpZmljYXRlIGZpbmdlcnByaW50LCBvciBhbiBpZGVudGl0eQorICAgICAgICBhdXRoZW50aWNhdGVkIHZpYSBjZXJ0aWZpY2F0aW9uIHBhdGggdmFsaWRhdGlvbi4KKworICAgICAgICBJZiB0aGVyZSBpcyBhbiBhY3RpdmUgcm93IGluIHRoaXMgdGFibGUgY29ycmVzcG9uZGluZyB0byB0aGUKKyAgICAgICAgZW50cnkgaW4gdGhlIFNOTVAtVEFSR0VULU1JQiB0aGF0IHdhcyB1c2VkIHRvIGVzdGFibGlzaCB0aGUKKyAgICAgICAgY29ubmVjdGlvbiwgYW5kIHRoZSByb3cncyBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQKKyAgICAgICAgY29sdW1uIGhhcyBub24tZW1wdHkgdmFsdWUsIHRoZW4gdGhlIHNlcnZlcidzIHByZXNlbnRlZAorICAgICAgICBjZXJ0aWZpY2F0ZSBpcyBjb21wYXJlZCB3aXRoIHRoZQorICAgICAgICBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgdmFsdWUgKGFuZCB0aGUKKyAgICAgICAgc25tcFRsc3RtQWRkclNlcnZlcklkZW50aXR5IGNvbHVtbiBpcyBpZ25vcmVkKS4gIElmIHRoZQorICAgICAgICBmaW5nZXJwcmludCBtYXRjaGVzLCB0aGUgdmVyaWZpY2F0aW9uIGhhcyBzdWNjZWVkZWQuICBJZiB0aGUKKyAgICAgICAgZmluZ2VycHJpbnQgZG9lcyBub3QgbWF0Y2gsIHRoZW4gdGhlIGNvbm5lY3Rpb24gTVVTVCBiZQorICAgICAgICBjbG9zZWQuCisKKyAgICAgICAgSWYgdGhlIHNlcnZlcidzIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSBoYXMgcGFzc2VkCisgICAgICAgIGNlcnRpZmljYXRpb24gcGF0aCB2YWxpZGF0aW9uIFtSRkM1MjgwXSB0byBhIGNvbmZpZ3VyZWQKKyAgICAgICAgdHJ1c3QgYW5jaG9yLCBhbmQgYW4gYWN0aXZlIHJvdyBleGlzdHMgd2l0aCBhIHplcm8tbGVuZ3RoCisgICAgICAgIHNubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCB2YWx1ZSwgdGhlbiB0aGUKKyAgICAgICAgc25tcFRsc3RtQWRkclNlcnZlcklkZW50aXR5IGNvbHVtbiBjb250YWlucyB0aGUgZXhwZWN0ZWQKKyAgICAgICAgaG9zdCBuYW1lLiAgVGhpcyBleHBlY3RlZCBob3N0IG5hbWUgaXMgdGhlbiBjb21wYXJlZCBhZ2FpbnN0CisgICAgICAgIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBhcyBmb2xsb3dzOgorCisgICAgICAgICAgLSBJbXBsZW1lbnRhdGlvbnMgTVVTVCBzdXBwb3J0IG1hdGNoaW5nIHRoZSBleHBlY3RlZCBob3N0CisgICAgICAgICAgbmFtZSBhZ2FpbnN0IGEgZE5TTmFtZSBpbiB0aGUgc3ViamVjdEFsdE5hbWUgZXh0ZW5zaW9uCisgICAgICAgICAgZmllbGQgYW5kIE1BWSBzdXBwb3J0IGNoZWNraW5nIHRoZSBuYW1lIGFnYWluc3QgdGhlCisgICAgICAgICAgQ29tbW9uTmFtZSBwb3J0aW9uIG9mIHRoZSBzdWJqZWN0IGRpc3Rpbmd1aXNoZWQgbmFtZS4KKworICAgICAgICAgIC0gVGhlICcqJyAoQVNDSUkgMHgyYSkgd2lsZGNhcmQgY2hhcmFjdGVyIGlzIGFsbG93ZWQgaW4gdGhlCisgICAgICAgICAgZE5TTmFtZSBvZiB0aGUgc3ViamVjdEFsdE5hbWUgZXh0ZW5zaW9uIChhbmQgaW4gY29tbW9uCisgICAgICAgICAgbmFtZSwgaWYgdXNlZCB0byBzdG9yZSB0aGUgaG9zdCBuYW1lKSwgYnV0IG9ubHkgYXMgdGhlCisgICAgICAgICAgbGVmdC1tb3N0IChsZWFzdCBzaWduaWZpY2FudCkgRE5TIGxhYmVsIGluIHRoYXQgdmFsdWUuCisgICAgICAgICAgVGhpcyB3aWxkY2FyZCBtYXRjaGVzIGFueSBsZWZ0LW1vc3QgRE5TIGxhYmVsIGluIHRoZQorICAgICAgICAgIHNlcnZlciBuYW1lLiAgVGhhdCBpcywgdGhlIHN1YmplY3QgKi5leGFtcGxlLmNvbSBtYXRjaGVzCisgICAgICAgICAgdGhlIHNlcnZlciBuYW1lcyBhLmV4YW1wbGUuY29tIGFuZCBiLmV4YW1wbGUuY29tLCBidXQgZG9lcworICAgICAgICAgIG5vdCBtYXRjaCBleGFtcGxlLmNvbSBvciBhLmIuZXhhbXBsZS5jb20uICBJbXBsZW1lbnRhdGlvbnMKKyAgICAgICAgICBNVVNUIHN1cHBvcnQgd2lsZGNhcmRzIGluIGNlcnRpZmljYXRlcyBhcyBzcGVjaWZpZWQgYWJvdmUsCisgICAgICAgICAgYnV0IE1BWSBwcm92aWRlIGEgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZGlzYWJsZSB0aGVtLgorCisgICAgICAgICAgLSBJZiB0aGUgbG9jYWxseSBjb25maWd1cmVkIG5hbWUgaXMgYW4gaW50ZXJuYXRpb25hbGl6ZWQKKyAgICAgICAgICBkb21haW4gbmFtZSwgY29uZm9ybWluZyBpbXBsZW1lbnRhdGlvbnMgTVVTVCBjb252ZXJ0IGl0IHRvCisgICAgICAgICAgdGhlIEFTQ0lJIENvbXBhdGlibGUgRW5jb2RpbmcgKEFDRSkgZm9ybWF0IGZvciBwZXJmb3JtaW5nCisgICAgICAgICAgY29tcGFyaXNvbnMsIGFzIHNwZWNpZmllZCBpbiBTZWN0aW9uIDcgb2YgW1JGQzUyODBdLgorCisgICAgICAgIElmIHRoZSBleHBlY3RlZCBob3N0IG5hbWUgZmFpbHMgdGhlc2UgY29uZGl0aW9ucyB0aGVuIHRoZQorICAgICAgICBjb25uZWN0aW9uIE1VU1QgYmUgY2xvc2VkLgorCisgICAgICAgIElmIHRoZXJlIGlzIG5vIHJvdyBpbiB0aGlzIHRhYmxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGVudHJ5CisgICAgICAgIGluIHRoZSBTTk1QLVRBUkdFVC1NSUIgYW5kIHRoZSBzZXJ2ZXIgY2FuIGJlIGF1dGhvcml6ZWQgYnkKKyAgICAgICAgYW5vdGhlciwgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IG1lYW5zLCB0aGVuIHRoZSBjb25uZWN0aW9uCisgICAgICAgIE1BWSBzdGlsbCBwcm9jZWVkLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1DZXJ0aWZpY2F0ZU1hcHBpbmcgOSB9CisKK3NubXBUbHN0bUFkZHJFbnRyeSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBUbHN0bUFkZHJFbnRyeQorICAgIE1BWC1BQ0NFU1MgIG5vdC1hY2Nlc3NpYmxlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvbmNlcHR1YWwgcm93IGNvbnRhaW5pbmcgYSBjb3B5IG9mIGEgY2VydGlmaWNhdGUncworICAgICAgICBmaW5nZXJwcmludCBmb3IgYSBnaXZlbiBzbm1wVGFyZ2V0QWRkckVudHJ5LiAgVGhlIHZhbHVlcyBpbgorICAgICAgICB0aGlzIHJvdyBzaG91bGQgYmUgaWdub3JlZCBpZiB0aGUgY29ubmVjdGlvbiB0aGF0IG5lZWRzIHRvIGJlCisgICAgICAgIGVzdGFibGlzaGVkLCBhcyBpbmRpY2F0ZWQgYnkgdGhlIFNOTVAtVEFSR0VULU1JQgorICAgICAgICBpbmZyYXN0cnVjdHVyZSwgaXMgbm90IGEgKEQpVExTIGJhc2VkIGNvbm5lY3Rpb24uICBJZiBhbgorICAgICAgICBzbm1wVGxzdG1BZGRyRW50cnkgZXhpc3RzIGZvciBhIGdpdmVuIHNubXBUYXJnZXRBZGRyRW50cnksIHRoZW4KKyAgICAgICAgdGhlIHByZXNlbnRlZCBzZXJ2ZXIgY2VydGlmaWNhdGUgTVVTVCBtYXRjaCBvciB0aGUgY29ubmVjdGlvbgorICAgICAgICBNVVNUIE5PVCBiZSBlc3RhYmxpc2hlZC4gIElmIGEgcm93IGluIHRoaXMgdGFibGUgZG9lcyBub3QKKyAgICAgICAgZXhpc3QgdG8gbWF0Y2ggYW4gc25tcFRhcmdldEFkZHJFbnRyeSByb3csIHRoZW4gdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgU0hPVUxEIHN0aWxsIHByb2NlZWQgaWYgc29tZSBvdGhlciBjZXJ0aWZpY2F0ZSB2YWxpZGF0aW9uIHBhdGgKKyAgICAgICAgYWxnb3JpdGhtIChlLmcuLCBSRkMgNTI4MCkgY2FuIGJlIHVzZWQuIgorICAgIElOREVYICAgIHsgSU1QTElFRCBzbm1wVGFyZ2V0QWRkck5hbWUgfQorICAgIDo6PSB7IHNubXBUbHN0bUFkZHJUYWJsZSAxIH0KKworU25tcFRsc3RtQWRkckVudHJ5IDo6PSBTRVFVRU5DRSB7CisgICAgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50ICAgIFNubXBUTFNGaW5nZXJwcmludCwKKyAgICBzbm1wVGxzdG1BZGRyU2VydmVySWRlbnRpdHkgICAgICAgU25tcEFkbWluU3RyaW5nLAorICAgIHNubXBUbHN0bUFkZHJTdG9yYWdlVHlwZSAgICAgICAgICBTdG9yYWdlVHlwZSwKKyAgICBzbm1wVGxzdG1BZGRyUm93U3RhdHVzICAgICAgICAgICAgUm93U3RhdHVzCit9CisKK3NubXBUbHN0bUFkZHJTZXJ2ZXJGaW5nZXJwcmludCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFNubXBUTFNGaW5nZXJwcmludAorICAgIE1BWC1BQ0NFU1MgIHJlYWQtY3JlYXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNyeXB0b2dyYXBoaWMgaGFzaCBvZiBhIHB1YmxpYyBYLjUwOSBjZXJ0aWZpY2F0ZS4gIFRoaXMKKyAgICAgICAgb2JqZWN0IHNob3VsZCBzdG9yZSB0aGUgaGFzaCBvZiB0aGUgcHVibGljIFguNTA5IGNlcnRpZmljYXRlCisgICAgICAgIHRoYXQgdGhlIHJlbW90ZSBzZXJ2ZXIgc2hvdWxkIHByZXNlbnQgZHVyaW5nIHRoZSAoRClUTFMKKyAgICAgICAgY29ubmVjdGlvbiBzZXR1cC4gIFRoZSBmaW5nZXJwcmludCBvZiB0aGUgcHJlc2VudGVkCisgICAgICAgIGNlcnRpZmljYXRlIGFuZCB0aGlzIGhhc2ggdmFsdWUgTVVTVCBtYXRjaCBleGFjdGx5IG9yIHRoZQorICAgICAgICBjb25uZWN0aW9uIE1VU1QgTk9UIGJlIGVzdGFibGlzaGVkLiIKKyAgICBERUZWQUwgeyAiIiB9CisgICAgOjo9IHsgc25tcFRsc3RtQWRkckVudHJ5IDEgfQorCitzbm1wVGxzdG1BZGRyU2VydmVySWRlbnRpdHkgT0JKRUNULVRZUEUKKyAgICBTWU5UQVggICAgICBTbm1wQWRtaW5TdHJpbmcKKyAgICBNQVgtQUNDRVNTICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIHJlZmVyZW5jZSBpZGVudGl0eSB0byBjaGVjayBhZ2FpbnN0IHRoZSBpZGVudGl0eQorICAgICAgICBwcmVzZW50ZWQgYnkgdGhlIHJlbW90ZSBzeXN0ZW0uIgorICAgIERFRlZBTCB7ICIiIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1BZGRyRW50cnkgMiB9CisKK3NubXBUbHN0bUFkZHJTdG9yYWdlVHlwZSBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBTdG9yYWdlVHlwZQorICAgIE1BWC1BQ0NFU1MgICByZWFkLWNyZWF0ZQorICAgIFNUQVRVUyAgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdG9yYWdlIHR5cGUgZm9yIHRoaXMgY29uY2VwdHVhbCByb3cuICBDb25jZXB0dWFsIHJvd3MKKyAgICAgICAgaGF2aW5nIHRoZSB2YWx1ZSAncGVybWFuZW50JyBuZWVkIG5vdCBhbGxvdyB3cml0ZS1hY2Nlc3MgdG8KKyAgICAgICAgYW55IGNvbHVtbmFyIG9iamVjdHMgaW4gdGhlIHJvdy4iCisgICAgREVGVkFMICAgICAgeyBub25Wb2xhdGlsZSB9CisgICAgOjo9IHsgc25tcFRsc3RtQWRkckVudHJ5IDMgfQorCitzbm1wVGxzdG1BZGRyUm93U3RhdHVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgUm93U3RhdHVzCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1jcmVhdGUKKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIlRoZSBzdGF0dXMgb2YgdGhpcyBjb25jZXB0dWFsIHJvdy4gIFRoaXMgb2JqZWN0IG1heSBiZSB1c2VkCisgICAgICAgIHRvIGNyZWF0ZSBvciByZW1vdmUgcm93cyBmcm9tIHRoaXMgdGFibGUuCisKKyAgICAgICAgVG8gY3JlYXRlIGEgcm93IGluIHRoaXMgdGFibGUsIGFuIGFkbWluaXN0cmF0b3IgbXVzdCBzZXQgdGhpcworICAgICAgICBvYmplY3QgdG8gZWl0aGVyIGNyZWF0ZUFuZEdvKDQpIG9yIGNyZWF0ZUFuZFdhaXQoNSkuCisKKyAgICAgICAgVW50aWwgaW5zdGFuY2VzIG9mIGFsbCBjb3JyZXNwb25kaW5nIGNvbHVtbnMgYXJlCisgICAgICAgIGFwcHJvcHJpYXRlbHkgY29uZmlndXJlZCwgdGhlIHZhbHVlIG9mIHRoZQorICAgICAgICBjb3JyZXNwb25kaW5nIGluc3RhbmNlIG9mIHRoZSBzbm1wVGxzdG1BZGRyUm93U3RhdHVzCisgICAgICAgIGNvbHVtbiBpcyBub3RSZWFkeSgzKS4KKworICAgICAgICBJbiBwYXJ0aWN1bGFyLCBhIG5ld2x5IGNyZWF0ZWQgcm93IGNhbm5vdCBiZSBtYWRlIGFjdGl2ZSB1bnRpbAorICAgICAgICB0aGUgY29ycmVzcG9uZGluZyBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQgY29sdW1uIGhhcyBiZWVuCisgICAgICAgIHNldC4KKworICAgICAgICBSb3dzIE1VU1QgTk9UIGJlIGFjdGl2ZSBpZiB0aGUgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50CisgICAgICAgIGNvbHVtbiBpcyBibGFuayBhbmQgdGhlIHNubXBUbHN0bUFkZHJTZXJ2ZXJJZGVudGl0eSBpcyBzZXQgdG8KKyAgICAgICAgJyonIHNpbmNlIHRoaXMgd291bGQgaW5zZWN1cmVseSBhY2NlcHQgYW55IHByZXNlbnRlZAorICAgICAgICBjZXJ0aWZpY2F0ZS4KKworICAgICAgICBUaGUgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50IG9iamVjdCBtYXkgbm90IGJlIG1vZGlmaWVkCisgICAgICAgIHdoaWxlIHRoZSB2YWx1ZSBvZiB0aGlzIG9iamVjdCBpcyBhY3RpdmUoMSkuCisKKyAgICAgICAgQW4gYXR0ZW1wdCB0byBzZXQgdGhlc2Ugb2JqZWN0cyB3aGlsZSB0aGUgdmFsdWUgb2YKKyAgICAgICAgc25tcFRsc3RtQWRkclJvd1N0YXR1cyBpcyBhY3RpdmUoMSkgd2lsbCByZXN1bHQgaW4KKyAgICAgICAgYW4gaW5jb25zaXN0ZW50VmFsdWUgZXJyb3IuIgorICAgIDo6PSB7IHNubXBUbHN0bUFkZHJFbnRyeSA0IH0KKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLSAgc25tcFRsc3RtTm90aWZpY2F0aW9ucyAtIE5vdGlmaWNhdGlvbnMgSW5mb3JtYXRpb24KKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitzbm1wVGxzdG1TZXJ2ZXJDZXJ0aWZpY2F0ZVVua25vd24gTk9USUZJQ0FUSU9OLVRZUEUKKyAgICBPQkpFQ1RTIHsgc25tcFRsc3RtU2Vzc2lvblVua25vd25TZXJ2ZXJDZXJ0aWZpY2F0ZSB9CisgICAgU1RBVFVTICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIk5vdGlmaWNhdGlvbiB0aGF0IHRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgcHJlc2VudGVkIGJ5IGFuIFNOTVAKKyAgICAgICAgIG92ZXIgKEQpVExTIHNlcnZlciB3YXMgaW52YWxpZCBiZWNhdXNlIG5vIGNvbmZpZ3VyZWQKKyAgICAgICAgIGZpbmdlcnByaW50IG9yIENBIHdhcyBhY2NlcHRhYmxlIHRvIHZhbGlkYXRlIGl0LiAgVGhpcyBtYXkgYmUKKyAgICAgICAgIGJlY2F1c2UgdGhlcmUgd2FzIG5vIGVudHJ5IGluIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUgb3IKKyAgICAgICAgIGJlY2F1c2Ugbm8gcGF0aCBjb3VsZCBiZSBmb3VuZCB0byBrbm93biBDZXJ0aWZpY2F0aW9uCisgICAgICAgICBBdXRob3JpdHkuCisKKyAgICAgICAgIFRvIGF2b2lkIG5vdGlmaWNhdGlvbiBsb29wcywgdGhpcyBub3RpZmljYXRpb24gTVVTVCBOT1QgYmUKKyAgICAgICAgIHNlbnQgdG8gc2VydmVycyB0aGF0IHRoZW1zZWx2ZXMgaGF2ZSB0cmlnZ2VyZWQgdGhlCisgICAgICAgICBub3RpZmljYXRpb24uIgorICAgIDo6PSB7IHNubXBUbHN0bU5vdGlmaWNhdGlvbnMgMSB9CisKK3NubXBUbHN0bVNlcnZlckludmFsaWRDZXJ0aWZpY2F0ZSBOT1RJRklDQVRJT04tVFlQRQorICAgIE9CSkVDVFMgeyBzbm1wVGxzdG1BZGRyU2VydmVyRmluZ2VycHJpbnQsCisgICAgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzfQorICAgIFNUQVRVUyAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJOb3RpZmljYXRpb24gdGhhdCB0aGUgc2VydmVyIGNlcnRpZmljYXRlIHByZXNlbnRlZCBieSBhbiBTTk1QCisgICAgICAgICBvdmVyIChEKVRMUyBzZXJ2ZXIgY291bGQgbm90IGJlIHZhbGlkYXRlZCBldmVuIGlmIHRoZQorICAgICAgICAgZmluZ2VycHJpbnQgb3IgZXhwZWN0ZWQgdmFsaWRhdGlvbiBwYXRoIHdhcyBrbm93bi4gIFRoYXQgaXMsIGEKKyAgICAgICAgIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbiBlcnJvciBvY2N1cnJlZCBkdXJpbmcgY2VydGlmaWNhdGUKKyAgICAgICAgIHZhbGlkYXRpb24gcHJvY2Vzc2luZy4KKworICAgICAgICAgVG8gYXZvaWQgbm90aWZpY2F0aW9uIGxvb3BzLCB0aGlzIG5vdGlmaWNhdGlvbiBNVVNUIE5PVCBiZQorICAgICAgICAgc2VudCB0byBzZXJ2ZXJzIHRoYXQgdGhlbXNlbHZlcyBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgICAgICAgIG5vdGlmaWNhdGlvbi4iCisgICAgOjo9IHsgc25tcFRsc3RtTm90aWZpY2F0aW9ucyAyIH0KKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLSBzbm1wVGxzdG1Db21wbGlhbmNlcyAtIENvbmZvcm1hbmNlIEluZm9ybWF0aW9uCistLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworc25tcFRsc3RtQ29tcGxpYW5jZXMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRsc3RtQ29uZm9ybWFuY2UgMSB9CisKK3NubXBUbHN0bUdyb3VwcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVGxzdG1Db25mb3JtYW5jZSAyIH0KKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLSBDb21wbGlhbmNlIHN0YXRlbWVudHMKKy0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitzbm1wVGxzdG1Db21wbGlhbmNlIE1PRFVMRS1DT01QTElBTkNFCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgY29tcGxpYW5jZSBzdGF0ZW1lbnQgZm9yIFNOTVAgZW5naW5lcyB0aGF0IHN1cHBvcnQgdGhlCisgICAgICAgIFNOTVAtVExTLVRNLU1JQiIKKyAgICBNT0RVTEUKKyAgICAgICAgTUFOREFUT1JZLUdST1VQUyB7IHNubXBUbHN0bVN0YXRzR3JvdXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wVGxzdG1JbmNvbWluZ0dyb3VwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcFRsc3RtT3V0Z29pbmdHcm91cCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBUbHN0bU5vdGlmaWNhdGlvbkdyb3VwIH0KKyAgICA6Oj0geyBzbm1wVGxzdG1Db21wbGlhbmNlcyAxIH0KKworLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCistLSBVbml0cyBvZiBjb25mb3JtYW5jZQorLS0gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzbm1wVGxzdG1TdGF0c0dyb3VwIE9CSkVDVC1HUk9VUAorICAgIE9CSkVDVFMgeworICAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbnMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25DbGllbnRDbG9zZXMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uQWNjZXB0cywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvblNlcnZlckNsb3NlcywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbk5vU2Vzc2lvbnMsCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2xpZW50Q2VydGlmaWNhdGVzLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uVW5rbm93blNlcnZlckNlcnRpZmljYXRlLAorICAgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZFNlcnZlckNlcnRpZmljYXRlcywKKyAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDYWNoZXMKKyAgICB9CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJBIGNvbGxlY3Rpb24gb2Ygb2JqZWN0cyBmb3IgbWFpbnRhaW5pbmcKKyAgICAgICAgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gb2YgYW4gU05NUCBlbmdpbmUgdGhhdAorICAgICAgICBpbXBsZW1lbnRzIHRoZSBTTk1QIFRMUyBUcmFuc3BvcnQgTW9kZWwuIgorICAgIDo6PSB7IHNubXBUbHN0bUdyb3VwcyAxIH0KKworc25tcFRsc3RtSW5jb21pbmdHcm91cCBPQkpFQ1QtR1JPVVAKKyAgICBPQkpFQ1RTIHsKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOQ291bnQsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTlRhYmxlTGFzdENoYW5nZWQsCisgICAgICAgIHNubXBUbHN0bUNlcnRUb1RTTkZpbmdlcnByaW50LAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05NYXBUeXBlLAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05EYXRhLAorICAgICAgICBzbm1wVGxzdG1DZXJ0VG9UU05TdG9yYWdlVHlwZSwKKyAgICAgICAgc25tcFRsc3RtQ2VydFRvVFNOUm93U3RhdHVzCisgICAgfQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiQSBjb2xsZWN0aW9uIG9mIG9iamVjdHMgZm9yIG1haW50YWluaW5nCisgICAgICAgIGluY29taW5nIGNvbm5lY3Rpb24gY2VydGlmaWNhdGUgbWFwcGluZ3MgdG8KKyAgICAgICAgdG1TZWN1cml0eU5hbWVzIG9mIGFuIFNOTVAgZW5naW5lIHRoYXQgaW1wbGVtZW50cyB0aGUKKyAgICAgICAgU05NUCBUTFMgVHJhbnNwb3J0IE1vZGVsLiIKKyAgICA6Oj0geyBzbm1wVGxzdG1Hcm91cHMgMiB9CisKK3NubXBUbHN0bU91dGdvaW5nR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIHNubXBUbHN0bVBhcmFtc0NvdW50LAorICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZUxhc3RDaGFuZ2VkLAorICAgICAgICBzbm1wVGxzdG1QYXJhbXNDbGllbnRGaW5nZXJwcmludCwKKyAgICAgICAgc25tcFRsc3RtUGFyYW1zU3RvcmFnZVR5cGUsCisgICAgICAgIHNubXBUbHN0bVBhcmFtc1Jvd1N0YXR1cywKKyAgICAgICAgc25tcFRsc3RtQWRkckNvdW50LAorICAgICAgICBzbm1wVGxzdG1BZGRyVGFibGVMYXN0Q2hhbmdlZCwKKyAgICAgICAgc25tcFRsc3RtQWRkclNlcnZlckZpbmdlcnByaW50LAorICAgICAgICBzbm1wVGxzdG1BZGRyU2VydmVySWRlbnRpdHksCisgICAgICAgIHNubXBUbHN0bUFkZHJTdG9yYWdlVHlwZSwKKyAgICAgICAgc25tcFRsc3RtQWRkclJvd1N0YXR1cworICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04KKyAgICAgICAgIkEgY29sbGVjdGlvbiBvZiBvYmplY3RzIGZvciBtYWludGFpbmluZworICAgICAgICBvdXRnb2luZyBjb25uZWN0aW9uIGNlcnRpZmljYXRlcyB0byB1c2Ugd2hlbiBvcGVuaW5nCisgICAgICAgIGNvbm5lY3Rpb25zIGFzIGEgcmVzdWx0IG9mIFNOTVAtVEFSR0VULU1JQiBzZXR0aW5ncy4iCisgICAgOjo9IHsgc25tcFRsc3RtR3JvdXBzIDMgfQorCitzbm1wVGxzdG1Ob3RpZmljYXRpb25Hcm91cCBOT1RJRklDQVRJT04tR1JPVVAKKyAgICBOT1RJRklDQVRJT05TIHsKKyAgICAgICAgc25tcFRsc3RtU2VydmVyQ2VydGlmaWNhdGVVbmtub3duLAorICAgICAgICBzbm1wVGxzdG1TZXJ2ZXJJbnZhbGlkQ2VydGlmaWNhdGUKKyAgICB9CisgICAgU1RBVFVTIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiTm90aWZpY2F0aW9ucyIKKyAgICA6Oj0geyBzbm1wVGxzdG1Hcm91cHMgNCB9CisKK0VORApkaWZmIC0tZ2l0IGEvbWlicy9TTk1QLVRTTS1NSUIudHh0IGIvbWlicy9TTk1QLVRTTS1NSUIudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjY2YwOWIKLS0tIC9kZXYvbnVsbAorKysgYi9taWJzL1NOTVAtVFNNLU1JQi50eHQKQEAgLTAsMCArMSwyMzQgQEAKK1NOTVAtVFNNLU1JQiBERUZJTklUSU9OUyA6Oj0gQkVHSU4KKworSU1QT1JUUworICAgIE1PRFVMRS1JREVOVElUWSwgT0JKRUNULVRZUEUsCisgICAgbWliLTIsIENvdW50ZXIzMgorICAgICAgRlJPTSBTTk1QdjItU01JIC0tIFJGQzI1NzgKKyAgICBNT0RVTEUtQ09NUExJQU5DRSwgT0JKRUNULUdST1VQCisgICAgICBGUk9NIFNOTVB2Mi1DT05GIC0tIFJGQzI1ODAKKyAgICBUcnV0aFZhbHVlCisgICAgICAgRlJPTSBTTk1QdjItVEMgLS0gUkZDMjU3OQorICAgIDsKKworc25tcFRzbU1JQiBNT0RVTEUtSURFTlRJVFkKKyAgICBMQVNULVVQREFURUQgIjIwMDkwNjA5MDAwMFoiCisgICAgT1JHQU5JWkFUSU9OICJJU01TIFdvcmtpbmcgR3JvdXAiCisgICAgQ09OVEFDVC1JTkZPICJXRy1FTWFpbDogICBpc21zQGxpc3RzLmlldGYub3JnCisgICAgICAgICAgICAgICAgICBTdWJzY3JpYmU6ICBpc21zLXJlcXVlc3RAbGlzdHMuaWV0Zi5vcmcKKworICAgICAgICAgICAgICAgICAgQ2hhaXJzOgorICAgICAgICAgICAgICAgICAgICBKdWVyZ2VuIFF1aXR0ZWsKKyAgICAgICAgICAgICAgICAgICAgTkVDIEV1cm9wZSBMdGQuCisgICAgICAgICAgICAgICAgICAgIE5ldHdvcmsgTGFib3JhdG9yaWVzCisgICAgICAgICAgICAgICAgICAgIEt1cmZ1ZXJzdGVuLUFubGFnZSAzNgorICAgICAgICAgICAgICAgICAgICA2OTExNSBIZWlkZWxiZXJnCisgICAgICAgICAgICAgICAgICAgIEdlcm1hbnkKKyAgICAgICAgICAgICAgICAgICAgKzQ5IDYyMjEgOTA1MTEtMTUKKyAgICAgICAgICAgICAgICAgICAgcXVpdHRla0BuZXRsYWIubmVjLmRlCisKKyAgICAgICAgICAgICAgICAgICAgSnVlcmdlbiBTY2hvZW53YWVsZGVyCisgICAgICAgICAgICAgICAgICAgIEphY29icyBVbml2ZXJzaXR5IEJyZW1lbgorICAgICAgICAgICAgICAgICAgICBDYW1wdXMgUmluZyAxCisgICAgICAgICAgICAgICAgICAgIDI4NzI1IEJyZW1lbgorICAgICAgICAgICAgICAgICAgICBHZXJtYW55CisgICAgICAgICAgICAgICAgICAgICs0OSA0MjEgMjAwLTM1ODcKKyAgICAgICAgICAgICAgICAgICAgai5zY2hvZW53YWVsZGVyQGphY29icy11bml2ZXJzaXR5LmRlCisKKyAgICAgICAgICAgICAgICAgIEVkaXRvcjoKKyAgICAgICAgICAgICAgICAgICAgRGF2aWQgSGFycmluZ3RvbgorICAgICAgICAgICAgICAgICAgICBIdWF3ZWkgVGVjaG5vbG9naWVzIFVTQQorICAgICAgICAgICAgICAgICAgICAxNzAwIEFsbWEgRHIuCisgICAgICAgICAgICAgICAgICAgIFBsYW5vIFRYIDc1MDc1CisgICAgICAgICAgICAgICAgICAgIFVTQQorICAgICAgICAgICAgICAgICAgICArMSA2MDMtNDM2LTg2MzQKKyAgICAgICAgICAgICAgICAgICAgaWV0ZmRiaEBjb21jYXN0Lm5ldAorCisgICAgICAgICAgICAgICAgICAgIFdlcyBIYXJkYWtlcgorICAgICAgICAgICAgICAgICAgICBDb2JoYW0gQW5hbHl0aWMgU29sdXRpb25zCisgICAgICAgICAgICAgICAgICAgIFAuTy4gQm94IDM4MgorICAgICAgICAgICAgICAgICAgICBEYXZpcywgQ0EgIDk1NjE3CisgICAgICAgICAgICAgICAgICAgIFVTQQorICAgICAgICAgICAgICAgICAgICArMSA1MzAgNzkyIDE5MTMKKyAgICAgICAgICAgICAgICAgICAgaWV0ZkBoYXJkYWtlcnMubmV0CisgICAgICAgICAgICAgICAgICIKKyAgICBERVNDUklQVElPTgorICAgICAgICJUaGUgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsIE1JQi4KKworICAgICAgICBJbiBrZWVwaW5nIHdpdGggdGhlIFJGQyAzNDExIGRlc2lnbiBkZWNpc2lvbnMgdG8gdXNlCisgICAgICAgIHNlbGYtY29udGFpbmVkIGRvY3VtZW50cywgdGhlIFJGQyB0aGF0IGNvbnRhaW5zIHRoZSBkZWZpbml0aW9uCisgICAgICAgIG9mIHRoaXMgTUlCIG1vZHVsZSBhbHNvIGluY2x1ZGVzIHRoZSBlbGVtZW50cyBvZiBwcm9jZWR1cmUKKyAgICAgICAgdGhhdCBhcmUgbmVlZGVkIGZvciBwcm9jZXNzaW5nIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwKKyAgICAgICAgZm9yIFNOTVAuICBUaGVzZSBNSUIgb2JqZWN0cyBTSE9VTEQgTk9UIGJlIG1vZGlmaWVkIHZpYSBvdGhlcgorICAgICAgICBzdWJzeXN0ZW1zIG9yIG1vZGVscyBkZWZpbmVkIGluIG90aGVyIGRvY3VtZW50cy4gIFRoaXMgYWxsb3dzCisgICAgICAgIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwgZm9yIFNOTVAgdG8gYmUgZGVzaWduZWQgYW5kCisgICAgICAgIGRvY3VtZW50ZWQgYXMgaW5kZXBlbmRlbnQgYW5kIHNlbGYtY29udGFpbmVkLCBoYXZpbmcgbm8gZGlyZWN0CisgICAgICAgIGltcGFjdCBvbiBvdGhlciBtb2R1bGVzLCBhbmQgdGhpcyBhbGxvd3MgdGhpcyBtb2R1bGUgdG8gYmUKKyAgICAgICAgdXBncmFkZWQgYW5kIHN1cHBsZW1lbnRlZCBhcyB0aGUgbmVlZCBhcmlzZXMsIGFuZCB0byBtb3ZlCisgICAgICAgIGFsb25nIHRoZSBzdGFuZGFyZHMgdHJhY2sgb24gZGlmZmVyZW50IHRpbWUtbGluZXMgZnJvbSBvdGhlcgorICAgICAgICBtb2R1bGVzLgorCisgICAgICAgIENvcHlyaWdodCAoYykgMjAwOSBJRVRGIFRydXN0IGFuZCB0aGUgcGVyc29ucworICAgICAgICBpZGVudGlmaWVkIGFzIGF1dGhvcnMgb2YgdGhlIGNvZGUuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKKyAgICAgICAgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUKKyAgICAgICAgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICAgICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgICAgICAgICAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICAgIC0gTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlcm5ldCBTb2NpZXR5LCBJRVRGIG9yIElFVEYgVHJ1c3QsCisgICAgICAgICAgbm9yIHRoZSBuYW1lcyBvZiBzcGVjaWZpYyBjb250cmlidXRvcnMsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKyAgICAgICAgICBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICAgICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgICAgICAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECisgICAgICAgIENPTlRSSUJVVE9SUyAnQVMgSVMnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCisgICAgICAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgICAgICAgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgICAgICAgIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCisgICAgICAgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICAgICAgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgICAgICAgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgICAgICAgIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgICAgICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICAgICAgICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IKKyAgICAgICAgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKKyAgICAgICAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworICAgICAgICBUaGlzIHZlcnNpb24gb2YgdGhpcyBNSUIgbW9kdWxlIGlzIHBhcnQgb2YgUkZDIDU1OTE7CisgICAgICAgIHNlZSB0aGUgUkZDIGl0c2VsZiBmb3IgZnVsbCBsZWdhbCBub3RpY2VzLiIKKworICAgIFJFVklTSU9OICAgICIyMDA5MDYwOTAwMDBaIgorICAgIERFU0NSSVBUSU9OICJUaGUgaW5pdGlhbCB2ZXJzaW9uLCBwdWJsaXNoZWQgaW4gUkZDIDU1OTEuIgorICAgIDo6PSB7IG1pYi0yIDE5MCB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKy0tIHN1YnRyZWVzIGluIHRoZSBTTk1QLVRTTS1NSUIKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLS0KKworc25tcFRzbU5vdGlmaWNhdGlvbnMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbU1JQiAwIH0KK3NubXBUc21NSUJPYmplY3RzICAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21NSUIgMSB9Citzbm1wVHNtQ29uZm9ybWFuY2UgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtTUlCIDIgfQorCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCistLSBPYmplY3RzCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy0tIFN0YXRpc3RpY3MgZm9yIHRoZSBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwKKworc25tcFRzbVN0YXRzICAgICAgICAgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgc25tcFRzbU1JQk9iamVjdHMgMSB9CisKK3NubXBUc21JbnZhbGlkQ2FjaGVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJUaGUgbnVtYmVyIG9mIGluY29taW5nIG1lc3NhZ2VzIGRyb3BwZWQgYmVjYXVzZSB0aGUKKworICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIHJlZmVycmVkIHRvIGFuIGludmFsaWQgY2FjaGUuCisgICAgICAgICAgICAgICAgIgorICAgIDo6PSB7IHNubXBUc21TdGF0cyAxIH0KKworc25tcFRzbUluYWRlcXVhdGVTZWN1cml0eUxldmVscyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiVGhlIG51bWJlciBvZiBpbmNvbWluZyBtZXNzYWdlcyBkcm9wcGVkIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgdGhlIHNlY3VyaXR5TGV2ZWwgYXNzZXJ0ZWQgYnkgdGhlIFRyYW5zcG9ydCBNb2RlbCB3YXMKKyAgICAgICAgICAgICAgICAgbGVzcyB0aGFuIHRoZSBzZWN1cml0eUxldmVsIHJlcXVlc3RlZCBieSB0aGUKKyAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24uCisgICAgICAgICAgICAgICAgIgorICAgIDo6PSB7IHNubXBUc21TdGF0cyAyIH0KKworc25tcFRzbVVua25vd25QcmVmaXhlcyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgICBDb3VudGVyMzIKKyAgICBNQVgtQUNDRVNTICAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiVGhlIG51bWJlciBvZiBtZXNzYWdlcyBkcm9wcGVkIGJlY2F1c2UKKyAgICAgICAgICAgICAgICAgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXggd2FzIHNldCB0byB0cnVlIGFuZAorICAgICAgICAgICAgICAgICB0aGVyZSBpcyBubyBrbm93biBwcmVmaXggZm9yIHRoZSBzcGVjaWZpZWQgdHJhbnNwb3J0CisgICAgICAgICAgICAgICAgIGRvbWFpbi4KKyAgICAgICAgICAgICAgICAiCisgICAgOjo9IHsgc25tcFRzbVN0YXRzIDMgfQorCitzbm1wVHNtSW52YWxpZFByZWZpeGVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgICByZWFkLW9ubHkKKyAgICBTVEFUVVMgICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJUaGUgbnVtYmVyIG9mIG1lc3NhZ2VzIGRyb3BwZWQgYmVjYXVzZQorICAgICAgICAgICAgICAgICB0aGUgc2VjdXJpdHlOYW1lIGFzc29jaWF0ZWQgd2l0aCBhbiBvdXRnb2luZyBtZXNzYWdlCisgICAgICAgICAgICAgICAgIGRpZCBub3QgY29udGFpbiBhIHZhbGlkIHRyYW5zcG9ydCBkb21haW4gcHJlZml4LgorICAgICAgICAgICAgICAgICIKKyAgICA6Oj0geyBzbm1wVHNtU3RhdHMgNCB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvbmZpZ3VyYXRpb24KKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLS0gQ29uZmlndXJhdGlvbiBmb3IgdGhlIFRyYW5zcG9ydCBTZWN1cml0eSBNb2RlbAorCitzbm1wVHNtQ29uZmlndXJhdGlvbiAgIE9CSkVDVCBJREVOVElGSUVSIDo6PSB7IHNubXBUc21NSUJPYmplY3RzIDIgfQorCitzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIFRydXRoVmFsdWUKKyAgICBNQVgtQUNDRVNTICByZWFkLXdyaXRlCisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OICJJZiB0aGlzIG9iamVjdCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBzZWN1cml0eU5hbWVzCisgICAgICAgICAgICAgICAgIHBhc3NpbmcgdG8gYW5kIGZyb20gdGhlIGFwcGxpY2F0aW9uIGFyZSBleHBlY3RlZCB0bworICAgICAgICAgICAgICAgICBjb250YWluIGEgdHJhbnNwb3J0LWRvbWFpbi1zcGVjaWZpYyBwcmVmaXguICBJZiB0aGlzCisgICAgICAgICAgICAgICAgIG9iamVjdCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiBhIGRvbWFpbi1zcGVjaWZpYyBwcmVmaXgKKyAgICAgICAgICAgICAgICAgd2lsbCBiZSBhZGRlZCBieSB0aGUgVFNNIHRvIHRoZSBzZWN1cml0eU5hbWUgZm9yCisgICAgICAgICAgICAgICAgIGluY29taW5nIG1lc3NhZ2VzIGFuZCByZW1vdmVkIGZyb20gdGhlIHNlY3VyaXR5TmFtZQorICAgICAgICAgICAgICAgICB3aGVuIHByb2Nlc3Npbmcgb3V0Z29pbmcgbWVzc2FnZXMuICBUcmFuc3BvcnQgZG9tYWlucworICAgICAgICAgICAgICAgICBhbmQgcHJlZml4ZXMgYXJlIG1haW50YWluZWQgaW4gYSByZWdpc3RyeSBieSBJQU5BLgorICAgICAgICAgICAgICAgICBUaGlzIG9iamVjdCBTSE9VTEQgcGVyc2lzdCBhY3Jvc3Mgc3lzdGVtIHJlYm9vdHMuCisgICAgICAgICAgICAgICAgIgorICAgIERFRlZBTCB7IGZhbHNlIH0KKyAgICA6Oj0geyBzbm1wVHNtQ29uZmlndXJhdGlvbiAxIH0KKworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorLS0gc25tcFRzbU1JQiAtIENvbmZvcm1hbmNlIEluZm9ybWF0aW9uCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3NubXBUc21Db21wbGlhbmNlcyBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtQ29uZm9ybWFuY2UgMSB9CisKK3NubXBUc21Hcm91cHMgICAgICBPQkpFQ1QgSURFTlRJRklFUiA6Oj0geyBzbm1wVHNtQ29uZm9ybWFuY2UgMiB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIENvbXBsaWFuY2Ugc3RhdGVtZW50cworLS0gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitzbm1wVHNtQ29tcGxpYW5jZSBNT0RVTEUtQ09NUExJQU5DRQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTiAiVGhlIGNvbXBsaWFuY2Ugc3RhdGVtZW50IGZvciBTTk1QIGVuZ2luZXMgdGhhdCBzdXBwb3J0CisgICAgICAgICAgICAgICAgIHRoZSBTTk1QLVRTTS1NSUIuCisgICAgICAgICAgICAgICAgIgorICAgIE1PRFVMRQorICAgICAgICBNQU5EQVRPUlktR1JPVVBTIHsgc25tcFRzbUdyb3VwIH0KKyAgICA6Oj0geyBzbm1wVHNtQ29tcGxpYW5jZXMgMSB9CisKKy0tIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tIFVuaXRzIG9mIGNvbmZvcm1hbmNlCistLSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitzbm1wVHNtR3JvdXAgT0JKRUNULUdST1VQCisgICAgT0JKRUNUUyB7CisgICAgICAgIHNubXBUc21JbnZhbGlkQ2FjaGVzLAorICAgICAgICBzbm1wVHNtSW5hZGVxdWF0ZVNlY3VyaXR5TGV2ZWxzLAorICAgICAgICBzbm1wVHNtVW5rbm93blByZWZpeGVzLAorICAgICAgICBzbm1wVHNtSW52YWxpZFByZWZpeGVzLAorICAgICAgICBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeAorICAgIH0KKyAgICBTVEFUVVMgICAgICBjdXJyZW50CisgICAgREVTQ1JJUFRJT04gIkEgY29sbGVjdGlvbiBvZiBvYmplY3RzIGZvciBtYWludGFpbmluZworICAgICAgICAgICAgICAgICBpbmZvcm1hdGlvbiBvZiBhbiBTTk1QIGVuZ2luZSB0aGF0IGltcGxlbWVudHMKKworICAgICAgICAgICAgICAgICB0aGUgU05NUCBUcmFuc3BvcnQgU2VjdXJpdHkgTW9kZWwuCisgICAgICAgICAgICAgICAgIgorICAgIDo6PSB7IHNubXBUc21Hcm91cHMgMiB9CisKK0VORApkaWZmIC0tZ2l0IGEvbWlicy9TTk1QLVVTTS1BRVMtTUlCLnR4dCBiL21pYnMvU05NUC1VU00tQUVTLU1JQi50eHQKaW5kZXggZTllOWZiOC4uNGMxNzMwMiAxMDA2NDQKLS0tIGEvbWlicy9TTk1QLVVTTS1BRVMtTUlCLnR4dAorKysgYi9taWJzL1NOTVAtVVNNLUFFUy1NSUIudHh0CkBAIC0zOSw5ICszOSw5IEBACiAgICAgICAgICAgICBzZWUgdGhlIFJGQyBpdHNlbGYgZm9yIGZ1bGwgbGVnYWwgbm90aWNlcy4KICAgICAgICAgICAgIFN1cHBsZW1lbnRhcnkgaW5mb3JtYXRpb24gbWF5IGJlIGF2YWlsYWJsZSBvbgogICAgICAgICAgICAgaHR0cDovL3d3dy5pZXRmLm9yZy9jb3B5cmlnaHRzL2lhbmFtaWIuaHRtbC4iCisKICAgICBSRVZJU0lPTiAgICAgIjIwMDQwNjE0MDAwMFoiCiAgICAgREVTQ1JJUFRJT04gICJJbml0aWFsIHZlcnNpb24sIHB1Ymxpc2hlZCBhcyBSRkMzODI2IgotCiAgICAgOjo9IHsgc25tcE1vZHVsZXMgMjAgfQogCiB1c21BZXNDZmIxMjhQcm90b2NvbCBPQkpFQ1QtSURFTlRJVFkKZGlmZiAtLWdpdCBhL21pYnMvU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0IGIvbWlicy9TTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQKaW5kZXggZWUyMDc2YS4uNzM3NzQyNSAxMDA2NDQKLS0tIGEvbWlicy9TTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQKKysrIGIvbWlicy9TTk1QLVVTTS1ESC1PQkpFQ1RTLU1JQi50eHQKQEAgLTIzLDcgKzIzLDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVkd29vZCBDaXR5LCBDQSA5NDA2MwogICAgICAgICAgICAgICAgICAgRW1haWw6ICBzdGpvaG5zQGNvcnAuaG9tZS5uZXQKICAgICAgICAgICAgICAgICAgIFBob25lOiAgKzEtNjUwLTU1Ni01MzY4IgotCiAgICAgREVTQ1JJUFRJT04KICAgICAgICAgIlRoZSBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIGRlZmluaXRpb25zIGZvciBwcm92aWRpbmcgZm9yd2FyZAogICAgIHNlY3JlY3kgZm9yIGtleSBjaGFuZ2VzIGZvciB0aGUgdXNtVXNlclRhYmxlLCBhbmQgZm9yIHByb3ZpZGluZyBhCkBAIC0zMyw4ICszMiw2IEBACiAgICAgUkVWSVNJT04gICAgICIyMDAwMDMwNjAwMDBaIgogICAgIERFU0NSSVBUSU9OCiAgICAgICAgIkluaXRpYWwgdmVyc2lvbiBwdWJsaXNoZWQgYXMgUkZDIDI3ODYuIgotCi0KICAgICA6Oj0geyBleHBlcmltZW50YWwgMTAxIH0gIC0tIElBTkEgREhLRVktQ0hBTkdFIDEwMQogCiAtLSBBZG1pbmlzdHJhdGl2ZSBhc3NpZ25tZW50cwpAQCAtMTExLDcgKzEwOCw2IEBACiAgICAgICAgICAgIGJhc2UgICAgSU5URUdFUiwgICAtLSBnCiAgICAgICAgICAgIHByaXZhdGVWYWx1ZUxlbmd0aCAgSU5URUdFUiBPUFRJT05BTCB9CiAKLQogICAgIEltcGxlbWVudG9ycyBhcmUgZW5jb3VyYWdlZCB0byB1c2UgZWl0aGVyIHRoZSB2YWx1ZXMgZnJvbQogICAgIE9ha2xleSBHcm91cCAxICBvciB0aGUgdmFsdWVzIG9mIGZyb20gT2FrbGV5IEdyb3VwIDIgYXMgc3BlY2lmaWVkCiAgICAgaW4gUkZDLTI0MDksIFRoZSBJbnRlcm5ldCBLZXkgRXhjaGFuZ2UsIFNlY3Rpb24gNi4xLCA2LjIgYXMgdGhlCkBAIC0yMzcsNiArMjMzLDcgQEAKICAgICBhbiBpbXBsZW1lbnRvciB3aWxsIHNwZWNpZnkgb25lIG9yIG1vcmUgc3RhbmRhcmQgc2VjdXJpdHkgbmFtZXMKICAgICBhbmQgd2lsbCBwcm92aWRlIGVudHJpZXMgaW4gdGhlIFZBQ00gdGFibGVzIGdyYW50aW5nIHZhcmlvdXMKICAgICBsZXZlbHMgb2YgYWNjZXNzIHRvIHRob3NlIG5hbWVzLiAgVGhlIGFjdHVhbCBjb250ZW50IG9mIHRoZSBWQUNNCisKICAgICB0YWJsZSBpcyBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgTUlCLgogCiAgICAgTm90ZTogVGhpcyB0YWJsZSBpcyBleHBlY3RlZCB0byBiZSByZWFkYWJsZSB3aXRob3V0IGF1dGhlbnRpY2F0aW9uCkBAIC0yNDksNyArMjQ2LDYgQEAKICAgICBNQVgtQUNDRVNTICBub3QtYWNjZXNzaWJsZQogICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKICAgICBERVNDUklQVElPTgotCiAgICAgICAgICJBbiBlbnRyeSBpbiB0aGUgdXNtREhLaWNrc3RhcnRUYWJsZS4gIFRoZSBhZ2VudCBTSE9VTEQgZWl0aGVyCiAgICAgZGVsZXRlIHRoaXMgZW50cnkgb3IgbWFyayBpdCBhcyBpbmFjdGl2ZSB1cG9uIGEgc3VjY2Vzc2Z1bCBTRVQgb2YKICAgICBhbnkgb2YgdGhlIEtleUNoYW5nZS10eXBlZCBvYmplY3RzIGluIHRoZSB1c21Vc2VyRW50cnkgb3IgdXBvbiBhCkBAIC0yNjAsNyArMjU2LDYgQEAKICAgICBvbmUgb3IgbW9yZSBvZiB0aGUga2V5cyBmb3IgYSByb3cgaW4gdXNtVXNlclRhYmxlIHdpdGggYQogICAgIHBhcnRpY3VsYXIgc2VjdXJpdHkgbmFtZSwgdGhlIHJvdyBpbiB0aGlzIHRhYmxlIHdpdGggdGhhdCBzYW1lCiAgICAgc2VjdXJpdHkgbmFtZSBpcyBubyBsb25nZXIgdXNlZnVsIG9yIG1lYW5pbmdmdWwuIgotCiAgICAgSU5ERVggICB7IHVzbURIS2lja3N0YXJ0SW5kZXggfQogICAgIDo6PSB7dXNtREhLaWNrc3RhcnRUYWJsZSAxIH0KIApAQCAtMjg1LDYgKzI4MCw3IEBACiAgICAgU1RBVFVTICAgICAgY3VycmVudAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICJUaGUgYWdlbnQncyBEaWZmaWUtSGVsbG1hbiBwdWJsaWMgdmFsdWUgZm9yIHRoaXMgcm93LiAgQXQKKwogICAgIGluaXRpYWxpemF0aW9uLCB0aGUgYWdlbnQgZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBhbmQgZGVyaXZlcwogICAgIGl0cyBwdWJsaWMgdmFsdWUgZnJvbSB0aGF0IG51bWJlci4gIFRoaXMgcHVibGljIHZhbHVlIGlzIHB1Ymxpc2hlZAogICAgIGhlcmUuICBUaGlzIHB1YmxpYyB2YWx1ZSAneScgZXF1YWxzIGdeciBNT0QgcCB3aGVyZSBnIGlzIHRoZSBmcm9tCkBAIC0zMDMsNyArMjk5LDYgQEAKICAgICAgICAgd2hlcmUgUFYxLC4uLixQVmsgYXJlIHRoZSBvY3RldHMgb2YgUFYgZnJvbSBmaXJzdCB0byBsYXN0LCBhbmQKICAgICAgICAgd2hlcmUgUFYxICE9IDAuCiAKLQogICAgIFRoZSBmb2xsb3dpbmcgREggcGFyYW1ldGVycyAoT2FrbGV5IGdyb3VwICMyLCBSRkMgMjQwOSwgc2VjIDYuMSwKICAgICA2LjIpIGFyZSB1c2VkIGZvciB0aGlzIG9iamVjdDoKIApAQCAtMzI4LDEwICszMjMsMTAgQEAKICAgICBNQVgtQUNDRVNTICByZWFkLW9ubHkKICAgICBTVEFUVVMgICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQogICAgICAgICAiVGhlIG1hbmFnZXIncyBEaWZmaWUtSGVsbG1hbiBwdWJsaWMgdmFsdWUgZm9yIHRoaXMgcm93LiAgTm90ZQogICAgIHRoYXQgdGhpcyB2YWx1ZSBpcyBub3Qgc2V0IHZpYSB0aGUgU05NUCBhZ2VudCwgYnV0IG1heSBiZSBzZXQgdmlhCiAgICAgc29tZSBvdXQgb2YgYmFuZCBtZXRob2QsIHN1Y2ggYXMgdGhlIGRldmljZSdzIGNvbmZpZ3VyYXRpb24gZmlsZS4KKwogICAgIFRoZSBtYW5hZ2VyIGNhbGN1bGF0ZXMgdGhpcyB2YWx1ZSBpbiB0aGUgc2FtZSBtYW5uZXIgYW5kIHVzaW5nIHRoZQogICAgIHNhbWUgcGFyYW1ldGVyIHNldCBhcyB0aGUgYWdlbnQgZG9lcy4gIEUuZy4gaXQgc2VsZWN0cyBhIHJhbmRvbQogICAgIG51bWJlciAncicsIGNhbGN1bGF0ZXMgeSA9IGdeciBtb2QgcCBhbmQgcHJvdmlkZXMgJ3knIGFzIHRoZQpAQCAtNDI4LDYgKzQyMyw3IEBACiAgICAgICAgIGltcGxlbWVudHMgdGhlIHVzbVVzZXJUYWJsZSBhbmQgd2hpY2ggd2lzaGVzIHRoZSBhYmlsaXR5IHRvCiAgICAgICAgIHBvcHVsYXRlIHRoZSBVU00gdGFibGUgYmFzZWQgb24gb3V0LW9mLWJhbmQgcHJvdmlkZWQgREgKICAgICAgICAgaWduaXRpb24gdmFsdWVzLgorCiAgICAgICAgICAgICAgQW55IGFnZW50IGltcGxlbWVudGluZyB0aGlzIGdyb3VwIGlzIGV4cGVjdGVkIHRvIHByb3ZpZGUKICAgICAgICAgcHJlaW5zdGFsbGVkIGVudHJpZXMgaW4gdGhlIHZhY20gdGFibGVzIGFzIGZvbGxvd3M6CiAKQEAgLTQ3Niw2ICs0NzIsNyBAQAogICAgICAgICB2YWNtVmlld1RyZWVGYW1pbHlWaWV3TmFtZSAgICAgICdkaEtpY2tSZXN0cmljdGVkJwogICAgICAgICB2YWNtVmlld1RyZWVGYW1pbHlTdWJ0cmVlICAgICAgIDEuMy42LjEuMi4xLjEgIChzeXN0ZW0pCiAgICAgICAgIHZhY21WaWV3VHJlZUZhbWlseU1hc2sgICAgICAgICAgJycKKwogICAgICAgICB2YWNtVmlld1RyZWVGYW1pbHlUeXBlICAgICAgICAgIDEKICAgICAgICAgdmFjbVZpZXdUcmVlRmFtaWx5U3RvcmFnZVR5cGUgICBwZXJtYW5lbnQKICAgICAgICAgdmFjbVZpZXdUcmVlRmFtaWx5U3RhdHVzICAgICAgICBhY3RpdmUKQEAgLTQ5Myw3ICs0OTAsNiBAQAogICAgICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIkl0IGlzIGNvbXBsaWFudCB0byBpbXBsZW1lbnQgdGhpcyBvYmplY3QgYXMgcmVhZC1vbmx5IGZvcgogICAgICAgICBhbnkgZGV2aWNlLiIKLQogICAgIDo6PSB7IHVzbURIS2V5TUlCQ29tcGxpYW5jZXMgMSB9CiAKIC0tIFVuaXRzIG9mIENvbXBsaWFuY2UKQEAgLTUzMyw1ICs1MjksNCBAQAogICAgIG5vbi1jb25maWRlbnRpYWwgYWNjZXNzLiIKICAgICA6Oj0geyB1c21ESEtleU1JQkdyb3VwcyAzIH0KIAotCiBFTkQKZGlmZiAtLWdpdCBhL21pYnMvVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dCBiL21pYnMvVFJBTlNQT1JULUFERFJFU1MtTUlCLnR4dAppbmRleCA3ZDQ1MGZiLi4yMjc4ODZlIDEwMDY0NAotLS0gYS9taWJzL1RSQU5TUE9SVC1BRERSRVNTLU1JQi50eHQKKysrIGIvbWlicy9UUkFOU1BPUlQtQUREUkVTUy1NSUIudHh0CkBAIC0xMyw2ICsxMyw3IEBACiAgICAgICAgICBUVSBCcmF1bnNjaHdlaWcKICAgICAgICAgIEJ1ZWx0ZW53ZWcgNzQvNzUKICAgICAgICAgIDM4MTA2IEJyYXVuc2Nod2VpZywgR2VybWFueQorCiAgICAgICAgICBQaG9uZTogKzQ5IDUzMSAzOTEtMzI4OQogICAgICAgICAgRU1haWw6IHNjaG9lbndAaWJyLmNzLnR1LWJzLmRlCiAKQEAgLTMyLDcgKzMzLDYgQEAKICAgICAgICAgIkluaXRpYWwgdmVyc2lvbiwgcHVibGlzaGVkIGFzIFJGQyAzNDE5LiIKICAgICA6Oj0geyBtaWItMiAxMDAgfQogCi0KIHRyYW5zcG9ydERvbWFpbnMgT0JKRUNUIElERU5USUZJRVIgOjo9IHsgdHJhbnNwb3J0QWRkcmVzc01JQiAxIH0KIAogdHJhbnNwb3J0RG9tYWluVWRwSXB2NCBPQkpFQ1QtSURFTlRJVFkKQEAgLTIwNSw2ICsyMDUsNyBAQAogICAgICAgICAgdGNwSXB2NCg1KSAgICAgdHJhbnNwb3J0RG9tYWluVGNwSXB2NAogICAgICAgICAgdGNwSXB2Nig2KSAgICAgdHJhbnNwb3J0RG9tYWluVGNwSXB2NgogICAgICAgICAgdGNwSXB2NHooNykgICAgdHJhbnNwb3J0RG9tYWluVGNwSXB2NHoKKwogICAgICAgICAgdGNwSXB2NnooOCkgICAgdHJhbnNwb3J0RG9tYWluVGNwSXB2NnoKICAgICAgICAgIHNjdHBJcHY0KDkpICAgIHRyYW5zcG9ydERvbWFpblNjdHBJcHY0CiAgICAgICAgICBzY3RwSXB2NigxMCkgICB0cmFuc3BvcnREb21haW5TY3RwSXB2NgpAQCAtMjUzLDYgKzI1NCw3IEBACiAgICAgICAgICBBIFRyYW5zcG9ydEFkZHJlc3MgdmFsdWUgaXMgYWx3YXlzIGludGVycHJldGVkIHdpdGhpbiB0aGUKICAgICAgICAgIGNvbnRleHQgb2YgYSBUcmFuc3BvcnRBZGRyZXNzVHlwZSBvciBUcmFuc3BvcnREb21haW4gdmFsdWUuCiAgICAgICAgICBFdmVyeSB1c2FnZSBvZiB0aGUgVHJhbnNwb3J0QWRkcmVzcyB0ZXh0dWFsIGNvbnZlbnRpb24gTVVTVAorCiAgICAgICAgICBzcGVjaWZ5IHRoZSBUcmFuc3BvcnRBZGRyZXNzVHlwZSBvciBUcmFuc3BvcnREb21haW4gb2JqZWN0CiAgICAgICAgICB3aGljaCBwcm92aWRlcyB0aGUgY29udGV4dC4gRnVydGhlcm1vcmUsIE1JQiBhdXRob3JzIFNIT1VMRAogICAgICAgICAgZGVmaW5lIGEgc2VwYXJhdGUgVHJhbnNwb3J0QWRkcmVzc1R5cGUgb3IgVHJhbnNwb3J0RG9tYWluCkBAIC0zNDksNiArMzUxLDcgQEAKIAogICAgICAgICAgVGhpcyB0ZXh0dWFsIGNvbnZlbnRpb24gU0hPVUxEIE5PVCBiZSB1c2VkIGRpcmVjdGx5IGluIG9iamVjdAogICAgICAgICAgZGVmaW5pdGlvbnMgc2luY2UgaXQgcmVzdHJpY3RzIGFkZHJlc3NlcyB0byBhIHNwZWNpZmljIGZvcm1hdC4KKwogICAgICAgICAgSG93ZXZlciwgaWYgaXQgaXMgdXNlZCwgaXQgTUFZIGJlIHVzZWQgZWl0aGVyIG9uIGl0cyBvd24gb3IKICAgICAgICAgIGluIGNvbmp1bmN0aW9uIHdpdGggVHJhbnNwb3J0QWRkcmVzc1R5cGUgb3IgVHJhbnNwb3J0RG9tYWluCiAgICAgICAgICBhcyBhIHBhaXIuIgpAQCAtMzk3LDYgKzQwMCw3IEBACiAgICAgICAgICB0aW1lIG9mIHRoZSBtYW5hZ2VtZW50IG9wZXJhdGlvbikuCiAKICAgICAgICAgIFRoZSBERVNDUklQVElPTiBjbGF1c2Ugb2YgVHJhbnNwb3J0QWRkcmVzcyBvYmplY3RzIHRoYXQgbWF5CisKICAgICAgICAgIGhhdmUgVHJhbnNwb3J0QWRkcmVzc0RucyB2YWx1ZXMgbXVzdCBmdWxseSBkZXNjcmliZSBob3cgKGFuZAogICAgICAgICAgd2hlbikgc3VjaCBuYW1lcyBhcmUgdG8gYmUgcmVzb2x2ZWQgdG8gSVAgYWRkcmVzc2VzIGFuZCB2aWNlCiAgICAgICAgICB2ZXJzYS4KZGlmZiAtLWdpdCBhL21pYnMvVFVOTkVMLU1JQi50eHQgYi9taWJzL1RVTk5FTC1NSUIudHh0CmluZGV4IDYxNWZhYTYuLjVmOTU5NmIgMTAwNjQ0Ci0tLSBhL21pYnMvVFVOTkVMLU1JQi50eHQKKysrIGIvbWlicy9UVU5ORUwtTUlCLnR4dApAQCAtMzcsOCArMzcsNiBAQAogICAgICAgICAgICAgdmVyc2lvbiBvZiB0aGlzIE1JQiBtb2R1bGUgaXMgcGFydCBvZiBSRkMgNDA4NzsgIHNlZQogICAgICAgICAgICAgdGhlIFJGQyBpdHNlbGYgZm9yIGZ1bGwgbGVnYWwgbm90aWNlcy4iCiAKLQotCiAgICAgUkVWSVNJT04gICAgICIyMDA1MDUxNjAwMDBaIiAtLSBNYXkgMTYsIDIwMDUKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIklQdjQtc3BlY2lmaWMgb2JqZWN0cyB3ZXJlIGRlcHJlY2F0ZWQsIGluY2x1ZGluZwpAQCAtODcsOSArODUsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiVGhlIChjb25jZXB0dWFsKSB0YWJsZSBjb250YWluaW5nIGluZm9ybWF0aW9uIG9uCiAgICAgICAgICAgICBjb25maWd1cmVkIHR1bm5lbHMuIgotCi0KLQogICAgIDo6PSB7IHR1bm5lbCAxIH0KIAogdHVubmVsSWZFbnRyeSBPQkpFQ1QtVFlQRQpAQCAtMTM5LDggKzEzNCw2IEBACiAgICAgICAgICAgICAoaS5lLiwgdGhlIGRlc3RpbmF0aW9uIGFkZHJlc3MgdXNlZCBpbiB0aGUgb3V0ZXIgSVAKICAgICAgICAgICAgIGhlYWRlciksIG9yIDAuMC4wLjAgaWYgdW5rbm93biwgb3IgYW4gSVB2NiBhZGRyZXNzLCBvcgogCi0KLQogICAgICAgICAgICAgdGhlIHR1bm5lbCBpcyBub3QgYSBwb2ludC10by1wb2ludCBsaW5rIChlLmcuLCBpZiBpdAogICAgICAgICAgICAgaXMgYSA2dG80IHR1bm5lbCkuCiAKQEAgLTE5MCw4ICsxODMsNiBAQAogICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiVGhlIG1ldGhvZCB1c2VkIHRvIHNldCB0aGUgaGlnaCA2IGJpdHMgKHRoZQogCi0KLQogICAgICAgICAgICAgZGlmZmVyZW50aWF0ZWQgc2VydmljZXMgY29kZXBvaW50KSBvZiB0aGUgSVB2NCBUT1Mgb3IKICAgICAgICAgICAgIElQdjYgVHJhZmZpYyBDbGFzcyBpbiB0aGUgb3V0ZXIgSVAgaGVhZGVyLiAgQSB2YWx1ZSBvZgogICAgICAgICAgICAgLTEgaW5kaWNhdGVzIHRoYXQgdGhlIGJpdHMgYXJlIGNvcGllZCBmcm9tIHRoZQpAQCAtMjQxLDggKzIzMiw2IEBACiAgICAgICAgICAgICAoaS5lLiwgdGhlIHNvdXJjZSBhZGRyZXNzIHVzZWQgaW4gdGhlIG91dGVyIElQCiAgICAgICAgICAgICBoZWFkZXIpLiAgSWYgdGhlIGFkZHJlc3MgaXMgdW5rbm93biwgdGhlIHZhbHVlIGlzCiAKLQotCiAgICAgICAgICAgICAwLjAuMC4wIGZvciBJUHY0IG9yIDo6IGZvciBJUHY2LiAgVGhlIHR5cGUgb2YgdGhpcwogICAgICAgICAgICAgb2JqZWN0IGlzIGdpdmVuIGJ5IHR1bm5lbElmQWRkcmVzc1R5cGUuIgogICAgIDo6PSB7IHR1bm5lbElmRW50cnkgOSB9CkBAIC0yOTEsOSArMjgwLDYgQEAKICAgICAgICAgICAgIGRlcHJlY2F0ZWQgaW4gZmF2b3Igb2YgdHVubmVsSW5ldENvbmZpZ1RhYmxlLiIKICAgICA6Oj0geyB0dW5uZWwgMiB9CiAKLQotCi0KIHR1bm5lbENvbmZpZ0VudHJ5IE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYICAgICBUdW5uZWxDb25maWdFbnRyeQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKQEAgLTM0Myw4ICszMjksNiBAQAogICAgICAgICAgICAgZGVwcmVjYXRlZCBpbiBmYXZvciBvZiB0dW5uZWxJbmV0Q29uZmlnUmVtb3RlQWRkcmVzcy4iCiAgICAgOjo9IHsgdHVubmVsQ29uZmlnRW50cnkgMiB9CiAKLQotCiB0dW5uZWxDb25maWdFbmNhcHNNZXRob2QgT0JKRUNULVRZUEUKICAgICBTWU5UQVggICAgIElBTkF0dW5uZWxUeXBlCiAgICAgTUFYLUFDQ0VTUyBub3QtYWNjZXNzaWJsZQpAQCAtMzkzLDkgKzM3Nyw2IEBACiAKIHR1bm5lbENvbmZpZ1N0YXR1cyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWCAgICAgUm93U3RhdHVzCi0KLQotCiAgICAgTUFYLUFDQ0VTUyByZWFkLWNyZWF0ZQogICAgIFNUQVRVUyAgICAgZGVwcmVjYXRlZAogICAgIERFU0NSSVBUSU9OCkBAIC00NDQsOSArNDI1LDYgQEAKICAgICBNQVgtQUNDRVNTIG5vdC1hY2Nlc3NpYmxlCiAgICAgU1RBVFVTICAgICBjdXJyZW50CiAgICAgREVTQ1JJUFRJT04KLQotCi0KICAgICAgICAgICAgICJUaGUgKGNvbmNlcHR1YWwpIHRhYmxlIGNvbnRhaW5pbmcgaW5mb3JtYXRpb24gb24KICAgICAgICAgICAgIGNvbmZpZ3VyZWQgdHVubmVscy4gIFRoaXMgdGFibGUgY2FuIGJlIHVzZWQgdG8gbWFwIGEKICAgICAgICAgICAgIHNldCBvZiB0dW5uZWwgZW5kcG9pbnRzIHRvIHRoZSBhc3NvY2lhdGVkIGlmSW5kZXgKQEAgLTQ5NSw5ICs0NzMsNiBAQAogfQogCiB0dW5uZWxJbmV0Q29uZmlnQWRkcmVzc1R5cGUgT0JKRUNULVRZUEUKLQotCi0KICAgICBTWU5UQVggICAgIEluZXRBZGRyZXNzVHlwZQogICAgIE1BWC1BQ0NFU1Mgbm90LWFjY2Vzc2libGUKICAgICBTVEFUVVMgICAgIGN1cnJlbnQKQEAgLTU0Nyw4ICs1MjIsNiBAQAogICAgICAgICAgICAgYWxsb3cgbXVsdGlwbGUgcGFyYWxsZWwgdHVubmVscywgdGhlIG1hbmFnZXIgaXMKICAgICAgICAgICAgIHJlc3BvbnNpYmxlIGZvciBjaG9vc2luZyBhbnkgSUQgd2hpY2ggZG9lcyBub3QKIAotCi0KICAgICAgICAgICAgIGNvbmZsaWN0IHdpdGggYW4gZXhpc3Rpbmcgcm93LCBzdWNoIGFzIGNob29zaW5nIGEKICAgICAgICAgICAgIHJhbmRvbSBudW1iZXIuIgogICAgIDo6PSB7IHR1bm5lbEluZXRDb25maWdFbnRyeSA1IH0KQEAgLTU5OCw4ICs1NzEsNiBAQAogICAgICAgICAgICAgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IG1hbm5lciwgYW5kIGNvcnJlc3BvbmRpbmcKICAgICAgICAgICAgIHJvd3Mgd2lsbCBiZSBpbnN0YW50aWF0ZWQgaW4gdGhlIGlmVGFibGUgYW5kIHRoZQogCi0KLQogICAgICAgICAgICAgdHVubmVsSWZUYWJsZS4gIFRoZSBzdGF0dXMgb2YgdGhpcyByb3cgd2lsbCBiZWNvbWUKICAgICAgICAgICAgIGFjdGl2ZSBhcyBzb29uIGFzIHRoZSBhZ2VudCBhc3NpZ25zIHRoZSBpbnRlcmZhY2UKICAgICAgICAgICAgIGluZGV4LCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIGludGVyZmFjZSBpcwpAQCAtNjQ4LDkgKzYxOSw2IEBACiAKICAgICAgICAgT0JKRUNUICAgICAgdHVubmVsSWZUT1MKICAgICAgICAgTUlOLUFDQ0VTUyAgcmVhZC1vbmx5Ci0KLQotCiAgICAgICAgIERFU0NSSVBUSU9OCiAgICAgICAgICAgICAiV3JpdGUgYWNjZXNzIGlzIG5vdCByZXF1aXJlZC4iCiAKQEAgLTcwMCw4ICs2NjgsNiBAQAogICAgICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIldyaXRlIGFjY2VzcyBpcyBub3QgcmVxdWlyZWQuIgogCi0KLQogICAgICAgICBPQkpFQ1QgICAgICB0dW5uZWxJZkFkZHJlc3NUeXBlCiAgICAgICAgIFNZTlRBWCAgICAgIEluZXRBZGRyZXNzVHlwZSB7IGlwdjQoMSksIGlwdjYoMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwdjR6KDMpLCBpcHY2eig0KSB9CkBAIC03NTEsOCArNzE3LDYgQEAKICAgICBERVNDUklQVElPTgogICAgICAgICAgICAgIkEgY29sbGVjdGlvbiBvZiBvYmplY3RzIHRvIHN1cHBvcnQgYmFzaWMgbWFuYWdlbWVudAogCi0KLQogICAgICAgICAgICAgb2YgSVB2NCBUdW5uZWxzLiAgU2luY2UgdGhpcyBncm91cCBjYW5ub3Qgc3VwcG9ydAogICAgICAgICAgICAgSVB2NiwgaXQgaXMgZGVwcmVjYXRlZCBpbiBmYXZvciBvZgogICAgICAgICAgICAgdHVubmVsTUlCSW5ldEdyb3VwLiIKZGlmZiAtLWdpdCBhL21pYnMvVUNELVNOTVAtTUlCLnR4dCBiL21pYnMvVUNELVNOTVAtTUlCLnR4dAppbmRleCAxYzY1OGUwLi5lOGFjYzhjIDEwMDY0NAotLS0gYS9taWJzL1VDRC1TTk1QLU1JQi50eHQKKysrIGIvbWlicy9VQ0QtU05NUC1NSUIudHh0CkBAIC0zMCwxNCArMzAsMTQgQEAKIAogSU1QT1JUUwogICAgIE9CSkVDVC1UWVBFLCBOT1RJRklDQVRJT04tVFlQRSwgTU9EVUxFLUlERU5USVRZLAotICAgIEludGVnZXIzMiwgT3BhcXVlLCBlbnRlcnByaXNlcywgQ291bnRlcjMyCisgICAgSW50ZWdlcjMyLCBPcGFxdWUsIGVudGVycHJpc2VzLCBDb3VudGVyMzIsIFVuc2lnbmVkMzIKICAgICAgICAgRlJPTSBTTk1QdjItU01JCiAKICAgICBURVhUVUFMLUNPTlZFTlRJT04sIERpc3BsYXlTdHJpbmcsIFRydXRoVmFsdWUKIAlGUk9NIFNOTVB2Mi1UQzsKIAogdWNkYXZpcyBNT0RVTEUtSURFTlRJVFkKLSAgICBMQVNULVVQREFURUQgIjIwMDYxMTIyMDAwMFoiCisgICAgTEFTVC1VUERBVEVEICIyMDE0MDczMTAwMDBaIgogICAgIE9SR0FOSVpBVElPTiAiVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBEYXZpcyIKICAgICBDT05UQUNULUlORk8gICAgCiAJIlRoaXMgbWliIGlzIG5vIGxvbmdlciBiZWluZyBtYWludGFpbmVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCkBAIC01NSw2ICs1NSwxNyBAQAogICAgIERFU0NSSVBUSU9OCiAJIlRoaXMgZmlsZSBkZWZpbmVzIHRoZSBwcml2YXRlIFVDRCBTTk1QIE1JQiBleHRlbnNpb25zLiIKIAorICAgIFJFVklTSU9OICAgICAiMjAxNDA3MzEwMDAwWiIKKyAgICBERVNDUklQVElPTgorCSJOZXcgb2JqZWN0IGZvciBudW1iZXIgb2YgQ1BVcyBhcyBjb3VudGVkIGJ5IHRoZSBhZ2VudCIKKyAgICBSRVZJU0lPTgkgIjIwMTEwNTE0MDAwMFoiCisgICAgREVTQ1JJUFRJT04KKwkiTmV3IG9iamVjdHMgZm9yIG1vbml0b3JpbmcgQ1BVIFN0ZWFsLCBHdWVzdCBhbmQgTmljZSB2YWx1ZXMiCisKKyAgICBSRVZJU0lPTgkgIjIwMDkwMTE5MDAwMFoiCisgICAgREVTQ1JJUFRJT04KKwkiTmV3IDY0LWJpdCBvYmplY3RzIGZvciBtb25pdG9yaW5nIGxhcmdlIGRpc2sgdXNhZ2UiCisKICAgICBSRVZJU0lPTgkgIjIwMDYxMTIyMDAwMFoiCiAgICAgREVTQ1JJUFRJT04KIAkiQ2xhcmlmeSBiZWhhdmlvdXIgb2Ygb2JqZWN0cyBpbiB0aGUgbWVtb3J5ICYgc3lzdGVtU3RhdHMgZ3JvdXBzCkBAIC02NzIsNyArNjgzLDEzIEBACiAgICAgZHNrUGVyY2VudAkJSW50ZWdlcjMyLAogICAgIGRza1BlcmNlbnROb2RlCUludGVnZXIzMiwKICAgICBkc2tFcnJvckZsYWcJVUNERXJyb3JGbGFnLAotICAgIGRza0Vycm9yTXNnCQlEaXNwbGF5U3RyaW5nCisgICAgZHNrRXJyb3JNc2cJCURpc3BsYXlTdHJpbmcsCisgICAgZHNrVG90YWxMb3cJCVVuc2lnbmVkMzIsCisgICAgZHNrVG90YWxIaWdoCVVuc2lnbmVkMzIsCisgICAgZHNrQXZhaWxMb3cJCVVuc2lnbmVkMzIsCisgICAgZHNrQXZhaWxIaWdoCVVuc2lnbmVkMzIsCisgICAgZHNrVXNlZExvdwkJVW5zaWduZWQzMiwKKyAgICBkc2tVc2VkSGlnaAkJVW5zaWduZWQzMgogfQogCiBkc2tJbmRleCBPQkpFQ1QtVFlQRQpAQCAtNzY1LDYgKzc4Miw2MCBAQAogCSJQZXJjZW50YWdlIG9mIGlub2RlcyB1c2VkIG9uIGRpc2siCiAgICAgOjo9IHsgZHNrRW50cnkgMTAgfSAKIAorZHNrVG90YWxMb3cgT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgCisJIlRvdGFsIHNpemUgb2YgdGhlIGRpc2svcGFydGlvbiAoa0J5dGVzKS4KKwlUb2dldGhlciB3aXRoIGRza1RvdGFsSGlnaCBjb21wb3NlcyA2NC1iaXQgbnVtYmVyLiIKKyAgICA6Oj0geyBkc2tFbnRyeSAxMSB9CisKK2Rza1RvdGFsSGlnaCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OICAKKwkiVG90YWwgc2l6ZSBvZiB0aGUgZGlzay9wYXJ0aW9uIChrQnl0ZXMpLgorCVRvZ2V0aGVyIHdpdGggZHNrVG90YWxMb3cgY29tcG9zZXMgNjQtYml0IG51bWJlci4iCisgICAgOjo9IHsgZHNrRW50cnkgMTIgfQorCitkc2tBdmFpbExvdyBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWAlVbnNpZ25lZDMyCisgICAgTUFYLUFDQ0VTUwlyZWFkLW9ubHkKKyAgICBTVEFUVVMJY3VycmVudAorICAgIERFU0NSSVBUSU9OICAKKwkiQXZhaWxhYmxlIHNwYWNlIG9uIHRoZSBkaXNrIChrQnl0ZXMpLgorCVRvZ2V0aGVyIHdpdGggZHNrQXZhaWxIaWdoIGNvbXBvc2VzIDY0LWJpdCBudW1iZXIuIgorICAgIDo6PSB7IGRza0VudHJ5IDEzIH0KKworZHNrQXZhaWxIaWdoIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCVVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04gIAorCSJBdmFpbGFibGUgc3BhY2Ugb24gdGhlIGRpc2sgKGtCeXRlcykuCisJVG9nZXRoZXIgd2l0aCBkc2tBdmFpbExvdyBjb21wb3NlcyA2NC1iaXQgbnVtYmVyLiIKKyAgICA6Oj0geyBkc2tFbnRyeSAxNCB9CisKK2Rza1VzZWRMb3cgT0JKRUNULVRZUEUKKyAgICBTWU5UQVgJVW5zaWduZWQzMgorICAgIE1BWC1BQ0NFU1MJcmVhZC1vbmx5CisgICAgU1RBVFVTCWN1cnJlbnQKKyAgICBERVNDUklQVElPTiAgCisJIlVzZWQgc3BhY2Ugb24gdGhlIGRpc2sgKGtCeXRlcykuCisJVG9nZXRoZXIgd2l0aCBkc2tVc2VkSGlnaCBjb21wb3NlcyA2NC1iaXQgbnVtYmVyLiIKKyAgICA6Oj0geyBkc2tFbnRyeSAxNSB9CisKK2Rza1VzZWRIaWdoIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYCVVuc2lnbmVkMzIKKyAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIFNUQVRVUwljdXJyZW50CisgICAgREVTQ1JJUFRJT04gIAorCSJVc2VkIHNwYWNlIG9uIHRoZSBkaXNrIChrQnl0ZXMpLgorCVRvZ2V0aGVyIHdpdGggZHNrVXNlZExvdyBjb21wb3NlcyA2NC1iaXQgbnVtYmVyLiIKKyAgICA6Oj0geyBkc2tFbnRyeSAxNiB9CisKIGRza0Vycm9yRmxhZyBPQkpFQ1QtVFlQRQogICAgIFNZTlRBWAlVQ0RFcnJvckZsYWcKICAgICBNQVgtQUNDRVNTCXJlYWQtb25seQpAQCAtODM3LDcgKzkwOCw3IEBACiAKIGxhQ29uZmlnIE9CSkVDVC1UWVBFCiAgICAgU1lOVEFYCURpc3BsYXlTdHJpbmcKLSAgICBNQVgtQUNDRVNTCXJlYWQtb25seQorICAgIE1BWC1BQ0NFU1MJcmVhZC13cml0ZQogICAgIFNUQVRVUwljdXJyZW50CiAgICAgREVTQ1JJUFRJT04KIAkiVGhlIHdhdGNoIHBvaW50IGZvciBsb2FkLWF2ZXJhZ2VzIHRvIHNpZ25hbCBhbgpAQCAtMTM2OCw2ICsxNDM5LDc1IEBACiAgICAgICAgICJOdW1iZXIgb2YgYmxvY2tzIHN3YXBwZWQgb3V0IgogICAgIDo6PSB7IHN5c3RlbVN0YXRzIDYzIH0KIAorc3NDcHVSYXdTdGVhbCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiAndGlja3MnICh0eXBpY2FsbHkgMS8xMDBzKSBzcGVudAorICAgICAgICAgYnkgdGhlIGh5cGVydmlzb3IgY29kZSB0byBydW4gb3RoZXIgVk1zIGV2ZW4KKyAgICAgICAgIHRob3VnaCB0aGUgQ1BVIGluIHRoZSBjdXJyZW50IFZNIGhhZCBzb21ldGhpbmcgcnVubmFibGUuCisKKyAgICAgICAgIFRoaXMgb2JqZWN0IHdpbGwgbm90IGJlIGltcGxlbWVudGVkIG9uIGhvc3RzIHdoZXJlCisgICAgICAgICB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90IG1lYXN1cmUKKyAgICAgICAgIHRoaXMgcGFydGljdWxhciBDUFUgbWV0cmljLgorCisgICAgICAgICBPbiBhIG11bHRpLXByb2Nlc3NvciBzeXN0ZW0sIHRoZSAnc3NDcHVSYXcqJworICAgICAgICAgY291bnRlcnMgYXJlIGN1bXVsYXRpdmUgb3ZlciBhbGwgQ1BVcywgc28gdGhlaXIKKyAgICAgICAgIHN1bSB3aWxsIHR5cGljYWxseSBiZSBOKjEwMCAoZm9yIE4gcHJvY2Vzc29ycykuIgorICAgIDo6PSB7IHN5c3RlbVN0YXRzIDY0IH0KKworc3NDcHVSYXdHdWVzdCBPQkpFQ1QtVFlQRQorICAgIFNZTlRBWCAgICAgIENvdW50ZXIzMgorICAgIE1BWC1BQ0NFU1MgIHJlYWQtb25seQorICAgIFNUQVRVUyAgICAgIGN1cnJlbnQKKyAgICBERVNDUklQVElPTgorICAgICAgICAiVGhlIG51bWJlciBvZiAndGlja3MnICh0eXBpY2FsbHkgMS8xMDBzKSBzcGVudAorICAgICAgICAgYnkgdGhlIENQVSB0byBydW4gYSB2aXJ0dWFsIENQVSAoZ3Vlc3QpLgorCisgICAgICAgICBUaGlzIG9iamVjdCB3aWxsIG5vdCBiZSBpbXBsZW1lbnRlZCBvbiBob3N0cyB3aGVyZQorICAgICAgICAgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSBkb2VzIG5vdCBtZWFzdXJlCisgICAgICAgICB0aGlzIHBhcnRpY3VsYXIgQ1BVIG1ldHJpYy4KKworICAgICAgICAgT24gYSBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtLCB0aGUgJ3NzQ3B1UmF3KicKKyAgICAgICAgIGNvdW50ZXJzIGFyZSBjdW11bGF0aXZlIG92ZXIgYWxsIENQVXMsIHNvIHRoZWlyCisgICAgICAgICBzdW0gd2lsbCB0eXBpY2FsbHkgYmUgTioxMDAgKGZvciBOIHByb2Nlc3NvcnMpLiIKKyAgICA6Oj0geyBzeXN0ZW1TdGF0cyA2NSB9CisKK3NzQ3B1UmF3R3Vlc3ROaWNlIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgQ291bnRlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mICd0aWNrcycgKHR5cGljYWxseSAxLzEwMHMpIHNwZW50CisgICAgICAgICBieSB0aGUgQ1BVIHRvIHJ1biBhIG5pY2VkIHZpcnR1YWwgQ1BVIChndWVzdCkuCisKKyAgICAgICAgIFRoaXMgb2JqZWN0IHdpbGwgbm90IGJlIGltcGxlbWVudGVkIG9uIGhvc3RzIHdoZXJlCisgICAgICAgICB0aGUgdW5kZXJseWluZyBvcGVyYXRpbmcgc3lzdGVtIGRvZXMgbm90IG1lYXN1cmUKKyAgICAgICAgIHRoaXMgcGFydGljdWxhciBDUFUgbWV0cmljLgorCisgICAgICAgICBPbiBhIG11bHRpLXByb2Nlc3NvciBzeXN0ZW0sIHRoZSAnc3NDcHVSYXcqJworICAgICAgICAgY291bnRlcnMgYXJlIGN1bXVsYXRpdmUgb3ZlciBhbGwgQ1BVcywgc28gdGhlaXIKKyAgICAgICAgIHN1bSB3aWxsIHR5cGljYWxseSBiZSBOKjEwMCAoZm9yIE4gcHJvY2Vzc29ycykuIgorICAgIDo6PSB7IHN5c3RlbVN0YXRzIDY2IH0KKworc3NDcHVOdW1DcHVzIE9CSkVDVC1UWVBFCisgICAgU1lOVEFYICAgICAgSW50ZWdlcjMyCisgICAgTUFYLUFDQ0VTUyAgcmVhZC1vbmx5CisgICAgU1RBVFVTICAgICAgY3VycmVudAorICAgIERFU0NSSVBUSU9OCisgICAgICAgICJUaGUgbnVtYmVyIG9mIHByb2Nlc3NvcnMsIGFzIGNvdW50ZWQgYnkgdGhlIGFnZW50LgorICAgICAgICAgVGhpcyBvYmplY3QncyB2YWx1ZSBtYXkgYmUgdXNlZnVsIGluIHRoZSBtYW5hZ2VtZW50CisgICAgICAgICBvZiBjZXJ0YWluIG9wZXJhdGluZyBzeXN0ZW1zIHdoZXJlIG5vdGlvbnMgc3VjaCBhcworICAgICAgICAgbG9hZCBhdmVyYWdlIGRvIG5vdCB0YWtlIGludG8gYWNjb3VudCB0aGUgbnVtYmVyIG9mCisgICAgICAgICBwcm9jZXNzb3JzIGluIHRoZSBzeXN0ZW0uCisKKyAgICAgICAgIEZvciBvdGhlciBvYmplY3RzIGluIHRoZSBzeXN0ZW1TdGF0cyBncm91cCB3aG9zZQorICAgICAgICAgZGVzY3JpcHRpb25zIHJlZmVyIHRvICdOIHByb2Nlc3NvcnMnLCB0aGlzIG9iamVjdCdzCisgICAgICAgICB2YWx1ZSBpcyBOLiIKKyAgICA6Oj0geyBzeXN0ZW1TdGF0cyA2NyB9CisKKwogLS0gcG9zc2libHkgdXNlZCBpbiB0aGUgZnV0dXJlOgogLS0KIC0tIHNzRXJyb3JGbGFnIE9CSkVDVC1UWVBFCmRpZmYgLS1naXQgYS9taWJzL2lhbmFsaXN0IGIvbWlicy9pYW5hbGlzdAppbmRleCBjM2YwNTc1Li44YjMxYWQ2IDEwMDY0NAotLS0gYS9taWJzL2lhbmFsaXN0CisrKyBiL21pYnMvaWFuYWxpc3QKQEAgLTEsMTEgKzEsMTcgQEAKLSMgdXBkYXRlZCAyMDA1LTAxLTA2Ci1pYW5haWZ0eXBlLW1pYgkJCUlBTkFpZlR5cGUtTUlCCi1pYW5hbGFuZ3VhZ2UtbWliCQlJQU5BLUxBTkdVQUdFLU1JQgorIyB1cGRhdGVkIDIwMTQtMDgtMTQKIGlhbmFhZGRyZXNzZmFtaWx5bnVtYmVycy1taWIJSUFOQS1BRERSRVNTLUZBTUlMWS1OVU1CRVJTLU1JQgotaWFuYWlwcm91dGVwcm90b2NvbC1taWIJCUlBTkEtUlRQUk9UTy1NSUIKLWlhbmF0bjMyNzBldGMtbWliCQlJQU5BVG4zMjcwZVRDLU1JQgotaWFuYW1hbGxvYy1taWIJCQlJQU5BLU1BTExPQy1NSUIKK2lhbmFiZmR0Y3N0ZC1taWIJCUlBTkEtQkZELVRDLVNURC1NSUIKIGlhbmFjaGFyc2V0LW1pYgkJCUlBTkEtQ0hBUlNFVC1NSUIKLWlhbmFwcmludGVyLW1pYgkJCUlBTkEtUFJJTlRFUi1NSUIKK2lhbmFlbnRpdHktbWliCQkJSUFOQS1FTlRJVFktTUlCCiBpYW5hZmluaXNoZXItbWliCQlJQU5BLUZJTklTSEVSLU1JQgoraWFuYWdtcGxzdGMtbWliCQkJSUFOQS1HTVBMUy1UQy1NSUIKK2lhbmFpZnR5cGUtbWliCQkJSUFOQWlmVHlwZS1NSUIKK2lhbmFpcHJvdXRlcHJvdG9jb2wtbWliCQlJQU5BLVJUUFJPVE8tTUlCCitpYW5haXBwbW1ldHJpY3NyZWdpc3RyeS1taWIJSUFOQS1JUFBNLU1FVFJJQ1MtUkVHSVNUUlktTUlCCiBpYW5haXR1YWxhcm10Yy1taWIJCUlBTkEtSVRVLUFMQVJNLVRDLU1JQgoraWFuYWxhbmd1YWdlLW1pYgkJSUFOQS1MQU5HVUFHRS1NSUIKK2lhbmFtYWxsb2MtbWliCQkJSUFOQS1NQUxMT0MtTUlCCitpYW5hbWF1LW1pYgkJCUlBTkEtTUFVLU1JQgoraWFuYW9sc3J2MmxpbmttZXRyaWN0eXBlLW1pYglJQU5BLU9MU1J2Mi1MSU5LLU1FVFJJQy1UWVBFLU1JQgoraWFuYXByaW50ZXItbWliCQkJSUFOQS1QUklOVEVSLU1JQgoraWFuYXRuMzI3MGV0Yy1taWIJCUlBTkFUbjMyNzBlVEMtTUlCCmRpZmYgLS1naXQgYS9taWJzL3JmY2xpc3QgYi9taWJzL3JmY2xpc3QKaW5kZXggNGQwMzQzNC4uZTBkM2VlZiAxMDA2NDQKLS0tIGEvbWlicy9yZmNsaXN0CisrKyBiL21pYnMvcmZjbGlzdApAQCAtMSw0ICsxLDQgQEAKLSMgdXBkYXRlZCAyMDA1LTAzLTE0CisjIHVwZGF0ZWQgMjAxNC0wOC0xNQogMTE1NQlSRkMxMTU1LVNNSQogMTIxMwlSRkMxMjEzLU1JQgogMTIyNwlTTVVYLU1JQgpAQCAtMTksNyArMTksNiBAQAogMTYxMQlETlMtU0VSVkVSLU1JQgogMTYxMglETlMtUkVTT0xWRVItTUlCCiAxNjI4CVVQUy1NSUIKLTE2NTcJQkdQNC1NSUIKIDE2NTgJQ0hBUkFDVEVSLU1JQgogMTY1OQlSUy0yMzItTUlCCiAxNjYwCVBBUkFMTEVMLU1JQgpAQCAtMzYsNyArMzUsNiBAQAogMTg1MAlPU1BGLU1JQjpPU1BGLVRSQVAtTUlCCiAyMDA2CU1JUC1NSUIKIDIwMjAJRE9UMTItSUYtTUlCCi0yMDIxCVJNT04yLU1JQgogMjAyNAlETFNXLU1JQgogMjA1MQlBUFBDLU1JQgogMjEwOAlTTk1QLVJFUEVBVEVSLU1JQgpAQCAtNzcsMTUgKzc1LDggQEAKIDI1OTQJV1dXLU1JQgogMjYwNQlESVJFQ1RPUlktU0VSVkVSLU1JQgogMjYxMwlTTU9OLU1JQgotMjYxOAlSQURJVVMtQVVUSC1DTElFTlQtTUlCCi0yNjE5CVJBRElVUy1BVVRILVNFUlZFUi1NSUIKLTI2MjAJUkFESVVTLUFDQy1DTElFTlQtTUlCCi0yNjIxCVJBRElVUy1BQ0MtU0VSVkVSLU1JQgogMjY2MglBRFNMLVRDLU1JQjpBRFNMLUxJTkUtTUlCCiAyNjY2CUVUSEVSLUNISVBTRVQtTUlCCi0yNjY5CURPQ1MtQ0FCTEUtREVWSUNFLU1JQgotMjY3MAlET0NTLUlGLU1JQgotMjY3NAlQLUJSSURHRS1NSUI6US1CUklER0UtTUlCCiAyNjc3CU5IUlAtTUlCCiAyNzA3CUpvYi1Nb25pdG9yaW5nLU1JQgogMjcyMAlGTE9XLU1FVEVSLU1JQgpAQCAtMTAyLDcgKzkzLDYgQEAKIDI4NjMJSUYtTUlCCiAyODY0CUlGLUlOVkVSVEVELVNUQUNLLU1JQgogMjkyMglQVE9QTy1NSUIKLTI5MjUJRElTTUFOLVBJTkctTUlCOkRJU01BTi1UUkFDRVJPVVRFLU1JQjpESVNNQU4tTlNMT09LVVAtTUlCCiAyOTMyCUlQTVJPVVRFLVNURC1NSUIKIDI5MzMJSUdNUC1TVEQtTUlCCiAyOTM0CVBJTS1NSUIKQEAgLTE0Nyw3ICsxMzcsNiBAQAogMzYwNglBVE0yLU1JQgogMzYyMQlQT1dFUi1FVEhFUk5FVC1NSUIKIDM2MzUJRXRoZXJMaWtlLU1JQgotMzYzNglNQVUtTUlCCiAzNjM3CUVUSEVSLVdJUwogMzcwNQlIQy1QZXJmSGlzdC1UQy1NSUIKIDM3MjgJVkRTTC1MSU5FLU1JQgpAQCAtMTc4LDExICsxNjcsMTEzIEBACiA0MDg3CVRVTk5FTC1NSUIKIDQxMTMJVURQLU1JQgogNDEzMQlET0NTLUlFVEYtQlBJMi1NSUIKLTQxMzMJRU5USVRZLU1JQgogNDE0OQlTU1BNLU1JQgogNDE4OAlCUklER0UtTUlCCiA0MjIwCVRFLUxJTkstU1RELU1JQgogNDI2NQlWUE4tVEMtU1RELU1JQgogNDI2OAlFTlRJVFktU1RBVEUtVEMtTUlCOkVOVElUWS1TVEFURS1NSUIKKzQyNzMJQkdQNC1NSUIKIDQyOTIJSVAtRk9SV0FSRC1NSUIKIDQyOTMJSVAtTUlCCis0Mjk1CU1PQklMRUlQVjYtTUlCCis0MzE4CVJTVFAtTUlCCis0MzE5CUhEU0wyLVNIRFNMLUxJTkUtTUlCCis0MzIzCURPQ1MtSUVURi1RT1MtTUlCCis0MzYzCVAtQlJJREdFLU1JQjpRLUJSSURHRS1NSUIKKzQzNjgJTVBMUy1MQy1BVE0tU1RELU1JQjpNUExTLUxDLUZSLVNURC1NSUIKKzQzODIJTVBMUy1MM1ZQTi1TVEQtTUlCCis0NDA0CUZDSVAtTUdNVC1NSUIKKzQ0MzgJVDExLUZDLU5BTUUtU0VSVkVSLU1JQgorNDQzOQlUMTEtVEMtTUlCOlQxMS1GQy1GQUJSSUMtQUREUi1NR1ItTUlCCis0NDQ0CUlTSVMtTUlCCis0NDU1CVNDU0ktTUlCCis0NDk4CUFHR1JFR0FURS1NSUI6VElNRS1BR0dSRUdBVEUtTUlCCis0NTAyCVJNT04yLU1JQgorNDU0NQlJUFMtQVVUSC1NSUIKKzQ1NDYJRE9DUy1JRi1NSUIKKzQ1NDcJRE9DUy1JRVRGLUNBQkxFLURFVklDRS1OT1RJRklDQVRJT04tTUlCCis0NTYwCURJU01BTi1QSU5HLU1JQjpESVNNQU4tVFJBQ0VST1VURS1NSUI6RElTTUFOLU5TTE9PS1VQLU1JQgorNDYyNAlNU0RQLU1JQgorNDYyNQlUMTEtRkMtUk9VVEUtTUlCCis0NjI2CVQxMS1GQy1GU1BGLU1JQgorNDYzMQlMTVAtTUlCCis0NjM5CURPQ1MtQ0FCTEUtREVWSUNFLU1JQgorNDY2OAlSQURJVVMtQVVUSC1DTElFTlQtTUlCCis0NjY5CVJBRElVUy1BVVRILVNFUlZFUi1NSUIKKzQ2NzAJUkFESVVTLUFDQy1DTElFTlQtTUlCCis0NjcxCVJBRElVUy1BQ0MtU0VSVkVSLU1JQgorNDY3MglSQURJVVMtRFlOQVVUSC1DTElFTlQtTUlCCis0NjczCVJBRElVUy1EWU5BVVRILVNFUlZFUi1NSUIKKzQ2ODIJUEtUQy1JRVRGLU1UQS1NSUIKKzQ3MDYJQURTTDItTElORS1UQy1NSUI6QURTTDItTElORS1NSUIKKzQ3MTEJUkFRTU9OLU1JQgorNDc0NwlUMTEtRkMtVklSVFVBTC1GQUJSSUMtTUlCCis0NzgwCVNJUC1UQy1NSUI6U0lQLUNPTU1PTi1NSUI6U0lQLVVBLU1JQjpTSVAtU0VSVkVSLU1JQgorNDc4OQlTTk1QLUlFRUU4MDItVE0tTUlCCis0ODAxCUdNUExTLVRDLVNURC1NSUIKKzQ4MDIJR01QTFMtVEUtU1RELU1JQgorNDgwMwlHTVBMUy1MU1ItU1RELU1JQjpHTVBMUy1MQUJFTC1TVEQtTUlCCis0ODA3CUlQU0VDLVNQRC1NSUIKKzQ4MzYJTUFVLU1JQgorNDgzNwlET1QzLUVQT04tTUlCCis0ODc4CURPVDMtT0FNLU1JQgorNDg5OAlUQ1AtRVNUQVRTLU1JQgorNDkzNQlUMTEtRkMtRkFCUklDLUNPTkZJRy1TRVJWRVItTUlCCis0OTM2CVQxMS1GQy1GQUJSSUMtTE9DSy1NSUI6VDExLUZDLVpPTkUtU0VSVkVSLU1JQgorNDkzOQlJU05TLU1JQgorNDk4MwlUMTEtRkMtUlNDTi1NSUIKKzUwMTcJVVJJLVRDLU1JQgorNTA2MAlQSU0tU1RELU1JQgorNTA2NglJRi1DQVAtU1RBQ0stTUlCOkVGTS1DVS1NSUIKKzUwOTcJVURQTElURS1NSUIKKzUwOTgJUEtUQy1JRVRGLVNJRy1NSUIKKzUxMzEJTEFOR1RBRy1UQy1NSUIKKzUxMzIJSVBNQ0FTVC1NSUIKKzUxOTAJTUlEQ09NLU1JQgorNTI0MAlQSU0tQlNSLU1JQgorNTMyNAlUMTEtRkMtU1AtVEMtTUlCOlQxMS1GQy1TUC1BVVRIRU5USUNBVElPTi1NSUI6VDExLUZDLVNQLVpPTklORy1NSUI6VDExLUZDLVNQLVBPTElDWS1NSUI6VDExLUZDLVNQLVNBLU1JQgorNTQyNwlTWVNMT0ctVEMtTUlCCis1NDI4CVBLVEMtSUVURi1FVkVOVC1NSUIKKzU0ODgJTkVNTy1NSUIKKzU1MTkJTUdNRC1TVEQtTUlCCis1NTI1CVJTRVJQT09MLU1JQgorNTU0MglQVy1UQy1TVEQtTUlCCis1NTkxICAgIFNOTVAtVFNNLU1JQgorNTYwMQlQVy1TVEQtTUlCOklBTkEtUFdFMy1NSUIKKzU2MDIJUFctTVBMUy1TVEQtTUlCCis1NjAzCVBXLUVORVQtU1RELU1JQgorNTYwNAlQVy1URE0tTUlCCis1NjA1CVBXLUFUTS1NSUIKKzU2NDMJT1NQRlYzLU1JQgorNTY1MAlWRFNMMi1MSU5FLVRDLU1JQjpWRFNMMi1MSU5FLU1JQgorNTY3NglTWVNMT0ctTVNHLU1JQgorNTcyOAlEVkItUkNTLU1JQgorNTgxMwlGT1JDRVMtTUlCCis1ODMzCUNBUFdBUC1CQVNFLU1JQgorNTgzNAlDQVBXQVAtRE9UMTEtTUlCCis1OTA3CU5UUHY0LU1JQgorNjA2NQlTTk1QLVZBQ00tQUFBLU1JQgorNjE3MwlJRkNQLU1HTVQtTUlCCis2MjQwCVBXLUNFUC1TVEQtTUlCCis2MzQwCUZMT0FULVRDLU1JQgorNjM1MwlTTk1QLVRMUy1UTS1NSUIKKzY0NDUJTVBMUy1GUlItR0VORVJBTC1TVEQtTUlCOk1QTFMtRlJSLU9ORTJPTkUtU1RELU1JQjpNUExTLUZSUi1GQUNJTElUWS1TVEQtTUlCCis2NDc1CVBNSVBWNi1UQy1NSUI6UE1JUFY2LU1JQgorNjUyNwlWUlJQVjMtTUlCCis2NjE1CUlQRklYLU1JQjpJUEZJWC1TRUxFQ1RPUi1NSUIKKzY3MjcJUFNBTVAtTUlCCis2NzY1CUdCT05ELU1JQjpJQU5BLUdCT05ELVRDLU1JQgorNjc2NglHOTk4My1NSUIKKzY3NjcJRzk5ODItTUlCCis2NzY4CUc5OTgxLU1JQgorNjc3OQlOSERQLU1JQgorNjgyNQlURUQtTUlCCis2ODUwCVJCUklER0UtTUlCCis2OTMzCUVOVElUWS1NSUI6VVVJRC1UQy1NSUIKKzY5NDUJUlBLSS1ST1VURVItTUlCCis3MDUyCUxJU1AtTUlCCis3MTQ3CUlTQ1NJLU1JQgorNzE4NAlPTFNSdjItTUlCCis3MjU3CVZQTFMtR0VORVJJQy1NSUI6VlBMUy1MRFAtTUlCOlZQTFMtQkdQLU1JQgorNzMzMAlCRkQtVEMtU1RELU1JQgorNzMzMQlCRkQtU1RELU1JQgpkaWZmIC0tZ2l0IGEvbWlicy9zbWlzdHJpcCBiL21pYnMvc21pc3RyaXAKaW5kZXggZjU4OTk1Yy4uYjVmYzhmMiAxMDA3NTUKLS0tIGEvbWlicy9zbWlzdHJpcAorKysgYi9taWJzL3NtaXN0cmlwCkBAIC02Niw3ICs2Niw3IEBACiAgICAgfQogCiAgICAgIyBzdGFydCBvZiBtb2R1bGUKLSAgICAvXlsgXHRdKltBLVphLXowLTktXSogKkRFRklOSVRJT05TICo6Oj0gKkJFR0lOLyB7CisgICAgL15bIFx0XSpbQS1aYS16MC05LV0qICpERUZJTklUSU9OUyggK0lNUExJQ0lUICtUQUdTKT8gKjo6PSAqQkVHSU4vIHsKIAltb2R1bGUgPSAkMQogCWNvbGxlY3QgPSAxCiAJbWFjcm8gPSAwCmRpZmYgLS1naXQgYS9uZXQtc25tcC1jb25maWcuaW4gYi9uZXQtc25tcC1jb25maWcuaW4KaW5kZXggMzMwZjY2MC4uZDU1ODcyYyAxMDA2NDQKLS0tIGEvbmV0LXNubXAtY29uZmlnLmluCisrKyBiL25ldC1zbm1wLWNvbmZpZy5pbgpAQCAtMjcsMTAgKzI3LDI1IEBACiAgICAgICBmaQogfQogCisjIHVzYWdlOiBpbmRleCBuIGFyZ3VtZW50cworIyBlZmZlY3Q6IHJldHVybnMgdGhlIChuKzEpdGggYXJndW1lbnQKK2luZGV4KCkKK3sKKyAgICBldmFsIGVjaG8gXCRgZXhwciAkMSArIDFgCit9CisKKyMgdXNhZ2U6IGNvdW50IGFyZ3VtZW50cworIyBlZmZlY3Q6IHJldHVybnMgdGhlIG51bWJlciBvZiBhcmd1bWVudHMKK2NvdW50KCkKK3sKKyAgICBlY2hvICQjCit9CisKIHByZWZpeD1AcHJlZml4QAogZXhlY19wcmVmaXg9QGV4ZWNfcHJlZml4QAogaW5jbHVkZWRpcj1AaW5jbHVkZWRpckAKIGxpYmRpcj1AbGliZGlyQAorZGF0YXJvb3RkaXI9QGRhdGFyb290ZGlyQAogTlNDX0xERkxBR1M9IkBMREZMQUdTQCIKIAogTlNDX0xJQlM9IkBMSUJTQCIKQEAgLTQyLDcgKzU3LDcgQEAKIE5TQ19MSUJESVI9LUwke2xpYmRpcn0KIAogTlNDX1NOTVBMSUJTPSItbG5ldHNubXAgJHtOU0NfTE5FVFNOTVBMSUJTfSIKLU5TQ19TVUJBR0VOVExJQlM9Ii1sbmV0c25tcGFnZW50IC1sbmV0c25tcGhlbHBlcnMgJHtOU0NfTEFHRU5UTElCU30gJHtOU0NfU05NUExJQlN9IgorTlNDX1NVQkFHRU5UTElCUz0iLWxuZXRzbm1wYWdlbnQgJHtOU0NfTEFHRU5UTElCU30gJHtOU0NfU05NUExJQlN9IgogTlNDX0FHRU5UTElCUz0iLWxuZXRzbm1wbWlicyAke05TQ19MTUlCTElCU30gJHtOU0NfU1VCQUdFTlRMSUJTfSIKIAogTlNDX1BSRUZJWD0kcHJlZml4CkBAIC01MSwxMSArNjYsMTEgQEAKIE5TQ19JTkNESVI9JHtOU0NfUFJFRklYfS9pbmNsdWRlCiAKIE5TQ19CQVNFX1NOTVBfTElCUz0iLWxuZXRzbm1wIgotTlNDX0JBU0VfU1VCQUdFTlRfTElCUz0iLWxuZXRzbm1wYWdlbnQgLWxuZXRzbm1waGVscGVycyAke05TQ19CQVNFX1NOTVBfTElCU30iCitOU0NfQkFTRV9TVUJBR0VOVF9MSUJTPSItbG5ldHNubXBhZ2VudCAke05TQ19CQVNFX1NOTVBfTElCU30iCiBOU0NfQkFTRV9BR0VOVF9MSUJTPSItbG5ldHNubXBtaWJzICR7TlNDX0JBU0VfU1VCQUdFTlRfTElCU30iCiAKLU5TQ19TUkNfTElCRElSUz0iYWdlbnQvLmxpYnMgc25tcGxpYi8ubGlicyBhZ2VudC9oZWxwZXJzLy5saWJzIgotTlNDX1NSQ19MSUJERVBTPSJhZ2VudC8ubGlicy9saWJuZXRzbm1wbWlicy5hIGFnZW50Ly5saWJzL2xpYm5ldHNubXBhZ2VudC5hIGFnZW50L2hlbHBlcnMvLmxpYnMvbGlibmV0c25tcGhlbHBlcnMuYSBzbm1wbGliLy5saWJzL2xpYm5ldHNubXAuYSIKK05TQ19TUkNfTElCRElSUz0iYWdlbnQvLmxpYnMgc25tcGxpYi8ubGlicyIKK05TQ19TUkNfTElCREVQUz0iYWdlbnQvLmxpYnMvbGlibmV0c25tcG1pYnMuYSBhZ2VudC8ubGlicy9saWJuZXRzbm1wYWdlbnQuYSBzbm1wbGliLy5saWJzL2xpYm5ldHNubXAuYSIKIAogaWYgdGVzdCAieCROU0NfU1JDRElSIiA9ICJ4LiIgOyB0aGVuCiAgICBOU0NfU1JDRElSPSJORVQtU05NUC1TT1VSQ0UtRElSIgpAQCAtMTA5LDYgKzEyNCw5IEBACiAgICAgLS1lbnYtc2VwYXJhdG9yKQogICAgICAgZWNobyAiQEVOVl9TRVBBUkFUT1JAIgogICAgICAgOzsKKyAgICAtLWV4ZWV4dCkKKyAgICAgIGVjaG8gIkBFWEVFWFRAIgorICAgICAgOzsKICAgICAtLXNubXBjb25mcGF0aHwtLVNOTVBDT05GUEFUSCkKICAgICAgIGVjaG8gIkBTTk1QQ09ORlBBVEhAQEVOVl9TRVBBUkFUT1JAQFNOTVBTSEFSRVBBVEhAQEVOVl9TRVBBUkFUT1JAQFNOTVBMSUJQQVRIQEBFTlZfU0VQQVJBVE9SQCRIT01FLy5zbm1wQEVOVl9TRVBBUkFUT1JAQFBFUlNJU1RFTlRfRElSRUNUT1JZQCIKICAgICAgIDs7CkBAIC0xNjQsMTYgKzE4MiwxOSBAQAogICAgICAgZmkKICAgICAgIGVjaG8gJHJlc3VsdAogICAgICAgOzsKKyAgICAtLWJ1aWxkLWNvbW1hbmQpCisgICAgICBlY2hvICJAQ0NAIEBDRkxBR1NAIEBERVZGTEFHU0AiCisgICAgICA7OwogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgY2xpZW50IGxpYgogICAgIC0tbGlicykKICAgICAgICMgdXNlIHRoaXMgb25lID09IC0tbmV0c25tcC1saWJzICsgLS1leHRlcm5hbC1saWJzCiAgICAgICBlY2hvICROU0NfTERGTEFHUyAkTlNDX0xJQkRJUiAkTlNDX1NOTVBMSUJTICROU0NfTElCUwogICAgICAgOzsKICAgICAtLW5ldHNubXAtbGlicykKLSAgICAgIGVjaG8gJE5TQ19MSUJESVIgLWxuZXRzbm1wCisgICAgICBlY2hvICROU0NfTElCRElSICROU0NfQkFTRV9TTk1QX0xJQlMKICAgICAgIDs7CiAgICAgLS1leHRlcm5hbC1saWJzKQotICAgICAgZWNobyAkTlNDX0xERkxBR1MgJE5TQ19MTkVUU05NUExJQlMgJE5TQ19MSUJTCisgICAgICBlY2hvICROU0NfTERGTEFHUyAkTlNDX0xORVRTTk1QTElCUyAkTlNDX0xJQlMgQFBFUkxMRE9QVFNfRk9SX0FQUFNACiAgICAgICA7OwogICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgYWdlbnQgbGliCiAgICAgLS1iYXNlLWFnZW50LWxpYnMpCkBAIC0yMDcsMTI2ICsyMjgsMTAgQEAKICAgICAgIDs7CiAgICAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogICAgIC0tY3JlYXRlLXNubXB2My11c2VyKQotICAgICAgaWYgQFBTQ01EQCB8IGVncmVwICcgc25tcGQgKiQnID4gL2Rldi9udWxsIDI+JjEgOyB0aGVuCi0gICAgICAgICBlY2hvICJBcHBhcmVudGx5IGF0IGxlYXN0IG9uZSBzbm1wZCBkZW1vbiBpcyBhbHJlYWR5IHJ1bm5pbmcuIgotICAgICAgICAgZWNobyAiWW91IG11c3Qgc3RvcCB0aGVtIGluIG9yZGVyIHRvIHVzZSB0aGlzIGNvbW1hbmQuIgotICAgICAgICAgZXhpdCAxCi0gICAgICBmaQotCi0gICAgICBBYWxnb3JpdGhtPSJNRDUiCi0gICAgICBYYWxnb3JpdGhtPSJERVMiCi0gICAgICB0b2tlbj1yd3VzZXIKKyAgICAgIGRvbmU9MQogICAgICAgc2hpZnQKLSAgICAgIHNoaWZ0ZWQ9MQotICAgICAgd2hpbGUgdGVzdCAieCRkb25lIiA9ICJ4IiAtYSAieCQxIiAhPSAieCIgOyBkbwotCWNhc2UgJDEgaW4KLQkgICAgLUF8LWEpCi0JCXNoaWZ0Ci0JCWlmIHRlc3QgIngkMSIgPSAieCIgOyB0aGVuCi0JCSAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGF1dGhlbnRpY2F0aW9uIGFsZ29yaXRobSBvciBwYXNzIHBocmFzZSIKLQkJICAgIGV4aXQgMQotCQlmaQotCSAgICAgICAgY2FzZSAkMSBpbgotICAgICAgICAgICAgICAgIE1ENXxTSEEpCi0JCSAgICBBYWxnb3JpdGhtPSQxCi0JCSAgICBzaGlmdAotCQkgICAgOzsKLSAgICAgICAgICAgICAgICBtZDV8c2hhKQotCQkgICAgQWFsZ29yaXRobT1gZWNobyAkMSB8IHRyIGEteiBBLVpgCi0JCSAgICBzaGlmdAotCQkgICAgOzsKLSAgICAgICAgICAgICAgICAqKQotCQkgICAgYXBhc3NwaHJhc2U9JDEKLQkJICAgIHNoaWZ0Ci0JCSAgICA7OwotCQllc2FjCi0JCTs7Ci0JICAgIC1YfC14KQotCQlzaGlmdAotCQlpZiB0ZXN0ICJ4JDEiID0gIngiIDsgdGhlbgotCQkgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhbiBlbmNyeXB0aW9uIGFsZ29yaXRobSBvciBwYXNzIHBocmFzZSIKLQkJICAgIGV4aXQgMQotCQlmaQotCSAgICAgICAgY2FzZSAkMSBpbgotICAgICAgICAgICAgICAgIERFU3xBRVN8QUVTMTI4KQotCQkgICAgWGFsZ29yaXRobT0kMQotCQkgICAgc2hpZnQKLQkJICAgIDs7Ci0gICAgICAgICAgICAgICAgZGVzfGFlc3xhZXMxMjgpCi0JCSAgICBYYWxnb3JpdGhtPWBlY2hvICQxIHwgdHIgYS16IEEtWmAKLQkJICAgIHNoaWZ0Ci0JCSAgICA7OwotICAgICAgICAgICAgICAgICopCi0JCSAgICB4cGFzc3BocmFzZT0kMQotCQkgICAgc2hpZnQKLQkJICAgIDs7Ci0JCWVzYWMKLQkJOzsKLQkgICAgLXJvKQotCSAgICAgICAgdG9rZW49InJvdXNlciIKLQkJc2hpZnQKLQkJOzsKLSAJICAgIC0qKQotCQllY2hvICJ1bmtub3duIHN1Ym9wdGlvbiB0byAtLWNyZWF0ZS1zbm1wdjMtdXNlcjogJDEiCi0JCWV4aXQgMQotCQk7OwotCSAgICAqKQotCSAgICAgICAgZG9uZT0xCi0JCTs7Ci0JZXNhYwotICAgICAgZG9uZQotICAgICAgCi0gICAgICBpZiB0ZXN0ICJ4JDEiID0gIngiIDsgdGhlbgotICAgICAgICAgIHByb21wdD15ZXMKLQkgIGVjaG8gIkVudGVyIGEgU05NUHYzIHVzZXIgbmFtZSB0byBjcmVhdGU6ICIKLQkgIHJlYWQgdXNlcgotICAgICAgZWxzZQotICAgICAgICAgIHVzZXI9JDEKLSAgICAgICAgICBzaGlmdAotICAgICAgZmkKLSAgICAgIGlmIHRlc3QgIngkdXNlciIgPSAieCIgOyB0aGVuCi0gICAgICAgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhIHVzZXIgbmFtZSIKLQkgIGV4aXQgMQotICAgICAgZmkKLQotICAgICAgaWYgdGVzdCAieCRhcGFzc3BocmFzZSIgPSAieCIgOyB0aGVuCi0gICAgICAgICAgcHJvbXB0PXllcwotCSAgZWNobyAiRW50ZXIgYXV0aGVudGljYXRpb24gcGFzcy1waHJhc2U6ICIKLQkgIHJlYWQgYXBhc3NwaHJhc2UKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICJ4JGFwYXNzcGhyYXNlIiA9ICJ4IiA7IHRoZW4KLSAgICAgICAgICBlY2hvICJZb3UgbXVzdCBzcGVjaWZ5IGFuIGF1dGhlbnRpY2F0aW9uIHBhc3MtcGhyYXNlIgotCSAgZXhpdCAxCi0gICAgICBmaQotCi0gICAgICBpZiB0ZXN0ICJ4JHByb21wdCIgPSAieHllcyIgLWEgIngkeHBhc3NwaHJhc2UiID0gIngiIDsgdGhlbgotCSAgZWNobyAiRW50ZXIgZW5jcnlwdGlvbiBwYXNzLXBocmFzZTogIgotCSAgZWNobyAiICBbcHJlc3MgcmV0dXJuIHRvIHJldXNlIHRoZSBhdXRoZW50aWNhdGlvbiBwYXNzLXBocmFzZV0iCi0JICByZWFkIHhwYXNzcGhyYXNlCi0gICAgICBmaQotCi0gICAgICBvdXRkaXI9IkBQRVJTSVNURU5UX0RJUkVDVE9SWUAiCi0gICAgICBvdXRmaWxlPSIkb3V0ZGlyL3NubXBkLmNvbmYiCi0gICAgICBsaW5lPSJjcmVhdGVVc2VyICR1c2VyICRBYWxnb3JpdGhtIFwiJGFwYXNzcGhyYXNlXCIgJFhhbGdvcml0aG0gJHhwYXNzcGhyYXNlIgotICAgICAgZWNobyAiYWRkaW5nIHRoZSBmb2xsb3dpbmcgbGluZSB0byAkb3V0ZmlsZToiCi0gICAgICBlY2hvICIgICIgJGxpbmUKLSAgICAgICMgaW4gY2FzZSBpdCBoYXNuJ3QgZXZlciBiZWVuIHN0YXJ0ZWQgeWV0LCBzdGFydCBpdC4KLSAgICAgIGlmIHRlc3QgISAtZCAkb3V0ZGlyIDsgdGhlbgotICAgICAgICAgIG1rZGlyICRvdXRkaXIKLSAgICAgIGZpCi0gICAgICBpZiB0ZXN0ICEgLWQgJG91dGZpbGUgOyB0aGVuCi0gICAgICAgICAgdG91Y2ggJG91dGZpbGUKLSAgICAgIGZpCi0gICAgICBlY2hvICRsaW5lID4+ICRvdXRmaWxlCi0KLSAgICAgIG91dGZpbGU9IkBkYXRhZGlyQC9zbm1wL3NubXBkLmNvbmYiCi0gICAgICBsaW5lPSIkdG9rZW4gJHVzZXIiCi0gICAgICBlY2hvICJhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lIHRvICRvdXRmaWxlOiIKLSAgICAgIGVjaG8gIiAgIiAkbGluZQotICAgICAgaWYgdGVzdCAhIC1kICRvdXRmaWxlIDsgdGhlbgotICAgICAgICAgIHRvdWNoICRvdXRmaWxlCi0gICAgICBmaQotICAgICAgZWNobyAkbGluZSA+PiAkb3V0ZmlsZQorICAgICAgbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIgJCoKKyAgICAgIGV4aXQgJD8KICAgICAgIDs7CiAKICAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCkBAIC0zNzgsNyArMjgzLDcgQEAKIAllY2hvICJBY2suICBDYW4ndCBjcmVhdGUgJHRtcGZpbGU6IGFscmVhZHkgZXhpc3RzIgogCWV4aXQgMQogICAgICAgZmkKLSAgICAgIGVjaG8gImdlbmVyYXRpbmcgdGhlIHRtcG9yYXJ5IGNvZGUgZmlsZTogJHRtcGZpbGUiCisgICAgICBlY2hvICJnZW5lcmF0aW5nIHRoZSB0ZW1wb3JhcnkgY29kZSBmaWxlOiAkdG1wZmlsZSIKICAgICAgIHJtIC1mICR0bXBmaWxlCiAgICAgICBjYXQgPiAkdG1wZmlsZSA8PEVPRgogLyogZ2VuZXJhdGVkIGZyb20gbmV0LXNubXAtY29uZmlnICovCkBAIC00MjUsNiArMzMwLDcgQEAKIAogICAgICAgY2F0ID4+ICR0bXBmaWxlIDw8RU9GCiBjb25zdCBjaGFyICphcHBfbmFtZSA9ICIkb3V0bmFtZSI7CitzdGF0aWMgaW50IHJlY29uZmlnID0gMDsKIAogZXh0ZXJuIGludCBuZXRzbm1wX3J1bm5pbmc7CiAKQEAgLTQzOSw2ICszNDUsMTUgQEAKICAgICBuZXRzbm1wX3J1bm5pbmcgPSAwOwogfQogCisjaWZkZWYgU0lHSFVQCitSRVRTSUdUWVBFCitodXBfaGFuZGxlcihpbnQgc2lnKQoreworICAgIHJlY29uZmlnID0gMTsKKyAgICBzaWduYWwoU0lHSFVQLCBodXBfaGFuZGxlcik7Cit9CisjZW5kaWYKKwogc3RhdGljIHZvaWQKIHVzYWdlKGNvbnN0IGNoYXIgKnByb2cpCiB7CkBAIC02MTUsMTAgKzUzMCw5IEBACiAgICAgICBpZiBncmVwICJpbml0XyRuYW1lIiAkaSA7IHRoZW4KICAgICAgICAgZWNobyAiICBpbml0XyR7bmFtZX0oKTsiID4+ICR0bXBmaWxlCiAgICAgICBmaQotICAgICAgc2hpZnQKICAgICBkb25lCiAKLSAgICAjIGZpbmlzaCBmaWxlCisgICAgIyBoYW5kbGUgdGhlIG1haW4gbG9vcAogICAgIGNhdCA+PiAkdG1wZmlsZSA8PEVPRgogCiAgIC8qICRvdXRuYW1lIHdpbGwgYmUgdXNlZCB0byByZWFkICRvdXRuYW1lLmNvbmYgZmlsZXMuICovCkBAIC02MzgsMTggKzU1Miw0NyBAQAogI2lmZGVmIFNJR0lOVAogICBzaWduYWwoU0lHSU5ULCBzdG9wX3NlcnZlcik7CiAjZW5kaWYKKyNpZmRlZiBTSUdIVVAKKyAgc2lnbmFsKFNJR0hVUCwgaHVwX2hhbmRsZXIpOworI2VuZGlmCiAKICAgLyogbWFpbiBsb29wIGhlcmUuLi4gKi8KICAgd2hpbGUobmV0c25tcF9ydW5uaW5nKSB7CisgICAgaWYgKHJlY29uZmlnKSB7CisgICAgICBmcmVlX2NvbmZpZygpOworICAgICAgcmVhZF9jb25maWdzKCk7CisgICAgICByZWNvbmZpZyA9IDA7CisgICAgfQogICAgIGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKDEpOwogICB9CiAKICAgLyogYXQgc2h1dGRvd24gdGltZSAqLwogICBzbm1wX3NodXRkb3duKGFwcF9uYW1lKTsKKworICAvKiBkZWluaXRpYWxpemUgeW91ciBtaWIgY29kZSBoZXJlICovCitFT0YKKworICAgICMgYWRkIHNodXRkb3duIHJvdXRpbmVzCisKKyAgICBpPWBjb3VudCAkY2ZpbGVzYAorICAgIHdoaWxlIFsgJGkgLWd0IDAgXSA7IGRvCisgICAgICBmdWxsbmFtZT1gaW5kZXggJGkgJGNmaWxlc2AKKyAgICAgIG5hbWU9YGJhc2VuYW1lICRmdWxsbmFtZSB8IHNlZCAncy9cLltjb10kLy8nYAorICAgICAgZWNobyBjaGVja2luZyBmb3Igc2h1dGRvd25fJG5hbWUgaW4gJGZ1bGxuYW1lCisgICAgICBpZiBncmVwICJzaHV0ZG93bl8kbmFtZSIgJGZ1bGxuYW1lIDsgdGhlbgorICAgICAgICBlY2hvICIgIHNodXRkb3duXyR7bmFtZX0oKTsiID4+ICR0bXBmaWxlCisgICAgICBmaQorICAgICAgaT1gZXhwciAkaSAtIDFgCisgICAgZG9uZQorCisgICAgIyBmaW5pc2ggZmlsZQorICAgIGNhdCA+PiAkdG1wZmlsZSA8PEVPRgorCisgIC8qIHNodXRkb3duIHRoZSBhZ2VudCBsaWJyYXJ5ICovCisgIHNodXRkb3duX2FnZW50KCk7CiAgIFNPQ0tfQ0xFQU5VUDsKICAgZXhpdCgwKTsKIH0KLQogRU9GCiAgICAgICBpZiB0ZXN0ICIkPyIgIT0gMCAtbyAhIC1mICIkdG1wZmlsZSIgOyB0aGVuCiAgICAgICAgIGVjaG8gIkFjay4gIENhbid0IGNyZWF0ZSAkdG1wZmlsZS4iCkBAIC02NTksMTAgKzYwMiwxMCBAQAogICAgICAgZWNobyAicnVubmluZzogJGNtZCIKICAgICAgIGAkY21kYAogICAgICAgaWYgdGVzdCAieCRub3JtIiAhPSAieDEiIDsgdGhlbgotICAgICAgICBlY2hvICJyZW1vdmluZyB0aGUgdG1wb3JhcnkgY29kZSBmaWxlOiAkdG1wZmlsZSIKKyAgICAgICAgZWNobyAicmVtb3ZpbmcgdGhlIHRlbXBvcmFyeSBjb2RlIGZpbGU6ICR0bXBmaWxlIgogICAgICAgICBybSAtZiAkdG1wZmlsZQogICAgICAgZWxzZQotICAgICAgICBlY2hvICJsZWF2aW5nIHRoZSB0bXBvcmFyeSBjb2RlIGZpbGU6ICR0bXBmaWxlIgorICAgICAgICBlY2hvICJsZWF2aW5nIHRoZSB0ZW1wb3JhcnkgY29kZSBmaWxlOiAkdG1wZmlsZSIKICAgICAgIGZpCiAgICAgICBpZiB0ZXN0IC1mICRvdXRuYW1lIDsgdGhlbgogICAgICAgICBlY2hvICJzdWJhZ2VudCBwcm9ncmFtICRvdXRuYW1lIGNyZWF0ZWQiCkBAIC02OTMsOCArNjM2LDkgQEAKICAgZWNobyAiIgogICBlY2hvICIgIFNOTVAgU2V0dXAgY29tbWFuZHM6IgogICBlY2hvICIiCi0gIGVjaG8gIiAgICAtLWNyZWF0ZS1zbm1wdjMtdXNlciBbLXJvXSBbLUEgYXV0aHBhc3NdIFstWCBwcml2cGFzc10iCi0gIGVjaG8gIiAgICAgICAgICAgICAgICAgICAgICAgICBbLWEgTUQ1fFNIQV0gWy14IERFU3xBRVNdIFt1c2VybmFtZV0iCisgIGVjaG8gIiAgICAtLWNyZWF0ZS1zbm1wdjMtdXNlciBjcmVhdGVzIGEgU05NUHYzIHVzZXIgaW4gTmV0LVNOTVAgY29uZmlnIGZpbGUuIgorICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgU2VlIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIC0taGVscCBmb3IgbGlzdCBvZiIKKyAgZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgIGFjY2VwdGVkIG9wdGlvbnMuIgogICBlY2hvICIiCiAgIGVjaG8gIiAgVGhlc2Ugb3B0aW9ucyBwcm9kdWNlIHRoZSB2YXJpb3VzIGNvbXBpbGF0aW9uIGZsYWdzIG5lZWRlZCB3aGVuIgogICBlY2hvICIgIGJ1aWxkaW5nIGV4dGVybmFsIFNOTVAgYXBwbGljYXRpb25zOiIKQEAgLTcyOSw2ICs2NzMsNyBAQAogICBlY2hvICIgICAgLS1idWlsZC1pbmNsdWRlcyAgICAgIGluY2x1ZGUgcGF0aCB0byBidWlsZC9zb3VyY2UgaW5jbHVkZXMiCiAgIGVjaG8gIiAgICAtLWJ1aWxkLWxpYi1kaXJzICAgICAgbGluayBwYXRoIHRvIGxpYnJhcmllcyIKICAgZWNobyAiICAgIC0tYnVpbGQtbGliLWRlcHMgICAgICBwYXRoIHRvIGxpYnJhcmllcyBmb3IgZGVwZW5kZW5jeSB0YXJnZXQiCisgIGVjaG8gIiAgICAtLWJ1aWxkLWNvbW1hbmQgICAgICAgY29tbWFuZCB0byBjb21waWxlIFwkMy4uLiB0byBcJDIiCiAgIGVjaG8gIiIKICAgZWNobyAiICBBdXRvbWF0ZWQgc3ViYWdlbnQgYnVpbGRpbmcgKHByb2R1Y2VzIGFuIE9VVFBVVE5BTUUgYmluYXJ5IGZpbGUpOiIKICAgZWNobyAiICBbdGhpcyBmZWF0dXJlIGhhcyBub3QgYmVlbiB0ZXN0ZWQgdmVyeSB3ZWxsIHlldC4gIHVzZSBhdCB5b3VyIHJpc2suXSIKZGlmZiAtLWdpdCBhL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluIGIvbmV0LXNubXAtY3JlYXRlLXYzLXVzZXIuaW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTI4OGYzYgotLS0gL2Rldi9udWxsCisrKyBiL25ldC1zbm1wLWNyZWF0ZS12My11c2VyLmluCkBAIC0wLDAgKzEsMTY4IEBACisjIS9iaW4vc2gKKyMKKyMgJElkJAorIworIyB0aGlzIHNoZWxsIHNjcmlwdCBpcyBkZXNpZ25lZCB0byBhZGQgbmV3IFNOTVB2MyB1c2VycworIyB0byBOZXQtU05NUCBjb25maWcgZmlsZS4KKworcHJlZml4PUBwcmVmaXhACitleGVjX3ByZWZpeD1AZXhlY19wcmVmaXhACitpbmNsdWRlZGlyPUBpbmNsdWRlZGlyQAorbGliZGlyPUBsaWJkaXJACitkYXRhcm9vdGRpcj1AZGF0YXJvb3RkaXJACitOU0NfTERGTEFHUz0iQExERkxBR1NAIgorTlNDX0lOQ0xVREVESVI9JHtpbmNsdWRlZGlyfQorTlNDX0xJQkRJUj0tTCR7bGliZGlyfQorTlNDX0xJQlM9IkBMSUJTQCIKK05TQ19BR0VOVExJQlM9IkBBR0VOVExJQlNAIEBQRVJMTERPUFRTX0ZPUl9BUFBTQCIKK05TQ19QUkVGSVg9JHByZWZpeAorTlNDX0VYRUNfUFJFRklYPSRleGVjX3ByZWZpeAorTlNDX1NSQ0RJUj1Ac3JjZGlyQAorTlNDX0lOQ0RJUj0ke05TQ19QUkVGSVh9L2luY2x1ZGUKK05TQ19CQVNFX1NVQkFHRU5UX0xJQlM9Ii1sbmV0c25tcGFnZW50IC1sbmV0c25tcCIKK05TQ19CQVNFX0FHRU5UX0xJQlM9Ii1sbmV0c25tcGFnZW50IC1sbmV0c25tcG1pYnMgLWxuZXRzbm1wIgorTlNDX1NSQ19MSUJESVJTPSJhZ2VudC8ubGlicyBzbm1wbGliLy5saWJzIgorTlNDX1NSQ19MSUJERVBTPSJhZ2VudC8ubGlicy9saWJuZXRzbm1wbWlicy5hIGFnZW50Ly5saWJzL2xpYm5ldHNubXBhZ2VudC5hIHNubXBsaWIvLmxpYnMvbGlibmV0c25tcC5hIgorCitpZiB0ZXN0ICJ4JE5TQ19TUkNESVIiID0gInguIiA7IHRoZW4KKyAgIE5TQ19TUkNESVI9Ik5FVC1TTk1QLVNPVVJDRS1ESVIiCitmaQorCitpZiBAUFNDTURAIHwgZWdyZXAgJyBzbm1wZCAqJCcgPiAvZGV2L251bGwgMj4mMSA7IHRoZW4KKyAgICBlY2hvICJBcHBhcmVudGx5IGF0IGxlYXN0IG9uZSBzbm1wZCBkZW1vbiBpcyBhbHJlYWR5IHJ1bm5pbmcuIgorICAgIGVjaG8gIllvdSBtdXN0IHN0b3AgdGhlbSBpbiBvcmRlciB0byB1c2UgdGhpcyBjb21tYW5kLiIKKyAgICBleGl0IDEKK2ZpCisKK0FhbGdvcml0aG09Ik1ENSIKK1hhbGdvcml0aG09IkRFUyIKK3Rva2VuPXJ3dXNlcgorCit3aGlsZSB0ZXN0ICJ4JGRvbmUiID0gIngiIC1hICJ4JDEiICE9ICJ4IiAtYSAieCR1c2FnZSIgIT0gInh5ZXMiOyBkbworY2FzZSAiJDEiIGluCisgICAgLSo9Kikgb3B0YXJnPWBlY2hvICIkMSIgfCBzZWQgJ3MvWy1fYS16QS1aMC05XSo9Ly8nYCA7OworICAgICopIG9wdGFyZz0gOzsKK2VzYWMKKwordW5zZXQgc2hpZnRlZAorY2FzZSAkMSBpbgorICAgIC0tdmVyc2lvbnwtLXZlciopCisgICAgICBlY2hvIEBWRVJTSU9OQAorICAgICAgOzsKKyAgICAtLWhlbHApCisgICAgICB1c2FnZT0ieWVzIgorICAgICAgOzsKKworICAgIC1BfC1hKQorCXNoaWZ0CisJaWYgdGVzdCAieCQxIiA9ICJ4IiA7IHRoZW4KKwkgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhbiBhdXRoZW50aWNhdGlvbiBhbGdvcml0aG0gb3IgcGFzcyBwaHJhc2UiCisJICAgIGV4aXQgMQorCWZpCisgICAgICAgIGNhc2UgJDEgaW4KKyAgICAgICAgICAgIE1ENXxTSEEpCisJICAgIEFhbGdvcml0aG09JDEKKwkgICAgc2hpZnQKKwkgICAgOzsKKyAgICAgICAgICAgIG1kNXxzaGEpCisJICAgIEFhbGdvcml0aG09YGVjaG8gJDEgfCB0ciBhLXogQS1aYAorCSAgICBzaGlmdAorCSAgICA7OworICAgICAgICAgICAgKikKKwkgICAgYXBhc3NwaHJhc2U9JDEKKwkgICAgc2hpZnQKKwkgICAgOzsKKyAgICAgICAgZXNhYworICAgICAgICA7OworICAgIC1YfC14KQorCXNoaWZ0CisJaWYgdGVzdCAieCQxIiA9ICJ4IiA7IHRoZW4KKwkgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhbiBlbmNyeXB0aW9uIGFsZ29yaXRobSBvciBwYXNzIHBocmFzZSIKKwkgICAgZXhpdCAxCisJZmkKKyAgICAgICAgY2FzZSAkMSBpbgorICAgICAgICAgICAgREVTfEFFU3xBRVMxMjgpCisJICAgIFhhbGdvcml0aG09JDEKKwkgICAgc2hpZnQKKwkgICAgOzsKKyAgICAgICAgICAgIGRlc3xhZXN8YWVzMTI4KQorCSAgICBYYWxnb3JpdGhtPWBlY2hvICQxIHwgdHIgYS16IEEtWmAKKwkgICAgc2hpZnQKKwkgICAgOzsKKyAgICAgICAgICAgICopCisJICAgIHhwYXNzcGhyYXNlPSQxCisJICAgIHNoaWZ0CisJICAgIDs7CisJZXNhYworCTs7CisgICAgLXJvKQorICAgICAgICB0b2tlbj0icm91c2VyIgorCXNoaWZ0CisJOzsKKyAgICAtKikKKwllY2hvICJ1bmtub3duIHN1Ym9wdGlvbiB0byAkMDogJDEiCisJdXNhZ2U9eWVzCisJZG9uZT0xCisJOzsKKyAgICAqKQorICAgICAgICBkb25lPTEKKyAgICAgICAgOzsKKyAgICBlc2FjCitkb25lCisKK2lmIHRlc3QgIngkdXNhZ2UiID0gInh5ZXMiOyB0aGVuCisgICAgZWNobyAiIgorICAgIGVjaG8gIlVzYWdlOiIKKyAgICBlY2hvICIgIG5ldC1zbm1wLWNyZWF0ZS12My11c2VyIFstcm9dIFstQSBhdXRocGFzc10gWy1YIHByaXZwYXNzXSIKKyAgICBlY2hvICIgICAgICAgICAgICAgICAgICAgICAgICAgIFstYSBNRDV8U0hBXSBbLXggREVTfEFFU10gW3VzZXJuYW1lXSIKKyAgICBlY2hvICIiCisgICAgZXhpdAorZmkKKworaWYgdGVzdCAieCQxIiA9ICJ4IiA7IHRoZW4KKyAgICBwcm9tcHQ9eWVzCisgICAgZWNobyAiRW50ZXIgYSBTTk1QdjMgdXNlciBuYW1lIHRvIGNyZWF0ZTogIgorICAgIHJlYWQgdXNlcgorZWxzZQorICAgIHVzZXI9JDEKKyAgICBzaGlmdAorZmkKK2lmIHRlc3QgIngkdXNlciIgPSAieCIgOyB0aGVuCisgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhIHVzZXIgbmFtZSIKKyAgICBleGl0IDEKK2ZpCitpZiB0ZXN0ICJ4JGFwYXNzcGhyYXNlIiA9ICJ4IiA7IHRoZW4KKyAgICBwcm9tcHQ9eWVzCisgICAgZWNobyAiRW50ZXIgYXV0aGVudGljYXRpb24gcGFzcy1waHJhc2U6ICIKKyAgICByZWFkIGFwYXNzcGhyYXNlCitmaQoraWYgdGVzdCAieCRhcGFzc3BocmFzZSIgPSAieCIgOyB0aGVuCisgICAgZWNobyAiWW91IG11c3Qgc3BlY2lmeSBhbiBhdXRoZW50aWNhdGlvbiBwYXNzLXBocmFzZSIKKyAgICBleGl0IDEKK2ZpCisgICAgaWYgdGVzdCAieCRwcm9tcHQiID0gInh5ZXMiIC1hICJ4JHhwYXNzcGhyYXNlIiA9ICJ4IiA7IHRoZW4KKyAgICBlY2hvICJFbnRlciBlbmNyeXB0aW9uIHBhc3MtcGhyYXNlOiAiCisgICAgZWNobyAiICBbcHJlc3MgcmV0dXJuIHRvIHJldXNlIHRoZSBhdXRoZW50aWNhdGlvbiBwYXNzLXBocmFzZV0iCisgICAgcmVhZCB4cGFzc3BocmFzZQorZmkKK291dGRpcj0iQFBFUlNJU1RFTlRfRElSRUNUT1JZQCIKK291dGZpbGU9IiRvdXRkaXIvc25tcGQuY29uZiIKK2xpbmU9ImNyZWF0ZVVzZXIgJHVzZXIgJEFhbGdvcml0aG0gXCIkYXBhc3NwaHJhc2VcIiAkWGFsZ29yaXRobSAkeHBhc3NwaHJhc2UiCitlY2hvICJhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lIHRvICRvdXRmaWxlOiIKK2VjaG8gIiAgIiAkbGluZQorIyBpbiBjYXNlIGl0IGhhc24ndCBldmVyIGJlZW4gc3RhcnRlZCB5ZXQsIHN0YXJ0IGl0LgoraWYgdGVzdCAhIC1kICRvdXRkaXIgOyB0aGVuCisgICAgbWtkaXIgJG91dGRpcgorZmkKK2lmIHRlc3QgISAtZCAkb3V0ZmlsZSA7IHRoZW4KKyAgICB0b3VjaCAkb3V0ZmlsZQorZmkKK2VjaG8gJGxpbmUgPj4gJG91dGZpbGUKK291dGZpbGU9IkBkYXRhZGlyQC9zbm1wL3NubXBkLmNvbmYiCitsaW5lPSIkdG9rZW4gJHVzZXIiCitlY2hvICJhZGRpbmcgdGhlIGZvbGxvd2luZyBsaW5lIHRvICRvdXRmaWxlOiIKK2VjaG8gIiAgIiAkbGluZQoraWYgdGVzdCAhIC1kICRvdXRmaWxlIDsgdGhlbgorICAgIHRvdWNoICRvdXRmaWxlCitmaQorZWNobyAkbGluZSA+PiAkb3V0ZmlsZQpkaWZmIC0tZ2l0IGEvcGVybC9BU04vQVNOLnBtIGIvcGVybC9BU04vQVNOLnBtCmluZGV4IDY0MzBmN2UuLjAwOGU5N2IgMTAwNjQ0Ci0tLSBhL3BlcmwvQVNOL0FTTi5wbQorKysgYi9wZXJsL0FTTi9BU04ucG0KQEAgLTY2LDcgKzY2LDcgQEAKIAlBU05fVU5TSUdORUQKIAlBU05fVU5TSUdORUQ2NAogKTsKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiBzdWIgQVVUT0xPQUQgewogICAgICMgVGhpcyBBVVRPTE9BRCBpcyB1c2VkIHRvICdhdXRvbG9hZCcgY29uc3RhbnRzIGZyb20gdGhlIGNvbnN0YW50KCkKZGlmZiAtLWdpdCBhL3BlcmwvQVNOL01ha2VmaWxlLlBMIGIvcGVybC9BU04vTWFrZWZpbGUuUEwKaW5kZXggZjg5NWE0MS4uNDU3Njc4MSAxMDA2NDQKLS0tIGEvcGVybC9BU04vTWFrZWZpbGUuUEwKKysrIGIvcGVybC9BU04vTWFrZWZpbGUuUEwKQEAgLTI4LDkgKzI4LDkgQEAKICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwogCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTg0LDcgKzE4NCw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcGVybC9BU04vbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY5ZGUyOQotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvQVNOL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCmRpZmYgLS1naXQgYS9wZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtIGIvcGVybC9BbnlEYXRhX1NOTVAvU3RvcmFnZS5wbQppbmRleCA2MjQ3OTYzLi42N2M3OTFmIDEwMDY0NAotLS0gYS9wZXJsL0FueURhdGFfU05NUC9TdG9yYWdlLnBtCisrKyBiL3BlcmwvQW55RGF0YV9TTk1QL1N0b3JhZ2UucG0KQEAgLTYsNyArNiw3IEBACiAjIyAgIHNjYWxhciBzZXRzPwogIyMgICBtdWx0aS1ob3N0cwogCi0kQW55RGF0YTo6U3RvcmFnZTo6VkVSU0lPTiA9ICc1LjA0MDQnOworJEFueURhdGE6OlN0b3JhZ2U6OlZFUlNJT04gPSAnNS4wNzAzJzsKIHVzZSBzdHJpY3Q7CiB1c2Ugd2FybmluZ3M7CiAKZGlmZiAtLWdpdCBhL3BlcmwvTWFrZWZpbGUuUEwgYi9wZXJsL01ha2VmaWxlLlBMCmluZGV4IGY3MGY5OTEuLjMxZmRjNDAgMTAwNjQ0Ci0tLSBhL3BlcmwvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9NYWtlZmlsZS5QTApAQCAtMTEsNyArMTEsNyBAQAogICAgICRuc2NvbmZpZz0ibmV0LXNubXAtY29uZmlnIjsgIyBpbiBwYXRoIGJ5IGRlZmF1bHQKICAgICBteSAlUGFyYW1zID0gKAogCQkgICdOQU1FJyA9PiAnQnVuZGxlOjpOZXRTTk1QJywKLQkJICAnRElSJyA9PiBbcXcoZGVmYXVsdF9zdG9yZSBBU04gT0lEIGFnZW50IFNOTVAgVHJhcFJlY2VpdmVyKV0KKwkJICAnRElSJyA9PiBbcXcoZGVmYXVsdF9zdG9yZSBBU04gT0lEIGFnZW50IFNOTVAgVHJhcFJlY2VpdmVyKV0sCiAJCSAgKTsKIAogICAgICMgYm9ndXMsIGJ1dCB0aGVzZSBvcHRpb25zIG5lZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBsb3dlciBsZXZlbHMKQEAgLTI4LDcgKzI4LDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTExMSw3ICsxMTEsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL01ha2VmaWxlLnN1YnMucGwgYi9wZXJsL01ha2VmaWxlLnN1YnMucGwKaW5kZXggODE3ZmI1NS4uZTNjMjVlZiAxMDA2NDQKLS0tIGEvcGVybC9NYWtlZmlsZS5zdWJzLnBsCisrKyBiL3BlcmwvTWFrZWZpbGUuc3Vicy5wbApAQCAtNCw3ICs0LDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTg3LDcgKzg3LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9PSUQvTWFrZWZpbGUuUEwgYi9wZXJsL09JRC9NYWtlZmlsZS5QTAppbmRleCA1ZDk0MzM4Li42YmIxNjE2IDEwMDY0NAotLS0gYS9wZXJsL09JRC9NYWtlZmlsZS5QTAorKysgYi9wZXJsL09JRC9NYWtlZmlsZS5QTApAQCAtMjgsOSArMjgsOSBAQAogICAgIH0KICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CkBAIC0xMDIsNyArMTAyLDcgQEAKICAgICAkcm9vdHBhdGggPSAiLi4vIiBpZiAoISRyb290cGF0aCk7CiAgICAgJHJvb3RwYXRoIC49ICcvJyBpZiAoJHJvb3RwYXRoICF+IC9cLyQvKTsKICAgICAKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAKICAgICAgICMgR3JhYiBjb21tYW5kIGxpbmUgb3B0aW9ucyBmaXJzdC4gIE9ubHkgdXNlZCBpZiBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYXJlIG5vdCBzZXQKICAgICAgIEdldE9wdGlvbnMoIk5FVC1TTk1QLUlOLVNPVVJDRT1zIiA9PiBcJHJldHsnaW5zb3VyY2UnfSwKQEAgLTE4NSw3ICsxODUsNyBAQAogCiAKIHN1YiBDaGVja19WZXJzaW9uIHsKLSAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gZXEgJ21zeXMnKSkgeworICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBuZSAnJykpIHsKICAgICBteSAkZm91bmR2ZXJzaW9uID0gMDsKICAgICByZXR1cm4gaWYgKCRFTlZ7J05FVFNOTVBfRE9OVF9DSEVDS19WRVJTSU9OJ30pOwogICAgIG9wZW4oSSwiPE1ha2VmaWxlIik7CmRpZmYgLS1naXQgYS9wZXJsL09JRC9PSUQucG0gYi9wZXJsL09JRC9PSUQucG0KaW5kZXggMTViMzc3NC4uYjc1YmYxZCAxMDA2NDQKLS0tIGEvcGVybC9PSUQvT0lELnBtCisrKyBiL3BlcmwvT0lEL09JRC5wbQpAQCAtOTIsNyArOTIsNyBAQAogCXNubXBfb2lkX2NvbXBhcmUKICAgICAgICAgY29tcGFyZQogKTsKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiBzdWIgbmV3IHsKICAgICBteSAkdHlwZSA9IHNoaWZ0OwpkaWZmIC0tZ2l0IGEvcGVybC9PSUQvT0lELnhzIGIvcGVybC9PSUQvT0lELnhzCmluZGV4IDVkNDFjM2EuLjEwNDg1ZjkgMTAwNjQ0Ci0tLSBhL3BlcmwvT0lEL09JRC54cworKysgYi9wZXJsL09JRC9PSUQueHMKQEAgLTI4LDcgKzI4LDcgQEAKIG5zb19uZXdhcnJheXB0cihvaWQgKm5hbWUsIHNpemVfdCBuYW1lX2xlbikgCiB7CiAgICAgbmV0c25tcF9vaWQgKlJFVFZBTDsKLSAgICBSRVRWQUwgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2lkKTsKKyAgICBSRVRWQUwgPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfb2lkKSk7CiAgICAgUkVUVkFMLT5uYW1lID0gUkVUVkFMLT5uYW1lYnVmOwogICAgIFJFVFZBTC0+bGVuID0gbmFtZV9sZW47CiAgICAgbWVtY3B5KFJFVFZBTC0+bmFtZSwgbmFtZSwgbmFtZV9sZW4gKiBzaXplb2Yob2lkKSk7CkBAIC0xNDYsNyArMTQ2LDcgQEAKICAgIGludCBpOwogICAgYnVmWzBdID0gJ1wwJzsKICAgIGZvciAoaT0wOyBpIDwgbGVuOyBpKyspIHsKLQlzcHJpbnRmKGJ1ZiwiLiVsdSIsKm9iamlkKyspOworCXNwcmludGYoYnVmLCIuJSIgTkVUU05NUF9QUklvICJ1Iiwqb2JqaWQrKyk7CiAJYnVmICs9IHN0cmxlbihidWYpOwogICAgfQogICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKQEAgLTE2MCwxMiArMTYwLDEzIEBACiAgICAgQ09ERToKICAgICAgICAgaWYgKGdldF90cmVlX2hlYWQoKSA9PSBOVUxMKQogICAgICAgICAgICAgbmV0c25tcF9pbml0X21pYigpOwotICAgICAgICBSRVRWQUwgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2lkKTsKKyAgICAgICAgUkVUVkFMID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX29pZCkpOwogICAgICAgICBSRVRWQUwtPm5hbWUgPSBSRVRWQUwtPm5hbWVidWY7CiAgICAgICAgIFJFVFZBTC0+bGVuID0gc2l6ZW9mKFJFVFZBTC0+bmFtZWJ1Zikvc2l6ZW9mKFJFVFZBTC0+bmFtZWJ1ZlswXSk7CiAgICAgICAgIGlmICghc25tcF9wYXJzZV9vaWQoaW5pdHN0cmluZywgKG9pZCAqKSBSRVRWQUwtPm5hbWUsICZSRVRWQUwtPmxlbikpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW4ndCBwYXJzZTogJXNcbiIsIGluaXRzdHJpbmcpOwogICAgICAgICAgICAgUkVUVkFMLT5sZW4gPSAwOworICAgICAgICAgICAgZnJlZShSRVRWQUwpOwogICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgfQogICAgIE9VVFBVVDoKQEAgLTI2Niw3ICsyNjcsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgoYnVmID0gKHVfY2hhciAqKSBjYWxsb2MoYnVmX2xlbiwgMSkpID09IE5VTEwpIHsKKyAgICAgICAgICAgIGlmICgoYnVmID0gbmV0c25tcF9tYWxsb2MoYnVmX2xlbikpID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTI4MiwxMiArMjgzLDE0IEBACiAgICAgICAgICAgICAgICAgICAgICBzdHJjbXAodHBub2RlLT5sYWJlbCArIHN0cmxlbih0cG5vZGUtPmxhYmVsKSAtIDUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlRhYmxlIikpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8qIHdlJ3JlIG5vdCB3aXRoaW4gYSB0YWJsZS4gIGJhZCBsb2dpYywgbGl0dGxlIGNob2ljZSAqLworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKCF0cGUpIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgICAgICBSRVRWQUwgPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KQEAgLTI5OCw2ICszMDEsNyBAQAogICAgICAgICAgICAgICAgICAgICAoTlVMTCA9PQogICAgICAgICAgICAgICAgICAgICAgKHRwZSA9IGdldF90cmVlKG5hbWUsIG5hbWVfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldF90cmVlX2hlYWQoKSkpKSkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOyAvKiBYWFg6IGJldHRlciBlcnJvciByZWNvdmVyeSBuZWVkZWQ/ICovCiAgICAgICAgICAgICAgICAgfQpAQCAtMzIwLDEyICszMjQsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgKE5VTEwgPT0KICAgICAgICAgICAgICAgICAgICAgIChpbmRleG5vZGUgPSBnZXRfdHJlZShuYW1lLCBuYW1lX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRfdHJlZV9oZWFkKCkpKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgICAgICAgICAgICAgLyogeHh4IG1lbSBsZWFrICovCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHZiZGF0YS50eXBlID0gbWliX3RvX2Fzbl90eXBlKGluZGV4bm9kZS0+dHlwZSk7CiAKICAgICAgICAgICAgICAgICBpZiAodmJkYXRhLnR5cGUgPT0gKHVfY2hhcikgLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9mcmVlKGJ1Zik7CiAgICAgICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybjsgLyogWFhYOiBub3QgZ29vZC4gIGhhbGYgcG9wdWxhdGVkIHN0YWNrPyAqLwogICAgICAgICAgICAgICAgIH0KQEAgLTM0Nyw5ICszNTMsOSBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAgICAgLyogcG9zc2libGUgbWVtb3J5IGxlYWs6IHZiZGF0YS5kYXRhIHNob3VsZCBiZSBmcmVlZCBsYXRlciAqLwogICAgICAgICAgICAgICAgIGlmIChwYXJzZV9vbmVfb2lkX2luZGV4KCZvaWRwLCAmb2lkcF9sZW4sICZ2YmRhdGEsIDApCiAgICAgICAgICAgICAgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZyZWUoYnVmKTsKICAgICAgICAgICAgICAgICAgICAgUkVUVkFMID0gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KQEAgLTM2Myw5ICszNjksMTAgQEAKICAgICAgICAgICAgICAgICBzcHJpbnRfcmVhbGxvY192YWx1ZSgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMSwgbmFtZSwgbmFtZV9sZW4sICZ2YmRhdGEpOwogKi8KLQorICAgICAgICAgICAgICAgIHNubXBfZnJlZV92YXJfaW50ZXJuYWxzKCZ2YmRhdGEpOwogICAgICAgICAgICAgICAgIGF2X3B1c2gobXlyZXQsIG5ld1NWcHYoKGNoYXIgKilidWYsIG91dF9sZW4pKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5ldHNubXBfZnJlZShidWYpOwogICAgICAgICAgICAgUkVUVkFMID0gbmV3UlYoKFNWICopbXlyZXQpOwogICAgICAgICB9CiAgICAgT1VUUFVUOgpkaWZmIC0tZ2l0IGEvcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9wZXJsL09JRC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjRjY2RiCi0tLSAvZGV2L251bGwKKysrIGIvcGVybC9PSUQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKQEAgLTAsMCArMSw2IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF9vYmppZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNucHJpbnRfdmFsdWUpCisKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC9NYWtlZmlsZS5QTCBiL3BlcmwvU05NUC9NYWtlZmlsZS5QTAppbmRleCA5MjhjYjY3Li5lNjE3Y2I3IDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9TTk1QL01ha2VmaWxlLlBMCkBAIC0zMiw5ICszMiw5IEBACiAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7Ci0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKQEAgLTEyOCw3ICsxMjgsNyBAQAogICAgIG15ICgkbWliZGlyLCAkc25tcGQsICRzbm1wdHJhcGQpOwogCiAgICAgICAgICMgV2luZG93cwotICAgICAgICBpZiAoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykgeworICAgICAgICBpZiAoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSB7CiAgICAgICAgICAgaWYgKGxjICgkb3B0cy0+eydpbnNvdXJjZSd9KSBlcSAidHJ1ZSIpIHsKICAgICAgICAgICAgICRtaWJkaXIgPSAiLi4vLi4vbWlicyI7CiAgICAgICAgICAgICBpZiAobGMoJG9wdHMtPnsnZGVidWcnfSkgZXEgInRydWUiKSB7CkBAIC0xNjksNyArMTY5LDcgQEAKIAkgICAgcHJvbXB0KCJVbmFibGUgdG8gbG9jYXRlIFwic25tcHRyYXBkXCIuIFBsZWFzZSBlbnRlciB0aGUgcGF0aDogIiwKIAkJICAgJHNubXBkX3BhdGgxKTsKIAotICAgICAgICBpZiAoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykgeworICAgICAgICBpZiAoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSB7CiAgICAgICAgICAgJHNubXBkID0gJHNubXBkIC4gJHNlcCAuICJzbm1wZC5leGUiOwogICAgICAgICAgICRzbm1wdHJhcGQgPSAkc25tcHRyYXBkIC4gJHNlcCAuICJzbm1wdHJhcGQuZXhlIjsKICAgICAgICAgfQpAQCAtMjMxLDcgKzIzMSw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0zMTQsNyArMzE0LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL1NOTVAucG0gYi9wZXJsL1NOTVAvU05NUC5wbQppbmRleCBlOTE0ZGNjLi5hMDVjZDM4IDEwMDY0NAotLS0gYS9wZXJsL1NOTVAvU05NUC5wbQorKysgYi9wZXJsL1NOTVAvU05NUC5wbQpAQCAtNyw3ICs3LDcgQEAKICMgICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZi4KIAogcGFja2FnZSBTTk1QOwotJFZFUlNJT04gPSAnNS4wNDA0JzsgICAjIGN1cnJlbnQgcmVsZWFzZSB2ZXJzaW9uIG51bWJlcgorJFZFUlNJT04gPSAnNS4wNzAzJzsgICAjIGN1cnJlbnQgcmVsZWFzZSB2ZXJzaW9uIG51bWJlcgogCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwpAQCAtNDYsNiArNDYsOCBAQAogICAgICAgICBzbm1wX2dldG5leHQKICAgICAgICAgc25tcF9zZXQKICAgICAgICAgc25tcF90cmFwCisJU05NUF9BUElfVFJBRElUSU9OQUwKKwlTTk1QX0FQSV9TSU5HTEUKICk7CiAKIHN1YiBBVVRPTE9BRCB7CkBAIC0zNDgsMTIgKzM1MCwyNCBAQAogICAgICRzZXNzLT50cmFwKEBfKTsKIH0KIAorIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyMgUHJlc2VydmVzIHRoZSBhYmlsaXR5IHRvIGNhbGwgTWFpbkxvb3AoKSB3aXRoIG5vIGFyZ3Mgc28gd2UgZG9uJ3QgCisjIGJyZWFrIG9sZCBjb2RlCisjCisjIEFsdGVybmF0ZWx5LCBNYWluTG9vcCgpIGNvdWxkIGJlIGNhbGxlZCBhcyBhbiBvYmplY3QgbWV0aG9kLCAKKyMgKCAkc2Vzcy0+TWFpbkxvb3AoKSApICwgc28gdGhhdCAkc2VsZiB3aW5kcyB1cCBpbiBAXy4gIFRoZW4gaXQgd291bGQgCisjIGJlIG1vcmUgbGlrZSA6CisjIG15ICRzZWxmID0gc2hpZnQ7CisjIC4uLi4gCisjIFNOTVA6Ol9tYWluX2xvb3AoLi4uLi4uLCAkc2VsZi0+e1Nlc3NQdHJ9KTsKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiBzdWIgTWFpbkxvb3AgeworICAgIG15ICRzcyA9IHNoaWZ0IGlmKCZTTk1QOjpfYXBpX21vZGUoKSA9PSBTTk1QOjpTTk1QX0FQSV9TSU5HTEUoKSk7CiAgICAgbXkgJHRpbWUgPSBzaGlmdDsKICAgICBteSAkY2FsbGJhY2sgPSBzaGlmdDsKICAgICBteSAkdGltZV9zZWMgPSAoJHRpbWUgPyBpbnQgJHRpbWUgOiAwKTsKICAgICBteSAkdGltZV91c2VjID0gKCR0aW1lID8gaW50KCgkdGltZS0kdGltZV9zZWMpKjEwMDAwMDApIDogMCk7Ci0gICAgU05NUDo6X21haW5fbG9vcCgkdGltZV9zZWMsJHRpbWVfdXNlYywkY2FsbGJhY2spOworICAgIFNOTVA6Ol9tYWluX2xvb3AoJHRpbWVfc2VjLCR0aW1lX3VzZWMsJGNhbGxiYWNrLChkZWZpbmVkKCRzcykgPyAkc3MtPntTZXNzUHRyfSA6ICgpKSk7CiB9CiAKIHN1YiBmaW5pc2ggewpAQCAtNDkwLDYgKzUwNCwxMSBAQAogICAgICAgICR0aGlzLT57RGVzdEhvc3R9ID0gJHRoaXMtPntEZXN0SG9zdH0gLiAiOiIgLiAkdGhpcy0+e1JlbW90ZVBvcnR9OwogICAgfQogCisgICBpZiAoJHRoaXMtPntEZXN0SG9zdH0gPX4gL14oZHRsc3x0bHN8c3NoKS8pIHsKKyAgICAgICAjIG9ubHkgd29ya3Mgd2l0aCB2ZXJzaW9uIDMKKyAgICAgICAkdGhpcy0+e1ZlcnNpb259ID0gMzsKKyAgIH0KKwogICAgaWYgKCR0aGlzLT57VmVyc2lvbn0gZXEgJzEnIG9yICR0aGlzLT57VmVyc2lvbn0gZXEgJzInCiAgICAgICAgb3IgJHRoaXMtPntWZXJzaW9ufSBlcSAnMmMnKSB7CiAgICAgICAgJHRoaXMtPntTZXNzUHRyfSA9IFNOTVA6Ol9uZXdfc2Vzc2lvbigkdGhpcy0+e1ZlcnNpb259LApAQCAtNTE3LDUxICs1MzYsODQgQEAKICAgICAgICAkdGhpcy0+e0NvbnRleHR9IHx8PSAKIAkgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAogCQkgICAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9DT05URVhUKCkpIHx8ICcnOwotICAgICAgICR0aGlzLT57QXV0aFByb3RvfSB8fD0gJ0RFRkFVTFQnOyAjIGRlZmF1bHRzIHRvIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdAotICAgICAgICR0aGlzLT57QXV0aFBhc3N9IHx8PQotICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCi0JCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfQVVUSFBBU1NQSFJBU0UoKSkgfHwKLSAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAotCQkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UoKSkgfHwgJyc7CiAKLSAgICAgICAkdGhpcy0+e0F1dGhNYXN0ZXJLZXl9IHx8PSAnJzsKLSAgICAgICAkdGhpcy0+e1ByaXZNYXN0ZXJLZXl9IHx8PSAnJzsKLSAgICAgICAkdGhpcy0+e0F1dGhMb2NhbGl6ZWRLZXl9IHx8PSAnJzsKLSAgICAgICAkdGhpcy0+e1ByaXZMb2NhbGl6ZWRLZXl9IHx8PSAnJzsKKyAgICAgICBpZiAoJHRoaXMtPntEZXN0SG9zdH0gPX4gL14oZHRsc3x0bHN8c3NoKS8pIHsKKwkgICAjIHRoaXMgaXMgYSB0dW5uZWxlZCBwcm90b2NvbAogCi0gICAgICAgJHRoaXMtPntQcml2UHJvdG99IHx8PSAnREVGQVVMVCc7ICAjIGRlZmF1bHRzIHRvIGh0ZSBsaWJyYXJ5J3MgZGVmYXVsdAotICAgICAgICR0aGlzLT57UHJpdlBhc3N9IHx8PQotICAgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Om5ldHNubXBfZHNfZ2V0X3N0cmluZyhOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQlJBUllfSUQoKSwgCi0JCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfUFJJVlBBU1NQSFJBU0UoKSkgfHwKLSAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAotCQkgICAgIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UoKSkgfHwgJyc7Ci0gICAgICAgJHRoaXMtPntFbmdpbmVCb290c30gPSAwIGlmIG5vdCBkZWZpbmVkICR0aGlzLT57RW5naW5lQm9vdHN9OwotICAgICAgICR0aGlzLT57RW5naW5lVGltZX0gPSAwIGlmIG5vdCBkZWZpbmVkICR0aGlzLT57RW5naW5lVGltZX07CisJICAgJHRoaXMtPnsnT3VySWRlbnRpdHknfSB8fD0gJyc7CisJICAgJHRoaXMtPnsnVGhlaXJJZGVudGl0eSd9IHx8PSAnJzsKKwkgICAkdGhpcy0+eydUaGVpckhvc3RuYW1lJ30gfHw9ICcnOworCSAgICR0aGlzLT57J1RydXN0Q2VydCd9IHx8PSAnJzsKIAotICAgICAgICR0aGlzLT57U2Vzc1B0cn0gPSBTTk1QOjpfbmV3X3YzX3Nlc3Npb24oJHRoaXMtPntWZXJzaW9ufSwKLQkJCQkJCSR0aGlzLT57RGVzdEhvc3R9LAotCQkJCQkJJHRoaXMtPntSZXRyaWVzfSwKLQkJCQkJCSR0aGlzLT57VGltZW91dH0sCi0JCQkJCQkkdGhpcy0+e1NlY05hbWV9LAotCQkJCQkJJHRoaXMtPntTZWNMZXZlbH0sCi0JCQkJCQkkdGhpcy0+e1NlY0VuZ2luZUlkfSwKLQkJCQkJCSR0aGlzLT57Q29udGV4dEVuZ2luZUlkfSwKLQkJCQkJCSR0aGlzLT57Q29udGV4dH0sCi0JCQkJCQkkdGhpcy0+e0F1dGhQcm90b30sCi0JCQkJCQkkdGhpcy0+e0F1dGhQYXNzfSwKLQkJCQkJCSR0aGlzLT57UHJpdlByb3RvfSwKLQkJCQkJCSR0aGlzLT57UHJpdlBhc3N9LAotCQkJCQkJJHRoaXMtPntFbmdpbmVCb290c30sCi0JCQkJCQkkdGhpcy0+e0VuZ2luZVRpbWV9LAotCQkJCQkJJHRoaXMtPntBdXRoTWFzdGVyS2V5fSwKLQkJCQkJCWxlbmd0aCgkdGhpcy0+e0F1dGhNYXN0ZXJLZXl9KSwKLQkJCQkJCSR0aGlzLT57UHJpdk1hc3RlcktleX0sCi0JCQkJCQlsZW5ndGgoJHRoaXMtPntQcml2TWFzdGVyS2V5fSksCi0JCQkJCQkkdGhpcy0+e0F1dGhMb2NhbGl6ZWRLZXl9LAotCQkJCQkJbGVuZ3RoKCR0aGlzLT57QXV0aExvY2FsaXplZEtleX0pLAotCQkJCQkJJHRoaXMtPntQcml2TG9jYWxpemVkS2V5fSwKLQkJCQkJCWxlbmd0aCgkdGhpcy0+e1ByaXZMb2NhbGl6ZWRLZXl9KSwKLQkJCQkJICAgICAgICk7CisJICAgJHRoaXMtPnsnU2VjTGV2ZWwnfSA9ICRTTk1QOjpWM19TRUNfTEVWRUxfTUFQeydhdXRoUHJpdid9OworCisJICAgJHRoaXMtPntTZXNzUHRyfSA9CisJICAgICBTTk1QOjpfbmV3X3R1bm5lbGVkX3Nlc3Npb24oJHRoaXMtPntWZXJzaW9ufSwKKwkJCQkJICR0aGlzLT57RGVzdEhvc3R9LAorCQkJCQkgJHRoaXMtPntSZXRyaWVzfSwKKwkJCQkJICR0aGlzLT57VGltZW91dH0sCisJCQkJCSAkdGhpcy0+e1NlY05hbWV9LAorCQkJCQkgJHRoaXMtPntTZWNMZXZlbH0sCisJCQkJCSAkdGhpcy0+e0NvbnRleHRFbmdpbmVJZH0sCisJCQkJCSAkdGhpcy0+e0NvbnRleHR9LAorCQkJCQkgJHRoaXMtPnsnT3VySWRlbnRpdHknfSwKKwkJCQkJICR0aGlzLT57J1RoZWlySWRlbnRpdHknfSwKKwkJCQkJICR0aGlzLT57J1RoZWlySG9zdG5hbWUnfSwKKwkJCQkJICR0aGlzLT57J1RydXN0Q2VydCd9LAorCQkJCQkpOworCisKKyAgICAgICB9IGVsc2UgeworCSAgICMgVVNNIG9yIHNvbWUgb3RoZXIgaW50ZXJuYWwgc2VjdXJpdHkgcHJvdG9jb2wKKworCSAgICMgVVNNIHNwZWNpZmljIHBhcmFtZXRlcnM6CisJICAgJHRoaXMtPntBdXRoUHJvdG99IHx8PSAnREVGQVVMVCc7ICMgdXNlIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdAorCSAgICR0aGlzLT57QXV0aFBhc3N9IHx8PQorCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKKwkJCQkJCQkgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9BVVRIUEFTU1BIUkFTRSgpKSB8fAorCQkJCQkJCSAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAorCQkJCQkJCQkJCQkJCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSgpKSB8fCAnJzsKKworCSAgICR0aGlzLT57QXV0aE1hc3RlcktleX0gfHw9ICcnOworCSAgICR0aGlzLT57UHJpdk1hc3RlcktleX0gfHw9ICcnOworCSAgICR0aGlzLT57QXV0aExvY2FsaXplZEtleX0gfHw9ICcnOworCSAgICR0aGlzLT57UHJpdkxvY2FsaXplZEtleX0gfHw9ICcnOworCisJICAgJHRoaXMtPntQcml2UHJvdG99IHx8PSAnREVGQVVMVCc7ICMgdXNlIHRoZSBsaWJyYXJ5J3MgZGVmYXVsdAorCSAgICR0aGlzLT57UHJpdlBhc3N9IHx8PQorCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6bmV0c25tcF9kc19nZXRfc3RyaW5nKE5ldFNOTVA6OmRlZmF1bHRfc3RvcmU6Ok5FVFNOTVBfRFNfTElCUkFSWV9JRCgpLCAKKwkJCQkJCQkgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpORVRTTk1QX0RTX0xJQl9QUklWUEFTU1BIUkFTRSgpKSB8fAorCQkJCQkJCSAgICAgICBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlOjpuZXRzbm1wX2RzX2dldF9zdHJpbmcoTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJSQVJZX0lEKCksIAorCQkJCQkJCQkJCQkJCSAgICAgTmV0U05NUDo6ZGVmYXVsdF9zdG9yZTo6TkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSgpKSB8fCAnJzsKKwkgICAkdGhpcy0+e0VuZ2luZUJvb3RzfSA9IDAgaWYgbm90IGRlZmluZWQgJHRoaXMtPntFbmdpbmVCb290c307CisJICAgJHRoaXMtPntFbmdpbmVUaW1lfSA9IDAgaWYgbm90IGRlZmluZWQgJHRoaXMtPntFbmdpbmVUaW1lfTsKKworCSAgICR0aGlzLT57U2Vzc1B0cn0gPQorCSAgICAgU05NUDo6X25ld192M19zZXNzaW9uKCR0aGlzLT57VmVyc2lvbn0sCisJCQkJICAgJHRoaXMtPntEZXN0SG9zdH0sCisJCQkJICAgJHRoaXMtPntSZXRyaWVzfSwKKwkJCQkgICAkdGhpcy0+e1RpbWVvdXR9LAorCQkJCSAgICR0aGlzLT57U2VjTmFtZX0sCisJCQkJICAgJHRoaXMtPntTZWNMZXZlbH0sCisJCQkJICAgJHRoaXMtPntTZWNFbmdpbmVJZH0sCisJCQkJICAgJHRoaXMtPntDb250ZXh0RW5naW5lSWR9LAorCQkJCSAgICR0aGlzLT57Q29udGV4dH0sCisJCQkJICAgJHRoaXMtPntBdXRoUHJvdG99LAorCQkJCSAgICR0aGlzLT57QXV0aFBhc3N9LAorCQkJCSAgICR0aGlzLT57UHJpdlByb3RvfSwKKwkJCQkgICAkdGhpcy0+e1ByaXZQYXNzfSwKKwkJCQkgICAkdGhpcy0+e0VuZ2luZUJvb3RzfSwKKwkJCQkgICAkdGhpcy0+e0VuZ2luZVRpbWV9LAorCQkJCSAgICR0aGlzLT57QXV0aE1hc3RlcktleX0sCisJCQkJICAgbGVuZ3RoKCR0aGlzLT57QXV0aE1hc3RlcktleX0pLAorCQkJCSAgICR0aGlzLT57UHJpdk1hc3RlcktleX0sCisJCQkJICAgbGVuZ3RoKCR0aGlzLT57UHJpdk1hc3RlcktleX0pLAorCQkJCSAgICR0aGlzLT57QXV0aExvY2FsaXplZEtleX0sCisJCQkJICAgbGVuZ3RoKCR0aGlzLT57QXV0aExvY2FsaXplZEtleX0pLAorCQkJCSAgICR0aGlzLT57UHJpdkxvY2FsaXplZEtleX0sCisJCQkJICAgbGVuZ3RoKCR0aGlzLT57UHJpdkxvY2FsaXplZEtleX0pLAorCQkJCSAgKTsKKyAgICAgICB9CiAgICB9CiAgICB1bmxlc3MgKCR0aGlzLT57U2Vzc1B0cn0pIHsKICAgICAgICB3YXJuKCJ1bmFibGUgdG8gY3JlYXRlIHNlc3Npb24iKSBpZiAkU05NUDo6dmVyYm9zZTsKQEAgLTcxNCw3ICs3NjYsNyBAQAogCSAgICBpZiAoJHBhcnNlX2luZGV4ZXMpIHsKIAkJIyBnZXQgaW5kZXhlcwogCQlteSBAaW5kZXhlcyA9Ci0JCSAgQHskU05NUDo6TUlCeyR0ZXh0bm9kZX17J2NoaWxkcmVuJ31bMF17J2luZGV4ZXMnfSB8fCBbXSB9OworCQkgIEB7JFNOTVA6Ok1JQnskdGV4dG5vZGV9eydjaGlsZHJlbid9WzBdeydpbmRleGVzJ30gfHwgW119OwogCQkjIHF1aWNrIHRyYW5zbGF0ZSBpbnRvIGEgaGFzaAogCQltYXAgeyAkaW5kZXhlc3skX30gPSAxOyB9IEBpbmRleGVzOwogCSAgICB9CkBAIC0xMzY3LDYgKzE0MTksNyBAQAogICAgICBwYXJlbnQgPT4gMCwgICAjIHBhcmVudCBub2RlCiAgICAgIGNoaWxkcmVuID0+IDAsICMgYXJyYXkgcmVmZXJlbmNlIG9mIGNoaWxkcmVuIG5vZGVzCiAgICAgIGluZGV4ZXMgPT4gMCwgICMgcmV0dXJucyBhcnJheSBvZiBjb2x1bW4gbGFiZWxzCisgICAgIGltcGxpZWQgPT4gMCwgICMgYm9vbGVhbjogaXMgdGhlIGxhc3QgaW5kZXggSU1QTElFRAogICAgICB2YXJiaW5kcyA9PiAwLCAjIHJldHVybnMgYXJyYXkgb2YgdHJhcC9ub3RpZmljYXRpb24gdmFyYmluZHMKICAgICAgbmV4dE5vZGUgPT4gMCwgIyBuZXh0IGxleGljbyBub2RlIChCVUchIGRvZXMgbm90IHJldHVybiBpbiBsZXhpY28gb3JkZXIpCiAgICAgIHR5cGUgPT4gMCwgICAgICMgcmV0dXJucyBzaW1wbGUgdHlwZSAoc2VlIGdldFR5cGUgZm9yIHZhbHVlcykKQEAgLTE1MDcsNzcgKzE1NjAsMTQ4IEBACiAKIFRoZSBmb2xsb3dpbmcgYXJndW1lbnRzIG1heSBiZSBwYXNzZWQgdG8gbmV3IGFzIGEgaGFzaC4KIAorPWhlYWQyIEJhc2ljIE9wdGlvbnMKKwogPW92ZXIgNAogCiA9aXRlbSBEZXN0SG9zdAogCi1kZWZhdWx0ICdsb2NhbGhvc3QnLCBob3N0bmFtZSBvciBpcCBhZGRyIG9mIFNOTVAgYWdlbnQKK0hvc3RuYW1lIG9yIElQIGFkZHJlc3Mgb2YgdGhlIFNOTVAgYWdlbnQgeW91IHdhbnQgdG8gdGFsayB0by4KK1NwZWNpZmllZCBpbiBOZXQtU05NUCBmb3JtYXR0ZWQgYWdlbnQgYWRkcmVzc2VzLiAgVGhlc2UgYWRkcmVzc2VzCit0eXBpY2FsbHkgbG9vayBsaWtlIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogCi09aXRlbSBDb21tdW5pdHkKKyAgbG9jYWxob3N0CisgIHRjcDpsb2NhbGhvc3QKKyAgdGxzOmxvY2FsaG9zdAorICB0bHM6bG9jYWxob3N0Ojk4NzYKKyAgdWRwNjpbOjoxXTo5ODc2CisgIHVuaXg6L3NvbWUvcGF0aC90by9maWxlL3NvY2tldAogCi1kZWZhdWx0ICdwdWJsaWMnLCBTTk1QIGNvbW11bml0eSBzdHJpbmcgKHVzZWQgZm9yIGJvdGggUi9XKQorRGVmYXVsdHMgdG8gJ2xvY2FsaG9zdCcuCiAKID1pdGVtIFZlcnNpb24KIAotZGVmYXVsdCB0YWtlbiBmcm9tIGxpYnJhcnkgY29uZmlndXJhdGlvbiAtIHByb2JhYmx5IDMgWzEsIDIgKHNhbWUgYXMgMmMpLCAyYywgM10KK1NOTVAgdmVyc2lvbiB0byB1c2UuCiAKLT1pdGVtIFJlbW90ZVBvcnQKLQotZGVmYXVsdCAnMTYxJywgYWxsb3cgcmVtb3RlIFVEUCBwb3J0IHRvIGJlIG92ZXJyaWRlbgorVGhlIGRlZmF1bHQgaXMgdGFrZW4gZnJvbSBsaWJyYXJ5IGNvbmZpZ3VyYXRpb24gLSBwcm9iYWJseSAzIFsxLCAyCisoc2FtZSBhcyAyYyksIDJjLCAzXS4KIAogPWl0ZW0gVGltZW91dAogCi1kZWZhdWx0ICcxMDAwMDAwJywgbWljcm8tc2Vjb25kcyBiZWZvcmUgcmV0cnkKK1RoZSBudW1iZXIgb2YgbWljcm8tc2Vjb25kcyB0byB3YWl0IGJlZm9yZSByZXNlbmRpbmcgYSByZXF1ZXN0LgorCitUaGUgZGVmYXVsdCBpcyAnMTAwMDAwMCcKIAogPWl0ZW0gUmV0cmllcwogCi1kZWZhdWx0ICc1JywgcmV0cmllcyBiZWZvcmUgZmFpbHVyZQorVGhlIG51bWJlciBvZiB0aW1lcyB0byByZXRyeSBhIHJlcXVlc3QuCisKK1RoZSBkZWZhdWx0IGlzICc1JwogCiA9aXRlbSBSZXRyeU5vU3VjaAogCi1kZWZhdWx0ICcwJywgaWYgZW5hYmxlZCBOT1NVQ0ggZXJyb3JzIGluICdnZXQnIHBkdXMgd2lsbAorSWYgZW5hYmxlZCBOT1NVQ0ggZXJyb3JzIGluICdnZXQnIHBkdXMgd2lsbAogYmUgcmVwYWlyZWQsIHJlbW92aW5nIHRoZSB2YXJiaW5kIGluIGVycm9yLCBhbmQgcmVzZW50IC0KIHVuZGVmIHdpbGwgYmUgcmV0dXJuZWQgZm9yIGFsbCBOT1NVQ0ggdmFyYmluZHMsIHdoZW4gc2V0CiB0byAnMCcgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFuZCB0aGUgZW50aXJlIGdldCByZXF1ZXN0CiB3aWxsIGZhaWwgb24gYW55IE5PU1VDSCBlcnJvciAoYXBwbGllcyB0byB2MSBvbmx5KQogCitUaGUgZGVmYXVsdCBpcyAnMCcuCisKKz1iYWNrCisKKz1oZWFkMiBTTk1QdjMvVExTIE9wdGlvbnMKKworPW92ZXIKKworPWl0ZW0gT3VySWRlbnRpdHkKKworT3VyIFguNTA5IGlkZW50aXR5IHRvIHVzZSwgd2hpY2ggc2hvdWxkIGVpdGhlciBiZSBhIGZpbmdlcnByaW50IG9yIHRoZQorZmlsZW5hbWUgdGhhdCBob2xkcyB0aGUgY2VydGlmaWNhdGUuCisKKz1pdGVtIFRoZWlySWRlbnRpdHkKKworVGhlIHJlbW90ZSBzZXJ2ZXIncyBpZGVudGl0eSB0byBjb25uZWN0IHRvLCBzcGVjaWZpZWQgYXMgZWlodGVyIGEKK2ZpbmdlcnByaW50IG9yIGEgZmlsZSBuYW1lLiAgRWl0aGVyIHRoaXMgbXVzdCBiZSBzcGVjaWZpZWQsIG9yIHRoZQoraG9zdG5hbWUgYmVsb3cgYWxvbmcgd2l0aCBhIHRydXN0IGFuY2hvci4KKworPWl0ZW0gVGhlaXJIb3N0bmFtZQorCitUaGUgcmVtb3RlIHNlcnZlcidzIGhvc3RuYW1lIHRoYXQgaXMgZXhwZWN0ZWQuICBJZiB0aGVpciBjZXJ0aWZpY2F0ZQord2FzIHNpZ25lZCBieSBhIENBIHRoZW4gdGhlaXIgaG9zdG5hbWUgcHJlc2VudGVkIGluIHRoZSBjZXJ0aWZpY2F0ZQorbXVzdCBtYXRjaCB0aGlzIHZhbHVlIG9yIHRoZSBjb25uZWN0aW9uIGZhaWxzIHRvIGJlIGVzdGFibGlzaGVkICh0bworYXZvaWQgbWFuLWluLXRoZS1taWRkbGUgYXR0YWNrcykuCisKKz1pdGVtIFRydXN0Q2VydAorCitBIHRydXN0ZWQgY2VydGlmaWNhdGUgdG8gdXNlIGEgdHJ1c3QgYW5jaG9yIChsaWtlIGEgQ0EgY2VydGlmaWNhdGUpCitmb3IgdmVyaWZ5aW5nIGEgcmVtb3RlIHNlcnZlcidzIGNlcnRpZmljYXRlLiAgSWYgYSBDQSBjZXJ0aWZpY2F0ZSBpcwordXNlZCB0byB2YWxpZGF0ZSBhIGNlcnRpZmljYXRlIHRoZW4gdGhlIFRoZWlySG9zdG5hbWUgcGFyYW1ldGVyIG11c3QKK2Fsc28gYmUgc3BlY2lmaWVkIHRvIGVuc3VyZSB0aGVpciBwcmVzZW50ZSBob3N0bmFtZSBpbiB0aGUgY2VydGlmaWNhdGUKK21hdGNoZXMuCisKKz1iYWNrCisKKz1oZWFkMiBTTk1QdjMvVVNNIE9wdGlvbnMKKworPW92ZXIKKwogPWl0ZW0gU2VjTmFtZQogCi1kZWZhdWx0ICdpbml0aWFsJywgc2VjdXJpdHkgbmFtZSAodjMpCitUaGUgU05NUHYzIHNlY3VyaXR5IG5hbWUgdG8gdXNlIChtb3N0IGZvciBTTk1QdjMgd2l0aCBVU00pLgorCitUaGUgZGVmYXVsdCBpcyAnaW5pdGlhbCcuCiAKID1pdGVtIFNlY0xldmVsCiAKLWRlZmF1bHQgJ25vQXV0aE5vUHJpdicsIHNlY3VyaXR5IGxldmVsIFtub0F1dGhOb1ByaXYsCi1hdXRoTm9Qcml2LCBhdXRoUHJpdl0gKHYzKQorVGhlIFNOTVB2MyBzZWN1cml0eSBsZXZlbCB0byB1c2UgW25vQXV0aE5vUHJpdiwgYXV0aE5vUHJpdiwgYXV0aFByaXZdICh2MykKKworVGhlIGRlZmF1bHQgaXMgJ25vQXV0aE5vUHJpdicuCiAKID1pdGVtIFNlY0VuZ2luZUlkCiAKLWRlZmF1bHQgPG5vbmU+LCBzZWN1cml0eSBlbmdpbmVJRCwgd2lsbCBiZSBwcm9iZWQgaWYgbm90CitUaGUgU05NUHYzIHNlY3VyaXR5IGVuZ2luZUlEIHRvIHVzZSAoaWYgdGhlIHNubXB2MyBzZWN1cml0eSBtb2RlbAorbmVlZHMgaXQ7IGZvciBleGFtcGxlIFVTTSkuCisKK1RoZSBkZWZhdWx0IGlzIDxub25lPiwgc2VjdXJpdHkgZW5naW5lSUQgYW5kIGl0IHdpbGwgYmUgcHJvYmVkIGlmIG5vdAogc3VwcGxpZWQgKHYzKQogCiA9aXRlbSBDb250ZXh0RW5naW5lSWQKIAotZGVmYXVsdCA8U2VjRW5naW5lSWQ+LCBjb250ZXh0IGVuZ2luZUlELCB3aWxsIGJlCi1wcm9iZWQgaWYgbm90IHN1cHBsaWVkICh2MykKK1RoZSBTTk1QdjMgY29udGV4dCBlbmdpbmVJRCB0byB1c2UuCisKK1RoZSBkZWZhdWx0IGlzIHRoZSA8bm9uZT4gYW5kIHdpbGwgYmUgc2V0IGVpdGhlciB0byB0aGUgU2VjRW5naW5lSWQKK3ZhbHVlIGlmIHNldCBvciBkaXNjb3ZlcmVkIG9yIHdpbGwgYmUgZGlzY292ZXJlZCBpbiBvdGhlciB3YXlzIGlmCit1c2luZyBUTFMgKFJGQzUzNDMgYmFzZWQgZGlzY292ZXJ5KS4KIAogPWl0ZW0gQ29udGV4dAogCi1kZWZhdWx0ICcnLCBjb250ZXh0IG5hbWUgKHYzKQorVGhlIFNOTVB2MyBjb250ZXh0IG5hbWUgdG8gdXNlLgorCitUaGUgZGVmYXVsdCBpcyAnJyAoYW4gZW1wdHkgc3RyaW5nKQogCiA9aXRlbSBBdXRoUHJvdG8KIAotZGVmYXVsdCAnTUQ1JywgYXV0aGVudGljYXRpb24gcHJvdG9jb2wgW01ENSwgU0hBXSAodjMpCitUaGUgU05NUHYzL1VTTSBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCB0byB1c2UgW01ENSwgU0hBXS4KKworVGhlIGRlZmF1bHQgaXMgJ01ENScuCiAKID1pdGVtIEF1dGhQYXNzCiAKK1RoZSBTTk1QdjMvVVNNIGF1dGhlbnRpY2F0aW9uIHBhc3NwaHJhc2UgdG8gdXNlLgorCiBkZWZhdWx0IDxub25lPiwgYXV0aGVudGljYXRpb24gcGFzc3BocmFzZQogCiA9aXRlbSBQcml2UHJvdG8KIAotZGVmYXVsdCAnREVTJywgcHJpdmFjeSBwcm90b2NvbCBbREVTLCBBRVNdICh2MykKK1RoZSBTTk1QdjMvVVNNIHByaXZhY3kgcHJvdG9jb2wgdG8gdXNlIFtERVMsIEFFU10uCisKK1RoZSBkZWZhdWx0IGlzICdERVMnLgogCiA9aXRlbSBQcml2UGFzcwogCitUaGUgU05NUHYzL1VTTSBwcml2YWN5IHBhc3NwaHJhc2UgdG8gdXNlLgorCiBkZWZhdWx0IDxub25lPiwgcHJpdmFjeSBwYXNzcGhyYXNlICh2MykKIAogPWl0ZW0gQXV0aE1hc3RlcktleQpAQCAtMTU5MSw2ICsxNzE1LDIwIEBACiBEaXJlY3RseSBzcGVjaWZpZWQgU05NUHYzIFVTTSB1c2VyIGtleXMgKHVzZWQgaWYgeW91IHdhbnQgdG8gc3BlY2lmeQogdGhlIGtleXMgaW5zdGVhZCBvZiBkZXJpdmluZyB0aGVtIGZyb20gYSBwYXNzd29yZCBhcyBhYm92ZSkuCiAKKz1iYWNrCisKKz1oZWFkMiBTTk1QdjEgYW5kIFNOTVB2MmMgT3B0aW9ucworCis9aXRlbSBDb21tdW5pdHkKKworRm9yIFNOTVB2MSBhbmQgU05NUHYyYywgdGhlIGNsZWFyLXRleHQgY29tbXVuaXR5IG5hbWUgdG8gdXNlLgorCitUaGUgZGVmYXVsdCBpcyAncHVibGljJy4KKworPWhlYWQyIE90aGVyIENvbmZpZ3VyYXRpb24gT3B0aW9ucworCis9b3ZlcgorCiA9aXRlbSBWYXJGb3JtYXRzCiAKIGRlZmF1bHQgJ3VuZGVmJywgdXNlZCBieSAnZmdldFtuZXh0XScsIGhvbGRzIGFuIGhhc2gKQEAgLTE2ODQsNiArMTgyMiwxMSBAQAogCiBpbnRlcm5hbCBmaWVsZCB1c2VkIHRvIGNhY2hlIGEgY3JlYXRlZCBzZXNzaW9uIHN0cnVjdHVyZQogCis9aXRlbSBSZW1vdGVQb3J0CisKK09ic29sZXRlLiAgUGxlYXNlIHVzZSB0aGUgRGVzdEhvc3Qgc3BlY2lmaWVyIHRvIGluZGljYXRlIHRoZSBob3N0bmFtZQorYW5kIHBvcnQgY29tYmluYXRpb24gaW5zdGVhZCBvZiB0aGlzIHBhcmFtZXQuCisKID1iYWNrCiAKID1oZWFkMiBTTk1QOjpTZXNzaW9uIG1ldGhvZHMKQEAgLTE4ODIsNyArMjAyNSw3IEBACiAKIE5vdGUgMjogY2FsbGJhY2sgc3VwcG9ydCBpcyBvbmx5IGF2YWlsYWJsZSBpbiB0aGUgU05NUCBtb2R1bGUgdmVyc2lvbgogNS4wNCBhbmQgYWJvdmUuICBUbyB0ZXN0IGZvciB0aGlzIGluIGNvZGUgaW50ZW5kaW5nIHRvIHN1cHBvcnQgYm90aAotdmVyc2lvbnMgcHJpb3IgdG8gNS4wNCBhbmQgYW5kIDUuMDQgYW5kIHVwLCB0aGUgZm9sbG93aW5nIHNob3VsZCB3b3JrOgordmVyc2lvbnMgcHJpb3IgdG8gNS4wNCBhbmQgNS4wNCBhbmQgdXAsIHRoZSBmb2xsb3dpbmcgc2hvdWxkIHdvcms6CiAKICAgaWYgKCRyZXNwb25zZSA9ICRzZXNzLT5nZXR0YWJsZSgnaWZUYWJsZScsIGNhbGxiYWNrID0+IFwmbXlfc3ViKSkgewogICAgICAgIyBnb3QgYSByZXNwb25zZSwgZ2V0dGFibGUgZG9lc24ndCBzdXBwb3J0IGNhbGxiYWNrCkBAIC0yMzE1LDYgKzI0NTgsMTQgQEAKIAogcmV0dXJucyB0aGUgUkVGRVJFTkNFIGNsYXVzZQogCis9aXRlbSBpbmRleGVzCisKK3JldHVybnMgdGhlIG9iamVjdHMgaW4gdGhlIElOREVYIGNsYXVzZQorCis9aXRlbSBpbXBsaWVkCisKK3JldHVybnMgdHJ1ZSBpZiB0aGUgbGFzdCBvYmplY3QgaW4gdGhlIElOREVYIGlzIElNUExJRUQKKwogPWJhY2sKIAogPWhlYWQxIE1JQiBGdW5jdGlvbnMKZGlmZiAtLWdpdCBhL3BlcmwvU05NUC9TTk1QLnhzIGIvcGVybC9TTk1QL1NOTVAueHMKaW5kZXggOTAyNDBhMS4uMmE3MzRlOCAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL1NOTVAueHMKKysrIGIvcGVybC9TTk1QL1NOTVAueHMKQEAgLTU5LDE2ICs1OSw2IEBACiAjZGVmaW5lIEdfVk9JRCBHX0RJU0NBUkQKICNlbmRpZgogCi0jaWZkZWYgV0lOMzIKLSNkZWZpbmUgU09DS19TVEFSVFVQIHdpbnNvY2tfc3RhcnR1cCgpCi0jZGVmaW5lIFNPQ0tfQ0xFQU5VUCB3aW5zb2NrX2NsZWFudXAoKQotI2RlZmluZSBzdHJjYXNlY21wIF9zdHJpY21wCi0jZGVmaW5lIHN0cm5jYXNlY21wIF9zdHJuaWNtcAotI2Vsc2UKLSNkZWZpbmUgU09DS19TVEFSVFVQCi0jZGVmaW5lIFNPQ0tfQ0xFQU5VUAotI2VuZGlmCi0KICNpbmNsdWRlICJwZXJsc25tcC5oIgogCiAjZGVmaW5lIFNVQ0NFU1MgMQpAQCAtNzYsNiArNjYsOSBAQAogCiAjZGVmaW5lIFpFUk9fQlVUX1RSVUUgIjAgYnV0IHRydWUiCiAKKyNkZWZpbmUgU05NUF9BUElfVFJBRElUSU9OQUwgMAorI2RlZmluZSBTTk1QX0FQSV9TSU5HTEUgMQorCiAjZGVmaW5lIFZBUkJJTkRfVEFHX0YgMAogI2RlZmluZSBWQVJCSU5EX0lJRF9GIDEKICNkZWZpbmUgVkFSQklORF9WQUxfRiAyCkBAIC05NSw2ICs4OCw5IEBACiAvKiBJbnRlcm5hbCBmbGFnIHRvIGRldGVybWluZSBzbm1wX21haW5fbG9vcCgpIHNob3VsZCByZXR1cm4gYWZ0ZXIgY2FsbGJhY2sgKi8KIHN0YXRpYyBpbnQgbWFpbmxvb3BfZmluaXNoID0gMDsKIAorLyogSW50ZXJuYWwgZmxhZyB0byBkZXRlcm1pbmUgd2hpY2ggQVBJIHdlJ3JlIHVzaW5nICovCitzdGF0aWMgaW50IGFwaV9tb2RlID0gU05NUF9BUElfVFJBRElUSU9OQUw7CisKIC8qIHRoZXNlIHNob3VsZCBiZSBwYXJ0IG9mIHRyYW5zZm9ybV9vaWRzLmggPyAqLwogI2RlZmluZSBVU01fQVVUSF9QUk9UT19NRDVfTEVOIDEwCiAjZGVmaW5lIFVTTV9BVVRIX1BST1RPX1NIQV9MRU4gMTAKQEAgLTExMiw3ICsxMDgsNiBAQAogCiBzdGF0aWMgdm9pZCBfX3JlY2FsY190aW1lb3V0IF8oKHN0cnVjdCB0aW1ldmFsKixzdHJ1Y3QgdGltZXZhbCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1ldmFsKixzdHJ1Y3QgdGltZXZhbCosIGludCogKSk7Ci1zdGF0aWMgaW5fYWRkcl90IF9fcGFyc2VfYWRkcmVzcyBfKChjaGFyKikpOwogc3RhdGljIGludCBfX2lzX251bWVyaWNfb2lkIF8oKGNoYXIqKSk7CiBzdGF0aWMgaW50IF9faXNfbGVhZiBfKChzdHJ1Y3QgdHJlZSopKTsKIHN0YXRpYyBpbnQgX190cmFuc2xhdGVfYXBwbF90eXBlIF8oKGNoYXIqKSk7CkBAIC0xODYsNiArMTgxLDkgQEAKIHN0YXRpYyBpbnQgX2J1bGt3YWxrX2FzeW5jX2NiIF8oKGludCBvcCwgU25tcFNlc3Npb24gKnNzLCBpbnQgcmVxaWQsCiAJCQkJICAgICBuZXRzbm1wX3BkdSAqcGR1LCB2b2lkICpjb250ZXh0X3B0cikpOwogCisvKiBQcm90b3R5cGUgZm9yIGVycm9yIGhhbmRsZXIgKi8KK3ZvaWQgc25tcF9yZXR1cm5fZXJyKCBzdHJ1Y3Qgc25tcF9zZXNzaW9uICpzcywgU1YgKmVycl9zdHIsIFNWICplcnJfbnVtLCBTViAqZXJyX2luZCApOworCiAvKiBTdHJ1Y3R1cmUgdG8gaG9sZCB2YWxpZCBjb250ZXh0IHNlc3Npb25zLiAqLwogc3RydWN0IHZhbGlkX2NvbnRleHRzIHsKICAgIHdhbGtfY29udGV4dAkqKnZhbGlkOwkvKiBBcnJheSBvZiB2YWxpZCB3YWxrX2NvbnRleHQgcG9pbnRlcnMuICAgICovCkBAIC0yMDksNyArMjA3LDYgQEAKIAl9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKIAogY2hhcglfZGVidWd4WzEwMjRdOwkvKiBTcGFjZSB0byBzcHJpbnRmKCkgaW50byAtIHVzZWQgYnkgc3ByaW50X29iamlkKCkuICovCi0jZGVmaW5lIERCRENMKHgpIHgKIAogLyogd3JhcHBlciBhcm91bmQgc25wcmludF9vYmppZCB0byBzbnByaW50X29iamlkIHRvIHJldHVybiB0aGUgcG9pbnRlciAKICAgIGluc3RlYWQgb2YgbGVuZ3RoICovCkBAIC0yMjAsNiArMjE3LDcgQEAKICAgcmV0dXJuIF9kZWJ1Z3g7CiB9CiAgCisjZGVmaW5lIERCRENMKHgpIHgKICNlbHNlCS8qIERFQlVHR0lORyAqLwogI2RlZmluZSBEQkRDTCh4KSAKICNkZWZpbmUgREJPVVQKQEAgLTI0NCwxNSArMjQyLDE2IEBACiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGhhdmVfaW5pdGVkID0gMTsKIAotICAgICAgICBzbm1wX3NldF9xdWlja19wcmludCgxKTsKKyAgICAgICAgU09DS19TVEFSVFVQOworCisgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9RVUlDS19QUklOVCwgMSk7CiAgICAgICAgIGluaXRfc25tcChhcHBuYW1lKTsKICAgICAKICAgICAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0RPTlRfQlJFQUtET1dOX09JRFMsIDEpOwogICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9QUklOVF9TVUZGSVhfT05MWSwgMSk7CiAJbmV0c25tcF9kc19zZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfT0lEX09VVFBVVF9GT1JNQVQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9PSURfT1VUUFVUX1NVRkZJWCk7Ci0gICAgICAgIFNPQ0tfU1RBUlRVUDsKLSAgICAKICAgICB9CiAKIHN0YXRpYyB2b2lkCkBAIC0yOTUsMjYgKzI5NCw2IEBACiAgICB9CiB9CiAKLXN0YXRpYyBpbl9hZGRyX3QKLV9fcGFyc2VfYWRkcmVzcyhhZGRyZXNzKQotY2hhciAqYWRkcmVzczsKLXsKLSAgICBpbl9hZGRyX3QgYWRkcjsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gc2FkZHI7Ci0gICAgc3RydWN0IGhvc3RlbnQgKmhwOwotCi0gICAgaWYgKChhZGRyID0gaW5ldF9hZGRyKGFkZHJlc3MpKSAhPSAtMSkKLQlyZXR1cm4gYWRkcjsKLSAgICBocCA9IGdldGhvc3RieW5hbWUoYWRkcmVzcyk7Ci0gICAgaWYgKGhwID09IE5VTEwpewotICAgICAgICByZXR1cm4gKC0xKTsgLyogZXJyb3IgdmFsdWUgKi8KLSAgICB9IGVsc2UgewotCW1lbWNweSgmc2FkZHIuc2luX2FkZHIsIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7Ci0JcmV0dXJuIHNhZGRyLnNpbl9hZGRyLnNfYWRkcjsKLSAgICB9Ci0KLX0KLQogc3RhdGljIGludAogX19pc19udW1lcmljX29pZCAob2lkc3RyKQogY2hhciogb2lkc3RyOwpAQCAtNTg1LDcgKzU2NCw3IEBACiAgICBpbnQgaTsKICAgIGJ1ZlswXSA9ICdcMCc7CiAgICBmb3IgKGk9MDsgaSA8IGxlbjsgaSsrKSB7Ci0Jc3ByaW50ZihidWYsIi4lbHUiLCpvYmppZCsrKTsKKwlzcHJpbnRmKGJ1ZiwiLiUiIE5FVFNOTVBfUFJJbyAidSIsKm9iamlkKyspOwogCWJ1ZiArPSBzdHJsZW4oYnVmKTsKICAgIH0KICAgIHJldHVybiBTVUNDRVNTOwpAQCAtNjE4LDcgKzU5Nyw3IEBACiAgICBjcCA9IGJ1ZjsKICAgIHdoaWxlICgqYnVmKSB7CiAgICAgICBpZiAoKmJ1ZisrID09ICcuJykgewotICAgICAgICAgc3NjYW5mKGNwLCAiJWx1Iiwgb2JqaWQrKyk7CisgICAgICAgICBzc2NhbmYoY3AsICIlIiBORVRTTk1QX1BSSW8gInUiLCBvYmppZCsrKTsKICAgICAgICAgIC8qICpvYmppZCsrID0gYXRvaShjcCk7ICovCiAgICAgICAgICAoKmxlbikrKzsKICAgICAgICAgIGNwID0gYnVmOwpAQCAtNjI4LDcgKzYwNyw3IEBACiAgICAgICAgICB9CiAgICAgICB9CiAgICB9Ci0gICBzc2NhbmYoY3AsICIlbHUiLCBvYmppZCsrKTsKKyAgIHNzY2FuZihjcCwgIiUiIE5FVFNOTVBfUFJJbyAidSIsIG9iamlkKyspOwogICAgLyogKm9iamlkKysgPSBhdG9pKGNwKTsgKi8KICAgICgqbGVuKSsrOwogICAgcmV0dXJuIFNVQ0NFU1M7CkBAIC03NzksMTEgKzc1OCwxMyBAQAogICAgICAgICAgICBpY3AgPSBsY3A7CiAgICAgICAgIH0KICAgICAgIH0KLSAgICAgIGlmICghZm91bmRfbGFiZWwgJiYgaXNhbHBoYSgoaW50KSpsY3ApKSBmb3VuZF9sYWJlbCA9IDE7CisgICAgICBpZiAoIWZvdW5kX2xhYmVsICYmIGlzYWxwaGEoKHVuc2lnbmVkIGNoYXIpKmxjcCkpIGZvdW5kX2xhYmVsID0gMTsKICAgICAgIGxjcC0tOwogICAgfQogCi0gICBpZiAoIWZvdW5kX2xhYmVsIHx8ICghaXNkaWdpdCgoaW50KSooaWNwKzEpKSAmJiAoZmxhZyAmIEZBSUxfT05fTlVMTF9JSUQpKSkKKyAgIGlmICghZm91bmRfbGFiZWwKKyAgICAgICB8fCAoKGljcCArIDEgPj0gbmFtZSArIGxlbiB8fCAhaXNkaWdpdCgodW5zaWduZWQgY2hhcikqKGljcCsxKSkpCisgICAgICAgICAgICYmIChmbGFnICYgRkFJTF9PTl9OVUxMX0lJRCkpKQogICAgICAgcmV0dXJuKEZBSUxVUkUpOwogCiAgICBpZiAoZmxhZyAmIE5PTl9MRUFGX05BTUUpIHsgLyogZG9udCBrbm93IHdoZXJlIHRvIHN0YXJ0IGluc3RhbmNlIGlkICovCkBAIC05NjEsMTYgKzk0MiwxNiBAQAogCiAgICBpZiAoIXNvaWRfc3RyIHx8ICEqc29pZF9zdHIpIHJldHVybiBTVUNDRVNTOy8qIHN1Y2Nlc3NmdWxseSBhZGRlZCBub3RoaW5nICovCiAgICBpZiAoKnNvaWRfc3RyID09ICcuJykgc29pZF9zdHIrKzsKLSAgIHNvaWRfYnVmID0gc3RyZHVwKHNvaWRfc3RyKTsKKyAgIHNvaWRfYnVmID0gbmV0c25tcF9zdHJkdXAoc29pZF9zdHIpOwogICAgaWYgKCFzb2lkX2J1ZikKICAgICAgICByZXR1cm4gRkFJTFVSRTsKICAgIGNwID0gc3RydG9rX3Ioc29pZF9idWYsIi4iLCZzdCk7CiAgICB3aGlsZSAoY3ApIHsKLSAgICAgc3NjYW5mKGNwLCAiJWx1IiwgJihkb2lkX2FyclsoKmRvaWRfYXJyX2xlbikrK10pKTsKKyAgICAgc3NjYW5mKGNwLCAiJSIgTkVUU05NUF9QUklvICJ1IiwgJihkb2lkX2FyclsoKmRvaWRfYXJyX2xlbikrK10pKTsKICAgICAgLyogZG9pZF9hcnJbKCpkb2lkX2Fycl9sZW4pKytdID0gIGF0b2koY3ApOyAqLwogICAgICBjcCA9IHN0cnRva19yKE5VTEwsIi4iLCZzdCk7CiAgICB9Ci0gICBmcmVlKHNvaWRfYnVmKTsKKyAgIG5ldHNubXBfZnJlZShzb2lkX2J1Zik7CiAgICByZXR1cm4oU1VDQ0VTUyk7CiB9CiAKQEAgLTk5MSwyNyArOTcyLDI2IEBACiAgICAgaW50IHJldCA9IFNVQ0NFU1M7CiAKICAgICBpZiAocGR1LT52YXJpYWJsZXMgPT0gTlVMTCl7Ci0JcGR1LT52YXJpYWJsZXMgPSB2YXJzID0KLSAgICAgICAgICAgKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqKWNhbGxvYygxLHNpemVvZihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpKTsKKwlwZHUtPnZhcmlhYmxlcyA9IHZhcnMKKyAgICAgICAgICAgID0gbmV0c25tcF9jYWxsb2MoMSwgc2l6ZW9mKG5ldHNubXBfdmFyaWFibGVfbGlzdCkpOwogICAgIH0gZWxzZSB7CiAJZm9yKHZhcnMgPSBwZHUtPnZhcmlhYmxlczsKICAgICAgICAgICAgIHZhcnMtPm5leHRfdmFyaWFibGU7CiAgICAgICAgICAgICB2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZSkKIAkgICAgLypFWElUKi87Ci0JdmFycy0+bmV4dF92YXJpYWJsZSA9Ci0gICAgICAgICAgIChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKiljYWxsb2MoMSxzaXplb2YobmV0c25tcF92YXJpYWJsZV9saXN0KSk7CisJdmFycy0+bmV4dF92YXJpYWJsZSA9IG5ldHNubXBfY2FsbG9jKDEsIHNpemVvZihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpKTsKIAl2YXJzID0gdmFycy0+bmV4dF92YXJpYWJsZTsKICAgICB9CiAKICAgICB2YXJzLT5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKLSAgICB2YXJzLT5uYW1lID0gKG9pZCAqKW1hbGxvYyhuYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKKyAgICB2YXJzLT5uYW1lID0gbmV0c25tcF9tYWxsb2MobmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CiAgICAgbWVtY3B5KChjaGFyICopdmFycy0+bmFtZSwgKGNoYXIgKiluYW1lLCBuYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKICAgICB2YXJzLT5uYW1lX2xlbmd0aCA9IG5hbWVfbGVuZ3RoOwogICAgIHN3aXRjaCAodHlwZSkgewogICAgICAgY2FzZSBUWVBFX0lOVEVHRVI6CiAgICAgICBjYXNlIFRZUEVfSU5URUdFUjMyOgogICAgICAgICB2YXJzLT50eXBlID0gQVNOX0lOVEVHRVI7Ci0gICAgICAgIHZhcnMtPnZhbC5pbnRlZ2VyID0gKGxvbmcgKiltYWxsb2Moc2l6ZW9mKGxvbmcpKTsKKyAgICAgICAgdmFycy0+dmFsLmludGVnZXIgPSBuZXRzbm1wX21hbGxvYyhzaXplb2YobG9uZykpOwogICAgICAgICBpZiAodmFsKQogICAgICAgICAgICAgKih2YXJzLT52YWwuaW50ZWdlcikgPSBzdHJ0b2wodmFsLE5VTEwsMCk7CiAgICAgICAgIGVsc2UgewpAQCAtMTAzNCw3ICsxMDE0LDcgQEAKICAgICAgIGNhc2UgVFlQRV9VSU5URUdFUjoKICAgICAgICAgdmFycy0+dHlwZSA9IEFTTl9VSU5URUdFUjsKIGFzX3VpbnQ6Ci0gICAgICAgIHZhcnMtPnZhbC5pbnRlZ2VyID0gKGxvbmcgKiltYWxsb2Moc2l6ZW9mKGxvbmcpKTsKKyAgICAgICAgdmFycy0+dmFsLmludGVnZXIgPSBuZXRzbm1wX21hbGxvYyhzaXplb2YobG9uZykpOwogICAgICAgICBpZiAodmFsKQogICAgICAgICAgICAgc3NjYW5mKHZhbCwiJWx1Iix2YXJzLT52YWwuaW50ZWdlcik7CiAgICAgICAgIGVsc2UgewpAQCAtMTA1NSwyMCArMTAzNSwyMCBAQAogICAgICAgY2FzZSBUWVBFX09QQVFVRToKICAgICAgICAgdmFycy0+dHlwZSA9IEFTTl9PQ1RFVF9TVFI7CiBhc19vY3Q6Ci0gICAgICAgIHZhcnMtPnZhbC5zdHJpbmcgPSAodV9jaGFyICopbWFsbG9jKGxlbik7CisgICAgICAgIHZhcnMtPnZhbC5zdHJpbmcgPSBuZXRzbm1wX21hbGxvYyhsZW4pOwogICAgICAgICB2YXJzLT52YWxfbGVuID0gbGVuOwogICAgICAgICBpZiAodmFsICYmIGxlbikKICAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKXZhcnMtPnZhbC5zdHJpbmcsIHZhbCwgbGVuKTsKICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICByZXQgPSBGQUlMVVJFOwotICAgICAgICAgICAgdmFycy0+dmFsLnN0cmluZyA9ICh1X2NoYXIqKXN0cmR1cCgiIik7CisgICAgICAgICAgICB2YXJzLT52YWwuc3RyaW5nID0gKHVfY2hhciAqKSBuZXRzbm1wX3N0cmR1cCgiIik7CiAgICAgICAgICAgICB2YXJzLT52YWxfbGVuID0gMDsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgICAgY2FzZSBUWVBFX0lQQUREUjoKICAgICAgICAgdmFycy0+dHlwZSA9IEFTTl9JUEFERFJFU1M7Ci0gICAgICAgIHZhcnMtPnZhbC5pbnRlZ2VyID0gKGxvbmcgKiltYWxsb2Moc2l6ZW9mKGluX2FkZHJfdCkpOworICAgICAgICB2YXJzLT52YWwuaW50ZWdlciA9IG5ldHNubXBfbWFsbG9jKHNpemVvZihpbl9hZGRyX3QpKTsKICAgICAgICAgaWYgKHZhbCkKICAgICAgICAgICAgICooKGluX2FkZHJfdCAqKXZhcnMtPnZhbC5pbnRlZ2VyKSA9IGluZXRfYWRkcih2YWwpOwogICAgICAgICBlbHNlIHsKQEAgLTEwODgsNyArMTA2OCw3IEBACiAJICAgIHJldCA9IEZBSUxVUkU7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICB2YXJzLT52YWxfbGVuICo9IHNpemVvZihvaWQpOwotICAgICAgICAgICAgdmFycy0+dmFsLm9iamlkID0gKG9pZCAqKW1hbGxvYyh2YXJzLT52YWxfbGVuKTsKKyAgICAgICAgICAgIHZhcnMtPnZhbC5vYmppZCA9IG5ldHNubXBfbWFsbG9jKHZhcnMtPnZhbF9sZW4pOwogICAgICAgICAgICAgbWVtY3B5KChjaGFyICopdmFycy0+dmFsLm9iamlkLCAoY2hhciAqKW9pZGJ1ZiwgdmFycy0+dmFsX2xlbik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC0xMTIwLDggKzExMDAsMTIgQEAKICAgIGxvbmcgY29tbWFuZCA9IHBkdS0+Y29tbWFuZDsKICAgICpyZXNwb25zZSA9IE5VTEw7CiByZXRyeToKLQotICAgc3RhdHVzID0gc25tcF9zeW5jaF9yZXNwb25zZShzcywgcGR1LCByZXNwb25zZSk7CisJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCXsKKwkJc3RhdHVzID0gc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNzLCBwZHUsIHJlc3BvbnNlKTsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBzbm1wX3N5bmNoX3Jlc3BvbnNlKHNzLCBwZHUsIHJlc3BvbnNlKTsKKwl9OwogCiAgICBpZiAoKCpyZXNwb25zZSA9PSBOVUxMKSAmJiAoc3RhdHVzID09IFNUQVRfU1VDQ0VTUykpIHN0YXR1cyA9IFNUQVRfRVJST1I7CiAKQEAgLTExNTgsMTAgKzExNDIsMTAgQEAKICAgICAgICAgICAgIC8qIGluIFNOTVB2MmMsIFNOTVB2MnUsIFNOTVB2MiosIGFuZCBTTk1QdjMgUERVcyAqLwogICAgICAgICAgICAgY2FzZSBTTk1QX0VSUl9JTkNPTlNJU1RFTlROQU1FOgogICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgIHN2X2NhdHB2KGVycl9zdHJfc3YsCi0gICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopc25tcF9lcnJzdHJpbmcoKCpyZXNwb25zZSktPmVycnN0YXQpKTsKLSAgICAgICAgICAgICAgIHN2X3NldGl2KGVycl9udW1fc3YsICgqcmVzcG9uc2UpLT5lcnJzdGF0KTsKLQkgICAgICAgc3Zfc2V0aXYoZXJyX2luZF9zdiwgKCpyZXNwb25zZSktPmVycmluZGV4KTsKKwkJCQlzdl9jYXRwdihlcnJfc3RyX3N2LAorCQkJCQkoY2hhciopc25tcF9lcnJzdHJpbmcoKCpyZXNwb25zZSktPmVycnN0YXQpKTsKKwkJCQlzdl9zZXRpdihlcnJfbnVtX3N2LCAoKnJlc3BvbnNlKS0+ZXJyc3RhdCk7CisJCQkJc3Zfc2V0aXYoZXJyX2luZF9zdiwgKCpyZXNwb25zZSktPmVycmluZGV4KTsKICAgICAgICAgICAgICAgIHN0YXR1cyA9ICgqcmVzcG9uc2UpLT5lcnJzdGF0OwogICAgICAgICAgICAgICAgYnJlYWs7CiAJIH0KQEAgLTExNjksMTMgKzExNTMsMTIgQEAKIAogICAgICAgY2FzZSBTVEFUX1RJTUVPVVQ6CiAgICAgICBjYXNlIFNUQVRfRVJST1I6Ci0gICAgICAgICAgc3ZfY2F0cHYoZXJyX3N0cl9zdiwgKGNoYXIqKXNubXBfYXBpX2VycnN0cmluZyhzcy0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgc3Zfc2V0aXYoZXJyX251bV9zdiwgc3MtPnNfc25tcF9lcnJubyk7CisJICAgICBzbm1wX3JldHVybl9lcnIoc3MsIGVycl9zdHJfc3YsIGVycl9udW1fc3YsIGVycl9pbmRfc3YpOwogICAgICAgICAgYnJlYWs7CiAKICAgICAgIGRlZmF1bHQ6CisJICAgICBzbm1wX3JldHVybl9lcnIoc3MsIGVycl9zdHJfc3YsIGVycl9udW1fc3YsIGVycl9pbmRfc3YpOwogICAgICAgICAgc3ZfY2F0cHYoZXJyX3N0cl9zdiwgInNlbmRfc3luY19wZHU6IHVua25vd24gc3RhdHVzIik7Ci0gICAgICAgICBzdl9zZXRpdihlcnJfbnVtX3N2LCBzcy0+c19zbm1wX2Vycm5vKTsKICAgICAgICAgIGJyZWFrOwogICAgfQogCkBAIC0xMjQ4LDcgKzEyMzEsMTIgQEAKICAgICAgICAgcmVwbHlfcGR1LT5jb21tYW5kID0gU05NUF9NU0dfUkVTUE9OU0U7CiAgICAgICAgIHJlcGx5X3BkdS0+cmVxaWQgPSBwZHUtPnJlcWlkOwogICAgICAgICByZXBseV9wZHUtPmVycnN0YXQgPSByZXBseV9wZHUtPmVycmluZGV4ID0gMDsKLSAgICAgICAgc25tcF9zZW5kKHNzLCByZXBseV9wZHUpOworCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwl7CisgICAgICAgIAlzbm1wX3Nlc3Nfc2VuZChzcywgcmVwbHlfcGR1KTsKKwl9IGVsc2UgeworCSAgICAgICAgc25tcF9zZW5kKHNzLCByZXBseV9wZHUpOworCX0KICAgICAgIH0gZWxzZSB7CiAgICAgICAgIHdhcm4oIkNvdWxkbid0IGNsb25lIFBEVSBmb3IgaW5mb3JtIHJlc3BvbnNlIik7CiAgICAgICB9CkBAIC0xMjY2LDcgKzEyNTQsNyBAQAogCWNwID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBwZHUtPnRyYW5zcG9ydF9kYXRhLAogCQkJCSAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwogCWF2X3B1c2godHJhcGxpc3QsIG5ld1NWcHYoY3AsIHN0cmxlbihjcCkpKTsKLQlmcmVlKGNwKTsKKwluZXRzbm1wX2ZyZWUoY3ApOwogICAgICAgfSBlbHNlIHsKIAkvKiAgVGhpcyBzaG91bGRuJ3QgZXZlciBoYXBwZW47IGV2ZXJ5IHNlc3Npb24gaGFzIGEgdHJhbnNwb3J0LiAgKi8KIAlhdl9wdXNoKHRyYXBsaXN0LCBuZXdTVnB2KCIiLCAwKSk7CkBAIC0xODMzLDEzICsxODIxLDE3IEBACiAgICAqKiBzbm1wX2FzeW5jX3NlbmQoKSBmdW5jdGlvbiByZXR1cm5zIHRoZSByZXFpZCBvbiBzdWNjZXNzLCAwIG9uIGZhaWx1cmUuCiAgICAqLwogICAgaWYgKFN2VFJVRShjb250ZXh0LT5wZXJsX2NiKSkgewotICAgICAgcmVxaWQgPSBzbm1wX2FzeW5jX3NlbmQoc3MsIHBkdSwgX2J1bGt3YWxrX2FzeW5jX2NiLCAodm9pZCAqKWNvbnRleHQpOworICAgIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKyAgICB7CisgICAgIHJlcWlkID0gc25tcF9zZXNzX2FzeW5jX3NlbmQoc3MsIHBkdSwgX2J1bGt3YWxrX2FzeW5jX2NiLCAodm9pZCAqKWNvbnRleHQpOworICAgIH0gZWxzZSB7CisgICAgIHJlcWlkID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9idWxrd2Fsa19hc3luY19jYiwgKHZvaWQgKiljb250ZXh0KTsKKyAgICB9CiAKICAgICAgIERCUFJUKDIsKERCT1VUICJidWxrd2Fsa19zZW5kX3BkdSgpOiBzbm1wX2FzeW5jX3NlbmQgPT4gMHglMDhYXG4iLCByZXFpZCkpOwogCiAgICAgICBpZiAocmVxaWQgPT0gMCkgewotCSBzdl9zZXRwdigqZXJyX3N0cl9zdnAsIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotCSBzdl9zZXRpdigqZXJyX251bV9zdnAsIHNzLT5zX3NubXBfZXJybm8pOworCSBzbm1wX3JldHVybl9lcnIoc3MsICplcnJfbnVtX3N2cCwgKmVycl9pbmRfc3ZwLCAqZXJyX3N0cl9zdnApOwogCSBnb3RvIGVycjsKICAgICAgIH0KIApAQCAtMjQ1Nyw2ICsyNDQ5LDggQEAKIAlURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBTTk1QX0RFRkFVTFRfVElNRU9VVCk7CiAJVEVTVF9DT05TVEFOVDIodmFsdWUsIG5hbWUsIFNOTVBfREVGQVVMVF9WRVJTSU9OLAogICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RFRkFVTFRfU05NUF9WRVJTSU9OKTsKKwlURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBTTk1QX0FQSV9TSU5HTEUpOworCVRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIFNOTVBfQVBJX1RSQURJVElPTkFMKTsKIAlicmVhazsKICAgICBjYXNlICdYJzoKICAgICAgICAgICAgIGdvdG8gbm90X3RoZXJlOwpAQCAtMjQ3MSw2ICsyNDY1LDQ5IEBACiAgICAgcmV0dXJuIEVOT0VOVDsKIH0KIAorLyogCisgIFNpbmNlIHNfc25tcF9lcnJubyBjYW4ndCBiZSB0cnVzdGVkIHdpdGggU2luZ2xlIFNlc3Npb24sIHRoaXMgY2FsbHMgZWl0aGVyCisgIHNubXBfZXJyb3Igb3Igc25tcF9zZXNzX2Vycm9yIHRvIHBvcHVsYXRlIEVycm9yU3RyLEVycm9yTnVtLCBhbmQgRXJyb3JJbmQKKyAgaW4gU05NUDo6U2Vzc2lvbiBvYmplY3RzCisqLwordm9pZCBzbm1wX3JldHVybl9lcnIoIHN0cnVjdCBzbm1wX3Nlc3Npb24gKnNzLCBTViAqZXJyX3N0ciwgU1YgKmVycl9udW0sIFNWICplcnJfaW5kICkKK3sKKwlpbnQgZXJyOworCWludCBsaWJlcnI7CisJY2hhciAqZXJyc3RyOworCWlmKHNzID09IE5VTEwpCisJCXJldHVybjsKKwlpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJeworCQlzbm1wX3Nlc3NfZXJyb3Ioc3MsICZlcnIsICZsaWJlcnIsICZlcnJzdHIpOworCX0gZWxzZSB7CisJCXNubXBfZXJyb3Ioc3MsICZlcnIsICZsaWJlcnIsICZlcnJzdHIpOworCX0KKwlzdl9jYXRwdihlcnJfc3RyLCBlcnJzdHIpOworCXN2X3NldGl2KGVycl9udW0sIGxpYmVycik7CisJc3Zfc2V0aXYoZXJyX2luZCwgZXJyKTsKKwluZXRzbm1wX2ZyZWUoZXJyc3RyKTsKK30KKworCisvKiAKKyAgaW50IHNubXBfYXBpX21vZGUoIGludCBtb2RlICkgCisgIFJldHVybnMgb3Igc2V0cyBzdGF0aWMgaW50IGFwaV9tb2RlIGZvciByZWZlcmVuY2UgYnkgZnVuY3Rpb25zIHRvIGRldGVybWluZQorICB3aGV0aGVyIHRvIHVzZSBUcmFkaXRpb25hbCAobm9uLXRocmVhZHNhZmUpIG9yIFNpbmdsZS1TZXNzaW9uICh0aHJlYWRzYWZlKQorICBTTk1QIEFQSSBjYWxscy4KKyAKKyAgQ2FsbCB3aXRoIChpbnQpTlVMTCB0byByZXR1cm4gdGhlIGN1cnJlbnQgbW9kZSwgb3Igd2l0aCBTTk1QX0FQSV9UUkFESVRJT05BTAorICBvciBTTk1QX0FQSV9TSU5HTEUgdG8gc2V0IHRoZSBjdXJyZW50IG1vZGUuICAoZGVmaW5lZCBhYm92ZSkKKyAKKyAgcG0gc2lkZSBjYWxsIGRlZmF1bHRzIHRvIChpbnQpTlVMTAorKi8KK2ludCBzbm1wX2FwaV9tb2RlKCBpbnQgbW9kZSApCit7CisJaWYgKG1vZGUgPT0gMCkKKwkJcmV0dXJuIGFwaV9tb2RlOworCWFwaV9tb2RlID0gbW9kZTsKKwlyZXR1cm4gYXBpX21vZGU7Cit9CiAKIE1PRFVMRSA9IFNOTVAJCVBBQ0tBR0UgPSBTTk1QCQlQUkVGSVggPSBzbm1wCiAKQEAgLTI1MDAsNiArMjUzNywxMyBAQAogICAgIENPREU6CiAgICAgICAgIF9fbGlicmFyaWVzX2luaXQoYXBwbmFtZSk7CiAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorIyBQZXJsIGNhbGwgZGVmYXVsdHMgdG8gKGludClOVUxMIHdoZW4gZ2l2ZW4gbm8gYXJncywgc28gaXQgd2lsbCByZXR1cm4KKyMgdGhlIGN1cnJlbnQgYXBpX21vZGUgdmFsdWVzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoraW50IAorc25tcF9hcGlfbW9kZShtb2RlPTApCisJaW50IG1vZGUKIAogU25tcFNlc3Npb24gKgogc25tcF9uZXdfc2Vzc2lvbih2ZXJzaW9uLCBjb21tdW5pdHksIHBlZXIsIGxwb3J0LCByZXRyaWVzLCB0aW1lb3V0KQpAQCAtMjU0NSw3ICsyNTg5LDEyIEBACiAgICAgICAgICAgIHNlc3Npb24udGltZW91dCA9IHRpbWVvdXQ7IC8qIDEwMDAwMDBMICovCiAgICAgICAgICAgIHNlc3Npb24uYXV0aGVudGljYXRvciA9IE5VTEw7CiAKLSAgICAgICAgICAgc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworCSAgIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkgICB7CisJICAgICAgICAgICBzcyA9IHNubXBfc2Vzc19vcGVuKCZzZXNzaW9uKTsKKwkgICB9IGVsc2UgeworCQkgICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisJICAgfQogCiAgICAgICAgICAgIGlmIChzcyA9PSBOVUxMKSB7CiAJICAgICAgaWYgKHZlcmJvc2UpIHdhcm4oImVycm9yOnNubXBfbmV3X3Nlc3Npb246IENvdWxkbid0IG9wZW4gU05NUCBzZXNzaW9uIik7CkBAIC0yNTk3LDcgKzI2NDYsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gZW5kOwogCSAgIH0KIAotCSAgIHNlc3Npb24ucGVlcm5hbWUgPSBzdHJkdXAocGVlcik7CisJICAgc2Vzc2lvbi5wZWVybmFtZSA9IHBlZXI7CiAgICAgICAgICAgIHNlc3Npb24ucmV0cmllcyA9IHJldHJpZXM7IC8qIDUgKi8KICAgICAgICAgICAgc2Vzc2lvbi50aW1lb3V0ID0gdGltZW91dDsgLyogMTAwMDAwMEwgKi8KICAgICAgICAgICAgc2Vzc2lvbi5hdXRoZW50aWNhdG9yID0gTlVMTDsKQEAgLTI3MTQsMTggKzI3NjMsMTE4IEBACiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworCSAgIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkgICB7CisJICAgICAgICAgICBzcyA9IHNubXBfc2Vzc19vcGVuKCZzZXNzaW9uKTsKKwkgICB9IGVsc2UgeworCQkgICBzcyA9IHNubXBfb3Blbigmc2Vzc2lvbik7CisJICAgfQogCiAgICAgICAgICAgIGlmIChzcyA9PSBOVUxMKSB7CiAJICAgICAgaWYgKHZlcmJvc2UpIHdhcm4oImVycm9yOnNubXBfbmV3X3YzX3Nlc3Npb246Q291bGRuJ3Qgb3BlbiBTTk1QIHNlc3Npb24iKTsKICAgICAgICAgICAgfQogICAgICAgICBlbmQ6CiAgICAgICAgICAgIFJFVFZBTCA9IHNzOwotCSAgIGZyZWUgKHNlc3Npb24uY29udGV4dEVuZ2luZUlEKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eVByaXZMb2NhbEtleSk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlQcml2UHJvdG8pOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5QXV0aExvY2FsS2V5KTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eUF1dGhQcm90byk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uY29udGV4dEVuZ2luZUlEKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eUVuZ2luZUlEKTsKIAl9CiAgICAgICAgIE9VVFBVVDoKICAgICAgICAgUkVUVkFMCiAKK1NubXBTZXNzaW9uICoKK3NubXBfbmV3X3R1bm5lbGVkX3Nlc3Npb24odmVyc2lvbiwgcGVlciwgcmV0cmllcywgdGltZW91dCwgc2VjX25hbWUsIHNlY19sZXZlbCwgY29udGV4dF9lbmdfaWQsIGNvbnRleHQsIG91cl9pZGVudGl0eSwgdGhlaXJfaWRlbnRpdHksIHRoZWlyX2hvc3RuYW1lLCB0cnVzdF9jZXJ0KQorICAgICAgICBpbnQJdmVyc2lvbgorICAgICAgICBjaGFyICoJcGVlcgorICAgICAgICBpbnQJcmV0cmllcworICAgICAgICBpbnQJdGltZW91dAorICAgICAgICBjaGFyICogIHNlY19uYW1lCisgICAgICAgIGludCAgICAgc2VjX2xldmVsCisgICAgICAgIGNoYXIgKiAgY29udGV4dF9lbmdfaWQKKyAgICAgICAgY2hhciAqICBjb250ZXh0CisgICAgICAgIGNoYXIgKiAgb3VyX2lkZW50aXR5CisgICAgICAgIGNoYXIgKiAgdGhlaXJfaWRlbnRpdHkKKyAgICAgICAgY2hhciAqICB0aGVpcl9ob3N0bmFtZQorICAgICAgICBjaGFyICogIHRydXN0X2NlcnQKKwlDT0RFOgorCXsKKwkgICBTbm1wU2Vzc2lvbiBzZXNzaW9uID0gezB9OworCSAgIFNubXBTZXNzaW9uICpzcyA9IE5VTEw7CisgICAgICAgICAgIGludCB2ZXJib3NlID0gU3ZJVihwZXJsX2dldF9zdigiU05NUDo6dmVyYm9zZSIsIDB4MDEgfCAweDA0KSk7CisKKyAgICAgICAgICAgX19saWJyYXJpZXNfaW5pdCgicGVybCIpOworCisgICAgICAgICAgIHNlc3Npb24udmVyc2lvbiA9IHZlcnNpb247CisKKwkgICBzZXNzaW9uLnBlZXJuYW1lID0gcGVlcjsKKyAgICAgICAgICAgc2Vzc2lvbi5yZXRyaWVzID0gcmV0cmllczsgLyogNSAqLworICAgICAgICAgICBzZXNzaW9uLnRpbWVvdXQgPSB0aW1lb3V0OyAvKiAxMDAwMDAwTCAqLworICAgICAgICAgICBzZXNzaW9uLmNvbnRleHROYW1lTGVuID0gc3RybGVuKGNvbnRleHQpOworICAgICAgICAgICBzZXNzaW9uLmNvbnRleHROYW1lID0gY29udGV4dDsKKyAgICAgICAgICAgc2Vzc2lvbi5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4oc2VjX25hbWUpOworICAgICAgICAgICBzZXNzaW9uLnNlY3VyaXR5TmFtZSA9IHNlY19uYW1lOworICAgICAgICAgICBzZXNzaW9uLnNlY3VyaXR5TGV2ZWwgPSBzZWNfbGV2ZWw7CisgICAgICAgICAgIHNlc3Npb24uc2VjdXJpdHlNb2RlbCA9IE5FVFNOTVBfVFNNX1NFQ1VSSVRZX01PREVMOworICAgICAgICAgICBzZXNzaW9uLmNvbnRleHRFbmdpbmVJRExlbiA9CisgICAgICAgICAgICAgIGhleF90b19iaW5hcnkyKCh1X2NoYXIqKWNvbnRleHRfZW5nX2lkLCBzdHJsZW4oY29udGV4dF9lbmdfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciAqKikgJnNlc3Npb24uY29udGV4dEVuZ2luZUlEKTsKKworICAgICAgICAgICAvKiBjcmVhdGUgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIHN0b3JlICovCisgICAgICAgICAgIGlmICghc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisgICAgICAgICAgICAgICBzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uID0KKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0cmFuc3BvcnRfY29uZmlndXJhdGlvbjpmaWZvIik7CisgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb250YWluZXJcbiIpOworICAgICAgICAgICAgICAgICAgIFJFVFZBTCA9IE5VTEw7CisgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICBzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLT5jb21wYXJlID0KKyAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopCisgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnX2NvbXBhcmU7CisgICAgICAgICAgIH0KKworICAgICAgICAgICBpZiAob3VyX2lkZW50aXR5ICYmIG91cl9pZGVudGl0eVswXSAhPSAnXDAnKQorICAgICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJvdXJfaWRlbnRpdHkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91cl9pZGVudGl0eSkpOworCisgICAgICAgICAgIGlmICh0aGVpcl9pZGVudGl0eSAmJiB0aGVpcl9pZGVudGl0eVswXSAhPSAnXDAnKQorICAgICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJ0aGVpcl9pZGVudGl0eSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXJfaWRlbnRpdHkpKTsKKworICAgICAgICAgICBpZiAodGhlaXJfaG9zdG5hbWUgJiYgdGhlaXJfaG9zdG5hbWVbMF0gIT0gJ1wwJykKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygidGhlaXJfaG9zdG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyX2hvc3RuYW1lKSk7CisKKyAgICAgICAgICAgaWYgKHRydXN0X2NlcnQgJiYgdHJ1c3RfY2VydFswXSAhPSAnXDAnKQorICAgICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJ0cnVzdF9jZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVzdF9jZXJ0KSk7CisgICAgICAgICAgIAorCisgICAgICAgICAgIHNzID0gc25tcF9vcGVuKCZzZXNzaW9uKTsKKworICAgICAgICAgICBpZiAoc3MgPT0gTlVMTCkgeworCSAgICAgIGlmICh2ZXJib3NlKSB3YXJuKCJlcnJvcjpzbm1wX25ld192M19zZXNzaW9uOkNvdWxkbid0IG9wZW4gU05NUCBzZXNzaW9uIik7CisgICAgICAgICAgIH0KKworICAgICAgICAgICBSRVRWQUwgPSBzczsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eVByaXZMb2NhbEtleSk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uc2VjdXJpdHlQcml2UHJvdG8pOworCSAgIG5ldHNubXBfZnJlZShzZXNzaW9uLnNlY3VyaXR5QXV0aExvY2FsS2V5KTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eUF1dGhQcm90byk7CisJICAgbmV0c25tcF9mcmVlKHNlc3Npb24uY29udGV4dEVuZ2luZUlEKTsKKwkgICBuZXRzbm1wX2ZyZWUoc2Vzc2lvbi5zZWN1cml0eUVuZ2luZUlEKTsKKwl9CisgICAgICAgIE9VVFBVVDoKKyAgICAgICAgUkVUVkFMCiAKIFNubXBTZXNzaW9uICoKIHNubXBfdXBkYXRlX3Nlc3Npb24oc2Vzc19yZWYsIHZlcnNpb24sIGNvbW11bml0eSwgcGVlciwgbHBvcnQsIHJldHJpZXMsIHRpbWVvdXQpCkBAIC0yNzY4LDggKzI5MTcsOCBAQAogCSAgIH0KICAgICAgICAgICAgLyogV0FSTklORyBMRUFLQUdFIGJ1dCBJIGNhbnQgZnJlZSBsaWIgbWVtb3J5IHVuZGVyIHdpbjMyICovCiAgICAgICAgICAgIHNzLT5jb21tdW5pdHlfbGVuID0gc3RybGVuKChjaGFyICopY29tbXVuaXR5KTsKLSAgICAgICAgICAgc3MtPmNvbW11bml0eSA9ICh1X2NoYXIgKilzdHJkdXAoY29tbXVuaXR5KTsKLQkgICBzcy0+cGVlcm5hbWUgPSBzdHJkdXAocGVlcik7CisgICAgICAgICAgIHNzLT5jb21tdW5pdHkgPSAodV9jaGFyICopbmV0c25tcF9zdHJkdXAoY29tbXVuaXR5KTsKKwkgICBzcy0+cGVlcm5hbWUgPSBuZXRzbm1wX3N0cmR1cChwZWVyKTsKIAkgICBzcy0+bG9jYWxfcG9ydCA9IGxwb3J0OwogICAgICAgICAgICBzcy0+cmV0cmllcyA9IHJldHJpZXM7IC8qIDUgKi8KICAgICAgICAgICAgc3MtPnRpbWVvdXQgPSB0aW1lb3V0OyAvKiAxMDAwMDAwTCAqLwpAQCAtMjkyNSw2ICszMDc0LDcgQEAKICAgICAgICAgICAgaW50IHVzZV9lbnVtczsKICAgICAgICAgICAgc3RydWN0IGVudW1fbGlzdCAqZXA7CiAgICAgICAgICAgIGludCBiZXN0X2d1ZXNzOwkgICAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAKICAgICAgICAgICAgTmV3ICgwLCBvaWRfYXJyLCBNQVhfT0lEX0xFTiwgb2lkKTsKIApAQCAtMzAxMSwxNSArMzE2MSwxOSBAQAogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5wZXJsX2NiID0gbmV3U1ZzdihwZXJsX2NhbGxiYWNrKTsKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+c2Vzc19yZWYgPSBuZXdSVl9pbmMoU3ZSVihzZXNzX3JlZikpOwogCisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoc3RhdHVzKSkpOyAvKiBwdXNoIHRoZSByZXFpZD8/ICovCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgICAgICAgc3ZfY2F0cHYoKmVycl9zdHJfc3ZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgc3Zfc2V0aXYoKmVycl9udW1fc3ZwLCBzcy0+c19zbm1wX2Vycm5vKTsKKwkJCQkJc25tcF9yZXR1cm5fZXJyKHNzLCAqZXJyX3N0cl9zdnAsICplcnJfbnVtX3N2cCwgKmVycl9pbmRfc3ZwKTsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKCZzdl91bmRlZik7CiAgICAgICAgICAgICAgICAgIH0KIAkJIGdvdG8gZG9uZTsKQEAgLTMwNDIsNiArMzE5Niw5IEBACiAgICAgICAgICAgICAgIC8qIEJVRyEhISBuZWVkIHRvIHJldHVybiBhbiBlcnJvciB2YWx1ZSAqLwogICAgICAgICAgICAgICBYUFVTSHMoJnN2X3VuZGVmKTsgLyogbm8gbWVtIG9yIGJhZCBhcmdzICovCiAgICAgICAgICAgIH0KKyNlbHNlICAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICAgICAgICAgd2FybigiZXJyb3I6IE5ldC1TTk1QIHdhcyBjb21waWxlZCB1c2luZyAtLWVuYWJsZS1yZWFkLW9ubHksIHNldCgpIGNhbiBub3QgYmUgdXNlZC4iKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIGRvbmU6CiAgICAgICAgICAgIFNhZmVmcmVlKG9pZF9hcnIpOwogICAgICAgICB9CkBAIC0zMTk0LDE1ICszMzUxLDE5IEBACiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnBlcmxfY2IgPSBuZXdTVnN2KHBlcmxfY2FsbGJhY2spOwogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5zZXNzX3JlZiA9IG5ld1NWc3Yoc2Vzc19yZWYpOwogCisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworCQkgc3RhdHVzID0gc25tcF9zZXNzX2FzeW5jX3NlbmQoc3MsIHBkdSwgX19zbm1wX3hzX2NiLAorCQkJCQkgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihzdGF0dXMpKSk7IC8qIHB1c2ggdGhlIHJlcWlkPz8gKi8KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICAgICAgICBzdl9jYXRwdigqZXJyX3N0cl9zdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotICAgICAgICAgICAgICAgICAgICBzdl9zZXRpdigqZXJyX251bV9zdnAsIHNzLT5zX3NubXBfZXJybm8pOworCSAgCSAgICBzbm1wX3JldHVybl9lcnIoc3MsICplcnJfbnVtX3N2cCwgKmVycl9pbmRfc3ZwLCAqZXJyX3N0cl9zdnApOyAgCiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcygmc3ZfdW5kZWYpOwogICAgICAgICAgICAgICAgICB9CiAJCSBnb3RvIGRvbmU7CkBAIC0zNDMxLDE1ICszNTkyLDE5IEBACiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnBlcmxfY2IgPSBuZXdTVnN2KHBlcmxfY2FsbGJhY2spOwogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5zZXNzX3JlZiA9IG5ld1NWc3Yoc2Vzc19yZWYpOwogCisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoc3RhdHVzKSkpOyAvKiBwdXNoIHRoZSByZXFpZD8/ICovCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgICAgICAgc3ZfY2F0cHYoKmVycl9zdHJfc3ZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgc3Zfc2V0aXYoKmVycl9udW1fc3ZwLCBzcy0+c19zbm1wX2Vycm5vKTsKKwkJCQkJc25tcF9yZXR1cm5fZXJyKHNzLCAqZXJyX251bV9zdnAsICplcnJfaW5kX3N2cCwgKmVycl9zdHJfc3ZwKTsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKCZzdl91bmRlZik7CiAgICAgICAgICAgICAgICAgIH0KIAkJIGdvdG8gZG9uZTsKQEAgLTM2NjksMTUgKzM4MzQsMTkgQEAKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+cGVybF9jYiA9IG5ld1NWc3YocGVybF9jYWxsYmFjayk7CiAgICAgICAgICAgICAgICAgIHhzX2NiX2RhdGEtPnNlc3NfcmVmID0gbmV3U1ZzdihzZXNzX3JlZik7CiAKKwkJaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCQl7CisgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfc2Vzc19hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgc3RhdHVzID0gc25tcF9hc3luY19zZW5kKHNzLCBwZHUsIF9fc25tcF94c19jYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKil4c19jYl9kYXRhKTsKKwkJfQogICAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKHN2XzJtb3J0YWwobmV3U1ZpdihzdGF0dXMpKSk7IC8qIHB1c2ggdGhlIHJlcWlkPz8gKi8KICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShwZHUpOwotICAgICAgICAgICAgICAgICAgICBzdl9jYXRwdigqZXJyX3N0cl9zdnAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyKilzbm1wX2FwaV9lcnJzdHJpbmcoc3MtPnNfc25tcF9lcnJubykpOwotICAgICAgICAgICAgICAgICAgICBzdl9zZXRpdigqZXJyX251bV9zdnAsIHNzLT5zX3NubXBfZXJybm8pOworCQkJCQlzbm1wX3JldHVybl9lcnIoc3MsICplcnJfbnVtX3N2cCwgKmVycl9pbmRfc3ZwLCAqZXJyX3N0cl9zdnApOwogICAgICAgICAgICAgICAgICAgICBYUFVTSHMoJnN2X3VuZGVmKTsKICAgICAgICAgICAgICAgICAgfQogCQkgZ290byBkb25lOwpAQCAtNDAyOCw3ICs0MTk3LDcgQEAKIAkgICAgICB9CiAKIAkgICAgICAvKiBTZW50IG9rYXkuLi4gIFJldHVybiB0aGUgcmVxdWVzdCBJRCBpbiAncGR1JyBhcyBhbiBTdklWLiAqLwotCSAgICAgIERCUFJUKDEsKERCT1VUICJPa2F5LCByZXF1ZXN0IGlkIGlzICVwXG4iLCBwZHUpKTsKKwkgICAgICBEQlBSVCgxLChEQk9VVCAiT2theSwgcmVxdWVzdCBpZCBpcyAlbGRcbiIsIChsb25nKShpbnRwdHJfdClwZHUpKTsKIC8qCSAgICAgIFhTUkVUVVJOX0lWKChpbnRwdHJfdClwZHUpOyAqLwogCSAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoKElWKXBkdSkpKTsKIAkgICAgICBYU1JFVFVSTigxKTsKQEAgLTQyMDgsNyArNDM3Nyw3IEBACiAgICAgICAgICAgICAgIH0gLyogZm9yIGFsbCB0aGUgdmFycyAqLwogICAgICAgICAgICAgICB9CiAKLQkgICAgICBwZHUtPmVudGVycHJpc2UgPSAob2lkICopbWFsbG9jKCBNQVhfT0lEX0xFTiAqIHNpemVvZihvaWQpKTsKKwkgICAgICBwZHUtPmVudGVycHJpc2UgPSAob2lkICopbmV0c25tcF9tYWxsb2MoTUFYX09JRF9MRU4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgICAgICAgIHRwID0gX190YWcyb2lkKGVudGVycHJpc2UsTlVMTCwgcGR1LT5lbnRlcnByaXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcGR1LT5lbnRlcnByaXNlX2xlbmd0aCwgTlVMTCwgYmVzdF9ndWVzcyk7CiAgIAkgICAgICBpZiAocGR1LT5lbnRlcnByaXNlX2xlbmd0aCA9PSAwKSB7CkBAIC00MjE5LDEyICs0Mzg4LDEyIEBACiAJCSAgYWdlbnQtYWRkcmVzcyBmaWVsZCB0byB0aGF0LiAgT3RoZXJ3aXNlIHNldCBpdCB0bwogCQkgIG91ciBhZGRyZXNzLiAgKi8KICAgICAgICAgICAgICAgaWYgKGFnZW50ICYmIHN0cmxlbihhZ2VudCkpIHsKLSAgICAgICAgICAgICAgICAgaWYgKF9fcGFyc2VfYWRkcmVzcyhhZ2VudCkgPT0gLTEgJiYgdmVyYm9zZSkgewotCQkgICB3YXJuKCJlcnJvcjp0cmFwOmludmFsaWQgYWdlbnQgYWRkcmVzczogJXMiLCBhZ2VudCk7Ci0JCSAgIGdvdG8gZXJyOwotICAgICAgICAgICAgICAgICB9IGVsc2UgewotCQkgICAqKChpbl9hZGRyX3QgKilwZHUtPmFnZW50X2FkZHIpID0gX19wYXJzZV9hZGRyZXNzKGFnZW50KTsKLQkJIH0KKyAgICAgICAgICAgICAgICAgaWYgKDAgPiBuZXRzbm1wX2dldGhvc3RieW5hbWVfdjQoYWdlbnQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbl9hZGRyX3QgKilwZHUtPmFnZW50X2FkZHIpKXsKKyAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQorICAgICAgICAgICAgICAgICAgICAgICAgIHdhcm4oImVycm9yOnRyYXA6aW52YWxpZCBhZ2VudCBhZGRyZXNzOiAlcyIsIGFnZW50KTsKKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyOworICAgICAgICAgICAgICAgICB9IAogICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAqKChpbl9hZGRyX3QgKilwZHUtPmFnZW50X2FkZHIpID0gZ2V0X215YWRkcigpOwogICAgICAgICAgICAgICB9CkBAIC00MjMyLDkgKzQ0MDEsMTQgQEAKICAgICAgICAgICAgICAgcGR1LT5zcGVjaWZpY190eXBlID0gc3BlY2lmaWM7CiAgICAgICAgICAgICAgIHBkdS0+dGltZSA9IHVwdGltZTsKIAotICAgICAgICAgICAgICBpZiAoc25tcF9zZW5kKHNzLCBwZHUpID09IDApIHsKKwkgICAgIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkgICAgIHsKKwkJaWYoc25tcF9zZXNzX3NlbmQoc3MscGR1KSA9PSAwKQorCQkJc25tcF9mcmVlX3BkdShwZHUpOworCSAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNubXBfc2VuZChzcywgcGR1KSA9PSAwKSAKIAkgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7Ci0gICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoWkVST19CVVRfVFJVRSwwKSkpOwogICAgICAgICAgICB9IGVsc2UgewogZXJyOgpAQCAtNDI3Nyw3ICs0NDUxLDcgQEAKIAkgICAKICAgICAgICAgICAgTmV3ICgwLCBvaWRfYXJyLCBNQVhfT0lEX0xFTiwgb2lkKTsKIAotICAgICAgICAgICBpZiAob2lkX2FyciAmJiBTdlJPSyhzZXNzX3JlZikgJiYgU3ZST0sodmFybGlzdF9yZWYpKSB7CisgICAgICAgICAgIGlmIChvaWRfYXJyICYmIFN2Uk9LKHNlc3NfcmVmKSkgewogCiAgICAgICAgICAgICAgIHNlc3NfcHRyX3N2ID0gaHZfZmV0Y2goKEhWKilTdlJWKHNlc3NfcmVmKSwgIlNlc3NQdHIiLCA3LCAxKTsKIAkgICAgICBzcyA9IChTbm1wU2Vzc2lvbiAqKVN2SVYoKFNWKilTdlJWKCpzZXNzX3B0cl9zdikpOwpAQCAtNDI5MSw4ICs0NDY1LDEzIEBACiAJICAgICAgCiAgICAgICAgICAgICAgIHBkdSA9IHNubXBfcGR1X2NyZWF0ZShTTk1QX01TR19UUkFQMik7CiAKLSAgICAgICAgICAgICAgdmFybGlzdCA9IChBViopIFN2UlYodmFybGlzdF9yZWYpOwotICAgICAgICAgICAgICB2YXJsaXN0X2xlbiA9IGF2X2xlbih2YXJsaXN0KTsKKyAgICAgICAgICAgICAgaWYgKFN2Uk9LKHZhcmxpc3RfcmVmKSkgeworICAgICAgICAgICAgICAgICAgdmFybGlzdCA9IChBViopIFN2UlYodmFybGlzdF9yZWYpOworICAgICAgICAgICAgICAgICAgdmFybGlzdF9sZW4gPSBhdl9sZW4odmFybGlzdCk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICB2YXJsaXN0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICAgIHZhcmxpc3RfbGVuID0gLTE7CisgICAgICAgICAgICAgIH0KIAkgICAgICAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogICAgICAgICAgICAgICByZXMgPSBfX2FkZF92YXJfdmFsX3N0cihwZHUsIHN5c1VwVGltZSwgU1lTX1VQVElNRV9PSURfTEVOLAogCQkJCXVwdGltZSwgc3RybGVuKHVwdGltZSksIFRZUEVfVElNRVRJQ0tTKTsKQEAgLTQzNjUsOSArNDU0NCwxNCBAQAogICAgICAgICAgICAgICAgICB9IC8qIGlmIHZhcl9yZWYgaXMgb2sgKi8KICAgICAgICAgICAgICAgfSAvKiBmb3IgYWxsIHRoZSB2YXJzICovCiAKLSAgICAgICAgICAgICAgaWYgKHNubXBfc2VuZChzcywgcGR1KSA9PSAwKSB7CisJICAgICBpZihhcGlfbW9kZSA9PSBTTk1QX0FQSV9TSU5HTEUpCisJICAgICB7CisgICAgICAgICAgICAgIGlmIChzbm1wX3Nlc3Nfc2VuZChzcywgcGR1KSA9PSAwKQogCSAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgfQorCSAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgaWYgKHNubXBfc2VuZChzcywgcGR1KSA9PSAwKSAKKwkgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7CisgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWcHYoWkVST19CVVRfVFJVRSwwKSkpOwogICAgICAgICAgICB9IGVsc2UgewpAQCAtNDUxMSwxNSArNDY5NSwxOSBAQAogICAgICAgICAgICAgICAgICB4c19jYl9kYXRhLT5wZXJsX2NiID0gbmV3U1ZzdihwZXJsX2NhbGxiYWNrKTsKICAgICAgICAgICAgICAgICAgeHNfY2JfZGF0YS0+c2Vzc19yZWYgPSBuZXdSVl9pbmMoU3ZSVihzZXNzX3JlZikpOwogCisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworICAgICAgICAgICAgICAgICBzdGF0dXMgPSBzbm1wX3Nlc3NfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIHN0YXR1cyA9IHNubXBfYXN5bmNfc2VuZChzcywgcGR1LCBfX3NubXBfeHNfY2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZCopeHNfY2JfZGF0YSk7CisJCX0KICAgICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgIFhQVVNIcyhzdl8ybW9ydGFsKG5ld1NWaXYoc3RhdHVzKSkpOyAvKiBwdXNoIHRoZSByZXFpZD8/ICovCiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocGR1KTsKLSAgICAgICAgICAgICAgICAgICAgc3ZfY2F0cHYoKmVycl9zdHJfc3ZwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY2hhciopc25tcF9hcGlfZXJyc3RyaW5nKHNzLT5zX3NubXBfZXJybm8pKTsKLSAgICAgICAgICAgICAgICAgICAgc3Zfc2V0aXYoKmVycl9udW1fc3ZwLCBzcy0+c19zbm1wX2Vycm5vKTsKKwkJCQkJc25tcF9yZXR1cm5fZXJyKHNzLCAqZXJyX251bV9zdnAsICplcnJfaW5kX3N2cCwgKmVycl9zdHJfc3ZwKTsKICAgICAgICAgICAgICAgICAgICAgWFBVU0hzKCZzdl91bmRlZik7CiAgICAgICAgICAgICAgICAgIH0KIAkJIGdvdG8gZG9uZTsKQEAgLTQ1NzEsNyArNDc1OSw4IEBACiAJaW50CQlmbGFnCiAJQ09ERToKIAl7Ci0JICAgc25tcF9zZXRfZHVtcF9wYWNrZXQoZmxhZyk7CisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VULCBmbGFnKTsKIAl9CiAKIApAQCAtNDcxOSw3ICs0OTA4LDggQEAKIAlpbnQJdmFsCiAJQ09ERToKIAl7Ci0JICAgc25tcF9zZXRfc2F2ZV9kZXNjcmlwdGlvbnModmFsKTsKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU0FWRV9NSUJfREVTQ1JTLCB2YWwpOwogCX0KIAogdm9pZApAQCAtNDc3NSwxMSArNDk2NSwxOCBAQAogCX0KIAogCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyMgTm90ZTogc3M9KFNubXBTZXNzaW9uKilOVUxMIGlzIHNvICZTTk1QOjpNYWluTG9vcCgpIGNhbiBzdGlsbCBiZSBjYWxsZWQgCisjIHdpdGhvdXQgYSBzZXNzIGhhbmRsZXIgYXJndW1lbnQsIHRoaXMgd2F5IEknbSBub3QgYnJlYWtpbmcgYW55b25lJ3Mgb2xkIGNvZGUKKyMKKyMgc2VlIE1haW5Mb29wKCkgaW4gU05NUC5wbSBmb3IgbW9yZSBkZXRhaWxzCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHZvaWQKLXNubXBfbWFpbl9sb29wKHRpbWVvdXRfc2VjLHRpbWVvdXRfdXNlYyxwZXJsX2NhbGxiYWNrKQorc25tcF9tYWluX2xvb3AodGltZW91dF9zZWMsdGltZW91dF91c2VjLHBlcmxfY2FsbGJhY2ssc3M9KFNubXBTZXNzaW9uKilOVUxMKQogCWludCAJdGltZW91dF9zZWMKIAlpbnQgCXRpbWVvdXRfdXNlYwogCVNWICoJcGVybF9jYWxsYmFjaworCVNubXBTZXNzaW9uICpzcwogCUNPREU6CiAJewogICAgICAgICBpbnQgbnVtZmRzLCBmZF9jb3VudDsKQEAgLTQ3OTEsNyArNDk4OCw2IEBACiAgICAgICAgIGludCBibG9jazsKIAlTViAqY2I7CiAKLQogIAltYWlubG9vcF9maW5pc2ggPSAwOwogCiAJaXR2cCA9ICZpbnRlcnZhbDsKQEAgLTQ4MDksNyArNTAwNSwxMiBAQAogICAgICAgICAgICBibG9jayA9IDE7CiAgICAgICAgICAgIHR2cCA9ICZ0aW1lX3ZhbDsKICAgICAgICAgICAgdGltZXJjbGVhcih0dnApOworCSAgaWYoYXBpX21vZGUgPT0gU05NUF9BUElfU0lOR0xFKQorCSAgeworICAgICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oc3MsJm51bWZkcywgJmZkc2V0LCB0dnAsICZibG9jayk7CisJICB9IGVsc2UgewogICAgICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKCZudW1mZHMsICZmZHNldCwgdHZwLCAmYmxvY2spOworCSAgfQogICAgICAgICAgICBfX3JlY2FsY190aW1lb3V0KHR2cCxjdHZwLGx0dnAsaXR2cCwmYmxvY2spOwogICAgICAgICAgICAjIHByaW50ZigicHJlLXNlbGVjdDogbnVtZmRzID0gJWxkLCBibG9jayA9ICVsZFxuIiwgbnVtZmRzLCBibG9jayk7CiAgICAgICAgICAgIGlmIChibG9jayA9PSAxKSB0dnAgPSBOVUxMOyAvKiBibG9jayB3aXRob3V0IHRpbWVvdXQgKi8KQEAgLTQ4MTgsNyArNTAxOSwxMiBAQAogICAgICAgICAgICBpZiAoZmRfY291bnQgPiAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIEVOVEVSOwogICAgICAgICAgICAgICAgICAgICAgICBTQVZFVE1QUzsKLSAgICAgICAgICAgICAgc25tcF9yZWFkKCZmZHNldCk7CisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworCQkgIHNubXBfc2Vzc19yZWFkKHNzLCAmZmRzZXQpOworCQl9IGVsc2UgeworICAgICAgICAgICAgICAJICBzbm1wX3JlYWQoJmZkc2V0KTsKKwkJfQogICAgICAgICAgICAgICAgICAgICAgICBGUkVFVE1QUzsKICAgICAgICAgICAgICAgICAgICAgICAgTEVBVkU7CiAKQEAgLTQ4MjcsNyArNTAzMywxMiBAQAogCQkgU1BBR0FJTjsKIAkJIEVOVEVSOwogCQkgU0FWRVRNUFM7CisJCWlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkJeworCQlzbm1wX3Nlc3NfdGltZW91dCggc3MgKTsKKwkJfSBlbHNlIHsgCiAgICAgICAgICAgICAgICAgIHNubXBfdGltZW91dCgpOworCQl9CiAgICAgICAgICAgICAgICAgIGlmICghdGltZXJpc3NldChjdHZwKSkgewogICAgICAgICAgICAgICAgICAgICBpZiAoU3ZUUlVFKHBlcmxfY2FsbGJhY2spKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIC8qIHN2XzJtb3J0YWwocGVybF9jYWxsYmFjayk7ICovCkBAIC01MDQ1LDkgKzUyNTYsNyBAQAogCSAgICAgICAgICAvKiB3ZSBtdXN0IGJlIGxvb2tpbmcgYXQgZGVzY3JpcHRpb24gKi8KICAgICAgICAgICAgICAgICAgc3Zfc2V0cHYocmV0LHRwLT5kZXNjcmlwdGlvbik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBjYXNlICdpJzogLyogaW5kZXhlcyAqLwotICAgICAgICAgICAgICAgICBpZiAoc3RybmNtcCgiaW5kZXhlcyIsIGtleSwgc3RybGVuKGtleSkpKSBicmVhazsKLSAgICAgICAgICAgICAgICAgaW5kZXhfYXYgPSBuZXdBVigpOworICAgICAgICAgICAgICBjYXNlICdpJzogLyogaW5kZXhlcywgaW1wbGllZCAqLwogICAgICAgICAgICAgICAgICBpZiAodHAtPmF1Z21lbnRzKSB7CiAgCSAgICAgICAgICAgICBjbGVhcl90cmVlX2ZsYWdzKGdldF90cmVlX2hlYWQoKSk7IAogICAgICAgICAgICAgICAgICAgICAgdHB0bXAgPSBmaW5kX2Jlc3RfdHJlZV9ub2RlKHRwLT5hdWdtZW50cywgZ2V0X3RyZWVfaGVhZCgpLCBOVUxMKTsKQEAgLTUwNTcsNiArNTI2NiwxOSBAQAogICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgdHB0bXAgPSB0cDsKICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICBpZiAoc3RyY21wKCJpbXBsaWVkIiwga2V5KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAvKiBvbmx5IHRoZSBsYXN0IGluZGV4IGNhbiBiZSBpbXBsaWVkICovCisgICAgICAgICAgICAgICAgICAgICBpbnQgaXNpbXBsaWVkID0gMDsKKyAgICAgICAgICAgICAgICAgICAgIGlmICh0cHRtcCAmJiB0cHRtcC0+aW5kZXhlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihpcD10cHRtcC0+aW5kZXhlczsgaXAtPm5leHQ7IGlwID0gaXAtPm5leHQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgaXNpbXBsaWVkID0gaXAtPmlzaW1wbGllZDsKKyAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgIHN2X3NldGl2KHJldCwgaXNpbXBsaWVkKTsKKyAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgIGlmIChzdHJuY21wKCJpbmRleGVzIiwga2V5LCBzdHJsZW4oa2V5KSkpIGJyZWFrOworICAgICAgICAgICAgICAgICBpbmRleF9hdiA9IG5ld0FWKCk7CiAgICAgICAgICAgICAgICAgIGlmICh0cHRtcCkKICAgICAgICAgICAgICAgICAgICAgIGZvcihpcD10cHRtcC0+aW5kZXhlczsgaXAgIT0gTlVMTDsgaXAgPSBpcC0+bmV4dCkgewogICAgICAgICAgICAgICAgICAgICAgICAgIGF2X3B1c2goaW5kZXhfYXYsbmV3U1ZwdigoaXAtPmlsYWJlbCksc3RybGVuKGlwLT5pbGFiZWwpKSk7CkBAIC01MjM4LDYgKzU0NjAsMTQgQEAKIAlTbm1wU2Vzc2lvbiAqc2Vzc19wdHIKIAlDT0RFOgogCXsKKwlpZihzZXNzX3B0ciAhPSBOVUxMKQorCXsKKyAJIGlmKGFwaV9tb2RlID09IFNOTVBfQVBJX1NJTkdMRSkKKwkgeworICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2UoIHNlc3NfcHRyICk7CisJIH0gZWxzZSB7IAogICAgICAgICAgICBzbm1wX2Nsb3NlKCBzZXNzX3B0ciApOworCSB9CisJfQogCX0KIApkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcGVybC9TTk1QL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzY0MmMKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL1NOTVAvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKQEAgLTAsMCArMSw4IEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25wcmludF9vYmppZCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNucHJpbnRfdmFsdWUpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShmaW5kX21vZHVsZSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGdldF90Y19kZXNjcmlwdGlvbikKKwpkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL3QvYXN5bmMudCBiL3BlcmwvU05NUC90L2FzeW5jLnQKaW5kZXggYjFjODZjNi4uZjNmYjM4ZCAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL3QvYXN5bmMudAorKysgYi9wZXJsL1NOTVAvdC9hc3luYy50CkBAIC0xNyw3ICsxNyw3IEBACiB1c2UgdmFycyBxdygkYWdlbnRfcG9ydCAkY29tbSAkYWdlbnRfaG9zdCk7CiAKIGlmICgkXk8gPX4gL3dpbjMyL2kpIHsKLSAgd2FybiAiV2luMzIgZGV0ZWN0ZWQgLSBza2lwcGluZyBhc3luYyBjYWxsc1xuIjsKKyAgd2FybiAiV2luMzIvV2luNjQgZGV0ZWN0ZWQgLSBza2lwcGluZyBhc3luYyBjYWxsc1xuIjsKICAgZXhpdDsKIH0KIApkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL3QvYnVsa3dhbGsudCBiL3BlcmwvU05NUC90L2J1bGt3YWxrLnQKaW5kZXggNjBmMTBiNS4uMmQxM2U3YiAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL3QvYnVsa3dhbGsudAorKysgYi9wZXJsL1NOTVAvdC9idWxrd2Fsay50CkBAIC0zMjYsNyArMzI2LDcgQEAKIAkJCSAgICBbJ2lmU3BlZWQnXSwgWydpZkRlc2NyJ10pOwkgIyBSZXBlYXRlZCB2YXJpYWJsZXMuCiAKIGlmICgkXk8gPX4gL3dpbjMyL2kpIHsKLSAgd2FybiAiV2luMzIgZGV0ZWN0ZWQgLSBza2lwcGluZyBhc3luYyBjYWxsc1xuIjsKKyAgd2FybiAiV2luMzIvV2luNjQgZGV0ZWN0ZWQgLSBza2lwcGluZyBhc3luYyBjYWxsc1xuIjsKIH0KIGVsc2UgewogICBAbGlzdCA9ICRzMS0+YnVsa3dhbGsoMiwgMTYsICR2YXJzLCBbIFwmYXN5bmNfY2IxLCAkdmFycyBdICk7CmRpZmYgLS1naXQgYS9wZXJsL1NOTVAvdC9ub3RpZnkudCBiL3BlcmwvU05NUC90L25vdGlmeS50CmluZGV4IDQzNDIzN2YuLjcyNjAwZmEgMTAwNjQ0Ci0tLSBhL3BlcmwvU05NUC90L25vdGlmeS50CisrKyBiL3BlcmwvU05NUC90L25vdGlmeS50CkBAIC0xMCw3ICsxMCw3IEBACiAgICAgJEVOVnsnTUlCRElSUyd9ID0gJysnIC4gYWJzX3BhdGgoIi4uLy4uL21pYnMiKTsKIH0KIHVzZSBUZXN0OwotQkVHSU4geyAkbiA9IDEwOyBwbGFuIHRlc3RzID0+ICRuIH0KK0JFR0lOIHsgJG4gPSAxMTsgcGxhbiB0ZXN0cyA9PiAkbiB9CiB1c2UgU05NUDsKIHVzZSB2YXJzIHF3KCRhZ2VudF9wb3J0ICRjb21tICRjb21tMiAkdHJhcF9wb3J0ICRhZ2VudF9ob3N0ICRzZWNfbmFtZSAkcHJpdl9wYXNzICRhdXRoX3Bhc3MgJGJhZF9uYW1lKTsKIHJlcXVpcmUgJ3Qvc3RhcnRhZ2VudC5wbCc7CkBAIC0yMSwyMCArMjEsMjAgQEAKIG15ICRnZW5lcmljID0gJ3NwZWNpZmljJzsKIAogIyAgICAgICAgICAgICAgICAgICAgICAgICBWMSB0cmFwIHRlc3RpbmcKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDEgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDEgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgRmlyZSB1cCBhIHRyYXAgc2Vzc2lvbi4KIG15ICRzMSA9CiAgICAgbmV3IFNOTVA6OlNlc3Npb24gKERlc3RIb3N0PT4kYWdlbnRfaG9zdCxWZXJzaW9uPT4xLENvbW11bml0eT0+JGNvbW0sUmVtb3RlUG9ydD0+JHRyYXBfcG9ydCk7CiBvayhkZWZpbmVkKCRzMSkpOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgMiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDIgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgdGVzdCB2MSB0cmFwCiBpZiAoZGVmaW5lZCgkczEpKSB7CiAgICRyZXMgPSAkczEtPnRyYXAoZW50ZXJwcmlzZSA9PiAkZW50ZXJwcmlzZSwgYWdlbnQ9PiRhZ2VudF9ob3N0LCBnZW5lcmljPT4kZ2VuZXJpYyxbW3N5c0NvbnRhY3QsIDAsICdyb290QGxvY2FsaG9zdCddLCBbc3lzTG9jYXRpb24sIDAsICdoZXJlJ11dICk7CiB9CiBvaygkcmVzID1+IC9eMCBidXQgdHJ1ZS8pOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgMyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAzICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHRlc3Qgd2l0aCB3cm9uZyB2YXJiaW5kCiB1bmRlZiAkcmVzOwogaWYgKGRlZmluZWQoJHMxKSkgewpAQCAtNDUsMTIgKzQ1LDEyIEBACiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIAogIyAgICAgICAgICAgICAgICAgICAgICBWMiB0ZXN0aW5nCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyA0ICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgNCAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBGaXJlIHVwIGEgdjIgdHJhcCBzZXNzaW9uLgogbXkgJHMyID0KICAgICBuZXcgU05NUDo6U2Vzc2lvbiAoVmVyc2lvbj0+MiwgRGVzdEhvc3Q9PiRhZ2VudF9ob3N0LENvbW11bml0eT0+JGNvbW0yLFJlbW90ZVBvcnQ9PiR0cmFwX3BvcnQpOwogb2soZGVmaW5lZCgkczIpKTsKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDUgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA1ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIHRlc3QgdjIgdHJhcAogdW5kZWYgJHJlczsKIGlmIChkZWZpbmVkKCRzMikpIHsKQEAgLTU4LDcgKzU4LDcgQEAKICAgI3ByaW50KCJyZXMgaXMgJHJlc1xuIik7CiB9CiBvaygkcmVzID1+IC9eMCBidXQgdHJ1ZS8pOwotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDYgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDYgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKICMgbm8gdHJhcG9pZCBhbmQgdXB0aW1lIGdpdmVuLiBTaG91bGQgdGFrZSBkZWZhdWx0cy4uLgogbXkgJHJldDsKIGlmIChkZWZpbmVkKCRzMikpIHsKQEAgLTY2LDI3ICs2NiwzNSBAQAogICAjcHJpbnQoInJlcyBpcyAkcmV0XG4iKTsKIH0KIG9rKGRlZmluZWQoJHJldCkpOworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA3ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIG5vIHZhcmJpbmQgbGlzdCBnaXZlbi4KK3VuZGVmICRyZXM7CitpZiAoZGVmaW5lZCgkczIpKSB7CisgICRyZXMgPSAkczItPnRyYXAodHJhcG9pZD0+J2NvbGRTdGFydCcpOworICAjcHJpbnQoInJlcyBpcyAkcmVzXG4iKTsKK30KK29rKGRlZmluZWQoJHJlcykgJiYgJHJlcyA9fiAvXjAgYnV0IHRydWUvKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAKICMgICAgICAgICAgICAgICAgICAgICB2MyB0ZXN0aW5nCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIDcgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgOCAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBGaXJlIHVwIGEgdjMgdHJhcCBzZXNzaW9uLgogbXkgJHMzID0gbmV3IFNOTVA6OlNlc3Npb24oVmVyc2lvbj0+MywgRGVzdEhvc3Q9PiAkYWdlbnRfaG9zdCwgUmVtb3RlUG9ydD0+JHRyYXBfcG9ydCwgU2VjTmFtZSA9PiAkc2VjX25hbWUpOwogb2soZGVmaW5lZCgkczMpKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICA4ICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgOSAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogaWYgKGRlZmluZWQoJHMzKSkgewogICAkcmVzID0gJHMzLT5pbmZvcm0odXB0aW1lPT4xMTEsIHRyYXBvaWQ9Pidjb2xkU3RhcnQnLCBbW3N5c0NvbnRhY3QsIDAsICdyb290QGxvY2FsaG9zdCddLCBbc3lzTG9jYXRpb24sIDAsICdoZXJlJ11dICk7CiB9CiBvaygkcmVzID1+IC9eMCBidXQgdHJ1ZS8pOwogCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyA5ICMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIDEwICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIEZpcmUgdXAgYSB2MyB0cmFwIHNlc3Npb24uCiAkczMgPSBuZXcgU05NUDo6U2Vzc2lvbihWZXJzaW9uPT4zLCBEZXN0SG9zdD0+ICRhZ2VudF9ob3N0LCBSZW1vdGVQb3J0PT4kdHJhcF9wb3J0LCBTZWNOYW1lID0+ICRzZWNfbmFtZSwgU2VjTGV2ZWwgPT4gYXV0aFByaXYsIEF1dGhQYXNzID0+ICRhdXRoX3Bhc3MsIFByaXZQYXNzID0+ICRwcml2X3Bhc3MpOwogb2soZGVmaW5lZCgkczMpKTsKIAotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAxMCAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgMTEgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIHVuZGVmICRyZXM7CiBpZiAoZGVmaW5lZCgkczMpKSB7CiAgICAgJHJlcyA9ICRzMy0+aW5mb3JtKHVwdGltZT0+MTExLCB0cmFwb2lkPT4nY29sZFN0YXJ0JywgW1tzeXNDb250YWN0LCAwLCAncm9vdEBsb2NhbGhvc3QnXSwgW3N5c0xvY2F0aW9uLCAwLCAnaGVyZSddXSApOwpkaWZmIC0tZ2l0IGEvcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbCBiL3BlcmwvU05NUC90L3N0YXJ0YWdlbnQucGwKaW5kZXggOTVjZDM4ZS4uM2U5MmMxMiAxMDA2NDQKLS0tIGEvcGVybC9TTk1QL3Qvc3RhcnRhZ2VudC5wbAorKysgYi9wZXJsL1NOTVAvdC9zdGFydGFnZW50LnBsCkBAIC0zOSw0MyArMzksNTAgQEAKICAgcmVxdWlyZSBXaW4zMjo6UHJvY2VzczsKIH0KIAotc3ViIHNubXB0ZXN0X2NsZWFudXAgewotICAgIHNsZWVwIDE7ICMgc3RyYW5nZWx5IHdlIG5lZWQgdG8gd2FpdCBmb3IgcGlkIGZpbGVzIHRvIGFwcGVhciA/PwotICAgIGlmICgoLWUgInQvc25tcGQucGlkIikgJiYgKC1yICJ0L3NubXBkLnBpZCIpKSB7Ci0gICAgICAgICN3YXJuICJcblN0b3BwaW5nIGFnZW50cyBmb3IgdGVzdCBzY3JpcHQgJDBcbiI7Ci0gICAgICAgICMgTWFraW5nIHN1cmUgdGhhdCBhbnkgcnVubmluZyBhZ2VudHMgYXJlIGtpbGxlZC4KLQkjIHdhcm4gImtpbGxpbmcgc25tcGQ6IiwgYGNhdCB0L3NubXBkLnBpZGAsICJcbiI7Ci0gICAgICAgIGlmICgkXk8gIX4gL3dpbjMyL2kpIHsKLSAgICAgICAgICBzeXN0ZW0gImtpbGwgYGNhdCB0L3NubXBkLnBpZGAgPiAvZGV2L251bGwgMj4mMSI7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgb3BlbihILCAiPHQvc25tcGQucGlkIik7Ci0gICAgICAgICAgbXkgJHBpZCA9ICg8SD4pOwotICAgICAgICAgIGNsb3NlIChIKTsKLSAgICAgICAgICBpZiAoJHBpZCA+IDApIHsKLSAgICAgICAgICAgIFdpbjMyOjpQcm9jZXNzOjpLaWxsUHJvY2VzcygkcGlkLCAwKQotICAgICAgICAgIH0KLSAgICAgICAgfQotCXVubGluayAidC9zbm1wZC5waWQiOworc3ViIHJ1bl9hc3luYyB7CisgIG15ICgkcGlkZmlsZSwgJGNtZCwgQGFyZ3MpID0gQF87CisgIGlmICgtciAiJGNtZCIgYW5kIC14ICIkY21kIikgeworICAgIGlmICgkXk8gPX4gL3dpbjMyL2kpIHsKKyAgICAgICRjbWQgPX4gcy9cLy9cXC9nOworICAgICAgc3lzdGVtICJzdGFydCBcIiRjbWRcIiAvbWluIGNtZCAvYyBcIiRjbWQgQGFyZ3MgMj4mMVwiIjsKKyAgICB9IGVsc2UgeworICAgICAgc3lzdGVtICIkY21kIEBhcmdzIDI+JjEiOwogICAgIH0KLSAgICBpZiAoKC1lICJ0L3NubXB0cmFwZC5waWQiKSAmJiAoLXIgInQvc25tcHRyYXBkLnBpZCIpKSB7Ci0gICAgICAgICMgTWFraW5nIHN1cmUgdGhhdCBhbnkgcnVubmluZyBhZ2VudHMgYXJlIGtpbGxlZC4KLQkjIHdhcm4gImtpbGxpbmcgc25tcHRyYXA6IiwgYGNhdCB0L3NubXB0cmFwZC5waWRgLCAiXG4iOwotICAgICAgICBpZiAoJF5PICF+IC93aW4zMi9pKSB7Ci0gICAgICAgICAgc3lzdGVtICJraWxsIGBjYXQgdC9zbm1wdHJhcGQucGlkYCA+IC9kZXYvbnVsbCAyPiYxIjsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAgICBvcGVuKEgsICI8dC9zbm1wdHJhcGQucGlkIik7Ci0gICAgICAgICAgbXkgJHBpZCA9ICg8SD4pOwotICAgICAgICAgIGNsb3NlIChIKTsKLSAgICAgICAgICBpZiAoJHBpZCA+IDApIHsKLSAgICAgICAgICAgIFdpbjMyOjpQcm9jZXNzOjpLaWxsUHJvY2VzcygkcGlkLCAwKQotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAgIAotCXVubGluayAidC9zbm1wdHJhcGQucGlkIjsKKyAgICAjIFdhaXQgYXQgbW9zdCB0aHJlZSBzZWNvbmRzIGZvciB0aGUgcGlkIGZpbGUgdG8gYXBwZWFyLgorICAgIGZvciAoJGkgPSAwOyAoJGkgPCAzKSAmJiAhICgtciAiJHBpZGZpbGUiKTsgKyskaSkgeworICAgICAgc2xlZXAgMTsKICAgICB9CisgIH0gZWxzZSB7CisgICAgd2FybiAiQ291bGRuJ3QgcnVuICRjbWRcbiI7CisgIH0KIH0KKworc3ViIHNubXB0ZXN0X2NsZWFudXAgeworICBraWxsX2J5X3BpZF9maWxlKCJ0L3NubXBkLnBpZCIpOworICB1bmxpbmsoInQvc25tcGQucGlkIik7CisgIGtpbGxfYnlfcGlkX2ZpbGUoInQvc25tcHRyYXBkLnBpZCIpOworICB1bmxpbmsoInQvc25tcHRyYXBkLnBpZCIpOworfQorCitzdWIga2lsbF9ieV9waWRfZmlsZSB7CisgIGlmICgoLWUgIiRfWzBdIikgJiYgKC1yICIkX1swXSIpKSB7CisgICAgaWYgKCReTyAhfiAvd2luMzIvaSkgeworICAgICAgIyBVbml4IG9yIFdpbmRvd3MgKyBDeWd3aW4uCisgICAgICBzeXN0ZW0gImtpbGwgYGNhdCAkX1swXWAgPiAvZGV2L251bGwgMj4mMSI7CisgICAgfSBlbHNlIHsKKyAgICAgICMgV2luZG93cyArIE1TVkMgb3IgV2luZG93cyArIE1pbkdXLgorICAgICAgb3BlbihILCAiPCRfWzBdIik7CisgICAgICBteSAkcGlkID0gKDxIPik7CisgICAgICBjbG9zZSAoSCk7CisgICAgICBpZiAoJHBpZCA+IDApIHsKKyAgICAgICAgV2luMzI6OlByb2Nlc3M6OktpbGxQcm9jZXNzKCRwaWQsIDApCisgICAgICB9CisgICAgfQorICB9Cit9CisKKworIyBTdG9wIGFueSBwcm9jZXNzZXMgc3RhcnRlZCBkdXJpbmcgYSBwcmV2aW91cyB0ZXN0Lgogc25tcHRlc3RfY2xlYW51cCgpOwogCiAjT3BlbiB0aGUgc25tcHRlc3QuY21kIGZpbGUgYW5kIGdldCB0aGUgaW5mbwpAQCAtOTgsNDggKzEwNSwyMSBAQAogICBkaWUgKCJDb3VsZCBub3Qgc3RhcnQgYWdlbnQuIENvdWxkbid0IGZpbmQgc25tcHRlc3QuY21kIGZpbGVcbiIpOwogfQogCisjIFN0YXJ0IHNubXBkIGFuZCBzbm1wdHJhcGQuCisKICN3YXJuICJcblN0YXJ0aW5nIGFnZW50cyBmb3IgdGVzdCBzY3JpcHQgJDBcbiI7CiAKLWlmICgkXk8gIX4gL3dpbjMyL2kpIHsKLSAgIyBVbml4Ci0gIGlmICgkc25tcGRfY21kKSB7Ci0gICAgaWYgKC1yICRzbm1wZF9jbWQgYW5kIC14ICRzbm1wZF9jbWQpIHsKLSAgICAgICRiYXNlZGlyID0gYHB3ZGA7Ci0gICAgICBjaG9tcCAkYmFzZWRpcjsKLSAgICAgIHN5c3RlbSAiJHNubXBkX2NtZCAtciAtTGYgdC9zbm1wdGVzdC5sb2cgLU0rJG1pYmRpciAtQyAtYyAkYmFzZWRpci90L3NubXB0ZXN0LmNvbmYgLXAgJGJhc2VkaXIvdC9zbm1wZC5waWQgJHthZ2VudF9ob3N0fToke2FnZW50X3BvcnR9ID4gL2Rldi9udWxsIDI+JjEiOwotICAgIH0gZWxzZSB7Ci0gICAgICB3YXJuKCJDb3VsZG4ndCBydW4gc25tcGRcbiIpOwotICAgIH0KLSAgfQotICBpZiAoJHNubXB0cmFwZF9jbWQpIHsKLSAgICBpZiAoLXIgJHNubXB0cmFwZF9jbWQgYW5kIC14ICRzbm1wdHJhcGRfY21kKSB7Ci0gICAgICBzeXN0ZW0gIiRzbm1wdHJhcGRfY21kIC1wIHQvc25tcHRyYXBkLnBpZCAtTSskbWliZGlyIC1DIC1jIHQvc25tcHRlc3QuY29uZiAtQyAke2FnZW50X2hvc3R9OiR7dHJhcF9wb3J0fSA+IC9kZXYvbnVsbCAyPiYxIjsKLSAgICB9IGVsc2UgewotICAgICAgd2FybigiQ291bGRuJ3QgcnVuIHNubXB0cmFwZFxuIik7Ci0gICAgfQotICB9CitteSAkc2NyaXB0bmFtZSA9ICJzbm1wdGVzdCI7CitpZiAoJDAgPX4gL150W1wvXFxdKC4qKVwudCQvKSB7CisgICRzY3JpcHRuYW1lID0gJDE7CiB9Ci1lbHNlIHsKLSAgIyBXaW5kb3dzCi0gIGlmICgkc25tcGRfY21kKSB7Ci0gICAgICBpZiAoLXIgJHNubXBkX2NtZCkgewotICAgICAgICAjcHJpbnQgU1RERVJSICJzdGFydCBcIlNOTVBEXCIgL21pbiBcIiRzbm1wZF9jbWRcIiAtciAtTGYgdC9zbm1wdGVzdC5sb2cgLUMgLWMgdC9zbm1wdGVzdC5jb25mIC1wIHQvc25tcGQucGlkICRhZ2VudF9wb3J0ID4gbnVsXG4iOwotICAgICAgc3lzdGVtICJzdGFydCBcIlNOTVBEXCIgL21pbiBcIiRzbm1wZF9jbWRcIiAtciAtTGYgdC9zbm1wdGVzdC5sb2cgLUMgLWMgdC9zbm1wdGVzdC5jb25mIC1wIHQvc25tcGQucGlkICRhZ2VudF9wb3J0ID4gbnVsIjsKLSAgICB9IGVsc2UgewotICAgICAgd2FybigiQ291bGRuJ3QgcnVuIHNubXBkXG4iKTsKLSAgICB9Ci0gIH0KLSAgaWYgKCRzbm1wdHJhcGRfY21kKSB7Ci0gICAgaWYgKC1yICRzbm1wdHJhcGRfY21kKSB7Ci0gICAgICAjcHJpbnQgU1RERVJSICJzdGFydCAvbWluIFwiU05NUFRSQVBEXCIgXCIkc25tcHRyYXBkX2NtZFwiIC1MZiB0L3NubXB0cmFwZHRlc3QubG9nIC1wIHQvc25tcHRyYXBkLnBpZCAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgJHRyYXBfcG9ydCA+IG51bFxuIjsKLSAgICAgIHN5c3RlbSAic3RhcnQgL21pbiBcIlNOTVBUUkFQRFwiIFwiJHNubXB0cmFwZF9jbWRcIiAtTGYgdC9zbm1wdHJhcGR0ZXN0LmxvZyAtcCB0L3NubXB0cmFwZC5waWQgLUMgLWMgdC9zbm1wdGVzdC5jb25mICR0cmFwX3BvcnQgPiBudWwiOwotICAgIH0gZWxzZSB7Ci0gICAgICB3YXJuKCJDb3VsZG4ndCBydW4gc25tcHRyYXBkXG4iKTsKLSAgICB9Ci0gIH0KLSAgc2xlZXAgMjsgIyBHaXZlIHByb2dyYW1zIHRpbWUgdG8gc3RhcnQKIAotfSAKK2lmICgkc25tcGRfY21kKSB7CisgIHJ1bl9hc3luYygidC9zbm1wZC5waWQiLCAiJHNubXBkX2NtZCIsICItciAtZCAtTGYgdC9zbm1wZC0kc2NyaXB0bmFtZS5sb2cgLU0rJG1pYmRpciAtQyAtYyB0L3NubXB0ZXN0LmNvbmYgLXAgdC9zbm1wZC5waWQgJHthZ2VudF9ob3N0fToke2FnZW50X3BvcnR9ID50L3NubXBkLSRzY3JpcHRuYW1lLnN0ZGVyciIpOworfQoraWYgKCRzbm1wdHJhcGRfY21kKSB7CisgIHJ1bl9hc3luYygidC9zbm1wdHJhcGQucGlkIiwgIiRzbm1wdHJhcGRfY21kIiwgIi1kIC1MZiB0L3NubXB0cmFwZC0kc2NyaXB0bmFtZS5sb2cgLXAgdC9zbm1wdHJhcGQucGlkIC1NKyRtaWJkaXIgLUMgLWMgdC9zbm1wdGVzdC5jb25mIC1DICR7YWdlbnRfaG9zdH06JHt0cmFwX3BvcnR9ID50L3NubXB0cmFwZC0kc2NyaXB0bmFtZS5zdGRlcnIiKTsKK30KIAogMTsKIApkaWZmIC0tZ2l0IGEvcGVybC9UcmFwUmVjZWl2ZXIvTWFrZWZpbGUuUEwgYi9wZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTAppbmRleCA1Yzk0NjNhLi44NzRlZTIxIDEwMDY0NAotLS0gYS9wZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTAorKysgYi9wZXJsL1RyYXBSZWNlaXZlci9NYWtlZmlsZS5QTApAQCAtNTcsMTQgKzU3LDEzIEBACiAgICAgfQogCiAgICAgbXkgKCRzbm1wX2xpYiwgJHNubXBfbGxpYiwgJHNlcCk7Ci0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKICAgICAgICRhZ2VudF9saW5rX2xpYiA9ICduZXRzbm1wYWdlbnQnOwotICAgICAgJGhlbHBlcnNfbGlua19saWIgPSAnbmV0c25tcGhlbHBlcnMnOwogICAgICAgJG1pYnNfbGlua19saWIgPSAnbmV0c25tcG1pYnMnOwogICAgICAgJHRyYXBkX2xpbmtfbGliID0gJ25ldHNubXB0cmFwZCc7CiAKQEAgLTc2LDcgKzc1LDcgQEAKICAgICAgIH0KICAgICAKICAgICAgIGlmIChsYygkb3B0cy0+eydpbnNvdXJjZSd9KSBlcSAidHJ1ZSIpIHsKLQkkUGFyYW1zeydMSUJTJ30gPSAiLUwkYmFzZWRpclxcd2luMzJcXCRsaWJfZGlyXFwgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAtbCRoZWxwZXJzX2xpbmtfbGliICIgLgorCSRQYXJhbXN7J0xJQlMnfSA9ICItTCRiYXNlZGlyXFx3aW4zMlxcJGxpYl9kaXJcXCAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliICIgLgogICAgICAgICAgICAgICAgICItbCRtaWJzX2xpbmtfbGliIC1sJHRyYXBkX2xpbmtfbGliICI7CiAgICAgICB9CiAgICAgICBlbHNlIHsKQEAgLTEwMCw3ICs5OSw3IEBACiAJICAgICRMaWJEaXJzWzBdID1+IHMvXFwkLy87CiAJICB9CiAJfQotCSRQYXJhbXN7TElCU30gPSAiLUwkTGliRGlyIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgLWwkaGVscGVyc19saW5rX2xpYiAtbCRtaWJzX2xpbmtfbGliIC1sJHRyYXBkX2xpbmtfbGliICI7CisJJFBhcmFtc3tMSUJTfSA9ICItTCRMaWJEaXIgLWwkc25tcF9saW5rX2xpYiAtbCRhZ2VudF9saW5rX2xpYiAtbCRtaWJzX2xpbmtfbGliIC1sJHRyYXBkX2xpbmtfbGliICI7CiAgICAgICB9CiAKICAgICAgICRQYXJhbXN7J0lOQyd9ID0gIi1JJGJhc2VkaXJcXGluY2x1ZGVcXCAtSSRiYXNlZGlyXFxpbmNsdWRlXFxuZXQtc25tcFxcIC1JJGJhc2VkaXJcXHdpbjMyXFwgIjsKQEAgLTEwOCw3ICsxMDcsNyBAQAogICAgIGVsc2UgewogCSRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsKIAkkUGFyYW1zeydMRERMRkxBR1MnfSA9ICIkQ29uZmlne2xkZGxmbGFnc30gIiAuIGAkb3B0cy0+eyduc2NvbmZpZyd9IC0tbGRmbGFnc2A7Ci0JJFBhcmFtc3snTElCUyd9ID0gJy1sbmV0c25tcHRyYXBkIC1sbmV0c25tcGFnZW50IC1sbmV0c25tcCc7CisJJFBhcmFtc3snTElCUyd9ID0gJy1sbmV0c25tcHRyYXBkICcgLiBgJG9wdHMtPnsnbnNjb25maWcnfSAtLWJhc2UtYWdlbnQtbGlic2A7CiAJY2hvbXAoJFBhcmFtc3snTElCUyd9KTsKIAlpZiAoISRFTlZ7J05FVFNOTVBfQ0NGTEFHUyd9KSB7CiAJICAgICRQYXJhbXN7J0NDRkxBR1MnfSA9IGAkb3B0cy0+eyduc2NvbmZpZyd9IC0tY2ZsYWdzYDsKQEAgLTExOSw3ICsxMTgsNyBAQAogCX0KIAogCWlmIChsYygkb3B0cy0+eydpbnNvdXJjZSd9KSBlcSAidHJ1ZSIpIHsKLSAgICAgICAgICAgICRQYXJhbXN7J0xJQlMnfSA9ICItTC4uLy4uL2FwcHMvLmxpYnMgLUwuLi8uLi9hcHBzIC1MLi4vLi4vYWdlbnQvLmxpYnMgLUwuLi8uLi9hZ2VudCAtTC4uLy4uL2FnZW50L2hlbHBlcnMvLmxpYnMgLUwuLi8uLi9hZ2VudC9oZWxwZXJzIC1MLi4vLi4vc25tcGxpYi8ubGlicyAtTC4uLy4uL3NubXBsaWIgIiAuICRQYXJhbXN7J0xJQlMnfTsKKyAgICAgICAgICAgICRQYXJhbXN7J0xJQlMnfSA9ICItTC4uLy4uL2FwcHMvLmxpYnMgLUwuLi8uLi9hcHBzIC1MLi4vLi4vYWdlbnQvLmxpYnMgLUwuLi8uLi9hZ2VudCAtTC4uLy4uL3NubXBsaWIvLmxpYnMgLUwuLi8uLi9zbm1wbGliICIgLiAkUGFyYW1zeydMSUJTJ307CiAJICAgICRQYXJhbXN7J0NDRkxBR1MnfSA9ICItSS4uLy4uL2luY2x1ZGUgIiAuICRQYXJhbXN7J0NDRkxBR1MnfTsKIAl9IGVsc2UgewogICAgICAgICAgICAgJFBhcmFtc3snTElCUyd9ID0gYCRvcHRzLT57J25zY29uZmlnJ30gLS1saWJkaXJgIC4gIiAkUGFyYW1zeydMSUJTJ30iOwpAQCAtMTQyLDcgKzE0MSw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0yMjUsNyArMjI0LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtIGIvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnBtCmluZGV4IDNhNTQyNWQuLjg1YTA0MWEgMTAwNjQ0Ci0tLSBhL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci5wbQorKysgYi9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIucG0KQEAgLTQ3LDcgKzQ3LDcgQEAKIAlORVRTTk1QVFJBUERfUFJFX0hBTkRMRVIKICk7CiAKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiAjIHN1YiBuZXcgewogIyAgICAgbXkgJHR5cGUgPSBzaGlmdDsKZGlmZiAtLWdpdCBhL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cyBiL3BlcmwvVHJhcFJlY2VpdmVyL1RyYXBSZWNlaXZlci54cwppbmRleCA4NzEzZWZkLi5hNGZjMTM2IDEwMDY0NAotLS0gYS9wZXJsL1RyYXBSZWNlaXZlci9UcmFwUmVjZWl2ZXIueHMKKysrIGIvcGVybC9UcmFwUmVjZWl2ZXIvVHJhcFJlY2VpdmVyLnhzCkBAIC05OSw3ICs5OSw3IEBACiAgICAgICAgIGNoYXIgKnRzdHIgPSB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHBkdS0+dHJhbnNwb3J0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCk7CiAgICAgICAgIFNUT1JFUERVcygicmVjZWl2ZWRmcm9tIiwgdHN0cik7Ci0gICAgICAgIGZyZWUodHN0cik7CisgICAgICAgIG5ldHNubXBfZnJlZSh0c3RyKTsKICAgICB9CiAKIApAQCAtMTEzLDcgKzExMyw3IEBACiAgICAgZm9yKHZiID0gcGR1LT52YXJpYWJsZXM7IHZiOyB2YiA9IHZiLT5uZXh0X3ZhcmlhYmxlKSB7CiAKICAgICAgICAgLyogZ2V0IHRoZSBvaWQgKi8KLSAgICAgICAgbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9vaWQpOworICAgICAgICBvID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX29pZCkpOwogICAgICAgICBvLT5uYW1lID0gby0+bmFtZWJ1ZjsKICAgICAgICAgby0+bGVuID0gdmItPm5hbWVfbGVuZ3RoOwogICAgICAgICBtZW1jcHkoby0+bmFtZSwgdmItPm5hbWUsIHZiLT5uYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKQEAgLTE3OCw3ICsxNzgsNyBAQAogCiAgICAgICAgIGF2X3B1c2godmJhLHRtcGFycmF5W2ldKTsKICAgICAgICAgYXZfcHVzaCh2YmEsbmV3U1Zwdm4oKGNoYXIgKikgb3V0YnVmLCBvb19sZW4pKTsKLSAgICAgICAgZnJlZShvdXRidWYpOworICAgICAgICBuZXRzbm1wX2ZyZWUob3V0YnVmKTsKICAgICAgICAgYXZfcHVzaCh2YmEsbmV3U1Zpdih2Yi0+dHlwZSkpOwogICAgICAgICBhdl9wdXNoKHZhcmJpbmRzLCAoU1YgKikgbmV3UlZfbm9pbmMoKFNWICopIHZiYSkpOwogICAgIH0KQEAgLTIxNCw3ICsyMTQsNyBAQAogCVNWICpydiA9IFBPUHM7CiAKIAlpZiAoU3ZUWVBFKHJ2KSAhPSBTVnRfSVYpIHsKLQkgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiIHBlcmwgY2FsbGJhY2sgZnVuY3Rpb24gJXAgcmV0dXJuZWQgYSBzY2FsYXIgb2YgdHlwZSAlZCBpbnN0ZWFkIG9mIGFuIGludGVnZXIsIGFzc3VtaW5nICVkIChORVRTTk1QVFJBUERfSEFORExFUl9PSylcbiIsIHBjYWxsYmFjaywgU3ZUWVBFKHJ2KSwgTkVUU05NUFRSQVBEX0hBTkRMRVJfT0spOworCSAgc25tcF9sb2coTE9HX1dBUk5JTkcsICIgcGVybCBjYWxsYmFjayBmdW5jdGlvbiAlcCByZXR1cm5lZCBhIHNjYWxhciBvZiB0eXBlICVsdSBpbnN0ZWFkIG9mIGFuIGludGVnZXIsIGFzc3VtaW5nICVkIChORVRTTk1QVFJBUERfSEFORExFUl9PSylcbiIsIHBjYWxsYmFjaywgKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHJ2KSwgTkVUU05NUFRSQVBEX0hBTkRMRVJfT0spOwogCX0KIAllbHNlIHsKIAkgIGludCBydmkgPSAoSVYpU3ZJVngocnYpOwpAQCAtMzAwLDcgKzMwMCw3IEBACiAgICAgICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAgICAgaWYgKGhhbmRsZXIpIHsKLSAgICAgICAgICAgICAgICBjYl9kYXRhID0gU05NUF9NQUxMT0NfVFlQRURFRih0cmFwZF9jYl9kYXRhKTsKKyAgICAgICAgICAgICAgICBjYl9kYXRhID0gbWFsbG9jKHNpemVvZih0cmFwZF9jYl9kYXRhKSk7CiAgICAgICAgICAgICAgICAgY2JfZGF0YS0+cGVybF9jYiA9IG5ld1NWc3YocGVybGNhbGxiYWNrKTsKICAgICAgICAgICAgICAgICBoYW5kbGVyLT5oYW5kbGVyX2RhdGEgPSBjYl9kYXRhOwogICAgICAgICAgICAgICAgIGhhbmRsZXItPmF1dGh0eXBlcyA9ICgxIDw8IFZBQ01fVklFV19FWEVDVVRFKTsKZGlmZiAtLWdpdCBhL3BlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcGVybC9UcmFwUmVjZWl2ZXIvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQzMzFlMwotLS0gL2Rldi9udWxsCisrKyBiL3BlcmwvVHJhcFJlY2VpdmVyL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKG5ldHNubXBfYWRkX2RlZmF1bHRfdHJhcGhhbmRsZXIpCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShtZW1vcnlfZnJlZSkKKwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9NYWtlZmlsZS5QTCBiL3BlcmwvYWdlbnQvTWFrZWZpbGUuUEwKaW5kZXggYjRiMzU4YS4uNGY3YmVlMyAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9NYWtlZmlsZS5QTAorKysgYi9wZXJsL2FnZW50L01ha2VmaWxlLlBMCkBAIC0zMCwxNCArMzAsMTMgQEAKICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CiAgICAgICAkYWdlbnRfbGlua19saWIgPSAnbmV0c25tcGFnZW50JzsKLSAgICAgICRoZWxwZXJzX2xpbmtfbGliID0gJ25ldHNubXBoZWxwZXJzJzsKICAgICAgICRtaWJzX2xpbmtfbGliID0gJ25ldHNubXBtaWJzJzsKIAogICAgICAgaWYgKGxjKCRvcHRzLT57J2RlYnVnJ30pIGVxICJ0cnVlIikgewpAQCAtNDgsNyArNDcsNyBAQAogICAgICAgfQogICAgIAogICAgICAgaWYgKGxjKCRvcHRzLT57J2luc291cmNlJ30pIGVxICJ0cnVlIikgewotCSRQYXJhbXN7J0xJQlMnfSA9ICItTCRiYXNlZGlyXFx3aW4zMlxcJGxpYl9kaXJcXCAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliIC1sJGhlbHBlcnNfbGlua19saWIgIiAuCisJJFBhcmFtc3snTElCUyd9ID0gIi1MJGJhc2VkaXJcXHdpbjMyXFwkbGliX2RpclxcIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgIiAuCiAgICAgICAgICAgICAgICAgIi1sJG1pYnNfbGlua19saWIiOwogICAgICAgfQogICAgICAgZWxzZSB7CkBAIC03Miw3ICs3MSw3IEBACiAJICAgICRMaWJEaXJzWzBdID1+IHMvXFwkLy87CiAJICB9CiAJfQotCSRQYXJhbXN7TElCU30gPSAiLUwkTGliRGlyIC1sJHNubXBfbGlua19saWIgLWwkYWdlbnRfbGlua19saWIgLWwkaGVscGVyc19saW5rX2xpYiAtbCRtaWJzX2xpbmtfbGliIjsKKwkkUGFyYW1ze0xJQlN9ID0gIi1MJExpYkRpciAtbCRzbm1wX2xpbmtfbGliIC1sJGFnZW50X2xpbmtfbGliIC1sJG1pYnNfbGlua19saWIiOwogICAgICAgfQogCiAgICAgICAkUGFyYW1zeydJTkMnfSA9ICItSSRiYXNlZGlyXFxpbmNsdWRlXFwgLUkkYmFzZWRpclxcaW5jbHVkZVxcbmV0LXNubXBcXCAtSSRiYXNlZGlyXFx3aW4zMlxcICI7CkBAIC04Nyw3ICs4Niw3IEBACiAJJFBhcmFtc3snQ0NGTEFHUyd9IC49ICIgIiAuICRDb25maWd7J2NjZmxhZ3MnfTsKICAgICAgICAgJGxpYl92ZXJzaW9uID0gYCRvcHRzLT57J25zY29uZmlnJ30gLS12ZXJzaW9uYDsKIAlpZiAobGMoJG9wdHMtPnsnaW5zb3VyY2UnfSkgZXEgInRydWUiKSB7Ci0JICAgICRQYXJhbXN7J0xJQlMnfSA9ICItTC4uLy4uL3NubXBsaWIvLmxpYnMgLUwuLi8uLi9zbm1wbGliLyAtTC4uLy4uL2FnZW50Ly5saWJzIC1MLi4vLi4vYWdlbnQvIC1MLi4vLi4vYWdlbnQvaGVscGVycy8ubGlicyAtTC4uLy4uL2FnZW50L2hlbHBlcnMvICIgLiAkUGFyYW1zeydMSUJTJ307CisJICAgICRQYXJhbXN7J0xJQlMnfSA9ICItTC4uLy4uL3NubXBsaWIvLmxpYnMgLUwuLi8uLi9zbm1wbGliLyAtTC4uLy4uL2FnZW50Ly5saWJzIC1MLi4vLi4vYWdlbnQvICIgLiAkUGFyYW1zeydMSUJTJ307CiAJICAgICRQYXJhbXN7J0NDRkxBR1MnfSA9ICItSS4uLy4uL2luY2x1ZGUgIiAuICRQYXJhbXN7J0NDRkxBR1MnfTsKICMJfSBlbHNlIHsKIAkgICAgJFBhcmFtc3snTElCUyd9ID0gYCRvcHRzLT57J25zY29uZmlnJ30gLS1saWJkaXJgIC4gJFBhcmFtc3snTElCUyd9OwpAQCAtMTA5LDcgKzEwOCw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xOTIsNyArMTkxLDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMIGIvcGVybC9hZ2VudC9TdXBwb3J0L01ha2VmaWxlLlBMCmluZGV4IDNhNGYyMDAuLjQ4ODE1YjYgMTAwNjQ0Ci0tLSBhL3BlcmwvYWdlbnQvU3VwcG9ydC9NYWtlZmlsZS5QTAorKysgYi9wZXJsL2FnZW50L1N1cHBvcnQvTWFrZWZpbGUuUEwKQEAgLTI5LDkgKzI5LDkgQEAKICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwogCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogICAgICAgJG9wdHMgPSBOZXRTTk1QR2V0T3B0cygpOwkKLSAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIjsKKyAgICAgICRQYXJhbXN7J0RFRklORSd9ID0gIi1ETVNWQ19QRVJMIC1EX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MgLURfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiOwogICAgICAgJHNlcCA9ICdcXCc7CiAgICAgICAkc25tcF9saWJfZmlsZSA9ICduZXRzbm1wLmxpYic7CiAgICAgICAkc25tcF9saW5rX2xpYiA9ICduZXRzbm1wJzsKQEAgLTEwMSw3ICsxMDEsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTg0LDcgKzE4NCw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvU3VwcG9ydC9TdXBwb3J0LnBtIGIvcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0KaW5kZXggZGE4Yzc3ZS4uMDNmNTRkOSAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0KKysrIGIvcGVybC9hZ2VudC9TdXBwb3J0L1N1cHBvcnQucG0KQEAgLTI2LDcgKzI2LDcgQEAKIEBJU0EgICAgICAgPSBxdyhFeHBvcnRlciBnZXRMZWFmKTsKIEBFWFBPUlQgICAgPSBxdyhyZWdpc3RlckFnZW50IGdldE9pZEVsZW1lbnQgc2V0T2lkRWxlbWVudCk7CiBARVhQT1JUX09LID0gcXcoKTsKLSRWRVJTSU9OID0gJzUuMDQwNCc7CiskVkVSU0lPTiA9ICc1LjA3MDMnOwogCiB1c2Ugc3RyaWN0OwogdXNlIHdhcm5pbmdzOwpkaWZmIC0tZ2l0IGEvcGVybC9hZ2VudC9hZ2VudC5wbSBiL3BlcmwvYWdlbnQvYWdlbnQucG0KaW5kZXggNjE4YTJjNi4uNDY1MDBmZiAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9hZ2VudC5wbQorKysgYi9wZXJsL2FnZW50L2FnZW50LnBtCkBAIC04Nyw3ICs4Nyw3IEBACiAJU05NUF9FUlJfQVVUSE9SSVpBVElPTkVSUk9SCiAJU05NUF9FUlJfTk9UV1JJVEFCTEUKICk7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogc3ViIEFVVE9MT0FEIHsKICAgICAjIFRoaXMgQVVUT0xPQUQgaXMgdXNlZCB0byAnYXV0b2xvYWQnIGNvbnN0YW50cyBmcm9tIHRoZSBjb25zdGFudCgpCkBAIC0xOTksNiArMTk5LDEyIEBACiAgICAgX19hZ2VudF9jaGVja19hbmRfcHJvY2VzcygkYmxvY2tpbmcgfHwgMCk7CiB9CiAKK3N1YiB1cHRpbWUgeworICAgIG15ICRzZWxmID0gc2hpZnQ7CisgICAgJHNlbGYtPm1heWJlX2luaXRfbGliKCk7CisgICAgcmV0dXJuIF91cHRpbWUoKTsKK30KKwogYm9vdHN0cmFwIE5ldFNOTVA6OmFnZW50ICRWRVJTSU9OOwogCiAjIFByZWxvYWRlZCBtZXRob2RzIGdvIGhlcmUuCkBAIC00OTAsNiArNDk2LDIwIEBACiAKIAkkcmVxdWVzdC0+c2V0UmVwZWF0KDUpOwogCisgICAgZ2V0U291cmNlSXAgKCkKKworCUdldHMgdGhlIElQdjQgYWRkcmVzcyBvZiB0aGUgZGV2aWNlIG1ha2luZyB0aGUgcmVxdWVzdCB0byB0aGUgaGFuZGxlci4KKworCXVzZSBTb2NrZXQ7CisJcHJpbnQgIlNvdXJjZTogIiwgaW5ldF9udG9hKCRyZXF1ZXN0LT5nZXRTb3VyY2VJcCgpKSwgIlxuIjsKKworICAgIGdldERlc3RJcCAoKQorCisJR2V0cyB0aGUgSVB2NCBhZGRyZXNzIG9mIHRoZSBkZXN0aW5hdGlvbiB0aGF0IHRoZSByZXF1ZXN0IHdhcyBzZW50IHRvLgorCisJdXNlIFNvY2tldDsKKwlwcmludCAiRGVzdGluYXRpb246ICIsIGluZXRfbnRvYSgkcmVxdWVzdC0+Z2V0RGVzdElwKCkpLCAiXG4iOworCiA9aGVhZDEgTU9ERVMKIAogCU1PREVfR0VUCmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L2FnZW50LnhzIGIvcGVybC9hZ2VudC9hZ2VudC54cwppbmRleCA1NjA2YzNjLi5jN2I1ZDlhIDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L2FnZW50LnhzCisrKyBiL3BlcmwvYWdlbnQvYWdlbnQueHMKQEAgLTE5LDYgKzE5LDEyIEBACiAKIHR5cGVkZWYgbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiAqTmV0U05NUF9fYWdlbnRfX25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb247CiAKKy8qCisgKiBuZWVkcyB0byBiZSBpbiBzeW5jIHdpdGggdGhlIGRlZmluaXRpb25zIGluIHNubXBsaWIvc25tcFVEUERvbWFpbi5jCisgKiBhbmQgc25tcGxpYi9zbm1wVENQRG9tYWluLmMKKyAqLwordHlwZWRlZiBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyIG5ldHNubXBfdWRwX2FkZHJfcGFpcjsKKwogdHlwZWRlZiBzdHJ1Y3QgaGFuZGxlcl9jYl9kYXRhX3MgewogICAgU1YgKnBlcmxfY2I7CiB9IGhhbmRsZXJfY2JfZGF0YTsKQEAgLTU0LDEyICs2MCwxNCBAQAogc3RhdGljIGludCBjb25zdGFudF9NT0RFX1NFVF9SKGRvdWJsZSAqdmFsdWUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGludCBsZW4pCiB7CiAgICAgc3dpdGNoIChsZW4gPj0gMTYgPyBuYW1lWzE2XSA6IC0xKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgJzEnOgogCVRFU1RfQ09OU1RBTlQodmFsdWUsIG5hbWUsIE1PREVfU0VUX1JFU0VSVkUxKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSAnMic6CiAJVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgTU9ERV9TRVRfUkVTRVJWRTIpOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICB9CiAgICAgcmV0dXJuIEVJTlZBTDsKIH0KQEAgLTExNSw2ICsxMjMsNyBAQAogICAgICAgICByZXR1cm4gRUlOVkFMOwogCiAgICAgc3dpdGNoIChsZW4gPj0gOSA/IG5hbWVbOV0gOiAtMSkgeworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICBjYXNlICdBJzoKICAgICAgICAgVEVTVF9DT05TVEFOVCh2YWx1ZSwgbmFtZSwgTU9ERV9TRVRfQUNUSU9OKTsKICAgICAgICAgYnJlYWs7CkBAIC0xMjcsMTEgKzEzNiwxMiBAQAogICAgIGNhc2UgJ0YnOgogICAgICAgICBURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBNT0RFX1NFVF9GUkVFKTsKICAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSAnUic6Ci0gICAgICAgIHJldHVybiBjb25zdGFudF9NT0RFX1NFVF9SKHZhbHVlLCBuYW1lLCBsZW4pOwogICAgIGNhc2UgJ1UnOgogICAgICAgICBURVNUX0NPTlNUQU5UKHZhbHVlLCBuYW1lLCBNT0RFX1NFVF9VTkRPKTsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgY2FzZSAnUic6CisgICAgICAgIHJldHVybiBjb25zdGFudF9NT0RFX1NFVF9SKHZhbHVlLCBuYW1lLCBsZW4pOwogICAgIH0KICAgICByZXR1cm4gRUlOVkFMOwogfQpAQCAtMjI4LDYgKzIzOCwxMyBAQAogICAgIE9VVFBVVDoKIAlSRVRWQUwKIAoraW50CitfdXB0aW1lKCkKKyAgICBDT0RFOgorICAgICAgICBSRVRWQUwgPSBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKTsKKyAgICBPVVRQVVQ6CisJUkVUVkFMCisKIHZvaWQKIGluaXRfbWliKCkKICAgICBDT0RFOgpAQCAtMjM4LDYgKzI1NSwxMSBAQAogaW50CiBpbml0X2FnZW50KG5hbWUpCiAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7CisgICAgQ09ERToKKyAgICAgICAgU09DS19TVEFSVFVQOworICAgICAgICBSRVRWQUwgPSBpbml0X2FnZW50KG5hbWUpOworICAgIE9VVFBVVDoKKyAgICAgICAgUkVUVkFMCiAKIHZvaWQKIGluaXRfc25tcChuYW1lKQpAQCAtMjczLDcgKzI5NSw3IEBACiAgICAgICAgIGlmICgwKQogICAgICAgICAgICAgcHJpbnRmKCJtZSA9ICVwXG4iLCBtZSk7CiAgICAgICAgIHN0cmluZ3B0ciA9IFN2UFYodmFsdWUsIHN0cmluZ2xlbik7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsIHN0cmluZ3B0ciApOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMiLCBzdHJpbmdwdHIgKTsKICAgICB9CiAKIApAQCAtMzEzLDcgKzMzNSwxNCBAQAogdm9pZAogbnNhaHJfREVTVFJPWShyZWdpbmZvKQogCW5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKnJlZ2luZm8KKyAgICBQUkVJTklUOgorICAgICAgICBoYW5kbGVyX2NiX2RhdGEgKmNiX2RhdGE7CiAgICAgQ09ERToKKyAgICAgICAgaWYgKHJlZ2luZm8gJiYgcmVnaW5mby0+aGFuZGxlciAmJiByZWdpbmZvLT5oYW5kbGVyLT5teXZvaWQpIHsKKwkgICAgY2JfZGF0YSA9IChoYW5kbGVyX2NiX2RhdGEgKikgKHJlZ2luZm8tPmhhbmRsZXItPm15dm9pZCk7CisJICAgIFN2UkVGQ05UX2RlYyhjYl9kYXRhLT5wZXJsX2NiKTsKKwkgICAgZnJlZShjYl9kYXRhKTsKKyAgICAgICAgfQogCW5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fZnJlZShyZWdpbmZvKTsKIAogaW50CkBAIC0zNjQsNyArMzkzLDcgQEAKICAgICAgICAgUFVTSE1BUksoU1ApOwogICAgICAgICByZWdpbmZvID0gKG5ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKikgU3ZJVihTdlJWKG1lKSk7CiAKLSAgICAgICAgbyA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9vaWQpOworICAgICAgICBvID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX29pZCkpOwogICAgICAgICBvLT5uYW1lID0gby0+bmFtZWJ1ZjsKICAgICAgICAgby0+bGVuID0gcmVnaW5mby0+cm9vdG9pZF9sZW47CiAgICAgICAgIG1lbWNweShvLT5uYW1lLCByZWdpbmZvLT5yb290b2lkLApAQCAtNDAzLDcgKzQzMiw3IEBACiAgICAgICAgIFBVU0hNQVJLKFNQKTsKICAgICAgICAgcmVxdWVzdCA9IChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKSBTdklWKFN2UlYobWUpKTsKIAotICAgICAgICBvID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX29pZCk7CisgICAgICAgIG8gPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfb2lkKSk7CiAgICAgICAgIG8tPm5hbWUgPSBvLT5uYW1lYnVmOwogICAgICAgICBvLT5sZW4gPSByZXF1ZXN0LT5yZXF1ZXN0dmItPm5hbWVfbGVuZ3RoOwogICAgICAgICBtZW1jcHkoby0+bmFtZSwgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lLApAQCAtNDMzLDcgKzQ2Miw3IEBACiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwogICAgICAgICBDT0RFOgogICAgICAgICByZXF1ZXN0ID0gKG5ldHNubXBfcmVxdWVzdF9pbmZvICopIFN2SVYoU3ZSVihtZSkpOwotICAgICAgICBSRVRWQUwgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfb2lkKTsKKyAgICAgICAgUkVUVkFMID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX29pZCkpOwogICAgICAgICBSRVRWQUwtPm5hbWUgPSBSRVRWQUwtPm5hbWVidWY7CiAgICAgICAgIFJFVFZBTC0+bGVuID0gcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lX2xlbmd0aDsKICAgICAgICAgbWVtY3B5KFJFVFZBTC0+bmFtZSwgcmVxdWVzdC0+cmVxdWVzdHZiLT5uYW1lLApAQCAtNDYzLDE5ICs0OTIsMTkgQEAKICAgICAgICAgcmVxdWVzdCA9IChuZXRzbm1wX3JlcXVlc3RfaW5mbyAqKSBTdklWKFN2UlYobWUpKTsKICAgICAgICAgcmVxdWVzdC0+cmVxdWVzdHZiLT50eXBlPW5ld3ZhbHVlOwogCi1jaGFyICoKK1NWICoKIG5hcmlfZ2V0VmFsdWUobWUpCiAgICAgICAgIFNWICptZTsKICAgICBQUkVJTklUOgotICAgICAgICB1X2NoYXIgYnVmWzEwMjRdIDsKLSAgICAgICAgdV9jaGFyICpvaWRidWYgPSBidWYgOwotICAgICAgICBzaXplX3Qgb2JfbGVuID0gMTAyNCwgb29fbGVuID0gMDsKKyAgICAgICAgY2hhciAqb3V0YnVmID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IG9iX2xlbiA9IDAsIG9vX2xlbiA9IDA7CiAgICAgICAgIG5ldHNubXBfcmVxdWVzdF9pbmZvICpyZXF1ZXN0OwogICAgIENPREU6CiAgICAgICAgIHJlcXVlc3QgPSAobmV0c25tcF9yZXF1ZXN0X2luZm8gKikgU3ZJVihTdlJWKG1lKSk7Ci0Jc3ByaW50X3JlYWxsb2NfYnlfdHlwZSgmb2lkYnVmLCAmb2JfbGVuLCAmb29fbGVuLCAwLAorCXNwcmludF9yZWFsbG9jX2J5X3R5cGUoKHVfY2hhciAqKikgJm91dGJ1ZiwgJm9iX2xlbiwgJm9vX2xlbiwgMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LT5yZXF1ZXN0dmIsIDAsIDAsIDApOwotICAgICAgICBSRVRWQUwgPSAoY2hhciAqKSBvaWRidWY7IC8qIG1lbSBsZWFrICovCisgICAgICAgIFJFVFZBTCA9IG5ld1NWcHYob3V0YnVmLCAwKTsKKwluZXRzbm1wX2ZyZWUob3V0YnVmKTsKICAgICBPVVRQVVQ6CiAgICAgICAgIFJFVFZBTAogCkBAIC02MjAsOCArNjQ5LDggQEAKIAkJICBicmVhazsKIAkgICAgICB9CiAJICAgICAgZWxzZSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJOb24taW50ZWdlciB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fSU5URUdFUjogdHlwZSB3YXMgJWRcbiIsCi0JCQlTdlRZUEUodmFsdWUpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi1pbnRlZ2VyIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9JTlRFR0VSOiB0eXBlIHdhcyAlbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZylTdlRZUEUodmFsdWUpKTsKIAkJUkVUVkFMID0gMDsKIAkJYnJlYWs7CiAJICAgICAgfQpAQCAtNjU2LDggKzY4NSw4IEBACiAJCSAgYnJlYWs7CiAJICAgICAgfQogCSAgICAgIGVsc2UgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXVuc2lnbmVkLWludGVnZXIgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX1VOU0lHTkVEL0FTTl9DT1VOVEVSL0FTTl9USU1FVElDS1M6IHR5cGUgd2FzICVkXG4iLAotCQkJU3ZUWVBFKHZhbHVlKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJOb24tdW5zaWduZWQtaW50ZWdlciB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fVU5TSUdORUQvQVNOX0NPVU5URVIvQVNOX1RJTUVUSUNLUzogdHlwZSB3YXMgJWx1XG4iLAorCQkJKHVuc2lnbmVkIGxvbmcpU3ZUWVBFKHZhbHVlKSk7CiAJCVJFVFZBTCA9IDA7CiAJCWJyZWFrOwogCSAgICAgIH0KQEAgLTY2Nyw0NyArNjk2LDQwIEBACiAJICAgICAgaWYgKChTdlRZUEUodmFsdWUpID09IFNWdF9JVikgfHwgKFN2VFlQRSh2YWx1ZSkgPT0gU1Z0X1BWTUcpKSB7CiAJCSAgLyogR29vZCAtIGdvdCBhIHJlYWwgb25lIChvciBhIGJsZXNzZWQgc2NhbGFyIHdoaWNoIHdlIGhhdmUgdG8gaG9wZSB3aWxsIHR1cm4gb3V0IE9LKSAqLwogCQkgIHVsbHRtcCA9IFN2SVYodmFsdWUpOwotCQkgIGM2NC5oaWdoID0gKHVpbnQzMl90KSh1bGx0bXAgPj4gMzIpOwotCQkgIGM2NC5sb3cgID0gKHVpbnQzMl90KXVsbHRtcDsKLSAgICAgICAgICAgICAgICAgIHNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZShyZXF1ZXN0LT5yZXF1ZXN0dmIsICh1X2NoYXIpdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJmM2NCwgc2l6ZW9mKHN0cnVjdCBjb3VudGVyNjQpKTsKIAkJICBSRVRWQUwgPSAxOwotCQkgIGJyZWFrOwogCSAgICAgIH0KIAkgICAgICBlbHNlIGlmIChTdlBPS3AodmFsdWUpKSB7CiAJICAgICAgICAgIC8qIE1pZ2h0IGJlIE9LIC0gZ290IGEgc3RyaW5nLCBzbyB0cnkgdG8gY29udmVydCBpdCwgYWxsb3dpbmcgYmFzZSAxMCwgb2N0YWwsIGFuZCBoZXggZm9ybXMgKi8KIAkgICAgICAgICAgc3RyaW5ncHRyID0gU3ZQVih2YWx1ZSwgc3RyaW5nbGVuKTsKLSNpZiBkZWZpbmVkKFdJTjMyKQotCQkgIHVsbHRtcCA9IHN0cnRvdWwoICBzdHJpbmdwdHIsIE5VTEwsIDAgKTsKLSNlbHNlCisJICAgICAgICAgIGVycm5vID0gMDsKIAkJICB1bGx0bXAgPSBzdHJ0b3VsbCggc3RyaW5ncHRyLCBOVUxMLCAwICk7Ci0jZW5kaWYKLQkJICBpZiAoZXJybm8gPT0gRUlOVkFMKSB7Ci0JCSAgCXNubXBfbG9nKExPR19FUlIsICJDb3VsZCBub3QgY29udmVydCBzdHJpbmcgdG8gbnVtYmVyIGluIHNldFZhbHVlOiAnJXMnIiwgc3RyaW5ncHRyKTsKLQkJCVJFVFZBTCA9IDA7Ci0JCQlicmVhazsKLQkJICB9CisJCSAgaWYgKGVycm5vICE9IDApIHsKKwkJICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNvdWxkIG5vdCBjb252ZXJ0IHN0cmluZyB0byBudW1iZXIgaW4gc2V0VmFsdWU6ICclcyciLCBzdHJpbmdwdHIpOworCQkgICAgICBSRVRWQUwgPSAwOworCQkgIH0gZWxzZQogCi0JCSAgYzY0LmhpZ2ggPSAodWludDMyX3QpKHVsbHRtcCA+PiAzMik7Ci0JCSAgYzY0LmxvdyAgPSAodWludDMyX3QpdWxsdG1wOwotICAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgKHVfY2hhcil0eXBlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmYzY0LCBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCkpOwotCQkgIFJFVFZBTCA9IDE7Ci0JCSAgYnJlYWs7CisJCSAgICAgIFJFVFZBTCA9IDE7CiAJICAgICAgfQogCSAgICAgIGVsc2UgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXVuc2lnbmVkLWludGVnZXIgdmFsdWUgcGFzc2VkIHRvIHNldFZhbHVlIHdpdGggQVNOX0NPVU5URVI2NDogdHlwZSB3YXMgJWRcbiIsCi0JCQlTdlRZUEUodmFsdWUpKTsKKwkJc25tcF9sb2coTE9HX0VSUiwgIk5vbi11bnNpZ25lZC1pbnRlZ2VyIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9DT1VOVEVSNjQ6IHR5cGUgd2FzICVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKVN2VFlQRSh2YWx1ZSkpOwogCQlSRVRWQUwgPSAwOwotCQlicmVhazsKIAkgICAgICB9CisJICAgICAgaWYgKFJFVFZBTCkgeworCQkgIGM2NC5oaWdoID0gKHVpbnQzMl90KSh1bGx0bXAgPj4gMzIpOworCQkgIGM2NC5sb3cgID0gKHVpbnQzMl90KSh1bGx0bXAgPj4gMCk7CisJCSAgc25tcF9zZXRfdmFyX3R5cGVkX3ZhbHVlKHJlcXVlc3QtPnJlcXVlc3R2YiwgKHVfY2hhcil0eXBlLAorCQkJCSAgICAgKHVfY2hhciAqKSAmYzY0LCBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCkpOworCSAgICAgIH0KKwkgICAgICBicmVhazsKIAogICAgICAgICAgIGNhc2UgQVNOX09DVEVUX1NUUjoKICAgICAgICAgICBjYXNlIEFTTl9CSVRfU1RSOgorICAgICAgICAgIGNhc2UgQVNOX09QQVFVRToKIAkgICAgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYmVlbiBwYXNzZWQgc29tZXRoaW5nIHdpdGggYSBzdHJpbmcgdmFsdWUgKG9yIGEgYmxlc3NlZCBzY2FsYXIpICovCiAJICAgICAgaWYgKCFTdlBPS3AodmFsdWUpICYmIChTdlRZUEUodmFsdWUpICE9IFNWdF9QVk1HKSkgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fT0NURVRfU1RSL0FTTl9CSVRfU1RSOiB0eXBlIHdhcyAlZFxuIiwKLQkJCVN2VFlQRSh2YWx1ZSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fT0NURVRfU1RSL0FTTl9CSVRfU1RSOiB0eXBlIHdhcyAlbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZylTdlRZUEUodmFsdWUpKTsKIAkJUkVUVkFMID0gMDsKIAkJYnJlYWs7CiAJICAgICAgfQpAQCAtNzMzLDggKzc1NSw4IEBACiAKIAkgICAgICAvKiBDaGVjayB0aGF0IHdlIGhhdmUgYmVlbiBwYXNzZWQgc29tZXRoaW5nIHdpdGggYSBzdHJpbmcgdmFsdWUgKG9yIGEgYmxlc3NlZCBzY2FsYXIpICovCiAJICAgICAgaWYgKCFTdlBPS3AodmFsdWUpICYmIChTdlRZUEUodmFsdWUpICE9IFNWdF9QVk1HKSkgewotCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fSVBBRERSRVNTOiB0eXBlIHdhcyAlZFxuIiwKLQkJCVN2VFlQRSh2YWx1ZSkpOworCQlzbm1wX2xvZyhMT0dfRVJSLCAiTm9uLXN0cmluZyB2YWx1ZSBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fSVBBRERSRVNTOiB0eXBlIHdhcyAlbHVcbiIsCisJCQkodW5zaWduZWQgbG9uZylTdlRZUEUodmFsdWUpKTsKIAkJUkVUVkFMID0gMDsKIAkJYnJlYWs7CiAJICAgICAgfQpAQCAtNzQ3LDcgKzc2OSw3IEBACiAKIAkgICAgICAjIFNhbml0eSBjaGVjayBvbiBhZGRyZXNzIGxlbmd0aAogCSAgICAgIGlmICgoc3RyaW5nbGVuICE9IDQpICYmIChzdHJpbmdsZW4gIT0gMTYpKSB7Ci0JICAgICAgCQlzbm1wX2xvZyhMT0dfRVJSLCAiSVAgYWRkcmVzcyBvZiAlZCBieXRlcyBwYXNzZWQgdG8gc2V0VmFsdWUgd2l0aCBBU05fSVBBRERSRVNTXG4iLCBzdHJpbmdsZW4pOworCSAgICAgIAkJc25tcF9sb2coTE9HX0VSUiwgIklQIGFkZHJlc3Mgb2YgJSIgTkVUU05NUF9QUkl6ICJkIGJ5dGVzIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9JUEFERFJFU1NcbiIsIHN0cmluZ2xlbik7CiAJCQlSRVRWQUwgPSAwOwogCQkJYnJlYWs7CiAJICAgICAgfQpAQCAtNzYwLDggKzc4Miw4IEBACiAgICAgICAgICAgY2FzZSBBU05fT0JKRUNUX0lEOgogCSAgICAgIC8qIENoZWNrIHRoYXQgd2UgaGF2ZSBiZWVuIHBhc3NlZCBzb21ldGhpbmcgd2l0aCBhIHN0cmluZyB2YWx1ZSAob3IgYSBibGVzc2VkIHNjYWxhcikgKi8KIAkgICAgICBpZiAoIVN2UE9LcCh2YWx1ZSkgJiYgKFN2VFlQRSh2YWx1ZSkgIT0gU1Z0X1BWTUcpKSB7Ci0JCXNubXBfbG9nKExPR19FUlIsICJOb24tc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9PQkpFQ1RfSUQ6IHR5cGUgd2FzICVkXG4iLAotCQkJU3ZUWVBFKHZhbHVlKSk7CisJCXNubXBfbG9nKExPR19FUlIsICJOb24tc3RyaW5nIHZhbHVlIHBhc3NlZCB0byBzZXRWYWx1ZSB3aXRoIEFTTl9PQkpFQ1RfSUQ6IHR5cGUgd2FzICVsdVxuIiwKKwkJCSh1bnNpZ25lZCBsb25nKVN2VFlQRSh2YWx1ZSkpOwogCQlSRVRWQUwgPSAwOwogCQlicmVhazsKIAkgICAgICB9CkBAIC04NTEsNiArODczLDQ4IEBACiAKIE1PRFVMRSA9IE5ldFNOTVA6OmFnZW50ICBQQUNLQUdFID0gTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvIFBSRUZJWCA9IG5hcnFpXwogCisKK1NWICoKK25hcnFpX2dldFNvdXJjZUlwKG1lKQorICAgICAgICBTViAqbWU7CisgICAgUFJFSU5JVDoKKyAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm87CisJbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXI7CisJc3RydWN0IHNvY2thZGRyX2luICpmcm9tOworICAgICAgICBTViAqcmFyZzsKKworICAgIENPREU6CisgICAgICAgIHJlcWluZm8gPSAobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKikgU3ZJVihTdlJWKG1lKSk7CisKKyAgICAgICAgLyogWFhYOiB0cmFuc3BvcnQtc3BlY2lmaWM6IFVEUC9JUHY0IG9ubHkhICovCisJYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSAocmVxaW5mby0+YXNwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKTsKKwlmcm9tID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOworICAgICAgICByYXJnID0gbmV3U1ZwdigoY29uc3QgY2hhciAqKSgmZnJvbS0+c2luX2FkZHIuc19hZGRyKSwgc2l6ZW9mKGZyb20tPnNpbl9hZGRyLnNfYWRkcikpOworICAgICAgICBSRVRWQUwgPSByYXJnOworICAgIE9VVFBVVDoKKyAgICAgICAgUkVUVkFMCisKKworU1YgKgorbmFycWlfZ2V0RGVzdElwKG1lKQorICAgICAgICBTViAqbWU7CisgICAgUFJFSU5JVDoKKyAgICAgICAgbmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKnJlcWluZm87CisJbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXI7CisJc3RydWN0IGluX2FkZHIgKnRvOworICAgICAgICBTViAqcmFyZzsKKworICAgIENPREU6CisgICAgICAgIHJlcWluZm8gPSAobmV0c25tcF9hZ2VudF9yZXF1ZXN0X2luZm8gKikgU3ZJVihTdlJWKG1lKSk7CisKKyAgICAgICAgLyogWFhYOiB0cmFuc3BvcnQtc3BlY2lmaWM6IFVEUC9JUHY0IG9ubHkhICovCisJYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSAocmVxaW5mby0+YXNwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKTsKKwl0byA9IChzdHJ1Y3QgaW5fYWRkciAqKSAmKGFkZHJfcGFpci0+bG9jYWxfYWRkcik7CisgICAgICAgIHJhcmcgPSBuZXdTVnB2KChjb25zdCBjaGFyICopKCZ0by0+c19hZGRyKSwgc2l6ZW9mKHRvLT5zX2FkZHIpKTsKKyAgICAgICAgUkVUVkFMID0gcmFyZzsKKyAgICBPVVRQVVQ6CisgICAgICAgIFJFVFZBTAorCiBpbnQKIG5hcnFpX2dldE1vZGUobWUpCiAgICAgICAgIFNWICptZTsKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTCBiL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTAppbmRleCA2N2Q1ZmYwLi5lZDY0ODNhIDEwMDY0NAotLS0gYS9wZXJsL2FnZW50L2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKKysrIGIvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCkBAIC0yNCw5ICsyNCw5IEBACiAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICBteSAoJHNubXBfbGliLCAkc25tcF9sbGliLCAkc2VwKTsKLSAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBuZSAnbXN5cycpKSB7CisgICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gZXEgJycpKSB7CiAgICAgICAkb3B0cyA9IE5ldFNOTVBHZXRPcHRzKCk7CQotICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwiOworICAgICAgJFBhcmFtc3snREVGSU5FJ30gPSAiLURNU1ZDX1BFUkwgLURfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyAtRF9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyI7CiAgICAgICAkc2VwID0gJ1xcJzsKICAgICAgICRzbm1wX2xpYl9maWxlID0gJ25ldHNubXAubGliJzsKICAgICAgICRzbm1wX2xpbmtfbGliID0gJ25ldHNubXAnOwpAQCAtOTYsNyArOTYsNyBAQAogICAgICRyb290cGF0aCA9ICIuLi8iIGlmICghJHJvb3RwYXRoKTsKICAgICAkcm9vdHBhdGggLj0gJy8nIGlmICgkcm9vdHBhdGggIX4gL1wvJC8pOwogICAgIAotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKIAogICAgICAgIyBHcmFiIGNvbW1hbmQgbGluZSBvcHRpb25zIGZpcnN0LiAgT25seSB1c2VkIGlmIGVudmlyb25tZW50IHZhcmlhYmxlcyBhcmUgbm90IHNldAogICAgICAgR2V0T3B0aW9ucygiTkVULVNOTVAtSU4tU09VUkNFPXMiID0+IFwkcmV0eydpbnNvdXJjZSd9LApAQCAtMTc5LDcgKzE3OSw3IEBACiAKIAogc3ViIENoZWNrX1ZlcnNpb24gewotICBpZiAoKCRDb25maWd7J29zbmFtZSd9IG5lICdNU1dpbjMyJyB8fCAkRU5WeydPU1RZUEUnfSBlcSAnbXN5cycpKSB7CisgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IG5lICcnKSkgewogICAgIG15ICRmb3VuZHZlcnNpb24gPSAwOwogICAgIHJldHVybiBpZiAoJEVOVnsnTkVUU05NUF9ET05UX0NIRUNLX1ZFUlNJT04nfSk7CiAgICAgb3BlbihJLCI8TWFrZWZpbGUiKTsKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvZGVmYXVsdF9zdG9yZS9kZWZhdWx0X3N0b3JlLnBtIGIvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KaW5kZXggYTc2YzM2Yi4uYTg4MTJlYiAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KKysrIGIvcGVybC9hZ2VudC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0KQEAgLTk2LDcgKzk2LDcgQEAKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX01BWF9HRVRCVUxLUkVQRUFUUwogCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTUFYX0dFVEJVTEtSRVNQT05TRVMKICk7Ci0kVkVSU0lPTiA9ICc1LjA0MDQnOworJFZFUlNJT04gPSAnNS4wNzAzJzsKIAogc3ViIEFVVE9MT0FEIHsKICAgICAjIFRoaXMgQVVUT0xPQUQgaXMgdXNlZCB0byAnYXV0b2xvYWQnIGNvbnN0YW50cyBmcm9tIHRoZSBjb25zdGFudCgpCkBAIC0yMTksNDMgKzIxOSw2IEBACiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9DQUNIRV9USU1FT1VUCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9WRVJTSU9OCiAJCQkJICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9TRUNMRVZFTAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfTUFYX0dFVEJVTEtSRVBFQVRTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9NQVhfR0VUQlVMS1JFU1BPTlNFUwotCi0KLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1ZFUkJPU0UKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1JPTEUKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX05PX1JPT1RfQUNDRVNTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfTUFTVEVSCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9RVUlUX0lNTUVESUFURUxZCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9ESVNBQkxFX1BFUkwKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX05PX0NPTk5FQ1RJT05fV0FSTklOR1MKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0xFQVZFX1BJREZJTEUKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX05PX0NBQ0hJTkcKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1NUUklDVF9ESVNNQU4KLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RPTlRfUkVUQUlOX05PVElGSUNBVElPTlMKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0RPTlRfTE9HX1RDUFdSQVBQRVJTX0NPTk5FQ1RTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9TS0lQTkZTSU5IT1NUUkVTT1VSQ0VTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9QUk9HTkFNRQotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1BPUlRTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9TRUNOQU1FCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9QRVJMX0lOSVRfRklMRQotCQkJCSAgIE5FVFNOTVBfRFNfU01VWF9TT0NLRVQKLQkJCQkgICBORVRTTk1QX0RTX05PVElGX0xPR19DVFgKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0ZMQUdTCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9VU0VSSUQKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0dST1VQSUQKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX0FHRU5UWF9QSU5HX0lOVEVSVkFMCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9BR0VOVFhfVElNRU9VVAotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfQUdFTlRYX1JFVFJJRVMKLQkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1hfU09DS19QRVJNCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9YX0RJUl9QRVJNCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9YX1NPQ0tfVVNFUgotCQkJCSAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLX0dST1VQCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9DQUNIRV9USU1FT1VUCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9WRVJTSU9OCi0JCQkJICAgTkVUU05NUF9EU19BR0VOVF9JTlRFUk5BTF9TRUNMRVZFTAogCiAKIAkJCQkgICBORVRTTk1QX0RTX0FHRU5UX1ZFUkJPU0UKZGlmZiAtLWdpdCBhL3BlcmwvYWdlbnQvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmggYi9wZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmMjYzMGUKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL2FnZW50L25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCkBAIC0wLDAgKzEsNiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25tcF9lbmFibGVfc3RkZXJybG9nKQorCmRpZmYgLS1naXQgYS9wZXJsL2FnZW50L3Rlc3QucGwgYi9wZXJsL2FnZW50L3Rlc3QucGwKaW5kZXggYTdhYzhmOS4uODhjYmE1NiAxMDA2NDQKLS0tIGEvcGVybC9hZ2VudC90ZXN0LnBsCisrKyBiL3BlcmwvYWdlbnQvdGVzdC5wbApAQCAtOSw3ICs5LDcgQEAKIEJFR0lOIHsgJHwgPSAxOyAKICAgICAgICAgJEVOVnsnU05NUENPTkZQQVRIJ30gPSAnbm9wYXRoJzsKICAgICAgICAgJEVOVnsnTUlCUyd9ID0gJyc7Ci0gICAgICAgIHByaW50ICIxLi41XG4iOworICAgICAgICBwcmludCAiMS4uNlxuIjsKICAgICAgIH0KIEVORCB7cHJpbnQgIm5vdCBvayAxXG4iIHVubGVzcyAkbG9hZGVkO30KIHVzZSBOZXRTTk1QOjphZ2VudCAoJzphbGwnKTsKQEAgLTc2LDYgKzc2LDEyIEBACiBwcmludCBpdCgkcmVnaXRlbSwgNCk7CiAjcHJpbnQgU1RERVJSICRyZWdpdGVtLCI6IixyZWYoJHJlZ2l0ZW0pLCJcbiI7CiBwcmludCBpdChyZWYoJHJlZ2l0ZW0pIGVxICJOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiIsIDUpOworCitteSAkdXB0aW1lMSA9ICRhZ2VudC0+dXB0aW1lKCk7CitteSAkdXB0aW1lMiA9ICRhZ2VudC0+dXB0aW1lKDY2Nik7CitteSAkdXB0aW1lMyA9ICRhZ2VudC0+dXB0aW1lKDU1NSwgNDQ0KTsKK3ByaW50IGl0KCR1cHRpbWUxIDw9ICR1cHRpbWUyICYmICR1cHRpbWUyIDw9ICR1cHRpbWUzLCA2KTsKKwogZXhpdDsKIAogd2hpbGUoMSkgewpkaWZmIC0tZ2l0IGEvcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMIGIvcGVybC9kZWZhdWx0X3N0b3JlL01ha2VmaWxlLlBMCmluZGV4IDU0OTk2YWIuLjdjNjcxYjggMTAwNjQ0Ci0tLSBhL3BlcmwvZGVmYXVsdF9zdG9yZS9NYWtlZmlsZS5QTAorKysgYi9wZXJsL2RlZmF1bHRfc3RvcmUvTWFrZWZpbGUuUEwKQEAgLTIzLDkgKzIzLDkgQEAKICAgICB9ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgIAogICAgIG15ICgkc25tcF9saWIsICRzbm1wX2xsaWIsICRzZXApOwotICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IG5lICdtc3lzJykpIHsKKyAgICBpZiAoKCRDb25maWd7J29zbmFtZSd9IGVxICdNU1dpbjMyJyAmJiAkRU5WeydPU1RZUEUnfSBlcSAnJykpIHsKICAgICAgICRvcHRzID0gTmV0U05NUEdldE9wdHMoKTsJCi0gICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCI7CisgICAgICAkUGFyYW1zeydERUZJTkUnfSA9ICItRE1TVkNfUEVSTCAtRF9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIC1EX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIjsKICAgICAgICRzZXAgPSAnXFwnOwogICAgICAgJHNubXBfbGliX2ZpbGUgPSAnbmV0c25tcC5saWInOwogICAgICAgJHNubXBfbGlua19saWIgPSAnbmV0c25tcCc7CkBAIC05NSw3ICs5NSw3IEBACiAgICAgJHJvb3RwYXRoID0gIi4uLyIgaWYgKCEkcm9vdHBhdGgpOwogICAgICRyb290cGF0aCAuPSAnLycgaWYgKCRyb290cGF0aCAhfiAvXC8kLyk7CiAgICAgCi0gICAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBlcSAnTVNXaW4zMicgJiYgJEVOVnsnT1NUWVBFJ30gbmUgJ21zeXMnKSkgeworICAgIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gZXEgJ01TV2luMzInICYmICRFTlZ7J09TVFlQRSd9IGVxICcnKSkgewogCiAgICAgICAjIEdyYWIgY29tbWFuZCBsaW5lIG9wdGlvbnMgZmlyc3QuICBPbmx5IHVzZWQgaWYgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFyZSBub3Qgc2V0CiAgICAgICBHZXRPcHRpb25zKCJORVQtU05NUC1JTi1TT1VSQ0U9cyIgPT4gXCRyZXR7J2luc291cmNlJ30sCkBAIC0xNzgsNyArMTc4LDcgQEAKIAogCiBzdWIgQ2hlY2tfVmVyc2lvbiB7Ci0gIGlmICgoJENvbmZpZ3snb3NuYW1lJ30gbmUgJ01TV2luMzInIHx8ICRFTlZ7J09TVFlQRSd9IGVxICdtc3lzJykpIHsKKyAgaWYgKCgkQ29uZmlneydvc25hbWUnfSBuZSAnTVNXaW4zMicgfHwgJEVOVnsnT1NUWVBFJ30gbmUgJycpKSB7CiAgICAgbXkgJGZvdW5kdmVyc2lvbiA9IDA7CiAgICAgcmV0dXJuIGlmICgkRU5WeydORVRTTk1QX0RPTlRfQ0hFQ0tfVkVSU0lPTid9KTsKICAgICBvcGVuKEksIjxNYWtlZmlsZSIpOwpkaWZmIC0tZ2l0IGEvcGVybC9kZWZhdWx0X3N0b3JlL2RlZmF1bHRfc3RvcmUucG0gYi9wZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQppbmRleCA4MjhiYmRiLi5iODk4NTAxIDEwMDY0NAotLS0gYS9wZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQorKysgYi9wZXJsL2RlZmF1bHRfc3RvcmUvZGVmYXVsdF9zdG9yZS5wbQpAQCAtMjAwLDcgKzIwMCw3IEBACiAJCQkJICAgTkVUU05NUF9EU19MSUJfS1NNX1NFUlZJQ0VfTkFNRQogCQkJCSAgIE5FVFNOTVBfRFNfTElCX1NCU01fTE9DQUxfUFdECiApOwotJFZFUlNJT04gPSAnNS4wNDA0JzsKKyRWRVJTSU9OID0gJzUuMDcwMyc7CiAKIHN1YiBBVVRPTE9BRCB7CiAgICAgIyBUaGlzIEFVVE9MT0FEIGlzIHVzZWQgdG8gJ2F1dG9sb2FkJyBjb25zdGFudHMgZnJvbSB0aGUgY29uc3RhbnQoKQpkaWZmIC0tZ2l0IGEvcGVybC9kZWZhdWx0X3N0b3JlL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oIGIvcGVybC9kZWZhdWx0X3N0b3JlL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9wZXJsL2RlZmF1bHRfc3RvcmUvbmV0c25tcC1mZWF0dXJlLWRlZmluaXRpb25zLmgKZGlmZiAtLWdpdCBhL3BlcmwvZGVmYXVsdF9zdG9yZS90ZXN0LnBsIGIvcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGwKaW5kZXggOTMwY2E4Yy4uYjQyOWM2YiAxMDA2NDQKLS0tIGEvcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGwKKysrIGIvcGVybC9kZWZhdWx0X3N0b3JlL3Rlc3QucGwKQEAgLTEwLDcgKzEwLDcgQEAKIAogCSV0ZXN0cyA9ICggCiAgICAgICAgICAgICAgICAgICAiTkVUU05NUF9EU19NQVhfSURTIiAgICAgICAgICAgICAgICAgICAgID0+IDMsCi0gICAgICAgICAgICAgICAgICAiTkVUU05NUF9EU19NQVhfU1VCSURTIiAgICAgICAgICAgICAgICAgID0+IDQwLAorICAgICAgICAgICAgICAgICAgIk5FVFNOTVBfRFNfTUFYX1NVQklEUyIgICAgICAgICAgICAgICAgICA9PiA0OCwKICAgICAgICAgICAgICAgICAgICJORVRTTk1QX0RTX0xJQlJBUllfSUQiICAgICAgICAgICAgICAgICAgPT4gMCwKICAgICAgICAgICAgICAgICAgICJORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lEIiAgICAgICAgICAgICAgPT4gMSwKICAgICAgICAgICAgICAgICAgICJORVRTTk1QX0RTX1RPS0VOX0lEIiAgICAgICAgICAgICAgICAgICAgPT4gMiwKZGlmZiAtLWdpdCBhL3B5dGhvbi9MSUNFTlNFIGIvcHl0aG9uL0xJQ0VOU0UKaW5kZXggZWJlYmY0YS4uNGM3NjM4ZiAxMDA2NDQKLS0tIGEvcHl0aG9uL0xJQ0VOU0UKKysrIGIvcHl0aG9uL0xJQ0VOU0UKQEAgLTEsMyArMSwzOSBAQAorVmFyaW91cyBjb3B5cmlnaHRzIGFwcGx5IHRvIHRoaXMgcGFja2FnZSwgbGlzdGVkIGluIHZhcmlvdXMgc2VwYXJhdGUKK3BhcnRzIGJlbG93LiAgUGxlYXNlIG1ha2Ugc3VyZSB0aGF0IHlvdSByZWFkIGFsbCB0aGUgcGFydHMuCisKKy0tLS0gUGFydCAxOiBTcGFydGEsIEluYyAoQlNEKSAtLS0tLQorCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAxMCwgU3BhcnRhLCBJbmMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisgCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorIAorKiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyogIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIAorKiAgTmVpdGhlciB0aGUgbmFtZSBvZiBTcGFydGEsIEluYyBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5CisgICBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMKK0lTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0gUGFydCAyOiBTY2llbmNlTG9naWMsIExMQyAoQlNEKSAtLS0tCisKIENvcHlyaWdodCAoYykgMjAwNiwgU2NpZW5jZUxvZ2ljLCBMTEMKIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgCmRpZmYgLS1naXQgYS9weXRob24vUkVBRE1FIGIvcHl0aG9uL1JFQURNRQppbmRleCBlZjViNDc3Li5mOTk4ZjhiIDEwMDY0NAotLS0gYS9weXRob24vUkVBRE1FCisrKyBiL3B5dGhvbi9SRUFETUUKQEAgLTg5LDcgKzg5LDYgQEAKICAgIG5ldHNubXAuU2Vzc2lvbig8dGFnPj08dmFsdWU+LCAuLi4gKQogCiAgICAgRGVzdEhvc3QgICAgLSBkZWZhdWx0ICdsb2NhbGhvc3QnLCBob3N0bmFtZSBvciBpcCBhZGRyIG9mIFNOTVAgYWdlbnQKLSAgICBDb21tdW5pdHkgICAtIGRlZmF1bHQgJ3B1YmxpYycsIFNOTVAgY29tbXVuaXR5IHN0cmluZyAodXNlZCBmb3IgYm90aCBSL1cpCiAgICAgVmVyc2lvbiAgICAgLSBkZWZhdWx0ICczJywgWzEsIDIgKGVxdWl2IHRvIDJjKSwgM10KICAgICBSZW1vdGVQb3J0ICAtIGRlZmF1bHQgJzE2MScsIGFsbG93IHJlbW90ZSBVRFAgcG9ydCB0byBiZSBvdmVycmlkZGVuCiAgICAgVGltZW91dCAgICAgLSBkZWZhdWx0ICc1MDAwMDAnLCBtaWNyby1zZWNvbmRzIGJlZm9yZSByZXRyeQpAQCAtOTksMTggKzk4LDYgQEAKICAgICAgICAgICAgICAgICAgIHVuZGVmIHdpbGwgYmUgcmV0dXJuZWQgZm9yIGFsbCBOT1NVQ0ggdmFyYmluZHMsIHdoZW4gc2V0CiAgICAgICAgICAgICAgICAgICB0byAnMCcgdGhpcyBmZWF0dXJlIGlzIGRpc2FibGVkIGFuZCB0aGUgZW50aXJlIGdldCByZXF1ZXN0CiAgICAgICAgICAgICAgICAgICB3aWxsIGZhaWwgb24gYW55IE5PU1VDSCBlcnJvciAoYXBwbGllcyB0byB2MSBvbmx5KQotICAgIFNlY05hbWUgICAgIC0gZGVmYXVsdCAnaW5pdGlhbCcsIHNlY3VyaXR5IG5hbWUgKHYzKQotICAgIFNlY0xldmVsICAgIC0gZGVmYXVsdCAnbm9BdXRoTm9Qcml2Jywgc2VjdXJpdHkgbGV2ZWwgW25vQXV0aE5vUHJpdiwKLSAgICAgICAgICAgICAgICAgIGF1dGhOb1ByaXYsIGF1dGhQcml2XSAodjMpCi0gICAgU2VjRW5naW5lSWQgLSBkZWZhdWx0IDxub25lPiwgc2VjdXJpdHkgZW5naW5lSUQsIHdpbGwgYmUgcHJvYmVkIGlmIG5vdAotICAgICAgICAgICAgICAgICAgc3VwcGxpZWQgKHYzKQotICAgIENvbnRleHRFbmdpbmVJZCAtIGRlZmF1bHQgPFNlY0VuZ2luZUlkPiwgY29udGV4dCBlbmdpbmVJRCwgd2lsbCBiZQotICAgICAgICAgICAgICAgICAgICAgIHByb2JlZCBpZiBub3Qgc3VwcGxpZWQgKHYzKQotICAgIENvbnRleHQgICAgIC0gZGVmYXVsdCAnJywgY29udGV4dCBuYW1lICh2MykKLSAgICBBdXRoUHJvdG8gICAtIGRlZmF1bHQgJ01ENScsIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIFtNRDUsIFNIQV0gKHYzKQotICAgIEF1dGhQYXNzICAgIC0gZGVmYXVsdCA8bm9uZT4sIGF1dGhlbnRpY2F0aW9uIHBhc3NwaHJhc2UKLSAgICBQcml2UHJvdG8gICAtIGRlZmF1bHQgJ0RFUycsIHByaXZhY3kgcHJvdG9jb2wgW0RFU10gKHYzKQotICAgIFByaXZQYXNzICAgIC0gZGVmYXVsdCA8bm9uZT4sIHByaXZhY3kgcGFzc3BocmFzZSAodjMpCiAgICAgVXNlTG9uZ05hbWVzIC0gc2V0IHRvIG5vbi16ZXJvIHRvIGhhdmUgPHRhZ3M+IGZvciAnZ2V0bmV4dCcgbWV0aG9kcyAKICAgICAgICAgICAgICAgICAgIGdlbmVyYXRlZCBwcmVmZXJyaW5nIGxvbmdlciBNaWIgbmFtZSBjb252ZW50aW9uIChlLmcuLCAKIAkJICBzeXN0ZW0uc3lzRGVzY3IgdnMganVzdCBzeXNEZXNjcikKQEAgLTEzNiw4ICsxMjMsNDAgQEAKICAgICBFcnJvck51bSAgICAtIHJlYWQtb25seSwgaG9sZHMgdGhlIHNubXBfZXJyIG9yIHN0YXR1cyBvZiBsYXN0IHJlcXVlc3QKICAgICBFcnJvckluZCAgICAtIHJlYWQtb25seSwgaG9sZHMgdGhlIHNubXBfZXJyX2luZGV4IHdoZW4gYXBwcm9wcmlhdGUKIAorICAgU05NUHYxL1NOTVB2MmMgb3B0aW9uczoKKyAgICBDb21tdW5pdHkgICAtIGRlZmF1bHQgJ3B1YmxpYycsIFNOTVAgY29tbXVuaXR5IHN0cmluZyAodXNlZCBmb3IgYm90aCBSL1cpCisKKyAgIFNOTVB2MyBPcHRpb25zOgorICAgIFNlY05hbWUgICAgIC0gZGVmYXVsdCAnaW5pdGlhbCcsIHNlY3VyaXR5IG5hbWUgKHYzKQorICAgIFNlY0xldmVsICAgIC0gZGVmYXVsdCAnbm9BdXRoTm9Qcml2Jywgc2VjdXJpdHkgbGV2ZWwgW25vQXV0aE5vUHJpdiwKKyAgICAgICAgICAgICAgICAgIGF1dGhOb1ByaXYsIGF1dGhQcml2XSAodjMpCisgICAgQ29udGV4dEVuZ2luZUlkIC0gZGVmYXVsdCA8U2VjRW5naW5lSWQ+LCBjb250ZXh0IGVuZ2luZUlELCB3aWxsIGJlCisgICAgICAgICAgICAgICAgICAgICAgcHJvYmVkIGlmIG5vdCBzdXBwbGllZCAodjMpCisgICAgQ29udGV4dCAgICAgLSBkZWZhdWx0ICcnLCBjb250ZXh0IG5hbWUgKHYzKQorCisgICBTTk1QdjMgb3ZlciBUTFMgb3IgRFRMUyBvcHRpb25zOgorICAgIE91cklkZW50aXR5ICAgLSBUaGUgZmluZ2VycHJpbnQgb3IgZmlsZSBuYW1lIGZvciB0aGUgbG9jYWwgWC41MDkKKyAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGUgdG8gdXNlIGZvciBvdXIgaWRlbnRpdHkuICBSdW4KKyAgICAgICAgICAgICAgICAgICAgbmV0LXNubXAtY2VydCB0byBjcmVhdGUgYW5kIG1hbmFnZSBjZXJ0aWZpY2F0ZXMuCisgICAgVGhlaXJJZGVudGl0eSAtIFRoZSBmaW5nZXJwcmludCBvciBmaWxlIG5hbWUgZm9yIHRoZSBsb2NhbCBYLjUwOQorICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIHRoZWlyIGlkZW50aXR5LiAgCisgICAgVHJ1c3RDZXJ0ICAgICAtIEEgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSB0byB1c2UgZm9yIHZhbGlkYXRpbmcKKyAgICAgICAgICAgICAgICAgICAgY2VydGlmaWNhdGVzLiAgVHlwaWNhbGx5IHRoaXMgd291bGQgYmUgYSBDQQorICAgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZS4KKyAgICBUaGVpckhvc3RuYW1lIC0gVGhlaXIgaG9zdG5hbWUgdG8gZXhwZWN0LiAgRWl0aGVyICJUaGVpcklkZW50aXR5IgorICAgIAkJICAgIG9yIGEgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSBwbHVzIGEgaG9zdG5hbWUgaXMgbmVlZGVkCisgICAgCQkgICAgdG8gdmFsaWRhdGUgdGhlIHNlcnZlciBpcyB0aGUgcHJvcGVyIHNlcnZlci4KKyAgICAKKyAgIFNOTVB2MyB3aXRoIFVTTSBzZWN1cml0eSBPcHRpb25zOgorICAgIFNlY0VuZ2luZUlkIC0gZGVmYXVsdCA8bm9uZT4sIHNlY3VyaXR5IGVuZ2luZUlELCB3aWxsIGJlIHByb2JlZCBpZiBub3QKKyAgICAgICAgICAgICAgICAgIHN1cHBsaWVkICh2MykKKyAgICBBdXRoUHJvdG8gICAtIGRlZmF1bHQgJ01ENScsIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIFtNRDUsIFNIQV0gKHYzKQorICAgIEF1dGhQYXNzICAgIC0gZGVmYXVsdCA8bm9uZT4sIGF1dGhlbnRpY2F0aW9uIHBhc3NwaHJhc2UKKyAgICBQcml2UHJvdG8gICAtIGRlZmF1bHQgJ0RFUycsIHByaXZhY3kgcHJvdG9jb2wgW0RFU10gKHYzKQorICAgIFByaXZQYXNzICAgIC0gZGVmYXVsdCA8bm9uZT4sIHByaXZhY3kgcGFzc3BocmFzZSAodjMpCisKICAgIHByaXZhdGU6Ci0gICAgc2Vzc19wdHIgICAtIGludGVybmFsIGZpZWxkIHVzZWQgdG8gY2FjaGUgYSBjcmVhdGVkIHNlc3Npb24gc3RydWN0dXJlCisgICAgc2Vzc19wdHIgICAgLSBpbnRlcm5hbCBmaWVsZCB1c2VkIHRvIGNhY2hlIGEgY3JlYXRlZCBzZXNzaW9uIHN0cnVjdHVyZQogCiAgICBtZXRob2RzOgogCmRpZmYgLS1naXQgYS9weXRob24vbmV0c25tcC9jbGllbnQucHkgYi9weXRob24vbmV0c25tcC9jbGllbnQucHkKaW5kZXggYWEwNDcyZC4uNmZjNGIyZSAxMDA2NDQKLS0tIGEvcHl0aG9uL25ldHNubXAvY2xpZW50LnB5CisrKyBiL3B5dGhvbi9uZXRzbm1wL2NsaWVudC5weQpAQCAtMzAsNiArMzAsMTAgQEAKICAgICAgICAgJ0VuZ2luZWJvb3RzJzowLAogICAgICAgICAnRW5naW5ldGltZSc6MCwKICAgICAgICAgJ1VzZU51bWVyaWMnOjAsCisgICAgICAgICdPdXJJZGVudGl0eSc6JycsCisgICAgICAgICdUaGVpcklkZW50aXR5JzonJywKKyAgICAgICAgJ1RoZWlySG9zdG5hbWUnOicnLAorICAgICAgICAnVHJ1c3RDZXJ0JzonJwogICAgICAgICB9CiAgICAga2V5cyA9IGthcmdzLmtleXMoKQogICAgIGZvciBrZXkgaW4ga2V5czoKQEAgLTEyNiw3ICsxMzAsMjggQEAKICAgICAgICAgZm9yIGssdiBpbiBzZXNzX2FyZ3MuaXRlbXMoKToKICAgICAgICAgICAgIHNlbGYuX19kaWN0X19ba10gPSB2CiAKLSAgICAgICAgaWYgc2Vzc19hcmdzWydWZXJzaW9uJ10gPT0gMzoKKyAgICAgICAgICAgIAorICAgICAgICAjIGNoZWNrIGZvciB0cmFuc3BvcnRzIHRoYXQgbWF5IGJlIHR1bm5lbGVkCisgICAgICAgIHRyYW5zcG9ydENoZWNrID0gcmUuY29tcGlsZSgnXih0bHN8ZHRsc3xzc2gpJyk7CisgICAgICAgIG1hdGNoID0gdHJhbnNwb3J0Q2hlY2subWF0Y2goc2Vzc19hcmdzWydEZXN0SG9zdCddKQorCisgICAgICAgIGlmIG1hdGNoOgorICAgICAgICAgICAgc2VsZi5zZXNzX3B0ciA9IGNsaWVudF9pbnRmLnNlc3Npb25fdHVubmVsZWQoCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydWZXJzaW9uJ10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydEZXN0SG9zdCddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snTG9jYWxQb3J0J10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydSZXRyaWVzJ10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydUaW1lb3V0J10sCisgICAgICAgICAgICAgICAgc2Vzc19hcmdzWydTZWNOYW1lJ10sCisgICAgICAgICAgICAgICAgc2VjTGV2ZWxNYXBbc2Vzc19hcmdzWydTZWNMZXZlbCddXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ0NvbnRleHRFbmdpbmVJZCddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snQ29udGV4dCddLAorICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snT3VySWRlbnRpdHknXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1RoZWlySWRlbnRpdHknXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1RoZWlySG9zdG5hbWUnXSwKKyAgICAgICAgICAgICAgICBzZXNzX2FyZ3NbJ1RydXN0Q2VydCddLAorICAgICAgICAgICAgICAgICk7CisgICAgICAgIGVsaWYgc2Vzc19hcmdzWydWZXJzaW9uJ10gPT0gMzoKICAgICAgICAgICAgIHNlbGYuc2Vzc19wdHIgPSBjbGllbnRfaW50Zi5zZXNzaW9uX3YzKAogICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snVmVyc2lvbiddLAogICAgICAgICAgICAgICAgIHNlc3NfYXJnc1snRGVzdEhvc3QnXSwKZGlmZiAtLWdpdCBhL3B5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMgYi9weXRob24vbmV0c25tcC9jbGllbnRfaW50Zi5jCmluZGV4IDNhOTA0YTYuLjhiODgwNWQgMTAwNjQ0Ci0tLSBhL3B5dGhvbi9uZXRzbm1wL2NsaWVudF9pbnRmLmMKKysrIGIvcHl0aG9uL25ldHNubXAvY2xpZW50X2ludGYuYwpAQCAtNjU4LDYgKzY1OCw5IEBACiAJbmV3bmFtZV9sZW4gPSBNQVhfT0lEX0xFTjsKIAlpZiAocmVhZF9vYmppZCh0YWcsIG5ld25hbWUsICZuZXduYW1lX2xlbikpIHsJLyogbG9uZyBuYW1lICovCiAJICBydHAgPSB0cCA9IGdldF90cmVlKG5ld25hbWUsIG5ld25hbWVfbGVuLCBnZXRfdHJlZV9oZWFkKCkpOworCX0gZWxzZSB7CisJICAvKiBmYWlsZWQgdG8gcGFyc2UgdGhlIE9JRCAqLworCSAgbmV3bmFtZV9sZW4gPSAwOwogCX0KICAgICAgIH0KICAgICAgIGVsc2UgewpAQCAtNzU4LDggKzc2MSw3IEBACiAgICAgfQogCiAgICAgdmFycy0+bmV4dF92YXJpYWJsZSA9IE5VTEw7Ci0gICAgdmFycy0+bmFtZSA9IChvaWQgKiltYWxsb2MobmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7Ci0gICAgbWVtY3B5KChjaGFyICopdmFycy0+bmFtZSwgKGNoYXIgKiluYW1lLCBuYW1lX2xlbmd0aCAqIHNpemVvZihvaWQpKTsKKyAgICB2YXJzLT5uYW1lID0gc25tcF9kdXBsaWNhdGVfb2JqaWQobmFtZSwgbmFtZV9sZW5ndGgpOwogICAgIHZhcnMtPm5hbWVfbGVuZ3RoID0gbmFtZV9sZW5ndGg7CiAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICBjYXNlIFRZUEVfSU5URUdFUjoKQEAgLTg0NSw5ICs4NDcsOCBAQAogICAgICAgICAgICAgdmFycy0+dmFsLm9iamlkID0gTlVMTDsKIAkgICAgcmV0ID0gRkFJTFVSRTsKICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHZhcnMtPnZhbC5vYmppZCA9IHNubXBfZHVwbGljYXRlX29iamlkKG9pZGJ1ZiwgdmFycy0+dmFsX2xlbik7CiAgICAgICAgICAgICB2YXJzLT52YWxfbGVuICo9IHNpemVvZihvaWQpOwotICAgICAgICAgICAgdmFycy0+dmFsLm9iamlkID0gKG9pZCAqKW1hbGxvYyh2YXJzLT52YWxfbGVuKTsKLSAgICAgICAgICAgIG1lbWNweSgoY2hhciAqKXZhcnMtPnZhbC5vYmppZCwgKGNoYXIgKilvaWRidWYsIHZhcnMtPnZhbF9sZW4pOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC04ODAsMTMgKzg4MSwxNiBAQAogICAgaWYgKHNzID09IE5VTEwpIHsKICAgICAgICAqZXJyX251bSA9IDA7CiAgICAgICAgKmVycl9pbmQgPSBTTk1QRVJSX0JBRF9TRVNTSU9OOworICAgICAgIHN0YXR1cyA9IFNOTVBFUlJfQkFEX1NFU1NJT047CiAgICAgICAgc3RybGNweShlcnJfc3RyLCBzbm1wX2FwaV9lcnJzdHJpbmcoKmVycl9pbmQpLCBTVFJfQlVGX1NJWkUpOwogICAgICAgIGdvdG8gZG9uZTsKICAgIH0KIAogcmV0cnk6CiAKLSAgIHN0YXR1cyA9IHNubXBfc3luY2hfcmVzcG9uc2Uoc3MsIHBkdSwgcmVzcG9uc2UpOworICAgUHlfQkVHSU5fQUxMT1dfVEhSRUFEUworICAgc3RhdHVzID0gc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNzLCBwZHUsIHJlc3BvbnNlKTsKKyAgIFB5X0VORF9BTExPV19USFJFQURTCiAKICAgIGlmICgoKnJlc3BvbnNlID09IE5VTEwpICYmIChzdGF0dXMgPT0gU1RBVF9TVUNDRVNTKSkgc3RhdHVzID0gU1RBVF9FUlJPUjsKIApAQCAtMTEwNCw2ICsxMTA4LDggQEAKIAogICBfX2xpYnJhcmllc19pbml0KCJweXRob24iKTsKIAorICBzbm1wX3Nlc3NfaW5pdCgmc2Vzc2lvbik7CisKICAgc2Vzc2lvbi52ZXJzaW9uID0gLTE7CiAjaWZuZGVmIERJU0FCTEVfU05NUFYxCiAgIGlmICh2ZXJzaW9uID09IDEpIHsKQEAgLTExMzIsNyArMTEzOCw3IEBACiAgIHNlc3Npb24udGltZW91dCA9IHRpbWVvdXQ7IC8qIDEwMDAwMDBMICovCiAgIHNlc3Npb24uYXV0aGVudGljYXRvciA9IE5VTEw7CiAKLSAgc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworICBzcyA9IHNubXBfc2Vzc19vcGVuKCZzZXNzaW9uKTsKIAogICBpZiAoc3MgPT0gTlVMTCkgewogICAgIGlmICh2ZXJib3NlKSAKQEAgLTEyOTEsNiArMTI5Nyw5OSBAQAogfQogCiBzdGF0aWMgUHlPYmplY3QgKgorbmV0c25tcF9jcmVhdGVfc2Vzc2lvbl90dW5uZWxlZChQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCit7CisgIGludCB2ZXJzaW9uOworICBjaGFyICpwZWVyOworICBpbnQgIGxwb3J0OworICBpbnQgIHJldHJpZXM7CisgIGludCAgdGltZW91dDsKKyAgY2hhciAqICBzZWNfbmFtZTsKKyAgaW50ICAgICBzZWNfbGV2ZWw7CisgIGNoYXIgKiAgY29udGV4dF9lbmdfaWQ7CisgIGNoYXIgKiAgY29udGV4dDsKKyAgY2hhciAqICBvdXJfaWRlbnRpdHk7CisgIGNoYXIgKiAgdGhlaXJfaWRlbnRpdHk7CisgIGNoYXIgKiAgdGhlaXJfaG9zdG5hbWU7CisgIGNoYXIgKiAgdHJ1c3RfY2VydDsKKyAgU25tcFNlc3Npb24gc2Vzc2lvbiA9IHswfTsKKyAgU25tcFNlc3Npb24gKnNzID0gTlVMTDsKKyAgaW50IHZlcmJvc2UgPSBweV9uZXRzbm1wX3ZlcmJvc2UoKTsKKworICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgImlzaWlpc2lzc3Nzc3MiLCAmdmVyc2lvbiwKKwkJCSZwZWVyLCAmbHBvcnQsICZyZXRyaWVzLCAmdGltZW91dCwKKwkJCSZzZWNfbmFtZSwgJnNlY19sZXZlbCwKKwkJCSZjb250ZXh0X2VuZ19pZCwgJmNvbnRleHQsIAorCQkJJm91cl9pZGVudGl0eSwgJnRoZWlyX2lkZW50aXR5LCAKKwkJCSZ0aGVpcl9ob3N0bmFtZSwgJnRydXN0X2NlcnQpKQorICAgIHJldHVybiBOVUxMOworCisgIF9fbGlicmFyaWVzX2luaXQoInB5dGhvbiIpOworICBzbm1wX3Nlc3NfaW5pdCgmc2Vzc2lvbik7CisKKyAgaWYgKHZlcnNpb24gIT0gMykgeworICAgIHNlc3Npb24udmVyc2lvbiA9IFNOTVBfVkVSU0lPTl8zOworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBwcmludGYoIlVzaW5nIHZlcnNpb24gMyBhcyBpdCdzIHRoZSBvbmx5IHZlcnNpb24gdGhhdCBzdXBwb3J0cyB0dW5uZWxpbmdcbiIpOworICB9CisKKyAgc2Vzc2lvbi5wZWVybmFtZSA9IHBlZXI7CisgIHNlc3Npb24ucmV0cmllcyA9IHJldHJpZXM7IC8qIDUgKi8KKyAgc2Vzc2lvbi50aW1lb3V0ID0gdGltZW91dDsgLyogMTAwMDAwMEwgKi8KKyAgc2Vzc2lvbi5jb250ZXh0TmFtZUxlbiA9IFNUUkxFTihjb250ZXh0KTsKKyAgc2Vzc2lvbi5jb250ZXh0TmFtZSA9IGNvbnRleHQ7CisgIHNlc3Npb24uc2VjdXJpdHlOYW1lTGVuID0gU1RSTEVOKHNlY19uYW1lKTsKKyAgc2Vzc2lvbi5zZWN1cml0eU5hbWUgPSBzZWNfbmFtZTsKKyAgc2Vzc2lvbi5zZWN1cml0eUxldmVsID0gc2VjX2xldmVsOworICBzZXNzaW9uLnNlY3VyaXR5TW9kZWwgPSBORVRTTk1QX1RTTV9TRUNVUklUWV9NT0RFTDsKKworICAvKiBjcmVhdGUgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIHN0b3JlICovCisgIGlmICghc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgbmV0c25tcF9jb250YWluZXJfaW5pdF9saXN0KCk7CisgICAgICBzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uID0KKyAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0cmFuc3BvcnRfY29uZmlndXJhdGlvbjpmaWZvIik7CisgICAgICBpZiAoIXNlc3Npb24udHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImZhaWxlZCB0byBpbml0aWFsaXplIHRoZSB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBjb250YWluZXJcbiIpOworICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgfQorCisgICAgICBzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLT5jb21wYXJlID0KKyAgICAgICAgICAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopCisgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnX2NvbXBhcmU7CisgIH0KKworICBpZiAob3VyX2lkZW50aXR5ICYmIG91cl9pZGVudGl0eVswXSAhPSAnXDAnKQorICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJsb2NhbENlcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91cl9pZGVudGl0eSkpOworCisgIGlmICh0aGVpcl9pZGVudGl0eSAmJiB0aGVpcl9pZGVudGl0eVswXSAhPSAnXDAnKQorICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJwZWVyQ2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlaXJfaWRlbnRpdHkpKTsKKworICBpZiAodGhlaXJfaG9zdG5hbWUgJiYgdGhlaXJfaG9zdG5hbWVbMF0gIT0gJ1wwJykKKyAgICAgIENPTlRBSU5FUl9JTlNFUlQoc2Vzc2lvbi50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZygidGhlaXJfaG9zdG5hbWUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZWlyX2hvc3RuYW1lKSk7CisKKyAgaWYgKHRydXN0X2NlcnQgJiYgdHJ1c3RfY2VydFswXSAhPSAnXDAnKQorICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLAorICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jcmVhdGVfY29uZmlnKCJ0cnVzdF9jZXJ0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cnVzdF9jZXJ0KSk7CisgIAorICBzcyA9IHNubXBfc2Vzc19vcGVuKCZzZXNzaW9uKTsKKworICBpZiAoIXNzKQorICAgICAgcmV0dXJuIE5VTEw7CisgIC8qCisgICAqIE5vdGU6IG9uIGEgNjQtYml0IHN5c3RlbSB0aGUgc3RhdGVtZW50IGJlbG93IGRpc2NhcmRzIHRoZSB1cHBlciAzMiBiaXRzIG9mCisgICAqICJzcyIsIHdoaWNoIGlzIG1vc3QgbGlrZWx5IGEgYnVnLgorICAgKi8KKyAgcmV0dXJuIFB5X0J1aWxkVmFsdWUoImkiLCAoaW50KSh1aW50cHRyX3Qpc3MpOworfQorCitzdGF0aWMgUHlPYmplY3QgKgogbmV0c25tcF9kZWxldGVfc2Vzc2lvbihQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZ3MpCiB7CiAgIFB5T2JqZWN0ICpzZXNzaW9uOwpAQCAtMTMwMiw3ICsxNDAxLDcgQEAKIAogICBzcyA9IChTbm1wU2Vzc2lvbiAqKXB5X25ldHNubXBfYXR0cl92b2lkX3B0cihzZXNzaW9uLCAic2Vzc19wdHIiKTsKIAotICBzbm1wX2Nsb3NlKHNzKTsKKyAgc25tcF9zZXNzX2Nsb3NlKHNzKTsKICAgcmV0dXJuIChQeV9CdWlsZFZhbHVlKCIiKSk7CiB9CiAKQEAgLTE0OTIsMTAgKzE1OTEsMTYgQEAKIAlweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidmFsIiwgKGNoYXIgKikgc3RyX2J1ZiwgbGVuKTsKIAogCS8qIHNhdmUgaW4gcmV0dXJuIHR1cGxlIGFzIHdlbGwgKi8KLQlQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCB2YXJsaXN0X2luZCwgCi0JCQkobGVuID8gUHlfQnVpbGRWYWx1ZSgicyMiLCBzdHJfYnVmLCBsZW4pIDoKLQkJCSBQeV9CdWlsZFZhbHVlKCIiKSkpOwotCisJaWYgKCh0eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKSB8fAorCQkJKHR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QpIHx8CisJCQkodHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSkgeworCQkvKiBUcmFuc2xhdGUgZXJyb3IgdG8gTm9uZSAqLworCQlQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCB2YXJsaXN0X2luZCwgCisJCQlQeV9CdWlsZFZhbHVlKCIiKSk7CisJfSBlbHNlIHsKKwkJUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgdmFybGlzdF9pbmQsCisJCQlQeV9CdWlsZFZhbHVlKCJzIyIsIHN0cl9idWYsIGxlbikpOworCX0KIAlQeV9ERUNSRUYodmFyYmluZCk7CiAgICAgICB9IGVsc2UgewogCXByaW50ZigibmV0c25tcF9nZXQ6IGJhZCB2YXJiaW5kICglZClcbiIsIHZhcmxpc3RfaW5kKTsKQEAgLTE3MDYsMTAgKzE4MTEsMTYgQEAKIAlweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidmFsIiwgKGNoYXIgKikgc3RyX2J1ZiwgbGVuKTsKIAogCS8qIHNhdmUgaW4gcmV0dXJuIHR1cGxlIGFzIHdlbGwgKi8KLQlQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCB2YXJsaXN0X2luZCwgCi0JCQkobGVuID8gUHlfQnVpbGRWYWx1ZSgicyMiLCBzdHJfYnVmLCBsZW4pIDoKLQkJCSBQeV9CdWlsZFZhbHVlKCIiKSkpOwotCisJaWYgKCh0eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKSB8fAorCQkJKHR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QpIHx8CisJCQkodHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSkgeworCQkvKiBUcmFuc2xhdGUgZXJyb3IgdG8gTm9uZSAqLworCQlQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCB2YXJsaXN0X2luZCwgCisJCQlQeV9CdWlsZFZhbHVlKCIiKSk7CisJfSBlbHNlIHsKKwkJUHlUdXBsZV9TZXRJdGVtKHZhbF90dXBsZSwgdmFybGlzdF9pbmQsCisJCQlQeV9CdWlsZFZhbHVlKCJzIyIsIHN0cl9idWYsIGxlbikpOworCX0KIAlQeV9ERUNSRUYodmFyYmluZCk7CiAgICAgICB9IGVsc2UgewogCXByaW50ZigibmV0c25tcF9nZXRuZXh0OiBiYWQgdmFyYmluZCAoJWQpXG4iLCB2YXJsaXN0X2luZCk7CkBAIC0xNzQzLDExICsxODU0LDE0IEBACiAgIGludCB2YXJsaXN0X2luZDsKICAgbmV0c25tcF9zZXNzaW9uICpzczsKICAgbmV0c25tcF9wZHUgKnBkdSwgKnJlc3BvbnNlOwotICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnM7CisgIG5ldHNubXBfcGR1ICpuZXdwZHU7CisgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKm9sZHZhcnM7CiAgIHN0cnVjdCB0cmVlICp0cDsKICAgaW50IGxlbjsKLSAgb2lkICpvaWRfYXJyOwotICBpbnQgb2lkX2Fycl9sZW47CisgIG9pZCAqKm9pZF9hcnIgPSBOVUxMOworICBpbnQgKm9pZF9hcnJfbGVuID0gTlVMTDsKKyAgb2lkICoqb2lkX2Fycl9icm9rZW5fY2hlY2sgPSBOVUxMOworICBpbnQgKm9pZF9hcnJfYnJva2VuX2NoZWNrX2xlbiA9IE5VTEw7CiAgIGludCB0eXBlOwogICBjaGFyIHR5cGVfc3RyW01BWF9UWVBFX05BTUVfTEVOXTsKICAgaW50IHN0YXR1czsKQEAgLTE3NzEsOSArMTg4NSw3IEBACiAgIGNoYXIgKnRtcHN0cjsKICAgUHlfc3NpemVfdCB0bXBsZW47CiAJICAgCi0gIG9pZF9hcnIgPSBjYWxsb2MoTUFYX09JRF9MRU4sIHNpemVvZihvaWQpKTsKLQotICBpZiAob2lkX2FyciAmJiBhcmdzKSB7CisgIGlmIChhcmdzKSB7CiAKICAgICBpZiAoIVB5QXJnX1BhcnNlVHVwbGUoYXJncywgIk9PIiwgJnNlc3Npb24sICZ2YXJsaXN0KSkgewogICAgICAgZ290byBkb25lOwpAQCAtMTgwNiwyNyArMTkxOCw1MiBAQAogICAgIGJlc3RfZ3Vlc3MgPSBweV9uZXRzbm1wX2F0dHJfbG9uZyhzZXNzaW9uLCAiQmVzdEd1ZXNzIik7CiAgICAgcmV0cnlfbm9zdWNoID0gcHlfbmV0c25tcF9hdHRyX2xvbmcoc2Vzc2lvbiwgIlJldHJ5Tm9TdWNoIik7CiAgICAgICAgIAotICAgIHZhcmxpc3RfaXRlciA9IFB5T2JqZWN0X0dldEl0ZXIodmFybGlzdCk7Ci0KICAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUTkVYVCk7CiAgICAgCi0gICAgLyogZ2V0IHRoZSBpbml0aWFsIHN0YXJ0aW5nIG9pZHMqLworICAgIC8qIHdlIG5lZWQgYW4gaW5pdGlhbCBjb3VudCBmb3IgbWVtb3J5IGFsbG9jYXRpb24gKi8KKyAgICB2YXJsaXN0X2l0ZXIgPSBQeU9iamVjdF9HZXRJdGVyKHZhcmxpc3QpOworICAgIHZhcmxpc3RfbGVuID0gMDsKICAgICB3aGlsZSAodmFybGlzdF9pdGVyICYmICh2YXJiaW5kID0gUHlJdGVyX05leHQodmFybGlzdF9pdGVyKSkpIHsKKyAgICAgICAgdmFybGlzdF9sZW4rKzsKKyAgICB9CisgICAgUHlfREVDUkVGKHZhcmxpc3RfaXRlcik7CisKKyAgICBvaWRfYXJyX2xlbiAgICAgICAgICAgICAgPSBjYWxsb2ModmFybGlzdF9sZW4sIHNpemVvZihpbnQpKTsKKyAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW4gPSBjYWxsb2ModmFybGlzdF9sZW4sIHNpemVvZihpbnQpKTsKKworICAgIG9pZF9hcnIgICAgICAgICAgICAgICAgICA9IGNhbGxvYyh2YXJsaXN0X2xlbiwgc2l6ZW9mKG9pZCAqKSk7CisgICAgb2lkX2Fycl9icm9rZW5fY2hlY2sgICAgID0gY2FsbG9jKHZhcmxpc3RfbGVuLCBzaXplb2Yob2lkICopKTsKKworICAgIGZvcih2YXJsaXN0X2luZCA9IDA7IHZhcmxpc3RfaW5kIDwgdmFybGlzdF9sZW47IHZhcmxpc3RfaW5kKyspIHsKKworICAgICAgICBvaWRfYXJyW3Zhcmxpc3RfaW5kXSA9IGNhbGxvYyhNQVhfT0lEX0xFTiwgc2l6ZW9mKG9pZCkpOworICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja1t2YXJsaXN0X2luZF0gPSBjYWxsb2MoTUFYX09JRF9MRU4sIHNpemVvZihvaWQpKTsKKworICAgICAgICBvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0gICAgICAgICAgICAgID0gTUFYX09JRF9MRU47CisgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrX2xlblt2YXJsaXN0X2luZF0gPSBNQVhfT0lEX0xFTjsKKyAgICB9CisKKyAgICAvKiBnZXQgdGhlIGluaXRpYWwgc3RhcnRpbmcgb2lkcyovCisgICAgdmFybGlzdF9pdGVyID0gUHlPYmplY3RfR2V0SXRlcih2YXJsaXN0KTsKKyAgICB2YXJsaXN0X2luZCA9IDA7CisgICAgd2hpbGUgKHZhcmxpc3RfaXRlciAmJiAodmFyYmluZCA9IFB5SXRlcl9OZXh0KHZhcmxpc3RfaXRlcikpKSB7CisKICAgICAgIGlmIChweV9uZXRzbm1wX2F0dHJfc3RyaW5nKHZhcmJpbmQsICJ0YWciLCAmdGFnLCBOVUxMKSA8IDAgfHwKICAgICAgICAgIHB5X25ldHNubXBfYXR0cl9zdHJpbmcodmFyYmluZCwgImlpZCIsICZpaWQsIE5VTEwpIDwgMCkKICAgICAgIHsKLSAgICAgICAgb2lkX2Fycl9sZW4gPSAwOworICAgICAgICBvaWRfYXJyX2xlblt2YXJsaXN0X2luZF0gPSAwOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgdHAgPSBfX3RhZzJvaWQodGFnLCBpaWQsIG9pZF9hcnIsICZvaWRfYXJyX2xlbiwgTlVMTCwgYmVzdF9ndWVzcyk7CisgICAgICAgIHRwID0gX190YWcyb2lkKHRhZywgaWlkLAorICAgICAgICAgICAgICAgICAgICAgICBvaWRfYXJyW3Zhcmxpc3RfaW5kXSwgJm9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSwKKyAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgYmVzdF9ndWVzcyk7CiAgICAgICB9CiAKICAgICAgIGlmIChfZGVidWdfbGV2ZWwpIAogCXByaW50ZigibmV0c25tcF93YWxrOiBmaWxsaW5nIHJlcXVlc3Q6ICVzOiVzOiVkOiVkXG4iLCAKLQkgICAgICAgdGFnLCBpaWQsIG9pZF9hcnJfbGVuLGJlc3RfZ3Vlc3MpOworCSAgICAgICB0YWcsIGlpZCwgb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdLGJlc3RfZ3Vlc3MpOwogCi0gICAgICBpZiAob2lkX2Fycl9sZW4pIHsKLSAgICAgICAgc25tcF9hZGRfbnVsbF92YXIocGR1LCBvaWRfYXJyLCBvaWRfYXJyX2xlbik7Ci0gICAgICAgIHZhcmxpc3RfbGVuKys7CisgICAgICBpZiAob2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdKSB7CisgICAgICAgIHNubXBfYWRkX251bGxfdmFyKHBkdSwgb2lkX2Fyclt2YXJsaXN0X2luZF0sIG9pZF9hcnJfbGVuW3Zhcmxpc3RfaW5kXSk7CiAgICAgICB9IGVsc2UgewogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICBwcmludGYoImVycm9yOiB3YWxrOiB1bmtub3duIG9iamVjdCBJRCAoJXMpIiwKQEAgLTE4MzcsNiArMTk3NCw3IEBACiAgICAgICB9CiAgICAgICAvKiByZWxlYXNlIHJlZmVyZW5jZSB3aGVuIGRvbmUgKi8KICAgICAgIFB5X0RFQ1JFRih2YXJiaW5kKTsKKyAgICAgIHZhcmxpc3RfaW5kKys7CiAgICAgfQogCiAgICAgaWYgKHZhcmxpc3RfaXRlcikKQEAgLTE5MDEsNiArMjAzOSwxOSBAQAogICAgICAgZ290byBkb25lOwogICAgIH0KIAorICAgIC8qIHNhdmUgdGhlIHN0YXJ0aW5nIE9JRCAqLworCisgICAgZm9yKHZhcnMgPSBwZHUtPnZhcmlhYmxlcywgdmFybGlzdF9pbmQgPSAwOworICAgICAgICB2YXJzICE9IE5VTEw7CisgICAgICAgIHZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlLCB2YXJsaXN0X2luZCsrKSB7CisKKyAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tbdmFybGlzdF9pbmRdID0gY2FsbG9jKE1BWF9PSURfTEVOLCBzaXplb2Yob2lkKSk7CisKKyAgICAgICAgb2lkX2Fycl9icm9rZW5fY2hlY2tfbGVuW3Zhcmxpc3RfaW5kXSA9IHZhcnMtPm5hbWVfbGVuZ3RoOworICAgICAgICBtZW1jcHkob2lkX2Fycl9icm9rZW5fY2hlY2tbdmFybGlzdF9pbmRdLAorICAgICAgICAgICAgICAgdmFycy0+bmFtZSwgdmFycy0+bmFtZV9sZW5ndGggKiBzaXplb2Yob2lkKSk7CisgICAgfQorCiAgICAgd2hpbGUobm90ZG9uZSkgewogCiAgICAgICBzdGF0dXMgPSBfX3NlbmRfc3luY19wZHUoc3MsIHBkdSwgJnJlc3BvbnNlLCByZXRyeV9ub3N1Y2gsIApAQCAtMTkwOCw4NCArMjA1OSwxMTIgQEAKICAgICAgIF9fcHlfbmV0c25tcF91cGRhdGVfc2Vzc2lvbl9lcnJvcnMoc2Vzc2lvbiwgZXJyX3N0ciwgZXJyX251bSwgZXJyX2luZCk7CiAKICAgICAgIGlmICghcmVzcG9uc2UgfHwgIXJlc3BvbnNlLT52YXJpYWJsZXMgfHwKLSAgICAgICAgICAocmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGggPCBvaWRfYXJyX2xlbikgfHwKLSAgICAgICAgICAobWVtY21wKG9pZF9hcnIsIHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWUsCi0gICAgICAgICAgICAgICAgICBvaWRfYXJyX2xlbiAqIHNpemVvZihvaWQpKSkgfHwKICAgICAgICAgICBzdGF0dXMgIT0gU1RBVF9TVUNDRVNTIHx8CiAgICAgICAgICAgcmVzcG9uc2UtPmVycnN0YXQgIT0gU05NUF9FUlJfTk9FUlJPUikgewogICAgICAgICAgIG5vdGRvbmUgPSAwOwogICAgICAgfSBlbHNlIHsKLSAgICAgICAgZm9yKHZhcnMgPSAocmVzcG9uc2UgPyByZXNwb25zZS0+dmFyaWFibGVzIDogTlVMTCksIHZhcmxpc3RfaW5kID0gMDsKLSAgICAJdmFycyAmJiAodmFybGlzdF9pbmQgPCB2YXJsaXN0X2xlbik7Ci0gICAgCXZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlLCB2YXJsaXN0X2luZCsrKSB7CisgICAgICAgICAgbmV3cGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVE5FWFQpOwogCi0gICAgICAgICAgaWYgKCh2YXJzLT50eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKSB8fAotICAgICAgICAgICAgICAodmFycy0+dHlwZSA9PSBTTk1QX05PU1VDSE9CSkVDVCkgfHwKLSAgICAgICAgICAgICAgKHZhcnMtPnR5cGUgPT0gU05NUF9OT1NVQ0hJTlNUQU5DRSkpIHsKLSAgICAgICAgICAgICAgbm90ZG9uZSA9IDA7Ci0gICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgIGZvcih2YXJzID0gKHJlc3BvbnNlID8gcmVzcG9uc2UtPnZhcmlhYmxlcyA6IE5VTEwpLAorICAgICAgICAgICAgICAgICAgdmFybGlzdF9pbmQgPSAwLAorICAgICAgICAgICAgICAgICAgb2xkdmFycyA9IChwZHUgPyBwZHUtPnZhcmlhYmxlcyA6IE5VTEwpOworICAgICAgICAgICAgICB2YXJzICYmICh2YXJsaXN0X2luZCA8IHZhcmxpc3RfbGVuKTsKKyAgICAgICAgICAgICAgdmFycyA9IHZhcnMtPm5leHRfdmFyaWFibGUsIHZhcmxpc3RfaW5kKyssCisgICAgICAgICAgICAgICAgICBvbGR2YXJzID0gKG9sZHZhcnMgPyBvbGR2YXJzLT5uZXh0X3ZhcmlhYmxlIDogTlVMTCkpIHsKKworICAgICAgICAgICAgICBpZiAoKHZhcnMtPm5hbWVfbGVuZ3RoIDwgb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdKSB8fAorICAgICAgICAgICAgICAgICAgKG1lbWNtcChvaWRfYXJyW3Zhcmxpc3RfaW5kXSwgdmFycy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkX2Fycl9sZW5bdmFybGlzdF9pbmRdICogc2l6ZW9mKG9pZCkpICE9IDApKSB7CisgICAgICAgICAgICAgICAgICBub3Rkb25lID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgaWYgKCh2YXJzLT50eXBlID09IFNOTVBfRU5ET0ZNSUJWSUVXKSB8fAorICAgICAgICAgICAgICAgICAgKHZhcnMtPnR5cGUgPT0gU05NUF9OT1NVQ0hPQkpFQ1QpIHx8CisgICAgICAgICAgICAgICAgICAodmFycy0+dHlwZSA9PSBTTk1QX05PU1VDSElOU1RBTkNFKSkgeworICAgICAgICAgICAgICAgICAgbm90ZG9uZSA9IDA7CisgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgIGlmIChzbm1wX29pZF9jb21wYXJlKHZhcnMtPm5hbWUsIHZhcnMtPm5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja1t2YXJsaXN0X2luZF0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZF9hcnJfYnJva2VuX2NoZWNrX2xlblt2YXJsaXN0X2luZF0pIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgIC8qIFRoZSBhZ2VudCByZXNwb25kZWQgd2l0aCBhbiBpbGxlZ2FsIHJlc3BvbnNlCisgICAgICAgICAgICAgICAgICAgICBhcyB0aGUgcmV0dXJuaW5nIE9JRCB3YXMgbGV4b2dyYWdpY2FsbHkgbGVzcworICAgICAgICAgICAgICAgICAgICAgdGhlbiBvciBlcXVhbCB0byB0aGUgcmVxdWVzdGVkIE9JRC4uLgorICAgICAgICAgICAgICAgICAgICAgV2UgbmVlZCB0byBnaXZlIHVwIGhlcmUgYmVjYXVzZSBhbiBpbmZpdGUKKyAgICAgICAgICAgICAgICAgICAgIGxvb3Agd2lsbCByZXN1bHQgb3RoZXJ3aXNlLgorCisgICAgICAgICAgICAgICAgICAgICBYWFg6IHRoaXMgcmVhbGx5IHNob3VsZCBiZSBhbiBvcHRpb24gdG8KKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlIGxpa2UgdGhlIC1DYyBvcHRpb24gdG8gdGhlIHNubXB3YWxrCisgICAgICAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICBub3Rkb25lID0gMDsKKyAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgdmFyYmluZCA9IHB5X25ldHNubXBfY29uc3RydWN0X3ZhcmJpbmQoKTsKKworICAgICAgICAgICAgICBpZiAoUHlPYmplY3RfSGFzQXR0clN0cmluZyh2YXJiaW5kLCAidGFnIikpIHsKKyAgICAgICAgICAgICAgICAgIHN0cl9idWZbMF0gPSAnLic7CisgICAgICAgICAgICAgICAgICBzdHJfYnVmWzFdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgIG91dF9sZW4gPSAwOworICAgICAgICAgICAgICAgICAgdHAgPSBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUoJnN0cl9idWZwLCAmc3RyX2J1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2xlbiwgMCwgJmJ1Zl9vdmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycy0+bmFtZSx2YXJzLT5uYW1lX2xlbmd0aCk7CisgICAgICAgICAgICAgICAgICBzdHJfYnVmW3NpemVvZihzdHJfYnVmKS0xXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICAgIGlmIChfX2lzX2xlYWYodHApKSB7CisgICAgICAgICAgICAgICAgICAgICAgdHlwZSA9ICh0cC0+dHlwZSA/IHRwLT50eXBlIDogdHAtPnBhcmVudC0+dHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgZ2V0bGFiZWxfZmxhZyAmPSB+Tk9OX0xFQUZfTkFNRTsKKyAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgZ2V0bGFiZWxfZmxhZyB8PSBOT05fTEVBRl9OQU1FOworICAgICAgICAgICAgICAgICAgICAgIHR5cGUgPSBfX3RyYW5zbGF0ZV9hc25fdHlwZSh2YXJzLT50eXBlKTsKKyAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgX19nZXRfbGFiZWxfaWlkKChjaGFyICopIHN0cl9idWYsICZ0YWcsICZpaWQsIGdldGxhYmVsX2ZsYWcpOworCisgICAgICAgICAgICAgICAgICBpZiAoX2RlYnVnX2xldmVsKSBwcmludGYoIm5ldHNubXBfd2FsazogZmlsbGluZyByZXNwb25zZTogJXM6JXNcbiIsIHRhZywgaWlkKTsKKworICAgICAgICAgICAgICAgICAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInRhZyIsIHRhZywgU1RSTEVOKHRhZykpOworICAgICAgICAgICAgICAgICAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgImlpZCIsIGlpZCwgU1RSTEVOKGlpZCkpOworCisgICAgICAgICAgICAgICAgICBfX2dldF90eXBlX3N0cih0eXBlLCB0eXBlX3N0cik7CisKKyAgICAgICAgICAgICAgICAgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ0eXBlIiwgdHlwZV9zdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4odHlwZV9zdHIpKTsKKworICAgICAgICAgICAgICAgICAgbGVuID0gX19zbnByaW50X3ZhbHVlKChjaGFyICopIHN0cl9idWYsc2l6ZW9mKHN0cl9idWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnMsdHAsdHlwZSxzcHJpbnR2YWxfZmxhZyk7CisgICAgICAgICAgICAgICAgICBzdHJfYnVmW2xlbl0gPSAnXDAnOworCisgICAgICAgICAgICAgICAgICBweV9uZXRzbm1wX2F0dHJfc2V0X3N0cmluZyh2YXJiaW5kLCAidmFsIiwgKGNoYXIgKikgc3RyX2J1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgIC8qIHB1c2ggdGhlIHZhcmJpbmQgb250byB0aGUgcmV0dXJuIHZhcmJpbmRzICovCisgICAgICAgICAgICAgICAgICBQeUxpc3RfQXBwZW5kKHZhcmJpbmRzLCB2YXJiaW5kKTsKKworICAgICAgICAgICAgICAgICAgLyogc2F2ZSBpbiByZXR1cm4gdHVwbGUgYXMgd2VsbCAqLworICAgICAgICAgICAgICAgICAgLyogc2F2ZSBpbiByZXR1cm4gdHVwbGUgYXMgd2VsbCAtIHN0ZWFscyByZWYgKi8KKyAgICAgICAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZSgmdmFsX3R1cGxlLCByZXN1bHRfY291bnQrMSk7CisgICAgICAgICAgICAgICAgICBQeVR1cGxlX1NldEl0ZW0odmFsX3R1cGxlLCByZXN1bHRfY291bnQrKywgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHlfQnVpbGRWYWx1ZSgicyMiLCBzdHJfYnVmLCBsZW4pKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgIC8qIFJldHVybiBOb25lIGZvciB0aGlzIHZhcmlhYmxlLiAqLworICAgICAgICAgICAgICAgICAgX1B5VHVwbGVfUmVzaXplKCZ2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsxKTsKKyAgICAgICAgICAgICAgICAgIFB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsrLCBQeV9CdWlsZFZhbHVlKCIiKSk7CisgICAgICAgICAgICAgICAgICBwcmludGYoIm5ldHNubXBfd2FsazogYmFkIHZhcmJpbmQgKCVkKVxuIiwgdmFybGlzdF9pbmQpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIFB5X1hERUNSRUYodmFyYmluZCk7CisKKyAgICAgICAgICAgICAgbWVtY3B5KG9pZF9hcnJfYnJva2VuX2NoZWNrW3Zhcmxpc3RfaW5kXSwgdmFycy0+bmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvaWQpICogdmFycy0+bmFtZV9sZW5ndGgpOworICAgICAgICAgICAgICBvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW5bdmFybGlzdF9pbmRdID0gdmFycy0+bmFtZV9sZW5ndGg7CisKKyAgICAgICAgICAgICAgc25tcF9hZGRfbnVsbF92YXIobmV3cGR1LCB2YXJzLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJzLT5uYW1lX2xlbmd0aCk7CiAgICAgICAgICAgfQotCi0gICAgICAgICAgdmFyYmluZCA9IHB5X25ldHNubXBfY29uc3RydWN0X3ZhcmJpbmQoKTsKLQotICAgICAgICAgIGlmIChQeU9iamVjdF9IYXNBdHRyU3RyaW5nKHZhcmJpbmQsICJ0YWciKSkgewotICAgIAkgIHN0cl9idWZbMF0gPSAnLic7Ci0gICAgCSAgc3RyX2J1ZlsxXSA9ICdcMCc7Ci0gICAgCSAgb3V0X2xlbiA9IDA7Ci0gICAgCSAgdHAgPSBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUoJnN0cl9idWZwLCAmc3RyX2J1Zl9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2xlbiwgMCwgJmJ1Zl9vdmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFycy0+bmFtZSx2YXJzLT5uYW1lX2xlbmd0aCk7Ci0gICAgCSAgc3RyX2J1ZltzaXplb2Yoc3RyX2J1ZiktMV0gPSAnXDAnOwotCi0gICAgCSAgaWYgKF9faXNfbGVhZih0cCkpIHsKLQkgICAgdHlwZSA9ICh0cC0+dHlwZSA/IHRwLT50eXBlIDogdHAtPnBhcmVudC0+dHlwZSk7Ci0gICAgCSAgICBnZXRsYWJlbF9mbGFnICY9IH5OT05fTEVBRl9OQU1FOwotICAgIAkgIH0gZWxzZSB7Ci0gICAgCSAgICBnZXRsYWJlbF9mbGFnIHw9IE5PTl9MRUFGX05BTUU7Ci0gICAgCSAgICB0eXBlID0gX190cmFuc2xhdGVfYXNuX3R5cGUodmFycy0+dHlwZSk7Ci0gICAgCSAgfQotCi0gICAgICAgICAgX19nZXRfbGFiZWxfaWlkKChjaGFyICopIHN0cl9idWYsICZ0YWcsICZpaWQsIGdldGxhYmVsX2ZsYWcpOwotCi0gICAgCSAgaWYgKF9kZWJ1Z19sZXZlbCkgcHJpbnRmKCJuZXRzbm1wX3dhbGs6IGZpbGxpbmcgcmVzcG9uc2U6ICVzOiVzXG4iLCB0YWcsIGlpZCk7Ci0KLQkgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ0YWciLCB0YWcsIFNUUkxFTih0YWcpKTsKLQkgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJpaWQiLCBpaWQsIFNUUkxFTihpaWQpKTsKLQotICAgIAkgIF9fZ2V0X3R5cGVfc3RyKHR5cGUsIHR5cGVfc3RyKTsKLQotCSAgcHlfbmV0c25tcF9hdHRyX3NldF9zdHJpbmcodmFyYmluZCwgInR5cGUiLCB0eXBlX3N0ciwgCi0JCQkJICAgICBzdHJsZW4odHlwZV9zdHIpKTsKLQotICAgIAkgIGxlbiA9IF9fc25wcmludF92YWx1ZSgoY2hhciAqKSBzdHJfYnVmLHNpemVvZihzdHJfYnVmKSwKLQkJCQl2YXJzLHRwLHR5cGUsc3ByaW50dmFsX2ZsYWcpOwotICAgIAkgIHN0cl9idWZbbGVuXSA9ICdcMCc7Ci0KLQkgIHB5X25ldHNubXBfYXR0cl9zZXRfc3RyaW5nKHZhcmJpbmQsICJ2YWwiLCAoY2hhciAqKSBzdHJfYnVmLCBsZW4pOwotICAgICAgICAgICAgCi0JICAvKiBwdXNoIHRoZSB2YXJiaW5kIG9udG8gdGhlIHJldHVybiB2YXJiaW5kcyAqLwotCSAgUHlMaXN0X0FwcGVuZCh2YXJiaW5kcywgdmFyYmluZCk7Ci0KLSAgICAJICAvKiBzYXZlIGluIHJldHVybiB0dXBsZSBhcyB3ZWxsICovCi0JICAvKiBzYXZlIGluIHJldHVybiB0dXBsZSBhcyB3ZWxsIC0gc3RlYWxzIHJlZiAqLwotCSAgX1B5VHVwbGVfUmVzaXplKCZ2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsxKTsKLQkgIFB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsrLCAKLQkJCSAgKGxlbiA/IFB5X0J1aWxkVmFsdWUoInMjIiwgc3RyX2J1ZiwgbGVuKSA6Ci0JCQkgICBQeV9CdWlsZFZhbHVlKCIiKSkpOwotICAgICAgICAgICAgCi0KLSAgICAgICAgICB9IGVsc2UgewotCSAgICAvKiBSZXR1cm4gTm9uZSBmb3IgdGhpcyB2YXJpYWJsZS4gKi8KLSAgICAgICAgICAgIF9QeVR1cGxlX1Jlc2l6ZSgmdmFsX3R1cGxlLCByZXN1bHRfY291bnQrMSk7Ci0JICAgIFB5VHVwbGVfU2V0SXRlbSh2YWxfdHVwbGUsIHJlc3VsdF9jb3VudCsrLCBQeV9CdWlsZFZhbHVlKCIiKSk7Ci0JICAgIHByaW50ZigibmV0c25tcF93YWxrOiBiYWQgdmFyYmluZCAoJWQpXG4iLCB2YXJsaXN0X2luZCk7Ci0gICAgICAgICAgfQkKLSAgICAgICAgICBQeV9YREVDUkVGKHZhcmJpbmQpOwotICAgICAgICB9Ci0gICAgICAgIC8qIHJldXNlIHRoZSByZXNwb25zZSBhcyB0aGUgbmV4dCBwZHUgdG8gc2VuZCAqLwotICAgICAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUTkVYVCk7Ci0gICAgICAgIHNubXBfYWRkX251bGxfdmFyKHBkdSwgcmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgpOworICAgICAgICAgIHBkdSA9IG5ld3BkdTsKICAgICAgIH0KICAgICAgIGlmIChyZXNwb25zZSkKIAlzbm1wX2ZyZWVfcGR1KHJlc3BvbnNlKTsKQEAgLTIwMDcsNyArMjE4NiwxNCBAQAogCiAgZG9uZToKICAgUHlfWERFQ1JFRih2YXJiaW5kcyk7CisgIFNBRkVfRlJFRShvaWRfYXJyX2xlbik7CisgIFNBRkVfRlJFRShvaWRfYXJyX2Jyb2tlbl9jaGVja19sZW4pOworICBmb3IodmFybGlzdF9pbmQgPSAwOyB2YXJsaXN0X2luZCA8IHZhcmxpc3RfbGVuOyB2YXJsaXN0X2luZCArKykgeworICAgICAgU0FGRV9GUkVFKG9pZF9hcnJbdmFybGlzdF9pbmRdKTsKKyAgICAgIFNBRkVfRlJFRShvaWRfYXJyX2Jyb2tlbl9jaGVja1t2YXJsaXN0X2luZF0pOworICB9CiAgIFNBRkVfRlJFRShvaWRfYXJyKTsKKyAgU0FGRV9GUkVFKG9pZF9hcnJfYnJva2VuX2NoZWNrKTsKICAgcmV0dXJuICh2YWxfdHVwbGUgPyB2YWxfdHVwbGUgOiBQeV9CdWlsZFZhbHVlKCIiKSk7CiB9CiAKQEAgLTIzNDUsNiArMjUzMSwxMCBAQAogCSAgc25tcF9mcmVlX3BkdShwZHUpOwogCSAgZ290byBkb25lOwogCX0KKwltZW1zZXQodG1wX3ZhbF9zdHIsIDAsIHNpemVvZih0bXBfdmFsX3N0cikpOworICAgICAgICBpZiAoIHRtcGxlbiA+PSBzaXplb2YodG1wX3ZhbF9zdHIpKSB7CisgICAgICAgICAgICB0bXBsZW4gPSBzaXplb2YodG1wX3ZhbF9zdHIpLTE7CisgICAgICAgIH0KIAltZW1jcHkodG1wX3ZhbF9zdHIsIHZhbCwgdG1wbGVuKTsKIAlpZiAodHlwZT09VFlQRV9JTlRFR0VSICYmIHVzZV9lbnVtcyAmJiB0cCAmJiB0cC0+ZW51bXMpIHsKIAkgIGZvcihlcCA9IHRwLT5lbnVtczsgZXA7IGVwID0gZXAtPm5leHQpIHsKQEAgLTI0MDAsNiArMjU5MCw4IEBACiAgICAiY3JlYXRlIGEgbmV0c25tcCBzZXNzaW9uLiJ9LAogICB7InNlc3Npb25fdjMiLCAgbmV0c25tcF9jcmVhdGVfc2Vzc2lvbl92MywgTUVUSF9WQVJBUkdTLAogICAgImNyZWF0ZSBhIG5ldHNubXAgc2Vzc2lvbi4ifSwKKyAgeyJzZXNzaW9uX3R1bm5lbGVkIiwgIG5ldHNubXBfY3JlYXRlX3Nlc3Npb25fdHVubmVsZWQsIE1FVEhfVkFSQVJHUywKKyAgICJjcmVhdGUgYSB0dW5uZWxlZCBuZXRzbm1wIHNlc3Npb24gb3ZlciB0bHMsIGR0bHMgb3Igc3NoLiJ9LAogICB7ImRlbGV0ZV9zZXNzaW9uIiwgIG5ldHNubXBfZGVsZXRlX3Nlc3Npb24sIE1FVEhfVkFSQVJHUywKICAgICJjcmVhdGUgYSBuZXRzbm1wIHNlc3Npb24uIn0sCiAgIHsiZ2V0IiwgIG5ldHNubXBfZ2V0LCBNRVRIX1ZBUkFSR1MsCmRpZmYgLS1naXQgYS9weXRob24vbmV0c25tcC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaCBiL3B5dGhvbi9uZXRzbm1wL25ldHNubXAtZmVhdHVyZS1kZWZpbml0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OTQxNmEKLS0tIC9kZXYvbnVsbAorKysgYi9weXRob24vbmV0c25tcC9uZXRzbm1wLWZlYXR1cmUtZGVmaW5pdGlvbnMuaApAQCAtMCwwICsxLDYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShzbnByaW50X3ZhbHVlKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZW5hYmxlX3N0ZGVycmxvZykKKwpkaWZmIC0tZ2l0IGEvcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZiBiL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3NubXBkLmNvbmYKaW5kZXggMTZhMGJmMi4uYjYyZTRjNyAxMDA2NDQKLS0tIGEvcHl0aG9uL25ldHNubXAvdGVzdHMvc25tcGQuY29uZgorKysgYi9weXRob24vbmV0c25tcC90ZXN0cy9zbm1wZC5jb25mCkBAIC00MTgsMyArNDE4LDggQEAKICMgIFNlZSB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZSwgYW5kIHRoZSBvdXRwdXQgb2YgInNubXBkIC1IIi4KICMgIE1VQ0ggbW9yZSBjYW4gYmUgZG9uZSB3aXRoIHRoZSBzbm1wZC5jb25mIHRoYW4gaXMgc2hvd24gYXMgYW4KICMgIGV4YW1wbGUgaGVyZS4KKworY2VydFNlY05hbWUgMTAgRDAyMEE3OEVBRjk5RkNFMjc2QUE5RjQzMDYzQTY5Njk4RTRGNzVEMSAtLXJmYzgyMgorcnd1c2VyIC1zIHRzbSBoYXJkYWtlckB3amguaGFyZGFrZXJzLm5ldAorCit0cnVzdENlcnQgRDAyMEE3OEVBRjk5RkNFMjc2QUE5RjQzMDYzQTY5Njk4RTRGNzVEMQpkaWZmIC0tZ2l0IGEvcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weSBiL3B5dGhvbi9uZXRzbm1wL3Rlc3RzL3Rlc3QucHkKaW5kZXggYTMyMzBiMi4uZTM5ODJmNCAxMDA2NDQKLS0tIGEvcHl0aG9uL25ldHNubXAvdGVzdHMvdGVzdC5weQorKysgYi9weXRob24vbmV0c25tcC90ZXN0cy90ZXN0LnB5CkBAIC0xOSw3ICsxOSw3IEBACiAKICAgICAgICAgdmFyID0gbmV0c25tcC5WYXJiaW5kKCcuMS4zLjYuMS4yLjEuMS4xJywnMCcpCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIEdFVCB0ZXN0cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHJlcyA9IG5ldHNubXAuc25tcGdldCh2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uID0gMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RIb3N0PSdsb2NhbGhvc3QnLApAQCAtMjksNyArMjksNyBAQAogCiAgICAgICAgIHByaW50ICJ2MSBnZXQgdmFyOiAiLCAgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgR0VUTkVYVCB0ZXN0cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgcmVzID0gbmV0c25tcC5zbm1wZ2V0bmV4dCh2YXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiA9IDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdEhvc3Q9J2xvY2FsaG9zdCcsCkBAIC0zOSw3ICszOSw3IEBACiAgICAgICAgICAgICAgICAgCiAgICAgICAgIHByaW50ICJ2MSBnZXRuZXh0IHZhcjogIiwgIHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIFNFVCB0ZXN0cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgdmFyID0gbmV0c25tcC5WYXJiaW5kKCdzeXNMb2NhdGlvbicsJzAnLCAnbXkgbmV3IGxvY2F0aW9uJykKICAgICAgICAgcmVzID0gbmV0c25tcC5zbm1wc2V0KHZhciwKICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPSAxLApAQCAtNTAsNyArNTAsNyBAQAogCiAgICAgICAgIHByaW50ICJ2MSBzZXQgdmFyOiAiLCAgdmFyLnRhZywgdmFyLmlpZCwgIj0iLCB2YXIudmFsLCAnKCcsdmFyLnR5cGUsJyknCiAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjEgd2FsayB0ZXN0cy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdChuZXRzbm1wLlZhcmJpbmQoJ3N5c3RlbScpKQogCiAgICAgICAgIHByaW50ICJ2MSB2YXJsaXN0IHdhbGsgaW46ICIKQEAgLTY3LDcgKzY3LDcgQEAKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgIAogICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIHdhbGsgMi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKIAogICAgICAgICBwcmludCAidjEgdmFyYmluZCB3YWxrIGluOiAiCiAgICAgICAgIHZhciA9IG5ldHNubXAuVmFyYmluZCgnc3lzdGVtJykKQEAgLTc5LDcgKzc5LDcgQEAKIAogICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSBtdWx0aS12YXJiaW5kIHRlc3QtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHNlc3MgPSBuZXRzbm1wLlNlc3Npb24oVmVyc2lvbj0xLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RIb3N0PSdsb2NhbGhvc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbW11bml0eT0ncHVibGljJykKQEAgLTExMSwxNCArMTExLDE0IEBACiAgICAgICAgIGZvciB2YXIgaW4gdmFyczoKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MSBzZXQyLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QoCiAgICAgICAgICAgICBuZXRzbm1wLlZhcmJpbmQoJ3N5c0xvY2F0aW9uJywgJzAnLCAnbXkgbmV3ZXIgbG9jYXRpb24nKSkKICAgICAgICAgcmVzID0gc2Vzcy5zZXQodmFycykKICAgICAgICAgcHJpbnQgInYxIHNlc3Muc2V0IHJlc3VsdDogIiwgcmVzLCAiXG4iCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYxIHdhbGszLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogICAgICAgICB2YXJzID0gbmV0c25tcC5WYXJMaXN0KG5ldHNubXAuVmFyYmluZCgnc3lzdGVtJykpCiAgICAgICAgICAgICAgICAgCiAgICAgICAgIHZhbHMgPSBzZXNzLndhbGsodmFycykKQEAgLTEyNyw3ICsxMjcsNyBAQAogICAgICAgICBmb3IgdmFyIGluIHZhcnM6CiAgICAgICAgICAgICBwcmludCAiICAiLHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICAgICAgCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MmMgZ2V0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIHNlc3MgPSBuZXRzbm1wLlNlc3Npb24oVmVyc2lvbj0yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RIb3N0PSdsb2NhbGhvc3QnLApAQCAtMTQyLDcgKzE0Miw3IEBACiAgICAgICAgIHZhbHMgPSBzZXNzLmdldCh2YXJzKQogICAgICAgICBwcmludCAidjIgc2Vzcy5nZXQgcmVzdWx0OiAiLCB2YWxzLCAiXG4iCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYyYyBnZXRuZXh0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgogCiAgICAgICAgIGZvciB2YXIgaW4gdmFyczoKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwpAQCAtMTU1LDcgKzE1NSw3IEBACiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgcHJpbnQgIlxuIgogICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjJjIGdldGJ1bGstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdChuZXRzbm1wLlZhcmJpbmQoJ3N5c1VwVGltZScpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXAuVmFyYmluZCgnc3lzT1JMYXN0Q2hhbmdlJyksCkBAIC0xNzAsNyArMTcwLDcgQEAKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICBwcmludCAiXG4iCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYyYyBzZXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdCgKICAgICAgICAgICAgIG5ldHNubXAuVmFyYmluZCgnc3lzTG9jYXRpb24nLCcwJywnbXkgZXZlbiBuZXdlciBsb2NhdGlvbicpKQpAQCAtMTc4LDcgKzE3OCw3IEBACiAgICAgICAgIHJlcyA9IHNlc3Muc2V0KHZhcnMpCiAgICAgICAgIHByaW50ICJ2MiBzZXNzLnNldCByZXN1bHQ6ICIsIHJlcywgIlxuIgogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MmMgd2Fsay0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdChuZXRzbm1wLlZhcmJpbmQoJ3N5c3RlbScpKQogICAgICAgICAgICAgICAgIAogICAgICAgICB2YWxzID0gc2Vzcy53YWxrKHZhcnMpCkBAIC0xODcsNyArMTg3LDcgQEAKICAgICAgICAgZm9yIHZhciBpbiB2YXJzOgogICAgICAgICAgICAgcHJpbnQgIiAgIix2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgICAgIAotICAgICAgICBwcmludCAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIgorICAgICAgICBwcmludCAiLS0tdjMgc2V0dXAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHNlc3MgPSBuZXRzbm1wLlNlc3Npb24oVmVyc2lvbj0zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RIb3N0PSdsb2NhbGhvc3QnLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNlY0xldmVsPSdhdXRoUHJpdicsCkBAIC0yMDAsNyArMjAwLDcgQEAKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdChuZXRzbm1wLlZhcmJpbmQoJ3N5c1VwVGltZScsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXAuVmFyYmluZCgnc3lzQ29udGFjdCcsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXAuVmFyYmluZCgnc3lzTG9jYXRpb24nLCAwKSkKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYzIGdldC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKICAgICAgICAgdmFscyA9IHNlc3MuZ2V0KHZhcnMpCiAgICAgICAgIHByaW50ICJ2MyBzZXNzLmdldCByZXN1bHQ6ICIsIHZhbHMsICJcbiIKICAgICAgICAgCkBAIC0yMDgsNyArMjA4LDcgQEAKICAgICAgICAgICAgIHByaW50IHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwogICAgICAgICBwcmludCAiXG4iCiAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYzIGdldG5leHQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgCiAgICAgICAgIHZhbHMgPSBzZXNzLmdldG5leHQodmFycykKICAgICAgICAgcHJpbnQgInYzIHNlc3MuZ2V0bmV4dCByZXN1bHQ6ICIsIHZhbHMsICJcbiIKQEAgLTIzMCwxNCArMjMwLDE0IEBACiAgICAgICAgICAgICBwcmludCB2YXIudGFnLCB2YXIuaWlkLCAiPSIsIHZhci52YWwsICcoJyx2YXIudHlwZSwnKScKICAgICAgICAgcHJpbnQgIlxuIgogCi0gICAgICAgIHByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCisgICAgICAgIHByaW50ICItLS12MyBzZXQtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAKICAgICAgICAgdmFycyA9IG5ldHNubXAuVmFyTGlzdCgKICAgICAgICAgICAgIG5ldHNubXAuVmFyYmluZCgnc3lzTG9jYXRpb24nLCcwJywgJ215IGZpbmFsIGRlc3RpbmF0aW9uJykpCiAgICAgICAgIHJlcyA9IHNlc3Muc2V0KHZhcnMpCiAgICAgICAgIHByaW50ICJ2MyBzZXNzLnNldCByZXN1bHQ6ICIsIHJlcywgIlxuIgogICAgICAgICAKLSAgICAgICAgcHJpbnQgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiIKKyAgICAgICAgcHJpbnQgIi0tLXYzIHdhbGstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iCiAgICAgICAgIHZhcnMgPSBuZXRzbm1wLlZhckxpc3QobmV0c25tcC5WYXJiaW5kKCdzeXN0ZW0nKSkKICAgICAgICAgICAgICAgICAKICAgICAgICAgdmFscyA9IHNlc3Mud2Fsayh2YXJzKQpAQCAtMjQ1LDcgKzI0NSw3IEBACiAgICAgICAgIAogICAgICAgICBmb3IgdmFyIGluIHZhcnM6CiAgICAgICAgICAgICBwcmludCAiICAiLHZhci50YWcsIHZhci5paWQsICI9IiwgdmFyLnZhbCwgJygnLHZhci50eXBlLCcpJwotICAgICAgICAgICAgCisKIAogY2xhc3MgU2V0VGVzdHModW5pdHRlc3QuVGVzdENhc2UpOgogICAgIGRlZiB0ZXN0RnVuY3Moc2VsZik6ICAgICAgICAKZGlmZiAtLWdpdCBhL3NlZHNjcmlwdC5pbiBiL3NlZHNjcmlwdC5pbgppbmRleCBhZWRmN2I4Li43ODE0Y2U5IDEwMDY0NAotLS0gYS9zZWRzY3JpcHQuaW4KKysrIGIvc2Vkc2NyaXB0LmluCkBAIC0xMDYsNCArMTA2LDQgQEAKIAogcyNQUkVNT1ZFTUVTQ01EI1BTQ01EI2cKIHMjQVJFTU9WRU1FR0VOVFhfU09DS0VUI0FHRU5UWF9TT0NLRVQjZwotcy9WRVJTSU9OSU5GTy81LjQuMy5wcmUxL2cKK3MjTlJFTU9WRU1FRVRTTk1QX1RFTVBfRklMRV9QQVRURVJOI05FVFNOTVBfVEVNUF9GSUxFX1BBVFRFUk4jZwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9NYWtlZmlsZS5kZXBlbmQgYi9zbm1wbGliL01ha2VmaWxlLmRlcGVuZAppbmRleCBjYWM2NTEwLi42MmI1MTExIDEwMDY0NAotLS0gYS9zbm1wbGliL01ha2VmaWxlLmRlcGVuZAorKysgYi9zbm1wbGliL01ha2VmaWxlLmRlcGVuZApAQCAtNSwxNSArNSwzNCBAQAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKQEAgLTIyLDkgKzQxLDcgQEAKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMzMsMzIgKzUwLDUyIEBACiAuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9hc24xLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vYXNuMS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2FzbjEubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jYWxsYmFjay5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTY4LDYzICsxMDUsMTE5IEBACiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY2FsbGJhY2subG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2NhbGxiYWNrLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9jZXJ0X3V0aWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vY2VydF91dGlsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oCisuL2NlcnRfdXRpbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vY2hlY2tfdmFyYmluZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0xMzMsMTM0ICsyMjYsMTAxIEBACiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9jaGVja192YXJiaW5kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCiAuL2NoZWNrX3ZhcmJpbmQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKLS4vY211X2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9jbXVfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NtdV9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jbXVfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vY211X2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2Nsb3NlZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vY2xvc2VkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jbG9zZWRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9jb250YWluZXJfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC0yNjksNjQgKzMyOSwxMzQgQEAKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vY29udGFpbmVyX2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9jb250YWluZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vY29udGFpbmVyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL2NvbnRhaW5lci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9udWxsLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTMzNSw2NCArNDY1LDY2IEBACiAuL2NvbnRhaW5lcl9pdGVyYXRvci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9jb250YWluZXJfaXRlcmF0b3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vY29udGFpbmVyX2l0ZXJhdG9yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2NvbnRhaW5lcl9saXN0X3NzbGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00MDEsNjQgKzUzMyw2NiBAQAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY29udGFpbmVyX2xpc3Rfc3NsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9jb250YWluZXJfbGlzdF9zc2xsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC00NjcsNjMgKzYwMSw2NiBAQAogLi9jb250YWluZXJfbnVsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCiAuL2NvbnRhaW5lcl9udWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vY29udGFpbmVyX251bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbnVsbC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTUzMiwyMyArNjY5LDQyIEBACiAuL2RhdGFfbGlzdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9kYXRhX2xpc3QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZGF0YV9saXN0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTU2MSw5ICs3MTcsNyBAQAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9kZWZhdWx0X3N0b3JlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC01NzMsNjMgKzcyNywxMzMgQEAKIC4vZGVmYXVsdF9zdG9yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL2RlZmF1bHRfc3RvcmUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9kaXJfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vZGlyX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCisuL2Rpcl91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2Rpcl91dGlscy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC02MzgsNjQgKzg2Miw2OCBAQAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAogLi9mZF9ldmVudF9tYW5hZ2VyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL2ZkX2V2ZW50X21hbmFnZXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZF9ldmVudF9tYW5hZ2VyLmgKKy4vZmRfZXZlbnRfbWFuYWdlci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKLS4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCkBAIC03MDQsNzMgKzkzMiwxODkgQEAKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2ZpbGVfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vZmlsZV91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi9maWxlX3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCisuL2dldG9wdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9nZXRvcHQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9nZXR0aW1lb2ZkYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vZ2V0dGltZW9mZGF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2dldHRpbWVvZmRheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vaW5ldF9udG9wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL2luZXRfbnRvcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9pbmV0X250b3AubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmggaW5ldF9udG9wLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pbmV0X3B0b24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vaW5ldF9wdG9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2luZXRfcHRvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaCBpbmV0X3B0b24uaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9pbnQ2NC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL2ludDY0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vaW50NjQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtNzgzLDMxICsxMTI3LDExNiBAQAogLi9rZXl0b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4va2V5dG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCiAuL2tleXRvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL2xhcmdlX2ZkX3NldC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9sYXJnZV9mZF9zZXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vbGFyZ2VfZmRfc2V0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0LmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtODE4LDU5ICsxMjQ3LDEwNyBAQAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vbGNkX3RpbWUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAogLi9sY2RfdGltZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCiAuL2xjZF90aW1lLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAogLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaCAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vbWQ1LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9tZDUubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC04ODIsOSArMTM1OSw3IEBACiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTg5Myw2OSArMTM2OCw2NiBAQAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9taWIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL21pYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vbWliLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9tdF9zdXBwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL210X3N1cHBvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vbXRfc3VwcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL210X3N1cHBvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9tdF9zdXBwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL210X3N1cHBvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmggLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaApAQCAtOTY0LDIzICsxNDM2LDc0IEBACiAuL29pZF9zdGFzaC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAogLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9vaWRfc3Rhc2gubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vb2lkX3N0YXNoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vb3BlbmRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9vcGVuZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL29wZW5kaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtOTkzLDkgKzE1MTYsNyBAQAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xMDA0LDI5ICsxNTI1LDQyIEBACiAuL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9wYXJzZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3BhcnNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vcGFyc2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3BrY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vcGtjcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9wa2NzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vcGtjcy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3BrY3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTAzOSw5ICsxNTczLDcgQEAKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKIC4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTA1MSwzMyArMTU4Myw3OSBAQAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3JlYWRfY29uZmlnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vcmVhZF9jb25maWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9yZWFkX2NvbmZpZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9yZWFkZGlyLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3JlYWRkaXIubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vcmVhZGRpci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xMDg4LDI4OCArMTY2Niw0NCBAQAogLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc2NhcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAotLi9zY2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCiAuL3NjYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCi0uL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmgKLS4vc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBUQ1BJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAotLi9zbm1wVENQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCi0uL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC0xMzgyLDkgKzE3MTYsNyBAQAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcF9hbGFybS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FsYXJtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xMzk1LDIxICsxNzI3LDM5IEBACiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCiAuL3NubXBfYWxhcm0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTE0MjIsOSArMTc3Miw3IEBACiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTE0MzQsNDIgKzE3ODIsNTQgQEAKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oCiAuL3NubXBfYXBpLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAogLi9zbm1wX2FwaS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKLS4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi9zbm1wX2FwaS5sbzogLi4vYWdlbnQvbWliZ3JvdXAvYWdlbnR4L3Byb3RvY29sLmgKIC4vc25tcF9hcGkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTE0NzksNDUgKzE4MzksMTEzIEBACiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCiAuL3NubXBfYXV0aC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc25tcF9hdXRoLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tZDUuaAogLi9zbm1wX2F1dGgubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXAubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2RzX2FnZW50LmgKKy4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKIC4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcF9jbGllbnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX2NsaWVudC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXBfY2xpZW50LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCkBAIC0xNTMwLDkgKzE5NTgsNyBAQAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vc25tcF9kZWJ1Zy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCkBAIC0xNTQyLDE2ICsxOTY4LDM3IEBACiAuL3NubXBfZGVidWcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX2RlYnVnLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfZW51bS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCkBAIC0xNTYyLDI2MiArMjAwOSwzNyBAQAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAogLi9zbm1wX2VudW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKIC4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAotLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKLS4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaCBzbm1wc21faW5pdC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKLS4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCi0uL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wX3ZlcnNpb24ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCi0uL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9lbnVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaApAQCAtMTgzMiw5ICsyMDU0LDcgQEAKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXBrc20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wa3NtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTg0OSwyNCArMjA2OSw1MTkgQEAKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcGtzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBrc20uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfbG9nZ2luZy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9sb2dnaW5nLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX2xvZ2dpbmcubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZ2V0b3B0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAorLi9zbm1wX29wZW5zc2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcF9vcGVuc3NsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXBfb3BlbnNzbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vc25tcF9wYXJzZV9hcmdzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3NubXBfcGFyc2VfYXJncy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi9zbm1wX3BhcnNlX2FyZ3MubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi9zbm1wX3NlY21vZC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXBfc2VjbW9kLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcF9zZWNtb2QubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmggc25tcHNtX2luaXQuaAorLi9zbm1wX3NlY21vZC5sbzogc25tcHNtX3NodXRkb3duLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfYmluYXJ5X2FycmF5LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc25tcHYzX2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXBfc2VydmljZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wX3NlcnZpY2UubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKKy4vc25tcF9zZXJ2aWNlLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXAtdGMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcC10Yy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wLXRjLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQQmFzZURvbWFpbi5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcF90cmFuc3BvcnQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zbm1wX3RyYW5zcG9ydC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3NubXBfdHJhbnNwb3J0LmxvOiB0cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaCAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfaXRlcmF0b3IuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmggLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zbm1wdjNfYXBpLmgKKy4vc25tcHRzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9sY2RfdGltZS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi9zbm1wdHNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHRzbS5oCisuL3NubXB0c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdXNtLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmggLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaApAQCAtMTg3OSw5ICsyNTk0LDcgQEAKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB1c20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vc25tcHVzbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaApAQCAtMTg5NiwyNCArMjYwOSwzOSBAQAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAotLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAogLi9zbm1wdXNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKQEAgLTE5MjYsOSArMjY1NCw3IEBACiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTE5NDMsODUgKzI2NjksMTkwIEBACiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaAogLi9zbm1wdjMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oCi0uL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKIC4vc25tcHYzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oCiAuL3NubXB2My5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKKy4vc25tcF92ZXJzaW9uLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3NubXBfdmVyc2lvbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92ZXJzaW9uLmgKIC4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc25wcmludGYubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zbnByaW50Zi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3NucHJpbnRmLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi9zdHJsY2F0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3N0cmxjYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vc3RybGNhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vc3lzdi5oCi0uL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaCAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc3RybGNweS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi9zdHJsY3B5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3N0cmxjcHkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKIC4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vc3RydG9rX3IubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi9zdHJ0b2tfci5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3N0cnRva19yLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCiAuL3N0cnRvbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zdHJ0b2wubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3RydG9sLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3N0cnRvdWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RydG91bC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi9zdHJ0b3VsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3RydG91bC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cnRvdWwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCiAuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3N0cnRvdWxsLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vc3RydG91bGwubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi9zdHJ0b3VsbC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTIwMzIsMTI4ICsyODYzLDY5IEBACiAuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKIC4vc3lzdGVtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAogLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2dlbmVyaWMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCi0uL3Rlc3RfYmluYXJ5X2FycmF5LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKLS4vdGVzdF9iaW5hcnlfYXJyYXkubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAotLi90ZXN0X2JpbmFyeV9hcnJheS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3N5c3RlbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi9zeXN0ZW0ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmggaW5ldF9udG9wLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXJfbGlzdF9zc2xsLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCi0uL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAotLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKLS4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcHYzLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmgKQEAgLTIxNjIsMzQgKzI5MzQsNDkgQEAKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCisuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmgKIC4vdGV4dF91dGlscy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAogLi90ZXh0X3V0aWxzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oCiAuL3RleHRfdXRpbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90ZXh0X3V0aWxzLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL2xpbnV4LmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21hY2hpbmUvZ2VuZXJpYy5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmggLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCi0uL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3V0aWxpdGllcy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvaW50NjQuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L210X3N1cHBvcnQuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYWxhcm0uaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2hlY2tfdmFyYmluZC5oCiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKQEAgLTIxOTgsNTkgKzI5ODUsODQ5IEBACiAuL3Rvb2xzLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKIC4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAogLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKLS4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAotLi90b29scy5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NjYXBpLmgKKy4vdG9vbHMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vbGludXguaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9zeXN2LmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zeXN0ZW0vZ2VuZXJpYy5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWFjaGluZS9nZW5lcmljLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCi0uL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKLS4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3VjZF9jb21wYXQubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdWNkX2NvbXBhdC5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAotLi91Y2RfY29tcGF0LmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9saW51eC5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc3lzdGVtL3N5c3YuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3N5c3RlbS9nZW5lcmljLmgKLS4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9tYWNoaW5lL2dlbmVyaWMuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaCAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oIC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAotLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCi0uL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCiAuL3ZhY20ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAogLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKIC4vdmFjbS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi92YWNtLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Flc19jZmIubG86IG9wZW5zc2wvb3BlbnNzbF9tb2Rlcy5oCisuL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9hZXNfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5sbzogLi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYworLi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5sbzogLi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oCisuL29wZW5zc2wvb3BlbnNzbF9jZmIxMjgubG86IC4vb3BlbnNzbC9vcGVuc3NsX21vZGVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubG86IC4vb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oCisuL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaAorLi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5sbzogLi9vcGVuc3NsL29wZW5zc2xfc3ByLmgKKy4vb3BlbnNzbC9vcGVuc3NsX2Rlc19lbmMubG86IC4vb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmMKKy4vb3BlbnNzbC9vcGVuc3NsX21kNS5sbzogLi9vcGVuc3NsL29wZW5zc2xfbWQ1X2xvY2FsLmgKKy4vb3BlbnNzbC9vcGVuc3NsX21kNS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vcGVuc3NsX21kNS5oCisuL29wZW5zc2wvb3BlbnNzbF9tZDUubG86IC4vb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmgKKy4vb3BlbnNzbC9vcGVuc3NsX25jYmNfZW5jLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX2Rlcy5oCisuL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmxvOiAuL29wZW5zc2wvb3BlbnNzbF9kZXNfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfc2V0X2tleS5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmgKKy4vb3BlbnNzbC9vcGVuc3NsX3NoYTEubG86IG9wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaAorLi9vcGVuc3NsL29wZW5zc2xfc2hhMS5sbzogb3BlbnNzbC9vcGVuc3NsX3NoYS5oCisuL29wZW5zc2wvb3BlbnNzbF9zaGExLmxvOiAuL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBQUw1UFZDRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQUFMNVBWQ0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBBbGlhc0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9nZXRvcHQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC91dGlsaXRpZXMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ludDY0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9tdF9zdXBwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FsYXJtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kYXRhX2xpc3QuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmVyc2lvbi5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3NubXB2M19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB2My5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2tleXRvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zY2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbGNkX3RpbWUuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmgKKy4vdHJhbnNwb3J0cy9zbm1wQWxpYXNEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wdjMtc2VjdXJpdHktaW5jbHVkZXMuaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB0c20uaAorLi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9lbnVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdXRpbGl0aWVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbXRfc3VwcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hbGFybS5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGF0YV9saXN0LmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jaGVja192YXJiaW5kLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2ZhY3RvcnkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9saXN0X3NzbGwuaAorLi90cmFuc3BvcnRzL3NubXBDYWxsYmFja0RvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9pdGVyYXRvci5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oCisuL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZlcnNpb24uaAorLi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcElQdjZCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wSVBYRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFNvY2tldEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBTU0hEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFNURERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBTVEREb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9taWJfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mYWN0b3J5LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9jb25maWdfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9wYXJzZV9hcmdzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaAorLi90cmFuc3BvcnRzL3NubXBUTFNCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9kZWZpbml0aW9ucy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9jbGllbnQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcENhbGxiYWNrRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvbWliLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZF9zdGFzaC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfaW1wbC5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2NvbmZpZ19hcGkuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3BhcnNlX2FyZ3MuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS92YWNtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZmFjdG9yeS5oCisuL3RyYW5zcG9ydHMvc25tcFRMU1RDUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdmFyYmluZF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvYXNuMS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAtdGMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3JlYWRfY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfZW51bS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3ZhY20uaAorLi90cmFuc3BvcnRzL3NubXBVRFBEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmxvOiBpbmV0X250b3AuaCBpbmV0X3B0b24uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3BkdV9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9vdXRwdXRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9zZXNzaW9uX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3VjZF9jb21wYXQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3BhcnNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBVRFBCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90b29scy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjRCYXNlRG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3R5cGVzLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS90eXBlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvZGVmaW5pdGlvbnMuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3ZhcmJpbmRfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9wZHVfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2FzbjEuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL291dHB1dF9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL3Nlc3Npb25fYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQdjZCYXNlRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9taWIuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL21pYl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvb2lkX3N0YXNoLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2ltcGwuaAorLi90cmFuc3BvcnRzL3NubXBVRFBJUHY2RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC5oCisuL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmgKKy4vdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9hc24xLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L29pZC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdHlwZXMuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2RlZmluaXRpb25zLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC92YXJiaW5kX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvcGR1X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvb3V0cHV0X2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvc2Vzc2lvbl9hcGkuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9zZXJ2aWNlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBDYWxsYmFja0RvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVENQRG9tYWluLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBJUHY0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NkJhc2VEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS91Y2RfY29tcGF0LmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L21pYi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbWliX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9wYXJzZS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9vaWRfc3Rhc2guaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcF9pbXBsLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXAuaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvc25tcC10Yy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvY29uZmlnX2FwaS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmgKKy4vdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5sbzogLi4vaW5jbHVkZS9uZXQtc25tcC9saWJyYXJ5L3NubXBfcGFyc2VfYXJncy5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdmFjbS5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oCisuL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4ubG86IC4uL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaAorLi90cmFuc3BvcnRzL3NubXBVbml4RG9tYWluLmxvOiAuLi9pbmNsdWRlL25ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaApkaWZmIC0tZ2l0IGEvc25tcGxpYi9NYWtlZmlsZS5pbiBiL3NubXBsaWIvTWFrZWZpbGUuaW4KaW5kZXggMzRlMzBlNi4uNTA2YjhkNCAxMDA2NDQKLS0tIGEvc25tcGxpYi9NYWtlZmlsZS5pbgorKysgYi9zbm1wbGliL01ha2VmaWxlLmluCkBAIC0xMyw2ICsxMyw3IEBACiAjCiAKIHRvcF9idWlsZGRpcj0uLgorbXlzdWJkaXI9c25tcGxpYgogCiAjIHVzZSBHTlUgdnBhdGgsIGlmIGF2YWlsYWJsZSwgdG8gb25seSBzZXQgYSBwYXRoIGZvciBzb3VyY2UgYW5kIGhlYWRlcnMKICMgVlBBVEggd2lsbCBwaWNrIHVwIG9iamVjdHMgdG9vLCB3aGljaCBpcyBiYWQgaWYgeW91IGFyZSBzaGFyaW5nIGEKQEAgLTQ3LDYgKzQ4LDcgQEAKIElOQ0xVREVTVUJESVJIRUFERVJTPVJFQURNRSBcCiAJYXNuMS5oIFwKIAljYWxsYmFjay5oIFwKKwljZXJ0X3V0aWwuaCBcCiAJY29udGFpbmVyLmggXAogCWNvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaCBcCiAJY29udGFpbmVyX2xpc3Rfc3NsbC5oIFwKQEAgLTU1LDYgKzU3LDcgQEAKIAlmYWN0b3J5LmggXAogCWRhdGFfbGlzdC5oIFwKIAlkZWZhdWx0X3N0b3JlLmggXAorCWRpcl91dGlscy5oIFwKIAlmZF9ldmVudF9tYW5hZ2VyLmggXAogCWZpbGVfdXRpbHMuaCBcCiAJaW50NjQuaCBcCkBAIC02Nyw2ICs3MCw3IEBACiAJc25tcC5oIFwKIAlzbm1wX2FsYXJtLmggXAogCXNubXBfYXBpLmggXAorCWxhcmdlX2ZkX3NldC5oIFwKIAlzbm1wX2Fzc2VydC5oIFwKIAlzbm1wX2NsaWVudC5oIFwKIAlzbm1wX2RlYnVnLmggXApAQCAtODAsMTAgKzg0LDExIEBACiAJdGV4dF91dGlscy5oIFwKIAl0b29scy5oIFwKIAl0cmFuc2Zvcm1fb2lkcy5oIFwKLSAgICAgICAgY211X2NvbXBhdC5oIFwKKwl0eXBlcy5oIFwKICAgICAgICAgZ2V0b3B0LmggXAogICAgICAgICBsY2RfdGltZS5oIFwKICAgICAgICAgbXRfc3VwcG9ydC5oIFwKKyAgICAgICAgb2lkLmggXAogICAgICAgICBvaWRfc3Rhc2guaCBcCiAgICAgICAgIHNubXBfZW51bS5oIFwKICAgICAgICAgc25tcF9zZWNtb2QuaCBcCkBAIC0xMTEsNiArMTE2LDcgQEAKIAlzY2FwaS5oCQlcCiAJc25tcF9hbGFybS5oCVwKIAlzbm1wX2FwaS5oCVwKKwlsYXJnZV9mZF9zZXQuaAlcCiAJc25tcF9jbGllbnQuaAlcCiAJc25tcF9kZWJ1Zy5oCVwKIAlzbm1wLmgJCVwKQEAgLTEzMiw1NSArMTM4LDkxIEBACiAKICMKICMgVGhpbmdzIHRvIGJ1aWxkCisjICAgLSBmb3IgdGhlIGZlYXR1cmUgY2hlY2tpbmcgLyByZW1vdmFsIC8gbWluaW1pYWxpc3Qgc3VwcG9ydCB0aGVzZQorIyAgICAgbXVzdCBiZSBsaXN0ZWQgc3VjaCB0aGF0IGNvZGUgcmVxdWlyaW5nIGEgZmVhdHVyZSBtdXN0IGJlIGxpc3RlZAorIyAgICAgKmJlZm9yZSogdGhlIGNvZGUgaW1wbGVtZW50aW5nIHRoZSBmZWF0dXJlLgogIwogQ1NSQ1M9CXNubXBfY2xpZW50LmMgbWliLmMgcGFyc2UuYyBzbm1wX2FwaS5jIHNubXAuYyAJCVwKIAlzbm1wX2F1dGguYyBhc24xLmMgbWQ1LmMgc25tcF9wYXJzZV9hcmdzLmMJCVwKIAlzeXN0ZW0uYyB2YWNtLmMgaW50NjQuYyByZWFkX2NvbmZpZy5jIHBrY3MuYwkJXAogCXNubXBfZGVidWcuYyB0b29scy5jICBzbm1wX2xvZ2dpbmcuYyB0ZXh0X3V0aWxzLmMJXAotCXNubXB2My5jIGxjZF90aW1lLmMga2V5dG9vbHMuYyBmaWxlX3V0aWxzLmMJCVwKKwlsYXJnZV9mZF9zZXQuYyBjZXJ0X3V0aWwuYyBzbm1wX29wZW5zc2wuYyAJCVwKKwlzbm1wdjMuYyBsY2RfdGltZS5jIGtleXRvb2xzLmMgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIAlzY2FwaS5jIGNhbGxiYWNrLmMgZGVmYXVsdF9zdG9yZS5jIHNubXBfYWxhcm0uYwkJXAogCWRhdGFfbGlzdC5jIG9pZF9zdGFzaC5jIGZkX2V2ZW50X21hbmFnZXIuYyAJCVwKKwljaGVja192YXJiaW5kLmMgCQkJCQlcCiAJbXRfc3VwcG9ydC5jIHNubXBfZW51bS5jIHNubXAtdGMuYyBzbm1wX3NlcnZpY2UuYwlcCi0Jc25wcmludGYuYyBzdHJsY2F0LmMgc3RybGNweS5jIHN0cnRvbC5jIHN0cnRvdWwuYwlcCi0Jc3RydG9rX3IuYyBzbm1wX3RyYW5zcG9ydC5jIEB0cmFuc3BvcnRfc3JjX2xpc3RACVwKKwlzbnByaW50Zi5jCQkJCQkJXAorCXNubXBfdHJhbnNwb3J0LmMgQHRyYW5zcG9ydF9zcmNfbGlzdEAJCQlcCiAJc25tcF9zZWNtb2QuYyBAc2VjdXJpdHlfc3JjX2xpc3RAIHNubXBfdmVyc2lvbi5jICAgICAgICBcCi0JY2hlY2tfdmFyYmluZC5jIGNvbnRhaW5lci5jIGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkuYwlcCiAJY29udGFpbmVyX251bGwuYyBjb250YWluZXJfbGlzdF9zc2xsLmMgY29udGFpbmVyX2l0ZXJhdG9yLmMgXAotCWNtdV9jb21wYXQuYyB1Y2RfY29tcGF0LmMgQG90aGVyX3NyY19saXN0QAorCXVjZF9jb21wYXQuYwkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJQG90aGVyX3NyY19saXN0QCBAY3J5cHRvX2ZpbGVzX2NAICAgICAgICAJCVwKKwlkaXJfdXRpbHMuYyBmaWxlX3V0aWxzLmMgCSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwljb250YWluZXIuYyBjb250YWluZXJfYmluYXJ5X2FycmF5LmMJCiAKIE9CSlM9CXNubXBfY2xpZW50Lm8gbWliLm8gcGFyc2UubyBzbm1wX2FwaS5vIHNubXAubyAJCVwKIAlzbm1wX2F1dGgubyBhc24xLm8gbWQ1Lm8gc25tcF9wYXJzZV9hcmdzLm8JCVwKIAlzeXN0ZW0ubyB2YWNtLm8gaW50NjQubyByZWFkX2NvbmZpZy5vIHBrY3MubyAJCVwKIAlzbm1wX2RlYnVnLm8gdG9vbHMubyAgc25tcF9sb2dnaW5nLm8gdGV4dF91dGlscy5vCVwKLQlzbm1wdjMubyBsY2RfdGltZS5vIGtleXRvb2xzLm8gZmlsZV91dGlscy5vCQlcCisJbGFyZ2VfZmRfc2V0Lm8gY2VydF91dGlsLm8gc25tcF9vcGVuc3NsLm8gCQlcCisJc25tcHYzLm8gbGNkX3RpbWUubyBrZXl0b29scy5vICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJc2NhcGkubyBjYWxsYmFjay5vIGRlZmF1bHRfc3RvcmUubyBzbm1wX2FsYXJtLm8JCVwKIAlkYXRhX2xpc3QubyBvaWRfc3Rhc2gubyBmZF9ldmVudF9tYW5hZ2VyLm8JCVwKKwljaGVja192YXJiaW5kLm8gCQkJCQlcCiAJbXRfc3VwcG9ydC5vIHNubXBfZW51bS5vIHNubXAtdGMubyBzbm1wX3NlcnZpY2UubwlcCi0Jc25wcmludGYubyBzdHJsY2F0Lm8gc3RybGNweS5vIHN0cnRvbC5vIHN0cnRvdWwubwlcCi0Jc3RydG9rX3IubyBzbm1wX3RyYW5zcG9ydC5vIEB0cmFuc3BvcnRfb2JqX2xpc3RACVwKKwlzbnByaW50Zi5vCQkJCQkJXAorCXNubXBfdHJhbnNwb3J0Lm8gQHRyYW5zcG9ydF9vYmpfbGlzdEAgICAgICAgICAgICAgICAgICAgXAogCXNubXBfc2VjbW9kLm8gQHNlY3VyaXR5X29ial9saXN0QCBzbm1wX3ZlcnNpb24ubyAgICAgICAgXAotCWNoZWNrX3ZhcmJpbmQubyBjb250YWluZXIubyBjb250YWluZXJfYmluYXJ5X2FycmF5Lm8JXAogCWNvbnRhaW5lcl9udWxsLm8gY29udGFpbmVyX2xpc3Rfc3NsbC5vIGNvbnRhaW5lcl9pdGVyYXRvci5vIFwKLQljbXVfY29tcGF0Lm8gdWNkX2NvbXBhdC5vIEBvdGhlcl9vYmpzX2xpc3RACisJdWNkX2NvbXBhdC5vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAkJXAorICAgICAgICBAY3J5cHRvX2ZpbGVzX29AIEBvdGhlcl9vYmpzX2xpc3RAIEBMSUJPQkpTQCAJCVwKKwlkaXJfdXRpbHMubyBmaWxlX3V0aWxzLm8gCSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwljb250YWluZXIubyBjb250YWluZXJfYmluYXJ5X2FycmF5Lm8JCiAKIExPQkpTPQlzbm1wX2NsaWVudC5sbyBtaWIubG8gcGFyc2UubG8gc25tcF9hcGkubG8gc25tcC5sbyAJXAogCXNubXBfYXV0aC5sbyBhc24xLmxvIG1kNS5sbyBzbm1wX3BhcnNlX2FyZ3MubG8JCVwKIAlzeXN0ZW0ubG8gdmFjbS5sbyBpbnQ2NC5sbyByZWFkX2NvbmZpZy5sbyBwa2NzLmxvCVwKIAlzbm1wX2RlYnVnLmxvIHRvb2xzLmxvICBzbm1wX2xvZ2dpbmcubG8JIHRleHRfdXRpbHMubG8JXAotCXNubXB2My5sbyBsY2RfdGltZS5sbyBrZXl0b29scy5sbyBmaWxlX3V0aWxzLmxvCQlcCi0Jc2NhcGkubG8gY2FsbGJhY2subG8gZGVmYXVsdF9zdG9yZS5sbyBzbm1wX2FsYXJtLmxvCQlcCisJbGFyZ2VfZmRfc2V0LmxvIGNlcnRfdXRpbC5sbyBzbm1wX29wZW5zc2wubG8gCQlcCisJc25tcHYzLmxvIGxjZF90aW1lLmxvIGtleXRvb2xzLmxvICAgICAgICAgICAgICAgICAgICAgICBcCisJc2NhcGkubG8gY2FsbGJhY2subG8gZGVmYXVsdF9zdG9yZS5sbyBzbm1wX2FsYXJtLmxvCVwKIAlkYXRhX2xpc3QubG8gb2lkX3N0YXNoLmxvIGZkX2V2ZW50X21hbmFnZXIubG8JCVwKKwljaGVja192YXJiaW5kLmxvIAkJCQkJXAogCW10X3N1cHBvcnQubG8gc25tcF9lbnVtLmxvIHNubXAtdGMubG8gc25tcF9zZXJ2aWNlLmxvCVwKLQlzbnByaW50Zi5sbyBzdHJsY2F0LmxvIHN0cmxjcHkubG8gc3RydG9sLmxvIHN0cnRvdWwubG8JXAotCXN0cnRva19yLmxvIHNubXBfdHJhbnNwb3J0LmxvIEB0cmFuc3BvcnRfbG9ial9saXN0QAlcCi0Jc25tcF9zZWNtb2QubG8gQHNlY3VyaXR5X2xvYmpfbGlzdEAgc25tcF92ZXJzaW9uLmxvICAgICAgIFwKLQljaGVja192YXJiaW5kLmxvIGNvbnRhaW5lci5sbyBjb250YWluZXJfYmluYXJ5X2FycmF5LmxvCVwKLQljb250YWluZXJfbnVsbC5sbyBjb250YWluZXJfbGlzdF9zc2xsLmxvIGNvbnRhaW5lcl9pdGVyYXRvci5sbyBcCi0JY211X2NvbXBhdC5sbyB1Y2RfY29tcGF0LmxvIEBvdGhlcl9sb2Jqc19saXN0QAorCXNucHJpbnRmLmxvCQkJCQkJXAorCXNubXBfdHJhbnNwb3J0LmxvIEB0cmFuc3BvcnRfbG9ial9saXN0QCAgICAgICAgICAgICAgICAgXAorCXNubXBfc2VjbW9kLmxvIEBzZWN1cml0eV9sb2JqX2xpc3RAIHNubXBfdmVyc2lvbi5sbyAgICAgXAorCWNvbnRhaW5lci5sbyBjb250YWluZXJfYmluYXJ5X2FycmF5LmxvCQkJXAorCXVjZF9jb21wYXQubG8JCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBAY3J5cHRvX2ZpbGVzX2xvQCBAb3RoZXJfbG9ianNfbGlzdEAgQExUTElCT0JKU0AgICAgICAgIFwKKwlkaXJfdXRpbHMubG8gZmlsZV91dGlscy5sbyAJICAgICAgICAgICAgICAgICAgICAgICAgXAorCWNvbnRhaW5lcl9udWxsLmxvIGNvbnRhaW5lcl9saXN0X3NzbGwubG8gY29udGFpbmVyX2l0ZXJhdG9yLmxvIAorCitGVE9CSlM9CXNubXBfY2xpZW50LmZ0IG1pYi5mdCBwYXJzZS5mdCBzbm1wX2FwaS5mdCBzbm1wLmZ0IAlcCisJc25tcF9hdXRoLmZ0IGFzbjEuZnQgbWQ1LmZ0IHNubXBfcGFyc2VfYXJncy5mdAkJXAorCXN5c3RlbS5mdCB2YWNtLmZ0IGludDY0LmZ0IHJlYWRfY29uZmlnLmZ0IHBrY3MuZnQJXAorCXNubXBfZGVidWcuZnQgdG9vbHMuZnQgIHNubXBfbG9nZ2luZy5mdAkgdGV4dF91dGlscy5mdAlcCisJc25tcHYzLmZ0IGxjZF90aW1lLmZ0IGtleXRvb2xzLmZ0ICAgICAgICAgICAgICAgICAgICAgICBcCisJc2NhcGkuZnQgY2FsbGJhY2suZnQgZGVmYXVsdF9zdG9yZS5mdCBzbm1wX2FsYXJtLmZ0CVwKKwlkYXRhX2xpc3QuZnQgb2lkX3N0YXNoLmZ0IGZkX2V2ZW50X21hbmFnZXIuZnQJCVwKKwljaGVja192YXJiaW5kLmZ0IAkJCQkJXAorCW10X3N1cHBvcnQuZnQgc25tcF9lbnVtLmZ0IHNubXAtdGMuZnQgc25tcF9zZXJ2aWNlLmZ0CVwKKwlzbnByaW50Zi5mdAkJCQkJCVwKKwlzbm1wX3RyYW5zcG9ydC5mdCBAdHJhbnNwb3J0X2Z0b2JqX2xpc3RAICAgICAgICAgICAgICAgIFwKKwlzbm1wX3NlY21vZC5mdCBAc2VjdXJpdHlfZnRvYmpfbGlzdEAgc25tcF92ZXJzaW9uLmZ0ICAgIFwKKwljb250YWluZXIuZnQgY29udGFpbmVyX2JpbmFyeV9hcnJheS5mdAlcCisJdWNkX2NvbXBhdC5mdAkJICAgICAgICAgICAgICAgICAgICAgICAgICAgICAJXAorICAgICAgICBAb3RoZXJfZnRvYmpzX2xpc3RAICAgICAgICAgICAgICAgICAgICAgCQlcCisJbGFyZ2VfZmRfc2V0LmZ0IGNlcnRfdXRpbC5mdCBzbm1wX29wZW5zc2wuZnQgCQlcCisJZGlyX3V0aWxzLmZ0IGZpbGVfdXRpbHMuZnQgCSAgICAgICAgICAgICAgICAgICAgICAgIFwKKwljb250YWluZXJfbnVsbC5mdCBjb250YWluZXJfbGlzdF9zc2xsLmZ0IGNvbnRhaW5lcl9pdGVyYXRvci5mdAogCiAjIGp1c3QgaW4gY2FzZSBzb21lb25lIHdhbnRzIHRvIHJlbW92ZSBsaWJ0b29sLCBjaGFuZ2UgdGhpcyB0byBPQkpTLgogVE9CSlM9JChMT0JKUykKIAorRkVBVFVSRUZJTEUgICAgID0gJCh0b3BfYnVpbGRkaXIpL2luY2x1ZGUvbmV0LXNubXAvbGlicmFyeS9mZWF0dXJlcy5oCisKICMgCiBDUFBGTEFHUyA9ICQoVE9QX0lOQ0xVREVTKSAtSS4gCSQoU05NUExJQl9JTkNMVURFUykgQENQUEZMQUdTQAogCkBAIC0xODgsMTEgKzIzMCwxMSBAQAogCiAjIGhvdyB0byBidWlsZCB0aGUgbGlicmFyaWVzLgogbGlibmV0c25tcC4kKExJQl9FWFRFTlNJT04pJChMSUJfVkVSU0lPTik6ICAgICQoVE9CSlMpCi0JJChMSUJfTERfQ01EKSAkQCAkKFRPQkpTKSAkKExERkxBR1MpIEBMTkVUU05NUExJQlNACisJJChMSUJfTERfQ01EKSAkQCAkKFRPQkpTKSBATERfTk9fVU5ERUZJTkVEQCAkKExERkxBR1MpIEBMTkVUU05NUExJQlNACiAJJChSQU5MSUIpICRACiAKIGxpYnNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pOiAgICAkKFRPQkpTKQotCSQoTElCX0xEX0NNRCkgJEAgJChUT0JKUykgJChMREZMQUdTKSBATE5FVFNOTVBMSUJTQAorCSQoTElCX0xEX0NNRCkgJEAgJChUT0JKUykgQExEX05PX1VOREVGSU5FREAgJChMREZMQUdTKSBATE5FVFNOTVBMSUJTQAogCSQoUkFOTElCKSAkQAogCiAjCkBAIC0yMDEsNyArMjQzLDMgQEAKIHBhcnNlOiAgbWliLm8gcGFyc2UuYwogCSQoQ0MpICQoQ0ZMQUdTKSAtRFRFU1QgcGFyc2UuYyAtbyAkQCBcCiAJCWAkKHRvcF9zcmNkaXIpL25ldC1zbm1wLWNvbmZpZyAtLWxpYnNgCi0KLXRlc3RfYmluYXJ5X2FycmF5OiB0ZXN0X2JpbmFyeV9hcnJheS5jCi0JJChDQykgJChDRkxBR1MpIHRlc3RfYmluYXJ5X2FycmF5LmMgLW8gJEAgXAotCQlgJCh0b3Bfc3JjZGlyKS9uZXQtc25tcC1jb25maWcgLS1saWJzYApkaWZmIC0tZ2l0IGEvc25tcGxpYi9hc24xLmMgYi9zbm1wbGliL2FzbjEuYwppbmRleCAyMzQ2ZTZjLi5iZWE4ZDBiIDEwMDY0NAotLS0gYS9zbm1wbGliL2FzbjEuYworKysgYi9zbm1wbGliL2FzbjEuYwpAQCAtMTcwLDkgKzE3MCw2IEBACiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtMjUxLDYgKzI0OCwyNCBAQAogfQogCiAvKioKKyAqIEBpbnRlcm5hbAorICogb3V0cHV0IGFuIGVycm9yIGZvciBhIHdyb25nIHR5cGUKKyAqIAorICogQHBhcmFtIHN0ciAgICAgICAgZXJyb3Igc3RyaW5nCisgKiBAcGFyYW0gd3Jvbmd0eXBlICB3cm9uZyB0eXBlCisgKi8KK3N0YXRpYworICAgIHZvaWQKK19hc25fdHlwZV9lcnIoY29uc3QgY2hhciAqc3RyLCBpbnQgd3Jvbmd0eXBlKQoreworICAgIGNoYXIgICAgICAgICAgICBlYnVmWzEyOF07CisKKyAgICBzbnByaW50ZihlYnVmLCBzaXplb2YoZWJ1ZiksICIlcyB0eXBlICVkIiwgc3RyLCB3cm9uZ3R5cGUpOworICAgIGVidWZbIHNpemVvZihlYnVmKS0xIF0gPSAwOworICAgIEVSUk9SX01TRyhlYnVmKTsKK30KKworLyoqCiAgKiBAaW50ZXJuYWwgCiAgKiBvdXRwdXQgYW4gZXJyb3IgZm9yIGEgd3JvbmcgbGVuZ3RoCiAgKiAKQEAgLTQ4MiwxMiArNDk3LDE3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICAqdHlwZSA9ICpidWZwKys7CisgICAgaWYgKCp0eXBlICE9IEFTTl9JTlRFR0VSKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKwogICAgIGJ1ZnAgPSBhc25fcGFyc2VfbGVuZ3RoKGJ1ZnAsICZhc25fbGVuZ3RoKTsKICAgICBpZiAoX2Fzbl9wYXJzZV9sZW5ndGhfY2hlY2sKICAgICAgICAgKGVycnByZSwgYnVmcCwgZGF0YSwgYXNuX2xlbmd0aCwgKmRhdGFsZW5ndGgpKQogICAgICAgICByZXR1cm4gTlVMTDsKIAotICAgIGlmICgoc2l6ZV90KSBhc25fbGVuZ3RoID4gaW50c2l6ZSkgeworICAgIGlmICgoc2l6ZV90KSBhc25fbGVuZ3RoID4gaW50c2l6ZSB8fCAoaW50KSBhc25fbGVuZ3RoID09IDApIHsKICAgICAgICAgX2Fzbl9sZW5ndGhfZXJyKGVycnByZSwgKHNpemVfdCkgYXNuX2xlbmd0aCwgaW50c2l6ZSk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTUwMyw3ICs1MjMsNyBAQAogCiAgICAgQ0hFQ0tfT1ZFUkZMT1dfUyh2YWx1ZSwxKTsKIAotICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4ybFgpXG4iLCB2YWx1ZSwgdmFsdWUpKTsKIAogICAgICppbnRwID0gdmFsdWU7CiAgICAgcmV0dXJuIGJ1ZnA7CkBAIC01NDksMTMgKzU2OSwxOCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAgICAgKnR5cGUgPSAqYnVmcCsrOworICAgIGlmICgqdHlwZSAhPSBBU05fQ09VTlRFUiAmJiAqdHlwZSAhPSBBU05fR0FVR0UgJiYgKnR5cGUgIT0gQVNOX1RJTUVUSUNLUworICAgICAgICAgICAgJiYgKnR5cGUgIT0gQVNOX1VJTlRFR0VSKSB7CisgICAgICAgIF9hc25fdHlwZV9lcnIoZXJycHJlLCAqdHlwZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KICAgICBidWZwID0gYXNuX3BhcnNlX2xlbmd0aChidWZwLCAmYXNuX2xlbmd0aCk7CiAgICAgaWYgKF9hc25fcGFyc2VfbGVuZ3RoX2NoZWNrCiAgICAgICAgIChlcnJwcmUsIGJ1ZnAsIGRhdGEsIGFzbl9sZW5ndGgsICpkYXRhbGVuZ3RoKSkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKLSAgICBpZiAoKChpbnQpIGFzbl9sZW5ndGggPiAoaW50c2l6ZSArIDEpKSB8fAotICAgICAgICAoKChpbnQpIGFzbl9sZW5ndGggPT0gaW50c2l6ZSArIDEpICYmICpidWZwICE9IDB4MDApKSB7CisgICAgaWYgKChhc25fbGVuZ3RoID4gKGludHNpemUgKyAxKSkgfHwgKChpbnQpIGFzbl9sZW5ndGggPT0gMCkgfHwKKyAgICAgICAgKChhc25fbGVuZ3RoID09IGludHNpemUgKyAxKSAmJiAqYnVmcCAhPSAweDAwKSkgewogICAgICAgICBfYXNuX2xlbmd0aF9lcnIoZXJycHJlLCAoc2l6ZV90KSBhc25fbGVuZ3RoLCBpbnRzaXplKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQpAQCAtNTcwLDcgKzU5NSw3IEBACiAKICAgICBDSEVDS19PVkVSRkxPV19VKHZhbHVlLDIpOwogCi0gICAgREVCVUdNU0coKCJkdW1wdl9yZWN2IiwgIiAgVUludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsIHZhbHVlLCB2YWx1ZSkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfcmVjdiIsICIgIFVJbnRlZ2VyOlx0JWxkICgweCUuMmxYKVxuIiwgdmFsdWUsIHZhbHVlKSk7CiAKICAgICAqaW50cCA9IHZhbHVlOwogICAgIHJldHVybiBidWZwOwpAQCAtNjQ5LDcgKzY3NCw3IEBACiAgICAgICAgIGludGVnZXIgPDw9IDg7CiAgICAgfQogICAgIERFQlVHRFVNUFNFVFVQKCJzZW5kIiwgaW5pdGRhdGFwLCBkYXRhIC0gaW5pdGRhdGFwKTsKLSAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCAqaW50cCwgKmludHApKTsKKyAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMmxYKVxuIiwgKmludHAsICppbnRwKSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKQEAgLTc0NSw3ICs3NzAsNyBAQAogICAgICAgICBpbnRlZ2VyIDw8PSA4OwogICAgIH0KICAgICBERUJVR0RVTVBTRVRVUCgic2VuZCIsIGluaXRkYXRhcCwgZGF0YSAtIGluaXRkYXRhcCk7Ci0gICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgIiAgVUludGVnZXI6XHQlbGQgKDB4JS4yWClcbiIsICppbnRwLCAqaW50cCkpOworICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIFVJbnRlZ2VyOlx0JWxkICgweCUuMmxYKVxuIiwgKmludHAsICppbnRwKSk7CiAgICAgcmV0dXJuIGRhdGE7CiB9CiAKQEAgLTc4OCwxMyArODEzLDE5IEBACiAgICAgdV9sb25nICAgICAgICAgIGFzbl9sZW5ndGg7CiAKICAgICAqdHlwZSA9ICpidWZwKys7CisgICAgaWYgKCp0eXBlICE9IEFTTl9PQ1RFVF9TVFIgJiYgKnR5cGUgIT0gQVNOX0lQQUREUkVTUyAmJiAqdHlwZSAhPSBBU05fT1BBUVVFCisgICAgICAgICAgICAmJiAqdHlwZSAhPSBBU05fTlNBUCkgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBidWZwID0gYXNuX3BhcnNlX2xlbmd0aChidWZwLCAmYXNuX2xlbmd0aCk7CiAgICAgaWYgKF9hc25fcGFyc2VfbGVuZ3RoX2NoZWNrCiAgICAgICAgIChlcnJwcmUsIGJ1ZnAsIGRhdGEsIGFzbl9sZW5ndGgsICpkYXRhbGVuZ3RoKSkgewogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKLSAgICBpZiAoKGludCkgYXNuX2xlbmd0aCA+ICpzdHJsZW5ndGgpIHsKKyAgICBpZiAoYXNuX2xlbmd0aCA+ICpzdHJsZW5ndGgpIHsKICAgICAgICAgX2Fzbl9sZW5ndGhfZXJyKGVycnByZSwgKHNpemVfdCkgYXNuX2xlbmd0aCwgKnN0cmxlbmd0aCk7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KQEAgLTgwMiwxMCArODMzLDEwIEBACiAgICAgREVCVUdEVU1QU0VUVVAoInJlY3YiLCBkYXRhLCBidWZwIC0gZGF0YSArIGFzbl9sZW5ndGgpOwogCiAgICAgbWVtbW92ZShzdHIsIGJ1ZnAsIGFzbl9sZW5ndGgpOwotICAgIGlmICgqc3RybGVuZ3RoID4gKGludCkgYXNuX2xlbmd0aCkKKyAgICBpZiAoKnN0cmxlbmd0aCA+IGFzbl9sZW5ndGgpCiAgICAgICAgIHN0clthc25fbGVuZ3RoXSA9IDA7Ci0gICAgKnN0cmxlbmd0aCA9IChpbnQpIGFzbl9sZW5ndGg7Ci0gICAgKmRhdGFsZW5ndGggLT0gKGludCkgYXNuX2xlbmd0aCArIChidWZwIC0gZGF0YSk7CisgICAgKnN0cmxlbmd0aCA9IGFzbl9sZW5ndGg7CisgICAgKmRhdGFsZW5ndGggLT0gYXNuX2xlbmd0aCArIChidWZwIC0gZGF0YSk7CiAKICAgICBERUJVR0lGKCJkdW1wdl9yZWN2IikgewogICAgICAgICB1X2NoYXIgICAgICAgICAqYnVmID0gKHVfY2hhciAqKSBtYWxsb2MoMSArIGFzbl9sZW5ndGgpOwpAQCAtMTI4Niw2ICsxMzE3LDcgQEAKICAgICAgICAgICAgICAgICBzaXplX3QgKiBkYXRhbGVuZ3RoLAogICAgICAgICAgICAgICAgIHVfY2hhciAqIHR5cGUsIG9pZCAqIG9iamlkLCBzaXplX3QgKiBvYmppZGxlbmd0aCkKIHsKKyAgICBzdGF0aWMgY29uc3QgY2hhciAqZXJycHJlID0gInBhcnNlIG9iamlkIjsKICAgICAvKgogICAgICAqIEFTTi4xIG9iamlkIDo6PSAweDA2IGFzbmxlbmd0aCBzdWJpZGVudGlmaWVyIHtzdWJpZGVudGlmaWVyfSoKICAgICAgKiBzdWJpZGVudGlmaWVyIDo6PSB7bGVhZGluZ2J5dGV9KiBsYXN0Ynl0ZQpAQCAtMTMwMCw2ICsxMzMyLDEwIEBACiAgICAgc2l6ZV90ICAgICAgICAgIG9yaWdpbmFsX2xlbmd0aCA9ICpvYmppZGxlbmd0aDsKIAogICAgICp0eXBlID0gKmJ1ZnArKzsKKyAgICBpZiAoKnR5cGUgIT0gQVNOX09CSkVDVF9JRCkgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CiAgICAgYnVmcCA9IGFzbl9wYXJzZV9sZW5ndGgoYnVmcCwgJmFzbl9sZW5ndGgpOwogICAgIGlmIChfYXNuX3BhcnNlX2xlbmd0aF9jaGVjaygicGFyc2Ugb2JqaWQiLCBidWZwLCBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc25fbGVuZ3RoLCAqZGF0YWxlbmd0aCkpCkBAIC0xNjY5LDYgKzE3MDUsMTAgQEAKICAgICB1X2xvbmcgICAgICAgICAgYXNuX2xlbmd0aDsKIAogICAgICp0eXBlID0gKmJ1ZnArKzsKKyAgICBpZiAoKnR5cGUgIT0gQVNOX0JJVF9TVFIpIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGJ1ZnAgPSBhc25fcGFyc2VfbGVuZ3RoKGJ1ZnAsICZhc25fbGVuZ3RoKTsKICAgICBpZiAoX2Fzbl9wYXJzZV9sZW5ndGhfY2hlY2soZXJycHJlLCBidWZwLCBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhc25fbGVuZ3RoLCAqZGF0YWxlbmd0aCkpCkBAIC0xNzg5LDYgKzE4MjksMTQgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgICp0eXBlID0gKmJ1ZnArKzsKKyAgICBpZiAoKnR5cGUgIT0gQVNOX0NPVU5URVI2NAorI2lmZGVmIE5FVFNOTVBfV0lUSF9PUEFRVUVfU1BFQ0lBTF9UWVBFUworICAgICAgICAgICAgJiYgKnR5cGUgIT0gQVNOX09QQVFVRQorI2VuZGlmCisgICAgICAgICAgICApIHsKKyAgICAgICAgX2Fzbl90eXBlX2VycihlcnJwcmUsICp0eXBlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQogICAgIGJ1ZnAgPSBhc25fcGFyc2VfbGVuZ3RoKGJ1ZnAsICZhc25fbGVuZ3RoKTsKICAgICBpZiAoX2Fzbl9wYXJzZV9sZW5ndGhfY2hlY2sKICAgICAgICAgKGVycnByZSwgYnVmcCwgZGF0YSwgYXNuX2xlbmd0aCwgKmRhdGFsZW5ndGgpKQpAQCAtMTk4OCw3ICsyMDM2LDcgQEAKICAgICBERUJVR0lGKCJkdW1wdl9zZW5kIikgewogICAgICAgICBjaGFyICAgICAgICAgICAgaTY0YnVmW0k2NENIQVJTWiArIDFdOwogICAgICAgICBwcmludFU2NChpNjRidWYsIGNwKTsKLSAgICAgICAgREVCVUdNU0coKCJkdW1wdl9zZW5kIiwgaTY0YnVmKSk7CisgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIlcyIsIGk2NGJ1ZikpOwogICAgIH0KICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTIyMjQsNiArMjI3Miw3IEBACiAgICAgICAgICAgICAgICAgc2l6ZV90ICogZGF0YWxlbmd0aCwKICAgICAgICAgICAgICAgICB1X2NoYXIgKiB0eXBlLCBmbG9hdCAqZmxvYXRwLCBzaXplX3QgZmxvYXRzaXplKQogeworICAgIHN0YXRpYyBjb25zdCBjaGFyICplcnJwcmUgPSAicGFyc2UgZmxvYXQiOwogICAgIHJlZ2lzdGVyIHVfY2hhciAqYnVmcCA9IGRhdGE7CiAgICAgdV9sb25nICAgICAgICAgIGFzbl9sZW5ndGg7CiAgICAgdW5pb24gewpAQCAtMjI2NCw2ICsyMzEzLDExIEBACiAgICAgICAgICp0eXBlID0gQVNOX09QQVFVRV9GTE9BVDsKICAgICB9CiAKKyAgICBpZiAoKnR5cGUgIT0gQVNOX09QQVFVRV9GTE9BVCkgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoYXNuX2xlbmd0aCAhPSBzaXplb2YoZmxvYXQpKSB7CiAgICAgICAgIF9hc25fc2l6ZV9lcnIoInBhcnNlIHNlcSBmbG9hdCIsIGFzbl9sZW5ndGgsIHNpemVvZihmbG9hdCkpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTIzODksNiArMjQ0Myw3IEBACiAgICAgICAgICAgICAgICAgIHNpemVfdCAqIGRhdGFsZW5ndGgsCiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIHR5cGUsIGRvdWJsZSAqZG91YmxlcCwgc2l6ZV90IGRvdWJsZXNpemUpCiB7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKmVycnByZSA9ICJwYXJzZSBkb3VibGUiOwogICAgIHJlZ2lzdGVyIHVfY2hhciAqYnVmcCA9IGRhdGE7CiAgICAgdV9sb25nICAgICAgICAgIGFzbl9sZW5ndGg7CiAgICAgbG9uZyAgICAgICAgICAgIHRtcDsKQEAgLTI0MzEsNiArMjQ4NiwxMSBAQAogICAgICAgICAqdHlwZSA9IEFTTl9PUEFRVUVfRE9VQkxFOwogICAgIH0KIAorICAgIGlmICgqdHlwZSAhPSBBU05fT1BBUVVFX0RPVUJMRSkgeworICAgICAgICBfYXNuX3R5cGVfZXJyKGVycnByZSwgKnR5cGUpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKICAgICBpZiAoYXNuX2xlbmd0aCAhPSBzaXplb2YoZG91YmxlKSkgewogICAgICAgICBfYXNuX3NpemVfZXJyKCJwYXJzZSBzZXEgZG91YmxlIiwgYXNuX2xlbmd0aCwgc2l6ZW9mKGRvdWJsZSkpOwogICAgICAgICByZXR1cm4gTlVMTDsKQEAgLTI1NTcsMTUgKzI2MTcsMTYgQEAKICAgICBpZiAocGt0ICE9IE5VTEwgJiYgcGt0X2xlbiAhPSBOVUxMKSB7CiAgICAgICAgIHNpemVfdCAgICAgICAgICBvbGRfcGt0X2xlbiA9ICpwa3RfbGVuOwogCi0gICAgICAgIERFQlVHTVNHVEwoKCJhc25fcmVhbGxvYyIsICIgb2xkX3BrdCAlMDhwLCBvbGRfcGt0X2xlbiAlMDh4XG4iLAotICAgICAgICAgICAgICAgICAgICAqcGt0LCBvbGRfcGt0X2xlbikpOworICAgICAgICBERUJVR01TR1RMKCgiYXNuX3JlYWxsb2MiLCAiIG9sZF9wa3QgJThwLCBvbGRfcGt0X2xlbiAlbHVcbiIsCisgICAgICAgICAgICAgICAgICAgICpwa3QsICh1bnNpZ25lZCBsb25nKW9sZF9wa3RfbGVuKSk7CiAKICAgICAgICAgaWYgKHNubXBfcmVhbGxvYyhwa3QsIHBrdF9sZW4pKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgiYXNuX3JlYWxsb2MiLCAiIG5ld19wa3QgJTA4cCwgbmV3X3BrdF9sZW4gJTA4eFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICpwa3QsICpwa3RfbGVuKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYXNuX3JlYWxsb2MiLCAiIG5ld19wa3QgJThwLCBuZXdfcGt0X2xlbiAlbHVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAqcGt0LCAodW5zaWduZWQgbG9uZykqcGt0X2xlbikpOwogICAgICAgICAgICAgREVCVUdNU0dUTCgoImFzbl9yZWFsbG9jIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICIgbWVtbW92ZSglMDhwICsgJTA4eCwgJTA4cCwgJTA4eClcbiIsICpwa3QsCi0gICAgICAgICAgICAgICAgICAgICAgICAoKnBrdF9sZW4gLSBvbGRfcGt0X2xlbiksICpwa3QsIG9sZF9wa3RfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAiIG1lbW1vdmUoJThwICsgJTA4eCwgJThwLCAlMDh4KVxuIiwKKwkJCSpwa3QsICh1bnNpZ25lZCkoKnBrdF9sZW4gLSBvbGRfcGt0X2xlbiksCisJCQkqcGt0LCAodW5zaWduZWQpb2xkX3BrdF9sZW4pKTsKICAgICAgICAgICAgIG1lbW1vdmUoKnBrdCArICgqcGt0X2xlbiAtIG9sZF9wa3RfbGVuKSwgKnBrdCwgb2xkX3BrdF9sZW4pOwogICAgICAgICAgICAgbWVtc2V0KCpwa3QsIChpbnQpICcgJywgKnBrdF9sZW4gLSBvbGRfcGt0X2xlbik7CiAgICAgICAgICAgICByZXR1cm4gMTsKQEAgLTI3NTYsNyArMjgxNyw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBERUJVR0RVTVBTRVRVUCgic2VuZCIsICgqcGt0ICsgKnBrdF9sZW4gLSAqb2Zmc2V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KSk7Ci0gICAgICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBJbnRlZ2VyOlx0JWxkICgweCUuMlgpXG4iLCAqaW50cCwKKyAgICAgICAgICAgIERFQlVHTVNHKCgiZHVtcHZfc2VuZCIsICIgIEludGVnZXI6XHQlbGQgKDB4JS4ybFgpXG4iLCAqaW50cCwKICAgICAgICAgICAgICAgICAgICAgICAqaW50cCkpOwogICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KQEAgLTI5MDksNyArMjk3MCw3IEBACiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBERUJVR0RVTVBTRVRVUCgic2VuZCIsICgqcGt0ICsgKnBrdF9sZW4gLSAqb2Zmc2V0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICgqb2Zmc2V0IC0gc3RhcnRfb2Zmc2V0KSk7Ci0gICAgICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBVSW50ZWdlcjpcdCVsdSAoMHglLjJYKVxuIiwgKmludHAsCisgICAgICAgICAgICBERUJVR01TRygoImR1bXB2X3NlbmQiLCAiICBVSW50ZWdlcjpcdCVsdSAoMHglLjJsWClcbiIsICppbnRwLAogICAgICAgICAgICAgICAgICAgICAgICppbnRwKSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jYWxsYmFjay5jIGIvc25tcGxpYi9jYWxsYmFjay5jCmluZGV4IGU0MzQwNDIuLmRmZTUzN2EgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvY2FsbGJhY2suYworKysgYi9zbm1wbGliL2NhbGxiYWNrLmMKQEAgLTE3LDE0ICsxNywxMiBAQAogICogIEB7CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNTUsNiArNTMsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2FsbGJhY2tzX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhbGxiYWNrX2NvdW50LCBjYWxsYmFja3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhbGxiYWNrX2xpc3QsIGNhbGxiYWNrc19hbGwpCisKIC8qCiAgKiB0aGUgaW5saW5lIGNhbGxiYWNrIG1ldGhvZHMgdXNlIG1ham9yL21pbm9yIHRvIGluZGV4IGludG8gYXJyYXlzLgogICogYWxsIHVzZXJzIGluIHRoaXMgZnVuY3Rpb24gZG8gcmFuZ2UgY2hlY2tpbmcgYmVmb3JlIGNhbGxpbmcgdGhlc2UKQEAgLTExNSw3ICsxMTgsNyBAQAogI2VuZGlmCiAKIE5FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKLV9jYWxsYmFja19sb2NrKGludCBtYWpvciwgaW50IG1pbm9yLCBjb25zdCBjaGFyKiB3YXJuLCBpbnQgYXNzZXJ0KQorX2NhbGxiYWNrX2xvY2soaW50IG1ham9yLCBpbnQgbWlub3IsIGNvbnN0IGNoYXIqIHdhcm4sIGludCBkb19hc3NlcnQpCiB7CiAgICAgaW50IGxvY2tfaG9sZGVkPTA7CiAgICAgc3RydWN0IHRpbWV2YWwgbG9ja190aW1lID0geyAwLCAxMDAwIH07CkBAIC0xMzksNyArMTQyLDcgQEAKICAgICAgICAgaWYgKE5VTEwgIT0gd2FybikKICAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAogICAgICAgICAgICAgICAgICAgICAgImxvY2sgaW4gX2NhbGxiYWNrX2xvY2sgc2xlZXBzIG1vcmUgdGhhbiAxMDAgbWlsbGlzZWNvbmRzIGluICVzXG4iLCB3YXJuKTsKLSAgICAgICAgaWYgKGFzc2VydCkKKyAgICAgICAgaWYgKGRvX2Fzc2VydCkKICAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGxvY2tfaG9sZGVkIDwgMTAwKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiAxOwpAQCAtMjE3LDcgKzIyMCw5IEBACiAgKiBAcGFyYW0gbmV3X2NhbGxiYWNrIGlzIHRoZSBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGlzIHJlZ2lzdGVyZWQuCiAgKgogICogQHBhcmFtIGFyZyB3aGVuIG5vdCBOVUxMIGlzIGEgdm9pZCBwb2ludGVyIHVzZWQgd2hlbmV2ZXIgbmV3X2NhbGxiYWNrIAotICoJZnVuY3Rpb24gaXMgZXhlcmNpc2VkLgorICoJZnVuY3Rpb24gaXMgZXhlcmNpc2VkLiBPd25lcnNoaXAgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHR3b2RpbWVuc2lvbmFsCisgKiAgICAgIHRoZWNhbGxiYWNrc1tdW10gYXJyYXkuIFRoZSBmdW5jdGlvbiBjbGVhcl9jYWxsYmFjaygpIHdpbGwgZGVhbGxvY2F0ZQorICogICAgICB0aGUgbWVtb3J5IHBvaW50ZWQgYXQgYnkgY2FsbGluZyBmcmVlKCkuCiAgKgogICogQHJldHVybiAKICAqCVJldHVybnMgU05NUEVSUl9HRU5FUlIgaWYgbWFqb3IgaXMgPj0gTUFYX0NBTExCQUNLX0lEUyBvciBtaW5vciBpcyA+PQpAQCAtMjM3LDYgKzI0MiwyMCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0NBTExCQUNLX0RFRkFVTFRfUFJJT1JJVFkpOwogfQogCisvKioKKyAqIFJlZ2lzdGVyIGEgY2FsbGJhY2sgZnVuY3Rpb24uCisgKgorICogQHBhcmFtIG1ham9yICAgICAgICBNYWpvciBjYWxsYmFjayBldmVudCB0eXBlLgorICogQHBhcmFtIG1pbm9yICAgICAgICBNaW5vciBjYWxsYmFjayBldmVudCB0eXBlLgorICogQHBhcmFtIG5ld19jYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbiBiZWluZyByZWdpc3RlcmVkLgorICogQHBhcmFtIGFyZyAgICAgICAgICBBcmd1bWVudCB0aGF0IHdpbGwgYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbi4KKyAqIEBwYXJhbSBwcmlvcml0eSAgICAgSGFuZGxlciBpbnZvY2F0aW9uIHByaW9yaXR5LiBXaGVuIG11bHRpcGxlIGhhbmRsZXJzIGhhdmUKKyAqICAgYmVlbiByZWdpc3RlcmVkIGZvciB0aGUgc2FtZSAobWFqb3IsIG1pbm9yKSBjYWxsYmFjayBldmVudCB0eXBlLCBoYW5kbGVycworICogICB3aXRoIHRoZSBudW1lcmljYWxseSBsb3dlc3QgcHJpb3JpdHkgd2lsbCBiZSBpbnZva2VkIGZpcnN0LiBIYW5kbGVycyB3aXRoCisgKiAgIGlkZW50aWNhbCBwcmlvcml0eSBhcmUgaW52b2tlZCBpbiB0aGUgb3JkZXIgdGhleSBoYXZlIGJlZW4gcmVnaXN0ZXJlZC4KKyAqCisgKiBAc2VlIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2sKKyAqLwogaW50CiBuZXRzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKGludCBtYWpvciwgaW50IG1pbm9yLCBTTk1QQ2FsbGJhY2sgKiBuZXdfY2FsbGJhY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFyZywgaW50IHByaW9yaXR5KQpAQCAtMzU0LDYgKzM3Myw3IEBACiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTExCQUNLX0NPVU5UCiBpbnQKIHNubXBfY291bnRfY2FsbGJhY2tzKGludCBtYWpvciwgaW50IG1pbm9yKQogewpAQCAtMzczLDYgKzM5Myw3IEBACiAKICAgICByZXR1cm4gY291bnQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxMQkFDS19DT1VOVCAqLwogCiBpbnQKIHNubXBfY2FsbGJhY2tfYXZhaWxhYmxlKGludCBtYWpvciwgaW50IG1pbm9yKQpAQCAtNTUxLDYgKzU3Miw3IEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMTEJBQ0tfTElTVAogc3RydWN0IHNubXBfZ2VuX2NhbGxiYWNrICoKIHNubXBfY2FsbGJhY2tfbGlzdChpbnQgbWFqb3IsIGludCBtaW5vcikKIHsKQEAgLTU1OSw0ICs1ODEsNSBAQAogCiAgICAgcmV0dXJuICh0aGVjYWxsYmFja3NbbWFqb3JdW21pbm9yXSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DQUxMQkFDS19MSVNUICovCiAvKiogIEB9ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2NlcnRfdXRpbC5jIGIvc25tcGxpYi9jZXJ0X3V0aWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDZhNmM5Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9jZXJ0X3V0aWwuYwpAQCAtMCwwICsxLDMzNjcgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNlcnRfdXRpbF9hbGwsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2VydF91dGlsLCBjZXJ0X3V0aWxfYWxsKQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NFUlRfVVRJTAorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2RpcmVjdG9yeSkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9maWZvKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2R1cCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9mcmVlX2FsbCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHN1YmNvbnRhaW5lcl9maW5kKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2VydF9tYXBfcmVtb3ZlLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjZXJ0X21hcF9maW5kLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bXBhcmFtc19leHRlcm5hbCwgY2VydF91dGlsX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bXBhcmFtc19jb250YWluZXIsIHRsc3RtcGFyYW1zX2V4dGVybmFsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtcGFyYW1zX3JlbW92ZSwgdGxzdG1wYXJhbXNfZXh0ZXJuYWwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1wYXJhbXNfZmluZCwgdGxzdG1wYXJhbXNfZXh0ZXJuYWwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1BZGRyX3JlbW92ZSwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGxzdG1hZGRyX2V4dGVybmFsLCBjZXJ0X3V0aWxfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRsc3RtYWRkcl9jb250YWluZXIsIHRsc3RtYWRkcl9leHRlcm5hbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHN0bUFkZHJfZ2V0X3NlcnZlcklkLCB0bHN0bWFkZHJfZXh0ZXJuYWwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjZXJ0X2ZpbmdlcnByaW50cywgY2VydF91dGlsX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0bHNfZmluZ2VycHJpbnRfYnVpbGQsIGNlcnRfdXRpbF9hbGwpCisKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DRVJUX1VUSUwgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfVVRJTAorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworI2lmIEhBVkVfU1lTX1NUQVRfSAorIyAgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0RJUkVOVF9ICisjIGluY2x1ZGUgPGRpcmVudC5oPgorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgc3RybGVuKChkaXJlbnQpLT5kX25hbWUpCisjZWxzZQorIyBkZWZpbmUgZGlyZW50IGRpcmVjdAorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgKGRpcmVudCktPmRfbmFtbGVuCisjIGlmIEhBVkVfU1lTX05ESVJfSAorIyAgaW5jbHVkZSA8c3lzL25kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TWVNfRElSX0gKKyMgIGluY2x1ZGUgPHN5cy9kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9ORElSX0gKKyMgIGluY2x1ZGUgPG5kaXIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RhdGFfbGlzdC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPgorCisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOXYzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oPgorCisjaWZuZGVmIE5BTUVfTUFYCisjZGVmaW5lIE5BTUVfTUFYIDI1NQorI2VuZGlmCisKKy8qCisgKiBidW1wIHRoaXMgdmFsdWUgd2hlbmV2ZXIgY2VydCBpbmRleCBmb3JtYXQgY2hhbmdlcywgc28gaW5kZXhlcworICogd2lsbCBiZSByZWdlbmVyYXRlZCB3aXRoIG5ldyBmb3JtYXQuCisgKi8KKyNkZWZpbmUgQ0VSVF9JTkRFWF9GT1JNQVQgIDEKKworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpfY2VydHMgPSBOVUxMOworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICpfa2V5cyA9IE5VTEw7CitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKl9tYXBzID0gTlVMTDsKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqX3Rsc3RtUGFyYW1zID0gTlVMTDsKK3N0YXRpYyBuZXRzbm1wX2NvbnRhaW5lciAqX3Rsc3RtQWRkciA9IE5VTEw7CitzdGF0aWMgc3RydWN0IHNubXBfZW51bV9saXN0ICpfY2VydGluZGV4ZXMgPSBOVUxMOworCitzdGF0aWMgbmV0c25tcF9jb250YWluZXIgKl90cnVzdGVkX2NlcnRzID0gTlVMTDsKKworc3RhdGljIHZvaWQgX3NldHVwX2NvbnRhaW5lcnModm9pZCk7CisKK3N0YXRpYyB2b2lkIF9jZXJ0X2luZGV4ZXNfbG9hZCh2b2lkKTsKK3N0YXRpYyB2b2lkIF9jZXJ0X2ZyZWUobmV0c25tcF9jZXJ0ICpjZXJ0LCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyB2b2lkIF9rZXlfZnJlZShuZXRzbm1wX2tleSAqa2V5LCB2b2lkICpjb250ZXh0KTsKK3N0YXRpYyBpbnQgIF9jZXJ0X2NvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKTsKK3N0YXRpYyBpbnQgIF9jZXJ0X3NuX2NvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKTsKK3N0YXRpYyBpbnQgIF9jZXJ0X3NuX25jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocyk7CitzdGF0aWMgaW50ICBfY2VydF9jbl9jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocyk7CitzdGF0aWMgaW50ICBfY2VydF9mbl9jb21wYXJlKG5ldHNubXBfY2VydF9jb21tb24gKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiAqcmhzKTsKK3N0YXRpYyBpbnQgIF9jZXJ0X2ZuX25jb21wYXJlKG5ldHNubXBfY2VydF9jb21tb24gKmxocywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9jb21tb24gKnJocyk7CitzdGF0aWMgdm9pZCBfZmluZF9wYXJ0bmVyKG5ldHNubXBfY2VydCAqY2VydCwgbmV0c25tcF9rZXkgKmtleSk7CitzdGF0aWMgbmV0c25tcF9jZXJ0ICpfZmluZF9pc3N1ZXIobmV0c25tcF9jZXJ0ICpjZXJ0KTsKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKl9jZXJ0X2ZpbmRfc3Vic2V0X2ZuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGlyZWN0b3J5KTsKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKl9jZXJ0X2ZpbmRfc3Vic2V0X3NuKGNvbnN0IGNoYXIgKnN1YmplY3QpOworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqX2tleV9maW5kX3N1YnNldChjb25zdCBjaGFyICpmaWxlbmFtZSk7CitzdGF0aWMgbmV0c25tcF9jZXJ0ICpfY2VydF9maW5kX2ZwKGNvbnN0IGNoYXIgKmZpbmdlcnByaW50KTsKK3N0YXRpYyBjaGFyICpfZmluZF90bHN0bVBhcmFtc19maW5nZXJwcmludChjb25zdCBjaGFyICpwYXJhbSk7CitzdGF0aWMgY2hhciAqX2ZpbmRfdGxzdG1BZGRyX2ZpbmdlcnByaW50KGNvbnN0IGNoYXIgKm5hbWUpOworc3RhdGljIGNvbnN0IGNoYXIgKl9tb2RlX3N0cih1X2NoYXIgbW9kZSk7CitzdGF0aWMgY29uc3QgY2hhciAqX3doZXJlX3N0cih1X2ludCB3aGF0KTsKK3ZvaWQgbmV0c25tcF9jZXJ0X2R1bXBfYWxsKHZvaWQpOworCitpbnQgbmV0c25tcF9jZXJ0X2xvYWRfeDUwOShuZXRzbm1wX2NlcnQgKmNlcnQpOworCit2b2lkIG5ldHNubXBfY2VydF9mcmVlKG5ldHNubXBfY2VydCAqY2VydCk7Cit2b2lkIG5ldHNubXBfa2V5X2ZyZWUobmV0c25tcF9rZXkgKmtleSk7CisKK3N0YXRpYyBpbnQgX2NlcnRpbmRleF9hZGQoIGNvbnN0IGNoYXIgKmRpcm5hbWUsIGludCBpICk7CisKK3N0YXRpYyBpbnQgX3RpbWVfZmlsdGVyKG5ldHNubXBfZmlsZSAqZiwgc3RydWN0IHN0YXQgKmlkeCk7CisKK3N0YXRpYyB2b2lkIF9pbml0X3Rsc3RtQ2VydFRvVFNOKHZvaWQpOworI2RlZmluZSBUUlVTVENFUlRfQ09ORklHX1RPS0VOICJ0cnVzdENlcnQiCitzdGF0aWMgdm9pZCBfcGFyc2VfdHJ1c3RjZXJ0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKTsKKworc3RhdGljIHZvaWQgX2luaXRfdGxzdG1QYXJhbXModm9pZCk7CitzdGF0aWMgdm9pZCBfaW5pdF90bHN0bUFkZHIodm9pZCk7CisKKy8qKiBtb2RlIGRlc2NyaXB0aW9ucyBzaG91bGQgbWF0Y2ggdXAgd2l0aCBoZWFkZXIgKi8KK3N0YXRpYyBjb25zdCBjaGFyIF9tb2Rlc1tdWzI1Nl0gPQorICAgICAgICB7CisgICAgICAgICAgICAibm9uZSIsCisgICAgICAgICAgICAiaWRlbnRpdHkiLAorICAgICAgICAgICAgInJlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJpZGVudGl0eStyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAicmVzZXJ2ZWQxIiwKKyAgICAgICAgICAgICJyZXNlcnZlZDEraWRlbnRpdHkiLAorICAgICAgICAgICAgInJlc2VydmVkMStyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAicmVzZXJ2ZWQxK2lkZW50aXR5K3JlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJDQSIsCisgICAgICAgICAgICAiQ0EraWRlbnRpdHkiLAorICAgICAgICAgICAgIkNBK3JlbW90ZV9wZWVyIiwKKyAgICAgICAgICAgICJDQStpZGVudGl0eStyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAiQ0ErcmVzZXJ2ZWQxIiwKKyAgICAgICAgICAgICJDQStyZXNlcnZlZDEraWRlbnRpdHkiLAorICAgICAgICAgICAgIkNBK3Jlc2VydmVkMStyZW1vdGVfcGVlciIsCisgICAgICAgICAgICAiQ0ErcmVzZXJ2ZWQxK2lkZW50aXR5K3JlbW90ZV9wZWVyIiwKKyAgICAgICAgfTsKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogaW5pdCBhbmQgc2h1dGRvd24gZnVuY3Rpb25zCisgKgorICovCisKK3ZvaWQKK19uZXRzbm1wX3JlbGVhc2VfdHJ1c3RjZXJ0cyh2b2lkKQoreworICAgIGlmIChOVUxMICE9IF90cnVzdGVkX2NlcnRzKSB7CisgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChfdHJ1c3RlZF9jZXJ0cywgTlVMTCk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKF90cnVzdGVkX2NlcnRzKTsKKyAgICAgICAgX3RydXN0ZWRfY2VydHMgPSBOVUxMOworICAgIH0KK30KKwordm9pZAorX3NldHVwX3RydXN0ZWRfY2VydHModm9pZCkKK3sKKyAgICBfdHJ1c3RlZF9jZXJ0cyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRydXN0ZWRfY2VydHM6ZmlmbyIpOworICAgIGlmIChOVUxMID09IF90cnVzdGVkX2NlcnRzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgdHJ1c3RlZCBjZXJ0c1xuIik7CisgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfdHJ1c3RlZF9jZXJ0cy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInRydXN0ZWQgY2VydGlmaWNhdGVzIik7CisgICAgX3RydXN0ZWRfY2VydHMtPmZyZWVfaXRlbSA9IChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyopIGZyZWU7CisgICAgX3RydXN0ZWRfY2VydHMtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopIHN0cmNtcDsKK30KKworLyoKKyAqIHNlY25hbWUgbWFwcGluZyBmb3Igc2VydmVycy4KKyAqLwordm9pZAorbmV0c25tcF9jZXJ0c19hZ2VudF9pbml0KHZvaWQpCit7CisgICAgX2luaXRfdGxzdG1DZXJ0VG9UU04oKTsKKyAgICBfaW5pdF90bHN0bVBhcmFtcygpOworICAgIF9pbml0X3Rsc3RtQWRkcigpOworfQorCit2b2lkCituZXRzbm1wX2NlcnRzX2luaXQodm9pZCkKK3sKKyAgICBjb25zdCBjaGFyICp0cnVzdENlcnRfaGVscCA9IFRSVVNUQ0VSVF9DT05GSUdfVE9LRU4KKyAgICAgICAgIiBGSU5HRVJQUklOVHxGSUxFTkFNRSI7CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsIFRSVVNUQ0VSVF9DT05GSUdfVE9LRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3BhcnNlX3RydXN0Y2VydCwgX25ldHNubXBfcmVsZWFzZV90cnVzdGNlcnRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRydXN0Q2VydF9oZWxwKTsKKyAgICBfc2V0dXBfY29udGFpbmVycygpOworCisgICAgLyoqIGFkZCBjZXJ0aWZpY2F0ZSB0eXBlIG1hcHBpbmcgKi8KKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgicGVtIiksIE5TX0NFUlRfVFlQRV9QRU0pOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJjcnQiKSwgTlNfQ0VSVF9UWVBFX0RFUik7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoImNlciIpLCBOU19DRVJUX1RZUEVfREVSKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgiY2VydCIpLCBOU19DRVJUX1RZUEVfREVSKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF90eXBlcyIsIHN0cmR1cCgiZGVyIiksIE5TX0NFUlRfVFlQRV9ERVIpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X3R5cGVzIiwgc3RyZHVwKCJrZXkiKSwgTlNfQ0VSVF9UWVBFX0tFWSk7CisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfdHlwZXMiLCBzdHJkdXAoInByaXZhdGUiKSwgTlNfQ0VSVF9UWVBFX0tFWSk7CisKKyAgICAvKiogaGFzaCBhbGdzICovCisgICAgc2VfYWRkX3BhaXJfdG9fc2xpc3QoImNlcnRfaGFzaF9hbGciLCBzdHJkdXAoInNoYTEiKSwgTlNfSEFTSF9TSEExKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cmR1cCgibWQ1IiksIE5TX0hBU0hfTUQ1KTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cmR1cCgic2hhMjI0IiksIE5TX0hBU0hfU0hBMjI0KTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cmR1cCgic2hhMjU2IiksIE5TX0hBU0hfU0hBMjU2KTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cmR1cCgic2hhMzg0IiksIE5TX0hBU0hfU0hBMzg0KTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cmR1cCgic2hhNTEyIiksIE5TX0hBU0hfU0hBNTEyKTsKKworICAgIC8qKiBtYXAgdHlwZXMgKi8KKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9tYXBfdHlwZSIsIHN0cmR1cCgiY24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWUpOworICAgIHNlX2FkZF9wYWlyX3RvX3NsaXN0KCJjZXJ0X21hcF90eXBlIiwgc3RyZHVwKCJpcCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgIFRTTk1fdGxzdG1DZXJ0U0FOSXBBZGRyZXNzKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9tYXBfdHlwZSIsIHN0cmR1cCgicmZjODIyIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRTQU5SRkM4MjJOYW1lKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9tYXBfdHlwZSIsIHN0cmR1cCgiZG5zIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgVFNOTV90bHN0bUNlcnRTQU5ETlNOYW1lKTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9tYXBfdHlwZSIsIHN0cmR1cCgiYW55IiksIFRTTk1fdGxzdG1DZXJ0U0FOQW55KTsKKyAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgiY2VydF9tYXBfdHlwZSIsIHN0cmR1cCgic24iKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBUU05NX3Rsc3RtQ2VydFNwZWNpZmllZCk7CisKK30KKwordm9pZAorbmV0c25tcF9jZXJ0c19zaHV0ZG93bih2b2lkKQoreworICAgIERFQlVHTVNHVCgoImNlcnQ6dXRpbDpzaHV0ZG93biIsInNodXRkb3duXG4iKSk7CisgICAgaWYgKF9tYXBzKSB7CisgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChfbWFwcywgTlVMTCk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKF9tYXBzKTsKKyAgICAgICAgX21hcHMgPSBOVUxMOworICAgIH0KKyAgICBpZiAoTlVMTCAhPSBfY2VydHMpIHsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKF9jZXJ0cywgTlVMTCk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKF9jZXJ0cyk7CisgICAgICAgIF9jZXJ0cyA9IE5VTEw7CisgICAgfQorICAgIGlmIChOVUxMICE9IF9rZXlzKSB7CisgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChfa2V5cywgTlVMTCk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKF9rZXlzKTsKKyAgICAgICAgX2tleXMgPSBOVUxMOworICAgIH0KKyAgICBfbmV0c25tcF9yZWxlYXNlX3RydXN0Y2VydHMoKTsKK30KKwordm9pZAorbmV0c25tcF9jZXJ0c19sb2FkKHZvaWQpCit7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0cjsKKyAgICBuZXRzbm1wX2tleSAgICAgICAgKmtleTsKKyAgICBuZXRzbm1wX2NlcnQgICAgICAgKmNlcnQ7CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OnV0aWw6aW5pdCIsImluaXRcbiIpKTsKKworICAgIGlmIChOVUxMID09IF9jZXJ0cykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2FudCBsb2FkIGNlcnRzIHdpdGhvdXQgY29udGFpbmVyXG4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChDT05UQUlORVJfU0laRShfY2VydHMpICE9IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDp1dGlsOmluaXQiLCAiaWdub3JpbmcgZHVwbGljYXRlIGluaXRcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5ldHNubXBfaW5pdF9vcGVuc3NsKCk7CisKKyAgICAvKiogc2NhbiBjb25maWcgZGlycyBmb3IgY2VydHMgKi8KKyAgICBfY2VydF9pbmRleGVzX2xvYWQoKTsKKworICAgIC8qKiBtYXRjaCB1cCBrZXlzIHcvY2VydHMgKi8KKyAgICBpdHIgPSBDT05UQUlORVJfSVRFUkFUT1IoX2tleXMpOworICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3Iga2V5c1xuIik7CisgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBrZXkgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgIGZvciggOyBrZXk7IGtleSA9IElURVJBVE9SX05FWFQoaXRyKSkKKyAgICAgICAgX2ZpbmRfcGFydG5lcihOVUxMLCBrZXkpOworICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKworICAgIERFQlVHSUYoImNlcnQ6ZHVtcCIpIHsKKyAgICAgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKF9jZXJ0cyk7CisgICAgICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIGNlcnRzXG4iKTsKKyAgICAgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjZXJ0ID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICAgICAgZm9yKCA7IGNlcnQ7IGNlcnQgPSBJVEVSQVRPUl9ORVhUKGl0cikpIHsKKyAgICAgICAgICAgIG5ldHNubXBfY2VydF9sb2FkX3g1MDkoY2VydCk7CisgICAgICAgIH0KKyAgICAgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmR1bXAiLAorICAgICAgICAgICAgICAgICAgICItLS0tLS0tLS0tLS0tLS0tLS0tLSBDZXJ0aWZpY2F0ZXMgLS0tLS0tLS0tLS0tLS0tLS1cbiIpKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0X2R1bXBfYWxsKCk7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZHVtcCIsCisgICAgICAgICAgICAgICAgICAgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxuIikpOworICAgIH0KK30KKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgKgorICogY2VydCBjb250YWluZXIgZnVuY3Rpb25zCisgKi8KKworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICoKK19nZXRfY2VydF9jb250YWluZXIoY29uc3QgY2hhciAqdXNlKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjOworCisgICAgYyA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnRzOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IGMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgY29udGFpbmVyIGZvciAlc1xuIiwgdXNlKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKHVzZSk7CisgICAgYy0+ZnJlZV9pdGVtID0gKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfY2VydF9mcmVlOworICAgIGMtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfY29tcGFyZTsKKworICAgIHJldHVybiBjOworfQorCitzdGF0aWMgdm9pZAorX3NldHVwX2NvbnRhaW5lcnModm9pZCkKK3sKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqYWRkaXRpb25hbF9rZXlzOworCisgICAgX2NlcnRzID0gX2dldF9jZXJ0X2NvbnRhaW5lcigibmV0c25tcCBjZXJ0aWZpY2F0ZXMiKTsKKyAgICBpZiAoTlVMTCA9PSBfY2VydHMpCisgICAgICAgIHJldHVybjsKKworICAgIC8qKiBhZGRpdGlvbmFsIGtleXM6IGNvbW1vbiBuYW1lICovCisgICAgYWRkaXRpb25hbF9rZXlzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydHNfY246YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gYWRkaXRpb25hbF9rZXlzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIENOIGNvbnRhaW5lciBmb3IgY2VydGlmaWNhdGVzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZGl0aW9uYWxfa2V5cy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImNlcnRzX2NuIik7CisgICAgYWRkaXRpb25hbF9rZXlzLT5mcmVlX2l0ZW0gPSBOVUxMOworICAgIGFkZGl0aW9uYWxfa2V5cy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9jbl9jb21wYXJlOworICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleChfY2VydHMsIGFkZGl0aW9uYWxfa2V5cyk7CisKKyAgICAvKiogYWRkaXRpb25hbCBrZXlzOiBzdWJqZWN0IG5hbWUgKi8KKyAgICBhZGRpdGlvbmFsX2tleXMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJjZXJ0c19zbjpiaW5hcnlfYXJyYXkiKTsKKyAgICBpZiAoTlVMTCA9PSBhZGRpdGlvbmFsX2tleXMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBjcmVhdGUgU04gY29udGFpbmVyIGZvciBjZXJ0aWZpY2F0ZXNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgYWRkaXRpb25hbF9rZXlzLT5jb250YWluZXJfbmFtZSA9IHN0cmR1cCgiY2VydHNfc24iKTsKKyAgICBhZGRpdGlvbmFsX2tleXMtPmZyZWVfaXRlbSA9IE5VTEw7CisgICAgYWRkaXRpb25hbF9rZXlzLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9jZXJ0X3NuX2NvbXBhcmU7CisgICAgYWRkaXRpb25hbF9rZXlzLT5uY29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9zbl9uY29tcGFyZTsKKyAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgoX2NlcnRzLCBhZGRpdGlvbmFsX2tleXMpOworCisgICAgLyoqIGFkZGl0aW9uYWwga2V5czogZmlsZSBuYW1lICovCisgICAgYWRkaXRpb25hbF9rZXlzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydHNfZm46YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gYWRkaXRpb25hbF9rZXlzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIEZOIGNvbnRhaW5lciBmb3IgY2VydGlmaWNhdGVzXG4iKTsKKyAgICAgICAgbmV0c25tcF9jZXJ0c19zaHV0ZG93bigpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGFkZGl0aW9uYWxfa2V5cy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoImNlcnRzX2ZuIik7CisgICAgYWRkaXRpb25hbF9rZXlzLT5mcmVlX2l0ZW0gPSBOVUxMOworICAgIGFkZGl0aW9uYWxfa2V5cy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9mbl9jb21wYXJlOworICAgIGFkZGl0aW9uYWxfa2V5cy0+bmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX2NlcnRfZm5fbmNvbXBhcmU7CisgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4KF9jZXJ0cywgYWRkaXRpb25hbF9rZXlzKTsKKworICAgIF9rZXlzID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiY2VydF9rZXlzOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IF9rZXlzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgY3JlYXRlIGNvbnRhaW5lciBmb3IgY2VydGlmaWNhdGUga2V5c1xuIik7CisgICAgICAgIG5ldHNubXBfY2VydHNfc2h1dGRvd24oKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBfa2V5cy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoIm5ldHNubXAgY2VydGlmaWNhdGUga2V5cyIpOworICAgIF9rZXlzLT5mcmVlX2l0ZW0gPSAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9rZXlfZnJlZTsKKyAgICBfa2V5cy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfY2VydF9mbl9jb21wYXJlOworCisgICAgX3NldHVwX3RydXN0ZWRfY2VydHMoKTsKK30KKworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIodm9pZCkKK3sKKyAgICByZXR1cm4gX21hcHM7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2NlcnQgKgorX25ld19jZXJ0KGNvbnN0IGNoYXIgKmRpcm5hbWUsIGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBpbnQgY2VydFR5cGUsCisgICAgICAgICAgaW50IGhhc2hUeXBlLCBjb25zdCBjaGFyICpmaW5nZXJwcmludCwgY29uc3QgY2hhciAqY29tbW9uX25hbWUsCisgICAgICAgICAgY29uc3QgY2hhciAqc3ViamVjdCkKK3sKKyAgICBuZXRzbm1wX2NlcnQgICAgKmNlcnQ7CisKKyAgICBpZiAoKE5VTEwgPT0gZGlybmFtZSkgfHwgKE5VTEwgPT0gZmlsZW5hbWUpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgcGFyYW1ldGVycyB0byBfbmV3X2NlcnRcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjZXJ0ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NlcnQpOworICAgIGlmIChOVUxMID09IGNlcnQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiY291bGQgbm90IGFsbG9jYXRlIG1lbW9yeSBmb3IgY2VydGlmaWNhdGUgYXQgJXMvJXNcbiIsCisgICAgICAgICAgICAgICAgIGRpcm5hbWUsIGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnN0cnVjdDpuZXciLCJuZXcgY2VydCAweCUjbHggZm9yICVzXG4iLCAodV9sb25nKWNlcnQsCisgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkpOworCisgICAgY2VydC0+aW5mby5kaXIgPSBzdHJkdXAoZGlybmFtZSk7CisgICAgY2VydC0+aW5mby5maWxlbmFtZSA9IHN0cmR1cChmaWxlbmFtZSk7CisgICAgY2VydC0+aW5mby5hbGxvd2VkX3VzZXMgPSBOU19DRVJUX1JFTU9URV9QRUVSOworICAgIGNlcnQtPmluZm8udHlwZSA9IGNlcnRUeXBlOworICAgIGlmIChmaW5nZXJwcmludCkgeworICAgICAgICBjZXJ0LT5oYXNoX3R5cGUgPSBoYXNoVHlwZTsKKyAgICAgICAgY2VydC0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoZmluZ2VycHJpbnQpOworICAgIH0KKyAgICBpZiAoY29tbW9uX25hbWUpCisgICAgICAgIGNlcnQtPmNvbW1vbl9uYW1lID0gc3RyZHVwKGNvbW1vbl9uYW1lKTsKKyAgICBpZiAoc3ViamVjdCkKKyAgICAgICAgY2VydC0+c3ViamVjdCA9IHN0cmR1cChzdWJqZWN0KTsKKworICAgIHJldHVybiBjZXJ0OworfQorCitzdGF0aWMgbmV0c25tcF9rZXkgKgorX25ld19rZXkoY29uc3QgY2hhciAqZGlybmFtZSwgY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgbmV0c25tcF9rZXkgICAgKmtleTsKKyAgICBzdHJ1Y3Qgc3RhdCAgICAgZnN0YXQ7CisgICAgY2hhciAgICAgICAgICAgIGZuW1NOTVBfTUFYUEFUSF07CisKKyAgICBpZiAoKE5VTEwgPT0gZGlybmFtZSkgfHwgKE5VTEwgPT0gZmlsZW5hbWUpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgcGFyYW1ldGVycyB0byBfbmV3X2tleVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qKiBjaGVjayBmaWxlIHBlcm1pc3Npb25zICovCisgICAgc25wcmludGYoZm4sIHNpemVvZihmbiksICIlcy8lcyIsIGRpcm5hbWUsIGZpbGVuYW1lKTsKKyAgICBpZiAoc3RhdChmbiwgJmZzdGF0KSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCAgbm90IHN0YXQgJXNcbiIsIGZuKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYgKChmc3RhdC5zdF9tb2RlICYgU19JUk9USCkgfHwgKGZzdGF0LnN0X21vZGUgJiBTX0lST1RIKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAicmVmdXNpbmcgdG8gcmVhZCB3b3JsZCByZWFkYWJsZSBvciB3cml0YWJsZSBrZXkgJXNcbiIsIGZuKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAga2V5ID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2tleSk7CisgICAgaWYgKE5VTEwgPT0ga2V5KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5IGZvciBrZXkgYXQgJXMvJXNcbiIsCisgICAgICAgICAgICAgICAgIGRpcm5hbWUsIGZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiY2VydDprZXk6c3RydWN0Om5ldyIsIm5ldyBrZXkgMHglI2x4IGZvciAlc1xuIiwgKHVfbG9uZylrZXksCisgICAgICAgICAgICAgICBmaWxlbmFtZSkpOworCisgICAga2V5LT5pbmZvLnR5cGUgPSBOU19DRVJUX1RZUEVfS0VZOworICAgIGtleS0+aW5mby5kaXIgPSBzdHJkdXAoZGlybmFtZSk7CisgICAga2V5LT5pbmZvLmZpbGVuYW1lID0gc3RyZHVwKGZpbGVuYW1lKTsKKyAgICBrZXktPmluZm8uYWxsb3dlZF91c2VzID0gTlNfQ0VSVF9JREVOVElUWTsKKworICAgIHJldHVybiBrZXk7Cit9CisKK3ZvaWQKK25ldHNubXBfY2VydF9mcmVlKG5ldHNubXBfY2VydCAqY2VydCkKK3sKKyAgICBpZiAoTlVMTCA9PSBjZXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6c3RydWN0OmZyZWUiLCJmcmVlaW5nIGNlcnQgMHglI2x4LCAlcyAoZnAgJXM7IENOICVzKVxuIiwKKyAgICAgICAgICAgICAgICh1X2xvbmcpY2VydCwgY2VydC0+aW5mby5maWxlbmFtZSA/IGNlcnQtPmluZm8uZmlsZW5hbWUgOiAiVU5LIiwKKyAgICAgICAgICAgICAgIGNlcnQtPmZpbmdlcnByaW50ID8gY2VydC0+ZmluZ2VycHJpbnQgOiAiVU5LIiwKKyAgICAgICAgICAgICAgIGNlcnQtPmNvbW1vbl9uYW1lID8gY2VydC0+Y29tbW9uX25hbWUgOiAiVU5LIikpOworCisgICAgU05NUF9GUkVFKGNlcnQtPmluZm8uZGlyKTsKKyAgICBTTk1QX0ZSRUUoY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgU05NUF9GUkVFKGNlcnQtPnN1YmplY3QpOworICAgIFNOTVBfRlJFRShjZXJ0LT5pc3N1ZXIpOworICAgIFNOTVBfRlJFRShjZXJ0LT5maW5nZXJwcmludCk7CisgICAgU05NUF9GUkVFKGNlcnQtPmNvbW1vbl9uYW1lKTsKKyAgICBpZiAoY2VydC0+b2NlcnQpCisgICAgICAgIFg1MDlfZnJlZShjZXJ0LT5vY2VydCk7CisgICAgaWYgKGNlcnQtPmtleSAmJiBjZXJ0LT5rZXktPmNlcnQgPT0gY2VydCkKKyAgICAgICAgY2VydC0+a2V5LT5jZXJ0ID0gTlVMTDsKKworICAgIGZyZWUoY2VydCk7IC8qIFNOTVBfRlJFRSBub3QgbmVlZGVkIG9uIHBhcmFtZXRlcnMgKi8KK30KKwordm9pZAorbmV0c25tcF9rZXlfZnJlZShuZXRzbm1wX2tleSAqa2V5KQoreworICAgIGlmIChOVUxMID09IGtleSkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUKCgiY2VydDprZXk6c3RydWN0OmZyZWUiLCJmcmVlaW5nIGtleSAweCUjbHgsICVzXG4iLAorICAgICAgICAgICAgICAgKHVfbG9uZylrZXksIGtleS0+aW5mby5maWxlbmFtZSA/IGtleS0+aW5mby5maWxlbmFtZSA6ICJVTksiKSk7CisKKyAgICBTTk1QX0ZSRUUoa2V5LT5pbmZvLmRpcik7CisgICAgU05NUF9GUkVFKGtleS0+aW5mby5maWxlbmFtZSk7CisgICAgRVZQX1BLRVlfZnJlZShrZXktPm9rZXkpOworICAgIGlmIChrZXktPmNlcnQgJiYga2V5LT5jZXJ0LT5rZXkgPT0ga2V5KQorICAgICAgICBrZXktPmNlcnQtPmtleSA9IE5VTEw7CisKKyAgICBmcmVlKGtleSk7IC8qIFNOTVBfRlJFRSBub3QgbmVlZGVkIG9uIHBhcmFtZXRlcnMgKi8KK30KKworc3RhdGljIHZvaWQKK19jZXJ0X2ZyZWUobmV0c25tcF9jZXJ0ICpjZXJ0LCB2b2lkICpjb250ZXh0KQoreworICAgIG5ldHNubXBfY2VydF9mcmVlKGNlcnQpOworfQorCitzdGF0aWMgdm9pZAorX2tleV9mcmVlKG5ldHNubXBfa2V5ICprZXksIHZvaWQgKmNvbnRleHQpCit7CisgICAgbmV0c25tcF9rZXlfZnJlZShrZXkpOworfQorCitzdGF0aWMgaW50CitfY2VydF9jb21wYXJlKG5ldHNubXBfY2VydCAqbGhzLCBuZXRzbm1wX2NlcnQgKnJocykKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMtPmZpbmdlcnByaW50ICE9IE5VTEwpICYmCisgICAgICAgICAgICAgICAgICAgKHJocy0+ZmluZ2VycHJpbnQgIT0gTlVMTCkpOworCisgICAgLyoqIGlnbm9yZSBoYXNoIHR5cGU/ICovCisgICAgcmV0dXJuIHN0cmNtcChsaHMtPmZpbmdlcnByaW50LCByaHMtPmZpbmdlcnByaW50KTsKK30KKworc3RhdGljIGludAorX2NlcnRfcGF0aF9jb21wYXJlKG5ldHNubXBfY2VydF9jb21tb24gKmxocywgbmV0c25tcF9jZXJ0X2NvbW1vbiAqcmhzKQoreworICAgIGludCByYzsKKworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisgICAgCisgICAgLyoqIGRpciBuYW1lIGZpcnN0ICovCisgICAgcmMgPSBzdHJjbXAobGhzLT5kaXIsIHJocy0+ZGlyKTsKKyAgICBpZiAocmMpCisgICAgICAgIHJldHVybiByYzsKKworICAgIC8qKiBmaWxlbmFtZSAqLworICAgIHJldHVybiBzdHJjbXAobGhzLT5maWxlbmFtZSwgcmhzLT5maWxlbmFtZSk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X2NuX2NvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKQoreworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpsaGNuLCAqcmhjbjsKKworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisKKyAgICBpZiAoTlVMTCA9PSBsaHMtPmNvbW1vbl9uYW1lKQorICAgICAgICBsaGNuID0gIiI7CisgICAgZWxzZQorICAgICAgICBsaGNuID0gbGhzLT5jb21tb25fbmFtZTsKKyAgICBpZiAoTlVMTCA9PSByaHMtPmNvbW1vbl9uYW1lKQorICAgICAgICByaGNuID0gIiI7CisgICAgZWxzZQorICAgICAgICByaGNuID0gcmhzLT5jb21tb25fbmFtZTsKKworICAgIHJjID0gc3RyY21wKGxoY24sIHJoY24pOworICAgIGlmIChyYykKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgLyoqIGluIGNhc2Ugb2YgZXF1YWwgY29tbW9uIG5hbWVzLCBzdWItc29ydCBieSBwYXRoICovCisgICAgcmV0dXJuIF9jZXJ0X3BhdGhfY29tcGFyZSgobmV0c25tcF9jZXJ0X2NvbW1vbiopbGhzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY2VydF9jb21tb24qKXJocyk7Cit9CisKK3N0YXRpYyBpbnQKK19jZXJ0X3NuX2NvbXBhcmUobmV0c25tcF9jZXJ0ICpsaHMsIG5ldHNubXBfY2VydCAqcmhzKQoreworICAgIGludCByYzsKKyAgICBjb25zdCBjaGFyICpsaHNuLCAqcmhzbjsKKworICAgIG5ldHNubXBfYXNzZXJ0KChsaHMgIT0gTlVMTCkgJiYgKHJocyAhPSBOVUxMKSk7CisKKyAgICBpZiAoTlVMTCA9PSBsaHMtPnN1YmplY3QpCisgICAgICAgIGxoc24gPSAiIjsKKyAgICBlbHNlCisgICAgICAgIGxoc24gPSBsaHMtPnN1YmplY3Q7CisgICAgaWYgKE5VTEwgPT0gcmhzLT5zdWJqZWN0KQorICAgICAgICByaHNuID0gIiI7CisgICAgZWxzZQorICAgICAgICByaHNuID0gcmhzLT5zdWJqZWN0OworCisgICAgcmMgPSBzdHJjbXAobGhzbiwgcmhzbik7CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKiogaW4gY2FzZSBvZiBlcXVhbCBjb21tb24gbmFtZXMsIHN1Yi1zb3J0IGJ5IHBhdGggKi8KKyAgICByZXR1cm4gX2NlcnRfcGF0aF9jb21wYXJlKChuZXRzbm1wX2NlcnRfY29tbW9uKilsaHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9jZXJ0X2NvbW1vbiopcmhzKTsKK30KKworc3RhdGljIGludAorX2NlcnRfZm5fY29tcGFyZShuZXRzbm1wX2NlcnRfY29tbW9uICpsaHMsIG5ldHNubXBfY2VydF9jb21tb24gKnJocykKK3sKKyAgICBpbnQgcmM7CisKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworCisgICAgcmMgPSBzdHJjbXAobGhzLT5maWxlbmFtZSwgcmhzLT5maWxlbmFtZSk7CisgICAgaWYgKHJjKQorICAgICAgICByZXR1cm4gcmM7CisKKyAgICAvKiogaW4gY2FzZSBvZiBlcXVhbCBjb21tb24gbmFtZXMsIHN1Yi1zb3J0IGJ5IGRpciAqLworICAgIHJldHVybiBzdHJjbXAobGhzLT5kaXIsIHJocy0+ZGlyKTsKK30KKworc3RhdGljIGludAorX2NlcnRfZm5fbmNvbXBhcmUobmV0c25tcF9jZXJ0X2NvbW1vbiAqbGhzLCBuZXRzbm1wX2NlcnRfY29tbW9uICpyaHMpCit7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzLT5maWxlbmFtZSAhPSBOVUxMKSAmJiAocmhzLT5maWxlbmFtZSAhPSBOVUxMKSk7CisKKyAgICByZXR1cm4gc3RybmNtcChsaHMtPmZpbGVuYW1lLCByaHMtPmZpbGVuYW1lLCBzdHJsZW4ocmhzLT5maWxlbmFtZSkpOworfQorCitzdGF0aWMgaW50CitfY2VydF9zbl9uY29tcGFyZShuZXRzbm1wX2NlcnQgKmxocywgbmV0c25tcF9jZXJ0ICpyaHMpCit7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzLT5zdWJqZWN0ICE9IE5VTEwpICYmIChyaHMtPnN1YmplY3QgIT0gTlVMTCkpOworCisgICAgcmV0dXJuIHN0cm5jbXAobGhzLT5zdWJqZWN0LCByaHMtPnN1YmplY3QsIHN0cmxlbihyaHMtPnN1YmplY3QpKTsKK30KKworc3RhdGljIGludAorX2NlcnRfZXh0X3R5cGUoY29uc3QgY2hhciAqZXh0KQoreworICAgIGludCByYyA9IHNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QoImNlcnRfdHlwZXMiLCBleHQpOworICAgIGlmIChTRV9ETkUgPT0gcmMpCisgICAgICAgIHJldHVybiBOU19DRVJUX1RZUEVfVU5LTk9XTjsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK190eXBlX2Zyb21fZmlsZW5hbWUoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgY2hhciAgICAgKnBvczsKKyAgICBpbnQgICAgICAgdHlwZTsKKworICAgIGlmIChOVUxMID09IGZpbGVuYW1lKQorICAgICAgICByZXR1cm4gTlNfQ0VSVF9UWVBFX1VOS05PV047CisKKyAgICBwb3MgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOworICAgIGlmIChOVUxMID09IHBvcykKKyAgICAgICAgcmV0dXJuIE5TX0NFUlRfVFlQRV9VTktOT1dOOworCisgICAgdHlwZSA9IF9jZXJ0X2V4dF90eXBlKCsrcG9zKTsKKyAgICByZXR1cm4gdHlwZTsKK30KKworLyoKKyAqIGZpbHRlciBmdW5jdGlvbnM7IHJldHVybiAxIHRvIGluY2x1ZGUgZmlsZSwgMCB0byBleGNsdWRlCisgKi8KK3N0YXRpYyBpbnQKK19jZXJ0X2NlcnRfZmlsdGVyKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQoreworICAgIGludCAgbGVuID0gc3RybGVuKGZpbGVuYW1lKTsKKyAgICBjb25zdCBjaGFyICpwb3M7CisKKyAgICBpZiAobGVuIDwgNSkgLyogc2hvcnRlc3QgbmFtZTogeC5ZWVkgKi8KKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBwb3MgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOworICAgIGlmIChOVUxMID09IHBvcykKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoX2NlcnRfZXh0X3R5cGUoKytwb3MpICE9IE5TX0NFUlRfVFlQRV9VTktOT1dOKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAqCisgKiBjZXJ0IGluZGV4IGZ1bmN0aW9ucworICoKKyAqIFRoaXMgY29kZSBtaW1pY3Mgd2hhdCB0aGUgbWliIGluZGV4IGNvZGUgZG9lcy4gVGhlIHBlcnNpc3RlbnQKKyAqIGRpcmVjdG9yeSB3aWxsIGhhdmUgYSBzdWJkaXJlY3RvcnkgbmFtZWQgJ2NlcnRfaW5kZXhlcycuIEluc2lkZQorICogdGhpcyBkaXJlY3Rvcnkgd2lsbCBiZSBzb21lIG51bWJlciBvZiBmaWxlcyB3aXRoIGFzY2lpIG51bWVyaWMKKyAqIG5hbWVzICgwLCAxLCAyLCBldGMpLiBFYWNoIG9mIHRoZXNlIGZpbGVzIHdpbGwgc3RhcnQgd2l0aCBhIGxpbmUKKyAqIHdpdGggdGhlIHRleHQgIkRJUiAiLCBmb2xsb3dlZCBieSBhIGRpcmVjdG9yeSBuYW1lLiBUaGUgcmVzdCBvZiB0aGUKKyAqIGZpbGUgd2lsbCBiZSBjZXJ0aWZpY2F0ZSBmaWVsZHMgYW5kIHRoZSBjZXJ0aWZpY2F0ZSBmaWxlIG5hbWUsIG9uZQorICogY2VydGlmaWNhdGUgcGVyIGxpbmUuIFRoZSBudW1lcmljIGZpbGUgbmFtZSBpcyB0aGUgaW50ZWdlciAnZGlyZWN0b3J5CisgKiBpbmRleCcuCisgKi8KKworLyoqCisgKiBfY2VydGluZGV4X2FkZAorICoKKyAqIGFkZCBhIGRpcmVjdG9yeSBuYW1lIHRvIHRoZSBpbmRleGVzCisgKi8KK3N0YXRpYyBpbnQKK19jZXJ0aW5kZXhfYWRkKCBjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgaSApCit7CisgICAgaW50IHJjOworICAgIGNoYXIgKmRpcm5hbWVfY29weSA9IHN0cmR1cChkaXJuYW1lKTsKKworICAgIGlmICggaSA9PSAtMSApIHsKKyAgICAgICAgaW50IG1heCA9IHNlX2ZpbmRfZnJlZV92YWx1ZV9pbl9saXN0KF9jZXJ0aW5kZXhlcyk7CisgICAgICAgIGlmIChTRV9ETkUgPT0gbWF4KQorICAgICAgICAgICAgaSA9IDA7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGkgPSBtYXg7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDphZGQiLCJkaXIgJXMgYXQgaW5kZXggJWRcbiIsIGRpcm5hbWUsIGkgKSk7CisgICAgcmMgPSBzZV9hZGRfcGFpcl90b19saXN0KCZfY2VydGluZGV4ZXMsIGRpcm5hbWVfY29weSwgaSk7CisgICAgaWYgKFNFX09LICE9IHJjKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJhZGRpbmcgY2VydGluZGV4IGRpcm5hbWUgZmFpbGVkOyAiCisgICAgICAgICAgICAgICAgICIlZCAoJXMpIG5vdCBhZGRlZFxuIiwgaSwgZGlybmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gaTsKK30KKworLyoqCisgKiBfY2VydGluZGV4X2xvYWQKKyAqCisgKiByZWFkIGluIHRoZSBleGlzdGluZyBpbmRleGVzCisgKi8KK3N0YXRpYyB2b2lkCitfY2VydGluZGV4ZXNfbG9hZCggdm9pZCApCit7CisgICAgRElSICpkaXI7CisgICAgc3RydWN0IGRpcmVudCAqZmlsZTsKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyIGZpbGVuYW1lW1NOTVBfTUFYUEFUSF0sIGxpbmVbMzAwXTsKKyAgICBpbnQgIGk7CisgICAgY2hhciAqY3AsICpwb3M7CisKKyAgICAvKgorICAgICAqIE9wZW4gdGhlIENFUlQgaW5kZXggZGlyZWN0b3J5LCBvciBjcmVhdGUgaXQgKGVtcHR5KQorICAgICAqLworICAgIHNucHJpbnRmKCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL2NlcnRfaW5kZXhlcyIsCisgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpKTsKKyAgICBmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gMDsKKyAgICBkaXIgPSBvcGVuZGlyKCBmaWxlbmFtZSApOworICAgIGlmICggZGlyID09IE5VTEwgKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6bG9hZCIsCisgICAgICAgICAgICAgICAgICAgImNyZWF0aW5nIG5ldyBjZXJ0X2luZGV4ZXMgZGlyZWN0b3J5XG4iKSk7CisgICAgICAgIG1rZGlyaGllciggZmlsZW5hbWUsIE5FVFNOTVBfQUdFTlRfRElSRUNUT1JZX01PREUsIDApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDcmVhdGUgYSBsaXN0IG9mIHdoaWNoIGRpcmVjdG9yeSBlYWNoIGZpbGUgcmVmZXJzIHRvCisgICAgICovCisgICAgd2hpbGUgKChmaWxlID0gcmVhZGRpciggZGlyICkpKSB7CisgICAgICAgIGlmICggIWlzZGlnaXQoMHhGRiAmIGZpbGUtPmRfbmFtZVswXSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaSA9IGF0b2koIGZpbGUtPmRfbmFtZSApOworCisgICAgICAgIHNucHJpbnRmKCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL2NlcnRfaW5kZXhlcy8lZCIsCisgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBpICk7CisgICAgICAgIGZpbGVuYW1lW3NpemVvZihmaWxlbmFtZSktMV0gPSAwOworICAgICAgICBmcCA9IGZvcGVuKCBmaWxlbmFtZSwgInIiICk7CisgICAgICAgIGlmICggIWZwICkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpsb2FkIiwgImVycm9yIG9wZW5pbmcgaW5kZXggKCVkKVxuIiwgaSkpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgY3AgPSBmZ2V0cyggbGluZSwgc2l6ZW9mKGxpbmUpLCBmcCApOworICAgICAgICBpZiAoIGNwICkgeworICAgICAgICAgICAgbGluZVtzdHJsZW4obGluZSktMV0gPSAwOworICAgICAgICAgICAgcG9zID0gc3RycmNocihsaW5lLCAnICcpOworICAgICAgICAgICAgaWYgKHBvcykKKyAgICAgICAgICAgICAgICAqcG9zID0gJ1wwJzsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDppbmRleDpsb2FkIiwiYWRkaW5nICglZCkgJXNcbiIsIGksIGxpbmUpKTsKKyAgICAgICAgICAgICh2b2lkKV9jZXJ0aW5kZXhfYWRkKCBsaW5lKzQsIGkgKTsgIC8qIFNraXAgJ0RJUiAnICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmxvYWQiLCAiRW1wdHkgaW5kZXggKCVkKVxuIiwgaSkpOworICAgICAgICB9CisgICAgICAgIGZjbG9zZSggZnAgKTsKKyAgICB9CisgICAgY2xvc2VkaXIoIGRpciApOworfQorCisvKioKKyAqIF9jZXJ0aW5kZXhfbG9va3VwCisgKgorICogZmluZCBpbmRleCBmb3IgYSBkaXJlY3RvcnkKKyAqLworc3RhdGljIGNoYXIgKgorX2NlcnRpbmRleF9sb29rdXAoIGNvbnN0IGNoYXIgKmRpcm5hbWUgKQoreworICAgIGludCBpOworICAgIGNoYXIgZmlsZW5hbWVbU05NUF9NQVhQQVRIXTsKKworCisgICAgaSA9IHNlX2ZpbmRfdmFsdWVfaW5fbGlzdChfY2VydGluZGV4ZXMsIGRpcm5hbWUpOworICAgIGlmIChTRV9ETkUgPT0gaSkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6aW5kZXg6bG9va3VwIiwiJXMgOiAobm9uZSlcbiIsIGRpcm5hbWUpKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcy9jZXJ0X2luZGV4ZXMvJWQiLAorICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpLCBpKTsKKyAgICBmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gMDsKKyAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4Omxvb2t1cCIsICIlcyAoJWQpICVzXG4iLCBkaXJuYW1lLCBpLCBmaWxlbmFtZSApKTsKKyAgICByZXR1cm4gc3RyZHVwKGZpbGVuYW1lKTsKK30KKworc3RhdGljIEZJTEUgKgorX2NlcnRpbmRleF9uZXcoIGNvbnN0IGNoYXIgKmRpcm5hbWUgKQoreworICAgIEZJTEUgKmZwOworICAgIGNoYXIgIGZpbGVuYW1lW1NOTVBfTUFYUEFUSF0sICpjcDsKKyAgICBpbnQgICBpOworCisgICAgY3AgPSBfY2VydGluZGV4X2xvb2t1cCggZGlybmFtZSApOworICAgIGlmICghY3ApIHsKKyAgICAgICAgaSAgPSBfY2VydGluZGV4X2FkZCggZGlybmFtZSwgLTEgKTsKKyAgICAgICAgaWYgKC0xID09IGkpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsgLyogbXNnIGFscmVhZHkgbG9nZ2VkICovCisgICAgICAgIHNucHJpbnRmKCBmaWxlbmFtZSwgc2l6ZW9mKGZpbGVuYW1lKSwgIiVzL2NlcnRfaW5kZXhlcy8lZCIsCisgICAgICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgaSApOworICAgICAgICBmaWxlbmFtZVtzaXplb2YoZmlsZW5hbWUpLTFdID0gMDsKKyAgICAgICAgY3AgPSBmaWxlbmFtZTsKKyAgICB9CisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmluZGV4Om5ldyIsICIlcyAoJXMpXG4iLCBkaXJuYW1lLCBjcCApKTsKKyAgICBmcCA9IGZvcGVuKCBjcCwgInciICk7CisgICAgaWYgKGZwKQorICAgICAgICBmcHJpbnRmKCBmcCwgIkRJUiAlcyAlZFxuIiwgZGlybmFtZSwgQ0VSVF9JTkRFWF9GT1JNQVQgKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHTVNHVEwoKCJjZXJ0OmluZGV4IiwgImVycm9yIG9wZW5pbmcgbmV3IGluZGV4IGZpbGUgJXNcbiIsIGRpcm5hbWUpKTsKKworICAgIGlmIChjcCAhPSBmaWxlbmFtZSkKKyAgICAgICAgZnJlZShjcCk7CisKKyAgICByZXR1cm4gZnA7Cit9CisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworICoKKyAqIGNlcnRpZmljYXRlIHV0aWxpdHkgZnVuY3Rpb25zCisgKgorICovCitzdGF0aWMgWDUwOSAqCituZXRzbm1wX29jZXJ0X2dldChuZXRzbm1wX2NlcnQgKmNlcnQpCit7CisgICAgQklPICAgICAgICAgICAgKmNlcnRiaW87CisgICAgWDUwOSAgICAgICAgICAgKm9jZXJ0ID0gTlVMTDsKKyAgICBFVlBfUEtFWSAgICAgICAqb2tleSA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgIGZpbGVbU05NUF9NQVhQQVRIXTsKKyAgICBpbnQgICAgICAgICAgICAgaXNfY2E7CisKKyAgICBpZiAoTlVMTCA9PSBjZXJ0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChjZXJ0LT5vY2VydCkKKyAgICAgICAgcmV0dXJuIGNlcnQtPm9jZXJ0OworCisgICAgaWYgKE5TX0NFUlRfVFlQRV9VTktOT1dOID09IGNlcnQtPmluZm8udHlwZSkgeworICAgICAgICBjZXJ0LT5pbmZvLnR5cGUgPSBfdHlwZV9mcm9tX2ZpbGVuYW1lKGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICBpZiAoTlNfQ0VSVF9UWVBFX1VOS05PV04gPT0gY2VydC0+aW5mby50eXBlKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBjZXJ0aWZpY2F0ZSB0eXBlICVkIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8udHlwZSwgY2VydC0+aW5mby5maWxlbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgIH0KKworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpyZWFkIiwgIkNoZWNraW5nIGZpbGUgJXNcbiIsIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKworICAgIGNlcnRiaW8gPSBCSU9fbmV3KEJJT19zX2ZpbGUoKSk7CisgICAgaWYgKE5VTEwgPT0gY2VydGJpbykgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgQklPXG4iKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc25wcmludGYoZmlsZSwgc2l6ZW9mKGZpbGUpLCIlcy8lcyIsIGNlcnQtPmluZm8uZGlyLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICBpZiAoQklPX3JlYWRfZmlsZW5hbWUoY2VydGJpbywgZmlsZSkgPD0wKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciByZWFkaW5nIGNlcnRpZmljYXRlICVzIGludG8gQklPXG4iLCBmaWxlKTsKKyAgICAgICAgQklPX3ZmcmVlKGNlcnRiaW8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoTlNfQ0VSVF9UWVBFX1VOS05PV04gPT0gY2VydC0+aW5mby50eXBlKSB7CisgICAgICAgIGNoYXIgKnBvcyA9IHN0cnJjaHIoY2VydC0+aW5mby5maWxlbmFtZSwgJy4nKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcG9zKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGNlcnQtPmluZm8udHlwZSA9IF9jZXJ0X2V4dF90eXBlKCsrcG9zKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoY2VydC0+aW5mby50eXBlICE9IE5TX0NFUlRfVFlQRV9VTktOT1dOKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKGNlcnQtPmluZm8udHlwZSkgeworCisgICAgICAgIGNhc2UgTlNfQ0VSVF9UWVBFX0RFUjoKKyAgICAgICAgICAgIG9jZXJ0ID0gZDJpX1g1MDlfYmlvKGNlcnRiaW8sTlVMTCk7IC8qIERFUi9BU04xICovCisgICAgICAgICAgICBpZiAoTlVMTCAhPSBvY2VydCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICh2b2lkKUJJT19yZXNldChjZXJ0YmlvKTsKKyAgICAgICAgICAgIC8qKiBGQUxMVEhST1VHSDogY2hlY2sgZm9yIFBFTSBpZiBERVIgZGlkbid0IHdvcmsgKi8KKworICAgICAgICBjYXNlIE5TX0NFUlRfVFlQRV9QRU06CisgICAgICAgICAgICBvY2VydCA9IFBFTV9yZWFkX2Jpb19YNTA5X0FVWChjZXJ0YmlvLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IG9jZXJ0KQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKE5TX0NFUlRfVFlQRV9ERVIgPT0gY2VydC0+aW5mby50eXBlKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnJlYWQiLCAiQ2hhbmdpbmcgdHlwZSBmcm9tIERFUiB0byBQRU1cbiIpKTsKKyAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLnR5cGUgPSBOU19DRVJUX1RZUEVfUEVNOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyoqIGNoZWNrIGZvciBwcml2YXRlIGtleSB0b28gKi8KKyAgICAgICAgICAgIGlmIChOVUxMID09IGNlcnQtPmtleSkgeworICAgICAgICAgICAgICAgICh2b2lkKUJJT19yZXNldChjZXJ0YmlvKTsKKyAgICAgICAgICAgICAgICBva2V5ID0gIFBFTV9yZWFkX2Jpb19Qcml2YXRlS2V5KGNlcnRiaW8sIE5VTEwsIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChOVUxMICE9IG9rZXkpIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9rZXkgICprZXk7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cmVhZDprZXkiLCAiZm91bmQga2V5IHdpdGggY2VydCBpbiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIGtleSA9IF9uZXdfa2V5KGNlcnQtPmluZm8uZGlyLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKE5VTEwgIT0ga2V5KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBrZXktPm9rZXkgPSBva2V5OworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKC0xID09IENPTlRBSU5FUl9JTlNFUlQoX2tleXMsIGtleSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnJlYWQ6a2V5OmFkZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3IgaW5zZXJ0aW5nIGtleSBpbnRvIGNvbnRhaW5lclxuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfa2V5X2ZyZWUoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXkgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpyZWFkOnBhcnRuZXIiLCAiJXMgbWF0Y2ggZm91bmQhXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleS0+Y2VydCA9IGNlcnQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+a2V5ID0ga2V5OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uYWxsb3dlZF91c2VzIHw9IE5TX0NFUlRfSURFTlRJVFk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IC8qIG51bGwgcmV0dXJuIGZyb20gcmVhZCAqLworICAgICAgICAgICAgfSAvKiBudWxsIGtleSAqLworICAgICAgICAgICAgYnJlYWs7CisjaWZkZWYgQ0VSVF9QS0NTMTJfU1VQUE9SVF9NQVlCRV9MQVRFUgorICAgICAgICBjYXNlIE5TX0NFUlRfVFlQRV9QS0NTMTI6CisgICAgICAgICAgICAodm9pZClCSU9fcmVzZXQoY2VydGJpbyk7CisgICAgICAgICAgICBQS0NTMTIgKnAxMiA9IGQyaV9QS0NTMTJfYmlvKGNlcnRiaW8sIE5VTEwpOworICAgICAgICAgICAgaWYgKCAoTlVMTCAhPSBwMTIpICYmIChQS0NTMTJfdmVyaWZ5X21hYyhwMTIsICIiLCAwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQS0NTMTJfdmVyaWZ5X21hYyhwMTIsIE5VTEwsIDApKSkKKyAgICAgICAgICAgICAgICBQS0NTMTJfcGFyc2UocDEyLCAiIiwgTlVMTCwgJmNlcnQsIE5VTEwpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ1bmtub3duIGNlcnRpZmljYXRlIHR5cGUgJWQgZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby50eXBlLCBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICB9CisKKyAgICBCSU9fdmZyZWUoY2VydGJpbyk7CisKKyAgICBpZiAoTlVMTCA9PSBvY2VydCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcGFyc2luZyBjZXJ0aWZpY2F0ZSBmaWxlICVzXG4iLAorICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgY2VydC0+b2NlcnQgPSBvY2VydDsKKyAgICAvKgorICAgICAqIFg1MDlfY2hlY2tfY2EgcmV0dXJuIGNvZGVzOgorICAgICAqIDAgbm90IGEgQ0EKKyAgICAgKiAxIGlzIGEgQ0EKKyAgICAgKiAyIGJhc2ljQ29uc3RyYWludHMgYWJzZW50IHNvICJtYXliZSIgYSBDQQorICAgICAqIDMgYmFzaWNDb25zdHJhaW50cyBhYnNlbnQgYnV0IHNlbGYgc2lnbmVkIFYxLgorICAgICAqIDQgYmFzaWNDb25zdHJhaW50cyBhYnNlbnQgYnV0IGtleVVzYWdlIHByZXNlbnQgYW5kIGtleUNlcnRTaWduIGFzc2VydGVkLgorICAgICAqIDUgb3V0ZGF0ZWQgTmV0c2NhcGUgQ2VydGlmaWNhdGUgVHlwZSBDQSBleHRlbnNpb24uCisgICAgICovCisgICAgaXNfY2EgPSBYNTA5X2NoZWNrX2NhKG9jZXJ0KTsKKyAgICBpZiAoMSA9PSBpc19jYSkKKyAgICAgICAgY2VydC0+aW5mby5hbGxvd2VkX3VzZXMgfD0gTlNfQ0VSVF9DQTsKKworICAgIGlmIChOVUxMID09IGNlcnQtPnN1YmplY3QpIHsKKyAgICAgICAgY2VydC0+c3ViamVjdCA9IFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZShvY2VydCksIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmFkZDpzdWJqZWN0IiwgInN1YmplY3QgbmFtZTogJXNcbiIsIGNlcnQtPnN1YmplY3QpKTsKKyAgICB9CisKKyAgICBpZiAoTlVMTCA9PSBjZXJ0LT5pc3N1ZXIpIHsKKyAgICAgICAgY2VydC0+aXNzdWVyID0gWDUwOV9OQU1FX29uZWxpbmUoWDUwOV9nZXRfaXNzdWVyX25hbWUob2NlcnQpLCBOVUxMLCAwKTsKKyAgICAgICAgaWYgKHN0cmNtcChjZXJ0LT5zdWJqZWN0LCBjZXJ0LT5pc3N1ZXIpID09IDApIHsKKyAgICAgICAgICAgIGZyZWUoY2VydC0+aXNzdWVyKTsKKyAgICAgICAgICAgIGNlcnQtPmlzc3VlciA9IHN0cmR1cCgic2VsZi1zaWduZWQiKTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6YWRkOmlzc3VlciIsICJDQSBpc3N1ZXI6ICVzXG4iLCBjZXJ0LT5pc3N1ZXIpKTsKKyAgICB9CisgICAgCisgICAgaWYgKE5VTEwgPT0gY2VydC0+ZmluZ2VycHJpbnQpIHsKKyAgICAgICAgY2VydC0+aGFzaF90eXBlID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2hhc2hfdHlwZShvY2VydCk7CisgICAgICAgIGNlcnQtPmZpbmdlcnByaW50ID0KKyAgICAgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChvY2VydCwgY2VydC0+aGFzaF90eXBlKTsKKyAgICB9CisgICAgCisgICAgaWYgKE5VTEwgPT0gY2VydC0+Y29tbW9uX25hbWUpIHsKKyAgICAgICAgY2VydC0+Y29tbW9uX25hbWUgPW5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lKG9jZXJ0LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDphZGQ6bmFtZSIsIiVzXG4iLCBjZXJ0LT5jb21tb25fbmFtZSkpOworICAgIH0KKworICAgIHJldHVybiBvY2VydDsKK30KKworRVZQX1BLRVkgKgorbmV0c25tcF9va2V5X2dldChuZXRzbm1wX2tleSAgKmtleSkKK3sKKyAgICBCSU8gICAgICAgICAgICAqa2V5YmlvOworICAgIEVWUF9QS0VZICAgICAgICpva2V5OworICAgIGNoYXIgICAgICAgICAgICBmaWxlW1NOTVBfTUFYUEFUSF07CisKKyAgICBpZiAoTlVMTCA9PSBrZXkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGtleS0+b2tleSkKKyAgICAgICAgcmV0dXJuIGtleS0+b2tleTsKKworICAgIHNucHJpbnRmKGZpbGUsIHNpemVvZihmaWxlKSwiJXMvJXMiLCBrZXktPmluZm8uZGlyLCBrZXktPmluZm8uZmlsZW5hbWUpOworICAgIERFQlVHTVNHVCgoImNlcnQ6a2V5OnJlYWQiLCAiQ2hlY2tpbmcgZmlsZSAlc1xuIiwga2V5LT5pbmZvLmZpbGVuYW1lKSk7CisKKyAgICBrZXliaW8gPSBCSU9fbmV3KEJJT19zX2ZpbGUoKSk7CisgICAgaWYgKE5VTEwgPT0ga2V5YmlvKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBCSU9cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoQklPX3JlYWRfZmlsZW5hbWUoa2V5YmlvLCBmaWxlKSA8PTApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlYWRpbmcgY2VydGlmaWNhdGUgJXMgaW50byBCSU9cbiIsCisgICAgICAgICAgICAgICAgIGtleS0+aW5mby5maWxlbmFtZSk7CisgICAgICAgIEJJT192ZnJlZShrZXliaW8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBva2V5ID0gUEVNX3JlYWRfYmlvX1ByaXZhdGVLZXkoa2V5YmlvLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSBva2V5KQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgcGFyc2luZyBjZXJ0aWZpY2F0ZSBmaWxlICVzXG4iLAorICAgICAgICAgICAgICAgICBrZXktPmluZm8uZmlsZW5hbWUpOworICAgIGVsc2UKKyAgICAgICAga2V5LT5va2V5ID0gb2tleTsKKworICAgIEJJT192ZnJlZShrZXliaW8pOworCisgICAgcmV0dXJuIG9rZXk7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2NlcnQgKgorX2ZpbmRfaXNzdWVyKG5ldHNubXBfY2VydCAqY2VydCkKK3sKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgKm1hdGNoaW5nOworICAgIG5ldHNubXBfY2VydCAgICAgICAqY2FuZGlkYXRlLCAqaXNzdWVyID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgICAgIGk7CisKKyAgICBpZiAoKE5VTEwgPT0gY2VydCkgfHwgKE5VTEwgPT0gY2VydC0+aXNzdWVyKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogZmluZCBtYXRjaGluZyBzdWJqZWN0IG5hbWVzICovCisKKyAgICBtYXRjaGluZyA9IF9jZXJ0X2ZpbmRfc3Vic2V0X3NuKGNlcnQtPmlzc3Vlcik7CisgICAgaWYgKE5VTEwgPT0gbWF0Y2hpbmcpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgLyoqIGNoZWNrIGVhY2ggdG8gc2VlIGlmIGl0J3MgdGhlIGlzc3VlciAqLworICAgIGZvciAoIGk9MDsgKE5VTEwgPT0gaXNzdWVyKSAmJiAoaSA8IG1hdGNoaW5nLT5zaXplKTsgKytpKSB7CisgICAgICAgIC8qKiBtYWtlIHN1cmUgd2UgaGF2ZSBvY2VydCAqLworICAgICAgICBjYW5kaWRhdGUgPSAobmV0c25tcF9jZXJ0KiltYXRjaGluZy0+YXJyYXlbaV07CisgICAgICAgIGlmICgoTlVMTCA9PSBjYW5kaWRhdGUtPm9jZXJ0KSAmJgorICAgICAgICAgICAgKG5ldHNubXBfb2NlcnRfZ2V0KGNhbmRpZGF0ZSkgPT0gTlVMTCkpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAvKiogY29tcGFyZSAqKi8KKyAgICAgICAgaWYgKG5ldHNubXBfb3BlbnNzbF9jZXJ0X2lzc3VlZF9ieShjYW5kaWRhdGUtPm9jZXJ0LCBjZXJ0LT5vY2VydCkpCisgICAgICAgICAgICBpc3N1ZXIgPSBjYW5kaWRhdGU7CisgICAgfSAvKiogY2FuZGlkYXRlIGxvb3AgKi8KKworICAgIGZyZWUobWF0Y2hpbmctPmFycmF5KTsKKyAgICBmcmVlKG1hdGNoaW5nKTsKKworICAgIHJldHVybiBpc3N1ZXI7Cit9CisKKyNkZWZpbmUgQ0VSVF9MT0FEX09LICAgICAgIDAKKyNkZWZpbmUgQ0VSVF9MT0FEX0VSUiAgICAgLTEKKyNkZWZpbmUgQ0VSVF9MT0FEX1BBUlRJQUwgLTIKK2ludAorbmV0c25tcF9jZXJ0X2xvYWRfeDUwOShuZXRzbm1wX2NlcnQgKmNlcnQpCit7CisgICAgaW50IHJjID0gQ0VSVF9MT0FEX09LOworCisgICAgLyoqIGxvYWQgb2NlcnQgKi8KKyAgICBpZiAoKE5VTEwgPT0gY2VydC0+b2NlcnQpICYmIChuZXRzbm1wX29jZXJ0X2dldChjZXJ0KSA9PSBOVUxMKSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmxvYWQ6ZXJyIiwgImNvdWxkbid0IGxvYWQgY2VydCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICByYyA9IENFUlRfTE9BRF9FUlI7CisgICAgfQorCisgICAgLyoqIGxvYWQga2V5ICovCisgICAgaWYgKChOVUxMICE9IGNlcnQtPmtleSkgJiYgKE5VTEwgPT0gY2VydC0+a2V5LT5va2V5KSAmJgorICAgICAgICAobmV0c25tcF9va2V5X2dldChjZXJ0LT5rZXkpID09IE5VTEwpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6bG9hZDplcnIiLCAiY291bGRuJ3QgbG9hZCBrZXkgZm9yIGNlcnQgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICByYyA9IENFUlRfTE9BRF9FUlI7CisgICAgfQorCisgICAgLyoqIG1ha2Ugc3VyZSB3ZSBoYXZlIGNlcnQgY2hhaW4gKi8KKyAgICBmb3IgKDsgY2VydCAmJiBjZXJ0LT5pc3N1ZXI7IGNlcnQgPSBjZXJ0LT5pc3N1ZXJfY2VydCkgeworICAgICAgICAvKiogc2tpcCBzZWxmIHNpZ25lZCAqLworICAgICAgICBpZiAoc3RyY21wKGNlcnQtPmlzc3VlciwgInNlbGYtc2lnbmVkIikgPT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoY2VydC0+aXNzdWVyX2NlcnQgPT0gTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICAvKiogZ2V0IGlzc3VlciBjZXJ0ICovCisgICAgICAgIGlmIChOVUxMID09IGNlcnQtPmlzc3Vlcl9jZXJ0KSB7CisgICAgICAgICAgICBjZXJ0LT5pc3N1ZXJfY2VydCA9ICBfZmluZF9pc3N1ZXIoY2VydCk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0LT5pc3N1ZXJfY2VydCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6bG9hZDp3YXJuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBsb2FkIENBIGNoYWluIGZvciBjZXJ0ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydC0+aW5mby5maWxlbmFtZSkpOworICAgICAgICAgICAgICAgIHJjID0gQ0VSVF9MT0FEX1BBUlRJQUw7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgLyoqIGdldCBpc3N1ZXIgb2NlcnQgKi8KKyAgICAgICAgaWYgKChOVUxMID09IGNlcnQtPmlzc3Vlcl9jZXJ0LT5vY2VydCkgJiYKKyAgICAgICAgICAgIChuZXRzbm1wX29jZXJ0X2dldChjZXJ0LT5pc3N1ZXJfY2VydCkgPT0gTlVMTCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6bG9hZDp3YXJuIiwgImNvdWxkbid0IGxvYWQgY2VydCBjaGFpbiBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgIHJjID0gQ0VSVF9MT0FEX1BBUlRJQUw7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gLyogY2VydCBDQSBmb3IgbG9vcCAqLworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorX2ZpbmRfcGFydG5lcihuZXRzbm1wX2NlcnQgKmNlcnQsIG5ldHNubXBfa2V5ICprZXkpCit7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICptYXRjaGluZyA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICAgICAgICBmaWxlbmFtZVtOQU1FX01BWF0sICpwb3M7CisKKyAgICBpZiAoKGNlcnQgJiYga2V5KSB8fCAoIWNlcnQgJiYgISBrZXkpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICJiYWQgcGFyYW1ldGVycyBzZWFyY2hpbmcgZm9yIHBhcnRuZXJcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmKGtleSkgeworICAgICAgICBpZiAoa2V5LT5jZXJ0KSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAia2V5IGFscmVhZHkgaGFzIHBhcnRuZXJcbiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6cGFydG5lciIsICIlcyBsb29raW5nIGZvciBwYXJ0bmVyIG5lYXIgJXNcbiIsCisgICAgICAgICAgICAgICAgICAga2V5LT5pbmZvLmZpbGVuYW1lLCBrZXktPmluZm8uZGlyKSk7CisgICAgICAgIHNucHJpbnRmKGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpLCAiJXMiLCBrZXktPmluZm8uZmlsZW5hbWUpOworICAgICAgICBwb3MgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOworICAgICAgICBpZiAoTlVMTCA9PSBwb3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICpwb3MgPSAwOworCisgICAgICAgIG1hdGNoaW5nID0gX2NlcnRfZmluZF9zdWJzZXRfZm4oIGZpbGVuYW1lLCBrZXktPmluZm8uZGlyICk7CisgICAgICAgIGlmICghbWF0Y2hpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgxID09IG1hdGNoaW5nLT5zaXplKSB7CisgICAgICAgICAgICBjZXJ0ID0gKG5ldHNubXBfY2VydCopbWF0Y2hpbmctPmFycmF5WzBdOworICAgICAgICAgICAgaWYgKE5VTEwgPT0gY2VydC0+a2V5KSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpwYXJ0bmVyIiwgIiVzIG1hdGNoIGZvdW5kIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgICAgICBrZXktPmNlcnQgPSBjZXJ0OworICAgICAgICAgICAgICAgIGNlcnQtPmtleSA9IGtleTsKKyAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmFsbG93ZWRfdXNlcyB8PSBOU19DRVJUX0lERU5USVRZOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAoY2VydC0+a2V5ICE9IGtleSkKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXMgbWF0Y2hpbmcgY2VydCBhbHJlYWR5IGhhcyBwYXJ0bmVyXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICIlcyBtYXRjaGVzIG11bHRpcGxlIGNlcnRzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBrZXktPmluZm8uZmlsZW5hbWUpKTsKKyAgICB9CisgICAgZWxzZSBpZihjZXJ0KSB7CisgICAgICAgIGlmIChjZXJ0LT5rZXkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICJjZXJ0IGFscmVhZHkgaGFzIHBhcnRuZXJcbiIpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6cGFydG5lciIsICIlcyBsb29raW5nIGZvciBwYXJ0bmVyXG4iLAorICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgc25wcmludGYoZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSksICIlcyIsIGNlcnQtPmluZm8uZmlsZW5hbWUpOworICAgICAgICBwb3MgPSBzdHJyY2hyKGZpbGVuYW1lLCAnLicpOworICAgICAgICBpZiAoTlVMTCA9PSBwb3MpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICpwb3MgPSAwOworCisgICAgICAgIG1hdGNoaW5nID0gX2tleV9maW5kX3N1YnNldChmaWxlbmFtZSk7CisgICAgICAgIGlmICghbWF0Y2hpbmcpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlmICgxID09IG1hdGNoaW5nLT5zaXplKSB7CisgICAgICAgICAgICBrZXkgPSAobmV0c25tcF9rZXkqKW1hdGNoaW5nLT5hcnJheVswXTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGtleS0+Y2VydCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6cGFydG5lciIsICIlcyBmb3VuZCFcbiIsIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgICAgICBrZXktPmNlcnQgPSBjZXJ0OworICAgICAgICAgICAgICAgIGNlcnQtPmtleSA9IGtleTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKGtleS0+Y2VydCAhPSBjZXJ0KQorICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIlcyBtYXRjaGluZyBrZXkgYWxyZWFkeSBoYXMgcGFydG5lclxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OnBhcnRuZXIiLCAiJXMgbWF0Y2hlcyBtdWx0aXBsZSBrZXlzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgfQorICAgIAorICAgIGlmIChtYXRjaGluZykgeworICAgICAgICBmcmVlKG1hdGNoaW5nLT5hcnJheSk7CisgICAgICAgIGZyZWUobWF0Y2hpbmcpOworICAgIH0KK30KKworc3RhdGljIGludAorX2FkZF9jZXJ0ZmlsZShjb25zdCBjaGFyKiBkaXJuYW1lLCBjb25zdCBjaGFyKiBmaWxlbmFtZSwgRklMRSAqaW5kZXgpCit7CisgICAgWDUwOSAgICAgICAgICpvY2VydDsKKyAgICBFVlBfUEtFWSAgICAgKm9rZXk7CisgICAgbmV0c25tcF9jZXJ0ICpjZXJ0ID0gTlVMTDsKKyAgICBuZXRzbm1wX2tleSAgKmtleSA9IE5VTEw7CisgICAgY2hhciAgICAgICAgICBjZXJ0ZmlsZVtTTk1QX01BWFBBVEhdOworICAgIGludCAgICAgICAgICAgdHlwZTsKKworICAgIGlmICgoKGNvbnN0IHZvaWQqKU5VTEwgPT0gZGlybmFtZSkgfHwgKE5VTEwgPT0gZmlsZW5hbWUpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICB0eXBlID0gX3R5cGVfZnJvbV9maWxlbmFtZShmaWxlbmFtZSk7CisgICAgbmV0c25tcF9hc3NlcnQodHlwZSAhPSBOU19DRVJUX1RZUEVfVU5LTk9XTik7CisKKyAgICBzbnByaW50ZihjZXJ0ZmlsZSwgc2l6ZW9mKGNlcnRmaWxlKSwiJXMvJXMiLCBkaXJuYW1lLCBmaWxlbmFtZSk7CisKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZmlsZTphZGQiLCAiQ2hlY2tpbmcgZmlsZTogJXMgKHR5cGUgJWQpXG4iLCBmaWxlbmFtZSwKKyAgICAgICAgICAgICAgIHR5cGUpKTsKKworICAgIGlmIChOU19DRVJUX1RZUEVfS0VZID09IHR5cGUpIHsKKyAgICAgICAga2V5ID0gX25ld19rZXkoZGlybmFtZSwgZmlsZW5hbWUpOworICAgICAgICBpZiAoTlVMTCA9PSBrZXkpCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIG9rZXkgPSBuZXRzbm1wX29rZXlfZ2V0KGtleSk7CisgICAgICAgIGlmIChOVUxMID09IG9rZXkpIHsKKyAgICAgICAgICAgIG5ldHNubXBfa2V5X2ZyZWUoa2V5KTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBrZXktPm9rZXkgPSBva2V5OworICAgICAgICBpZiAoLTEgPT0gQ09OVEFJTkVSX0lOU0VSVChfa2V5cywga2V5KSkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDprZXk6ZmlsZTphZGQ6ZXJyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluc2VydGluZyBrZXkgaW50byBjb250YWluZXJcbiIpKTsKKyAgICAgICAgICAgIG5ldHNubXBfa2V5X2ZyZWUoa2V5KTsKKyAgICAgICAgICAgIGtleSA9IE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGNlcnQgPSBfbmV3X2NlcnQoZGlybmFtZSwgZmlsZW5hbWUsIHR5cGUsIC0xLCBOVUxMLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY2VydCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgb2NlcnQgPSBuZXRzbm1wX29jZXJ0X2dldChjZXJ0KTsKKyAgICAgICAgaWYgKE5VTEwgPT0gb2NlcnQpIHsKKyAgICAgICAgICAgIG5ldHNubXBfY2VydF9mcmVlKGNlcnQpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIGNlcnQtPm9jZXJ0ID0gb2NlcnQ7CisgICAgICAgIGlmICgtMSA9PSBDT05UQUlORVJfSU5TRVJUKF9jZXJ0cywgY2VydCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmlsZTphZGQ6ZXJyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluc2VydGluZyBjZXJ0IGludG8gY29udGFpbmVyXG4iKSk7CisgICAgICAgICAgICBuZXRzbm1wX2NlcnRfZnJlZShjZXJ0KTsKKyAgICAgICAgICAgIGNlcnQgPSBOVUxMOworICAgICAgICB9CisgICAgfQorICAgIGlmICgoTlVMTCA9PSBjZXJ0KSAmJiAoTlVMTCA9PSBrZXkpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmlsZTphZGQ6ZmFpbHVyZSIsICJmb3IgJXNcbiIsIGNlcnRmaWxlKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBpZiAoaW5kZXgpIHsKKyAgICAgICAgLyoqIGZpbGVuYW1lID0gTkFNRV9NQVggPSAyNTUgKi8KKyAgICAgICAgLyoqIGZpbmdlcnByaW50ID0gNjAgKi8KKyAgICAgICAgLyoqIGNvbW1vbiBuYW1lIC8gQ04gID0gNjQgKi8KKyAgICAgICAgaWYgKGNlcnQpCisgICAgICAgICAgICBmcHJpbnRmKGluZGV4LCAiYzolcyAlZCAlZCAlcyAnJXMnICclcydcbiIsIGZpbGVuYW1lLAorICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLnR5cGUsIGNlcnQtPmhhc2hfdHlwZSwgY2VydC0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgIGNlcnQtPmNvbW1vbl9uYW1lLCBjZXJ0LT5zdWJqZWN0KTsKKyAgICAgICAgZWxzZSBpZiAoa2V5KQorICAgICAgICAgICAgZnByaW50ZihpbmRleCwgIms6JXNcbiIsIGZpbGVuYW1lKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX2NlcnRfcmVhZF9pbmRleChjb25zdCBjaGFyICpkaXJuYW1lLCBzdHJ1Y3Qgc3RhdCAqZGlyc3RhdCkKK3sKKyAgICBGSUxFICAgICAgICAgICAqaW5kZXg7CisgICAgY2hhciAgICAgICAgICAgKmlkeG5hbWUsICpwb3M7CisgICAgc3RydWN0IHN0YXQgICAgIGlkeF9zdGF0OworICAgIGNoYXIgICAgICAgICAgICB0bXBzdHJbU05NUF9NQVhQQVRIICsgNV0sIGZpbGVuYW1lW05BTUVfTUFYXTsKKyAgICBjaGFyICAgICAgICAgICAgZmluZ2VycHJpbnRbNjArMV0sIGNvbW1vbl9uYW1lWzY0KzFdLCB0eXBlX3N0clsxNV07CisgICAgY2hhciAgICAgICAgICAgIHN1YmplY3RbU05NUF9NQVhCVUZfU01BTExdLCBoYXNoX3N0clsxNV07CisgICAgaW50ICAgICAgICAgICAgIGNvdW50ID0gMCwgdHlwZSwgaGFzaCwgdmVyc2lvbjsKKyAgICBuZXRzbm1wX2NlcnQgICAgKmNlcnQ7CisgICAgbmV0c25tcF9rZXkgICAgICprZXk7CisgICAgbmV0c25tcF9jb250YWluZXIgKm5ld2VyLCAqZm91bmQ7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRpcm5hbWUpOworCisgICAgaWR4bmFtZSA9IF9jZXJ0aW5kZXhfbG9va3VwKCBkaXJuYW1lICk7CisgICAgaWYgKE5VTEwgPT0gaWR4bmFtZSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OnBhcnNlIiwgIm5vIGluZGV4IGZvciBjZXJ0IGRpcmVjdG9yeVxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBzZWUgaWYgZGlyZWN0b3J5IGhhcyBiZWVuIG1vZGlmaWVkIG1vcmUgcmVjZW50bHkgdGhhbiB0aGUgaW5kZXgKKyAgICAgKi8KKyAgICBpZiAoc3RhdChpZHhuYW1lLCAmaWR4X3N0YXQpICE9IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpwYXJzZSIsICJlcnJvciBnZXR0aW5nIGluZGV4IGZpbGUgc3RhdHNcbiIpKTsKKyAgICAgICAgU05NUF9GUkVFKGlkeG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisjaWYgKGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoY3lnd2luKSkKKyAgICAvKiBGb3IgV2luMzIgcGxhdGZvcm1zLCB0aGUgZGlyZWN0b3J5IGRvZXMgbm90IG1haW50YWluIGEgbGFzdCBtb2RpZmljYXRpb24KKyAgICAgKiBkYXRlIHRoYXQgd2UgY2FuIGNvbXBhcmUgd2l0aCB0aGUgbW9kaWZpY2F0aW9uIGRhdGUgb2YgdGhlIC5pbmRleCBmaWxlLgorICAgICAqLworI2Vsc2UKKyAgICBpZiAoZGlyc3RhdC0+c3RfbXRpbWUgPj0gaWR4X3N0YXQuc3RfbXRpbWUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpwYXJzZSIsICJJbmRleCBvdXRkYXRlZDsgZGlyIG1vZGlmaWVkXG4iKSk7CisgICAgICAgIFNOTVBfRlJFRShpZHhuYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNlbmRpZgorCisgICAgLyoKKyAgICAgKiBkaXIgbXRpbWUgZG9lc24ndCBjaGFuZ2Ugd2hlbiBmaWxlcyBhcmUgdG91Y2hlZCwgc28gd2UgbmVlZCB0byBjaGVjaworICAgICAqIGVhY2ggZmlsZSBhZ2FpbnN0IHRoZSBpbmRleCBpbiBjYXNlIGEgZmlsZSBoYXMgYmVlbiBtb2RpZmllZC4KKyAgICAgKi8KKyAgICBuZXdlciA9CisgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkX3NvbWUoTlVMTCwgZGlybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAobmV0c25tcF9kaXJlY3RvcnlfZmlsdGVyKikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGltZV9maWx0ZXIsKHZvaWQqKSZpZHhfc3RhdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RJUl9OU0ZJTEUgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRElSX05TRklMRV9TVEFUUyk7CisgICAgaWYgKG5ld2VyKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6cGFyc2UiLCAiSW5kZXggb3V0ZGF0ZWQ7IGZpbGVzIG1vZGlmaWVkXG4iKSk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChuZXdlciwgTlVMTCk7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKG5ld2VyKTsKKyAgICAgICAgU05NUF9GUkVFKGlkeG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpwYXJzZSIsICJUaGUgaW5kZXggZm9yICVzIGxvb2tzIGdvb2RcbiIsIGRpcm5hbWUpKTsKKworICAgIGluZGV4ID0gZm9wZW4oaWR4bmFtZSwgInIiKTsKKyAgICBpZiAoTlVMTCA9PSBpbmRleCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY2VydDppbmRleDpwYXJzZSBjYW4ndCBvcGVuIGluZGV4IGZvciAlc1xuIiwKKyAgICAgICAgICAgIGRpcm5hbWUpOworICAgICAgICBTTk1QX0ZSRUUoaWR4bmFtZSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3VuZCA9IF9nZXRfY2VydF9jb250YWluZXIoaWR4bmFtZSk7CisKKyAgICAvKgorICAgICAqIGNoZWNrIGluZGV4IGZvcm1hdCB2ZXJzaW9uCisgICAgICovCisgICAgZmdldHModG1wc3RyLCBzaXplb2YodG1wc3RyKSwgaW5kZXgpOworICAgIHBvcyA9IHN0cnJjaHIodG1wc3RyLCAnICcpOworICAgIGlmIChwb3MpIHsKKyAgICAgICAgKytwb3M7CisgICAgICAgIHZlcnNpb24gPSBhdG9pKHBvcyk7CisgICAgfQorICAgIGlmICgoTlVMTCA9PSBwb3MpIHx8ICh2ZXJzaW9uICE9IENFUlRfSU5ERVhfRk9STUFUKSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmFkZCIsICJtaXNzaW5nIG9yIHdyb25nIGluZGV4IGZvcm1hdCFcbiIpKTsKKyAgICAgICAgZmNsb3NlKGluZGV4KTsKKyAgICAgICAgU05NUF9GUkVFKGlkeG5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHdoaWxlICgxKSB7CisgICAgICAgIGlmIChOVUxMID09IGZnZXRzKHRtcHN0ciwgc2l6ZW9mKHRtcHN0ciksIGluZGV4KSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICgnYycgPT0gdG1wc3RyWzBdKSB7CisgICAgICAgICAgICBwb3MgPSAmdG1wc3RyWzJdOworICAgICAgICAgICAgaWYgKChOVUxMID09IChwb3M9Y29weV9ud29yZChwb3MsIGZpbGVuYW1lLCBzaXplb2YoZmlsZW5hbWUpKSkpIHx8CisgICAgICAgICAgICAgICAgKE5VTEwgPT0gKHBvcz1jb3B5X253b3JkKHBvcywgdHlwZV9zdHIsIHNpemVvZih0eXBlX3N0cikpKSkgfHwKKyAgICAgICAgICAgICAgICAoTlVMTCA9PSAocG9zPWNvcHlfbndvcmQocG9zLCBoYXNoX3N0ciwgc2l6ZW9mKGhhc2hfc3RyKSkpKSB8fAorICAgICAgICAgICAgICAgIChOVUxMID09IChwb3M9Y29weV9ud29yZChwb3MsIGZpbmdlcnByaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZmluZ2VycHJpbnQpKSkpIHx8CisgICAgICAgICAgICAgICAgKE5VTEwgPT0gKHBvcz1jb3B5X253b3JkKHBvcywgY29tbW9uX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGNvbW1vbl9uYW1lKSkpKSB8fAorICAgICAgICAgICAgICAgIChOVUxMICE9IGNvcHlfbndvcmQocG9zLCBzdWJqZWN0LCBzaXplb2Yoc3ViamVjdCkpKSkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJfY2VydF9yZWFkX2luZGV4OiBlcnJvciBwYXJzaW5nIGxpbmU6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgIHRtcHN0cik7CisgICAgICAgICAgICAgICAgY291bnQgPSAtMTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR5cGUgPSBhdG9pKHR5cGVfc3RyKTsKKyAgICAgICAgICAgIGhhc2ggPSBhdG9pKGhhc2hfc3RyKTsKKyAgICAgICAgICAgIGNlcnQgPSAodm9pZCopX25ld19jZXJ0KGRpcm5hbWUsIGZpbGVuYW1lLCB0eXBlLCBoYXNoLCBmaW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW1vbl9uYW1lLCBzdWJqZWN0KTsKKyAgICAgICAgICAgIGlmIChjZXJ0ICYmIDAgPT0gQ09OVEFJTkVSX0lOU0VSVChmb3VuZCwgY2VydCkpCisgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6YWRkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJlcnJvciBpbnNlcnRpbmcgY2VydCBpbnRvIGNvbnRhaW5lclxuIikpOworICAgICAgICAgICAgICAgIG5ldHNubXBfY2VydF9mcmVlKGNlcnQpOworICAgICAgICAgICAgICAgIGNlcnQgPSBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKCdrJyA9PSB0bXBzdHJbMF0pIHsKKyAgICAgICAgICAgIGlmIChOVUxMICE9IGNvcHlfbndvcmQoJnRtcHN0clsyXSwgZmlsZW5hbWUsIHNpemVvZihmaWxlbmFtZSkpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIl9jZXJ0X3JlYWRfaW5kZXg6IGVycm9yIHBhcnNpbmcgbGluZSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgdG1wc3RyKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGtleSA9IF9uZXdfa2V5KGRpcm5hbWUsIGZpbGVuYW1lKTsKKyAgICAgICAgICAgIGlmIChrZXkgJiYgMCA9PSBDT05UQUlORVJfSU5TRVJUKF9rZXlzLCBrZXkpKQorICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmluZGV4OmFkZDprZXkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgImVycm9yIGluc2VydGluZyBrZXkgaW50byBjb250YWluZXJcbiIpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2tleV9mcmVlKGtleSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidW5rbm93biBsaW5lIGluIGNlcnQgaW5kZXggZm9yICVzXG4iLCBkaXJuYW1lKTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfSAvKiB3aGlsZSAqLworICAgIGZjbG9zZShpbmRleCk7CisgICAgU05NUF9GUkVFKGlkeG5hbWUpOworCisgICAgaWYgKGNvdW50ID4gMCkgeworICAgICAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKGZvdW5kKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3IgZm91bmQgY2VydHNcbiIpOworICAgICAgICAgICAgY291bnQgPSAtMTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGNlcnQgPSBJVEVSQVRPUl9GSVJTVChpdHIpOworICAgICAgICAgICAgZm9yKCA7IGNlcnQ7IGNlcnQgPSBJVEVSQVRPUl9ORVhUKGl0cikpCisgICAgICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChfY2VydHMsIGNlcnQpOworICAgICAgICAgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpwYXJzZSIsImFkZGVkICVkIGNlcnRzIGZyb20gaW5kZXhcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIGNvdW50KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGNvdW50IDwgMCkKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKGZvdW5kLCBOVUxMKTsKKyAgICBDT05UQUlORVJfRlJFRShmb3VuZCk7CisKKyAgICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbnQKK19hZGRfY2VydGRpcihjb25zdCBjaGFyICpkaXJuYW1lKQoreworICAgIEZJTEUgICAgICAgICAgICppbmRleDsKKyAgICBjaGFyICAgICAgICAgICAqZmlsZTsKKyAgICBpbnQgICAgICAgICAgICAgY291bnQgPSAwOworICAgIG5ldHNubXBfY29udGFpbmVyICpjZXJ0X2NvbnRhaW5lcjsKKyAgICBuZXRzbm1wX2l0ZXJhdG9yICAqaXQ7CisgICAgc3RydWN0IHN0YXQgICAgIHN0YXRidWY7CisKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGRpcm5hbWUpOworCisgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmRpcjphZGQiLCAiIGNvbmZpZyBkaXI6ICVzXG4iLCBkaXJuYW1lICkpOworCisgICAgaWYgKHN0YXQoZGlybmFtZSwgJnN0YXRidWYpICE9IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmRpcjphZGQiLCAiIGRpciBub3QgcHJlc2VudDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgZGlybmFtZSApKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyNpZmRlZiBTX0lTRElSCisgICAgaWYgKCFTX0lTRElSKHN0YXRidWYuc3RfbW9kZSkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmRpcjphZGQiLCAiIG5vdCBhIGRpcjogJXNcbiIsIGRpcm5hbWUgKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjZW5kaWYKKworICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6ZGlyIiwgIlNjYW5uaW5nIGRpcmVjdG9yeSAlc1xuIiwgZGlybmFtZSkpOworCisgICAgLyoKKyAgICAgKiBsb29rIGZvciBleGlzdGluZyBpbmRleAorICAgICAqLworICAgIGNvdW50ID0gX2NlcnRfcmVhZF9pbmRleChkaXJuYW1lLCAmc3RhdGJ1Zik7CisgICAgaWYgKGNvdW50ID49IDApCisgICAgICAgIHJldHVybiBjb3VudDsKKworICAgIGluZGV4ID0gX2NlcnRpbmRleF9uZXcoIGRpcm5hbWUgKTsKKyAgICBpZiAoTlVMTCA9PSBpbmRleCkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6aW5kZXg6ZGlyIiwKKyAgICAgICAgICAgICAgICAgICAgImVycm9yIG9wZW5pbmcgaW5kZXggZm9yIGNlcnQgZGlyZWN0b3J5XG4iKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJjZXJ0OmluZGV4IiwgImNvdWxkIG5vdCBvcGVuIGNlcnRpZmljYXRlIGluZGV4IGZpbGVcbiIpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGluZGV4IHdhcyBtaXNzaW5nLCBvdXQgb2YgZGF0ZSBvciBiYWQuIHJlc2NhbiBkaXJlY3RvcnkuCisgICAgICovCisgICAgY2VydF9jb250YWluZXIgPQorICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfcmVhZF9zb21lKE5VTEwsIGRpcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfZGlyZWN0b3J5X2ZpbHRlciopCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9jZXJ0X2NlcnRfZmlsdGVyLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRElSX1JFTEFUSVZFX1BBVEggfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRElSX0VNUFRZX09LICk7CisgICAgaWYgKE5VTEwgPT0gY2VydF9jb250YWluZXIpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpkaXIiLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgY29udGFpbmVyIGZvciBjZXJ0IGZpbGVzXG4iKSk7CisgICAgICAgIGdvdG8gZXJyX2luZGV4OworICAgIH0KKworICAgIC8qCisgICAgICogaXRlcmF0ZSB0aHJvdWdoIHRoZSBmb3VuZCBmaWxlcyBhbmQgYWRkIHRoZW0gdG8gaW5kZXgKKyAgICAgKi8KKyAgICBpdCA9IENPTlRBSU5FUl9JVEVSQVRPUihjZXJ0X2NvbnRhaW5lcik7CisgICAgaWYgKE5VTEwgPT0gaXQpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDppbmRleDpkaXIiLAorICAgICAgICAgICAgICAgICAgICAiZXJyb3IgY3JlYXRpbmcgaXRlcmF0b3IgZm9yIGNlcnQgZmlsZXNcbiIpKTsKKyAgICAgICAgZ290byBlcnJfY29udGFpbmVyOworICAgIH0KKworICAgIGZvciAoZmlsZSA9IElURVJBVE9SX0ZJUlNUKGl0KTsgZmlsZTsgZmlsZSA9IElURVJBVE9SX05FWFQoaXQpKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6ZGlyIiwgImFkZGluZyAlcyB0byBpbmRleFxuIiwgZmlsZSkpOworICAgICAgICBpZiAoIDAgPT0gX2FkZF9jZXJ0ZmlsZSggZGlybmFtZSwgZmlsZSwgaW5kZXggKSkKKyAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6aW5kZXg6ZGlyIiwgImVycm9yIGFkZGluZyAlcyB0byBpbmRleFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGZpbGUpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNsZWFuIHVwIGFuZCByZXR1cm4KKyAgICAgKi8KKyAgICBJVEVSQVRPUl9SRUxFQVNFKGl0KTsKKworICBlcnJfY29udGFpbmVyOgorICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKGNlcnRfY29udGFpbmVyKTsKKworICBlcnJfaW5kZXg6CisgICAgaWYgKGluZGV4KQorICAgICAgICBmY2xvc2UoaW5kZXgpOworCisgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgdm9pZAorX2NlcnRfaW5kZXhlc19sb2FkKHZvaWQpCit7CisgICAgY29uc3QgY2hhciAgICAgKmNvbmZwYXRoOworICAgIGNoYXIgICAgICAgICAgICpjb25mcGF0aF9jb3B5LCAqZGlyLCAqc3QgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICBjZXJ0ZGlyW1NOTVBfTUFYUEFUSF07CisgICAgY29uc3QgY2hhciAgICAgKnN1YmRpcnNbXSA9IHsgTlVMTCwgImNhLWNlcnRzIiwgImNlcnRzIiwgInByaXZhdGUiLCBOVUxMIH07CisgICAgaW50ICAgICAgICAgICAgIGkgPSAwOworCisgICAgLyoKKyAgICAgKiBsb2FkIGluZGV4ZXMgZnJvbSBwZXJzaXN0ZW50IGRpcgorICAgICAqLworICAgIF9jZXJ0aW5kZXhlc19sb2FkKCk7CisKKyAgICAvKgorICAgICAqIGR1cGxpY2F0ZSBwYXRoIGJ1aWxkaW5nIGZyb20gcmVhZF9jb25maWdfZmlsZXNfb2ZfdHlwZSgpIGluCisgICAgICogcmVhZF9jb25maWcuYy4gVGhhdCBpcywgdXNlIFNOTVBDT05GUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBpZgorICAgICAqIGl0IGlzIGRlZmluZWQsIG90aGVyd2lzZSB1c2UgY29uZmlndXJhdGlvbiBkaXJlY3RvcnkuCisgICAgICovCisgICAgY29uZnBhdGggPSBuZXRzbm1wX2dldGVudigiU05NUENPTkZQQVRIIik7CisgICAgaWYgKE5VTEwgPT0gY29uZnBhdGgpCisgICAgICAgIGNvbmZwYXRoID0gZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5KCk7CisKKyAgICBzdWJkaXJzWzBdID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NFUlRfRVhUUkFfU1VCRElSKTsKKyAgICBjb25mcGF0aF9jb3B5ID0gc3RyZHVwKGNvbmZwYXRoKTsKKyAgICBmb3IgKCBkaXIgPSBzdHJ0b2tfcihjb25mcGF0aF9jb3B5LCBFTlZfU0VQQVJBVE9SLCAmc3QpOworICAgICAgICAgIGRpcjsgZGlyID0gc3RydG9rX3IoTlVMTCwgRU5WX1NFUEFSQVRPUiwgJnN0KSkgeworCisgICAgICAgIGkgPSAoTlVMTCA9PSBzdWJkaXJzWzBdKSA/IDEgOiAwOworICAgICAgICBmb3IgKCA7IHN1YmRpcnNbaV0gOyArK2kgKSB7CisgICAgICAgICAgICAvKiogY2hlY2sgdGxzIHN1YmRpciAqLworICAgICAgICAgICAgc25wcmludGYoY2VydGRpciwgc2l6ZW9mKGNlcnRkaXIpLCAiJXMvdGxzLyVzIiwgZGlyLCBzdWJkaXJzW2ldKTsKKyAgICAgICAgICAgIF9hZGRfY2VydGRpcihjZXJ0ZGlyKTsKKyAgICAgICAgfSAvKiBmb3Igc3ViZGlycyAqLworICAgIH0gLyogZm9yIGNvbmYgcGF0aCBkaXJzICovCisgICAgU05NUF9GUkVFKGNvbmZwYXRoX2NvcHkpOworfQorCitzdGF0aWMgdm9pZAorX2NlcnRfcHJpbnQobmV0c25tcF9jZXJ0ICpjLCB2b2lkICpjb250ZXh0KQoreworICAgIGlmIChOVUxMID09IGMpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6ZHVtcCIsICJjZXJ0ICVzIGluICVzXG4iLCBjLT5pbmZvLmZpbGVuYW1lLCBjLT5pbmZvLmRpcikpOworICAgIERFQlVHTVNHVCgoImNlcnQ6ZHVtcCIsICIgICB0eXBlICVkIGZsYWdzIDB4JXggKCVzKVxuIiwKKyAgICAgICAgICAgICBjLT5pbmZvLnR5cGUsIGMtPmluZm8uYWxsb3dlZF91c2VzLAorICAgICAgICAgICAgICBfbW9kZV9zdHIoYy0+aW5mby5hbGxvd2VkX3VzZXMpKSk7CisgICAgREVCVUdJRigiOTpjZXJ0OmR1bXAiKSB7CisgICAgICAgIGlmIChOU19DRVJUX1RZUEVfS0VZICE9IGMtPmluZm8udHlwZSkgeworICAgICAgICAgICAgaWYoYy0+c3ViamVjdCkgeworICAgICAgICAgICAgICAgIGlmIChjLT5pbmZvLmFsbG93ZWRfdXNlcyAmIE5TX0NFUlRfQ0EpCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgIENBOiAlc1xuIiwgYy0+c3ViamVjdCkpOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgc3ViamVjdDogJXNcbiIsIGMtPnN1YmplY3QpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmKGMtPmlzc3VlcikKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICBpc3N1ZXI6ICVzXG4iLCBjLT5pc3N1ZXIpKTsKKyAgICAgICAgICAgIGlmKGMtPmZpbmdlcnByaW50KQorICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wIiwgIiAgIGZpbmdlcnByaW50OiAlcyglZCk6JXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzZV9maW5kX2xhYmVsX2luX3NsaXN0KCJjZXJ0X2hhc2hfYWxnIiwgYy0+aGFzaF90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGMtPmhhc2hfdHlwZSwgYy0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgfQorICAgICAgICAvKiBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjZXJ0X3V0aWxzX2R1bXBfbmFtZXMpICovCisgICAgICAgIC8qIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfbmFtZXMoYy0+b2NlcnQpOyAqLworICAgICAgICBuZXRzbm1wX29wZW5zc2xfY2VydF9kdW1wX2V4dGVuc2lvbnMoYy0+b2NlcnQpOworICAgIH0KKyAgICAKK30KKworc3RhdGljIHZvaWQKK19rZXlfcHJpbnQobmV0c25tcF9rZXkgKmssIHZvaWQgKmNvbnRleHQpCit7CisgICAgaWYgKE5VTEwgPT0gaykKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUKCgiY2VydDpkdW1wIiwgImtleSAlcyBpbiAlc1xuIiwgay0+aW5mby5maWxlbmFtZSwgay0+aW5mby5kaXIpKTsKKyAgICBERUJVR01TR1QoKCJjZXJ0OmR1bXAiLCAiICAgdHlwZSAlZCBmbGFncyAweCV4ICglcylcbiIsIGstPmluZm8udHlwZSwKKyAgICAgICAgICAgICAgay0+aW5mby5hbGxvd2VkX3VzZXMsIF9tb2RlX3N0cihrLT5pbmZvLmFsbG93ZWRfdXNlcykpKTsKK30KKwordm9pZAorbmV0c25tcF9jZXJ0X2R1bXBfYWxsKHZvaWQpCit7CisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKF9jZXJ0cywgKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfY2VydF9wcmludCwgTlVMTCk7CisgICAgQ09OVEFJTkVSX0ZPUl9FQUNIKF9rZXlzLCAobmV0c25tcF9jb250YWluZXJfb2JqX2Z1bmMqKV9rZXlfcHJpbnQsIE5VTEwpOworfQorCisjaWZkZWYgQ0VSVF9NQUlOCisvKgorICogZXhwb3J0IEJMRD1+L25ldC1zbm1wL2J1aWxkLyBTUkM9fi9uZXQtc25tcC9zcmMgCisgKiBjYyAtRENFUlRfTUFJTiBgJEJMRC9uZXQtc25tcC1jb25maWcgLS1jZmxhZ3NgIGAkQkxEL25ldC1zbm1wLWNvbmZpZyAtLWJ1aWxkLWluY2x1ZGVzICRCTEQvYCAgJFNSQy9zbm1wbGliL2NlcnRfdXRpbC5jICAgLW8gY2VydF91dGlsIGAkQkxEL25ldC1zbm1wLWNvbmZpZyAtLWJ1aWxkLWxpYi1kaXJzICRCTERgIGAkQkxEL25ldC1zbm1wLWNvbmZpZyAtLWxpYnNgIC1sY3J5cHRvIC1sc3NsCisgKgorICovCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIqKiBhcmd2KQoreworICAgIGludCAgICAgICAgICBjaDsKKyAgICBleHRlcm4gY2hhciAqb3B0YXJnOworCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCAiRDpmSExNeDoiKSkgIT0gRU9GKQorICAgICAgICBzd2l0Y2goY2gpIHsKKyAgICAgICAgICAgIGNhc2UgJ0QnOgorICAgICAgICAgICAgICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2VucyhvcHRhcmcpOworICAgICAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsInVua25vd24gb3B0aW9uICVjXG4iLCBjaCk7CisgICAgICAgIH0KKworICAgIGluaXRfc25tcCgiZHRsc2FwcCIpOworCisgICAgbmV0c25tcF9jZXJ0X2R1bXBfYWxsKCk7CisKKyAgICByZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIENFUlRfTUFJTiAqLworCitzdGF0aWMgbmV0c25tcF9jZXJ0ICpfY2VydF9maW5kX2ZwKGNvbnN0IGNoYXIgKmZpbmdlcnByaW50KTsKKwordm9pZAorbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKGNoYXIgKmZwKQoreworICAgIGNoYXIgKnBvcywgKmRlc3Q9TlVMTDsKKyAgICAKKyAgICBpZighZnApCisgICAgICAgIHJldHVybjsKKworICAgIC8qKiBza2lwIHRvIGZpcnN0IDogKi8KKyAgICBmb3IgKHBvcyA9IGZwOyAqcG9zOyArK3BvcyApIHsKKyAgICAgICAgaWYgKCc6JyA9PSAqcG9zKSB7CisgICAgICAgICAgICBkZXN0ID0gcG9zOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgKnBvcyA9IGlzYWxwaGEoMHhGRiAmICpwb3MpID8gdG9sb3dlcigweEZGICYgKnBvcykgOiAqcG9zOworICAgIH0KKyAgICBpZiAoISpwb3MpCisgICAgICAgIHJldHVybjsKKworICAgIC8qKiBjb3B5LCBza2lwcGluZyBhbnkgJzonICovCisgICAgZm9yICgrK3BvczsgKnBvczsgKytwb3MpIHsKKyAgICAgICAgaWYgKCc6JyA9PSAqcG9zKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICpkZXN0KysgPSBpc2FscGhhKDB4RkYgJiAqcG9zKSA/IHRvbG93ZXIoMHhGRiAmICpwb3MpIDogKnBvczsKKyAgICB9CisgICAgKmRlc3QgPSAqcG9zOyAvKiBudWwgdGVybWluYXRpb24gKi8KK30KKworbmV0c25tcF9jZXJ0ICoKK25ldHNubXBfY2VydF9maW5kKGludCB3aGF0LCBpbnQgd2hlcmUsIHZvaWQgKmhpbnQpCit7CisgICAgbmV0c25tcF9jZXJ0ICpyZXN1bHQgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAqZnAsICpoaW50X3N0cjsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDpwYXJhbXMiLCAibG9va2luZyBmb3IgJXMoJWQpIGluICVzKDB4JXgpLCBoaW50ICVsdVxuIiwKKyAgICAgICAgICAgICAgIF9tb2RlX3N0cih3aGF0KSwgd2hhdCwgX3doZXJlX3N0cih3aGVyZSksIHdoZXJlLCAodV9sb25nKWhpbnQpKTsKKworICAgIGlmIChOU19DRVJUS0VZX0RFRkFVTFQgPT0gd2hlcmUpIHsKKyAgICAgICAgICAgIAorICAgICAgICBzd2l0Y2ggKHdoYXQpIHsKKyAgICAgICAgICAgIGNhc2UgTlNfQ0VSVF9JREVOVElUWTogLyogd2FudCBteSBJRCAqLworICAgICAgICAgICAgICAgIGZwID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RMU19MT0NBTF9DRVJUKTsKKyAgICAgICAgICAgICAgICAvKiogdGVtcCBiYWNrd2FyZHMgY29tcGFiaWxpdHk7IHJlbW92ZSBpbiA1LjcgKi8KKyAgICAgICAgICAgICAgICBpZiAoIWZwKSB7CisgICAgICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgdG1wOworICAgICAgICAgICAgICAgICAgICB0bXAgPSAocHRyZGlmZl90KWhpbnQ7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDpwYXJhbXMiLCAiIGhpbnQgPSAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bXAgPyAic2VydmVyIiA6ICJjbGllbnQiKSk7CisgICAgICAgICAgICAgICAgICAgIGZwID0KKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIHRtcCA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9TRVJWRVJfUFVCIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X0NMSUVOVF9QVUIgKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKCFmcCkgeworICAgICAgICAgICAgICAgICAgICAvKiBBcyBhIHNwZWNpYWwgY2FzZSwgdXNlIHRoZSBhcHBsaWNhdGlvbiB0eXBlIHRvCisgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZSBhIGZpbGUgbmFtZSB0byBwdWxsIHRoZSBkZWZhdWx0IGlkZW50aXR5CisgICAgICAgICAgICAgICAgICAgICAgIGZyb20uICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2NlcnRfZmluZCh3aGF0LCBOU19DRVJUS0VZX0ZJTEUsIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE5TX0NFUlRfUkVNT1RFX1BFRVI6CisgICAgICAgICAgICAgICAgZnAgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RMU19QRUVSX0NFUlQpOworICAgICAgICAgICAgICAgIC8qKiB0ZW1wIGJhY2t3YXJkcyBjb21wYWJpbGl0eTsgcmVtb3ZlIGluIDUuNyAqLworICAgICAgICAgICAgICAgIGlmICghZnApCisgICAgICAgICAgICAgICAgICAgIGZwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfWDUwOV9TRVJWRVJfUFVCKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgREVCVUdNU0dUKCgiY2VydDpmaW5kOmVyciIsICJ1bmhhbmRsZWQgdHlwZSAlZCBmb3IgJXMoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgd2hhdCwgX3doZXJlX3N0cih3aGVyZSksIHdoZXJlKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZwKQorICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfY2VydF9maW5kKHdoYXQsIE5TX0NFUlRLRVlfTVVMVElQTEUsIGZwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfSAvKiB3aGVyZSA9IGRzIHN0b3JlICovCisgICAgZWxzZSBpZiAoTlNfQ0VSVEtFWV9NVUxUSVBMRSA9PSB3aGVyZSkgeworICAgICAgICAvKiB0cmllcyBtdWx0aXBsZSBzb3VyY2VzIG9mIGNlcnRpZmljYXRlcyBiYXNlZCBvbiBhc2NpaSBsb29rdXAga2V5cyAqLworCisgICAgICAgIC8qIFRyeSBhIGZpbmdlcnByaW50IG1hdGNoIGZpcnN0LCB3aGljaCBzaG91bGQgYWx3YXlzIGJlIGRvbmUgZmlyc3QgKi8KKyAgICAgICAgLyogKHRvIGF2b2lkIHBlb3BsZSBuYW1pbmcgZmlsZW5hbWVzIHdpdGggY29uZmxpY3RpbmcgRlBzKSAqLworICAgICAgICByZXN1bHQgPSBuZXRzbm1wX2NlcnRfZmluZCh3aGF0LCBOU19DRVJUS0VZX0ZJTkdFUlBSSU5ULCBoaW50KTsKKyAgICAgICAgaWYgKCFyZXN1bHQpIHsKKyAgICAgICAgICAgIC8qIFRoZW4gdHJ5IGEgZmlsZSBuYW1lIGxvb2t1cCAqLworICAgICAgICAgICAgcmVzdWx0ID0gbmV0c25tcF9jZXJ0X2ZpbmQod2hhdCwgTlNfQ0VSVEtFWV9GSUxFLCBoaW50KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChOU19DRVJUS0VZX0ZJTkdFUlBSSU5UID09IHdoZXJlKSB7CisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDpwYXJhbXMiLCAiIGhpbnQgPSAlc1xuIiwgKGNoYXIgKiloaW50KSk7CisgICAgICAgIHJlc3VsdCA9IF9jZXJ0X2ZpbmRfZnAoKGNoYXIgKiloaW50KTsKKyAgICB9CisgICAgZWxzZSBpZiAoTlNfQ0VSVEtFWV9UQVJHRVRfUEFSQU0gPT0gd2hlcmUpIHsKKyAgICAgICAgaWYgKHdoYXQgIT0gTlNfQ0VSVF9JREVOVElUWSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm9ubHkgaWRlbnRpdHkgaXMgdmFsaWQgZm9yIHRhcmdldCBwYXJhbXNcbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyoqIGhpbnQgPT0gdGFyZ2V0IG1pYiBkYXRhICovCisgICAgICAgIGhpbnRfc3RyID0gKGNoYXIgKiloaW50OworICAgICAgICBmcCA9IF9maW5kX3Rsc3RtUGFyYW1zX2ZpbmdlcnByaW50KGhpbnRfc3RyKTsKKyAgICAgICAgaWYgKE5VTEwgIT0gZnApCisgICAgICAgICAgICByZXN1bHQgPSBfY2VydF9maW5kX2ZwKGZwKTsKKworICAgIH0KKyAgICBlbHNlIGlmIChOU19DRVJUS0VZX1RBUkdFVF9BRERSID09IHdoZXJlKSB7CisgICAgICAgIAorICAgICAgICAvKiogaGludCA9PSB0YXJnZXQgbWliIGRhdGEgKi8KKyAgICAgICAgaWYgKHdoYXQgIT0gTlNfQ0VSVF9SRU1PVEVfUEVFUikgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm9ubHkgcGVlciBpcyB2YWxpZCBmb3IgdGFyZ2V0IGFkZHJcbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgLyoqIGhpbnQgPT0gdGFyZ2V0IG1pYiBkYXRhICovCisgICAgICAgIGhpbnRfc3RyID0gKGNoYXIgKiloaW50OworICAgICAgICBmcCA9IF9maW5kX3Rsc3RtQWRkcl9maW5nZXJwcmludChoaW50X3N0cik7CisgICAgICAgIGlmIChOVUxMICE9IGZwKQorICAgICAgICAgICAgcmVzdWx0ID0gX2NlcnRfZmluZF9mcChmcCk7CisKKyAgICB9CisgICAgZWxzZSBpZiAoTlNfQ0VSVEtFWV9GSUxFID09IHdoZXJlKSB7CisgICAgICAgIC8qKiBoaW50ID09IGZpbGVuYW1lICovCisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAqZmlsZW5hbWUgPSAoY2hhciopaGludDsKKyAgICAgICAgbmV0c25tcF92b2lkX2FycmF5ICptYXRjaGluZzsKKworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6cGFyYW1zIiwgIiBoaW50ID0gJXNcbiIsIChjaGFyICopaGludCkpOworICAgICAgICBtYXRjaGluZyA9IF9jZXJ0X2ZpbmRfc3Vic2V0X2ZuKCBmaWxlbmFtZSwgTlVMTCApOworICAgICAgICBpZiAoIW1hdGNoaW5nKQorICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGlmICgxID09IG1hdGNoaW5nLT5zaXplKQorICAgICAgICAgICAgcmVzdWx0ID0gKG5ldHNubXBfY2VydCopbWF0Y2hpbmctPmFycmF5WzBdOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDplcnIiLCAiJXMgbWF0Y2hlcyBtdWx0aXBsZSBjZXJ0c1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgZmlsZW5hbWUpKTsKKyAgICAgICAgICAgIHJlc3VsdCA9IE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgZnJlZShtYXRjaGluZy0+YXJyYXkpOworICAgICAgICBmcmVlKG1hdGNoaW5nKTsKKyAgICB9IC8qIHdoZXJlID0gTlNfQ0VSVEtFWV9GSUxFICovCisgICAgZWxzZSB7IC8qIHVua25vd24gbG9jYXRpb24gKi8KKyAgICAgICAgCisgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6ZmluZDplcnIiLCAidW5oYW5kbGVkIGxvY2F0aW9uICVkIGZvciAlZFxuIiwgd2hlcmUsCisgICAgICAgICAgICAgICAgICAgd2hhdCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgaWYgKE5VTEwgPT0gcmVzdWx0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qKiBtYWtlIHN1cmUgcmVzdWx0IGZvdW5kIGNhbiBiZSB1c2VkIGZvciBzcGVjaWZpZWQgdHlwZSAqLworICAgIGlmICghKHJlc3VsdC0+aW5mby5hbGxvd2VkX3VzZXMgJiB3aGF0KSkgeworICAgICAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6ZXJyIiwKKyAgICAgICAgICAgICAgICAgICAiY2VydCAlcyAvICVzIG5vdCBhbGxvd2VkIGZvciAlcyglZCkgKHVzZXM9JXMgKCVkKSlcbiIsCisgICAgICAgICAgICAgICAgICAgcmVzdWx0LT5pbmZvLmZpbGVuYW1lLCByZXN1bHQtPmZpbmdlcnByaW50LCBfbW9kZV9zdHIod2hhdCksCisgICAgICAgICAgICAgICAgICAgd2hhdCAsIF9tb2RlX3N0cihyZXN1bHQtPmluZm8uYWxsb3dlZF91c2VzKSwKKyAgICAgICAgICAgICAgICAgICByZXN1bHQtPmluZm8uYWxsb3dlZF91c2VzKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAKKyAgICAvKiogbWFrZSBzdXJlIHdlIGhhdmUgdGhlIGNlcnQgZGF0YSAqLworICAgIGlmIChuZXRzbm1wX2NlcnRfbG9hZF94NTA5KHJlc3VsdCkgPT0gQ0VSVF9MT0FEX0VSUikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OmZpbmQ6Zm91bmQiLAorICAgICAgICAgICAgICAgInVzaW5nIGNlcnQgJXMgLyAlcyBmb3IgJXMoJWQpICh1c2VzPSVzICglZCkpXG4iLAorICAgICAgICAgICAgICAgcmVzdWx0LT5pbmZvLmZpbGVuYW1lLCByZXN1bHQtPmZpbmdlcnByaW50LCBfbW9kZV9zdHIod2hhdCksCisgICAgICAgICAgICAgICB3aGF0ICwgX21vZGVfc3RyKHJlc3VsdC0+aW5mby5hbGxvd2VkX3VzZXMpLAorICAgICAgICAgICAgICAgcmVzdWx0LT5pbmZvLmFsbG93ZWRfdXNlcykpOworICAgICAgICAgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfRklOR0VSUFJJTlRTCitpbnQKK25ldHNubXBfY2VydF9jaGVja192Yl9maW5nZXJwcmludChjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcikKK3sKKyAgICBpZiAoIXZhcikKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKworICAgIGlmICgwID09IHZhci0+dmFsX2xlbikgLyogZW1wdHkgYWxsb3dlZCBpbiBzb21lIGNhc2VzICovCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOworCisgICAgaWYgKCEgKDB4MDEgJiB2YXItPnZhbF9sZW4pKSB7IC8qIG9kZCBsZW4gKi8KKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDp2YXJiaW5kOmZpbmdlcnByaW50IiwKKyAgICAgICAgICAgICAgICAgICAiZXhwZWN0aW5nIG9kZCBsZW5ndGggZm9yIGZpbmdlcnByaW50XG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9XUk9OR0xFTkdUSDsKKyAgICB9CisKKyAgICBpZiAodmFyLT52YWwuc3RyaW5nWzBdID4gTlNfSEFTSF9NQVgpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDp2YXJiaW5kOmZpbmdlcnByaW50IiwgImhhc2h0eXBlICVkID4gbWF4ICVkXG4iLAorICAgICAgICAgICAgICAgICAgIHZhci0+dmFsLnN0cmluZ1swXSwgTlNfSEFTSF9NQVgpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX1dST05HVkFMVUU7CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Cit9CisKKy8qKgorICogYnJlYWsgYSBTbm1wVExTRmluZ2VycHJpbnQgaW50byBhbiBpbnRlZ2VyIGhhc2ggdHlwZSArIGhleCBzdHJpbmcKKyAqCisgKiBAcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyA6IG9uIHN1Y2Nlc3MKKyAqIEByZXR1cm4gU05NUEVSUl9HRU5FUlIgIDogb24gZmFpbHVyZQorICovCitpbnQKK25ldHNubXBfdGxzX2ZpbmdlcnByaW50X3BhcnNlKGNvbnN0IHVfY2hhciAqYmluYXJ5X2ZwLCBpbnQgZnBfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKmZwX3N0cl9wdHIsIHVfaW50ICpmcF9zdHJfbGVuLCBpbnQgcmVhbGxvYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqaGFzaF90eXBlX3B0cikKK3sKKyAgICBpbnQgICAgIG5lZWRlZDsKKyAgICBzaXplX3QgIGZwX3N0cl9zaXplOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGhhc2hfdHlwZV9wdHIsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGZwX3N0cl9wdHIsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGZwX3N0cl9sZW4sIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICAvKgorICAgICAqIG91dHB1dCBzdHJpbmcgaXMgYmluYXJ5IGZwIGxlbmd0aCAobWludXMgMSBmb3IgaW5pdGlhbCBoYXNoIHR5cGUgCisgICAgICogY2hhcikgKiAyIGZvciBiaW4gdG8gaGV4IGNvbnZlcnNpb24sICsgMSBmb3IgbnVsbCB0ZXJtaW5hdGlvbi4KKyAgICAgKi8KKyAgICBuZWVkZWQgPSAoKGZwX2xlbiAtIDEpICogMikgKyAxOworICAgIGlmICgqZnBfc3RyX2xlbiA8IG5lZWRlZCkgeworICAgICAgICBERUJVR01TR1QoKCJ0bHM6ZnA6cGFyc2UiLCAibmVlZCAlZCBieXRlcyBmb3Igb3V0cHV0XG4iLCBuZWVkZWQgKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIG1ha2Ugc3VyZSBoYXNoIHR5cGUgaXMgaW4gdmFsaWQgcmFuZ2UKKyAgICAgKi8KKyAgICBpZiAoKDAgPT0gYmluYXJ5X2ZwWzBdKSB8fCAoYmluYXJ5X2ZwWzBdID4gTlNfSEFTSF9NQVgpKSB7CisgICAgICAgIERFQlVHTVNHVCgoInRsczpmcDpwYXJzZSIsICJpbnZhbGlkIGhhc2ggdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBiaW5hcnlfZnBbMF0pKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogbmV0c25tcF9iaW5hcnlfdG9faGV4IGFsbG9jYXRlIHNwYWNlIGZvciBzdHJpbmcsIGlmIG5lZWRlZAorICAgICAqLworICAgIGZwX3N0cl9zaXplID0gKmZwX3N0cl9sZW47CisgICAgKmhhc2hfdHlwZV9wdHIgPSBiaW5hcnlfZnBbMF07CisgICAgbmV0c25tcF9iaW5hcnlfdG9faGV4KCh1X2NoYXIqKilmcF9zdHJfcHRyLCAmZnBfc3RyX3NpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHJlYWxsb2MsICZiaW5hcnlfZnBbMV0sIGZwX2xlbiAtIDEpOworICAgICpmcF9zdHJfbGVuID0gZnBfc3RyX3NpemU7CisgICAgaWYgKDAgPT0gKmZwX3N0cl9sZW4pCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX0ZJTkdFUlBSSU5UUyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTX0ZJTkdFUlBSSU5UX0JVSUxECisvKioKKyAqIGNvbWJpbmUgYSBoYXNoIHR5cGUgYW5kIGhleCBmaW5nZXJwcmludCBpbnRvIGEgU25tcFRMU0ZpbmdlcnByaW50CisgKgorICogT24gZW50cnksIHRsc19mcF9sZW4gc2hvdWxkIHBvaW50IHRvIHRoZSBzaXplIG9mIHRoZSB0bHNfZnAgYnVmZmVyLgorICogT24gYSBzdWNjZXNzZnVsIGV4aXQsIHRsc19mcF9sZW4gd2lsbCBjb250YWluIHRoZSBsZW5ndGggb2YgdGhlCisgKiBmaW5nZXJwcmludCBidWZmZXIuCisgKi8KK2ludAorbmV0c25tcF90bHNfZmluZ2VycHJpbnRfYnVpbGQoaW50IGhhc2hfdHlwZSwgY29uc3QgY2hhciAqaGV4X2ZwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKip0bHNfZnAsIHNpemVfdCAqdGxzX2ZwX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJlYWxsb2MpCit7CisgICAgaW50ICAgICBoZXhfZnBfbGVuLCByYzsKKyAgICBzaXplX3QgIHRsc19mcF9zaXplOworICAgIHNpemVfdCAgb2Zmc2V0OworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGhleF9mcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggdGxzX2ZwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCB0bHNfZnBfbGVuLCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgaGV4X2ZwX2xlbiA9IHN0cmxlbihoZXhfZnApOworICAgIGlmICgwID09IGhleF9mcF9sZW4pIHsKKyAgICAgICAgKnRsc19mcF9sZW4gPSAwOworICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgIH0KKworICAgIGlmICgoaGFzaF90eXBlIDw9IE5TX0hBU0hfTk9ORSkgfHwgKGhhc2hfdHlwZSA+IE5TX0hBU0hfTUFYKSkgeworICAgICAgICBERUJVR01TR1QoKCJ0bHM6ZnA6YnVpbGQiLCAiaW52YWxpZCBoYXNoIHR5cGUgJWRcbiIsIGhhc2hfdHlwZSApKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogY29udmVydCB0byBiaW5hcnkKKyAgICAgKi8KKyAgICBvZmZzZXQgPSAxOworICAgIHJjID0gbmV0c25tcF9oZXhfdG9fYmluYXJ5KHRsc19mcCwgJnRsc19mcF9zaXplLCAmb2Zmc2V0LCByZWFsbG9jLCBoZXhfZnAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjoiKTsKKyAgICAqdGxzX2ZwX2xlbiA9IHRsc19mcF9zaXplOworICAgIGlmIChyYyAhPSAxKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgKnRsc19mcF9sZW4gPSBvZmZzZXQ7CisgICAgKCp0bHNfZnApWzBdID0gaGFzaF90eXBlOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNfRklOR0VSUFJJTlRfQlVJTEQgKi8KKworLyoqCisgKiBUcnVzdHMgYSBnaXZlbiBjZXJ0aWZpY2F0ZSBmb3IgdXNlIGluIFRMUyB0cmFuc2xhdGlvbnMuCisgKgorICogQHBhcmFtIGN0eCBUaGUgU1NMIGNvbnRleHQgdG8gdHJ1c3QgdGhlIGNlcnRpZmljYXRlIGluCisgKiBAcGFyYW0gdGhpc2NlcnQgVGhlIG5ldHNubXBfY2VydCBjZXJ0aWZpY2F0ZSB0byB0cnVzdAorICoKKyAqIEByZXR1cm4gU05NUEVSUl9TVUNDRVNTIDogb24gc3VjY2VzcworICogQHJldHVybiBTTk1QRVJSX0dFTkVSUiAgOiBvbiBmYWlsdXJlCisgKi8KK2ludAorbmV0c25tcF9jZXJ0X3RydXN0KFNTTF9DVFggKmN0eCwgbmV0c25tcF9jZXJ0ICp0aGlzY2VydCkKK3sKKyAgICBYNTA5X1NUT1JFICAgICAqY2VydHN0b3JlOworICAgIFg1MDkgICAgICAgICAgICpjZXJ0OworICAgIGNoYXIgICAgICAgICAgICpmaW5nZXJwcmludDsKKworICAgIC8qIGVuc3VyZSBhbGwgbmVlZGVkIHBpZWNlcyBhcmUgcHJlc2VudCAqLworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihOVUxMICE9IHRoaXNjZXJ0LCAiTlVMTCBjZXJ0aWZpY2F0ZSBwYXNzZWQgaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKE5VTEwgIT0gdGhpc2NlcnQtPmluZm8uZGlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTlVMTCBjZXJ0aWZpY2F0ZSBkaXJlY3RvcnkgbmFtZSBwYXNzZWQgaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfbXNncmV0dXJuKE5VTEwgIT0gdGhpc2NlcnQtPmluZm8uZmlsZW5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJOVUxMIGNlcnRpZmljYXRlIGZpbGVuYW1lIG5hbWUgcGFzc2VkIGluIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyogZ2V0IHRoZSB0cnVzdGVkIGNlcnRpZmljYXRlIHN0b3JlIGFuZCB0aGUgY2VydGlmaWNhdGUgdG8gbG9hZCBpbnRvIGl0ICovCisgICAgY2VydHN0b3JlID0gU1NMX0NUWF9nZXRfY2VydF9zdG9yZShjdHgpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihOVUxMICE9IGNlcnRzdG9yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBnZXQgY2VydGlmaWNhdGUgdHJ1c3Qgc3RvcmUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisgICAgY2VydCA9IG5ldHNubXBfb2NlcnRfZ2V0KHRoaXNjZXJ0KTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9tc2dyZXR1cm4oTlVMTCAhPSBjZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIGdldCBjZXJ0aWZpY2F0ZSBmcm9tIG5ldHNubXBfY2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qIFB1dCB0aGUgY2VydGlmaWNhdGUgaW50byB0aGUgc3RvcmUgKi8KKyAgICBmaW5nZXJwcmludCA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChjZXJ0LCAtMSk7CisgICAgREVCVUdNU0dUTCgoImNlcnQ6dHJ1c3QiLAorICAgICAgICAgICAgICAgICJwdXR0aW5nIHRydXN0ZWQgY2VydCAlcCA9ICVzIGluIGNlcnRzdG9yZSAlcFxuIiwgY2VydCwKKyAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwgY2VydHN0b3JlKSk7CisgICAgU05NUF9GUkVFKGZpbmdlcnByaW50KTsKKyAgICBYNTA5X1NUT1JFX2FkZF9jZXJ0KGNlcnRzdG9yZSwgY2VydCk7CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKioKKyAqIFRydXN0cyBhIGdpdmVuIGNlcnRpZmljYXRlJ3Mgcm9vdCBDQSBmb3IgdXNlIGluIFRMUyB0cmFuc2xhdGlvbnMuCisgKiBJZiBubyBpc3N1ZXIgaXMgZm91bmQgdGhlIGV4aXN0aW5nIGNlcnRpZmljYXRlIHdpbGwgYmUgdHJ1c3RlZCBpbnN0ZWFkLgorICoKKyAqIEBwYXJhbSBjdHggVGhlIFNTTCBjb250ZXh0IHRvIHRydXN0IHRoZSBjZXJ0aWZpY2F0ZSBpbgorICogQHBhcmFtIHRoaXNjZXJ0IFRoZSBuZXRzbm1wX2NlcnQgY2VydGlmaWNhdGUgCisgKgorICogQHJldHVybiBTTk1QRVJSX1NVQ0NFU1MgOiBvbiBzdWNjZXNzCisgKiBAcmV0dXJuIFNOTVBFUlJfR0VORVJSICA6IG9uIGZhaWx1cmUKKyAqLworaW50CituZXRzbm1wX2NlcnRfdHJ1c3RfY2EoU1NMX0NUWCAqY3R4LCBuZXRzbm1wX2NlcnQgKnRoaXNjZXJ0KQoreworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihOVUxMICE9IHRoaXNjZXJ0LCAiTlVMTCBjZXJ0aWZpY2F0ZSBwYXNzZWQgaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QRVJSX0dFTkVSUik7CisKKyAgICAvKiBmaW5kIHRoZSByb290IENBIGNlcnRpZmljYXRlIGluIHRoZSBjaGFpbiAqLworICAgIERFQlVHTVNHVEwoKCJjZXJ0OnRydXN0X2NhIiwgImNoZWNraW5nIHJvb3RzIGZvciAlcCBcbiIsIHRoaXNjZXJ0KSk7CisgICAgd2hpbGUgKHRoaXNjZXJ0LT5pc3N1ZXJfY2VydCkgeworICAgICAgICB0aGlzY2VydCA9IHRoaXNjZXJ0LT5pc3N1ZXJfY2VydDsKKyAgICAgICAgREVCVUdNU0dUTCgoImNlcnQ6dHJ1c3RfY2EiLCAiICB1cCBvbmUgdG8gJXBcbiIsIHRoaXNjZXJ0KSk7CisgICAgfQorCisgICAgLyogQWRkIHRoZSBmb3VuZCB0b3AgbGV2ZXIgY2VydGlmaWNhdGUgdG8gdGhlIHN0b3JlICovCisgICAgcmV0dXJuIG5ldHNubXBfY2VydF90cnVzdChjdHgsIHRoaXNjZXJ0KTsKK30KKworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9jZXJ0X2dldF90cnVzdGxpc3Qodm9pZCkKK3sKKyAgICBpZiAoIV90cnVzdGVkX2NlcnRzKQorICAgICAgICBfc2V0dXBfdHJ1c3RlZF9jZXJ0cygpOworICAgIHJldHVybiBfdHJ1c3RlZF9jZXJ0czsKK30KKworc3RhdGljIHZvaWQKK19wYXJzZV90cnVzdGNlcnQoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpCit7CisgICAgaWYgKCFfdHJ1c3RlZF9jZXJ0cykKKyAgICAgICAgX3NldHVwX3RydXN0ZWRfY2VydHMoKTsKKworICAgIGlmICghX3RydXN0ZWRfY2VydHMpCisgICAgICAgIHJldHVybjsKKworICAgIENPTlRBSU5FUl9JTlNFUlQoX3RydXN0ZWRfY2VydHMsIHN0cmR1cChsaW5lKSk7Cit9CisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1vZGUgdGV4dCBmdW5jdGlvbnMKKyAqCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICpfbW9kZV9zdHIodV9jaGFyIG1vZGUpCit7CisgICAgcmV0dXJuIF9tb2Rlc1ttb2RlXTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKl93aGVyZV9zdHIodV9pbnQgd2hhdCkKK3sKKyAgICBzd2l0Y2ggKHdoYXQpIHsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX0RFRkFVTFQ6IHJldHVybiAiREVGQVVMVCI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9GSUxFOiByZXR1cm4gIkZJTEUiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfRklOR0VSUFJJTlQ6IHJldHVybiAiRklOR0VSUFJJTlQiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfTVVMVElQTEU6IHJldHVybiAiTVVMVElQTEUiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfQ0E6IHJldHVybiAiQ0EiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfU0FOX1JGQzgyMjogcmV0dXJuICJTQU5fUkZDODIyIjsKKyAgICAgICAgY2FzZSBOU19DRVJUS0VZX1NBTl9ETlM6IHJldHVybiAiU0FOX0ROUyI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9TQU5fSVBBRERSOiByZXR1cm4gIlNBTl9JUEFERFIiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfQ09NTU9OX05BTUU6IHJldHVybiAiQ09NTU9OX05BTUUiOworICAgICAgICBjYXNlIE5TX0NFUlRLRVlfVEFSR0VUX1BBUkFNOiByZXR1cm4gIlRBUkdFVF9QQVJBTSI7CisgICAgICAgIGNhc2UgTlNfQ0VSVEtFWV9UQVJHRVRfQUREUjogcmV0dXJuICJUQVJHRVRfQUREUiI7CisgICAgfQorCisgICAgcmV0dXJuICJVTktOT1dOIjsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogZmluZCBmdW5jdGlvbnMKKyAqCisgKi8KK3N0YXRpYyBuZXRzbm1wX2NlcnQgKgorX2NlcnRfZmluZF9mcChjb25zdCBjaGFyICpmaW5nZXJwcmludCkKK3sKKyAgICBuZXRzbm1wX2NlcnQgY2VydCwgKnJlc3VsdCA9IE5VTEw7CisgICAgY2hhciAgICAgICAgIGZwW0VWUF9NQVhfTURfU0laRV07CisKKyAgICBpZiAoTlVMTCA9PSBmaW5nZXJwcmludCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzdHJsY3B5KGZwLCBmaW5nZXJwcmludCwgc2l6ZW9mKGZwKSk7CisgICAgbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKGZwKTsKKworICAgIC8qKiBjbGVhciBzZWFyY2gga2V5ICovCisgICAgbWVtc2V0KCZjZXJ0LCAweDAwLCBzaXplb2YoY2VydCkpOworCisgICAgY2VydC5maW5nZXJwcmludCA9IGZwOworCisgICAgcmVzdWx0ID0gQ09OVEFJTkVSX0ZJTkQoX2NlcnRzLCZjZXJ0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogcmVkdWNlIHN1YnNldCBieSBlbGltaW5hdGluZyBhbnkgZmlsZW5hbWVzIHRoYXQgYXJlIGxvbmdlciB0aGFuCisgKiB0aGUgc3BlY2lmaWVkIGZpbGUgbmFtZS4gZS5nLiAnc25tcCcgd291bGQgbWF0Y2ggJ3NubXAua2V5JyBhbmQKKyAqICdzbm1wZC5rZXknLiBXZSBvbmx5IHdhbnQgJ3NubXAuWCcsIHdoZXJlIFggaXMgYSB2YWxpZCBleHRlbnNpb24uCisgKi8KK3N0YXRpYyB2b2lkCitfcmVkdWNlX3N1YnNldChuZXRzbm1wX3ZvaWRfYXJyYXkgKm1hdGNoaW5nLCBjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICBuZXRzbm1wX2NlcnRfY29tbW9uICpjYzsKKyAgICBpbnQgaSA9IDAsIGosIG5ld3NpemUsIHBvczsKKworICAgIGlmICgoTlVMTCA9PSBtYXRjaGluZykgfHwgKE5VTEwgPT0gZmlsZW5hbWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBwb3MgPSBzdHJsZW4oZmlsZW5hbWUpOworICAgIG5ld3NpemUgPSBtYXRjaGluZy0+c2l6ZTsKKworICAgIGZvciggOyBpIDwgbWF0Y2hpbmctPnNpemU7ICkgeworICAgICAgICAvKgorICAgICAgICAgKiBpZiB3ZSd2ZSBzaGlmdGVkIG1hdGNoZXMgZG93biB3ZSdsbCBoaXQgYSBOVUxMIGVudHJ5IGJlZm9yZQorICAgICAgICAgKiB3ZSBoaXQgdGhlIGVuZCBvZiB0aGUgYXJyYXkuCisgICAgICAgICAqLworICAgICAgICBpZiAoTlVMTCA9PSBtYXRjaGluZy0+YXJyYXlbaV0pCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgLyoKKyAgICAgICAgICogc2tpcCBvdmVyIHZhbGlkIG1hdGNoZXMuIE5vdGUgdGhhdCB3ZSBkbyBub3Qgd2FudCB0byB1c2UKKyAgICAgICAgICogX3R5cGVfZnJvbV9maWxlbmFtZS4KKyAgICAgICAgICovCisgICAgICAgIGNjID0gKG5ldHNubXBfY2VydF9jb21tb24qKW1hdGNoaW5nLT5hcnJheVtpXTsKKyAgICAgICAgaWYgKCgnLicgPT0gY2MtPmZpbGVuYW1lW3Bvc10pICYmCisgICAgICAgICAgICAoTlNfQ0VSVF9UWVBFX1VOS05PV04gIT0gX2NlcnRfZXh0X3R5cGUoJmNjLT5maWxlbmFtZVtwb3MrMV0pKSkgeworICAgICAgICAgICAgKytpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgLyoKKyAgICAgICAgICogc2hyaW5rIGFycmF5IGJ5IHNoaWZ0aW5nIGV2ZXJ5dGhpbmcgZG93biBhIHNwb3QuIE1pZ2h0IG5vdCBiZQorICAgICAgICAgKiB0aGUgbW9zdCBlZmZpY2llbnQgc29sb3V0aW9uLCBidXQgdGhpcyBpcyBqdXN0IGhhcHBlbmluZyBhdAorICAgICAgICAgKiBzdGFydHVwIGFuZCBob3BlZnVsbHkgbW9zdCBjZXJ0cyB3b24ndCBoYXZlIGNvbW1vbiBwcmVmaXhlcy4KKyAgICAgICAgICovCisgICAgICAgIC0tbmV3c2l6ZTsKKyAgICAgICAgZm9yICggaj1pOyBqIDwgbmV3c2l6ZTsgKytqICkKKyAgICAgICAgICAgIG1hdGNoaW5nLT5hcnJheVtqXSA9IG1hdGNoaW5nLT5hcnJheVtqKzFdOworICAgICAgICBtYXRjaGluZy0+YXJyYXlbal0gPSBOVUxMOworICAgICAgICAvKiogbm8gKytpOyBqdXN0IHNoaWZ0ZWQgZG93biwgbmVlZCB0byBsb29rIGF0IHNhbWUgcG9zaXRpb24gYWdhaW4gKi8KKyAgICB9CisgICAgLyoKKyAgICAgKiBpZiB3ZSBzaGlmdGVkLCBzZXQgdGhlIG5ldyBzaXplCisgICAgICovCisgICAgaWYgKG5ld3NpemUgIT0gbWF0Y2hpbmctPnNpemUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OnN1YnNldDpyZWR1Y2UiLCAic2hyYW5rIGZyb20gJSIgTkVUU05NUF9QUkl6ICJkIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgIG1hdGNoaW5nLT5zaXplLCBuZXdzaXplKSk7CisgICAgICAgIG1hdGNoaW5nLT5zaXplID0gbmV3c2l6ZTsKKyAgICB9Cit9CisKKy8qCisgKiByZWR1Y2Ugc3Vic2V0IGJ5IGVsaW1pbmF0aW5nIGFueSBmaWxlbmFtZXMgdGhhdCBhcmUgbm90IHVuZGVyIHRoZQorICogc3BlY2lmaWVkIGRpcmVjdG9yeSBwYXRoLgorICovCitzdGF0aWMgdm9pZAorX3JlZHVjZV9zdWJzZXRfZGlyKG5ldHNubXBfdm9pZF9hcnJheSAqbWF0Y2hpbmcsIGNvbnN0IGNoYXIgKmRpcmVjdG9yeSkKK3sKKyAgICBuZXRzbm1wX2NlcnRfY29tbW9uICpjYzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBpID0gMCwgaiwgbmV3c2l6ZSwgZGlyX2xlbjsKKyAgICBjaGFyICAgICAgICAgICAgICAgICBkaXJbU05NUF9NQVhQQVRIXSwgKnBvczsKKworICAgIGlmICgoTlVMTCA9PSBtYXRjaGluZykgfHwgKE5VTEwgPT0gZGlyZWN0b3J5KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbmV3c2l6ZSA9IG1hdGNoaW5nLT5zaXplOworCisgICAgLyoKKyAgICAgKiBkaXIgc3RydWN0IHNob3VsZCBiZSBzb21ldGhpbmcgbGlrZQorICAgICAqICAgICAgICAgIC91c3Ivc2hhcmUvc25tcC90bHMvY2VydHMKKyAgICAgKiAgICAgICAgICAvdXNyL3NoYXJlL3NubXAvdGxzL3ByaXZhdGUKKyAgICAgKgorICAgICAqIHNvIHdlIHdhbnQgdG8gYmFja3VwIHVwIG9uIGRpcmVjdG9yeSBmb3IgY29tcGFyZXMuLgorICAgICAqLworICAgIHN0cmxjcHkoZGlyLCBkaXJlY3RvcnksIHNpemVvZihkaXIpKTsKKyAgICBwb3MgPSBzdHJyY2hyKGRpciwgJy8nKTsKKyAgICBpZiAoTlVMTCA9PSBwb3MpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImNlcnQ6c3Vic2V0OmRpciIsICJubyAnLycgaW4gZGlyZWN0b3J5ICVzXG4iLCBkaXJlY3RvcnkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAqcG9zID0gJ1wwJzsKKyAgICBkaXJfbGVuID0gc3RybGVuKGRpcik7CisKKyAgICBmb3IoIDsgaSA8IG1hdGNoaW5nLT5zaXplOyApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgd2UndmUgc2hpZnRlZCBtYXRjaGVzIGRvd24gd2UnbGwgaGl0IGEgTlVMTCBlbnRyeSBiZWZvcmUKKyAgICAgICAgICogd2UgaGl0IHRoZSBlbmQgb2YgdGhlIGFycmF5LgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKE5VTEwgPT0gbWF0Y2hpbmctPmFycmF5W2ldKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIC8qCisgICAgICAgICAqIHNraXAgb3ZlciB2YWxpZCBtYXRjaGVzLiAKKyAgICAgICAgICovCisgICAgICAgIGNjID0gKG5ldHNubXBfY2VydF9jb21tb24qKW1hdGNoaW5nLT5hcnJheVtpXTsKKyAgICAgICAgaWYgKHN0cm5jbXAoZGlyLCBjYy0+ZGlyLCBkaXJfbGVuKSA9PSAwKSB7CisgICAgICAgICAgICArK2k7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiBzaHJpbmsgYXJyYXkgYnkgc2hpZnRpbmcgZXZlcnl0aGluZyBkb3duIGEgc3BvdC4gTWlnaHQgbm90IGJlCisgICAgICAgICAqIHRoZSBtb3N0IGVmZmljaWVudCBzb2xvdXRpb24sIGJ1dCB0aGlzIGlzIGp1c3QgaGFwcGVuaW5nIGF0CisgICAgICAgICAqIHN0YXJ0dXAgYW5kIGhvcGVmdWxseSBtb3N0IGNlcnRzIHdvbid0IGhhdmUgY29tbW9uIHByZWZpeGVzLgorICAgICAgICAgKi8KKyAgICAgICAgLS1uZXdzaXplOworICAgICAgICBmb3IgKCBqPWk7IGogPCBuZXdzaXplOyArK2ogKQorICAgICAgICAgICAgbWF0Y2hpbmctPmFycmF5W2pdID0gbWF0Y2hpbmctPmFycmF5W2orMV07CisgICAgICAgIG1hdGNoaW5nLT5hcnJheVtqXSA9IE5VTEw7CisgICAgICAgIC8qKiBubyArK2k7IGp1c3Qgc2hpZnRlZCBkb3duLCBuZWVkIHRvIGxvb2sgYXQgc2FtZSBwb3NpdGlvbiBhZ2FpbiAqLworICAgIH0KKyAgICAvKgorICAgICAqIGlmIHdlIHNoaWZ0ZWQsIHNldCB0aGUgbmV3IHNpemUKKyAgICAgKi8KKyAgICBpZiAobmV3c2l6ZSAhPSBtYXRjaGluZy0+c2l6ZSkgeworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6c3Vic2V0OmRpciIsICJzaHJhbmsgZnJvbSAlIiBORVRTTk1QX1BSSXogImQgdG8gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgbWF0Y2hpbmctPnNpemUsIG5ld3NpemUpKTsKKyAgICAgICAgbWF0Y2hpbmctPnNpemUgPSBuZXdzaXplOworICAgIH0KK30KKworc3RhdGljIG5ldHNubXBfdm9pZF9hcnJheSAqCitfY2VydF9maW5kX3N1YnNldF9jb21tb24oY29uc3QgY2hhciAqZmlsZW5hbWUsIG5ldHNubXBfY29udGFpbmVyICpjb250YWluZXIpCit7CisgICAgbmV0c25tcF9jZXJ0X2NvbW1vbiAgIHNlYXJjaDsKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgICAqbWF0Y2hpbmc7CisKKyAgICBuZXRzbm1wX2Fzc2VydChmaWxlbmFtZSAmJiBjb250YWluZXIpOworCisgICAgbWVtc2V0KCZzZWFyY2gsIDB4MDAsIHNpemVvZihzZWFyY2gpKTsgICAgLyogY2xlYXIgc2VhcmNoIGtleSAqLworCisgICAgc2VhcmNoLmZpbGVuYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosZmlsZW5hbWUpOworCisgICAgbWF0Y2hpbmcgPSBDT05UQUlORVJfR0VUX1NVQlNFVChjb250YWluZXIsICZzZWFyY2gpOworICAgIERFQlVHTVNHVCgoIjk6Y2VydDpzdWJzZXQ6Zm91bmQiLCAiJSIgTkVUU05NUF9QUkl6ICJkIG1hdGNoZXNcbiIsIG1hdGNoaW5nID8KKyAgICAgICAgICAgICAgIG1hdGNoaW5nLT5zaXplIDogMCkpOworICAgIGlmIChtYXRjaGluZyAmJiBtYXRjaGluZy0+c2l6ZSA+IDEpIHsKKyAgICAgICAgX3JlZHVjZV9zdWJzZXQobWF0Y2hpbmcsIGZpbGVuYW1lKTsKKyAgICAgICAgaWYgKDAgPT0gbWF0Y2hpbmctPnNpemUpIHsKKyAgICAgICAgICAgIGZyZWUobWF0Y2hpbmctPmFycmF5KTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShtYXRjaGluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1hdGNoaW5nOworfQorCitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICoKK19jZXJ0X2ZpbmRfc3Vic2V0X2ZuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICpkaXJlY3RvcnkpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgICAgKmZuX2NvbnRhaW5lcjsKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgICAqbWF0Y2hpbmc7CisKKyAgICAvKiogZmluZCBzdWJjb250YWluZXIgd2l0aCBmaWxlbmFtZSBhcyBrZXkgKi8KKyAgICBmbl9jb250YWluZXIgPSBTVUJDT05UQUlORVJfRklORChfY2VydHMsICJjZXJ0c19mbiIpOworICAgIG5ldHNubXBfYXNzZXJ0KGZuX2NvbnRhaW5lcik7CisKKyAgICBtYXRjaGluZyA9IF9jZXJ0X2ZpbmRfc3Vic2V0X2NvbW1vbihmaWxlbmFtZSwgZm5fY29udGFpbmVyKTsKKyAgICBpZiAobWF0Y2hpbmcgJiYgKG1hdGNoaW5nLT5zaXplID4gMSkgJiYgZGlyZWN0b3J5KSB7CisgICAgICAgIF9yZWR1Y2Vfc3Vic2V0X2RpcihtYXRjaGluZywgZGlyZWN0b3J5KTsKKyAgICAgICAgaWYgKDAgPT0gbWF0Y2hpbmctPnNpemUpIHsKKyAgICAgICAgICAgIGZyZWUobWF0Y2hpbmctPmFycmF5KTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShtYXRjaGluZyk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIG1hdGNoaW5nOworfQorCitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICoKK19jZXJ0X2ZpbmRfc3Vic2V0X3NuKGNvbnN0IGNoYXIgKnN1YmplY3QpCit7CisgICAgbmV0c25tcF9jZXJ0ICAgICAgICAgIHNlYXJjaDsKKyAgICBuZXRzbm1wX3ZvaWRfYXJyYXkgICAqbWF0Y2hpbmc7CisgICAgbmV0c25tcF9jb250YWluZXIgICAgKnNuX2NvbnRhaW5lcjsKKworICAgIC8qKiBmaW5kIHN1YmNvbnRhaW5lciB3aXRoIHN1YmplY3QgYXMga2V5ICovCisgICAgc25fY29udGFpbmVyID0gU1VCQ09OVEFJTkVSX0ZJTkQoX2NlcnRzLCAiY2VydHNfc24iKTsKKyAgICBuZXRzbm1wX2Fzc2VydChzbl9jb250YWluZXIpOworCisgICAgbWVtc2V0KCZzZWFyY2gsIDB4MDAsIHNpemVvZihzZWFyY2gpKTsgICAgLyogY2xlYXIgc2VhcmNoIGtleSAqLworCisgICAgc2VhcmNoLnN1YmplY3QgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKixzdWJqZWN0KTsKKworICAgIG1hdGNoaW5nID0gQ09OVEFJTkVSX0dFVF9TVUJTRVQoc25fY29udGFpbmVyLCAmc2VhcmNoKTsKKyAgICBERUJVR01TR1QoKCI5OmNlcnQ6c3Vic2V0OmZvdW5kIiwgIiUiIE5FVFNOTVBfUFJJeiAiZCBtYXRjaGVzXG4iLCBtYXRjaGluZyA/CisgICAgICAgICAgICAgICBtYXRjaGluZy0+c2l6ZSA6IDApKTsKKyAgICByZXR1cm4gbWF0Y2hpbmc7Cit9CisKK3N0YXRpYyBuZXRzbm1wX3ZvaWRfYXJyYXkgKgorX2tleV9maW5kX3N1YnNldChjb25zdCBjaGFyICpmaWxlbmFtZSkKK3sKKyAgICByZXR1cm4gX2NlcnRfZmluZF9zdWJzZXRfY29tbW9uKGZpbGVuYW1lLCBfa2V5cyk7Cit9CisKKy8qKiBmaW5kIGFsbCBlbnRyaWVzIG1hdGNoaW5nIGdpdmVuIGZpbmdlcnByaW50ICovCitzdGF0aWMgbmV0c25tcF92b2lkX2FycmF5ICoKK19maW5kX3N1YnNldF9mcChuZXRzbm1wX2NvbnRhaW5lciAqY2VydHMsIGNvbnN0IGNoYXIgKmZwKQoreworICAgIG5ldHNubXBfY2VydF9tYXAgICAgZW50cnk7CisgICAgbmV0c25tcF9jb250YWluZXIgICpmcF9jb250YWluZXI7CisgICAgbmV0c25tcF92b2lkX2FycmF5ICp2YTsKKworICAgIGlmICgoTlVMTCA9PSBjZXJ0cykgfHwgKE5VTEwgPT0gZnApKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGZwX2NvbnRhaW5lciA9IFNVQkNPTlRBSU5FUl9GSU5EKGNlcnRzLCAiY2VydDJzbl9mcCIpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX21zZ3JldHVybihmcF9jb250YWluZXIsICJjZXJ0MnNuX2ZwIGNvbnRhaW5lciBtaXNzaW5nIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBtZW1zZXQoJmVudHJ5LCAweDAsIHNpemVvZihlbnRyeSkpOworCisgICAgZW50cnkuZmluZ2VycHJpbnQgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKixmcCk7CisKKyAgICB2YSA9IENPTlRBSU5FUl9HRVRfU1VCU0VUKGZwX2NvbnRhaW5lciwgJmVudHJ5KTsKKyAgICByZXR1cm4gdmE7Cit9CisKKyNpZiAwICAvKiBub3QgdXNlZCB5ZXQgKi8KK3N0YXRpYyBuZXRzbm1wX2tleSAqCitfa2V5X2ZpbmRfZm4oY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgbmV0c25tcF9rZXkga2V5LCAqcmVzdWx0ID0gTlVMTDsKKworICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZmlsZW5hbWUpOworCisgICAgbWVtc2V0KCZrZXksIDB4MDAsIHNpemVvZihrZXkpKTsgICAgLyogY2xlYXIgc2VhcmNoIGtleSAqLworICAgIGtleS5pbmZvLmZpbGVuYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosZmlsZW5hbWUpOworICAgIHJlc3VsdCA9IENPTlRBSU5FUl9GSU5EKF9rZXlzLCZrZXkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisjZW5kaWYKKworc3RhdGljIGludAorX3RpbWVfZmlsdGVyKG5ldHNubXBfZmlsZSAqZiwgc3RydWN0IHN0YXQgKmlkeCkKK3sKKyAgICAvKiogaW5jbHVkZSBpZiBtdGltZSBvciBjdGltZSBuZXdlciB0aGFuIGluZGV4IG10aW1lICovCisgICAgaWYgKGYgJiYgaWR4ICYmIGYtPnN0YXRzICYmCisgICAgICAgICgoZi0+c3RhdHMtPnN0X210aW1lID49IGlkeC0+c3RfbXRpbWUpIHx8CisgICAgICAgICAoZi0+c3RhdHMtPnN0X2N0aW1lID49IGlkeC0+c3RfbXRpbWUpKSkKKyAgICAgICAgcmV0dXJuIE5FVFNOTVBfRElSX0lOQ0xVREU7CisKKyAgICByZXR1cm4gTkVUU05NUF9ESVJfRVhDTFVERTsKK30KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgorICogY2VydCBtYXAgZnVuY3Rpb25zCisgKgorICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2RlZmluZSBNQVBfQ09ORklHX1RPS0VOICJjZXJ0U2VjTmFtZSIKK3N0YXRpYyB2b2lkIF9wYXJzZV9tYXAoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworc3RhdGljIHZvaWQgX21hcF9mcmVlKG5ldHNubXBfY2VydF9tYXAqIGVudHJ5LCB2b2lkICpjdHgpOworc3RhdGljIHZvaWQgX3B1cmdlX2NvbmZpZ19lbnRyaWVzKHZvaWQpOworCitzdGF0aWMgdm9pZAorX2luaXRfdGxzdG1DZXJ0VG9UU04odm9pZCkKK3sKKyAgICBjb25zdCBjaGFyICpjZXJ0U2VjTmFtZV9oZWxwID0gTUFQX0NPTkZJR19UT0tFTiAiIFBSSU9SSVRZIEZJTkdFUlBSSU5UICIKKyAgICAgICAgIlstLXNoYU5OfG1kNV0gPC0tc24gU0VDTkFNRSB8IC0tcmZjODIyIHwgLS1kbnMgfCAtLWlwIHwgLS1jbiB8IC0tYW55PiI7CisKKyAgICAvKgorICAgICAqIGNvbnRhaW5lciBmb3IgY2VydCB0byBmaW5nZXJwcmludCBtYXBwaW5nLCB3aXRoIGZpbmdlcnByaW50IGtleQorICAgICAqLworICAgIF9tYXBzID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfY3JlYXRlKDEpOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoTlVMTCwgTUFQX0NPTkZJR19UT0tFTiwgX3BhcnNlX21hcCwgX3B1cmdlX2NvbmZpZ19lbnRyaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNlcnRTZWNOYW1lX2hlbHApOworfQorCituZXRzbm1wX2NlcnRfbWFwICoKK25ldHNubXBfY2VydF9tYXBfYWxsb2MoY2hhciAqZmluZ2VycHJpbnQsIFg1MDkgKm9jZXJ0KQoreworICAgIG5ldHNubXBfY2VydF9tYXAgKmNlcnRfbWFwID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NlcnRfbWFwKTsKKyAgICBpZiAoTlVMTCA9PSBjZXJ0X21hcCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIG5ldHNubXBfY2VydF9tYXBcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgCisgICAgaWYgKGZpbmdlcnByaW50KSB7CisgICAgICAgIC8qKiBNSUIgbGltaXRzIHRvIDI1NSBieXRlczsgMnggc2luY2Ugd2UndmUgZ290IGFzY2lpICovCisgICAgICAgIGlmIChzdHJsZW4oZmluZ2VycHJpbnQpID4gKFNOTVBBRE1JTkxFTkdUSCAqIDIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmluZ2VycHJpbnQgJXMgZXhjZWVkcyBtYXggbGVuZ3RoICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgZmluZ2VycHJpbnQsIChTTk1QQURNSU5MRU5HVEggKiAyKSk7CisgICAgICAgICAgICBmcmVlKGNlcnRfbWFwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIGNlcnRfbWFwLT5maW5nZXJwcmludCA9IHN0cmR1cChmaW5nZXJwcmludCk7CisgICAgfQorICAgIGlmIChvY2VydCkgeworICAgICAgICBjZXJ0X21hcC0+aGFzaFR5cGUgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfaGFzaF90eXBlKG9jZXJ0KTsKKyAgICAgICAgY2VydF9tYXAtPm9jZXJ0ID0gb2NlcnQ7CisgICAgfQorCisgICAgcmV0dXJuIGNlcnRfbWFwOworfQorCit2b2lkCituZXRzbm1wX2NlcnRfbWFwX2ZyZWUobmV0c25tcF9jZXJ0X21hcCAqY2VydF9tYXApCit7CisgICAgaWYgKE5VTEwgPT0gY2VydF9tYXApCisgICAgICAgIHJldHVybjsKKworICAgIFNOTVBfRlJFRShjZXJ0X21hcC0+ZmluZ2VycHJpbnQpOworICAgIFNOTVBfRlJFRShjZXJ0X21hcC0+ZGF0YSk7CisgICAgLyoqIHg1MDkgY2VydCBpc24ndCBvdXJzICovCisgICAgZnJlZShjZXJ0X21hcCk7IC8qIFNOTVBfRlJFRSB3YXN0ZWQgb24gcGFyYW0gKi8KK30KKworaW50CituZXRzbm1wX2NlcnRfbWFwX2FkZChuZXRzbm1wX2NlcnRfbWFwICptYXApCit7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjOworCisgICAgaWYgKE5VTEwgPT0gbWFwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1RMKCgiY2VydDptYXA6YWRkIiwgInByaSAlZCwgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgbWFwLT5wcmlvcml0eSwgbWFwLT5maW5nZXJwcmludCkpOworCisgICAgaWYgKChyYyA9IENPTlRBSU5FUl9JTlNFUlQoX21hcHMsIG1hcCkpICE9IDApCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgaW5zZXJ0IG5ldyBjZXJ0aWZpY2F0ZSBtYXAiKTsKKworICAgIHJldHVybiByYzsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfTUFQX1JFTU9WRQoraW50CituZXRzbm1wX2NlcnRfbWFwX3JlbW92ZShuZXRzbm1wX2NlcnRfbWFwICptYXApCit7CisgICAgaW50ICAgICAgICAgICAgICAgIHJjOworCisgICAgaWYgKE5VTEwgPT0gbWFwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1RMKCgiY2VydDptYXA6cmVtb3ZlIiwgInByaSAlZCwgZnAgJXNcbiIsCisgICAgICAgICAgICAgICAgbWFwLT5wcmlvcml0eSwgbWFwLT5maW5nZXJwcmludCkpOworCisgICAgaWYgKChyYyA9IENPTlRBSU5FUl9SRU1PVkUoX21hcHMsIG1hcCkpICE9IDApCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgcmVtb3ZlIGNlcnRpZmljYXRlIG1hcCIpOworCisgICAgcmV0dXJuIHJjOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9NQVBfUkVNT1ZFICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX01BUF9GSU5ECituZXRzbm1wX2NlcnRfbWFwICoKK25ldHNubXBfY2VydF9tYXBfZmluZChuZXRzbm1wX2NlcnRfbWFwICptYXApCit7CisgICAgaWYgKE5VTEwgPT0gbWFwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBDT05UQUlORVJfRklORChfbWFwcywgbWFwKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfTUFQX0ZJTkQgKi8KKworc3RhdGljIHZvaWQKK19tYXBfZnJlZShuZXRzbm1wX2NlcnRfbWFwICptYXAsIHZvaWQgKmNvbnRleHQpCit7CisgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG1hcCk7Cit9CisKK3N0YXRpYyBpbnQKK19tYXBfY29tcGFyZShuZXRzbm1wX2NlcnRfbWFwICpsaHMsIG5ldHNubXBfY2VydF9tYXAgKnJocykKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworCisgICAgaWYgKGxocy0+cHJpb3JpdHkgPCByaHMtPnByaW9yaXR5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGhzLT5wcmlvcml0eSA+IHJocy0+cHJpb3JpdHkpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIHN0cmNtcChsaHMtPmZpbmdlcnByaW50LCByaHMtPmZpbmdlcnByaW50KTsKK30KKworc3RhdGljIGludAorX21hcF9mcF9jb21wYXJlKG5ldHNubXBfY2VydF9tYXAgKmxocywgbmV0c25tcF9jZXJ0X21hcCAqcmhzKQoreworICAgIGludCByYzsKKyAgICBuZXRzbm1wX2Fzc2VydCgobGhzICE9IE5VTEwpICYmIChyaHMgIT0gTlVMTCkpOworCisgICAgaWYgKChyYyA9IHN0cmNtcChsaHMtPmZpbmdlcnByaW50LCByaHMtPmZpbmdlcnByaW50KSkgIT0gMCkKKyAgICAgICAgcmV0dXJuIHJjOworCisgICAgaWYgKGxocy0+cHJpb3JpdHkgPCByaHMtPnByaW9yaXR5KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGhzLT5wcmlvcml0eSA+IHJocy0+cHJpb3JpdHkpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK19tYXBfZnBfbmNvbXBhcmUobmV0c25tcF9jZXJ0X21hcCAqbGhzLCBuZXRzbm1wX2NlcnRfbWFwICpyaHMpCit7CisgICAgbmV0c25tcF9hc3NlcnQoKGxocyAhPSBOVUxMKSAmJiAocmhzICE9IE5VTEwpKTsKKworICAgIHJldHVybiBzdHJuY21wKGxocy0+ZmluZ2VycHJpbnQsIHJocy0+ZmluZ2VycHJpbnQsCisgICAgICAgICAgICAgICAgICAgc3RybGVuKHJocy0+ZmluZ2VycHJpbnQpKTsKK30KKworbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfY3JlYXRlKGludCB3aXRoX2ZwKQoreworICAgIG5ldHNubXBfY29udGFpbmVyICpjaGFpbl9tYXAsICpmcDsKKworICAgIGNoYWluX21hcCA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnRfbWFwOnN0YWNrOmJpbmFyeV9hcnJheSIpOworICAgIGlmIChOVUxMID09IGNoYWluX21hcCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGFsbG9jYXRlIGNvbnRhaW5lciBmb3IgY2VydF9tYXBcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBjaGFpbl9tYXAtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJjZXJ0X21hcCIpOworICAgIGNoYWluX21hcC0+ZnJlZV9pdGVtID0gKG5ldHNubXBfY29udGFpbmVyX29ial9mdW5jKilfbWFwX2ZyZWU7CisgICAgY2hhaW5fbWFwLT5jb21wYXJlID0gKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKV9tYXBfY29tcGFyZTsKKworICAgIGlmICghd2l0aF9mcCkKKyAgICAgICAgcmV0dXJuIGNoYWluX21hcDsKKworICAgIC8qCisgICAgICogYWRkIGEgc2Vjb25kYXJ5IGluZGV4IHRvIHRoZSB0YWJsZSBjb250YWluZXIKKyAgICAgKi8KKyAgICBmcCA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImNlcnQyc25fZnA6YmluYXJ5X2FycmF5Iik7CisgICAgaWYgKE5VTEwgPT0gZnApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIHN1Yi1jb250YWluZXIgZm9yIHRsc3RtQ2VydFRvVFNOVGFibGVcbiIpOworICAgICAgICBDT05UQUlORVJfRlJFRShjaGFpbl9tYXApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgZnAtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJjZXJ0MnNuX2ZwIik7CisgICAgZnAtPmNvbXBhcmUgPSAobmV0c25tcF9jb250YWluZXJfY29tcGFyZSopX21hcF9mcF9jb21wYXJlOworICAgIGZwLT5uY29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilfbWFwX2ZwX25jb21wYXJlOworICAgIG5ldHNubXBfY29udGFpbmVyX2FkZF9pbmRleChjaGFpbl9tYXAsIGZwKTsKKworICAgIHJldHVybiBjaGFpbl9tYXA7Cit9CisKK2ludAorbmV0c25tcF9jZXJ0X3BhcnNlX2hhc2hfdHlwZShjb25zdCBjaGFyICpzdHIpCit7CisgICAgaW50IHJjID0gc2VfZmluZF92YWx1ZV9pbl9zbGlzdCgiY2VydF9oYXNoX2FsZyIsIHN0cik7CisgICAgaWYgKFNFX0RORSA9PSByYykKKyAgICAgICAgcmV0dXJuIE5TX0hBU0hfTk9ORTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3ZvaWQKK25ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2ZyZWUobmV0c25tcF9jb250YWluZXIgKmMpCit7CisgICAgaWYgKE5VTEwgPT0gYykKKyAgICAgICAgcmV0dXJuOworCisgICAgQ09OVEFJTkVSX0ZSRUVfQUxMKGMsIE5VTEwpOworICAgIENPTlRBSU5FUl9GUkVFKGMpOworfQorCisvKiogY2xlYXIgb3V0IGNvbmZpZyByb3dzCisgKiBjYWxsZWQgZHVyaW5nIHJlY29uZmlnIHByb2Nlc3NpbmcgKGUuZy4gU0lHSFVQKQorKi8KK3N0YXRpYyB2b2lkCitfcHVyZ2VfY29uZmlnX2VudHJpZXModm9pZCkKK3sKKyAgICAvKioKKyAgICAgKiogZHVwIGNvbnRhaW5lcgorICAgICAqKiBpdGVyYXRlIGxvb2tpbmcgZm9yIE5TQ01fRlJPTV9DT05GSUcgZmxhZworICAgICAqKiBkZWxldGUgZnJvbSBvcmlnaW5hbAorICAgICAqKiBkZWxldGUgZHVwCisgICAgICoqLworICAgIG5ldHNubXBfaXRlcmF0b3IgICAqaXRyOworICAgIG5ldHNubXBfY2VydF9tYXAgICAqY2VydF9tYXA7CisgICAgbmV0c25tcF9jb250YWluZXIgICpjZXJ0X21hcHMgPSBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcigpOworICAgIG5ldHNubXBfY29udGFpbmVyICAqdG1wX21hcHMgPSBOVUxMOworCisgICAgaWYgKChOVUxMID09IGNlcnRfbWFwcykgfHwgKENPTlRBSU5FUl9TSVpFKGNlcnRfbWFwcykgPT0gMCkpCisgICAgICAgIHJldHVybjsKKworICAgIERFQlVHTVNHVCgoImNlcnQ6bWFwOnJlY29uZmlnIiwgInJlbW92aW5nIGxvY2FsbHkgY29uZmlndXJlZCByb3dzXG4iKSk7CisgICAgCisgICAgLyoKKyAgICAgKiBkdXBsaWNhdGUgY2VydF9tYXBzIGFuZCB0aGVuIGl0ZXJhdGUgb3ZlciB0aGUgY29weS4gVGhhdCB3YXkgd2UgY2FuCisgICAgICogYWRkL3JlbW92ZSB0byBjZXJ0X21hcHMgd2l0aG91dCBkaXN0cnViaW5nIHRoZSBpdGVyYXRvci4KK3h4CisgICAgICovCisgICAgdG1wX21hcHMgPSBDT05UQUlORVJfRFVQKGNlcnRfbWFwcywgTlVMTCwgMCk7CisgICAgaWYgKE5VTEwgPT0gdG1wX21hcHMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBkdXBsaWNhdGUgbWFwcyBmb3IgcmVjb25maWdcbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKHRtcF9tYXBzKTsKKyAgICBpZiAoTlVMTCA9PSBpdHIpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgaXRlcmF0b3IgZm9yIHJlY29uZmlnXG4iKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUodG1wX21hcHMpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNlcnRfbWFwID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICBmb3IoIDsgY2VydF9tYXA7IGNlcnRfbWFwID0gSVRFUkFUT1JfTkVYVChpdHIpKSB7CisKKyAgICAgICAgaWYgKCEoY2VydF9tYXAtPmZsYWdzICYgTlNDTV9GUk9NX0NPTkZJRykpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoQ09OVEFJTkVSX1JFTU9WRShjZXJ0X21hcHMsIGNlcnRfbWFwKSA9PSAwKQorICAgICAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKGNlcnRfbWFwKTsKKyAgICB9CisgICAgSVRFUkFUT1JfUkVMRUFTRShpdHIpOworICAgIENPTlRBSU5FUl9GUkVFKHRtcF9tYXBzKTsKKworICAgIHJldHVybjsKK30KKworLyoKKyAgY2VydFNlY05hbWUgUFJJT1JJVFkgWy0tc2hhTk58bWQ1XSBGSU5HRVJQUklOVCA8LS1zbiBTRUNOQU1FIHwgLS1yZmM4MjIgfCAtLWRucyB8IC0taXAgfCAtLWNuIHwgLS1hbnk+CisKKyAgY2VydFNlY05hbWUgIDEwMCAgZmY6Li4xMSAtLXNuIFdlcworICBjZXJ0U2VjTmFtZSAgMjAwICBlZTouLjoyMiAtLXNuIEpvaG5Eb2UKKyAgY2VydFNlY05hbWUgIDMwMCAgZWU6Li46MjIgLS1yZmM4MjIKKyovCituZXRzbm1wX2NlcnRfbWFwICoKK25ldHNubXBfY2VydFRvVFNOX3BhcnNlX2NvbW1vbihjaGFyICoqbGluZSkKK3sKKyAgICBuZXRzbm1wX2NlcnRfbWFwICptYXA7CisgICAgY2hhciAgICAgICAgICAgICAqdG1wLCBidWZbU05NUF9NQVhCVUZfU01BTExdOworICAgIHNpemVfdCAgICAgICAgICAgIGxlbjsKKyAgICBuZXRzbm1wX2NlcnQgICAgICp0bXBjZXJ0OworCisgICAgaWYgKChOVUxMID09IGxpbmUpIHx8IChOVUxMID09ICpsaW5lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogbmVlZCBzb21ld2hlcmUgdG8gc2F2ZSByb3dzICovCisgICAgaWYgKE5VTEwgPT0gX21hcHMpIHsKKyAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAibm8gY29udGFpbmVyIGZvciBjZXJ0aWZpY2F0ZSBtYXBwaW5nc1xuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBERUJVR01TR1QoKCJjZXJ0OnV0aWw6Y29uZmlnIiwgInBhcnNpbmcgJXNcbiIsICpsaW5lKSk7CisKKyAgICAvKiByZWFkIHRoZSBwcmlvcml0eSAqLworICAgIGxlbiA9IHNpemVvZihidWYpOworICAgIHRtcCA9IGJ1ZjsKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgIHRtcFtsZW5dID0gMDsKKyAgICBpZiAoIWlzZGlnaXQoMHhGRiAmIHRtcFswXSkpIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoImNvdWxkIG5vdCBwYXJzZSBwcmlvcml0eSIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWFwID0gbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhOVUxMLCBOVUxMKTsKKyAgICBpZiAoTlVMTCA9PSBtYXApIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoImNvdWxkIG5vdCBhbGxvY2F0ZSBjZXJ0IG1hcCBzdHJ1Y3QiKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1hcC0+ZmxhZ3MgfD0gTlNDTV9GUk9NX0NPTkZJRzsKKyAgICBtYXAtPnByaW9yaXR5ID0gYXRvaShidWYpOworCisgICAgLyogcmVhZCB0aGUgZmxhZyBvciB0aGUgZmluZ2VycHJpbnQgKi8KKyAgICBsZW4gPSBzaXplb2YoYnVmKTsKKyAgICB0bXAgPSBidWY7CisgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICB0bXBbbGVuXSA9IDA7CisgICAgaWYgKChidWZbMF0gPT0gJy0nKSAmJiAoYnVmWzFdID09ICctJykpIHsKKyAgICAgICAgbWFwLT5oYXNoVHlwZSA9IG5ldHNubXBfY2VydF9wYXJzZV9oYXNoX3R5cGUoJmJ1ZlsyXSk7CisgICAgICAgIGlmIChOU19IQVNIX05PTkUgPT0gbWFwLT5oYXNoVHlwZSkgeworICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoImludmFsaWQgaGFzaCB0eXBlIik7CisgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qKiBzZXQgdXAgZm9yIGZpbmdlcnByaW50ICovCisgICAgICAgIGxlbiA9IHNpemVvZihidWYpOworICAgICAgICB0bXAgPSBidWY7CisgICAgICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgICAgIHRtcFtsZW5dID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBtYXAtPmhhc2hUeXBlID0gTlNfSEFTSF9TSEExOworCisgICAgLyogbG9vayB1cCB0aGUgZmluZ2VycHJpbnQgKi8KKyAgICB0bXBjZXJ0ID0gbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9SRU1PVEVfUEVFUiwgTlNfQ0VSVEtFWV9NVUxUSVBMRSwgYnVmKTsKKyAgICBpZiAoTlVMTCA9PSB0bXBjZXJ0KSB7CisgICAgICAgIC8qIGFzc3VtZSBpdCdzIGEgcmF3IGZpbmdlcnByaW50IHdlIGRvbid0IGhhdmUgKi8KKyAgICAgICAgbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKGJ1Zik7CisgICAgICAgIG1hcC0+ZmluZ2VycHJpbnQgPSBzdHJkdXAoYnVmKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtYXAtPmZpbmdlcnByaW50ID0KKyAgICAgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludCh0bXBjZXJ0LT5vY2VydCwgLTEpOworICAgIH0KKyAgICAKKyAgICBpZiAoTlVMTCA9PSAqbGluZSkgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigibXVzdCBzcGVjaWZ5IG1hcCB0eXBlIik7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIC8qIHJlYWQgdGhlIG1hcHBpbmcgdHlwZSAqLworICAgIGxlbiA9IHNpemVvZihidWYpOworICAgIHRtcCA9IGJ1ZjsKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgIHRtcFtsZW5dID0gMDsKKyAgICBpZiAoKGJ1ZlswXSAhPSAnLScpIHx8IChidWZbMV0gIT0gJy0nKSkgeworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigidW5leHBlY3RlZCBmcm9tYXQ6ICVzXG4iLCAqbGluZSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKyAgICBpZiAoc3RyY21wKCZidWZbMl0sICJzbiIpID09IDApIHsKKyAgICAgICAgaWYgKE5VTEwgPT0gKmxpbmUpIHsKKyAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJtdXN0IHNwZWNpZnkgc2VjTmFtZSBmb3IgLS1zbiIpOworICAgICAgICAgICAgZ290byBlbmQ7CisgICAgICAgIH0KKyAgICAgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgICAgIHRtcCA9IGJ1ZjsKKyAgICAgICAgKmxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygqbGluZSwgKHVfY2hhciAqKikmdG1wLCAmbGVuKTsKKyAgICAgICAgbWFwLT5kYXRhID0gc3RyZHVwKGJ1Zik7CisgICAgICAgIGlmIChtYXAtPmRhdGEpCisgICAgICAgICAgICBtYXAtPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydFNwZWNpZmllZDsKKyAgICB9CisgICAgZWxzZSBpZiAoc3RyY21wKCZidWZbMl0sICJjbiIpID09IDApCisgICAgICAgIG1hcC0+bWFwVHlwZSA9IFRTTk1fdGxzdG1DZXJ0Q29tbW9uTmFtZTsKKyAgICBlbHNlIGlmIChzdHJjbXAoJmJ1ZlsyXSwgImlwIikgPT0gMCkKKyAgICAgICAgbWFwLT5tYXBUeXBlID0gVFNOTV90bHN0bUNlcnRTQU5JcEFkZHJlc3M7CisgICAgZWxzZSBpZiAoc3RyY21wKCZidWZbMl0sICJyZmM4MjIiKSA9PSAwKQorICAgICAgICBtYXAtPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWU7CisgICAgZWxzZSBpZiAoc3RyY21wKCZidWZbMl0sICJkbnMiKSA9PSAwKQorICAgICAgICBtYXAtPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydFNBTkROU05hbWU7CisgICAgZWxzZSBpZiAoc3RyY21wKCZidWZbMl0sICJhbnkiKSA9PSAwKQorICAgICAgICBtYXAtPm1hcFR5cGUgPSBUU05NX3Rsc3RtQ2VydFNBTkFueTsKKyAgICBlbHNlCisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJ1bmtub3duIGFyZ3VtZW50ICVzXG4iLCBidWYpOworICAgIAorICBlbmQ6CisgICAgaWYgKDAgPT0gbWFwLT5tYXBUeXBlKSB7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworICAgICAgICBtYXAgPSBOVUxMOworICAgIH0KKworICAgIHJldHVybiBtYXA7Cit9CisKK3N0YXRpYyB2b2lkCitfcGFyc2VfbWFwKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQoreworICAgIG5ldHNubXBfY2VydF9tYXAgKm1hcCA9IG5ldHNubXBfY2VydFRvVFNOX3BhcnNlX2NvbW1vbigmbGluZSk7CisgICAgaWYgKE5VTEwgPT0gbWFwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAobmV0c25tcF9jZXJ0X21hcF9hZGQobWFwKSAhPSAwKSB7CisgICAgICAgIG5ldHNubXBfY2VydF9tYXBfZnJlZShtYXApOworICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcihNQVBfQ09ORklHX1RPS0VOCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI6IGR1cGxpY2F0ZSBwcmlvcml0eSBmb3IgY2VydGlmaWNhdGUgbWFwIik7CisgICAgfQorfQorCitzdGF0aWMgaW50CitfZmlsbF9jZXJ0X21hcChuZXRzbm1wX2NlcnRfbWFwICpjZXJ0X21hcCwgbmV0c25tcF9jZXJ0X21hcCAqZW50cnkpCit7CisgICAgREVCVUdNU0dUKCgiY2VydDptYXA6c2VjbmFtZSIsICJtYXA6IHByaSAlZCB0eXBlICVkIGRhdGEgJXNcbiIsCisgICAgICAgICAgICAgICBlbnRyeS0+cHJpb3JpdHksIGVudHJ5LT5tYXBUeXBlLCBlbnRyeS0+ZGF0YSkpOworICAgIGNlcnRfbWFwLT5wcmlvcml0eSA9IGVudHJ5LT5wcmlvcml0eTsKKyAgICBjZXJ0X21hcC0+bWFwVHlwZSA9IGVudHJ5LT5tYXBUeXBlOworICAgIGNlcnRfbWFwLT5oYXNoVHlwZSA9IGVudHJ5LT5oYXNoVHlwZTsKKyAgICBpZiAoZW50cnktPmRhdGEpIHsKKyAgICAgICAgY2VydF9tYXAtPmRhdGEgPSBzdHJkdXAoZW50cnktPmRhdGEpOworICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0X21hcC0+ZGF0YSApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJzZWNuYW1lIG1hcCBkYXRhIGR1cCBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBnZXQgc2VjbmFtZSBtYXAocykgZm9yIGZpbmdlcnByaW50cworICovCitpbnQKK25ldHNubXBfY2VydF9nZXRfc2VjbmFtZV9tYXBzKG5ldHNubXBfY29udGFpbmVyICpjZXJ0X21hcHMpCit7CisgICAgbmV0c25tcF9pdGVyYXRvciAgICppdHI7CisgICAgbmV0c25tcF9jZXJ0X21hcCAgICpjZXJ0X21hcCwgKm5ld19jZXJ0X21hcCwgKmVudHJ5OworICAgIG5ldHNubXBfY29udGFpbmVyICAqbmV3X21hcHMgPSBOVUxMOworICAgIG5ldHNubXBfdm9pZF9hcnJheSAqcmVzdWx0czsKKyAgICBpbnQgICAgICAgICAgICAgICAgIGo7CisKKyAgICBpZiAoKE5VTEwgPT0gY2VydF9tYXBzKSB8fCAoQ09OVEFJTkVSX1NJWkUoY2VydF9tYXBzKSA9PSAwKSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgREVCVUdNU0dUKCgiY2VydDptYXA6c2VjbmFtZSIsICJsb29raW5nIGZvciBtYXRjaGVzIGZvciAlIiBORVRTTk1QX1BSSXogImQgZmluZ2VycHJpbnRzXG4iLAorICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY2VydF9tYXBzKSkpOworICAgIAorICAgIC8qCisgICAgICogZHVwbGljYXRlIGNlcnRfbWFwcyBhbmQgdGhlbiBpdGVyYXRlIG92ZXIgdGhlIGNvcHkuIFRoYXQgd2F5IHdlIGNhbgorICAgICAqIGFkZC9yZW1vdmUgdG8gY2VydF9tYXBzIHdpdGhvdXQgZGlzdHJ1YmluZyB0aGUgaXRlcmF0b3IuCisgICAgICovCisgICAgbmV3X21hcHMgPSBDT05UQUlORVJfRFVQKGNlcnRfbWFwcywgTlVMTCwgMCk7CisgICAgaWYgKE5VTEwgPT0gbmV3X21hcHMpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBkdXBsaWNhdGUgbWFwcyBmb3Igc2VjbmFtZSBtYXBwaW5nXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGl0ciA9IENPTlRBSU5FUl9JVEVSQVRPUihuZXdfbWFwcyk7CisgICAgaWYgKE5VTEwgPT0gaXRyKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgZ2V0IGl0ZXJhdG9yIGZvciBzZWNuYW1lIG1hcHBpbmdzXG4iKTsKKyAgICAgICAgQ09OVEFJTkVSX0ZSRUUobmV3X21hcHMpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGNlcnRfbWFwID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICBmb3IoIDsgY2VydF9tYXA7IGNlcnRfbWFwID0gSVRFUkFUT1JfTkVYVChpdHIpKSB7CisKKyAgICAgICAgcmVzdWx0cyA9IF9maW5kX3N1YnNldF9mcCggbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydF9tYXAtPmZpbmdlcnByaW50ICk7CisgICAgICAgIGlmIChOVUxMID09IHJlc3VsdHMpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoImNlcnQ6bWFwOnNlY25hbWUiLCAibm8gbWF0Y2ggZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X21hcC0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgIGlmIChDT05UQUlORVJfUkVNT1ZFKGNlcnRfbWFwcywgY2VydF9tYXApICE9IDApCisgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUKCgiY2VydDptYXA6c2VjbmFtZSIsICIlIiBORVRTTk1QX1BSSXogImQgbWF0Y2hlcyBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgcmVzdWx0cy0+c2l6ZSwgY2VydF9tYXAtPmZpbmdlcnByaW50KSk7CisgICAgICAgIC8qCisgICAgICAgICAqIGZpcnN0IGVudHJ5IGlzIGEgZnJlZWJpZQorICAgICAgICAgKi8KKyAgICAgICAgZW50cnkgPSAobmV0c25tcF9jZXJ0X21hcCopcmVzdWx0cy0+YXJyYXlbMF07CisgICAgICAgIGlmIChfZmlsbF9jZXJ0X21hcChjZXJ0X21hcCwgZW50cnkpICE9IDApCisgICAgICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkaXRpb25hbCBlbnRyaWVzIG11c3QgYmUgYWxsb2NhdGVkL2luc2VydGVkCisgICAgICAgICAqLworICAgICAgICBpZiAocmVzdWx0cy0+c2l6ZSA+IDEpIHsKKyAgICAgICAgICAgIGZvcihqPTE7IGogPCByZXN1bHRzLT5zaXplOyArK2opIHsKKyAgICAgICAgICAgICAgICBlbnRyeSA9IChuZXRzbm1wX2NlcnRfbWFwKilyZXN1bHRzLT5hcnJheVtqXTsKKyAgICAgICAgICAgICAgICBuZXdfY2VydF9tYXAgPSBuZXRzbm1wX2NlcnRfbWFwX2FsbG9jKGVudHJ5LT5maW5nZXJwcmludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudHJ5LT5vY2VydCk7CisgICAgICAgICAgICAgICAgaWYgKE5VTEwgPT0gbmV3X2NlcnRfbWFwKSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZCBub3QgYWxsb2NhdGUgbmV3IGNlcnQgbWFwIGVudHJ5XG4iKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoX2ZpbGxfY2VydF9tYXAobmV3X2NlcnRfbWFwLCBlbnRyeSkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2ZyZWUobmV3X2NlcnRfbWFwKTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXdfY2VydF9tYXAtPm9jZXJ0ID0gY2VydF9tYXAtPm9jZXJ0OworICAgICAgICAgICAgICAgIGlmIChDT05UQUlORVJfSU5TRVJUKGNlcnRfbWFwcyxuZXdfY2VydF9tYXApICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKG5ld19jZXJ0X21hcCk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IC8qIGZvciByZXN1bHRzICovCisgICAgICAgIH0gLyogcmVzdWx0cyBzaXplID4gMSAqLworCisgICAgICAgIGZyZWUocmVzdWx0cy0+YXJyYXkpOworICAgICAgICBTTk1QX0ZSRUUocmVzdWx0cyk7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKyAgICBDT05UQUlORVJfRlJFRShuZXdfbWFwcyk7CisKKyAgICBERUJVR01TR1QoKCJjZXJ0Om1hcDpzZWNuYW1lIiwKKyAgICAgICAgICAgICAgICJmb3VuZCAlIiBORVRTTk1QX1BSSXogImQgbWF0Y2hlcyBmb3IgZmluZ2VycHJpbnRzXG4iLAorICAgICAgICAgICAgICAgQ09OVEFJTkVSX1NJWkUoY2VydF9tYXBzKSkpOworICAgIHJldHVybiAwOworCisgIGZhaWw6CisgICAgaWYgKHJlc3VsdHMpIHsKKyAgICAgICAgZnJlZShyZXN1bHRzLT5hcnJheSk7CisgICAgICAgIGZyZWUocmVzdWx0cyk7CisgICAgfQorICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKyAgICBDT05UQUlORVJfRlJFRShuZXdfbWFwcyk7CisgICAgcmV0dXJuIC0xOworfQorCisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqCisgKiBzbm1wVGxzdG1QYXJtc1RhYmxlIGRhdGEKKyAqCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBBUkFNU19DT05GSUdfVE9LRU4gInNubXBUbHN0bVBhcmFtcyIKK3N0YXRpYyB2b2lkIF9wYXJzZV9wYXJhbXMoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworCitzdGF0aWMgdm9pZAorX2luaXRfdGxzdG1QYXJhbXModm9pZCkKK3sKKyAgICBjb25zdCBjaGFyICpwYXJhbXNfaGVscCA9IAorICAgICAgICBQQVJBTVNfQ09ORklHX1RPS0VOICIgdGFyZ2V0UGFyYW1zTmFtZSBoYXNoVHlwZTpmaW5nZXJQcmludCI7CisgICAgCisgICAgLyoKKyAgICAgKiBjb250YWluZXIgZm9yIHNubXBUbHN0bVBhcmFtc1RhYmxlIGRhdGEKKyAgICAgKi8KKyAgICBfdGxzdG1QYXJhbXMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0bHN0bVBhcmFtczpzdHJpbmciKTsKKyAgICBpZiAoTlVMTCA9PSBfdGxzdG1QYXJhbXMpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJlcnJvciBjcmVhdGluZyBzdWItY29udGFpbmVyIGZvciB0bHN0bVBhcmFtc1RhYmxlXG4iKTsKKyAgICBlbHNlCisgICAgICAgIF90bHN0bVBhcmFtcy0+Y29udGFpbmVyX25hbWUgPSBzdHJkdXAoInRsc3RtUGFyYW1zIik7CisKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCBQQVJBTVNfQ09ORklHX1RPS0VOLCBfcGFyc2VfcGFyYW1zLCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXNfaGVscCk7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTVBBUkFNU19DT05UQUlORVIKK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfdGxzdG1QYXJhbXNfY29udGFpbmVyKHZvaWQpCit7CisgICAgcmV0dXJuIF90bHN0bVBhcmFtczsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNUEFSQU1TX0NPTlRBSU5FUiAqLworCitzbm1wVGxzdG1QYXJhbXMgKgorbmV0c25tcF90bHN0bVBhcmFtc19jcmVhdGUoY29uc3QgY2hhciAqbmFtZSwgaW50IGhhc2hUeXBlLCBjb25zdCBjaGFyICpmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmcF9sZW4pCit7CisgICAgc25tcFRsc3RtUGFyYW1zICpzdHAgPSBTTk1QX01BTExPQ19UWVBFREVGKHNubXBUbHN0bVBhcmFtcyk7CisgICAgaWYgKE5VTEwgPT0gc3RwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmIChuYW1lKQorICAgICAgICBzdHAtPm5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgc3RwLT5oYXNoVHlwZSA9IGhhc2hUeXBlOworICAgIGlmIChmcCkKKyAgICAgICAgc3RwLT5maW5nZXJwcmludCA9IHN0cmR1cChmcCk7CisgICAgREVCVUdNU0dUKCgiOTp0bHN0bVBhcmFtczpjcmVhdGUiLCAiMHglbHg6ICVzXG4iLCAodV9sb25nKXN0cCwKKyAgICAgICAgICAgICAgIHN0cC0+bmFtZSA/IHN0cC0+bmFtZSA6ICJudWxsIikpOworCisgICAgcmV0dXJuIHN0cDsKK30KKwordm9pZAorbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKHNubXBUbHN0bVBhcmFtcyAqc3RwKQoreworICAgIGlmIChOVUxMID09IHN0cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgREVCVUdNU0dUKCgiOTp0bHN0bVBhcmFtczpyZWxlYXNlIiwgIjB4JWx4ICVzXG4iLCAodV9sb25nKXN0cCwKKyAgICAgICAgICAgICAgIHN0cC0+bmFtZSA/IHN0cC0+bmFtZSA6ICJudWxsIikpOworICAgIFNOTVBfRlJFRShzdHAtPm5hbWUpOworICAgIFNOTVBfRlJFRShzdHAtPmZpbmdlcnByaW50KTsKKyAgICBmcmVlKHN0cCk7IC8qIFNOTVBfRlJFRSBwb2ludGxlc3Mgb24gcGFyYW1ldGVyICovCit9CisKK3NubXBUbHN0bVBhcmFtcyAqCituZXRzbm1wX3Rsc3RtUGFyYW1zX3Jlc3RvcmVfY29tbW9uKGNoYXIgKipsaW5lKQoreworICAgIHNubXBUbHN0bVBhcmFtcyAgKnN0cDsKKyAgICBjaGFyICAgICAgICAgICAgICp0bXAsIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF07CisgICAgc2l6ZV90ICAgICAgICAgICAgbGVuOworCisgICAgaWYgKChOVUxMID09IGxpbmUpIHx8IChOVUxMID09ICpsaW5lKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogbmVlZCBzb21ld2hlcmUgdG8gc2F2ZSByb3dzICovCisgICAgbmV0c25tcF9hc3NlcnQoX3Rsc3RtUGFyYW1zKTsKKworICAgIHN0cCA9IG5ldHNubXBfdGxzdG1QYXJhbXNfY3JlYXRlKE5VTEwsIDAsIE5VTEwsIDApOworICAgIGlmIChOVUxMID09IHN0cCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogbmFtZSAqLworICAgIGxlbiA9IHNpemVvZihidWYpOworICAgIHRtcCA9IGJ1ZjsKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZ0bXAsICZsZW4pOworICAgIHRtcFtsZW5dID0gMDsKKyAgICAvKiogeHh4LXJrczogdmFsaWRhdGUgc25tcGFkbWluc3RyaW5nPyAqLworICAgIGlmIChsZW4pCisgICAgICAgIHN0cC0+bmFtZSA9IHN0cmR1cChidWYpOworCisgICAgLyoqIGZpbmdlcnByaW50IGhhc2ggdHlwZSovCisgICAgbGVuID0gc2l6ZW9mKGJ1Zik7CisgICAgdG1wID0gYnVmOworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgdG1wW2xlbl0gPSAwOworICAgIGlmICgoYnVmWzBdID09ICctJykgJiYgKGJ1ZlsxXSA9PSAnLScpKSB7CisgICAgICAgIHN0cC0+aGFzaFR5cGUgPSBuZXRzbm1wX2NlcnRfcGFyc2VfaGFzaF90eXBlKCZidWZbMl0pOworCisgICAgICAgIC8qKiBzZXQgdXAgZm9yIGZpbmdlcnByaW50ICovCisgICAgICAgIGxlbiA9IHNpemVvZihidWYpOworICAgICAgICB0bXAgPSBidWY7CisgICAgICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJnRtcCwgJmxlbik7CisgICAgICAgIHRtcFtsZW5dID0gMDsKKyAgICB9CisgICAgZWxzZQorICAgICAgICBzdHAtPmhhc2hUeXBlID1OU19IQVNIX1NIQTE7CisgICAgCisgICAgbmV0c25tcF9mcF9sb3dlcmNhc2VfYW5kX3N0cmlwX2NvbG9uKGJ1Zik7CisgICAgc3RwLT5maW5nZXJwcmludCA9IHN0cmR1cChidWYpOworICAgIHN0cC0+ZmluZ2VycHJpbnRfbGVuID0gc3RybGVuKGJ1Zik7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXM6cmVzdG9yZTpjb21tb24iLCAibmFtZSAnJXMnXG4iLCBzdHAtPm5hbWUpKTsKKworICAgIHJldHVybiBzdHA7Cit9CisKK2ludAorbmV0c25tcF90bHN0bVBhcmFtc19hZGQoc25tcFRsc3RtUGFyYW1zICpzdHApCit7CisgICAgaWYgKE5VTEwgPT0gc3RwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1QYXJhbXM6YWRkIiwgImFkZGluZyBlbnRyeSAweCVseCAlc1xuIiwgKHVfbG9uZylzdHAsCisgICAgICAgICAgICAgICAgc3RwLT5uYW1lKSk7CisKKyAgICBpZiAoQ09OVEFJTkVSX0lOU0VSVChfdGxzdG1QYXJhbXMsIHN0cCkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgaW5zZXJ0aW5nIHRsc3RtUGFyYW1zICVzIiwgc3RwLT5uYW1lKTsKKyAgICAgICAgbmV0c25tcF90bHN0bVBhcmFtc19mcmVlKHN0cCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNUEFSQU1TX1JFTU9WRQoraW50CituZXRzbm1wX3Rsc3RtUGFyYW1zX3JlbW92ZShzbm1wVGxzdG1QYXJhbXMgKnN0cCkKK3sKKyAgICBpZiAoTlVMTCA9PSBzdHApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIERFQlVHTVNHVEwoKCJ0bHN0bVBhcmFtczpyZW1vdmUiLCAicmVtb3ZpbmcgZW50cnkgMHglbHggJXNcbiIsICh1X2xvbmcpc3RwLAorICAgICAgICAgICAgICAgIHN0cC0+bmFtZSkpOworCisgICAgaWYgKENPTlRBSU5FUl9SRU1PVkUoX3Rsc3RtUGFyYW1zLCBzdHApICE9IDApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImVycm9yIHJlbW92aW5nIHRsc3RtUGFyYW1zICVzIiwgc3RwLT5uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1QQVJBTVNfUkVNT1ZFICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTVBBUkFNU19GSU5ECitzbm1wVGxzdG1QYXJhbXMgKgorbmV0c25tcF90bHN0bVBhcmFtc19maW5kKHNubXBUbHN0bVBhcmFtcyAqc3RwKQoreworICAgIHNubXBUbHN0bVBhcmFtcyAqZm91bmQ7CisKKyAgICBpZiAoTlVMTCA9PSBzdHApCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZm91bmQgPSBDT05UQUlORVJfRklORChfdGxzdG1QYXJhbXMsIHN0cCk7CisgICAgcmV0dXJuIGZvdW5kOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1QQVJBTVNfRklORCAqLworCitzdGF0aWMgdm9pZAorX3BhcnNlX3BhcmFtcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBzbm1wVGxzdG1QYXJhbXMgKnN0cCA9IG5ldHNubXBfdGxzdG1QYXJhbXNfcmVzdG9yZV9jb21tb24oJmxpbmUpOworCisgICAgaWYgKCFzdHApCisgICAgICAgIHJldHVybjsKKworICAgIHN0cC0+ZmxhZ3MgPSBUTFNUTV9QQVJBTVNfRlJPTV9DT05GSUcgfCBUTFNUTV9QQVJBTVNfTk9OVk9MQVRJTEU7CisKKyAgICBuZXRzbm1wX3Rsc3RtUGFyYW1zX2FkZChzdHApOworfQorCitzdGF0aWMgY2hhciAqCitfZmluZF90bHN0bVBhcmFtc19maW5nZXJwcmludChjb25zdCBjaGFyICpuYW1lKQoreworICAgIHNubXBUbHN0bVBhcmFtcyBsb29rdXBfa2V5LCAqcmVzdWx0OworCisgICAgaWYgKE5VTEwgPT0gbmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsb29rdXBfa2V5Lm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKiwgbmFtZSk7CisKKyAgICByZXN1bHQgPSBDT05UQUlORVJfRklORChfdGxzdG1QYXJhbXMsICZsb29rdXBfa2V5KTsKKyAgICBpZiAoKE5VTEwgPT0gcmVzdWx0KSB8fCAoTlVMTCA9PSByZXN1bHQtPmZpbmdlcnByaW50KSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gc3RyZHVwKHJlc3VsdC0+ZmluZ2VycHJpbnQpOworfQorLyoKKyAqIEVORCBzbm1wVGxzdG1QYXJtc1RhYmxlIGRhdGEKKyAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKgorICogc25tcFRsc3RtQWRkclRhYmxlIGRhdGEKKyAqCisgKgorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIEFERFJfQ09ORklHX1RPS0VOICJzbm1wVGxzdG1BZGRyIgorc3RhdGljIHZvaWQgX3BhcnNlX2FkZHIoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpOworCitzdGF0aWMgdm9pZAorX2luaXRfdGxzdG1BZGRyKHZvaWQpCit7CisgICAgY29uc3QgY2hhciAqYWRkcl9oZWxwID0gCisgICAgICAgIEFERFJfQ09ORklHX1RPS0VOICIgdGFyZ2V0QWRkck5hbWUgaGFzaFR5cGU6ZmluZ2VycHJpbnQgc2VydmVySWRlbnRpdHkiOworICAgIAorICAgIC8qCisgICAgICogY29udGFpbmVyIGZvciBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YQorICAgICAqLworICAgIF90bHN0bUFkZHIgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJ0bHN0bUFkZHI6c3RyaW5nIik7CisgICAgaWYgKE5VTEwgPT0gX3Rsc3RtQWRkcikKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImVycm9yIGNyZWF0aW5nIHN1Yi1jb250YWluZXIgZm9yIHRsc3RtQWRkclRhYmxlXG4iKTsKKyAgICBlbHNlCisgICAgICAgIF90bHN0bUFkZHItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJ0bHN0bUFkZHIiKTsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKE5VTEwsIEFERFJfQ09ORklHX1RPS0VOLCBfcGFyc2VfYWRkciwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyX2hlbHApOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX0NPTlRBSU5FUgorbmV0c25tcF9jb250YWluZXIgKgorbmV0c25tcF90bHN0bUFkZHJfY29udGFpbmVyKHZvaWQpCit7CisgICAgcmV0dXJuIF90bHN0bUFkZHI7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfQ09OVEFJTkVSICovCisKKy8qCisgKiBjcmVhdGUgYSBuZXcgcm93IGluIHRoZSB0YWJsZSAKKyAqLworc25tcFRsc3RtQWRkciAqCituZXRzbm1wX3Rsc3RtQWRkcl9jcmVhdGUoY2hhciAqdGFyZ2V0QWRkck5hbWUpCit7CisgICAgc25tcFRsc3RtQWRkciAqZW50cnk7CisKKyAgICBpZiAoTlVMTCA9PSB0YXJnZXRBZGRyTmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBlbnRyeSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoc25tcFRsc3RtQWRkcik7CisgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBERUJVR01TR1QoKCJ0bHN0bUFkZHI6ZW50cnk6Y3JlYXRlIiwgImVudHJ5ICVwICVzXG4iLCBlbnRyeSwKKyAgICAgICAgICAgICAgIHRhcmdldEFkZHJOYW1lID8gdGFyZ2V0QWRkck5hbWUgOiAiTlVMTCIpKTsKKworICAgIGVudHJ5LT5uYW1lID0gc3RyZHVwKHRhcmdldEFkZHJOYW1lKTsKKworICAgIHJldHVybiBlbnRyeTsKK30KKwordm9pZAorbmV0c25tcF90bHN0bUFkZHJfZnJlZShzbm1wVGxzdG1BZGRyICplbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm47CisKKyAgICBTTk1QX0ZSRUUoZW50cnktPm5hbWUpOworICAgIFNOTVBfRlJFRShlbnRyeS0+ZmluZ2VycHJpbnQpOworICAgIFNOTVBfRlJFRShlbnRyeS0+aWRlbnRpdHkpOworICAgIGZyZWUoZW50cnkpOworfQorCitpbnQKK25ldHNubXBfdGxzdG1BZGRyX3Jlc3RvcmVfY29tbW9uKGNoYXIgKipsaW5lLCBjaGFyICpuYW1lLCBzaXplX3QgKm5hbWVfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqaWQsIHNpemVfdCAqaWRfbGVuLCBjaGFyICpmcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqZnBfbGVuLCB1X2NoYXIgKmh0KQoreworICAgIHNpemVfdCBmcF9sZW5fc2F2ZSA9ICpmcF9sZW47CisKKyAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZuYW1lLCBuYW1lX2xlbik7CisgICAgaWYgKE5VTEwgPT0gKmxpbmUpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiaW5jb21wbGV0ZSBsaW5lIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbmFtZVsqbmFtZV9sZW5dID0gMDsKKworICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJmZwLCBmcF9sZW4pOworICAgIGlmIChOVUxMID09ICpsaW5lKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImluY29tcGxldGUgbGluZSIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGZwWypmcF9sZW5dID0gMDsKKyAgICBpZiAoKGZwWzBdID09ICctJykgJiYgKGZwWzFdID09ICctJykpIHsKKyAgICAgICAgKmh0ID0gbmV0c25tcF9jZXJ0X3BhcnNlX2hhc2hfdHlwZSgmZnBbMl0pOworICAgICAgICAKKyAgICAgICAgLyoqIHNldCB1cCBmb3IgZmluZ2VycHJpbnQgKi8KKyAgICAgICAgKmZwX2xlbiA9IGZwX2xlbl9zYXZlOworICAgICAgICAqbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKCpsaW5lLCAodV9jaGFyICoqKSZmcCwgZnBfbGVuKTsKKyAgICAgICAgZnBbKmZwX2xlbl0gPSAwOworICAgIH0KKyAgICBlbHNlCisgICAgICAgICpodCA9IE5TX0hBU0hfU0hBMTsKKyAgICBuZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24oZnApOworICAgICpmcF9sZW4gPSBzdHJsZW4oZnApOworICAgIAorICAgICpsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoKmxpbmUsICh1X2NoYXIgKiopJmlkLCBpZF9sZW4pOworICAgIGlkWyppZF9sZW5dID0gMDsKKyAgICAKKyAgICBpZiAoKmh0IDw9IE5TX0hBU0hfTk9ORSB8fCAqaHQgPiBOU19IQVNIX01BWCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGFsZ29yaXRobSBmb3IgZmluZ2VycHJpbnQiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICgoMCA9PSAqZnBfbGVuKSAmJiAoKDAgPT0gKmlkX2xlbiB8fCAoKmlkX2xlbiA9PSAxICYmIGlkWzBdID09ICcqJykpKSkgeworICAgICAgICAvKgorICAgICAgICAgKiBlbXB0eSBmaW5nZXJwcmludCBub3QgYWxsb3dlZCB3aXRoICcqJyBpZGVudGl0eQorICAgICAgICAgKi8KKyAgICAgICAgY29uZmlnX3BlcnJvcigibXVzdCBzcGVjaWZ5IGZpbmdlcnByaW50IGZvciAnKicgaWRlbnRpdHkiKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitpbnQKK25ldHNubXBfdGxzdG1BZGRyX2FkZChzbm1wVGxzdG1BZGRyICplbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBERUJVR01TR1RMKCgidGxzdG1BZGRyOmFkZCIsICJhZGRpbmcgZW50cnkgMHglbHggJXMgJXNcbiIsCisgICAgICAgICAgICAgICAgKHVfbG9uZyllbnRyeSwgZW50cnktPm5hbWUsIGVudHJ5LT5maW5nZXJwcmludCkpOworICAgIGlmIChDT05UQUlORVJfSU5TRVJUKF90bHN0bUFkZHIsIGVudHJ5KSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgaW5zZXJ0IGFkZHIgJXMiLCBlbnRyeS0+bmFtZSk7CisgICAgICAgIG5ldHNubXBfdGxzdG1BZGRyX2ZyZWUoZW50cnkpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfUkVNT1ZFCitpbnQKK25ldHNubXBfdGxzdG1BZGRyX3JlbW92ZShzbm1wVGxzdG1BZGRyICplbnRyeSkKK3sKKyAgICBpZiAoIWVudHJ5KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBpZiAoQ09OVEFJTkVSX1JFTU9WRShfdGxzdG1BZGRyLCBlbnRyeSkgIT0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IHJlbW92ZSBhZGRyICVzIiwgZW50cnktPm5hbWUpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9UTFNUTUFERFJfUkVNT1ZFICovCisKK3N0YXRpYyB2b2lkCitfcGFyc2VfYWRkcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBzbm1wVGxzdG1BZGRyICplbnRyeTsKKyAgICBjaGFyICAgICAgICAgICBuYW1lW1NOTVBBRE1JTkxFTkdUSCAgKyAxXSwgaWRbU05NUEFETUlOTEVOR1RIICArIDFdLAorICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50W1NOTVBUTFNGSU5HRVJQUklOVF9NQVhfTEVOICsgMV07CisgICAgc2l6ZV90ICAgICAgICAgbmFtZV9sZW4gPSBzaXplb2YobmFtZSksIGlkX2xlbiA9IHNpemVvZihpZCksCisgICAgICAgICAgICAgICAgICAgZnBfbGVuID0gc2l6ZW9mKGZpbmdlcnByaW50KTsKKyAgICB1X2NoYXIgICAgICAgICBoYXNoVHlwZTsKKyAgICBpbnQgICAgICAgICAgICByYzsKKworICAgIHJjID0gbmV0c25tcF90bHN0bUFkZHJfcmVzdG9yZV9jb21tb24oJmxpbmUsIG5hbWUsICZuYW1lX2xlbiwgaWQsICZpZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCwgJmZwX2xlbiwgJmhhc2hUeXBlKTsKKyAgICBpZiAocmMgPCAwKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoTlVMTCAhPSBsaW5lKQorICAgICAgICBjb25maWdfcHdhcm4oImlnbm9yZSBleHRyYSB0b2tlbnMgb24gbGluZSIpOworCisgICAgZW50cnkgPSBuZXRzbm1wX3Rsc3RtQWRkcl9jcmVhdGUobmFtZSk7CisgICAgaWYgKE5VTEwgPT0gZW50cnkpCisgICAgICAgIHJldHVybjsKKworICAgIGVudHJ5LT5mbGFncyB8PSBUTFNUTV9BRERSX0ZST01fQ09ORklHOworICAgIGVudHJ5LT5oYXNoVHlwZSA9IGhhc2hUeXBlOworICAgIGlmIChmcF9sZW4pCisgICAgICAgIGVudHJ5LT5maW5nZXJwcmludCA9IHN0cmR1cChmaW5nZXJwcmludCk7CisgICAgaWYgKGlkX2xlbikKKyAgICAgICAgZW50cnktPmlkZW50aXR5ID0gc3RyZHVwKGlkKTsKKworICAgIG5ldHNubXBfdGxzdG1BZGRyX2FkZChlbnRyeSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19maW5kX3Rsc3RtQWRkcl9maW5nZXJwcmludChjb25zdCBjaGFyICpuYW1lKQoreworICAgIHNubXBUbHN0bUFkZHIgICAgbG9va3VwX2tleSwgKnJlc3VsdDsKKworICAgIGlmIChOVUxMID09IG5hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgbG9va3VwX2tleS5uYW1lID0gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciosIG5hbWUpOworCisgICAgcmVzdWx0ID0gQ09OVEFJTkVSX0ZJTkQoX3Rsc3RtQWRkciwgJmxvb2t1cF9rZXkpOworICAgIGlmIChOVUxMID09IHJlc3VsdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gcmVzdWx0LT5maW5nZXJwcmludDsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RMU1RNQUREUl9HRVRfU0VSVkVSSUQKK2NoYXIgKgorbmV0c25tcF90bHN0bUFkZHJfZ2V0X3NlcnZlcklkKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc25tcFRsc3RtQWRkciAgICBsb29rdXBfa2V5LCAqcmVzdWx0OworCisgICAgaWYgKE5VTEwgPT0gbmFtZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsb29rdXBfa2V5Lm5hbWUgPSBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyKiwgbmFtZSk7CisKKyAgICByZXN1bHQgPSBDT05UQUlORVJfRklORChfdGxzdG1BZGRyLCAmbG9va3VwX2tleSk7CisgICAgaWYgKE5VTEwgPT0gcmVzdWx0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiByZXN1bHQtPmlkZW50aXR5OworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVExTVE1BRERSX0dFVF9TRVJWRVJJRCAqLworLyoKKyAqIEVORCBzbm1wVGxzdG1BZGRyVGFibGUgZGF0YQorICogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisjZWxzZQorbmV0c25tcF9mZWF0dXJlX3VudXNlZChjZXJ0X3V0aWwpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9VVElMICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGNlcnRfdXRpbCk7CisjZW5kaWYgLyogZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSAmJiBkZWZpbmVkKEhBVkVfTElCU1NMKSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9jaGVja192YXJiaW5kLmMgYi9zbm1wbGliL2NoZWNrX3ZhcmJpbmQuYwppbmRleCBjNjZmMDczLi4xMmI3YTUyIDEwMDY0NAotLS0gYS9zbm1wbGliL2NoZWNrX3ZhcmJpbmQuYworKysgYi9zbm1wbGliL2NoZWNrX3ZhcmJpbmQuYwpAQCAtMSw5ICsxLDI3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NoZWNrX3ZhcmJpbmQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZhcmJpbmRfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfcmFuZ2UsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3NpemVfcmFuZ2UsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3VpbnQsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3N0b3JhZ2V0eXBlLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl9vaWQsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplLCBjaGVja192YXJiaW5kX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZSwgY2hlY2tfdmFyYmluZF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfdmJfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGUsIGNoZWNrX3ZhcmJpbmRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNoZWNrX3ZiX3RydXRodmFsdWUsIGNoZWNrX3ZhcmJpbmRfYWxsKQorCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ0hFQ0tfVkJfUk9XU1RBVFVTX1dJVEhfU1RPUkFHRVRZUEUKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNoZWNrX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlX3RyYW5zaXRpb24pCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVTX0NIRUNLX1ZCX1JPV1NUQVRVU19XSVRIX1NUT1JBR0VUWVBFICovCisKKwogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3R5cGUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIsIGludCB0eXBlICkKIHsKQEAgLTQ5LDYgKzY3LDcgQEAKICAgICByZXR1cm4gcmM7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9SQU5HRQogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3JhbmdlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93LCBzaXplX3QgaGlnaCApCkBAIC01OCwxMyArNzcsMTUgQEAKICAgICBpZiAoTlVMTCA9PSB2YXIpCiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgCi0gICAgaWYgKCgqdmFyLT52YWwuaW50ZWdlciA8IGxvdykgfHwgKCp2YXItPnZhbC5pbnRlZ2VyID4gaGlnaCkpIHsKKyAgICBpZiAoKChzaXplX3QpKnZhci0+dmFsLmludGVnZXIgPCBsb3cpIHx8ICgoc2l6ZV90KSp2YXItPnZhbC5pbnRlZ2VyID4gaGlnaCkpIHsKICAgICAgICAgcmMgPSBTTk1QX0VSUl9XUk9OR1ZBTFVFOwogICAgIH0KIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1JBTkdFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9TSVpFX1JBTkdFCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfc2l6ZV9yYW5nZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbG93LCBzaXplX3QgaGlnaCApCkBAIC04MCw2ICsxMDEsNyBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfU0laRV9SQU5HRSAqLwogCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKQEAgLTk4LDYgKzEyMCw3IEBACiAgICAgcmV0dXJuIHJjOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfVFlQRV9BTkRfTUFYX1NJWkUKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9tYXhfc2l6ZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgdHlwZSwgc2l6ZV90IHNpemUpCkBAIC0xMTQsNyArMTM3LDkgQEAKIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1RZUEVfQU5EX01BWF9TSVpFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9PSUQKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl9vaWQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpCiB7CkBAIC0xMzAsNiArMTU1LDcgQEAKIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX09JRCAqLwogCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfaW50KGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKQpAQCAtMTQwLDYgKzE2Niw3IEBACiAgICAgcmV0dXJuIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZSh2YXIsIEFTTl9JTlRFR0VSLCBzaXplb2YobG9uZykpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfVUlOVAogTkVUU05NUF9JTkxJTkUgaW50CiBuZXRzbm1wX2NoZWNrX3ZiX3VpbnQoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpCiB7CkBAIC0xNDgsNiArMTc1LDcgQEAKICAgICAKICAgICByZXR1cm4gbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplKHZhciwgQVNOX1VOU0lHTkVELCBzaXplb2YobG9uZykpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfVUlOVCAqLwogCiBORVRTTk1QX0lOTElORSBpbnQKIG5ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCBpbnQgbG93LCBpbnQgaGlnaCkKQEAgLTE2Nyw2ICsxOTUsNyBAQAogICAgIHJldHVybiByYzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1ZCX1RSVVRIVkFMVUUKIGludAogbmV0c25tcF9jaGVja192Yl90cnV0aHZhbHVlKGNvbnN0IG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyKQogewpAQCAtMTgwLDYgKzIwOSw3IEBACiAgICAgCiAgICAgcmV0dXJuIG5ldHNubXBfY2hlY2tfdmJfaW50X3JhbmdlKHZhciwgMSwgMik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9UUlVUSFZBTFVFICovCiAKIE5FVFNOTVBfSU5MSU5FIGludAogbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfdmFsdWUoY29uc3QgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXIpCkBAIC0yMTMsNiArMjQzLDI2IEBACiAgICAgcmV0dXJuIGNoZWNrX3Jvd3N0YXR1c190cmFuc2l0aW9uKG9sZF92YWx1ZSwgKnZhci0+dmFsLmludGVnZXIpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfUk9XU1RBVFVTX1dJVEhfU1RPUkFHRVRZUEUKK2ludAorbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9sZF92YWx1ZSwgaW50IG9sZF9zdG9yYWdlKQoreworICAgIHJlZ2lzdGVyIGludCByYyA9IFNOTVBfRVJSX05PRVJST1I7CisKKyAgICBpZiAoTlVMTCA9PSB2YXIpCisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisKKyAgICBpZiAoKHJjID0gbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfdmFsdWUodmFyKSkpCisgICAgICAgIHJldHVybiByYzsKKworICAgIHJldHVybiBjaGVja19yb3dzdGF0dXNfd2l0aF9zdG9yYWdldHlwZV90cmFuc2l0aW9uKG9sZF92YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqdmFyLT52YWwuaW50ZWdlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRfc3RvcmFnZSk7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19WQl9ST1dTVEFUVVNfV0lUSF9TVE9SQUdFVFlQRSAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfU1RPUkFHRVRZUEUKIGludAogbmV0c25tcF9jaGVja192Yl9zdG9yYWdldHlwZShjb25zdCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhciwgaW50IG9sZF92YWx1ZSkKIHsKQEAgLTIzMCwzICsyODAsNCBAQAogICAgICAgICAKICAgICByZXR1cm4gY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uKG9sZF92YWx1ZSwgKnZhci0+dmFsLmludGVnZXIpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfVkJfU1RPUkFHRVRZUEUgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvY2xvc2VkaXIuYyBiL3NubXBsaWIvY2xvc2VkaXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzRjNTBlCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9jbG9zZWRpci5jCkBAIC0wLDAgKzEsMjAgQEAKKy8qCisgKiBjbG9zZWRpcigpIHJlcGxhY2VtZW50IGZvciBNU1ZDLgorICovCisKKyNkZWZpbmUgV0lOMzJJT19JU19TVERJTworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorCisvKgorICogZnJlZSB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBvcGVuZGlyIAorICovCitpbnQKK2Nsb3NlZGlyKERJUiAqIGRpcnApCit7CisgICAgZnJlZShkaXJwLT5zdGFydCk7CisgICAgZnJlZShkaXJwKTsKKyAgICByZXR1cm4gMTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvY211X2NvbXBhdC5jIGIvc25tcGxpYi9jbXVfY29tcGF0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJkNDVhYmEuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9jbXVfY29tcGF0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw5MSArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpZmRlZiBDTVVfQ09NUEFUSUJMRQotCi0jaW5jbHVkZSA8bmV0LXNubXAvbWliX2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL3BkdV9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9zZXNzaW9uX2FwaS5oPgotCi1pbnQKLW1pYl9UeHRUb09pZChjaGFyICpCdWYsIG9pZCAqKiBPaWRQLCBzaXplX3QgKiBMZW5QKQotewotICAgIHJldHVybiByZWFkX29iamlkKEJ1ZiwgKk9pZFAsIExlblApOwotfQotCi1pbnQKLW1pYl9PaWRUb1R4dChvaWQgKiBPLCBzaXplX3QgT2lkTGVuLCBjaGFyICpCdWYsIHNpemVfdCBCdWZMZW4pCi17Ci0gICAgX3NwcmludF9vYmppZChCdWYsIE8sIE9pZExlbik7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLQotLyoKLSAqIGNtdV9zbm1wX3BhcnNlIC0gZW11bGF0ZSBDTVUgbGlicmFyeSdzIHNubXBfcGFyc2UuCi0gKgotICogUGFyc2UgcGFja2V0LCBzdG9yaW5nIHJlc3VsdHMgaW50byBQRFUuCi0gKiBSZXR1cm5zIGNvbW11bml0eSBzdHJpbmcgaWYgc3VjY2VzcywgTlVMTCBpZiBmYWlsLgotICogV0FSTklORzogbWF5IHJldHVybiBhIHplcm8gbGVuZ3RoIGNvbW11bml0eSBzdHJpbmcuCi0gKgotICogTm90ZToKLSAqIFNvbWUgQ01VLWF3YXJlIGFwcHMgY2FsbCBpbml0X21pYigpLCBidXQgZG8gbm90Ci0gKiBpbml0aWFsaXplIGEgc2Vzc2lvbi4KLSAqIENoZWNrIFJlcWlkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgbW9kdWxlIGlzIGluaXRpYWxpemVkLgotICovCi0KLXVfY2hhciAgICAgICAgICoKLWNtdV9zbm1wX3BhcnNlKG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCi0gICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1LCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuZ3RoKQotewotICAgIHVfY2hhciAgICAgICAgICpidWZwID0gTlVMTDsKLQotICAgIHNubXBfc2Vzc19pbml0KHNlc3Npb24pOyAgICAvKiBnaW1tZSBhIGJyZWFrISAqLwotCi0gICAgc3dpdGNoIChwZHUtPnZlcnNpb24pIHsKLSAgICBjYXNlIFNOTVBfVkVSU0lPTl8xOgotICAgIGNhc2UgU05NUF9WRVJTSU9OXzJjOgotICAgIGNhc2UgU05NUF9ERUZBVUxUX1ZFUlNJT046Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSNpZm5kZWYgTk9fSU5URVJOQUxfVkFSTElTVAotICAgIGlmIChzbm1wX3BhcnNlKDAsIHNlc3Npb24sIHBkdSwgZGF0YSwgbGVuZ3RoKSAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSNlbHNlCi0gICAgLyoKLSAgICAgKiB3aGlsZSB0aGVyZSBhcmUgdHdvIHZlcnNpb25zIG9mIHZhcmlhYmxlX2xpc3Q6Ci0gICAgICogdXNlIGFuIGludGVybmFsIHZhcmlhYmxlIGxpc3QgZm9yIHNubXBfcGFyc2U7Ci0gICAgICogY2xvbmUgdGhlIHJlc3VsdC4KLSAgICAgKi8KLSAgICBpZiAoMSkgewotICAgICAgICBuZXRzbm1wX3BkdSAgICAqc25tcF9jbG9uZV9wZHUobmV0c25tcF9wZHUgKik7Ci0gICAgICAgIG5ldHNubXBfcGR1ICAgICpzbm1wXzJjbG9uZV9wZHUobmV0c25tcF9wZHUgKmZyb21fcGR1LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICp0b19wZHUpOwotCi0gICAgICAgIG5ldHNubXBfcGR1ICAgICppcGR1OwotICAgICAgICBpcGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKLSAgICAgICAgaWYgKHNubXBfcGFyc2UoMCwgc2Vzc2lvbiwgaXBkdSwgZGF0YSwgbGVuZ3RoKSAhPSBTTk1QX0VSUl9OT0VSUk9SKSB7Ci0gICAgICAgICAgICBzbm1wX2ZyZWVfaW50ZXJuYWxfcGR1KGlwZHUpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgcGR1ID0gc25tcF8yY2xvbmVfcGR1KGlwZHUsIHBkdSk7Ci0gICAgICAgIHNubXBfZnJlZV9pbnRlcm5hbF9wZHUoaXBkdSk7Ci0gICAgfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBOT19JTlRFUk5BTF9WQVJfTElTVCAqLwotCi0gICAgLyoKLSAgICAgKiBBZGQgYSBudWxsIHRvIG1lZXQgdGhlIGNhbGxlcidzIGV4cGVjdGF0aW9ucy4gCi0gICAgICovCi0KLSAgICBidWZwID0gKHVfY2hhciAqKSBtYWxsb2MoMSArIHBkdS0+Y29tbXVuaXR5X2xlbik7Ci0gICAgaWYgKGJ1ZnAgJiYgcGR1LT5jb21tdW5pdHlfbGVuKSB7Ci0gICAgICAgIG1lbWNweShidWZwLCBwZHUtPmNvbW11bml0eSwgcGR1LT5jb21tdW5pdHlfbGVuKTsKLSAgICAgICAgYnVmcFtwZHUtPmNvbW11bml0eV9sZW5dID0gJ1wwJzsKLSAgICB9Ci0gICAgcmV0dXJuIChidWZwKTsKLX0KLQotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNVV9DT01QQVRJQkxFICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2NvbnRhaW5lci5jIGIvc25tcGxpYi9jb250YWluZXIuYwppbmRleCAwOGE0YzYzLi5iMmFjOTdlIDEwMDY0NAotLS0gYS9zbm1wbGliL2NvbnRhaW5lci5jCisrKyBiL3NubXBsaWIvY29udGFpbmVyLmMKQEAgLTEsMTAgKzEsMzkgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2JpbmFyeV9hcnJheS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX251bGwuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfZmFjdG9yaWVzLCBjb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl90eXBlcywgY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfY29tcGFyZSwgY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfZHVwLCBjb250YWluZXJfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9mcmVlX2FsbCwgY29udGFpbmVyX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzdWJjb250YWluZXJfZmluZCwgY29udGFpbmVyX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9uY29tcGFyZV9jc3RyaW5nLCBjb250YWluZXJfY29tcGFyZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfY29tcGFyZV9tZW0sIGNvbnRhaW5lcl9jb21wYXJlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9jb21wYXJlX2xvbmcsIGNvbnRhaW5lcl9jb21wYXJlKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9jb21wYXJlX3Vsb25nLCBjb250YWluZXJfY29tcGFyZSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfY29tcGFyZV9pbnQzMiwgY29udGFpbmVyX2NvbXBhcmUpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2NvbXBhcmVfdWludDMyLCBjb250YWluZXJfY29tcGFyZSkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9maW5kX2ZhY3RvcnksIGNvbnRhaW5lcl9mYWN0b3JpZXMpCisKIC8qKiBAZGVmZ3JvdXAgY29udGFpbmVyIGNvbnRhaW5lcgogICovCiAKQEAgLTUyLDI5ICs4MSw0MSBAQAogICAgICAqLwogICAgIGNvbnRhaW5lcnMgPSBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfYmluYXJ5X2FycmF5KCk7CiAgICAgY29udGFpbmVycy0+Y29tcGFyZSA9IG5ldHNubXBfY29tcGFyZV9jc3RyaW5nOworICAgIGNvbnRhaW5lcnMtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKCJjb250YWluZXIgbGlzdCIpOwogCiAgICAgLyoKICAgICAgKiByZWdpc3RlciBjb250YWluZXJzCiAgICAgICovCiAgICAgbmV0c25tcF9jb250YWluZXJfYmluYXJ5X2FycmF5X2luaXQoKTsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9zc2xsX2luaXQoKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVCAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9OVUxMCiAgICAgbmV0c25tcF9jb250YWluZXJfbnVsbF9pbml0KCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTlVMTCAqLwogCiAgICAgLyoKICAgICAgKiBkZWZhdWx0IGFsaWFzZXMgZm9yIHNvbWUgY29udGFpbmVycwogICAgICAqLwogICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyKCJ0YWJsZV9jb250YWluZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJiaW5hcnlfYXJyYXkiKSk7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9yZWdpc3RlcigibGlua2VkX2xpc3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJzb3J0ZWRfc2luZ2x5X2xpbmtlZF9saXN0IikpOwogICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyKCJzc2xsX2NvbnRhaW5lciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoInNvcnRlZF9zaW5nbHlfbGlua2VkX2xpc3QiKSk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QgKi8KKworICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyX3dpdGhfY29tcGFyZQorICAgICAgICAoImNzdHJpbmciLCBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgiYmluYXJ5X2FycmF5IiksCisgICAgICAgICBuZXRzbm1wX2NvbXBhcmVfZGlyZWN0X2NzdHJpbmcpOwogCiAgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXJfd2l0aF9jb21wYXJlCiAgICAgICAgICgic3RyaW5nIiwgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZhY3RvcnkoImJpbmFyeV9hcnJheSIpLAogICAgICAgICAgbmV0c25tcF9jb21wYXJlX2NzdHJpbmcpOwogICAgIG5ldHNubXBfY29udGFpbmVyX3JlZ2lzdGVyX3dpdGhfY29tcGFyZQotICAgICAgICAoInN0cmluZzpiaW5hcnlfYXJyYXkiLCBuZXRzbm1wX2NvbnRhaW5lcl9nZXRfZmFjdG9yeSgiYmluYXJ5X2FycmF5IiksCisgICAgICAgICgic3RyaW5nX2JpbmFyeV9hcnJheSIsIG5ldHNubXBfY29udGFpbmVyX2dldF9mYWN0b3J5KCJiaW5hcnlfYXJyYXkiKSwKICAgICAgICAgIG5ldHNubXBfY29tcGFyZV9jc3RyaW5nKTsKIAogfQpAQCAtMTUxLDYgKzE5Miw3IEBACiAgICAgcmV0dXJuIGZvdW5kID8gZm91bmQtPmZhY3RvcnkgOiBOVUxMOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0ZJTkRfRkFDVE9SWQogbmV0c25tcF9mYWN0b3J5ICoKIG5ldHNubXBfY29udGFpbmVyX2ZpbmRfZmFjdG9yeShjb25zdCBjaGFyICp0eXBlX2xpc3QpCiB7CkBAIC0xNzMsNiArMjE1LDcgQEAKICAgICBmcmVlKGxpc3QpOwogICAgIHJldHVybiBmOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0ZJTkRfRkFDVE9SWSAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCkBAIC0yNzEsOCArMzE0LDYgQEAKICAgICBuZXdfaW5kZXgtPnByZXYgPSBjdXJyOwogfQogCi0jaWZuZGVmIE5FVFNOTVBfVVNFX0lOTElORSAvKiBkZWZhdWx0IGlzIHRvIGlubGluZSAqLwotCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBpbmxpbmUgdmVyc2lvbiBpbgogICogY29udGFpbmVyLmguIElmIHlvdSBjaGFuZ2Ugb25lLCBjaGFuZ2UgdGhlbSBib3RoLgpAQCAtMzIzLDcgKzM2NCw4IEBACiAgICAgICAgIHJjMiA9IHgtPnJlbW92ZSh4LGspOwogICAgICAgICAvKiogaWdub3JlIHJlbW92ZSBlcnJvcnMgaWYgdGhlcmUgaXMgYSBmaWx0ZXIgaW4gcGxhY2UgKi8KICAgICAgICAgaWYgKChyYzIpICYmIChOVUxMID09IHgtPmluc2VydF9maWx0ZXIpKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBvbiBzdWJjb250YWluZXIgcmVtb3ZlICglZClcbiIsIHJjMik7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBvbiBzdWJjb250YWluZXIgJyVzJyByZW1vdmUgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHgtPmNvbnRhaW5lcl9uYW1lID8geC0+Y29udGFpbmVyX25hbWUgOiAiIiwgcmMyKTsKICAgICAgICAgICAgIHJjID0gcmMyOwogICAgICAgICB9CiAgICAgICAgIHggPSB4LT5wcmV2OwpAQCAtMzMzLDYgKzM3NSwyMiBAQAogfQogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogVGhlc2UgZnVuY3Rpb25zIHNob3VsZCBFWEFDVExZIG1hdGNoIHRoZSBmdW5jdGlvbiB2ZXJzaW9uIGluCisgKiBjb250YWluZXIuYy4gSWYgeW91IGNoYW5nZSBvbmUsIGNoYW5nZSB0aGVtIGJvdGguCisgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRFVQCituZXRzbm1wX2NvbnRhaW5lciAqQ09OVEFJTkVSX0RVUChuZXRzbm1wX2NvbnRhaW5lciAqeCwgdm9pZCAqY3R4LCB1X2ludCBmbGFncykKK3sKKyAgICBpZiAoTlVMTCA9PSB4LT5kdXBsaWNhdGUpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvbnRhaW5lciAnJXMnIGRvZXMgbm90IHN1cHBvcnQgZHVwbGljYXRlXG4iLAorICAgICAgICAgICAgICAgICB4LT5jb250YWluZXJfbmFtZSA/IHgtPmNvbnRhaW5lcl9uYW1lIDogIiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgcmV0dXJuIHgtPmR1cGxpY2F0ZSh4LCBjdHgsIGZsYWdzKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9EVVAgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFRoZXNlIGZ1bmN0aW9ucyBzaG91bGQgRVhBQ1RMWSBtYXRjaCB0aGUgaW5saW5lIHZlcnNpb24gaW4KICAqIGNvbnRhaW5lci5oLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KICAqLwpAQCAtMzQ1LDE0ICs0MDMsMTcgQEAKICAgICAgICAgeCA9IHgtPm5leHQ7CiAgICAgd2hpbGUoeCkgewogICAgICAgICBuZXRzbm1wX2NvbnRhaW5lciAqdG1wOworICAgICAgICBjaGFyICpuYW1lOwogICAgICAgICB0bXAgPSB4LT5wcmV2OwotICAgICAgICBpZiAoTlVMTCAhPSB4LT5jb250YWluZXJfbmFtZSkKLSAgICAgICAgICAgIFNOTVBfRlJFRSh4LT5jb250YWluZXJfbmFtZSk7CisgICAgICAgIG5hbWUgPSB4LT5jb250YWluZXJfbmFtZTsKKyAgICAgICAgeC0+Y29udGFpbmVyX25hbWUgPSBOVUxMOwogICAgICAgICByYzIgPSB4LT5jZnJlZSh4KTsKICAgICAgICAgaWYgKHJjMikgewotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiZXJyb3Igb24gc3ViY29udGFpbmVyIGNmcmVlICglZClcbiIsIHJjMik7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJlcnJvciBvbiBzdWJjb250YWluZXIgJyVzJyBjZnJlZSAoJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICAgbmFtZSA/IG5hbWUgOiAiIiwgcmMyKTsKICAgICAgICAgICAgIHJjID0gcmMyOwogICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShuYW1lKTsKICAgICAgICAgeCA9IHRtcDsKICAgICB9CiAgICAgcmV0dXJuIHJjOwpAQCAtMzgwLDYgKzQ0MSwxOSBAQAogICAgIHgtPmNsZWFyKHgsIGYsIGMpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0ZSRUVfQUxMCisvKgorICogY2xlYXIgYWxsIGNvbnRhaW5lcnMuIFdoZW4gY2xlYXJpbmcgdGhlICpmaXJzdCogY29udGFpbmVyLCBhbmQKKyAqICpvbmx5KiB0aGUgZmlyc3QgY29udGFpbmVyLCBjYWxsIHRoZSBmcmVlX2l0ZW0gZnVuY3Rpb24gZm9yIGVhY2ggaXRlbS4KKyAqIEFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbiwgYWxsIGNvbnRhaW5lcnMgc2hvdWxkIGJlIGVtcHR5LgorICovCit2b2lkIENPTlRBSU5FUl9GUkVFX0FMTChuZXRzbm1wX2NvbnRhaW5lciAqeCwgdm9pZCAqYykKK3sKKyAgICBDT05UQUlORVJfQ0xFQVIoeCwgeC0+ZnJlZV9pdGVtLCBjKTsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9GUkVFX0FMTCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1VCQ09OVEFJTkVSX0ZJTkQKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgKiBUaGVzZSBmdW5jdGlvbnMgc2hvdWxkIEVYQUNUTFkgbWF0Y2ggdGhlIGZ1bmN0aW9uIHZlcnNpb24gaW4KICAqIGNvbnRhaW5lci5jLiBJZiB5b3UgY2hhbmdlIG9uZSwgY2hhbmdlIHRoZW0gYm90aC4KQEAgLTQwMyw3ICs0NzcsNyBAQAogICAgIH0KICAgICByZXR1cm4geDsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1VCQ09OVEFJTkVSX0ZJTkQgKi8KIAogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDI4LDYgKzUwMiwyNiBAQAogICAgIGMtPmluc2VydCA9IGluczsKICAgICBjLT5yZW1vdmUgPSByZW07CiAgICAgYy0+ZmluZCA9IGZuZDsKKyAgICBjLT5mcmVlX2l0ZW0gPSBuZXRzbm1wX2NvbnRhaW5lcl9zaW1wbGVfZnJlZTsKK30KKworaW50CituZXRzbm1wX2NvbnRhaW5lcl9kYXRhX2R1cChuZXRzbm1wX2NvbnRhaW5lciAqZHVwLCBuZXRzbm1wX2NvbnRhaW5lciAqYykKK3sKKyAgICBpZiAoIWR1cCB8fCAhYykKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgaWYgKGMtPmNvbnRhaW5lcl9uYW1lKQorICAgICAgICBkdXAtPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKGMtPmNvbnRhaW5lcl9uYW1lKTsKKyAgICBkdXAtPmNvbXBhcmUgPSBjLT5jb21wYXJlOworICAgIGR1cC0+bmNvbXBhcmUgPSBjLT5uY29tcGFyZTsKKyAgICBkdXAtPnJlbGVhc2UgPSBjLT5yZWxlYXNlOworICAgIGR1cC0+aW5zZXJ0X2ZpbHRlciA9IGMtPmluc2VydF9maWx0ZXI7CisgICAgZHVwLT5mcmVlX2l0ZW0gPSBjLT5mcmVlX2l0ZW07CisgICAgZHVwLT5zeW5jID0gYy0+c3luYzsKKyAgICBkdXAtPmZsYWdzID0gYy0+ZmxhZ3M7CisKKyAgICByZXR1cm4gMDsKIH0KIAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ4Nyw2ICs1ODEsNyBAQAogICAgICAgICAgICAgICAgICAgKChjb25zdCBjb250YWluZXJfdHlwZSopcmhzKS0+bmFtZSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTkNPTVBBUkVfQ1NUUklORwogaW50CiBuZXRzbm1wX25jb21wYXJlX2NzdHJpbmcoY29uc3Qgdm9pZCAqIGxocywgY29uc3Qgdm9pZCAqIHJocykKIHsKQEAgLTQ5NCw2ICs1ODksMTMgQEAKICAgICAgICAgICAgICAgICAgICAoKGNvbnN0IGNvbnRhaW5lcl90eXBlKilyaHMpLT5uYW1lLAogICAgICAgICAgICAgICAgICAgIHN0cmxlbigoKGNvbnN0IGNvbnRhaW5lcl90eXBlKilyaHMpLT5uYW1lKSk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTkNPTVBBUkVfQ1NUUklORyAqLworCitpbnQKK25ldHNubXBfY29tcGFyZV9kaXJlY3RfY3N0cmluZyhjb25zdCB2b2lkICogbGhzLCBjb25zdCB2b2lkICogcmhzKQoreworICAgIHJldHVybiBzdHJjbXAoKGNvbnN0IGNoYXIqKWxocywgKGNvbnN0IGNoYXIqKXJocyk7Cit9CiAKIC8qCiAgKiBjb21wYXJlIHR3byBtZW1vcnkgYnVmZmVycwpAQCAtNTAyLDYgKzYwNCw3IEBACiAgKiBjb21wYXJlIHVwIHRvIHRoZSBsZW5ndGggb2YgdGhlIHNtYWxsZXIsIGFuZCB0aGVuIHVzZSBsZW5ndGggdG8KICAqIGJyZWFrIGFueSB0aWVzLgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfTUVNCiBpbnQKIG5ldHNubXBfY29tcGFyZV9tZW0oY29uc3QgY2hhciAqIGxocywgc2l6ZV90IGxoc19sZW4sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiByaHMsIHNpemVfdCByaHNfbGVuKQpAQCAtNTE4LDYgKzYyMSw3OSBAQAogCiAgICAgcmV0dXJuIHJjOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfTUVNICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9MT05HCitpbnQKK25ldHNubXBfY29tcGFyZV9sb25nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeyBsb25nIGluZGV4OyB9IGR1bW15OworCisgICAgY29uc3QgZHVtbXkgKmxoZCA9IChjb25zdCBkdW1teSopbGhzOworICAgIGNvbnN0IGR1bW15ICpyaGQgPSAoY29uc3QgZHVtbXkqKXJoczsKKworICAgIGlmIChsaGQtPmluZGV4IDwgcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGxoZC0+aW5kZXggPiByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfTE9ORyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfVUxPTkcKK2ludAorbmV0c25tcF9jb21wYXJlX3Vsb25nKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeyB1X2xvbmcgaW5kZXg7IH0gZHVtbXk7CisKKyAgICBjb25zdCBkdW1teSAqbGhkID0gKGNvbnN0IGR1bW15KilsaHM7CisgICAgY29uc3QgZHVtbXkgKnJoZCA9IChjb25zdCBkdW1teSopcmhzOworCisgICAgaWYgKGxoZC0+aW5kZXggPCByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gLTE7CisgICAgZWxzZSBpZiAobGhkLT5pbmRleCA+IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAxOworCisgICAgcmV0dXJuIDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfQ09NUEFSRV9VTE9ORyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfSU5UMzIKK2ludAorbmV0c25tcF9jb21wYXJlX2ludDMyKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeyBpbnQzMl90IGluZGV4OyB9IGR1bW15OworCisgICAgY29uc3QgZHVtbXkgKmxoZCA9IChjb25zdCBkdW1teSopbGhzOworICAgIGNvbnN0IGR1bW15ICpyaGQgPSAoY29uc3QgZHVtbXkqKXJoczsKKworICAgIGlmIChsaGQtPmluZGV4IDwgcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIC0xOworICAgIGVsc2UgaWYgKGxoZC0+aW5kZXggPiByaGQtPmluZGV4KQorICAgICAgICByZXR1cm4gMTsKKworICAgIHJldHVybiAwOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0NPTVBBUkVfSU5UMzIgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX1VJTlQzMgoraW50CituZXRzbm1wX2NvbXBhcmVfdWludDMyKGNvbnN0IHZvaWQgKiBsaHMsIGNvbnN0IHZvaWQgKiByaHMpCit7CisgICAgdHlwZWRlZiBzdHJ1Y3QgeyB1aW50MzJfdCBpbmRleDsgfSBkdW1teTsKKworICAgIGNvbnN0IGR1bW15ICpsaGQgPSAoY29uc3QgZHVtbXkqKWxoczsKKyAgICBjb25zdCBkdW1teSAqcmhkID0gKGNvbnN0IGR1bW15KilyaHM7CisKKyAgICBpZiAobGhkLT5pbmRleCA8IHJoZC0+aW5kZXgpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBlbHNlIGlmIChsaGQtPmluZGV4ID4gcmhkLT5pbmRleCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9DT01QQVJFX1VJTlQzMiAqLwogCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogbmV0c25tcF9jb250YWluZXJfc2ltcGxlX2ZyZWUKZGlmZiAtLWdpdCBhL3NubXBsaWIvY29udGFpbmVyX2JpbmFyeV9hcnJheS5jIGIvc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMKaW5kZXggNDNlZmM0Yi4uMGY1Y2Y2MiAxMDA2NDQKLS0tIGEvc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMKKysrIGIvc25tcGxpYi9jb250YWluZXJfYmluYXJ5X2FycmF5LmMKQEAgLTM2LDkgKzM2LDcgQEAKIHR5cGVkZWYgc3RydWN0IGJpbmFyeV9hcnJheV90YWJsZV9zIHsKICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBtYXhfc2l6ZTsgICAvKiBTaXplIG9mIHRoZSBjdXJyZW50IGRhdGEgdGFibGUgKi8KICAgICBzaXplX3QgICAgICAgICAgICAgICAgICAgICBjb3VudDsgICAgICAvKiBJbmRleCBvZiB0aGUgbmV4dCBmcmVlIGVudHJ5ICovCi0gICAgdV9pbnQgICAgICAgICAgICAgICAgICAgICAgZmxhZ3M7ICAgICAgLyogZmxhZ3MgKi8KICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBkaXJ0eTsKLSAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBkYXRhX3NpemU7ICAvKiBTaXplIG9mIGFuIGluZGl2aWR1YWwgZW50cnkgKi8KICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAgKipkYXRhOyAgICAgICAvKiBUaGUgdGFibGUgaXRzZWxmICovCiB9IGJpbmFyeV9hcnJheV90YWJsZTsKIApAQCAtNjYsOSArNjQsOSBAQAogICAgIG1pZCA9IGRhdGFbKGZpcnN0K2xhc3QpLzJdOwogICAgIAogICAgIGRvIHsKLSAgICAgICAgd2hpbGUgKCAoKCpmKShkYXRhW2ldLCBtaWQpIDwgMCkgJiYgKGkgPCBsYXN0KSkKKyAgICAgICAgd2hpbGUgKGkgPCBsYXN0ICYmICgqZikoZGF0YVtpXSwgbWlkKSA8IDApCiAgICAgICAgICAgICArK2k7Ci0gICAgICAgIHdoaWxlICggKCgqZikobWlkLCBkYXRhW2pdKSA8IDApICYmIChqID4gZmlyc3QpKQorICAgICAgICB3aGlsZSAoaiA+IGZpcnN0ICYmICgqZikobWlkLCBkYXRhW2pdKSA8IDApCiAgICAgICAgICAgICAtLWo7CiAKICAgICAgICAgaWYoaSA8IGopIHsKQEAgLTk5LDcgKzk3LDcgQEAKICAgICBuZXRzbm1wX2Fzc2VydCh0IT1OVUxMKTsKICAgICBuZXRzbm1wX2Fzc2VydChjLT5jb21wYXJlIT1OVUxMKTsKIAotICAgIGlmICh0LT5mbGFncyAmIENPTlRBSU5FUl9LRVlfVU5TT1JURUQpCisgICAgaWYgKGMtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9VTlNPUlRFRCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAodC0+ZGlydHkpIHsKQEAgLTExMCw2ICsxMDgsOSBAQAogICAgICAgICAgICAgYXJyYXlfcXNvcnQodC0+ZGF0YSwgMCwgdC0+Y291bnQgLSAxLCBjLT5jb21wYXJlKTsKICAgICAgICAgdC0+ZGlydHkgPSAwOwogCisgICAgICAgIC8qCisgICAgICAgICAqIG5vIHdheSB0byBrbm93IGlmIGl0IGFjdHVhbGx5IGNoYW5nZWQuLi4ganVzdCBhc3N1bWUgc28uCisgICAgICAgICAqLwogICAgICAgICArK2MtPnN5bmM7CiAgICAgfQogCkBAIC0xMTcsNiArMTE4LDMyIEBACiB9CiAKIHN0YXRpYyBpbnQKK2xpbmVhcl9zZWFyY2goY29uc3Qgdm9pZCAqdmFsLCBuZXRzbm1wX2NvbnRhaW5lciAqYykKK3sKKyAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKKyAgICBzaXplX3QgICAgICAgICAgICAgcG9zID0gMDsKKworICAgIGlmICghdC0+Y291bnQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGlmICghIChjLT5mbGFncyAmIENPTlRBSU5FUl9LRVlfVU5TT1JURUQpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJsaW5lYXIgc2VhcmNoIG9uIHNvcnRlZCBjb250YWluZXIgJXM/IT9cbiIsCisgICAgICAgICAgICAgICAgIGMtPmNvbnRhaW5lcl9uYW1lKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGZvciAoOyBwb3MgPCB0LT5jb3VudDsgKytwb3MpIHsKKyAgICAgICAgaWYgKGMtPmNvbXBhcmUodC0+ZGF0YVtwb3NdLCB2YWwpID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAocG9zID49IHQtPmNvdW50KQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gcG9zOworfQorCitzdGF0aWMgaW50CiBiaW5hcnlfc2VhcmNoKGNvbnN0IHZvaWQgKnZhbCwgbmV0c25tcF9jb250YWluZXIgKmMsIGludCBleGFjdCkKIHsKICAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKQEAgLTEyOSw2ICsxNTYsMTUgQEAKICAgICBpZiAoIWxlbikKICAgICAgICAgcmV0dXJuIC0xOwogCisgICAgaWYgKGMtPmZsYWdzICYgQ09OVEFJTkVSX0tFWV9VTlNPUlRFRCkgeworICAgICAgICBpZiAoIWV4YWN0KSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm9uLWV4YWN0IHNlYXJjaCBvbiB1bnNvcnRlZCBjb250YWluZXIgJXM/IT9cbiIsCisgICAgICAgICAgICAgICAgICAgICBjLT5jb250YWluZXJfbmFtZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGxpbmVhcl9zZWFyY2godmFsLCBjKTsKKyAgICB9CisKICAgICBpZiAodC0+ZGlydHkpCiAgICAgICAgIFNvcnRfQXJyYXkoYyk7CiAKQEAgLTE4NCw3ICsyMjAsNiBAQAogICAgIHQtPm1heF9zaXplID0gMDsKICAgICB0LT5jb3VudCA9IDA7CiAgICAgdC0+ZGlydHkgPSAwOwotICAgIHQtPmRhdGFfc2l6ZSA9IHNpemVvZih2b2lkKik7CiAgICAgdC0+ZGF0YSA9IE5VTEw7CiAKICAgICByZXR1cm4gdDsKQEAgLTE5NCw5ICsyMjksNyBAQAogbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVsZWFzZShuZXRzbm1wX2NvbnRhaW5lciAqYykKIHsKICAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKLSAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7Ci0JU05NUF9GUkVFKHQtPmRhdGEpOwotICAgIH0KKyAgICBTTk1QX0ZSRUUodC0+ZGF0YSk7CiAgICAgU05NUF9GUkVFKHQpOwogICAgIFNOTVBfRlJFRShjKTsKIH0KQEAgLTIwNCwxMSArMjM3LDE2IEBACiBpbnQKIG5ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KG5ldHNubXBfY29udGFpbmVyICpjLCBpbnQgc2V0LCB1X2ludCBmbGFncykKIHsKLSAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKLSAgICBpZiAoc2V0KQotICAgICAgICB0LT5mbGFncyA9IGZsYWdzOworI2RlZmluZSBCQV9GTEFHUyAoQ09OVEFJTkVSX0tFWV9BTExPV19EVVBMSUNBVEVTfENPTlRBSU5FUl9LRVlfVU5TT1JURUQpCisKKyAgICBpZiAoc2V0KSB7CisgICAgICAgIGlmICgoZmxhZ3MgJiBCQV9GTEFHUykgPT0gZmxhZ3MpCisgICAgICAgICAgICBjLT5mbGFncyA9IGZsYWdzOworICAgICAgICBlbHNlCisgICAgICAgICAgICBmbGFncyA9ICh1X2ludCktMTsgLyogdW5zdXBwb3J0ZWQgZmxhZyAqLworICAgIH0KICAgICBlbHNlCi0gICAgICAgIHJldHVybiAoKHQtPmZsYWdzICYgZmxhZ3MpID09IGZsYWdzKTsKKyAgICAgICAgcmV0dXJuICgoYy0+ZmxhZ3MgJiBmbGFncykgPT0gZmxhZ3MpOwogICAgIHJldHVybiBmbGFnczsKIH0KIApAQCAtMjMyLDcgKzI3MCw3IEBACiAgICAgICogaWYgdGhlcmUgaXMgbm8gZGF0YSwgcmV0dXJuIE5VTEw7CiAgICAgICovCiAgICAgaWYgKCF0LT5jb3VudCkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgLyoKICAgICAgKiBpZiB0aGUgdGFibGUgaXMgZGlydHksIHNvcnQgaXQuCkBAIC0yNDUsMTcgKzI4Myw3MSBAQAogICAgICAqLwogICAgIGlmIChrZXkpIHsKICAgICAgICAgaWYgKChpbmRleCA9IGJpbmFyeV9zZWFyY2goa2V5LCBjLCBleGFjdCkpID09IC0xKQotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgaWYgKCFleGFjdCAmJgorICAgICAgICAgICAgYy0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVMpIHsKKyAgICAgICAgICAgIGludCByZXN1bHQ7CisKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJZiBkdXBsaWNhdGVzIGFyZSBhbGxvd2VkLCB3ZSBoYXZlIHRvIGJlIGV4dHJhCisgICAgICAgICAgICAgKiBzdXJlIHRoYXQgd2UgZGlkbid0IGp1c3QgaW5jcmVtZW50IHRvIGEgZHVwbGljYXRlLAorICAgICAgICAgICAgICogdGh1cyBjYXVzaW5nIGEgZ2V0bmV4dCBsb29wLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICByZXN1bHQgPSBjLT5jb21wYXJlKHQtPmRhdGFbaW5kZXhdLCBrZXkpOworICAgICAgICAgICAgd2hpbGUgKHJlc3VsdCA9PSAwKSB7CisJCURFQlVHTVNHVEwoKCJjb250YWluZXIiLCJza2lwcGluZyBkdXBsaWNhdGUga2V5IGluICVzXG4iLAorCQkJCQkgICAgYy0+Y29udGFpbmVyX25hbWUpKTsKKyAgICAgICAgICAgICAgICBpZiAoKytpbmRleCA9PSB0LT5jb3VudCkKKyAgICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICAgICByZXN1bHQgPSBjLT5jb21wYXJlKHQtPmRhdGFbaW5kZXhdLCBrZXkpOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIHQtPmRhdGFbaW5kZXhdOwogfQogCiBpbnQKK25ldHNubXBfYmluYXJ5X2FycmF5X3JlbW92ZV9hdChuZXRzbm1wX2NvbnRhaW5lciAqYywgc2l6ZV90IGluZGV4LCB2b2lkICoqc2F2ZSkKK3sKKyAgICBiaW5hcnlfYXJyYXlfdGFibGUgKnQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKKworICAgIGlmIChzYXZlKQorICAgICAgICAqc2F2ZSA9IE5VTEw7CisgICAgCisgICAgLyoKKyAgICAgKiBpZiB0aGVyZSBpcyBubyBkYXRhLCByZXR1cm4gTlVMTDsKKyAgICAgKi8KKyAgICBpZiAoIXQtPmNvdW50KQorICAgICAgICByZXR1cm4gMDsKKworICAgIC8qCisgICAgICogZmluZCBvbGQgZGF0YSBhbmQgc2F2ZSBpdCwgaWYgcHRyIHByb3ZpZGVkCisgICAgICovCisgICAgaWYgKHNhdmUpCisgICAgICAgICpzYXZlID0gdC0+ZGF0YVtpbmRleF07CisKKyAgICAvKgorICAgICAqIGlmIGVudHJ5IHdhcyBsYXN0IGl0ZW0sIGp1c3QgZGVjcmVtZW50IGNvdW50CisgICAgICovCisgICAgLS10LT5jb3VudDsKKyAgICBpZiAoaW5kZXggIT0gdC0+Y291bnQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogb3RoZXJ3aXNlLCBzaGlmdCBhcnJheSBkb3duCisgICAgICAgICAqLworICAgICAgICBtZW1tb3ZlKCZ0LT5kYXRhW2luZGV4XSwgJnQtPmRhdGFbaW5kZXgrMV0sCisgICAgICAgICAgICAgICAgc2l6ZW9mKHZvaWQqKSAqICh0LT5jb3VudCAtIGluZGV4KSk7CisKKyAgICAgICAgKytjLT5zeW5jOworICAgIH0KKworICAgIHJldHVybiAwOworfQoraW50CiBuZXRzbm1wX2JpbmFyeV9hcnJheV9yZW1vdmUobmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKmtleSwgdm9pZCAqKnNhdmUpCiB7CiAgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7Ci0gICAgc2l6ZV90ICAgICAgICAgICAgIGluZGV4ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgICAgaW5kZXggPSAwOwogCiAgICAgaWYgKHNhdmUpCiAgICAgICAgICpzYXZlID0gTlVMTDsKQEAgLTI3OCwyNCArMzcwLDcgQEAKICAgICBpZiAoKGluZGV4ID0gYmluYXJ5X3NlYXJjaChrZXksIGMsIDEpKSA9PSAtMSkKICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgLyoKLSAgICAgKiBmaW5kIG9sZCBkYXRhIGFuZCBzYXZlIGl0LCBpZiBwdHIgcHJvdmlkZWQKLSAgICAgKi8KLSAgICBpZiAoc2F2ZSkKLSAgICAgICAgKnNhdmUgPSB0LT5kYXRhW2luZGV4XTsKLQotICAgIC8qCi0gICAgICogaWYgZW50cnkgd2FzIGxhc3QgaXRlbSwganVzdCBkZWNyZW1lbnQgY291bnQKLSAgICAgKi8KLSAgICAtLXQtPmNvdW50OwotICAgIGlmIChpbmRleCAhPSB0LT5jb3VudCkgewotICAgICAgICAvKgotICAgICAgICAgKiBvdGhlcndpc2UsIHNoaWZ0IGFycmF5IGRvd24KLSAgICAgICAgICovCi0gICAgICAgIG1lbW1vdmUoJnQtPmRhdGFbaW5kZXhdLCAmdC0+ZGF0YVtpbmRleCsxXSwgdC0+ZGF0YV9zaXplICogKHQtPmNvdW50IC0gaW5kZXgpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVtb3ZlX2F0KGMsIChzaXplX3QpaW5kZXgsIHNhdmUpOwogfQogCiBORVRTTk1QX1NUQVRJQ19JTkxJTkUgdm9pZApAQCAtMzM2LDE1ICs0MTEsMTMgQEAKIG5ldHNubXBfYmluYXJ5X2FycmF5X2luc2VydChuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3Qgdm9pZCAqZW50cnkpCiB7CiAgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7Ci0gICAgaW50ICAgICAgICAgICAgIG5ld19tYXgsIG5ld19zaXplOwotICAgIGNoYXIgICAgICAgICAgICpuZXdfZGF0YTsgICAvKiBVc2VkIGZvciAqIGEpIGV4dGVuZGluZyB0aGUgZGF0YSB0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAqIGIpIHRoZSBuZXh0IGVudHJ5IHRvIHVzZSAqLworICAgIGludCAgICAgICAgICAgICB3YXNfZGlydHkgPSAwOwogICAgIC8qCiAgICAgICogY2hlY2sgZm9yIGR1cGxpY2F0ZXMKICAgICAgKi8KLSAgICBpZiAoISAodC0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVMpKSB7Ci0gICAgICAgIG5ld19kYXRhID0gbmV0c25tcF9iaW5hcnlfYXJyYXlfZ2V0KGMsIGVudHJ5LCAxKTsKLSAgICAgICAgaWYgKE5VTEwgIT0gbmV3X2RhdGEpIHsKKyAgICBpZiAoISAoYy0+ZmxhZ3MgJiBDT05UQUlORVJfS0VZX0FMTE9XX0RVUExJQ0FURVMpKSB7CisgICAgICAgIHdhc19kaXJ0eSA9IHQtPmRpcnR5OworICAgICAgICBpZiAoTlVMTCAhPSBuZXRzbm1wX2JpbmFyeV9hcnJheV9nZXQoYywgZW50cnksIDEpKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgiY29udGFpbmVyIiwibm90IGluc2VydGluZyBkdXBsaWNhdGUga2V5XG4iKSk7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KQEAgLTM1NSwyMiArNDI4LDIwIEBACiAgICAgICovCiAgICAgaWYgKHQtPm1heF9zaXplIDw9IHQtPmNvdW50KSB7CiAgICAgICAgIC8qCi0gICAgICAgICAqIFRhYmxlIGlzIGZ1bGwsIHNvIGV4dGVuZCBpdCB0byBkb3VibGUgdGhlIHNpemUKKyAgICAgICAgICogVGFibGUgaXMgZnVsbCwgc28gZXh0ZW5kIGl0IHRvIGRvdWJsZSB0aGUgc2l6ZSwgb3IgdXNlIDEwIGVsZW1lbnRzCisgICAgICAgICAqIGlmIGl0IGlzIGVtcHR5LgogICAgICAgICAgKi8KLSAgICAgICAgbmV3X21heCA9IDIgKiB0LT5tYXhfc2l6ZTsKLSAgICAgICAgaWYgKG5ld19tYXggPT0gMCkKLSAgICAgICAgICAgIG5ld19tYXggPSAxMDsgICAgICAgLyogU3RhcnQgd2l0aCAxMCBlbnRyaWVzICovCisgICAgICAgIHNpemVfdCBjb25zdCBuZXdfbWF4ID0gdC0+bWF4X3NpemUgPiAwID8gMiAqIHQtPm1heF9zaXplIDogMTA7CisgICAgICAgIHZvaWQgKiogY29uc3QgbmV3X2RhdGEgPQorICAgICAgICAgICAgKHZvaWQqKikgcmVhbGxvYyh0LT5kYXRhLCBuZXdfbWF4ICogc2l6ZW9mKHZvaWQqKSk7CiAKLSAgICAgICAgbmV3X3NpemUgPSBuZXdfbWF4ICogdC0+ZGF0YV9zaXplOwotICAgICAgICBuZXdfZGF0YSA9IChjaGFyICopIHJlYWxsb2ModC0+ZGF0YSwgbmV3X3NpemUpOwogICAgICAgICBpZiAobmV3X2RhdGEgPT0gTlVMTCkKICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBpbnQgb2xkX3NpemUgPSB0LT5tYXhfc2l6ZSAqIHQtPmRhdGFfc2l6ZTsKLSAgICAgICAgICAgIGludCBjb3VudCA9IG5ld19zaXplIC0gb2xkX3NpemU7Ci0gICAgICAgICAgICBtZW1zZXQoJm5ld19kYXRhW29sZF9zaXplXSwgMHgwLCBjb3VudCk7Ci0gICAgICAgIH0KLSAgICAgICAgdC0+ZGF0YSA9ICh2b2lkKiopbmV3X2RhdGE7CisKKyAgICAgICAgbWVtc2V0KG5ld19kYXRhICsgdC0+bWF4X3NpemUsIDB4MCwKKyAgICAgICAgICAgICAgIChuZXdfbWF4IC0gdC0+bWF4X3NpemUpICogc2l6ZW9mKHZvaWQqKSk7CisKKyAgICAgICAgdC0+ZGF0YSA9IG5ld19kYXRhOwogICAgICAgICB0LT5tYXhfc2l6ZSA9IG5ld19tYXg7CiAgICAgfQogCkBAIC0zNzksNiArNDUwLDE1IEBACiAgICAgICovCiAgICAgdC0+ZGF0YVt0LT5jb3VudCsrXSA9IE5FVFNOTVBfUkVNT1ZFX0NPTlNUKHZvaWQgKiwgZW50cnkpOwogICAgIHQtPmRpcnR5ID0gMTsKKworICAgIC8qCisgICAgICogaWYgYXJyYXkgd2FzIGRpcnR5IGJlZm9yZSB3ZSBjYWxsZWQgZ2V0LCBzeW5jIHdhcyBpbmNyZW1lbnRlZCB3aGVuCisgICAgICogZ2V0IGNhbGxlZCBTb3J0QXJyYXkuIElmIHdlIGRpZG4ndCBjYWxsIGdldCBvciB0aGUgYXJyYXkgd2Fzbid0IGRpcnR5LAorICAgICAqIGJ1bXAgc3luYyBub3cuCisgICAgICovCisgICAgaWYgKCF3YXNfZGlydHkpCisgICAgICAgICsrYy0+c3luYzsKKwogICAgIHJldHVybiAwOwogfQogCkBAIC00MjUsNyArNTA1LDcgQEAKIHZvaWQgICAgICAgICAgKioKIG5ldHNubXBfYmluYXJ5X2FycmF5X2dldF9zdWJzZXQobmV0c25tcF9jb250YWluZXIgKmMsIHZvaWQgKmtleSwgaW50ICpsZW4pCiB7Ci0gICAgYmluYXJ5X2FycmF5X3RhYmxlICp0ID0gKGJpbmFyeV9hcnJheV90YWJsZSopYy0+Y29udGFpbmVyX2RhdGE7CisgICAgYmluYXJ5X2FycmF5X3RhYmxlICp0OwogICAgIHZvaWQgICAgICAgICAgKipzdWJzZXQ7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXJ0LCBlbmQ7CiAgICAgc2l6ZV90ICAgICAgICAgIGk7CkBAIC00MzMsOCArNTEzLDEzIEBACiAgICAgLyoKICAgICAgKiBpZiB0aGVyZSBpcyBubyBkYXRhLCByZXR1cm4gTlVMTDsKICAgICAgKi8KLSAgICBpZiAoIXQtPmNvdW50IHx8ICFrZXkpCi0gICAgICAgIHJldHVybiAwOworICAgIGlmICghYyB8fCAha2V5KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKKyAgICBuZXRzbm1wX2Fzc2VydChjLT5uY29tcGFyZSk7CisgICAgaWYgKCF0LT5jb3VudCB8ICFjLT5uY29tcGFyZSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICAvKgogICAgICAqIGlmIHRoZSB0YWJsZSBpcyBkaXJ0eSwgc29ydCBpdC4KQEAgLTQ0Nyw3ICs1MzIsNyBAQAogICAgICAqLwogICAgIHN0YXJ0ID0gZW5kID0gYmluYXJ5X3NlYXJjaF9mb3Jfc3RhcnQoKG5ldHNubXBfaW5kZXggKilrZXksIGMpOwogICAgIGlmIChzdGFydCA9PSAtMSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgZm9yIChpID0gc3RhcnQgKyAxOyBpIDwgdC0+Y291bnQ7ICsraSkgewogICAgICAgICBpZiAoMCAhPSBjLT5uY29tcGFyZSh0LT5kYXRhW2ldLCBrZXkpKQpAQCAtNDU2LDkgKzU0MSw5IEBACiAgICAgfQogCiAgICAgKmxlbiA9IGVuZCAtIHN0YXJ0ICsgMTsKLSAgICBzdWJzZXQgPSAodm9pZCAqKiltYWxsb2MoKCpsZW4pICogdC0+ZGF0YV9zaXplKTsKKyAgICBzdWJzZXQgPSAodm9pZCAqKiltYWxsb2MoKCpsZW4pICogc2l6ZW9mKHZvaWQqKSk7CiAgICAgaWYgKHN1YnNldCkKLSAgICAgICAgbWVtY3B5KHN1YnNldCwgJnQtPmRhdGFbc3RhcnRdLCB0LT5kYXRhX3NpemUgKiAoKmxlbikpOworICAgICAgICBtZW1jcHkoc3Vic2V0LCAmdC0+ZGF0YVtzdGFydF0sIHNpemVvZih2b2lkKikgKiAoKmxlbikpOwogCiAgICAgcmV0dXJuIHN1YnNldDsKIH0KQEAgLTU0Myw2ICs2MjgsNjAgQEAKICAgICByZXR1cm4gdmE7CiB9CiAKK3N0YXRpYyBpbnQgX2JhX29wdGlvbnMobmV0c25tcF9jb250YWluZXIgKmMsIGludCBzZXQsIHVfaW50IGZsYWdzKQoreworICAgIHJldHVybiBuZXRzbm1wX2JpbmFyeV9hcnJheV9vcHRpb25zX3NldChjLCBzZXQsIGZsYWdzKTsKK30KKworc3RhdGljIG5ldHNubXBfY29udGFpbmVyICoKK19iYV9kdXBsaWNhdGUobmV0c25tcF9jb250YWluZXIgKmMsIHZvaWQgKmN0eCwgdV9pbnQgZmxhZ3MpCit7CisgICAgbmV0c25tcF9jb250YWluZXIgKmR1cDsKKyAgICBiaW5hcnlfYXJyYXlfdGFibGUgKmR1cHQsICp0OworCisgICAgaWYgKGZsYWdzKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiaW5hcnkgYXJyeSBkdXBsaWNhdGUgZG9lcyBub3Qgc3VwcHJ0IGZsYWdzIHlldFxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGR1cCA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKKyAgICBpZiAoTlVMTCA9PSBkdXApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiIG5vIG1lbW9yeSBmb3IgYmluYXJ5IGFycmF5IGR1cGxpY2F0ZVxuIik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAvKgorICAgICAqIGRlYWwgd2l0aCBjb250YWluZXIgc3R1ZmYKKyAgICAgKi8KKyAgICBpZiAobmV0c25tcF9jb250YWluZXJfZGF0YV9kdXAoZHVwLCBjKSAhPSAwKSB7CisgICAgICAgIG5ldHNubXBfYmluYXJ5X2FycmF5X3JlbGVhc2UoZHVwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBkZWFsIHdpdGggZGF0YQorICAgICAqLworICAgIGR1cHQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKilkdXAtPmNvbnRhaW5lcl9kYXRhOworICAgIHQgPSAoYmluYXJ5X2FycmF5X3RhYmxlKiljLT5jb250YWluZXJfZGF0YTsKKworICAgIGR1cHQtPm1heF9zaXplID0gdC0+bWF4X3NpemU7CisgICAgZHVwdC0+Y291bnQgPSB0LT5jb3VudDsKKyAgICBkdXB0LT5kaXJ0eSA9IHQtPmRpcnR5OworCisgICAgLyoKKyAgICAgKiBzaGFsbG93IGNvcHkKKyAgICAgKi8KKyAgICBkdXB0LT5kYXRhID0gKHZvaWQqKikgbWFsbG9jKGR1cHQtPm1heF9zaXplICogc2l6ZW9mKHZvaWQqKSk7CisgICAgaWYgKE5VTEwgPT0gZHVwdC0+ZGF0YSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibm8gbWVtb3J5IGZvciBiaW5hcnkgYXJyYXkgZHVwbGljYXRlXG4iKTsKKyAgICAgICAgbmV0c25tcF9iaW5hcnlfYXJyYXlfcmVsZWFzZShkdXApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBtZW1jcHkoZHVwdC0+ZGF0YSwgdC0+ZGF0YSwgZHVwdC0+bWF4X3NpemUgKiBzaXplb2Yodm9pZCopKTsKKworICAgIHJldHVybiBkdXA7Cit9CisKIG5ldHNubXBfY29udGFpbmVyICoKIG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkodm9pZCkKIHsKQEAgLTU1NiwxOCArNjk1LDE5IEBACiAgICAgfQogCiAgICAgYy0+Y29udGFpbmVyX2RhdGEgPSBuZXRzbm1wX2JpbmFyeV9hcnJheV9pbml0aWFsaXplKCk7Ci0gICAgICAgIAotICAgIGMtPmdldF9zaXplID0gX2JhX3NpemU7Ci0gICAgYy0+aW5pdCA9IE5VTEw7Ci0gICAgYy0+Y2ZyZWUgPSBfYmFfZnJlZTsKLSAgICBjLT5pbnNlcnQgPSBfYmFfaW5zZXJ0OwotICAgIGMtPnJlbW92ZSA9IF9iYV9yZW1vdmU7Ci0gICAgYy0+ZmluZCA9IF9iYV9maW5kOworCisgICAgLyoKKyAgICAgKiBOT1RFOiBDSEFOR0VTIEhFUkUgTVVTVCBCRSBEVVBMSUNBVEVEIElOIGR1cGxpY2F0ZSBBUyBXRUxMISEKKyAgICAgKi8KKyAgICBuZXRzbm1wX2luaXRfY29udGFpbmVyKGMsIE5VTEwsIF9iYV9mcmVlLCBfYmFfc2l6ZSwgTlVMTCwgX2JhX2luc2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIF9iYV9yZW1vdmUsIF9iYV9maW5kKTsKICAgICBjLT5maW5kX25leHQgPSBfYmFfZmluZF9uZXh0OwogICAgIGMtPmdldF9zdWJzZXQgPSBfYmFfZ2V0X3N1YnNldDsKICAgICBjLT5nZXRfaXRlcmF0b3IgPSBfYmFfaXRlcmF0b3JfZ2V0OwogICAgIGMtPmZvcl9lYWNoID0gX2JhX2Zvcl9lYWNoOwogICAgIGMtPmNsZWFyID0gX2JhX2NsZWFyOworICAgIGMtPm9wdGlvbnMgPSBfYmFfb3B0aW9uczsKKyAgICBjLT5kdXBsaWNhdGUgPSBfYmFfZHVwbGljYXRlOwogICAgICAgICAKICAgICByZXR1cm4gYzsKIH0KQEAgLTY4MCw2ICs4MjAsMjUgQEAKIH0KIAogc3RhdGljIGludAorX2JhX2l0ZXJhdG9yX3JlbW92ZShiaW5hcnlfYXJyYXlfaXRlcmF0b3IgKml0KQoreworICAgIGJpbmFyeV9hcnJheV90YWJsZSogdCA9IF9iYV9pdDJjb250KGl0KTsKKyAgICBpZihOVUxMID09IHQpIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSB0KTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qCisgICAgICogc2luY2UgdGhpcyBpdGVyYXRvciB3YXMgdXNlZCBmb3IgdGhlIHJlbW92ZSwga2VlcCBpdCBpbiBzeW5jIHdpdGgKKyAgICAgKiB0aGUgY29udGFpbmVyLiBBbHNvLCBiYWNrIHVwIG9uZSBzbyB0aGF0IG5leHQgd2lsbCBiZSB0aGUgcG9zaXRpb24KKyAgICAgKiB0aGF0IHdhcyBqdXN0IHJlbW92ZWQuCisgICAgICovCisgICAgKytpdC0+YmFzZS5zeW5jOworICAgIHJldHVybiBuZXRzbm1wX2JpbmFyeV9hcnJheV9yZW1vdmVfYXQoaXQtPmJhc2UuY29udGFpbmVyLCBpdC0+cG9zLS0sIE5VTEwpOworCit9CisKK3N0YXRpYyBpbnQKIF9iYV9pdGVyYXRvcl9yZXNldChiaW5hcnlfYXJyYXlfaXRlcmF0b3IgKml0KQogewogICAgIGJpbmFyeV9hcnJheV90YWJsZSogdCA9IF9iYV9pdDJjb250KGl0KTsKQEAgLTcyOCw2ICs4ODcsNyBAQAogICAgIGl0LT5iYXNlLm5leHQgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9iYV9pdGVyYXRvcl9uZXh0OwogICAgIGl0LT5iYXNlLmN1cnIgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9iYV9pdGVyYXRvcl9jdXJyOwogICAgIGl0LT5iYXNlLmxhc3QgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9iYV9pdGVyYXRvcl9sYXN0OworICAgIGl0LT5iYXNlLnJlbW92ZSA9IChuZXRzbm1wX2l0ZXJhdG9yX3JjKilfYmFfaXRlcmF0b3JfcmVtb3ZlOwogICAgIGl0LT5iYXNlLnJlc2V0ID0gKG5ldHNubXBfaXRlcmF0b3JfcmMqKV9iYV9pdGVyYXRvcl9yZXNldDsKICAgICBpdC0+YmFzZS5yZWxlYXNlID0gKG5ldHNubXBfaXRlcmF0b3JfcmMqKV9iYV9pdGVyYXRvcl9yZWxlYXNlOwogCmRpZmYgLS1naXQgYS9zbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jIGIvc25tcGxpYi9jb250YWluZXJfaXRlcmF0b3IuYwppbmRleCBlMjZkOTllLi40MWIxNGZmIDEwMDY0NAotLS0gYS9zbm1wbGliL2NvbnRhaW5lcl9pdGVyYXRvci5jCisrKyBiL3NubXBsaWIvY29udGFpbmVyX2l0ZXJhdG9yLmMKQEAgLTQsNiArNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RETElCX0gKQEAgLTI4LDYgKzI5LDkgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2l0ZXJhdG9yLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfaXRlcmF0b3IsIGNvbnRhaW5lcl90eXBlcykKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9JVEVSQVRPUgogLyoqCiAgKiAgSG9sZHMgaXRlcmF0b3IgaW5mb3JtYXRpb24gY29udGFpbmluZyBmdW5jdGlvbnMgd2hpY2ggc2hvdWxkIGJlIGNhbGxlZAogICogIGJ5IHRoZSBpdGVyYXRvcl9oYW5kbGVyIHRvIGxvb3Agb3ZlciB5b3VyIGRhdGEgc2V0IGFuZCBzb3J0IGl0IGluIGEKQEAgLTUwNCwzICs1MDgsNiBAQAogICAgIGlpLT5yZW1vdmVfZGF0YSA9IHJlbW92ZV9kYXRhOwogICAgIGlpLT5nZXRfc2l6ZSA9IGdldF9zaXplOwogfQorI2Vsc2UgIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0lURVJBVE9SICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGNvbnRhaW5lcl9pdGVyYXRvcik7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfSVRFUkFUT1IgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvY29udGFpbmVyX2xpc3Rfc3NsbC5jIGIvc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMKaW5kZXggODc4MmZkMC4uN2ZmMDFjNCAxMDA2NDQKLS0tIGEvc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMKKysrIGIvc25tcGxpYi9jb250YWluZXJfbGlzdF9zc2xsLmMKQEAgLTQsNiArNCw3IEBACiAgKgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVERMSUJfSApAQCAtMjgsNiArMjksMTkgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY29udGFpbmVyX2xpc3Rfc3NsbC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2xpbmtlZF9saXN0LCBjb250YWluZXJfdHlwZXMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY29udGFpbmVyX2ZpZm8sIGNvbnRhaW5lcl90eXBlcykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfbGlmbywgY29udGFpbmVyX3R5cGVzKQorCisvKiB0aGlzIGlzIGEgZmFuY3kgd2F5IG9mIGNsZWFuaW5nIHVwIGlmZGVmcyAqLworI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NPTlRBSU5FUl9GSUZPCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjb250YWluZXJfbGlua2VkX2xpc3QpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ09OVEFJTkVSX0ZJRk8gKi8KKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DT05UQUlORVJfTElGTworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoY29udGFpbmVyX2xpbmtlZF9saXN0KQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX0NPTlRBSU5FUl9MSUZPICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTElOS0VEX0xJU1QKIHR5cGVkZWYgc3RydWN0IHNsX25vZGUgewogICAgdm9pZCAgICAgICAgICAgKmRhdGE7CiAgICBzdHJ1Y3Qgc2xfbm9kZSAqbmV4dDsKQEAgLTQ0LDYgKzU4LDE1IEBACiAKIH0gc2xfY29udGFpbmVyOwogCit0eXBlZGVmIHN0cnVjdCBzc2xsX2l0ZXJhdG9yX3MgeworICAgIG5ldHNubXBfaXRlcmF0b3IgYmFzZTsKKyAKKyAgICBzbF9ub2RlICAgICAgICAgKnBvczsKKyAgICBzbF9ub2RlICAgICAgICAgKmxhc3Q7Cit9IHNzbGxfaXRlcmF0b3I7CisKK3N0YXRpYyBuZXRzbm1wX2l0ZXJhdG9yICpfc3NsbF9pdGVyYXRvcl9nZXQobmV0c25tcF9jb250YWluZXIgKmMpOworCiAKIHN0YXRpYyB2b2lkICoKIF9nZXQobmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IHZvaWQgKmtleSwgaW50IGV4YWN0KQpAQCAtODUsMTIgKzEwOCwxMyBAQAogICoKICAqCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBfc3NsbF9mcmVlKG5ldHNubXBfY29udGFpbmVyICpjKQogewogICAgIGlmKGMpIHsKICAgICAgICAgZnJlZShjKTsKICAgICB9CisgICAgcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkICoKQEAgLTEyNSw2ICsxNDksNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgbmV3X25vZGUtPmRhdGEgPSBORVRTTk1QX1JFTU9WRV9DT05TVCh2b2lkICosIGRhdGEpOwogICAgICsrc2wtPmNvdW50OworICAgICsrYy0+c3luYzsKIAogICAgIC8qCiAgICAgICogZmlyc3Qgbm9kZT8KQEAgLTIyMyw2ICsyNDgsNyBAQAogICAgICAqLwogICAgIGZyZWUoY3Vycik7CiAgICAgLS1zbC0+Y291bnQ7CisgICAgKytjLT5zeW5jOwogICAgIAogICAgIHJldHVybiAwOwogfQpAQCAtMjc4LDYgKzMwNCw3IEBACiAgICAgfQogICAgIHNsLT5oZWFkID0gTlVMTDsKICAgICBzbC0+Y291bnQgPSAwOworICAgICsrYy0+c3luYzsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQEAgLTI5NywxNiArMzI0LDEyIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KIAotICAgIHNsLT5jLmNmcmVlID0gKG5ldHNubXBfY29udGFpbmVyX3JjKilfc3NsbF9mcmVlOwotICAgICAgICAKLSAgICBzbC0+Yy5nZXRfc2l6ZSA9IF9zc2xsX3NpemU7Ci0gICAgc2wtPmMuaW5pdCA9IE5VTEw7Ci0gICAgc2wtPmMuaW5zZXJ0ID0gX3NzbGxfaW5zZXJ0OwotICAgIHNsLT5jLnJlbW92ZSA9IF9zc2xsX3JlbW92ZTsKLSAgICBzbC0+Yy5maW5kID0gX3NzbGxfZmluZDsKKyAgICBuZXRzbm1wX2luaXRfY29udGFpbmVyKChuZXRzbm1wX2NvbnRhaW5lciAqKXNsLCBOVUxMLCBfc3NsbF9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgX3NzbGxfc2l6ZSwgTlVMTCwgX3NzbGxfaW5zZXJ0LCBfc3NsbF9yZW1vdmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBfc3NsbF9maW5kKTsKICAgICBzbC0+Yy5maW5kX25leHQgPSBfc3NsbF9maW5kX25leHQ7CiAgICAgc2wtPmMuZ2V0X3N1YnNldCA9IE5VTEw7Ci0gICAgc2wtPmMuZ2V0X2l0ZXJhdG9yID0gTlVMTDsKKyAgICBzbC0+Yy5nZXRfaXRlcmF0b3IgPV9zc2xsX2l0ZXJhdG9yX2dldDsKICAgICBzbC0+Yy5mb3JfZWFjaCA9IF9zc2xsX2Zvcl9lYWNoOwogICAgIHNsLT5jLmNsZWFyID0gX3NzbGxfY2xlYXI7CiAKQEAgLTM5MSwzICs0MTQsMTU3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb250YWluZXJfZ2V0X2ZpZm9fZmFjdG9yeSgpKTsKIH0KIAorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIGl0ZXJhdG9yCisgKgorICovCitORVRTTk1QX1NUQVRJQ19JTkxJTkUgc2xfY29udGFpbmVyICoKK19zc2xsX2l0MmNvbnQoc3NsbF9pdGVyYXRvciAqaXQpCit7CisgICAgaWYoTlVMTCA9PSBpdCkgeworICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGl0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgaWYoTlVMTCA9PSBpdC0+YmFzZS5jb250YWluZXIpIHsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBpdC0+YmFzZS5jb250YWluZXIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZihpdC0+YmFzZS5jb250YWluZXItPnN5bmMgIT0gaXQtPmJhc2Uuc3luYykgeworICAgICAgICBERUJVR01TR1RMKCgiY29udGFpbmVyOml0ZXJhdG9yIiwgIm91dCBvZiBzeW5jXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiAoc2xfY29udGFpbmVyICopaXQtPmJhc2UuY29udGFpbmVyOworfQorCitzdGF0aWMgdm9pZCAqCitfc3NsbF9pdGVyYXRvcl9jdXJyKHNzbGxfaXRlcmF0b3IgKml0KQoreworICAgIHNsX2NvbnRhaW5lciAqdCA9IF9zc2xsX2l0MmNvbnQoaXQpOworICAgIGlmICgoTlVMTCA9PSB0KSB8fCAoTlVMTCA9PSBpdC0+cG9zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gaXQtPnBvcy0+ZGF0YTsKK30KKworc3RhdGljIHZvaWQgKgorX3NzbGxfaXRlcmF0b3JfZmlyc3Qoc3NsbF9pdGVyYXRvciAqaXQpCit7CisgICAgc2xfY29udGFpbmVyICp0ID0gX3NzbGxfaXQyY29udChpdCk7CisgICAgaWYgKChOVUxMID09IHQpIHx8IChOVUxMID09IHQtPmhlYWQpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiB0LT5oZWFkLT5kYXRhOworfQorCitzdGF0aWMgdm9pZCAqCitfc3NsbF9pdGVyYXRvcl9uZXh0KHNzbGxfaXRlcmF0b3IgKml0KQoreworICAgIHNsX2NvbnRhaW5lciAqdCA9IF9zc2xsX2l0MmNvbnQoaXQpOworICAgIGlmICgoTlVMTCA9PSB0KSB8fCAoTlVMTCA9PSBpdC0+cG9zKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpdC0+cG9zID0gaXQtPnBvcy0+bmV4dDsKKyAgICBpZiAoTlVMTCA9PSBpdC0+cG9zKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBpdC0+cG9zLT5kYXRhOworfQorCitzdGF0aWMgdm9pZCAqCitfc3NsbF9pdGVyYXRvcl9sYXN0KHNzbGxfaXRlcmF0b3IgKml0KQoreworICAgIHNsX25vZGUgICAgICAqbjsKKyAgICBzbF9jb250YWluZXIgKnQgPSBfc3NsbF9pdDJjb250KGl0KTsKKyAgICBpZihOVUxMID09IHQpCisgICAgICAgIHJldHVybiBOVUxMOworICAgIAorICAgIGlmIChpdC0+bGFzdCkKKyAgICAgICAgcmV0dXJuIGl0LT5sYXN0OworCisgICAgbiA9IGl0LT5wb3MgPyBpdC0+cG9zIDogdC0+aGVhZDsKKyAgICBpZiAoTlVMTCA9PSBuKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHdoaWxlKG4tPm5leHQpCisgICAgICAgIG4gPSBuLT5uZXh0OworCisgICAgaWYgKE5VTEwgPT0gbikKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpdC0+bGFzdCA9IG47CisKKyAgICByZXR1cm4gaXQtPmxhc3QtPmRhdGE7Cit9CisKK3N0YXRpYyBpbnQKK19zc2xsX2l0ZXJhdG9yX3Jlc2V0KHNzbGxfaXRlcmF0b3IgKml0KQoreworICAgIHNsX2NvbnRhaW5lciAqdDsKKworICAgIC8qKiBjYW4ndCB1c2UgaXQyY29uZiBjdXogd2UgbWlnaHQgYmUgb3V0IG9mIHN5bmMgKi8KKyAgICBpZihOVUxMID09IGl0KSB7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gaXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZihOVUxMID09IGl0LT5iYXNlLmNvbnRhaW5lcikgeworICAgICAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IGl0LT5iYXNlLmNvbnRhaW5lcik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB0ID0gKHNsX2NvbnRhaW5lciAqKWl0LT5iYXNlLmNvbnRhaW5lcjsKKyAgICBpZihOVUxMID09IHQpCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGl0LT5sYXN0ID0gTlVMTDsKKyAgICBpdC0+cG9zID0gdC0+aGVhZDsKKworICAgIC8qCisgICAgICogc2F2ZSBzeW5jIGNvdW50LCB0byBtYWtlIHN1cmUgY29udGFpbmVyIGRvZXNuJ3QgY2hhbmdlIHdoaWxlCisgICAgICogaXRlcmF0b3IgaXMgaW4gdXNlLgorICAgICAqLworICAgIGl0LT5iYXNlLnN5bmMgPSBpdC0+YmFzZS5jb250YWluZXItPnN5bmM7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorX3NzbGxfaXRlcmF0b3JfcmVsZWFzZShuZXRzbm1wX2l0ZXJhdG9yICppdCkKK3sKKyAgICBmcmVlKGl0KTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgbmV0c25tcF9pdGVyYXRvciAqCitfc3NsbF9pdGVyYXRvcl9nZXQobmV0c25tcF9jb250YWluZXIgKmMpCit7CisgICAgc3NsbF9pdGVyYXRvciogaXQ7CisKKyAgICBpZihOVUxMID09IGMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaXQgPSBTTk1QX01BTExPQ19UWVBFREVGKHNzbGxfaXRlcmF0b3IpOworICAgIGlmKE5VTEwgPT0gaXQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaXQtPmJhc2UuY29udGFpbmVyID0gYzsKKyAgICAKKyAgICBpdC0+YmFzZS5maXJzdCA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX3NzbGxfaXRlcmF0b3JfZmlyc3Q7CisgICAgaXQtPmJhc2UubmV4dCA9IChuZXRzbm1wX2l0ZXJhdG9yX3J0biopX3NzbGxfaXRlcmF0b3JfbmV4dDsKKyAgICBpdC0+YmFzZS5jdXJyID0gKG5ldHNubXBfaXRlcmF0b3JfcnRuKilfc3NsbF9pdGVyYXRvcl9jdXJyOworICAgIGl0LT5iYXNlLmxhc3QgPSAobmV0c25tcF9pdGVyYXRvcl9ydG4qKV9zc2xsX2l0ZXJhdG9yX2xhc3Q7CisgICAgaXQtPmJhc2UucmVzZXQgPSAobmV0c25tcF9pdGVyYXRvcl9yYyopX3NzbGxfaXRlcmF0b3JfcmVzZXQ7CisgICAgaXQtPmJhc2UucmVsZWFzZSA9IChuZXRzbm1wX2l0ZXJhdG9yX3JjKilfc3NsbF9pdGVyYXRvcl9yZWxlYXNlOworCisgICAgKHZvaWQpX3NzbGxfaXRlcmF0b3JfcmVzZXQoaXQpOworCisgICAgcmV0dXJuIChuZXRzbm1wX2l0ZXJhdG9yICopaXQ7Cit9CisjZWxzZSAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NPTlRBSU5FUl9MSU5LRURfTElTVCAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChjb250YWluZXJfbGlua2VkX2xpc3QpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0xJTktFRF9MSVNUICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2NvbnRhaW5lcl9udWxsLmMgYi9zbm1wbGliL2NvbnRhaW5lcl9udWxsLmMKaW5kZXggMTAwODJhZi4uMWY0ODcwZSAxMDA2NDQKLS0tIGEvc25tcGxpYi9jb250YWluZXJfbnVsbC5jCisrKyBiL3NubXBsaWIvY29udGFpbmVyX251bGwuYwpAQCAtNyw2ICs3LDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmIEhBVkVfSU9fSAogI2luY2x1ZGUgPGlvLmg+CkBAIC0zMyw2ICszNCw4IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNvbnRhaW5lcl9udWxsLCBjb250YWluZXJfdHlwZXMpCisKIC8qKiBAZGVmZ3JvdXAgbnVsbF9jb250YWluZXIgbnVsbF9jb250YWluZXIKICAqICBIZWxwcyB5b3UgaW1wbGVtZW50IHNwZWNpYWxpemVkIGNvbnRhaW5lcnMuCiAgKiAgQGluZ3JvdXAgY29udGFpbmVyCkBAIC01MCw2ICs1Myw3IEBACiAgKiAgQHsKICAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX05VTEwKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgogICogY29udGFpbmVyCkBAIC0xNTYsNyArMTYwLDcgQEAKICAgICBjLT5maW5kID0gX251bGxfZmluZDsKICAgICBjLT5maW5kX25leHQgPSBfbnVsbF9maW5kX25leHQ7CiAgICAgYy0+Z2V0X3N1YnNldCA9IF9udWxsX2dldF9zdWJzZXQ7Ci0gICAgYy0+Z2V0X2l0ZXJhdG9yID0gMDsgLyogX251bGxfaXRlcmF0b3I7ICovCisgICAgYy0+Z2V0X2l0ZXJhdG9yID0gTlVMTDsgLyogX251bGxfaXRlcmF0b3I7ICovCiAgICAgYy0+Zm9yX2VhY2ggPSBfbnVsbF9mb3JfZWFjaDsKICAgICBjLT5jbGVhciA9IF9udWxsX2NsZWFyOwogICAgICAgIApAQCAtMTgwLDUgKzE4NCw4IEBACiAgICAgbmV0c25tcF9jb250YWluZXJfcmVnaXN0ZXIoIm51bGwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2dldF9udWxsX2ZhY3RvcnkoKSk7CiB9CisjZWxzZSAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTlVMTCAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChjb250YWluZXJfbnVsbCk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfTlVMTCAqLwogLyoqICBAfSAqLwogCmRpZmYgLS1naXQgYS9zbm1wbGliL2RhdGFfbGlzdC5jIGIvc25tcGxpYi9kYXRhX2xpc3QuYwppbmRleCAwMWE3ZDJjLi41MDVkNGZjIDEwMDY0NAotLS0gYS9zbm1wbGliL2RhdGFfbGlzdC5jCisrKyBiL3NubXBsaWIvZGF0YV9saXN0LmMKQEAgLTQsMTQgKzQsMTMgQEAKICAqICRJZCQKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KIAotLyoKLSAqIHByb3RvdHlwZXMKLSAqLwotTkVUU05NUF9JTkxJTkUgdm9pZAotbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLCBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSk7CituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGF0YV9saXN0X2FsbCwgbGlibmV0c25tcCkKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRhdGFfbGlzdF9hZGRfZGF0YSwgZGF0YV9saXN0X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkYXRhX2xpc3RfZ2V0X2xpc3Rfbm9kZSwgZGF0YV9saXN0X2FsbCkKIAogLyoqIEBkZWZncm91cCBkYXRhX2xpc3QgZ2VuZXJpYyBsaW5rZWQtbGlzdCBkYXRhIGhhbmRsaW5nIHdpdGggYSBzdHJpbmcgYXMgYSBrZXkuCiAgKiBAaW5ncm91cCBsaWJyYXJ5CkBAIC02OSw4ICs2OCw4IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIG5vZGUtPm5hbWUgPSBzdHJkdXAobmFtZSk7CiAgICAgaWYgKCFub2RlLT5uYW1lKSB7Ci0gICAgICBmcmVlKG5vZGUpOwotICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIGZyZWUobm9kZSk7CisgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KICAgICBub2RlLT5kYXRhID0gZGF0YTsKICAgICBub2RlLT5mcmVlX2Z1bmMgPSBiZWVyOwpAQCAtNzgsMTggKzc3LDYgQEAKIH0KIAogLyoqIGFkZHMgZGF0YSB0byBhIGRhdGFsaXN0Ci0gKiBAbm90ZSBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZSBpcyBwcmVmZXJyZWQKLSAqIEBwYXJhbSBoZWFkIGEgcG9pbnRlciB0byB0aGUgaGVhZCBub2RlIG9mIGEgZGF0YV9saXN0Ci0gKiBAcGFyYW0gbm9kZSBhIG5vZGUgdG8gc3Rhc2ggaW4gdGhlIGRhdGFfbGlzdAotICovCi0vKiogICovCi1ORVRTTk1QX0lOTElORSB2b2lkCi1uZXRzbm1wX2FkZF9saXN0X2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLCBuZXRzbm1wX2RhdGFfbGlzdCAqbm9kZSkKLXsKLSAgICBuZXRzbm1wX2RhdGFfbGlzdF9hZGRfbm9kZShoZWFkLCBub2RlKTsKLX0KLQotLyoqIGFkZHMgZGF0YSB0byBhIGRhdGFsaXN0CiAgKiBAcGFyYW0gaGVhZCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgbm9kZSBvZiBhIGRhdGFfbGlzdAogICogQHBhcmFtIG5vZGUgYSBub2RlIHRvIHN0YXNoIGluIHRoZSBkYXRhX2xpc3QKICAqLwpAQCAtMTAyLDEyICs4OSwxMyBAQAogICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gbm9kZSk7CiAgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBub2RlLT5uYW1lKTsKIAorICAgIERFQlVHTVNHVEwoKCJkYXRhX2xpc3QiLCJhZGRpbmcga2V5ICclcydcbiIsIG5vZGUtPm5hbWUpKTsKKwogICAgIGlmICghKmhlYWQpIHsKICAgICAgICAgKmhlYWQgPSBub2RlOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgREVCVUdNU0dUTCgoImRhdGFfbGlzdCIsImFkZGluZyBrZXkgJyVzJ1xuIiwgbm9kZS0+bmFtZSkpOwogICAgIGlmICgwID09IHN0cmNtcChub2RlLT5uYW1lLCAoKmhlYWQpLT5uYW1lKSkgewogICAgICAgICBuZXRzbm1wX2Fzc2VydCghImxpc3Qga2V5ID09IGlzIHVuaXF1ZSIpOyAvKiBhbHdheXMgZmFpbCAqLwogICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKQEAgLTEzMSwxMiArMTE5LDI1IEBACiB9CiAKIC8qKiBhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdAorICogQG5vdGUgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUgaXMgcHJlZmVycmVkCisgKiBAcGFyYW0gaGVhZCBhIHBvaW50ZXIgdG8gdGhlIGhlYWQgbm9kZSBvZiBhIGRhdGFfbGlzdAorICogQHBhcmFtIG5vZGUgYSBub2RlIHRvIHN0YXNoIGluIHRoZSBkYXRhX2xpc3QKKyAqLworLyoqICAqLworTkVUU05NUF9JTkxJTkUgdm9pZAorbmV0c25tcF9hZGRfbGlzdF9kYXRhKG5ldHNubXBfZGF0YV9saXN0ICoqaGVhZCwgbmV0c25tcF9kYXRhX2xpc3QgKm5vZGUpCit7CisgICAgbmV0c25tcF9kYXRhX2xpc3RfYWRkX25vZGUoaGVhZCwgbm9kZSk7Cit9CisKKy8qKiBhZGRzIGRhdGEgdG8gYSBkYXRhbGlzdAogICogQHBhcmFtIGhlYWQgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG5vZGUgb2YgYSBkYXRhX2xpc3QKICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIG9mIHRoZSBub2RlIHRvIGNhY2hlIHRoZSBkYXRhLgogICogQHBhcmFtIGRhdGEgdGhlIGRhdGEgdG8gYmUgc3RvcmVkIHVuZGVyIHRoYXQgbmFtZQogICogQHBhcmFtIGJlZXIgQSBmdW5jdGlvbiB0aGF0IGNhbiBmcmVlIHRoZSBkYXRhIHBvaW50ZXIgKGluIHRoZSBmdXR1cmUpCiAgKiBAcmV0dXJuIGEgbmV3bHkgY3JlYXRlZCBkYXRhX2xpc3Qgbm9kZSB3aGljaCB3YXMgaW5zZXJ0ZWQgaW4gdGhlIGxpc3QKICAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RBVEFfTElTVF9BRERfREFUQQogTkVUU05NUF9JTkxJTkUgbmV0c25tcF9kYXRhX2xpc3QgKgogbmV0c25tcF9kYXRhX2xpc3RfYWRkX2RhdGEobmV0c25tcF9kYXRhX2xpc3QgKipoZWFkLCBjb25zdCBjaGFyICpuYW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgTmV0c25tcF9GcmVlX0xpc3RfRGF0YSAqIGJlZXIpCkBAIC0xNTYsNiArMTU3LDcgQEAKIAogICAgIHJldHVybiBub2RlOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREFUQV9MSVNUX0FERF9EQVRBICovCiAKIC8qKiByZXR1cm5zIGEgZGF0YV9saXN0IG5vZGUncyBkYXRhIGZvciBhIGdpdmVuIG5hbWUgd2l0aGluIGEgZGF0YV9saXN0CiAgKiBAcGFyYW0gaGVhZCB0aGUgaGVhZCBub2RlIG9mIGEgZGF0YV9saXN0CkBAIC0xODAsNiArMTgyLDcgQEAKICAqIEBwYXJhbSBuYW1lIHRoZSBuYW1lIHRvIGZpbmQKICAqIEByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBkYXRhX2xpc3Qgbm9kZQogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREFUQV9MSVNUX0dFVF9MSVNUX05PREUKIE5FVFNOTVBfSU5MSU5FIG5ldHNubXBfZGF0YV9saXN0ICAgICoKIG5ldHNubXBfZ2V0X2xpc3Rfbm9kZShuZXRzbm1wX2RhdGFfbGlzdCAqaGVhZCwgY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTE5Miw2ICsxOTUsNyBAQAogICAgICAgICByZXR1cm4gaGVhZDsKICAgICByZXR1cm4gTlVMTDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RBVEFfTElTVF9HRVRfTElTVF9OT0RFICovCiAKIC8qKiBSZW1vdmVzIGEgbmFtZWQgbm9kZSBmcm9tIGEgZGF0YV9saXN0IChhbmQgZnJlZXMgaXQpCiAgKiBAcGFyYW0gcmVhbGhlYWQgYSBwb2ludGVyIHRvIHRoZSBoZWFkIG5vZGUgb2YgYSBkYXRhX2xpc3QKZGlmZiAtLWdpdCBhL3NubXBsaWIvZGVmYXVsdF9zdG9yZS5jIGIvc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMKaW5kZXggOGU5NDA1Ny4uOGRiYzliYyAxMDA2NDQKLS0tIGEvc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMKKysrIGIvc25tcGxpYi9kZWZhdWx0X3N0b3JlLmMKQEAgLTEyNiw2ICsxMjYsNyBAQAogICogIEB7CiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTE0MSw5ICsxNDIsNiBAQAogI2Vsc2UKICNpbmNsdWRlIDxzdHJpbmdzLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtMTYwLDYgKzE1OCwxNCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZGVmYXVsdF9zdG9yZV9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihkZWZhdWx0X3N0b3JlX3ZvaWQsIGRlZmF1bHRfc3RvcmVfYWxsKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVGQVVMVF9TVE9SRV9WT0lECisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUZBVUxUX1NUT1JFX1ZPSUQgKi8KKworCiBzdGF0aWMgY29uc3QgY2hhciAqIHN0b3JlcyBbTkVUU05NUF9EU19NQVhfSURTXSA9IHsgIkxJQiIsICJBUFAiLCAiVE9LIiB9OwogCiB0eXBlZGVmIHN0cnVjdCBuZXRzbm1wX2RzX3JlYWRfY29uZmlnX3MgewpAQCAtMTc2LDcgKzE4Miw5IEBACiBzdGF0aWMgaW50ICAgbmV0c25tcF9kc19pbnRlZ2Vyc1tORVRTTk1QX0RTX01BWF9JRFNdW05FVFNOTVBfRFNfTUFYX1NVQklEU107CiBzdGF0aWMgY2hhciAgbmV0c25tcF9kc19ib29sZWFuc1tORVRTTk1QX0RTX01BWF9JRFNdW05FVFNOTVBfRFNfTUFYX1NVQklEUy84XTsKIHN0YXRpYyBjaGFyICpuZXRzbm1wX2RzX3N0cmluZ3NbTkVUU05NUF9EU19NQVhfSURTXVtORVRTTk1QX0RTX01BWF9TVUJJRFNdOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFRkFVTFRfU1RPUkVfVk9JRAogc3RhdGljIHZvaWQgKm5ldHNubXBfZHNfdm9pZHNbTkVUU05NUF9EU19NQVhfSURTXVtORVRTTk1QX0RTX01BWF9TVUJJRFNdOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfREVGQVVMVF9TVE9SRV9WT0lEICovCiAKIC8qCiAgKiBQcm90b3R5cGUgZGVmaW5pdGlvbnMgCkBAIC0zMTYsNiArMzI0LDcgQEAKICAgICByZXR1cm4gbmV0c25tcF9kc19zdHJpbmdzW3N0b3JlaWRdW3doaWNoXTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RFRkFVTFRfU1RPUkVfVk9JRAogaW50CiBuZXRzbm1wX2RzX3NldF92b2lkKGludCBzdG9yZWlkLCBpbnQgd2hpY2gsIHZvaWQgKnZhbHVlKQogewpAQCAtMzI0LDcgKzMzMyw3IEBACiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9kc19zZXRfdm9pZCIsICJTZXR0aW5nICVzOiVkID0gJXhcbiIsCisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfZHNfc2V0X3ZvaWQiLCAiU2V0dGluZyAlczolZCA9ICVwXG4iLAogICAgICAgICAgICAgICAgIHN0b3Jlc1tzdG9yZWlkXSwgd2hpY2gsIHZhbHVlKSk7CiAKICAgICBuZXRzbm1wX2RzX3ZvaWRzW3N0b3JlaWRdW3doaWNoXSA9IHZhbHVlOwpAQCAtMzQyLDYgKzM1MSw3IEBACiAKICAgICByZXR1cm4gbmV0c25tcF9kc192b2lkc1tzdG9yZWlkXVt3aGljaF07CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ERUZBVUxUX1NUT1JFX1ZPSUQgKi8KIAogaW50CiBuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4oY2hhciAqbGluZSkKQEAgLTQ0MiwxMCArNDUyLDE0IEBACiAKICAgICBpZiAobmV0c25tcF9kc19jb25maWdzID09IE5VTEwpIHsKICAgICAgICAgbmV0c25tcF9kc19jb25maWdzID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2RzX3JlYWRfY29uZmlnKTsKKyAgICAgICAgaWYgKG5ldHNubXBfZHNfY29uZmlncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICBkcnNwID0gbmV0c25tcF9kc19jb25maWdzOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoZHJzcCA9IG5ldHNubXBfZHNfY29uZmlnczsgZHJzcC0+bmV4dCAhPSBOVUxMOyBkcnNwID0gZHJzcC0+bmV4dCk7CiAgICAgICAgIGRyc3AtPm5leHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfZHNfcmVhZF9jb25maWcpOworICAgICAgICBpZiAoZHJzcC0+bmV4dCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICBkcnNwID0gZHJzcC0+bmV4dDsKICAgICB9CiAKQEAgLTQ4OCwxMCArNTAyLDE0IEBACiAKICAgICBpZiAobmV0c25tcF9kc19jb25maWdzID09IE5VTEwpIHsKICAgICAgICAgbmV0c25tcF9kc19jb25maWdzID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2RzX3JlYWRfY29uZmlnKTsKKyAgICAgICAgaWYgKG5ldHNubXBfZHNfY29uZmlncyA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICBkcnNwID0gbmV0c25tcF9kc19jb25maWdzOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGZvciAoZHJzcCA9IG5ldHNubXBfZHNfY29uZmlnczsgZHJzcC0+bmV4dCAhPSBOVUxMOyBkcnNwID0gZHJzcC0+bmV4dCk7CiAgICAgICAgIGRyc3AtPm5leHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfZHNfcmVhZF9jb25maWcpOworICAgICAgICBpZiAoZHJzcC0+bmV4dCA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICBkcnNwID0gZHJzcC0+bmV4dDsKICAgICB9CiAKQEAgLTUyMiw3ICs1NDAsNyBAQAogfQogCiB2b2lkCi1uZXRzbm1wX2RzX3NodXRkb3duKCkKK25ldHNubXBfZHNfc2h1dGRvd24odm9pZCkKIHsKICAgICBuZXRzbm1wX2RzX3JlYWRfY29uZmlnICpkcnNwOwogICAgIGludCAgICAgICAgICAgICBpLCBqOwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9kaXJfdXRpbHMuYyBiL3NubXBsaWIvZGlyX3V0aWxzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDM1ZTcwMAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvZGlyX3V0aWxzLmMKQEAgLTAsMCArMSwyNTkgQEAKKy8qIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodChzKS4gIFNlZQorICogdGhlIE5ldC1TTk1QJ3MgQ09QWUlORyBmaWxlIGZvciBtb3JlIGRldGFpbHMgYW5kIG90aGVyIGNvcHlyaWdodHMKKyAqIHRoYXQgbWF5IGFwcGx5OgorICovCisvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjICAgaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjICAgaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjICAgaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorIyAgaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpZiBIQVZFX0xJTUlUU19ICisjaW5jbHVkZSA8bGltaXRzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TVEFUX0gKKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ESVJFTlRfSAorI2luY2x1ZGUgPGRpcmVudC5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyMgIGluY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGlyX3V0aWxzLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb250YWluZXJfZGlyZWN0b3J5LCBjb250YWluZXJfdHlwZXMpCisjaWZkZWYgTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfQ09OVEFJTkVSX0RJUkVDVE9SWQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoZmlsZV91dGlscykKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9mcmVlX2FsbCkKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVRVUlSRV9DT05UQUlORVJfRElSRUNUT1JZICovCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRElSRUNUT1JZCitzdGF0aWMgaW50CitfaW5zZXJ0X25zZmlsZSggbmV0c25tcF9jb250YWluZXIgKmMsIGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBzdGF0ICpzdGF0cywKKyAgICAgICAgICAgICAgICB1X2ludCBmbGFncyk7CisKKy8qCisgKiByZWFkIGZpbGUgbmFtZXMgaW4gYSBkaXJlY3RvcnksIHdpdGggYW4gb3B0aW9uYWwgZmlsdGVyCisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9yZWFkX3NvbWUobmV0c25tcF9jb250YWluZXIgKnVzZXJfY29udGFpbmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkaXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9maWx0ZXIgKmZpbHRlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqZmlsdGVyX2N0eCwgdV9pbnQgZmxhZ3MpCit7CisgICAgRElSICAgICAgICAgICAgICAgKmRpcjsKKyAgICBuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyID0gdXNlcl9jb250YWluZXI7CisgICAgc3RydWN0IGRpcmVudCAgICAgKmZpbGU7CisgICAgY2hhciAgICAgICAgICAgICAgIHBhdGhbU05NUF9NQVhQQVRIXTsKKyAgICBzaXplX3QgICAgICAgICAgICAgZGlybmFtZV9sZW47CisgICAgaW50ICAgICAgICAgICAgICAgIHJjOworICAgIHN0cnVjdCBzdGF0ICAgICAgICBzdGF0YnVmOworICAgIG5ldHNubXBfZmlsZSAgICAgICBuc19maWxlX3RtcDsKKworICAgIGlmICgoZmxhZ3MgJiBORVRTTk1QX0RJUl9SRUxBVElWRV9QQVRIKSAmJiAoZmxhZ3MgJiBORVRTTk1QX0RJUl9SRUNVUlNFKSkgeworICAgICAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lciIsCisgICAgICAgICAgICAgICAgICAgICJubyBzdXBwb3J0IGZvciByZWxhdGl2ZSBwYXRoIHdpdGggcmVjdXJzaW9uXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyIiwgInJlYWRpbmcgJXNcbiIsIGRpcm5hbWUpKTsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBjb250YWluZXIsIGlmIG5lZWRlZAorICAgICAqLworICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikgeworICAgICAgICBpZiAoZmxhZ3MgJiBORVRTTk1QX0RJUl9OU0ZJTEUpIHsKKyAgICAgICAgICAgIGNvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoIm5zZmlsZV9kaXJlY3RvcnlfY29udGFpbmVyOiIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImJpbmFyeV9hcnJheSIpOworICAgICAgICAgICAgaWYgKGNvbnRhaW5lcikgeworICAgICAgICAgICAgICAgIGNvbnRhaW5lci0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKikKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9maWxlX2NvbXBhcmVfbmFtZTsKKyAgICAgICAgICAgICAgICBjb250YWluZXItPmZyZWVfaXRlbSA9IChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2ZpbGVfY29udGFpbmVyX2ZyZWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgY29udGFpbmVyID0gbmV0c25tcF9jb250YWluZXJfZmluZCgiZGlyZWN0b3J5X2NvbnRhaW5lcjpjc3RyaW5nIik7CisgICAgICAgIGlmIChOVUxMID09IGNvbnRhaW5lcikKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICBjb250YWluZXItPmNvbnRhaW5lcl9uYW1lID0gc3RyZHVwKGRpcm5hbWUpOworICAgICAgICAvKiogZGVmYXVsdCB0byB1bnNvcnRlZCAqLworICAgICAgICBpZiAoISAoZmxhZ3MgJiBORVRTTk1QX0RJUl9TT1JURUQpKQorICAgICAgICAgICAgQ09OVEFJTkVSX1NFVF9PUFRJT05TKGNvbnRhaW5lciwgQ09OVEFJTkVSX0tFWV9VTlNPUlRFRCwgcmMpOworICAgIH0KKworICAgIGRpciA9IG9wZW5kaXIoZGlybmFtZSk7CisgICAgaWYgKE5VTEwgPT0gZGlyKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyIiwgIiAgbm90IGEgZGlyXG4iKSk7CisgICAgICAgIGlmIChjb250YWluZXIgIT0gdXNlcl9jb250YWluZXIpCisgICAgICAgICAgICBuZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShjb250YWluZXIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKiogY29weSBkaXJuYW1lIGludG8gcGF0aCAqLworICAgIGlmIChmbGFncyAmIE5FVFNOTVBfRElSX1JFTEFUSVZFX1BBVEgpCisgICAgICAgIGRpcm5hbWVfbGVuID0gMDsKKyAgICBlbHNlIHsKKyAgICAgICAgZGlybmFtZV9sZW4gPSBzdHJsZW4oZGlybmFtZSk7CisgICAgICAgIHN0cmxjcHkocGF0aCwgZGlybmFtZSwgc2l6ZW9mKHBhdGgpKTsKKyAgICAgICAgaWYgKChkaXJuYW1lX2xlbiArIDIpID4gc2l6ZW9mKHBhdGgpKSB7CisgICAgICAgICAgICAvKiogbm90IGVub3VnaCByb29tIGZvciBmaWxlcyAqLworICAgICAgICAgICAgY2xvc2VkaXIoZGlyKTsKKyAgICAgICAgICAgIGlmIChjb250YWluZXIgIT0gdXNlcl9jb250YWluZXIpCisgICAgICAgICAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX2ZyZWUoY29udGFpbmVyKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHBhdGhbZGlybmFtZV9sZW5dID0gJy8nOworICAgICAgICBwYXRoWysrZGlybmFtZV9sZW5dID0gJ1wwJzsKKyAgICB9CisKKyAgICAvKiogaXRlcmF0ZSBvdmVyIGRpciAqLworICAgIHdoaWxlICgoZmlsZSA9IHJlYWRkaXIoZGlyKSkpIHsKKworICAgICAgICBpZiAoKGZpbGUtPmRfbmFtZSA9PSBOVUxMKSB8fCAoZmlsZS0+ZF9uYW1lWzBdID09IDApKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLyoqIHNraXAgJy4nIGFuZCAnLi4nICovCisgICAgICAgIGlmICgoZmlsZS0+ZF9uYW1lWzBdID09ICcuJykgJiYKKyAgICAgICAgICAgICgoZmlsZS0+ZF9uYW1lWzFdID09IDApIHx8CisgICAgICAgICAgICAgKChmaWxlLT5kX25hbWVbMV0gPT0gJy4nKSAmJiAoKGZpbGUtPmRfbmFtZVsyXSA9PSAwKSkpKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHN0cmxjcHkoJnBhdGhbZGlybmFtZV9sZW5dLCBmaWxlLT5kX25hbWUsIHNpemVvZihwYXRoKSAtIGRpcm5hbWVfbGVuKTsKKyAgICAgICAgaWYgKE5VTEwgIT0gZmlsdGVyKSB7CisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBORVRTTk1QX0RJUl9OU0ZJTEVfU1RBVFMpIHsKKyAgICAgICAgICAgICAgICAvKiogdXNlIGxvY2FsIHZhcnMgZm9yIG5vdyAqLworICAgICAgICAgICAgICAgIGlmIChzdGF0KHBhdGgsICZzdGF0YnVmKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3Qgc3RhdCAlc1xuIiwgZmlsZS0+ZF9uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5zX2ZpbGVfdG1wLnN0YXRzID0gJnN0YXRidWY7CisgICAgICAgICAgICAgICAgbnNfZmlsZV90bXAubmFtZSA9IHBhdGg7CisgICAgICAgICAgICAgICAgcmMgPSAoKmZpbHRlcikoJm5zX2ZpbGVfdG1wLCBmaWx0ZXJfY3R4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByYyA9ICgqZmlsdGVyKShwYXRoLCBmaWx0ZXJfY3R4KTsKKyAgICAgICAgICAgIGlmICgwID09IHJjKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImRpcmVjdG9yeTpjb250YWluZXI6ZmlsdGVyZWQiLCAiJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZS0+ZF9uYW1lKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lcjpmb3VuZCIsICIlc1xuIiwgcGF0aCkpOworICAgICAgICBpZiAoKGZsYWdzICYgTkVUU05NUF9ESVJfUkVDVVJTRSkgCisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9ESVJFTlRfRF9UWVBFKSAmJiBkZWZpbmVkKERUX0RJUikKKyAgICAgICAgICAgICYmIChmaWxlLT5kX3R5cGUgPT0gRFRfRElSKQorI2VsaWYgZGVmaW5lZChTX0lTRElSKQorICAgICAgICAgICAgJiYgKHN0YXQoZmlsZS0+ZF9uYW1lLCAmc3RhdGJ1ZikgIT0gMCkgJiYgKFNfSVNESVIoc3RhdGJ1Zi5zdF9tb2RlKSkKKyNlbmRpZgorICAgICAgICAgICAgKSB7CisgICAgICAgICAgICAvKiogeHh4IGFkZCB0aGUgZGlyIGFzIHdlbGw/IG5vdCBmb3Igbm93Li4gbWF5YmUgYW5vdGhlciBmbGFnPyAqLworICAgICAgICAgICAgbmV0c25tcF9kaXJlY3RvcnlfY29udGFpbmVyX3JlYWQoY29udGFpbmVyLCBwYXRoLCBmbGFncyk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoZmxhZ3MgJiBORVRTTk1QX0RJUl9OU0ZJTEUpIHsKKyAgICAgICAgICAgIGlmIChfaW5zZXJ0X25zZmlsZSggY29udGFpbmVyLCBmaWxlLT5kX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlciA/ICZzdGF0YnVmIDogTlVMTCwgZmxhZ3MgKSA8IDApCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBjaGFyICpkdXAgPSBzdHJkdXAocGF0aCk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBkdXApIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICJzdHJkdXAgZmFpbGVkIHdoaWxlIGJ1aWxkaW5nIGRpcmVjdG9yeSBjb250YWluZXJcbiIpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmMgPSBDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgZHVwKTsKKyAgICAgICAgICAgIGlmICgtMSA9PSByYyApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lciIsICIgIGVyciBhZGRpbmcgJXNcbiIsIHBhdGgpKTsKKyAgICAgICAgICAgICAgICBmcmVlKGR1cCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IC8qIHdoaWxlICovCisKKyAgICBjbG9zZWRpcihkaXIpOworCisgICAgcmMgPSBDT05UQUlORVJfU0laRShjb250YWluZXIpOworICAgIERFQlVHTVNHVEwoKCJkaXJlY3Rvcnk6Y29udGFpbmVyIiwgIiAgY29udGFpbmVyIG5vdyBoYXMgJWQgaXRlbXNcbiIsIHJjKSk7CisgICAgaWYgKCgwID09IHJjKSAmJiAhKGZsYWdzICYgTkVUU05NUF9ESVJfRU1QVFlfT0spKSB7CisgICAgICAgIG5ldHNubXBfZGlyZWN0b3J5X2NvbnRhaW5lcl9mcmVlKGNvbnRhaW5lcik7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gY29udGFpbmVyOworfQorCit2b2lkCituZXRzbm1wX2RpcmVjdG9yeV9jb250YWluZXJfZnJlZShuZXRzbm1wX2NvbnRhaW5lciAqY29udGFpbmVyKQoreworICAgIENPTlRBSU5FUl9GUkVFX0FMTChjb250YWluZXIsIE5VTEwpOworICAgIENPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7Cit9CisKK3N0YXRpYyBpbnQKK19pbnNlcnRfbnNmaWxlKCBuZXRzbm1wX2NvbnRhaW5lciAqYywgY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHN0YXQgKnN0YXRzLAorICAgICAgICAgICAgICAgIHVfaW50IGZsYWdzKQoreworICAgIGludCAgICAgICAgICAgcmM7CisgICAgbmV0c25tcF9maWxlICpuc19maWxlID0gbmV0c25tcF9maWxlX25ldyhuYW1lLCAwLCAwLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBuc19maWxlKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjcmVhdGluZyBuc19maWxlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChmbGFncyAmIE5FVFNOTVBfRElSX05TRklMRV9TVEFUUykgeworICAgICAgICBuc19maWxlLT5zdGF0cyA9IChzdHJ1Y3Qgc3RhdCopY2FsbG9jKDEsc2l6ZW9mKCoobnNfZmlsZS0+c3RhdHMpKSk7CisgICAgICAgIGlmIChOVUxMID09IG5zX2ZpbGUtPnN0YXRzKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3IgY3JlYXRpbmcgc3RhdHMgZm9yIG5zX2ZpbGVcbiIpOworICAgICAgICAgICAgbmV0c25tcF9maWxlX3JlbGVhc2UobnNfZmlsZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAKKyAgICAgICAgLyoqIHVzZSBzdGF0cyBmcm9tIGVhcmxpZXIgaWYgd2UgaGF2ZSB0aGVtICovCisgICAgICAgIGlmIChzdGF0cykgeworICAgICAgICAgICAgbWVtY3B5KG5zX2ZpbGUtPnN0YXRzLCBzdGF0cywgc2l6ZW9mKCpzdGF0cykpOworICAgICAgICB9IGVsc2UgaWYgKHN0YXQobnNfZmlsZS0+bmFtZSwgbnNfZmlsZS0+c3RhdHMpIDwgMCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInN0YXQoKSBmYWlsZWQgZm9yIG5zX2ZpbGVcbiIpOworICAgICAgICAgICAgbmV0c25tcF9maWxlX3JlbGVhc2UobnNfZmlsZSk7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByYyA9IENPTlRBSU5FUl9JTlNFUlQoYywgbnNfZmlsZSk7CisgICAgaWYgKC0xID09IHJjICkgeworICAgICAgICBERUJVR01TR1RMKCgiZGlyZWN0b3J5OmNvbnRhaW5lciIsICIgIGVyciBhZGRpbmcgJXNcbiIsIG5hbWUpKTsKKyAgICAgICAgbmV0c25tcF9maWxlX3JlbGVhc2UobnNfZmlsZSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisjZWxzZSAgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT05UQUlORVJfRElSRUNUT1JZICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKGNvbnRhaW5lcl9kaXJlY3RvcnkpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ09OVEFJTkVSX0RJUkVDVE9SWSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9mZF9ldmVudF9tYW5hZ2VyLmMgYi9zbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYwppbmRleCBjODFjZmRlLi5mOWNmMDhlIDEwMDY0NAotLS0gYS9zbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYworKysgYi9zbm1wbGliL2ZkX2V2ZW50X21hbmFnZXIuYwpAQCAtNCw5ICs0LDE1IEBACiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ZkX2V2ZW50X21hbmFnZXIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0Lmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmZF9ldmVudF9tYW5hZ2VyLCBsaWJuZXRzbm1wKQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUgogaW50ICAgICBleHRlcm5hbF9yZWFkZmRbTlVNX0VYVEVSTkFMX0ZEU10sICAgZXh0ZXJuYWxfcmVhZGZkbGVuICAgPSAwOwogaW50ICAgICBleHRlcm5hbF93cml0ZWZkW05VTV9FWFRFUk5BTF9GRFNdLCAgZXh0ZXJuYWxfd3JpdGVmZGxlbiAgPSAwOwogaW50ICAgICBleHRlcm5hbF9leGNlcHRmZFtOVU1fRVhURVJOQUxfRkRTXSwgZXh0ZXJuYWxfZXhjZXB0ZmRsZW4gPSAwOwpAQCAtMTU5LDIyICsxNjUsNTUgQEAKICAqLwogdm9pZCBuZXRzbm1wX2V4dGVybmFsX2V2ZW50X2luZm8oaW50ICpudW1mZHMsIGZkX3NldCAqcmVhZGZkcywgZmRfc2V0ICp3cml0ZWZkcywgZmRfc2V0ICpleGNlcHRmZHMpCiB7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxyZWFkZmRzOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsd3JpdGVmZHM7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGxleGNlcHRmZHM7CisKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbHJlYWRmZHMsIEZEX1NFVFNJWkUpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsd3JpdGVmZHMsIEZEX1NFVFNJWkUpOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsZXhjZXB0ZmRzLCBGRF9TRVRTSVpFKTsKKworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbHJlYWRmZHMsIHJlYWRmZHMpOworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbHdyaXRlZmRzLCB3cml0ZWZkcyk7CisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsZXhjZXB0ZmRzLCBleGNlcHRmZHMpOworCisgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbzIobnVtZmRzLCAmbHJlYWRmZHMsICZsd3JpdGVmZHMsICZsZXhjZXB0ZmRzKTsKKworICBpZiAobmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQocmVhZGZkcywgJmxyZWFkZmRzKSA8IDAKKyAgICAgIHx8IG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KHdyaXRlZmRzLCAmbHdyaXRlZmRzKSA8IDAKKyAgICAgIHx8IG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KGV4Y2VwdGZkcywgJmxleGNlcHRmZHMpIDwgMCkKKyAgeworICAgIHNubXBfbG9nKExPR19FUlIsCisJICAgICAiVXNlIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbzIoKSBmb3IgcHJvY2Vzc2luZyIKKwkgICAgICIgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yc1xuIik7CisgIH0KKworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZscmVhZGZkcyk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmx3cml0ZWZkcyk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxleGNlcHRmZHMpOworfQorCit2b2lkIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbzIoaW50ICpudW1mZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnJlYWRmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKndyaXRlZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpleGNlcHRmZHMpCit7CiAgIGludCBpOwogCiAgIGV4dGVybmFsX2ZkX3VucmVnaXN0ZXJlZCA9IDA7CiAKICAgZm9yIChpID0gMDsgaSA8IGV4dGVybmFsX3JlYWRmZGxlbjsgaSsrKSB7Ci0gICAgRkRfU0VUKGV4dGVybmFsX3JlYWRmZFtpXSwgcmVhZGZkcyk7CisgICAgTkVUU05NUF9MQVJHRV9GRF9TRVQoZXh0ZXJuYWxfcmVhZGZkW2ldLCByZWFkZmRzKTsKICAgICBpZiAoZXh0ZXJuYWxfcmVhZGZkW2ldID49ICpudW1mZHMpCiAgICAgICAqbnVtZmRzID0gZXh0ZXJuYWxfcmVhZGZkW2ldICsgMTsKICAgfQogICBmb3IgKGkgPSAwOyBpIDwgZXh0ZXJuYWxfd3JpdGVmZGxlbjsgaSsrKSB7Ci0gICAgRkRfU0VUKGV4dGVybmFsX3dyaXRlZmRbaV0sIHdyaXRlZmRzKTsKKyAgICBORVRTTk1QX0xBUkdFX0ZEX1NFVChleHRlcm5hbF93cml0ZWZkW2ldLCB3cml0ZWZkcyk7CiAgICAgaWYgKGV4dGVybmFsX3dyaXRlZmRbaV0gPj0gKm51bWZkcykKICAgICAgICpudW1mZHMgPSBleHRlcm5hbF93cml0ZWZkW2ldICsgMTsKICAgfQogICBmb3IgKGkgPSAwOyBpIDwgZXh0ZXJuYWxfZXhjZXB0ZmRsZW47IGkrKykgewotICAgIEZEX1NFVChleHRlcm5hbF9leGNlcHRmZFtpXSwgZXhjZXB0ZmRzKTsKKyAgICBORVRTTk1QX0xBUkdFX0ZEX1NFVChleHRlcm5hbF9leGNlcHRmZFtpXSwgZXhjZXB0ZmRzKTsKICAgICBpZiAoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0gPj0gKm51bWZkcykKICAgICAgICpudW1mZHMgPSBleHRlcm5hbF9leGNlcHRmZFtpXSArIDE7CiAgIH0KQEAgLTE4NSwzOCArMjI0LDc0IEBACiAgKi8KIHZvaWQgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMoaW50ICpjb3VudCwgZmRfc2V0ICpyZWFkZmRzLCBmZF9zZXQgKndyaXRlZmRzLCBmZF9zZXQgKmV4Y2VwdGZkcykKIHsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbHJlYWRmZHM7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0IGx3cml0ZWZkczsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXQgbGV4Y2VwdGZkczsKKworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZscmVhZGZkcywgRkRfU0VUU0laRSk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmx3cml0ZWZkcywgRkRfU0VUU0laRSk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQoJmxleGNlcHRmZHMsIEZEX1NFVFNJWkUpOworCisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZscmVhZGZkcywgcmVhZGZkcyk7CisgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsd3JpdGVmZHMsIHdyaXRlZmRzKTsKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxleGNlcHRmZHMsIGV4Y2VwdGZkcyk7CisKKyAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMyKGNvdW50LCAmbHJlYWRmZHMsICZsd3JpdGVmZHMsICZsZXhjZXB0ZmRzKTsKKworICBpZiAobmV0c25tcF9jb3B5X2xhcmdlX2ZkX3NldF90b19mZF9zZXQocmVhZGZkcywgJmxyZWFkZmRzKSA8IDAKKyAgICAgIHx8IG5ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KHdyaXRlZmRzLCAgJmx3cml0ZWZkcykgPCAwCisgICAgICB8fCBuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldChleGNlcHRmZHMsICZsZXhjZXB0ZmRzKSA8IDApCisgIHsKKyAgICBzbm1wX2xvZyhMT0dfRVJSLAorCSAgICAgIlVzZSBuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50czIoKSBmb3IgcHJvY2Vzc2luZyIKKwkgICAgICIgbGFyZ2UgZmlsZSBkZXNjcmlwdG9yc1xuIik7CisgIH0KKworICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKCZscmVhZGZkcyk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmx3cml0ZWZkcyk7CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxleGNlcHRmZHMpOworfQorCit2b2lkIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzMihpbnQgKmNvdW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXQgKnJlYWRmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqd3JpdGVmZHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqZXhjZXB0ZmRzKQorewogICBpbnQgaTsKICAgZm9yIChpID0gMDsKICAgICAgICAqY291bnQgJiYgKGkgPCBleHRlcm5hbF9yZWFkZmRsZW4pICYmICFleHRlcm5hbF9mZF91bnJlZ2lzdGVyZWQ7IGkrKykgewotICAgICAgaWYgKEZEX0lTU0VUKGV4dGVybmFsX3JlYWRmZFtpXSwgcmVhZGZkcykpIHsKKyAgICAgIGlmIChORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGV4dGVybmFsX3JlYWRmZFtpXSwgcmVhZGZkcykpIHsKICAgICAgICAgICBERUJVR01TR1RMKCgiZmRfZXZlbnRfbWFuYWdlcjpuZXRzbm1wX2Rpc3BhdGNoX2V4dGVybmFsX2V2ZW50cyIsIAogICAgICAgICAgICAgICAgICAgICAgInJlYWRmZFslZF0gPSAlZFxuIiwgaSwgZXh0ZXJuYWxfcmVhZGZkW2ldKSk7CiAgICAgICAgICAgZXh0ZXJuYWxfcmVhZGZkZnVuY1tpXSAoZXh0ZXJuYWxfcmVhZGZkW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVybmFsX3JlYWRmZF9kYXRhW2ldKTsKLSAgICAgICAgICBGRF9DTFIoZXh0ZXJuYWxfcmVhZGZkW2ldLCByZWFkZmRzKTsKKyAgICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX0NMUihleHRlcm5hbF9yZWFkZmRbaV0sIHJlYWRmZHMpOwogICAgICAgICAgICgqY291bnQpLS07CiAgICAgICB9CiAgIH0KICAgZm9yIChpID0gMDsKICAgICAgICAqY291bnQgJiYgKGkgPCBleHRlcm5hbF93cml0ZWZkbGVuKSAmJiAhZXh0ZXJuYWxfZmRfdW5yZWdpc3RlcmVkOyBpKyspIHsKLSAgICAgIGlmIChGRF9JU1NFVChleHRlcm5hbF93cml0ZWZkW2ldLCB3cml0ZWZkcykpIHsKKyAgICAgIGlmIChORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGV4dGVybmFsX3dyaXRlZmRbaV0sIHdyaXRlZmRzKSkgewogICAgICAgICAgIERFQlVHTVNHVEwoKCJmZF9ldmVudF9tYW5hZ2VyOm5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzIiwgCiAgICAgICAgICAgICAgICAgICAgICAid3JpdGVmZFslZF0gPSAlZFxuIiwgaSwgZXh0ZXJuYWxfd3JpdGVmZFtpXSkpOwogICAgICAgICAgIGV4dGVybmFsX3dyaXRlZmRmdW5jW2ldIChleHRlcm5hbF93cml0ZWZkW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRlcm5hbF93cml0ZWZkX2RhdGFbaV0pOwotICAgICAgICAgIEZEX0NMUihleHRlcm5hbF93cml0ZWZkW2ldLCB3cml0ZWZkcyk7CisgICAgICAgICAgTkVUU05NUF9MQVJHRV9GRF9DTFIoZXh0ZXJuYWxfd3JpdGVmZFtpXSwgd3JpdGVmZHMpOwogICAgICAgICAgICgqY291bnQpLS07CiAgICAgICB9CiAgIH0KICAgZm9yIChpID0gMDsKICAgICAgICAqY291bnQgJiYgKGkgPCBleHRlcm5hbF9leGNlcHRmZGxlbikgJiYgIWV4dGVybmFsX2ZkX3VucmVnaXN0ZXJlZDsgaSsrKSB7Ci0gICAgICBpZiAoRkRfSVNTRVQoZXh0ZXJuYWxfZXhjZXB0ZmRbaV0sIGV4Y2VwdGZkcykpIHsKKyAgICAgIGlmIChORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGV4dGVybmFsX2V4Y2VwdGZkW2ldLCBleGNlcHRmZHMpKSB7CiAgICAgICAgICAgREVCVUdNU0dUTCgoImZkX2V2ZW50X21hbmFnZXI6bmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMiLCAKICAgICAgICAgICAgICAgICAgICAgICJleGNlcHRmZFslZF0gPSAlZFxuIiwgaSwgZXh0ZXJuYWxfZXhjZXB0ZmRbaV0pKTsKICAgICAgICAgICBleHRlcm5hbF9leGNlcHRmZGZ1bmNbaV0gKGV4dGVybmFsX2V4Y2VwdGZkW2ldLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZXJuYWxfZXhjZXB0ZmRfZGF0YVtpXSk7Ci0gICAgICAgICAgRkRfQ0xSKGV4dGVybmFsX2V4Y2VwdGZkW2ldLCBleGNlcHRmZHMpOworICAgICAgICAgIE5FVFNOTVBfTEFSR0VfRkRfQ0xSKGV4dGVybmFsX2V4Y2VwdGZkW2ldLCBleGNlcHRmZHMpOwogICAgICAgICAgICgqY291bnQpLS07CiAgICAgICB9CiAgIH0KIH0KKyNlbHNlICAvKiAgIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUiAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChmZF9ldmVudF9tYW5hZ2VyKTsKKyNlbmRpZiAvKiAgIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRkRfRVZFTlRfTUFOQUdFUiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9maWxlX3V0aWxzLmMgYi9zbm1wbGliL2ZpbGVfdXRpbHMuYwppbmRleCA4ZjdmYjZhLi41MjYxNDMxIDEwMDY0NAotLS0gYS9zbm1wbGliL2ZpbGVfdXRpbHMuYworKysgYi9zbm1wbGliL2ZpbGVfdXRpbHMuYwpAQCAtMSw0ICsxLDUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgpAQCAtMzcsNyArMzgsMTEgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZmlsZV91dGlscy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmlsZV91dGlsc19hbGwsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmlsZV91dGlscywgZmlsZV91dGlsc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZmlsZV9jbG9zZSwgZmlsZV91dGlsc19hbGwpCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSUxFX1VUSUxTCiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICoKICAqIFByb3RvdHlwZXMKQEAgLTc3LDYgKzgyLDMxIEBACiB9CiAKIC8qKgorICogb3BlbiBmaWxlIGFuZCBnZXQgc3RhdHMKKyAqLworbmV0c25tcF9maWxlICoKK25ldHNubXBfZmlsZV9uZXcoY29uc3QgY2hhciAqbmFtZSwgaW50IGZzX2ZsYWdzLCBtb2RlX3QgbW9kZSwgdV9pbnQgbnNfZmxhZ3MpCit7CisgICAgbmV0c25tcF9maWxlICpmaWxlaSA9IG5ldHNubXBfZmlsZV9maWxsKE5VTEwsIG5hbWUsIGZzX2ZsYWdzLCBtb2RlLCAwKTsKKyAgICBpZiAoTlVMTCA9PSBmaWxlaSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAobnNfZmxhZ3MgJiBORVRTTk1QX0ZJTEVfU1RBVFMpIHsKKyAgICAgICAgZmlsZWktPnN0YXRzID0gKHN0cnVjdCBzdGF0KiljYWxsb2MoMSwgc2l6ZW9mKCooZmlsZWktPnN0YXRzKSkpOworICAgICAgICBpZiAoTlVMTCA9PSBmaWxlaS0+c3RhdHMpCisgICAgICAgICAgICBERUJVR01TR1QoKCJuc2ZpbGU6bmV3IiwgIm5vIG1lbW9yeSBmb3Igc3RhdHNcbiIpKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdChuYW1lLCBmaWxlaS0+c3RhdHMpICE9IDApCisgICAgICAgICAgICBERUJVR01TR1QoKCJuc2ZpbGU6bmV3IiwgImVycm9yIGdldHRpbmcgc3RhdHNcbiIpKTsKKyAgICB9CisKKyAgICBpZiAobnNfZmxhZ3MgJiBORVRTTk1QX0ZJTEVfQVVUT19PUEVOKQorICAgICAgICBuZXRzbm1wX2ZpbGVfb3BlbihmaWxlaSk7CisKKyAgICByZXR1cm4gZmlsZWk7Cit9CisKKyAgICAgICAgCisvKioKICAqIGZpbGwgY29yZSBtZW1iZXJzIGluIGEgbmV0c25tcF9maWxlIHN0cnVjdHVyZQogICoKICAqIEBwYXJhbSBmaWxlaSAgICAgIHN0cnVjdHVyZSB0byBmaWxsOyBpZiBOVUxMLCBhIG5ldyBvbmUgd2lsbCBiZSBhbGxvY2F0ZWQKQEAgLTEwMCw2ICsxMzAsNyBAQAogCiAgICAgZmlsZWktPmZzX2ZsYWdzID0gZnNfZmxhZ3M7CiAgICAgZmlsZWktPm5zX2ZsYWdzID0gbnNfZmxhZ3M7CisgICAgZmlsZWktPm1vZGUgPSBtb2RlOwogCiAgICAgcmV0dXJuIGZpbGVpOwogfQpAQCAtMTI2LDYgKzE1Nyw5IEBACiAgICAgaWYgKE5VTEwgIT0gZmlsZWktPmV4dHJhcykKICAgICAgICAgbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEoZmlsZWktPmV4dHJhcyk7CiAKKyAgICBpZiAoTlVMTCAhPSBmaWxlaS0+c3RhdHMpCisgICAgICAgIGZyZWUoZmlsZWktPnN0YXRzKTsKKwogICAgIFNOTVBfRlJFRShmaWxlaSk7CiAKICAgICByZXR1cm4gcmM7CkBAIC0xNjEsNyArMTk1LDcgQEAKICAgICAgICAgZmlsZWktPmZkID0gb3BlbihmaWxlaS0+bmFtZSwgZmlsZWktPmZzX2ZsYWdzLCBmaWxlaS0+bW9kZSk7CiAKICAgICBpZiAoZmlsZWktPmZkIDwgMCkgewotICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZXJyb3Igb3BlbmluZyAlcyAoJWQpXG4iLCBmaWxlaS0+bmFtZSwgZXJybm8pOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9maWxlIiwgImVycm9yIG9wZW5pbmcgJXMgKCVkKVxuIiwgZmlsZWktPm5hbWUsIGVycm5vKSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTE3Nyw2ICsyMTEsNyBAQAogICogQHJldHZhbCAgMCA6IHN1Y2Nlc3MKICAqIEByZXR2YWwgLTEgOiBlcnJvcgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklMRV9DTE9TRQogaW50CiBuZXRzbm1wX2ZpbGVfY2xvc2UobmV0c25tcF9maWxlICogZmlsZWkpCiB7CkBAIC0yMDAsMTEgKzIzNSwyOSBAQAogICAgICAqLwogICAgIHJjID0gY2xvc2UoZmlsZWktPmZkKTsKICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgIHNubXBfbG9nKExPR19FUlIsICJlcnJvciBjbG9zaW5nICVzICglZClcbiIsIGZpbGVpLT5uYW1lLCBlcnJubyk7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2ZpbGUiLCAiZXJyb3IgY2xvc2luZyAlcyAoJWQpXG4iLCBmaWxlaS0+bmFtZSwgZXJybm8pKTsKICAgICB9CiAgICAgZWxzZQogICAgICAgICBmaWxlaS0+ZmQgPSAtMTsKIAogICAgIHJldHVybiByYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTEVfQ0xPU0UgKi8KIAordm9pZAorbmV0c25tcF9maWxlX2NvbnRhaW5lcl9mcmVlKG5ldHNubXBfZmlsZSAqZmlsZSwgdm9pZCAqY29udGV4dCkKK3sKKyAgICBuZXRzbm1wX2ZpbGVfcmVsZWFzZShmaWxlKTsKK30KKworaW50CituZXRzbm1wX2ZpbGVfY29tcGFyZV9uYW1lKG5ldHNubXBfZmlsZSAqbGhzLCBuZXRzbm1wX2ZpbGUgKnJocykKK3sKKyAgICBuZXRzbm1wX2Fzc2VydCgoTlVMTCAhPSBsaHMpICYmIChOVUxMICE9IHJocykpOworICAgIG5ldHNubXBfYXNzZXJ0KChOVUxMICE9IGxocy0+bmFtZSkgJiYgKE5VTEwgIT0gcmhzLT5uYW1lKSk7CisKKyAgICByZXR1cm4gc3RyY21wKGxocy0+bmFtZSwgcmhzLT5uYW1lKTsKK30KKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRklMRV9VVElMUyAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZChmaWxlX3V0aWxzKTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTEVfVVRJTFMgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvZ2V0b3B0LmMgYi9zbm1wbGliL2dldG9wdC5jCmluZGV4IGQyYjIwM2UuLjFlOGU5YzMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvZ2V0b3B0LmMKKysrIGIvc25tcGxpYi9nZXRvcHQuYwpAQCAtMzUsMTAgKzM1LDE0IEBACiAgICAgIiRJZCQiOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKwogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2dldG9wdC5oPgorCiAjaWZkZWYgX0JTRAogZXh0ZXJuIGNoYXIgICAgKl9fcHJvZ25hbWU7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9nZXR0aW1lb2ZkYXkuYyBiL3NubXBsaWIvZ2V0dGltZW9mZGF5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY1YzBhMAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvZ2V0dGltZW9mZGF5LmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIGdldHRpbWVvZmRheSgpIHJlcGxhY2VtZW50IGZvciBNU1ZDLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCisjaWZkZWYgSEFWRV9TWVNfVElNRUJfSAorIyBpbmNsdWRlIDxzeXMvdGltZWIuaD4gLyogX2Z0aW1lKCkgKi8KKyNlbmRpZgorI2lmIFRJTUVfV0lUSF9TWVNfVElNRQorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgorIyBpbmNsdWRlIDx0aW1lLmg+CisjZWxzZQorIyBpZiBIQVZFX1NZU19USU1FX0gKKyMgIGluY2x1ZGUgPHN5cy90aW1lLmg+CisjIGVsc2UKKyMgIGluY2x1ZGUgPHRpbWUuaD4KKyMgZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKworaW50CitnZXR0aW1lb2ZkYXkoc3RydWN0IHRpbWV2YWwgKnR2LCBzdHJ1Y3QgdGltZXpvbmUgKnR6KQoreworICAgIHN0cnVjdCBfdGltZWIgICB0aW1lYnVmZmVyOworCisgICAgX2Z0aW1lKCZ0aW1lYnVmZmVyKTsKKyAgICB0di0+dHZfdXNlYyA9IHRpbWVidWZmZXIubWlsbGl0bSAqIDEwMDA7CisgICAgdHYtPnR2X3NlYyA9IChsb25nKXRpbWVidWZmZXIudGltZTsKKyAgICByZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9pbmV0X250b3AuYyBiL3NubXBsaWIvaW5ldF9udG9wLmMKaW5kZXggYzI2YWZjNC4uMDViYWZiZSAxMDA2NDQKLS0tIGEvc25tcGxpYi9pbmV0X250b3AuYworKysgYi9zbm1wbGliL2luZXRfbnRvcC5jCkBAIC0xOSwxNiArMTksMTAgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWZuZGVmIEhBVkVfSU5FVF9OVE9QCi0KICNpZiBIQVZFX0FSUEFfTkFNRVNFUl9ICiAjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCiAjaW5jbHVkZSA8ZXJybm8uaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfU1RSSU5HX0gKQEAgLTM5LDYgKzMzLDggQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKwogI2lmbmRlZiBFQUZOT1NVUFBPUlQKICNkZWZpbmUgRUFGTk9TVVBQT1JUICAgICAgICAgICAgV1NBRUFGTk9TVVBQT1JUCiAjZW5kaWYKQEAgLTc2LDcgKzcyLDcgQEAKICAqCVBhdWwgVml4aWUsIDE5OTYuCiAgKi8KIGNvbnN0IGNoYXIgKgotaW5ldF9udG9wKGludCBhZiwgY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQorbmV0c25tcF9pbmV0X250b3AoaW50IGFmLCBjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCiB7CiAKIAlzd2l0Y2ggKGFmKSB7CkBAIC0yMTIsNSArMjA4LDMgQEAKIAlyZXR1cm4gKGRzdCk7CiB9CiAjZW5kaWYKLQotI2VuZGlmIC8qIEhBVkVfSU5FVF9OVE9QICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2luZXRfbnRvcC5oIGIvc25tcGxpYi9pbmV0X250b3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTFkOGE2Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9pbmV0X250b3AuaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9JTkVUX05UT1BfSAorI2RlZmluZSBfSU5FVF9OVE9QX0gKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKKyNpZm5kZWYgSEFWRV9JTkVUX05UT1AKK2NvbnN0IGNoYXIgICAgICpuZXRzbm1wX2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CisjZGVmaW5lIGluZXRfbnRvcCBuZXRzbm1wX2luZXRfbnRvcAorI2VuZGlmIC8qSEFWRV9JTkVUX05UT1AgKi8KKworI2VuZGlmIC8qX0lORVRfTlRPUF9IKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvaW5ldF9wdG9uLmMgYi9zbm1wbGliL2luZXRfcHRvbi5jCmluZGV4IDBhMDNhOGYuLjQ3ZmUzZWMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvaW5ldF9wdG9uLmMKKysrIGIvc25tcGxpYi9pbmV0X3B0b24uYwpAQCAtMTksMTggKzE5LDEyIEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmbmRlZiBIQVZFX0lORVRfUFRPTgotCiAjaW5jbHVkZSA8Y3R5cGUuaD4KIAogI2lmIEhBVkVfQVJQQV9OQU1FU0VSX0gKICNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KICNlbmRpZgogCi0jaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVFJJTkdfSApAQCAtNDAsNiArMzQsNyBAQAogI2VuZGlmCiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgogCiAjaWZuZGVmIEVBRk5PU1VQUE9SVAogI2RlZmluZSBFQUZOT1NVUFBPUlQgICAgICAgICAgICBXU0FFQUZOT1NVUFBPUlQKQEAgLTUyLDkgKzQ3LDYgQEAKICNpZm5kZWYgSU5UMTZTWgogI2RlZmluZQlJTlQxNlNaCQkyCiAjZW5kaWYKLSAgLyoKLSAgICogRW5kIG9mIE5ldC1TTk1QIFdpbjMyIGFkZGl0aW9ucwotICAgKi8KIAogI2lmbmRlZiBJTkFERFJTWgogI2RlZmluZQlJTkFERFJTWgk0CkBAIC04Miw3ICs3NCw3IEBACiAgKglQYXVsIFZpeGllLCAxOTk2LgogICovCiBpbnQKLWluZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KQorbmV0c25tcF9pbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKIHsKIAogCXN3aXRjaCAoYWYpIHsKQEAgLTMxNyw1ICszMDksMyBAQAogCXJldHVybiAoMSk7CiB9CiAjZW5kaWYKLQotI2VuZGlmIC8qIEhBVkVfSU5FVF9QVE9OICovCmRpZmYgLS1naXQgYS9zbm1wbGliL2luZXRfcHRvbi5oIGIvc25tcGxpYi9pbmV0X3B0b24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Njk2NjcxCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9pbmV0X3B0b24uaApAQCAtMCwwICsxLDEyIEBACisjaWZuZGVmIF9JTkVUX1BUT05fSAorI2RlZmluZSBfSU5FVF9QVE9OX0gKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisKKyNpZm5kZWYgSEFWRV9JTkVUX1BUT04KK2ludCAgICAgICAgICAgICBuZXRzbm1wX2luZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KTsKKyNkZWZpbmUgaW5ldF9wdG9uIG5ldHNubXBfaW5ldF9wdG9uCisjZW5kaWYgLypIQVZFX0lORVRfUFRPTiAqLworCisjZW5kaWYgLypfSU5FVF9QVE9OX0gqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9pbnQ2NC5jIGIvc25tcGxpYi9pbnQ2NC5jCmluZGV4IGVhNTY2NzMuLjUxZjFmMzIgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvaW50NjQuYworKysgYi9zbm1wbGliL2ludDY0LmMKQEAgLTE2LDkgKzE2LDYgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9pbnQ2NC5oPgpAQCAtMjYsNiArMjMsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9sb2dnaW5nLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiAvKioKICAqIERpdmlkZSBhbiB1bnNpZ25lZCA2NC1iaXQgaW50ZWdlciBieSAxMC4KICAqCkBAIC0yMDAsNiArMTk5LDggQEAKICAgICB1NjRJbmNyKHB1NjRvdXQsICZ0bXApOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodTY0Y29weSwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVTY0Q09QWQogLyoqCiAgKiBDb3B5IGEgNjQtYml0IG51bWJlci4KICAqCkBAIC0yMTEsNiArMjEyLDcgQEAKIHsKICAgICAqcHU2NG9uZSA9ICpwdTY0dHdvOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVTY0Q09QWSAqLwogCiAvKioKICAqIFNldCBhbiB1bnNpZ25lZCA2NC1iaXQgbnVtYmVyIHRvIHplcm8uCkBAIC0yNjYsNyArMjY4LDcgQEAKICAgICBpZiggKE5VTEwgPT0gb2xkX3ZhbCkgfHwgKE5VTEwgPT0gbmV3X3ZhbCkgKQogICAgICAgICByZXR1cm4gLTE7CiAKLSAgICBERUJVR01TR1RMKCgiOTpjNjQ6Y2hlY2tfd3JhcCIsICJjaGVjayB3cmFwIDB4JTB4LjB4JTB4IDB4JTB4LjB4JTB4XG4iLAorICAgIERFQlVHTVNHVEwoKCI5OmM2NDpjaGVja193cmFwIiwgImNoZWNrIHdyYXAgMHglMGx4LjB4JTBseCAweCUwbHguMHglMGx4XG4iLAogICAgICAgICAgICAgICAgIG9sZF92YWwtPmhpZ2gsIG9sZF92YWwtPmxvdywgbmV3X3ZhbC0+aGlnaCwgbmV3X3ZhbC0+bG93KSk7CiAgICAgCiAgICAgLyoKQEAgLTM0NSw3ICszNDcsNyBAQAogICAgIGlmICgoTlVMTCA9PSBuZWVkX3dyYXBfY2hlY2spIHx8ICgwICE9ICpuZWVkX3dyYXBfY2hlY2spKSB7CiAgICAgICAgIHJjID0gbmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAob2xkX3ByZXZfdmFsLG5ld192YWwsIDEpOwogICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJjNjQgMzIgYml0IGNoZWNrIGZhaWxlZFxuIik7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiYzY0IiwiMzIgYml0IGNoZWNrIGZhaWxlZFxuIikpOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgfQpAQCAtMzc1LDcgKzM3Nyw3IEBACiAgICAgICAgICAqLwogICAgICAgICBpZiAoKHByZXZfdmFsLT5sb3cgIT0gbmV3X3ZhbC0+bG93KSB8fAogICAgICAgICAgICAgKHByZXZfdmFsLT5oaWdoICE9IG5ld192YWwtPmhpZ2gpKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibG9va3MgbGlrZSBhIDY0Yml0IHdyYXAsIGJ1dCBwcmV2IT1uZXdcbiIpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImM2NCIsICJsb29rcyBsaWtlIGEgNjRiaXQgd3JhcCwgYnV0IHByZXYhPW5ld1xuIikpOwogICAgICAgICAgICAgcmV0dXJuIC0yOwogICAgICAgICB9CiAgICAgICAgIGVsc2UgaWYgKE5VTEwgIT0gbmVlZF93cmFwX2NoZWNrKQpAQCAtNDQyLDcgKzQ0NCw3IEBACiAgICAgICAgIHN0cisrOwogICAgIH0KIAotICAgIHdoaWxlICgqc3RyICYmIGlzZGlnaXQoKnN0cikpIHsKKyAgICB3aGlsZSAoKnN0ciAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqc3RyKSkpIHsKICAgICAgICAgb2sgPSAxOwogICAgICAgICB1ID0gKnN0ciAtICcwJzsKICAgICAgICAgbXVsdEJ5MTAoKmk2NCwgJmk2NHApOwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9rZXl0b29scy5jIGIvc25tcGxpYi9rZXl0b29scy5jCmluZGV4IGFhNmE3MTIuLjBjY2IzYTYgMTAwNjQ0Ci0tLSBhL3NubXBsaWIva2V5dG9vbHMuYworKysgYi9zbm1wbGliL2tleXRvb2xzLmMKQEAgLTE0LDEyICsxNCwxMCBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCkBAIC01MSw2ICs0OSwxMCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWQ1Lmg+CiAjZW5kaWYKICNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9tZDUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfc2hhLmg+CisjZW5kaWYKIAogI2lmZGVmIE5FVFNOTVBfVVNFX1BLQ1MxMQogI2luY2x1ZGUgPHNlY3VyaXR5L2NyeXB0b2tpLmg+CkBAIC02MSw2ICs2MywxMSBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX3N1cHBvcnQsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX2tleXRvb2xzLCB1c21fc3VwcG9ydCkKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9LRVlUT09MUworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogZ2VuZXJhdGVfS3UKICAqCkBAIC05NiwxMSArMTAzLDE1IEBACiAgKi8KIGludAogZ2VuZXJhdGVfS3UoY29uc3Qgb2lkICogaGFzaHR5cGUsIHVfaW50IGhhc2h0eXBlX2xlbiwKLSAgICAgICAgICAgIHVfY2hhciAqIFAsIHNpemVfdCBwcGxlbiwgdV9jaGFyICogS3UsIHNpemVfdCAqIGt1bGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpCisgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBQLCBzaXplX3QgcHBsZW4sIHVfY2hhciAqIEt1LCBzaXplX3QgKiBrdWxlbikKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKICAgICAgICAgbmJ5dGVzID0gVVNNX0xFTkdUSF9FWFBBTkRFRF9QQVNTUEhSQVNFOworI2lmICFkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIFwKKyAgICBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCisgICAgaW50ICAgICAgICAgICAgIHJldDsKKyNlbmRpZgogCiAgICAgdV9pbnQgICAgICAgICAgIGksIHBpbmRleCA9IDA7CiAKQEAgLTEwOCw3ICsxMTksMTIgQEAKIAogI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKICAgICBFVlBfTURfQ1RYICAgICAqY3R4ID0gTlVMTDsKLSAgICB1bnNpZ25lZCBpbnQgICAgdG1wX2xlbjsKKyNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworICAgIFNIQV9DVFggY3NoYTE7CisgICAgTUQ1X0NUWCBjbWQ1OworICAgIGNoYXIgICAgY3J5cHRvdHlwZSA9IDA7CisjZGVmaW5lIFRZUEVfTUQ1ICAxCisjZGVmaW5lIFRZUEVfU0hBMSAyCiAjZWxzZQogICAgIE1Ec3RydWN0ICAgICAgICBNRDsKICNlbmRpZgpAQCAtMTM3LDE3ICsxNTMsMzUgQEAKICAgICBjdHggPSBFVlBfTURfQ1RYX2NyZWF0ZSgpOwogI2Vsc2UKICAgICBjdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKLSAgICBFVlBfTURfQ1RYX2luaXQoY3R4KTsKKyAgICBpZiAoIUVWUF9NRF9DVFhfaW5pdChjdHgpKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAjZW5kaWYKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQotICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ01ENUF1dGgpKQotICAgICAgICBFVlBfRGlnZXN0SW5pdChjdHgsIEVWUF9tZDUoKSk7Ci0gICAgZWxzZQorICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ01ENUF1dGgpKSB7CisgICAgICAgIGlmICghRVZQX0RpZ2VzdEluaXQoY3R4LCBFVlBfbWQ1KCkpKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0gZWxzZQogI2VuZGlmCi0gICAgICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ1NIQTFBdXRoKSkKLSAgICAgICAgRVZQX0RpZ2VzdEluaXQoY3R4LCBFVlBfc2hhMSgpKTsKLSAgICBlbHNlCisgICAgICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ1NIQTFBdXRoKSkgeworICAgICAgICAgICAgaWYgKCFFVlBfRGlnZXN0SW5pdChjdHgsIEVWUF9zaGExKCkpKQorICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfSBlbHNlCiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIGdlbmVyYXRlX0t1X3F1aXQpOworI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKKyAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNNRDVBdXRoKSkgeworICAgICAgICBpZiAoIU1ENV9Jbml0KCZjbWQ1KSkKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgY3J5cHRvdHlwZSA9IFRZUEVfTUQ1OworICAgIH0gZWxzZQorI2VuZGlmCisgICAgICAgICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ1NIQTFBdXRoKSkgeworICAgICAgICBpZiAoIVNIQTFfSW5pdCgmY3NoYTEpKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICBjcnlwdG90eXBlID0gVFlQRV9TSEExOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAoU05NUEVSUl9HRU5FUlIpOworICAgIH0KICNlbHNlCiAgICAgTURiZWdpbigmTUQpOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1VTRV9PUEVOU1NMICovCkBAIC0xNTksMjkgKzE5Myw1NCBAQAogICAgICAgICB9CiAjaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTAogICAgICAgICBFVlBfRGlnZXN0VXBkYXRlKGN0eCwgYnVmLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7CisjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyAgICAgICAgaWYgKFRZUEVfU0hBMSA9PSBjcnlwdG90eXBlKSB7CisgICAgICAgICAgICBydmFsID0gIVNIQTFfVXBkYXRlKCZjc2hhMSwgYnVmLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBydmFsID0gIU1ENV9VcGRhdGUoJmNtZDUsIGJ1ZiwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOworICAgICAgICB9CisgICAgICAgIGlmIChydmFsICE9IDApIHsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9FTkNSWVBUSU9ORVJST1I7CisgICAgICAgIH0KICNlbGlmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQogICAgICAgICBpZiAoTUR1cGRhdGUoJk1ELCBidWYsIFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLICogOCkpIHsKICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1VTTV9FTkNSWVBUSU9ORVJST1I7CiAgICAgICAgICAgICBnb3RvIG1kNV9maW47CiAgICAgICAgIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTkVUU05NUF9VU0VfT1BFTlNTTCAqLwotCiAgICAgICAgIG5ieXRlcyAtPSBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSzsKICAgICB9CiAKICNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCisgICAgeworICAgIHVuc2lnbmVkIGludCAgICB0bXBfbGVuOworCiAgICAgdG1wX2xlbiA9ICprdWxlbjsKICAgICBFVlBfRGlnZXN0RmluYWwoY3R4LCAodW5zaWduZWQgY2hhciAqKSBLdSwgJnRtcF9sZW4pOwogICAgICprdWxlbiA9IHRtcF9sZW47CiAgICAgLyoKICAgICAgKiB3aGF0IGFib3V0IGZyZWUoKSAKICAgICAgKi8KKyAgICB9CisjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyAgICBpZiAoVFlQRV9TSEExID09IGNyeXB0b3R5cGUpIHsKKyAgICAgICAgU0hBMV9GaW5hbChLdSwgJmNzaGExKTsKKyAgICB9IGVsc2UgeworICAgICAgICBNRDVfRmluYWwoS3UsICZjbWQ1KTsKKyAgICB9CisgICAgcmV0ID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChoYXNodHlwZSwgaGFzaHR5cGVfbGVuKTsKKyAgICBpZiAocmV0ID09IFNOTVBFUlJfR0VORVJSKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgKmt1bGVuID0gcmV0OwogI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1CiAgICAgaWYgKE1EdXBkYXRlKCZNRCwgYnVmLCAwKSkgewogICAgICAgICBydmFsID0gU05NUEVSUl9VU01fRU5DUllQVElPTkVSUk9SOwogICAgICAgICBnb3RvIG1kNV9maW47CiAgICAgfQotICAgICprdWxlbiA9IHNjX2dldF9wcm9wZXJsZW5ndGgoaGFzaHR5cGUsIGhhc2h0eXBlX2xlbik7CisgICAgcmV0ID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChoYXNodHlwZSwgaGFzaHR5cGVfbGVuKTsKKyAgICBpZiAocmV0ID09IFNOTVBFUlJfR0VORVJSKQorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgKmt1bGVuID0gcmV0OwogICAgIE1EZ2V0KCZNRCwgS3UsICprdWxlbik7CiAgIG1kNV9maW46CiAgICAgbWVtc2V0KCZNRCwgMCwgc2l6ZW9mKE1EKSk7CkBAIC0yOTIsMTAgKzM1MSwxMCBAQAogICovCiBpbnQKIGdlbmVyYXRlX2t1bChjb25zdCBvaWQgKiBoYXNodHlwZSwgdV9pbnQgaGFzaHR5cGVfbGVuLAotICAgICAgICAgICAgIHVfY2hhciAqIGVuZ2luZUlELCBzaXplX3QgZW5naW5lSURfbGVuLAotICAgICAgICAgICAgIHVfY2hhciAqIEt1LCBzaXplX3Qga3VfbGVuLAorICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCBzaXplX3QgZW5naW5lSURfbGVuLAorICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIEt1LCBzaXplX3Qga3VfbGVuLAogICAgICAgICAgICAgIHVfY2hhciAqIEt1bCwgc2l6ZV90ICoga3VsX2xlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgdV9pbnQgICAgICAgICAgIG5ieXRlcyA9IDA7CkBAIC0zMjQsNyArMzgzLDcgQEAKIAogICAgIHByb3Blcmxlbmd0aCA9IChzaXplX3QpIGlwcm9wZXJsZW5ndGg7CiAKLSAgICBpZiAoKChpbnQpICprdWxfbGVuIDwgcHJvcGVybGVuZ3RoKSB8fCAoKGludCkga3VfbGVuIDwgcHJvcGVybGVuZ3RoKSkgeworICAgIGlmICgoKmt1bF9sZW4gPCBwcm9wZXJsZW5ndGgpIHx8IChrdV9sZW4gPCBwcm9wZXJsZW5ndGgpKSB7CiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIGdlbmVyYXRlX2t1bF9xdWl0KTsKICAgICB9CiAKQEAgLTQwMyw5ICs0NjIsMTAgQEAKICAgICAgICAgICAgICAgICAgdV9jaGFyICogb2xka2V5LCBzaXplX3Qgb2xka2V5X2xlbiwKICAgICAgICAgICAgICAgICAgdV9jaGFyICogbmV3a2V5LCBzaXplX3QgbmV3a2V5X2xlbiwKICAgICAgICAgICAgICAgICAgdV9jaGFyICoga2NzdHJpbmcsIHNpemVfdCAqIGtjc3RyaW5nX2xlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CisgICAgaW50ICAgICAgICAgICAgIGlwcm9wZXJsZW5ndGg7CiAgICAgc2l6ZV90ICAgICAgICAgIHByb3Blcmxlbmd0aDsKICAgICBzaXplX3QgICAgICAgICAgbmJ5dGVzID0gMDsKIApAQCAtNDI3LDE1ICs0ODcsMTUgQEAKICAgICAvKgogICAgICAqIFNldHVwIGZvciB0aGUgdHJhbnNmb3JtIHR5cGUuCiAgICAgICovCi0gICAgcHJvcGVybGVuZ3RoID0gc2NfZ2V0X3Byb3Blcmxlbmd0aChoYXNodHlwZSwgaGFzaHR5cGVfbGVuKTsKLSAgICBpZiAocHJvcGVybGVuZ3RoID09IFNOTVBFUlJfR0VORVJSKQorICAgIGlwcm9wZXJsZW5ndGggPSBzY19nZXRfcHJvcGVybGVuZ3RoKGhhc2h0eXBlLCBoYXNodHlwZV9sZW4pOworICAgIGlmIChpcHJvcGVybGVuZ3RoID09IFNOTVBFUlJfR0VORVJSKQogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBlbmNvZGVfa2V5Y2hhbmdlX3F1aXQpOwogCiAgICAgaWYgKChvbGRrZXlfbGVuICE9IG5ld2tleV9sZW4pIHx8ICgqa2NzdHJpbmdfbGVuIDwgKDIgKiBvbGRrZXlfbGVuKSkpIHsKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgZW5jb2RlX2tleWNoYW5nZV9xdWl0KTsKICAgICB9CiAKLSAgICBwcm9wZXJsZW5ndGggPSBTTk1QX01JTigoaW50KSBvbGRrZXlfbGVuLCBwcm9wZXJsZW5ndGgpOworICAgIHByb3Blcmxlbmd0aCA9IFNOTVBfTUlOKG9sZGtleV9sZW4sIChzaXplX3QpaXByb3Blcmxlbmd0aCk7CiAKICAgICAvKgogICAgICAqIFVzZSB0aGUgb2xkIGtleSBhbmQgc29tZSByYW5kb20gYnl0ZXMgdG8gZW5jb2RlIHRoZSBuZXcga2V5CkBAIC00NTYsNyArNTE2LDcgQEAKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIU5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERSAqLwogICAgIHJ2YWwgPSBzY19yYW5kb20oa2NzdHJpbmcsICZuYnl0ZXMpOwogICAgIFFVSVRGVU4ocnZhbCwgZW5jb2RlX2tleWNoYW5nZV9xdWl0KTsKLSAgICBpZiAoKGludCkgbmJ5dGVzICE9IHByb3Blcmxlbmd0aCkgeworICAgIGlmIChuYnl0ZXMgIT0gcHJvcGVybGVuZ3RoKSB7CiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIGVuY29kZV9rZXljaGFuZ2VfcXVpdCk7CiAgICAgfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFICovCkBAIC00NzYsNyArNTM2LDcgQEAKIAogICAgICAgICBrY3N0cmluZyArPSBwcm9wZXJsZW5ndGg7CiAgICAgICAgIG5ieXRlcyA9IDA7Ci0gICAgICAgIHdoaWxlICgoaW50KSAobmJ5dGVzKyspIDwgcHJvcGVybGVuZ3RoKSB7CisgICAgICAgIHdoaWxlICgobmJ5dGVzKyspIDwgcHJvcGVybGVuZ3RoKSB7CiAgICAgICAgICAgICAqa2NzdHJpbmcrKyBePSAqbmV3a2V5Kys7CiAgICAgICAgIH0KICAgICB9CkBAIC01MzEsNyArNTkxLDcgQEAKICAgICAgICAgICAgICAgICAgdV9jaGFyICogb2xka2V5LCBzaXplX3Qgb2xka2V5X2xlbiwKICAgICAgICAgICAgICAgICAgdV9jaGFyICoga2NzdHJpbmcsIHNpemVfdCBrY3N0cmluZ19sZW4sCiAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG5ld2tleSwgc2l6ZV90ICogbmV3a2V5X2xlbikKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgc2l6ZV90ICAgICAgICAgIHByb3Blcmxlbmd0aCA9IDA7CkBAIC01ODgsNyArNjQ4LDcgQEAKICAgICAgICAgbWVtY3B5KG5ld2tleSwgdG1wX2J1ZiwgcHJvcGVybGVuZ3RoKTsKICAgICAgICAgYnVmcCA9IGtjc3RyaW5nICsgcHJvcGVybGVuZ3RoOwogICAgICAgICBuYnl0ZXMgPSAwOwotICAgICAgICB3aGlsZSAoKGludCkgKG5ieXRlcysrKSA8IHByb3Blcmxlbmd0aCkgeworICAgICAgICB3aGlsZSAoKG5ieXRlcysrKSA8IHByb3Blcmxlbmd0aCkgewogICAgICAgICAgICAgKm5ld2tleSsrIF49ICpidWZwKys7CiAgICAgICAgIH0KICAgICB9CkBAIC01OTksOCArNjU5LDcgQEAKICAgICAgICAgICAgIG1lbXNldChuZXdrZXksIDAsIHByb3Blcmxlbmd0aCk7CiAgICAgfQogICAgIG1lbXNldCh0bXBfYnVmLCAwLCBTTk1QX01BWEJVRik7Ci0gICAgaWYgKHRtcGJ1ZiAhPSBOVUxMKQotICAgICAgICBTTk1QX0ZSRUUodG1wYnVmKTsKKyAgICBTTk1QX0ZSRUUodG1wYnVmKTsKIAogICAgIHJldHVybiBydmFsOwogCkBAIC02MDksMyArNjY4LDQgQEAKICNlbHNlCiBfS0VZVE9PTFNfTk9UX0FWQUlMQUJMRQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBpbnRlcm5hbCBvciBvcGVuc3NsICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fS0VZVE9PTFMgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvbGFyZ2VfZmRfc2V0LmMgYi9zbm1wbGliL2xhcmdlX2ZkX3NldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4ZGQ0ODEKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL2xhcmdlX2ZkX3NldC5jCkBAIC0wLDAgKzEsMjYwIEBACisvKioKKyAqIEBmaWxlIGxhcmdlX2ZkX3NldC5jCisgKgorICogQGJyaWVmIE1hY3JvJ3MgYW5kIGZ1bmN0aW9ucyBmb3IgbWFuaXB1bGF0aW9uIG9mIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBzZXRzLgorICovCisKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4gLyogbWVtc2V0KCksIHdoaWNoIGlzIGludm9rZWQgYnkgRkRfWkVSTygpICovCisKKyNpZmRlZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0Lmg+CisKKworI2lmICFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKworI2RlZmluZSBMRkRfU0VUKG4sIHApICAgIEZEX1NFVChuLCBwKQorI2RlZmluZSBMRkRfQ0xSKG4sIHApICAgIEZEX0NMUihuLCBwKQorI2RlZmluZSBMRkRfSVNTRVQobiwgcCkgIEZEX0lTU0VUKG4sIHApCisKK3ZvaWQKK25ldHNubXBfbGFyZ2VfZmRfc2V0ZmQoU09DS0VUIGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIHVuc2lnbmVkICAgICAgICBpOworCisgICAgbmV0c25tcF9hc3NlcnQoZmQgIT0gSU5WQUxJRF9TT0NLRVQpOworCisgICAgaWYgKGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50ID09IGZkc2V0LT5sZnNfc2V0c2l6ZSkKKyAgICAgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKGZkc2V0LCAyICogKGZkc2V0LT5sZnNfc2V0c2l6ZSArIDEpKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmZHNldC0+bGZzX3NldC5mZF9jb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChmZHNldC0+bGZzX3NldC5mZF9hcnJheVtpXSA9PSAoU09DS0VUKSAoZmQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKGkgPT0gZmRzZXQtPmxmc19zZXQuZmRfY291bnQKKyAgICAgICAgJiYgZmRzZXQtPmxmc19zZXQuZmRfY291bnQgPCBmZHNldC0+bGZzX3NldHNpemUpIHsKKyAgICAgICAgZmRzZXQtPmxmc19zZXQuZmRfY291bnQrKzsKKyAgICAgICAgZmRzZXQtPmxmc19zZXQuZmRfYXJyYXlbaV0gPSBmZDsKKyAgICB9Cit9CisKK3ZvaWQKK25ldHNubXBfbGFyZ2VfZmRfY2xyKFNPQ0tFVCBmZCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKKyAgICB1bnNpZ25lZCAgICAgICAgaTsKKworICAgIG5ldHNubXBfYXNzZXJ0KGZkICE9IElOVkFMSURfU09DS0VUKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBmZHNldC0+bGZzX3NldC5mZF9jb3VudDsgaSsrKSB7CisgICAgICAgIGlmIChmZHNldC0+bGZzX3NldC5mZF9hcnJheVtpXSA9PSBmZCkgeworICAgICAgICAgICAgd2hpbGUgKGkgPCBmZHNldC0+bGZzX3NldC5mZF9jb3VudCAtIDEpIHsKKyAgICAgICAgICAgICAgICBmZHNldC0+bGZzX3NldC5mZF9hcnJheVtpXSA9CisgICAgICAgICAgICAgICAgICAgIGZkc2V0LT5sZnNfc2V0LmZkX2FycmF5W2kgKyAxXTsKKyAgICAgICAgICAgICAgICBpKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBmZHNldC0+bGZzX3NldC5mZF9jb3VudC0tOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKK2ludAorbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoU09DS0VUIGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIHVuc2lnbmVkIGludCAgICBpOworCisgICAgbmV0c25tcF9hc3NlcnQoZmQgIT0gSU5WQUxJRF9TT0NLRVQpOworCisgICAgZm9yIChpID0gMDsgaSA8IGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50OyBpKyspIHsKKyAgICAgICAgaWYgKGZkc2V0LT5sZnNfc2V0LmZkX2FycmF5W2ldID09IGZkKQorICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjZWxzZQorCisvKgorICogUmVjZW50IHZlcnNpb25zIG9mIGdsaWJjIHRyaWdnZXIgYWJvcnQoKSBpZiBGRF9TRVQoKSwgRkRfQ0xSKCkgb3IKKyAqIEZEX0lTU0VUKCkgaXMgaW52b2tlZCB3aXRoIG4gPj0gRkRfU0VUU0laRS4gSGVuY2UgdGhlc2UgcmVwbGFjZW1lbnQgbWFjcm9zLgorICovCisjZGVmaW5lIExGRF9TRVQobiwgcCkgICAgKChwKS0+ZmRzX2JpdHNbKG4pL05GREJJVFNdIHw9ICAoMVVMTCA8PCAoKG4pICUgTkZEQklUUykpKQorI2RlZmluZSBMRkRfQ0xSKG4sIHApICAgICgocCktPmZkc19iaXRzWyhuKS9ORkRCSVRTXSAmPSB+KDFVTEwgPDwgKChuKSAlIE5GREJJVFMpKSkKKyNkZWZpbmUgTEZEX0lTU0VUKG4sIHApICAoKHApLT5mZHNfYml0c1sobikvTkZEQklUU10gJiAgICgxVUxMIDw8ICgobikgJSBORkRCSVRTKSkpCisKK3ZvaWQKK25ldHNubXBfbGFyZ2VfZmRfc2V0ZmQoaW50IGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIG5ldHNubXBfYXNzZXJ0KGZkID49IDApOworCisgICAgd2hpbGUgKGZkID49IChpbnQpZmRzZXQtPmxmc19zZXRzaXplKQorICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoZmRzZXQsIDIgKiAoZmRzZXQtPmxmc19zZXRzaXplICsgMSkpOworCisgICAgTEZEX1NFVChmZCwgZmRzZXQtPmxmc19zZXRwdHIpOworfQorCit2b2lkCituZXRzbm1wX2xhcmdlX2ZkX2NscihpbnQgZmQsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgbmV0c25tcF9hc3NlcnQoZmQgPj0gMCk7CisKKyAgICBpZiAoKHVuc2lnbmVkKWZkIDwgZmRzZXQtPmxmc19zZXRzaXplKQorICAgICAgICBMRkRfQ0xSKGZkLCBmZHNldC0+bGZzX3NldHB0cik7Cit9CisKK2ludAorbmV0c25tcF9sYXJnZV9mZF9pc19zZXQoaW50IGZkLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQoreworICAgIG5ldHNubXBfYXNzZXJ0KGZkID49IDApOworCisgICAgcmV0dXJuICgodW5zaWduZWQpZmQgPCBmZHNldC0+bGZzX3NldHNpemUgJiYKKyAgICAgICAgICAgIExGRF9JU1NFVChmZCwgZmRzZXQtPmxmc19zZXRwdHIpKTsKK30KKworI2VuZGlmCisKK3ZvaWQKK25ldHNubXBfbGFyZ2VfZmRfc2V0X2luaXQobmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCwgaW50IHNldHNpemUpCit7CisgICAgZmRzZXQtPmxmc19zZXRzaXplID0gMDsKKyAgICBmZHNldC0+bGZzX3NldHB0ciAgPSBOVUxMOworI2lmICFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKKyAgICBmZHNldC0+bGZzX3NldC5mZF9jb3VudCA9IDA7CisjZW5kaWYKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoZmRzZXQsIHNldHNpemUpOworfQorCitpbnQKK25ldHNubXBfbGFyZ2VfZmRfc2V0X3NlbGVjdChpbnQgbnVtZmRzLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqcmVhZGZkcywKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICp3cml0ZWZkcywKKyAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpleGNlcHRmZHMsCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCkKK3sKKyNpZiBkZWZpbmVkKGN5Z3dpbikgfHwgIWRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisgICAgLyogQml0LXNldCByZXByZXNlbnRhdGlvbjogbWFrZSBzdXJlIGFsbCBmZHMgaGF2ZSBhdCBsZWFzdCBzaXplICdudW1mZHMnLiAqLworICAgIGlmIChyZWFkZmRzICYmIHJlYWRmZHMtPmxmc19zZXRzaXplIDwgbnVtZmRzKQorICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUocmVhZGZkcywgbnVtZmRzKTsKKyAgICBpZiAod3JpdGVmZHMgJiYgd3JpdGVmZHMtPmxmc19zZXRzaXplIDwgbnVtZmRzKQorICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUod3JpdGVmZHMsIG51bWZkcyk7CisgICAgaWYgKGV4Y2VwdGZkcyAmJiBleGNlcHRmZHMtPmxmc19zZXRzaXplIDwgbnVtZmRzKQorICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoZXhjZXB0ZmRzLCBudW1mZHMpOworI2Vsc2UKKyAgICAvKiBBcnJheSByZXByZXNlbnRhdGlvbjogbm8gcmVzaXppbmcgaXMgbmVjZXNzYXJ5LiAqLworI2VuZGlmCisKKyAgICByZXR1cm4gc2VsZWN0KG51bWZkcywKKyAgICAgICAgICAgIHJlYWRmZHMgPyByZWFkZmRzLT5sZnNfc2V0cHRyIDogTlVMTCwKKyAgICAgICAgICAgIHdyaXRlZmRzID8gd3JpdGVmZHMtPmxmc19zZXRwdHIgOiBOVUxMLAorICAgICAgICAgICAgZXhjZXB0ZmRzID8gZXhjZXB0ZmRzLT5sZnNfc2V0cHRyIDogTlVMTCwKKyAgICAgICAgICAgIHRpbWVvdXQpOworfQorCitpbnQKK25ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0LCBpbnQgc2V0c2l6ZSkKK3sKKyAgICBpbnQgICAgICAgICAgICAgZmRfc2V0X2J5dGVzOworCisgICAgaWYgKGZkc2V0LT5sZnNfc2V0c2l6ZSA9PSBzZXRzaXplKQorICAgICAgICBnb3RvIHN1Y2Nlc3M7CisKKyAgICBpZiAoc2V0c2l6ZSA+IEZEX1NFVFNJWkUpIHsKKyAgICAgICAgZmRfc2V0X2J5dGVzID0gTkVUU05NUF9GRF9TRVRfQllURVMoc2V0c2l6ZSk7CisgICAgICAgIGlmIChmZHNldC0+bGZzX3NldHNpemUgPiBGRF9TRVRTSVpFKSB7CisgICAgICAgICAgICBmZHNldC0+bGZzX3NldHB0ciA9IHJlYWxsb2MoZmRzZXQtPmxmc19zZXRwdHIsIGZkX3NldF9ieXRlcyk7CisgICAgICAgICAgICBpZiAoIWZkc2V0LT5sZnNfc2V0cHRyKQorICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGZkc2V0LT5sZnNfc2V0cHRyID0gbWFsbG9jKGZkX3NldF9ieXRlcyk7CisgICAgICAgICAgICBpZiAoIWZkc2V0LT5sZnNfc2V0cHRyKQorICAgICAgICAgICAgICAgIGdvdG8gb3V0X29mX21lbTsKKyAgICAgICAgICAgICpmZHNldC0+bGZzX3NldHB0ciA9IGZkc2V0LT5sZnNfc2V0OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGZkc2V0LT5sZnNfc2V0c2l6ZSA+IEZEX1NFVFNJWkUpIHsKKyAgICAgICAgICAgIGZkc2V0LT5sZnNfc2V0ID0gKmZkc2V0LT5sZnNfc2V0cHRyOworICAgICAgICAgICAgZnJlZShmZHNldC0+bGZzX3NldHB0cik7CisgICAgICAgIH0KKyAgICAgICAgZmRzZXQtPmxmc19zZXRwdHIgPSAmZmRzZXQtPmxmc19zZXQ7CisgICAgfQorCisjaWYgZGVmaW5lZChjeWd3aW4pIHx8ICFkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorICAgIC8qCisgICAgICogVW5peDogd2hlbiBlbmxhcmdpbmcsIGNsZWFyIHRoZSBmaWxlIGRlc2NyaXB0b3JzIGRlZmluZWQgaW4gdGhlCisgICAgICogcmVzaXplZCAqZmRzZXQgYnV0IHRoYXQgd2VyZSBub3QgZGVmaW5lZCBpbiB0aGUgb3JpZ2luYWwgKmZkc2V0LgorICAgICAqLworICAgIGlmICggZmRzZXQtPmxmc19zZXRzaXplID09IDAgJiYgc2V0c2l6ZSA9PSBGRF9TRVRTSVpFICkgeworICAgICAgICAvKiBJbiB0aGlzIGNhc2Ugd2UgY2FuIHVzZSB0aGUgT1MncyBGRF9aRVJPICovCisgICAgICAgIEZEX1pFUk8oZmRzZXQtPmxmc19zZXRwdHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGludCAgICAgICAgICAgICBpOworCisgICAgICAgIGZvciAoaSA9IGZkc2V0LT5sZnNfc2V0c2l6ZTsgaSA8IHNldHNpemU7IGkrKykKKyAgICAgICAgICAgIExGRF9DTFIoaSwgZmRzZXQtPmxmc19zZXRwdHIpOworICAgIH0KKyNlbmRpZgorCisgICAgZmRzZXQtPmxmc19zZXRzaXplID0gc2V0c2l6ZTsKKyNpZiAhZGVmaW5lZChjeWd3aW4pICYmIGRlZmluZWQoSEFWRV9XSU5TT0NLX0gpCisgICAgaWYgKHNldHNpemUgPCBmZHNldC0+bGZzX3NldC5mZF9jb3VudCkKKyAgICAgICAgZmRzZXQtPmxmc19zZXQuZmRfY291bnQgPSBzZXRzaXplOworI2VuZGlmCitzdWNjZXNzOgorICAgIHJldHVybiAxOworCitvdXRfb2ZfbWVtOgorICAgIGZkc2V0LT5sZnNfc2V0c2l6ZSA9IDA7CisjaWYgIWRlZmluZWQoY3lnd2luKSAmJiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQorICAgIGZkc2V0LT5sZnNfc2V0LmZkX2NvdW50ID0gMDsKKyNlbmRpZgorICAgIHJldHVybiAwOworfQorCit2b2lkCituZXRzbm1wX2xhcmdlX2ZkX3NldF9jbGVhbnVwKG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZmRzZXQpCit7CisgICAgbmV0c25tcF9sYXJnZV9mZF9zZXRfcmVzaXplKGZkc2V0LCAwKTsKKyAgICBmZHNldC0+bGZzX3NldHNpemUgPSAwOworICAgIGZkc2V0LT5sZnNfc2V0cHRyICA9IE5VTEw7Cit9CisKK3ZvaWQKK25ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogZHN0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZmRfc2V0ICogc3JjKQoreworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X3Jlc2l6ZShkc3QsIEZEX1NFVFNJWkUpOworICAgICpkc3QtPmxmc19zZXRwdHIgPSAqc3JjOworfQorCitpbnQKK25ldHNubXBfY29weV9sYXJnZV9mZF9zZXRfdG9fZmRfc2V0KGZkX3NldCAqIGRzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG5ldHNubXBfbGFyZ2VfZmRfc2V0ICogc3JjKQoreworICAgIC8qIFJlcG9ydCBmYWlsdXJlIGlmICpzcmMgaXMgbGFyZ2VyIHRoYW4gRkRfU0VUU0laRS4gKi8KKyAgICBpZiAoc3JjLT5sZnNfc2V0c2l6ZSA+IEZEX1NFVFNJWkUpIHsKKyAgICAgICAgRkRfWkVSTyhkc3QpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgKmRzdCA9ICpzcmMtPmxmc19zZXRwdHI7CisKKyNpZiAhKCFkZWZpbmVkKGN5Z3dpbikgJiYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkpCisgICAgeworICAgICAgICBpbnQgICAgICAgICAgICAgaTsKKworICAgICAgICAvKiBVbml4OiBjbGVhciBhbnkgZmlsZSBkZXNjcmlwdG9ycyBkZWZpbmVkIGluICpkc3QgYnV0IG5vdCBpbiAqc3JjLiAqLworICAgICAgICBmb3IgKGkgPSBzcmMtPmxmc19zZXRzaXplOyBpIDwgRkRfU0VUU0laRTsgKytpKQorICAgICAgICAgICAgRkRfQ0xSKGksIGRzdCk7CisgICAgfQorI2VuZGlmCisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvbGNkX3RpbWUuYyBiL3NubXBsaWIvbGNkX3RpbWUuYwppbmRleCBhMzA1N2RjLi4yYmZhNTQ5IDEwMDY0NAotLS0gYS9zbm1wbGliL2xjZF90aW1lLmMKKysrIGIvc25tcGxpYi9sY2RfdGltZS5jCkBAIC02LDExICs2LDkgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yMSwxMSArMTksNyBAQAogI2luY2x1ZGUgPHN0cmluZ3MuaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTksNiArNTMsMTEgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9zdXBwb3J0LCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9sY2RfdGltZSwgdXNtX3N1cHBvcnQpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fTENEX1RJTUUKKwogLyoKICAqIEdsb2JhbCBzdGF0aWMgaGFzaGxpc3QgdG8gY29udGFpbiBFbmdpbmV0aW1lIGVudHJpZXMuCiAgKgpAQCAtOTUsMTMgKzk0LDEzIEBACiAgKiAgICAgICAgICAgIHRoaXMgaXMgYW5vdGhlciBtYXR0ZXIuCiAgKi8KIGludAotZ2V0X2VuZ2luZXRpbWUodV9jaGFyICogZW5naW5lSUQsCitnZXRfZW5naW5ldGltZShjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwKICAgICAgICAgICAgICAgIHVfaW50IGVuZ2luZUlEX2xlbiwKICAgICAgICAgICAgICAgIHVfaW50ICogZW5naW5lYm9vdCwKICAgICAgICAgICAgICAgIHVfaW50ICogZW5naW5lX3RpbWUsIHVfaW50IGF1dGhlbnRpY2F0ZWQpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7Ci0gICAgdGltZV90ICAgICAgICAgIHRpbWVkaWZmID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgdGltZWRpZmYgPSAwOwogICAgIEVuZ2luZXRpbWUgICAgICBlID0gTlVMTDsKIAogCkBAIC0xMzMsNyArMTMyLDcgQEAKICAgICAgICAgKmVuZ2luZV90aW1lID0gZS0+ZW5naW5lVGltZTsKICAgICAgICAgKmVuZ2luZWJvb3QgPSBlLT5lbmdpbmVCb290OwogCi0gICAgICAgdGltZWRpZmYgPSBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKSAtIGUtPmxhc3RSZWNlaXZlZEVuZ2luZVRpbWU7CisgICAgICAgdGltZWRpZmYgPSAoaW50KSAoc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCkgLSBlLT5sYXN0UmVjZWl2ZWRFbmdpbmVUaW1lKTsKIAogI2lmZGVmIExDRF9USU1FX1NZTkNfT1BUCiAgICAgfQpAQCAtMTk3LDcgKzE5Niw3IEBACiAgICAgICAgICAgICAgICAgICB1X2ludCAqIGxhc3RfZW5naW5lX3RpbWUsIHVfaW50IGF1dGhlbnRpY2F0ZWQpCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7Ci0gICAgdGltZV90ICAgICAgICAgIHRpbWVkaWZmID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgdGltZWRpZmYgPSAwOwogICAgIEVuZ2luZXRpbWUgICAgICBlID0gTlVMTDsKIAogCkBAIC0yMjksNyArMjI4LDcgQEAKICAgICAgICAgKmxhc3RfZW5naW5lX3RpbWUgPSAqZW5naW5lX3RpbWUgPSBlLT5lbmdpbmVUaW1lOwogICAgICAgICAqZW5naW5lYm9vdCA9IGUtPmVuZ2luZUJvb3Q7CiAKLSAgICAgICB0aW1lZGlmZiA9IHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpIC0gZS0+bGFzdFJlY2VpdmVkRW5naW5lVGltZTsKKyAgICAgICB0aW1lZGlmZiA9IChpbnQpIChzbm1wdjNfbG9jYWxfc25tcEVuZ2luZVRpbWUoKSAtIGUtPmxhc3RSZWNlaXZlZEVuZ2luZVRpbWUpOwogCiAjaWZkZWYgTENEX1RJTUVfU1lOQ19PUFQKICAgICB9CkBAIC0yOTgsMTQgKzI5NywxNCBAQAogdm9pZCBmcmVlX2V0aW1lbGlzdCh2b2lkKQogewogICAgICBpbnQgaW5kZXggPSAwOwotICAgICBFbmdpbmV0aW1lIGUgPSAwOwotICAgICBFbmdpbmV0aW1lIG5leHRFID0gMDsKKyAgICAgRW5naW5ldGltZSBlID0gTlVMTDsKKyAgICAgRW5naW5ldGltZSBuZXh0RSA9IE5VTEw7CiAKICAgICAgZm9yKCA7IGluZGV4IDwgRVRJTUVMSVNUX1NJWkU7ICsraW5kZXgpCiAgICAgIHsKICAgICAgICAgICAgZSA9IGV0aW1lbGlzdFtpbmRleF07CiAKLSAgICAgICAgICAgd2hpbGUoZSAhPSAwKQorICAgICAgICAgICB3aGlsZShlICE9IE5VTEwpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgbmV4dEUgPSBlLT5uZXh0OwogICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUoZS0+ZW5naW5lSUQpOwpAQCAtMzEzLDcgKzMxMiw3IEBACiAgICAgICAgICAgICAgICAgIGUgPSBuZXh0RTsKICAgICAgICAgICAgfQogCi0gICAgICAgICAgIGV0aW1lbGlzdFtpbmRleF0gPSAwOworICAgICAgICAgICBldGltZWxpc3RbaW5kZXhdID0gTlVMTDsKICAgICAgfQogICAgICByZXR1cm47CiB9CkBAIC0zNDIsNyArMzQxLDcgQEAKICAqIFhYWAkiQ3VycmVudCB0aW1lIHdpdGhpbiB0aGUgbG9jYWwgZW5naW5lIiA9PSB0aW1lKE5VTEwpLi4uCiAgKi8KIGludAotc2V0X2VuZ2luZXRpbWUodV9jaGFyICogZW5naW5lSUQsCitzZXRfZW5naW5ldGltZShjb25zdCB1X2NoYXIgKiBlbmdpbmVJRCwKICAgICAgICAgICAgICAgIHVfaW50IGVuZ2luZUlEX2xlbiwKICAgICAgICAgICAgICAgIHVfaW50IGVuZ2luZWJvb3QsIHVfaW50IGVuZ2luZV90aW1lLCB1X2ludCBhdXRoZW50aWNhdGVkKQogewpAQCAtNDIzLDcgKzQyMiw3IEBACiAgKiBBU1NVTUVTIHRoYXQgbm8gZW5naW5lSUQgd2lsbCBoYXZlIG1vcmUgdGhhbiBvbmUgcmVjb3JkIGluIHRoZSBsaXN0LgogICovCiBFbmdpbmV0aW1lCi1zZWFyY2hfZW5naW5ldGltZV9saXN0KHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pCitzZWFyY2hfZW5naW5ldGltZV9saXN0KGNvbnN0IHVfY2hhciAqIGVuZ2luZUlELCB1X2ludCBlbmdpbmVJRF9sZW4pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgRW5naW5ldGltZSAgICAgIGUgPSBOVUxMOwpAQCAtNDgxLDcgKzQ4MCw3IEBACiAgKgogICovCiBpbnQKLWhhc2hfZW5naW5lSUQodV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbikKK2hhc2hfZW5naW5lSUQoY29uc3QgdV9jaGFyICogZW5naW5lSUQsIHVfaW50IGVuZ2luZUlEX2xlbikKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfR0VORVJSOwogICAgIHNpemVfdCAgICAgICAgICBidWZfbGVuID0gU05NUF9NQVhCVUY7CkBAIC01MDYsNiArNTA1LDEyIEBACiAgICAgcnZhbCA9IHNjX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKICAgICAgICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgLyBzaXplb2Yob2lkKSwKICAgICAgICAgICAgICAgICAgICBlbmdpbmVJRCwgZW5naW5lSURfbGVuLCBidWYsICZidWZfbGVuKTsKKyAgICBpZiAocnZhbCA9PSBTTk1QRVJSX1NDX05PVF9DT05GSUdVUkVEKSB7CisgICAgICAgIC8qIGZhbGwgYmFjayB0byBzaGExICovCisgICAgICAgIHJ2YWwgPSBzY19oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDU0hBMUF1dGhQcm90b2NvbCkgLyBzaXplb2Yob2lkKSwKKyAgICAgICAgICAgICAgICAgICBlbmdpbmVJRCwgZW5naW5lSURfbGVuLCBidWYsICZidWZfbGVuKTsKKyAgICB9CiAjZWxzZQogICAgIHJ2YWwgPSBzY19oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAogICAgICAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDU0hBMUF1dGhQcm90b2NvbCkgLyBzaXplb2Yob2lkKSwKQEAgLTUyMSw3ICs1MjYsNyBAQAogICAgIFNOTVBfRlJFRShjb250ZXh0KTsKICAgICBtZW1zZXQoYnVmLCAwLCBTTk1QX01BWEJVRik7CiAKLSAgICByZXR1cm4gKHJ2YWwgPCAwKSA/IHJ2YWwgOiAoYWRkaXRpdmUgJSBFVElNRUxJU1RfU0laRSk7CisgICAgcmV0dXJuIChydmFsIDwgMCkgPyBydmFsIDogKGludCkoYWRkaXRpdmUgJSBFVElNRUxJU1RfU0laRSk7CiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGhhc2hfZW5naW5lSUQoKSAqLwogCkBAIC02MDYsMyArNjExLDQgQEAKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgZHVtcF9ldGltZWxpc3QoKSAqLwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUgKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9MQ0RfVElNRSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9tZDUuYyBiL3NubXBsaWIvbWQ1LmMKaW5kZXggYjEyOGNjYS4uMWNlMDcyNyAxMDA2NDQKLS0tIGEvc25tcGxpYi9tZDUuYworKysgYi9zbm1wbGliL21kNS5jCkBAIC01NSwxNCArNTUsMTIgQEAKICNlbHNlCiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKIAogI2lmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNlbmRpZgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21kNS5oPgogCkBAIC0xMTQsNyArMTEyLDcgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU1REQ19IRUFERVJTICovCiAKIHZvaWQgICAgICAgICAgICBNRHJldmVyc2UodW5zaWduZWQgaW50ICopOwotc3RhdGljIHZvaWQgICAgIE1EYmxvY2soTURwdHIsIHVuc2lnbmVkIGludCAqKTsKK3N0YXRpYyB2b2lkICAgICBNRGJsb2NrKE1EcHRyLCBjb25zdCB1bnNpZ25lZCBpbnQgKik7CiAKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKIC8qCkBAIC0xOTMsNyArMTkxLDcgQEAKICAqICoqIFRoaXMgcm91dGluZSBpcyBub3QgdXNlci1jYWxsYWJsZS4gCiAgKi8KIHN0YXRpYyB2b2lkCi1NRGJsb2NrKE1EcHRyIE1EcCwgdW5zaWduZWQgaW50ICpYKQorTURibG9jayhNRHB0ciBNRHAsIGNvbnN0IHVuc2lnbmVkIGludCAqWCkKIHsKICAgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgdG1wLCBBLCBCLCBDLCBEOyAgICAgIC8qIGhwdXggc3lzdiBzdW4gKi8KICNpZmRlZiBXT1JEU19CSUdFTkRJQU4KQEAgLTI5OSw3ICsyOTcsNyBAQAogICogKiogICAgICAgICAgLTIgaWYgY291bnQgd2FzIHRvbyBsYXJnZQogICovCiBpbnQKLU1EdXBkYXRlKE1EcHRyIE1EcCwgdW5zaWduZWQgY2hhciAqWCwgdW5zaWduZWQgaW50IGNvdW50KQorTUR1cGRhdGUoTURwdHIgTURwLCBjb25zdCB1bnNpZ25lZCBjaGFyICpYLCB1bnNpZ25lZCBpbnQgY291bnQpCiB7CiAgICAgdW5zaWduZWQgaW50ICAgIGksIHRtcCwgYml0LCBieXRlLCBtYXNrOwogICAgIHVuc2lnbmVkIGNoYXIgICBYWFs2NF07CkBAIC0zMzMsNyArMzMxLDcgQEAKICAgICAgKiBQcm9jZXNzIGRhdGEgCiAgICAgICovCiAgICAgaWYgKGNvdW50ID09IDUxMikgeyAgICAgICAgIC8qIEZ1bGwgYmxvY2sgb2YgZGF0YSB0byBoYW5kbGUgKi8KLSAgICAgICAgTURibG9jayhNRHAsICh1bnNpZ25lZCBpbnQgKikgWCk7CisgICAgICAgIE1EYmxvY2soTURwLCAoY29uc3QgdW5zaWduZWQgaW50ICopIFgpOwogICAgIH0gZWxzZSBpZiAoY291bnQgPiA1MTIpICAgICAvKiBDaGVjayBmb3IgY291bnQgdG9vIGxhcmdlICovCiAgICAgICAgIHJldHVybiAtMjsKICAgICAvKgpAQCAtMzg5LDcgKzM4Nyw3IEBACiAgKiBNRGNoZWNrc3VtKGRhdGEsIGxlbiwgTUQ1KTogZG8gYSBjaGVja3N1bSBvbiBhbiBhcmJpcnRyYXJ5IGFtb3VudCBvZiBkYXRhIAogICovCiBpbnQKLU1EY2hlY2tzdW0odV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuKQorTURjaGVja3N1bShjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4pCiB7CiAgICAgTURzdHJ1Y3QgICAgICAgIG1kOwogICAgIE1Ec3RydWN0ICAgICAgICpNRCA9ICZtZDsKQEAgLTQyMyw4ICs0MjEsOCBAQAogICogb2YgZGF0YSwgYW5kIHByZXBlbmRlZCB3aXRoIGEgc2VjcmV0IGluIHRoZSBzdGFuZGFyZCBmYXNoaW9uIAogICovCiBpbnQKLU1Ec2lnbih1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4sCi0gICAgICAgdV9jaGFyICogc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKQorTURzaWduKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbiwKKyAgICAgICBjb25zdCB1X2NoYXIgKiBzZWNyZXQsIHNpemVfdCBzZWNyZXRsZW4pCiB7CiAjZGVmaW5lIEhBU0hLRVlMRU4gNjQKIApAQCAtNDM0LDcgKzQzMiw4IEBACiAgICAgdV9jaGFyICAgICAgICAgIGV4dGVuZGVkQXV0aEtleVtIQVNIS0VZTEVOXTsKICAgICB1X2NoYXIgICAgICAgICAgYnVmW0hBU0hLRVlMRU5dOwogICAgIHNpemVfdCAgICAgICAgICBpOwotICAgIHVfY2hhciAgICAgICAgICpjcCwgKm5ld2RhdGEgPSAwOworICAgIGNvbnN0IHVfY2hhciAgICpjcDsKKyAgICB1X2NoYXIgICAgICAgICAqbmV3ZGF0YSA9IE5VTEw7CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKIAogICAgIC8qCmRpZmYgLS1naXQgYS9zbm1wbGliL21pYi5jIGIvc25tcGxpYi9taWIuYwppbmRleCA3ZGNmM2QwLi5lNzkwODc4IDEwMDY0NAotLS0gYS9zbm1wbGliL21pYi5jCisrKyBiL3NubXBsaWIvbWliLmMKQEAgLTM4LDE5ICszOCwzNCBAQAogICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpZiBIQVZFX0RJUkVOVF9ICisjIGluY2x1ZGUgPGRpcmVudC5oPgorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgc3RybGVuKChkaXJlbnQpLT5kX25hbWUpCisjZWxzZQorIyBkZWZpbmUgZGlyZW50IGRpcmVjdAorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgKGRpcmVudCktPmRfbmFtbGVuCisjIGlmIEhBVkVfU1lTX05ESVJfSAorIyAgaW5jbHVkZSA8c3lzL25kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TWVNfRElSX0gKKyMgIGluY2x1ZGUgPHN5cy9kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9ORElSX0gKKyMgIGluY2x1ZGUgPG5kaXIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCiAjaWYgSEFWRV9ORVRJTkVUX0lOX0gKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTcxLDEwICs4Niw2IEBACiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgotCiAjaWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCkBAIC05NCw2ICsxMDUsMTkgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2ludDY0Lmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX2FwaSwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfc3RyaW5nc19hbGwsIG1pYl9hcGkpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfc25wcmludCwgbWliX3N0cmluZ3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl9zbnByaW50X2Rlc2NyaXB0aW9uLCBtaWJfc3RyaW5nc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWliX3NucHJpbnRfdmFyaWFibGUsIG1pYl9zdHJpbmdzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtaWJfc3RyaW5nX2NvbnZlcnNpb25zLCBtaWJfc3RyaW5nc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocHJpbnRfbWliLCBtaWJfc3RyaW5nc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25wcmludF9vYmppZCwgbWliX3N0cmluZ3NfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNucHJpbnRfdmFsdWUsIG1pYl9zdHJpbmdzX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1pYl90b19hc25fdHlwZSwgbWliX2FwaSkKKwogLyoqIEBkZWZncm91cCBtaWJfdXRpbGl0aWVzIG1pYiBwYXJzaW5nIGFuZCBkYXRhdHlwZSBtYW5pcHVsYXRpb24gcm91dGluZXMuCiAgKiAgQGluZ3JvdXAgbGlicmFyeQogICoKQEAgLTEzNiw5ICsxNjAsMTAgQEAKICNlbmRpZiAvKiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcgKi8KIAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKLWV4dGVybiBzdHJ1Y3QgdHJlZSAqdHJlZV9oZWFkOworTkVUU05NUF9JTVBPUlQgc3RydWN0IHRyZWUgKnRyZWVfaGVhZDsKIHN0YXRpYyBzdHJ1Y3QgdHJlZSAqdHJlZV90b3A7CiAKK05FVFNOTVBfSU1QT1JUIHN0cnVjdCB0cmVlICpNaWI7CiBzdHJ1Y3QgdHJlZSAgICAqTWliOyAgICAgICAgICAgIC8qIEJhY2t3YXJkcyBjb21wYXRpYmlsaXR5ICovCiAjZW5kaWYgLyogTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HICovCiAKQEAgLTQ1Niw2ICs0ODEsOCBAQAogICAgICAgICBpbnQgICAgICAgICAgICAgcmVwZWF0LCB3aWR0aCA9IDE7CiAgICAgICAgIGxvbmcgICAgICAgICAgICB2YWx1ZTsKICAgICAgICAgY2hhciAgICAgICAgICAgIGNvZGUgPSAnZCcsIHNlcGFyID0gMCwgdGVybSA9IDAsIGNoLCBpbnRidWZbMzJdOworI2RlZmluZSBIRVgyRElHSVRfTkVFRF9JTklUIDMKKyAgICAgICAgY2hhciAgICAgICAgICAgIGhleDJkaWdpdCA9IEhFWDJESUdJVF9ORUVEX0lOSVQ7CiAgICAgICAgIHVfY2hhciAgICAgICAgICplY3A7CiAKICAgICAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfUVVJQ0tfUFJJTlQpKSB7CkBAIC01MDIsOSArNTI5LDIyIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHN3aXRjaCAoY29kZSkgewogICAgICAgICAgICAgICAgIGNhc2UgJ3gnOgotICAgICAgICAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCXzJESUdJVF9IRVhfT1VUUFVUKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgdmFsdWUgPCAxNikgeworICAgICAgICAgICAgICAgICAgICBpZiAoSEVYMkRJR0lUX05FRURfSU5JVCA9PSBoZXgyZGlnaXQpCisgICAgICAgICAgICAgICAgICAgICAgICBoZXgyZGlnaXQgPSBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfMkRJR0lUX0hFWF9PVVRQVVQpOworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBpZiB2YWx1ZSBpcyA8IDE2LCBpdCB3aWxsIGJlIGEgc2luZ2xlIGhleCBkaWdpdC4gSWYgdGhlCisgICAgICAgICAgICAgICAgICAgICAqIHdpZHRoIGlzIDEgKHdlIGFyZSBvdXRwdXR0aW5nIGEgYnl0ZSBhdCBhIHRpbWUpLCBwYXQgaXQKKyAgICAgICAgICAgICAgICAgICAgICogdG8gMiBkaWdpdHMgaWYgTkVUU05NUF9EU19MSUJfMkRJR0lUX0hFWF9PVVRQVVQgaXMgc2V0CisgICAgICAgICAgICAgICAgICAgICAqIG9yIGFsbCBvZiB0aGUgZm9sbG93aW5nIGFyZSB0cnVlOgorICAgICAgICAgICAgICAgICAgICAgKiAgLSB3ZSBkbyBub3QgaGF2ZSBhIHNlcGFyYXRpb24gY2hhcmFjdGVyCisgICAgICAgICAgICAgICAgICAgICAqICAtIHRoZXJlIGlzIG5vIGhpbnQgbGVmdCAob3IgdGhlcmUgbmV2ZXIgd2FzIGEgaGludCkKKyAgICAgICAgICAgICAgICAgICAgICoKKyAgICAgICAgICAgICAgICAgICAgICogZS5nLiBmb3IgdGhlIGRhdGEgMHhBQTAxQkIsIHdvdWxkIGFueW9uZSByZWFsbHkgZXZlcgorICAgICAgICAgICAgICAgICAgICAgKiB3YW50IHRoZSBzdHJpbmcgIkFBMUJCIj8/CisgICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKCh2YWx1ZSA8IDE2KSAmJiAoMSA9PSB3aWR0aCkpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAoaGV4MmRpZ2l0IHx8ICgoMCA9PSBzZXBhcikgJiYgKDAgPT0gKmhpbnQpKSkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiMCVseCIsIHZhbHVlKTsKICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx4IiwgdmFsdWUpOwpAQCAtMjM0MSw3ICsyMzgxLDkgQEAKIAogICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKEFTTl9CT09MRUFOLCAic25tcCIsICJzaG93TWliRXJyb3JzIiwKICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9NSUJfRVJST1JTKTsKLSAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYihBU05fQk9PTEVBTiwgInNubXAiLCAic3RyaWN0Q29tbWVudFRlcm0iLAorICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKEFTTl9CT09MRUFOLCAic25tcCIsICJjb21tZW50VG9FT0wiLCAgICAgLyogRGVzY3JpYmVzIGFjdHVhbCBiZWhhdmlvdXIgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9NSUJfQ09NTUVOVF9URVJNKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYihBU05fQk9PTEVBTiwgInNubXAiLCAic3RyaWN0Q29tbWVudFRlcm0iLCAgICAvKiBCYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCiAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfTUlCX0NPTU1FTlRfVEVSTSk7CiAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9wcmVtaWIoQVNOX0JPT0xFQU4sICJzbm1wIiwgIm1pYkFsbG93VW5kZXJsaW5lIiwKICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9NSUJfUEFSU0VfTEFCRUwpOwpAQCAtMjU1Niw2ICsyNTk4LDcgQEAKICAgICAgKi8KICAgICBuZXRzbm1wX2ZpeHVwX21pYl9kaXJlY3RvcnkoKTsKICAgICBlbnZfdmFyID0gc3RyZHVwKG5ldHNubXBfZ2V0X21pYl9kaXJlY3RvcnkoKSk7CisgICAgbmV0c25tcF9taWJpbmRleF9sb2FkKCk7CiAKICAgICBERUJVR01TR1RMKCgiaW5pdF9taWIiLAogICAgICAgICAgICAgICAgICJTZWVuIE1JQkRJUlM6IExvb2tpbmcgaW4gJyVzJyBmb3IgbWliIGRpcnMgLi4uXG4iLApAQCAtMjYyMSw3ICsyNjY0LDcgQEAKICAgICB3aGlsZSAoZW50cnkpIHsKICAgICAgICAgaWYgKHN0cmNhc2VjbXAoZW50cnksIERFQlVHX0FMV0FZU19UT0tFTikgPT0gMCkgewogICAgICAgICAgICAgcmVhZF9hbGxfbWlicygpOwotICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihlbnRyeSwgIi8iKSAhPSAwKSB7CisgICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGVudHJ5LCAiLyIpICE9IE5VTEwpIHsKICAgICAgICAgICAgIHJlYWRfbWliKGVudHJ5KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG5ldHNubXBfcmVhZF9tb2R1bGUoZW50cnkpOwpAQCAtMjY2Miw3ICsyNzA1LDcgQEAKICNlbmRpZgogICAgIH0KIAotICAgIGlmIChlbnZfdmFyICE9IDApIHsKKyAgICBpZiAoZW52X3ZhciAhPSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJpbml0X21pYiIsCiAgICAgICAgICAgICAgICAgICAgICJTZWVuIE1JQkZJTEVTOiBMb29raW5nIGluICclcycgZm9yIG1pYiBmaWxlcyAuLi5cbiIsCiAgICAgICAgICAgICAgICAgICAgIGVudl92YXIpKTsKQEAgLTI3MTcsNyArMjc2MCw3IEBACiAgICAgfQogfQogCi0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCiB2b2lkCiBpbml0X21pYih2b2lkKQogewpAQCAtMjcyNiw2ICsyNzY5LDEzOSBAQAogI2VuZGlmCiAKIAorLyoKKyAqIEhhbmRsZSBNSUIgaW5kZXhlcyBjZW50cmFsbHkKKyAqLworc3RhdGljIGludCBfbWliaW5kZXggICAgID0gMDsgICAvKiBMYXN0IGluZGV4IGluIHVzZSAqLworc3RhdGljIGludCBfbWliaW5kZXhfbWF4ID0gMDsgICAvKiBTaXplIG9mIGluZGV4IGFycmF5ICovCitjaGFyICAgICAqKl9taWJpbmRleGVzICAgPSBOVUxMOworCitpbnQgX21pYmluZGV4X2FkZCggY29uc3QgY2hhciAqZGlybmFtZSwgaW50IGkgKTsKK3ZvaWQKK25ldHNubXBfbWliaW5kZXhfbG9hZCggdm9pZCApCit7CisgICAgRElSICpkaXI7CisgICAgc3RydWN0IGRpcmVudCAqZmlsZTsKKyAgICBGSUxFICpmcDsKKyAgICBjaGFyIHRtcGJ1ZlsgMzAwXTsKKyAgICBjaGFyIHRtcGJ1ZjJbMzAwXTsKKyAgICBpbnQgIGk7CisgICAgY2hhciAqY3A7CisKKyAgICAvKgorICAgICAqIE9wZW4gdGhlIE1JQiBpbmRleCBkaXJlY3RvcnksIG9yIGNyZWF0ZSBpdCAoZW1wdHkpCisgICAgICovCisgICAgc25wcmludGYoIHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksICIlcy9taWJfaW5kZXhlcyIsCisgICAgICAgICAgICAgIGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpKTsKKyAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAwOworICAgIGRpciA9IG9wZW5kaXIoIHRtcGJ1ZiApOworICAgIGlmICggZGlyID09IE5VTEwgKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJsb2FkOiAobmV3KVxuIikpOworICAgICAgICBta2RpcmhpZXIoIHRtcGJ1ZiwgTkVUU05NUF9BR0VOVF9ESVJFQ1RPUllfTU9ERSwgMCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIENyZWF0ZSBhIGxpc3Qgb2Ygd2hpY2ggZGlyZWN0b3J5IGVhY2ggZmlsZSByZWZlcnMgdG8KKyAgICAgKi8KKyAgICB3aGlsZSAoKGZpbGUgPSByZWFkZGlyKCBkaXIgKSkpIHsKKyAgICAgICAgaWYgKCAhaXNkaWdpdCgodW5zaWduZWQgY2hhcikoZmlsZS0+ZF9uYW1lWzBdKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaSA9IGF0b2koIGZpbGUtPmRfbmFtZSApOworCisgICAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiJXMvbWliX2luZGV4ZXMvJWQiLAorICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgaSApOworICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZiktMV0gPSAwOworICAgICAgICBmcCA9IGZvcGVuKCB0bXBidWYsICJyIiApOworICAgICAgICBpZiAoIWZwKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGNwID0gZmdldHMoIHRtcGJ1ZjIsIHNpemVvZih0bXBidWYyKSwgZnAgKTsKKyAgICAgICAgaWYgKCAhY3AgKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAiRW1wdHkgTUlCIGluZGV4ICglZClcbiIsIGkpKTsKKyAgICAgICAgICAgIGZjbG9zZShmcCk7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgICB0bXBidWYyW3N0cmxlbih0bXBidWYyKS0xXSA9IDA7CisgICAgICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJsb2FkOiAoJWQpICVzXG4iLCBpLCB0bXBidWYyKSk7CisgICAgICAgICh2b2lkKV9taWJpbmRleF9hZGQoIHRtcGJ1ZjIrNCwgaSApOyAgLyogU2tpcCAnRElSICcgKi8KKyAgICAgICAgZmNsb3NlKCBmcCApOworICAgIH0KKyAgICBjbG9zZWRpciggZGlyICk7Cit9CisKK2NoYXIgKgorbmV0c25tcF9taWJpbmRleF9sb29rdXAoIGNvbnN0IGNoYXIgKmRpcm5hbWUgKQoreworICAgIGludCBpOworICAgIHN0YXRpYyBjaGFyIHRtcGJ1ZlszMDBdOworCisgICAgZm9yIChpPTA7IGk8X21pYmluZGV4OyBpKyspIHsKKyAgICAgICAgaWYgKCBfbWliaW5kZXhlc1tpXSAmJgorICAgICAgICAgICAgIHN0cmNtcCggX21pYmluZGV4ZXNbaV0sIGRpcm5hbWUgKSA9PSAwKSB7CisgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIiVzL21pYl9pbmRleGVzLyVkIiwKKyAgICAgICAgICAgICAgICAgICAgICBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwgaSk7CisgICAgICAgICAgICAgdG1wYnVmW3NpemVvZih0bXBidWYpLTFdID0gMDsKKyAgICAgICAgICAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAibG9va3VwOiAlcyAoJWQpICVzXG4iLCBkaXJuYW1lLCBpLCB0bXBidWYgKSk7CisgICAgICAgICAgICAgcmV0dXJuIHRtcGJ1ZjsKKyAgICAgICAgfQorICAgIH0KKyAgICBERUJVR01TR1RMKCgibWliaW5kZXgiLCAibG9va3VwOiAobm9uZSlcbiIpKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworaW50CitfbWliaW5kZXhfYWRkKCBjb25zdCBjaGFyICpkaXJuYW1lLCBpbnQgaSApCit7CisgICAgY29uc3QgaW50IG9sZF9taWJpbmRleF9tYXggPSBfbWliaW5kZXhfbWF4OworCisgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgImFkZDogJXMgKCVkKVxuIiwgZGlybmFtZSwgaSApKTsKKyAgICBpZiAoIGkgPT0gLTEgKQorICAgICAgICBpID0gX21pYmluZGV4Kys7CisgICAgaWYgKCBpID49IF9taWJpbmRleF9tYXggKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIElmIHRoZSBpbmRleCBhcnJheSBpcyBmdWxsIChvciBub24tZXhpc3RlbnQpCisgICAgICAgICAqICAgdGhlbiBleHBhbmQgKG9yIGNyZWF0ZSkgaXQKKyAgICAgICAgICovCisgICAgICAgIF9taWJpbmRleF9tYXggPSBpICsgMTA7CisgICAgICAgIF9taWJpbmRleGVzID0gcmVhbGxvYyhfbWliaW5kZXhlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9taWJpbmRleF9tYXggKiBzaXplb2YoX21pYmluZGV4ZXNbMF0pKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQoX21pYmluZGV4ZXMpOworICAgICAgICBtZW1zZXQoX21pYmluZGV4ZXMgKyBvbGRfbWliaW5kZXhfbWF4LCAwLAorICAgICAgICAgICAgICAgKF9taWJpbmRleF9tYXggLSBvbGRfbWliaW5kZXhfbWF4KSAqIHNpemVvZihfbWliaW5kZXhlc1swXSkpOworICAgIH0KKworICAgIF9taWJpbmRleGVzWyBpIF0gPSBzdHJkdXAoIGRpcm5hbWUgKTsKKyAgICBpZiAoIGkgPj0gX21pYmluZGV4ICkKKyAgICAgICAgX21pYmluZGV4ID0gaSsxOworCisgICAgREVCVUdNU0dUTCgoIm1pYmluZGV4IiwgImFkZDogJWQvJWQvJWRcbiIsIGksIF9taWJpbmRleCwgX21pYmluZGV4X21heCApKTsKKyAgICByZXR1cm4gaTsKK30KKyAgICAKK0ZJTEUgKgorbmV0c25tcF9taWJpbmRleF9uZXcoIGNvbnN0IGNoYXIgKmRpcm5hbWUgKQoreworICAgIEZJTEUgKmZwOworICAgIGNoYXIgIHRtcGJ1ZlszMDBdOworICAgIGNoYXIgKmNwOworICAgIGludCAgIGk7CisKKyAgICBjcCA9IG5ldHNubXBfbWliaW5kZXhfbG9va3VwKCBkaXJuYW1lICk7CisgICAgaWYgKCFjcCkgeworICAgICAgICBpICA9IF9taWJpbmRleF9hZGQoIGRpcm5hbWUsIC0xICk7CisgICAgICAgIHNucHJpbnRmKCB0bXBidWYsIHNpemVvZih0bXBidWYpLCAiJXMvbWliX2luZGV4ZXMvJWQiLAorICAgICAgICAgICAgICAgICAgZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KCksIGkgKTsKKyAgICAgICAgdG1wYnVmW3NpemVvZih0bXBidWYpLTFdID0gMDsKKyAgICAgICAgY3AgPSB0bXBidWY7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJtaWJpbmRleCIsICJuZXc6ICVzICglcylcbiIsIGRpcm5hbWUsIGNwICkpOworICAgIGZwID0gZm9wZW4oIGNwLCAidyIgKTsKKyAgICBpZiAoZnApCisgICAgICAgIGZwcmludGYoIGZwLCAiRElSICVzXG4iLCBkaXJuYW1lICk7CisgICAgcmV0dXJuIGZwOworfQorCisKIC8qKgogICogVW5sb2FkcyBhbGwgbWlicy4KICAqLwpAQCAtMjczNywxMCArMjkxMywxOCBAQAogICAgICAgICBpZiAodHJlZV90b3AtPmxhYmVsKQogICAgICAgICAgICAgU05NUF9GUkVFKHRyZWVfdG9wLT5sYWJlbCk7CiAgICAgICAgIFNOTVBfRlJFRSh0cmVlX3RvcCk7Ci0gICAgICAgIHRyZWVfdG9wID0gTlVMTDsKICAgICB9CiAgICAgdHJlZV9oZWFkID0gTlVMTDsKICAgICBNaWIgPSBOVUxMOworICAgIGlmIChfbWliaW5kZXhlcykgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IF9taWJpbmRleDsgKytpKQorICAgICAgICAgICAgU05NUF9GUkVFKF9taWJpbmRleGVzW2ldKTsKKyAgICAgICAgZnJlZShfbWliaW5kZXhlcyk7CisgICAgICAgIF9taWJpbmRleCA9IDA7CisgICAgICAgIF9taWJpbmRleF9tYXggPSAwOworICAgICAgICBfbWliaW5kZXhlcyA9IE5VTEw7CisgICAgfQogICAgIGlmIChQcmVmaXggIT0gTlVMTCAmJiBQcmVmaXggIT0gJlN0YW5kYXJkX1ByZWZpeFswXSkKICAgICAgICAgU05NUF9GUkVFKFByZWZpeCk7CiAgICAgaWYgKFByZWZpeCkKQEAgLTI3NTQsMTEgKzI5MzgsMTMgQEAKICAqCiAgKiBAcGFyYW0gZnAgICBUaGUgZmlsZSBkZXNjcmlwdG9yIHRvIHByaW50IHRvLgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUFJJTlRfTUlCCiB2b2lkCiBwcmludF9taWIoRklMRSAqIGZwKQogewogICAgIHByaW50X3N1YnRyZWUoZnAsIHRyZWVfaGVhZCwgMCk7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QUklOVF9NSUIgKi8KIAogdm9pZAogcHJpbnRfYXNjaWlfZHVtcChGSUxFICogZnApCkBAIC0zMTM5LDYgKzMzMjUsNyBAQAogICAgIHJldHVybiAhYnVmX292ZXJmbG93OwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1BSSU5UX09CSklECiBpbnQKIHNucHJpbnRfb2JqaWQoY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgY29uc3Qgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbikKQEAgLTMxNTIsNiArMzMzOSw3IEBACiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TUFJJTlRfT0JKSUQgKi8KIAogLyoqCiAgKiBQcmludHMgYW4gb2lkIHRvIHN0ZG91dC4KQEAgLTMyODUsMTAgKzM0NzMsMTEgQEAKICAgICAgICAgICogSGFuZGxlIHJhcmUgY2FzZSB3aGVyZSB0cmVlIGlzIGVtcHR5LiAgCiAgICAgICAgICAqLwogICAgICAgICByZXR1cm4gc3ByaW50X3JlYWxsb2NfYnlfdHlwZShidWYsIGJ1Zl9sZW4sIG91dF9sZW4sIGFsbG93X3JlYWxsb2MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcmlhYmxlLCAwLCAwLCAwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyaWFibGUsIE5VTEwsIE5VTEwsIE5VTEwpOwogICAgIH0KIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOUFJJTlRfVkFSQUJMRQogaW50CiBzbnByaW50X3ZhcmlhYmxlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCkBAIC0zMzAzLDYgKzM0OTIsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05QUklOVF9WQVJBQkxFICovCiAKIC8qKgogICogUHJpbnRzIGEgdmFyaWFibGUgdG8gc3Rkb3V0LgpAQCAtMzM5Nyw2ICszNTg3LDggQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTlBSSU5UX1ZBTFVFCisvKiB1c2VkIGluIHRoZSBwZXJsIG1vZHVsZSAqLwogaW50CiBzbnByaW50X3ZhbHVlKGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1Zl9sZW4sCiAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG9iamlkLCBzaXplX3Qgb2JqaWRsZW4sCkBAIC0zNDExLDYgKzM2MDMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05QUklOVF9WQUxVRSAqLwogCiB2b2lkCiBwcmludF92YWx1ZShjb25zdCBvaWQgKiBvYmppZCwKQEAgLTM1NDEsOCArMzczNCw4IEBACiAKICAgICBpZiAodmFyLT5uYW1lX2xlbmd0aCA+IE1BWF9PSURfTEVOKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJidWlsZF9vaWRfc2VnbWVudCIsCi0gICAgICAgICAgICAgICAgICAgICJTb21ldGhpbmcgdGVycmlibHkgd3JvbmcsIG5hbWVsZW4gPSAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgdmFyLT5uYW1lX2xlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAiU29tZXRoaW5nIHRlcnJpYmx5IHdyb25nLCBuYW1lbGVuID0gJWx1XG4iLAorICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZyl2YXItPm5hbWVfbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAKQEAgLTM2NjAsMTMgKzM4NTMsMTMgQEAKICAgICAgICAgY2FzZSBBU05fVElNRVRJQ0tTOgogICAgICAgICAgICAgaWYgKCpvaWRMZW4pIHsKICAgICAgICAgICAgICAgICBzbm1wX3NldF92YXJfdmFsdWUodmFyLCAodV9jaGFyICopIG9pZEluZGV4KyssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihsb25nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvaWQpKTsKICAgICAgICAgICAgICAgICAtLSgqb2lkTGVuKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgc25tcF9zZXRfdmFyX3ZhbHVlKHZhciwgKHVfY2hhciAqKSBvaWRMZW4sIHNpemVvZihsb25nKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBERUJVR01TR1RMKCgicGFyc2Vfb2lkX2luZGV4ZXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnNlZCBpbnQoJWQpOiAlZFxuIiwgdmFyLT50eXBlLAorICAgICAgICAgICAgICAgICAgICAgICAgIlBhcnNlZCBpbnQoJWQpOiAlbGRcbiIsIHZhci0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICp2YXItPnZhbC5pbnRlZ2VyKSk7CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzY3Nyw3ICszODcwLDggQEAKICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA0ICYmIGkgPCAqb2lkTGVuOyArK2kpIHsKICAgICAgICAgICAgICAgICBpZiAob2lkSW5kZXhbaV0gPiAyNTUpIHsKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInBhcnNlX29pZF9pbmRleGVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlsbGVnYWwgb2lkIGluIGluZGV4OiAlZFxuIiwgb2lkSW5kZXhbMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImlsbGVnYWwgb2lkIGluIGluZGV4OiAlIiBORVRTTk1QX1BSSW8gImRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9pZEluZGV4WzBdKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7ICAvKiBzdWItaWRlbnRpZmllciB0b28gbGFyZ2UgKi8KICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICB1aXRtcCA9IHVpdG1wICsgKG9pZEluZGV4W2ldIDw8ICg4KigzLWkpKSk7CkBAIC00MDA2LDcgKzQyMDAsNyBAQAogICAgIH0KIAogICAgIHdoaWxlIChvYmppZGxlbi0tID4gMCkgeyAgICAvKiBvdXRwdXQgcmVzdCBvZiBuYW1lLCB1bmludGVycHJldGVkICovCi0gICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx1LiIsICpvYmppZCsrKTsKKyAgICAgICAgc3ByaW50ZihpbnRidWYsICIlIiBORVRTTk1QX1BSSW8gInUuIiwgKm9iamlkKyspOwogICAgICAgICBpZiAoISpidWZfb3ZlcmZsb3cgJiYgIXNubXBfc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19yZWFsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIgKikgaW50YnVmKSkgewpAQCAtNDI5NCw3ICs0NDg4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICpidWZfb3ZlcmZsb3cgPSAxOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHUiLCAqb2JqaWQpOworICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiUiIE5FVFNOTVBfUFJJbyAidSIsICpvYmppZCk7CiAgICAgICAgICAgICAgICAgICAgIGlmICghKmJ1Zl9vdmVyZmxvdwogICAgICAgICAgICAgICAgICAgICAgICAgJiYgIXNubXBfc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGxvd19yZWFsbG9jLApAQCAtNDMwMyw3ICs0NDk3LDcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlbHUiLCAqb2JqaWQpOworICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJSIgTkVUU05NUF9QUklvICJ1IiwgKm9iamlkKTsKICAgICAgICAgICAgICAgICBpZiAoISpidWZfb3ZlcmZsb3cgJiYgIXNubXBfc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X3JlYWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyICopCkBAIC00Mzc1LDcgKzQ1NjksOCBAQAogICAgICAgICBjYXNlIFRZUEVfSVBBRERSOgogICAgICAgICAgICAgaWYgKG9iamlkbGVuIDwgNCkKICAgICAgICAgICAgICAgICBnb3RvIGZpbmlzaF9pdDsKLSAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJWx1LiVsdS4lbHUuJWx1IiwKKyAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJSIgTkVUU05NUF9QUklvICJ1LiUiIE5FVFNOTVBfUFJJbyAidS4iCisgICAgICAgICAgICAgICAgICAgICIlIiBORVRTTk1QX1BSSW8gInUuJSIgTkVUU05NUF9QUklvICJ1IiwKICAgICAgICAgICAgICAgICAgICAgb2JqaWRbMF0sIG9iamlkWzFdLCBvYmppZFsyXSwgb2JqaWRbM10pOwogICAgICAgICAgICAgb2JqaWQgKz0gNDsKICAgICAgICAgICAgIG9iamlkbGVuIC09IDQ7CkBAIC00MzkwLDcgKzQ1ODUsNyBAQAogICAgICAgICAgICAgICAgIG9pZCAgICAgICAgICAgICBudHlwZSA9ICpvYmppZCsrOwogCiAgICAgICAgICAgICAgICAgb2JqaWRsZW4tLTsKLSAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVsdS4iLCBudHlwZSk7CisgICAgICAgICAgICAgICAgc3ByaW50ZihpbnRidWYsICIlIiBORVRTTk1QX1BSSW8gInUuIiwgbnR5cGUpOwogICAgICAgICAgICAgICAgIGlmICghKmJ1Zl9vdmVyZmxvdyAmJiAhc25tcF9zdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxsb3dfcmVhbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCB1X2NoYXIgKikKQEAgLTQzOTksNyArNDU5NCw4IEBACiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKG50eXBlID09IDEgJiYgb2JqaWRsZW4gPj0gNCkgewotICAgICAgICAgICAgICAgICAgICBzcHJpbnRmKGludGJ1ZiwgIiVsdS4lbHUuJWx1LiVsdSIsCisgICAgICAgICAgICAgICAgICAgIHNwcmludGYoaW50YnVmLCAiJSIgTkVUU05NUF9QUklvICJ1LiUiIE5FVFNOTVBfUFJJbyAidS4iCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUiIE5FVFNOTVBfUFJJbyAidS4lIiBORVRTTk1QX1BSSW8gInUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamlkWzBdLCBvYmppZFsxXSwgb2JqaWRbMl0sIG9iamlkWzNdKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCEqYnVmX292ZXJmbG93CiAgICAgICAgICAgICAgICAgICAgICAgICAmJiAhc25tcF9zdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLApAQCAtNDUxMSw2ICs0NzA3LDcgQEAKICAgICBTTk1QX0ZSRUUoYnVmKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9TTlBSSU5UX0RFU0NSSVBUSU9OCiBpbnQKIHNucHJpbnRfZGVzY3JpcHRpb24oY2hhciAqYnVmLCBzaXplX3QgYnVmX2xlbiwKICAgICAgICAgICAgICAgICAgICAgb2lkICogb2JqaWQsIHNpemVfdCBvYmppZGxlbiwgaW50IHdpZHRoKQpAQCAtNDUyNCw2ICs0NzIxLDcgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9TTlBSSU5UX0RFU0NSSVBUSU9OICovCiAKIGludAogc3ByaW50X3JlYWxsb2NfZGVzY3JpcHRpb24odV9jaGFyICoqIGJ1Ziwgc2l6ZV90ICogYnVmX2xlbiwKQEAgLTQ2MTAsNyArNDgwOCw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgd2hpbGUgKG9iamlkbGVuID4gMSkgewotICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwgIiAlbHUiLCAqb2JqaWQpOworICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwgIiAlIiBORVRTTk1QX1BSSW8gInUiLCAqb2JqaWQpOwogICAgICAgICBsZW4gPSBzdHJsZW4odG1wYnVmKTsKICAgICAgICAgaWYgKHBvcyArIGxlbiArIDIgPiB3aWR0aCkgewogICAgICAgICAgICAgaWYgKCFzbm1wX2NzdHJjYXQoYnVmLCBidWZfbGVuLCBvdXRfbGVuLCBhbGxvd19yZWFsbG9jLCAiXG4gICAgICIpKQpAQCAtNDYyMyw3ICs0ODIxLDcgQEAKICAgICAgICAgb2JqaWQrKzsKICAgICAgICAgb2JqaWRsZW4tLTsKICAgICB9Ci0gICAgc3ByaW50Zih0bXBidWYsICIgJWx1IH0iLCAqb2JqaWQpOworICAgIHNwcmludGYodG1wYnVmLCAiICUiIE5FVFNOTVBfUFJJbyAidSB9IiwgKm9iamlkKTsKICAgICBsZW4gPSBzdHJsZW4odG1wYnVmKTsKICAgICBpZiAocG9zICsgbGVuICsgMiA+IHdpZHRoKSB7CiAgICAgICAgIGlmICghc25tcF9jc3RyY2F0KGJ1ZiwgYnVmX2xlbiwgb3V0X2xlbiwgYWxsb3dfcmVhbGxvYywgIlxuICAgICAiKSkKQEAgLTUxNTcsNyArNTM1NSw3IEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIFNlYXJjaCBmb3IgdGhlIGFwcHJvcHJpYXRlIGNoaWxkIAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKGlzZGlnaXQoKmNwKSkgeworICAgICAgICBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwKSkpIHsKICAgICAgICAgICAgIHN1YmlkID0gc3RydG91bChjcCwgJmVjcCwgMCk7CiAgICAgICAgICAgICBpZiAoKmVjcCkKICAgICAgICAgICAgICAgICBnb3RvIGJhZF9pZDsKQEAgLTUyMTQsNyArNTQxMiw3IEBACiAgICAgICAgICAgICBjcDIgPSBzdHJjaHIoY3AsICcuJyk7CiAgICAgICAgICAgICBpZiAoY3AyKQogICAgICAgICAgICAgICAgICpjcDIrKyA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAoaXNkaWdpdCgqY3ApKSB7CisgICAgICAgICAgICBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwKSkpIHsKICAgICAgICAgICAgICAgICBzdWJpZCA9IHN0cnRvdWwoY3AsICZlY3AsIDApOwogICAgICAgICAgICAgICAgIGlmICgqZWNwKQogICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZF9pZDsKQEAgLTU3ODYsNyArNTk4NCw3IEBACiAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHRyZWUgKm50cDsKIAotICAgICAgICB0cCA9IDA7CisgICAgICAgIHRwID0gTlVMTDsKICAgICAgICAgZm9yIChudHAgPSB0cmVlLT5jaGlsZF9saXN0OyBudHA7IG50cCA9IG50cC0+bmV4dF9wZWVyKSB7CiAgICAgICAgICAgICBpZiAobnRwLT5yZXBvcnRlZCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTU4MzksNyArNjAzNyw2IEBACiAKIC8qKgogICogQ29udmVydHMgdGltZXRpY2tzIHRvIGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzIHN0cmluZy4KLSAqIENNVSBjb21wYXRpYmxlIGRvZXMgbm90IHNob3cgY2VudGlzZWNvbmRzLgogICoKICAqIEBwYXJhbSB0aW1ldGlja3MgICAgVGhlIHRpbWV0aWNrcyB0byBjb252ZXJ0LgogICogQHBhcmFtIGJ1ZiAgICAgICAgICBCdWZmZXIgdG8gd3JpdGUgdG8sIGhhcyB0byBiZSBhdCAKQEAgLTU4NTksMTMgKzYwNTYsNiBAQAogdXB0aW1lX3N0cmluZ19uKHVfbG9uZyB0aW1ldGlja3MsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKIHsKICAgICB1cHRpbWVTdHJpbmcodGltZXRpY2tzLCBidWYsIGJ1Zmxlbik7Ci0jaWZkZWYgQ01VX0NPTVBBVElCTEUKLSAgICB7Ci0gICAgY2hhciAqY3AgPSBzdHJyY2hyKGJ1ZiwgJy4nKTsKLSAgICBpZiAoY3ApCi0gICAgICAgICpjcCA9ICdcMCc7Ci0gICAgfQotI2VuZGlmCiAgICAgcmV0dXJuIGJ1ZjsKIH0KIApAQCAtNjA5OSw3ICs2Mjg5LDcgQEAKIAkgICAgaWYgKCcqJyA9PSAqaCkgewogCQlwaC5yZXBlYXQgPSAxOwogCQlzdGF0ZSA9IEhJTlRfMl8zOwotCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKmgpKSB7CisJICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmgpKSkgewogCQlwYXJzZV9oaW50c19sZW5ndGhfYWRkX2RpZ2l0KCZwaCwgKmgpOwogCQlzdGF0ZSA9IEhJTlRfMl8zOwogCSAgICB9IGVsc2UgewpAQCAtNjEwOCw3ICs2Mjk4LDcgQEAKIAkgICAgYnJlYWs7CiAKIAljYXNlIEhJTlRfMl8zOgotCSAgICBpZiAoaXNkaWdpdCgqaCkpIHsKKwkgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKCpoKSkpIHsKIAkJcGFyc2VfaGludHNfbGVuZ3RoX2FkZF9kaWdpdCgmcGgsICpoKTsKIAkJLyogc3RhdGUgPSBISU5UXzJfMyAqLwogCSAgICB9IGVsc2UgaWYgKCd4JyA9PSAqaCB8fCAnZCcgPT0gKmggfHwgJ28nID09ICpoIHx8ICdhJyA9PSAqaCkgewpAQCAtNjEyNiw3ICs2MzE2LDcgQEAKIAkJCiAJCXBoLnJlcGVhdCA9IDE7CiAJCXN0YXRlID0gSElOVF8yXzM7Ci0JICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgqaCkpIHsKKwkgICAgfSBlbHNlIGlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSgqaCkpKSB7CiAJCXJldHZhbCA9IHBhcnNlX2hpbnRzX3BhcnNlKCZwaCwgJnYpOwogCQlwYXJzZV9oaW50c19yZXNldCgmcGgpOwogCQkKQEAgLTYxNDUsNyArNjMzNSw3IEBACiAJCQogCQlwaC5yZXBlYXQgPSAxOwogCQlzdGF0ZSA9IEhJTlRfMl8zOwotCSAgICB9IGVsc2UgaWYgKGlzZGlnaXQoKmgpKSB7CisJICAgIH0gZWxzZSBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmgpKSkgewogCQlyZXR2YWwgPSBwYXJzZV9oaW50c19wYXJzZSgmcGgsICZ2KTsKIAkJcGFyc2VfaGludHNfcmVzZXQoJnBoKTsKIAkJCkBAIC02MjE4LDYgKzY0MDgsNyBAQAogCiAjZW5kaWYgLyogdGVzdF9kaXNwbGF5X2hpbnQgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9UT19BU05fVFlQRQogdV9jaGFyCiBtaWJfdG9fYXNuX3R5cGUoaW50IG1pYl90eXBlKQogewpAQCAtNjI2Nyw2ICs2NDU4LDcgQEAKICAgICB9CiAgICAgcmV0dXJuIC0xOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1RPX0FTTl9UWVBFICovCiAKIC8qKgogICogQ29udmVydHMgYSBzdHJpbmcgdG8gaXRzIE9JRCBmb3JtLgpAQCAtNjI3OCw2ICs2NDcwLDcgQEAKICAqCiAgKiBAcmV0dXJuIDAgb24gU3VjZXNzLCAxIG9uIGZhaWx1cmUuCiAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfU1RSSU5HX0NPTlZFUlNJT05TCiBpbnQKIG5ldHNubXBfc3RyMm9pZChjb25zdCBjaGFyICpTLCBvaWQgKiBPLCBpbnQgTCkKIHsKQEAgLTYzNTcsNyArNjU1MCwxMCBAQAogCiAgICAgcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NSUJfU1RSSU5HX0NPTlZFUlNJT05TICovCiAKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01JQl9TTlBSSU5UCiBpbnQKIHNucHJpbnRfYnlfdHlwZShjaGFyICpidWYsIHNpemVfdCBidWZfbGVuLAogICAgICAgICAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhciwKQEAgLTY2MzUsNSArNjgzMSw2IEBACiAgICAgICAgIHJldHVybiAtMTsKIH0KICNlbmRpZgorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUlCX1NOUFJJTlQgKi8KIC8qKiBAfSAqLwogCmRpZmYgLS1naXQgYS9zbm1wbGliL29pZF9zdGFzaC5jIGIvc25tcGxpYi9vaWRfc3Rhc2guYwppbmRleCBhMDlhZDUzLi44YTc5ODk3IDEwMDY0NAotLS0gYS9zbm1wbGliL29pZF9zdGFzaC5jCisrKyBiL3NubXBsaWIvb2lkX3N0YXNoLmMKQEAgLTUsOCArNSwxNSBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoX2FsbCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvaWRfc3Rhc2gsIG9pZF9zdGFzaF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoX25vX2ZyZWUsIG9pZF9zdGFzaF9hbGwpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0gKKwogLyoqIEBkZWZncm91cCBvaWRfc3Rhc2ggU3RvcmUgYW5kIHJldHJpZXZlIGRhdGEgcmVmZXJlbmNlZCBieSBhbiBPSUQuCiAgICAgVGhpcyBpcyBlc3NlbnRpYWxseSBhIHdheSBvZiBzdG9yaW5nIGRhdGEgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4KICAgICBPSUQuICBJdCBzdG9yZXMgYSBidW5jaCBvZiBkYXRhIHBvaW50ZXJzIHdpdGhpbiBhIG1lbW9yeSB0cmVlIHRoYXQKQEAgLTY4LDYgKzc1LDggQEAKICAgICByZXR1cm4gbmV0c25tcF9vaWRfc3Rhc2hfY3JlYXRlX3NpemVkX25vZGUoT0lEX1NUQVNIX0NISUxEUkVOX1NJWkUpOwogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoX2FkZF9kYXRhLCBvaWRfc3Rhc2hfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9BRERfREFUQQogLyoqIGFkZHMgZGF0YSB0byB0aGUgc3Rhc2ggYXQgYSBnaXZlbiBvaWQuCiAKICAqIEBwYXJhbSByb290IHRoZSB0b3Agb2YgdGhlIHN0YXNoIHRyZWUKQEAgLTE0NCw2ICsxNTMsNyBAQAogICAgIHRtcHAtPnRoZWRhdGEgPSBteWRhdGE7CiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9BRERfREFUQSAqLwogCiAvKiogcmV0dXJucyBhIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELgogICogQHBhcmFtIHJvb3QgdGhlIHRvcCBvZiB0aGUgc3Rhc2ggdHJlZQpAQCAtMTg3LDYgKzE5Nyw4IEBACiAgKiBAcGFyYW0gbG9va3VwIHRoZSBvaWQgdG8gbG9vayB1cCBhIG5vZGUgZm9yLgogICogQHBhcmFtIGxvb2t1cF9sZW4gdGhlIGxlbmd0aCBvZiB0aGUgbG9va3VwIG9pZAogICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoX2l0ZXJhdGUsIG9pZF9zdGFzaF9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX0lURVJBVEUKIG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKgogbmV0c25tcF9vaWRfc3Rhc2hfZ2V0bmV4dF9ub2RlKG5ldHNubXBfb2lkX3N0YXNoX25vZGUgKnJvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkICogbG9va3VwLCBzaXplX3QgbG9va3VwX2xlbikKQEAgLTI2OCw3ICsyODAsMTAgQEAKICAgICAvKiBmZWxsIG9mZiB0aGUgdG9wICovCiAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfSVRFUkFURSAqLwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX3N0YXNoX2dldF9kYXRhLCBvaWRfc3Rhc2hfYWxsKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9HRVRfREFUQQogLyoqIHJldHVybnMgYSBkYXRhIHBvaW50ZXIgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gT0lELgogCiAgICAgVGhpcyBpcyBlcXVpdmVsZW50IHRvIG5ldHNubXBfb2lkX3N0YXNoX2dldF9ub2RlLCBidXQgcmV0dXJucyBvbmx5CkBAIC0yODgsNyArMzAzLDEwIEBACiAgICAgICAgIHJldHVybiByZXQtPnRoZWRhdGE7CiAgICAgcmV0dXJuIE5VTEw7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PSURfU1RBU0hfR0VUX0RBVEEgKi8KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9pZF9zdGFzaF9zdG9yZV9hbGwsIG9pZF9zdGFzaF9hbGwpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX1NUT1JFX0FMTAogLyoqIGEgd3JhcHBlciBhcm91bmQgbmV0c25tcF9vaWRfc3Rhc2hfc3RvcmUgZm9yIHVzZSB3aXRoIGEgc25tcF9hbGFybS4KICAqIHdoZW4gY2FsbGluZyBzbm1wX2FsYXJtLCB5b3UgY2FuIGxpc3QgdGhpcyBhcyBhIGNhbGxiYWNrLiAgVGhlCiAgKiBjbGllbnRhcmcgc2hvdWxkIGJlIGEgcG9pbnRlciB0byBhIG5ldHNubXBfb2lkX3N0YXNoX3NhdmVfaW5mbwpAQCAtMzE0LDYgKzMzMiw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2lkYmFzZSwwKTsKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSF9TVE9SRV9BTEwgKi8KIAogLyoqIHN0b3JlcyBkYXRhIGluIGEgc3RhcnNoIHRyZWUgdG8gcGVyaXN0ZW50IHN0b3JhZ2UuCiAKQEAgLTM4NCw3ICs0MDMsNyBAQAogICAgIGZvciAoaSA9IDA7IGkgPCByb290LT5jaGlsZHJlbl9zaXplOyBpKyspIHsKICAgICAgICAgaWYgKHJvb3QtPmNoaWxkcmVuW2ldKSB7CiAgICAgICAgICAgICBmb3IgKHRtcHAgPSByb290LT5jaGlsZHJlbltpXTsgdG1wcDsgdG1wcCA9IHRtcHAtPm5leHRfc2libGluZykgewotICAgICAgICAgICAgICAgIHByaW50ZigiJXMlbGRAJWQ6ICVzXG4iLCBwcmVmaXgsIHRtcHAtPnZhbHVlLCBpLAorICAgICAgICAgICAgICAgIHByaW50ZigiJXMlIiBORVRTTk1QX1BSSW8gImRAJWQ6ICVzXG4iLCBwcmVmaXgsIHRtcHAtPnZhbHVlLCBpLAogICAgICAgICAgICAgICAgICAgICAgICAodG1wcC0+dGhlZGF0YSkgPyAiREFUQSIgOiAiIik7CiAgICAgICAgICAgICAgICAgb2lkX3N0YXNoX2R1bXAodG1wcCwgbXlwcmVmaXgpOwogICAgICAgICAgICAgfQpAQCAtNDI3LDEwICs0NDYsMTYgQEAKICAgICAqcm9vdCA9IE5VTEw7CiB9CiAKKyNlbHNlIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKG9pZF9zdGFzaCk7CisjZW5kaWYvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9TVEFTSCAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX05PX0ZSRUUKIHZvaWQKIG5ldHNubXBfb2lkX3N0YXNoX25vX2ZyZWUodm9pZCAqYm9ndXMpCiB7CiAgICAgLyogbm9vcCAqLwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX1NUQVNIX05PX0ZSRUUgKi8KIAogLyoqIEB9ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5kaXIuYyBiL3NubXBsaWIvb3BlbmRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjYjhlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5kaXIuYwpAQCAtMCwwICsxLDEzOSBAQAorLyoKKyAqIG9wZW5kaXIoKSByZXBsYWNlbWVudCBmb3IgTVNWQy4KKyAqLworCisjZGVmaW5lIFdJTjMySU9fSVNfU1RESU8KKyNkZWZpbmUgUEFUSExFTgkxMDI0CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaWZkZWYgSEFWRV9TWVNfU1RBVF9ICisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHRjaGFyLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCisKKy8qCisgKiBUaGUgaWRlYSBoZXJlIGlzIHRvIHJlYWQgYWxsIHRoZSBkaXJlY3RvcnkgbmFtZXMgaW50byBhIHN0cmluZyB0YWJsZQorICogKiAoc2VwYXJhdGVkIGJ5IG51bGxzKSBhbmQgd2hlbiBvbmUgb2YgdGhlIG90aGVyIGRpciBmdW5jdGlvbnMgaXMgY2FsbGVkCisgKiAqIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBmaWxlIG5hbWUuCisgKi8KK0RJUiAgICAgICAgICAgICoKK29wZW5kaXIoY29uc3QgY2hhciAqZmlsZW5hbWUpCit7CisgICAgRElSICAgICAgICAgICAgKnA7CisgICAgbG9uZyAgICAgICAgICAgIGxlbjsKKyAgICBsb25nICAgICAgICAgICAgaWR4OworICAgIGNoYXIgICAgICAgICAgICBzY2FubmFtZXNwY1tQQVRITEVOXTsKKyAgICBjaGFyICAgICAgICAgICAqc2Nhbm5hbWUgPSBzY2FubmFtZXNwYzsKKyAgICBzdHJ1Y3Qgc3RhdCAgICAgc2J1ZjsKKyAgICBXSU4zMl9GSU5EX0RBVEEgRmluZERhdGE7CisgICAgSEFORExFICAgICAgICAgIGZoOworCisgICAgLyoKKyAgICAgKiBjaGVjayB0byBzZWUgaWYgZmlsZW5hbWUgaXMgYSBkaXJlY3RvcnkgCisgICAgICovCisgICAgaWYgKChzdGF0KGZpbGVuYW1lLCAmc2J1ZikgPCAwKSB8fCAoKHNidWYuc3RfbW9kZSAmIFNfSUZESVIpID09IDApKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qCisgICAgICogZ2V0IHRoZSBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJpc3RpY3MgCisgICAgICovCisgICAgLyoKKyAgICAgKiBpZihHZXRGdWxsUGF0aE5hbWUoZmlsZW5hbWUsIFNOTVBfTUFYUEFUSCwgcm9vdCwgJmR1bW15KSkgeworICAgICAqICogICAgaWYoZHVtbXkgPSBzdHJjaHIocm9vdCwgJ1xcJykpCisgICAgICogKiAgICAgICAgKisrZHVtbXkgPSAnXDAnOworICAgICAqICogICAgaWYoR2V0Vm9sdW1lSW5mb3JtYXRpb24ocm9vdCwgdm9sbmFtZSwgU05NUF9NQVhQQVRILCAmc2VyaWFsLAorICAgICAqICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heG5hbWUsICZmbGFncywgMCwgMCkpIHsKKyAgICAgKiAqICAgICAgICBkb3duY2FzZSA9ICEoZmxhZ3MgJiBGU19DQVNFX0lTX1BSRVNFUlZFRCk7CisgICAgICogKiAgICB9CisgICAgICogKiAgfQorICAgICAqICogIGVsc2UgeworICAgICAqICogICAgZG93bmNhc2UgPSBUUlVFOworICAgICAqICogIH0KKyAgICAgKi8KKworICAgIC8qCisgICAgICogQ3JlYXRlIHRoZSBzZWFyY2ggcGF0dGVybiAKKyAgICAgKi8KKyAgICBzdHJjcHkoc2Nhbm5hbWUsIGZpbGVuYW1lKTsKKworICAgIGlmIChzdHJjaHIoIi9cXCIsICooc2Nhbm5hbWUgKyBzdHJsZW4oc2Nhbm5hbWUpIC0gMSkpID09IE5VTEwpCisgICAgICAgIHN0cmNhdChzY2FubmFtZSwgIi8qIik7CisgICAgZWxzZQorICAgICAgICBzdHJjYXQoc2Nhbm5hbWUsICIqIik7CisKKyAgICAvKgorICAgICAqIGRvIHRoZSBGaW5kRmlyc3RGaWxlIGNhbGwgCisgICAgICovCisgICAgZmggPSBGaW5kRmlyc3RGaWxlKHNjYW5uYW1lLCAmRmluZERhdGEpOworICAgIGlmIChmaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIEdldCB1cyBhIERJUiBzdHJ1Y3R1cmUgCisgICAgICovCisgICAgcCA9IChESVIgKikgbWFsbG9jKHNpemVvZihESVIpKTsKKyAgICAvKgorICAgICAqIE5ld3ooMTMwMywgcCwgMSwgRElSKTsgCisgICAgICovCisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIG5vdyBhbGxvY2F0ZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgc3RyaW5nIHRhYmxlIGZvcgorICAgICAqICogdGhlIGZpbGVuYW1lcyB0aGF0IHdlIGZpbmQuCisgICAgICovCisgICAgaWR4ID0gc3RybGVuKEZpbmREYXRhLmNGaWxlTmFtZSkgKyAxOworICAgIHAtPnN0YXJ0ID0gKGNoYXIgKikgbWFsbG9jKGlkeCk7CisgICAgLyoKKyAgICAgKiBOZXcoMTMwNCwgcC0+c3RhcnQsIGlkeCwgY2hhcik7CisgICAgICovCisgICAgaWYgKHAtPnN0YXJ0ID09IE5VTEwpIHsKKyAgICAgICAgZnJlZShwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHN0cmNweShwLT5zdGFydCwgRmluZERhdGEuY0ZpbGVOYW1lKTsKKyAgICAvKgorICAgICAqIGlmKGRvd25jYXNlKQorICAgICAqICogICAgc3RybHdyKHAtPnN0YXJ0KTsKKyAgICAgKi8KKyAgICBwLT5uZmlsZXMgPSAwOworCisgICAgLyoKKyAgICAgKiBsb29wIGZpbmRpbmcgYWxsIHRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZSB3aWxkY2FyZAorICAgICAqICogKHdoaWNoIHNob3VsZCBiZSBhbGwgb2YgdGhlbSBpbiB0aGlzIGRpcmVjdG9yeSEpLgorICAgICAqICogdGhlIHZhcmlhYmxlIGlkeCBzaG91bGQgcG9pbnQgb25lIHBhc3QgdGhlIG51bGwgdGVybWluYXRvcgorICAgICAqICogb2YgdGhlIHByZXZpb3VzIHN0cmluZyBmb3VuZC4KKyAgICAgKi8KKyAgICB3aGlsZSAoRmluZE5leHRGaWxlKGZoLCAmRmluZERhdGEpKSB7CisgICAgICAgIGxlbiA9IHN0cmxlbihGaW5kRGF0YS5jRmlsZU5hbWUpOworICAgICAgICAvKgorICAgICAgICAgKiBidW1wIHRoZSBzdHJpbmcgdGFibGUgc2l6ZSBieSBlbm91Z2ggZm9yIHRoZQorICAgICAgICAgKiAqIG5ldyBuYW1lIGFuZCBpdCdzIG51bGwgdGVybWluYXRvcgorICAgICAgICAgKi8KKyAgICAgICAgcC0+c3RhcnQgPSAoY2hhciAqKSByZWFsbG9jKCh2b2lkICopIHAtPnN0YXJ0LCBpZHggKyBsZW4gKyAxKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogUmVuZXcocC0+c3RhcnQsIGlkeCtsZW4rMSwgY2hhcik7CisgICAgICAgICAqLworICAgICAgICBpZiAocC0+c3RhcnQgPT0gTlVMTCkgeworICAgICAgICAgICAgZnJlZShwKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHN0cmNweSgmcC0+c3RhcnRbaWR4XSwgRmluZERhdGEuY0ZpbGVOYW1lKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogaWYgKGRvd25jYXNlKSAKKyAgICAgICAgICogKiAgICAgICAgc3RybHdyKCZwLT5zdGFydFtpZHhdKTsKKyAgICAgICAgICovCisgICAgICAgIHAtPm5maWxlcysrOworICAgICAgICBpZHggKz0gbGVuICsgMTsKKyAgICB9CisgICAgRmluZENsb3NlKGZoKTsKKyAgICBwLT5zaXplID0gaWR4OworICAgIHAtPmN1cnIgPSBwLT5zdGFydDsKKyAgICByZXR1cm4gcDsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9PUEVOU1NMLUxJQ0VOU0UgYi9zbm1wbGliL29wZW5zc2wvT1BFTlNTTC1MSUNFTlNFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyYzRhZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvT1BFTlNTTC1MSUNFTlNFCkBAIC0wLDAgKzEsMTI3IEBACisKKyAgTElDRU5TRSBJU1NVRVMKKyAgPT09PT09PT09PT09PT0KKworICBUaGUgT3BlblNTTCB0b29sa2l0IHN0YXlzIHVuZGVyIGEgZHVhbCBsaWNlbnNlLCBpLmUuIGJvdGggdGhlIGNvbmRpdGlvbnMgb2YKKyAgdGhlIE9wZW5TU0wgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIFNTTGVheSBsaWNlbnNlIGFwcGx5IHRvIHRoZSB0b29sa2l0LgorICBTZWUgYmVsb3cgZm9yIHRoZSBhY3R1YWwgbGljZW5zZSB0ZXh0cy4gQWN0dWFsbHkgYm90aCBsaWNlbnNlcyBhcmUgQlNELXN0eWxlCisgIE9wZW4gU291cmNlIGxpY2Vuc2VzLiBJbiBjYXNlIG9mIGFueSBsaWNlbnNlIGlzc3VlcyByZWxhdGVkIHRvIE9wZW5TU0wKKyAgcGxlYXNlIGNvbnRhY3Qgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorCisgIE9wZW5TU0wgTGljZW5zZQorICAtLS0tLS0tLS0tLS0tLS0KKworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkgRXJpYyBZb3VuZworICogKGVheUBjcnlwdHNvZnQuY29tKS4gIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbQorICogSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKgorICovCisKKyBPcmlnaW5hbCBTU0xlYXkgTGljZW5zZQorIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL1JFQURNRSBiL3NubXBsaWIvb3BlbnNzbC9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg0MDg3YgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9SRUFETUUKQEAgLTAsMCArMSwxOSBAQAorVGhpcyBkaXJlY3RvcnkgY29udGFpbnMgbW9kaWZpZWQgY3J5cHRvIGNvZGUgZnJvbSBPcGVuU1NMCisxLjAuMC5iZXRhNS4gIFBsZWFzZSBzZWUgdGhlIE9wZW5TU0wgbGljZW5zZSBmcm9tIHRoYXQgcmVsZWFzZSBpbiB0aGUKK09QRU5TU0wtTElDRU5TRSB3aGljaCB3aWxsIGFwcGx5IGlmIHRoaXMgY29kZSBpcyBzZWxlY3RlZC4KKworTmV0LVNOTVAgbWF5IGJlIGNvbXBpbGVkIHdpdGggdGhpcyBjb2RlIHVzaW5nIHRoZQorLS13aXRoLW9wZW5zc2w9aW50ZXJuYWwgZmxhZyB0byB0aGUgY29uZmlndXJlIGNvbW1hbmQgbGluZS4KKworTm90ZTogSXQgaXMgZ2VuZXJhbGx5IGEgYmV0dGVyIGlkZWEgdG8gbGluayB3aXRoIHRoZSBsYXRlc3QgT3BlblNTTAorbGlicmFyeSByYXRoZXIgdGhhbiByZWx5IG9uIHRoaXMgaW50ZXJuYWwgc3VwcG9ydCwgYXMgdGhlIGxhdGVzdAorT3BlblNTTCBjb2RlIG1heSBjb250YWluIGltcG9ydGFudCBzZWN1cml0eSBvciBvdGhlciBmaXhlcyB0aGF0IG1heQorbm90IGhhdmUgYmVlbiBpbmNvcnBvcmF0ZWQgaW50byB0aGlzIHNuYXBzaG90LiAgU21hbGwgZGV2aWNlIHZlbmRvcnMsCitob3dldmVyLCBoYXZlIHJlcXVlc3RlZCBhIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiB0aGUgT3BlblNTTAorY3J5cHRvZ3JhcGh5IGNvZGUgaW4gb3JkZXIgdG8gc2hyaW5rIHRoZWlyIG1lbW9yeSBmb290cHJpbnQgYW5kIHRoaXMKK2ZlYXR1cmUgcHJvdmlkZXMgc3VjaCBzdXBwb3J0LgorCitOb3RlIGFsc28gdGhhdCB0aGUgbmV3IFNOTVAgb3ZlciBEVExTLCBTTk1QIG92ZXIgVExTIHN1cHBvcnQgYWxzbworYXZhaWxhYmxlIGluIE5ldC1TTk1QIDUuNiBhbmQgYmV5b25kIGlzIGluY29tcGF0aWJsZSB3aXRoIHRoZSBpbnRlcm5hbAordmVyc2lvbiBvZiB0aGUgT3BlblNTTCBzdXBwb3J0IHNpbmNlIFNOTVAgb3ZlciAoRClUTFMgcmVxdWlyZXMgdGhlCitmdWxsIFRMUyBzdXBwb3J0IGF2YWlsYWJsZSBpbiBPcGVuU1NMLgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2NmYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OWU1YTcKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY2ZiLmMKQEAgLTAsMCArMSw4MSBAQAorLyogY3J5cHRvL2Flcy9hZXNfY2ZiLmMgLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9hZXMuaD4KKyNpbmNsdWRlICJvcGVuc3NsL29wZW5zc2xfbW9kZXMuaCIKKworLyogVGhlIGlucHV0IGFuZCBvdXRwdXQgZW5jcnlwdGVkIGFzIHRob3VnaCAxMjhiaXQgY2ZiIG1vZGUgaXMgYmVpbmcKKyAqIHVzZWQuICBUaGUgZXh0cmEgc3RhdGUgaW5mb3JtYXRpb24gdG8gcmVjb3JkIGhvdyBtdWNoIG9mIHRoZQorICogMTI4Yml0IGJsb2NrIHdlIGhhdmUgdXNlZCBpcyBjb250YWluZWQgaW4gKm51bTsKKyAqLworCit2b2lkIEFFU19jZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCXNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwl1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYykgeworCisJQ1JZUFRPX2NmYjEyOF9lbmNyeXB0KGluLG91dCxsZW5ndGgsa2V5LGl2ZWMsbnVtLGVuYywoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7Cit9CisKKy8qIE4uQi4gVGhpcyBleHBlY3RzIHRoZSBpbnB1dCB0byBiZSBwYWNrZWQsIE1TIGJpdCBmaXJzdCAqLwordm9pZCBBRVNfY2ZiMV9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSAgICAgIHNpemVfdCBsZW5ndGgsIGNvbnN0IEFFU19LRVkgKmtleSwKKwkJICAgICAgdW5zaWduZWQgY2hhciAqaXZlYywgaW50ICpudW0sIGNvbnN0IGludCBlbmMpCisgICAgeworICAgIENSWVBUT19jZmIxMjhfMV9lbmNyeXB0KGluLG91dCxsZW5ndGgsa2V5LGl2ZWMsbnVtLGVuYywoYmxvY2sxMjhfZilBRVNfZW5jcnlwdCk7CisgICAgfQorCit2b2lkIEFFU19jZmI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJICAgICAgc2l6ZV90IGxlbmd0aCwgY29uc3QgQUVTX0tFWSAqa2V5LAorCQkgICAgICB1bnNpZ25lZCBjaGFyICppdmVjLCBpbnQgKm51bSwgY29uc3QgaW50IGVuYykKKyAgICB7CisgICAgQ1JZUFRPX2NmYjEyOF84X2VuY3J5cHQoaW4sb3V0LGxlbmd0aCxrZXksaXZlYyxudW0sZW5jLChibG9jazEyOF9mKUFFU19lbmNyeXB0KTsKKyAgICB9CisKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19jb3JlLmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MzAxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9hZXNfY29yZS5jCkBAIC0wLDAgKzEsMTM1OCBAQAorLyogY3J5cHRvL2Flcy9hZXNfY29yZS5jIC0qLSBtb2RlOkM7IGMtZmlsZS1zdHlsZTogImVheSIgLSotICovCisvKioKKyAqIHJpam5kYWVsLWFsZy1mc3QuYworICoKKyAqIEB2ZXJzaW9uIDMuMCAoRGVjZW1iZXIgMjAwMCkKKyAqCisgKiBPcHRpbWlzZWQgQU5TSSBDIGNvZGUgZm9yIHRoZSBSaWpuZGFlbCBjaXBoZXIgKG5vdyBBRVMpCisgKgorICogQGF1dGhvciBWaW5jZW50IFJpam1lbiA8dmluY2VudC5yaWptZW5AZXNhdC5rdWxldXZlbi5hYy5iZT4KKyAqIEBhdXRob3IgQW50b29uIEJvc3NlbGFlcnMgPGFudG9vbi5ib3NzZWxhZXJzQGVzYXQua3VsZXV2ZW4uYWMuYmU+CisgKiBAYXV0aG9yIFBhdWxvIEJhcnJldG8gPHBhdWxvLmJhcnJldG9AdGVycmEuY29tLmJyPgorICoKKyAqIFRoaXMgY29kZSBpcyBoZXJlYnkgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgJydBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT05UUklCVVRPUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IKKyAqIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLAorICogV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKKyAqIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCisgKiBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIE5vdGU6IHJld3JpdHRlbiBhIGxpdHRsZSBiaXQgdG8gcHJvdmlkZSBlcnJvciBjb250cm9sIGFuZCBhbiBPcGVuU1NMLQorICAgY29tcGF0aWJsZSBBUEkgKi8KKworI2lmbmRlZiBBRVNfREVCVUcKKyMgaWZuZGVmIE5ERUJVRworIyAgZGVmaW5lIE5ERUJVRworIyBlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmg+CisjaW5jbHVkZSAib3BlbnNzbF9hZXNfbG9jYWwuaCIKKworI2lmbmRlZiBBRVNfQVNNCisvKgorVGUwW3hdID0gUyBbeF0uWzAyLCAwMSwgMDEsIDAzXTsKK1RlMVt4XSA9IFMgW3hdLlswMywgMDIsIDAxLCAwMV07CitUZTJbeF0gPSBTIFt4XS5bMDEsIDAzLCAwMiwgMDFdOworVGUzW3hdID0gUyBbeF0uWzAxLCAwMSwgMDMsIDAyXTsKKworVGQwW3hdID0gU2lbeF0uWzBlLCAwOSwgMGQsIDBiXTsKK1RkMVt4XSA9IFNpW3hdLlswYiwgMGUsIDA5LCAwZF07CitUZDJbeF0gPSBTaVt4XS5bMGQsIDBiLCAwZSwgMDldOworVGQzW3hdID0gU2lbeF0uWzA5LCAwZCwgMGIsIDBlXTsKK1RkNFt4XSA9IFNpW3hdLlswMV07CisqLworCitzdGF0aWMgY29uc3QgdTMyIFRlMFsyNTZdID0geworICAgIDB4YzY2MzYzYTVVLCAweGY4N2M3Yzg0VSwgMHhlZTc3Nzc5OVUsIDB4ZjY3YjdiOGRVLAorICAgIDB4ZmZmMmYyMGRVLCAweGQ2NmI2YmJkVSwgMHhkZTZmNmZiMVUsIDB4OTFjNWM1NTRVLAorICAgIDB4NjAzMDMwNTBVLCAweDAyMDEwMTAzVSwgMHhjZTY3NjdhOVUsIDB4NTYyYjJiN2RVLAorICAgIDB4ZTdmZWZlMTlVLCAweGI1ZDdkNzYyVSwgMHg0ZGFiYWJlNlUsIDB4ZWM3Njc2OWFVLAorICAgIDB4OGZjYWNhNDVVLCAweDFmODI4MjlkVSwgMHg4OWM5Yzk0MFUsIDB4ZmE3ZDdkODdVLAorICAgIDB4ZWZmYWZhMTVVLCAweGIyNTk1OWViVSwgMHg4ZTQ3NDdjOVUsIDB4ZmJmMGYwMGJVLAorICAgIDB4NDFhZGFkZWNVLCAweGIzZDRkNDY3VSwgMHg1ZmEyYTJmZFUsIDB4NDVhZmFmZWFVLAorICAgIDB4MjM5YzljYmZVLCAweDUzYTRhNGY3VSwgMHhlNDcyNzI5NlUsIDB4OWJjMGMwNWJVLAorICAgIDB4NzViN2I3YzJVLCAweGUxZmRmZDFjVSwgMHgzZDkzOTNhZVUsIDB4NGMyNjI2NmFVLAorICAgIDB4NmMzNjM2NWFVLCAweDdlM2YzZjQxVSwgMHhmNWY3ZjcwMlUsIDB4ODNjY2NjNGZVLAorICAgIDB4NjgzNDM0NWNVLCAweDUxYTVhNWY0VSwgMHhkMWU1ZTUzNFUsIDB4ZjlmMWYxMDhVLAorICAgIDB4ZTI3MTcxOTNVLCAweGFiZDhkODczVSwgMHg2MjMxMzE1M1UsIDB4MmExNTE1M2ZVLAorICAgIDB4MDgwNDA0MGNVLCAweDk1YzdjNzUyVSwgMHg0NjIzMjM2NVUsIDB4OWRjM2MzNWVVLAorICAgIDB4MzAxODE4MjhVLCAweDM3OTY5NmExVSwgMHgwYTA1MDUwZlUsIDB4MmY5YTlhYjVVLAorICAgIDB4MGUwNzA3MDlVLCAweDI0MTIxMjM2VSwgMHgxYjgwODA5YlUsIDB4ZGZlMmUyM2RVLAorICAgIDB4Y2RlYmViMjZVLCAweDRlMjcyNzY5VSwgMHg3ZmIyYjJjZFUsIDB4ZWE3NTc1OWZVLAorICAgIDB4MTIwOTA5MWJVLCAweDFkODM4MzllVSwgMHg1ODJjMmM3NFUsIDB4MzQxYTFhMmVVLAorICAgIDB4MzYxYjFiMmRVLCAweGRjNmU2ZWIyVSwgMHhiNDVhNWFlZVUsIDB4NWJhMGEwZmJVLAorICAgIDB4YTQ1MjUyZjZVLCAweDc2M2IzYjRkVSwgMHhiN2Q2ZDY2MVUsIDB4N2RiM2IzY2VVLAorICAgIDB4NTIyOTI5N2JVLCAweGRkZTNlMzNlVSwgMHg1ZTJmMmY3MVUsIDB4MTM4NDg0OTdVLAorICAgIDB4YTY1MzUzZjVVLCAweGI5ZDFkMTY4VSwgMHgwMDAwMDAwMFUsIDB4YzFlZGVkMmNVLAorICAgIDB4NDAyMDIwNjBVLCAweGUzZmNmYzFmVSwgMHg3OWIxYjFjOFUsIDB4YjY1YjViZWRVLAorICAgIDB4ZDQ2YTZhYmVVLCAweDhkY2JjYjQ2VSwgMHg2N2JlYmVkOVUsIDB4NzIzOTM5NGJVLAorICAgIDB4OTQ0YTRhZGVVLCAweDk4NGM0Y2Q0VSwgMHhiMDU4NThlOFUsIDB4ODVjZmNmNGFVLAorICAgIDB4YmJkMGQwNmJVLCAweGM1ZWZlZjJhVSwgMHg0ZmFhYWFlNVUsIDB4ZWRmYmZiMTZVLAorICAgIDB4ODY0MzQzYzVVLCAweDlhNGQ0ZGQ3VSwgMHg2NjMzMzM1NVUsIDB4MTE4NTg1OTRVLAorICAgIDB4OGE0NTQ1Y2ZVLCAweGU5ZjlmOTEwVSwgMHgwNDAyMDIwNlUsIDB4ZmU3ZjdmODFVLAorICAgIDB4YTA1MDUwZjBVLCAweDc4M2MzYzQ0VSwgMHgyNTlmOWZiYVUsIDB4NGJhOGE4ZTNVLAorICAgIDB4YTI1MTUxZjNVLCAweDVkYTNhM2ZlVSwgMHg4MDQwNDBjMFUsIDB4MDU4ZjhmOGFVLAorICAgIDB4M2Y5MjkyYWRVLCAweDIxOWQ5ZGJjVSwgMHg3MDM4Mzg0OFUsIDB4ZjFmNWY1MDRVLAorICAgIDB4NjNiY2JjZGZVLCAweDc3YjZiNmMxVSwgMHhhZmRhZGE3NVUsIDB4NDIyMTIxNjNVLAorICAgIDB4MjAxMDEwMzBVLCAweGU1ZmZmZjFhVSwgMHhmZGYzZjMwZVUsIDB4YmZkMmQyNmRVLAorICAgIDB4ODFjZGNkNGNVLCAweDE4MGMwYzE0VSwgMHgyNjEzMTMzNVUsIDB4YzNlY2VjMmZVLAorICAgIDB4YmU1ZjVmZTFVLCAweDM1OTc5N2EyVSwgMHg4ODQ0NDRjY1UsIDB4MmUxNzE3MzlVLAorICAgIDB4OTNjNGM0NTdVLCAweDU1YTdhN2YyVSwgMHhmYzdlN2U4MlUsIDB4N2EzZDNkNDdVLAorICAgIDB4Yzg2NDY0YWNVLCAweGJhNWQ1ZGU3VSwgMHgzMjE5MTkyYlUsIDB4ZTY3MzczOTVVLAorICAgIDB4YzA2MDYwYTBVLCAweDE5ODE4MTk4VSwgMHg5ZTRmNGZkMVUsIDB4YTNkY2RjN2ZVLAorICAgIDB4NDQyMjIyNjZVLCAweDU0MmEyYTdlVSwgMHgzYjkwOTBhYlUsIDB4MGI4ODg4ODNVLAorICAgIDB4OGM0NjQ2Y2FVLCAweGM3ZWVlZTI5VSwgMHg2YmI4YjhkM1UsIDB4MjgxNDE0M2NVLAorICAgIDB4YTdkZWRlNzlVLCAweGJjNWU1ZWUyVSwgMHgxNjBiMGIxZFUsIDB4YWRkYmRiNzZVLAorICAgIDB4ZGJlMGUwM2JVLCAweDY0MzIzMjU2VSwgMHg3NDNhM2E0ZVUsIDB4MTQwYTBhMWVVLAorICAgIDB4OTI0OTQ5ZGJVLCAweDBjMDYwNjBhVSwgMHg0ODI0MjQ2Y1UsIDB4Yjg1YzVjZTRVLAorICAgIDB4OWZjMmMyNWRVLCAweGJkZDNkMzZlVSwgMHg0M2FjYWNlZlUsIDB4YzQ2MjYyYTZVLAorICAgIDB4Mzk5MTkxYThVLCAweDMxOTU5NWE0VSwgMHhkM2U0ZTQzN1UsIDB4ZjI3OTc5OGJVLAorICAgIDB4ZDVlN2U3MzJVLCAweDhiYzhjODQzVSwgMHg2ZTM3Mzc1OVUsIDB4ZGE2ZDZkYjdVLAorICAgIDB4MDE4ZDhkOGNVLCAweGIxZDVkNTY0VSwgMHg5YzRlNGVkMlUsIDB4NDlhOWE5ZTBVLAorICAgIDB4ZDg2YzZjYjRVLCAweGFjNTY1NmZhVSwgMHhmM2Y0ZjQwN1UsIDB4Y2ZlYWVhMjVVLAorICAgIDB4Y2E2NTY1YWZVLCAweGY0N2E3YThlVSwgMHg0N2FlYWVlOVUsIDB4MTAwODA4MThVLAorICAgIDB4NmZiYWJhZDVVLCAweGYwNzg3ODg4VSwgMHg0YTI1MjU2ZlUsIDB4NWMyZTJlNzJVLAorICAgIDB4MzgxYzFjMjRVLCAweDU3YTZhNmYxVSwgMHg3M2I0YjRjN1UsIDB4OTdjNmM2NTFVLAorICAgIDB4Y2JlOGU4MjNVLCAweGExZGRkZDdjVSwgMHhlODc0NzQ5Y1UsIDB4M2UxZjFmMjFVLAorICAgIDB4OTY0YjRiZGRVLCAweDYxYmRiZGRjVSwgMHgwZDhiOGI4NlUsIDB4MGY4YThhODVVLAorICAgIDB4ZTA3MDcwOTBVLCAweDdjM2UzZTQyVSwgMHg3MWI1YjVjNFUsIDB4Y2M2NjY2YWFVLAorICAgIDB4OTA0ODQ4ZDhVLCAweDA2MDMwMzA1VSwgMHhmN2Y2ZjYwMVUsIDB4MWMwZTBlMTJVLAorICAgIDB4YzI2MTYxYTNVLCAweDZhMzUzNTVmVSwgMHhhZTU3NTdmOVUsIDB4NjliOWI5ZDBVLAorICAgIDB4MTc4Njg2OTFVLCAweDk5YzFjMTU4VSwgMHgzYTFkMWQyN1UsIDB4Mjc5ZTllYjlVLAorICAgIDB4ZDllMWUxMzhVLCAweGViZjhmODEzVSwgMHgyYjk4OThiM1UsIDB4MjIxMTExMzNVLAorICAgIDB4ZDI2OTY5YmJVLCAweGE5ZDlkOTcwVSwgMHgwNzhlOGU4OVUsIDB4MzM5NDk0YTdVLAorICAgIDB4MmQ5YjliYjZVLCAweDNjMWUxZTIyVSwgMHgxNTg3ODc5MlUsIDB4YzllOWU5MjBVLAorICAgIDB4ODdjZWNlNDlVLCAweGFhNTU1NWZmVSwgMHg1MDI4Mjg3OFUsIDB4YTVkZmRmN2FVLAorICAgIDB4MDM4YzhjOGZVLCAweDU5YTFhMWY4VSwgMHgwOTg5ODk4MFUsIDB4MWEwZDBkMTdVLAorICAgIDB4NjViZmJmZGFVLCAweGQ3ZTZlNjMxVSwgMHg4NDQyNDJjNlUsIDB4ZDA2ODY4YjhVLAorICAgIDB4ODI0MTQxYzNVLCAweDI5OTk5OWIwVSwgMHg1YTJkMmQ3N1UsIDB4MWUwZjBmMTFVLAorICAgIDB4N2JiMGIwY2JVLCAweGE4NTQ1NGZjVSwgMHg2ZGJiYmJkNlUsIDB4MmMxNjE2M2FVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgVGUxWzI1Nl0gPSB7CisgICAgMHhhNWM2NjM2M1UsIDB4ODRmODdjN2NVLCAweDk5ZWU3Nzc3VSwgMHg4ZGY2N2I3YlUsCisgICAgMHgwZGZmZjJmMlUsIDB4YmRkNjZiNmJVLCAweGIxZGU2ZjZmVSwgMHg1NDkxYzVjNVUsCisgICAgMHg1MDYwMzAzMFUsIDB4MDMwMjAxMDFVLCAweGE5Y2U2NzY3VSwgMHg3ZDU2MmIyYlUsCisgICAgMHgxOWU3ZmVmZVUsIDB4NjJiNWQ3ZDdVLCAweGU2NGRhYmFiVSwgMHg5YWVjNzY3NlUsCisgICAgMHg0NThmY2FjYVUsIDB4OWQxZjgyODJVLCAweDQwODljOWM5VSwgMHg4N2ZhN2Q3ZFUsCisgICAgMHgxNWVmZmFmYVUsIDB4ZWJiMjU5NTlVLCAweGM5OGU0NzQ3VSwgMHgwYmZiZjBmMFUsCisgICAgMHhlYzQxYWRhZFUsIDB4NjdiM2Q0ZDRVLCAweGZkNWZhMmEyVSwgMHhlYTQ1YWZhZlUsCisgICAgMHhiZjIzOWM5Y1UsIDB4Zjc1M2E0YTRVLCAweDk2ZTQ3MjcyVSwgMHg1YjliYzBjMFUsCisgICAgMHhjMjc1YjdiN1UsIDB4MWNlMWZkZmRVLCAweGFlM2Q5MzkzVSwgMHg2YTRjMjYyNlUsCisgICAgMHg1YTZjMzYzNlUsIDB4NDE3ZTNmM2ZVLCAweDAyZjVmN2Y3VSwgMHg0ZjgzY2NjY1UsCisgICAgMHg1YzY4MzQzNFUsIDB4ZjQ1MWE1YTVVLCAweDM0ZDFlNWU1VSwgMHgwOGY5ZjFmMVUsCisgICAgMHg5M2UyNzE3MVUsIDB4NzNhYmQ4ZDhVLCAweDUzNjIzMTMxVSwgMHgzZjJhMTUxNVUsCisgICAgMHgwYzA4MDQwNFUsIDB4NTI5NWM3YzdVLCAweDY1NDYyMzIzVSwgMHg1ZTlkYzNjM1UsCisgICAgMHgyODMwMTgxOFUsIDB4YTEzNzk2OTZVLCAweDBmMGEwNTA1VSwgMHhiNTJmOWE5YVUsCisgICAgMHgwOTBlMDcwN1UsIDB4MzYyNDEyMTJVLCAweDliMWI4MDgwVSwgMHgzZGRmZTJlMlUsCisgICAgMHgyNmNkZWJlYlUsIDB4Njk0ZTI3MjdVLCAweGNkN2ZiMmIyVSwgMHg5ZmVhNzU3NVUsCisgICAgMHgxYjEyMDkwOVUsIDB4OWUxZDgzODNVLCAweDc0NTgyYzJjVSwgMHgyZTM0MWExYVUsCisgICAgMHgyZDM2MWIxYlUsIDB4YjJkYzZlNmVVLCAweGVlYjQ1YTVhVSwgMHhmYjViYTBhMFUsCisgICAgMHhmNmE0NTI1MlUsIDB4NGQ3NjNiM2JVLCAweDYxYjdkNmQ2VSwgMHhjZTdkYjNiM1UsCisgICAgMHg3YjUyMjkyOVUsIDB4M2VkZGUzZTNVLCAweDcxNWUyZjJmVSwgMHg5NzEzODQ4NFUsCisgICAgMHhmNWE2NTM1M1UsIDB4NjhiOWQxZDFVLCAweDAwMDAwMDAwVSwgMHgyY2MxZWRlZFUsCisgICAgMHg2MDQwMjAyMFUsIDB4MWZlM2ZjZmNVLCAweGM4NzliMWIxVSwgMHhlZGI2NWI1YlUsCisgICAgMHhiZWQ0NmE2YVUsIDB4NDY4ZGNiY2JVLCAweGQ5NjdiZWJlVSwgMHg0YjcyMzkzOVUsCisgICAgMHhkZTk0NGE0YVUsIDB4ZDQ5ODRjNGNVLCAweGU4YjA1ODU4VSwgMHg0YTg1Y2ZjZlUsCisgICAgMHg2YmJiZDBkMFUsIDB4MmFjNWVmZWZVLCAweGU1NGZhYWFhVSwgMHgxNmVkZmJmYlUsCisgICAgMHhjNTg2NDM0M1UsIDB4ZDc5YTRkNGRVLCAweDU1NjYzMzMzVSwgMHg5NDExODU4NVUsCisgICAgMHhjZjhhNDU0NVUsIDB4MTBlOWY5ZjlVLCAweDA2MDQwMjAyVSwgMHg4MWZlN2Y3ZlUsCisgICAgMHhmMGEwNTA1MFUsIDB4NDQ3ODNjM2NVLCAweGJhMjU5ZjlmVSwgMHhlMzRiYThhOFUsCisgICAgMHhmM2EyNTE1MVUsIDB4ZmU1ZGEzYTNVLCAweGMwODA0MDQwVSwgMHg4YTA1OGY4ZlUsCisgICAgMHhhZDNmOTI5MlUsIDB4YmMyMTlkOWRVLCAweDQ4NzAzODM4VSwgMHgwNGYxZjVmNVUsCisgICAgMHhkZjYzYmNiY1UsIDB4YzE3N2I2YjZVLCAweDc1YWZkYWRhVSwgMHg2MzQyMjEyMVUsCisgICAgMHgzMDIwMTAxMFUsIDB4MWFlNWZmZmZVLCAweDBlZmRmM2YzVSwgMHg2ZGJmZDJkMlUsCisgICAgMHg0YzgxY2RjZFUsIDB4MTQxODBjMGNVLCAweDM1MjYxMzEzVSwgMHgyZmMzZWNlY1UsCisgICAgMHhlMWJlNWY1ZlUsIDB4YTIzNTk3OTdVLCAweGNjODg0NDQ0VSwgMHgzOTJlMTcxN1UsCisgICAgMHg1NzkzYzRjNFUsIDB4ZjI1NWE3YTdVLCAweDgyZmM3ZTdlVSwgMHg0NzdhM2QzZFUsCisgICAgMHhhY2M4NjQ2NFUsIDB4ZTdiYTVkNWRVLCAweDJiMzIxOTE5VSwgMHg5NWU2NzM3M1UsCisgICAgMHhhMGMwNjA2MFUsIDB4OTgxOTgxODFVLCAweGQxOWU0ZjRmVSwgMHg3ZmEzZGNkY1UsCisgICAgMHg2NjQ0MjIyMlUsIDB4N2U1NDJhMmFVLCAweGFiM2I5MDkwVSwgMHg4MzBiODg4OFUsCisgICAgMHhjYThjNDY0NlUsIDB4MjljN2VlZWVVLCAweGQzNmJiOGI4VSwgMHgzYzI4MTQxNFUsCisgICAgMHg3OWE3ZGVkZVUsIDB4ZTJiYzVlNWVVLCAweDFkMTYwYjBiVSwgMHg3NmFkZGJkYlUsCisgICAgMHgzYmRiZTBlMFUsIDB4NTY2NDMyMzJVLCAweDRlNzQzYTNhVSwgMHgxZTE0MGEwYVUsCisgICAgMHhkYjkyNDk0OVUsIDB4MGEwYzA2MDZVLCAweDZjNDgyNDI0VSwgMHhlNGI4NWM1Y1UsCisgICAgMHg1ZDlmYzJjMlUsIDB4NmViZGQzZDNVLCAweGVmNDNhY2FjVSwgMHhhNmM0NjI2MlUsCisgICAgMHhhODM5OTE5MVUsIDB4YTQzMTk1OTVVLCAweDM3ZDNlNGU0VSwgMHg4YmYyNzk3OVUsCisgICAgMHgzMmQ1ZTdlN1UsIDB4NDM4YmM4YzhVLCAweDU5NmUzNzM3VSwgMHhiN2RhNmQ2ZFUsCisgICAgMHg4YzAxOGQ4ZFUsIDB4NjRiMWQ1ZDVVLCAweGQyOWM0ZTRlVSwgMHhlMDQ5YTlhOVUsCisgICAgMHhiNGQ4NmM2Y1UsIDB4ZmFhYzU2NTZVLCAweDA3ZjNmNGY0VSwgMHgyNWNmZWFlYVUsCisgICAgMHhhZmNhNjU2NVUsIDB4OGVmNDdhN2FVLCAweGU5NDdhZWFlVSwgMHgxODEwMDgwOFUsCisgICAgMHhkNTZmYmFiYVUsIDB4ODhmMDc4NzhVLCAweDZmNGEyNTI1VSwgMHg3MjVjMmUyZVUsCisgICAgMHgyNDM4MWMxY1UsIDB4ZjE1N2E2YTZVLCAweGM3NzNiNGI0VSwgMHg1MTk3YzZjNlUsCisgICAgMHgyM2NiZThlOFUsIDB4N2NhMWRkZGRVLCAweDljZTg3NDc0VSwgMHgyMTNlMWYxZlUsCisgICAgMHhkZDk2NGI0YlUsIDB4ZGM2MWJkYmRVLCAweDg2MGQ4YjhiVSwgMHg4NTBmOGE4YVUsCisgICAgMHg5MGUwNzA3MFUsIDB4NDI3YzNlM2VVLCAweGM0NzFiNWI1VSwgMHhhYWNjNjY2NlUsCisgICAgMHhkODkwNDg0OFUsIDB4MDUwNjAzMDNVLCAweDAxZjdmNmY2VSwgMHgxMjFjMGUwZVUsCisgICAgMHhhM2MyNjE2MVUsIDB4NWY2YTM1MzVVLCAweGY5YWU1NzU3VSwgMHhkMDY5YjliOVUsCisgICAgMHg5MTE3ODY4NlUsIDB4NTg5OWMxYzFVLCAweDI3M2ExZDFkVSwgMHhiOTI3OWU5ZVUsCisgICAgMHgzOGQ5ZTFlMVUsIDB4MTNlYmY4ZjhVLCAweGIzMmI5ODk4VSwgMHgzMzIyMTExMVUsCisgICAgMHhiYmQyNjk2OVUsIDB4NzBhOWQ5ZDlVLCAweDg5MDc4ZThlVSwgMHhhNzMzOTQ5NFUsCisgICAgMHhiNjJkOWI5YlUsIDB4MjIzYzFlMWVVLCAweDkyMTU4Nzg3VSwgMHgyMGM5ZTllOVUsCisgICAgMHg0OTg3Y2VjZVUsIDB4ZmZhYTU1NTVVLCAweDc4NTAyODI4VSwgMHg3YWE1ZGZkZlUsCisgICAgMHg4ZjAzOGM4Y1UsIDB4Zjg1OWExYTFVLCAweDgwMDk4OTg5VSwgMHgxNzFhMGQwZFUsCisgICAgMHhkYTY1YmZiZlUsIDB4MzFkN2U2ZTZVLCAweGM2ODQ0MjQyVSwgMHhiOGQwNjg2OFUsCisgICAgMHhjMzgyNDE0MVUsIDB4YjAyOTk5OTlVLCAweDc3NWEyZDJkVSwgMHgxMTFlMGYwZlUsCisgICAgMHhjYjdiYjBiMFUsIDB4ZmNhODU0NTRVLCAweGQ2NmRiYmJiVSwgMHgzYTJjMTYxNlUsCit9Oworc3RhdGljIGNvbnN0IHUzMiBUZTJbMjU2XSA9IHsKKyAgICAweDYzYTVjNjYzVSwgMHg3Yzg0Zjg3Y1UsIDB4Nzc5OWVlNzdVLCAweDdiOGRmNjdiVSwKKyAgICAweGYyMGRmZmYyVSwgMHg2YmJkZDY2YlUsIDB4NmZiMWRlNmZVLCAweGM1NTQ5MWM1VSwKKyAgICAweDMwNTA2MDMwVSwgMHgwMTAzMDIwMVUsIDB4NjdhOWNlNjdVLCAweDJiN2Q1NjJiVSwKKyAgICAweGZlMTllN2ZlVSwgMHhkNzYyYjVkN1UsIDB4YWJlNjRkYWJVLCAweDc2OWFlYzc2VSwKKyAgICAweGNhNDU4ZmNhVSwgMHg4MjlkMWY4MlUsIDB4Yzk0MDg5YzlVLCAweDdkODdmYTdkVSwKKyAgICAweGZhMTVlZmZhVSwgMHg1OWViYjI1OVUsIDB4NDdjOThlNDdVLCAweGYwMGJmYmYwVSwKKyAgICAweGFkZWM0MWFkVSwgMHhkNDY3YjNkNFUsIDB4YTJmZDVmYTJVLCAweGFmZWE0NWFmVSwKKyAgICAweDljYmYyMzljVSwgMHhhNGY3NTNhNFUsIDB4NzI5NmU0NzJVLCAweGMwNWI5YmMwVSwKKyAgICAweGI3YzI3NWI3VSwgMHhmZDFjZTFmZFUsIDB4OTNhZTNkOTNVLCAweDI2NmE0YzI2VSwKKyAgICAweDM2NWE2YzM2VSwgMHgzZjQxN2UzZlUsIDB4ZjcwMmY1ZjdVLCAweGNjNGY4M2NjVSwKKyAgICAweDM0NWM2ODM0VSwgMHhhNWY0NTFhNVUsIDB4ZTUzNGQxZTVVLCAweGYxMDhmOWYxVSwKKyAgICAweDcxOTNlMjcxVSwgMHhkODczYWJkOFUsIDB4MzE1MzYyMzFVLCAweDE1M2YyYTE1VSwKKyAgICAweDA0MGMwODA0VSwgMHhjNzUyOTVjN1UsIDB4MjM2NTQ2MjNVLCAweGMzNWU5ZGMzVSwKKyAgICAweDE4MjgzMDE4VSwgMHg5NmExMzc5NlUsIDB4MDUwZjBhMDVVLCAweDlhYjUyZjlhVSwKKyAgICAweDA3MDkwZTA3VSwgMHgxMjM2MjQxMlUsIDB4ODA5YjFiODBVLCAweGUyM2RkZmUyVSwKKyAgICAweGViMjZjZGViVSwgMHgyNzY5NGUyN1UsIDB4YjJjZDdmYjJVLCAweDc1OWZlYTc1VSwKKyAgICAweDA5MWIxMjA5VSwgMHg4MzllMWQ4M1UsIDB4MmM3NDU4MmNVLCAweDFhMmUzNDFhVSwKKyAgICAweDFiMmQzNjFiVSwgMHg2ZWIyZGM2ZVUsIDB4NWFlZWI0NWFVLCAweGEwZmI1YmEwVSwKKyAgICAweDUyZjZhNDUyVSwgMHgzYjRkNzYzYlUsIDB4ZDY2MWI3ZDZVLCAweGIzY2U3ZGIzVSwKKyAgICAweDI5N2I1MjI5VSwgMHhlMzNlZGRlM1UsIDB4MmY3MTVlMmZVLCAweDg0OTcxMzg0VSwKKyAgICAweDUzZjVhNjUzVSwgMHhkMTY4YjlkMVUsIDB4MDAwMDAwMDBVLCAweGVkMmNjMWVkVSwKKyAgICAweDIwNjA0MDIwVSwgMHhmYzFmZTNmY1UsIDB4YjFjODc5YjFVLCAweDViZWRiNjViVSwKKyAgICAweDZhYmVkNDZhVSwgMHhjYjQ2OGRjYlUsIDB4YmVkOTY3YmVVLCAweDM5NGI3MjM5VSwKKyAgICAweDRhZGU5NDRhVSwgMHg0Y2Q0OTg0Y1UsIDB4NThlOGIwNThVLCAweGNmNGE4NWNmVSwKKyAgICAweGQwNmJiYmQwVSwgMHhlZjJhYzVlZlUsIDB4YWFlNTRmYWFVLCAweGZiMTZlZGZiVSwKKyAgICAweDQzYzU4NjQzVSwgMHg0ZGQ3OWE0ZFUsIDB4MzM1NTY2MzNVLCAweDg1OTQxMTg1VSwKKyAgICAweDQ1Y2Y4YTQ1VSwgMHhmOTEwZTlmOVUsIDB4MDIwNjA0MDJVLCAweDdmODFmZTdmVSwKKyAgICAweDUwZjBhMDUwVSwgMHgzYzQ0NzgzY1UsIDB4OWZiYTI1OWZVLCAweGE4ZTM0YmE4VSwKKyAgICAweDUxZjNhMjUxVSwgMHhhM2ZlNWRhM1UsIDB4NDBjMDgwNDBVLCAweDhmOGEwNThmVSwKKyAgICAweDkyYWQzZjkyVSwgMHg5ZGJjMjE5ZFUsIDB4Mzg0ODcwMzhVLCAweGY1MDRmMWY1VSwKKyAgICAweGJjZGY2M2JjVSwgMHhiNmMxNzdiNlUsIDB4ZGE3NWFmZGFVLCAweDIxNjM0MjIxVSwKKyAgICAweDEwMzAyMDEwVSwgMHhmZjFhZTVmZlUsIDB4ZjMwZWZkZjNVLCAweGQyNmRiZmQyVSwKKyAgICAweGNkNGM4MWNkVSwgMHgwYzE0MTgwY1UsIDB4MTMzNTI2MTNVLCAweGVjMmZjM2VjVSwKKyAgICAweDVmZTFiZTVmVSwgMHg5N2EyMzU5N1UsIDB4NDRjYzg4NDRVLCAweDE3MzkyZTE3VSwKKyAgICAweGM0NTc5M2M0VSwgMHhhN2YyNTVhN1UsIDB4N2U4MmZjN2VVLCAweDNkNDc3YTNkVSwKKyAgICAweDY0YWNjODY0VSwgMHg1ZGU3YmE1ZFUsIDB4MTkyYjMyMTlVLCAweDczOTVlNjczVSwKKyAgICAweDYwYTBjMDYwVSwgMHg4MTk4MTk4MVUsIDB4NGZkMTllNGZVLCAweGRjN2ZhM2RjVSwKKyAgICAweDIyNjY0NDIyVSwgMHgyYTdlNTQyYVUsIDB4OTBhYjNiOTBVLCAweDg4ODMwYjg4VSwKKyAgICAweDQ2Y2E4YzQ2VSwgMHhlZTI5YzdlZVUsIDB4YjhkMzZiYjhVLCAweDE0M2MyODE0VSwKKyAgICAweGRlNzlhN2RlVSwgMHg1ZWUyYmM1ZVUsIDB4MGIxZDE2MGJVLCAweGRiNzZhZGRiVSwKKyAgICAweGUwM2JkYmUwVSwgMHgzMjU2NjQzMlUsIDB4M2E0ZTc0M2FVLCAweDBhMWUxNDBhVSwKKyAgICAweDQ5ZGI5MjQ5VSwgMHgwNjBhMGMwNlUsIDB4MjQ2YzQ4MjRVLCAweDVjZTRiODVjVSwKKyAgICAweGMyNWQ5ZmMyVSwgMHhkMzZlYmRkM1UsIDB4YWNlZjQzYWNVLCAweDYyYTZjNDYyVSwKKyAgICAweDkxYTgzOTkxVSwgMHg5NWE0MzE5NVUsIDB4ZTQzN2QzZTRVLCAweDc5OGJmMjc5VSwKKyAgICAweGU3MzJkNWU3VSwgMHhjODQzOGJjOFUsIDB4Mzc1OTZlMzdVLCAweDZkYjdkYTZkVSwKKyAgICAweDhkOGMwMThkVSwgMHhkNTY0YjFkNVUsIDB4NGVkMjljNGVVLCAweGE5ZTA0OWE5VSwKKyAgICAweDZjYjRkODZjVSwgMHg1NmZhYWM1NlUsIDB4ZjQwN2YzZjRVLCAweGVhMjVjZmVhVSwKKyAgICAweDY1YWZjYTY1VSwgMHg3YThlZjQ3YVUsIDB4YWVlOTQ3YWVVLCAweDA4MTgxMDA4VSwKKyAgICAweGJhZDU2ZmJhVSwgMHg3ODg4ZjA3OFUsIDB4MjU2ZjRhMjVVLCAweDJlNzI1YzJlVSwKKyAgICAweDFjMjQzODFjVSwgMHhhNmYxNTdhNlUsIDB4YjRjNzczYjRVLCAweGM2NTE5N2M2VSwKKyAgICAweGU4MjNjYmU4VSwgMHhkZDdjYTFkZFUsIDB4NzQ5Y2U4NzRVLCAweDFmMjEzZTFmVSwKKyAgICAweDRiZGQ5NjRiVSwgMHhiZGRjNjFiZFUsIDB4OGI4NjBkOGJVLCAweDhhODUwZjhhVSwKKyAgICAweDcwOTBlMDcwVSwgMHgzZTQyN2MzZVUsIDB4YjVjNDcxYjVVLCAweDY2YWFjYzY2VSwKKyAgICAweDQ4ZDg5MDQ4VSwgMHgwMzA1MDYwM1UsIDB4ZjYwMWY3ZjZVLCAweDBlMTIxYzBlVSwKKyAgICAweDYxYTNjMjYxVSwgMHgzNTVmNmEzNVUsIDB4NTdmOWFlNTdVLCAweGI5ZDA2OWI5VSwKKyAgICAweDg2OTExNzg2VSwgMHhjMTU4OTljMVUsIDB4MWQyNzNhMWRVLCAweDllYjkyNzllVSwKKyAgICAweGUxMzhkOWUxVSwgMHhmODEzZWJmOFUsIDB4OThiMzJiOThVLCAweDExMzMyMjExVSwKKyAgICAweDY5YmJkMjY5VSwgMHhkOTcwYTlkOVUsIDB4OGU4OTA3OGVVLCAweDk0YTczMzk0VSwKKyAgICAweDliYjYyZDliVSwgMHgxZTIyM2MxZVUsIDB4ODc5MjE1ODdVLCAweGU5MjBjOWU5VSwKKyAgICAweGNlNDk4N2NlVSwgMHg1NWZmYWE1NVUsIDB4Mjg3ODUwMjhVLCAweGRmN2FhNWRmVSwKKyAgICAweDhjOGYwMzhjVSwgMHhhMWY4NTlhMVUsIDB4ODk4MDA5ODlVLCAweDBkMTcxYTBkVSwKKyAgICAweGJmZGE2NWJmVSwgMHhlNjMxZDdlNlUsIDB4NDJjNjg0NDJVLCAweDY4YjhkMDY4VSwKKyAgICAweDQxYzM4MjQxVSwgMHg5OWIwMjk5OVUsIDB4MmQ3NzVhMmRVLCAweDBmMTExZTBmVSwKKyAgICAweGIwY2I3YmIwVSwgMHg1NGZjYTg1NFUsIDB4YmJkNjZkYmJVLCAweDE2M2EyYzE2VSwKK307CitzdGF0aWMgY29uc3QgdTMyIFRlM1syNTZdID0geworICAgIDB4NjM2M2E1YzZVLCAweDdjN2M4NGY4VSwgMHg3Nzc3OTllZVUsIDB4N2I3YjhkZjZVLAorICAgIDB4ZjJmMjBkZmZVLCAweDZiNmJiZGQ2VSwgMHg2ZjZmYjFkZVUsIDB4YzVjNTU0OTFVLAorICAgIDB4MzAzMDUwNjBVLCAweDAxMDEwMzAyVSwgMHg2NzY3YTljZVUsIDB4MmIyYjdkNTZVLAorICAgIDB4ZmVmZTE5ZTdVLCAweGQ3ZDc2MmI1VSwgMHhhYmFiZTY0ZFUsIDB4NzY3NjlhZWNVLAorICAgIDB4Y2FjYTQ1OGZVLCAweDgyODI5ZDFmVSwgMHhjOWM5NDA4OVUsIDB4N2Q3ZDg3ZmFVLAorICAgIDB4ZmFmYTE1ZWZVLCAweDU5NTllYmIyVSwgMHg0NzQ3Yzk4ZVUsIDB4ZjBmMDBiZmJVLAorICAgIDB4YWRhZGVjNDFVLCAweGQ0ZDQ2N2IzVSwgMHhhMmEyZmQ1ZlUsIDB4YWZhZmVhNDVVLAorICAgIDB4OWM5Y2JmMjNVLCAweGE0YTRmNzUzVSwgMHg3MjcyOTZlNFUsIDB4YzBjMDViOWJVLAorICAgIDB4YjdiN2MyNzVVLCAweGZkZmQxY2UxVSwgMHg5MzkzYWUzZFUsIDB4MjYyNjZhNGNVLAorICAgIDB4MzYzNjVhNmNVLCAweDNmM2Y0MTdlVSwgMHhmN2Y3MDJmNVUsIDB4Y2NjYzRmODNVLAorICAgIDB4MzQzNDVjNjhVLCAweGE1YTVmNDUxVSwgMHhlNWU1MzRkMVUsIDB4ZjFmMTA4ZjlVLAorICAgIDB4NzE3MTkzZTJVLCAweGQ4ZDg3M2FiVSwgMHgzMTMxNTM2MlUsIDB4MTUxNTNmMmFVLAorICAgIDB4MDQwNDBjMDhVLCAweGM3Yzc1Mjk1VSwgMHgyMzIzNjU0NlUsIDB4YzNjMzVlOWRVLAorICAgIDB4MTgxODI4MzBVLCAweDk2OTZhMTM3VSwgMHgwNTA1MGYwYVUsIDB4OWE5YWI1MmZVLAorICAgIDB4MDcwNzA5MGVVLCAweDEyMTIzNjI0VSwgMHg4MDgwOWIxYlUsIDB4ZTJlMjNkZGZVLAorICAgIDB4ZWJlYjI2Y2RVLCAweDI3Mjc2OTRlVSwgMHhiMmIyY2Q3ZlUsIDB4NzU3NTlmZWFVLAorICAgIDB4MDkwOTFiMTJVLCAweDgzODM5ZTFkVSwgMHgyYzJjNzQ1OFUsIDB4MWExYTJlMzRVLAorICAgIDB4MWIxYjJkMzZVLCAweDZlNmViMmRjVSwgMHg1YTVhZWViNFUsIDB4YTBhMGZiNWJVLAorICAgIDB4NTI1MmY2YTRVLCAweDNiM2I0ZDc2VSwgMHhkNmQ2NjFiN1UsIDB4YjNiM2NlN2RVLAorICAgIDB4MjkyOTdiNTJVLCAweGUzZTMzZWRkVSwgMHgyZjJmNzE1ZVUsIDB4ODQ4NDk3MTNVLAorICAgIDB4NTM1M2Y1YTZVLCAweGQxZDE2OGI5VSwgMHgwMDAwMDAwMFUsIDB4ZWRlZDJjYzFVLAorICAgIDB4MjAyMDYwNDBVLCAweGZjZmMxZmUzVSwgMHhiMWIxYzg3OVUsIDB4NWI1YmVkYjZVLAorICAgIDB4NmE2YWJlZDRVLCAweGNiY2I0NjhkVSwgMHhiZWJlZDk2N1UsIDB4MzkzOTRiNzJVLAorICAgIDB4NGE0YWRlOTRVLCAweDRjNGNkNDk4VSwgMHg1ODU4ZThiMFUsIDB4Y2ZjZjRhODVVLAorICAgIDB4ZDBkMDZiYmJVLCAweGVmZWYyYWM1VSwgMHhhYWFhZTU0ZlUsIDB4ZmJmYjE2ZWRVLAorICAgIDB4NDM0M2M1ODZVLCAweDRkNGRkNzlhVSwgMHgzMzMzNTU2NlUsIDB4ODU4NTk0MTFVLAorICAgIDB4NDU0NWNmOGFVLCAweGY5ZjkxMGU5VSwgMHgwMjAyMDYwNFUsIDB4N2Y3ZjgxZmVVLAorICAgIDB4NTA1MGYwYTBVLCAweDNjM2M0NDc4VSwgMHg5ZjlmYmEyNVUsIDB4YThhOGUzNGJVLAorICAgIDB4NTE1MWYzYTJVLCAweGEzYTNmZTVkVSwgMHg0MDQwYzA4MFUsIDB4OGY4ZjhhMDVVLAorICAgIDB4OTI5MmFkM2ZVLCAweDlkOWRiYzIxVSwgMHgzODM4NDg3MFUsIDB4ZjVmNTA0ZjFVLAorICAgIDB4YmNiY2RmNjNVLCAweGI2YjZjMTc3VSwgMHhkYWRhNzVhZlUsIDB4MjEyMTYzNDJVLAorICAgIDB4MTAxMDMwMjBVLCAweGZmZmYxYWU1VSwgMHhmM2YzMGVmZFUsIDB4ZDJkMjZkYmZVLAorICAgIDB4Y2RjZDRjODFVLCAweDBjMGMxNDE4VSwgMHgxMzEzMzUyNlUsIDB4ZWNlYzJmYzNVLAorICAgIDB4NWY1ZmUxYmVVLCAweDk3OTdhMjM1VSwgMHg0NDQ0Y2M4OFUsIDB4MTcxNzM5MmVVLAorICAgIDB4YzRjNDU3OTNVLCAweGE3YTdmMjU1VSwgMHg3ZTdlODJmY1UsIDB4M2QzZDQ3N2FVLAorICAgIDB4NjQ2NGFjYzhVLCAweDVkNWRlN2JhVSwgMHgxOTE5MmIzMlUsIDB4NzM3Mzk1ZTZVLAorICAgIDB4NjA2MGEwYzBVLCAweDgxODE5ODE5VSwgMHg0ZjRmZDE5ZVUsIDB4ZGNkYzdmYTNVLAorICAgIDB4MjIyMjY2NDRVLCAweDJhMmE3ZTU0VSwgMHg5MDkwYWIzYlUsIDB4ODg4ODgzMGJVLAorICAgIDB4NDY0NmNhOGNVLCAweGVlZWUyOWM3VSwgMHhiOGI4ZDM2YlUsIDB4MTQxNDNjMjhVLAorICAgIDB4ZGVkZTc5YTdVLCAweDVlNWVlMmJjVSwgMHgwYjBiMWQxNlUsIDB4ZGJkYjc2YWRVLAorICAgIDB4ZTBlMDNiZGJVLCAweDMyMzI1NjY0VSwgMHgzYTNhNGU3NFUsIDB4MGEwYTFlMTRVLAorICAgIDB4NDk0OWRiOTJVLCAweDA2MDYwYTBjVSwgMHgyNDI0NmM0OFUsIDB4NWM1Y2U0YjhVLAorICAgIDB4YzJjMjVkOWZVLCAweGQzZDM2ZWJkVSwgMHhhY2FjZWY0M1UsIDB4NjI2MmE2YzRVLAorICAgIDB4OTE5MWE4MzlVLCAweDk1OTVhNDMxVSwgMHhlNGU0MzdkM1UsIDB4Nzk3OThiZjJVLAorICAgIDB4ZTdlNzMyZDVVLCAweGM4Yzg0MzhiVSwgMHgzNzM3NTk2ZVUsIDB4NmQ2ZGI3ZGFVLAorICAgIDB4OGQ4ZDhjMDFVLCAweGQ1ZDU2NGIxVSwgMHg0ZTRlZDI5Y1UsIDB4YTlhOWUwNDlVLAorICAgIDB4NmM2Y2I0ZDhVLCAweDU2NTZmYWFjVSwgMHhmNGY0MDdmM1UsIDB4ZWFlYTI1Y2ZVLAorICAgIDB4NjU2NWFmY2FVLCAweDdhN2E4ZWY0VSwgMHhhZWFlZTk0N1UsIDB4MDgwODE4MTBVLAorICAgIDB4YmFiYWQ1NmZVLCAweDc4Nzg4OGYwVSwgMHgyNTI1NmY0YVUsIDB4MmUyZTcyNWNVLAorICAgIDB4MWMxYzI0MzhVLCAweGE2YTZmMTU3VSwgMHhiNGI0Yzc3M1UsIDB4YzZjNjUxOTdVLAorICAgIDB4ZThlODIzY2JVLCAweGRkZGQ3Y2ExVSwgMHg3NDc0OWNlOFUsIDB4MWYxZjIxM2VVLAorICAgIDB4NGI0YmRkOTZVLCAweGJkYmRkYzYxVSwgMHg4YjhiODYwZFUsIDB4OGE4YTg1MGZVLAorICAgIDB4NzA3MDkwZTBVLCAweDNlM2U0MjdjVSwgMHhiNWI1YzQ3MVUsIDB4NjY2NmFhY2NVLAorICAgIDB4NDg0OGQ4OTBVLCAweDAzMDMwNTA2VSwgMHhmNmY2MDFmN1UsIDB4MGUwZTEyMWNVLAorICAgIDB4NjE2MWEzYzJVLCAweDM1MzU1ZjZhVSwgMHg1NzU3ZjlhZVUsIDB4YjliOWQwNjlVLAorICAgIDB4ODY4NjkxMTdVLCAweGMxYzE1ODk5VSwgMHgxZDFkMjczYVUsIDB4OWU5ZWI5MjdVLAorICAgIDB4ZTFlMTM4ZDlVLCAweGY4ZjgxM2ViVSwgMHg5ODk4YjMyYlUsIDB4MTExMTMzMjJVLAorICAgIDB4Njk2OWJiZDJVLCAweGQ5ZDk3MGE5VSwgMHg4ZThlODkwN1UsIDB4OTQ5NGE3MzNVLAorICAgIDB4OWI5YmI2MmRVLCAweDFlMWUyMjNjVSwgMHg4Nzg3OTIxNVUsIDB4ZTllOTIwYzlVLAorICAgIDB4Y2VjZTQ5ODdVLCAweDU1NTVmZmFhVSwgMHgyODI4Nzg1MFUsIDB4ZGZkZjdhYTVVLAorICAgIDB4OGM4YzhmMDNVLCAweGExYTFmODU5VSwgMHg4OTg5ODAwOVUsIDB4MGQwZDE3MWFVLAorICAgIDB4YmZiZmRhNjVVLCAweGU2ZTYzMWQ3VSwgMHg0MjQyYzY4NFUsIDB4Njg2OGI4ZDBVLAorICAgIDB4NDE0MWMzODJVLCAweDk5OTliMDI5VSwgMHgyZDJkNzc1YVUsIDB4MGYwZjExMWVVLAorICAgIDB4YjBiMGNiN2JVLCAweDU0NTRmY2E4VSwgMHhiYmJiZDY2ZFUsIDB4MTYxNjNhMmNVLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBUZDBbMjU2XSA9IHsKKyAgICAweDUxZjRhNzUwVSwgMHg3ZTQxNjU1M1UsIDB4MWExN2E0YzNVLCAweDNhMjc1ZTk2VSwKKyAgICAweDNiYWI2YmNiVSwgMHgxZjlkNDVmMVUsIDB4YWNmYTU4YWJVLCAweDRiZTMwMzkzVSwKKyAgICAweDIwMzBmYTU1VSwgMHhhZDc2NmRmNlUsIDB4ODhjYzc2OTFVLCAweGY1MDI0YzI1VSwKKyAgICAweDRmZTVkN2ZjVSwgMHhjNTJhY2JkN1UsIDB4MjYzNTQ0ODBVLCAweGI1NjJhMzhmVSwKKyAgICAweGRlYjE1YTQ5VSwgMHgyNWJhMWI2N1UsIDB4NDVlYTBlOThVLCAweDVkZmVjMGUxVSwKKyAgICAweGMzMmY3NTAyVSwgMHg4MTRjZjAxMlUsIDB4OGQ0Njk3YTNVLCAweDZiZDNmOWM2VSwKKyAgICAweDAzOGY1ZmU3VSwgMHgxNTkyOWM5NVUsIDB4YmY2ZDdhZWJVLCAweDk1NTI1OWRhVSwKKyAgICAweGQ0YmU4MzJkVSwgMHg1ODc0MjFkM1UsIDB4NDllMDY5MjlVLCAweDhlYzljODQ0VSwKKyAgICAweDc1YzI4OTZhVSwgMHhmNDhlNzk3OFUsIDB4OTk1ODNlNmJVLCAweDI3Yjk3MWRkVSwKKyAgICAweGJlZTE0ZmI2VSwgMHhmMDg4YWQxN1UsIDB4YzkyMGFjNjZVLCAweDdkY2UzYWI0VSwKKyAgICAweDYzZGY0YTE4VSwgMHhlNTFhMzE4MlUsIDB4OTc1MTMzNjBVLCAweDYyNTM3ZjQ1VSwKKyAgICAweGIxNjQ3N2UwVSwgMHhiYjZiYWU4NFUsIDB4ZmU4MWEwMWNVLCAweGY5MDgyYjk0VSwKKyAgICAweDcwNDg2ODU4VSwgMHg4ZjQ1ZmQxOVUsIDB4OTRkZTZjODdVLCAweDUyN2JmOGI3VSwKKyAgICAweGFiNzNkMzIzVSwgMHg3MjRiMDJlMlUsIDB4ZTMxZjhmNTdVLCAweDY2NTVhYjJhVSwKKyAgICAweGIyZWIyODA3VSwgMHgyZmI1YzIwM1UsIDB4ODZjNTdiOWFVLCAweGQzMzcwOGE1VSwKKyAgICAweDMwMjg4N2YyVSwgMHgyM2JmYTViMlUsIDB4MDIwMzZhYmFVLCAweGVkMTY4MjVjVSwKKyAgICAweDhhY2YxYzJiVSwgMHhhNzc5YjQ5MlUsIDB4ZjMwN2YyZjBVLCAweDRlNjllMmExVSwKKyAgICAweDY1ZGFmNGNkVSwgMHgwNjA1YmVkNVUsIDB4ZDEzNDYyMWZVLCAweGM0YTZmZThhVSwKKyAgICAweDM0MmU1MzlkVSwgMHhhMmYzNTVhMFUsIDB4MDU4YWUxMzJVLCAweGE0ZjZlYjc1VSwKKyAgICAweDBiODNlYzM5VSwgMHg0MDYwZWZhYVUsIDB4NWU3MTlmMDZVLCAweGJkNmUxMDUxVSwKKyAgICAweDNlMjE4YWY5VSwgMHg5NmRkMDYzZFUsIDB4ZGQzZTA1YWVVLCAweDRkZTZiZDQ2VSwKKyAgICAweDkxNTQ4ZGI1VSwgMHg3MWM0NWQwNVUsIDB4MDQwNmQ0NmZVLCAweDYwNTAxNWZmVSwKKyAgICAweDE5OThmYjI0VSwgMHhkNmJkZTk5N1UsIDB4ODk0MDQzY2NVLCAweDY3ZDk5ZTc3VSwKKyAgICAweGIwZTg0MmJkVSwgMHgwNzg5OGI4OFUsIDB4ZTcxOTViMzhVLCAweDc5YzhlZWRiVSwKKyAgICAweGExN2MwYTQ3VSwgMHg3YzQyMGZlOVUsIDB4Zjg4NDFlYzlVLCAweDAwMDAwMDAwVSwKKyAgICAweDA5ODA4NjgzVSwgMHgzMjJiZWQ0OFUsIDB4MWUxMTcwYWNVLCAweDZjNWE3MjRlVSwKKyAgICAweGZkMGVmZmZiVSwgMHgwZjg1Mzg1NlUsIDB4M2RhZWQ1MWVVLCAweDM2MmQzOTI3VSwKKyAgICAweDBhMGZkOTY0VSwgMHg2ODVjYTYyMVUsIDB4OWI1YjU0ZDFVLCAweDI0MzYyZTNhVSwKKyAgICAweDBjMGE2N2IxVSwgMHg5MzU3ZTcwZlUsIDB4YjRlZTk2ZDJVLCAweDFiOWI5MTllVSwKKyAgICAweDgwYzBjNTRmVSwgMHg2MWRjMjBhMlUsIDB4NWE3NzRiNjlVLCAweDFjMTIxYTE2VSwKKyAgICAweGUyOTNiYTBhVSwgMHhjMGEwMmFlNVUsIDB4M2MyMmUwNDNVLCAweDEyMWIxNzFkVSwKKyAgICAweDBlMDkwZDBiVSwgMHhmMjhiYzdhZFUsIDB4MmRiNmE4YjlVLCAweDE0MWVhOWM4VSwKKyAgICAweDU3ZjExOTg1VSwgMHhhZjc1MDc0Y1UsIDB4ZWU5OWRkYmJVLCAweGEzN2Y2MGZkVSwKKyAgICAweGY3MDEyNjlmVSwgMHg1YzcyZjViY1UsIDB4NDQ2NjNiYzVVLCAweDViZmI3ZTM0VSwKKyAgICAweDhiNDMyOTc2VSwgMHhjYjIzYzZkY1UsIDB4YjZlZGZjNjhVLCAweGI4ZTRmMTYzVSwKKyAgICAweGQ3MzFkY2NhVSwgMHg0MjYzODUxMFUsIDB4MTM5NzIyNDBVLCAweDg0YzYxMTIwVSwKKyAgICAweDg1NGEyNDdkVSwgMHhkMmJiM2RmOFUsIDB4YWVmOTMyMTFVLCAweGM3MjlhMTZkVSwKKyAgICAweDFkOWUyZjRiVSwgMHhkY2IyMzBmM1UsIDB4MGQ4NjUyZWNVLCAweDc3YzFlM2QwVSwKKyAgICAweDJiYjMxNjZjVSwgMHhhOTcwYjk5OVUsIDB4MTE5NDQ4ZmFVLCAweDQ3ZTk2NDIyVSwKKyAgICAweGE4ZmM4Y2M0VSwgMHhhMGYwM2YxYVUsIDB4NTY3ZDJjZDhVLCAweDIyMzM5MGVmVSwKKyAgICAweDg3NDk0ZWM3VSwgMHhkOTM4ZDFjMVUsIDB4OGNjYWEyZmVVLCAweDk4ZDQwYjM2VSwKKyAgICAweGE2ZjU4MWNmVSwgMHhhNTdhZGUyOFUsIDB4ZGFiNzhlMjZVLCAweDNmYWRiZmE0VSwKKyAgICAweDJjM2E5ZGU0VSwgMHg1MDc4OTIwZFUsIDB4NmE1ZmNjOWJVLCAweDU0N2U0NjYyVSwKKyAgICAweGY2OGQxM2MyVSwgMHg5MGQ4YjhlOFUsIDB4MmUzOWY3NWVVLCAweDgyYzNhZmY1VSwKKyAgICAweDlmNWQ4MGJlVSwgMHg2OWQwOTM3Y1UsIDB4NmZkNTJkYTlVLCAweGNmMjUxMmIzVSwKKyAgICAweGM4YWM5OTNiVSwgMHgxMDE4N2RhN1UsIDB4ZTg5YzYzNmVVLCAweGRiM2JiYjdiVSwKKyAgICAweGNkMjY3ODA5VSwgMHg2ZTU5MThmNFUsIDB4ZWM5YWI3MDFVLCAweDgzNGY5YWE4VSwKKyAgICAweGU2OTU2ZTY1VSwgMHhhYWZmZTY3ZVUsIDB4MjFiY2NmMDhVLCAweGVmMTVlOGU2VSwKKyAgICAweGJhZTc5YmQ5VSwgMHg0YTZmMzZjZVUsIDB4ZWE5ZjA5ZDRVLCAweDI5YjA3Y2Q2VSwKKyAgICAweDMxYTRiMmFmVSwgMHgyYTNmMjMzMVUsIDB4YzZhNTk0MzBVLCAweDM1YTI2NmMwVSwKKyAgICAweDc0NGViYzM3VSwgMHhmYzgyY2FhNlUsIDB4ZTA5MGQwYjBVLCAweDMzYTdkODE1VSwKKyAgICAweGYxMDQ5ODRhVSwgMHg0MWVjZGFmN1UsIDB4N2ZjZDUwMGVVLCAweDE3OTFmNjJmVSwKKyAgICAweDc2NGRkNjhkVSwgMHg0M2VmYjA0ZFUsIDB4Y2NhYTRkNTRVLCAweGU0OTYwNGRmVSwKKyAgICAweDllZDFiNWUzVSwgMHg0YzZhODgxYlUsIDB4YzEyYzFmYjhVLCAweDQ2NjU1MTdmVSwKKyAgICAweDlkNWVlYTA0VSwgMHgwMThjMzU1ZFUsIDB4ZmE4Nzc0NzNVLCAweGZiMGI0MTJlVSwKKyAgICAweGIzNjcxZDVhVSwgMHg5MmRiZDI1MlUsIDB4ZTkxMDU2MzNVLCAweDZkZDY0NzEzVSwKKyAgICAweDlhZDc2MThjVSwgMHgzN2ExMGM3YVUsIDB4NTlmODE0OGVVLCAweGViMTMzYzg5VSwKKyAgICAweGNlYTkyN2VlVSwgMHhiNzYxYzkzNVUsIDB4ZTExY2U1ZWRVLCAweDdhNDdiMTNjVSwKKyAgICAweDljZDJkZjU5VSwgMHg1NWYyNzMzZlUsIDB4MTgxNGNlNzlVLCAweDczYzczN2JmVSwKKyAgICAweDUzZjdjZGVhVSwgMHg1ZmZkYWE1YlUsIDB4ZGYzZDZmMTRVLCAweDc4NDRkYjg2VSwKKyAgICAweGNhYWZmMzgxVSwgMHhiOTY4YzQzZVUsIDB4MzgyNDM0MmNVLCAweGMyYTM0MDVmVSwKKyAgICAweDE2MWRjMzcyVSwgMHhiY2UyMjUwY1UsIDB4MjgzYzQ5OGJVLCAweGZmMGQ5NTQxVSwKKyAgICAweDM5YTgwMTcxVSwgMHgwODBjYjNkZVUsIDB4ZDhiNGU0OWNVLCAweDY0NTZjMTkwVSwKKyAgICAweDdiY2I4NDYxVSwgMHhkNTMyYjY3MFUsIDB4NDg2YzVjNzRVLCAweGQwYjg1NzQyVSwKK307CitzdGF0aWMgY29uc3QgdTMyIFRkMVsyNTZdID0geworICAgIDB4NTA1MWY0YTdVLCAweDUzN2U0MTY1VSwgMHhjMzFhMTdhNFUsIDB4OTYzYTI3NWVVLAorICAgIDB4Y2IzYmFiNmJVLCAweGYxMWY5ZDQ1VSwgMHhhYmFjZmE1OFUsIDB4OTM0YmUzMDNVLAorICAgIDB4NTUyMDMwZmFVLCAweGY2YWQ3NjZkVSwgMHg5MTg4Y2M3NlUsIDB4MjVmNTAyNGNVLAorICAgIDB4ZmM0ZmU1ZDdVLCAweGQ3YzUyYWNiVSwgMHg4MDI2MzU0NFUsIDB4OGZiNTYyYTNVLAorICAgIDB4NDlkZWIxNWFVLCAweDY3MjViYTFiVSwgMHg5ODQ1ZWEwZVUsIDB4ZTE1ZGZlYzBVLAorICAgIDB4MDJjMzJmNzVVLCAweDEyODE0Y2YwVSwgMHhhMzhkNDY5N1UsIDB4YzY2YmQzZjlVLAorICAgIDB4ZTcwMzhmNWZVLCAweDk1MTU5MjljVSwgMHhlYmJmNmQ3YVUsIDB4ZGE5NTUyNTlVLAorICAgIDB4MmRkNGJlODNVLCAweGQzNTg3NDIxVSwgMHgyOTQ5ZTA2OVUsIDB4NDQ4ZWM5YzhVLAorICAgIDB4NmE3NWMyODlVLCAweDc4ZjQ4ZTc5VSwgMHg2Yjk5NTgzZVUsIDB4ZGQyN2I5NzFVLAorICAgIDB4YjZiZWUxNGZVLCAweDE3ZjA4OGFkVSwgMHg2NmM5MjBhY1UsIDB4YjQ3ZGNlM2FVLAorICAgIDB4MTg2M2RmNGFVLCAweDgyZTUxYTMxVSwgMHg2MDk3NTEzM1UsIDB4NDU2MjUzN2ZVLAorICAgIDB4ZTBiMTY0NzdVLCAweDg0YmI2YmFlVSwgMHgxY2ZlODFhMFUsIDB4OTRmOTA4MmJVLAorICAgIDB4NTg3MDQ4NjhVLCAweDE5OGY0NWZkVSwgMHg4Nzk0ZGU2Y1UsIDB4Yjc1MjdiZjhVLAorICAgIDB4MjNhYjczZDNVLCAweGUyNzI0YjAyVSwgMHg1N2UzMWY4ZlUsIDB4MmE2NjU1YWJVLAorICAgIDB4MDdiMmViMjhVLCAweDAzMmZiNWMyVSwgMHg5YTg2YzU3YlUsIDB4YTVkMzM3MDhVLAorICAgIDB4ZjIzMDI4ODdVLCAweGIyMjNiZmE1VSwgMHhiYTAyMDM2YVUsIDB4NWNlZDE2ODJVLAorICAgIDB4MmI4YWNmMWNVLCAweDkyYTc3OWI0VSwgMHhmMGYzMDdmMlUsIDB4YTE0ZTY5ZTJVLAorICAgIDB4Y2Q2NWRhZjRVLCAweGQ1MDYwNWJlVSwgMHgxZmQxMzQ2MlUsIDB4OGFjNGE2ZmVVLAorICAgIDB4OWQzNDJlNTNVLCAweGEwYTJmMzU1VSwgMHgzMjA1OGFlMVUsIDB4NzVhNGY2ZWJVLAorICAgIDB4MzkwYjgzZWNVLCAweGFhNDA2MGVmVSwgMHgwNjVlNzE5ZlUsIDB4NTFiZDZlMTBVLAorICAgIDB4ZjkzZTIxOGFVLCAweDNkOTZkZDA2VSwgMHhhZWRkM2UwNVUsIDB4NDY0ZGU2YmRVLAorICAgIDB4YjU5MTU0OGRVLCAweDA1NzFjNDVkVSwgMHg2ZjA0MDZkNFUsIDB4ZmY2MDUwMTVVLAorICAgIDB4MjQxOTk4ZmJVLCAweDk3ZDZiZGU5VSwgMHhjYzg5NDA0M1UsIDB4Nzc2N2Q5OWVVLAorICAgIDB4YmRiMGU4NDJVLCAweDg4MDc4OThiVSwgMHgzOGU3MTk1YlUsIDB4ZGI3OWM4ZWVVLAorICAgIDB4NDdhMTdjMGFVLCAweGU5N2M0MjBmVSwgMHhjOWY4ODQxZVUsIDB4MDAwMDAwMDBVLAorICAgIDB4ODMwOTgwODZVLCAweDQ4MzIyYmVkVSwgMHhhYzFlMTE3MFUsIDB4NGU2YzVhNzJVLAorICAgIDB4ZmJmZDBlZmZVLCAweDU2MGY4NTM4VSwgMHgxZTNkYWVkNVUsIDB4MjczNjJkMzlVLAorICAgIDB4NjQwYTBmZDlVLCAweDIxNjg1Y2E2VSwgMHhkMTliNWI1NFUsIDB4M2EyNDM2MmVVLAorICAgIDB4YjEwYzBhNjdVLCAweDBmOTM1N2U3VSwgMHhkMmI0ZWU5NlUsIDB4OWUxYjliOTFVLAorICAgIDB4NGY4MGMwYzVVLCAweGEyNjFkYzIwVSwgMHg2OTVhNzc0YlUsIDB4MTYxYzEyMWFVLAorICAgIDB4MGFlMjkzYmFVLCAweGU1YzBhMDJhVSwgMHg0MzNjMjJlMFUsIDB4MWQxMjFiMTdVLAorICAgIDB4MGIwZTA5MGRVLCAweGFkZjI4YmM3VSwgMHhiOTJkYjZhOFUsIDB4YzgxNDFlYTlVLAorICAgIDB4ODU1N2YxMTlVLCAweDRjYWY3NTA3VSwgMHhiYmVlOTlkZFUsIDB4ZmRhMzdmNjBVLAorICAgIDB4OWZmNzAxMjZVLCAweGJjNWM3MmY1VSwgMHhjNTQ0NjYzYlUsIDB4MzQ1YmZiN2VVLAorICAgIDB4NzY4YjQzMjlVLCAweGRjY2IyM2M2VSwgMHg2OGI2ZWRmY1UsIDB4NjNiOGU0ZjFVLAorICAgIDB4Y2FkNzMxZGNVLCAweDEwNDI2Mzg1VSwgMHg0MDEzOTcyMlUsIDB4MjA4NGM2MTFVLAorICAgIDB4N2Q4NTRhMjRVLCAweGY4ZDJiYjNkVSwgMHgxMWFlZjkzMlUsIDB4NmRjNzI5YTFVLAorICAgIDB4NGIxZDllMmZVLCAweGYzZGNiMjMwVSwgMHhlYzBkODY1MlUsIDB4ZDA3N2MxZTNVLAorICAgIDB4NmMyYmIzMTZVLCAweDk5YTk3MGI5VSwgMHhmYTExOTQ0OFUsIDB4MjI0N2U5NjRVLAorICAgIDB4YzRhOGZjOGNVLCAweDFhYTBmMDNmVSwgMHhkODU2N2QyY1UsIDB4ZWYyMjMzOTBVLAorICAgIDB4Yzc4NzQ5NGVVLCAweGMxZDkzOGQxVSwgMHhmZThjY2FhMlUsIDB4MzY5OGQ0MGJVLAorICAgIDB4Y2ZhNmY1ODFVLCAweDI4YTU3YWRlVSwgMHgyNmRhYjc4ZVUsIDB4YTQzZmFkYmZVLAorICAgIDB4ZTQyYzNhOWRVLCAweDBkNTA3ODkyVSwgMHg5YjZhNWZjY1UsIDB4NjI1NDdlNDZVLAorICAgIDB4YzJmNjhkMTNVLCAweGU4OTBkOGI4VSwgMHg1ZTJlMzlmN1UsIDB4ZjU4MmMzYWZVLAorICAgIDB4YmU5ZjVkODBVLCAweDdjNjlkMDkzVSwgMHhhOTZmZDUyZFUsIDB4YjNjZjI1MTJVLAorICAgIDB4M2JjOGFjOTlVLCAweGE3MTAxODdkVSwgMHg2ZWU4OWM2M1UsIDB4N2JkYjNiYmJVLAorICAgIDB4MDljZDI2NzhVLCAweGY0NmU1OTE4VSwgMHgwMWVjOWFiN1UsIDB4YTg4MzRmOWFVLAorICAgIDB4NjVlNjk1NmVVLCAweDdlYWFmZmU2VSwgMHgwODIxYmNjZlUsIDB4ZTZlZjE1ZThVLAorICAgIDB4ZDliYWU3OWJVLCAweGNlNGE2ZjM2VSwgMHhkNGVhOWYwOVUsIDB4ZDYyOWIwN2NVLAorICAgIDB4YWYzMWE0YjJVLCAweDMxMmEzZjIzVSwgMHgzMGM2YTU5NFUsIDB4YzAzNWEyNjZVLAorICAgIDB4Mzc3NDRlYmNVLCAweGE2ZmM4MmNhVSwgMHhiMGUwOTBkMFUsIDB4MTUzM2E3ZDhVLAorICAgIDB4NGFmMTA0OThVLCAweGY3NDFlY2RhVSwgMHgwZTdmY2Q1MFUsIDB4MmYxNzkxZjZVLAorICAgIDB4OGQ3NjRkZDZVLCAweDRkNDNlZmIwVSwgMHg1NGNjYWE0ZFUsIDB4ZGZlNDk2MDRVLAorICAgIDB4ZTM5ZWQxYjVVLCAweDFiNGM2YTg4VSwgMHhiOGMxMmMxZlUsIDB4N2Y0NjY1NTFVLAorICAgIDB4MDQ5ZDVlZWFVLCAweDVkMDE4YzM1VSwgMHg3M2ZhODc3NFUsIDB4MmVmYjBiNDFVLAorICAgIDB4NWFiMzY3MWRVLCAweDUyOTJkYmQyVSwgMHgzM2U5MTA1NlUsIDB4MTM2ZGQ2NDdVLAorICAgIDB4OGM5YWQ3NjFVLCAweDdhMzdhMTBjVSwgMHg4ZTU5ZjgxNFUsIDB4ODllYjEzM2NVLAorICAgIDB4ZWVjZWE5MjdVLCAweDM1Yjc2MWM5VSwgMHhlZGUxMWNlNVUsIDB4M2M3YTQ3YjFVLAorICAgIDB4NTk5Y2QyZGZVLCAweDNmNTVmMjczVSwgMHg3OTE4MTRjZVUsIDB4YmY3M2M3MzdVLAorICAgIDB4ZWE1M2Y3Y2RVLCAweDViNWZmZGFhVSwgMHgxNGRmM2Q2ZlUsIDB4ODY3ODQ0ZGJVLAorICAgIDB4ODFjYWFmZjNVLCAweDNlYjk2OGM0VSwgMHgyYzM4MjQzNFUsIDB4NWZjMmEzNDBVLAorICAgIDB4NzIxNjFkYzNVLCAweDBjYmNlMjI1VSwgMHg4YjI4M2M0OVUsIDB4NDFmZjBkOTVVLAorICAgIDB4NzEzOWE4MDFVLCAweGRlMDgwY2IzVSwgMHg5Y2Q4YjRlNFUsIDB4OTA2NDU2YzFVLAorICAgIDB4NjE3YmNiODRVLCAweDcwZDUzMmI2VSwgMHg3NDQ4NmM1Y1UsIDB4NDJkMGI4NTdVLAorfTsKK3N0YXRpYyBjb25zdCB1MzIgVGQyWzI1Nl0gPSB7CisgICAgMHhhNzUwNTFmNFUsIDB4NjU1MzdlNDFVLCAweGE0YzMxYTE3VSwgMHg1ZTk2M2EyN1UsCisgICAgMHg2YmNiM2JhYlUsIDB4NDVmMTFmOWRVLCAweDU4YWJhY2ZhVSwgMHgwMzkzNGJlM1UsCisgICAgMHhmYTU1MjAzMFUsIDB4NmRmNmFkNzZVLCAweDc2OTE4OGNjVSwgMHg0YzI1ZjUwMlUsCisgICAgMHhkN2ZjNGZlNVUsIDB4Y2JkN2M1MmFVLCAweDQ0ODAyNjM1VSwgMHhhMzhmYjU2MlUsCisgICAgMHg1YTQ5ZGViMVUsIDB4MWI2NzI1YmFVLCAweDBlOTg0NWVhVSwgMHhjMGUxNWRmZVUsCisgICAgMHg3NTAyYzMyZlUsIDB4ZjAxMjgxNGNVLCAweDk3YTM4ZDQ2VSwgMHhmOWM2NmJkM1UsCisgICAgMHg1ZmU3MDM4ZlUsIDB4OWM5NTE1OTJVLCAweDdhZWJiZjZkVSwgMHg1OWRhOTU1MlUsCisgICAgMHg4MzJkZDRiZVUsIDB4MjFkMzU4NzRVLCAweDY5Mjk0OWUwVSwgMHhjODQ0OGVjOVUsCisgICAgMHg4OTZhNzVjMlUsIDB4Nzk3OGY0OGVVLCAweDNlNmI5OTU4VSwgMHg3MWRkMjdiOVUsCisgICAgMHg0ZmI2YmVlMVUsIDB4YWQxN2YwODhVLCAweGFjNjZjOTIwVSwgMHgzYWI0N2RjZVUsCisgICAgMHg0YTE4NjNkZlUsIDB4MzE4MmU1MWFVLCAweDMzNjA5NzUxVSwgMHg3ZjQ1NjI1M1UsCisgICAgMHg3N2UwYjE2NFUsIDB4YWU4NGJiNmJVLCAweGEwMWNmZTgxVSwgMHgyYjk0ZjkwOFUsCisgICAgMHg2ODU4NzA0OFUsIDB4ZmQxOThmNDVVLCAweDZjODc5NGRlVSwgMHhmOGI3NTI3YlUsCisgICAgMHhkMzIzYWI3M1UsIDB4MDJlMjcyNGJVLCAweDhmNTdlMzFmVSwgMHhhYjJhNjY1NVUsCisgICAgMHgyODA3YjJlYlUsIDB4YzIwMzJmYjVVLCAweDdiOWE4NmM1VSwgMHgwOGE1ZDMzN1UsCisgICAgMHg4N2YyMzAyOFUsIDB4YTViMjIzYmZVLCAweDZhYmEwMjAzVSwgMHg4MjVjZWQxNlUsCisgICAgMHgxYzJiOGFjZlUsIDB4YjQ5MmE3NzlVLCAweGYyZjBmMzA3VSwgMHhlMmExNGU2OVUsCisgICAgMHhmNGNkNjVkYVUsIDB4YmVkNTA2MDVVLCAweDYyMWZkMTM0VSwgMHhmZThhYzRhNlUsCisgICAgMHg1MzlkMzQyZVUsIDB4NTVhMGEyZjNVLCAweGUxMzIwNThhVSwgMHhlYjc1YTRmNlUsCisgICAgMHhlYzM5MGI4M1UsIDB4ZWZhYTQwNjBVLCAweDlmMDY1ZTcxVSwgMHgxMDUxYmQ2ZVUsCisgICAgMHg4YWY5M2UyMVUsIDB4MDYzZDk2ZGRVLCAweDA1YWVkZDNlVSwgMHhiZDQ2NGRlNlUsCisgICAgMHg4ZGI1OTE1NFUsIDB4NWQwNTcxYzRVLCAweGQ0NmYwNDA2VSwgMHgxNWZmNjA1MFUsCisgICAgMHhmYjI0MTk5OFUsIDB4ZTk5N2Q2YmRVLCAweDQzY2M4OTQwVSwgMHg5ZTc3NjdkOVUsCisgICAgMHg0MmJkYjBlOFUsIDB4OGI4ODA3ODlVLCAweDViMzhlNzE5VSwgMHhlZWRiNzljOFUsCisgICAgMHgwYTQ3YTE3Y1UsIDB4MGZlOTdjNDJVLCAweDFlYzlmODg0VSwgMHgwMDAwMDAwMFUsCisgICAgMHg4NjgzMDk4MFUsIDB4ZWQ0ODMyMmJVLCAweDcwYWMxZTExVSwgMHg3MjRlNmM1YVUsCisgICAgMHhmZmZiZmQwZVUsIDB4Mzg1NjBmODVVLCAweGQ1MWUzZGFlVSwgMHgzOTI3MzYyZFUsCisgICAgMHhkOTY0MGEwZlUsIDB4YTYyMTY4NWNVLCAweDU0ZDE5YjViVSwgMHgyZTNhMjQzNlUsCisgICAgMHg2N2IxMGMwYVUsIDB4ZTcwZjkzNTdVLCAweDk2ZDJiNGVlVSwgMHg5MTllMWI5YlUsCisgICAgMHhjNTRmODBjMFUsIDB4MjBhMjYxZGNVLCAweDRiNjk1YTc3VSwgMHgxYTE2MWMxMlUsCisgICAgMHhiYTBhZTI5M1UsIDB4MmFlNWMwYTBVLCAweGUwNDMzYzIyVSwgMHgxNzFkMTIxYlUsCisgICAgMHgwZDBiMGUwOVUsIDB4YzdhZGYyOGJVLCAweGE4YjkyZGI2VSwgMHhhOWM4MTQxZVUsCisgICAgMHgxOTg1NTdmMVUsIDB4MDc0Y2FmNzVVLCAweGRkYmJlZTk5VSwgMHg2MGZkYTM3ZlUsCisgICAgMHgyNjlmZjcwMVUsIDB4ZjViYzVjNzJVLCAweDNiYzU0NDY2VSwgMHg3ZTM0NWJmYlUsCisgICAgMHgyOTc2OGI0M1UsIDB4YzZkY2NiMjNVLCAweGZjNjhiNmVkVSwgMHhmMTYzYjhlNFUsCisgICAgMHhkY2NhZDczMVUsIDB4ODUxMDQyNjNVLCAweDIyNDAxMzk3VSwgMHgxMTIwODRjNlUsCisgICAgMHgyNDdkODU0YVUsIDB4M2RmOGQyYmJVLCAweDMyMTFhZWY5VSwgMHhhMTZkYzcyOVUsCisgICAgMHgyZjRiMWQ5ZVUsIDB4MzBmM2RjYjJVLCAweDUyZWMwZDg2VSwgMHhlM2QwNzdjMVUsCisgICAgMHgxNjZjMmJiM1UsIDB4Yjk5OWE5NzBVLCAweDQ4ZmExMTk0VSwgMHg2NDIyNDdlOVUsCisgICAgMHg4Y2M0YThmY1UsIDB4M2YxYWEwZjBVLCAweDJjZDg1NjdkVSwgMHg5MGVmMjIzM1UsCisgICAgMHg0ZWM3ODc0OVUsIDB4ZDFjMWQ5MzhVLCAweGEyZmU4Y2NhVSwgMHgwYjM2OThkNFUsCisgICAgMHg4MWNmYTZmNVUsIDB4ZGUyOGE1N2FVLCAweDhlMjZkYWI3VSwgMHhiZmE0M2ZhZFUsCisgICAgMHg5ZGU0MmMzYVUsIDB4OTIwZDUwNzhVLCAweGNjOWI2YTVmVSwgMHg0NjYyNTQ3ZVUsCisgICAgMHgxM2MyZjY4ZFUsIDB4YjhlODkwZDhVLCAweGY3NWUyZTM5VSwgMHhhZmY1ODJjM1UsCisgICAgMHg4MGJlOWY1ZFUsIDB4OTM3YzY5ZDBVLCAweDJkYTk2ZmQ1VSwgMHgxMmIzY2YyNVUsCisgICAgMHg5OTNiYzhhY1UsIDB4N2RhNzEwMThVLCAweDYzNmVlODljVSwgMHhiYjdiZGIzYlUsCisgICAgMHg3ODA5Y2QyNlUsIDB4MThmNDZlNTlVLCAweGI3MDFlYzlhVSwgMHg5YWE4ODM0ZlUsCisgICAgMHg2ZTY1ZTY5NVUsIDB4ZTY3ZWFhZmZVLCAweGNmMDgyMWJjVSwgMHhlOGU2ZWYxNVUsCisgICAgMHg5YmQ5YmFlN1UsIDB4MzZjZTRhNmZVLCAweDA5ZDRlYTlmVSwgMHg3Y2Q2MjliMFUsCisgICAgMHhiMmFmMzFhNFUsIDB4MjMzMTJhM2ZVLCAweDk0MzBjNmE1VSwgMHg2NmMwMzVhMlUsCisgICAgMHhiYzM3NzQ0ZVUsIDB4Y2FhNmZjODJVLCAweGQwYjBlMDkwVSwgMHhkODE1MzNhN1UsCisgICAgMHg5ODRhZjEwNFUsIDB4ZGFmNzQxZWNVLCAweDUwMGU3ZmNkVSwgMHhmNjJmMTc5MVUsCisgICAgMHhkNjhkNzY0ZFUsIDB4YjA0ZDQzZWZVLCAweDRkNTRjY2FhVSwgMHgwNGRmZTQ5NlUsCisgICAgMHhiNWUzOWVkMVUsIDB4ODgxYjRjNmFVLCAweDFmYjhjMTJjVSwgMHg1MTdmNDY2NVUsCisgICAgMHhlYTA0OWQ1ZVUsIDB4MzU1ZDAxOGNVLCAweDc0NzNmYTg3VSwgMHg0MTJlZmIwYlUsCisgICAgMHgxZDVhYjM2N1UsIDB4ZDI1MjkyZGJVLCAweDU2MzNlOTEwVSwgMHg0NzEzNmRkNlUsCisgICAgMHg2MThjOWFkN1UsIDB4MGM3YTM3YTFVLCAweDE0OGU1OWY4VSwgMHgzYzg5ZWIxM1UsCisgICAgMHgyN2VlY2VhOVUsIDB4YzkzNWI3NjFVLCAweGU1ZWRlMTFjVSwgMHhiMTNjN2E0N1UsCisgICAgMHhkZjU5OWNkMlUsIDB4NzMzZjU1ZjJVLCAweGNlNzkxODE0VSwgMHgzN2JmNzNjN1UsCisgICAgMHhjZGVhNTNmN1UsIDB4YWE1YjVmZmRVLCAweDZmMTRkZjNkVSwgMHhkYjg2Nzg0NFUsCisgICAgMHhmMzgxY2FhZlUsIDB4YzQzZWI5NjhVLCAweDM0MmMzODI0VSwgMHg0MDVmYzJhM1UsCisgICAgMHhjMzcyMTYxZFUsIDB4MjUwY2JjZTJVLCAweDQ5OGIyODNjVSwgMHg5NTQxZmYwZFUsCisgICAgMHgwMTcxMzlhOFUsIDB4YjNkZTA4MGNVLCAweGU0OWNkOGI0VSwgMHhjMTkwNjQ1NlUsCisgICAgMHg4NDYxN2JjYlUsIDB4YjY3MGQ1MzJVLCAweDVjNzQ0ODZjVSwgMHg1NzQyZDBiOFUsCit9Oworc3RhdGljIGNvbnN0IHUzMiBUZDNbMjU2XSA9IHsKKyAgICAweGY0YTc1MDUxVSwgMHg0MTY1NTM3ZVUsIDB4MTdhNGMzMWFVLCAweDI3NWU5NjNhVSwKKyAgICAweGFiNmJjYjNiVSwgMHg5ZDQ1ZjExZlUsIDB4ZmE1OGFiYWNVLCAweGUzMDM5MzRiVSwKKyAgICAweDMwZmE1NTIwVSwgMHg3NjZkZjZhZFUsIDB4Y2M3NjkxODhVLCAweDAyNGMyNWY1VSwKKyAgICAweGU1ZDdmYzRmVSwgMHgyYWNiZDdjNVUsIDB4MzU0NDgwMjZVLCAweDYyYTM4ZmI1VSwKKyAgICAweGIxNWE0OWRlVSwgMHhiYTFiNjcyNVUsIDB4ZWEwZTk4NDVVLCAweGZlYzBlMTVkVSwKKyAgICAweDJmNzUwMmMzVSwgMHg0Y2YwMTI4MVUsIDB4NDY5N2EzOGRVLCAweGQzZjljNjZiVSwKKyAgICAweDhmNWZlNzAzVSwgMHg5MjljOTUxNVUsIDB4NmQ3YWViYmZVLCAweDUyNTlkYTk1VSwKKyAgICAweGJlODMyZGQ0VSwgMHg3NDIxZDM1OFUsIDB4ZTA2OTI5NDlVLCAweGM5Yzg0NDhlVSwKKyAgICAweGMyODk2YTc1VSwgMHg4ZTc5NzhmNFUsIDB4NTgzZTZiOTlVLCAweGI5NzFkZDI3VSwKKyAgICAweGUxNGZiNmJlVSwgMHg4OGFkMTdmMFUsIDB4MjBhYzY2YzlVLCAweGNlM2FiNDdkVSwKKyAgICAweGRmNGExODYzVSwgMHgxYTMxODJlNVUsIDB4NTEzMzYwOTdVLCAweDUzN2Y0NTYyVSwKKyAgICAweDY0NzdlMGIxVSwgMHg2YmFlODRiYlUsIDB4ODFhMDFjZmVVLCAweDA4MmI5NGY5VSwKKyAgICAweDQ4Njg1ODcwVSwgMHg0NWZkMTk4ZlUsIDB4ZGU2Yzg3OTRVLCAweDdiZjhiNzUyVSwKKyAgICAweDczZDMyM2FiVSwgMHg0YjAyZTI3MlUsIDB4MWY4ZjU3ZTNVLCAweDU1YWIyYTY2VSwKKyAgICAweGViMjgwN2IyVSwgMHhiNWMyMDMyZlUsIDB4YzU3YjlhODZVLCAweDM3MDhhNWQzVSwKKyAgICAweDI4ODdmMjMwVSwgMHhiZmE1YjIyM1UsIDB4MDM2YWJhMDJVLCAweDE2ODI1Y2VkVSwKKyAgICAweGNmMWMyYjhhVSwgMHg3OWI0OTJhN1UsIDB4MDdmMmYwZjNVLCAweDY5ZTJhMTRlVSwKKyAgICAweGRhZjRjZDY1VSwgMHgwNWJlZDUwNlUsIDB4MzQ2MjFmZDFVLCAweGE2ZmU4YWM0VSwKKyAgICAweDJlNTM5ZDM0VSwgMHhmMzU1YTBhMlUsIDB4OGFlMTMyMDVVLCAweGY2ZWI3NWE0VSwKKyAgICAweDgzZWMzOTBiVSwgMHg2MGVmYWE0MFUsIDB4NzE5ZjA2NWVVLCAweDZlMTA1MWJkVSwKKyAgICAweDIxOGFmOTNlVSwgMHhkZDA2M2Q5NlUsIDB4M2UwNWFlZGRVLCAweGU2YmQ0NjRkVSwKKyAgICAweDU0OGRiNTkxVSwgMHhjNDVkMDU3MVUsIDB4MDZkNDZmMDRVLCAweDUwMTVmZjYwVSwKKyAgICAweDk4ZmIyNDE5VSwgMHhiZGU5OTdkNlUsIDB4NDA0M2NjODlVLCAweGQ5OWU3NzY3VSwKKyAgICAweGU4NDJiZGIwVSwgMHg4OThiODgwN1UsIDB4MTk1YjM4ZTdVLCAweGM4ZWVkYjc5VSwKKyAgICAweDdjMGE0N2ExVSwgMHg0MjBmZTk3Y1UsIDB4ODQxZWM5ZjhVLCAweDAwMDAwMDAwVSwKKyAgICAweDgwODY4MzA5VSwgMHgyYmVkNDgzMlUsIDB4MTE3MGFjMWVVLCAweDVhNzI0ZTZjVSwKKyAgICAweDBlZmZmYmZkVSwgMHg4NTM4NTYwZlUsIDB4YWVkNTFlM2RVLCAweDJkMzkyNzM2VSwKKyAgICAweDBmZDk2NDBhVSwgMHg1Y2E2MjE2OFUsIDB4NWI1NGQxOWJVLCAweDM2MmUzYTI0VSwKKyAgICAweDBhNjdiMTBjVSwgMHg1N2U3MGY5M1UsIDB4ZWU5NmQyYjRVLCAweDliOTE5ZTFiVSwKKyAgICAweGMwYzU0ZjgwVSwgMHhkYzIwYTI2MVUsIDB4Nzc0YjY5NWFVLCAweDEyMWExNjFjVSwKKyAgICAweDkzYmEwYWUyVSwgMHhhMDJhZTVjMFUsIDB4MjJlMDQzM2NVLCAweDFiMTcxZDEyVSwKKyAgICAweDA5MGQwYjBlVSwgMHg4YmM3YWRmMlUsIDB4YjZhOGI5MmRVLCAweDFlYTljODE0VSwKKyAgICAweGYxMTk4NTU3VSwgMHg3NTA3NGNhZlUsIDB4OTlkZGJiZWVVLCAweDdmNjBmZGEzVSwKKyAgICAweDAxMjY5ZmY3VSwgMHg3MmY1YmM1Y1UsIDB4NjYzYmM1NDRVLCAweGZiN2UzNDViVSwKKyAgICAweDQzMjk3NjhiVSwgMHgyM2M2ZGNjYlUsIDB4ZWRmYzY4YjZVLCAweGU0ZjE2M2I4VSwKKyAgICAweDMxZGNjYWQ3VSwgMHg2Mzg1MTA0MlUsIDB4OTcyMjQwMTNVLCAweGM2MTEyMDg0VSwKKyAgICAweDRhMjQ3ZDg1VSwgMHhiYjNkZjhkMlUsIDB4ZjkzMjExYWVVLCAweDI5YTE2ZGM3VSwKKyAgICAweDllMmY0YjFkVSwgMHhiMjMwZjNkY1UsIDB4ODY1MmVjMGRVLCAweGMxZTNkMDc3VSwKKyAgICAweGIzMTY2YzJiVSwgMHg3MGI5OTlhOVUsIDB4OTQ0OGZhMTFVLCAweGU5NjQyMjQ3VSwKKyAgICAweGZjOGNjNGE4VSwgMHhmMDNmMWFhMFUsIDB4N2QyY2Q4NTZVLCAweDMzOTBlZjIyVSwKKyAgICAweDQ5NGVjNzg3VSwgMHgzOGQxYzFkOVUsIDB4Y2FhMmZlOGNVLCAweGQ0MGIzNjk4VSwKKyAgICAweGY1ODFjZmE2VSwgMHg3YWRlMjhhNVUsIDB4Yjc4ZTI2ZGFVLCAweGFkYmZhNDNmVSwKKyAgICAweDNhOWRlNDJjVSwgMHg3ODkyMGQ1MFUsIDB4NWZjYzliNmFVLCAweDdlNDY2MjU0VSwKKyAgICAweDhkMTNjMmY2VSwgMHhkOGI4ZTg5MFUsIDB4MzlmNzVlMmVVLCAweGMzYWZmNTgyVSwKKyAgICAweDVkODBiZTlmVSwgMHhkMDkzN2M2OVUsIDB4ZDUyZGE5NmZVLCAweDI1MTJiM2NmVSwKKyAgICAweGFjOTkzYmM4VSwgMHgxODdkYTcxMFUsIDB4OWM2MzZlZThVLCAweDNiYmI3YmRiVSwKKyAgICAweDI2NzgwOWNkVSwgMHg1OTE4ZjQ2ZVUsIDB4OWFiNzAxZWNVLCAweDRmOWFhODgzVSwKKyAgICAweDk1NmU2NWU2VSwgMHhmZmU2N2VhYVUsIDB4YmNjZjA4MjFVLCAweDE1ZThlNmVmVSwKKyAgICAweGU3OWJkOWJhVSwgMHg2ZjM2Y2U0YVUsIDB4OWYwOWQ0ZWFVLCAweGIwN2NkNjI5VSwKKyAgICAweGE0YjJhZjMxVSwgMHgzZjIzMzEyYVUsIDB4YTU5NDMwYzZVLCAweGEyNjZjMDM1VSwKKyAgICAweDRlYmMzNzc0VSwgMHg4MmNhYTZmY1UsIDB4OTBkMGIwZTBVLCAweGE3ZDgxNTMzVSwKKyAgICAweDA0OTg0YWYxVSwgMHhlY2RhZjc0MVUsIDB4Y2Q1MDBlN2ZVLCAweDkxZjYyZjE3VSwKKyAgICAweDRkZDY4ZDc2VSwgMHhlZmIwNGQ0M1UsIDB4YWE0ZDU0Y2NVLCAweDk2MDRkZmU0VSwKKyAgICAweGQxYjVlMzllVSwgMHg2YTg4MWI0Y1UsIDB4MmMxZmI4YzFVLCAweDY1NTE3ZjQ2VSwKKyAgICAweDVlZWEwNDlkVSwgMHg4YzM1NWQwMVUsIDB4ODc3NDczZmFVLCAweDBiNDEyZWZiVSwKKyAgICAweDY3MWQ1YWIzVSwgMHhkYmQyNTI5MlUsIDB4MTA1NjMzZTlVLCAweGQ2NDcxMzZkVSwKKyAgICAweGQ3NjE4YzlhVSwgMHhhMTBjN2EzN1UsIDB4ZjgxNDhlNTlVLCAweDEzM2M4OWViVSwKKyAgICAweGE5MjdlZWNlVSwgMHg2MWM5MzViN1UsIDB4MWNlNWVkZTFVLCAweDQ3YjEzYzdhVSwKKyAgICAweGQyZGY1OTljVSwgMHhmMjczM2Y1NVUsIDB4MTRjZTc5MThVLCAweGM3MzdiZjczVSwKKyAgICAweGY3Y2RlYTUzVSwgMHhmZGFhNWI1ZlUsIDB4M2Q2ZjE0ZGZVLCAweDQ0ZGI4Njc4VSwKKyAgICAweGFmZjM4MWNhVSwgMHg2OGM0M2ViOVUsIDB4MjQzNDJjMzhVLCAweGEzNDA1ZmMyVSwKKyAgICAweDFkYzM3MjE2VSwgMHhlMjI1MGNiY1UsIDB4M2M0OThiMjhVLCAweDBkOTU0MWZmVSwKKyAgICAweGE4MDE3MTM5VSwgMHgwY2IzZGUwOFUsIDB4YjRlNDljZDhVLCAweDU2YzE5MDY0VSwKKyAgICAweGNiODQ2MTdiVSwgMHgzMmI2NzBkNVUsIDB4NmM1Yzc0NDhVLCAweGI4NTc0MmQwVSwKK307CitzdGF0aWMgY29uc3QgdTggVGQ0WzI1Nl0gPSB7CisgICAgMHg1MlUsIDB4MDlVLCAweDZhVSwgMHhkNVUsIDB4MzBVLCAweDM2VSwgMHhhNVUsIDB4MzhVLAorICAgIDB4YmZVLCAweDQwVSwgMHhhM1UsIDB4OWVVLCAweDgxVSwgMHhmM1UsIDB4ZDdVLCAweGZiVSwKKyAgICAweDdjVSwgMHhlM1UsIDB4MzlVLCAweDgyVSwgMHg5YlUsIDB4MmZVLCAweGZmVSwgMHg4N1UsCisgICAgMHgzNFUsIDB4OGVVLCAweDQzVSwgMHg0NFUsIDB4YzRVLCAweGRlVSwgMHhlOVUsIDB4Y2JVLAorICAgIDB4NTRVLCAweDdiVSwgMHg5NFUsIDB4MzJVLCAweGE2VSwgMHhjMlUsIDB4MjNVLCAweDNkVSwKKyAgICAweGVlVSwgMHg0Y1UsIDB4OTVVLCAweDBiVSwgMHg0MlUsIDB4ZmFVLCAweGMzVSwgMHg0ZVUsCisgICAgMHgwOFUsIDB4MmVVLCAweGExVSwgMHg2NlUsIDB4MjhVLCAweGQ5VSwgMHgyNFUsIDB4YjJVLAorICAgIDB4NzZVLCAweDViVSwgMHhhMlUsIDB4NDlVLCAweDZkVSwgMHg4YlUsIDB4ZDFVLCAweDI1VSwKKyAgICAweDcyVSwgMHhmOFUsIDB4ZjZVLCAweDY0VSwgMHg4NlUsIDB4NjhVLCAweDk4VSwgMHgxNlUsCisgICAgMHhkNFUsIDB4YTRVLCAweDVjVSwgMHhjY1UsIDB4NWRVLCAweDY1VSwgMHhiNlUsIDB4OTJVLAorICAgIDB4NmNVLCAweDcwVSwgMHg0OFUsIDB4NTBVLCAweGZkVSwgMHhlZFUsIDB4YjlVLCAweGRhVSwKKyAgICAweDVlVSwgMHgxNVUsIDB4NDZVLCAweDU3VSwgMHhhN1UsIDB4OGRVLCAweDlkVSwgMHg4NFUsCisgICAgMHg5MFUsIDB4ZDhVLCAweGFiVSwgMHgwMFUsIDB4OGNVLCAweGJjVSwgMHhkM1UsIDB4MGFVLAorICAgIDB4ZjdVLCAweGU0VSwgMHg1OFUsIDB4MDVVLCAweGI4VSwgMHhiM1UsIDB4NDVVLCAweDA2VSwKKyAgICAweGQwVSwgMHgyY1UsIDB4MWVVLCAweDhmVSwgMHhjYVUsIDB4M2ZVLCAweDBmVSwgMHgwMlUsCisgICAgMHhjMVUsIDB4YWZVLCAweGJkVSwgMHgwM1UsIDB4MDFVLCAweDEzVSwgMHg4YVUsIDB4NmJVLAorICAgIDB4M2FVLCAweDkxVSwgMHgxMVUsIDB4NDFVLCAweDRmVSwgMHg2N1UsIDB4ZGNVLCAweGVhVSwKKyAgICAweDk3VSwgMHhmMlUsIDB4Y2ZVLCAweGNlVSwgMHhmMFUsIDB4YjRVLCAweGU2VSwgMHg3M1UsCisgICAgMHg5NlUsIDB4YWNVLCAweDc0VSwgMHgyMlUsIDB4ZTdVLCAweGFkVSwgMHgzNVUsIDB4ODVVLAorICAgIDB4ZTJVLCAweGY5VSwgMHgzN1UsIDB4ZThVLCAweDFjVSwgMHg3NVUsIDB4ZGZVLCAweDZlVSwKKyAgICAweDQ3VSwgMHhmMVUsIDB4MWFVLCAweDcxVSwgMHgxZFUsIDB4MjlVLCAweGM1VSwgMHg4OVUsCisgICAgMHg2ZlUsIDB4YjdVLCAweDYyVSwgMHgwZVUsIDB4YWFVLCAweDE4VSwgMHhiZVUsIDB4MWJVLAorICAgIDB4ZmNVLCAweDU2VSwgMHgzZVUsIDB4NGJVLCAweGM2VSwgMHhkMlUsIDB4NzlVLCAweDIwVSwKKyAgICAweDlhVSwgMHhkYlUsIDB4YzBVLCAweGZlVSwgMHg3OFUsIDB4Y2RVLCAweDVhVSwgMHhmNFUsCisgICAgMHgxZlUsIDB4ZGRVLCAweGE4VSwgMHgzM1UsIDB4ODhVLCAweDA3VSwgMHhjN1UsIDB4MzFVLAorICAgIDB4YjFVLCAweDEyVSwgMHgxMFUsIDB4NTlVLCAweDI3VSwgMHg4MFUsIDB4ZWNVLCAweDVmVSwKKyAgICAweDYwVSwgMHg1MVUsIDB4N2ZVLCAweGE5VSwgMHgxOVUsIDB4YjVVLCAweDRhVSwgMHgwZFUsCisgICAgMHgyZFUsIDB4ZTVVLCAweDdhVSwgMHg5ZlUsIDB4OTNVLCAweGM5VSwgMHg5Y1UsIDB4ZWZVLAorICAgIDB4YTBVLCAweGUwVSwgMHgzYlUsIDB4NGRVLCAweGFlVSwgMHgyYVUsIDB4ZjVVLCAweGIwVSwKKyAgICAweGM4VSwgMHhlYlUsIDB4YmJVLCAweDNjVSwgMHg4M1UsIDB4NTNVLCAweDk5VSwgMHg2MVUsCisgICAgMHgxN1UsIDB4MmJVLCAweDA0VSwgMHg3ZVUsIDB4YmFVLCAweDc3VSwgMHhkNlUsIDB4MjZVLAorICAgIDB4ZTFVLCAweDY5VSwgMHgxNFUsIDB4NjNVLCAweDU1VSwgMHgyMVUsIDB4MGNVLCAweDdkVSwKK307CitzdGF0aWMgY29uc3QgdTMyIHJjb25bXSA9IHsKKwkweDAxMDAwMDAwLCAweDAyMDAwMDAwLCAweDA0MDAwMDAwLCAweDA4MDAwMDAwLAorCTB4MTAwMDAwMDAsIDB4MjAwMDAwMDAsIDB4NDAwMDAwMDAsIDB4ODAwMDAwMDAsCisJMHgxQjAwMDAwMCwgMHgzNjAwMDAwMCwgLyogZm9yIDEyOC1iaXQgYmxvY2tzLCBSaWpuZGFlbCBuZXZlciB1c2VzIG1vcmUgdGhhbiAxMCByY29uIHZhbHVlcyAqLworfTsKKworLyoqCisgKiBFeHBhbmQgdGhlIGNpcGhlciBrZXkgaW50byB0aGUgZW5jcnlwdGlvbiBrZXkgc2NoZWR1bGUuCisgKi8KK2ludCBBRVNfc2V0X2VuY3J5cHRfa2V5KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnVzZXJLZXksIGNvbnN0IGludCBiaXRzLAorCQkJQUVTX0tFWSAqa2V5KSB7CisKKwl1MzIgKnJrOworICAgCWludCBpID0gMDsKKwl1MzIgdGVtcDsKKworCWlmICghdXNlcktleSB8fCAha2V5KQorCQlyZXR1cm4gLTE7CisJaWYgKGJpdHMgIT0gMTI4ICYmIGJpdHMgIT0gMTkyICYmIGJpdHMgIT0gMjU2KQorCQlyZXR1cm4gLTI7CisKKwlyayA9IGtleS0+cmRfa2V5OworCisJaWYgKGJpdHM9PTEyOCkKKwkJa2V5LT5yb3VuZHMgPSAxMDsKKwllbHNlIGlmIChiaXRzPT0xOTIpCisJCWtleS0+cm91bmRzID0gMTI7CisJZWxzZQorCQlrZXktPnJvdW5kcyA9IDE0OworCisJcmtbMF0gPSBHRVRVMzIodXNlcktleSAgICAgKTsKKwlya1sxXSA9IEdFVFUzMih1c2VyS2V5ICsgIDQpOworCXJrWzJdID0gR0VUVTMyKHVzZXJLZXkgKyAgOCk7CisJcmtbM10gPSBHRVRVMzIodXNlcktleSArIDEyKTsKKwlpZiAoYml0cyA9PSAxMjgpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgID0gcmtbM107CisJCQlya1s0XSA9IHJrWzBdIF4KKwkJCQkoVGUyWyh0ZW1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZjAwMDAwMCkgXgorCQkJCShUZTNbKHRlbXAgPj4gIDgpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCQkJKFRlMFsodGVtcCAgICAgICkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJCQkoVGUxWyh0ZW1wID4+IDI0KSAgICAgICBdICYgMHgwMDAwMDBmZikgXgorCQkJCXJjb25baV07CisJCQlya1s1XSA9IHJrWzFdIF4gcmtbNF07CisJCQlya1s2XSA9IHJrWzJdIF4gcmtbNV07CisJCQlya1s3XSA9IHJrWzNdIF4gcmtbNl07CisJCQlpZiAoKytpID09IDEwKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyayArPSA0OworCQl9CisJfQorCXJrWzRdID0gR0VUVTMyKHVzZXJLZXkgKyAxNik7CisJcmtbNV0gPSBHRVRVMzIodXNlcktleSArIDIwKTsKKwlpZiAoYml0cyA9PSAxOTIpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgPSBya1sgNV07CisJCQlya1sgNl0gPSBya1sgMF0gXgorCQkJCShUZTJbKHRlbXAgPj4gMTYpICYgMHhmZl0gJiAweGZmMDAwMDAwKSBeCisJCQkJKFRlM1sodGVtcCA+PiAgOCkgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJCQkoVGUwWyh0ZW1wICAgICAgKSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkJCShUZTFbKHRlbXAgPj4gMjQpICAgICAgIF0gJiAweDAwMDAwMGZmKSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWyA3XSA9IHJrWyAxXSBeIHJrWyA2XTsKKwkJCXJrWyA4XSA9IHJrWyAyXSBeIHJrWyA3XTsKKwkJCXJrWyA5XSA9IHJrWyAzXSBeIHJrWyA4XTsKKwkJCWlmICgrK2kgPT0gOCkgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJcmtbMTBdID0gcmtbIDRdIF4gcmtbIDldOworCQkJcmtbMTFdID0gcmtbIDVdIF4gcmtbMTBdOworCQkJcmsgKz0gNjsKKwkJfQorCX0KKwlya1s2XSA9IEdFVFUzMih1c2VyS2V5ICsgMjQpOworCXJrWzddID0gR0VUVTMyKHVzZXJLZXkgKyAyOCk7CisJaWYgKGJpdHMgPT0gMjU2KSB7CisJCXdoaWxlICgxKSB7CisJCQl0ZW1wID0gcmtbIDddOworCQkJcmtbIDhdID0gcmtbIDBdIF4KKwkJCQkoVGUyWyh0ZW1wID4+IDE2KSAmIDB4ZmZdICYgMHhmZjAwMDAwMCkgXgorCQkJCShUZTNbKHRlbXAgPj4gIDgpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCQkJKFRlMFsodGVtcCAgICAgICkgJiAweGZmXSAmIDB4MDAwMGZmMDApIF4KKwkJCQkoVGUxWyh0ZW1wID4+IDI0KSAgICAgICBdICYgMHgwMDAwMDBmZikgXgorCQkJCXJjb25baV07CisJCQlya1sgOV0gPSBya1sgMV0gXiBya1sgOF07CisJCQlya1sxMF0gPSBya1sgMl0gXiBya1sgOV07CisJCQlya1sxMV0gPSBya1sgM10gXiBya1sxMF07CisJCQlpZiAoKytpID09IDcpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXRlbXAgPSBya1sxMV07CisJCQlya1sxMl0gPSBya1sgNF0gXgorCQkJCShUZTJbKHRlbXAgPj4gMjQpICAgICAgIF0gJiAweGZmMDAwMDAwKSBeCisJCQkJKFRlM1sodGVtcCA+PiAxNikgJiAweGZmXSAmIDB4MDBmZjAwMDApIF4KKwkJCQkoVGUwWyh0ZW1wID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkJCShUZTFbKHRlbXAgICAgICApICYgMHhmZl0gJiAweDAwMDAwMGZmKTsKKwkJCXJrWzEzXSA9IHJrWyA1XSBeIHJrWzEyXTsKKwkJCXJrWzE0XSA9IHJrWyA2XSBeIHJrWzEzXTsKKwkJCXJrWzE1XSA9IHJrWyA3XSBeIHJrWzE0XTsKKworCQkJcmsgKz0gODsKKyAgICAgICAgCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRXhwYW5kIHRoZSBjaXBoZXIga2V5IGludG8gdGhlIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlLgorICovCitpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwkJCSBBRVNfS0VZICprZXkpIHsKKworICAgICAgICB1MzIgKnJrOworCWludCBpLCBqLCBzdGF0dXM7CisJdTMyIHRlbXA7CisKKwkvKiBmaXJzdCwgc3RhcnQgd2l0aCBhbiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCisJc3RhdHVzID0gQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmsgPSBrZXktPnJkX2tleTsKKworCS8qIGludmVydCB0aGUgb3JkZXIgb2YgdGhlIHJvdW5kIGtleXM6ICovCisJZm9yIChpID0gMCwgaiA9IDQqKGtleS0+cm91bmRzKTsgaSA8IGo7IGkgKz0gNCwgaiAtPSA0KSB7CisJCXRlbXAgPSBya1tpICAgIF07IHJrW2kgICAgXSA9IHJrW2ogICAgXTsgcmtbaiAgICBdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAxXTsgcmtbaSArIDFdID0gcmtbaiArIDFdOyBya1tqICsgMV0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDJdOyBya1tpICsgMl0gPSBya1tqICsgMl07IHJrW2ogKyAyXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgM107IHJrW2kgKyAzXSA9IHJrW2ogKyAzXTsgcmtbaiArIDNdID0gdGVtcDsKKwl9CisJLyogYXBwbHkgdGhlIGludmVyc2UgTWl4Q29sdW1uIHRyYW5zZm9ybSB0byBhbGwgcm91bmQga2V5cyBidXQgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdDogKi8KKwlmb3IgKGkgPSAxOyBpIDwgKGtleS0+cm91bmRzKTsgaSsrKSB7CisJCXJrICs9IDQ7CisJCXJrWzBdID0KKwkJCVRkMFtUZTFbKHJrWzBdID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorCQkJVGQxW1RlMVsocmtbMF0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDJbVGUxWyhya1swXSA+PiAgOCkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkM1tUZTFbKHJrWzBdICAgICAgKSAmIDB4ZmZdICYgMHhmZl07CisJCXJrWzFdID0KKwkJCVRkMFtUZTFbKHJrWzFdID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorCQkJVGQxW1RlMVsocmtbMV0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDJbVGUxWyhya1sxXSA+PiAgOCkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkM1tUZTFbKHJrWzFdICAgICAgKSAmIDB4ZmZdICYgMHhmZl07CisJCXJrWzJdID0KKwkJCVRkMFtUZTFbKHJrWzJdID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorCQkJVGQxW1RlMVsocmtbMl0gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDJbVGUxWyhya1syXSA+PiAgOCkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkM1tUZTFbKHJrWzJdICAgICAgKSAmIDB4ZmZdICYgMHhmZl07CisJCXJrWzNdID0KKwkJCVRkMFtUZTFbKHJrWzNdID4+IDI0KSAgICAgICBdICYgMHhmZl0gXgorCQkJVGQxW1RlMVsocmtbM10gPj4gMTYpICYgMHhmZl0gJiAweGZmXSBeCisJCQlUZDJbVGUxWyhya1szXSA+PiAgOCkgJiAweGZmXSAmIDB4ZmZdIF4KKwkJCVRkM1tUZTFbKHJrWzNdICAgICAgKSAmIDB4ZmZdICYgMHhmZl07CisJfQorCXJldHVybiAwOworfQorCisvKgorICogRW5jcnlwdCBhIHNpbmdsZSBibG9jaworICogaW4gYW5kIG91dCBjYW4gb3ZlcmxhcAorICovCit2b2lkIEFFU19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCSBjb25zdCBBRVNfS0VZICprZXkpIHsKKworCWNvbnN0IHUzMiAqcms7CisJdTMyIHMwLCBzMSwgczIsIHMzLCB0MCwgdDEsIHQyLCB0MzsKKyNpZm5kZWYgRlVMTF9VTlJPTEwKKwlpbnQgcjsKKyNlbmRpZiAvKiA/RlVMTF9VTlJPTEwgKi8KKworCWFzc2VydChpbiAmJiBvdXQgJiYga2V5KTsKKwlyayA9IGtleS0+cmRfa2V5OworCisJLyoKKwkgKiBtYXAgYnl0ZSBhcnJheSBibG9jayB0byBjaXBoZXIgc3RhdGUKKwkgKiBhbmQgYWRkIGluaXRpYWwgcm91bmQga2V5OgorCSAqLworCXMwID0gR0VUVTMyKGluICAgICApIF4gcmtbMF07CisJczEgPSBHRVRVMzIoaW4gKyAgNCkgXiBya1sxXTsKKwlzMiA9IEdFVFUzMihpbiArICA4KSBeIHJrWzJdOworCXMzID0gR0VUVTMyKGluICsgMTIpIF4gcmtbM107CisjaWZkZWYgRlVMTF9VTlJPTEwKKwkvKiByb3VuZCAxOiAqLworICAgCXQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1sgNF07CisgICAJdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWyA1XTsKKyAgIAl0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbIDZdOworICAgCXQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1sgN107CisgICAJLyogcm91bmQgMjogKi8KKyAgIAlzMCA9IFRlMFt0MCA+PiAyNF0gXiBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MyAmIDB4ZmZdIF4gcmtbIDhdOworICAgCXMxID0gVGUwW3QxID4+IDI0XSBeIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QwICYgMHhmZl0gXiBya1sgOV07CisgICAJczIgPSBUZTBbdDIgPj4gMjRdIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDEgJiAweGZmXSBeIHJrWzEwXTsKKyAgIAlzMyA9IFRlMFt0MyA+PiAyNF0gXiBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MiAmIDB4ZmZdIF4gcmtbMTFdOworCS8qIHJvdW5kIDM6ICovCisgICAJdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWzEyXTsKKyAgIAl0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbMTNdOworICAgCXQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1sxNF07CisgICAJdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWzE1XTsKKyAgIAkvKiByb3VuZCA0OiAqLworICAgCXMwID0gVGUwW3QwID4+IDI0XSBeIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QzICYgMHhmZl0gXiBya1sxNl07CisgICAJczEgPSBUZTBbdDEgPj4gMjRdIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDAgJiAweGZmXSBeIHJrWzE3XTsKKyAgIAlzMiA9IFRlMFt0MiA+PiAyNF0gXiBUZTFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MSAmIDB4ZmZdIF4gcmtbMThdOworICAgCXMzID0gVGUwW3QzID4+IDI0XSBeIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QyICYgMHhmZl0gXiBya1sxOV07CisJLyogcm91bmQgNTogKi8KKyAgIAl0MCA9IFRlMFtzMCA+PiAyNF0gXiBUZTFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMyAmIDB4ZmZdIF4gcmtbMjBdOworICAgCXQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1syMV07CisgICAJdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWzIyXTsKKyAgIAl0MyA9IFRlMFtzMyA+PiAyNF0gXiBUZTFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMiAmIDB4ZmZdIF4gcmtbMjNdOworICAgCS8qIHJvdW5kIDY6ICovCisgICAJczAgPSBUZTBbdDAgPj4gMjRdIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDMgJiAweGZmXSBeIHJrWzI0XTsKKyAgIAlzMSA9IFRlMFt0MSA+PiAyNF0gXiBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MCAmIDB4ZmZdIF4gcmtbMjVdOworICAgCXMyID0gVGUwW3QyID4+IDI0XSBeIFRlMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QxICYgMHhmZl0gXiBya1syNl07CisgICAJczMgPSBUZTBbdDMgPj4gMjRdIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDIgJiAweGZmXSBeIHJrWzI3XTsKKwkvKiByb3VuZCA3OiAqLworICAgCXQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1syOF07CisgICAJdDEgPSBUZTBbczEgPj4gMjRdIF4gVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRlMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZTNbczAgJiAweGZmXSBeIHJrWzI5XTsKKyAgIAl0MiA9IFRlMFtzMiA+PiAyNF0gXiBUZTFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMSAmIDB4ZmZdIF4gcmtbMzBdOworICAgCXQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1szMV07CisgICAJLyogcm91bmQgODogKi8KKyAgIAlzMCA9IFRlMFt0MCA+PiAyNF0gXiBUZTFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MyAmIDB4ZmZdIF4gcmtbMzJdOworICAgCXMxID0gVGUwW3QxID4+IDI0XSBeIFRlMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QwICYgMHhmZl0gXiBya1szM107CisgICAJczIgPSBUZTBbdDIgPj4gMjRdIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDEgJiAweGZmXSBeIHJrWzM0XTsKKyAgIAlzMyA9IFRlMFt0MyA+PiAyNF0gXiBUZTFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MiAmIDB4ZmZdIF4gcmtbMzVdOworCS8qIHJvdW5kIDk6ICovCisgICAJdDAgPSBUZTBbczAgPj4gMjRdIF4gVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRlMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZTNbczMgJiAweGZmXSBeIHJrWzM2XTsKKyAgIAl0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbMzddOworICAgCXQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1szOF07CisgICAJdDMgPSBUZTBbczMgPj4gMjRdIF4gVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRlMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZTNbczIgJiAweGZmXSBeIHJrWzM5XTsKKyAgICBpZiAoa2V5LT5yb3VuZHMgPiAxMCkgeworICAgICAgICAvKiByb3VuZCAxMDogKi8KKyAgICAgICAgczAgPSBUZTBbdDAgPj4gMjRdIF4gVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRlMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDMgJiAweGZmXSBeIHJrWzQwXTsKKyAgICAgICAgczEgPSBUZTBbdDEgPj4gMjRdIF4gVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRlMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDAgJiAweGZmXSBeIHJrWzQxXTsKKyAgICAgICAgczIgPSBUZTBbdDIgPj4gMjRdIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDEgJiAweGZmXSBeIHJrWzQyXTsKKyAgICAgICAgczMgPSBUZTBbdDMgPj4gMjRdIF4gVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRlMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDIgJiAweGZmXSBeIHJrWzQzXTsKKyAgICAgICAgLyogcm91bmQgMTE6ICovCisgICAgICAgIHQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1s0NF07CisgICAgICAgIHQxID0gVGUwW3MxID4+IDI0XSBeIFRlMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MwICYgMHhmZl0gXiBya1s0NV07CisgICAgICAgIHQyID0gVGUwW3MyID4+IDI0XSBeIFRlMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MxICYgMHhmZl0gXiBya1s0Nl07CisgICAgICAgIHQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1s0N107CisgICAgICAgIGlmIChrZXktPnJvdW5kcyA+IDEyKSB7CisgICAgICAgICAgICAvKiByb3VuZCAxMjogKi8KKyAgICAgICAgICAgIHMwID0gVGUwW3QwID4+IDI0XSBeIFRlMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QzICYgMHhmZl0gXiBya1s0OF07CisgICAgICAgICAgICBzMSA9IFRlMFt0MSA+PiAyNF0gXiBUZTFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRlM1t0MCAmIDB4ZmZdIF4gcmtbNDldOworICAgICAgICAgICAgczIgPSBUZTBbdDIgPj4gMjRdIF4gVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRlMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZTNbdDEgJiAweGZmXSBeIHJrWzUwXTsKKyAgICAgICAgICAgIHMzID0gVGUwW3QzID4+IDI0XSBeIFRlMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3QyICYgMHhmZl0gXiBya1s1MV07CisgICAgICAgICAgICAvKiByb3VuZCAxMzogKi8KKyAgICAgICAgICAgIHQwID0gVGUwW3MwID4+IDI0XSBeIFRlMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MzICYgMHhmZl0gXiBya1s1Ml07CisgICAgICAgICAgICB0MSA9IFRlMFtzMSA+PiAyNF0gXiBUZTFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGUyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRlM1tzMCAmIDB4ZmZdIF4gcmtbNTNdOworICAgICAgICAgICAgdDIgPSBUZTBbczIgPj4gMjRdIF4gVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRlMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZTNbczEgJiAweGZmXSBeIHJrWzU0XTsKKyAgICAgICAgICAgIHQzID0gVGUwW3MzID4+IDI0XSBeIFRlMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGUzW3MyICYgMHhmZl0gXiBya1s1NV07CisgICAgICAgIH0KKyAgICB9CisgICAgcmsgKz0ga2V5LT5yb3VuZHMgPDwgMjsKKyNlbHNlICAvKiAhRlVMTF9VTlJPTEwgKi8KKyAgICAvKgorICAgICAqIE5yIC0gMSBmdWxsIHJvdW5kczoKKyAgICAgKi8KKyAgICByID0ga2V5LT5yb3VuZHMgPj4gMTsKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIHQwID0KKyAgICAgICAgICAgIFRlMFsoczAgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyhzMSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHMyID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1soczMgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbNF07CisgICAgICAgIHQxID0KKyAgICAgICAgICAgIFRlMFsoczEgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyhzMiA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHMzID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1soczAgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbNV07CisgICAgICAgIHQyID0KKyAgICAgICAgICAgIFRlMFsoczIgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyhzMyA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHMwID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1soczEgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbNl07CisgICAgICAgIHQzID0KKyAgICAgICAgICAgIFRlMFsoczMgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyhzMCA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHMxID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1soczIgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbN107CisKKyAgICAgICAgcmsgKz0gODsKKyAgICAgICAgaWYgKC0tciA9PSAwKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHMwID0KKyAgICAgICAgICAgIFRlMFsodDAgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyh0MSA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHQyID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1sodDMgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbMF07CisgICAgICAgIHMxID0KKyAgICAgICAgICAgIFRlMFsodDEgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyh0MiA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHQzID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1sodDAgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbMV07CisgICAgICAgIHMyID0KKyAgICAgICAgICAgIFRlMFsodDIgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyh0MyA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHQwID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1sodDEgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbMl07CisgICAgICAgIHMzID0KKyAgICAgICAgICAgIFRlMFsodDMgPj4gMjQpICAgICAgIF0gXgorICAgICAgICAgICAgVGUxWyh0MCA+PiAxNikgJiAweGZmXSBeCisgICAgICAgICAgICBUZTJbKHQxID4+ICA4KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRlM1sodDIgICAgICApICYgMHhmZl0gXgorICAgICAgICAgICAgcmtbM107CisgICAgfQorI2VuZGlmIC8qID9GVUxMX1VOUk9MTCAqLworICAgIC8qCisJICogYXBwbHkgbGFzdCByb3VuZCBhbmQKKwkgKiBtYXAgY2lwaGVyIHN0YXRlIHRvIGJ5dGUgYXJyYXkgYmxvY2s6CisJICovCisJczAgPQorCQkoVGUyWyh0MCA+PiAyNCkgICAgICAgXSAmIDB4ZmYwMDAwMDApIF4KKwkJKFRlM1sodDEgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCShUZTBbKHQyID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkoVGUxWyh0MyAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKwkJcmtbMF07CisJUFVUVTMyKG91dCAgICAgLCBzMCk7CisJczEgPQorCQkoVGUyWyh0MSA+PiAyNCkgICAgICAgXSAmIDB4ZmYwMDAwMDApIF4KKwkJKFRlM1sodDIgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCShUZTBbKHQzID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkoVGUxWyh0MCAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKwkJcmtbMV07CisJUFVUVTMyKG91dCArICA0LCBzMSk7CisJczIgPQorCQkoVGUyWyh0MiA+PiAyNCkgICAgICAgXSAmIDB4ZmYwMDAwMDApIF4KKwkJKFRlM1sodDMgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCShUZTBbKHQwID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkoVGUxWyh0MSAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKwkJcmtbMl07CisJUFVUVTMyKG91dCArICA4LCBzMik7CisJczMgPQorCQkoVGUyWyh0MyA+PiAyNCkgICAgICAgXSAmIDB4ZmYwMDAwMDApIF4KKwkJKFRlM1sodDAgPj4gMTYpICYgMHhmZl0gJiAweDAwZmYwMDAwKSBeCisJCShUZTBbKHQxID4+ICA4KSAmIDB4ZmZdICYgMHgwMDAwZmYwMCkgXgorCQkoVGUxWyh0MiAgICAgICkgJiAweGZmXSAmIDB4MDAwMDAwZmYpIF4KKwkJcmtbM107CisJUFVUVTMyKG91dCArIDEyLCBzMyk7Cit9CisKKy8qCisgKiBEZWNyeXB0IGEgc2luZ2xlIGJsb2NrCisgKiBpbiBhbmQgb3V0IGNhbiBvdmVybGFwCisgKi8KK3ZvaWQgQUVTX2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJIGNvbnN0IEFFU19LRVkgKmtleSkgeworCisJY29uc3QgdTMyICpyazsKKwl1MzIgczAsIHMxLCBzMiwgczMsIHQwLCB0MSwgdDIsIHQzOworI2lmbmRlZiBGVUxMX1VOUk9MTAorCWludCByOworI2VuZGlmIC8qID9GVUxMX1VOUk9MTCAqLworCisJYXNzZXJ0KGluICYmIG91dCAmJiBrZXkpOworCXJrID0ga2V5LT5yZF9rZXk7CisKKwkvKgorCSAqIG1hcCBieXRlIGFycmF5IGJsb2NrIHRvIGNpcGhlciBzdGF0ZQorCSAqIGFuZCBhZGQgaW5pdGlhbCByb3VuZCBrZXk6CisJICovCisgICAgczAgPSBHRVRVMzIoaW4gICAgICkgXiBya1swXTsKKyAgICBzMSA9IEdFVFUzMihpbiArICA0KSBeIHJrWzFdOworICAgIHMyID0gR0VUVTMyKGluICsgIDgpIF4gcmtbMl07CisgICAgczMgPSBHRVRVMzIoaW4gKyAxMikgXiBya1szXTsKKyNpZmRlZiBGVUxMX1VOUk9MTAorICAgIC8qIHJvdW5kIDE6ICovCisgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWyA0XTsKKyAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbIDVdOworICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1sgNl07CisgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWyA3XTsKKyAgICAvKiByb3VuZCAyOiAqLworICAgIHMwID0gVGQwW3QwID4+IDI0XSBeIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QxICYgMHhmZl0gXiBya1sgOF07CisgICAgczEgPSBUZDBbdDEgPj4gMjRdIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDIgJiAweGZmXSBeIHJrWyA5XTsKKyAgICBzMiA9IFRkMFt0MiA+PiAyNF0gXiBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MyAmIDB4ZmZdIF4gcmtbMTBdOworICAgIHMzID0gVGQwW3QzID4+IDI0XSBeIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QwICYgMHhmZl0gXiBya1sxMV07CisgICAgLyogcm91bmQgMzogKi8KKyAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbMTJdOworICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1sxM107CisgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWzE0XTsKKyAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbMTVdOworICAgIC8qIHJvdW5kIDQ6ICovCisgICAgczAgPSBUZDBbdDAgPj4gMjRdIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDEgJiAweGZmXSBeIHJrWzE2XTsKKyAgICBzMSA9IFRkMFt0MSA+PiAyNF0gXiBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MiAmIDB4ZmZdIF4gcmtbMTddOworICAgIHMyID0gVGQwW3QyID4+IDI0XSBeIFRkMVsodDEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QzICYgMHhmZl0gXiBya1sxOF07CisgICAgczMgPSBUZDBbdDMgPj4gMjRdIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDAgJiAweGZmXSBeIHJrWzE5XTsKKyAgICAvKiByb3VuZCA1OiAqLworICAgIHQwID0gVGQwW3MwID4+IDI0XSBeIFRkMVsoczMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MxICYgMHhmZl0gXiBya1syMF07CisgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWzIxXTsKKyAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbMjJdOworICAgIHQzID0gVGQwW3MzID4+IDI0XSBeIFRkMVsoczIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MwICYgMHhmZl0gXiBya1syM107CisgICAgLyogcm91bmQgNjogKi8KKyAgICBzMCA9IFRkMFt0MCA+PiAyNF0gXiBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MSAmIDB4ZmZdIF4gcmtbMjRdOworICAgIHMxID0gVGQwW3QxID4+IDI0XSBeIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QyICYgMHhmZl0gXiBya1syNV07CisgICAgczIgPSBUZDBbdDIgPj4gMjRdIF4gVGQxWyh0MSA+PiAxNikgJiAweGZmXSBeIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDMgJiAweGZmXSBeIHJrWzI2XTsKKyAgICBzMyA9IFRkMFt0MyA+PiAyNF0gXiBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MCAmIDB4ZmZdIF4gcmtbMjddOworICAgIC8qIHJvdW5kIDc6ICovCisgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWzI4XTsKKyAgICB0MSA9IFRkMFtzMSA+PiAyNF0gXiBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMyA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMiAmIDB4ZmZdIF4gcmtbMjldOworICAgIHQyID0gVGQwW3MyID4+IDI0XSBeIFRkMVsoczEgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMwID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MzICYgMHhmZl0gXiBya1szMF07CisgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWzMxXTsKKyAgICAvKiByb3VuZCA4OiAqLworICAgIHMwID0gVGQwW3QwID4+IDI0XSBeIFRkMVsodDMgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQyID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QxICYgMHhmZl0gXiBya1szMl07CisgICAgczEgPSBUZDBbdDEgPj4gMjRdIF4gVGQxWyh0MCA+PiAxNikgJiAweGZmXSBeIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDIgJiAweGZmXSBeIHJrWzMzXTsKKyAgICBzMiA9IFRkMFt0MiA+PiAyNF0gXiBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MyAmIDB4ZmZdIF4gcmtbMzRdOworICAgIHMzID0gVGQwW3QzID4+IDI0XSBeIFRkMVsodDIgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQxID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QwICYgMHhmZl0gXiBya1szNV07CisgICAgLyogcm91bmQgOTogKi8KKyAgICB0MCA9IFRkMFtzMCA+PiAyNF0gXiBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMiA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMSAmIDB4ZmZdIF4gcmtbMzZdOworICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1szN107CisgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWzM4XTsKKyAgICB0MyA9IFRkMFtzMyA+PiAyNF0gXiBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMSA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMCAmIDB4ZmZdIF4gcmtbMzldOworICAgIGlmIChrZXktPnJvdW5kcyA+IDEwKSB7CisgICAgICAgIC8qIHJvdW5kIDEwOiAqLworICAgICAgICBzMCA9IFRkMFt0MCA+PiAyNF0gXiBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MiA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MSAmIDB4ZmZdIF4gcmtbNDBdOworICAgICAgICBzMSA9IFRkMFt0MSA+PiAyNF0gXiBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MyA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MiAmIDB4ZmZdIF4gcmtbNDFdOworICAgICAgICBzMiA9IFRkMFt0MiA+PiAyNF0gXiBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MyAmIDB4ZmZdIF4gcmtbNDJdOworICAgICAgICBzMyA9IFRkMFt0MyA+PiAyNF0gXiBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MSA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MCAmIDB4ZmZdIF4gcmtbNDNdOworICAgICAgICAvKiByb3VuZCAxMTogKi8KKyAgICAgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWzQ0XTsKKyAgICAgICAgdDEgPSBUZDBbczEgPj4gMjRdIF4gVGQxWyhzMCA+PiAxNikgJiAweGZmXSBeIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXiBUZDNbczIgJiAweGZmXSBeIHJrWzQ1XTsKKyAgICAgICAgdDIgPSBUZDBbczIgPj4gMjRdIF4gVGQxWyhzMSA+PiAxNikgJiAweGZmXSBeIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXiBUZDNbczMgJiAweGZmXSBeIHJrWzQ2XTsKKyAgICAgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWzQ3XTsKKyAgICAgICAgaWYgKGtleS0+cm91bmRzID4gMTIpIHsKKyAgICAgICAgICAgIC8qIHJvdW5kIDEyOiAqLworICAgICAgICAgICAgczAgPSBUZDBbdDAgPj4gMjRdIF4gVGQxWyh0MyA+PiAxNikgJiAweGZmXSBeIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDEgJiAweGZmXSBeIHJrWzQ4XTsKKyAgICAgICAgICAgIHMxID0gVGQwW3QxID4+IDI0XSBeIFRkMVsodDAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHQzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3QyICYgMHhmZl0gXiBya1s0OV07CisgICAgICAgICAgICBzMiA9IFRkMFt0MiA+PiAyNF0gXiBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyh0MCA+PiAgOCkgJiAweGZmXSBeIFRkM1t0MyAmIDB4ZmZdIF4gcmtbNTBdOworICAgICAgICAgICAgczMgPSBUZDBbdDMgPj4gMjRdIF4gVGQxWyh0MiA+PiAxNikgJiAweGZmXSBeIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXiBUZDNbdDAgJiAweGZmXSBeIHJrWzUxXTsKKyAgICAgICAgICAgIC8qIHJvdW5kIDEzOiAqLworICAgICAgICAgICAgdDAgPSBUZDBbczAgPj4gMjRdIF4gVGQxWyhzMyA+PiAxNikgJiAweGZmXSBeIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXiBUZDNbczEgJiAweGZmXSBeIHJrWzUyXTsKKyAgICAgICAgICAgIHQxID0gVGQwW3MxID4+IDI0XSBeIFRkMVsoczAgPj4gMTYpICYgMHhmZl0gXiBUZDJbKHMzID4+ICA4KSAmIDB4ZmZdIF4gVGQzW3MyICYgMHhmZl0gXiBya1s1M107CisgICAgICAgICAgICB0MiA9IFRkMFtzMiA+PiAyNF0gXiBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4gVGQyWyhzMCA+PiAgOCkgJiAweGZmXSBeIFRkM1tzMyAmIDB4ZmZdIF4gcmtbNTRdOworICAgICAgICAgICAgdDMgPSBUZDBbczMgPj4gMjRdIF4gVGQxWyhzMiA+PiAxNikgJiAweGZmXSBeIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXiBUZDNbczAgJiAweGZmXSBeIHJrWzU1XTsKKyAgICAgICAgfQorICAgIH0KKwlyayArPSBrZXktPnJvdW5kcyA8PCAyOworI2Vsc2UgIC8qICFGVUxMX1VOUk9MTCAqLworICAgIC8qCisgICAgICogTnIgLSAxIGZ1bGwgcm91bmRzOgorICAgICAqLworICAgIHIgPSBrZXktPnJvdW5kcyA+PiAxOworICAgIGZvciAoOzspIHsKKyAgICAgICAgdDAgPQorICAgICAgICAgICAgVGQwWyhzMCA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHMzID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsoczIgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyhzMSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s0XTsKKyAgICAgICAgdDEgPQorICAgICAgICAgICAgVGQwWyhzMSA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHMwID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsoczMgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyhzMiAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s1XTsKKyAgICAgICAgdDIgPQorICAgICAgICAgICAgVGQwWyhzMiA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHMxID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsoczAgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyhzMyAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s2XTsKKyAgICAgICAgdDMgPQorICAgICAgICAgICAgVGQwWyhzMyA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHMyID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsoczEgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyhzMCAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1s3XTsKKworICAgICAgICByayArPSA4OworICAgICAgICBpZiAoLS1yID09IDApIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgczAgPQorICAgICAgICAgICAgVGQwWyh0MCA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHQzID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsodDIgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyh0MSAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1swXTsKKyAgICAgICAgczEgPQorICAgICAgICAgICAgVGQwWyh0MSA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHQwID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsodDMgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyh0MiAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1sxXTsKKyAgICAgICAgczIgPQorICAgICAgICAgICAgVGQwWyh0MiA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHQxID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsodDAgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyh0MyAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1syXTsKKyAgICAgICAgczMgPQorICAgICAgICAgICAgVGQwWyh0MyA+PiAyNCkgICAgICAgXSBeCisgICAgICAgICAgICBUZDFbKHQyID4+IDE2KSAmIDB4ZmZdIF4KKyAgICAgICAgICAgIFRkMlsodDEgPj4gIDgpICYgMHhmZl0gXgorICAgICAgICAgICAgVGQzWyh0MCAgICAgICkgJiAweGZmXSBeCisgICAgICAgICAgICBya1szXTsKKyAgICB9CisjZW5kaWYgLyogP0ZVTExfVU5ST0xMICovCisgICAgLyoKKwkgKiBhcHBseSBsYXN0IHJvdW5kIGFuZAorCSAqIG1hcCBjaXBoZXIgc3RhdGUgdG8gYnl0ZSBhcnJheSBibG9jazoKKwkgKi8KKyAgIAlzMCA9CisgICAJCShUZDRbKHQwID4+IDI0KSAgICAgICBdIDw8IDI0KSBeCisgICAJCShUZDRbKHQzID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisgICAJCShUZDRbKHQyID4+ICA4KSAmIDB4ZmZdIDw8ICA4KSBeCisgICAJCShUZDRbKHQxICAgICAgKSAmIDB4ZmZdKSAgICAgICBeCisgICAJCXJrWzBdOworCVBVVFUzMihvdXQgICAgICwgczApOworICAgCXMxID0KKyAgIAkJKFRkNFsodDEgPj4gMjQpICAgICAgIF0gPDwgMjQpIF4KKyAgIAkJKFRkNFsodDAgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KKyAgIAkJKFRkNFsodDMgPj4gIDgpICYgMHhmZl0gPDwgIDgpIF4KKyAgIAkJKFRkNFsodDIgICAgICApICYgMHhmZl0pICAgICAgIF4KKyAgIAkJcmtbMV07CisJUFVUVTMyKG91dCArICA0LCBzMSk7CisgICAJczIgPQorICAgCQkoVGQ0Wyh0MiA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorICAgCQkoVGQ0Wyh0MSA+PiAxNikgJiAweGZmXSA8PCAxNikgXgorICAgCQkoVGQ0Wyh0MCA+PiAgOCkgJiAweGZmXSA8PCAgOCkgXgorICAgCQkoVGQ0Wyh0MyAgICAgICkgJiAweGZmXSkgICAgICAgXgorICAgCQlya1syXTsKKwlQVVRVMzIob3V0ICsgIDgsIHMyKTsKKyAgIAlzMyA9CisgICAJCShUZDRbKHQzID4+IDI0KSAgICAgICBdIDw8IDI0KSBeCisgICAJCShUZDRbKHQyID4+IDE2KSAmIDB4ZmZdIDw8IDE2KSBeCisgICAJCShUZDRbKHQxID4+ICA4KSAmIDB4ZmZdIDw8ICA4KSBeCisgICAJCShUZDRbKHQwICAgICAgKSAmIDB4ZmZdKSAgICAgICBeCisgICAJCXJrWzNdOworCVBVVFUzMihvdXQgKyAxMiwgczMpOworfQorCisjZWxzZSAvKiBBRVNfQVNNICovCisKK3N0YXRpYyBjb25zdCB1OCBUZTRbMjU2XSA9IHsKKyAgICAweDYzVSwgMHg3Y1UsIDB4NzdVLCAweDdiVSwgMHhmMlUsIDB4NmJVLCAweDZmVSwgMHhjNVUsCisgICAgMHgzMFUsIDB4MDFVLCAweDY3VSwgMHgyYlUsIDB4ZmVVLCAweGQ3VSwgMHhhYlUsIDB4NzZVLAorICAgIDB4Y2FVLCAweDgyVSwgMHhjOVUsIDB4N2RVLCAweGZhVSwgMHg1OVUsIDB4NDdVLCAweGYwVSwKKyAgICAweGFkVSwgMHhkNFUsIDB4YTJVLCAweGFmVSwgMHg5Y1UsIDB4YTRVLCAweDcyVSwgMHhjMFUsCisgICAgMHhiN1UsIDB4ZmRVLCAweDkzVSwgMHgyNlUsIDB4MzZVLCAweDNmVSwgMHhmN1UsIDB4Y2NVLAorICAgIDB4MzRVLCAweGE1VSwgMHhlNVUsIDB4ZjFVLCAweDcxVSwgMHhkOFUsIDB4MzFVLCAweDE1VSwKKyAgICAweDA0VSwgMHhjN1UsIDB4MjNVLCAweGMzVSwgMHgxOFUsIDB4OTZVLCAweDA1VSwgMHg5YVUsCisgICAgMHgwN1UsIDB4MTJVLCAweDgwVSwgMHhlMlUsIDB4ZWJVLCAweDI3VSwgMHhiMlUsIDB4NzVVLAorICAgIDB4MDlVLCAweDgzVSwgMHgyY1UsIDB4MWFVLCAweDFiVSwgMHg2ZVUsIDB4NWFVLCAweGEwVSwKKyAgICAweDUyVSwgMHgzYlUsIDB4ZDZVLCAweGIzVSwgMHgyOVUsIDB4ZTNVLCAweDJmVSwgMHg4NFUsCisgICAgMHg1M1UsIDB4ZDFVLCAweDAwVSwgMHhlZFUsIDB4MjBVLCAweGZjVSwgMHhiMVUsIDB4NWJVLAorICAgIDB4NmFVLCAweGNiVSwgMHhiZVUsIDB4MzlVLCAweDRhVSwgMHg0Y1UsIDB4NThVLCAweGNmVSwKKyAgICAweGQwVSwgMHhlZlUsIDB4YWFVLCAweGZiVSwgMHg0M1UsIDB4NGRVLCAweDMzVSwgMHg4NVUsCisgICAgMHg0NVUsIDB4ZjlVLCAweDAyVSwgMHg3ZlUsIDB4NTBVLCAweDNjVSwgMHg5ZlUsIDB4YThVLAorICAgIDB4NTFVLCAweGEzVSwgMHg0MFUsIDB4OGZVLCAweDkyVSwgMHg5ZFUsIDB4MzhVLCAweGY1VSwKKyAgICAweGJjVSwgMHhiNlUsIDB4ZGFVLCAweDIxVSwgMHgxMFUsIDB4ZmZVLCAweGYzVSwgMHhkMlUsCisgICAgMHhjZFUsIDB4MGNVLCAweDEzVSwgMHhlY1UsIDB4NWZVLCAweDk3VSwgMHg0NFUsIDB4MTdVLAorICAgIDB4YzRVLCAweGE3VSwgMHg3ZVUsIDB4M2RVLCAweDY0VSwgMHg1ZFUsIDB4MTlVLCAweDczVSwKKyAgICAweDYwVSwgMHg4MVUsIDB4NGZVLCAweGRjVSwgMHgyMlUsIDB4MmFVLCAweDkwVSwgMHg4OFUsCisgICAgMHg0NlUsIDB4ZWVVLCAweGI4VSwgMHgxNFUsIDB4ZGVVLCAweDVlVSwgMHgwYlUsIDB4ZGJVLAorICAgIDB4ZTBVLCAweDMyVSwgMHgzYVUsIDB4MGFVLCAweDQ5VSwgMHgwNlUsIDB4MjRVLCAweDVjVSwKKyAgICAweGMyVSwgMHhkM1UsIDB4YWNVLCAweDYyVSwgMHg5MVUsIDB4OTVVLCAweGU0VSwgMHg3OVUsCisgICAgMHhlN1UsIDB4YzhVLCAweDM3VSwgMHg2ZFUsIDB4OGRVLCAweGQ1VSwgMHg0ZVUsIDB4YTlVLAorICAgIDB4NmNVLCAweDU2VSwgMHhmNFUsIDB4ZWFVLCAweDY1VSwgMHg3YVUsIDB4YWVVLCAweDA4VSwKKyAgICAweGJhVSwgMHg3OFUsIDB4MjVVLCAweDJlVSwgMHgxY1UsIDB4YTZVLCAweGI0VSwgMHhjNlUsCisgICAgMHhlOFUsIDB4ZGRVLCAweDc0VSwgMHgxZlUsIDB4NGJVLCAweGJkVSwgMHg4YlUsIDB4OGFVLAorICAgIDB4NzBVLCAweDNlVSwgMHhiNVUsIDB4NjZVLCAweDQ4VSwgMHgwM1UsIDB4ZjZVLCAweDBlVSwKKyAgICAweDYxVSwgMHgzNVUsIDB4NTdVLCAweGI5VSwgMHg4NlUsIDB4YzFVLCAweDFkVSwgMHg5ZVUsCisgICAgMHhlMVUsIDB4ZjhVLCAweDk4VSwgMHgxMVUsIDB4NjlVLCAweGQ5VSwgMHg4ZVUsIDB4OTRVLAorICAgIDB4OWJVLCAweDFlVSwgMHg4N1UsIDB4ZTlVLCAweGNlVSwgMHg1NVUsIDB4MjhVLCAweGRmVSwKKyAgICAweDhjVSwgMHhhMVUsIDB4ODlVLCAweDBkVSwgMHhiZlUsIDB4ZTZVLCAweDQyVSwgMHg2OFUsCisgICAgMHg0MVUsIDB4OTlVLCAweDJkVSwgMHgwZlUsIDB4YjBVLCAweDU0VSwgMHhiYlUsIDB4MTZVCit9Oworc3RhdGljIGNvbnN0IHUzMiByY29uW10gPSB7CisJMHgwMTAwMDAwMCwgMHgwMjAwMDAwMCwgMHgwNDAwMDAwMCwgMHgwODAwMDAwMCwKKwkweDEwMDAwMDAwLCAweDIwMDAwMDAwLCAweDQwMDAwMDAwLCAweDgwMDAwMDAwLAorCTB4MUIwMDAwMDAsIDB4MzYwMDAwMDAsIC8qIGZvciAxMjgtYml0IGJsb2NrcywgUmlqbmRhZWwgbmV2ZXIgdXNlcyBtb3JlIHRoYW4gMTAgcmNvbiB2YWx1ZXMgKi8KK307CisKKy8qKgorICogRXhwYW5kIHRoZSBjaXBoZXIga2V5IGludG8gdGhlIGVuY3J5cHRpb24ga2V5IHNjaGVkdWxlLgorICovCitpbnQgQUVTX3NldF9lbmNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwkJCUFFU19LRVkgKmtleSkgeworCXUzMiAqcms7CisgICAJaW50IGkgPSAwOworCXUzMiB0ZW1wOworCisJaWYgKCF1c2VyS2V5IHx8ICFrZXkpCisJCXJldHVybiAtMTsKKwlpZiAoYml0cyAhPSAxMjggJiYgYml0cyAhPSAxOTIgJiYgYml0cyAhPSAyNTYpCisJCXJldHVybiAtMjsKKworCXJrID0ga2V5LT5yZF9rZXk7CisKKwlpZiAoYml0cz09MTI4KQorCQlrZXktPnJvdW5kcyA9IDEwOworCWVsc2UgaWYgKGJpdHM9PTE5MikKKwkJa2V5LT5yb3VuZHMgPSAxMjsKKwllbHNlCisJCWtleS0+cm91bmRzID0gMTQ7CisKKwlya1swXSA9IEdFVFUzMih1c2VyS2V5ICAgICApOworCXJrWzFdID0gR0VUVTMyKHVzZXJLZXkgKyAgNCk7CisJcmtbMl0gPSBHRVRVMzIodXNlcktleSArICA4KTsKKwlya1szXSA9IEdFVFUzMih1c2VyS2V5ICsgMTIpOworCWlmIChiaXRzID09IDEyOCkgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCAgPSBya1szXTsKKwkJCXJrWzRdID0gcmtbMF0gXgorCQkJCShUZTRbKHRlbXAgPj4gMTYpICYgMHhmZl0gPDwgMjQpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSA8PCA4KSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSkgXgorCQkJCXJjb25baV07CisJCQlya1s1XSA9IHJrWzFdIF4gcmtbNF07CisJCQlya1s2XSA9IHJrWzJdIF4gcmtbNV07CisJCQlya1s3XSA9IHJrWzNdIF4gcmtbNl07CisJCQlpZiAoKytpID09IDEwKSB7CisJCQkJcmV0dXJuIDA7CisJCQl9CisJCQlyayArPSA0OworCQl9CisJfQorCXJrWzRdID0gR0VUVTMyKHVzZXJLZXkgKyAxNik7CisJcmtbNV0gPSBHRVRVMzIodXNlcktleSArIDIwKTsKKwlpZiAoYml0cyA9PSAxOTIpIHsKKwkJd2hpbGUgKDEpIHsKKwkJCXRlbXAgPSBya1sgNV07CisJCQlya1sgNl0gPSBya1sgMF0gXgorCQkJCShUZTRbKHRlbXAgPj4gMTYpICYgMHhmZl0gPDwgMjQpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdIDw8IDE2KSBeCisJCQkJKFRlNFsodGVtcCAgICAgICkgJiAweGZmXSA8PCA4KSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSkgXgorCQkJCXJjb25baV07CisJCQlya1sgN10gPSBya1sgMV0gXiBya1sgNl07CisJCQlya1sgOF0gPSBya1sgMl0gXiBya1sgN107CisJCQlya1sgOV0gPSBya1sgM10gXiBya1sgOF07CisJCQlpZiAoKytpID09IDgpIHsKKwkJCQlyZXR1cm4gMDsKKwkJCX0KKwkJCXJrWzEwXSA9IHJrWyA0XSBeIHJrWyA5XTsKKwkJCXJrWzExXSA9IHJrWyA1XSBeIHJrWzEwXTsKKwkJCXJrICs9IDY7CisJCX0KKwl9CisJcmtbNl0gPSBHRVRVMzIodXNlcktleSArIDI0KTsKKwlya1s3XSA9IEdFVFUzMih1c2VyS2V5ICsgMjgpOworCWlmIChiaXRzID09IDI1NikgeworCQl3aGlsZSAoMSkgeworCQkJdGVtcCA9IHJrWyA3XTsKKwkJCXJrWyA4XSA9IHJrWyAwXSBeCisJCQkJKFRlNFsodGVtcCA+PiAxNikgJiAweGZmXSA8PCAyNCkgXgorCQkJCShUZTRbKHRlbXAgPj4gIDgpICYgMHhmZl0gPDwgMTYpIF4KKwkJCQkoVGU0Wyh0ZW1wICAgICAgKSAmIDB4ZmZdIDw8IDgpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+IDI0KSAgICAgICBdKSBeCisJCQkJcmNvbltpXTsKKwkJCXJrWyA5XSA9IHJrWyAxXSBeIHJrWyA4XTsKKwkJCXJrWzEwXSA9IHJrWyAyXSBeIHJrWyA5XTsKKwkJCXJrWzExXSA9IHJrWyAzXSBeIHJrWzEwXTsKKwkJCWlmICgrK2kgPT0gNykgeworCQkJCXJldHVybiAwOworCQkJfQorCQkJdGVtcCA9IHJrWzExXTsKKwkJCXJrWzEyXSA9IHJrWyA0XSBeCisJCQkJKFRlNFsodGVtcCA+PiAyNCkgICAgICAgXSA8PCAyNCkgXgorCQkJCShUZTRbKHRlbXAgPj4gMTYpICYgMHhmZl0gPDwgMTYpIF4KKwkJCQkoVGU0Wyh0ZW1wID4+ICA4KSAmIDB4ZmZdIDw8IDgpIF4KKwkJCQkoVGU0Wyh0ZW1wICAgICAgKSAmIDB4ZmZdKTsKKwkJCXJrWzEzXSA9IHJrWyA1XSBeIHJrWzEyXTsKKwkJCXJrWzE0XSA9IHJrWyA2XSBeIHJrWzEzXTsKKwkJCXJrWzE1XSA9IHJrWyA3XSBeIHJrWzE0XTsKKworCQkJcmsgKz0gODsKKyAgICAgICAgCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qKgorICogRXhwYW5kIHRoZSBjaXBoZXIga2V5IGludG8gdGhlIGRlY3J5cHRpb24ga2V5IHNjaGVkdWxlLgorICovCitpbnQgQUVTX3NldF9kZWNyeXB0X2tleShjb25zdCB1bnNpZ25lZCBjaGFyICp1c2VyS2V5LCBjb25zdCBpbnQgYml0cywKKwkJCSBBRVNfS0VZICprZXkpIHsKKworICAgICAgICB1MzIgKnJrOworCWludCBpLCBqLCBzdGF0dXM7CisJdTMyIHRlbXA7CisKKwkvKiBmaXJzdCwgc3RhcnQgd2l0aCBhbiBlbmNyeXB0aW9uIHNjaGVkdWxlICovCisJc3RhdHVzID0gQUVTX3NldF9lbmNyeXB0X2tleSh1c2VyS2V5LCBiaXRzLCBrZXkpOworCWlmIChzdGF0dXMgPCAwKQorCQlyZXR1cm4gc3RhdHVzOworCisJcmsgPSBrZXktPnJkX2tleTsKKworCS8qIGludmVydCB0aGUgb3JkZXIgb2YgdGhlIHJvdW5kIGtleXM6ICovCisJZm9yIChpID0gMCwgaiA9IDQqKGtleS0+cm91bmRzKTsgaSA8IGo7IGkgKz0gNCwgaiAtPSA0KSB7CisJCXRlbXAgPSBya1tpICAgIF07IHJrW2kgICAgXSA9IHJrW2ogICAgXTsgcmtbaiAgICBdID0gdGVtcDsKKwkJdGVtcCA9IHJrW2kgKyAxXTsgcmtbaSArIDFdID0gcmtbaiArIDFdOyBya1tqICsgMV0gPSB0ZW1wOworCQl0ZW1wID0gcmtbaSArIDJdOyBya1tpICsgMl0gPSBya1tqICsgMl07IHJrW2ogKyAyXSA9IHRlbXA7CisJCXRlbXAgPSBya1tpICsgM107IHJrW2kgKyAzXSA9IHJrW2ogKyAzXTsgcmtbaiArIDNdID0gdGVtcDsKKwl9CisJLyogYXBwbHkgdGhlIGludmVyc2UgTWl4Q29sdW1uIHRyYW5zZm9ybSB0byBhbGwgcm91bmQga2V5cyBidXQgdGhlIGZpcnN0IGFuZCB0aGUgbGFzdDogKi8KKwlmb3IgKGkgPSAxOyBpIDwgKGtleS0+cm91bmRzKTsgaSsrKSB7CisJCXJrICs9IDQ7CisJCWZvciAoaiA9IDA7IGogPCA0OyBqKyspIHsKKwkJCXUzMiB0cDEsIHRwMiwgdHA0LCB0cDgsIHRwOSwgdHBiLCB0cGQsIHRwZSwgbTsKKworCQkJdHAxID0gcmtbal07CisJCQltID0gdHAxICYgMHg4MDgwODA4MDsKKwkJCXRwMiA9ICgodHAxICYgMHg3ZjdmN2Y3ZikgPDwgMSkgXgorCQkJCSgobSAtIChtID4+IDcpKSAmIDB4MWIxYjFiMWIpOworCQkJbSA9IHRwMiAmIDB4ODA4MDgwODA7CisJCQl0cDQgPSAoKHRwMiAmIDB4N2Y3ZjdmN2YpIDw8IDEpIF4KKwkJCQkoKG0gLSAobSA+PiA3KSkgJiAweDFiMWIxYjFiKTsKKwkJCW0gPSB0cDQgJiAweDgwODA4MDgwOworCQkJdHA4ID0gKCh0cDQgJiAweDdmN2Y3ZjdmKSA8PCAxKSBeCisJCQkJKChtIC0gKG0gPj4gNykpICYgMHgxYjFiMWIxYik7CisJCQl0cDkgPSB0cDggXiB0cDE7CisJCQl0cGIgPSB0cDkgXiB0cDI7CisJCQl0cGQgPSB0cDkgXiB0cDQ7CisJCQl0cGUgPSB0cDggXiB0cDQgXiB0cDI7CisjaWYgZGVmaW5lZChST1RBVEUpCisJCQlya1tqXSA9IHRwZSBeIFJPVEFURSh0cGQsMTYpIF4KKwkJCQlST1RBVEUodHA5LDI0KSBeIFJPVEFURSh0cGIsOCk7CisjZWxzZQorCQkJcmtbal0gPSB0cGUgXiAodHBkID4+IDE2KSBeICh0cGQgPDwgMTYpIF4gCisJCQkJKHRwOSA+PiA4KSBeICh0cDkgPDwgMjQpIF4KKwkJCQkodHBiID4+IDI0KSBeICh0cGIgPDwgOCk7CisjZW5kaWYKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworI2VuZGlmIC8qIEFFU19BU00gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfYWVzX2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE5ODMyZQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Flc19sb2NhbC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qIGNyeXB0by9hZXMvYWVzLmggLSotIG1vZGU6QzsgYy1maWxlLXN0eWxlOiAiZWF5IiAtKi0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBUaGUgT3BlblNTTCBQcm9qZWN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCisgKiAgICBzb2Z0d2FyZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdC4gKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiA0LiBUaGUgbmFtZXMgIk9wZW5TU0wgVG9vbGtpdCIgYW5kICJPcGVuU1NMIFByb2plY3QiIG11c3Qgbm90IGJlIHVzZWQgdG8KKyAqICAgIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgKiAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgKiAgICBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIk9wZW5TU0wiCisgKiAgICBub3IgbWF5ICJPcGVuU1NMIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgKiAgICBwZXJtaXNzaW9uIG9mIHRoZSBPcGVuU1NMIFByb2plY3QuCisgKgorICogNi4gUmVkaXN0cmlidXRpb25zIG9mIGFueSBmb3JtIHdoYXRzb2V2ZXIgbXVzdCByZXRhaW4gdGhlIGZvbGxvd2luZworICogICAgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQgKGh0dHA6Ly93d3cub3BlbnNzbC5vcmcvKSIKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPcGVuU1NMIFBST0pFQ1QgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPcGVuU1NMIFBST0pFQ1QgT1IKKyAqIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorICogT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqCisgKi8KKworI2lmbmRlZiBIRUFERVJfQUVTX0xPQ0xfSAorI2RlZmluZSBIRUFERVJfQUVTX0xPQ0xfSAorCisjaWZkZWYgT1BFTlNTTF9OT19BRVMKKyNlcnJvciBBRVMgaXMgZGlzYWJsZWQuCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKSAmJiAoZGVmaW5lZChfTV9JWDg2KSB8fCBkZWZpbmVkKF9NX0FNRDY0KSB8fCBkZWZpbmVkKF9NX1g2NCkpCisjIGRlZmluZSBTV0FQKHgpIChfbHJvdGwoeCwgOCkgJiAweDAwZmYwMGZmIHwgX2xyb3RyKHgsIDgpICYgMHhmZjAwZmYwMCkKKyMgZGVmaW5lIEdFVFUzMihwKSBTV0FQKCooKHUzMiAqKShwKSkpCisjIGRlZmluZSBQVVRVMzIoY3QsIHN0KSB7ICooKHUzMiAqKShjdCkpID0gU1dBUCgoc3QpKTsgfQorI2Vsc2UKKyMgZGVmaW5lIEdFVFUzMihwdCkgKCgodTMyKShwdClbMF0gPDwgMjQpIF4gKCh1MzIpKHB0KVsxXSA8PCAxNikgXiAoKHUzMikocHQpWzJdIDw8ICA4KSBeICgodTMyKShwdClbM10pKQorIyBkZWZpbmUgUFVUVTMyKGN0LCBzdCkgeyAoY3QpWzBdID0gKHU4KSgoc3QpID4+IDI0KTsgKGN0KVsxXSA9ICh1OCkoKHN0KSA+PiAxNik7IChjdClbMl0gPSAodTgpKChzdCkgPj4gIDgpOyAoY3QpWzNdID0gKHU4KShzdCk7IH0KKyNlbmRpZgorCisjaWZkZWYgQUVTX0xPTkcKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyB1MzI7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBpbnQgdTMyOworI2VuZGlmCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHUxNjsKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKKworI2RlZmluZSBNQVhLQyAgICgyNTYvMzIpCisjZGVmaW5lIE1BWEtCICAgKDI1Ni84KQorI2RlZmluZSBNQVhOUiAgIDE0CisKKy8qIFRoaXMgY29udHJvbHMgbG9vcC11bnJvbGxpbmcgaW4gYWVzX2NvcmUuYyAqLworI3VuZGVmIEZVTExfVU5ST0xMCisKKyNlbmRpZiAvKiAhSEVBREVSX0FFU19MT0NMX0ggKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NiY19lbmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTFkZjgzCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2JjX2VuYy5jCkBAIC0wLDAgKzEsNjEgQEAKKy8qIGNyeXB0by9kZXMvY2JjX2VuYy5jICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNkZWZpbmUgQ0JDX0VOQ19DX19ET05UX1VQREFURV9JVgorCisjaW5jbHVkZSAib3BlbnNzbF9uY2JjX2VuYy5jIiAvKiBkZXNfY2JjX2VuY3J5cHQgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfY2ZiMTI4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUwYmMxZQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2NmYjEyOC5jCkBAIC0wLDAgKzEsMjUwIEBACisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAyMDA4IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIG9wZW5zc2wtY29yZUBvcGVuc3NsLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5vcGVuc3NsLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisjaW5jbHVkZSAib3BlbnNzbF9tb2Rlcy5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIE1PREVTX0RFQlVHCisjIGlmbmRlZiBOREVCVUcKKyMgIGRlZmluZSBOREVCVUcKKyMgZW5kaWYKKyNlbmRpZgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjZGVmaW5lIFNUUklDVF9BTElHTk1FTlQKKyNpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgXAorICAgIGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgXAorICAgIGRlZmluZWQoX01fSVg4NikgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpIHx8IFwKKyAgICBkZWZpbmVkKF9fczM5MF9fKSB8fCBkZWZpbmVkKF9fczM5MHhfXykKKyMgIHVuZGVmIFNUUklDVF9BTElHTk1FTlQKKyNlbmRpZgorCisvKiBUaGUgaW5wdXQgYW5kIG91dHB1dCBlbmNyeXB0ZWQgYXMgdGhvdWdoIDEyOGJpdCBjZmIgbW9kZSBpcyBiZWluZworICogdXNlZC4gIFRoZSBleHRyYSBzdGF0ZSBpbmZvcm1hdGlvbiB0byByZWNvcmQgaG93IG11Y2ggb2YgdGhlCisgKiAxMjhiaXQgYmxvY2sgd2UgaGF2ZSB1c2VkIGlzIGNvbnRhaW5lZCBpbiAqbnVtOworICovCit2b2lkIENSWVBUT19jZmIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlpbnQgZW5jLCBibG9jazEyOF9mIGJsb2NrKQoreworICAgIHVuc2lnbmVkIGludCBuOworICAgIHNpemVfdCBsID0gMDsKKworICAgIGFzc2VydChpbiAmJiBvdXQgJiYga2V5ICYmIGl2ZWMgJiYgbnVtKTsKKworICAgIG4gPSAqbnVtOworCisgICAgaWYgKGVuYykgeworI2lmICFkZWZpbmVkKE9QRU5TU0xfU01BTExfRk9PVFBSSU5UKQorCWlmICgxNiVzaXplb2Yoc2l6ZV90KSA9PSAwKSBkbyB7CS8qIGFsd2F5cyB0cnVlIGFjdHVhbGx5ICovCisJCXdoaWxlIChuICYmIGxlbikgeworCQkJKihvdXQrKykgPSBpdmVjW25dIF49ICooaW4rKyk7CisJCQktLWxlbjsKKwkJCW4gPSAobisxKSAlIDE2OworCQl9CisjaWYgZGVmaW5lZChTVFJJQ1RfQUxJR05NRU5UKQorCQlpZiAoKChzaXplX3QpaW58KHNpemVfdClvdXR8KHNpemVfdClpdmVjKSVzaXplb2Yoc2l6ZV90KSAhPSAwKQorCQkJYnJlYWs7CisjZW5kaWYKKwkJd2hpbGUgKGxlbj49MTYpIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCQlmb3IgKG49MDsgbjwxNjsgbis9c2l6ZW9mKHNpemVfdCkpIHsKKwkJCQkqKHNpemVfdCopKG91dCtuKSA9CisJCQkJKihzaXplX3QqKShpdmVjK24pIF49ICooY29uc3Qgc2l6ZV90KikoaW4rbik7CisJCQl9CisJCQlsZW4gLT0gMTY7CisJCQlvdXQgKz0gMTY7CisJCQlpbiAgKz0gMTY7CisJCX0KKwkJbiA9IDA7CisJCWlmIChsZW4pIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCQl3aGlsZSAobGVuLS0pIHsKKwkJCQlvdXRbbl0gPSBpdmVjW25dIF49IGluW25dOworCQkJCSsrbjsKKwkJCX0KKwkJfQorCQkqbnVtID0gbjsKKwkJcmV0dXJuOworCX0gd2hpbGUgKDApOworCS8qIHRoZSByZXN0IHdvdWxkIGJlIGNvbW1vbmx5IGVsaW1pbmF0ZWQgYnkgeDg2KiBjb21waWxlciAqLworI2VuZGlmCisJd2hpbGUgKGw8bGVuKSB7CisJCWlmIChuID09IDApIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCX0KKwkJb3V0W2xdID0gaXZlY1tuXSBePSBpbltsXTsKKwkJKytsOworCQluID0gKG4rMSkgJSAxNjsKKwl9CisJKm51bSA9IG47CisgICAgfSBlbHNlIHsKKyNpZiAhZGVmaW5lZChPUEVOU1NMX1NNQUxMX0ZPT1RQUklOVCkKKwlpZiAoMTYlc2l6ZW9mKHNpemVfdCkgPT0gMCkgZG8gewkvKiBhbHdheXMgdHJ1ZSBhY3R1YWxseSAqLworCQl3aGlsZSAobiAmJiBsZW4pIHsKKwkJCXVuc2lnbmVkIGNoYXIgYzsKKwkJCSoob3V0KyspID0gaXZlY1tuXSBeIChjID0gKihpbisrKSk7IGl2ZWNbbl0gPSBjOworCQkJLS1sZW47CisJCQluID0gKG4rMSkgJSAxNjsKKyAJCX0KKyNpZiBkZWZpbmVkKFNUUklDVF9BTElHTk1FTlQpCisJCWlmICgoKHNpemVfdClpbnwoc2l6ZV90KW91dHwoc2l6ZV90KWl2ZWMpJXNpemVvZihzaXplX3QpICE9IDApCisJCQlicmVhazsKKyNlbmRpZgorCQl3aGlsZSAobGVuPj0xNikgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJCWZvciAobj0wOyBuPDE2OyBuKz1zaXplb2Yoc2l6ZV90KSkgeworCQkJCXNpemVfdCB0ID0gKihjb25zdCBzaXplX3QqKShpbituKTsKKwkJCQkqKHNpemVfdCopKG91dCtuKSA9ICooY29uc3Qgc2l6ZV90KikoaXZlYytuKSBeIHQ7CisJCQkJKihzaXplX3QqKShpdmVjK24pID0gdDsKKwkJCX0KKwkJCWxlbiAtPSAxNjsKKwkJCW91dCArPSAxNjsKKwkJCWluICArPSAxNjsKKwkJfQorCQluID0gMDsKKwkJaWYgKGxlbikgeworCQkJKCpibG9jaykoaXZlYywgaXZlYywga2V5KTsKKwkJCXdoaWxlIChsZW4tLSkgeworCQkJCXVuc2lnbmVkIGNoYXIgYzsKKwkJCQlvdXRbbl0gPSBpdmVjW25dIF4gKGMgPSBpbltuXSk7IGl2ZWNbbl0gPSBjOworCQkJCSsrbjsKKwkJCX0KKyAJCX0KKwkJKm51bSA9IG47CisJCXJldHVybjsKKwl9IHdoaWxlICgwKTsKKwkvKiB0aGUgcmVzdCB3b3VsZCBiZSBjb21tb25seSBlbGltaW5hdGVkIGJ5IHg4NiogY29tcGlsZXIgKi8KKyNlbmRpZgorCXdoaWxlIChsPGxlbikgeworCQl1bnNpZ25lZCBjaGFyIGM7CisJCWlmIChuID09IDApIHsKKwkJCSgqYmxvY2spKGl2ZWMsIGl2ZWMsIGtleSk7CisJCX0KKwkJb3V0W2xdID0gaXZlY1tuXSBeIChjID0gaW5bbF0pOyBpdmVjW25dID0gYzsKKwkJKytsOworCQluID0gKG4rMSkgJSAxNjsKKwl9CisJKm51bT1uOworICAgIH0KK30KKworLyogVGhpcyBleHBlY3RzIGEgc2luZ2xlIGJsb2NrIG9mIHNpemUgbmJpdHMgZm9yIGJvdGggaW4gYW5kIG91dC4gTm90ZSB0aGF0CisgICBpdCBjb3JydXB0cyBhbnkgZXh0cmEgYml0cyBpbiB0aGUgbGFzdCBieXRlIG9mIG91dCAqLworc3RhdGljIHZvaWQgY2Zicl9lbmNyeXB0X2Jsb2NrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCSAgICBpbnQgbmJpdHMsY29uc3Qgdm9pZCAqa2V5LAorCQkJICAgIHVuc2lnbmVkIGNoYXIgaXZlY1sxNl0saW50IGVuYywKKwkJCSAgICBibG9jazEyOF9mIGJsb2NrKQoreworICAgIGludCBuLHJlbSxudW07CisgICAgdW5zaWduZWQgY2hhciBvdmVjWzE2KjIgKyAxXTsgIC8qICsxIGJlY2F1c2Ugd2UgZGVyZXJlZmVuY2UgKGJ1dCBkb24ndCB1c2UpIG9uZSBieXRlIG9mZiB0aGUgZW5kICovCisKKyAgICBpZiAobmJpdHM8PTAgfHwgbmJpdHM+MTI4KSByZXR1cm47CisKKwkvKiBmaWxsIGluIHRoZSBmaXJzdCBoYWxmIG9mIHRoZSBuZXcgSVYgd2l0aCB0aGUgY3VycmVudCBJViAqLworCW1lbWNweShvdmVjLGl2ZWMsMTYpOworCS8qIGNvbnN0cnVjdCB0aGUgbmV3IElWICovCisJKCpibG9jaykoaXZlYyxpdmVjLGtleSk7CisJbnVtID0gKG5iaXRzKzcpLzg7CisJaWYgKGVuYykJLyogZW5jcnlwdCB0aGUgaW5wdXQgKi8KKwkgICAgZm9yKG49MCA7IG4gPCBudW0gOyArK24pCisJCW91dFtuXSA9IChvdmVjWzE2K25dID0gaW5bbl0gXiBpdmVjW25dKTsKKwllbHNlCQkvKiBkZWNyeXB0IHRoZSBpbnB1dCAqLworCSAgICBmb3Iobj0wIDsgbiA8IG51bSA7ICsrbikKKwkJb3V0W25dID0gKG92ZWNbMTYrbl0gPSBpbltuXSkgXiBpdmVjW25dOworCS8qIHNoaWZ0IG92ZWMgbGVmdC4uLiAqLworCXJlbSA9IG5iaXRzJTg7CisJbnVtID0gbmJpdHMvODsKKwlpZihyZW09PTApCisJICAgIG1lbWNweShpdmVjLG92ZWMrbnVtLDE2KTsKKwllbHNlCisJICAgIGZvcihuPTAgOyBuIDwgMTYgOyArK24pCisJCWl2ZWNbbl0gPSBvdmVjW24rbnVtXTw8cmVtIHwgb3ZlY1tuK251bSsxXT4+KDgtcmVtKTsKKworICAgIC8qIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY2xlYW5zZSBvdmVjLCBzaW5jZSB0aGUgSVYgaXMgbm90IHNlY3JldCAqLworfQorCisvKiBOLkIuIFRoaXMgZXhwZWN0cyB0aGUgaW5wdXQgdG8gYmUgcGFja2VkLCBNUyBiaXQgZmlyc3QgKi8KK3ZvaWQgQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJIAlzaXplX3QgYml0cywgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlpbnQgZW5jLCBibG9jazEyOF9mIGJsb2NrKQoreworICAgIHNpemVfdCBuOworICAgIHVuc2lnbmVkIGNoYXIgY1sxXSxkWzFdOworCisgICAgYXNzZXJ0KGluICYmIG91dCAmJiBrZXkgJiYgaXZlYyAmJiBudW0pOworICAgIGFzc2VydCgqbnVtID09IDApOworCisgICAgbWVtc2V0KG91dCwwLChiaXRzKzcpLzgpOworICAgIGZvcihuPTAgOyBuPGJpdHMgOyArK24pCisJeworCWNbMF09KGluW24vOF0mKDEgPDwgKDctbiU4KSkpID8gMHg4MCA6IDA7CisJY2Zicl9lbmNyeXB0X2Jsb2NrKGMsZCwxLGtleSxpdmVjLGVuYyxibG9jayk7CisJb3V0W24vOF09KG91dFtuLzhdJn4oMSA8PCAodW5zaWduZWQgaW50KSg3LW4lOCkpKSB8CisJCSAoKGRbMF0mMHg4MCkgPj4gKHVuc2lnbmVkIGludCkobiU4KSk7CisJfQorfQorCit2b2lkIENSWVBUT19jZmIxMjhfOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuZ3RoLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spCit7CisgICAgc2l6ZV90IG47CisKKyAgICBhc3NlcnQoaW4gJiYgb3V0ICYmIGtleSAmJiBpdmVjICYmIG51bSk7CisgICAgYXNzZXJ0KCpudW0gPT0gMCk7CisKKyAgICBmb3Iobj0wIDsgbjxsZW5ndGggOyArK24pCisJY2Zicl9lbmNyeXB0X2Jsb2NrKCZpbltuXSwmb3V0W25dLDgsa2V5LGl2ZWMsZW5jLGJsb2NrKTsKK30KKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2VuYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNzBmOWMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9kZXNfZW5jLmMKQEAgLTAsMCArMSw0MDAgQEAKKy8qIGNyeXB0by9kZXMvZGVzX2VuYy5jICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpbmNsdWRlICJvcGVuc3NsX2Rlc19sb2NhbC5oIgorI2luY2x1ZGUgIm9wZW5zc2xfc3ByLmgiCisKK3ZvaWQgREVTX2VuY3J5cHQxKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprcywgaW50IGVuYykKKwl7CisJcmVnaXN0ZXIgREVTX0xPTkcgbCxyLHQsdTsKKyNpZmRlZiBERVNfUFRSCisJcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZGVzX1NQPShjb25zdCB1bnNpZ25lZCBjaGFyICopREVTX1NQdHJhbnM7CisjZW5kaWYKKyNpZm5kZWYgREVTX1VOUk9MTAorCXJlZ2lzdGVyIGludCBpOworI2VuZGlmCisJcmVnaXN0ZXIgREVTX0xPTkcgKnM7CisKKwlyPWRhdGFbMF07CisJbD1kYXRhWzFdOworCisJSVAocixsKTsKKwkvKiBUaGluZ3MgaGF2ZSBiZWVuIG1vZGlmaWVkIHNvIHRoYXQgdGhlIGluaXRpYWwgcm90YXRlIGlzCisJICogZG9uZSBvdXRzaWRlIHRoZSBsb29wLiAgVGhpcyByZXF1aXJlZCB0aGUKKwkgKiBERVNfU1B0cmFucyB2YWx1ZXMgaW4gc3AuaCB0byBiZSByb3RhdGVkIDEgYml0IHRvIHRoZSByaWdodC4KKwkgKiBPbmUgcGVybCBzY3JpcHQgbGF0ZXIgYW5kIHRoaW5ncyBoYXZlIGEgNSUgc3BlZWQgdXAgb24gYSBzcGFyYzIuCisJICogVGhhbmtzIHRvIFJpY2hhcmQgT3V0ZXJicmlkZ2UgPDcxNzU1LjIwNEBDb21wdVNlcnZlLkNPTT4KKwkgKiBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuICovCisJLyogY2xlYXIgdGhlIHRvcCBiaXRzIG9uIG1hY2hpbmVzIHdpdGggOGJ5dGUgbG9uZ3MgKi8KKwkvKiBzaGlmdCBsZWZ0IGJ5IDIgKi8KKwlyPVJPVEFURShyLDI5KSYweGZmZmZmZmZmTDsKKwlsPVJPVEFURShsLDI5KSYweGZmZmZmZmZmTDsKKworCXM9a3MtPmtzLT5kZXNsb25nOworCS8qIEkgZG9uJ3Qga25vdyBpZiBpdCBpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGxvb3AgdW5yb2xsaW5nIHRoZQorCSAqIGlubmVyIGxvb3AgKi8KKwlpZiAoZW5jKQorCQl7CisjaWZkZWYgREVTX1VOUk9MTAorCQlEX0VOQ1JZUFQobCxyLCAwKTsgLyogIDEgKi8KKwkJRF9FTkNSWVBUKHIsbCwgMik7IC8qICAyICovCisJCURfRU5DUllQVChsLHIsIDQpOyAvKiAgMyAqLworCQlEX0VOQ1JZUFQocixsLCA2KTsgLyogIDQgKi8KKwkJRF9FTkNSWVBUKGwsciwgOCk7IC8qICA1ICovCisJCURfRU5DUllQVChyLGwsMTApOyAvKiAgNiAqLworCQlEX0VOQ1JZUFQobCxyLDEyKTsgLyogIDcgKi8KKwkJRF9FTkNSWVBUKHIsbCwxNCk7IC8qICA4ICovCisJCURfRU5DUllQVChsLHIsMTYpOyAvKiAgOSAqLworCQlEX0VOQ1JZUFQocixsLDE4KTsgLyogIDEwICovCisJCURfRU5DUllQVChsLHIsMjApOyAvKiAgMTEgKi8KKwkJRF9FTkNSWVBUKHIsbCwyMik7IC8qICAxMiAqLworCQlEX0VOQ1JZUFQobCxyLDI0KTsgLyogIDEzICovCisJCURfRU5DUllQVChyLGwsMjYpOyAvKiAgMTQgKi8KKwkJRF9FTkNSWVBUKGwsciwyOCk7IC8qICAxNSAqLworCQlEX0VOQ1JZUFQocixsLDMwKTsgLyogIDE2ICovCisjZWxzZQorCQlmb3IgKGk9MDsgaTwzMjsgaSs9NCkKKwkJCXsKKwkJCURfRU5DUllQVChsLHIsaSswKTsgLyogIDEgKi8KKwkJCURfRU5DUllQVChyLGwsaSsyKTsgLyogIDIgKi8KKwkJCX0KKyNlbmRpZgorCQl9CisJZWxzZQorCQl7CisjaWZkZWYgREVTX1VOUk9MTAorCQlEX0VOQ1JZUFQobCxyLDMwKTsgLyogMTYgKi8KKwkJRF9FTkNSWVBUKHIsbCwyOCk7IC8qIDE1ICovCisJCURfRU5DUllQVChsLHIsMjYpOyAvKiAxNCAqLworCQlEX0VOQ1JZUFQocixsLDI0KTsgLyogMTMgKi8KKwkJRF9FTkNSWVBUKGwsciwyMik7IC8qIDEyICovCisJCURfRU5DUllQVChyLGwsMjApOyAvKiAxMSAqLworCQlEX0VOQ1JZUFQobCxyLDE4KTsgLyogMTAgKi8KKwkJRF9FTkNSWVBUKHIsbCwxNik7IC8qICA5ICovCisJCURfRU5DUllQVChsLHIsMTQpOyAvKiAgOCAqLworCQlEX0VOQ1JZUFQocixsLDEyKTsgLyogIDcgKi8KKwkJRF9FTkNSWVBUKGwsciwxMCk7IC8qICA2ICovCisJCURfRU5DUllQVChyLGwsIDgpOyAvKiAgNSAqLworCQlEX0VOQ1JZUFQobCxyLCA2KTsgLyogIDQgKi8KKwkJRF9FTkNSWVBUKHIsbCwgNCk7IC8qICAzICovCisJCURfRU5DUllQVChsLHIsIDIpOyAvKiAgMiAqLworCQlEX0VOQ1JZUFQocixsLCAwKTsgLyogIDEgKi8KKyNlbHNlCisJCWZvciAoaT0zMDsgaT4wOyBpLT00KQorCQkJeworCQkJRF9FTkNSWVBUKGwscixpLTApOyAvKiAxNiAqLworCQkJRF9FTkNSWVBUKHIsbCxpLTIpOyAvKiAxNSAqLworCQkJfQorI2VuZGlmCisJCX0KKworCS8qIHJvdGF0ZSBhbmQgY2xlYXIgdGhlIHRvcCBiaXRzIG9uIG1hY2hpbmVzIHdpdGggOGJ5dGUgbG9uZ3MgKi8KKwlsPVJPVEFURShsLDMpJjB4ZmZmZmZmZmZMOworCXI9Uk9UQVRFKHIsMykmMHhmZmZmZmZmZkw7CisKKwlGUChyLGwpOworCWRhdGFbMF09bDsKKwlkYXRhWzFdPXI7CisJbD1yPXQ9dT0wOworCX0KKwordm9pZCBERVNfZW5jcnlwdDIoREVTX0xPTkcgKmRhdGEsIERFU19rZXlfc2NoZWR1bGUgKmtzLCBpbnQgZW5jKQorCXsKKwlyZWdpc3RlciBERVNfTE9ORyBsLHIsdCx1OworI2lmZGVmIERFU19QVFIKKwlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpkZXNfU1A9KGNvbnN0IHVuc2lnbmVkIGNoYXIgKilERVNfU1B0cmFuczsKKyNlbmRpZgorI2lmbmRlZiBERVNfVU5ST0xMCisJcmVnaXN0ZXIgaW50IGk7CisjZW5kaWYKKwlyZWdpc3RlciBERVNfTE9ORyAqczsKKworCXI9ZGF0YVswXTsKKwlsPWRhdGFbMV07CisKKwkvKiBUaGluZ3MgaGF2ZSBiZWVuIG1vZGlmaWVkIHNvIHRoYXQgdGhlIGluaXRpYWwgcm90YXRlIGlzCisJICogZG9uZSBvdXRzaWRlIHRoZSBsb29wLiAgVGhpcyByZXF1aXJlZCB0aGUKKwkgKiBERVNfU1B0cmFucyB2YWx1ZXMgaW4gc3AuaCB0byBiZSByb3RhdGVkIDEgYml0IHRvIHRoZSByaWdodC4KKwkgKiBPbmUgcGVybCBzY3JpcHQgbGF0ZXIgYW5kIHRoaW5ncyBoYXZlIGEgNSUgc3BlZWQgdXAgb24gYSBzcGFyYzIuCisJICogVGhhbmtzIHRvIFJpY2hhcmQgT3V0ZXJicmlkZ2UgPDcxNzU1LjIwNEBDb21wdVNlcnZlLkNPTT4KKwkgKiBmb3IgcG9pbnRpbmcgdGhpcyBvdXQuICovCisJLyogY2xlYXIgdGhlIHRvcCBiaXRzIG9uIG1hY2hpbmVzIHdpdGggOGJ5dGUgbG9uZ3MgKi8KKwlyPVJPVEFURShyLDI5KSYweGZmZmZmZmZmTDsKKwlsPVJPVEFURShsLDI5KSYweGZmZmZmZmZmTDsKKworCXM9a3MtPmtzLT5kZXNsb25nOworCS8qIEkgZG9uJ3Qga25vdyBpZiBpdCBpcyB3b3J0aCB0aGUgZWZmb3J0IG9mIGxvb3AgdW5yb2xsaW5nIHRoZQorCSAqIGlubmVyIGxvb3AgKi8KKwlpZiAoZW5jKQorCQl7CisjaWZkZWYgREVTX1VOUk9MTAorCQlEX0VOQ1JZUFQobCxyLCAwKTsgLyogIDEgKi8KKwkJRF9FTkNSWVBUKHIsbCwgMik7IC8qICAyICovCisJCURfRU5DUllQVChsLHIsIDQpOyAvKiAgMyAqLworCQlEX0VOQ1JZUFQocixsLCA2KTsgLyogIDQgKi8KKwkJRF9FTkNSWVBUKGwsciwgOCk7IC8qICA1ICovCisJCURfRU5DUllQVChyLGwsMTApOyAvKiAgNiAqLworCQlEX0VOQ1JZUFQobCxyLDEyKTsgLyogIDcgKi8KKwkJRF9FTkNSWVBUKHIsbCwxNCk7IC8qICA4ICovCisJCURfRU5DUllQVChsLHIsMTYpOyAvKiAgOSAqLworCQlEX0VOQ1JZUFQocixsLDE4KTsgLyogIDEwICovCisJCURfRU5DUllQVChsLHIsMjApOyAvKiAgMTEgKi8KKwkJRF9FTkNSWVBUKHIsbCwyMik7IC8qICAxMiAqLworCQlEX0VOQ1JZUFQobCxyLDI0KTsgLyogIDEzICovCisJCURfRU5DUllQVChyLGwsMjYpOyAvKiAgMTQgKi8KKwkJRF9FTkNSWVBUKGwsciwyOCk7IC8qICAxNSAqLworCQlEX0VOQ1JZUFQocixsLDMwKTsgLyogIDE2ICovCisjZWxzZQorCQlmb3IgKGk9MDsgaTwzMjsgaSs9NCkKKwkJCXsKKwkJCURfRU5DUllQVChsLHIsaSswKTsgLyogIDEgKi8KKwkJCURfRU5DUllQVChyLGwsaSsyKTsgLyogIDIgKi8KKwkJCX0KKyNlbmRpZgorCQl9CisJZWxzZQorCQl7CisjaWZkZWYgREVTX1VOUk9MTAorCQlEX0VOQ1JZUFQobCxyLDMwKTsgLyogMTYgKi8KKwkJRF9FTkNSWVBUKHIsbCwyOCk7IC8qIDE1ICovCisJCURfRU5DUllQVChsLHIsMjYpOyAvKiAxNCAqLworCQlEX0VOQ1JZUFQocixsLDI0KTsgLyogMTMgKi8KKwkJRF9FTkNSWVBUKGwsciwyMik7IC8qIDEyICovCisJCURfRU5DUllQVChyLGwsMjApOyAvKiAxMSAqLworCQlEX0VOQ1JZUFQobCxyLDE4KTsgLyogMTAgKi8KKwkJRF9FTkNSWVBUKHIsbCwxNik7IC8qICA5ICovCisJCURfRU5DUllQVChsLHIsMTQpOyAvKiAgOCAqLworCQlEX0VOQ1JZUFQocixsLDEyKTsgLyogIDcgKi8KKwkJRF9FTkNSWVBUKGwsciwxMCk7IC8qICA2ICovCisJCURfRU5DUllQVChyLGwsIDgpOyAvKiAgNSAqLworCQlEX0VOQ1JZUFQobCxyLCA2KTsgLyogIDQgKi8KKwkJRF9FTkNSWVBUKHIsbCwgNCk7IC8qICAzICovCisJCURfRU5DUllQVChsLHIsIDIpOyAvKiAgMiAqLworCQlEX0VOQ1JZUFQocixsLCAwKTsgLyogIDEgKi8KKyNlbHNlCisJCWZvciAoaT0zMDsgaT4wOyBpLT00KQorCQkJeworCQkJRF9FTkNSWVBUKGwscixpLTApOyAvKiAxNiAqLworCQkJRF9FTkNSWVBUKHIsbCxpLTIpOyAvKiAxNSAqLworCQkJfQorI2VuZGlmCisJCX0KKwkvKiByb3RhdGUgYW5kIGNsZWFyIHRoZSB0b3AgYml0cyBvbiBtYWNoaW5lcyB3aXRoIDhieXRlIGxvbmdzICovCisJZGF0YVswXT1ST1RBVEUobCwzKSYweGZmZmZmZmZmTDsKKwlkYXRhWzFdPVJPVEFURShyLDMpJjB4ZmZmZmZmZmZMOworCWw9cj10PXU9MDsKKwl9CisKK3ZvaWQgREVTX2VuY3J5cHQzKERFU19MT05HICpkYXRhLCBERVNfa2V5X3NjaGVkdWxlICprczEsCisJCSAgREVTX2tleV9zY2hlZHVsZSAqa3MyLCBERVNfa2V5X3NjaGVkdWxlICprczMpCisJeworCXJlZ2lzdGVyIERFU19MT05HIGwscjsKKworCWw9ZGF0YVswXTsKKwlyPWRhdGFbMV07CisJSVAobCxyKTsKKwlkYXRhWzBdPWw7CisJZGF0YVsxXT1yOworCURFU19lbmNyeXB0MigoREVTX0xPTkcgKilkYXRhLGtzMSxERVNfRU5DUllQVCk7CisJREVTX2VuY3J5cHQyKChERVNfTE9ORyAqKWRhdGEsa3MyLERFU19ERUNSWVBUKTsKKwlERVNfZW5jcnlwdDIoKERFU19MT05HICopZGF0YSxrczMsREVTX0VOQ1JZUFQpOworCWw9ZGF0YVswXTsKKwlyPWRhdGFbMV07CisJRlAocixsKTsKKwlkYXRhWzBdPWw7CisJZGF0YVsxXT1yOworCX0KKwordm9pZCBERVNfZGVjcnlwdDMoREVTX0xPTkcgKmRhdGEsIERFU19rZXlfc2NoZWR1bGUgKmtzMSwKKwkJICBERVNfa2V5X3NjaGVkdWxlICprczIsIERFU19rZXlfc2NoZWR1bGUgKmtzMykKKwl7CisJcmVnaXN0ZXIgREVTX0xPTkcgbCxyOworCisJbD1kYXRhWzBdOworCXI9ZGF0YVsxXTsKKwlJUChsLHIpOworCWRhdGFbMF09bDsKKwlkYXRhWzFdPXI7CisJREVTX2VuY3J5cHQyKChERVNfTE9ORyAqKWRhdGEsa3MzLERFU19ERUNSWVBUKTsKKwlERVNfZW5jcnlwdDIoKERFU19MT05HICopZGF0YSxrczIsREVTX0VOQ1JZUFQpOworCURFU19lbmNyeXB0MigoREVTX0xPTkcgKilkYXRhLGtzMSxERVNfREVDUllQVCk7CisJbD1kYXRhWzBdOworCXI9ZGF0YVsxXTsKKwlGUChyLGwpOworCWRhdGFbMF09bDsKKwlkYXRhWzFdPXI7CisJfQorCisjaWZuZGVmIERFU19ERUZBVUxUX09QVElPTlMKKworI3VuZGVmIENCQ19FTkNfQ19fRE9OVF9VUERBVEVfSVYKKyNpbmNsdWRlICJvcGVuc3NsX25jYmNfZW5jLmMiIC8qIERFU19uY2JjX2VuY3J5cHQgKi8KKwordm9pZCBERVNfZWRlM19jYmNfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbnB1dCwgdW5zaWduZWQgY2hhciAqb3V0cHV0LAorCQkJICBsb25nIGxlbmd0aCwgREVTX2tleV9zY2hlZHVsZSAqa3MxLAorCQkJICBERVNfa2V5X3NjaGVkdWxlICprczIsIERFU19rZXlfc2NoZWR1bGUgKmtzMywKKwkJCSAgREVTX2NibG9jayAqaXZlYywgaW50IGVuYykKKwl7CisJcmVnaXN0ZXIgREVTX0xPTkcgdGluMCx0aW4xOworCXJlZ2lzdGVyIERFU19MT05HIHRvdXQwLHRvdXQxLHhvcjAseG9yMTsKKwlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICppbjsKKwl1bnNpZ25lZCBjaGFyICpvdXQ7CisJcmVnaXN0ZXIgbG9uZyBsPWxlbmd0aDsKKwlERVNfTE9ORyB0aW5bMl07CisJdW5zaWduZWQgY2hhciAqaXY7CisKKwlpbj1pbnB1dDsKKwlvdXQ9b3V0cHV0OworCWl2ID0gJigqaXZlYylbMF07CisKKwlpZiAoZW5jKQorCQl7CisJCWMybChpdix0b3V0MCk7CisJCWMybChpdix0b3V0MSk7CisJCWZvciAobC09ODsgbD49MDsgbC09OCkKKwkJCXsKKwkJCWMybChpbix0aW4wKTsKKwkJCWMybChpbix0aW4xKTsKKwkJCXRpbjBePXRvdXQwOworCQkJdGluMV49dG91dDE7CisKKwkJCXRpblswXT10aW4wOworCQkJdGluWzFdPXRpbjE7CisJCQlERVNfZW5jcnlwdDMoKERFU19MT05HICopdGluLGtzMSxrczIsa3MzKTsKKwkJCXRvdXQwPXRpblswXTsKKwkJCXRvdXQxPXRpblsxXTsKKworCQkJbDJjKHRvdXQwLG91dCk7CisJCQlsMmModG91dDEsb3V0KTsKKwkJCX0KKwkJaWYgKGwgIT0gLTgpCisJCQl7CisJCQljMmxuKGluLHRpbjAsdGluMSxsKzgpOworCQkJdGluMF49dG91dDA7CisJCQl0aW4xXj10b3V0MTsKKworCQkJdGluWzBdPXRpbjA7CisJCQl0aW5bMV09dGluMTsKKwkJCURFU19lbmNyeXB0MygoREVTX0xPTkcgKil0aW4sa3MxLGtzMixrczMpOworCQkJdG91dDA9dGluWzBdOworCQkJdG91dDE9dGluWzFdOworCisJCQlsMmModG91dDAsb3V0KTsKKwkJCWwyYyh0b3V0MSxvdXQpOworCQkJfQorCQlpdiA9ICYoKml2ZWMpWzBdOworCQlsMmModG91dDAsaXYpOworCQlsMmModG91dDEsaXYpOworCQl9CisJZWxzZQorCQl7CisJCXJlZ2lzdGVyIERFU19MT05HIHQwLHQxOworCisJCWMybChpdix4b3IwKTsKKwkJYzJsKGl2LHhvcjEpOworCQlmb3IgKGwtPTg7IGw+PTA7IGwtPTgpCisJCQl7CisJCQljMmwoaW4sdGluMCk7CisJCQljMmwoaW4sdGluMSk7CisKKwkJCXQwPXRpbjA7CisJCQl0MT10aW4xOworCisJCQl0aW5bMF09dGluMDsKKwkJCXRpblsxXT10aW4xOworCQkJREVTX2RlY3J5cHQzKChERVNfTE9ORyAqKXRpbixrczEsa3MyLGtzMyk7CisJCQl0b3V0MD10aW5bMF07CisJCQl0b3V0MT10aW5bMV07CisKKwkJCXRvdXQwXj14b3IwOworCQkJdG91dDFePXhvcjE7CisJCQlsMmModG91dDAsb3V0KTsKKwkJCWwyYyh0b3V0MSxvdXQpOworCQkJeG9yMD10MDsKKwkJCXhvcjE9dDE7CisJCQl9CisJCWlmIChsICE9IC04KQorCQkJeworCQkJYzJsKGluLHRpbjApOworCQkJYzJsKGluLHRpbjEpOworCQkJCisJCQl0MD10aW4wOworCQkJdDE9dGluMTsKKworCQkJdGluWzBdPXRpbjA7CisJCQl0aW5bMV09dGluMTsKKwkJCURFU19kZWNyeXB0MygoREVTX0xPTkcgKil0aW4sa3MxLGtzMixrczMpOworCQkJdG91dDA9dGluWzBdOworCQkJdG91dDE9dGluWzFdOworCQkKKwkJCXRvdXQwXj14b3IwOworCQkJdG91dDFePXhvcjE7CisJCQlsMmNuKHRvdXQwLHRvdXQxLG91dCxsKzgpOworCQkJeG9yMD10MDsKKwkJCXhvcjE9dDE7CisJCQl9CisKKwkJaXYgPSAmKCppdmVjKVswXTsKKwkJbDJjKHhvcjAsaXYpOworCQlsMmMoeG9yMSxpdik7CisJCX0KKwl0aW4wPXRpbjE9dG91dDA9dG91dDE9eG9yMD14b3IxPTA7CisJdGluWzBdPXRpblsxXT0wOworCX0KKworI2VuZGlmIC8qIERFU19ERUZBVUxUX09QVElPTlMgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfZGVzX2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkxZDg0NAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX2Rlc19sb2NhbC5oCkBAIC0wLDAgKzEsNDMxIEBACisvKiBjcnlwdG8vZGVzL2Rlc19sb2NsLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk3IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2lmbmRlZiBIRUFERVJfREVTX0xPQ0xfSAorI2RlZmluZSBIRUFERVJfREVTX0xPQ0xfSAorCisjaWYgZGVmaW5lZChPUEVOU1NMX1NZU19XSU4zMikKKyNpZm5kZWYgT1BFTlNTTF9TWVNfTVNET1MKKyNkZWZpbmUgT1BFTlNTTF9TWVNfTVNET1MKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaWZuZGVmIE9QRU5TU0xfU1lTX01TRE9TCisjaWYgIWRlZmluZWQoT1BFTlNTTF9TWVNfVk1TKSB8fCBkZWZpbmVkKF9fREVDQykKKyNpZmRlZiBPUEVOU1NMX1VOSVNURAorIyBpbmNsdWRlIE9QRU5TU0xfVU5JU1RECisjZWxzZQorIyBpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPG1hdGguaD4KKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfZGVzLmg+CisKKyNpZmRlZiBPUEVOU1NMX1NZU19NU0RPUwkJLyogVmlzdWFsIEMrKyAyLjEgKFdpbmRvd3MgTlQvOTUpICovCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8aW8uaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19WTVMpIHx8IGRlZmluZWQoTV9YRU5JWCkgfHwgZGVmaW5lZChPUEVOU1NMX1NZU19NU0RPUykKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWZkZWYgT1BFTlNTTF9CVUlMRF9TSExJQkNSWVBUTworIyB1bmRlZiBPUEVOU1NMX0VYVEVSTgorIyBkZWZpbmUgT1BFTlNTTF9FWFRFUk4gT1BFTlNTTF9FWFBPUlQKKyNlbmRpZgorCisjZGVmaW5lIElURVJBVElPTlMgMTYKKyNkZWZpbmUgSEFMRl9JVEVSQVRJT05TIDgKKworLyogdXNlZCBpbiBkZXNfcmVhZCBhbmQgZGVzX3dyaXRlICovCisjZGVmaW5lIE1BWFdSSVRFCSgxMDI0KjE2KQorI2RlZmluZSBCU0laRQkJKE1BWFdSSVRFKzQpCisKKyNkZWZpbmUgYzJsKGMsbCkJKGwgPSgoREVTX0xPTkcpKCooKGMpKyspKSkgICAgLCBcCisJCQkgbHw9KChERVNfTE9ORykoKigoYykrKykpKTw8IDhMLCBcCisJCQkgbHw9KChERVNfTE9ORykoKigoYykrKykpKTw8MTZMLCBcCisJCQkgbHw9KChERVNfTE9ORykoKigoYykrKykpKTw8MjRMKQorCisvKiBOT1RFIC0gYyBpcyBub3QgaW5jcmVtZW50ZWQgYXMgcGVyIGMybCAqLworI2RlZmluZSBjMmxuKGMsbDEsbDIsbikJeyBcCisJCQljKz1uOyBcCisJCQlsMT1sMj0wOyBcCisJCQlzd2l0Y2ggKG4pIHsgXAorCQkJY2FzZSA4OiBsMiA9KChERVNfTE9ORykoKigtLShjKSkpKTw8MjRMOyBcCisJCQljYXNlIDc6IGwyfD0oKERFU19MT05HKSgqKC0tKGMpKSkpPDwxNkw7IFwKKwkJCWNhc2UgNjogbDJ8PSgoREVTX0xPTkcpKCooLS0oYykpKSk8PCA4TDsgXAorCQkJY2FzZSA1OiBsMnw9KChERVNfTE9ORykoKigtLShjKSkpKTsgICAgIFwKKwkJCWNhc2UgNDogbDEgPSgoREVTX0xPTkcpKCooLS0oYykpKSk8PDI0TDsgXAorCQkJY2FzZSAzOiBsMXw9KChERVNfTE9ORykoKigtLShjKSkpKTw8MTZMOyBcCisJCQljYXNlIDI6IGwxfD0oKERFU19MT05HKSgqKC0tKGMpKSkpPDwgOEw7IFwKKwkJCWNhc2UgMTogbDF8PSgoREVTX0xPTkcpKCooLS0oYykpKSk7ICAgICBcCisJCQkJfSBcCisJCQl9CisKKyNkZWZpbmUgbDJjKGwsYykJKCooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpICAgICApJjB4ZmYpLCBcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PiA4TCkmMHhmZiksIFwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MTZMKSYweGZmKSwgXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4yNEwpJjB4ZmYpKQorCisvKiByZXBsYWNlbWVudHMgZm9yIGh0b25sIGFuZCBudG9obCBzaW5jZSBJIGhhdmUgbm8gaWRlYSB3aGF0IHRvIGRvCisgKiB3aGVuIGZhY2VkIHdpdGggbWFjaGluZXMgd2l0aCA4IGJ5dGUgbG9uZ3MuICovCisjZGVmaW5lIEhEUlNJWkUgNAorCisjZGVmaW5lIG4ybChjLGwpCShsID0oKERFU19MT05HKSgqKChjKSsrKSkpPDwyNEwsIFwKKwkJCSBsfD0oKERFU19MT05HKSgqKChjKSsrKSkpPDwxNkwsIFwKKwkJCSBsfD0oKERFU19MT05HKSgqKChjKSsrKSkpPDwgOEwsIFwKKwkJCSBsfD0oKERFU19MT05HKSgqKChjKSsrKSkpKQorCisjZGVmaW5lIGwybihsLGMpCSgqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjRMKSYweGZmKSwgXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4xNkwpJjB4ZmYpLCBcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PiA4TCkmMHhmZiksIFwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKSAgICAgKSYweGZmKSkKKworLyogTk9URSAtIGMgaXMgbm90IGluY3JlbWVudGVkIGFzIHBlciBsMmMgKi8KKyNkZWZpbmUgbDJjbihsMSxsMixjLG4pCXsgXAorCQkJYys9bjsgXAorCQkJc3dpdGNoIChuKSB7IFwKKwkJCWNhc2UgODogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDIpPj4yNEwpJjB4ZmYpOyBcCisJCQljYXNlIDc6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwyKT4+MTZMKSYweGZmKTsgXAorCQkJY2FzZSA2OiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMik+PiA4TCkmMHhmZik7IFwKKwkJCWNhc2UgNTogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDIpICAgICApJjB4ZmYpOyBcCisJCQljYXNlIDQ6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwxKT4+MjRMKSYweGZmKTsgXAorCQkJY2FzZSAzOiAqKC0tKGMpKT0odW5zaWduZWQgY2hhcikoKChsMSk+PjE2TCkmMHhmZik7IFwKKwkJCWNhc2UgMjogKigtLShjKSk9KHVuc2lnbmVkIGNoYXIpKCgobDEpPj4gOEwpJjB4ZmYpOyBcCisJCQljYXNlIDE6ICooLS0oYykpPSh1bnNpZ25lZCBjaGFyKSgoKGwxKSAgICAgKSYweGZmKTsgXAorCQkJCX0gXAorCQkJfQorCisjaWYgKGRlZmluZWQoT1BFTlNTTF9TWVNfV0lOMzIpICYmIGRlZmluZWQoX01TQ19WRVIpKSB8fCBkZWZpbmVkKF9fSUNDKQorI2RlZmluZQlST1RBVEUoYSxuKQkoX2xyb3RyKGEsbikpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXz49MiAmJiAhZGVmaW5lZChfX1NUUklDVF9BTlNJX18pICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0lOTElORV9BU00pICYmICFkZWZpbmVkKFBFREFOVElDKQorIyBpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgZGVmaW5lIFJPVEFURShhLG4pCSh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXQ7CVwKKwkJCQlhc20gKCJyb3JsICUxLCUwIglcCisJCQkJCTogIj1yIihyZXQpCVwKKwkJCQkJOiAiSSIobiksIjAiKGEpCVwKKwkJCQkJOiAiY2MiKTsJXAorCQkJICAgcmV0OwkJCQlcCisJCQl9KQorIyBlbmRpZgorI2VuZGlmCisjaWZuZGVmIFJPVEFURQorI2RlZmluZQlST1RBVEUoYSxuKQkoKChhKT4+KG4pKSsoKGEpPDwoMzItKG4pKSkpCisjZW5kaWYKKworLyogRG9uJ3Qgd29ycnkgYWJvdXQgdGhlIExPQURfREFUQSgpIHN0dWZmLCB0aGF0IGlzIHVzZWQgYnkKKyAqIGZjcnlwdCgpIHRvIGFkZCBpdCdzIGxpdHRsZSBiaXQgdG8gdGhlIGZyb250ICovCisKKyNpZmRlZiBERVNfRkNSWVBUCisKKyNkZWZpbmUgTE9BRF9EQVRBX3RtcChSLFMsdSx0LEUwLEUxKSBcCisJeyBERVNfTE9ORyB0bXA7IExPQURfREFUQShSLFMsdSx0LEUwLEUxLHRtcCk7IH0KKworI2RlZmluZSBMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx0bXApIFwKKwl0PVJeKFI+PjE2TCk7IFwKKwl1PXQmRTA7IHQmPUUxOyBcCisJdG1wPSh1PDwxNik7IHVePVJec1tTICBdOyB1Xj10bXA7IFwKKwl0bXA9KHQ8PDE2KTsgdF49Ul5zW1MrMV07IHRePXRtcAorI2Vsc2UKKyNkZWZpbmUgTE9BRF9EQVRBX3RtcChhLGIsYyxkLGUsZikgTE9BRF9EQVRBKGEsYixjLGQsZSxmLGcpCisjZGVmaW5lIExPQURfREFUQShSLFMsdSx0LEUwLEUxLHRtcCkgXAorCXU9Ul5zW1MgIF07IFwKKwl0PVJec1tTKzFdCisjZW5kaWYKKworLyogVGhlIGNoYW5nZXMgdG8gdGhpcyBtYWNybyBtYXkgaGVscCBvciBoaW5kZXIsIGRlcGVuZGluZyBvbiB0aGUKKyAqIGNvbXBpbGVyIGFuZCB0aGUgYXJjaGl0ZWN0dXJlLiAgZ2NjMiBhbHdheXMgc2VlbXMgdG8gZG8gd2VsbCA6LSkuCisgKiBJbnNwaXJlZCBieSBEYW5hIEhvdyA8aG93QGlzbC5zdGFuZm9yZC5lZHU+CisgKiBETyBOT1QgdXNlIHRoZSBhbHRlcm5hdGl2ZSB2ZXJzaW9uIG9uIG1hY2hpbmVzIHdpdGggOCBieXRlIGxvbmdzLgorICogSXQgZG9lcyBub3Qgc2VlbSB0byB3b3JrIG9uIHRoZSBBbHBoYSwgZXZlbiB3aGVuIERFU19MT05HIGlzIDQKKyAqIGJ5dGVzLCBwcm9iYWJseSBhbiBpc3N1ZSBvZiBhY2Nlc3Npbmcgbm9uLXdvcmQgYWxpZ25lZCBvYmplY3RzIDotKCAqLworI2lmZGVmIERFU19QVFIKKworLyogSXQgcmVjZW50bHkgb2NjdXJyZWQgdG8gbWUgdGhhdCAwXjBeMF4wXjBeMF4wID09IDAsIHNvIHRoZXJlCisgKiBpcyBubyByZWFzb24gdG8gbm90IHhvciBhbGwgdGhlIHN1YiBpdGVtcyB0b2dldGhlci4gIFRoaXMgcG90ZW50aWFsbHkKKyAqIHNhdmVzIGEgcmVnaXN0ZXIgc2luY2UgdGhpbmdzIGNhbiBiZSB4b3JlZCBkaXJlY3RseSBpbnRvIEwgKi8KKworI2lmIGRlZmluZWQoREVTX1JJU0MxKSB8fCBkZWZpbmVkKERFU19SSVNDMikKKyNpZmRlZiBERVNfUklTQzEKKyNkZWZpbmUgRF9FTkNSWVBUKExMLFIsUykgeyBcCisJdW5zaWduZWQgaW50IHUxLHUyLHUzOyBcCisJTE9BRF9EQVRBKFIsUyx1LHQsRTAsRTEsdTEpOyBcCisJdTI9KGludCl1Pj44TDsgXAorCXUxPShpbnQpdSYweGZjOyBcCisJdTImPTB4ZmM7IFwKKwl0PVJPVEFURSh0LDQpOyBcCisJdT4+PTE2TDsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1AgICAgICArdTEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDIwMCt1Mik7IFwKKwl1Mz0oaW50KSh1Pj44TCk7IFwKKwl1MT0oaW50KXUmMHhmYzsgXAorCXUzJj0weGZjOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDQwMCt1MSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NjAwK3UzKTsgXAorCXUyPShpbnQpdD4+OEw7IFwKKwl1MT0oaW50KXQmMHhmYzsgXAorCXUyJj0weGZjOyBcCisJdD4+PTE2TDsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgxMDArdTEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDMwMCt1Mik7IFwKKwl1Mz0oaW50KXQ+PjhMOyBcCisJdTE9KGludCl0JjB4ZmM7IFwKKwl1MyY9MHhmYzsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg1MDArdTEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDcwMCt1Myk7IH0KKyNlbmRpZgorI2lmZGVmIERFU19SSVNDMgorI2RlZmluZSBEX0VOQ1JZUFQoTEwsUixTKSB7IFwKKwl1bnNpZ25lZCBpbnQgdTEsdTIsczEsczI7IFwKKwlMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx1MSk7IFwKKwl1Mj0oaW50KXU+PjhMOyBcCisJdTE9KGludCl1JjB4ZmM7IFwKKwl1MiY9MHhmYzsgXAorCXQ9Uk9UQVRFKHQsNCk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQICAgICAgK3UxKTsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgyMDArdTIpOyBcCisJczE9KGludCkodT4+MTZMKTsgXAorCXMyPShpbnQpKHU+PjI0TCk7IFwKKwlzMSY9MHhmYzsgXAorCXMyJj0weGZjOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDQwMCtzMSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NjAwK3MyKTsgXAorCXUyPShpbnQpdD4+OEw7IFwKKwl1MT0oaW50KXQmMHhmYzsgXAorCXUyJj0weGZjOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDEwMCt1MSk7IFwKKwlMTF49ICooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MzAwK3UyKTsgXAorCXMxPShpbnQpKHQ+PjE2TCk7IFwKKwlzMj0oaW50KSh0Pj4yNEwpOyBcCisJczEmPTB4ZmM7IFwKKwlzMiY9MHhmYzsgXAorCUxMXj0gKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg1MDArczEpOyBcCisJTExePSAqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDcwMCtzMik7IH0KKyNlbmRpZgorI2Vsc2UKKyNkZWZpbmUgRF9FTkNSWVBUKExMLFIsUykgeyBcCisJTE9BRF9EQVRBX3RtcChSLFMsdSx0LEUwLEUxKTsgXAorCXQ9Uk9UQVRFKHQsNCk7IFwKKwlMTF49IFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCAgICAgICsoKHUgICAgICkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgyMDArKCh1Pj4gOEwpJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4NDAwKygodT4+MTZMKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDYwMCsoKHU+PjI0TCkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHgxMDArKCh0ICAgICApJjB4ZmMpKV4gXAorCSooY29uc3QgREVTX0xPTkcgKikoZGVzX1NQKzB4MzAwKygodD4+IDhMKSYweGZjKSleIFwKKwkqKGNvbnN0IERFU19MT05HICopKGRlc19TUCsweDUwMCsoKHQ+PjE2TCkmMHhmYykpXiBcCisJKihjb25zdCBERVNfTE9ORyAqKShkZXNfU1ArMHg3MDArKCh0Pj4yNEwpJjB4ZmMpKTsgfQorI2VuZGlmCisKKyNlbHNlIC8qIG9yaWdpbmFsIHZlcnNpb24gKi8KKworI2lmIGRlZmluZWQoREVTX1JJU0MxKSB8fCBkZWZpbmVkKERFU19SSVNDMikKKyNpZmRlZiBERVNfUklTQzEKKyNkZWZpbmUgRF9FTkNSWVBUKExMLFIsUykge1wKKwl1bnNpZ25lZCBpbnQgdTEsdTIsdTM7IFwKKwlMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx1MSk7IFwKKwl1Pj49Mkw7IFwKKwl0PVJPVEFURSh0LDYpOyBcCisJdTI9KGludCl1Pj44TDsgXAorCXUxPShpbnQpdSYweDNmOyBcCisJdTImPTB4M2Y7IFwKKwl1Pj49MTZMOyBcCisJTExePURFU19TUHRyYW5zWzBdW3UxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1syXVt1Ml07IFwKKwl1Mz0oaW50KXU+PjhMOyBcCisJdTE9KGludCl1JjB4M2Y7IFwKKwl1MyY9MHgzZjsgXAorCUxMXj1ERVNfU1B0cmFuc1s0XVt1MV07IFwKKwlMTF49REVTX1NQdHJhbnNbNl1bdTNdOyBcCisJdTI9KGludCl0Pj44TDsgXAorCXUxPShpbnQpdCYweDNmOyBcCisJdTImPTB4M2Y7IFwKKwl0Pj49MTZMOyBcCisJTExePURFU19TUHRyYW5zWzFdW3UxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1szXVt1Ml07IFwKKwl1Mz0oaW50KXQ+PjhMOyBcCisJdTE9KGludCl0JjB4M2Y7IFwKKwl1MyY9MHgzZjsgXAorCUxMXj1ERVNfU1B0cmFuc1s1XVt1MV07IFwKKwlMTF49REVTX1NQdHJhbnNbN11bdTNdOyB9CisjZW5kaWYKKyNpZmRlZiBERVNfUklTQzIKKyNkZWZpbmUgRF9FTkNSWVBUKExMLFIsUykge1wKKwl1bnNpZ25lZCBpbnQgdTEsdTIsczEsczI7IFwKKwlMT0FEX0RBVEEoUixTLHUsdCxFMCxFMSx1MSk7IFwKKwl1Pj49Mkw7IFwKKwl0PVJPVEFURSh0LDYpOyBcCisJdTI9KGludCl1Pj44TDsgXAorCXUxPShpbnQpdSYweDNmOyBcCisJdTImPTB4M2Y7IFwKKwlMTF49REVTX1NQdHJhbnNbMF1bdTFdOyBcCisJTExePURFU19TUHRyYW5zWzJdW3UyXTsgXAorCXMxPShpbnQpdT4+MTZMOyBcCisJczI9KGludCl1Pj4yNEw7IFwKKwlzMSY9MHgzZjsgXAorCXMyJj0weDNmOyBcCisJTExePURFU19TUHRyYW5zWzRdW3MxXTsgXAorCUxMXj1ERVNfU1B0cmFuc1s2XVtzMl07IFwKKwl1Mj0oaW50KXQ+PjhMOyBcCisJdTE9KGludCl0JjB4M2Y7IFwKKwl1MiY9MHgzZjsgXAorCUxMXj1ERVNfU1B0cmFuc1sxXVt1MV07IFwKKwlMTF49REVTX1NQdHJhbnNbM11bdTJdOyBcCisJczE9KGludCl0Pj4xNjsgXAorCXMyPShpbnQpdD4+MjRMOyBcCisJczEmPTB4M2Y7IFwKKwlzMiY9MHgzZjsgXAorCUxMXj1ERVNfU1B0cmFuc1s1XVtzMV07IFwKKwlMTF49REVTX1NQdHJhbnNbN11bczJdOyB9CisjZW5kaWYKKworI2Vsc2UKKworI2RlZmluZSBEX0VOQ1JZUFQoTEwsUixTKSB7XAorCUxPQURfREFUQV90bXAoUixTLHUsdCxFMCxFMSk7IFwKKwl0PVJPVEFURSh0LDQpOyBcCisJTExePVwKKwkJREVTX1NQdHJhbnNbMF1bKHU+PiAyTCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbMl1bKHU+PjEwTCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbNF1bKHU+PjE4TCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbNl1bKHU+PjI2TCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbMV1bKHQ+PiAyTCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbM11bKHQ+PjEwTCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbNV1bKHQ+PjE4TCkmMHgzZl1eIFwKKwkJREVTX1NQdHJhbnNbN11bKHQ+PjI2TCkmMHgzZl07IH0KKyNlbmRpZgorI2VuZGlmCisKKwkvKiBJUCBhbmQgRlAKKwkgKiBUaGUgcHJvYmxlbSBpcyBtb3JlIG9mIGEgZ2VvbWV0cmljIHByb2JsZW0gdGhhdCByYW5kb20gYml0IGZpZGRsaW5nLgorCSAwICAxICAyICAzICA0ICA1ICA2ICA3ICAgICAgNjIgNTQgNDYgMzggMzAgMjIgMTQgIDYKKwkgOCAgOSAxMCAxMSAxMiAxMyAxNCAxNSAgICAgIDYwIDUyIDQ0IDM2IDI4IDIwIDEyICA0CisJMTYgMTcgMTggMTkgMjAgMjEgMjIgMjMgICAgICA1OCA1MCA0MiAzNCAyNiAxOCAxMCAgMgorCTI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxICB0byAgNTYgNDggNDAgMzIgMjQgMTYgIDggIDAKKworCTMyIDMzIDM0IDM1IDM2IDM3IDM4IDM5ICAgICAgNjMgNTUgNDcgMzkgMzEgMjMgMTUgIDcKKwk0MCA0MSA0MiA0MyA0NCA0NSA0NiA0NyAgICAgIDYxIDUzIDQ1IDM3IDI5IDIxIDEzICA1CisJNDggNDkgNTAgNTEgNTIgNTMgNTQgNTUgICAgICA1OSA1MSA0MyAzNSAyNyAxOSAxMSAgMworCTU2IDU3IDU4IDU5IDYwIDYxIDYyIDYzICAgICAgNTcgNDkgNDEgMzMgMjUgMTcgIDkgIDEKKworCVRoZSBvdXRwdXQgaGFzIGJlZW4gc3ViamVjdCB0byBzd2FwcyBvZiB0aGUgZm9ybQorCTAgMSAtPiAzIDEgYnV0IHRoZSBvZGQgYW5kIGV2ZW4gYml0cyBoYXZlIGJlZW4gcHV0IGludG8KKwkyIDMgICAgMiAwCisJZGlmZmVyZW50IHdvcmRzLiAgVGhlIG1haW4gdHJpY2sgaXMgdG8gcmVtZW1iZXIgdGhhdAorCXQ9KChsPj5zaXplKV5yKSYobWFzayk7CisJcl49dDsKKwlsXj0odDw8c2l6ZSk7CisJY2FuIGJlIHVzZWQgdG8gc3dhcCBhbmQgbW92ZSBiaXRzIGJldHdlZW4gd29yZHMuCisKKwlTbyBsID0gIDAgIDEgIDIgIDMgIHIgPSAxNiAxNyAxOCAxOQorCSAgICAgICAgNCAgNSAgNiAgNyAgICAgIDIwIDIxIDIyIDIzCisJICAgICAgICA4ICA5IDEwIDExICAgICAgMjQgMjUgMjYgMjcKKwkgICAgICAgMTIgMTMgMTQgMTUgICAgICAyOCAyOSAzMCAzMQorCWJlY29tZXMgKGZvciBzaXplID09IDIgYW5kIG1hc2sgPT0gMHgzMzMzKQorCSAgIHQgPSAgIDJeMTYgIDNeMTcgLS0gLS0gICBsID0gIDAgIDEgMTYgMTcgIHIgPSAgMiAgMyAxOCAxOQorCQkgNl4yMCAgN14yMSAtLSAtLSAgICAgICAgNCAgNSAyMCAyMSAgICAgICA2ICA3IDIyIDIzCisJCTEwXjI0IDExXjI1IC0tIC0tICAgICAgICA4ICA5IDI0IDI1ICAgICAgMTAgMTEgMjQgMjUKKwkJMTReMjggMTVeMjkgLS0gLS0gICAgICAgMTIgMTMgMjggMjkgICAgICAxNCAxNSAyOCAyOQorCisJVGhhbmtzIGZvciBoaW50cyBmcm9tIFJpY2hhcmQgT3V0ZXJicmlkZ2UgLSBoZSB0b2xkIG1lIElQJkZQCisJY291bGQgYmUgZG9uZSBpbiAxNSB4b3IsIDEwIHNoaWZ0cyBhbmQgNSBhbmRzLgorCVdoZW4gSSBmaW5hbGx5IHN0YXJ0ZWQgdG8gdGhpbmsgb2YgdGhlIHByb2JsZW0gaW4gMkQKKwlJIGZpcnN0IGdvdCB+NDIgb3BlcmF0aW9ucyB3aXRob3V0IHhvcnMuICBXaGVuIEkgcmVtZW1iZXJlZAorCWhvdyB0byB1c2UgeG9ycyA6LSkgSSBnb3QgaXQgdG8gaXRzIGZpbmFsIHN0YXRlLgorCSovCisjZGVmaW5lIFBFUk1fT1AoYSxiLHQsbixtKSAoKHQpPSgoKChhKT4+KG4pKV4oYikpJihtKSksXAorCShiKV49KHQpLFwKKwkoYSlePSgodCk8PChuKSkpCisKKyNkZWZpbmUgSVAobCxyKSBcCisJeyBcCisJcmVnaXN0ZXIgREVTX0xPTkcgdHQ7IFwKKwlQRVJNX09QKHIsbCx0dCwgNCwweDBmMGYwZjBmTCk7IFwKKwlQRVJNX09QKGwscix0dCwxNiwweDAwMDBmZmZmTCk7IFwKKwlQRVJNX09QKHIsbCx0dCwgMiwweDMzMzMzMzMzTCk7IFwKKwlQRVJNX09QKGwscix0dCwgOCwweDAwZmYwMGZmTCk7IFwKKwlQRVJNX09QKHIsbCx0dCwgMSwweDU1NTU1NTU1TCk7IFwKKwl9CisKKyNkZWZpbmUgRlAobCxyKSBcCisJeyBcCisJcmVnaXN0ZXIgREVTX0xPTkcgdHQ7IFwKKwlQRVJNX09QKGwscix0dCwgMSwweDU1NTU1NTU1TCk7IFwKKwlQRVJNX09QKHIsbCx0dCwgOCwweDAwZmYwMGZmTCk7IFwKKwlQRVJNX09QKGwscix0dCwgMiwweDMzMzMzMzMzTCk7IFwKKwlQRVJNX09QKHIsbCx0dCwxNiwweDAwMDBmZmZmTCk7IFwKKwlQRVJNX09QKGwscix0dCwgNCwweDBmMGYwZjBmTCk7IFwKKwl9CisKK2V4dGVybiBjb25zdCBERVNfTE9ORyBERVNfU1B0cmFuc1s4XVs2NF07CisKK3ZvaWQgZmNyeXB0X2JvZHkoREVTX0xPTkcgKm91dCxERVNfa2V5X3NjaGVkdWxlICprcywKKwkJIERFU19MT05HIEVzd2FwMCwgREVTX0xPTkcgRXN3YXAxKTsKKworI2lmZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisjdW5kZWYgREVTX1VOUk9MTAorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kMzJfY29tbW9uLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OTkxNmYKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDMyX2NvbW1vbi5oCkBAIC0wLDAgKzEsNDA4IEBACisvKiBjcnlwdG8vbWQzMl9jb21tb24uaCAqLworLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMTk5OS0yMDA3IFRoZSBPcGVuU1NMIFByb2plY3QuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICoKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0LiAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIDQuIFRoZSBuYW1lcyAiT3BlblNTTCBUb29sa2l0IiBhbmQgIk9wZW5TU0wgUHJvamVjdCIgbXVzdCBub3QgYmUgdXNlZCB0bworICogICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAqICAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRm9yIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QKKyAqICAgIGxpY2Vuc2luZ0BPcGVuU1NMLm9yZy4KKyAqCisgKiA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiT3BlblNTTCIKKyAqICAgIG5vciBtYXkgIk9wZW5TU0wiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIE9wZW5TU0wgUHJvamVjdC4KKyAqCisgKiA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgKiAgICBhY2tub3dsZWRnbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBPcGVuU1NMIFByb2plY3QKKyAqICAgIGZvciB1c2UgaW4gdGhlIE9wZW5TU0wgVG9vbGtpdCAoaHR0cDovL3d3dy5PcGVuU1NMLm9yZy8pIgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE9wZW5TU0wgUFJPSkVDVCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIE9wZW5TU0wgUFJPSkVDVCBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgKiBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqLworCisvKgorICogVGhpcyBpcyBhIGdlbmVyaWMgMzIgYml0ICJjb2xsZWN0b3IiIGZvciBtZXNzYWdlIGRpZ2VzdCBhbGdvcml0aG1zLgorICogV2hlbmV2ZXIgbmVlZGVkIGl0IGNvbGxlY3RzIGlucHV0IGNoYXJhY3RlciBzdHJlYW0gaW50byBjaHVua3Mgb2YKKyAqIDMyIGJpdCB2YWx1ZXMgYW5kIGludm9rZXMgYSBibG9jayBmdW5jdGlvbiB0aGF0IHBlcmZvcm1zIGFjdHVhbCBoYXNoCisgKiBjYWxjdWxhdGlvbnMuCisgKgorICogUG9ydGluZyBndWlkZS4KKyAqCisgKiBPYmxpZ2F0b3J5IG1hY3JvczoKKyAqCisgKiBEQVRBX09SREVSX0lTX0JJR19FTkRJQU4gb3IgREFUQV9PUkRFUl9JU19MSVRUTEVfRU5ESUFOCisgKgl0aGlzIG1hY3JvIGRlZmluZXMgYnl0ZSBvcmRlciBvZiBpbnB1dCBzdHJlYW0uCisgKiBIQVNIX0NCTE9DSworICoJc2l6ZSBvZiBhIHVuaXQgY2h1bmsgSEFTSF9CTE9DSyBvcGVyYXRlcyBvbi4KKyAqIEhBU0hfTE9ORworICoJaGFzIHRvIGJlIGF0IGxlc3QgMzIgYml0IHdpZGUsIGlmIGl0J3Mgd2lkZXIsIHRoZW4KKyAqCUhBU0hfTE9OR19MT0cyICpoYXMgdG8qIGJlIGRlZmluZWQgYWxvbmcKKyAqIEhBU0hfQ1RYCisgKgljb250ZXh0IHN0cnVjdHVyZSB0aGF0IGF0IGxlYXN0IGNvbnRhaW5zIGZvbGxvd2luZworICoJbWVtYmVyczoKKyAqCQl0eXBlZGVmIHN0cnVjdCB7CisgKgkJCS4uLgorICoJCQlIQVNIX0xPTkcJTmwsTmg7CisgKgkJCWVpdGhlciB7CisgKgkJCUhBU0hfTE9ORwlkYXRhW0hBU0hfTEJMT0NLXTsKKyAqCQkJdW5zaWduZWQgY2hhcglkYXRhW0hBU0hfQ0JMT0NLXTsKKyAqCQkJfTsKKyAqCQkJdW5zaWduZWQgaW50CW51bTsKKyAqCQkJLi4uCisgKgkJCX0gSEFTSF9DVFg7CisgKglkYXRhW10gdmVjdG9yIGlzIGV4cGVjdGVkIHRvIGJlIHplcm9lZCB1cG9uIGZpcnN0IGNhbGwgdG8KKyAqCUhBU0hfVVBEQVRFLgorICogSEFTSF9VUERBVEUKKyAqCW5hbWUgb2YgIlVwZGF0ZSIgZnVuY3Rpb24sIGltcGxlbWVudGVkIGhlcmUuCisgKiBIQVNIX1RSQU5TRk9STQorICoJbmFtZSBvZiAiVHJhbnNmb3JtIiBmdW5jdGlvbiwgaW1wbGVtZW50ZWQgaGVyZS4KKyAqIEhBU0hfRklOQUwKKyAqCW5hbWUgb2YgIkZpbmFsIiBmdW5jdGlvbiwgaW1wbGVtZW50ZWQgaGVyZS4KKyAqIEhBU0hfQkxPQ0tfREFUQV9PUkRFUgorICoJbmFtZSBvZiAiYmxvY2siIGZ1bmN0aW9uIGNhcGFibGUgb2YgdHJlYXRpbmcgKnVuYWxpZ25lZCogaW5wdXQKKyAqCW1lc3NhZ2UgaW4gb3JpZ2luYWwgKGRhdGEpIGJ5dGUgb3JkZXIsIGltcGxlbWVudGVkIGV4dGVybmFsbHkuCisgKiBIQVNIX01BS0VfU1RSSU5HCisgKgltYWNybyBjb252ZXJpbmcgY29udGV4dCB2YXJpYWJsZXMgdG8gYW4gQVNDSUkgaGFzaCBzdHJpbmcuCisgKgorICogTUQ1IGV4YW1wbGU6CisgKgorICoJI2RlZmluZSBEQVRBX09SREVSX0lTX0xJVFRMRV9FTkRJQU4KKyAqCisgKgkjZGVmaW5lIEhBU0hfTE9ORwkJTUQ1X0xPTkcKKyAqCSNkZWZpbmUgSEFTSF9MT05HX0xPRzIJCU1ENV9MT05HX0xPRzIKKyAqCSNkZWZpbmUgSEFTSF9DVFgJCU1ENV9DVFgKKyAqCSNkZWZpbmUgSEFTSF9DQkxPQ0sJCU1ENV9DQkxPQ0sKKyAqCSNkZWZpbmUgSEFTSF9VUERBVEUJCU1ENV9VcGRhdGUKKyAqCSNkZWZpbmUgSEFTSF9UUkFOU0ZPUk0JCU1ENV9UcmFuc2Zvcm0KKyAqCSNkZWZpbmUgSEFTSF9GSU5BTAkJTUQ1X0ZpbmFsCisgKgkjZGVmaW5lIEhBU0hfQkxPQ0tfREFUQV9PUkRFUgltZDVfYmxvY2tfZGF0YV9vcmRlcgorICoKKyAqCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgKi8KKworI2lmICFkZWZpbmVkKERBVEFfT1JERVJfSVNfQklHX0VORElBTikgJiYgIWRlZmluZWQoREFUQV9PUkRFUl9JU19MSVRUTEVfRU5ESUFOKQorI2Vycm9yICJEQVRBX09SREVSIG11c3QgYmUgZGVmaW5lZCEiCisjZW5kaWYKKworI2lmbmRlZiBIQVNIX0NCTE9DSworI2Vycm9yICJIQVNIX0NCTE9DSyBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisjaWZuZGVmIEhBU0hfTE9ORworI2Vycm9yICJIQVNIX0xPTkcgbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorI2lmbmRlZiBIQVNIX0NUWAorI2Vycm9yICJIQVNIX0NUWCBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisKKyNpZm5kZWYgSEFTSF9VUERBVEUKKyNlcnJvciAiSEFTSF9VUERBVEUgbXVzdCBiZSBkZWZpbmVkISIKKyNlbmRpZgorI2lmbmRlZiBIQVNIX1RSQU5TRk9STQorI2Vycm9yICJIQVNIX1RSQU5TRk9STSBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisjaWZuZGVmIEhBU0hfRklOQUwKKyNlcnJvciAiSEFTSF9GSU5BTCBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisKKyNpZm5kZWYgSEFTSF9CTE9DS19EQVRBX09SREVSCisjZXJyb3IgIkhBU0hfQkxPQ0tfREFUQV9PUkRFUiBtdXN0IGJlIGRlZmluZWQhIgorI2VuZGlmCisKKy8qCisgKiBFbmdhZ2UgY29tcGlsZXIgc3BlY2lmaWMgcm90YXRlIGludHJpbnNpYyBmdW5jdGlvbiBpZiBhdmFpbGFibGUuCisgKi8KKyN1bmRlZiBST1RBVEUKKyNpZm5kZWYgUEVEQU5USUMKKyMgaWYgZGVmaW5lZChfTVNDX1ZFUikgfHwgZGVmaW5lZChfX0lDQykKKyMgIGRlZmluZSBST1RBVEUoYSxuKQlfbHJvdGwoYSxuKQorIyBlbGlmIGRlZmluZWQoX19NV0VSS1NfXykKKyMgIGlmIGRlZmluZWQoX19QT1dFUlBDX18pCisjICAgZGVmaW5lIFJPVEFURShhLG4pCV9fcmx3aW5tKGEsbiwwLDMxKQorIyAgZWxpZiBkZWZpbmVkKF9fTUM2OEtfXykKKyAgICAvKiBNb3Rvcm9sYSBzcGVjaWZpYyB0d2Vhay4gPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiAqLworIyAgIGRlZmluZSBST1RBVEUoYSxuKQkoIG48MjQgPyBfX3JvbChhLG4pIDogX19yb3IoYSwzMi1uKSApCisjICBlbHNlCisjICAgZGVmaW5lIFJPVEFURShhLG4pCV9fcm9sKGEsbikKKyMgIGVuZGlmCisjIGVsaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSU5MSU5FX0FTTSkKKyAgLyoKKyAgICogU29tZSBHTlUgQyBpbmxpbmUgYXNzZW1ibGVyIHRlbXBsYXRlcy4gTm90ZSB0aGF0IHRoZXNlIGFyZQorICAgKiByb3RhdGVzIGJ5ICpjb25zdGFudCogbnVtYmVyIG9mIGJpdHMhIEJ1dCB0aGF0J3MgZXhhY3RseQorICAgKiB3aGF0IHdlIG5lZWQgaGVyZS4uLgorICAgKiAJCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAgICovCisjICBpZiBkZWZpbmVkKF9faTM4NikgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX3g4Nl82NCkgfHwgZGVmaW5lZChfX3g4Nl82NF9fKQorIyAgIGRlZmluZSBST1RBVEUoYSxuKQkoeyByZWdpc3RlciB1bnNpZ25lZCBpbnQgcmV0OwlcCisJCQkJYXNtICgJCQlcCisJCQkJInJvbGwgJTEsJTAiCQlcCisJCQkJOiAiPXIiKHJldCkJCVwKKwkJCQk6ICJJIihuKSwgIjAiKGEpCVwKKwkJCQk6ICJjYyIpOwkJXAorCQkJICAgcmV0OwkJCQlcCisJCQl9KQorIyAgZWxpZiBkZWZpbmVkKF9BUkNIX1BQQykgfHwgZGVmaW5lZChfQVJDSF9QUEM2NCkgfHwgXAorCWRlZmluZWQoX19wb3dlcnBjKSB8fCBkZWZpbmVkKF9fcHBjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjNjRfXykKKyMgICBkZWZpbmUgUk9UQVRFKGEsbikJKHsgcmVnaXN0ZXIgdW5zaWduZWQgaW50IHJldDsJXAorCQkJCWFzbSAoCQkJXAorCQkJCSJybHdpbm0gJTAsJTEsJTIsMCwzMSIJXAorCQkJCTogIj1yIihyZXQpCQlcCisJCQkJOiAiciIoYSksICJJIihuKSk7CVwKKwkJCSAgIHJldDsJCQkJXAorCQkJfSkKKyMgIGVsaWYgZGVmaW5lZChfX3MzOTB4X18pCisjICAgZGVmaW5lIFJPVEFURShhLG4pICh7IHJlZ2lzdGVyIHVuc2lnbmVkIGludCByZXQ7CVwKKwkJCQlhc20gKCJybGwgJTAsJTEsJTIiCVwKKwkJCQk6ICI9ciIocmV0KQkJXAorCQkJCTogInIiKGEpLCAiSSIobikpOwlcCisJCQkgIHJldDsJCQkJXAorCQkJfSkKKyMgIGVuZGlmCisjIGVuZGlmCisjZW5kaWYgLyogUEVEQU5USUMgKi8KKworI2lmbmRlZiBST1RBVEUKKyNkZWZpbmUgUk9UQVRFKGEsbikgICAgICgoKGEpPDwobikpfCgoKGEpJjB4ZmZmZmZmZmYpPj4oMzItKG4pKSkpCisjZW5kaWYKKworI2lmIGRlZmluZWQoREFUQV9PUkRFUl9JU19CSUdfRU5ESUFOKQorCisjaWZuZGVmIFBFREFOVElDCisjIGlmIGRlZmluZWQoX19HTlVDX18pICYmIF9fR05VQ19fPj0yICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fQVNNKSAmJiAhZGVmaW5lZChPUEVOU1NMX05PX0lOTElORV9BU00pCisjICBpZiAoKGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSkgJiYgIWRlZmluZWQoSTM4Nl9PTkxZKSkgfHwgXAorICAgICAgKGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykpCisjICAgaWYgIWRlZmluZWQoQl9FTkRJQU4pCisgICAgLyoKKyAgICAgKiBUaGlzIGdpdmVzIH4zMC00MCUgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQgaW4gU0hBLTI1NiBjb21waWxlZAorICAgICAqIHdpdGggZ2NjIFtvbiBQNF0uIFdlbGwsIGZpcnN0IG1hY3JvIHRvIGJlIGZyYW5rLiBXZSBjYW4gcHVsbAorICAgICAqIHRoaXMgdHJpY2sgb24geDg2KiBwbGF0Zm9ybXMgb25seSwgYmVjYXVzZSB0aGVzZSBDUFVzIGNhbiBmZXRjaAorICAgICAqIHVuYWxpZ25lZCBkYXRhIHdpdGhvdXQgcmFpc2luZyBhbiBleGNlcHRpb24uCisgICAgICovCisjICAgZGVmaW5lIEhPU1RfYzJsKGMsbCkJKHsgdW5zaWduZWQgaW50IHI9KigoY29uc3QgdW5zaWduZWQgaW50ICopKGMpKTsJXAorCQkJCSAgIGFzbSAoImJzd2FwbCAlMCI6Ij1yIihyKToiMCIocikpOwlcCisJCQkJICAgKGMpKz00OyAobCk9cjsJCQl9KQorIyAgIGRlZmluZSBIT1NUX2wyYyhsLGMpCSh7IHVuc2lnbmVkIGludCByPShsKTsJCQlcCisJCQkJICAgYXNtICgiYnN3YXBsICUwIjoiPXIiKHIpOiIwIihyKSk7CVwKKwkJCQkgICAqKCh1bnNpZ25lZCBpbnQgKikoYykpPXI7IChjKSs9NDsgcjsJfSkKKyMgICBlbmRpZgorIyAgZW5kaWYKKyMgZW5kaWYKKyNlbmRpZgorI2lmIGRlZmluZWQoX19zMzkwX18pIHx8IGRlZmluZWQoX19zMzkweF9fKQorIyBkZWZpbmUgSE9TVF9jMmwoYyxsKSAoKGwpPSooKGNvbnN0IHVuc2lnbmVkIGludCAqKShjKSksIChjKSs9NCwgKGwpKQorIyBkZWZpbmUgSE9TVF9sMmMobCxjKSAoKigodW5zaWduZWQgaW50ICopKGMpKT0obCksIChjKSs9NCwgKGwpKQorI2VuZGlmCisKKyNpZm5kZWYgSE9TVF9jMmwKKyNkZWZpbmUgSE9TVF9jMmwoYyxsKQkobCA9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKTw8MjQpLAkJXAorCQkJIGx8PSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSk8PDE2KSwJCVwKKwkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwgOCksCQlcCisJCQkgbHw9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKSAgICApLAkJXAorCQkJIGwpCisjZW5kaWYKKyNpZm5kZWYgSE9TVF9sMmMKKyNkZWZpbmUgSE9TVF9sMmMobCxjKQkoKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PjI0KSYweGZmKSwJXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4xNikmMHhmZiksCVwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+IDgpJjB4ZmYpLAlcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCkgICAgKSYweGZmKSwJXAorCQkJIGwpCisjZW5kaWYKKworI2VsaWYgZGVmaW5lZChEQVRBX09SREVSX0lTX0xJVFRMRV9FTkRJQU4pCisKKyNpZm5kZWYgUEVEQU5USUMKKyMgaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18+PTIgJiYgIWRlZmluZWQoT1BFTlNTTF9OT19BU00pICYmICFkZWZpbmVkKE9QRU5TU0xfTk9fSU5MSU5FX0FTTSkKKyMgIGlmIGRlZmluZWQoX19zMzkweF9fKQorIyAgIGRlZmluZSBIT1NUX2MybChjLGwpCSh7IGFzbSAoImxydgklMCwwKCUxKSIJCVwKKwkJCQkJOiI9ciIobCkgOiAiciIoYykpOwkJXAorCQkJCSAgIChjKSs9NDsgKGwpOwkJCQl9KQorIyAgIGRlZmluZSBIT1NUX2wyYyhsLGMpCSh7IGFzbSAoInN0cnYJJTAsMCglMSkiCQlcCisJCQkJCTogOiAiciIobCksInIiKGMpIDogIm1lbW9yeSIpOwlcCisJCQkJICAgKGMpKz00OyAobCk7CQkJCX0pCisjICBlbmRpZgorIyBlbmRpZgorI2VuZGlmCisjaWYgZGVmaW5lZChfX2kzODYpIHx8IGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykKKyMgaWZuZGVmIEJfRU5ESUFOCisgICAvKiBTZWUgY29tbWVudCBpbiBEQVRBX09SREVSX0lTX0JJR19FTkRJQU4gc2VjdGlvbi4gKi8KKyMgIGRlZmluZSBIT1NUX2MybChjLGwpCSgobCk9KigoY29uc3QgdW5zaWduZWQgaW50ICopKGMpKSwgKGMpKz00LCBsKQorIyAgZGVmaW5lIEhPU1RfbDJjKGwsYykJKCooKHVuc2lnbmVkIGludCAqKShjKSk9KGwpLCAoYykrPTQsIGwpCisjIGVuZGlmCisjZW5kaWYKKworI2lmbmRlZiBIT1NUX2MybAorI2RlZmluZSBIT1NUX2MybChjLGwpCShsID0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpICAgICksCQlcCisJCQkgbHw9KCgodW5zaWduZWQgbG9uZykoKigoYykrKykpKTw8IDgpLAkJXAorCQkJIGx8PSgoKHVuc2lnbmVkIGxvbmcpKCooKGMpKyspKSk8PDE2KSwJCVwKKwkJCSBsfD0oKCh1bnNpZ25lZCBsb25nKSgqKChjKSsrKSkpPDwyNCksCQlcCisJCQkgbCkKKyNlbmRpZgorI2lmbmRlZiBIT1NUX2wyYworI2RlZmluZSBIT1NUX2wyYyhsLGMpCSgqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKSAgICApJjB4ZmYpLAlcCisJCQkgKigoYykrKyk9KHVuc2lnbmVkIGNoYXIpKCgobCk+PiA4KSYweGZmKSwJXAorCQkJICooKGMpKyspPSh1bnNpZ25lZCBjaGFyKSgoKGwpPj4xNikmMHhmZiksCVwKKwkJCSAqKChjKSsrKT0odW5zaWduZWQgY2hhcikoKChsKT4+MjQpJjB4ZmYpLAlcCisJCQkgbCkKKyNlbmRpZgorCisjZW5kaWYKKworLyoKKyAqIFRpbWUgZm9yIHNvbWUgYWN0aW9uOi0pCisgKi8KKworaW50IEhBU0hfVVBEQVRFIChIQVNIX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YV8sIHNpemVfdCBsZW4pCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE9ZGF0YV87CisJdW5zaWduZWQgY2hhciAqcDsKKwlIQVNIX0xPTkcgbDsKKwlzaXplX3QgbjsKKworCWlmIChsZW49PTApIHJldHVybiAxOworCisJbD0oYy0+TmwrKCgoSEFTSF9MT05HKWxlbik8PDMpKSYweGZmZmZmZmZmVUw7CisJLyogOTUtMDUtMjQgZWF5IEZpeGVkIGEgYnVnIHdpdGggdGhlIG92ZXJmbG93IGhhbmRsaW5nLCB0aGFua3MgdG8KKwkgKiBXZWkgRGFpIDx3ZWlkYWlAZXNraW1vLmNvbT4gZm9yIHBvaW50aW5nIGl0IG91dC4gKi8KKwlpZiAobCA8IGMtPk5sKSAvKiBvdmVyZmxvdyAqLworCQljLT5OaCsrOworCWMtPk5oKz0oSEFTSF9MT05HKShsZW4+PjI5KTsJLyogbWlnaHQgY2F1c2UgY29tcGlsZXIgd2FybmluZyBvbiAxNi1iaXQgKi8KKwljLT5ObD1sOworCisJbiA9IGMtPm51bTsKKwlpZiAobiAhPSAwKQorCQl7CisJCXA9KHVuc2lnbmVkIGNoYXIgKiljLT5kYXRhOworCisJCWlmIChsZW4gPj0gSEFTSF9DQkxPQ0sgfHwgbGVuK24gPj0gSEFTSF9DQkxPQ0spCisJCQl7CisJCQltZW1jcHkgKHArbixkYXRhLEhBU0hfQ0JMT0NLLW4pOworCQkJSEFTSF9CTE9DS19EQVRBX09SREVSIChjLHAsMSk7CisJCQluICAgICAgPSBIQVNIX0NCTE9DSy1uOworCQkJZGF0YSAgKz0gbjsKKwkJCWxlbiAgIC09IG47CisJCQljLT5udW0gPSAwOworCQkJbWVtc2V0IChwLDAsSEFTSF9DQkxPQ0spOwkvKiBrZWVwIGl0IHplcm9lZCAqLworCQkJfQorCQllbHNlCisJCQl7CisJCQltZW1jcHkgKHArbixkYXRhLGxlbik7CisJCQljLT5udW0gKz0gKHVuc2lnbmVkIGludClsZW47CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJfQorCisJbiA9IGxlbi9IQVNIX0NCTE9DSzsKKwlpZiAobiA+IDApCisJCXsKKwkJSEFTSF9CTE9DS19EQVRBX09SREVSIChjLGRhdGEsbik7CisJCW4gICAgKj0gSEFTSF9DQkxPQ0s7CisJCWRhdGEgKz0gbjsKKwkJbGVuICAtPSBuOworCQl9CisKKwlpZiAobGVuICE9IDApCisJCXsKKwkJcCA9ICh1bnNpZ25lZCBjaGFyICopYy0+ZGF0YTsKKwkJYy0+bnVtID0gKHVuc2lnbmVkIGludClsZW47CisJCW1lbWNweSAocCxkYXRhLGxlbik7CisJCX0KKwlyZXR1cm4gMTsKKwl9CisKKwordm9pZCBIQVNIX1RSQU5TRk9STSAoSEFTSF9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpCisJeworCUhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoYyxkYXRhLDEpOworCX0KKworCitpbnQgSEFTSF9GSU5BTCAodW5zaWduZWQgY2hhciAqbWQsIEhBU0hfQ1RYICpjKQorCXsKKwl1bnNpZ25lZCBjaGFyICpwID0gKHVuc2lnbmVkIGNoYXIgKiljLT5kYXRhOworCXNpemVfdCBuID0gYy0+bnVtOworCisJcFtuXSA9IDB4ODA7IC8qIHRoZXJlIGlzIGFsd2F5cyByb29tIGZvciBvbmUgKi8KKwluKys7CisKKwlpZiAobiA+IChIQVNIX0NCTE9DSy04KSkKKwkJeworCQltZW1zZXQgKHArbiwwLEhBU0hfQ0JMT0NLLW4pOworCQluPTA7CisJCUhBU0hfQkxPQ0tfREFUQV9PUkRFUiAoYyxwLDEpOworCQl9CisJbWVtc2V0IChwK24sMCxIQVNIX0NCTE9DSy04LW4pOworCisJcCArPSBIQVNIX0NCTE9DSy04OworI2lmICAgZGVmaW5lZChEQVRBX09SREVSX0lTX0JJR19FTkRJQU4pCisJKHZvaWQpSE9TVF9sMmMoYy0+TmgscCk7CisJKHZvaWQpSE9TVF9sMmMoYy0+TmwscCk7CisjZWxpZiBkZWZpbmVkKERBVEFfT1JERVJfSVNfTElUVExFX0VORElBTikKKwkodm9pZClIT1NUX2wyYyhjLT5ObCxwKTsKKwkodm9pZClIT1NUX2wyYyhjLT5OaCxwKTsKKyNlbmRpZgorCXAgLT0gSEFTSF9DQkxPQ0s7CisJSEFTSF9CTE9DS19EQVRBX09SREVSIChjLHAsMSk7CisJYy0+bnVtPTA7CisJbWVtc2V0IChwLDAsSEFTSF9DQkxPQ0spOworCisjaWZuZGVmIEhBU0hfTUFLRV9TVFJJTkcKKyNlcnJvciAiSEFTSF9NQUtFX1NUUklORyBtdXN0IGJlIGRlZmluZWQhIgorI2Vsc2UKKwlIQVNIX01BS0VfU1RSSU5HKGMsbWQpOworI2VuZGlmCisKKwlyZXR1cm4gMTsKKwl9CisKKyNpZm5kZWYgTUQzMl9SRUdfVAorI2RlZmluZSBNRDMyX1JFR19UIGxvbmcKKy8qCisgKiBUaGlzIGNvbW1lbnQgd2FzIG9yaWdpbmFseSB3cml0dGVuIGZvciBNRDUsIHdoaWNoIGlzIHdoeSBpdAorICogZGlzY3Vzc2VzIEEtRC4gQnV0IGl0IGJhc2ljYWxseSBhcHBsaWVzIHRvIGFsbCAzMi1iaXQgZGlnZXN0cywKKyAqIHdoaWNoIGlzIHdoeSBpdCB3YXMgbW92ZWQgdG8gY29tbW9uIGhlYWRlciBmaWxlLgorICoKKyAqIEluIGNhc2UgeW91IHdvbmRlciB3aHkgQS1EIGFyZSBkZWNsYXJlZCBhcyBsb25nIGFuZCBub3QKKyAqIGFzIE1ENV9MT05HLiBEb2luZyBzbyByZXN1bHRzIGluIHNsaWdodCBwZXJmb3JtYW5jZQorICogYm9vc3Qgb24gTFA2NCBhcmNoaXRlY3R1cmVzLiBUaGUgY2F0Y2ggaXMgd2UgZG9uJ3QKKyAqIHJlYWxseSBjYXJlIGlmIDMyIE1TQnMgb2YgYSA2NC1iaXQgcmVnaXN0ZXIgZ2V0IHBvbGx1dGVkCisgKiB3aXRoIGV2ZW50dWFsIG92ZXJmbG93cyBhcyB3ZSAqc2F2ZSogb25seSAzMiBMU0JzIGluCisgKiAqZWl0aGVyKiBjYXNlLiBOb3cgZGVjbGFyaW5nICdlbSBsb25nIGV4Y3VzZXMgdGhlIGNvbXBpbGVyCisgKiBmcm9tIGtlZXBpbmcgMzIgTVNCcyB6ZXJvZWQgcmVzdWx0aW5nIGluIDEzJSBwZXJmb3JtYW5jZQorICogaW1wcm92ZW1lbnQgdW5kZXIgU1BBUkMgU29sYXJpczcvNjQgYW5kIDUlIHVuZGVyIEFscGhhTGludXguCisgKiBXZWxsLCB0byBiZSBob25lc3QgaXQgc2hvdWxkIHNheSB0aGF0IHRoaXMgKnByZXZlbnRzKiAKKyAqIHBlcmZvcm1hbmNlIGRlZ3JhZGF0aW9uLgorICoJCQkJPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPgorICogQXBwYXJlbnRseSB0aGVyZSdyZSBMUDY0IGNvbXBpbGVycyB0aGF0IGdlbmVyYXRlIGJldHRlcgorICogY29kZSBpZiBBLUQgYXJlIGRlY2xhcmVkIGludC4gTW9zdCBub3RhYmx5IEdDQy14ODZfNjQKKyAqIGdlbmVyYXRlcyBiZXR0ZXIgY29kZS4KKyAqCQkJCTxhcHByb0BmeS5jaGFsbWVycy5zZT4KKyAqLworI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDUuYyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4N2FkYjMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDUuYwpAQCAtMCwwICsxLDE4MSBAQAorLyogY3J5cHRvL21kNS9tZDVfZGdzdC5jICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgIm9wZW5zc2xfbWQ1X2xvY2FsLmgiCisKKy8qIEltcGxlbWVudGVkIGZyb20gUkZDMTMyMSBUaGUgTUQ1IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobQorICovCisKKyNkZWZpbmUgSU5JVF9EQVRBX0EgKHVuc2lnbmVkIGxvbmcpMHg2NzQ1MjMwMUwKKyNkZWZpbmUgSU5JVF9EQVRBX0IgKHVuc2lnbmVkIGxvbmcpMHhlZmNkYWI4OUwKKyNkZWZpbmUgSU5JVF9EQVRBX0MgKHVuc2lnbmVkIGxvbmcpMHg5OGJhZGNmZUwKKyNkZWZpbmUgSU5JVF9EQVRBX0QgKHVuc2lnbmVkIGxvbmcpMHgxMDMyNTQ3NkwKKworaW50IE1ENV9Jbml0KE1ENV9DVFggKmMpCisJeworCW1lbXNldCAoYywwLHNpemVvZigqYykpOworCWMtPkE9SU5JVF9EQVRBX0E7CisJYy0+Qj1JTklUX0RBVEFfQjsKKwljLT5DPUlOSVRfREFUQV9DOworCWMtPkQ9SU5JVF9EQVRBX0Q7CisJcmV0dXJuIDE7CisJfQorCisjaWZuZGVmIG1kNV9ibG9ja19kYXRhX29yZGVyCisjaWZkZWYgWAorI3VuZGVmIFgKKyNlbmRpZgordm9pZCBtZDVfYmxvY2tfZGF0YV9vcmRlciAoTUQ1X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YV8sIHNpemVfdCBudW0pCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE9ZGF0YV87CisJcmVnaXN0ZXIgdW5zaWduZWQgTUQzMl9SRUdfVCBBLEIsQyxELGw7CisjaWZuZGVmIE1EMzJfWEFSUkFZCisJLyogU2VlIGNvbW1lbnQgaW4gY3J5cHRvL3NoYS9zaGFfbG9jbC5oIGZvciBkZXRhaWxzLiAqLworCXVuc2lnbmVkIE1EMzJfUkVHX1QJWFgwLCBYWDEsIFhYMiwgWFgzLCBYWDQsIFhYNSwgWFg2LCBYWDcsCisJCQkJWFg4LCBYWDksWFgxMCxYWDExLFhYMTIsWFgxMyxYWDE0LFhYMTU7CisjIGRlZmluZSBYKGkpCVhYIyNpCisjZWxzZQorCU1ENV9MT05HIFhYW01ENV9MQkxPQ0tdOworIyBkZWZpbmUgWChpKQlYWFtpXQorI2VuZGlmCisKKwlBPWMtPkE7CisJQj1jLT5COworCUM9Yy0+QzsKKwlEPWMtPkQ7CisKKwlmb3IgKDtudW0tLTspCisJCXsKKwlIT1NUX2MybChkYXRhLGwpOyBYKCAwKT1sOwkJSE9TVF9jMmwoZGF0YSxsKTsgWCggMSk9bDsKKwkvKiBSb3VuZCAwICovCisJUjAoQSxCLEMsRCxYKCAwKSwgNywweGQ3NmFhNDc4TCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDIpPWw7CisJUjAoRCxBLEIsQyxYKCAxKSwxMiwweGU4YzdiNzU2TCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDMpPWw7CisJUjAoQyxELEEsQixYKCAyKSwxNywweDI0MjA3MGRiTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDQpPWw7CisJUjAoQixDLEQsQSxYKCAzKSwyMiwweGMxYmRjZWVlTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDUpPWw7CisJUjAoQSxCLEMsRCxYKCA0KSwgNywweGY1N2MwZmFmTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDYpPWw7CisJUjAoRCxBLEIsQyxYKCA1KSwxMiwweDQ3ODdjNjJhTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDcpPWw7CisJUjAoQyxELEEsQixYKCA2KSwxNywweGE4MzA0NjEzTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDgpPWw7CisJUjAoQixDLEQsQSxYKCA3KSwyMiwweGZkNDY5NTAxTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDkpPWw7CisJUjAoQSxCLEMsRCxYKCA4KSwgNywweDY5ODA5OGQ4TCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTApPWw7CisJUjAoRCxBLEIsQyxYKCA5KSwxMiwweDhiNDRmN2FmTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTEpPWw7CisJUjAoQyxELEEsQixYKDEwKSwxNywweGZmZmY1YmIxTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTIpPWw7CisJUjAoQixDLEQsQSxYKDExKSwyMiwweDg5NWNkN2JlTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTMpPWw7CisJUjAoQSxCLEMsRCxYKDEyKSwgNywweDZiOTAxMTIyTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTQpPWw7CisJUjAoRCxBLEIsQyxYKDEzKSwxMiwweGZkOTg3MTkzTCk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTUpPWw7CisJUjAoQyxELEEsQixYKDE0KSwxNywweGE2Nzk0MzhlTCk7CisJUjAoQixDLEQsQSxYKDE1KSwyMiwweDQ5YjQwODIxTCk7CisJLyogUm91bmQgMSAqLworCVIxKEEsQixDLEQsWCggMSksIDUsMHhmNjFlMjU2MkwpOworCVIxKEQsQSxCLEMsWCggNiksIDksMHhjMDQwYjM0MEwpOworCVIxKEMsRCxBLEIsWCgxMSksMTQsMHgyNjVlNWE1MUwpOworCVIxKEIsQyxELEEsWCggMCksMjAsMHhlOWI2YzdhYUwpOworCVIxKEEsQixDLEQsWCggNSksIDUsMHhkNjJmMTA1ZEwpOworCVIxKEQsQSxCLEMsWCgxMCksIDksMHgwMjQ0MTQ1M0wpOworCVIxKEMsRCxBLEIsWCgxNSksMTQsMHhkOGExZTY4MUwpOworCVIxKEIsQyxELEEsWCggNCksMjAsMHhlN2QzZmJjOEwpOworCVIxKEEsQixDLEQsWCggOSksIDUsMHgyMWUxY2RlNkwpOworCVIxKEQsQSxCLEMsWCgxNCksIDksMHhjMzM3MDdkNkwpOworCVIxKEMsRCxBLEIsWCggMyksMTQsMHhmNGQ1MGQ4N0wpOworCVIxKEIsQyxELEEsWCggOCksMjAsMHg0NTVhMTRlZEwpOworCVIxKEEsQixDLEQsWCgxMyksIDUsMHhhOWUzZTkwNUwpOworCVIxKEQsQSxCLEMsWCggMiksIDksMHhmY2VmYTNmOEwpOworCVIxKEMsRCxBLEIsWCggNyksMTQsMHg2NzZmMDJkOUwpOworCVIxKEIsQyxELEEsWCgxMiksMjAsMHg4ZDJhNGM4YUwpOworCS8qIFJvdW5kIDIgKi8KKwlSMihBLEIsQyxELFgoIDUpLCA0LDB4ZmZmYTM5NDJMKTsKKwlSMihELEEsQixDLFgoIDgpLDExLDB4ODc3MWY2ODFMKTsKKwlSMihDLEQsQSxCLFgoMTEpLDE2LDB4NmQ5ZDYxMjJMKTsKKwlSMihCLEMsRCxBLFgoMTQpLDIzLDB4ZmRlNTM4MGNMKTsKKwlSMihBLEIsQyxELFgoIDEpLCA0LDB4YTRiZWVhNDRMKTsKKwlSMihELEEsQixDLFgoIDQpLDExLDB4NGJkZWNmYTlMKTsKKwlSMihDLEQsQSxCLFgoIDcpLDE2LDB4ZjZiYjRiNjBMKTsKKwlSMihCLEMsRCxBLFgoMTApLDIzLDB4YmViZmJjNzBMKTsKKwlSMihBLEIsQyxELFgoMTMpLCA0LDB4Mjg5YjdlYzZMKTsKKwlSMihELEEsQixDLFgoIDApLDExLDB4ZWFhMTI3ZmFMKTsKKwlSMihDLEQsQSxCLFgoIDMpLDE2LDB4ZDRlZjMwODVMKTsKKwlSMihCLEMsRCxBLFgoIDYpLDIzLDB4MDQ4ODFkMDVMKTsKKwlSMihBLEIsQyxELFgoIDkpLCA0LDB4ZDlkNGQwMzlMKTsKKwlSMihELEEsQixDLFgoMTIpLDExLDB4ZTZkYjk5ZTVMKTsKKwlSMihDLEQsQSxCLFgoMTUpLDE2LDB4MWZhMjdjZjhMKTsKKwlSMihCLEMsRCxBLFgoIDIpLDIzLDB4YzRhYzU2NjVMKTsKKwkvKiBSb3VuZCAzICovCisJUjMoQSxCLEMsRCxYKCAwKSwgNiwweGY0MjkyMjQ0TCk7CisJUjMoRCxBLEIsQyxYKCA3KSwxMCwweDQzMmFmZjk3TCk7CisJUjMoQyxELEEsQixYKDE0KSwxNSwweGFiOTQyM2E3TCk7CisJUjMoQixDLEQsQSxYKCA1KSwyMSwweGZjOTNhMDM5TCk7CisJUjMoQSxCLEMsRCxYKDEyKSwgNiwweDY1NWI1OWMzTCk7CisJUjMoRCxBLEIsQyxYKCAzKSwxMCwweDhmMGNjYzkyTCk7CisJUjMoQyxELEEsQixYKDEwKSwxNSwweGZmZWZmNDdkTCk7CisJUjMoQixDLEQsQSxYKCAxKSwyMSwweDg1ODQ1ZGQxTCk7CisJUjMoQSxCLEMsRCxYKCA4KSwgNiwweDZmYTg3ZTRmTCk7CisJUjMoRCxBLEIsQyxYKDE1KSwxMCwweGZlMmNlNmUwTCk7CisJUjMoQyxELEEsQixYKCA2KSwxNSwweGEzMDE0MzE0TCk7CisJUjMoQixDLEQsQSxYKDEzKSwyMSwweDRlMDgxMWExTCk7CisJUjMoQSxCLEMsRCxYKCA0KSwgNiwweGY3NTM3ZTgyTCk7CisJUjMoRCxBLEIsQyxYKDExKSwxMCwweGJkM2FmMjM1TCk7CisJUjMoQyxELEEsQixYKCAyKSwxNSwweDJhZDdkMmJiTCk7CisJUjMoQixDLEQsQSxYKCA5KSwyMSwweGViODZkMzkxTCk7CisKKwlBID0gYy0+QSArPSBBOworCUIgPSBjLT5CICs9IEI7CisJQyA9IGMtPkMgKz0gQzsKKwlEID0gYy0+RCArPSBEOworCQl9CisJfQorI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDVfbG9jYWwuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21kNV9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZWYzNzQKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9tZDVfbG9jYWwuaApAQCAtMCwwICsxLDEyOSBAQAorLyogY3J5cHRvL21kNS9tZDVfbG9jbC5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vcGVuc3NsX21kNS5oPgorCisjaWZuZGVmIE1ENV9MT05HX0xPRzIKKyNkZWZpbmUgTUQ1X0xPTkdfTE9HMiAyIC8qIGRlZmF1bHQgdG8gMzIgYml0cyAqLworI2VuZGlmCisKKyNpZmRlZiBNRDVfQVNNCisjIGlmIGRlZmluZWQoX19pMzg2KSB8fCBkZWZpbmVkKF9faTM4Nl9fKSB8fCBkZWZpbmVkKF9NX0lYODYpIHx8IGRlZmluZWQoX19JTlRFTF9fKSB8fCBcCisgICAgIGRlZmluZWQoX194ODZfNjQpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfTV9BTUQ2NCkgfHwgZGVmaW5lZChfTV9YNjQpCisjICBkZWZpbmUgbWQ1X2Jsb2NrX2RhdGFfb3JkZXIgbWQ1X2Jsb2NrX2FzbV9kYXRhX29yZGVyCisjIGVsaWYgZGVmaW5lZChfX2lhNjQpIHx8IGRlZmluZWQoX19pYTY0X18pIHx8IGRlZmluZWQoX01fSUE2NCkKKyMgIGRlZmluZSBtZDVfYmxvY2tfZGF0YV9vcmRlciBtZDVfYmxvY2tfYXNtX2RhdGFfb3JkZXIKKyMgZW5kaWYKKyNlbmRpZgorCit2b2lkIG1kNV9ibG9ja19kYXRhX29yZGVyIChNRDVfQ1RYICpjLCBjb25zdCB2b2lkICpwLHNpemVfdCBudW0pOworCisjZGVmaW5lIERBVEFfT1JERVJfSVNfTElUVExFX0VORElBTgorCisjZGVmaW5lIEhBU0hfTE9ORwkJTUQ1X0xPTkcKKyNkZWZpbmUgSEFTSF9DVFgJCU1ENV9DVFgKKyNkZWZpbmUgSEFTSF9DQkxPQ0sJCU1ENV9DQkxPQ0sKKyNkZWZpbmUgSEFTSF9VUERBVEUJCU1ENV9VcGRhdGUKKyNkZWZpbmUgSEFTSF9UUkFOU0ZPUk0JCU1ENV9UcmFuc2Zvcm0KKyNkZWZpbmUgSEFTSF9GSU5BTAkJTUQ1X0ZpbmFsCisjZGVmaW5lCUhBU0hfTUFLRV9TVFJJTkcoYyxzKQlkbyB7CVwKKwl1bnNpZ25lZCBsb25nIGxsOwkJXAorCWxsPShjKS0+QTsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+QjsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+QzsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+RDsgSE9TVF9sMmMobGwsKHMpKTsJXAorCX0gd2hpbGUgKDApCisjZGVmaW5lCUhBU0hfQkxPQ0tfREFUQV9PUkRFUgltZDVfYmxvY2tfZGF0YV9vcmRlcgorCisjaW5jbHVkZSAib3BlbnNzbF9tZDMyX2NvbW1vbi5oIgorCisvKgorI2RlZmluZQlGKHgseSx6KQkoKCh4KSAmICh5KSkgIHwgICgofih4KSkgJiAoeikpKQorI2RlZmluZQlHKHgseSx6KQkoKCh4KSAmICh6KSkgIHwgICgoeSkgJiAofih6KSkpKQorKi8KKworLyogQXMgcG9pbnRlZCBvdXQgYnkgV2VpIERhaSA8d2VpZGFpQGVza2ltby5jb20+LCB0aGUgYWJvdmUgY2FuIGJlCisgKiBzaW1wbGlmaWVkIHRvIHRoZSBjb2RlIGJlbG93LiAgV2VpIGF0dHJpYnV0ZXMgdGhlc2Ugb3B0aW1pemF0aW9ucworICogdG8gUGV0ZXIgR3V0bWFubidzIFNIUyBjb2RlLCBhbmQgaGUgYXR0cmlidXRlcyBpdCB0byBSaWNoIFNjaHJvZXBwZWwuCisgKi8KKyNkZWZpbmUJRihiLGMsZCkJKCgoKGMpIF4gKGQpKSAmIChiKSkgXiAoZCkpCisjZGVmaW5lCUcoYixjLGQpCSgoKChiKSBeIChjKSkgJiAoZCkpIF4gKGMpKQorI2RlZmluZQlIKGIsYyxkKQkoKGIpIF4gKGMpIF4gKGQpKQorI2RlZmluZQlJKGIsYyxkKQkoKCh+KGQpKSB8IChiKSkgXiAoYykpCisKKyNkZWZpbmUgUjAoYSxiLGMsZCxrLHMsdCkgeyBcCisJYSs9KChrKSsodCkrRigoYiksKGMpLChkKSkpOyBcCisJYT1ST1RBVEUoYSxzKTsgXAorCWErPWI7IH07XAorCisjZGVmaW5lIFIxKGEsYixjLGQsayxzLHQpIHsgXAorCWErPSgoaykrKHQpK0coKGIpLChjKSwoZCkpKTsgXAorCWE9Uk9UQVRFKGEscyk7IFwKKwlhKz1iOyB9OworCisjZGVmaW5lIFIyKGEsYixjLGQsayxzLHQpIHsgXAorCWErPSgoaykrKHQpK0goKGIpLChjKSwoZCkpKTsgXAorCWE9Uk9UQVRFKGEscyk7IFwKKwlhKz1iOyB9OworCisjZGVmaW5lIFIzKGEsYixjLGQsayxzLHQpIHsgXAorCWErPSgoaykrKHQpK0koKGIpLChjKSwoZCkpKTsgXAorCWE9Uk9UQVRFKGEscyk7IFwKKwlhKz1iOyB9OwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbW9kZXMuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21vZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWY4ZDk3ZAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX21vZGVzLmgKQEAgLTAsMCArMSw1OSBAQAorLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAqIENvcHlyaWdodCAoYykgMjAwOCBUaGUgT3BlblNTTCBQcm9qZWN0LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJpZ2h0cyBmb3IgcmVkaXN0cmlidXRpb24gYW5kIHVzYWdlIGluIHNvdXJjZSBhbmQgYmluYXJ5CisgKiBmb3JtcyBhcmUgZ3JhbnRlZCBhY2NvcmRpbmcgdG8gdGhlIE9wZW5TU0wgbGljZW5zZS4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisKK3R5cGVkZWYgdm9pZCAoKmJsb2NrMTI4X2YpKGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5bMTZdLAorCQkJdW5zaWduZWQgY2hhciBvdXRbMTZdLAorCQkJY29uc3Qgdm9pZCAqa2V5KTsKKwordHlwZWRlZiB2b2lkICgqY2JjMTI4X2YpKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgZW5jKTsKKwordm9pZCBDUllQVE9fY2JjMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOwordm9pZCBDUllQVE9fY2JjMTI4X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGJsb2NrMTI4X2YgYmxvY2spOworCit2b2lkIENSWVBUT19jdHIxMjhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbiwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgdW5zaWduZWQgY2hhciBlY291bnRfYnVmWzE2XSwKKwkJCXVuc2lnbmVkIGludCAqbnVtLCBibG9jazEyOF9mIGJsb2NrKTsKKwordm9pZCBDUllQVE9fb2ZiMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGludCAqbnVtLAorCQkJYmxvY2sxMjhfZiBibG9jayk7CisKK3ZvaWQgQ1JZUFRPX2NmYjEyOF9lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spOwordm9pZCBDUllQVE9fY2ZiMTI4XzhfZW5jcnlwdChjb25zdCB1bnNpZ25lZCBjaGFyICppbiwgdW5zaWduZWQgY2hhciAqb3V0LAorCQkJc2l6ZV90IGxlbmd0aCwgY29uc3Qgdm9pZCAqa2V5LAorCQkJdW5zaWduZWQgY2hhciBpdmVjWzE2XSwgaW50ICpudW0sCisJCQlpbnQgZW5jLCBibG9jazEyOF9mIGJsb2NrKTsKK3ZvaWQgQ1JZUFRPX2NmYjEyOF8xX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBiaXRzLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBpbnQgKm51bSwKKwkJCWludCBlbmMsIGJsb2NrMTI4X2YgYmxvY2spOworCitzaXplX3QgQ1JZUFRPX2N0czEyOF9lbmNyeXB0X2Jsb2NrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBibG9jazEyOF9mIGJsb2NrKTsKK3NpemVfdCBDUllQVE9fY3RzMTI4X2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGNiYzEyOF9mIGNiYyk7CitzaXplX3QgQ1JZUFRPX2N0czEyOF9kZWNyeXB0X2Jsb2NrKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsCisJCQlzaXplX3QgbGVuLCBjb25zdCB2b2lkICprZXksCisJCQl1bnNpZ25lZCBjaGFyIGl2ZWNbMTZdLCBibG9jazEyOF9mIGJsb2NrKTsKK3NpemVfdCBDUllQVE9fY3RzMTI4X2RlY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwKKwkJCXNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmtleSwKKwkJCXVuc2lnbmVkIGNoYXIgaXZlY1sxNl0sIGNiYzEyOF9mIGNiYyk7CmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9uY2JjX2VuYy5jIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhjYjY2Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfbmNiY19lbmMuYwpAQCAtMCwwICsxLDE0OCBAQAorLyogY3J5cHRvL2Rlcy9uY2JjX2VuYy5jICovCisvKgorICogI2luY2x1ZGVkIGJ5OgorICogICAgY2JjX2VuYy5jICAoREVTX2NiY19lbmNyeXB0KQorICogICAgZGVzX2VuYy5jICAoREVTX25jYmNfZW5jcnlwdCkKKyAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCisjaW5jbHVkZSAib3BlbnNzbF9kZXNfbG9jYWwuaCIKKworI2lmZGVmIENCQ19FTkNfQ19fRE9OVF9VUERBVEVfSVYKK3ZvaWQgREVTX2NiY19lbmNyeXB0KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmluLCB1bnNpZ25lZCBjaGFyICpvdXQsIGxvbmcgbGVuZ3RoLAorCQkgICAgIERFU19rZXlfc2NoZWR1bGUgKl9zY2hlZHVsZSwgREVTX2NibG9jayAqaXZlYywgaW50IGVuYykKKyNlbHNlCit2b2lkIERFU19uY2JjX2VuY3J5cHQoY29uc3QgdW5zaWduZWQgY2hhciAqaW4sIHVuc2lnbmVkIGNoYXIgKm91dCwgbG9uZyBsZW5ndGgsCisJCSAgICAgREVTX2tleV9zY2hlZHVsZSAqX3NjaGVkdWxlLCBERVNfY2Jsb2NrICppdmVjLCBpbnQgZW5jKQorI2VuZGlmCisJeworCXJlZ2lzdGVyIERFU19MT05HIHRpbjAsdGluMTsKKwlyZWdpc3RlciBERVNfTE9ORyB0b3V0MCx0b3V0MSx4b3IwLHhvcjE7CisJcmVnaXN0ZXIgbG9uZyBsPWxlbmd0aDsKKwlERVNfTE9ORyB0aW5bMl07CisJdW5zaWduZWQgY2hhciAqaXY7CisKKwlpdiA9ICYoKml2ZWMpWzBdOworCisJaWYgKGVuYykKKwkJeworCQljMmwoaXYsdG91dDApOworCQljMmwoaXYsdG91dDEpOworCQlmb3IgKGwtPTg7IGw+PTA7IGwtPTgpCisJCQl7CisJCQljMmwoaW4sdGluMCk7CisJCQljMmwoaW4sdGluMSk7CisJCQl0aW4wXj10b3V0MDsgdGluWzBdPXRpbjA7CisJCQl0aW4xXj10b3V0MTsgdGluWzFdPXRpbjE7CisJCQlERVNfZW5jcnlwdDEoKERFU19MT05HICopdGluLF9zY2hlZHVsZSxERVNfRU5DUllQVCk7CisJCQl0b3V0MD10aW5bMF07IGwyYyh0b3V0MCxvdXQpOworCQkJdG91dDE9dGluWzFdOyBsMmModG91dDEsb3V0KTsKKwkJCX0KKwkJaWYgKGwgIT0gLTgpCisJCQl7CisJCQljMmxuKGluLHRpbjAsdGluMSxsKzgpOworCQkJdGluMF49dG91dDA7IHRpblswXT10aW4wOworCQkJdGluMV49dG91dDE7IHRpblsxXT10aW4xOworCQkJREVTX2VuY3J5cHQxKChERVNfTE9ORyAqKXRpbixfc2NoZWR1bGUsREVTX0VOQ1JZUFQpOworCQkJdG91dDA9dGluWzBdOyBsMmModG91dDAsb3V0KTsKKwkJCXRvdXQxPXRpblsxXTsgbDJjKHRvdXQxLG91dCk7CisJCQl9CisjaWZuZGVmIENCQ19FTkNfQ19fRE9OVF9VUERBVEVfSVYKKwkJaXYgPSAmKCppdmVjKVswXTsKKwkJbDJjKHRvdXQwLGl2KTsKKwkJbDJjKHRvdXQxLGl2KTsKKyNlbmRpZgorCQl9CisJZWxzZQorCQl7CisJCWMybChpdix4b3IwKTsKKwkJYzJsKGl2LHhvcjEpOworCQlmb3IgKGwtPTg7IGw+PTA7IGwtPTgpCisJCQl7CisJCQljMmwoaW4sdGluMCk7IHRpblswXT10aW4wOworCQkJYzJsKGluLHRpbjEpOyB0aW5bMV09dGluMTsKKwkJCURFU19lbmNyeXB0MSgoREVTX0xPTkcgKil0aW4sX3NjaGVkdWxlLERFU19ERUNSWVBUKTsKKwkJCXRvdXQwPXRpblswXV54b3IwOworCQkJdG91dDE9dGluWzFdXnhvcjE7CisJCQlsMmModG91dDAsb3V0KTsKKwkJCWwyYyh0b3V0MSxvdXQpOworCQkJeG9yMD10aW4wOworCQkJeG9yMT10aW4xOworCQkJfQorCQlpZiAobCAhPSAtOCkKKwkJCXsKKwkJCWMybChpbix0aW4wKTsgdGluWzBdPXRpbjA7CisJCQljMmwoaW4sdGluMSk7IHRpblsxXT10aW4xOworCQkJREVTX2VuY3J5cHQxKChERVNfTE9ORyAqKXRpbixfc2NoZWR1bGUsREVTX0RFQ1JZUFQpOworCQkJdG91dDA9dGluWzBdXnhvcjA7CisJCQl0b3V0MT10aW5bMV1eeG9yMTsKKwkJCWwyY24odG91dDAsdG91dDEsb3V0LGwrOCk7CisjaWZuZGVmIENCQ19FTkNfQ19fRE9OVF9VUERBVEVfSVYKKwkJCXhvcjA9dGluMDsKKwkJCXhvcjE9dGluMTsKKyNlbmRpZgorCQkJfQorI2lmbmRlZiBDQkNfRU5DX0NfX0RPTlRfVVBEQVRFX0lWIAorCQlpdiA9ICYoKml2ZWMpWzBdOworCQlsMmMoeG9yMCxpdik7CisJCWwyYyh4b3IxLGl2KTsKKyNlbmRpZgorCQl9CisJdGluMD10aW4xPXRvdXQwPXRvdXQxPXhvcjA9eG9yMT0wOworCXRpblswXT10aW5bMV09MDsKKwl9CmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zZXRfa2V5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmIyNmI5YwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NldF9rZXkuYwpAQCAtMCwwICsxLDQwNiBAQAorLyogY3J5cHRvL2Rlcy9zZXRfa2V5LmMgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworLyogc2V0X2tleS5jIHYgMS40IGVheSAyNC85LzkxCisgKiAxLjQgU3BlZWQgdXAgYnkgNDAwJSA6LSkKKyAqIDEuMyBhZGRlZCByZWdpc3RlciBkZWNsYXJhdGlvbnMuCisgKiAxLjIgdW5yb2xsZWQgbWFrZV9rZXlfc2NoZWQgYSBiaXQgbW9yZQorICogMS4xIGFkZGVkIG5vcm1fZXhwYW5kX2JpdHMKKyAqIDEuMCBGaXJzdCB3b3JraW5nIHZlcnNpb24KKyAqLworaW50IERFU19jaGVja19rZXkgPSAwOworI2luY2x1ZGUgIm9wZW5zc2xfZGVzX2xvY2FsLmgiCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIG9kZF9wYXJpdHlbMjU2XT17CisgIDEsICAxLCAgMiwgIDIsICA0LCAgNCwgIDcsICA3LCAgOCwgIDgsIDExLCAxMSwgMTMsIDEzLCAxNCwgMTQsCisgMTYsIDE2LCAxOSwgMTksIDIxLCAyMSwgMjIsIDIyLCAyNSwgMjUsIDI2LCAyNiwgMjgsIDI4LCAzMSwgMzEsCisgMzIsIDMyLCAzNSwgMzUsIDM3LCAzNywgMzgsIDM4LCA0MSwgNDEsIDQyLCA0MiwgNDQsIDQ0LCA0NywgNDcsCisgNDksIDQ5LCA1MCwgNTAsIDUyLCA1MiwgNTUsIDU1LCA1NiwgNTYsIDU5LCA1OSwgNjEsIDYxLCA2MiwgNjIsCisgNjQsIDY0LCA2NywgNjcsIDY5LCA2OSwgNzAsIDcwLCA3MywgNzMsIDc0LCA3NCwgNzYsIDc2LCA3OSwgNzksCisgODEsIDgxLCA4MiwgODIsIDg0LCA4NCwgODcsIDg3LCA4OCwgODgsIDkxLCA5MSwgOTMsIDkzLCA5NCwgOTQsCisgOTcsIDk3LCA5OCwgOTgsMTAwLDEwMCwxMDMsMTAzLDEwNCwxMDQsMTA3LDEwNywxMDksMTA5LDExMCwxMTAsCisxMTIsMTEyLDExNSwxMTUsMTE3LDExNywxMTgsMTE4LDEyMSwxMjEsMTIyLDEyMiwxMjQsMTI0LDEyNywxMjcsCisxMjgsMTI4LDEzMSwxMzEsMTMzLDEzMywxMzQsMTM0LDEzNywxMzcsMTM4LDEzOCwxNDAsMTQwLDE0MywxNDMsCisxNDUsMTQ1LDE0NiwxNDYsMTQ4LDE0OCwxNTEsMTUxLDE1MiwxNTIsMTU1LDE1NSwxNTcsMTU3LDE1OCwxNTgsCisxNjEsMTYxLDE2MiwxNjIsMTY0LDE2NCwxNjcsMTY3LDE2OCwxNjgsMTcxLDE3MSwxNzMsMTczLDE3NCwxNzQsCisxNzYsMTc2LDE3OSwxNzksMTgxLDE4MSwxODIsMTgyLDE4NSwxODUsMTg2LDE4NiwxODgsMTg4LDE5MSwxOTEsCisxOTMsMTkzLDE5NCwxOTQsMTk2LDE5NiwxOTksMTk5LDIwMCwyMDAsMjAzLDIwMywyMDUsMjA1LDIwNiwyMDYsCisyMDgsMjA4LDIxMSwyMTEsMjEzLDIxMywyMTQsMjE0LDIxNywyMTcsMjE4LDIxOCwyMjAsMjIwLDIyMywyMjMsCisyMjQsMjI0LDIyNywyMjcsMjI5LDIyOSwyMzAsMjMwLDIzMywyMzMsMjM0LDIzNCwyMzYsMjM2LDIzOSwyMzksCisyNDEsMjQxLDI0MiwyNDIsMjQ0LDI0NCwyNDcsMjQ3LDI0OCwyNDgsMjUxLDI1MSwyNTMsMjUzLDI1NCwyNTR9OworCit2b2lkIERFU19zZXRfb2RkX3Bhcml0eShERVNfY2Jsb2NrICprZXkpCisJeworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpPTA7IGk8REVTX0tFWV9TWjsgaSsrKQorCQkoKmtleSlbaV09b2RkX3Bhcml0eVsoKmtleSlbaV1dOworCX0KKworaW50IERFU19jaGVja19rZXlfcGFyaXR5KGNvbnN0X0RFU19jYmxvY2sgKmtleSkKKwl7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGk9MDsgaTxERVNfS0VZX1NaOyBpKyspCisJCXsKKwkJaWYgKCgqa2V5KVtpXSAhPSBvZGRfcGFyaXR5Wygqa2V5KVtpXV0pCisJCQlyZXR1cm4oMCk7CisJCX0KKwlyZXR1cm4oMSk7CisJfQorCisvKiBXZWFrIGFuZCBzZW1pIHdlZWsga2V5cyBhcyB0YWtlIGZyb20KKyAqICVBIEQuVy4gRGF2aWVzCisgKiAlQSBXLkwuIFByaWNlCisgKiAlVCBTZWN1cml0eSBmb3IgQ29tcHV0ZXIgTmV0d29ya3MKKyAqICVJIEpvaG4gV2lsZXkgJiBTb25zCisgKiAlRCAxOTg0CisgKiBNYW55IHRoYW5rcyB0byBzbWJAdWx5c3Nlcy5hdHQuY29tIChTdGV2ZW4gQmVsbG92aW4pIGZvciB0aGUgcmVmZXJlbmNlCisgKiAoYW5kIGFjdHVhbCBjYmxvY2sgdmFsdWVzKS4KKyAqLworI2RlZmluZSBOVU1fV0VBS19LRVkJMTYKK3N0YXRpYyBjb25zdCBERVNfY2Jsb2NrIHdlYWtfa2V5c1tOVU1fV0VBS19LRVldPXsKKwkvKiB3ZWFrIGtleXMgKi8KKwl7MHgwMSwweDAxLDB4MDEsMHgwMSwweDAxLDB4MDEsMHgwMSwweDAxfSwKKwl7MHhGRSwweEZFLDB4RkUsMHhGRSwweEZFLDB4RkUsMHhGRSwweEZFfSwKKwl7MHgxRiwweDFGLDB4MUYsMHgxRiwweDBFLDB4MEUsMHgwRSwweDBFfSwKKwl7MHhFMCwweEUwLDB4RTAsMHhFMCwweEYxLDB4RjEsMHhGMSwweEYxfSwKKwkvKiBzZW1pLXdlYWsga2V5cyAqLworCXsweDAxLDB4RkUsMHgwMSwweEZFLDB4MDEsMHhGRSwweDAxLDB4RkV9LAorCXsweEZFLDB4MDEsMHhGRSwweDAxLDB4RkUsMHgwMSwweEZFLDB4MDF9LAorCXsweDFGLDB4RTAsMHgxRiwweEUwLDB4MEUsMHhGMSwweDBFLDB4RjF9LAorCXsweEUwLDB4MUYsMHhFMCwweDFGLDB4RjEsMHgwRSwweEYxLDB4MEV9LAorCXsweDAxLDB4RTAsMHgwMSwweEUwLDB4MDEsMHhGMSwweDAxLDB4RjF9LAorCXsweEUwLDB4MDEsMHhFMCwweDAxLDB4RjEsMHgwMSwweEYxLDB4MDF9LAorCXsweDFGLDB4RkUsMHgxRiwweEZFLDB4MEUsMHhGRSwweDBFLDB4RkV9LAorCXsweEZFLDB4MUYsMHhGRSwweDFGLDB4RkUsMHgwRSwweEZFLDB4MEV9LAorCXsweDAxLDB4MUYsMHgwMSwweDFGLDB4MDEsMHgwRSwweDAxLDB4MEV9LAorCXsweDFGLDB4MDEsMHgxRiwweDAxLDB4MEUsMHgwMSwweDBFLDB4MDF9LAorCXsweEUwLDB4RkUsMHhFMCwweEZFLDB4RjEsMHhGRSwweEYxLDB4RkV9LAorCXsweEZFLDB4RTAsMHhGRSwweEUwLDB4RkUsMHhGMSwweEZFLDB4RjF9fTsKKworaW50IERFU19pc193ZWFrX2tleShjb25zdF9ERVNfY2Jsb2NrICprZXkpCisJeworCWludCBpOworCisJZm9yIChpPTA7IGk8TlVNX1dFQUtfS0VZOyBpKyspCisJCS8qIEFkZGVkID09IDAgdG8gY29tcGFyaXNvbiwgSSBvYnZpb3VzbHkgZG9uJ3QgcnVuCisJCSAqIHRoaXMgc2VjdGlvbiB2ZXJ5IG9mdGVuIDotKCwgdGhhbmtzIHRvCisJCSAqIGVuZ2luZWVyaW5nQE1vcm5pbmdTdGFyLkNvbSBmb3IgdGhlIGZpeAorCQkgKiBlYXkgOTMvMDYvMjkKKwkJICogQW5vdGhlciBwcm9ibGVtLCBJIHdhcyBjb21wYXJpbmcgb25seSB0aGUgZmlyc3QgNAorCQkgKiBieXRlcywgOTcvMDMvMTggKi8KKwkJaWYgKG1lbWNtcCh3ZWFrX2tleXNbaV0sa2V5LHNpemVvZihERVNfY2Jsb2NrKSkgPT0gMCkgcmV0dXJuKDEpOworCXJldHVybigwKTsKKwl9CisKKy8qIE5PVyBERUZJTkVEIElOIGRlc19sb2NhbC5oCisgKiBTZWUgZWNiX2VuY3J5cHQuYyBmb3IgYSBwc2V1ZG8gZGVzY3JpcHRpb24gb2YgdGhlc2UgbWFjcm9zLiAKKyAqICNkZWZpbmUgUEVSTV9PUChhLGIsdCxuLG0pICgodCk9KCgoKGEpPj4obikpXihiKSkmKG0pKSxcCisgKiAJKGIpXj0odCksXAorICogCShhKT0oKGEpXigodCk8PChuKSkpKQorICovCisKKyNkZWZpbmUgSFBFUk1fT1AoYSx0LG4sbSkgKCh0KT0oKCgoYSk8PCgxNi0obikpKV4oYSkpJihtKSksXAorCShhKT0oYSleKHQpXih0Pj4oMTYtKG4pKSkpCisKK3N0YXRpYyBjb25zdCBERVNfTE9ORyBkZXNfc2tiWzhdWzY0XT17CisJeworCS8qIGZvciBDIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSAxIDIgMyA0IDUgNiAqLworCTB4MDAwMDAwMDBMLDB4MDAwMDAwMTBMLDB4MjAwMDAwMDBMLDB4MjAwMDAwMTBMLAorCTB4MDAwMTAwMDBMLDB4MDAwMTAwMTBMLDB4MjAwMTAwMDBMLDB4MjAwMTAwMTBMLAorCTB4MDAwMDA4MDBMLDB4MDAwMDA4MTBMLDB4MjAwMDA4MDBMLDB4MjAwMDA4MTBMLAorCTB4MDAwMTA4MDBMLDB4MDAwMTA4MTBMLDB4MjAwMTA4MDBMLDB4MjAwMTA4MTBMLAorCTB4MDAwMDAwMjBMLDB4MDAwMDAwMzBMLDB4MjAwMDAwMjBMLDB4MjAwMDAwMzBMLAorCTB4MDAwMTAwMjBMLDB4MDAwMTAwMzBMLDB4MjAwMTAwMjBMLDB4MjAwMTAwMzBMLAorCTB4MDAwMDA4MjBMLDB4MDAwMDA4MzBMLDB4MjAwMDA4MjBMLDB4MjAwMDA4MzBMLAorCTB4MDAwMTA4MjBMLDB4MDAwMTA4MzBMLDB4MjAwMTA4MjBMLDB4MjAwMTA4MzBMLAorCTB4MDAwODAwMDBMLDB4MDAwODAwMTBMLDB4MjAwODAwMDBMLDB4MjAwODAwMTBMLAorCTB4MDAwOTAwMDBMLDB4MDAwOTAwMTBMLDB4MjAwOTAwMDBMLDB4MjAwOTAwMTBMLAorCTB4MDAwODA4MDBMLDB4MDAwODA4MTBMLDB4MjAwODA4MDBMLDB4MjAwODA4MTBMLAorCTB4MDAwOTA4MDBMLDB4MDAwOTA4MTBMLDB4MjAwOTA4MDBMLDB4MjAwOTA4MTBMLAorCTB4MDAwODAwMjBMLDB4MDAwODAwMzBMLDB4MjAwODAwMjBMLDB4MjAwODAwMzBMLAorCTB4MDAwOTAwMjBMLDB4MDAwOTAwMzBMLDB4MjAwOTAwMjBMLDB4MjAwOTAwMzBMLAorCTB4MDAwODA4MjBMLDB4MDAwODA4MzBMLDB4MjAwODA4MjBMLDB4MjAwODA4MzBMLAorCTB4MDAwOTA4MjBMLDB4MDAwOTA4MzBMLDB4MjAwOTA4MjBMLDB4MjAwOTA4MzBMLAorCX0seworCS8qIGZvciBDIGJpdHMgKG51bWJlcmVkIGFzIHBlciBGSVBTIDQ2KSA3IDggMTAgMTEgMTIgMTMgKi8KKwkweDAwMDAwMDAwTCwweDAyMDAwMDAwTCwweDAwMDAyMDAwTCwweDAyMDAyMDAwTCwKKwkweDAwMjAwMDAwTCwweDAyMjAwMDAwTCwweDAwMjAyMDAwTCwweDAyMjAyMDAwTCwKKwkweDAwMDAwMDA0TCwweDAyMDAwMDA0TCwweDAwMDAyMDA0TCwweDAyMDAyMDA0TCwKKwkweDAwMjAwMDA0TCwweDAyMjAwMDA0TCwweDAwMjAyMDA0TCwweDAyMjAyMDA0TCwKKwkweDAwMDAwNDAwTCwweDAyMDAwNDAwTCwweDAwMDAyNDAwTCwweDAyMDAyNDAwTCwKKwkweDAwMjAwNDAwTCwweDAyMjAwNDAwTCwweDAwMjAyNDAwTCwweDAyMjAyNDAwTCwKKwkweDAwMDAwNDA0TCwweDAyMDAwNDA0TCwweDAwMDAyNDA0TCwweDAyMDAyNDA0TCwKKwkweDAwMjAwNDA0TCwweDAyMjAwNDA0TCwweDAwMjAyNDA0TCwweDAyMjAyNDA0TCwKKwkweDEwMDAwMDAwTCwweDEyMDAwMDAwTCwweDEwMDAyMDAwTCwweDEyMDAyMDAwTCwKKwkweDEwMjAwMDAwTCwweDEyMjAwMDAwTCwweDEwMjAyMDAwTCwweDEyMjAyMDAwTCwKKwkweDEwMDAwMDA0TCwweDEyMDAwMDA0TCwweDEwMDAyMDA0TCwweDEyMDAyMDA0TCwKKwkweDEwMjAwMDA0TCwweDEyMjAwMDA0TCwweDEwMjAyMDA0TCwweDEyMjAyMDA0TCwKKwkweDEwMDAwNDAwTCwweDEyMDAwNDAwTCwweDEwMDAyNDAwTCwweDEyMDAyNDAwTCwKKwkweDEwMjAwNDAwTCwweDEyMjAwNDAwTCwweDEwMjAyNDAwTCwweDEyMjAyNDAwTCwKKwkweDEwMDAwNDA0TCwweDEyMDAwNDA0TCwweDEwMDAyNDA0TCwweDEyMDAyNDA0TCwKKwkweDEwMjAwNDA0TCwweDEyMjAwNDA0TCwweDEwMjAyNDA0TCwweDEyMjAyNDA0TCwKKwl9LHsKKwkvKiBmb3IgQyBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgMTQgMTUgMTYgMTcgMTkgMjAgKi8KKwkweDAwMDAwMDAwTCwweDAwMDAwMDAxTCwweDAwMDQwMDAwTCwweDAwMDQwMDAxTCwKKwkweDAxMDAwMDAwTCwweDAxMDAwMDAxTCwweDAxMDQwMDAwTCwweDAxMDQwMDAxTCwKKwkweDAwMDAwMDAyTCwweDAwMDAwMDAzTCwweDAwMDQwMDAyTCwweDAwMDQwMDAzTCwKKwkweDAxMDAwMDAyTCwweDAxMDAwMDAzTCwweDAxMDQwMDAyTCwweDAxMDQwMDAzTCwKKwkweDAwMDAwMjAwTCwweDAwMDAwMjAxTCwweDAwMDQwMjAwTCwweDAwMDQwMjAxTCwKKwkweDAxMDAwMjAwTCwweDAxMDAwMjAxTCwweDAxMDQwMjAwTCwweDAxMDQwMjAxTCwKKwkweDAwMDAwMjAyTCwweDAwMDAwMjAzTCwweDAwMDQwMjAyTCwweDAwMDQwMjAzTCwKKwkweDAxMDAwMjAyTCwweDAxMDAwMjAzTCwweDAxMDQwMjAyTCwweDAxMDQwMjAzTCwKKwkweDA4MDAwMDAwTCwweDA4MDAwMDAxTCwweDA4MDQwMDAwTCwweDA4MDQwMDAxTCwKKwkweDA5MDAwMDAwTCwweDA5MDAwMDAxTCwweDA5MDQwMDAwTCwweDA5MDQwMDAxTCwKKwkweDA4MDAwMDAyTCwweDA4MDAwMDAzTCwweDA4MDQwMDAyTCwweDA4MDQwMDAzTCwKKwkweDA5MDAwMDAyTCwweDA5MDAwMDAzTCwweDA5MDQwMDAyTCwweDA5MDQwMDAzTCwKKwkweDA4MDAwMjAwTCwweDA4MDAwMjAxTCwweDA4MDQwMjAwTCwweDA4MDQwMjAxTCwKKwkweDA5MDAwMjAwTCwweDA5MDAwMjAxTCwweDA5MDQwMjAwTCwweDA5MDQwMjAxTCwKKwkweDA4MDAwMjAyTCwweDA4MDAwMjAzTCwweDA4MDQwMjAyTCwweDA4MDQwMjAzTCwKKwkweDA5MDAwMjAyTCwweDA5MDAwMjAzTCwweDA5MDQwMjAyTCwweDA5MDQwMjAzTCwKKwl9LHsKKwkvKiBmb3IgQyBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgMjEgMjMgMjQgMjYgMjcgMjggKi8KKwkweDAwMDAwMDAwTCwweDAwMTAwMDAwTCwweDAwMDAwMTAwTCwweDAwMTAwMTAwTCwKKwkweDAwMDAwMDA4TCwweDAwMTAwMDA4TCwweDAwMDAwMTA4TCwweDAwMTAwMTA4TCwKKwkweDAwMDAxMDAwTCwweDAwMTAxMDAwTCwweDAwMDAxMTAwTCwweDAwMTAxMTAwTCwKKwkweDAwMDAxMDA4TCwweDAwMTAxMDA4TCwweDAwMDAxMTA4TCwweDAwMTAxMTA4TCwKKwkweDA0MDAwMDAwTCwweDA0MTAwMDAwTCwweDA0MDAwMTAwTCwweDA0MTAwMTAwTCwKKwkweDA0MDAwMDA4TCwweDA0MTAwMDA4TCwweDA0MDAwMTA4TCwweDA0MTAwMTA4TCwKKwkweDA0MDAxMDAwTCwweDA0MTAxMDAwTCwweDA0MDAxMTAwTCwweDA0MTAxMTAwTCwKKwkweDA0MDAxMDA4TCwweDA0MTAxMDA4TCwweDA0MDAxMTA4TCwweDA0MTAxMTA4TCwKKwkweDAwMDIwMDAwTCwweDAwMTIwMDAwTCwweDAwMDIwMTAwTCwweDAwMTIwMTAwTCwKKwkweDAwMDIwMDA4TCwweDAwMTIwMDA4TCwweDAwMDIwMTA4TCwweDAwMTIwMTA4TCwKKwkweDAwMDIxMDAwTCwweDAwMTIxMDAwTCwweDAwMDIxMTAwTCwweDAwMTIxMTAwTCwKKwkweDAwMDIxMDA4TCwweDAwMTIxMDA4TCwweDAwMDIxMTA4TCwweDAwMTIxMTA4TCwKKwkweDA0MDIwMDAwTCwweDA0MTIwMDAwTCwweDA0MDIwMTAwTCwweDA0MTIwMTAwTCwKKwkweDA0MDIwMDA4TCwweDA0MTIwMDA4TCwweDA0MDIwMTA4TCwweDA0MTIwMTA4TCwKKwkweDA0MDIxMDAwTCwweDA0MTIxMDAwTCwweDA0MDIxMTAwTCwweDA0MTIxMTAwTCwKKwkweDA0MDIxMDA4TCwweDA0MTIxMDA4TCwweDA0MDIxMTA4TCwweDA0MTIxMTA4TCwKKwl9LHsKKwkvKiBmb3IgRCBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgMSAyIDMgNCA1IDYgKi8KKwkweDAwMDAwMDAwTCwweDEwMDAwMDAwTCwweDAwMDEwMDAwTCwweDEwMDEwMDAwTCwKKwkweDAwMDAwMDA0TCwweDEwMDAwMDA0TCwweDAwMDEwMDA0TCwweDEwMDEwMDA0TCwKKwkweDIwMDAwMDAwTCwweDMwMDAwMDAwTCwweDIwMDEwMDAwTCwweDMwMDEwMDAwTCwKKwkweDIwMDAwMDA0TCwweDMwMDAwMDA0TCwweDIwMDEwMDA0TCwweDMwMDEwMDA0TCwKKwkweDAwMTAwMDAwTCwweDEwMTAwMDAwTCwweDAwMTEwMDAwTCwweDEwMTEwMDAwTCwKKwkweDAwMTAwMDA0TCwweDEwMTAwMDA0TCwweDAwMTEwMDA0TCwweDEwMTEwMDA0TCwKKwkweDIwMTAwMDAwTCwweDMwMTAwMDAwTCwweDIwMTEwMDAwTCwweDMwMTEwMDAwTCwKKwkweDIwMTAwMDA0TCwweDMwMTAwMDA0TCwweDIwMTEwMDA0TCwweDMwMTEwMDA0TCwKKwkweDAwMDAxMDAwTCwweDEwMDAxMDAwTCwweDAwMDExMDAwTCwweDEwMDExMDAwTCwKKwkweDAwMDAxMDA0TCwweDEwMDAxMDA0TCwweDAwMDExMDA0TCwweDEwMDExMDA0TCwKKwkweDIwMDAxMDAwTCwweDMwMDAxMDAwTCwweDIwMDExMDAwTCwweDMwMDExMDAwTCwKKwkweDIwMDAxMDA0TCwweDMwMDAxMDA0TCwweDIwMDExMDA0TCwweDMwMDExMDA0TCwKKwkweDAwMTAxMDAwTCwweDEwMTAxMDAwTCwweDAwMTExMDAwTCwweDEwMTExMDAwTCwKKwkweDAwMTAxMDA0TCwweDEwMTAxMDA0TCwweDAwMTExMDA0TCwweDEwMTExMDA0TCwKKwkweDIwMTAxMDAwTCwweDMwMTAxMDAwTCwweDIwMTExMDAwTCwweDMwMTExMDAwTCwKKwkweDIwMTAxMDA0TCwweDMwMTAxMDA0TCwweDIwMTExMDA0TCwweDMwMTExMDA0TCwKKwl9LHsKKwkvKiBmb3IgRCBiaXRzIChudW1iZXJlZCBhcyBwZXIgRklQUyA0NikgOCA5IDExIDEyIDEzIDE0ICovCisJMHgwMDAwMDAwMEwsMHgwODAwMDAwMEwsMHgwMDAwMDAwOEwsMHgwODAwMDAwOEwsCisJMHgwMDAwMDQwMEwsMHgwODAwMDQwMEwsMHgwMDAwMDQwOEwsMHgwODAwMDQwOEwsCisJMHgwMDAyMDAwMEwsMHgwODAyMDAwMEwsMHgwMDAyMDAwOEwsMHgwODAyMDAwOEwsCisJMHgwMDAyMDQwMEwsMHgwODAyMDQwMEwsMHgwMDAyMDQwOEwsMHgwODAyMDQwOEwsCisJMHgwMDAwMDAwMUwsMHgwODAwMDAwMUwsMHgwMDAwMDAwOUwsMHgwODAwMDAwOUwsCisJMHgwMDAwMDQwMUwsMHgwODAwMDQwMUwsMHgwMDAwMDQwOUwsMHgwODAwMDQwOUwsCisJMHgwMDAyMDAwMUwsMHgwODAyMDAwMUwsMHgwMDAyMDAwOUwsMHgwODAyMDAwOUwsCisJMHgwMDAyMDQwMUwsMHgwODAyMDQwMUwsMHgwMDAyMDQwOUwsMHgwODAyMDQwOUwsCisJMHgwMjAwMDAwMEwsMHgwQTAwMDAwMEwsMHgwMjAwMDAwOEwsMHgwQTAwMDAwOEwsCisJMHgwMjAwMDQwMEwsMHgwQTAwMDQwMEwsMHgwMjAwMDQwOEwsMHgwQTAwMDQwOEwsCisJMHgwMjAyMDAwMEwsMHgwQTAyMDAwMEwsMHgwMjAyMDAwOEwsMHgwQTAyMDAwOEwsCisJMHgwMjAyMDQwMEwsMHgwQTAyMDQwMEwsMHgwMjAyMDQwOEwsMHgwQTAyMDQwOEwsCisJMHgwMjAwMDAwMUwsMHgwQTAwMDAwMUwsMHgwMjAwMDAwOUwsMHgwQTAwMDAwOUwsCisJMHgwMjAwMDQwMUwsMHgwQTAwMDQwMUwsMHgwMjAwMDQwOUwsMHgwQTAwMDQwOUwsCisJMHgwMjAyMDAwMUwsMHgwQTAyMDAwMUwsMHgwMjAyMDAwOUwsMHgwQTAyMDAwOUwsCisJMHgwMjAyMDQwMUwsMHgwQTAyMDQwMUwsMHgwMjAyMDQwOUwsMHgwQTAyMDQwOUwsCisJfSx7CisJLyogZm9yIEQgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDE2IDE3IDE4IDE5IDIwIDIxICovCisJMHgwMDAwMDAwMEwsMHgwMDAwMDEwMEwsMHgwMDA4MDAwMEwsMHgwMDA4MDEwMEwsCisJMHgwMTAwMDAwMEwsMHgwMTAwMDEwMEwsMHgwMTA4MDAwMEwsMHgwMTA4MDEwMEwsCisJMHgwMDAwMDAxMEwsMHgwMDAwMDExMEwsMHgwMDA4MDAxMEwsMHgwMDA4MDExMEwsCisJMHgwMTAwMDAxMEwsMHgwMTAwMDExMEwsMHgwMTA4MDAxMEwsMHgwMTA4MDExMEwsCisJMHgwMDIwMDAwMEwsMHgwMDIwMDEwMEwsMHgwMDI4MDAwMEwsMHgwMDI4MDEwMEwsCisJMHgwMTIwMDAwMEwsMHgwMTIwMDEwMEwsMHgwMTI4MDAwMEwsMHgwMTI4MDEwMEwsCisJMHgwMDIwMDAxMEwsMHgwMDIwMDExMEwsMHgwMDI4MDAxMEwsMHgwMDI4MDExMEwsCisJMHgwMTIwMDAxMEwsMHgwMTIwMDExMEwsMHgwMTI4MDAxMEwsMHgwMTI4MDExMEwsCisJMHgwMDAwMDIwMEwsMHgwMDAwMDMwMEwsMHgwMDA4MDIwMEwsMHgwMDA4MDMwMEwsCisJMHgwMTAwMDIwMEwsMHgwMTAwMDMwMEwsMHgwMTA4MDIwMEwsMHgwMTA4MDMwMEwsCisJMHgwMDAwMDIxMEwsMHgwMDAwMDMxMEwsMHgwMDA4MDIxMEwsMHgwMDA4MDMxMEwsCisJMHgwMTAwMDIxMEwsMHgwMTAwMDMxMEwsMHgwMTA4MDIxMEwsMHgwMTA4MDMxMEwsCisJMHgwMDIwMDIwMEwsMHgwMDIwMDMwMEwsMHgwMDI4MDIwMEwsMHgwMDI4MDMwMEwsCisJMHgwMTIwMDIwMEwsMHgwMTIwMDMwMEwsMHgwMTI4MDIwMEwsMHgwMTI4MDMwMEwsCisJMHgwMDIwMDIxMEwsMHgwMDIwMDMxMEwsMHgwMDI4MDIxMEwsMHgwMDI4MDMxMEwsCisJMHgwMTIwMDIxMEwsMHgwMTIwMDMxMEwsMHgwMTI4MDIxMEwsMHgwMTI4MDMxMEwsCisJfSx7CisJLyogZm9yIEQgYml0cyAobnVtYmVyZWQgYXMgcGVyIEZJUFMgNDYpIDIyIDIzIDI0IDI1IDI3IDI4ICovCisJMHgwMDAwMDAwMEwsMHgwNDAwMDAwMEwsMHgwMDA0MDAwMEwsMHgwNDA0MDAwMEwsCisJMHgwMDAwMDAwMkwsMHgwNDAwMDAwMkwsMHgwMDA0MDAwMkwsMHgwNDA0MDAwMkwsCisJMHgwMDAwMjAwMEwsMHgwNDAwMjAwMEwsMHgwMDA0MjAwMEwsMHgwNDA0MjAwMEwsCisJMHgwMDAwMjAwMkwsMHgwNDAwMjAwMkwsMHgwMDA0MjAwMkwsMHgwNDA0MjAwMkwsCisJMHgwMDAwMDAyMEwsMHgwNDAwMDAyMEwsMHgwMDA0MDAyMEwsMHgwNDA0MDAyMEwsCisJMHgwMDAwMDAyMkwsMHgwNDAwMDAyMkwsMHgwMDA0MDAyMkwsMHgwNDA0MDAyMkwsCisJMHgwMDAwMjAyMEwsMHgwNDAwMjAyMEwsMHgwMDA0MjAyMEwsMHgwNDA0MjAyMEwsCisJMHgwMDAwMjAyMkwsMHgwNDAwMjAyMkwsMHgwMDA0MjAyMkwsMHgwNDA0MjAyMkwsCisJMHgwMDAwMDgwMEwsMHgwNDAwMDgwMEwsMHgwMDA0MDgwMEwsMHgwNDA0MDgwMEwsCisJMHgwMDAwMDgwMkwsMHgwNDAwMDgwMkwsMHgwMDA0MDgwMkwsMHgwNDA0MDgwMkwsCisJMHgwMDAwMjgwMEwsMHgwNDAwMjgwMEwsMHgwMDA0MjgwMEwsMHgwNDA0MjgwMEwsCisJMHgwMDAwMjgwMkwsMHgwNDAwMjgwMkwsMHgwMDA0MjgwMkwsMHgwNDA0MjgwMkwsCisJMHgwMDAwMDgyMEwsMHgwNDAwMDgyMEwsMHgwMDA0MDgyMEwsMHgwNDA0MDgyMEwsCisJMHgwMDAwMDgyMkwsMHgwNDAwMDgyMkwsMHgwMDA0MDgyMkwsMHgwNDA0MDgyMkwsCisJMHgwMDAwMjgyMEwsMHgwNDAwMjgyMEwsMHgwMDA0MjgyMEwsMHgwNDA0MjgyMEwsCisJMHgwMDAwMjgyMkwsMHgwNDAwMjgyMkwsMHgwMDA0MjgyMkwsMHgwNDA0MjgyMkwsCisJfX07CisKK2ludCBERVNfc2V0X2tleShjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorCXsKKwlpZiAoREVTX2NoZWNrX2tleSkKKwkJeworCQlyZXR1cm4gREVTX3NldF9rZXlfY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKKwkJfQorCWVsc2UKKwkJeworCQlERVNfc2V0X2tleV91bmNoZWNrZWQoa2V5LCBzY2hlZHVsZSk7CisJCXJldHVybiAwOworCQl9CisJfQorCisvKiByZXR1cm4gMCBpZiBrZXkgcGFyaXR5IGlzIG9kZCAoY29ycmVjdCksCisgKiByZXR1cm4gLTEgaWYga2V5IHBhcml0eSBlcnJvciwKKyAqIHJldHVybiAtMiBpZiBpbGxlZ2FsIHdlYWsga2V5LgorICovCitpbnQgREVTX3NldF9rZXlfY2hlY2tlZChjb25zdF9ERVNfY2Jsb2NrICprZXksIERFU19rZXlfc2NoZWR1bGUgKnNjaGVkdWxlKQorCXsKKwlpZiAoIURFU19jaGVja19rZXlfcGFyaXR5KGtleSkpCisJCXJldHVybigtMSk7CisJaWYgKERFU19pc193ZWFrX2tleShrZXkpKQorCQlyZXR1cm4oLTIpOworCURFU19zZXRfa2V5X3VuY2hlY2tlZChrZXksIHNjaGVkdWxlKTsKKwlyZXR1cm4gMDsKKwl9CisKK3ZvaWQgREVTX3NldF9rZXlfdW5jaGVja2VkKGNvbnN0X0RFU19jYmxvY2sgKmtleSwgREVTX2tleV9zY2hlZHVsZSAqc2NoZWR1bGUpCisJeworCXN0YXRpYyBjb25zdCBpbnQgc2hpZnRzMlsxNl09ezAsMCwxLDEsMSwxLDEsMSwwLDEsMSwxLDEsMSwxLDB9OworCXJlZ2lzdGVyIERFU19MT05HIGMsZCx0LHMsdDI7CisJcmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqaW47CisJcmVnaXN0ZXIgREVTX0xPTkcgKms7CisJcmVnaXN0ZXIgaW50IGk7CisKKyNpZmRlZiBPUEVOQlNEX0RFVl9DUllQVE8KKwltZW1jcHkoc2NoZWR1bGUtPmtleSxrZXksc2l6ZW9mIHNjaGVkdWxlLT5rZXkpOworCXNjaGVkdWxlLT5zZXNzaW9uPU5VTEw7CisjZW5kaWYKKwlrID0gJnNjaGVkdWxlLT5rcy0+ZGVzbG9uZ1swXTsKKwlpbiA9ICYoKmtleSlbMF07CisKKwljMmwoaW4sYyk7CisJYzJsKGluLGQpOworCisJLyogZG8gUEMxIGluIDQ3IHNpbXBsZSBvcGVyYXRpb25zIDotKQorCSAqIFRoYW5rcyB0byBKb2huIEZsZXRjaGVyIChqb2huX2ZsZXRjaGVyQGxjY21haWwub2NmLmxsbmwuZ292KQorCSAqIGZvciB0aGUgaW5zcGlyYXRpb24uIDotKSAqLworCVBFUk1fT1AgKGQsYyx0LDQsMHgwZjBmMGYwZkwpOworCUhQRVJNX09QKGMsdCwtMiwweGNjY2MwMDAwTCk7CisJSFBFUk1fT1AoZCx0LC0yLDB4Y2NjYzAwMDBMKTsKKwlQRVJNX09QIChkLGMsdCwxLDB4NTU1NTU1NTVMKTsKKwlQRVJNX09QIChjLGQsdCw4LDB4MDBmZjAwZmZMKTsKKwlQRVJNX09QIChkLGMsdCwxLDB4NTU1NTU1NTVMKTsKKwlkPQkoKChkJjB4MDAwMDAwZmZMKTw8MTZMKXwgKGQmMHgwMDAwZmYwMEwpICAgICB8CisJCSAoKGQmMHgwMGZmMDAwMEwpPj4xNkwpfCgoYyYweGYwMDAwMDAwTCk+PjRMKSk7CisJYyY9MHgwZmZmZmZmZkw7CisKKwlmb3IgKGk9MDsgaTxJVEVSQVRJT05TOyBpKyspCisJCXsKKwkJaWYgKHNoaWZ0czJbaV0pCisJCQl7IGM9KChjPj4yTCl8KGM8PDI2TCkpOyBkPSgoZD4+MkwpfChkPDwyNkwpKTsgfQorCQllbHNlCisJCQl7IGM9KChjPj4xTCl8KGM8PDI3TCkpOyBkPSgoZD4+MUwpfChkPDwyN0wpKTsgfQorCQljJj0weDBmZmZmZmZmTDsKKwkJZCY9MHgwZmZmZmZmZkw7CisJCS8qIGNvdWxkIGJlIGEgZmV3IGxlc3Mgc2hpZnRzIGJ1dCBJIGFtIHRvIGxhenkgYXQgdGhpcworCQkgKiBwb2ludCBpbiB0aW1lIHRvIGludmVzdGlnYXRlICovCisJCXM9CWRlc19za2JbMF1bIChjICAgICkmMHgzZiAgICAgICAgICAgICAgICBdfAorCQkJZGVzX3NrYlsxXVsoKGM+PiA2TCkmMHgwMyl8KChjPj4gN0wpJjB4M2MpXXwKKwkJCWRlc19za2JbMl1bKChjPj4xM0wpJjB4MGYpfCgoYz4+MTRMKSYweDMwKV18CisJCQlkZXNfc2tiWzNdWygoYz4+MjBMKSYweDAxKXwoKGM+PjIxTCkmMHgwNikgfAorCQkJCQkJICAoKGM+PjIyTCkmMHgzOCldOworCQl0PQlkZXNfc2tiWzRdWyAoZCAgICApJjB4M2YgICAgICAgICAgICAgICAgXXwKKwkJCWRlc19za2JbNV1bKChkPj4gN0wpJjB4MDMpfCgoZD4+IDhMKSYweDNjKV18CisJCQlkZXNfc2tiWzZdWyAoZD4+MTVMKSYweDNmICAgICAgICAgICAgICAgIF18CisJCQlkZXNfc2tiWzddWygoZD4+MjFMKSYweDBmKXwoKGQ+PjIyTCkmMHgzMCldOworCisJCS8qIHRhYmxlIGNvbnRhaW5lZCAwMjEzIDQ2NTcgKi8KKwkJdDI9KCh0PDwxNkwpfChzJjB4MDAwMGZmZmZMKSkmMHhmZmZmZmZmZkw7CisJCSooaysrKT1ST1RBVEUodDIsMzApJjB4ZmZmZmZmZmZMOworCisJCXQyPSgocz4+MTZMKXwodCYweGZmZmYwMDAwTCkpOworCQkqKGsrKyk9Uk9UQVRFKHQyLDI2KSYweGZmZmZmZmZmTDsKKwkJfQorCX0KKworaW50IERFU19rZXlfc2NoZWQoY29uc3RfREVTX2NibG9jayAqa2V5LCBERVNfa2V5X3NjaGVkdWxlICpzY2hlZHVsZSkKKwl7CisJcmV0dXJuKERFU19zZXRfa2V5KGtleSxzY2hlZHVsZSkpOworCX0KKy8qCisjdW5kZWYgZGVzX2ZpeHVwX2tleV9wYXJpdHkKK3ZvaWQgZGVzX2ZpeHVwX2tleV9wYXJpdHkoZGVzX2NibG9jayAqa2V5KQorCXsKKwlkZXNfc2V0X29kZF9wYXJpdHkoa2V5KTsKKwl9CisqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhLmggYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzJmZjA5Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi9vcGVuc3NsL29wZW5zc2xfc2hhLmgKQEAgLTAsMCArMSwxOTkgQEAKKy8qIGNyeXB0by9zaGEvc2hhLmggKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI2lmbmRlZiBIRUFERVJfU0hBX0gKKyNkZWZpbmUgSEVBREVSX1NIQV9ICisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworI2lmZGVmICBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworI2lmIGRlZmluZWQoT1BFTlNTTF9OT19TSEEpIHx8IChkZWZpbmVkKE9QRU5TU0xfTk9fU0hBMCkgJiYgZGVmaW5lZChPUEVOU1NMX05PX1NIQTEpKQorI2Vycm9yIFNIQSBpcyBkaXNhYmxlZC4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChPUEVOU1NMX0ZJUFMpCisjZGVmaW5lIEZJUFNfU0hBX1NJWkVfVCBzaXplX3QKKyNlbmRpZgorCisvKgorICogISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQorICogISBTSEFfTE9ORyBoYXMgdG8gYmUgYXQgbGVhc3QgMzIgYml0cyB3aWRlLiBJZiBpdCdzIHdpZGVyLCB0aGVuICEKKyAqICEgU0hBX0xPTkdfTE9HMiBoYXMgdG8gYmUgZGVmaW5lZCBhbG9uZy4gICAgICAgICAgICAgICAgICAgICAgICAhCisgKiAhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhCisgKi8KKworI2lmIGRlZmluZWQoX19MUDMyX18pCisjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGxvbmcKKyNlbGlmIGRlZmluZWQoT1BFTlNTTF9TWVNfQ1JBWSkgfHwgZGVmaW5lZChfX0lMUDY0X18pCisjZGVmaW5lIFNIQV9MT05HIHVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgU0hBX0xPTkdfTE9HMiAzCisjZWxzZQorI2RlZmluZSBTSEFfTE9ORyB1bnNpZ25lZCBpbnQKKyNlbmRpZgorCisjZGVmaW5lIFNIQV9MQkxPQ0sJMTYKKyNkZWZpbmUgU0hBX0NCTE9DSwkoU0hBX0xCTE9DSyo0KQkvKiBTSEEgdHJlYXRzIGlucHV0IGRhdGEgYXMgYQorCQkJCQkgKiBjb250aWd1b3VzIGFycmF5IG9mIDMyIGJpdAorCQkJCQkgKiB3aWRlIGJpZy1lbmRpYW4gdmFsdWVzLiAqLworI2RlZmluZSBTSEFfTEFTVF9CTE9DSyAgKFNIQV9DQkxPQ0stOCkKKyNkZWZpbmUgU0hBX0RJR0VTVF9MRU5HVEggMjAKKwordHlwZWRlZiBzdHJ1Y3QgU0hBc3RhdGVfc3QKKwl7CisJU0hBX0xPTkcgaDAsaDEsaDIsaDMsaDQ7CisJU0hBX0xPTkcgTmwsTmg7CisJU0hBX0xPTkcgZGF0YVtTSEFfTEJMT0NLXTsKKwl1bnNpZ25lZCBpbnQgbnVtOworCX0gU0hBX0NUWDsKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTAKK2ludCBTSEFfSW5pdChTSEFfQ1RYICpjKTsKK2ludCBTSEFfVXBkYXRlKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworaW50IFNIQV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEEoY29uc3QgdW5zaWduZWQgY2hhciAqZCwgc2l6ZV90IG4sIHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBX1RyYW5zZm9ybShTSEFfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX05PX1NIQTEKK2ludCBTSEExX0luaXQoU0hBX0NUWCAqYyk7CitpbnQgU0hBMV9VcGRhdGUoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMV9GaW5hbCh1bnNpZ25lZCBjaGFyICptZCwgU0hBX0NUWCAqYyk7Cit1bnNpZ25lZCBjaGFyICpTSEExKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLCB1bnNpZ25lZCBjaGFyICptZCk7Cit2b2lkIFNIQTFfVHJhbnNmb3JtKFNIQV9DVFggKmMsIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGEpOworI2VuZGlmCisKKyNkZWZpbmUgU0hBMjU2X0NCTE9DSwkoU0hBX0xCTE9DSyo0KQkvKiBTSEEtMjU2IHRyZWF0cyBpbnB1dCBkYXRhIGFzIGEKKwkJCQkJICogY29udGlndW91cyBhcnJheSBvZiAzMiBiaXQKKwkJCQkJICogd2lkZSBiaWctZW5kaWFuIHZhbHVlcy4gKi8KKyNkZWZpbmUgU0hBMjI0X0RJR0VTVF9MRU5HVEgJMjgKKyNkZWZpbmUgU0hBMjU2X0RJR0VTVF9MRU5HVEgJMzIKKwordHlwZWRlZiBzdHJ1Y3QgU0hBMjU2c3RhdGVfc3QKKwl7CisJU0hBX0xPTkcgaFs4XTsKKwlTSEFfTE9ORyBObCxOaDsKKwlTSEFfTE9ORyBkYXRhW1NIQV9MQkxPQ0tdOworCXVuc2lnbmVkIGludCBudW0sbWRfbGVuOworCX0gU0hBMjU2X0NUWDsKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTI1NgoraW50IFNIQTIyNF9Jbml0KFNIQTI1Nl9DVFggKmMpOworaW50IFNIQTIyNF9VcGRhdGUoU0hBMjU2X0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMjI0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEEyNTZfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTIyNChjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7CitpbnQgU0hBMjU2X0luaXQoU0hBMjU2X0NUWCAqYyk7CitpbnQgU0hBMjU2X1VwZGF0ZShTSEEyNTZfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEEyNTZfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTI1Nl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBMjU2KGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBMjU2X1RyYW5zZm9ybShTSEEyNTZfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisjZGVmaW5lIFNIQTM4NF9ESUdFU1RfTEVOR1RICTQ4CisjZGVmaW5lIFNIQTUxMl9ESUdFU1RfTEVOR1RICTY0CisKKyNpZm5kZWYgT1BFTlNTTF9OT19TSEE1MTIKKy8qCisgKiBVbmxpa2UgMzItYml0IGRpZ2VzdCBhbGdvcml0aG1zLCBTSEEtNTEyICpyZWxpZXMqIG9uIFNIQV9MT05HNjQKKyAqIGJlaW5nIGV4YWN0bHkgNjQtYml0IHdpZGUuIFNlZSBJbXBsZW1lbnRhdGlvbiBOb3RlcyBpbiBzaGE1MTIuYworICogZm9yIGZ1cnRoZXIgZGV0YWlscy4KKyAqLworI2RlZmluZSBTSEE1MTJfQ0JMT0NLCShTSEFfTEJMT0NLKjgpCS8qIFNIQS01MTIgdHJlYXRzIGlucHV0IGRhdGEgYXMgYQorCQkJCQkgKiBjb250aWd1b3VzIGFycmF5IG9mIDY0IGJpdAorCQkJCQkgKiB3aWRlIGJpZy1lbmRpYW4gdmFsdWVzLiAqLworI2lmIChkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChfV0lONjQpKSAmJiAhZGVmaW5lZChfX01JTkdXMzJfXykKKyNkZWZpbmUgU0hBX0xPTkc2NCB1bnNpZ25lZCBfX2ludDY0CisjZGVmaW5lIFU2NChDKSAgICAgQyMjVUk2NAorI2VsaWYgZGVmaW5lZChfX2FyY2g2NF9fKQorI2RlZmluZSBTSEFfTE9ORzY0IHVuc2lnbmVkIGxvbmcKKyNkZWZpbmUgVTY0KEMpICAgICBDIyNVTAorI2Vsc2UKKyNkZWZpbmUgU0hBX0xPTkc2NCB1bnNpZ25lZCBsb25nIGxvbmcKKyNkZWZpbmUgVTY0KEMpICAgICBDIyNVTEwKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBTSEE1MTJzdGF0ZV9zdAorCXsKKwlTSEFfTE9ORzY0IGhbOF07CisJU0hBX0xPTkc2NCBObCxOaDsKKwl1bmlvbiB7CisJCVNIQV9MT05HNjQJZFtTSEFfTEJMT0NLXTsKKwkJdW5zaWduZWQgY2hhcglwW1NIQTUxMl9DQkxPQ0tdOworCX0gdTsKKwl1bnNpZ25lZCBpbnQgbnVtLG1kX2xlbjsKKwl9IFNIQTUxMl9DVFg7CisjZW5kaWYKKworI2lmbmRlZiBPUEVOU1NMX05PX1NIQTUxMgoraW50IFNIQTM4NF9Jbml0KFNIQTUxMl9DVFggKmMpOworaW50IFNIQTM4NF9VcGRhdGUoU0hBNTEyX0NUWCAqYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbik7CitpbnQgU0hBMzg0X0ZpbmFsKHVuc2lnbmVkIGNoYXIgKm1kLCBTSEE1MTJfQ1RYICpjKTsKK3Vuc2lnbmVkIGNoYXIgKlNIQTM4NChjb25zdCB1bnNpZ25lZCBjaGFyICpkLCBzaXplX3Qgbix1bnNpZ25lZCBjaGFyICptZCk7CitpbnQgU0hBNTEyX0luaXQoU0hBNTEyX0NUWCAqYyk7CitpbnQgU0hBNTEyX1VwZGF0ZShTSEE1MTJfQ1RYICpjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKK2ludCBTSEE1MTJfRmluYWwodW5zaWduZWQgY2hhciAqbWQsIFNIQTUxMl9DVFggKmMpOwordW5zaWduZWQgY2hhciAqU0hBNTEyKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmQsIHNpemVfdCBuLHVuc2lnbmVkIGNoYXIgKm1kKTsKK3ZvaWQgU0hBNTEyX1RyYW5zZm9ybShTSEE1MTJfQ1RYICpjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKKyNlbmRpZgorCisjaWZkZWYgIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGExLmMgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQwNDhkYgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYTEuYwpAQCAtMCwwICsxLDY1IEBACisvKiBjcnlwdG8vc2hhL3NoYTFkZ3N0LmMgKi8KKy8qIENvcHlyaWdodCAoQykgMTk5NS0xOTk4IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIHBhY2thZ2UgaXMgYW4gU1NMIGltcGxlbWVudGF0aW9uIHdyaXR0ZW4KKyAqIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KKyAqIFRoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTmV0c2NhcGVzIFNTTC4KKyAqIAorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgZm9yIGNvbW1lcmNpYWwgYW5kIG5vbi1jb21tZXJjaWFsIHVzZSBhcyBsb25nIGFzCisgKiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIGFoZWFyZWQgdG8uICBUaGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFwcGx5IHRvIGFsbCBjb2RlIGZvdW5kIGluIHRoaXMgZGlzdHJpYnV0aW9uLCBiZSBpdCB0aGUgUkM0LCBSU0EsCisgKiBsaGFzaCwgREVTLCBldGMuLCBjb2RlOyBub3QganVzdCB0aGUgU1NMIGNvZGUuICBUaGUgU1NMIGRvY3VtZW50YXRpb24KKyAqIGluY2x1ZGVkIHdpdGggdGhpcyBkaXN0cmlidXRpb24gaXMgY292ZXJlZCBieSB0aGUgc2FtZSBjb3B5cmlnaHQgdGVybXMKKyAqIGV4Y2VwdCB0aGF0IHRoZSBob2xkZXIgaXMgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pLgorICogCisgKiBDb3B5cmlnaHQgcmVtYWlucyBFcmljIFlvdW5nJ3MsIGFuZCBhcyBzdWNoIGFueSBDb3B5cmlnaHQgbm90aWNlcyBpbgorICogdGhlIGNvZGUgYXJlIG5vdCB0byBiZSByZW1vdmVkLgorICogSWYgdGhpcyBwYWNrYWdlIGlzIHVzZWQgaW4gYSBwcm9kdWN0LCBFcmljIFlvdW5nIHNob3VsZCBiZSBnaXZlbiBhdHRyaWJ1dGlvbgorICogYXMgdGhlIGF1dGhvciBvZiB0aGUgcGFydHMgb2YgdGhlIGxpYnJhcnkgdXNlZC4KKyAqIFRoaXMgY2FuIGJlIGluIHRoZSBmb3JtIG9mIGEgdGV4dHVhbCBtZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvcgorICogaW4gZG9jdW1lbnRhdGlvbiAob25saW5lIG9yIHRleHR1YWwpIHByb3ZpZGVkIHdpdGggdGhlIHBhY2thZ2UuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieQorICogICAgIEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKSIKKyAqICAgIFRoZSB3b3JkICdjcnlwdG9ncmFwaGljJyBjYW4gYmUgbGVmdCBvdXQgaWYgdGhlIHJvdWluZXMgZnJvbSB0aGUgbGlicmFyeQorICogICAgYmVpbmcgdXNlZCBhcmUgbm90IGNyeXB0b2dyYXBoaWMgcmVsYXRlZCA6LSkuCisgKiA0LiBJZiB5b3UgaW5jbHVkZSBhbnkgV2luZG93cyBzcGVjaWZpYyBjb2RlIChvciBhIGRlcml2YXRpdmUgdGhlcmVvZikgZnJvbSAKKyAqICAgIHRoZSBhcHBzIGRpcmVjdG9yeSAoYXBwbGljYXRpb24gY29kZSkgeW91IG11c3QgaW5jbHVkZSBhbiBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltIEh1ZHNvbiAodGpoQGNyeXB0c29mdC5jb20pIgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAKKyAqIFRoZSBsaWNlbmNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCisgKiBkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKKyAqIGNvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAqIFtpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5jZS5dCisgKi8KKworI3VuZGVmICBTSEFfMAorI2RlZmluZSBTSEFfMQorCisvKiBUaGUgaW1wbGVtZW50YXRpb24gaXMgaW4gLi4vbWQzMl9jb21tb24uaCAqLworCisjaW5jbHVkZSAib3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oIgorCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3NoYV9sb2NhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YmMwZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zaGFfbG9jYWwuaApAQCAtMCwwICsxLDQzNiBAQAorLyogY3J5cHRvL3NoYS9zaGFfbG9jbC5oICovCisvKiBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBwYWNrYWdlIGlzIGFuIFNTTCBpbXBsZW1lbnRhdGlvbiB3cml0dGVuCisgKiBieSBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkuCisgKiBUaGUgaW1wbGVtZW50YXRpb24gd2FzIHdyaXR0ZW4gc28gYXMgdG8gY29uZm9ybSB3aXRoIE5ldHNjYXBlcyBTU0wuCisgKiAKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbCB1c2UgYXMgbG9uZyBhcworICogdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBhaGVhcmVkIHRvLiAgVGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcHBseSB0byBhbGwgY29kZSBmb3VuZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgYmUgaXQgdGhlIFJDNCwgUlNBLAorICogbGhhc2gsIERFUywgZXRjLiwgY29kZTsgbm90IGp1c3QgdGhlIFNTTCBjb2RlLiAgVGhlIFNTTCBkb2N1bWVudGF0aW9uCisgKiBpbmNsdWRlZCB3aXRoIHRoaXMgZGlzdHJpYnV0aW9uIGlzIGNvdmVyZWQgYnkgdGhlIHNhbWUgY29weXJpZ2h0IHRlcm1zCisgKiBleGNlcHQgdGhhdCB0aGUgaG9sZGVyIGlzIFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqIAorICogQ29weXJpZ2h0IHJlbWFpbnMgRXJpYyBZb3VuZydzLCBhbmQgYXMgc3VjaCBhbnkgQ29weXJpZ2h0IG5vdGljZXMgaW4KKyAqIHRoZSBjb2RlIGFyZSBub3QgdG8gYmUgcmVtb3ZlZC4KKyAqIElmIHRoaXMgcGFja2FnZSBpcyB1c2VkIGluIGEgcHJvZHVjdCwgRXJpYyBZb3VuZyBzaG91bGQgYmUgZ2l2ZW4gYXR0cmlidXRpb24KKyAqIGFzIHRoZSBhdXRob3Igb2YgdGhlIHBhcnRzIG9mIHRoZSBsaWJyYXJ5IHVzZWQuCisgKiBUaGlzIGNhbiBiZSBpbiB0aGUgZm9ybSBvZiBhIHRleHR1YWwgbWVzc2FnZSBhdCBwcm9ncmFtIHN0YXJ0dXAgb3IKKyAqIGluIGRvY3VtZW50YXRpb24gKG9ubGluZSBvciB0ZXh0dWFsKSBwcm92aWRlZCB3aXRoIHRoZSBwYWNrYWdlLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBjcnlwdG9ncmFwaGljIHNvZnR3YXJlIHdyaXR0ZW4gYnkKKyAqICAgICBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkiCisgKiAgICBUaGUgd29yZCAnY3J5cHRvZ3JhcGhpYycgY2FuIGJlIGxlZnQgb3V0IGlmIHRoZSByb3VpbmVzIGZyb20gdGhlIGxpYnJhcnkKKyAqICAgIGJlaW5nIHVzZWQgYXJlIG5vdCBjcnlwdG9ncmFwaGljIHJlbGF0ZWQgOi0pLgorICogNC4gSWYgeW91IGluY2x1ZGUgYW55IFdpbmRvd3Mgc3BlY2lmaWMgY29kZSAob3IgYSBkZXJpdmF0aXZlIHRoZXJlb2YpIGZyb20gCisgKiAgICB0aGUgYXBwcyBkaXJlY3RvcnkgKGFwcGxpY2F0aW9uIGNvZGUpIHlvdSBtdXN0IGluY2x1ZGUgYW4gYWNrbm93bGVkZ2VtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSB3cml0dGVuIGJ5IFRpbSBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKSIKKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBFUklDIFlPVU5HIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogCisgKiBUaGUgbGljZW5jZSBhbmQgZGlzdHJpYnV0aW9uIHRlcm1zIGZvciBhbnkgcHVibGljYWxseSBhdmFpbGFibGUgdmVyc2lvbiBvcgorICogZGVyaXZhdGl2ZSBvZiB0aGlzIGNvZGUgY2Fubm90IGJlIGNoYW5nZWQuICBpLmUuIHRoaXMgY29kZSBjYW5ub3Qgc2ltcGx5IGJlCisgKiBjb3BpZWQgYW5kIHB1dCB1bmRlciBhbm90aGVyIGRpc3RyaWJ1dGlvbiBsaWNlbmNlCisgKiBbaW5jbHVkaW5nIHRoZSBHTlUgUHVibGljIExpY2VuY2UuXQorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm9wZW5zc2wvb3BlbnNzbF9zaGEuaCIKKworI2RlZmluZSBEQVRBX09SREVSX0lTX0JJR19FTkRJQU4KKworI2RlZmluZSBIQVNIX0xPTkcgICAgICAgICAgICAgICBTSEFfTE9ORworI2RlZmluZSBIQVNIX0NUWCAgICAgICAgICAgICAgICBTSEFfQ1RYCisjZGVmaW5lIEhBU0hfQ0JMT0NLICAgICAgICAgICAgIFNIQV9DQkxPQ0sKKyNkZWZpbmUgSEFTSF9NQUtFX1NUUklORyhjLHMpICAgZG8gewlcCisJdW5zaWduZWQgbG9uZyBsbDsJCVwKKwlsbD0oYyktPmgwOyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5oMTsgSE9TVF9sMmMobGwsKHMpKTsJXAorCWxsPShjKS0+aDI7IEhPU1RfbDJjKGxsLChzKSk7CVwKKwlsbD0oYyktPmgzOyBIT1NUX2wyYyhsbCwocykpOwlcCisJbGw9KGMpLT5oNDsgSE9TVF9sMmMobGwsKHMpKTsJXAorCX0gd2hpbGUgKDApCisKKyNpZiBkZWZpbmVkKFNIQV8wKQorCisjIGRlZmluZSBIQVNIX1VQREFURSAgICAgICAgICAgICAJU0hBX1VwZGF0ZQorIyBkZWZpbmUgSEFTSF9UUkFOU0ZPUk0gICAgICAgICAgCVNIQV9UcmFuc2Zvcm0KKyMgZGVmaW5lIEhBU0hfRklOQUwgICAgICAgICAgICAgIAlTSEFfRmluYWwKKyMgZGVmaW5lIEhBU0hfSU5JVAkJCVNIQV9Jbml0CisjIGRlZmluZSBIQVNIX0JMT0NLX0RBVEFfT1JERVIgICAJc2hhX2Jsb2NrX2RhdGFfb3JkZXIKKyMgZGVmaW5lIFh1cGRhdGUoYSxpeCxpYSxpYixpYyxpZCkJKGl4PShhKT0oaWFeaWJeaWNeaWQpKQorCitzdGF0aWMgdm9pZCBzaGFfYmxvY2tfZGF0YV9vcmRlciAoU0hBX0NUWCAqYywgY29uc3Qgdm9pZCAqcCxzaXplX3QgbnVtKTsKKworI2VsaWYgZGVmaW5lZChTSEFfMSkKKworIyBkZWZpbmUgSEFTSF9VUERBVEUgICAgICAgICAgICAgCVNIQTFfVXBkYXRlCisjIGRlZmluZSBIQVNIX1RSQU5TRk9STSAgICAgICAgICAJU0hBMV9UcmFuc2Zvcm0KKyMgZGVmaW5lIEhBU0hfRklOQUwgICAgICAgICAgICAgIAlTSEExX0ZpbmFsCisjIGRlZmluZSBIQVNIX0lOSVQJCQlTSEExX0luaXQKKyMgZGVmaW5lIEhBU0hfQkxPQ0tfREFUQV9PUkRFUiAgIAlzaGExX2Jsb2NrX2RhdGFfb3JkZXIKKyMgaWYgZGVmaW5lZChfX01XRVJLU19fKSAmJiBkZWZpbmVkKF9fTUM2OEtfXykKKyAgIC8qIE1ldHJvd2Vya3MgZm9yIE1vdG9yb2xhIGZhaWxzIG90aGVyd2lzZTotKCA8YXBwcm9AZnkuY2hhbG1lcnMuc2U+ICovCisjICBkZWZpbmUgWHVwZGF0ZShhLGl4LGlhLGliLGljLGlkKQlkbyB7IChhKT0oaWFeaWJeaWNeaWQpOwkJXAorCQkJCQkgICAgIGl4PShhKT1ST1RBVEUoKGEpLDEpOwlcCisJCQkJCX0gd2hpbGUgKDApCisjIGVsc2UKKyMgIGRlZmluZSBYdXBkYXRlKGEsaXgsaWEsaWIsaWMsaWQpCSggKGEpPShpYV5pYl5pY15pZCksCVwKKwkJCQkJICBpeD0oYSk9Uk9UQVRFKChhKSwxKQlcCisJCQkJCSkKKyMgZW5kaWYKKworI2lmbmRlZiBTSEExX0FTTQorc3RhdGljCisjZW5kaWYKK3ZvaWQgc2hhMV9ibG9ja19kYXRhX29yZGVyIChTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLHNpemVfdCBudW0pOworCisjZWxzZQorIyBlcnJvciAiRWl0aGVyIFNIQV8wIG9yIFNIQV8xIG11c3QgYmUgZGVmaW5lZC4iCisjZW5kaWYKKworI2luY2x1ZGUgIm9wZW5zc2xfbWQzMl9jb21tb24uaCIKKworI2RlZmluZSBJTklUX0RBVEFfaDAgMHg2NzQ1MjMwMVVMCisjZGVmaW5lIElOSVRfREFUQV9oMSAweGVmY2RhYjg5VUwKKyNkZWZpbmUgSU5JVF9EQVRBX2gyIDB4OThiYWRjZmVVTAorI2RlZmluZSBJTklUX0RBVEFfaDMgMHgxMDMyNTQ3NlVMCisjZGVmaW5lIElOSVRfREFUQV9oNCAweGMzZDJlMWYwVUwKKworaW50IEhBU0hfSU5JVCAoU0hBX0NUWCAqYykKKwl7CisJbWVtc2V0IChjLDAsc2l6ZW9mKCpjKSk7CisJYy0+aDA9SU5JVF9EQVRBX2gwOworCWMtPmgxPUlOSVRfREFUQV9oMTsKKwljLT5oMj1JTklUX0RBVEFfaDI7CisJYy0+aDM9SU5JVF9EQVRBX2gzOworCWMtPmg0PUlOSVRfREFUQV9oNDsKKwlyZXR1cm4gMTsKKwl9CisKKyNkZWZpbmUgS18wMF8xOQkweDVhODI3OTk5VUwKKyNkZWZpbmUgS18yMF8zOSAweDZlZDllYmExVUwKKyNkZWZpbmUgS180MF81OSAweDhmMWJiY2RjVUwKKyNkZWZpbmUgS182MF83OSAweGNhNjJjMWQ2VUwKKworLyogQXMgIHBvaW50ZWQgb3V0IGJ5IFdlaSBEYWkgPHdlaWRhaUBlc2tpbW8uY29tPiwgRigpIGJlbG93IGNhbiBiZQorICogc2ltcGxpZmllZCB0byB0aGUgY29kZSBpbiBGXzAwXzE5LiAgV2VpIGF0dHJpYnV0ZXMgdGhlc2Ugb3B0aW1pc2F0aW9ucworICogdG8gUGV0ZXIgR3V0bWFubidzIFNIUyBjb2RlLCBhbmQgaGUgYXR0cmlidXRlcyBpdCB0byBSaWNoIFNjaHJvZXBwZWwuCisgKiAjZGVmaW5lIEYoeCx5LHopICgoKHgpICYgKHkpKSAgfCAgKCh+KHgpKSAmICh6KSkpCisgKiBJJ3ZlIGp1c3QgYmVjb21lIGF3YXJlIG9mIGFub3RoZXIgdHdlYWsgdG8gYmUgbWFkZSwgYWdhaW4gZnJvbSBXZWkgRGFpLAorICogaW4gRl80MF81OSwgKHgmYSl8KHkmYSkgLT4gKHh8eSkmYQorICovCisjZGVmaW5lCUZfMDBfMTkoYixjLGQpCSgoKChjKSBeIChkKSkgJiAoYikpIF4gKGQpKSAKKyNkZWZpbmUJRl8yMF8zOShiLGMsZCkJKChiKSBeIChjKSBeIChkKSkKKyNkZWZpbmUgRl80MF81OShiLGMsZCkJKCgoYikgJiAoYykpIHwgKCgoYil8KGMpKSAmIChkKSkpIAorI2RlZmluZQlGXzYwXzc5KGIsYyxkKQlGXzIwXzM5KGIsYyxkKQorCisjaWZuZGVmIE9QRU5TU0xfU01BTExfRk9PVFBSSU5UCisKKyNkZWZpbmUgQk9EWV8wMF8xNShpLGEsYixjLGQsZSxmLHhpKSBcCisJKGYpPXhpKyhlKStLXzAwXzE5K1JPVEFURSgoYSksNSkrRl8wMF8xOSgoYiksKGMpLChkKSk7IFwKKwkoYik9Uk9UQVRFKChiKSwzMCk7CisKKyNkZWZpbmUgQk9EWV8xNl8xOShpLGEsYixjLGQsZSxmLHhpLHhhLHhiLHhjLHhkKSBcCisJWHVwZGF0ZShmLHhpLHhhLHhiLHhjLHhkKTsgXAorCShmKSs9KGUpK0tfMDBfMTkrUk9UQVRFKChhKSw1KStGXzAwXzE5KChiKSwoYyksKGQpKTsgXAorCShiKT1ST1RBVEUoKGIpLDMwKTsKKworI2RlZmluZSBCT0RZXzIwXzMxKGksYSxiLGMsZCxlLGYseGkseGEseGIseGMseGQpIFwKKwlYdXBkYXRlKGYseGkseGEseGIseGMseGQpOyBcCisJKGYpKz0oZSkrS18yMF8zOStST1RBVEUoKGEpLDUpK0ZfMjBfMzkoKGIpLChjKSwoZCkpOyBcCisJKGIpPVJPVEFURSgoYiksMzApOworCisjZGVmaW5lIEJPRFlfMzJfMzkoaSxhLGIsYyxkLGUsZix4YSx4Yix4Yyx4ZCkgXAorCVh1cGRhdGUoZix4YSx4YSx4Yix4Yyx4ZCk7IFwKKwkoZikrPShlKStLXzIwXzM5K1JPVEFURSgoYSksNSkrRl8yMF8zOSgoYiksKGMpLChkKSk7IFwKKwkoYik9Uk9UQVRFKChiKSwzMCk7CisKKyNkZWZpbmUgQk9EWV80MF81OShpLGEsYixjLGQsZSxmLHhhLHhiLHhjLHhkKSBcCisJWHVwZGF0ZShmLHhhLHhhLHhiLHhjLHhkKTsgXAorCShmKSs9KGUpK0tfNDBfNTkrUk9UQVRFKChhKSw1KStGXzQwXzU5KChiKSwoYyksKGQpKTsgXAorCShiKT1ST1RBVEUoKGIpLDMwKTsKKworI2RlZmluZSBCT0RZXzYwXzc5KGksYSxiLGMsZCxlLGYseGEseGIseGMseGQpIFwKKwlYdXBkYXRlKGYseGEseGEseGIseGMseGQpOyBcCisJKGYpPXhhKyhlKStLXzYwXzc5K1JPVEFURSgoYSksNSkrRl82MF83OSgoYiksKGMpLChkKSk7IFwKKwkoYik9Uk9UQVRFKChiKSwzMCk7CisKKyNpZmRlZiBYCisjdW5kZWYgWAorI2VuZGlmCisjaWZuZGVmIE1EMzJfWEFSUkFZCisgIC8qCisgICAqIE9yaWdpbmFsbHkgWCB3YXMgYW4gYXJyYXkuIEFzIGl0J3MgYXV0b21hdGljIGl0J3MgbmF0dXJhbAorICAgKiB0byBleHBlY3QgUklTQyBjb21waWxlciB0byBhY2NvbW9kYXRlIGF0IGxlYXN0IHBhcnQgb2YgaXQgaW4KKyAgICogdGhlIHJlZ2lzdGVyIGJhbmssIGlzbid0IGl0PyBVbmZvcnR1bmF0ZWx5IG5vdCBhbGwgY29tcGlsZXJzCisgICAqICJmaW5kIiB0aGlzIGV4cGVjdGF0aW9uIHJlYXNvbmFibGU6LSggT24gb3JkZXIgdG8gbWFrZSBzdWNoCisgICAqIGNvbXBpbGVycyBnZW5lcmF0ZSBiZXR0ZXIgY29kZSBJIHJlcGxhY2UgWFtdIHdpdGggYSBidW5jaCBvZgorICAgKiBYMCwgWDEsIGV0Yy4gU2VlIHRoZSBmdW5jdGlvbiBib2R5IGJlbG93Li4uCisgICAqCQkJCQk8YXBwcm9AZnkuY2hhbG1lcnMuc2U+CisgICAqLworIyBkZWZpbmUgWChpKQlYWCMjaQorI2Vsc2UKKyAgLyoKKyAgICogSG93ZXZlciEgU29tZSBjb21waWxlcnMgKG1vc3Qgbm90YWJseSBIUCBDKSBnZXQgb3ZlcndoZWxtZWQgYnkKKyAgICogdGhhdCBtYW55IGxvY2FsIHZhcmlhYmxlcyBzbyB0aGF0IHdlIGhhdmUgdG8gaGF2ZSB0aGUgd2F5IHRvCisgICAqIGZhbGwgZG93biB0byB0aGUgb3JpZ2luYWwgYmVoYXZpb3IuCisgICAqLworIyBkZWZpbmUgWChpKQlYWFtpXQorI2VuZGlmCisKKyNpZiAhZGVmaW5lZChTSEFfMSkgfHwgIWRlZmluZWQoU0hBMV9BU00pCitzdGF0aWMgdm9pZCBIQVNIX0JMT0NLX0RBVEFfT1JERVIgKFNIQV9DVFggKmMsIGNvbnN0IHZvaWQgKnAsIHNpemVfdCBudW0pCisJeworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE9cDsKKwlyZWdpc3RlciB1bnNpZ25lZCBNRDMyX1JFR19UIEEsQixDLEQsRSxULGw7CisjaWZuZGVmIE1EMzJfWEFSUkFZCisJdW5zaWduZWQgTUQzMl9SRUdfVAlYWDAsIFhYMSwgWFgyLCBYWDMsIFhYNCwgWFg1LCBYWDYsIFhYNywKKwkJCQlYWDgsIFhYOSxYWDEwLFhYMTEsWFgxMixYWDEzLFhYMTQsWFgxNTsKKyNlbHNlCisJU0hBX0xPTkcJWFhbMTZdOworI2VuZGlmCisKKwlBPWMtPmgwOworCUI9Yy0+aDE7CisJQz1jLT5oMjsKKwlEPWMtPmgzOworCUU9Yy0+aDQ7CisKKwlmb3IgKDs7KQorCQkJeworCWNvbnN0IHVuaW9uIHsgbG9uZyBvbmU7IGNoYXIgbGl0dGxlOyB9IGlzX2VuZGlhbiA9IHsxfTsKKworCWlmICghaXNfZW5kaWFuLmxpdHRsZSAmJiBzaXplb2YoU0hBX0xPTkcpPT00ICYmICgoc2l6ZV90KXAlNCk9PTApCisJCXsKKwkJY29uc3QgU0hBX0xPTkcgKlc9KGNvbnN0IFNIQV9MT05HICopZGF0YTsKKworCQlYKCAwKSA9IFdbMF07CQkJCVgoIDEpID0gV1sgMV07CisJCUJPRFlfMDBfMTUoIDAsQSxCLEMsRCxFLFQsWCggMCkpOwlYKCAyKSA9IFdbIDJdOworCQlCT0RZXzAwXzE1KCAxLFQsQSxCLEMsRCxFLFgoIDEpKTsJWCggMykgPSBXWyAzXTsKKwkJQk9EWV8wMF8xNSggMixFLFQsQSxCLEMsRCxYKCAyKSk7CVgoIDQpID0gV1sgNF07CisJCUJPRFlfMDBfMTUoIDMsRCxFLFQsQSxCLEMsWCggMykpOwlYKCA1KSA9IFdbIDVdOworCQlCT0RZXzAwXzE1KCA0LEMsRCxFLFQsQSxCLFgoIDQpKTsJWCggNikgPSBXWyA2XTsKKwkJQk9EWV8wMF8xNSggNSxCLEMsRCxFLFQsQSxYKCA1KSk7CVgoIDcpID0gV1sgN107CisJCUJPRFlfMDBfMTUoIDYsQSxCLEMsRCxFLFQsWCggNikpOwlYKCA4KSA9IFdbIDhdOworCQlCT0RZXzAwXzE1KCA3LFQsQSxCLEMsRCxFLFgoIDcpKTsJWCggOSkgPSBXWyA5XTsKKwkJQk9EWV8wMF8xNSggOCxFLFQsQSxCLEMsRCxYKCA4KSk7CVgoMTApID0gV1sxMF07CisJCUJPRFlfMDBfMTUoIDksRCxFLFQsQSxCLEMsWCggOSkpOwlYKDExKSA9IFdbMTFdOworCQlCT0RZXzAwXzE1KDEwLEMsRCxFLFQsQSxCLFgoMTApKTsJWCgxMikgPSBXWzEyXTsKKwkJQk9EWV8wMF8xNSgxMSxCLEMsRCxFLFQsQSxYKDExKSk7CVgoMTMpID0gV1sxM107CisJCUJPRFlfMDBfMTUoMTIsQSxCLEMsRCxFLFQsWCgxMikpOwlYKDE0KSA9IFdbMTRdOworCQlCT0RZXzAwXzE1KDEzLFQsQSxCLEMsRCxFLFgoMTMpKTsJWCgxNSkgPSBXWzE1XTsKKwkJQk9EWV8wMF8xNSgxNCxFLFQsQSxCLEMsRCxYKDE0KSk7CisJCUJPRFlfMDBfMTUoMTUsRCxFLFQsQSxCLEMsWCgxNSkpOworCisJCWRhdGEgKz0gU0hBX0NCTE9DSzsKKwkJfQorCWVsc2UKKwkJeworCQlIT1NUX2MybChkYXRhLGwpOyBYKCAwKT1sOwkJSE9TVF9jMmwoZGF0YSxsKTsgWCggMSk9bDsKKwkJQk9EWV8wMF8xNSggMCxBLEIsQyxELEUsVCxYKCAwKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDIpPWw7CisJCUJPRFlfMDBfMTUoIDEsVCxBLEIsQyxELEUsWCggMSkpOwlIT1NUX2MybChkYXRhLGwpOyBYKCAzKT1sOworCQlCT0RZXzAwXzE1KCAyLEUsVCxBLEIsQyxELFgoIDIpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNCk9bDsKKwkJQk9EWV8wMF8xNSggMyxELEUsVCxBLEIsQyxYKCAzKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDUpPWw7CisJCUJPRFlfMDBfMTUoIDQsQyxELEUsVCxBLEIsWCggNCkpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA2KT1sOworCQlCT0RZXzAwXzE1KCA1LEIsQyxELEUsVCxBLFgoIDUpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCggNyk9bDsKKwkJQk9EWV8wMF8xNSggNixBLEIsQyxELEUsVCxYKCA2KSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoIDgpPWw7CisJCUJPRFlfMDBfMTUoIDcsVCxBLEIsQyxELEUsWCggNykpOwlIT1NUX2MybChkYXRhLGwpOyBYKCA5KT1sOworCQlCT0RZXzAwXzE1KCA4LEUsVCxBLEIsQyxELFgoIDgpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMCk9bDsKKwkJQk9EWV8wMF8xNSggOSxELEUsVCxBLEIsQyxYKCA5KSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTEpPWw7CisJCUJPRFlfMDBfMTUoMTAsQyxELEUsVCxBLEIsWCgxMCkpOwlIT1NUX2MybChkYXRhLGwpOyBYKDEyKT1sOworCQlCT0RZXzAwXzE1KDExLEIsQyxELEUsVCxBLFgoMTEpKTsJSE9TVF9jMmwoZGF0YSxsKTsgWCgxMyk9bDsKKwkJQk9EWV8wMF8xNSgxMixBLEIsQyxELEUsVCxYKDEyKSk7CUhPU1RfYzJsKGRhdGEsbCk7IFgoMTQpPWw7CisJCUJPRFlfMDBfMTUoMTMsVCxBLEIsQyxELEUsWCgxMykpOwlIT1NUX2MybChkYXRhLGwpOyBYKDE1KT1sOworCQlCT0RZXzAwXzE1KDE0LEUsVCxBLEIsQyxELFgoMTQpKTsKKwkJQk9EWV8wMF8xNSgxNSxELEUsVCxBLEIsQyxYKDE1KSk7CisJCX0KKworCUJPRFlfMTZfMTkoMTYsQyxELEUsVCxBLEIsWCggMCksWCggMCksWCggMiksWCggOCksWCgxMykpOworCUJPRFlfMTZfMTkoMTcsQixDLEQsRSxULEEsWCggMSksWCggMSksWCggMyksWCggOSksWCgxNCkpOworCUJPRFlfMTZfMTkoMTgsQSxCLEMsRCxFLFQsWCggMiksWCggMiksWCggNCksWCgxMCksWCgxNSkpOworCUJPRFlfMTZfMTkoMTksVCxBLEIsQyxELEUsWCggMyksWCggMyksWCggNSksWCgxMSksWCggMCkpOworCisJQk9EWV8yMF8zMSgyMCxFLFQsQSxCLEMsRCxYKCA0KSxYKCA0KSxYKCA2KSxYKDEyKSxYKCAxKSk7CisJQk9EWV8yMF8zMSgyMSxELEUsVCxBLEIsQyxYKCA1KSxYKCA1KSxYKCA3KSxYKDEzKSxYKCAyKSk7CisJQk9EWV8yMF8zMSgyMixDLEQsRSxULEEsQixYKCA2KSxYKCA2KSxYKCA4KSxYKDE0KSxYKCAzKSk7CisJQk9EWV8yMF8zMSgyMyxCLEMsRCxFLFQsQSxYKCA3KSxYKCA3KSxYKCA5KSxYKDE1KSxYKCA0KSk7CisJQk9EWV8yMF8zMSgyNCxBLEIsQyxELEUsVCxYKCA4KSxYKCA4KSxYKDEwKSxYKCAwKSxYKCA1KSk7CisJQk9EWV8yMF8zMSgyNSxULEEsQixDLEQsRSxYKCA5KSxYKCA5KSxYKDExKSxYKCAxKSxYKCA2KSk7CisJQk9EWV8yMF8zMSgyNixFLFQsQSxCLEMsRCxYKDEwKSxYKDEwKSxYKDEyKSxYKCAyKSxYKCA3KSk7CisJQk9EWV8yMF8zMSgyNyxELEUsVCxBLEIsQyxYKDExKSxYKDExKSxYKDEzKSxYKCAzKSxYKCA4KSk7CisJQk9EWV8yMF8zMSgyOCxDLEQsRSxULEEsQixYKDEyKSxYKDEyKSxYKDE0KSxYKCA0KSxYKCA5KSk7CisJQk9EWV8yMF8zMSgyOSxCLEMsRCxFLFQsQSxYKDEzKSxYKDEzKSxYKDE1KSxYKCA1KSxYKDEwKSk7CisJQk9EWV8yMF8zMSgzMCxBLEIsQyxELEUsVCxYKDE0KSxYKDE0KSxYKCAwKSxYKCA2KSxYKDExKSk7CisJQk9EWV8yMF8zMSgzMSxULEEsQixDLEQsRSxYKDE1KSxYKDE1KSxYKCAxKSxYKCA3KSxYKDEyKSk7CisKKwlCT0RZXzMyXzM5KDMyLEUsVCxBLEIsQyxELFgoIDApLFgoIDIpLFgoIDgpLFgoMTMpKTsKKwlCT0RZXzMyXzM5KDMzLEQsRSxULEEsQixDLFgoIDEpLFgoIDMpLFgoIDkpLFgoMTQpKTsKKwlCT0RZXzMyXzM5KDM0LEMsRCxFLFQsQSxCLFgoIDIpLFgoIDQpLFgoMTApLFgoMTUpKTsKKwlCT0RZXzMyXzM5KDM1LEIsQyxELEUsVCxBLFgoIDMpLFgoIDUpLFgoMTEpLFgoIDApKTsKKwlCT0RZXzMyXzM5KDM2LEEsQixDLEQsRSxULFgoIDQpLFgoIDYpLFgoMTIpLFgoIDEpKTsKKwlCT0RZXzMyXzM5KDM3LFQsQSxCLEMsRCxFLFgoIDUpLFgoIDcpLFgoMTMpLFgoIDIpKTsKKwlCT0RZXzMyXzM5KDM4LEUsVCxBLEIsQyxELFgoIDYpLFgoIDgpLFgoMTQpLFgoIDMpKTsKKwlCT0RZXzMyXzM5KDM5LEQsRSxULEEsQixDLFgoIDcpLFgoIDkpLFgoMTUpLFgoIDQpKTsKKworCUJPRFlfNDBfNTkoNDAsQyxELEUsVCxBLEIsWCggOCksWCgxMCksWCggMCksWCggNSkpOworCUJPRFlfNDBfNTkoNDEsQixDLEQsRSxULEEsWCggOSksWCgxMSksWCggMSksWCggNikpOworCUJPRFlfNDBfNTkoNDIsQSxCLEMsRCxFLFQsWCgxMCksWCgxMiksWCggMiksWCggNykpOworCUJPRFlfNDBfNTkoNDMsVCxBLEIsQyxELEUsWCgxMSksWCgxMyksWCggMyksWCggOCkpOworCUJPRFlfNDBfNTkoNDQsRSxULEEsQixDLEQsWCgxMiksWCgxNCksWCggNCksWCggOSkpOworCUJPRFlfNDBfNTkoNDUsRCxFLFQsQSxCLEMsWCgxMyksWCgxNSksWCggNSksWCgxMCkpOworCUJPRFlfNDBfNTkoNDYsQyxELEUsVCxBLEIsWCgxNCksWCggMCksWCggNiksWCgxMSkpOworCUJPRFlfNDBfNTkoNDcsQixDLEQsRSxULEEsWCgxNSksWCggMSksWCggNyksWCgxMikpOworCUJPRFlfNDBfNTkoNDgsQSxCLEMsRCxFLFQsWCggMCksWCggMiksWCggOCksWCgxMykpOworCUJPRFlfNDBfNTkoNDksVCxBLEIsQyxELEUsWCggMSksWCggMyksWCggOSksWCgxNCkpOworCUJPRFlfNDBfNTkoNTAsRSxULEEsQixDLEQsWCggMiksWCggNCksWCgxMCksWCgxNSkpOworCUJPRFlfNDBfNTkoNTEsRCxFLFQsQSxCLEMsWCggMyksWCggNSksWCgxMSksWCggMCkpOworCUJPRFlfNDBfNTkoNTIsQyxELEUsVCxBLEIsWCggNCksWCggNiksWCgxMiksWCggMSkpOworCUJPRFlfNDBfNTkoNTMsQixDLEQsRSxULEEsWCggNSksWCggNyksWCgxMyksWCggMikpOworCUJPRFlfNDBfNTkoNTQsQSxCLEMsRCxFLFQsWCggNiksWCggOCksWCgxNCksWCggMykpOworCUJPRFlfNDBfNTkoNTUsVCxBLEIsQyxELEUsWCggNyksWCggOSksWCgxNSksWCggNCkpOworCUJPRFlfNDBfNTkoNTYsRSxULEEsQixDLEQsWCggOCksWCgxMCksWCggMCksWCggNSkpOworCUJPRFlfNDBfNTkoNTcsRCxFLFQsQSxCLEMsWCggOSksWCgxMSksWCggMSksWCggNikpOworCUJPRFlfNDBfNTkoNTgsQyxELEUsVCxBLEIsWCgxMCksWCgxMiksWCggMiksWCggNykpOworCUJPRFlfNDBfNTkoNTksQixDLEQsRSxULEEsWCgxMSksWCgxMyksWCggMyksWCggOCkpOworCisJQk9EWV82MF83OSg2MCxBLEIsQyxELEUsVCxYKDEyKSxYKDE0KSxYKCA0KSxYKCA5KSk7CisJQk9EWV82MF83OSg2MSxULEEsQixDLEQsRSxYKDEzKSxYKDE1KSxYKCA1KSxYKDEwKSk7CisJQk9EWV82MF83OSg2MixFLFQsQSxCLEMsRCxYKDE0KSxYKCAwKSxYKCA2KSxYKDExKSk7CisJQk9EWV82MF83OSg2MyxELEUsVCxBLEIsQyxYKDE1KSxYKCAxKSxYKCA3KSxYKDEyKSk7CisJQk9EWV82MF83OSg2NCxDLEQsRSxULEEsQixYKCAwKSxYKCAyKSxYKCA4KSxYKDEzKSk7CisJQk9EWV82MF83OSg2NSxCLEMsRCxFLFQsQSxYKCAxKSxYKCAzKSxYKCA5KSxYKDE0KSk7CisJQk9EWV82MF83OSg2NixBLEIsQyxELEUsVCxYKCAyKSxYKCA0KSxYKDEwKSxYKDE1KSk7CisJQk9EWV82MF83OSg2NyxULEEsQixDLEQsRSxYKCAzKSxYKCA1KSxYKDExKSxYKCAwKSk7CisJQk9EWV82MF83OSg2OCxFLFQsQSxCLEMsRCxYKCA0KSxYKCA2KSxYKDEyKSxYKCAxKSk7CisJQk9EWV82MF83OSg2OSxELEUsVCxBLEIsQyxYKCA1KSxYKCA3KSxYKDEzKSxYKCAyKSk7CisJQk9EWV82MF83OSg3MCxDLEQsRSxULEEsQixYKCA2KSxYKCA4KSxYKDE0KSxYKCAzKSk7CisJQk9EWV82MF83OSg3MSxCLEMsRCxFLFQsQSxYKCA3KSxYKCA5KSxYKDE1KSxYKCA0KSk7CisJQk9EWV82MF83OSg3MixBLEIsQyxELEUsVCxYKCA4KSxYKDEwKSxYKCAwKSxYKCA1KSk7CisJQk9EWV82MF83OSg3MyxULEEsQixDLEQsRSxYKCA5KSxYKDExKSxYKCAxKSxYKCA2KSk7CisJQk9EWV82MF83OSg3NCxFLFQsQSxCLEMsRCxYKDEwKSxYKDEyKSxYKCAyKSxYKCA3KSk7CisJQk9EWV82MF83OSg3NSxELEUsVCxBLEIsQyxYKDExKSxYKDEzKSxYKCAzKSxYKCA4KSk7CisJQk9EWV82MF83OSg3NixDLEQsRSxULEEsQixYKDEyKSxYKDE0KSxYKCA0KSxYKCA5KSk7CisJQk9EWV82MF83OSg3NyxCLEMsRCxFLFQsQSxYKDEzKSxYKDE1KSxYKCA1KSxYKDEwKSk7CisJQk9EWV82MF83OSg3OCxBLEIsQyxELEUsVCxYKDE0KSxYKCAwKSxYKCA2KSxYKDExKSk7CisJQk9EWV82MF83OSg3OSxULEEsQixDLEQsRSxYKDE1KSxYKCAxKSxYKCA3KSxYKDEyKSk7CisJCisJYy0+aDA9KGMtPmgwK0UpJjB4ZmZmZmZmZmZMOyAKKwljLT5oMT0oYy0+aDErVCkmMHhmZmZmZmZmZkw7CisJYy0+aDI9KGMtPmgyK0EpJjB4ZmZmZmZmZmZMOworCWMtPmgzPShjLT5oMytCKSYweGZmZmZmZmZmTDsKKwljLT5oND0oYy0+aDQrQykmMHhmZmZmZmZmZkw7CisKKwlpZiAoLS1udW0gPT0gMCkgYnJlYWs7CisKKwlBPWMtPmgwOworCUI9Yy0+aDE7CisJQz1jLT5oMjsKKwlEPWMtPmgzOworCUU9Yy0+aDQ7CisKKwkJCX0KKwl9CisjZW5kaWYKKworI2Vsc2UJLyogT1BFTlNTTF9TTUFMTF9GT09UUFJJTlQgKi8KKworI2RlZmluZSBCT0RZXzAwXzE1KHhpKQkJIGRvIHsJXAorCVQ9RStLXzAwXzE5K0ZfMDBfMTkoQixDLEQpOwlcCisJRT1ELCBEPUMsIEM9Uk9UQVRFKEIsMzApLCBCPUE7CVwKKwlBPVJPVEFURShBLDUpK1QreGk7CSAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQk9EWV8xNl8xOSh4YSx4Yix4Yyx4ZCkJIGRvIHsJXAorCVh1cGRhdGUoVCx4YSx4YSx4Yix4Yyx4ZCk7CVwKKwlUKz1FK0tfMDBfMTkrRl8wMF8xOShCLEMsRCk7CVwKKwlFPUQsIEQ9QywgQz1ST1RBVEUoQiwzMCksIEI9QTsJXAorCUE9Uk9UQVRFKEEsNSkrVDsJICAgIH0gd2hpbGUoMCkKKworI2RlZmluZSBCT0RZXzIwXzM5KHhhLHhiLHhjLHhkKQkgZG8gewlcCisJWHVwZGF0ZShULHhhLHhhLHhiLHhjLHhkKTsJXAorCVQrPUUrS18yMF8zOStGXzIwXzM5KEIsQyxEKTsJXAorCUU9RCwgRD1DLCBDPVJPVEFURShCLDMwKSwgQj1BOwlcCisJQT1ST1RBVEUoQSw1KStUOwkgICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIEJPRFlfNDBfNTkoeGEseGIseGMseGQpCSBkbyB7CVwKKwlYdXBkYXRlKFQseGEseGEseGIseGMseGQpOwlcCisJVCs9RStLXzQwXzU5K0ZfNDBfNTkoQixDLEQpOwlcCisJRT1ELCBEPUMsIEM9Uk9UQVRFKEIsMzApLCBCPUE7CVwKKwlBPVJPVEFURShBLDUpK1Q7CSAgICB9IHdoaWxlKDApCisKKyNkZWZpbmUgQk9EWV82MF83OSh4YSx4Yix4Yyx4ZCkJIGRvIHsJXAorCVh1cGRhdGUoVCx4YSx4YSx4Yix4Yyx4ZCk7CVwKKwlUPUUrS182MF83OStGXzYwXzc5KEIsQyxEKTsJXAorCUU9RCwgRD1DLCBDPVJPVEFURShCLDMwKSwgQj1BOwlcCisJQT1ST1RBVEUoQSw1KStUK3hhOwkgICAgfSB3aGlsZSgwKQorCisjaWYgIWRlZmluZWQoU0hBXzEpIHx8ICFkZWZpbmVkKFNIQTFfQVNNKQorc3RhdGljIHZvaWQgSEFTSF9CTE9DS19EQVRBX09SREVSIChTSEFfQ1RYICpjLCBjb25zdCB2b2lkICpwLCBzaXplX3QgbnVtKQorCXsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhPXA7CisJcmVnaXN0ZXIgdW5zaWduZWQgTUQzMl9SRUdfVCBBLEIsQyxELEUsVCxsOworCWludCBpOworCVNIQV9MT05HCVhbMTZdOworCisJQT1jLT5oMDsKKwlCPWMtPmgxOworCUM9Yy0+aDI7CisJRD1jLT5oMzsKKwlFPWMtPmg0OworCisJZm9yICg7OykKKwkJeworCWZvciAoaT0wO2k8MTY7aSsrKQorCXsgSE9TVF9jMmwoZGF0YSxsKTsgWFtpXT1sOyBCT0RZXzAwXzE1KFhbaV0pOyB9CisJZm9yIChpPTA7aTw0O2krKykKKwl7IEJPRFlfMTZfMTkoWFtpXSwgICAgICAgWFtpKzJdLCAgICAgIFhbaSs4XSwgICAgIFhbKGkrMTMpJjE1XSk7IH0KKwlmb3IgKDtpPDI0O2krKykKKwl7IEJPRFlfMjBfMzkoWFtpJjE1XSwgICAgWFsoaSsyKSYxNV0sIFhbKGkrOCkmMTVdLFhbKGkrMTMpJjE1XSk7IH0KKwlmb3IgKGk9MDtpPDIwO2krKykKKwl7IEJPRFlfNDBfNTkoWFsoaSs4KSYxNV0sWFsoaSsxMCkmMTVdLFhbaSYxNV0sICAgIFhbKGkrNSkmMTVdKTsgIH0KKwlmb3IgKGk9NDtpPDI0O2krKykKKwl7IEJPRFlfNjBfNzkoWFsoaSs4KSYxNV0sWFsoaSsxMCkmMTVdLFhbaSYxNV0sICAgIFhbKGkrNSkmMTVdKTsgIH0KKworCWMtPmgwPShjLT5oMCtBKSYweGZmZmZmZmZmTDsgCisJYy0+aDE9KGMtPmgxK0IpJjB4ZmZmZmZmZmZMOworCWMtPmgyPShjLT5oMitDKSYweGZmZmZmZmZmTDsKKwljLT5oMz0oYy0+aDMrRCkmMHhmZmZmZmZmZkw7CisJYy0+aDQ9KGMtPmg0K0UpJjB4ZmZmZmZmZmZMOworCisJaWYgKC0tbnVtID09IDApIGJyZWFrOworCisJQT1jLT5oMDsKKwlCPWMtPmgxOworCUM9Yy0+aDI7CisJRD1jLT5oMzsKKwlFPWMtPmg0OworCisJCX0KKwl9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaCBiL3NubXBsaWIvb3BlbnNzbC9vcGVuc3NsX3Nwci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4ZWM2MWUKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL29wZW5zc2wvb3BlbnNzbF9zcHIuaApAQCAtMCwwICsxLDIwNCBAQAorLyogY3J5cHRvL2Rlcy9zcHIuaCAqLworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCitjb25zdCBERVNfTE9ORyBERVNfU1B0cmFuc1s4XVs2NF09eworeworLyogbmliYmxlIDAgKi8KKzB4MDIwODA4MDBMLCAweDAwMDgwMDAwTCwgMHgwMjAwMDAwMkwsIDB4MDIwODA4MDJMLAorMHgwMjAwMDAwMEwsIDB4MDAwODA4MDJMLCAweDAwMDgwMDAyTCwgMHgwMjAwMDAwMkwsCisweDAwMDgwODAyTCwgMHgwMjA4MDgwMEwsIDB4MDIwODAwMDBMLCAweDAwMDAwODAyTCwKKzB4MDIwMDA4MDJMLCAweDAyMDAwMDAwTCwgMHgwMDAwMDAwMEwsIDB4MDAwODAwMDJMLAorMHgwMDA4MDAwMEwsIDB4MDAwMDAwMDJMLCAweDAyMDAwODAwTCwgMHgwMDA4MDgwMEwsCisweDAyMDgwODAyTCwgMHgwMjA4MDAwMEwsIDB4MDAwMDA4MDJMLCAweDAyMDAwODAwTCwKKzB4MDAwMDAwMDJMLCAweDAwMDAwODAwTCwgMHgwMDA4MDgwMEwsIDB4MDIwODAwMDJMLAorMHgwMDAwMDgwMEwsIDB4MDIwMDA4MDJMLCAweDAyMDgwMDAyTCwgMHgwMDAwMDAwMEwsCisweDAwMDAwMDAwTCwgMHgwMjA4MDgwMkwsIDB4MDIwMDA4MDBMLCAweDAwMDgwMDAyTCwKKzB4MDIwODA4MDBMLCAweDAwMDgwMDAwTCwgMHgwMDAwMDgwMkwsIDB4MDIwMDA4MDBMLAorMHgwMjA4MDAwMkwsIDB4MDAwMDA4MDBMLCAweDAwMDgwODAwTCwgMHgwMjAwMDAwMkwsCisweDAwMDgwODAyTCwgMHgwMDAwMDAwMkwsIDB4MDIwMDAwMDJMLCAweDAyMDgwMDAwTCwKKzB4MDIwODA4MDJMLCAweDAwMDgwODAwTCwgMHgwMjA4MDAwMEwsIDB4MDIwMDA4MDJMLAorMHgwMjAwMDAwMEwsIDB4MDAwMDA4MDJMLCAweDAwMDgwMDAyTCwgMHgwMDAwMDAwMEwsCisweDAwMDgwMDAwTCwgMHgwMjAwMDAwMEwsIDB4MDIwMDA4MDJMLCAweDAyMDgwODAwTCwKKzB4MDAwMDAwMDJMLCAweDAyMDgwMDAyTCwgMHgwMDAwMDgwMEwsIDB4MDAwODA4MDJMLAorfSx7CisvKiBuaWJibGUgMSAqLworMHg0MDEwODAxMEwsIDB4MDAwMDAwMDBMLCAweDAwMTA4MDAwTCwgMHg0MDEwMDAwMEwsCisweDQwMDAwMDEwTCwgMHgwMDAwODAxMEwsIDB4NDAwMDgwMDBMLCAweDAwMTA4MDAwTCwKKzB4MDAwMDgwMDBMLCAweDQwMTAwMDEwTCwgMHgwMDAwMDAxMEwsIDB4NDAwMDgwMDBMLAorMHgwMDEwMDAxMEwsIDB4NDAxMDgwMDBMLCAweDQwMTAwMDAwTCwgMHgwMDAwMDAxMEwsCisweDAwMTAwMDAwTCwgMHg0MDAwODAxMEwsIDB4NDAxMDAwMTBMLCAweDAwMDA4MDAwTCwKKzB4MDAxMDgwMTBMLCAweDQwMDAwMDAwTCwgMHgwMDAwMDAwMEwsIDB4MDAxMDAwMTBMLAorMHg0MDAwODAxMEwsIDB4MDAxMDgwMTBMLCAweDQwMTA4MDAwTCwgMHg0MDAwMDAxMEwsCisweDQwMDAwMDAwTCwgMHgwMDEwMDAwMEwsIDB4MDAwMDgwMTBMLCAweDQwMTA4MDEwTCwKKzB4MDAxMDAwMTBMLCAweDQwMTA4MDAwTCwgMHg0MDAwODAwMEwsIDB4MDAxMDgwMTBMLAorMHg0MDEwODAxMEwsIDB4MDAxMDAwMTBMLCAweDQwMDAwMDEwTCwgMHgwMDAwMDAwMEwsCisweDQwMDAwMDAwTCwgMHgwMDAwODAxMEwsIDB4MDAxMDAwMDBMLCAweDQwMTAwMDEwTCwKKzB4MDAwMDgwMDBMLCAweDQwMDAwMDAwTCwgMHgwMDEwODAxMEwsIDB4NDAwMDgwMTBMLAorMHg0MDEwODAwMEwsIDB4MDAwMDgwMDBMLCAweDAwMDAwMDAwTCwgMHg0MDAwMDAxMEwsCisweDAwMDAwMDEwTCwgMHg0MDEwODAxMEwsIDB4MDAxMDgwMDBMLCAweDQwMTAwMDAwTCwKKzB4NDAxMDAwMTBMLCAweDAwMTAwMDAwTCwgMHgwMDAwODAxMEwsIDB4NDAwMDgwMDBMLAorMHg0MDAwODAxMEwsIDB4MDAwMDAwMTBMLCAweDQwMTAwMDAwTCwgMHgwMDEwODAwMEwsCit9LHsKKy8qIG5pYmJsZSAyICovCisweDA0MDAwMDAxTCwgMHgwNDA0MDEwMEwsIDB4MDAwMDAxMDBMLCAweDA0MDAwMTAxTCwKKzB4MDAwNDAwMDFMLCAweDA0MDAwMDAwTCwgMHgwNDAwMDEwMUwsIDB4MDAwNDAxMDBMLAorMHgwNDAwMDEwMEwsIDB4MDAwNDAwMDBMLCAweDA0MDQwMDAwTCwgMHgwMDAwMDAwMUwsCisweDA0MDQwMTAxTCwgMHgwMDAwMDEwMUwsIDB4MDAwMDAwMDFMLCAweDA0MDQwMDAxTCwKKzB4MDAwMDAwMDBMLCAweDAwMDQwMDAxTCwgMHgwNDA0MDEwMEwsIDB4MDAwMDAxMDBMLAorMHgwMDAwMDEwMUwsIDB4MDQwNDAxMDFMLCAweDAwMDQwMDAwTCwgMHgwNDAwMDAwMUwsCisweDA0MDQwMDAxTCwgMHgwNDAwMDEwMEwsIDB4MDAwNDAxMDFMLCAweDA0MDQwMDAwTCwKKzB4MDAwNDAxMDBMLCAweDAwMDAwMDAwTCwgMHgwNDAwMDAwMEwsIDB4MDAwNDAxMDFMLAorMHgwNDA0MDEwMEwsIDB4MDAwMDAxMDBMLCAweDAwMDAwMDAxTCwgMHgwMDA0MDAwMEwsCisweDAwMDAwMTAxTCwgMHgwMDA0MDAwMUwsIDB4MDQwNDAwMDBMLCAweDA0MDAwMTAxTCwKKzB4MDAwMDAwMDBMLCAweDA0MDQwMTAwTCwgMHgwMDA0MDEwMEwsIDB4MDQwNDAwMDFMLAorMHgwMDA0MDAwMUwsIDB4MDQwMDAwMDBMLCAweDA0MDQwMTAxTCwgMHgwMDAwMDAwMUwsCisweDAwMDQwMTAxTCwgMHgwNDAwMDAwMUwsIDB4MDQwMDAwMDBMLCAweDA0MDQwMTAxTCwKKzB4MDAwNDAwMDBMLCAweDA0MDAwMTAwTCwgMHgwNDAwMDEwMUwsIDB4MDAwNDAxMDBMLAorMHgwNDAwMDEwMEwsIDB4MDAwMDAwMDBMLCAweDA0MDQwMDAxTCwgMHgwMDAwMDEwMUwsCisweDA0MDAwMDAxTCwgMHgwMDA0MDEwMUwsIDB4MDAwMDAxMDBMLCAweDA0MDQwMDAwTCwKK30seworLyogbmliYmxlIDMgKi8KKzB4MDA0MDEwMDhMLCAweDEwMDAxMDAwTCwgMHgwMDAwMDAwOEwsIDB4MTA0MDEwMDhMLAorMHgwMDAwMDAwMEwsIDB4MTA0MDAwMDBMLCAweDEwMDAxMDA4TCwgMHgwMDQwMDAwOEwsCisweDEwNDAxMDAwTCwgMHgxMDAwMDAwOEwsIDB4MTAwMDAwMDBMLCAweDAwMDAxMDA4TCwKKzB4MTAwMDAwMDhMLCAweDAwNDAxMDA4TCwgMHgwMDQwMDAwMEwsIDB4MTAwMDAwMDBMLAorMHgxMDQwMDAwOEwsIDB4MDA0MDEwMDBMLCAweDAwMDAxMDAwTCwgMHgwMDAwMDAwOEwsCisweDAwNDAxMDAwTCwgMHgxMDAwMTAwOEwsIDB4MTA0MDAwMDBMLCAweDAwMDAxMDAwTCwKKzB4MDAwMDEwMDhMLCAweDAwMDAwMDAwTCwgMHgwMDQwMDAwOEwsIDB4MTA0MDEwMDBMLAorMHgxMDAwMTAwMEwsIDB4MTA0MDAwMDhMLCAweDEwNDAxMDA4TCwgMHgwMDQwMDAwMEwsCisweDEwNDAwMDA4TCwgMHgwMDAwMTAwOEwsIDB4MDA0MDAwMDBMLCAweDEwMDAwMDA4TCwKKzB4MDA0MDEwMDBMLCAweDEwMDAxMDAwTCwgMHgwMDAwMDAwOEwsIDB4MTA0MDAwMDBMLAorMHgxMDAwMTAwOEwsIDB4MDAwMDAwMDBMLCAweDAwMDAxMDAwTCwgMHgwMDQwMDAwOEwsCisweDAwMDAwMDAwTCwgMHgxMDQwMDAwOEwsIDB4MTA0MDEwMDBMLCAweDAwMDAxMDAwTCwKKzB4MTAwMDAwMDBMLCAweDEwNDAxMDA4TCwgMHgwMDQwMTAwOEwsIDB4MDA0MDAwMDBMLAorMHgxMDQwMTAwOEwsIDB4MDAwMDAwMDhMLCAweDEwMDAxMDAwTCwgMHgwMDQwMTAwOEwsCisweDAwNDAwMDA4TCwgMHgwMDQwMTAwMEwsIDB4MTA0MDAwMDBMLCAweDEwMDAxMDA4TCwKKzB4MDAwMDEwMDhMLCAweDEwMDAwMDAwTCwgMHgxMDAwMDAwOEwsIDB4MTA0MDEwMDBMLAorfSx7CisvKiBuaWJibGUgNCAqLworMHgwODAwMDAwMEwsIDB4MDAwMTAwMDBMLCAweDAwMDAwNDAwTCwgMHgwODAxMDQyMEwsCisweDA4MDEwMDIwTCwgMHgwODAwMDQwMEwsIDB4MDAwMTA0MjBMLCAweDA4MDEwMDAwTCwKKzB4MDAwMTAwMDBMLCAweDAwMDAwMDIwTCwgMHgwODAwMDAyMEwsIDB4MDAwMTA0MDBMLAorMHgwODAwMDQyMEwsIDB4MDgwMTAwMjBMLCAweDA4MDEwNDAwTCwgMHgwMDAwMDAwMEwsCisweDAwMDEwNDAwTCwgMHgwODAwMDAwMEwsIDB4MDAwMTAwMjBMLCAweDAwMDAwNDIwTCwKKzB4MDgwMDA0MDBMLCAweDAwMDEwNDIwTCwgMHgwMDAwMDAwMEwsIDB4MDgwMDAwMjBMLAorMHgwMDAwMDAyMEwsIDB4MDgwMDA0MjBMLCAweDA4MDEwNDIwTCwgMHgwMDAxMDAyMEwsCisweDA4MDEwMDAwTCwgMHgwMDAwMDQwMEwsIDB4MDAwMDA0MjBMLCAweDA4MDEwNDAwTCwKKzB4MDgwMTA0MDBMLCAweDA4MDAwNDIwTCwgMHgwMDAxMDAyMEwsIDB4MDgwMTAwMDBMLAorMHgwMDAxMDAwMEwsIDB4MDAwMDAwMjBMLCAweDA4MDAwMDIwTCwgMHgwODAwMDQwMEwsCisweDA4MDAwMDAwTCwgMHgwMDAxMDQwMEwsIDB4MDgwMTA0MjBMLCAweDAwMDAwMDAwTCwKKzB4MDAwMTA0MjBMLCAweDA4MDAwMDAwTCwgMHgwMDAwMDQwMEwsIDB4MDAwMTAwMjBMLAorMHgwODAwMDQyMEwsIDB4MDAwMDA0MDBMLCAweDAwMDAwMDAwTCwgMHgwODAxMDQyMEwsCisweDA4MDEwMDIwTCwgMHgwODAxMDQwMEwsIDB4MDAwMDA0MjBMLCAweDAwMDEwMDAwTCwKKzB4MDAwMTA0MDBMLCAweDA4MDEwMDIwTCwgMHgwODAwMDQwMEwsIDB4MDAwMDA0MjBMLAorMHgwMDAwMDAyMEwsIDB4MDAwMTA0MjBMLCAweDA4MDEwMDAwTCwgMHgwODAwMDAyMEwsCit9LHsKKy8qIG5pYmJsZSA1ICovCisweDgwMDAwMDQwTCwgMHgwMDIwMDA0MEwsIDB4MDAwMDAwMDBMLCAweDgwMjAyMDAwTCwKKzB4MDAyMDAwNDBMLCAweDAwMDAyMDAwTCwgMHg4MDAwMjA0MEwsIDB4MDAyMDAwMDBMLAorMHgwMDAwMjA0MEwsIDB4ODAyMDIwNDBMLCAweDAwMjAyMDAwTCwgMHg4MDAwMDAwMEwsCisweDgwMDAyMDAwTCwgMHg4MDAwMDA0MEwsIDB4ODAyMDAwMDBMLCAweDAwMjAyMDQwTCwKKzB4MDAyMDAwMDBMLCAweDgwMDAyMDQwTCwgMHg4MDIwMDA0MEwsIDB4MDAwMDAwMDBMLAorMHgwMDAwMjAwMEwsIDB4MDAwMDAwNDBMLCAweDgwMjAyMDAwTCwgMHg4MDIwMDA0MEwsCisweDgwMjAyMDQwTCwgMHg4MDIwMDAwMEwsIDB4ODAwMDAwMDBMLCAweDAwMDAyMDQwTCwKKzB4MDAwMDAwNDBMLCAweDAwMjAyMDAwTCwgMHgwMDIwMjA0MEwsIDB4ODAwMDIwMDBMLAorMHgwMDAwMjA0MEwsIDB4ODAwMDAwMDBMLCAweDgwMDAyMDAwTCwgMHgwMDIwMjA0MEwsCisweDgwMjAyMDAwTCwgMHgwMDIwMDA0MEwsIDB4MDAwMDAwMDBMLCAweDgwMDAyMDAwTCwKKzB4ODAwMDAwMDBMLCAweDAwMDAyMDAwTCwgMHg4MDIwMDA0MEwsIDB4MDAyMDAwMDBMLAorMHgwMDIwMDA0MEwsIDB4ODAyMDIwNDBMLCAweDAwMjAyMDAwTCwgMHgwMDAwMDA0MEwsCisweDgwMjAyMDQwTCwgMHgwMDIwMjAwMEwsIDB4MDAyMDAwMDBMLCAweDgwMDAyMDQwTCwKKzB4ODAwMDAwNDBMLCAweDgwMjAwMDAwTCwgMHgwMDIwMjA0MEwsIDB4MDAwMDAwMDBMLAorMHgwMDAwMjAwMEwsIDB4ODAwMDAwNDBMLCAweDgwMDAyMDQwTCwgMHg4MDIwMjAwMEwsCisweDgwMjAwMDAwTCwgMHgwMDAwMjA0MEwsIDB4MDAwMDAwNDBMLCAweDgwMjAwMDQwTCwKK30seworLyogbmliYmxlIDYgKi8KKzB4MDAwMDQwMDBMLCAweDAwMDAwMjAwTCwgMHgwMTAwMDIwMEwsIDB4MDEwMDAwMDRMLAorMHgwMTAwNDIwNEwsIDB4MDAwMDQwMDRMLCAweDAwMDA0MjAwTCwgMHgwMDAwMDAwMEwsCisweDAxMDAwMDAwTCwgMHgwMTAwMDIwNEwsIDB4MDAwMDAyMDRMLCAweDAxMDA0MDAwTCwKKzB4MDAwMDAwMDRMLCAweDAxMDA0MjAwTCwgMHgwMTAwNDAwMEwsIDB4MDAwMDAyMDRMLAorMHgwMTAwMDIwNEwsIDB4MDAwMDQwMDBMLCAweDAwMDA0MDA0TCwgMHgwMTAwNDIwNEwsCisweDAwMDAwMDAwTCwgMHgwMTAwMDIwMEwsIDB4MDEwMDAwMDRMLCAweDAwMDA0MjAwTCwKKzB4MDEwMDQwMDRMLCAweDAwMDA0MjA0TCwgMHgwMTAwNDIwMEwsIDB4MDAwMDAwMDRMLAorMHgwMDAwNDIwNEwsIDB4MDEwMDQwMDRMLCAweDAwMDAwMjAwTCwgMHgwMTAwMDAwMEwsCisweDAwMDA0MjA0TCwgMHgwMTAwNDAwMEwsIDB4MDEwMDQwMDRMLCAweDAwMDAwMjA0TCwKKzB4MDAwMDQwMDBMLCAweDAwMDAwMjAwTCwgMHgwMTAwMDAwMEwsIDB4MDEwMDQwMDRMLAorMHgwMTAwMDIwNEwsIDB4MDAwMDQyMDRMLCAweDAwMDA0MjAwTCwgMHgwMDAwMDAwMEwsCisweDAwMDAwMjAwTCwgMHgwMTAwMDAwNEwsIDB4MDAwMDAwMDRMLCAweDAxMDAwMjAwTCwKKzB4MDAwMDAwMDBMLCAweDAxMDAwMjA0TCwgMHgwMTAwMDIwMEwsIDB4MDAwMDQyMDBMLAorMHgwMDAwMDIwNEwsIDB4MDAwMDQwMDBMLCAweDAxMDA0MjA0TCwgMHgwMTAwMDAwMEwsCisweDAxMDA0MjAwTCwgMHgwMDAwMDAwNEwsIDB4MDAwMDQwMDRMLCAweDAxMDA0MjA0TCwKKzB4MDEwMDAwMDRMLCAweDAxMDA0MjAwTCwgMHgwMTAwNDAwMEwsIDB4MDAwMDQwMDRMLAorfSx7CisvKiBuaWJibGUgNyAqLworMHgyMDgwMDA4MEwsIDB4MjA4MjAwMDBMLCAweDAwMDIwMDgwTCwgMHgwMDAwMDAwMEwsCisweDIwMDIwMDAwTCwgMHgwMDgwMDA4MEwsIDB4MjA4MDAwMDBMLCAweDIwODIwMDgwTCwKKzB4MDAwMDAwODBMLCAweDIwMDAwMDAwTCwgMHgwMDgyMDAwMEwsIDB4MDAwMjAwODBMLAorMHgwMDgyMDA4MEwsIDB4MjAwMjAwODBMLCAweDIwMDAwMDgwTCwgMHgyMDgwMDAwMEwsCisweDAwMDIwMDAwTCwgMHgwMDgyMDA4MEwsIDB4MDA4MDAwODBMLCAweDIwMDIwMDAwTCwKKzB4MjA4MjAwODBMLCAweDIwMDAwMDgwTCwgMHgwMDAwMDAwMEwsIDB4MDA4MjAwMDBMLAorMHgyMDAwMDAwMEwsIDB4MDA4MDAwMDBMLCAweDIwMDIwMDgwTCwgMHgyMDgwMDA4MEwsCisweDAwODAwMDAwTCwgMHgwMDAyMDAwMEwsIDB4MjA4MjAwMDBMLCAweDAwMDAwMDgwTCwKKzB4MDA4MDAwMDBMLCAweDAwMDIwMDAwTCwgMHgyMDAwMDA4MEwsIDB4MjA4MjAwODBMLAorMHgwMDAyMDA4MEwsIDB4MjAwMDAwMDBMLCAweDAwMDAwMDAwTCwgMHgwMDgyMDAwMEwsCisweDIwODAwMDgwTCwgMHgyMDAyMDA4MEwsIDB4MjAwMjAwMDBMLCAweDAwODAwMDgwTCwKKzB4MjA4MjAwMDBMLCAweDAwMDAwMDgwTCwgMHgwMDgwMDA4MEwsIDB4MjAwMjAwMDBMLAorMHgyMDgyMDA4MEwsIDB4MDA4MDAwMDBMLCAweDIwODAwMDAwTCwgMHgyMDAwMDA4MEwsCisweDAwODIwMDAwTCwgMHgwMDAyMDA4MEwsIDB4MjAwMjAwODBMLCAweDIwODAwMDAwTCwKKzB4MDAwMDAwODBMLCAweDIwODIwMDAwTCwgMHgwMDgyMDA4MEwsIDB4MDAwMDAwMDBMLAorMHgyMDAwMDAwMEwsIDB4MjA4MDAwODBMLCAweDAwMDIwMDAwTCwgMHgwMDgyMDA4MEwsCit9fTsKZGlmZiAtLWdpdCBhL3NubXBsaWIvcGFyc2UuYyBiL3NubXBsaWIvcGFyc2UuYwppbmRleCA2NzgxOWJmLi40ZDQ0ZDg4IDEwMDY0NAotLS0gYS9zbm1wbGliL3BhcnNlLmMKKysrIGIvc25tcGxpYi9wYXJzZS5jCkBAIC0zMyw2ICszMyw3IEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKIApAQCAtNzQsMTEgKzc1LDcgQEAKICMgZW5kaWYKICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtODcsOSArODQsNiBAQAogIyAgaW5jbHVkZSA8dGltZS5oPgogIyBlbmRpZgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtMTEzLDYgKzEwNywzNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcGFyc2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaW5kX21vZHVsZSwgbWliX2FwaSkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihnZXRfdGNfZGVzY3JpcHRpb24sIG1pYl9hcGkpCisKKy8qCisgKiBBIGxpbmtlZCBsaXN0IG9mIG5vZGVzLgorICovCitzdHJ1Y3Qgbm9kZSB7CisgICAgc3RydWN0IG5vZGUgICAgKm5leHQ7CisgICAgY2hhciAgICAgICAgICAgKmxhYmVsOyAgLyogVGhpcyBub2RlJ3MgKHVuaXF1ZSkgdGV4dHVhbCBuYW1lICovCisgICAgdV9sb25nICAgICAgICAgIHN1YmlkOyAgLyogVGhpcyBub2RlJ3MgaW50ZWdlciBzdWJpZGVudGlmaWVyICovCisgICAgaW50ICAgICAgICAgICAgIG1vZGlkOyAgLyogVGhlIG1vZHVsZSBjb250YWluaW5nIHRoaXMgbm9kZSAqLworICAgIGNoYXIgICAgICAgICAgICpwYXJlbnQ7IC8qIFRoZSBwYXJlbnQncyB0ZXh0dWFsIG5hbWUgKi8KKyAgICBpbnQgICAgICAgICAgICAgdGNfaW5kZXg7IC8qIGluZGV4IGludG8gdGNsaXN0ICgtMSBpZiBOQSkgKi8KKyAgICBpbnQgICAgICAgICAgICAgdHlwZTsgICAvKiBUaGUgdHlwZSBvZiBvYmplY3QgdGhpcyByZXByZXNlbnRzICovCisgICAgaW50ICAgICAgICAgICAgIGFjY2VzczsKKyAgICBpbnQgICAgICAgICAgICAgc3RhdHVzOworICAgIHN0cnVjdCBlbnVtX2xpc3QgKmVudW1zOyAvKiAob3B0aW9uYWwpIGxpc3Qgb2YgZW51bWVyYXRlZCBpbnRlZ2VycyAqLworICAgIHN0cnVjdCByYW5nZV9saXN0ICpyYW5nZXM7CisgICAgc3RydWN0IGluZGV4X2xpc3QgKmluZGV4ZXM7CisgICAgY2hhciAgICAgICAgICAgKmF1Z21lbnRzOworICAgIHN0cnVjdCB2YXJiaW5kX2xpc3QgKnZhcmJpbmRzOworICAgIGNoYXIgICAgICAgICAgICpoaW50OworICAgIGNoYXIgICAgICAgICAgICp1bml0czsKKyAgICBjaGFyICAgICAgICAgICAqZGVzY3JpcHRpb247IC8qIGRlc2NyaXB0aW9uIChhIHF1b3RlZCBzdHJpbmcpICovCisgICAgY2hhciAgICAgICAgICAgKnJlZmVyZW5jZTsgLyogcmVmZXJlbmNlcyAoYSBxdW90ZWQgc3RyaW5nKSAqLworICAgIGNoYXIgICAgICAgICAgICpkZWZhdWx0VmFsdWU7CisgICAgY2hhciAgICAgICAgICAgKmZpbGVuYW1lOworICAgIGludCAgICAgICAgICAgICBsaW5lbm87Cit9OwogCiAvKgogICogVGhpcyBpcyBvbmUgZWxlbWVudCBvZiBhbiBvYmplY3QgaWRlbnRpZmllciB3aXRoIGVpdGhlciBhbiBpbnRlZ2VyCkBAIC01MDksNyArNTM0LDExIEBACiAgKiAjZGVmaW5lIE1PRFVMRV9MT0FEX0ZBSUxFRCAgIDMgICAgICAgCiAgKi8KICNkZWZpbmUgTU9EVUxFX0xPQURfRkFJTEVECU1PRFVMRV9OT1RfRk9VTkQKKyNkZWZpbmUgTU9EVUxFX1NZTlRBWF9FUlJPUiAgICAgNAogCitpbnQgZ01pYkVycm9yID0gMCxnTG9vcCA9IDA7CitjaGFyICpncE1pYkVycm9yU3RyaW5nID0gTlVMTDsKK2NoYXIgZ01pYk5hbWVzW1NUUklOR01BWF07CiAKICNkZWZpbmUgSEFTSFNJWkUgICAgICAgIDMyCiAjZGVmaW5lIEJVQ0tFVCh4KSAgICAgICAoeCAmIChIQVNIU0laRS0xKSkKQEAgLTUyMyw4ICs1NTIsOSBAQAogc3RhdGljIHN0cnVjdCB0cmVlICp0YnVja2V0c1tOSEFTSFNJWkVdOwogc3RhdGljIHN0cnVjdCBtb2R1bGUgKm1vZHVsZV9oZWFkID0gTlVMTDsKIAotc3RydWN0IG5vZGUgICAgKm9ycGhhbl9ub2RlcyA9IE5VTEw7Ci1zdHJ1Y3QgdHJlZSAgICAqdHJlZV9oZWFkID0gTlVMTDsKK3N0YXRpYyBzdHJ1Y3Qgbm9kZSAqb3JwaGFuX25vZGVzID0gTlVMTDsKK05FVFNOTVBfSU1QT1JUIHN0cnVjdCB0cmVlICp0cmVlX2hlYWQ7CitzdHJ1Y3QgdHJlZSAgICAgICAgKnRyZWVfaGVhZCA9IE5VTEw7CiAKICNkZWZpbmUJTlVNQkVSX09GX1JPT1RfTk9ERVMJMwogc3RhdGljIHN0cnVjdCBtb2R1bGVfaW1wb3J0IHJvb3RfaW1wb3J0c1tOVU1CRVJfT0ZfUk9PVF9OT0RFU107CkBAIC01MzIsNyArNTYyLDcgQEAKIHN0YXRpYyBpbnQgICAgICBjdXJyZW50X21vZHVsZSA9IDA7CiBzdGF0aWMgaW50ICAgICAgbWF4X21vZHVsZSA9IDA7CiBzdGF0aWMgaW50ICAgICAgZmlyc3RfZXJyX21vZHVsZSA9IDE7Ci1zdGF0aWMgY2hhciAgICAqbGFzdF9lcnJfbW9kdWxlID0gMDsgICAgLyogbm8gcmVwZWF0cyBvbiAiQ2Fubm90IGZpbmQgbW9kdWxlLi4uIiAqLworc3RhdGljIGNoYXIgICAgKmxhc3RfZXJyX21vZHVsZSA9IE5VTEw7IC8qIG5vIHJlcGVhdHMgb24gIkNhbm5vdCBmaW5kIG1vZHVsZS4uLiIgKi8KIAogc3RhdGljIHZvaWQgICAgIHRyZWVfZnJvbV9ub2RlKHN0cnVjdCB0cmVlICp0cCwgc3RydWN0IG5vZGUgKm5wKTsKIHN0YXRpYyB2b2lkICAgICBkb19zdWJ0cmVlKHN0cnVjdCB0cmVlICosIHN0cnVjdCBub2RlICoqKTsKQEAgLTY4MSw3ICs3MTEsNyBAQAogICAgIGlmICghbmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgZm9yIChjcCA9IG5hbWU7ICpjcDsgY3ArKykKLSAgICAgICAgaGFzaCArPSB0b2xvd2VyKCpjcCk7CisgICAgICAgIGhhc2ggKz0gdG9sb3dlcigodW5zaWduZWQgY2hhcikoKmNwKSk7CiAgICAgcmV0dXJuIChoYXNoKTsKIH0KIApAQCAtNzI3LDcgKzc1Nyw3IEBACiAgICAgICovCiB9CiAKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKIHZvaWQKIGluaXRfbWliX2ludGVybmFscyh2b2lkKQogewpAQCAtNzUzLDExICs3ODMsMTQgQEAKIAogc3RhdGljIGludCAgICAgIGVycm9uZW91c01pYnMgPSAwOwogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocGFyc2VfZ2V0X2Vycm9yX2NvdW50LCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9HRVRfRVJST1JfQ09VTlQKIGludAogZ2V0X21pYl9wYXJzZV9lcnJvcl9jb3VudCh2b2lkKQogewogICAgIHJldHVybiBlcnJvbmVvdXNNaWJzOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfR0VUX0VSUk9SX0NPVU5UICovCiAKIAogc3RhdGljIHZvaWQKQEAgLTg4NSw5ICs5MTgsOSBAQAogCiAgICAgdW5saW5rX3RidWNrZXQoVHJlZSk7CiAgICAgZnJlZV9wYXJ0aWFsX3RyZWUoVHJlZSwgRkFMU0UpOwotICAgIGlmIChUcmVlLT5udW1iZXJfbW9kdWxlcyA+IDEpCi0gICAgICAgIGZyZWUoKGNoYXIgKikgVHJlZS0+bW9kdWxlX2xpc3QpOwotICAgIGZyZWUoKGNoYXIgKikgVHJlZSk7CisgICAgaWYgKFRyZWUtPm1vZHVsZV9saXN0ICE9ICZUcmVlLT5tb2RpZCkKKyAgICAgICAgZnJlZShUcmVlLT5tb2R1bGVfbGlzdCk7CisgICAgZnJlZShUcmVlKTsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTk1MSwxMCArOTg0LDggQEAKIHN0YXRpYyB2b2lkCiBwcmludF9ub2RlcyhGSUxFICogZnAsIHN0cnVjdCBub2RlICpyb290KQogewotICAgIGV4dGVybiB2b2lkICAgICB4bWFsbG9jX3N0YXRzKEZJTEUgKik7CiAgICAgc3RydWN0IGVudW1fbGlzdCAqZXA7CiAgICAgc3RydWN0IGluZGV4X2xpc3QgKmlwOwotICAgIHN0cnVjdCByYW5nZV9saXN0ICpycDsKICAgICBzdHJ1Y3QgdmFyYmluZF9saXN0ICp2cDsKICAgICBzdHJ1Y3Qgbm9kZSAgICAqbnA7CiAKQEAgLTk3MCw2ICsxMDAxLDcgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpZiAobnAtPnJhbmdlcykgeworICAgICAgICAgICAgc3RydWN0IHJhbmdlX2xpc3QgKnJwOwogICAgICAgICAgICAgZnByaW50ZihmcCwgIiAgUmFuZ2VzOiAiKTsKICAgICAgICAgICAgIGZvciAocnAgPSBucC0+cmFuZ2VzOyBycDsgcnAgPSBycC0+bmV4dCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoZnAsICJcbiAgICAiKTsKQEAgLTEwNTYsNyArMTA4OCw3IEBACiBzdGF0aWMgaW50ICAgICAgdHJhbnNsYXRpb25fdGFibGVbMjU2XTsKIAogc3RhdGljIHZvaWQKLWJ1aWxkX3RyYW5zbGF0aW9uX3RhYmxlKCkKK2J1aWxkX3RyYW5zbGF0aW9uX3RhYmxlKHZvaWQpCiB7CiAgICAgaW50ICAgICAgICAgICAgIGNvdW50OwogCkBAIC0xMTQyLDcgKzExNzQsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotaW5pdF90cmVlX3Jvb3RzKCkKK2luaXRfdHJlZV9yb290cyh2b2lkKQogewogICAgIHN0cnVjdCB0cmVlICAgICp0cCwgKmxhc3R0cDsKICAgICBpbnQgICAgICAgICAgICAgYmFzZV9tb2RpZDsKQEAgLTE1MzksMTUgKzE1NzEsMTQgQEAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIFVwZGF0ZSBsaXN0IG9mIG1vZHVsZXMgCiAgICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgaW50X3AgPQotICAgICAgICAgICAgICAgICAgICAoaW50ICopIG1hbGxvYygodHAtPm51bWJlcl9tb2R1bGVzICsgMSkgKiBzaXplb2YoaW50KSk7CisgICAgICAgICAgICAgICAgaW50X3AgPSBtYWxsb2MoKHRwLT5udW1iZXJfbW9kdWxlcyArIDEpICogc2l6ZW9mKGludCkpOwogICAgICAgICAgICAgICAgIGlmIChpbnRfcCA9PSBOVUxMKQogICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgbWVtY3B5KGludF9wLCB0cC0+bW9kdWxlX2xpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5udW1iZXJfbW9kdWxlcyAqIHNpemVvZihpbnQpKTsKICAgICAgICAgICAgICAgICBpbnRfcFt0cC0+bnVtYmVyX21vZHVsZXNdID0gbnAtPm1vZGlkOwotICAgICAgICAgICAgICAgIGlmICh0cC0+bnVtYmVyX21vZHVsZXMgPiAxKQotICAgICAgICAgICAgICAgICAgICBmcmVlKChjaGFyICopIHRwLT5tb2R1bGVfbGlzdCk7CisgICAgICAgICAgICAgICAgaWYgKHRwLT5tb2R1bGVfbGlzdCAhPSAmdHAtPm1vZGlkKQorICAgICAgICAgICAgICAgICAgICBmcmVlKHRwLT5tb2R1bGVfbGlzdCk7CiAgICAgICAgICAgICAgICAgKyt0cC0+bnVtYmVyX21vZHVsZXM7CiAgICAgICAgICAgICAgICAgdHAtPm1vZHVsZV9saXN0ID0gaW50X3A7CiAKQEAgLTIxMjAsNiArMjE1MSw4IEBACiAgICAgcmV0dXJuICh0Y2xpc3RbdGNfaW5kZXhdLmRlc2NyaXB0b3IpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX1RDX0RFU0NSSVBUSU9OCisvKiB1c2VkIGluIHRoZSBwZXJsIG1vZHVsZSAqLwogY29uc3QgY2hhciAgICAgKgogZ2V0X3RjX2Rlc2NyaXB0aW9uKGludCB0Y19pbmRleCkKIHsKQEAgLTIxMjcsNiArMjE2MCw3IEBACiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIHJldHVybiAodGNsaXN0W3RjX2luZGV4XS5kZXNjcmlwdGlvbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9HRVRfVENfREVTQ1JJUFRJT04gKi8KIAogCiAvKgpAQCAtMjk1NSw2ICsyOTg5LDE1IEBACiAgICAgICAgIGZyZWVfbm9kZShucCk7CiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgfQorCisgICAgLyogQ2F0Y2ggdGhlIHN5bnRheCBlcnJvciAqLworICAgIGlmIChucC0+cGFyZW50ID09IE5VTEwpIHsKKyAgICAgICAgZnJlZV9ub2RlKG5wLT5uZXh0KTsKKyAgICAgICAgZnJlZV9ub2RlKG5wKTsKKyAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICB9CisKICAgICBucC0+bmV4dC0+cGFyZW50ID0gbnAtPnBhcmVudDsKICAgICBucC0+cGFyZW50ID0gKGNoYXIgKikgbWFsbG9jKHN0cmxlbihucC0+cGFyZW50KSArIDIpOwogICAgIGlmIChucC0+cGFyZW50ID09IE5VTEwpIHsKQEAgLTI5NjUsNyArMzAwOCw2IEBACiAgICAgc3RyY3B5KG5wLT5wYXJlbnQsIG5wLT5uZXh0LT5wYXJlbnQpOwogICAgIHN0cmNhdChucC0+cGFyZW50LCAiIyIpOwogICAgIG5wLT5uZXh0LT5sYWJlbCA9IHN0cmR1cChucC0+cGFyZW50KTsKLSAgICBucC0+dHlwZSA9IFRSQVBUWVBFOwogICAgIHJldHVybiBucDsKIH0KIApAQCAtMzczNSw2ICszNzc3LDggQEAKICAqICAgICAgb3IgdGhvc2UgcmVsYXRpbmcgdG8gYSBzcGVjaWZpZWQgaWRlbnRpZmllciAocmVhZF9pbXBvcnRfcmVwbGFjZW1lbnRzKQogICogICAgICBwbHVzIGFuIGludGVyZmFjZSB0byBhZGQgbmV3IHJlcGxhY2VtZW50IHJlcXVpcmVtZW50cwogICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocGFyc2VfYWRkX21vZHVsZV9yZXBsYWNlbWVudCwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUEFSU0VfQUREX01PRFVMRV9SRVBMQUNFTUVOVAogdm9pZAogYWRkX21vZHVsZV9yZXBsYWNlbWVudChjb25zdCBjaGFyICpvbGRfbW9kdWxlLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpuZXdfbW9kdWxlX25hbWUsCkBAIC0zNzU2LDYgKzM4MDAsNyBAQAogICAgIG1jcC0+bmV4dCA9IG1vZHVsZV9tYXBfaGVhZDsKICAgICBtb2R1bGVfbWFwX2hlYWQgPSBtY3A7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9BRERfTU9EVUxFX1JFUExBQ0VNRU5UICovCiAKIHN0YXRpYyBpbnQKIHJlYWRfbW9kdWxlX3JlcGxhY2VtZW50cyhjb25zdCBjaGFyICpuYW1lKQpAQCAtMzgzMSw2ICszODc2LDcgQEAKIHsKICAgICBzdHJ1Y3QgbW9kdWxlICAqbXA7CiAgICAgRklMRSAgICAgICAgICAgKmZwOworICAgIHN0cnVjdCBub2RlICAgICpucDsKIAogICAgIG5ldHNubXBfaW5pdF9taWJfaW50ZXJuYWxzKCk7CiAKQEAgLTM4NDYsOSArMzg5MiwxNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiBNT0RVTEVfQUxSRUFEWV9MT0FERUQ7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoKGZwID0gZm9wZW4obXAtPmZpbGUsICJyIikpID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBpbnQgcnZhbDsKKyAgICAgICAgICAgICAgICBpZiAoZXJybm8gPT0gRU5PVERJUiB8fCBlcnJubyA9PSBFTk9FTlQpCisgICAgICAgICAgICAgICAgICAgIHJ2YWwgPSBNT0RVTEVfTk9UX0ZPVU5EOworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgcnZhbCA9IE1PRFVMRV9MT0FEX0ZBSUxFRDsKICAgICAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IobXAtPmZpbGUpOwotICAgICAgICAgICAgICAgIHJldHVybiBNT0RVTEVfTE9BRF9GQUlMRUQ7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJ2YWw7CiAgICAgICAgICAgICB9CisjaWZkZWYgSEFWRV9GTE9DS0ZJTEUKKyAgICAgICAgICAgIGZsb2NrZmlsZShmcCk7CisjZW5kaWYKICAgICAgICAgICAgIG1wLT5ub19pbXBvcnRzID0gMDsgLyogTm90ZSB0aGF0IHdlJ3ZlIHJlYWQgdGhlIGZpbGUgKi8KICAgICAgICAgICAgIEZpbGUgPSBtcC0+ZmlsZTsKICAgICAgICAgICAgIG1pYkxpbmUgPSAxOwpAQCAtMzg1NiwxMSArMzkxMCwxNiBAQAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIFBhcnNlIHRoZSBmaWxlCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHBhcnNlKGZwLCBOVUxMKTsKKyAgICAgICAgICAgIG5wID0gcGFyc2UoZnAsIE5VTEwpOworI2lmZGVmIEhBVkVfRlVOTE9DS0ZJTEUKKyAgICAgICAgICAgIGZ1bmxvY2tmaWxlKGZwKTsKKyNlbmRpZgogICAgICAgICAgICAgZmNsb3NlKGZwKTsKICAgICAgICAgICAgIEZpbGUgPSBvbGRGaWxlOwogICAgICAgICAgICAgbWliTGluZSA9IG9sZExpbmU7CiAgICAgICAgICAgICBjdXJyZW50X21vZHVsZSA9IG9sZE1vZHVsZTsKKyAgICAgICAgICAgIGlmICgobnAgPT0gTlVMTCkgJiYgKGdNaWJFcnJvciA9PSBNT0RVTEVfU1lOVEFYX0VSUk9SKSApCisgICAgICAgICAgICAgICAgcmV0dXJuIE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICByZXR1cm4gTU9EVUxFX0xPQURFRF9PSzsKICAgICAgICAgfQogCkBAIC0zOTM4LDcgKzM5OTcsNyBAQAogICAgICAgICB9CiB9CiAKLSNpZm5kZWYgTkVUU05NUF9DTEVBTl9OQU1FU1BBQ0UKKyNpZm5kZWYgTkVUU05NUF9OT19MRUdBQ1lfREVGSU5JVElPTlMKIHN0cnVjdCB0cmVlICAgICoKIHJlYWRfbW9kdWxlKGNvbnN0IGNoYXIgKm5hbWUpCiB7CkBAIC0zOTQ5LDkgKzQwMDgsMjAgQEAKIHN0cnVjdCB0cmVlICAgICoKIG5ldHNubXBfcmVhZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKLSAgICBpZiAocmVhZF9tb2R1bGVfaW50ZXJuYWwobmFtZSkgPT0gTU9EVUxFX05PVF9GT1VORCkKKyAgICBpbnQgc3RhdHVzID0gMDsKKyAgICBzdGF0dXMgPSByZWFkX21vZHVsZV9pbnRlcm5hbChuYW1lKTsKKworICAgIGlmIChzdGF0dXMgPT0gTU9EVUxFX05PVF9GT1VORCkgewogICAgICAgICBpZiAoIXJlYWRfbW9kdWxlX3JlcGxhY2VtZW50cyhuYW1lKSkKLQkgICAgcHJpbnRfbW9kdWxlX25vdF9mb3VuZChuYW1lKTsKKyAgICAgICAgICAgIHByaW50X21vZHVsZV9ub3RfZm91bmQobmFtZSk7CisgICAgfSBlbHNlIGlmIChzdGF0dXMgPT0gTU9EVUxFX1NZTlRBWF9FUlJPUikgeworICAgICAgICBnTWliRXJyb3IgPSAwOworICAgICAgICBnTG9vcCA9IDE7CisKKyAgICAgICAgc3RybmNhdChnTWliTmFtZXMsICIgIiwgc2l6ZW9mKGdNaWJOYW1lcykgLSBzdHJsZW4oZ01pYk5hbWVzKSAtIDEpOworICAgICAgICBzdHJuY2F0KGdNaWJOYW1lcywgbmFtZSwgc2l6ZW9mKGdNaWJOYW1lcykgLSBzdHJsZW4oZ01pYk5hbWVzKSAtIDEpOworICAgIH0KKwogICAgIHJldHVybiB0cmVlX2hlYWQ7CiB9CiAKQEAgLTQwMzksNyArNDEwOSw3IEBACiAgICAgfQogfQogCi0jaWZuZGVmIE5FVFNOTVBfQ0xFQU5fTkFNRVNQQUNFCisjaWZuZGVmIE5FVFNOTVBfTk9fTEVHQUNZX0RFRklOSVRJT05TCiBpbnQKIHVubG9hZF9tb2R1bGUoY29uc3QgY2hhciAqbmFtZSkKIHsKQEAgLTQwNzMsMTIgKzQxNDMsMTIgQEAKICAqIENsZWFyIG1vZHVsZSBtYXAsIHRyZWUgbm9kZXMsIHRleHR1YWwgY29udmVudGlvbiB0YWJsZS4KICAqLwogdm9pZAotdW5sb2FkX2FsbF9taWJzKCkKK3VubG9hZF9hbGxfbWlicyh2b2lkKQogewogICAgIHN0cnVjdCBtb2R1bGUgICptcDsKICAgICBzdHJ1Y3QgbW9kdWxlX2NvbXBhdGFiaWxpdHkgKm1jcDsKICAgICBzdHJ1Y3QgdGMgICAgICAqcHRjOwotICAgIGludCAgICAgICAgICAgICBpOworICAgIHVuc2lnbmVkIGludCAgICBpOwogCiAgICAgZm9yIChtY3AgPSBtb2R1bGVfbWFwX2hlYWQ7IG1jcDsgbWNwID0gbW9kdWxlX21hcF9oZWFkKSB7CiAgICAgICAgIGlmIChtY3AgPT0gbW9kdWxlX21hcCkKQEAgLTQwOTMsNyArNDE2Myw3IEBACiAgICAgZm9yIChtcCA9IG1vZHVsZV9oZWFkOyBtcDsgbXAgPSBtb2R1bGVfaGVhZCkgewogICAgICAgICBzdHJ1Y3QgbW9kdWxlX2ltcG9ydCAqbWkgPSBtcC0+aW1wb3J0czsKICAgICAgICAgaWYgKG1pKSB7Ci0gICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbXAtPm5vX2ltcG9ydHM7ICsraSkgeworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8ICh1bnNpZ25lZCBpbnQpbXAtPm5vX2ltcG9ydHM7ICsraSkgewogICAgICAgICAgICAgICAgIFNOTVBfRlJFRSgobWkgKyBpKS0+bGFiZWwpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbXAtPm5vX2ltcG9ydHMgPSAwOwpAQCAtNDE5Miw3ICs0MjYyLDcgQEAKIAogCiBzdGF0aWMgdm9pZAotc2Nhbl9vYmpsaXN0KHN0cnVjdCBub2RlICpyb290LCBzdHJ1Y3Qgb2JqZ3JvdXAgKmxpc3QsIGNvbnN0IGNoYXIgKmVycm9yKQorc2Nhbl9vYmpsaXN0KHN0cnVjdCBub2RlICpyb290LCBzdHJ1Y3QgbW9kdWxlICptcCwgc3RydWN0IG9iamdyb3VwICpsaXN0LCBjb25zdCBjaGFyICplcnJvcikKIHsKICAgICBpbnQgICAgICAgICAgICAgb0xpbmUgPSBtaWJMaW5lOwogCkBAIC00MjA3LDggKzQyNzcsMTYgQEAKICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgaWYgKCFucCkgewotICAgICAgICAgICAgbWliTGluZSA9IGdwLT5saW5lOwotICAgICAgICAgICAgcHJpbnRfZXJyb3IoZXJyb3IsIGdwLT5uYW1lLCBRVU9URVNUUklORyk7CisJICAgIGludCBpOworCSAgICBzdHJ1Y3QgbW9kdWxlX2ltcG9ydCAqbWlwOworCSAgICAvKiBpZiBub3QgbG9jYWwsIGNoZWNrIGlmIGl0IHdhcyBJTVBPUlRlZCAqLworCSAgICBmb3IgKGkgPSAwLCBtaXAgPSBtcC0+aW1wb3J0czsgaSA8IG1wLT5ub19pbXBvcnRzOyBpKyssIG1pcCsrKQorCQlpZiAoc3RyY21wKG1pcC0+bGFiZWwsIGdwLT5uYW1lKSA9PSAwKQorCQkgICAgYnJlYWs7CisJICAgIGlmIChpID09IG1wLT5ub19pbXBvcnRzKSB7CisJCW1pYkxpbmUgPSBncC0+bGluZTsKKwkJcHJpbnRfZXJyb3IoZXJyb3IsIGdwLT5uYW1lLCBRVU9URVNUUklORyk7CisJICAgIH0KICAgICAgICAgfQogICAgICAgICBmcmVlKGdwLT5uYW1lKTsKICAgICAgICAgZnJlZShncCk7CkBAIC00MjIzLDYgKzQzMDEsOSBAQAogc3RhdGljIHN0cnVjdCBub2RlICoKIHBhcnNlKEZJTEUgKiBmcCwgc3RydWN0IG5vZGUgKnJvb3QpCiB7CisjaWZkZWYgVEVTVAorICAgIGV4dGVybiB2b2lkICAgICB4bWFsbG9jX3N0YXRzKEZJTEUgKik7CisjZW5kaWYKICAgICBjaGFyICAgICAgICAgICAgdG9rZW5bTUFYVE9LRU5dOwogICAgIGNoYXIgICAgICAgICAgICBuYW1lW01BWFRPS0VOKzFdOwogICAgIGludCAgICAgICAgICAgICB0eXBlID0gTEFCRUw7CkBAIC00MjM5LDcgKzQzMjAsNyBAQAogCiAgICAgaWYgKGxhc3RfZXJyX21vZHVsZSkKICAgICAgICAgZnJlZShsYXN0X2Vycl9tb2R1bGUpOwotICAgIGxhc3RfZXJyX21vZHVsZSA9IDA7CisgICAgbGFzdF9lcnJfbW9kdWxlID0gTlVMTDsKIAogICAgIG5wID0gcm9vdDsKICAgICBpZiAobnAgIT0gTlVMTCkgewpAQCAtNDI2MCw2ICs0MzQxLDcgQEAKICAgICAgICAgY2FzZSBFTkQ6CiAgICAgICAgICAgICBpZiAoc3RhdGUgIT0gSU5fTUlCKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkVycm9yLCBFTkQgYmVmb3JlIHN0YXJ0IG9mIE1JQiIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHN0cnVjdCBtb2R1bGUgICptcDsKQEAgLTQyNjcsMTUgKzQzNDksMTUgQEAKICAgICAgICAgICAgICAgICBwcmludGYoIlxuTm9kZXMgZm9yIE1vZHVsZSAlczpcbiIsIG5hbWUpOwogICAgICAgICAgICAgICAgIHByaW50X25vZGVzKHN0ZG91dCwgcm9vdCk7CiAjZW5kaWYKLSAgICAgICAgICAgICAgICBzY2FuX29iamxpc3Qocm9vdCwgb2JqZ3JvdXBzLCAiVW5kZWZpbmVkIE9CSkVDVC1HUk9VUCIpOwotICAgICAgICAgICAgICAgIHNjYW5fb2JqbGlzdChyb290LCBvYmplY3RzLCAiVW5kZWZpbmVkIE9CSkVDVCIpOwotICAgICAgICAgICAgICAgIHNjYW5fb2JqbGlzdChyb290LCBub3RpZnMsICJVbmRlZmluZWQgTk9USUZJQ0FUSU9OIik7Ci0gICAgICAgICAgICAgICAgb2JqZ3JvdXBzID0gb2xkZ3JvdXBzOwotICAgICAgICAgICAgICAgIG9iamVjdHMgPSBvbGRvYmplY3RzOwotICAgICAgICAgICAgICAgIG5vdGlmcyA9IG9sZG5vdGlmczsKICAgICAgICAgICAgICAgICBmb3IgKG1wID0gbW9kdWxlX2hlYWQ7IG1wOyBtcCA9IG1wLT5uZXh0KQogICAgICAgICAgICAgICAgICAgICBpZiAobXAtPm1vZGlkID09IGN1cnJlbnRfbW9kdWxlKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgc2Nhbl9vYmpsaXN0KHJvb3QsIG1wLCBvYmpncm91cHMsICJVbmRlZmluZWQgT0JKRUNULUdST1VQIik7CisgICAgICAgICAgICAgICAgc2Nhbl9vYmpsaXN0KHJvb3QsIG1wLCBvYmplY3RzLCAiVW5kZWZpbmVkIE9CSkVDVCIpOworICAgICAgICAgICAgICAgIHNjYW5fb2JqbGlzdChyb290LCBtcCwgbm90aWZzLCAiVW5kZWZpbmVkIE5PVElGSUNBVElPTiIpOworICAgICAgICAgICAgICAgIG9iamdyb3VwcyA9IG9sZGdyb3VwczsKKyAgICAgICAgICAgICAgICBvYmplY3RzID0gb2xkb2JqZWN0czsKKyAgICAgICAgICAgICAgICBub3RpZnMgPSBvbGRub3RpZnM7CiAgICAgICAgICAgICAgICAgZG9fbGlua3VwKG1wLCByb290KTsKICAgICAgICAgICAgICAgICBucCA9IHJvb3QgPSBOVUxMOwogICAgICAgICAgICAgfQpAQCAtNDI4Myw3ICs0MzY1LDcgQEAKICNpZmRlZiBURVNUCiAgICAgICAgICAgICBpZiAobmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJICAgTkVUU05NUF9EU19MSUJfTUlCX1dBUk5JTkdTKSkgewotICAgICAgICAgICAgICAgIHhtYWxsb2Nfc3RhdHMoc3RkZXJyKTsKKyAgICAgICAgICAgICAgICAvKiB4bWFsbG9jX3N0YXRzKHN0ZGVycik7ICovCiAJICAgIH0KICNlbmRpZgogICAgICAgICAgICAgY29udGludWU7CkBAIC00MzIzLDYgKzQ0MDUsNyBAQAogICAgICAgICAgICAgICAgIG5ucCA9IHBhcnNlX21hY3JvKGZwLCBuYW1lKTsKICAgICAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBNQUNSTyIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAgICAgKiByZXR1cm4gTlVMTDsKICAgICAgICAgICAgICAgICAgICAgICovCkBAIC00MzQ2LDYgKzQ0MjksNyBAQAogICAgICAgICAgICAgICAgIHR5cGUgPSBnZXRfdG9rZW4oZnAsIHRva2VuLCBNQVhUT0tFTik7CiAgICAgICAgICAgICBpZiAodHlwZSA9PSBFTkRPRkZJTEUpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiRXhwZWN0ZWQgXCJ9XCIiLCB0b2tlbiwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHR5cGUgPSBnZXRfdG9rZW4oZnAsIHRva2VuLCBNQVhUT0tFTik7CkBAIC00MzU1LDYgKzQ0MzksNyBAQAogICAgICAgICBjYXNlIERFRklOSVRJT05TOgogICAgICAgICAgICAgaWYgKHN0YXRlICE9IEJFVFdFRU5fTUlCUykgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJFcnJvciwgbmVzdGVkIE1JQlMiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc3RhdGUgPSBJTl9NSUI7CkBAIC00Mzc5LDYgKzQ0NjQsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2Vfb2JqZWN0dHlwZShmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE9CSkVDVC1UWVBFIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDM4Niw2ICs0NDcyLDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX29iamVjdGdyb3VwKGZwLCBuYW1lLCBPQkpFQ1RTLCAmb2JqZWN0cyk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE9CSkVDVC1HUk9VUCIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQzOTMsNiArNDQ4MCw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9vYmplY3Rncm91cChmcCwgbmFtZSwgTk9USUZJQ0FUSU9OUywgJm5vdGlmcyk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE5PVElGSUNBVElPTi1HUk9VUCIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MDAsNiArNDQ4OCw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV90cmFwRGVmaW5pdGlvbihmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIFRSQVAtVFlQRSIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MDcsNiArNDQ5Niw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9ub3RpZmljYXRpb25EZWZpbml0aW9uKGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgTk9USUZJQ0FUSU9OLVRZUEUiLCBOVUxMLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkBAIC00NDE0LDYgKzQ1MDQsNyBAQAogICAgICAgICAgICAgbm5wID0gcGFyc2VfY29tcGxpYW5jZShmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE1PRFVMRS1DT01QTElBTkNFIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQyMSw2ICs0NTEyLDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX2NhcGFiaWxpdGllcyhmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIEFHRU5ULUNBUEFCSUxJVElFUyIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0MjgsNiArNDUyMCw3IEBACiAgICAgICAgICAgICBubnAgPSBwYXJzZV9tYWNybyhmcCwgbmFtZSk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE1BQ1JPIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIHJldHVybiBOVUxMOwogICAgICAgICAgICAgICAgICAqLwpAQCAtNDQzOSw2ICs0NTMyLDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX21vZHVsZUlkZW50aXR5KGZwLCBuYW1lKTsKICAgICAgICAgICAgIGlmIChubnAgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgcGFyc2Ugb2YgTU9EVUxFLUlERU5USVRZIiwgTlVMTCwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDQ0Niw2ICs0NTQwLDcgQEAKICAgICAgICAgICAgIG5ucCA9IHBhcnNlX29iamVjdGdyb3VwKGZwLCBuYW1lLCBPQkpFQ1RTLCAmb2JqZWN0cyk7CiAgICAgICAgICAgICBpZiAobm5wID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiQmFkIHBhcnNlIG9mIE9CSkVDVC1JREVOVElUWSIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NTMsMTYgKzQ1NDgsMTkgQEAKICAgICAgICAgICAgIHR5cGUgPSBnZXRfdG9rZW4oZnAsIHRva2VuLCBNQVhUT0tFTik7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBJREVOVElGSUVSKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkV4cGVjdGVkIElERU5USUZJRVIiLCB0b2tlbiwgdHlwZSk7CisgICAgICAgICAgICAgICAgZ01pYkVycm9yID0gTU9EVUxFX1NZTlRBWF9FUlJPUjsKICAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHR5cGUgPSBnZXRfdG9rZW4oZnAsIHRva2VuLCBNQVhUT0tFTik7CiAgICAgICAgICAgICBpZiAodHlwZSAhPSBFUVVBTFMpIHsKICAgICAgICAgICAgICAgICBwcmludF9lcnJvcigiRXhwZWN0ZWQgXCI6Oj1cIiIsIHRva2VuLCB0eXBlKTsKKyAgICAgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgbm5wID0gcGFyc2Vfb2JqZWN0aWQoZnAsIG5hbWUpOwogICAgICAgICAgICAgaWYgKG5ucCA9PSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgcHJpbnRfZXJyb3IoIkJhZCBwYXJzZSBvZiBPQkpFQ1QgSURFTlRJRklFUiIsIE5VTEwsIHR5cGUpOworICAgICAgICAgICAgICAgIGdNaWJFcnJvciA9IE1PRFVMRV9TWU5UQVhfRVJST1I7CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ0NzQsNiArNDU3Miw3IEBACiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHByaW50X2Vycm9yKCJCYWQgb3BlcmF0b3IiLCB0b2tlbiwgdHlwZSk7CisgICAgICAgICAgICBnTWliRXJyb3IgPSBNT0RVTEVfU1lOVEFYX0VSUk9SOwogICAgICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgICAgIH0KICAgICAgICAgaWYgKG5ucCkgewpAQCAtNDUwNyw2ICs0NjA2LDIxIEBACiAgICAgcmV0dXJuIDA7CiB9CiAKKy8qKgorICogUmVhZCBhIHNpbmdsZSBjaGFyYWN0ZXIgZnJvbSBhIGZpbGUuIEFzc3VtZXMgdGhhdCB0aGUgY2FsbGVyIGhhcyBpbnZva2VkCisgKiBmbG9ja2ZpbGUoKS4gVXNlcyBmZ2V0Y191bmxvY2tlZCgpIGluc3RlYWQgb2YgZ2V0YygpIHNpbmNlIHRoZSBmb3JtZXIgaXMKKyAqIGltcGxlbWVudGVkIGFzIGFuIGlubGluZSBmdW5jdGlvbiBpbiBnbGliYy4gU2VlIGFsc28gYnVnIDM0NDcxOTYKKyAqIChodHRwOi8vc291cmNlZm9yZ2UubmV0L3RyYWNrZXIvP2Z1bmM9ZGV0YWlsJmFpZD0zNDQ3MTk2Jmdyb3VwX2lkPTEyNjk0JmF0aWQ9MTEyNjk0KS4KKyAqLworc3RhdGljIGludCBuZXRzbm1wX2dldGMoRklMRSAqc3RyZWFtKQoreworI2lmZGVmIEhBVkVfRkdFVENfVU5MT0NLRUQKKyAgICByZXR1cm4gZmdldGNfdW5sb2NrZWQoc3RyZWFtKTsKKyNlbHNlCisgICAgcmV0dXJuIGdldGMoc3RyZWFtKTsKKyNlbmRpZgorfQorCiAvKgogICogUGFyc2VzIGEgdG9rZW4gZnJvbSB0aGUgZmlsZS4gIFRoZSB0eXBlIG9mIHRoZSB0b2tlbiBwYXJzZWQgaXMgcmV0dXJuZWQsCiAgKiBhbmQgdGhlIHRleHQgaXMgcGxhY2VkIGluIHRoZSBzdHJpbmcgcG9pbnRlZCB0byBieSB0b2tlbi4KQEAgLTQ1MjAsMTIgKzQ2MzQsMTMgQEAKICAgICByZWdpc3RlciBpbnQgICAgaGFzaCA9IDA7CiAgICAgcmVnaXN0ZXIgc3RydWN0IHRvayAqdHA7CiAgICAgaW50ICAgICAgICAgICAgIHRvb19sb25nID0gMDsKKyAgICBlbnVtIHsgYmRpZ2l0cywgeGRpZ2l0cywgb3RoZXIgfSBzZWVuU3ltYm9sczsKIAogICAgIC8qCiAgICAgICogc2tpcCBhbGwgd2hpdGUgc3BhY2UgCiAgICAgICovCiAgICAgZG8gewotICAgICAgICBjaCA9IGdldGMoZnApOworICAgICAgICBjaCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgIGlmIChjaCA9PSAnXG4nKQogICAgICAgICAgICAgbWliTGluZSsrOwogICAgIH0KQEAgLTQ1MzgsMzkgKzQ2NTMsNjAgQEAKICAgICBjYXNlICciJzoKICAgICAgICAgcmV0dXJuIHBhcnNlUXVvdGVTdHJpbmcoZnAsIHRva2VuLCBtYXh0bGVuKTsKICAgICBjYXNlICdcJyc6ICAgICAgICAgICAgICAgICAvKiBiaW5hcnkgb3IgaGV4IGNvbnN0YW50ICovCi0gICAgICAgIHdoaWxlICgoY2ggPSBnZXRjKGZwKSkgIT0gRU9GICYmIGNoICE9ICdcJycKLSAgICAgICAgICAgICAgICYmIGNwIC0gdG9rZW4gPCBtYXh0bGVuIC0gMikKLSAgICAgICAgICAgICpjcCsrID0gY2g7CisgICAgICAgIHNlZW5TeW1ib2xzID0gYmRpZ2l0czsKKyAgICAgICAgd2hpbGUgKChjaCA9IG5ldHNubXBfZ2V0YyhmcCkpICE9IEVPRiAmJiBjaCAhPSAnXCcnKSB7CisgICAgICAgICAgICBzd2l0Y2ggKHNlZW5TeW1ib2xzKSB7CisgICAgICAgICAgICBjYXNlIGJkaWdpdHM6CisgICAgICAgICAgICAgICAgaWYgKGNoID09ICcwJyB8fCBjaCA9PSAnMScpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIHNlZW5TeW1ib2xzID0geGRpZ2l0czsKKyAgICAgICAgICAgIGNhc2UgeGRpZ2l0czoKKyAgICAgICAgICAgICAgICBpZiAoaXN4ZGlnaXQoY2gpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBzZWVuU3ltYm9scyA9IG90aGVyOworICAgICAgICAgICAgY2FzZSBvdGhlcjoKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChjcCAtIHRva2VuIDwgbWF4dGxlbiAtIDIpCisgICAgICAgICAgICAgICAgKmNwKysgPSBjaDsKKyAgICAgICAgfQogICAgICAgICBpZiAoY2ggPT0gJ1wnJykgewogICAgICAgICAgICAgdW5zaWduZWQgbG9uZyAgIHZhbCA9IDA7Ci0gICAgICAgICAgICAqY3ArKyA9ICdcJyc7Ci0gICAgICAgICAgICAqY3ArKyA9IGNoID0gZ2V0YyhmcCk7Ci0gICAgICAgICAgICAqY3AgPSAwOwotICAgICAgICAgICAgY3AgPSB0b2tlbiArIDE7CisgICAgICAgICAgICBjaGFyICAgICAgICAgICAqcnVuID0gdG9rZW4gKyAxOworICAgICAgICAgICAgY2ggPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICAgICAgc3dpdGNoIChjaCkgewogICAgICAgICAgICAgY2FzZSBFT0Y6CiAgICAgICAgICAgICAgICAgcmV0dXJuIEVORE9GRklMRTsKICAgICAgICAgICAgIGNhc2UgJ2InOgogICAgICAgICAgICAgY2FzZSAnQic6Ci0gICAgICAgICAgICAgICAgd2hpbGUgKChjaCA9ICpjcCsrKSAhPSAnXCcnKQotICAgICAgICAgICAgICAgICAgICBpZiAoY2ggIT0gJzAnICYmIGNoICE9ICcxJykKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKLSAgICAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdmFsID0gdmFsICogMiArIGNoIC0gJzAnOworICAgICAgICAgICAgICAgIGlmIChzZWVuU3ltYm9scyA+IGJkaWdpdHMpIHsKKyAgICAgICAgICAgICAgICAgICAgKmNwKysgPSAnXCcnOworICAgICAgICAgICAgICAgICAgICAqY3AgPSAwOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gTEFCRUw7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHdoaWxlIChydW4gIT0gY3ApCisgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCAqIDIgKyAqcnVuKysgLSAnMCc7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlICdoJzoKICAgICAgICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgICAgIHdoaWxlICgoY2ggPSAqY3ArKykgIT0gJ1wnJykKKyAgICAgICAgICAgICAgICBpZiAoc2VlblN5bWJvbHMgPiB4ZGlnaXRzKSB7CisgICAgICAgICAgICAgICAgICAgICpjcCsrID0gJ1wnJzsKKyAgICAgICAgICAgICAgICAgICAgKmNwID0gMDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIExBQkVMOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB3aGlsZSAocnVuICE9IGNwKSB7CisgICAgICAgICAgICAgICAgICAgIGNoID0gKnJ1bisrOwogICAgICAgICAgICAgICAgICAgICBpZiAoJzAnIDw9IGNoICYmIGNoIDw9ICc5JykKICAgICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHZhbCAqIDE2ICsgY2ggLSAnMCc7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCdhJyA8PSBjaCAmJiBjaCA8PSAnZicpCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgKiAxNiArIGNoIC0gJ2EnICsgMTA7CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKCdBJyA8PSBjaCAmJiBjaCA8PSAnRicpCiAgICAgICAgICAgICAgICAgICAgICAgICB2YWwgPSB2YWwgKiAxNiArIGNoIC0gJ0EnICsgMTA7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICpjcCsrID0gJ1wnJzsKKyAgICAgICAgICAgICAgICAqY3AgPSAwOwogICAgICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHNwcmludGYodG9rZW4sICIlbGQiLCB2YWwpOwpAQCAtNDU5NiwyNSArNDczMiwyNSBAQAogICAgIGNhc2UgJ3wnOgogICAgICAgICByZXR1cm4gQkFSOwogICAgIGNhc2UgJy4nOgotICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICBpZiAoY2hfbmV4dCA9PSAnLicpCiAgICAgICAgICAgICByZXR1cm4gUkFOR0U7CiAgICAgICAgIHVuZ2V0YyhjaF9uZXh0LCBmcCk7CiAgICAgICAgIHJldHVybiBMQUJFTDsKICAgICBjYXNlICc6JzoKLSAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgaWYgKGNoX25leHQgIT0gJzonKSB7CiAgICAgICAgICAgICB1bmdldGMoY2hfbmV4dCwgZnApOwogICAgICAgICAgICAgcmV0dXJuIExBQkVMOwogICAgICAgICB9Ci0gICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCk7CiAgICAgICAgIGlmIChjaF9uZXh0ICE9ICc9JykgewogICAgICAgICAgICAgdW5nZXRjKGNoX25leHQsIGZwKTsKICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gRVFVQUxTOwogICAgIGNhc2UgJy0nOgotICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICBpZiAoY2hfbmV4dCA9PSAnLScpIHsKICAgICAgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJICAgICAgIE5FVFNOTVBfRFNfTElCX01JQl9DT01NRU5UX1RFUk0pKSB7CkBAIC00NjIyLDcgKzQ3NTgsNyBAQAogICAgICAgICAgICAgICAgICAqIFRyZWF0IHRoZSByZXN0IG9mIHRoaXMgbGluZSBhcyBhIGNvbW1lbnQuIAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHdoaWxlICgoY2hfbmV4dCAhPSBFT0YpICYmIChjaF9uZXh0ICE9ICdcbicpKQotICAgICAgICAgICAgICAgICAgICBjaF9uZXh0ID0gZ2V0YyhmcCk7CisgICAgICAgICAgICAgICAgICAgIGNoX25leHQgPSBuZXRzbm1wX2dldGMoZnApOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIFRyZWF0IHRoZSByZXN0IG9mIHRoZSBsaW5lIG9yIHVudGlsIGFub3RoZXIgJy0tJyBhcyBhIGNvbW1lbnQgCkBAIC00NjMxLDExICs0NzY3LDExIEBACiAgICAgICAgICAgICAgICAgICogKHRoaXMgaXMgdGhlICJ0ZWNobmljYWxseSIgY29ycmVjdCB3YXkgdG8gcGFyc2UgY29tbWVudHMpIAogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGNoID0gJyAnOwotICAgICAgICAgICAgICAgIGNoX25leHQgPSBnZXRjKGZwKTsKKyAgICAgICAgICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgICAgICAgICB3aGlsZSAoY2hfbmV4dCAhPSBFT0YgJiYgY2hfbmV4dCAhPSAnXG4nICYmCiAgICAgICAgICAgICAgICAgICAgICAgIChjaCAhPSAnLScgfHwgY2hfbmV4dCAhPSAnLScpKSB7CiAgICAgICAgICAgICAgICAgICAgIGNoID0gY2hfbmV4dDsKLSAgICAgICAgICAgICAgICAgICAgY2hfbmV4dCA9IGdldGMoZnApOworICAgICAgICAgICAgICAgICAgICBjaF9uZXh0ID0gbmV0c25tcF9nZXRjKGZwKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY2hfbmV4dCA9PSBFT0YpCkBAIC00NjU2LDcgKzQ3OTIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIExBQkVMOwogICAgICAgICBoYXNoICs9IHRvbG93ZXIoY2gpOwogICAgICAgbW9yZToKLSAgICAgICAgd2hpbGUgKGlzX2xhYmVsY2hhcihjaF9uZXh0ID0gZ2V0YyhmcCkpKSB7CisgICAgICAgIHdoaWxlIChpc19sYWJlbGNoYXIoY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCkpKSB7CiAgICAgICAgICAgICBoYXNoICs9IHRvbG93ZXIoY2hfbmV4dCk7CiAgICAgICAgICAgICBpZiAoY3AgLSB0b2tlbiA8IG1heHRsZW4gLSAxKQogICAgICAgICAgICAgICAgICpjcCsrID0gY2hfbmV4dDsKQEAgLTQ2NzUsNyArNDgxMSw3IEBACiAgICAgICAgIGlmICh0cCkgewogICAgICAgICAgICAgaWYgKHRwLT50b2tlbiAhPSBDT05USU5VRSkKICAgICAgICAgICAgICAgICByZXR1cm4gKHRwLT50b2tlbik7Ci0gICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgoY2hfbmV4dCA9IGdldGMoZnApKSkpCisgICAgICAgICAgICB3aGlsZSAoaXNzcGFjZSgoY2hfbmV4dCA9IG5ldHNubXBfZ2V0YyhmcCkpKSkKICAgICAgICAgICAgICAgICBpZiAoY2hfbmV4dCA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICBtaWJMaW5lKys7CiAgICAgICAgICAgICBpZiAoY2hfbmV4dCA9PSBFT0YpCkBAIC00Njg2LDkgKzQ4MjIsOSBAQAogICAgICAgICAgICAgICAgIGdvdG8gbW9yZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICBpZiAodG9rZW5bMF0gPT0gJy0nIHx8IGlzZGlnaXQodG9rZW5bMF0pKSB7CisgICAgICAgIGlmICh0b2tlblswXSA9PSAnLScgfHwgaXNkaWdpdCgodW5zaWduZWQgY2hhcikodG9rZW5bMF0pKSkgewogICAgICAgICAgICAgZm9yIChjcCA9IHRva2VuICsgMTsgKmNwOyBjcCsrKQotICAgICAgICAgICAgICAgIGlmICghaXNkaWdpdCgqY3ApKQorICAgICAgICAgICAgICAgIGlmICghaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKmNwKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBMQUJFTDsKICAgICAgICAgICAgIHJldHVybiBOVU1CRVI7CiAgICAgICAgIH0KQEAgLTQ2OTYsMTEgKzQ4MzIsMTQgQEAKICAgICB9CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihwYXJzZV9nZXRfdG9rZW4sIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0dFVF9UT0tFTgogaW50CiBzbm1wX2dldF90b2tlbihGSUxFICogZnAsIGNoYXIgKnRva2VuLCBpbnQgbWF4dGxlbikKIHsKICAgICByZXR1cm4gZ2V0X3Rva2VuKGZwLCB0b2tlbiwgbWF4dGxlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9QQVJTRV9HRVRfVE9LRU4gKi8KIAogaW50CiBhZGRfbWliZmlsZShjb25zdCBjaGFyKiB0bXBzdHIsIGNvbnN0IGNoYXIqIGRfbmFtZSwgRklMRSAqaXAgKQpAQCAtNDc1NSwyNiArNDg5NCwyNCBAQAogICAgIGludCAgICAgICAgICAgICBjb3VudCA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIGZuYW1lX2xlbiA9IDA7CiAjaWYgIShkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKGN5Z3dpbikpCi0gICAgY2hhciAgICAgICAgICAgIHRva2VuW01BWFRPS0VOXTsKKyAgICBjaGFyICAgICAgICAgICAqdG9rZW47CiAgICAgY2hhciBzcGFjZTsKICAgICBjaGFyIG5ld2xpbmU7CiAgICAgc3RydWN0IHN0YXQgICAgIGRpcl9zdGF0LCBpZHhfc3RhdDsKICAgICBjaGFyICAgICAgICAgICAgdG1wc3RyMVszMDBdOwotICAgIGludCBlbXB0eSA9IDE7CiAjZW5kaWYKIAogICAgIERFQlVHTVNHVEwoKCJwYXJzZS1taWJzIiwgIlNjYW5uaW5nIGRpcmVjdG9yeSAlc1xuIiwgZGlybmFtZSkpOwogI2lmICEoZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChjeWd3aW4pKQotICAgIHNucHJpbnRmKHRva2VuLCBzaXplb2YodG9rZW4pLCAiJXMvJXMiLCBkaXJuYW1lLCAiLmluZGV4Iik7Ci0gICAgdG9rZW5bIHNpemVvZih0b2tlbiktMSBdID0gMDsKLSAgICBpZiAoc3RhdCh0b2tlbiwgJmlkeF9zdGF0KSA9PSAwICYmIHN0YXQoZGlybmFtZSwgJmRpcl9zdGF0KSA9PSAwKSB7CisgICAgdG9rZW4gPSBuZXRzbm1wX21pYmluZGV4X2xvb2t1cCggZGlybmFtZSApOworICAgIGlmICh0b2tlbiAmJiBzdGF0KHRva2VuLCAmaWR4X3N0YXQpID09IDAgJiYgc3RhdChkaXJuYW1lLCAmZGlyX3N0YXQpID09IDApIHsKICAgICAgICAgaWYgKGRpcl9zdGF0LnN0X210aW1lIDwgaWR4X3N0YXQuc3RfbXRpbWUpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwYXJzZS1taWJzIiwgIlRoZSBpbmRleCBpcyBnb29kXG4iKSk7CiAgICAgICAgICAgICBpZiAoKGlwID0gZm9wZW4odG9rZW4sICJyIikpICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBmZ2V0cyh0bXBzdHIsIHNpemVvZih0bXBzdHIpLCBpcCk7IC8qIFNraXAgZGlyIGxpbmUgKi8KICAgICAgICAgICAgICAgICB3aGlsZSAoZnNjYW5mKGlwLCAiJTEyN3MlYyUyOTlzJWMiLCB0b2tlbiwgJnNwYWNlLCB0bXBzdHIsCiAJCSAgICAmbmV3bGluZSkgPT0gNCkgewogCi0gICAgICAgICAgICAgICAgICAgIGVtcHR5ID0gMDsKIAkJICAgIC8qCiAJCSAgICAgKiBJZiBhbiBvdmVyZmxvdyBvZiB0aGUgdG9rZW4gb3IgdG1wc3RyIGJ1ZmZlcnMgaGFzIGJlZW4KIAkJICAgICAqIGZvdW5kIGxvZyBhIG1lc3NhZ2UgYW5kIGJyZWFrIG91dCBvZiB0aGUgd2hpbGUgbG9vcCwKQEAgLTQ3OTQsMTAgKzQ5MzEsNyBAQAogICAgICAgICAgICAgICAgICAgICBjb3VudCsrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmY2xvc2UoaXApOwotICAgICAgICAgICAgICAgIGlmICggIWVtcHR5ICkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm4gY291bnQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwYXJzZS1taWJzIiwgIkVtcHR5IE1JQiBpbmRleFxuIikpOworICAgICAgICAgICAgICAgIHJldHVybiBjb3VudDsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJwYXJzZS1taWJzIiwgIkNhbid0IHJlYWQgaW5kZXhcbiIpKTsKICAgICAgICAgfSBlbHNlCkBAIC00ODA3LDkgKzQ5NDEsNyBAQAogI2VuZGlmCiAKICAgICBpZiAoKGRpciA9IG9wZW5kaXIoZGlybmFtZSkpKSB7Ci0gICAgICAgIHNucHJpbnRmKHRtcHN0ciwgc2l6ZW9mKHRtcHN0ciksICIlcy8uaW5kZXgiLCBkaXJuYW1lKTsKLSAgICAgICAgdG1wc3RyWyBzaXplb2YodG1wc3RyKS0xIF0gPSAwOwotICAgICAgICBpcCA9IGZvcGVuKHRtcHN0ciwgInciKTsKKyAgICAgICAgaXAgPSBuZXRzbm1wX21pYmluZGV4X25ldyggZGlybmFtZSApOwogICAgICAgICB3aGlsZSAoKGZpbGUgPSByZWFkZGlyKGRpcikpKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogT25seSBwYXJzZSBmaWxlIG5hbWVzIHRoYXQgZG9uJ3QgYmVnaW4gd2l0aCBhICcuJyAKQEAgLTQ4ODEsNyArNTAxMyw3IEBACiAKIAogc3RydWN0IHRyZWUgICAgKgotcmVhZF9hbGxfbWlicygpCityZWFkX2FsbF9taWJzKHZvaWQpCiB7CiAgICAgc3RydWN0IG1vZHVsZSAgKm1wOwogCkBAIC00ODkwLDEyICs1MDIyLDI5IEBACiAgICAgICAgICAgICBuZXRzbm1wX3JlYWRfbW9kdWxlKG1wLT5uYW1lKTsKICAgICBhZG9wdF9vcnBoYW5zKCk7CiAKKyAgICAvKiBJZiBlbnRlcmVkIHRoZSBzeW50YXggZXJyb3IgbG9vcCBpbiAicmVhZF9tb2R1bGUoKSIgKi8KKyAgICBpZiAoZ0xvb3AgPT0gMSkgeworICAgICAgICBnTG9vcCA9IDA7CisgICAgICAgIGlmIChncE1pYkVycm9yU3RyaW5nICE9IE5VTEwpIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRShncE1pYkVycm9yU3RyaW5nKTsKKyAgICAgICAgfQorICAgICAgICBncE1pYkVycm9yU3RyaW5nID0gKGNoYXIgKikgY2FsbG9jKDEsIE1BWFFVT1RFU1RSKTsKKyAgICAgICAgaWYgKGdwTWliRXJyb3JTdHJpbmcgPT0gTlVMTCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0NSSVQsICJmYWlsZWQgdG8gYWxsb2NhdGVkIG1lbW9yeSBmb3IgZ3BNaWJFcnJvclN0cmluZ1xuIik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbnByaW50ZihncE1pYkVycm9yU3RyaW5nLCBzaXplb2YoZ3BNaWJFcnJvclN0cmluZyktMSwgIkVycm9yIGluIHBhcnNpbmcgTUlCIG1vZHVsZShzKTogJXMgISBVbmFibGUgdG8gbG9hZCBjb3JyZXNwb25kaW5nIE1JQihzKSIsIGdNaWJOYW1lcyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBDYWxsZXIncyByZXNwb25zaWJpbGl0eSB0byBmcmVlIHRoaXMgbWVtb3J5ICovCisgICAgdHJlZV9oZWFkLT5wYXJzZUVycm9yU3RyaW5nID0gZ3BNaWJFcnJvclN0cmluZzsKKwkKICAgICByZXR1cm4gdHJlZV9oZWFkOwogfQogCiAKICNpZmRlZiBURVNUCi1tYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKQogewogICAgIGludCAgICAgICAgICAgICBpOwogICAgIHN0cnVjdCB0cmVlICAgICp0cDsKQEAgLTQ5MjUsNyArNTA3NCw3IEBACiAgICAgaW50ICAgICAgICAgICAgIHRvb19sb25nID0gMDsKICAgICBjaGFyICAgICAgICAgICAqdG9rZW5fc3RhcnQgPSB0b2tlbjsKIAotICAgIGZvciAoY2ggPSBnZXRjKGZwKTsgY2ggIT0gRU9GOyBjaCA9IGdldGMoZnApKSB7CisgICAgZm9yIChjaCA9IG5ldHNubXBfZ2V0YyhmcCk7IGNoICE9IEVPRjsgY2ggPSBuZXRzbm1wX2dldGMoZnApKSB7CiAgICAgICAgIGlmIChjaCA9PSAnXHInKQogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIGlmIChjaCA9PSAnXG4nKSB7CkBAIC01MTg1LDggKzUzMzQsOCBAQAogICAgIHJldHVybiAoZmluZF90cmVlX25vZGUobmFtZSwgLTEpKTsKIH0KIAotLyogRmluZCBub2RlIGluIHNwZWNpZmljIE1JQiBtb2R1bGUKLSAgIFVzZWQgYnkgUGVybCBtb2R1bGVzCQkqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHBhcnNlX2ZpbmRfbm9kZTIsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0ZJTkRfTk9ERTIKIHN0cnVjdCB0cmVlICAgICoKIGZpbmRfbm9kZTIoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqbW9kdWxlKQogeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTUyMDAsNyArNTM0OSwxMCBAQAogICB9CiAgIHJldHVybiAoZmluZF90cmVlX25vZGUobmFtZSwgbW9kaWQpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1BBUlNFX0ZJTkRfTk9ERTIgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfTU9EVUxFCisvKiBVc2VkIGluIHRoZSBwZXJsIG1vZHVsZSAqLwogc3RydWN0IG1vZHVsZSAgKgogZmluZF9tb2R1bGUoaW50IG1pZCkKIHsKQEAgLTUyMTAsMTAgKzUzNjIsOSBAQAogICAgICAgICBpZiAobXAtPm1vZGlkID09IG1pZCkKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBpZiAobXAgIT0gMCkKLSAgICAgICAgcmV0dXJuIG1wOwotICAgIHJldHVybiBOVUxMOworICAgIHJldHVybiBtcDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0ZJTkRfTU9EVUxFICovCiAKIAogc3RhdGljIGNoYXIgICAgIGxlYXZlX2luZGVudFsyNTZdOwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9wa2NzLmMgYi9zbm1wbGliL3BrY3MuYwppbmRleCBlZTRlZDkyLi40OGU2MDJhIDEwMDY0NAotLS0gYS9zbm1wbGliL3BrY3MuYworKysgYi9zbm1wbGliL3BrY3MuYwpAQCAtNzc0LDQgKzc3NCw2IEBACiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KKyNlbHNlCitpbnQgcGtjc191bnVzZWQ7CS8qIFN1cHByZXNzICJlbXB0eSB0cmFuc2xhdGlvbiB1bml0IiB3YXJuaW5nICovCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvcmVhZF9jb25maWcuYyBiL3NubXBsaWIvcmVhZF9jb25maWcuYwppbmRleCA3OTUwMzNiLi4zMTY3Njc0IDEwMDY0NAotLS0gYS9zbm1wbGliL3JlYWRfY29uZmlnLmMKKysrIGIvc25tcGxpYi9yZWFkX2NvbmZpZy5jCkBAIC02NSw2ICs2NSw3IEBACiAgKiAgQHsKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CkBAIC04NCwxMSArODUsNyBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC0xMDksOSArMTA2LDYgQEAKICNpZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTEyMCw2ICsxMTQsMjMgQEAKICNlbmRpZgogI2luY2x1ZGUgPGVycm5vLmg+CiAKKyNpZiBIQVZFX0RJUkVOVF9ICisjIGluY2x1ZGUgPGRpcmVudC5oPgorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgc3RybGVuKChkaXJlbnQpLT5kX25hbWUpCisjZWxzZQorIyBkZWZpbmUgZGlyZW50IGRpcmVjdAorIyBkZWZpbmUgTkFNTEVOKGRpcmVudCkgKGRpcmVudCktPmRfbmFtbGVuCisjIGlmIEhBVkVfU1lTX05ESVJfSAorIyAgaW5jbHVkZSA8c3lzL25kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9TWVNfRElSX0gKKyMgIGluY2x1ZGUgPHN5cy9kaXIuaD4KKyMgZW5kaWYKKyMgaWYgSEFWRV9ORElSX0gKKyMgIGluY2x1ZGUgPG5kaXIuaD4KKyMgZW5kaWYKKyNlbmRpZgorCiAjaWYgSEFWRV9ETUFMTE9DX0gKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKQEAgLTEzNSwxMCArMTQ2LDE3IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfY29uZmlnX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyLCByZWFkX2NvbmZpZ19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YocmVhZF9jb25maWdfcmVnaXN0ZXJfYXBwX3ByZW5ldHNubXBfbWliX2hhbmRsZXIsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHJlYWRfY29uZmlnX3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyLCBuZXRzbm1wX3VudXNlZCkKKwogc3RhdGljIGludCAgICAgIGNvbmZpZ19lcnJvcnM7CiAKIHN0cnVjdCBjb25maWdfZmlsZXMgKmNvbmZpZ19maWxlcyA9IE5VTEw7CiAKKwogc3RhdGljIHN0cnVjdCBjb25maWdfbGluZSAqCiBpbnRlcm5hbF9yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0eXBlX3BhcmFtLAogCQkJCSBjb25zdCBjaGFyICp0b2tlbiwKQEAgLTE5Miw4ICsyMTAsMTEgQEAKICAgICAgICAgfQogCiAgICAgICAgICgqY3RtcCktPmZpbGVIZWFkZXIgPSBzdHJkdXAodHlwZSk7CisgICAgICAgIERFQlVHTVNHVEwoKCI5OnJlYWRfY29uZmlnOnR5cGUiLCAibmV3IHR5cGUgJXNcbiIsIHR5cGUpKTsKICAgICB9CiAKKyAgICBERUJVR01TR1RMKCgiOTpyZWFkX2NvbmZpZzpyZWdpc3Rlcl9oYW5kbGVyIiwgInJlZ2lzdGVyaW5nICVzICVzXG4iLAorICAgICAgICAgICAgICAgIHR5cGUsIHRva2VuKSk7CiAgICAgLyoKICAgICAgKiBGaW5kIHBhcnNlciB0eXBlIGluIGN1cnJlbnQgbGlzdCAgLU9SLSAgY3JlYXRlIGEgbmV3CiAgICAgICogbGluZSBwYXJzZXIgZW50cnkuCkBAIC0yMzgsNiArMjU5LDcgQEAKIAkJCQkJICAgIGhlbHAsIFBSRU1JQl9DT05GSUcpOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9DT05GSUdfUkVHSVNURVJfQVBQX1BSRU5FVFNOTVBfTUlCX0hBTkRMRVIKIHN0cnVjdCBjb25maWdfbGluZSAqCiByZWdpc3Rlcl9hcHBfcHJlbmV0c25tcF9taWJfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNoYXIgKiksCkBAIC0yNDcsNiArMjY5LDcgQEAKICAgICByZXR1cm4gKHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIKICAgICAgICAgICAgIChOVUxMLCB0b2tlbiwgcGFyc2VyLCByZWxlYXNlciwgaGVscCkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9DT05GSUdfUkVHSVNURVJfQVBQX1BSRU5FVFNOTVBfTUlCX0hBTkRMRVIgKi8KIAogLyoqCiAgKiByZWdpc3Rlcl9jb25maWdfaGFuZGxlciByZWdpc3RlcnMgaGFuZGxlcnMgZm9yIGNlcnRhaW4gdG9rZW5zIHNwZWNpZmllZCBpbgpAQCAtMjkxLDYgKzMxNCwyMCBAQAogCQkJCQkgICAgaGVscCwgTk9STUFMX0NPTkZJRyk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9SRUFEX0NPTkZJR19SRUdJU1RFUl9DT05TVF9DT05GSUdfSEFORExFUgorc3RydWN0IGNvbmZpZ19saW5lICoKK3JlZ2lzdGVyX2NvbnN0X2NvbmZpZ19oYW5kbGVyKGNvbnN0IGNoYXIgKnR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwYXJzZXIpIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcmVsZWFzZXIpICh2b2lkKSwgY29uc3QgY2hhciAqaGVscCkKK3sKKyAgICByZXR1cm4gaW50ZXJuYWxfcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgdG9rZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKCopKGNvbnN0IGNoYXIgKiwgY2hhciAqKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VyLCByZWxlYXNlciwKKwkJCQkJICAgIGhlbHAsIE5PUk1BTF9DT05GSUcpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUkVBRF9DT05GSUdfUkVHSVNURVJfQ09OU1RfQ09ORklHX0hBTkRMRVIgKi8KKwogc3RydWN0IGNvbmZpZ19saW5lICoKIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcihjb25zdCBjaGFyICp0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqcGFyc2VyKSAoY29uc3QgY2hhciAqLCBjaGFyICopLApAQCAtMzkzLDE0ICs0MzAsMTYgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlJFR0lTVEVSX0FQUF9DT05GSUdfSEFORExFUgogdm9pZAogdW5yZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoY29uc3QgY2hhciAqdG9rZW4pCiB7CiAgICAgdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcihOVUxMLCB0b2tlbik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTlJFR0lTVEVSX0FQUF9DT05GSUdfSEFORExFUiAqLwogCiB2b2lkCi11bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMoKQordW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzKHZvaWQpCiB7CiAgICAgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCwgKnNhdmU7CiAgICAgc3RydWN0IGNvbmZpZ19saW5lICpsdG1wOwpAQCAtNDM3LDggKzQ3Niw4IEBACiB9CiAjZW5kaWYKIAotaW50ICAgICAgICAgICAgIGxpbmVjb3VudDsKLWNvbnN0IGNoYXIgICAgICpjdXJmaWxlbmFtZTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgIGxpbmVjb3VudDsKK3N0YXRpYyBjb25zdCBjaGFyICAgKmN1cmZpbGVuYW1lOwogCiBzdHJ1Y3QgY29uZmlnX2xpbmUgKgogcmVhZF9jb25maWdfZ2V0X2hhbmRsZXJzKGNvbnN0IGNoYXIgKnR5cGUpCkBAIC00NTEsMjIgKzQ5MCwyMyBAQAogICAgIHJldHVybiBOVUxMOwogfQogCi12b2lkCitpbnQKIHJlYWRfY29uZmlnX3dpdGhfdHlwZV93aGVuKGNvbnN0IGNoYXIgKmZpbGVuYW1lLCBjb25zdCBjaGFyICp0eXBlLCBpbnQgd2hlbikKIHsKICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmN0bXAgPSByZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnModHlwZSk7CiAgICAgaWYgKGN0bXApCi0gICAgICAgIHJlYWRfY29uZmlnKGZpbGVuYW1lLCBjdG1wLCB3aGVuKTsKKyAgICAgICAgcmV0dXJuIHJlYWRfY29uZmlnKGZpbGVuYW1lLCBjdG1wLCB3aGVuKTsKICAgICBlbHNlCiAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsCiAgICAgICAgICAgICAgICAgICAgICJyZWFkX2NvbmZpZzogSSBoYXZlIG5vIHJlZ2lzdHJhdGlvbnMgZm9yIHR5cGU6JXMsZmlsZTolc1xuIiwKICAgICAgICAgICAgICAgICAgICAgdHlwZSwgZmlsZW5hbWUpKTsKKyAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7ICAgICAvKiBObyBjb25maWcgZmlsZXMgcmVhZCAqLwogfQogCi12b2lkCitpbnQKIHJlYWRfY29uZmlnX3dpdGhfdHlwZShjb25zdCBjaGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdHlwZSkKIHsKLSAgICByZWFkX2NvbmZpZ193aXRoX3R5cGVfd2hlbihmaWxlbmFtZSwgdHlwZSwgRUlUSEVSX0NPTkZJRyk7CisgICAgcmV0dXJuIHJlYWRfY29uZmlnX3dpdGhfdHlwZV93aGVuKGZpbGVuYW1lLCB0eXBlLCBFSVRIRVJfQ09ORklHKTsKIH0KIAogCkBAIC00OTIsMTIgKzUzMiwxMiBAQAogcnVuX2NvbmZpZ19oYW5kbGVyKHN0cnVjdCBjb25maWdfbGluZSAqbHB0ciwKICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0ciwgaW50IHdoZW4pCiB7Ci0gICAgY2hhciAgICAgICAgICAgIHRtcGJ1ZltTVFJJTkdNQVhdOwogICAgIGNoYXIgICAgICAgICAgICpjcDsKICAgICBscHRyID0gcmVhZF9jb25maWdfZmluZF9oYW5kbGVyKGxwdHIsIHRva2VuKTsKICAgICBpZiAobHB0ciAhPSBOVUxMKSB7CiAgICAgICAgIGlmICh3aGVuID09IEVJVEhFUl9DT05GSUcgfHwgbHB0ci0+Y29uZmlnX3RpbWUgPT0gd2hlbikgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwKKyAgICAgICAgICAgIGNoYXIgdG1wYnVmWzFdOworICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOnBhcnNlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiRm91bmQgYSBwYXJzZXIuICBDYWxsaW5nIGl0OiAlcyAvICVzXG4iLCB0b2tlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHIpKTsKICAgICAgICAgICAgIC8qCkBAIC01MTIsMTcgKzU1MiwxOCBAQAogICAgICAgICAgICAgICogU3RvbXAgb24gYW55IHRyYWlsaW5nIHdoaXRlc3BhY2UKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgY3AgPSAmKGNwdHJbc3RybGVuKGNwdHIpLTFdKTsKLSAgICAgICAgICAgIHdoaWxlIChpc3NwYWNlKCpjcCkpIHsKKyAgICAgICAgICAgIHdoaWxlICgoY3AgPiBjcHRyKSAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSgqY3ApKSkgewogICAgICAgICAgICAgICAgICooY3AtLSkgPSAnXDAnOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgKCoobHB0ci0+cGFyc2VfbGluZSkpICh0b2tlbiwgY3B0cik7CiAgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgREVCVUdNU0dUTCgoIjk6cmVhZF9jb25maWc6cGFyc2VyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICIlcyBoYW5kbGVyIG5vdCByZWdpc3RlcmVkIGZvciB0aGlzIHRpbWVcbiIsIHRva2VuKSk7CiAgICAgfSBlbHNlIGlmICh3aGVuICE9IFBSRU1JQl9DT05GSUcgJiYgCiAJICAgICAgICFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJICAgICAgIE5FVFNOTVBfRFNfTElCX05PX1RPS0VOX1dBUk5JTkdTKSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiVW5rbm93biB0b2tlbjogJXMuIiwgdG9rZW4pOwotICAgICAgICB0bXBidWZbIHNpemVvZih0bXBidWYpLTEgXSA9IDA7Ci0gICAgICAgIGNvbmZpZ19wd2Fybih0bXBidWYpOworCW5ldHNubXBfY29uZmlnX3dhcm4oIlVua25vd24gdG9rZW46ICVzLiIsIHRva2VuKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwpAQCAtNTQzLDcgKzU4NCw3IEBACiBpbnQKIHNubXBfY29uZmlnX3doZW4oY2hhciAqbGluZSwgaW50IHdoZW4pCiB7Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHIsIGJ1ZltTVFJJTkdNQVhdLCB0bXBidWZbU1RSSU5HTUFYXTsKKyAgICBjaGFyICAgICAgICAgICAqY3B0ciwgYnVmW1NUUklOR01BWF07CiAgICAgc3RydWN0IGNvbmZpZ19saW5lICpscHRyID0gTlVMTDsKICAgICBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wID0gY29uZmlnX2ZpbGVzOwogICAgIGNoYXIgICAgICAgICAgICpzdDsKQEAgLTU1NiwyOCArNTk3LDE5IEBACiAgICAgc3RybGNweShidWYsIGxpbmUsIFNUUklOR01BWCk7CiAgICAgY3B0ciA9IHN0cnRva19yKGJ1ZiwgU05NUF9DT05GSUdfREVMSU1FVEVSUywgJnN0KTsKICAgICBpZiAoIWNwdHIpIHsKLSAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwgIldyb25nIGZvcm1hdDogJXMiLCBsaW5lKTsKLSAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAnXDAnOwotICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICAgIG5ldHNubXBfY29uZmlnX3dhcm4oIldyb25nIGZvcm1hdDogJXMiLCBsaW5lKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgIH0KICAgICBpZiAoY3B0clswXSA9PSAnWycpIHsKICAgICAgICAgaWYgKGNwdHJbc3RybGVuKGNwdHIpIC0gMV0gIT0gJ10nKSB7Ci0gICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAibm8gbWF0Y2hpbmcgJ10nIGZvciB0eXBlICVzLiIsCi0gICAgICAgICAgICAgICAgICAgIGNwdHIgKyAxKTsKLSAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIm5vIG1hdGNoaW5nICddJyBmb3IgdHlwZSAlcy4iLCBjcHRyICsgMSk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgIH0KICAgICAgICAgY3B0cltzdHJsZW4oY3B0cikgLSAxXSA9ICdcMCc7CiAgICAgICAgIGxwdHIgPSByZWFkX2NvbmZpZ19nZXRfaGFuZGxlcnMoY3B0ciArIDEpOwogICAgICAgICBpZiAobHB0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbnByaW50Zih0bXBidWYsICBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICJObyBoYW5kbGVycyByZWdlc3RlcmVkIGZvciB0eXBlICVzLiIsCi0gICAgICAgICAgICAgICAgICAgIGNwdHIgKyAxKTsKLSAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIk5vIGhhbmRsZXJzIHJlZ2VzdGVyZWQgZm9yIHR5cGUgJXMuIiwKKwkJCQkgY3B0ciArIDEpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogICAgICAgICB9CiAgICAgICAgIGNwdHIgPSBzdHJ0b2tfcihOVUxMLCBTTk1QX0NPTkZJR19ERUxJTUVURVJTLCAmc3QpOwpAQCAtNTkxLDkgKzYyMyw3IEBACiAgICAgfQogICAgIGlmIChscHRyID09IE5VTEwgJiYgbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCQkgIE5FVFNOTVBfRFNfTElCX05PX1RPS0VOX1dBUk5JTkdTKSkgewotICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiVW5rbm93biB0b2tlbjogJXMuIiwgY3B0cik7Ci0gICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgY29uZmlnX3B3YXJuKHRtcGJ1Zik7CisJbmV0c25tcF9jb25maWdfd2FybigiVW5rbm93biB0b2tlbjogJXMuIiwgY3B0cik7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKICAgICB9CiAKQEAgLTYzMiw4ICs2NjIsMTAgQEAKICAgICAgICAgbWVtID0gJigoKm1lbSktPm5leHQpOwogCiAgICAgKm1lbSA9IFNOTVBfTUFMTE9DX1NUUlVDVChyZWFkX2NvbmZpZ19tZW1vcnkpOwotICAgIGlmIChsaW5lKQotICAgICAgICAoKm1lbSktPmxpbmUgPSBzdHJkdXAobGluZSk7CisgICAgaWYgKCptZW0gIT0gTlVMTCkgeworICAgICAgICBpZiAobGluZSkKKyAgICAgICAgICAgICgqbWVtKS0+bGluZSA9IHN0cmR1cChsaW5lKTsKKyAgICB9CiB9CiAKIHZvaWQKQEAgLTY2MSw3ICs2OTMsNyBAQAogICAgIG1lbSA9ICptZW1wOwogCiAgICAgd2hpbGUgKG1lbSkgewotICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAicHJvY2Vzc2luZyBtZW1vcnk6ICVzXG4iLCBtZW0tPmxpbmUpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOm1lbSIsICJwcm9jZXNzaW5nIG1lbW9yeTogJXNcbiIsIG1lbS0+bGluZSkpOwogICAgICAgICBzbm1wX2NvbmZpZ193aGVuKG1lbS0+bGluZSwgd2hlbik7CiAgICAgICAgIG1lbSA9IG1lbS0+bmV4dDsKICAgICB9CkBAIC03MTEsMjAgKzc0MywyOSBAQAogICoKICAqIEZvciBlYWNoIG1hdGNoLCBjaGVjayB0aGF0IDx3aGVuPiBpcyB0aGUgZGVzaWduYXRlZCB0aW1lIGZvciB0aGUKICAqIDxsaW5lX2hhbmRsZXI+IGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkIGJlZm9yZSBwcm9jZXNzaW5nIHRoZSBsaW5lLgorICoKKyAqIFJldHVybnMgU05NUEVSUl9TVUNDRVNTIGlmIHRoZSBmaWxlIGlzIHByb2Nlc3NlZCBzdWNjZXNzZnVsbHkuCisgKiBSZXR1cm5zIFNOTVBFUlJfR0VORVJSICBpZiBpdCBjYW5ub3QuCisgKiAgICBOb3RlIHRoYXQgaW5kaXZpZHVhbCBjb25maWcgdG9rZW4gZXJyb3JzIGRvIG5vdCB0cmlnZ2VyIFNOTVBFUlJfR0VORVJSCisgKiAgICBJdCdzIG9ubHkgaWYgdGhlIHdob2xlIGZpbGUgY2Fubm90IGJlIHByb2Nlc3NlZCBmb3Igc29tZSByZWFzb24uCiAgKi8KLXZvaWQKK2ludAogcmVhZF9jb25maWcoY29uc3QgY2hhciAqZmlsZW5hbWUsCiAgICAgICAgICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmxpbmVfaGFuZGxlciwgaW50IHdoZW4pCiB7CisgICAgc3RhdGljIGludCAgICAgIGRlcHRoID0gMDsKKyAgICBzdGF0aWMgaW50ICAgICAgZmlsZXMgPSAwOworCisgICAgY29uc3QgY2hhciAqIGNvbnN0IHByZXZfZmlsZW5hbWUgPSBjdXJmaWxlbmFtZTsKKyAgICBjb25zdCB1bnNpZ25lZCBpbnQgcHJldl9saW5lY291bnQgPSBsaW5lY291bnQ7CiAKICAgICBGSUxFICAgICAgICAgICAqaWZpbGU7Ci0gICAgY2hhciAgICAgICAgICAgIGxpbmVbU1RSSU5HTUFYXSwgdG9rZW5bU1RSSU5HTUFYXSwgdG1wYnVmW1NUUklOR01BWF07Ci0gICAgY2hhciAgICAgICAgICAgKmNwdHI7Ci0gICAgaW50ICAgICAgICAgICAgIGk7Ci0gICAgc3RydWN0IGNvbmZpZ19saW5lICpscHRyOworICAgIGNoYXIgICAgICAgICAgICpsaW5lID0gTlVMTDsgIC8qIGN1cnJlbnQgbGluZSBidWZmZXIgKi8KKyAgICBzaXplX3QgICAgICAgICAgbGluZXNpemUgPSAwOyAvKiBhbGxvY2F0ZWQgc2l6ZSBvZiBsaW5lICovCiAKLSAgICBsaW5lY291bnQgPSAwOwotICAgIGN1cmZpbGVuYW1lID0gZmlsZW5hbWU7CisgICAgLyogcmVzZXQgZmlsZSBjb3VudGVyIHdoZW4gcmVjdXJzaW9uIGRlcHRoIGlzIDAgKi8KKyAgICBpZiAoZGVwdGggPT0gMCkKKyAgICAgICAgZmlsZXMgPSAwOwogCiAgICAgaWYgKChpZmlsZSA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSBOVUxMKSB7CiAjaWZkZWYgRU5PRU5UCkBAIC03MzksNTEgKzc4MCw5MyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CiAgICAgICAgIH0gZWxzZQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFQUNDRVMgKi8KLSNpZiBkZWZpbmVkKEVOT0VOVCkgfHwgZGVmaW5lZChFQUNDRVMpCiAgICAgICAgIHsKICAgICAgICAgICAgIHNubXBfbG9nX3BlcnJvcihmaWxlbmFtZSk7CiAgICAgICAgIH0KLSNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZGVmaW5lZChFTk9FTlQpIHx8IGRlZmluZWQoRUFDQ0VTKSAqLwotICAgICAgICAgICAgc25tcF9sb2dfcGVycm9yKGZpbGVuYW1lKTsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRU5PRU5UICovCi0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAiUmVhZGluZyBjb25maWd1cmF0aW9uICVzXG4iLAotICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSkpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgfQogCi0gICAgd2hpbGUgKGZnZXRzKGxpbmUsIHNpemVvZihsaW5lKSwgaWZpbGUpICE9IE5VTEwpIHsKLSAgICAgICAgbHB0ciA9IGxpbmVfaGFuZGxlcjsKLSAgICAgICAgbGluZWNvdW50Kys7Ci0gICAgICAgIGNwdHIgPSBsaW5lOwotICAgICAgICBpID0gc3RybGVuKGxpbmUpIC0gMTsKLSAgICAgICAgaWYgKGxpbmVbaV0gPT0gJ1xuJykKLSAgICAgICAgICAgIGxpbmVbaV0gPSAwOworI2RlZmluZSBDT05GSUdfTUFYX0ZJTEVTIDQwOTYKKyAgICBpZiAoZmlsZXMgPiBDT05GSUdfTUFYX0ZJTEVTKSB7CisgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJtYXhpbXVtIGNvbmYgZmlsZSBjb3VudCAoJWQpIGV4Y2VlZGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDT05GSUdfTUFYX0ZJTEVTKTsKKwlmY2xvc2UoaWZpbGUpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorI2RlZmluZSBDT05GSUdfTUFYX1JFQ1VSU0VfREVQVEggMTYKKyAgICBpZiAoZGVwdGggPiBDT05GSUdfTUFYX1JFQ1VSU0VfREVQVEgpIHsKKyAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIm5lc3RlZCBpbmNsdWRlIGRlcHRoID4gJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENPTkZJR19NQVhfUkVDVVJTRV9ERVBUSCk7CisJZmNsb3NlKGlmaWxlKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIGxpbmVjb3VudCA9IDA7CisgICAgY3VyZmlsZW5hbWUgPSBmaWxlbmFtZTsKKworICAgICsrZmlsZXM7CisgICAgKytkZXB0aDsKKworICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpmaWxlIiwgIlJlYWRpbmcgY29uZmlndXJhdGlvbiAlcyAoJWQpXG4iLAorICAgICAgICAgICAgICAgIGZpbGVuYW1lLCB3aGVuKSk7CisKKyAgICB3aGlsZSAoaWZpbGUpIHsKKyAgICAgICAgc2l6ZV90ICAgICAgICAgICAgICBsaW5lbGVuID0gMDsgLyogc3RybGVuIG9mIHRoZSBjdXJyZW50IGxpbmUgKi8KKyAgICAgICAgY2hhciAgICAgICAgICAgICAgICpjcHRyOworICAgICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmxwdHIgPSBsaW5lX2hhbmRsZXI7CisKKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgaWYgKGxpbmVzaXplIDw9IGxpbmVsZW4gKyAxKSB7CisgICAgICAgICAgICAgICAgY2hhciAqdG1wID0gcmVhbGxvYyhsaW5lLCBsaW5lc2l6ZSArIDI1Nik7CisgICAgICAgICAgICAgICAgaWYgKHRtcCkgeworICAgICAgICAgICAgICAgICAgICBsaW5lID0gdG1wOworICAgICAgICAgICAgICAgICAgICBsaW5lc2l6ZSArPSAyNTY7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkZhaWxlZCB0byBhbGxvY2F0ZSBtZW1vcnlcbiIpOworICAgICAgICAgICAgICAgICAgICBmcmVlKGxpbmUpOworICAgICAgICAgICAgICAgICAgICBmY2xvc2UoaWZpbGUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGZnZXRzKGxpbmUgKyBsaW5lbGVuLCBsaW5lc2l6ZSAtIGxpbmVsZW4sIGlmaWxlKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgbGluZVtsaW5lbGVuXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgZmNsb3NlIChpZmlsZSk7CisgICAgICAgICAgICAgICAgaWZpbGUgPSBOVUxMOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBsaW5lbGVuICs9IHN0cmxlbihsaW5lICsgbGluZWxlbik7CisKKyAgICAgICAgICAgIGlmIChsaW5lW2xpbmVsZW4gLSAxXSA9PSAnXG4nKSB7CisgICAgICAgICAgICAgIGxpbmVbbGluZWxlbiAtIDFdID0gJ1wwJzsKKyAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICArK2xpbmVjb3VudDsKKyAgICAgICAgREVCVUdNU0dUTCgoIjk6cmVhZF9jb25maWc6bGluZSIsICIlczolZCBleGFtaW5pbmc6ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZWNvdW50LCBsaW5lKSk7CiAgICAgICAgIC8qCiAgICAgICAgICAqIGNoZWNrIGJsYW5rIGxpbmUgb3IgIyBjb21tZW50IAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKChjcHRyID0gc2tpcF93aGl0ZShjcHRyKSkpIHsKKyAgICAgICAgaWYgKChjcHRyID0gc2tpcF93aGl0ZShsaW5lKSkpIHsKKyAgICAgICAgICAgIGNoYXIgdG9rZW5bU1RSSU5HTUFYXTsKKwogICAgICAgICAgICAgY3B0ciA9IGNvcHlfbndvcmQoY3B0ciwgdG9rZW4sIHNpemVvZih0b2tlbikpOwogICAgICAgICAgICAgaWYgKHRva2VuWzBdID09ICdbJykgewogICAgICAgICAgICAgICAgIGlmICh0b2tlbltzdHJsZW4odG9rZW4pIC0gMV0gIT0gJ10nKSB7Ci0gICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vIG1hdGNoaW5nICddJyBmb3IgdHlwZSAlcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b2tlblsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCQkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIm5vIG1hdGNoaW5nICddJyBmb3IgdHlwZSAlcy4iLAorCQkJCQkgJnRva2VuWzFdKTsKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRva2VuW3N0cmxlbih0b2tlbikgLSAxXSA9ICdcMCc7CiAgICAgICAgICAgICAgICAgbHB0ciA9IHJlYWRfY29uZmlnX2dldF9oYW5kbGVycygmdG9rZW5bMV0pOwogICAgICAgICAgICAgICAgIGlmIChscHRyID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm8gaGFuZGxlcnMgcmVnZXN0ZXJlZCBmb3IgdHlwZSAlcy4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b2tlblsxXSk7Ci0gICAgICAgICAgICAgICAgICAgIHRtcGJ1Zlsgc2l6ZW9mKHRtcGJ1ZiktMSBdID0gMDsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcih0bXBidWYpOworCQkgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIk5vIGhhbmRsZXJzIHJlZ2VzdGVyZWQgZm9yIHR5cGUgJXMuIiwKKwkJCQkJICZ0b2tlblsxXSk7CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLAorICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpjb250ZXh0IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3dpdGNoaW5nIHRvIG5ldyBjb250ZXh0OiAlcyVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY3B0cikgPyAiKHRoaXMgbGluZSBvbmx5KSAiIDogIiIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ0b2tlblsxXSkpOwpAQCAtNzk5LDIzICs4ODIsMTA3IEBACiAgICAgICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBjcHRyID0gY29weV9ud29yZChjcHRyLCB0b2tlbiwgc2l6ZW9mKHRva2VuKSk7CiAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmICgodG9rZW5bMF0gPT0gJ2knKSAmJiAoc3RybmNhc2VjbXAodG9rZW4sImluY2x1ZGUiLCA3ICk9PTApKSB7CisgICAgICAgICAgICAgICAgaWYgKCBzdHJjYXNlY21wKCB0b2tlbiwgImluY2x1ZGUiICk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRyAmJiAKKwkgICAgICAgICAgICAgICAgIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKwkJCQkgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfTk9fVE9LRU5fV0FSTklOR1MpKSB7CisJICAgICAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX3dhcm4oIkFtYmlndW91cyB0b2tlbiAnJXMnIC0gdXNlICdpbmNsdWRlU2VhcmNoJyAob3IgJ2luY2x1ZGVGaWxlJykgaW5zdGVhZC4iLCB0b2tlbik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmICggc3RyY2FzZWNtcCggdG9rZW4sICJpbmNsdWRlZGlyIiApPT0wKSB7CisgICAgICAgICAgICAgICAgICAgIERJUiAqZDsKKyAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqZW50cnk7CisgICAgICAgICAgICAgICAgICAgIGNoYXIgIGZuYW1lW1NOTVBfTUFYUEFUSF07CisgICAgICAgICAgICAgICAgICAgIGludCAgIGxlbjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hlbiAhPSBQUkVNSUJfQ09ORklHKQorCQkgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQmxhbmsgbGluZSBmb2xsb3dpbmcgJXMgdG9rZW4uIiwgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKChkPW9wZW5kaXIoY3B0cikpID09IE5VTEwgKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hlbiAhPSBQUkVNSUJfQ09ORklHKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJDYW4ndCBvcGVuIGluY2x1ZGUgZGlyICclcycuIiwgY3B0cik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKGVudHJ5ID0gcmVhZGRpciggZCApKSAhPSBOVUxMICkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCBlbnRyeS0+ZF9uYW1lWzBdICE9ICcuJykgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiA9IE5BTUxFTihlbnRyeSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChsZW4gPiA1KSAmJiAoc3RyY21wKCYoZW50cnktPmRfbmFtZVtsZW4tNV0pLCIuY29uZiIpID09IDApKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGZuYW1lLCBTTk1QX01BWFBBVEgsICIlcy8lcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHIsIGVudHJ5LT5kX25hbWUpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodm9pZClyZWFkX2NvbmZpZyhmbmFtZSwgbGluZV9oYW5kbGVyLCB3aGVuKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2xvc2VkaXIoZCk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIHRva2VuLCAiaW5jbHVkZWZpbGUiICk9PTApIHsKKyAgICAgICAgICAgICAgICAgICAgY2hhciAgZm5hbWVbU05NUF9NQVhQQVRIXSwgKmNwOworCisgICAgICAgICAgICAgICAgICAgIGlmIChjcHRyID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh3aGVuICE9IFBSRU1JQl9DT05GSUcpCisJCSAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJCbGFuayBsaW5lIGZvbGxvd2luZyAlcyB0b2tlbi4iLCB0b2tlbik7CisgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoIGNwdHJbMF0gPT0gJy8nICkgeworICAgICAgICAgICAgICAgICAgICAgICAgc3RybGNweShmbmFtZSwgY3B0ciwgU05NUF9NQVhQQVRIKTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxjcHkoZm5hbWUsIGZpbGVuYW1lLCBTTk1QX01BWFBBVEgpOworICAgICAgICAgICAgICAgICAgICAgICAgY3AgPSBzdHJyY2hyKGZuYW1lLCAnLycpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFjcCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZVswXSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKigrK2NwKSA9ICdcMCc7CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJsY2F0KGZuYW1lLCBjcHRyLCBTTk1QX01BWFBBVEgpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGlmIChyZWFkX2NvbmZpZyhmbmFtZSwgbGluZV9oYW5kbGVyLCB3aGVuKSAhPQorICAgICAgICAgICAgICAgICAgICAgICAgU05NUEVSUl9TVUNDRVNTICYmIHdoZW4gIT0gUFJFTUlCX0NPTkZJRykKKyAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJJbmNsdWRlZCBmaWxlICclcycgbm90IGZvdW5kLiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbmFtZSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoIHN0cmNhc2VjbXAoIHRva2VuLCAiaW5jbHVkZXNlYXJjaCIgKT09MCkgeworICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY29uZmlnX2ZpbGVzIGN0bXA7CisgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIHJldDsKKworICAgICAgICAgICAgICAgICAgICBpZiAoY3B0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAod2hlbiAhPSBQUkVNSUJfQ09ORklHKQorCQkgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiQmxhbmsgbGluZSBmb2xsb3dpbmcgJXMgdG9rZW4uIiwgdG9rZW4pOworICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgbGVuID0gc3RybGVuKGNwdHIpOworICAgICAgICAgICAgICAgICAgICBjdG1wLmZpbGVIZWFkZXIgPSBjcHRyOworICAgICAgICAgICAgICAgICAgICBjdG1wLnN0YXJ0ID0gbGluZV9oYW5kbGVyOworICAgICAgICAgICAgICAgICAgICBjdG1wLm5leHQgPSBOVUxMOworICAgICAgICAgICAgICAgICAgICBpZiAoKGxlbiA+IDUpICYmIChzdHJjbXAoJmNwdHJbbGVuLTVdLCIuY29uZiIpID09IDApKQorICAgICAgICAgICAgICAgICAgICAgICBjcHRyW2xlbi01XSA9IDA7IC8qIGNob3Agb2ZmIC5jb25mICovCisgICAgICAgICAgICAgICAgICAgIHJldCA9IHJlYWRfY29uZmlnX2ZpbGVzX29mX3R5cGUod2hlbiwmY3RtcCk7CisgICAgICAgICAgICAgICAgICAgIGlmICgobGVuID4gNSkgJiYgKGNwdHJbbGVuLTVdID09IDApKQorICAgICAgICAgICAgICAgICAgICAgICBjcHRyW2xlbi01XSA9ICcuJzsgLyogcmVzdG9yZSAuY29uZiAqLworICAgICAgICAgICAgICAgICAgICBpZiAoKCByZXQgIT0gU05NUEVSUl9TVUNDRVNTICkgJiYgKHdoZW4gIT0gUFJFTUlCX0NPTkZJRykpCisJCSAgICAgICAgbmV0c25tcF9jb25maWdfZXJyb3IoIkluY2x1ZGVkIGNvbmZpZyAnJXMnIG5vdCBmb3VuZC4iLCBjcHRyKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbHB0ciA9IGxpbmVfaGFuZGxlcjsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIGxwdHIgPSBsaW5lX2hhbmRsZXI7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoY3B0ciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc25wcmludGYodG1wYnVmLCBzaXplb2YodG1wYnVmKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICJCbGFuayBsaW5lIGZvbGxvd2luZyAlcyB0b2tlbi4iLCB0b2tlbik7Ci0gICAgICAgICAgICAgICAgdG1wYnVmWyBzaXplb2YodG1wYnVmKS0xIF0gPSAwOwotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKwkJbmV0c25tcF9jb25maWdfZXJyb3IoIkJsYW5rIGxpbmUgZm9sbG93aW5nICVzIHRva2VuLiIsIHRva2VuKTsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgIiVzOiVkIGV4YW1pbmluZzogJXNcbiIsCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnOmxpbmUiLCAiJXM6JWQgZXhhbWluaW5nOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWxlbmFtZSwgbGluZWNvdW50LCBsaW5lKSk7CiAgICAgICAgICAgICAgICAgcnVuX2NvbmZpZ19oYW5kbGVyKGxwdHIsIHRva2VuLCBjcHRyLCB3aGVuKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KLSAgICBmY2xvc2UoaWZpbGUpOwotICAgIHJldHVybjsKKyAgICBmcmVlKGxpbmUpOworICAgIGxpbmVjb3VudCA9IHByZXZfbGluZWNvdW50OworICAgIGN1cmZpbGVuYW1lID0gcHJldl9maWxlbmFtZTsKKyAgICAtLWRlcHRoOworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHJlYWRfY29uZmlnKCkgKi8KIApAQCAtODMzLDE1ICsxMDAwLDIxIEBACiAgICAgICAgICAgICAgICAgKCoobHRtcC0+ZnJlZV9mdW5jKSkgKCk7CiB9CiAKLXZvaWQKKy8qCisgKiBSZXR1cm4gU05NUEVSUl9TVUNDRVNTIGlmIGFueSBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogUmV0dXJuIFNOTVBFUlJfR0VORVJSIGlmIF9ub18gY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqICAgIFdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhbiBlcnJvciBpcyBsZWZ0IHRvIHRoZSBhcHBsaWNhdGlvbgorICovCitpbnQKIHJlYWRfY29uZmlnc19vcHRpb25hbChjb25zdCBjaGFyICpvcHRpb25hbF9jb25maWcsIGludCB3aGVuKQogewogICAgIGNoYXIgKm5ld3AsICpjcCwgKnN0ID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfR0VORVJSOwogICAgIGNoYXIgKnR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkgICAgICAgTkVUU05NUF9EU19MSUJfQVBQVFlQRSk7CiAKICAgICBpZiAoKE5VTEwgPT0gb3B0aW9uYWxfY29uZmlnKSB8fCAoTlVMTCA9PSB0eXBlKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gcmV0OwogCiAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnc19vcHRpb25hbCIsCiAgICAgICAgICAgICAgICAgInJlYWRpbmcgb3B0aW9uYWwgY29uZmlndXJhdGlvbiB0b2tlbnMgZm9yICVzXG4iLCB0eXBlKSk7CkBAIC04NTUsMTQgKzEwMjgsMTUgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJPcHRpb25hbCBGaWxlIFwiJXNcIiBkb2VzIG5vdCBleGlzdC5cbiIsIGNwKSk7CiAgICAgICAgICAgICBzbm1wX2xvZ19wZXJyb3IoY3ApOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpvcHQiLAogICAgICAgICAgICAgICAgICAgICAgICAgIlJlYWRpbmcgb3B0aW9uYWwgY29uZmlnIGZpbGU6IFwiJXNcIlxuIiwgY3ApKTsKLSAgICAgICAgICAgIHJlYWRfY29uZmlnX3dpdGhfdHlwZV93aGVuKGNwLCB0eXBlLCB3aGVuKTsKKyAgICAgICAgICAgIGlmICggcmVhZF9jb25maWdfd2l0aF90eXBlX3doZW4oY3AsIHR5cGUsIHdoZW4pID09IFNOTVBFUlJfU1VDQ0VTUyApCisgICAgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgICAgICB9CiAgICAgICAgIGNwID0gc3RydG9rX3IoTlVMTCwgIiwiLCAmc3QpOwogICAgIH0KICAgICBmcmVlKG5ld3ApOwotICAgIAorICAgIHJldHVybiByZXQ7CiB9CiAKIHZvaWQKQEAgLTg3MSwyMCArMTA0NSwyMyBAQAogICAgIGNoYXIgKm9wdGlvbmFsX2NvbmZpZyA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogCQkJCQkgICAgICAgTkVUU05NUF9EU19MSUJfT1BUSU9OQUxDT05GSUcpOwogCisgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0xJQlJBUlksCisgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1BSRV9SRUFEX0NPTkZJRywgTlVMTCk7CisKICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAicmVhZGluZyBub3JtYWwgY29uZmlndXJhdGlvbiB0b2tlbnNcbiIpKTsKIAogICAgIGlmICgoTlVMTCAhPSBvcHRpb25hbF9jb25maWcpICYmICgqb3B0aW9uYWxfY29uZmlnID09ICctJykpIHsKLSAgICAgICAgcmVhZF9jb25maWdzX29wdGlvbmFsKCsrb3B0aW9uYWxfY29uZmlnLCBOT1JNQUxfQ09ORklHKTsKKyAgICAgICAgKHZvaWQpcmVhZF9jb25maWdzX29wdGlvbmFsKCsrb3B0aW9uYWxfY29uZmlnLCBOT1JNQUxfQ09ORklHKTsKICAgICAgICAgb3B0aW9uYWxfY29uZmlnID0gTlVMTDsgLyogY2xlYXIsIHNvIHdlIGRvbid0IHJlYWQgdGhlbSB0d2ljZSAqLwogICAgIH0KIAotICAgIHJlYWRfY29uZmlnX2ZpbGVzKE5PUk1BTF9DT05GSUcpOworICAgICh2b2lkKXJlYWRfY29uZmlnX2ZpbGVzKE5PUk1BTF9DT05GSUcpOwogCiAgICAgLyoKICAgICAgKiBkbyB0aGlzIGV2ZW4gd2hlbiB0aGUgbm9ybWFsIGFib3ZlIHdhc24ndCBkb25lIAogICAgICAqLwogICAgIGlmIChOVUxMICE9IG9wdGlvbmFsX2NvbmZpZykKLSAgICAgICAgcmVhZF9jb25maWdzX29wdGlvbmFsKG9wdGlvbmFsX2NvbmZpZywgTk9STUFMX0NPTkZJRyk7CisgICAgICAgICh2b2lkKXJlYWRfY29uZmlnc19vcHRpb25hbChvcHRpb25hbF9jb25maWcsIE5PUk1BTF9DT05GSUcpOwogCiAgICAgbmV0c25tcF9jb25maWdfcHJvY2Vzc19tZW1vcmllc193aGVuKE5PUk1BTF9DT05GSUcsIDEpOwogCkBAIC05MDAsMTcgKzEwNzcsMjAgQEAKICAgICBjaGFyICpvcHRpb25hbF9jb25maWcgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkJICAgICAgIE5FVFNOTVBfRFNfTElCX09QVElPTkFMQ09ORklHKTsKIAorICAgIHNubXBfY2FsbF9jYWxsYmFja3MoU05NUF9DQUxMQkFDS19MSUJSQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19QUkVfUFJFTUlCX1JFQURfQ09ORklHLCBOVUxMKTsKKwogICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICJyZWFkaW5nIHByZW1pYiBjb25maWd1cmF0aW9uIHRva2Vuc1xuIikpOwogCiAgICAgaWYgKChOVUxMICE9IG9wdGlvbmFsX2NvbmZpZykgJiYgKCpvcHRpb25hbF9jb25maWcgPT0gJy0nKSkgewotICAgICAgICByZWFkX2NvbmZpZ3Nfb3B0aW9uYWwoKytvcHRpb25hbF9jb25maWcsIFBSRU1JQl9DT05GSUcpOworICAgICAgICAodm9pZClyZWFkX2NvbmZpZ3Nfb3B0aW9uYWwoKytvcHRpb25hbF9jb25maWcsIFBSRU1JQl9DT05GSUcpOwogICAgICAgICBvcHRpb25hbF9jb25maWcgPSBOVUxMOyAvKiBjbGVhciwgc28gd2UgZG9uJ3QgcmVhZCB0aGVtIHR3aWNlICovCiAgICAgfQogCi0gICAgcmVhZF9jb25maWdfZmlsZXMoUFJFTUlCX0NPTkZJRyk7CisgICAgKHZvaWQpcmVhZF9jb25maWdfZmlsZXMoUFJFTUlCX0NPTkZJRyk7CiAKICAgICBpZiAoTlVMTCAhPSBvcHRpb25hbF9jb25maWcpCi0gICAgICAgIHJlYWRfY29uZmlnc19vcHRpb25hbChvcHRpb25hbF9jb25maWcsIFBSRU1JQl9DT05GSUcpOworICAgICAgICAodm9pZClyZWFkX2NvbmZpZ3Nfb3B0aW9uYWwob3B0aW9uYWxfY29uZmlnLCBQUkVNSUJfQ09ORklHKTsKIAogICAgIG5ldHNubXBfY29uZmlnX3Byb2Nlc3NfbWVtb3JpZXNfd2hlbihQUkVNSUJfQ09ORklHLCAwKTsKIApAQCAtOTQ4LDcgKzExMjgsNyBAQAogICogV2UgYWx3YXlzIHJldHJpZXZlIGl0IG5ldywgc2luY2Ugd2UgaGF2ZSB0byBkbyBpdCBhbnl3YXkgaWYgaXQgaXMganVzdCBzZXQuCiAgKi8KIGNvbnN0IGNoYXIgICAgICoKLWdldF9jb25maWd1cmF0aW9uX2RpcmVjdG9yeSgpCitnZXRfY29uZmlndXJhdGlvbl9kaXJlY3Rvcnkodm9pZCkKIHsKICAgICBjaGFyICAgICAgICAgICAgZGVmYXVsdFBhdGhbU1BSSU5UX01BWF9MRU5dOwogICAgIGNoYXIgICAgICAgICAgICpob21lcGF0aDsKQEAgLTk5Niw3ICsxMTc2LDcgQEAKICAqIFdlIGFsd2F5cyByZXRyaWV2ZSBpdCBuZXcsIHNpbmNlIHdlIGhhdmUgdG8gZG8gaXQgYW55d2F5IGlmIGl0IGlzIGp1c3Qgc2V0LgogICovCiBjb25zdCBjaGFyICAgICAqCi1nZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKQorZ2V0X3BlcnNpc3RlbnRfZGlyZWN0b3J5KHZvaWQpCiB7CiAgICAgaWYgKE5VTEwgPT0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCiAJCQkJICAgICAgTkVUU05NUF9EU19MSUJfUEVSU0lTVEVOVF9ESVIpKSB7CkBAIC0xMDM2LDcgKzEyMTYsNyBAQAogICogV2UgYWx3YXlzIHJldHJpZXZlIGl0IG5ldywgc2luY2Ugd2UgaGF2ZSB0byBkbyBpdCBhbnl3YXkgaWYgaXQgaXMganVzdCBzZXQuCiAgKi8KIGNvbnN0IGNoYXIgICAgICoKLWdldF90ZW1wX2ZpbGVfcGF0dGVybigpCitnZXRfdGVtcF9maWxlX3BhdHRlcm4odm9pZCkKIHsKICAgICBpZiAoTlVMTCA9PSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCQkgICAgICBORVRTTk1QX0RTX0xJQl9URU1QX0ZJTEVfUEFUVEVSTikpIHsKQEAgLTEwNDgsOCArMTIyOCwxMiBAQAogCiAvKioKICAqIHV0aWxpdHkgcm91dGluZSBmb3IgcmVhZF9jb25maWdfZmlsZXMKKyAqCisgKiBSZXR1cm4gU05NUEVSUl9TVUNDRVNTIGlmIGFueSBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogUmV0dXJuIFNOTVBFUlJfR0VORVJSIGlmIF9ub18gY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqICAgIFdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhbiBlcnJvciBpcyBsZWZ0IHRvIHRoZSBhcHBsaWNhdGlvbgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChjb25zdCBjaGFyICpwYXRoLCBzdHJ1Y3QgY29uZmlnX2ZpbGVzICpjdG1wLAogICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2hlbiwgY29uc3QgY2hhciAqcGVyc3BhdGgsIGNvbnN0IGNoYXIgKnBlcnNmaWxlKQogewpAQCAtMTA1NywxMyArMTI0MSwxNCBAQAogICAgIGNoYXIgICAgICAgICAgICBjb25maWdmaWxlWzMwMF07CiAgICAgY2hhciAgICAgICAgICAgKmNwdHIxLCAqY3B0cjIsICplbnZjb25mcGF0aDsKICAgICBzdHJ1Y3Qgc3RhdCAgICAgc3RhdGJ1ZjsKKyAgICBpbnQgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9HRU5FUlI7CiAKICAgICBpZiAoKE5VTEwgPT0gcGF0aCkgfHwgKE5VTEwgPT0gY3RtcCkpCi0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogCiAgICAgZW52Y29uZnBhdGggPSBzdHJkdXAocGF0aCk7CiAKLSAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWciLCAiIGNvbmZpZyBwYXRoIHVzZWQgZm9yICVzOiVzIChwZXJzaXN0ZW50IHBhdGg6JXMpXG4iLAorICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpwYXRoIiwgIiBjb25maWcgcGF0aCB1c2VkIGZvciAlczolcyAocGVyc2lzdGVudCBwYXRoOiVzKVxuIiwKICAgICAgICAgICAgICAgICBjdG1wLT5maWxlSGVhZGVyLCBlbnZjb25mcGF0aCwgcGVyc3BhdGgpKTsKICAgICBjcHRyMSA9IGNwdHIyID0gZW52Y29uZnBhdGg7CiAgICAgZG9uZSA9IDA7CkBAIC0xMDc1LDEyICsxMjYwLDEyIEBACiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICpjcHRyMSA9IDA7CiAKLSAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgIiBjb25maWcgZGlyOiAlc1xuIiwgY3B0cjIgKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpkaXIiLCAiIGNvbmZpZyBkaXI6ICVzXG4iLCBjcHRyMiApKTsKICAgICAgICAgaWYgKHN0YXQoY3B0cjIsICZzdGF0YnVmKSAhPSAwKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogRGlyZWN0b3J5IG5vdCB0aGVyZSwgY29udGludWUgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZyIsICIgRGlyZWN0b3J5IG5vdCBwcmVzZW50OiAlc1xuIiwgY3B0cjIgKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6ZGlyIiwgIiBEaXJlY3Rvcnkgbm90IHByZXNlbnQ6ICVzXG4iLCBjcHRyMiApKTsKICAgICAgICAgICAgIGNwdHIyID0gKytjcHRyMTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkBAIC0xMDg5LDE0ICsxMjc0LDE0IEBACiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogTm90IGEgZGlyZWN0b3J5LCBjb250aW51ZSAKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgIiBOb3QgYSBkaXJlY3Rvcnk6ICVzXG4iLCBjcHRyMiApKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpkaXIiLCAiIE5vdCBhIGRpcmVjdG9yeTogJXNcbiIsIGNwdHIyICkpOwogICAgICAgICAgICAgY3B0cjIgPSArK2NwdHIxOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICNlbmRpZgogCiAgICAgICAgIC8qCi0gICAgICAgICAqIGZvciBwcm9wZXIgcGVyc2lzdGVudCBzdG9yYWdlIHJldHJpdmFsLCB3ZSBuZWVkIHRvIHJlYWQgb2xkIGJhY2t1cAorICAgICAgICAgKiBmb3IgcHJvcGVyIHBlcnNpc3RlbnQgc3RvcmFnZSByZXRyaWV2YWwsIHdlIG5lZWQgdG8gcmVhZCBvbGQgYmFja3VwCiAgICAgICAgICAqIGNvcGllcyBvZiB0aGUgcHJldmlvdXMgc3RvcmFnZSBmaWxlcy4gIElmIHRoZSBhcHBsaWNhdGlvbiBpbgogICAgICAgICAgKiBxdWVzdGlvbiBoYXMgZGllZCB3aXRob3V0IHRoZSBwcm9wZXIgY2FsbCB0byBzbm1wX2NsZWFuX3BlcnNpc3RlbnQsCiAgICAgICAgICAqIHRoZW4gd2UgcmVhZCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMgd2UgY2FuLCBzdGFydGluZyB3aXRoCkBAIC0xMTA1LDYgKzEyOTAsNyBAQAogICAgICAgICBpZiAoc3RybmNtcChjcHRyMiwgcGVyc3BhdGgsIHN0cmxlbihwZXJzcGF0aCkpID09IDAgfHwKICAgICAgICAgICAgIChwZXJzZmlsZSAhPSBOVUxMICYmCiAgICAgICAgICAgICAgc3RybmNtcChjcHRyMiwgcGVyc2ZpbGUsIHN0cmxlbihwZXJzZmlsZSkpID09IDApKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgicmVhZF9jb25maWc6cGVyc2lzdCIsICIgcGVyc2lzdCBkaXI6ICVzXG4iLCBjcHRyMiApKTsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBsaW1pdCB0aGlzIHRvIHRoZSBrbm93biBzdG9yYWdlIGRpcmVjdG9yeSBvbmx5IAogICAgICAgICAgICAgICovCkBAIC0xMTI1LDE4ICsxMzExLDIxIEBACiAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZ19maWxlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJvbGQgY29uZmlnIGZpbGUgZm91bmQ6ICVzLCBwYXJzaW5nXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maWdmaWxlKSk7Ci0gICAgICAgICAgICAgICAgICAgIHJlYWRfY29uZmlnKGNvbmZpZ2ZpbGUsIGN0bXAtPnN0YXJ0LCB3aGVuKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHJlYWRfY29uZmlnKGNvbmZpZ2ZpbGUsIGN0bXAtPnN0YXJ0LCB3aGVuKSA9PSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHNucHJpbnRmKGNvbmZpZ2ZpbGUsIHNpemVvZihjb25maWdmaWxlKSwKICAgICAgICAgICAgICAgICAgIiVzLyVzLmNvbmYiLCBjcHRyMiwgY3RtcC0+ZmlsZUhlYWRlcik7CiAgICAgICAgIGNvbmZpZ2ZpbGVbIHNpemVvZihjb25maWdmaWxlKS0xIF0gPSAwOwotICAgICAgICByZWFkX2NvbmZpZyhjb25maWdmaWxlLCBjdG1wLT5zdGFydCwgd2hlbik7CisgICAgICAgIGlmIChyZWFkX2NvbmZpZyhjb25maWdmaWxlLCBjdG1wLT5zdGFydCwgd2hlbikgPT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9TVUNDRVNTOwogICAgICAgICBzbnByaW50Zihjb25maWdmaWxlLCBzaXplb2YoY29uZmlnZmlsZSksCiAgICAgICAgICAgICAgICAgICIlcy8lcy5sb2NhbC5jb25mIiwgY3B0cjIsIGN0bXAtPmZpbGVIZWFkZXIpOwogICAgICAgICBjb25maWdmaWxlWyBzaXplb2YoY29uZmlnZmlsZSktMSBdID0gMDsKLSAgICAgICAgcmVhZF9jb25maWcoY29uZmlnZmlsZSwgY3RtcC0+c3RhcnQsIHdoZW4pOworICAgICAgICBpZiAocmVhZF9jb25maWcoY29uZmlnZmlsZSwgY3RtcC0+c3RhcnQsIHdoZW4pID09IFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKIAogICAgICAgICBpZihkb25lKQogICAgICAgICAgICAgYnJlYWs7CkBAIC0xMTQ0LDYgKzEzMzMsNyBAQAogICAgICAgICBjcHRyMiA9ICsrY3B0cjE7CiAgICAgfQogICAgIFNOTVBfRlJFRShlbnZjb25mcGF0aCk7CisgICAgcmV0dXJuIHJldDsKIH0KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKQEAgLTExNzQsMjMgKzEzNjQsMjMgQEAKICAqCiAgKgogICogRVhJVHMgaWYgYW55ICdjb25maWdfZXJyb3JzJyBhcmUgbG9nZ2VkIHdoaWxlIHBhcnNpbmcgY29uZmlnIGZpbGUgbGluZXMuCisgKgorICogUmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyBpZiBhbnkgY29uZmlnIGZpbGVzIGFyZSBwcm9jZXNzZWQKKyAqIFJldHVybiBTTk1QRVJSX0dFTkVSUiBpZiBfbm9fIGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiAgICBXaGV0aGVyIHRoaXMgaXMgYWN0dWFsbHkgYW4gZXJyb3IgaXMgbGVmdCB0byB0aGUgYXBwbGljYXRpb24KICAqLwotdm9pZAotcmVhZF9jb25maWdfZmlsZXMoaW50IHdoZW4pCitpbnQKK3JlYWRfY29uZmlnX2ZpbGVzX29mX3R5cGUoaW50IHdoZW4sIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXApCiB7CiAgICAgY29uc3QgY2hhciAgICAgKmNvbmZwYXRoLCAqcGVyc2ZpbGUsICplbnZjb25mcGF0aDsKICAgICBjaGFyICAgICAgICAgICAqcGVyc3BhdGg7Ci0gICAgc3RydWN0IGNvbmZpZ19maWxlcyAqY3RtcCA9IGNvbmZpZ19maWxlczsKKyAgICBpbnQgICAgICAgICAgICAgcmV0ID0gU05NUEVSUl9HRU5FUlI7CiAKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE9OVF9QRVJTSVNUX1NUQVRFKQotICAgICB8fCBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX0NPTkZJR19MT0FEKSkgcmV0dXJuOwotCi0gICAgY29uZmlnX2Vycm9ycyA9IDA7Ci0KLSAgICBpZiAod2hlbiA9PSBQUkVNSUJfQ09ORklHKQotICAgICAgICBmcmVlX2NvbmZpZygpOworICAgICAgICB8fCBuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ESVNBQkxFX0NPTkZJR19MT0FEKQorICAgICAgICB8fCAoTlVMTCA9PSBjdG1wKSkgcmV0dXJuIHJldDsKIAogICAgIC8qCiAgICAgICogdGhlc2Ugc2hvdWxkbid0IGNoYW5nZQpAQCAtMTE5OSwxMCArMTM4OSw2IEBACiAgICAgcGVyc2ZpbGUgPSBuZXRzbm1wX2dldGVudigiU05NUF9QRVJTSVNURU5UX0ZJTEUiKTsKICAgICBlbnZjb25mcGF0aCA9IG5ldHNubXBfZ2V0ZW52KCJTTk1QQ09ORlBBVEgiKTsKIAotICAgIC8qCi0gICAgICogcmVhZCBhbGwgY29uZmlnIGZpbGUgdHlwZXMgCi0gICAgICovCi0gICAgZm9yICg7IGN0bXAgIT0gTlVMTDsgY3RtcCA9IGN0bXAtPm5leHQpIHsKIAogICAgICAgICAvKgogICAgICAgICAgKiByZWFkIHRoZSBjb25maWcgZmlsZXMuIHN0cmR1cCgpIHRoZSByZXN1bHQgb2YKQEAgLTEyMTYsMjcgKzE0MDIsNTYgQEAKICAgICAgICAgICAgICAqIHBlcnNpc3RlbnQgcGF0aCBjYW4gY2hhbmdlIHZpYSBjb25mIGZpbGUuIFRoZW4gZ2V0IHRoZQogICAgICAgICAgICAgICogY3VycmVudCBwZXJzaXN0ZW50IGRpcmVjdG9yeSwgYW5kIHJlYWQgZmlsZXMgdGhlcmUuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoY29uZnBhdGgsIGN0bXAsIHdoZW4sIHBlcnNwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzZmlsZSk7CisgICAgICAgICAgICBpZiAoIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgoY29uZnBhdGgsIGN0bXAsIHdoZW4sIHBlcnNwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzZmlsZSkgPT0gU05NUEVSUl9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgICAgICAgICBmcmVlKHBlcnNwYXRoKTsKICAgICAgICAgICAgIHBlcnNwYXRoID0gc3RyZHVwKGdldF9wZXJzaXN0ZW50X2RpcmVjdG9yeSgpKTsKLSAgICAgICAgICAgIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgocGVyc3BhdGgsIGN0bXAsIHdoZW4sIHBlcnNwYXRoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzZmlsZSk7CisgICAgICAgICAgICBpZiAoIHJlYWRfY29uZmlnX2ZpbGVzX2luX3BhdGgocGVyc3BhdGgsIGN0bXAsIHdoZW4sIHBlcnNwYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZXJzZmlsZSkgPT0gU05NUEVSUl9TVUNDRVNTICkKKyAgICAgICAgICAgICAgICByZXQgPSBTTk1QRVJSX1NVQ0NFU1M7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogb25seSByZWFkIHBhdGggc3BlY2lmaWVkIGJ5IHVzZXIKICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChlbnZjb25mcGF0aCwgY3RtcCwgd2hlbiwgcGVyc3BhdGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNmaWxlKTsKKyAgICAgICAgICAgIGlmICggcmVhZF9jb25maWdfZmlsZXNfaW5fcGF0aChlbnZjb25mcGF0aCwgY3RtcCwgd2hlbiwgcGVyc3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBlcnNmaWxlKSA9PSBTTk1QRVJSX1NVQ0NFU1MgKQorICAgICAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICAgICAgfQogICAgICAgICBmcmVlKHBlcnNwYXRoKTsKKyAgICAgICAgcmV0dXJuIHJldDsKK30KKworLyoKKyAqIFJldHVybiBTTk1QRVJSX1NVQ0NFU1MgaWYgYW55IGNvbmZpZyBmaWxlcyBhcmUgcHJvY2Vzc2VkCisgKiBSZXR1cm4gU05NUEVSUl9HRU5FUlIgaWYgX25vXyBjb25maWcgZmlsZXMgYXJlIHByb2Nlc3NlZAorICogICAgV2hldGhlciB0aGlzIGlzIGFjdHVhbGx5IGFuIGVycm9yIGlzIGxlZnQgdG8gdGhlIGFwcGxpY2F0aW9uCisgKi8KK2ludAorcmVhZF9jb25maWdfZmlsZXMoaW50IHdoZW4pIHsKKworICAgIHN0cnVjdCBjb25maWdfZmlsZXMgKmN0bXAgPSBjb25maWdfZmlsZXM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmV0ICA9IFNOTVBFUlJfR0VORVJSOworCisgICAgY29uZmlnX2Vycm9ycyA9IDA7CisKKyAgICBpZiAod2hlbiA9PSBQUkVNSUJfQ09ORklHKQorICAgICAgICBmcmVlX2NvbmZpZygpOworCisgICAgLyoKKyAgICAgKiByZWFkIGFsbCBjb25maWcgZmlsZSB0eXBlcyAKKyAgICAgKi8KKyAgICBmb3IgKDsgY3RtcCAhPSBOVUxMOyBjdG1wID0gY3RtcC0+bmV4dCkgeworICAgICAgICBpZiAoIHJlYWRfY29uZmlnX2ZpbGVzX29mX3R5cGUod2hlbiwgY3RtcCkgPT0gU05NUEVSUl9TVUNDRVNTICkKKyAgICAgICAgICAgIHJldCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICB9CiAKICAgICBpZiAoY29uZmlnX2Vycm9ycykgewogICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAibmV0LXNubXA6ICVkIGVycm9yKHMpIGluIGNvbmZpZyBmaWxlKHMpXG4iLAogICAgICAgICAgICAgICAgICBjb25maWdfZXJyb3JzKTsKICAgICB9CisgICAgcmV0dXJuIHJldDsKIH0KIAogdm9pZApAQCAtMTMyMiw3ICsxNTM3LDcgQEAKICAgICAgICAgZnByaW50Zihmb3V0LCAiJXMiLCBsaW5lKTsKICAgICAgICAgaWYgKGxpbmVbc3RybGVuKGxpbmUpXSAhPSAnXG4nKQogICAgICAgICAgICAgZnByaW50Zihmb3V0LCAiXG4iKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnIiwgInN0b3Jpbmc6ICVzXG4iLCBsaW5lKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZzpzdG9yZSIsICJzdG9yaW5nOiAlc1xuIiwgbGluZSkpOwogICAgICAgICBmY2xvc2UoZm91dCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInJlYWRfY29uZmlnX3N0b3JlIG9wZW4gZmFpbHVyZSBvbiAlc1xuIiwgZmlsZXApOwpAQCAtMTQwMyw4ICsxNjE4LDExIEBACiAgICAgICogc2F2ZSBhIHdhcm5pbmcgaGVhZGVyIHRvIHRoZSB0b3Agb2YgdGhlIG5ldyBmaWxlIAogICAgICAqLwogICAgIHNucHJpbnRmKGZpbGVvbGQsIHNpemVvZihmaWxlb2xkKSwKLSAgICAgICAgICAgICIjXG4jIG5ldC1zbm1wIChvciB1Y2Qtc25tcCkgcGVyc2lzdGVudCBkYXRhIGZpbGUuXG4jXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4jIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFxuI1xuIyAgICAgICAgICAqKioqIERPIE5PVCBFRElUIFRISVMgRklMRSAqKioqXG4jXG4jIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFxuIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjI1xuI1xuIyBETyBOT1QgU1RPUkUgQ09ORklHVVJBVElPTiBFTlRSSUVTIEhFUkUuXG4jIFBsZWFzZSBzYXZlIG5vcm1hbCBjb25maWd1cmF0aW9uIHRva2VucyBmb3IgJXMgaW4gU05NUENPTkZQQVRILyVzLmNvbmYuXG4jIE9ubHkgXCJjcmVhdGVVc2VyXCIgdG9rZW5zIHNob3VsZCBiZSBwbGFjZWQgaGVyZSBieSAlcyBhZG1pbmlzdHJhdG9ycy5cbiMgKERpZCBJIG1lbnRpb246IGRvIG5vdCBlZGl0IHRoaXMgZmlsZT8pXG4jXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuIiwKLSAgICAgICAgICAgIHR5cGUsIHR5cGUsIHR5cGUpOworICAgICAgICAgICAgIiVzJXMjIFBsZWFzZSBzYXZlIG5vcm1hbCBjb25maWd1cmF0aW9uIHRva2VucyBmb3IgJXMgaW4gU05NUENPTkZQQVRILyVzLmNvbmYuXG4jIE9ubHkgXCJjcmVhdGVVc2VyXCIgdG9rZW5zIHNob3VsZCBiZSBwbGFjZWQgaGVyZSBieSAlcyBhZG1pbmlzdHJhdG9ycy5cbiVzIiwKKyAgICAgICAgICAgICIjXG4jIG5ldC1zbm1wIChvciB1Y2Qtc25tcCkgcGVyc2lzdGVudCBkYXRhIGZpbGUuXG4jXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4jIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFxuIiwKKyAgICAgICAgICAgICIjXG4jICAgICAgICAgICoqKiogRE8gTk9UIEVESVQgVEhJUyBGSUxFICoqKipcbiNcbiMgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgU1RPUCBTVE9QIFNUT1AgXG4jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjXG4jXG4jIERPIE5PVCBTVE9SRSBDT05GSUdVUkFUSU9OIEVOVFJJRVMgSEVSRS5cbiIsCisgICAgICAgICAgICB0eXBlLCB0eXBlLCB0eXBlLAorCSAgICAiIyAoRGlkIEkgbWVudGlvbjogZG8gbm90IGVkaXQgdGhpcyBmaWxlPylcbiNcblxuXG5cblxuXG5cblxuXG5cblxuXG5cblxuXG4iKTsKICAgICBmaWxlb2xkWyBzaXplb2YoZmlsZW9sZCktMSBdID0gMDsKICAgICByZWFkX2NvbmZpZ19zdG9yZSh0eXBlLCBmaWxlb2xkKTsKIH0KQEAgLTE0NjUsMTkgKzE2ODMsNTIgQEAKICAqIGNvbmZpZ19wZXJyb3I6IHByaW50cyBhIHdhcm5pbmcgc3RyaW5nIGFzc29jaWF0ZWQgd2l0aCBhIGZpbGUgYW5kCiAgKiBsaW5lIG51bWJlciBvZiBhIC5jb25mIGZpbGUgYW5kIGluY3JlbWVudHMgdGhlIGVycm9yIGNvdW50LiAKICAqLworc3RhdGljIHZvaWQKK2NvbmZpZ192bG9nKGludCBsZXZlbCwgY29uc3QgY2hhciAqbGV2ZWxtc2csIGNvbnN0IGNoYXIgKnN0ciwgdmFfbGlzdCBhcmdzKQoreworICAgIGNoYXIgdG1wYnVmWzI1Nl07CisgICAgY2hhciogYnVmID0gdG1wYnVmOworICAgIGludCBsZW4gPSBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLCAiJXM6IGxpbmUgJWQ6ICVzOiAlc1xuIiwKKwkJICAgICAgIGN1cmZpbGVuYW1lLCBsaW5lY291bnQsIGxldmVsbXNnLCBzdHIpOworICAgIGlmIChsZW4gPj0gKGludClzaXplb2YodG1wYnVmKSkgeworCWJ1ZiA9IChjaGFyKiltYWxsb2MobGVuICsgMSk7CisJc3ByaW50ZihidWYsICIlczogbGluZSAlZDogJXM6ICVzXG4iLAorCQljdXJmaWxlbmFtZSwgbGluZWNvdW50LCBsZXZlbG1zZywgc3RyKTsKKyAgICB9CisgICAgc25tcF92bG9nKGxldmVsLCBidWYsIGFyZ3MpOworICAgIGlmIChidWYgIT0gdG1wYnVmKQorCWZyZWUoYnVmKTsKK30KKwordm9pZAorbmV0c25tcF9jb25maWdfZXJyb3IoY29uc3QgY2hhciAqc3RyLCAuLi4pCit7CisgICAgdmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIHN0cik7CisgICAgY29uZmlnX3Zsb2coTE9HX0VSUiwgIkVycm9yIiwgc3RyLCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgY29uZmlnX2Vycm9ycysrOworfQorCit2b2lkCituZXRzbm1wX2NvbmZpZ193YXJuKGNvbnN0IGNoYXIgKnN0ciwgLi4uKQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBzdHIpOworICAgIGNvbmZpZ192bG9nKExPR19XQVJOSU5HLCAiV2FybmluZyIsIHN0ciwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCiB2b2lkCiBjb25maWdfcGVycm9yKGNvbnN0IGNoYXIgKnN0cikKIHsKLSAgICBzbm1wX2xvZyhMT0dfRVJSLCAiJXM6IGxpbmUgJWQ6IEVycm9yOiAlc1xuIiwgY3VyZmlsZW5hbWUsIGxpbmVjb3VudCwKLSAgICAgICAgICAgICBzdHIpOwotICAgIGNvbmZpZ19lcnJvcnMrKzsKKyAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiJXMiLCBzdHIpOwogfQogCiB2b2lkCiBjb25maWdfcHdhcm4oY29uc3QgY2hhciAqc3RyKQogewotICAgIHNubXBfbG9nKExPR19XQVJOSU5HLCAiJXM6IGxpbmUgJWQ6IFdhcm5pbmc6ICVzXG4iLCBjdXJmaWxlbmFtZSwKLSAgICAgICAgICAgICBsaW5lY291bnQsIHN0cik7CisgICAgbmV0c25tcF9jb25maWdfd2FybigiJXMiLCBzdHIpOwogfQogCiAvKgpAQCAtMTQ4Nyw2ICsxNzM4LDEyIEBACiBjaGFyICAgICAgICAgICAqCiBza2lwX3doaXRlKGNoYXIgKnB0cikKIHsKKyAgICByZXR1cm4gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBza2lwX3doaXRlX2NvbnN0KHB0cikpOworfQorCitjb25zdCBjaGFyICAgICAqCitza2lwX3doaXRlX2NvbnN0KGNvbnN0IGNoYXIgKnB0cikKK3sKICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgd2hpbGUgKCpwdHIgIT0gMCAmJiBpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpwdHIpKQpAQCAtMTQ5OSw2ICsxNzU2LDEyIEBACiBjaGFyICAgICAgICAgICAqCiBza2lwX25vdF93aGl0ZShjaGFyICpwdHIpCiB7CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgc2tpcF9ub3Rfd2hpdGVfY29uc3QocHRyKSk7Cit9CisKK2NvbnN0IGNoYXIgICAgICoKK3NraXBfbm90X3doaXRlX2NvbnN0KGNvbnN0IGNoYXIgKnB0cikKK3sKICAgICBpZiAocHRyID09IE5VTEwpCiAgICAgICAgIHJldHVybiAoTlVMTCk7CiAgICAgd2hpbGUgKCpwdHIgIT0gMCAmJiAhaXNzcGFjZSgodW5zaWduZWQgY2hhcikqcHRyKSkKQEAgLTE1MTEsOSArMTc3NCwxNSBAQAogY2hhciAgICAgICAgICAgKgogc2tpcF90b2tlbihjaGFyICpwdHIpCiB7Ci0gICAgcHRyID0gc2tpcF93aGl0ZShwdHIpOwotICAgIHB0ciA9IHNraXBfbm90X3doaXRlKHB0cik7Ci0gICAgcHRyID0gc2tpcF93aGl0ZShwdHIpOworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosIHNraXBfdG9rZW5fY29uc3QocHRyKSk7Cit9CisKK2NvbnN0IGNoYXIgICAgICoKK3NraXBfdG9rZW5fY29uc3QoY29uc3QgY2hhciAqcHRyKQoreworICAgIHB0ciA9IHNraXBfd2hpdGVfY29uc3QocHRyKTsKKyAgICBwdHIgPSBza2lwX25vdF93aGl0ZV9jb25zdChwdHIpOworICAgIHB0ciA9IHNraXBfd2hpdGVfY29uc3QocHRyKTsKICAgICByZXR1cm4gKHB0cik7CiB9CiAKQEAgLTE1MzQsNiArMTgwMywxMiBAQAogY2hhciAgICAgICAgICAgKgogY29weV9ud29yZChjaGFyICpmcm9tLCBjaGFyICp0bywgaW50IGxlbikKIHsKKyAgICByZXR1cm4gTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCBjb3B5X253b3JkX2NvbnN0KGZyb20sIHRvLCBsZW4pKTsKK30KKworY29uc3QgY2hhciAgICAgICAgICAgKgorY29weV9ud29yZF9jb25zdChjb25zdCBjaGFyICpmcm9tLCBjaGFyICp0bywgaW50IGxlbikKK3sKICAgICBjaGFyICAgICAgICAgICAgcXVvdGU7CiAgICAgaWYgKCFmcm9tIHx8ICF0bykKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xNTYyLDcgKzE4MzcsNyBAQAogICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGZyb20rKzsKICAgICB9IGVsc2UgewotICAgICAgICB3aGlsZSAoKmZyb20gIT0gMCAmJiAhaXNzcGFjZSgqZnJvbSkpIHsKKyAgICAgICAgd2hpbGUgKCpmcm9tICE9IDAgJiYgIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKCpmcm9tKSkpIHsKICAgICAgICAgICAgIGlmICgoKmZyb20gPT0gJ1xcJykgJiYgKCooZnJvbSArIDEpICE9IDApKSB7CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA+IDApIHsgIC8qIGRvbid0IGNvcHkgYmV5b25kIGxlbiBieXRlcyAqLwogICAgICAgICAgICAgICAgICAgICAqdG8rKyA9ICooZnJvbSArIDEpOwpAQCAtMTU4Miw5ICsxODU3LDkgQEAKICAgICB9CiAgICAgaWYgKGxlbiA+IDApCiAgICAgICAgICp0byA9IDA7Ci0gICAgZnJvbSA9IHNraXBfd2hpdGUoZnJvbSk7CisgICAgZnJvbSA9IHNraXBfd2hpdGVfY29uc3QoZnJvbSk7CiAgICAgcmV0dXJuIChmcm9tKTsKLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogY29weV93b3JkICovCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvcHlfbndvcmQgKi8KIAogLyoKICAqIGNvcHlfd29yZApAQCAtMTY1NywyMCArMTkzMiw0MiBAQAogICAgIHJldHVybiBzYXZldG87CiB9CiAKLS8qCi0gKiByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZygpOiByZWFkcyBhbiBvY3RldCBzdHJpbmcgdGhhdCB3YXMKLSAqIHNhdmVkIGJ5IHRoZSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZygpIGZ1bmN0aW9uIAorLyoqCisgKiBSZWFkcyBhbiBvY3RldCBzdHJpbmcgdGhhdCB3YXMgc2F2ZWQgYnkgdGhlCisgKiByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZygpIGZ1bmN0aW9uLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIHJlYWRmcm9tIFBvaW50ZXIgdG8gdGhlIGlucHV0IGRhdGEgdG8gYmUgcGFyc2VkLgorICogQHBhcmFtW2luLG91dF0gc3RyICAgICAgUG9pbnRlciB0byB0aGUgb3V0cHV0IGJ1ZmZlciBwb2ludGVyLiBUaGUgZGF0YQorICogICB3cml0dGVuIHRvIHRoZSBvdXRwdXQgYnVmZmVyIHdpbGwgYmUgJ1wwJy10ZXJtaW5hdGVkLiBJZiAqc3RyID09IE5VTEwsCisgKiAgIGFuIG91dHB1dCBidWZmZXIgd2lsbCBiZSBhbGxvY2F0ZWQgdGhhdCBpcyBvbmUgYnl0ZSBsYXJnZXIgdGhhbiB0aGUKKyAqICAgZGF0YSBzdG9yZWQuCisgKiBAcGFyYW1baW4sb3V0XSBsZW4gICAgICBJZiBzdHIgIT0gTlVMTCwgKmxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyICpzdHIKKyAqICAgcG9pbnRzIGF0LiBJZiBzdHIgPT0gTlVMTCwgdGhlIHZhbHVlIHBhc3NlZCB2aWEgKmxlbiBpcyBpZ25vcmVkLgorICogICBCZWZvcmUgdGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgcmVhZCB3aWxsIGJlIHN0b3JlZAorICogICBpbiAqbGVuLiBJZiBhIGJ1ZmZlciBvdmVyZmxvdyBvY2N1cnMsICpsZW4gd2lsbCBiZSBzZXQgdG8gMC4KKyAqCisgKiBAcmV0dXJuIEEgcG9pbnRlciB0byB0aGUgbmV4dCBjaGFyYWN0ZXIgaW4gdGhlIGlucHV0IHRvIGJlIHBhcnNlZCBpZgorICogICBwYXJzaW5nIHN1Y2NlZWRlZDsgTlVMTCB3aGVuIHRoZSBlbmQgb2YgdGhlIGlucHV0IHN0cmluZyBoYXMgYmVlbiByZWFjaGVkCisgKiAgIG9yIGlmIGFuIGVycm9yIG9jY3VycmVkLgogICovCiBjaGFyICAgICAgICAgICAqCi1yZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhjaGFyICpyZWFkZnJvbSwgdV9jaGFyICoqIHN0ciwgc2l6ZV90ICogbGVuKQorcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoY29uc3QgY2hhciAqcmVhZGZyb20sIHVfY2hhciAqKiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pCiB7Ci0gICAgdV9jaGFyICAgICAgICAgKmNwdHIgPSBOVUxMOwotICAgIGNoYXIgICAgICAgICAgICpjcHRyMTsKLSAgICB1X2ludCAgICAgICAgICAgdG1wOwotICAgIGludCAgICAgICAgICAgICBpOwotICAgIHNpemVfdCAgICAgICAgICBpbGVuOworICAgIHJldHVybiBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosCisgICAgICAgICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChyZWFkZnJvbSwgc3RyLCBsZW4pKTsKK30KIAotICAgIGlmIChyZWFkZnJvbSA9PSBOVUxMIHx8IHN0ciA9PSBOVUxMKQorY29uc3QgY2hhciAgICAgKgorcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QoY29uc3QgY2hhciAqcmVhZGZyb20sIHVfY2hhciAqKiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pCit7CisgICAgdV9jaGFyICAgICAgICAgKmNwdHI7CisgICAgY29uc3QgY2hhciAgICAgKmNwdHIxOworICAgIHVfaW50ICAgICAgICAgICB0bXA7CisgICAgc2l6ZV90ICAgICAgICAgIGksIGlsZW47CisKKyAgICBpZiAocmVhZGZyb20gPT0gTlVMTCB8fCBzdHIgPT0gTlVMTCB8fCBsZW4gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CiAKICAgICBpZiAoc3RybmNhc2VjbXAocmVhZGZyb20sICIweCIsIDIpID09IDApIHsKQEAgLTE2NzgsNyArMTk3NSw3IEBACiAgICAgICAgICAqIEEgaGV4IHN0cmluZyBzdWJtaXR0ZWQuIEhvdyBsb25nPyAKICAgICAgICAgICovCiAgICAgICAgIHJlYWRmcm9tICs9IDI7Ci0gICAgICAgIGNwdHIxID0gc2tpcF9ub3Rfd2hpdGUocmVhZGZyb20pOworICAgICAgICBjcHRyMSA9IHNraXBfbm90X3doaXRlX2NvbnN0KHJlYWRmcm9tKTsKICAgICAgICAgaWYgKGNwdHIxKQogICAgICAgICAgICAgaWxlbiA9IChjcHRyMSAtIHJlYWRmcm9tKTsKICAgICAgICAgZWxzZQpAQCAtMTY5NiwzMSArMTk5MywyOSBAQAogICAgICAgICAgKiBtYWxsb2MgZGF0YSBzcGFjZSBpZiBuZWVkZWQgKCsxIGZvciBnb29kIG1lYXN1cmUpIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKCpzdHIgPT0gTlVMTCkgewotICAgICAgICAgICAgaWYgKChjcHRyID0gKHVfY2hhciAqKSBtYWxsb2MoaWxlbiArIDEpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAqc3RyID0gKHVfY2hhciAqKSBtYWxsb2MoaWxlbiArIDEpOworICAgICAgICAgICAgaWYgKCEqc3RyKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgKnN0ciA9IGNwdHI7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICogZG9uJ3QgcmVxdWlyZSBjYWxsZXIgdG8gaGF2ZSArMSBmb3IgZ29vZCBtZWFzdXJlLCBhbmQgCi0gICAgICAgICAgICAgKiBiYWlsIGlmIG5vdCBlbm91Z2ggc3BhY2UuCisgICAgICAgICAgICAgKiByZXF1aXJlIGNhbGxlciB0byBoYXZlICsxLCBhbmQgYmFpbCBpZiBub3QgZW5vdWdoIHNwYWNlLgogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoaWxlbiA+ICpsZW4pIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywiYnVmZmVyIHRvbyBzbWFsbCB0byByZWFkIG9jdGV0IHN0cmluZyAoJWQgPCAlZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgKmxlbiwgaWxlbik7CisgICAgICAgICAgICBpZiAoaWxlbiA+PSAqbGVuKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsImJ1ZmZlciB0b28gc21hbGwgdG8gcmVhZCBvY3RldCBzdHJpbmcgKCVsdSA8ICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKmxlbiwgKHVuc2lnbmVkIGxvbmcpaWxlbik7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KSIsICh1bnNpZ25lZCBsb25nKSpsZW4sICh1bnNpZ25lZCBsb25nKWlsZW4pKTsKLSAgICAgICAgICAgICAgICBjcHRyMSA9IHNraXBfbm90X3doaXRlKHJlYWRmcm9tKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gc2tpcF93aGl0ZShjcHRyMSk7CisgICAgICAgICAgICAgICAgKmxlbiA9IDA7CisgICAgICAgICAgICAgICAgY3B0cjEgPSBza2lwX25vdF93aGl0ZV9jb25zdChyZWFkZnJvbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHNraXBfd2hpdGVfY29uc3QoY3B0cjEpOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgY3B0ciA9ICpzdHI7CiAgICAgICAgIH0KLSAgICAgICAgKmxlbiA9IGlsZW47CiAKICAgICAgICAgLyoKICAgICAgICAgICogY29weSB2YWxpZGF0ZWQgZGF0YSAKICAgICAgICAgICovCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAoaW50KSAqbGVuOyBpKyspIHsKKyAgICAgICAgY3B0ciA9ICpzdHI7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpbGVuOyBpKyspIHsKICAgICAgICAgICAgIGlmICgxID09IHNzY2FuZihyZWFkZnJvbSwgIiUyeCIsICZ0bXApKQogICAgICAgICAgICAgICAgICpjcHRyKysgPSAodV9jaGFyKSB0bXA7CiAgICAgICAgICAgICBlbHNlIHsKQEAgLTE3MzIsMTMgKzIwMjcsMTEgQEAKICAgICAgICAgICAgIHJlYWRmcm9tICs9IDI7CiAgICAgICAgIH0KICAgICAgICAgLyoKLSAgICAgICAgICogb25seSBudWxsIHRlcm1pbmF0ZSBpZiB3ZSBoYXZlIHRoZSBzcGFjZQorICAgICAgICAgKiBUZXJtaW5hdGUgdGhlIG91dHB1dCBidWZmZXIuCiAgICAgICAgICAqLwotICAgICAgICBpZiAoaWxlbiA+ICpsZW4pIHsKLSAgICAgICAgICAgIGlsZW4gPSAqbGVuLTE7Ci0gICAgICAgICAgICAqY3B0cisrID0gJ1wwJzsKLSAgICAgICAgfQotICAgICAgICByZWFkZnJvbSA9IHNraXBfd2hpdGUocmVhZGZyb20pOworICAgICAgICAqY3B0cisrID0gJ1wwJzsKKyAgICAgICAgKmxlbiA9IGlsZW47CisgICAgICAgIHJlYWRmcm9tID0gc2tpcF93aGl0ZV9jb25zdChyZWFkZnJvbSk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgLyoKICAgICAgICAgICogTm9ybWFsIHN0cmluZyAKQEAgLTE3NDksMjUgKzIwNDIsMjMgQEAKICAgICAgICAgICovCiAgICAgICAgIGlmICgqc3RyID09IE5VTEwpIHsKICAgICAgICAgICAgIGNoYXIgICAgICAgICAgICBidWZbU05NUF9NQVhCVUZdOwotICAgICAgICAgICAgcmVhZGZyb20gPSBjb3B5X253b3JkKHJlYWRmcm9tLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgICAgIHJlYWRmcm9tID0gY29weV9ud29yZF9jb25zdChyZWFkZnJvbSwgYnVmLCBzaXplb2YoYnVmKSk7CiAKICAgICAgICAgICAgICpsZW4gPSBzdHJsZW4oYnVmKTsKLSAgICAgICAgICAgIGlmICgoY3B0ciA9ICh1X2NoYXIgKikgbWFsbG9jKCpsZW4gKyAxKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICpzdHIgPSAodV9jaGFyICopIG1hbGxvYygqbGVuICsgMSk7CisgICAgICAgICAgICBpZiAoKnN0ciA9PSBOVUxMKQogICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICAgICAgKnN0ciA9IGNwdHI7Ci0gICAgICAgICAgICBpZiAoY3B0cikgewotICAgICAgICAgICAgICAgIG1lbWNweShjcHRyLCBidWYsICpsZW4gKyAxKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG1lbWNweSgqc3RyLCBidWYsICpsZW4gKyAxKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlYWRmcm9tID0gY29weV9ud29yZChyZWFkZnJvbSwgKGNoYXIgKikgKnN0ciwgKmxlbik7Ci0gICAgICAgICAgICAqbGVuID0gc3RybGVuKChjaGFyICopICpzdHIpOworICAgICAgICAgICAgcmVhZGZyb20gPSBjb3B5X253b3JkX2NvbnN0KHJlYWRmcm9tLCAoY2hhciAqKSAqc3RyLCAqbGVuKTsKKyAgICAgICAgICAgIGlmICgqbGVuKQorICAgICAgICAgICAgICAgICpsZW4gPSBzdHJsZW4oKGNoYXIgKikgKnN0cik7CiAgICAgICAgIH0KICAgICB9CiAKICAgICByZXR1cm4gcmVhZGZyb207CiB9CiAKLQogLyoKICAqIHJlYWRfY29uZmlnX3NhdmVfb2JqaWQoKTogc2F2ZXMgYW4gb2JqaWQgYXMgYSBudW1lcmljYWwgc3RyaW5nIAogICovCkBAIC0xNzg2LDcgKzIwNzcsNyBAQAogICAgICAqIGluIGNhc2UgbGVuPTAsIHRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvIHJlYWQgaXQgYmFjayBpbiAKICAgICAgKi8KICAgICBmb3IgKGkgPSAwOyBpIDwgKGludCkgbGVuOyBpKyspIHsKLSAgICAgICAgc3ByaW50ZihzYXZldG8sICIuJWxkIiwgb2JqaWRbaV0pOworICAgICAgICBzcHJpbnRmKHNhdmV0bywgIi4lIiBORVRTTk1QX1BSSW8gImQiLCBvYmppZFtpXSk7CiAgICAgICAgIHNhdmV0byArPSBzdHJsZW4oc2F2ZXRvKTsKICAgICB9CiAgICAgcmV0dXJuIHNhdmV0bzsKQEAgLTE3OTgsNiArMjA4OSwxMyBAQAogY2hhciAgICAgICAgICAgKgogcmVhZF9jb25maWdfcmVhZF9vYmppZChjaGFyICpyZWFkZnJvbSwgb2lkICoqIG9iamlkLCBzaXplX3QgKiBsZW4pCiB7CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwKKyAgICAgICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KHJlYWRmcm9tLCBvYmppZCwgbGVuKSk7Cit9CisKK2NvbnN0IGNoYXIgICAgICoKK3JlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QoY29uc3QgY2hhciAqcmVhZGZyb20sIG9pZCAqKiBvYmppZCwgc2l6ZV90ICogbGVuKQorewogCiAgICAgaWYgKG9iamlkID09IE5VTEwgfHwgcmVhZGZyb20gPT0gTlVMTCB8fCBsZW4gPT0gTlVMTCkKICAgICAgICAgcmV0dXJuIE5VTEw7CkBAIC0xODE5LDcgKzIxMTcsNyBAQAogICAgICAgICAgKiBxdWFsaWZ5IHRoZSBzdHJpbmcgZm9yIHJlYWRfb2JqaWQgCiAgICAgICAgICAqLwogICAgICAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXTsKLSAgICAgICAgY29weV9ud29yZChyZWFkZnJvbSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGNvcHlfbndvcmRfY29uc3QocmVhZGZyb20sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCiAgICAgICAgIGlmICghcmVhZF9vYmppZChidWYsICpvYmppZCwgbGVuKSkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnX3JlYWRfb2JqaWQiLCAiSW52YWxpZCBPSUQiKSk7CkBAIC0xODI4LDcgKzIxMjYsNyBAQAogICAgICAgICB9CiAgICAgfQogCi0gICAgcmVhZGZyb20gPSBza2lwX3Rva2VuKHJlYWRmcm9tKTsKKyAgICByZWFkZnJvbSA9IHNraXBfdG9rZW5fY29uc3QocmVhZGZyb20pOwogICAgIHJldHVybiByZWFkZnJvbTsKIH0KIApAQCAtMTk3Miw3ICsyMjcwLDYgQEAKICAgICAgICAgcmV0dXJuIHJlYWRmcm9tOwogCiAgICAgY2FzZSBBU05fQ09VTlRFUjY0OgotICAgIHsKICAgICAgICAgaWYgKCpsZW4gPCBzaXplb2YoVTY0KSkKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICAqbGVuID0gc2l6ZW9mKFU2NCk7CkBAIC0xOTgxLDExICsyMjc4LDcgQEAKICAgICAgICAgcmV0dXJuIHJlYWRmcm9tOwogICAgIH0KIAotICAgIGRlZmF1bHQ6Ci0gICAgICAgIERFQlVHTVNHVEwoKCJyZWFkX2NvbmZpZ19yZWFkX21lbW9yeSIsICJGYWlsOiBVbmtub3duIHR5cGU6ICVkIiwKLSAgICAgICAgICAgICAgICAgICAgdHlwZSkpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9CisgICAgREVCVUdNU0dUTCgoInJlYWRfY29uZmlnX3JlYWRfbWVtb3J5IiwgIkZhaWw6IFVua25vd24gdHlwZTogJWQiLCB0eXBlKSk7CiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKQEAgLTIwNjksNCArMjM2Miw1IEBACiAgICAgICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KKwogLyoqIEB9ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3JlYWRkaXIuYyBiL3NubXBsaWIvcmVhZGRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzZmY4M2QKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3JlYWRkaXIuYwpAQCAtMCwwICsxLDUxIEBACisvKgorICogcmVhZGRpcigpIHJlcGxhY2VtZW50IGZvciBNU1ZDLgorICovCisKKyNkZWZpbmUgV0lOMzJJT19JU19TVERJTworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2lmZGVmIEhBVkVfU1lTX1NUQVRfSAorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDx0Y2hhci5oPgorI2luY2x1ZGUgPHdpbmRvd3MuaD4KKworCisvKgorICogUmVhZGRpciBqdXN0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RyaW5nIHBvaW50ZXIgYW5kIGJ1bXBzIHRoZQorICogKiBzdHJpbmcgcG9pbnRlciB0byB0aGUgbkRsbEV4cG9ydCBlbnRyeS4KKyAqLworc3RydWN0IGRpcmVjdCAgKgorcmVhZGRpcihESVIgKiBkaXJwKQoreworICAgIGludCAgICAgICAgICAgICBsZW47CisgICAgc3RhdGljIGludCAgICAgIGR1bW15ID0gMDsKKworICAgIGlmIChkaXJwLT5jdXJyKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGZpcnN0IHNldCB1cCB0aGUgc3RydWN0dXJlIHRvIHJldHVybiAKKyAgICAgICAgICovCisgICAgICAgIGxlbiA9IHN0cmxlbihkaXJwLT5jdXJyKTsKKyAgICAgICAgc3RyY3B5KGRpcnAtPmRpcnN0ci5kX25hbWUsIGRpcnAtPmN1cnIpOworICAgICAgICBkaXJwLT5kaXJzdHIuZF9uYW1sZW4gPSBsZW47CisKKyAgICAgICAgLyoKKyAgICAgICAgICogRmFrZSBhbiBpbm9kZSAKKyAgICAgICAgICovCisgICAgICAgIGRpcnAtPmRpcnN0ci5kX2lubyA9IGR1bW15Kys7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IHNldCB1cCBmb3IgdGhlIG5EbGxFeHBvcnQgY2FsbCB0byByZWFkZGlyIAorICAgICAgICAgKi8KKyAgICAgICAgZGlycC0+Y3VyciArPSBsZW4gKyAxOworICAgICAgICBpZiAoZGlycC0+Y3VyciA+PSAoZGlycC0+c3RhcnQgKyBkaXJwLT5zaXplKSkgeworICAgICAgICAgICAgZGlycC0+Y3VyciA9IE5VTEw7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gJihkaXJwLT5kaXJzdHIpOworICAgIH0gZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvc2NhcGkuYyBiL3NubXBsaWIvc2NhcGkuYwppbmRleCBkODM3YzUxLi4xNmFjODI5IDEwMDY0NAotLS0gYS9zbm1wbGliL3NjYXBpLmMKKysrIGIvc25tcGxpYi9zY2FwaS5jCkBAIC0xNSwxMSArMTUsOSBAQAogICovCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKQEAgLTI5LDExICsyNyw3IEBACiAjaW5jbHVkZSA8c3RyaW5ncy5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC01Nyw2ICs1MSwxMSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9zdXBwb3J0LCBsaWJuZXRzbm1wKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHVzbV9zY2FwaSwgdXNtX3N1cHBvcnQpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fU0NBUEkKKwogI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWQ1Lmg+CiAjZW5kaWYKQEAgLTY5LDYgKzY4LDEzIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9taWIuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CiAKKyNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfbWQ1Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9vcGVuc3NsX3NoYS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvb3BlbnNzbF9kZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L29wZW5zc2xfYWVzLmg+CisjZW5kaWYKKwogI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKICNpbmNsdWRlIDxvcGVuc3NsL2htYWMuaD4KICNpbmNsdWRlIDxvcGVuc3NsL2V2cC5oPgpAQCAtNzksNyArODUsNyBAQAogI2VuZGlmCiAKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUwotI2lmZGVmIFNUUlVDVF9ERVNfS1NfU1RSVUNUX0hBU19XRUFLX0tFWQorI2lmZGVmIEhBVkVfU1RSVUNUX0RFU19LU19TVFJVQ1RfV0VBS19LRVkKIC8qIHRoZXNlIGFyZSBvbGRlciBuYW1lcyBmb3IgbmV3ZXIgc3RydWN0dXJlcyB0aGF0IGV4aXN0IGluIG9wZW5zc2wgLjkuNyAqLwogI2RlZmluZSBERVNfa2V5X3NjaGVkdWxlICAgIGRlc19rZXlfc2NoZWR1bGUgCiAjZGVmaW5lIERFU19jYmxvY2sgICAgICAgICAgZGVzX2NibG9jayAKQEAgLTkyLDYgKzk4LDkgQEAKIAogI2VuZGlmIC8qIEhBVkVfT1BFTlNTTCAqLwogCisjaWZkZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisjZW5kaWYKKwogI2lmZGVmIE5FVFNOTVBfVVNFX1BLQ1MxMQogI2luY2x1ZGUgPHNlY3VyaXR5L2NyeXB0b2tpLmg+CiAjZW5kaWYKQEAgLTEwNSw2ICsxMTQsMTUgQEAKIAl9CiAjZW5kaWYKIAorI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworc3RhdGljCitpbnQgU0hBMV9obWFjKGNvbnN0IHVfY2hhciAqIGRhdGEsIHNpemVfdCBsZW4sIHVfY2hhciAqIG1hYywgc2l6ZV90IG1hY2xlbiwKKyAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKTsKKworc3RhdGljCitpbnQgTUQ1X2htYWMoY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuLAorICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHNlY3JldCwgc2l6ZV90IHNlY3JldGxlbik7CisjZW5kaWYKIAogLyoKICAqIHNjX2dldF9wcm9wZXJsZW5ndGgob2lkICpoYXNodHlwZSwgdV9pbnQgaGFzaHR5cGVfbGVuKToKQEAgLTEzMiw2ICsxNTAsOCBAQAogICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNjYXBpX2dldF9wcm9wZXJfcHJpdl9sZW5ndGgsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NDQVBJX0dFVF9QUk9QRVJfUFJJVl9MRU5HVEgKIGludAogc2NfZ2V0X3Byb3Blcl9wcml2X2xlbmd0aChjb25zdCBvaWQgKiBwcml2dHlwZSwgdV9pbnQgcHJpdnR5cGVfbGVuKQogewpAQCAtMTQ4LDYgKzE2OCw3IEBACiAjZW5kaWYKICAgICByZXR1cm4gcHJvcGVybGVuZ3RoOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU0NBUElfR0VUX1BST1BFUl9QUklWX0xFTkdUSCAqLwogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCkBAIC0xNjEsMTUgKzE4MiwxNSBAQAogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwogCi0jaWZuZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKLSNpZmRlZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUKKyNpZiAhZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKICAgICBzdHJ1Y3QgdGltZXZhbCAgdHY7CiAKICAgICBERUJVR1RSQUNFOwogCiAgICAgZ2V0dGltZW9mZGF5KCZ0diwgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKIAotICAgIHNyYW5kb20odHYudHZfc2VjIF4gdHYudHZfdXNlYyk7CisgICAgc3JhbmRvbSgodW5zaWduZWQpKHR2LnR2X3NlYyBeIHR2LnR2X3VzZWMpKTsKICNlbGlmIE5FVFNOTVBfVVNFX1BLQ1MxMQogICAgIERFQlVHVFJBQ0U7CiAgICAgcnZhbCA9IHBrY3NfaW5pdCgpOwpAQCAtMTk2LDEwICsyMTcsMTAgQEAKICAqLwogaW50CiBzY19yYW5kb20odV9jaGFyICogYnVmLCBzaXplX3QgKiBidWZsZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisjaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwotI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENQorI2lmICFkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmICFkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkKICAgICBpbnQgICAgICAgICAgICAgaTsKICAgICBpbnQgICAgICAgICAgICAgcm5kdmFsOwogICAgIHVfY2hhciAgICAgICAgICp1Y3AgPSBidWY7CkBAIC0yNjUsMTcgKzI4NiwxOCBAQAogICovCiBpbnQKIHNjX2dlbmVyYXRlX2tleWVkX2hhc2goY29uc3Qgb2lkICogYXV0aHR5cGUsIHNpemVfdCBhdXRodHlwZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG1lc3NhZ2UsIHVfaW50IG1zZ2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIG1lc3NhZ2UsIHVfaW50IG1zZ2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogTUFDLCBzaXplX3QgKiBtYWNsZW4pCi0jaWYgIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmICBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX1BLQ1MxMSkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7Ci0gICAgaW50ICAgICAgICAgICAgIHByb3Blcmxlbmd0aDsKKyAgICBpbnQgICAgICAgICAgICAgaXByb3Blcmxlbmd0aDsKKyAgICBzaXplX3QgICAgICAgICAgcHJvcGVybGVuZ3RoOwogCiAgICAgdV9jaGFyICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl9TTUFMTF07CiAjaWYgIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCi0gICAgc2l6ZV90ICAgICAgICAgICAgIGJ1Zl9sZW4gPSBzaXplb2YoYnVmKTsKKyAgICB1bnNpZ25lZCBpbnQgICAgYnVmX2xlbiA9IHNpemVvZihidWYpOwogI2VuZGlmCiAKICAgICBERUJVR1RSQUNFOwpAQCAtMzAwLDExICszMjIsMTEgQEAKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaF9xdWl0KTsKICAgICB9CiAKLSAgICBwcm9wZXJsZW5ndGggPSBzY19nZXRfcHJvcGVybGVuZ3RoKGF1dGh0eXBlLCBhdXRodHlwZWxlbik7Ci0gICAgaWYgKHByb3Blcmxlbmd0aCA9PSBTTk1QRVJSX0dFTkVSUikKLSAgICAgICAgcmV0dXJuIHByb3Blcmxlbmd0aDsKLQotICAgIGlmICgoKGludCkga2V5bGVuIDwgcHJvcGVybGVuZ3RoKSkgeworICAgIGlwcm9wZXJsZW5ndGggPSBzY19nZXRfcHJvcGVybGVuZ3RoKGF1dGh0eXBlLCBhdXRodHlwZWxlbik7CisgICAgaWYgKGlwcm9wZXJsZW5ndGggPT0gU05NUEVSUl9HRU5FUlIpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICBwcm9wZXJsZW5ndGggPSAoc2l6ZV90KWlwcm9wZXJsZW5ndGg7CisgICAgaWYgKGtleWxlbiA8IHByb3Blcmxlbmd0aCkgewogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBzY19nZW5lcmF0ZV9rZXllZF9oYXNoX3F1aXQpOwogICAgIH0KICNpZmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMCkBAIC0zMjEsMTAgKzM0MywxMCBAQAogICAgIGVsc2UgewogICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBzY19nZW5lcmF0ZV9rZXllZF9oYXNoX3F1aXQpOwogICAgIH0KLSAgICBpZiAoKGludClidWZfbGVuICE9IHByb3Blcmxlbmd0aCkgeworICAgIGlmIChidWZfbGVuICE9IHByb3Blcmxlbmd0aCkgewogICAgICAgICBRVUlURlVOKHJ2YWwsIHNjX2dlbmVyYXRlX2tleWVkX2hhc2hfcXVpdCk7CiAgICAgfQotICAgIGlmICgoaW50KSptYWNsZW4gPiBidWZfbGVuKQorICAgIGlmICgqbWFjbGVuID4gYnVmX2xlbikKICAgICAgICAgKm1hY2xlbiA9IGJ1Zl9sZW47CiAgICAgbWVtY3B5KE1BQywgYnVmLCAqbWFjbGVuKTsKIApAQCAtMzU0LDggKzM3NiwyNSBAQAogICAgICAgICAqbWFjbGVuID0gYnVmX2xlbjsKICAgICBtZW1jcHkoTUFDLCBidWYsICptYWNsZW4pOwogCisjZWxpZiBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8KKyAgICBpZiAoKm1hY2xlbiA+IHByb3Blcmxlbmd0aCkKKyAgICAgICAgKm1hY2xlbiA9IHByb3Blcmxlbmd0aDsKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQorICAgIGlmIChJU1RSQU5TRk9STShhdXRodHlwZSwgSE1BQ01ENUF1dGgpKQorICAgICAgICBydmFsID0gTUQ1X2htYWMobWVzc2FnZSwgbXNnbGVuLCBNQUMsICptYWNsZW4sIGtleSwga2V5bGVuKTsKKyAgICBlbHNlCisjZW5kaWYKKyAgICAgICAgIGlmIChJU1RSQU5TRk9STShhdXRodHlwZSwgSE1BQ1NIQTFBdXRoKSkKKyAgICAgICAgcnZhbCA9IFNIQTFfaG1hYyhtZXNzYWdlLCBtc2dsZW4sIE1BQywgKm1hY2xlbiwga2V5LCBrZXlsZW4pOworICAgIGVsc2UgeworICAgICAgICBRVUlURlVOKFNOTVBFUlJfR0VORVJSLCBzY19nZW5lcmF0ZV9rZXllZF9oYXNoX3F1aXQpOworICAgIH0KKyAgICBpZiAocnZhbCAhPSAwKSB7CisgICAgICAgIHJ2YWwgPSBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgZ290byBzY19nZW5lcmF0ZV9rZXllZF9oYXNoX3F1aXQ7CisgICAgfSAgICAKICNlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfVVNFX0lOVEVSTkFMX01ENSAqLwotICAgIGlmICgoaW50KSAqbWFjbGVuID4gcHJvcGVybGVuZ3RoKQorICAgIGlmICgqbWFjbGVuID4gcHJvcGVybGVuZ3RoKQogICAgICAgICAqbWFjbGVuID0gcHJvcGVybGVuZ3RoOwogICAgIGlmIChNRHNpZ24obWVzc2FnZSwgbXNnbGVuLCBNQUMsICptYWNsZW4sIGtleSwga2V5bGVuKSkgewogICAgICAgICBydmFsID0gU05NUEVSUl9HRU5FUlI7CkBAIC0zOTksMTQgKzQzOCwxNyBAQAogICogUmV0dXJuczoKICAqIFNOTVBFUlJfU1VDQ0VTUyAgICAgICAgICAgICAgU3VjY2Vzcy4KICAqIFNOTVBfU0NfR0VORVJBTF9GQUlMVVJFICAgICAgQW55IGVycm9yLgorICogU05NUEVSUl9TQ19OT1RfQ09ORklHVVJFRCAgICBIYXNoIHR5cGUgbm90IHN1cHBvcnRlZC4KICAqLwogaW50Ci1zY19oYXNoKGNvbnN0IG9pZCAqIGhhc2h0eXBlLCBzaXplX3QgaGFzaHR5cGVsZW4sIHVfY2hhciAqIGJ1ZiwKK3NjX2hhc2goY29uc3Qgb2lkICogaGFzaHR5cGUsIHNpemVfdCBoYXNodHlwZWxlbiwgY29uc3QgdV9jaGFyICogYnVmLAogICAgICAgICBzaXplX3QgYnVmX2xlbiwgdV9jaGFyICogTUFDLCBzaXplX3QgKiBNQUNfbGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKLSNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogICAgIGludCAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1M7CisjZW5kaWYKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKQogICAgIHVuc2lnbmVkIGludCAgIHRtcF9sZW47CiAjZW5kaWYKICAgICBpbnQgICAgICAgICAgICByZXQ7CkBAIC00MTUsMTQgKzQ1NywxNyBAQAogICAgIGNvbnN0IEVWUF9NRCAgICpoYXNoZm47CiAgICAgRVZQX01EX0NUWCAgICAgKmNwdHI7CiAjZW5kaWYKLQorI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworICAgIE1ENV9DVFggICAgICAgIGNtZDU7CisgICAgU0hBX0NUWCAgICAgICAgY3NoYTE7CisjZW5kaWYKICAgICBERUJVR1RSQUNFOwogCi0gICAgaWYgKGhhc2h0eXBlID09IE5VTEwgfHwgaGFzaHR5cGVsZW4gPCAwIHx8IGJ1ZiA9PSBOVUxMIHx8Ci0gICAgICAgIGJ1Zl9sZW4gPD0gMCB8fCBNQUMgPT0gTlVMTCB8fCBNQUNfbGVuID09IE5VTEwgKQorICAgIGlmIChoYXNodHlwZSA9PSBOVUxMIHx8IGJ1ZiA9PSBOVUxMIHx8IGJ1Zl9sZW4gPD0gMCB8fAorICAgICAgICBNQUMgPT0gTlVMTCB8fCBNQUNfbGVuID09IE5VTEwgKQogICAgICAgICByZXR1cm4gKFNOTVBFUlJfR0VORVJSKTsKICAgICByZXQgPSBzY19nZXRfcHJvcGVybGVuZ3RoKGhhc2h0eXBlLCBoYXNodHlwZWxlbik7Ci0gICAgaWYgKCggcmV0IDwgMCApIHx8ICgqTUFDX2xlbiA8IHJldCApKQorICAgIGlmICgoIHJldCA8IDAgKSB8fCAoKk1BQ19sZW4gPCAoc2l6ZV90KXJldCApKQogICAgICAgICByZXR1cm4gKFNOTVBFUlJfR0VORVJSKTsKIAogI2lmZGVmIE5FVFNOTVBfVVNFX09QRU5TU0wKQEAgLTQ1MSw3ICs0OTYsMTAgQEAKICAgICBFVlBfTURfQ1RYX2luaXQoY3B0cik7CiAjZW5kaWYKICNlbmRpZgotICAgIEVWUF9EaWdlc3RJbml0KGNwdHIsIGhhc2hmbik7CisgICAgaWYgKCFFVlBfRGlnZXN0SW5pdChjcHRyLCBoYXNoZm4pKSB7CisgICAgICAgIC8qIHJlcXVlc3RlZCBoYXNoIGZ1bmN0aW9uIGlzIG5vdCBhdmFpbGFibGUgKi8KKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU0NfTk9UX0NPTkZJR1VSRUQ7CisgICAgfQogCiAvKiogcGFzcyB0aGUgZGF0YSAqLwogICAgIEVWUF9EaWdlc3RVcGRhdGUoY3B0ciwgYnVmLCBidWZfbGVuKTsKQEAgLTQ2OCw2ICs1MTYsMzAgQEAKICAgICBmcmVlKGNwdHIpOwogI2VuZGlmCiAgICAgcmV0dXJuIChydmFsKTsKKworI2VsaWYgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKKyAgICBpZiAoSVNUUkFOU0ZPUk0oaGFzaHR5cGUsIEhNQUNNRDVBdXRoKSkgeworICAgICAgICBpZiAoKk1BQ19sZW4gPCBNRDVfRElHRVNUX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAoU05NUEVSUl9HRU5FUlIpOyAgICAgIC8qIHRoZSBidWZmZXIgaXNuJ3QgYmlnIGVub3VnaCAqLworCU1ENV9Jbml0KCZjbWQ1KTsKKyAgICAgICAgTUQ1X1VwZGF0ZSgmY21kNSwgYnVmLCBidWZfbGVuKTsKKyAgICAgICAgTUQ1X0ZpbmFsKE1BQywgJmNtZDUpOworICAgICAgICAqTUFDX2xlbiA9IE1ENV9ESUdFU1RfTEVOR1RIOworICAgIH0gZWxzZSAKKyNlbmRpZgorICAgIGlmIChJU1RSQU5TRk9STShoYXNodHlwZSwgSE1BQ1NIQTFBdXRoKSkgeworICAgICAgICBpZiAoKk1BQ19sZW4gPCBTSEFfRElHRVNUX0xFTkdUSCkKKyAgICAgICAgICAgIHJldHVybiAoU05NUEVSUl9HRU5FUlIpOyAgICAgIC8qIHRoZSBidWZmZXIgaXNuJ3QgYmlnIGVub3VnaCAqLworCVNIQTFfSW5pdCgmY3NoYTEpOworICAgICAgICBTSEExX1VwZGF0ZSgmY3NoYTEsIGJ1ZiwgYnVmX2xlbik7CisgICAgICAgIFNIQTFfRmluYWwoTUFDLCAmY3NoYTEpOworICAgICAgICAqTUFDX2xlbiA9IFNIQV9ESUdFU1RfTEVOR1RIOworICAgICAgICAgICAgCisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIChTTk1QRVJSX0dFTkVSUik7CisgICAgfQorICAgIHJldHVybiAocnZhbCk7CiAjZWxpZiBORVRTTk1QX1VTRV9QS0NTMTEgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1VTRV9QS0NTMTEgKi8KIAogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CkBAIC01MjQsMTAgKzU5NiwxMCBAQAogICovCiBpbnQKIHNjX2NoZWNrX2tleWVkX2hhc2goY29uc3Qgb2lkICogYXV0aHR5cGUsIHNpemVfdCBhdXRodHlwZWxlbiwKLSAgICAgICAgICAgICAgICAgICAgdV9jaGFyICoga2V5LCB1X2ludCBrZXlsZW4sCi0gICAgICAgICAgICAgICAgICAgIHVfY2hhciAqIG1lc3NhZ2UsIHVfaW50IG1zZ2xlbiwKLSAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogTUFDLCB1X2ludCBtYWNsZW4pCi0jaWYgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9QS0NTMTEpCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAorICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiBtZXNzYWdlLCB1X2ludCBtc2dsZW4sCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIE1BQywgdV9pbnQgbWFjbGVuKQorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1KSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfUEtDUzExKSB8fCBkZWZpbmVkKE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTykKIHsKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IFNOTVBfTUFYQlVGX1NNQUxMOwpAQCAtNTU1LDEwICs2MjcsMTEgQEAKICAgICAgICAgUVVJVEZVTihTTk1QRVJSX0dFTkVSUiwgc2NfY2hlY2tfa2V5ZWRfaGFzaF9xdWl0KTsKICAgICB9CiAKKwogICAgIGlmIChtYWNsZW4gIT0gVVNNX01ENV9BTkRfU0hBX0FVVEhfTEVOKSB7CiAgICAgICAgIFFVSVRGVU4oU05NUEVSUl9HRU5FUlIsIHNjX2NoZWNrX2tleWVkX2hhc2hfcXVpdCk7CiAgICAgfQotCisgICAgCiAgICAgLyoKICAgICAgKiBHZW5lcmF0ZSBhIGZ1bGwgaGFzaCBvZiB0aGUgbWVzc2FnZSwgdGhlbiBjb21wYXJlCiAgICAgICogdGhlIHJlc3VsdCB3aXRoIHRoZSBnaXZlbiBNQUMgd2hpY2ggbWF5IHNob3J0ZXIgdGhhbgpAQCAtNjE2LDkgKzY4OSw5IEBACiBzY19lbmNyeXB0KGNvbnN0IG9pZCAqIHByaXZ0eXBlLCBzaXplX3QgcHJpdnR5cGVsZW4sCiAgICAgICAgICAgIHVfY2hhciAqIGtleSwgdV9pbnQga2V5bGVuLAogICAgICAgICAgICB1X2NoYXIgKiBpdiwgdV9pbnQgaXZsZW4sCi0gICAgICAgICAgIHVfY2hhciAqIHBsYWludGV4dCwgdV9pbnQgcHRsZW4sCisgICAgICAgICAgIGNvbnN0IHVfY2hhciAqIHBsYWludGV4dCwgdV9pbnQgcHRsZW4sCiAgICAgICAgICAgIHVfY2hhciAqIGNpcGhlcnRleHQsIHNpemVfdCAqIGN0bGVuKQotI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpIHx8IGRlZmluZWQoTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPKQogewogICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTOwogICAgIHVfaW50ICAgICAgICAgICBwcm9wZXJsZW5ndGggPSAwLCBwcm9wZXJsZW5ndGhfaXYgPSAwOwpAQCAtODkxLDcgKzk2NCw3IEBACiAgICAgICAgICAgIHVfY2hhciAqIGl2LCB1X2ludCBpdmxlbiwKICAgICAgICAgICAgdV9jaGFyICogY2lwaGVydGV4dCwgdV9pbnQgY3RsZW4sCiAgICAgICAgICAgIHVfY2hhciAqIHBsYWludGV4dCwgc2l6ZV90ICogcHRsZW4pCi0jaWZkZWYgTkVUU05NUF9VU0VfT1BFTlNTTAorI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgfHwgZGVmaW5lZChORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8pCiB7CiAKICAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKQEAgLTEwNzEsMyArMTE0NCwyMjAgQEAKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICovCiB9CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIE5FVFNOTVBfVVNFX09QRU5TU0wgKi8KKworI2lmZGVmIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTworCisvKiBUaGVzZSBmdW5jdGlvbnMgYXJlIGJhc2ljYWxseSBjb3BpZXMgb2YgdGhlIE1EU2lnbigpIHJvdXRpbmUgaW4KKyAgIG1kNS5jIG1vZGlmaWVkIHRvIGJlIHVzZWQgd2l0aCB0aGUgT3BlblNTTCBoYXNoaW5nIGZ1bmN0aW9ucy4gIFRoZQorICAgY29weXJpZ2h0IGJlbG93IGlzIGZyb20gdGhlIG1kNS5jIGZpbGUgdGhhdCB0aGVzZSBmdW5jdGlvbnMgd2VyZQorICAgdGFrZW4gZnJvbTogKi8KKworLyoKKyAqICoqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAqKiBtZDUuYyAtLSBJbXBsZW1lbnRhdGlvbiBvZiBNRDUgTWVzc2FnZSBEaWdlc3QgQWxnb3JpdGhtICAgICAgICAgICAgICAgICAqKgorICogKiogVXBkYXRlZDogMi8xNi85MCBieSBSb25hbGQgTC4gUml2ZXN0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioKKyAqICoqIChDKSAxOTkwIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqCisgKiAqKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICovCisKKy8qCisgKiBNRDVfaG1hYyhkYXRhLCBsZW4sIE1ENSk6IGRvIGEgY2hlY2tzdW0gb24gYW4gYXJiaXJ0cmFyeSBhbW91bnQKKyAqIG9mIGRhdGEsIGFuZCBwcmVwZW5kZWQgd2l0aCBhIHNlY3JldCBpbiB0aGUgc3RhbmRhcmQgZmFzaGlvbiAKKyAqLworc3RhdGljIGludAorTUQ1X2htYWMoY29uc3QgdV9jaGFyICogZGF0YSwgc2l6ZV90IGxlbiwgdV9jaGFyICogbWFjLCBzaXplX3QgbWFjbGVuLAorICAgICAgICAgY29uc3QgdV9jaGFyICogc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKQoreworI2RlZmluZSBNRDVfSEFTSEtFWUxFTiA2NAorI2RlZmluZSBNRDVfU0VDUkVUS0VZTEVOIDE2CisKKyAgICBNRDVfQ1RYICAgICAgICAgY21kNTsKKyAgICB1X2NoYXIgICAgICAgICAgSzFbTUQ1X0hBU0hLRVlMRU5dOworICAgIHVfY2hhciAgICAgICAgICBLMltNRDVfSEFTSEtFWUxFTl07CisgICAgdV9jaGFyICAgICAgICAgIGV4dGVuZGVkQXV0aEtleVtNRDVfSEFTSEtFWUxFTl07CisgICAgdV9jaGFyICAgICAgICAgIGJ1ZltNRDVfSEFTSEtFWUxFTl07CisgICAgc2l6ZV90ICAgICAgICAgIGk7CisgICAgY29uc3QgdV9jaGFyICAgKmNwOworICAgIHVfY2hhciAgICAgICAgICpuZXdkYXRhID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiBtZW1zZXQoSzEsMCxNRDVfSEFTSEtFWUxFTik7CisgICAgICogbWVtc2V0KEsyLDAsTUQ1X0hBU0hLRVlMRU4pOworICAgICAqIG1lbXNldChidWYsMCxNRDVfSEFTSEtFWUxFTik7CisgICAgICogbWVtc2V0KGV4dGVuZGVkQXV0aEtleSwwLE1ENV9IQVNIS0VZTEVOKTsKKyAgICAgKi8KKworICAgIGlmIChzZWNyZXRsZW4gIT0gTUQ1X1NFQ1JFVEtFWUxFTiB8fCBzZWNyZXQgPT0gTlVMTCB8fAorICAgICAgICBtYWMgPT0gTlVMTCB8fCBkYXRhID09IE5VTEwgfHwKKyAgICAgICAgbGVuIDw9IDAgfHwgbWFjbGVuIDw9IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogREVCVUdNU0dUTCgoIm1kNSIsIk1ENSBzaWduaW5nIG5vdCBwcm9wZXJseSBpbml0aWFsaXplZCIpKTsgCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgbWVtc2V0KGV4dGVuZGVkQXV0aEtleSwgMCwgTUQ1X0hBU0hLRVlMRU4pOworICAgIG1lbWNweShleHRlbmRlZEF1dGhLZXksIHNlY3JldCwgc2VjcmV0bGVuKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgTUQ1X0hBU0hLRVlMRU47IGkrKykgeworICAgICAgICBLMVtpXSA9IGV4dGVuZGVkQXV0aEtleVtpXSBeIDB4MzY7CisgICAgICAgIEsyW2ldID0gZXh0ZW5kZWRBdXRoS2V5W2ldIF4gMHg1YzsKKyAgICB9CisKKyAgICBNRDVfSW5pdCgmY21kNSk7CisgICAgcmMgPSAhTUQ1X1VwZGF0ZSgmY21kNSwgSzEsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKworICAgIGkgPSBsZW47CisgICAgaWYgKCgodWludHB0cl90KSBkYXRhKSAlIHNpemVvZihsb25nKSAhPSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHRoaXMgcmVsaWVzIG9uIHRoZSBhYmlsaXR5IHRvIHVzZSBpbnRlZ2VyIG1hdGggYW5kIHRodXMgd2UKKyAgICAgICAgICogbXVzdCByZWx5IG9uIGRhdGEgdGhhdCBhbGlnbnMgb24gMzItYml0LXdvcmQtYm91bmRyaWVzIAorICAgICAgICAgKi8KKyAgICAgICAgbmV3ZGF0YSA9IG5ldHNubXBfbWVtZHVwKGRhdGEsIGxlbik7CisgICAgICAgIGNwID0gbmV3ZGF0YTsKKyAgICB9IGVsc2UgeworICAgICAgICBjcCA9IGRhdGE7CisgICAgfQorCisgICAgd2hpbGUgKGkgPj0gNjQpIHsKKyAgICAgICAgcmMgPSAhTUQ1X1VwZGF0ZSgmY21kNSwgY3AsIDY0KTsKKyAgICAgICAgaWYgKHJjKQorICAgICAgICAgICAgZ290byB1cGRhdGVfZW5kOworICAgICAgICBjcCArPSA2NDsKKyAgICAgICAgaSAtPSA2NDsKKyAgICB9CisKKyAgICByYyA9ICFNRDVfVXBkYXRlKCZjbWQ1LCBjcCwgaSk7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisKKyAgICBtZW1zZXQoYnVmLCAwLCBNRDVfSEFTSEtFWUxFTik7CisgICAgTUQ1X0ZpbmFsKGJ1ZiwgJmNtZDUpOworCisgICAgTUQ1X0luaXQoJmNtZDUpOworICAgIHJjID0gIU1ENV9VcGRhdGUoJmNtZDUsIEsyLCBNRDVfSEFTSEtFWUxFTik7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisgICAgcmMgPSAhTUQ1X1VwZGF0ZSgmY21kNSwgYnVmLCBNRDVfU0VDUkVUS0VZTEVOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKworICAgIC8qCisgICAgICogY29weSB0aGUgc2lnbiBjaGVja3N1bSB0byB0aGUgb3V0Z29pbmcgcG9pbnRlciAKKyAgICAgKi8KKyAgICBNRDVfRmluYWwoYnVmLCAmY21kNSk7CisgICAgbWVtY3B5KG1hYywgYnVmLCBtYWNsZW4pOworCisgIHVwZGF0ZV9lbmQ6CisgICAgbWVtc2V0KGJ1ZiwgMCwgTUQ1X0hBU0hLRVlMRU4pOworICAgIG1lbXNldChLMSwgMCwgTUQ1X0hBU0hLRVlMRU4pOworICAgIG1lbXNldChLMiwgMCwgTUQ1X0hBU0hLRVlMRU4pOworICAgIG1lbXNldChleHRlbmRlZEF1dGhLZXksIDAsIE1ENV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoJmNtZDUsIDAsIHNpemVvZihjbWQ1KSk7CisKKyAgICBpZiAobmV3ZGF0YSkKKyAgICAgICAgZnJlZShuZXdkYXRhKTsKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQKK1NIQTFfaG1hYyhjb25zdCB1X2NoYXIgKiBkYXRhLCBzaXplX3QgbGVuLCB1X2NoYXIgKiBtYWMsIHNpemVfdCBtYWNsZW4sCisgICAgICAgICAgY29uc3QgdV9jaGFyICogc2VjcmV0LCBzaXplX3Qgc2VjcmV0bGVuKQoreworI2RlZmluZSBTSEExX0hBU0hLRVlMRU4gICA2NAorI2RlZmluZSBTSEExX1NFQ1JFVEtFWUxFTiAyMAorCisgICAgU0hBX0NUWCAgICAgICAgIGNzaGExOworICAgIHVfY2hhciAgICAgICAgICBLMVtTSEExX0hBU0hLRVlMRU5dOworICAgIHVfY2hhciAgICAgICAgICBLMltTSEExX0hBU0hLRVlMRU5dOworICAgIHVfY2hhciAgICAgICAgICBleHRlbmRlZEF1dGhLZXlbU0hBMV9IQVNIS0VZTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAgYnVmW1NIQTFfSEFTSEtFWUxFTl07CisgICAgc2l6ZV90ICAgICAgICAgIGk7CisgICAgY29uc3QgdV9jaGFyICAgKmNwOworICAgIHVfY2hhciAgICAgICAgICpuZXdkYXRhID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOworCisgICAgLyoKKyAgICAgKiBtZW1zZXQoSzEsMCxTSEExX0hBU0hLRVlMRU4pOworICAgICAqIG1lbXNldChLMiwwLFNIQTFfSEFTSEtFWUxFTik7CisgICAgICogbWVtc2V0KGJ1ZiwwLFNIQTFfSEFTSEtFWUxFTik7CisgICAgICogbWVtc2V0KGV4dGVuZGVkQXV0aEtleSwwLFNIQTFfSEFTSEtFWUxFTik7CisgICAgICovCisKKyAgICBpZiAoc2VjcmV0bGVuICE9IFNIQTFfU0VDUkVUS0VZTEVOIHx8IHNlY3JldCA9PSBOVUxMIHx8CisgICAgICAgIG1hYyA9PSBOVUxMIHx8IGRhdGEgPT0gTlVMTCB8fAorICAgICAgICBsZW4gPD0gMCB8fCBtYWNsZW4gPD0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBERUJVR01TR1RMKCgic2hhMSIsIlNIQTEgc2lnbmluZyBub3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQiKSk7IAorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIG1lbXNldChleHRlbmRlZEF1dGhLZXksIDAsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgbWVtY3B5KGV4dGVuZGVkQXV0aEtleSwgc2VjcmV0LCBzZWNyZXRsZW4pOworICAgIGZvciAoaSA9IDA7IGkgPCBTSEExX0hBU0hLRVlMRU47IGkrKykgeworICAgICAgICBLMVtpXSA9IGV4dGVuZGVkQXV0aEtleVtpXSBeIDB4MzY7CisgICAgICAgIEsyW2ldID0gZXh0ZW5kZWRBdXRoS2V5W2ldIF4gMHg1YzsKKyAgICB9CisKKyAgICBTSEExX0luaXQoJmNzaGExKTsKKyAgICByYyA9ICFTSEExX1VwZGF0ZSgmY3NoYTEsIEsxLCBTSEExX0hBU0hLRVlMRU4pOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworCisgICAgaSA9IGxlbjsKKyAgICBpZiAoKCh1aW50cHRyX3QpIGRhdGEpICUgc2l6ZW9mKGxvbmcpICE9IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhpcyByZWxpZXMgb24gdGhlIGFiaWxpdHkgdG8gdXNlIGludGVnZXIgbWF0aCBhbmQgdGh1cyB3ZQorICAgICAgICAgKiBtdXN0IHJlbHkgb24gZGF0YSB0aGF0IGFsaWducyBvbiAzMi1iaXQtd29yZC1ib3VuZHJpZXMgCisgICAgICAgICAqLworICAgICAgICBuZXdkYXRhID0gbmV0c25tcF9tZW1kdXAoZGF0YSwgbGVuKTsKKyAgICAgICAgY3AgPSBuZXdkYXRhOworICAgIH0gZWxzZSB7CisgICAgICAgIGNwID0gZGF0YTsKKyAgICB9CisKKyAgICB3aGlsZSAoaSA+PSA2NCkgeworICAgICAgICByYyA9ICFTSEExX1VwZGF0ZSgmY3NoYTEsIGNwLCA2NCk7CisgICAgICAgIGlmIChyYykKKyAgICAgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKyAgICAgICAgY3AgKz0gNjQ7CisgICAgICAgIGkgLT0gNjQ7CisgICAgfQorCisgICAgcmMgPSAhU0hBMV9VcGRhdGUoJmNzaGExLCBjcCwgaSk7CisgICAgaWYgKHJjKQorICAgICAgICBnb3RvIHVwZGF0ZV9lbmQ7CisKKyAgICBtZW1zZXQoYnVmLCAwLCBTSEExX0hBU0hLRVlMRU4pOworICAgIFNIQTFfRmluYWwoYnVmLCAmY3NoYTEpOworCisgICAgU0hBMV9Jbml0KCZjc2hhMSk7CisgICAgcmMgPSAhU0hBMV9VcGRhdGUoJmNzaGExLCBLMiwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBpZiAocmMpCisgICAgICAgIGdvdG8gdXBkYXRlX2VuZDsKKyAgICByYyA9ICFTSEExX1VwZGF0ZSgmY3NoYTEsIGJ1ZiwgU0hBMV9TRUNSRVRLRVlMRU4pOworICAgIGlmIChyYykKKyAgICAgICAgZ290byB1cGRhdGVfZW5kOworCisgICAgLyoKKyAgICAgKiBjb3B5IHRoZSBzaWduIGNoZWNrc3VtIHRvIHRoZSBvdXRnb2luZyBwb2ludGVyIAorICAgICAqLworICAgIFNIQTFfRmluYWwoYnVmLCAmY3NoYTEpOworICAgIG1lbWNweShtYWMsIGJ1ZiwgbWFjbGVuKTsKKworICB1cGRhdGVfZW5kOgorICAgIG1lbXNldChidWYsIDAsIFNIQTFfSEFTSEtFWUxFTik7CisgICAgbWVtc2V0KEsxLCAwLCBTSEExX0hBU0hLRVlMRU4pOworICAgIG1lbXNldChLMiwgMCwgU0hBMV9IQVNIS0VZTEVOKTsKKyAgICBtZW1zZXQoZXh0ZW5kZWRBdXRoS2V5LCAwLCBTSEExX0hBU0hLRVlMRU4pOworICAgIG1lbXNldCgmY3NoYTEsIDAsIHNpemVvZihjc2hhMSkpOworCisgICAgaWYgKG5ld2RhdGEpCisgICAgICAgIGZyZWUobmV3ZGF0YSk7CisgICAgcmV0dXJuIHJjOworfQorI2VuZGlmIC8qIE5FVFNOTVBfVVNFX0lOVEVSTkFMX0NSWVBUTyAqLworI2VuZGlmIC8qICBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VTTV9TQ0FQSSAgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcC10Yy5jIGIvc25tcGxpYi9zbm1wLXRjLmMKaW5kZXggZWZhNTQwMi4uODkxYzNhMCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wLXRjLmMKKysrIGIvc25tcGxpYi9zbm1wLXRjLmMKQEAgLTUsMTAgKzUsOCBAQAogCiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCiAjaWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCkBAIC0xNiwxNiArMTQsMTIgQEAKICNpZiBIQVZFX1NUUklOR19ICiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAjZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+CisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotI2lmZGVmIFdJTjMyCi0jIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotI2Vsc2UKICMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSNlbmRpZgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTM5LDYgKzMzLDE0IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wLXRjLmg+ICAgLyogZm9yICJpbnRlcm5hbCIgZGVmaW5pdGlvbnMgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX3RjX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG5ldHNubXBfZGF0ZWFuZHRpbWVfc2V0X2J1Zl9mcm9tX3ZhcnMsIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGRhdGVfbl90aW1lLCBzbm1wX3RjX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjdGltZV90b190aW1ldCwgc25tcF90Y19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfcm93c3RhdHVzX3dpdGhfc3RvcmFnZXR5cGVfdHJhbnNpdGlvbiwgc25tcF90Y19hbGwpCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0RBVEVBTkRUSU1FX1NFVF9CVUZfRlJPTV9WQVJTCiAvKgogICBEYXRlQW5kVGltZSA6Oj0gVEVYVFVBTC1DT05WRU5USU9OCiAgICAgRElTUExBWS1ISU5UICIyZC0xZC0xZCwxZDoxZDoxZC4xZCwxYTFkOjFkIgpAQCAtMTE5LDkgKzEyMSwxMSBAQAogCiAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfREFURUFORFRJTUVfU0VUX0JVRl9GUk9NX1ZBUlMgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RBVEVfTl9USU1FCiB1X2NoYXIgICAgICAgICAqCi1kYXRlX25fdGltZSh0aW1lX3QgKiB3aGVuLCBzaXplX3QgKiBsZW5ndGgpCitkYXRlX25fdGltZShjb25zdCB0aW1lX3QgKiB3aGVuLCBzaXplX3QgKiBsZW5ndGgpCiB7CiAgICAgc3RydWN0IHRtICAgICAgKnRtX3A7CiAgICAgc3RhdGljIHVfY2hhciAgIHN0cmluZ1sxMV07CkBAIC0xNTksMTUgKzE2MywxNSBAQAogICAgIHN0cmluZ1s3XSA9IDA7CiAgICAgKmxlbmd0aCA9IDg7CiAKLSNpZm5kZWYgY3lnd2luCisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYpIHx8IGRlZmluZWQoSEFWRV9USU1FWk9ORV9WQVJJQUJMRSkKICAgICAvKgogICAgICAqIFRpbWV6b25lIG9mZnNldAogICAgICAqLwogICAgIHsKLSNpZmRlZiBTVFJVQ1RfVE1fSEFTX1RNX0dNVE9GRgotICAgIGNvbnN0IGludCB0em9mZnNldCA9IC10bV9wLT50bV9nbXRvZmY7ICAgICAvKiBTZWNvbmRzIGVhc3Qgb2YgVVRDICovCisjaWZkZWYgSEFWRV9TVFJVQ1RfVE1fVE1fR01UT0ZGCisgICAgY29uc3QgaW50IHR6b2Zmc2V0ID0gLXRtX3AtPnRtX2dtdG9mZjsgICAvKiBTZWNvbmRzIGVhc3Qgb2YgVVRDICovCiAjZWxzZQotICAgIGNvbnN0IGludCB0em9mZnNldCA9IHRpbWV6b25lOyAgICAgICAgICAgICAvKiBTZWNvbmRzIHdlc3Qgb2YgVVRDICovCisgICAgY29uc3QgaW50IHR6b2Zmc2V0ID0gdGltZXpvbmU7ICAgICAgICAgICAvKiBTZWNvbmRzIHdlc3Qgb2YgVVRDICovCiAjZW5kaWYKICAgICBpZiAodHpvZmZzZXQgPiAwKQogICAgICAgICBzdHJpbmdbOF0gPSAnLSc7CkBAIC0xNzksNyArMTgzLDcgQEAKICAgICB9CiAjZW5kaWYKIAotI2lmZGVmIFNZU1YKKyNpZiBkZWZpbmVkKFNZU1YpICYmICFIQVZFX1NUUlVDVF9UTV9UTV9HTVRPRkYKICAgICAvKgogICAgICAqIERheWxpZ2h0IHNhdmluZyB0aW1lCiAgICAgICovCkBAIC0xOTksMTAgKzIwMywxMSBAQAogCiAgICAgcmV0dXJuIHN0cmluZzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0RBVEVfTl9USU1FICovCiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NUSU1FX1RPX1RJTUVUCiB0aW1lX3QKLWN0aW1lX3RvX3RpbWV0KGNoYXIgKnN0cikKK2N0aW1lX3RvX3RpbWV0KGNvbnN0IGNoYXIgKnN0cikKIHsKICAgICBzdHJ1Y3QgdG0gICAgICAgdG07CiAKQEAgLTI1OCw5ICsyNjMsMTAgQEAKIAogICAgIHJldHVybiAobWt0aW1lKCZ0bSkpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ1RJTUVfVE9fVElNRVQgKi8KIAogLyoKLSAqIGJsYXRhbnRseSBsaWZ0ZWQgZnJvbSBvcGVuc21wIAorICogYmxhdGFudGx5IGxpZnRlZCBmcm9tIG9wZW5zbm1wIAogICovCiBjaGFyCiBjaGVja19yb3dzdGF0dXNfdHJhbnNpdGlvbihpbnQgb2xkVmFsdWUsIGludCBuZXdWYWx1ZSkKQEAgLTM3MCwxNiArMzc2LDEzIEBACiAgICAgc3dpdGNoIChuZXdWYWx1ZSkgewogICAgICAgICAvKgogICAgICAgICAgKiB0aGVzZSB0d28gZW5kIHVwIGJlaW5nIGVxdWl2ZWxlbnQgYXMgZmFyIGFzIGNoZWNraW5nIHRoZSAKLSAgICAgICAgICovCi0gICAgICAgIC8qCiAgICAgICAgICAqIHN0YXR1cyBnb2VzLCBhbHRob3VnaCB0aGUgZmluYWwgc3RhdGVzIGFyZSBiYXNlZCBvbiB0aGUgCi0gICAgICAgICAqLwotICAgICAgICAvKgogICAgICAgICAgKiBuZXdWYWx1ZS4gCiAgICAgICAgICAqLwogICAgIGNhc2UgUlNfQUNUSVZFOgogICAgIGNhc2UgUlNfTk9USU5TRVJWSUNFOgotICAgICAgICBpZiAob2xkVmFsdWUgPT0gUlNfTk9USU5TRVJWSUNFIHx8IG9sZFZhbHVlID09IFJTX0FDVElWRSk7CisgICAgICAgIGlmIChvbGRWYWx1ZSA9PSBSU19OT1RJTlNFUlZJQ0UgfHwgb2xkVmFsdWUgPT0gUlNfQUNUSVZFKQorICAgICAgICAgICAgOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfSU5DT05TSVNURU5UVkFMVUU7CiAgICAgICAgIGJyZWFrOwpAQCAtMzkyLDEzICszOTUsNiBAQAogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgUlNfQ1JFQVRFQU5ER086Ci0gICAgICAgIGlmIChvbGRWYWx1ZSAhPSBSU19OT05FWElTVEVOVCkKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBpbXBvc3NpYmxlLCB3ZSBhbHJlYWR5IGV4aXN0LiAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0lOQ09OU0lTVEVOVFZBTFVFOwotICAgICAgICBicmVhazsKLQogICAgIGNhc2UgUlNfQ1JFQVRFQU5EV0FJVDoKICAgICAgICAgaWYgKG9sZFZhbHVlICE9IFJTX05PTkVYSVNURU5UKQogICAgICAgICAgICAgLyoKQEAgLTQxOCw2ICs0MTQsMjUgQEAKICAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NIRUNLX1JPV1NUQVRVU19XSVRIX1NUT1JBR0VUWVBFX1RSQU5TSVRJT04KK2NoYXIKK2NoZWNrX3Jvd3N0YXR1c193aXRoX3N0b3JhZ2V0eXBlX3RyYW5zaXRpb24oaW50IG9sZFZhbHVlLCBpbnQgbmV3VmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBvbGRTdG9yYWdlKQoreworICAgIC8qCisgICAgICogY2FuIG5vdCBkZXN0cm95IHBlcm1hbmVudCBvciByZWFkb25seSByb3dzCisgICAgICovCisgICAgaWYgKChSU19ERVNUUk9ZID09IG5ld1ZhbHVlKSAmJgorICAgICAgICAoKFNOTVBfU1RPUkFHRV9QRVJNQU5FTlQgPT0gb2xkU3RvcmFnZSkgfHwKKyAgICAgICAgIChTTk1QX1NUT1JBR0VfUkVBRE9OTFkgPT0gb2xkU3RvcmFnZSkpKQorICAgICAgICByZXR1cm4gU05NUF9FUlJfV1JPTkdWQUxVRTsKKworICAgIHJldHVybiBjaGVja19yb3dzdGF0dXNfdHJhbnNpdGlvbihvbGRWYWx1ZSwgbmV3VmFsdWUpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0hFQ0tfUk9XU1RBVFVTX1dJVEhfU1RPUkFHRVRZUEVfVFJBTlNJVElPTiAqLworCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uLCBzbm1wX3RjX2FsbCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19TVE9SQUdFX1RSQU5TSVRJT04KIGNoYXIKIGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbihpbnQgb2xkVmFsdWUsIGludCBuZXdWYWx1ZSkKIHsKQEAgLTQ1OCwzICs0NzMsNCBAQAogCiAgICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DSEVDS19TVE9SQUdFX1RSQU5TSVRJT04gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcC5jIGIvc25tcGxpYi9zbm1wLmMKaW5kZXggMDIwZWM5MC4uYzM3NjNlOSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wLmMKKysrIGIvc25tcGxpYi9zbm1wLmMKQEAgLTUxLDkgKzUxLDYgQEAKICNpZmRlZiBIQVZFX1NZU19TRUxFQ1RfSAogI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWZuZGVmIE5VTEwKICNkZWZpbmUgTlVMTCAwCiAjZW5kaWYKQEAgLTkwLDEwICs4NywxMSBAQAogKi8KIAogdm9pZAoteGR1bXAoY29uc3QgdV9jaGFyICogY3AsIHNpemVfdCBsZW5ndGgsIGNvbnN0IGNoYXIgKnByZWZpeCkKK3hkdW1wKGNvbnN0IHZvaWQgKiBkYXRhLCBzaXplX3QgbGVuZ3RoLCBjb25zdCBjaGFyICpwcmVmaXgpCiB7Ci0gICAgaW50ICAgICAgICAgICAgIGNvbCwgY291bnQ7Ci0gICAgY2hhciAgICAgICAgICAgKmJ1ZmZlcjsKKyAgICBjb25zdCB1X2NoYXIgKiBjb25zdCBjcCA9IChjb25zdCB1X2NoYXIqKWRhdGE7CisgICAgaW50ICAgICAgICAgICAgICAgICAgY29sLCBjb3VudDsKKyAgICBjaGFyICAgICAgICAgICAgICAgICpidWZmZXI7CiAKICAgICBidWZmZXIgPSAoY2hhciAqKSBtYWxsb2Moc3RybGVuKHByZWZpeCkgKyA4MCk7CiAgICAgaWYgKCFidWZmZXIpIHsKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYyBiL3NubXBsaWIvc25tcEFBTDVQVkNEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGYyZjBiMC4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBBQUw1UFZDRG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSwzNTkgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaW5jbHVkZSA8YXRtLmg+Ci0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaD4KLQotCi1vaWQgbmV0c25tcF9BQUw1UFZDRG9tYWluWzEwXSA9IHsgTkVUU05NUF9FTlRFUlBSSVNFX01JQiwgMywgMywgMyB9Owotc3RhdGljIG5ldHNubXBfdGRvbWFpbiBhYWw1cHZjRG9tYWluOwotCi0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX2FhbDVwdmNfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICp0byA9IE5VTEw7Ci0KLSAgICBpZiAoZGF0YSAhPSBOVUxMICYmIGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKikgdC0+ZGF0YTsKLSAgICB9Ci0gICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiQUFMNSBQVkM6IHVua25vd24iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyIHRtcFs2NF07Ci0gICAgICAgIHNwcmludGYodG1wLCAiQUFMNSBQVkM6ICVoZC4laGQuJWQiLCB0by0+c2FwX2FkZHIuaXRmLAotICAgICAgICAgICAgICAgIHRvLT5zYXBfYWRkci52cGksIHRvLT5zYXBfYWRkci52Y2kpOwotICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX2FhbDVwdmNfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotCXdoaWxlIChyYyA8IDApIHsKLQkgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotCi0gICAgICAgIGlmIChyYyA+PSAwKSB7Ci0gICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2FhbDVwdmNfZm10YWRkcih0LCBOVUxMLCAwKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLAotCQkJInJlY3Ygb24gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwgdC0+c29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBzdHIpKTsKLSAgICAgICAgICAgIGZyZWUoc3RyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAicmVjdiBvbiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsIAotCQkJdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICB9Ci0gICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfYWFsNXB2Y19zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOwotCi0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgotICAgICAgICAqb2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICgqb3BhcXVlKTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKHQtPmRhdGEpOwotICAgIH0KLQotICAgIGlmICh0byAhPSBOVUxMICYmIHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKil0bywKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCi0JCSAgICBzaXplLCBidWYsIHN0ciwgdC0+c29jaykpOwotICAgICAgICBmcmVlKHN0cik7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX2FhbDVwdmNfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBpZiAodC0+c29jayA+PSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiY2xvc2UgZmQgJWRcbiIsIHQtPnNvY2spKTsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLS8qCi0gKiBPcGVuIGFuIEFBTDUgUFZDIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwgCi0gKiBOU0FQIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKLSAqIHRoZSByZW1vdGUgTlNBUCB0byBzZW5kIHRoaW5ncyB0by4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqYWRkciwgaW50IGxvY2FsKQotewotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2FwX2ZhbWlseSAhPSBBRl9BVE1QVkMpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzdHIgPSBuZXRzbm1wX2FhbDVwdmNfZm10YWRkcihOVUxMLCAodm9pZCAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKLSAgICAgICAgICAgICAgICBzdHIpKTsKLSAgICBmcmVlKHN0cik7Ci0KLSAgICBtZW1zZXQodCwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wX0FBTDVQVkNEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9Ci0gICAgICAgIHNpemVvZihuZXRzbm1wX0FBTDVQVkNEb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfQUFMNVBWQ0RvbWFpblswXSk7Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KFBGX0FUTVBWQywgU09DS19ER1JBTSwgMCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCJzb2NrZXQgZmFpbGVkICglcylcbiIsc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImZkICVkIG9wZW5lZFxuIiwgdC0+c29jaykpOwotCi0gICAgewotICAgICAgICAvKgotICAgICAgICAgKiBTZXQgdXAgdGhlIFFPUyBwYXJhbWV0ZXJzLgotICAgICAgICAgKi8KLQotICAgICAgICBzdHJ1Y3QgYXRtX3FvcyBxb3MgPSB7IDAgfTsKLSAgICAgICAgcW9zLmFhbCA9IEFUTV9BQUw1OwotICAgICAgICBxb3Mucnh0cC50cmFmZmljX2NsYXNzID0gQVRNX1VCUjsKLSAgICAgICAgcW9zLnJ4dHAubWF4X3NkdSA9IFNOTVBfTUFYX0xFTjsgICAgLyogIEhtbSAtLSB0aGlzIGlzIGEgYml0IHNtYWxsPyAgKi8KLSAgICAgICAgcW9zLnR4dHAgPSBxb3Mucnh0cDsKLQotICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBTT0xfQVRNLCBTT19BVE1RT1MsICZxb3MsIHNpemVvZihxb3MpKSA8IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAic2V0c29ja29wdCBmYWlsZWQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgbmV0c25tcF9hYWw1cHZjX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIHQtPmxvY2FsID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYyg4KTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICB0LT5sb2NhbFswXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzFdID0gKGFkZHItPnNhcF9hZGRyLml0ZiAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxbMl0gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFszXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsWzRdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4ZmYwMDAwMDApID4+IDI0OwotICAgICAgICB0LT5sb2NhbFs1XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweDAwZmYwMDAwKSA+PiAxNjsKLSAgICAgICAgdC0+bG9jYWxbNl0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMDAwZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbN10gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMDAwMDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gODsKLQotICAgICAgICBpZiAoYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0gICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgPCAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgImJpbmQgZmFpbGVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIG5ldHNubXBfYWFsNXB2Y19jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoOCk7Ci0gICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHQtPnJlbW90ZVswXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVsxXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZVsyXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPnJlbW90ZVszXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZVs0XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweGZmMDAwMDAwKSA+PiAyNDsKLSAgICAgICAgdC0+cmVtb3RlWzVdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDBmZjAwMDApID4+IDE2OwotICAgICAgICB0LT5yZW1vdGVbNl0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMDAwZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzddID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSA4OwotCi0gICAgICAgIGlmIChjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSA8IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiY29ubmVjdCBmYWlsZWQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgbmV0c25tcF9hYWw1cHZjX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOwotICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOwotICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpOwotCi0gICAgLyoKLSAgICAgKiAxNi1iaXQgbGVuZ3RoIGZpZWxkIGluIHRoZSB0cmFpbGVyLCBubyBoZWFkZXJzLiAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHhmZmZmOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX2FhbDVwdmNfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF9hYWw1cHZjX3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfYWFsNXB2Y19jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfYWFsNXB2Y19jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKLQkJCSAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIGFkZHI7Ci0KLSAgICBpZiAoc3RyID09IE5VTEwgfHwgKnN0ciA9PSAnXDAnKQotCXN0ciA9IGRlZmF1bHRfdGFyZ2V0OwotCi0gICAgaWYgKHN0ciAhPSBOVUxMKSB7Ci0gICAgICAgIGFkZHIuc2FwX2ZhbWlseSA9IEFGX0FUTVBWQzsKLQotICAgICAgICBpZiAoc3NjYW5mKHN0ciwgIiVoZC4laGQuJWQiLCAmKGFkZHIuc2FwX2FkZHIuaXRmKSwKLSAgICAgICAgICAgICAgICAgICAmKGFkZHIuc2FwX2FkZHIudnBpKSwgJihhZGRyLnNhcF9hZGRyLnZjaSkpID09IDMpIHsKLSAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3NjYW5mKHN0ciwgIiVoZC4lZCIsICYoYWRkci5zYXBfYWRkci52cGkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmKGFkZHIuc2FwX2FkZHIudmNpKSkgPT0gMikgewotICAgICAgICAgICAgYWRkci5zYXBfYWRkci5pdGYgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICAgICAgfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJWQiLCAmKGFkZHIuc2FwX2FkZHIudmNpKSkgPT0gMSkgewotICAgICAgICAgICAgYWRkci5zYXBfYWRkci5pdGYgPSAwOwotICAgICAgICAgICAgYWRkci5zYXBfYWRkci52cGkgPSAwOwotICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9hYWw1cHZjX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgYWRkcjsKLQotICAgIGlmIChvX2xlbiA9PSA4KSB7Ci0gICAgICAgIGFkZHIuc2FwX2ZhbWlseSA9IEFGX0FUTVBWQzsKLSAgICAgICAgYWRkci5zYXBfYWRkci5pdGYgPSAob1swXSA8PCA4KSArIChvWzFdIDw8IDApOwotICAgICAgICBhZGRyLnNhcF9hZGRyLnZwaSA9IChvWzJdIDw8IDgpICsgKG9bM10gPDwgMCk7Ci0gICAgICAgIGFkZHIuc2FwX2FkZHIudmNpID0KLQkgICAgKG9bNF0gPDwgMjQpICsgKG9bNV0gPDwgMTYpICsgKG9bNl0gPDwgOCkgKyAob1s3XSA8PCAwKTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi0KLXZvaWQKLW5ldHNubXBfYWFsNXB2Y19jdG9yKHZvaWQpCi17Ci0gICAgYWFsNXB2Y0RvbWFpbi5uYW1lID0gbmV0c25tcF9BQUw1UFZDRG9tYWluOwotICAgIGFhbDVwdmNEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9BQUw1UFZDRG9tYWluKSAvIHNpemVvZihvaWQpOwotICAgIGFhbDVwdmNEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMywgc2l6ZW9mKGNoYXIgKikpOwotICAgIGFhbDVwdmNEb21haW4ucHJlZml4WzBdID0gImFhbDVwdmMiOwotICAgIGFhbDVwdmNEb21haW4ucHJlZml4WzFdID0gInB2YyI7Ci0KLSAgICBhYWw1cHZjRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIGFhbDVwdmNEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfYWFsNXB2Y19jcmVhdGVfdHN0cmluZzsKLSAgICBhYWw1cHZjRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX2FhbDVwdmNfY3JlYXRlX29zdHJpbmc7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJmFhbDVwdmNEb21haW4pOwotfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYyBiL3NubXBsaWIvc25tcENhbGxiYWNrRG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA4NWEyMTQuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wQ2FsbGJhY2tEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDYyNiArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPGN0eXBlLmg+Ci0jaW5jbHVkZSA8ZXJybm8uaD4KLQotI2lmZGVmIFdJTjMyCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS93aW5waXBlLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVU5fSAotI2luY2x1ZGUgPHN5cy91bi5oPgotI2VuZGlmCi0jaWYgSEFWRV9JT19ICi0jaW5jbHVkZSA8aW8uaD4KLSNlbmRpZgotI2lmIEhBVkVfRkNOVExfSAotI2luY2x1ZGUgPGZjbnRsLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+Ci0KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVW5peERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfY2xpZW50Lmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaD4KLQotI2lmbmRlZiBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4KLSNkZWZpbmUgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOICA1Ci0jZW5kaWYKLQotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTgotCi1zdGF0aWMgbmV0c25tcF90cmFuc3BvcnRfbGlzdCAqdHJsaXN0ID0gTlVMTDsKLQotc3RhdGljIGludCAgICAgIGNhbGxiYWNrX2NvdW50ID0gMDsKLQotdHlwZWRlZiBzdHJ1Y3QgY2FsbGJhY2tfaGFja19zIHsKLSAgICB2b2lkICAgICAgICAgICAqb3JpZ190cmFuc3BvcnRfZGF0YTsKLSAgICBuZXRzbm1wX3BkdSAgICAqcGR1OwotfSBjYWxsYmFja19oYWNrOwotCi10eXBlZGVmIHN0cnVjdCBjYWxsYmFja19xdWV1ZV9zIHsKLSAgICBpbnQgICAgICAgICAgICAgY2FsbGJhY2tfbnVtOwotICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqaXRlbTsKLSAgICBzdHJ1Y3QgY2FsbGJhY2tfcXVldWVfcyAqbmV4dCwgKnByZXY7Ci19IGNhbGxiYWNrX3F1ZXVlOwotCi1jYWxsYmFja19xdWV1ZSAqdGhlcXVldWU7Ci0KLXN0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydCAqCi1maW5kX3RyYW5zcG9ydF9mcm9tX2NhbGxiYWNrX251bShpbnQgbnVtKQotewotICAgIHN0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICpwdHI7Ci0gICAgZm9yIChwdHIgPSB0cmxpc3Q7IHB0cjsgcHRyID0gcHRyLT5uZXh0KQotICAgICAgICBpZiAoKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgcHRyLT50cmFuc3BvcnQtPmRhdGEpLT4KLSAgICAgICAgICAgIGNhbGxiYWNrX251bSA9PSBudW0pCi0gICAgICAgICAgICByZXR1cm4gcHRyLT50cmFuc3BvcnQ7Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyB2b2lkCi1jYWxsYmFja19kZWJ1Z19wZHUoY29uc3QgY2hhciAqb3Vyc3RyaW5nLCBuZXRzbm1wX3BkdSAqcGR1KQotewotICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmI7Ci0gICAgaW50ICAgICAgICAgICAgIGkgPSAxOwotICAgIERFQlVHTVNHVEwoKG91cnN0cmluZywKLSAgICAgICAgICAgICAgICAiUERVOiBjb21tYW5kID0gJWQsIGVycnN0YXQgPSAlZCwgZXJyaW5kZXggPSAlZFxuIiwKLSAgICAgICAgICAgICAgICBwZHUtPmNvbW1hbmQsIHBkdS0+ZXJyc3RhdCwgcGR1LT5lcnJpbmRleCkpOwotICAgIGZvciAodmIgPSBwZHUtPnZhcmlhYmxlczsgdmI7IHZiID0gdmItPm5leHRfdmFyaWFibGUpIHsKLSAgICAgICAgREVCVUdNU0dUTCgob3Vyc3RyaW5nLCAiICB2YXIgJWQ6IiwgaSsrKSk7Ci0gICAgICAgIERFQlVHTVNHVkFSKChvdXJzdHJpbmcsIHZiKSk7Ci0gICAgICAgIERFQlVHTVNHKChvdXJzdHJpbmcsICJcbiIpKTsKLSAgICB9Ci19Ci0KLXZvaWQKLWNhbGxiYWNrX3B1c2hfcXVldWUoaW50IG51bSwgbmV0c25tcF9jYWxsYmFja19wYXNzICppdGVtKQotewotICAgIGNhbGxiYWNrX3F1ZXVlICpuZXdpdGVtID0gU05NUF9NQUxMT0NfVFlQRURFRihjYWxsYmFja19xdWV1ZSk7Ci0gICAgY2FsbGJhY2tfcXVldWUgKnB0cjsKLQotICAgIG5ld2l0ZW0tPmNhbGxiYWNrX251bSA9IG51bTsKLSAgICBuZXdpdGVtLT5pdGVtID0gaXRlbTsKLSAgICBpZiAodGhlcXVldWUpIHsKLSAgICAgICAgZm9yIChwdHIgPSB0aGVxdWV1ZTsgcHRyICYmIHB0ci0+bmV4dDsgcHRyID0gcHRyLT5uZXh0KSB7Ci0gICAgICAgIH0KLSAgICAgICAgcHRyLT5uZXh0ID0gbmV3aXRlbTsKLSAgICAgICAgbmV3aXRlbS0+cHJldiA9IHB0cjsKLSAgICB9IGVsc2UgewotICAgICAgICB0aGVxdWV1ZSA9IG5ld2l0ZW07Ci0gICAgfQotICAgIERFQlVHSUYoImR1bXBfc2VuZF9jYWxsYmFja190cmFuc3BvcnQiKSB7Ci0gICAgICAgIGNhbGxiYWNrX2RlYnVnX3BkdSgiZHVtcF9zZW5kX2NhbGxiYWNrX3RyYW5zcG9ydCIsIGl0ZW0tPnBkdSk7Ci0gICAgfQotfQotCi1uZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKgotY2FsbGJhY2tfcG9wX3F1ZXVlKGludCBudW0pCi17Ci0gICAgbmV0c25tcF9jYWxsYmFja19wYXNzICpjcDsKLSAgICBjYWxsYmFja19xdWV1ZSAqcHRyOwotCi0gICAgZm9yIChwdHIgPSB0aGVxdWV1ZTsgcHRyOyBwdHIgPSBwdHItPm5leHQpIHsKLSAgICAgICAgaWYgKHB0ci0+Y2FsbGJhY2tfbnVtID09IG51bSkgewotICAgICAgICAgICAgaWYgKHB0ci0+cHJldikgewotICAgICAgICAgICAgICAgIHB0ci0+cHJldi0+bmV4dCA9IHB0ci0+bmV4dDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgdGhlcXVldWUgPSBwdHItPm5leHQ7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocHRyLT5uZXh0KSB7Ci0gICAgICAgICAgICAgICAgcHRyLT5uZXh0LT5wcmV2ID0gcHRyLT5wcmV2OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgY3AgPSBwdHItPml0ZW07Ci0gICAgICAgICAgICBTTk1QX0ZSRUUocHRyKTsKLSAgICAgICAgICAgIERFQlVHSUYoImR1bXBfcmVjdl9jYWxsYmFja190cmFuc3BvcnQiKSB7Ci0gICAgICAgICAgICAgICAgY2FsbGJhY2tfZGVidWdfcGR1KCJkdW1wX3JlY3ZfY2FsbGJhY2tfdHJhbnNwb3J0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3AtPnBkdSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gY3A7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1jaGFyICoKLW5ldHNubXBfY2FsbGJhY2tfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBjaGFyIGJ1ZltTUFJJTlRfTUFYX0xFTl07Ci0gICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmOwotCi0gICAgaWYgKCF0KQotICAgICAgICByZXR1cm4gc3RyZHVwKCJjYWxsYmFjazogdW5rbm93biIpOwotCi0gICAgbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKLQotICAgIGlmICghbXlzdHVmZikKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiY2FsbGJhY2s6IHVua25vd24iKTsKLQotICAgIHNucHJpbnRmKGJ1ZiwgU1BSSU5UX01BWF9MRU4sICJjYWxsYmFjazogJWQgb24gZmQgJWQiLAotICAgICAgICAgICAgIG15c3R1ZmYtPmNhbGxiYWNrX251bSwgbXlzdHVmZi0+cGlwZWZkc1swXSk7Ci0gICAgcmV0dXJuIHN0cmR1cChidWYpOwotfQotCi0KLQotLyoKLSAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAotICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bwotICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKLSAqLwotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotICAgIGNoYXIgbmV3YnVmWzFdOwotICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKLQotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19yZWN2IGVudGVyXG4iKSk7Ci0KLSAgICB3aGlsZSAocmMgPCAwKSB7Ci0jaWZkZWYgV0lOMzIKLQlyYyA9IHJlY3Zmcm9tKG15c3R1ZmYtPnBpcGVmZHNbMF0sIG5ld2J1ZiwgMSwgMCwgTlVMTCwgMCk7Ci0jZWxzZQotCXJjID0gcmVhZChteXN0dWZmLT5waXBlZmRzWzBdLCBuZXdidWYsIDEpOwotI2VuZGlmCi0JaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCSAgICBicmVhazsKLQl9Ci0gICAgfQotICAgIGlmIChyYyA+IDApCi0gICAgICAgIG1lbXNldChidWYsIDAsIHJjKTsKLQotICAgIGlmIChteXN0dWZmLT5saW5rZWR0bykgewotICAgICAgICAvKgotICAgICAgICAgKiB3ZSdyZSB0aGUgY2xpZW50LiAgV2UgZG9uJ3QgbmVlZCB0byBkbyBhbnl0aGluZy4gCi0gICAgICAgICAqLwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIG1hbGxvYyB0aGUgc3BhY2UgaGVyZSwgYnV0IGl0J3MgZmlsbGVkIGluIGJ5Ci0gICAgICAgICAqIHNubXBfY2FsbGJhY2tfY3JlYXRlZF9wZHUoKSBiZWxvdyAKLSAgICAgICAgICovCi0gICAgICAgIGludCAgICAgICAgICAgICpyZXR1cm5udW0gPSAoaW50ICopIGNhbGxvYygxLCBzaXplb2YoaW50KSk7Ci0gICAgICAgICpvcGFxdWUgPSByZXR1cm5udW07Ci0gICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKGludCk7Ci0gICAgfQotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19yZWN2IGV4aXRcbiIpKTsKLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1pbnQKLW5ldHNubXBfY2FsbGJhY2tfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCBmcm9tLCByYyA9IC0xOwotICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlzdHVmZiA9IChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgdC0+ZGF0YTsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKmNwOwotCi0gICAgLyoKLSAgICAgKiBleHRyYWN0IHRoZSBwZHUgZnJvbSB0aGUgaGFja2VkIGJ1ZmZlciAKLSAgICAgKi8KLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqb3RoZXJfc2lkZTsKLSAgICBjYWxsYmFja19oYWNrICAqY2ggPSAoY2FsbGJhY2tfaGFjayAqKSAqIG9wYXF1ZTsKLSAgICBuZXRzbm1wX3BkdSAgICAqcGR1ID0gY2gtPnBkdTsKLSAgICAqb3BhcXVlID0gY2gtPm9yaWdfdHJhbnNwb3J0X2RhdGE7Ci0gICAgU05NUF9GUkVFKGNoKTsKLQotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19zZW5kIGVudGVyXG4iKSk7Ci0KLSAgICBjcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9jYWxsYmFja19wYXNzKTsKLSAgICBpZiAoIWNwKQotICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICBjcC0+cGR1ID0gc25tcF9jbG9uZV9wZHUocGR1KTsKLSAgICBpZiAoY3AtPnBkdS0+dHJhbnNwb3J0X2RhdGEpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogbm90IG5lZWRlZCBhbmQgbm90IHByb3Blcmx5IGZyZWVkIGxhdGVyIAotICAgICAgICAgKi8KLSAgICAgICAgU05NUF9GUkVFKGNwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKTsKLSAgICB9Ci0KLSAgICBpZiAoY3AtPnBkdS0+ZmxhZ3MgJiBVQ0RfTVNHX0ZMQUdfRVhQRUNUX1JFU1BPTlNFKQotICAgICAgICBjcC0+cGR1LT5mbGFncyBePSBVQ0RfTVNHX0ZMQUdfRVhQRUNUX1JFU1BPTlNFOwotCi0gICAgLyoKLSAgICAgKiBwdXNoIHRoZSBzZW50IHBkdSBvbnRvIHRoZSBzdGFjayAKLSAgICAgKi8KLSAgICAvKgotICAgICAqIEFORCBzZW5kIGEgYm9ndXMgYnl0ZSB0byB0aGUgcmVtb3RlIGNhbGxiYWNrIHJlY2VpdmVyJ3MgcGlwZSAKLSAgICAgKi8KLSAgICBpZiAobXlzdHVmZi0+bGlua2VkdG8pIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UncmUgdGhlIGNsaWVudCwgc2VuZCBpdCB0byB0aGUgcGFyZW50IAotICAgICAgICAgKi8KLSAgICAgICAgY3AtPnJldHVybl90cmFuc3BvcnRfbnVtID0gbXlzdHVmZi0+Y2FsbGJhY2tfbnVtOwotCi0gICAgICAgIG90aGVyX3NpZGUgPSBmaW5kX3RyYW5zcG9ydF9mcm9tX2NhbGxiYWNrX251bShteXN0dWZmLT5saW5rZWR0byk7Ci0gICAgICAgIGlmICghb3RoZXJfc2lkZSkgewotICAgICAgICAgICAgc25tcF9mcmVlX3BkdShjcC0+cGR1KTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShjcCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQotCXdoaWxlIChyYyA8IDApIHsKLSNpZmRlZiBXSU4zMgotCSAgICByYyA9IHNlbmR0bygoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyopIG90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLCAiICIsIDEsIDAsIE5VTEwsIDApOwotI2Vsc2UKLQkgICAgcmMgPSB3cml0ZSgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKW90aGVyX3NpZGUtPmRhdGEpLT5waXBlZmRzWzFdLAotCQkgICAgICAgIiAiLCAxKTsKLSNlbmRpZgotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JCWJyZWFrOwotCSAgICB9Ci0JfQotICAgICAgICBjYWxsYmFja19wdXNoX3F1ZXVlKG15c3R1ZmYtPmxpbmtlZHRvLCBjcCk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHdlIGRvbid0IG5lZWQgdGhlIHRyYW5zcG9ydCBkYXRhIGFueSBtb3JlIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCpvcGFxdWUpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRSgqb3BhcXVlKTsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogd2UncmUgdGhlIHNlcnZlciwgc2VuZCBpdCB0byB0aGUgcGVyc29uIHRoYXQgc2VudCB1cyB0aGUgcmVxdWVzdCAKLSAgICAgICAgICovCi0gICAgICAgIGZyb20gPSAqKigoaW50ICoqKSBvcGFxdWUpOwotICAgICAgICAvKgotICAgICAgICAgKiB3ZSBkb24ndCBuZWVkIHRoZSB0cmFuc3BvcnQgZGF0YSBhbnkgbW9yZSAKLSAgICAgICAgICovCi0gICAgICAgIGlmICgqb3BhcXVlKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUoKm9wYXF1ZSk7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBvdGhlcl9zaWRlID0gZmluZF90cmFuc3BvcnRfZnJvbV9jYWxsYmFja19udW0oZnJvbSk7Ci0gICAgICAgIGlmICghb3RoZXJfc2lkZSkgewotICAgICAgICAgICAgc25tcF9mcmVlX3BkdShjcC0+cGR1KTsKLSAgICAgICAgICAgIFNOTVBfRlJFRShjcCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLQl3aGlsZSAocmMgPCAwKSB7Ci0jaWZkZWYgV0lOMzIKLQkgICAgcmMgPSBzZW5kdG8oKChuZXRzbm1wX2NhbGxiYWNrX2luZm8qKSBvdGhlcl9zaWRlLT5kYXRhKS0+cGlwZWZkc1sxXSwgIiAiLCAxLCAwLCBOVUxMLCAwKTsKLSNlbHNlCi0JICAgIHJjID0gd3JpdGUoKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKilvdGhlcl9zaWRlLT5kYXRhKS0+cGlwZWZkc1sxXSwKLQkJICAgICAgICIgIiwgMSk7Ci0jZW5kaWYKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICAgICAgY2FsbGJhY2tfcHVzaF9xdWV1ZShmcm9tLCBjcCk7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3NlbmQgZXhpdFxuIikpOwotICAgIHJldHVybiAwOwotfQotCi0KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCAgICAgICAgICAgICByYzsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX2luZm8gKm15c3R1ZmYgPSAobmV0c25tcF9jYWxsYmFja19pbmZvICopIHQtPmRhdGE7Ci0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2Nsb3NlIGVudGVyXG4iKSk7Ci0KLSNpZmRlZiBXSU4zMgotICAgIHJjICA9IGNsb3Nlc29ja2V0KG15c3R1ZmYtPnBpcGVmZHNbMF0pOwotICAgIHJjIHw9IGNsb3Nlc29ja2V0KG15c3R1ZmYtPnBpcGVmZHNbMV0pOwotI2Vsc2UKLSAgICByYyAgPSBjbG9zZShteXN0dWZmLT5waXBlZmRzWzBdKTsKLSAgICByYyB8PSBjbG9zZShteXN0dWZmLT5waXBlZmRzWzFdKTsKLSNlbmRpZgotCi0gICAgcmMgfD0gbmV0c25tcF90cmFuc3BvcnRfcmVtb3ZlX2Zyb21fbGlzdCgmdHJsaXN0LCB0KTsKLQotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19jbG9zZSBleGl0XG4iKSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYWNjZXB0IGVudGVyXG4iKSk7Ci0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2FjY2VwdCBleGl0XG4iKSk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotCi0vKgotICogT3BlbiBhIENhbGxiYWNrLWRvbWFpbiB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIKLSAqIGlzIHRoZSBsb2NhbCBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlCi0gKiBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvCi0gKiAoYW5kIHdlIG1ha2UgdXAgYSB0ZW1wb3JhcnkgbmFtZSBmb3IgdGhlIGxvY2FsIGVuZCBvZiB0aGUKLSAqIGNvbm5lY3Rpb24pLiAgCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9jYWxsYmFja190cmFuc3BvcnQoaW50IHRvKQotewotCi0gICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOwotICAgIG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqbXlkYXRhOwotICAgIGludCAgICAgICAgICAgICByYzsKLQotICAgIC8qCi0gICAgICogdHJhbnNwb3J0IAotICAgICAqLwotICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKLSAgICBpZiAoIXQpCi0gICAgICAgIHJldHVybiBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBvdXIgc3R1ZmYgCi0gICAgICovCi0gICAgbXlkYXRhID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NhbGxiYWNrX2luZm8pOwotICAgIG15ZGF0YS0+bGlua2VkdG8gPSB0bzsKLSAgICBteWRhdGEtPmNhbGxiYWNrX251bSA9ICsrY2FsbGJhY2tfY291bnQ7Ci0gICAgbXlkYXRhLT5kYXRhID0gTlVMTDsKLSAgICB0LT5kYXRhID0gbXlkYXRhOwotCi0jaWZkZWYgV0lOMzIKLSAgICByYyA9IGNyZWF0ZV93aW5waXBlX3RyYW5zcG9ydChteWRhdGEtPnBpcGVmZHMpOwotI2Vsc2UKLSAgICByYyA9IHBpcGUobXlkYXRhLT5waXBlZmRzKTsKLSNlbmRpZgotICAgIHQtPnNvY2sgPSBteWRhdGEtPnBpcGVmZHNbMF07Ci0KLSAgICBpZiAocmMpIHsKLSAgICAgICAgU05NUF9GUkVFKG15ZGF0YSk7Ci0gICAgICAgIFNOTVBfRlJFRSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdC0+Zl9yZWN2ICAgID0gbmV0c25tcF9jYWxsYmFja19yZWN2OwotICAgIHQtPmZfc2VuZCAgICA9IG5ldHNubXBfY2FsbGJhY2tfc2VuZDsKLSAgICB0LT5mX2Nsb3NlICAgPSBuZXRzbm1wX2NhbGxiYWNrX2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICA9IG5ldHNubXBfY2FsbGJhY2tfYWNjZXB0OwotICAgIHQtPmZfZm10YWRkciA9IG5ldHNubXBfY2FsbGJhY2tfZm10YWRkcjsKLQotICAgIG5ldHNubXBfdHJhbnNwb3J0X2FkZF90b19saXN0KCZ0cmxpc3QsIHQpOwotCi0gICAgaWYgKHRvKQotICAgICAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImluaXRpYWxpemVkICVkIGxpbmtlZCB0byAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgbXlkYXRhLT5jYWxsYmFja19udW0sIHRvKSk7Ci0gICAgZWxzZQotICAgICAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwKLSAgICAgICAgICAgICAgICAgICAgImluaXRpYWxpemVkIG1hc3RlciBsaXN0ZW5pbmcgb24gJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIG15ZGF0YS0+Y2FsbGJhY2tfbnVtKSk7Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLWludAotbmV0c25tcF9jYWxsYmFja19ob29rX3BhcnNlKG5ldHNubXBfc2Vzc2lvbiAqIHNwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyICogcGFja2V0cHRyLCBzaXplX3QgbGVuKQotewotICAgIGlmIChTTk1QX01TR19SRVNQT05TRSA9PSBwZHUtPmNvbW1hbmQgfHwKLSAgICAgICAgU05NUF9NU0dfUkVQT1JUID09IHBkdS0+Y29tbWFuZCkKLSAgICAgICAgcGR1LT5mbGFncyB8PSBVQ0RfTVNHX0ZMQUdfUkVTUE9OU0VfUERVOwotICAgIGVsc2UKLSAgICAgICAgcGR1LT5mbGFncyAmPSAoflVDRF9NU0dfRkxBR19SRVNQT05TRV9QRFUpOwotCi0gICAgcmV0dXJuIFNOTVBfRVJSX05PRVJST1I7Ci19Ci0KLWludAotbmV0c25tcF9jYWxsYmFja19ob29rX2J1aWxkKG5ldHNubXBfc2Vzc2lvbiAqIHNwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfcGR1ICpwZHUsIHVfY2hhciAqIHB0aywgc2l6ZV90ICogbGVuKQotewotICAgIC8qCi0gICAgICogdmVyeSBncm9zcyBoYWNrLCBhcyB0aGlzIGlzIHBhc3NlZCBsYXRlciB0byB0aGUgdHJhbnNwb3J0X3NlbmQKLSAgICAgKiBmdW5jdGlvbiAKLSAgICAgKi8KLSAgICBjYWxsYmFja19oYWNrICAqY2ggPSBTTk1QX01BTExPQ19UWVBFREVGKGNhbGxiYWNrX2hhY2spOwotICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19idWlsZCBlbnRlclxuIikpOwotICAgIGNoLT5wZHUgPSBwZHU7Ci0gICAgY2gtPm9yaWdfdHJhbnNwb3J0X2RhdGEgPSBwZHUtPnRyYW5zcG9ydF9kYXRhOwotICAgIHBkdS0+dHJhbnNwb3J0X2RhdGEgPSBjaDsKLSAgICBzd2l0Y2ggKHBkdS0+Y29tbWFuZCkgewotICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKLSAgICAgICAgaWYgKHBkdS0+bWF4X3JlcGV0aXRpb25zIDwgMCkgewotICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX1JFUEVUSVRJT05TOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwZHUtPm5vbl9yZXBlYXRlcnMgPCAwKSB7Ci0gICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfUkVQRUFURVJTOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgU05NUF9NU0dfUkVTUE9OU0U6Ci0gICAgY2FzZSBTTk1QX01TR19UUkFQOgotICAgIGNhc2UgU05NUF9NU0dfVFJBUDI6Ci0gICAgICAgIHBkdS0+ZmxhZ3MgJj0gKH5VQ0RfTVNHX0ZMQUdfRVhQRUNUX1JFU1BPTlNFKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogRmFsbHRocm91Z2gKLSAgICAgICAgICovCi0gICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKHBkdS0+ZXJyc3RhdCA9PSBTTk1QX0RFRkFVTFRfRVJSU1RBVCkKLSAgICAgICAgICAgIHBkdS0+ZXJyc3RhdCA9IDA7Ci0gICAgICAgIGlmIChwZHUtPmVycmluZGV4ID09IFNOTVBfREVGQVVMVF9FUlJJTkRFWCkKLSAgICAgICAgICAgIHBkdS0+ZXJyaW5kZXggPSAwOwotICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIENvcHkgbWlzc2luZyB2YWx1ZXMgZnJvbSBzZXNzaW9uIGRlZmF1bHRzCi0gICAgICovCi0gICAgc3dpdGNoIChwZHUtPnZlcnNpb24pIHsKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotICAgIGNhc2UgU05NUF9WRVJTSU9OXzE6Ci0jZW5kaWYKLSNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLSAgICBjYXNlIFNOTVBfVkVSU0lPTl8yYzoKLSNlbmRpZgotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgICAgICBpZiAocGR1LT5jb21tdW5pdHlfbGVuID09IDApIHsKLSAgICAgICAgICAgIGlmIChzcC0+Y29tbXVuaXR5X2xlbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX0NPTU1VTklUWTsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBwZHUtPmNvbW11bml0eSA9ICh1X2NoYXIgKikgbWFsbG9jKHNwLT5jb21tdW5pdHlfbGVuKTsKLSAgICAgICAgICAgIGlmIChwZHUtPmNvbW11bml0eSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOwotICAgICAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1lbW1vdmUocGR1LT5jb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgIHNwLT5jb21tdW5pdHksIHNwLT5jb21tdW5pdHlfbGVuKTsKLSAgICAgICAgICAgIHBkdS0+Y29tbXVuaXR5X2xlbiA9IHNwLT5jb21tdW5pdHlfbGVuOwotICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBTTk1QX1ZFUlNJT05fMzoKLSAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lTGVuID09IDApIHsKLQkgIHBkdS0+c2VjdXJpdHlOYW1lID0gKGNoYXIgKiltYWxsb2Moc3AtPnNlY3VyaXR5TmFtZUxlbik7Ci0gICAgICAgICAgICBpZiAocGR1LT5zZWN1cml0eU5hbWUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKLSAgICAgICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBtZW1tb3ZlKHBkdS0+c2VjdXJpdHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgc3AtPnNlY3VyaXR5TmFtZSwgc3AtPnNlY3VyaXR5TmFtZUxlbik7Ci0gICAgICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZUxlbiA9IHNwLT5zZWN1cml0eU5hbWVMZW47Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlNb2RlbCA9PSAtMSkKLSAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlNb2RlbCA9IHNwLT5zZWN1cml0eU1vZGVsOwotICAgICAgICBpZiAocGR1LT5zZWN1cml0eUxldmVsID09IDApCi0gICAgICAgICAgICBwZHUtPnNlY3VyaXR5TGV2ZWwgPSBzcC0+c2VjdXJpdHlMZXZlbDsKLSAgICAgICAgLyogV0hBVCBFTFNFID8/ICovCi0gICAgfQotICAgIHB0a1swXSA9IDA7Ci0gICAgKmxlbiA9IDE7Ci0gICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2J1aWxkIGV4aXRcbiIpKTsKLSAgICByZXR1cm4gMTsKLX0KLQotaW50Ci1uZXRzbm1wX2NhbGxiYWNrX2NoZWNrX3BhY2tldCh1X2NoYXIgKiBwa3QsIHNpemVfdCBsZW4pCi17Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLW5ldHNubXBfcGR1ICAgICoKLW5ldHNubXBfY2FsbGJhY2tfY3JlYXRlX3BkdShuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSwgc2l6ZV90IG9sZW5ndGgpCi17Ci0gICAgbmV0c25tcF9wZHUgICAgKnBkdTsKLSAgICBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKmNwID0KLSAgICAgICAgY2FsbGJhY2tfcG9wX3F1ZXVlKCgobmV0c25tcF9jYWxsYmFja19pbmZvICopIHRyYW5zcG9ydC0+ZGF0YSktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2tfbnVtKTsKLSAgICBpZiAoIWNwKQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICBwZHUgPSBjcC0+cGR1OwotICAgIHBkdS0+dHJhbnNwb3J0X2RhdGEgPSBvcGFxdWU7Ci0gICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGggPSBvbGVuZ3RoOwotICAgIGlmIChvcGFxdWUpICAgICAgICAgICAgICAgICAvKiBpZiBjcmVhdGVkLCB3ZSdyZSB0aGUgc2VydmVyICovCi0gICAgICAgICooKGludCAqKSBvcGFxdWUpID0gY3AtPnJldHVybl90cmFuc3BvcnRfbnVtOwotICAgIFNOTVBfRlJFRShjcCk7Ci0gICAgcmV0dXJuIHBkdTsKLX0KLQotbmV0c25tcF9zZXNzaW9uICoKLW5ldHNubXBfY2FsbGJhY2tfb3BlbihpbnQgYXR0YWNoX3RvLAotICAgICAgICAgICAgICAgICAgICAgIGludCAoKnJldHVybl9mdW5jKSAoaW50IG9wLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByZXFpZCwgbmV0c25tcF9wZHUgKnBkdSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm1hZ2ljKSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKSAobmV0c25tcF9zZXNzaW9uICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiwgaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpmcG9zdF9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLCBuZXRzbm1wX3BkdSAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50KSkKLXsKLSAgICBuZXRzbm1wX3Nlc3Npb24gY2FsbGJhY2tfc2VzcywgKmNhbGxiYWNrX3NzOwotICAgIG5ldHNubXBfdHJhbnNwb3J0ICpjYWxsYmFja190cjsKLQotICAgIGNhbGxiYWNrX3RyID0gbmV0c25tcF9jYWxsYmFja190cmFuc3BvcnQoYXR0YWNoX3RvKTsKLSAgICBzbm1wX3Nlc3NfaW5pdCgmY2FsbGJhY2tfc2Vzcyk7Ci0gICAgY2FsbGJhY2tfc2Vzcy5jYWxsYmFjayA9IHJldHVybl9mdW5jOwotICAgIGlmIChhdHRhY2hfdG8pIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogY2xpZW50IAotICAgICAgICAgKi8KLSAgICAgICAgLyoKLSAgICAgICAgICogdHJ5c2Vzcy5jb21tdW5pdHkgPSAodV9jaGFyICopIGNhbGxiYWNrX3NzOyAKLSAgICAgICAgICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgY2FsbGJhY2tfc2Vzcy5pc0F1dGhvcml0YXRpdmUgPSBTTk1QX1NFU1NfQVVUSE9SSVRBVElWRTsKLSAgICB9Ci0gICAgY2FsbGJhY2tfc2Vzcy5yZW1vdGVfcG9ydCA9IDA7Ci0gICAgY2FsbGJhY2tfc2Vzcy5yZXRyaWVzID0gMDsKLSAgICBjYWxsYmFja19zZXNzLnRpbWVvdXQgPSAzMDAwMDAwMDsKLSAgICBjYWxsYmFja19zZXNzLnZlcnNpb24gPSBTTk1QX0RFRkFVTFRfVkVSU0lPTjsgICAgICAgLyogKG1vc3RseSkgYm9ndXMgKi8KLSAgICBjYWxsYmFja19zcyA9IHNubXBfYWRkX2Z1bGwoJmNhbGxiYWNrX3Nlc3MsIGNhbGxiYWNrX3RyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcHJlX3BhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2hvb2tfcGFyc2UsIGZwb3N0X3BhcnNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2hvb2tfYnVpbGQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY2FsbGJhY2tfY2hlY2tfcGFja2V0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2NyZWF0ZV9wZHUpOwotICAgIGlmIChjYWxsYmFja19zcykKLSAgICAgICAgY2FsbGJhY2tfc3MtPmxvY2FsX3BvcnQgPQotICAgICAgICAgICAgKChuZXRzbm1wX2NhbGxiYWNrX2luZm8gKikgY2FsbGJhY2tfdHItPmRhdGEpLT5jYWxsYmFja19udW07Ci0gICAgcmV0dXJuIGNhbGxiYWNrX3NzOwotfQotCi0KLQotdm9pZAotbmV0c25tcF9jbGVhcl9jYWxsYmFja19saXN0KHZvaWQpCi17Ci0KLSAgICBuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICpsaXN0ID0gdHJsaXN0LCAqbmV4dCA9IE5VTEw7Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnRyID0gTlVMTDsKLQotICAgIERFQlVHTVNHVEwoKCJjYWxsYmFja19jbGVhciIsICJjYWxsZWQgbmV0c25tcF9jYWxsYmFja19jbGVhcl9saXN0KClcbiIpKTsKLSAgICB3aGlsZSAobGlzdCAhPSBOVUxMKSB7Ci0JbmV4dCA9IGxpc3QtPm5leHQ7Ci0JdHIgPSBsaXN0LT50cmFuc3BvcnQ7Ci0KLQlpZiAodHIgIT0gTlVMTCkgewotCSAgICB0ci0+Zl9jbG9zZSh0cik7Ci0gIAkgICAgbmV0c25tcF90cmFuc3BvcnRfcmVtb3ZlX2Zyb21fbGlzdCgmdHJsaXN0LCB0cik7Ci0JICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodHIpOwotCX0KLQlsaXN0ID0gbmV4dDsKLSAgICB9Ci0gICAgdHJsaXN0ID0gTlVMTDsKLQotfQotCi0jZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfQ0FMTEJBQ0tfRE9NQUlOICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBJUFhEb21haW4uYyBiL3NubXBsaWIvc25tcElQWERvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2FmZDVjLi4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcElQWERvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsNDU0ICswLDAgQEAKLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8Y3R5cGUuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQWERvbWFpbi5oPgotCi0jZGVmaW5lIFNOTVBfSVBYX0RFRkFVTFRfUE9SVAkzNjg3OSAgIC8qICBTcGVjaWZpZWQgaW4gUkZDIDE0MjAuICAqLwotc3RhdGljIG5ldHNubXBfdGRvbWFpbiBpcHhEb21haW47Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX2lweF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pcHggKnRvID0gTlVMTDsKLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pcHggKikgdC0+ZGF0YTsKLSAgICB9Ci0gICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiSVBYOiB1bmtub3duIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY2hhciB0bXBbNjRdOwotICAgICAgICBzcHJpbnRmKHRtcCwgIklQWDogJTA4WDolMDJYJTAyWCUwMlglMDJYJTAyWCUwMlgvJWh1IiwKLSAgICAgICAgICAgICAgICBudG9obCh0by0+c2lweF9uZXR3b3JrKSwgdG8tPnNpcHhfbm9kZVswXSwKLSAgICAgICAgICAgICAgICB0by0+c2lweF9ub2RlWzFdLCB0by0+c2lweF9ub2RlWzJdLCB0by0+c2lweF9ub2RlWzNdLAotICAgICAgICAgICAgICAgIHRvLT5zaXB4X25vZGVbNF0sIHRvLT5zaXB4X25vZGVbNV0sIG50b2hzKHRvLT5zaXB4X3BvcnQpKTsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF9pcHhfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQJCSAgICAgcmMgPSAtMTsKLSAgICBzb2NrbGVuX3QJICAgICBmcm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcik7Ci0gICAgc3RydWN0IHNvY2thZGRyICpmcm9tOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKiltYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKLSAgICAgICAgaWYgKGZyb20gPT0gTlVMTCkgewotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1zZXQoZnJvbSwgMCwgZnJvbWxlbik7Ci0gICAgICAgIH0KLQotCXdoaWxlIChyYyA8IDApIHsKLQkgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBmcm9tLCAmZnJvbWxlbik7Ci0JICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0JICAgIGJyZWFrOwotCSAgfQotCX0KLQotICAgICAgICBpZiAocmMgPj0gMCkgewotICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9pcHhfZm10YWRkcihOVUxMLCBmcm9tLCBmcm9tbGVuKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsInJlY3Zmcm9tIGZkICVkIGdvdCAlZCBieXRlcyhmcm9tICVzKVxuIiwKLQkJCXQtPnNvY2ssIHJjLCBzdHIpKTsKLSAgICAgICAgICAgIGZyZWUoc3RyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKm9wYXF1ZSA9ICh2b2lkICopIGZyb207Ci0gICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX2lweF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOwotCi0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgotCSpvbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKCpvcGFxdWUpOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCAmJgotICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAodC0+ZGF0YSk7Ci0gICAgfQotCi0gICAgaWYgKHRvICE9IE5VTEwgJiYgdCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2lweF9mbXRhZGRyKE5VTEwsICh2b2lkICopdG8sCi0JCQkJCXNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsICJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgdG8sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF9pcHhfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0gICAgaWYgKHQtPnNvY2sgPj0gMCkgewotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBJUFgtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAotICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCi0gKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX2lweF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgaW50IGxvY2FsKQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwotICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaXB4X2ZhbWlseSAhPSBBRl9JUFgpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzdHIgPSBuZXRzbm1wX2lweF9mbXRhZGRyKE5VTEwsICh2b2lkICopYWRkciwgCi0JCQkJIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaXB4IiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotICAgICAgICAgICAgICAgIHN0cikpOwotICAgIGZyZWUoc3RyKTsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBJUFhEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9IG5ldHNubXBJUFhEb21haW5fbGVuOwotCi0gICAgdC0+c29jayA9IHNvY2tldChBRl9JUFgsIFNPQ0tfREdSQU0sIEFGX0lQWCk7Ci0gICAgaWYgKHQtPnNvY2sgPCAwKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIGlmIChsb2NhbCkgewotICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTIpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSgmKHQtPmxvY2FsWzAwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9uZXR3b3JrKSwgNCk7Ci0gICAgICAgIG1lbWNweSgmKHQtPmxvY2FsWzA0XSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9ub2RlKSwgNik7Ci0gICAgICAgIG1lbWNweSgmKHQtPmxvY2FsWzEwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9wb3J0KSwgMik7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDEyOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKLSAgICAgICAgICogZ2l2ZW4gYWRkcmVzcyAod2hpY2ggbWF5IGluY2x1ZGUgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgYW5kL29yIG5vZGUKLSAgICAgICAgICogYWRkcmVzcywgYnV0IGRlZmluaXRlbHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlcikuCi0gICAgICAgICAqLwotCi0gICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX2lweF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICB0LT5kYXRhID0gTlVMTDsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSAwOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTIpOwotICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkoJih0LT5yZW1vdGVbMDBdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X25ldHdvcmspLCA0KTsKLSAgICAgICAgbWVtY3B5KCYodC0+cmVtb3RlWzA0XSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9ub2RlKSwgNik7Ci0gICAgICAgIG1lbWNweSgmKHQtPnJlbW90ZVsxMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfcG9ydCksIDIpOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gMTI7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudCBzZXNzaW9uLiAgU2F2ZSB0aGUgYWRkcmVzcyBpbiB0aGUKLSAgICAgICAgICogdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIGJ5IHNubXBfaXB4X3NlbmQuCi0gICAgICAgICAqLwotCi0gICAgICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKLSAgICAgICAgaWYgKHQtPmRhdGEgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE1heGltdW0gc2l6ZSBvZiBhbiBJUFggUERVIGlzIDU3NiBieXRlcyBpbmNsdWRpbmcgYSAzMC1ieXRlIGhlYWRlci4KLSAgICAgKiBSaWRpY3Vsb3VzISAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gNTc2IC0gMzA7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfaXB4X3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfaXB4X3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfaXB4X2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBOVUxMOwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX2lweF9mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLQotCi0vKgotICogQXR0ZW1wdCB0byBwYXJzZSBhIHN0cmluZyBvZiB0aGUgZm9ybSBbJTA4eF06JTEyeFsvJWRdIHdoZXJlIHRoZSBwYXJ0cwotICogYXJlIHRoZSBuZXR3b3JrIG51bWJlciwgdGhlIG5vZGUgYWRkcmVzcyBhbmQgdGhlIHBvcnQgaW4gdGhhdCBvcmRlci4gIAotICovCi0KLWludAotbmV0c25tcF9zb2NrYWRkcl9pcHgyKHN0cnVjdCBzb2NrYWRkcl9pcHggKmFkZHIsIGNvbnN0IGNoYXIgKnBlZXJuYW1lLAotCQkgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBjaGFyICAgICAgICAgICAqaW5wdXQgPSBOVUxMLCAqZGVmID0gTlVMTDsKLSAgICBjb25zdCBjaGFyICAgICAqbmV0d29yaywgKm5vZGUsICpwb3J0OwotICAgIGNoYXIgICAgICAgICAgICp0bXA7Ci0gICAgdW5zaWduZWQgbG9uZyAgIGk7Ci0KLSAgICBpZiAoYWRkciA9PSBOVUxMKSB7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLSAgICBtZW1zZXQoYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKTsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCi0JCSJhZGRyICVwLCBwZWVybmFtZSBcIiVzXCIgZGVmYXVsdF90YXJnZXQgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIGFkZHIsIHBlZXJuYW1lID8gcGVlcm5hbWUgOiAiW05JTF0iLAotCQlkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIltOSUxdIikpOwotCi0gICAgYWRkci0+c2lweF9mYW1pbHkgPSBBRl9JUFg7Ci0gICAgYWRkci0+c2lweF90eXBlID0gNDsgICAgICAgIC8qICBTcGVjaWZpZWQgaW4gUkZDIDE0MjAuICAqLwotCi0gICAgbmV0d29yayA9IGlucHV0ID0gc3RyZHVwKHBlZXJuYW1lID8gcGVlcm5hbWUgOiAiIik7Ci0gICAgdG1wID0gc3RyY2hyKG5ldHdvcmssICc6Jyk7Ci0gICAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJOb2RlIGlkZW50aWZpZWRcbiIpKTsKLSAgICAgICAgKnRtcCsrID0gJ1wwJzsKLQlub2RlID0gdG1wOwotICAgICAgICB0bXAgPSBzdHJjaHIodG1wLCAnLycpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5vZGUgPSBOVUxMOwotICAgICAgICB0bXAgPSBzdHJjaHIobmV0d29yaywgJy8nKTsKLSAgICB9Ci0gICAgaWYgKHRtcCAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJQb3J0IGlkZW50aWZpZWRcbiIpKTsKLSAgICAgICAgKnRtcCsrID0gJ1wwJzsKLSAgICAgICAgcG9ydCA9IHRtcDsKLSAgICB9IGVsc2UKLSAgICAgICAgcG9ydCA9IE5VTEw7Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiQWRkcmVzczogJXM6JXMvJXNcbiIsCi0gICAgICAgICAgICAgICAgbmV0d29yayA/IG5ldHdvcmsgOiAiW05JTF0iLCBub2RlID8gbm9kZSA6ICJbTklMXSIsCi0gICAgICAgICAgICAgICAgcG9ydCA/IHBvcnQgOiAiW05JTF0iKSk7Ci0KLSAgICBkZWYgPSBzdHJkdXAoZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICIiKTsKLSAgICBpZiAobmV0d29yayA9PSBOVUxMIHx8ICpuZXR3b3JrID09ICdcMCcpCi0gICAgICAgIG5ldHdvcmsgPSBkZWY7Ci0gICAgdG1wID0gc3RyY2hyKGRlZiwgJzonKTsKLSAgICBpZiAodG1wICE9IE5VTEwpIHsKLSAgICAgICAgKnRtcCsrID0gJ1wwJzsKLQlpZiAobm9kZSA9PSBOVUxMIHx8ICpub2RlID09ICdcMCcpCi0gICAgICAgICAgICBub2RlID0gdG1wOwotICAgICAgICB0bXAgPSBzdHJjaHIodG1wLCAnLycpOwotICAgIH0gZWxzZQotICAgICAgICB0bXAgPSBzdHJjaHIoZGVmLCAnLycpOwotICAgIGlmICh0bXAgIT0gTlVMTCkgewotICAgICAgICAqdG1wKysgPSAnXDAnOwotICAgICAgICBpZiAocG9ydCA9PSBOVUxMIHx8ICpwb3J0ID09ICdcMCcpCi0gICAgICAgICAgICBwb3J0ID0gdG1wOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJBZGRyZXNzOiAlczolcy8lc1xuIiwKLSAgICAgICAgICAgICAgICBuZXR3b3JrID8gbmV0d29yayA6ICJbTklMXSIsIG5vZGUgPyBub2RlIDogIltOSUxdIiwKLSAgICAgICAgICAgICAgICBwb3J0ID8gcG9ydCA6ICJbTklMXSIpKTsKLQotICAgIGlmIChuZXR3b3JrID09IE5VTEwgfHwgKm5ldHdvcmsgPT0gJ1wwJykKLSAgICAgICAgbmV0d29yayA9ICIwIjsKLQotICAgIGlmIChub2RlID09IE5VTEwgfHwgKm5vZGUgPT0gJ1wwJykKLSAgICAgICAgbm9kZSA9ICIwMDAwMDAwMDAwMDAiOwotCi0gICAgaWYgKHBvcnQgPT0gTlVMTCB8fCAqcG9ydCA9PSAnXDAnKQotI2RlZmluZSB2YWwoeCkgX19TVFJJTkcoeCkKLSAgICAgICAgcG9ydCA9IHZhbChTTk1QX0lQWF9ERUZBVUxUX1BPUlQpOwotI3VuZGVmIHZhbAotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIkFkZHJlc3M6ICVzOiVzLyVzXG4iLAotICAgICAgICAgICAgICAgIG5ldHdvcmsgPyBuZXR3b3JrIDogIltOSUxdIiwgbm9kZSA/IG5vZGUgOiAiW05JTF0iLAotICAgICAgICAgICAgICAgIHBvcnQgPyBwb3J0IDogIltOSUxdIikpOwotCi0gICAgaWYoc3NjYW5mKG5ldHdvcmssICIlOGx4JSpjIiwgJmkpID09IDEpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIm5ldHdvcmsgcGFyc2VkIG9rYXlcbiIpKTsKLSAgICAgICAgYWRkci0+c2lweF9uZXR3b3JrID0gaHRvbmwoaSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwKLSAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBuZXR3b3JrIHBhcnQgb2YgYWRkcmVzc1xuIikpOwotICAgICAgICBmcmVlKGRlZik7Ci0gICAgICAgIGZyZWUoaW5wdXQpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBpZihzc2NhbmYobm9kZSwgIiUyaGh4JTJoaHglMmhoeCUyaGh4JTJoaHglMmhoeCUqYyIsCi0gICAgICAgICAgICAgICZhZGRyLT5zaXB4X25vZGVbMF0sICZhZGRyLT5zaXB4X25vZGVbMV0sCi0gICAgICAgICAgICAgICZhZGRyLT5zaXB4X25vZGVbMl0sICZhZGRyLT5zaXB4X25vZGVbM10sCi0gICAgICAgICAgICAgICZhZGRyLT5zaXB4X25vZGVbNF0sICZhZGRyLT5zaXB4X25vZGVbNV0pID09IDYpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIm5vZGUgcGFyc2VkIG9rYXlcbiIpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLAotICAgICAgICAgICAgICAgICAgICAiZmFpbGVkIHRvIHBhcnNlIG5vZGUgcGFydCBvZiBhZGRyZXNzXG4iKSk7Ci0gICAgICAgIGZyZWUoZGVmKTsKLSAgICAgICAgZnJlZShpbnB1dCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIGlmKHNzY2FuZihwb3J0LCAiJWx1JSpjIiwgJmkpID09IDEpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgInBvcnQgcGFyc2VkIG9rYXlcbiIpKTsKLSAgICAgICAgYWRkci0+c2lweF9wb3J0ID0gaHRvbnMoaSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwKLSAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBwb3J0IHBhcnQgb2YgYWRkcmVzc1xuIikpOwotICAgICAgICBmcmVlKGRlZik7Ci0gICAgICAgIGZyZWUoaW5wdXQpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBmcmVlKGRlZik7Ci0gICAgZnJlZShpbnB1dCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLQotCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaXB4KHN0cnVjdCBzb2NrYWRkcl9pcHggKmFkZHIsIGNvbnN0IGNoYXIgKnBlZXJuYW1lKQotewotICAgIHJldHVybiBuZXRzbm1wX3NvY2thZGRyX2lweDIoYWRkciwgcGVlcm5hbWUsIE5VTEwpOwotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9pcHhfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCi0JCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaXB4IGFkZHI7Ci0KLSAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pcHgyKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgewotICAgICAgICByZXR1cm4gbmV0c25tcF9pcHhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF9pcHhfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2lweCBhZGRyOwotCi0gICAgaWYgKG9fbGVuID09IDEyKSB7Ci0gICAgICAgIGFkZHIuc2lweF9mYW1pbHkgPSBBRl9JUFg7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2lweF9uZXR3b3JrKSwgJihvWzAwXSksIDQpOwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpcHhfbm9kZSksICYob1swNF0pLCA2KTsKLSAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaXB4X3BvcnQpLCAmKG9bMTBdKSwgMik7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX2lweF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi12b2lkCi1uZXRzbm1wX2lweF9jdG9yKHZvaWQpCi17Ci0gICAgaXB4RG9tYWluLm5hbWUgPSBuZXRzbm1wSVBYRG9tYWluOwotICAgIGlweERvbWFpbi5uYW1lX2xlbmd0aCA9IG5ldHNubXBJUFhEb21haW5fbGVuOwotICAgIGlweERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgaXB4RG9tYWluLnByZWZpeFswXSA9ICJpcHgiOwotCi0gICAgaXB4RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIGlweERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9pcHhfY3JlYXRlX3RzdHJpbmc7Ci0gICAgaXB4RG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX2lweF9jcmVhdGVfb3N0cmluZzsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmaXB4RG9tYWluKTsKLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcFNURERvbWFpbi5jIGIvc25tcGxpYi9zbm1wU1RERG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGY4M2VhYTUuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wU1RERG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSwyODUgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTVEREb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+Ci0KLW9pZCBuZXRzbm1wX3NubXBTVEREb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9TVERfSVAgfTsKLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gc3RkRG9tYWluOwotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF9zdGRfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKLXsKLSAgICBjaGFyICpidWY7Ci0gICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJmb3JtYXR0aW5nIGFkZHIuICBkYXRhPSV4XG4iLHQtPmRhdGEpKTsKLSAgICBpZiAodC0+ZGF0YSkgewotICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhID0gKG5ldHNubXBfc3RkX2RhdGEqKXQtPmRhdGE7Ci0gICAgICAgIGJ1ZiA9IChjaGFyKiltYWxsb2MoU05NUF9NQVhCVUZfTUVESVVNKTsKLSAgICAgICAgaWYgKCFidWYpCi0gICAgICAgICAgICByZXR1cm4gc3RyZHVwKCJTVERJbk91dCIpOwotICAgICAgICBzbnByaW50ZihidWYsIFNOTVBfTUFYQlVGX01FRElVTSwgIlNURDolcyIsIGRhdGEtPnByb2cpOwotICAgICAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsIiAgZm9ybWF0dGVkOj0lc1xuIixidWYpKTsKLSAgICAgICAgcmV0dXJuIGJ1ZjsKLSAgICB9Ci0gICAgcmV0dXJuIHN0cmR1cCgiU1RESW5PdXQiKTsKLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF9zdGRfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwicmVjdiBvbiBzb2NrICVkLiAgZGF0YT0leFxuIix0LT5zb2NrLCB0LT5kYXRhKSk7Ci0gICAgd2hpbGUgKHJjIDwgMCkgewotICAgICAgICByYyA9IHJlYWQodC0+c29jaywgYnVmLCBzaXplKTsKLSAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIgIGJ5dGVzOiAlZC5cbiIsIHJjKSk7Ci0gICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3N0ZCIsICIgcmVhZCBvbiBmZCAlZCBmYWlsZWQ6ICVkIChcIiVzXCIpXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJjID09IDApIHsKLSAgICAgICAgICAgIC8qIDAgaW5wdXQgaXMgcHJvYmFibHkgYmFkIHNpbmNlIHdlIHNlbGVjdGVkIG9uIGl0ICovCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc3RkIiwgInJlYWQgb24gc3RkaW4gZ290ICVkIGJ5dGVzXG4iLCByYykpOwotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfc3RkX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50IHJjID0gLTE7Ci0KLSAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsInNlbmQgb24gc29jay4gIGRhdGE9JXhcbiIsIHQtPmRhdGEpKTsKLSAgICB3aGlsZSAocmMgPCAwKSB7Ci0gICAgICAgIGlmICh0LT5kYXRhKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhID0gKG5ldHNubXBfc3RkX2RhdGEqKXQtPmRhdGE7Ci0gICAgICAgICAgICByYyA9IHdyaXRlKGRhdGEtPm91dGZkLCBidWYsIHNpemUpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgLyogc3RyYWlnaHQgdG8gc3Rkb3V0ICovCi0gICAgICAgICAgICByYyA9IHdyaXRlKDEsIGJ1Ziwgc2l6ZSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3N0ZF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsImNsb3NlLiAgZGF0YT0leFxuIiwgdC0+ZGF0YSkpOwotICAgIGlmICh0LT5kYXRhKSB7Ci0gICAgICAgIG5ldHNubXBfc3RkX2RhdGEgKmRhdGEgPSAobmV0c25tcF9zdGRfZGF0YSopdC0+ZGF0YTsKLSAgICAgICAgY2xvc2UoZGF0YS0+b3V0ZmQpOwotICAgICAgICBjbG9zZSh0LT5zb2NrKTsKLQotICAgICAgICAvKiBraWxsIHRoZSBjaGlsZCB0b28gKi8KLSAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIga2lsbGluZyAlZFxuIiwgZGF0YS0+Y2hpbGRwaWQpKTsKLSAgICAgICAga2lsbChkYXRhLT5jaGlsZHBpZCwgU0lHVEVSTSk7Ci0gICAgICAgIHNsZWVwKDEpOwotICAgICAgICBraWxsKGRhdGEtPmNoaWxkcGlkLCBTSUdLSUxMKTsKLSAgICAgICAgLyogWFhYOiBzZXQgYW4gYWxhcm0gdG8ga2lsbCBoYXJkZXIgdGhlIGNoaWxkICovCi0gICAgfSBlbHNlIHsKLSAgICAgICAgLyogY2xvc2Ugc3Rkb3V0L2luICovCi0gICAgICAgIGNsb3NlKDEpOwotICAgICAgICBjbG9zZSgwKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3N0ZF9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIgYWNjZXB0IGRhdGE9JXhcbiIsIHQtPmRhdGEpKTsKLSAgICAvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIE9wZW4gYSBTVERJTi9TVERPVVQgLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4KLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3N0ZF90cmFuc3BvcnQoY29uc3QgY2hhciAqaW5zdHJpbmcsIHNpemVfdCBpbnN0cmluZ19sZW4sCi0JCSAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0OwotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcF9zbm1wU1RERG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPQotICAgICAgICBzaXplb2YobmV0c25tcF9zbm1wU1RERG9tYWluKSAvIHNpemVvZihuZXRzbm1wX3NubXBTVEREb21haW5bMF0pOwotCi0gICAgdC0+c29jayA9IDA7Ci0gICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTSB8IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVFVOTkVMRUQ7Ci0KLSAgICAvKgotICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQotICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4gIAotICAgICAqLwotCi0gICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfc3RkX3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfc3RkX3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc3RkX2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3N0ZF9hY2NlcHQ7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfc3RkX2ZtdGFkZHI7Ci0KLSAgICAvKgotICAgICAqIGlmIGluc3RyaW5nIGlzIG5vdCBudWxsIGxlbmd0aCwgaXQgc3BlY2lmaWVzIGEgcGF0aCB0byBhIHByb2cKLSAgICAgKiBYWFg6IHBsdXMgYXJncwotICAgICAqLwotICAgIGlmIChpbnN0cmluZ19sZW4gPT0gMCAmJiBkZWZhdWx0X3RhcmdldCAhPSBOVUxMKSB7Ci0JaW5zdHJpbmcgPSBkZWZhdWx0X3RhcmdldDsKLQlpbnN0cmluZ19sZW4gPSBzdHJsZW4oZGVmYXVsdF90YXJnZXQpOwotICAgIH0KLQotICAgIGlmIChpbnN0cmluZ19sZW4gIT0gMCkgewotICAgICAgICBpbnQgaW5mZFsyXSwgb3V0ZmRbMl07ICAvKiBzb2NrZXRzIHRvIGFuZCBmcm9tIHRoZSBjbGllbnQgKi8KLSAgICAgICAgaW50IGNoaWxkcGlkOwotCi0gICAgICAgIGlmIChwaXBlKGluZmQpIHx8IHBpcGUob3V0ZmQpKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgbmVlZGVkIHBpcGVzIGZvciBhIFNURCB0cmFuc3BvcnQiKTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIGNoaWxkcGlkID0gZm9yaygpOwotICAgICAgICAvKiBwYXJlbnRwaWQgPT4gY2hpbGRwaWQgKi8KLSAgICAgICAgLyogaW5mZFsxXSAgID0+IGluZmRbMF0gKi8KLSAgICAgICAgLyogb3V0ZmRbMF0gIDw9IG91dGZkWzFdICovCi0KLSAgICAgICAgaWYgKGNoaWxkcGlkKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvKiB3ZSdyZSBpbiB0aGUgcGFyZW50ICovCi0gICAgICAgICAgICBjbG9zZShpbmZkWzBdKTsKLSAgICAgICAgICAgIGNsb3NlKG91dGZkWzFdKTsKLQotICAgICAgICAgICAgZGF0YSA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9zdGRfZGF0YSk7Ci0gICAgICAgICAgICBpZiAoIWRhdGEpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic25tcFNURERvbWFpbjogbWFsbG9jIGZhaWxlZCIpOwotICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICB0LT5kYXRhID0gZGF0YTsKLSAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfc3RkX2RhdGEpOwotICAgICAgICAgICAgdC0+c29jayA9IG91dGZkWzBdOwotICAgICAgICAgICAgZGF0YS0+cHJvZyA9IHN0cmR1cChpbnN0cmluZyk7Ci0gICAgICAgICAgICBkYXRhLT5vdXRmZCA9IGluZmRbMV07Ci0gICAgICAgICAgICBkYXRhLT5jaGlsZHBpZCA9IGNoaWxkcGlkOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJwYXJlbnQuICBkYXRhPSV4XG4iLCB0LT5kYXRhKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKiB3ZSdyZSBpbiB0aGUgY2hpbGQgKi8KLQotICAgICAgICAgICAgLyogY2xvc2Ugc3RkaW4gKi8KLSAgICAgICAgICAgIGNsb3NlKDApOwotICAgICAgICAgICAgLyogY29weSBwaXBlIG91dHB1dCB0byBzdGRvdXQgKi8KLSAgICAgICAgICAgIGR1cChpbmZkWzBdKTsKLQotICAgICAgICAgICAgLyogY2xvc2Ugc3Rkb3V0ICovCi0gICAgICAgICAgICBjbG9zZSgxKTsKLSAgICAgICAgICAgIC8qIGNvcHkgcGlwZSBvdXRwdXQgdG8gc3RkaW4gKi8KLSAgICAgICAgICAgIGR1cChvdXRmZFsxXSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8qIGNsb3NlIGFsbCB0aGUgcGlwZXMgdGhlbXNlbHZlcyAqLwotICAgICAgICAgICAgY2xvc2UoaW5mZFswXSk7Ci0gICAgICAgICAgICBjbG9zZShpbmZkWzFdKTsKLSAgICAgICAgICAgIGNsb3NlKG91dGZkWzBdKTsKLSAgICAgICAgICAgIGNsb3NlKG91dGZkWzFdKTsKLQotICAgICAgICAgICAgLyogY2FsbCBleGVjICovCi0gICAgICAgICAgICBzeXN0ZW0oaW5zdHJpbmcpOwotICAgICAgICAgICAgLyogWFhYOiBUT0RPOiB1c2UgZXhlYyBmb3JtIGluc3RlYWQ7IG5lZWRzIGFyZ3MgKi8KLSAgICAgICAgICAgIC8qIGV4ZWN2KGluc3RyaW5nLCBOVUxMKTsgKi8KLSAgICAgICAgICAgIGV4aXQoMCk7Ci0KLSAgICAgICAgICAgIC8qIGFjay4uLiAgd2Ugc2hvdWxkIG5ldmVyIGV2ZXIgZ2V0IGhlcmUgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTVEQgdHJhbnNwb3J0IHJldHVybmVkIGFmdGVyIGV4ZWN2KClcbiIpOwotICAgICAgICB9Ci0gICAgfSAgICAgICAgICAgIAotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfc3RkX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKmluc3RyaW5nLCBpbnQgbG9jYWwsCi0JCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKLXsKLSAgICByZXR1cm4gbmV0c25tcF9zdGRfdHJhbnNwb3J0KGluc3RyaW5nLCBzdHJsZW4oaW5zdHJpbmcpLCBkZWZhdWx0X3RhcmdldCk7Ci19Ci0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfc3RkX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQotewotICAgIHJldHVybiBuZXRzbm1wX3N0ZF90cmFuc3BvcnQoKGNvbnN0IGNoYXIqKW8sIG9fbGVuLCBOVUxMKTsKLX0KLQotdm9pZAotbmV0c25tcF9zdGRfY3Rvcih2b2lkKQotewotICAgIHN0ZERvbWFpbi5uYW1lID0gbmV0c25tcF9zbm1wU1RERG9tYWluOwotICAgIHN0ZERvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3NubXBTVEREb21haW4pIC8gc2l6ZW9mKG9pZCk7Ci0gICAgc3RkRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyICoqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7Ci0gICAgc3RkRG9tYWluLnByZWZpeFswXSA9ICJzdGQiOwotCi0gICAgc3RkRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOwotICAgIHN0ZERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9zdGRfY3JlYXRlX3RzdHJpbmc7Ci0gICAgc3RkRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3N0ZF9jcmVhdGVfb3N0cmluZzsKLQotICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3Rlcigmc3RkRG9tYWluKTsKLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcFRDUERvbWFpbi5jIGIvc25tcGxpYi9zbm1wVENQRG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjYjZmOTQuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wVENQRG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw0NzMgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0jaWYgSEFWRV9BUlBBX0lORVRfSAotI2luY2x1ZGUgPGFycGEvaW5ldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9GQ05UTF9ICi0jaW5jbHVkZSA8ZmNudGwuaD4KLSNlbmRpZgotCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrMi5oPgotI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaD4KLQotLyogQ29waWVkIGZyb20gc25tcFVEUERvbWFpbi5jICovCi10eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3VkcF9hZGRyX3BhaXJfcyB7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZV9hZGRyOwotICAgIHN0cnVjdCBpbl9hZGRyIGxvY2FsX2FkZHI7Ci19IG5ldHNubXBfdWRwX2FkZHJfcGFpcjsKLQotb2lkIG5ldHNubXBfc25tcFRDUERvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX1RDUF9JUCB9Owotc3RhdGljIG5ldHNubXBfdGRvbWFpbiB0Y3BEb21haW47Ci0KLS8qCi0gKiBOb3Qgc3RhdGljIHNpbmNlIGl0IGlzIG5lZWRlZCBoZXJlIGFzIHdlbGwgYXMgaW4gc25tcFVEUERvbWFpbiwgYnV0IG5vdAotICogcHVibGljIGVpdGhlcgotICovCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaW4yKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KTsKLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfdGNwX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpIHsKLQlhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7Ci0JYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSB0LT5kYXRhOwotICAgIH0KLQotICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gc3RyZHVwKCJUQ1A6IHVua25vd24iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnRvID0gTlVMTDsKLQljaGFyIHRtcFs2NF07Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOwotICAgICAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICAgICAgcmV0dXJuIHN0cmR1cCgiVENQOiB1bmtub3duIik7Ci0gICAgICAgIH0KLQotICAgICAgICBzcHJpbnRmKHRtcCwgIlRDUDogWyVzXTolaHUiLAotICAgICAgICAgICAgICAgIGluZXRfbnRvYSh0by0+c2luX2FkZHIpLCBudG9ocyh0by0+c2luX3BvcnQpKTsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF90Y3BfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKLQkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgInJlY3YgZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAotCQkJICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQkgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgInJlY3YgZmQgJWQgZ290ICVkIGJ5dGVzXG4iLAotCQkJdC0+c29jaywgcmMpKTsKLQl9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLQotICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiBvbGVuZ3RoICE9IE5VTEwpIHsKLSAgICAgICAgaWYgKHQtPmRhdGFfbGVuZ3RoID4gMCkgewotICAgICAgICAgICAgaWYgKCgqb3BhcXVlID0gbWFsbG9jKHQtPmRhdGFfbGVuZ3RoKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIG1lbWNweSgqb3BhcXVlLCB0LT5kYXRhLCB0LT5kYXRhX2xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgKm9sZW5ndGggPSB0LT5kYXRhX2xlbmd0aDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3RjcF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IC0xOwotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJjbG9zZSBmZCAlZFxuIiwgdC0+c29jaykpOwotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF90Y3BfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIHN0cnVjdCBzb2NrYWRkciAqZmFyZW5kID0gTlVMTDsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIG5ld3NvY2sgPSAtMTsKLSNpZmRlZiBXSU4zMgotICAgIHVfbG9uZyAgICAgICAgICBpb2N0bHNvY2tldF9vcHQ7Ci0jZWxzZQotICAgIGludCAgICAgICAgICAgICBzb2NrZmxhZ3M7Ci0jZW5kaWYKLSAgICBzb2NrbGVuX3QgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7Ci0gICAgY2hhciAgICAgICAgICAgKnN0ciA9IE5VTEw7Ci0KLSAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopbWFsbG9jKHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLQotICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgewotICAgICAgICAvKgotICAgICAgICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBhY2NlcHRhbmNlIG9mIHRoaXMgc29ja2V0IGZhaWxlZC4gIAotICAgICAgICAgKi8KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImFjY2VwdDogbWFsbG9jIGZhaWxlZFxuIikpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIGZhcmVuZCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIG5ld3NvY2sgPSBhY2NlcHQodC0+c29jaywgZmFyZW5kLCAmZmFyZW5kbGVuKTsKLQotICAgICAgICBpZiAobmV3c29jayA8IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJhY2NlcHQgZmFpbGVkIHJjICVkIGVycm5vICVkIFwiJXNcIlxuIiwKLQkJCW5ld3NvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKLSAgICAgICAgICAgIGZyZWUoZmFyZW5kKTsKLSAgICAgICAgICAgIHJldHVybiBuZXdzb2NrOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHQtPmRhdGEgIT0gTlVMTCkgewotICAgICAgICAgICAgZnJlZSh0LT5kYXRhKTsKLSAgICAgICAgfQotCi0gICAgICAgIHQtPmRhdGEgPSBhZGRyX3BhaXI7Ci0gICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7Ci0gICAgICAgIHN0ciA9IG5ldHNubXBfdGNwX2ZtdGFkZHIoTlVMTCwgZmFyZW5kLCBmYXJlbmRsZW4pOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiYWNjZXB0IHN1Y2NlZWRlZCAoZnJvbSAlcylcbiIsIHN0cikpOwotICAgICAgICBmcmVlKHN0cik7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IHRvIG1ha2UgdGhlIG5ldyBzb2NrZXQgYmxvY2tpbmcuICAKLSAgICAgICAgICovCi0KLSNpZmRlZiBXSU4zMgotICAgICAgICBpb2N0bHNvY2tldF9vcHQgPSAwOwotICAgICAgICBpb2N0bHNvY2tldChuZXdzb2NrLCBGSU9OQklPLCAmaW9jdGxzb2NrZXRfb3B0KTsKLSNlbHNlCi0gICAgICAgIGlmICgoc29ja2ZsYWdzID0gZmNudGwobmV3c29jaywgRl9HRVRGTCwgMCkpID49IDApIHsKLSAgICAgICAgICAgIGZjbnRsKG5ld3NvY2ssIEZfU0VURkwsIChzb2NrZmxhZ3MgJiB+T19OT05CTE9DSykpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImNvdWxkbid0IGZfZ2V0Zmwgb2YgZmQgJWRcbiIsbmV3c29jaykpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAvKgotICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKLSAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KLSAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAotICAgICAgICAgKi8KLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fU05EQlVGLCAxLCAwKTsKLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKLQotICAgICAgICByZXR1cm4gbmV3c29jazsKLSAgICB9IGVsc2UgewotICAgICAgICBmcmVlKGZhcmVuZCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogT3BlbiBhIFRDUC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCi0gKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKLSAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdGNwX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOwotICAgIGludCByYyA9IDA7Ci0KLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIHQgPSAobmV0c25tcF90cmFuc3BvcnQgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotICAgIGlmICh0ID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKiltYWxsb2Moc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgdC0+ZGF0YSA9IGFkZHJfcGFpcjsKLSAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpOwotICAgIG1lbWNweSgmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0KLSAgICB0LT5kb21haW4gPSBuZXRzbm1wX3NubXBUQ1BEb21haW47Ci0gICAgdC0+ZG9tYWluX2xlbmd0aCA9Ci0gICAgICAgIHNpemVvZihuZXRzbm1wX3NubXBUQ1BEb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfc25tcFRDUERvbWFpblswXSk7Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTTsKLQotICAgIGlmIChsb2NhbCkgewotI2lmZGVmIFdJTjMyCi0gICAgICAgIHVfbG9uZyBpb2N0bHNvY2tldF9vcHQgPSAxOwotI2Vsc2UKLSAgICAgICAgaW50IHNvY2tmbGFncyA9IDA7Ci0jZW5kaWYKLSAgICAgICAgaW50IG9wdCA9IDE7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIHRvIHRoZSBnaXZlbiAKLSAgICAgICAgICogSVAgYWRkcmVzcyAod2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkIGJlCi0gICAgICAgICAqIElOQUREUl9BTlksIGJ1dCB3aWxsIGFsd2F5cyBpbmNsdWRlIGEgcG9ydCBudW1iZXIuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU47Ci0gICAgICAgIHQtPmxvY2FsID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5sb2NhbCwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKLSAgICAgICAgdC0+bG9jYWxbNF0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5sb2NhbFs1XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDY7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogV2Ugc2hvdWxkIHNldCBTT19SRVVTRUFERFIgdG9vLiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIHNldHNvY2tvcHQodC0+c29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAodm9pZCAqKSZvcHQsCi0JCSAgIHNpemVvZihvcHQpKTsKLQotICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIGJlIGxldHRpbmcgc2VsZWN0KCkgdGVsbCB1cyB3aGVuIGNvbm5lY3Rpb25zCi0gICAgICAgICAqIGFyZSByZWFkeSB0byBiZSBhY2NlcHQoKWVkLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHNvY2tldCBuMG4tYmxvY2tpbmcKLSAgICAgICAgICogdG8gYXZvaWQgdGhlIHJhY2UgY29uZGl0aW9uIGRlc2NyaWJlZCBpbiBXLiBSLiBTdGV2ZW5zLCBgYFVuaXgKLSAgICAgICAgICogTmV0d29yayBQcm9ncmFtbWluZyBWb2x1bWUgSSBTZWNvbmQgRWRpdGlvbicnLCBwcC4gNDIyLS00LCB3aGljaAotICAgICAgICAgKiBjb3VsZCBvdGhlcndpc2Ugd2VkZ2UgdGhlIGFnZW50LgotICAgICAgICAgKi8KLQotI2lmZGVmIFdJTjMyCi0gICAgICAgIGlvY3Rsc29ja2V0X29wdCA9IDE7Ci0gICAgICAgIGlvY3Rsc29ja2V0KHQtPnNvY2ssIEZJT05CSU8sICZpb2N0bHNvY2tldF9vcHQpOwotI2Vsc2UKLSAgICAgICAgc29ja2ZsYWdzID0gZmNudGwodC0+c29jaywgRl9HRVRGTCwgMCk7Ci0gICAgICAgIGZjbnRsKHQtPnNvY2ssIEZfU0VURkwsIHNvY2tmbGFncyB8IE9fTk9OQkxPQ0spOwotI2VuZGlmCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogTm93IHNpdCBoZXJlIGFuZCB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBhcnJpdmUuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvKgotICAgICAgICAgKiBubyBidWZmZXIgc2l6ZSBvbiBsaXN0ZW4gc29ja2V0IC0gZG9lc24ndCBtYWtlIHNlbnNlCi0gICAgICAgICAqLwotCi0gICAgfSBlbHNlIHsKLSAgICAgIHQtPnJlbW90ZSA9ICh1X2NoYXIgKiltYWxsb2MoNik7Ci0gICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3BfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKLSAgICAgICAgdC0+cmVtb3RlWzRdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzVdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDY7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudC10eXBlIHNlc3Npb24sIHNvIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGUgZmFyCi0gICAgICAgICAqIGVuZC4gIFdlIGRvbid0IGdvIG5vbi1ibG9ja2luZyBoZXJlIGJlY2F1c2UgaXQncyBub3Qgb2J2aW91cyB3aGF0Ci0gICAgICAgICAqIHlvdSdkIHRoZW4gZG8gaWYgeW91IHRyaWVkIHRvIGRvIHNubXBfc2VuZHMgYmVmb3JlIHRoZSBjb25uZWN0aW9uCi0gICAgICAgICAqIGhhZCBjb21wbGV0ZWQuICBTbyB0aGlzIGNhbiBibG9jay4KLSAgICAgICAgICovCi0KLSAgICAgICAgcmMgPSBjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKilhZGRyLAotCQkgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLQotICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcF9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcwotICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQotICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCi0gICAgICAgICAqLwotICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fUkNWQlVGLCBsb2NhbCwgMCk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKLSAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3RjcF9yZWN2OwotICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3RjcF9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3RjcF9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF90Y3BfYWNjZXB0OwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3RjcF9mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3RjcF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKLQkJCSAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOwotCi0gICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW4yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgewotICAgICAgICByZXR1cm4gbmV0c25tcF90Y3BfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotfQotCi0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF90Y3BfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPT0gNikgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0dG1wID0gKG9bNF0gPDwgOCkgKyBvWzVdOwotICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbl9hZGRyLnNfYWRkciksIG8sIDQpOwotICAgICAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydHRtcCk7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3RjcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotCi12b2lkCi1uZXRzbm1wX3RjcF9jdG9yKHZvaWQpCi17Ci0gICAgdGNwRG9tYWluLm5hbWUgPSBuZXRzbm1wX3NubXBUQ1BEb21haW47Ci0gICAgdGNwRG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfc25tcFRDUERvbWFpbikgLyBzaXplb2Yob2lkKTsKLSAgICB0Y3BEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIgKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKLSAgICB0Y3BEb21haW4ucHJlZml4WzBdID0gInRjcCI7Ci0KLSAgICB0Y3BEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3RjcF9jcmVhdGVfdHN0cmluZzsKLSAgICB0Y3BEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdGNwX2NyZWF0ZV9vc3RyaW5nOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ0Y3BEb21haW4pOwotfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jIGIvc25tcGxpYi9zbm1wVENQSVB2NkRvbWFpbi5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkZTdlODNmLi4wMDAwMDAwCi0tLSBhL3NubXBsaWIvc25tcFRDUElQdjZEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDQ5MyArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxlcnJuby5oPgotCi0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1VOSVNURF9ICi0jaW5jbHVkZSA8dW5pc3RkLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1NZU19TT0NLRVRfSAotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNlbmRpZgotCi0jaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkKLSAgICAvKgotICAgICAqIFdpbmRvd3MgSVB2NiBzdXBwb3J0IGlzIHBhcnQgb2YgV2luU29jazIgb25seQotICAgICAqLwotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLQotZXh0ZXJuIGNvbnN0IGNoYXIgKmluZXRfbnRvcChpbnQsIGNvbnN0IHZvaWQqLCBjaGFyKiwgc2l6ZV90KTsKLQotI2VuZGlmCi0KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUREJfSAotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0ZDTlRMX0gKLSNpbmNsdWRlIDxmY250bC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjZEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BJUHY2RG9tYWluLmg+Ci0KLW9pZCBuZXRzbm1wX1RDUElQdjZEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9UQ1BfSVBWNiB9Owotc3RhdGljIG5ldHNubXBfdGRvbWFpbiB0Y3A2RG9tYWluOwotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCi0gKi8KLQotc3RhdGljIGNoYXIgKgotbmV0c25tcF90Y3A2X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luNiAqdG8gPSBOVUxMOwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJmbXRhZGRyOiB0ID0gJXAsIGRhdGEgPSAlcCwgbGVuID0gJWRcbiIsIHQsCi0gICAgICAgICAgICAgICAgZGF0YSwgbGVuKSk7Ci0gICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSB0LT5kYXRhOwotICAgIH0KLSAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gc3RyZHVwKCJUQ1AvSVB2NjogdW5rbm93biIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgYWRkcltJTkVUNl9BRERSU1RSTEVOXTsKLSAgICAgICAgY2hhciB0bXBbSU5FVDZfQUREUlNUUkxFTiArIDE4XTsKLQotICAgICAgICBzcHJpbnRmKHRtcCwgIlRDUC9JUHY2OiBbJXNdOiVodSIsCi0gICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAodm9pZCAqKSAmKHRvLT5zaW42X2FkZHIpLCBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICBJTkVUNl9BRERSU1RSTEVOKSwgbnRvaHModG8tPnNpbjZfcG9ydCkpOwotICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7Ci0gICAgfQotfQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdGNwNl9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJyZWN2IGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKLQkJCSAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0JCXJldHVybiAtMTsKLQkgICAgfQotCX0KLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJyZWN2IGZkICVkIGdvdCAlZCBieXRlc1xuIiwgdC0+c29jaywgcmMpKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmIG9sZW5ndGggIT0gTlVMTCkgewotICAgICAgICBpZiAodC0+ZGF0YV9sZW5ndGggPiAwKSB7Ci0gICAgICAgICAgICBpZiAoKCpvcGFxdWUgPSBtYWxsb2ModC0+ZGF0YV9sZW5ndGgpKSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCpvcGFxdWUsIHQtPmRhdGEsIHQtPmRhdGFfbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAqb2xlbmd0aCA9IHQtPmRhdGFfbGVuZ3RoOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotbmV0c25tcF90Y3A2X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLQl3aGlsZSAocmMgPCAwKSB7Ci0JICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotbmV0c25tcF90Y3A2X2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IC0xOwotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiY2xvc2UgZmQgJWRcbiIsIHQtPnNvY2spKTsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotc3RhdGljIGludAotbmV0c25tcF90Y3A2X2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpmYXJlbmQgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBuZXdzb2NrID0gLTE7Ci0jaWZkZWYgV0lOMzIKLSAgICB1X2xvbmcgICAgICAgICAgaW9jdGxzb2NrZXRfb3B0OwotI2Vsc2UKLSAgICBpbnQgICAgICAgICAgICAgc29ja2ZsYWdzOwotI2VuZGlmCi0gICAgc29ja2xlbl90ICAgICAgIGZhcmVuZGxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLQotICAgIGZhcmVuZCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotCi0gICAgaWYgKGZhcmVuZCA9PSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIEluZGljYXRlIHRoYXQgdGhlIGFjY2VwdGFuY2Ugb2YgdGhpcyBzb2NrZXQgZmFpbGVkLiAgCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImFjY2VwdDogbWFsbG9jIGZhaWxlZFxuIikpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgbmV3c29jayA9IGFjY2VwdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGZhcmVuZCwgJmZhcmVuZGxlbik7Ci0KLSAgICAgICAgaWYgKG5ld3NvY2sgPCAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwiYWNjZXB0IGZhaWxlZCByYyAlZCBlcnJubyAlZCBcIiVzXCJcbiIsCi0JCQluZXdzb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBmcmVlKGZhcmVuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3c29jazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUodC0+ZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0LT5kYXRhID0gZmFyZW5kOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IGZhcmVuZGxlbjsKLSAgICAgICAgc3RyID0gbmV0c25tcF90Y3A2X2ZtdGFkZHIoTlVMTCwgZmFyZW5kLCBmYXJlbmRsZW4pOwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImFjY2VwdCBzdWNjZWVkZWQgKGZyb20gJXMpXG4iLCBzdHIpKTsKLSAgICAgICAgZnJlZShzdHIpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSB0byBtYWtlIHRoZSBuZXcgc29ja2V0IGJsb2NraW5nLiAgCi0gICAgICAgICAqLwotCi0jaWZkZWYgV0lOMzIKLSAgICAgICAgaW9jdGxzb2NrZXRfb3B0ID0gMDsKLSAgICAgICAgaW9jdGxzb2NrZXQobmV3c29jaywgRklPTkJJTywgJmlvY3Rsc29ja2V0X29wdCk7Ci0jZWxzZQotICAgICAgICBpZiAoKHNvY2tmbGFncyA9IGZjbnRsKG5ld3NvY2ssIEZfR0VURkwsIDApKSA+PSAwKSB7Ci0gICAgICAgICAgICBmY250bChuZXdzb2NrLCBGX1NFVEZMLCAoc29ja2ZsYWdzICYgfk9fTk9OQkxPQ0spKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiYWNjZXB0OiBjb3VsZG4ndCBmX2dldGZsIG9mIGZkICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgbmV3c29jaykpOwotICAgICAgICB9Ci0jZW5kaWYKLQotICAgICAgICAvKgotICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKLSAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KLSAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAotICAgICAgICAgKi8KLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fU05EQlVGLCAxLCAwKTsKLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKLQotICAgICAgICByZXR1cm4gbmV3c29jazsKLSAgICB9IGVsc2UgewotICAgICAgICBmcmVlKGZhcmVuZCk7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogT3BlbiBhIFRDUC9JUHY2LWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUKLSAqIGxvY2FsIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZQotICogYWRkciBpcyB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3RjcDZfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgc3RyID0gbmV0c25tcF90Y3A2X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKilhZGRyLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotICAgICAgICAgICAgICAgIHN0cikpOwotICAgIGZyZWUoc3RyKTsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7Ci0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLSAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfVENQSVB2NkRvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVENQSVB2NkRvbWFpbikgLyBzaXplb2Yob2lkKTsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTTsKLQotICAgIGlmIChsb2NhbCkgewotI2lmZGVmIFdJTjMyCi0gICAgICAgIHVfbG9uZyBpb2N0bHNvY2tldF9vcHQ7Ci0jZWxzZQotICAgICAgICBpbnQgc29ja2ZsYWdzID0gMDsKLSNlbmRpZgotICAgICAgICBpbnQgb3B0ID0gMTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgb24gdG8gdGhlCi0gICAgICAgICAqIGdpdmVuIElQIGFkZHJlc3MsIHdoaWNoIG1heSBpbmNsdWRlIGFuIGludGVyZmFjZSBhZGRyZXNzLCBvciBjb3VsZAotICAgICAgICAgKiBiZSBJTkFERFJfQU5ZLCBidXQgY2VydGFpbmx5IGluY2x1ZGVzIGEgcG9ydCBudW1iZXIuCi0gICAgICAgICAqLwotCi0jaWZkZWYgSVBWNl9WNk9OTFkKLSAgICAgICAgLyogVHJ5IHRvIHJlc3RyaWN0IFBGX0lORVQ2IHNvY2tldCB0byBJUHY2IGNvbW11bmljYXRpb25zIG9ubHkuICovCi0gICAgICAgIHsKLQkgIGludCBvbmU9MTsKLQkgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIElQUFJPVE9fSVBWNiwgSVBWNl9WNk9OTFksIChjaGFyICopJm9uZSwgc2l6ZW9mKG9uZSkpICE9IDApIHsKLQkgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJjb3VsZG4ndCBzZXQgSVBWNl9WNk9OTFkgdG8gJWQgYnl0ZXM6ICVzXG4iLCBvbmUsIHN0cmVycm9yKGVycm5vKSkpOwotCSAgfSAKLQl9Ci0jZW5kaWYKLQotICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTjsKLSAgICAgICAgdC0+bG9jYWwgPSAodW5zaWduZWQgY2hhciopbWFsbG9jKDE4KTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+bG9jYWwsIGFkZHItPnNpbjZfYWRkci5zNl9hZGRyLCAxNik7Ci0gICAgICAgIHQtPmxvY2FsWzE2XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweGZmMDApID4+IDg7Ci0gICAgICAgIHQtPmxvY2FsWzE3XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDE4OwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdlIHNob3VsZCBzZXQgU09fUkVVU0VBRERSIHRvby4gIAotICAgICAgICAgKi8KLQotICAgICAgICBzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikmb3B0LCBzaXplb2Yob3B0KSk7Ci0KLSAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLQkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBpZiAocmMgIT0gMCkgewotICAgICAgICAgICAgbmV0c25tcF90Y3A2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIGJlIGxldHRpbmcgc2VsZWN0KCkgdGVsbCB1cyB3aGVuIGNvbm5lY3Rpb25zCi0gICAgICAgICAqIGFyZSByZWFkeSB0byBiZSBhY2NlcHQoKWVkLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHNvY2tldCBuMG4tYmxvY2tpbmcKLSAgICAgICAgICogdG8gYXZvaWQgdGhlIHJhY2UgY29uZGl0aW9uIGRlc2NyaWJlZCBpbiBXLiBSLiBTdGV2ZW5zLCBgYFVuaXgKLSAgICAgICAgICogTmV0d29yayBQcm9ncmFtbWluZyBWb2x1bWUgSSBTZWNvbmQgRWRpdGlvbicnLCBwcC4gNDIyLS00LCB3aGljaAotICAgICAgICAgKiBjb3VsZCBvdGhlcndpc2Ugd2VkZ2UgdGhlIGFnZW50LgotICAgICAgICAgKi8KLQotI2lmZGVmIFdJTjMyCi0gICAgICAgIGlvY3Rsc29ja2V0X29wdCA9IDE7Ci0gICAgICAgIGlvY3Rsc29ja2V0KHQtPnNvY2ssIEZJT05CSU8sICZpb2N0bHNvY2tldF9vcHQpOwotI2Vsc2UKLSAgICAgICAgc29ja2ZsYWdzID0gZmNudGwodC0+c29jaywgRl9HRVRGTCwgMCk7Ci0gICAgICAgIGZjbnRsKHQtPnNvY2ssIEZfU0VURkwsIHNvY2tmbGFncyB8IE9fTk9OQkxPQ0spOwotI2VuZGlmCi0KLSAgICAgICAgLyoKLSAgICAgICAgICogTm93IHNpdCBoZXJlIGFuZCB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBhcnJpdmUuICAKLSAgICAgICAgICovCi0KLSAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgLyoKLSAgICAgICAgICogbm8gYnVmZmVyIHNpemUgb24gbGlzdGVuIHNvY2tldCAtIGRvZXNuJ3QgbWFrZSBzZW5zZQotICAgICAgICAgKi8KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOwotICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdGNwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOwotICAgICAgICB0LT5yZW1vdGVbMTZdID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzE3XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSAxODsKLQotICAgICAgICAvKgotICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50LXR5cGUgc2Vzc2lvbiwgc28gYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoZSBmYXIKLSAgICAgICAgICogZW5kLiAgV2UgZG9uJ3QgZ28gbm9uLWJsb2NraW5nIGhlcmUgYmVjYXVzZSBpdCdzIG5vdCBvYnZpb3VzIHdoYXQKLSAgICAgICAgICogeW91J2QgdGhlbiBkbyBpZiB5b3UgdHJpZWQgdG8gZG8gc25tcF9zZW5kcyBiZWZvcmUgdGhlIGNvbm5lY3Rpb24KLSAgICAgICAgICogaGFkIGNvbXBsZXRlZC4gIFNvIHRoaXMgY2FuIGJsb2NrLgotICAgICAgICAgKi8KLQotICAgICAgICByYyA9IGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAotICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwgImNvbm5lY3QgcmV0dXJucyAlZFxuIiwgcmMpKTsKLQotICAgICAgICBpZiAocmMgPCAwKSB7Ci0gICAgICAgICAgICBuZXRzbm1wX3RjcDZfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKLSAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KLSAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAotICAgICAgICAgKi8KLSAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fU05EQlVGLCBsb2NhbCwgMCk7Ci0gICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1JDVkJVRiwgbG9jYWwsIDApOwotICAgIH0KLQotICAgIC8qCi0gICAgICogTWVzc2FnZSBzaXplIGlzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgdHJhbnNwb3J0IChoZW5jZSBtc2dNYXhTaXplCi0gICAgICogaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbGVnYWwgc2l6ZSBvZiBhbiBTTk1QIG1lc3NhZ2UpLiAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKLSAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF90Y3A2X3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdGNwNl9zZW5kOwotICAgIHQtPmZfY2xvc2UgICAgPSBuZXRzbm1wX3RjcDZfY2xvc2U7Ci0gICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfdGNwNl9hY2NlcHQ7Ci0gICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfdGNwNl9mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLS8qCi0gKiBOb3QgZXh0ZXJuIGJ1dCBzdGlsbCBkZWZpbmVkIGluIHNubXBVRFBJUHY2RG9tYWluLmMKLSAqLwotZXh0ZXJuIGludAotbmV0c25tcF9zb2NrYWRkcl9pbjZfMihzdHJ1Y3Qgc29ja2FkZHJfaW42KiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKTsKLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF90Y3A2X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAotCQkJICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLQotICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luNl8yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgewotICAgICAgICByZXR1cm4gbmV0c25tcF90Y3A2X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi0vKgotICogU2VlOgotICogCi0gKiBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLW9wcy10YWRkcmVzcy1taWItMDEudHh0Ci0gKiAKLSAqIChvciBuZXdlciBlcXVpdmFsZW50KSBmb3IgZGV0YWlscyBvZiB0aGUgVEMgd2hpY2ggd2UgYXJlIHVzaW5nIGZvcgotICogdGhlIG1hcHBpbmcgaGVyZS4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdGNwNl9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPT0gMTgpIHsKLSAgICAgICAgbWVtc2V0KCh1X2NoYXIgKikgJiBhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luNl9hZGRyLnM2X2FkZHIpLCBvLCAxNik7Ci0gICAgICAgIGFkZHIuc2luNl9wb3J0ID0gKG9bMTZdIDw8IDgpICsgb1sxN107Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3RjcDZfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLXZvaWQKLW5ldHNubXBfdGNwNl9jdG9yKHZvaWQpCi17Ci0gICAgdGNwNkRvbWFpbi5uYW1lID0gbmV0c25tcF9UQ1BJUHY2RG9tYWluOwotICAgIHRjcDZEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9UQ1BJUHY2RG9tYWluKSAvIHNpemVvZihvaWQpOwotICAgIHRjcDZEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgdGNwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF90Y3A2X2NyZWF0ZV90c3RyaW5nOwotICAgIHRjcDZEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdGNwNl9jcmVhdGVfb3N0cmluZzsKLSAgICB0Y3A2RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDQsIHNpemVvZihjaGFyICopKTsKLSAgICB0Y3A2RG9tYWluLnByZWZpeFswXSA9ICJ0Y3A2IjsKLSAgICB0Y3A2RG9tYWluLnByZWZpeFsxXSA9ICJ0Y3B2NiI7Ci0gICAgdGNwNkRvbWFpbi5wcmVmaXhbMl0gPSAidGNwaXB2NiI7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnRjcDZEb21haW4pOwotfQotCi0jZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4gKi8KLQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wVURQRG9tYWluLmMgYi9zbm1wbGliL3NubXBVRFBEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWUwNjJjYy4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBVRFBEb21haW4uYworKysgL2Rldi9udWxsCkBAIC0xLDEzMzQgKzAsMCBAQAotLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCi0gKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwotICogdGhhdCBtYXkgYXBwbHk6Ci0gKi8KLS8qCi0gKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGNvcHlyaWdodGVkIGJ5OgotICogQ29weXJpZ2h0IENvcHlyaWdodCAyMDAzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMgc3BlY2lmaWVkIGluIHRoZSBDT1BZSU5HIGZpbGUKLSAqIGRpc3RyaWJ1dGVkIHdpdGggdGhlIE5ldC1TTk1QIHBhY2thZ2UuCi0gKi8KLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX0FSUEFfSU5FVF9ICi0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVERCX0gKLSNpbmNsdWRlIDxuZXRkYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVUlPX0gKLSNpbmNsdWRlIDxzeXMvdWlvLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jazIuaD4KLSNpbmNsdWRlIDx3czJ0Y3BpcC5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgotCi0jaWZuZGVmIElOQUREUl9OT05FCi0jZGVmaW5lIElOQUREUl9OT05FCS0xCi0jZW5kaWYKLQotI2lmZGVmICBNU0dfRE9OVFdBSVQKLSNkZWZpbmUgTkVUU05NUF9ET05UV0FJVCBNU0dfRE9OVFdBSVQKLSNlbHNlCi0jZGVmaW5lIE5FVFNOTVBfRE9OVFdBSVQgMAotI2VuZGlmCi0KLXN0YXRpYyBuZXRzbm1wX3Rkb21haW4gdWRwRG9tYWluOwotCi10eXBlZGVmIHN0cnVjdCBuZXRzbm1wX3VkcF9hZGRyX3BhaXJfcyB7Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIHJlbW90ZV9hZGRyOwotICAgIHN0cnVjdCBpbl9hZGRyIGxvY2FsX2FkZHI7Ci19IG5ldHNubXBfdWRwX2FkZHJfcGFpcjsKLQotLyoKLSAqIG5vdCBzdGF0aWMsIHNpbmNlIHNubXBVRFBJUHY2RG9tYWluIG5lZWRzIGl0LCBidXQgbm90IHB1YmxpYywgZWl0aGVyLgotICogKGllIGRvbid0IHB1dCBpdCBpbiBhIHB1YmxpYyBoZWFkZXIuKQotICovCi12b2lkIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldChpbnQgZmQsIGludCBzZXJ2ZXIpOwotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7Ci0KLS8qCi0gKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgotICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKLSAqLwotCi1zdGF0aWMgY2hhciAqCi1uZXRzbm1wX3VkcF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKLQotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKSB7Ci0JYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSBkYXRhOwotICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgewotCWFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgdC0+ZGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiVURQOiB1bmtub3duIik7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICp0byA9IE5VTEw7Ci0JY2hhciB0bXBbNjRdOwotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKLSAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNwcmludGYodG1wLCAiVURQOiB1bmtub3duLT5bJXNdIiwKLSAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKGFkZHJfcGFpci0+bG9jYWxfYWRkcikpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgc3ByaW50Zih0bXAsICJVRFA6IFslc106JWh1LT4iLAotICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EodG8tPnNpbl9hZGRyKSwgbnRvaHModG8tPnNpbl9wb3J0KSk7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcCArIHN0cmxlbih0bXApLCAiWyVzXSIsIGluZXRfbnRvYShhZGRyX3BhaXItPmxvY2FsX2FkZHIpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7Ci0gICAgfQotfQotCi0KLQotI2lmIGRlZmluZWQobGludXgpICYmIGRlZmluZWQoSVBfUEtUSU5GTykKLQotIyBkZWZpbmUgbmV0c25tcF9kc3RhZGRyKHgpICgmKCgoc3RydWN0IGluX3BrdGluZm8gKikoQ01TR19EQVRBKHgpKSktPmlwaV9hZGRyKSkKLQotc3RhdGljIGludCBuZXRzbm1wX3VkcF9yZWN2ZnJvbShpbnQgcywgdm9pZCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHNvY2tsZW5fdCAqZnJvbWxlbiwgc3RydWN0IGluX2FkZHIgKmRzdGlwKQotewotICAgIGludCByOwotICAgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07Ci0gICAgY2hhciBjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOwotICAgIHN0cnVjdCBjbXNnaGRyICpjbXNncHRyOwotICAgIHN0cnVjdCBtc2doZHIgbXNnOwotCi0gICAgaW92WzBdLmlvdl9iYXNlID0gYnVmOwotICAgIGlvdlswXS5pb3ZfbGVuID0gbGVuOwotCi0gICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOwotICAgIG1zZy5tc2dfbmFtZSA9IGZyb207Ci0gICAgbXNnLm1zZ19uYW1lbGVuID0gKmZyb21sZW47Ci0gICAgbXNnLm1zZ19pb3YgPSBpb3Y7Ci0gICAgbXNnLm1zZ19pb3ZsZW4gPSAxOwotICAgIG1zZy5tc2dfY29udHJvbCA9ICZjbXNnOwotICAgIG1zZy5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKLQotICAgIHIgPSByZWN2bXNnKHMsICZtc2csIE5FVFNOTVBfRE9OVFdBSVQpOwotCi0gICAgaWYgKHIgPT0gLTEpIHsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICAKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAiZ290IHNvdXJjZSBhZGRyOiAlc1xuIiwgaW5ldF9udG9hKCgoc3RydWN0IHNvY2thZGRyX2luICopZnJvbSktPnNpbl9hZGRyKSkpOwotICAgIGZvciAoY21zZ3B0ciA9IENNU0dfRklSU1RIRFIoJm1zZyk7IGNtc2dwdHIgIT0gTlVMTDsgY21zZ3B0ciA9IENNU0dfTlhUSERSKCZtc2csIGNtc2dwdHIpKSB7Ci0gICAgICAgIGlmIChjbXNncHRyLT5jbXNnX2xldmVsID09IFNPTF9JUCAmJiBjbXNncHRyLT5jbXNnX3R5cGUgPT0gSVBfUEtUSU5GTykgewotICAgICAgICAgICAgbWVtY3B5KCh2b2lkICopIGRzdGlwLCBuZXRzbm1wX2RzdGFkZHIoY21zZ3B0ciksIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgImdvdCBkZXN0aW5hdGlvbiAobG9jYWwpIGFkZHIgJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgIGluZXRfbnRvYSgqZHN0aXApKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHI7Ci19Ci0KLXN0YXRpYyBpbnQgbmV0c25tcF91ZHBfc2VuZHRvKGludCBmZCwgc3RydWN0IGluX2FkZHIgKnNyY2lwLCBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZSwKLQkJCXZvaWQgKmRhdGEsIGludCBsZW4pCi17Ci0gICAgc3RydWN0IGlvdmVjIGlvdiA9IHsgZGF0YSwgbGVuIH07Ci0gICAgc3RydWN0IHsKLSAgICAgICAgc3RydWN0IGNtc2doZHIgY207Ci0gICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvIGlwaTsKLSAgICB9IGNtc2c7Ci0gICAgc3RydWN0IG1zZ2hkciBtOwotCi0gICAgbWVtc2V0KCZjbXNnLCAwLCBzaXplb2YoY21zZykpOwotICAgIGNtc2cuY20uY21zZ19sZW4gPSBzaXplb2Yoc3RydWN0IGNtc2doZHIpICsgc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKTsKLSAgICBjbXNnLmNtLmNtc2dfbGV2ZWwgPSBTT0xfSVA7Ci0gICAgY21zZy5jbS5jbXNnX3R5cGUgPSBJUF9QS1RJTkZPOwotICAgIGNtc2cuaXBpLmlwaV9pZmluZGV4ID0gMDsKLSAgICBjbXNnLmlwaS5pcGlfc3BlY19kc3Quc19hZGRyID0gKHNyY2lwID8gc3JjaXAtPnNfYWRkciA6IElOQUREUl9BTlkpOwotCi0gICAgbS5tc2dfbmFtZQkJPSByZW1vdGU7Ci0gICAgbS5tc2dfbmFtZWxlbgk9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOwotICAgIG0ubXNnX2lvdgkJPSAmaW92OwotICAgIG0ubXNnX2lvdmxlbgk9IDE7Ci0gICAgbS5tc2dfY29udHJvbAk9ICZjbXNnOwotICAgIG0ubXNnX2NvbnRyb2xsZW4JPSBzaXplb2YoY21zZyk7Ci0gICAgbS5tc2dfZmxhZ3MJCT0gMDsKLQotICAgIHJldHVybiBzZW5kbXNnKGZkLCAmbSwgTVNHX05PU0lHTkFMfE1TR19ET05UV0FJVCk7Ci19Ci0jZW5kaWYgLyogbGludXggJiYgSVBfUEtUSU5GTyAqLwotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCi0gKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCi0gKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdWRwX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gLTE7Ci0gICAgc29ja2xlbl90ICAgICAgIGZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7Ci0gICAgc3RydWN0IHNvY2thZGRyICpmcm9tOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKLSAgICAgICAgICAgICpvcGFxdWUgPSBOVUxMOwotICAgICAgICAgICAgKm9sZW5ndGggPSAwOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWVtc2V0KGFkZHJfcGFpciwgMCwgc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOwotICAgICAgICAgICAgZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKLSAgICAgICAgfQotCi0Jd2hpbGUgKHJjIDwgMCkgewotI2lmIGRlZmluZWQobGludXgpICYmIGRlZmluZWQoSVBfUEtUSU5GTykKLSAgICAgICAgICAgIHJjID0gbmV0c25tcF91ZHBfcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCBmcm9tLCAmZnJvbWxlbiwgJihhZGRyX3BhaXItPmxvY2FsX2FkZHIpKTsKLSNlbHNlCi0gICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgTkVUU05NUF9ET05UV0FJVCwgZnJvbSwgJmZyb21sZW4pOwotI2VuZGlmIC8qIGxpbnV4ICYmIElQX1BLVElORk8gKi8KLQkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotCQlicmVhazsKLQkgICAgfQotCX0KLQotICAgICAgICBpZiAocmMgPj0gMCkgewotICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCBhZGRyX3BhaXIsIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsCi0JCQkicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwKLQkJCXQtPnNvY2ssIHJjLCBzdHIpKTsKLSAgICAgICAgICAgIGZyZWUoc3RyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJyZWN2ZnJvbSBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgIH0KLSAgICAgICAgKm9wYXF1ZSA9ICh2b2lkICopYWRkcl9wYWlyOwotICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VkcF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotICAgIG5ldHNubXBfdWRwX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvID0gTlVMTDsKLQotICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKLSAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpIHsKLSAgICAgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSAoKm9wYXF1ZSk7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCi0gICAgICAgICAgICAgICAgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpIHsKLSAgICAgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfdWRwX2FkZHJfcGFpciAqKSAodC0+ZGF0YSk7Ci0gICAgfQotCi0gICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7Ci0KLSAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikgYWRkcl9wYWlyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKLSAgICAgICAgZnJlZShzdHIpOwotCXdoaWxlIChyYyA8IDApIHsKLSNpZiBkZWZpbmVkKGxpbnV4KSAmJiBkZWZpbmVkKElQX1BLVElORk8pCi0gICAgICAgICAgICByYyA9IG5ldHNubXBfdWRwX3NlbmR0byh0LT5zb2NrLCBhZGRyX3BhaXIgPyAmKGFkZHJfcGFpci0+bG9jYWxfYWRkcikgOiBOVUxMLCB0bywgYnVmLCBzaXplKTsKLSNlbHNlCi0gICAgICAgICAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIHRvLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0jZW5kaWYgLyogbGludXggJiYgSVBfUEtUSU5GTyAqLwotCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInNlbmR0byBlcnJvciwgcmMgJWQgKGVycm5vICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgZXJybm8pKTsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdWRwX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIGludCByYyA9IC0xOwotICAgIGlmICh0LT5zb2NrID49IDApIHsKLSNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAotICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOwotI2Vsc2UKLSAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKLSNlbmRpZgotICAgICAgICB0LT5zb2NrID0gLTE7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotLyoKLSAqIGZpbmQgbGFyZ2VzdCBwb3NzaWJsZSBidWZmZXIgYmV0d2VlbiBjdXJyZW50IHNpemUgYW5kIHNwZWNpZmllZCBzaXplLgotICoKLSAqIFRyeSB0byBtYXhpbWl6ZSB0aGUgY3VycmVudCBidWZmZXIgb2YgdHlwZSAib3B0bmFtZSIKLSAqIHRvIHRoZSBtYXhpbXVtIGFsbG93YWJsZSBzaXplIGJ5IHRoZSBPUyAoYXMgY2xvc2UgdG8KLSAqIHNpemUgYXMgcG9zc2libGUpCi0gKi8KLXN0YXRpYyBpbnQKLV9zb2NrX2J1ZmZlcl9tYXhpbWl6ZShpbnQgcywgaW50IG9wdG5hbWUsIGNvbnN0IGNoYXIgKmJ1ZnR5cGUsIGludCBzaXplKQotewotICAgIGludCAgICAgICAgICAgIGN1cmJ1ZiA9IDA7Ci0gICAgc2l6ZV90ICAgICAgICAgY3VyYnVmbGVuID0gc2l6ZW9mKGludCk7Ci0gICAgaW50ICAgICAgICAgICAgbG8sIG1pZCwgaGk7Ci0KLSAgICAvKgotICAgICAqIEZpcnN0IHdlIG5lZWQgdG8gZGV0ZXJtaW5lIG91ciBjdXJyZW50IGJ1ZmZlcgotICAgICAqLwotICAgIGlmICgoZ2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAotICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSAKLSAgICAgICAgICAgICYmIChjdXJidWZsZW4gPT0gc2l6ZW9mKGludCkpKSB7Ci0KLSAgICAgICAgREVCVUdNU0dUTCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlcjptYXgiLCAiQ3VycmVudCAlcyBpcyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgY3VyYnVmKSk7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogTGV0J3Mgbm90IGJlIHN0dXBpZCAuLi4gaWYgd2Ugd2VyZSBhc2tlZCBmb3IgbGVzcyB0aGFuIHdoYXQgd2UKLSAgICAgICAgICogYWxyZWFkeSBoYXZlLCB0aGVuIGZvcmdldCBhYm91dCBpdAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHNpemUgPD0gY3VyYnVmKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyOm1heCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdGVkICVzIDw9IGN1cnJlbnQgYnVmZmVyXG4iLCBidWZ0eXBlKSk7Ci0gICAgICAgICAgICByZXR1cm4gY3VyYnVmOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRG8gYSBiaW5hcnkgc2VhcmNoIHRoZSBvcHRpbWFsIGJ1ZmZlciB3aXRoaW4gMWsgb2YgdGhlIHBvaW50IG9mCi0gICAgICAgICAqIGZhaWx1cmUuIFRoaXMgaXMgcmF0aGVyIGJydXRlZm9yY2UsIGJ1dCBzaW1wbGUKLSAgICAgICAgICovCi0gICAgICAgIGhpID0gc2l6ZTsKLSAgICAgICAgbG8gPSBjdXJidWY7Ci0KLSAgICAgICAgd2hpbGUgKGhpIC0gbG8gPiAxMDI0KSB7Ci0gICAgICAgICAgICBtaWQgPSAobG8gKyBoaSkgLyAyOwotICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJm1pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpbnQpKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgbG8gPSBtaWQ7IC8qIFN1Y2Nlc3M6IHNlYXJjaCBiZXR3ZWVuIG1pZCBhbmQgaGkgKi8KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGkgPSBtaWQ7IC8qIEZhaWxlZDogc2VhcmNoIGJldHdlZW4gbG8gYW5kIG1pZCAqLwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogTm93IHByaW50IGlmIHRoaXMgb3B0aW1pemF0aW9uIGhlbHBlZCBvciBub3QKLSAgICAgICAgICovCi0gICAgICAgIGlmIChnZXRzb2Nrb3B0KHMsU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJmN1cmJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgJmN1cmJ1ZmxlbikgPT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXI6bWF4IiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAiTWF4aW1pemVkICVzOiAlZFxuIixidWZ0eXBlLCBjdXJidWYpKTsKLSAgICAgICAgfSAKLSAgICB9IGVsc2UgewotICAgICAgICAvKgotICAgICAgICAgKiBUaGVyZSBpcyByZWFsbHkgbm90IGEgbG90IHdlIGNhbiBkbyBhbnltb3JlLgotICAgICAgICAgKiBJZiB0aGUgT1MgZG9lc24ndCBnaXZlIHVzIHRoZSBjdXJyZW50IGJ1ZmZlciwgdGhlbiB3aGF0J3MgdGhlIAotICAgICAgICAgKiBwb2ludCBpbiB0cnlpbmcgdG8gbWFrZSBpdCBiZXR0ZXIKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyOm1heCIsICJHZXQgJXMgZmFpbGVkIC4uLiBnaXZpbmcgdXAhXG4iLAotICAgICAgICAgICAgICAgICAgICBidWZ0eXBlKSk7Ci0gICAgICAgIGN1cmJ1ZiA9IC0xOwotICAgIH0KLQotICAgIHJldHVybiBjdXJidWY7Ci19Ci0KLQotc3RhdGljIGNvbnN0IGNoYXIgKgotX3NvY2tfYnVmX3R5cGVfZ2V0KGludCBvcHRuYW1lLCBpbnQgbG9jYWwpCi17Ci0gICAgaWYgKG9wdG5hbWUgPT0gU09fU05EQlVGKSB7Ci0gICAgICAgIGlmIChsb2NhbCkKLSAgICAgICAgICAgIHJldHVybiAic2VydmVyIHNlbmQgYnVmZmVyIjsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0dXJuICJjbGllbnQgc2VuZCBidWZmZXIiOwotICAgIH0gZWxzZSBpZiAob3B0bmFtZSA9PSBTT19SQ1ZCVUYpIHsKLSAgICAgICAgaWYgKGxvY2FsKQotICAgICAgICAgICAgcmV0dXJuICJzZXJ2ZXIgcmVjZWl2ZSBidWZmZXIiOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXR1cm4gImNsaWVudCByZWNlaXZlIGJ1ZmZlciI7Ci0gICAgfQotCi0gICAgcmV0dXJuICJ1bmtub3duIGJ1ZmZlciI7Ci19Ci0KLS8qCi0gKgotICogR2V0IHRoZSByZXF1ZXN0ZWQgYnVmZmVyc2l6ZSwgYmFzZWQgb24KLSAqIC0gc29ja2V0dHlwZSA6IGNsaWVudCAobG9jYWwgPSAwKSBvciBzZXJ2ZXIgKGxvY2FsID0gMSkgCi0gKiAtIGJ1ZmZlcnR5cGUgOiBzZW5kIChvcHRuYW1lID0gU09fU05EQlVGKSBvciByZWN2IChTT19SQ1ZCVUYpCi0gKgotICogSW4gY2FzZSBhIGNvbXBpbGUgdGltZSBidWZmZXIgd2FzIHNwZWNpZmllZCwgdGhlbiB1c2UgdGhhdCBvbmUKLSAqIGlmIHRoZXJlIHdhcyBubyBydW50aW1lIGNvbmZpZ3VyYXRpb24gb3ZlcnJpZGUKLSAqLwotc3RhdGljIGludAotX3NvY2tfYnVmZmVyX3NpemVfZ2V0KGludCBvcHRuYW1lLCBpbnQgbG9jYWwsIGNvbnN0IGNoYXIgKipidWZ0eXBlKQotewotICAgIGludCBzaXplOwotCi0gICAgaWYgKE5VTEwgIT0gYnVmdHlwZSkKLSAgICAgICAgKmJ1ZnR5cGUgPSBfc29ja19idWZfdHlwZV9nZXQob3B0bmFtZSwgbG9jYWwpOwotCi0gICAgaWYgKG9wdG5hbWUgPT0gU09fU05EQlVGKSB7Ci0gICAgICAgIGlmIChsb2NhbCkgewotICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TRVJWRVJTRU5EQlVGKTsKLSNpZmRlZiBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1NFTkRfQlVGCi0gICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQotICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUY7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemUgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UU0VOREJVRik7Ci0jaWZkZWYgTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9TRU5EX0JVRgotICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKLSAgICAgICAgICAgICAgIHNpemUgPSBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKG9wdG5hbWUgPT0gU09fUkNWQlVGKSB7Ci0gICAgICAgIGlmIChsb2NhbCkgewotICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TRVJWRVJSRUNWQlVGKTsKLSNpZmRlZiBORVRTTk1QX0RFRkFVTFRfU0VSVkVSX1JFQ1ZfQlVGCi0gICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQotICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUY7Ci0jZW5kaWYKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNpemUgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UUkVDVkJVRik7Ci0jaWZkZWYgTkVUU05NUF9ERUZBVUxUX0NMSUVOVF9SRUNWX0JVRgotICAgICAgICAgICAgaWYgKHNpemUgPD0gMCkKLSAgICAgICAgICAgICAgIHNpemUgPSBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGOwotI2VuZGlmCi0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBzaXplID0gMDsKLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsICJSZXF1ZXN0ZWQgJXMgaXMgJWRcbiIsCi0gICAgICAgICAgICAgICAgKGJ1ZnR5cGUpID8gKmJ1ZnR5cGUgOiAidW5rbm93biBidWZmZXIiLCBzaXplKSk7Ci0KLSAgICByZXR1cm4oc2l6ZSk7Ci19Ci0KLS8qCi0gKiBzZXQgc29ja2V0IGJ1ZmZlciBzaXplCi0gKgotICogQHBhcmFtIHNzICAgICA6IHNvY2tldAotICogQHBhcmFtIG9wdG5hbWU6IFNPX1NOREJVRiBvciBTT19SQ1ZCVUYKLSAqIEBwYXJhbSBsb2NhbCAgOiAxIGZvciBzZXJ2ZXIsIDAgZm9yIGNsaWVudAotICogQHBhcmFtIHJlcWJ1ZiA6IHJlcXVlc3RlZCBzaXplLCBvciAwIGZvciBkZWZhdWx0Ci0gKgotICogQHJldHZhbCAgICAtMSA6IGVycm9yCi0gKiBAcmV0dmFsICAgID4wIDogbmV3IGJ1ZmZlciBzaXplCi0gKi8KLWludAotbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoaW50IHMsIGludCBvcHRuYW1lLCBpbnQgbG9jYWwsIGludCBzaXplKQotewotI2lmICEgZGVmaW5lZChTT19TTkRCVUYpICYmICEgZGVmaW5lZChTT19SQ1ZCVUYpCi0gICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLCAiQ2hhbmdpbmcgc29ja2V0IGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7Ci0gICAgcmV0dXJuIC0xOwotI2Vsc2UKLSAgICBjb25zdCBjaGFyICAgICAqYnVmdHlwZTsKLSAgICBpbnQgICAgICAgICAgICBjdXJidWYgPSAwOwotICAgIHNpemVfdCAgICAgICAgIGN1cmJ1ZmxlbiA9IHNpemVvZihpbnQpOwotCi0jICAgaWZuZGVmICBTT19TTkRCVUYKLSAgICBpZiAoU09fU05EQlVGID09IG9wdG5hbWUpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLAotICAgICAgICAgICAgICAgICAgICAiQ2hhbmdpbmcgc29ja2V0IHNlbmQgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWRcbiIpKTsKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSMgICBlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypTT19TTkRCVUYgKi8KLSMgICBpZm5kZWYgIFNPX1JDVkJVRgotICAgIGlmIChTT19SQ1ZCVUYgPT0gb3B0bmFtZSkgewotICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsCi0gICAgICAgICAgICAgICAgICAgICJDaGFuZ2luZyBzb2NrZXQgcmVjZWl2ZSBidWZmZXIgaXMgbm90IHN1cHBvcnRlZFxuIikpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotIyAgIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX1JDVkJVRiAqLwotCi0gICAgLyoKLSAgICAgKiBXaGF0IGlzIHRoZSByZXF1ZXN0ZWQgYnVmZmVyIHNpemUgPwotICAgICAqLwotICAgIGlmICgwID09IHNpemUpCi0gICAgICAgIHNpemUgPSBfc29ja19idWZmZXJfc2l6ZV9nZXQob3B0bmFtZSwgbG9jYWwsICZidWZ0eXBlKTsKLSAgICBlbHNlIHsKLSAgICAgICAgYnVmdHlwZSA9IF9zb2NrX2J1Zl90eXBlX2dldChvcHRuYW1lLCBsb2NhbCk7Ci0gICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsICJSZXF1ZXN0ZWQgJXMgaXMgJWRcbiIsCi0gICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgc2l6ZSkpOwotICAgIH0KLQotICAgIGlmICgoZ2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAotICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSAKLSAgICAgICAgJiYgKGN1cmJ1ZmxlbiA9PSBzaXplb2YoaW50KSkpIHsKLSAgICAgICAgCi0gICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsICJPcmlnaW5hbCAlcyBpcyAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBjdXJidWYpKTsKLSAgICAgICAgaWYgKGN1cmJ1ZiA+PSBzaXplKSB7Ci0gICAgICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXIiLAotICAgICAgICAgICAgICAgICAgICAgICJOZXcgJXMgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gb3JpZ2luYWwhXG4iLCBidWZ0eXBlKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHRoZSBidWZmZXJzaXplIHdhcyBub3Qgc3BlY2lmaWVkIG9yIGl0IHdhcyBhIG5lZ2F0aXZlIHZhbHVlCi0gICAgICogdGhlbiBkb24ndCBjaGFuZ2UgdGhlIE9TIGJ1ZmZlcnMgYXQgYWxsCi0gICAgICovCi0gICAgaWYgKHNpemUgPD0gMCkgewotICAgICAgIERFQlVHTVNHVCgoInNvY2tldDpidWZmZXIiLAotICAgICAgICAgICAgICAgICAgICAiJXMgbm90IHZhbGlkIG9yIG5vdCBzcGVjaWZpZWQ7IHVzaW5nIE9TIGRlZmF1bHQoJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLGN1cmJ1ZikpOwotICAgICAgIHJldHVybiBjdXJidWY7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBUcnkgdG8gc2V0IHRoZSByZXF1ZXN0ZWQgc2VuZCBidWZmZXIKLSAgICAgKi8KLSAgICBpZiAoc2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmc2l6ZSwgc2l6ZW9mKGludCkpID09IDApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogQmVjYXVzZSBzb21lIHBsYXRmb3JtcyBsaWUgYWJvdXQgdGhlIGFjdHVhbCBidWZmZXIgdGhhdCBoYXMgYmVlbiAKLSAgICAgICAgICogc2V0IChMaW51eCB3aWxsIGFsd2F5cyBzYXkgaXQgd29ya2VkIC4uLiksIHdlIHByaW50IHNvbWUgCi0gICAgICAgICAqIGRpYWdub3N0aWMgb3V0cHV0IGZvciBkZWJ1Z2dpbmcKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHSUYoInNvY2tldDpidWZmZXIiKSB7Ci0gICAgICAgICAgICBERUJVR01TR1QoKCJzb2NrZXQ6YnVmZmVyIiwgIlNldCAlcyB0byAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgc2l6ZSkpOwotICAgICAgICAgICAgaWYgKChnZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJmN1cmJ1ZmxlbikgPT0gMCkgCi0gICAgICAgICAgICAgICAgICAgICYmIChjdXJidWZsZW4gPT0gc2l6ZW9mKGludCkpKSB7Ci0KLSAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXIiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIk5vdyAlcyBpcyAlZFxuIiwgYnVmdHlwZSwgY3VyYnVmKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgLyoKLSAgICAgICAgICogSWYgdGhlIG5ldyBidWZmZXIgaXMgc21hbGxlciB0aGFuIHRoZSBzaXplIHdlIHJlcXVlc3RlZCwgd2Ugd2lsbAotICAgICAgICAgKiB0cnkgdG8gaW5jcmVtZW50IHRoZSBuZXcgYnVmZmVyIHdpdGggMWsgaW5jcmVtZW50cyAKLSAgICAgICAgICogKHRoaXMgd2lsbCBzb21ldGltZSBhbGxvdyB1cyB0byByZWFjaCBhIG1vcmUgb3B0aW1hbCBidWZmZXIuKQotICAgICAgICAgKiAgIEZvciBleGFtcGxlIDogT24gU29sYXJpcywgaWYgdGhlIG1heCBPUyBidWZmZXIgaXMgMTAwayBhbmQgeW91Ci0gICAgICAgICAqICAgcmVxdWVzdCAxMTBrLCB5b3UgZW5kIHVwIHdpdGggdGhlIGRlZmF1bHQgOGsgOi0oCi0gICAgICAgICAqLwotICAgICAgICBpZiAoY3VyYnVmIDwgc2l6ZSkgewotICAgICAgICAgICAgY3VyYnVmID0gX3NvY2tfYnVmZmVyX21heGltaXplKHMsIG9wdG5hbWUsIGJ1ZnR5cGUsIHNpemUpOwotICAgICAgICAgICAgaWYoLTEgIT0gY3VyYnVmKQotICAgICAgICAgICAgICAgIHNpemUgPSBjdXJidWY7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE9idmlvdXNseSBjaGFuZ2luZyB0aGUgYnVmZmVyIGZhaWxlZCwgbW9zdCBsaWtlIGxpa2UgYmVjYXVzZSB3ZSAKLSAgICAgICAgICogcmVxdWVzdGVkIGEgYnVmZmVyIGdyZWF0ZXIgdGhhbiB0aGUgT1MgbGltaXQuCi0gICAgICAgICAqIFRoZXJlZm9yZSB3ZSBuZWVkIHRvIHNlYXJjaCBmb3IgYW4gb3B0aW1hbCBidWZmZXIgdGhhdCBpcyBjbG9zZQotICAgICAgICAgKiBlbm91Z2ggdG8gdGhlIHBvaW50IG9mIGZhaWx1cmUuCi0gICAgICAgICAqIFRoaXMgd2lsbCBhbGxvdyB1cyB0byByZWFjaCBhIG1vcmUgb3B0aW1hbCBidWZmZXIuCi0gICAgICAgICAqICAgRm9yIGV4YW1wbGUgOiBPbiBTb2xhcmlzLCBpZiB0aGUgbWF4IE9TIGJ1ZmZlciBpcyAxMDBrIGFuZCB5b3UgCi0gICAgICAgICAqICAgcmVxdWVzdCAxMTBrLCB5b3UgZW5kIHVwIHdpdGggdGhlIGRlZmF1bHQgOGsgOi0oCi0gICAgICAgICAqICAgQWZ0ZXIgdGhpcyBxdWljayBzZWFjaCB3ZSB3b3VsZCBnZXQgMWsgY2xvc2UgdG8gMTAwayAodGhlIG1heCkKLSAgICAgICAgICovCi0gICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwgImNvdWxkbid0IHNldCAlcyB0byAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgYnVmdHlwZSwgc2l6ZSkpOwotCi0gICAgICAgIGN1cmJ1ZiA9IF9zb2NrX2J1ZmZlcl9tYXhpbWl6ZShzLCBvcHRuYW1lLCBidWZ0eXBlLCBzaXplKTsKLSAgICAgICAgaWYoLTEgIT0gY3VyYnVmKQotICAgICAgICAgICAgc2l6ZSA9IGN1cmJ1ZjsKLSAgICB9Ci0KLSAgICByZXR1cm4gc2l6ZTsKLSNlbmRpZgotfQotCi0vKgotICogT3BlbiBhIFVEUC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCi0gKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKLSAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdWRwX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAqY2xpZW50X3NvY2tldCA9IE5VTEw7Ci0gICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyIGFkZHJfcGFpcjsKLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIG1lbXNldCgmYWRkcl9wYWlyLCAwLCBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgbWVtY3B5KCYoYWRkcl9wYWlyLnJlbW90ZV9hZGRyKSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOwotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKE5VTEwsICh2b2lkICopJmFkZHJfcGFpciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0gICAgICAgICAgICAgICAgc3RyKSk7Ci0gICAgZnJlZShzdHIpOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcFVEUERvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0gbmV0c25tcFVEUERvbWFpbl9sZW47Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfREdSQU0sIDApOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQodC0+c29jaywgbG9jYWwpOwotCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKLSAgICAgICAgICogZ2l2ZW4gSVAgYWRkcmVzcywgd2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkCi0gICAgICAgICAqIGJlIElOQUREUl9BTlksIGJ1dCBjZXJ0YWlubHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlci4KLSAgICAgICAgICovCi0KLSAgICAgICAgdC0+bG9jYWwgPSAodV9jaGFyICopIG1hbGxvYyg2KTsKLSAgICAgICAgaWYgKHQtPmxvY2FsID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+bG9jYWwsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7Ci0gICAgICAgIHQtPmxvY2FsWzRdID0gKGh0b25zKGFkZHItPnNpbl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbNV0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSA2OwotCi0jaWYgZGVmaW5lZChsaW51eCkgJiYgZGVmaW5lZChJUF9QS1RJTkZPKQotICAgICAgICB7IAotICAgICAgICAgICAgaW50IHNvY2tvcHQgPSAxOwotICAgICAgICAgICAgaWYgKHNldHNvY2tvcHQodC0+c29jaywgU09MX0lQLCBJUF9QS1RJTkZPLCAmc29ja29wdCwgc2l6ZW9mIHNvY2tvcHQpID09IC0xKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgImNvdWxkbid0IHNldCBJUF9QS1RJTkZPOiAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJzZXQgSVBfUEtUSU5GT1xuIikpOwotICAgICAgICB9Ci0jZW5kaWYKLSAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKLSAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdWRwX2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHQtPmRhdGEgPSBOVUxMOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudCBzZXNzaW9uLiAgSWYgd2UndmUgYmVlbiBnaXZlbiBhCi0gICAgICAgICAqIGNsaWVudCBhZGRyZXNzIHRvIHNlbmQgZnJvbSwgdGhlbiBiaW5kIHRvIHRoYXQuCi0gICAgICAgICAqIE90aGVyd2lzZSB0aGUgc2VuZCB3aWxsIHVzZSAic29tZXRoaW5nIHNlbnNpYmxlIi4KLSAgICAgICAgICovCi0gICAgICAgIGNsaWVudF9zb2NrZXQgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSKTsKLSAgICAgICAgaWYgKGNsaWVudF9zb2NrZXQpIHsKLSAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBjbGllbnRfYWRkcjsKLSAgICAgICAgICAgIG5ldHNubXBfc29ja2FkZHJfaW4yKCZjbGllbnRfYWRkciwgY2xpZW50X3NvY2tldCwgTlVMTCk7Ci0gICAgICAgICAgICBhZGRyX3BhaXIubG9jYWxfYWRkciA9IGNsaWVudF9hZGRyLnNpbl9hZGRyOwotICAgICAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikmY2xpZW50X2FkZHIsCi0gICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7Ci0gICAgICAgICAgICBpZiAoIHJjICE9IDAgKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgImZhaWxlZCB0byBiaW5kIGZvciBjbGllbnRhZGRyOiAlZCAlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF91ZHBfY2xvc2UodCk7Ci0gICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIHN0ciA9IG5ldHNubXBfdWRwX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikmYWRkcl9wYWlyLAotICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJjbGllbnQgb3BlbiAlc1xuIiwgc3RyKSk7Ci0gICAgICAgIGZyZWUoc3RyKTsKLQotICAgICAgICAvKgotICAgICAgICAgKiBTYXZlIHRoZSAocmVtb3RlKSBhZGRyZXNzIGluIHRoZQotICAgICAgICAgKiB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvciBsYXRlciB1c2UgYnkgbmV0c25tcF91ZHBfc2VuZC4KLSAgICAgICAgICovCi0KLSAgICAgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSk7Ci0gICAgICAgIHQtPnJlbW90ZSA9ICh1X2NoYXIgKiltYWxsb2MoNik7Ci0gICAgICAgIGlmICh0LT5kYXRhID09IE5VTEwgfHwgdC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOwotICAgICAgICB0LT5yZW1vdGVbNF0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OwotICAgICAgICB0LT5yZW1vdGVbNV0gPSAoaHRvbnMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOwotICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gNjsKLSAgICAgICAgbWVtY3B5KHQtPmRhdGEsICZhZGRyX3BhaXIsIHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpKTsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIDE2LWJpdCBsZW5ndGggZmllbGQsIDggYnl0ZSBVRFAgaGVhZGVyLCAyMCBieXRlIElQdjQgaGVhZGVyICAKLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweGZmZmYgLSA4IC0gMjA7Ci0gICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdWRwX3JlY3Y7Ci0gICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfdWRwX3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfdWRwX2Nsb3NlOwotICAgIHQtPmZfYWNjZXB0ICAgPSBOVUxMOwotICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3VkcF9mbXRhZGRyOwotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLQotdm9pZAotX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KGludCBmZCwgaW50IGxvY2FsKQotewotI2lmZGVmICBTT19CU0RDT01QQVQKLSAgICAvKgotICAgICAqIFBhdGNoIGZvciBMaW51eC4gIFdpdGhvdXQgdGhpcywgVURQIHBhY2tldHMgdGhhdCBmYWlsIGdldCBhbiBJQ01QCi0gICAgICogcmVzcG9uc2UuICBMaW51eCB0dXJucyB0aGUgZmFpbGVkIElDTVAgcmVzcG9uc2UgaW50byBhbiBlcnJvciBtZXNzYWdlCi0gICAgICogYW5kIHJldHVybiB2YWx1ZSwgdW5saWtlIGFsbCBvdGhlciBPUydzLiAgCi0gICAgICovCi0gICAgaWYgKDAgPT0gbmV0c25tcF9vc19wcmVtYXRjaCgiTGludXgiLCIyLjQiKSkKLSAgICB7Ci0gICAgICAgIGludCAgICAgICAgICAgICBvbmUgPSAxOwotICAgICAgICBERUJVR01TR1RMKCgic29ja2V0Om9wdGlvbiIsICJzZXR0aW5nIHNvY2tldCBvcHRpb24gU09fQlNEQ09NUEFUXG4iKSk7Ci0gICAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX0JTRENPTVBBVCwgKHZvaWQgKikgJm9uZSwKLSAgICAgICAgICAgICAgICAgICBzaXplb2Yob25lKSk7Ci0gICAgfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX0JTRENPTVBBVCAqLwotICAgIC8qCi0gICAgICogU09fUkVVU0VBRERSIHdpbGwgYWxsb3cgbXVsdGlwbGUgYXBwcyB0byBvcGVuIHRoZSBzYW1lIHBvcnQgYXQKLSAgICAgKiB0aGUgc2FtZSB0aW1lLiBPbmx5IHRoZSBsYXN0IG9uZSB0byBvcGVuIHRoZSBzb2NrZXQgd2lsbCBnZXQKLSAgICAgKiBkYXRhLiBPYnZpb3VzbHksIGZvciBhbiBhZ2VudCwgdGhpcyBpcyBhIGJhZCB0aGluZy4gVGhlcmUgc2hvdWxkCi0gICAgICogb25seSBiZSBvbmUgbGlzdGVuZXIuCi0gICAgICovCi0jaWZkZWYgQUxMT1dfUE9SVF9ISUpBQ0tJTkcKLSNpZmRlZiAgU09fUkVVU0VBRERSCi0gICAgLyoKLSAgICAgKiBBbGxvdyB0aGUgc2FtZSBwb3J0IHRvIGJlIHNwZWNpZmllZCBtdWx0aXBsZSB0aW1lcyB3aXRob3V0IGZhaWxpbmcuCi0gICAgICogICAgKHVzZWZ1bCBmb3IgYSBsaXN0ZW5lcikKLSAgICAgKi8KLSAgICB7Ci0gICAgICAgIGludCAgICAgICAgICAgICBvbmUgPSAxOwotICAgICAgICBERUJVR01TR1RMKCgic29ja2V0Om9wdGlvbiIsICJzZXR0aW5nIHNvY2tldCBvcHRpb24gU09fUkVVU0VBRERSXG4iKSk7Ci0gICAgICAgIHNldHNvY2tvcHQoZmQsIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikgJm9uZSwKLSAgICAgICAgICAgICAgICAgICBzaXplb2Yob25lKSk7Ci0gICAgfQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX1JFVVNFQUREUiAqLwotI2VuZGlmCi0KLSAgICAvKgotICAgICAqIFRyeSB0byBzZXQgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycyB0byBhIHJlYXNvbmFibHkgbGFyZ2UgdmFsdWUsIHNvCi0gICAgICogdGhhdCB3ZSBjYW4gc2VuZCBhbmQgcmVjZWl2ZSBiaWcgUERVcyAoZGVmYXVsdHMgdG8gODE5MiBieXRlcyAoISkgb24KLSAgICAgKiBTb2xhcmlzLCBmb3IgaW5zdGFuY2UpLiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tIGp1c3QKLSAgICAgKiBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAotICAgICAqLwotICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KGZkLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKLSAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChmZCwgU09fUkNWQlVGLCBsb2NhbCwgMCk7Ci19Ci0KLWludAotbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAotICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0jaWYgSEFWRV9HRVRBRERSSU5GTwotICAgIHN0cnVjdCBhZGRyaW5mbyAqYWRkcnMgPSBOVUxMOwotICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50OwotICAgIGludCAgICAgICAgICAgICBlcnI7Ci0jZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQotICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIGVycjsKLSNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRQotICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7Ci0jZW5kaWYKLQotICAgIGlmIChhZGRyID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICJhZGRyICVwLCBpbnBlZXJuYW1lIFwiJXNcIiwgZGVmYXVsdF90YXJnZXQgXCIlc1wiXG4iLAotICAgICAgICAgICAgICAgIGFkZHIsIGlucGVlcm5hbWUgPyBpbnBlZXJuYW1lIDogIltOSUxdIiwKLSAgICAgICAgICAgICAgICBkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIltOSUxdIikpOwotCi0gICAgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKLSAgICBhZGRyLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKLSAgICBhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKLSAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1X3Nob3J0KVNOTVBfUE9SVCk7Ci0KLSAgICB7Ci0JaW50IHBvcnQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAotCQkJCSAgICAgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCk7Ci0KLQlpZiAocG9ydCAhPSAwKSB7Ci0JICAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydCk7Ci0JfSBlbHNlIGlmIChkZWZhdWx0X3RhcmdldCAhPSBOVUxMKQotCSAgICBuZXRzbm1wX3NvY2thZGRyX2luMihhZGRyLCBkZWZhdWx0X3RhcmdldCwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKGlucGVlcm5hbWUgIT0gTlVMTCAmJiAqaW5wZWVybmFtZSAhPSAnXDAnKSB7Ci0JY29uc3QgY2hhciAgICAgKmhvc3QsICpwb3J0OwotCWNoYXIgICAgICAgICAgICpwZWVybmFtZSA9IE5VTEw7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICpjcDsKLSAgICAgICAgLyoKLSAgICAgICAgICogRHVwbGljYXRlIHRoZSBwZWVybmFtZSBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQgdG8gbWFuayBhcm91bmQgd2l0aAotICAgICAgICAgKiBpdC4gIAotICAgICAgICAgKi8KLQotICAgICAgICBwZWVybmFtZSA9IHN0cmR1cChpbnBlZXJuYW1lKTsKLSAgICAgICAgaWYgKHBlZXJuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IGFuZCBleHRyYWN0IGFuIGFwcGVuZGVkIHBvcnQgbnVtYmVyLiAgCi0gICAgICAgICAqLwotICAgICAgICBjcCA9IHN0cmNocihwZWVybmFtZSwgJzonKTsKLSAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpjcCA9ICdcMCc7Ci0gICAgICAgICAgICBwb3J0ID0gY3AgKyAxOwotICAgICAgICAgICAgaG9zdCA9IHBlZXJuYW1lOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaG9zdCA9IE5VTEw7Ci0gICAgICAgICAgICBwb3J0ID0gcGVlcm5hbWU7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBUcnkgdG8gY29udmVydCB0aGUgdXNlciBwb3J0IHNwZWNpZmllcgotICAgICAgICAgKi8KLSAgICAgICAgaWYgKHBvcnQgJiYgKnBvcnQgPT0gJ1wwJykKLSAgICAgICAgICAgIHBvcnQgPSBOVUxMOwotCi0gICAgICAgIGlmIChwb3J0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGxvbmcgaW50IGw7Ci0gICAgICAgICAgICBjaGFyKiBlcDsKLQotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLCAiY2hlY2sgdXNlciBzZXJ2aWNlICVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgcG9ydCkpOwotCi0gICAgICAgICAgICBsID0gc3RydG9sKHBvcnQsICZlcCwgMTApOwotICAgICAgICAgICAgaWYgKGVwICE9IHBvcnQgJiYgKmVwID09ICdcMCcgJiYgMCA8PSBsICYmIGwgPD0gMHgwZmZmZikKLSAgICAgICAgICAgICAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1X3Nob3J0KWwpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGhvc3QgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2bmFtZSBub3QgbnVtZXJpYywgIgotCQkJCSJjaGVjayBpZiBpdCByZWFsbHkgaXMgYSBkZXN0aW5hdGlvbikiKSk7Ci0gICAgICAgICAgICAgICAgICAgIGhvc3QgPSBwb3J0OwotICAgICAgICAgICAgICAgICAgICBwb3J0ID0gTlVMTDsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZXJ2bmFtZSBub3QgbnVtZXJpYyIpKTsKLSAgICAgICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSB0byBjb252ZXJ0IHRoZSB1c2VyIGhvc3Qgc3BlY2lmaWVyCi0gICAgICAgICAqLwotICAgICAgICBpZiAoaG9zdCAmJiAqaG9zdCA9PSAnXDAnKQotICAgICAgICAgICAgaG9zdCA9IE5VTEw7Ci0KLSAgICAgICAgaWYgKGhvc3QgIT0gTlVMTCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrIGRlc3RpbmF0aW9uICVzXG4iLCBob3N0KSk7Ci0KLSNpZiBIQVZFX0dFVEFERFJJTkZPCi0gICAgICAgICAgICBtZW1zZXQoJmhpbnQsIDAsIHNpemVvZiBoaW50KTsKLSAgICAgICAgICAgIGhpbnQuYWlfZmxhZ3MgPSAwOwotICAgICAgICAgICAgaGludC5haV9mYW1pbHkgPSBQRl9JTkVUOwotICAgICAgICAgICAgaGludC5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07Ci0gICAgICAgICAgICBoaW50LmFpX3Byb3RvY29sID0gMDsKLQotICAgICAgICAgICAgZXJyID0gZ2V0YWRkcmluZm8ocGVlcm5hbWUsIE5VTEwsICZoaW50LCAmYWRkcnMpOwotICAgICAgICAgICAgaWYgKGVyciAhPSAwKSB7Ci0jaWYgSEFWRV9HQUlfU1RSRVJST1IKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZ2V0YWRkcmluZm86ICVzICVzXG4iLCBwZWVybmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBnYWlfc3RyZXJyb3IoZXJyKSk7Ci0jZWxzZQotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJnZXRhZGRyaW5mbzogJXMgKGVycm9yICVkKVxuIiwgcGVlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZXJyKTsKLSNlbmRpZgotICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGFkZHJzICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOwotICAgICAgICAgICAgICAgIG1lbWNweSgmYWRkci0+c2luX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBhZGRycy0+YWlfYWRkciktPnNpbl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKLSAgICAgICAgICAgICAgICBmcmVlYWRkcmluZm8oYWRkcnMpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVzb2x2ZSBJUHY0IGhvc3RuYW1lXG4iKSk7Ci0gICAgICAgICAgICB9Ci0jZWxpZiBIQVZFX0dFVEhPU1RCWU5BTUUKLSAgICAgICAgICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShob3N0KTsKLSAgICAgICAgICAgIGlmIChocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSlcbiIpKTsKLSAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKG5vdCBBRl9JTkVUISlcbiIpKTsKLSAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKLSAgICAgICAgICAgICAgICBtZW1jcHkoJmFkZHItPnNpbl9hZGRyLCBocC0+aF9hZGRyLCBocC0+aF9sZW5ndGgpOwotICAgICAgICAgICAgfQotI2VsaWYgSEFWRV9HRVRJUE5PREVCWU5BTUUKLSAgICAgICAgICAgIGhwID0gZ2V0aXBub2RlYnluYW1lKHBlZXJuYW1lLCBBRl9JTkVULCAwLCAmZXJyKTsKLSAgICAgICAgICAgIGlmIChocCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSA9ICVkKVxuIiwgZXJyKSk7Ci0gICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7Ci0gICAgICAgICAgICBtZW1jcHkoJihhZGRyLT5zaW5fYWRkciksIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7Ci0jZWxzZSAvKiBIQVZFX0dFVElQTk9ERUJZTkFNRSAqLwotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRoZXJlIGlzIG5vIG5hbWUgcmVzb2x2aW5nIGZ1bmN0aW9uIGF2YWlsYWJsZS4KLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgIm5vIGdldGFkZHJpbmZvKCkvZ2V0aXBub2RlYnluYW1lKCkvZ2V0aG9zdGJ5bmFtZSgpXG4iKSk7Ci0gICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotI2VuZGlmIC8qIEhBVkVfR0VUSE9TVEJZTkFNRSAqLwotICAgICAgICB9Ci0JZnJlZShwZWVybmFtZSk7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBGaW5pc2hlZAotICAgICAqLwotCi0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLCAicmV0dXJuIHsgQUZfSU5FVCwgJXM6JWh1IH1cbiIsCi0gICAgICAgICAgICAgICAgaW5ldF9udG9hKGFkZHItPnNpbl9hZGRyKSwgbnRvaHMoYWRkci0+c2luX3BvcnQpKSk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLQotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKLSAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgaW50IHJlbW90ZV9wb3J0KQotewotICAgIGNoYXIgYnVmW3NpemVvZihpbnQpICogMyArIDJdOwotICAgIHNwcmludGYoYnVmLCAiOiV1IiwgcmVtb3RlX3BvcnQpOwotICAgIHJldHVybiBuZXRzbm1wX3NvY2thZGRyX2luMihhZGRyLCBpbnBlZXJuYW1lLCByZW1vdGVfcG9ydCA/IGJ1ZiA6IE5VTEwpOwotfQotCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0vKgotICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgImNvbTJzZWMiIGNvbmZpZ3VyYXRpb24gdG9rZW4KLSAqIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbXBhdGliaWxpdHkuICAKLSAqLwotCi0jZGVmaW5lIEVYQU1QTEVfTkVUV09SSwkJIk5FVFdPUksiCi0jZGVmaW5lIEVYQU1QTEVfQ09NTVVOSVRZCSJDT01NVU5JVFkiCi0KLXR5cGVkZWYgc3RydWN0IF9jb20yU2VjRW50cnkgewotICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU5dOwotICAgIHVuc2lnbmVkIGxvbmcgICBuZXR3b3JrOwotICAgIHVuc2lnbmVkIGxvbmcgICBtYXNrOwotICAgIGNoYXIgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBzdHJ1Y3QgX2NvbTJTZWNFbnRyeSAqbmV4dDsKLX0gY29tMlNlY0VudHJ5OwotCi1jb20yU2VjRW50cnkgICAqY29tMlNlY0xpc3QgPSBOVUxMLCAqY29tMlNlY0xpc3RMYXN0ID0gTlVMTDsKLQotdm9pZAotbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKQotewotICAgIGNoYXIgICAgICAgICAgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgc291cmNlW1NOTVBfTUFYQlVGX1NNQUxMXTsKLSAgICBjaGFyICAgICAgICAgICAqY3AgPSBOVUxMOwotICAgIGNvbnN0IGNoYXIgICAgICpzdHJtYXNrID0gTlVMTDsKLSAgICBjb20yU2VjRW50cnkgICAqZSA9IE5VTEw7Ci0gICAgaW5fYWRkcl90ICAgbmV0d29yayA9IDAsIG1hc2sgPSAwOwotCi0gICAgLyoKLSAgICAgKiBHZXQgc2VjdXJpdHksIHNvdXJjZSBhZGRyZXNzL25ldG1hc2sgYW5kIGNvbW11bml0eSBzdHJpbmdzLiAgCi0gICAgICovCi0KLSAgICBjcCA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOwotICAgIGlmIChzdHJjbXAoc2VjTmFtZSwgIi1DbiIpID09IDApIHsKLSAgICAgICAgaWYgKCFjcCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY3AgPSBjb3B5X253b3JkKCBjcCwgY29udGV4dE5hbWUsIHNpemVvZihjb250ZXh0TmFtZSkpOwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRleHROYW1lWzBdID0gJ1wwJzsKLSAgICB9Ci0gICAgaWYgKHNlY05hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIE5BTUUgcGFyYW1ldGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihzZWNOYW1lKSA+IChWQUNNU1RSSU5HTEVOIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigic2VjdXJpdHkgbmFtZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwID0gY29weV9ud29yZCggY3AsIHNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpOwotICAgIGlmIChzb3VyY2VbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIFNPVVJDRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybmNtcChzb3VyY2UsIEVYQU1QTEVfTkVUV09SSywgc3RybGVuKEVYQU1QTEVfTkVUV09SSykpID09Ci0gICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIE5FVFdPUksgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBjb21tdW5pdHksIHNpemVvZihjb21tdW5pdHkpKTsKLSAgICBpZiAoY29tbXVuaXR5WzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZQotICAgICAgICBpZiAoc3RybmNtcAotICAgICAgICAgICAgKGNvbW11bml0eSwgRVhBTVBMRV9DT01NVU5JVFksIHN0cmxlbihFWEFNUExFX0NPTU1VTklUWSkpCi0gICAgICAgICAgICA9PSAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oY29tbXVuaXR5KSA+IChDT01NVU5JVFlfTUFYX0xFTiAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbW11bml0eSBuYW1lIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFByb2Nlc3MgdGhlIHNvdXJjZSBhZGRyZXNzL25ldG1hc2sgc3RyaW5nLiAgCi0gICAgICovCi0KLSAgICBjcCA9IHN0cmNocihzb3VyY2UsICcvJyk7Ci0gICAgaWYgKGNwICE9IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogTWFzayBnaXZlbi4gIAotICAgICAgICAgKi8KLSAgICAgICAgKmNwID0gJ1wwJzsKLSAgICAgICAgc3RybWFzayA9IGNwICsgMTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIERlYWwgd2l0aCB0aGUgbmV0d29yayBwYXJ0IGZpcnN0LiAgCi0gICAgICovCi0KLSAgICBpZiAoKHN0cmNtcChzb3VyY2UsICJkZWZhdWx0IikgPT0gMCkKLSAgICAgICAgfHwgKHN0cmNtcChzb3VyY2UsICIwLjAuMC4wIikgPT0gMCkpIHsKLSAgICAgICAgbmV0d29yayA9IDA7Ci0gICAgICAgIHN0cm1hc2sgPSAiMC4wLjAuMCI7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVHJ5IGludGVycHJldGluZyBhcyBhIGRvdHRlZCBxdWFkLiAgCi0gICAgICAgICAqLwotICAgICAgICBuZXR3b3JrID0gaW5ldF9hZGRyKHNvdXJjZSk7Ci0KLSAgICAgICAgaWYgKG5ldHdvcmsgPT0gKGluX2FkZHJfdCkgLTEpIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBOb3BlLCB3YXNuJ3QgYSBkb3R0ZWQgcXVhZC4gIE11c3QgYmUgYSBob3N0bmFtZS4gIAotICAgICAgICAgICAgICovCi0jaWZkZWYgIEhBVkVfR0VUSE9TVEJZTkFNRQotICAgICAgICAgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gZ2V0aG9zdGJ5bmFtZShzb3VyY2UpOwotICAgICAgICAgICAgaWYgKGhwID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgc291cmNlIGFkZHJlc3MiKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIElQIGFkZHJlc3MgZm9yIHNvdXJjZSBob3N0bmFtZSIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5ldHdvcmsgPSAqKChpbl9hZGRyX3QgKikgaHAtPmhfYWRkcik7Ci0gICAgICAgICAgICB9Ci0jZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qSEFWRV9HRVRIT1NUQllOQU1FICovCi0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogT2ggZGVhci4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJjYW5ub3QgcmVzb2x2ZSBzb3VyY2UgaG9zdG5hbWUiKTsKLSAgICAgICAgICAgIHJldHVybjsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypIQVZFX0dFVEhPU1RCWU5BTUUgKi8KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogTm93IHdvcmsgb3V0IHRoZSBtYXNrLiAgCi0gICAgICovCi0KLSAgICBpZiAoc3RybWFzayA9PSBOVUxMIHx8ICpzdHJtYXNrID09ICdcMCcpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogTm8gbWFzayB3YXMgZ2l2ZW4uICBVc2UgMjU1LjI1NS4yNTUuMjU1LiAgCi0gICAgICAgICAqLwotICAgICAgICBtYXNrID0gMHhmZmZmZmZmZkw7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHN0cmNocihzdHJtYXNrLCAnLicpKSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVHJ5IHRvIGludGVycHJldCBtYXNrIGFzIGEgZG90dGVkIHF1YWQuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgbWFzayA9IGluZXRfYWRkcihzdHJtYXNrKTsKLSAgICAgICAgICAgIGlmIChtYXNrID09IChpbl9hZGRyX3QpIC0xICYmCi0gICAgICAgICAgICAgICAgc3RybmNtcChzdHJtYXNrLCAiMjU1LjI1NS4yNTUuMjU1IiwgMTUpICE9IDApIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBUcnkgdG8gaW50ZXJwcmV0IG1hc2sgYXMgYSAibnVtYmVyIG9mIDEgYml0cyIuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1hc2tMZW4gPSBhdG9pKHN0cm1hc2spLCBtYXNrQml0ID0gMHg4MDAwMDAwMEw7Ci0gICAgICAgICAgICBpZiAobWFza0xlbiA8PSAwIHx8IG1hc2tMZW4gPiAzMikgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIGxlbmd0aCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHdoaWxlIChtYXNrTGVuLS0pIHsKLSAgICAgICAgICAgICAgICBtYXNrIHw9IG1hc2tCaXQ7Ci0gICAgICAgICAgICAgICAgbWFza0JpdCA+Pj0gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIG1hc2sgPSBodG9ubChtYXNrKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8qCi0gICAgICogQ2hlY2sgdGhhdCB0aGUgbmV0d29yayBhbmQgbWFzayBhcmUgY29uc2lzdGVudC4gIAotICAgICAqLwotCi0gICAgaWYgKG5ldHdvcmsgJiB+bWFzaykgewotICAgICAgICBjb25maWdfcGVycm9yKCJzb3VyY2UvbWFzayBtaXNtYXRjaCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgZSA9IChjb20yU2VjRW50cnkgKikgbWFsbG9jKHNpemVvZihjb20yU2VjRW50cnkpKTsKLSAgICBpZiAoZSA9PSBOVUxMKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBlcnJvciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBFdmVyeXRoaW5nIGlzIG9rYXkuICBDb3B5IHRoZSBwYXJhbWV0ZXJzIHRvIHRoZSBzdHJ1Y3R1cmUgYWxsb2NhdGVkCi0gICAgICogYWJvdmUgYW5kIGFkZCBpdCB0byBFTkQgb2YgdGhlIGxpc3QuICAKLSAgICAgKi8KLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eSIsCi0gICAgICAgICAgICAgICAgIjxcIiVzXCIsIDB4JTA4eC8weCUwOHg+ID0+IFwiJXNcIlxuIiwgY29tbXVuaXR5LCBuZXR3b3JrLAotICAgICAgICAgICAgICAgIG1hc2ssIHNlY05hbWUpKTsKLQotICAgIHN0cmNweShlLT5jb250ZXh0TmFtZSwgY29udGV4dE5hbWUpOwotICAgIHN0cmNweShlLT5zZWNOYW1lLCBzZWNOYW1lKTsKLSAgICBzdHJjcHkoZS0+Y29tbXVuaXR5LCBjb21tdW5pdHkpOwotICAgIGUtPm5ldHdvcmsgPSBuZXR3b3JrOwotICAgIGUtPm1hc2sgPSBtYXNrOwotICAgIGUtPm5leHQgPSBOVUxMOwotCi0gICAgaWYgKGNvbTJTZWNMaXN0TGFzdCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbTJTZWNMaXN0TGFzdC0+bmV4dCA9IGU7Ci0gICAgICAgIGNvbTJTZWNMaXN0TGFzdCA9IGU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgY29tMlNlY0xpc3RMYXN0ID0gY29tMlNlY0xpc3QgPSBlOwotICAgIH0KLX0KLQotCi12b2lkCi1uZXRzbm1wX3VkcF9jb20yU2VjTGlzdF9mcmVlKHZvaWQpCi17Ci0gICAgY29tMlNlY0VudHJ5ICAgKmUgPSBjb20yU2VjTGlzdDsKLSAgICB3aGlsZSAoZSAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbTJTZWNFbnRyeSAgICp0bXAgPSBlOwotICAgICAgICBlID0gZS0+bmV4dDsKLSAgICAgICAgZnJlZSh0bXApOwotICAgIH0KLSAgICBjb20yU2VjTGlzdCA9IGNvbTJTZWNMaXN0TGFzdCA9IE5VTEw7Ci19Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLQotdm9pZAotbmV0c25tcF91ZHBfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKQotewotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigiY29tMnNlYyIsIG5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcF9jb20yU2VjTGlzdF9mcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWy1DbiBDT05URVhUXSBzZWNOYW1lIElQdjQtbmV0d29yay1hZGRyZXNzWy9uZXRtYXNrXSBjb21tdW5pdHkiKTsKLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotfQotCi0KLQotLyoKLSAqIFJldHVybiAwIGlmIHRoZXJlIGFyZSBubyBjb20yc2VjIGVudHJpZXMsIG9yIHJldHVybiAxIGlmIHRoZXJlIEFSRSBjb20yc2VjIAotICogZW50cmllcy4gIE9uIHJldHVybiwgaWYgYSBjb20yc2VjIGVudHJ5IG1hdGNoZWQgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLAotICogdGhlbiAqc2VjTmFtZSBwb2ludHMgYXQgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG5hbWUsIG9yIGlzIE5VTEwgaWYgdGhlCi0gKiBwYXJhbWV0ZXJzIGRpZCBub3QgbWF0Y2ggYW55IGNvbTJzZWMgZW50cnkuICAKLSAqLwotCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi1pbnQKLW5ldHNubXBfdWRwX2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwgY2hhciAqKnNlY05hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipjb250ZXh0TmFtZSkKLXsKLSAgICBjb20yU2VjRW50cnkgICAqYzsKLSAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKikgb3BhcXVlOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKLSAgICBjaGFyICAgICAgICAgICAqenRjb21tdW5pdHkgPSBOVUxMOwotCi0gICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgewotICAgICAgICAqc2VjTmFtZSA9IE5VTEw7ICAvKiBIYXZlbid0IGZvdW5kIGFueXRoaW5nIHlldCAqLwotICAgIH0KLQotICAgIC8qCi0gICAgICogU3BlY2lhbCBjYXNlIGlmIHRoZXJlIGFyZSBOTyBlbnRyaWVzIChhcyBvcHBvc2VkIHRvIG5vIE1BVENISU5HCi0gICAgICogZW50cmllcykuICAKLSAgICAgKi8KLQotICAgIGlmIChjb20yU2VjTGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgIm5vIGNvbTJzZWMgZW50cmllc1xuIikpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHRoZXJlIGlzIG5vIElQdjQgc291cmNlIGFkZHJlc3MsIHRoZW4gdGhlcmUgY2FuIGJlIG5vIHZhbGlkIHNlY3VyaXR5Ci0gICAgICogbmFtZS4gIAotICAgICAqLwotCi0gICAgaWYgKG9wYXF1ZSA9PSBOVUxMIHx8IG9sZW5ndGggIT0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikgfHwKLSAgICAgICAgZnJvbS0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwKLQkJICAgICJubyBJUHY0IHNvdXJjZSBhZGRyZXNzIGluIFBEVT9cbiIpKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgREVCVUdJRigibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIpIHsKLQl6dGNvbW11bml0eSA9IChjaGFyICopbWFsbG9jKGNvbW11bml0eV9sZW4gKyAxKTsKLQlpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgewotCSAgICBtZW1jcHkoenRjb21tdW5pdHksIGNvbW11bml0eSwgY29tbXVuaXR5X2xlbik7Ci0JICAgIHp0Y29tbXVuaXR5W2NvbW11bml0eV9sZW5dID0gJ1wwJzsKLQl9Ci0KLQlERUJVR01TR1RMKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsICJyZXNvbHZlIDxcIiVzXCIsIDB4JTA4bHg+XG4iLAotCQkgICAgenRjb21tdW5pdHkgPyB6dGNvbW11bml0eSA6ICI8bWFsbG9jIGVycm9yPiIsCi0JCSAgICAodW5zaWduZWQgbG9uZykoZnJvbS0+c2luX2FkZHIuc19hZGRyKSkpOwotICAgIH0KLQotICAgIGZvciAoYyA9IGNvbTJTZWNMaXN0OyBjICE9IE5VTEw7IGMgPSBjLT5uZXh0KSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwiY29tcGFyZSA8XCIlc1wiLCAweCUwOHgvMHglMDh4PiIsCi0JCSAgICBjLT5jb21tdW5pdHksIGMtPm5ldHdvcmssIGMtPm1hc2spKTsKLSAgICAgICAgaWYgKChjb21tdW5pdHlfbGVuID09IHN0cmxlbihjLT5jb21tdW5pdHkpKSAmJgotCSAgICAobWVtY21wKGNvbW11bml0eSwgYy0+Y29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKSA9PSAwKSAmJgotICAgICAgICAgICAgKChmcm9tLT5zaW5fYWRkci5zX2FkZHIgJiBjLT5tYXNrKSA9PSBjLT5uZXR3b3JrKSkgewotICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgIi4uLiBTVUNDRVNTXG4iKSk7Ci0gICAgICAgICAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgKnNlY05hbWUgPSBjLT5zZWNOYW1lOwotICAgICAgICAgICAgICAgICpjb250ZXh0TmFtZSA9IGMtPmNvbnRleHROYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcF9nZXRTZWNOYW1lIiwgIi4uLiBub3BlXG4iKSk7Ci0gICAgfQotICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7Ci0gICAgICAgIGZyZWUoenRjb21tdW5pdHkpOwotICAgIH0KLSAgICByZXR1cm4gMTsKLX0KLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdWRwX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAotCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7Ci0KLSAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjIoJmFkZHIsIHN0ciwgZGVmYXVsdF90YXJnZXQpKSB7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3VkcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91ZHBfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPT0gNikgewotICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0dG1wID0gKG9bNF0gPDwgOCkgKyBvWzVdOwotICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbl9hZGRyLnNfYWRkciksIG8sIDQpOwotICAgICAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydHRtcCk7Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3VkcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9Ci0gICAgcmV0dXJuIE5VTEw7Ci19Ci0KLQotdm9pZAotbmV0c25tcF91ZHBfY3Rvcih2b2lkKQotewotICAgIHVkcERvbWFpbi5uYW1lID0gbmV0c25tcFVEUERvbWFpbjsKLSAgICB1ZHBEb21haW4ubmFtZV9sZW5ndGggPSBuZXRzbm1wVURQRG9tYWluX2xlbjsKLSAgICB1ZHBEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOwotICAgIHVkcERvbWFpbi5wcmVmaXhbMF0gPSAidWRwIjsKLQotICAgIHVkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICB1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdWRwX2NyZWF0ZV90c3RyaW5nOwotICAgIHVkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF91ZHBfY3JlYXRlX29zdHJpbmc7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnVkcERvbWFpbik7Ci19CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMgYi9zbm1wbGliL3NubXBVRFBJUHY2RG9tYWluLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYwZDc2MzUuLjAwMDAwMDAKLS0tIGEvc25tcGxpYi9zbm1wVURQSVB2NkRvbWFpbi5jCisrKyAvZGV2L251bGwKQEAgLTEsMTM5MSArMCwwIEBACi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0KLSNpZiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKQotICAgIC8qCi0gICAgICogIFdpbmRvd3MgSVB2NiBzdXBwb3J0IGlzIHBhcnQgb2YgV2luU29jazIgb25seQotICAgICAqLwotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0jaW5jbHVkZSA8d3MydGNwaXAuaD4KLSN1bmRlZiAgSEFWRV9JRl9OQU1FVE9JTkRFWAotCi1leHRlcm4gaW50ICAgICAgICAgaW5ldF9wdG9uKGludCwgY29uc3QgY2hhciosIHZvaWQqKTsKLWV4dGVybiBjb25zdCBjaGFyICppbmV0X250b3AoaW50LCBjb25zdCB2b2lkKiwgY2hhciosIHNpemVfdCk7Ci1jb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOwotI2VuZGlmCi0KLSNpZiBIQVZFX05FVElORVRfSU5fSAotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNlbmRpZgotI2lmIEhBVkVfQVJQQV9JTkVUX0gKLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNlbmRpZgotI2lmIEhBVkVfTkVUREJfSAotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX05FVF9JRl9ICi0jaW5jbHVkZSA8bmV0L2lmLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfRE1BTExPQ19ICi0jaW5jbHVkZSA8ZG1hbGxvYy5oPgotI2VuZGlmCi0KLSNpZiBTVFJVQ1RfU09DS0FERFJfU1RPUkFHRV9IQVNfU1NfRkFNSUxZCi0jZGVmaW5lIFNTX0ZBTUlMWSBzc19mYW1pbHkKLSNlbGlmIFNUUlVDVF9TT0NLQUREUl9TVE9SQUdFX0hBU19fX1NTX0ZBTUlMWQotI2RlZmluZSBTU19GQU1JTFkgX19zc19mYW1pbHkKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChkYXJ3aW4pCi0jaW5jbHVkZSA8c3RkaW50Lmg+IC8qIGZvciB1aW50OF90ICovCi0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KLQotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY2RG9tYWluLmg+Ci0KLW9pZCBuZXRzbm1wX1VEUElQdjZEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9VRFBfSVBWNiB9Owotc3RhdGljIG5ldHNubXBfdGRvbWFpbiB1ZHA2RG9tYWluOwotCi0vKgotICogZnJvbSBzbm1wVURQRG9tYWluLiBub3Qgc3RhdGljLCBidXQgbm90IHB1YmxpYywgZWl0aGVyLgotICogKGllIGRvbid0IHB1dCBpdCBpbiBhIHB1YmxpYyBoZWFkZXIuKQotICovCi1leHRlcm4gdm9pZCBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQoaW50IGZkLCBpbnQgc2VydmVyKTsKLQotLyoKLSAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCi0gKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfdWRwNl9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnRvID0gTlVMTDsKLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAiZm10YWRkcjogdCA9ICVwLCBkYXRhID0gJXAsIGxlbiA9ICVkXG4iLCB0LAotICAgICAgICAgICAgICAgIGRhdGEsIGxlbikpOwotICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRhdGE7Ci0gICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgdC0+ZGF0YTsKLSAgICB9Ci0gICAgaWYgKHRvID09IE5VTEwpIHsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiVURQL0lQdjY6IHVua25vd24iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBjaGFyIGFkZHJbSU5FVDZfQUREUlNUUkxFTl07Ci0gICAgICAgIGNoYXIgdG1wW0lORVQ2X0FERFJTVFJMRU4gKyAxOF07Ci0KLSAgICAgICAgc3ByaW50Zih0bXAsICJVRFAvSVB2NjogWyVzXTolaHUiLAotICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgKHZvaWQgKikgJih0by0+c2luNl9hZGRyKSwgYWRkciwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQUREUlNUUkxFTiksIG50b2hzKHRvLT5zaW42X3BvcnQpKTsKLSAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOwotICAgIH0KLX0KLQotCi0KLS8qCi0gKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCi0gKi8KLQotc3RhdGljIGludAotbmV0c25tcF91ZHA2X3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCAgICAgICAgICAgICByYyA9IC0xOwotICAgIHNvY2tsZW5fdCAgICAgICBmcm9tbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOwotICAgIHN0cnVjdCBzb2NrYWRkciAqZnJvbTsKLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIGZyb20gPSAoc3RydWN0IHNvY2thZGRyICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBpZiAoZnJvbSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKLSAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1lbXNldChmcm9tLCAwLCBmcm9tbGVuKTsKLSAgICAgICAgfQotCi0Jd2hpbGUgKHJjIDwgMCkgewotCSAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIGZyb20sICZmcm9tbGVuKTsKLQkgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkgICAgYnJlYWs7Ci0JICB9Ci0JfQotCi0gICAgICAgIGlmIChyYyA+PSAwKSB7Ci0JICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwNl9mbXRhZGRyKE5VTEwsIGZyb20sIGZyb21sZW4pOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsCi0JCQkicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwgdC0+c29jaywKLSAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBzdHIpKTsKLSAgICAgICAgICAgIGZyZWUoc3RyKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAicmVjdmZyb20gZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAotCQkJdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICB9Ci0gICAgICAgICpvcGFxdWUgPSAodm9pZCAqKSBmcm9tOwotICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJjOwotfQotCi0KLQotc3RhdGljIGludAotbmV0c25tcF91ZHA2X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCi0JCSAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOwotCi0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgotICAgICAgICAqb2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpIHsKLSAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICgqb3BhcXVlKTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKLSAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKHQtPmRhdGEpOwotICAgIH0KLQotICAgIGlmICh0byAhPSBOVUxMICYmIHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHA2X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKil0bywKLQkJCQkJICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLCAic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHN0ciwgdC0+c29jaykpOwotICAgICAgICBmcmVlKHN0cik7Ci0Jd2hpbGUgKHJjIDwgMCkgewotCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIHRvLHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0JICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLQkJYnJlYWs7Ci0JICAgIH0KLQl9Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdWRwNl9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKLXsKLSAgICBpbnQgcmMgPSAtMTsKLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgImNsb3NlIGZkICVkXG4iLCB0LT5zb2NrKSk7Ci0jaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKLSAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKLSNlbHNlCi0gICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7Ci0jZW5kaWYKLSAgICAgICAgdC0+c29jayA9IC0xOwotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi0vKgotICogT3BlbiBhIFVEUC9JUHY2LWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUKLSAqIGxvY2FsIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZQotICogYWRkciBpcyB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKLSAqLwotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VkcDZfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKLSAgICBjaGFyICAgICAgICAgICAqc3RyID0gTlVMTDsKLQotICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzdHIgPSBuZXRzbm1wX3VkcDZfZm10YWRkcihOVUxMLCAodm9pZCAqKSBhZGRyLAotCQkJCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgIm9wZW4gJXMgJXNcbiIsIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLAotICAgICAgICAgICAgICAgIHN0cikpOwotICAgIGZyZWUoc3RyKTsKLQotICAgIG1lbXNldCh0LCAwLCBzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKLQotICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfVURQSVB2NkRvbWFpbjsKLSAgICB0LT5kb21haW5fbGVuZ3RoID0KLSAgICAgICAgc2l6ZW9mKG5ldHNubXBfVURQSVB2NkRvbWFpbikgLyBzaXplb2YobmV0c25tcF9VRFBJUHY2RG9tYWluWzBdKTsKLQotICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVDYsIFNPQ0tfREdSQU0sIDApOwotICAgIGlmICh0LT5zb2NrIDwgMCkgewotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQodC0+c29jaywgbG9jYWwpOwotCi0gICAgaWYgKGxvY2FsKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKLSAgICAgICAgICogZ2l2ZW4gSVAgYWRkcmVzcywgd2hpY2ggbWF5IGluY2x1ZGUgYW4gaW50ZXJmYWNlIGFkZHJlc3MsIG9yIGNvdWxkCi0gICAgICAgICAqIGJlIElOQUREUl9BTlksIGJ1dCBjZXJ0YWlubHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlci4KLSAgICAgICAgICovCi0KLSNpZmRlZiBJUFY2X1Y2T05MWQotICAgICAgICAvKiBUcnkgdG8gcmVzdHJpY3QgUEZfSU5FVDYgc29ja2V0IHRvIElQdjYgY29tbXVuaWNhdGlvbnMgb25seS4gKi8KLSAgICAgICAgewotCSAgaW50IG9uZT0xOwotCSAgaWYgKHNldHNvY2tvcHQodC0+c29jaywgSVBQUk9UT19JUFY2LCBJUFY2X1Y2T05MWSwgKGNoYXIgKikmb25lLCBzaXplb2Yob25lKSkgIT0gMCkgewotCSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgImNvdWxkbid0IHNldCBJUFY2X1Y2T05MWSB0byAlZCBieXRlczogJXNcbiIsIG9uZSwgc3RyZXJyb3IoZXJybm8pKSk7Ci0JICB9IAotCX0KLSNlbmRpZgotCi0gICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0JCSAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIG5ldHNubXBfdWRwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF91ZHA2X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5sb2NhbCwgYWRkci0+c2luNl9hZGRyLnM2X2FkZHIsIDE2KTsKLSAgICAgICAgdC0+bG9jYWxbMTZdID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+bG9jYWxbMTddID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4MDBmZikgPj4gMDsKLSAgICAgICAgdC0+bG9jYWxfbGVuZ3RoID0gMTg7Ci0gICAgICAgIHQtPmRhdGEgPSBOVUxMOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IDA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudCBzZXNzaW9uLiAgU2F2ZSB0aGUgYWRkcmVzcyBpbiB0aGUKLSAgICAgICAgICogdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIGJ5IG5ldHNubXBfdWRwNl9zZW5kLgotICAgICAgICAgKi8KLQotICAgICAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdWRwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7Ci0gICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOwotICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdWRwNl9jbG9zZSh0KTsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOwotICAgICAgICB0LT5yZW1vdGVbMTZdID0gKGFkZHItPnNpbjZfcG9ydCAmIDB4ZmYwMCkgPj4gODsKLSAgICAgICAgdC0+cmVtb3RlWzE3XSA9IChhZGRyLT5zaW42X3BvcnQgJiAweDAwZmYpID4+IDA7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSAxODsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIDE2LWJpdCBsZW5ndGggZmllbGQsIDggYnl0ZSBVRFAgaGVhZGVyLCA0MCBieXRlIElQdjYgaGVhZGVyLiAgCi0gICAgICovCi0KLSAgICB0LT5tc2dNYXhTaXplID0gMHhmZmZmIC0gOCAtIDQwOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3VkcDZfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF91ZHA2X3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfdWRwNl9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF91ZHA2X2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotCi0vKgotICogTm90IGV4dGVybiBidXQgdXNlZCBmcm9tIGhlcmUgYW5kIHNubXBUQ1BJUHY2RG9tYWluLkMKLSAqLwotaW50Ci1uZXRzbm1wX3NvY2thZGRyX2luNl8yKHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIGNoYXIgICAgICAgICAgICpjcCA9IE5VTEwsICpwZWVybmFtZSA9IE5VTEw7Ci0gICAgY2hhciAgICAgICAgICAgIGRlYnVnX2FkZHJbSU5FVDZfQUREUlNUUkxFTl07Ci0jaWYgSEFWRV9HRVRBRERSSU5GTwotICAgIHN0cnVjdCBhZGRyaW5mbyAqYWRkcnMgPSBOVUxMOwotICAgIGludCAgICAgICAgICAgICBlcnI7Ci0jZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQotICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7Ci0gICAgaW50ICAgICAgICAgICAgIGVycjsKLSNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRQotICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7Ci0jZW5kaWYKLSAgICBpbnQgICAgICAgICAgICAgcG9ydG5vOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotCQkiYWRkciAlcCwgcGVlcm5hbWUgXCIlc1wiLCBkZWZhdWx0X3RhcmdldCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgYWRkciwgaW5wZWVybmFtZSA/IGlucGVlcm5hbWUgOiAiW05JTF0iLAotCQlkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIltOSUxdIikpOwotCi0gICAgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgYWRkci0+c2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICBhZGRyLT5zaW42X2FkZHIgPSBpbjZhZGRyX2FueTsKLSAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucygodV9zaG9ydClTTk1QX1BPUlQpOwotCi0gICAgewotICAgICAgaW50IHBvcnQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAotCQkJCSAgICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQpOwotICAgICAgaWYgKHBvcnQgIT0gMCkKLSAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydCk7Ci0gICAgICBlbHNlIGlmIChkZWZhdWx0X3RhcmdldCAhPSBOVUxMKQotCW5ldHNubXBfc29ja2FkZHJfaW42XzIoYWRkciwgZGVmYXVsdF90YXJnZXQsIE5VTEwpOwotICAgIH0KLQotICAgIGlmIChpbnBlZXJuYW1lICE9IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogRHVwbGljYXRlIHRoZSBwZWVybmFtZSBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQgdG8gbWFuayBhcm91bmQgd2l0aAotICAgICAgICAgKiBpdC4gIAotICAgICAgICAgKi8KLQotICAgICAgICBwZWVybmFtZSA9IHN0cmR1cChpbnBlZXJuYW1lKTsKLSAgICAgICAgaWYgKHBlZXJuYW1lID09IE5VTEwpIHsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgZm9yIChjcCA9IHBlZXJuYW1lOyAqY3AgJiYgaXNkaWdpdCgodW5zaWduZWQgY2hhcikgKmNwKTsgY3ArKyk7Ci0gICAgICAgIGlmICghKmNwICYmIGF0b2kocGVlcm5hbWUpICE9IDApIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBPa2F5LCBpdCBsb29rcyBsaWtlIEpVU1QgYSBwb3J0IG51bWJlci4gIAotICAgICAgICAgICAgICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAidG90YWxseSBudW1lcmljOiAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGF0b2kocGVlcm5hbWUpKSk7Ci0gICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucyhhdG9pKHBlZXJuYW1lKSk7Ci0gICAgICAgICAgICBnb3RvIHJlc29sdmVkOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2VlIGlmIGl0IGlzIGFuIElQdjYgYWRkcmVzcyBjb3ZlcmVkIHdpdGggc3F1YXJlIGJyYWNrZXRzLiBBbHNvIGNoZWNrCi0gICAgICAgICAqIGZvciBhbiBhcHBlbmRlZCA6cG9ydC4gIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKCpwZWVybmFtZSA9PSAnWycpIHsKLSAgICAgICAgICAgIGNwID0gc3RyY2hyKHBlZXJuYW1lLCAnXScpOwotICAgICAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKLQkgICAgICAvKgotCSAgICAgICAqIFNlZSBpZiBpdCBpcyBhbiBJUHY2IGxpbmstbG9jYWwgYWRkcmVzcyB3aXRoIGludGVyZmFjZQotCSAgICAgICAqIG5hbWUgYXMgPHpvbmVfaWQ+LCBsaWtlIGZlODA6OjEyMzQlZXRoMC4KLQkgICAgICAgKiBQbGVhc2UgcmVmZXIgdG8gdGhlIGludGVybmV0IGRyYWZ0LCBJUHY2IFNjb3BlZCBBZGRyZXNzIEFyY2hpdGVjdHVyZQotCSAgICAgICAqIGh0dHA6Ly93d3cuaWV0Zi5vcmcvaW50ZXJuZXQtZHJhZnRzL2RyYWZ0LWlldGYtaXBuZ3dnLXNjb3BpbmctYXJjaC0wNC50eHQKLQkgICAgICAgKgotCSAgICAgICAqLwotCSAgICAgICAgY2hhciAqc2NvcGVfaWQ7Ci0jaWZkZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAotCSAgICAgICAgdW5zaWduZWQgaW50IGlmX2luZGV4ID0gMDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICpjcCA9ICdcMCc7Ci0JCXNjb3BlX2lkID0gc3RyY2hyKHBlZXJuYW1lICsgMSwgJyUnKTsKLQkJaWYgKHNjb3BlX2lkICE9IE5VTEwpIHsKLQkJICAgICpzY29wZV9pZCA9ICdcMCc7Ci0jaWZkZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAotCQkgICAgaWZfaW5kZXggPSBpZl9uYW1ldG9pbmRleChzY29wZV9pZCArIDEpOwotI2VuZGlmCi0JCX0KLSAgICAgICAgICAgICAgICBpZiAoKihjcCArIDEpID09ICc6JykgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXRvaShjcCArIDIpICE9IDAgJiYKLSAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgcGVlcm5hbWUgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVB2NiBhZGRyZXNzIHdpdGggcG9ydCBzdWZmaXggOiVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaShjcCArIDIpKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGNwICsgMikpOwotI2lmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfc2NvcGVfaWQgPSBpZl9pbmRleDsKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXNvbHZlZDsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmV0X3B0b24KLSAgICAgICAgICAgICAgICAgICAgICAgIChBRl9JTkVUNiwgcGVlcm5hbWUgKyAxLAotICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVB2NiBhZGRyZXNzIHdpdGggc3F1YXJlIGJyYWNrZXRzXG4iKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwb3J0bm8gPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydG5vIDw9IDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydG5vID0gU05NUF9QT1JUOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMocG9ydG5vKTsKLSNpZiBkZWZpbmVkKEhBVkVfSUZfTkFNRVRPSU5ERVgpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQpCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7Ci0jZW5kaWYKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0JCWlmIChzY29wZV9pZCAhPSBOVUxMKSB7Ci0JCSAgKnNjb3BlX2lkID0gJyUnOwotCQl9Ci0JCSpjcCA9ICddJzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGNwID0gc3RycmNocihwZWVybmFtZSwgJzonKTsKLSAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKLQkgICAgY2hhciAqc2NvcGVfaWQ7Ci0jaWZkZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAotCSAgICB1bnNpZ25lZCBpbnQgaWZfaW5kZXggPSAwOwotI2VuZGlmCi0JICAgICpjcCA9ICdcMCc7Ci0JICAgIHNjb3BlX2lkID0gc3RyY2hyKHBlZXJuYW1lICsgMSwgJyUnKTsKLQkgICAgaWYgKHNjb3BlX2lkICE9IE5VTEwpIHsKLQkgICAgICAgICpzY29wZV9pZCA9ICdcMCc7Ci0jaWZkZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAotCSAgICAgICAgaWZfaW5kZXggPSBpZl9uYW1ldG9pbmRleChzY29wZV9pZCArIDEpOwotI2VuZGlmCi0JICAgIH0KLSAgICAgICAgICAgIGlmIChhdG9pKGNwICsgMSkgIT0gMCAmJgotICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgcGVlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUHY2IGFkZHJlc3Mgd2l0aCBwb3J0IHN1ZmZpeCA6JWRcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvaShjcCArIDEpKSk7Ci0gICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoYXRvaShjcCArIDEpKTsKLSNpZiBkZWZpbmVkKEhBVkVfSUZfTkFNRVRPSU5ERVgpICYmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQpCi0gICAgICAgICAgICAgICAgYWRkci0+c2luNl9zY29wZV9pZCA9IGlmX2luZGV4OwotI2VuZGlmCi0gICAgICAgICAgICAgICAgZ290byByZXNvbHZlZDsKLSAgICAgICAgICAgIH0KLQkgICAgaWYgKHNjb3BlX2lkICE9IE5VTEwpIHsKLQkgICAgICAqc2NvcGVfaWQgPSAnJSc7Ci0JICAgIH0KLSAgICAgICAgICAgICpjcCA9ICc6JzsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFNlZSBpZiBpdCBpcyBKVVNUIGFuIElQdjYgYWRkcmVzcy4gIAotICAgICAgICAgKi8KLSAgICAgICAgaWYgKGluZXRfcHRvbihBRl9JTkVUNiwgcGVlcm5hbWUsICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJqdXN0IElQdjYgYWRkcmVzc1xuIikpOwotICAgICAgICAgICAgZ290byByZXNvbHZlZDsKLSAgICAgICAgfQotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFdlbGwsIGl0IG11c3QgYmUgYSBob3N0bmFtZSB0aGVuLCBwb3NzaWJseSB3aXRoIGFuIGFwcGVuZGVkIDpwb3J0LgotICAgICAgICAgKiBTb3J0IHRoYXQgb3V0IGZpcnN0LiAgCi0gICAgICAgICAqLwotCi0gICAgICAgIGNwID0gc3RycmNocihwZWVybmFtZSwgJzonKTsKLSAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKLSAgICAgICAgICAgICpjcCA9ICdcMCc7Ci0gICAgICAgICAgICBpZiAoYXRvaShjcCArIDEpICE9IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSg/KSB3aXRoIHBvcnQgc3VmZml4IDolZFxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9pKGNwICsgMSkpKTsKLSAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucyhhdG9pKGNwICsgMSkpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIE5vIGlkZWEsIGxvb2tzIGJvZ3VzIGJ1dCB3ZSBtaWdodCBhcyB3ZWxsIHBhc3MgdGhlIGZ1bGwgdGhpbmcgdG8KLSAgICAgICAgICAgICAgICAgKiB0aGUgbmFtZSByZXNvbHZlciBiZWxvdy4gIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgICpjcCA9ICc6JzsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSg/KSB3aXRoIGVtYmVkZGVkICc6Jz9cbiIpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBGYWxsIHRocm91Z2guICAKLSAgICAgICAgICAgICAqLwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKHBlZXJuYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAiZW1wdHkgaG9zdG5hbWVcbiIpKTsKLSAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQotCi0jaWYgSEFWRV9HRVRBRERSSU5GTwotICAgICAgICB7Ci0gICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gaGludCA9IHsgMCB9OwotICAgICAgICAgICAgaGludC5haV9mbGFncyA9IDA7Ci0gICAgICAgICAgICBoaW50LmFpX2ZhbWlseSA9IFBGX0lORVQ2OwotICAgICAgICAgICAgaGludC5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07Ci0gICAgICAgICAgICBoaW50LmFpX3Byb3RvY29sID0gMDsKLQotICAgICAgICAgICAgZXJyID0gZ2V0YWRkcmluZm8ocGVlcm5hbWUsIE5VTEwsICZoaW50LCAmYWRkcnMpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlcnIgIT0gMCkgewotI2lmIEhBVkVfR0FJX1NUUkVSUk9SCi0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZ2V0YWRkcmluZm8oXCIlc1wiLCBOVUxMLCAuLi4pOiAlc1xuIiwgcGVlcm5hbWUsCi0gICAgICAgICAgICAgICAgICAgICBnYWlfc3RyZXJyb3IoZXJyKSk7Ci0jZWxzZQotICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImdldGFkZHJpbmZvKFwiJXNcIiwgTlVMTCwgLi4uKTogKGVycm9yICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgIHBlZXJuYW1lLCBlcnIpOwotI2VuZGlmCi0gICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIGlmIChhZGRycyAhPSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKLSAgICAgICAgbWVtY3B5KCZhZGRyLT5zaW42X2FkZHIsCi0gICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGFkZHJzLT5haV9hZGRyKS0+c2luNl9hZGRyLAotICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwotCQlmcmVlYWRkcmluZm8oYWRkcnMpOwotICAgICAgICB9Ci0JCWVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAiRmFpbGVkIHRvIHJlc29sdmUgSVB2NiBob3N0bmFtZVxuIikpOwotCQl9Ci0jZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQotICAgICAgICBocCA9IGdldGlwbm9kZWJ5bmFtZShwZWVybmFtZSwgQUZfSU5FVDYsIDAsICZlcnIpOwotICAgICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSA9ICVkKVxuIiwgZXJyKSk7Ci0gICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKLSAgICAgICAgbWVtY3B5KCYoYWRkci0+c2luNl9hZGRyKSwgaHAtPmhfYWRkciwgaHAtPmhfbGVuZ3RoKTsKLSNlbGlmIEhBVkVfR0VUSE9TVEJZTkFNRQotICAgICAgICBocCA9IGdldGhvc3RieW5hbWUocGVlcm5hbWUpOwotICAgICAgICBpZiAoaHAgPT0gTlVMTCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSlcbiIpKTsKLSAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVDYpIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAobm90IEFGX0lORVQ2ISlcbiIpKTsKLSAgICAgICAgICAgICAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7Ci0gICAgICAgICAgICAgICAgbWVtY3B5KCYoYWRkci0+c2luNl9hZGRyKSwgaHAtPmhfYWRkciwgaHAtPmhfbGVuZ3RoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkhBVkVfR0VUSE9TVEJZTkFNRSAqLwotICAgICAgICAvKgotICAgICAgICAgKiBUaGVyZSBpcyBubyBuYW1lIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUuICAKLSAgICAgICAgICovCi0gICAgICAgIHNubXBfbG9nKExPR19FUlIsCi0gICAgICAgICAgICAgICAgICJubyBnZXRhZGRyaW5mbygpL2dldGlwbm9kZWJ5bmFtZSgpL2dldGhvc3RieW5hbWUoKVxuIik7Ci0gICAgICAgIGZyZWUocGVlcm5hbWUpOwotICAgICAgICByZXR1cm4gMDsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypIQVZFX0dFVEhPU1RCWU5BTUUgKi8KLSAgICB9IGVsc2UgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjYiLCAiTlVMTCBwZWVybmFtZSIpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gIHJlc29sdmVkOgotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNiIsICJyZXR1cm4geyBBRl9JTkVUNiwgWyVzXTolaHUgfVxuIiwKLSAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLT5zaW42X2FkZHIsIGRlYnVnX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihkZWJ1Z19hZGRyKSksIG50b2hzKGFkZHItPnNpbjZfcG9ydCkpKTsKLSAgICBmcmVlKHBlZXJuYW1lKTsKLSAgICByZXR1cm4gMTsKLX0KLQotCi1pbnQKLW5ldHNubXBfc29ja2FkZHJfaW42KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsCi0gICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBpbnQgcmVtb3RlX3BvcnQpCi17Ci0gICAgY2hhciBidWZbc2l6ZW9mKHJlbW90ZV9wb3J0KSAqIDMgKyAyXTsKLSAgICBzcHJpbnRmKGJ1ZiwgIjoldSIsIHJlbW90ZV9wb3J0KTsKLSAgICByZXR1cm4gbmV0c25tcF9zb2NrYWRkcl9pbjZfMihhZGRyLCBpbnBlZXJuYW1lLCByZW1vdGVfcG9ydCA/IGJ1ZiA6IE5VTEwpOwotfQotCi0vKgotICogaW50Ci0gKiBpbmV0X21ha2VfbWFza19hZGRyKCBpbnQgcGYsIHZvaWQgKmRzdCwgaW50IG1hc2tsZW5ndGggKQotICogICAgICBjb252ZXJ0IGZyb20gYml0IGxlbmd0aCBzcGVjaWZpZWQgbWFza2xlbmd0aCB0byBuZXR3b3JrIGZvcm1hdCwgCi0gKiAgICAgIHdoaWNoIGZpbGxzIDEgZnJvbSB1bnRpbCBzcGVjaWZpZWQgYml0IGxlbmd0aC4KLSAqICAgICAgZHN0IGlzIHVzYWxseSB0aGUgc3RydWN0ZXIgb2Ygc29ja2FkZHJfaW4gb3Igc29ja2FkZHJfaW42LiAKLSAqICAgICAgbWFrZWxlbmd0aCBtdXN0IGJlIGFuIGludGVyZ2VyIGZyb20gMCB0byAzMiBpZiBwZiBpcyBQRl9JTkVULAotICogICAgICBvciBmcm9tIDAgdG8gMTI4IGlmIHBmIGlzIFBGX0lORVQ2LgotICogcmV0dXJuOgotICogICAgICAwIGlmIHRoZSBpbnB1dCBkYXRhLCBtYXNrbGVuZ3RoIHdhcyB2YWxpZCBmb3IgCi0gKiAgICAgIHRoZSBzcGVjaWZpZWQgcHJvdG9jb2wgZmFtaWx5LgotICogICAgICAtMSBpZiB0aGUgdGhlIGlucHV0IGRhdGEgd2Fzbid0IHZhbGlkLgotICovCi0KLWludAotaW5ldF9tYWtlX21hc2tfYWRkcihpbnQgcGYsIHZvaWQgKmRzdCwgaW50IG1hc2tsZW5ndGgpCi17Ci0KLSAgICB1bnNpZ25lZCBsb25nICAgTWFzayA9IDA7Ci0gICAgaW50ICAgICAgICAgICAgIG1hc2tCaXQgPSAweDgwMDAwMDAwTDsKLSAgICB1bnNpZ25lZCBjaGFyICAgbWFzayA9IDA7Ci0gICAgdW5zaWduZWQgY2hhciAgIG1hc2tiaXQgPSAweDgwTDsKLSAgICBpbnQgICAgICAgICAgICAgaSwgaiwgamo7Ci0KLQotICAgIHN3aXRjaCAocGYpIHsKLSAgICBjYXNlIFBGX0lORVQ6Ci0gICAgICAgIGlmIChtYXNrbGVuZ3RoIDwgMCB8fCBtYXNrbGVuZ3RoID4gMzIpCi0gICAgICAgICAgICByZXR1cm4gLTE7Ci0KLSAgICAgICAgKChzdHJ1Y3QgaW5fYWRkciAqKSBkc3QpLT5zX2FkZHIgPSAwOwotCi0gICAgICAgIHdoaWxlIChtYXNrbGVuZ3RoLS0pIHsKLSAgICAgICAgICAgIE1hc2sgfD0gbWFza0JpdDsKLSAgICAgICAgICAgIG1hc2tCaXQgPj49IDE7Ci0gICAgICAgIH0KLSAgICAgICAgKChzdHJ1Y3QgaW5fYWRkciAqKSBkc3QpLT5zX2FkZHIgPSBodG9ubChNYXNrKTsKLSAgICAgICAgYnJlYWs7Ci0KLSAgICBjYXNlIFBGX0lORVQ2OgotICAgICAgICBpZiAobWFza2xlbmd0aCA8IDAgfHwgbWFza2xlbmd0aCA+IDEyOCkKLSAgICAgICAgICAgIHJldHVybiAtMTsKLQotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBkc3QpLT5zNl9hZGRyW2ldKSkgPSAweDAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaiA9IChpbnQpIG1hc2tsZW5ndGggLyA4OwotICAgICAgICBqaiA9IG1hc2tsZW5ndGggJSA4OwotCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBqOyBpKyspIHsKLSAgICAgICAgICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIGRzdCktPnM2X2FkZHJbaV0pKSA9IDB4ZmY7Ci0gICAgICAgIH0KLSAgICAgICAgd2hpbGUgKGpqLS0pIHsKLSAgICAgICAgICAgIG1hc2sgfD0gbWFza2JpdDsKLSAgICAgICAgICAgIG1hc2tiaXQgPj49IDE7Ci0gICAgICAgIH0KLQotCWlmIChqIDwgc2l6ZW9mICgoKHN0cnVjdCBpbjZfYWRkciAqKSBkc3QpLT5zNl9hZGRyKSl7Ci0JICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIGRzdCktPnM2X2FkZHJbal0pKSA9IG1hc2s7Ci0JfQotCi0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAtMTsgICAgICAgICAgICAgIC8qIHVuc3VwcG9ydGVkIHByb3RvY29sIGZhbWlseSAqLwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIGludAotICogaW5ldF9hZGRyX2NvbXBsZW1lbnQoIGludCBwZiwgdm9pZCAqc3JjLCB2b2lkICpkc3QgKQotICogICAgICBjb252ZXJ0IGZyb20gc3JjIHRvIGRzdCwgd2hpY2ggYWxsIGJpdHMgCi0gKiAgICAgIGFyZSBiaXQtY29tcGxpbWVudCBvZiBzcmMuCi0gKiAgICAgIFNyYywgZHN0IGFyZSB1c3VzYWxseSBzb2NrYWRkcl9pbiBvciBzb2NrYWRkcl9pbjYuICAKLSAqIHJldHVybjoKLSAqICAgICAgMCBpZiB0aGUgaW5wdXQgZGF0YSBzcmMgYW5kIGRzdCBoYXZlIHRoZSBzYW1lIHNpemUKLSAqICAgICAgLTEgaWYgdGhlIHRoZSBpbnB1dCBkYXRhIHdhc24ndCB2YWxpZC4KLSAqLwotCi1pbnQKLWluZXRfYWRkcl9jb21wbGVtZW50KGludCBwZiwgdm9pZCAqc3JjLCB2b2lkICpkc3QpCi17Ci0KLSAgICBpbnQgICAgICAgICAgICAgaTsKLQotICAgIGlmIChzaXplb2Yoc3JjKSAhPSBzaXplb2YoZHN0KSkKLSAgICAgICAgcmV0dXJuIC0xOwotCi0gICAgc3dpdGNoIChwZikgewotICAgIGNhc2UgUEZfSU5FVDoKLSAgICAgICAgKChzdHJ1Y3QgaW5fYWRkciAqKSBkc3QpLT5zX2FkZHIgPQotICAgICAgICAgICAgfigoc3RydWN0IGluX2FkZHIgKikgc3JjKS0+c19hZGRyOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIFBGX0lORVQ2OgotICAgICAgICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgewotICAgICAgICAgICAgKCoodV9jaGFyICopICgmKChzdHJ1Y3QgaW42X2FkZHIgKikgZHN0KS0+czZfYWRkcltpXSkpID0KLSAgICAgICAgICAgICAgICAofigqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIHNyYyktPnM2X2FkZHJbaV0pKSkKLSAgICAgICAgICAgICAgICAmIDB4ZmY7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotLyoKLSAqIGludAotICogaW5ldF9hZGRyX2FuZCggaW50IHBmLCB2b2lkICpzcmMxLCB2b2lkICpzcmMyLCB2b2lkICpkc3QpIAotICogICAgICB0YWtlIEFORCBvcGVyYXRpb24gb24gc3JjMSBhbmQgc3JjMiwgYW5kIG91dHB1dCB0aGUgcmVzdWx0IHRvIGRzdC4KLSAqICAgICAgU3JjMSwgc3JjMiwgYW5kIGRzdCBhcmUgdXN1c2FsbHkgc29ja2FkZHJfaW4gb3Igc29ja2FkZHJfaW42LiAgCi0gKiByZXR1cm46Ci0gKiAgICAgIDAgaWYgdGhlIGlucHV0IGRhdGEgc3JjIGFuZCBkc3QgaGF2ZSB0aGUgc2FtZSBzaXplCi0gKiAgICAgIC0xIGlmIHRoZSB0aGUgaW5wdXQgZGF0YSBhcmUgbm90IHRoZSBzYW1lIHNpemUKLSAqLwotCi1pbnQKLWluZXRfYWRkcl9hbmQoaW50IHBmLCB2b2lkICpzcmMxLCB2b2lkICpzcmMyLCB2b2lkICpkc3QpCi17Ci0gICAgaW50ICAgICAgICAgICAgIGk7Ci0KLSAgICBpZiAoc2l6ZW9mKHNyYzEpICE9IHNpemVvZihzcmMyKSB8fCBzaXplb2Yoc3JjMikgIT0gc2l6ZW9mKGRzdCkpCi0gICAgICAgIHJldHVybiAtMTsKLQotICAgIHN3aXRjaCAocGYpIHsKLSAgICBjYXNlIFBGX0lORVQ6Ci0gICAgICAgICgoc3RydWN0IGluX2FkZHIgKikgZHN0KS0+c19hZGRyID0KLSAgICAgICAgICAgICgoc3RydWN0IGluX2FkZHIgKikgc3JjMSktPnNfYWRkciAmICgoc3RydWN0IGluX2FkZHIgKikgc3JjMiktPgotICAgICAgICAgICAgc19hZGRyOwotICAgICAgICBicmVhazsKLQotICAgIGNhc2UgUEZfSU5FVDY6Ci0gICAgICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7Ci0gICAgICAgICAgICAoKih1X2NoYXIgKikgKCYoKHN0cnVjdCBpbjZfYWRkciAqKSBkc3QpLT5zNl9hZGRyW2ldKSkgPQotICAgICAgICAgICAgICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIHNyYzEpLT5zNl9hZGRyW2ldKSkgJgotICAgICAgICAgICAgICAgICgqKHVfY2hhciAqKSAoJigoc3RydWN0IGluNl9hZGRyICopIHNyYzIpLT5zNl9hZGRyW2ldKSk7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gMDsKLX0KLQotCi0vKgotICogaW50Ci0gKiBpbmV0X2FkZHJzX2NvbnNpc3RlbmNlIChpbnQgcGYsIHZvaWQgKm5ldCwgdm9pZCAqbWFzayApIAotICogICAgICBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiB0aGUgbmV0d29yayBhZGRyZXNzIG5ldCBpcyBjb25zaXN0ZW50Ci0gKiAgICAgIHdpdGggdGhlIG5ldG1hc2sgYWRkcmVzcywgbWFzay4KLSAqICAgICAgTmV0IGFuZCBtYXNrIGFyZSB1c3VzYWxseSBzb2NrYWRkcl9pbiBvciBzb2NrYWRkcl9pbjYuICAKLSAqIE5vdGU6Ci0gKiAgICAgIE11c3Qgc3BlZmlleSBwcm90b2NvbCBmYW1pbHkgaW4gcGYuCi0gKiByZXR1cm46Ci0gKiAgICAgIDAgaWYgdGhlcmUgaXMgbm8gY29uc2lzdGVuY2Ugd2l0aCBhZGRyZXNzICJuZXQiIGFuZCAibWFzayIuCi0gKiAgICAgIC0xIGlmIG5ldHdvcmsgYWRkcmVzcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBuZXRtYXNrIGFkZHJlc3MsIGZvciAKLSAqICAgICAgaW5zdGFuY2UsIG5ldHdvcmsgYWRkcmVzcyBpcyAxOTIuMTY4LjAuMTI4IGluIHNwaXRlIG9mIG5ldG1hc2ssIAotICogICAgICB3aGljaCBpcyAyNTUuMjU1LjI1NS4wLiAKLSAqICAgICAgVGhlIGNhc2UgdGhhdCB0aGUgc2l6ZSBvZiBuZXQgYW5kIG1hc2sgYXJlIGRpZmZlcmVudCBhbHNvIHJldHVybnMgLTEuCi0gKi8KLQotaW50Ci1pbmV0X2FkZHJzX2NvbnNpc3RlbmNlKGludCBwZiwgdm9pZCAqbmV0LCB2b2lkICptYXNrKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqdG1wLCAqZHN0OwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnRtcDYsICpkc3Q2OwotICAgIGludCAgICAgICAgICAgICByZXQ7Ci0KLSAgICBzd2l0Y2ggKHBmKSB7Ci0gICAgY2FzZSBQRl9JTkVUOgotICAgICAgICB0bXAgPSAoc3RydWN0IHNvY2thZGRyX2luICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0gICAgICAgIGlmICghdG1wKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJSZXNvdXJjZSBmYWlsdXJlIGluIGluZXRfYWRkcl9jb25zaXN0ZW5jZSgpIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHRtcCwgMCwgc2l6ZW9mKCp0bXApKTsKLSAgICAgICAgdG1wLT5zaW5fZmFtaWx5ID0gUEZfSU5FVDsKLSAgICAgICAgaWYgKGluZXRfYWRkcl9jb21wbGVtZW50Ci0gICAgICAgICAgICAoUEZfSU5FVCwgKHN0cnVjdCBpbl9hZGRyICopIG1hc2ssICZ0bXAtPnNpbl9hZGRyKSAhPSAwKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJGYWlsIGluIGZ1bmN0aW9uIG9mIGluZXRfYWRkcl9jb21wbGVtZW50KCkiKTsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBkc3QgPSAoc3RydWN0IHNvY2thZGRyX2luICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSk7Ci0gICAgICAgIGlmICghZHN0KSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJSZXNvdXJjZSBmYWlsdXJlIGluIGluZXRfYWRkcl9jb25zaXN0ZW5jZSgpIik7Ci0gICAgICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KGRzdCwgMCwgc2l6ZW9mKCpkc3QpKTsKLSAgICAgICAgZHN0LT5zaW5fZmFtaWx5ID0gUEZfSU5FVDsKLSAgICAgICAgaWYgKGluZXRfYWRkcl9hbmQKLSAgICAgICAgICAgIChQRl9JTkVULCAoc3RydWN0IGluX2FkZHIgKikgbmV0LCAmdG1wLT5zaW5fYWRkciwKLSAgICAgICAgICAgICAmZHN0LT5zaW5fYWRkcikgIT0gMCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiRmFpbCBpbiBmdW5jdGlvbiBvZiBpbmV0X2FkZHJfYW5kKCkiKTsKLSAgICAgICAgICAgIGZyZWUoZHN0KTsKLSAgICAgICAgICAgIGZyZWUodG1wKTsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICByZXQgPSAoKGRzdC0+c2luX2FkZHIuc19hZGRyID09IElOQUREUl9BTlkpID8gMCA6IC0xKTsKLSAgICAgICAgZnJlZShkc3QpOwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgUEZfSU5FVDY6Ci0gICAgICAgIHRtcDYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKLSAgICAgICAgaWYgKCF0bXA2KSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJSZXNvdXJjZSBmYWlsdXJlIGluIGluZXRfYWRkcl9jb25zaXN0ZW5jZSgpIik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KHRtcDYsIDAsIHNpemVvZigqdG1wNikpOwotICAgICAgICB0bXA2LT5zaW42X2ZhbWlseSA9IFBGX0lORVQ2OwotICAgICAgICBpZiAoaW5ldF9hZGRyX2NvbXBsZW1lbnQKLSAgICAgICAgICAgIChQRl9JTkVUNiwgKHN0cnVjdCBpbjZfYWRkciAqKSBtYXNrLCAmdG1wNi0+c2luNl9hZGRyKSAhPSAwKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJGYWlsIGluIGZ1bmN0aW9uIG9mIGluZXRfYWRkcl9jb21wbGVtZW50KCkiKTsKLSAgICAgICAgICAgIGZyZWUodG1wNik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgZHN0NiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBpZiAoIWRzdDYpIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIlJlc291cmNlIGZhaWx1cmUgaW4gaW5ldF9hZGRyX2NvbnNpc3RlbmNlKCkiKTsKLSAgICAgICAgICAgIGZyZWUodG1wNik7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgbWVtc2V0KGRzdDYsIDAsIHNpemVvZigqZHN0NikpOwotICAgICAgICBkc3Q2LT5zaW42X2ZhbWlseSA9IFBGX0lORVQ2OwotICAgICAgICBpZiAoaW5ldF9hZGRyX2FuZAotICAgICAgICAgICAgKFBGX0lORVQ2LCAoc3RydWN0IGluNl9hZGRyICopIG5ldCwgJnRtcDYtPnNpbjZfYWRkciwKLSAgICAgICAgICAgICAmZHN0Ni0+c2luNl9hZGRyKSkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiRmFpbCBpbiBmdW5jdGlvbiBvZiBpbmV0X2FkZHJfYW5kKCkiKTsKLSAgICAgICAgICAgIGZyZWUoZHN0Nik7Ci0gICAgICAgICAgICBmcmVlKHRtcDYpOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHJldCA9IChJTjZfSVNfQUREUl9VTlNQRUNJRklFRCgmZHN0Ni0+c2luNl9hZGRyKSA9PSAxID8gMCA6IC0xKTsKLSAgICAgICAgZnJlZShkc3Q2KTsKLSAgICAgICAgZnJlZSh0bXA2KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gcmV0OwotfQotCi0vKgotICogaW50Ci0gKiBtYXNrZWRfYWRkcmVzc19hcmVfZXF1YWwgKHBmLCBmcm9tLCBtYXNrLCBuZXR3b3JrKSAKLSAqICAgICAgVGhpcyBmdW5jdGlvbiB0YWtlcyBBTkQgb3BlcmF0aW9uIG9uIGFkZHJlc3MgImZyb20iIGFuZCAibWFzayIsCi0gKiAgICAgIGFuZCBjaGVjayB0aGUgcmVzdWx0IGlzIGVxdWFsIHRvIGFkZHJlc3MgIm5ldHdvcmsiLiAKLSAqICAgICAgRnJvbSwgbmV0IGFuZCBtYXNrIGFyZSB1c3VzYWxseSBzb2NrYWRkcl9pbiBvciBzb2NrYWRkcl9pbjYuICAKLSAqIE5vdGU6Ci0gKiAgICAgIE11c3Qgc3BlZmlleSBwcm90b2NvbCBmYW1pbHkgaW4gcGYuCi0gKiByZXR1cm46Ci0gKiAgICAgIDAgaWYgYWRkcmVzcyAiZnJvbSIgbWFza2VkIGJ5IGFkZHJlc3MgIm1hc2siIGlzIGVxYXVsIHRvIAotICogICAgICBhZGRyZXNzICJuZXR3b3JrIi4gCi0gKiAgICAgIC0xIGlmIGFkZHJlc3MgImZyb20iIG1hc2tlZCBieSBhZGRyZXNzICJtYXNrIiBpc24ndCBlcWF1bCB0byAKLSAqICAgICAgYWRkcmVzcyAibmV0d29yayIuIEZvciBpbnN0YW5jZSwgYWRkcmVzcyAiZnJvbSIgaXMgCi0gKiAgICAgICAxOTIuMTY4LjAuMTI5IGFuZCAibWFzayIgaXMgMjU1LjI1NS4yNTUuMTI4LiBUaGVuLCBtYXNrZWQgCi0gKiAgICAgIGFkZHJlc3MgaXMgMTkyLjE2OC4wLjEyOC4gSWYgYWRkcmVzcyAibmV0d29yayIgaXMgMTkyLjE2OC4wLjEyOCwKLSAqICAgICAgcmV0dXJuIDAsIG90aGVyd2lzZSAtMS4KLSAqICAgICAgQWxzbyByZXR1bm4gLTEgaWYgZWFjaCBhZGRyZXNzIGZhbWlseSBvZiBmcm9tLCBtYXNrLCBuZXR3b3JrCi0gKiAgICAgIGlzbid0IHRoZSBzYW1lLgotICovCi0KLWludAotbWFza2VkX2FkZHJlc3NfYXJlX2VxdWFsKGludCBhZiwgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKmZyb20sCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKm1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKm5ldHdvcmspCi17Ci0KLSAgICBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSBzczsKLSAgICBtZW1zZXQoJnNzLCAwLCBzaXplb2Yoc3MpKTsKLQotICAgIHN3aXRjaCAoYWYpIHsKLSAgICBjYXNlIFBGX0lORVQ6Ci0gICAgICAgIGlmIChtYXNrLT5TU19GQU1JTFkgIT0gUEZfSU5FVCB8fCBuZXR3b3JrLT5TU19GQU1JTFkgIT0gUEZfSU5FVCkgewotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHNzLlNTX0ZBTUlMWSA9IFBGX0lORVQ7Ci0gICAgICAgIGluZXRfYWRkcl9hbmQoUEZfSU5FVCwKLSAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgZnJvbSktPnNpbl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSBtYXNrKS0+c2luX2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopICZzcyktPnNpbl9hZGRyKTsKLSAgICAgICAgaWYgKCgoc3RydWN0IHNvY2thZGRyX2luICopICZzcyktPnNpbl9hZGRyLnNfYWRkciA9PQotICAgICAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgbmV0d29yayktPnNpbl9hZGRyLnNfYWRkcikgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBQRl9JTkVUNjoKLSAgICAgICAgaWYgKG1hc2stPlNTX0ZBTUlMWSAhPSBQRl9JTkVUNiB8fCBuZXR3b3JrLT5TU19GQU1JTFkgIT0gUEZfSU5FVDYpIHsKLSAgICAgICAgICAgIHJldHVybiAtMTsKLSAgICAgICAgfQotICAgICAgICBzcy5TU19GQU1JTFkgPSBQRl9JTkVUNjsKLSAgICAgICAgaW5ldF9hZGRyX2FuZChQRl9JTkVUNiwKLSAgICAgICAgICAgICAgICAgICAgICAmKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGZyb20pLT5zaW42X2FkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtYXNrKS0+c2luNl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJnNzKS0+c2luNl9hZGRyKTsKLSNpZm5kZWYgSU42X0FSRV9BRERSX0VRVUFMCi0jZGVmaW5lIElONl9BUkVfQUREUl9FUVVBTChhLGIpIElONl9BRERSX0VRVUFMKGEsYikKLSNlbmRpZgotICAgICAgICBpZiAoSU42X0FSRV9BRERSX0VRVUFMKCYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgJnNzKS0+c2luNl9hZGRyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYoKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgbmV0d29yayktPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpbjZfYWRkcikgPT0gMSkgewotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIH0KLX0KLQotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotLyoKLSAqIFRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHByb3ZpZGUgdGhlICJjb20yc2VjNiIgY29uZmlndXJhdGlvbiB0b2tlbgotICogZnVuY3Rpb25hbGl0eSBmb3IgY29tcGF0aWJpbGl0eS4gIAotICovCi0KLSNkZWZpbmUgRVhBTVBMRV9ORVRXT1JLICAgICAgICJORVRXT1JLIgotI2RlZmluZSBFWEFNUExFX0NPTU1VTklUWSAgICAgIkNPTU1VTklUWSIKLQotdHlwZWRlZiBzdHJ1Y3QgX2NvbTJTZWM2RW50cnkgewotICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU5dOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgbmV0d29yazsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG1hc2s7Ci0gICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIHN0cnVjdCBfY29tMlNlYzZFbnRyeSAqbmV4dDsKLX0gY29tMlNlYzZFbnRyeTsKLQotY29tMlNlYzZFbnRyeSAgKmNvbTJTZWM2TGlzdCA9IE5VTEwsICpjb20yU2VjNkxpc3RMYXN0ID0gTlVMTDsKLQotCi12b2lkCi1tZW1tb3ZlX2NvbTJTZWM2RW50cnkoY29tMlNlYzZFbnRyeSAqIGMsCi0gICAgICAgICAgICAgICAgICAgICAgY2hhciAqc2VjTmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb21tdW5pdHksCi0gICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyX2luNiBuZXQsIHN0cnVjdCBzb2NrYWRkcl9pbjYgbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICBjaGFyICpjb250ZXh0TmFtZSkKLXsKLSAgICBzbnByaW50ZihjLT5zZWNOYW1lLCBzdHJsZW4oc2VjTmFtZSkgKyAxLCAiJXMiLCBzZWNOYW1lKTsKLSAgICBzbnByaW50ZihjLT5jb250ZXh0TmFtZSwgc3RybGVuKGNvbnRleHROYW1lKSArIDEsICIlcyIsIGNvbnRleHROYW1lKTsKLSAgICBzbnByaW50ZihjLT5jb21tdW5pdHksIHN0cmxlbihjb21tdW5pdHkpICsgMSwgIiVzIiwgY29tbXVuaXR5KTsKLSAgICBtZW1tb3ZlKCZjLT5uZXR3b3JrLCAmbmV0LCBzaXplb2YobmV0KSk7Ci0gICAgbWVtbW92ZSgmYy0+bWFzaywgJm1hc2ssIHNpemVvZihtYXNrKSk7Ci0gICAgYy0+bmV4dCA9IE5VTEw7Ci19Ci0KLQotI2lmbmRlZiBJUFY2X1NUUklOR19MRU4KLSNkZWZpbmUgSVBWNl9TVFJJTkdfTEVOIDU1Ci0jZW5kaWYKLQotdm9pZAotbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSkKLXsKLSAgICBjaGFyICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOXTsKLSAgICBjaGFyICAgICAgICAgICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIHNvdXJjZVtJUFY2X1NUUklOR19MRU5dOwotICAgIGNoYXIgICAgICAgICAgICpjcCA9IE5VTEwsICpzdHJuZXR3b3JrID0gTlVMTCwgKnN0cm1hc2sgPSBOVUxMOwotICAgIGNvbTJTZWM2RW50cnkgICplID0gTlVMTDsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IG5ldCwgbWFzazsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gdG1wOwotCi0gICAgbWVtc2V0KCZuZXQsIDAsIHNpemVvZihuZXQpKTsKLSAgICBtZW1zZXQoJm1hc2ssIDAsIHNpemVvZihtYXNrKSk7Ci0gICAgbWVtc2V0KCZ0bXAsIDAsIHNpemVvZih0bXApKTsKLSAgICBuZXQuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKLSAgICBtYXNrLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgdG1wLnNpbl9mYW1pbHkgPSBBRl9JTkVUOwotCi0KLSAgICAvKgotICAgICAqIEdldCBzZWN1cml0eSwgc291cmNlIGFkZHJlc3MvbmV0bWFzayBhbmQgY29tbXVuaXR5IHN0cmluZ3MuICAKLSAgICAgKi8KLSAgICBjcCA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOwotICAgIGlmIChzdHJjbXAoc2VjTmFtZSwgIi1DbiIpID09IDApIHsKLSAgICAgICAgaWYgKCFjcCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY3AgPSBjb3B5X253b3JkKCBjcCwgY29udGV4dE5hbWUsIHNpemVvZihjb250ZXh0TmFtZSkpOwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbnRleHROYW1lWzBdID0gJ1wwJzsKLSAgICB9Ci0gICAgaWYgKHNlY05hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIE5BTUUgcGFyYW1ldGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihzZWNOYW1lKSA+IChWQUNNU1RSSU5HTEVOIC0gMSkpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigic2VjdXJpdHkgbmFtZSB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIGNwID0gY29weV9ud29yZCggY3AsIHNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpOwotICAgIGlmIChzb3VyY2VbMF0gPT0gJ1wwJykgewotICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIFNPVVJDRSBwYXJhbWV0ZXIiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybmNtcChzb3VyY2UsIEVYQU1QTEVfTkVUV09SSywgc3RybGVuKEVYQU1QTEVfTkVUV09SSykpID09Ci0gICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIE5FVFdPUksgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcCA9IGNvcHlfbndvcmQoIGNwLCBjb21tdW5pdHksIHNpemVvZihjb21tdW5pdHkpKTsKLSAgICBpZiAoY29tbXVuaXR5WzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZQotICAgICAgICBpZiAoc3RybmNtcAotICAgICAgICAgICAgKGNvbW11bml0eSwgRVhBTVBMRV9DT01NVU5JVFksIHN0cmxlbihFWEFNUExFX0NPTU1VTklUWSkpCi0gICAgICAgICAgICA9PSAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oY29tbXVuaXR5KSA+IChDT01NVU5JVFlfTUFYX0xFTiAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbW11bml0eSBuYW1lIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFByb2Nlc3MgdGhlIHNvdXJjZSBhZGRyZXNzL25ldG1hc2sgc3RyaW5nLiAgCi0gICAgICovCi0gICAgY3AgPSBzdHJjaHIoc291cmNlLCAnLycpOwotICAgIGlmIChjcCAhPSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIE1hc2sgZ2l2ZW4uICAKLSAgICAgICAgICovCi0gICAgICAgICpjcCA9ICdcMCc7Ci0gICAgICAgIHN0cm1hc2sgPSBjcCArIDE7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBEZWFsIHdpdGggdGhlIG5ldHdvcmsgcGFydCBmaXJzdC4gIAotICAgICAqLwotICAgIGlmICgoc3RyY21wKHNvdXJjZSwgImRlZmF1bHQiKSA9PSAwKSB8fCAoc3RyY21wKHNvdXJjZSwgIjo6IikgPT0gMCkpIHsKLSAgICAgICAgaWYgKChzdHJuZXR3b3JrID0gc3RyZHVwKCIwOjowIikpICE9IE5VTEwpCi0JewotCSAgICBpZiAoKHN0cm1hc2sgPSBzdHJkdXAoIjA6OjAiKSkgIT0gTlVMTCkKLQkgICAgewotCQotCQlpbmV0X3B0b24oQUZfSU5FVDYsIHN0cm5ldHdvcmssICZuZXQuc2luNl9hZGRyKTsKLQkJaW5ldF9wdG9uKEFGX0lORVQ2LCBzdHJtYXNrLCAmbWFzay5zaW42X2FkZHIpOwotCQkKLQkJZSA9IChjb20yU2VjNkVudHJ5ICopIG1hbGxvYyhzaXplb2YoY29tMlNlYzZFbnRyeSkpOwotCQlpZiAoZSAhPSBOVUxMKSB7Ci0JCSAgICBtZW1tb3ZlX2NvbTJTZWM2RW50cnkoZSwgc2VjTmFtZSwgY29tbXVuaXR5LCBuZXQsIG1hc2ssIGNvbnRleHROYW1lKTsKLQkJICAgIGlmIChjb20yU2VjNkxpc3RMYXN0ICE9IE5VTEwpIHsKLQkJCWNvbTJTZWM2TGlzdExhc3QtPm5leHQgPSBlOwotCQkJY29tMlNlYzZMaXN0TGFzdCA9IGU7Ci0JCSAgICB9IGVsc2UgewotCQkJY29tMlNlYzZMaXN0TGFzdCA9IGNvbTJTZWM2TGlzdCA9IGU7Ci0JCSAgICB9Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgICBjb25maWdfcGVycm9yICgibWVtb3J5IGVycm9yIik7Ci0JCX0KLQkJZnJlZSAoc3RybWFzayk7Ci0JICAgIH0KLQkgICAgZWxzZSB7Ci0JCURFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkiLAotCQkJICAgICJDb3VsZG4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5XG4iKSk7Ci0JICAgIH0KLQkgICAgZnJlZSAoc3RybmV0d29yayk7Ci0JfQotCWVsc2UgewotCSAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5IiwKLQkJCSJDb3VsZG4ndCBhbGxvY2F0ZSBlbm91Z2ggbWVtb3J5XG4iKSk7Ci0JfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRyeSBpbnRlcnByZXRpbmcgYXMgSVB2NiBhZGRyZXNzLiAgCi0gICAgICAgICAqLwotICAgICAgICBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBzb3VyY2UsICZuZXQuc2luNl9hZGRyKSA9PSAxKSB7Ci0gICAgICAgICAgICBpZiAoc3RybWFzayA9PSBOVUxMIHx8ICpzdHJtYXNrID09ICdcMCcpIHsKLSAgICAgICAgICAgICAgICBpbmV0X21ha2VfbWFza19hZGRyKFBGX0lORVQ2LCAmbWFzay5zaW42X2FkZHIsIDEyOCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChzdHJjaHIoc3RybWFzaywgJzonKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoaW5ldF9wdG9uKFBGX0lORVQ2LCBzdHJtYXNrLCAmbmV0LnNpbjZfYWRkcikgIT0gMSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiYmFkIG1hc2siKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpbmV0X21ha2VfbWFza19hZGRyCi0gICAgICAgICAgICAgICAgICAgICAgICAoUEZfSU5FVDYsICZtYXNrLnNpbjZfYWRkciwgYXRvaShzdHJtYXNrKSkgIT0gMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiYmFkIG1hc2siKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENoZWNrIHRoYXQgdGhlIG5ldHdvcmsgYW5kIG1hc2sgYXJlIGNvbnNpc3RlbnQuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgaWYgKGluZXRfYWRkcnNfY29uc2lzdGVuY2UKLSAgICAgICAgICAgICAgICAoUEZfSU5FVDYsICZuZXQuc2luNl9hZGRyLCAmbWFzay5zaW42X2FkZHIpICE9IDApIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJzb3VyY2UvbWFzayBtaXNtYXRjaCIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZSA9IChjb20yU2VjNkVudHJ5ICopIG1hbGxvYyhzaXplb2YoY29tMlNlYzZFbnRyeSkpOwotICAgICAgICAgICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1lbW9yeSBlcnJvciIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIEV2ZXJ5dGhpbmcgaXMgb2theS4gIENvcHkgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZSBhbGxvY2F0ZWQKLSAgICAgICAgICAgICAqIGFib3ZlIGFuZCBhZGQgaXQgdG8gRU5EIG9mIHRoZSBsaXN0LiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGlmIChzdHJtYXNrICE9IE5VTEwgJiYgc3RybmV0d29yayAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIjxcIiVzXCIsICVzLyVzPiA9PiBcIiVzXCJcbiIsIGNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJuZXR3b3JrLCBzdHJtYXNrLCBzZWNOYW1lKSk7Ci0gICAgICAgICAgICAgICAgZnJlZShzdHJtYXNrKTsKLSAgICAgICAgICAgICAgICBmcmVlKHN0cm5ldHdvcmspOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQ291bGRuJ3QgYWxsb2NhdGUgZW5vdWdoIG1lbW9yeVxuIikpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgbWVtbW92ZV9jb20yU2VjNkVudHJ5KGUsIHNlY05hbWUsIGNvbW11bml0eSwgbmV0LCBtYXNrLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lKTsKLSAgICAgICAgICAgIGlmIChjb20yU2VjNkxpc3RMYXN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0LT5uZXh0ID0gZTsKLSAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0ID0gZTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdCA9IGNvbTJTZWM2TGlzdCA9IGU7Ci0gICAgICAgICAgICB9Ci0KLSNpZiBIQVZFX0dFVEFERFJJTkZPCi0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBOb3BlLCBNdXN0IGJlIGEgaG9zdG5hbWUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWksICpyZXM7Ci0gICAgICAgICAgICBjaGFyICAgICAgICAgICAgaGJ1ZltOSV9NQVhIT1NUXTsKLSAgICAgICAgICAgIGludCAgICAgICAgICAgICBnYWlfZXJyb3I7Ci0KLSAgICAgICAgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotICAgICAgICAgICAgaGludHMuYWlfZmFtaWx5ID0gUEZfSU5FVDY7Ci0gICAgICAgICAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07Ci0gICAgICAgICAgICBpZiAoKGdhaV9lcnJvciA9IGdldGFkZHJpbmZvKHNvdXJjZSwgTlVMTCwgJmhpbnRzLCAmcmVzKSkgIT0gMCkgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoZ2FpX3N0cmVycm9yKGdhaV9lcnJvcikpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZm9yIChhaSA9IHJlczsgYWkgIT0gTlVMTDsgYWkgPSBhaS0+YWlfbmV4dCkgewotICAgICAgICAgICAgICAgIGlmIChnZXRuYW1laW5mbwotICAgICAgICAgICAgICAgICAgICAoYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLCBoYnVmLCBzaXplb2YoaGJ1ZiksIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAwLCBOSV9OVU1FUklDSE9TVCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiZ2V0bmFtZWluZm8gZmFpbGVkIik7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG1lbW1vdmUoJm5ldCwgYWktPmFpX2FkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7Ci0gICAgICAgICAgICAgICAgaW5ldF9tYWtlX21hc2tfYWRkcihQRl9JTkVUNiwgJm1hc2suc2luNl9hZGRyLCAxMjgpOwotCi0gICAgICAgICAgICAgICAgZSA9IChjb20yU2VjNkVudHJ5ICopIG1hbGxvYyhzaXplb2YoY29tMlNlYzZFbnRyeSkpOwotICAgICAgICAgICAgICAgIGlmIChlID09IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvKgotICAgICAgICAgICAgICAgICAqIEV2ZXJ5dGhpbmcgaXMgb2theS4gIENvcHkgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZSBhbGxvY2F0ZWQKLSAgICAgICAgICAgICAgICAgKiBhYm92ZSBhbmQgYWRkIGl0IHRvIEVORCBvZiB0aGUgbGlzdC4gIAotICAgICAgICAgICAgICAgICAqLwotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8XCIlc1wiLCAlcz4gPT4gXCIlc1wiXG4iLCBjb21tdW5pdHksIGhidWYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjTmFtZSkpOwotICAgICAgICAgICAgICAgIG1lbW1vdmVfY29tMlNlYzZFbnRyeShlLCBzZWNOYW1lLCBjb21tdW5pdHksIG5ldCwgbWFzaywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGV4dE5hbWUpOwotICAgICAgICAgICAgICAgIGlmIChjb20yU2VjNkxpc3RMYXN0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0TGFzdC0+bmV4dCA9IGU7Ci0gICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QgPSBlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QgPSBjb20yU2VjNkxpc3QgPSBlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChyZXMgIT0gTlVMTCkKLSAgICAgICAgICAgICAgICBmcmVlYWRkcmluZm8ocmVzKTsKLQotI2VuZGlmIC8qIEhBVkVfR0VUQUREUklORk8gKi8KLQotICAgICAgICB9Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGZyZWUoc3RybmV0d29yayk7IAotICAgICAgICAgKi8KLSAgICB9Ci19Ci0KLXZvaWQKLW5ldHNubXBfdWRwNl9jb20yU2VjNkxpc3RfZnJlZSh2b2lkKQotewotICAgIGNvbTJTZWM2RW50cnkgICplID0gY29tMlNlYzZMaXN0OwotICAgIHdoaWxlIChlICE9IE5VTEwpIHsKLSAgICAgICAgY29tMlNlYzZFbnRyeSAgKnRtcCA9IGU7Ci0gICAgICAgIGUgPSBlLT5uZXh0OwotICAgICAgICBmcmVlKHRtcCk7Ci0gICAgfQotICAgIGNvbTJTZWM2TGlzdCA9IGNvbTJTZWM2TGlzdExhc3QgPSBOVUxMOwotfQotCi0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLQotdm9pZAotbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKLXsKLSNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKLSAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImNvbTJzZWM2IiwgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcDZfY29tMlNlYzZMaXN0X2ZyZWUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbLUNuIENPTlRFWFRdIHNlY05hbWUgSVB2Ni1uZXR3b3JrLWFkZHJlc3NbL25ldG1hc2tdIGNvbW11bml0eSIpOwotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi19Ci0KLQotCi0jaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0vKgotICogUmV0dXJuIDAgaWYgdGhlcmUgYXJlIG5vIGNvbTJzZWMgZW50cmllcywgb3IgcmV0dXJuIDEgaWYgdGhlcmUgQVJFIGNvbTJzZWMgCi0gKiBlbnRyaWVzLiAgT24gcmV0dXJuLCBpZiBhIGNvbTJzZWMgZW50cnkgbWF0Y2hlZCB0aGUgcGFzc2VkIHBhcmFtZXRlcnMsCi0gKiB0aGVuICpzZWNOYW1lIHBvaW50cyBhdCB0aGUgYXBwcm9wcmlhdGUgc2VjdXJpdHkgbmFtZSwgb3IgaXMgTlVMTCBpZiB0aGUKLSAqIHBhcmFtZXRlcnMgZGlkIG5vdCBtYXRjaCBhbnkgY29tMnNlYyBlbnRyeS4gIAotICovCi0KLWludAotbmV0c25tcF91ZHA2X2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGludCBjb21tdW5pdHlfbGVuLCBjaGFyICoqc2VjTmFtZSwgY2hhciAqKmNvbnRleHROYW1lKQotewotICAgIGNvbTJTZWM2RW50cnkgICpjOwotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKmZyb20gPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBvcGFxdWU7Ci0gICAgY2hhciAgICAgICAgICAgKnp0Y29tbXVuaXR5ID0gTlVMTDsKLSAgICBjaGFyICAgICAgICAgICAgc3RyNltJTkVUNl9BRERSU1RSTEVOXTsKLQotICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgKnNlY05hbWUgPSBOVUxMOyAgLyogSGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB5ZXQgKi8KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNwZWNpYWwgY2FzZSBpZiB0aGVyZSBhcmUgTk8gZW50cmllcyAoYXMgb3Bwb3NlZCB0byBubyBNQVRDSElORwotICAgICAqIGVudHJpZXMpLiAgCi0gICAgICovCi0KLSAgICBpZiAoY29tMlNlYzZMaXN0ID09IE5VTEwpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgIm5vIGNvbTJzZWMgZW50cmllc1xuIikpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIElmIHRoZXJlIGlzIG5vIElQdjYgc291cmNlIGFkZHJlc3MsIAotICAgICAqIHRoZW4gdGhlcmUgY2FuIGJlIG5vIHZhbGlkIHNlY3VyaXR5IG5hbWUuICAKLSAgICAgKi8KLQotICAgIGlmIChvcGFxdWUgPT0gTlVMTCB8fCBvbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KQotICAgICAgICB8fCBmcm9tLT5zaW42X2ZhbWlseSAhPSBQRl9JTkVUNikgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLAotICAgICAgICAgICAgICAgICAgICAibm8gSVB2NiBzb3VyY2UgYWRkcmVzcyBpbiBQRFU/XG4iKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIHp0Y29tbXVuaXR5ID0gKGNoYXIgKikgbWFsbG9jKGNvbW11bml0eV9sZW4gKyAxKTsKLSAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgewotICAgICAgICBtZW1jcHkoenRjb21tdW5pdHksIGNvbW11bml0eSwgY29tbXVuaXR5X2xlbik7Ci0gICAgICAgIHp0Y29tbXVuaXR5W2NvbW11bml0eV9sZW5dID0gJ1wwJzsKLSAgICB9Ci0KLSAgICBpbmV0X250b3AoQUZfSU5FVDYsICZmcm9tLT5zaW42X2FkZHIsIHN0cjYsIHNpemVvZihzdHI2KSk7Ci0gICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgInJlc29sdmUgPFwiJXNcIiwgJXM+XG4iLAotICAgICAgICAgICAgICAgIHp0Y29tbXVuaXR5ID8genRjb21tdW5pdHkgOiAiPG1hbGxvYyBlcnJvcj4iLCBzdHI2KSk7Ci0KLSAgICBmb3IgKGMgPSBjb20yU2VjNkxpc3Q7IGMgIT0gTlVMTDsgYyA9IGMtPm5leHQpIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwKLSAgICAgICAgICAgICAgICAgICAgImNvbXBhcmUgPFwiJXNcIiwgMHglMDMyeC8weCUwMzJ4PiIsIGMtPmNvbW11bml0eSwKLSAgICAgICAgICAgICAgICAgICAgYy0+bmV0d29yaywgYy0+bWFzaykpOwotCi0gICAgICAgIGlmICgoY29tbXVuaXR5X2xlbiA9PSAoaW50KXN0cmxlbihjLT5jb21tdW5pdHkpKSAmJgotICAgICAgICAgICAgKG1lbWNtcChjb21tdW5pdHksIGMtPmNvbW11bml0eSwgY29tbXVuaXR5X2xlbikgPT0gMCkgJiYKLSAgICAgICAgICAgIChtYXNrZWRfYWRkcmVzc19hcmVfZXF1YWwoZnJvbS0+c2luNl9mYW1pbHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSBmcm9tLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKikgJmMtPm1hc2ssCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZSAqKSAmYy0+Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHdvcmspID09IDApKSB7Ci0gICAgICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgIi4uLiBTVUNDRVNTXG4iKSk7Ci0gICAgICAgICAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgKnNlY05hbWUgPSBjLT5zZWNOYW1lOwotICAgICAgICAgICAgICAgICpjb250ZXh0TmFtZSA9IGMtPmNvbnRleHROYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICIuLi4gbm9wZVxuIikpOwotICAgIH0KLSAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHp0Y29tbXVuaXR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91ZHA2X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAotCQkJICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKLQotICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luNl8yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgewotICAgICAgICByZXR1cm4gbmV0c25tcF91ZHA2X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLX0KLQotCi0vKgotICogU2VlOgotICogCi0gKiBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLW9wcy10YWRkcmVzcy1taWItMDEudHh0Ci0gKiAKLSAqIChvciBuZXdlciBlcXVpdmFsZW50KSBmb3IgZGV0YWlscyBvZiB0aGUgVEMgd2hpY2ggd2UgYXJlIHVzaW5nIGZvcgotICogdGhlIG1hcHBpbmcgaGVyZS4gIAotICovCi0KLW5ldHNubXBfdHJhbnNwb3J0ICoKLW5ldHNubXBfdWRwNl9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKLXsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPT0gMTgpIHsKLSAgICAgICAgbWVtc2V0KCh1X2NoYXIgKikgJiBhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOwotICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7Ci0gICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luNl9hZGRyLnM2X2FkZHIpLCBvLCAxNik7Ci0gICAgICAgIGFkZHIuc2luNl9wb3J0ID0gKG9bMTZdIDw8IDgpICsgb1sxN107Ci0gICAgICAgIHJldHVybiBuZXRzbm1wX3VkcDZfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7Ci0gICAgfQotICAgIHJldHVybiBOVUxMOwotfQotCi0KLXZvaWQKLW5ldHNubXBfdWRwNl9jdG9yKHZvaWQpCi17Ci0gICAgdWRwNkRvbWFpbi5uYW1lID0gbmV0c25tcF9VRFBJUHY2RG9tYWluOwotICAgIHVkcDZEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9VRFBJUHY2RG9tYWluKSAvIHNpemVvZihvaWQpOwotICAgIHVkcDZEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7Ci0gICAgdWRwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF91ZHA2X2NyZWF0ZV90c3RyaW5nOwotICAgIHVkcDZEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdWRwNl9jcmVhdGVfb3N0cmluZzsKLSAgICB1ZHA2RG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDUsIHNpemVvZihjaGFyICopKTsKLSAgICB1ZHA2RG9tYWluLnByZWZpeFswXSA9ICJ1ZHA2IjsKLSAgICB1ZHA2RG9tYWluLnByZWZpeFsxXSA9ICJpcHY2IjsKLSAgICB1ZHA2RG9tYWluLnByZWZpeFsyXSA9ICJ1ZHB2NiI7Ci0gICAgdWRwNkRvbWFpbi5wcmVmaXhbM10gPSAidWRwaXB2NiI7Ci0KLSAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnVkcDZEb21haW4pOwotfQotCi0jZWxzZQotCi0jaWZkZWYgTkVUU05NUF9ETEwKLS8qIG5lZWQgdGhpcyBob29rIGZvciB3aW4zMiBNU1ZDKysgRExMIGJ1aWxkICovCi12b2lkCi1uZXRzbm1wX3VkcDZfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKQoteyB9Ci0jZW5kaWYKLQotI2VuZGlmIC8qIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOICovCi0KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcFVuaXhEb21haW4uYyBiL3NubXBsaWIvc25tcFVuaXhEb21haW4uYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDM2ZTk1YS4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3NubXBVbml4RG9tYWluLmMKKysrIC9kZXYvbnVsbApAQCAtMSw2NjEgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxjdHlwZS5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZiBIQVZFX1NUUklOR19ICi0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jZWxzZQotI2luY2x1ZGUgPHN0cmluZ3MuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1RETElCX0gKLSNpbmNsdWRlIDxzdGRsaWIuaD4KLSNlbmRpZgotI2lmIEhBVkVfVU5JU1REX0gKLSNpbmNsdWRlIDx1bmlzdGQuaD4KLSNlbmRpZgotI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICi0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2VuZGlmCi0jaWYgSEFWRV9TWVNfVU5fSAotI2luY2x1ZGUgPHN5cy91bi5oPgotI2VuZGlmCi0KLSNpZiBIQVZFX0RNQUxMT0NfSAotI2luY2x1ZGUgPGRtYWxsb2MuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgotCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVuaXhEb21haW4uaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgotCi0KLSNpZm5kZWYgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOCi0jZGVmaW5lIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTiAgNQotI2VuZGlmCi0KLSNpZm5kZWYgU1VOX0xFTgotLyoKLSAqIEV2YWx1YXRlIHRvIGFjdHVhbCBsZW5ndGggb2YgdGhlIGBzb2NrYWRkcl91bicgc3RydWN0dXJlLgotICovCi0jZGVmaW5lIFNVTl9MRU4ocHRyKSAoKHNpemVfdCkgKCgoc3RydWN0IHNvY2thZGRyX3VuICopIDApLT5zdW5fcGF0aCkgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4gKChwdHIpLT5zdW5fcGF0aCkpCi0jZW5kaWYKLQotb2lkIG5ldHNubXBfVW5peERvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX0xPQ0FMIH07Ci1zdGF0aWMgbmV0c25tcF90ZG9tYWluIHVuaXhEb21haW47Ci0KLQotLyoKLSAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSB1c2UgdG8gaG9sZCB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YS4KLSAqLwotCi10eXBlZGVmIHN0cnVjdCBfc29ja2FkZHJfdW5fcGFpciB7Ci0gICAgaW50ICAgICAgICAgICAgIGxvY2FsOwotICAgIHN0cnVjdCBzb2NrYWRkcl91biBzZXJ2ZXI7Ci0gICAgc3RydWN0IHNvY2thZGRyX3VuIGNsaWVudDsKLX0gc29ja2FkZHJfdW5fcGFpcjsKLQotCi0vKgotICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKLSAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLgotICovCi0KLXN0YXRpYyBjaGFyICoKLW5ldHNubXBfdW5peF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQotewotICAgIHN0cnVjdCBzb2NrYWRkcl91biAqdG8gPSBOVUxMOwotCi0gICAgaWYgKGRhdGEgIT0gTlVMTCkgewotICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgZGF0YTsKLSAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgdG8gPSAmKCgoc29ja2FkZHJfdW5fcGFpciAqKSB0LT5kYXRhKS0+c2VydmVyKTsKLSAgICAgICAgbGVuID0gU1VOX0xFTih0byk7Ci0gICAgfQotICAgIGlmICh0byA9PSBOVUxMKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqICJMb2NhbCBJUEMiIGlzIHRoZSBQb3NpeC4xZyB0ZXJtIGZvciBVbml4IGRvbWFpbiBwcm90b2NvbHMsCi0gICAgICAgICAqIGFjY29yZGluZyB0byBXLiBSLiBTdGV2ZW5zLCBgYFVuaXggTmV0d29yayBQcm9ncmFtbWluZyBWb2x1bWUgSQotICAgICAgICAgKiBTZWNvbmQgRWRpdGlvbicnLCBwLiAzNzQuCi0gICAgICAgICAqLwotICAgICAgICByZXR1cm4gc3RyZHVwKCJMb2NhbCBJUEM6IHVua25vd24iKTsKLSAgICB9IGVsc2UgaWYgKHRvLT5zdW5fcGF0aFswXSA9PSAwKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgbmFtZS4gIFdlIGNvdWxkIHJlbmRlciBpdCBhcyBoZXggb3Igc29tZXRoaW5nCi0gICAgICAgICAqIGJ1dCBsZXQncyBub3Qgd29ycnkgYWJvdXQgdGhhdCBmb3Igbm93LgotICAgICAgICAgKi8KLSAgICAgICAgcmV0dXJuIHN0cmR1cCgiTG9jYWwgSVBDOiBhYnN0cmFjdCIpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNoYXIgICAgICAgICAgICp0bXAgPSAoY2hhciAqKSBtYWxsb2MoMTYgKyBsZW4pOwotICAgICAgICBpZiAodG1wICE9IE5VTEwpIHsKLSAgICAgICAgICAgIHNwcmludGYodG1wLCAiTG9jYWwgSVBDOiAlcyIsIHRvLT5zdW5fcGF0aCk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRtcDsKLSAgICB9Ci19Ci0KLQotCi0vKgotICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sKLSAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KLSAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLgotICovCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdW5peF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotICAgIHNvY2tsZW5fdCAgICAgICB0b2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOwotICAgIHN0cnVjdCBzb2NrYWRkciAqdG87Ci0KLQotICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7Ci0gICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpOwotICAgICAgICBpZiAodG8gPT0gTlVMTCkgewotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBtZW1zZXQodG8sIDAsIHRvbGVuKTsKLSAgICAgICAgfQotICAgICAgICBpZihnZXRzb2NrbmFtZSh0LT5zb2NrLCB0bywgJnRvbGVuKSAhPSAwKXsKLSAgICAgICAgICAgIGZyZWUodG8pOwotICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IDA7Ci0gICAgICAgICAgICByZXR1cm4gLTE7Ci0gICAgICAgIH07Ci0gICAgICAgIHdoaWxlIChyYyA8IDApIHsKLSNpZmRlZiBNU0dfRE9OVFdBSVQKLSAgICAgICAgICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCBNU0dfRE9OVFdBSVQsIE5VTEwsIE5VTEwpOwotI2Vsc2UKLSAgICAgICAgICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCBOVUxMKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAicmVjdiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgICAgIHJldHVybiByYzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICpvcGFxdWUgPSAodm9pZCopdG87Ci0gICAgICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOwotICAgICAgICB9Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAicmVjdiBmZCAlZCBnb3QgJWQgYnl0ZXNcbiIsIHQtPnNvY2ssIHJjKSk7Ci0gICAgfQotICAgIHJldHVybiByYzsKLX0KLQotCi0KLXN0YXRpYyBpbnQKLW5ldHNubXBfdW5peF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAotICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQotewotICAgIGludCByYyA9IC0xOwotCi0gICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJzZW5kICVkIGJ5dGVzIHRvICVwIG9uIGZkICVkXG4iLAotICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHQtPnNvY2spKTsKLSAgICAgICAgd2hpbGUgKHJjIDwgMCkgewotICAgICAgICAgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKLSAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VuaXhfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCi17Ci0gICAgaW50IHJjID0gMDsKLSAgICBzb2NrYWRkcl91bl9wYWlyICpzdXAgPSAoc29ja2FkZHJfdW5fcGFpciAqKSB0LT5kYXRhOwotCi0gICAgaWYgKHQtPnNvY2sgPj0gMCkgewotI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCi0gICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7Ci0jZWxzZQotICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOwotI2VuZGlmCi0gICAgICAgIHQtPnNvY2sgPSAtMTsKLSAgICAgICAgaWYgKHN1cCAhPSBOVUxMKSB7Ci0gICAgICAgICAgICBpZiAoc3VwLT5sb2NhbCkgewotICAgICAgICAgICAgICAgIGlmIChzdXAtPnNlcnZlci5zdW5fcGF0aFswXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImNsb3NlOiBzZXJ2ZXIgdW5saW5rKFwiJXNcIilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXAtPnNlcnZlci5zdW5fcGF0aCkpOwotICAgICAgICAgICAgICAgICAgdW5saW5rKHN1cC0+c2VydmVyLnN1bl9wYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIGlmIChzdXAtPmNsaWVudC5zdW5fcGF0aFswXSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImNsb3NlOiBjbGllbnQgdW5saW5rKFwiJXNcIilcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXAtPmNsaWVudC5zdW5fcGF0aCkpOwotICAgICAgICAgICAgICAgICAgdW5saW5rKHN1cC0+Y2xpZW50LnN1bl9wYXRoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHJjOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIHJldHVybiAtMTsKLSAgICB9Ci19Ci0KLQotCi1zdGF0aWMgaW50Ci1uZXRzbm1wX3VuaXhfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQotewotICAgIHN0cnVjdCBzb2NrYWRkciAqZmFyZW5kID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgbmV3c29jayA9IC0xOwotICAgIHNvY2tsZW5fdCAgICAgICBmYXJlbmRsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKLQotICAgIGZhcmVuZCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKGZhcmVuZGxlbik7Ci0KLSAgICBpZiAoZmFyZW5kID09IE5VTEwpIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogSW5kaWNhdGUgdGhhdCB0aGUgYWNjZXB0YW5jZSBvZiB0aGlzIHNvY2tldCBmYWlsZWQuCi0gICAgICAgICAqLwotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImFjY2VwdDogbWFsbG9jIGZhaWxlZFxuIikpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotICAgIG1lbXNldChmYXJlbmQsIDAsIGZhcmVuZGxlbik7Ci0KLSAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgewotICAgICAgICBuZXdzb2NrID0gYWNjZXB0KHQtPnNvY2ssIGZhcmVuZCwgJmZhcmVuZGxlbik7Ci0KLSAgICAgICAgaWYgKG5ld3NvY2sgPCAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwiYWNjZXB0IGZhaWxlZCByYyAlZCBlcnJubyAlZCBcIiVzXCJcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBuZXdzb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBmcmVlKGZhcmVuZCk7Ci0gICAgICAgICAgICByZXR1cm4gbmV3c29jazsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICh0LT5kYXRhICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGZyZWUodC0+ZGF0YSk7Ci0gICAgICAgIH0KLQotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImFjY2VwdCBzdWNjZWVkZWQgKGZhcmVuZCAlcCBsZW4gJWQpXG4iLAotICAgICAgICAgICAgICAgICAgICBmYXJlbmQsIChpbnQpIGZhcmVuZGxlbikpOwotICAgICAgICB0LT5kYXRhID0gZmFyZW5kOwotICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOwotICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1NOREJVRiwgMSwgMCk7Ci0gICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKLSAgICAgICAgcmV0dXJuIG5ld3NvY2s7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZnJlZShmYXJlbmQpOwotICAgICAgICByZXR1cm4gLTE7Ci0gICAgfQotfQotCi0KLQotLyoKLSAqIE9wZW4gYSBVbml4LWRvbWFpbiB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCi0gKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcwotICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvIChhbmQgd2UgbWFrZSB1cCBhIHRlbXBvcmFyeSBuYW1lIGZvcgotICogdGhlIGxvY2FsIGVuZCBvZiB0aGUgY29ubmVjdGlvbikuCi0gKi8KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91bml4X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfdW4gKmFkZHIsIGludCBsb2NhbCkKLXsKLSAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7Ci0gICAgc29ja2FkZHJfdW5fcGFpciAqc3VwID0gTlVMTDsKLSAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOwotICAgIGNoYXIgICAgICAgICAgICpzdHJpbmcgPSBOVUxMOwotCi0gICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zdW5fZmFtaWx5ICE9IEFGX1VOSVgpIHsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdCA9IChuZXRzbm1wX3RyYW5zcG9ydCAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7Ci0gICAgaWYgKHQgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICBzdHJpbmcgPSBuZXRzbm1wX3VuaXhfZm10YWRkcihOVUxMLCAodm9pZCAqKWFkZHIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpOwotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCi0gICAgICAgICAgICAgICAgc3RyaW5nKSk7Ci0gICAgZnJlZShzdHJpbmcpOwotCi0gICAgbWVtc2V0KHQsIDAsIHNpemVvZihuZXRzbm1wX3RyYW5zcG9ydCkpOwotCi0gICAgdC0+ZG9tYWluID0gbmV0c25tcF9Vbml4RG9tYWluOwotICAgIHQtPmRvbWFpbl9sZW5ndGggPQotICAgICAgICBzaXplb2YobmV0c25tcF9Vbml4RG9tYWluKSAvIHNpemVvZihuZXRzbm1wX1VuaXhEb21haW5bMF0pOwotCi0gICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc29ja2FkZHJfdW5fcGFpcikpOwotICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIG1lbXNldCh0LT5kYXRhLCAwLCBzaXplb2Yoc29ja2FkZHJfdW5fcGFpcikpOwotICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHNvY2thZGRyX3VuX3BhaXIpOwotICAgIHN1cCA9IChzb2NrYWRkcl91bl9wYWlyICopIHQtPmRhdGE7Ci0KLSAgICB0LT5zb2NrID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKLSAgICBpZiAodC0+c29jayA8IDApIHsKLSAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotCi0gICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTTsKLQotICAgIGlmIChsb2NhbCkgewotICAgICAgdC0+bG9jYWwgPSAodV9jaGFyICopbWFsbG9jKHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOwotICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgewotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG1lbWNweSh0LT5sb2NhbCwgYWRkci0+c3VuX3BhdGgsIHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOwotICAgICAgICB0LT5sb2NhbF9sZW5ndGggPSBzdHJsZW4oYWRkci0+c3VuX3BhdGgpOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCB0byB0aGUgZ2l2ZW4KLSAgICAgICAgICogcGF0aCAodW5saW5raW5nIGl0IGZpcnN0LCB0byBhdm9pZCBlcnJvcnMpLgotICAgICAgICAgKi8KLQotICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTjsKLQotICAgICAgICB1bmxpbmsoYWRkci0+c3VuX3BhdGgpOwotICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLCBTVU5fTEVOKGFkZHIpKTsKLSAgICAgICAgaWYgKHJjICE9IDApIHsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfdHJhbnNwb3J0IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBiaW5kIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBuZXRzbm1wX3VuaXhfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBTYXZlIHRoZSBhZGRyZXNzIGluIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvciBsYXRlcgotICAgICAgICAgKiB1c2UgYnkgbmV0c25tcF91bml4X2Nsb3NlLgotICAgICAgICAgKi8KLQotICAgICAgICBzdXAtPnNlcnZlci5zdW5fZmFtaWx5ID0gQUZfVU5JWDsKLSAgICAgICAgc3RyY3B5KHN1cC0+c2VydmVyLnN1bl9wYXRoLCBhZGRyLT5zdW5fcGF0aCk7Ci0gICAgICAgIHN1cC0+bG9jYWwgPSAxOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIE5vdyBzaXQgaGVyZSBhbmQgbGlzdGVuIGZvciBjb25uZWN0aW9ucyB0byBhcnJpdmUuCi0gICAgICAgICAqLwotCi0gICAgICAgIHJjID0gbGlzdGVuKHQtPnNvY2ssIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTik7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X3RyYW5zcG9ydCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbGlzdGVuIHRvIFwiJXNcIiwgZXJybm8gJWQgKCVzKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7Ci0gICAgICAgICAgICBuZXRzbm1wX3VuaXhfY2xvc2UodCk7Ci0gICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICB0LT5yZW1vdGUgPSAodV9jaGFyICopbWFsbG9jKHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOwotICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKLSAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCBhZGRyLT5zdW5fcGF0aCwgc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7Ci0gICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSBzdHJsZW4oYWRkci0+c3VuX3BhdGgpOwotCi0gICAgICAgIHJjID0gY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCi0gICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7Ci0gICAgICAgIGlmIChyYyAhPSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X3RyYW5zcG9ydCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgY29ubmVjdCB0byBcIiVzXCIsIGVycm5vICVkICglcylcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zdW5fcGF0aCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOwotICAgICAgICAgICAgbmV0c25tcF91bml4X2Nsb3NlKHQpOwotICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogU2F2ZSB0aGUgcmVtb3RlIGFkZHJlc3MgaW4gdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yCi0gICAgICAgICAqIGxhdGVyIHVzZSBieSBuZXRzbm1wX3VuaXhfc2VuZC4KLSAgICAgICAgICovCi0KLSAgICAgICAgc3VwLT5zZXJ2ZXIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgICAgIHN0cmNweShzdXAtPnNlcnZlci5zdW5fcGF0aCwgYWRkci0+c3VuX3BhdGgpOwotICAgICAgICBzdXAtPmxvY2FsID0gMDsKLSAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKLSAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQotICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4KLSAgICAgKi8KLQotICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOwotICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3VuaXhfcmVjdjsKLSAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF91bml4X3NlbmQ7Ci0gICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfdW5peF9jbG9zZTsKLSAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF91bml4X2FjY2VwdDsKLSAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF91bml4X2ZtdGFkZHI7Ci0KLSAgICByZXR1cm4gdDsKLX0KLQotbmV0c25tcF90cmFuc3BvcnQgKgotbmV0c25tcF91bml4X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxvY2FsLAotCQkJICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQotewotICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOwotCi0gICAgaWYgKHN0cmluZyAmJiAqc3RyaW5nICE9ICdcMCcpIHsKLSAgICB9IGVsc2UgaWYgKGRlZmF1bHRfdGFyZ2V0ICYmICpkZWZhdWx0X3RhcmdldCAhPSAnXDAnKSB7Ci0gICAgICBzdHJpbmcgPSBkZWZhdWx0X3RhcmdldDsKLSAgICB9Ci0KLSAgICBpZiAoKHN0cmluZyAhPSBOVUxMICYmICpzdHJpbmcgIT0gJ1wwJykgJiYKLQkoc3RybGVuKHN0cmluZykgPCBzaXplb2YoYWRkci5zdW5fcGF0aCkpKSB7Ci0gICAgICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgICAgIG1lbXNldChhZGRyLnN1bl9wYXRoLCAwLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOwotICAgICAgICBzdHJsY3B5KGFkZHIuc3VuX3BhdGgsIHN0cmluZywgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdW5peF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwgJiYgKnN0cmluZyAhPSAnXDAnKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiUGF0aCB0b28gbG9uZyBmb3IgVW5peCBkb21haW4gdHJhbnNwb3J0XG4iKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci19Ci0KLQotCi1uZXRzbm1wX3RyYW5zcG9ydCAqCi1uZXRzbm1wX3VuaXhfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCi17Ci0gICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7Ci0KLSAgICBpZiAob19sZW4gPiAwICYmIG9fbGVuIDwgKHNpemVvZihhZGRyLnN1bl9wYXRoKSAtIDEpKSB7Ci0gICAgICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7Ci0gICAgICAgIG1lbXNldChhZGRyLnN1bl9wYXRoLCAwLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOwotICAgICAgICBzdHJsY3B5KGFkZHIuc3VuX3BhdGgsIChjb25zdCBjaGFyICopbywgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKLSAgICAgICAgcmV0dXJuIG5ldHNubXBfdW5peF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKLSAgICB9IGVsc2UgewotICAgICAgICBpZiAob19sZW4gPiAwKSB7Ci0gICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiUGF0aCB0b28gbG9uZyBmb3IgVW5peCBkb21haW4gdHJhbnNwb3J0XG4iKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gTlVMTDsKLX0KLQotCi0KLXZvaWQKLW5ldHNubXBfdW5peF9jdG9yKHZvaWQpCi17Ci0gICAgdW5peERvbWFpbi5uYW1lID0gbmV0c25tcF9Vbml4RG9tYWluOwotICAgIHVuaXhEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9Vbml4RG9tYWluKSAvIHNpemVvZihvaWQpOwotICAgIHVuaXhEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOwotICAgIHVuaXhEb21haW4ucHJlZml4WzBdID0gInVuaXgiOwotCi0gICAgdW5peERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKLSAgICB1bml4RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3VuaXhfY3JlYXRlX3RzdHJpbmc7Ci0gICAgdW5peERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF91bml4X2NyZWF0ZV9vc3RyaW5nOwotCi0gICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ1bml4RG9tYWluKTsKLX0KLQotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotLyogc3VwcG9ydCBmb3IgU05NUHYxIGFuZCBTTk1QdjJjIG9uIHVuaXggZG9tYWluKi8KLQotI2RlZmluZSBFWEFNUExFX0NPTU1VTklUWSAiQ09NTVVOSVRZIgotdHlwZWRlZiBzdHJ1Y3QgX2NvbTJTZWNVbml4RW50cnkgewotICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU5dOwotICAgIGNoYXIgICAgICAgICAgICBzb2NrcGF0aFtzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKV07Ci0gICAgdW5zaWduZWQgbG9uZyAgIHBhdGhsZW47Ci0gICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTl07Ci0gICAgY2hhciAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU5dOwotICAgIHN0cnVjdCBfY29tMlNlY1VuaXhFbnRyeSAqbmV4dDsKLX0gY29tMlNlY1VuaXhFbnRyeTsKLQotY29tMlNlY1VuaXhFbnRyeSAgICpjb20yU2VjVW5peExpc3QgPSBOVUxMLCAqY29tMlNlY1VuaXhMaXN0TGFzdCA9IE5VTEw7Ci0KLQotaW50Ci1uZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAotICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGNvbW11bml0eV9sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqc2VjTmFtZSwgY2hhciAqKmNvbnRleHROYW1lKQotewotICAgIGNvbTJTZWNVbml4RW50cnkgICAqYzsKLSAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnRvID0gKHN0cnVjdCBzb2NrYWRkcl91biAqKSBvcGFxdWU7Ci0gICAgY2hhciAgICAgICAgICAgKnp0Y29tbXVuaXR5ID0gTlVMTDsKLQotICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKLSAgICAgICAgKnNlY05hbWUgPSBOVUxMOyAgLyogSGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB5ZXQgKi8KLSAgICB9Ci0KLSAgICAvKgotICAgICAqIFNwZWNpYWwgY2FzZSBpZiB0aGVyZSBhcmUgTk8gZW50cmllcyAoYXMgb3Bwb3NlZCB0byBubyBNQVRDSElORwotICAgICAqIGVudHJpZXMpLgotICAgICAqLwotCi0gICAgaWYgKGNvbTJTZWNVbml4TGlzdCA9PSBOVUxMKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsICJubyBjb20yc2VjIGVudHJpZXNcbiIpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBJZiB0aGVyZSBpcyBubyB1bml4IHNvY2tldCBwYXRoLCB0aGVuIHRoZXJlIGNhbiBiZSBubyB2YWxpZCBzZWN1cml0eQotICAgICAqIG5hbWUuCi0gICAgICovCi0KLSAgICBpZiAob3BhcXVlID09IE5VTEwgfHwgb2xlbmd0aCAhPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSB8fAotICAgICAgICB0by0+c3VuX2ZhbWlseSAhPSBBRl9VTklYKSB7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsCi0gICAgICAgICAgICAgICAgICAgICJubyB1bml4IGRlc3RpbmUgYWRkcmVzcyBpbiBQRFU/XG4iKSk7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIERFQlVHSUYoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIikgewotICAgICAgICB6dGNvbW11bml0eSA9IChjaGFyICopbWFsbG9jKGNvbW11bml0eV9sZW4gKyAxKTsKLSAgICAgICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKLSAgICAgICAgICAgIG1lbWNweSh6dGNvbW11bml0eSwgY29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKTsKLSAgICAgICAgICAgIHp0Y29tbXVuaXR5W2NvbW11bml0eV9sZW5dID0gJ1wwJzsKLSAgICAgICAgfQotCi0gICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsICJyZXNvbHZlIDxcIiVzXCI+XG4iLAotICAgICAgICAgICAgICAgICAgICB6dGNvbW11bml0eSA/IHp0Y29tbXVuaXR5IDogIjxtYWxsb2MgZXJyb3I+IikpOwotICAgIH0KLQotICAgIGZvciAoYyA9IGNvbTJTZWNVbml4TGlzdDsgYyAhPSBOVUxMOyBjID0gYy0+bmV4dCkgewotICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCJjb21wYXJlIDxcIiVzXCIsdG8gc29ja2V0ICVzPiIsCi0gICAgICAgICAgICAgICAgICAgIGMtPmNvbW11bml0eSwgYy0+c29ja3BhdGggKSk7Ci0gICAgICAgIGlmICgoY29tbXVuaXR5X2xlbiA9PSBzdHJsZW4oYy0+Y29tbXVuaXR5KSkgJiYKLSAgICAgICAgICAgIChtZW1jbXAoY29tbXVuaXR5LCBjLT5jb21tdW5pdHksIGNvbW11bml0eV9sZW4pID09IDApICYmCi0gICAgICAgICAgICAvKiBjb21wYXJlIHNvY2twYXRoLCBpZiBwYXRobGVuID09IDAsIGFsd2F5cyBtYXRjaCAqLwotICAgICAgICAgICAgKHN0cmxlbih0by0+c3VuX3BhdGgpID09IGMtPnBhdGhsZW4gfHwgYy0+cGF0aGxlbiA9PSAwKSAmJgotICAgICAgICAgICAgKG1lbWNtcCh0by0+c3VuX3BhdGgsIGMtPnNvY2twYXRoLCBjLT5wYXRobGVuKSA9PSAwKQotICAgICAgICAgICAgKSB7Ci0gICAgICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwgIi4uLiBTVUNDRVNTXG4iKSk7Ci0gICAgICAgICAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgKnNlY05hbWUgPSBjLT5zZWNOYW1lOwotICAgICAgICAgICAgICAgICpjb250ZXh0TmFtZSA9IGMtPmNvbnRleHROYW1lOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsICIuLi4gbm9wZVxuIikpOwotICAgIH0KLSAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgewotICAgICAgICBmcmVlKHp0Y29tbXVuaXR5KTsKLSAgICB9Ci0gICAgcmV0dXJuIDE7Ci19Ci0KLXZvaWQKLW5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pCi17Ci0gICAgY2hhciAgICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOICsgMV0sIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTiArIDFdOwotICAgIGNoYXIgICAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU4gKyAxXTsKLSAgICBjaGFyICAgICAgICAgICAgICBzb2NrcGF0aFtzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSArIDFdOwotICAgIGNvbTJTZWNVbml4RW50cnkgKmUgPSBOVUxMOwotCi0KLSAgICBwYXJhbSA9IGNvcHlfbndvcmQocGFyYW0sIHNlY05hbWUsIFZBQ01TVFJJTkdMRU4pOwotICAgIGlmIChzdHJjbXAoc2VjTmFtZSwgIi1DbiIpID09IDApIHsKLSAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgY29udGV4dE5hbWUsIHNpemVvZihjb250ZXh0TmFtZSkpOwotICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOwotICAgICAgICBpZiAoY29udGV4dE5hbWVbMF0gPT0gJ1wwJykgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyIik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBjb250ZXh0TmFtZVswXSA9ICdcMCc7Ci0gICAgfQotICAgIGlmIChzZWNOYW1lWzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBOQU1FIHBhcmFtZXRlciIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oc2VjTmFtZSkgPiAoVkFDTVNUUklOR0xFTiAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY3VyaXR5IG5hbWUgdG9vIGxvbmciKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQocGFyYW0sIHNvY2twYXRoLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSAtIDEpOwotICAgIGlmIChzb2NrcGF0aFswXSA9PSAnXDAnKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgU09DS1BBVEggcGFyYW1ldGVyIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9IGVsc2UgaWYgKHN0cmxlbihzb2NrcGF0aCkgPiAoc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgLSAxKSkgewotICAgICAgICBjb25maWdfcGVycm9yKCJzb2NrcGF0aCB0b28gbG9uZyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIC8qIGlmIHNvY2twYXRoID09ICJkZWZhdWx0Iiwgc2V0IHBhdGhsZW49MCovCi0gICAgaWYoc3RyY21wKHNvY2twYXRoLCAiZGVmYXVsdCIpID09IDApewotICAgICAgICBzb2NrcGF0aFswXSA9IDA7Ci0gICAgfQotCi0gICAgcGFyYW0gPSBjb3B5X253b3JkKHBhcmFtLCBjb21tdW5pdHksIENPTU1VTklUWV9NQVhfTEVOKTsKLSAgICBpZiAoY29tbXVuaXR5WzBdID09ICdcMCcpIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyXG4iKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0gZWxzZSBpZiAoc3RybmNtcAotICAgICAgICAgICAgICAgKGNvbW11bml0eSwgRVhBTVBMRV9DT01NVU5JVFksIHN0cmxlbihFWEFNUExFX0NPTU1VTklUWSkpCi0gICAgICAgICAgICAgICA9PSAwKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgfSBlbHNlIGlmIChzdHJsZW4oY29tbXVuaXR5KSA+IChDT01NVU5JVFlfTUFYX0xFTiAtIDEpKSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbW11bml0eSBuYW1lIHRvbyBsb25nIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBlID0gKGNvbTJTZWNVbml4RW50cnkgKikgbWFsbG9jKHNpemVvZihjb20yU2VjVW5peEVudHJ5KSk7Ci0gICAgaWYgKGUgPT0gTlVMTCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJtZW1vcnkgZXJyb3IiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHkiLAotICAgICAgICAgICAgICAgICI8XCIlc1wiPiA9PiBcIiVzXCJcbiIsIGNvbW11bml0eSwgc2VjTmFtZSkpOwotCi0gICAgc3RyY3B5KGUtPnNlY05hbWUsIHNlY05hbWUpOwotICAgIHN0cmNweShlLT5jb250ZXh0TmFtZSwgY29udGV4dE5hbWUpOwotICAgIHN0cmNweShlLT5jb21tdW5pdHksIGNvbW11bml0eSk7Ci0gICAgc3RyY3B5KGUtPnNvY2twYXRoLCBzb2NrcGF0aCk7Ci0gICAgZS0+cGF0aGxlbiA9IHN0cmxlbihzb2NrcGF0aCk7Ci0gICAgZS0+bmV4dCA9IE5VTEw7Ci0KLSAgICBpZiAoY29tMlNlY1VuaXhMaXN0TGFzdCAhPSBOVUxMKSB7Ci0gICAgICAgIGNvbTJTZWNVbml4TGlzdExhc3QtPm5leHQgPSBlOwotICAgICAgICBjb20yU2VjVW5peExpc3RMYXN0ID0gZTsKLSAgICB9IGVsc2UgewotICAgICAgICBjb20yU2VjVW5peExpc3RMYXN0ID0gY29tMlNlY1VuaXhMaXN0ID0gZTsKLSAgICB9Ci19Ci0KLXZvaWQKLW5ldHNubXBfdW5peF9jb20yU2VjTGlzdF9mcmVlKHZvaWQpCi17Ci0gICAgY29tMlNlY1VuaXhFbnRyeSAgICplID0gY29tMlNlY1VuaXhMaXN0OwotICAgIHdoaWxlIChlICE9IE5VTEwpIHsKLSAgICAgICAgY29tMlNlY1VuaXhFbnRyeSAgICp0bXAgPSBlOwotICAgICAgICBlID0gZS0+bmV4dDsKLSAgICAgICAgZnJlZSh0bXApOwotICAgIH0KLSAgICBjb20yU2VjVW5peExpc3QgPSBjb20yU2VjVW5peExpc3RMYXN0ID0gTlVMTDsKLX0KLSNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLwotCi12b2lkCi1uZXRzbm1wX3VuaXhfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKQotewotI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigiY29tMnNlY3VuaXgiLCBuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdW5peF9jb20yU2VjTGlzdF9mcmVlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWy1DbiBDT05URVhUXSBzZWNOYW1lIHNvY2twYXRoIGNvbW11bml0eSIpOwotI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCi19CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfYWxhcm0uYyBiL3NubXBsaWIvc25tcF9hbGFybS5jCmluZGV4IGM4OGZhNzUuLmFmNDgwMGYgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9hbGFybS5jCisrKyBiL3NubXBsaWIvc25tcF9hbGFybS5jCkBAIC0zNCwxMSArMzQsNyBAQAogI2VuZGlmCiAKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTQ3LDkgKzQzLDYgQEAKICMgIGluY2x1ZGUgPHRpbWUuaD4KICMgZW5kaWYKICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAKICNpZiBIQVZFX0RNQUxMT0NfSAogI2luY2x1ZGUgPGRtYWxsb2MuaD4KQEAgLTg5LDMwICs4MiwyNCBAQAogdm9pZAogc2FfdXBkYXRlX2VudHJ5KHN0cnVjdCBzbm1wX2FsYXJtICphKQogewotICAgIGlmIChhLT50X2xhc3QudHZfc2VjID09IDAgJiYgYS0+dF9sYXN0LnR2X3VzZWMgPT0gMCkgewotICAgICAgICBzdHJ1Y3QgdGltZXZhbCAgdF9ub3c7CisgICAgaWYgKCF0aW1lcmlzc2V0KCZhLT50X2xhc3RNKSkgewogICAgICAgICAvKgotICAgICAgICAgKiBOZXZlciBiZWVuIGNhbGxlZCB5ZXQsIGNhbGwgdGltZSBgdCcgZnJvbSBub3cuICAKKyAgICAgICAgICogRmlyc3QgY2FsbCBvZiBzYV91cGRhdGVfZW50cnkoKSBmb3IgYWxhcm0gYTogc2V0IHRfbGFzdE0gYW5kIHRfbmV4dE0uCiAgICAgICAgICAqLwotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRfbm93LCBOVUxMKTsKLQotICAgICAgICBhLT50X2xhc3QudHZfc2VjID0gdF9ub3cudHZfc2VjOwotICAgICAgICBhLT50X2xhc3QudHZfdXNlYyA9IHRfbm93LnR2X3VzZWM7Ci0KLSAgICAgICAgTkVUU05NUF9USU1FUkFERCgmdF9ub3csICZhLT50LCAmYS0+dF9uZXh0KTsKLSAgICB9IGVsc2UgaWYgKGEtPnRfbmV4dC50dl9zZWMgPT0gMCAmJiBhLT50X25leHQudHZfdXNlYyA9PSAwKSB7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmYS0+dF9sYXN0TSk7CisgICAgICAgIE5FVFNOTVBfVElNRVJBREQoJmEtPnRfbGFzdE0sICZhLT50LCAmYS0+dF9uZXh0TSk7CisgICAgfSBlbHNlIGlmICghdGltZXJpc3NldCgmYS0+dF9uZXh0TSkpIHsKICAgICAgICAgLyoKICAgICAgICAgICogV2UndmUgYmVlbiBjYWxsZWQgYnV0IG5vdCByZXNldCBmb3IgdGhlIG5leHQgY2FsbC4gIAogICAgICAgICAgKi8KICAgICAgICAgaWYgKGEtPmZsYWdzICYgU0FfUkVQRUFUKSB7Ci0gICAgICAgICAgICBpZiAoYS0+dC50dl9zZWMgPT0gMCAmJiBhLT50LnR2X3VzZWMgPT0gMCkgeworICAgICAgICAgICAgaWYgKHRpbWVyaXNzZXQoJmEtPnQpKSB7CisgICAgICAgICAgICAgICAgTkVUU05NUF9USU1FUkFERCgmYS0+dF9sYXN0TSwgJmEtPnQsICZhLT50X25leHRNKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1cGRhdGVfZW50cnk6IGlsbGVnYWwgaW50ZXJ2YWwgc3BlY2lmaWVkXG4iKSk7CiAgICAgICAgICAgICAgICAgc25tcF9hbGFybV91bnJlZ2lzdGVyKGEtPmNsaWVudHJlZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZhLT50X2xhc3QsICZhLT50LCAmYS0+dF9uZXh0KTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBTaW5nbGUgdGltZSBjYWxsLCByZW1vdmUgaXQuICAKQEAgLTE1MSw3ICsxMzgsNyBAQAogICAgICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybSIsICJ1bnJlZ2lzdGVyZWQgYWxhcm0gJWRcbiIsIAogCQkgICAgc2FfcHRyLT5jbGllbnRyZWcpKTsKICAgICAgICAgLyoKLSAgICAgICAgICogTm90ZTogIGRvIG5vdCBmcmVlIHRoZSBjbGllbnRhcmcsIGl0cyB0aGUgY2xpZW50cyByZXNwb25zaWJpbGl0eSAKKyAgICAgICAgICogTm90ZTogZG8gbm90IGZyZWUgdGhlIGNsaWVudGFyZywgaXQncyB0aGUgY2xpZW50J3MgcmVzcG9uc2liaWxpdHkgCiAgICAgICAgICAqLwogICAgICAgICBmcmVlKHNhX3B0cik7CiAgICAgfSBlbHNlIHsKQEAgLTE4NSwzMSArMTcyLDE2IEBACiBzYV9maW5kX25leHQodm9pZCkKIHsKICAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqYSwgKmxvd2VzdCA9IE5VTEw7Ci0gICAgc3RydWN0IHRpbWV2YWwgIHRfbm93OwogCi0gICAgZ2V0dGltZW9mZGF5KCZ0X25vdywgTlVMTCk7CisgICAgZm9yIChhID0gdGhlYWxhcm1zOyBhICE9IE5VTEw7IGEgPSBhLT5uZXh0KQorICAgICAgICBpZiAoIShhLT5mbGFncyAmIFNBX0ZJUkVEKQorICAgICAgICAgICAgJiYgKGxvd2VzdCA9PSBOVUxMIHx8IHRpbWVyY21wKCZhLT50X25leHRNLCAmbG93ZXN0LT50X25leHRNLCA8KSkpCisgICAgICAgICAgICBsb3dlc3QgPSBhOwogCi0gICAgZm9yIChhID0gdGhlYWxhcm1zOyBhICE9IE5VTEw7IGEgPSBhLT5uZXh0KSB7Ci0gICAgICAgIC8qIGNoZWNrIGZvciB0aW1lIGRlbHRhIHNrZXcgKi8KLSAgICAgICAgaWYgKChhLT50X25leHQudHZfc2VjIC0gdF9ub3cudHZfc2VjKSA+IGEtPnQudHZfc2VjKQotICAgICAgICB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidGltZV9za2V3IiwgIlRpbWUgZGVsdGEgdG9vIGJpZyAoJWQgc2Vjb25kcyksIHNob3VsZCBiZSAlZCBzZWNvbmRzIC0gZml4aW5nXG4iLCAoYS0+dF9uZXh0LnR2X3NlYyAtIHRfbm93LnR2X3NlYyksIGEtPnQudHZfc2VjKSk7Ci0gICAgICAgICAgICBhLT50X25leHQudHZfc2VjID0gdF9ub3cudHZfc2VjICsgYS0+dC50dl9zZWM7Ci0gICAgICAgICAgICBhLT50X25leHQudHZfdXNlYyA9IHRfbm93LnR2X3VzZWMgKyBhLT50LnR2X3VzZWM7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGxvd2VzdCA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBsb3dlc3QgPSBhOwotICAgICAgICB9IGVsc2UgaWYgKGEtPnRfbmV4dC50dl9zZWMgPT0gbG93ZXN0LT50X25leHQudHZfc2VjKSB7Ci0gICAgICAgICAgICBpZiAoYS0+dF9uZXh0LnR2X3VzZWMgPCBsb3dlc3QtPnRfbmV4dC50dl91c2VjKSB7Ci0gICAgICAgICAgICAgICAgbG93ZXN0ID0gYTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChhLT50X25leHQudHZfc2VjIDwgbG93ZXN0LT50X25leHQudHZfc2VjKSB7Ci0gICAgICAgICAgICBsb3dlc3QgPSBhOwotICAgICAgICB9Ci0gICAgfQogICAgIHJldHVybiBsb3dlc3Q7CiB9CiAKK05FVFNOTVBfSU1QT1JUIHN0cnVjdCBzbm1wX2FsYXJtICpzYV9maW5kX3NwZWNpZmljKHVuc2lnbmVkIGludCBjbGllbnRyZWcpOwogc3RydWN0IHNubXBfYWxhcm0gKgogc2FfZmluZF9zcGVjaWZpYyh1bnNpZ25lZCBpbnQgY2xpZW50cmVnKQogewpAQCAtMjI1LDggKzE5Nyw3IEBACiB2b2lkCiBydW5fYWxhcm1zKHZvaWQpCiB7Ci0gICAgaW50ICAgICAgICAgICAgIGRvbmUgPSAwOwotICAgIHN0cnVjdCBzbm1wX2FsYXJtICphID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqYTsKICAgICB1bnNpZ25lZCBpbnQgICAgY2xpZW50cmVnOwogICAgIHN0cnVjdCB0aW1ldmFsICB0X25vdzsKIApAQCAtMjM1LDMxICsyMDYsMjcgQEAKICAgICAgKiBjYWxsIHVudGlsIGFsbCBldmVudHMgYXJlIGZpbmFsbHkgaW4gdGhlIGZ1dHVyZSBhZ2Fpbi4gIAogICAgICAqLwogCi0gICAgd2hpbGUgKCFkb25lKSB7Ci0gICAgICAgIGlmICgoYSA9IHNhX2ZpbmRfbmV4dCgpKSA9PSBOVUxMKSB7CisgICAgd2hpbGUgKChhID0gc2FfZmluZF9uZXh0KCkpICE9IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0X25vdyk7CisKKyAgICAgICAgaWYgKHRpbWVyY21wKCZhLT50X25leHRNLCAmdF9ub3csID4pKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9CiAKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0X25vdywgTlVMTCk7CisgICAgICAgIGNsaWVudHJlZyA9IGEtPmNsaWVudHJlZzsKKyAgICAgICAgYS0+ZmxhZ3MgfD0gU0FfRklSRUQ7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgInJ1biBhbGFybSAlZFxuIiwgY2xpZW50cmVnKSk7CisgICAgICAgICgqKGEtPnRoZWNhbGxiYWNrKSkgKGNsaWVudHJlZywgYS0+Y2xpZW50YXJnKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAiYWxhcm0gJWQgY29tcGxldGVkXG4iLCBjbGllbnRyZWcpKTsKIAotICAgICAgICBpZiAodGltZXJjbXAoJmEtPnRfbmV4dCwgJnRfbm93LCA8KSkgewotICAgICAgICAgICAgY2xpZW50cmVnID0gYS0+Y2xpZW50cmVnOwotICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAicnVuIGFsYXJtICVkXG4iLCBjbGllbnRyZWcpKTsKLSAgICAgICAgICAgICgqKGEtPnRoZWNhbGxiYWNrKSkgKGNsaWVudHJlZywgYS0+Y2xpZW50YXJnKTsKLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgImFsYXJtICVkIGNvbXBsZXRlZFxuIiwgY2xpZW50cmVnKSk7Ci0KLSAgICAgICAgICAgIGlmICgoYSA9IHNhX2ZpbmRfc3BlY2lmaWMoY2xpZW50cmVnKSkgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgIGEtPnRfbGFzdC50dl9zZWMgPSB0X25vdy50dl9zZWM7Ci0gICAgICAgICAgICAgICAgYS0+dF9sYXN0LnR2X3VzZWMgPSB0X25vdy50dl91c2VjOwotICAgICAgICAgICAgICAgIGEtPnRfbmV4dC50dl9zZWMgPSAwOwotICAgICAgICAgICAgICAgIGEtPnRfbmV4dC50dl91c2VjID0gMDsKLSAgICAgICAgICAgICAgICBzYV91cGRhdGVfZW50cnkoYSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgImFsYXJtICVkIGRlbGV0ZWQgaXRzZWxmXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWVudHJlZykpOwotICAgICAgICAgICAgfQorICAgICAgICBhID0gc2FfZmluZF9zcGVjaWZpYyhjbGllbnRyZWcpOworICAgICAgICBpZiAoYSkgeworICAgICAgICAgICAgYS0+dF9sYXN0TSA9IHRfbm93OworICAgICAgICAgICAgdGltZXJjbGVhcigmYS0+dF9uZXh0TSk7CisgICAgICAgICAgICBhLT5mbGFncyAmPSB+U0FfRklSRUQ7CisgICAgICAgICAgICBzYV91cGRhdGVfZW50cnkoYSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBkb25lID0gMTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgImFsYXJtICVkIGRlbGV0ZWQgaXRzZWxmXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgY2xpZW50cmVnKSk7CiAgICAgICAgIH0KICAgICB9CiB9CkBAIC0yNzUsMzkgKzI0Miw1NiBAQAogCiAKIAorLyoqCisgKiBMb29rIHVwIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBuZXh0IGFsYXJtIHdpbGwgZmlyZS4KKyAqCisgKiBAcGFyYW1bb3V0XSBhbGFybV90bSBUaW1lIGF0IHdoaWNoIHRoZSBuZXh0IGFsYXJtIHdpbGwgZmlyZS4KKyAqIEBwYXJhbVtpbl0gbm93IEVhcmxpZXN0IHRpbWUgdGhhdCBzaG91bGQgYmUgd3JpdHRlbiBpbnRvICphbGFybV90bS4KKyAqCisgKiBAcmV0dXJuIFplcm8gaWYgbm8gYWxhcm1zIGFyZSBzY2hlZHVsZWQ7IG5vbi16ZXJvICdjbGllbnRyZWcnIHZhbHVlCisgKiAgIGlkZW50aWZ5aW5nIHRoZSBmaXJzdCBhbGFybSB0aGF0IHdpbGwgZmlyZSBpZiBvbmUgb3IgbW9yZSBhbGFybXMgYXJlCisgKiAgIHNjaGVkdWxlZC4KKyAqLwogaW50Ci1nZXRfbmV4dF9hbGFybV9kZWxheV90aW1lKHN0cnVjdCB0aW1ldmFsICpkZWx0YSkKK25ldHNubXBfZ2V0X25leHRfYWxhcm1fdGltZShzdHJ1Y3QgdGltZXZhbCAqYWxhcm1fdG0sIGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3cpCiB7CiAgICAgc3RydWN0IHNubXBfYWxhcm0gKnNhX3B0cjsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgdF9ub3c7CiAKICAgICBzYV9wdHIgPSBzYV9maW5kX25leHQoKTsKIAogICAgIGlmIChzYV9wdHIpIHsKLSAgICAgICAgZ2V0dGltZW9mZGF5KCZ0X25vdywgMCk7Ci0KLSAgICAgICAgaWYgKHRpbWVyY21wKCZ0X25vdywgJnNhX3B0ci0+dF9uZXh0LCA+KSkgewotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIFRpbWUgaGFzIGFscmVhZHkgcGFzc2VkLiAgUmV0dXJuIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBhbW91bnQgb2YKLSAgICAgICAgICAgICAqIHRpbWUuICAKLSAgICAgICAgICAgICAqLwotICAgICAgICAgICAgZGVsdGEtPnR2X3NlYyA9IDA7Ci0gICAgICAgICAgICBkZWx0YS0+dHZfdXNlYyA9IDE7Ci0gICAgICAgICAgICByZXR1cm4gc2FfcHRyLT5jbGllbnRyZWc7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAvKgotICAgICAgICAgICAgICogVGltZSBpcyBzdGlsbCBpbiB0aGUgZnV0dXJlLiAgCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIE5FVFNOTVBfVElNRVJTVUIoJnNhX3B0ci0+dF9uZXh0LCAmdF9ub3csIGRlbHRhKTsKLQotICAgICAgICAgICAgcmV0dXJuIHNhX3B0ci0+Y2xpZW50cmVnOwotICAgICAgICB9CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KGFsYXJtX3RtKTsKKyAgICAgICAgbmV0c25tcF9hc3NlcnQodGltZXJpc3NldCgmc2FfcHRyLT50X25leHRNKSk7CisgICAgICAgIGlmICh0aW1lcmNtcCgmc2FfcHRyLT50X25leHRNLCBub3csID4pKQorICAgICAgICAgICAgKmFsYXJtX3RtID0gc2FfcHRyLT50X25leHRNOworICAgICAgICBlbHNlCisgICAgICAgICAgICAqYWxhcm1fdG0gPSAqbm93OworICAgICAgICByZXR1cm4gc2FfcHRyLT5jbGllbnRyZWc7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorfQogCi0gICAgLyoKLSAgICAgKiBOb3RoaW5nIExlZnQuICAKLSAgICAgKi8KLSAgICByZXR1cm4gMDsKKy8qKgorICogR2V0IHRoZSB0aW1lIHVudGlsIHRoZSBuZXh0IGFsYXJtIHdpbGwgZmlyZS4KKyAqCisgKiBAcGFyYW1bb3V0XSBkZWx0YSBUaW1lIHVudGlsIHRoZSBuZXh0IGFsYXJtLgorICoKKyAqIEByZXR1cm4gWmVybyBpZiBubyBhbGFybXMgYXJlIHNjaGVkdWxlZDsgbm9uLXplcm8gJ2NsaWVudHJlZycgdmFsdWUKKyAqICAgaWRlbnRpZnlpbmcgdGhlIGZpcnN0IGFsYXJtIHRoYXQgd2lsbCBmaXJlIGlmIG9uZSBvciBtb3JlIGFsYXJtcyBhcmUKKyAqICAgc2NoZWR1bGVkLgorICovCitpbnQKK2dldF9uZXh0X2FsYXJtX2RlbGF5X3RpbWUoc3RydWN0IHRpbWV2YWwgKmRlbHRhKQoreworICAgIHN0cnVjdCB0aW1ldmFsIHRfbm93LCBhbGFybV90bTsKKyAgICBpbnQgcmVzOworCisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZ0X25vdyk7CisgICAgcmVzID0gbmV0c25tcF9nZXRfbmV4dF9hbGFybV90aW1lKCZhbGFybV90bSwgJnRfbm93KTsKKyAgICBpZiAocmVzKQorICAgICAgICBORVRTTk1QX1RJTUVSU1VCKCZhbGFybV90bSwgJnRfbm93LCBkZWx0YSk7CisgICAgcmV0dXJuIHJlczsKIH0KIAogCkBAIC0zMjksMjEgKzMxMywxOSBAQAogIyBpZmRlZiBIQVZFX1NFVElUSU1FUgogICAgICAgICBzdHJ1Y3QgaXRpbWVydmFsIGl0OwogCi0gICAgICAgIGl0Lml0X3ZhbHVlLnR2X3NlYyA9IGRlbHRhLnR2X3NlYzsKLSAgICAgICAgaXQuaXRfdmFsdWUudHZfdXNlYyA9IGRlbHRhLnR2X3VzZWM7Ci0gICAgICAgIGl0Lml0X2ludGVydmFsLnR2X3NlYyA9IDA7Ci0gICAgICAgIGl0Lml0X2ludGVydmFsLnR2X3VzZWMgPSAwOworICAgICAgICBpdC5pdF92YWx1ZSA9IGRlbHRhOworICAgICAgICB0aW1lcmNsZWFyKCZpdC5pdF9pbnRlcnZhbCk7CiAKICAgICAgICAgc2lnbmFsKFNJR0FMUk0sIGFsYXJtX2hhbmRsZXIpOwogICAgICAgICBzZXRpdGltZXIoSVRJTUVSX1JFQUwsICZpdCwgTlVMTCk7Ci0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwgInNjaGVkdWxlIGFsYXJtICVkIGluICVkLiUwM2Qgc2Vjb25kc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgbmV4dGFsYXJtLCBkZWx0YS50dl9zZWMsIChkZWx0YS50dl91c2VjIC8gMTAwMCkpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLCAic2NoZWR1bGUgYWxhcm0gJWQgaW4gJWxkLiUwM2xkIHNlY29uZHNcbiIsCisgICAgICAgICAgICAgICAgICAgIG5leHRhbGFybSwgKGxvbmcpIGRlbHRhLnR2X3NlYywgKGxvbmcpKGRlbHRhLnR2X3VzZWMgLyAxMDAwKSkpOwogIyBlbHNlICAvKiBIQVZFX1NFVElUSU1FUiAqLwogIyAgaWZkZWYgU0lHQUxSTQogICAgICAgICBzaWduYWwoU0lHQUxSTSwgYWxhcm1faGFuZGxlcik7CiAgICAgICAgIGFsYXJtKGRlbHRhLnR2X3NlYyk7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FsYXJtIiwKLSAgICAgICAgICAgICAgICAgICAgInNjaGVkdWxlIGFsYXJtICVkIGluIHJvdWdobHkgJWQgc2Vjb25kc1xuIiwgbmV4dGFsYXJtLAorICAgICAgICAgICAgICAgICAgICAic2NoZWR1bGUgYWxhcm0gJWQgaW4gcm91Z2hseSAlbGQgc2Vjb25kc1xuIiwgbmV4dGFsYXJtLAogICAgICAgICAgICAgICAgICAgICBkZWx0YS50dl9zZWMpKTsKICMgIGVuZGlmICAvKiBTSUdBTFJNICovCiAjIGVuZGlmICAvKiBIQVZFX1NFVElUSU1FUiAqLwpAQCAtMzc0LDcgKzM1Niw3IEBACiAgKgogICogQHBhcmFtIGNsaWVudGFyZyBpcyBhIHZvaWQgcG9pbnRlciB1c2VkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIFRoaXMgCiAgKglwb2ludGVyIGlzIGFzc2lnbmVkIHRvIHNubXBfYWxhcm0tPmNsaWVudGFyZyBhbmQgcGFzc2VkIGludG8gdGhlCi0gKgljYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGNsaWVudCdzIHNwZWNpZmMgbmVlZHMuCisgKgljYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGNsaWVudCdzIHNwZWNpZmljIG5lZWRzLgogICoKICAqIEByZXR1cm4gUmV0dXJucyBhIHVuaXF1ZSB1bnNpZ25lZCBpbnRlZ2VyKHdoaWNoIGlzIGFsc28gcGFzc2VkIGFzIHRoZSBmaXJzdCAKICAqCWFyZ3VtZW50IG9mIGVhY2ggY2FsbGJhY2spLCB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUKQEAgLTM5MCw0MCArMzcyLDE3IEBACiBzbm1wX2FsYXJtX3JlZ2lzdGVyKHVuc2lnbmVkIGludCB3aGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgIFNOTVBBbGFybUNhbGxiYWNrICogdGhlY2FsbGJhY2ssIHZvaWQgKmNsaWVudGFyZykKIHsKLSAgICBzdHJ1Y3Qgc25tcF9hbGFybSAqKnNhX3BwdHI7Ci0gICAgaWYgKHRoZWFsYXJtcyAhPSBOVUxMKSB7Ci0gICAgICAgIGZvciAoc2FfcHB0ciA9ICZ0aGVhbGFybXM7ICgqc2FfcHB0cikgIT0gTlVMTDsKLSAgICAgICAgICAgICBzYV9wcHRyID0gJigoKnNhX3BwdHIpLT5uZXh0KSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2FfcHB0ciA9ICZ0aGVhbGFybXM7Ci0gICAgfQotCi0gICAgKnNhX3BwdHIgPSBTTk1QX01BTExPQ19TVFJVQ1Qoc25tcF9hbGFybSk7Ci0gICAgaWYgKCpzYV9wcHRyID09IE5VTEwpCi0gICAgICAgIHJldHVybiAwOworICAgIHN0cnVjdCB0aW1ldmFsICB0OwogCiAgICAgaWYgKDAgPT0gd2hlbikgewotICAgICAgICAoKnNhX3BwdHIpLT50LnR2X3NlYyA9IDA7Ci0gICAgICAgICgqc2FfcHB0ciktPnQudHZfdXNlYyA9IDE7CisgICAgICAgIHQudHZfc2VjID0gMDsKKyAgICAgICAgdC50dl91c2VjID0gMTsKICAgICB9IGVsc2UgewotICAgICAgICAoKnNhX3BwdHIpLT50LnR2X3NlYyA9IHdoZW47Ci0gICAgICAgICgqc2FfcHB0ciktPnQudHZfdXNlYyA9IDA7CisgICAgICAgIHQudHZfc2VjID0gd2hlbjsKKyAgICAgICAgdC50dl91c2VjID0gMDsKICAgICB9Ci0gICAgKCpzYV9wcHRyKS0+ZmxhZ3MgPSBmbGFnczsKLSAgICAoKnNhX3BwdHIpLT5jbGllbnRhcmcgPSBjbGllbnRhcmc7Ci0gICAgKCpzYV9wcHRyKS0+dGhlY2FsbGJhY2sgPSB0aGVjYWxsYmFjazsKLSAgICAoKnNhX3BwdHIpLT5jbGllbnRyZWcgPSByZWdudW0rKzsKLSAgICAoKnNhX3BwdHIpLT5uZXh0ID0gTlVMTDsKLSAgICBzYV91cGRhdGVfZW50cnkoKnNhX3BwdHIpOwogCi0gICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLAotCQkicmVnaXN0ZXJlZCBhbGFybSAlZCwgdCA9ICVkLiUwM2QsIGZsYWdzPTB4JTAyeFxuIiwKLSAgICAgICAgICAgICAgICAoKnNhX3BwdHIpLT5jbGllbnRyZWcsICgqc2FfcHB0ciktPnQudHZfc2VjLAotICAgICAgICAgICAgICAgICgoKnNhX3BwdHIpLT50LnR2X3VzZWMgLyAxMDAwKSwgKCpzYV9wcHRyKS0+ZmxhZ3MpKTsKLQotICAgIGlmIChzdGFydF9hbGFybXMpCi0gICAgICAgIHNldF9hbl9hbGFybSgpOwotICAgIHJldHVybiAoKnNhX3BwdHIpLT5jbGllbnRyZWc7CisgICAgcmV0dXJuIHNubXBfYWxhcm1fcmVnaXN0ZXJfaHIodCwgZmxhZ3MsIHRoZWNhbGxiYWNrLCBjbGllbnRhcmcpOwogfQogCiAKQEAgLTQ1MSw3ICs0MTAsNyBAQAogICoKICAqIEBwYXJhbSBjZCBpcyBhIHZvaWQgcG9pbnRlciB1c2VkIGJ5IHRoZSBjYWxsYmFjayBmdW5jdGlvbi4gIFRoaXMgCiAgKglwb2ludGVyIGlzIGFzc2lnbmVkIHRvIHNubXBfYWxhcm0tPmNsaWVudGFyZyBhbmQgcGFzc2VkIGludG8gdGhlCi0gKgljYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGNsaWVudCdzIHNwZWNpZmMgbmVlZHMuCisgKgljYWxsYmFjayBmdW5jdGlvbiBmb3IgdGhlIGNsaWVudCdzIHNwZWNpZmljIG5lZWRzLgogICoKICAqIEByZXR1cm4gUmV0dXJucyBhIHVuaXF1ZSB1bnNpZ25lZCBpbnRlZ2VyKHdoaWNoIGlzIGFsc28gcGFzc2VkIGFzIHRoZSBmaXJzdCAKICAqCWFyZ3VtZW50IG9mIGVhY2ggY2FsbGJhY2spLCB3aGljaCBjYW4gdGhlbiBiZSB1c2VkIHRvIHJlbW92ZSB0aGUKQEAgLTQ3Niw4ICs0MzUsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICAoKnMpLT50LnR2X3NlYyA9IHQudHZfc2VjOwotICAgICgqcyktPnQudHZfdXNlYyA9IHQudHZfdXNlYzsKKyAgICAoKnMpLT50ID0gdDsKICAgICAoKnMpLT5mbGFncyA9IGZsYWdzOwogICAgICgqcyktPmNsaWVudGFyZyA9IGNkOwogICAgICgqcyktPnRoZWNhbGxiYWNrID0gY2I7CkBAIC00ODcsOCArNDQ1LDggQEAKICAgICBzYV91cGRhdGVfZW50cnkoKnMpOwogCiAgICAgREVCVUdNU0dUTCgoInNubXBfYWxhcm0iLAotICAgICAgICAgICAgICAgICJyZWdpc3RlcmVkIGFsYXJtICVkLCB0ID0gJWQuJTAzZCwgZmxhZ3M9MHglMDJ4XG4iLAotICAgICAgICAgICAgICAgICgqcyktPmNsaWVudHJlZywgKCpzKS0+dC50dl9zZWMsICgoKnMpLT50LnR2X3VzZWMgLyAxMDAwKSwKKyAgICAgICAgICAgICAgICAicmVnaXN0ZXJlZCBhbGFybSAlZCwgdCA9ICVsZC4lMDNsZCwgZmxhZ3M9MHglMDJ4XG4iLAorICAgICAgICAgICAgICAgICgqcyktPmNsaWVudHJlZywgKGxvbmcpICgqcyktPnQudHZfc2VjLCAobG9uZykoKCpzKS0+dC50dl91c2VjIC8gMTAwMCksCiAgICAgICAgICAgICAgICAgKCpzKS0+ZmxhZ3MpKTsKIAogICAgIGlmIChzdGFydF9hbGFybXMpIHsKQEAgLTUxNiwxMiArNDc0LDEyIEBACiAgICAgc3RydWN0IHNubXBfYWxhcm0gKmE7CiAgICAgc3RydWN0IHRpbWV2YWwgIHRfbm93OwogICAgIGlmICgoYSA9IHNhX2ZpbmRfc3BlY2lmaWMoY2xpZW50cmVnKSkgIT0gTlVMTCkgewotICAgICAgICBnZXR0aW1lb2ZkYXkoJnRfbm93LCBOVUxMKTsKLSAgICAgICAgYS0+dF9sYXN0LnR2X3NlYyA9IHRfbm93LnR2X3NlYzsKLSAgICAgICAgYS0+dF9sYXN0LnR2X3VzZWMgPSB0X25vdy50dl91c2VjOwotICAgICAgICBhLT50X25leHQudHZfc2VjID0gMDsKLSAgICAgICAgYS0+dF9uZXh0LnR2X3VzZWMgPSAwOwotICAgICAgICBORVRTTk1QX1RJTUVSQUREKCZ0X25vdywgJmEtPnQsICZhLT50X25leHQpOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnRfbm93KTsKKyAgICAgICAgYS0+dF9sYXN0TS50dl9zZWMgPSB0X25vdy50dl9zZWM7CisgICAgICAgIGEtPnRfbGFzdE0udHZfdXNlYyA9IHRfbm93LnR2X3VzZWM7CisgICAgICAgIGEtPnRfbmV4dE0udHZfc2VjID0gMDsKKyAgICAgICAgYS0+dF9uZXh0TS50dl91c2VjID0gMDsKKyAgICAgICAgTkVUU05NUF9USU1FUkFERCgmdF9ub3csICZhLT50LCAmYS0+dF9uZXh0TSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KICAgICBERUJVR01TR1RMKCgic25tcF9hbGFybV9yZXNldCIsICJhbGFybSAlZCBub3QgZm91bmRcbiIsCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfYXBpLmMgYi9zbm1wbGliL3NubXBfYXBpLmMKaW5kZXggNDUyNjdmZC4uMTkxZGViZiAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2FwaS5jCisrKyBiL3NubXBsaWIvc25tcF9hcGkuYwpAQCAtMSwzICsxLDQgQEAKKwogLyogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0KHMpLiAgU2VlCiAgKiB0aGUgTmV0LVNOTVAncyBDT1BZSU5HIGZpbGUgZm9yIG1vcmUgZGV0YWlscyBhbmQgb3RoZXIgY29weXJpZ2h0cwogICogdGhhdCBtYXkgYXBwbHk6CkBAIC0zNyw2ICszOCw3IEBACiAgKiBzbm1wX2FwaS5jIC0gQVBJIGZvciBhY2Nlc3MgdG8gc25tcC4KICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CkBAIC01NiwxMSArNTgsNyBAQAogI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC04MSw5ICs3OSw2IEBACiAjaWYgSEFWRV9JT19ICiAjaW5jbHVkZSA8aW8uaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTEyNyw2ICsxMjIsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lci5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xhcmdlX2ZkX3NldC5oPgogI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oPgogI2VuZGlmCkBAIC0xNDAsOCArMTM2LDIwIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlcnZpY2UuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3ZhY20uaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHN0YXRpc3RpY3MsIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9hcGksIGxpYm5ldHNubXApCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob2lkX2lzX3N1YnRyZWUsIHNubXBfYXBpKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXB2M19wcm9iZV9jb250ZXh0RW5naW5lSURfcmZjNTM0Mywgc25tcF9hcGkpCisKKyNpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpICYmIGRlZmluZWQoSEFWRV9MSUJTU0wpCitleHRlcm4gdm9pZCBuZXRzbm1wX2NlcnRzX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBuZXRzbm1wX2NlcnRzX3NodXRkb3duKHZvaWQpOworI2VuZGlmCisKIHN0YXRpYyB2b2lkICAgICBfaW5pdF9zbm1wKHZvaWQpOwogCitzdGF0aWMgaW50ICAgICAgX3NubXBfc3RvcmVfbmVlZGVkID0gMDsKKwogI2luY2x1ZGUgIi4uL2FnZW50L21pYmdyb3VwL2FnZW50eC9wcm90b2NvbC5oIgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KICNpZm5kZWYgdGltZXJjbXAKQEAgLTE4Niw3ICsxOTQsNyBAQAogCiAjZGVmaW5lIERFRkFVTFRfQ09NTVVOSVRZICAgInB1YmxpYyIKICNkZWZpbmUgREVGQVVMVF9SRVRSSUVTCSAgICA1Ci0jZGVmaW5lIERFRkFVTFRfVElNRU9VVAkgICAgMTAwMDAwMEwKKyNkZWZpbmUgREVGQVVMVF9USU1FT1VUCSAgICBPTkVfU0VDCiAjZGVmaW5lIERFRkFVTFRfUkVNUE9SVAkgICAgU05NUF9QT1JUCiAjZGVmaW5lIERFRkFVTFRfRU5URVJQUklTRSAgZGVmYXVsdF9lbnRlcnByaXNlCiAjZGVmaW5lIERFRkFVTFRfVElNRQkgICAgMApAQCAtMjIxLDE4ICsyMjksNiBAQAogICAgIHNpemVfdCAgICAgICAgICBwYWNrZXRfbGVuLCBwYWNrZXRfc2l6ZTsKIH07CiAKLS8qCi0gKiBUaGUgbGlzdCBvZiBhY3RpdmUvb3BlbiBzZXNzaW9ucy4KLSAqLwotc3RydWN0IHNlc3Npb25fbGlzdCB7Ci0gICAgc3RydWN0IHNlc3Npb25fbGlzdCAqbmV4dDsKLSAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgbmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydDsKLSAgICBzdHJ1Y3Qgc25tcF9pbnRlcm5hbF9zZXNzaW9uICppbnRlcm5hbDsKLX07Ci0KLQotCiBzdGF0aWMgY29uc3QgY2hhciAqYXBpX2Vycm9yc1stU05NUEVSUl9NQVggKyAxXSA9IHsKICAgICAiTm8gZXJyb3IiLCAgICAgICAgICAgICAgICAgLyogU05NUEVSUl9TVUNDRVNTICovCiAgICAgIkdlbmVyaWMgZXJyb3IiLCAgICAgICAgICAgIC8qIFNOTVBFUlJfR0VORVJSICovCkBAIC0zMDAsNiArMjk2LDkgQEAKICAgICAiS2VyYmVyb3MgcmVsYXRlZCBlcnJvciIsICAgLyogU05NUEVSUl9LUkI1ICovCiAgICAgIlByb3RvY29sIGVycm9yIiwJCS8qIFNOTVBFUlJfUFJPVE9DT0wgKi8KICAgICAiT0lEIG5vdCBpbmNyZWFzaW5nIiwgICAgICAgLyogU05NUEVSUl9PSURfTk9OSU5DUkVBU0lORyAqLworICAgICJDb250ZXh0IHByb2JlIiwgICAgICAgICAgICAvKiBTTk1QRVJSX0pVU1RfQV9DT05URVhUX1BST0JFICovCisgICAgIkNvbmZpZ3VyYXRpb24gZGF0YSBmb3VuZCBidXQgdGhlIHRyYW5zcG9ydCBjYW4ndCBiZSBjb25maWd1cmVkIiwgLyogU05NUEVSUl9UUkFOU1BPUlRfTk9fQ09ORklHICovCisgICAgIlRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGZhaWxlZCIsIC8qIFNOTVBFUlJfVFJBTlNQT1JUX0NPTkZJR19FUlJPUiAqLwogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNlY0xldmVsTmFtZVtdID0gewpAQCAtMzQ5LDcgKzM0OCw2IEBACiAKIHN0YXRpYyB2b2lkICAgICBzbm1wdjNfY2FsY19tc2dfZmxhZ3MoaW50LCBpbnQsIHVfY2hhciAqKTsKIHN0YXRpYyBpbnQgICAgICBzbm1wdjNfdmVyaWZ5X21zZyhuZXRzbm1wX3JlcXVlc3RfbGlzdCAqLCBuZXRzbm1wX3BkdSAqKTsKLXN0YXRpYyBpbnQgICAgICBzbm1wdjNfYnVpbGRfcHJvYmVfcGR1KG5ldHNubXBfcGR1ICoqKTsKIHN0YXRpYyBpbnQgICAgICBzbm1wdjNfYnVpbGQodV9jaGFyICoqIHBrdCwgc2l6ZV90ICogcGt0X2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb2Zmc2V0LCBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1KTsKQEAgLTM2MCw3ICszNTgsOSBAQAogc3RhdGljIHZvaWQgICAgIHJlZ2lzdGVyX2RlZmF1bHRfaGFuZGxlcnModm9pZCk7CiBzdGF0aWMgc3RydWN0IHNlc3Npb25fbGlzdCAqc25tcF9zZXNzX2NvcHkobmV0c25tcF9zZXNzaW9uICogcHNzKTsKIGludCAgICAgICAgICAgICBzbm1wX2dldF9lcnJubyh2b2lkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zeW5jaF9yZXNldChuZXRzbm1wX3Nlc3Npb24gKiBub3R1c2VkKTsKK05FVFNOTVBfSU1QT1JUCiB2b2lkICAgICAgICAgICAgc25tcF9zeW5jaF9zZXR1cChuZXRzbm1wX3Nlc3Npb24gKiBub3R1c2VkKTsKIAogI2lmbmRlZiBIQVZFX1NUUkVSUk9SCkBAIC0zODUsMTIgKzM4NSwxNCBAQAogICAgICAgICByZXR1cm4gIkdFVCI7CiAgICAgY2FzZSBTTk1QX01TR19HRVRORVhUOgogICAgICAgICByZXR1cm4gIkdFVE5FWFQiOwotICAgIGNhc2UgU05NUF9NU0dfUkVTUE9OU0U6Ci0gICAgICAgIHJldHVybiAiUkVTUE9OU0UiOwotICAgIGNhc2UgU05NUF9NU0dfU0VUOgotICAgICAgICByZXR1cm4gIlNFVCI7CiAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgogICAgICAgICByZXR1cm4gIkdFVEJVTEsiOworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICBjYXNlIFNOTVBfTVNHX1NFVDoKKyAgICAgICAgcmV0dXJuICJTRVQiOworI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KKyAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgorICAgICAgICByZXR1cm4gIlJFU1BPTlNFIjsKICAgICBjYXNlIFNOTVBfTVNHX0lORk9STToKICAgICAgICAgcmV0dXJuICJJTkZPUk0iOwogICAgIGNhc2UgU05NUF9NU0dfVFJBUDI6CkBAIC02NjQsMTkgKzY2NiwxOSBAQAogICAgIC8qCiAgICAgICogZ2V0IHBzZXVkby1yYW5kb20gdmFsdWVzIGZvciByZXF1ZXN0IElEIGFuZCBtZXNzYWdlIElEIAogICAgICAqLwotICAgIC8qCi0gICAgICogZG9uJ3QgYWxsb3cgemVybyB2YWx1ZSB0byByZXBlYXQgaW5pdCAKLSAgICAgKi8KICNpZmRlZiBTVlI0CiAgICAgc3JhbmQ0OCh0di50dl9zZWMgXiB0di50dl91c2VjKTsKICAgICB0bXBSZXFpZCA9IGxyYW5kNDgoKTsKICAgICB0bXBNc2dpZCA9IGxyYW5kNDgoKTsKICNlbHNlCi0gICAgc3JhbmRvbSh0di50dl9zZWMgXiB0di50dl91c2VjKTsKKyAgICBzcmFuZG9tKCh1bnNpZ25lZCkodHYudHZfc2VjIF4gdHYudHZfdXNlYykpOwogICAgIHRtcFJlcWlkID0gcmFuZG9tKCk7CiAgICAgdG1wTXNnaWQgPSByYW5kb20oKTsKICNlbmRpZgogCisgICAgLyoKKyAgICAgKiBkb24ndCBhbGxvdyB6ZXJvIHZhbHVlIHRvIHJlcGVhdCBpbml0IAorICAgICAqLwogICAgIGlmICh0bXBSZXFpZCA9PSAwKQogICAgICAgICB0bXBSZXFpZCA9IDE7CiAgICAgaWYgKHRtcE1zZ2lkID09IDApCkBAIC02OTEsMTUgKzY5MywyMiBAQAogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXAiLCAidGNwIiwgIjoxNjEiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wIiwgInVkcDYiLCAiOjE2MSIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXAiLCAidGNwNiIsICI6MTYxIik7CisgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcCIsICJkdGxzdWRwIiwgIjoxMDE2MSIpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXAiLCAidGxzdGNwIiwgIjoxMDE2MSIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXAiLCAiaXB4IiwgIi8zNjg3OSIpOworCiAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAidWRwIiwgIjoxNjIiKTsKICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJzbm1wdHJhcCIsICJ0Y3AiLCAiOjE2MiIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgInVkcDYiLCAiOjE2MiIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgInRjcDYiLCAiOjE2MiIpOworICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgImR0bHN1ZHAiLCAiOjEwMTYyIik7CisgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgic25tcHRyYXAiLCAidGxzdGNwIiwgIjoxMDE2MiIpOwogICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoInNubXB0cmFwIiwgImlweCIsICIvMzY4ODAiKTsKIAogICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAogICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9IRVhfT1VUUFVUX0xFTkdUSCwgMTYpOworICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1JFVFJJRVMsCisgICAgICAgICAgICAgICAgICAgICAgIERFRkFVTFRfUkVUUklFUyk7CiAKICNpZmRlZiBORVRTTk1QX1VTRV9SRVZFUlNFX0FTTkVOQ09ESU5HCiAgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIApAQCAtNzcyLDYgKzc4MSwxNSBAQAogCQkgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0RJU0FCTEVfUEVSU0lTVEVOVF9MT0FEKTsKICAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXAiLCAibm9QZXJzaXN0ZW50U2F2ZSIsCiAJCSAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfRElTQUJMRV9QRVJTSVNURU5UX1NBVkUpOworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9CT09MRUFOLCAic25tcCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vQ29udGV4dEVuZ2luZUlERGlzY292ZXJ5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfTk9fRElTQ09WRVJZKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fSU5URUdFUiwgInNubXAiLCAidGltZW91dCIsCisJCSAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfVElNRU9VVCk7CisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0lOVEVHRVIsICJzbm1wIiwgInJldHJpZXMiLAorCQkgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1JFVFJJRVMpOworCiAgICAgbmV0c25tcF9yZWdpc3Rlcl9zZXJ2aWNlX2hhbmRsZXJzKCk7CiB9CiAKQEAgLTgyMCwxMCArODM4LDE5IEBACiAgICAgc25tcF9pbml0X3N0YXRpc3RpY3MoKTsKICAgICByZWdpc3Rlcl9taWJfaGFuZGxlcnMoKTsKICAgICByZWdpc3Rlcl9kZWZhdWx0X2hhbmRsZXJzKCk7CisgICAgaW5pdF9zbm1wX3RyYW5zcG9ydCgpOwogICAgIGluaXRfc25tcHYzKHR5cGUpOwogICAgIGluaXRfc25tcF9hbGFybSgpOwogICAgIGluaXRfc25tcF9lbnVtKHR5cGUpOwogICAgIGluaXRfdmFjbSgpOworI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKKyAgICBuZXRzbm1wX2NlcnRzX2luaXQoKTsKKyNlbmRpZgorI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX0JPT0xFQU4sICJzbm1wIiwgImRuc3NlY1dhcm5Pbmx5IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE5TU0VDX1dBUk5fT05MWSk7CisjZW5kaWYKIAogICAgIHJlYWRfcHJlbWliX2NvbmZpZ3MoKTsKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01JQl9MT0FESU5HCkBAIC04MzQsNiArODYxLDI4IEBACiAKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGluaXRfc25tcCgpICovCiAKKy8qKgorICogc2V0IGEgZmxhZyBpbmRpY2F0aW5nIHRoYXQgdGhlIHBlcnNpc3RlbnQgc3RvcmUgbmVlZHMgdG8gYmUgc2F2ZWQuCisgKi8KK3ZvaWQKK3NubXBfc3RvcmVfbmVlZGVkKGNvbnN0IGNoYXIgKnR5cGUpCit7CisgICAgREVCVUdNU0dUTCgoInNubXBfc3RvcmUiLCAic2V0dGluZyBuZWVkZWQgZmxhZy4uLlxuIikpOworICAgIF9zbm1wX3N0b3JlX25lZWRlZCA9IDE7Cit9CisKK3ZvaWQKK3NubXBfc3RvcmVfaWZfbmVlZGVkKHZvaWQpCit7CisgICAgaWYgKDAgPT0gX3NubXBfc3RvcmVfbmVlZGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgREVCVUdNU0dUTCgoInNubXBfc3RvcmUiLCAic3RvcmUgbmVlZGVkLi4uXG4iKSk7CisgICAgc25tcF9zdG9yZShuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKSk7CisgICAgX3NubXBfc3RvcmVfbmVlZGVkID0gMDsKK30KKwogdm9pZAogc25tcF9zdG9yZShjb25zdCBjaGFyICp0eXBlKQogewpAQCAtODYzLDYgKzkxMiw5IEBACiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORwogICAgIHNodXRkb3duX21pYigpOwogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLworI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkKKyAgICBuZXRzbm1wX2NlcnRzX3NodXRkb3duKCk7CisjZW5kaWYKICAgICB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMoKTsKICAgICBuZXRzbm1wX2NvbnRhaW5lcl9mcmVlX2xpc3QoKTsKICAgICBjbGVhcl9zZWNfbW9kKCk7CkBAIC04NzAsMTAgKzkyMiw5IEBACiAgICAgbmV0c25tcF9jbGVhcl90ZG9tYWluX2xpc3QoKTsKICAgICBjbGVhcl9jYWxsYmFjaygpOwogICAgIG5ldHNubXBfZHNfc2h1dGRvd24oKTsKLSAgICBjbGVhcl91c2VyX2xpc3QoKTsKICAgICBuZXRzbm1wX2NsZWFyX2RlZmF1bHRfdGFyZ2V0KCk7CiAgICAgbmV0c25tcF9jbGVhcl9kZWZhdWx0X2RvbWFpbigpOwotICAgIGZyZWVfZXRpbWVsaXN0KCk7CisgICAgc2h1dGRvd25fc2VjbW9kKCk7CiAKICAgICBpbml0X3NubXBfaW5pdF9kb25lICA9IDA7CiAgICAgX2luaXRfc25tcF9pbml0X2RvbmUgPSAwOwpAQCAtOTA3LDYgKzk1OCw4IEBACiAvKgogICogZXh0ZW5kZWQgb3BlbiAKICAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNubXBfb3Blbl9leCwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9PUEVOX0VYCiBuZXRzbm1wX3Nlc3Npb24gKgogc25tcF9vcGVuX2V4KG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbiwKICAgICAgICAgICAgICBpbnQgKCpmcHJlX3BhcnNlKQkobmV0c25tcF9zZXNzaW9uICosIG5ldHNubXBfdHJhbnNwb3J0ICosCkBAIC05NDEsNiArOTk0LDcgQEAKIAogICAgIHJldHVybiAoc2xwLT5zZXNzaW9uKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfT1BFTl9FWCAqLwogCiBzdGF0aWMgc3RydWN0IHNlc3Npb25fbGlzdCAqCiBfc2Vzc19jb3B5KG5ldHNubXBfc2Vzc2lvbiAqIGluX3Nlc3Npb24pCkBAIC05NTEsNyArMTAwNSw2IEBACiAgICAgc3RydWN0IHNubXBfc2VjbW9kX2RlZiAqc3B0cjsKICAgICBjaGFyICAgICAgICAgICAqY3A7CiAgICAgdV9jaGFyICAgICAgICAgKnVjcDsKLSAgICBzaXplX3QgICAgICAgICAgaTsKIAogICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IDA7CiAgICAgaW5fc2Vzc2lvbi0+c19lcnJubyA9IDA7CkBAIC0xMDU0LDM5ICsxMTA3LDYgQEAKICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1NFQ0xFVkVMKTsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlMZXZlbCA9PSAwKQotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfTk9BVVRIOwotCi0gICAgaWYgKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuID4gMCkgewotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuKTsKLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvID09IE5VTEwpIHsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7Ci0gICAgICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChnZXRfZGVmYXVsdF9hdXRodHlwZSgmaSkgIT0gTlVMTCkgewotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byA9Ci0gICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChnZXRfZGVmYXVsdF9hdXRodHlwZShOVUxMKSwgaSk7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuID0gaTsKLSAgICB9Ci0KLSAgICBpZiAoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4gPiAwKSB7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4pOwotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gPT0gTlVMTCkgewotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKLSAgICAgICAgICAgIHJldHVybiAoTlVMTCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKGdldF9kZWZhdWx0X3ByaXZ0eXBlKCZpKSAhPSBOVUxMKSB7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGdldF9kZWZhdWx0X3ByaXZ0eXBlKE5VTEwpLCBpKTsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4gPSBpOwotICAgIH0KLQogICAgIGlmIChpbl9zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID4gMCkgewogICAgICAgICB1Y3AgPSAodV9jaGFyICopIG1hbGxvYyhpbl9zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuKTsKICAgICAgICAgaWYgKHVjcCA9PSBOVUxMKSB7CkBAIC0xMTY0LDg2ICsxMTg0LDU2IEBACiAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbihjcCk7CiAgICAgfQogCi0gICAgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPD0gMCkgJiYKLSAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgTkVUU05NUF9EU19MSUJfQVVUSE1BU1RFUktFWSkpKSkgewotICAgICAgICBzaXplX3QgYnVmbGVuID0gc2l6ZW9mKHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSk7Ci0gICAgICAgIHVfY2hhciAqdG1wcCA9IHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleTsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuID0gMDsKLSAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KLSAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZidWZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4sIDAsIGNwKSkgewotICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsKCJlcnJvciBwYXJzaW5nIGF1dGhlbnRpY2F0aW9uIG1hc3RlciBrZXkiKTsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPD0gMCkgJiYKLSAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgTkVUU05NUF9EU19MSUJfQVVUSFBBU1NQSFJBU0UpKSB8fAotICAgICAgICAgKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICBORVRTTk1QX0RTX0xJQl9QQVNTUEhSQVNFKSkpKSB7Ci0gICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA9IFVTTV9BVVRIX0tVX0xFTjsKLSAgICAgICAgaWYgKGdlbmVyYXRlX0t1KHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGNwLCBzdHJsZW4oY3ApLAotICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgJnNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBzbm1wX3NldF9kZXRhaWwKLSAgICAgICAgICAgICAgICAoIkVycm9yIGdlbmVyYXRpbmcgYSBrZXkgKEt1KSBmcm9tIHRoZSBzdXBwbGllZCBhdXRoZW50aWNhdGlvbiBwYXNzIHBocmFzZS4iKTsKLSAgICAgICAgICAgIHNubXBfc2Vzc19jbG9zZShzbHApOwotICAgICAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgICAgIH0KKyAgICBpZiAoc2Vzc2lvbi0+cmV0cmllcyA9PSBTTk1QX0RFRkFVTFRfUkVUUklFUykgeworICAgICAgICBpbnQgcmV0cnkgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUkVUUklFUyk7CisgICAgICAgIGlmIChyZXRyeSA8IDApCisgICAgICAgICAgICBzZXNzaW9uLT5yZXRyaWVzID0gREVGQVVMVF9SRVRSSUVTOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXNzaW9uLT5yZXRyaWVzID0gcmV0cnk7CiAgICAgfQotCi0gICAgCi0gICAgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPD0gMCkgJiYKLSAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJCSAgICAgTkVUU05NUF9EU19MSUJfUFJJVk1BU1RFUktFWSkpKSkgewotICAgICAgICBzaXplX3QgYnVmbGVuID0gc2l6ZW9mKHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSk7Ci0gICAgICAgIHVfY2hhciAqdG1wcCA9IHNlc3Npb24tPnNlY3VyaXR5UHJpdktleTsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuID0gMDsKLSAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KLSAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZidWZsZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4sIDAsIGNwKSkgewotICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsKCJlcnJvciBwYXJzaW5nIGVuY3J5cHRpb24gbWFzdGVyIGtleSIpOwotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA8PSAwKSAmJgotICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCi0JCQkJICAgICBORVRTTk1QX0RTX0xJQl9QUklWUEFTU1BIUkFTRSkpIHx8Ci0gICAgICAgICAoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLQkJCQkgICAgIE5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UpKSkpIHsKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuID0gVVNNX1BSSVZfS1VfTEVOOwotICAgICAgICBpZiAoZ2VuZXJhdGVfS3Uoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgY3AsIHN0cmxlbihjcCksCi0gICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbAotICAgICAgICAgICAgICAgICgiRXJyb3IgZ2VuZXJhdGluZyBhIGtleSAoS3UpIGZyb20gdGhlIHN1cHBsaWVkIHByaXZhY3kgcGFzcyBwaHJhc2UuIik7Ci0gICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9CisgICAgaWYgKHNlc3Npb24tPnRpbWVvdXQgPT0gU05NUF9ERUZBVUxUX1RJTUVPVVQpIHsKKyAgICAgICAgaW50IHRpbWVvdXQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9USU1FT1VUKTsKKyAgICAgICAgaWYgKHRpbWVvdXQgPD0gMCkKKyAgICAgICAgICAgIHNlc3Npb24tPnRpbWVvdXQgPSBERUZBVUxUX1RJTUVPVVQ7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNlc3Npb24tPnRpbWVvdXQgPSB0aW1lb3V0ICogT05FX1NFQzsKICAgICB9Ci0KLSAgICBpZiAoc2Vzc2lvbi0+cmV0cmllcyA9PSBTTk1QX0RFRkFVTFRfUkVUUklFUykKLSAgICAgICAgc2Vzc2lvbi0+cmV0cmllcyA9IERFRkFVTFRfUkVUUklFUzsKLSAgICBpZiAoc2Vzc2lvbi0+dGltZW91dCA9PSBTTk1QX0RFRkFVTFRfVElNRU9VVCkKLSAgICAgICAgc2Vzc2lvbi0+dGltZW91dCA9IERFRkFVTFRfVElNRU9VVDsKICAgICBzZXNzaW9uLT5zZXNzaWQgPSBzbm1wX2dldF9uZXh0X3Nlc3NpZCgpOwogCiAgICAgc25tcF9jYWxsX2NhbGxiYWNrcyhTTk1QX0NBTExCQUNLX0xJQlJBUlksIFNOTVBfQ0FMTEJBQ0tfU0VTU0lPTl9JTklULAogICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbik7CiAKLSAgICBpZiAoKHNwdHIgPSBmaW5kX3NlY19tb2Qoc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbCkpICE9IE5VTEwgJiYKLSAgICAgICAgc3B0ci0+c2Vzc2lvbl9vcGVuICE9IE5VTEwpIHsKKyAgICBpZiAoKHNwdHIgPSBmaW5kX3NlY19tb2Qoc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbCkpICE9IE5VTEwpIHsKICAgICAgICAgLyoKLSAgICAgICAgICogc2VjdXJpdHkgbW9kdWxlIHNwZWNpZmljIGluaWFsaXphdGlvbiAKKyAgICAgICAgICogc2VjdXJpdHkgbW9kdWxlIHNwZWNpZmljIGNvcHlpbmcgCiAgICAgICAgICAqLwotICAgICAgICAoKnNwdHItPnNlc3Npb25fb3BlbikgKHNlc3Npb24pOworICAgICAgICBpZiAoc3B0ci0+c2Vzc2lvbl9zZXR1cCkgeworICAgICAgICAgICAgaW50IHJldCA9ICgqc3B0ci0+c2Vzc2lvbl9zZXR1cCkgKGluX3Nlc3Npb24sIHNlc3Npb24pOworICAgICAgICAgICAgaWYgKHJldCAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIHNlY3VyaXR5IG1vZHVsZSBzcGVjaWZpYyBvcGVuaW5nCisgICAgICAgICAqLworICAgICAgICBpZiAoc3B0ci0+c2Vzc2lvbl9vcGVuKSB7CisgICAgICAgICAgICBpbnQgcmV0ID0gKCpzcHRyLT5zZXNzaW9uX29wZW4pIChzZXNzaW9uKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAKKyAgICAvKiBBbnl0aGluZyBiZWxvdyB0aGlzIHBvaW50IHNob3VsZCBvbmx5IGJlIGRvbmUgaWYgdGhlIHRyYW5zcG9ydAorICAgICAgIGhhZCBubyBzYXkgaW4gdGhlIG1hdHRlciAqLworICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eUxldmVsID09IDApCisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9OT0FVVEg7CisKICAgICByZXR1cm4gKHNscCk7CiB9CiAKQEAgLTEyNjEsNiArMTI1MSwxMDEgQEAKICAgICByZXR1cm4gcHNsOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUFYzX1BST0JFX0NPTlRFWFRFTkdJTkVJRF9SRkM1MzQzCisvKioKKyAqIHByb2JlIGZvciBlbmdpbmVJRCB1c2luZyBSRkMgNTM0MyBwcm9iaW5nIG1lY2hhbmlzbXMKKyAqCisgKiBEZXNpZ25lZCB0byBiZSBhIGNhbGxiYWNrIGZvciB3aXRoaW4gYSBzZWN1cml0eSBtb2RlbCdzIHByb2JlX2VuZ2luZWlkIGhvb2suCisgKiBTaW5jZSBpdCdzIGxpa2VseSBtdWx0aXBsZSBzZWN1cml0eSBtb2RlbHMgd29uJ3QgaGF2ZSBlbmdpbmVJRHMgdG8KKyAqIHByb2JlIGZvciB0aGVuIHRoaXMgZnVuY3Rpb24gaXMgYSBjYWxsYmFjayBsaWtlbHkgdG8gYmUgdXNlZCBieQorICogbXVsdGlwbGUgZnV0dXJlIHNlY3VyaXR5IG1vZGVscy4gIEUuRy4gYm90aCBTU0ggYW5kIERUTFMuCisgKi8KK2ludAorc25tcHYzX3Byb2JlX2NvbnRleHRFbmdpbmVJRF9yZmM1MzQzKHZvaWQgKnNscCwgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uKSB7CisgICAgbmV0c25tcF9wZHUgICAgKnBkdSA9IE5VTEwsICpyZXNwb25zZSA9IE5VTEw7CisgICAgc3RhdGljIG9pZCAgICAgIHNubXBFbmdpbmVJRG9pZFtdICAgPSB7IDEsMyw2LDEsNiwzLDEwLDIsMSwxLDB9OworICAgIHN0YXRpYyBzaXplX3QgICBzbm1wRW5naW5lSURvaWRfbGVuID0gMTE7CisKKyAgICBzdGF0aWMgY2hhciAgICAgcHJvYmVFbmdpbmVJRFtdID0geyAoY2hhcikweDgwLCAwLCAwLCAwLCA2IH07CisgICAgc3RhdGljIHNpemVfdCAgIHByb2JlRW5naW5lSURfbGVuID0gc2l6ZW9mKHByb2JlRW5naW5lSUQpOworICAgIAorICAgIGludCBzdGF0dXM7CisKKyAgICBwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUKTsKKyAgICBpZiAoIXBkdSkKKyAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICBwZHUtPnZlcnNpb24gPSBTTk1QX1ZFUlNJT05fMzsKKyAgICAvKiBkb24ndCByZXF1aXJlIGEgc2VjdXJpdHlOYW1lICovCisgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TmFtZSkgeworICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cChzZXNzaW9uLT5zZWN1cml0eU5hbWUpOworICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbihwZHUtPnNlY3VyaXR5TmFtZSk7CisgICAgfQorICAgIHBkdS0+c2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX05PQVVUSDsKKyAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBzZXNzaW9uLT5zZWN1cml0eU1vZGVsOworICAgIHBkdS0+Y29udGV4dEVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAocHJvYmVFbmdpbmVJRCwgcHJvYmVFbmdpbmVJRF9sZW4pOworICAgIGlmICghcGR1LT5jb250ZXh0RW5naW5lSUQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBjbG9uZSBtZW1vcnkgZm9yIHJmYzUzNDMgcHJvYmVcbiIpOworICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorICAgIHBkdS0+Y29udGV4dEVuZ2luZUlETGVuID0gcHJvYmVFbmdpbmVJRF9sZW47CisgICAgCisgICAgc25tcF9hZGRfbnVsbF92YXIocGR1LCBzbm1wRW5naW5lSURvaWQsIHNubXBFbmdpbmVJRG9pZF9sZW4pOworCisgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgInByb2JpbmcgZm9yIGVuZ2luZUlEIHVzaW5nIHJmYzUzNDMgbWV0aG9kcy4uLlxuIikpOworICAgIHNlc3Npb24tPmZsYWdzIHw9IFNOTVBfRkxBR1NfRE9OVF9QUk9CRTsgLyogcHJldmVudCByZWN1cnNpb24gKi8KKyAgICBzdGF0dXMgPSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc2xwLCBwZHUsICZyZXNwb25zZSk7CisKKyAgICBpZiAoKHJlc3BvbnNlID09IE5VTEwpIHx8IChzdGF0dXMgIT0gU1RBVF9TVUNDRVNTKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHJmYzUzNDMgY29udGV4dEVuZ2luZUlEIHByb2JpbmdcbiIpOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIC8qIGNoZWNrIHRoYXQgdGhlIHJlc3BvbnNlIG1ha2VzIHNlbnNlICovCisgICAgaWYgKE5VTEwgIT0gcmVzcG9uc2UtPnZhcmlhYmxlcyAmJgorICAgICAgICBOVUxMICE9IHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWUgJiYKKyAgICAgICAgc25tcF9vaWRfY29tcGFyZShyZXNwb25zZS0+dmFyaWFibGVzLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPm5hbWVfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBFbmdpbmVJRG9pZCwgc25tcEVuZ2luZUlEb2lkX2xlbikgPT0gMCAmJgorICAgICAgICBBU05fT0NURVRfU1RSID09IHJlc3BvbnNlLT52YXJpYWJsZXMtPnR5cGUgICYmCisgICAgICAgIE5VTEwgIT0gcmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsLnN0cmluZyAmJgorICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT52YWxfbGVuID4gMCkgeworICAgICAgICBzZXNzaW9uLT5jb250ZXh0RW5naW5lSUQgPQorICAgICAgICAgICAgbmV0c25tcF9tZW1kdXAocmVzcG9uc2UtPnZhcmlhYmxlcy0+dmFsLnN0cmluZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbF9sZW4pOworICAgICAgICBpZiAoIXNlc3Npb24tPmNvbnRleHRFbmdpbmVJRCkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCByZmM1MzQzIGNvbnRleHRFbmdpbmVJRCBwcm9iaW5nOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyogdGVjaG5pY2FsbHkgdGhlcmUgbGlrZWx5IGlzbid0IGEgc2VjdXJpdHlFbmdpbmVJRCBidXQganVzdAorICAgICAgICAgICBpbiBjYXNlIGFueW9uZSBnb2VzIGxvb2tpbmcgd2UgbWlnaHQgYXMgd2VsbCBoYXZlIG9uZSAqLworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEID0KKyAgICAgICAgICAgIG5ldHNubXBfbWVtZHVwKHJlc3BvbnNlLT52YXJpYWJsZXMtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT52YWxfbGVuKTsKKyAgICAgICAgaWYgKCFzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHJmYzUzNDMgc2VjdXJpdHlFbmdpbmVJRCBwcm9iaW5nOiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsZWRcbiIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9IHNlc3Npb24tPmNvbnRleHRFbmdpbmVJRExlbiA9CisgICAgICAgICAgICByZXNwb25zZS0+dmFyaWFibGVzLT52YWxfbGVuOworICAgICAgICAKKyAgICAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7CisgICAgICAgICAgICBzaXplX3QgaTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3Nfb3BlbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiICBwcm9iZSBmb3VuZCBlbmdpbmVJRDogICIpKTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuOyBpKyspCisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wX3Nlc3Nfb3BlbiIsICIlMDJ4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRFtpXSkpOworICAgICAgICAgICAgREVCVUdNU0coKCJzbm1wX3Nlc3Nfb3BlbiIsICJcbiIpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUFYzX1BST0JFX0NPTlRFWFRFTkdJTkVJRF9SRkM1MzQzICovCisKKwogLyoqCiAgKiBwcm9iZSBmb3IgcGVlciBlbmdpbmVJRAogICoKQEAgLTEyODAsMTYgKzEzNjUsMTcgQEAKIHNubXB2M19lbmdpbmVJRF9wcm9iZShzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHAsCiAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogaW5fc2Vzc2lvbikKIHsKLSAgICBuZXRzbm1wX3BkdSAgICAqcGR1ID0gTlVMTCwgKnJlc3BvbnNlID0gTlVMTDsKICAgICBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb247Ci0gICAgdW5zaWduZWQgaW50ICAgIGk7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKKyAgICBzdHJ1Y3Qgc25tcF9zZWNtb2RfZGVmICpzcHRyID0gTlVMTDsKIAogICAgIGlmIChzbHAgPT0gTlVMTCB8fCBzbHAtPnNlc3Npb24gPT0gTlVMTCkgewogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBzZXNzaW9uID0gc2xwLT5zZXNzaW9uOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybihzZXNzaW9uICE9IE5VTEwsIDApOworICAgIHNwdHIgPSBmaW5kX3NlY19tb2Qoc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbCk7CiAKICAgICAvKgogICAgICAqIElmIHdlIGFyZSBvcGVuaW5nIGEgVjMgc2Vzc2lvbiBhbmQgd2UgZG9uJ3Qga25vdyBlbmdpbmVJRCB3ZSBtdXN0IHByb2JlCkBAIC0xMjk3LDg1ICsxMzgzLDE0MCBAQAogICAgICAqIGxpc3Qgc28gdGhhdCB0aGUgcmVzcG9uc2UgY2FuIGhhbmRsZWQgY29ycmVjdGx5LiAKICAgICAgKi8KIAotICAgIGlmICgoc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX0RPTlRfUFJPQkUpID09IFNOTVBfRkxBR1NfRE9OVF9QUk9CRSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoc2Vzc2lvbi0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMykgewotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiA9PSAwKSB7Ci0gICAgICAgICAgICBpZiAoc25tcHYzX2J1aWxkX3Byb2JlX3BkdSgmcGR1KSAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgInVuYWJsZSB0byBjcmVhdGUgcHJvYmUgUERVXG4iKSk7CisgICAgaWYgKHNlc3Npb24tPnZlcnNpb24gPT0gU05NUF9WRVJTSU9OXzMgJiYKKyAgICAgICAgKDAgPT0gKHNlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19ET05UX1BST0JFKSkpIHsKKyAgICAgICAgaWYgKE5VTEwgIT0gc3B0ciAmJiBOVUxMICE9IHNwdHItPnByb2JlX2VuZ2luZWlkKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAicHJvYmluZyBmb3IgZW5naW5lSUQgdXNpbmcgc2VjdXJpdHkgbW9kZWwgY2FsbGJhY2suLi5cbiIpKTsKKyAgICAgICAgICAgIC8qIHNlY3VyaXR5IG1vZGVsIHNwZWNpZmljIG1lY2hhbmlzbSBvZiBkZXRlcm1pbmluZyBlbmdpbmVJRCAqLworICAgICAgICAgICAgc3RhdHVzID0gKCpzcHRyLT5wcm9iZV9lbmdpbmVpZCkgKHNscCwgaW5fc2Vzc2lvbik7CisgICAgICAgICAgICBpZiAoc3RhdHVzICE9IFNOTVBFUlJfU1VDQ0VTUykKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJwcm9iaW5nIGZvciBlbmdpbmVJRC4uLlxuIikpOwotICAgICAgICAgICAgc2Vzc2lvbi0+ZmxhZ3MgfD0gU05NUF9GTEFHU19ET05UX1BST0JFOyAvKiBwcmV2ZW50IHJlY3Vyc2lvbiAqLwotICAgICAgICAgICAgc3RhdHVzID0gc25tcF9zZXNzX3N5bmNoX3Jlc3BvbnNlKHNscCwgcGR1LCAmcmVzcG9uc2UpOwotCi0gICAgICAgICAgICBpZiAoKHJlc3BvbnNlID09IE5VTEwpICYmIChzdGF0dXMgPT0gU1RBVF9TVUNDRVNTKSkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IFNUQVRfRVJST1I7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoc3RhdHVzKSB7Ci0gICAgICAgICAgICBjYXNlIFNUQVRfU1VDQ0VTUzoKLSAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0lOVkFMSURfTVNHOyAvKiBYWD8/ICovCi0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXJyb3I6IGV4cGVjdGVkIFJlcG9ydCBhcyByZXNwb25zZSB0byBwcm9iZTogJXMgKCVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2VycnN0cmluZyhyZXNwb25zZS0+ZXJyc3RhdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzcG9uc2UtPmVycnN0YXQpKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU1RBVF9FUlJPUjogICAvKiB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0ZWQgLT4gUmVwb3J0ID09IFNUQVRfRVJST1IgKi8KLSAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1VOS05PV05fRU5HX0lEOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTVEFUX1RJTUVPVVQ6Ci0gICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9USU1FT1VUOwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX29wZW4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmFibGUgdG8gY29ubmVjdCB3aXRoIHJlbW90ZSBlbmdpbmU6ICVzICglZClcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcF9hcGlfZXJyc3RyaW5nKHNlc3Npb24tPnNfc25tcF9lcnJubyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vKSk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGlmIChzbHAtPnNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZXRlcm1pbmUgcmVtb3RlIGVuZ2luZSBJRFxuIikpOwotICAgICAgICAgICAgICAgIC8qIGNsZWFyIHRoZSBmbGFnIHNvIHRoYXQgcHJvYmUgb2NjdXJzIG9uIG5leHQgaW5mb3JtICovCi0gICAgICAgICAgICAgICAgc2Vzc2lvbi0+ZmxhZ3MgJj0gflNOTVBfRkxBR1NfRE9OVF9QUk9CRTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9TVUNDRVNTOwotICAgICAgICAgICAgaWYgKHNubXBfZ2V0X2RvX2RlYnVnZ2luZygpKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiICBwcm9iZSBmb3VuZCBlbmdpbmVJRDogICIpKTsKLSAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc2xwLT5zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuOyBpKyspCi0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHKCgic25tcF9zZXNzX29wZW4iLCAiJTAyeCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbHAtPnNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURbaV0pKTsKLSAgICAgICAgICAgICAgICBERUJVR01TRygoInNubXBfc2Vzc19vcGVuIiwgIlxuIikpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogaWYgYm9vdC90aW1lIHN1cHBsaWVkIHNldCBpdCBmb3IgdGhpcyBlbmdpbmVJRCAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChzZXNzaW9uLT5lbmdpbmVCb290cyB8fCBzZXNzaW9uLT5lbmdpbmVUaW1lKSB7Ci0gICAgICAgICAgICBzZXRfZW5naW5ldGltZShzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPmVuZ2luZUJvb3RzLCBzZXNzaW9uLT5lbmdpbmVUaW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKHNscC0+c2Vzc2lvbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1VOS05PV05fVVNFUl9OQU1FOyAgICAgICAvKiBYWD8/ICovCi0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLAotICAgICAgICAgICAgICAgICAgICAgICAgInNubXB2M19lbmdpbmVfcHJvYmUoKTogZmFpbGVkKDIpIHRvIGNyZWF0ZSBhIG5ldyB1c2VyIGZyb20gc2Vzc2lvblxuIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogWFhYOiBkZWZhdWx0IHRvIHRoZSBkZWZhdWx0IFJGQzUzNDMgY29udGV4dEVuZ2luZUlEIFByb2JlPyAqLwogICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIH0KICAgICB9CiAKKyAgICAvKgorICAgICAqIHNlZSBpZiB0aGVyZSBpcyBhIGhvb2sgdG8gY2FsbCBub3cgdGhhdCB3ZSdyZSBkb25lIHByb2JpbmcgZm9yIGFuCisgICAgICogZW5naW5lSUQKKyAgICAgKi8KKyAgICBpZiAoc3B0ciAmJiBzcHRyLT5wb3N0X3Byb2JlX2VuZ2luZWlkKSB7CisgICAgICAgIHN0YXR1cyA9ICgqc3B0ci0+cG9zdF9wcm9iZV9lbmdpbmVpZCkoc2xwLCBpbl9zZXNzaW9uKTsKKyAgICAgICAgaWYgKHN0YXR1cyAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKICAgICByZXR1cm4gMTsKIH0KIAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIG5ldHNubXBfc2Vzc19jb25maWdfdHJhbnNwb3J0CisgKgorICogUGFyYW1ldGVyczoKKyAqCSppbl9zZXNzaW9uCisgKgkqaW5fdHJhbnNwb3J0CisgKgorICogUmV0dXJuczoKKyAqICAgICAgU05NUEVSUl9TVUNDRVNTICAgICAgICAgICAgICAgICAgICAgLSBZYXkKKyAqICAgICAgU05NUEVSUl9HRU5FUlIgICAgICAgICAgICAgICAgICAgICAgLSBHZW5lcmljIEVycm9yCisgKiAgICAgIFNOTVBFUlJfVFJBTlNQT1JUX0NPTkZJR19FUlJPUiAgICAgIC0gVHJhbnNwb3J0IHJlamVjdGVkIGNvbmZpZworICogICAgICBTTk1QRVJSX1RSQU5TUE9SVF9OT19DT05GSUcgICAgICAgICAtIFRyYW5zcG9ydCBjYW4ndCBjb25maWcKKyAqLworaW50CituZXRzbm1wX3Nlc3NfY29uZmlnX3RyYW5zcG9ydChuZXRzbm1wX2NvbnRhaW5lciAqdHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0KQoreworICAgIC8qIE9wdGlvbmFsIHN1cHBsaW1lbnRhbCB0cmFuc3BvcnQgY29uZmlndXJhdGlvbiBpbmZvcm1hdGlvbiBhbmQKKyAgICAgICBmaW5hbCBjYWxsIHRvIGFjdHVhbGx5IG9wZW4gdGhlIHRyYW5zcG9ydCAqLworICAgIGlmICh0cmFuc3BvcnRfY29uZmlndXJhdGlvbikgeworICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzIiwgImNvbmZpZ3VyaW5nIHRyYW5zcG9ydFxuIikpOworICAgICAgICBpZiAodHJhbnNwb3J0LT5mX2NvbmZpZykgeworICAgICAgICAgICAgbmV0c25tcF9pdGVyYXRvciAqaXRlcjsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2NvbmZpZyAqY29uZmlnX2RhdGE7CisgICAgICAgICAgICBpbnQgcmV0OwogCisgICAgICAgICAgICBpdGVyID0gQ09OVEFJTkVSX0lURVJBVE9SKHRyYW5zcG9ydF9jb25maWd1cmF0aW9uKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGl0ZXIpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvcihjb25maWdfZGF0YSA9IChuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcqKUlURVJBVE9SX0ZJUlNUKGl0ZXIpOyBjb25maWdfZGF0YTsKKyAgICAgICAgICAgICAgICBjb25maWdfZGF0YSA9IChuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcqKUlURVJBVE9SX05FWFQoaXRlcikpIHsKKyAgICAgICAgICAgICAgICByZXQgPSB0cmFuc3BvcnQtPmZfY29uZmlnKHRyYW5zcG9ydCwgY29uZmlnX2RhdGEtPmtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19kYXRhLT52YWx1ZSk7CisgICAgICAgICAgICAgICAgaWYgKHJldCkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9UUkFOU1BPUlRfQ09ORklHX0VSUk9SOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1RSQU5TUE9SVF9OT19DT05GSUc7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworIAorLyoqCisgKiBDb3BpZXMgY29uZmlndXJhdGlvbiBmcm9tIHRoZSBzZXNzaW9uIGFuZCBjYWxscyBmX29wZW4KKyAqIFRoaXMgZnVuY3Rpb24gY29waWVzIGFueSBjb25maWd1cmF0aW9uIHN0b3JlZCBpbiB0aGUgc2Vzc2lvbgorICogcG9pbnRlciB0byB0aGUgdHJhbnNwb3J0IGlmIGl0IGhhcyBhIGZfY29uZmlnIHBvaW50ZXIgYW5kIHRoZW4KKyAqIGNhbGxzIHRoZSB0cmFuc3BvcnQncyBmX29wZW4gZnVuY3Rpb24gdG8gYWN0dWFsbHkgb3BlbiB0aGUKKyAqIGNvbm5lY3Rpb24uCisgKgorICogQHBhcmFtIGluX3Nlc3Npb24gQSBwb2ludGVyIHRvIHRoZSBzZXNzaW9uIHRoYXQgY29uZmlnIGluZm9ybWF0aW9uIGlzIGluLgorICogQHBhcmFtIHRyYW5zcG9ydCBBIHBvaW50ZXIgdG8gdGhlIHRyYW5zcG9ydCB0byBjb25maWcvb3Blbi4KKyAqCisgKiBAcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUyA6IG9uIHN1Y2Nlc3MKKyAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogbmV0c25tcF9zZXNzX2NvbmZpZ190cmFuc3BvcnQKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJKmluX3Nlc3Npb24KKyAqCSppbl90cmFuc3BvcnQKKyAqCisgKiBSZXR1cm5zOgorICogICAgICBTTk1QRVJSX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAtIFlheQorICogICAgICBTTk1QRVJSX0dFTkVSUiAgICAgICAgICAgICAgICAgICAgICAtIEdlbmVyaWMgRXJyb3IKKyAqICAgICAgU05NUEVSUl9UUkFOU1BPUlRfQ09ORklHX0VSUk9SICAgICAgLSBUcmFuc3BvcnQgcmVqZWN0ZWQgY29uZmlnCisgKiAgICAgIFNOTVBFUlJfVFJBTlNQT1JUX05PX0NPTkZJRyAgICAgICAgIC0gVHJhbnNwb3J0IGNhbid0IGNvbmZpZworICovCitpbnQKK25ldHNubXBfc2Vzc19jb25maWdfYW5kX29wZW5fdHJhbnNwb3J0KG5ldHNubXBfc2Vzc2lvbiAqaW5fc2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0cmFuc3BvcnQpCit7CisgICAgaW50IHJjOworICAgIAorICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3MiLCAib3BlbmluZyB0cmFuc3BvcnQ6ICV4XG4iLCB0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19PUEVORUQpKTsKKworICAgIC8qIGRvbid0IGRvdWJsZSBvcGVuICovCisgICAgaWYgKHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX09QRU5FRCkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIGlmICgocmMgPSBuZXRzbm1wX3Nlc3NfY29uZmlnX3RyYW5zcG9ydChpbl9zZXNzaW9uLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJhbnNwb3J0KSkgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IHJjOworICAgICAgICBpbl9zZXNzaW9uLT5zX2Vycm5vID0gMDsKKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0KKyAgICAgICAgCisgICAgaWYgKHRyYW5zcG9ydC0+Zl9vcGVuKQorICAgICAgICB0cmFuc3BvcnQgPSB0cmFuc3BvcnQtPmZfb3Blbih0cmFuc3BvcnQpOworCisgICAgaWYgKHRyYW5zcG9ydCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3MiLCAiY291bGRuJ3QgaW50ZXJwcmV0IHBlZXJuYW1lXG4iKSk7CisgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX0FERFJFU1M7CisgICAgICAgIGluX3Nlc3Npb24tPnNfZXJybm8gPSBlcnJubzsKKyAgICAgICAgc25tcF9zZXRfZGV0YWlsKGluX3Nlc3Npb24tPnBlZXJuYW1lKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfQkFEX0FERFJFU1M7CisgICAgfQorCisgICAgdHJhbnNwb3J0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX09QRU5FRDsKKyAgICBERUJVR01TR1RMKCgic25tcF9zZXNzIiwgImRvbmUgb3BlbmluZyB0cmFuc3BvcnQ6ICV4XG4iLCB0cmFuc3BvcnQtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19PUEVORUQpKTsKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogc25tcF9zZXNzX29wZW4KQEAgLTEzOTIsNzIgKzE1MzMsNzkgQEAKIHN0YXRpYyB2b2lkICAgICoKIF9zZXNzX29wZW4obmV0c25tcF9zZXNzaW9uICogaW5fc2Vzc2lvbikKIHsKLSAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHA7Ci0gICAgbmV0c25tcF9zZXNzaW9uICpzZXNzaW9uOwotICAgIGNoYXIgICAgICAgICAgICAqY2xpZW50YWRkcl9zYXZlID0gTlVMTDsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdHJhbnNwb3J0ID0gTlVMTDsKKyAgICBpbnQgcmM7CiAKICAgICBpbl9zZXNzaW9uLT5zX3NubXBfZXJybm8gPSAwOwogICAgIGluX3Nlc3Npb24tPnNfZXJybm8gPSAwOwogCiAgICAgX2luaXRfc25tcCgpOwogCi0gICAgaWYgKChzbHAgPSBzbm1wX3Nlc3NfY29weShpbl9zZXNzaW9uKSkgPT0gTlVMTCkgewotICAgICAgICByZXR1cm4gKE5VTEwpOwotICAgIH0KLSAgICBzZXNzaW9uID0gc2xwLT5zZXNzaW9uOwotICAgIHNscC0+dHJhbnNwb3J0ID0gTlVMTDsKKyAgICB7CisgICAgICAgIGNoYXIgKmNsaWVudGFkZHJfc2F2ZSA9IE5VTEw7CiAKLSAgICBpZiAoTlVMTCAhPSBzZXNzaW9uLT5sb2NhbG5hbWUpIHsKLSAgICAgICAgY2xpZW50YWRkcl9zYXZlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSKTsKLSAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0NMSUVOVF9BRERSLCBzZXNzaW9uLT5sb2NhbG5hbWUpOworICAgICAgICBpZiAoTlVMTCAhPSBpbl9zZXNzaW9uLT5sb2NhbG5hbWUpIHsKKyAgICAgICAgICAgIGNsaWVudGFkZHJfc2F2ZSA9CisgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIpOworICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5sb2NhbG5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGluX3Nlc3Npb24tPmZsYWdzICYgU05NUF9GTEFHU19TVFJFQU1fU09DS0VUKSB7CisgICAgICAgICAgICB0cmFuc3BvcnQgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbCgic25tcCIsIGluX3Nlc3Npb24tPnBlZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbl9zZXNzaW9uLT5sb2NhbF9wb3J0LCAidGNwLHRjcDYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9CisgICAgICAgICAgICAgICAgbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsKCJzbm1wIiwgaW5fc2Vzc2lvbi0+cGVlcm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPmxvY2FsX3BvcnQsICJ1ZHAsdWRwNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKE5VTEwgIT0gY2xpZW50YWRkcl9zYXZlKQorICAgICAgICAgICAgbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUiwgY2xpZW50YWRkcl9zYXZlKTsKICAgICB9CiAKLSAgICBpZiAoc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1NUUkVBTV9TT0NLRVQpIHsKLSAgICAgICAgc2xwLT50cmFuc3BvcnQgPQotCSAgbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsKCJzbm1wIiwgc2Vzc2lvbi0+cGVlcm5hbWUsCi0JCQkJCSBzZXNzaW9uLT5sb2NhbF9wb3J0LCAidGNwIiwgTlVMTCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgc2xwLT50cmFuc3BvcnQgPQotCSAgbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9mdWxsKCJzbm1wIiwgc2Vzc2lvbi0+cGVlcm5hbWUsCi0JCQkJCSBzZXNzaW9uLT5sb2NhbF9wb3J0LCAidWRwIiwgTlVMTCk7Ci0gICAgfQotCi0gICAgaWYgKE5VTEwgIT0gc2Vzc2lvbi0+bG9jYWxuYW1lKQotICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQ0xJRU5UX0FERFIsIGNsaWVudGFkZHJfc2F2ZSk7Ci0KLSAgICBpZiAoc2xwLT50cmFuc3BvcnQgPT0gTlVMTCkgeworICAgIGlmICh0cmFuc3BvcnQgPT0gTlVMTCkgewogICAgICAgICBERUJVR01TR1RMKCgiX3Nlc3Nfb3BlbiIsICJjb3VsZG4ndCBpbnRlcnByZXQgcGVlcm5hbWVcbiIpKTsKICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfQUREUkVTUzsKICAgICAgICAgaW5fc2Vzc2lvbi0+c19lcnJubyA9IGVycm5vOwotICAgICAgICBzbm1wX3NldF9kZXRhaWwoc2Vzc2lvbi0+cGVlcm5hbWUpOwotICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKKyAgICAgICAgc25tcF9zZXRfZGV0YWlsKGluX3Nlc3Npb24tPnBlZXJuYW1lKTsKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogCi0gICAgc2Vzc2lvbi0+cmN2TXNnTWF4U2l6ZSA9IHNscC0+dHJhbnNwb3J0LT5tc2dNYXhTaXplOwotCi0gICAgaWYgKCFzbm1wdjNfZW5naW5lSURfcHJvYmUoc2xwLCBpbl9zZXNzaW9uKSkgewotICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKKyAgICAvKiBPcHRpb25hbCBzdXBwbGltZW50YWwgdHJhbnNwb3J0IGNvbmZpZ3VyYXRpb24gaW5mb3JtYXRpb24gYW5kCisgICAgICAgZmluYWwgY2FsbCB0byBhY3R1YWxseSBvcGVuIHRoZSB0cmFuc3BvcnQgKi8KKyAgICBpZiAoKHJjID0gbmV0c25tcF9zZXNzX2NvbmZpZ19hbmRfb3Blbl90cmFuc3BvcnQoaW5fc2Vzc2lvbiwgdHJhbnNwb3J0KSkKKyAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgIHRyYW5zcG9ydCA9IE5VTEw7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBpZiAoY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKHNscC0+c2Vzc2lvbikgIT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVU5LTk9XTl9VU0VSX05BTUU7ICAgICAgIC8qIFhYPz8gKi8KLSAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwKLSAgICAgICAgICAgICAgICAgICAgIl9zZXNzX29wZW4oKTogZmFpbGVkKDIpIHRvIGNyZWF0ZSBhIG5ldyB1c2VyIGZyb20gc2Vzc2lvblxuIikpOwotICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7CisKKyNpZiBkZWZpbmVkKFNPX0JST0FEQ0FTVCkgJiYgZGVmaW5lZChTT0xfU09DS0VUKQorICAgIGlmICggaW5fc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1VEUF9CUk9BRENBU1QpIHsKKyAgICAgICAgaW50ICAgYiA9IDE7CisgICAgICAgIGludCAgIHJjOworCisgICAgICAgIHJjID0gc2V0c29ja29wdCh0cmFuc3BvcnQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX0JST0FEQ0FTVCwKKyAgICAgICAgICAgICAgICAgICAgICAgIChjaGFyICopJmIsIHNpemVvZihiKSk7CisKKyAgICAgICAgaWYgKCByYyAhPSAwICkgeworICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfQUREUkVTUzsgLyogZ29vZCBhcyBhbnk/ICovCisgICAgICAgICAgICBpbl9zZXNzaW9uLT5zX2Vycm5vID0gZXJybm87CisKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJfc2Vzc19vcGVuIiwgImNvdWxkbid0IGVuYWJsZSBVRFBfQlJPQURDQVNUXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQogICAgIH0KLSAgICAKLSAgICBzZXNzaW9uLT5mbGFncyAmPSB+U05NUF9GTEFHU19ET05UX1BST0JFOworI2VuZGlmCiAKLQotICAgIHJldHVybiAodm9pZCAqKSBzbHA7Ci19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBzbm1wX3Nlc3Nfb3BlbigpICovCi0KLQorICAgIHJldHVybiBzbm1wX3Nlc3NfYWRkKGluX3Nlc3Npb24sIHRyYW5zcG9ydCwgTlVMTCwgTlVMTCk7Cit9CiAKIC8qCiAgKiBFWFRFTkRFRCBTRVNTSU9OIEFQSSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCkBAIC0xNTUxLDcgKzE2OTksOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCkpCiB7CiAgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwOwotCisgICAgaW50IHJjOworICAgIAogICAgIF9pbml0X3NubXAoKTsKIAogICAgIGlmICh0cmFuc3BvcnQgPT0gTlVMTCkKQEAgLTE1NjMsOCArMTcxMiwyNCBAQAogICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKKyAgICAvKiBpZiB0aGUgdHJhbnNwb3J0IGhhc24ndCBiZWVuIGZ1bGx5IG9wZW5lZCB5ZXQsIG9wZW4gaXQgbm93ICovCisgICAgaWYgKChyYyA9IG5ldHNubXBfc2Vzc19jb25maWdfYW5kX29wZW5fdHJhbnNwb3J0KGluX3Nlc3Npb24sIHRyYW5zcG9ydCkpCisgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAodHJhbnNwb3J0LT5mX3NldHVwX3Nlc3Npb24pIHsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyAhPQorICAgICAgICAgICAgdHJhbnNwb3J0LT5mX3NldHVwX3Nlc3Npb24odHJhbnNwb3J0LCBpbl9zZXNzaW9uKSkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0cmFuc3BvcnQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisgICAgICAgIAorICAgICAgICAgICAgCiAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19hZGQiLCAiZmQgJWRcbiIsIHRyYW5zcG9ydC0+c29jaykpOwogCisKICAgICBpZiAoKHNscCA9IHNubXBfc2Vzc19jb3B5KGluX3Nlc3Npb24pKSA9PSBOVUxMKSB7CiAgICAgICAgIHRyYW5zcG9ydC0+Zl9jbG9zZSh0cmFuc3BvcnQpOwogICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHRyYW5zcG9ydCk7CkBAIC0xNTg0LDE5ICsxNzQ5LDEyIEBACiAKICAgICBpZiAoc2xwLT5zZXNzaW9uLT52ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8zKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3Nlc3NfYWRkIiwKLSAgICAgICAgICAgICAgICAgICAgImFkZGluZyB2MyBzZXNzaW9uIC0tIGVuZ2luZUlEIHByb2JlIG5vd1xuIikpOwotICAgICAgICBpZiAoIXNubXB2M19lbmdpbmVJRF9wcm9iZShzbHAsIGluX3Nlc3Npb24pKSB7CisgICAgICAgICAgICAgICAgICAgICJhZGRpbmcgdjMgc2Vzc2lvbiAtLSBtYXliZSBlbmdpbmVJRCBwcm9iZSBub3dcbiIpKTsKKyAgICAgICAgaWYgKCFzbm1wdjNfZW5naW5lSURfcHJvYmUoc2xwLCBzbHAtPnNlc3Npb24pKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZXNzX2FkZCIsICJlbmdpbmUgSUQgcHJvYmUgZmFpbGVkXG4iKSk7CiAgICAgICAgICAgICBzbm1wX3Nlc3NfY2xvc2Uoc2xwKTsKICAgICAgICAgICAgIHJldHVybiBOVUxMOwogICAgICAgICB9Ci0gICAgICAgIGlmIChjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oc2xwLT5zZXNzaW9uKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVU5LTk9XTl9VU0VSX05BTUU7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLAotICAgICAgICAgICAgICAgICAgICAgICAgInNubXBfc2Vzc19hZGQoKTogZmFpbGVkKDIpIHRvIGNyZWF0ZSBhIG5ldyB1c2VyIGZyb20gc2Vzc2lvblxuIikpOwotICAgICAgICAgICAgc25tcF9zZXNzX2Nsb3NlKHNscCk7Ci0gICAgICAgICAgICByZXR1cm4gTlVMTDsKLSAgICAgICAgfQogICAgIH0KIAogICAgIHNscC0+c2Vzc2lvbi0+ZmxhZ3MgJj0gflNOTVBfRkxBR1NfRE9OVF9QUk9CRTsKQEAgLTE2MzAsMjI1ICsxNzg4LDE3IEBACiAgICAgcmV0dXJuIHB2b2lkOwogfQogCi0KLQotLyoKLSAqIGNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOgotICogCi0gKiBjcmVhdGVzIGEgdXNlciBpbiB0aGUgdXNtIHRhYmxlIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIGEgc2Vzc2lvbi4KLSAqIElmIHRoZSB1c2VyIGFscmVhZHkgZXhpc3RzLCBpdCBpcyB1cGRhdGVkIHdpdGggdGhlIGN1cnJlbnQKLSAqIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlc3Npb24KLSAqIAotICogUGFyYW1ldGVyczoKLSAqIHNlc3Npb24gLS0gSU46IHBvaW50ZXIgdG8gdGhlIHNlc3Npb24gdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIHVzZXIuCi0gKiAKLSAqIFJldHVybnM6Ci0gKiBTTk1QRVJSX1NVQ0NFU1MKLSAqIFNOTVBFUlJfR0VORVJSIAotICovCiBpbnQKLWNyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uKQotewotICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyOwotICAgIGludCAgICAgICAgICAgICB1c2VyX2p1c3RfY3JlYXRlZCA9IDA7Ci0gICAgY2hhciAqY3A7CitjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbikgeworI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQorICAgIHJldHVybiB1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKHNlc3Npb24pOworI2Vsc2UKKyAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uIGNhbGxlZCB3aGVuIFVTTSB3YXNuJ3QgY29tcGlsZWQgaW4iKTsKKyAgICBuZXRzbm1wX2Fzc2VydCgwID09IDEpOworICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisjZW5kaWYKK30KIAotICAgIC8qCi0gICAgICogLSBkb24ndCBjcmVhdGUtYW5vdGhlci9jb3B5LWludG8gdXNlciBmb3IgdGhpcyBzZXNzaW9uIGJ5IGRlZmF1bHQKLSAgICAgKiAtIGJhaWwgbm93IChubyBlcnJvcikgaWYgd2UgZG9uJ3QgaGF2ZSBhbiBlbmdpbmVJRAotICAgICAqLwotICAgIGlmIChTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCA9PSAoc2Vzc2lvbi0+ZmxhZ3MgJiBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRCkgfHwKLSAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlNb2RlbCAhPSBTTk1QX1NFQ19NT0RFTF9VU00gfHwKLSAgICAgICAgc2Vzc2lvbi0+dmVyc2lvbiAhPSBTTk1QX1ZFUlNJT05fMyB8fAotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW4gPT0gMCB8fAotICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApCi0gICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Ci0KLSAgICBzZXNzaW9uLT5mbGFncyB8PSBTTk1QX0ZMQUdTX1VTRVJfQ1JFQVRFRDsKLQotICAgIC8qCi0gICAgICogbm93IHRoYXQgd2UgaGF2ZSB0aGUgZW5naW5lSUQsIGNyZWF0ZSBhbiBlbnRyeSBpbiB0aGUgVVNNIGxpc3QKLSAgICAgKiBmb3IgdGhpcyB1c2VyIHVzaW5nIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgc2Vzc2lvbiAKLSAgICAgKi8KLSAgICB1c2VyID0gdXNtX2dldF91c2VyX2Zyb21fbGlzdChzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzbV9nZXRfdXNlckxpc3QoKSwgMCk7Ci0gICAgaWYgKHVzZXIgPT0gTlVMTCkgewotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAiQnVpbGRpbmcgdXNlciAlcy4uLlxuIiwKLSAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKSk7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIHVzZXIgZG9lc24ndCBleGlzdCBzbyB3ZSBjcmVhdGUgYW5kIGFkZCBpdCAKLSAgICAgICAgICovCi0gICAgICAgIHVzZXIgPSAoc3RydWN0IHVzbVVzZXIgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdXNtVXNlcikpOwotICAgICAgICBpZiAodXNlciA9PSBOVUxMKQotICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotCi0gICAgICAgIC8qCi0gICAgICAgICAqIGNvcHkgaW4gdGhlIHNlY3VyaXR5TmFtZSAKLSAgICAgICAgICovCi0gICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eU5hbWUpIHsKLSAgICAgICAgICAgIHVzZXItPm5hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKLSAgICAgICAgICAgIHVzZXItPnNlY05hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKLSAgICAgICAgICAgIGlmICh1c2VyLT5uYW1lID09IE5VTEwgfHwgdXNlci0+c2VjTmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAvKgotICAgICAgICAgKiBjb3B5IGluIHRoZSBlbmdpbmVJRCAKLSAgICAgICAgICovCi0gICAgICAgIHVzZXItPmVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuKTsKLSAgICAgICAgaWYgKCF1c2VyLT5lbmdpbmVJRCkgewotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgfQotICAgICAgICB1c2VyLT5lbmdpbmVJRExlbiA9IHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW47Ci0KLSAgICAgICAgdXNlcl9qdXN0X2NyZWF0ZWQgPSAxOwotICAgIH0KLQotICAgIC8qCi0gICAgICogY29weSB0aGUgYXV0aCBwcm90b2NvbCAKLSAgICAgKi8KLSAgICBpZiAodXNlci0+YXV0aFByb3RvY29sID09IE5VTEwgJiYgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8gIT0gTlVMTCkgewotICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aFByb3RvY29sKTsKLSAgICAgICAgdXNlci0+YXV0aFByb3RvY29sID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW4pOwotICAgICAgICBpZiAodXNlci0+YXV0aFByb3RvY29sID09IE5VTEwpIHsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Ci0gICAgICAgIH0KLSAgICAgICAgdXNlci0+YXV0aFByb3RvY29sTGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG9MZW47Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjb3B5IHRoZSBwcml2IHByb3RvY29sIAotICAgICAqLwotICAgIGlmICh1c2VyLT5wcml2UHJvdG9jb2wgPT0gTlVMTCAmJiBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90byAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2UHJvdG9jb2wpOwotICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2wgPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbik7Ci0gICAgICAgIGlmICh1c2VyLT5wcml2UHJvdG9jb2wgPT0gTlVMTCkgewotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgfQotICAgICAgICB1c2VyLT5wcml2UHJvdG9jb2xMZW4gPSBzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90b0xlbjsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIGNvcHkgaW4gdGhlIGF1dGhlbnRpY2F0aW9uIEtleS4gIElmIG5vdCBsb2NhbGl6ZWQsIGxvY2FsaXplIGl0IAotICAgICAqLwotICAgIGlmICh1c2VyLT5hdXRoS2V5ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5ICE9IE5VTEwKLSAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuICE9IDApIHsKLSAgICAgICAgICAgIC8qIGFscmVhZHkgbG9jYWxpemVkIGtleSBwYXNzZWQgaW4uICB1c2UgaXQgKi8KLSAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoS2V5KTsKLSAgICAgICAgICAgIHVzZXItPmF1dGhLZXkgPSBuZXRzbm1wX21lbWR1cChzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleUxlbik7Ci0gICAgICAgICAgICBpZiAoIXVzZXItPmF1dGhLZXkpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZXItPmF1dGhLZXlMZW4gPSBzZXNzaW9uLT5zZWN1cml0eUF1dGhMb2NhbEtleUxlbjsKLSAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXkgIT0gTlVMTAotICAgICAgICAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aEtleSk7Ci0gICAgICAgICAgICB1c2VyLT5hdXRoS2V5ID0gKHVfY2hhciAqKSBjYWxsb2MoMSwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOwotICAgICAgICAgICAgaWYgKHVzZXItPmF1dGhLZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXNlci0+YXV0aEtleUxlbiA9IFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLOwotICAgICAgICAgICAgaWYgKGdlbmVyYXRlX2t1bCh1c2VyLT5hdXRoUHJvdG9jb2wsIHVzZXItPmF1dGhQcm90b2NvbExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4sIHVzZXItPmF1dGhLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5hdXRoS2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfQVVUSExPQ0FMSVpFREtFWSkpKSB7Ci0gICAgICAgICAgICBzaXplX3QgYnVmbGVuID0gVVNNX0FVVEhfS1VfTEVOOwotICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhLZXkpOwotICAgICAgICAgICAgdXNlci0+YXV0aEtleSA9ICh1X2NoYXIgKiltYWxsb2MoYnVmbGVuKTsgLyogbWF4IGxlbmd0aCBuZWVkZWQgKi8KLSAgICAgICAgICAgIHVzZXItPmF1dGhLZXlMZW4gPSAwOwotICAgICAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KLSAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ1c2VyLT5hdXRoS2V5LCAmYnVmbGVuLCAmdXNlci0+YXV0aEtleUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGNwKSkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLyoKLSAgICAgKiBjb3B5IGluIHRoZSBwcml2YWN5IEtleS4gIElmIG5vdCBsb2NhbGl6ZWQsIGxvY2FsaXplIGl0IAotICAgICAqLwotICAgIGlmICh1c2VyLT5wcml2S2V5ID09IE5VTEwpIHsKLSAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5ICE9IE5VTEwKLSAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuICE9IDApIHsKLSAgICAgICAgICAgIC8qIGFscmVhZHkgbG9jYWxpemVkIGtleSBwYXNzZWQgaW4uICB1c2UgaXQgKi8KLSAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2S2V5KTsKLSAgICAgICAgICAgIHVzZXItPnByaXZLZXkgPSBuZXRzbm1wX21lbWR1cChzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleUxlbik7Ci0gICAgICAgICAgICBpZiAoIXVzZXItPnByaXZLZXkpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4gPSBzZXNzaW9uLT5zZWN1cml0eVByaXZMb2NhbEtleUxlbjsKLSAgICAgICAgfSBlbHNlIGlmIChzZXNzaW9uLT5zZWN1cml0eVByaXZLZXkgIT0gTlVMTAotICAgICAgICAgICAgICAgICAgICYmIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiAhPSAwKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdktleSk7Ci0gICAgICAgICAgICB1c2VyLT5wcml2S2V5ID0gKHVfY2hhciAqKSBjYWxsb2MoMSwgVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0spOwotICAgICAgICAgICAgaWYgKHVzZXItPnByaXZLZXkgPT0gTlVMTCkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbiA9IFVTTV9MRU5HVEhfS1VfSEFTSEJMT0NLOwotICAgICAgICAgICAgaWYgKGdlbmVyYXRlX2t1bCh1c2VyLT5hdXRoUHJvdG9jb2wsIHVzZXItPmF1dGhQcm90b2NvbExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4sIHVzZXItPnByaXZLZXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5wcml2S2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUFJJVkxPQ0FMSVpFREtFWSkpKSB7Ci0gICAgICAgICAgICBzaXplX3QgYnVmbGVuID0gVVNNX1BSSVZfS1VfTEVOOwotICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZLZXkpOwotICAgICAgICAgICAgdXNlci0+cHJpdktleSA9ICh1X2NoYXIgKiltYWxsb2MoYnVmbGVuKTsgLyogbWF4IGxlbmd0aCBuZWVkZWQgKi8KLSAgICAgICAgICAgIHVzZXItPnByaXZLZXlMZW4gPSAwOwotICAgICAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KLSAgICAgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ1c2VyLT5wcml2S2V5LCAmYnVmbGVuLCAmdXNlci0+cHJpdktleUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIGNwKSkgewotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHVzZXJfanVzdF9jcmVhdGVkKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGFkZCB0aGUgdXNlciBpbnRvIHRoZSBkYXRhYmFzZSAKLSAgICAgICAgICovCi0gICAgICAgIHVzZXItPnVzZXJTdGF0dXMgPSBSU19BQ1RJVkU7Ci0gICAgICAgIHVzZXItPnVzZXJTdG9yYWdlVHlwZSA9IFNUX1JFQURPTkxZOwotICAgICAgICB1c21fYWRkX3VzZXIodXNlcik7Ci0gICAgfQotCi0gICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKLQotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBjcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24oKSAqLwogCiAvKgogICogIERvIGEgImRlZXAgZnJlZSgpIiBvZiBhIG5ldHNubXBfc2Vzc2lvbi4KQEAgLTE5MDYsNyArMTg1Niw3IEBACiAgICAgfQogCiAgICAgaXNwID0gc2xwLT5pbnRlcm5hbDsKLSAgICBzbHAtPmludGVybmFsID0gMDsKKyAgICBzbHAtPmludGVybmFsID0gTlVMTDsKIAogICAgIGlmIChpc3ApIHsKICAgICAgICAgbmV0c25tcF9yZXF1ZXN0X2xpc3QgKnJwLCAqb3JwOwpAQCAtMTkzMyw3ICsxODgzLDcgQEAKICAgICB9CiAKICAgICB0cmFuc3BvcnQgPSBzbHAtPnRyYW5zcG9ydDsKLSAgICBzbHAtPnRyYW5zcG9ydCA9IDA7CisgICAgc2xwLT50cmFuc3BvcnQgPSBOVUxMOwogCiAgICAgaWYgKHRyYW5zcG9ydCkgewogICAgICAgICB0cmFuc3BvcnQtPmZfY2xvc2UodHJhbnNwb3J0KTsKQEAgLTE5NDEsNyArMTg5MSw3IEBACiAgICAgfQogCiAgICAgc2VzcCA9IHNscC0+c2Vzc2lvbjsKLSAgICBzbHAtPnNlc3Npb24gPSAwOworICAgIHNscC0+c2Vzc2lvbiA9IE5VTEw7CiAKICAgICAvKgogICAgICAqIFRoZSBmb2xsb3dpbmcgaXMgbmVjZXNzYXJ5IHRvIGF2b2lkIG1lbW9yeSBsZWFrYWdlIHdoZW4gY2xvc2luZyBBZ2VudFggCkBAIC0yMDEwLDQ5ICsxOTYwLDYgQEAKICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGludAotc25tcHYzX2J1aWxkX3Byb2JlX3BkdShuZXRzbm1wX3BkdSAqKnBkdSkKLXsKLSAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlcjsKLQotICAgIC8qCi0gICAgICogY3JlYXRlIHRoZSBwZHUgCi0gICAgICovCi0gICAgaWYgKCFwZHUpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAqcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVCk7Ci0gICAgaWYgKCEoKnBkdSkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAoKnBkdSktPnZlcnNpb24gPSBTTk1QX1ZFUlNJT05fMzsKLSAgICAoKnBkdSktPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgiIik7Ci0gICAgKCpwZHUpLT5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4oKCpwZHUpLT5zZWN1cml0eU5hbWUpOwotICAgICgqcGR1KS0+c2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX05PQVVUSDsKLSAgICAoKnBkdSktPnNlY3VyaXR5TW9kZWwgPSBTTk1QX1NFQ19NT0RFTF9VU007Ci0KLSAgICAvKgotICAgICAqIGNyZWF0ZSB0aGUgZW1wdHkgdXNlciAKLSAgICAgKi8KLSAgICB1c2VyID0gdXNtX2dldF91c2VyKE5VTEwsIDAsICgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKLSAgICBpZiAodXNlciA9PSBOVUxMKSB7Ci0gICAgICAgIHVzZXIgPSAoc3RydWN0IHVzbVVzZXIgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdXNtVXNlcikpOwotICAgICAgICBpZiAodXNlciA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KCpwZHUpOwotICAgICAgICAgICAgKnBkdSA9IChuZXRzbm1wX3BkdSAqKSBOVUxMOwotICAgICAgICAgICAgcmV0dXJuIC0xOwotICAgICAgICB9Ci0gICAgICAgIHVzZXItPm5hbWUgPSBzdHJkdXAoKCpwZHUpLT5zZWN1cml0eU5hbWUpOwotICAgICAgICB1c2VyLT5zZWNOYW1lID0gc3RyZHVwKCgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKLSAgICAgICAgdXNlci0+YXV0aFByb3RvY29sTGVuID0gc2l6ZW9mKHVzbU5vQXV0aFByb3RvY29sKSAvIHNpemVvZihvaWQpOwotICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2wgPQotICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQodXNtTm9BdXRoUHJvdG9jb2wsIHVzZXItPmF1dGhQcm90b2NvbExlbik7Ci0gICAgICAgIHVzZXItPnByaXZQcm90b2NvbExlbiA9IHNpemVvZih1c21Ob1ByaXZQcm90b2NvbCkgLyBzaXplb2Yob2lkKTsKLSAgICAgICAgdXNlci0+cHJpdlByb3RvY29sID0KLSAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHVzbU5vUHJpdlByb3RvY29sLCB1c2VyLT5wcml2UHJvdG9jb2xMZW4pOwotICAgICAgICB1c21fYWRkX3VzZXIodXNlcik7Ci0gICAgfQotICAgIHJldHVybiAwOwotfQotCiBzdGF0aWMgdm9pZAogc25tcHYzX2NhbGNfbXNnX2ZsYWdzKGludCBzZWNfbGV2ZWwsIGludCBtc2dfY29tbWFuZCwgdV9jaGFyICogZmxhZ3MpCiB7CkBAIC0yMDk3LDEwICsyMDA0LDE2IEBACiAgICAgaWYgKHJwZHUtPmNvbnRleHROYW1lTGVuICE9IHBkdS0+Y29udGV4dE5hbWVMZW4gfHwKICAgICAgICAgbWVtY21wKHJwZHUtPmNvbnRleHROYW1lLCBwZHUtPmNvbnRleHROYW1lLCBwZHUtPmNvbnRleHROYW1lTGVuKSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgaWYgKHJwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4gIT0gcGR1LT5zZWN1cml0eUVuZ2luZUlETGVuIHx8CisKKyAgICAvKiB0dW5uZWxlZCB0cmFuc3BvcnRzIGRvbid0IGhhdmUgYSBzZWN1cml0eUVuZ2luZUlELi4uICB0aGF0J3MKKyAgICAgICBVU00gc3BlY2lmaWMgKGFuZCBtYXliZSBvdGhlciBmdXR1cmUgb25lcykgKi8KKyAgICBpZiAocGR1LT5zZWN1cml0eU1vZGVsID09IFNOTVBfU0VDX01PREVMX1VTTSAmJgorICAgICAgICAocnBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbiAhPSBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4gfHwKICAgICAgICAgbWVtY21wKHJwZHUtPnNlY3VyaXR5RW5naW5lSUQsIHBkdS0+c2VjdXJpdHlFbmdpbmVJRCwKLSAgICAgICAgICAgICAgIHBkdS0+c2VjdXJpdHlFbmdpbmVJRExlbikpCisgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4pKSkKICAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvKiB0aGUgc2VjdXJpdHlOYW1lIG11c3QgbWF0Y2ggdGhvdWdoIHJlZ2FyZGxlc3Mgb2Ygc2VjbW9kZWwgKi8KICAgICBpZiAocnBkdS0+c2VjdXJpdHlOYW1lTGVuICE9IHBkdS0+c2VjdXJpdHlOYW1lTGVuIHx8CiAgICAgICAgIG1lbWNtcChycGR1LT5zZWN1cml0eU5hbWUsIHBkdS0+c2VjdXJpdHlOYW1lLAogICAgICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4pKQpAQCAtMjEzNiw5ICsyMDQ5LDEzIEBACiAgICAgICAgIC8qCiAgICAgICAgICAqIEZhbGx0aHJvdWdoIAogICAgICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9OT1RJRllfT05MWQogICAgIGNhc2UgU05NUF9NU0dfR0VUOgogICAgIGNhc2UgU05NUF9NU0dfR0VUTkVYVDoKKyNlbmRpZiAvKiAhIE5FVFNOTVBfTk9USUZZX09OTFkgKi8KKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiAgICAgY2FzZSBTTk1QX01TR19TRVQ6CisjZW5kaWYgLyogIU5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwogICAgIGNhc2UgU05NUF9NU0dfSU5GT1JNOgogICAgICAgICBpZiAocGR1LT5lcnJzdGF0ID09IFNOTVBfREVGQVVMVF9FUlJTVEFUKQogICAgICAgICAgICAgcGR1LT5lcnJzdGF0ID0gMDsKQEAgLTIxNDYsNiArMjA2Myw3IEBACiAgICAgICAgICAgICBwZHUtPmVycmluZGV4ID0gMDsKICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT1RJRllfT05MWQogICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKICAgICAgICAgaWYgKHBkdS0+bWF4X3JlcGV0aXRpb25zIDwgMCkgewogICAgICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfUkVQRVRJVElPTlM7CkBAIC0yMTU2LDYgKzIwNzQsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICEgTkVUU05NUF9OT1RJRllfT05MWSAqLwogCiAgICAgY2FzZSBTTk1QX01TR19UUkFQOgogICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1YxX0lOX1YyOwpAQCAtMjIwNiwyMCArMjEyNSwzMCBAQAogICAgIGlmIChwZHUtPnNlY3VyaXR5TW9kZWwgPT0gU05NUF9ERUZBVUxUX1NFQ01PREVMKSB7CiAgICAgICAgIHBkdS0+c2VjdXJpdHlNb2RlbCA9IHNlc3Npb24tPnNlY3VyaXR5TW9kZWw7CiAgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TW9kZWwgPT0gU05NUF9ERUZBVUxUX1NFQ01PREVMKSB7Ci0gICAgICAgICAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBTTk1QX1NFQ19NT0RFTF9VU007CisgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJzbm1wX3NlY21vZHMiLCBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9TRUNNT0RFTCkpOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocGR1LT5zZWN1cml0eU1vZGVsIDw9IDApIHsKKyAgICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBTTk1QX1NFQ19NT0RFTF9VU007CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9Ci0gICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lTGVuID09IDAgJiYgcGR1LT5zZWN1cml0eU5hbWUgPT0gMCkgewotICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuID09IDApIHsKKyAgICBpZiAocGR1LT5zZWN1cml0eU5hbWVMZW4gPT0gMCAmJiBwZHUtPnNlY3VyaXR5TmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eU1vZGVsICE9IFNOTVBfU0VDX01PREVMX1RTTSAmJgorICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuID09IDApIHsKICAgICAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX1NFQ19OQU1FOwogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9Ci0gICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKHNlc3Npb24tPnNlY3VyaXR5TmFtZSk7Ci0gICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0dFTkVSUjsKLSAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TmFtZSkgeworICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4gPSBzZXNzaW9uLT5zZWN1cml0eU5hbWVMZW47CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgiIik7CisgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAoIiIpOwogICAgICAgICB9Ci0gICAgICAgIHBkdS0+c2VjdXJpdHlOYW1lTGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlOYW1lTGVuOwogICAgIH0KICAgICBpZiAocGR1LT5zZWN1cml0eUxldmVsID09IDApIHsKICAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5TGV2ZWwgPT0gMCkgewpAQCAtMjc5MCw3ICsyNzE5LDcgQEAKICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIG5ldHNubXBfcGR1ICpwZHUpCiB7CiAjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCi0gICAgdV9jaGFyICAgICAgICAgKmgwZSA9IDA7CisgICAgdV9jaGFyICAgICAgICAgKmgwZSA9IE5VTEw7CiAgICAgc2l6ZV90ICAgICAgICAgIHN0YXJ0X29mZnNldCA9ICpvZmZzZXQ7CiAgICAgbG9uZyAgICAgICAgICAgIHZlcnNpb247CiAgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKQEAgLTI4MTIsOSArMjc0MSwxMyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBGYWxsdGhyb3VnaCAKICAgICAgICAgICovCisjaWZuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CisjZW5kaWYgLyogISBORVRTTk1QX05PVElGWV9PTkxZICovCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgIGNhc2UgU05NUF9NU0dfU0VUOgorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgLyoKICAgICAgICAgICogYWxsIHZlcnNpb25zIHN1cHBvcnQgdGhlc2UgUERVIHR5cGVzIAogICAgICAgICAgKi8KQEAgLTI4NDksNiArMjc4Miw3IEBACiAgICAgICAgICAgICBwZHUtPmVycmluZGV4ID0gMDsKICAgICAgICAgYnJlYWs7CiAKKyNpZm5kZWYgTkVUU05NUF9OT1RJRllfT05MWQogICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKICAgICAgICAgLyoKICAgICAgICAgICogbm90IHN1cHBvcnRlZCBpbiBTTk1QdjEgYW5kIFNOTVBzZWMgCkBAIC0yODY4LDYgKzI4MDIsNyBAQAogICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qICEgTkVUU05NUF9OT1RJRllfT05MWSAqLwogCiAgICAgY2FzZSBTTk1QX01TR19UUkFQOgogICAgICAgICAvKgpAQCAtMjk1MSw3ICsyODg2LDYgQEAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKDAgPT0gc2Vzc2lvbi0+Y29tbXVuaXR5X2xlbikgewogICAgICAgICAgICAgICAgIFNOTVBfRlJFRShwZHUtPmNvbW11bml0eSk7Ci0gICAgICAgICAgICAgICAgcGR1LT5jb21tdW5pdHkgPSBOVUxMOwogICAgICAgICAgICAgfSBlbHNlIGlmIChwZHUtPmNvbW11bml0eV9sZW4gPT0gc2Vzc2lvbi0+Y29tbXVuaXR5X2xlbikgewogICAgICAgICAgICAgICAgIG1lbW1vdmUocGR1LT5jb21tdW5pdHksCiAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5jb21tdW5pdHksIHNlc3Npb24tPmNvbW11bml0eV9sZW4pOwpAQCAtMjk2OSw3ICsyOTAzLDcgQEAKICAgICAgICAgfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhTkVUU05NUF9OT19aRVJPTEVOR1RIX0NPTU1VTklUWSAqLwogCi0gICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX3NlbmQiLCAiQnVpbGRpbmcgU05NUHYlZCBtZXNzYWdlLi4uXG4iLAorICAgICAgICBERUJVR01TR1RMKCgic25tcF9zZW5kIiwgIkJ1aWxkaW5nIFNOTVB2JWxkIG1lc3NhZ2UuLi5cbiIsCiAgICAgICAgICAgICAgICAgICAgICgxICsgcGR1LT52ZXJzaW9uKSkpOwogI2lmZGVmIE5FVFNOTVBfVVNFX1JFVkVSU0VfQVNORU5DT0RJTkcKICAgICAgICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9SRVZFUlNFX0VOQ09ERSkpIHsKQEAgLTM1NTcsOCArMzQ5MSwxMCBAQAogICAgIGRhdGEgPSBhc25fcGFyc2Vfc2VxdWVuY2UoZGF0YSwgJmxlbmd0aCwgJnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoQVNOX1NFUVVFTkNFIHwgQVNOX0NPTlNUUlVDVE9SKSwgInZlcnNpb24iKTsKICAgICBpZiAoZGF0YSkgeworICAgICAgICBERUJVR0RVTVBIRUFERVIoInJlY3YiLCAiU05NUCBWZXJzaW9uIik7CiAgICAgICAgIGRhdGEgPQogICAgICAgICAgICAgYXNuX3BhcnNlX2ludChkYXRhLCAmbGVuZ3RoLCAmdHlwZSwgJnZlcnNpb24sIHNpemVvZih2ZXJzaW9uKSk7CisgICAgICAgIERFQlVHSU5ERU5UTEVTUygpOwogICAgICAgICBpZiAoIWRhdGEgfHwgdHlwZSAhPSBBU05fSU5URUdFUikgewogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfQkFEX1ZFUlNJT047CiAgICAgICAgIH0KQEAgLTM4NjAsOSArMzc5Niw3IEBACiAgICAgICAgICAgICBERUJVR0lOREVOVEFERCgtNCk7CiAgICAgICAgIH0KIAotICAgICAgICBpZiAobWFsbG9jYnVmKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKICAgICAgICAgcmV0dXJuIHJldF92YWw7CiAgICAgfQogCkBAIC0zODc1LDkgKzM4MDksNyBAQAogICAgIGlmIChkYXRhID09IE5VTEwpIHsKICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOQVNOUEFSU0VFUlJTKTsKICAgICAgICAgREVCVUdJTkRFTlRBREQoLTQpOwotICAgICAgICBpZiAobWFsbG9jYnVmKSB7Ci0gICAgICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKLSAgICAgICAgfQorICAgICAgICBTTk1QX0ZSRUUobWFsbG9jYnVmKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfQVNOX1BBUlNFX0VSUjsKICAgICB9CiAKQEAgLTM5MDAsMTUgKzM4MzIsMTEgQEAKICAgICBpZiAocmV0ICE9IFNOTVBFUlJfU1VDQ0VTUykgewogICAgICAgICBFUlJPUl9NU0coImVycm9yIHBhcnNpbmcgUERVIik7CiAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUyk7Ci0gICAgICAgIGlmIChtYWxsb2NidWYpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9BU05fUEFSU0VfRVJSOwogICAgIH0KIAotICAgIGlmIChtYWxsb2NidWYpIHsKLSAgICAgICAgU05NUF9GUkVFKG1hbGxvY2J1Zik7Ci0gICAgfQorICAgIFNOTVBfRlJFRShtYWxsb2NidWYpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBzbm1wdjNfcGFyc2UoKSAqLwogCkBAIC00MDIwLDEzICszOTQ4LDE3IEBACiAgICAgLyoKICAgICAgKiBmaW5kIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBjb3VudGVyICAKICAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTCiAgICAgbHRtcCA9IHNubXBfZ2V0X3N0YXRpc3RpYyhzdGF0X2luZCk7CisjZWxzZSAvKiAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVEFUSVNUSUNTICovCisgICAgbHRtcCA9IDE7CisjZW5kaWYgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RBVElTVElDUyAqLwogCiAgICAgLyoKICAgICAgKiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlIGVycm9yIGNvdW50ZXIgIAogICAgICAqLwogICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIGVycl92YXIsIGVycl92YXJfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fQ09VTlRFUiwgKHVfY2hhciAqKSAmIGx0bXAsIHNpemVvZihsdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9DT1VOVEVSLCAmIGx0bXAsIHNpemVvZihsdG1wKSk7CiAKICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgc25tcHYzX21ha2VfcmVwb3J0KCkgKi8KQEAgLTQxMjEsNiArNDA1MywxNCBAQAogI2VuZGlmCiAgICAgaW50ICAgICAgICAgICAgIHJlc3VsdCA9IC0xOwogCisgICAgc3RhdGljIG9pZCAgICAgIHNubXBFbmdpbmVJRG9pZFtdICAgPSB7IDEsMyw2LDEsNiwzLDEwLDIsMSwxLDB9OworICAgIHN0YXRpYyBzaXplX3QgICBzbm1wRW5naW5lSURvaWRfbGVuID0gMTE7CisKKyAgICBzdGF0aWMgY2hhciAgICAgb3VyRW5naW5lSURbU05NUF9TRUNfUEFSQU1fQlVGX1NJWkVdOworICAgIHN0YXRpYyBzaXplX3QgICBvdXJFbmdpbmVJRF9sZW4gPSBzaXplb2Yob3VyRW5naW5lSUQpOworCisgICAgbmV0c25tcF9wZHUgICAgKnBkdTIgPSBOVUxMOworCiAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gMDsKICAgICBzZXNzaW9uLT5zX2Vycm5vID0gMDsKIApAQCAtNDE0NSw3ICs0MDg1LDcgQEAKICAgICBjYXNlIFNOTVBfVkVSU0lPTl8yYzoKICNlbmRpZgogI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLCAiUGFyc2luZyBTTk1QdiVkIG1lc3NhZ2UuLi5cbiIsCisgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJQYXJzaW5nIFNOTVB2JWxkIG1lc3NhZ2UuLi5cbiIsCiAgICAgICAgICAgICAgICAgICAgICgxICsgcGR1LT52ZXJzaW9uKSkpOwogCiAgICAgICAgIC8qCkBAIC00MjQ0LDYgKzQxODQsMTIwIEBACiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgLyogSW1wbGVtZW50IFJGQzUzNDMgaGVyZSBmb3IgdHdvIHJlYXNvbnM6CisgICAgICAgICAgIDEpIEZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZSBpdCBoYW5kbGVzIHRoaXMgb3RoZXJ3aXNlCisgICAgICAgICAgICAgIGFsd2F5cyBhcHByb3ZlZCByZXF1ZXN0IGVhcmxpZXIuICBJdCBieXBhc3NlcyB0aGUgbmVlZAorICAgICAgICAgICAgICBmb3IgYXV0aG9yaXphdGlvbiB0byB0aGUgc25tcEVuZ2luZUlEIHNjYWxhciwgd2hpY2ggaXMKKyAgICAgICAgICAgICAgd2hhdCBpcyB3aGF0IFJGQzM0MTUgYXBwZW5kaXggQSBzcGVjaWVzIGFzIG9rLiAgTm90ZQorICAgICAgICAgICAgICB0aGF0IHdlIGhhdmVuJ3QgYnlwYXNzZWQgYXV0aGVudGljYXRpb24gc2luY2UgaWYgdGhlcmUKKyAgICAgICAgICAgICAgd2FzIGFuIGF1dGhlbnRpY2F0aW9uIGVyb3IgaXQgd291bGQgaGF2ZSBiZWVuIGhhbmRsZWQKKyAgICAgICAgICAgICAgYWJvdmUgaW4gdGhlIGlmKHJlc3VsdCkgcGFydCBhdCB0aGUgbGFzdGV0LgorICAgICAgICAgICAyKSBGcm9tIGFuIGFwcGxpY2F0aW9uIHBvaW50IG9mIHZpZXcgaWYgd2UgbGV0IHRoaXMgcmVxdWVzdAorICAgICAgICAgICAgICBnZXQgYWxsIHRoZSB3YXkgdG8gdGhlIGFwcGxpY2F0aW9uLCBpdCdkIHJlcXVpcmUgdGhhdAorICAgICAgICAgICAgICBhbGwgYXBwbGljYXRpb24gdHlwZXMgc3VwcG9ydGluZyBkaXNjb3ZlcnkgYWxzbyBmaXJlIHVwCisgICAgICAgICAgICAgIGEgbWluaW1hbCBhZ2VudCBpbiBvcmRlciB0byBoYW5kbGUganVzdCB0aGlzIHJlcXVlc3QKKyAgICAgICAgICAgICAgd2hpY2ggc2VlbXMgbGlrZSBvdmVya2lsbC4gIFRob3VnaCB0aGVyZSBpcyBubyBvdGhlcgorICAgICAgICAgICAgICBhcHBsaWNhdGlvbiB0eXBlcyB0aGF0IGN1cnJlbnRseSBuZWVkIGRpc2NvdmVyeSAoTlJzCisgICAgICAgICAgICAgIGFjY2VwdCBub3RpZmljYXRpb25zIGZyb20gY29udGV4dEVuZ2luZUlEcyB0aGF0IGRlcml2ZQorICAgICAgICAgICAgICBmcm9tIHRoZSBOTyBub3QgdGhlIE5SKS4gIEFsc28gYSBsYW1lIGV4Y3VzZSBmb3IgZG9pbmcKKyAgICAgICAgICAgICAgaXQgaGVyZS4KKyAgICAgICAgICAgMykgTGVzcyBpbXBvcnRhbnQgdGVjaG5pY2FsbHksIGJ1dCB0aGUgbmV0LXNubXAgYWdlbnQKKyAgICAgICAgICAgICAgZG9lc24ndCBjdXJyZW50bHkgaGFuZGxlIHJlZ2lzdHJhdGlvbnMgb2YgZGlmZmVyZW50CisgICAgICAgICAgICAgIGVuZ2luZUlEcyBlaXRoZXIgYW5kIGl0IHdvdWxkIGhhdmUgYmVlbiBhIGxvdCBtb3JlIHdvcmsKKyAgICAgICAgICAgICAgdG8gaW1wbGVtZW50IHRoZXJlIHNpbmNlIHdlJ2QgbmVlZCB0byBzdXBwb3J0IHRoYXQKKyAgICAgICAgICAgICAgZmlyc3QuIDotLyBTdXBwb3J0aW5nIG11bHRpcGxlIGNvbnRleHQgZW5naW5lSURzIHNob3VsZAorICAgICAgICAgICAgICBiZSBkb25lIGFueXdheSwgc28gaXQncyBub3QgYSB2YWxpZCBleGN1c2UgaGVyZS4KKyAgICAgICAgICAgNCkgVGhlcmUgaXMgYSBsb3QgbGVzcyB0byBkbyBpZiB3ZSB0cnVtcCB0aGUgYWdlbnQgYXQgdGhpcworICAgICAgICAgICAgICBwb2ludDsgSUUsIHRoZSBhZ2VudCBkb2VzIGEgbG90IG1vcmUgdW5uZWNlc3NhcnkKKyAgICAgICAgICAgICAgcHJvY2Vzc2luZyB3aGVuIHRoZSBvbmx5IHRoaW5nIHRoYXQgc2hvdWxkIGV2ZXIgYmUgaW4KKyAgICAgICAgICAgICAgdGhpcyBjb250ZXh0IGJ5IGRlZmluaXRpb24gaXMgdGhlIHNpbmdsZSBzY2FsYXIuCisgICAgICAgICovCisKKyAgICAgICAgLyogc3BlY2lhbCBSRkM1MzQzIGVuZ2luZUlEIGRpc2NvdmVyeSBlbmdpbmVJRCBjaGVjayAqLworICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfTk9fRElTQ09WRVJZKSAmJgorICAgICAgICAgICAgU05NUF9NU0dfUkVTUE9OU0UgICAgICAgIT0gcGR1LT5jb21tYW5kICYmCisgICAgICAgICAgICBOVUxMICAgICAgICAgICAgICAgICAgICAhPSBwZHUtPmNvbnRleHRFbmdpbmVJRCAmJgorICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURMZW4gPT0gNSAmJgorICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURbMF0gPT0gMHg4MCAmJgorICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURbMV0gPT0gMHgwMCAmJgorICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURbMl0gPT0gMHgwMCAmJgorICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURbM10gPT0gMHgwMCAmJgorICAgICAgICAgICAgcGR1LT5jb250ZXh0RW5naW5lSURbNF0gPT0gMHgwNikgeworCisgICAgICAgICAgICAvKiBkZWZpbmUgYSByZXN1bHQgc28gaXQgZG9lc24ndCBnZXQgcGFzdCB1cyBhdCB0aGlzIHBvaW50CisgICAgICAgICAgICAgICBhbmQgZ2V0cyBkcm9wcGVkIGJ5IGZ1dHVyZSBwYXJ0cyBvZiB0aGUgc3RhY2sgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IFNOTVBFUlJfSlVTVF9BX0NPTlRFWFRfUFJPQkU7CisKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdjNfY29udGV4dGlkIiwgInN0YXJ0aW5nIGNvbnRleHQgSUQgZGlzY292ZXJ5XG4iKSk7CisgICAgICAgICAgICAvKiBlbnN1cmUgZXhhY3RseSBvbmUgdmFyaWFibGUgKi8KKyAgICAgICAgICAgIGlmIChOVUxMICE9IHBkdS0+dmFyaWFibGVzICYmCisgICAgICAgICAgICAgICAgTlVMTCA9PSBwZHUtPnZhcmlhYmxlcy0+bmV4dF92YXJpYWJsZSAmJgorCisgICAgICAgICAgICAgICAgLyogaWYgaXQncyBhIEdFVCwgbWF0Y2ggaXQgZXhhY3RseSAqLworICAgICAgICAgICAgICAgICgoU05NUF9NU0dfR0VUID09IHBkdS0+Y29tbWFuZCAmJgorICAgICAgICAgICAgICAgICAgc25tcF9vaWRfY29tcGFyZShzbm1wRW5naW5lSURvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBFbmdpbmVJRG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgpID09IDApCisgICAgICAgICAgICAgICAgIC8qIGlmIGl0J3MgYSBHRVRORVhUIGVuc3VyZSBpdCdzIGxlc3MgdGhhbiB0aGUgZW5naW5lSUQgb2lkICovCisgICAgICAgICAgICAgICAgIHx8CisgICAgICAgICAgICAgICAgIChTTk1QX01TR19HRVRORVhUID09IHBkdS0+Y29tbWFuZCAmJgorICAgICAgICAgICAgICAgICAgc25tcF9vaWRfY29tcGFyZShzbm1wRW5naW5lSURvaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBFbmdpbmVJRG9pZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzLT5uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHUtPnZhcmlhYmxlcy0+bmFtZV9sZW5ndGgpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgKSkgeworCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNubXB2M19jb250ZXh0aWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIE9uZSBjb3JyZWN0IHZhcmlhYmxlIGZvdW5kXG4iKSk7CisKKyAgICAgICAgICAgICAgICAvKiBOb3RlOiB3ZSdyZSBleHBsaWN0bHkgbm90IGhhbmRsaW5nIGEgR0VUQlVMSy4gIERlYWwuICovCisKKyAgICAgICAgICAgICAgICAvKiBzZXQgdXAgdGhlIHJlc3BvbnNlICovCisgICAgICAgICAgICAgICAgcGR1MiA9IHNubXBfY2xvbmVfcGR1KHBkdSk7CisKKyAgICAgICAgICAgICAgICAvKiBmcmVlIHRoZSBjdXJyZW50IHZhcmJpbmQgKi8KKyAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZChwZHUyLT52YXJpYWJsZXMpOworCisgICAgICAgICAgICAgICAgLyogc2V0IHRoZSB2YXJpYWJsZXMgKi8KKyAgICAgICAgICAgICAgICBwZHUyLT52YXJpYWJsZXMgPSBOVUxMOworICAgICAgICAgICAgICAgIHBkdTItPmNvbW1hbmQgPSBTTk1QX01TR19SRVNQT05TRTsKKyAgICAgICAgICAgICAgICBwZHUyLT5lcnJzdGF0ID0gMDsKKyAgICAgICAgICAgICAgICBwZHUyLT5lcnJpbmRleCA9IDA7CisKKyAgICAgICAgICAgICAgICBvdXJFbmdpbmVJRF9sZW4gPQorICAgICAgICAgICAgICAgICAgICBzbm1wdjNfZ2V0X2VuZ2luZUlEKCh1X2NoYXIqKW91ckVuZ2luZUlELCBvdXJFbmdpbmVJRF9sZW4pOworICAgICAgICAgICAgICAgIGlmICgwICE9IG91ckVuZ2luZUlEX2xlbikgeworCisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdjNfY29udGV4dGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiAgcmVzcG9uZGluZyB3aXRoIG91ciBlbmdpbmVJRFxuIikpOworCisgICAgICAgICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc25tcEVuZ2luZUlEb2lkLCBzbm1wRW5naW5lSURvaWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91ckVuZ2luZUlELCBvdXJFbmdpbmVJRF9sZW4pOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgLyogc2VuZCB0aGUgcmVzcG9uc2UgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKDAgPT0gc25tcF9zZXNzX3NlbmQoc2Vzc3AsIHBkdTIpKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzbm1wdjNfY29udGV4dGlkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIHNlbnQgaXQgb2ZmIVxuIikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdTIpOworICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic2VuZGluZyBhIHJlc3BvbnNlIHRvIHRoZSBjb250ZXh0IGVuZ2luZUlEIHByb2JlIGZhaWxlZFxuIik7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGdldCBvdXIgb3duIGVuZ2luZUlEIVxuIik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAicmVjZWl2ZWQgYW4gb2RkIGNvbnRleHQgZW5naW5lSUQgcHJvYmVcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBTTk1QRVJSX0JBRF9WRVJTSU9OOgogICAgICAgICBFUlJPUl9NU0coImVycm9yIHBhcnNpbmcgc25tcCBtZXNzYWdlIHZlcnNpb24iKTsKQEAgLTQzMDEsNiArNDM1NSw3IEBACiAgICAgc2l6ZV90ICAgICAgICAgIGZvdXI7CiAgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2cCA9IE5VTEw7CiAgICAgb2lkICAgICAgICAgICAgIG9iamlkW01BWF9PSURfTEVOXTsKKyAgICB1X2NoYXIgICAgICAgICAqcDsKIAogICAgIC8qCiAgICAgICogR2V0IHRoZSBQRFUgdHlwZSAKQEAgLTQzNzYsMTIgKzQ0MzEsMTYgQEAKICAgICAgICAgICogZmFsbHRocm91Z2ggCiAgICAgICAgICAqLwogCisjaWZuZGVmIE5FVFNOTVBfTk9USUZZX09OTFkKICAgICBjYXNlIFNOTVBfTVNHX0dFVDoKICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CiAgICAgY2FzZSBTTk1QX01TR19HRVRCVUxLOgorI2VuZGlmIC8qICEgTkVUU05NUF9OT1RJRllfT05MWSAqLworI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKyAgICBjYXNlIFNOTVBfTVNHX1NFVDoKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAgICAgY2FzZSBTTk1QX01TR19UUkFQMjoKICAgICBjYXNlIFNOTVBfTVNHX0lORk9STToKLSAgICBjYXNlIFNOTVBfTVNHX1NFVDoKICAgICAgICAgLyoKICAgICAgICAgICogUERVIGlzIG5vdCBhbiBTTk1QdjEgVFJBUCAKICAgICAgICAgICovCkBAIC00NDQyLDEwICs0NTAxLDEwIEBACiAgICAgd2hpbGUgKChpbnQpICpsZW5ndGggPiAwKSB7CiAgICAgICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdnB0ZW1wOwogICAgICAgICB2cHRlbXAgPSAobmV0c25tcF92YXJpYWJsZV9saXN0ICopIG1hbGxvYyhzaXplb2YoKnZwdGVtcCkpOwotICAgICAgICBpZiAoMCA9PSB2cHRlbXApIHsKKyAgICAgICAgaWYgKE5VTEwgPT0gdnB0ZW1wKSB7CiAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKDAgPT0gdnApIHsKKyAgICAgICAgaWYgKE5VTEwgPT0gdnApIHsKICAgICAgICAgICAgIHBkdS0+dmFyaWFibGVzID0gdnB0ZW1wOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdnAtPm5leHRfdmFyaWFibGUgPSB2cHRlbXA7CkBAIC00NDU1LDEwICs0NTE0LDEwIEBACiAgICAgICAgIHZwLT5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKICAgICAgICAgdnAtPnZhbC5zdHJpbmcgPSBOVUxMOwogICAgICAgICB2cC0+bmFtZV9sZW5ndGggPSBNQVhfT0lEX0xFTjsKLSAgICAgICAgdnAtPm5hbWUgPSAwOworICAgICAgICB2cC0+bmFtZSA9IE5VTEw7CiAgICAgICAgIHZwLT5pbmRleCA9IDA7Ci0gICAgICAgIHZwLT5kYXRhID0gMDsKLSAgICAgICAgdnAtPmRhdGFGcmVlSG9vayA9IDA7CisgICAgICAgIHZwLT5kYXRhID0gTlVMTDsKKyAgICAgICAgdnAtPmRhdGFGcmVlSG9vayA9IE5VTEw7CiAgICAgICAgIERFQlVHRFVNUFNFQ1RJT04oInJlY3YiLCAiVmFyQmluZCIpOwogICAgICAgICBkYXRhID0gc25tcF9wYXJzZV92YXJfb3AoZGF0YSwgb2JqaWQsICZ2cC0+bmFtZV9sZW5ndGgsICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ2cC0+dmFsX2xlbiwgJnZhcl92YWwsIGxlbmd0aCk7CkBAIC00NDczLDkgKzQ1MzIsMTEgQEAKICAgICAgICAgY2FzZSBBU05fSU5URUdFUjoKICAgICAgICAgICAgIHZwLT52YWwuaW50ZWdlciA9IChsb25nICopIHZwLT5idWY7CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IHNpemVvZihsb25nKTsKLSAgICAgICAgICAgIGFzbl9wYXJzZV9pbnQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9pbnQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAobG9uZyAqKSB2cC0+dmFsLmludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqdnAtPnZhbC5pbnRlZ2VyKSk7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQVNOX0NPVU5URVI6CiAgICAgICAgIGNhc2UgQVNOX0dBVUdFOgpAQCAtNDQ4Myw5ICs0NTQ0LDExIEBACiAgICAgICAgIGNhc2UgQVNOX1VJTlRFR0VSOgogICAgICAgICAgICAgdnAtPnZhbC5pbnRlZ2VyID0gKGxvbmcgKikgdnAtPmJ1ZjsKICAgICAgICAgICAgIHZwLT52YWxfbGVuID0gc2l6ZW9mKHVfbG9uZyk7Ci0gICAgICAgICAgICBhc25fcGFyc2VfdW5zaWduZWRfaW50KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2VfdW5zaWduZWRfaW50KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfbG9uZyAqKSB2cC0+dmFsLmludGVnZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKICAgICAgICAgY2FzZSBBU05fT1BBUVVFX0NPVU5URVI2NDoKQEAgLTQ0OTQsMzQgKzQ1NTcsNDUgQEAKICAgICAgICAgY2FzZSBBU05fQ09VTlRFUjY0OgogICAgICAgICAgICAgdnAtPnZhbC5jb3VudGVyNjQgPSAoc3RydWN0IGNvdW50ZXI2NCAqKSB2cC0+YnVmOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7Ci0gICAgICAgICAgICBhc25fcGFyc2VfdW5zaWduZWRfaW50NjQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NCh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb3VudGVyNjQgKikgdnAtPnZhbC4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3VudGVyNjQsIHZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKICAgICAgICAgY2FzZSBBU05fT1BBUVVFX0ZMT0FUOgogICAgICAgICAgICAgdnAtPnZhbC5mbG9hdFZhbCA9IChmbG9hdCAqKSB2cC0+YnVmOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBzaXplb2YoZmxvYXQpOwotICAgICAgICAgICAgYXNuX3BhcnNlX2Zsb2F0KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2VfZmxvYXQodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZwLT52YWwuZmxvYXRWYWwsIHZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBBU05fT1BBUVVFX0RPVUJMRToKICAgICAgICAgICAgIHZwLT52YWwuZG91YmxlVmFsID0gKGRvdWJsZSAqKSB2cC0+YnVmOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBzaXplb2YoZG91YmxlKTsKLSAgICAgICAgICAgIGFzbl9wYXJzZV9kb3VibGUodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9kb3VibGUodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+dmFsLmRvdWJsZVZhbCwgdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFTTl9PUEFRVUVfSTY0OgogICAgICAgICAgICAgdnAtPnZhbC5jb3VudGVyNjQgPSAoc3RydWN0IGNvdW50ZXI2NCAqKSB2cC0+YnVmOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gPSBzaXplb2Yoc3RydWN0IGNvdW50ZXI2NCk7Ci0gICAgICAgICAgICBhc25fcGFyc2Vfc2lnbmVkX2ludDY0KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKKyAgICAgICAgICAgIHAgPSBhc25fcGFyc2Vfc2lnbmVkX2ludDY0KHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cnVjdCBjb3VudGVyNjQgKikgdnAtPnZhbC5jb3VudGVyNjQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZigqdnAtPnZhbC5jb3VudGVyNjQpKTsKIAorICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMgKi8KLSAgICAgICAgY2FzZSBBU05fT0NURVRfU1RSOgogICAgICAgICBjYXNlIEFTTl9JUEFERFJFU1M6CisgICAgICAgICAgICBpZiAodnAtPnZhbF9sZW4gIT0gNCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworICAgICAgICBjYXNlIEFTTl9PQ1RFVF9TVFI6CiAgICAgICAgIGNhc2UgQVNOX09QQVFVRToKICAgICAgICAgY2FzZSBBU05fTlNBUDoKICAgICAgICAgICAgIGlmICh2cC0+dmFsX2xlbiA8IHNpemVvZih2cC0+YnVmKSkgewpAQCAtNDUzMiwxMiArNDYwNiwxNiBAQAogICAgICAgICAgICAgaWYgKHZwLT52YWwuc3RyaW5nID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBhc25fcGFyc2Vfc3RyaW5nKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwgdnAtPnZhbC5zdHJpbmcsCisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX3N0cmluZyh2YXJfdmFsLCAmbGVuLCAmdnAtPnR5cGUsIHZwLT52YWwuc3RyaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnAtPnZhbF9sZW4pOworICAgICAgICAgICAgaWYgKCFwKQorICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIEFTTl9PQkpFQ1RfSUQ6CiAgICAgICAgICAgICB2cC0+dmFsX2xlbiA9IE1BWF9PSURfTEVOOwotICAgICAgICAgICAgYXNuX3BhcnNlX29iamlkKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwgb2JqaWQsICZ2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBwID0gYXNuX3BhcnNlX29iamlkKHZhcl92YWwsICZsZW4sICZ2cC0+dHlwZSwgb2JqaWQsICZ2cC0+dmFsX2xlbik7CisgICAgICAgICAgICBpZiAoIXApCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgICAgdnAtPnZhbF9sZW4gKj0gc2l6ZW9mKG9pZCk7CiAgICAgICAgICAgICB2cC0+dmFsLm9iamlkID0gKG9pZCAqKSBtYWxsb2ModnAtPnZhbF9sZW4pOwogICAgICAgICAgICAgaWYgKHZwLT52YWwub2JqaWQgPT0gTlVMTCkgewpAQCAtNDU1NSw4ICs0NjMzLDEwIEBACiAgICAgICAgICAgICBpZiAodnAtPnZhbC5iaXRzdHJpbmcgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGFzbl9wYXJzZV9iaXRzdHJpbmcodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAorICAgICAgICAgICAgcCA9IGFzbl9wYXJzZV9iaXRzdHJpbmcodmFyX3ZhbCwgJmxlbiwgJnZwLT50eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cC0+dmFsLmJpdHN0cmluZywgJnZwLT52YWxfbGVuKTsKKyAgICAgICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJiYWQgdHlwZSByZXR1cm5lZCAoJXgpXG4iLCB2cC0+dHlwZSk7CkBAIC00NjA3LDE3ICs0Njg3LDYgQEAKICAgICB9CiAKICAgICAvKgotICAgICAqIGNoZWNrIHRoYXQgaXQgYWdyZWVzIHdpdGggZW5naW5lSUQgcmV0dXJuZWQgZnJvbSBVU00gYWJvdmUKLSAgICAgKiAqIG9ubHkgYSB3YXJuaW5nIGJlY2F1c2UgdGhpcyBjb3VsZCBiZSBsZWdhbCBpZiB3ZSBhcmUgYSBwcm94eQotICAgICAqLwotICAgIGlmIChwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4gIT0gcGR1LT5jb250ZXh0RW5naW5lSURMZW4gfHwKLSAgICAgICAgbWVtY21wKHBkdS0+c2VjdXJpdHlFbmdpbmVJRCwgcGR1LT5jb250ZXh0RW5naW5lSUQsCi0gICAgICAgICAgICAgICBwZHUtPnNlY3VyaXR5RW5naW5lSURMZW4pICE9IDApIHsKLSAgICAgICAgREVCVUdNU0dUTCgoInNjb3BlZFBEVV9wYXJzZSIsCi0gICAgICAgICAgICAgICAgICAgICJpbmNvbnNpc3RlbnQgZW5naW5lSUQgaW5mb3JtYXRpb24gaW4gbWVzc2FnZVxuIikpOwotICAgIH0KLQotICAgIC8qCiAgICAgICogcGFyc2UgY29udGV4dE5hbWUgZnJvbSBzY29wZWRQZHUKICAgICAgKi8KICAgICB0bXBfYnVmX2xlbiA9IFNOTVBfTUFYX0NPTlRFWFRfU0laRTsKQEAgLTQ3ODQsMTYgKzQ4NTMsNiBAQAogICAgICAgICAgICAgcmV0dXJuIDA7IC8qIHNfc25tcF9lcnJubyBhbHJlYWR5IHNldCAqLwogICAgIH0KIAotICAgIC8qCi0gICAgICogY2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gY3JlYXRlIGEgdjMgdXNlciBmcm9tIHRoZSBzZXNzaW9uIGluZm8KLSAgICAgKi8KLSAgICBpZiAoY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uKHNlc3Npb24pICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICBzZXNzaW9uLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX1VOS05PV05fVVNFUl9OQU1FOyAgLyogWFg/PyAqLwotICAgICAgICBERUJVR01TR1RMKCgic25tcF9hcGkiLAotICAgICAgICAgICAgICAgICAgICAic25tcF9zZW5kKCk6IGZhaWxlZCgyKSB0byBjcmVhdGUgYSBuZXcgdXNlciBmcm9tIHNlc3Npb25cbiIpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCiAgICAgaWYgKChwa3RidWYgPSAodV9jaGFyICopbWFsbG9jKDIwNDgpKSA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX2FzeW5jX3NlbmQiLAogICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbWFsbG9jIGluaXRpYWwgcGFja2V0IGJ1ZmZlclxuIikpOwpAQCAtNDgxNCw4ICs0ODczLDEwIEBACiAgICAgICovCiAgICAgaWYgKHBkdS0+dmFyaWFibGVzID09IE5VTEwpIHsKICAgICAgICAgc3dpdGNoIChwZHUtPmNvbW1hbmQpIHsKLSAgICAgICAgY2FzZSBTTk1QX01TR19HRVQ6CisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogICAgICAgICBjYXNlIFNOTVBfTVNHX1NFVDoKKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUOgogICAgICAgICBjYXNlIFNOTVBfTVNHX0dFVE5FWFQ6CiAgICAgICAgIGNhc2UgU05NUF9NU0dfR0VUQlVMSzoKICAgICAgICAgY2FzZSBTTk1QX01TR19SRVNQT05TRToKQEAgLTQ4NzQsNyArNDkzNSw3IEBACiAgICAgaWYgKHBkdS0+dmVyc2lvbiA9PSBTTk1QX1ZFUlNJT05fMyAmJiBzZXNzaW9uLT5zbmRNc2dNYXhTaXplICE9IDAgJiYgbGVuZ3RoID4gc2Vzc2lvbi0+c25kTXNnTWF4U2l6ZSkgewogICAgICAgICBERUJVR01TR1RMKCgic2Vzc19hc3luY19zZW5kIiwKICAgICAgICAgICAgICAgICAgICAgImxlbmd0aCBvZiBwYWNrZXQgKCVsdSkgZXhjZWVkcyBzZXNzaW9uIG1heGltdW0gKCVsdSlcbiIsCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgc2Vzc2lvbi0+c25kTXNnTWF4U2l6ZSkpOworICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgsICh1bnNpZ25lZCBsb25nKXNlc3Npb24tPnNuZE1zZ01heFNpemUpKTsKICAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9UT09fTE9ORzsKICAgICAgICAgU05NUF9GUkVFKHBrdGJ1Zik7CiAgICAgICAgIHJldHVybiAwOwpAQCAtNDg4OCwzNiArNDk0OSwyMSBAQAogICAgIGlmICh0cmFuc3BvcnQtPm1zZ01heFNpemUgIT0gMCAmJiBsZW5ndGggPiB0cmFuc3BvcnQtPm1zZ01heFNpemUpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfYXN5bmNfc2VuZCIsCiAgICAgICAgICAgICAgICAgICAgICJsZW5ndGggb2YgcGFja2V0ICglbHUpIGV4Y2VlZHMgdHJhbnNwb3J0IG1heGltdW0gKCVsdSlcbiIsCi0gICAgICAgICAgICAgICAgICAgIGxlbmd0aCwgdHJhbnNwb3J0LT5tc2dNYXhTaXplKSk7CisgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCwgKHVuc2lnbmVkIGxvbmcpdHJhbnNwb3J0LT5tc2dNYXhTaXplKSk7CiAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVE9PX0xPTkc7CiAgICAgICAgIFNOTVBfRlJFRShwa3RidWYpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKLSAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0RVTVBfUEFDS0VUKSkgewotICAgICAgICBpZiAodHJhbnNwb3J0LT5mX2ZtdGFkZHIgIT0gTlVMTCkgewotICAgICAgICAgICAgY2hhciAgICAgICAgICAgKmRlc3RfdHh0ID0KLSAgICAgICAgICAgICAgICB0cmFuc3BvcnQtPmZfZm10YWRkcih0cmFuc3BvcnQsIHBkdS0+dHJhbnNwb3J0X2RhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpOwotICAgICAgICAgICAgaWYgKGRlc3RfdHh0ICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJcblNlbmRpbmcgJWx1IGJ5dGVzIHRvICVzXG4iLCAodW5zaWduZWQgbG9uZylsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgZGVzdF90eHQpOwotICAgICAgICAgICAgICAgIFNOTVBfRlJFRShkZXN0X3R4dCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIlxuU2VuZGluZyAlbHUgYnl0ZXMgdG8gPFVOS05PV04+XG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgeGR1bXAocGFja2V0LCBsZW5ndGgsICIiKTsKLSAgICB9Ci0KICAgICAvKgogICAgICAqIFNlbmQgdGhlIG1lc3NhZ2UuICAKICAgICAgKi8KIAotICAgIHJlc3VsdCA9IHRyYW5zcG9ydC0+Zl9zZW5kKHRyYW5zcG9ydCwgcGFja2V0LCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwZHUtPnRyYW5zcG9ydF9kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKSk7CisgICAgREVCVUdNU0dUTCgoInNlc3NfcHJvY2Vzc19wYWNrZXQiLCAic2VuZGluZyBtZXNzYWdlIGlkIyVsZCByZXFpZCMlbGQgbGVuICUiCisgICAgICAgICAgICAgICAgTkVUU05NUF9QUkl6ICJ1XG4iLCBwZHUtPm1zZ2lkLCBwZHUtPnJlcWlkLCBsZW5ndGgpKTsKKyAgICByZXN1bHQgPSBuZXRzbm1wX3RyYW5zcG9ydF9zZW5kKHRyYW5zcG9ydCwgcGFja2V0LCBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHBkdS0+dHJhbnNwb3J0X2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihwZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCkpOwogCiAgICAgU05NUF9GUkVFKHBrdGJ1Zik7CiAKQEAgLTQ5NDMsNyArNDk4OSw3IEBACiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgfQogCi0gICAgICAgIGdldHRpbWVvZmRheSgmdHYsIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmdHYpOwogICAgICAgICBycC0+cGR1ID0gcGR1OwogICAgICAgICBycC0+cmVxdWVzdF9pZCA9IHBkdS0+cmVxaWQ7CiAgICAgICAgIHJwLT5tZXNzYWdlX2lkID0gcGR1LT5tc2dpZDsKQEAgLTQ5NTUsMTEgKzUwMDEsMTEgQEAKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHJwLT50aW1lb3V0ID0gc2Vzc2lvbi0+dGltZW91dDsKICAgICAgICAgfQotICAgICAgICBycC0+dGltZSA9IHR2OworICAgICAgICBycC0+dGltZU0gPSB0djsKICAgICAgICAgdHYudHZfdXNlYyArPSBycC0+dGltZW91dDsKICAgICAgICAgdHYudHZfc2VjICs9IHR2LnR2X3VzZWMgLyAxMDAwMDAwTDsKICAgICAgICAgdHYudHZfdXNlYyAlPSAxMDAwMDAwTDsKLSAgICAgICAgcnAtPmV4cGlyZSA9IHR2OworICAgICAgICBycC0+ZXhwaXJlTSA9IHR2OwogCiAgICAgICAgIC8qCiAgICAgICAgICAqIFhYIGxvY2sgc2hvdWxkIGJlIHBlciBzZXNzaW9uICEgCkBAIC01MDIwLDcgKzUwNjYsNyBAQAogICogRnJlZXMgdGhlIHZhcmlhYmxlIGFuZCBhbnkgbWFsbG9jJ2QgZGF0YSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgKi8KIHZvaWQKLXNubXBfZnJlZV92YXIobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKQorc25tcF9mcmVlX3Zhcl9pbnRlcm5hbHMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyKQogewogICAgIGlmICghdmFyKQogICAgICAgICByZXR1cm47CkBAIC01MDM3LDcgKzUwODMsMTIgQEAKICAgICAgICAgICAgIFNOTVBfRlJFRSh2YXItPmRhdGEpOwogICAgICAgICB9CiAgICAgfQorfQogCit2b2lkCitzbm1wX2ZyZWVfdmFyKG5ldHNubXBfdmFyaWFibGVfbGlzdCAqIHZhcikKK3sKKyAgICBzbm1wX2ZyZWVfdmFyX2ludGVybmFscyh2YXIpOwogICAgIGZyZWUoKGNoYXIgKikgdmFyKTsKIH0KIApAQCAtNTE0NiwyMCArNTE5NywxMiBAQAogCSAgICAgICJzZXNzaW9uICVwIGZkICVkIHBrdCAlcCBsZW5ndGggJWRcbiIsIHNlc3NwLAogCSAgICAgIHRyYW5zcG9ydC0+c29jaywgcGFja2V0cHRyLCBsZW5ndGgpKTsKIAotICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAotCQkJICAgICBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCkpIHsKLSAgICBpZiAodHJhbnNwb3J0LT5mX2ZtdGFkZHIgIT0gTlVMTCkgewotICAgICAgY2hhciAqYWRkcnR4dCA9IHRyYW5zcG9ydC0+Zl9mbXRhZGRyKHRyYW5zcG9ydCwgb3BhcXVlLCBvbGVuZ3RoKTsKLSAgICAgIGlmIChhZGRydHh0ICE9IE5VTEwpIHsKLQlzbm1wX2xvZyhMT0dfREVCVUcsICJcblJlY2VpdmVkICVkIGJ5dGVzIGZyb20gJXNcbiIsCi0JCSBsZW5ndGgsIGFkZHJ0eHQpOwotCVNOTVBfRlJFRShhZGRydHh0KTsKLSAgICAgIH0gZWxzZSB7Ci0Jc25tcF9sb2coTE9HX0RFQlVHLCAiXG5SZWNlaXZlZCAlZCBieXRlcyBmcm9tIDxVTktOT1dOPlxuIiwKLQkJIGxlbmd0aCk7Ci0gICAgICB9Ci0gICAgfQotICAgIHhkdW1wKHBhY2tldHB0ciwgbGVuZ3RoLCAiIik7CisgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCxORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCkpIHsKKyAgICAgIGNoYXIgKmFkZHJ0eHQgPSBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZyh0cmFuc3BvcnQsIG9wYXF1ZSwgb2xlbmd0aCk7CisgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJcblJlY2VpdmVkICVkIGJ5dGUgcGFja2V0IGZyb20gJXNcbiIsCisgICAgICAgICAgICAgICBsZW5ndGgsIGFkZHJ0eHQpOworICAgICAgU05NUF9GUkVFKGFkZHJ0eHQpOworICAgICAgeGR1bXAocGFja2V0cHRyLCBsZW5ndGgsICIiKTsKICAgfQogCiAgIC8qCkBAIC01MTY5LDkgKzUyMTIsNyBAQAogICBpZiAoaXNwLT5ob29rX3ByZSkgewogICAgIGlmIChpc3AtPmhvb2tfcHJlKHNwLCB0cmFuc3BvcnQsIG9wYXF1ZSwgb2xlbmd0aCkgPT0gMCkgewogICAgICAgREVCVUdNU0dUTCgoInNlc3NfcHJvY2Vzc19wYWNrZXQiLCAicHJlLXBhcnNlIGZhaWxcbiIpKTsKLSAgICAgIGlmIChvcGFxdWUgIT0gTlVMTCkgewotCVNOTVBfRlJFRShvcGFxdWUpOwotICAgICAgfQorICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7CiAgICAgICByZXR1cm4gLTE7CiAgICAgfQogICB9CkBAIC01MTgxLDIwICs1MjIyLDI4IEBACiAgIH0gZWxzZSB7CiAgICAgcGR1ID0gc25tcF9jcmVhdGVfc2Vzc19wZHUodHJhbnNwb3J0LCBvcGFxdWUsIG9sZW5ndGgpOwogICB9CisKICAgaWYgKHBkdSA9PSBOVUxMKSB7CiAgICAgc25tcF9sb2coTE9HX0VSUiwgInBkdSBmYWlsZWQgdG8gYmUgY3JlYXRlZFxuIik7Ci0gICAgaWYgKG9wYXF1ZSAhPSBOVUxMKSB7Ci0gICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKLSAgICB9CisgICAgU05NUF9GUkVFKG9wYXF1ZSk7CiAgICAgcmV0dXJuIC0xOwogICB9CiAKKyAgLyogaWYgdGhlIHRyYW5zcG9ydCB3YXMgYSBtYWdpYyB0dW5uZWwsIG1hcmsgdGhlIFBEVSBhcyBoYXZpbmcgY29tZQorICAgICB0aHJvdWdoIG9uZS4gKi8KKyAgaWYgKHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEKSB7CisgICAgICBwZHUtPmZsYWdzIHw9IFVDRF9NU0dfRkxBR19UVU5ORUxFRDsKKyAgfQorCiAgIGlmIChpc3AtPmhvb2tfcGFyc2UpIHsKICAgICByZXQgPSBpc3AtPmhvb2tfcGFyc2Uoc3AsIHBkdSwgcGFja2V0cHRyLCBsZW5ndGgpOwogICB9IGVsc2UgewogICAgIHJldCA9IHNubXBfcGFyc2Uoc2Vzc3AsIHNwLCBwZHUsIHBhY2tldHB0ciwgbGVuZ3RoKTsKICAgfQogCisgIERFQlVHTVNHVEwoKCJzZXNzX3Byb2Nlc3NfcGFja2V0IiwgInJlY2VpdmVkIG1lc3NhZ2UgaWQjJWxkIHJlcWlkIyVsZCBsZW4gIgorICAgICAgICAgICAgICAiJXVcbiIsIHBkdS0+bXNnaWQsIHBkdS0+cmVxaWQsIGxlbmd0aCkpOworCiAgIGlmIChyZXQgIT0gU05NUF9FUlJfTk9FUlJPUikgewogICAgIERFQlVHTVNHVEwoKCJzZXNzX3Byb2Nlc3NfcGFja2V0IiwgInBhcnNlIGZhaWxcbiIpKTsKICAgfQpAQCAtNTI2Miw3ICs1MzExLDkgQEAKIAkgKiBtc2dJZCBtdXN0IG1hdGNoIGZvciB2MyBtZXNzYWdlcy4gIAogCSAqLwogCWlmIChycC0+bWVzc2FnZV9pZCAhPSBwZHUtPm1zZ2lkKSB7Ci0JICBjb250aW51ZTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3Byb2Nlc3NfcGFja2V0IiwgInVubWF0Y2hlZCBtc2cgaWQ6ICVsZCAhPSAlbGRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBycC0+bWVzc2FnZV9pZCwgcGR1LT5tc2dpZCkpOworCSAgICBjb250aW51ZTsKIAl9CiAKIAkvKgpAQCAtNTM2MCwxOSArNTQxMSwxNCBAQAogCS8qCiAJICogU3VjY2Vzc2Z1bCwgc28gZGVsZXRlIHJlcXVlc3QuICAKIAkgKi8KLQlpZiAoaXNwLT5yZXF1ZXN0cyA9PSBycCkgewotCSAgaXNwLT5yZXF1ZXN0cyA9IHJwLT5uZXh0X3JlcXVlc3Q7Ci0JICBpZiAoaXNwLT5yZXF1ZXN0c0VuZCA9PSBycCkgewotCSAgICBpc3AtPnJlcXVlc3RzRW5kID0gTlVMTDsKLQkgIH0KLQl9IGVsc2UgeworCWlmIChvcnApCiAJICBvcnAtPm5leHRfcmVxdWVzdCA9IHJwLT5uZXh0X3JlcXVlc3Q7Ci0JICBpZiAoaXNwLT5yZXF1ZXN0c0VuZCA9PSBycCkgewotCSAgICBpc3AtPnJlcXVlc3RzRW5kID0gb3JwOwotCSAgfQotCX0KKyAgICAgICAgZWxzZQorCSAgaXNwLT5yZXF1ZXN0cyA9IHJwLT5uZXh0X3JlcXVlc3Q7CisgICAgICAgIGlmIChpc3AtPnJlcXVlc3RzRW5kID09IHJwKQorCSAgaXNwLT5yZXF1ZXN0c0VuZCA9IG9ycDsKIAlzbm1wX2ZyZWVfcGR1KHJwLT5wZHUpOwotCWZyZWUoKGNoYXIgKikgcnApOworCWZyZWUocnApOwogCS8qCiAJICogVGhlcmUgc2hvdWxkbid0IGJlIGFueSBtb3JlIHJlcXVlc3RzIHdpdGggdGhlIHNhbWUgcmVxaWQuICAKIAkgKi8KQEAgLTU0MzcsMTAgKzU0ODMsMjEgQEAKIHZvaWQKIHNubXBfcmVhZChmZF9zZXQgKiBmZHNldCkKIHsKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsZmRzZXQ7CisKKyAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsZmRzZXQsIEZEX1NFVFNJWkUpOworICAgIG5ldHNubXBfY29weV9mZF9zZXRfdG9fbGFyZ2VfZmRfc2V0KCZsZmRzZXQsIGZkc2V0KTsKKyAgICBzbm1wX3JlYWQyKCZsZmRzZXQpOworICAgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxmZHNldCk7Cit9CisKK3ZvaWQKK3NubXBfcmVhZDIobmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKICAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHA7CiAgICAgc25tcF9yZXNfbG9jayhNVF9MSUJSQVJZX0lELCBNVF9MSUJfU0VTU0lPTik7CiAgICAgZm9yIChzbHAgPSBTZXNzaW9uczsgc2xwOyBzbHAgPSBzbHAtPm5leHQpIHsKLSAgICAgICAgc25tcF9zZXNzX3JlYWQoKHZvaWQgKikgc2xwLCBmZHNldCk7CisgICAgICAgIHNubXBfc2Vzc19yZWFkMigodm9pZCAqKSBzbHAsIGZkc2V0KTsKICAgICB9CiAgICAgc25tcF9yZXNfdW5sb2NrKE1UX0xJQlJBUllfSUQsIE1UX0xJQl9TRVNTSU9OKTsKIH0KQEAgLTU0NTIsNyArNTUwOSw3IEBACiAgKiBCZXdhcmUgcmVjdXJzaXZlIHNlbmQgbWF5YmUgaW5zaWRlIHNubXBfcmVhZCBjYWxsYmFjayBmdW5jdGlvbi4gCiAgKi8KIGludAotX3Nlc3NfcmVhZCh2b2lkICpzZXNzcCwgZmRfc2V0ICogZmRzZXQpCitfc2Vzc19yZWFkKHZvaWQgKnNlc3NwLCBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0KQogewogICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscCA9IChzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICopIHNlc3NwOwogICAgIG5ldHNubXBfc2Vzc2lvbiAqc3AgPSBzbHAgPyBzbHAtPnNlc3Npb24gOiBOVUxMOwpAQCAtNTQ3NCwxMCArNTUzMSwxMSBAQAogICAgICAgICByZXR1cm4gMDsgCiAgICAgfQogCi0gICAgaWYgKCFmZHNldCB8fCAhKEZEX0lTU0VUKHRyYW5zcG9ydC0+c29jaywgZmRzZXQpKSkgeworICAgIGlmICghZmRzZXQgfHwgIShORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKHRyYW5zcG9ydC0+c29jaywgZmRzZXQpKSkgewogICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgIm5vdCByZWFkaW5nICVkIChmZHNldCAlcCBzZXQgJWQpXG4iLAogICAgICAgICAgICAgICAgICAgICB0cmFuc3BvcnQtPnNvY2ssIGZkc2V0LAotICAgICAgICAgICAgICAgICAgICBmZHNldCA/IEZEX0lTU0VUKHRyYW5zcG9ydC0+c29jaywgZmRzZXQpIDogLTkpKTsKKyAgICAgICAgICAgICAgICAgICAgZmRzZXQgPyBORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKHRyYW5zcG9ydC0+c29jaywgZmRzZXQpCisJCSAgICA6IC05KSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KIApAQCAtNTU2NCw4ICs1NjIyLDggQEAKICAgICAgICAgICAgICAqIFdlIGhhdmUgbm8gc2F2ZWQgcGFja2V0LiAgQWxsb2NhdGUgb25lLiAgCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICgoaXNwLT5wYWNrZXQgPSAodV9jaGFyICopIG1hbGxvYyhyeGJ1Zl9sZW4pKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJjYW4ndCBtYWxsb2MgJWQgYnl0ZXMgZm9yIHJ4YnVmXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJ4YnVmX2xlbikpOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiY2FuJ3QgbWFsbG9jICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1IGJ5dGVzIGZvciByeGJ1ZlxuIiwgcnhidWZfbGVuKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIHJ4YnVmID0gaXNwLT5wYWNrZXQ7CkBAIC01NTg1LDcgKzU2NDMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXRfbGVuICsgcnhidWZfbGVuKTsKICAgICAgICAgICAgICAgICBpZiAobmV3YnVmID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBtYWxsb2MgJWQgbW9yZSBmb3IgcnhidWYgKCVkIHRvdClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYW4ndCBtYWxsb2MgJSIgTkVUU05NUF9QUkl6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1IG1vcmUgZm9yIHJ4YnVmICglIiBORVRTTk1QX1BSSXogInUgdG90KVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnhidWZfbGVuLCBpc3AtPnBhY2tldF9sZW4gKyByeGJ1Zl9sZW4pKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKQEAgLTU2MDAsMjUgKzU2NTksMzUgQEAKICAgICAgICAgfQogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmICgocnhidWYgPSAodV9jaGFyICopIG1hbGxvYyhyeGJ1Zl9sZW4pKSA9PSBOVUxMKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImNhbid0IG1hbGxvYyAlZCBieXRlcyBmb3IgcnhidWZcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICByeGJ1Zl9sZW4pKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzZXNzX3JlYWQiLCAiY2FuJ3QgbWFsbG9jICUiIE5FVFNOTVBfUFJJegorICAgICAgICAgICAgICAgICAgICAgICAgInUgYnl0ZXMgZm9yIHJ4YnVmXG4iLCByeGJ1Zl9sZW4pKTsKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQogCi0gICAgbGVuZ3RoID0gdHJhbnNwb3J0LT5mX3JlY3YodHJhbnNwb3J0LCByeGJ1ZiwgcnhidWZfbGVuLCAmb3BhcXVlLCAmb2xlbmd0aCk7CisgICAgbGVuZ3RoID0gbmV0c25tcF90cmFuc3BvcnRfcmVjdih0cmFuc3BvcnQsIHJ4YnVmLCByeGJ1Zl9sZW4sICZvcGFxdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2xlbmd0aCk7CiAKICAgICBpZiAobGVuZ3RoID09IC0xICYmICEodHJhbnNwb3J0LT5mbGFncyAmIE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNKSkgewogICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9CQURfUkVDVkZST007CiAgICAgICAgIHNwLT5zX2Vycm5vID0gZXJybm87CiAgICAgICAgIHNubXBfc2V0X2RldGFpbChzdHJlcnJvcihlcnJubykpOwogICAgICAgICBTTk1QX0ZSRUUocnhidWYpOwotICAgICAgICBpZiAob3BhcXVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCisgICAgaWYgKDAgPT0gbGVuZ3RoICYmIHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0VNUFRZX1BLVCkgeworICAgICAgICAvKiB0aGlzIGFsbG93cyBmb3IgYSB0cmFuc3BvcnQgdGhhdCBuZWVkcyB0byByZXR1cm4gZnJvbQorICAgICAgICAgKiBwYWNrZXQgcHJvY2Vzc2luZyB0aGF0IGRvZXNuJ3QgbmVjZXNzYXJpbHkgaGF2ZSBhbnkKKyAgICAgICAgICogY29uc3VtYWJsZSBkYXRhIGluIGl0LiAqLworCisgICAgICAgIC8qIHJlc2V0IHRoZSBmbGFnIHNpbmNlIGl0J3MgYSBwZXItbWVzc2FnZSBmbGFnICovCisgICAgICAgIHRyYW5zcG9ydC0+ZmxhZ3MgJj0gKH5ORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0VNUFRZX1BLVCk7CisKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCiAgICAgLyoKICAgICAgKiBSZW1vdGUgZW5kIGNsb3NlZCBjb25uZWN0aW9uLiAgCiAgICAgICovCkBAIC01NjM4LDkgKzU3MDcsNyBAQAogICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgImZkICVkIGNsb3NlZFxuIiwgdHJhbnNwb3J0LT5zb2NrKSk7CiAgICAgICAgIHRyYW5zcG9ydC0+Zl9jbG9zZSh0cmFuc3BvcnQpOwogICAgICAgICBTTk1QX0ZSRUUoaXNwLT5wYWNrZXQpOwotICAgICAgICBpZiAob3BhcXVlICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCkBAIC01NjYyLDEwICs1NzI5LDExIEBACiAgICAgICAgICAgICAgICAgcGR1bGVuID0gYXNuX2NoZWNrX3BhY2tldChwcHRyLCBpc3AtPnBhY2tldF9sZW4pOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwgIiAgbG9vcCBwYWNrZXRfbGVuICVkLCBQRFUgbGVuZ3RoICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXRfbGVuLCBwZHVsZW4pKTsKLSAgICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICgocGR1bGVuID4gTUFYX1BBQ0tFVF9MRU5HVEgpIHx8IChwZHVsZW4gPCAwKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAiICBsb29wIHBhY2tldF9sZW4gJSIgTkVUU05NUF9QUkl6ICJ1LCBQRFUgbGVuZ3RoICUiCisgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BSSXogInVcbiIsIGlzcC0+cGFja2V0X2xlbiwgcGR1bGVuKSk7CisKKyAgICAgICAgICAgIGlmIChwZHVsZW4gPiBNQVhfUEFDS0VUX0xFTkdUSCkgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogSWxsZWdhbCBsZW5ndGgsIGRyb3AgdGhlIGNvbm5lY3Rpb24uICAKICAgICAgICAgICAgICAgICAgKi8KQEAgLTU2NzksOSArNTc0Nyw3IEBACiAJCX0KIAkJREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJmZCAlZCBjbG9zZWRcbiIsIHRyYW5zcG9ydC0+c29jaykpOwogICAgICAgICAgICAgICAgIHRyYW5zcG9ydC0+Zl9jbG9zZSh0cmFuc3BvcnQpOwotICAgICAgICAgICAgICAgIGlmIChvcGFxdWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7CiAgICAgICAgICAgICAgICAgLyoqIFhYWC1ya3M6IHdoeSBubyBTTk1QX0ZSRUUoaXNwLT5wYWNrZXQpOyA/PyAqLwogICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgIH0KQEAgLTU2OTQsMTUgKzU3NjAsMTQgQEAKICAgICAgICAgICAgICAgICAgKiBzdGFydCwgc2ltcGx5IHJldHVybiBhbmQgd2FpdCBmb3IgbW9yZSBkYXRhIHRvIGFycml2ZS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAicGt0IG5vdCBjb21wbGV0ZSAobmVlZCAlZCBnb3QgJWQgc28gZmFyKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZHVsZW4sIGlzcC0+cGFja2V0X2xlbikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwa3Qgbm90IGNvbXBsZXRlIChuZWVkICUiIE5FVFNOTVBfUFJJeiAidSBnb3QgJSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1BSSXogInUgc28gZmFyKVxuIiwgcGR1bGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0X2xlbikpOwogCiAgICAgICAgICAgICAgICAgaWYgKHBwdHIgIT0gaXNwLT5wYWNrZXQpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAvKiBvcGFxdWUgZnJlZWQgZm9yIHVzIG91dHNpZGUgb2YgbG9vcC4gKi8KIAotICAgICAgICAgICAgICAgIGlmIChvcGFxdWUgIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUob3BhcXVlKTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICB9CiAKQEAgLTU3NTEsMTcgKzU4MTYsMTYgQEAKIAkgICAgb2YgdGhlIG9wYXF1ZSBwb2ludGVyLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGZyZWUoKSB0aGUgb3BhcXVlCiAJICAgIHBvaW50ZXIgaXRzZWxmLiAgKi8KIAotCWlmIChvcGFxdWUgIT0gTlVMTCkgewotCSAgICBTTk1QX0ZSRUUob3BhcXVlKTsKLQl9CisJU05NUF9GUkVFKG9wYXF1ZSk7CiAKICAgICAgICAgaWYgKGlzcC0+cGFja2V0X2xlbiA+PSBNQVhJTVVNX1BBQ0tFVF9TSVpFKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogT2J2aW91c2x5IHRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiEgIAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAotICAgICAgICAgICAgICAgICAgICAgInRvbyBsYXJnZSBwYWNrZXRfbGVuID0gJWx1LCBkcm9wcGluZyBjb25uZWN0aW9uICVkXG4iLAotICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpKGlzcC0+cGFja2V0X2xlbiksIHRyYW5zcG9ydC0+c29jayk7CisgICAgICAgICAgICAgICAgICAgICAidG9vIGxhcmdlIHBhY2tldF9sZW4gPSAlIiBORVRTTk1QX1BSSXoKKyAgICAgICAgICAgICAgICAgICAgICJ1LCBkcm9wcGluZyBjb25uZWN0aW9uICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXRfbGVuLCB0cmFuc3BvcnQtPnNvY2spOwogICAgICAgICAgICAgdHJhbnNwb3J0LT5mX2Nsb3NlKHRyYW5zcG9ydCk7CiAgICAgICAgICAgICAvKiogWFhYLXJrczogd2h5IG5vIFNOTVBfRlJFRShpc3AtPnBhY2tldCk7ID8/ICovCiAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC01NzczLDcgKzU4MzcsNiBAQAogICAgICAgICAgICAgICogZm9vdHByaW50IGRvd24uCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIFNOTVBfRlJFRShpc3AtPnBhY2tldCk7Ci0gICAgICAgICAgICBpc3AtPnBhY2tldCA9IE5VTEw7CiAgICAgICAgICAgICBpc3AtPnBhY2tldF9zaXplID0gMDsKICAgICAgICAgICAgIGlzcC0+cGFja2V0X2xlbiA9IDA7CiAgICAgICAgICAgICByZXR1cm4gcmM7CkBAIC01Nzg3LDkgKzU4NTAsMTEgQEAKICAgICAgICAgICovCiAKICAgICAgICAgbWVtbW92ZShpc3AtPnBhY2tldCwgcHB0ciwgaXNwLT5wYWNrZXRfbGVuKTsKLSAgICAgICAgREVCVUdNU0dUTCgoInNlc3NfcmVhZCIsICJlbmQ6IG1lbW1vdmUoJXAsICVwLCAlZCk7IHJlYWxsb2MoJXAsICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgaXNwLT5wYWNrZXQsIHBwdHIsIGlzcC0+cGFja2V0X2xlbiwgaXNwLT5wYWNrZXQsCi0gICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0X2xlbikpOworICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZWFkIiwKKyAgICAgICAgICAgICAgICAgICAgImVuZDogbWVtbW92ZSglcCwgJXAsICUiIE5FVFNOTVBfUFJJeiAidSk7IHJlYWxsb2MoJXAsICUiCisgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfUFJJeiAidSlcbiIsCisgICAgICAgICAgICAgICAgICAgIGlzcC0+cGFja2V0LCBwcHRyLCBpc3AtPnBhY2tldF9sZW4sCisJCSAgICBpc3AtPnBhY2tldCwgaXNwLT5wYWNrZXRfbGVuKSk7CiAKICAgICAgICAgaWYgKChyeGJ1ZiA9ICh1X2NoYXIgKilyZWFsbG9jKGlzcC0+cGFja2V0LCBpc3AtPnBhY2tldF9sZW4pKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICAvKgpAQCAtNTgxOSw2ICs1ODg0LDE5IEBACiBpbnQKIHNubXBfc2Vzc19yZWFkKHZvaWQgKnNlc3NwLCBmZF9zZXQgKiBmZHNldCkKIHsKKyAgaW50IHJjOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsZmRzZXQ7CisgIAorICBuZXRzbm1wX2xhcmdlX2ZkX3NldF9pbml0KCZsZmRzZXQsIEZEX1NFVFNJWkUpOworICBuZXRzbm1wX2NvcHlfZmRfc2V0X3RvX2xhcmdlX2ZkX3NldCgmbGZkc2V0LCBmZHNldCk7CisgIHJjID0gc25tcF9zZXNzX3JlYWQyKHNlc3NwLCAmbGZkc2V0KTsKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfY2xlYW51cCgmbGZkc2V0KTsKKyAgcmV0dXJuIHJjOworfQorCitpbnQKK3NubXBfc2Vzc19yZWFkMih2b2lkICpzZXNzcCwgbmV0c25tcF9sYXJnZV9mZF9zZXQgKiBmZHNldCkKK3sKICAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpwc2w7CiAgICAgbmV0c25tcF9zZXNzaW9uICpwc3M7CiAgICAgaW50ICAgICAgICAgICAgIHJjOwpAQCAtNTgzMyw3ICs1OTExLDcgQEAKIH0KIAogCi0vKgorLyoqCiAgKiBSZXR1cm5zIGluZm8gYWJvdXQgd2hhdCBzbm1wIHJlcXVpcmVzIGZyb20gYSBzZWxlY3Qgc3RhdGVtZW50LgogICogbnVtZmRzIGlzIHRoZSBudW1iZXIgb2YgZmRzIGluIHRoZSBsaXN0IHRoYXQgYXJlIHNpZ25pZmljYW50LgogICogQWxsIGZpbGUgZGVzY3JpcHRvcnMgb3BlbmVkIGZvciBTTk1QIGFyZSBPUidkIGludG8gdGhlIGZkc2V0LgpAQCAtNTg1NCw1NSArNTkzMiwxMjEgQEAKICAqCiAgKiBzbm1wX3NlbGVjdF9pbmZvIHJldHVybnMgdGhlIG51bWJlciBvZiBvcGVuIHNvY2tldHMuICAoaS5lLiBUaGUgbnVtYmVyIG9mCiAgKiBzZXNzaW9ucyBvcGVuKQorICoKKyAqIEBzZWUgU2VlIGFsc28gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncygpLgogICovCi0KIGludAotc25tcF9zZWxlY3RfaW5mbyhpbnQgKm51bWZkcywKLSAgICAgICAgICAgICAgICAgZmRfc2V0ICogZmRzZXQsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKQotICAgIC8qCi0gICAgICogaW5wdXQ6ICBzZXQgdG8gMSBpZiBpbnB1dCB0aW1lb3V0IHZhbHVlIGlzIHVuZGVmaW5lZCAgCi0gICAgICogc2V0IHRvIDAgaWYgaW5wdXQgdGltZW91dCB2YWx1ZSBpcyBkZWZpbmVkICAgIAotICAgICAqIG91dHB1dDogc2V0IHRvIDEgaWYgb3V0cHV0IHRpbWVvdXQgdmFsdWUgaXMgdW5kZWZpbmVkIAotICAgICAqIHNldCB0byAwIGlmIG91dHB1dCByaW1lb3V0IHZsYXVlIGlkIGRlZmluZWQgICAKLSAgICAgKi8KK3NubXBfc2VsZWN0X2luZm8oaW50ICpudW1mZHMsIGZkX3NldCAqZmRzZXQsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LAorICAgICAgICAgICAgICAgICBpbnQgKmJsb2NrKQogewotICAgIHJldHVybiBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8oKHZvaWQgKikgMCwgbnVtZmRzLCBmZHNldCwgdGltZW91dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrKTsKKyAgICByZXR1cm4gc25tcF9zZXNzX3NlbGVjdF9pbmZvKE5VTEwsIG51bWZkcywgZmRzZXQsIHRpbWVvdXQsIGJsb2NrKTsKIH0KIAotLyoKLSAqIFNhbWUgYXMgc25tcF9zZWxlY3RfaW5mbywgYnV0IHdvcmtzIGp1c3Qgb25lIHNlc3Npb24uIAorLyoqCisgKiBAc2VlIFNlZSBhbHNvIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3MoKS4KICAqLwogaW50Ci1zbm1wX3Nlc3Nfc2VsZWN0X2luZm8odm9pZCAqc2Vzc3AsCi0gICAgICAgICAgICAgICAgICAgICAgaW50ICpudW1mZHMsCi0gICAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICogZmRzZXQsIHN0cnVjdCB0aW1ldmFsICp0aW1lb3V0LCBpbnQgKmJsb2NrKQorc25tcF9zZWxlY3RfaW5mbzIoaW50ICpudW1mZHMsIG5ldHNubXBfbGFyZ2VfZmRfc2V0ICpmZHNldCwKKwkJICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaykKIHsKLSAgICBzdHJ1Y3Qgc2Vzc2lvbl9saXN0ICpzbHB0ZXN0ID0gKHN0cnVjdCBzZXNzaW9uX2xpc3QgKikgc2Vzc3A7CisgICAgcmV0dXJuIHNubXBfc2Vzc19zZWxlY3RfaW5mbzIoTlVMTCwgbnVtZmRzLCBmZHNldCwgdGltZW91dCwgYmxvY2spOworfQorCisvKioKKyAqIEBzZWUgU2VlIGFsc28gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncygpLgorICovCitpbnQKK3NubXBfc2Vzc19zZWxlY3RfaW5mbyh2b2lkICpzZXNzcCwgaW50ICpudW1mZHMsIGZkX3NldCAqZmRzZXQsCisgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spCit7CisgICAgcmV0dXJuIHNubXBfc2Vzc19zZWxlY3RfaW5mb19mbGFncyhzZXNzcCwgbnVtZmRzLCBmZHNldCwgdGltZW91dCwgYmxvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX1NFTEVDVF9OT0ZMQUdTKTsKK30KKyAgICAgICAgCisvKioKKyAqIEBzZWUgU2VlIGFsc28gc25tcF9zZXNzX3NlbGVjdF9pbmZvMl9mbGFncygpLgorICovCitpbnQKK3NubXBfc2Vzc19zZWxlY3RfaW5mb19mbGFncyh2b2lkICpzZXNzcCwgaW50ICpudW1mZHMsIGZkX3NldCAqZmRzZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2ssIGludCBmbGFncykKK3sKKyAgaW50IHJjOworICBuZXRzbm1wX2xhcmdlX2ZkX3NldCBsZmRzZXQ7CisKKyAgbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmbGZkc2V0LCBGRF9TRVRTSVpFKTsKKyAgbmV0c25tcF9jb3B5X2ZkX3NldF90b19sYXJnZV9mZF9zZXQoJmxmZHNldCwgZmRzZXQpOworICByYyA9IHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3Moc2Vzc3AsIG51bWZkcywgJmxmZHNldCwgdGltZW91dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrLCBmbGFncyk7CisgIGlmIChuZXRzbm1wX2NvcHlfbGFyZ2VfZmRfc2V0X3RvX2ZkX3NldChmZHNldCwgJmxmZHNldCkgPCAwKSB7CisgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorCSAgICAgIlVzZSBzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yKCkgZm9yIHByb2Nlc3NpbmciCisJICAgICAiIGxhcmdlIGZpbGUgZGVzY3JpcHRvcnNcbiIpOworICB9CisgIG5ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmxmZHNldCk7CisgIHJldHVybiByYzsKK30KKworLyoqCisgKiBAc2VlIFNlZSBhbHNvIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3MoKS4KKyAqLworaW50Citzbm1wX3Nlc3Nfc2VsZWN0X2luZm8yKHZvaWQgKnNlc3NwLCBpbnQgKm51bWZkcywgbmV0c25tcF9sYXJnZV9mZF9zZXQgKmZkc2V0LAorCQkgICAgICAgc3RydWN0IHRpbWV2YWwgKnRpbWVvdXQsIGludCAqYmxvY2spCit7CisgICAgcmV0dXJuIHNubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3Moc2Vzc3AsIG51bWZkcywgZmRzZXQsIHRpbWVvdXQsIGJsb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VMRUNUX05PRkxBR1MpOworfQorCisvKioKKyAqIENvbXB1dGUvdXBkYXRlIHRoZSBhcmd1bWVudHMgdG8gYmUgcGFzc2VkIHRvIHNlbGVjdCgpLgorICoKKyAqIEBwYXJhbVtpbl0gICAgIHNlc3NwICAgV2hpY2ggc2Vzc2lvbnMgdG8gcHJvY2VzczogZWl0aGVyIGEgcG9pbnRlciB0byBhCisgKiAgIHNwZWNpZmljIHNlc3Npb24gb3IgTlVMTCB3aGljaCBtZWFucyB0byBwcm9jZXNzIGFsbCBzZXNzaW9ucy4KKyAqIEBwYXJhbVtpbixvdXRdIG51bWZkcyAgT24gUE9TSVggc3lzdGVtcyBvbmUgbW9yZSB0aGFuIHRoZSB0aGUgbGFyZ2VzdCBmaWxlCisgKiAgIGRlc2NyaXB0b3IgdGhhdCBpcyBwcmVzZW50IGluICpmZHNldC4gT24gc3lzdGVtcyB0aGF0IHVzZSBXaW5zb2NrIChNaW5HVworICogICBhbmQgTVNWQyksIGRvIG5vdCB1c2UgdGhlIHZhbHVlIHdyaXR0ZW4gaW50byAqbnVtZmRzLgorICogQHBhcmFtW2luLG91dF0gZmRzZXQgICBBIGxhcmdlIGZpbGUgZGVzY3JpcHRvciBzZXQgdG8gd2hpY2ggYWxsIGZpbGUKKyAqICAgZGVzY3JpcHRvcnMgd2lsbCBiZSBhZGRlZCB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggb25lIG9mIHRoZSBleGFtaW5lZAorICogICBzZXNzaW9ucy4KKyAqIEBwYXJhbVtpbixvdXRdIHRpbWVvdXQgT24gaW5wdXQsIGlmICpibG9jayA9IDEsIHRoZSBtYXhpbXVtIHRpbWUgdGhlIGNhbGxlcgorICogICB3aWxsIGJsb2NrIHdoaWxlIHdhaXRpbmcgZm9yIE5ldC1TTk1QIGFjdGl2aXR5LiBPbiBvdXRwdXQsIGlmIHRoaXMgZnVuY3Rpb24KKyAqICAgaGFzIHNldCAqYmxvY2sgdG8gMCwgdGhlIG1heGltdW0gdGltZSB0aGUgY2FsbGVyIGlzIGFsbG93ZWQgdG8gd2FpdCBiZWZvcmUKKyAqICAgaW52b2tpbmcgdGhlIE5ldC1TTk1QIHByb2Nlc3NpbmcgZnVuY3Rpb25zIChzbm1wX3JlYWQoKSwgc25tcF90aW1lb3V0KCkKKyAqICAgYW5kIHJ1bl9hbGFybXMoKSkuIElmIHRoaXMgZnVuY3Rpb24gaGFzIHNldCAqYmxvY2sgdG8gMSwgKnRpbWVvdXQgd29uJ3QKKyAqICAgaGF2ZSBiZWVuIG1vZGlmaWVkIGFuZCBubyBhbGFybXMgYXJlIGFjdGl2ZS4KKyAqIEBwYXJhbVtpbixvdXRdIGJsb2NrICAgT24gaW5wdXQsIHdoZXRoZXIgdGhlIGNhbGxlciBwcmVmZXJzIHRvIGJsb2NrIGZvcmV2ZXIKKyAqICAgd2hlbiBubyBhbGFybXMgYXJlIGFjdGl2ZS4gT24gb3V0cHV0LCAwIG1lYW5zIHRoYXQgbm8gYWxhcm1zIGFyZSBhY3RpdmUKKyAqICAgbm9yIHRoYXQgdGhlcmUgaXMgYSB0aW1lb3V0IHBlbmRpbmcgZm9yIGFueSBvZiB0aGUgcHJvY2Vzc2VkIHNlc3Npb25zLgorICogQHBhcmFtW2luXSAgICAgZmxhZ3MgICBFaXRoZXIgMCBvciBORVRTTk1QX1NFTEVDVF9OT0FMQVJNUy4KKyAqCisgKiBAcmV0dXJuIE51bWJlciBvZiBzZXNzaW9ucyBwcm9jZXNzZWQgYnkgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIGFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKCkgZm9yIGFuIGV4YW1wbGUgb2YgaG93IHRvIHVzZSB0aGlzCisgKiAgIGZ1bmN0aW9uLgorICovCitpbnQKK3NubXBfc2Vzc19zZWxlY3RfaW5mbzJfZmxhZ3Modm9pZCAqc2Vzc3AsIGludCAqbnVtZmRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2xhcmdlX2ZkX3NldCAqIGZkc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZhbCAqdGltZW91dCwgaW50ICpibG9jaywgaW50IGZsYWdzKQorewogICAgIHN0cnVjdCBzZXNzaW9uX2xpc3QgKnNscCwgKm5leHQgPSBOVUxMOwogICAgIG5ldHNubXBfcmVxdWVzdF9saXN0ICpycDsKLSAgICBzdHJ1Y3QgdGltZXZhbCAgbm93LCBlYXJsaWVzdCwgZGVsdGE7CisgICAgc3RydWN0IHRpbWV2YWwgIG5vdywgZWFybGllc3QsIGFsYXJtX3RtOwogICAgIGludCAgICAgICAgICAgICBhY3RpdmUgPSAwLCByZXF1ZXN0cyA9IDA7CiAgICAgaW50ICAgICAgICAgICAgIG5leHRfYWxhcm0gPSAwOwogCiAgICAgdGltZXJjbGVhcigmZWFybGllc3QpOwogCiAgICAgLyoKLSAgICAgKiBGb3IgZWFjaCByZXF1ZXN0IG91dHN0YW5kaW5nLCBhZGQgaXRzIHNvY2tldCB0byB0aGUgZmRzZXQsCisgICAgICogRm9yIGVhY2ggc2Vzc2lvbiBleGFtaW5lZCwgYWRkIGl0cyBzb2NrZXQgdG8gdGhlIGZkc2V0LAogICAgICAqIGFuZCBpZiBpdCBpcyB0aGUgZWFybGllc3QgdGltZW91dCB0byBleHBpcmUsIG1hcmsgaXQgYXMgbG93ZXN0LgogICAgICAqIElmIGEgc2luZ2xlIHNlc3Npb24gaXMgc3BlY2lmaWVkLCBkbyBqdXN0IGZvciB0aGF0IHNlc3Npb24uCiAgICAgICovCiAKLSAgICBpZiAoc2Vzc3ApIHsKLSAgICAgICAgc2xwID0gc2xwdGVzdDsKLSAgICB9IGVsc2UgewotICAgICAgICBzbHAgPSBTZXNzaW9uczsKLSAgICB9Ci0KICAgICBERUJVR01TR1RMKCgic2Vzc19zZWxlY3QiLCAiZm9yICVzIHNlc3Npb24lczogIiwKICAgICAgICAgICAgICAgICBzZXNzcCA/ICJzaW5nbGUiIDogImFsbCIsIHNlc3NwID8gIiIgOiAicyIpKTsKIAotICAgIGZvciAoOyBzbHA7IHNscCA9IG5leHQpIHsKKyAgICBmb3IgKHNscCA9IHNlc3NwID8gc2Vzc3AgOiBTZXNzaW9uczsgc2xwOyBzbHAgPSBuZXh0KSB7CiAgICAgICAgIG5leHQgPSBzbHAtPm5leHQ7CiAKICAgICAgICAgaWYgKHNscC0+dHJhbnNwb3J0ID09IE5VTEwpIHsKQEAgLTU5MzMsMTggKzYwNzcsMTkgQEAKICAgICAgICAgICAgICpudW1mZHMgPSAoc2xwLT50cmFuc3BvcnQtPnNvY2sgKyAxKTsKICAgICAgICAgfQogCi0gICAgICAgIEZEX1NFVChzbHAtPnRyYW5zcG9ydC0+c29jaywgZmRzZXQpOworICAgICAgICBORVRTTk1QX0xBUkdFX0ZEX1NFVChzbHAtPnRyYW5zcG9ydC0+c29jaywgZmRzZXQpOwogICAgICAgICBpZiAoc2xwLT5pbnRlcm5hbCAhPSBOVUxMICYmIHNscC0+aW50ZXJuYWwtPnJlcXVlc3RzKSB7CiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogRm91bmQgYW5vdGhlciBzZXNzaW9uIHdpdGggb3V0c3RhbmRpbmcgcmVxdWVzdHMuICAKICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcmVxdWVzdHMrKzsKICAgICAgICAgICAgIGZvciAocnAgPSBzbHAtPmludGVybmFsLT5yZXF1ZXN0czsgcnA7IHJwID0gcnAtPm5leHRfcmVxdWVzdCkgewotICAgICAgICAgICAgICAgIGlmICgoIXRpbWVyaXNzZXQoJmVhcmxpZXN0KQotICAgICAgICAgICAgICAgICAgICAgfHwgKHRpbWVyY21wKCZycC0+ZXhwaXJlLCAmZWFybGllc3QsIDwpKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgZWFybGllc3QgPSBycC0+ZXhwaXJlOwotICAgICAgICAgICAgICAgICAgICBERUJVR01TRygoInZlcmJvc2U6c2Vzc19zZWxlY3QiLCIodG8gaW4gJWQuJWQgc2VjKSAiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0LnR2X3NlYywgZWFybGllc3QudHZfdXNlYykpOworICAgICAgICAgICAgICAgIGlmICghdGltZXJpc3NldCgmZWFybGllc3QpCisgICAgICAgICAgICAgICAgICAgIHx8ICh0aW1lcmlzc2V0KCZycC0+ZXhwaXJlTSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYmIHRpbWVyY21wKCZycC0+ZXhwaXJlTSwgJmVhcmxpZXN0LCA8KSkpIHsKKyAgICAgICAgICAgICAgICAgICAgZWFybGllc3QgPSBycC0+ZXhwaXJlTTsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0coKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwiKHRvIGluICVkLiUwNmQgc2VjKSAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpZWFybGllc3QudHZfc2VjLCAoaW50KWVhcmxpZXN0LnR2X3VzZWMpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTU5NTksMTAgKzYxMDQsMTUgQEAKICAgICB9CiAgICAgREVCVUdNU0coKCJzZXNzX3NlbGVjdCIsICJcbiIpKTsKIAotICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgTkVUU05NUF9EU19MSUJfQUxBUk1fRE9OVF9VU0VfU0lHKSkgewotICAgICAgICBuZXh0X2FsYXJtID0gZ2V0X25leHRfYWxhcm1fZGVsYXlfdGltZSgmZGVsdGEpOwotICAgICAgICBERUJVR01TR1QoKCJzZXNzX3NlbGVjdCIsIm5leHQgYWxhcm0gJWQuJWQgc2VjXG4iLAotICAgICAgICAgICAgICAgICAgIGRlbHRhLnR2X3NlYywgZGVsdGEudHZfdXNlYykpOworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKKworICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BTEFSTV9ET05UX1VTRV9TSUcpICYmCisgICAgICAgICEoZmxhZ3MgJiBORVRTTk1QX1NFTEVDVF9OT0FMQVJNUykpIHsKKyAgICAgICAgbmV4dF9hbGFybSA9IG5ldHNubXBfZ2V0X25leHRfYWxhcm1fdGltZSgmYWxhcm1fdG0sICZub3cpOworICAgICAgICBpZiAobmV4dF9hbGFybSkKKyAgICAgICAgICAgIERFQlVHTVNHVCgoInNlc3Nfc2VsZWN0IiwibmV4dCBhbGFybSBhdCAlbGQuJTA2bGQgc2VjXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAobG9uZylhbGFybV90bS50dl9zZWMsIChsb25nKWFsYXJtX3RtLnR2X3VzZWMpKTsKICAgICB9CiAgICAgaWYgKG5leHRfYWxhcm0gPT0gMCAmJiByZXF1ZXN0cyA9PSAwKSB7CiAgICAgICAgIC8qCkBAIC01OTczLDUzICs2MTIzLDIwIEBACiAgICAgICAgIHJldHVybiBhY3RpdmU7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiAqIE5vdyBmaW5kIG91dCBob3cgbXVjaCB0aW1lIHVudGlsIHRoZSBlYXJsaWVzdCB0aW1lb3V0LiAgVGhpcwotICAgICAqICogdHJhbnNmb3JtcyBlYXJsaWVzdCBmcm9tIGFuIGFic29sdXRlIHRpbWUgaW50byBhIGRlbHRhIHRpbWUsIHRoZQotICAgICAqICogdGltZSBsZWZ0IHVudGlsIHRoZSBzZWxlY3Qgc2hvdWxkIHRpbWVvdXQuCi0gICAgICovCi0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7Ci0gICAgLyoKLSAgICAgKiBOb3cgPSBub3c7Ci0gICAgICovCisgICAgaWYgKG5leHRfYWxhcm0gJiYKKyAgICAgICAgKCF0aW1lcmlzc2V0KCZlYXJsaWVzdCkgfHwgdGltZXJjbXAoJmFsYXJtX3RtLCAmZWFybGllc3QsIDwpKSkKKyAgICAgICAgZWFybGllc3QgPSBhbGFybV90bTsKIAotICAgIGlmIChuZXh0X2FsYXJtKSB7Ci0gICAgICAgIGRlbHRhLnR2X3NlYyArPSBub3cudHZfc2VjOwotICAgICAgICBkZWx0YS50dl91c2VjICs9IG5vdy50dl91c2VjOwotICAgICAgICB3aGlsZSAoZGVsdGEudHZfdXNlYyA+PSAxMDAwMDAwKSB7Ci0gICAgICAgICAgICBkZWx0YS50dl91c2VjIC09IDEwMDAwMDA7Ci0gICAgICAgICAgICBkZWx0YS50dl9zZWMgKz0gMTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIXRpbWVyaXNzZXQoJmVhcmxpZXN0KSB8fAotICAgICAgICAgICAgKChlYXJsaWVzdC50dl9zZWMgPiBkZWx0YS50dl9zZWMpIHx8Ci0gICAgICAgICAgICAgKChlYXJsaWVzdC50dl9zZWMgPT0gZGVsdGEudHZfc2VjKSAmJgotICAgICAgICAgICAgICAoZWFybGllc3QudHZfdXNlYyA+IGRlbHRhLnR2X3VzZWMpKSkpIHsKLSAgICAgICAgICAgIGVhcmxpZXN0LnR2X3NlYyA9IGRlbHRhLnR2X3NlYzsKLSAgICAgICAgICAgIGVhcmxpZXN0LnR2X3VzZWMgPSBkZWx0YS50dl91c2VjOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGVhcmxpZXN0LnR2X3NlYyA8IG5vdy50dl9zZWMpIHsKLSAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsInRpbWVyIG92ZXJkdWVcbiIpKTsKLSAgICAgICAgZWFybGllc3QudHZfc2VjID0gMDsKLSAgICAgICAgZWFybGllc3QudHZfdXNlYyA9IDA7Ci0gICAgfSBlbHNlIGlmIChlYXJsaWVzdC50dl9zZWMgPT0gbm93LnR2X3NlYykgewotICAgICAgICBlYXJsaWVzdC50dl9zZWMgPSAwOwotICAgICAgICBlYXJsaWVzdC50dl91c2VjID0gKGVhcmxpZXN0LnR2X3VzZWMgLSBub3cudHZfdXNlYyk7Ci0gICAgICAgIGlmIChlYXJsaWVzdC50dl91c2VjIDwgMCkgewotICAgICAgICAgICAgZWFybGllc3QudHZfdXNlYyA9IDEwMDsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwidGltZXIgZHVlICpyZWFsKiBzb29uLiAlZCB1c2VjXG4iLAotICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0LnR2X3VzZWMpKTsKKyAgICBORVRTTk1QX1RJTUVSU1VCKCZlYXJsaWVzdCwgJm5vdywgJmVhcmxpZXN0KTsKKyAgICBpZiAoZWFybGllc3QudHZfc2VjIDwgMCkgeworICAgICAgICB0aW1lX3Qgb3ZlcmR1ZV9tcyA9IC0oZWFybGllc3QudHZfc2VjICogMTAwMCArIGVhcmxpZXN0LnR2X3VzZWMgLyAxMDAwKTsKKyAgICAgICAgaWYgKG92ZXJkdWVfbXMgPj0gMTApCisgICAgICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwidGltZXIgb3ZlcmR1ZSBieSAlbGQgbXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIChsb25nKSBvdmVyZHVlX21zKSk7CisgICAgICAgIHRpbWVyY2xlYXIoJmVhcmxpZXN0KTsKICAgICB9IGVsc2UgewotICAgICAgICBlYXJsaWVzdC50dl9zZWMgPSAoZWFybGllc3QudHZfc2VjIC0gbm93LnR2X3NlYyk7Ci0gICAgICAgIGVhcmxpZXN0LnR2X3VzZWMgPSAoZWFybGllc3QudHZfdXNlYyAtIG5vdy50dl91c2VjKTsKLSAgICAgICAgaWYgKGVhcmxpZXN0LnR2X3VzZWMgPCAwKSB7Ci0gICAgICAgICAgICBlYXJsaWVzdC50dl9zZWMtLTsKLSAgICAgICAgICAgIGVhcmxpZXN0LnR2X3VzZWMgPSAoMTAwMDAwMEwgKyBlYXJsaWVzdC50dl91c2VjKTsKLSAgICAgICAgfQotICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwidGltZXIgZHVlIGluICVkLiVkIHNlY1xuIiwKLSAgICAgICAgICAgICAgICAgICBlYXJsaWVzdC50dl9zZWMsIGVhcmxpZXN0LnR2X3VzZWMpKTsKKyAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzZXNzX3NlbGVjdCIsInRpbWVyIGR1ZSBpbiAlZC4lMDZkIHNlY1xuIiwKKyAgICAgICAgICAgICAgICAgICAoaW50KWVhcmxpZXN0LnR2X3NlYywgKGludCllYXJsaWVzdC50dl91c2VjKSk7CiAgICAgfQogCiAgICAgLyoKQEAgLTYwMjcsOCArNjE0NCw4IEBACiAgICAgICovCiAgICAgaWYgKCgqYmxvY2sgfHwgKHRpbWVyY21wKCZlYXJsaWVzdCwgdGltZW91dCwgPCkpKSkgewogICAgICAgICBERUJVR01TR1QoKCJ2ZXJib3NlOnNlc3Nfc2VsZWN0IiwKLSAgICAgICAgICAgICAgICAgICAic2V0dGluZyB0aW1lciB0byAlZC4lZCBzZWMsIGNsZWFyIGJsb2NrICh3YXMgJWQpXG4iLAotICAgICAgICAgICAgICAgICAgIGVhcmxpZXN0LnR2X3NlYywgZWFybGllc3QudHZfdXNlYywgKmJsb2NrKSk7CisgICAgICAgICAgICAgICAgICAgInNldHRpbmcgdGltZXIgdG8gJWQuJTA2ZCBzZWMsIGNsZWFyIGJsb2NrICh3YXMgJWQpXG4iLAorICAgICAgICAgICAgICAgICAgIChpbnQpZWFybGllc3QudHZfc2VjLCAoaW50KWVhcmxpZXN0LnR2X3VzZWMsICpibG9jaykpOwogICAgICAgICAqdGltZW91dCA9IGVhcmxpZXN0OwogICAgICAgICAqYmxvY2sgPSAwOwogICAgIH0KQEAgLTYxMjQsMzIgKzYyNDEsMTYgQEAKICAgICAgICAgICogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuLiAgCiAgICAgICAgICAqLwogICAgICAgICBERUJVR01TR1RMKCgic2Vzc19yZXNlbmQiLCAiZW5jb2RpbmcgZmFpbHVyZVxuIikpOwotICAgICAgICBpZiAocGt0YnVmICE9IE5VTEwpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShwa3RidWYpOwotICAgICAgICB9CisgICAgICAgIFNOTVBfRlJFRShwa3RidWYpOwogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCi0gICAgaWYgKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9EVU1QX1BBQ0tFVCkpIHsKLSAgICAgICAgaWYgKHRyYW5zcG9ydC0+Zl9mbXRhZGRyICE9IE5VTEwpIHsKLSAgICAgICAgICAgIGNoYXIgICAgICAgICAgICpzdHIgPSBOVUxMOwotICAgICAgICAgICAgc3RyID0gdHJhbnNwb3J0LT5mX2ZtdGFkZHIodHJhbnNwb3J0LCBycC0+cGR1LT50cmFuc3BvcnRfZGF0YSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwLT5wZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCk7Ci0gICAgICAgICAgICBpZiAoc3RyICE9IE5VTEwpIHsKLSAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICJcblJlc2VuZGluZyAlbHUgYnl0ZXMgdG8gJXNcbiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKWxlbmd0aCwgc3RyKTsKLSAgICAgICAgICAgICAgICBTTk1QX0ZSRUUoc3RyKTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0RFQlVHLCAiXG5SZXNlbmRpbmcgJWx1IGJ5dGVzIHRvIDxVTktOT1dOPlxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIHhkdW1wKHBhY2tldCwgbGVuZ3RoLCAiIik7Ci0gICAgfQotCi0gICAgcmVzdWx0ID0gdHJhbnNwb3J0LT5mX3NlbmQodHJhbnNwb3J0LCBwYWNrZXQsIGxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHJwLT5wZHUtPnRyYW5zcG9ydF9kYXRhKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmKHJwLT5wZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCkpOworICAgIERFQlVHTVNHVEwoKCJzZXNzX3Byb2Nlc3NfcGFja2V0IiwgInJlc2VuZGluZyBtZXNzYWdlIGlkIyVsZCByZXFpZCMlbGQgIgorICAgICAgICAgICAgICAgICJycF9yZXFpZCMlbGQgcnBfbXNnaWQjJWxkIGxlbiAlIiBORVRTTk1QX1BSSXogInVcbiIsCisgICAgICAgICAgICAgICAgcnAtPnBkdS0+bXNnaWQsIHJwLT5wZHUtPnJlcWlkLCBycC0+cmVxdWVzdF9pZCwgcnAtPm1lc3NhZ2VfaWQsIGxlbmd0aCkpOworICAgIHJlc3VsdCA9IG5ldHNubXBfdHJhbnNwb3J0X3NlbmQodHJhbnNwb3J0LCBwYWNrZXQsIGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYocnAtPnBkdS0+dHJhbnNwb3J0X2RhdGEpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihycC0+cGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGgpKTsKIAogICAgIC8qCiAgICAgICogV2UgYXJlIGZpbmlzaGVkIHdpdGggdGhlIGxvY2FsIHBhY2tldCBidWZmZXIsIGlmIHdlIGFsbG9jYXRlZCBvbmUgKGR1ZQpAQCAtNjE1OCw3ICs2MjU5LDcgQEAKIAogICAgIGlmIChwa3RidWYgIT0gTlVMTCkgewogICAgICAgICBTTk1QX0ZSRUUocGt0YnVmKTsKLSAgICAgICAgcGt0YnVmID0gcGFja2V0ID0gTlVMTDsKKyAgICAgICAgcGFja2V0ID0gTlVMTDsKICAgICB9CiAKICAgICBpZiAocmVzdWx0IDwgMCkgewpAQCAtNjE2NywxMyArNjI2OCwxMyBAQAogICAgICAgICBzbm1wX3NldF9kZXRhaWwoc3RyZXJyb3IoZXJybm8pKTsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0gZWxzZSB7Ci0gICAgICAgIGdldHRpbWVvZmRheSgmbm93LCAoc3RydWN0IHRpbWV6b25lICopIDApOworICAgICAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAgICAgICAgIHR2ID0gbm93OwotICAgICAgICBycC0+dGltZSA9IHR2OworICAgICAgICBycC0+dGltZU0gPSB0djsKICAgICAgICAgdHYudHZfdXNlYyArPSBycC0+dGltZW91dDsKICAgICAgICAgdHYudHZfc2VjICs9IHR2LnR2X3VzZWMgLyAxMDAwMDAwTDsKICAgICAgICAgdHYudHZfdXNlYyAlPSAxMDAwMDAwTDsKLSAgICAgICAgcnAtPmV4cGlyZSA9IHR2OworICAgICAgICBycC0+ZXhwaXJlTSA9IHR2OwogICAgIH0KICAgICByZXR1cm4gMDsKIH0KQEAgLTYxOTksNyArNjMwMCw3IEBACiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgKHN0cnVjdCB0aW1lem9uZSAqKSAwKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJm5vdyk7CiAKICAgICAvKgogICAgICAqIEZvciBlYWNoIHJlcXVlc3Qgb3V0c3RhbmRpbmcsIGNoZWNrIHRvIHNlZSBpZiBpdCBoYXMgZXhwaXJlZC4KQEAgLTYyMTMsNyArNjMxNCw3IEBACiAgICAgICAgICAgICBmcmVlbWUgPSBOVUxMOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKCh0aW1lcmNtcCgmcnAtPmV4cGlyZSwgJm5vdywgPCkpKSB7CisgICAgICAgIGlmICgodGltZXJjbXAoJnJwLT5leHBpcmVNLCAmbm93LCA8KSkpIHsKICAgICAgICAgICAgIGlmICgoc3B0ciA9IGZpbmRfc2VjX21vZChycC0+cGR1LT5zZWN1cml0eU1vZGVsKSkgIT0gTlVMTCAmJgogICAgICAgICAgICAgICAgIHNwdHItPnBkdV90aW1lb3V0ICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAvKgpAQCAtNjI0MSwxOCArNjM0MiwxMyBAQAogICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayhORVRTTk1QX0NBTExCQUNLX09QX1RJTUVEX09VVCwgc3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJwLT5wZHUtPnJlcWlkLCBycC0+cGR1LCBtYWdpYyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGlmIChpc3AtPnJlcXVlc3RzID09IHJwKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlzcC0+cmVxdWVzdHMgPSBycC0+bmV4dF9yZXF1ZXN0OwotICAgICAgICAgICAgICAgICAgICBpZiAoaXNwLT5yZXF1ZXN0c0VuZCA9PSBycCkgewotICAgICAgICAgICAgICAgICAgICAgICAgaXNwLT5yZXF1ZXN0c0VuZCA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChvcnApCiAgICAgICAgICAgICAgICAgICAgIG9ycC0+bmV4dF9yZXF1ZXN0ID0gcnAtPm5leHRfcmVxdWVzdDsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGlzcC0+cmVxdWVzdHNFbmQgPT0gcnApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlzcC0+cmVxdWVzdHNFbmQgPSBvcnA7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgc25tcF9mcmVlX3BkdShycC0+cGR1KTsgLyogRklYICBycCBpcyBhbHJlYWR5IGZyZWUnZCEgKi8KKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGlzcC0+cmVxdWVzdHMgPSBycC0+bmV4dF9yZXF1ZXN0OworICAgICAgICAgICAgICAgIGlmIChpc3AtPnJlcXVlc3RzRW5kID09IHJwKQorICAgICAgICAgICAgICAgICAgICBpc3AtPnJlcXVlc3RzRW5kID0gb3JwOworICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUocnAtPnBkdSk7CiAgICAgICAgICAgICAgICAgZnJlZW1lID0gcnA7CiAgICAgICAgICAgICAgICAgY29udGludWU7ICAgICAgIC8qIGRvbid0IHVwZGF0ZSBvcnAgYmVsb3cgKi8KICAgICAgICAgICAgIH0gZWxzZSB7CkBAIC02NTA1LDYgKzY2MDEsNyBAQAogICAgIHJldHVybiAwOwogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT0lEX0lTX1NVQlRSRUUKIC8qKiBJZGVudGljYWwgdG8gbmV0c25tcF9vaWRfZXF1YWxzLCBleGNlcHQgb25seSB0aGUgbGVuZ3RoIHVwIHRvIGxlbjEgaXMgY29tcGFyZWQuCiAgKiBGdW5jdGlvbmFsbHksIHRoaXMgZGV0ZXJtaW5lcyBpZiBpbl9uYW1lMiBpcyBlcXVhbCBvciBhIHN1YnRyZWUgb2YgaW5fbmFtZTEKICAqIEBwYXJhbSBpbl9uYW1lMSBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9pZC4KQEAgLTY1MjUsNiArNjYyMiw3IEBACiAKICAgICByZXR1cm4gMDsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09JRF9JU19TVUJUUkVFICovCiAKIC8qKiBHaXZlbiB0d28gT0lEcywgZGV0ZXJtaW5lIHRoZSBjb21tb24gcHJlZml4IHRvIHRoZW0gYm90aC4KICAqIEBwYXJhbSBpbl9uYW1lMSBBIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG9pZC4KQEAgLTY2MDksNyArNjcwNyw3IEBACiBzbm1wX3BkdV9hZGRfdmFyaWFibGUobmV0c25tcF9wZHUgKnBkdSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvaWQgKiBuYW1lLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgY29uc3QgdV9jaGFyICogdmFsdWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGNvbnN0IHZvaWQgKiB2YWx1ZSwgc2l6ZV90IGxlbikKIHsKICAgICByZXR1cm4gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmcGR1LT52YXJpYWJsZXMsIG5hbWUsIG5hbWVfbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGUsIHZhbHVlLCBsZW4pOwpAQCAtNjYyMyw3ICs2NzIxLDcgQEAKIHNubXBfdmFybGlzdF9hZGRfdmFyaWFibGUobmV0c25tcF92YXJpYWJsZV9saXN0ICoqIHZhcmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG9pZCAqIG5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBuYW1lX2xlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGNvbnN0IHVfY2hhciAqIHZhbHVlLCBzaXplX3QgbGVuKQorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgdHlwZSwgY29uc3Qgdm9pZCAqIHZhbHVlLCBzaXplX3QgbGVuKQogewogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnZ0bXA7CiAgICAgaW50IHJjOwpAQCAtNjY0MSw3ICs2NzM5LDcgQEAKICAgICBpZiAoKCAwICE9IHJjICkgfHwKICAgICAgICAgKG5hbWUgIT0gTlVMTCAmJiBzbm1wX3NldF92YXJfb2JqaWQodmFycywgbmFtZSwgbmFtZV9sZW5ndGgpKSkgewogICAgICAgICBzbm1wX2ZyZWVfdmFyKHZhcnMpOwotICAgICAgICByZXR1cm4gKDApOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICAvKgpAQCAtNjc4OSw3ICs2ODg3LDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwogICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX0lOVEVHRVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbHRtcCwgc2l6ZW9mKGx0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsdG1wLCBzaXplb2YobHRtcCkpOwogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgJ3UnOgpAQCAtNjgwMyw3ICs2OTAxLDcgQEAKICAgICAgICAgbHRtcCA9IHN0cnRvdWwodmFsdWUsICZlY3AsIDEwKTsKICAgICAgICAgaWYgKCp2YWx1ZSAmJiAhKmVjcCkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fVU5TSUdORUQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGx0bXAsIHNpemVvZihsdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0bXAsIHNpemVvZihsdG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC02ODE5LDcgKzY5MTcsNyBAQAogICAgICAgICBsdG1wID0gc3RydG91bCh2YWx1ZSwgJmVjcCwgMTApOwogICAgICAgICBpZiAoKnZhbHVlICYmICEqZWNwKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9VSU5URUdFUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgbHRtcCwgc2l6ZW9mKGx0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbHRtcCwgc2l6ZW9mKGx0bXApKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgZ290byBmYWlsOwogICAgICAgICBicmVhazsKQEAgLTY4MzUsNyArNjkzMyw3IEBACiAgICAgICAgIGx0bXAgPSBzdHJ0b3VsKHZhbHVlLCAmZWNwLCAxMCk7CiAgICAgICAgIGlmICgqdmFsdWUgJiYgISplY3ApCiAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX0NPVU5URVIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGx0bXAsIHNpemVvZihsdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0bXAsIHNpemVvZihsdG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC02ODUwLDcgKzY5NDgsNyBAQAogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwogICAgICAgICBpZiAocmVhZDY0KCZjNjR0bXAsIHZhbHVlKSkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fQ09VTlRFUjY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBjNjR0bXAsIHNpemVvZihjNjR0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYzY0dG1wLCBzaXplb2YoYzY0dG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC02ODY2LDcgKzY5NjQsNyBAQAogICAgICAgICBsdG1wID0gc3RydG91bCh2YWx1ZSwgJmVjcCwgMTApOwogICAgICAgICBpZiAoKnZhbHVlICYmICEqZWNwKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9USU1FVElDS1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGx0bXAsIHNpemVvZihsb25nKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0bXAsIHNpemVvZihsb25nKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC02ODgyLDcgKzY5ODAsNyBAQAogICAgICAgICBhdG1wID0gaW5ldF9hZGRyKHZhbHVlKTsKICAgICAgICAgaWYgKGF0bXAgIT0gKGluX2FkZHJfdCkgLTEgfHwgIXN0cmNtcCh2YWx1ZSwgIjI1NS4yNTUuMjU1LjI1NSIpKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9JUEFERFJFU1MsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSAmIGF0bXAsIHNpemVvZihhdG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmF0bXAsIHNpemVvZihhdG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC02OTAwLDkgKzY5OTgsOCBAQAogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgdGludCA9IE1BWF9PSURfTEVOOwogICAgICAgICAgICAgaWYgKHNubXBfcGFyc2Vfb2lkKHZhbHVlLCAob2lkICopIGJ1ZiwgJnRpbnQpKSB7Ci0gICAgICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PQkpFQ1RfSUQsIGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG9pZCkgKiB0aW50KTsKKyAgICAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX09CSkVDVF9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2Yob2lkKSAqIHRpbnQpOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICByZXN1bHQgPSBzbm1wX2Vycm5vOyAgICAvKk1UQ1JJVElDQUxfUkVTT1VSQ0UgKi8KICAgICAgICAgICAgIH0KQEAgLTY5MjAsOCArNzAxNyw4IEBACiAgICAgICAgIH0KIAlpZiAoJ3MnID09IHR5cGUgJiYgZG9faGludCAmJiAhcGFyc2Vfb2N0ZXRfaGludCh0cC0+aGludCwgdmFsdWUsICZoaW50cHRyLCAmaXRtcCkpIHsKICAgICAgICAgICAgIGlmIChfY2hlY2tfcmFuZ2UodHAsIGl0bXAsICZyZXN1bHQsICJWYWx1ZSBkb2VzIG5vdCBtYXRjaCBESVNQTEFZLUhJTlQiKSkgewotICAgICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fT0NURVRfU1RSLCBoaW50cHRyLCBpdG1wKTsKKyAgICAgICAgICAgICAgICBzbm1wX3BkdV9hZGRfdmFyaWFibGUocGR1LCBuYW1lLCBuYW1lX2xlbmd0aCwgQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGludHB0ciwgaXRtcCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBTTk1QX0ZSRUUoaGludHB0cik7CiAgICAgICAgICAgICBoaW50cHRyID0gYnVmOwpAQCAtNjk1OCw3ICs3MDU1LDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlICduJzoKLSAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9OVUxMLCAwLCAwKTsKKyAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9OVUxMLCBOVUxMLCAwKTsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlICdiJzoKQEAgLTcwMzMsNyArNzEzMCw3IEBACiAgICAgY2FzZSAnVSc6CiAgICAgICAgIGlmIChyZWFkNjQoJmM2NHRtcCwgdmFsdWUpKQogICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9PUEFRVUVfVTY0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBjNjR0bXAsIHNpemVvZihjNjR0bXApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYzY0dG1wLCBzaXplb2YoYzY0dG1wKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGdvdG8gZmFpbDsKICAgICAgICAgYnJlYWs7CkBAIC03MDQxLDcgKzcxMzgsNyBAQAogICAgIGNhc2UgJ0knOgogICAgICAgICBpZiAocmVhZDY0KCZjNjR0bXAsIHZhbHVlKSkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fT1BBUVVFX0k2NCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopICYgYzY0dG1wLCBzaXplb2YoYzY0dG1wKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmM2NHRtcCwgc2l6ZW9mKGM2NHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNzA0OSwxNiArNzE0NiwxNSBAQAogICAgIGNhc2UgJ0YnOgogICAgICAgICBpZiAoc3NjYW5mKHZhbHVlLCAiJWYiLCAmZnRtcCkgPT0gMSkKICAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLCBBU05fT1BBUVVFX0ZMT0FULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgJiBmdG1wLCBzaXplb2YoZnRtcCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmdG1wLCBzaXplb2YoZnRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAnRCc6CiAgICAgICAgIGlmIChzc2NhbmYodmFsdWUsICIlbGYiLCAmZHRtcCkgPT0gMSkKLSAgICAgICAgICAgIHNubXBfcGR1X2FkZF92YXJpYWJsZShwZHUsIG5hbWUsIG5hbWVfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTTl9PUEFRVUVfRE9VQkxFLCAodV9jaGFyICopICYgZHRtcCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZHRtcCkpOworICAgICAgICAgICAgc25tcF9wZHVfYWRkX3ZhcmlhYmxlKHBkdSwgbmFtZSwgbmFtZV9sZW5ndGgsIEFTTl9PUEFRVUVfRE9VQkxFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkdG1wLCBzaXplb2YoZHRtcCkpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBnb3RvIGZhaWw7CiAgICAgICAgIGJyZWFrOwpAQCAtNzI1OSwyNSArNzM1NSwyNyBAQAogb2lkICAgICAgICAgICAgKgogc25tcF9kdXBsaWNhdGVfb2JqaWQoY29uc3Qgb2lkICogb2JqVG9Db3B5LCBzaXplX3Qgb2JqVG9Db3B5TGVuKQogewotICAgIG9pZCAgICAgICAgICAgICpyZXR1cm5PaWQgPSBOVUxMOworICAgIG9pZCAgICAgICAgICAgICpyZXR1cm5PaWQ7CiAgICAgaWYgKG9ialRvQ29weSAhPSBOVUxMICYmIG9ialRvQ29weUxlbiAhPSAwKSB7CiAgICAgICAgIHJldHVybk9pZCA9IChvaWQgKikgbWFsbG9jKG9ialRvQ29weUxlbiAqIHNpemVvZihvaWQpKTsKICAgICAgICAgaWYgKHJldHVybk9pZCkgewotICAgICAgICAgICAgbWVtbW92ZShyZXR1cm5PaWQsIG9ialRvQ29weSwgb2JqVG9Db3B5TGVuICogc2l6ZW9mKG9pZCkpOworICAgICAgICAgICAgbWVtY3B5KHJldHVybk9pZCwgb2JqVG9Db3B5LCBvYmpUb0NvcHlMZW4gKiBzaXplb2Yob2lkKSk7CiAgICAgICAgIH0KLSAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybk9pZCA9IE5VTEw7CiAgICAgcmV0dXJuIHJldHVybk9pZDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MKIC8qCiAgKiBnZW5lcmljIHN0YXRpc3RpY3MgY291bnRlciBmdW5jdGlvbnMgCiAgKi8KLXN0YXRpYyB1X2ludCAgICBzdGF0aXN0aWNzW01BWF9TVEFUU107CitzdGF0aWMgdV9pbnQgICAgc3RhdGlzdGljc1tORVRTTk1QX1NUQVRfTUFYX1NUQVRTXTsKIAogdV9pbnQKIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhpbnQgd2hpY2gpCiB7Ci0gICAgaWYgKHdoaWNoID49IDAgJiYgd2hpY2ggPCBNQVhfU1RBVFMpIHsKKyAgICBpZiAod2hpY2ggPj0gMCAmJiB3aGljaCA8IE5FVFNOTVBfU1RBVF9NQVhfU1RBVFMpIHsKICAgICAgICAgc3RhdGlzdGljc1t3aGljaF0rKzsKICAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3Nbd2hpY2hdOwogICAgIH0KQEAgLTcyODcsNyArNzM4NSw3IEBACiB1X2ludAogc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljX2J5KGludCB3aGljaCwgaW50IGNvdW50KQogewotICAgIGlmICh3aGljaCA+PSAwICYmIHdoaWNoIDwgTUFYX1NUQVRTKSB7CisgICAgaWYgKHdoaWNoID49IDAgJiYgd2hpY2ggPCBORVRTTk1QX1NUQVRfTUFYX1NUQVRTKSB7CiAgICAgICAgIHN0YXRpc3RpY3Nbd2hpY2hdICs9IGNvdW50OwogICAgICAgICByZXR1cm4gc3RhdGlzdGljc1t3aGljaF07CiAgICAgfQpAQCAtNzI5Nyw3ICs3Mzk1LDcgQEAKIHVfaW50CiBzbm1wX2dldF9zdGF0aXN0aWMoaW50IHdoaWNoKQogewotICAgIGlmICh3aGljaCA+PSAwICYmIHdoaWNoIDwgTUFYX1NUQVRTKQorICAgIGlmICh3aGljaCA+PSAwICYmIHdoaWNoIDwgTkVUU05NUF9TVEFUX01BWF9TVEFUUykKICAgICAgICAgcmV0dXJuIHN0YXRpc3RpY3Nbd2hpY2hdOwogICAgIHJldHVybiAwOwogfQpAQCAtNzMwNyw1ICs3NDA1LDUgQEAKIHsKICAgICBtZW1zZXQoc3RhdGlzdGljcywgMCwgc2l6ZW9mKHN0YXRpc3RpY3MpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUQVRJU1RJQ1MgKi8KIC8qKiAgQH0gKi8KLQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2F1dGguYyBiL3NubXBsaWIvc25tcF9hdXRoLmMKaW5kZXggZGRmZDNkMy4uNGI0MDhmMSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2F1dGguYworKysgYi9zbm1wbGliL3NubXBfYXV0aC5jCkBAIC00MywxMSArNDMsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03MywxMCArNjksNiBAQAogI2luY2x1ZGUgPGRtYWxsb2MuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQogI2lmZGVmIHZtcwogI2luY2x1ZGUgPGluLmg+CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9jbGllbnQuYyBiL3NubXBsaWIvc25tcF9jbGllbnQuYwppbmRleCA3ZWVlM2ExLi5hYjdhNThjIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfY2xpZW50LmMKKysrIGIvc25tcGxpYi9zbm1wX2NsaWVudC5jCkBAIC00MCw2ICs0MCw3IEBACiAgKiAgQHsKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC01NiwxMSArNTcsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC04OSwxMiArODYsMTAgQEAKICNpbmNsdWRlIDxkbWFsbG9jLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogCisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvZHNfYWdlbnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9zZWNtb2QuaD4KQEAgLTEwMiw3ICs5NywxNCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWliLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXNzZXJ0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvcGR1X2FwaS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9jbGllbnRfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9zcGxpdF9wZHUsIHNubXBfY2xpZW50X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX3Jlc2V0X3Zhcl90eXBlcywgc25tcF9jbGllbnRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHF1ZXJ5X3NldF9kZWZhdWx0X3Nlc3Npb24sIHNubXBfY2xpZW50X2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihyb3dfY3JlYXRlLCBzbm1wX2NsaWVudF9hbGwpCiAKICNpZm5kZWYgQlNENF8zCiAjZGVmaW5lIEJTRDRfMgpAQCAtMTYxLDYgKzE2Myw3IEBACiB9CiAKIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgogc3RhdGljIGludAogc25tcF9zeW5jaF9pbnB1dChpbnQgb3AsCiAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCkBAIC0xNzAsMTAgKzE3MywxNCBAQAogICAgIGludCAgICAgICAgICAgICBycHRfdHlwZTsKIAogICAgIGlmIChyZXFpZCAhPSBzdGF0ZS0+cmVxaWQgJiYgcGR1ICYmIHBkdS0+Y29tbWFuZCAhPSBTTk1QX01TR19SRVBPUlQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc3luY2giLCAiVW5leHBlY3RlZCByZXNwb25zZSAoUmVxSUQ6ICVkLCVkIC0gQ21kICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaWQsIHN0YXRlLT5yZXFpZCwgcGR1LT5jb21tYW5kICkpOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CiAKICAgICBzdGF0ZS0+d2FpdGluZyA9IDA7CisgICAgREVCVUdNU0dUTCgoInNubXBfc3luY2giLCAiUmVzcG9uc2UgKFJlcUlEOiAlZCAtIENtZCAlZClcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVxaWQsIChwZHUgPyBwZHUtPmNvbW1hbmQgOiAtMSkpKTsKIAogICAgIGlmIChvcCA9PSBORVRTTk1QX0NBTExCQUNLX09QX1JFQ0VJVkVEX01FU1NBR0UgJiYgcGR1KSB7CiAgICAgICAgIGlmIChwZHUtPmNvbW1hbmQgPT0gU05NUF9NU0dfUkVQT1JUKSB7CkBAIC0yMzYsMTEgKzI0MywxMSBAQAogICAgICAgICByZXR1cm4gMTsKIAogICAgIG1lbW1vdmUobmV3dmFyLCB2YXIsIHNpemVvZihuZXRzbm1wX3ZhcmlhYmxlX2xpc3QpKTsKLSAgICBuZXd2YXItPm5leHRfdmFyaWFibGUgPSAwOwotICAgIG5ld3Zhci0+bmFtZSA9IDA7Ci0gICAgbmV3dmFyLT52YWwuc3RyaW5nID0gMDsKLSAgICBuZXd2YXItPmRhdGEgPSAwOwotICAgIG5ld3Zhci0+ZGF0YUZyZWVIb29rID0gMDsKKyAgICBuZXd2YXItPm5leHRfdmFyaWFibGUgPSBOVUxMOworICAgIG5ld3Zhci0+bmFtZSA9IE5VTEw7CisgICAgbmV3dmFyLT52YWwuc3RyaW5nID0gTlVMTDsKKyAgICBuZXd2YXItPmRhdGEgPSBOVUxMOworICAgIG5ld3Zhci0+ZGF0YUZyZWVIb29rID0gTlVMTDsKICAgICBuZXd2YXItPmluZGV4ID0gMDsKIAogICAgIC8qCkBAIC0yNjUsOSArMjcyLDEzIEBACiAgICAgICAgICAgICBtZW1tb3ZlKG5ld3Zhci0+dmFsLnN0cmluZywgdmFyLT52YWwuc3RyaW5nLCB2YXItPnZhbF9sZW4pOwogICAgICAgICB9IGVsc2UgeyAgICAgICAgICAgICAgICAvKiBmaXggdGhlIHBvaW50ZXIgdG8gbmV3IGxvY2FsIHN0b3JlICovCiAgICAgICAgICAgICBuZXd2YXItPnZhbC5zdHJpbmcgPSBuZXd2YXItPmJ1ZjsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBubyBuZWVkIGZvciBhIG1lbW1vdmUsIHNpbmNlIHdlIGNvcGllZCB0aGUgd2hvbGUgdmFyCisgICAgICAgICAgICAgKiBzdHJ1Y3QgKGFuZCB0aHVzIHZhci0+YnVmKSBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgZnVuY3Rpb24uCisgICAgICAgICAgICAgKi8KICAgICAgICAgfQogICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld3Zhci0+dmFsLnN0cmluZyA9IDA7CisgICAgICAgIG5ld3Zhci0+dmFsLnN0cmluZyA9IE5VTEw7CiAgICAgICAgIG5ld3Zhci0+dmFsX2xlbiA9IDA7CiAgICAgfQogCkBAIC0yODEsOSArMjkyLDkgQEAKICAqIFJldHVybnMgMCBpZiBzdWNjZXNzZnVsLCAxIGlmIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWxzLgogICovCiBpbnQKLXNubXBfY2xvbmVfbWVtKHZvaWQgKipkc3RQdHIsIHZvaWQgKnNyY1B0ciwgdW5zaWduZWQgbGVuKQorc25tcF9jbG9uZV9tZW0odm9pZCAqKmRzdFB0ciwgY29uc3Qgdm9pZCAqc3JjUHRyLCB1bnNpZ25lZCBsZW4pCiB7Ci0gICAgKmRzdFB0ciA9IDA7CisgICAgKmRzdFB0ciA9IE5VTEw7CiAgICAgaWYgKHNyY1B0cikgewogICAgICAgICAqZHN0UHRyID0gbWFsbG9jKGxlbiArIDEpOwogICAgICAgICBpZiAoISpkc3RQdHIpIHsKQEAgLTM0MywyMCArMzU0LDIwIEBACiAKICAgICBuZXdwZHUgPSAobmV0c25tcF9wZHUgKikgbWFsbG9jKHNpemVvZihuZXRzbm1wX3BkdSkpOwogICAgIGlmICghbmV3cGR1KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgbWVtbW92ZShuZXdwZHUsIHBkdSwgc2l6ZW9mKG5ldHNubXBfcGR1KSk7CiAKICAgICAvKgogICAgICAqIHJlc2V0IGNvcGllZCBwb2ludGVycyBpZiBjb3B5IGZhaWxzIAogICAgICAqLwotICAgIG5ld3BkdS0+dmFyaWFibGVzID0gMDsKLSAgICBuZXdwZHUtPmVudGVycHJpc2UgPSAwOwotICAgIG5ld3BkdS0+Y29tbXVuaXR5ID0gMDsKLSAgICBuZXdwZHUtPnNlY3VyaXR5RW5naW5lSUQgPSAwOwotICAgIG5ld3BkdS0+c2VjdXJpdHlOYW1lID0gMDsKLSAgICBuZXdwZHUtPmNvbnRleHRFbmdpbmVJRCA9IDA7Ci0gICAgbmV3cGR1LT5jb250ZXh0TmFtZSA9IDA7Ci0gICAgbmV3cGR1LT50cmFuc3BvcnRfZGF0YSA9IDA7CisgICAgbmV3cGR1LT52YXJpYWJsZXMgPSBOVUxMOworICAgIG5ld3BkdS0+ZW50ZXJwcmlzZSA9IE5VTEw7CisgICAgbmV3cGR1LT5jb21tdW5pdHkgPSBOVUxMOworICAgIG5ld3BkdS0+c2VjdXJpdHlFbmdpbmVJRCA9IE5VTEw7CisgICAgbmV3cGR1LT5zZWN1cml0eU5hbWUgPSBOVUxMOworICAgIG5ld3BkdS0+Y29udGV4dEVuZ2luZUlEID0gTlVMTDsKKyAgICBuZXdwZHUtPmNvbnRleHROYW1lID0gTlVMTDsKKyAgICBuZXdwZHUtPnRyYW5zcG9ydF9kYXRhID0gTlVMTDsKIAogICAgIC8qCiAgICAgICogY29weSBidWZmZXJzIGluZGl2aWR1YWxseS4gSWYgYW55IGNvcHkgZmFpbHMsIGFsbCBhcmUgZnJlZWQuIApAQCAtMzc3LDcgKzM4OCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoKSkgewogICAgICAgICBzbm1wX2ZyZWVfcGR1KG5ld3BkdSk7Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gTlVMTDsKICAgICB9CiAKICAgICBpZiAocGR1ICE9IE5VTEwgJiYgcGR1LT5zZWN1cml0eVN0YXRlUmVmICYmCkBAIC0zOTIsNiArNDAzLDcgQEAKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICB9CiAgICAgfQorCiAgICAgaWYgKChzcHRyID0gZmluZF9zZWNfbW9kKG5ld3BkdS0+c2VjdXJpdHlNb2RlbCkpICE9IE5VTEwgJiYKICAgICAgICAgc3B0ci0+cGR1X2Nsb25lICE9IE5VTEwpIHsKICAgICAgICAgLyoKQEAgLTQzMywxMyArNDQ1LDEzIEBACiAgICAgICAgICAgICBpZiAobmV3dmFyKQogICAgICAgICAgICAgICAgIGZyZWUoKGNoYXIgKikgbmV3dmFyKTsKICAgICAgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKG5ld2hlYWQpOwotICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKICAgICAgICAgfQogCiAgICAgICAgIC8qCiAgICAgICAgICAqIGFkZCBjbG9uZWQgdmFyaWFibGUgdG8gbmV3IGxpc3QgIAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKDAgPT0gbmV3aGVhZCkKKyAgICAgICAgaWYgKE5VTEwgPT0gbmV3aGVhZCkKICAgICAgICAgICAgIG5ld2hlYWQgPSBuZXd2YXI7CiAgICAgICAgIGlmIChvbGR2YXIpCiAgICAgICAgICAgICBvbGR2YXItPm5leHRfdmFyaWFibGUgPSBuZXd2YXI7CkBAIC00ODQsNyArNDk2LDcgQEAKICAgICBpbnQgICAgICAgICAgICAgZHJvcF9pZHg7CiAKICAgICBpZiAoIW5ld3BkdSkKLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgLyogd2hlcmUgaXMgUERVIHRvIGNvcHkgdG8gPyAqLworICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiB3aGVyZSBpcyBQRFUgdG8gY29weSB0byA/ICovCiAKICAgICBpZiAoZHJvcF9lcnIpCiAgICAgICAgIGRyb3BfaWR4ID0gcGR1LT5lcnJpbmRleCAtIHNraXBfY291bnQ7CkBAIC01NTEsNyArNTYzLDcgQEAKIC8qCiAgKiBUaGlzIGZ1bmN0aW9uIHdpbGwgY2xvbmUgYSBmdWxsIHZhcmJpbmQgbGlzdAogICoKLSAqIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBjbG9uZWQgUERVIGlmIHN1Y2Nlc3NmdWwuCisgKiBSZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgY2xvbmVkIHZhcmJpbmQgbGlzdCBpZiBzdWNjZXNzZnVsLgogICogUmV0dXJucyAwIGlmIGZhaWx1cmUKICAqLwogbmV0c25tcF92YXJpYWJsZV9saXN0ICoKQEAgLTU4Miw2ICs1OTQsNyBAQAogICogUmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGNsb25lZCBQRFUgaWYgc3VjY2Vzc2Z1bC4KICAqIFJldHVybnMgMCBpZiBmYWlsdXJlLgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9TUExJVF9QRFUKIG5ldHNubXBfcGR1ICAgICoKIHNubXBfc3BsaXRfcGR1KG5ldHNubXBfcGR1ICpwZHUsIGludCBza2lwX2NvdW50LCBpbnQgY29weV9jb3VudCkKIHsKQEAgLTU5Miw2ICs2MDUsNyBAQAogCiAgICAgcmV0dXJuIG5ld3BkdTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfU1BMSVRfUERVICovCiAKIAogLyoKQEAgLTYxMywxOCArNjI3LDE4IEBACiAKICAgICBpZiAoKHBkdS0+Y29tbWFuZCAhPSBTTk1QX01TR19SRVNQT05TRSkKICAgICAgICAgfHwgKHBkdS0+ZXJyc3RhdCA9PSBTTk1QX0VSUl9OT0VSUk9SKQotICAgICAgICB8fCAoMCA9PSBwZHUtPnZhcmlhYmxlcykKLSAgICAgICAgfHwgKHBkdS0+ZXJyaW5kZXggPiBzbm1wX3ZhcmJpbmRfbGVuKHBkdSkpCisgICAgICAgIHx8IChOVUxMID09IHBkdS0+dmFyaWFibGVzKQorICAgICAgICB8fCAocGR1LT5lcnJpbmRleCA+IChpbnQpc25tcF92YXJiaW5kX2xlbihwZHUpKQogICAgICAgICB8fCAocGR1LT5lcnJpbmRleCA8PSAwKSkgewotICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAvKiBwcmUtY29uZGl0aW9uIHRlc3RzIGZhaWwgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7ICAgICAgICAgICAgLyogcHJlLWNvbmRpdGlvbiB0ZXN0cyBmYWlsICovCiAgICAgfQogCiAgICAgbmV3cGR1ID0gX2Nsb25lX3BkdShwZHUsIDEpOyAgICAgICAgLyogY29waWVzIGFsbCBleGNlcHQgZXJyb3JlZCB2YXJpYWJsZSAqLwogICAgIGlmICghbmV3cGR1KQotICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgaWYgKCFuZXdwZHUtPnZhcmlhYmxlcykgewogICAgICAgICBzbm1wX2ZyZWVfcGR1KG5ld3BkdSk7Ci0gICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgIC8qIG5vIHZhcmlhYmxlcy4gInNob3VsZCBub3QgaGFwcGVuIiAqLworICAgICAgICByZXR1cm4gTlVMTDsgICAgICAgICAgICAvKiBubyB2YXJpYWJsZXMuICJzaG91bGQgbm90IGhhcHBlbiIgKi8KICAgICB9CiAgICAgbmV3cGR1LT5jb21tYW5kID0gY29tbWFuZDsKICAgICBuZXdwZHUtPnJlcWlkID0gc25tcF9nZXRfbmV4dF9yZXFpZCgpOwpAQCAtNzE1LDEwICs3MjksOCBAQAogc25tcF9zZXRfdmFyX3R5cGVkX2ludGVnZXIobmV0c25tcF92YXJpYWJsZV9saXN0ICogbmV3dmFyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdV9jaGFyIHR5cGUsIGxvbmcgdmFsKQogewotICAgIGNvbnN0IGxvbmcgdiA9IHZhbDsKICAgICBuZXd2YXItPnR5cGUgPSB0eXBlOwotICAgIHJldHVybiBzbm1wX3NldF92YXJfdmFsdWUobmV3dmFyLCAmdiwgc2l6ZW9mKGxvbmcpKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gc25tcF9zZXRfdmFyX3ZhbHVlKG5ld3ZhciwgJnZhbCwgc2l6ZW9mKGxvbmcpKTsKIH0KIAogaW50CkBAIC03MzIsNiArNzQ0LDggQEAKICAgICByZXR1cm4gY291bnQ7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjb3VudF92YXJiaW5kc19vZl90eXBlLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT1VOVF9WQVJCSU5EU19PRl9UWVBFCiBpbnQKIGNvdW50X3ZhcmJpbmRzX29mX3R5cGUobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyX3B0ciwgdV9jaGFyIHR5cGUpCiB7CkBAIC03NDMsNyArNzU3LDEwIEBACiAKICAgICByZXR1cm4gY291bnQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DT1VOVF9WQVJCSU5EU19PRl9UWVBFICovCiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihmaW5kX3ZhcmluZF9vZl90eXBlLCBuZXRzbm1wX3VudXNlZCkKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX1ZBUklORF9PRl9UWVBFCiBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKgogZmluZF92YXJiaW5kX29mX3R5cGUobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyX3B0ciwgdV9jaGFyIHR5cGUpCiB7CkBAIC03NTIsMTAgKzc2OSwxMSBAQAogCiAgICAgcmV0dXJuIHZhcl9wdHI7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9GSU5EX1ZBUklORF9PRl9UWVBFICovCiAKIG5ldHNubXBfdmFyaWFibGVfbGlzdCoKIGZpbmRfdmFyYmluZF9pbl9saXN0KCBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZibGlzdCwKLSAgICAgICAgICAgICAgICAgICAgICBvaWQgKm5hbWUsIHNpemVfdCBsZW4pCisgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb2lkICpuYW1lLCBzaXplX3QgbGVuKQogewogICAgIGZvciAoOyB2Ymxpc3QgIT0gTlVMTDsgdmJsaXN0ID0gdmJsaXN0LT5uZXh0X3ZhcmlhYmxlKQogICAgICAgICBpZiAoIXNubXBfb2lkX2NvbXBhcmUodmJsaXN0LT5uYW1lLCB2Ymxpc3QtPm5hbWVfbGVuZ3RoLCBuYW1lLCBsZW4pKQpAQCAtNzgzLDcgKzgwMSw3IEBACiAgICAgaWYgKHZhcnMtPnZhbC5zdHJpbmcgJiYgdmFycy0+dmFsLnN0cmluZyAhPSB2YXJzLT5idWYpIHsKICAgICAgICAgZnJlZSh2YXJzLT52YWwuc3RyaW5nKTsKICAgICB9Ci0gICAgdmFycy0+dmFsLnN0cmluZyA9IDA7CisgICAgdmFycy0+dmFsLnN0cmluZyA9IE5VTEw7CiAgICAgdmFycy0+dmFsX2xlbiA9IDA7CiAKICAgICBpZiAodmFsdWUgPT0gTlVMTCAmJiBsZW4gPiAwKSB7CkBAIC03OTQsNyArODEyLDcgQEAKICAgICAvKgogICAgICAqIHVzZSBidWlsdC1pbiBzdG9yYWdlIGZvciBzbWFsbGVyIHZhbHVlcyAKICAgICAgKi8KLSAgICBpZiAobGVuIDw9IChzaXplb2YodmFycy0+YnVmKSAtIDEpKSB7CisgICAgaWYgKGxlbiA8PSBzaXplb2YodmFycy0+YnVmKSkgewogICAgICAgICB2YXJzLT52YWwuc3RyaW5nID0gKHVfY2hhciAqKSB2YXJzLT5idWY7CiAgICAgICAgIGxhcmdldmFsID0gMDsKICAgICB9CkBAIC04MzMsNyArODUxLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCi0jaWYgZGVmaW5lZChTSVpFT0ZfTE9OR19MT05HKSAmJiAoU0laRU9GX0xPTkcgIT0gU0laRU9GX0xPTkdfTE9ORykgJiYgKFNJWkVPRl9MT05HX0xPTkcgIT0gU0laRU9GX0lOVE1BWF9UKQorI2lmIGRlZmluZWQoU0laRU9GX0xPTkdfTE9ORykgJiYgKFNJWkVPRl9MT05HICE9IFNJWkVPRl9MT05HX0xPTkcpCisjaWYgIWRlZmluZWQoU0laRU9GX0lOVE1BWF9UKSB8fCAoU0laRU9GX0xPTkdfTE9ORyAhPSBTSVpFT0ZfSU5UTUFYX1QpCiAgICAgICAgIGVsc2UgaWYgKHZhcnMtPnZhbF9sZW4gPT0gc2l6ZW9mKGxvbmcgbG9uZykpewogICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyBsb25nICAgKnZhbF91bGxvbmcKICAgICAgICAgICAgICAgICA9IChjb25zdCB1bnNpZ25lZCBsb25nIGxvbmcgKikgdmFsdWU7CkBAIC04NDQsNyArODYzLDggQEAKICAgICAgICAgICAgIH0KICAgICAgICAgfQogI2VuZGlmCi0jaWYgU0laRU9GX0xPTkcgIT0gU0laRU9GX0lOVE1BWF9UCisjZW5kaWYKKyNpZiBkZWZpbmVkKFNJWkVPRl9JTlRNQVhfVCkgJiYgKFNJWkVPRl9MT05HICE9IFNJWkVPRl9JTlRNQVhfVCkKICAgICAgICAgZWxzZSBpZiAodmFycy0+dmFsX2xlbiA9PSBzaXplb2YoaW50bWF4X3QpKXsKICAgICAgICAgICAgIGNvbnN0IHVpbnRtYXhfdCAqdmFsX3VpbnRtYXhfdAogICAgICAgICAgICAgICAgID0gKGNvbnN0IHVpbnRtYXhfdCAqKSB2YWx1ZTsKQEAgLTg3NCw3ICs4OTQsNyBAQAogICAgICAgICAgICAgICAgICAgICA9IChjb25zdCBjaGFyICopIHZhbHVlOwogICAgICAgICAgICAgICAgICoodmFycy0+dmFsLmludGVnZXIpID0gKGxvbmcpICp2YWxfY2hhcjsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICAgICp2YWxfdWNoYXIgCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAgICAqdmFsX3VjaGFyCiAgICAgICAgICAgICAgICAgICAgID0gKGNvbnN0IHVfY2hhciAqKSB2YWx1ZTsKICAgICAgICAgICAgICAgICAqKHZhcnMtPnZhbC5pbnRlZ2VyKSA9ICh1bnNpZ25lZCBsb25nKSAqdmFsX3VjaGFyOwogICAgICAgICAgICAgfQpAQCAtOTExLDcgKzkzMSw3IEBACiAgICAgY2FzZSBBU05fQklUX1NUUjoKICAgICBjYXNlIEFTTl9PUEFRVUU6CiAgICAgY2FzZSBBU05fTlNBUDoKLSAgICAgICAgaWYgKGxhcmdldmFsKSB7CisgICAgICAgIGlmICh2YXJzLT52YWxfbGVuID49IHNpemVvZih2YXJzLT5idWYpKSB7CiAgICAgICAgICAgICB2YXJzLT52YWwuc3RyaW5nID0gKHVfY2hhciAqKSBtYWxsb2ModmFycy0+dmFsX2xlbiArIDEpOwogICAgICAgICB9CiAgICAgICAgIGlmICh2YXJzLT52YWwuc3RyaW5nID09IE5VTEwpIHsKQEAgLTk5Myw2ICsxMDEzLDcgQEAKICAgICB9CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX1JFU0VUX1ZBUl9UWVBFUwogdm9pZAogc25tcF9yZXNldF92YXJfdHlwZXMobmV0c25tcF92YXJpYWJsZV9saXN0ICogdmJsLCB1X2NoYXIgbmV3X3R5cGUpCiB7CkBAIC0xMDAxLDYgKzEwMjIsNyBAQAogICAgICAgICB2YmwgPSB2YmwtPm5leHRfdmFyaWFibGU7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9SRVNFVF9WQVJfVFlQRVMgKi8KIAogaW50CiBzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiKG5ldHNubXBfc2Vzc2lvbiAqIHNzLApAQCAtMTAzNCwxMCArMTA1NiwxMSBAQAogICAgICAgICBibG9jayA9IE5FVFNOTVBfU05NUEJMT0NLOwogICAgICAgICB0dnAgPSAmdGltZW91dDsKICAgICAgICAgdGltZXJjbGVhcih0dnApOwotICAgICAgICBzbm1wX3NlbGVjdF9pbmZvKCZudW1mZHMsICZmZHNldCwgdHZwLCAmYmxvY2spOworICAgICAgICBzbm1wX3Nlc3Nfc2VsZWN0X2luZm9fZmxhZ3MoMCwgJm51bWZkcywgJmZkc2V0LCB0dnAsICZibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VMRUNUX05PQUxBUk1TKTsKICAgICAgICAgaWYgKGJsb2NrID09IDEpCiAgICAgICAgICAgICB0dnAgPSBOVUxMOyAgICAgICAgIC8qIGJsb2NrIHdpdGhvdXQgdGltZW91dCAqLwotICAgICAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZmZHNldCwgMCwgMCwgdHZwKTsKKyAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIE5VTEwsIE5VTEwsIHR2cCk7CiAgICAgICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgICAgIHNubXBfcmVhZCgmZmRzZXQpOwogICAgICAgICB9IGVsc2UgewpAQCAtMTA3MCw3ICsxMDkzLDcgQEAKIAogICAgICAgICBpZiAoIHNzLT5mbGFncyAmIFNOTVBfRkxBR1NfUkVTUF9DQUxMQkFDSyApIHsKICAgICAgICAgICAgIHZvaWQgKCpjYikodm9pZCk7Ci0gICAgICAgICAgICBjYiA9IHNzLT5teXZvaWQ7CisgICAgICAgICAgICBjYiA9ICh2b2lkICgqKSh2b2lkKSkoc3MtPm15dm9pZCk7CiAgICAgICAgICAgICBjYigpOyAgICAgICAgLyogVXNlZCB0byBpbnZva2UgJ25ldHNubXBfY2hlY2tfb3V0c3RhbmRpbmdfYWdlbnRfcmVxdWVzdHMoKTsnCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gaW50ZXJuYWwgQWdlbnRYIHF1ZXJpZXMuICAqLwogICAgICAgICB9CkBAIC0xMTI1LDEwICsxMTQ4LDExIEBACiAgICAgICAgIGJsb2NrID0gTkVUU05NUF9TTk1QQkxPQ0s7CiAgICAgICAgIHR2cCA9ICZ0aW1lb3V0OwogICAgICAgICB0aW1lcmNsZWFyKHR2cCk7Ci0gICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mbyhzZXNzcCwgJm51bWZkcywgJmZkc2V0LCB0dnAsICZibG9jayk7CisgICAgICAgIHNubXBfc2Vzc19zZWxlY3RfaW5mb19mbGFncyhzZXNzcCwgJm51bWZkcywgJmZkc2V0LCB0dnAsICZibG9jaywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfU0VMRUNUX05PQUxBUk1TKTsKICAgICAgICAgaWYgKGJsb2NrID09IDEpCiAgICAgICAgICAgICB0dnAgPSBOVUxMOyAgICAgICAgIC8qIGJsb2NrIHdpdGhvdXQgdGltZW91dCAqLwotICAgICAgICBjb3VudCA9IHNlbGVjdChudW1mZHMsICZmZHNldCwgMCwgMCwgdHZwKTsKKyAgICAgICAgY291bnQgPSBzZWxlY3QobnVtZmRzLCAmZmRzZXQsIE5VTEwsIE5VTEwsIHR2cCk7CiAgICAgICAgIGlmIChjb3VudCA+IDApIHsKICAgICAgICAgICAgIHNubXBfc2Vzc19yZWFkKHNlc3NwLCAmZmRzZXQpOwogICAgICAgICB9IGVsc2UKQEAgLTEyMDUsMTUgKzEyMjksNDggQEAKICAqICBvdmVyIHRoZSBzcGVjaWZpZWQgU05NUCBzZXNzaW9uLgogICoKICAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorCiBzdGF0aWMgbmV0c25tcF9zZXNzaW9uICpfZGVmX3F1ZXJ5X3Nlc3Npb24gPSBOVUxMOworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUVVFUllfU0VUX0RFRkFVTFRfU0VTU0lPTgogdm9pZAogbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uKCBuZXRzbm1wX3Nlc3Npb24gKnNlc3MpIHsKKyAgICBERUJVR01TR1RMKCgiaXF1ZXJ5IiwgInNldCBkZWZhdWx0IHNlc3Npb24gJXBcbiIsIHNlc3MpKTsKICAgICBfZGVmX3F1ZXJ5X3Nlc3Npb24gPSBzZXNzOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfUVVFUllfU0VUX0RFRkFVTFRfU0VTU0lPTiAqLwogCisvKioKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRlZmF1bHQgaW50ZXJuYWwgcXVlcnkgc2Vzc2lvbi4KKyAqLworbmV0c25tcF9zZXNzaW9uICoKK25ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbl91bmNoZWNrZWQoIHZvaWQgKSB7CisgICAgREVCVUdNU0dUTCgoImlxdWVyeSIsICJnZXQgZGVmYXVsdCBzZXNzaW9uICVwXG4iLCBfZGVmX3F1ZXJ5X3Nlc3Npb24pKTsKKyAgICByZXR1cm4gX2RlZl9xdWVyeV9zZXNzaW9uOworfQorCisvKioKKyAqIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRlZmF1bHQgaW50ZXJuYWwgcXVlcnkgc2Vzc2lvbiBhbmQgbG9nIGEKKyAqIHdhcm5pbmcgbWVzc2FnZSBvbmNlIGlmIHRoaXMgc2Vzc2lvbiBkb2VzIG5vdCBleGlzdC4KKyAqLwogbmV0c25tcF9zZXNzaW9uICoKIG5ldHNubXBfcXVlcnlfZ2V0X2RlZmF1bHRfc2Vzc2lvbiggdm9pZCApIHsKLSAgICByZXR1cm4gX2RlZl9xdWVyeV9zZXNzaW9uOworICAgIHN0YXRpYyBpbnQgd2FybmluZ19sb2dnZWQgPSAwOworCisgICAgaWYgKCEgX2RlZl9xdWVyeV9zZXNzaW9uICYmICEgd2FybmluZ19sb2dnZWQpIHsKKyAgICAgICAgaWYgKCEgbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfQVBQTElDQVRJT05fSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0FHRU5UX0lOVEVSTkFMX1NFQ05BTUUpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJpcXVlcnlTZWNOYW1lIGhhcyBub3QgYmVlbiBjb25maWd1cmVkIC0gaW50ZXJuYWwgcXVlcmllcyB3aWxsIGZhaWxcbiIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICAgICAiZGVmYXVsdCBzZXNzaW9uIGlzIG5vdCBhdmFpbGFibGUgLSBpbnRlcm5hbCBxdWVyaWVzIHdpbGwgZmFpbFxuIik7CisgICAgICAgIH0KKyAgICAgICAgd2FybmluZ19sb2dnZWQgPSAxOworICAgIH0KKworICAgIHJldHVybiBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb25fdW5jaGVja2VkKCk7CiB9CiAKIApAQCAtMTIyNyw4ICsxMjg0LDkgQEAKICAgICBuZXRzbm1wX3BkdSAqcGR1ICAgICAgPSBzbm1wX3BkdV9jcmVhdGUoIHJlcXVlc3QgKTsKICAgICBuZXRzbm1wX3BkdSAqcmVzcG9uc2UgPSBOVUxMOwogICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmIxLCAqdmIyLCAqdnRtcDsKLSAgICBpbnQgcmV0OworICAgIGludCByZXQsIGNvdW50OwogCisgICAgREVCVUdNU0dUTCgoImlxdWVyeSIsICJxdWVyeSBvbiBzZXNzaW9uICVwXG4iLCBzZXNzaW9uKSk7CiAgICAgLyoKICAgICAgKiBDbG9uZSB0aGUgdmFyYmluZCBsaXN0IGludG8gdGhlIHJlcXVlc3QgUERVLi4uCiAgICAgICovCkBAIC0xMjQzLDYgKzEzMDEsNyBAQAogICAgICAgICBzbm1wX2ZyZWVfcGR1KHBkdSk7CiAgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CiAgICAgfQorICAgIERFQlVHTVNHVEwoKCJpcXVlcnkiLCAicXVlcnkgcmV0dXJuZWQgJWRcbiIsIHJldCkpOwogCiAgICAgLyoKICAgICAgKiAuLi4udGhlbiBjb3B5IHRoZSByZXN1bHRzIGJhY2sgaW50byB0aGUKQEAgLTEyNTIsNiArMTMxMSw4IEBACiAgICAgICovCiAgICAgaWYgKCByZXQgPT0gU05NUF9FUlJfTk9FUlJPUiApIHsKICAgICAgICAgaWYgKCByZXNwb25zZS0+ZXJyc3RhdCAhPSBTTk1QX0VSUl9OT0VSUk9SICkgeworICAgICAgICAgICAgREVCVUdNU0dUKCgiaXF1ZXJ5IiwgIkVycm9yIGluIHBhY2tldDogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIHNubXBfZXJyc3RyaW5nKHJlc3BvbnNlLT5lcnJzdGF0KSkpOwogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIElmIHRoZSByZXF1ZXN0IGZhaWxlZCwgdGhlbiByZW1vdmUgdGhlCiAgICAgICAgICAgICAgKiAgb2ZmZW5kaW5nIHZhcmJpbmQgYW5kIHRyeSBhZ2Fpbi4KQEAgLTEyNjEsMzAgKzEzMjIsMzkgQEAKICAgICAgICAgICAgICAqICAgICAgIE5FVFNOTVBfRFNfQVBQX0RPTlRfRklYX1BEVVMgPz8KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgcmV0ID0gcmVzcG9uc2UtPmVycnN0YXQ7CisgICAgICAgICAgICBpZiAocmVzcG9uc2UtPmVycmluZGV4ICE9IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJpcXVlcnk6cmVzdWx0IiwgIkZhaWxlZCBvYmplY3Q6XG4iKSk7CisgICAgICAgICAgICAgICAgZm9yIChjb3VudCA9IDEsIHZ0bXAgPSByZXNwb25zZS0+dmFyaWFibGVzOworICAgICAgICAgICAgICAgICAgICAgdnRtcCAmJiBjb3VudCAhPSByZXNwb25zZS0+ZXJyaW5kZXg7CisgICAgICAgICAgICAgICAgICAgICB2dG1wID0gdnRtcC0+bmV4dF92YXJpYWJsZSwgY291bnQrKykKKyAgICAgICAgICAgICAgICAgICAgLypFTVBUWSovOworICAgICAgICAgICAgICAgIGlmICh2dG1wKQorICAgICAgICAgICAgICAgICAgICBERUJVR01TR1ZBUigoImlxdWVyeTpyZXN1bHQiLCB2dG1wKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJpcXVlcnk6cmVzdWx0IiwgIlxuIikpOworICAgICAgICAgICAgfQorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKICAgICAgICAgICAgIGlmIChyZXF1ZXN0ICE9IFNOTVBfTVNHX1NFVCAmJgogICAgICAgICAgICAgICAgIHJlc3BvbnNlLT5lcnJpbmRleCAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoImlxdWVyeSIsICJyZXRyeWluZyBxdWVyeSAoJWQsICVsZClcbiIsIHJldCwgcmVzcG9uc2UtPmVycmluZGV4KSk7CiAgICAgICAgICAgICAgICAgcGR1ID0gc25tcF9maXhfcGR1KCByZXNwb25zZSwgcmVxdWVzdCApOwogICAgICAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoIHJlc3BvbnNlICk7CiAgICAgICAgICAgICAgICAgcmVzcG9uc2UgPSBOVUxMOwogICAgICAgICAgICAgICAgIGlmICggcGR1ICE9IE5VTEwgKQogICAgICAgICAgICAgICAgICAgICBnb3RvIHJldHJ5OwogICAgICAgICAgICAgfQorI2VuZGlmIC8qICFORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGZvciAodmIxID0gcmVzcG9uc2UtPnZhcmlhYmxlcywgdmIyID0gbGlzdDsKICAgICAgICAgICAgICAgICAgdmIxOwogICAgICAgICAgICAgICAgICB2YjEgPSB2YjEtPm5leHRfdmFyaWFibGUsICB2YjIgPSB2YjItPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1ZBUigoImlxdWVyeTpyZXN1bHQiLCB2YjEpKTsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoImlxdWVyeTpyZXN1bHRzIiwgIlxuIikpOwogICAgICAgICAgICAgICAgIGlmICggIXZiMiApIHsKICAgICAgICAgICAgICAgICAgICAgcmV0ID0gU05NUF9FUlJfR0VORVJSOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgdnRtcCA9IHZiMi0+bmV4dF92YXJpYWJsZTsKLSAgICAgICAgICAgICAgICAvKiBmcmVlIG9sZCBkYXRhIGJlZm9yZSBvdmVyd3JpdGluZyAqLwotICAgICAgICAgICAgICAgIGlmICh2YjItPnZhbC5zdHJpbmcpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZiMi0+dmFsLnN0cmluZyAhPSAmdmIyLT5idWZbMF0pIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZyZWUodmIyLT52YWwuc3RyaW5nKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZiMi0+dmFsLnN0cmluZyA9IE5VTEw7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgc25tcF9mcmVlX3Zhcl9pbnRlcm5hbHMoIHZiMiApOwogICAgICAgICAgICAgICAgIHNubXBfY2xvbmVfdmFyKCB2YjEsIHZiMiApOwogICAgICAgICAgICAgICAgIHZiMi0+bmV4dF92YXJpYWJsZSA9IHZ0bXA7CiAgICAgICAgICAgICB9CkBAIC0xMzEyLDEwICsxMzgyLDEyIEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIGludCBuZXRzbm1wX3F1ZXJ5X3NldChuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKmxpc3QsCiAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICpzZXNzaW9uKXsKICAgICByZXR1cm4gX3F1ZXJ5KCBsaXN0LCBTTk1QX01TR19TRVQsIHNlc3Npb24gKTsKIH0KKyNlbmRpZiAvKiAhTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCiAKIC8qCiAgKiBBIHdhbGsgbmVlZHMgYSBiaXQgbW9yZSB3b3JrLgpAQCAtMTM3MSw0ICsxNDQzLDQ0OCBAQAogICAgIHNubXBfZnJlZV92YXJiaW5kKCB2YiApOwogICAgIHJldHVybiByZXQ7CiB9CisKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHN0YXRlIG1hY2hpbmUKKyAqCisgKi8KK2ludAorbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3J1biggbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCkKK3sKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqY3VycmVudCwgKmxhc3Q7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfR0VORVJSICk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LT5zdGVwcywgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBsYXN0ID0gY3VycmVudCA9IGlucHV0LT5zdGVwczsKKworICAgIERFQlVHTVNHVCgoInN0YXRlX21hY2hpbmU6cnVuIiwgInN0YXJ0aW5nIHN0ZXA6ICVzXG4iLCBjdXJyZW50LT5uYW1lKSk7CisKKyAgICB3aGlsZSAoY3VycmVudCkgeworCisgICAgICAgIC8qCisgICAgICAgICAqIGxvZyBzdGVwIGFuZCBjaGVjayBmb3IgcmVxdWlyZWQgZGF0YQorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUKCgic3RhdGVfbWFjaGluZTpydW4iLCAiYXQgc3RlcDogJXNcbiIsIGN1cnJlbnQtPm5hbWUpKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gY3VycmVudC0+cnVuKSB7CisgICAgICAgICAgICBERUJVR01TR1QoKCJzdGF0ZV9tYWNoaW5lOnJ1biIsICJubyBydW4gc3RlcFxuIikpOworICAgICAgICAgICAgY3VycmVudC0+cmVzdWx0ID0gbGFzdC0+cmVzdWx0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBydW4gc3RlcAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUKCgic3RhdGVfbWFjaGluZTpydW4iLCAicnVubmluZyBzdGVwOiAlc1xuIiwgY3VycmVudC0+bmFtZSkpOworICAgICAgICBjdXJyZW50LT5yZXN1bHQgPSAoKmN1cnJlbnQtPnJ1bikoIGlucHV0LCBjdXJyZW50ICk7CisgICAgICAgICsraW5wdXQtPnN0ZXBzX3NvX2ZhcjsKKyAgICAgICAgCisgICAgICAgIC8qCisgICAgICAgICAqIGxvZyByZXN1bHQgYW5kIG1vdmUgdG8gbmV4dCBzdGVwCisgICAgICAgICAqLworICAgICAgICBpbnB1dC0+bGFzdF9ydW4gPSBjdXJyZW50OworICAgICAgICBERUJVR01TR1QoKCJzdGF0ZV9tYWNoaW5lOnJ1bjpyZXN1bHQiLCAic3RlcCAlcyByZXR1cm5lZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5uYW1lLCBjdXJyZW50LT5yZXN1bHQpKTsKKyAgICAgICAgaWYgKFNOTVBFUlJfU1VDQ0VTUyA9PSBjdXJyZW50LT5yZXN1bHQpCisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+b25fc3VjY2VzczsKKyAgICAgICAgZWxzZSBpZiAoU05NUEVSUl9BQk9SVCA9PSBjdXJyZW50LT5yZXN1bHQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoInN0YXRlX21hY2hpbmU6cnVuOnJlc3VsdCIsICJBQk9SVCBmcm9tICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50LT5uYW1lKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+b25fZXJyb3I7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBydW4gY2xlYW51cAorICAgICAqLworICAgIGlmICgoaW5wdXQtPmNsZWFudXApICYmIChpbnB1dC0+Y2xlYW51cC0+cnVuKSkKKyAgICAgICAgKCppbnB1dC0+Y2xlYW51cC0+cnVuKSggaW5wdXQsIGlucHV0LT5sYXN0X3J1biApOworCisgICAgcmV0dXJuIGlucHV0LT5sYXN0X3J1bi0+cmVzdWx0OworfQorCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1JPV19DUkVBVEUKKy8qKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIHJvdyBjcmVhdGUgc3RhdGUgbWFjaGluZSBzdGVwcworICoKKyAqLwordHlwZWRlZiBzdHJ1Y3Qgcm93Y3JlYXRlX3N0YXRlX3MgeworCisgICAgbmV0c25tcF9zZXNzaW9uICAgICAgICAqc2Vzc2lvbjsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgICp2YXJzOworICAgIGludCAgICAgICAgICAgICAgICAgICAgIHJvd19zdGF0dXNfaW5kZXg7Cit9IHJvd2NyZWF0ZV9zdGF0ZTsKKworc3RhdGljIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqCitfZ2V0X3ZiX251bShuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnZhcnMsIGludCBpbmRleCkKK3sKKyAgICBmb3IgKDsgdmFycyAmJiBpbmRleCA+IDA7IC0taW5kZXgpCisgICAgICAgIHZhcnMgPSB2YXJzLT5uZXh0X3ZhcmlhYmxlOworCisgICAgaWYgKCF2YXJzIHx8IGluZGV4ID4gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgcmV0dXJuIHZhcnM7Cit9CisKKworLyoKKyAqIGNsZWFudXAKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX2NsZWFudXAobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQsIFNOTVBFUlJfQUJPUlQgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9BQk9SVCApOworCisgICAgREVCVUdNU0dUKCgicm93X2NyZWF0ZTpjYWxsZWQiLCAiX3Jvd19zdGF0dXNfc3RhdGVfY2xlYW51cCwgbGFzdCBydW4gc3RlcCB3YXMgJXMgcmMgJWRcbiIsCisgICAgICAgICAgICAgICBzdGVwLT5uYW1lLCBzdGVwLT5yZXN1bHQpKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKyAgICBpZiAoY3R4ICYmIGN0eC0+dmFycykKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQoIGN0eC0+dmFycyApOworCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworLyoKKyAqIHNlbmQgYSByZXF1ZXN0IHRvIGFjdGl2YXRlIHRoZSByb3cKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX2FjdGl2YXRlKG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCAqc3RlcCkKK3sKKyAgICByb3djcmVhdGVfc3RhdGUgICAgICAgKmN0eDsKKyAgICBuZXRzbm1wX3ZhcmlhYmxlX2xpc3QgKnJzX3ZhciwgKnZhciA9IE5VTEw7CisgICAgaW50MzJfdCAgICAgICAgICAgICAgICByYywgdmFsID0gUlNfQUNUSVZFOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+aW5wdXRfY29udGV4dCwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgImNhbGxlZCAlc1xuIiwgc3RlcC0+bmFtZSkpOworCisgICAgLyoKKyAgICAgKiBqdXN0IHNlbmQgdGhlIHJvd3N0YXR1cyB2YXJiaW5kCisgICAgICovCisgICAgcnNfdmFyID0gX2dldF92Yl9udW0oY3R4LT52YXJzLCBjdHgtPnJvd19zdGF0dXNfaW5kZXgpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHJzX3ZhciwgU05NUEVSUl9HRU5FUlIpOworCisgICAgdmFyID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyLCByc192YXItPm5hbWUsIHJzX3Zhci0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc192YXItPnR5cGUsICZ2YWwsIHNpemVvZih2YWwpKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggdmFyLCBTTk1QRVJSX0dFTkVSUiApOworCisgICAgLyoKKyAgICAgKiBzZW5kIHNldAorICAgICAqLworICAgIHJjID0gbmV0c25tcF9xdWVyeV9zZXQoIHZhciwgY3R4LT5zZXNzaW9uICk7CisgICAgaWYgKC0yID09IHJjKQorICAgICAgICByYyA9IFNOTVBFUlJfQUJPUlQ7CisKKyAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXIpOworCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogc2VuZCBlYWNoIG5vbi1yb3cgc3RhdHVzIGNvbHVtbiwgb25lIGF0IGEgdGltZQorICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfc2luZ2xlX3ZhbHVlX2NvbHMobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyLCAqdG1wX25leHQsICpyb3dfc3RhdHVzOworICAgIGludCAgICAgICAgICAgICAgICAgICAgcmMgPSBTTk1QRVJSX0dFTkVSUjsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPmlucHV0X2NvbnRleHQsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJjYWxsZWQgJXNcbiIsIHN0ZXAtPm5hbWUpKTsKKworICAgIHJvd19zdGF0dXMgPSBfZ2V0X3ZiX251bShjdHgtPnZhcnMsIGN0eC0+cm93X3N0YXR1c19pbmRleCk7CisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYocm93X3N0YXR1cywgU05NUEVSUl9HRU5FUlIpOworCisgICAgLyoKKyAgICAgKiB0cnkgb25lIHZhcmJpbmQgYXQgYSB0aW1lCisgICAgICovCisgICAgZm9yICh2YXIgPSBjdHgtPnZhcnM7IHZhcjsgdmFyID0gdmFyLT5uZXh0X3ZhcmlhYmxlKSB7CisgICAgICAgIGlmICh2YXIgPT0gcm93X3N0YXR1cykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRtcF9uZXh0ID0gdmFyLT5uZXh0X3ZhcmlhYmxlOworICAgICAgICB2YXItPm5leHRfdmFyaWFibGUgPSBOVUxMOworCisgICAgICAgIC8qCisgICAgICAgICAqIHNlbmQgc2V0CisgICAgICAgICAqLworICAgICAgICByYyA9IG5ldHNubXBfcXVlcnlfc2V0KCB2YXIsIGN0eC0+c2Vzc2lvbiApOworICAgICAgICB2YXItPm5leHRfdmFyaWFibGUgPSB0bXBfbmV4dDsKKyAgICAgICAgaWYgKC0yID09IHJjKQorICAgICAgICAgICAgcmMgPSBTTk1QRVJSX0FCT1JUOworICAgICAgICBpZiAocmMgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogc2VuZCBhbGwgdmFsdWVzIGV4Y2VwdCByb3cgc3RhdHVzCisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9tdWx0aXBsZV92YWx1ZXNfY29scyhuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgKnN0ZXApCit7CisgICAgcm93Y3JlYXRlX3N0YXRlICAgICAgICpjdHg7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YXJzLCAqdmFyLCAqbGFzdCwgKnJvd19zdGF0dXM7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICByYzsKKworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggc3RlcCwgU05NUEVSUl9HRU5FUlIgKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggaW5wdXQtPmlucHV0X2NvbnRleHQsIFNOTVBFUlJfR0VORVJSICk7CisKKyAgICBjdHggPSAocm93Y3JlYXRlX3N0YXRlICopaW5wdXQtPmlucHV0X2NvbnRleHQ7CisKKyAgICBERUJVR01TR1QoKCJyb3dfY3JlYXRlOmNhbGxlZCIsICJjYWxsZWQgJXNcbiIsIHN0ZXAtPm5hbWUpKTsKKworICAgIHZhcnMgPSBzbm1wX2Nsb25lX3ZhcmJpbmQoY3R4LT52YXJzKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2YXJzLCBTTk1QRVJSX0dFTkVSUik7CisKKyAgICByb3dfc3RhdHVzID0gX2dldF92Yl9udW0odmFycywgY3R4LT5yb3dfc3RhdHVzX2luZGV4KTsKKyAgICBpZiAoTlVMTCA9PSByb3dfc3RhdHVzKSB7CisgICAgICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyoKKyAgICAgKiByZW1vdmUgcm93IHN0YXR1cyB2YXJiaW5kCisgICAgICovCisgICAgaWYgKHJvd19zdGF0dXMgPT0gdmFycykgeworICAgICAgICB2YXJzID0gcm93X3N0YXR1cy0+bmV4dF92YXJpYWJsZTsKKyAgICAgICAgcm93X3N0YXR1cy0+bmV4dF92YXJpYWJsZSA9IE5VTEw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBmb3IgKGxhc3Q9dmFycywgdmFyPWxhc3QtPm5leHRfdmFyaWFibGU7CisgICAgICAgICAgICAgdmFyOworICAgICAgICAgICAgIGxhc3Q9dmFyLCB2YXIgPSB2YXItPm5leHRfdmFyaWFibGUpIHsKKyAgICAgICAgICAgIGlmICh2YXIgPT0gcm93X3N0YXR1cykgeworICAgICAgICAgICAgICAgIGxhc3QtPm5leHRfdmFyaWFibGUgPSB2YXItPm5leHRfdmFyaWFibGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgc25tcF9mcmVlX3Zhcihyb3dfc3RhdHVzKTsKKworICAgIC8qCisgICAgICogc2VuZCBzZXQKKyAgICAgKi8KKyAgICByYyA9IG5ldHNubXBfcXVlcnlfc2V0KCB2YXJzLCBjdHgtPnNlc3Npb24gKTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gU05NUEVSUl9BQk9SVDsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworCisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogc2VuZCBhIGNyZWF0ZUFuZFdhaXQgcmVxdWVzdCB3aXRoIG5vIG90aGVyIHZhbHVlcworICovCitzdGF0aWMgaW50IAorX3Jvd19zdGF0dXNfc3RhdGVfc2luZ2xlX3ZhbHVlX2NyZWF0ZUFuZFdhaXQobmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0ICppbnB1dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFyID0gTlVMTCwgKnJzX3ZhcjsKKyAgICBpbnQzMl90ICAgICAgICAgICAgICAgIHJjLCB2YWwgPSBSU19DUkVBVEVBTkRXQUlUOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+aW5wdXRfY29udGV4dCwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgImNhbGxlZCAlc1xuIiwgc3RlcC0+bmFtZSkpOworCisgICAgcnNfdmFyID0gX2dldF92Yl9udW0oY3R4LT52YXJzLCBjdHgtPnJvd19zdGF0dXNfaW5kZXgpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHJzX3ZhciwgU05NUEVSUl9HRU5FUlIpOworCisgICAgdmFyID0gc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZSgmdmFyLCByc192YXItPm5hbWUsIHJzX3Zhci0+bmFtZV9sZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByc192YXItPnR5cGUsICZ2YWwsIHNpemVvZih2YWwpKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSVih2YXIsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qCisgICAgICogc2VuZCBzZXQKKyAgICAgKi8KKyAgICByYyA9IG5ldHNubXBfcXVlcnlfc2V0KCB2YXIsIGN0eC0+c2Vzc2lvbiApOworICAgIGlmICgtMiA9PSByYykKKyAgICAgICAgcmMgPSBTTk1QRVJSX0FCT1JUOworCisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFyKTsKKworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIHNlbmQgYSBjcmVhdEFuZFdhaXQgcmVxdWVzdCB3aXRoIGFsbCB2YWx1ZXMKKyAqLworc3RhdGljIGludCAKK19yb3dfc3RhdHVzX3N0YXRlX2FsbF92YWx1ZXNfY3JlYXRlQW5kV2FpdChuZXRzbm1wX3N0YXRlX21hY2hpbmVfaW5wdXQgKmlucHV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnJzX3ZhcjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+aW5wdXRfY29udGV4dCwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgImNhbGxlZCAlc1xuIiwgc3RlcC0+bmFtZSkpOworCisgICAgdmFycyA9IHNubXBfY2xvbmVfdmFyYmluZChjdHgtPnZhcnMpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHZhcnMsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qCisgICAgICogbWFrZSBzdXJlIHJvdyBzdGF0cyBpcyBjcmVhdGVBbmRXYWl0CisgICAgICovCisgICAgcnNfdmFyID0gX2dldF92Yl9udW0odmFycywgY3R4LT5yb3dfc3RhdHVzX2luZGV4KTsKKyAgICBpZiAoTlVMTCA9PSByc192YXIpIHsKKyAgICAgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBpZiAoKnJzX3Zhci0+dmFsLmludGVnZXIgIT0gUlNfQ1JFQVRFQU5EV0FJVCkKKyAgICAgICAgKnJzX3Zhci0+dmFsLmludGVnZXIgPSBSU19DUkVBVEVBTkRXQUlUOworCisgICAgLyoKKyAgICAgKiBzZW5kIHNldAorICAgICAqLworICAgIHJjID0gbmV0c25tcF9xdWVyeV9zZXQoIHZhcnMsIGN0eC0+c2Vzc2lvbiApOworICAgIGlmICgtMiA9PSByYykKKyAgICAgICAgcmMgPSBTTk1QRVJSX0FCT1JUOworCisgICAgc25tcF9mcmVlX3ZhcmJpbmQodmFycyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoqCisgKiBzZW5kIGNyZWF0ZUFuZEdvIHJlcXVlc3Qgd2l0aCBhbGwgdmFsdWVzCisgKi8KK3N0YXRpYyBpbnQgCitfcm93X3N0YXR1c19zdGF0ZV9hbGxfdmFsdWVzX2NyZWF0ZUFuZEdvKG5ldHNubXBfc3RhdGVfbWFjaGluZV9pbnB1dCAqaW5wdXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwICpzdGVwKQoreworICAgIHJvd2NyZWF0ZV9zdGF0ZSAgICAgICAqY3R4OworICAgIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywgKnJzX3ZhcjsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIHJjOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIGlucHV0LCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBzdGVwLCBTTk1QRVJSX0dFTkVSUiApOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKCBpbnB1dC0+aW5wdXRfY29udGV4dCwgU05NUEVSUl9HRU5FUlIgKTsKKworICAgIGN0eCA9IChyb3djcmVhdGVfc3RhdGUgKilpbnB1dC0+aW5wdXRfY29udGV4dDsKKworICAgIERFQlVHTVNHVCgoInJvd19jcmVhdGU6Y2FsbGVkIiwgImNhbGxlZCAlc1xuIiwgc3RlcC0+bmFtZSkpOworCisgICAgdmFycyA9IHNubXBfY2xvbmVfdmFyYmluZChjdHgtPnZhcnMpOworICAgIG5ldHNubXBfcmVxdWlyZV9wdHJfTFJWKHZhcnMsIFNOTVBFUlJfR0VORVJSKTsKKworICAgIC8qCisgICAgICogbWFrZSBzdXJlIHJvdyBzdGF0cyBpcyBjcmVhdGVBbmRHbworICAgICAqLworICAgIHJzX3ZhciA9IF9nZXRfdmJfbnVtKHZhcnMsIGN0eC0+cm93X3N0YXR1c19pbmRleCArIDEpOworICAgIGlmIChOVUxMID09IHJzX3ZhcikgeworICAgICAgICBzbm1wX2ZyZWVfdmFyYmluZCh2YXJzKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIGlmICgqcnNfdmFyLT52YWwuaW50ZWdlciAhPSBSU19DUkVBVEVBTkRHTykKKyAgICAgICAgKnJzX3Zhci0+dmFsLmludGVnZXIgPSBSU19DUkVBVEVBTkRHTzsKKworICAgIC8qCisgICAgICogc2VuZCBzZXQKKyAgICAgKi8KKyAgICByYyA9IG5ldHNubXBfcXVlcnlfc2V0KCB2YXJzLCBjdHgtPnNlc3Npb24gKTsKKyAgICBpZiAoLTIgPT0gcmMpCisgICAgICAgIHJjID0gU05NUEVSUl9BQk9SVDsKKworICAgIHNubXBfZnJlZV92YXJiaW5kKHZhcnMpOworCisgICAgcmV0dXJuIHJjOworfQorCisvKiogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqCisgKiByb3cgYXBpCisgKgorICovCitpbnQKK25ldHNubXBfcm93X2NyZWF0ZShuZXRzbm1wX3Nlc3Npb24gKnNlc3MsIG5ldHNubXBfdmFyaWFibGVfbGlzdCAqdmFycywKKyAgICAgICAgICAgICAgICAgICBpbnQgcm93X3N0YXR1c19pbmRleCkKK3sKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19jbGVhbnVwID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9jbGVhbnVwIiwgMCwgX3Jvd19zdGF0dXNfc3RhdGVfY2xlYW51cCwKKyAgICAgICAgICAwLCBOVUxMLCBOVUxMLCAwLCBOVUxMIH07CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfYWN0aXZhdGUgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX2FjdGl2YXRlIiwgMCwgX3Jvd19zdGF0dXNfc3RhdGVfYWN0aXZhdGUsCisgICAgICAgICAgMCwgTlVMTCwgTlVMTCwgMCwgTlVMTCB9OworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX3N2X2NvbHMgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX3NpbmdsZV92YWx1ZV9jb2xzIiwgMCwKKyAgICAgICAgICBfcm93X3N0YXR1c19zdGF0ZV9zaW5nbGVfdmFsdWVfY29scywgMCwgJnJjX2FjdGl2YXRlLE5VTEwsIDAsIE5VTEwgfTsKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19tdl9jb2xzID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9tdWx0aXBsZV92YWx1ZXNfY29scyIsIDAsCisgICAgICAgICAgX3Jvd19zdGF0dXNfc3RhdGVfbXVsdGlwbGVfdmFsdWVzX2NvbHMsIDAsICZyY19hY3RpdmF0ZSwgJnJjX3N2X2NvbHMsCisgICAgICAgICAgMCwgTlVMTCB9OworICAgIG5ldHNubXBfc3RhdGVfbWFjaGluZV9zdGVwIHJjX3N2X2NhdyA9CisgICAgICAgIHsgInJvd19jcmVhdGVfc2luZ2xlX3ZhbHVlX2NyZWF0ZUFuZFdhaXQiLCAwLAorICAgICAgICAgIF9yb3dfc3RhdHVzX3N0YXRlX3NpbmdsZV92YWx1ZV9jcmVhdGVBbmRXYWl0LCAwLCAmcmNfbXZfY29scywgTlVMTCwKKyAgICAgICAgICAwLCBOVUxMIH07CisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3N0ZXAgcmNfYXZfY2F3ID0KKyAgICAgICAgeyAicm93X2NyZWF0ZV9hbGxfdmFsdWVzX2NyZWF0ZUFuZFdhaXQiLCAwLAorICAgICAgICAgIF9yb3dfc3RhdHVzX3N0YXRlX2FsbF92YWx1ZXNfY3JlYXRlQW5kV2FpdCwgMCwgJnJjX2FjdGl2YXRlLAorICAgICAgICAgICZyY19zdl9jYXcsIDAsIE5VTEwgfTsKKyAgICBuZXRzbm1wX3N0YXRlX21hY2hpbmVfc3RlcCByY19hdl9jYWcgPQorICAgICAgICB7ICJyb3dfY3JlYXRlX2FsbF92YWx1ZXNfY3JlYXRlQW5kR28iLCAwLAorICAgICAgICAgIF9yb3dfc3RhdHVzX3N0YXRlX2FsbF92YWx1ZXNfY3JlYXRlQW5kR28sIDAsIE5VTEwsICZyY19hdl9jYXcsIDAsCisgICAgICAgICAgTlVMTCB9OworCisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX2lucHV0IHNtX2lucHV0ID0geyAicm93X2NyZWF0ZV9tYWNoaW5lIiwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZyY19hdl9jYWcsICZyY19jbGVhbnVwIH07CisgICAgcm93Y3JlYXRlX3N0YXRlIHN0YXRlOworCisgICAgbmV0c25tcF9yZXF1aXJlX3B0cl9MUlYoIHNlc3MsIFNOTVBFUlJfR0VORVJSKTsKKyAgICBuZXRzbm1wX3JlcXVpcmVfcHRyX0xSViggdmFycywgU05NUEVSUl9HRU5FUlIpOworCisgICAgc3RhdGUuc2Vzc2lvbiA9IHNlc3M7CisgICAgc3RhdGUudmFycyA9IHZhcnM7CisKKyAgICBzdGF0ZS5yb3dfc3RhdHVzX2luZGV4ID0gcm93X3N0YXR1c19pbmRleDsKKyAgICBzbV9pbnB1dC5pbnB1dF9jb250ZXh0ID0gJnN0YXRlOworCisgICAgbmV0c25tcF9zdGF0ZV9tYWNoaW5lX3J1biggJnNtX2lucHV0KTsKKworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ST1dfQ1JFQVRFICovCisjZW5kaWYgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCisKKwogLyoqIEB9ICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfZGVidWcuYyBiL3NubXBsaWIvc25tcF9kZWJ1Zy5jCmluZGV4IGQxYjQ1MzguLjI3Y2UyMzMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcF9kZWJ1Zy5jCisrKyBiL3NubXBsaWIvc25tcF9kZWJ1Zy5jCkBAIC0xLDUgKzEsNiBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCisjaW5jbHVkZSA8bGltaXRzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0xMywxNCArMTQsNyBAQAogI2lmIEhBVkVfTkVUSU5FVF9JTl9ICiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCi0jaWYgSEFWRV9TVERBUkdfSAogI2luY2x1ZGUgPHN0ZGFyZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDx2YXJhcmdzLmg+Ci0jZW5kaWYKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogCiAjaWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNDIsNTEgKzM2LDU4IEBACiAjZGVmaW5lIFNOTVBfREVCVUdfQUNUSVZFICAgICAgICAgICAgIDEKICNkZWZpbmUgU05NUF9ERUJVR19FWENMVURFRCAgICAgICAgICAgMgogCisjaWZuZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCisKIHN0YXRpYyBpbnQgICAgICBkb2RlYnVnID0gTkVUU05NUF9BTFdBWVNfREVCVUc7CiBpbnQgICAgICAgICAgICAgZGVidWdfbnVtX3Rva2VucyA9IDA7Ci1pbnQgICAgICAgICAgICAgZGVidWdfbnVtX2V4Y2x1ZGVkID0gMDsKIHN0YXRpYyBpbnQgICAgICBkZWJ1Z19wcmludF9ldmVyeXRoaW5nID0gMDsKIAogbmV0c25tcF90b2tlbl9kZXNjciBkYmdfdG9rZW5zW01BWF9ERUJVR19UT0tFTlNdOwogCi0jaWZkZWYgTkVUU05NUF9ERUJVR19TVEFUUwotbmV0c25tcF9jb250YWluZXIgICpkYmdfc3RhdHMgPSBOVUxMOwotIHN0YXRpYyBpbnQgX2RlYnVnX2NtcCggY29uc3Qgdm9pZCAqbGhzLCBjb25zdCB2b2lkICpyaHMgKTsKLSBzdGF0aWMgaW50IF9zYXZlX2RlYnVnX3N0YXQobmV0c25tcF90b2tlbl9kZXNjciAqdGIsIHZvaWQgKnR5cGUpOwotIHN0YXRpYyBpbnQgX2RlYnVnX3N0YXRzX2NhbGxiYWNrKGludCBtYWpvcklELCBpbnQgbWlub3JJRCwKLSAgICAgICAgICAgICAgICAgICB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZyk7Ci0jZW5kaWYKLQogLyoKLSAqIGluZGVudCBkZWJ1Z2dpbmc6ICBwcm92aWRlIGEgc3BhY2UgcGFkZGVkIHNlY3Rpb24gdG8gcmV0dXJuIGFuIGluZGVudCBmb3IgCisgKiBOdW1iZXIgb2Ygc3BhY2VzIHRvIGluZGVudCBkZWJ1ZyBvdXRwdXIuIFZhbGlkIHJhbmdlIGlzIFswLElOVF9NQVhdCiAgKi8KLXN0YXRpYyBpbnQgICAgICBkZWJ1Z2luZGVudCA9IDA7Ci0jZGVmaW5lIElOREVOVE1BWCA4MAotc3RhdGljIGNoYXIgICAgIGRlYnVnaW5kZW50Y2hhcnNbXSA9Ci0gICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKK3N0YXRpYyBpbnQgZGVidWdpbmRlbnQgPSAwOwogCi1jaGFyICAgICAgICAgICAqCitpbnQKK2RlYnVnX2luZGVudF9nZXQodm9pZCkKK3sKKyAgICByZXR1cm4gZGVidWdpbmRlbnQ7Cit9CisKK2NvbnN0IGNoYXIqCiBkZWJ1Z19pbmRlbnQodm9pZCkKIHsKLSAgICByZXR1cm4gZGVidWdpbmRlbnRjaGFyczsKKyNkZWZpbmUgU1BBQ0VTICIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBcCisgICAgICAgICAgICAgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIKKyAgICBpZiAoKHNpemVvZihTUEFDRVMpIC0gMSkgPCAodW5zaWduZWQgaW50KWRlYnVnaW5kZW50KSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUb28gZGVlcCBpbmRlbnRhdGlvbiBmb3IgZGVidWdfaW5kZW50LiAiCisgICAgICAgICAgICAgICAgICJDb25zaWRlciB1c2luZyBcIiUlKnNcIiwgZGVidWdfaW5kZW50X2dldCgpLCBcIlwiIGluc3RlYWQuIik7CisgICAgICAgIHJldHVybiBTUEFDRVM7CisgICAgfQorICAgIHJldHVybiBTUEFDRVMgKyBzaXplb2YoU1BBQ0VTKSAtIDEgLSBkZWJ1Z2luZGVudDsKKyN1bmRlZiBTUEFDRVMKIH0KIAogdm9pZAogZGVidWdfaW5kZW50X2FkZChpbnQgYW1vdW50KQogewotICAgIGlmIChkZWJ1Z2luZGVudCArIGFtb3VudCA+PSAwICYmIGRlYnVnaW5kZW50ICsgYW1vdW50IDwgODApIHsKLSAgICAgICAgZGVidWdpbmRlbnRjaGFyc1tkZWJ1Z2luZGVudF0gPSAnICc7Ci0gICAgICAgIGRlYnVnaW5kZW50ICs9IGFtb3VudDsKLSAgICAgICAgZGVidWdpbmRlbnRjaGFyc1tkZWJ1Z2luZGVudF0gPSAnXDAnOwotICAgIH0KKyAgICBpZiAoLWRlYnVnaW5kZW50IDw9IGFtb3VudCAmJiBhbW91bnQgPD0gSU5UX01BWCAtIGRlYnVnaW5kZW50KQorCWRlYnVnaW5kZW50ICs9IGFtb3VudDsKIH0KIAorTkVUU05NUF9JTVBPUlQgdm9pZAorZGVidWdfY29uZmlnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICpjb25maWd0b2tlbiwgY2hhciAqdG9rZW5zKTsKKwogdm9pZAogZGVidWdfY29uZmlnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICpjb25maWd0b2tlbiwgY2hhciAqdG9rZW5zKQogewogICAgIGRlYnVnX3JlZ2lzdGVyX3Rva2Vucyh0b2tlbnMpOwogfQogCitORVRTTk1QX0lNUE9SVCB2b2lkCitkZWJ1Z19jb25maWdfdHVybl9vbl9kZWJ1Z2dpbmcoY29uc3QgY2hhciAqY29uZmlndG9rZW4sIGNoYXIgKmxpbmUpOworCiB2b2lkCiBkZWJ1Z19jb25maWdfdHVybl9vbl9kZWJ1Z2dpbmcoY29uc3QgY2hhciAqY29uZmlndG9rZW4sIGNoYXIgKmxpbmUpCiB7CkBAIC05NCw0NyArOTUsMTMgQEAKIH0KIAogdm9pZAotc25tcF9kZWJ1Z19pbml0KHZvaWQpCi17Ci0gICAgZGVidWdpbmRlbnRjaGFyc1swXSA9ICdcMCc7IC8qIHplcm8gb3V0IHRoZSBkZWJ1Z2dpbmcgaW5kZW50IGFycmF5LiAqLwotICAgIC8qCi0gICAgICogSG1tbS4uLi4KLSAgICAgKiAgIHRoaXMgImluaXQiIHJvdXRpbmUgc2VlbXMgdG8gYmUgY2FsbGVkICphZnRlciogcHJvY2Vzc2luZwotICAgICAqICAgdGhlIGNvbW1hbmQgbGluZSBvcHRpb25zLiAgIFNvIHdlIGNhbid0IGNsZWFyIHRoZSBkZWJ1ZwotICAgICAqICAgdG9rZW4gYXJyYXkgaGVyZSwgYW5kIHdpbGwganVzdCBoYXZlIHRvIHJlbHkgb24gaXQgYmVpbmcKLSAgICAgKiAgIGluaXRpYWxpc2VkIHRvIDAgYXV0b21hdGljYWxseS4KLSAgICAgKiBTbyBtdWNoIGZvciB0cnlpbmcgdG8gcHJvZ3JhbSByZXNwb25zaWJseSA6LSkKLSAgICAgKi8KLS8qICBtZW1zZXQoZGJnX3Rva2VucywgMCwgTUFYX0RFQlVHX1RPS0VOUypzaXplb2Yoc3RydWN0IHRva2VuX2RzY3IpKTsgICovCi0gICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigic25tcCIsICJkb0RlYnVnZ2luZyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19jb25maWdfdHVybl9vbl9kZWJ1Z2dpbmcsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDF8MCkiKTsKLSAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCJzbm1wIiwgImRlYnVnVG9rZW5zIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2NvbmZpZ19yZWdpc3Rlcl90b2tlbnMsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9rZW5bLHRva2VuLi4uXSIpOwotCi0jaWZkZWYgTkVUU05NUF9ERUJVR19TVEFUUwotICAgIC8qCi0gICAgICogZGVidWcgc3RhdHMKLSAgICAgKi8KLSAgICBkYmdfc3RhdHMgPSBuZXRzbm1wX2NvbnRhaW5lcl9maW5kKCJkZWJ1Z19leGNsdWRlOnRhYmxlX2NvbnRhaW5lciIpOwotICAgIGlmIChOVUxMICE9IGRiZ19zdGF0cykgewotICAgICAgICBkYmdfc3RhdHMtPmNvbXBhcmUgPSBfZGVidWdfY21wOwotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTTk1QX0NBTExCQUNLX1NUT1JFX0RBVEEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2RlYnVnX3N0YXRzX2NhbGxiYWNrLCBkYmdfc3RhdHMsIDEwMjQpOwotICAgIH0KLSNlbmRpZgotfQotCi12b2lkCi1kZWJ1Z19yZWdpc3Rlcl90b2tlbnMoY2hhciAqdG9rZW5zKQorZGVidWdfcmVnaXN0ZXJfdG9rZW5zKGNvbnN0IGNoYXIgKnRva2VucykKIHsKICAgICBjaGFyICAgICAgICAgICAqbmV3cCwgKmNwOwogICAgIGNoYXIgICAgICAgICAgICpzdCA9IE5VTEw7CiAgICAgaW50ICAgICAgICAgICAgIHN0YXR1czsKIAotICAgIGlmICh0b2tlbnMgPT0gMCB8fCAqdG9rZW5zID09IDApCisgICAgaWYgKHRva2VucyA9PSBOVUxMIHx8ICp0b2tlbnMgPT0gMCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgbmV3cCA9IHN0cmR1cCh0b2tlbnMpOyAgICAgIC8qIHN0cnRva19yIG1lc3NlcyBpdCB1cCAqLwpAQCAtMTY0LDE3ICsxMzEsMTYgQEAKICAgICBmcmVlKG5ld3ApOwogfQogCi0KLS8qIAorLyoKICAqIFByaW50IGFsbCByZWdpc3RlcmVkIHRva2VucyBhbG9uZyB3aXRoIHRoZWlyIGN1cnJlbnQgc3RhdHVzCiAgKi8KLXZvaWQgCit2b2lkCiBkZWJ1Z19wcmludF9yZWdpc3RlcmVkX3Rva2Vucyh2b2lkKSB7CiAgICAgaW50IGk7CiAKICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIiVkIHRva2VucyByZWdpc3RlcmVkIDpcbiIsIGRlYnVnX251bV90b2tlbnMpOwogICAgIGZvciAoaT0wOyBpPGRlYnVnX251bV90b2tlbnM7IGkrKykgewotICAgICAgICBzbm1wX2xvZyggTE9HX0lORk8sICIlZCkgJXMgOiAlZFxuIiwgCisgICAgICAgIHNubXBfbG9nKCBMT0dfSU5GTywgIiVkKSAlcyA6ICVkXG4iLAogICAgICAgICAgICAgICAgICBpLCBkYmdfdG9rZW5zIFtpXS50b2tlbl9uYW1lLCBkYmdfdG9rZW5zIFtpXS5lbmFibGVkKTsKICAgICB9CiB9CkBAIC0xOTcsNyArMTYzLDcgQEAKICAgICB9IGVsc2UgewogICAgICAgICBmb3IoaT0wOyBpIDwgZGVidWdfbnVtX3Rva2VuczsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoZGJnX3Rva2Vuc1tpXS50b2tlbl9uYW1lICYmCi0gICAgICAgICAgICAgICAgc3RybmNtcChkYmdfdG9rZW5zW2ldLnRva2VuX25hbWUsIHRva2VuLCAKKyAgICAgICAgICAgICAgICBzdHJuY21wKGRiZ190b2tlbnNbaV0udG9rZW5fbmFtZSwgdG9rZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4oZGJnX3Rva2Vuc1tpXS50b2tlbl9uYW1lKSkgPT0gMCkgewogICAgICAgICAgICAgICAgIGRiZ190b2tlbnNbaV0uZW5hYmxlZCA9IFNOTVBfREVCVUdfQUNUSVZFOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CkBAIC0yMzMsMTMgKzE5OSwxMiBAQAogICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKIH0KIAotCiAvKgogICogZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZChjaGFyICpUT0tFTik6Ci0gKiAKKyAqCiAgKiByZXR1cm5zIFNOTVBFUlJfU1VDQ0VTUwogICogb3IgU05NUEVSUl9HRU5FUlIKLSAqIAorICoKICAqIGlmIFRPS0VOIGhhcyBiZWVuIHJlZ2lzdGVyZWQgYW5kIGRlYnVnZ2luZyBzdXBwb3J0IGlzIHR1cm5lZCBvbi4KICAqLwogaW50CkBAIC0yNDgsMjEgKzIxMywxNiBAQAogICAgIGludCAgICAgICAgICAgICBpLCByYzsKIAogICAgIC8qCi0gICAgICogZGVidWdnaW5nIGZsYWcgaXMgb24gb3Igb2ZmIAorICAgICAqIGRlYnVnZ2luZyBmbGFnIGlzIG9uIG9yIG9mZgogICAgICAqLwogICAgIGlmICghZG9kZWJ1ZykKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOwogCiAgICAgaWYgKGRlYnVnX251bV90b2tlbnMgPT0gMCB8fCBkZWJ1Z19wcmludF9ldmVyeXRoaW5nKSB7CiAgICAgICAgIC8qCi0gICAgICAgICAqIG5vIHRva2VucyBzcGVjaWZpZWQsIHByaW50IGV2ZXJ5dGhpbmcgCi0gICAgICAgICAqICh1bmxlc3Mgc29tZXRoaW5nIG1pZ2h0IGJlIGV4Y2x1ZGVkKQorICAgICAgICAgKiBubyB0b2tlbnMgc3BlY2lmaWVkLCBwcmludCBldmVyeXRoaW5nCiAgICAgICAgICAqLwotICAgICAgICBpZiAoZGVidWdfbnVtX2V4Y2x1ZGVkKSB7Ci0gICAgICAgICAgICByYyA9IFNOTVBFUlJfU1VDQ0VTUzsgLyogISBmb3VuZCA9IHN1Y2Nlc3MgKi8KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Ci0gICAgICAgIH0KKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKICAgICB9CiAgICAgZWxzZQogICAgICAgICByYyA9IFNOTVBFUlJfR0VORVJSOyAvKiAhIGZvdW5kID0gZXJyICovCkBAIC0yNzksNTMgKzIzOSwxOSBAQAogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsgLyogZXhjbHVkZWQgKi8KICAgICAgICAgfQogICAgIH0KLQotI2lmZGVmIE5FVFNOTVBfREVCVUdfU1RBVFMKLSAgICBpZiAoKFNOTVBFUlJfU1VDQ0VTUyA9PSByYykgJiYgKE5VTEwgIT0gZGJnX3N0YXRzKSkgewotICAgICAgICBuZXRzbm1wX3Rva2VuX2Rlc2NyIHRkLCAqZm91bmQ7Ci0KLSAgICAgICAgdGQudG9rZW5fbmFtZSA9IHRva2VuOwotICAgICAgICBmb3VuZCA9IENPTlRBSU5FUl9GSU5EKGRiZ19zdGF0cywgJnRkKTsKLSAgICAgICAgaWYgKE5VTEwgPT0gZm91bmQpIHsKLSAgICAgICAgICAgIGZvdW5kID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3Rva2VuX2Rlc2NyKTsKLSAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gZm91bmQpOwotICAgICAgICAgICAgZm91bmQtPnRva2VuX25hbWUgPSBzdHJkdXAodG9rZW4pOwotICAgICAgICAgICAgbmV0c25tcF9hc3NlcnQoMCA9PSBmb3VuZC0+ZW5hYmxlZCk7Ci0gICAgICAgICAgICBDT05UQUlORVJfSU5TRVJUKGRiZ19zdGF0cywgZm91bmQpOwotICAgICAgICB9Ci0gICAgICAgICsrZm91bmQtPmVuYWJsZWQ7Ci0gICAgLyogIHNubXBfbG9nKExPR19FUlIsInRvayAlcywgJWQgaGl0c1xuIiwgdG9rZW4sIGZvdW5kLT5lbmFibGVkKTsgICovCi0gICAgfQotI2VuZGlmCi0KICAgICByZXR1cm4gcmM7CiB9CiAKIHZvaWQKLSNpZiBIQVZFX1NUREFSR19ICiBkZWJ1Z21zZyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pCi0jZWxzZQotZGVidWdtc2codmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7Ci0gICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKLQotI2lmIEhBVkVfU1REQVJHX0gKLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIGZvcm1hdCk7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIgICAgICpmb3JtYXQ7Ci0gICAgY29uc3QgY2hhciAgICAgKnRva2VuOwotCi0gICAgdmFfc3RhcnQoZGVidWdhcmdzKTsKLSAgICB0b2tlbiA9IHZhX2FyZyhkZWJ1Z2FyZ3MsIGNvbnN0IGNoYXIgKik7Ci0gICAgZm9ybWF0ID0gdmFfYXJnKGRlYnVnYXJncywgY29uc3QgY2hhciAqKTsgICAvKiA/Pz8gKi8KLSNlbmRpZgotCiAgICAgaWYgKGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQodG9rZW4pID09IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICBzbm1wX3Zsb2coTE9HX0RFQlVHLCBmb3JtYXQsIGRlYnVnYXJncyk7CisJdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKKworCXZhX3N0YXJ0KGRlYnVnYXJncywgZm9ybWF0KTsKKwlzbm1wX3Zsb2coTE9HX0RFQlVHLCBmb3JtYXQsIGRlYnVnYXJncyk7CisJdmFfZW5kKGRlYnVnYXJncyk7CiAgICAgfQotICAgIHZhX2VuZChkZWJ1Z2FyZ3MpOwogfQogCiB2b2lkCkBAIC00MTYsMTIgKzM0MiwxMiBAQAogICAgICAgICByYyA9IHNwcmludF9yZWFsbG9jX29iamlkKCZidWYsICZidWZfbGVuLCAmb3V0X2xlbiwgMSwgdGhlb2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcl9zdWJpZC0xKTsgIC8qIEFkanVzdCBmb3IgQydzIDAtYmFzZWQgYXJyYXkgaW5kZXhpbmcgKi8KICAgICAgICAgaWYgKHJjKSB7Ci0gICAgICAgICAgICBzcHJpbnRmKHRtcGJ1ZiwgIi4lbHUtLSVsdSIsIHRoZW9pZFt2YXJfc3ViaWQgLSAxXSwKLSAgICAgICAgICAgICAgICAgICAgcmFuZ2VfdWJvdW5kKTsKKyAgICAgICAgICAgIHNwcmludGYodG1wYnVmLCAiLiUiIE5FVFNOTVBfUFJJbyAidS0tJSIgTkVUU05NUF9QUklvICJ1IiwKKyAgICAgICAgICAgICAgICAgICAgdGhlb2lkW3Zhcl9zdWJpZCAtIDFdLCByYW5nZV91Ym91bmQpOwogICAgICAgICAgICAgcmMgPSBzbm1wX2NzdHJjYXQoJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLCAxLCB0bXBidWYpOwogICAgICAgICAgICAgaWYgKHJjKSB7CiAgICAgICAgICAgICAgICAgZm9yIChpID0gdmFyX3N1YmlkOyBpIDwgbGVuOyBpKyspIHsKLSAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsICIuJWx1IiwgdGhlb2lkW2ldKTsKKyAgICAgICAgICAgICAgICAgICAgc3ByaW50Zih0bXBidWYsICIuJSIgTkVUU05NUF9QUklvICJ1IiwgdGhlb2lkW2ldKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFzbm1wX2NzdHJjYXQoJmJ1ZiwgJmJ1Zl9sZW4sICZvdXRfbGVuLCAxLCB0bXBidWYpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAgfQpAQCAtNDM4LDcgKzM2NCw3IEBACiB9CiAKIHZvaWQKLWRlYnVnbXNnX2hleChjb25zdCBjaGFyICp0b2tlbiwgdV9jaGFyICogdGhlZGF0YSwgc2l6ZV90IGxlbikKK2RlYnVnbXNnX2hleChjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgdV9jaGFyICogdGhlZGF0YSwgc2l6ZV90IGxlbikKIHsKICAgICB1X2NoYXIgICAgICAgICAqYnVmID0gTlVMTDsKICAgICBzaXplX3QgICAgICAgICAgYnVmX2xlbiA9IDAsIG91dF9sZW4gPSAwOwpAQCAtNDYwLDcgKzM4Niw3IEBACiB9CiAKIHZvaWQKLWRlYnVnbXNnX2hleHRsaShjb25zdCBjaGFyICp0b2tlbiwgdV9jaGFyICogdGhlZGF0YSwgc2l6ZV90IGxlbikKK2RlYnVnbXNnX2hleHRsaShjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgdV9jaGFyICogdGhlZGF0YSwgc2l6ZV90IGxlbikKIHsKICAgICBjaGFyICAgICAgICAgICAgYnVmW1NQUklOVF9NQVhfTEVOXSwgdG9rZW4yW1NQUklOVF9NQVhfTEVOXTsKICAgICB1X2NoYXIgICAgICAgICAqYjMgPSBOVUxMOwpAQCAtNDgwLDcgKzQwNiw3IEBACiAgICAgICAgICAgICAgKiBYWG5leHQgdHdvIGxpbmVzIHdlcmUgREVCVUdQUklOVElOREVOVCh0b2tlbik7CiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHNwcmludGYoYnVmLCAiZHVtcHglcyIsIHRva2VuKTsKLSAgICAgICAgICAgIGRlYnVnbXNnKGJ1ZiwgIiVzOiAlcyIsIHRva2VuMiwgZGVidWdfaW5kZW50KCkpOworICAgICAgICAgICAgZGVidWdtc2coYnVmLCAiJXM6ICUqcyIsIHRva2VuMiwgZGVidWdfaW5kZW50X2dldCgpLCAiIik7CiAgICAgICAgICAgICBpZiAoc3ByaW50X3JlYWxsb2NfaGV4c3RyaW5nCiAgICAgICAgICAgICAgICAgKCZiMywgJmIzX2xlbiwgJm8zX2xlbiwgMSwgdGhlZGF0YSwgaW5jcikpIHsKICAgICAgICAgICAgICAgICBpZiAoYjMgIT0gTlVMTCkgewpAQCAtNTAwLDUzICs0MjYsMjMgQEAKIH0KIAogdm9pZAotI2lmIEhBVkVfU1REQVJHX0gKIGRlYnVnbXNndG9rZW4oY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQotI2Vsc2UKLWRlYnVnbXNndG9rZW4odmFfYWxpc3QpCi0gICAgIHZhX2RjbAotI2VuZGlmCiB7CiAgICAgdmFfbGlzdCAgICAgICAgIGRlYnVnYXJnczsKIAotI2lmIEhBVkVfU1REQVJHX0gKICAgICB2YV9zdGFydChkZWJ1Z2FyZ3MsIGZvcm1hdCk7Ci0jZWxzZQotICAgIGNvbnN0IGNoYXIgICAgICp0b2tlbjsKLQotICAgIHZhX3N0YXJ0KGRlYnVnYXJncyk7Ci0gICAgdG9rZW4gPSB2YV9hcmcoZGVidWdhcmdzLCBjb25zdCBjaGFyICopOwotI2VuZGlmCi0KICAgICBkZWJ1Z21zZyh0b2tlbiwgIiVzOiAiLCB0b2tlbik7Ci0KICAgICB2YV9lbmQoZGVidWdhcmdzKTsKIH0KIAogdm9pZAotI2lmIEhBVkVfU1REQVJHX0gKIGRlYnVnX2NvbWJvX25jKGNvbnN0IGNoYXIgKnRva2VuLCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSNlbHNlCi1kZWJ1Z19jb21ib19uYyh2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKICAgICB2YV9saXN0ICAgICAgICAgZGVidWdhcmdzOwogCi0jaWYgSEFWRV9TVERBUkdfSAogICAgIHZhX3N0YXJ0KGRlYnVnYXJncywgZm9ybWF0KTsKLSNlbHNlCi0gICAgY29uc3QgY2hhciAgICAgKmZvcm1hdDsKLSAgICBjb25zdCBjaGFyICAgICAqdG9rZW47Ci0KLSAgICB2YV9zdGFydChkZWJ1Z2FyZ3MpOwotICAgIHRva2VuID0gdmFfYXJnKGRlYnVnYXJncywgY29uc3QgY2hhciAqKTsKLSAgICBmb3JtYXQgPSB2YV9hcmcoZGVidWdhcmdzLCBjb25zdCBjaGFyICopOyAgIC8qID8/PyAqLwotI2VuZGlmCi0KICAgICBzbm1wX2xvZyhMT0dfREVCVUcsICIlczogIiwgdG9rZW4pOwogICAgIHNubXBfdmxvZyhMT0dfREVCVUcsIGZvcm1hdCwgZGVidWdhcmdzKTsKLQogICAgIHZhX2VuZChkZWJ1Z2FyZ3MpOwogfQogCkBAIC01NjUsNjIgKzQ2MSwxMTggQEAKICAgICByZXR1cm4gZG9kZWJ1ZzsKIH0KIAotI2lmZGVmIE5FVFNOTVBfREVCVUdfU1RBVFMKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKLSAqIGNvbXBhcmUgdHdvIGNvbnRleHQgcG9pbnRlcnMgaGVyZS4gUmV0dXJuIC0xIGlmIGxocyA8IHJocywKLSAqIDAgaWYgbGhzID09IHJocywgYW5kIDEgaWYgbGhzID4gcmhzLgotICovCi1zdGF0aWMgaW50Ci1fZGVidWdfY21wKCBjb25zdCB2b2lkICpsaHMsIGNvbnN0IHZvaWQgKnJocyApCi17Ci0gICAgbmV0c25tcF90b2tlbl9kZXNjciAqZGJnX2wgPSAobmV0c25tcF90b2tlbl9kZXNjciAqKWxoczsKLSAgICBuZXRzbm1wX3Rva2VuX2Rlc2NyICpkYmdfciA9IChuZXRzbm1wX3Rva2VuX2Rlc2NyICopcmhzOworI2Vsc2UgLyogISBORVRTTk1QX05PX0RFQlVHR0lORyAqLwogCi0gLyogc25tcF9sb2coTE9HX0VSUiwiJXMvJXNcbiIsZGJnX2wtPnRva2VuX25hbWUsIGRiZ19yLT50b2tlbl9uYW1lKTsgKi8KLSAgICByZXR1cm4gc3RyY21wKGRiZ19sLT50b2tlbl9uYW1lLCBkYmdfci0+dG9rZW5fbmFtZSk7Ci19Ci0KLQotc3RhdGljIGludAotX3NhdmVfZGVidWdfc3RhdChuZXRzbm1wX3Rva2VuX2Rlc2NyICp0Yiwgdm9pZCAqdHlwZSkKLXsKLSAgICBjaGFyIGJ1ZlsyNTZdOwotCi0gICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImRlYnVnX2hpdHMgJXMgJWQiLAotICAgICAgICAgICAgIHRiLT50b2tlbl9uYW1lLCB0Yi0+ZW5hYmxlZCk7Ci0gICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgYnVmKTsKLQotICAgIHJldHVybiBTTk1QX0VSUl9OT0VSUk9SOwotfQotCi1zdGF0aWMgaW50Ci1fZGVidWdfc3RhdHNfY2FsbGJhY2soaW50IG1ham9ySUQsIGludCBtaW5vcklELAotICAgICAgICAgICAgICAgICAgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpCi17Ci0gICAgY2hhciAgICAgICAgICAgIHNlcFtdID0KLSAgICAgICAgIiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIjsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW10gPQotICAgICAgICAiI1xuIiAiIyBkZWJ1ZyBzdGF0c1xuIiAiIyI7Ci0gICAgY2hhciAgICAgICAgICAgKnR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOwotCi0gICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgc2VwKTsKLSAgICByZWFkX2NvbmZpZ19zdG9yZSgoY2hhciAqKSB0eXBlLCBidWYpOwotCi0gICAgLyoKLSAgICAgKiBzYXZlIGFsbCByb3dzCi0gICAgICovCi0gICAgQ09OVEFJTkVSX0ZPUl9FQUNIKChuZXRzbm1wX2NvbnRhaW5lciAqKSBjbGllbnRhcmcsCi0gICAgICAgICAgICAgICAgICAgICAgIChuZXRzbm1wX2NvbnRhaW5lcl9vYmpfZnVuYyAqKQotICAgICAgICAgICAgICAgICAgICAgICBfc2F2ZV9kZWJ1Z19zdGF0LCB0eXBlKTsKLQotICAgIHJlYWRfY29uZmlnX3N0b3JlKChjaGFyICopIHR5cGUsIHNlcCk7Ci0gICAgcmVhZF9jb25maWdfc3RvcmUoKGNoYXIgKikgdHlwZSwgIlxuIik7Ci0KLSAgICAvKgotICAgICAqIG5ldmVyIGZhaWxzIAotICAgICAqLwotICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Ci19CisjaWYgX19HTlVDX18gPiAyCisjZGVmaW5lIFVOVVNFRCBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQorI2Vsc2UKKyNkZWZpbmUgVU5VU0VECiAjZW5kaWYKIAoraW50IGRlYnVnX2luZGVudF9nZXQodm9pZCkgeyByZXR1cm4gMDsgfQorCitjb25zdCBjaGFyKiBkZWJ1Z19pbmRlbnQodm9pZCkgeyByZXR1cm4gIiI7IH0KKwordm9pZCBkZWJ1Z19pbmRlbnRfYWRkKGludCBhbW91bnQgVU5VU0VEKSB7IH0KKworTkVUU05NUF9JTVBPUlQgdm9pZAorZGVidWdfY29uZmlnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICpjb25maWd0b2tlbiwgY2hhciAqdG9rZW5zKTsKKwordm9pZAorZGVidWdfY29uZmlnX3JlZ2lzdGVyX3Rva2Vucyhjb25zdCBjaGFyICpjb25maWd0b2tlbiBVTlVTRUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKnRva2VucyBVTlVTRUQpCit7IH0KKworTkVUU05NUF9JTVBPUlQgdm9pZAorZGVidWdfY29uZmlnX3R1cm5fb25fZGVidWdnaW5nKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuLCBjaGFyICpsaW5lKTsKKwordm9pZAorZGVidWdfY29uZmlnX3R1cm5fb25fZGVidWdnaW5nKGNvbnN0IGNoYXIgKmNvbmZpZ3Rva2VuIFVOVVNFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpsaW5lIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z19yZWdpc3Rlcl90b2tlbnMoY29uc3QgY2hhciAqdG9rZW5zIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z19wcmludF9yZWdpc3RlcmVkX3Rva2Vucyh2b2lkKQoreyB9CisKKworaW50CitkZWJ1Z19lbmFibGVfdG9rZW5fbG9ncyAoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VEKQoreyByZXR1cm4gU05NUEVSUl9HRU5FUlI7IH0KKworaW50CitkZWJ1Z19kaXNhYmxlX3Rva2VuX2xvZ3MgKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCkKK3sgcmV0dXJuIFNOTVBFUlJfR0VORVJSOyB9CisKK2ludAorZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZChjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQpCit7IHJldHVybiBTTk1QRVJSX0dFTkVSUjsgfQorCit2b2lkCitkZWJ1Z21zZyhjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IGNoYXIgKmZvcm1hdCBVTlVTRUQsIC4uLikKK3sgfQorCit2b2lkCitkZWJ1Z21zZ19vaWQoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCBvaWQgKiB0aGVvaWQgVU5VU0VELAorICAgICAgICAgICAgIHNpemVfdCBsZW4gVU5VU0VEKQoreyB9CisKK3ZvaWQKK2RlYnVnbXNnX3N1Ym9pZChjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IG9pZCAqIHRoZW9pZCBVTlVTRUQsCisgICAgICAgICAgICAgICAgc2l6ZV90IGxlbiBVTlVTRUQpCit7IH0KKwordm9pZAorZGVidWdtc2dfdmFyKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgbmV0c25tcF92YXJpYWJsZV9saXN0ICogdmFyIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z21zZ19vaWRyYW5nZShjb25zdCBjaGFyICp0b2tlbiBVTlVTRUQsIGNvbnN0IG9pZCAqIHRoZW9pZCBVTlVTRUQsCisgICAgICAgICAgICAgICAgICBzaXplX3QgbGVuIFVOVVNFRCwgc2l6ZV90IHZhcl9zdWJpZCBVTlVTRUQsCisgICAgICAgICAgICAgICAgICBvaWQgcmFuZ2VfdWJvdW5kIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z21zZ19oZXgoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCB1X2NoYXIgKiB0aGVkYXRhIFVOVVNFRCwKKyAgICAgICAgICAgICBzaXplX3QgbGVuIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z21zZ19oZXh0bGkoY29uc3QgY2hhciAqdG9rZW4gVU5VU0VELCBjb25zdCB1X2NoYXIgKiB0aGVkYXRhIFVOVVNFRCwKKyAgICAgICAgICAgICAgICBzaXplX3QgbGVuIFVOVVNFRCkKK3sgfQorCit2b2lkCitkZWJ1Z21zZ3Rva2VuKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3QgY2hhciAqZm9ybWF0IFVOVVNFRCwgLi4uKQoreyB9CisKK3ZvaWQKK2RlYnVnX2NvbWJvX25jKGNvbnN0IGNoYXIgKnRva2VuIFVOVVNFRCwgY29uc3QgY2hhciAqZm9ybWF0IFVOVVNFRCwgLi4uKQoreyB9CisKK3ZvaWQKK3NubXBfc2V0X2RvX2RlYnVnZ2luZyhpbnQgdmFsIFVOVVNFRCkKK3sgfQorCitpbnQKK3NubXBfZ2V0X2RvX2RlYnVnZ2luZyh2b2lkKQoreworICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLyogTkVUU05NUF9OT19ERUJVR0dJTkcgKi8KKwordm9pZAorc25tcF9kZWJ1Z19pbml0KHZvaWQpCit7CisgICAgcmVnaXN0ZXJfcHJlbmV0c25tcF9taWJfaGFuZGxlcigic25tcCIsICJkb0RlYnVnZ2luZyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z19jb25maWdfdHVybl9vbl9kZWJ1Z2dpbmcsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKDF8MCkiKTsKKyAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKCJzbm1wIiwgImRlYnVnVG9rZW5zIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnX2NvbmZpZ19yZWdpc3Rlcl90b2tlbnMsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidG9rZW5bLHRva2VuLi4uXSIpOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX2VudW0uYyBiL3NubXBsaWIvc25tcF9lbnVtLmMKaW5kZXggNWY3MzVlZS4uOGE2YmQzOCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX2VudW0uYworKysgYi9zbm1wbGliL3NubXBfZW51bS5jCkBAIC0xLDQgKzEsNSBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CkBAIC0yMCw2ICsyMSwxNCBAQAogCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9lbnVtX2FsbCwgbGlibmV0c25tcCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNlX2ZpbmRfZnJlZV92YWx1ZV9pbl9zbGlzdCwgc25tcF9lbnVtX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2VudW1fc3RvcmVfbGlzdCwgc25tcF9lbnVtX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzbm1wX2VudW1fc3RvcmVfc2xpc3QsIHNubXBfZW51bV9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc25tcF9lbnVtX2NsZWFyLCBzbm1wX2VudW1fYWxsKQogCiBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3Rfc3RyIHsKICAgICBjaGFyICAgICAgICAgICAqbmFtZTsKQEAgLTMwLDcgKzM5LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKioqc25tcF9lbnVtX2xpc3RzOwogdW5zaWduZWQgaW50ICAgIGN1cnJlbnRfbWFqX251bTsKIHVuc2lnbmVkIGludCAgICBjdXJyZW50X21pbl9udW07Ci1zdHJ1Y3Qgc25tcF9lbnVtX2xpc3Rfc3RyICpzbGlzdHN0b3JhZ2U7CitzdGF0aWMgc3RydWN0IHNubXBfZW51bV9saXN0X3N0ciAqc2xpc3RzdG9yYWdlOwogCiBzdGF0aWMgdm9pZAogZnJlZV9lbnVtX2xpc3Qoc3RydWN0IHNubXBfZW51bV9saXN0ICpsaXN0KTsKQEAgLTQwLDkgKzQ5LDExIEBACiB7CiAgICAgaW50ICAgICAgICAgICAgIGk7CiAKLSAgICBpZiAoIXNubXBfZW51bV9saXN0cykKLSAgICAgICAgc25tcF9lbnVtX2xpc3RzID0gKHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqKiopCi0gICAgICAgICAgICBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqKikgKiBTRV9NQVhfSURTKTsKKyAgICBpZiAoTlVMTCAhPSBzbm1wX2VudW1fbGlzdHMpCisgICAgICAgIHJldHVybiBTRV9PSzsKKworICAgIHNubXBfZW51bV9saXN0cyA9IChzdHJ1Y3Qgc25tcF9lbnVtX2xpc3QgKioqKQorICAgICAgICBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqKikgKiBTRV9NQVhfSURTKTsKICAgICBpZiAoIXNubXBfZW51bV9saXN0cykKICAgICAgICAgcmV0dXJuIFNFX05PTUVNOwogICAgIGN1cnJlbnRfbWFqX251bSA9IFNFX01BWF9JRFM7CkBAIC01Niw5ICs2Nyw2IEBACiAgICAgfQogICAgIGN1cnJlbnRfbWluX251bSA9IFNFX01BWF9TVUJJRFM7CiAKLSAgICBpZiAoIXNsaXN0c3RvcmFnZSkKLSAgICAgICAgc2xpc3RzdG9yYWdlID0gTlVMTDsKLQogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJlbnVtIiwgc2VfcmVhZF9jb25mLCBOVUxMLCBOVUxMKTsKICAgICByZXR1cm4gU0VfT0s7CiB9CkBAIC03NSw3ICs4Myw3IEBACiAgICAgICAgICAqLwogICAgICAgICByZXR1cm4gU0VfTk9NRU07CiAgICAgfQotCisgICAgbmV0c25tcF9hc3NlcnQoTlVMTCAhPSBzbm1wX2VudW1fbGlzdHMpOwogCiAgICAgaWYgKHNubXBfZW51bV9saXN0c1ttYWpvcl1bbWlub3JdICE9IE5VTEwpCiAgICAgICAgIHJldCA9IFNFX0FMUkVBRFlfVEhFUkU7CkBAIC0xNzcsNiArMTg1LDcgQEAKICAgICByZWFkX2NvbmZpZ19zdG9yZSh0eXBlLCBsaW5lKTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfRU5VTV9TVE9SRV9MSVNUCiB2b2lkCiBzZV9zdG9yZV9saXN0KHVuc2lnbmVkIGludCBtYWpvciwgdW5zaWduZWQgaW50IG1pbm9yLCBjb25zdCBjaGFyICp0eXBlKQogewpAQCAtMTg1LDEyICsxOTQsMTQgQEAKICAgICBzbnByaW50Zih0b2tlbiwgc2l6ZW9mKHRva2VuKSwgIiVkOiVkIiwgbWFqb3IsIG1pbm9yKTsKICAgICBzZV9zdG9yZV9lbnVtX2xpc3Qoc2VfZmluZF9saXN0KG1ham9yLCBtaW5vciksIHRva2VuLCB0eXBlKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfRU5VTV9TVE9SRV9MSVNUICovCiAKIHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqCiBzZV9maW5kX2xpc3QodW5zaWduZWQgaW50IG1ham9yLCB1bnNpZ25lZCBpbnQgbWlub3IpCiB7CiAgICAgaWYgKG1ham9yID4gY3VycmVudF9tYWpfbnVtIHx8IG1pbm9yID4gY3VycmVudF9taW5fbnVtKQogICAgICAgICByZXR1cm4gTlVMTDsKKyAgICBuZXRzbm1wX2Fzc2VydChOVUxMICE9IHNubXBfZW51bV9saXN0cyk7CiAKICAgICByZXR1cm4gc25tcF9lbnVtX2xpc3RzW21ham9yXVttaW5vcl07CiB9CkBAIC0yNTcsMTggKzI2OCwxOSBAQAogaW50CiBzZV9hZGRfcGFpcl90b19saXN0KHN0cnVjdCBzbm1wX2VudW1fbGlzdCAqKmxpc3QsIGNoYXIgKmxhYmVsLCBpbnQgdmFsdWUpCiB7Ci0gICAgc3RydWN0IHNubXBfZW51bV9saXN0ICpsYXN0bm9kZSA9IE5VTEw7CisgICAgc3RydWN0IHNubXBfZW51bV9saXN0ICpsYXN0bm9kZSA9IE5VTEwsICp0bXA7CiAKICAgICBpZiAoIWxpc3QpCiAgICAgICAgIHJldHVybiBTRV9ETkU7CiAKLSAgICB3aGlsZSAoKmxpc3QpIHsKLSAgICAgICAgaWYgKCgqbGlzdCktPnZhbHVlID09IHZhbHVlKSB7CisgICAgdG1wID0gKmxpc3Q7CisgICAgd2hpbGUgKHRtcCkgeworICAgICAgICBpZiAodG1wLT52YWx1ZSA9PSB2YWx1ZSkgewogICAgICAgICAgICAgZnJlZShsYWJlbCk7CiAgICAgICAgICAgICByZXR1cm4gKFNFX0FMUkVBRFlfVEhFUkUpOwogICAgICAgICB9Ci0gICAgICAgIGxhc3Rub2RlID0gKCpsaXN0KTsKLSAgICAgICAgKCpsaXN0KSA9ICgqbGlzdCktPm5leHQ7CisgICAgICAgIGxhc3Rub2RlID0gdG1wOworICAgICAgICB0bXAgPSB0bXAtPm5leHQ7CiAgICAgfQogCiAgICAgaWYgKGxhc3Rub2RlKSB7CkBAIC0zMjksMTggKzM0MSwxOSBAQAogICAgIHJldHVybiAoc2VfZmluZF9sYWJlbF9pbl9saXN0KHNlX2ZpbmRfc2xpc3QobGlzdG5hbWUpLCB2YWx1ZSkpOwogfQogCi0KIGludAogc2VfZmluZF92YWx1ZV9pbl9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwgY29uc3QgY2hhciAqbGFiZWwpCiB7CiAgICAgcmV0dXJuIChzZV9maW5kX3ZhbHVlX2luX2xpc3Qoc2VfZmluZF9zbGlzdChsaXN0bmFtZSksIGxhYmVsKSk7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TRV9GSU5EX0ZSRUVfVkFMVUVfSU5fU0xJU1QKIGludAogc2VfZmluZF9mcmVlX3ZhbHVlX2luX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lKQogewogICAgIHJldHVybiAoc2VfZmluZF9mcmVlX3ZhbHVlX2luX2xpc3Qoc2VfZmluZF9zbGlzdChsaXN0bmFtZSkpKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NFX0ZJTkRfRlJFRV9WQUxVRV9JTl9TTElTVCAqLwogCiBpbnQKIHNlX2FkZF9wYWlyX3RvX3NsaXN0KGNvbnN0IGNoYXIgKmxpc3RuYW1lLCBjaGFyICpsYWJlbCwgaW50IHZhbHVlKQpAQCAtNDI1LDEyICs0MzgsNyBAQAogICAgIHJldHVybjsKIH0KIAotdm9pZAotc2VfY2xlYXJfc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUpCi17Ci0gICAgc2VfY2xlYXJfbGlzdChzZV9maW5kX3NsaXN0X3B0cihsaXN0bmFtZSkpOwotfQotCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9FTlVNX1NUT1JFX1NMSVNUCiB2b2lkCiBzZV9zdG9yZV9zbGlzdChjb25zdCBjaGFyICpsaXN0bmFtZSwgY29uc3QgY2hhciAqdHlwZSkKIHsKQEAgLTQ0Nyw2ICs0NTUsMTQgQEAKICAgICBzZV9zdG9yZV9zbGlzdCgoY2hhciAqKWNsaWVudGFyZ3MsIGFwcG5hbWUpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TTk1QX0VOVU1fU1RPUkVfU0xJU1QgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NOTVBfRU5VTV9DTEVBUgordm9pZAorc2VfY2xlYXJfc2xpc3QoY29uc3QgY2hhciAqbGlzdG5hbWUpCit7CisgICAgc2VfY2xlYXJfbGlzdChzZV9maW5kX3NsaXN0X3B0cihsaXN0bmFtZSkpOworfQogCiB2b2lkCiBzZV9jbGVhcl9hbGxfbGlzdHModm9pZCkKQEAgLTQ1NiwyNCArNDcyLDQgQEAKICAgICBmb3IgKHNwdHIgPSBzbGlzdHN0b3JhZ2U7IHNwdHIgIT0gTlVMTDsgc3B0ciA9IHNwdHItPm5leHQpCiAgICAgICAgIHNlX2NsZWFyX2xpc3QoJihzcHRyLT5saXN0KSk7CiB9Ci0KLSNpZmRlZiBURVNUSU5HCi1tYWluKCkKLXsKLSAgICBpbml0X3NubXBfZW51bSgpOwotICAgIHNlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cCgiaGkiKSwgMSk7Ci0gICAgc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKCJ0aGVyZSIpLCAyKTsKLSAgICBwcmludGYoImhpOiAlZFxuIiwgc2VfZmluZF92YWx1ZSgxLCAxLCAiaGkiKSk7Ci0gICAgcHJpbnRmKCIyOiAlc1xuIiwgc2VfZmluZF9sYWJlbCgxLCAxLCAyKSk7Ci0KLSAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgidGVzdGluZyIsICJsaWZlLCBhbmQgZXZlcnl0aGluZyIsIDQyKTsKLSAgICBzZV9hZGRfcGFpcl90b19zbGlzdCgidGVzdGluZyIsICJyZXN0YXVyYW50IGF0IHRoZSBlbmQgb2YgdGhlIHVuaXZlcnNlIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAyKTsKLQotICAgIHByaW50ZigibGlmZSwgYW5kIGV2ZXJ5dGhpbmc6ICVkXG4iLAotICAgICAgICAgICBzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJ0ZXN0aW5nIiwgImxpZmUsIGFuZCBldmVyeXRoaW5nIikpOwotICAgIHByaW50ZigiMjogJXNcbiIsIHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoInRlc3RpbmciLCAyKSk7Ci0KLSAgICBzZV9jbGVhcl9hbGxfbGlzdHMoKTsKLX0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVEVTVElORyAqLworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU05NUF9FTlVNX0NMRUFSICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfbG9nZ2luZy5jIGIvc25tcGxpYi9zbm1wX2xvZ2dpbmcuYwppbmRleCA3YTBkZGIyLi5hMmNkNTVhIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfbG9nZ2luZy5jCisrKyBiL3NubXBsaWIvc25tcF9sb2dnaW5nLmMKQEAgLTE4LDYgKzE4LDcgQEAKICAqICBAewogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2lmIEhBVkVfTUFMTE9DX0gKICNpbmNsdWRlIDxtYWxsb2MuaD4KQEAgLTQyLDExICs0Myw3IEBACiAjZW5kaWYKICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTksMTEgKzU2LDcgQEAKICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CiAjZW5kaWYKIAotI2lmIEhBVkVfU1REQVJHX0gKICNpbmNsdWRlIDxzdGRhcmcuaD4KLSNlbHNlCi0jaW5jbHVkZSA8dmFyYXJncy5oPgotI2VuZGlmCiAKICNpZiBIQVZFX1VOSVNURF9ICiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC03MiwxNCArNjUsNiBAQAogI2luY2x1ZGUgPGRtYWxsb2MuaD4KICNlbmRpZgogCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKLQotI2lmIEhBVkVfV0lORE9XU19ICi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2VuZGlmCi0KICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPiAgICAgIC8qIEZvciB0aGlzIGZpbGUncyAiaW50ZXJuYWwiIGRlZmluaXRpb25zICovCkBAIC0xMDAsMTkgKzg1LDU3IEBACiAjZW5kaWYKICNlbmRpZgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobG9nZ2luZ19hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX291dHB1dHMsIGxvZ2dpbmdfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfZmlsZSwgbG9nZ2luZ19vdXRwdXRzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfc3RkaW8sIGxvZ2dpbmdfb3V0cHV0cykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX3N5c2xvZywgbG9nZ2luZ19vdXRwdXRzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGxvZ2dpbmdfZXh0ZXJuYWwsIGxvZ2dpbmdfYWxsKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZW5hYmxlX3N0ZGVycmxvZywgbG9nZ2luZ19hbGwpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX2VuYWJsZV9jYWxsbG9nLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihsb2dnaW5nX2VuYWJsZV9sb2doYW5kbGVyLCBuZXRzbm1wX3VudXNlZCkKKworLyogZGVmYXVsdCB0byB0aGUgZmlsZS9zdGRpby9zeXNsb2cgc2V0ICovCituZXRzbm1wX2ZlYXR1cmVfd2FudChsb2dnaW5nX291dHB1dHMpCisKIC8qCiAgKiBsb2doX2hlYWQ6ICBBIGxpc3Qgb2YgYWxsIGxvZyBoYW5kbGVycywgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBwcmlvcml0eQogICogbG9naF9wcmlvcml0aWVzOiAgJ0luZGV4ZXMnIGludG8gdGhpcyBsaXN0LCBieSBwcmlvcml0eQogICovCiBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doX2hlYWQgPSBOVUxMOwogbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naF9wcmlvcml0aWVzW0xPR19ERUJVRysxXTsKK3N0YXRpYyBpbnQgIGxvZ2hfZW5hYmxlZCA9IDA7CiAKLXN0YXRpYyBpbnQgICAgICBuZXdsaW5lID0gMTsJIC8qIE1UQ1JJVElDQUxfUkVTT1VSQ0UgKi8KLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiBzdGF0aWMgY2hhciBzeXNsb2duYW1lWzY0XSA9IERFRkFVTFRfTE9HX0lEOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogdm9pZAorbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doKQoreworICAgIGlmICghbG9naCB8fCAoMCA9PSBsb2doLT5lbmFibGVkKSkKKyAgICAgICAgcmV0dXJuOworICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworICAgIC0tbG9naF9lbmFibGVkOworICAgIG5ldHNubXBfYXNzZXJ0KGxvZ2hfZW5hYmxlZCA+PSAwKTsKK30KKwordm9pZAorbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2gpCit7CisgICAgaWYgKCFsb2doIHx8ICgwICE9IGxvZ2gtPmVuYWJsZWQpKQorICAgICAgICByZXR1cm47CisgICAgbG9naC0+ZW5hYmxlZCA9IDE7CisgICAgKytsb2doX2VuYWJsZWQ7Cit9CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKK3ZvaWQKIG5ldHNubXBfZW5hYmxlX2ZpbGVsb2cobmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCwgaW50IGRvbnRfemVyb19sb2cpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKICNpZm5kZWYgSEFWRV9WU05QUklOVEYKICAgICAgICAgICAgICAgICAvKgpAQCAtMTIzLDEwICsxNDYsMjIgQEAKICNlbmRpZgogCiB2b2lkCitwYXJzZV9jb25maWdfbG9nT3B0aW9uKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworICBpbnQgbXlfYXJnYyA9IDAgOworICBjaGFyICoqbXlfYXJndiA9IE5VTEw7CisKKyAgc25tcF9sb2dfb3B0aW9ucyggY3B0ciwgbXlfYXJnYywgbXlfYXJndiApOworfQorCit2b2lkCiBpbml0X3NubXBfbG9nZ2luZyh2b2lkKQogewogICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliKEFTTl9CT09MRUFOLCAic25tcCIsICJsb2dUaW1lc3RhbXAiLCAKIAkJCSBORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX0xPR19USU1FU1RBTVApOworICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIoInNubXAiLCAibG9nT3B0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlX2NvbmZpZ19sb2dPcHRpb24sIE5VTEwsICJzdHJpbmciKTsKKwogfQogCiB2b2lkCkBAIC0xNDAsNiArMTc1LDcgQEAKIC8qCiAgKiBUaGVzZSBkZWZpbml0aW9ucyBoYW5kbGUgNC4yIHN5c3RlbXMgd2l0aG91dCBhZGRpdGlvbmFsIHN5c2xvZyBmYWNpbGl0aWVzLgogICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICNpZm5kZWYgTE9HX0NPTlMKICNkZWZpbmUgTE9HX0NPTlMJMCAgICAgICAvKiBEb24ndCBib3RoZXIgaWYgbm90IGRlZmluZWQuLi4gKi8KICNlbmRpZgpAQCAtMTc2LDYgKzIxMiwyNyBAQAogI2lmbmRlZiBMT0dfVVNFUgogI2RlZmluZSBMT0dfVVNFUgkwCiAjZW5kaWYKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCisKKy8qIFNldCBsaW5lIGJ1ZmZlcmluZyBtb2RlIGZvciBhIHN0cmVhbS4gKi8KK3ZvaWQKK25ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKEZJTEUgKnN0cmVhbSkKK3sKKyNpZiBkZWZpbmVkKFdJTjMyKQorICAgIC8qCisgICAgICogQWNjb3JkaW5nIHRvIE1TRE4sIHRoZSBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBDIHJ1bnRpbWUgbGlicmFyeSBkb2VzCisgICAgICogbm90IHN1cHBvcnQgbGluZSBidWZmZXJpbmcsIHNvIHR1cm4gb2ZmIGJ1ZmZlcmluZyBjb21wbGV0ZWx5LgorICAgICAqIFNlZSBhbHNvIGh0dHA6Ly9tc2RuLm1pY3Jvc29mdC5jb20vZW4tdXMvbGlicmFyeS84NmNlYmhmcyhWUy43MSkuYXNweC4KKyAgICAgKi8KKyAgICBzZXR2YnVmKHN0cmVhbSwgTlVMTCwgX0lPTkJGLCBCVUZTSVopOworI2VsaWYgZGVmaW5lZChIQVZFX1NFVExJTkVCVUYpCisgICAgLyogc2V0bGluZWZ1bmN0aW9uKCkgaXMgYSBmdW5jdGlvbiBmcm9tIHRoZSBCU0QgVW5peCBBUEkuICovCisgICAgc2V0bGluZWJ1ZihzdHJlYW0pOworI2Vsc2UKKyAgICAvKiBTZWUgYWxzbyB0aGUgQzg5IG9yIEM5OSBzdGFuZGFyZCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBzZXR2YnVmKCkuICovCisgICAgc2V0dmJ1ZihzdHJlYW0sIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKKyNlbmRpZgorfQogCiAvKgogICogRGVjb2RlcyBsb2cgcHJpb3JpdHkuCkBAIC0yNTEsNiArMzA4LDcgQEAKICAgICByZXR1cm4gcHJpX2xvdzsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiBpbnQKIGRlY29kZV9mYWNpbGl0eSggY2hhciAqb3B0YXJnICkKIHsKQEAgLTI4NSw2ICszNDMsNyBAQAogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAogaW50CiBzbm1wX2xvZ19vcHRpb25zKGNoYXIgKm9wdGFyZywgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KQpAQCAtMzA1LDYgKzM2NCw4IEBACiAgICAgaW50ICAgICAgICAgICAgIGluY19vcHRpbmQgPSAwOwogICAgIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2g7CiAKKyAgICBERUJVR01TR1QoKCJsb2dnaW5nOm9wdGlvbnMiLCAib3B0YXJnOiAnJXMnLCBhcmdjICVkLCBhcmd2ICclcydcbiIsCisgICAgICAgICAgICAgICBvcHRhcmcsIGFyZ2MsIGFyZ3YgPyBhcmd2WzBdIDogIk5VTEwiKSk7CiAgICAgb3B0YXJnKys7CiAgICAgaWYgKCEqY3ApCiAgICAgICAgIGNwID0gJm1pc3Npbmdfb3B0OwpAQCAtMzE4LDcgKzM3OSw3IEBACiAgICAgLyoKICAgICAgKiBhbmQgJy4uLi4gIi1MeCB2YWx1ZSIgLi4uLicgICgqd2l0aCogdGhlIHF1b3RlcykKICAgICAgKi8KLSAgICB3aGlsZSAoKm9wdGFyZyAmJiBpc3NwYWNlKCpvcHRhcmcpKSB7CisgICAgd2hpbGUgKCpvcHRhcmcgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKm9wdGFyZykpKSB7CiAgICAgICAgIG9wdGFyZysrOwogICAgIH0KICAgICAvKgpAQCAtMzM2LDggKzM5NywxMCBAQAogICAgICAgICBpbmNfb3B0aW5kID0gMTsKICAgICB9CiAKKyAgICBERUJVR01TR1QoKCJsb2dnaW5nOm9wdGlvbnMiLCAiKmNwOiAnJWMnXG4iLCAqY3ApKTsKICAgICBzd2l0Y2ggKCpjcCkgewogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTwogICAgIC8qCiAgICAgICogTG9nIHRvIFN0YW5kYXJkIEVycm9yCiAgICAgICovCkBAIC0zNTAsNiArNDEzLDcgQEAKICAgICBjYXNlICdlJzoKICAgICAgICAgbG9naCA9IG5ldHNubXBfcmVnaXN0ZXJfbG9naGFuZGxlcihORVRTTk1QX0xPR0hBTkRMRVJfU1RERVJSLCBwcmlvcml0eSk7CiAgICAgICAgIGlmIChsb2doKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhzdGRlcnIpOwogICAgICAgICAgICAgbG9naC0+cHJpX21heCA9IHByaV9tYXg7CiAgICAgICAgICAgICBsb2doLT50b2tlbiAgID0gc3RyZHVwKCJzdGRlcnIiKTsKIAl9CkBAIC0zNjcsMTEgKzQzMSwxMyBAQAogICAgIGNhc2UgJ28nOgogICAgICAgICBsb2doID0gbmV0c25tcF9yZWdpc3Rlcl9sb2doYW5kbGVyKE5FVFNOTVBfTE9HSEFORExFUl9TVERFUlIsIHByaW9yaXR5KTsKICAgICAgICAgaWYgKGxvZ2gpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc2V0X2xpbmVfYnVmZmVyaW5nKHN0ZG91dCk7CiAgICAgICAgICAgICBsb2doLT5wcmlfbWF4ID0gcHJpX21heDsKICAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgPSBzdHJkdXAoInN0ZG91dCIpOwogICAgICAgICAgICAgbG9naC0+aW1hZ2ljICA9IDE7CSAgICAvKiBzdGRvdXQsIG5vdCBzdGRlcnIgKi8KIAl9CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLwogCiAgICAgLyoKICAgICAgKiBMb2cgdG8gYSBuYW1lZCBmaWxlCkBAIC0zODEsNiArNDQ3LDcgQEAKICAgICAgICAgaWYgKHByaW9yaXR5ID09IC0xIHx8ICFhcmd2KSAgcmV0dXJuIC0xOwogICAgICAgICBvcHRhcmcgPSBhcmd2Wysrb3B0aW5kXTsKICAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICBjYXNlICdmJzoKICAgICAgICAgaWYgKGluY19vcHRpbmQpCiAgICAgICAgICAgICBvcHRpbmQrKzsKQEAgLTM5Nyw3ICs0NjQsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUEVORF9MT0dGSUxFUykpOwogCX0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgLyoKICAgICAgKiBMb2cgdG8gc3lzbG9nCiAgICAgICovCkBAIC00MjQsMTEgKzQ5MywxMiBAQAogICAgICAgICAgICAgaW50IGZhY2lsaXR5ID0gZGVjb2RlX2ZhY2lsaXR5KG9wdGFyZyk7CiAgICAgICAgICAgICBpZiAoZmFjaWxpdHkgPT0gLTEpICByZXR1cm4gLTE7CiAgICAgICAgICAgICBsb2doLT5wcmlfbWF4ID0gcHJpX21heDsKLSAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgPSBzdHJkdXAoc25tcF9sb2dfc3lzbG9nbmFtZSgwKSk7CisgICAgICAgICAgICBsb2doLT50b2tlbiAgID0gc3RyZHVwKHNubXBfbG9nX3N5c2xvZ25hbWUoTlVMTCkpOwogICAgICAgICAgICAgbG9naC0+bWFnaWMgICA9ICh2b2lkICopKGludHB0cl90KWZhY2lsaXR5OwotCSAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoc25tcF9sb2dfc3lzbG9nbmFtZSgwKSwgZmFjaWxpdHkpOworCSAgICBzbm1wX2VuYWJsZV9zeXNsb2dfaWRlbnQoc25tcF9sb2dfc3lzbG9nbmFtZShOVUxMKSwgZmFjaWxpdHkpOwogCX0KICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiAgICAgLyoKICAgICAgKiBEb24ndCBsb2cgCkBAIC00NjAsNiArNTMwLDcgQEAKICAgICByZXR1cm4gMDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiBjaGFyICoKIHNubXBfbG9nX3N5c2xvZ25hbWUoY29uc3QgY2hhciAqcHN0cikKIHsKQEAgLTQ2OCwyMCArNTM5LDI5IEBACiAKICAgcmV0dXJuIHN5c2xvZ25hbWU7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiB2b2lkCiBzbm1wX2xvZ19vcHRpb25zX3VzYWdlKGNvbnN0IGNoYXIgKmxlYWQsIEZJTEUgKiBvdXRmKQogewogICAgIGNvbnN0IGNoYXIgKnByaTFfbXNnID0gIiBmb3IgbGV2ZWwgJ3ByaScgYW5kIGFib3ZlIjsKICAgICBjb25zdCBjaGFyICpwcmkyX21zZyA9ICIgZm9yIGxldmVscyAncDEnIHRvICdwMiciOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KICAgICBmcHJpbnRmKG91dGYsICIlc2U6ICAgICAgICAgICBsb2cgdG8gc3RhbmRhcmQgZXJyb3JcbiIsIGxlYWQpOwogICAgIGZwcmludGYob3V0ZiwgIiVzbzogICAgICAgICAgIGxvZyB0byBzdGFuZGFyZCBvdXRwdXRcbiIsIGxlYWQpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLwogICAgIGZwcmludGYob3V0ZiwgIiVzbjogICAgICAgICAgIGRvbid0IGxvZyBhdCBhbGxcbiIsIGxlYWQpOworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogICAgIGZwcmludGYob3V0ZiwgIiVzZiBmaWxlOiAgICAgIGxvZyB0byB0aGUgc3BlY2lmaWVkIGZpbGVcbiIsIGxlYWQpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICBmcHJpbnRmKG91dGYsICIlc3MgZmFjaWxpdHk6ICBsb2cgdG8gc3lzbG9nICh2aWEgdGhlIHNwZWNpZmllZCBmYWNpbGl0eSlcbiIsIGxlYWQpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KICAgICBmcHJpbnRmKG91dGYsICJcbiVzKHZhcmlhbnRzKVxuIiwgbGVhZCk7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgZnByaW50ZihvdXRmLCAiJXNbRU9OXSBwcmk6ICAgbG9nIHRvIHN0YW5kYXJkIGVycm9yLCBvdXRwdXQgb3IgL2Rldi9udWxsJXNcbiIsIGxlYWQsIHByaTFfbXNnKTsKICAgICBmcHJpbnRmKG91dGYsICIlc1tFT05dIHAxLXAyOiBsb2cgdG8gc3RhbmRhcmQgZXJyb3IsIG91dHB1dCBvciAvZGV2L251bGwlc1xuIiwgbGVhZCwgcHJpMl9tc2cpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAgICAgZnByaW50ZihvdXRmLCAiJXNbRlNdIHByaSB0b2tlbjogICAgbG9nIHRvIGZpbGUvc3lzbG9nJXNcbiIsIGxlYWQsIHByaTFfbXNnKTsKICAgICBmcHJpbnRmKG91dGYsICIlc1tGU10gcDEtcDIgdG9rZW46ICBsb2cgdG8gZmlsZS9zeXNsb2clc1xuIiwgbGVhZCwgcHJpMl9tc2cpOwogfQpAQCAtNDk1LDExICs1NzUsNyBAQAogaW50CiBzbm1wX2dldF9kb19sb2dnaW5nKHZvaWQpCiB7Ci0gICAgbmV0c25tcF9sb2dfaGFuZGxlciAqbG9naDsKLSAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KQotICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCkKLSAgICAgICAgICAgIHJldHVybiAxOwotICAgIHJldHVybiAwOworICAgIHJldHVybiAobG9naF9lbmFibGVkID4gMCk7CiB9CiAKIApAQCAtNTIwLDYgKzU5Niw3IEBACiAgICAgcmV0dXJuIHNidWY7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogdm9pZAogc25tcF9kaXNhYmxlX3N5c2xvZ19lbnRyeShuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doKQogewpAQCAtNTM3LDcgKzYxNCw3IEBACiAgICAgbG9naC0+aW1hZ2ljICA9IDA7CiAjZW5kaWYKIAotICAgIGxvZ2gtPmVuYWJsZWQgPSAwOworICAgIG5ldHNubXBfZGlzYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiB9CiAKIHZvaWQKQEAgLTU0OSw3ICs2MjYsOSBAQAogICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCAmJiBsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TWVNMT0cpCiAgICAgICAgICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nX2VudHJ5KGxvZ2gpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQogdm9pZAogc25tcF9kaXNhYmxlX2ZpbGVsb2dfZW50cnkobmV0c25tcF9sb2dfaGFuZGxlciAqbG9naCkKIHsKQEAgLTU2MSw5ICs2NDAsMTEgQEAKICAgICAgICAgZmNsb3NlKChGSUxFKilsb2doLT5tYWdpYyk7CiAgICAgICAgIGxvZ2gtPm1hZ2ljICAgPSBOVUxMOwogICAgIH0KLSAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKIHZvaWQKIHNubXBfZGlzYWJsZV9maWxlbG9nKHZvaWQpCiB7CkBAIC01NzMsNyArNjU0LDkgQEAKICAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQgJiYgbG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfRklMRSkKICAgICAgICAgICAgIHNubXBfZGlzYWJsZV9maWxlbG9nX2VudHJ5KGxvZ2gpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCiAvKgogICogcmV0dXJucyB0aGF0IHN0YXR1cyBvZiBzdGRlcnIgbG9nZ2luZwogICoKQEAgLTYwMiwxMCArNjg1LDEyIEBACiAgICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkKICAgICAgICAgaWYgKGxvZ2gtPmVuYWJsZWQgJiYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NURE9VVCB8fAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1RERVJSKSkgewotICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgICAgICAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogCX0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRU5BQkxFX0NBTExMT0cKIHZvaWQKIHNubXBfZGlzYWJsZV9jYWxsbG9nKHZvaWQpCiB7CkBAIC02MTMsOSArNjk4LDEwIEBACiAKICAgICBmb3IgKGxvZ2ggPSBsb2doX2hlYWQ7IGxvZ2g7IGxvZ2ggPSBsb2doLT5uZXh0KQogICAgICAgICBpZiAobG9naC0+ZW5hYmxlZCAmJiBsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9DQUxMQkFDSykgewotICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCA9IDA7CisgICAgICAgICAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogCX0KIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRU5BQkxFX0NBTExMT0cgKi8KIAogdm9pZAogc25tcF9kaXNhYmxlX2xvZyh2b2lkKQpAQCAtNjIzLDExICs3MDksMTUgQEAKICAgICBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doOwogCiAgICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkgeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TWVNMT0cpCiAgICAgICAgICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nX2VudHJ5KGxvZ2gpOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cgKi8KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKICAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX0ZJTEUpCiAgICAgICAgICAgICBzbm1wX2Rpc2FibGVfZmlsZWxvZ19lbnRyeShsb2doKTsKLSAgICAgICAgbG9naC0+ZW5hYmxlZCA9IDA7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KKyAgICAgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICB9CiB9CiAKQEAgLTYzOSwxNSArNzI5LDIwIEBACiBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydCh2b2lkKQogewogICAgIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2g7CisgICAgaW50IGRvbmVvbmUgPSAwOwogCiAgICAgZm9yIChsb2doID0gbG9naF9oZWFkOyBsb2doOyBsb2doID0gbG9naC0+bmV4dCkgewogICAgICAgICBpZiAoMCA9PSBsb2doLT5lbmFibGVkKQogICAgICAgICAgICAgY29udGludWU7CisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TWVNMT0cKICAgICAgICAgaWYgKGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NZU0xPRykgewogICAgICAgICAgICAgc25tcF9kaXNhYmxlX3N5c2xvZ19lbnRyeShsb2doKTsKICAgICAgICAgICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChsb2doLT50b2tlbiwoaW50KShpbnRwdHJfdClsb2doLT5tYWdpYyk7CisgICAgICAgICAgICBkb25lb25lID0gMTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9GSUxFKSB7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRQorICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfRklMRSAmJiAhZG9uZW9uZSkgewogICAgICAgICAgICAgc25tcF9kaXNhYmxlX2ZpbGVsb2dfZW50cnkobG9naCk7CiAgICAgICAgICAgICAvKiogaG1tLCBkb24ndCB6ZXJvIHN0YXR1cyBpc24ndCBzYXZlZC4uIGkgdGhpbmsgaXQncwogICAgICAgICAgICAgICogc2FmZXIgbm90IHRvIG92ZXJ3cml0ZSwgaW4gY2FzZSBhIGh1cCBpcyBqdXN0IHRvCkBAIC02NTUsMTUgKzc1MCwxNyBAQAogICAgICAgICAgICAgICovCiAgICAgICAgICAgICBuZXRzbm1wX2VuYWJsZV9maWxlbG9nKGxvZ2gsIDEpOwogICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KICAgICB9CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRwogdm9pZAogc25tcF9lbmFibGVfc3lzbG9nKHZvaWQpCiB7Ci0gICAgc25tcF9lbmFibGVfc3lzbG9nX2lkZW50KHNubXBfbG9nX3N5c2xvZ25hbWUoMCksIExPR19EQUVNT04pOworICAgIHNubXBfZW5hYmxlX3N5c2xvZ19pZGVudChzbm1wX2xvZ19zeXNsb2duYW1lKE5VTEwpLCBMT0dfREFFTU9OKTsKIH0KIAogdm9pZApAQCAtNjk4LDcgKzc5NSwxMCBAQAogICAgICAgICBpZiAobG9naC0+dHlwZSA9PSBORVRTTk1QX0xPR0hBTkRMRVJfU1lTTE9HKSB7CiAgICAgICAgICAgICBsb2doLT5tYWdpYyAgID0gKHZvaWQqKWV2ZW50bG9nX2g7CiAgICAgICAgICAgICBsb2doLT5pbWFnaWMgID0gZW5hYmxlOwkvKiBzeXNsb2cgb3BlbiAqLwotICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCA9IGVuYWJsZTsKKyAgICAgICAgICAgIGlmIChsb2doLT5lbmFibGVkICYmICgwID09IGVuYWJsZSkpCisgICAgICAgICAgICAgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCgwID09IGxvZ2gtPmVuYWJsZWQpICYmIGVuYWJsZSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgICAgICAgICBmb3VuZCAgICAgICAgID0gMTsKIAl9CiAKQEAgLTcwOSwxMSArODA5LDE2IEBACiAgICAgICAgICAgICBsb2doLT5tYWdpYyAgICA9ICh2b2lkKilldmVudGxvZ19oOwogICAgICAgICAgICAgbG9naC0+dG9rZW4gICAgPSBzdHJkdXAoaWRlbnQpOwogICAgICAgICAgICAgbG9naC0+aW1hZ2ljICAgPSBlbmFibGU7CS8qIHN5c2xvZyBvcGVuICovCi0gICAgICAgICAgICBsb2doLT5lbmFibGVkICA9IGVuYWJsZTsKKyAgICAgICAgICAgIGlmIChsb2doLT5lbmFibGVkICYmICgwID09IGVuYWJsZSkpCisgICAgICAgICAgICAgICAgbmV0c25tcF9kaXNhYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKCgwID09IGxvZ2gtPmVuYWJsZWQpICYmIGVuYWJsZSkKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgICAgIH0KICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiB2b2lkCiBuZXRzbm1wX2VuYWJsZV9maWxlbG9nKG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2gsIGludCBkb250X3plcm9fbG9nKQogewpAQCAtNzI0LDIxICs4MjksMTQgQEAKIAogICAgIGlmICghbG9naC0+bWFnaWMpIHsKICAgICAgICAgbG9nZmlsZSA9IGZvcGVuKGxvZ2gtPnRva2VuLCBkb250X3plcm9fbG9nID8gImEiIDogInciKTsKLSAgICAgICAgaWYgKCFsb2dmaWxlKQorICAgICAgICBpZiAoIWxvZ2ZpbGUpIHsKKwkgICAgc25tcF9sb2dfcGVycm9yKGxvZ2gtPnRva2VuKTsKICAgICAgICAgICAgIHJldHVybjsKKwl9CiAgICAgICAgIGxvZ2gtPm1hZ2ljID0gKHZvaWQqKWxvZ2ZpbGU7Ci0jaWZkZWYgV0lOMzIKLSAgICAgICAgLyoKLSAgICAgICAgICogQXBwYXJlbnRseSwgImxpbmUgYnVmZmVyaW5nIiB1bmRlciBXaW5kb3dzIGlzCi0gICAgICAgICAqICBhY3R1YWxseSBpbXBsZW1lbnRlZCBhcyAiZnVsbCBidWZmZXJpbmciLgotICAgICAgICAgKiAgTGV0J3MgdHJ5IHR1cm5pbmcgb2ZmIGJ1ZmZlcmluZyBjb21wbGV0ZWx5LgotICAgICAgICAgKi8KLSAgICAgICAgc2V0dmJ1Zihsb2dmaWxlLCBOVUxMLCBfSU9OQkYsIEJVRlNJWik7Ci0jZWxzZQotICAgICAgICBzZXR2YnVmKGxvZ2ZpbGUsIE5VTEwsIF9JT0xCRiwgQlVGU0laKTsKLSNlbmRpZgorICAgICAgICBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhsb2dmaWxlKTsKICAgICB9Ci0gICAgbG9naC0+ZW5hYmxlZCA9IDE7CisgICAgbmV0c25tcF9lbmFibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogfQogCiB2b2lkCkBAIC03NzAsOCArODY4LDExIEBACiAgICAgICAgICAgICAgICAgbmV0c25tcF9lbmFibGVfZmlsZWxvZyhsb2doLCBkb250X3plcm9fbG9nKTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUgKi8KIAogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfRU5BQkxFX1NUREVSUkxPRworLyogdXNlZCBpbiB0aGUgcGVybCBtb2R1bGVzIGFuZCBpcC1taWIvaXB2NEludGVyZmFjZVRhYmxlL2lwdjRJbnRlcmZhY2VUYWJsZV9zdWJhZ2VudC5jICovCiB2b2lkCiBzbm1wX2VuYWJsZV9zdGRlcnJsb2codm9pZCkKIHsKQEAgLTc4MSw3ICs4ODIsNyBAQAogICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpCiAgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9TVERPVVQgfHwKICAgICAgICAgICAgIGxvZ2gtPnR5cGUgPT0gTkVUU05NUF9MT0dIQU5ETEVSX1NUREVSUikgewotICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCA9IDE7CisgICAgICAgICAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgICAgICAgICBmb3VuZCAgICAgICAgID0gMTsKICAgICAgICAgfQogCkBAIC03OTIsOCArODkzLDkgQEAKICAgICAgICAgICAgIGxvZ2gtPnRva2VuICAgID0gc3RyZHVwKCJzdGRlcnIiKTsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9FTkFCTEVfU1RERVJSTE9HICovCiAKLQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRU5BQkxFX0NBTExMT0cKIHZvaWQKIHNubXBfZW5hYmxlX2NhbGxsb2codm9pZCkJLyogWFhYIC0gb3IgdGFrZSBhIGNhbGxiYWNrIHJvdXRpbmUgPz8/ICovCiB7CkBAIC04MDIsNyArOTA0LDcgQEAKIAogICAgIGZvciAobG9naCA9IGxvZ2hfaGVhZDsgbG9naDsgbG9naCA9IGxvZ2gtPm5leHQpCiAgICAgICAgIGlmIChsb2doLT50eXBlID09IE5FVFNOTVBfTE9HSEFORExFUl9DQUxMQkFDSykgewotICAgICAgICAgICAgbG9naC0+ZW5hYmxlZCA9IDE7CisgICAgICAgICAgICBuZXRzbm1wX2VuYWJsZV90aGlzX2xvZ2hhbmRsZXIobG9naCk7CiAgICAgICAgICAgICBmb3VuZCAgICAgICAgID0gMTsKIAl9CiAKQEAgLTgxMyw3ICs5MTUsNyBAQAogICAgICAgICAgICAgbG9naC0+dG9rZW4gICAgPSBzdHJkdXAoImNhbGxiYWNrIik7CiAgICAgfQogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VOQUJMRV9DQUxMTE9HICovCiAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwpAQCAtODkxLDIyICs5OTMsMzEgQEAKICAgICBpZiAoIWxvZ2gpCiAgICAgICAgIHJldHVybiBOVUxMOwogCisgICAgREVCVUdNU0dUKCgibG9nZ2luZzpyZWdpc3RlciIsICJyZWdpc3RlcmluZyBsb2cgdHlwZSAlZCB3aXRoIHByaSAlZFxuIiwKKyAgICAgICAgICAgICAgIHR5cGUsIHByaW9yaXR5KSk7CisKICAgICBsb2doLT50eXBlICAgICA9IHR5cGU7CiAgICAgc3dpdGNoICggdHlwZSApIHsKICAgICBjYXNlIE5FVFNOTVBfTE9HSEFORExFUl9TVERPVVQ6CiAgICAgICAgIGxvZ2gtPmltYWdpYyAgPSAxOwogICAgICAgICAvKiBmYWxsdGhyb3VnaCAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KICAgICBjYXNlIE5FVFNOTVBfTE9HSEFORExFUl9TVERFUlI6CiAgICAgICAgIGxvZ2gtPmhhbmRsZXIgPSBsb2dfaGFuZGxlcl9zdGRvdXRlcnI7CiAgICAgICAgIGJyZWFrOworI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTyAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFCiAgICAgY2FzZSBORVRTTk1QX0xPR0hBTkRMRVJfRklMRToKICAgICAgICAgbG9naC0+aGFuZGxlciA9IGxvZ19oYW5kbGVyX2ZpbGU7CiAgICAgICAgIGxvZ2gtPmltYWdpYyAgPSAxOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRklMRSAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAgICAgY2FzZSBORVRTTk1QX0xPR0hBTkRMRVJfU1lTTE9HOgogICAgICAgICBsb2doLT5oYW5kbGVyID0gbG9nX2hhbmRsZXJfc3lzbG9nOwogICAgICAgICBicmVhazsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HICovCiAgICAgY2FzZSBORVRTTk1QX0xPR0hBTkRMRVJfQ0FMTEJBQ0s6CiAgICAgICAgIGxvZ2gtPmhhbmRsZXIgPSBsb2dfaGFuZGxlcl9jYWxsYmFjazsKICAgICAgICAgYnJlYWs7CkBAIC05MTgsMTIgKzEwMjksMTMgQEAKICAgICAgICAgcmV0dXJuIE5VTEw7CiAgICAgfQogICAgIGxvZ2gtPnByaW9yaXR5ID0gcHJpb3JpdHk7Ci0gICAgbG9naC0+ZW5hYmxlZCAgPSAxOworICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICBuZXRzbm1wX2FkZF9sb2doYW5kbGVyKCBsb2doICk7CiAgICAgcmV0dXJuIGxvZ2g7CiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfRU5BQkxFX0xPR0hBTkRMRVIKIGludAogbmV0c25tcF9lbmFibGVfbG9naGFuZGxlciggY29uc3QgY2hhciAqdG9rZW4gKQogewpAQCAtOTMyLDcgKzEwNDQsNyBAQAogICAgIGxvZ2ggPSBuZXRzbm1wX2ZpbmRfbG9naGFuZGxlciggdG9rZW4gKTsKICAgICBpZiAoIWxvZ2gpCiAgICAgICAgIHJldHVybiAwOwotICAgIGxvZ2gtPmVuYWJsZWQgPSAxOworICAgIG5ldHNubXBfZW5hYmxlX3RoaXNfbG9naGFuZGxlcihsb2doKTsKICAgICByZXR1cm4gMTsKIH0KIApAQCAtOTQ1LDkgKzEwNTcsMTAgQEAKICAgICBsb2doID0gbmV0c25tcF9maW5kX2xvZ2hhbmRsZXIoIHRva2VuICk7CiAgICAgaWYgKCFsb2doKQogICAgICAgICByZXR1cm4gMDsKLSAgICBsb2doLT5lbmFibGVkID0gMDsKKyAgICBuZXRzbm1wX2Rpc2FibGVfdGhpc19sb2doYW5kbGVyKGxvZ2gpOwogICAgIHJldHVybiAxOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FTkFCTEVfTE9HSEFORExFUiAqLwogCiBpbnQKIG5ldHNubXBfcmVtb3ZlX2xvZ2hhbmRsZXIoIG5ldHNubXBfbG9nX2hhbmRsZXIgKmxvZ2ggKQpAQCAtOTc0LDkgKzEwODcsMTIgQEAKIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19TVERJTwogaW50CiBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoICBuZXRzbm1wX2xvZ19oYW5kbGVyKiBsb2doLCBpbnQgcHJpLCBjb25zdCBjaGFyICpzdHIpCiB7CisgICAgc3RhdGljIGludCAgICAgIG5ld2xpbmUgPSAxOwkgLyogTVRDUklUSUNBTF9SRVNPVVJDRSAqLworICAgIGNvbnN0IGNoYXIgICAgICpuZXdsaW5lX3B0cjsKICAgICBjaGFyICAgICAgICAgICAgc2J1Zls0MF07CiAKICAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIApAQCAtOTg1LDcgKzExMDEsMTIgQEAKICAgICB9IGVsc2UgewogICAgICAgICBzdHJjcHkoc2J1ZiwgIiIpOwogICAgIH0KLSAgICBuZXdsaW5lID0gc3RyW3N0cmxlbihzdHIpIC0gMV0gPT0gJ1xuJzsJLyogWFhYIC0gRWggPyAqLworICAgIC8qCisgICAgICogUmVtZW1iZXIgd2hldGhlciBvciBub3QgdGhlIGN1cnJlbnQgbGluZSBlbmRzIHdpdGggYSBuZXdsaW5lIGZvciB0aGUKKyAgICAgKiBuZXh0IGNhbGwgb2YgbG9nX2hhbmRsZXJfc3Rkb3V0ZXJyKCkuCisgICAgICovCisgICAgbmV3bGluZV9wdHIgPSBzdHJyY2hyKHN0ciwgJ1xuJyk7CisgICAgbmV3bGluZSA9IG5ld2xpbmVfcHRyICYmIG5ld2xpbmVfcHRyWzFdID09IDA7CiAKICAgICBpZiAobG9naC0+aW1hZ2ljKQogICAgICAgIHByaW50ZiggICAgICAgICAiJXMlcyIsIHNidWYsIHN0cik7CkBAIC05OTQsOCArMTExNSwxMCBAQAogCiAgICAgcmV0dXJuIDE7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1lTTE9HCiAjaWZkZWYgV0lOMzIKIGludAogbG9nX2hhbmRsZXJfc3lzbG9nKCAgbmV0c25tcF9sb2dfaGFuZGxlciogbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKQpAQCAtMTA3OSw4ICsxMjAyLDEwIEBACiAgICAgcmV0dXJuIDE7CiB9CiAjZW5kaWYgLyogIVdJTjMyICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NZU0xPRyAqLwogCiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0ZJTEUKIGludAogbG9nX2hhbmRsZXJfZmlsZSggICAgbmV0c25tcF9sb2dfaGFuZGxlciogbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKQogewpAQCAtMTExNyw2ICsxMjQyLDcgQEAKICAgICBsb2doLT5pbWFnaWMgPSBzdHJbc3RybGVuKHN0cikgLSAxXSA9PSAnXG4nOwogICAgIHJldHVybiAxOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19GSUxFICovCiAKIGludAogbG9nX2hhbmRsZXJfY2FsbGJhY2sobmV0c25tcF9sb2dfaGFuZGxlciogbG9naCwgaW50IHByaSwgY29uc3QgY2hhciAqc3RyKQpAQCAtMTE1MSwxNyArMTI3NywzNyBAQAogdm9pZAogc25tcF9sb2dfc3RyaW5nKGludCBwcmlvcml0eSwgY29uc3QgY2hhciAqc3RyKQogeworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8KKyAgICBzdGF0aWMgaW50IHN0ZGVycl9lbmFibGVkID0gMDsKKyAgICBzdGF0aWMgbmV0c25tcF9sb2dfaGFuZGxlciBsaCA9IHsgMSwgMCwgMCwgMCwgInN0ZGVyciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZ19oYW5kbGVyX3N0ZG91dGVyciwgMCwgTlVMTCwgIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwgfTsKKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KICAgICBuZXRzbm1wX2xvZ19oYW5kbGVyICpsb2doOwogCiAgICAgLyoKICAgICAgKiBXZSd2ZSBnb3QgdG8gYmUgYWJsZSB0byBsb2cgbWVzc2FnZXMgKnNvbWV3aGVyZSohCiAgICAgICogSWYgeW91IGRvbid0IHdhbnQgc3RkZXJyIGxvZ2dpbmcsIHRoZW4gZW5hYmxlIHNvbWV0aGluZyBlbHNlLgogICAgICAqLwotICAgIGlmICghbG9naF9oZWFkKSB7Ci0gICAgICAgIHNubXBfZW5hYmxlX3N0ZGVycmxvZygpOwotICAgICAgICBzbm1wX2xvZ19zdHJpbmcoTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAgICAiTm8gbG9nIGhhbmRsaW5nIGVuYWJsZWQgLSB0dXJuaW5nIG9uIHN0ZGVyciBsb2dnaW5nXG4iKTsKKyAgICBpZiAoMCA9PSBsb2doX2VuYWJsZWQpIHsKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCisgICAgICAgIGlmICghc3RkZXJyX2VuYWJsZWQpIHsKKyAgICAgICAgICAgICsrc3RkZXJyX2VuYWJsZWQ7CisgICAgICAgICAgICBuZXRzbm1wX3NldF9saW5lX2J1ZmZlcmluZyhzdGRlcnIpOworICAgICAgICB9CisgICAgICAgIGxvZ19oYW5kbGVyX3N0ZG91dGVyciggJmxoLCBwcmlvcml0eSwgc3RyICk7CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPICovCisKKyAgICAgICAgcmV0dXJuOwogICAgIH0KKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX1NURElPCisgICAgZWxzZSBpZiAoc3RkZXJyX2VuYWJsZWQpIHsKKyAgICAgICAgc3RkZXJyX2VuYWJsZWQgPSAwOworICAgICAgICBsb2dfaGFuZGxlcl9zdGRvdXRlcnIoICZsaCwgTE9HX0lORk8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkxvZyBoYW5kbGluZyBkZWZpbmVkIC0gZGlzYWJsaW5nIHN0ZGVyclxuIiApOworICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0xPR0dJTkdfU1RESU8gKi8KKyAgICAgICAgCiAKICAgICAvKgogICAgICAqIFN0YXJ0IGF0IHRoZSBnaXZlbiBwcmlvcml0eSwgYW5kIHdvcmsgInVwd2FyZHMiLi4uLgpAQCAtMTI3NCwyNSArMTQyMCwxMSBAQAogICogQHNlZSBzbm1wX3Zsb2cKICAqLwogaW50Ci0jaWYgSEFWRV9TVERBUkdfSAogc25tcF9sb2coaW50IHByaW9yaXR5LCBjb25zdCBjaGFyICpmb3JtYXQsIC4uLikKLSNlbHNlCi1zbm1wX2xvZyh2YV9hbGlzdCkKLSAgICAgdmFfZGNsCi0jZW5kaWYKIHsKICAgICB2YV9saXN0ICAgICAgICAgYXA7CiAgICAgaW50ICAgICAgICAgICAgIHJldDsKLSNpZiBIQVZFX1NUREFSR19ICiAgICAgdmFfc3RhcnQoYXAsIGZvcm1hdCk7Ci0jZWxzZQotICAgIGludCAgICAgICAgICAgICBwcmlvcml0eTsKLSAgICBjb25zdCBjaGFyICAgICAqZm9ybWF0OwotICAgIHZhX3N0YXJ0KGFwKTsKLQotICAgIHByaW9yaXR5ID0gdmFfYXJnKGFwLCBpbnQpOwotICAgIGZvcm1hdCA9IHZhX2FyZyhhcCwgY29uc3QgY2hhciAqKTsKLSNlbmRpZgogICAgIHJldCA9IHNubXBfdmxvZyhwcmlvcml0eSwgZm9ybWF0LCBhcCk7CiAgICAgdmFfZW5kKGFwKTsKICAgICByZXR1cm4gKHJldCk7CkBAIC0xMzE4LDExICsxNDUwLDEzIEBACiAgICAgfQogfQogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTE9HR0lOR19FWFRFUk5BTAogLyogZXh0ZXJuYWwgYWNjZXNzIHRvIGxvZ2hfaGVhZCB2YXJpYWJsZSAqLwogbmV0c25tcF9sb2dfaGFuZGxlciAgKgogZ2V0X2xvZ2hfaGVhZCh2b2lkKQogewogCXJldHVybiBsb2doX2hlYWQ7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9MT0dHSU5HX0VYVEVSTkFMICovCiAKIC8qKiAgQH0gKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9vcGVuc3NsLmMgYi9zbm1wbGliL3NubXBfb3BlbnNzbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiMGVhYTgKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3NubXBfb3BlbnNzbC5jCkBAIC0wLDAgKzEsODc5IEBACisvKgorICogc25tcF9vcGVuc3NsLmMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKworI2lmIGRlZmluZWQoTkVUU05NUF9VU0VfT1BFTlNTTCkgJiYgZGVmaW5lZChIQVZFX0xJQlNTTCkgJiYgIWRlZmluZWQoTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9DRVJUX1VUSUwpCisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNvbnRhaW5lcl9mcmVlX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG9wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWVzLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihvcGVuc3NsX2h0Mm5pZCwgbmV0c25tcF91bnVzZWQpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yob3BlbnNzbF9lcnJfbG9nLCBuZXRzbm1wX3VudXNlZCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjZXJ0X2R1bXBfbmFtZXMsIG5ldHNubXBfdW51c2VkKQorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKworI2luY2x1ZGUgPG9wZW5zc2wvZXZwLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDkuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorI2luY2x1ZGUgPG9wZW5zc2wvZXJyLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9vYmplY3RzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmg+CisKK3N0YXRpYyB1X2NoYXIgaGF2ZV9zdGFydGVkX2FscmVhZHkgPSAwOworCisvKgorICogVGhpcyBjb2RlIG1lcmVseSBkb2VzIG9wZW5zc2wgaW5pdGlhbGl6YXRpb24gc28gdGhhdCBtdWx0aWxwZQorICogbW9kdWxlcyBhcmUgc2FmZSB0byBjYWxsIG5ldHNubXBfaW5pdF9vcGVuc3NsKCkgZm9yIGJvb3RzdHJhcHBpbmcKKyAqIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQgb3RoZXIgY2FsbGVycyB0aGF0IG1heSBoYXZlIGFscmVhZHkgZG9uZSBzby4KKyAqLwordm9pZCBuZXRzbm1wX2luaXRfb3BlbnNzbCh2b2lkKSB7CisKKyAgICAvKiBhdm9pZCBkdXBsaWNhdGUgY2FsbHMgKi8KKyAgICBpZiAoaGF2ZV9zdGFydGVkX2FscmVhZHkpCisgICAgICAgIHJldHVybjsKKyAgICBoYXZlX3N0YXJ0ZWRfYWxyZWFkeSA9IDE7CisKKyAgICBERUJVR01TR1RMKCgic25tcF9vcGVuc3NsIiwgImluaXRpYWxpemluZ1xuIikpOworCisgICAgLyogSW5pdGlhbGl6aW5nIE9wZW5TU0wgKi8KKyAgICBTU0xfbGlicmFyeV9pbml0KCk7CisgICAgU1NMX2xvYWRfZXJyb3Jfc3RyaW5ncygpOworICAgIEVSUl9sb2FkX0JJT19zdHJpbmdzKCk7CisgICAgT3BlblNTTF9hZGRfYWxsX2FsZ29yaXRobXMoKTsKK30KKworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9uYW1lOiBnZXQgc3ViamVjdCBuYW1lIGZpZWxkIGZyb20gY2VydAorICogQGludGVybmFsCisgKi8KKy8qKiBpbnN0ZWFkIG9mIGV4cG9zaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaAorICogZmllbGQsIGxpa2UgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2NvbW1vbk5hbWUsIGJlbG93ICovCitzdGF0aWMgY2hhciAqCitfY2VydF9nZXRfbmFtZShYNTA5ICpvY2VydCwgaW50IHdoaWNoLCBjaGFyICoqYnVmLCBpbnQgKmxlbiwgaW50IGZsYWdzKQoreworICAgIFg1MDlfTkFNRSAgICAgICAqb3N1YmpfbmFtZTsKKyAgICBpbnQgICAgICAgICAgICAgIHNwYWNlOworICAgIGNoYXIgICAgICAgICAgICAqYnVmX3B0cjsKKworICAgIGlmICgoTlVMTCA9PSBvY2VydCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb3N1YmpfbmFtZSA9IFg1MDlfZ2V0X3N1YmplY3RfbmFtZShvY2VydCk7CisgICAgaWYgKE5VTEwgPT0gb3N1YmpfbmFtZSkgeworICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOmNlcnQ6bmFtZSIsICJubyBzdWJqZWN0IG5hbWUhXG4iKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qKiBzZWUgaWYgYnVmIGlzIGJpZyBlbm91Z2gsIG9yIGFsbG9jYXRlIGJ1ZiBpZiBub25lIHNwZWNpZmllZCAqLworICAgIHNwYWNlID0gWDUwOV9OQU1FX2dldF90ZXh0X2J5X05JRChvc3Vial9uYW1lLCB3aGljaCwgTlVMTCwgMCk7CisgICAgaWYgKC0xID09IHNwYWNlKQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICArK3NwYWNlOyAvKiBmb3IgTlVMICovCisgICAgaWYgKGJ1ZiAmJiAqYnVmKSB7CisgICAgICAgIGlmICgqbGVuIDwgc3BhY2UpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgYnVmX3B0ciA9ICpidWY7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBidWZfcHRyID0gY2FsbG9jKDEsc3BhY2UpOworICAgICAgICBpZiAoIWJ1Zl9wdHIpCisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgc3BhY2UgPSBYNTA5X05BTUVfZ2V0X3RleHRfYnlfTklEKG9zdWJqX25hbWUsIHdoaWNoLCBidWZfcHRyLCBzcGFjZSk7CisgICAgaWYgKGxlbikKKyAgICAgICAgKmxlbiA9IHNwYWNlOworCisgICAgcmV0dXJuIGJ1Zl9wdHI7Cit9CisKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdE5hbWU6IGdldCBzdWJqZWN0IG5hbWUgZmllbGQgZnJvbSBjZXJ0CisgKi8KK2NoYXIgKgorbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3ROYW1lKFg1MDkgKm9jZXJ0LCBjaGFyICoqYnVmLCBpbnQgKmxlbikKK3sKKyAgICBYNTA5X05BTUUgICAgICAgKm9zdWJqX25hbWU7CisgICAgaW50ICAgICAgICAgICAgICBzcGFjZTsKKyAgICBjaGFyICAgICAgICAgICAgKmJ1Zl9wdHI7CisKKyAgICBpZiAoKE5VTEwgPT0gb2NlcnQpIHx8ICgoYnVmICYmICFsZW4pIHx8IChsZW4gJiYgIWJ1ZikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG9zdWJqX25hbWUgPSBYNTA5X2dldF9zdWJqZWN0X25hbWUob2NlcnQpOworICAgIGlmIChOVUxMID09IG9zdWJqX25hbWUpIHsKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpjZXJ0Om5hbWUiLCAibm8gc3ViamVjdCBuYW1lIVxuIikpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoYnVmKSB7CisgICAgICAgIGJ1Zl9wdHIgPSAqYnVmOworICAgICAgICBzcGFjZSA9ICpsZW47CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBidWZfcHRyID0gTlVMTDsKKyAgICAgICAgc3BhY2UgPSAwOworICAgIH0KKyAgICBidWZfcHRyID0gWDUwOV9OQU1FX29uZWxpbmUob3N1YmpfbmFtZSwgYnVmX3B0ciwgc3BhY2UpOworICAgIGlmIChsZW4pCisgICAgICAgICpsZW4gPSBzdHJsZW4oYnVmX3B0cik7CisKKyAgICByZXR1cm4gYnVmX3B0cjsKK30KKworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lOiBnZXQgY29tbW9uTmFtZSBmb3IgY2VydC4KKyAqIGlmIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBhbmQgaXRzIGxlbmd0aCBhcmUgc3BlY2lmaWVkLCB0aGV5IHdpbGwgYmUKKyAqIHVzZWQuIG90aGVyd2lzZSwgYSBuZXcgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkLCB3aGljaCB0aGUgY2FsbGVyIHdpbGwKKyAqIGJlIHJlc3BvbnNiaWxlIGZvciByZWxlYXNpbmcuCisgKi8KK2NoYXIgKgorbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2NvbW1vbk5hbWUoWDUwOSAqb2NlcnQsIGNoYXIgKipidWYsIGludCAqbGVuKQoreworICAgIHJldHVybiBfY2VydF9nZXRfbmFtZShvY2VydCwgTklEX2NvbW1vbk5hbWUsIGJ1ZiwgbGVuLCAwKTsKK30KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfRFVNUF9OQU1FUworLyoqIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfbmFtZTogZHVtcCBzdWJqZWN0IG5hbWVzIGluIGNlcnQKKyAqLwordm9pZAorbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9uYW1lcyhYNTA5ICpvY2VydCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgIGksIG9uaWQ7CisgICAgWDUwOV9OQU1FX0VOVFJZICpvbmFtZV9lbnRyeTsKKyAgICBYNTA5X05BTUUgICAgICAgKm9zdWJqX25hbWU7CisgICAgY29uc3QgY2hhciAgICAgICpwcmVmaXhfc2hvcnQsICpwcmVmaXhfbG9uZzsKKworICAgIGlmIChOVUxMID09IG9jZXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBvc3Vial9uYW1lID0gWDUwOV9nZXRfc3ViamVjdF9uYW1lKG9jZXJ0KTsKKyAgICBpZiAoTlVMTCA9PSBvc3Vial9uYW1lKSB7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wOm5hbWVzIiwgIm5vIHN1YmplY3QgbmFtZSFcbiIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZvciAoaSA9IDA7IGkgPCBYNTA5X05BTUVfZW50cnlfY291bnQob3N1YmpfbmFtZSk7IGkrKykgeworICAgICAgICBvbmFtZV9lbnRyeSA9IFg1MDlfTkFNRV9nZXRfZW50cnkob3N1YmpfbmFtZSwgaSk7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KE5VTEwgIT0gb25hbWVfZW50cnkpOworCisgICAgICAgIGlmIChvbmFtZV9lbnRyeS0+dmFsdWUtPnR5cGUgIT0gVl9BU04xX1BSSU5UQUJMRVNUUklORykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIC8qKiBnZXQgTklEICovCisgICAgICAgIG9uaWQgPSBPQkpfb2JqMm5pZChvbmFtZV9lbnRyeS0+b2JqZWN0KTsKKyAgICAgICAgaWYgKG9uaWQgPT0gTklEX3VuZGVmKSB7CisgICAgICAgICAgICBwcmVmaXhfbG9uZyA9IHByZWZpeF9zaG9ydCA9ICJVTktOT1dOIjsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHByZWZpeF9sb25nID0gT0JKX25pZDJsbihvbmlkKTsKKyAgICAgICAgICAgIHByZWZpeF9zaG9ydCA9IE9CSl9uaWQyc24ob25pZCk7CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcDpuYW1lcyIsCisgICAgICAgICAgICAgICAgICAgIlslMDJkXSBOSUQgdHlwZSAlZCwgQVNOIHR5cGUgJWRcbiIsIGksIG9uaWQsCisgICAgICAgICAgICAgICAgICAgb25hbWVfZW50cnktPnZhbHVlLT50eXBlKSk7CisgICAgICAgIERFQlVHTVNHVCgoIjk6Y2VydDpkdW1wOm5hbWVzIiwgIiVzLyVzOiAnJXMnXG4iLCBwcmVmaXhfbG9uZywKKyAgICAgICAgICAgICAgICAgICBwcmVmaXhfc2hvcnQsIEFTTjFfU1RSSU5HX2RhdGEob25hbWVfZW50cnktPnZhbHVlKSkpOworICAgIH0KK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NFUlRfRFVNUF9OQU1FUyAqLworCitzdGF0aWMgY2hhciAqCitfY2VydF9nZXRfZXh0ZW5zaW9uKFg1MDlfRVhURU5TSU9OICAqb2V4dCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4sIGludCBmbGFncykKK3sKKyAgICBpbnQgICAgICAgICAgICAgIHNwYWNlOworICAgIGNoYXIgICAgICAgICAgICAqYnVmX3B0ciA9IE5VTEw7CisgICAgdV9jaGFyICAgICAgICAgICpkYXRhOworICAgIEJJTyAgICAgICAgICAgICAqYmlvOworICAgIAorICAgIGlmICgoTlVMTCA9PSBvZXh0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoTlVMTCA9PSBiaW8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImNvdWxkIG5vdCBnZXQgYmlvIGZvciBleHRlbnNpb25cbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgaWYgKFg1MDlWM19FWFRfcHJpbnQoYmlvLCBvZXh0LCAwLCAwKSAhPSAxKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjb3VsZCBub3QgcHJpbnQgZXh0ZW5zaW9uIVxuIik7CisgICAgICAgIEJJT192ZnJlZShiaW8pOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzcGFjZSA9IEJJT19nZXRfbWVtX2RhdGEoYmlvLCAmZGF0YSk7CisgICAgaWYgKGJ1ZiAmJiAqYnVmKSB7CisgICAgICAgIGlmICgqbGVuIDwgc3BhY2UpIAorICAgICAgICAgICAgYnVmX3B0ciA9IE5VTEw7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGJ1Zl9wdHIgPSAqYnVmOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIGJ1Zl9wdHIgPSBjYWxsb2MoMSxzcGFjZSArIDEpOworICAgIAorICAgIGlmICghYnVmX3B0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAibm90IGVub3VnaCBzcGFjZSBvciBlcnJvciBpbiBhbGxvY2F0aW9uIGZvciBleHRlbnN0aW9uXG4iKTsKKyAgICAgICAgQklPX3ZmcmVlKGJpbyk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1jcHkoYnVmX3B0ciwgZGF0YSwgc3BhY2UpOworICAgIGJ1Zl9wdHJbc3BhY2VdID0gMDsKKyAgICBpZiAobGVuKQorICAgICAgICAqbGVuID0gc3BhY2U7CisKKyAgICBCSU9fdmZyZWUoYmlvKTsKKworICAgIHJldHVybiBidWZfcHRyOworfQorCisvKiogbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2V4dGVuc2lvbjogZ2V0IGV4dGVuc2lvbiBmaWVsZCBmcm9tIGNlcnQKKyAqIEBpbnRlcm5hbAorICovCisvKiogaW5zdGVhZCBvZiBleHBvc2luZyB0aGlzIGZ1bmN0aW9uLCBtYWtlIGhlbHBlciBmdW5jdGlvbnMgZm9yIGVhY2gKKyAqIGZpZWxkLCBsaWtlIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9zdWJqZWN0QWx0TmFtZSwgYmVsb3cgKi8KK1g1MDlfRVhURU5TSU9OICAqCitfY2VydF9nZXRfZXh0ZW5zaW9uX2F0KFg1MDkgKm9jZXJ0LCBpbnQgcG9zLCBjaGFyICoqYnVmLCBpbnQgKmxlbiwgaW50IGZsYWdzKQoreworICAgIFg1MDlfRVhURU5TSU9OICAqb2V4dDsKKworICAgIGlmICgoTlVMTCA9PSBvY2VydCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb2V4dCA9IFg1MDlfZ2V0X2V4dChvY2VydCxwb3MpOworICAgIGlmIChOVUxMID09IG9leHQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImV4dGVuc2lvbiBudW1iZXIgJWQgbm90IGZvdW5kIVxuIiwgcG9zKTsKKyAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zKG9jZXJ0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIG9leHQ7Cit9CisKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZXh0ZW5zaW9uOiBnZXQgZXh0ZW5zaW9uIGZpZWxkIGZyb20gY2VydAorICogQGludGVybmFsCisgKi8KKy8qKiBpbnN0ZWFkIG9mIGV4cG9zaW5nIHRoaXMgZnVuY3Rpb24sIG1ha2UgaGVscGVyIGZ1bmN0aW9ucyBmb3IgZWFjaAorICogZmllbGQsIGxpa2UgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lLCBiZWxvdyAqLworc3RhdGljIGNoYXIgKgorX2NlcnRfZ2V0X2V4dGVuc2lvbl9zdHJfYXQoWDUwOSAqb2NlcnQsIGludCBwb3MsIGNoYXIgKipidWYsIGludCAqbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQoreworICAgIFg1MDlfRVhURU5TSU9OICAqb2V4dDsKKworICAgIGlmICgoTlVMTCA9PSBvY2VydCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgb2V4dCA9IFg1MDlfZ2V0X2V4dChvY2VydCxwb3MpOworICAgIGlmIChOVUxMID09IG9leHQpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImV4dGVuc2lvbiBudW1iZXIgJWQgbm90IGZvdW5kIVxuIiwgcG9zKTsKKyAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zKG9jZXJ0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIF9jZXJ0X2dldF9leHRlbnNpb24ob2V4dCwgYnVmLCBsZW4sIGZsYWdzKTsKK30KKworLyoqIF9jZXJ0X2dldF9leHRlbnNpb25faWQ6IGdldCBleHRlbnNpb24gZmllbGQgZnJvbSBjZXJ0CisgKiBAaW50ZXJuYWwKKyAqLworLyoqIGluc3RlYWQgb2YgZXhwb3NpbmcgdGhpcyBmdW5jdGlvbiwgbWFrZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoCisgKiBmaWVsZCwgbGlrZSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWUsIGJlbG93ICovCitYNTA5X0VYVEVOU0lPTiAqCitfY2VydF9nZXRfZXh0ZW5zaW9uX2lkKFg1MDkgKm9jZXJ0LCBpbnQgd2hpY2gsIGNoYXIgKipidWYsIGludCAqbGVuLCBpbnQgZmxhZ3MpCit7CisgICAgaW50IHBvczsKKworICAgIGlmICgoTlVMTCA9PSBvY2VydCkgfHwgKChidWYgJiYgIWxlbikgfHwgKGxlbiAmJiAhYnVmKSkpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcG9zID0gWDUwOV9nZXRfZXh0X2J5X05JRChvY2VydCx3aGljaCwtMSk7CisgICAgaWYgKHBvcyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpjZXJ0Om5hbWUiLCAibm8gZXh0ZW5zaW9uICVkXG4iLCB3aGljaCkpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gX2NlcnRfZ2V0X2V4dGVuc2lvbl9hdChvY2VydCwgcG9zLCBidWYsIGxlbiwgZmxhZ3MpOworfQorCisvKiogX2NlcnRfZ2V0X2V4dGVuc2lvbl9pZF9zdHI6IGdldCBleHRlbnNpb24gZmllbGQgZnJvbSBjZXJ0CisgKiBAaW50ZXJuYWwKKyAqLworLyoqIGluc3RlYWQgb2YgZXhwb3NpbmcgdGhpcyBmdW5jdGlvbiwgbWFrZSBoZWxwZXIgZnVuY3Rpb25zIGZvciBlYWNoCisgKiBmaWVsZCwgbGlrZSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWUsIGJlbG93ICovCitzdGF0aWMgY2hhciAqCitfY2VydF9nZXRfZXh0ZW5zaW9uX2lkX3N0cihYNTA5ICpvY2VydCwgaW50IHdoaWNoLCBjaGFyICoqYnVmLCBpbnQgKmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBmbGFncykKK3sKKyAgICBpbnQgcG9zOworCisgICAgaWYgKChOVUxMID09IG9jZXJ0KSB8fCAoKGJ1ZiAmJiAhbGVuKSB8fCAobGVuICYmICFidWYpKSkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwb3MgPSBYNTA5X2dldF9leHRfYnlfTklEKG9jZXJ0LHdoaWNoLC0xKTsKKyAgICBpZiAocG9zIDwgMCkgeworICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOmNlcnQ6bmFtZSIsICJubyBleHRlbnNpb24gJWRcbiIsIHdoaWNoKSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJldHVybiBfY2VydF9nZXRfZXh0ZW5zaW9uX3N0cl9hdChvY2VydCwgcG9zLCBidWYsIGxlbiwgZmxhZ3MpOworfQorCitzdGF0aWMgY2hhciAqCitfZXh0cmFjdF9vbmFtZShjb25zdCBHRU5FUkFMX05BTUUgKm9uYW1lKQoreworICAgIGNoYXIgIGlwYnVmWzYwXSwgKmJ1ZiA9IE5VTEwsICpydG4gPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gb25hbWUpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgc3dpdGNoICggb25hbWUtPnR5cGUgKSB7CisgICAgICAgIGNhc2UgR0VOX0VNQUlMOgorICAgICAgICBjYXNlIEdFTl9ETlM6CisgICAgICAgICAgICAvKmNhc2UgR0VOX1VSSToqLworICAgICAgICAgICAgQVNOMV9TVFJJTkdfdG9fVVRGOCgodW5zaWduZWQgY2hhcioqKSZidWYsIG9uYW1lLT5kLmlhNSk7CisgICAgICAgICAgICBpZiAoYnVmKQorICAgICAgICAgICAgICAgIHJ0biA9IHN0cmR1cChidWYpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBHRU5fSVBBREQ6CisgICAgICAgICAgICBpZiAob25hbWUtPmQuaVBBZGRyZXNzLT5sZW5ndGggPT0gNCkgeworICAgICAgICAgICAgICAgIHNwcmludGYoaXBidWYsICIlZC4lZC4lZC4lZCIsIG9uYW1lLT5kLmlQQWRkcmVzcy0+ZGF0YVswXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uYW1lLT5kLmlQQWRkcmVzcy0+ZGF0YVsxXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uYW1lLT5kLmlQQWRkcmVzcy0+ZGF0YVsyXSwKKyAgICAgICAgICAgICAgICAgICAgICAgIG9uYW1lLT5kLmlQQWRkcmVzcy0+ZGF0YVszXSk7CisgICAgICAgICAgICAgICAgcnRuID0gc3RyZHVwKGlwYnVmKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKChvbmFtZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9PSAxNikgfHwKKyAgICAgICAgICAgICAgICAgICAgIChvbmFtZS0+ZC5pUEFkZHJlc3MtPmxlbmd0aCA9PSAyMCkpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpwb3MgPSBpcGJ1ZjsKKyAgICAgICAgICAgICAgICBpbnQgICBqOworICAgICAgICAgICAgICAgIGZvcihqID0gMDsgaiA8IG9uYW1lLT5kLmlQQWRkcmVzcy0+bGVuZ3RoOyArK2opIHsKKyAgICAgICAgICAgICAgICAgICAgKnBvcysrID0gVkFMMkhFWChvbmFtZS0+ZC5pUEFkZHJlc3MtPmRhdGFbal0pOworICAgICAgICAgICAgICAgICAgICAqcG9zKysgPSAnOic7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICpwb3MgPSAnXDAnOworICAgICAgICAgICAgICAgIHJ0biA9IHN0cmR1cChpcGJ1Zik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfV0FSTklORywgInVuZXhwZWN0ZWQgaXAgYWRkciBsZW5ndGggJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9uYW1lLT5kLmlQQWRkcmVzcy0+bGVuZ3RoKSk7CisKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpjZXJ0OnNhbiIsICJ1bmtub3duL3Vuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIG9uYW1lLT50eXBlKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgREVCVUdNU0dUKCgiOTpvcGVuc3NsOmNlcnQ6c2FuIiwgInNhbj0lc1xuIiwgYnVmKSk7CisgICAgaWYgKGJ1ZikKKyAgICAgICAgT1BFTlNTTF9mcmVlKGJ1Zik7CisKKyAgICByZXR1cm4gcnRuOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT1BFTlNTTF9DRVJUX0dFVF9TVUJKRUNUQUxUTkFNRVMKKy8qKiBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfc3ViamVjdEFsdE5hbWU6IGdldCBzdWJqZWN0QWx0TmFtZSBmb3IgY2VydC4KKyAqIGlmIGEgcG9pbnRlciB0byBhIGJ1ZmZlciBhbmQgaXRzIGxlbmd0aCBhcmUgc3BlY2lmaWVkLCB0aGV5IHdpbGwgYmUKKyAqIHVzZWQuIG90aGVyd2lzZSwgYSBuZXcgYnVmZmVyIHdpbGwgYmUgYWxsb2NhdGVkLCB3aGljaCB0aGUgY2FsbGVyIHdpbGwKKyAqIGJlIHJlc3BvbnNiaWxlIGZvciByZWxlYXNpbmcuCisgKi8KK2NoYXIgKgorbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X3N1YmplY3RBbHROYW1lcyhYNTA5ICpvY2VydCwgY2hhciAqKmJ1ZiwgaW50ICpsZW4pCit7CisgICAgcmV0dXJuIF9jZXJ0X2dldF9leHRlbnNpb25faWRfc3RyKG9jZXJ0LCBOSURfc3ViamVjdF9hbHRfbmFtZSwgYnVmLCBsZW4sIDApOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT1BFTlNTTF9DRVJUX0dFVF9TVUJKRUNUQUxUTkFNRVMgKi8KKwordm9pZAorbmV0c25tcF9vcGVuc3NsX2NlcnRfZHVtcF9leHRlbnNpb25zKFg1MDkgKm9jZXJ0KQoreworICAgIFg1MDlfRVhURU5TSU9OICAqZXh0ZW5zaW9uOworICAgIGNvbnN0IGNoYXIgICAgICAqZXh0ZW5zaW9uX25hbWU7CisgICAgY2hhciAgICAgICAgICAgICBidWZbU05NUF9NQVhCVUZfU01BTExdLCAqYnVmX3B0ciA9IGJ1ZiwgKnN0ciwgKmxmOworICAgIGludCAgICAgICAgICAgICAgaSwgbnVtX2V4dGVuc2lvbnMsIGJ1Zl9sZW4sIG5pZDsKKworICAgIGlmIChOVUxMID09IG9jZXJ0KQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR0lGKCI5OmNlcnQ6ZHVtcCIpIAorICAgICAgICA7CisgICAgZWxzZQorICAgICAgICByZXR1cm47IC8qIGJhaWwgaWYgZGVidWcgbm90IGVuYWJsZWQgKi8KKworICAgIG51bV9leHRlbnNpb25zID0gWDUwOV9nZXRfZXh0X2NvdW50KG9jZXJ0KTsKKyAgICBpZiAoMCA9PSBudW1fZXh0ZW5zaW9ucykKKyAgICAgICAgREVCVUdNU0dUKCgiOTpjZXJ0OmR1bXAiLCAiICAgIDAgZXh0ZW5zaW9uc1xuIikpOworICAgIGZvcihpID0gMDsgaSA8IG51bV9leHRlbnNpb25zOyBpKyspIHsKKyAgICAgICAgZXh0ZW5zaW9uID0gWDUwOV9nZXRfZXh0KG9jZXJ0LCBpKTsKKyAgICAgICAgbmlkID0gT0JKX29iajJuaWQoWDUwOV9FWFRFTlNJT05fZ2V0X29iamVjdChleHRlbnNpb24pKTsKKyAgICAgICAgZXh0ZW5zaW9uX25hbWUgPSBPQkpfbmlkMnNuKG5pZCk7CisgICAgICAgIGJ1Zl9sZW4gPSBzaXplb2YoYnVmKTsKKyAgICAgICAgc3RyID0gX2NlcnRfZ2V0X2V4dGVuc2lvbl9zdHJfYXQob2NlcnQsIGksICZidWZfcHRyLCAmYnVmX2xlbiwgMCk7CisgICAgICAgIGxmID0gc3RyY2hyKHN0ciwgJ1xuJyk7IC8qIGxvb2sgZm9yIG11bHRpbGluZSBzdHJpbmdzICovCisgICAgICAgIGlmIChOVUxMICE9IGxmKQorICAgICAgICAgICAgKmxmID0gJ1wwJzsgLyogb25seSBsb2cgZmlyc3QgbGluZSBvZiBtdWx0aWxpbmUgaGVyZSAqLworICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICAgJTJkOiAlcyA9ICVzXG4iLCBpLAorICAgICAgICAgICAgICAgICAgIGV4dGVuc2lvbl9uYW1lLCBzdHIpKTsKKyAgICAgICAgd2hpbGUobGYpIHsgLyogbG9nIHJlbWFpbmluZyBwYXJ0cyBvZiBtdWx0aWxpbmUgc3RyaW5nICovCisgICAgICAgICAgICBzdHIgPSArK2xmOworICAgICAgICAgICAgaWYgKCpzdHIgPT0gJ1wwJykKKyAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbGYgPSBzdHJjaHIoc3RyLCAnXG4nKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IGxmKSAKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICpsZiA9ICdcMCc7CisgICAgICAgICAgICBERUJVR01TR1QoKCI5OmNlcnQ6ZHVtcCIsICIgICAgICAgICVzXG4iLCBzdHIpKTsKKyAgICAgICAgfQorICAgIH0KK30KKworc3RhdGljIGludCBfaHRtYXBbTlNfSEFTSF9NQVggKyAxXSA9IHsKKyAgICAwLCBOSURfbWQ1V2l0aFJTQUVuY3J5cHRpb24sIE5JRF9zaGExV2l0aFJTQUVuY3J5cHRpb24sCisgICAgTklEX3NoYTIyNFdpdGhSU0FFbmNyeXB0aW9uLCBOSURfc2hhMjU2V2l0aFJTQUVuY3J5cHRpb24sCisgICAgTklEX3NoYTM4NFdpdGhSU0FFbmNyeXB0aW9uLCBOSURfc2hhNTEyV2l0aFJTQUVuY3J5cHRpb24gfTsKKworaW50CitfbmlkMmh0KGludCBuaWQpCit7CisgICAgaW50IGk7CisgICAgZm9yIChpPTE7IGk8PSBOU19IQVNIX01BWDsgKytpKSB7CisgICAgICAgIGlmIChuaWQgPT0gX2h0bWFwW2ldKQorICAgICAgICAgICAgcmV0dXJuIGk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfT1BFTlNTTF9IVDJOSUQKK2ludAorX2h0Mm5pZChpbnQgaHQpCit7CisgICAgaWYgKChodCA8IDApIHx8IChodCA+IE5TX0hBU0hfTUFYKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIF9odG1hcFtodF07Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PUEVOU1NMX0hUMk5JRCAqLworCisvKioKKyAqIHJldHVybnMgYWxsb2NhdGVkIHBvaW50ZXIgY2FsbGVyIG11c3QgZnJlZS4KKyAqLworaW50CituZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfaGFzaF90eXBlKFg1MDkgKm9jZXJ0KQoreworICAgIGlmIChOVUxMID09IG9jZXJ0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBfbmlkMmh0KE9CSl9vYmoybmlkKG9jZXJ0LT5zaWdfYWxnLT5hbGdvcml0aG0pKTsKK30KKworLyoqCisgKiByZXR1cm5zIGFsbG9jYXRlZCBwb2ludGVyIGNhbGxlciBtdXN0IGZyZWUuCisgKi8KK2NoYXIgKgorbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KFg1MDkgKm9jZXJ0LCBpbnQgYWxnKQoreworICAgIHVfY2hhciAgICAgICAgICAgZmluZ2VycHJpbnRbRVZQX01BWF9NRF9TSVpFXTsKKyAgICB1X2ludCAgICAgICAgICAgIGZpbmdlcnByaW50X2xlbiwgbmlkOworICAgIGNvbnN0IEVWUF9NRCAgICAqZGlnZXN0OworICAgIGNoYXIgICAgICAgICAgICAqcmVzdWx0ID0gTlVMTDsKKworICAgIGlmIChOVUxMID09IG9jZXJ0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG5pZCA9IE9CSl9vYmoybmlkKG9jZXJ0LT5zaWdfYWxnLT5hbGdvcml0aG0pOworICAgIERFQlVHTVNHVCgoIjk6b3BlbnNzbDpmaW5nZXJwcmludCIsICJhbGcgJWQsIGNlcnQgbmlkICVkICglZClcbiIsIGFsZywgbmlkLAorICAgICAgICAgICAgICAgX25pZDJodChuaWQpKSk7CisgICAgICAgIAorICAgIGlmICgoLTEgPT0gYWxnKSAmJiBuaWQpCisgICAgICAgIGFsZyA9IF9uaWQyaHQobmlkKTsKKworICAgIHN3aXRjaCAoYWxnKSB7CisgICAgICAgIGNhc2UgTlNfSEFTSF9NRDU6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaGFzaCB0eXBlIG1kNSBub3QgeWV0IHN1cHBvcnRlZFxuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAKKyAgICAgICAgY2FzZSBOU19IQVNIX05PTkU6CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaGFzaCB0eXBlIG5vbmUgbm90IHN1cHBvcnRlZC4gdXNpbmcgU0hBMVxuIik7CisgICAgICAgICAgICAvKiogZmFsbCB0aHJvdWdoICovCisKKyAgICAgICAgY2FzZSBOU19IQVNIX1NIQTE6CisgICAgICAgICAgICBkaWdlc3QgPSBFVlBfc2hhMSgpOworICAgICAgICAgICAgYnJlYWs7CisKKyNpZmRlZiBIQVZFX0VWUF9TSEEyMjQKKyAgICAgICAgY2FzZSBOU19IQVNIX1NIQTIyNDoKKyAgICAgICAgICAgIGRpZ2VzdCA9IEVWUF9zaGEyMjQoKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTlNfSEFTSF9TSEEyNTY6CisgICAgICAgICAgICBkaWdlc3QgPSBFVlBfc2hhMjU2KCk7CisgICAgICAgICAgICBicmVhazsKKworI2VuZGlmCisjaWZkZWYgSEFWRV9FVlBfU0hBMzg0CisgICAgICAgIGNhc2UgTlNfSEFTSF9TSEEzODQ6CisgICAgICAgICAgICBkaWdlc3QgPSBFVlBfc2hhMzg0KCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIE5TX0hBU0hfU0hBNTEyOgorICAgICAgICAgICAgZGlnZXN0ID0gRVZQX3NoYTUxMigpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInVua25vd24gaGFzaCBhbGdvcml0aG0gJWRcbiIsIGFsZyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoX25pZDJodChuaWQpICE9IGFsZykgeworICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOmZpbmdlcnByaW50IiwKKyAgICAgICAgICAgICAgICAgICAiV0FSTklORzogYWxnICVkIGRvZXMgbm90IG1hdGNoIGNlcnQgYWxnICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGFsZywgX25pZDJodChuaWQpKSk7CisgICAgfQorICAgIGlmIChYNTA5X2RpZ2VzdChvY2VydCxkaWdlc3QsZmluZ2VycHJpbnQsJmZpbmdlcnByaW50X2xlbikpIHsKKyAgICAgICAgYmluYXJ5X3RvX2hleChmaW5nZXJwcmludCwgZmluZ2VycHJpbnRfbGVuLCAmcmVzdWx0KTsKKyAgICAgICAgaWYgKE5VTEwgPT0gcmVzdWx0KQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImZhaWxlZCB0byBoZXhpZnkgZmluZ2VycHJpbnRcbiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBERUJVR01TR1QoKCI5Om9wZW5zc2w6ZmluZ2VycHJpbnQiLCAiZmluZ2VycHJpbnQgJXNcbiIsIHJlc3VsdCkpOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsImZhaWxlZCB0byBjb21wdXRlIGZpbmdlcnByaW50XG4iKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8qKgorICogZ2V0IGNvbnRhaW5lciBvZiBuZXRzbm1wX2NlcnRfbWFwIHN0cnVjdHVyZXMgZnJvbSBhbiBzc2wgY29ubmVjdGlvbgorICogY2VydGlmaWNhdGUgY2hhaW4uCisgKi8KK25ldHNubXBfY29udGFpbmVyICoKK25ldHNubXBfb3BlbnNzbF9nZXRfY2VydF9jaGFpbihTU0wgKnNzbCkKK3sKKyAgICBYNTA5ICAgICAgICAgICAgICAgICAgKm9jZXJ0LCAqb2NlcnRfdG1wOworICAgIFNUQUNLX09GKFg1MDkpICAgICAgICAqb2NoYWluOworICAgIGNoYXIgICAgICAgICAgICAgICAgICAqZmluZ2VycHJpbnQ7CisgICAgbmV0c25tcF9jb250YWluZXIgICAgICpjaGFpbl9tYXA7CisgICAgbmV0c25tcF9jZXJ0X21hcCAgICAgICpjZXJ0X21hcDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICAgIGk7CisKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oc3NsICE9IE5VTEwsIE5VTEwpOworICAgIAorICAgIGlmIChOVUxMID09IChvY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSkgeworICAgICAgICAvKiogbm8gcGVlciBjZXJ0ICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTU0wgcGVlciBoYXMgbm8gY2VydGlmaWNhdGVcbiIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgREVCVUdJRigiOTpjZXJ0OmR1bXAiKSB7CisgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2R1bXBfZXh0ZW5zaW9ucyhvY2VydCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBnZXQgZmluZ2VycHJpbnQgYW5kIHNhdmUgaXQKKyAgICAgKi8KKyAgICBmaW5nZXJwcmludCA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChvY2VydCwgLTEpOworICAgIGlmIChOVUxMID09IGZpbmdlcnByaW50KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qCisgICAgICogYWxsb2NhdGUgY2VydCBtYXAuIERvbid0IHBhc3MgaW4gZmluZ2VycHJpbnQsIHNpbmNlIGl0IHdvdWxkIHN0cmR1cAorICAgICAqIGl0IGFuZCB3ZSd2ZSBhbHJlYWR5IGdvdCBhIGNvcHkuCisgICAgICovCisgICAgY2VydF9tYXAgPSBuZXRzbm1wX2NlcnRfbWFwX2FsbG9jKE5VTEwsIG9jZXJ0KTsKKyAgICBpZiAoTlVMTCA9PSBjZXJ0X21hcCkgeworICAgICAgICBmcmVlKGZpbmdlcnByaW50KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIGNlcnRfbWFwLT5maW5nZXJwcmludCA9IGZpbmdlcnByaW50OworICAgIGNlcnRfbWFwLT5oYXNoVHlwZSA9IG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9oYXNoX3R5cGUob2NlcnQpOworCisgICAgY2hhaW5fbWFwID0gbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfY3JlYXRlKDApOyAvKiBubyBmcCBzdWJjb250YWluZXIgKi8KKyAgICBpZiAoTlVMTCA9PSBjaGFpbl9tYXApIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9mcmVlKGNlcnRfbWFwKTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIAorICAgIENPTlRBSU5FUl9JTlNFUlQoY2hhaW5fbWFwLCBjZXJ0X21hcCk7CisKKyAgICAvKiogY2hlY2sgZm9yIGEgY2hhaW4gdG8gYSBDQSAqLworICAgIG9jaGFpbiA9IFNTTF9nZXRfcGVlcl9jZXJ0X2NoYWluKHNzbCk7CisgICAgaWYgKChOVUxMID09IG9jaGFpbikgfHwgKDAgPT0gc2tfbnVtKChjb25zdCB2b2lkICopb2NoYWluKSkpIHsKKyAgICAgICAgREVCVUdNU0dUKCgic3NsOmNlcnQ6Y2hhaW4iLCAicGVlciBoYXMgbm8gY2VydCBjaGFpblxuIikpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbG9vcCBvdmVyIGNoYWluLCBhZGRpbmcgZmluZ2VycHJpbnQgLyBjZXJ0IGZvciBlYWNoCisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1QoKCJzc2w6Y2VydDpjaGFpbiIsICJleGFtaW5pbmcgY2VydCBjaGFpblxuIikpOworICAgICAgICBmb3IoaSA9IDA7IGkgPCBza19udW0oKGNvbnN0IHZvaWQgKilvY2hhaW4pOyArK2kpIHsKKyAgICAgICAgICAgIG9jZXJ0X3RtcCA9IChYNTA5Kilza192YWx1ZSgoY29uc3Qgdm9pZCAqKW9jaGFpbixpKTsKKyAgICAgICAgICAgIGZpbmdlcnByaW50ID0gbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KG9jZXJ0X3RtcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TX0hBU0hfU0hBMSk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBmaW5nZXJwcmludCkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNlcnRfbWFwID0gbmV0c25tcF9jZXJ0X21hcF9hbGxvYyhOVUxMLCBvY2VydCk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBjZXJ0X21hcCkgeworICAgICAgICAgICAgICAgIGZyZWUoZmluZ2VycHJpbnQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2VydF9tYXAtPmZpbmdlcnByaW50ID0gZmluZ2VycHJpbnQ7CisgICAgICAgICAgICBjZXJ0X21hcC0+aGFzaFR5cGUgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfaGFzaF90eXBlKG9jZXJ0X3RtcCk7CisKKyAgICAgICAgICAgIENPTlRBSU5FUl9JTlNFUlQoY2hhaW5fbWFwLCBjZXJ0X21hcCk7CisgICAgICAgIH0gLyogY2hhaW4gbG9vcCAqLworICAgICAgICAvKgorICAgICAgICAgKiBpZiB3ZSBicm9rZSBvdXQgb2YgbG9vcCBiZWZvcmUgZmluaXNoaW5nLCBjbGVhbiB1cAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGkgPCBza19udW0oKGNvbnN0IHZvaWQgKilvY2hhaW4pKSAKKyAgICAgICAgICAgIENPTlRBSU5FUl9GUkVFX0FMTChjaGFpbl9tYXAsIE5VTEwpOworICAgIH0gLyogZ290IHBlZXIgY2hhaW4gKi8KKworICAgIERFQlVHTVNHVCgoInNzbDpjZXJ0OmNoYWluIiwgImZvdW5kICUiIE5FVFNOTVBfUFJJeiAidSBjZXJ0cyBpbiBjaGFpblxuIiwKKyAgICAgICAgICAgICAgIENPTlRBSU5FUl9TSVpFKGNoYWluX21hcCkpKTsKKyAgICBpZiAoQ09OVEFJTkVSX1NJWkUoY2hhaW5fbWFwKSA9PSAwKSB7CisgICAgICAgIENPTlRBSU5FUl9GUkVFKGNoYWluX21hcCk7CisgICAgICAgIGNoYWluX21hcCA9IE5VTEw7CisgICAgfQorCisgICAgcmV0dXJuIGNoYWluX21hcDsKK30KKworLyoKK3Rsc3RtQ2VydFNBTlJGQzgyMk5hbWUgIk1hcHMgYSBzdWJqZWN0QWx0TmFtZSdzIHJmYzgyMk5hbWUgdG8gYQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUuICBUaGUgbG9jYWwgcGFydCBvZiB0aGUgcmZjODIyTmFtZSBpcworICAgICAgICAgICAgICAgICAgcGFzc2VkIHVuYWx0ZXJlZCBidXQgdGhlIGhvc3QtcGFydCBvZiB0aGUgbmFtZSBtdXN0CisgICAgICAgICAgICAgICAgICBiZSBwYXNzZWQgaW4gbG93ZXIgY2FzZS4KKyAgICAgICAgICAgICAgICAgIEV4YW1wbGUgcmZjODIyTmFtZSBGaWVsZDogIEZvb0JhckBFeGFtcGxlLkNPTQorICAgICAgICAgICAgICAgICAgaXMgbWFwcGVkIHRvIHRtU2VjdXJpdHlOYW1lOiBGb29CYXJAZXhhbXBsZS5jb20iCisKK3Rsc3RtQ2VydFNBTkROU05hbWUgIk1hcHMgYSBzdWJqZWN0QWx0TmFtZSdzIGROU05hbWUgdG8gYQorICAgICAgICAgICAgICAgICAgdG1TZWN1cml0eU5hbWUgYWZ0ZXIgZmlyc3QgY29udmVydGluZyBpdCB0byBhbGwKKyAgICAgICAgICAgICAgICAgIGxvd2VyIGNhc2UuIgorCit0bHN0bUNlcnRTQU5JcEFkZHJlc3MgIk1hcHMgYSBzdWJqZWN0QWx0TmFtZSdzIGlQQWRkcmVzcyB0byBhCisgICAgICAgICAgICAgICAgICB0bVNlY3VyaXR5TmFtZSBieSB0cmFuc2Zvcm1pbmcgdGhlIGJpbmFyeSBlbmNvZGVkCisgICAgICAgICAgICAgICAgICBhZGRyZXNzIGFzIGZvbGxvd3M6CisgICAgICAgICAgICAgICAgICAxKSBmb3IgSVB2NCB0aGUgdmFsdWUgaXMgY29udmVydGVkIGludG8gYSBkZWNpbWFsCisgICAgICAgICAgICAgICAgICAgICBkb3R0ZWQgcXVhZCBhZGRyZXNzIChlLmcuICcxOTIuMC4yLjEnKQorICAgICAgICAgICAgICAgICAgMikgZm9yIElQdjYgYWRkcmVzc2VzIHRoZSB2YWx1ZSBpcyBjb252ZXJ0ZWQgaW50byBhCisgICAgICAgICAgICAgICAgICAgICAzMi1jaGFyYWN0ZXIgYWxsIGxvd2VyY2FzZSBoZXhhZGVjaW1hbCBzdHJpbmcKKyAgICAgICAgICAgICAgICAgICAgIHdpdGhvdXQgYW55IGNvbG9uIHNlcGFyYXRvcnMuCisKKyAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgcmVzdWx0aW5nIGxlbmd0aCBpcyB0aGUgbWF4aW11bQorICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIHN1cHBvcnRlZCBieSB0aGUgVmlldy1CYXNlZCBBY2Nlc3MgQ29udHJvbAorICAgICAgICAgICAgICAgICAgICAgTW9kZWwgKFZBQ00pLiAgTm90ZSB0aGF0IHVzaW5nIGJvdGggdGhlIFRyYW5zcG9ydAorICAgICAgICAgICAgICAgICAgICAgU2VjdXJpdHkgTW9kZWwncyBzdXBwb3J0IGZvciB0cmFuc3BvcnQgcHJlZml4ZXMKKyAgICAgICAgICAgICAgICAgICAgIChzZWUgdGhlIFNOTVAtVFNNLU1JQidzCisgICAgICAgICAgICAgICAgICAgICBzbm1wVHNtQ29uZmlndXJhdGlvblVzZVByZWZpeCBvYmplY3QgZm9yIGRldGFpbHMpCisgICAgICAgICAgICAgICAgICAgICB3aWxsIHJlc3VsdCBpbiBzZWN1cml0eU5hbWUgbGVuZ3RocyB0aGF0IGV4Y2VlZAorICAgICAgICAgICAgICAgICAgICAgd2hhdCBWQUNNIGNhbiBoYW5kbGUuIgorCit0bHN0bUNlcnRTQU5BbnkgIk1hcHMgYW55IG9mIHRoZSBmb2xsb3dpbmcgZmllbGRzIHVzaW5nIHRoZQorICAgICAgICAgICAgICAgICAgY29ycmVzcG9uZGluZyBtYXBwaW5nIGFsZ29yaXRobXM6CisgICAgICAgICAgICAgICAgICB8IHJmYzgyMk5hbWUgfCB0bHN0bUNlcnRTQU5SRkM4MjJOYW1lIHwKKyAgICAgICAgICAgICAgICAgIHwgZE5TTmFtZSAgICB8IHRsc3RtQ2VydFNBTkROU05hbWUgICAgfAorICAgICAgICAgICAgICAgICAgfCBpUEFkZHJlc3MgIHwgdGxzdG1DZXJ0U0FOSXBBZGRyZXNzICB8CisgICAgICAgICAgICAgICAgICBUaGUgZmlyc3QgbWF0Y2hpbmcgc3ViamVjdEFsdE5hbWUgdmFsdWUgZm91bmQgaW4gdGhlCisgICAgICAgICAgICAgICAgICBjZXJ0aWZpY2F0ZSBvZiB0aGUgYWJvdmUgdHlwZXMgTVVTVCBiZSB1c2VkIHdoZW4KKyAgICAgICAgICAgICAgICAgIGRlcml2aW5nIHRoZSB0bVNlY3VyaXR5TmFtZS4iCisqLworY2hhciAqCitfY2VydF9nZXRfc2FuX3R5cGUoWDUwOSAqb2NlcnQsIGludCBtYXBUeXBlKQoreworICAgIEdFTkVSQUxfTkFNRVMgICAgICAqb25hbWVzOworICAgIGNvbnN0IEdFTkVSQUxfTkFNRSAqb25hbWUgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICAgICAqYnVmID0gTlVMTCwgKmxvd2VyID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgICAgIGNvdW50LCBpOworIAorICAgIG9uYW1lcyA9IChHRU5FUkFMX05BTUVTICopWDUwOV9nZXRfZXh0X2QyaShvY2VydCwgTklEX3N1YmplY3RfYWx0X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwgKTsKKyAgICBpZiAoTlVMTCA9PSBvbmFtZXMpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgY291bnQgPSBza19HRU5FUkFMX05BTUVfbnVtKG9uYW1lcyk7CisKKyAgICBmb3IgKGk9MCA7IGkgPGNvdW50OyArK2kpICB7CisgICAgICAgIG9uYW1lID0gc2tfR0VORVJBTF9OQU1FX3ZhbHVlKG9uYW1lcywgaSk7CisKKyAgICAgICAgaWYgKEdFTl9ETlMgPT0gb25hbWUtPnR5cGUpIHsKKyAgICAgICAgICAgIGlmICgoVFNOTV90bHN0bUNlcnRTQU5ETlNOYW1lID09IG1hcFR5cGUpIHx8CisgICAgICAgICAgICAgICAgKFRTTk1fdGxzdG1DZXJ0U0FOQW55ID09IG1hcFR5cGUpKSB7CisgICAgICAgICAgICAgICAgbG93ZXIgPSBidWYgPSBfZXh0cmFjdF9vbmFtZSggb25hbWUgKTs7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSBpZiAoR0VOX0lQQUREID09IG9uYW1lLT50eXBlKSB7CisgICAgICAgICAgICBpZiAoKFRTTk1fdGxzdG1DZXJ0U0FOSXBBZGRyZXNzID09IG1hcFR5cGUpIHx8CisgICAgICAgICAgICAgICAgKFRTTk1fdGxzdG1DZXJ0U0FOQW55ID09IG1hcFR5cGUpKQorICAgICAgICAgICAgICAgIGJ1ZiA9IF9leHRyYWN0X29uYW1lKG9uYW1lKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChHRU5fRU1BSUwgPT0gb25hbWUtPnR5cGUpIHsKKyAgICAgICAgICAgIGlmICgoVFNOTV90bHN0bUNlcnRTQU5SRkM4MjJOYW1lID09IG1hcFR5cGUpIHx8CisgICAgICAgICAgICAgICAgKFRTTk1fdGxzdG1DZXJ0U0FOQW55ID09IG1hcFR5cGUpKSB7CisgICAgICAgICAgICAgICAgYnVmID0gX2V4dHJhY3Rfb25hbWUob25hbWUpOworICAgICAgICAgICAgICAgIGxvd2VyID0gc3RyY2hyKGJ1ZiwgJ0AnKTsKKyAgICAgICAgICAgICAgICBpZiAoTlVMTCA9PSBsb3dlcikgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImVtYWlsICVzIGhhcyBubyAnQCchXG4iLCBidWYpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICsrbG93ZXI7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgfSAvKiBmb3IgbG9vcCAqLworCisgICAgaWYgKGxvd2VyKQorICAgICAgICBmb3IgKCA7ICpsb3dlcjsgKytsb3dlciApCisgICAgICAgICAgICBpZiAoaXNhc2NpaSgqbG93ZXIpKQorICAgICAgICAgICAgICAgICpsb3dlciA9IHRvbG93ZXIoMHhGRiAmICpsb3dlcik7CisgICAgREVCVUdNU0dUKCgib3BlbnNzbDpjZXJ0OmV4dGVuc2lvbjpzYW4iLCAiIyVkIHR5cGUgJWQ6ICVzXG4iLCBpLAorICAgICAgICAgICAgICAgb25hbWUgPyBvbmFtZS0+dHlwZSA6IC0xLCBidWYgPyBidWYgOiAiTlVMTCIpKTsKKworICAgIHJldHVybiBidWY7Cit9CisKK2NoYXIgKgorbmV0c25tcF9vcGVuc3NsX2V4dHJhY3Rfc2VjbmFtZShuZXRzbm1wX2NlcnRfbWFwICpjZXJ0X21hcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jZXJ0X21hcCAqcGVlcl9jZXJ0KQoreworICAgIGNoYXIgICAgICAgKnJ0biA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBjZXJ0X21hcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsCisgICAgICAgICAgICAgICAiY2hlY2tpbmcgcHJpb3JpdHkgJWQsIHNhbiBvZiB0eXBlICVkIGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgIGNlcnRfbWFwLT5wcmlvcml0eSwgY2VydF9tYXAtPm1hcFR5cGUsIHBlZXJfY2VydC0+ZmluZ2VycHJpbnQpKTsKKworICAgIHN3aXRjaChjZXJ0X21hcC0+bWFwVHlwZSkgeworICAgICAgICBjYXNlIFRTTk1fdGxzdG1DZXJ0U3BlY2lmaWVkOgorICAgICAgICAgICAgcnRuID0gc3RyZHVwKGNlcnRfbWFwLT5kYXRhKTsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgVFNOTV90bHN0bUNlcnRTQU5SRkM4MjJOYW1lOgorICAgICAgICBjYXNlIFRTTk1fdGxzdG1DZXJ0U0FORE5TTmFtZToKKyAgICAgICAgY2FzZSBUU05NX3Rsc3RtQ2VydFNBTklwQWRkcmVzczoKKyAgICAgICAgY2FzZSBUU05NX3Rsc3RtQ2VydFNBTkFueToKKyAgICAgICAgICAgIGlmIChOVUxMID09IHBlZXJfY2VydCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoIm9wZW5zc2w6c2VjbmFtZTpleHRyYWN0IiwgIm5vIHBlZXIgY2VydCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0X21hcC0+ZmluZ2VycHJpbnQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJ0biA9IF9jZXJ0X2dldF9zYW5fdHlwZShwZWVyX2NlcnQtPm9jZXJ0LCBjZXJ0X21hcC0+bWFwVHlwZSk7CisgICAgICAgICAgICBpZiAoTlVMTCA9PSBydG4pIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1QoKCJvcGVuc3NsOnNlY25hbWU6ZXh0cmFjdCIsICJubyBzYW4gZm9yICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcGVlcl9jZXJ0LT5maW5nZXJwcmludCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBUU05NX3Rsc3RtQ2VydENvbW1vbk5hbWU6CisgICAgICAgICAgICBydG4gPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfY29tbW9uTmFtZShjZXJ0X21hcC0+b2NlcnQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJjYW50IGV4dHJhY3Qgc2VjbmFtZSBmb3IgdW5rbm93biBtYXAgdHlwZSAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgIGNlcnRfbWFwLT5tYXBUeXBlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0gLyogc3dpdGNoIG1hcFR5cGUgKi8KKworICAgIGlmIChydG4pIHsKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLAorICAgICAgICAgICAgICAgICAgICJmb3VuZCBtYXAgJWQsIHR5cGUgJWQgZm9yICVzOiAlc1xuIiwgY2VydF9tYXAtPnByaW9yaXR5LAorICAgICAgICAgICAgICAgICAgIGNlcnRfbWFwLT5tYXBUeXBlLCBwZWVyX2NlcnQtPmZpbmdlcnByaW50LCBydG4pKTsKKyAgICAgICAgaWYgKHN0cmxlbihydG4pID4zMikgeworICAgICAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLAorICAgICAgICAgICAgICAgICAgICAgICAic2VjTmFtZSBsb25nZXIgdGhhbiAzMiBjaGFycyEgZHJvcHBpbmcuLi5cbiIpKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShydG4pOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgREVCVUdNU0dUKCgib3BlbnNzbDpzZWNuYW1lOmV4dHJhY3QiLAorICAgICAgICAgICAgICAgICAgICJubyBtYXAgb2YgdHlwZSAlZCBmb3IgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgY2VydF9tYXAtPm1hcFR5cGUsIHBlZXJfY2VydC0+ZmluZ2VycHJpbnQpKTsKKyAgICByZXR1cm4gcnRuOworfQorCitpbnQKK25ldHNubXBfb3BlbnNzbF9jZXJ0X2lzc3VlZF9ieShYNTA5ICppc3N1ZXIsIFg1MDkgKmNlcnQpCit7CisgICAgcmV0dXJuIChYNTA5X2NoZWNrX2lzc3VlZChpc3N1ZXIsIGNlcnQpID09IFg1MDlfVl9PSyk7Cit9CisKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX09QRU5TU0xfRVJSX0xPRwordm9pZAorbmV0c25tcF9vcGVuc3NsX2Vycl9sb2coY29uc3QgY2hhciAqcHJlZml4KQoreworICAgIHVuc2lnbmVkIGxvbmcgZXJyOworICAgIGZvciAoZXJyID0gRVJSX2dldF9lcnJvcigpOyBlcnI7IGVyciA9IEVSUl9nZXRfZXJyb3IoKSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCIlczogJWxkXG4iLCBwcmVmaXggPyBwcmVmaXg6ICJvcGVuc3NsIGVycm9yIiwgZXJyKTsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImxpYnJhcnk9JWQsIGZ1bmN0aW9uPSVkLCByZWFzb249JWRcbiIsCisgICAgICAgICAgICAgICAgIEVSUl9HRVRfTElCKGVyciksIEVSUl9HRVRfRlVOQyhlcnIpLCBFUlJfR0VUX1JFQVNPTihlcnIpKTsKKyAgICB9Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9PUEVOU1NMX0VSUl9MT0cgKi8KKwordm9pZAorbmV0c25tcF9vcGVuc3NsX251bGxfY2hlY2tzKFNTTCAqc3NsLCBpbnQgKm51bGxfYXV0aCwgaW50ICpudWxsX2NpcGhlcikKK3sKKyAgICBjb25zdCBTU0xfQ0lQSEVSICpjaXBoZXI7CisgICAgY2hhciAgICAgICAgICAgdG1wX2J1ZlsxMjhdLCAqY2lwaGVyX2FsZywgKmF1dGhfYWxnOworCisgICAgaWYgKG51bGxfYXV0aCkKKyAgICAgICAgKm51bGxfYXV0aCA9IC0xOyAvKiB1bmtub3duICovCisgICAgaWYgKG51bGxfY2lwaGVyKQorICAgICAgICAqbnVsbF9jaXBoZXIgPSAtMTsgLyogdW5rbm93biAqLworICAgIGlmIChOVUxMID09IHNzbCkKKyAgICAgICAgcmV0dXJuOworCisgICAgY2lwaGVyID0gU1NMX2dldF9jdXJyZW50X2NpcGhlcihzc2wpOworICAgIGlmIChOVUxMID09IGNpcGhlcikgeworICAgICAgICBERUJVR01TR1RMKCgic3NsOmNpcGhlciIsICJubyBjaXBoZXIgeWV0XG4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU1NMX0NJUEhFUl9kZXNjcmlwdGlvbihORVRTTk1QX1JFTU9WRV9DT05TVChTU0xfQ0lQSEVSICosIGNpcGhlciksIHRtcF9idWYsIHNpemVvZih0bXBfYnVmKSk7CisgICAgLyoqIG5vIFxuIHNpbmNlIHRtcF9idWYgYWxyZWFkeSBoYXMgb25lICovCisgICAgREVCVUdNU0dUTCgoInNzbDpjaXBoZXIiLCAiY3VycmVudCBjaXBoZXI6ICVzIiwgdG1wX2J1ZikpOworCisgICAgLyoKKyAgICAgKiBydW4gIm9wZW5zc2wgY2lwaGVycyAtdiBlTlVMTCIgYW5kICJvcGVuc3NsIGNpcGhlcnMgLXYgYU5VTEwiCisgICAgICogdG8gc2VlIE5VTEwgZW5jcnlwdGlvbi9hdXRoZW50aWNhdGlvbiBhbGdvcml0aG1zLiBlLmcuCisgICAgICoKKyAgICAgKiBFWFAtQURILVJDNC1NRDUgU1NMdjMgS3g9REgoNTEyKSBBdT1Ob25lIEVuYz1SQzQoNDApIE1hYz1NRDUgIGV4cG9ydAorICAgICAqIE5VTEwtU0hBICAgICAgICBTU0x2MyBLeD1SU0EgICAgIEF1PVJTQSAgRW5jPU5vbmUgICAgTWFjPVNIQTEKKyAgICAgKi8KKyAgICBpZiAobnVsbF9jaXBoZXIpIHsKKyAgICAgICAgY2lwaGVyX2FsZyA9IHN0cnN0cih0bXBfYnVmLCAiRW5jPSIpOworICAgICAgICBpZiAoY2lwaGVyX2FsZykgeworICAgICAgICAgICAgY2lwaGVyX2FsZyArPSA0OworICAgICAgICAgICAgaWYgKHN0cm5jbXAoY2lwaGVyX2FsZywiTm9uZSIsIDQpID09IDApCisgICAgICAgICAgICAgICAgKm51bGxfY2lwaGVyID0gMTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAqbnVsbF9jaXBoZXIgPSAwOworICAgICAgICB9CisgICAgfQorICAgIGlmIChudWxsX2F1dGgpIHsKKyAgICAgICAgYXV0aF9hbGcgPSBzdHJzdHIodG1wX2J1ZiwgIkF1PSIpOworICAgICAgICBpZiAoYXV0aF9hbGcpIHsKKyAgICAgICAgICAgIGF1dGhfYWxnICs9IDM7CisgICAgICAgICAgICBpZiAoc3RybmNtcChhdXRoX2FsZywiTm9uZSIsIDQpID09IDApCisgICAgICAgICAgICAgICAgKm51bGxfYXV0aCA9IDE7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgKm51bGxfYXV0aCA9IDA7CisgICAgICAgIH0KKyAgICB9Cit9CisKKyNlbmRpZiAvKiBORVRTTk1QX1VTRV9PUEVOU1NMICYmIEhBVkVfTElCU1NMICYmICFkZWZpbmVkKE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0VSVF9VVElMKSAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYyBiL3NubXBsaWIvc25tcF9wYXJzZV9hcmdzLmMKaW5kZXggYTAwMzk5NS4uNjg0MmQwZSAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX3BhcnNlX2FyZ3MuYworKysgYi9zbm1wbGliL3NubXBfcGFyc2VfYXJncy5jCkBAIC0zNiwxMSArMzYsNyBAQAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNTIsOSArNDgsNiBAQAogI2lmIEhBVkVfU1lTX1NFTEVDVF9ICiAjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+Ci0jZW5kaWYKICNpZiBIQVZFX05FVERCX0gKICNpbmNsdWRlIDxuZXRkYi5oPgogI2VuZGlmCkBAIC02Miw2ICs1NSw3IEBACiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjZW5kaWYKIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgpAQCAtMTMwLDggKzEyNCwxMCBAQAogICAgICAgICAgICAgIiAgLXQgVElNRU9VVFx0XHRzZXQgdGhlIHJlcXVlc3QgdGltZW91dCAoaW4gc2Vjb25kcylcbiIpOwogICAgIGZwcmludGYob3V0ZiwgIkRlYnVnZ2luZ1xuIik7CiAgICAgZnByaW50ZihvdXRmLCAiICAtZFx0XHRcdGR1bXAgaW5wdXQvb3V0cHV0IHBhY2tldHMgaW4gaGV4YWRlY2ltYWxcbiIpOworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVCVUdHSU5HCiAgICAgZnByaW50ZihvdXRmLAogICAgICAgICAgICAgIiAgLURbVE9LRU5bLC4uLl1dXHR0dXJuIG9uIGRlYnVnZ2luZyBvdXRwdXQgZm9yIHRoZSBzcGVjaWZpZWQgVE9LRU5zXG5cdFx0XHQgICAoQUxMIGdpdmVzIGV4dHJlbWVseSB2ZXJib3NlIGRlYnVnZ2luZyBvdXRwdXQpXG4iKTsKKyNlbmRpZgogICAgIGZwcmludGYob3V0ZiwgIkdlbmVyYWwgb3B0aW9uc1xuIik7CiAgICAgZnByaW50ZihvdXRmLAogICAgICAgICAgICAgIiAgLW0gTUlCWyIgRU5WX1NFUEFSQVRPUiAiLi4uXVx0XHRsb2FkIGdpdmVuIGxpc3Qgb2YgTUlCcyAoQUxMIGxvYWRzIGV2ZXJ5dGhpbmcpXG4iKTsKQEAgLTEzOSw2ICsxMzUsOCBAQAogICAgICAgICAgICAgIiAgLU0gRElSWyIgRU5WX1NFUEFSQVRPUiAiLi4uXVx0XHRsb29rIGluIGdpdmVuIGxpc3Qgb2YgZGlyZWN0b3JpZXMgZm9yIE1JQnNcbiIpOwogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUlCX0xPQURJTkcKICAgICBmcHJpbnRmKG91dGYsCisgICAgICAgICAgICAiICAgIChkZWZhdWx0OiAlcylcbiIsIG5ldHNubXBfZ2V0X21pYl9kaXJlY3RvcnkoKSk7CisgICAgZnByaW50ZihvdXRmLAogICAgICAgICAgICAgIiAgLVAgTUlCT1BUU1x0XHRUb2dnbGUgdmFyaW91cyBkZWZhdWx0cyBjb250cm9sbGluZyBNSUIgcGFyc2luZzpcbiIpOwogICAgIHNubXBfbWliX3RvZ2dsZV9vcHRpb25zX3VzYWdlKCJcdFx0XHQgICIsIG91dGYpOwogI2VuZGlmCkBAIC0xOTIsMzEgKzE5MCwyNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipBcHN6LCBjaGFyICoqWHBzeiwgaW50IGFyZ2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqY29uc3QgKmFyZ3YpOwogCi0vKgotICogVGhpcyBtZXRob2QgZG9lcyB0aGUgcmVhbCB3b3JrIGZvciBzbm1wX3BhcnNlX2FyZ3MuICBJdCB0YWtlcyBhbgotICogZXh0cmEgYXJndW1lbnQsIHByb3h5LCBhbmQgdXNlcyB0aGlzIHRvIGRlY2lkZSBob3cgdG8gaGFuZGxlIHRoZSBsYWNrIG9mCi0gKiBvZiBhIGNvbW11bml0eSBzdHJpbmcuCi0gKi8KIGludAotc25tcF9wYXJzZV9hcmdzKGludCBhcmdjLAotICAgICAgICAgICAgICAgIGNoYXIgKiphcmd2LAotICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIGNvbnN0IGNoYXIgKmxvY2FsT3B0cywKLSAgICAgICAgICAgICAgICB2b2lkICgqcHJvYykgKGludCwgY2hhciAqY29uc3QgKiwgaW50KSkKK25ldHNubXBfcGFyc2VfYXJncyhpbnQgYXJnYywKKyAgICAgICAgICAgICAgICAgICBjaGFyICoqYXJndiwKKyAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3Nlc3Npb24gKiBzZXNzaW9uLCBjb25zdCBjaGFyICpsb2NhbE9wdHMsCisgICAgICAgICAgICAgICAgICAgdm9pZCAoKnByb2MpIChpbnQsIGNoYXIgKmNvbnN0ICosIGludCksCisgICAgICAgICAgICAgICAgICAgaW50IGZsYWdzKQogewogICAgIHN0YXRpYyBjaGFyCSAgICpzZW5zaXRpdmVbNF0gPSB7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwgfTsKLSAgICBpbnQgICAgICAgICAgICAgYXJnLCBzcCA9IDAsIHplcm9fc2Vuc2l0aXZlID0gMSwgdGVzdGNhc2UgPSAwOworICAgIGludCAgICAgICAgICAgICBhcmcsIHNwID0gMCwgdGVzdGNhc2UgPSAwOwogICAgIGNoYXIgICAgICAgICAgICpjcDsKICAgICBjaGFyICAgICAgICAgICAqQXBzeiA9IE5VTEw7CiAgICAgY2hhciAgICAgICAgICAgKlhwc3ogPSBOVUxMOwogICAgIGNoYXIgICAgICAgICAgICpDcHN6ID0gTlVMTDsKICAgICBjaGFyICAgICAgICAgICAgT3B0c1tCVUZfU0laRV07Ci0gICAgaW50ICAgICAgICAgICAgIGxvZ29wdCA9IDA7CisgICAgaW50ICAgICAgICAgICAgIHplcm9fc2Vuc2l0aXZlID0gISggZmxhZ3MgJiBORVRTTk1QX1BBUlNFX0FSR1NfTk9aRVJPICk7CiAKICAgICAvKgogICAgICAqIGluaXRpYWxpemUgc2Vzc2lvbiB0byBkZWZhdWx0IHZhbHVlcyAKICAgICAgKi8KICAgICBzbm1wX3Nlc3NfaW5pdChzZXNzaW9uKTsKLSAgICBzdHJjcHkoT3B0cywgIlk6VmhIbTpNOk86STpQOkQ6ZHY6cjp0OmM6WjplOkU6bjp1Omw6eDpYOmE6QTpwOlQ6LTozOnM6UzpMOiIpOworICAgIHN0cmNweShPcHRzLCAiWTpWaEhtOk06TzpJOlA6RDpkdjpyOnQ6YzpaOmU6RTpuOnU6bDp4Olg6YTpBOnA6VDotOjM6TDoiKTsKICAgICBpZiAobG9jYWxPcHRzKSB7CiAgICAgICAgIGlmIChzdHJsZW4obG9jYWxPcHRzKSArIHN0cmxlbihPcHRzKSA+PSBzaXplb2YoT3B0cykpIHsKICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUb28gbWFueSBsb2NhbE9wdHMgaW4gc25tcF9wYXJzZV9hcmdzKClcbiIpOwpAQCAtMjI1LDE0ICsyMTksNiBAQAogICAgICAgICBzdHJjYXQoT3B0cywgbG9jYWxPcHRzKTsKICAgICB9CiAKLSAgICBpZiAoc3RyY21wKGFyZ3ZbMF0sICJzbm1wZC10cmFwc2VzcyIpID09IDAgfHwKLQlzdHJjbXAoYXJndlswXSwgInNubXBkLXByb3h5IikgICAgPT0gMCkgewotCS8qICBEb24ndCB3b3JyeSBhYm91dCB6ZXJvaW5nIHNlbnNpdGl2ZSBwYXJhbWV0ZXJzIGFzIHRoZXkgYXJlIG5vdAotCSAgICBvbiB0aGUgY29tbWFuZCBsaW5lIGFueXdheSAoY2FsbGVkIGZyb20gaW50ZXJuYWwgY29uZmlnLWxpbmUKLQkgICAgaGFuZGxlcikuICAqLwotCXplcm9fc2Vuc2l0aXZlID0gMDsKLSAgICB9Ci0KICAgICAvKgogICAgICAqIGdldCB0aGUgb3B0aW9ucyAKICAgICAgKi8KQEAgLTI0NywxMSArMjMzLDExIEBACiAgICAgICAgIHN3aXRjaCAoYXJnKSB7CiAgICAgICAgIGNhc2UgJy0nOgogICAgICAgICAgICAgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAiaGVscCIpID09IDApIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJ2ZXJzaW9uIikgPT0gMCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCJORVQtU05NUCB2ZXJzaW9uOiAlc1xuIixuZXRzbm1wX2dldF92ZXJzaW9uKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTIpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVCk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGhhbmRsZV9sb25nX29wdChvcHRhcmcpOwpAQCAtMjU5LDE3ICsyNDUsMTcgQEAKIAogICAgICAgICBjYXNlICdWJzoKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTkVULVNOTVAgdmVyc2lvbjogJXNcbiIsIG5ldHNubXBfZ2V0X3ZlcnNpb24oKSk7Ci0gICAgICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX1NVQ0NFU1NfRVhJVCk7CiAKICAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ0gnOgogICAgICAgICAgICAgaW5pdF9zbm1wKCJzbm1wYXBwIik7CiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkNvbmZpZ3VyYXRpb24gZGlyZWN0aXZlcyB1bmRlcnN0b29kOlxuIik7CiAgICAgICAgICAgICByZWFkX2NvbmZpZ19wcmludF91c2FnZSgiICAiKTsKLSAgICAgICAgICAgIHJldHVybiAoLTIpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfU1VDQ0VTU19FWElUKTsKIAogICAgICAgICBjYXNlICdZJzoKICAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX3JlbWVtYmVyKG9wdGFyZyk7CkBAIC0yOTEsNyArMjc3LDcgQEAKICAgICAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJVbmtub3duIG91dHB1dCBvcHRpb24gcGFzc2VkIHRvIC1POiAlYy5cbiIsIAogCQkJKmNwKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzAwLDcgKzI4Niw3IEBACiAgICAgICAgICAgICBpZiAoY3AgIT0gTlVMTCkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBpbnB1dCBvcHRpb24gcGFzc2VkIHRvIC1JOiAlYy5cbiIsCiAJCQkqY3ApOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0zMTAsMTQgKzI5NiwxOSBAQAogICAgICAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIHBhcnNpbmcgb3B0aW9uIHBhc3NlZCB0byAtUDogJWMuXG4iLCAqY3ApOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmIC8qIE5FVFNOTVBfRElTQUJMRV9NSUJfTE9BRElORyAqLwogCiAgICAgICAgIGNhc2UgJ0QnOgorI2lmZGVmIE5FVFNOTVBfTk9fREVCVUdHSU5HCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkRlYnVnIG5vdCBjb25maWd1cmVkIGluXG4iKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKKyNlbHNlCiAgICAgICAgICAgICBkZWJ1Z19yZWdpc3Rlcl90b2tlbnMob3B0YXJnKTsKICAgICAgICAgICAgIHNubXBfc2V0X2RvX2RlYnVnZ2luZygxKTsKKyNlbmRpZgogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnZCc6CkBAIC0zNDQsMzUgKzMzNSw3MCBAQAogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAogICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgdmVyc2lvbiBzcGVjaWZpZWQgYWZ0ZXIgLXYgZmxhZzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRhcmcpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgJ3AnOgogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJXYXJuaW5nOiAtcCBvcHRpb24gaXMgbm8gbG9uZ2VyIHVzZWQgLSAiKTsKICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAic3BlY2lmeSB0aGUgcmVtb3RlIGhvc3QgYXMgSE9TVDpQT1JUXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAnVCc6Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IC1UIG9wdGlvbiBpcyBubyBsb25nZXIgdXNlZCAtICIpOwotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJzcGVjaWZ5IHRoZSByZW1vdGUgaG9zdCBhcyBUUkFOU1BPUlQ6SE9TVFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gKC0xKTsKLSAgICAgICAgICAgIGJyZWFrOworICAgICAgICB7CisgICAgICAgICAgICBjaGFyIGxlZnRzaWRlW1NOTVBfTUFYQlVGX01FRElVTV0sIHJpZ2h0c2lkZVtTTk1QX01BWEJVRl9NRURJVU1dOworICAgICAgICAgICAgY2hhciAqdG1wY3AsICp0bXBvcHQ7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIGVuc3VyZSB3ZSBoYXZlIGEgcHJvcGVyIGFyZ3VtZW50ICovCisgICAgICAgICAgICB0bXBvcHQgPSBzdHJkdXAob3B0YXJnKTsKKyAgICAgICAgICAgIHRtcGNwID0gc3RyY2hyKHRtcG9wdCwgJz0nKTsKKyAgICAgICAgICAgIGlmICghdG1wY3ApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIi1UIGV4cGVjdHMgYSBOQU1FPVZBTFVFIHBhaXIuXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAqdG1wY3ArKyA9ICdcMCc7CiAKKyAgICAgICAgICAgIC8qIGNyZWF0ZSB0aGUgdHJhbnNwb3J0IGNvbmZpZyBjb250YWluZXIgaWYgdGhpcyBpcyB0aGUgZmlyc3QgKi8KKyAgICAgICAgICAgIGlmICghc2Vzc2lvbi0+dHJhbnNwb3J0X2NvbmZpZ3VyYXRpb24pIHsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QoKTsKKyAgICAgICAgICAgICAgICBzZXNzaW9uLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbiA9CisgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQoInRyYW5zcG9ydF9jb25maWd1cmF0aW9uOmZpZm8iKTsKKyAgICAgICAgICAgICAgICBpZiAoIXNlc3Npb24tPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZmFpbGVkIHRvIGluaXRpYWxpemUgdGhlIHRyYW5zcG9ydCBjb25maWd1cmF0aW9uIGNvbnRhaW5lclxuIik7CisgICAgICAgICAgICAgICAgICAgIGZyZWUodG1wb3B0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHNlc3Npb24tPnRyYW5zcG9ydF9jb25maWd1cmF0aW9uLT5jb21wYXJlID0KKyAgICAgICAgICAgICAgICAgICAgKG5ldHNubXBfY29udGFpbmVyX2NvbXBhcmUqKQorICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWdfY29tcGFyZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogc2V0IHRoZSBjb25maWcgKi8KKyAgICAgICAgICAgIHN0cmxjcHkobGVmdHNpZGUsIHRtcG9wdCwgc2l6ZW9mKGxlZnRzaWRlKSk7CisgICAgICAgICAgICBzdHJsY3B5KHJpZ2h0c2lkZSwgdG1wY3AsIHNpemVvZihyaWdodHNpZGUpKTsKKworICAgICAgICAgICAgQ09OVEFJTkVSX0lOU0VSVChzZXNzaW9uLT50cmFuc3BvcnRfY29uZmlndXJhdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZyhsZWZ0c2lkZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByaWdodHNpZGUpKTsKKyAgICAgICAgICAgIGZyZWUodG1wb3B0KTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlICd0JzoKLSAgICAgICAgICAgIHNlc3Npb24tPnRpbWVvdXQgPSBhdG9pKG9wdGFyZykgKiAxMDAwMDAwTDsKLSAgICAgICAgICAgIGlmIChzZXNzaW9uLT50aW1lb3V0IDwgMCB8fCAhaXNkaWdpdChvcHRhcmdbMF0pKSB7CisgICAgICAgICAgICBzZXNzaW9uLT50aW1lb3V0ID0gKGxvbmcpKGF0b2Yob3B0YXJnKSAqIDEwMDAwMDBMKTsKKyAgICAgICAgICAgIGlmIChzZXNzaW9uLT50aW1lb3V0IDw9IDApIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgdGltZW91dCBpbiBzZWNvbmRzIGFmdGVyIC10IGZsYWcuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdyJzoKICAgICAgICAgICAgIHNlc3Npb24tPnJldHJpZXMgPSBhdG9pKG9wdGFyZyk7Ci0gICAgICAgICAgICBpZiAoc2Vzc2lvbi0+cmV0cmllcyA8IDAgfHwgIWlzZGlnaXQob3B0YXJnWzBdKSkgeworICAgICAgICAgICAgaWYgKHNlc3Npb24tPnJldHJpZXMgPCAwIHx8ICFpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKShvcHRhcmdbMF0pKSkgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBudW1iZXIgb2YgcmV0cmllcyBhZnRlciAtciBmbGFnLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTM4NCw3ICs0MTAsNyBAQAogCQkgICAgc3ArKzsKIAkJfSBlbHNlIHsKIAkJICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtYyBmbGFnLlxuIik7Ci0JCSAgICByZXR1cm4gLTE7CisJCSAgICByZXR1cm4gTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOwogCQl9CiAJICAgIH0gZWxzZSB7CiAJCUNwc3ogPSBvcHRhcmc7CkBAIC0zOTQsMTUgKzQyMCwxNCBAQAogICAgICAgICBjYXNlICczJzoKIAkgICAgLyogIFRPRE86IFRoaXMgbmVlZHMgdG8gemVybyB0aGluZ3MgdG9vLiAgKi8KICAgICAgICAgICAgIGlmIChzbm1wdjNfb3B0aW9ucyhvcHRhcmcsIHNlc3Npb24sICZBcHN6LCAmWHBzeiwgYXJnYywgYXJndikgPCAwKXsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlICdMJzoKICAgICAgICAgICAgIGlmIChzbm1wX2xvZ19vcHRpb25zKG9wdGFyZywgYXJnYywgYXJndikgPCAwKSB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQotCSAgICBsb2dvcHQgPSAxOwogICAgICAgICAgICAgYnJlYWs7CiAKICNkZWZpbmUgU05NUFYzX0NNRF9PUFRJT05TCkBAIC00MTIsNyArNDM3LDcgQEAKICAgICAgICAgICAgIHNlc3Npb24tPmVuZ2luZUJvb3RzID0gc3RydG91bChvcHRhcmcsICZjcCwgMTApOwogICAgICAgICAgICAgaWYgKGVycm5vIHx8IGNwID09IG9wdGFyZykgewogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVlZCBlbmdpbmUgYm9vdHMgdmFsdWUgYWZ0ZXIgLVogZmxhZy5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmICgqY3AgPT0gJywnKSB7CiAgICAgICAgICAgICAgICAgY2hhciAqZW5kcHRyOwpAQCAtNDIwLDcgKzQ0NSw3IEBACiAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+ZW5naW5lVGltZSA9IHN0cnRvdWwoY3AsICZlbmRwdHIsIDEwKTsKICAgICAgICAgICAgICAgICBpZiAoZXJybm8gfHwgY3AgPT0gZW5kcHRyKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiTmVlZCBlbmdpbmUgdGltZSBhZnRlciBcIi1aIGVuZ2luZUJvb3QsXCIuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAvKgpAQCAtNDMwLDExICs0NTUsMTEgQEAKICAgICAgICAgICAgICAgICBzZXNzaW9uLT5lbmdpbmVUaW1lID0gc3RydG91bChhcmd2W29wdGluZF0sICZjcCwgMTApOwogICAgICAgICAgICAgICAgIGlmIChlcnJubyB8fCBjcCA9PSBhcmd2W29wdGluZF0pIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJOZWVkIGVuZ2luZSB0aW1lIGFmdGVyIFwiLVogZW5naW5lQm9vdFwiLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5lZWQgZW5naW5lIHRpbWUgYWZ0ZXIgXCItWiBlbmdpbmVCb290XCIuXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKE5FVFNOTVBfUEFSU0VfQVJHU19FUlJPUl9VU0FHRSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKIApAQCAtNDQ0LDE4ICs0NjksMTggQEAKIAogICAgICAgICAgICAgICAgIGlmIChlYnVmID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJtYWxsb2MgZmFpbHVyZSBwcm9jZXNzaW5nIC1lIGZsYWcuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkKICAgICAgICAgICAgICAgICAgICAgKCZlYnVmLCAmZWJ1Zl9sZW4sICZlb3V0X2xlbiwgMSwgb3B0YXJnKSkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkJhZCBlbmdpbmUgSUQgdmFsdWUgYWZ0ZXIgLWUgZmxhZy5cbiIpOwogICAgICAgICAgICAgICAgICAgICBmcmVlKGVidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoKGVvdXRfbGVuIDwgNSkgfHwgKGVvdXRfbGVuID4gMzIpKSB7CiAgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBlbmdpbmUgSUQgdmFsdWUgYWZ0ZXIgLWUgZmxhZy5cbiIpOwogICAgICAgICAgICAgICAgICAgICBmcmVlKGVidWYpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEID0gZWJ1ZjsKICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID0gZW91dF9sZW47CkBAIC00NjgsMTggKzQ5MywxOCBAQAogCiAgICAgICAgICAgICAgICAgaWYgKGVidWYgPT0gTlVMTCkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLUUgZmxhZy5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmZWJ1ZiwgJmVidWZfbGVuLAogCQkJCQkmZW91dF9sZW4sIDEsIG9wdGFyZykpIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJCYWQgZW5naW5lIElEIHZhbHVlIGFmdGVyIC1FIGZsYWcuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZnJlZShlYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgaWYgKChlb3V0X2xlbiA8IDUpIHx8IChlb3V0X2xlbiA+IDMyKSkgewogICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQgZW5naW5lIElEIHZhbHVlIGFmdGVyIC1FIGZsYWcuXG4iKTsKICAgICAgICAgICAgICAgICAgICAgZnJlZShlYnVmKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+Y29udGV4dEVuZ2luZUlEID0gZWJ1ZjsKICAgICAgICAgICAgICAgICBzZXNzaW9uLT5jb250ZXh0RW5naW5lSURMZW4gPSBlb3V0X2xlbjsKQEAgLTUwMCw3ICs1MjUsNyBAQAogCQkgICAgc3ArKzsKIAkJfSBlbHNlIHsKIAkJICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtdSBmbGFnLlxuIik7Ci0JCSAgICByZXR1cm4gLTE7CisJCSAgICByZXR1cm4gTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOwogCQl9CiAJICAgIH0gZWxzZSB7CiAJCXNlc3Npb24tPnNlY3VyaXR5TmFtZSA9IG9wdGFyZzsKQEAgLTUyNywxMSArNTUyLDEyIEBACiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBzZWN1cml0eSBsZXZlbCBzcGVjaWZpZWQgYWZ0ZXIgLWwgZmxhZzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRhcmcpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgYnJlYWs7CiAKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KICAgICAgICAgY2FzZSAnYSc6CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKICAgICAgICAgICAgIGlmICghc3RyY2FzZWNtcChvcHRhcmcsICJNRDUiKSkgewpAQCAtNTQ2LDcgKzU3Miw3IEBACiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBzcGVjaWZpZWQgYWZ0ZXIgLWEgZmxhZzogJXNcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICBvcHRhcmcpOwotICAgICAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCkBAIC01NzEsNyArNTk3LDcgQEAKICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwKICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBwcml2YWN5IHByb3RvY29sIHNwZWNpZmllZCBhZnRlciAteCBmbGFnOiAlc1xuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGFyZyk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTU4Myw3ICs2MDksNyBAQAogCQkgICAgc3ArKzsKIAkJfSBlbHNlIHsKIAkJICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtQSBmbGFnLlxuIik7Ci0JCSAgICByZXR1cm4gLTE7CisJCSAgICByZXR1cm4gTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOwogCQl9CiAJICAgIH0gZWxzZSB7CiAJCUFwc3ogPSBvcHRhcmc7CkBAIC01OTgsMTYgKzYyNCwxNyBAQAogCQkgICAgc3ArKzsKIAkJfSBlbHNlIHsKIAkJICAgIGZwcmludGYoc3RkZXJyLCAibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtWCBmbGFnLlxuIik7Ci0JCSAgICByZXR1cm4gLTE7CisJCSAgICByZXR1cm4gTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SOwogCQl9CiAJICAgIH0gZWxzZSB7CiAJCVhwc3ogPSBvcHRhcmc7CiAJICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTTk1QVjNfQ01EX09QVElPTlMgKi8KKyNlbmRpZiAvKiBORVRTTk1QX1NFQ01PRF9VU00gKi8KIAogICAgICAgICBjYXNlICc/JzoKLSAgICAgICAgICAgIHJldHVybiAoLTEpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgZGVmYXVsdDoKQEAgLTYxNyw5ICs2NDQsNiBAQAogICAgIH0KICAgICBERUJVR01TR1RMKCgic25tcF9wYXJzZV9hcmdzIiwgImZpbmlzaGVkOiAlZC8lZFxuIiwgb3B0aW5kLCBhcmdjKSk7CiAgICAgCi0gICAgaWYgKCFsb2dvcHQpCi0Jc25tcF9lbmFibGVfc3RkZXJybG9nKCk7Ci0KICAgICAvKgogICAgICAqIHJlYWQgaW4gTUlCIGRhdGFiYXNlIGFuZCBpbml0aWFsaXplIHRoZSBzbm1wIGxpYnJhcnkKICAgICAgKi8KQEAgLTY1OCw3ICs2ODIsNyBAQAogCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJDYW4ndCBkZXRlcm1pbmUgYSB2YWxpZCBTTk1QIHZlcnNpb24gZm9yIHRoZSBzZXNzaW9uXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4oLTIpOworICAgICAgICAgICAgICAgIHJldHVybihORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCkBAIC02NjgsNiArNjkyLDkgQEAKICAgICAgICAgfQogICAgIH0KIAorI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQorICAgIC8qIFhYWDogdGhpcyBzaG91bGQgaWRlYWxseSBiZSBtb3ZlZCB0byBzbm1wdXNtLmMgc29tZWhvdyAqLworCiAgICAgLyoKICAgICAgKiBtYWtlIG1hc3RlciBrZXkgZnJvbSBwYXNzIHBocmFzZXMgCiAgICAgICovCkBAIC03MDYsNyArNzMzLDcgQEAKICAgICAgICAgICAgIHNubXBfcGVycm9yKGFyZ3ZbMF0pOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICJFcnJvciBnZW5lcmF0aW5nIGEga2V5IChLdSkgZnJvbSB0aGUgc3VwcGxpZWQgYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UuIFxuIik7Ci0gICAgICAgICAgICByZXR1cm4gKC0yKTsKKyAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SKTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAoWHBzeikgewpAQCAtNzQ1LDE1ICs3NzIsMTcgQEAKICAgICAgICAgICAgIHNubXBfcGVycm9yKGFyZ3ZbMF0pOwogICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsCiAgICAgICAgICAgICAgICAgICAgICJFcnJvciBnZW5lcmF0aW5nIGEga2V5IChLdSkgZnJvbSB0aGUgc3VwcGxpZWQgcHJpdmFjeSBwYXNzIHBocmFzZS4gXG4iKTsKLSAgICAgICAgICAgIHJldHVybiAoLTIpOworICAgICAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1IpOwogICAgICAgICB9CiAgICAgfQorI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLworCiAgICAgLyoKICAgICAgKiBnZXQgdGhlIGhvc3RuYW1lIAogICAgICAqLwogICAgIGlmIChvcHRpbmQgPT0gYXJnYykgewogICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIk5vIGhvc3RuYW1lIHNwZWNpZmllZC5cbiIpOwotICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgcmV0dXJuIChORVRTTk1QX1BBUlNFX0FSR1NfRVJST1JfVVNBR0UpOwogICAgIH0KICAgICBzZXNzaW9uLT5wZWVybmFtZSA9IGFyZ3Zbb3B0aW5kKytdOyAvKiBob3N0bmFtZSAqLwogCkBAIC03ODcsNyArODE2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+Y29tbXVuaXR5X2xlbiA9IDA7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJObyBjb21tdW5pdHkgbmFtZSBzcGVjaWZpZWQuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoTkVUU05NUF9QQVJTRV9BUkdTX0VSUk9SX1VTQUdFKTsKICAgICAgICAgICAgICAgICB9CiAJICAgIH0KIAl9IGVsc2UgewpAQCAtNzk5LDMgKzgyOCwxMiBAQAogCiAgICAgcmV0dXJuIG9wdGluZDsKIH0KKworaW50Citzbm1wX3BhcnNlX2FyZ3MoaW50IGFyZ2MsCisgICAgICAgICAgICAgICAgY2hhciAqKmFyZ3YsCisgICAgICAgICAgICAgICAgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgY29uc3QgY2hhciAqbG9jYWxPcHRzLAorICAgICAgICAgICAgICAgIHZvaWQgKCpwcm9jKSAoaW50LCBjaGFyICpjb25zdCAqLCBpbnQpKQoreworICAgIHJldHVybiBuZXRzbm1wX3BhcnNlX2FyZ3MoYXJnYywgYXJndiwgc2Vzc2lvbiwgbG9jYWxPcHRzLCBwcm9jLCAwKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF9zZWNtb2QuYyBiL3NubXBsaWIvc25tcF9zZWNtb2QuYwppbmRleCBhZWZlOGY2Li45ZTYwYTQyIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfc2VjbW9kLmMKKysrIGIvc25tcGxpYi9zbm1wX3NlY21vZC5jCkBAIC0zMCw3ICszMCw5IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2VudW0uaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oPgotI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiBzdGF0aWMgc3RydWN0IHNubXBfc2VjbW9kX2xpc3QgKnJlZ2lzdGVyZWRfc2VydmljZXMgPSBOVUxMOwogCkBAIC01MSw2ICs1MywxMSBAQAogI2luY2x1ZGUgInNubXBzbV9pbml0LmgiCiB9CiAKK3ZvaWQKK3NodXRkb3duX3NlY21vZCh2b2lkKQoreworICAgICNpbmNsdWRlICJzbm1wc21fc2h1dGRvd24uaCIKK30KIAogaW50CiByZWdpc3Rlcl9zZWNfbW9kKGludCBzZWNtb2QsIGNvbnN0IGNoYXIgKm1vZG5hbWUsCkBAIC05OSw2ICsxMDYsOCBAQAogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CiB9CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1bnJlZ2lzdGVyX3NlY19tb2QsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfU0VDX01PRAogaW50CiB1bnJlZ2lzdGVyX3NlY19tb2QoaW50IHNlY21vZCkKIHsKQEAgLTEyMSw2ICsxMzAsNyBAQAogICAgICAqLwogICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VOUkVHSVNURVJfU0VDX01PRCAqLwogCiB2b2lkICAgICAgICAgICAgCiBjbGVhcl9zZWNfbW9kKHZvaWQpCkBAIC0xNTMsNiArMTYzLDE5IEBACiAgICAgcmV0dXJuIE5VTEw7CiB9CiAKKy8qIHRyeSB0byBwaWNrIGEgcmVhc29uYWJsZSBzZWN1cml0eSBtb2R1bGUgZGVmYXVsdCBiYXNlZCBvbiB3aGF0IHdhcworICAgY29tcGlsZWQgaW50byB0aGUgbmV0LXNubXAgcGFja2FnZSAqLworI2lmZGVmIFVTTV9TRUNfTU9ERUxfTlVNQkVSCisjZGVmaW5lIE5FVFNOTVBfU0VDTU9EX0RFRkFVTFRfTU9ERUwgIFVTTV9TRUNfTU9ERUxfTlVNQkVSCisjZWxpZiBkZWZpbmVkKFRTTV9TRUNfTU9ERUxfTlVNQkVSKQorI2RlZmluZSBORVRTTk1QX1NFQ01PRF9ERUZBVUxUX01PREVMICBUU01fU0VDX01PREVMX05VTUJFUgorI2VsaWYgZGVmaW5lZChLU01fU0VDX01PREVMX05VTUJFUikKKyNkZWZpbmUgTkVUU05NUF9TRUNNT0RfREVGQVVMVF9NT0RFTCAgS1NNX1NFQ19NT0RFTF9OVU1CRVIKKyNlbHNlCisvKiBlbHNlIHdlIGdpdmUgdXAgYW5kIGxlYXZlIGl0IGJsYW5rICovCisjZGVmaW5lIE5FVFNOTVBfU0VDTU9EX0RFRkFVTFRfTU9ERUwgIC0xCisjZW5kaWYKKwogc3RhdGljIGludAogc2V0X2RlZmF1bHRfc2VjbW9kKGludCBtYWpvciwgaW50IG1pbm9yLCB2b2lkICpzZXJ2ZXJhcmcsIHZvaWQgKmNsaWVudGFyZykKIHsKQEAgLTE3MiwxMSArMTk1LDExIEBACiAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKICAgICAgICAgICAgICAgICAgICAgICAgICAidW5rbm93biBzZWN1cml0eSBtb2RlbCBuYW1lOiAlcy4gIEZvcmNpbmcgVVNNIGluc3RlYWQuXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNwdHIpOwotICAgICAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TW9kZWwgPSBVU01fU0VDX01PREVMX05VTUJFUjsKKyAgICAgICAgICAgICAgICBzZXNzLT5zZWN1cml0eU1vZGVsID0gTkVUU05NUF9TRUNNT0RfREVGQVVMVF9NT0RFTDsKICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzZXNzLT5zZWN1cml0eU1vZGVsID0gVVNNX1NFQ19NT0RFTF9OVU1CRVI7CisgICAgICAgICAgICBzZXNzLT5zZWN1cml0eU1vZGVsID0gTkVUU05NUF9TRUNNT0RfREVGQVVMVF9NT0RFTDsKICAgICAgICAgfQogICAgIH0KICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOwpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbm1wX3NlcnZpY2UuYyBiL3NubXBsaWIvc25tcF9zZXJ2aWNlLmMKaW5kZXggMmY1M2I3Ni4uNTRjYjRhYyAxMDA2NDQKLS0tIGEvc25tcGxpYi9zbm1wX3NlcnZpY2UuYworKysgYi9zbm1wbGliL3NubXBfc2VydmljZS5jCkBAIC0xMSw3ICsxMSw3IEBACiB7CiAgICAgY2hhciogaXRlbTsKICAgICBjaGFyKiogcmVzOwotICAgIGNwdHIgPSBjb3B5X253b3JkKE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgY3B0ciksIHRtcCwgdG1wbGVuKTsKKyAgICBjcHRyID0gY29weV9ud29yZF9jb25zdChjcHRyLCB0bXAsIHRtcGxlbik7CiAgICAgaXRlbSA9IHN0cmR1cCh0bXApOwogICAgIGlmIChjcHRyKQogICAgICAgICByZXMgPSBjcmVhdGVfd29yZF9hcnJheV9oZWxwZXIoY3B0ciwgaWR4ICsgMSwgdG1wLCB0bXBsZW4pOwpAQCAtNjgsNyArNjgsNyBAQAogICAgIGlmIChydW4gJiYgc3RyY21wKHJ1bi0+YXBwbGljYXRpb24sIGFwcGxpY2F0aW9uKSA9PSAwKSB7CiAgICAgICBpZiAocnVuLT5kb21haW4gIT0gTlVMTCkgewogICAgICAgICAgIGRlc3Ryb3lfd29yZF9hcnJheShydW4tPmRvbWFpbik7Ci0JICBydW4tPmRvbWFpbj1OVUxMOworCSAgcnVuLT5kb21haW4gPSBOVUxMOwogCSAgcmVzID0gMTsKICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMTIwLDEyICsxMjAsOCBAQAogICAgIHsKICAgICAgICAgY2hhciogY3AgPSBjb3B5X253b3JkKGNwdHIsIGFwcGxpY2F0aW9uLCBsZW4pOwogICAgICAgICBpZiAoY3AgPT0gTlVMTCkgewotICAgICAgICAgICAgY2hhciB0bXBidWZbU1RSSU5HTUFYXTsKLSAgICAgICAgICAgIHNucHJpbnRmKHRtcGJ1Ziwgc2l6ZW9mKHRtcGJ1ZiksCi0gICAgICAgICAgICAgICAgICAgICAiTm8gZG9tYWluKHMpIGluIHJlZ2lzdHJhdGlvbiBvZiBkZWZEb21haW4gXCIlc1wiIiwKLSAgICAgICAgICAgICAgICAgICAgIGFwcGxpY2F0aW9uKTsKLSAgICAgICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKSAtIDFdID0gJ1wwJzsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJObyBkb21haW4ocykgaW4gcmVnaXN0cmF0aW9uIG9mICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZEb21haW4gXCIlc1wiIiwgYXBwbGljYXRpb24pOwogICAgICAgICAgICAgZnJlZShhcHBsaWNhdGlvbik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KQEAgLTMyMCwyMiArMzE2LDE1IEBACiAgICAgewogCWNoYXIqIGNwID0gY29weV9ud29yZChjcHRyLCBhcHBsaWNhdGlvbiwgbGVuKTsKICAgICAgICAgaWYgKGNwID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNoYXIgdG1wYnVmW1NUUklOR01BWF07Ci0gICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgIk5vIGRvbWFpbiBhbmQgdGFyZ2V0IGluIHJlZ2lzdHJhdGlvbiBvZiAiCi0gICAgICAgICAgICAgICAgICAgICAiZGVmVGFyZ2V0IFwiJXNcIiIsIGFwcGxpY2F0aW9uKTsKLSAgICAgICAgICAgIHRtcGJ1ZltzaXplb2YodG1wYnVmKSAtIDFdID0gJ1wwJzsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IodG1wYnVmKTsKKyAgICAgICAgICAgIG5ldHNubXBfY29uZmlnX2Vycm9yKCJObyBkb21haW4gYW5kIHRhcmdldCBpbiByZWdpc3RyYXRpb24gb2YgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlZlRhcmdldCBcIiVzXCIiLCBhcHBsaWNhdGlvbik7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAljcCA9IGNvcHlfbndvcmQoY3AsIGRvbWFpbiwgbGVuKTsKICAgICAgICAgaWYgKGNwID09IE5VTEwpIHsKLSAgICAgICAgICAgIGNoYXIgdG1wYnVmW1NUUklOR01BWF07Ci0gICAgICAgICAgICBzbnByaW50Zih0bXBidWYsIHNpemVvZih0bXBidWYpLAotICAgICAgICAgICAgICAgICAgICAgIk5vIHRhcmdldCBpbiByZWdpc3RyYXRpb24gb2YgZGVmVGFyZ2V0IFwiJXNcIiBcIiVzXCIiLAotICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24sIGRvbWFpbik7Ci0gICAgICAgICAgICB0bXBidWZbc2l6ZW9mKHRtcGJ1ZikgLSAxXSA9ICdcMCc7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKHRtcGJ1Zik7CisgICAgICAgICAgICBuZXRzbm1wX2NvbmZpZ19lcnJvcigiTm8gdGFyZ2V0IGluIHJlZ2lzdHJhdGlvbiBvZiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVmVGFyZ2V0IFwiJXNcIiBcIiVzXCIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXBwbGljYXRpb24sIGRvbWFpbik7CiAgICAgICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgIH0KIAljcCA9IGNvcHlfbndvcmQoY3AsIHRhcmdldCwgbGVuKTsKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcF90cmFuc3BvcnQuYyBiL3NubXBsaWIvc25tcF90cmFuc3BvcnQuYwppbmRleCBmZTBhZmZlLi5hZGE0NzgxIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfdHJhbnNwb3J0LmMKKysrIGIvc25tcGxpYi9zbm1wX3RyYW5zcG9ydC5jCkBAIC0xLDQgKzEsOCBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWYgSEFWRV9TVFJJTkdfSApAQCAtMTIsNiArMTYsOCBAQAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAKKyNpbmNsdWRlIDxjdHlwZS5oPgorCiAjaWYgSEFWRV9VTklTVERfSAogI2luY2x1ZGUgPHVuaXN0ZC5oPgogI2VuZGlmCkBAIC0yMiwxMCArMjgsMTQgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvdXRpbGl0aWVzLmg+CiAKLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg+CisKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBEb21haW4uaD4KLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNfRE9NQUlOCi0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTRG9tYWluLmg+CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTQkFTRV9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNCYXNlRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTVENQRG9tYWluLmg+CiAjZW5kaWYKICNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOCiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU1RERG9tYWluLmg+CkBAIC0zMyw2ICs0MywxNSBAQAogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BEb21haW4uaD4KICNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wRFRMU1VEUERvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNTSERvbWFpbi5oPgorI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaD4KKyNlbmRpZgogI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0lQWF9ET01BSU4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUFhEb21haW4uaD4KICNlbmRpZgpAQCAtNTAsNyArNjksMTMgQEAKICNlbmRpZgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VydmljZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvcmVhZF9jb25maWcuaD4KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRyYW5zcG9ydF9hbGwsIGxpYm5ldHNubXApCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZG9tYWluX3N1cHBvcnQsIHRyYW5zcG9ydF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodGRvbWFpbl90cmFuc3BvcnRfb2lkLCB0cmFuc3BvcnRfYWxsKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHNvY2thZGRyX3NpemUsIHRyYW5zcG9ydF9hbGwpCiAKIC8qCiAgKiBPdXIgbGlzdCBvZiBzdXBwb3J0ZWQgdHJhbnNwb3J0IGRvbWFpbnMuICAKQEAgLTgwLDIwICsxMDUsMzIgQEAKIHN0YXRpYyB2b2lkICAgICBuZXRzbm1wX3Rkb21haW5fZHVtcCh2b2lkKTsKIAogCisKK3ZvaWQKK2luaXRfc25tcF90cmFuc3BvcnQodm9pZCkKK3sKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic25tcCIsICJkb250TG9hZEhvc3RDb25maWciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ET05UX0xPQURfSE9TVF9GSUxFUyk7Cit9CisKIC8qCiAgKiBNYWtlIGEgZGVlcCBjb3B5IG9mIGFuIG5ldHNubXBfdHJhbnNwb3J0LiAgCiAgKi8KLQogbmV0c25tcF90cmFuc3BvcnQgKgogbmV0c25tcF90cmFuc3BvcnRfY29weShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKIHsKICAgICBuZXRzbm1wX3RyYW5zcG9ydCAqbiA9IE5VTEw7CiAKLSAgICBuID0gKG5ldHNubXBfdHJhbnNwb3J0ICopIG1hbGxvYyhzaXplb2YobmV0c25tcF90cmFuc3BvcnQpKTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIG4gPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKICAgICBpZiAobiA9PSBOVUxMKSB7CiAgICAgICAgIHJldHVybiBOVUxMOwogICAgIH0KLSAgICBtZW1zZXQobiwgMCwgc2l6ZW9mKG5ldHNubXBfdHJhbnNwb3J0KSk7CiAKICAgICBpZiAodC0+ZG9tYWluICE9IE5VTEwpIHsKICAgICAgICAgbi0+ZG9tYWluID0gdC0+ZG9tYWluOwpAQCAtMTQ3LDEwICsxODQsMTcgQEAKICAgICBuLT5mX3JlY3YgPSB0LT5mX3JlY3Y7CiAgICAgbi0+Zl9zZW5kID0gdC0+Zl9zZW5kOwogICAgIG4tPmZfY2xvc2UgPSB0LT5mX2Nsb3NlOworICAgIG4tPmZfY29weSA9IHQtPmZfY29weTsKKyAgICBuLT5mX2NvbmZpZyA9IHQtPmZfY29uZmlnOwogICAgIG4tPmZfZm10YWRkciA9IHQtPmZfZm10YWRkcjsKICAgICBuLT5zb2NrID0gdC0+c29jazsKICAgICBuLT5mbGFncyA9IHQtPmZsYWdzOworICAgIG4tPmJhc2VfdHJhbnNwb3J0ID0gbmV0c25tcF90cmFuc3BvcnRfY29weSh0LT5iYXNlX3RyYW5zcG9ydCk7CiAKKyAgICAvKiBnaXZlIHRoZSB0cmFuc3BvcnQgYSBjaGFuY2UgdG8gZG8gInNwZWNpYWwgdGhpbmdzIiAqLworICAgIGlmICh0LT5mX2NvcHkpCisgICAgICAgIHQtPmZfY29weSh0LCBuKTsKKyAgICAgICAgICAgICAgICAKICAgICByZXR1cm4gbjsKIH0KIApAQCAtMTYyLDIwICsyMDYsMTI4IEBACiAgICAgaWYgKE5VTEwgPT0gdCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgaWYgKHQtPmxvY2FsICE9IE5VTEwpIHsKLSAgICAgICAgU05NUF9GUkVFKHQtPmxvY2FsKTsKLSAgICB9Ci0gICAgaWYgKHQtPnJlbW90ZSAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh0LT5yZW1vdGUpOwotICAgIH0KLSAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7Ci0gICAgICAgIFNOTVBfRlJFRSh0LT5kYXRhKTsKLSAgICB9CisgICAgU05NUF9GUkVFKHQtPmxvY2FsKTsKKyAgICBTTk1QX0ZSRUUodC0+cmVtb3RlKTsKKyAgICBTTk1QX0ZSRUUodC0+ZGF0YSk7CisgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0LT5iYXNlX3RyYW5zcG9ydCk7CisKICAgICBTTk1QX0ZSRUUodCk7CiB9CiAKKy8qCisgKiBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZworICoKKyAqIHJldHVybnMgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIHBlZXIgYWRkcmVzcy4KKyAqCisgKiBjYWxsZXIgaXMgcmVzcG9uc2libGUgZm9yIGZyZWVpbmcgdGhlIGFsbG9jYXRlZCBzdHJpbmcuCisgKi8KK2NoYXIgKgorbmV0c25tcF90cmFuc3BvcnRfcGVlcl9zdHJpbmcobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgY2hhciAgICAgICAgICAgKnN0cjsKKworICAgIGlmIChOVUxMID09IHQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKHQtPmZfZm10YWRkciAhPSBOVUxMKQorICAgICAgICBzdHIgPSB0LT5mX2ZtdGFkZHIodCwgZGF0YSwgbGVuKTsKKyAgICBlbHNlCisgICAgICAgIHN0ciA9IHN0cmR1cCgiPFVOS05PV04+Iik7CisKKyAgICByZXR1cm4gc3RyOworfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU09DS0FERFJfU0laRQoraW50CituZXRzbm1wX3NvY2thZGRyX3NpemUoc3RydWN0IHNvY2thZGRyICpzYSkKK3sKKyAgICBpZiAoTlVMTCA9PSBzYSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBzd2l0Y2ggKHNhLT5zYV9mYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgcmV0dXJuIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CisgICAgICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgICAgICByZXR1cm4gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpOworICAgICAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NPQ0tBRERSX1NJWkUgKi8KKyAgICAKK2ludAorbmV0c25tcF90cmFuc3BvcnRfc2VuZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqcGFja2V0LCBpbnQgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IGR1bXBQYWNrZXQsIGRlYnVnTGVuZ3RoOworCisgICAgaWYgKChOVUxMID09IHQpIHx8IChOVUxMID09IHQtPmZfc2VuZCkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydDpwa3Q6c2VuZCIsICJOVUxMIHRyYW5zcG9ydCBvciBzZW5kIGZ1bmN0aW9uXG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBkdW1wUGFja2V0ID0gbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRFVNUF9QQUNLRVQpOworICAgIGRlYnVnTGVuZ3RoID0gKFNOTVBFUlJfU1VDQ0VTUyA9PQorICAgICAgICAgICAgICAgICAgIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoInRyYW5zcG9ydDpzZW5kIikpOworCisgICAgaWYgKGR1bXBQYWNrZXQgfCBkZWJ1Z0xlbmd0aCkgeworICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3RyYW5zcG9ydF9wZWVyX3N0cmluZyh0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcGFxdWUgPyAqb3BhcXVlIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlbmd0aCA/ICpvbGVuZ3RoIDogMCk7CisgICAgICAgIGlmIChkZWJ1Z0xlbmd0aCkKKyAgICAgICAgICAgIERFQlVHTVNHVF9OQygoInRyYW5zcG9ydDpzZW5kIiwiJWx1IGJ5dGVzIHRvICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylsZW5ndGgsIHN0cikpOworICAgICAgICBpZiAoZHVtcFBhY2tldCkKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19ERUJVRywgIlxuU2VuZGluZyAlbHUgYnl0ZXMgdG8gJXNcbiIsIAorICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpbGVuZ3RoLCBzdHIpOworICAgICAgICBTTk1QX0ZSRUUoc3RyKTsKKyAgICB9CisgICAgaWYgKGR1bXBQYWNrZXQpCisgICAgICAgIHhkdW1wKHBhY2tldCwgbGVuZ3RoLCAiIik7CisKKyAgICByZXR1cm4gdC0+Zl9zZW5kKHQsIHBhY2tldCwgbGVuZ3RoLCBvcGFxdWUsIG9sZW5ndGgpOworfQorCitpbnQKK25ldHNubXBfdHJhbnNwb3J0X3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKnBhY2tldCwgaW50IGxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCBkZWJ1Z0xlbmd0aDsKKworICAgIGlmICgoTlVMTCA9PSB0KSB8fCAoTlVMTCA9PSB0LT5mX3JlY3YpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnQ6cmVjdiIsICJOVUxMIHRyYW5zcG9ydCBvciByZWN2IGZ1bmN0aW9uXG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICBsZW5ndGggPSB0LT5mX3JlY3YodCwgcGFja2V0LCBsZW5ndGgsIG9wYXF1ZSwgb2xlbmd0aCk7CisKKyAgICBpZiAobGVuZ3RoIDw9MCkKKyAgICAgICAgcmV0dXJuIGxlbmd0aDsgLyogZG9uJ3QgbG9nIHRpbWVvdXRzL3NvY2tldCBjbG9zZWQgKi8KKworICAgIGRlYnVnTGVuZ3RoID0gKFNOTVBFUlJfU1VDQ0VTUyA9PQorICAgICAgICAgICAgICAgICAgIGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoInRyYW5zcG9ydDpyZWN2IikpOworCisgICAgaWYgKGRlYnVnTGVuZ3RoKSB7CisgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdHJhbnNwb3J0X3BlZXJfc3RyaW5nKHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wYXF1ZSA/ICpvcGFxdWUgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGVuZ3RoID8gKm9sZW5ndGggOiAwKTsKKyAgICAgICAgaWYgKGRlYnVnTGVuZ3RoKQorICAgICAgICAgICAgREVCVUdNU0dUX05DKCgidHJhbnNwb3J0OnJlY3YiLCIlZCBieXRlcyBmcm9tICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgsIHN0cikpOworICAgICAgICBTTk1QX0ZSRUUoc3RyKTsKKyAgICB9CisKKyAgICByZXR1cm4gbGVuZ3RoOworfQorCiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RET01BSU5fU1VQUE9SVAogaW50CiBuZXRzbm1wX3Rkb21haW5fc3VwcG9ydChjb25zdCBvaWQgKiBpbl9vaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgaW5fbGVuLApAQCAtMTk0LDM1ICszNDYsMTcgQEAKICAgICB9CiAgICAgcmV0dXJuIDA7CiB9Ci0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RET01BSU5fU1VQUE9SVCAqLwogCiAKIHZvaWQKIG5ldHNubXBfdGRvbWFpbl9pbml0KHZvaWQpCiB7CiAgICAgREVCVUdNU0dUTCgoInRkb21haW4iLCAibmV0c25tcF90ZG9tYWluX2luaXQoKSBjYWxsZWRcbiIpKTsKLSAgICBuZXRzbm1wX3VkcF9jdG9yKCk7Ci0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1REX0RPTUFJTgotICAgIG5ldHNubXBfc3RkX2N0b3IoKTsKLSNlbmRpZgotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4KLSAgICBuZXRzbm1wX3RjcF9jdG9yKCk7Ci0jZW5kaWYKLSNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9JUFhfRE9NQUlOCi0gICAgbmV0c25tcF9pcHhfY3RvcigpOwotI2VuZGlmCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4KLSAgICBuZXRzbm1wX3VuaXhfY3RvcigpOwotI2VuZGlmCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQUFMNVBWQ19ET01BSU4KLSAgICBuZXRzbm1wX2FhbDVwdmNfY3RvcigpOwotI2VuZGlmCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KLSAgICBuZXRzbm1wX3VkcDZfY3RvcigpOwotI2VuZGlmCi0jaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KLSAgICBuZXRzbm1wX3RjcDZfY3RvcigpOwotI2VuZGlmCisKKy8qIGluY2x1ZGUgdGhlIGNvbmZpZ3VyZSBnZW5lcmF0ZWQgbGlzdCBvZiBjb25zdHJ1Y3RvciBjYWxscyAqLworI2luY2x1ZGUgInRyYW5zcG9ydHMvc25tcF90cmFuc3BvcnRfaW5pdHMuaCIKKwogICAgIG5ldHNubXBfdGRvbWFpbl9kdW1wKCk7CiB9CiAKQEAgLTI5MCw2ICs0MjQsOCBAQAogCiAKIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRkb21haW5fdW5yZWdpc3RlciwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERPTUFJTl9VTlJFR0lTVEVSCiBpbnQKIG5ldHNubXBfdGRvbWFpbl91bnJlZ2lzdGVyKG5ldHNubXBfdGRvbWFpbiAqbikKIHsKQEAgLTMxMCw2ICs0NDYsNyBAQAogICAgICAgICByZXR1cm4gMDsKICAgICB9CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URE9NQUlOX1VOUkVHSVNURVIgKi8KIAogCiBzdGF0aWMgbmV0c25tcF90ZG9tYWluICoKQEAgLTMzMCw2ICs0NjcsMjIgQEAKICAgICByZXR1cm4gTlVMTDsKIH0KIAorc3RhdGljIGludAorbmV0c25tcF9pc19mcWRuKGNvbnN0IGNoYXIgKnRoZW5hbWUpCit7CisgICAgaWYgKCF0aGVuYW1lKQorICAgICAgICByZXR1cm4gMDsKKyAgICB3aGlsZSgqdGhlbmFtZSkgeworICAgICAgICBpZiAoKnRoZW5hbWUgIT0gJy4nICYmICFpc3VwcGVyKCh1bnNpZ25lZCBjaGFyKSp0aGVuYW1lKSAmJgorICAgICAgICAgICAgIWlzbG93ZXIoKHVuc2lnbmVkIGNoYXIpKnRoZW5hbWUpICYmCisgICAgICAgICAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcikqdGhlbmFtZSkgJiYgKnRoZW5hbWUgIT0gJy0nKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAgICB0aGVuYW1lKys7CisgICAgfQorICAgIHJldHVybiAxOworfQorCiAvKgogICogTG9jYXRlIHRoZSBhcHByb3ByaWF0ZSB0cmFuc3BvcnQgZG9tYWluIGFuZCBjYWxsIHRoZSBjcmVhdGUgZnVuY3Rpb24gZm9yCiAgKiBpdC4KQEAgLTM0NCw4ICs0OTcsOCBAQAogICAgIGNvbnN0IGNoYXIgICAgICAgICAqYWRkciA9IE5VTEw7CiAgICAgY29uc3QgY2hhciAqIGNvbnN0ICpzcGVjID0gTlVMTDsKICAgICBpbnQgICAgICAgICAgICAgICAgIGFueV9mb3VuZCA9IDA7Ci0gICAgZXh0ZXJuIGNoYXIgKmN1cmZpbGVuYW1lOwkJLyogZnJvbSByZWFkX2NvbmZpZy5jICovCi0gICAgY2hhciAgICAgICAgICpwcmV2X2N1cmZpbGVuYW1lOworICAgIGNoYXIgYnVmW1NOTVBfTUFYUEFUSF07CisgICAgY2hhciAqKmxzcGVjID0gMDsKIAogICAgIERFQlVHTVNHVEwoKCJ0ZG9tYWluIiwKICAgICAgICAgICAgICAgICAidGRvbWFpbl90cmFuc3BvcnRfZnVsbChcIiVzXCIsIFwiJXNcIiwgJWQsIFwiJXNcIiwgXCIlc1wiKVxuIiwKQEAgLTM1MywxMiArNTA2LDYxIEBACiAgICAgICAgICAgICAgICAgZGVmYXVsdF9kb21haW4gPyBkZWZhdWx0X2RvbWFpbiA6ICJbTklMXSIsCiAgICAgICAgICAgICAgICAgZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICJbTklMXSIpKTsKIAotICAgIHByZXZfY3VyZmlsZW5hbWUgPSBjdXJmaWxlbmFtZTsKKyAgICAvKiBzZWUgaWYgd2UgY2FuIGxvYWQgYSBob3N0LW5hbWUgc3BlY2lmaWMgc2V0IG9mIGNvbmYgZmlsZXMgKi8KKyAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ET05UX0xPQURfSE9TVF9GSUxFUykgJiYKKyAgICAgICAgbmV0c25tcF9pc19mcWRuKHN0cikpIHsKKyAgICAgICAgc3RhdGljIGludCBoYXZlX2FkZGVkX2hhbmRsZXIgPSAwOworICAgICAgICBjaGFyICpuZXdob3N0OworICAgICAgICBzdHJ1Y3QgY29uZmlnX2xpbmUgKmNvbmZpZ19oYW5kbGVyczsKKyAgICAgICAgc3RydWN0IGNvbmZpZ19maWxlcyBmaWxlX25hbWVzOworICAgICAgICBjaGFyICpwcmV2X2hvc3RuYW1lOworCisgICAgICAgIC8qIHJlZ2lzdGVyIGEgInRyYW5zcG9ydCIgc3BlY2lmaWVyICovCisgICAgICAgIGlmICghaGF2ZV9hZGRlZF9oYW5kbGVyKSB7CisgICAgICAgICAgICBoYXZlX2FkZGVkX2hhbmRsZXIgPSAxOworICAgICAgICAgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzbm1wIiwgInRyYW5zcG9ydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9IT1NUTkFNRSk7CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSBzYXZlIG9uIHNwZWNpZmljIHNldHRpbmcgdGhhdCB3ZSBkb24ndCBhbGxvdyB0byBjaGFuZ2UKKyAgICAgICAgICAgZnJvbSBvbmUgdHJhbnNwb3J0IGNyZWF0aW9uIHRvIHRoZSBuZXh0OyBpZSwgd2UgZG9uJ3Qgd2FudAorICAgICAgICAgICB0aGUgInRyYW5zcG9ydCIgc3BlY2lmaWVyIHRvIGJlIGEgZGVmYXVsdC4gIEl0IHNob3VsZCBiZSBhCisgICAgICAgICAgIHNpbmdsZSBpbnZvY2F0aW9uIHVzZSBvbmx5ICovCisgICAgICAgIHByZXZfaG9zdG5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0hPU1ROQU1FKTsKKyAgICAgICAgaWYgKHByZXZfaG9zdG5hbWUpCisgICAgICAgICAgICBwcmV2X2hvc3RuYW1lID0gc3RyZHVwKHByZXZfaG9zdG5hbWUpOworCisgICAgICAgIC8qIHJlYWQgaW4gdGhlIGhvc3RzL1NUUklORy5jb25mIGZpbGVzICovCisgICAgICAgIGNvbmZpZ19oYW5kbGVycyA9IHJlYWRfY29uZmlnX2dldF9oYW5kbGVycygic25tcCIpOworICAgICAgICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLTEsICJob3N0cy8lcyIsIHN0cik7CisgICAgICAgIGZpbGVfbmFtZXMuZmlsZUhlYWRlciA9IGJ1ZjsKKyAgICAgICAgZmlsZV9uYW1lcy5zdGFydCA9IGNvbmZpZ19oYW5kbGVyczsKKyAgICAgICAgZmlsZV9uYW1lcy5uZXh0ID0gTlVMTDsKKyAgICAgICAgREVCVUdNU0dUTCgoInRkb21haW4iLCAiY2hlY2tpbmcgZm9yIGhvc3Qgc3BlY2lmaWMgY29uZmlnICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBidWYpKTsKKyAgICAgICAgcmVhZF9jb25maWdfZmlsZXNfb2ZfdHlwZShFSVRIRVJfQ09ORklHLCAmZmlsZV9uYW1lcyk7CisKKyAgICAgICAgaWYgKE5VTEwgIT0KKyAgICAgICAgICAgIChuZXdob3N0ID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0hPU1ROQU1FKSkpIHsKKyAgICAgICAgICAgIHN0cmxjcHkoYnVmLCBuZXdob3N0LCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICBzdHIgPSBidWY7CisgICAgICAgIH0KKworICAgICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfSE9TVE5BTUUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmV2X2hvc3RuYW1lKTsKKyAgICAgICAgU05NUF9GUkVFKHByZXZfaG9zdG5hbWUpOworICAgIH0KIAogICAgIC8qIEZpcnN0IHRyeSAtIGFzc3VtZSB0aGF0IHRoZXJlIGlzIGEgZG9tYWluIGluIHN0ciAoZG9tYWluOnRhcmdldCkgKi8KIAogICAgIGlmIChzdHIgIT0gTlVMTCkgewotICAgICAgICBjaGFyICpjcDsKKyAgICAgICAgY29uc3QgY2hhciAqY3A7CiAgICAgICAgIGlmICgoY3AgPSBzdHJjaHIoc3RyLCAnOicpKSAhPSBOVUxMKSB7CiAgICAgICAgICAgICBjaGFyKiBteXN0cmluZyA9IChjaGFyKiltYWxsb2MoY3AgKyAxIC0gc3RyKTsKICAgICAgICAgICAgIG1lbWNweShteXN0cmluZywgc3RyLCBjcCAtIHN0cik7CkBAIC0zODYsNyArNTg4LDIxIEBACiAgICAgICAgICAgICBERUJVR01TR1RMKCgidGRvbWFpbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiVXNlIHVzZXIgc3BlY2lmaWVkIGRlZmF1bHQgZG9tYWluIFwiJXNcIlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRfZG9tYWluKSk7Ci0gICAgICAgICAgICBtYXRjaCA9IGZpbmRfdGRvbWFpbihkZWZhdWx0X2RvbWFpbik7CisgICAgICAgICAgICBpZiAoIXN0cmNocihkZWZhdWx0X2RvbWFpbiwgJywnKSkKKyAgICAgICAgICAgICAgICBtYXRjaCA9IGZpbmRfdGRvbWFpbihkZWZhdWx0X2RvbWFpbik7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgY29tbWFzID0gMDsKKyAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpjcCA9IGRlZmF1bHRfZG9tYWluOworICAgICAgICAgICAgICAgIGNoYXIgKmR1cCA9IHN0cmR1cChkZWZhdWx0X2RvbWFpbik7CisKKyAgICAgICAgICAgICAgICB3aGlsZSAoKisrY3ApIGlmICgqY3AgPT0gJywnKSBjb21tYXMrKzsKKyAgICAgICAgICAgICAgICBsc3BlYyA9IGNhbGxvYyhjb21tYXMrMiwgc2l6ZW9mKGNoYXIgKikpOworICAgICAgICAgICAgICAgIGNvbW1hcyA9IDE7CisgICAgICAgICAgICAgICAgbHNwZWNbMF0gPSBzdHJ0b2soZHVwLCAiLCIpOworICAgICAgICAgICAgICAgIHdoaWxlICgobHNwZWNbY29tbWFzKytdID0gc3RydG9rKE5VTEwsICIsIikpKQorICAgICAgICAgICAgICAgICAgICA7CisgICAgICAgICAgICAgICAgc3BlYyA9IChjb25zdCBjaGFyICogY29uc3QgKilsc3BlYzsKKyAgICAgICAgICAgIH0KICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIHNwZWMgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoYXBwbGljYXRpb24pOwogICAgICAgICAgICAgaWYgKHNwZWMgPT0gTlVMTCkgewpAQCAtNDI2LDEyICs2NDIsMTkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICJkZWZhdWx0IGFkZHJlc3MgXCIlc1wiXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2gtPnByZWZpeFswXSwgYWRkciA/IGFkZHIgOiAiW05JTF0iLAogICAgICAgICAgICAgICAgICAgICAgICAgYWRkcjIgPyBhZGRyMiA6ICJbTklMXSIpKTsKLSAgICAgICAgICAgIGlmIChtYXRjaC0+Zl9jcmVhdGVfZnJvbV90c3RyaW5nKQorICAgICAgICAgICAgaWYgKG1hdGNoLT5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcpIHsKKyAgICAgICAgICAgICAgICBORVRTTk1QX0xPR09OQ0UoKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRyYW5zcG9ydCBkb21haW4gJXMgdXNlcyBkZXByZWNhdGVkIGZfY3JlYXRlX2Zyb21fdHN0cmluZ1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoLT5wcmVmaXhbMF0pKTsKICAgICAgICAgICAgICAgICB0ID0gbWF0Y2gtPmZfY3JlYXRlX2Zyb21fdHN0cmluZyhhZGRyLCBsb2NhbCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgdCA9IG1hdGNoLT5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3KGFkZHIsIGxvY2FsLCBhZGRyMik7CiAgICAgICAgICAgICBpZiAodCkgewotICAgICAgICAgICAgICAgIGN1cmZpbGVuYW1lID0gcHJldl9jdXJmaWxlbmFtZTsKKyAgICAgICAgICAgICAgICBpZiAobHNwZWMpIHsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShsc3BlY1swXSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUobHNwZWMpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZXR1cm4gdDsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDQzLDcgKzY2NiwxMCBAQAogICAgIH0KICAgICBpZiAoIWFueV9mb3VuZCkKICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5vIHN1cHBvcnQgZm9yIGFueSBjaGVja2VkIHRyYW5zcG9ydCBkb21haW5cbiIpOwotICAgIGN1cmZpbGVuYW1lID0gcHJldl9jdXJmaWxlbmFtZTsKKyAgICBpZiAobHNwZWMpIHsKKyAgICAgICAgZnJlZShsc3BlY1swXSk7CisgICAgICAgIGZyZWUobHNwZWMpOworICAgIH0KICAgICByZXR1cm4gTlVMTDsKIH0KIApAQCAtNDU3LDYgKzY4Myw3IEBACiB9CiAKIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RET01BSU5fVFJBTlNQT1JUX09JRAogbmV0c25tcF90cmFuc3BvcnQgKgogbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9vaWQoY29uc3Qgb2lkICogZG9tLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IGRvbV9sZW4sCkBAIC00ODEsNiArNzA4LDcgQEAKICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTm8gc3VwcG9ydCBmb3IgcmVxdWVzdGVkIHRyYW5zcG9ydCBkb21haW5cbiIpOwogICAgIHJldHVybiBOVUxMOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVERPTUFJTl9UUkFOU1BPUlRfT0lEICovCiAKIG5ldHNubXBfdHJhbnNwb3J0KgogbmV0c25tcF90cmFuc3BvcnRfb3Blbihjb25zdCBjaGFyKiBhcHBsaWNhdGlvbiwgY29uc3QgY2hhciogc3RyLCBpbnQgbG9jYWwpCkBAIC01NDYsMyArNzc0LDE4IEBACiAKICAgICByZXR1cm4gMDsKIH0KKworaW50CituZXRzbm1wX3RyYW5zcG9ydF9jb25maWdfY29tcGFyZShuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKmxlZnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKnJpZ2h0KSB7CisgICAgcmV0dXJuIHN0cmNtcChsZWZ0LT5rZXksIHJpZ2h0LT5rZXkpOworfQorCituZXRzbm1wX3RyYW5zcG9ydF9jb25maWcgKgorbmV0c25tcF90cmFuc3BvcnRfY3JlYXRlX2NvbmZpZyhjaGFyICprZXksIGNoYXIgKnZhbHVlKSB7CisgICAgbmV0c25tcF90cmFuc3BvcnRfY29uZmlnICplbnRyeSA9CisgICAgICAgIFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnRfY29uZmlnKTsKKyAgICBlbnRyeS0+a2V5ID0gc3RyZHVwKGtleSk7CisgICAgZW50cnktPnZhbHVlID0gc3RyZHVwKHZhbHVlKTsKKyAgICByZXR1cm4gZW50cnk7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBfdmVyc2lvbi5jIGIvc25tcGxpYi9zbm1wX3ZlcnNpb24uYwppbmRleCA0ODY2ZGRhLi43ZDM0YzBkIDEwMDY0NAotLS0gYS9zbm1wbGliL3NubXBfdmVyc2lvbi5jCisrKyBiL3NubXBsaWIvc25tcF92ZXJzaW9uLmMKQEAgLTUsMTAgKzUsMTAgQEAKICNpZm5kZWYgVUNEX0NPTVBBVElCTEUKIHN0YXRpYwogI2VuZGlmCi1jb25zdCBjaGFyICAgICAqTmV0U25tcFZlcnNpb25JbmZvID0gIjUuNC40IjsKK2NvbnN0IGNoYXIgICAgICpOZXRTbm1wVmVyc2lvbkluZm8gPSBQQUNLQUdFX1ZFUlNJT047CiAKIGNvbnN0IGNoYXIgICAgICoKLW5ldHNubXBfZ2V0X3ZlcnNpb24oKQorbmV0c25tcF9nZXRfdmVyc2lvbih2b2lkKQogewogICAgIHJldHVybiBOZXRTbm1wVmVyc2lvbkluZm87CiB9CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXBrc20uYyBiL3NubXBsaWIvc25tcGtzbS5jCmluZGV4IDNjZTI4MDIuLjdkMzA2MTIgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcGtzbS5jCisrKyBiL3NubXBsaWIvc25tcGtzbS5jCkBAIC05LDE5ICs5LDEyIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaWZkZWYgSEFWRV9TVERMSUJfSAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2VuZGlmCiAjaWYgVElNRV9XSVRIX1NZU19USU1FCi0jIGlmZGVmIFdJTjMyCi0jICBpbmNsdWRlIDxzeXMvdGltZWIuaD4KLSMgZWxzZQotIyAgaW5jbHVkZSA8c3lzL3RpbWUuaD4KLSMgZW5kaWYKKyMgaW5jbHVkZSA8c3lzL3RpbWUuaD4KICMgaW5jbHVkZSA8dGltZS5oPgogI2Vsc2UKICMgaWYgSEFWRV9TWVNfVElNRV9ICkBAIC03Myw2ICs2NiwxMiBAQAogI2RlZmluZSBUSUNLRVRfQ0xJRU5UKHgpCSh4KS0+ZW5jX3BhcnQyLT5jbGllbnQKICNlbmRpZgkJCQkvKiBORVRTTk1QX1VTRV9LRVJCRVJPU19IRUlNREFMICovCiAKKyNpZiBIQVZFX0VUX0NPTV9FUlJfSAorI2luY2x1ZGUgPGV0L2NvbV9lcnIuaD4KKyNlbGlmIEhBVkVfQ09NX0VSUl9ICisjaW5jbHVkZSA8Y29tX2Vyci5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3V0aWxpdGllcy5oPgpAQCAtMTA3LDYgKzEwNiwyNCBAQAogc3RhdGljIHZvaWQgICAgIGtzbV9pbmNyZW1lbnRfcmVmX2NvdW50KGxvbmcpOwogc3RhdGljIHN0cnVjdCBrc21fY2FjaGVfZW50cnkgKmtzbV9nZXRfY2FjaGUobG9uZyk7CiAKKyNpZiAhZGVmaW5lZChIQVZFX0tSQjVfQVVUSF9DT05fR0VUU0VORFNVQktFWSkgLyogSGVpbWRhbCAqLworCitrcmI1X2Vycm9yX2NvZGUga3JiNV9hdXRoX2Nvbl9nZXRzZW5kc3Via2V5KGtyYjVfY29udGV4dCBjb250ZXh0LAorCQkJCWtyYjVfYXV0aF9jb250ZXh0IGF1dGhfY29udGV4dCwgCisJCQkJa3JiNV9rZXlibG9jayAqKmtleWJsb2NrKQoreworICAgIHJldHVybiBrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5KGNvbnRleHQsIGF1dGhfY29udGV4dCwga2V5YmxvY2spOworfQorCitrcmI1X2Vycm9yX2NvZGUga3JiNV9hdXRoX2Nvbl9nZXRyZWN2c3Via2V5KGtyYjVfY29udGV4dCBjb250ZXh0LAorCQkJCWtyYjVfYXV0aF9jb250ZXh0IGF1dGhfY29udGV4dCwgCisJCQkJa3JiNV9rZXlibG9jayAqKmtleWJsb2NrKQoreworICAgIHJldHVybiBrcmI1X2F1dGhfY29uX2dldHJlbW90ZXN1YmtleShjb250ZXh0LCBhdXRoX2NvbnRleHQsIGtleWJsb2NrKTsKK30KKworI2VuZGlmCisKICNkZWZpbmUgSEFTSFNJWkUJNjQKIAogLyoKQEAgLTIzOSw3ICsyNTYsMTEgQEAKICAgICBkZWYtPnBkdV9mcmVlID0ga3NtX2ZyZWVfcGR1OwogICAgIGRlZi0+cGR1X2Nsb25lID0ga3NtX2Nsb25lX3BkdTsKIAotICAgIHJlZ2lzdGVyX3NlY19tb2QoTkVUU05NUF9LU01fU0VDVVJJVFlfTU9ERUwsICJrc20iLCBkZWYpOworICAgIHJlZ2lzdGVyX3NlY19tb2QoTkVUU05NUF9TRUNfTU9ERUxfS1NNLCAia3NtIiwgZGVmKTsKK30KKwordm9pZCBzaHV0ZG93bl9rc20odm9pZCkKK3sKIH0KIAogLyoKQEAgLTU4OCwxNSArNjA5LDE1IEBACiAgICAgICAgICAqLwogCiAgICAgICAgIGlmIChrc21fc3RhdGUpCi0gICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRyZW1vdGVzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldHJlY3ZzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Via2V5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJrZXkpOwogCiAgICAgICAgIGlmIChyZXRjb2RlKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgia3NtIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICJLU006IGtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkgZmFpbGVkOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJLU006IGtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleSBmYWlsZWQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShyZXRjb2RlKSkpOwogICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsKGVycm9yX21lc3NhZ2UocmV0Y29kZSkpOwogICAgICAgICAgICAgcmV0dmFsID0gU05NUEVSUl9LUkI1OwpAQCAtODI1LDEzICs4NDYsMTMgQEAKIAogICAgIGlmICghc3Via2V5KSB7CiAgICAgICAgIGlmIChrc21fc3RhdGUpCi0gICAgICAgICAgICByZXRjb2RlID0ga3JiNV9hdXRoX2Nvbl9nZXRyZW1vdGVzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldHJlY3ZzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Via2V5KTsKICAgICAgICAgZWxzZQotICAgICAgICAgICAgcmV0Y29kZSA9IGtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKKyAgICAgICAgICAgIHJldGNvZGUgPSBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzdWJrZXkpOwogICAgICAgICBpZiAocmV0Y29kZSkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoImtzbSIsICJrcmI1X2F1dGhfY29uX2dldGxvY2Fsc3Via2V5IGZhaWxlZDogJXNcbiIsCisgICAgICAgICAgICBERUJVR01TR1RMKCgia3NtIiwgImtyYjVfYXV0aF9jb25fZ2V0c2VuZHN1YmtleSBmYWlsZWQ6ICVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgZXJyb3JfbWVzc2FnZShyZXRjb2RlKSkpOwogICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsKGVycm9yX21lc3NhZ2UocmV0Y29kZSkpOwogICAgICAgICAgICAgcmV0dmFsID0gU05NUEVSUl9LUkI1OwpAQCAtMTUwNCw3ICsxNTI1LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHJldGNvZGUgPQotICAgICAgICAgICAga3JiNV9hdXRoX2Nvbl9nZXRyZW1vdGVzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwgJnN1YmtleSk7CisgICAgICAgICAgICBrcmI1X2F1dGhfY29uX2dldHJlY3ZzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwgJnN1YmtleSk7CiAKICAgICAgICAgaWYgKHJldGNvZGUpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJrc20iLCAiS1NNIHJlbW90ZSBzdWJrZXkgcmV0cmlldmFsIGZhaWxlZDogJXNcbiIsCkBAIC0xNTYxLDcgKzE1ODIsNyBAQAogICAgICAgICBERUJVR01TR1RMKCgia3NtIiwgIktTTToga3JiNV9yZF9yZXAoKSBkZWNvZGVkIHN1Y2Nlc3NmdWxseS5cbiIpKTsKIAogICAgICAgICByZXRjb2RlID0KLSAgICAgICAgICAgIGtyYjVfYXV0aF9jb25fZ2V0bG9jYWxzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwgJnN1YmtleSk7CisgICAgICAgICAgICBrcmI1X2F1dGhfY29uX2dldHNlbmRzdWJrZXkoa2NvbnRleHQsIGF1dGhfY29udGV4dCwgJnN1YmtleSk7CiAKICAgICAgICAgaWYgKHJldGNvZGUpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJrc20iLCAiVW5hYmxlIHRvIHJldHJpZXZlIGxvY2FsIHN1YmtleTogJXNcbiIsCmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXB0c20uYyBiL3NubXBsaWIvc25tcHRzbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyZGU2ODIKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3NubXB0c20uYwpAQCAtMCwwICsxLDYyNSBAQAorLyoKKyAqIHNubXB0c21zbS5jIC0tIEltcGxlbWVudHMgUkZDICM1NTkxCisgKgorICogVGhpcyBjb2RlIGltcGxlbWVudHMgYSBzZWN1cml0eSBtb2RlbCB0aGF0IGFzc3VtZXMgdGhlIGxvY2FsIHVzZXIKKyAqIHRoYXQgZXhlY3V0ZWQgdGhlIGFnZW50IGlzIHRoZSB1c2VyIHdobydzIGF0dHJpYnV0ZXMgYXJlIHBhc3NlZCB1cAorICogYnkgdGhlIHRyYW5zcG9ydCB1bmRlcm5lYXRoLiAgVGhlIFJGQyBkZXNjcmliaW5nIHRoaXMgc2VjdXJpdHkKKyAqIG1vZGVsIGlzIFJGQzU1OTEuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wdHNtLmg+CisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TU0hfRE9NQUlOCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU1NIRG9tYWluLmg+CisjZW5kaWYKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNVRFBEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaD4KKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNTQ1RQX0RPTUFJTgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcERUTFNTQ1RQRG9tYWluLmg+CisjZW5kaWYKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUoc25tcHYzX3Byb2JlX2NvbnRleHRFbmdpbmVJRF9yZmM1MzQzKQorbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUocm93X2NyZWF0ZSkKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgaW50ICAgICAgdHNtX3Nlc3Npb25faW5pdChuZXRzbm1wX3Nlc3Npb24gKik7CitzdGF0aWMgdm9pZCAgICAgdHNtX2ZyZWVfc3RhdGVfcmVmKHZvaWQgKik7CitzdGF0aWMgaW50ICAgICAgdHNtX2Nsb25lX3BkdShuZXRzbm1wX3BkdSAqLCBuZXRzbm1wX3BkdSAqKTsKK3N0YXRpYyBpbnQgICAgICB0c21fZnJlZV9wZHUobmV0c25tcF9wZHUgKnBkdSk7CisKK3VfaW50IG5leHRfc2Vzc19pZCA9IDE7CisKKy8qKiBJbml0aWFsaXplIHRoZSBUU00gc2VjdXJpdHkgbW9kdWxlICovCit2b2lkCitpbml0X3RzbSh2b2lkKQoreworICAgIHN0cnVjdCBzbm1wX3NlY21vZF9kZWYgKmRlZjsKKyAgICBpbnQgcmV0OworCisgICAgZGVmID0gU05NUF9NQUxMT0NfU1RSVUNUKHNubXBfc2VjbW9kX2RlZik7CisKKyAgICBpZiAoIWRlZikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAiVW5hYmxlIHRvIG1hbGxvYyBzbm1wX3NlY21vZCBzdHJ1Y3QsIG5vdCByZWdpc3RlcmluZyBUU01cbiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZGVmLT5lbmNvZGVfcmV2ZXJzZSA9IHRzbV9yZ2VuZXJhdGVfb3V0X21zZzsKKyAgICBkZWYtPmRlY29kZSA9IHRzbV9wcm9jZXNzX2luX21zZzsKKyAgICBkZWYtPnNlc3Npb25fb3BlbiA9IHRzbV9zZXNzaW9uX2luaXQ7CisgICAgZGVmLT5wZHVfZnJlZV9zdGF0ZV9yZWYgPSB0c21fZnJlZV9zdGF0ZV9yZWY7CisgICAgZGVmLT5wZHVfY2xvbmUgPSB0c21fY2xvbmVfcGR1OworICAgIGRlZi0+cGR1X2ZyZWUgPSB0c21fZnJlZV9wZHU7CisgICAgZGVmLT5wcm9iZV9lbmdpbmVpZCA9IHNubXB2M19wcm9iZV9jb250ZXh0RW5naW5lSURfcmZjNTM0MzsKKworICAgIERFQlVHTVNHVEwoKCJ0c20iLCJyZWdpc3RlcmluZyBvdXJzZWx2ZXNcbiIpKTsKKyAgICByZXQgPSByZWdpc3Rlcl9zZWNfbW9kKFNOTVBfU0VDX01PREVMX1RTTSwgInRzbSIsIGRlZik7CisgICAgREVCVUdNU0dUTCgoInRzbSIsIiByZXR1cm5lZCAlZFxuIiwgcmV0KSk7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fQk9PTEVBTiwgInNubXAiLCAidHNtVXNlVHJhbnNwb3J0UHJlZml4IiwKKwkJCSAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgpOworfQorCisvKiogc2h1dGRvd24gdGhlIFRTTSBzZWN1cml0eSBtb2R1bGUgKi8KK3ZvaWQKK3NodXRkb3duX3RzbSh2b2lkKQoreworfQorCisvKgorICogSW5pdGlhbGl6ZSBzcGVjaWZpYyBzZXNzaW9uIGluZm9ybWF0aW9uIChyaWdodCBub3csIGp1c3Qgc2V0IHVwIHRoaW5ncyB0bworICogbm90IGRvIGFuIGVuZ2luZUlEIHByb2JlKQorICovCisKK3N0YXRpYyBpbnQKK3RzbV9zZXNzaW9uX2luaXQobmV0c25tcF9zZXNzaW9uICogc2VzcykKK3sKKyAgICBERUJVR01TR1RMKCgidHNtIiwKKyAgICAgICAgICAgICAgICAiVFNNOiBSZWFjaGVkIG91ciBzZXNzaW9uIGluaXRpYWxpemF0aW9uIGNhbGxiYWNrXG4iKSk7CisKKyAgICBzZXNzLT5mbGFncyB8PSBTTk1QX0ZMQUdTX0RPTlRfUFJPQkU7CisKKyAgICAvKiBYWFg6IGxpa2VseSBuZWVkZWQgZm9yIHNvbWV0aGluZzogKi8KKyAgICAvKgorICAgIHRzbXNlc3Npb24gPSBzZXNzLT5zZWN1cml0eUluZm8gPQorICAgIGlmICghdHNtc2Vzc2lvbikKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICovCisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKiogRnJlZSBvdXIgc3RhdGUgaW5mb3JtYXRpb24gKHRoaXMgaXMgb25seSBkb25lIG9uIHRoZSBhZ2VudCBzaWRlKSAqLworc3RhdGljIHZvaWQKK3RzbV9mcmVlX3N0YXRlX3JlZih2b2lkICpwdHIpCit7CisgICAgbmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSAqdHNtUmVmOworCisgICAgaWYgKE5VTEwgPT0gcHRyKQorICAgICAgICByZXR1cm47CisKKyAgICB0c21SZWYgPSAobmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSAqKSBwdHI7CisgICAgLyogdGhlIHRtU3RhdGVSZWYgaXMgYWx3YXlzIHRha2VuIGNhcmUgb2YgYnkgdGhlIG5vcm1hbCBQRFUsIHNpbmNlIHRoaXMKKyAgICAgICBpcyBqdXN0IGEgcmVmZXJlbmNlIHRvIHRoYXQgb25lICovCisgICAgLyogRE9OJ1QgRE86IFNOTVBfRlJFRSh0c21SZWYtPnRtU3RhdGVSZWYpOyAqLworICAgIC8qIFNOTVBfRlJFRSh0c21SZWYpOyAgPyAqLworfQorCitzdGF0aWMgaW50Cit0c21fZnJlZV9wZHUobmV0c25tcF9wZHUgKnBkdSkKK3sKKyAgICAvKiBmcmVlIHRoZSBzZWN1cml0eSByZWZlcmVuY2UgKi8KKyAgICBpZiAocGR1LT5zZWN1cml0eVN0YXRlUmVmKSB7CisgICAgICAgIHRzbV9mcmVlX3N0YXRlX3JlZihwZHUtPnNlY3VyaXR5U3RhdGVSZWYpOworICAgICAgICBwZHUtPnNlY3VyaXR5U3RhdGVSZWYgPSBOVUxMOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyoqIFRoaXMgaXMgY2FsbGVkIHdoZW4gYSBQRFUgaXMgY2xvbmVkICh0byBpbmNyZWFzZSByZWZlcmVuY2UgY291bnRzKSAqLworc3RhdGljIGludAordHNtX2Nsb25lX3BkdShuZXRzbm1wX3BkdSAqcGR1LCBuZXRzbm1wX3BkdSAqcGR1MikKK3sKKyAgICBuZXRzbm1wX3RzbVNlY3VyaXR5UmVmZXJlbmNlICpvbGRyZWYsICpuZXdyZWY7CisKKyAgICBvbGRyZWYgPSBwZHUtPnNlY3VyaXR5U3RhdGVSZWY7CisgICAgaWYgKCFvbGRyZWYpCisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBuZXdyZWYgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UpOworICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiY2xvbmVkIGFzIHBkdT0lcCwgcmVmPSVwIChvbGRyZWY9JXApXG4iLAorICAgICAgICAgICAgcGR1MiwgbmV3cmVmLCBwZHUyLT5zZWN1cml0eVN0YXRlUmVmKSk7CisgICAgaWYgKCFuZXdyZWYpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAKKyAgICBtZW1jcHkobmV3cmVmLCBvbGRyZWYsIHNpemVvZigqb2xkcmVmKSk7CisKKyAgICBwZHUyLT5zZWN1cml0eVN0YXRlUmVmID0gbmV3cmVmOworCisgICAgLyogdGhlIHRtIHN0YXRlIHJlZmVyZW5jZSBpcyBqdXN0IGEgbGluayB0byB0aGUgb25lIGluIHRoZSBwZHUsCisgICAgICAgd2hpY2ggd2FzIGFscmVhZHkgY29waWVkIGJ5IHNubXBfY2xvbmVfcGR1IGJlZm9yZSBoYW5kaW5nIGl0IHRvCisgICAgICAgdXMuICovCisKKyAgICBuZXdyZWYtPnRtU3RhdGVSZWYgPSBuZXRzbm1wX21lbWR1cChvbGRyZWYtPnRtU3RhdGVSZWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpvbGRyZWYtPnRtU3RhdGVSZWYpKTsKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCisvKiBhc24uMSBlYXNpbmcgZGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFNNQlVJTERfT1JfRVJSKGZ1biwgYXJncywgbXNnLCBkZXNjKSAgICAgICBcCisgICAgREVCVUdEVU1QSEVBREVSKCJzZW5kIiwgZGVzYyk7IFwKKyAgICByYyA9IGZ1biBhcmdzOyAgICAgICAgICAgIFwKKyAgICBERUJVR0lOREVOVExFU1MoKTsgICAgICAgIFwKKyAgICBpZiAocmMgPT0gMCkgeyBcCisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLG1zZykpOyBcCisgICAgICAgIHJldHZhbCA9IFNOTVBFUlJfVE9PX0xPTkc7IFwKKyAgICAgICAgZ290byBvdXRlcnI7IFwKKyAgICB9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHNtX2dlbmVyYXRlX291dF9tc2cKKyAqCisgKiBQYXJhbWV0ZXJzOgorICoJKFNlZSBsaXN0IGJlbG93Li4uKQorICoKKyAqIFJldHVybnM6CisgKglTTk1QRVJSX1NVQ0NFU1MgICAgICAgICAgICAgICAgICAgICAgICBPbiBzdWNjZXNzLgorICoJLi4uIGFuZCBvdGhlcnMKKyAqCisgKgorICogR2VuZXJhdGUgYW4gb3V0Z29pbmcgbWVzc2FnZS4KKyAqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworaW50Cit0c21fcmdlbmVyYXRlX291dF9tc2coc3RydWN0IHNubXBfc2VjbW9kX291dGdvaW5nX3BhcmFtcyAqcGFybXMpCit7CisgICAgdV9jaGFyICAgICAgICAgKip3aG9sZU1zZyA9IHBhcm1zLT53aG9sZU1zZzsKKyAgICBzaXplX3QJICAgKm9mZnNldCA9IHBhcm1zLT53aG9sZU1zZ09mZnNldDsKKyAgICBpbnQgcmM7CisgICAgCisgICAgc2l6ZV90ICAgICAgICAgKndob2xlTXNnTGVuID0gcGFybXMtPndob2xlTXNnTGVuOworICAgIG5ldHNubXBfdHNtU2VjdXJpdHlSZWZlcmVuY2UgKnRzbVNlY1JlZjsKKyAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWY7CisgICAgaW50ICAgICAgICAgICAgIHRtU3RhdGVSZWZMb2NhbCA9IDA7CisgICAgCisgICAgREVCVUdNU0dUTCgoInRzbSIsICJTdGFydGluZyBUU00gcHJvY2Vzc2luZ1xuIikpOworCisgICAgLyogaWYgd2UgaGF2ZSB0aGlzLCB0aGVuIHRoaXMgbWVzc2FnZSB0byBiZSBzZW50IGlzIGluIHJlc3BvbnNlIHRvCisgICAgICAgc29tZXRoaW5nIHRoYXQgY2FtZSBpbiBlYXJsaWVyIGFuZCB0aGUgdHNtU2VjUmVmIHdhcyBjcmVhdGVkIGJ5CisgICAgICAgdGhlIHRzbV9wcm9jZXNzX2luX21zZy4gKi8KKyAgICB0c21TZWNSZWYgPSBwYXJtcy0+c2VjU3RhdGVSZWY7CisgICAgCisgICAgaWYgKHRzbVNlY1JlZikgeworICAgICAgICAvKiA0LjIsIHN0ZXAgMTogSWYgdGhlcmUgaXMgYSBzZWN1cml0eVN0YXRlUmVmZXJlbmNlIChSZXNwb25zZQorICAgICAgICAgICBvciBSZXBvcnQgbWVzc2FnZSksIHRoZW4gdGhpcyBTZWN1cml0eSBNb2RlbCB1c2VzIHRoZQorICAgICAgICAgICBjYWNoZWQgaW5mb3JtYXRpb24gcmF0aGVyIHRoYW4gdGhlIGluZm9ybWF0aW9uIHByb3ZpZGVkIGJ5CisgICAgICAgICAgIHRoZSBBU0kuICovCisKKyAgICAgICAgLyogNC4yLCBzdGVwIDE6IEV4dHJhY3QgdGhlIHRtU3RhdGVSZWZlcmVuY2UgZnJvbSB0aGUKKyAgICAgICAgICAgc2VjdXJpdHlTdGF0ZVJlZmVyZW5jZSBjYWNoZS4gKi8KKyAgICAgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKE5VTEwgIT0gdHNtU2VjUmVmLT50bVN0YXRlUmVmLCBTTk1QRVJSX0dFTkVSUik7CisgICAgICAgIHRtU3RhdGVSZWYgPSB0c21TZWNSZWYtPnRtU3RhdGVSZWY7CisKKyAgICAgICAgLyogNC4yIHN0ZXAgMTogU2V0IHRoZSB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgdG8gdGhlIHZhbHVlCisgICAgICAgICAgIG9mIHRoZSBleHRyYWN0ZWQgdG1UcmFuc3BvcnRTZWN1cml0eUxldmVsLiAqLworICAgICAgICB0bVN0YXRlUmVmLT5yZXF1ZXN0ZWRTZWN1cml0eUxldmVsID0gdG1TdGF0ZVJlZi0+dHJhbnNwb3J0U2VjdXJpdHlMZXZlbDsKKworICAgICAgICAvKiA0LjIgc3RlcCAxOiBTZXQgdGhlIHRtU2FtZVNlY3VyaXR5IHBhcmFtZXRlciBpbiB0aGUKKyAgICAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSB0byB0cnVlLiAqLworICAgICAgICB0bVN0YXRlUmVmLT5zYW1lU2VjdXJpdHkgPSBORVRTTk1QX1RNX1VTRV9TQU1FX1NFQ1VSSVRZOworCisgICAgICAgIC8qIDQuMiBzdGVwIDE6IFRoZSBjYWNoZWRTZWN1cml0eURhdGEgZm9yIHRoaXMgbWVzc2FnZSBjYW4KKyAgICAgICAgICAgbm93IGJlIGRpc2NhcmRlZC4gKi8KKyAgICAgICAgU05NUF9GUkVFKHBhcm1zLT5zZWNTdGF0ZVJlZik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogNC4yLCBzdGVwIDI6IElmIHRoZXJlIGlzIG5vIHNlY3VyaXR5U3RhdGVSZWZlcmVuY2UgKGUuZy4sIGEKKyAgICAgICAgICAgUmVxdWVzdC10eXBlIG9yIE5vdGlmaWNhdGlvbiBtZXNzYWdlKSwgdGhlbiBjcmVhdGUgYQorICAgICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGNhY2hlLiAqLworICAgICAgICB0bVN0YXRlUmVmID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpOworICAgICAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oTlVMTCAhPSB0bVN0YXRlUmVmLCBTTk1QRVJSX0dFTkVSUik7CisgICAgICAgIHRtU3RhdGVSZWZMb2NhbCA9IDE7CisKKyAgICAgICAgLyogWFhYOiB3ZSBkb24ndCBhY3R1YWxseSB1c2UgdGhpcyByZWFsbHkgaW4gb3VyIGltcGxlbWVudGF0aW9uICovCisgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBTZXQgdG1UcmFuc3BvcnREb21haW4gdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgIHRyYW5zcG9ydERvbWFpbiwgdG1UcmFuc3BvcnRBZGRyZXNzIHRvIHRoZSB2YWx1ZSBvZgorICAgICAgICAgICB0cmFuc3BvcnRBZGRyZXNzICovCisKKyAgICAgICAgLyogNC4yLCBzdGVwIDI6IGFuZCB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgIHNlY3VyaXR5TGV2ZWwuICovCisgICAgICAgIHRtU3RhdGVSZWYtPnJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgPSBwYXJtcy0+c2VjTGV2ZWw7CisKKyAgICAgICAgLyogNC4yLCBzdGVwIDI6IFNldCB0aGUgdHJhbnNhY3Rpb24tc3BlY2lmaWMgdG1TYW1lU2VjdXJpdHkKKyAgICAgICAgICAgcGFyYW1ldGVyIHRvIGZhbHNlLiAqLworICAgICAgICB0bVN0YXRlUmVmLT5zYW1lU2VjdXJpdHkgPSBORVRTTk1QX1RNX1NBTUVfU0VDVVJJVFlfTk9UX1JFUVVJUkVEOworCisgICAgICAgIGlmIChuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgpKSB7CisgICAgICAgICAgICAvKiBYWFg6IHByb2JhYmx5IHNob3VsZG4ndCBiZSBhIGhhcmQtY29kZWQgbGlzdCBvZgorICAgICAgICAgICAgICAgc3VwcG9ydGVkIHRyYW5zcG9ydHMgKi8KKyAgICAgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBJZiB0aGUgc25tcFRzbUNvbmZpZ3VyYXRpb25Vc2VQcmVmaXgKKyAgICAgICAgICAgICAgIG9iamVjdCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbiB1c2UgdGhlIHRyYW5zcG9ydERvbWFpbiB0bworICAgICAgICAgICAgICAgbG9vayB1cCB0aGUgY29ycmVzcG9uZGluZyBwcmVmaXguICovCisgICAgICAgICAgICBjb25zdCBjaGFyICpwcmVmaXg7CisgICAgICAgICAgICBpZiAoc3RybmNtcCgic3NoOiIscGFybXMtPnNlc3Npb24tPnBlZXJuYW1lLDQpID09IDApCisgICAgICAgICAgICAgICAgcHJlZml4ID0gInNzaDoiOworICAgICAgICAgICAgZWxzZSBpZiAoc3RybmNtcCgiZHRsczoiLHBhcm1zLT5zZXNzaW9uLT5wZWVybmFtZSw1KSA9PSAwKQorICAgICAgICAgICAgICAgIHByZWZpeCA9ICJkdGxzOiI7CisgICAgICAgICAgICBlbHNlIGlmIChzdHJuY21wKCJ0bHM6IixwYXJtcy0+c2Vzc2lvbi0+cGVlcm5hbWUsNCkgPT0gMCkKKyAgICAgICAgICAgICAgICBwcmVmaXggPSAidGxzOiI7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiA0LjIsIHN0ZXAgMjogSWYgdGhlIHByZWZpeCBsb29rdXAgZmFpbHMgZm9yIGFueQorICAgICAgICAgICAgICAgICAgIHJlYXNvbiwgdGhlbiB0aGUgc25tcFRzbVVua25vd25QcmVmaXhlcyBjb3VudGVyIGlzCisgICAgICAgICAgICAgICAgICAgaW5jcmVtZW50ZWQsIGFuIGVycm9yIGluZGljYXRpb24gaXMgcmV0dXJuZWQgdG8gdGhlCisgICAgICAgICAgICAgICAgICAgY2FsbGluZyBtb2R1bGUsIGFuZCBtZXNzYWdlIHByb2Nlc3Npbmcgc3RvcHMuICovCisgICAgICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVFNNX1NOTVBUU01VTktOT1dOUFJFRklYRVMpOworICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBJZiB0aGUgbG9va3VwIHN1Y2NlZWRzLCBidXQgdGhlcmUgaXMgbm8KKyAgICAgICAgICAgICAgIHByZWZpeCBpbiB0aGUgc2VjdXJpdHlOYW1lLCBvciB0aGUgcHJlZml4IHJldHVybmVkIGRvZXMKKyAgICAgICAgICAgICAgIG5vdCBtYXRjaCB0aGUgcHJlZml4IGluIHRoZSBzZWN1cml0eU5hbWUsIG9yIHRoZSBsZW5ndGgKKyAgICAgICAgICAgICAgIG9mIHRoZSBwcmVmaXggaXMgbGVzcyB0aGFuIDEgb3IgZ3JlYXRlciB0aGFuIDQgVVMtQVNDSUkKKyAgICAgICAgICAgICAgIGFscGhhLW51bWVyaWMgY2hhcmFjdGVycywgdGhlbiB0aGUKKyAgICAgICAgICAgICAgIHNubXBUc21JbnZhbGlkUHJlZml4ZXMgY291bnRlciBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IKKyAgICAgICAgICAgICAgIGluZGljYXRpb24gaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxpbmcgbW9kdWxlLCBhbmQKKyAgICAgICAgICAgICAgIG1lc3NhZ2UgcHJvY2Vzc2luZyBzdG9wcy4gKi8KKyAgICAgICAgICAgIGlmIChzdHJjaHIocGFybXMtPnNlY05hbWUsICc6JykgPT0gMCB8fAorICAgICAgICAgICAgICAgIHN0cmxlbihwcmVmaXgpKzEgPj0gcGFybXMtPnNlY05hbWVMZW4gfHwKKyAgICAgICAgICAgICAgICBzdHJuY21wKHBhcm1zLT5zZWNOYW1lLCBwcmVmaXgsIHN0cmxlbihwcmVmaXgpKSAhPSAwIHx8CisgICAgICAgICAgICAgICAgcGFybXMtPnNlY05hbWVbc3RybGVuKHByZWZpeCldICE9ICc6JykgeworICAgICAgICAgICAgICAgIC8qIE5vdGU6IHNpbmNlIHdlJ3JlIGFzc2lnaW5nIHRoZSBwcmVmaXhlcyBhYm92ZSB0aGUKKyAgICAgICAgICAgICAgICAgICBwcmVmaXggbGVuZ3RocyBhbHdheXMgbWVldCB0aGUgMS00IGNyaXRlcmlhICovCisgICAgICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVFNNX1NOTVBUU01JTlZBTElEUFJFRklYRVMpOworICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIDQuMiwgc3RlcCAyOiBTdHJpcCB0aGUgdHJhbnNwb3J0LXNwZWNpZmljIHByZWZpeCBhbmQKKyAgICAgICAgICAgICAgIHRyYWlsaW5nICc6JyBjaGFyYWN0ZXIgKFVTLUFTQ0lJIDB4M2EpIGZyb20gdGhlCisgICAgICAgICAgICAgICBzZWN1cml0eU5hbWUuICBTZXQgdG1TZWN1cml0eU5hbWUgdG8gdGhlIHZhbHVlIG9mCisgICAgICAgICAgICAgICBzZWN1cml0eU5hbWUuICovCisgICAgICAgICAgICBtZW1jcHkodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLAorICAgICAgICAgICAgICAgICAgIHBhcm1zLT5zZWNOYW1lICsgc3RybGVuKHByZWZpeCkgKyAxLAorICAgICAgICAgICAgICAgICAgIHBhcm1zLT5zZWNOYW1lTGVuIC0gc3RybGVuKHByZWZpeCkgLSAxKTsKKyAgICAgICAgICAgIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZUxlbiA9IHBhcm1zLT5zZWNOYW1lTGVuIC0gc3RybGVuKHByZWZpeCkgLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiA0LjIsIHN0ZXAgMjogSWYgdGhlIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IG9iamVjdCBpcworICAgICAgICAgICAgICAgc2V0IHRvIGZhbHNlLCB0aGVuIHNldCB0bVNlY3VyaXR5TmFtZSB0byB0aGUgdmFsdWUKKyAgICAgICAgICAgICAgIG9mIHNlY3VyaXR5TmFtZS4gKi8KKyAgICAgICAgICAgIG1lbWNweSh0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsIHBhcm1zLT5zZWNOYW1lLAorICAgICAgICAgICAgICAgICAgIHBhcm1zLT5zZWNOYW1lTGVuKTsKKyAgICAgICAgICAgIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZUxlbiA9IHBhcm1zLT5zZWNOYW1lTGVuOworICAgICAgICB9CisgICAgfQorCisgICAgLyogdHJ1bmNhdGUgdGhlIHNlY3VyaXR5IG5hbWUgd2l0aCBhICdcMCcgZm9yIHNhZmV0eSAqLworICAgIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZVt0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVMZW5dID0gJ1wwJzsKKworICAgIC8qIDQuMiwgc3RlcCAzOiBTZXQgc2VjdXJpdHlQYXJhbWV0ZXJzIHRvIGEgemVyby1sZW5ndGggT0NURVQKKyAgICAgKiAgU1RSSU5HICgnMDQwMCcpLgorICAgICAqLworICAgIERFQlVHRFVNUEhFQURFUigic2VuZCIsICJ0c20gc2VjdXJpdHkgcGFyYW1ldGVycyIpOworICAgIHJjID0gYXNuX3JlYWxsb2NfcmJ1aWxkX2hlYWRlcih3aG9sZU1zZywgd2hvbGVNc2dMZW4sIG9mZnNldCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKSAoQVNOX1VOSVZFUlNBTCB8IEFTTl9QUklNSVRJVkUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgQVNOX09DVEVUX1NUUiksIDApOworICAgIERFQlVHSU5ERU5UTEVTUygpOworICAgIGlmIChyYyA9PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiYnVpbGRpbmcgbXNnU2VjdXJpdHlQYXJhbWV0ZXJzIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgaWYgKHRtU3RhdGVSZWZMb2NhbCkKKyAgICAgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfVE9PX0xPTkc7CisgICAgfQorICAgIAorICAgIC8qIDQuMiwgc3RlcCA0OiBDb21iaW5lIHRoZSBtZXNzYWdlIHBhcnRzIGludG8gYSB3aG9sZU1zZyBhbmQKKyAgICAgICBjYWxjdWxhdGUgd2hvbGVNc2dMZW5ndGguCisgICAgICovCisgICAgd2hpbGUgKCgqd2hvbGVNc2dMZW4gLSAqb2Zmc2V0KSA8IHBhcm1zLT5nbG9iYWxEYXRhTGVuKSB7CisgICAgICAgIGlmICghYXNuX3JlYWxsb2Mod2hvbGVNc2csIHdob2xlTXNnTGVuKSkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsICJidWlsZGluZyBnbG9iYWwgZGF0YSBmYWlsZWQuXG4iKSk7CisgICAgICAgICAgICBpZiAodG1TdGF0ZVJlZkxvY2FsKQorICAgICAgICAgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1RPT19MT05HOworICAgICAgICB9CisgICAgfQorCisgICAgKm9mZnNldCArPSBwYXJtcy0+Z2xvYmFsRGF0YUxlbjsKKyAgICBtZW1jcHkoKndob2xlTXNnICsgKndob2xlTXNnTGVuIC0gKm9mZnNldCwKKyAgICAgICAgICAgcGFybXMtPmdsb2JhbERhdGEsIHBhcm1zLT5nbG9iYWxEYXRhTGVuKTsKKworICAgIC8qIDQuMiwgc3RlcCA1OiBUaGUgd2hvbGVNc2csIHdob2xlTXNnTGVuZ3RoLCBzZWN1cml0eVBhcmFtZXRlcnMsCisgICAgICAgYW5kIHRtU3RhdGVSZWZlcmVuY2UgYXJlIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nIE1lc3NhZ2UKKyAgICAgICBQcm9jZXNzaW5nIE1vZGVsIHdpdGggdGhlIHN0YXR1c0luZm9ybWF0aW9uIHNldCB0byBzdWNjZXNzLiAqLworCisgICAgLyogRm9yIHRoZSBOZXQtU05NUCBpbXBsZW1hbnRpb24gdGhhdCBhY3R1YWxseSBtZWFucyB3ZSBzdGFydAorICAgICAgIGVuY29kaW5nIHRoZSBmdWxsIHBhY2tldCBzZXF1ZW5jZSBmcm9tIGhlcmUgYmVmb3JlIHJldHVybmluZyBpdCAqLworCisgICAgLyoKKyAgICAgKiBUb3RhbCBwYWNrZXQgc2VxdWVuY2UuICAKKyAgICAgKi8KKyAgICByYyA9IGFzbl9yZWFsbG9jX3JidWlsZF9zZXF1ZW5jZSh3aG9sZU1zZywgd2hvbGVNc2dMZW4sIG9mZnNldCwgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyKSAoQVNOX1NFUVVFTkNFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX0NPTlNUUlVDVE9SKSwgKm9mZnNldCk7CisgICAgaWYgKHJjID09IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsICJidWlsZGluZyBtYXN0ZXIgcGFja2V0IHNlcXVlbmNlIGZhaWxlZC5cbiIpKTsKKyAgICAgICAgaWYgKHRtU3RhdGVSZWZMb2NhbCkKKyAgICAgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfVE9PX0xPTkc7CisgICAgfQorCisgICAgaWYgKHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhICYmCisgICAgICAgIHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhICE9IHRtU3RhdGVSZWYpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRzbTogbmVlZGVkIHRvIGZyZWUgdHJhbnNwb3J0IGRhdGFcbiIpOworICAgICAgICBTTk1QX0ZSRUUocGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEpOworICAgIH0KKworICAgIC8qIHB1dCB0aGUgdHJhbnNwb3J0IHN0YXRlIHJlZmVyZW5jZSBpbnRvIHRoZSBQRFUgZm9yIHRoZSB0cmFuc3BvcnQgKi8KKyAgICBwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSA9IG5ldHNubXBfbWVtZHVwKHRtU3RhdGVSZWYsIHNpemVvZigqdG1TdGF0ZVJlZikpOworICAgIGlmICghcGFybXMtPnBkdS0+dHJhbnNwb3J0X2RhdGEpCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0c206IG1hbGxvYyBmYWlsdXJlXG4iKTsKKyAgICBwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YV9sZW5ndGggPSBzaXplb2YoKnRtU3RhdGVSZWYpOworCisgICAgaWYgKHRtU3RhdGVSZWZMb2NhbCkKKyAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgIERFQlVHTVNHVEwoKCJ0c20iLCAiVFNNIHByb2Nlc3NpbmcgY29tcGxldGVkLlxuIikpOworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKgorICogdHNtX3Byb2Nlc3NfaW5fbXNnCisgKgorICogUGFyYW1ldGVyczoKKyAqCShTZWUgbGlzdCBiZWxvdy4uLikKKyAqCisgKiBSZXR1cm5zOgorICoJVFNNX0VSUl9OT19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgIE9uIHN1Y2Nlc3MuCisgKglUU01fRVJSX0dFTkVSSUNfRVJST1IKKyAqCVRTTV9FUlJfVU5TVVBQT1JURURfU0VDVVJJVFlfTEVWRUwKKyAqCisgKgorICogUHJvY2Vzc2VzIGFuIGluY29taW5nIG1lc3NhZ2UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK2ludAordHNtX3Byb2Nlc3NfaW5fbXNnKHN0cnVjdCBzbm1wX3NlY21vZF9pbmNvbWluZ19wYXJhbXMgKnBhcm1zKQoreworICAgIHVfY2hhciB0eXBlX3ZhbHVlOworICAgIHNpemVfdCByZW1haW5pbmc7CisgICAgdV9jaGFyICpkYXRhX3B0cjsKKyAgICBuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKnRtU3RhdGVSZWY7CisgICAgbmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSAqdHNtU2VjUmVmOworICAgIHVfY2hhciAgICAgICAgICBvdXJFbmdpbmVJRFtTTk1QX01BWF9FTkdfU0laRV07CisgICAgc3RhdGljIHNpemVfdCAgIG91ckVuZ2luZUlEX2xlbiA9IHNpemVvZihvdXJFbmdpbmVJRCk7CisgICAgCisgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMTogU2V0IHRoZSBzZWN1cml0eUVuZ2luZUlEIHRvIHRoZSBsb2NhbAorICAgICAgIHNubXBFbmdpbmVJRC4gKi8KKyAgICBvdXJFbmdpbmVJRF9sZW4gPQorICAgICAgICBzbm1wdjNfZ2V0X2VuZ2luZUlEKCh1X2NoYXIqKSBvdXJFbmdpbmVJRCwgb3VyRW5naW5lSURfbGVuKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4ob3VyRW5naW5lSURfbGVuICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3VyRW5naW5lSURfbGVuIDw9ICpwYXJtcy0+c2VjRW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBFUlJfR0VORVJSKTsKKyAgICBtZW1jcHkocGFybXMtPnNlY0VuZ2luZUlELCBvdXJFbmdpbmVJRCwgKnBhcm1zLT5zZWNFbmdpbmVJRExlbik7CisKKyAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAyOiBJZiB0bVN0YXRlUmVmZXJlbmNlIGRvZXMgbm90IHJlZmVyIHRvIGEKKyAgICAgICBjYWNoZSBjb250YWluaW5nIHZhbHVlcyBmb3IgdG1UcmFuc3BvcnREb21haW4sCisgICAgICAgdG1UcmFuc3BvcnRBZGRyZXNzLCB0bVNlY3VyaXR5TmFtZSwgYW5kCisgICAgICAgdG1UcmFuc3BvcnRTZWN1cml0eUxldmVsLCB0aGVuIHRoZSBzbm1wVHNtSW52YWxpZENhY2hlcyBjb3VudGVyCisgICAgICAgaXMgaW5jcmVtZW50ZWQsIGFuIGVycm9yIGluZGljYXRpb24gaXMgcmV0dXJuZWQgdG8gdGhlIGNhbGxpbmcKKyAgICAgICBtb2R1bGUsIGFuZCBTZWN1cml0eSBNb2RlbCBwcm9jZXNzaW5nIHN0b3BzIGZvciB0aGlzCisgICAgICAgbWVzc2FnZS4gKi8KKyAgICBpZiAoIXBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhIHx8CisgICAgICAgIHNpemVvZihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpICE9CisgICAgICAgIHBhcm1zLT5wZHUtPnRyYW5zcG9ydF9kYXRhX2xlbmd0aCkgeworICAgICAgICAvKiBpZiB3ZSdyZSBub3QgY29taW5nIGluIG92ZXIgYSBwcm9wZXIgdHJhbnNwb3J0OyBiYWlsISAqLworICAgICAgICBERUJVR01TR1RMKCgidHNtIiwiaW1wcm9wZXIgdHJhbnNwb3J0IGRhdGFcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICB0bVN0YXRlUmVmID0gKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqKSBwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YTsKKyAgICBwYXJtcy0+cGR1LT50cmFuc3BvcnRfZGF0YSA9IE5VTEw7CisKKyAgICBpZiAodG1TdGF0ZVJlZiA9PSBOVUxMIHx8CisgICAgICAgIC8qIG5vdCBuZWVkZWQ6IHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbiA9PSBOVUxMIHx8ICovCisgICAgICAgIC8qIG5vdCBuZWVkZWQ6IHRtU3RhdGVSZWYtPnRyYW5zcG9ydEFkZHJlc3MgPT0gTlVMTCB8fCAqLworICAgICAgICB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVbMF0gPT0gJ1wwJworICAgICAgICApIHsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVFNNX1NOTVBUU01JTlZBTElEQ0FDSEVTKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDM6IENvcHkgdGhlIHRtU2VjdXJpdHlOYW1lIHRvIHNlY3VyaXR5TmFtZS4gKi8KKyAgICBpZiAobmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVFNNX1VTRV9QUkVGSVgpKSB7CisgICAgICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDM6CisgICAgICAgICAgSWYgdGhlIHNubXBUc21Db25maWd1cmF0aW9uVXNlUHJlZml4IG9iamVjdCBpcyBzZXQgdG8gdHJ1ZSwgdGhlbgorICAgICAgICAgIHVzZSB0aGUgdG1UcmFuc3BvcnREb21haW4gdG8gbG9vayB1cCB0aGUgY29ycmVzcG9uZGluZyBwcmVmaXguCisgICAgICAgICovCisgICAgICAgIGNvbnN0IGNoYXIgKnByZWZpeCA9IE5VTEw7CisgICAgICAgIC8qCisgICAgICAgICAgcG9zc2liaWxpdGllczoKKyAgICAgICAgICAgfC0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS18CisgICAgICAgICAgIHwgc25tcFRMU1RDUERvbWFpbiAgIHwgdGxzOiAgfAorICAgICAgICAgICB8IHNubXBEVExTVURQRG9tYWluICB8IGR0bHM6IHwKKyAgICAgICAgICAgfCBzbm1wU1NIRG9tYWluICAgICAgfCBzc2g6ICB8CisgICAgICAgICAgIHwtLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tfAorICAgICAgICAqLworICAgICAgICAKKyAgICAgICAgaWYgKHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbiA9PSBOVUxMKSB7CisgICAgICAgICAgICAvKiBYWFg6IHNubXBUc21JbnZhbGlkQ2FjaGVzKysgPz8/ICovCisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKworICAgICAgICAvKiBYWFg6IGNhY2hlIGluIHNlc3Npb24hICovCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTgorICAgICAgICBpZiAobmV0c25tcF9vaWRfZXF1YWxzKG5ldHNubXBfc25tcFNTSERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NubXBTU0hEb21haW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW5MZW4pID09IDApIHsKKyAgICAgICAgICAgIHByZWZpeCA9ICJzc2giOworICAgICAgICB9CisjZW5kaWYgLyogIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4gKi8KKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisgICAgICAgIGlmIChuZXRzbm1wX29pZF9lcXVhbHMobmV0c25tcERUTFNVRFBEb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcERUTFNVRFBEb21haW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW5MZW4pID09IDApIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJlZml4ID0gImR0bHMiOworICAgICAgICB9CisjZW5kaWYgLyogTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4gKi8KKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKyAgICAgICAgaWYgKG5ldHNubXBfb2lkX2VxdWFscyhuZXRzbm1wVExTVENQRG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW5fbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW5MZW4pID09IDApIHsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgcHJlZml4ID0gInRscyI7CisgICAgICAgIH0KKyNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOICovCisKKyAgICAgICAgLyogU2VjdGlvbiA1LjIsIHN0ZXAgMzoKKyAgICAgICAgICBJZiB0aGUgcHJlZml4IGxvb2t1cCBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlbiB0aGUKKyAgICAgICAgICBzbm1wVHNtVW5rbm93blByZWZpeGVzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQsIGFuIGVycm9yCisgICAgICAgICAgaW5kaWNhdGlvbiBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGluZyBtb2R1bGUsIGFuZCBtZXNzYWdlCisgICAgICAgICAgcHJvY2Vzc2luZyBzdG9wcy4KKyAgICAgICAgKi8KKyAgICAgICAgaWYgKHByZWZpeCA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UU01fU05NUFRTTVVOS05PV05QUkVGSVhFUyk7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKworICAgICAgICAvKiBTZWN0aW9uIDUuMiwgc3RlcCAzOgorICAgICAgICAgIElmIHRoZSBsb29rdXAgc3VjY2VlZHMgYnV0IHRoZSBwcmVmaXggbGVuZ3RoIGlzIGxlc3MgdGhhbiAxIG9yCisgICAgICAgICAgZ3JlYXRlciB0aGFuIDQgb2N0ZXRzLCB0aGVuIHRoZSBzbm1wVHNtSW52YWxpZFByZWZpeGVzIGNvdW50ZXIKKyAgICAgICAgICBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IgaW5kaWNhdGlvbiBpcyByZXR1cm5lZCB0byB0aGUgY2FsbGluZworICAgICAgICAgIG1vZHVsZSwgYW5kIG1lc3NhZ2UgcHJvY2Vzc2luZyBzdG9wcy4KKyAgICAgICAgKi8KKyNpZmRlZiBOT1RfVVNJTkdfSEFSRENPREVEX1BSRUZJWEVTCisgICAgICAgIC8qIHRoZSBhYm92ZSBjb2RlIGFjdHVhbGx5IGVuc3VyZXMgdGhpcyB3aWxsIG5ldmVyIGhhcHBlbiBhcworICAgICAgICAgICB3ZSBkb24ndCBzdXBwb3J0IGEgZHluYW1pYyBwcmVmaXggZGF0YWJhc2Ugd2hlcmUgdGhpcyBtaWdodAorICAgICAgICAgICBoYXBwZW4uICovCisgICAgICAgIGlmIChzdHJsZW4ocHJlZml4KSA8IDEgfHwgc3RybGVuKHByZWZpeCkgPiA0KSB7CisgICAgICAgICAgICAvKiBYWFg6IHNubXBUc21JbnZhbGlkUHJlZml4ZXMrKyAqLworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisjZW5kaWYKKyAgICAgICAgCisgICAgICAgIC8qIFNlY3Rpb24gNS4yLCBzdGVwIDM6CisgICAgICAgICAgU2V0IHRoZSBzZWN1cml0eU5hbWUgdG8gYmUgdGhlIGNvbmNhdGVuYXRpb24gb2YgdGhlIHByZWZpeCwgYQorICAgICAgICAgICc6JyBjaGFyYWN0ZXIgKFVTLUFTQ0lJIDB4M2EpLCBhbmQgdGhlIHRtU2VjdXJpdHlOYW1lLgorICAgICAgICAqLworICAgICAgICBzbnByaW50ZihwYXJtcy0+c2VjTmFtZSwgKnBhcm1zLT5zZWNOYW1lTGVuLAorICAgICAgICAgICAgICAgICAiJXM6JXMiLCBwcmVmaXgsIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogaWYgdGhlIHVzZSBwcmVmaXggZmxhZyB3YXNuJ3Qgc2V0LCBkbyBhIHN0cmFpZ2h0IGNvcHkgKi8KKyAgICAgICAgc3RybmNweShwYXJtcy0+c2VjTmFtZSwgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLCAqcGFybXMtPnNlY05hbWVMZW4pOworICAgIH0KKworICAgIC8qIHNldCB0aGUgbGVuZ3RoIG9mIHRoZSBzZWN1cml0eSBuYW1lICovCisgICAgKnBhcm1zLT5zZWNOYW1lTGVuID0gc3RybGVuKHBhcm1zLT5zZWNOYW1lKTsKKyAgICBERUJVR01TR1RMKCgidHNtIiwgInVzZXI6ICVzLyVkXG4iLCBwYXJtcy0+c2VjTmFtZSwgKGludCkqcGFybXMtPnNlY05hbWVMZW4pKTsKKworICAgIC8qIFNlY3Rpb24gNS4yIFN0ZXAgNDoKKyAgICAgICBDb21wYXJlIHRoZSB2YWx1ZSBvZiB0bVRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwgaW4gdGhlCisgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSB0byB0aGUgdmFsdWUgb2YgdGhlIHNlY3VyaXR5TGV2ZWwKKyAgICAgICBwYXJhbWV0ZXIgcGFzc2VkIGluIHRoZSBwcm9jZXNzSW5jb21pbmdNc2cgQVNJLiAgSWYgc2VjdXJpdHlMZXZlbAorICAgICAgIHNwZWNpZmllcyBwcml2YWN5IChQcml2KSBhbmQgdG1UcmFuc3BvcnRTZWN1cml0eUxldmVsIHNwZWNpZmllcworICAgICAgIG5vIHByaXZhY3kgKG5vUHJpdiksIG9yIGlmIHNlY3VyaXR5TGV2ZWwgc3BlY2lmaWVzIGF1dGhlbnRpY2F0aW9uCisgICAgICAgKGF1dGgpIGFuZCB0bVRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwgc3BlY2lmaWVzIG5vIGF1dGhlbnRpY2F0aW9uCisgICAgICAgKG5vQXV0aCkgd2FzIHByb3ZpZGVkIGJ5IHRoZSBUcmFuc3BvcnQgTW9kZWwsIHRoZW4gdGhlCisgICAgICAgc25tcFRzbUluYWRlcXVhdGVTZWN1cml0eUxldmVscyBjb3VudGVyIGlzIGluY3JlbWVudGVkLCBhbiBlcnJvcgorICAgICAgIGluZGljYXRpb24gKHVuc3VwcG9ydGVkU2VjdXJpdHlMZXZlbCkgdG9nZXRoZXIgd2l0aCB0aGUgT0lEIGFuZAorICAgICAgIHZhbHVlIG9mIHRoZSBpbmNyZW1lbnRlZCBjb3VudGVyIGlzIHJldHVybmVkIHRvIHRoZSBjYWxsaW5nCisgICAgICAgbW9kdWxlLCBhbmQgVHJhbnNwb3J0IFNlY3VyaXR5IE1vZGVsIHByb2Nlc3Npbmcgc3RvcHMgZm9yIHRoaXMKKyAgICAgICBtZXNzYWdlLiovCisgICAgaWYgKHBhcm1zLT5zZWNMZXZlbCA+IHRtU3RhdGVSZWYtPnRyYW5zcG9ydFNlY3VyaXR5TGV2ZWwpIHsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVFNNX1NOTVBUU01JTkFERVFVQVRFU0VDVVJJVFlMRVZFTFMpOworICAgICAgICBERUJVR01TR1RMKCgidHNtIiwgImluYWRlcXVhdGUgc2VjdXJpdHkgbGV2ZWw6ICVkXG4iLCBwYXJtcy0+c2VjTGV2ZWwpKTsKKyAgICAgICAgLyogbmV0LXNubXAgcmV0dXJucyBlcnJvciBjb2RlcyBub3QgT0lEcywgd2hpY2ggYXJlIGRlYWx0IHdpdGggbGF0ZXIgKi8KKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfVU5TVVBQT1JURURfU0VDX0xFVkVMOworICAgIH0KKworICAgIC8qIFNlY3Rpb24gNS4yIFN0ZXAgNQorICAgICAgIFRoZSB0bVN0YXRlUmVmZXJlbmNlIGlzIGNhY2hlZCBhcyBjYWNoZWRTZWN1cml0eURhdGEgc28gdGhhdCBhCisgICAgICAgcG9zc2libGUgcmVzcG9uc2UgdG8gdGhpcyBtZXNzYWdlIHdpbGwgdXNlIHRoZSBzYW1lIHNlY3VyaXR5CisgICAgICAgcGFyYW1ldGVycy4gIFRoZW4gc2VjdXJpdHlTdGF0ZVJlZmVyZW5jZSBpcyBzZXQgZm9yIHN1YnNlcXVlbnQKKyAgICAgICByZWZlcmVuY2VzIHRvIHRoaXMgY2FjaGVkIGRhdGEuCisgICAgKi8KKyAgICBpZiAoTlVMTCA9PSAqcGFybXMtPnNlY1N0YXRlUmVmKSB7CisgICAgICAgIHRzbVNlY1JlZiA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90c21TZWN1cml0eVJlZmVyZW5jZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHNtU2VjUmVmID0gKnBhcm1zLT5zZWNTdGF0ZVJlZjsKKyAgICB9CisKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oTlVMTCAhPSB0c21TZWNSZWYsIFNOTVBFUlJfR0VORVJSKTsKKworICAgICpwYXJtcy0+c2VjU3RhdGVSZWYgPSB0c21TZWNSZWY7CisgICAgdHNtU2VjUmVmLT50bVN0YXRlUmVmID0gdG1TdGF0ZVJlZjsKKworICAgIC8qIElmIHRoaXMgZGlkIG5vdCBjb21lIHRocm91Z2ggYSB0dW5uZWxlZCBjb25uZWN0aW9uLCB0aGlzCisgICAgICAgc2VjdXJpdHkgbW9kZWwgaXMgaW5hcHByb3ByaWF0ZSAoYW5kIHdvdWxkIGJlIGEgSFVHRSBzZWN1cml0eQorICAgICAgIGhvbGUgdG8gYXNzdW1lIG90aGVyd2lzZSkuICBUaGlzIGlzIGZ1bmN0aW9uYWxseSBhIGRvdWJsZSBjaGVjaworICAgICAgIHNpbmNlIHRoZSBwZHUgd291bGRuJ3QgaGF2ZSB0cmFuc3BvcnQgZGF0YSBvdGhlcndpc2UuICBCdXQgdGhpcworICAgICAgIGlzIHNhZmVyIHRob3VnaCBpcyBmdW5jdGlvbmFsbHkgYW4gZXh0cmEgc3RlcCBiZXlvbmQgdGhlIFRTTQorICAgICAgIFJGQy4gKi8KKyAgICBERUJVR01TR1RMKCgidHNtIiwiY2hlY2tpbmcgaG93IHdlIGdvdCBoZXJlXG4iKSk7CisgICAgaWYgKCEocGFybXMtPnBkdS0+ZmxhZ3MgJiBVQ0RfTVNHX0ZMQUdfVFVOTkVMRUQpKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCIgIHBkdSBub3QgdHVubmVsZWRcbiIpKTsKKyAgICAgICAgaWYgKCEocGFybXMtPnNlc3MtPmZsYWdzICYgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19UVU5ORUxFRCkpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCIgIHNlc3Npb24gbm90IHR1bm5lbGVkXG4iKSk7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fQVVUSEVOVElDQVRJT05GQUlMVVJFOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJ0c20iLCIgIGJ1dCBzZXNzaW9uIGlzIHR1bm5lbGVkXG4iKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRzbSIsIiAgdHVubmVsZWRcbiIpKTsKKyAgICB9CisKKyAgICAvKiBTZWN0aW9uIDUuMiwgU3RlcCA2OgorICAgICAgIFRoZSBzY29wZWRQRFUgY29tcG9uZW50IGlzIGV4dHJhY3RlZCBmcm9tIHRoZSB3aG9sZU1zZy4gKi8KKyAgICAvKgorICAgICAqIEVhdCB0aGUgZmlyc3Qgb2N0ZXQgaGVhZGVyLgorICAgICAqLworICAgIHJlbWFpbmluZyA9IHBhcm1zLT53aG9sZU1zZ0xlbiAtIChwYXJtcy0+c2VjUGFyYW1zIC0gcGFybXMtPndob2xlTXNnKTsKKyAgICBpZiAoKGRhdGFfcHRyID0gYXNuX3BhcnNlX3NlcXVlbmNlKHBhcm1zLT5zZWNQYXJhbXMsICZyZW1haW5pbmcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnR5cGVfdmFsdWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFTTl9VTklWRVJTQUwgfCBBU05fUFJJTUlUSVZFIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVNOX09DVEVUX1NUUiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInRzbSBmaXJzdCBvY3RldCIpKSA9PSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFJFVFVSTiBwYXJzZSBlcnJvciAKKyAgICAgICAgICovCisgICAgICAgIHJldHVybiBTTk1QRVJSX0FTTl9QQVJTRV9FUlI7CisgICAgfQorICAgIAorICAgICpwYXJtcy0+c2NvcGVkUGR1ID0gZGF0YV9wdHI7CisgICAgKnBhcm1zLT5zY29wZWRQZHVMZW4gPSBwYXJtcy0+d2hvbGVNc2dMZW4gLSAoZGF0YV9wdHIgLSBwYXJtcy0+d2hvbGVNc2cpOworCisgICAgLyogU2VjdGlvbiA1LjIsIFN0ZXAgNzoKKyAgICAgICBUaGUgbWF4U2l6ZVJlc3BvbnNlU2NvcGVkUERVIGlzIGNhbGN1bGF0ZWQuICBUaGlzIGlzIHRoZSBtYXhpbXVtCisgICAgICAgc2l6ZSBhbGxvd2VkIGZvciBhIHNjb3BlZFBEVSBmb3IgYSBwb3NzaWJsZSBSZXNwb25zZSBtZXNzYWdlLgorICAgICAqLworICAgICpwYXJtcy0+bWF4U2l6ZVJlc3BvbnNlID0gcGFybXMtPm1heE1zZ1NpemU7IC8qIFhYWCAqLworCisgICAgLyogU2VjdGlvbiA1LjIsIFN0ZXAgODoKKyAgICAgICBUaGUgc3RhdHVzSW5mb3JtYXRpb24gaXMgc2V0IHRvIHN1Y2Nlc3MgYW5kIGEgcmV0dXJuIGlzIG1hZGUgdG8KKyAgICAgICB0aGUgY2FsbGluZyBtb2R1bGUgcGFzc2luZyBiYWNrIHRoZSBPVVQgcGFyYW1ldGVycyBhcyBzcGVjaWZpZWQKKyAgICAgICBpbiB0aGUgcHJvY2Vzc0luY29taW5nTXNnIEFTSS4KKyAgICAqLworICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3NubXB1c20uYyBiL3NubXBsaWIvc25tcHVzbS5jCmluZGV4IDM4OWI2NzcuLjZhOWNlYzMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcHVzbS5jCisrKyBiL3NubXBsaWIvc25tcHVzbS5jCkBAIC0yMiwyMSArMjIsMTUgQEAKICAqLwogCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KIAogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZmRlZiBIQVZFX1NURExJQl9ICiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjZW5kaWYKICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTc4LDYgKzcyLDExIEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3NlY21vZC5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcHVzbS5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNtX2FsbCwgbGlibmV0c25tcCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1c21fc3VwcG9ydCwgdXNtX2FsbCkKKworbmV0c25tcF9mZWF0dXJlX3JlcXVpcmUodXNtX3N1cHBvcnQpCisKIG9pZCAgICAgICAgICAgICB1c21Ob0F1dGhQcm90b2NvbFsxMF0gPSB7IDEsIDMsIDYsIDEsIDYsIDMsIDEwLCAxLCAxLCAxIH07CiAjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKIG9pZCAgICAgICAgICAgICB1c21ITUFDTUQ1QXV0aFByb3RvY29sWzEwXSA9CkBAIC05Niw2ICs5NSwxNiBAQAogc3RhdGljIHVfaW50ICAgIGR1bW15X2V0aW1lLCBkdW1teV9lYm9vdDsgICAgICAgLyogRm9yIElTRU5HSU5FS05PV04oKS4gKi8KIAogLyoKKyAqIFNldCB1cCBkZWZhdWx0IHNubXB2MyBwYXJhbWV0ZXIgdmFsdWUgc3RvcmFnZS4KKyAqLworI2lmZGVmIE5FVFNOTVBfU0VDTU9EX1VTTQorc3RhdGljIGNvbnN0IG9pZCAqZGVmYXVsdEF1dGhUeXBlID0gTlVMTDsKK3N0YXRpYyBzaXplX3QgICBkZWZhdWx0QXV0aFR5cGVMZW4gPSAwOworc3RhdGljIGNvbnN0IG9pZCAqZGVmYXVsdFByaXZUeXBlID0gTlVMTDsKK3N0YXRpYyBzaXplX3QgICBkZWZhdWx0UHJpdlR5cGVMZW4gPSAwOworI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLworCisvKgogICogR2xvYmFscy4KICAqLwogc3RhdGljIHVfaW50ICAgIHNhbHRfaW50ZWdlcjsKQEAgLTE2NSw2ICsxNzQsMjEgQEAKIH0KIAogCitpbnQKK2ZyZWVfZW5naW5ldGltZV9vbl9zaHV0ZG93bihpbnQgbWFqb3JpZCwgaW50IG1pbm9yaWQsIHZvaWQgKnNlcnZlcmFyZywKKwkJCSAgICB2b2lkICpjbGllbnRhcmcpCit7CisgICAgdV9jaGFyIGVuZ2luZUlEW1NOTVBfTUFYX0VOR19TSVpFXTsKKyAgICBzaXplX3QgZW5naW5lSURfbGVuID0gc2l6ZW9mKGVuZ2luZUlEKTsKKworICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAiZnJlZSBlbmdpbmV0aW1lIGNhbGxiYWNrIGNhbGxlZFxuIikpOworCisgICAgZW5naW5lSURfbGVuID0gc25tcHYzX2dldF9lbmdpbmVJRChlbmdpbmVJRCwgZW5naW5lSURfbGVuKTsKKyAgICBpZiAoZW5naW5lSURfbGVuID4gMCkKKwlmcmVlX2VuZ2luZXRpbWUoZW5naW5lSUQsIGVuZ2luZUlEX2xlbik7CisgICAgcmV0dXJuIDA7Cit9CisKIHN0cnVjdCB1c21TdGF0ZVJlZmVyZW5jZSAqCiB1c21fbWFsbG9jX3VzbVN0YXRlUmVmZXJlbmNlKHZvaWQpCiB7CkBAIC01MDIsNyArNTI2LDcgQEAKICAgICAgICAgICAgICAgICAgICAgZW5nQnRsZW4sICAgLyogICBmb3IgZmllbGRzIHdpdGhpbiAgICAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICAgIGVuZ1RtbGVuLCAgIC8qICAgbXNnU2VjdXJpdHlQYXJhbWV0ZXJzIHBvcnRpb24gb2YgICAgICAqLwogICAgICAgICAgICAgICAgICAgICBuYW1lbGVuLCAgICAvKiAgIFNOTVB2M01lc3NhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICAgICAgYXV0aGxlbiwgcHJpdmxlbjsKKyAgICAgICAgICAgICAgICAgICAgYXV0aGxlbiwgcHJpdmxlbiwgcmV0OwogCiAgICAgLyoKICAgICAgKiBJZiBkb2luZyBhdXRoZW50aWNhdGlvbiwgbXNnQXV0aFBhcm1MZW4gPSAxMiBlbHNlIG1zZ0F1dGhQYXJtTGVuID0gMC4KQEAgLTUxOCw3ICs1NDIsNyBAQAogICAgICAqIENhbGN1bGF0ZSBsZW5ndGhzLgogICAgICAqLwogICAgIGlmICgoZW5nSURsZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsIHNlY0VuZ2luZUlETGVuKSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIHNlY0VuZ2luZUlETGVuKSkgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIApAQCAtNTM0LDMxICs1NTgsMzUgQEAKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAotICAgIGlmICgobmFtZWxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLCAwLCBzZWNOYW1lTGVuKSkgPT0gLTEpIHsKKyAgICBpZiAoKG5hbWVsZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgc2VjTmFtZUxlbikpID09IC0xKSB7CiAgICAgICAgIHJldHVybiAtMTsKICAgICB9CiAKICAgICBpZiAoKGF1dGhsZW4gPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgKm1zZ0F1dGhQYXJtTGVuKSkgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKm1zZ0F1dGhQYXJtTGVuKSkgPT0gLTEpIHsKICAgICAgICAgcmV0dXJuIC0xOwogICAgIH0KIAogICAgIGlmICgocHJpdmxlbiA9IGFzbl9wcmVkaWN0X2xlbmd0aChBU05fT0NURVRfU1RSLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAqbXNnUHJpdlBhcm1MZW4pKSA9PSAtMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAqbXNnUHJpdlBhcm1MZW4pKSA9PSAtMSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQogCiAgICAgKnNlcV9sZW4gPQogICAgICAgICBlbmdJRGxlbiArIGVuZ0J0bGVuICsgZW5nVG1sZW4gKyBuYW1lbGVuICsgYXV0aGxlbiArIHByaXZsZW47CiAKLSAgICBpZiAoKCpvdHN0bGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9TRVFVRU5DRSwgMCwgKnNlcV9sZW4pKSA9PSAtMSkgeworICAgIGlmICgocmV0ID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9TRVFVRU5DRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKnNlcV9sZW4pKSA9PSAtMSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgICpvdHN0bGVuID0gKHNpemVfdClyZXQ7CiAKLSAgICBpZiAoKCptc2dTZWNQYXJtTGVuID0gYXNuX3ByZWRpY3RfbGVuZ3RoKEFTTl9PQ1RFVF9TVFIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwLCAqb3RzdGxlbikpID09IC0xKSB7CisgICAgaWYgKChyZXQgPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgKm90c3RsZW4pKSA9PSAtMSkgewogICAgICAgICByZXR1cm4gLTE7CiAgICAgfQorICAgICptc2dTZWNQYXJtTGVuID0gKHNpemVfdClyZXQ7CiAKICAgICAqYXV0aFBhcmFtc09mZnNldCA9IGdsb2JhbERhdGFMZW4gKyArKCptc2dTZWNQYXJtTGVuIC0gKnNlcV9sZW4pCiAgICAgICAgICsgZW5nSURsZW4gKyBlbmdCdGxlbiArIGVuZ1RtbGVuICsgbmFtZWxlbgpAQCAtNTgzLDEwICs2MTEsMTAgQEAKICAgICBpZiAoc2VjTGV2ZWwgPT0gU05NUF9TRUNfTEVWRUxfQVVUSFBSSVYpIHsKICAgICAgICAgc2NvcGVkUGR1TGVuID0gUk9VTkRVUDgoc2NvcGVkUGR1TGVuKTsKIAotICAgICAgICBpZiAoKCpkYXRhbGVuID0KLSAgICAgICAgICAgICBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwgMCwgc2NvcGVkUGR1TGVuKSkgPT0gLTEpIHsKKyAgICAgICAgaWYgKChyZXQgPSBhc25fcHJlZGljdF9sZW5ndGgoQVNOX09DVEVUX1NUUiwgTlVMTCwgc2NvcGVkUGR1TGVuKSkgPT0gLTEpIHsKICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgfQorICAgICAgICAqZGF0YWxlbiA9IChzaXplX3QpcmV0OwogICAgIH0gZWxzZSB7CiAgICAgICAgICpkYXRhbGVuID0gc2NvcGVkUGR1TGVuOwogICAgIH0KQEAgLTEzODcsNyArMTQxNSw3IEBACiAgICAgc2l6ZV90ICAgICAgICAgIHNwX29mZnNldCA9IDAsIG1hY19vZmZzZXQgPSAwOwogICAgIGludCAgICAgICAgICAgICByYyA9IDA7CiAKLSAgICBERUJVR01TR1RMKCgidXNtIiwgIlVTTSBwcm9jZXNzaW5nIGhhcyBiZWd1biAob2Zmc2V0ICVkKVxuIiwgKm9mZnNldCkpOworICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVVNNIHByb2Nlc3NpbmcgaGFzIGJlZ3VuIChvZmZzZXQgJWQpXG4iLCAoaW50KSpvZmZzZXQpKTsKIAogICAgIGlmIChzZWNTdGF0ZVJlZiAhPSBOVUxMKSB7CiAgICAgICAgIC8qCkBAIC0xNTE1LDcgKzE1NDMsNyBAQAogICAgICAgICBpZiAoKGNpcGhlcnRleHQgPSAodV9jaGFyICopIG1hbGxvYyhjaXBoZXJ0ZXh0bGVuKSkgPT0gTlVMTCkgewogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY291bGRuJ3QgbWFsbG9jICVkIGJ5dGVzIGZvciBlbmNyeXB0ZWQgUERVXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgY2lwaGVydGV4dGxlbikpOworICAgICAgICAgICAgICAgICAgICAgICAgKGludCljaXBoZXJ0ZXh0bGVuKSk7CiAgICAgICAgICAgICB1c21fZnJlZV91c21TdGF0ZVJlZmVyZW5jZShzZWNTdGF0ZVJlZik7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7CiAgICAgICAgIH0KQEAgLTE1OTAsNiArMTYxOCw3IEBACiAgICAgICAgICAgICBTTk1QX0ZSRUUoY2lwaGVydGV4dCk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fRU5DUllQVElPTkVSUk9SOwogICAgICAgICB9CisKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKICAgICAgICAgaWYgKGRlYnVnX2lzX3Rva2VuX3JlZ2lzdGVyZWQoInVzbS9kdW1wIikgPT0gU05NUEVSUl9TVUNDRVNTKSB7CiAgICAgICAgICAgICBkdW1wX2NodW5rKCJ1c20vZHVtcCIsICJzYWx0ICsgRW5jcnlwdGVkIGZvcm06ICIsIHNhbHQsCkBAIC0xOTkxLDcgKzIwMjAsNyBAQAogICAgIC8qCiAgICAgICogRklYIC0tIGRvZXNuJ3QgdGhpcyBhbHNvIGluZGljYXRlIGEgYnVmZmVyIG92ZXJydW4/CiAgICAgICovCi0gICAgaWYgKChpbnQpIG9yaWdOYW1lTGVuIDwgKnNlY05hbWVMZW4gKyAxKSB7CisgICAgaWYgKG9yaWdOYW1lTGVuIDwgKnNlY05hbWVMZW4gKyAxKSB7CiAgICAgICAgIC8qCiAgICAgICAgICAqIFJFVFVSTiBwYXJzZSBlcnJvciwgYnV0IGl0J3MgcmVhbGx5IGEgcGFyYW1ldGVyIGVycm9yIAogICAgICAgICAgKi8KQEAgLTIxMzcsNyArMjE2Niw3IEBACiAgICAgLyoKICAgICAgKiBUaGlzIGlzIGEgbG9jYWwgcmVmZXJlbmNlLgogICAgICAqLwotICAgIGlmICgoaW50KSBzZWNFbmdpbmVJRExlbiA9PSBteUlETGVuZ3RoCisgICAgaWYgKHNlY0VuZ2luZUlETGVuID09IG15SURMZW5ndGgKICAgICAgICAgJiYgbWVtY21wKHNlY0VuZ2luZUlELCBteUlELCBteUlETGVuZ3RoKSA9PSAwKSB7CiAgICAgICAgIHVfaW50ICAgICAgICAgICB0aW1lX2RpZmZlcmVuY2UgPSBteVRpbWUgPiB0aW1lX3VpbnQgPwogICAgICAgICAgICAgbXlUaW1lIC0gdGltZV91aW50IDogdGltZV91aW50IC0gbXlUaW1lOwpAQCAtMjE0NSwxMSArMjE3NCw3IEBACiAgICAgICAgIGlmIChib290c191aW50ID09IEVOR0lORUJPT1RfTUFYCiAgICAgICAgICAgICB8fCBib290c191aW50ICE9IG15Qm9vdHMKICAgICAgICAgICAgIHx8IHRpbWVfZGlmZmVyZW5jZSA+IFVTTV9USU1FX1dJTkRPVykgewotICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTTk9USU5USU1FV0lORE9XUykgPT0KLSAgICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNOT1RJTlRJTUVXSU5ET1dTKTsKIAogICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiYm9vdF91aW50ICV1IG15Qm9vdHMgJXUgdGltZV9kaWZmICV1ID0+IG5vdCBpbiB0aW1lIHdpbmRvd1xuIiwKQEAgLTIzNjIsMTYgKzIzODcsMTAgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBUaGlzIGluZGljYXRlcyBhIGRlY3J5cHRpb25FcnJvci4gIAogICAgICAgICAgICAgICovCi0gICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKSA9PQotICAgICAgICAgICAgICAgIDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUjsKICAgICAgICAgfQotICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOQVNOUEFSU0VFUlJTKSA9PSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICB9CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1NOTVBJTkFTTlBBUlNFRVJSUyk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9QQVJTRUVSUk9SOwogICAgIH0KIApAQCAtMjM4MiwxMCArMjQwMSw3IEBACiAgICAgICogY2FsbGluZyBtb2R1bGUuCiAgICAgICovCiAgICAgaWYgKChzZWNMZXZlbCA9PSBTTk1QX1NFQ19MRVZFTF9BVVRIUFJJVikgJiYgKHNhbHRfbGVuZ3RoICE9IDgpKSB7Ci0gICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpID09IAotICAgICAgICAgICAgMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgfQorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU0RFQ1JZUFRJT05FUlJPUlMpOwogICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fREVDUllQVElPTkVSUk9SOwogICAgIH0KIApAQCAtMjQzMywxMSArMjQ0OSw3IEBACiAgICAgICAgICghc2VzcyAmJiAobXNnX2ZsYWdzICYgU05NUF9NU0dfRkxBR19SUFJUX0JJVCkpKSB7CiAgICAgICAgIGlmIChJU0VOR0lORUtOT1dOKHNlY0VuZ2luZUlELCAqc2VjRW5naW5lSURMZW4pID09IEZBTFNFKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIlVua25vd24gRW5naW5lIElELlxuIikpOwotICAgICAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTVU5LTk9XTkVOR0lORUlEUykgPT0KLSAgICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNVTktOT1dORU5HSU5FSURTKTsKICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9VTktOT1dORU5HSU5FSUQ7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewpAQCAtMjQ2MSw5ICsyNDczLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCFzZXNzKSkgPyAwIDogMSkpKQogICAgICAgICA9PSBOVUxMKSB7CiAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVW5rbm93biBVc2VyKCVzKVxuIiwgc2VjTmFtZSkpOwotICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNVTktOT1dOVVNFUk5BTUVTKSA9PSAwKSB7Ci0gICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIHRvIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICB9CisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTVU5LTk9XTlVTRVJOQU1FUyk7CiAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9VTktOT1dOU0VDVVJJVFlOQU1FOwogICAgIH0KIApAQCAtMjQ4MSwxMCArMjQ5MSw3IEBACiAgICAgaWYgKDEgPT0gcmMpIHsKICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJVbnN1cHBvcnRlZCBTZWN1cml0eSBMZXZlbCAoJWQpLlxuIiwKICAgICAgICAgICAgICAgICAgICAgc2VjTGV2ZWwpKTsKLSAgICAgICAgaWYgKHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYwotICAgICAgICAgICAgKFNUQVRfVVNNU1RBVFNVTlNVUFBPUlRFRFNFQ0xFVkVMUykgPT0gMCkgewotICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgfQorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1VOU1VQUE9SVEVEU0VDTEVWRUxTKTsKICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX1VOU1VQUE9SVEVEU0VDVVJJVFlMRVZFTDsKICAgICB9IGVsc2UgaWYgKHJjICE9IDApIHsKICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICJVbmtub3duIGlzc3VlLlxuIikpOwpAQCAtMjUwMiwxMCArMjUwOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZSwgc2lnbmF0dXJlX2xlbmd0aCkKICAgICAgICAgICAgICE9IFNOTVBfRVJSX05PRVJST1IpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiVmVyaWZpY2F0aW9uIGZhaWxlZC5cbiIpKTsKLSAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9VU01TVEFUU1dST05HRElHRVNUUykgPT0gMCkgewotICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTV1JPTkdESUdFU1RTKTsKIAkgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yICVzXG4iLAogCQkJCXVzZXItPm5hbWUpOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0FVVEhFTlRJQ0FUSU9ORkFJTFVSRTsKQEAgLTI1OTYsOSArMjYwMCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJlbmNyeXB0ZWQgc1BEVSIpKSA9PSBOVUxMKSB7CiAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLAogICAgICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB3aGlsZSBwYXJzaW5nIGVuY3J5cHRlZCBzUERVLiIpKTsKLSAgICAgICAgICAgIGlmIChzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9TTk1QSU5BU05QQVJTRUVSUlMpID09IDApIHsKLSAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidXNtIiwgIiVzXG4iLCAiRmFpbGVkIGluY3JlbWVudCBzdGF0aXN0aWMuIikpOwotICAgICAgICAgICAgfQorICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfU05NUElOQVNOUEFSU0VFUlJTKTsKICAgICAgICAgICAgIHVzbV9mcmVlX3VzbVN0YXRlUmVmZXJlbmNlKCpzZWNTdGF0ZVJlZik7CiAgICAgICAgICAgICAqc2VjU3RhdGVSZWYgPSBOVUxMOwogICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX1BBUlNFRVJST1I7CkBAIC0yNjE3LDEyICsyNjE5LDkgQEAKIAogICAgICAgICAgICAgaWYgKHJlbWFpbmluZyAlIDggIT0gMCkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaXBoZXJ0ZXh0IGlzICVsdSBieXRlcywgbm90IGFuIGludGVnZXIgbXVsdGlwbGUgb2YgOCAocmVtICVkKVxuIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1haW5pbmcsIHJlbWFpbmluZyAlIDgpKTsKLSAgICAgICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKSA9PQotICAgICAgICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJDaXBoZXJ0ZXh0IGlzICVsdSBieXRlcywgbm90IGFuIGludGVnZXIgbXVsdGlwbGUgb2YgOCAocmVtICVsdSlcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpcmVtYWluaW5nLCAodW5zaWduZWQgbG9uZylyZW1haW5pbmcgJSA4KSk7CisgICAgICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKTsKICAgICAgICAgICAgICAgICB1c21fZnJlZV91c21TdGF0ZVJlZmVyZW5jZSgqc2VjU3RhdGVSZWYpOwogICAgICAgICAgICAgICAgICpzZWNTdGF0ZVJlZiA9IE5VTEw7CiAgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfVVNNX0RFQ1JZUFRJT05FUlJPUjsKQEAgLTI2MzIsMTAgKzI2MzEsNyBAQAogCiAgICAgICAgICAgICBpZiAoICF1c2VyLT5wcml2S2V5ICkgewogICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiTm8gcHJpdmFjeSBwYXNzIHBocmFzZSBmb3IgJXNcbiIsIHVzZXItPnNlY05hbWUpKTsKLSAgICAgICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKSA9PQotICAgICAgICAgICAgICAgICAgICAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgaW5jcmVtZW50IHN0YXRpc3RpYy4iKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyk7CiAgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNtU3RhdGVSZWZlcmVuY2UoKnNlY1N0YXRlUmVmKTsKICAgICAgICAgICAgICAgICAqc2VjU3RhdGVSZWYgPSBOVUxMOwogICAgICAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1VTTV9ERUNSWVBUSU9ORVJST1I7CkBAIC0yNjY3LDEwICsyNjYzLDcgQEAKICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVfcHRyLCByZW1haW5pbmcsICpzY29wZWRQZHUsIHNjb3BlZFBkdUxlbikKICAgICAgICAgICAgICE9IFNOTVBfRVJSX05PRVJST1IpIHsKICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiJXNcbiIsICJGYWlsZWQgZGVjcnlwdGlvbi4iKSk7Ci0gICAgICAgICAgICBpZiAoc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljCi0gICAgICAgICAgICAgICAgKFNUQVRfVVNNU1RBVFNERUNSWVBUSU9ORVJST1JTKSA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInVzbSIsICIlc1xuIiwgIkZhaWxlZCBpbmNyZW1lbnQgc3RhdGlzdGljLiIpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1VTTVNUQVRTREVDUllQVElPTkVSUk9SUyk7CiAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9VU01fREVDUllQVElPTkVSUk9SOwogICAgICAgICB9CiAjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCkBAIC0yNzAwLDggKzI2OTMsNyBAQAogICAgICAqCiAgICAgICogRklYICBDb3JyZWN0PyAKICAgICAgKi8KLSAgICAqbWF4U2l6ZVJlc3BvbnNlID0gbWF4TXNnU2l6ZSAtIChpbnQpCi0gICAgICAgICgodV9sb25nKSBlbmRfb2Zfb3ZlcmhlYWQgLSAodV9sb25nKSB3aG9sZU1zZyk7CisgICAgKm1heFNpemVSZXNwb25zZSA9IG1heE1zZ1NpemUgLSAoZW5kX29mX292ZXJoZWFkIC0gd2hvbGVNc2cpOwogCiAKICAgICBERUJVR01TR1RMKCgidXNtIiwgIlVTTSBwcm9jZXNzaW5nIGNvbXBsZXRlZC5cbiIpKTsKQEAgLTI3NjMsMTMgKzI3NTUsNDUyIEBACiAgICAgfSAgICAgICAKIH0KIAorLyogc2V0cyB1cCBpbml0aWFsIGRlZmF1bHQgc2Vzc2lvbiBwYXJhbWV0ZXJzICovCitpbnQKK3VzbV9zZXNzaW9uX2luaXQobmV0c25tcF9zZXNzaW9uICppbl9zZXNzaW9uLCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pCit7CisgICAgY2hhciAqY3A7CisgICAgc2l6ZV90IGk7CisgICAgCisgICAgaWYgKGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuID4gMCkgeworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChpbl9zZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluX3Nlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuKTsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvID09IE5VTEwpIHsKKyAgICAgICAgICAgIGluX3Nlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfTUFMTE9DOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfTUFMTE9DOworICAgICAgICB9CisgICAgfSBlbHNlIGlmIChnZXRfZGVmYXVsdF9hdXRodHlwZSgmaSkgIT0gTlVMTCkgeworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChnZXRfZGVmYXVsdF9hdXRodHlwZShOVUxMKSwgaSk7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuID0gaTsKKyAgICB9CisKKyAgICBpZiAoaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4gPiAwKSB7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4pOworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG8gPT0gTlVMTCkgeworICAgICAgICAgICAgaW5fc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9NQUxMT0M7CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGdldF9kZWZhdWx0X3ByaXZ0eXBlKCZpKSAhPSBOVUxMKSB7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKGdldF9kZWZhdWx0X3ByaXZ0eXBlKE5VTEwpLCBpKTsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2UHJvdG9MZW4gPSBpOworICAgIH0KKworICAgIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuIDw9IDApICYmCisgICAgICAgICgoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKwkJCQkgICAgIE5FVFNOTVBfRFNfTElCX0FVVEhNQVNURVJLRVkpKSkpIHsKKyAgICAgICAgc2l6ZV90IGJ1ZmxlbiA9IHNpemVvZihzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXkpOworICAgICAgICB1X2NoYXIgKnRtcHAgPSBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXk7CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiA9IDA7CisgICAgICAgIC8qIGl0IHdpbGwgYmUgYSBoZXggc3RyaW5nICovCisgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmYnVmbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuLCAwLCBjcCkpIHsKKyAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbCgiZXJyb3IgcGFyc2luZyBhdXRoZW50aWNhdGlvbiBtYXN0ZXIga2V5Iik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICgoaW5fc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuIDw9IDApICYmCisgICAgICAgICAgICAgICAoKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FVVEhQQVNTUEhSQVNFKSkgfHwKKyAgICAgICAgICAgICAgICAoY3AgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfUEFTU1BIUkFTRSkpKSkgeworICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4gPSBVU01fQVVUSF9LVV9MRU47CisgICAgICAgIGlmIChnZW5lcmF0ZV9LdShzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aFByb3RvTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBjcCwgc3RybGVuKGNwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsCisgICAgICAgICAgICAgICAgKCJFcnJvciBnZW5lcmF0aW5nIGEga2V5IChLdSkgZnJvbSB0aGUgc3VwcGxpZWQgYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UuIik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgfQorCisgICAgCisgICAgaWYgKChpbl9zZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4gPD0gMCkgJiYKKyAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorCQkJCSAgICAgTkVUU05NUF9EU19MSUJfUFJJVk1BU1RFUktFWSkpKSkgeworICAgICAgICBzaXplX3QgYnVmbGVuID0gc2l6ZW9mKHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSk7CisgICAgICAgIHVfY2hhciAqdG1wcCA9IHNlc3Npb24tPnNlY3VyaXR5UHJpdktleTsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuID0gMDsKKyAgICAgICAgLyogaXQgd2lsbCBiZSBhIGhleCBzdHJpbmcgKi8KKyAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZidWZsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzZXNzaW9uLT5zZWN1cml0eVByaXZLZXlMZW4sIDAsIGNwKSkgeworICAgICAgICAgICAgc25tcF9zZXRfZGV0YWlsKCJlcnJvciBwYXJzaW5nIGVuY3J5cHRpb24gbWFzdGVyIGtleSIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBfRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoKGluX3Nlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiA8PSAwKSAmJgorICAgICAgICAgICAgICAgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9QUklWUEFTU1BIUkFTRSkpIHx8CisgICAgICAgICAgICAgICAgKGNwID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1BBU1NQSFJBU0UpKSkpIHsKKyAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuID0gVVNNX1BSSVZfS1VfTEVOOworICAgICAgICBpZiAoZ2VuZXJhdGVfS3Uoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgY3AsIHN0cmxlbihjcCksCisgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAmc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIHNubXBfc2V0X2RldGFpbAorICAgICAgICAgICAgICAgICgiRXJyb3IgZ2VuZXJhdGluZyBhIGtleSAoS3UpIGZyb20gdGhlIHN1cHBsaWVkIHByaXZhY3kgcGFzcyBwaHJhc2UuIik7CisgICAgICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworCisvKgorICogdXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pOgorICogCisgKiBjcmVhdGVzIGEgdXNlciBpbiB0aGUgdXNtIHRhYmxlIGZyb20gdGhlIGluZm9ybWF0aW9uIGluIGEgc2Vzc2lvbi4KKyAqIElmIHRoZSB1c2VyIGFscmVhZHkgZXhpc3RzLCBpdCBpcyB1cGRhdGVkIHdpdGggdGhlIGN1cnJlbnQKKyAqIGluZm9ybWF0aW9uIGZyb20gdGhlIHNlc3Npb24KKyAqIAorICogUGFyYW1ldGVyczoKKyAqIHNlc3Npb24gLS0gSU46IHBvaW50ZXIgdG8gdGhlIHNlc3Npb24gdG8gdXNlIHdoZW4gY3JlYXRpbmcgdGhlIHVzZXIuCisgKiAKKyAqIFJldHVybnM6CisgKiBTTk1QRVJSX1NVQ0NFU1MKKyAqIFNOTVBFUlJfR0VORVJSIAorICovCitpbnQKK3VzbV9jcmVhdGVfdXNlcl9mcm9tX3Nlc3Npb24obmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbikKK3sKKyAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlcjsKKyAgICBpbnQgICAgICAgICAgICAgdXNlcl9qdXN0X2NyZWF0ZWQgPSAwOworICAgIGNoYXIgKmNwOworCisgICAgLyoKKyAgICAgKiAtIGRvbid0IGNyZWF0ZS1hbm90aGVyL2NvcHktaW50byB1c2VyIGZvciB0aGlzIHNlc3Npb24gYnkgZGVmYXVsdAorICAgICAqIC0gYmFpbCBub3cgKG5vIGVycm9yKSBpZiB3ZSBkb24ndCBoYXZlIGFuIGVuZ2luZUlECisgICAgICovCisgICAgaWYgKFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEID09IChzZXNzaW9uLT5mbGFncyAmIFNOTVBfRkxBR1NfVVNFUl9DUkVBVEVEKSB8fAorICAgICAgICBzZXNzaW9uLT5zZWN1cml0eU1vZGVsICE9IFNOTVBfU0VDX01PREVMX1VTTSB8fAorICAgICAgICBzZXNzaW9uLT52ZXJzaW9uICE9IFNOTVBfVkVSU0lPTl8zIHx8CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZUxlbiA9PSAwIHx8CisgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJ1c20iLCAibm8gZmxhZyBkZWZpbmVkLi4uICBjb250aW51aW5nXG4iKSk7CisgICAgc2Vzc2lvbi0+ZmxhZ3MgfD0gU05NUF9GTEFHU19VU0VSX0NSRUFURUQ7CisKKyAgICAvKgorICAgICAqIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGVuZ2luZUlELCBjcmVhdGUgYW4gZW50cnkgaW4gdGhlIFVTTSBsaXN0CisgICAgICogZm9yIHRoaXMgdXNlciB1c2luZyB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHNlc3Npb24gCisgICAgICovCisgICAgdXNlciA9IHVzbV9nZXRfdXNlcl9mcm9tX2xpc3Qoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c21fZ2V0X3VzZXJMaXN0KCksIDApOworICAgIERFQlVHTVNHVEwoKCJ1c20iLCAidXNlciBleGlzdHM/IHg9JXBcbiIsIHVzZXIpKTsKKyAgICBpZiAodXNlciA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJ1c20iLCAiQnVpbGRpbmcgdXNlciAlcy4uLlxuIiwKKyAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKSk7CisgICAgICAgIC8qCisgICAgICAgICAqIHVzZXIgZG9lc24ndCBleGlzdCBzbyB3ZSBjcmVhdGUgYW5kIGFkZCBpdCAKKyAgICAgICAgICovCisgICAgICAgIHVzZXIgPSAoc3RydWN0IHVzbVVzZXIgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdXNtVXNlcikpOworICAgICAgICBpZiAodXNlciA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworCisgICAgICAgIC8qCisgICAgICAgICAqIGNvcHkgaW4gdGhlIHNlY3VyaXR5TmFtZSAKKyAgICAgICAgICovCisgICAgICAgIGlmIChzZXNzaW9uLT5zZWN1cml0eU5hbWUpIHsKKyAgICAgICAgICAgIHVzZXItPm5hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgICAgIHVzZXItPnNlY05hbWUgPSBzdHJkdXAoc2Vzc2lvbi0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgICAgIGlmICh1c2VyLT5uYW1lID09IE5VTEwgfHwgdXNlci0+c2VjTmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBjb3B5IGluIHRoZSBlbmdpbmVJRCAKKyAgICAgICAgICovCisgICAgICAgIHVzZXItPmVuZ2luZUlEID0gbmV0c25tcF9tZW1kdXAoc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuKTsKKyAgICAgICAgaWYgKHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQgJiYgIXVzZXItPmVuZ2luZUlEKSB7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIHVzZXItPmVuZ2luZUlETGVuID0gc2Vzc2lvbi0+c2VjdXJpdHlFbmdpbmVJRExlbjsKKworICAgICAgICB1c2VyX2p1c3RfY3JlYXRlZCA9IDE7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBjb3B5IHRoZSBhdXRoIHByb3RvY29sIAorICAgICAqLworICAgIGlmICh1c2VyLT5hdXRoUHJvdG9jb2wgPT0gTlVMTCAmJiBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90byAhPSBOVUxMKSB7CisgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoUHJvdG9jb2wpOworICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2wgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoUHJvdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbik7CisgICAgICAgIGlmICh1c2VyLT5hdXRoUHJvdG9jb2wgPT0gTlVMTCkgeworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2xMZW4gPSBzZXNzaW9uLT5zZWN1cml0eUF1dGhQcm90b0xlbjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGNvcHkgdGhlIHByaXYgcHJvdG9jb2wgCisgICAgICovCisgICAgaWYgKHVzZXItPnByaXZQcm90b2NvbCA9PSBOVUxMICYmIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvICE9IE5VTEwpIHsKKyAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZQcm90b2NvbCk7CisgICAgICAgIHVzZXItPnByaXZQcm90b2NvbCA9CisgICAgICAgICAgICBzbm1wX2R1cGxpY2F0ZV9vYmppZChzZXNzaW9uLT5zZWN1cml0eVByaXZQcm90bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuKTsKKyAgICAgICAgaWYgKHVzZXItPnByaXZQcm90b2NvbCA9PSBOVUxMKSB7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKHVzZXIpOworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIHVzZXItPnByaXZQcm90b2NvbExlbiA9IHNlc3Npb24tPnNlY3VyaXR5UHJpdlByb3RvTGVuOworICAgIH0KKworICAgIC8qCisgICAgICogY29weSBpbiB0aGUgYXV0aGVudGljYXRpb24gS2V5LiAgSWYgbm90IGxvY2FsaXplZCwgbG9jYWxpemUgaXQgCisgICAgICovCisgICAgaWYgKHVzZXItPmF1dGhLZXkgPT0gTlVMTCkgeworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXkgIT0gTlVMTAorICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoTG9jYWxLZXlMZW4gIT0gMCkgeworICAgICAgICAgICAgLyogYWxyZWFkeSBsb2NhbGl6ZWQga2V5IHBhc3NlZCBpbi4gIHVzZSBpdCAqLworICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhLZXkpOworICAgICAgICAgICAgdXNlci0+YXV0aEtleSA9IG5ldHNubXBfbWVtZHVwKHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuKTsKKyAgICAgICAgICAgIGlmICghdXNlci0+YXV0aEtleSkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXNlci0+YXV0aEtleUxlbiA9IHNlc3Npb24tPnNlY3VyaXR5QXV0aExvY2FsS2V5TGVuOworICAgICAgICB9IGVsc2UgaWYgKHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleSAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlBdXRoS2V5TGVuICE9IDApIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5hdXRoS2V5KTsKKyAgICAgICAgICAgIHVzZXItPmF1dGhLZXkgPSAodV9jaGFyICopIGNhbGxvYygxLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7CisgICAgICAgICAgICBpZiAodXNlci0+YXV0aEtleSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2VyLT5hdXRoS2V5TGVuID0gVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0s7CisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVfa3VsKHVzZXItPmF1dGhQcm90b2NvbCwgdXNlci0+YXV0aFByb3RvY29sTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5QXV0aEtleUxlbiwgdXNlci0+YXV0aEtleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmF1dGhLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BVVRITE9DQUxJWkVES0VZKSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBidWZsZW4gPSBVU01fQVVUSF9LVV9MRU47CisgICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+YXV0aEtleSk7CisgICAgICAgICAgICB1c2VyLT5hdXRoS2V5ID0gKHVfY2hhciAqKW1hbGxvYyhidWZsZW4pOyAvKiBtYXggbGVuZ3RoIG5lZWRlZCAqLworICAgICAgICAgICAgdXNlci0+YXV0aEtleUxlbiA9IDA7CisgICAgICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLworICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnVzZXItPmF1dGhLZXksICZidWZsZW4sICZ1c2VyLT5hdXRoS2V5TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY3ApKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKgorICAgICAqIGNvcHkgaW4gdGhlIHByaXZhY3kgS2V5LiAgSWYgbm90IGxvY2FsaXplZCwgbG9jYWxpemUgaXQgCisgICAgICovCisgICAgaWYgKHVzZXItPnByaXZLZXkgPT0gTlVMTCkgeworICAgICAgICBpZiAoc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXkgIT0gTlVMTAorICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlQcml2TG9jYWxLZXlMZW4gIT0gMCkgeworICAgICAgICAgICAgLyogYWxyZWFkeSBsb2NhbGl6ZWQga2V5IHBhc3NlZCBpbi4gIHVzZSBpdCAqLworICAgICAgICAgICAgU05NUF9GUkVFKHVzZXItPnByaXZLZXkpOworICAgICAgICAgICAgdXNlci0+cHJpdktleSA9IG5ldHNubXBfbWVtZHVwKHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuKTsKKyAgICAgICAgICAgIGlmICghdXNlci0+cHJpdktleSkgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbiA9IHNlc3Npb24tPnNlY3VyaXR5UHJpdkxvY2FsS2V5TGVuOworICAgICAgICB9IGVsc2UgaWYgKHNlc3Npb24tPnNlY3VyaXR5UHJpdktleSAhPSBOVUxMCisgICAgICAgICAgICAgICAgICAgJiYgc2Vzc2lvbi0+c2VjdXJpdHlQcml2S2V5TGVuICE9IDApIHsKKyAgICAgICAgICAgIFNOTVBfRlJFRSh1c2VyLT5wcml2S2V5KTsKKyAgICAgICAgICAgIHVzZXItPnByaXZLZXkgPSAodV9jaGFyICopIGNhbGxvYygxLCBVU01fTEVOR1RIX0tVX0hBU0hCTE9DSyk7CisgICAgICAgICAgICBpZiAodXNlci0+cHJpdktleSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB1c2VyLT5wcml2S2V5TGVuID0gVVNNX0xFTkdUSF9LVV9IQVNIQkxPQ0s7CisgICAgICAgICAgICBpZiAoZ2VuZXJhdGVfa3VsKHVzZXItPmF1dGhQcm90b2NvbCwgdXNlci0+YXV0aFByb3RvY29sTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzaW9uLT5zZWN1cml0eVByaXZLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5UHJpdktleUxlbiwgdXNlci0+cHJpdktleSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPnByaXZLZXlMZW4pICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIodXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKChjcCA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9QUklWTE9DQUxJWkVES0VZKSkpIHsKKyAgICAgICAgICAgIHNpemVfdCBidWZsZW4gPSBVU01fUFJJVl9LVV9MRU47CisgICAgICAgICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdktleSk7CisgICAgICAgICAgICB1c2VyLT5wcml2S2V5ID0gKHVfY2hhciAqKW1hbGxvYyhidWZsZW4pOyAvKiBtYXggbGVuZ3RoIG5lZWRlZCAqLworICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbiA9IDA7CisgICAgICAgICAgICAvKiBpdCB3aWxsIGJlIGEgaGV4IHN0cmluZyAqLworICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnVzZXItPnByaXZLZXksICZidWZsZW4sICZ1c2VyLT5wcml2S2V5TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgY3ApKSB7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcih1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodXNlcl9qdXN0X2NyZWF0ZWQpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYWRkIHRoZSB1c2VyIGludG8gdGhlIGRhdGFiYXNlIAorICAgICAgICAgKi8KKyAgICAgICAgdXNlci0+dXNlclN0YXR1cyA9IFJTX0FDVElWRTsKKyAgICAgICAgdXNlci0+dXNlclN0b3JhZ2VUeXBlID0gU1RfUkVBRE9OTFk7CisgICAgICAgIHVzbV9hZGRfdXNlcih1c2VyKTsKKyAgICB9CisKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisKK30KKworLyogQSB3cmFwcGVyIGFyb3VuZCB0aGUgaG9vayAqLworaW50Cit1c21fY3JlYXRlX3VzZXJfZnJvbV9zZXNzaW9uX2hvb2sodm9pZCAqc2xwLCBuZXRzbm1wX3Nlc3Npb24gKnNlc3Npb24pCit7CisgICAgREVCVUdNU0dUTCgoInVzbSIsICJwb3RlbnRpYWxseSBib290c3RyYXBwaW5nIHRoZSBVU00gdGFibGUgZnJvbSBzZXNzaW9uIGRhdGFcbiIpKTsKKyAgICByZXR1cm4gdXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbihzZXNzaW9uKTsKK30KKworc3RhdGljIGludAordXNtX2J1aWxkX3Byb2JlX3BkdShuZXRzbm1wX3BkdSAqKnBkdSkKK3sKKyAgICBzdHJ1Y3QgdXNtVXNlciAqdXNlcjsKKworICAgIC8qCisgICAgICogY3JlYXRlIHRoZSBwZHUgCisgICAgICovCisgICAgaWYgKCFwZHUpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAqcGR1ID0gc25tcF9wZHVfY3JlYXRlKFNOTVBfTVNHX0dFVCk7CisgICAgaWYgKCEoKnBkdSkpCisgICAgICAgIHJldHVybiAtMTsKKyAgICAoKnBkdSktPnZlcnNpb24gPSBTTk1QX1ZFUlNJT05fMzsKKyAgICAoKnBkdSktPnNlY3VyaXR5TmFtZSA9IHN0cmR1cCgiIik7CisgICAgKCpwZHUpLT5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4oKCpwZHUpLT5zZWN1cml0eU5hbWUpOworICAgICgqcGR1KS0+c2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX05PQVVUSDsKKyAgICAoKnBkdSktPnNlY3VyaXR5TW9kZWwgPSBTTk1QX1NFQ19NT0RFTF9VU007CisKKyAgICAvKgorICAgICAqIGNyZWF0ZSB0aGUgZW1wdHkgdXNlciAKKyAgICAgKi8KKyAgICB1c2VyID0gdXNtX2dldF91c2VyKE5VTEwsIDAsICgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKKyAgICBpZiAodXNlciA9PSBOVUxMKSB7CisgICAgICAgIHVzZXIgPSAoc3RydWN0IHVzbVVzZXIgKikgY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgdXNtVXNlcikpOworICAgICAgICBpZiAodXNlciA9PSBOVUxMKSB7CisgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KCpwZHUpOworICAgICAgICAgICAgKnBkdSA9IChuZXRzbm1wX3BkdSAqKSBOVUxMOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIHVzZXItPm5hbWUgPSBzdHJkdXAoKCpwZHUpLT5zZWN1cml0eU5hbWUpOworICAgICAgICB1c2VyLT5zZWNOYW1lID0gc3RyZHVwKCgqcGR1KS0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgdXNlci0+YXV0aFByb3RvY29sTGVuID0gc2l6ZW9mKHVzbU5vQXV0aFByb3RvY29sKSAvIHNpemVvZihvaWQpOworICAgICAgICB1c2VyLT5hdXRoUHJvdG9jb2wgPQorICAgICAgICAgICAgc25tcF9kdXBsaWNhdGVfb2JqaWQodXNtTm9BdXRoUHJvdG9jb2wsIHVzZXItPmF1dGhQcm90b2NvbExlbik7CisgICAgICAgIHVzZXItPnByaXZQcm90b2NvbExlbiA9IHNpemVvZih1c21Ob1ByaXZQcm90b2NvbCkgLyBzaXplb2Yob2lkKTsKKyAgICAgICAgdXNlci0+cHJpdlByb3RvY29sID0KKyAgICAgICAgICAgIHNubXBfZHVwbGljYXRlX29iamlkKHVzbU5vUHJpdlByb3RvY29sLCB1c2VyLT5wcml2UHJvdG9jb2xMZW4pOworICAgICAgICB1c21fYWRkX3VzZXIodXNlcik7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitpbnQgdXNtX2Rpc2NvdmVyX2VuZ2luZWlkKHZvaWQgKnNscHYsIG5ldHNubXBfc2Vzc2lvbiAqc2Vzc2lvbikgeworICAgIG5ldHNubXBfcGR1ICAgICpwZHUgPSBOVUxMLCAqcmVzcG9uc2UgPSBOVUxMOworICAgIGludCBzdGF0dXMsIGk7CisgICAgc3RydWN0IHNlc3Npb25fbGlzdCAqc2xwID0gKHN0cnVjdCBzZXNzaW9uX2xpc3QgKikgc2xwdjsKKworICAgIGlmICh1c21fYnVpbGRfcHJvYmVfcGR1KCZwZHUpICE9IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwgInVuYWJsZSB0byBjcmVhdGUgcHJvYmUgUERVXG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QX0VSUl9HRU5FUlI7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJzbm1wX2FwaSIsICJwcm9iaW5nIGZvciBlbmdpbmVJRC4uLlxuIikpOworICAgIHNlc3Npb24tPmZsYWdzIHw9IFNOTVBfRkxBR1NfRE9OVF9QUk9CRTsgLyogcHJldmVudCByZWN1cnNpb24gKi8KKyAgICBzdGF0dXMgPSBzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2Uoc2xwLCBwZHUsICZyZXNwb25zZSk7CisKKyAgICBpZiAoKHJlc3BvbnNlID09IE5VTEwpICYmIChzdGF0dXMgPT0gU1RBVF9TVUNDRVNTKSkgeworICAgICAgICBzdGF0dXMgPSBTVEFUX0VSUk9SOworICAgIH0KKworICAgIHN3aXRjaCAoc3RhdHVzKSB7CisgICAgY2FzZSBTVEFUX1NVQ0NFU1M6CisgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfSU5WQUxJRF9NU0c7IC8qIFhYPz8gKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgImVycm9yOiBleHBlY3RlZCBSZXBvcnQgYXMgcmVzcG9uc2UgdG8gcHJvYmU6ICVzICglbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBzbm1wX2VycnN0cmluZyhyZXNwb25zZS0+ZXJyc3RhdCksCisgICAgICAgICAgICAgICAgICAgIHJlc3BvbnNlLT5lcnJzdGF0KSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU1RBVF9FUlJPUjogICAvKiB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0ZWQgLT4gUmVwb3J0ID09IFNUQVRfRVJST1IgKi8KKyAgICAgICAgc2Vzc2lvbi0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9VTktOT1dOX0VOR19JRDsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTVEFUX1RJTUVPVVQ6CisgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfVElNRU9VVDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBjb25uZWN0IHdpdGggcmVtb3RlIGVuZ2luZTogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc25tcF9hcGlfZXJyc3RyaW5nKHNlc3Npb24tPnNfc25tcF9lcnJubyksCisgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNfc25tcF9lcnJubykpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoc2xwLT5zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlETGVuID09IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfYXBpIiwKKyAgICAgICAgICAgICAgICAgICAgInVuYWJsZSB0byBkZXRlcm1pbmUgcmVtb3RlIGVuZ2luZSBJRFxuIikpOworICAgICAgICAvKiBjbGVhciB0aGUgZmxhZyBzbyB0aGF0IHByb2JlIG9jY3VycyBvbiBuZXh0IGluZm9ybSAqLworICAgICAgICBzZXNzaW9uLT5mbGFncyAmPSB+U05NUF9GTEFHU19ET05UX1BST0JFOworICAgICAgICByZXR1cm4gU05NUF9FUlJfR0VORVJSOworICAgIH0KKworICAgIHNlc3Npb24tPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfU1VDQ0VTUzsKKyAgICBpZiAoc25tcF9nZXRfZG9fZGVidWdnaW5nKCkpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNubXBfc2Vzc19vcGVuIiwKKyAgICAgICAgICAgICAgICAgICAgIiAgcHJvYmUgZm91bmQgZW5naW5lSUQ6ICAiKSk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzbHAtPnNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW47IGkrKykKKyAgICAgICAgICAgIERFQlVHTVNHKCgic25tcF9zZXNzX29wZW4iLCAiJTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgc2xwLT5zZXNzaW9uLT5zZWN1cml0eUVuZ2luZUlEW2ldKSk7CisgICAgICAgIERFQlVHTVNHKCgic25tcF9zZXNzX29wZW4iLCAiXG4iKSk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBpZiBib290L3RpbWUgc3VwcGxpZWQgc2V0IGl0IGZvciB0aGlzIGVuZ2luZUlEIAorICAgICAqLworICAgIGlmIChzZXNzaW9uLT5lbmdpbmVCb290cyB8fCBzZXNzaW9uLT5lbmdpbmVUaW1lKSB7CisgICAgICAgIHNldF9lbmdpbmV0aW1lKHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSUQsCisgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPnNlY3VyaXR5RW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgIHNlc3Npb24tPmVuZ2luZUJvb3RzLCBzZXNzaW9uLT5lbmdpbmVUaW1lLAorICAgICAgICAgICAgICAgICAgICAgICBUUlVFKTsKKyAgICB9CisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKwogdm9pZAogaW5pdF91c20odm9pZCkKIHsKICAgICBzdHJ1Y3Qgc25tcF9zZWNtb2RfZGVmICpkZWY7CisgICAgY2hhciAqdHlwZTsKIAotICAgIERFQlVHTVNHVEwoKCJpbml0X3VzbSIsICJ1bml0X3VzbTogJWQgJWRcbiIsIHVzbU5vUHJpdlByb3RvY29sWzBdLAotICAgICAgICAgICAgICAgIHVzbU5vUHJpdlByb3RvY29sWzFdKSk7CisgICAgREVCVUdNU0dUTCgoImluaXRfdXNtIiwgInVuaXRfdXNtOiAlIiBORVRTTk1QX1BSSW8gInUgJSIgTkVUU05NUF9QUklvICJ1XG4iLAorICAgICAgICAgICAgICAgIHVzbU5vUHJpdlByb3RvY29sWzBdLCB1c21Ob1ByaXZQcm90b2NvbFsxXSkpOwogCiAgICAgc2NfaW5pdCgpOyAgICAgICAgICAgICAgICAgIC8qIGluaXRhbGl6ZSBzY2FwaSBjb2RlICovCiAKQEAgLTI3NzcsNiArMzIwOCw4IEBACiAgICAgICogcmVnaXN0ZXIgb3Vyc2VsdmVzIGFzIGEgc2VjdXJpdHkgc2VydmljZSAKICAgICAgKi8KICAgICBkZWYgPSBTTk1QX01BTExPQ19TVFJVQ1Qoc25tcF9zZWNtb2RfZGVmKTsKKyAgICBpZiAoZGVmID09IE5VTEwpCisgICAgICAgIHJldHVybjsKICAgICAvKgogICAgICAqIFhYWDogZGVmLT5pbml0X3Nlc3Nfc2VjbW9kIG1vdmUgc3R1ZmYgZnJvbSBzbm1wX2FwaS5jIAogICAgICAqLwpAQCAtMjc4NCw3ICszMjE3LDEwIEBACiAgICAgZGVmLT5lbmNvZGVfZm9yd2FyZCA9IHVzbV9zZWNtb2RfZ2VuZXJhdGVfb3V0X21zZzsKICAgICBkZWYtPmRlY29kZSA9IHVzbV9zZWNtb2RfcHJvY2Vzc19pbl9tc2c7CiAgICAgZGVmLT5wZHVfZnJlZV9zdGF0ZV9yZWYgPSB1c21fZnJlZV91c21TdGF0ZVJlZmVyZW5jZTsKKyAgICBkZWYtPnNlc3Npb25fc2V0dXAgPSB1c21fc2Vzc2lvbl9pbml0OwogICAgIGRlZi0+aGFuZGxlX3JlcG9ydCA9IHVzbV9oYW5kbGVfcmVwb3J0OworICAgIGRlZi0+cHJvYmVfZW5naW5laWQgPSB1c21fZGlzY292ZXJfZW5naW5laWQ7CisgICAgZGVmLT5wb3N0X3Byb2JlX2VuZ2luZWlkID0gdXNtX2NyZWF0ZV91c2VyX2Zyb21fc2Vzc2lvbl9ob29rOwogICAgIHJlZ2lzdGVyX3NlY19tb2QoVVNNX1NFQ19NT0RFTF9OVU1CRVIsICJ1c20iLCBkZWYpOwogCiAgICAgc25tcF9yZWdpc3Rlcl9jYWxsYmFjayhTTk1QX0NBTExCQUNLX0xJQlJBUlksCkBAIC0yNzk5LDYgKzMyMzUsMzkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNOTVBfQ0FMTEJBQ0tfU0hVVERPV04sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcmVlX2VuZ2luZUlELCBOVUxMKTsKIAorICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImRlZkF1dGhUeXBlIiwgc25tcHYzX2F1dGh0eXBlX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgIk1ENXxTSEEiKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJkZWZQcml2VHlwZSIsIHNubXB2M19wcml2dHlwZV9jb25mLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsCisjaWZkZWYgSEFWRV9BRVMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiREVTfEFFUyIKKyNlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRFUyAoQUVTIHN1cHBvcnQgbm90IGF2YWlsYWJsZSkiCisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICk7CisKKyAgICAvKgorICAgICAqIEZyZWUgc3R1ZmYgYXQgc2h1dGRvd24gdGltZQorICAgICAqLworICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfZW5naW5ldGltZV9vbl9zaHV0ZG93biwgTlVMTCk7CisKKworICAgIHR5cGUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9BUFBUWVBFKTsKKworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0QXV0aFBhc3MiLCB1c21fc2V0X3Bhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0UHJpdlBhc3MiLCB1c21fc2V0X3Bhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0QXV0aEtleSIsIHVzbV9zZXRfcGFzc3dvcmQsIE5VTEwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRQcml2S2V5IiwgdXNtX3NldF9wYXNzd29yZCwgTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldEF1dGhMb2NhbEtleSIsIHVzbV9zZXRfcGFzc3dvcmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7CisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRQcml2TG9jYWxLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwogfQogCiB2b2lkCkBAIC0yOTA3LDYgKzMzNzYsMTMgQEAKIAogfQogCit2b2lkCitzaHV0ZG93bl91c20odm9pZCkKK3sKKyAgICBmcmVlX2V0aW1lbGlzdCgpOworICAgIGNsZWFyX3VzZXJfbGlzdCgpOworfQorCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgogICogdXNtX2NoZWNrX3NlY0xldmVsCiAgKgpAQCAtMjkyNyw4ICszNDAzLDggQEAKICAgICBpZiAodXNlci0+dXNlclN0YXR1cyAhPSBSU19BQ1RJVkUpCiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIERFQlVHTVNHVEwoKCJjb21wYXJleCIsICJDb21wYXJpbmc6ICVkICVkICIsIHVzbU5vUHJpdlByb3RvY29sWzBdLAotICAgICAgICAgICAgICAgIHVzbU5vUHJpdlByb3RvY29sWzFdKSk7CisgICAgREVCVUdNU0dUTCgoImNvbXBhcmV4IiwgIkNvbXBhcmluZzogJSIgTkVUU05NUF9QUklvICJ1ICUiIE5FVFNOTVBfUFJJbyAidSAiLAorICAgICAgICAgICAgICAgIHVzbU5vUHJpdlByb3RvY29sWzBdLCB1c21Ob1ByaXZQcm90b2NvbFsxXSkpOwogICAgIERFQlVHTVNHT0lEKCgiY29tcGFyZXgiLCB1c21Ob1ByaXZQcm90b2NvbCwKICAgICAgICAgICAgICAgICAgc2l6ZW9mKHVzbU5vUHJpdlByb3RvY29sKSAvIHNpemVvZihvaWQpKSk7CiAgICAgREVCVUdNU0coKCJjb21wYXJleCIsICJcbiIpKTsKQEAgLTMzMTIsNiArMzc4OCw3IEBACiAKIAogCisjaWZuZGVmIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAogLyoKICAqIHRha2UgYSBnaXZlbiB1c2VyIGFuZCBjbG9uZSB0aGUgc2VjdXJpdHkgaW5mbyBpbnRvIGFub3RoZXIgCiAgKi8KQEAgLTMzNzUsNiArMzg1Miw3IEBACiAgICAgfQogICAgIHJldHVybiB0bzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogLyoKICAqIHVzbV9jcmVhdGVfdXNlcih2b2lkKToKQEAgLTM1NDIsMTEgKzQwMjAsMTEgQEAKICAgICAqY3B0cisrID0gJyAnOwogICAgIGNwdHIgPSByZWFkX2NvbmZpZ19zYXZlX29jdGV0X3N0cmluZyhjcHRyLCAodV9jaGFyICopIHVzZXItPm5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1c2VyLT5uYW1lID09IE5VTEwpID8gMCA6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih1c2VyLT5uYW1lKSArIDEpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJsZW4odXNlci0+bmFtZSkpOwogICAgICpjcHRyKysgPSAnICc7CiAgICAgY3B0ciA9IHJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nKGNwdHIsICh1X2NoYXIgKikgdXNlci0+c2VjTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXItPnNlY05hbWUgPT0gTlVMTCkgPyAwIDoKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RybGVuKHVzZXItPnNlY05hbWUpICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbih1c2VyLT5zZWNOYW1lKSk7CiAgICAgKmNwdHIrKyA9ICcgJzsKICAgICBjcHRyID0KICAgICAgICAgcmVhZF9jb25maWdfc2F2ZV9vYmppZChjcHRyLCB1c2VyLT5jbG9uZUZyb20sIHVzZXItPmNsb25lRnJvbUxlbik7CkBAIC0zNTY2LDExICs0MDQ0LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlci0+cHJpdktleUxlbik7CiAgICAgKmNwdHIrKyA9ICcgJzsKICAgICBjcHRyID0gcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcoY3B0ciwgdXNlci0+dXNlclB1YmxpY1N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVzZXItPnVzZXJQdWJsaWNTdHJpbmcgPT0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpID8gMCA6IHN0cmxlbigoY2hhciAqKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXItPgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJQdWJsaWNTdHJpbmcpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXItPnVzZXJQdWJsaWNTdHJpbmdMZW4pOworCiAgICAgcmVhZF9jb25maWdfc3RvcmUodHlwZSwgbGluZSk7CiB9CiAKQEAgLTM1NzksNyArNDA1NCw3IEBACiAgKiBhbmQgcmV0dXJucyBhIHBvaW50ZXIgdG8gYSBuZXdseSBjcmVhdGVkIHN0cnVjdCB1c21Vc2VyLiAKICAqLwogc3RydWN0IHVzbVVzZXIgKgotdXNtX3JlYWRfdXNlcihjaGFyICpsaW5lKQordXNtX3JlYWRfdXNlcihjb25zdCBjaGFyICpsaW5lKQogewogICAgIHN0cnVjdCB1c21Vc2VyICp1c2VyOwogICAgIHNpemVfdCAgICAgICAgICBsZW47CkBAIC0zNTkwLDExICs0MDY1LDExIEBACiAgICAgICAgIHJldHVybiBOVUxMOwogCiAgICAgdXNlci0+dXNlclN0YXR1cyA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgdXNlci0+dXNlclN0b3JhZ2VUeXBlID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKLSAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcobGluZSwgJnVzZXItPmVuZ2luZUlELAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+ZW5naW5lSURMZW4pOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOworICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdChsaW5lLCAmdXNlci0+ZW5naW5lSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5lbmdpbmVJRExlbik7CiAKICAgICAvKgogICAgICAqIHNldCB0aGUgbGNkIGVudHJ5IGZvciB0aGlzIGVuZ2luZUlEIHRvIHRoZSBtaW5pbXVtIGJvb3RzL3RpbWUKQEAgLTM2MTEsMjIgKzQwODYsMjEgQEAKICAgICBTTk1QX0ZSRUUodXNlci0+Y2xvbmVGcm9tKTsKICAgICB1c2VyLT5jbG9uZUZyb21MZW4gPSAwOwogCi0gICAgbGluZSA9Ci0gICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2JqaWQobGluZSwgJnVzZXItPmNsb25lRnJvbSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+Y2xvbmVGcm9tTGVuKTsKKyAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChsaW5lLCAmdXNlci0+Y2xvbmVGcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5jbG9uZUZyb21MZW4pOwogCiAgICAgU05NUF9GUkVFKHVzZXItPmF1dGhQcm90b2NvbCk7CiAgICAgdXNlci0+YXV0aFByb3RvY29sTGVuID0gMDsKIAotICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29iamlkKGxpbmUsICZ1c2VyLT5hdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPmF1dGhQcm90b2NvbExlbik7Ci0gICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGxpbmUsICZ1c2VyLT5hdXRoS2V5LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YXV0aEtleUxlbik7CisgICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2JqaWRfY29uc3QobGluZSwgJnVzZXItPmF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+YXV0aFByb3RvY29sTGVuKTsKKyAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QobGluZSwgJnVzZXItPmF1dGhLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5hdXRoS2V5TGVuKTsKICAgICBTTk1QX0ZSRUUodXNlci0+cHJpdlByb3RvY29sKTsKICAgICB1c2VyLT5wcml2UHJvdG9jb2xMZW4gPSAwOwogCi0gICAgbGluZSA9IHJlYWRfY29uZmlnX3JlYWRfb2JqaWQobGluZSwgJnVzZXItPnByaXZQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdXNlci0+cHJpdlByb3RvY29sTGVuKTsKKyAgICBsaW5lID0gcmVhZF9jb25maWdfcmVhZF9vYmppZF9jb25zdChsaW5lLCAmdXNlci0+cHJpdlByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT5wcml2UHJvdG9jb2xMZW4pOwogICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAmdXNlci0+cHJpdktleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnVzZXItPnByaXZLZXlMZW4pOwogI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCkBAIC0zNjQ2LDcgKzQxMjAsNyBAQAogICAgIH0KIAogICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAmdXNlci0+dXNlclB1YmxpY1N0cmluZywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZ1c2VyLT51c2VyUHVibGljU3RyaW5nTGVuKTsKICAgICByZXR1cm4gdXNlcjsKIH0KIApAQCAtMzg0NCwzICs0MzE4LDM1NSBAQAogICAgICAgICB9CiAgICAgfQogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNtX3NldF9wYXNzd29yZCgpICovCisKK3ZvaWQKK3VzbV9wYXJzZV9jcmVhdGVfdXNtVXNlcihjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3sKKyAgICBjaGFyICAgICAgICAgICAqY3A7CisgICAgY2hhciAgICAgICAgICAgIGJ1ZltTTk1QX01BWEJVRl9NRURJVU1dOworICAgIHN0cnVjdCB1c21Vc2VyICpuZXd1c2VyOworICAgIHVfY2hhciAgICAgICAgICB1c2VyS2V5W1NOTVBfTUFYQlVGX1NNQUxMXSwgKnRtcHA7CisgICAgc2l6ZV90ICAgICAgICAgIHVzZXJLZXlMZW4gPSBTTk1QX01BWEJVRl9TTUFMTDsKKyAgICBzaXplX3QgICAgICAgICAgcHJpdktleUxlbiA9IDA7CisgICAgc2l6ZV90ICAgICAgICAgIHJldDsKKyAgICBpbnQgICAgICAgICAgICAgcmV0MjsKKyAgICBpbnQgICAgICAgICAgICAgdGVzdGNhc2U7CisKKyAgICBuZXd1c2VyID0gdXNtX2NyZWF0ZV91c2VyKCk7CisKKyAgICAvKgorICAgICAqIFJFQUQ6IFNlY3VyaXR5IE5hbWUgCisgICAgICovCisgICAgY3AgPSBjb3B5X253b3JkKGxpbmUsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisgICAgLyoKKyAgICAgKiBtaWdodCBiZSBhIC1lIEVOR0lORUlEIGFyZ3VtZW50IAorICAgICAqLworICAgIGlmIChzdHJjbXAoYnVmLCAiLWUiKSA9PSAwKSB7CisgICAgICAgIHNpemVfdCAgICAgICAgICBlYnVmX2xlbiA9IDMyLCBlb3V0X2xlbiA9IDA7CisgICAgICAgIHVfY2hhciAgICAgICAgICplYnVmID0gKHVfY2hhciAqKSBtYWxsb2MoZWJ1Zl9sZW4pOworCisgICAgICAgIGlmIChlYnVmID09IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1hbGxvYyBmYWlsdXJlIHByb2Nlc3NpbmcgLWUgZmxhZyIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEdldCB0aGUgc3BlY2lmaWVkIGVuZ2luZWlkIGZyb20gdGhlIGxpbmUuICAKKyAgICAgICAgICovCisgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZlYnVmLCAmZWJ1Zl9sZW4sICZlb3V0X2xlbiwgMSwgYnVmKSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBFbmdpbmVJRCBhcmd1bWVudCB0byAtZSIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShlYnVmKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG5ld3VzZXItPmVuZ2luZUlEID0gZWJ1ZjsKKyAgICAgICAgbmV3dXNlci0+ZW5naW5lSURMZW4gPSBlb3V0X2xlbjsKKyAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCA9IHNubXB2M19nZW5lcmF0ZV9lbmdpbmVJRCgmcmV0KTsKKyAgICAgICAgaWYgKHJldCA9PSAwKSB7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIG5ld3VzZXItPmVuZ2luZUlETGVuID0gcmV0OworICAgIH0KKworICAgIG5ld3VzZXItPnNlY05hbWUgPSBzdHJkdXAoYnVmKTsKKyAgICBuZXd1c2VyLT5uYW1lID0gc3RyZHVwKGJ1Zik7CisKKyAgICBpZiAoIWNwKQorICAgICAgICBnb3RvIGFkZDsgICAgICAgICAgICAgICAvKiBubyBhdXRoZW50aWNhdGlvbiBvciBwcml2YWN5IHR5cGUgKi8KKworICAgIC8qCisgICAgICogUkVBRDogQXV0aGVudGljYXRpb24gVHlwZSAKKyAgICAgKi8KKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQorICAgIGlmIChzdHJuY21wKGNwLCAiTUQ1IiwgMykgPT0gMCkgeworICAgICAgICBtZW1jcHkobmV3dXNlci0+YXV0aFByb3RvY29sLCB1c21ITUFDTUQ1QXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgc2l6ZW9mKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpKTsKKyAgICB9IGVsc2UKKyNlbmRpZgorICAgICAgICBpZiAoc3RybmNtcChjcCwgIlNIQSIsIDMpID09IDApIHsKKyAgICAgICAgbWVtY3B5KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIGF1dGhlbnRpY2F0aW9uIHByb3RvY29sIik7CisgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjcCA9IHNraXBfdG9rZW4oY3ApOworCisgICAgLyoKKyAgICAgKiBSRUFEOiBBdXRoZW50aWNhdGlvbiBQYXNzIFBocmFzZSBvciBrZXkKKyAgICAgKi8KKyAgICBpZiAoIWNwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm5vIGF1dGhlbnRpY2F0aW9uIHBhc3MgcGhyYXNlIik7CisgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICBpZiAoc3RyY21wKGJ1ZiwiLW0iKSA9PSAwKSB7CisgICAgICAgIC8qIGEgbWFzdGVyIGtleSBpcyBzcGVjaWZpZWQgKi8KKyAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgcmV0ID0gc2l6ZW9mKHVzZXJLZXkpOworICAgICAgICB0bXBwID0gdXNlcktleTsKKyAgICAgICAgdXNlcktleUxlbiA9IDA7CisgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZ0bXBwLCAmcmV0LCAmdXNlcktleUxlbiwgMCwgYnVmKSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLW0iKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChidWYsIi1sIikgIT0gMCkgeworICAgICAgICAvKiBhIHBhc3N3b3JkIGlzIHNwZWNpZmllZCAqLworICAgICAgICB1c2VyS2V5TGVuID0gc2l6ZW9mKHVzZXJLZXkpOworICAgICAgICByZXQyID0gZ2VuZXJhdGVfS3UobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICh1X2NoYXIgKikgYnVmLCBzdHJsZW4oYnVmKSwgdXNlcktleSwgJnVzZXJLZXlMZW4pOworICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSB0aGUgYXV0aGVudGljYXRpb24ga2V5IGZyb20gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBsaWVkIHBhc3MgcGhyYXNlLiIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgIH0gICAgICAgIAorICAgICAgICAKKyAgICAvKgorICAgICAqIEFuZCB0dXJuIGl0IGludG8gYSBsb2NhbGl6ZWQga2V5IAorICAgICAqLworICAgIHJldDIgPSBzY19nZXRfcHJvcGVybGVuZ3RoKG5ld3VzZXItPmF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOworICAgIGlmIChyZXQyIDw9IDApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiQ291bGQgbm90IGdldCBwcm9wZXIgYXV0aGVudGljYXRpb24gcHJvdG9jb2wga2V5IGxlbmd0aCIpOworCXVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgbmV3dXNlci0+YXV0aEtleSA9ICh1X2NoYXIgKikgbWFsbG9jKHJldDIpOworCisgICAgaWYgKHN0cmNtcChidWYsIi1sIikgPT0gMCkgeworICAgICAgICAvKiBhIGxvY2FsIGtleSBpcyBkaXJlY3RseSBzcGVjaWZpZWQgKi8KKyAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgbmV3dXNlci0+YXV0aEtleUxlbiA9IDA7CisgICAgICAgIHJldCA9IHJldDI7CisgICAgICAgIGlmICghc25tcF9oZXhfdG9fYmluYXJ5KCZuZXd1c2VyLT5hdXRoS2V5LCAmcmV0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3dXNlci0+YXV0aEtleUxlbiwgMCwgYnVmKSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLWwiKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJldCAhPSBuZXd1c2VyLT5hdXRoS2V5TGVuKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbXByb3BlciBrZXkgbGVuZ3RoIHRvIC1sIik7CisgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgbmV3dXNlci0+YXV0aEtleUxlbiA9IHJldDI7CisgICAgICAgIHJldDIgPSBnZW5lcmF0ZV9rdWwobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCwgbmV3dXNlci0+ZW5naW5lSURMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyS2V5LCB1c2VyS2V5TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aEtleSwgJm5ld3VzZXItPmF1dGhLZXlMZW4pOworICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSBsb2NhbGl6ZWQgYXV0aGVudGljYXRpb24ga2V5ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIihLdWwpIGZyb20gdGhlIG1hc3RlciBrZXkgKEt1KS4iKTsKKyAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNwKQorICAgICAgICBnb3RvIGFkZDsgICAgICAgICAgICAgICAvKiBubyBwcml2YWN5IHR5cGUgKHdoaWNoIGlzIGxlZ2FsKSAqLworCisgICAgLyoKKyAgICAgKiBSRUFEOiBQcml2YWN5IFR5cGUgCisgICAgICovCisgICAgdGVzdGNhc2UgPSAwOworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCisgICAgaWYgKHN0cm5jbXAoY3AsICJERVMiLCAzKSA9PSAwKSB7CisgICAgICAgIG1lbWNweShuZXd1c2VyLT5wcml2UHJvdG9jb2wsIHVzbURFU1ByaXZQcm90b2NvbCwKKyAgICAgICAgICAgICAgIHNpemVvZih1c21ERVNQcml2UHJvdG9jb2wpKTsKKyAgICAgICAgdGVzdGNhc2UgPSAxOworCS8qIERFUyB1c2VzIGEgMTI4IGJpdCBrZXksIDY0IGJpdHMgb2Ygd2hpY2ggaXMgYSBzYWx0ICovCisJcHJpdktleUxlbiA9IDE2OworICAgIH0KKyNlbmRpZgorI2lmZGVmIEhBVkVfQUVTCisgICAgaWYgKHN0cm5jbXAoY3AsICJBRVMxMjgiLCA2KSA9PSAwIHx8CisgICAgICAgICAgICAgICBzdHJuY21wKGNwLCAiQUVTIiwgMykgPT0gMCkgeworICAgICAgICBtZW1jcHkobmV3dXNlci0+cHJpdlByb3RvY29sLCB1c21BRVNQcml2UHJvdG9jb2wsCisgICAgICAgICAgICAgICBzaXplb2YodXNtQUVTUHJpdlByb3RvY29sKSk7CisgICAgICAgIHRlc3RjYXNlID0gMTsKKwlwcml2S2V5TGVuID0gMTY7CisgICAgfQorI2VuZGlmCisgICAgaWYgKHRlc3RjYXNlID09IDApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBwcml2YWN5IHByb3RvY29sIik7CisgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBjcCA9IHNraXBfdG9rZW4oY3ApOworICAgIC8qCisgICAgICogUkVBRDogRW5jcnlwdGlvbiBQYXNzIFBocmFzZSBvciBrZXkKKyAgICAgKi8KKyAgICBpZiAoIWNwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGFzc3VtZSB0aGUgc2FtZSBhcyB0aGUgYXV0aGVudGljYXRpb24ga2V5IAorICAgICAgICAgKi8KKyAgICAgICAgbmV3dXNlci0+cHJpdktleSA9IG5ldHNubXBfbWVtZHVwKG5ld3VzZXItPmF1dGhLZXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoS2V5TGVuKTsKKyAgICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IG5ld3VzZXItPmF1dGhLZXlMZW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzdHJjbXAoYnVmLCItbSIpID09IDApIHsKKyAgICAgICAgICAgIC8qIGEgbWFzdGVyIGtleSBpcyBzcGVjaWZpZWQgKi8KKyAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICByZXQgPSBzaXplb2YodXNlcktleSk7CisgICAgICAgICAgICB0bXBwID0gdXNlcktleTsKKyAgICAgICAgICAgIHVzZXJLZXlMZW4gPSAwOworICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZyZXQsICZ1c2VyS2V5TGVuLCAwLCBidWYpKSB7CisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLW0iKTsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChzdHJjbXAoYnVmLCItbCIpICE9IDApIHsKKyAgICAgICAgICAgIC8qIGEgcGFzc3dvcmQgaXMgc3BlY2lmaWVkICovCisgICAgICAgICAgICB1c2VyS2V5TGVuID0gc2l6ZW9mKHVzZXJLZXkpOworICAgICAgICAgICAgcmV0MiA9IGdlbmVyYXRlX0t1KG5ld3VzZXItPmF1dGhQcm90b2NvbCwgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBidWYsIHN0cmxlbihidWYpLCB1c2VyS2V5LCAmdXNlcktleUxlbik7CisgICAgICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgdGhlIHByaXZhY3kga2V5IGZyb20gdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzdXBwbGllZCBwYXNzIHBocmFzZS4iKTsKKyAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSAgICAgICAgCisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBBbmQgdHVybiBpdCBpbnRvIGEgbG9jYWxpemVkIGtleSAKKyAgICAgICAgICovCisgICAgICAgIHJldDIgPSBzY19nZXRfcHJvcGVybGVuZ3RoKG5ld3VzZXItPmF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+YXV0aFByb3RvY29sTGVuKTsKKyAgICAgICAgaWYgKHJldDIgPCAwKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2V0IHByb3BlciBrZXkgbGVuZ3RoIHRvIHVzZSBmb3IgdGhlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgInByaXZhY3kgYWxnb3JpdGhtLiIpOworICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBuZXd1c2VyLT5wcml2S2V5ID0gKHVfY2hhciAqKSBtYWxsb2MocmV0Mik7CisKKyAgICAgICAgaWYgKHN0cmNtcChidWYsIi1sIikgPT0gMCkgeworICAgICAgICAgICAgLyogYSBsb2NhbCBrZXkgaXMgZGlyZWN0bHkgc3BlY2lmaWVkICovCisgICAgICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOworICAgICAgICAgICAgcmV0ID0gcmV0MjsKKyAgICAgICAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSAwOworICAgICAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJm5ld3VzZXItPnByaXZLZXksICZyZXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmV3dXNlci0+cHJpdktleUxlbiwgMCwgYnVmKSkgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImludmFsaWQga2V5IHZhbHVlIGFyZ3VtZW50IHRvIC1sIik7CisgICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gcmV0MjsKKyAgICAgICAgICAgIHJldDIgPSBnZW5lcmF0ZV9rdWwobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQsIG5ld3VzZXItPmVuZ2luZUlETGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJLZXksIHVzZXJLZXlMZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3dXNlci0+cHJpdktleSwgJm5ld3VzZXItPnByaXZLZXlMZW4pOworICAgICAgICAgICAgaWYgKHJldDIgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIGxvY2FsaXplZCBwcml2YWN5IGtleSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKEt1bCkgZnJvbSB0aGUgbWFzdGVyIGtleSAoS3UpLiIpOworICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKChuZXd1c2VyLT5wcml2S2V5TGVuID49IHByaXZLZXlMZW4pIHx8IChwcml2S2V5TGVuID09IDApKXsKKyAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSBwcml2S2V5TGVuOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8qIFRoZSBwcml2S2V5IGxlbmd0aCBpcyBzbWFsbGVyIHRoYW4gcmVxdWlyZWQgYnkgcHJpdlByb3RvY29sICovCisgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOworICAgICAgcmV0dXJuOworICAgIH0KKworICBhZGQ6CisgICAgdXNtX2FkZF91c2VyKG5ld3VzZXIpOworICAgIERFQlVHTVNHVEwoKCJ1c21Vc2VyIiwgImNyZWF0ZWQgYSBuZXcgdXNlciAlcyBhdCAiLCBuZXd1c2VyLT5zZWNOYW1lKSk7CisgICAgREVCVUdNU0dIRVgoKCJ1c21Vc2VyIiwgbmV3dXNlci0+ZW5naW5lSUQsIG5ld3VzZXItPmVuZ2luZUlETGVuKSk7CisgICAgREVCVUdNU0coKCJ1c21Vc2VyIiwgIlxuIikpOworfQorCit2b2lkCitzbm1wdjNfYXV0aHR5cGVfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQoreworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1CisgICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIk1ENSIpID09IDApCisgICAgICAgIGRlZmF1bHRBdXRoVHlwZSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7CisgICAgZWxzZQorI2VuZGlmCisgICAgICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJTSEEiKSA9PSAwKQorICAgICAgICBkZWZhdWx0QXV0aFR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKKyAgICBlbHNlCisgICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gYXV0aGVudGljYXRpb24gdHlwZSIpOworICAgIGRlZmF1bHRBdXRoVHlwZUxlbiA9IFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STTsKKyAgICBERUJVR01TR1RMKCgic25tcHYzIiwgInNldCBkZWZhdWx0IGF1dGhlbnRpY2F0aW9uIHR5cGU6ICVzXG4iLCBjcHRyKSk7Cit9CisKK2NvbnN0IG9pZCAgICAgICoKK2dldF9kZWZhdWx0X2F1dGh0eXBlKHNpemVfdCAqIGxlbikKK3sKKyAgICBpZiAoZGVmYXVsdEF1dGhUeXBlID09IE5VTEwpIHsKKyAgICAgICAgZGVmYXVsdEF1dGhUeXBlID0gU05NUF9ERUZBVUxUX0FVVEhfUFJPVE87CisgICAgICAgIGRlZmF1bHRBdXRoVHlwZUxlbiA9IFNOTVBfREVGQVVMVF9BVVRIX1BST1RPTEVOOworICAgIH0KKyAgICBpZiAobGVuKQorICAgICAgICAqbGVuID0gZGVmYXVsdEF1dGhUeXBlTGVuOworICAgIHJldHVybiBkZWZhdWx0QXV0aFR5cGU7Cit9CisKK3ZvaWQKK3NubXB2M19wcml2dHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCit7CisgICAgaW50IHRlc3RjYXNlID0gMDsKKworI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCisgICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIkRFUyIpID09IDApIHsKKyAgICAgICAgdGVzdGNhc2UgPSAxOworICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21ERVNQcml2UHJvdG9jb2w7CisgICAgfQorI2VuZGlmCisKKyNpZiBIQVZFX0FFUworICAgIC8qIFhYWCBBRVM6IGFzc3VtZXMgb2lkIGxlbmd0aCA9PSBkZXMgb2lkIGxlbmd0aCAqLworICAgIGlmIChzdHJjYXNlY21wKGNwdHIsICJBRVMxMjgiKSA9PSAwIHx8CisgICAgICAgIHN0cmNhc2VjbXAoY3B0ciwgIkFFUyIpID09IDApIHsKKyAgICAgICAgdGVzdGNhc2UgPSAxOworICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21BRVMxMjhQcml2UHJvdG9jb2w7CisgICAgfQorI2VuZGlmCisgICAgaWYgKHRlc3RjYXNlID09IDApCisgICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gcHJpdmFjeSB0eXBlIik7CisgICAgZGVmYXVsdFByaXZUeXBlTGVuID0gU05NUF9ERUZBVUxUX1BSSVZfUFJPVE9MRU47CisgICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJzZXQgZGVmYXVsdCBwcml2YWN5IHR5cGU6ICVzXG4iLCBjcHRyKSk7Cit9CisKK2NvbnN0IG9pZCAgICAgICoKK2dldF9kZWZhdWx0X3ByaXZ0eXBlKHNpemVfdCAqIGxlbikKK3sKKyAgICBpZiAoZGVmYXVsdFByaXZUeXBlID09IE5VTEwpIHsKKyNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX0RFUworICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21ERVNQcml2UHJvdG9jb2w7CisjZWxzZQorICAgICAgICBkZWZhdWx0UHJpdlR5cGUgPSB1c21BRVNQcml2UHJvdG9jb2w7CisjZW5kaWYKKyAgICAgICAgZGVmYXVsdFByaXZUeXBlTGVuID0gVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNOworICAgIH0KKyAgICBpZiAobGVuKQorICAgICAgICAqbGVuID0gZGVmYXVsdFByaXZUeXBlTGVuOworICAgIHJldHVybiBkZWZhdWx0UHJpdlR5cGU7Cit9CisKZGlmZiAtLWdpdCBhL3NubXBsaWIvc25tcHYzLmMgYi9zbm1wbGliL3NubXB2My5jCmluZGV4IGUzYmRjNTAuLjQzNWNhZmQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25tcHYzLmMKKysrIGIvc25tcGxpYi9zbm1wdjMuYwpAQCAtMTEsMTEgKzExLDcgQEAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMzksOSArMzUsNiBAQAogI2lmIEhBVkVfVU5JU1REX0gKICNpbmNsdWRlIDx1bmlzdGQuaD4KICNlbmRpZgotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCiAjaWYgSEFWRV9TWVNfU09DS0VUX0gKICNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CiAjZW5kaWYKQEAgLTgyLDYgKzc1LDggQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaD4KICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3RyYW5zZm9ybV9vaWRzLmg+CiAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCiBzdGF0aWMgdV9sb25nICAgZW5naW5lQm9vdHMgPSAxOwogc3RhdGljIHVuc2lnbmVkIGludCBlbmdpbmVJRFR5cGUgPSBFTkdJTkVJRF9UWVBFX05FVFNOTVBfUk5EOwogc3RhdGljIHVuc2lnbmVkIGNoYXIgKmVuZ2luZUlEID0gTlVMTDsKQEAgLTkyLDEwMCArODcsMTAgQEAKIHN0YXRpYyBzaXplX3QgICBvbGRFbmdpbmVJRExlbmd0aCA9IDA7CiBzdGF0aWMgc3RydWN0IHRpbWV2YWwgc25tcHYzc3RhcnR0aW1lOwogCi0vKgotICogU2V0IHVwIGRlZmF1bHQgc25tcHYzIHBhcmFtZXRlciB2YWx1ZSBzdG9yYWdlLgotICovCi1zdGF0aWMgY29uc3Qgb2lkICpkZWZhdWx0QXV0aFR5cGUgPSBOVUxMOwotc3RhdGljIHNpemVfdCAgIGRlZmF1bHRBdXRoVHlwZUxlbiA9IDA7Ci1zdGF0aWMgY29uc3Qgb2lkICpkZWZhdWx0UHJpdlR5cGUgPSBOVUxMOwotc3RhdGljIHNpemVfdCAgIGRlZmF1bHRQcml2VHlwZUxlbiA9IDA7Ci0KLS8qIHRoaXMgaXMgcHJvYmFibHkgYW4gb3Zlci1raWxsIGlmZGVmLCBidXQgd2h5IG5vdCAqLwotI2lmIGRlZmluZWQoSEFWRV9TWVNfVElNRVNfSCkgJiYgZGVmaW5lZChIQVZFX1VOSVNURF9IKSAmJiBkZWZpbmVkKEhBVkVfVElNRVMpICYmIGRlZmluZWQoX1NDX0NMS19UQ0spICYmIGRlZmluZWQoSEFWRV9TWVNDT05GKSAmJiBkZWZpbmVkKFVJTlRfTUFYKQotCi0jZGVmaW5lIFNOTVBfVVNFX1RJTUVTIDEKLQotc3RhdGljIGNsb2NrX3Qgc25tcHYzc3RhcnRDbG9jazsKLXN0YXRpYyBsb25nIGNsb2NrdGlja3MgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCBsYXN0Y2FsbHRpbWUgPSAwOwotc3RhdGljIHVuc2lnbmVkIGludCB3cmFwY291bnRlciA9IDA7Ci0KLSNlbmRpZiAvKiB0aW1lcygpIHRlc3RzICovCi0KICNpZiBkZWZpbmVkKElGSFdBRERSTEVOKSAmJiBkZWZpbmVkKFNJT0NHSUZIV0FERFIpCiBzdGF0aWMgaW50ICAgICAgZ2V0SHdBZGRyZXNzKGNvbnN0IGNoYXIgKm5ldHdvcmtEZXZpY2UsIGNoYXIgKmFkZHJlc3NPdXQpOwogI2VuZGlmCiAKLXZvaWQKLXNubXB2M19hdXRodHlwZV9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCi17Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9NRDUKLSAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiTUQ1IikgPT0gMCkKLSAgICAgICAgZGVmYXVsdEF1dGhUeXBlID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKLSAgICBlbHNlCi0jZW5kaWYKLSAgICAgICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIlNIQSIpID09IDApCi0gICAgICAgIGRlZmF1bHRBdXRoVHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOwotICAgIGVsc2UKLSAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBhdXRoZW50aWNhdGlvbiB0eXBlIik7Ci0gICAgZGVmYXVsdEF1dGhUeXBlTGVuID0gVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNOwotICAgIERFQlVHTVNHVEwoKCJzbm1wdjMiLCAic2V0IGRlZmF1bHQgYXV0aGVudGljYXRpb24gdHlwZTogJXNcbiIsIGNwdHIpKTsKLX0KLQotY29uc3Qgb2lkICAgICAgKgotZ2V0X2RlZmF1bHRfYXV0aHR5cGUoc2l6ZV90ICogbGVuKQotewotICAgIGlmIChkZWZhdWx0QXV0aFR5cGUgPT0gTlVMTCkgewotICAgICAgICBkZWZhdWx0QXV0aFR5cGUgPSBTTk1QX0RFRkFVTFRfQVVUSF9QUk9UTzsKLSAgICAgICAgZGVmYXVsdEF1dGhUeXBlTGVuID0gU05NUF9ERUZBVUxUX0FVVEhfUFJPVE9MRU47Ci0gICAgfQotICAgIGlmIChsZW4pCi0gICAgICAgICpsZW4gPSBkZWZhdWx0QXV0aFR5cGVMZW47Ci0gICAgcmV0dXJuIGRlZmF1bHRBdXRoVHlwZTsKLX0KLQotdm9pZAotc25tcHYzX3ByaXZ0eXBlX2NvbmYoY29uc3QgY2hhciAqd29yZCwgY2hhciAqY3B0cikKLXsKLSAgICBpbnQgdGVzdGNhc2UgPSAwOwotCi0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKLSAgICBpZiAoc3RyY2FzZWNtcChjcHRyLCAiREVTIikgPT0gMCkgewotICAgICAgICB0ZXN0Y2FzZSA9IDE7Ci0gICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbURFU1ByaXZQcm90b2NvbDsKLSAgICB9Ci0jZW5kaWYKLQotI2lmIEhBVkVfQUVTCi0gICAgLyogWFhYIEFFUzogYXNzdW1lcyBvaWQgbGVuZ3RoID09IGRlcyBvaWQgbGVuZ3RoICovCi0gICAgaWYgKHN0cmNhc2VjbXAoY3B0ciwgIkFFUzEyOCIpID09IDAgfHwKLSAgICAgICAgc3RyY2FzZWNtcChjcHRyLCAiQUVTIikgPT0gMCkgewotICAgICAgICB0ZXN0Y2FzZSA9IDE7Ci0gICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbUFFUzEyOFByaXZQcm90b2NvbDsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAodGVzdGNhc2UgPT0gMCkKLSAgICAgICAgY29uZmlnX3BlcnJvcigiVW5rbm93biBwcml2YWN5IHR5cGUiKTsKLSAgICBkZWZhdWx0UHJpdlR5cGVMZW4gPSBTTk1QX0RFRkFVTFRfUFJJVl9QUk9UT0xFTjsKLSAgICBERUJVR01TR1RMKCgic25tcHYzIiwgInNldCBkZWZhdWx0IHByaXZhY3kgdHlwZTogJXNcbiIsIGNwdHIpKTsKLX0KLQotY29uc3Qgb2lkICAgICAgKgotZ2V0X2RlZmF1bHRfcHJpdnR5cGUoc2l6ZV90ICogbGVuKQotewotICAgIGlmIChkZWZhdWx0UHJpdlR5cGUgPT0gTlVMTCkgewotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfREVTCi0gICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbURFU1ByaXZQcm90b2NvbDsKLSNlbHNlCi0gICAgICAgIGRlZmF1bHRQcml2VHlwZSA9IHVzbUFFU1ByaXZQcm90b2NvbDsKLSNlbmRpZgotICAgICAgICBkZWZhdWx0UHJpdlR5cGVMZW4gPSBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk07Ci0gICAgfQotICAgIGlmIChsZW4pCi0gICAgICAgICpsZW4gPSBkZWZhdWx0UHJpdlR5cGVMZW47Ci0gICAgcmV0dXJuIGRlZmF1bHRQcml2VHlwZTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIHNubXB2M19zZWNMZXZlbF9jb25mCiAgKgpAQCAtMjE2LDE2ICsxMjEsMTMgQEAKIHZvaWQKIHNubXB2M19zZWNMZXZlbF9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCiB7Ci0gICAgY2hhciAgICAgICAgICAgIGJ1ZlsxMDI0XTsKICAgICBpbnQgICAgICAgICAgICAgc2VjTGV2ZWw7CiAKICAgICBpZiAoKHNlY0xldmVsID0gcGFyc2Vfc2VjTGV2ZWxfY29uZiggd29yZCwgY3B0ciApKSA+PSAwICkgewogICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELCAKIAkJCSAgIE5FVFNOTVBfRFNfTElCX1NFQ0xFVkVMLCBzZWNMZXZlbCk7CiAgICAgfSBlbHNlIHsKLSAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIlVua25vd24gc2VjdXJpdHkgbGV2ZWw6ICVzIiwgY3B0cik7Ci0gICAgICAgIGJ1Zlsgc2l6ZW9mKGJ1ZiktMSBdID0gMDsKLSAgICAgICAgY29uZmlnX3BlcnJvcihidWYpOworCW5ldHNubXBfY29uZmlnX2Vycm9yKCJVbmtub3duIHNlY3VyaXR5IGxldmVsOiAlcyIsIGNwdHIpOwogICAgIH0KICAgICBERUJVR01TR1RMKCgic25tcHYzIiwgImRlZmF1bHQgc2VjTGV2ZWwgc2V0IHRvOiAlcyA9ICVkXG4iLCBjcHRyLAogICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIApAQCAtMjMzLDYgKzEzNSw5IEBACiB9CiAKIAorTkVUU05NUF9JTVBPUlQgaW50Citzbm1wdjNfb3B0aW9ucyhjaGFyICpvcHRhcmcsIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sIGNoYXIgKipBcHN6LAorICAgICAgICAgICAgICAgY2hhciAqKlhwc3osIGludCBhcmdjLCBjaGFyICpjb25zdCAqYXJndik7CiBpbnQKIHNubXB2M19vcHRpb25zKGNoYXIgKm9wdGFyZywgbmV0c25tcF9zZXNzaW9uICogc2Vzc2lvbiwgY2hhciAqKkFwc3osCiAgICAgICAgICAgICAgICBjaGFyICoqWHBzeiwgaW50IGFyZ2MsIGNoYXIgKmNvbnN0ICphcmd2KQpAQCAtMjQ5LDcgKzE1NCw3IEBACiAgICAgLyoKICAgICAgKiBhbmQgJy4uLi4gIi0zeCB2YWx1ZSIgLi4uLicgICgqd2l0aCogdGhlIHF1b3RlcykKICAgICAgKi8KLSAgICB3aGlsZSAoKm9wdGFyZyAmJiBpc3NwYWNlKCpvcHRhcmcpKSB7CisgICAgd2hpbGUgKCpvcHRhcmcgJiYgaXNzcGFjZSgodW5zaWduZWQgY2hhcikoKm9wdGFyZykpKSB7CiAgICAgICAgIG9wdGFyZysrOwogICAgIH0KICAgICAvKgpAQCAtMzU5LDYgKzI2NCw3IEBACiAKICAgICAgICAgYnJlYWs7CiAKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KICAgICBjYXNlICdhJzoKICNpZm5kZWYgTkVUU05NUF9ESVNBQkxFX01ENQogICAgICAgICBpZiAoIXN0cmNhc2VjbXAob3B0YXJnLCAiTUQ1IikpIHsKQEAgLTQwOSw2ICszMTUsNyBAQAogICAgIGNhc2UgJ1gnOgogICAgICAgICAqWHBzeiA9IG9wdGFyZzsKICAgICAgICAgYnJlYWs7CisjZW5kaWYgLyogTkVUU05NUF9TRUNNT0RfVVNNICovCiAKICAgICBjYXNlICdtJzogewogICAgICAgICBzaXplX3QgYnVmU2l6ZSA9IHNpemVvZihzZXNzaW9uLT5zZWN1cml0eUF1dGhLZXkpOwpAQCAtNTM1LDcgKzQ0Miw3IEBACiAgICAgICAgICAqIGdldCB0aGUgaG9zdCBuYW1lIGFuZCBzYXZlIHRoZSBpbmZvcm1hdGlvbiAKICAgICAgICAgICovCiAgICAgICAgIGdldGhvc3RuYW1lKChjaGFyICopIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBoZW50ID0gZ2V0aG9zdGJ5bmFtZSgoY2hhciAqKSBidWYpOworICAgICAgICBoZW50ID0gbmV0c25tcF9nZXRob3N0YnluYW1lKChjaGFyICopIGJ1Zik7CiAgICAgICAgIGlmIChoZW50ICYmIGhlbnQtPmhfYWRkcnR5cGUgPT0gQUZfSU5FVDYpIHsKICAgICAgICAgICAgIGxvY2FsRW5naW5lSURUeXBlID0gRU5HSU5FSURfVFlQRV9JUFY2OwogICAgICAgICB9IGVsc2UgewpAQCAtNTU4LDcgKzQ2NSw3IEBACiAgICAgICAgICAqIGdldCB0aGUgaG9zdCBuYW1lIGFuZCBzYXZlIHRoZSBpbmZvcm1hdGlvbiAKICAgICAgICAgICovCiAgICAgICAgIGdldGhvc3RuYW1lKChjaGFyICopIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBoZW50ID0gZ2V0aG9zdGJ5bmFtZSgoY2hhciAqKSBidWYpOworICAgICAgICBoZW50ID0gbmV0c25tcF9nZXRob3N0YnluYW1lKChjaGFyICopIGJ1Zik7CiAgICAgfQogI2VuZGlmCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEhBVkVfR0VUSE9TVE5BTUUgKi8KQEAgLTc1MSwyOTcgKzY1OCw2IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLWludAotZnJlZV9lbmdpbmV0aW1lX29uX3NodXRkb3duKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwgdm9pZCAqc2VydmVyYXJnLAotCQkJICAgIHZvaWQgKmNsaWVudGFyZykKLXsKLSAgICBERUJVR01TR1RMKCgic25tcHYzIiwgImZyZWUgZW5naW5ldGltZSBjYWxsYmFjayBjYWxsZWRcbiIpKTsKLSAgICBpZiAoZW5naW5lSUQgIT0gTlVMTCkKLQlmcmVlX2VuZ2luZXRpbWUoZW5naW5lSUQsIGVuZ2luZUlETGVuZ3RoKTsKLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZAotdXNtX3BhcnNlX2NyZWF0ZV91c21Vc2VyKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQotewotICAgIGNoYXIgICAgICAgICAgICpjcDsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGX01FRElVTV07Ci0gICAgc3RydWN0IHVzbVVzZXIgKm5ld3VzZXI7Ci0gICAgdV9jaGFyICAgICAgICAgIHVzZXJLZXlbU05NUF9NQVhCVUZfU01BTExdLCAqdG1wcDsKLSAgICBzaXplX3QgICAgICAgICAgdXNlcktleUxlbiA9IFNOTVBfTUFYQlVGX1NNQUxMOwotICAgIHNpemVfdCAgICAgICAgICBwcml2S2V5TGVuID0gMDsKLSAgICBzaXplX3QgICAgICAgICAgcmV0OwotICAgIGludCAgICAgICAgICAgICByZXQyOwotICAgIGludCAgICAgICAgICAgICB0ZXN0Y2FzZTsKLQotICAgIG5ld3VzZXIgPSB1c21fY3JlYXRlX3VzZXIoKTsKLQotICAgIC8qCi0gICAgICogUkVBRDogU2VjdXJpdHkgTmFtZSAKLSAgICAgKi8KLSAgICBjcCA9IGNvcHlfbndvcmQobGluZSwgYnVmLCBzaXplb2YoYnVmKSk7Ci0KLSAgICAvKgotICAgICAqIG1pZ2h0IGJlIGEgLWUgRU5HSU5FSUQgYXJndW1lbnQgCi0gICAgICovCi0gICAgaWYgKHN0cmNtcChidWYsICItZSIpID09IDApIHsKLSAgICAgICAgc2l6ZV90ICAgICAgICAgIGVidWZfbGVuID0gMzIsIGVvdXRfbGVuID0gMDsKLSAgICAgICAgdV9jaGFyICAgICAgICAgKmVidWYgPSAodV9jaGFyICopIG1hbGxvYyhlYnVmX2xlbik7Ci0KLSAgICAgICAgaWYgKGVidWYgPT0gTlVMTCkgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWFsbG9jIGZhaWx1cmUgcHJvY2Vzc2luZyAtZSBmbGFnIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogR2V0IHRoZSBzcGVjaWZpZWQgZW5naW5laWQgZnJvbSB0aGUgbGluZS4gIAotICAgICAgICAgKi8KLSAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJmVidWYsICZlYnVmX2xlbiwgJmVvdXRfbGVuLCAxLCBidWYpKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIEVuZ2luZUlEIGFyZ3VtZW50IHRvIC1lIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgU05NUF9GUkVFKGVidWYpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgbmV3dXNlci0+ZW5naW5lSUQgPSBlYnVmOwotICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRExlbiA9IGVvdXRfbGVuOwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIG5ld3VzZXItPmVuZ2luZUlEID0gc25tcHYzX2dlbmVyYXRlX2VuZ2luZUlEKCZyZXQpOwotICAgICAgICBpZiAocmV0ID09IDApIHsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgbmV3dXNlci0+ZW5naW5lSURMZW4gPSByZXQ7Ci0gICAgfQotCi0gICAgbmV3dXNlci0+c2VjTmFtZSA9IHN0cmR1cChidWYpOwotICAgIG5ld3VzZXItPm5hbWUgPSBzdHJkdXAoYnVmKTsKLQotICAgIGlmICghY3ApCi0gICAgICAgIGdvdG8gYWRkOyAgICAgICAgICAgICAgIC8qIG5vIGF1dGhlbnRpY2F0aW9uIG9yIHByaXZhY3kgdHlwZSAqLwotCi0gICAgLyoKLSAgICAgKiBSRUFEOiBBdXRoZW50aWNhdGlvbiBUeXBlIAotICAgICAqLwotI2lmbmRlZiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci0gICAgaWYgKHN0cm5jbXAoY3AsICJNRDUiLCAzKSA9PSAwKSB7Ci0gICAgICAgIG1lbWNweShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICBzaXplb2YodXNtSE1BQ01ENUF1dGhQcm90b2NvbCkpOwotICAgIH0gZWxzZQotI2VuZGlmCi0gICAgICAgIGlmIChzdHJuY21wKGNwLCAiU0hBIiwgMykgPT0gMCkgewotICAgICAgICBtZW1jcHkobmV3dXNlci0+YXV0aFByb3RvY29sLCB1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgIHNpemVvZih1c21ITUFDU0hBMUF1dGhQcm90b2NvbCkpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGNvbmZpZ19wZXJyb3IoIlVua25vd24gYXV0aGVudGljYXRpb24gcHJvdG9jb2wiKTsKLSAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNwID0gc2tpcF90b2tlbihjcCk7Ci0KLSAgICAvKgotICAgICAqIFJFQUQ6IEF1dGhlbnRpY2F0aW9uIFBhc3MgUGhyYXNlIG9yIGtleQotICAgICAqLwotICAgIGlmICghY3ApIHsKLSAgICAgICAgY29uZmlnX3BlcnJvcigibm8gYXV0aGVudGljYXRpb24gcGFzcyBwaHJhc2UiKTsKLSAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgIGlmIChzdHJjbXAoYnVmLCItbSIpID09IDApIHsKLSAgICAgICAgLyogYSBtYXN0ZXIga2V5IGlzIHNwZWNpZmllZCAqLwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICByZXQgPSBzaXplb2YodXNlcktleSk7Ci0gICAgICAgIHRtcHAgPSB1c2VyS2V5OwotICAgICAgICB1c2VyS2V5TGVuID0gMDsKLSAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJnRtcHAsICZyZXQsICZ1c2VyS2V5TGVuLCAwLCBidWYpKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbSIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoc3RyY21wKGJ1ZiwiLWwiKSAhPSAwKSB7Ci0gICAgICAgIC8qIGEgcGFzc3dvcmQgaXMgc3BlY2lmaWVkICovCi0gICAgICAgIHVzZXJLZXlMZW4gPSBzaXplb2YodXNlcktleSk7Ci0gICAgICAgIHJldDIgPSBnZW5lcmF0ZV9LdShuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgKHVfY2hhciAqKSBidWYsIHN0cmxlbihidWYpLCB1c2VyS2V5LCAmdXNlcktleUxlbik7Ci0gICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkgZnJvbSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAic3VwcGxpZWQgcGFzcyBwaHJhc2UuIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfSAgICAgICAgCi0gICAgICAgIAotICAgIC8qCi0gICAgICogQW5kIHR1cm4gaXQgaW50byBhIGxvY2FsaXplZCBrZXkgCi0gICAgICovCi0gICAgcmV0MiA9IHNjX2dldF9wcm9wZXJsZW5ndGgobmV3dXNlci0+YXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbik7Ci0gICAgaWYgKHJldDIgPD0gMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJDb3VsZCBub3QgZ2V0IHByb3BlciBhdXRoZW50aWNhdGlvbiBwcm90b2NvbCBrZXkgbGVuZ3RoIik7Ci0JdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBuZXd1c2VyLT5hdXRoS2V5ID0gKHVfY2hhciAqKSBtYWxsb2MocmV0Mik7Ci0KLSAgICBpZiAoc3RyY21wKGJ1ZiwiLWwiKSA9PSAwKSB7Ci0gICAgICAgIC8qIGEgbG9jYWwga2V5IGlzIGRpcmVjdGx5IHNwZWNpZmllZCAqLwotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICBuZXd1c2VyLT5hdXRoS2V5TGVuID0gMDsKLSAgICAgICAgcmV0ID0gcmV0MjsKLSAgICAgICAgaWYgKCFzbm1wX2hleF90b19iaW5hcnkoJm5ld3VzZXItPmF1dGhLZXksICZyZXQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXd1c2VyLT5hdXRoS2V5TGVuLCAwLCBidWYpKSB7Ci0gICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbCIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgICAgICBpZiAocmV0ICE9IG5ld3VzZXItPmF1dGhLZXlMZW4pIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImltcHJvcGVyIGtleSBsZW5ndGggdG8gLWwiKTsKLSAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBuZXd1c2VyLT5hdXRoS2V5TGVuID0gcmV0MjsKLSAgICAgICAgcmV0MiA9IGdlbmVyYXRlX2t1bChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmVuZ2luZUlELCBuZXd1c2VyLT5lbmdpbmVJRExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJLZXksIHVzZXJLZXlMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoS2V5LCAmbmV3dXNlci0+YXV0aEtleUxlbik7Ci0gICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY291bGQgbm90IGdlbmVyYXRlIGxvY2FsaXplZCBhdXRoZW50aWNhdGlvbiBrZXkgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAiKEt1bCkgZnJvbSB0aGUgbWFzdGVyIGtleSAoS3UpLiIpOwotICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY3ApCi0gICAgICAgIGdvdG8gYWRkOyAgICAgICAgICAgICAgIC8qIG5vIHByaXZhY3kgdHlwZSAod2hpY2ggaXMgbGVnYWwpICovCi0KLSAgICAvKgotICAgICAqIFJFQUQ6IFByaXZhY3kgVHlwZSAKLSAgICAgKi8KLSAgICB0ZXN0Y2FzZSA9IDA7Ci0jaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9ERVMKLSAgICBpZiAoc3RybmNtcChjcCwgIkRFUyIsIDMpID09IDApIHsKLSAgICAgICAgbWVtY3B5KG5ld3VzZXItPnByaXZQcm90b2NvbCwgdXNtREVTUHJpdlByb3RvY29sLAotICAgICAgICAgICAgICAgc2l6ZW9mKHVzbURFU1ByaXZQcm90b2NvbCkpOwotICAgICAgICB0ZXN0Y2FzZSA9IDE7Ci0JLyogREVTIHVzZXMgYSAxMjggYml0IGtleSwgNjQgYml0cyBvZiB3aGljaCBpcyBhIHNhbHQgKi8KLQlwcml2S2V5TGVuID0gMTY7Ci0gICAgfQotI2VuZGlmCi0jaWZkZWYgSEFWRV9BRVMKLSAgICBpZiAoc3RybmNtcChjcCwgIkFFUzEyOCIsIDYpID09IDAgfHwKLSAgICAgICAgICAgICAgIHN0cm5jbXAoY3AsICJBRVMiLCAzKSA9PSAwKSB7Ci0gICAgICAgIG1lbWNweShuZXd1c2VyLT5wcml2UHJvdG9jb2wsIHVzbUFFU1ByaXZQcm90b2NvbCwKLSAgICAgICAgICAgICAgIHNpemVvZih1c21BRVNQcml2UHJvdG9jb2wpKTsKLSAgICAgICAgdGVzdGNhc2UgPSAxOwotCXByaXZLZXlMZW4gPSAxNjsKLSAgICB9Ci0jZW5kaWYKLSAgICBpZiAodGVzdGNhc2UgPT0gMCkgewotICAgICAgICBjb25maWdfcGVycm9yKCJVbmtub3duIHByaXZhY3kgcHJvdG9jb2wiKTsKLSAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGNwID0gc2tpcF90b2tlbihjcCk7Ci0gICAgLyoKLSAgICAgKiBSRUFEOiBFbmNyeXB0aW9uIFBhc3MgUGhyYXNlIG9yIGtleQotICAgICAqLwotICAgIGlmICghY3ApIHsKLSAgICAgICAgLyoKLSAgICAgICAgICogYXNzdW1lIHRoZSBzYW1lIGFzIHRoZSBhdXRoZW50aWNhdGlvbiBrZXkgCi0gICAgICAgICAqLwotICAgICAgICBuZXd1c2VyLT5wcml2S2V5ID0gbmV0c25tcF9tZW1kdXAobmV3dXNlci0+YXV0aEtleSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld3VzZXItPmF1dGhLZXlMZW4pOwotICAgICAgICBuZXd1c2VyLT5wcml2S2V5TGVuID0gbmV3dXNlci0+YXV0aEtleUxlbjsKLSAgICB9IGVsc2UgewotICAgICAgICBjcCA9IGNvcHlfbndvcmQoY3AsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwotICAgICAgICAKLSAgICAgICAgaWYgKHN0cmNtcChidWYsIi1tIikgPT0gMCkgewotICAgICAgICAgICAgLyogYSBtYXN0ZXIga2V5IGlzIHNwZWNpZmllZCAqLwotICAgICAgICAgICAgY3AgPSBjb3B5X253b3JkKGNwLCBidWYsIHNpemVvZihidWYpKTsKLSAgICAgICAgICAgIHJldCA9IHNpemVvZih1c2VyS2V5KTsKLSAgICAgICAgICAgIHRtcHAgPSB1c2VyS2V5OwotICAgICAgICAgICAgdXNlcktleUxlbiA9IDA7Ci0gICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmdG1wcCwgJnJldCwgJnVzZXJLZXlMZW4sIDAsIGJ1ZikpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJpbnZhbGlkIGtleSB2YWx1ZSBhcmd1bWVudCB0byAtbSIpOwotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKHN0cmNtcChidWYsIi1sIikgIT0gMCkgewotICAgICAgICAgICAgLyogYSBwYXNzd29yZCBpcyBzcGVjaWZpZWQgKi8KLSAgICAgICAgICAgIHVzZXJLZXlMZW4gPSBzaXplb2YodXNlcktleSk7Ci0gICAgICAgICAgICByZXQyID0gZ2VuZXJhdGVfS3UobmV3dXNlci0+YXV0aFByb3RvY29sLCBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIGJ1Ziwgc3RybGVuKGJ1ZiksIHVzZXJLZXksICZ1c2VyS2V5TGVuKTsKLSAgICAgICAgICAgIGlmIChyZXQyICE9IFNOTVBFUlJfU1VDQ0VTUykgewotICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZW5lcmF0ZSB0aGUgcHJpdmFjeSBrZXkgZnJvbSB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN1cHBsaWVkIHBhc3MgcGhyYXNlLiIpOwotICAgICAgICAgICAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICAgICAgCi0gICAgICAgIC8qCi0gICAgICAgICAqIEFuZCB0dXJuIGl0IGludG8gYSBsb2NhbGl6ZWQga2V5IAotICAgICAgICAgKi8KLSAgICAgICAgcmV0MiA9IHNjX2dldF9wcm9wZXJsZW5ndGgobmV3dXNlci0+YXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5hdXRoUHJvdG9jb2xMZW4pOwotICAgICAgICBpZiAocmV0MiA8IDApIHsKLSAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvdWxkIG5vdCBnZXQgcHJvcGVyIGtleSBsZW5ndGggdG8gdXNlIGZvciB0aGUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAicHJpdmFjeSBhbGdvcml0aG0uIik7Ci0gICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIG5ld3VzZXItPnByaXZLZXkgPSAodV9jaGFyICopIG1hbGxvYyhyZXQyKTsKLQotICAgICAgICBpZiAoc3RyY21wKGJ1ZiwiLWwiKSA9PSAwKSB7Ci0gICAgICAgICAgICAvKiBhIGxvY2FsIGtleSBpcyBkaXJlY3RseSBzcGVjaWZpZWQgKi8KLSAgICAgICAgICAgIGNwID0gY29weV9ud29yZChjcCwgYnVmLCBzaXplb2YoYnVmKSk7Ci0gICAgICAgICAgICByZXQgPSByZXQyOwotICAgICAgICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IDA7Ci0gICAgICAgICAgICBpZiAoIXNubXBfaGV4X3RvX2JpbmFyeSgmbmV3dXNlci0+cHJpdktleSwgJnJldCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZuZXd1c2VyLT5wcml2S2V5TGVuLCAwLCBidWYpKSB7Ci0gICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiaW52YWxpZCBrZXkgdmFsdWUgYXJndW1lbnQgdG8gLWwiKTsKLSAgICAgICAgICAgICAgICB1c21fZnJlZV91c2VyKG5ld3VzZXIpOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG5ld3VzZXItPnByaXZLZXlMZW4gPSByZXQyOwotICAgICAgICAgICAgcmV0MiA9IGdlbmVyYXRlX2t1bChuZXd1c2VyLT5hdXRoUHJvdG9jb2wsIG5ld3VzZXItPmF1dGhQcm90b2NvbExlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5lbmdpbmVJRCwgbmV3dXNlci0+ZW5naW5lSURMZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcktleSwgdXNlcktleUxlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXd1c2VyLT5wcml2S2V5LCAmbmV3dXNlci0+cHJpdktleUxlbik7Ci0gICAgICAgICAgICBpZiAocmV0MiAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb3VsZCBub3QgZ2VuZXJhdGUgbG9jYWxpemVkIHByaXZhY3kga2V5ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIoS3VsKSBmcm9tIHRoZSBtYXN0ZXIga2V5IChLdSkuIik7Ci0gICAgICAgICAgICAgICAgdXNtX2ZyZWVfdXNlcihuZXd1c2VyKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoKG5ld3VzZXItPnByaXZLZXlMZW4gPj0gcHJpdktleUxlbikgfHwgKHByaXZLZXlMZW4gPT0gMCkpewotICAgICAgbmV3dXNlci0+cHJpdktleUxlbiA9IHByaXZLZXlMZW47Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgLyogVGhlIHByaXZLZXkgbGVuZ3RoIGlzIHNtYWxsZXIgdGhhbiByZXF1aXJlZCBieSBwcml2UHJvdG9jb2wgKi8KLSAgICAgIHVzbV9mcmVlX3VzZXIobmV3dXNlcik7Ci0gICAgICByZXR1cm47Ci0gICAgfQotCi0gIGFkZDoKLSAgICB1c21fYWRkX3VzZXIobmV3dXNlcik7Ci0gICAgREVCVUdNU0dUTCgoInVzbVVzZXIiLCAiY3JlYXRlZCBhIG5ldyB1c2VyICVzIGF0ICIsIG5ld3VzZXItPnNlY05hbWUpKTsKLSAgICBERUJVR01TR0hFWCgoInVzbVVzZXIiLCBuZXd1c2VyLT5lbmdpbmVJRCwgbmV3dXNlci0+ZW5naW5lSURMZW4pKTsKLSAgICBERUJVR01TRygoInVzbVVzZXIiLCAiXG4iKSk7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCiAgKiBlbmdpbmVCb290c19jb25mCiAgKgpAQCAtMTA1Niw3ICs2NzIsNyBAQAogZW5naW5lQm9vdHNfY29uZihjb25zdCBjaGFyICp3b3JkLCBjaGFyICpjcHRyKQogewogICAgIGVuZ2luZUJvb3RzID0gYXRvaShjcHRyKSArIDE7Ci0gICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJlbmdpbmVCb290czogJWRcbiIsIGVuZ2luZUJvb3RzKSk7CisgICAgREVCVUdNU0dUTCgoInNubXB2MyIsICJlbmdpbmVCb290czogJWx1XG4iLCBlbmdpbmVCb290cykpOwogfQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgpAQCAtMTEyNyw5ICs3NDMsNyBAQAogICAgICAgICAvKgogICAgICAgICAgKiBTZWUgaWYgYWxyZWFkeSBzZXQgaWYgc28gZXJhc2UgJiByZWxlYXNlIGl0IAogICAgICAgICAgKi8KLSAgICAgICAgaWYgKE5VTEwgIT0gZW5naW5lSUROaWMpIHsKLSAgICAgICAgICAgIFNOTVBfRlJFRShlbmdpbmVJRE5pYyk7Ci0gICAgICAgIH0KKyAgICAgICAgU05NUF9GUkVFKGVuZ2luZUlETmljKTsKICAgICAgICAgZW5naW5lSUROaWMgPSAodV9jaGFyICopIG1hbGxvYyhzdHJsZW4oY3B0cikgKyAxKTsKICAgICAgICAgaWYgKE5VTEwgIT0gZW5naW5lSUROaWMpIHsKICAgICAgICAgICAgIHN0cmNweSgoY2hhciAqKSBlbmdpbmVJRE5pYywgY3B0cik7CkBAIC0xMTk4LDcgKzgxMiw3IEBACiB9CiAKIC8qCi0gKiBlbmdpbmVJRF9vbGRfY29uZihjb25zdCBjaGFyICosIGNoYXIgKik6CisgKiBvbGRlbmdpbmVJRF9jb25mKGNvbnN0IGNoYXIgKiwgY2hhciAqKToKICAqIAogICogUmVhZHMgYSBvY3RldCBzdHJpbmcgZW5jb2RlZCBlbmdpbmVJRCBpbnRvIHRoZSBvbGRFbmdpbmVJRCBhbmQKICAqIG9sZEVuZ2luZUlETGVuIHBvaW50ZXJzLgpAQCAtMTIxMCw4ICs4MjQsMzIgQEAKIH0KIAogLyoKKyAqIGV4YWN0RW5naW5lSURfY29uZihjb25zdCBjaGFyICosIGNoYXIgKik6CisgKiAKKyAqIFJlYWRzIGEgb2N0ZXQgc3RyaW5nIGVuY29kZWQgZW5naW5lSUQgaW50byB0aGUgZW5naW5lSUQgYW5kCisgKiBlbmdpbmVJRExlbiBwb2ludGVycy4KKyAqLwordm9pZAorZXhhY3RFbmdpbmVJRF9jb25mKGNvbnN0IGNoYXIgKndvcmQsIGNoYXIgKmNwdHIpCit7CisgICAgcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmcoY3B0ciwgJmVuZ2luZUlELCAmZW5naW5lSURMZW5ndGgpOworICAgIGlmIChlbmdpbmVJRExlbmd0aCA+IE1BWF9FTkdJTkVJRF9MRU5HVEgpIHsKKwluZXRzbm1wX2NvbmZpZ19lcnJvcigKKwkgICAgImV4YWN0RW5naW5lSUQgJyVzJyB0b28gbG9uZzsgdHJ1bmNhdGluZyB0byAlZCBieXRlcyIsCisJICAgIGNwdHIsIE1BWF9FTkdJTkVJRF9MRU5HVEgpOworICAgICAgICBlbmdpbmVJRFtNQVhfRU5HSU5FSURfTEVOR1RIIC0gMV0gPSAnXDAnOworICAgICAgICBlbmdpbmVJRExlbmd0aCA9IE1BWF9FTkdJTkVJRF9MRU5HVEg7CisgICAgfQorICAgIGVuZ2luZUlESXNTZXQgPSAxOworICAgIGVuZ2luZUlEVHlwZSA9IEVOR0lORUlEX1RZUEVfRVhBQ1Q7Cit9CisKKworLyoKICAqIG1lcmVseSBjYWxsIAogICovCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YoZ2V0X2VuZ2luZXRpbWVfYWxhcm0sIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0dFVF9FTkdJTkVUSU1FX0FMQVJNCiB2b2lkCiBnZXRfZW5naW5ldGltZV9hbGFybSh1bnNpZ25lZCBpbnQgcmVnbnVtLCB2b2lkICpjbGllbnRhcmdzKQogewpAQCAtMTIxOSw2ICs4NTcsNyBAQAogICAgICAgIHdyYXBwaW5nIG9mIHRoZSB0aW1lcygpIG91dHB1dCAqLwogICAgIHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSgpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfR0VUX0VOR0lORVRJTUVfQUxBUk0gKi8KIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKICAqIGluaXRfc25tcHYzCkBAIC0xMjMzLDE5ICs4NzIsNyBAQAogdm9pZAogaW5pdF9zbm1wdjMoY29uc3QgY2hhciAqdHlwZSkKIHsKLSNpZiBTTk1QX1VTRV9USU1FUwotICBzdHJ1Y3QgdG1zIGR1bW15OwotCi0gIC8qIGZpeG1lOiAtMSBpcyBmYXVsdCBjb2RlLi4uICovCi0gIHNubXB2M3N0YXJ0Q2xvY2sgPSB0aW1lcygmZHVtbXkpOwotCi0gIC8qIHJlbWVtYmVyIGhvdyBtYW55IHRpY2tzIHBlciBzZWNvbmQgdGhlcmUgYXJlLCBzaW5jZSB0aW1lcygpIHJldHVybnMgdGhpcyAqLwotCi0gIGNsb2NrdGlja3MgPSBzeXNjb25mKF9TQ19DTEtfVENLKTsKLQotI2VuZGlmIC8qIFNOTVBfVVNFX1RJTUVTICovCi0KLSAgICBnZXR0aW1lb2ZkYXkoJnNubXB2M3N0YXJ0dGltZSwgTlVMTCk7CisgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCZzbm1wdjNzdGFydHRpbWUpOwogCiAgICAgaWYgKCF0eXBlKQogICAgICAgICB0eXBlID0gIl9fc25tcGFwcF9fIjsKQEAgLTEyNjcsMTMgKzg5NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdjNfc3RvcmUsICh2b2lkICopIHN0cmR1cCh0eXBlKSk7CiAKICAgICAvKgotICAgICAqIEZyZWUgc3R1ZmYgYXQgc2h1dGRvd24gdGltZQotICAgICAqLwotICAgIHNubXBfcmVnaXN0ZXJfY2FsbGJhY2soU05NUF9DQUxMQkFDS19MSUJSQVJZLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyZWVfZW5naW5ldGltZV9vbl9zaHV0ZG93biwgTlVMTCk7Ci0KLSAgICAvKgogICAgICAqIGluaXRpYWxpemUgc3VibW9kdWxlcyAKICAgICAgKi8KICAgICAvKgpAQCAtMTI5Myw2ICs5MTMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInN0cmluZyIpOwogICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIodHlwZSwgIm9sZEVuZ2luZUlEIiwgb2xkZW5naW5lSURfY29uZiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOworICAgIHJlZ2lzdGVyX3ByZW5ldHNubXBfbWliX2hhbmRsZXIodHlwZSwgImV4YWN0RW5naW5lSUQiLCBleGFjdEVuZ2luZUlEX2NvbmYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKICAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKHR5cGUsICJlbmdpbmVJRFR5cGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lSURUeXBlX2NvbmYsIE5VTEwsICJudW0iKTsKICAgICByZWdpc3Rlcl9wcmVuZXRzbm1wX21pYl9oYW5kbGVyKHR5cGUsICJlbmdpbmVJRE5pYyIsIGVuZ2luZUlETmljX2NvbmYsCkBAIC0xMzMxLDMwICs5NTMsOSBAQAogICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImRlZlZlcnNpb24iLCB2ZXJzaW9uX2NvbmYsIE5VTEwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjF8MmN8MyIpOwogCi0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiZGVmQXV0aFR5cGUiLCBzbm1wdjNfYXV0aHR5cGVfY29uZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCAiTUQ1fFNIQSIpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKCJzbm1wIiwgImRlZlByaXZUeXBlIiwgc25tcHYzX3ByaXZ0eXBlX2NvbmYsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwKLSNpZmRlZiBIQVZFX0FFUwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERVN8QUVTIik7Ci0jZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJERVMgKEFFUyBzdXBwb3J0IG5vdCBhdmFpbGFibGUpIik7Ci0jZW5kaWYKICAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJkZWZTZWN1cml0eUxldmVsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wdjNfc2VjTGV2ZWxfY29uZiwgTlVMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibm9BdXRoTm9Qcml2fGF1dGhOb1ByaXZ8YXV0aFByaXYiKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldEF1dGhQYXNzIiwgdXNtX3NldF9wYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldFByaXZQYXNzIiwgdXNtX3NldF9wYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKLSAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcih0eXBlLCAidXNlclNldEF1dGhLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0UHJpdktleSIsIHVzbV9zZXRfcGFzc3dvcmQsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7Ci0gICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIodHlwZSwgInVzZXJTZXRBdXRoTG9jYWxLZXkiLCB1c21fc2V0X3Bhc3N3b3JkLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpOwotICAgIHJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyKHR5cGUsICJ1c2VyU2V0UHJpdkxvY2FsS2V5IiwgdXNtX3NldF9wYXNzd29yZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBOVUxMKTsKIH0KIAogLyoKQEAgLTEzODMsMTggKzk4NCwyMCBAQAogICAgIC8qCiAgICAgICogaWYgb3VyIGVuZ2luZUlEIGhhcyBjaGFuZ2VkIGF0IGFsbCwgdGhlIGJvb3RzIHJlY29yZCBtdXN0IGJlIHNldCB0byAxIAogICAgICAqLwotICAgIGlmIChlbmdpbmVJRExlbiAhPSAoaW50KSBvbGRFbmdpbmVJRExlbmd0aCB8fAorICAgIGlmIChlbmdpbmVJRExlbiAhPSBvbGRFbmdpbmVJRExlbmd0aCB8fAogICAgICAgICBvbGRFbmdpbmVJRCA9PSBOVUxMIHx8IGNfZW5naW5lSUQgPT0gTlVMTCB8fAogICAgICAgICBtZW1jbXAob2xkRW5naW5lSUQsIGNfZW5naW5lSUQsIGVuZ2luZUlETGVuKSAhPSAwKSB7CiAgICAgICAgIGVuZ2luZUJvb3RzID0gMTsKICAgICB9CiAKKyNpZmRlZiBORVRTTk1QX1NFQ01PRF9VU00KICAgICAvKgotICAgICAqIHNldCBvdXIgbG9jYWwgZW5naW5lVGltZSBpbiB0aGUgTENEIHRpbWluZyBjYWNoZSAKKyAgICAgKiBmb3IgVVNNIHNldCBvdXIgbG9jYWwgZW5naW5lVGltZSBpbiB0aGUgTENEIHRpbWluZyBjYWNoZSAKICAgICAgKi8KICAgICBzZXRfZW5naW5ldGltZShjX2VuZ2luZUlELCBlbmdpbmVJRExlbiwKICAgICAgICAgICAgICAgICAgICBzbm1wdjNfbG9jYWxfc25tcEVuZ2luZUJvb3RzKCksCiAgICAgICAgICAgICAgICAgICAgc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCksIFRSVUUpOworI2VuZGlmIC8qIE5FVFNOTVBfU0VDTU9EX1VTTSAqLwogCiAgICAgU05NUF9GUkVFKGNfZW5naW5lSUQpOwogICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CkBAIC0xNTA4LDEwICsxMTExLDcgQEAKICAgICBpZiAoIWRlc3QgfHwgIWRlc3RsZW4pCiAgICAgICAgIHJldHVybiAwOwogCi0gICAgaWYgKCpkZXN0KSB7Ci0gICAgICAgIFNOTVBfRlJFRSgqZGVzdCk7Ci0gICAgICAgICpkZXN0ID0gTlVMTDsKLSAgICB9CisgICAgU05NUF9GUkVFKCpkZXN0KTsKICAgICAqZGVzdGxlbiA9IDA7CiAKICAgICBpZiAoc3JjbGVuICYmIHNyYykgewpAQCAtMTU1OSwzOCArMTE1OSwzMyBAQAogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBzbm1wdjNfZ2VuZXJhdGVfZW5naW5lSUQoKSAqLwogCi0vKgotICogc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lKCk6IHJldHVybiB0aGUgbnVtYmVyIG9mIHNlY29uZHMgc2luY2UgdGhlCi0gKiBzbm1wdjMgZW5naW5lIGxhc3QgaW5jcmVtZW50ZWQgZW5naW5lX2Jvb3RzIAorLyoqCisgKiBSZXR1cm4gdGhlIHZhbHVlIG9mIHNubXBFbmdpbmVUaW1lLiBBY2NvcmRpbmcgdG8gUkZDIDM0MTQgc25tcEVuZ2luZVRpbWUKKyAqIGlzIGEgMzEtYml0IGNvdW50ZXIuIGVuZ2luZUJvb3RzIG11c3QgYmUgaW5jcmVtZW50ZWQgZXZlcnkgdGltZSB0aGF0CisgKiBjb3VudGVyIHdyYXBzIGFyb3VuZC4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIDxhIGhyZWY9Imh0dHA6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM0MTQiPlJGQyAzNDE0PC9hPi4KKyAqCisgKiBAbm90ZSBJdCBpcyBhc3N1bWVkIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgbGVhc3Qgb25jZSBldmVyeQorICogICAyKiozMSBzZWNvbmRzLgogICovCiB1X2xvbmcKIHNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZSh2b2lkKQogewotI2lmZGVmIFNOTVBfVVNFX1RJTUVTCi0gIHN0cnVjdCB0bXMgZHVtbXk7Ci0gIGNsb2NrX3Qgbm93ID0gdGltZXMoJmR1bW15KTsKLSAgLyogZml4bWU6IC0xIGlzIGZhdWx0IGNvZGUuLi4gKi8KLSAgdW5zaWduZWQgaW50IHJlc3VsdDsKKyNpZmRlZiBORVRTTk1QX0ZFQVRVUkVfQ0hFQ0tJTkcKKyAgICBuZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjYWxjdWxhdGVfc2VjdGltZV9kaWZmKQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9DSEVDS0lORyAqLwogCi0gIGlmIChub3cgPCBzbm1wdjNzdGFydENsb2NrKSB7Ci0gICAgICByZXN1bHQgPSBVSU5UX01BWCAtIChzbm1wdjNzdGFydENsb2NrIC0gbm93KTsKLSAgfSBlbHNlIHsKLSAgICAgIHJlc3VsdCA9IG5vdyAtIHNubXB2M3N0YXJ0Q2xvY2s7Ci0gIH0KLSAgaWYgKHJlc3VsdCA8IGxhc3RjYWxsdGltZSkgewotICAgICAgLyogd3JhcHBlZCAqLwotICAgICAgd3JhcGNvdW50ZXIrKzsKLSAgfQotICBsYXN0Y2FsbHRpbWUgPSByZXN1bHQ7Ci0gIHJlc3VsdCA9ICAoVUlOVF9NQVgvY2xvY2t0aWNrcykqd3JhcGNvdW50ZXIgKyByZXN1bHQvY2xvY2t0aWNrczsKLQotICByZXR1cm4gcmVzdWx0OwotI2Vsc2UgLyogIVNOTVBfVVNFX1RJTUVTICovCisgICAgc3RhdGljIHVpbnQzMl90IGxhc3RfZW5naW5lVGltZTsKICAgICBzdHJ1Y3QgdGltZXZhbCAgbm93OworICAgIHVpbnQzMl90IGVuZ2luZVRpbWU7CiAKLSAgICBnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCk7Ci0gICAgcmV0dXJuIGNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoJm5vdywgJnNubXB2M3N0YXJ0dGltZSk7Ci0jZW5kaWYgLyogSEFWRV9TWVNfVElNRVNfSCAqLworICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKKyAgICBlbmdpbmVUaW1lID0gY2FsY3VsYXRlX3NlY3RpbWVfZGlmZigmbm93LCAmc25tcHYzc3RhcnR0aW1lKSAmIDB4N2ZmZmZmZmZMOworICAgIGlmIChlbmdpbmVUaW1lIDwgbGFzdF9lbmdpbmVUaW1lKQorICAgICAgICBlbmdpbmVCb290cysrOworICAgIGxhc3RfZW5naW5lVGltZSA9IGVuZ2luZVRpbWU7CisgICAgcmV0dXJuIGVuZ2luZVRpbWU7CiB9CiAKIApAQCAtMTY2MiwxOCArMTI1NywxNyBAQAogI2VuZGlmCiAKICNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKLS8qCi0gKiBzbm1wdjNfc2V0X2VuZ2luZUJvb3RzQW5kVGltZSgpOiB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LiAgR28gYXdheS4gCi0gKi8KLS8qCi0gKiBJdCBjZXJ0YWlubHkgc2hvdWxkIG5ldmVyIGJlIHVzZWQsIHVubGVzcyBpbiBhIHRlc3Rpbmcgc2NlbmVybywKLSAqIHdoaWNoIGlzIHdoeSBpdCB3YXMgY3JlYXRlZCAKKy8qKgorICogU2V0IFNOTVB2MyBlbmdpbmVCb290cyBhbmQgc3RhcnQgdGltZS4KKyAqCisgKiBAbm90ZSBUaGlzIGZ1bmN0aW9uIGRvZXMgbm90IGV4aXN0LiBHbyBhd2F5LiBJdCBjZXJ0YWlubHkgc2hvdWxkIG5ldmVyIGJlCisgKiAgIHVzZWQsIHVubGVzcyBpbiBhIHRlc3Rpbmcgc2NlbmFyaW8sIHdoaWNoIGlzIHdoeSBpdCB3YXMgY3JlYXRlZAogICovCiB2b2lkCiBzbm1wdjNfc2V0X2VuZ2luZUJvb3RzQW5kVGltZShpbnQgYm9vdHMsIGludCB0dGltZSkKIHsKICAgICBlbmdpbmVCb290cyA9IGJvb3RzOwotICAgIGdldHRpbWVvZmRheSgmc25tcHYzc3RhcnR0aW1lLCBOVUxMKTsKKyAgICBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soJnNubXB2M3N0YXJ0dGltZSk7CiAgICAgc25tcHYzc3RhcnR0aW1lLnR2X3NlYyAtPSB0dGltZTsKIH0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvc25tcGxpYi9zbnByaW50Zi5jIGIvc25tcGxpYi9zbnByaW50Zi5jCmluZGV4IGFhYWY3ZDEuLjcyNmM0ZjQgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc25wcmludGYuYworKysgYi9zbm1wbGliL3NucHJpbnRmLmMKQEAgLTYzLDI1ICs2MywxMSBAQAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAKLSNpZiBIQVZFX1NUREFSR19ICiAjIGluY2x1ZGUgPHN0ZGFyZy5oPgotIyBkZWZpbmUgSEFWRV9TVERBUkdTICAgICAgICAgICAvKiBsZXQncyBob3BlIHRoYXQgd29ya3MgZXZlcnl3aGVyZSAobWopICovCiAjIGRlZmluZSBWQV9MT0NBTF9ERUNMICAgdmFfbGlzdCBhcAogIyBkZWZpbmUgVkFfU1RBUlQoZikgICAgIHZhX3N0YXJ0KGFwLCBmKQogIyBkZWZpbmUgVkFfU0hJRlQodix0KSAgOyAgICAgICAvKiBuby1vcCBmb3IgQU5TSSAqLwogIyBkZWZpbmUgVkFfRU5EICAgICAgICAgIHZhX2VuZChhcCkKLSNlbGlmIEhBVkVfVkFSQVJHU19ICi0jICBpbmNsdWRlIDx2YXJhcmdzLmg+Ci0jICB1bmRlZiBIQVZFX1NUREFSR1MKLSMgIGRlZmluZSBWQV9MT0NBTF9ERUNMICAgdmFfbGlzdCBhcAotIyAgZGVmaW5lIFZBX1NUQVJUKGYpICAgICB2YV9zdGFydChhcCkgIC8qIGYgaXMgaWdub3JlZCEgKi8KLSMgIGRlZmluZSBWQV9TSElGVCh2LHQpIHYgPSB2YV9hcmcoYXAsdCkKLSMgIGRlZmluZSBWQV9FTkQgICAgICAgIHZhX2VuZChhcCkKLSNlbHNlCi0vKgotICogWFggKiogTk8gVkFSQVJHUyAqKiBYWAotICovCi0jZW5kaWYKIAogI2lmZGVmIEhBVkVfTE9OR19ET1VCTEUKICNkZWZpbmUgTERPVUJMRSBsb25nIGRvdWJsZQpAQCAtNzI1LDIwICs3MTEsOSBAQAogLyoKICAqIFZBUkFSR1MzIAogICovCi0jaWZkZWYgSEFWRV9TVERBUkdTCiBpbnQKIHNucHJpbnRmKGNoYXIgKnN0ciwgc2l6ZV90IGNvdW50LCBjb25zdCBjaGFyICpmbXQsIC4uLikKLSNlbHNlCi1pbnQKLXNucHJpbnRmKHZhX2FsaXN0KQotICAgICB2YV9kY2wKLSNlbmRpZgogewotI2lmbmRlZiBIQVZFX1NUREFSR1MKLSAgICBjaGFyICAgICAgICAgICAqc3RyOwotICAgIHNpemVfdCAgICAgICAgICBjb3VudDsKLSAgICBjaGFyICAgICAgICAgICAqZm10OwotI2VuZGlmCiAgICAgVkFfTE9DQUxfREVDTDsKIAogICAgIFZBX1NUQVJUKGZtdCk7CkBAIC04MjgsNCArODAzLDYgQEAKIH0KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogU05QUklOVEZfVEVTVCAqLwogCisjZWxzZQoraW50IHNucHJpbnRmX3VudXNlZDsJLyogU3VwcHJlc3MgImVtcHR5IHRyYW5zbGF0aW9uIHVuaXQiIHdhcm5pbmcgKi8KICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfU05QUklOVEYgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc3RybGNweS5jIGIvc25tcGxpYi9zdHJsY3B5LmMKaW5kZXggY2U1N2Y0MC4uMDIzNWEzMCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zdHJsY3B5LmMKKysrIGIvc25tcGxpYi9zdHJsY3B5LmMKQEAgLTUsOCArNSw2IEBACiAgKi8KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAotI2lmICFIQVZFX1NUUkxDUFkKLQogI2lmIEhBVkVfU1RSSU5HX0gKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNlbHNlCkBAIC0xNSw2ICsxMyw4IEBACiAKICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKIC8qIAogICogQ29waWVzIHNyYyB0byB0aGUgZGVzdCBidWZmZXIuIFRoZSBjb3B5IHdpbGwgbmV2ZXIgb3ZlcmZsb3cgdGhlIGRlc3QgYnVmZmVyCiAgKiBhbmQgZGVzdCB3aWxsIGFsd2F5cyBiZSBudWxsIHRlcm1pbmF0ZWQsIGxlbiBpcyB0aGUgc2l6ZSBvZiB0aGUgZGVzdCBidWZmZXIuCkBAIC00MSw1ICs0MSwzIEBACiAJZGVzdFtuZXdfbGVuXSA9ICdcMCc7IAogCXJldHVybiAoc3JjX2xlbik7IAogfQotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgIC8qICFIQVZFX1NUUkxDUFkgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc3RydG9rX3IuYyBiL3NubXBsaWIvc3RydG9rX3IuYwppbmRleCBiZmU1YTliLi4yMWQ0N2Q2IDEwMDY0NAotLS0gYS9zbm1wbGliL3N0cnRva19yLmMKKysrIGIvc25tcGxpYi9zdHJ0b2tfci5jCkBAIC0zMSwxNiArMzEsMTYgQEAKICAqLwogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgIUhBVkVfU1RSVE9LX1IKLQogI2lmbmRlZiBXSU4zMgogI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgogI2VuZGlmCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKIC8qCi0gKiB0aHJlYWQtc2F2ZSB2ZXJzaW9uIG9mIHN0cnRvaworICogdGhyZWFkLXNhZmUgdmVyc2lvbiBvZiBzdHJ0b2sKICAqLwogY2hhciAqCiBzdHJ0b2tfcihjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSwgY2hhciAqKmxhc3RzKQpAQCAtNTAsOCArNTAsOCBAQAogCWNoYXIgKnRvazsKIAogCS8qIHMgbWF5IGJlIE5VTEwgKi8KLQkvKmFzc2VydChkZWxpbSAhPSBOVUxMKTsqLwotCS8qYXNzZXJ0KGxhc3RzICE9IE5VTEwpOyovCisJLypuZXRzbm1wX2Fzc2VydChkZWxpbSAhPSBOVUxMKTsqLworCS8qbmV0c25tcF9hc3NlcnQobGFzdHMgIT0gTlVMTCk7Ki8KIAogCWlmIChzID09IE5VTEwgJiYgKHMgPSAqbGFzdHMpID09IE5VTEwpCiAJCXJldHVybiAoTlVMTCk7CkBAIC05Miw0ICs5MiwzIEBACiAJfQogCS8qIE5PVFJFQUNIRUQgKi8KIH0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfU1RSVE9LX1IgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc3RydG9sLmMgYi9zbm1wbGliL3N0cnRvbC5jCmluZGV4IDk4OWExNjMuLmM3MWY4YmEgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvc3RydG9sLmMKKysrIGIvc25tcGxpYi9zdHJ0b2wuYwpAQCAtMzMsOCArMzMsNiBAQAogc3RhdGljIGNoYXIgICAgIHNjY3NpZFtdID0gIkAoIylzdHJ0b2wuYyAgICA1LjQgKEJlcmtlbGV5KSAyLzIzLzkxIjsKICNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLwogCi0jaWYgIUhBVkVfU1RSVE9MCi0KICNpZiBIQVZFX0xJTUlUU19ICiAjaW5jbHVkZSA8bGltaXRzLmg+CiAjZW5kaWYKQEAgLTEyNSw1ICsxMjMsMyBAQAogICAgICAgICAqZW5kcHRyID0gYW55ID8gcyAtIDEgOiAoY2hhciAqKSBucHRyOwogICAgIHJldHVybiAoYWNjKTsKIH0KLQotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhSEFWRV9TVFJUT0wgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc3RydG91bC5jIGIvc25tcGxpYi9zdHJ0b3VsLmMKaW5kZXggODAxMjkyMC4uN2FlYTMzMCAxMDA2NDQKLS0tIGEvc25tcGxpYi9zdHJ0b3VsLmMKKysrIGIvc25tcGxpYi9zdHJ0b3VsLmMKQEAgLTI5LDggKzI5LDYgQEAKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgogCi0jaWYgIUhBVkVfU1RSVE9VTAotCiAjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCiBzdGF0aWMgY2hhciAgICAgc2Njc2lkW10gPSAiQCgjKXN0cnRvdWwuYyAgIDguMSAoQmVya2VsZXkpIDYvNC85MyI7CiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KQEAgLTEwNyw1ICsxMDUsMyBAQAogICAgICAgICAqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CiAgICAgcmV0dXJuIChhY2MpOwogfQotCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFIQVZFX1NUUlRPVUwgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvc3RydG91bGwuYyBiL3NubXBsaWIvc3RydG91bGwuYwppbmRleCBiZTk0ZjI5Li45ZWU1M2I0IDEwMDY0NAotLS0gYS9zbm1wbGliL3N0cnRvdWxsLmMKKysrIGIvc25tcGxpYi9zdHJ0b3VsbC5jCkBAIC0yMCw2ICsyMCw4IEBACiAKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KIAorI2lmbmRlZiBIQVZFX1NUUlRPVUxMCisKICNpbmNsdWRlIDxlcnJuby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8bGltaXRzLmg+CkBAIC00OSwxMyArNTEsOCBAQAogI2RlZmluZSBVTExPTkdfTUFYIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZikKICNlbmRpZgogCi0jaWZkZWYgU1RSVE9VTExfVU5JVF9URVNUCi11aW50NjRfdAotbXlfc3RydG91bGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCi0jZWxzZQogdWludDY0X3QKIHN0cnRvdWxsKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQotI2VuZGlmCiB7CiAgICAgdWludDY0X3QgICAgICAgIHJlc3VsdCA9IDA7CiAgICAgY29uc3QgY2hhciAgICAgKnA7CkBAIC0xNjIsMTIyICsxNTksNCBAQAogICAgIHJldHVybiAwOwogfQogCi0jaWYgZGVmaW5lZChTVFJUT1VMTF9VTklUX1RFU1QpCi0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi0jaWZuZGVmIFBSSXU2NAotI2lmZGVmIF9NU0NfVkVSCi0jZGVmaW5lIFBSSXU2NCAiSTY0dSIKLSNlbHNlCi0jZGVmaW5lIFBSSXU2NCAibGx1IgotI2VuZGlmCi0jZW5kaWYKLQotc3RydWN0IHN0cnRvdWxsX3Rlc3RjYXNlIHsKLSAgICAvKgotICAgICAqIGlucHV0cyAKLSAgICAgKi8KLSAgICBjb25zdCBjaGFyICAgICAqbnB0cjsKLSAgICBpbnQgICAgICAgICAgICAgYmFzZTsKLSAgICAvKgotICAgICAqIGV4cGVjdGVkIG91dHB1dHMgCi0gICAgICovCi0gICAgaW50ICAgICAgICAgICAgIGV4cGVjdGVkX2Vycm5vOwotICAgIGludCAgICAgICAgICAgICBleHBlY3RlZF9lbmQ7Ci0gICAgdWludDY0X3QgICAgICAgIGV4cGVjdGVkX3Jlc3VsdDsKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3RydG91bGxfdGVzdGNhc2UgdGVzdF9pbnB1dFtdID0gewotICAgIHsiMHgwIiwgMCwgMCwgMywgMH0sCi0gICAgeyIxIiwgMCwgMCwgMSwgMX0sCi0gICAgeyIweDEiLCAwLCAwLCAzLCAxfSwKLSAgICB7IiAgLTA2NjYiLCAwLCAwLCA3LCAtMDY2Nn0sCi0gICAgeyIgIC0weDY2NiIsIDAsIDAsIDgsIC0weDY2Nn0sCi0gICAgeyIxODQ0Njc0NDA3MzcwOTU1MTYxNCIsIDAsIDAsIDIwLCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmUpfSwKLSAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZSIsIDAsIDAsIDE4LCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmUpfSwKLSAgICB7IjE4NDQ2NzQ0MDczNzA5NTUxNjE1IiwgMCwgMCwgMjAsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAotICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZmIiwgMCwgMCwgMTgsIFVJTlQ2NF9DKDB4ZmZmZmZmZmZmZmZmZmZmZil9LAotICAgIHsiMTg0NDY3NDQwNzM3MDk1NTE2MTYiLCAwLCBFUkFOR0UsIDIwLCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKLSAgICB7IjB4MTAwMDAwMDAwMDAwMDAwMDAiLCAwLCBFUkFOR0UsIDE5LCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKLSAgICB7ImZmIiwgMTYsIDAsIDIsIDI1NX0sCi0gICAgeyIweGZmIiwgMTYsIDAsIDQsIDI1NX0sCi0gICAgeyIgIiwgMCwgMCwgMCwgMH0sCi0gICAgeyIweCIsIDAsIDAsIDEsIDB9LAotICAgIHsiMHgiLCA4LCAwLCAxLCAwfSwKLSAgICB7IjB4IiwgMTYsIDAsIDEsIDB9LAotICAgIHsienl5eSIsIDAsIDAsIDAsIDB9LAotICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZmZiIsIDAsIEVSQU5HRSwgMTksIFVMTE9OR19NQVh9LAotICAgIHsiMHhmZmZmZmZmZmZmZmZmZmZmZnoiLCAwLCBFUkFOR0UsIDE5LCBVTExPTkdfTUFYfQotfTsKLQotaW50Ci1tYWluKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIGZhaWx1cmVfY291bnQgPSAwOwotICAgIHVuc2lnbmVkIGludCAgICBpOwotCi0gICAgZm9yIChpID0gMDsgaSA8IHNpemVvZih0ZXN0X2lucHV0KSAvIHNpemVvZih0ZXN0X2lucHV0WzBdKTsgaSsrKSB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCBzdHJ0b3VsbF90ZXN0Y2FzZSAqY29uc3QgcCA9ICZ0ZXN0X2lucHV0W2ldOwotICAgICAgICBjaGFyICAgICAgICAgICAqZW5kcHRyOwotICAgICAgICB1aW50NjRfdCAgICAgICAgcmVzdWx0OwotCi0gICAgICAgIGVycm5vID0gMDsKLSAgICAgICAgcmVzdWx0ID0gbXlfc3RydG91bGwocC0+bnB0ciwgJmVuZHB0ciwgcC0+YmFzZSk7Ci0gICAgICAgIGlmIChlcnJubyAhPSBwLT5leHBlY3RlZF9lcnJubykgewotICAgICAgICAgICAgZmFpbHVyZV9jb3VudCsrOwotICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0ICVkIGZhaWxlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgZXJybm8gJWQiCi0gICAgICAgICAgICAgICAgICAgIiwgZ290IGVycm5vICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX2Vycm5vLCBlcnJubyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBwLT5leHBlY3RlZF9yZXN1bHQpIHsKLSAgICAgICAgICAgIGZhaWx1cmVfY291bnQrKzsKLSAgICAgICAgICAgIHByaW50ZigidGVzdCAlZCBmYWlsZWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIHJlc3VsdCAlIiBQUkl1NjQKLSAgICAgICAgICAgICAgICAgICAiLCBnb3QgcmVzdWx0ICUiIFBSSXU2NCAiXG4iLAotICAgICAgICAgICAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX3Jlc3VsdCwgcmVzdWx0KTsKLSAgICAgICAgfQotICAgICAgICBpZiAoZW5kcHRyIC0gcC0+bnB0ciAhPSBwLT5leHBlY3RlZF9lbmQpIHsKLSAgICAgICAgICAgIGZhaWx1cmVfY291bnQrKzsKLSAgICAgICAgICAgIHByaW50ZigidGVzdCAlZCBmYWlsZWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIGVuZCAlZCwiCi0gICAgICAgICAgICAgICAgICAgIiBnb3QgZW5kICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX2VuZCwgKGludCkgKGVuZHB0ciAtIHAtPm5wdHIpKTsKLSAgICAgICAgfQotCi0jaWYgSEFWRV9TVFJUT1VMTAotICAgICAgICBlcnJubyA9IDA7Ci0gICAgICAgIHJlc3VsdCA9IHN0cnRvdWxsKHAtPm5wdHIsICZlbmRwdHIsIHAtPmJhc2UpOwotICAgICAgICBpZiAoZXJybm8gIT0gcC0+ZXhwZWN0ZWRfZXJybm8pIHsKLSAgICAgICAgICAgIGZhaWx1cmVfY291bnQrKzsKLSAgICAgICAgICAgIHByaW50ZigidGVzdCAlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgZXJybm8gJWQiCi0gICAgICAgICAgICAgICAgICAgIiwgbGliYyBzdHJ0b3VsbCgpIHJldHVybmVkIGVycm5vICVkXG4iLAotICAgICAgICAgICAgICAgICAgIGksIHAtPm5wdHIsIHAtPmV4cGVjdGVkX2Vycm5vLCBlcnJubyk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHJlc3VsdCAhPSBwLT5leHBlY3RlZF9yZXN1bHQpIHsKLSAgICAgICAgICAgIGZhaWx1cmVfY291bnQrKzsKLSAgICAgICAgICAgIHByaW50ZigidGVzdCAlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgcmVzdWx0ICUiIFBSSXU2NAotICAgICAgICAgICAgICAgICAgICIsIGxpYmMgc3RydG91bGwoKSByZXR1cm5lZCByZXN1bHQgJSIgUFJJdTY0ICJcbiIsCi0gICAgICAgICAgICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfcmVzdWx0LCByZXN1bHQpOwotICAgICAgICB9Ci0gICAgICAgIGlmIChlbmRwdHIgLSBwLT5ucHRyICE9IHAtPmV4cGVjdGVkX2VuZCkgewotICAgICAgICAgICAgZmFpbHVyZV9jb3VudCsrOwotICAgICAgICAgICAgcHJpbnRmKCJ0ZXN0ICVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCBlbmQgJWQsIgotICAgICAgICAgICAgICAgICAgICIgbGliYyBzdHJ0b3VsbCgpIHJldHVybmVkIGVuZCAlZFxuIiwKLSAgICAgICAgICAgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9lbmQsIChpbnQpIChlbmRwdHIgLSBwLT5ucHRyKSk7Ci0gICAgICAgIH0KLSNlbmRpZgotICAgIH0KLSAgICBpZiAoZmFpbHVyZV9jb3VudCA9PSAwKQotICAgICAgICBwcmludGYoIkFsbCAlZCB0ZXN0cyBwYXNzZWQuXG4iLCBpKTsKLSAgICByZXR1cm4gMDsKLX0KLQotI2VuZGlmIC8qIGRlZmluZWQoU1RSVE9VTExfVU5JVF9URVNUKSAqLwotCi0vKgotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDQKLSAqIGluZGVudC10YWJzLW1vZGU6IG5pbAotICogY29tcGlsZS1jb21tYW5kOiAiZ2NjIC1XYWxsIC1XZXJyb3IgLURTVFJUT1VMTF9VTklUX1RFU1Q9MSAtSS4uL2luY2x1ZGUgLWcgLW8gc3RydG91bGwtdW5pdC10ZXN0IHN0cnRvdWxsLmMgJiYgLi9zdHJ0b3VsbC11bml0LXRlc3QiCi0gKiBFbmQ6Ci0gKi8KKyNlbmRpZiAvKiBIQVZFX1NUUlRPVUxMICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3N5c3RlbS5jIGIvc25tcGxpYi9zeXN0ZW0uYwppbmRleCAzOGVjZmViLi5iNmRlMTQ1IDEwMDY0NAotLS0gYS9zbm1wbGliL3N5c3RlbS5jCisrKyBiL3NubXBsaWIvc3lzdGVtLmMKQEAgLTMzLDkgKzMzLDE2IEBACiAgKiBkaXN0cmlidXRlZCB3aXRoIHRoZSBOZXQtU05NUCBwYWNrYWdlLgogICovCiAvKgorICogUG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBjb3B5cmlnaHRlZCBieToKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworLyoKICAqIFN5c3RlbSBkZXBlbmRlbnQgcm91dGluZXMgZ28gaGVyZQogICovCiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTU0LDExICs2MSw3IEBACiAjZW5kaWYKIAogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtNzQsMTUgKzc3LDE2IEBACiAjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgogI2VuZGlmCiAKLSNpZiBIQVZFX1dJTlNPQ0tfSAotI2luY2x1ZGUgPHdpbnNvY2suaD4KLSNlbmRpZgogI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCiAjaWYgSEFWRV9ORVRfSUZfSAogI2luY2x1ZGUgPG5ldC9pZi5oPgogI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorCiAKICNpZiBIQVZFX1NZU19TT0NLSU9fSAogI2luY2x1ZGUgPHN5cy9zb2NraW8uaD4KQEAgLTE0NCwxMCArMTQ4LDM0IEBACiAjaW5jbHVkZSA8c3lzL3N5c3RlbWluZm8uaD4KICNlbmRpZgogCisjaWYgZGVmaW5lZChkYXJ3aW45KQorI2luY2x1ZGUgPGNydF9leHRlcm5zLmg+ICAgICAgICAvKiBmb3IgX05TR2V0QXJndigpICovCisjZW5kaWYKKworI2lmIEhBVkVfUFdEX0gKKyNpbmNsdWRlIDxwd2QuaD4KKyNlbmRpZgorI2lmIEhBVkVfR1JQX0gKKyNpbmNsdWRlIDxncnAuaD4KKyNlbmRpZgorCiAjaWYgSEFWRV9MSU1JVFNfSAogI2luY2x1ZGUgPGxpbWl0cy5oPgogI2VuZGlmCiAKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2lmZGVmIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OCisjaWYgMSAvKkhBVkVfQVJQQV9OQU1FU0VSX0gqLworI2luY2x1ZGUgPGFycGEvbmFtZXNlci5oPgorI2VuZGlmCisjaW5jbHVkZSA8dmFsaWRhdG9yL3ZhbGlkYXRvci5oPgorLyogTmV0U05NUCBhbmQgRE5TU0VDLVRvb2xzIGJvdGggZGVmaW5lIEZSRUUuIFdlJ2xsIG5vdCB1c2UgZWl0aGVyIGhlcmUuICovCisjdW5kZWYgRlJFRQorI2VuZGlmCisKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KICNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KQEAgLTE1Niw2ICsxODQsMTYgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPiAvKiBmb3IgZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuKCkgKi8KIAorI2luY2x1ZGUgImluZXRfbnRvcC5oIgorCisvKiBOZXRTTk1QIGFuZCBETlNTRUMtVG9vbHMgYm90aCBkZWZpbmUgRlJFRS4gV2UnbGwgbm90IHVzZSBlaXRoZXIgaGVyZS4gKi8KKyN1bmRlZiBGUkVFCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzeXN0ZW1fYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodXNlcl9pbmZvcm1hdGlvbiwgc3lzdGVtX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihjYWxjdWxhdGVfc2VjdGltZV9kaWZmLCBzeXN0ZW1fYWxsKQorCiAjaWZuZGVmIElGRl9MT09QQkFDSwogIwlkZWZpbmUgSUZGX0xPT1BCQUNLIDAKICNlbmRpZgpAQCAtMTY2LDYgKzIwNCwzNyBAQAogIyBkZWZpbmUgTE9PUEJBQ0sgICAgMHg3ZjAwMDAwMQogI2VuZGlmCiAKKyNpZm5kZWYgRUFJX0ZBSUwKKyMgZGVmaW5lIEVBSV9GQUlMICAgIC00ICAgIC8qIE5vbi1yZWNvdmVyYWJsZSBmYWlsdXJlIGluIG5hbWUgcmVzLiAgKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX0ZPUkspCitzdGF0aWMgdm9pZAorX2RhZW1vbl9wcmVwKGludCBzdGRlcnJfbG9nKQoreworICAgIC8qIEF2b2lkIGtlZXBpbmcgYW55IGRpcmVjdG9yeSBpbiB1c2UuICovCisgICAgY2hkaXIoIi8iKTsKKworICAgIGlmIChzdGRlcnJfbG9nKQorICAgICAgICByZXR1cm47CisKKyAgICAvKgorICAgICAqIENsb3NlIGluaGVyaXRlZCBmaWxlIGRlc2NyaXB0b3JzIHRvIGF2b2lkCisgICAgICoga2VlcGluZyB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzLgorICAgICAqLworICAgIGNsb3NlKDApOworICAgIGNsb3NlKDEpOworICAgIGNsb3NlKDIpOworCisgICAgLyoKKyAgICAgKiBSZWRpcmVjdCBzdGR7aW4sb3V0LGVycn0gdG8gL2Rldi9udWxsLCBqdXN0IGluIGNhc2UuCisgICAgICovCisgICAgb3BlbigiL2Rldi9udWxsIiwgT19SRFdSKTsKKyAgICBkdXAoMCk7CisgICAgZHVwKDApOworfQorI2VuZGlmCisKIC8qKgogICogZm9yayBjdXJyZW50IHByb2Nlc3MgaW50byB0aGUgYmFja2dyb3VuZC4KICAqCkBAIC0xOTQsNiArMjYzLDIyIEBACiAgICAgaW50IGkgPSAwOwogICAgIERFQlVHTVNHVCgoImRhZW1vbml6ZSIsImRlYW1vbml6aW5nLi4uXG4iKSk7CiAjaWYgSEFWRV9GT1JLCisjaWYgZGVmaW5lZChkYXJ3aW45KQorICAgICBjaGFyICAgICAgICAgICAgcGF0aCBbUEFUSF9NQVhdID0gIiI7CisgICAgIHVpbnQzMl90ICAgICAgICBzaXplID0gc2l6ZW9mIChwYXRoKTsKKworICAgICAvKgorICAgICAgKiBpZiB3ZSBhcmUgYWxyZWFkeSBsYXVuY2hlZCBpbiBhICJkYWVtb25pemVkIHN0YXRlIiwganVzdAorICAgICAgKiBjbG9zZSAmIHJlZGlyZWN0IHRoZSBmaWxlIGRlc2NyaXB0b3JzCisgICAgICAqLworICAgICBpZihnZXRwcGlkKCkgPD0gMikgeworICAgICAgICAgX2RhZW1vbl9wcmVwKHN0ZGVycl9sb2cpOworICAgICAgICAgcmV0dXJuIDA7CisgICAgIH0KKworICAgICBpZiAoX05TR2V0RXhlY3V0YWJsZVBhdGggKHBhdGgsICZzaXplKSkKKyAgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgogICAgIC8qCiAgICAgICogRm9yayB0byByZXR1cm4gY29udHJvbCB0byB0aGUgaW52b2tpbmcgcHJvY2VzcyBhbmQgdG8KICAgICAgKiBndWFyYW50ZWUgdGhhdCB3ZSBhcmVuJ3QgYSBwcm9jZXNzIGdyb3VwIGxlYWRlci4KQEAgLTIzNSwyNiArMzIwLDIyIEBACiAgICAgICAgICAgICAKICAgICAgICAgICAgIERFQlVHTVNHVCgoImRhZW1vbml6ZSIsImNoaWxkIGNvbnRpbnVpbmdcbiIpKTsKIAotICAgICAgICAgICAgLyogQXZvaWQga2VlcGluZyBhbnkgZGlyZWN0b3J5IGluIHVzZS4gKi8KLSAgICAgICAgICAgIGNoZGlyKCIvIik7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICghc3RkZXJyX2xvZykgewotICAgICAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgICAgICogQ2xvc2UgaW5oZXJpdGVkIGZpbGUgZGVzY3JpcHRvcnMgdG8gYXZvaWQKLSAgICAgICAgICAgICAgICAgKiBrZWVwaW5nIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMuCi0gICAgICAgICAgICAgICAgICovCi0gICAgICAgICAgICAgICAgY2xvc2UoMCk7Ci0gICAgICAgICAgICAgICAgY2xvc2UoMSk7Ci0gICAgICAgICAgICAgICAgY2xvc2UoMik7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAgICAgKiBSZWRpcmVjdCBzdGR7aW4sb3V0LGVycn0gdG8gL2Rldi9udWxsLCBqdXN0IGluCi0gICAgICAgICAgICAgICAgICogY2FzZS4KLSAgICAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgICAgICBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOwotICAgICAgICAgICAgICAgIGR1cCgwKTsKLSAgICAgICAgICAgICAgICBkdXAoMCk7Ci0gICAgICAgICAgICB9CisjaWYgISBkZWZpbmVkKGRhcndpbjkpCisgICAgICAgICAgICBfZGFlbW9uX3ByZXAoc3RkZXJyX2xvZyk7CisjZWxzZQorICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICogU29tZSBkYXJ3aW4gY2FsbHMgKHVzaW5nIG1hY2ggcG9ydHMpIGRvbid0IHdvcmsgYWZ0ZXIKKyAgICAgICAgICAgICAgKiBhIGZvcmsuIFNvLCBub3cgdGhhdCB3ZSd2ZSBmb3JrZWQsIHdlIHJlLWV4ZWMgb3Vyc2VsZgorICAgICAgICAgICAgICAqIHRvIGVuc3VyZSB0aGF0IHRoZSBjaGlsZCdzIG1hY2ggcG9ydHMgYXJlIGFsbCBzZXQgdXAgY29ycmVjdGx5LAorICAgICAgICAgICAgICAqIHRoZSBnZXRwcGlkIGNhbGwgYWJvdmUgd2lsbCBwcmV2ZW50IHRoZSBleGVjIGNoaWxkIGZyb20KKyAgICAgICAgICAgICAgKiBmb3JraW5nLi4uCisgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgY2hhciAqIGNvbnN0ICphcmd2ID0gKl9OU0dldEFyZ3YgKCk7CisgICAgICAgICAgICAgREVCVUdNU0dUKCgiZGFlbW9uaXplIiwicmUtZXhlY2luZyBmb3JrZWQgY2hpbGRcbiIpKTsKKyAgICAgICAgICAgICBleGVjdiAocGF0aCwgYXJndik7CisgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiRm9ya2VkIGNoaWxkIHVuYWJsZSB0byByZS1leGVjIC0gJXMuXG4iLCBzdHJlcnJvciAoZXJybm8pKTsKKyAgICAgICAgICAgICBleGl0ICgwKTsKKyNlbmRpZgogICAgICAgICB9CiAjZW5kaWYgLyogIVdJTjMyICovCiAgICAgfQpAQCAtMjY2LDIwNCArMzQ3LDYgQEAKICAqICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAKICAqLwogI2lmZGVmCQkJCQkJCVdJTjMyCi0jCWRlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCi0jCWRlZmluZSBXSU4zMklPX0lTX1NURElPCi0jCWRlZmluZSBQQVRITEVOCTEwMjQKLQotIwlpbmNsdWRlIDx0Y2hhci5oPgotIwlpbmNsdWRlIDx3aW5kb3dzLmg+Ci0KLS8qCi0gKiBNaW5HVyBkZWZpbmVzIFdJTjMyLCBidXQgaGFzIHdvcmtpbmcgZGlyZW50IHN0dWZmLgotICovCi0jaWZuZGVmIEhBVkVfRElSRU5UX0ggCi0KLS8qCi0gKiBUaGUgaWRlYSBoZXJlIGlzIHRvIHJlYWQgYWxsIHRoZSBkaXJlY3RvcnkgbmFtZXMgaW50byBhIHN0cmluZyB0YWJsZQotICogKiAoc2VwYXJhdGVkIGJ5IG51bGxzKSBhbmQgd2hlbiBvbmUgb2YgdGhlIG90aGVyIGRpciBmdW5jdGlvbnMgaXMgY2FsbGVkCi0gKiAqIHJldHVybiB0aGUgcG9pbnRlciB0byB0aGUgY3VycmVudCBmaWxlIG5hbWUuCi0gKi8KLURJUiAgICAgICAgICAgICoKLW9wZW5kaXIoY29uc3QgY2hhciAqZmlsZW5hbWUpCi17Ci0gICAgRElSICAgICAgICAgICAgKnA7Ci0gICAgbG9uZyAgICAgICAgICAgIGxlbjsKLSAgICBsb25nICAgICAgICAgICAgaWR4OwotICAgIGNoYXIgICAgICAgICAgICBzY2FubmFtZXNwY1tQQVRITEVOXTsKLSAgICBjaGFyICAgICAgICAgICAqc2Nhbm5hbWUgPSBzY2FubmFtZXNwYzsKLSAgICBzdHJ1Y3Qgc3RhdCAgICAgc2J1ZjsKLSAgICBXSU4zMl9GSU5EX0RBVEEgRmluZERhdGE7Ci0gICAgSEFORExFICAgICAgICAgIGZoOwotCi0gICAgLyoKLSAgICAgKiBjaGVjayB0byBzZWUgaWYgZmlsZW5hbWUgaXMgYSBkaXJlY3RvcnkgCi0gICAgICovCi0gICAgaWYgKChzdGF0KGZpbGVuYW1lLCAmc2J1ZikgPCAwKSB8fCAoKHNidWYuc3RfbW9kZSAmIFNfSUZESVIpID09IDApKSB7Ci0gICAgICAgIHJldHVybiBOVUxMOwotICAgIH0KLQotICAgIC8qCi0gICAgICogZ2V0IHRoZSBmaWxlIHN5c3RlbSBjaGFyYWN0ZXJpc3RpY3MgCi0gICAgICovCi0gICAgLyoKLSAgICAgKiBpZihHZXRGdWxsUGF0aE5hbWUoZmlsZW5hbWUsIFNOTVBfTUFYUEFUSCwgcm9vdCwgJmR1bW15KSkgewotICAgICAqICogICAgaWYoZHVtbXkgPSBzdHJjaHIocm9vdCwgJ1xcJykpCi0gICAgICogKiAgICAgICAgKisrZHVtbXkgPSAnXDAnOwotICAgICAqICogICAgaWYoR2V0Vm9sdW1lSW5mb3JtYXRpb24ocm9vdCwgdm9sbmFtZSwgU05NUF9NQVhQQVRILCAmc2VyaWFsLAotICAgICAqICogICAgICAgICAgICAgICAgICAgICAgICAgICAgJm1heG5hbWUsICZmbGFncywgMCwgMCkpIHsKLSAgICAgKiAqICAgICAgICBkb3duY2FzZSA9ICEoZmxhZ3MgJiBGU19DQVNFX0lTX1BSRVNFUlZFRCk7Ci0gICAgICogKiAgICB9Ci0gICAgICogKiAgfQotICAgICAqICogIGVsc2UgewotICAgICAqICogICAgZG93bmNhc2UgPSBUUlVFOwotICAgICAqICogIH0KLSAgICAgKi8KLQotICAgIC8qCi0gICAgICogQ3JlYXRlIHRoZSBzZWFyY2ggcGF0dGVybiAKLSAgICAgKi8KLSAgICBzdHJjcHkoc2Nhbm5hbWUsIGZpbGVuYW1lKTsKLQotICAgIGlmIChzdHJjaHIoIi9cXCIsICooc2Nhbm5hbWUgKyBzdHJsZW4oc2Nhbm5hbWUpIC0gMSkpID09IE5VTEwpCi0gICAgICAgIHN0cmNhdChzY2FubmFtZSwgIi8qIik7Ci0gICAgZWxzZQotICAgICAgICBzdHJjYXQoc2Nhbm5hbWUsICIqIik7Ci0KLSAgICAvKgotICAgICAqIGRvIHRoZSBGaW5kRmlyc3RGaWxlIGNhbGwgCi0gICAgICovCi0gICAgZmggPSBGaW5kRmlyc3RGaWxlKHNjYW5uYW1lLCAmRmluZERhdGEpOwotICAgIGlmIChmaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewotICAgICAgICByZXR1cm4gTlVMTDsKLSAgICB9Ci0KLSAgICAvKgotICAgICAqIEdldCB1cyBhIERJUiBzdHJ1Y3R1cmUgCi0gICAgICovCi0gICAgcCA9IChESVIgKikgbWFsbG9jKHNpemVvZihESVIpKTsKLSAgICAvKgotICAgICAqIE5ld3ooMTMwMywgcCwgMSwgRElSKTsgCi0gICAgICovCi0gICAgaWYgKHAgPT0gTlVMTCkKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0KLSAgICAvKgotICAgICAqIG5vdyBhbGxvY2F0ZSB0aGUgZmlyc3QgcGFydCBvZiB0aGUgc3RyaW5nIHRhYmxlIGZvcgotICAgICAqICogdGhlIGZpbGVuYW1lcyB0aGF0IHdlIGZpbmQuCi0gICAgICovCi0gICAgaWR4ID0gc3RybGVuKEZpbmREYXRhLmNGaWxlTmFtZSkgKyAxOwotICAgIHAtPnN0YXJ0ID0gKGNoYXIgKikgbWFsbG9jKGlkeCk7Ci0gICAgLyoKLSAgICAgKiBOZXcoMTMwNCwgcC0+c3RhcnQsIGlkeCwgY2hhcik7Ci0gICAgICovCi0gICAgaWYgKHAtPnN0YXJ0ID09IE5VTEwpIHsKLSAgICAgICAgZnJlZShwKTsKLSAgICAgICAgcmV0dXJuIE5VTEw7Ci0gICAgfQotICAgIHN0cmNweShwLT5zdGFydCwgRmluZERhdGEuY0ZpbGVOYW1lKTsKLSAgICAvKgotICAgICAqIGlmKGRvd25jYXNlKQotICAgICAqICogICAgc3RybHdyKHAtPnN0YXJ0KTsKLSAgICAgKi8KLSAgICBwLT5uZmlsZXMgPSAwOwotCi0gICAgLyoKLSAgICAgKiBsb29wIGZpbmRpbmcgYWxsIHRoZSBmaWxlcyB0aGF0IG1hdGNoIHRoZSB3aWxkY2FyZAotICAgICAqICogKHdoaWNoIHNob3VsZCBiZSBhbGwgb2YgdGhlbSBpbiB0aGlzIGRpcmVjdG9yeSEpLgotICAgICAqICogdGhlIHZhcmlhYmxlIGlkeCBzaG91bGQgcG9pbnQgb25lIHBhc3QgdGhlIG51bGwgdGVybWluYXRvcgotICAgICAqICogb2YgdGhlIHByZXZpb3VzIHN0cmluZyBmb3VuZC4KLSAgICAgKi8KLSAgICB3aGlsZSAoRmluZE5leHRGaWxlKGZoLCAmRmluZERhdGEpKSB7Ci0gICAgICAgIGxlbiA9IHN0cmxlbihGaW5kRGF0YS5jRmlsZU5hbWUpOwotICAgICAgICAvKgotICAgICAgICAgKiBidW1wIHRoZSBzdHJpbmcgdGFibGUgc2l6ZSBieSBlbm91Z2ggZm9yIHRoZQotICAgICAgICAgKiAqIG5ldyBuYW1lIGFuZCBpdCdzIG51bGwgdGVybWluYXRvcgotICAgICAgICAgKi8KLSAgICAgICAgcC0+c3RhcnQgPSAoY2hhciAqKSByZWFsbG9jKCh2b2lkICopIHAtPnN0YXJ0LCBpZHggKyBsZW4gKyAxKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogUmVuZXcocC0+c3RhcnQsIGlkeCtsZW4rMSwgY2hhcik7Ci0gICAgICAgICAqLwotICAgICAgICBpZiAocC0+c3RhcnQgPT0gTlVMTCkgewotICAgICAgICAgICAgZnJlZShwKTsKLSAgICAgICAgICAgIHJldHVybiBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIHN0cmNweSgmcC0+c3RhcnRbaWR4XSwgRmluZERhdGEuY0ZpbGVOYW1lKTsKLSAgICAgICAgLyoKLSAgICAgICAgICogaWYgKGRvd25jYXNlKSAKLSAgICAgICAgICogKiAgICAgICAgc3RybHdyKCZwLT5zdGFydFtpZHhdKTsKLSAgICAgICAgICovCi0gICAgICAgIHAtPm5maWxlcysrOwotICAgICAgICBpZHggKz0gbGVuICsgMTsKLSAgICB9Ci0gICAgRmluZENsb3NlKGZoKTsKLSAgICBwLT5zaXplID0gaWR4OwotICAgIHAtPmN1cnIgPSBwLT5zdGFydDsKLSAgICByZXR1cm4gcDsKLX0KLQotCi0vKgotICogUmVhZGRpciBqdXN0IHJldHVybnMgdGhlIGN1cnJlbnQgc3RyaW5nIHBvaW50ZXIgYW5kIGJ1bXBzIHRoZQotICogKiBzdHJpbmcgcG9pbnRlciB0byB0aGUgbkRsbEV4cG9ydCBlbnRyeS4KLSAqLwotc3RydWN0IGRpcmVjdCAgKgotcmVhZGRpcihESVIgKiBkaXJwKQotewotICAgIGludCAgICAgICAgICAgICBsZW47Ci0gICAgc3RhdGljIGludCAgICAgIGR1bW15ID0gMDsKLQotICAgIGlmIChkaXJwLT5jdXJyKSB7Ci0gICAgICAgIC8qCi0gICAgICAgICAqIGZpcnN0IHNldCB1cCB0aGUgc3RydWN0dXJlIHRvIHJldHVybiAKLSAgICAgICAgICovCi0gICAgICAgIGxlbiA9IHN0cmxlbihkaXJwLT5jdXJyKTsKLSAgICAgICAgc3RyY3B5KGRpcnAtPmRpcnN0ci5kX25hbWUsIGRpcnAtPmN1cnIpOwotICAgICAgICBkaXJwLT5kaXJzdHIuZF9uYW1sZW4gPSBsZW47Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogRmFrZSBhbiBpbm9kZSAKLSAgICAgICAgICovCi0gICAgICAgIGRpcnAtPmRpcnN0ci5kX2lubyA9IGR1bW15Kys7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogTm93IHNldCB1cCBmb3IgdGhlIG5EbGxFeHBvcnQgY2FsbCB0byByZWFkZGlyIAotICAgICAgICAgKi8KLSAgICAgICAgZGlycC0+Y3VyciArPSBsZW4gKyAxOwotICAgICAgICBpZiAoZGlycC0+Y3VyciA+PSAoZGlycC0+c3RhcnQgKyBkaXJwLT5zaXplKSkgewotICAgICAgICAgICAgZGlycC0+Y3VyciA9IE5VTEw7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gJihkaXJwLT5kaXJzdHIpOwotICAgIH0gZWxzZQotICAgICAgICByZXR1cm4gTlVMTDsKLX0KLQotLyoKLSAqIGZyZWUgdGhlIG1lbW9yeSBhbGxvY2F0ZWQgYnkgb3BlbmRpciAKLSAqLwotaW50Ci1jbG9zZWRpcihESVIgKiBkaXJwKQotewotICAgIGZyZWUoZGlycC0+c3RhcnQpOwotICAgIGZyZWUoZGlycCk7Ci0gICAgcmV0dXJuIDE7Ci19Ci0jZW5kaWYgLyogSEFWRV9ESVJFTlRfSCAqLwotCi0jaWZuZGVmIEhBVkVfR0VUVElNRU9GREFZCi0KLWludAotZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICp0diwgc3RydWN0IHRpbWV6b25lICp0eikKLXsKLSAgICBzdHJ1Y3QgX3RpbWViICAgdGltZWJ1ZmZlcjsKLQotICAgIF9mdGltZSgmdGltZWJ1ZmZlcik7Ci0gICAgdHYtPnR2X3VzZWMgPSB0aW1lYnVmZmVyLm1pbGxpdG0gKiAxMDAwOwotICAgIHR2LT50dl9zZWMgPSB0aW1lYnVmZmVyLnRpbWU7Ci0gICAgcmV0dXJuICgwKTsKLX0KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIUhBVkVfR0VUVElNRU9GREFZICovCi0KIGluX2FkZHJfdAogZ2V0X215YWRkcih2b2lkKQogewpAQCAtNjQ2LDcgKzUyOSw3IEBACiAKICAgICBmb3IgKGlmcnAgPSBpZmMuaWZjX3JlcTsKICAgICAgICAgKGNoYXIgKilpZnJwIDwgKGNoYXIgKilpZmMuaWZjX3JlcSArIGlmYy5pZmNfbGVuOwotI2lmZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfTEVOCisjaWZkZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfTEVOCiAgICAgICAgIGlmcnAgPSAoc3RydWN0IGlmcmVxICopKCgoY2hhciAqKSBpZnJwKSArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihpZnJwLT5pZnJfbmFtZSkgKwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZnJwLT5pZnJfYWRkci5zYV9sZW4pCkBAIC03MDksMTQgKzU5MiwxNyBAQAogICAgIHNpemVfdCAgICAgICAgICBsZW47CiAjZWxpZiBkZWZpbmVkKE5FVFNOTVBfQ0FOX1VTRV9OTElTVCkKICAgICBpbnQgICAgICAgICAgICAga21lbTsKLSAgICBzdGF0aWMgc3RydWN0IG5saXN0IG5sW10gPSB7CiAjaWYgIWRlZmluZWQoaHB1eCkKLSAgICAgICAgeyhjaGFyICopICJfYm9vdHRpbWUifSwKKyAgICBzdGF0aWMgY2hhciBib290dGltZV9uYW1lW10gPSAiX2Jvb3R0aW1lIjsKICNlbHNlCi0gICAgICAgIHsoY2hhciAqKSAiYm9vdHRpbWUifSwKKyAgICBzdGF0aWMgY2hhciBib290dGltZV9uYW1lW10gPSAiYm9vdHRpbWUiOwogI2VuZGlmCi0gICAgICAgIHsoY2hhciAqKSAiIn0KLSAgICB9OworICAgIHN0YXRpYyBjaGFyIGVtcHR5X25hbWVbXSA9ICIiOworICAgIHN0cnVjdCBubGlzdCBubFsyXTsKKworICAgIG1lbXNldChubCwgMCwgc2l6ZW9mKG5sKSk7CisgICAgbmxbMF0ubl9uYW1lID0gYm9vdHRpbWVfbmFtZTsKKyAgICBubFsxXS5uX25hbWUgPSBlbXB0eV9uYW1lOwogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBORVRTTk1QX0NBTl9VU0VfU1lTQ1RMICovCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGhwdXgxMCB8fCBocHV4IDExICovCiAKQEAgLTc1NiwzMCArNjQyLDI1IEBACiB9CiAjZW5kaWYKIAotLyoKLSAqIFJldHVybnMgdXB0aW1lIGluIGNlbnRpc2Vjb25kcyghKS4KKy8qKgorICogUmV0dXJucyB0aGUgc3lzdGVtIHVwdGltZSBpbiBjZW50aXNlY29uZHMuCisgKgorICogQG5vdGUgVGhlIHZhbHVlIHJldHVybmVkIGJ5IHRoaXMgZnVuY3Rpb24gaXMgbm90IGlkZW50aWNhbCB0byBzeXNVcFRpbWUKKyAqICAgZGVmaW5lZCBpbiBSRkMgMTIxMy4gZ2V0X3VwdGltZSgpIHJldHVybnMgdGhlIHN5c3RlbSB1cHRpbWUgd2hpbGUKKyAqICAgc3lzVXBUaW1lIHJlcHJlc2VudHMgdGhlIHRpbWUgdGhhdCBoYXMgZWxhcHNlZCBzaW5jZSB0aGUgbW9zdCByZWNlbnQKKyAqICAgcmVzdGFydCBvZiB0aGUgbmV0d29yayBtYW5hZ2VyIChzbm1wZCkuCisgKgorICogQHNlZSBTZWUgYWxzbyBuZXRzbm1wX2dldF9hZ2VudF91cHRpbWUoKS4KICAqLwogbG9uZwogZ2V0X3VwdGltZSh2b2lkKQogewotI2lmICFkZWZpbmVkKHNvbGFyaXMyKSAmJiAhZGVmaW5lZChsaW51eCkgJiYgIWRlZmluZWQoY3lnd2luKSAmJiAhZGVmaW5lZChhaXg0KSAmJiAhZGVmaW5lZChhaXg1KSAmJiAhZGVmaW5lZChhaXg2KQotICAgIHN0cnVjdCB0aW1ldmFsICBub3c7Ci0gICAgbG9uZyAgICAgICAgICAgIGJvb3R0aW1lX2NzZWNzLCBub3d0aW1lX2NzZWNzOwotCi0gICAgYm9vdHRpbWVfY3NlY3MgPSBnZXRfYm9vdHRpbWUoKTsKLSAgICBpZiAoYm9vdHRpbWVfY3NlY3MgPT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7Ci0gICAgbm93dGltZV9jc2VjcyA9IChub3cudHZfc2VjICogMTAwKSArIChub3cudHZfdXNlYyAvIDEwMDAwKTsKLQotICAgIHJldHVybiAobm93dGltZV9jc2VjcyAtIGJvb3R0aW1lX2NzZWNzKTsKLSNlbmRpZgotCi0jaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNpZiBkZWZpbmVkKGFpeDQpIHx8IGRlZmluZWQoYWl4NSkgfHwgZGVmaW5lZChhaXg2KSB8fCBkZWZpbmVkKGFpeDcpCisgICAgc3RhdGljIGNoYXIgbGJvbHRfbmFtZVtdID0gImxib2x0IjsKICAgICBzdHJ1Y3Qgbmxpc3Qgbmw7CiAgICAgaW50IGttZW07CiAgICAgdGltZV90IGxib2x0OwotICAgIG5sLm5fbmFtZSA9IChjaGFyICopICJsYm9sdCI7CisgICAgbmwubl9uYW1lID0gbGJvbHRfbmFtZTsKICAgICBpZihrbmxpc3QoJm5sLCAxLCBzaXplb2Yoc3RydWN0IG5saXN0KSkgIT0gMCkgcmV0dXJuKDApOwogICAgIGlmKG5sLm5fdHlwZSA9PSAwIHx8IG5sLm5fdmFsdWUgPT0gMCkgcmV0dXJuKDApOwogICAgIGlmKChrbWVtID0gb3BlbigiL2Rldi9tZW0iLCAwKSkgPCAwKSByZXR1cm4gMDsKQEAgLTc4Nyw5ICs2NjgsNyBAQAogICAgIHJlYWQoa21lbSwgJmxib2x0LCBzaXplb2YobGJvbHQpKTsKICAgICBjbG9zZShrbWVtKTsKICAgICByZXR1cm4obGJvbHQpOwotI2VuZGlmCi0KLSNpZmRlZiBzb2xhcmlzMgorI2VsaWYgZGVmaW5lZChzb2xhcmlzMikKICAgICBrc3RhdF9jdGxfdCAgICAqa3NjID0ga3N0YXRfb3BlbigpOwogICAgIGtzdGF0X3QgICAgICAgICprczsKICAgICBraWRfdCAgICAgICAgICAga2lkOwpAQCAtODE0LDkgKzY5Myw3IEBACiAgICAgICAgIGtzdGF0X2Nsb3NlKGtzYyk7CiAgICAgfQogICAgIHJldHVybiBsYm9sdDsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc29sYXJpczIgKi8KLQotI2lmZGVmIGxpbnV4CisjZWxpZiBkZWZpbmVkKGxpbnV4KSB8fCBkZWZpbmVkKGN5Z3dpbikKICAgICBGSUxFICAgICAgICAgICAqaW4gPSBmb3BlbigiL3Byb2MvdXB0aW1lIiwgInIiKTsKICAgICBsb25nICAgICAgICAgICAgdXB0aW0gPSAwLCBhLCBiOwogICAgIGlmIChpbikgewpAQCAtODI1LDE2ICs3MDIsMzAzIEBACiAgICAgICAgIGZjbG9zZShpbik7CiAgICAgfQogICAgIHJldHVybiB1cHRpbTsKLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbGludXggKi8KKyNlbHNlCisgICAgc3RydWN0IHRpbWV2YWwgIG5vdzsKKyAgICBsb25nICAgICAgICAgICAgYm9vdHRpbWVfY3NlY3MsIG5vd3RpbWVfY3NlY3M7CiAKLSNpZmRlZiBjeWd3aW4KLSAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgLyogbm90IGltcGxlbWVudGVkICovCisgICAgYm9vdHRpbWVfY3NlY3MgPSBnZXRfYm9vdHRpbWUoKTsKKyAgICBpZiAoYm9vdHRpbWVfY3NlY3MgPT0gMCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgZ2V0dGltZW9mZGF5KCZub3csIChzdHJ1Y3QgdGltZXpvbmUgKikgMCk7CisgICAgbm93dGltZV9jc2VjcyA9IChub3cudHZfc2VjICogMTAwKSArIChub3cudHZfdXNlYyAvIDEwMDAwKTsKKworICAgIHJldHVybiAobm93dGltZV9jc2VjcyAtIGJvb3R0aW1lX2NzZWNzKTsKICNlbmRpZgogfQogCiAjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICEgV0lOMzIgKi8KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KK3N0YXRpYyB2YWxfY29udGV4dF90ICpfdmFsX2NvbnRleHQgPSBOVUxMOworCitzdGF0aWMgdmFsX2NvbnRleHRfdCAqCituZXRzbm1wX3ZhbGlkYXRvcl9jb250ZXh0KHZvaWQpCit7CisgICAgaWYgKE5VTEwgPT0gX3ZhbF9jb250ZXh0KSB7CisgICAgICAgIGludCByYzsKKyAgICAgICAgY2hhciAqYXBwdHlwZSA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0FQUFRZUEUpOworICAgICAgICBERUJVR01TR1RMKCgiZG5zOnNlYzpjb250ZXh0IiwgImNyZWF0aW5nIGRuc3NlYyBjb250ZXh0IGZvciAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgYXBwdHlwZSkpOworICAgICAgICByYyA9IHZhbF9jcmVhdGVfY29udGV4dChhcHB0eXBlLCAmX3ZhbF9jb250ZXh0KTsKKyAgICB9CisKKyAgICByZXR1cm4gX3ZhbF9jb250ZXh0OworfQorI2VuZGlmIC8qIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OICovCisKK2ludAorbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0KGNvbnN0IGNoYXIqIG5hbWUsIGluX2FkZHJfdCAqYWRkcl9vdXQpCit7CisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgIHN0cnVjdCBhZGRyaW5mbyAqYWRkcnMgPSBOVUxMOworICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50OworICAgIGludCAgICAgICAgICAgICBlcnI7CisKKyAgICBtZW1zZXQoJmhpbnQsIDAsIHNpemVvZiBoaW50KTsKKyAgICBoaW50LmFpX2ZsYWdzID0gMDsKKyAgICBoaW50LmFpX2ZhbWlseSA9IFBGX0lORVQ7CisgICAgaGludC5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CisgICAgaGludC5haV9wcm90b2NvbCA9IDA7CisKKyAgICBlcnIgPSBuZXRzbm1wX2dldGFkZHJpbmZvKG5hbWUsIE5VTEwsICZoaW50LCAmYWRkcnMpOworICAgIGlmIChlcnIgIT0gMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKGFkZHJzICE9IE5VTEwpIHsKKyAgICAgICAgbWVtY3B5KGFkZHJfb3V0LAorICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luICopIGFkZHJzLT5haV9hZGRyKS0+c2luX2FkZHIsCisgICAgICAgICAgICAgICBzaXplb2YoaW5fYWRkcl90KSk7CisgICAgICAgIGZyZWVhZGRyaW5mbyhhZGRycyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImdldF90aGlzYWRkciIsCisgICAgICAgICAgICAgICAgICAgICJGYWlsZWQgdG8gcmVzb2x2ZSBJUHY0IGhvc3RuYW1lXG4iKSk7CisgICAgfQorICAgIHJldHVybiAwOworCisjZWxpZiBIQVZFX0dFVEhPU1RCWU5BTUUKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOworCisgICAgaHAgPSBuZXRzbm1wX2dldGhvc3RieW5hbWUobmFtZSk7CisgICAgaWYgKGhwID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImdldF90aGlzYWRkciIsCisgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAoY291bGRuJ3QgcmVzb2x2ZSlcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gZWxzZSBpZiAoaHAtPmhfYWRkcnR5cGUgIT0gQUZfSU5FVCkgeworICAgICAgICBERUJVR01TR1RMKCgiZ2V0X3RoaXNhZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChub3QgQUZfSU5FVCEpXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiZ2V0X3RoaXNhZGRyIiwKKyAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOworICAgICAgICBtZW1jcHkoYWRkcl9vdXQsIGhwLT5oX2FkZHIsIHNpemVvZihpbl9hZGRyX3QpKTsKKyAgICB9CisgICAgcmV0dXJuIDA7CisKKyNlbGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgZXJyOworCisgICAgaHAgPSBnZXRpcG5vZGVieW5hbWUocGVlcm5hbWUsIEFGX0lORVQsIDAsICZlcnIpOworICAgIGlmIChocCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJnZXRfdGhpc2FkZHIiLAorICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKGNvdWxkbid0IHJlc29sdmUgPSAlZClcbiIsIGVycikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJnZXRfdGhpc2FkZHIiLAorICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKKyAgICBtZW1jcHkoYWRkcl9vdXQsIGhwLT5oX2FkZHIsIHNpemVvZihpbl9hZGRyX3QpKTsKKyAgICByZXR1cm4gMDsKKworI2Vsc2UgLyogSEFWRV9HRVRJUE5PREVCWU5BTUUgKi8KKyAgICByZXR1cm4gLTE7CisjZW5kaWYKK30KKworaW50CituZXRzbm1wX2dldGFkZHJpbmZvKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNlcnZpY2UsCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqaGludHMsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKK3sKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgc3RydWN0IGFkZHJpbmZvICphZGRycyA9IE5VTEw7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnQ7CisgICAgaW50ICAgICAgICAgICAgIGVycjsKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorICAgIHZhbF9zdGF0dXNfdCAgICB2YWxfc3RhdHVzOworI2VuZGlmCisKKyAgICBERUJVR01TR1RMKCgiZG5zOmdldGFkZHJpbmZvIiwgImxvb2tpbmcgdXAgIikpOworICAgIGlmIChuYW1lKQorICAgICAgICBERUJVR01TRygoImRuczpnZXRhZGRyaW5mbyIsICJcIiVzXCIiLCBuYW1lKSk7CisgICAgZWxzZQorICAgICAgICBERUJVR01TRygoImRuczpnZXRhZGRyaW5mbyIsICI8TlVMTD4iKSk7CisKKyAgICBpZiAoc2VydmljZSkKKwlERUJVR01TRygoImRuczpnZXRhZGRyaW5mbyIsICI6XCIlc1wiIiwgc2VydmljZSkpOworCisgICAgaWYgKGhpbnRzKQorCURFQlVHTVNHKCgiZG5zOmdldGFkZHJpbmZvIiwgIiB3aXRoIGhpbnQgKHsgLi4uIH0pIikpOworICAgIGVsc2UKKwlERUJVR01TRygoImRuczpnZXRhZGRyaW5mbyIsICIgd2l0aCBubyBoaW50IikpOworCisgICAgREVCVUdNU0coKCJkbnM6Z2V0YWRkcmluZm8iLCAiXG4iKSk7CisKKyAgICBpZiAoTlVMTCA9PSBoaW50cykgeworICAgICAgICBtZW1zZXQoJmhpbnQsIDAsIHNpemVvZiBoaW50KTsKKyAgICAgICAgaGludC5haV9mbGFncyA9IDA7CisgICAgICAgIGhpbnQuYWlfZmFtaWx5ID0gUEZfSU5FVDsKKyAgICAgICAgaGludC5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CisgICAgICAgIGhpbnQuYWlfcHJvdG9jb2wgPSAwOworICAgICAgICBoaW50cyA9ICZoaW50OworICAgIH0gZWxzZSB7CisgICAgICAgIG1lbWNweSgmaGludCwgaGludHMsIHNpemVvZiBoaW50KTsKKyAgICB9CisKKyNpZm5kZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyAgICBlcnIgPSBnZXRhZGRyaW5mbyhuYW1lLCBOVUxMLCAmaGludCwgJmFkZHJzKTsKKyNlbHNlIC8qIEROU1NFQ19MT0NBTF9WQUxJREFUSU9OICovCisgICAgZXJyID0gdmFsX2dldGFkZHJpbmZvKG5ldHNubXBfdmFsaWRhdG9yX2NvbnRleHQoKSwgbmFtZSwgTlVMTCwgJmhpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICZhZGRycywgJnZhbF9zdGF0dXMpOworICAgIERFQlVHTVNHVEwoKCJkbnM6c2VjOnZhbCIsICJlcnIgJWQsIHZhbF9zdGF0dXMgJWQgLyAlczsgdHJ1c3RlZDogJWRcbiIsCisgICAgICAgICAgICAgICAgZXJyLCB2YWxfc3RhdHVzLCBwX3ZhbF9zdGF0dXModmFsX3N0YXR1cyksCisgICAgICAgICAgICAgICAgdmFsX2lzdHJ1c3RlZCh2YWxfc3RhdHVzKSkpOworICAgIGlmICghIHZhbF9pc3RydXN0ZWQodmFsX3N0YXR1cykpIHsKKyAgICAgICAgaW50IHJjOworICAgICAgICBpZiAoKGVyciAhPSAwKSAmJiBWQUxfR0VUQUREUklORk9fSEFTX1NUQVRVUyhlcnIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywKKyAgICAgICAgICAgICAgICAgICAgICJXQVJOSU5HOiBVTlRSVVNURUQgZXJyb3IgaW4gRE5TIHJlc29sdXRpb24gZm9yICVzIVxuIiwKKyAgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgcmMgPSBFQUlfRkFJTDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICAgIlRoZSBhdXRoZW50aWNpdHkgb2YgRE5TIHJlc3BvbnNlIGlzIG5vdCB0cnVzdGVkICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICBwX3ZhbF9zdGF0dXModmFsX3N0YXR1cykpOworICAgICAgICAgICAgcmMgPSBFQUlfTk9OQU1FOworICAgICAgICB9CisgICAgICAgIC8qKiBjb250aW51ZSBhbnl3YXlzIGlmIEROU1NFQ19XQVJOX09OTFkgaXMgc2V0ICovCisgICAgICAgIGlmICghbmV0c25tcF9kc19nZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfRE5TU0VDX1dBUk5fT05MWSkpCisgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgfQorCisKKyNlbmRpZiAvKiBETlNTRUNfTE9DQUxfVkFMSURBVElPTiAqLworICAgICpyZXMgPSBhZGRyczsKKyAgICBpZiAoKDAgPT0gZXJyKSAmJiBhZGRycyAmJiBhZGRycy0+YWlfYWRkcikgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGFkZHJpbmZvIiwgImFuc3dlciB7IEFGX0lORVQsICVzOiVodSB9XG4iLAorICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EoKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWFkZHJzLT5haV9hZGRyKS0+c2luX2FkZHIpLAorICAgICAgICAgICAgICAgICAgICBudG9ocygoKHN0cnVjdCBzb2NrYWRkcl9pbiopYWRkcnMtPmFpX2FkZHIpLT5zaW5fcG9ydCkpKTsKKyAgICB9CisgICAgcmV0dXJuIGVycjsKKyNlbHNlCisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiZ2V0YWRkcmluZm8gbm90IGF2YWlsYWJsZSIpKTsKKyAgICByZXR1cm4gRUFJX0ZBSUw7CisjZW5kaWYgLyogZ2V0YWRkcmluZm8gKi8KK30KKworc3RydWN0IGhvc3RlbnQgKgorbmV0c25tcF9nZXRob3N0YnluYW1lKGNvbnN0IGNoYXIgKm5hbWUpCit7CisjaWYgSEFWRV9HRVRIT1NUQllOQU1FCisjaWZkZWYgRE5TU0VDX0xPQ0FMX1ZBTElEQVRJT04KKyAgICB2YWxfc3RhdHVzX3QgdmFsX3N0YXR1czsKKyNlbmRpZgorICAgIHN0cnVjdCBob3N0ZW50ICpocCA9IE5VTEw7CisKKyAgICBpZiAoTlVMTCA9PSBuYW1lKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5bmFtZSIsICJsb29raW5nIHVwICVzXG4iLCBuYW1lKSk7CisKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorICAgIGhwICA9IHZhbF9nZXRob3N0YnluYW1lKG5ldHNubXBfdmFsaWRhdG9yX2NvbnRleHQoKSwgbmFtZSwgJnZhbF9zdGF0dXMpOworICAgIERFQlVHTVNHVEwoKCJkbnM6c2VjOnZhbCIsICJ2YWxfc3RhdHVzICVkIC8gJXM7IHRydXN0ZWQ6ICVkXG4iLAorICAgICAgICAgICAgICAgIHZhbF9zdGF0dXMsIHBfdmFsX3N0YXR1cyh2YWxfc3RhdHVzKSwKKyAgICAgICAgICAgICAgICB2YWxfaXN0cnVzdGVkKHZhbF9zdGF0dXMpKSk7CisgICAgaWYgKCF2YWxfaXN0cnVzdGVkKHZhbF9zdGF0dXMpKSB7CisgICAgICAgIHNubXBfbG9nKExPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAiVGhlIGF1dGhlbnRpY2l0eSBvZiBETlMgcmVzcG9uc2UgaXMgbm90IHRydXN0ZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgcF92YWxfc3RhdHVzKHZhbF9zdGF0dXMpKTsKKyAgICAgICAgLyoqIGNvbnRpbnVlIGFueXdheXMgaWYgRE5TU0VDX1dBUk5fT05MWSBpcyBzZXQgKi8KKyAgICAgICAgaWYgKCFuZXRzbm1wX2RzX2dldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ETlNTRUNfV0FSTl9PTkxZKSkKKyAgICAgICAgICAgIGhwID0gTlVMTDsKKyAgICB9CisgICAgZWxzZSBpZiAodmFsX2RvZXNfbm90X2V4aXN0KHZhbF9zdGF0dXMpICYmIGhwKQorICAgICAgICBocCA9IE5VTEw7CisjZWxzZQorICAgIGhwID0gZ2V0aG9zdGJ5bmFtZShuYW1lKTsKKyNlbmRpZgorICAgIGlmIChocCA9PSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZXNvbHZlICVzXG4iLCBuYW1lKSk7CisgICAgfSBlbHNlIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5bmFtZSIsCisgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nOiByZXNwb25zZSBmb3IgJXMgbm90IEFGX0lORVQhXG4iLCBuYW1lKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImRuczpnZXRob3N0YnluYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgIiVzIHJlc29sdmVkIG9rYXlcbiIsIG5hbWUpKTsKKyAgICB9CisgICAgcmV0dXJuIGhwOworI2Vsc2UKKyAgICBORVRTTk1QX0xPR09OQ0UoKExPR19FUlIsICJnZXRob3N0YnluYW1lIG5vdCBhdmFpbGFibGUiKSk7CisgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogSEFWRV9HRVRIT1NUQllOQU1FICovCit9CisKKy8qKgorICogTG9vayB1cCB0aGUgaG9zdCBuYW1lIHZpYSBETlMuCisgKgorICogQHBhcmFtW2luXSBhZGRyIFBvaW50ZXIgdG8gdGhlIGFkZHJlc3MgdG8gcmVzb2x2ZS4gVGhpcyBhcmd1bWVudCBwb2ludHMgZS5nLgorICogICB0byBhIHN0cnVjdCBpbl9hZGRyIGZvciBBRl9JTkVUIG9yIHRvIGEgc3RydWN0IGluNl9hZGRyIGZvciBBRl9JTkVUNi4KKyAqIEBwYXJhbVtpbl0gbGVuICBMZW5ndGggaW4gYnl0ZXMgb2YgKmFkZHIuCisgKiBAcGFyYW1baW5dIHR5cGUgQWRkcmVzcyBmYW1pbHksIGUuZy4gQUZfSU5FVCBvciBBRl9JTkVUNi4KKyAqCisgKiBAcmV0dXJuIFBvaW50ZXIgdG8gYSBob3N0ZW50IHN0cnVjdHVyZSBpZiBhZGRyZXNzIGxvb2t1cCBzdWNjZWVkZWQgb3IgTlVMTAorICogICBpZiB0aGUgbG9va3VwIGZhaWxlZC4KKyAqCisgKiBAc2VlIFNlZSBhbHNvIHRoZSBnZXRob3N0YnlhZGRyKCkgbWFuIHBhZ2UuCisgKi8KK3N0cnVjdCBob3N0ZW50ICoKK25ldHNubXBfZ2V0aG9zdGJ5YWRkcihjb25zdCB2b2lkICphZGRyLCBzb2NrbGVuX3QgbGVuLCBpbnQgdHlwZSkKK3sKKyNpZiBIQVZFX0dFVEhPU1RCWUFERFIKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaHAgPSBOVUxMOworICAgIGNoYXIgYnVmWzY0XTsKKworICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5YWRkciIsICJyZXNvbHZpbmcgJXNcbiIsCisgICAgICAgICAgICAgICAgaW5ldF9udG9wKHR5cGUsIGFkZHIsIGJ1Ziwgc2l6ZW9mKGJ1ZikpKSk7CisKKyNpZmRlZiBETlNTRUNfTE9DQUxfVkFMSURBVElPTgorICAgIHZhbF9zdGF0dXNfdCB2YWxfc3RhdHVzOworICAgIGhwID0gdmFsX2dldGhvc3RieWFkZHIobmV0c25tcF92YWxpZGF0b3JfY29udGV4dCgpLCBhZGRyLCBsZW4sIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAmdmFsX3N0YXR1cyk7CisgICAgREVCVUdNU0dUTCgoImRuczpzZWM6dmFsIiwgInZhbF9zdGF0dXMgJWQgLyAlczsgdHJ1c3RlZDogJWRcbiIsCisgICAgICAgICAgICAgICAgdmFsX3N0YXR1cywgcF92YWxfc3RhdHVzKHZhbF9zdGF0dXMpLAorICAgICAgICAgICAgICAgIHZhbF9pc3RydXN0ZWQodmFsX3N0YXR1cykpKTsKKyAgICBpZiAoIXZhbF9pc3RydXN0ZWQodmFsX3N0YXR1cykpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsCisgICAgICAgICAgICAgICAgICJUaGUgYXV0aGVudGljaXR5IG9mIEROUyByZXNwb25zZSBpcyBub3QgdHJ1c3RlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICBwX3ZhbF9zdGF0dXModmFsX3N0YXR1cykpOworICAgICAgICAvKiogY29udGludWUgYW55d2F5cyBpZiBETlNTRUNfV0FSTl9PTkxZIGlzIHNldCAqLworICAgICAgICBpZiAoIW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX0ROU1NFQ19XQVJOX09OTFkpKQorICAgICAgICAgICAgaHAgPSBOVUxMOworICAgIH0KKyAgICBlbHNlIGlmICh2YWxfZG9lc19ub3RfZXhpc3QodmFsX3N0YXR1cykgJiYgaHApCisgICAgICAgIGhwID0gTlVMTDsKKyNlbHNlCisgICAgaHAgPSBnZXRob3N0YnlhZGRyKGFkZHIsIGxlbiwgdHlwZSk7CisjZW5kaWYKKyAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieWFkZHIiLCAiY291bGRuJ3QgcmVzb2x2ZSBhZGRyXG4iKSk7CisgICAgfSBlbHNlIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkbnM6Z2V0aG9zdGJ5YWRkciIsCisgICAgICAgICAgICAgICAgICAgICJ3YXJuaW5nOiByZXNwb25zZSBmb3IgYWRkciBub3QgQUZfSU5FVCFcbiIpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgiZG5zOmdldGhvc3RieWFkZHIiLCAiYWRkciByZXNvbHZlZCBva2F5XG4iKSk7CisgICAgfQorICAgIHJldHVybiBocDsKKyNlbHNlCisgICAgTkVUU05NUF9MT0dPTkNFKChMT0dfRVJSLCAiZ2V0aG9zdGJ5YWRkciBub3QgYXZhaWxhYmxlIikpOworICAgIHJldHVybiBOVUxMOworI2VuZGlmCit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCiAjaWZuZGVmIEhBVkVfU1RSTkNBU0VDTVAKIAogLyoKQEAgLTkyNSw0MSArMTA4OSwzMiBAQAogfQogI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBIQVZFX1NFVEVOViAqLwogCi0vKiByZXR1cm5zIGNlbnRpc2Vjb25kcyAqLworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKGNhbGN1bGF0ZV90aW1lX2RpZmYsIG5ldHNubXBfdW51c2VkKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTENVTEFURV9USU1FX0RJRkYKKy8qKgorICogQ29tcHV0ZSAoKm5vdyAtICp0aGVuKSBpbiBjZW50aXNlY29uZHMuCisgKi8KIGludAotY2FsY3VsYXRlX3RpbWVfZGlmZihzdHJ1Y3QgdGltZXZhbCAqbm93LCBzdHJ1Y3QgdGltZXZhbCAqdGhlbikKK2NhbGN1bGF0ZV90aW1lX2RpZmYoY29uc3Qgc3RydWN0IHRpbWV2YWwgKm5vdywgY29uc3Qgc3RydWN0IHRpbWV2YWwgKnRoZW4pCiB7Ci0gICAgc3RydWN0IHRpbWV2YWwgIHRtcCwgZGlmZjsKLSAgICBtZW1jcHkoJnRtcCwgbm93LCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKLSAgICB0bXAudHZfc2VjLS07Ci0gICAgdG1wLnR2X3VzZWMgKz0gMTAwMDAwMEw7Ci0gICAgZGlmZi50dl9zZWMgPSB0bXAudHZfc2VjIC0gdGhlbi0+dHZfc2VjOwotICAgIGRpZmYudHZfdXNlYyA9IHRtcC50dl91c2VjIC0gdGhlbi0+dHZfdXNlYzsKLSAgICBpZiAoZGlmZi50dl91c2VjID4gMTAwMDAwMEwpIHsKLSAgICAgICAgZGlmZi50dl91c2VjIC09IDEwMDAwMDBMOwotICAgICAgICBkaWZmLnR2X3NlYysrOwotICAgIH0KLSAgICByZXR1cm4gKChkaWZmLnR2X3NlYyAqIDEwMCkgKyAoZGlmZi50dl91c2VjIC8gMTAwMDApKTsKLX0KKyAgICBzdHJ1Y3QgdGltZXZhbCAgZGlmZjsKIAotLyogcmV0dXJucyBkaWZmIGluIHJvdW5kZWQgc2Vjb25kcyAqLwotdV9pbnQKLWNhbGN1bGF0ZV9zZWN0aW1lX2RpZmYoc3RydWN0IHRpbWV2YWwgKm5vdywgc3RydWN0IHRpbWV2YWwgKnRoZW4pCi17Ci0gICAgc3RydWN0IHRpbWV2YWwgIHRtcCwgZGlmZjsKLSAgICBtZW1jcHkoJnRtcCwgbm93LCBzaXplb2Yoc3RydWN0IHRpbWV2YWwpKTsKLSAgICB0bXAudHZfc2VjLS07Ci0gICAgdG1wLnR2X3VzZWMgKz0gMTAwMDAwMEw7Ci0gICAgZGlmZi50dl9zZWMgPSB0bXAudHZfc2VjIC0gdGhlbi0+dHZfc2VjOwotICAgIGRpZmYudHZfdXNlYyA9IHRtcC50dl91c2VjIC0gdGhlbi0+dHZfdXNlYzsKLSAgICBpZiAoZGlmZi50dl91c2VjID4gMTAwMDAwMEwpIHsKLSAgICAgICAgZGlmZi50dl91c2VjIC09IDEwMDAwMDBMOwotICAgICAgICBkaWZmLnR2X3NlYysrOwotICAgIH0KLSAgICBpZiAoZGlmZi50dl91c2VjID49IDUwMDAwMEwpCi0gICAgICAgIHJldHVybiBkaWZmLnR2X3NlYyArIDE7Ci0gICAgcmV0dXJuICBkaWZmLnR2X3NlYzsKKyAgICBORVRTTk1QX1RJTUVSU1VCKG5vdywgdGhlbiwgJmRpZmYpOworICAgIHJldHVybiAoaW50KShkaWZmLnR2X3NlYyAqIDEwMCArIGRpZmYudHZfdXNlYyAvIDEwMDAwKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTENVTEFURV9USU1FX0RJRkYgKi8KKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX0NBTENVTEFURV9TRUNUSU1FX0RJRkYKKy8qKiBDb21wdXRlIHJvdW5kZWQgKCpub3cgLSAqdGhlbikgaW4gc2Vjb25kcy4gKi8KK3VfaW50CitjYWxjdWxhdGVfc2VjdGltZV9kaWZmKGNvbnN0IHN0cnVjdCB0aW1ldmFsICpub3csIGNvbnN0IHN0cnVjdCB0aW1ldmFsICp0aGVuKQoreworICAgIHN0cnVjdCB0aW1ldmFsICBkaWZmOworCisgICAgTkVUU05NUF9USU1FUlNVQihub3csIHRoZW4sICZkaWZmKTsKKyAgICByZXR1cm4gZGlmZi50dl9zZWMgKyAoZGlmZi50dl91c2VjID49IDUwMDAwMEwpOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfQ0FMQ1VMQVRFX1NFQ1RJTUVfRElGRiAqLwogCiAjaWZuZGVmIEhBVkVfU1RSQ0FTRVNUUgogLyoKQEAgLTEwNzAsMTMgKzEyMjUsMTQgQEAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBETkUsIG1ha2UgaXQgCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHNubXBfbG9nKExPR19JTkZPLCAiQ3JlYXRpbmcgZGlyZWN0b3J5OiAlc1xuIiwgYnVmKTsKICNpZmRlZiBXSU4zMgogICAgICAgICAgICAgaWYgKENyZWF0ZURpcmVjdG9yeShidWYsIE5VTEwpID09IDApCiAjZWxzZQogICAgICAgICAgICAgaWYgKG1rZGlyKGJ1ZiwgbW9kZSkgPT0gLTEpCiAjZW5kaWYKICAgICAgICAgICAgICAgICBnb3RvIG91dDsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfSU5GTywgIkNyZWF0ZWQgZGlyZWN0b3J5OiAlc1xuIiwgYnVmKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBleGlzdHMsIGlzIGl0IGEgZmlsZT8gCkBAIC0xMjA0LDcgKzEzNjAsNyBAQAogICB9IGVsc2UgewogICAgIHJldHVybiAtMTsKICAgfQotI2VsaWYgZGVmaW5lZChhaXg0KSB8fCBkZWZpbmVkKGFpeDUpIHx8IGRlZmluZWQoYWl4NikKKyNlbGlmIGRlZmluZWQoYWl4NCkgfHwgZGVmaW5lZChhaXg1KSB8fCBkZWZpbmVkKGFpeDYpIHx8IGRlZmluZWQoYWl4NykKICAgcmV0dXJuIChfX0tFUk5FTF8zMigpID8gMzIgOiAoX19LRVJORUxfNjQoKSA/IDY0IDogLTEpKTsKICNlbGlmIGRlZmluZWQob3NmNCkgfHwgZGVmaW5lZChvc2Y1KSB8fCBkZWZpbmVkKF9fYWxwaGEpCiAgIHJldHVybiA2NDsgLyogQWxwaGEgaXMgYWx3YXlzIDY0Yml0ICovCkBAIC0xMjE0LDMgKzEzNzAsNjggQEAKICNlbmRpZgogfQogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2Yoc3RyX3RvX3VpZCwgdXNlcl9pbmZvcm1hdGlvbikKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVFJfVE9fVUlECisvKioKKyAqIENvbnZlcnQgYSB1c2VyIG5hbWUgb3IgbnVtYmVyIGludG8gbnVtZXJpYyBmb3JtLgorICoKKyAqIEBwYXJhbVtpbl0gdXNlcm9ydWlkIEVpdGhlciBhIFVuaXggdXNlciBuYW1lIG9yIHRoZSBBU0NJSSByZXByZXNlbnRhdGlvbgorICogICBvZiBhIHVzZXIgbnVtYmVyLgorICoKKyAqIEByZXR1cm4gRWl0aGVyIGEgdXNlciBudW1iZXIgPiAwIG9yIDAgaWYgdXNlcm9ydWlkIGlzIG5vdCBhIHZhbGlkIHVzZXIKKyAqICAgbmFtZSwgbm90IGEgdmFsaWQgdXNlciBudW1iZXIgb3IgdGhlIG5hbWUgb2YgdGhlIHJvb3QgdXNlci4KKyAqLworaW50IG5ldHNubXBfc3RyX3RvX3VpZChjb25zdCBjaGFyICp1c2Vyb3J1aWQpIHsKKyAgICBpbnQgdWlkOworI2lmIEhBVkVfR0VUUFdOQU0gJiYgSEFWRV9QV0RfSAorICAgIHN0cnVjdCBwYXNzd2QgKnB3ZDsKKyNlbmRpZgorCisgICAgdWlkID0gYXRvaSh1c2Vyb3J1aWQpOworCisgICAgaWYgKHVpZCA9PSAwKSB7CisjaWYgSEFWRV9HRVRQV05BTSAmJiBIQVZFX1BXRF9ICisgICAgICAgIHB3ZCA9IGdldHB3bmFtKHVzZXJvcnVpZCk7CisgICAgICAgIHVpZCA9IHB3ZCA/IHB3ZC0+cHdfdWlkIDogMDsKKyAgICAgICAgZW5kcHdlbnQoKTsKKyNlbmRpZgorICAgICAgICBpZiAodWlkID09IDApCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywgIkNhbid0IGlkZW50aWZ5IHVzZXIgKCVzKS5cbiIsIHVzZXJvcnVpZCk7CisgICAgfQorICAgIHJldHVybiB1aWQ7CisgICAgCit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9TVFJfVE9fVUlEICovCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzdHJfdG9fZ2lkLCB1c2VyX2luZm9ybWF0aW9uKQorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUUl9UT19HSUQKKy8qKgorICogQ29udmVydCBhIGdyb3VwIG5hbWUgb3IgbnVtYmVyIGludG8gbnVtZXJpYyBmb3JtLgorICoKKyAqIEBwYXJhbVtpbl0gZ3JvdXBvcmdpZCBFaXRoZXIgYSBVbml4IGdyb3VwIG5hbWUgb3IgdGhlIEFTQ0lJIHJlcHJlc2VudGF0aW9uCisgKiAgIG9mIGEgZ3JvdXAgbnVtYmVyLgorICoKKyAqIEByZXR1cm4gRWl0aGVyIGEgZ3JvdXAgbnVtYmVyID4gMCBvciAwIGlmIGdyb3Vwb3JnaWQgaXMgbm90IGEgdmFsaWQgZ3JvdXAKKyAqICAgbmFtZSwgbm90IGEgdmFsaWQgZ3JvdXAgbnVtYmVyIG9yIHRoZSByb290IGdyb3VwLgorICovCitpbnQgbmV0c25tcF9zdHJfdG9fZ2lkKGNvbnN0IGNoYXIgKmdyb3Vwb3JnaWQpCit7CisgICAgaW50IGdpZDsKKworICAgIGdpZCA9IGF0b2koZ3JvdXBvcmdpZCk7CisKKyAgICBpZiAoZ2lkID09IDApIHsKKyNpZiBIQVZFX0dFVEdSTkFNICYmIEhBVkVfR1JQX0gKKyAgICAgICAgc3RydWN0IGdyb3VwICAqZ3JwOworCisgICAgICAgIGdycCA9IGdldGdybmFtKGdyb3Vwb3JnaWQpOworICAgICAgICBnaWQgPSBncnAgPyBncnAtPmdyX2dpZCA6IDA7CisgICAgICAgIGVuZGdyZW50KCk7CisjZW5kaWYKKyAgICAgICAgaWYgKGdpZCA9PSAwKQorICAgICAgICAgICAgc25tcF9sb2coTE9HX1dBUk5JTkcsICJDYW4ndCBpZGVudGlmeSBncm91cCAoJXMpLlxuIiwgZ3JvdXBvcmdpZCk7CisgICAgfQorCisgICAgcmV0dXJuIGdpZDsKK30KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1NUUl9UT19HSUQgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvdGVzdF9iaW5hcnlfYXJyYXkuYyBiL3NubXBsaWIvdGVzdF9iaW5hcnlfYXJyYXkuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDRiMWYwZS4uMDAwMDAwMAotLS0gYS9zbm1wbGliL3Rlc3RfYmluYXJ5X2FycmF5LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxNzEgKzAsMCBAQAotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaWYgSEFWRV9JT19ICi0jaW5jbHVkZSA8aW8uaD4KLSNlbmRpZgotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWYgSEFWRV9NQUxMT0NfSAotI2luY2x1ZGUgPG1hbGxvYy5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWYgSEFWRV9TVFJJTkdfSAotI2luY2x1ZGUgPHN0cmluZy5oPgotI2Vsc2UKLSNpbmNsdWRlIDxzdHJpbmdzLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jb250YWluZXIuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NvbnRhaW5lcl9iaW5hcnlfYXJyYXkuaD4KLSNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+Ci0jaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgotCi0jZGVmaW5lIFRFU1RfU0laRSA3Ci0KLXZvaWQKLXByaW50X2ludChuZXRzbm1wX2luZGV4ICppLCB2b2lkICp2KQotewotICAgIHByaW50ZigiaXRlbSAlcCA9ICVsZFxuIiwgaSwgaS0+b2lkc1swXSk7Ci19Ci0KLWludAotdGVzdF9pbnQodm9pZCkKLXsKLSAgICBvaWQgbzEgPSAxOwotICAgIG9pZCBvMiA9IDI7Ci0gICAgb2lkIG8zID0gNjsKLSAgICBvaWQgbzQgPSA4OwotICAgIG9pZCBvNSA9IDk7Ci0gICAgb2lkIG94ID0gNzsKLSAgICBvaWQgb3kgPSAxMDsKLSAgICBuZXRzbm1wX2luZGV4IGkxLGkyLGkzLGk0LGk1LGl4LGl5LCAqaXA7Ci0gICAgbmV0c25tcF9pbmRleCAqYVtURVNUX1NJWkVdID0geyAmaTEsICZpMiwgJmkzLCAmaXgsICZpNCwgJmk1LCAmaXkgfTsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKLSAgICBpbnQgaTsKLQotICAgIGMtPmNvbXBhcmUgPSBuZXRzbm1wX2NvbXBhcmVfbmV0c25tcF9pbmRleDsKLSAgICAKLSAgICBpMS5vaWRzID0gJm8xOwotICAgIGkyLm9pZHMgPSAmbzI7Ci0gICAgaTMub2lkcyA9ICZvMzsKLSAgICBpNC5vaWRzID0gJm80OwotICAgIGk1Lm9pZHMgPSAmbzU7Ci0gICAgaXgub2lkcyA9ICZveDsKLSAgICBpeS5vaWRzID0gJm95OwotICAgIGkxLmxlbiA9IGkyLmxlbiA9IGkzLmxlbiA9IGk0LmxlbiA9IGk1LmxlbiA9IGl4LmxlbiA9IGl5LmxlbiA9IDE7Ci0KLSAgICBwcmludGYoIkNyZWF0aW5nIGNvbnRhaW5lci4uLlxuIik7Ci0KLSAgICBwcmludGYoIkluc2VydGluZyBkYXRhLi4uXG4iKTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsJmk0KTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsJmkyKTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsJmkzKTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsJmkxKTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsJmk1KTsKLQotICAgIHByaW50ZigiRm9yIGVhY2guLi5cbiIpOwotICAgIENPTlRBSU5FUl9GT1JfRUFDSChjLCBwcmludF9pbnQsIE5VTEwpOwotICAgIHByaW50ZigiRG9uZS5cbiIpOwotCi0gICAgcHJpbnRmKCJcbiIpOwotICAgIGlwID0gQ09OVEFJTkVSX0ZJUlNUKGMpOwotICAgIHByaW50ZigiRmluZCBmaXJzdCA9ICVwICVsZFxuIixpcCwgaXAtPm9pZHNbMF0pOwotICAgIHdoaWxlKCBpcCApIHsKLSAgICAgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLGlwKTsKLSAgICAgICAgaWYoaXApCi0gICAgICAgICAgICBwcmludGYoIkZpbmQgbmV4dCA9ICVwICVsZFxuIixpcCwgaXAtPm9pZHNbMF0pOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBwcmludGYoIkZpbmQgbmV4dCA9ICVzXG4iLGlwKTsKLSAgICB9Ci0KLSAgICBmb3IoIGk9MDsgaSA8IFRFU1RfU0laRTsgKytpKSB7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaXAgPSBDT05UQUlORVJfRklORChjLGFbaV0pOwotICAgICAgICBwcmludGYoIkZpbmQgJWxkID0gJXAgJWxkXG4iLCBhW2ldLT5vaWRzWzBdLCBpcCwgaXAgPyBpcC0+b2lkc1swXSA6IDApOwotICAgICAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsYVtpXSk7Ci0gICAgICAgIHByaW50ZigiTmV4dCAlbGQgPSAlcCAlbGRcbiIsIGFbaV0tPm9pZHNbMF0sIGlwLCBpcCA/IGlwLT5vaWRzWzBdIDogMCk7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJEb25lLlxuIik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotdm9pZAotcHJpbnRfc3RyaW5nKGNoYXIgKmksIHZvaWQgKnYpCi17Ci0gICAgcHJpbnRmKCJpdGVtICVzXG4iLCBpKTsKLX0KLQotaW50Ci1teV9zdHJjbXAoY2hhciAqbGhzLCBjaGFyICpyaHMpCi17Ci0gICAgaW50IHJjID0gc3RyY21wKGxocyxyaHMpOwotLyogICAgICBwcmludGYoIiVzICVkICVzXG4iLGxocywgcmMsIHJocyk7ICovCi0gICAgcmV0dXJuIHJjOwotfQotCi1pbnQKLXRlc3Rfc3RyaW5nKCkKLXsKLSAgICBjb25zdCBjaGFyICpvMSA9ICJ6ZWJyYSI7Ci0gICAgY29uc3QgY2hhciAqbzIgPSAiYi10d28iOwotICAgIGNvbnN0IGNoYXIgKm8zID0gImIiOwotICAgIGNvbnN0IGNoYXIgKm80ID0gImNlZGFyIjsKLSAgICBjb25zdCBjaGFyICpvNSA9ICJhbHBoYSI7Ci0gICAgY29uc3QgY2hhciAqb3ggPSAiZGV2IjsKLSAgICBjb25zdCBjaGFyICpveSA9ICJhYSI7Ci0gICAgY29uc3QgY2hhciAqIGlwOwotICAgIAotICAgIGNvbnN0IGNoYXIgKmFbVEVTVF9TSVpFXSA9IHsgbzEsIG8yLCBvMywgb3gsIG80LCBvNSwgb3kgfTsKLSAgICBuZXRzbm1wX2NvbnRhaW5lciAqYyA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKLSAgICBpbnQgaTsKLQotICAgIGMtPmNvbXBhcmUgPSBteV9zdHJjbXA7Ci0gICAgCi0gICAgcHJpbnRmKCJDcmVhdGluZyBjb250YWluZXIuLi5cbiIpOwotCi0gICAgcHJpbnRmKCJJbnNlcnRpbmcgZGF0YS4uLlxuIik7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLG80KTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsbzIpOwotICAgIENPTlRBSU5FUl9JTlNFUlQoYyxvMyk7Ci0gICAgQ09OVEFJTkVSX0lOU0VSVChjLG8xKTsKLSAgICBDT05UQUlORVJfSU5TRVJUKGMsbzUpOwotICAgIHByaW50ZigiXG4iKTsKLSAgICBwcmludGYoIkZvciBlYWNoLi4uXG4iKTsKLSAgICBDT05UQUlORVJfRk9SX0VBQ0goYywgcHJpbnRfc3RyaW5nLCBOVUxMKTsKLSAgICBwcmludGYoIkRvbmUuXG4iKTsKLQotICAgIHByaW50ZigiXG4iKTsKLSAgICBpcCA9IENPTlRBSU5FUl9GSVJTVChjKTsKLSAgICBwcmludGYoIkZpbmQgZmlyc3QgPSAlc1xuIixpcCk7Ci0gICAgd2hpbGUoIGlwICkgewotICAgICAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsaXApOwotICAgICAgICBwcmludGYoIkZpbmQgbmV4dCA9ICVzXG4iLGlwKTsKLSAgICB9Ci0KLSAgICBmb3IoIGk9MDsgaSA8IFRFU1RfU0laRTsgKytpKSB7Ci0gICAgICAgIHByaW50ZigiXG4iKTsKLSAgICAgICAgaXAgPSBDT05UQUlORVJfRklORChjLGFbaV0pOwotICAgICAgICBwcmludGYoIkZpbmQgJXMgPSAlc1xuIiwgYVtpXSwgaXApOwotICAgICAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsYVtpXSk7Ci0gICAgICAgIHByaW50ZigiTmV4dCAlcyA9ICVzXG4iLCBhW2ldLCBpcCk7Ci0gICAgfQotCi0gICAgcHJpbnRmKCJEb25lLlxuIik7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyKiogYXJndikKLXsKLQotICAgIHRlc3RfaW50KCk7Ci0gICAgdGVzdF9zdHJpbmcoKTsKLX0KZGlmZiAtLWdpdCBhL3NubXBsaWIvdGV4dF91dGlscy5jIGIvc25tcGxpYi90ZXh0X3V0aWxzLmMKaW5kZXggOTA3OTcwOS4uMzI1OTZiZSAxMDA2NDQKLS0tIGEvc25tcGxpYi90ZXh0X3V0aWxzLmMKKysrIGIvc25tcGxpYi90ZXh0X3V0aWxzLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtZmVhdHVyZXMuaD4KICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KQEAgLTQyLDcgKzQzLDE0IEBACiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9maWxlX3V0aWxzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90ZXh0X3V0aWxzLmg+CiAKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih0ZXh0X3V0aWxzLCBsaWJuZXRzbm1wKQogCituZXRzbm1wX2ZlYXR1cmVfcHJvdmlkZSh0ZXh0X3V0aWxzKQorI2lmZGVmIE5FVFNOTVBfRkVBVFVSRV9SRVFVSVJFX1RFWFRfVVRJTFMKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGZpbGVfdXRpbHMpCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFUVVJUkVfVEVYVF9VVElMUyAqLworCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEVYVF9VVElMUwogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCiAgKiBQcm90b3R5cGVzCkBAIC0xNDcsNiArMTU1LDggQEAKICAgICByZXR1cm4gYzsKIH0KIAorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRleHRfdG9rZW5fY29udGFpbmVyX2Zyb21fZmlsZSwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVEVYVF9UT0tFTl9DT05UQUlORVJfRlJPTV9GSUxFCiBuZXRzbm1wX2NvbnRhaW5lciAqCiBuZXRzbm1wX3RleHRfdG9rZW5fY29udGFpbmVyX2Zyb21fZmlsZShjb25zdCBjaGFyICpmaWxlLCB1X2ludCBmbGFncywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfY29udGFpbmVyICpjaW4sIHZvaWQgKmNvbnRleHQpCkBAIC0xOTksNiArMjA5LDcgQEAKICAgICAKICAgICByZXR1cm4gYzsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1RFWFRfVE9LRU5fQ09OVEFJTkVSX0ZST01fRklMRSAqLwogCiAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjUsMTMgKzQ3NiwxMyBAQAogCiAgICAgICAgIGNhc2UgUE1MUF9UWVBFX1VOU0lHTkVEOgogICAgICAgICAgICAgdHZpLT52YWx1ZS51bCA9IHN0cnRvdWwocHRyLCBOVUxMLCAwKTsKLSAgICAgICAgICAgIGlmICgoZXJybm8gPT0gRVJBTkdFKSAmJihVTE9OR19NQVggPT0gdHZpLT52YWx1ZS5zbCkpCisgICAgICAgICAgICBpZiAoKGVycm5vID09IEVSQU5HRSkgJiYgKFVMT05HX01BWCA9PSB0dmktPnZhbHVlLnVsKSkKICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfV0FSTklORywidmFsdWUgb3ZlcmZsb3dcbiIpOwogICAgICAgICAgICAgYnJlYWs7CiAKIAogICAgICAgICBjYXNlIFBNTFBfVFlQRV9JTlRFR0VSOgotICAgICAgICAgICAgdHZpLT52YWx1ZS51bCA9IHN0cnRvbChwdHIsIE5VTEwsIDApOworICAgICAgICAgICAgdHZpLT52YWx1ZS5zbCA9IHN0cnRvbChwdHIsIE5VTEwsIDApOwogICAgICAgICAgICAgaWYgKChlcnJubyA9PSBFUkFOR0UpICYmCiAgICAgICAgICAgICAgICAgKChMT05HX01BWCA9PSB0dmktPnZhbHVlLnNsKSB8fAogICAgICAgICAgICAgICAgICAoTE9OR19NSU4gPT0gdHZpLT52YWx1ZS5zbCkpKQpAQCAtNDgzLDcgKzQ5NCw3IEBACiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIFBNTFBfVFlQRV9CT09MRUFOOgotICAgICAgICAgICAgaWYgKGlzZGlnaXQoKnB0cikpCisgICAgICAgICAgICBpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikoKnB0cikpKQogICAgICAgICAgICAgICAgIHR2aS0+dmFsdWUudWwgPSBzdHJ0b3VsKHB0ciwgTlVMTCwgMCk7CiAgICAgICAgICAgICBlbHNlIGlmIChzdHJjYXNlY21wKHB0ciwidHJ1ZSIpID09IDApCiAgICAgICAgICAgICAgICAgdHZpLT52YWx1ZS51bCA9IDE7CkBAIC01MTAsMyArNTIxLDYgQEAKICAgICByZXR1cm4gUE1MUF9SQ19NRU1PUllfVVNFRDsKIH0KIAorI2Vsc2UgIC8qICEgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URVhUX1VUSUxTICovCituZXRzbm1wX2ZlYXR1cmVfdW51c2VkKHRleHRfdXRpbHMpOworI2VuZGlmIC8qICEgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9URVhUX1VUSUxTICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3Rvb2xzLmMgYi9zbm1wbGliL3Rvb2xzLmMKaW5kZXggMjIwNmZmMy4uMjllNWZlZiAxMDA2NDQKLS0tIGEvc25tcGxpYi90b29scy5jCisrKyBiL3NubXBsaWIvdG9vbHMuYwpAQCAtNCwxNyArNCwyMyBAQAogCiAjZGVmaW5lIE5FVFNOTVBfVE9PTFNfQyAxIC8qIGRvbnQgcmUtZGVmaW5lIG1hbGxvYyB3cmFwcGVycyBoZXJlICovCiAKKyNpZmRlZiBIQVZFX0NSVERCR19ICisvKgorICogRGVmaW5lIF9DUlREQkdfTUFQX0FMTE9DIHN1Y2ggdGhhdCBpbiBkZWJ1ZyBidWlsZHMgKHdoZW4gX0RFQlVHIGhhcyBiZWVuCisgKiBkZWZpbmVkKSBlLmcuIG1hbGxvYygpIGlzIHJlcm91dGVkIHRvIF9tYWxsb2NfZGJnKCkuCisgKi8KKyNkZWZpbmUgX0NSVERCR19NQVBfQUxMT0MgMQorI2luY2x1ZGUgPGNydGRiZy5oPgorI2VuZGlmCisKICNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgogCiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2lmIFRJTUVfV0lUSF9TWVNfVElNRQotIyBpZmRlZiBXSU4zMgotIyAgaW5jbHVkZSA8c3lzL3RpbWViLmg+Ci0jIGVsc2UKLSMgIGluY2x1ZGUgPHN5cy90aW1lLmg+Ci0jIGVuZGlmCisjIGluY2x1ZGUgPHN5cy90aW1lLmg+CiAjIGluY2x1ZGUgPHRpbWUuaD4KICNlbHNlCiAjIGlmIEhBVkVfU1lTX1RJTUVfSApAQCAtMjYsOCArMzIsOCBAQAogI2lmZGVmIEhBVkVfU1lTX1NPQ0tFVF9ICiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2VuZGlmCi0jaWYgSEFWRV9XSU5TT0NLX0gKLSNpbmNsdWRlIDx3aW5zb2NrLmg+CisjaWZkZWYgSEFWRV9TWVNfVElNRV9ICisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KICNlbmRpZgogI2lmZGVmIEhBVkVfU1RETElCX0gKICNpbmNsdWRlIDxzdGRsaWIuaD4KQEAgLTQzLDYgKzQ5LDkgQEAKICNpZmRlZiBIQVZFX0FSUEFfSU5FVF9ICiAjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CiAjZW5kaWYKKyNpZmRlZiBIQVZFX1ZBTEdSSU5EX01FTUNIRUNLX0gKKyNpbmNsdWRlIDx2YWxncmluZC9tZW1jaGVjay5oPgorI2VuZGlmCiAjaWZkZWYgY3lnd2luCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2VuZGlmCkBAIC02MywxNCArNzIsMzUgQEAKICNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L21pYi5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc2NhcGkuaD4KIAotI2lmZGVmIFdJTjMyCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodG9vbHNfYWxsLCBsaWJuZXRzbm1wKQorCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWVtb3J5X3dyYXBwZXJzLCB0b29sc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodmFsZ3JpbmQsIHRvb2xzX2FsbCkKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihzdHJpbmdfdGltZV90b19zZWNzLCB0b29sc19hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobmV0c25tcF9jaGVja19kZWZpbmVkbmVzcywgdmFsZ3JpbmQpCisKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZih1YXRpbWVfcmVhZHksIG5ldHNubXBfdW51c2VkKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRpbWV2YWxfdHRpY2tzLCBuZXRzbm1wX3VudXNlZCkKKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1lbW9yeV9zdHJkdXAsIG1lbW9yeV93cmFwcGVycykKK25ldHNubXBfZmVhdHVyZV9jaGlsZF9vZihtZW1vcnlfY2FsbG9jLCBtZW1vcnlfd3JhcHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWVtb3J5X21hbGxvYywgbWVtb3J5X3dyYXBwZXJzKQorbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKG1lbW9yeV9yZWFsbG9jLCBtZW1vcnlfd3JhcHBlcnMpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YobWVtb3J5X2ZyZWUsIG1lbW9yeV93cmFwcGVycykKKworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9XUkFQUEVSUwogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciBmb3IgdGhlIHN0cmR1cCBmdW5jdGlvbi4KKyAqCisgKiBAbm90ZSBUaGUgc3RyZHVwKCkgaW1wbGVtZW50YXRpb24gY2FsbHMgX21hbGxvY19kYmcoKSB3aGVuIGxpbmtpbmcgd2l0aAorICogTVNWQ1JUPz9ELmRsbCBhbmQgbWFsbG9jKCkgd2hlbiBsaW5raW5nIHdpdGggTVNWQ1JUPz8uZGxsCiAgKi8KIGNoYXIgKiBuZXRzbm1wX3N0cmR1cCggY29uc3QgY2hhciAqIHB0cikKIHsKICAgICByZXR1cm4gc3RyZHVwKHB0cik7CiB9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfU1RSRFVQICovCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX0NBTExPQwogLyoqCiAgKiBUaGlzIGZ1bmN0aW9uIGlzIGEgd3JhcHBlciBmb3IgdGhlIGNhbGxvYyBmdW5jdGlvbi4KICAqLwpAQCAtNzgsNyArMTA4LDggQEAKIHsKICAgICByZXR1cm4gY2FsbG9jKG5tZW1iLCBzaXplKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX0NBTExPQyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9NQUxMT0MKIC8qKgogICogVGhpcyBmdW5jdGlvbiBpcyBhIHdyYXBwZXIgZm9yIHRoZSBtYWxsb2MgZnVuY3Rpb24uCiAgKi8KQEAgLTg2LDcgKzExNyw4IEBACiB7CiAgICAgcmV0dXJuIG1hbGxvYyhzaXplKTsKIH0KLQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfTUVNT1JZX01BTExPQyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9SRUFMTE9DCiAvKioKICAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGZvciB0aGUgcmVhbGxvYyBmdW5jdGlvbi4KICAqLwpAQCAtOTQsNyArMTI2LDggQEAKIHsKICAgICByZXR1cm4gcmVhbGxvYyhwdHIsIHNpemUpOwogfQotCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9NRU1PUllfUkVBTExPQyAqLworI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9GUkVFCiAvKioKICAqIFRoaXMgZnVuY3Rpb24gaXMgYSB3cmFwcGVyIGZvciB0aGUgZnJlZSBmdW5jdGlvbi4KICAqIEl0IGNhbGxzIGZyZWUgb25seSBpZiB0aGUgY2FsbGluZyBwYXJhbWV0ZXIgaGFzIGEgbm9uLXplcm8gdmFsdWUuCkBAIC0xMDQsNyArMTM3LDcgQEAKICAgICBpZiAocHRyKQogICAgICAgICBmcmVlKHB0cik7CiB9Ci0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX01FTU9SWV9GUkVFICovCiAKIC8qKgogICogVGhpcyBmdW5jdGlvbiBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIHBvaW50ZWQgYXQgYnkgKmJ1Ziwgd2hpY2ggaXMKQEAgLTE3NCw2ICsyMDcsOSBAQAogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCEqYnVmKQorICAgICAgICByZXR1cm4gMDsKKwogICAgIHN0cmNweSgoY2hhciAqKSAoKmJ1ZiArICpvdXRfbGVuKSwgKGNvbnN0IGNoYXIgKikgcyk7CiAgICAgKm91dF9sZW4gKz0gc3RybGVuKChjaGFyICopICgqYnVmICsgKm91dF9sZW4pKTsKICAgICByZXR1cm4gMTsKQEAgLTE5NCw2ICsyMzAsNyBAQAogCiB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBmcmVlX3plcm8oKSAqLwogCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVVNNX1NDQVBJCiAvKioKICAqIFJldHVybnMgcG9pbnRlciB0byBhbGxvY2FlZCAmIHNldCBidWZmZXIgb24gc3VjY2Vzcywgc2l6ZSBjb250YWlucwogICogbnVtYmVyIG9mIHJhbmRvbSBieXRlcyBmaWxsZWQuICBidWYgaXMgTlVMTCBhbmQgKnNpemUgc2V0IHRvIEtNVApAQCAtMjI0LDYgKzI2MSw3IEBACiAgICAgcmV0dXJuIGJ1ZjsKIAogfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFsbG9jX3JhbmRvbSgpICovCisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VU01fU0NBUEkgKi8KIAogLyoqCiAgKiBEdXBsaWNhdGVzIGEgbWVtb3J5IGJsb2NrLgpAQCAtMjQ2LDYgKzI4NCwzOSBAQAogICAgIHJldHVybiB0bzsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG5ldHNubXBfbWVtZHVwKCkgKi8KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX05FVFNOTVBfQ0hFQ0tfREVGSU5FRE5FU1MKKy8qKgorICogV2hlbiBydW5uaW5nIHVuZGVyIFZhbGdyaW5kLCBjaGVjayB3aGV0aGVyIGFsbCBieXRlcyBpbiB0aGUgcmFuZ2UgW3BhY2tldCwKKyAqIHBhY2tldCtsZW5ndGgpIGFyZSBkZWZpbmVkLiBMZXQgVmFsZ3JpbmQgcHJpbnQgYSBiYWNrdHJhY2UgaWYgb25lIG9yIG1vcmUKKyAqIGJ5dGVzIHdpdGggdW5pbml0aWFsaXplZCB2YWx1ZXMgaGF2ZSBiZWVuIGZvdW5kLiBUaGlzIGZ1bmN0aW9uIGNhbiBoZWxwIHRvCisgKiBmaW5kIHRoZSBjYXVzZSBvZiB1bmRlZmluZWQgdmFsdWUgZXJyb3JzIGlmIC0tdHJhY2stb3JpZ2lucz15ZXMgaXMgbm90CisgKiBzdWZmaWNpZW50LiBEb2VzIG5vdGhpbmcgd2hlbiBub3QgcnVubmluZyB1bmRlciBWYWxncmluZC4KKyAqCisgKiBOb3RlOiB0aGlzIHJlcXVpcmVzIGEgZmFpcmx5IHJlY2VudCB2YWxncmluZC4KKyAqLwordm9pZAorbmV0c25tcF9jaGVja19kZWZpbmVkbmVzcyhjb25zdCB2b2lkICpwYWNrZXQsIHNpemVfdCBsZW5ndGgpCit7CisjaWYgZGVmaW5lZChfX1ZBTEdSSU5EX01BSk9SX18pICYmIGRlZmluZWQoX19WQUxHUklORF9NSU5PUl9fKSAgIFwKKyAgICAmJiAoX19WQUxHUklORF9NQUpPUl9fID4gMyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB8fCAoX19WQUxHUklORF9NQUpPUl9fID09IDMgJiYgX19WQUxHUklORF9NSU5PUl9fID49IDYpKQorCisgICAgaWYgKFJVTk5JTkdfT05fVkFMR1JJTkQpIHsKKyAgICAgICAgaW50IGk7CisgICAgICAgIGNoYXIgdmJpdHM7CisKKyAgICAgICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAoVkFMR1JJTkRfR0VUX1ZCSVRTKChjb25zdCBjaGFyICopcGFja2V0ICsgaSwgJnZiaXRzLCAxKSA9PSAxCisgICAgICAgICAgICAgICAgJiYgdmJpdHMpCisgICAgICAgICAgICAgICAgVkFMR1JJTkRfUFJJTlRGX0JBQ0tUUkFDRSgiVW5kZWZpbmVkOiBieXRlICVkLyVkIiwgaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpbnQpbGVuZ3RoKTsKKyAgICAgICAgfQorICAgIH0KKworI2VuZGlmCit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9ORVRTTk1QX0NIRUNLX0RFRklORURORVNTICovCisKIC8qKiBjb3BpZXMgYSAocG9zc2libGUpIHVudGVybWluYXRlZCBzdHJpbmcgb2YgYSBnaXZlbiBsZW5ndGggaW50byBhCiAgKiAgbmV3IGJ1ZmZlciBhbmQgbnVsbCB0ZXJtaW5hdGVzIGl0IGFzIHdlbGwgKG5ldyBidWZmZXIgTUFZIGJlIG9uZQogICogIGJ5dGUgbG9uZ2VyIHRvIGFjY291bnQgZm9yIHRoaXMgKi8KQEAgLTI3MSw2ICszNDIsNTggQEAKIAogLyoqIGNvbnZlcnRzIGJpbmFyeSB0byBoZXhpZGVjaW1hbAogICoKKyAqICAgICBAcGFyYW0gKmlucHV0ICAgICAgICAgICAgQmluYXJ5IGRhdGEuCisgKiAgICAgQHBhcmFtIGxlbiAgICAgICAgICAgICAgIExlbmd0aCBvZiBiaW5hcnkgZGF0YS4KKyAqICAgICBAcGFyYW0gKipkZXN0ICAgICAgICAgICAgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZyBlcXVpdmFsZW50IGluIGhleC4KKyAqICAgICBAcGFyYW0gKmRlc3RfbGVuICAgICAgICAgc2l6ZSBvZiBkZXN0aW5hdGlvbiBidWZmZXIKKyAqICAgICBAcGFyYW0gYWxsb3dfcmVhbGxvYyAgICAgZmxhZyBpbmRpY2F0aW5nIGlmIGJ1ZmZlciBjYW4gYmUgcmVhbGxvYydkCisgKiAgICAgIAorICogQHJldHVybiBvbGVuCUxlbmd0aCBvZiBvdXRwdXQgc3RyaW5nIG5vdCBpbmNsdWRpbmcgTlVMTCB0ZXJtaW5hdG9yLgorICovCit1X2ludAorbmV0c25tcF9iaW5hcnlfdG9faGV4KHVfY2hhciAqKiBkZXN0LCBzaXplX3QgKmRlc3RfbGVuLCBpbnQgYWxsb3dfcmVhbGxvYywgCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICogaW5wdXQsIHNpemVfdCBsZW4pCit7CisgICAgdV9pbnQgICAgICAgICAgIG9sZW4gPSAobGVuICogMikgKyAxOworICAgIHVfY2hhciAgICAgICAgICpzLCAqb3A7CisgICAgY29uc3QgdV9jaGFyICAgKmlwID0gaW5wdXQ7CisKKyAgICBpZiAoZGVzdCA9PSBOVUxMIHx8IGRlc3RfbGVuID09IE5VTEwgfHwgaW5wdXQgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoTlVMTCA9PSAqZGVzdCkgeworICAgICAgICBzID0gKHVuc2lnbmVkIGNoYXIgKikgY2FsbG9jKDEsIG9sZW4pOworICAgICAgICAqZGVzdF9sZW4gPSBvbGVuOworICAgIH0KKyAgICBlbHNlCisgICAgICAgIHMgPSAqZGVzdDsKKworICAgIGlmICgqZGVzdF9sZW4gPCBvbGVuKSB7CisgICAgICAgIGlmICghYWxsb3dfcmVhbGxvYykKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAqZGVzdF9sZW4gPSBvbGVuOworICAgICAgICBpZiAoc25tcF9yZWFsbG9jKGRlc3QsIGRlc3RfbGVuKSkKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIG9wID0gczsKKyAgICB3aGlsZSAoaXAgLSBpbnB1dCA8IChpbnQpIGxlbikgeworICAgICAgICAqb3ArKyA9IFZBTDJIRVgoKCppcCA+PiA0KSAmIDB4Zik7CisgICAgICAgICpvcCsrID0gVkFMMkhFWCgqaXAgJiAweGYpOworICAgICAgICBpcCsrOworICAgIH0KKyAgICAqb3AgPSAnXDAnOworCisgICAgaWYgKHMgIT0gKmRlc3QpCisgICAgICAgICpkZXN0ID0gczsKKyAgICAqZGVzdF9sZW4gPSBvbGVuOworCisgICAgcmV0dXJuIG9sZW47CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG5ldHNubXBfYmluYXJ5X3RvX2hleCgpICovCisKKy8qKiBjb252ZXJ0cyBiaW5hcnkgdG8gaGV4aWRlY2ltYWwKKyAqCiAgKglAcGFyYW0gKmlucHV0CQlCaW5hcnkgZGF0YS4KICAqCUBwYXJhbSBsZW4JCUxlbmd0aCBvZiBiaW5hcnkgZGF0YS4KICAqCUBwYXJhbSAqKm91dHB1dAlOVUxMIHRlcm1pbmF0ZWQgc3RyaW5nIGVxdWl2YWxlbnQgaW4gaGV4LgpAQCAtMjg0LDIxICs0MDcsMTEgQEAKIHVfaW50CiBiaW5hcnlfdG9faGV4KGNvbnN0IHVfY2hhciAqIGlucHV0LCBzaXplX3QgbGVuLCBjaGFyICoqb3V0cHV0KQogewotICAgIHVfaW50ICAgICAgICAgICBvbGVuID0gKGxlbiAqIDIpICsgMTsKLSAgICBjaGFyICAgICAgICAgICAqcyA9IChjaGFyICopIGNhbGxvYygxLCBvbGVuKSwgKm9wID0gczsKLSAgICBjb25zdCB1X2NoYXIgICAqaXAgPSBpbnB1dDsKKyAgICBzaXplX3Qgb3V0X2xlbiA9IDA7CiAKKyAgICAqb3V0cHV0ID0gTlVMTDsgLyogd2lsbCBhbGxvYyBuZXcgYnVmZmVyICovCiAKLSAgICB3aGlsZSAoaXAgLSBpbnB1dCA8IChpbnQpIGxlbikgewotICAgICAgICAqb3ArKyA9IFZBTDJIRVgoKCppcCA+PiA0KSAmIDB4Zik7Ci0gICAgICAgICpvcCsrID0gVkFMMkhFWCgqaXAgJiAweGYpOwotICAgICAgICBpcCsrOwotICAgIH0KLSAgICAqb3AgPSAnXDAnOwotCi0gICAgKm91dHB1dCA9IHM7Ci0gICAgcmV0dXJuIG9sZW47Ci0KKyAgICByZXR1cm4gbmV0c25tcF9iaW5hcnlfdG9faGV4KCh1X2NoYXIqKilvdXRwdXQsICZvdXRfbGVuLCAxLCBpbnB1dCwgbGVuKTsKIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIGJpbmFyeV90b19oZXgoKSAqLwogCiAKQEAgLTMyMiwxMSArNDM1LDE0IEBACiBoZXhfdG9fYmluYXJ5Mihjb25zdCB1X2NoYXIgKiBpbnB1dCwgc2l6ZV90IGxlbiwgY2hhciAqKm91dHB1dCkKIHsKICAgICB1X2ludCAgICAgICAgICAgb2xlbiA9IChsZW4gLyAyKSArIChsZW4gJSAyKTsKLSAgICBjaGFyICAgICAgICAgICAqcyA9IChjaGFyICopIGNhbGxvYygxLCAob2xlbikgPyBvbGVuIDogMSksICpvcCA9IHM7CisgICAgY2hhciAgICAgICAgICAgKnMgPSBjYWxsb2MoMSwgb2xlbiA/IG9sZW4gOiAxKSwgKm9wID0gczsKICAgICBjb25zdCB1X2NoYXIgICAqaXAgPSBpbnB1dDsKIAogCiAgICAgKm91dHB1dCA9IE5VTEw7CisgICAgaWYgKCFzKQorICAgICAgICBnb3RvIGhleF90b19iaW5hcnkyX3F1aXQ7CisKICAgICAqb3AgPSAwOwogICAgIGlmIChsZW4gJSAyKSB7CiAgICAgICAgIGlmICghaXN4ZGlnaXQoKmlwKSkKQEAgLTMzNSw3ICs0NTEsNyBAQAogICAgICAgICBpcCsrOwogICAgIH0KIAotICAgIHdoaWxlIChpcCAtIGlucHV0IDwgKGludCkgbGVuKSB7CisgICAgd2hpbGUgKGlwIDwgaW5wdXQgKyBsZW4pIHsKICAgICAgICAgaWYgKCFpc3hkaWdpdCgqaXApKQogICAgICAgICAgICAgZ290byBoZXhfdG9fYmluYXJ5Ml9xdWl0OwogICAgICAgICAqb3AgPSBIRVgyVkFMKCppcCkgPDwgNDsKQEAgLTQyMyw3ICs1MzksNyBAQAogbmV0c25tcF9oZXhfdG9fYmluYXJ5KHVfY2hhciAqKiBidWYsIHNpemVfdCAqIGJ1Zl9sZW4sIHNpemVfdCAqIG9mZnNldCwKICAgICAgICAgICAgICAgICAgICAgICBpbnQgYWxsb3dfcmVhbGxvYywgY29uc3QgY2hhciAqaGV4LCBjb25zdCBjaGFyICpkZWxpbSkKIHsKLSAgICBpbnQgICAgICAgICAgICAgc3ViaWQgPSAwOworICAgIHVuc2lnbmVkIGludCAgICBzdWJpZCA9IDA7CiAgICAgY29uc3QgY2hhciAgICAgKmNwID0gaGV4OwogCiAgICAgaWYgKGJ1ZiA9PSBOVUxMIHx8IGJ1Zl9sZW4gPT0gTlVMTCB8fCBvZmZzZXQgPT0gTlVMTCB8fCBoZXggPT0gTlVMTCkgewpAQCAtNzU4LDE5ICs4NzQsMjMgQEAKIAogCiAvKioKLSAqIGNyZWF0ZSBhIG5ldyB0aW1lIG1hcmtlci4KLSAqIE5PVEU6IENhbGxlciBtdXN0IGZyZWUgdGltZSBtYXJrZXIgd2hlbiBubyBsb25nZXIgbmVlZGVkLgorICogQ3JlYXRlIGEgbmV3IHJlYWwtdGltZSBtYXJrZXIuCisgKgorICogXGRlcHJlY2F0ZWQgVXNlIG5ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIoKSBpbnN0ZWFkLgorICoKKyAqIEBub3RlIENhbGxlciBtdXN0IGZyZWUgdGltZSBtYXJrZXIgd2hlbiBubyBsb25nZXIgbmVlZGVkLgogICovCiBtYXJrZXJfdAogYXRpbWVfbmV3TWFya2VyKHZvaWQpCiB7CiAgICAgbWFya2VyX3QgICAgICAgIHBtID0gKG1hcmtlcl90KSBjYWxsb2MoMSwgc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7Ci0gICAgZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSBwbSwgMCk7CisgICAgZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSBwbSwgTlVMTCk7CiAgICAgcmV0dXJuIHBtOwogfQogCiAvKioKLSAqIHNldCBhIHRpbWUgbWFya2VyLgorICogU2V0IGEgdGltZSBtYXJrZXIgdG8gdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIHJlYWwtdGltZSBjbG9jay4KKyAqIFxkZXByZWNhdGVkIFVzZSBuZXRzbm1wX3NldF9tb25vdG9uaWNfbWFya2VyKCkgaW5zdGVhZC4KICAqLwogdm9pZAogYXRpbWVfc2V0TWFya2VyKG1hcmtlcl90IHBtKQpAQCAtNzc4LDQwICs4OTgsMTEzIEBACiAgICAgaWYgKCFwbSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSBwbSwgMCk7CisgICAgZ2V0dGltZW9mZGF5KChzdHJ1Y3QgdGltZXZhbCAqKSBwbSwgTlVMTCk7CiB9CiAKKy8qKgorICogUXVlcnkgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIG1vbm90b25pYyBjbG9jay4KKyAqCisgKiBSZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIGEgbW9ub3RvbmljIGNsb2NrIGlmIHN1Y2ggYSBjbG9jayBpcyBwcm92aWRlZCBieQorICogdGhlIG9wZXJhdGluZyBzeXN0ZW0gb3IgdGhlIHdhbGwgY2xvY2sgdGltZSBpZiBubyBzdWNoIGNsb2NrIGlzIHByb3ZpZGVkIGJ5CisgKiB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gQSBtb25vdG9uaWMgY2xvY2sgaXMgYSBjbG9jayB0aGF0IGlzIG5ldmVyIGFkanVzdGVkCisgKiBiYWNrd2FyZHMgYW5kIHRoYXQgcHJvY2VlZHMgYXQgdGhlIHNhbWUgcmF0ZSBhcyB3YWxsIGNsb2NrIHRpbWUuCisgKgorICogQHBhcmFtW291dF0gdHYgUG9pbnRlciB0byBtb25vdG9uaWMgY2xvY2sgdGltZS4KKyAqLwordm9pZCBuZXRzbm1wX2dldF9tb25vdG9uaWNfY2xvY2soc3RydWN0IHRpbWV2YWwqIHR2KQoreworI2lmIGRlZmluZWQoSEFWRV9DTE9DS19HRVRUSU1FKSAmJiBkZWZpbmVkKENMT0NLX01PTk9UT05JQykKKyAgICBzdHJ1Y3QgdGltZXNwZWMgdHM7CisgICAgaW50IHJlczsKKworICAgIHJlcyA9IGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDLCAmdHMpOworICAgIGlmIChyZXMgPj0gMCkgeworICAgICAgICB0di0+dHZfc2VjID0gdHMudHZfc2VjOworICAgICAgICB0di0+dHZfdXNlYyA9IHRzLnR2X25zZWMgLyAxMDAwOworICAgIH0gZWxzZSB7CisgICAgICAgIGdldHRpbWVvZmRheSh0diwgTlVMTCk7CisgICAgfQorI2VsaWYgZGVmaW5lZChXSU4zMikKKyAgICAvKgorICAgICAqIFdpbmRvd3M6IHJldHVybiB0aWNrIGNvdW50LiBOb3RlOiB0aGUgcmF0ZSBhdCB3aGljaCB0aGUgdGljayBjb3VudAorICAgICAqIGluY3JlYXNlcyBpcyBub3QgYWRqdXN0ZWQgYnkgdGhlIHRpbWUgc3luY2hyb25pemF0aW9uIGFsZ29yaXRobSwgc28KKyAgICAgKiBleHBlY3QgYW4gZXJyb3Igb2YgPD0gMTAwIHBwbSBmb3IgdGhlIHJhdGUgYXQgd2hpY2ggdGhpcyBjbG9jaworICAgICAqIGluY3JlYXNlcy4KKyAgICAgKi8KKyAgICB0eXBlZGVmIFVMT05HTE9ORyAoV0lOQVBJICogcGZHZXRUaWNrQ291bnQ2NCkodm9pZCk7CisgICAgc3RhdGljIGludCBzX2luaXRpYWxpemVkOworICAgIHN0YXRpYyBwZkdldFRpY2tDb3VudDY0IHNfcGZHZXRUaWNrQ291bnQ2NDsKKyAgICB1aW50NjRfdCBub3c2NDsKKworICAgIGlmICghc19pbml0aWFsaXplZCkgeworICAgICAgICBITU9EVUxFIGhLZXJuZWwzMiA9IEdldE1vZHVsZUhhbmRsZSgia2VybmVsMzIiKTsKKyAgICAgICAgc19wZkdldFRpY2tDb3VudDY0ID0KKyAgICAgICAgICAgIChwZkdldFRpY2tDb3VudDY0KSBHZXRQcm9jQWRkcmVzcyhoS2VybmVsMzIsICJHZXRUaWNrQ291bnQ2NCIpOworICAgICAgICBzX2luaXRpYWxpemVkID0gVFJVRTsKKyAgICB9CisKKyAgICBpZiAoc19wZkdldFRpY2tDb3VudDY0KSB7CisgICAgICAgIC8qIFdpbmRvd3MgVmlzdGEsIFdpbmRvd3MgMjAwOCBvciBhbnkgbGF0ZXIgV2luZG93cyB2ZXJzaW9uICovCisgICAgICAgIG5vdzY0ID0gKCpzX3BmR2V0VGlja0NvdW50NjQpKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogV2luZG93cyBYUCwgV2luZG93cyAyMDAzIG9yIGFueSBlYXJsaWVyIFdpbmRvd3MgdmVyc2lvbiAqLworICAgICAgICBzdGF0aWMgdWludDMyX3Qgc193cmFwcywgc19sYXN0OworICAgICAgICB1aW50MzJfdCBub3c7CisKKyAgICAgICAgbm93ID0gR2V0VGlja0NvdW50KCk7CisgICAgICAgIGlmIChub3cgPCBzX2xhc3QpCisgICAgICAgICAgICBzX3dyYXBzKys7CisgICAgICAgIHNfbGFzdCA9IG5vdzsKKyAgICAgICAgbm93NjQgPSAoKHVpbnQ2NF90KXNfd3JhcHMgPDwgMzIpIHwgbm93OworICAgIH0KKyAgICB0di0+dHZfc2VjID0gbm93NjQgLyAxMDAwOworICAgIHR2LT50dl91c2VjID0gKG5vdzY0ICUgMTAwMCkgKiAxMDAwOworI2Vsc2UKKyAgICAvKiBBdCBsZWFzdCBGcmVlQlNEIDQgZG9lc24ndCBwcm92aWRlIG1vbm90b25pYyBjbG9jayBzdXBwb3J0LiAqLworI3dhcm5pbmcgTm90IHN1cmUgaG93IHRvIHF1ZXJ5IGEgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGNsb2NrIG9uIHlvdXIgc3lzdGVtLiBcCitUaW1lcnMgd2lsbCBub3Qgd29yayBjb3JyZWN0bHkgaWYgdGhlIHN5c3RlbSBjbG9jayBpcyBhZGp1c3RlZCBieSBlLmcuIG50cGQuCisgICAgZ2V0dGltZW9mZGF5KHR2LCBOVUxMKTsKKyNlbmRpZgorfQorCisvKioKKyAqIFNldCBhIHRpbWUgbWFya2VyIHRvIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRoZSBtb25vdG9uaWMgY2xvY2suCisgKi8KK3ZvaWQKK25ldHNubXBfc2V0X21vbm90b25pY19tYXJrZXIobWFya2VyX3QgKnBtKQoreworICAgIGlmICghKnBtKQorICAgICAgICAqcG0gPSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCB0aW1ldmFsKSk7CisgICAgaWYgKCpwbSkKKyAgICAgICAgbmV0c25tcF9nZXRfbW9ub3RvbmljX2Nsb2NrKCpwbSk7Cit9CiAKIC8qKgogICogUmV0dXJucyB0aGUgZGlmZmVyZW5jZSAoaW4gbXNlYykgYmV0d2VlbiB0aGUgdHdvIG1hcmtlcnMKKyAqCisgKiBcZGVwcmVjYXRlZCBEb24ndCB1c2UgaW4gbmV3IGNvZGUuCiAgKi8KIGxvbmcKLWF0aW1lX2RpZmYobWFya2VyX3QgZmlyc3QsIG1hcmtlcl90IHNlY29uZCkKK2F0aW1lX2RpZmYoY29uc3RfbWFya2VyX3QgZmlyc3QsIGNvbnN0X21hcmtlcl90IHNlY29uZCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAqdHYxLCAqdHYyLCBkaWZmOworICAgIHN0cnVjdCB0aW1ldmFsIGRpZmY7CiAKLSAgICB0djEgPSAoc3RydWN0IHRpbWV2YWwgKikgZmlyc3Q7Ci0gICAgdHYyID0gKHN0cnVjdCB0aW1ldmFsICopIHNlY29uZDsKKyAgICBORVRTTk1QX1RJTUVSU1VCKChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSBzZWNvbmQsIChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSBmaXJzdCwgJmRpZmYpOwogCi0gICAgZGlmZi50dl9zZWMgPSB0djItPnR2X3NlYyAtIHR2MS0+dHZfc2VjIC0gMTsKLSAgICBkaWZmLnR2X3VzZWMgPSB0djItPnR2X3VzZWMgLSB0djEtPnR2X3VzZWMgKyAxMDAwMDAwOwotCi0gICAgcmV0dXJuIChkaWZmLnR2X3NlYyAqIDEwMDAgKyBkaWZmLnR2X3VzZWMgLyAxMDAwKTsKKyAgICByZXR1cm4gKGxvbmcpKGRpZmYudHZfc2VjICogMTAwMCArIGRpZmYudHZfdXNlYyAvIDEwMDApOwogfQogCiAvKioKICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIHVfbG9uZyBtc2VjKSBiZXR3ZWVuIHRoZSB0d28gbWFya2VycworICoKKyAqIFxkZXByZWNhdGVkIERvbid0IHVzZSBpbiBuZXcgY29kZS4KICAqLwogdV9sb25nCi11YXRpbWVfZGlmZihtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKQordWF0aW1lX2RpZmYoY29uc3RfbWFya2VyX3QgZmlyc3QsIGNvbnN0X21hcmtlcl90IHNlY29uZCkKIHsKLSAgICBzdHJ1Y3QgdGltZXZhbCAqdHYxLCAqdHYyLCBkaWZmOworICAgIHN0cnVjdCB0aW1ldmFsIGRpZmY7CiAKLSAgICB0djEgPSAoc3RydWN0IHRpbWV2YWwgKikgZmlyc3Q7Ci0gICAgdHYyID0gKHN0cnVjdCB0aW1ldmFsICopIHNlY29uZDsKLQotICAgIGRpZmYudHZfc2VjID0gdHYyLT50dl9zZWMgLSB0djEtPnR2X3NlYyAtIDE7Ci0gICAgZGlmZi50dl91c2VjID0gdHYyLT50dl91c2VjIC0gdHYxLT50dl91c2VjICsgMTAwMDAwMDsKKyAgICBORVRTTk1QX1RJTUVSU1VCKChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSBzZWNvbmQsIChjb25zdCBzdHJ1Y3QgdGltZXZhbCAqKSBmaXJzdCwgJmRpZmYpOwogCiAgICAgcmV0dXJuICgoKHVfbG9uZykgZGlmZi50dl9zZWMpICogMTAwMCArIGRpZmYudHZfdXNlYyAvIDEwMDApOwogfQpAQCAtODE5LDI5ICsxMDEyLDI2IEBACiAvKioKICAqIFJldHVybnMgdGhlIGRpZmZlcmVuY2UgKGluIHVfbG9uZyAxLzEwMHRoIHNlY3MpIGJldHdlZW4gdGhlIHR3byBtYXJrZXJzCiAgKiAoZnVuY3Rpb25hbGx5IHRoaXMgaXMgd2hhdCBzeXNVcFRpbWUgbmVlZHMpCisgKgorICogXGRlcHJlY2F0ZWQgRG9uJ3QgdXNlIGluIG5ldyBjb2RlLgogICovCiB1X2xvbmcKLXVhdGltZV9oZGlmZihtYXJrZXJfdCBmaXJzdCwgbWFya2VyX3Qgc2Vjb25kKQordWF0aW1lX2hkaWZmKGNvbnN0X21hcmtlcl90IGZpcnN0LCBjb25zdF9tYXJrZXJfdCBzZWNvbmQpCiB7Ci0gICAgc3RydWN0IHRpbWV2YWwgKnR2MSwgKnR2MiwgZGlmZjsKLSAgICB1X2xvbmcgICAgICAgICAgcmVzOworICAgIHN0cnVjdCB0aW1ldmFsIGRpZmY7CiAKLSAgICB0djEgPSAoc3RydWN0IHRpbWV2YWwgKikgZmlyc3Q7Ci0gICAgdHYyID0gKHN0cnVjdCB0aW1ldmFsICopIHNlY29uZDsKLQotICAgIGRpZmYudHZfc2VjID0gdHYyLT50dl9zZWMgLSB0djEtPnR2X3NlYyAtIDE7Ci0gICAgZGlmZi50dl91c2VjID0gdHYyLT50dl91c2VjIC0gdHYxLT50dl91c2VjICsgMTAwMDAwMDsKLQotICAgIHJlcyA9ICgodV9sb25nKSBkaWZmLnR2X3NlYykgKiAxMDAgKyBkaWZmLnR2X3VzZWMgLyAxMDAwMDsKLSAgICByZXR1cm4gcmVzOworICAgIE5FVFNOTVBfVElNRVJTVUIoKGNvbnN0IHN0cnVjdCB0aW1ldmFsICopIHNlY29uZCwgKGNvbnN0IHN0cnVjdCB0aW1ldmFsICopIGZpcnN0LCAmZGlmZik7CisgICAgcmV0dXJuICgodV9sb25nKSBkaWZmLnR2X3NlYykgKiAxMDAgKyBkaWZmLnR2X3VzZWMgLyAxMDAwMDsKIH0KIAogLyoqCi0gKiBUZXN0OiBIYXMgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpIGV4Y2VlZGVkIGN1cnJlbnQgdGltZSAoaW4gbXNlYykgPworICogVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgPwogICogUmV0dXJucyAwIGlmIHRlc3QgZmFpbHMgb3IgY2Fubm90IGJlIHRlc3RlZCAobm8gbWFya2VyKS4KKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoKSBpbnN0ZWFkLgogICovCiBpbnQKLWF0aW1lX3JlYWR5KG1hcmtlcl90IHBtLCBpbnQgZGVsdGFUKQorYXRpbWVfcmVhZHkoY29uc3RfbWFya2VyX3QgcG0sIGludCBkZWx0YV9tcykKIHsKICAgICBtYXJrZXJfdCAgICAgICAgbm93OwogICAgIGxvbmcgICAgICAgICAgICBkaWZmOwpAQCAtODUyLDE4ICsxMDQyLDIxIEBACiAKICAgICBkaWZmID0gYXRpbWVfZGlmZihwbSwgbm93KTsKICAgICBmcmVlKG5vdyk7Ci0gICAgaWYgKGRpZmYgPCBkZWx0YVQpCisgICAgaWYgKGRpZmYgPCBkZWx0YV9tcykKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gMTsKIH0KIAorI2lmbmRlZiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VBVElNRV9SRUFEWQogLyoqCi0gKiBUZXN0OiBIYXMgKG1hcmtlZCB0aW1lIHBsdXMgZGVsdGEpIGV4Y2VlZGVkIGN1cnJlbnQgdGltZSAoaW4gbXNlYykgPworICogVGVzdDogSGFzIChtYXJrZWQgdGltZSBwbHVzIGRlbHRhKSBleGNlZWRlZCBjdXJyZW50IHRpbWUgPwogICogUmV0dXJucyAwIGlmIHRlc3QgZmFpbHMgb3IgY2Fubm90IGJlIHRlc3RlZCAobm8gbWFya2VyKS4KKyAqCisgKiBcZGVwcmVjYXRlZCBVc2UgbmV0c25tcF9yZWFkeV9tb25vdG9uaWMoKSBpbnN0ZWFkLgogICovCiBpbnQKLXVhdGltZV9yZWFkeShtYXJrZXJfdCBwbSwgdW5zaWduZWQgaW50IGRlbHRhVCkKK3VhdGltZV9yZWFkeShjb25zdF9tYXJrZXJfdCBwbSwgdW5zaWduZWQgaW50IGRlbHRhX21zKQogewogICAgIG1hcmtlcl90ICAgICAgICBub3c7CiAgICAgdV9sb25nICAgICAgICAgIGRpZmY7CkBAIC04NzQsMTEgKzEwNjcsMzggQEAKIAogICAgIGRpZmYgPSB1YXRpbWVfZGlmZihwbSwgbm93KTsKICAgICBmcmVlKG5vdyk7Ci0gICAgaWYgKGRpZmYgPCBkZWx0YVQpCisgICAgaWYgKGRpZmYgPCBkZWx0YV9tcykKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gMTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX0ZFQVRVUkVfUkVNT1ZFX1VBVElNRV9SRUFEWSAqLworCisvKioKKyAqIElzIHRoZSBjdXJyZW50IHRpbWUgcGFzdCAobWFya2VkIHRpbWUgcGx1cyBkZWx0YSkgPworICoKKyAqIEBwYXJhbVtpbl0gcG0gUG9pbnRlciB0byBtYXJrZWQgdGltZSBhcyBvYnRhaW5lZCB2aWEKKyAqICAgbmV0c25tcF9zZXRfbW9ub3RvbmljX21hcmtlcigpLgorICogQHBhcmFtW2luXSBkZWx0YV9tcyBUaW1lIGRlbHRhIGluIG1pbGxpc2Vjb25kcy4KKyAqCisgKiBAcmV0dXJuIHBtICE9IE5VTEwgJiYgbm93ID49ICgqcG0gKyBkZWx0YV9tcykKKyAqLworaW50CituZXRzbm1wX3JlYWR5X21vbm90b25pYyhjb25zdF9tYXJrZXJfdCBwbSwgaW50IGRlbHRhX21zKQoreworICAgIHN0cnVjdCB0aW1ldmFsICBub3csIGRpZmYsIGRlbHRhOworCisgICAgbmV0c25tcF9hc3NlcnQoZGVsdGFfbXMgPj0gMCk7CisgICAgaWYgKHBtKSB7CisgICAgICAgIG5ldHNubXBfZ2V0X21vbm90b25pY19jbG9jaygmbm93KTsKKyAgICAgICAgTkVUU05NUF9USU1FUlNVQigmbm93LCAoY29uc3Qgc3RydWN0IHRpbWV2YWwgKikgcG0sICZkaWZmKTsKKyAgICAgICAgZGVsdGEudHZfc2VjID0gZGVsdGFfbXMgLyAxMDAwOworICAgICAgICBkZWx0YS50dl91c2VjID0gKGRlbHRhX21zICUgMTAwMCkgKiAxMDAwVUw7CisgICAgICAgIHJldHVybiB0aW1lcmNtcCgmZGlmZiwgJmRlbHRhLCA+PSkgPyBUUlVFIDogRkFMU0U7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEZBTFNFOworICAgIH0KK30KIAogCiAgICAgICAgIC8qCkBAIC04ODYsMTAgKzExMDYsMTIgQEAKICAgICAgICAgICovCiAKIC8qKgotICogUmV0dXJuIHRoZSBudW1iZXIgb2YgdGltZVRpY2tzIHNpbmNlIHRoZSBnaXZlbiBtYXJrZXIgCisgKiBSZXR1cm4gdGhlIG51bWJlciBvZiB0aW1lVGlja3Mgc2luY2UgdGhlIGdpdmVuIG1hcmtlcgorICoKKyAqIFxkZXByZWNhdGVkIERvbid0IHVzZSBpbiBuZXcgY29kZS4KICAqLwogaW50Ci1tYXJrZXJfdHRpY2tzKG1hcmtlcl90IHBtKQorbWFya2VyX3R0aWNrcyhjb25zdF9tYXJrZXJfdCBwbSkKIHsKICAgICBpbnQgICAgICAgICAgICAgcmVzOwogICAgIG1hcmtlcl90ICAgICAgICBub3cgPSBhdGltZV9uZXdNYXJrZXIoKTsKQEAgLTg5OSwxMSArMTEyMSwxNiBAQAogICAgIHJldHVybiByZXMgLyAxMDsgICAgICAgICAgICAvKiBhdGltZV9kaWZmIHdvcmtzIGluIG1zZWMsIG5vdCBjc2VjICovCiB9CiAKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9USU1FVkFMX1RUSUNLUworLyoqCisgKiBcZGVwcmVjYXRlZCBEb24ndCB1c2UgaW4gbmV3IGNvZGUuCisgKi8KIGludAotdGltZXZhbF90dGlja3Moc3RydWN0IHRpbWV2YWwgKnR2KQordGltZXZhbF90dGlja3MoY29uc3Qgc3RydWN0IHRpbWV2YWwgKnR2KQogewotICAgIHJldHVybiBtYXJrZXJfdHRpY2tzKChtYXJrZXJfdCkgdHYpOworICAgIHJldHVybiBtYXJrZXJfdHRpY2tzKChjb25zdF9tYXJrZXJfdCkgdHYpOwogfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVElNRVZBTF9UVElDS1MgKi8KIAogLyoqCiAgKiBOb24gV2luZG93czogIFJldHVybnMgYSBwb2ludGVyIHRvIHRoZSBkZXNpcmVkIGVudmlyb25tZW50IHZhcmlhYmxlICAKQEAgLTk2Miw4ICsxMTg5LDcgQEAKICAgICAgICAgICAgIE5VTEwsICAgICAgICAgICAgICAgLyogSnVzdCBnZXQgdGhlIHNpemUgKi8KICAgICAgICAgICAgICZrZXlfdmFsdWVfc2l6ZSkgPT0gRVJST1JfU1VDQ0VTUykgewogCi0gICAgICAgIGlmIChrZXlfdmFsdWUpCi0gICAgICAgICAgU05NUF9GUkVFKGtleV92YWx1ZSk7CisgICAgICAgIFNOTVBfRlJFRShrZXlfdmFsdWUpOwogCiAgICAgICAgIC8qIEFsbG9jYXRlIG1lbW9yeSBuZWVkZWQgKzEgdG8gYWxsb3cgUmVnUXVlcnlWYWx1ZUV4QSB0byBOVUxMIHRlcm1pbmF0ZSB0aGUKICAgICAgICAgICogc3RyaW5nIGRhdGEgaW4gcmVnaXN0cnkgaXMgbWlzc2luZyBvbmUgKHdoaWNoIGlzIHVubGlrZWx5KS4KQEAgLTEwMDQsOCArMTIzMCw3IEBACiAgICAgICAgICAgICBOVUxMLCAgICAgICAgICAgICAgIC8qIEp1c3QgZ2V0IHRoZSBzaXplICovCiAgICAgICAgICAgICAma2V5X3ZhbHVlX3NpemUpID09IEVSUk9SX1NVQ0NFU1MpIHsKIAotICAgICAgICBpZiAoa2V5X3ZhbHVlKQotICAgICAgICAgIFNOTVBfRlJFRShrZXlfdmFsdWUpOworICAgICAgICBTTk1QX0ZSRUUoa2V5X3ZhbHVlKTsKIAogICAgICAgICAvKiBBbGxvY2F0ZSBtZW1vcnkgbmVlZGVkICsxIHRvIGFsbG93IFJlZ1F1ZXJ5VmFsdWVFeEEgdG8gTlVMTCB0ZXJtaW5hdGUgdGhlCiAgICAgICAgICAqIHN0cmluZyBkYXRhIGluIHJlZ2lzdHJ5IGlzIG1pc3Npbmcgb25lICh3aGljaCBpcyB1bmxpa2VseSkuCkBAIC0xMDg3LDMgKzEzMTIsNjUgQEAKIAogICAgIHJldHVybiAwOwogfQorCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RSSU5HX1RJTUVfVE9fU0VDUworLyoqCisgKiBUYWtlcyBhIHRpbWUgc3RyaW5nIGxpa2UgNGggYW5kIGNvbnZlcnRzIGl0IHRvIHNlY29uZHMuCisgKiBUaGUgc3RyaW5nIHRpbWUgZ2l2ZW4gbWF5IGVuZCBpbiAncycgZm9yIHNlY29uZHMgKHRoZSBkZWZhdWx0CisgKiBhbnl3YXkgaWYgbm8gc3VmZml4IGlzIHNwZWNpZmllZCksCisgKiAnbScgZm9yIG1pbnV0ZXMsICdoJyBmb3IgaG91cnMsICdkJyBmb3IgZGF5cywgb3IgJ3cnIGZvciB3ZWVrcy4gIFRoZQorICogdXBwZXIgY2FzZSB2ZXJzaW9ucyBhcmUgYWxzbyBhY2NlcHRlZC4KKyAqCisgKiBAcGFyYW0gdGltZV9zdHJpbmcgVGhlIHRpbWUgc3RyaW5nIHRvIGNvbnZlcnQuCisgKgorICogQHJldHVybiBzZWNvbmRzIGNvbnZlcnRlZCBmcm9tIHRoZSBzdHJpbmcKKyAqIEByZXR1cm4gLTEgIDogb24gZmFpbHVyZQorICovCitpbnQKK25ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2Vjcyhjb25zdCBjaGFyICp0aW1lX3N0cmluZykgeworICAgIGludCBzZWNzID0gLTE7CisgICAgaWYgKCF0aW1lX3N0cmluZyB8fCAhdGltZV9zdHJpbmdbMF0pCisgICAgICAgIHJldHVybiBzZWNzOworCisgICAgc2VjcyA9IGF0b2kodGltZV9zdHJpbmcpOworCisgICAgaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpdGltZV9zdHJpbmdbc3RybGVuKHRpbWVfc3RyaW5nKS0xXSkpCisgICAgICAgIHJldHVybiBzZWNzOyAvKiBubyBsZXR0ZXIgc3BlY2lmaWVkLCBpdCdzIGFscmVhZHkgaW4gc2Vjb25kcyAqLworICAgIAorICAgIHN3aXRjaCAodGltZV9zdHJpbmdbc3RybGVuKHRpbWVfc3RyaW5nKS0xXSkgeworICAgIGNhc2UgJ3MnOgorICAgIGNhc2UgJ1MnOgorICAgICAgICAvKiBhbHJlYWR5IGluIHNlY29uZHMgKi8KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdtJzoKKyAgICBjYXNlICdNJzoKKyAgICAgICAgc2VjcyA9IHNlY3MgKiA2MDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdoJzoKKyAgICBjYXNlICdIJzoKKyAgICAgICAgc2VjcyA9IHNlY3MgKiA2MCAqIDYwOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgJ2QnOgorICAgIGNhc2UgJ0QnOgorICAgICAgICBzZWNzID0gc2VjcyAqIDYwICogNjAgKiAyNDsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlICd3JzoKKyAgICBjYXNlICdXJzoKKyAgICAgICAgc2VjcyA9IHNlY3MgKiA2MCAqIDYwICogMjQgKiA3OworICAgICAgICBicmVhazsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0aW1lIHN0cmluZyAlcyBjb250YWlucyBhbiBpbnZhbGlkIHN1ZmZpeCBsZXR0ZXJcbiIsCisgICAgICAgICAgICAgICAgIHRpbWVfc3RyaW5nKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzdHJpbmdfdGltZV90b19zZWNzIiwgIkNvbnZlcnRlZCB0aW1lIHN0cmluZyAlcyB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICB0aW1lX3N0cmluZywgc2VjcykpOworICAgIHJldHVybiBzZWNzOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfU1RSSU5HX1RJTUVfVE9fU0VDUyAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcEFBTDVQVkNEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWM2OWExCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBBQUw1UFZDRG9tYWluLmMKQEAgLTAsMCArMSwzNzQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcEFBTDVQVkNEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGF0bS5oPgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKKworb2lkIG5ldHNubXBfQUFMNVBWQ0RvbWFpblsxMF0gPSB7IE5FVFNOTVBfRU5URVJQUklTRV9NSUIsIDMsIDMsIDMgfTsKK3N0YXRpYyBuZXRzbm1wX3Rkb21haW4gYWFsNXB2Y0RvbWFpbjsKKworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCisgKi8KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqdG8gPSBOVUxMOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgKikgZGF0YTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjICopIHQtPmRhdGE7CisgICAgfQorICAgIGlmICh0byA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBzdHJkdXAoIkFBTDUgUFZDOiB1bmtub3duIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2hhciB0bXBbNjRdOworICAgICAgICBzcHJpbnRmKHRtcCwgIkFBTDUgUFZDOiAlaGQuJWhkLiVkIiwgdG8tPnNhcF9hZGRyLml0ZiwKKyAgICAgICAgICAgICAgICB0by0+c2FwX2FkZHIudnBpLCB0by0+c2FwX2FkZHIudmNpKTsKKyAgICAgICAgcmV0dXJuIHN0cmR1cCh0bXApOworICAgIH0KK30KKworCisKKy8qCisgKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCisgKi8KKworc3RhdGljIGludAorbmV0c25tcF9hYWw1cHZjX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKwl3aGlsZSAocmMgPCAwKSB7CisJICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCBOVUxMKTsKKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQlicmVhazsKKwkgICAgfQorCX0KKworICAgICAgICBpZiAocmMgPj0gMCkgeworICAgICAgICAgICAgREVCVUdJRigibmV0c25tcF9hYWw1cHZjIikgeworICAgICAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfYWFsNXB2Y19mbXRhZGRyKHQsIE5VTEwsIDApOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWN2IG9uIGZkICVkIGdvdCAlZCBieXRlcyAoZnJvbSAlcylcbiIsIHQtPnNvY2ssCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmMsIHN0cikpOworICAgICAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAicmVjdiBvbiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsIAorCQkJdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICB9CisgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfYWFsNXB2Y19zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIHN0cnVjdCBzb2NrYWRkciAqdG8gPSBOVUxMOworCisgICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgorICAgICAgICAqb2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICgqb3BhcXVlKTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgKHQtPmRhdGEpOworICAgIH0KKworICAgIGlmICh0byAhPSBOVUxMICYmIHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgREVCVUdJRigibmV0c25tcF9hYWw1cHZjIikgeworICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHIoTlVMTCwgKHZvaWQgKil0bywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJzZW5kICVkIGJ5dGVzIGZyb20gJXAgdG8gJXMgb24gZmQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHN0ciwgdC0+c29jaykpOworICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICB9CisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX2FhbDVwdmNfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBpZiAodC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiY2xvc2UgZmQgJWRcbiIsIHQtPnNvY2spKTsKKyNpZm5kZWYgSEFWRV9DTE9TRVNPQ0tFVAorICAgICAgICByYyA9IGNsb3NlKHQtPnNvY2spOworI2Vsc2UKKyAgICAgICAgcmMgPSBjbG9zZXNvY2tldCh0LT5zb2NrKTsKKyNlbmRpZgorICAgICAgICB0LT5zb2NrID0gLTE7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKKy8qCisgKiBPcGVuIGFuIEFBTDUgUFZDIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwgCisgKiBOU0FQIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgTlNBUCB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2F0bXB2YyAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKworI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAobG9jYWwpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2FwX2ZhbWlseSAhPSBBRl9BVE1QVkMpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmICh0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdJRigibmV0c25tcF9hYWw1cHZjIikgeworICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2FhbDVwdmNfZm10YWRkcihOVUxMLCAodm9pZCAqKSBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9hYWw1cHZjIiwgIm9wZW4gJXMgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCBzdHIpKTsKKyAgICAgICAgZnJlZShzdHIpOworICAgIH0KKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBfQUFMNVBWQ0RvbWFpbjsKKyAgICB0LT5kb21haW5fbGVuZ3RoID0KKyAgICAgICAgc2l6ZW9mKG5ldHNubXBfQUFMNVBWQ0RvbWFpbikgLyBzaXplb2YobmV0c25tcF9BQUw1UFZDRG9tYWluWzBdKTsKKworICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfQVRNUFZDLCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsInNvY2tldCBmYWlsZWQgKCVzKVxuIixzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiZmQgJWQgb3BlbmVkXG4iLCB0LT5zb2NrKSk7CisKKyAgICB7CisgICAgICAgIC8qCisgICAgICAgICAqIFNldCB1cCB0aGUgUU9TIHBhcmFtZXRlcnMuCisgICAgICAgICAqLworCisgICAgICAgIHN0cnVjdCBhdG1fcW9zIHFvcyA9IHsgMCB9OworICAgICAgICBxb3MuYWFsID0gQVRNX0FBTDU7CisgICAgICAgIHFvcy5yeHRwLnRyYWZmaWNfY2xhc3MgPSBBVE1fVUJSOworICAgICAgICBxb3Mucnh0cC5tYXhfc2R1ID0gU05NUF9NQVhfTEVOOyAgICAvKiAgSG1tIC0tIHRoaXMgaXMgYSBiaXQgc21hbGw/ICAqLworICAgICAgICBxb3MudHh0cCA9IHFvcy5yeHRwOworCisgICAgICAgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9BVE0sIFNPX0FUTVFPUywgJnFvcywgc2l6ZW9mKHFvcykpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJzZXRzb2Nrb3B0IGZhaWxlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FhbDVwdmNfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobG9jYWwpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoOCk7CisgICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdC0+bG9jYWxbMF0gPSAoYWRkci0+c2FwX2FkZHIuaXRmICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5sb2NhbFsxXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPmxvY2FsWzJdID0gKGFkZHItPnNhcF9hZGRyLnZwaSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+bG9jYWxbM10gPSAoYWRkci0+c2FwX2FkZHIudnBpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5sb2NhbFs0XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweGZmMDAwMDAwKSA+PiAyNDsKKyAgICAgICAgdC0+bG9jYWxbNV0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMGZmMDAwMCkgPj4gMTY7CisgICAgICAgIHQtPmxvY2FsWzZdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMGZmMDApID4+IDg7CisgICAgICAgIHQtPmxvY2FsWzddID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMDAwZmYpID4+IDA7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDg7CisKKyAgICAgICAgaWYgKGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAorICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfYWFsNXB2YyIsICJiaW5kIGZhaWxlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBuZXRzbm1wX2FhbDVwdmNfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoOCk7CisgICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHQtPnJlbW90ZVswXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVsxXSA9IChhZGRyLT5zYXBfYWRkci5pdGYgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPnJlbW90ZVsyXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVszXSA9IChhZGRyLT5zYXBfYWRkci52cGkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPnJlbW90ZVs0XSA9IChhZGRyLT5zYXBfYWRkci52Y2kgJiAweGZmMDAwMDAwKSA+PiAyNDsKKyAgICAgICAgdC0+cmVtb3RlWzVdID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDBmZjAwMDApID4+IDE2OworICAgICAgICB0LT5yZW1vdGVbNl0gPSAoYWRkci0+c2FwX2FkZHIudmNpICYgMHgwMDAwZmYwMCkgPj4gODsKKyAgICAgICAgdC0+cmVtb3RlWzddID0gKGFkZHItPnNhcF9hZGRyLnZjaSAmIDB4MDAwMDAwZmYpID4+IDA7CisgICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSA4OworCisgICAgICAgIGlmIChjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpKSA8IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2FhbDVwdmMiLCAiY29ubmVjdCBmYWlsZWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgbmV0c25tcF9hYWw1cHZjX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfQorCisgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOworICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2F0bXB2YykpOworICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpOworCisgICAgLyoKKyAgICAgKiAxNi1iaXQgbGVuZ3RoIGZpZWxkIGluIHRoZSB0cmFpbGVyLCBubyBoZWFkZXJzLiAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gMHhmZmZmOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX2FhbDVwdmNfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF9hYWw1cHZjX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfYWFsNXB2Y19jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF9hYWw1cHZjX2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfYWFsNXB2Y19jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKKwkJCSAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIGFkZHI7CisKKyAgICBpZiAoc3RyID09IE5VTEwgfHwgKnN0ciA9PSAnXDAnKQorCXN0ciA9IGRlZmF1bHRfdGFyZ2V0OworCisgICAgaWYgKHN0ciAhPSBOVUxMKSB7CisgICAgICAgIGFkZHIuc2FwX2ZhbWlseSA9IEFGX0FUTVBWQzsKKworICAgICAgICBpZiAoc3NjYW5mKHN0ciwgIiVoZC4laGQuJWQiLCAmKGFkZHIuc2FwX2FkZHIuaXRmKSwKKyAgICAgICAgICAgICAgICAgICAmKGFkZHIuc2FwX2FkZHIudnBpKSwgJihhZGRyLnNhcF9hZGRyLnZjaSkpID09IDMpIHsKKyAgICAgICAgICAgIHJldHVybiBuZXRzbm1wX2FhbDVwdmNfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgICAgIH0gZWxzZSBpZiAoc3NjYW5mKHN0ciwgIiVoZC4lZCIsICYoYWRkci5zYXBfYWRkci52cGkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAmKGFkZHIuc2FwX2FkZHIudmNpKSkgPT0gMikgeworICAgICAgICAgICAgYWRkci5zYXBfYWRkci5pdGYgPSAwOworICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICAgICAgfSBlbHNlIGlmIChzc2NhbmYoc3RyLCAiJWQiLCAmKGFkZHIuc2FwX2FkZHIudmNpKSkgPT0gMSkgeworICAgICAgICAgICAgYWRkci5zYXBfYWRkci5pdGYgPSAwOworICAgICAgICAgICAgYWRkci5zYXBfYWRkci52cGkgPSAwOworICAgICAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9hYWw1cHZjX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMgYWRkcjsKKworICAgIGlmIChvX2xlbiA9PSA4KSB7CisgICAgICAgIGFkZHIuc2FwX2ZhbWlseSA9IEFGX0FUTVBWQzsKKyAgICAgICAgYWRkci5zYXBfYWRkci5pdGYgPSAob1swXSA8PCA4KSArIChvWzFdIDw8IDApOworICAgICAgICBhZGRyLnNhcF9hZGRyLnZwaSA9IChvWzJdIDw8IDgpICsgKG9bM10gPDwgMCk7CisgICAgICAgIGFkZHIuc2FwX2FkZHIudmNpID0KKwkgICAgKG9bNF0gPDwgMjQpICsgKG9bNV0gPDwgMTYpICsgKG9bNl0gPDwgOCkgKyAob1s3XSA8PCAwKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfYWFsNXB2Y190cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KKworCisKK3ZvaWQKK25ldHNubXBfYWFsNXB2Y19jdG9yKHZvaWQpCit7CisgICAgYWFsNXB2Y0RvbWFpbi5uYW1lID0gbmV0c25tcF9BQUw1UFZDRG9tYWluOworICAgIGFhbDVwdmNEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9BQUw1UFZDRG9tYWluKSAvIHNpemVvZihvaWQpOworICAgIGFhbDVwdmNEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMywgc2l6ZW9mKGNoYXIgKikpOworICAgIGFhbDVwdmNEb21haW4ucHJlZml4WzBdID0gImFhbDVwdmMiOworICAgIGFhbDVwdmNEb21haW4ucHJlZml4WzFdID0gInB2YyI7CisKKyAgICBhYWw1cHZjRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIGFhbDVwdmNEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfYWFsNXB2Y19jcmVhdGVfdHN0cmluZzsKKyAgICBhYWw1cHZjRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX2FhbDVwdmNfY3JlYXRlX29zdHJpbmc7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJmFhbDVwdmNEb21haW4pOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBBbGlhc0RvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNTBjYWQKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcEFsaWFzRG9tYWluLmMKQEAgLTAsMCArMSwxMTYgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wQWxpYXNEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKK29pZCBuZXRzbm1wX3NubXBBTElBU0RvbWFpbltdID0geyAxLDMsNiwxLDQsMSw4MDcyLDMsMyw3IH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIGFsaWFzRG9tYWluOworCisvKiBzaW1wbGUgc3RvcmFnZSBtZWNoYW5pc20gKi8KK3N0YXRpYyBuZXRzbm1wX2RhdGFfbGlzdCAqYWxpYXNfbWVtb3J5ID0gTlVMTDsKKworI2lmZGVmIEhBVkVfRE1BTExPQ19ICitzdGF0aWMgdm9pZCBmcmVlX3dyYXBwZXIodm9pZCAqIHApCit7CisgICAgZnJlZShwKTsKK30KKyNlbHNlCisjZGVmaW5lIGZyZWVfd3JhcHBlciBmcmVlCisjZW5kaWYKKworLyogQW4gYWxpYXMgcGFyc2VyICovCit2b2lkCitwYXJzZV9hbGlhc19jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmxpbmUpIHsKKyAgICBjaGFyIGFsaWFzbmFtZVtTUFJJTlRfTUFYX0xFTl07CisgICAgY2hhciB0cmFuc3BvcnRkZWZbU1BSSU5UX01BWF9MRU5dOworICAgIC8qIGNvcHkgdGhlIGZpcnN0IHdvcmQgKHRoZSBhbGlhcykgb3V0IGFuZCB0aGVuIGFzc3VtZSB0aGUgcmVzdCBpcworICAgICAgIHRyYW5zcG9ydCAqLworICAgIGxpbmUgPSBjb3B5X253b3JkKGxpbmUsIGFsaWFzbmFtZSwgc2l6ZW9mKGFsaWFzbmFtZSkpOworICAgIGxpbmUgPSBjb3B5X253b3JkKGxpbmUsIHRyYW5zcG9ydGRlZiwgc2l6ZW9mKHRyYW5zcG9ydGRlZikpOworICAgIGlmIChsaW5lKQorICAgICAgICBjb25maWdfcGVycm9yKCJtb3JlIGRhdGEgdGhhbiBleHBlY3RlZCIpOworICAgIG5ldHNubXBfZGF0YV9saXN0X2FkZF9ub2RlKCZhbGlhc19tZW1vcnksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jcmVhdGVfZGF0YV9saXN0KGFsaWFzbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZHVwKHRyYW5zcG9ydGRlZiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZmcmVlX3dyYXBwZXIpKTsKK30KKwordm9pZAorZnJlZV9hbGlhc19jb25maWcodm9pZCkgeworICAgIG5ldHNubXBfZnJlZV9hbGxfbGlzdF9kYXRhKGFsaWFzX21lbW9yeSk7CisgICAgYWxpYXNfbWVtb3J5ID0gTlVMTDsKK30KKworLyoKKyAqIE9wZW4gYSBBTElBUy1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfYWxpYXNfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisJCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBjb25zdCBjaGFyICphbGlhc2RhdGE7CisKKyAgICBhbGlhc2RhdGEgPSAoY29uc3QgY2hhciopbmV0c25tcF9nZXRfbGlzdF9kYXRhKGFsaWFzX21lbW9yeSwgc3RyKTsKKyAgICBpZiAoIWFsaWFzZGF0YSkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiTm8gYWxpYXMgZm91bmQgZm9yICVzXG4iLCBzdHIpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICByZXR1cm4gbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydChhbGlhc2RhdGEsbG9jYWwsZGVmYXVsdF90YXJnZXQpOworfQorCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9hbGlhc19jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIm1ha2Ugb3N0cmluZ1xuIik7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK25ldHNubXBfYWxpYXNfY3Rvcih2b2lkKQoreworICAgIGFsaWFzRG9tYWluLm5hbWUgPSBuZXRzbm1wX3NubXBBTElBU0RvbWFpbjsKKyAgICBhbGlhc0RvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3NubXBBTElBU0RvbWFpbikgLyBzaXplb2Yob2lkKTsKKyAgICBhbGlhc0RvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhciAqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOworICAgIGFsaWFzRG9tYWluLnByZWZpeFswXSA9ICJhbGlhcyI7CisKKyAgICBhbGlhc0RvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICBhbGlhc0RvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9hbGlhc19jcmVhdGVfdHN0cmluZzsKKyAgICBhbGlhc0RvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9hbGlhc19jcmVhdGVfb3N0cmluZzsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmYWxpYXNEb21haW4pOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAiYWxpYXMiLCBwYXJzZV9hbGlhc19jb25maWcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJlZV9hbGlhc19jb25maWcsICJOQU1FIFRSQU5TUE9SVF9ERUZJTklUSU9OIik7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcENhbGxiYWNrRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUwMThiOAotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wQ2FsbGJhY2tEb21haW4uYwpAQCAtMCwwICsxLDYyOCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wQ2FsbGJhY2tEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3dpbnBpcGUuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19VTl9ICisjaW5jbHVkZSA8c3lzL3VuLmg+CisjZW5kaWYKKyNpZiBIQVZFX0lPX0gKKyNpbmNsdWRlIDxpby5oPgorI2VuZGlmCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC91dGlsaXRpZXMuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2NsaWVudC5oPgorCisjaWZuZGVmIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTgorI2RlZmluZSBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4gIDUKKyNlbmRpZgorCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQ0FMTEJBQ0tfRE9NQUlOCisKK3N0YXRpYyBuZXRzbm1wX3RyYW5zcG9ydF9saXN0ICp0cmxpc3QgPSBOVUxMOworCitzdGF0aWMgaW50ICAgICAgY2FsbGJhY2tfY291bnQgPSAwOworCit0eXBlZGVmIHN0cnVjdCBjYWxsYmFja19oYWNrX3MgeworICAgIHZvaWQgICAgICAgICAgICpvcmlnX3RyYW5zcG9ydF9kYXRhOworICAgIG5ldHNubXBfcGR1ICAgICpwZHU7Cit9IGNhbGxiYWNrX2hhY2s7CisKK3R5cGVkZWYgc3RydWN0IGNhbGxiYWNrX3F1ZXVlX3MgeworICAgIGludCAgICAgICAgICAgICBjYWxsYmFja19udW07CisgICAgbmV0c25tcF9jYWxsYmFja19wYXNzICppdGVtOworICAgIHN0cnVjdCBjYWxsYmFja19xdWV1ZV9zICpuZXh0LCAqcHJldjsKK30gY2FsbGJhY2tfcXVldWU7CisKK2NhbGxiYWNrX3F1ZXVlICp0aGVxdWV1ZTsKKworc3RhdGljIG5ldHNubXBfdHJhbnNwb3J0ICoKK2ZpbmRfdHJhbnNwb3J0X2Zyb21fY2FsbGJhY2tfbnVtKGludCBudW0pCit7CisgICAgc3RhdGljIG5ldHNubXBfdHJhbnNwb3J0X2xpc3QgKnB0cjsKKyAgICBmb3IgKHB0ciA9IHRybGlzdDsgcHRyOyBwdHIgPSBwdHItPm5leHQpCisgICAgICAgIGlmICgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSBwdHItPnRyYW5zcG9ydC0+ZGF0YSktPgorICAgICAgICAgICAgY2FsbGJhY2tfbnVtID09IG51bSkKKyAgICAgICAgICAgIHJldHVybiBwdHItPnRyYW5zcG9ydDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHZvaWQKK2NhbGxiYWNrX2RlYnVnX3BkdShjb25zdCBjaGFyICpvdXJzdHJpbmcsIG5ldHNubXBfcGR1ICpwZHUpCit7CisgICAgbmV0c25tcF92YXJpYWJsZV9saXN0ICp2YjsKKyAgICBpbnQgICAgICAgICAgICAgaSA9IDE7CisgICAgREVCVUdNU0dUTCgob3Vyc3RyaW5nLAorICAgICAgICAgICAgICAgICJQRFU6IGNvbW1hbmQgPSAlZCwgZXJyc3RhdCA9ICVsZCwgZXJyaW5kZXggPSAlbGRcbiIsCisgICAgICAgICAgICAgICAgcGR1LT5jb21tYW5kLCBwZHUtPmVycnN0YXQsIHBkdS0+ZXJyaW5kZXgpKTsKKyAgICBmb3IgKHZiID0gcGR1LT52YXJpYWJsZXM7IHZiOyB2YiA9IHZiLT5uZXh0X3ZhcmlhYmxlKSB7CisgICAgICAgIERFQlVHTVNHVEwoKG91cnN0cmluZywgIiAgdmFyICVkOiIsIGkrKykpOworICAgICAgICBERUJVR01TR1ZBUigob3Vyc3RyaW5nLCB2YikpOworICAgICAgICBERUJVR01TRygob3Vyc3RyaW5nLCAiXG4iKSk7CisgICAgfQorfQorCit2b2lkCitjYWxsYmFja19wdXNoX3F1ZXVlKGludCBudW0sIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqaXRlbSkKK3sKKyAgICBjYWxsYmFja19xdWV1ZSAqbmV3aXRlbSA9IFNOTVBfTUFMTE9DX1RZUEVERUYoY2FsbGJhY2tfcXVldWUpOworICAgIGNhbGxiYWNrX3F1ZXVlICpwdHI7CisKKyAgICBpZiAobmV3aXRlbSA9PSBOVUxMKQorICAgICAgICByZXR1cm47CisgICAgbmV3aXRlbS0+Y2FsbGJhY2tfbnVtID0gbnVtOworICAgIG5ld2l0ZW0tPml0ZW0gPSBpdGVtOworICAgIGlmICh0aGVxdWV1ZSkgeworICAgICAgICBmb3IgKHB0ciA9IHRoZXF1ZXVlOyBwdHIgJiYgcHRyLT5uZXh0OyBwdHIgPSBwdHItPm5leHQpIHsKKyAgICAgICAgfQorICAgICAgICBwdHItPm5leHQgPSBuZXdpdGVtOworICAgICAgICBuZXdpdGVtLT5wcmV2ID0gcHRyOworICAgIH0gZWxzZSB7CisgICAgICAgIHRoZXF1ZXVlID0gbmV3aXRlbTsKKyAgICB9CisgICAgREVCVUdJRigiZHVtcF9zZW5kX2NhbGxiYWNrX3RyYW5zcG9ydCIpIHsKKyAgICAgICAgY2FsbGJhY2tfZGVidWdfcGR1KCJkdW1wX3NlbmRfY2FsbGJhY2tfdHJhbnNwb3J0IiwgaXRlbS0+cGR1KTsKKyAgICB9Cit9CisKK25ldHNubXBfY2FsbGJhY2tfcGFzcyAqCitjYWxsYmFja19wb3BfcXVldWUoaW50IG51bSkKK3sKKyAgICBuZXRzbm1wX2NhbGxiYWNrX3Bhc3MgKmNwOworICAgIGNhbGxiYWNrX3F1ZXVlICpwdHI7CisKKyAgICBmb3IgKHB0ciA9IHRoZXF1ZXVlOyBwdHI7IHB0ciA9IHB0ci0+bmV4dCkgeworICAgICAgICBpZiAocHRyLT5jYWxsYmFja19udW0gPT0gbnVtKSB7CisgICAgICAgICAgICBpZiAocHRyLT5wcmV2KSB7CisgICAgICAgICAgICAgICAgcHRyLT5wcmV2LT5uZXh0ID0gcHRyLT5uZXh0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB0aGVxdWV1ZSA9IHB0ci0+bmV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChwdHItPm5leHQpIHsKKyAgICAgICAgICAgICAgICBwdHItPm5leHQtPnByZXYgPSBwdHItPnByZXY7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjcCA9IHB0ci0+aXRlbTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShwdHIpOworICAgICAgICAgICAgREVCVUdJRigiZHVtcF9yZWN2X2NhbGxiYWNrX3RyYW5zcG9ydCIpIHsKKyAgICAgICAgICAgICAgICBjYWxsYmFja19kZWJ1Z19wZHUoImR1bXBfcmVjdl9jYWxsYmFja190cmFuc3BvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjcC0+cGR1KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiBjcDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK2NoYXIgKgorbmV0c25tcF9jYWxsYmFja19mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXTsKKyAgICBuZXRzbm1wX2NhbGxiYWNrX2luZm8gKm15c3R1ZmY7CisKKyAgICBpZiAoIXQpCisgICAgICAgIHJldHVybiBzdHJkdXAoImNhbGxiYWNrOiB1bmtub3duIik7CisKKyAgICBteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOworCisgICAgaWYgKCFteXN0dWZmKQorICAgICAgICByZXR1cm4gc3RyZHVwKCJjYWxsYmFjazogdW5rbm93biIpOworCisgICAgc25wcmludGYoYnVmLCBTUFJJTlRfTUFYX0xFTiwgImNhbGxiYWNrOiAlZCBvbiBmZCAlZCIsCisgICAgICAgICAgICAgbXlzdHVmZi0+Y2FsbGJhY2tfbnVtLCBteXN0dWZmLT5waXBlZmRzWzBdKTsKKyAgICByZXR1cm4gc3RyZHVwKGJ1Zik7Cit9CisKKworCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK2ludAorbmV0c25tcF9jYWxsYmFja19yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgY2hhciBuZXdidWZbMV07CisgICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOworCisgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3JlY3YgZW50ZXJcbiIpKTsKKworICAgIHdoaWxlIChyYyA8IDApIHsKKyNpZmRlZiBXSU4zMgorCXJjID0gcmVjdmZyb20obXlzdHVmZi0+cGlwZWZkc1swXSwgbmV3YnVmLCAxLCAwLCBOVUxMLCAwKTsKKyNlbHNlCisJcmMgPSByZWFkKG15c3R1ZmYtPnBpcGVmZHNbMF0sIG5ld2J1ZiwgMSk7CisjZW5kaWYKKwlpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJICAgIGJyZWFrOworCX0KKyAgICB9CisgICAgaWYgKHJjID4gMCkKKyAgICAgICAgbWVtc2V0KGJ1ZiwgMCwgcmMpOworCisgICAgaWYgKG15c3R1ZmYtPmxpbmtlZHRvKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIHdlJ3JlIHRoZSBjbGllbnQuICBXZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nLiAKKyAgICAgICAgICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogbWFsbG9jIHRoZSBzcGFjZSBoZXJlLCBidXQgaXQncyBmaWxsZWQgaW4gYnkKKyAgICAgICAgICogc25tcF9jYWxsYmFja19jcmVhdGVkX3BkdSgpIGJlbG93IAorICAgICAgICAgKi8KKyAgICAgICAgaW50ICAgICAgICAgICAgKnJldHVybm51bSA9IChpbnQgKikgY2FsbG9jKDEsIHNpemVvZihpbnQpKTsKKyAgICAgICAgKm9wYXF1ZSA9IHJldHVybm51bTsKKyAgICAgICAgKm9sZW5ndGggPSBzaXplb2YoaW50KTsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3JlY3YgZXhpdFxuIikpOworICAgIHJldHVybiByYzsKK30KKworCisKK2ludAorbmV0c25tcF9jYWxsYmFja19zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IGZyb20sIHJjID0gLTE7CisgICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOworICAgIG5ldHNubXBfY2FsbGJhY2tfcGFzcyAqY3A7CisKKyAgICAvKgorICAgICAqIGV4dHJhY3QgdGhlIHBkdSBmcm9tIHRoZSBoYWNrZWQgYnVmZmVyIAorICAgICAqLworICAgIG5ldHNubXBfdHJhbnNwb3J0ICpvdGhlcl9zaWRlOworICAgIGNhbGxiYWNrX2hhY2sgICpjaCA9IChjYWxsYmFja19oYWNrICopICogb3BhcXVlOworICAgIG5ldHNubXBfcGR1ICAgICpwZHUgPSBjaC0+cGR1OworICAgICpvcGFxdWUgPSBjaC0+b3JpZ190cmFuc3BvcnRfZGF0YTsKKyAgICBTTk1QX0ZSRUUoY2gpOworCisgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX3NlbmQgZW50ZXJcbiIpKTsKKworICAgIGNwID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX2NhbGxiYWNrX3Bhc3MpOworICAgIGlmICghY3ApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIGNwLT5wZHUgPSBzbm1wX2Nsb25lX3BkdShwZHUpOworICAgIGlmIChjcC0+cGR1LT50cmFuc3BvcnRfZGF0YSkgeworICAgICAgICAvKgorICAgICAgICAgKiBub3QgbmVlZGVkIGFuZCBub3QgcHJvcGVybHkgZnJlZWQgbGF0ZXIgCisgICAgICAgICAqLworICAgICAgICBTTk1QX0ZSRUUoY3AtPnBkdS0+dHJhbnNwb3J0X2RhdGEpOworICAgIH0KKworICAgIGlmIChjcC0+cGR1LT5mbGFncyAmIFVDRF9NU0dfRkxBR19FWFBFQ1RfUkVTUE9OU0UpCisgICAgICAgIGNwLT5wZHUtPmZsYWdzIF49IFVDRF9NU0dfRkxBR19FWFBFQ1RfUkVTUE9OU0U7CisKKyAgICAvKgorICAgICAqIHB1c2ggdGhlIHNlbnQgcGR1IG9udG8gdGhlIHN0YWNrIAorICAgICAqLworICAgIC8qCisgICAgICogQU5EIHNlbmQgYSBib2d1cyBieXRlIHRvIHRoZSByZW1vdGUgY2FsbGJhY2sgcmVjZWl2ZXIncyBwaXBlIAorICAgICAqLworICAgIGlmIChteXN0dWZmLT5saW5rZWR0bykgeworICAgICAgICAvKgorICAgICAgICAgKiB3ZSdyZSB0aGUgY2xpZW50LCBzZW5kIGl0IHRvIHRoZSBwYXJlbnQgCisgICAgICAgICAqLworICAgICAgICBjcC0+cmV0dXJuX3RyYW5zcG9ydF9udW0gPSBteXN0dWZmLT5jYWxsYmFja19udW07CisKKyAgICAgICAgb3RoZXJfc2lkZSA9IGZpbmRfdHJhbnNwb3J0X2Zyb21fY2FsbGJhY2tfbnVtKG15c3R1ZmYtPmxpbmtlZHRvKTsKKyAgICAgICAgaWYgKCFvdGhlcl9zaWRlKSB7CisgICAgICAgICAgICBzbm1wX2ZyZWVfcGR1KGNwLT5wZHUpOworICAgICAgICAgICAgU05NUF9GUkVFKGNwKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisJd2hpbGUgKHJjIDwgMCkgeworI2lmZGVmIFdJTjMyCisJICAgIHJjID0gc2VuZHRvKCgobmV0c25tcF9jYWxsYmFja19pbmZvKikgb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sICIgIiwgMSwgMCwgTlVMTCwgMCk7CisjZWxzZQorCSAgICByYyA9IHdyaXRlKCgobmV0c25tcF9jYWxsYmFja19pbmZvICopb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sCisJCSAgICAgICAiICIsIDEpOworI2VuZGlmCisJICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgICAgIGNhbGxiYWNrX3B1c2hfcXVldWUobXlzdHVmZi0+bGlua2VkdG8sIGNwKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UgZG9uJ3QgbmVlZCB0aGUgdHJhbnNwb3J0IGRhdGEgYW55IG1vcmUgCisgICAgICAgICAqLworICAgICAgICBTTk1QX0ZSRUUoKm9wYXF1ZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogd2UncmUgdGhlIHNlcnZlciwgc2VuZCBpdCB0byB0aGUgcGVyc29uIHRoYXQgc2VudCB1cyB0aGUgcmVxdWVzdCAKKyAgICAgICAgICovCisgICAgICAgIGZyb20gPSAqKigoaW50ICoqKSBvcGFxdWUpOworICAgICAgICAvKgorICAgICAgICAgKiB3ZSBkb24ndCBuZWVkIHRoZSB0cmFuc3BvcnQgZGF0YSBhbnkgbW9yZSAKKyAgICAgICAgICovCisgICAgICAgIFNOTVBfRlJFRSgqb3BhcXVlKTsKKyAgICAgICAgb3RoZXJfc2lkZSA9IGZpbmRfdHJhbnNwb3J0X2Zyb21fY2FsbGJhY2tfbnVtKGZyb20pOworICAgICAgICBpZiAoIW90aGVyX3NpZGUpIHsKKyAgICAgICAgICAgIHNubXBfZnJlZV9wZHUoY3AtPnBkdSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUoY3ApOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisJd2hpbGUgKHJjIDwgMCkgeworI2lmZGVmIFdJTjMyCisJICAgIHJjID0gc2VuZHRvKCgobmV0c25tcF9jYWxsYmFja19pbmZvKikgb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sICIgIiwgMSwgMCwgTlVMTCwgMCk7CisjZWxzZQorCSAgICByYyA9IHdyaXRlKCgobmV0c25tcF9jYWxsYmFja19pbmZvICopb3RoZXJfc2lkZS0+ZGF0YSktPnBpcGVmZHNbMV0sCisJCSAgICAgICAiICIsIDEpOworI2VuZGlmCisJICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgICAgIGNhbGxiYWNrX3B1c2hfcXVldWUoZnJvbSwgY3ApOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19zZW5kIGV4aXRcbiIpKTsKKyAgICByZXR1cm4gMDsKK30KKworCisKK2ludAorbmV0c25tcF9jYWxsYmFja19jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmM7CisgICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteXN0dWZmID0gKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0LT5kYXRhOworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19jbG9zZSBlbnRlclxuIikpOworCisjaWZkZWYgV0lOMzIKKyAgICByYyAgPSBjbG9zZXNvY2tldChteXN0dWZmLT5waXBlZmRzWzBdKTsKKyAgICByYyB8PSBjbG9zZXNvY2tldChteXN0dWZmLT5waXBlZmRzWzFdKTsKKyNlbHNlCisgICAgcmMgID0gY2xvc2UobXlzdHVmZi0+cGlwZWZkc1swXSk7CisgICAgcmMgfD0gY2xvc2UobXlzdHVmZi0+cGlwZWZkc1sxXSk7CisjZW5kaWYKKworICAgIHJjIHw9IG5ldHNubXBfdHJhbnNwb3J0X3JlbW92ZV9mcm9tX2xpc3QoJnRybGlzdCwgdCk7CisKKyAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfY2xvc2UgZXhpdFxuIikpOworICAgIHJldHVybiByYzsKK30KKworCisKK2ludAorbmV0c25tcF9jYWxsYmFja19hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgREVCVUdNU0dUTCgoInRyYW5zcG9ydF9jYWxsYmFjayIsICJob29rX2FjY2VwdCBlbnRlclxuIikpOworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19hY2NlcHQgZXhpdFxuIikpOworICAgIHJldHVybiAtMTsKK30KKworCisKKy8qCisgKiBPcGVuIGEgQ2FsbGJhY2stZG9tYWluIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkcgorICogaXMgdGhlIGxvY2FsIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUKKyAqIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8KKyAqIChhbmQgd2UgbWFrZSB1cCBhIHRlbXBvcmFyeSBuYW1lIGZvciB0aGUgbG9jYWwgZW5kIG9mIHRoZQorICogY29ubmVjdGlvbikuICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2NhbGxiYWNrX3RyYW5zcG9ydChpbnQgdG8pCit7CisKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisgICAgbmV0c25tcF9jYWxsYmFja19pbmZvICpteWRhdGE7CisgICAgaW50ICAgICAgICAgICAgIHJjOworCisgICAgLyoKKyAgICAgKiB0cmFuc3BvcnQgCisgICAgICovCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmICghdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKgorICAgICAqIG91ciBzdHVmZiAKKyAgICAgKi8KKyAgICBteWRhdGEgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfY2FsbGJhY2tfaW5mbyk7CisgICAgaWYgKCFteWRhdGEpIHsKKyAgICAgICAgU05NUF9GUkVFKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbXlkYXRhLT5saW5rZWR0byA9IHRvOworICAgIG15ZGF0YS0+Y2FsbGJhY2tfbnVtID0gKytjYWxsYmFja19jb3VudDsKKyAgICBteWRhdGEtPmRhdGEgPSBOVUxMOworICAgIHQtPmRhdGEgPSBteWRhdGE7CisKKyNpZmRlZiBXSU4zMgorICAgIHJjID0gY3JlYXRlX3dpbnBpcGVfdHJhbnNwb3J0KG15ZGF0YS0+cGlwZWZkcyk7CisjZWxzZQorICAgIHJjID0gcGlwZShteWRhdGEtPnBpcGVmZHMpOworI2VuZGlmCisgICAgdC0+c29jayA9IG15ZGF0YS0+cGlwZWZkc1swXTsKKworICAgIGlmIChyYykgeworICAgICAgICBTTk1QX0ZSRUUobXlkYXRhKTsKKyAgICAgICAgU05NUF9GUkVFKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0LT5mX3JlY3YgICAgPSBuZXRzbm1wX2NhbGxiYWNrX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgID0gbmV0c25tcF9jYWxsYmFja19zZW5kOworICAgIHQtPmZfY2xvc2UgICA9IG5ldHNubXBfY2FsbGJhY2tfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgID0gbmV0c25tcF9jYWxsYmFja19hY2NlcHQ7CisgICAgdC0+Zl9mbXRhZGRyID0gbmV0c25tcF9jYWxsYmFja19mbXRhZGRyOworCisgICAgbmV0c25tcF90cmFuc3BvcnRfYWRkX3RvX2xpc3QoJnRybGlzdCwgdCk7CisKKyAgICBpZiAodG8pCisgICAgICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaW5pdGlhbGl6ZWQgJWQgbGlua2VkIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBteWRhdGEtPmNhbGxiYWNrX251bSwgdG8pKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLAorICAgICAgICAgICAgICAgICAgICAiaW5pdGlhbGl6ZWQgbWFzdGVyIGxpc3RlbmluZyBvbiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgbXlkYXRhLT5jYWxsYmFja19udW0pKTsKKyAgICByZXR1cm4gdDsKK30KKworaW50CituZXRzbm1wX2NhbGxiYWNrX2hvb2tfcGFyc2UobmV0c25tcF9zZXNzaW9uICogc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2NoYXIgKiBwYWNrZXRwdHIsIHNpemVfdCBsZW4pCit7CisgICAgaWYgKFNOTVBfTVNHX1JFU1BPTlNFID09IHBkdS0+Y29tbWFuZCB8fAorICAgICAgICBTTk1QX01TR19SRVBPUlQgPT0gcGR1LT5jb21tYW5kKQorICAgICAgICBwZHUtPmZsYWdzIHw9IFVDRF9NU0dfRkxBR19SRVNQT05TRV9QRFU7CisgICAgZWxzZQorICAgICAgICBwZHUtPmZsYWdzICY9ICh+VUNEX01TR19GTEFHX1JFU1BPTlNFX1BEVSk7CisKKyAgICByZXR1cm4gU05NUF9FUlJfTk9FUlJPUjsKK30KKworaW50CituZXRzbm1wX2NhbGxiYWNrX2hvb2tfYnVpbGQobmV0c25tcF9zZXNzaW9uICogc3AsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9wZHUgKnBkdSwgdV9jaGFyICogcHRrLCBzaXplX3QgKiBsZW4pCit7CisgICAgLyoKKyAgICAgKiB2ZXJ5IGdyb3NzIGhhY2ssIGFzIHRoaXMgaXMgcGFzc2VkIGxhdGVyIHRvIHRoZSB0cmFuc3BvcnRfc2VuZAorICAgICAqIGZ1bmN0aW9uIAorICAgICAqLworICAgIGNhbGxiYWNrX2hhY2sgICpjaCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoY2FsbGJhY2tfaGFjayk7CisgICAgaWYgKGNoID09IE5VTEwpCisgICAgICAgIHJldHVybiAtMTsKKyAgICBERUJVR01TR1RMKCgidHJhbnNwb3J0X2NhbGxiYWNrIiwgImhvb2tfYnVpbGQgZW50ZXJcbiIpKTsKKyAgICBjaC0+cGR1ID0gcGR1OworICAgIGNoLT5vcmlnX3RyYW5zcG9ydF9kYXRhID0gcGR1LT50cmFuc3BvcnRfZGF0YTsKKyAgICBwZHUtPnRyYW5zcG9ydF9kYXRhID0gY2g7CisgICAgc3dpdGNoIChwZHUtPmNvbW1hbmQpIHsKKyAgICBjYXNlIFNOTVBfTVNHX0dFVEJVTEs6CisgICAgICAgIGlmIChwZHUtPm1heF9yZXBldGl0aW9ucyA8IDApIHsKKyAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9SRVBFVElUSU9OUzsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBpZiAocGR1LT5ub25fcmVwZWF0ZXJzIDwgMCkgeworICAgICAgICAgICAgc3AtPnNfc25tcF9lcnJubyA9IFNOTVBFUlJfQkFEX1JFUEVBVEVSUzsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIFNOTVBfTVNHX1JFU1BPTlNFOgorICAgIGNhc2UgU05NUF9NU0dfVFJBUDoKKyAgICBjYXNlIFNOTVBfTVNHX1RSQVAyOgorICAgICAgICBwZHUtPmZsYWdzICY9ICh+VUNEX01TR19GTEFHX0VYUEVDVF9SRVNQT05TRSk7CisgICAgICAgIC8qCisgICAgICAgICAqIEZhbGx0aHJvdWdoCisgICAgICAgICAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChwZHUtPmVycnN0YXQgPT0gU05NUF9ERUZBVUxUX0VSUlNUQVQpCisgICAgICAgICAgICBwZHUtPmVycnN0YXQgPSAwOworICAgICAgICBpZiAocGR1LT5lcnJpbmRleCA9PSBTTk1QX0RFRkFVTFRfRVJSSU5ERVgpCisgICAgICAgICAgICBwZHUtPmVycmluZGV4ID0gMDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBDb3B5IG1pc3NpbmcgdmFsdWVzIGZyb20gc2Vzc2lvbiBkZWZhdWx0cworICAgICAqLworICAgIHN3aXRjaCAocGR1LT52ZXJzaW9uKSB7CisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKyAgICBjYXNlIFNOTVBfVkVSU0lPTl8xOgorI2VuZGlmCisjaWZuZGVmIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCisgICAgY2FzZSBTTk1QX1ZFUlNJT05fMmM6CisjZW5kaWYKKyNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKyAgICAgICAgaWYgKHBkdS0+Y29tbXVuaXR5X2xlbiA9PSAwKSB7CisgICAgICAgICAgICBpZiAoc3AtPmNvbW11bml0eV9sZW4gPT0gMCkgeworICAgICAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX0JBRF9DT01NVU5JVFk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcGR1LT5jb21tdW5pdHkgPSAodV9jaGFyICopIG1hbGxvYyhzcC0+Y29tbXVuaXR5X2xlbik7CisgICAgICAgICAgICBpZiAocGR1LT5jb21tdW5pdHkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNwLT5zX3NubXBfZXJybm8gPSBTTk1QRVJSX01BTExPQzsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtZW1tb3ZlKHBkdS0+Y29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICBzcC0+Y29tbXVuaXR5LCBzcC0+Y29tbXVuaXR5X2xlbik7CisgICAgICAgICAgICBwZHUtPmNvbW11bml0eV9sZW4gPSBzcC0+Y29tbXVuaXR5X2xlbjsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNhc2UgU05NUF9WRVJTSU9OXzM6CisgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TmFtZUxlbiA9PSAwKSB7CisJICBwZHUtPnNlY3VyaXR5TmFtZSA9IChjaGFyICopbWFsbG9jKHNwLT5zZWN1cml0eU5hbWVMZW4pOworICAgICAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlOYW1lID09IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBzcC0+c19zbm1wX2Vycm5vID0gU05NUEVSUl9NQUxMT0M7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbWVtbW92ZShwZHUtPnNlY3VyaXR5TmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIHNwLT5zZWN1cml0eU5hbWUsIHNwLT5zZWN1cml0eU5hbWVMZW4pOworICAgICAgICAgICAgcGR1LT5zZWN1cml0eU5hbWVMZW4gPSBzcC0+c2VjdXJpdHlOYW1lTGVuOworICAgICAgICB9CisgICAgICAgIGlmIChwZHUtPnNlY3VyaXR5TW9kZWwgPT0gLTEpCisgICAgICAgICAgICBwZHUtPnNlY3VyaXR5TW9kZWwgPSBzcC0+c2VjdXJpdHlNb2RlbDsKKyAgICAgICAgaWYgKHBkdS0+c2VjdXJpdHlMZXZlbCA9PSAwKQorICAgICAgICAgICAgcGR1LT5zZWN1cml0eUxldmVsID0gc3AtPnNlY3VyaXR5TGV2ZWw7CisgICAgICAgIC8qIFdIQVQgRUxTRSA/PyAqLworICAgIH0KKyAgICBwdGtbMF0gPSAwOworICAgICpsZW4gPSAxOworICAgIERFQlVHTVNHVEwoKCJ0cmFuc3BvcnRfY2FsbGJhY2siLCAiaG9va19idWlsZCBleGl0XG4iKSk7CisgICAgcmV0dXJuIDE7Cit9CisKK2ludAorbmV0c25tcF9jYWxsYmFja19jaGVja19wYWNrZXQodV9jaGFyICogcGt0LCBzaXplX3QgbGVuKQoreworICAgIHJldHVybiAxOworfQorCituZXRzbm1wX3BkdSAgICAqCituZXRzbm1wX2NhbGxiYWNrX2NyZWF0ZV9wZHUobmV0c25tcF90cmFuc3BvcnQgKnRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpvcGFxdWUsIHNpemVfdCBvbGVuZ3RoKQoreworICAgIG5ldHNubXBfcGR1ICAgICpwZHU7CisgICAgbmV0c25tcF9jYWxsYmFja19wYXNzICpjcCA9CisgICAgICAgIGNhbGxiYWNrX3BvcF9xdWV1ZSgoKG5ldHNubXBfY2FsbGJhY2tfaW5mbyAqKSB0cmFuc3BvcnQtPmRhdGEpLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrX251bSk7CisgICAgaWYgKCFjcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgcGR1ID0gY3AtPnBkdTsKKyAgICBwZHUtPnRyYW5zcG9ydF9kYXRhID0gb3BhcXVlOworICAgIHBkdS0+dHJhbnNwb3J0X2RhdGFfbGVuZ3RoID0gb2xlbmd0aDsKKyAgICBpZiAob3BhcXVlKSAgICAgICAgICAgICAgICAgLyogaWYgY3JlYXRlZCwgd2UncmUgdGhlIHNlcnZlciAqLworICAgICAgICAqKChpbnQgKikgb3BhcXVlKSA9IGNwLT5yZXR1cm5fdHJhbnNwb3J0X251bTsKKyAgICBTTk1QX0ZSRUUoY3ApOworICAgIHJldHVybiBwZHU7Cit9CisKK25ldHNubXBfc2Vzc2lvbiAqCituZXRzbm1wX2NhbGxiYWNrX29wZW4oaW50IGF0dGFjaF90bywKKyAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpyZXR1cm5fZnVuYykgKGludCBvcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfc2Vzc2lvbiAqIHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgcmVxaWQsIG5ldHNubXBfcGR1ICpwZHUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICptYWdpYyksCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnByZV9wYXJzZSkgKG5ldHNubXBfc2Vzc2lvbiAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0c25tcF90cmFuc3BvcnRfcyAqLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICosIGludCksCisgICAgICAgICAgICAgICAgICAgICAgaW50ICgqZnBvc3RfcGFyc2UpIChuZXRzbm1wX3Nlc3Npb24gKiwgbmV0c25tcF9wZHUgKiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCkpCit7CisgICAgbmV0c25tcF9zZXNzaW9uIGNhbGxiYWNrX3Nlc3MsICpjYWxsYmFja19zczsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqY2FsbGJhY2tfdHI7CisKKyAgICBjYWxsYmFja190ciA9IG5ldHNubXBfY2FsbGJhY2tfdHJhbnNwb3J0KGF0dGFjaF90byk7CisgICAgc25tcF9zZXNzX2luaXQoJmNhbGxiYWNrX3Nlc3MpOworICAgIGNhbGxiYWNrX3Nlc3MuY2FsbGJhY2sgPSByZXR1cm5fZnVuYzsKKyAgICBpZiAoYXR0YWNoX3RvKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIGNsaWVudCAKKyAgICAgICAgICovCisgICAgICAgIC8qCisgICAgICAgICAqIHRyeXNlc3MuY29tbXVuaXR5ID0gKHVfY2hhciAqKSBjYWxsYmFja19zczsgCisgICAgICAgICAqLworICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxiYWNrX3Nlc3MuaXNBdXRob3JpdGF0aXZlID0gU05NUF9TRVNTX0FVVEhPUklUQVRJVkU7CisgICAgfQorICAgIGNhbGxiYWNrX3Nlc3MucmVtb3RlX3BvcnQgPSAwOworICAgIGNhbGxiYWNrX3Nlc3MucmV0cmllcyA9IDA7CisgICAgY2FsbGJhY2tfc2Vzcy50aW1lb3V0ID0gMzAwMDAwMDA7CisgICAgY2FsbGJhY2tfc2Vzcy52ZXJzaW9uID0gU05NUF9ERUZBVUxUX1ZFUlNJT047ICAgICAgIC8qIChtb3N0bHkpIGJvZ3VzICovCisgICAgY2FsbGJhY2tfc3MgPSBzbm1wX2FkZF9mdWxsKCZjYWxsYmFja19zZXNzLCBjYWxsYmFja190ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnByZV9wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19ob29rX3BhcnNlLCBmcG9zdF9wYXJzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19ob29rX2J1aWxkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2NhbGxiYWNrX2NoZWNrX3BhY2tldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9jYWxsYmFja19jcmVhdGVfcGR1KTsKKyAgICBpZiAoY2FsbGJhY2tfc3MpCisgICAgICAgIGNhbGxiYWNrX3NzLT5sb2NhbF9wb3J0ID0KKyAgICAgICAgICAgICgobmV0c25tcF9jYWxsYmFja19pbmZvICopIGNhbGxiYWNrX3RyLT5kYXRhKS0+Y2FsbGJhY2tfbnVtOworICAgIHJldHVybiBjYWxsYmFja19zczsKK30KKworCisKK3ZvaWQKK25ldHNubXBfY2xlYXJfY2FsbGJhY2tfbGlzdCh2b2lkKQoreworCisgICAgbmV0c25tcF90cmFuc3BvcnRfbGlzdCAqbGlzdCA9IHRybGlzdCwgKm5leHQgPSBOVUxMOworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ciA9IE5VTEw7CisKKyAgICBERUJVR01TR1RMKCgiY2FsbGJhY2tfY2xlYXIiLCAiY2FsbGVkIG5ldHNubXBfY2FsbGJhY2tfY2xlYXJfbGlzdCgpXG4iKSk7CisgICAgd2hpbGUgKGxpc3QgIT0gTlVMTCkgeworCW5leHQgPSBsaXN0LT5uZXh0OworCXRyID0gbGlzdC0+dHJhbnNwb3J0OworCisJaWYgKHRyICE9IE5VTEwpIHsKKwkgICAgdHItPmZfY2xvc2UodHIpOworICAJICAgIG5ldHNubXBfdHJhbnNwb3J0X3JlbW92ZV9mcm9tX2xpc3QoJnRybGlzdCwgdHIpOworCSAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHRyKTsKKwl9CisJbGlzdCA9IG5leHQ7CisgICAgfQorICAgIHRybGlzdCA9IE5VTEw7CisKK30KKworI2VuZGlmIC8qIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTiAqLwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcERUTFNVRFBEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2RjNzY3Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBEVExTVURQRG9tYWluLmMKQEAgLTAsMCArMSwxNzg4IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgQ29weXJpZ2h0IDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworLyogCisgKiBTZWUgdGhlIGZvbGxvd2luZyB3ZWIgcGFnZXMgZm9yIHVzZWZ1bCBkb2N1bWVudGF0aW9uIG9uIHRoaXMgdHJhbnNwb3J0OgorICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOlVzaW5nX1RMUworICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVXNpbmdfRFRMUworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmZGVmIEhBVkVfTElCU1NMX0RUTFMKKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNlcnRfdXRpbCkKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKHNvY2thZGRyX3NpemUpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBEVExTVURQRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfVUlPX0gKKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgorCisjaW5jbHVkZSAib3BlbnNzbC9iaW8uaCIKKyNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCisjaW5jbHVkZSAib3BlbnNzbC9yYW5kLmgiCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVExTQmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2VydF91dGlsLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX29wZW5zc2wuaD4KKworI2lmbmRlZiBJTkFERFJfTk9ORQorI2RlZmluZSBJTkFERFJfTk9ORQktMQorI2VuZGlmCisKKyNkZWZpbmUgV0VfQVJFX1NFUlZFUiAwCisjZGVmaW5lIFdFX0FSRV9DTElFTlQgMQorCitvaWQgICAgICAgICAgICAgbmV0c25tcERUTFNVRFBEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9EVExTX1VEUF9JUCB9Oworc2l6ZV90ICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluX2xlbiA9IE9JRF9MRU5HVEgobmV0c25tcERUTFNVRFBEb21haW4pOworCitzdGF0aWMgbmV0c25tcF90ZG9tYWluIGR0bHN1ZHBEb21haW47CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KK3N0YXRpYyBpbnQgb3BlbnNzbF9hZGRyX2luZGV4NiA9IDA7CisjZW5kaWYKKworLyogdGhpcyBzdG9yZXMgb3BlbnNzbCBjcmVkZW50aWFscyBmb3IgZWFjaCBjb25uZWN0aW9uIHNpbmNlIG9wZW5zc2wKKyAgIGNhbid0IGRvIGl0IGZvciB1cyBhdCB0aGUgbW9tZW50OyBob3BlZnVsbHkgZnV0dXJlIHZlcnNpb25zIHdpbGwKKyAgIGNoYW5nZSAqLwordHlwZWRlZiBzdHJ1Y3QgYmlvX2NhY2hlX3MgeworICAgQklPICpyZWFkX2JpbzsgIC8qIE9wZW5TU0wgd2lsbCByZWFkIGl0cyBpbmNvbWluZyBTU0wgcGFja2V0cyBmcm9tIGhlcmUgKi8KKyAgIEJJTyAqd3JpdGVfYmlvOyAvKiBPcGVuU1NMIHdpbGwgd3JpdGUgaXRzIG91dGdvaW5nIFNTTCBwYWNrZXRzIHRvIGhlcmUgKi8KKyAgIG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSBzYXM7CisgICB1X2ludCBmbGFnczsKKyAgIHN0cnVjdCBiaW9fY2FjaGVfcyAqbmV4dDsKKyAgIGludCBtc2dudW07CisgICBjaGFyICp3cml0ZV9jYWNoZTsKKyAgIHNpemVfdCB3cml0ZV9jYWNoZV9sZW47CisgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworfSBiaW9fY2FjaGU7CisKKy8qKiBiaW9fY2FjaGUgZmxhZ3MgKi8KKyNkZWZpbmUgTkVUU05NUF9CSU9fSEFWRV9DT09LSUUgICAgICAgIDB4MDAwMSAvKiB2ZXJpZmllZCBjb29raWUgKi8KKyNkZWZpbmUgTkVUU05NUF9CSU9fQ09OTkVDVEVEICAgICAgICAgIDB4MDAwMiAvKiByZWNpZXZlZCBkZWNvZGVkIGRhdGEgKi8KKyNkZWZpbmUgTkVUU05NUF9CSU9fRElTQ09OTkVDVEVEICAgICAgIDB4MDAwNCAvKiBwZWVyIHNodXRkb3duICovCisKK3N0YXRpYyBiaW9fY2FjaGUgKmJpb2NhY2hlID0gTlVMTDsKKworc3RhdGljIGludCBvcGVuc3NsX2FkZHJfaW5kZXggPSAwOworCitzdGF0aWMgaW50IG5ldHNubXBfZHRsc192ZXJpZnlfY29va2llKFNTTCAqc3NsLCB1bnNpZ25lZCBjaGFyICpjb29raWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb29raWVfbGVuKTsKK3N0YXRpYyBpbnQgbmV0c25tcF9kdGxzX2dlbl9jb29raWUoU1NMICpzc2wsIHVuc2lnbmVkIGNoYXIgKmNvb2tpZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpjb29raWVfbGVuKTsKKworLyogdGhpcyBzdG9yZXMgcmVtb3RlIGNvbm5lY3Rpb25zIGluIGEgbGlzdCB0byBzZWFyY2ggdGhyb3VnaCAqLworLyogWFhYOiBvcHRpbWl6ZSBmb3Igc2VhcmNoaW5nICovCisvKiBYWFg6IGhhbmRsZSBzdGF0ZSBpc3N1ZXMgZm9yIG5ldyBjb25uZWN0aW9ucyB0byByZWR1Y2UgRE9TIGlzc3VlcyAqLworLyogICAgICAoVExTIHNob3VsZCBkbyB0aGlzLCBidXQgb3BlbnNzbCBjYW4ndCBkbyBtb3JlIHRoYW4gb25lIGN0eCBwZXIgc29jayAqLworLyogWFhYOiBwdXQgYSB0aW1lciBvbiB0aGUgY2FjaGUgZm9yIGV4cGlyYXJ5IHB1cnBvc2VzICovCitzdGF0aWMgYmlvX2NhY2hlICpmaW5kX2Jpb19jYWNoZShuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgKmZyb21fYWRkcikgeworICAgIGJpb19jYWNoZSAqY2FjaGVwID0gTlVMTDsKKyAgICAKKyAgICBmb3IoY2FjaGVwID0gYmlvY2FjaGU7IGNhY2hlcDsgY2FjaGVwID0gY2FjaGVwLT5uZXh0KSB7CisKKyAgICAgICAgaWYgKGNhY2hlcC0+c2FzLnNhLnNhX2ZhbWlseSAhPSBmcm9tX2FkZHItPnNhLnNhX2ZhbWlseSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGlmICgoZnJvbV9hZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVCkgJiYKKyAgICAgICAgICAgICgoY2FjaGVwLT5zYXMuc2luLnNpbl9hZGRyLnNfYWRkciAhPQorICAgICAgICAgICAgICBmcm9tX2FkZHItPnNpbi5zaW5fYWRkci5zX2FkZHIpIHx8CisgICAgICAgICAgICAgKGNhY2hlcC0+c2FzLnNpbi5zaW5fcG9ydCAhPSBmcm9tX2FkZHItPnNpbi5zaW5fcG9ydCkpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisgICAgICAgIGVsc2UgaWYgKChmcm9tX2FkZHItPnNhLnNhX2ZhbWlseSA9PSBBRl9JTkVUNikgJiYKKyAgICAgICAgICAgICAgICAgKChjYWNoZXAtPnNhcy5zaW42LnNpbjZfcG9ydCAhPSBmcm9tX2FkZHItPnNpbjYuc2luNl9wb3J0KSB8fAorICAgICAgICAgICAgICAgICAgKGNhY2hlcC0+c2FzLnNpbjYuc2luNl9zY29wZV9pZCAhPQorICAgICAgICAgICAgICAgICAgIGZyb21fYWRkci0+c2luNi5zaW42X3Njb3BlX2lkKSB8fAorICAgICAgICAgICAgICAgICAgKG1lbWNtcChjYWNoZXAtPnNhcy5zaW42LnNpbjZfYWRkci5zNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tX2FkZHItPnNpbjYuc2luNl9hZGRyLnM2X2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihmcm9tX2FkZHItPnNpbjYuc2luNl9hZGRyLnM2X2FkZHIpKSAhPSAwKSkpCisgICAgICAgICAgICBjb250aW51ZTsKKyNlbmRpZgorICAgICAgICAvKiBmb3VuZCBhbiBleGlzdGluZyBjb25uZWN0aW9uICovCisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gY2FjaGVwOworfQorCisvKiByZW1vdmVzIGEgc2luZ2xlIGNhY2hlIGVudHJ5IGFuZCByZXR1cm5zIFNVQ0NFU1Mgb24gZmluZGluZyBhbmQKKyAgIHJlbW92aW5nIGl0LiAqLworc3RhdGljIGludCByZW1vdmVfYmlvX2NhY2hlKGJpb19jYWNoZSAqdGhpc2NhY2hlKSB7CisgICAgYmlvX2NhY2hlICpjYWNoZXAgPSBOVUxMLCAqcHJldmNhY2hlID0gTlVMTDsKKyAgICBjYWNoZXAgPSBiaW9jYWNoZTsKKyAgICB3aGlsZShjYWNoZXApIHsKKyAgICAgICAgaWYgKGNhY2hlcCA9PSB0aGlzY2FjaGUpIHsKKworICAgICAgICAgICAgLyogcmVtb3ZlIGl0IGZyb20gdGhlIGxpc3QgKi8KKyAgICAgICAgICAgIGlmIChOVUxMID09IHByZXZjYWNoZSkgeworICAgICAgICAgICAgICAgIC8qIGF0IHRoZSBmaXJzdCBjYWNoZSBpbiB0aGUgbGlzdCAqLworICAgICAgICAgICAgICAgIGJpb2NhY2hlID0gdGhpc2NhY2hlLT5uZXh0OworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBwcmV2Y2FjaGUtPm5leHQgPSB0aGlzY2FjaGUtPm5leHQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisgICAgICAgIH0KKyAgICAgICAgcHJldmNhY2hlID0gY2FjaGVwOworICAgICAgICBjYWNoZXAgPSBjYWNoZXAtPm5leHQ7CisgICAgfQorICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKK30KKworLyogZnJlZXMgdGhlIGNvbnRlbnRzIG9mIGEgYmlvX2NhY2hlICovCitzdGF0aWMgdm9pZCBmcmVlX2Jpb19jYWNoZShiaW9fY2FjaGUgKmNhY2hlcCkgeworLyogVGhlc2UgYXJlIGZyZWVkIGJ5IHRoZSBTU0xfZnJlZSgpIGNhbGwgKi8KKy8qCisgICAgICAgIEJJT19mcmVlKGNhY2hlcC0+cmVhZF9iaW8pOworICAgICAgICBCSU9fZnJlZShjYWNoZXAtPndyaXRlX2Jpbyk7CisqLworICAgIERFQlVHTVNHVEwoKCI5OmR0bHN1ZHA6YmlvX2NhY2hlIiwgInJlbGVhc2luZyAlcFxuIiwgY2FjaGVwKSk7CisgICAgICAgIFNOTVBfRlJFRShjYWNoZXAtPndyaXRlX2NhY2hlKTsKKyAgICAgICAgbmV0c25tcF90bHNiYXNlX2ZyZWVfdGxzZGF0YShjYWNoZXAtPnRsc2RhdGEpOworfQorCitzdGF0aWMgdm9pZCByZW1vdmVfYW5kX2ZyZWVfYmlvX2NhY2hlKGJpb19jYWNoZSAqY2FjaGVwKSB7CisgICAgLyoqIG5vIGRlYnVnLCByZW1vdmVfYmlvX2NhY2hlIGRvZXMgaXQgKi8KKyAgICByZW1vdmVfYmlvX2NhY2hlKGNhY2hlcCk7CisgICAgZnJlZV9iaW9fY2FjaGUoY2FjaGVwKTsKK30KKworCisvKiBYWFg6IGxvdHMgb2YgbWFsbG9jL3N0YXRlIGNsZWFudXAgbmVlZGVkICovCisjZGVmaW5lIERJRUhFUkUobXNnKSBkbyB7IHNubXBfbG9nKExPR19FUlIsICIlc1xuIiwgbXNnKTsgcmV0dXJuIE5VTEw7IH0gd2hpbGUoMCkKKworc3RhdGljIGJpb19jYWNoZSAqCitzdGFydF9uZXdfY2FjaGVkX2Nvbm5lY3Rpb24obmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9zb2NrYWRkcl9zdG9yYWdlICpyZW1vdGVfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VfYXJlX2NsaWVudCkgeworICAgIGJpb19jYWNoZSAqY2FjaGVwID0gTlVMTDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworCisgICAgREVCVUdUUkFDRVRPSygiOTpkdGxzdWRwIik7CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4xLCBzdGVwIDE6CisgICAgICAgMSkgIFRoZSBzbm1wVGxzdG1TZXNzaW9uT3BlbnMgY291bnRlciBpcyBpbmNyZW1lbnRlZC4KKyAgICAqLworICAgIGlmICh3ZV9hcmVfY2xpZW50KQorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTlMpOworCisgICAgaWYgKCF0LT5zb2NrKQorICAgICAgICBESUVIRVJFKCJubyBzb2NrZXQgcGFzc2VkIGluIHRvIHN0YXJ0X25ld19jYWNoZWRfY29ubmVjdGlvblxuIik7CisgICAgaWYgKCFyZW1vdGVfYWRkcikKKyAgICAgICAgRElFSEVSRSgibm8gcmVtb3RlX2FkZHIgcGFzc2VkIGluIHRvIHN0YXJ0X25ld19jYWNoZWRfY29ubmVjdGlvblxuIik7CisgICAgICAgIAorICAgIGNhY2hlcCA9IFNOTVBfTUFMTE9DX1RZUEVERUYoYmlvX2NhY2hlKTsKKyAgICBpZiAoIWNhY2hlcCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgCisgICAgLyogYWxsb2NhdGUgb3VyIFRMUyBzcGVjaWZpYyBkYXRhICovCisgICAgaWYgKE5VTEwgPT0gKHRsc2RhdGEgPSBuZXRzbm1wX3Rsc2Jhc2VfYWxsb2NhdGVfdGxzZGF0YSh0LCAhd2VfYXJlX2NsaWVudCkpKSB7CisgICAgICAgIFNOTVBfRlJFRShjYWNoZXApOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgY2FjaGVwLT50bHNkYXRhID0gdGxzZGF0YTsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4zLjEsIHN0ZXAgMToKKyAgICAgICAyKSAgVGhlIGNsaWVudCBzZWxlY3RzIHRoZSBhcHByb3ByaWF0ZSBjZXJ0aWZpY2F0ZSBhbmQgY2lwaGVyX3N1aXRlcworICAgICAgICAgICBmb3IgdGhlIGtleSBhZ3JlZW1lbnQgYmFzZWQgb24gdGhlIHRtU2VjdXJpdHlOYW1lIGFuZCB0aGUKKyAgICAgICAgICAgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsIGZvciB0aGUgc2Vzc2lvbi4gIEZvciBzZXNzaW9ucyBiZWluZworICAgICAgICAgICBlc3RhYmxpc2hlZCBhcyBhIHJlc3VsdCBvZiBhIFNOTVAtVEFSR0VULU1JQiBiYXNlZCBvcGVyYXRpb24sIHRoZQorICAgICAgICAgICBjZXJ0aWZpY2F0ZSB3aWxsIHBvdGVudGlhbGx5IGhhdmUgYmVlbiBpZGVudGlmaWVkIHZpYSB0aGUKKyAgICAgICAgICAgc25tcFRsc3RtUGFyYW1zVGFibGUgbWFwcGluZyBhbmQgdGhlIGNpcGhlcl9zdWl0ZXMgd2lsbCBoYXZlIHRvCisgICAgICAgICAgIGJlIHRha2VuIGZyb20gc3lzdGVtLXdpZGUgb3IgaW1wbGVtZW50YXRpb24tc3BlY2lmaWMKKyAgICAgICAgICAgY29uZmlndXJhdGlvbi4gIElmIG5vIHJvdyBpbiB0aGUgc25tcFRsc3RtUGFyYW1zVGFibGUgZXhpc3RzIHRoZW4KKyAgICAgICAgICAgaW1wbGVtZW50YXRpb25zIE1BWSBjaG9vc2UgdG8gZXN0YWJsaXNoIHRoZSBjb25uZWN0aW9uIHVzaW5nIGEKKyAgICAgICAgICAgZGVmYXVsdCBjbGllbnQgY2VydGlmaWNhdGUgYXZhaWxhYmxlIHRvIHRoZSBhcHBsaWNhdGlvbi4KKyAgICAgICAgICAgT3RoZXJ3aXNlLCB0aGUgY2VydGlmaWNhdGUgYW5kIGFwcHJvcHJpYXRlIGNpcGhlcl9zdWl0ZXMgd2lsbAorICAgICAgICAgICBuZWVkIHRvIGJlIHBhc3NlZCB0byB0aGUgb3BlblNlc3Npb24oKSBBU0kgYXMgc3VwcGxlbWVudGFsCisgICAgICAgICAgIGluZm9ybWF0aW9uIG9yIGNvbmZpZ3VyZWQgdGhyb3VnaCBhbiBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQKKyAgICAgICAgICAgbWVjaGFuaXNtLiAgSXQgaXMgYWxzbyBpbXBsZW1lbnRhdGlvbi1kZXBlbmRlbnQgYW5kIHBvc3NpYmx5CisgICAgICAgICAgIHBvbGljeS1kZXBlbmRlbnQgaG93IHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbCB3aWxsIGJlIHVzZWQgdG8KKyAgICAgICAgICAgaW5mbHVlbmNlIHRoZSBzZWN1cml0eSBjYXBhYmlsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIChEKVRMUworICAgICAgICAgICBjb25uZWN0aW9uLiAgSG93ZXZlciB0aGlzIGlzIGRvbmUsIHRoZSBzZWN1cml0eSBjYXBhYmlsaXRpZXMKKyAgICAgICAgICAgcHJvdmlkZWQgYnkgKEQpVExTIE1VU1QgYmUgYXQgbGVhc3QgYXMgaGlnaCBhcyB0aGUgbGV2ZWwgb2YKKyAgICAgICAgICAgc2VjdXJpdHkgaW5kaWNhdGVkIGJ5IHRoZSB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgcGFyYW1ldGVyLgorICAgICAgICAgICBUaGUgYWN0dWFsIHNlY3VyaXR5IGxldmVsIG9mIHRoZSBzZXNzaW9uIGlzIHJlcG9ydGVkIGluIHRoZQorICAgICAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGNhY2hlIGFzIHRtU2VjdXJpdHlMZXZlbC4gIEZvciAoRClUTFMgdG8gcHJvdmlkZQorICAgICAgICAgICBzdHJvbmcgYXV0aGVudGljYXRpb24sIGVhY2ggcHJpbmNpcGFsIGFjdGluZyBhcyBhIGNvbW1hbmQKKyAgICAgICAgICAgZ2VuZXJhdG9yIFNIT1VMRCBoYXZlIGl0cyBvd24gY2VydGlmaWNhdGUuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICArIFRoaXMgSW5mb3JtYXRpb24gaXMgcGFzc2VkIGluIHZpYSB0aGUgdHJhbnNwb3J0IGFuZCBkZWZhdWx0CisgICAgICAgICBwYXJlbWV0ZXJzCisgICAgKi8KKyAgICAvKiBzZWUgaWYgd2UgaGF2ZSBiYXNlIGNvbmZpZ3VyYXRpb24gdG8gY29weSBpbiB0byB0aGlzIG5ldyBvbmUgKi8KKyAgICBpZiAoTlVMTCAhPSB0LT5kYXRhICYmIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihfbmV0c25tcFRMU0Jhc2VEYXRhKSkgeworICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICpwYXJlbnRkYXRhID0gdC0+ZGF0YTsKKyAgICAgICAgaWYgKHBhcmVudGRhdGEtPm91cl9pZGVudGl0eSkKKyAgICAgICAgICAgIHRsc2RhdGEtPm91cl9pZGVudGl0eSA9IHN0cmR1cChwYXJlbnRkYXRhLT5vdXJfaWRlbnRpdHkpOworICAgICAgICBpZiAocGFyZW50ZGF0YS0+dGhlaXJfaWRlbnRpdHkpCisgICAgICAgICAgICB0bHNkYXRhLT50aGVpcl9pZGVudGl0eSA9IHN0cmR1cChwYXJlbnRkYXRhLT50aGVpcl9pZGVudGl0eSk7CisgICAgICAgIGlmIChwYXJlbnRkYXRhLT50aGVpcl9maW5nZXJwcmludCkKKyAgICAgICAgICAgIHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50ID0gc3RyZHVwKHBhcmVudGRhdGEtPnRoZWlyX2ZpbmdlcnByaW50KTsKKyAgICAgICAgaWYgKHBhcmVudGRhdGEtPnRydXN0X2NlcnQpCisgICAgICAgICAgICB0bHNkYXRhLT50cnVzdF9jZXJ0ID0gc3RyZHVwKHBhcmVudGRhdGEtPnRydXN0X2NlcnQpOworICAgICAgICBpZiAocGFyZW50ZGF0YS0+dGhlaXJfaG9zdG5hbWUpCisgICAgICAgICAgICB0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSA9IHN0cmR1cChwYXJlbnRkYXRhLT50aGVpcl9ob3N0bmFtZSk7CisgICAgfQorICAgIAorICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgInN0YXJ0aW5nIGEgbmV3IGNvbm5lY3Rpb25cbiIpKTsKKyAgICBjYWNoZXAtPm5leHQgPSBiaW9jYWNoZTsKKyAgICBiaW9jYWNoZSA9IGNhY2hlcDsKKworICAgIGlmIChyZW1vdGVfYWRkci0+c2Euc2FfZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIG1lbWNweSgmY2FjaGVwLT5zYXMuc2luLCAmcmVtb3RlX2FkZHItPnNpbiwgc2l6ZW9mKHJlbW90ZV9hZGRyLT5zaW4pKTsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGVsc2UgaWYgKHJlbW90ZV9hZGRyLT5zYS5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpCisgICAgICAgIG1lbWNweSgmY2FjaGVwLT5zYXMuc2luNiwgJnJlbW90ZV9hZGRyLT5zaW42LCBzaXplb2YocmVtb3RlX2FkZHItPnNpbjYpKTsKKyNlbmRpZgorICAgIGVsc2UKKyAgICAgICAgRElFSEVSRSgidW5rbm93biBhZGRyZXNzIGZhbWlseSIpOworCisgICAgLyogY3JlYXRlIGNhY2hpbmcgbWVtb3J5IGJpb3MgZm9yIE9wZW5TU0wgdG8gcmVhZCBhbmQgd3JpdGUgdG8gKi8KKworICAgIGNhY2hlcC0+cmVhZF9iaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsgLyogb3BlbnNzbCByZWFkcyBmcm9tICovCisgICAgaWYgKCFjYWNoZXAtPnJlYWRfYmlvKQorICAgICAgICBESUVIRVJFKCJmYWlsZWQgdG8gY3JlYXRlIHRoZSBvcGVuc3NsIHJlYWRfYmlvIik7CisKKyAgICBjYWNoZXAtPndyaXRlX2JpbyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOyAvKiBvcGVuc3NsIHdyaXRlcyB0byAqLworICAgIGlmICghY2FjaGVwLT53cml0ZV9iaW8pIHsKKyAgICAgICAgQklPX2ZyZWUoY2FjaGVwLT5yZWFkX2Jpbyk7CisgICAgICAgIGNhY2hlcC0+cmVhZF9iaW8gPSBOVUxMOworICAgICAgICBESUVIRVJFKCJmYWlsZWQgdG8gY3JlYXRlIHRoZSBvcGVuc3NsIHdyaXRlX2JpbyIpOworICAgIH0KKworICAgIEJJT19zZXRfbWVtX2VvZl9yZXR1cm4oY2FjaGVwLT5yZWFkX2JpbywgLTEpOworICAgIEJJT19zZXRfbWVtX2VvZl9yZXR1cm4oY2FjaGVwLT53cml0ZV9iaW8sIC0xKTsKKworICAgIGlmICh3ZV9hcmVfY2xpZW50KSB7CisgICAgICAgIC8qIHdlJ3JlIHRoZSBjbGllbnQgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLAorICAgICAgICAgICAgICAgICAgICAic3RhcnRpbmcgYSBuZXcgY29ubmVjdGlvbiBhcyBhIGNsaWVudCB0byBzb2NrOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgdC0+c29jaykpOworICAgICAgICB0bHNkYXRhLT5zc2wgPSBTU0xfbmV3KHNzbGN0eF9jbGllbnRfc2V0dXAoRFRMU3YxX21ldGhvZCgpLCB0bHNkYXRhKSk7CisKKyAgICAgICAgLyogWFhYOiBzZXNzaW9uIHNldHRpbmcgNzM1ICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogd2UncmUgdGhlIHNlcnZlciAqLworICAgICAgICBTU0xfQ1RYICpjdHggPSBzc2xjdHhfc2VydmVyX3NldHVwKERUTFN2MV9tZXRob2QoKSk7CisgICAgICAgIGlmICghY3R4KSB7CisgICAgICAgICAgICBCSU9fZnJlZShjYWNoZXAtPnJlYWRfYmlvKTsKKyAgICAgICAgICAgIEJJT19mcmVlKGNhY2hlcC0+d3JpdGVfYmlvKTsKKyAgICAgICAgICAgIGNhY2hlcC0+cmVhZF9iaW8gPSBOVUxMOworICAgICAgICAgICAgY2FjaGVwLT53cml0ZV9iaW8gPSBOVUxMOworICAgICAgICAgICAgRElFSEVSRSgiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgU1NMIENvbnRleHQiKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHR1cm4gb24gY29va2llIGV4Y2hhbmdlICovCisgICAgICAgIC8qIFNldCBEVExTIGNvb2tpZSBnZW5lcmF0aW9uIGFuZCB2ZXJpZmljYXRpb24gY2FsbGJhY2tzICovCisgICAgICAgIFNTTF9DVFhfc2V0X2Nvb2tpZV9nZW5lcmF0ZV9jYihjdHgsIG5ldHNubXBfZHRsc19nZW5fY29va2llKTsKKyAgICAgICAgU1NMX0NUWF9zZXRfY29va2llX3ZlcmlmeV9jYihjdHgsIG5ldHNubXBfZHRsc192ZXJpZnlfY29va2llKTsKKworICAgICAgICB0bHNkYXRhLT5zc2wgPSBTU0xfbmV3KGN0eCk7CisgICAgfQorCisgICAgaWYgKCF0bHNkYXRhLT5zc2wpIHsKKyAgICAgICAgQklPX2ZyZWUoY2FjaGVwLT5yZWFkX2Jpbyk7CisgICAgICAgIEJJT19mcmVlKGNhY2hlcC0+d3JpdGVfYmlvKTsKKyAgICAgICAgY2FjaGVwLT5yZWFkX2JpbyA9IE5VTEw7CisgICAgICAgIGNhY2hlcC0+d3JpdGVfYmlvID0gTlVMTDsKKyAgICAgICAgRElFSEVSRSgiZmFpbGVkIHRvIGNyZWF0ZSB0aGUgU1NMIHNlc3Npb24gc3RydWN0dXJlIik7CisgICAgfQorICAgICAgICAKKyAgICBTU0xfc2V0X21vZGUodGxzZGF0YS0+c3NsLCBTU0xfTU9ERV9BVVRPX1JFVFJZKTsKKworICAgIC8qIHNldCB0aGUgYmlvcyB0aGF0IG9wZW5zc2wgc2hvdWxkIHJlYWQgZnJvbSBhbmQgd3JpdGUgdG8gKi8KKyAgICAvKiAoYW5kIHdlJ2xsIGRvIHRoZSBvcHBvc2l0ZSkgKi8KKyAgICBTU0xfc2V0X2Jpbyh0bHNkYXRhLT5zc2wsIGNhY2hlcC0+cmVhZF9iaW8sIGNhY2hlcC0+d3JpdGVfYmlvKTsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4zLjEsIHN0ZXAgMToKKyAgICAgICAzKSAgVXNpbmcgdGhlIGRlc3RUcmFuc3BvcnREb21haW4gYW5kIGRlc3RUcmFuc3BvcnRBZGRyZXNzIHZhbHVlcywKKyAgICAgICAgICAgdGhlIGNsaWVudCB3aWxsIGluaXRpYXRlIHRoZSAoRClUTFMgaGFuZHNoYWtlIHByb3RvY29sIHRvCisgICAgICAgICAgIGVzdGFibGlzaCBzZXNzaW9uIGtleXMgZm9yIG1lc3NhZ2UgaW50ZWdyaXR5IGFuZCBlbmNyeXB0aW9uLgorCisgICAgICAgICAgIElmIHRoZSBhdHRlbXB0IHRvIGVzdGFibGlzaCBhIHNlc3Npb24gaXMgdW5zdWNjZXNzZnVsLCB0aGVuCisgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzIGlzIGluY3JlbWVudGVkLCBhbiBlcnJvciBpbmRpY2F0aW9uIGlzCisgICAgICAgICAgIHJldHVybmVkLCBhbmQgcHJvY2Vzc2luZyBzdG9wcy4gIElmIHRoZSBzZXNzaW9uIGZhaWxlZCB0byBvcGVuCisgICAgICAgICAgIGJlY2F1c2UgdGhlIHByZXNlbnRlZCBzZXJ2ZXIgY2VydGlmaWNhdGUgd2FzIHVua25vd24gb3IgaW52YWxpZAorICAgICAgICAgICB0aGVuIHRoZSBzbm1wVGxzdG1TZXNzaW9uVW5rbm93blNlcnZlckNlcnRpZmljYXRlIG9yCisgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIE1VU1QgYmUgaW5jcmVtZW50ZWQgYW5kCisgICAgICAgICAgIGEgc25tcFRsc3RtU2VydmVyQ2VydGlmaWNhdGVVbmtub3duIG9yCisgICAgICAgICAgIHNubXBUbHN0bVNlcnZlckludmFsaWRDZXJ0aWZpY2F0ZSBub3RpZmljYXRpb24gU0hPVUxEIGJlIHNlbnQgYXMKKyAgICAgICAgICAgYXBwcm9wcmlhdGUuICBSZWFzb25zIGZvciBzZXJ2ZXIgY2VydGlmaWNhdGUgaW52YWxpZGF0aW9uCisgICAgICAgICAgIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbgorICAgICAgICAgICBmYWlsdXJlcyBhbmQgYW4gdW5leHBlY3RlZCBwcmVzZW50ZWQgY2VydGlmaWNhdGUgaWRlbnRpdHkuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICArIEJlY2F1c2Ugd2UncmUgd29ya2luZyBhc3luY3Jvbm91c2x5IHRoZSByZWFsICJlbmQiIHBvaW50IG9mCisgICAgICAgICBvcGVuaW5nIGEgY29ubmVjdGlvbiBkb2Vzbid0IG9jY3VyIGhlcmUgYXMgY2VydGlmaWNhdGUKKyAgICAgICAgIHZlcmlmaWNhdGlvbiBhbmQgb3RoZXIgdGhpbmdzIG5lZWRzIHRvIGhhcHBlbiBmaXJzdCBpbiB0aGUKKyAgICAgICAgIHZlcmlmeSBjYWxsYmFjaywgZXRjLiAgU2VlIHRoZSBuZXRzbm1wX2R0bHN1ZHBfcmVjdigpCisgICAgICAgICBmdW5jdGlvbiBmb3IgdGhlIGZpbmFsIHByb2Nlc3NpbmcuCisgICAgKi8KKyAgICAvKiBzZXQgdGhlIFNTTCBub3Rpb24gb2Ygd2VfYXJlX2NsaWVudC9zZXJ2ZXIgKi8KKyAgICBpZiAod2VfYXJlX2NsaWVudCkKKyAgICAgICAgU1NMX3NldF9jb25uZWN0X3N0YXRlKHRsc2RhdGEtPnNzbCk7CisgICAgZWxzZSB7CisgICAgICAgIC8qIFhYWDogd2UgbmVlZCB0byBvbmx5IGNyZWF0ZSBjYWNoZSBlbnRyaWVzIHdoZW4gY29va2llcyBzdWNjZWVkICovCisKKyAgICAgICAgU1NMX3NldF9vcHRpb25zKHRsc2RhdGEtPnNzbCwgU1NMX09QX0NPT0tJRV9FWENIQU5HRSk7CisKKyAgICAgICAgU1NMX3NldF9leF9kYXRhKHRsc2RhdGEtPnNzbCwgb3BlbnNzbF9hZGRyX2luZGV4LCBjYWNoZXApOworCisgICAgICAgIFNTTF9zZXRfYWNjZXB0X3N0YXRlKHRsc2RhdGEtPnNzbCk7CisgICAgfQorCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjMuMSwgc3RlcCAxOgorICAgICAgIDYpICBUaGUgVExTVE0tc3BlY2lmaWMgc2Vzc2lvbiBpZGVudGlmaWVyICh0bHN0bVNlc3Npb25JRCkgaXMgc2V0IGluCisgICAgICAgICAgIHRoZSB0bVNlc3Npb25JRCBvZiB0aGUgdG1TdGF0ZVJlZmVyZW5jZSBwYXNzZWQgdG8gdGhlIFRMUworICAgICAgICAgICBUcmFuc3BvcnQgTW9kZWwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2Vzc2lvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZAorICAgICAgICAgICBzdWNjZXNzZnVsbHkgYW5kIHRvIHBvaW50IHRvIGEgc3BlY2lmaWMgKEQpVExTIGNvbm5lY3Rpb24gZm9yCisgICAgICAgICAgIGZ1dHVyZSB1c2UuICBUaGUgdGxzdG1TZXNzaW9uSUQgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIExDRCBmb3IKKyAgICAgICAgICAgbGF0ZXIgbG9va3VwIGR1cmluZyBwcm9jZXNzaW5nIG9mIGluY29taW5nIG1lc3NhZ2VzCisgICAgICAgICAgIChTZWN0aW9uIDUuMS4yKS4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICsgb3VyIHNlc3Npb25JRCBpcyBzdG9yZWQgYXMgdGhlIHRyYW5zcG9ydCdzIGRhdGEgcG9pbnRlciBtZW1iZXIKKyAgICAqLworICAgIERFQlVHTVNHVCgoIjk6ZHRsc3VkcDpiaW9fY2FjaGU6Y3JlYXRlZCIsICIlcFxuIiwgY2FjaGVwKSk7CisKKyAgICByZXR1cm4gY2FjaGVwOworfQorCitzdGF0aWMgYmlvX2NhY2hlICoKK2ZpbmRfb3JfY3JlYXRlX2Jpb19jYWNoZShuZXRzbm1wX3RyYW5zcG9ydCAqdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3NvY2thZGRyX3N0b3JhZ2UgKmZyb21fYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgd2VfYXJlX2NsaWVudCkgeworICAgIGJpb19jYWNoZSAqY2FjaGVwID0gZmluZF9iaW9fY2FjaGUoZnJvbV9hZGRyKTsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZXApIHsKKyAgICAgICAgLyogbm9uZSBmb3VuZDsgbmVlZCB0byBzdGFydCBhIG5ldyBjb250ZXh0ICovCisgICAgICAgIGNhY2hlcCA9IHN0YXJ0X25ld19jYWNoZWRfY29ubmVjdGlvbih0LCBmcm9tX2FkZHIsIHdlX2FyZV9jbGllbnQpOworICAgICAgICBpZiAoTlVMTCA9PSBjYWNoZXApIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gb3BlbiBhIG5ldyBkdGxzIGNvbm5lY3Rpb25cbiIpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUKCgiOTpkdGxzdWRwOmJpb19jYWNoZTpmb3VuZCIsICIlcFxuIiwgY2FjaGVwKSk7CisgICAgfQorICAgIHJldHVybiBjYWNoZXA7Cit9CisKK3N0YXRpYyBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICoKK19leHRyYWN0X2FkZHJfcGFpcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqb3BhcXVlLCBpbnQgb2xlbikKK3sKKyAgICBuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworCisgICAgaWYgKG9wYXF1ZSAmJiBvbGVuID09IHNpemVvZihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpKSB7CisgICAgICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9CisgICAgICAgICAgICAobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICopIG9wYXF1ZTsKKworICAgICAgICBpZiAodG1TdGF0ZVJlZi0+aGF2ZV9hZGRyZXNzZXMpCisgICAgICAgICAgICBhZGRyX3BhaXIgPSAmKHRtU3RhdGVSZWYtPmFkZHJlc3Nlcyk7CisgICAgfQorICAgIGlmICgoTlVMTCA9PSBhZGRyX3BhaXIpICYmIChOVUxMICE9IHQpKSB7CisgICAgICAgIGlmICh0LT5kYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSkKKyAgICAgICAgICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICopICh0LT5kYXRhKTsKKyAgICAgICAgZWxzZSBpZiAodC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihfbmV0c25tcFRMU0Jhc2VEYXRhKSkgeworICAgICAgICAgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSA9IChfbmV0c25tcFRMU0Jhc2VEYXRhICopIHQtPmRhdGE7CisgICAgICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqKSAodGxzZGF0YS0+YWRkcik7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gYWRkcl9wYWlyOworfQorCitzdGF0aWMgc3RydWN0IHNvY2thZGRyICoKK19maW5kX3JlbW90ZV9zb2NrYWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqb3BhcXVlLCBpbnQgb2xlbiwgaW50ICpzb2NrbGVuKQoreworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IF9leHRyYWN0X2FkZHJfcGFpcih0LCBvcGFxdWUsIG9sZW4pOworICAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSBOVUxMOworCisgICAgaWYgKE5VTEwgPT0gYWRkcl9wYWlyKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHNhID0gJmFkZHJfcGFpci0+cmVtb3RlX2FkZHIuc2E7CisgICAgKnNvY2tsZW4gPSBuZXRzbm1wX3NvY2thZGRyX3NpemUoc2EpOworICAgIHJldHVybiBzYTsKK30KKworCisvKgorICogUmVhZHMgZGF0YSBmcm9tIG91ciBpbnRlcm5hbCBvcGVuc3NsIG91dGdvaW5nIEJJTyBhbmQgc2VuZHMgYW55CisgKiBxdWV1ZWQgcGFja2V0cyBvdXQgdGhlIFVEUCBwb3J0CisgKi8KK3N0YXRpYyBpbnQKK19uZXRzbm1wX3NlbmRfcXVldWVkX2R0bHNfcGt0cyhuZXRzbm1wX3RyYW5zcG9ydCAqdCwgYmlvX2NhY2hlICpjYWNoZXApIHsKKyAgICBpbnQgb3V0c2l6ZSwgcmMyOworICAgIHVfY2hhciBvdXRidWZbNjU1MzVdOworICAgIAorICAgIERFQlVHVFJBQ0VUT0soIjk6ZHRsc3VkcCIpOworCisgICAgLyogZm9yIG1lbW9yeSBiaW9zLCB3ZSBub3cgcmVhZCBmcm9tIG9wZW5zc2wncyB3cml0ZQorICAgICAgIGJ1ZmZlciAoaWUsIHRoZSBwYWNrZXQgdG8gZ28gb3V0KSBhbmQgc2VuZCBpdCBvdXQKKyAgICAgICB0aGUgdWRwIHBvcnQgbWFudWFsbHkgKi8KKworICAgIG91dHNpemUgPSBCSU9fcmVhZChjYWNoZXAtPndyaXRlX2Jpbywgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSk7CisgICAgaWYgKG91dHNpemUgPiAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgImhhdmUgJWQgYnl0ZXMgdG8gc2VuZFxuIiwgb3V0c2l6ZSkpOworCisgICAgICAgIC8qIHNob3VsZCBhbHdheXMgYmUgdHJ1ZS4gKi8KKyAgICAgICAgaW50IHNvY2tzaXplOworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworICAgICAgICBzYSA9IF9maW5kX3JlbW90ZV9zb2NrYWRkcih0LCBOVUxMLCAwLCAmc29ja3NpemUpOworICAgICAgICBpZiAoTlVMTCA9PSBzYSkKKyAgICAgICAgICAgIHNhID0gJmNhY2hlcC0+c2FzLnNhOworICAgICAgICBzb2Nrc2l6ZSA9IG5ldHNubXBfc29ja2FkZHJfc2l6ZShzYSk7CisgICAgICAgIHJjMiA9IHQtPmJhc2VfdHJhbnNwb3J0LT5mX3NlbmQodCwgb3V0YnVmLCBvdXRzaXplLCAodm9pZCoqKSZzYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc29ja3NpemUpOworICAgICAgICBpZiAocmMyID09IC0xKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIHNlbmQgYSBEVExTIHNwZWNpZmljIHBhY2tldFxuIik7CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgREVCVUdNU0dUTCgoIjk6ZHRsc3VkcCIsICJoYXZlIDAgYnl0ZXMgdG8gc2VuZFxuIikpOworCisgICAgcmV0dXJuIG91dHNpemU7Cit9CisKKy8qCisgKiBJZiB3ZSBoYXZlIGFueSBvdXRnb2luZyBTTk1QIGRhdGEgcXVldWVkIHRoYXQgT3BlblNTTC9EVExTIGNvdWxkbid0IHNlbmQKKyAqIChsaWtlbHkgZHVlIHRvIERUTFMgY29udHJvbCBwYWNrZXRzIG5lZWRpbmcgdG8gZ28gb3V0IGZpcnN0KQorICogdGhlbiB0aGlzIGZ1bmN0aW9uIGF0dGVtcHRzIHRvIHNlbmQgdGhlbS4KKyAqLworLyogcmV0dXJucyBTTk1QRVJSX1NVQ0NFU1MgaWYgd2Ugc3VjY2VlZGVkIGluIGdldHRpbmcgdGhlIGRhdGEgb3V0ICovCisvKiByZXR1cm5zIFNOTVBFUlJfR0VORVJSIGlmIHdlIHN0aWxsIG5lZWQgbW9yZSB0aW1lICovCitzdGF0aWMgaW50CitfbmV0c25tcF9iaW9fdHJ5X2FuZF93cml0ZV9idWZmZXJlZChuZXRzbm1wX3RyYW5zcG9ydCAqdCwgYmlvX2NhY2hlICpjYWNoZXApIHsKKyAgICBpbnQgcmM7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKyAgICAKKyAgICBERUJVR1RSQUNFVE9LKCI5OmR0bHN1ZHAiKTsKKworICAgIHRsc2RhdGEgPSBjYWNoZXAtPnRsc2RhdGE7CisKKyAgICAvKiBtYWtlIHN1cmUgd2UgaGF2ZSBzb21ldGhpbmcgdG8gd3JpdGUgKi8KKyAgICBpZiAoIWNhY2hlcC0+d3JpdGVfY2FjaGUgfHwgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPT0gMCkKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKworICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgIlRyeWluZyB0byB3cml0ZSAlIiBORVRTTk1QX1BSSXogImQgb2YgYnVmZmVyZWQgZGF0YVxuIiwKKyAgICAgICAgICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbikpOworCisgICAgLyogdHJ5IGFuZCB3cml0ZSBvdXQgdGhlIGNhY2hlZCBkYXRhICovCisgICAgcmMgPSBTU0xfd3JpdGUodGxzZGF0YS0+c3NsLCBjYWNoZXAtPndyaXRlX2NhY2hlLCBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbik7CisKKyAgICB3aGlsZSAocmMgPT0gLTEpIHsKKyAgICAgICAgaW50IGVycm51bSA9IFNTTF9nZXRfZXJyb3IodGxzZGF0YS0+c3NsLCByYyk7CisgICAgICAgIGludCBieXRlc291dDsKKworICAgICAgICAvKiBkb24ndCB0cmVhdCB3YW50X3JlYWQvd3JpdGUgZXJyb3JzIGFzIHJlYWwgZXJyb3JzICovCisgICAgICAgIGlmIChlcnJudW0gIT0gU1NMX0VSUk9SX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgZXJybnVtICE9IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJzc2xfd3JpdGUgZXJyb3IgKG9mIGJ1ZmZlcmVkIGRhdGEpXG4iKSk7IAorICAgICAgICAgICAgX29wZW5zc2xfbG9nX2Vycm9yKHJjLCB0bHNkYXRhLT5zc2wsICJTU0xfd3JpdGUiKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIGNoZWNrIHRvIHNlZSBpZiB3ZSBoYXZlIG91dGdvaW5nIERUTFMgcGFja2V0cyB0byBzZW5kICovCisgICAgICAgIC8qIChTU0xfd3JpdGUgY291bGQgaGF2ZSBjcmVhdGVkIERUTFMgY29udHJvbCBwYWNrZXRzKSAqLyAKKyAgICAgICAgYnl0ZXNvdXQgPSBfbmV0c25tcF9zZW5kX3F1ZXVlZF9kdGxzX3BrdHModCwgY2FjaGVwKTsKKworICAgICAgICAvKiBJZiB3YW50X3JlYWQvd3JpdGUgYnV0IGZhaWxlZCB0byBhY3R1YWxseSBzZW5kIGFueXRoaW5nCisgICAgICAgICAgIHRoZW4gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgb3RoZXIgc2lkZSwgc28gcXVpdCAqLworICAgICAgICBpZiAoKGVycm51bSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgZXJybnVtID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSAmJgorICAgICAgICAgICAgYnl0ZXNvdXQgPD0gMCkgeworICAgICAgICAgICAgLyogd2UndmUgZmFpbGVkOyBtdXN0IG5lZWQgdG8gd2FpdCBsb25nZXIgKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHJldHJ5IHdyaXRpbmcgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoIjk6ZHRsc3VkcCIsICJyZWNhbGxpbmcgc3NsX3dyaXRlXG4iKSk7IAorICAgICAgICByYyA9IFNTTF93cml0ZSh0bHNkYXRhLT5zc2wsIGNhY2hlcC0+d3JpdGVfY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuKTsKKyAgICB9CisKKyAgICBpZiAocmMgPiAwKQorICAgICAgICBjYWNoZXAtPm1zZ251bSsrOworICAgIAorICAgIGlmIChfbmV0c25tcF9zZW5kX3F1ZXVlZF9kdGxzX3BrdHModCwgY2FjaGVwKSA+IDApIHsKKyAgICAgICAgU05NUF9GUkVFKGNhY2hlcC0+d3JpdGVfY2FjaGUpOworICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbiA9IDA7CisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgIiAgV3JpdGUgd2FzIHN1Y2Nlc3NmdWxcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICB9CisgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAiICBmYWlsZWQgdG8gc2VuZCBvdmVyIFVEUCBzb2NrZXRcbiIpKTsKKyAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7Cit9CisKK3N0YXRpYyBpbnQKK19uZXRzbm1wX2FkZF9idWZmZXJlZF9kYXRhKGJpb19jYWNoZSAqY2FjaGVwLCBjaGFyICpidWYsIHNpemVfdCBzaXplKSB7CisgICAgaWYgKGNhY2hlcC0+d3JpdGVfY2FjaGUgJiYgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPiAwKSB7CisgICAgICAgIHNpemVfdCBuZXdzaXplID0gY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gKyBzaXplOworCisgICAgICAgIGNoYXIgKm5ld2J1ZiA9IHJlYWxsb2MoY2FjaGVwLT53cml0ZV9jYWNoZSwgbmV3c2l6ZSk7CisgICAgICAgIGlmIChOVUxMID09IG5ld2J1ZikgeworICAgICAgICAgICAgLyogYWNrISBtYWxsb2MgZmFpbHVyZSAqLworICAgICAgICAgICAgLyogWFhYOiBmcmVlIGFuZCBjbG9zZSAqLworICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgICAgICB9CisgICAgICAgIGNhY2hlcC0+d3JpdGVfY2FjaGUgPSBuZXdidWY7CisKKyAgICAgICAgLyogd3JpdGUgdGhlIG5ldyBwYWNrZXQgdG8gdGhlIGVuZCAqLworICAgICAgICBtZW1jcHkoY2FjaGVwLT53cml0ZV9jYWNoZSArIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuLAorICAgICAgICAgICAgICAgYnVmLCBzaXplKTsKKyAgICAgICAgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPSBuZXdzaXplOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhY2hlcC0+d3JpdGVfY2FjaGUgPSBuZXRzbm1wX21lbWR1cChidWYsIHNpemUpOworICAgICAgICBpZiAoIWNhY2hlcC0+d3JpdGVfY2FjaGUpIHsKKyAgICAgICAgICAgIC8qIGFjayEgbWFsbG9jIGZhaWx1cmUgKi8KKyAgICAgICAgICAgIC8qIFhYWDogZnJlZSBhbmQgY2xvc2UgKi8KKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAgICAgfQorICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbiA9IHNpemU7CisgICAgfQorICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyBpbnQKK25ldHNubXBfZHRsc3VkcF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IC0xOworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgc3RydWN0IHNvY2thZGRyICpmcm9tOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9IE5VTEw7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKyAgICBiaW9fY2FjaGUgKmNhY2hlcDsKKworICAgIERFQlVHVFJBQ0VUT0soIjk6ZHRsc3VkcCIpOworCisgICAgaWYgKE5VTEwgPT0gdCB8fCB0LT5zb2NrID09IDApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIC8qIGNyZWF0ZSBhIHRtU3RhdGVSZWYgY2FjaGUgZm9yIHNsb3cgZmlsbC1pbiAqLworICAgIHRtU3RhdGVSZWYgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSk7CisKKyAgICBpZiAodG1TdGF0ZVJlZiA9PSBOVUxMKSB7CisgICAgICAgICpvcGFxdWUgPSBOVUxMOworICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBTZXQgdGhlIHRyYW5zcG9ydERvbWFpbiAqLworICAgIG1lbWNweSh0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW4sCisgICAgICAgICAgIG5ldHNubXBEVExTVURQRG9tYWluLCBzaXplb2YobmV0c25tcERUTFNVRFBEb21haW5bMF0pICoKKyAgICAgICAgICAgbmV0c25tcERUTFNVRFBEb21haW5fbGVuKTsKKyAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnREb21haW5MZW4gPSBuZXRzbm1wRFRMU1VEUERvbWFpbl9sZW47CisKKyAgICBhZGRyX3BhaXIgPSAmdG1TdGF0ZVJlZi0+YWRkcmVzc2VzOworICAgIHRtU3RhdGVSZWYtPmhhdmVfYWRkcmVzc2VzID0gMTsKKyAgICBmcm9tID0gKHN0cnVjdCBzb2NrYWRkciAqKSAmKGFkZHJfcGFpci0+cmVtb3RlX2FkZHIpOworCisgICAgd2hpbGUgKHJjIDwgMCkgeworICAgICAgICBjaGFyICpvcGFxdWUgPSBOVUxMOworICAgICAgICBpbnQgb2xlbjsKKyAgICAgICAgcmMgPSB0LT5iYXNlX3RyYW5zcG9ydC0+Zl9yZWN2KHQsIGJ1Ziwgc2l6ZSwgKHZvaWQqKikmb3BhcXVlLCAmb2xlbik7CisgICAgICAgIGlmIChyYyA+IDApCisgICAgICAgICAgICBtZW1jcHkoZnJvbSwgb3BhcXVlLCBvbGVuKTsKKyAgICAgICAgU05NUF9GUkVFKG9wYXF1ZSk7CisgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAicmVjZWl2ZWQgJWQgcmF3IGJ5dGVzIG9uIHdheSB0byBkdGxzXG4iLCByYykpOworICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAicmVjdmZyb20gZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgIFNOTVBfRlJFRSh0bVN0YXRlUmVmKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIG5vdyB0aGF0IHdlIGhhdmUgdGhlIGZyb20gYWRkcmVzcyBmaWxsZWQgaW4sIHdlIGNhbiBsb29rIHVwCisgICAgICAgdGhlIG9wZW5zc2wgY29udGV4dCBhbmQgaGF2ZSBvcGVuc3NsIHJlYWQgYW5kIHByb2Nlc3MKKyAgICAgICBhcHByb3ByaWF0ZWx5ICovCisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMSwgc3RlcCAxOgorICAgIDEpICBEZXRlcm1pbmUgdGhlIHRsc3RtU2Vzc2lvbklEIGZvciB0aGUgaW5jb21pbmcgbWVzc2FnZS4gIFRoZQorICAgICAgICB0bHN0bVNlc3Npb25JRCBNVVNUIGJlIGEgdW5pcXVlIHNlc3Npb24gaWRlbnRpZmllciBmb3IgdGhpcworICAgICAgICAoRClUTFMgY29ubmVjdGlvbi4gIFRoZSBjb250ZW50cyBhbmQgZm9ybWF0IG9mIHRoaXMgaWRlbnRpZmllcgorICAgICAgICBhcmUgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IGFzIGxvbmcgYXMgaXQgaXMgdW5pcXVlIHRvIHRoZQorICAgICAgICBzZXNzaW9uLiAgQSBzZXNzaW9uIGlkZW50aWZpZXIgTVVTVCBOT1QgYmUgcmV1c2VkIHVudGlsIGFsbAorICAgICAgICByZWZlcmVuY2VzIHRvIGl0IGFyZSBubyBsb25nZXIgaW4gdXNlLiAgVGhlIHRtU2Vzc2lvbklEIGlzIGVxdWFsCisgICAgICAgIHRvIHRoZSB0bHN0bVNlc3Npb25JRCBkaXNjdXNzZWQgaW4gU2VjdGlvbiA1LjEuMS4gdG1TZXNzaW9uSUQKKyAgICAgICAgcmVmZXJzIHRvIHRoZSBzZXNzaW9uIGlkZW50aWZpZXIgd2hlbiBzdG9yZWQgaW4gdGhlCisgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgYW5kIHRsc3RtU2Vzc2lvbklEIHJlZmVycyB0byB0aGUgc2Vzc2lvbgorICAgICAgICBpZGVudGlmaWVyIHdoZW4gc3RvcmVkIGluIHRoZSBMQ0QuICBUaGV5IE1VU1QgYWx3YXlzIGJlIGVxdWFsCisgICAgICAgIHdoZW4gcHJvY2Vzc2luZyBhIGdpdmVuIHNlc3Npb24ncyB0cmFmZmljLgorCisgICAgICAgIElmIHRoaXMgaXMgdGhlIGZpcnN0IG1lc3NhZ2UgcmVjZWl2ZWQgdGhyb3VnaCB0aGlzIHNlc3Npb24gYW5kCisgICAgICAgIHRoZSBzZXNzaW9uIGRvZXMgbm90IGhhdmUgYW4gYXNzaWduZWQgdGxzdG1TZXNzaW9uSUQgeWV0IHRoZW4gdGhlCisgICAgICAgIHNubXBUbHN0bVNlc3Npb25BY2NlcHRzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYW5kIGEKKyAgICAgICAgdGxzdG1TZXNzaW9uSUQgZm9yIHRoZSBzZXNzaW9uIGlzIGNyZWF0ZWQuICBUaGlzIHdpbGwgb25seSBoYXBwZW4KKyAgICAgICAgb24gdGhlIHNlcnZlciBzaWRlIG9mIGEgY29ubmVjdGlvbiBiZWNhdXNlIGEgY2xpZW50IHdvdWxkIGhhdmUKKyAgICAgICAgYWxyZWFkeSBhc3NpZ25lZCBhIHRsc3RtU2Vzc2lvbklEIGR1cmluZyB0aGUgb3BlblNlc3Npb24oKQorICAgICAgICBpbnZvY2F0aW9uLiAgSW1wbGVtZW50YXRpb25zIG1heSBoYXZlIHBlcmZvcm1lZCB0aGUgcHJvY2VkdXJlcworICAgICAgICBkZXNjcmliZWQgaW4gU2VjdGlvbiA1LjMuMiBwcmlvciB0byB0aGlzIHBvaW50IG9yIHRoZXkgbWF5CisgICAgICAgIHBlcmZvcm0gdGhlbSBub3csIGJ1dCB0aGUgcHJvY2VkdXJlcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA1LjMuMgorICAgICAgICBNVVNUIGJlIHBlcmZvcm1lZCBiZWZvcmUgY29udGludWluZyBiZXlvbmQgdGhpcyBwb2ludC4KKyAgICAqLworCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjEsIHN0ZXAgMjoKKyAgICAgICAyKSAgQ3JlYXRlIGEgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSBmb3IgdGhlIHN1YnNlcXVlbnQgcmVmZXJlbmNlIGFuZAorICAgICAgICAgICBhc3NpZ24gdGhlIGZvbGxvd2luZyB2YWx1ZXMgd2l0aGluIGl0OgorCisgICAgICAgICAgIHRtVHJhbnNwb3J0RG9tYWluICA9IHNubXBUTFNUQ1BEb21haW4gb3Igc25tcERUTFNVRFBEb21haW4gYXMKKyAgICAgICAgICAgICAgYXBwcm9wcmlhdGUuCisKKyAgICAgICAgICAgdG1UcmFuc3BvcnRBZGRyZXNzICA9IFRoZSBhZGRyZXNzIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZWQgZnJvbS4KKworICAgICAgICAgICB0bVNlY3VyaXR5TGV2ZWwgID0gVGhlIGRlcml2ZWQgdG1TZWN1cml0eUxldmVsIGZvciB0aGUgc2Vzc2lvbiwKKyAgICAgICAgICAgICAgYXMgZGlzY3Vzc2VkIGluIFNlY3Rpb24gMy4xLjIgYW5kIFNlY3Rpb24gNS4zLgorCisgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lICA9IFRoZSBkZXJpdmVkIHRtU2VjdXJpdHlOYW1lIGZvciB0aGUgc2Vzc2lvbiBhcworICAgICAgICAgICAgICBkaXNjdXNzZWQgaW4gU2VjdGlvbiA1LjMuICBUaGlzIHZhbHVlIE1VU1QgYmUgY29uc3RhbnQgZHVyaW5nCisgICAgICAgICAgICAgIHRoZSBsaWZldGltZSBvZiB0aGUgc2Vzc2lvbi4KKworICAgICAgICAgICB0bVNlc3Npb25JRCAgPSBUaGUgdGxzdG1TZXNzaW9uSUQgZGVzY3JpYmVkIGluIHN0ZXAgMSBhYm92ZS4KKyAgICAqLworCisgICAgLyogaWYgd2UgZG9uJ3QgaGF2ZSBhIGNhY2hlcCBmb3IgdGhpcyBjb25uZWN0aW9uIHRoZW4KKyAgICAgICB3ZSdyZSByZWNlaXZpbmcgc29tZXRoaW5nIG5ldyBhbmQgYXJlIHRoZSBzZXJ2ZXIKKyAgICAgICBzaWRlICovCisgICAgY2FjaGVwID0KKyAgICAgICAgZmluZF9vcl9jcmVhdGVfYmlvX2NhY2hlKHQsICZhZGRyX3BhaXItPnJlbW90ZV9hZGRyLCBXRV9BUkVfU0VSVkVSKTsKKyAgICBpZiAoTlVMTCA9PSBjYWNoZXApIHsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTkFDQ0VQVFMpOworICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgdGxzZGF0YSA9IGNhY2hlcC0+dGxzZGF0YTsKKyAgICBpZiAoTlVMTCA9PSB0bHNkYXRhLT5zc2wpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogdGhpcyBoYXBwZW5zIHdoZW4gdGhlIHNlcnZlciBzdGFydHMgYnV0IGRvZXNuJ3QgaGF2ZSBhbgorICAgICAgICAgKiBpZGVudGl0eSBhbmQgYSBjbGllbnQgY29ubmVjdHMuLi4KKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJEVExTVURQOiBtaXNzaW5nIHRsc2RhdGEhXG4iKTsKKyAgICAgICAgLypzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoIFhYWC1ya3MgPz8/ICk7Ki8KKyAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgLSB3ZSB1c2UgdGhlIHQtPmRhdGEgbWVtb3J5IHBvaW50ZXIgYXMgdGhlIHNlc3Npb24gSUQKKyAgICAgICAtIHRoZSB0cmFuc3BvcnQgZG9tYWluIGlzIGFscmVhZHkgdGhlIGNvcnJlY3QgdHlwZSBpZiB3ZSBnb3QgaGVyZQorICAgICAgIC0gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24geWV0IChlZywgbm8gdG1TZXNzaW9uSUQgZnJvbSB0aGUKKyAgICAgICAgIHNwZWNzKSB0aGVuIHdlIGNyZWF0ZSBvbmUgYXV0b21hdGljYWxseSBoZXJlLgorICAgICovCisKKyAgICAvKiB3cml0ZSB0aGUgcmVjZWl2ZWQgYnVmZmVyIHRvIHRoZSBtZW1vcnktYmFzZWQgaW5wdXQgYmlvICovCisgICAgQklPX3dyaXRlKGNhY2hlcC0+cmVhZF9iaW8sIGJ1ZiwgcmMpOworCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjEsIHN0ZXAgMzoKKyAgICAgICAzKSAgVGhlIGluY29taW5nTWVzc2FnZSBhbmQgaW5jb21pbmdNZXNzYWdlTGVuZ3RoIGFyZSBhc3NpZ25lZCB2YWx1ZXMKKyAgICAgICAgICAgZnJvbSB0aGUgKEQpVExTIHByb2Nlc3NpbmcuCisgICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgKyByYyA9IGluY29taW5nTWVzc2FnZUxlbmd0aAorICAgICAgICsgYnVmID0gSW5jb21pbmdNZXNzYWdlCisgICAgKi8KKworICAgIC8qIFhYWDogaW4gV2VzJyBvdGhlciBleGFtcGxlIHdlIGRvIGEgU1NMX3BlbmRpbmcoKSBjYWxsCisgICAgICAgdG9vIHRvIGVuc3VyZSB3ZSdyZSByZWFkeSB0byByZWFkLi4uICBpdCdzIHBvc3NpYmxlCisgICAgICAgdGhhdCBidWZmZXJlZCBzdHVmZiBpbiBvcGVuc3NsIHdvbid0IGJlIGNhdWdodCBieSB0aGUKKyAgICAgICBuZXQtc25tcCBzZWxlY3QgbG9vcCBiZWNhdXNlIGl0J3MgYWxyZWFkeSBiZWVuIHB1bGxlZAorICAgICAgIG91dDsgbmVlZCB0byBkZWFsIHdpdGggdGhpcykgKi8KKyAgICByYyA9IFNTTF9yZWFkKHRsc2RhdGEtPnNzbCwgYnVmLCBzaXplKTsKKworICAgIC8qCisgICAgICogbW92ZWQgbmV0c25tcF9vcGVuc3NsX251bGxfY2hlY2tzIHRvIG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdi4KKyAgICAgKiBjdXJyZW50bHkgbmV0c25tcF90bHNiYXNlX3dyYXB1cF9yZWN2IGlzIHdoZXJlIHdlIGNoZWNrIGZvcgorICAgICAqIGFsZ29yaXRobSBjb21wbGlhbmNlLCBidXQgd2UgKHNvbWV0aW1lcykga25vdyB0aGUgYWxnb3JpdGhtcworICAgICAqIGF0IHRoaXMgcG9pbnQsIHNvIHdlIGNvdWxkIGJhaWwgZWFybGllciAoaGVyZSkuLi4KKyAgICAgKi8KKworICAgIHdoaWxlIChyYyA9PSAtMSkgeworICAgICAgICBpbnQgZXJybnVtID0gU1NMX2dldF9lcnJvcih0bHNkYXRhLT5zc2wsIHJjKTsKKyAgICAgICAgaW50IGJ5dGVzb3V0OworCisgICAgICAgIC8qIGRvbid0IHRyZWF0IHdhbnRfcmVhZC93cml0ZSBlcnJvcnMgYXMgcmVhbCBlcnJvcnMgKi8KKyAgICAgICAgaWYgKGVycm51bSAhPSBTU0xfRVJST1JfV0FOVF9SRUFEICYmCisgICAgICAgICAgICBlcnJudW0gIT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgdGxzZGF0YS0+c3NsLCAiU1NMX3JlYWQiKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgLyogY2hlY2sgdG8gc2VlIGlmIHdlIGhhdmUgb3V0Z29pbmcgRFRMUyBwYWNrZXRzIHRvIHNlbmQgKi8KKyAgICAgICAgLyogKFNTTF9yZWFkIGNvdWxkIGhhdmUgY3JlYXRlZCBEVExTIGNvbnRyb2wgcGFja2V0cykgKi8gCisgICAgICAgIGJ5dGVzb3V0ID0gX25ldHNubXBfc2VuZF9xdWV1ZWRfZHRsc19wa3RzKHQsIGNhY2hlcCk7CisKKyAgICAgICAgLyogSWYgd2FudF9yZWFkL3dyaXRlIGJ1dCBmYWlsZWQgdG8gYWN0dWFsbHkgc2VuZAorICAgICAgICAgICBhbnl0aGluZyB0aGVuIHdlIG5lZWQgdG8gd2FpdCBmb3IgdGhlIG90aGVyIHNpZGUsCisgICAgICAgICAgIHNvIHF1aXQgKi8KKyAgICAgICAgaWYgKChlcnJudW0gPT0gU1NMX0VSUk9SX1dBTlRfUkVBRCB8fAorICAgICAgICAgICAgIGVycm51bSA9PSBTU0xfRVJST1JfV0FOVF9XUklURSkgJiYKKyAgICAgICAgICAgIGJ5dGVzb3V0IDw9IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICAvKiByZXRyeSByZWFkaW5nICovCisgICAgICAgIERFQlVHTVNHVEwoKCI5OmR0bHN1ZHAiLCAicmVjYWxsaW5nIHNzbF9yZWFkXG4iKSk7IAorICAgICAgICByYyA9IFNTTF9yZWFkKHRsc2RhdGEtPnNzbCwgYnVmLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAocmMgPT0gLTEpIHsKKyAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworCisgICAgICAgIERFQlVHTVNHVEwoKCI5OmR0bHN1ZHAiLCAibm8gZGVjb2RlZCBkYXRhIGZyb20gZHRsc1xuIikpOworCisgICAgICAgIGlmIChTU0xfZ2V0X2Vycm9yKHRsc2RhdGEtPnNzbCwgcmMpID09IFNTTF9FUlJPUl9XQU5UX1JFQUQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCI5ZHRsc3VkcCIsImhlcmU6IHdhbnQgcmVhZCFcbiIpKTsKKworICAgICAgICAgICAgLyogc2VlIGlmIHdlIGhhdmUgYnVmZmVyZWQgd3JpdGUgZGF0ZSB0byBzZW5kIG91dCBmaXJzdCAqLworICAgICAgICAgICAgaWYgKGNhY2hlcC0+d3JpdGVfY2FjaGUpIHsKKyAgICAgICAgICAgICAgICBfbmV0c25tcF9iaW9fdHJ5X2FuZF93cml0ZV9idWZmZXJlZCh0LCBjYWNoZXApOworICAgICAgICAgICAgICAgIC8qIFhYWDogY2hlY2sgZXJyb3Igb3Igbm90IGhlcmU/ICovCisgICAgICAgICAgICAgICAgLyogKHdoYXQgd291bGQgd2UgZG8gZGlmZmVyZW50bHk/KSAqLworICAgICAgICAgICAgfQorCisgICAgICAgICAgICByYyA9IC0xOyAvKiBYWFg6IGl0J3Mgb2ssIGJ1dCB3aGF0J3MgdGhlIHJpZ2h0IHJldHVybj8gKi8KKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIHRsc2RhdGEtPnNzbCwgIlNTTF9yZWFkIik7CisKKyNpZiAwIC8qIHRvIGR1bXAgY2FjaGUgaWYgd2UgZG9uJ3QgaGF2ZSBhIGNvb2tpZSwgdGhpcyBpcyB3aGVyZSB0byBkbyBpdCAqLworICAgICAgICBpZiAoIShjYWNoZXAtPmZsYWdzICYgTkVUU05NUF9CSU9fSEFWRV9DT09LSUUpKQorICAgICAgICAgICAgcmVtb3ZlX2FuZF9mcmVlX2Jpb19jYWNoZShjYWNoZXApOworI2VuZGlmCisgICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJyZWNlaXZlZCAlZCBkZWNvZGVkIGJ5dGVzIGZyb20gZHRsc1xuIiwgcmMpKTsKKworICAgIGlmICgoMCA9PSByYykgJiYgKFNTTF9nZXRfc2h1dGRvd24odGxzZGF0YS0+c3NsKSAmIFNTTF9SRUNFSVZFRF9TSFVURE9XTikpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAicGVlciBkaXNjb25uZWN0ZWRcbiIpKTsKKyAgICAgICAgY2FjaGVwLT5mbGFncyB8PSBORVRTTk1QX0JJT19ESVNDT05ORUNURUQ7CisgICAgICAgIHJlbW92ZV9hbmRfZnJlZV9iaW9fY2FjaGUoY2FjaGVwKTsKKyAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICByZXR1cm4gcmM7CisgICAgfQorICAgIGNhY2hlcC0+ZmxhZ3MgfD0gTkVUU05NUF9CSU9fQ09OTkVDVEVEOworCisgICAgLyogVW50aWwgd2UndmUgbG9jYWxseSBhc3N1cmVkIG91cnNlbHZlcyB0aGF0IGFsbCBpcyB3ZWxsIGluCisgICAgICAgY2VydGlmaWNhdGUtdmVyaWZpY2F0aW9uLWxhbmQgd2UgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBzdG9wCisgICAgICAgaGVyZSBhbmQgZW5zdXJlIGFsbCBvdXIgcmVxdWlyZWQgY2hlY2tzIGhhdmUgYmVlbiBkb25lLiAqLyAKKyAgICBpZiAoMCA9PSAodGxzZGF0YS0+ZmxhZ3MgJiBORVRTTk1QX1RMU0JBU0VfQ0VSVF9GUF9WRVJJRklFRCkpIHsKKyAgICAgICAgaW50IHZlcmlmeXJlc3VsdDsKKworICAgICAgICBpZiAodGxzZGF0YS0+ZmxhZ3MgJiBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UKSB7CisKKyAgICAgICAgICAgIC8qIHZlcmlmeSB0aGF0IHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBpcyB0aGUgY29ycmVjdCBvbmUgKi8KKworICAgIAkgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjMuMSwgc3RlcCAxOgorICAgIAkgICAgICAgMykgIFVzaW5nIHRoZSBkZXN0VHJhbnNwb3J0RG9tYWluIGFuZAorICAgIAkgICAgICAgICAgIGRlc3RUcmFuc3BvcnRBZGRyZXNzIHZhbHVlcywgdGhlIGNsaWVudCB3aWxsCisgICAgCSAgICAgICAgICAgaW5pdGlhdGUgdGhlIChEKVRMUyBoYW5kc2hha2UgcHJvdG9jb2wgdG8gZXN0YWJsaXNoCisgICAgCSAgICAgICAgICAgc2Vzc2lvbiBrZXlzIGZvciBtZXNzYWdlIGludGVncml0eSBhbmQgZW5jcnlwdGlvbi4KKworICAgIAkgICAgICAgICAgIElmIHRoZSBhdHRlbXB0IHRvIGVzdGFibGlzaCBhIHNlc3Npb24gaXMKKyAgICAJICAgICAgICAgICB1bnN1Y2Nlc3NmdWwsIHRoZW4gc25tcFRsc3RtU2Vzc2lvbk9wZW5FcnJvcnMgaXMKKyAgICAJICAgICAgICAgICBpbmNyZW1lbnRlZCwgYW4gZXJyb3IgaW5kaWNhdGlvbiBpcyByZXR1cm5lZCwgYW5kCisgICAgCSAgICAgICAgICAgcHJvY2Vzc2luZyBzdG9wcy4gIElmIHRoZSBzZXNzaW9uIGZhaWxlZCB0byBvcGVuCisgICAgCSAgICAgICAgICAgYmVjYXVzZSB0aGUgcHJlc2VudGVkIHNlcnZlciBjZXJ0aWZpY2F0ZSB3YXMKKyAgICAJICAgICAgICAgICB1bmtub3duIG9yIGludmFsaWQgdGhlbiB0aGUKKyAgICAJICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uVW5rbm93blNlcnZlckNlcnRpZmljYXRlIG9yCisgICAgCSAgICAgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRTZXJ2ZXJDZXJ0aWZpY2F0ZXMgTVVTVCBiZQorICAgIAkgICAgICAgICAgIGluY3JlbWVudGVkIGFuZCBhIHNubXBUbHN0bVNlcnZlckNlcnRpZmljYXRlVW5rbm93bgorICAgIAkgICAgICAgICAgIG9yIHNubXBUbHN0bVNlcnZlckludmFsaWRDZXJ0aWZpY2F0ZSBub3RpZmljYXRpb24KKyAgICAJICAgICAgICAgICBTSE9VTEQgYmUgc2VudCBhcyBhcHByb3ByaWF0ZS4gIFJlYXNvbnMgZm9yIHNlcnZlcgorICAgIAkgICAgICAgICAgIGNlcnRpZmljYXRlIGludmFsaWRhdGlvbiBpbmNsdWRlcywgYnV0IGlzIG5vdAorICAgIAkgICAgICAgICAgIGxpbWl0ZWQgdG8sIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbiBmYWlsdXJlcyBhbmQKKyAgICAJICAgICAgICAgICBhbiB1bmV4cGVjdGVkIHByZXNlbnRlZCBjZXJ0aWZpY2F0ZSBpZGVudGl0eS4KKyAgICAJICAgICovCisgICAgCSAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4xLCBzdGVwIDE6CisgICAgCSAgICAgICA0KSAgVGhlIChEKVRMUyBjbGllbnQgTVVTVCB0aGVuIHZlcmlmeSB0aGF0IHRoZSAoRClUTFMKKyAgICAJICAgICAgICAgICBzZXJ2ZXIncyBwcmVzZW50ZWQgY2VydGlmaWNhdGUgaXMgdGhlIGV4cGVjdGVkCisgICAgCSAgICAgICAgICAgY2VydGlmaWNhdGUuICBUaGUgKEQpVExTIGNsaWVudCBNVVNUIE5PVCB0cmFuc21pdAorICAgIAkgICAgICAgICAgIFNOTVAgbWVzc2FnZXMgdW50aWwgdGhlIHNlcnZlciBjZXJ0aWZpY2F0ZSBoYXMgYmVlbgorICAgIAkgICAgICAgICAgIGF1dGhlbnRpY2F0ZWQsIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgaGFzIGJlZW4KKyAgICAJICAgICAgICAgICB0cmFuc21pdHRlZCBhbmQgdGhlIFRMUyBjb25uZWN0aW9uIGhhcyBiZWVuIGZ1bGx5CisgICAgCSAgICAgICAgICAgZXN0YWJsaXNoZWQuCisKKyAgICAJICAgICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCBmcm9tCisgICAgCSAgICAgICAgICAgY29uZmlndXJhdGlvbiBiYXNlZCBvbiBTTk1QLVRBUkdFVC1NSUIKKyAgICAJICAgICAgICAgICBjb25maWd1cmF0aW9uLCB0aGVuIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUKKyAgICAJICAgICAgICAgICBERVNDUklQVElPTiBjbGF1c2UgZGVzY3JpYmVzIGhvdyB0aGUgdmVyaWZpY2F0aW9uCisgICAgCSAgICAgICAgICAgaXMgZG9uZSAodXNpbmcgZWl0aGVyIGEgY2VydGlmaWNhdGUgZmluZ2VycHJpbnQsIG9yCisgICAgCSAgICAgICAgICAgYW4gaWRlbnRpdHkgYXV0aGVudGljYXRlZCB2aWEgY2VydGlmaWNhdGlvbiBwYXRoCisgICAgCSAgICAgICAgICAgdmFsaWRhdGlvbikuCisKKyAgICAJICAgICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgcmVhc29ucworICAgIAkgICAgICAgICAgIG90aGVyIHRoYW4gY29uZmlndXJhdGlvbiBmb3VuZCBpbiB0aGUKKyAgICAJICAgICAgICAgICBTTk1QLVRBUkdFVC1NSUIgdGhlbiBjb25maWd1cmF0aW9uIGFuZCBwcm9jZWR1cmVzCisgICAgCSAgICAgICAgICAgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBkb2N1bWVudCBzaG91bGQgYmUKKyAgICAJICAgICAgICAgICBmb2xsb3dlZC4gIENvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcyBTSE9VTEQgYmUKKyAgICAJICAgICAgICAgICBzaW1pbGFyIGluIG5hdHVyZSB0byB0aG9zZSBkZWZpbmVkIGluIHRoZQorICAgIAkgICAgICAgICAgIHNubXBUbHN0bUFkZHJUYWJsZSB0byBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzCisgICAgCSAgICAgICAgICAgbWFuYWdlbWVudCBjb25maWd1cmF0aW9uIHN5c3RlbXMuICBGb3IgZXhhbXBsZSwgYQorICAgIAkgICAgICAgICAgIGNvbW1hbmQtbGluZSB0b29sIGZvciBnZW5lcmF0aW5nIFNOTVAgR0VUcyBtaWdodAorICAgIAkgICAgICAgICAgIHN1cHBvcnQgc3BlY2lmeWluZyBlaXRoZXIgdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlCisgICAgCSAgICAgICAgICAgZmluZ2VycHJpbnQgb3IgdGhlIGV4cGVjdGVkIGhvc3QgbmFtZSBhcyBhIGNvbW1hbmQKKyAgICAJICAgICAgICAgICBsaW5lIGFyZ3VtZW50LgorICAgIAkgICAgKi8KKyAgICAJICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4zLjEsIHN0ZXAgMToKKyAgICAJICAgICAgIDUpICAoRClUTFMgcHJvdmlkZXMgYXNzdXJhbmNlIHRoYXQgdGhlIGF1dGhlbnRpY2F0ZWQKKyAgICAJICAgICAgICAgICBpZGVudGl0eSBoYXMgYmVlbiBzaWduZWQgYnkgYSB0cnVzdGVkIGNvbmZpZ3VyZWQKKyAgICAJICAgICAgICAgICBjZXJ0aWZpY2F0aW9uIGF1dGhvcml0eS4gIElmIHZlcmlmaWNhdGlvbiBvZiB0aGUKKyAgICAJICAgICAgICAgICBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBmYWlscyBpbiBhbnkgd2F5IChmb3IgZXhhbXBsZQorICAgIAkgICAgICAgICAgIGJlY2F1c2Ugb2YgZmFpbHVyZXMgaW4gY3J5cHRvZ3JhcGhpYyB2ZXJpZmljYXRpb24KKyAgICAJICAgICAgICAgICBvciB0aGUgcHJlc2VudGVkIGlkZW50aXR5IGRpZCBub3QgbWF0Y2ggdGhlCisgICAgCSAgICAgICAgICAgZXhwZWN0ZWQgbmFtZWQgZW50aXR5KSB0aGVuIHRoZSBzZXNzaW9uCisgICAgCSAgICAgICAgICAgZXN0YWJsaXNobWVudCBNVVNUIGZhaWwsIHRoZQorICAgIAkgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIG9iamVjdCBpcworICAgIAkgICAgICAgICAgIGluY3JlbWVudGVkLiAgSWYgdGhlIHNlc3Npb24gY2FuIG5vdCBiZSBvcGVuZWQgZm9yCisgICAgCSAgICAgICAgICAgYW55IHJlYXNvbiBhdCBhbGwsIGluY2x1ZGluZyBjcnlwdG9ncmFwaGljCisgICAgCSAgICAgICAgICAgdmVyaWZpY2F0aW9uIGZhaWx1cmVzIGFuZCBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZQorICAgIAkgICAgICAgICAgIGxvb2t1cCBmYWlsdXJlcywgdGhlbiB0aGUKKyAgICAJICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyBjb3VudGVyIGlzIGluY3JlbWVudGVkCisgICAgCSAgICAgICAgICAgYW5kIHByb2Nlc3Npbmcgc3RvcHMuCisgICAgCSAgICAqLworCisJICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorCSAgICAgICArIGluIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24gdGhlIHNlcnZlcidzIGNlcnRpZmljYXRlIGFuZAorCSAgICAgICAgIHByZXNlbnRlZCBjb21tb25uYW1lIG9yIHN1YmplY3RBbHROYW1lIGlzIGNoZWNrZWQKKwkgICAgICAgICBhY2NvcmRpbmcgdG8gdGhlIHJ1bGVzIGluIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUuCisJICAgICovIAorICAgICAgICAgICAgaWYgKCh2ZXJpZnlyZXN1bHQgPSBuZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X3NlcnZlcl9jZXJ0KHRsc2RhdGEtPnNzbCwgdGxzZGF0YSkpCisgICAgICAgICAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmlmeXJlc3VsdCA9PSBTTk1QRVJSX1RMU19OT19DRVJUSUZJQ0FURSkgeworICAgICAgICAgICAgICAgICAgICAvKiBhc3N1bWUgd2Ugc2ltcGx5IGhhdmVuJ3QgcmVjZWl2ZWQgaXQgeWV0IGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3JlIGRhdGEgdG8gd2FpdC1mb3Igb3Igc2VuZCAqLworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgZm9yIHdoZXRoZXIgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgIHNlbmQgc3R1ZmYgZnJvbSBvdXIgZW5kIHRvIGNvbnRpbnVlIHRoZSB0cmFuc2FjdGlvbgorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IGZyZWUgbmVlZGVkIG1lbW9yeSAqLworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRFRMU1VEUDogZmFpbGVkIHRvIHZlcmlmeSBzc2wgY2VydGlmaWNhdGUgKG9mIHRoZSBzZXJ2ZXIpXG4iKTsKKwkJICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05VTktOT1dOU0VSVkVSQ0VSVElGSUNBVEUpOworCQkgICAgLyogU3RlcCA1IHNheXMgdGhlc2UgYXJlIGFsd2F5cyBpbmNyZW1lbnRlZCAqLworCQkgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURTRVJWRVJDRVJUSUZJQ0FURVMpOworCQkgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMpOworICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bHNkYXRhLT5mbGFncyB8PSBORVRTTk1QX1RMU0JBU0VfQ0VSVF9GUF9WRVJJRklFRDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgIlZlcmlmaWVkIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZVxuIikpOworICAgICAgICB9IGVsc2UgeworI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgICAgICAgICAvKiB2ZXJpZnkgdGhhdCB0aGUgY2xpZW50J3MgY2VydGlmaWNhdGUgaXMgdGhlIGNvcnJlY3Qgb25lICovCisgICAgICAgIAorICAgICAgICAgICAgaWYgKCh2ZXJpZnlyZXN1bHQgPSBuZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X2NsaWVudF9jZXJ0KHRsc2RhdGEtPnNzbCwgdGxzZGF0YSkpCisgICAgICAgICAgICAgICAgIT0gU05NUEVSUl9TVUNDRVNTKSB7CisgICAgICAgICAgICAgICAgaWYgKHZlcmlmeXJlc3VsdCA9PSBTTk1QRVJSX1RMU19OT19DRVJUSUZJQ0FURSkgeworICAgICAgICAgICAgICAgICAgICAvKiBhc3N1bWUgd2Ugc2ltcGx5IGhhdmVuJ3QgcmVjZWl2ZWQgaXQgeWV0IGFuZCB0aGVyZQorICAgICAgICAgICAgICAgICAgICAgICBpcyBtb3JlIGRhdGEgdG8gd2FpdC1mb3Igb3Igc2VuZCAqLworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IHByb2JhYmx5IG5lZWQgdG8gY2hlY2sgZm9yIHdoZXRoZXIgd2Ugc2hvdWxkCisgICAgICAgICAgICAgICAgICAgICAgIHNlbmQgc3R1ZmYgZnJvbSBvdXIgZW5kIHRvIGNvbnRpbnVlIHRoZSB0cmFuc2FjdGlvbgorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAvKiBYWFg6IGZyZWUgbmVlZGVkIG1lbW9yeSAqLworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiRFRMU1VEUDogZmFpbGVkIHRvIHZlcmlmeSBzc2wgY2VydGlmaWNhdGUgKG9mIHRoZSBjbGllbnQpXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDTElFTlRDRVJUSUZJQ0FURVMpOworICAgICAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0bHNkYXRhLT5mbGFncyB8PSBORVRTTk1QX1RMU0JBU0VfQ0VSVF9GUF9WRVJJRklFRDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwIiwgIlZlcmlmaWVkIHRoZSBjbGllbnQncyBjZXJ0aWZpY2F0ZVxuIikpOworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHJjID4gMCkKKyAgICAgICAgY2FjaGVwLT5tc2dudW0rKzsKKworICAgIGlmIChCSU9fY3RybF9wZW5kaW5nKGNhY2hlcC0+d3JpdGVfYmlvKSA+IDApIHsKKyAgICAgICAgX25ldHNubXBfc2VuZF9xdWV1ZWRfZHRsc19wa3RzKHQsIGNhY2hlcCk7CisgICAgfQorCisgICAgREVCVUdJRiAoIjk6ZHRsc3VkcCIpIHsKKyAgICAgICAgY2hhciAqc3RyID0KKyAgICAgICAgICAgIHQtPmJhc2VfdHJhbnNwb3J0LT5mX2ZtdGFkZHIodCwgYWRkcl9wYWlyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCI5OmR0bHN1ZHAiLAorICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgcmMsIHN0cikpOworICAgICAgICBmcmVlKHN0cik7CisgICAgfQorCisgICAgLyogc2VlIGlmIHdlIGhhdmUgYnVmZmVyZWQgd3JpdGUgZGF0ZSB0byBzZW5kIG91dCBmaXJzdCAqLworICAgIGlmIChjYWNoZXAtPndyaXRlX2NhY2hlKSB7CisgICAgICAgIGlmIChTTk1QRVJSX0dFTkVSUiA9PQorICAgICAgICAgICAgX25ldHNubXBfYmlvX3RyeV9hbmRfd3JpdGVfYnVmZmVyZWQodCwgY2FjaGVwKSkgeworICAgICAgICAgICAgLyogd2Ugc3RpbGwgaGF2ZSBkYXRhIHRoYXQgY2FuJ3QgZ2V0IG91dCBpbiB0aGUgYnVmZmVyICovCisgICAgICAgICAgICAvKiBYWFg6IG5vdGhpbmcgdG8gZG8gaGVyZT8gKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YodG1TdGF0ZVJlZiwgdGxzZGF0YSwgb3BhcXVlLCBvbGVuZ3RoKSAhPQorICAgICAgICBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4xLCBzdGVwIDQ6CisgICAgICAgNCkgIFRoZSBUTFMgVHJhbnNwb3J0IE1vZGVsIHBhc3NlcyB0aGUgdHJhbnNwb3J0RG9tYWluLAorICAgICAgICAgICB0cmFuc3BvcnRBZGRyZXNzLCBpbmNvbWluZ01lc3NhZ2UsIGFuZCBpbmNvbWluZ01lc3NhZ2VMZW5ndGggdG8KKyAgICAgICAgICAgdGhlIERpc3BhdGNoZXIgdXNpbmcgdGhlIHJlY2VpdmVNZXNzYWdlIEFTSToKKworICAgICAgICAgIHN0YXR1c0luZm9ybWF0aW9uID0KKyAgICAgICAgICByZWNlaXZlTWVzc2FnZSgKKyAgICAgICAgICBJTiAgIHRyYW5zcG9ydERvbWFpbiAgICAgLS0gc25tcFRMU1RDUERvbWFpbiBvciBzbm1wRFRMU1VEUERvbWFpbiwKKyAgICAgICAgICBJTiAgIHRyYW5zcG9ydEFkZHJlc3MgICAgLS0gYWRkcmVzcyBmb3IgdGhlIHJlY2VpdmVkIG1lc3NhZ2UKKyAgICAgICAgICBJTiAgIGluY29taW5nTWVzc2FnZSAgICAgICAgLS0gdGhlIHdob2xlIFNOTVAgbWVzc2FnZSBmcm9tIChEKVRMUworICAgICAgICAgIElOICAgaW5jb21pbmdNZXNzYWdlTGVuZ3RoICAtLSB0aGUgbGVuZ3RoIG9mIHRoZSBTTk1QIG1lc3NhZ2UKKyAgICAgICAgICBJTiAgIHRtU3RhdGVSZWZlcmVuY2UgICAgLS0gdHJhbnNwb3J0IGluZm8KKyAgICAgICAgICAgKQorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6IHRob3NlIHBhbWF0ZXJlcyBhcmUgYWxsIHBhc3NlZCBvdXR3YXJkCisgICAgICAgdXNpbmcgdGhlIGZ1bmN0aW9ucyBhcmd1bWVudHMgYW5kIHRoZSByZXR1cm4gY29kZSBiZWxvdyAodGhlIGxlbmd0aCkgKi8KKworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfZHRsc3VkcF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgYmlvX2NhY2hlICpjYWNoZXAgPSBOVUxMOworICAgIG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqdG1TdGF0ZVJlZiA9IE5VTEw7CisgICAgdV9jaGFyIG91dGJ1Zls2NTUzNV07CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSA9IE5VTEw7CisgICAgaW50IHNvY2tzaXplOworICAgIHN0cnVjdCBzb2NrYWRkciAqc2E7CisgICAgCisgICAgREVCVUdUUkFDRVRPSygiOTpkdGxzdWRwIik7CisgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAic2VuZGluZyAlZCBieXRlc1xuIiwgc2l6ZSkpOworCisgICAgaWYgKE5VTEwgPT0gdCB8fCB0LT5zb2NrIDw9IDApIHsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiaW52YWxpZCBuZXRzbm1wX2R0bHN1ZHBfc2VuZCB1c2FnZVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAvKiBkZXRlcm1pbmUgcmVtb3RlIGFkZHJlc3NlcyAqLworICAgIGFkZHJfcGFpciA9IF9leHRyYWN0X2FkZHJfcGFpcih0LCBvcGFxdWUgPyAqb3BhcXVlIDogTlVMTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2xlbmd0aCA/ICpvbGVuZ3RoIDogMCk7CisgICAgaWYgKE5VTEwgPT0gYWRkcl9wYWlyKSB7CisgICAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMiwgc3RlcCAxOgorICAgICAgIDEpICBJZiB0bVN0YXRlUmVmZXJlbmNlIGRvZXMgbm90IHJlZmVyIHRvIGEgY2FjaGUgY29udGFpbmluZyB2YWx1ZXMKKyAgICAgICAgICAgZm9yIHRtVHJhbnNwb3J0RG9tYWluLCB0bVRyYW5zcG9ydEFkZHJlc3MsIHRtU2VjdXJpdHlOYW1lLAorICAgICAgICAgICB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwsIGFuZCB0bVNhbWVTZWN1cml0eSwgdGhlbiBpbmNyZW1lbnQgdGhlCisgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkQ2FjaGVzIGNvdW50ZXIsIGRpc2NhcmQgdGhlIG1lc3NhZ2UsIGFuZAorICAgICAgICAgICByZXR1cm4gdGhlIGVycm9yIGluZGljYXRpb24gaW4gdGhlIHN0YXR1c0luZm9ybWF0aW9uLiAgUHJvY2Vzc2luZworICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2Ugc3RvcHMuCisgICAgICAqLworICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OSU5WQUxJRENBQ0hFUyk7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJkdGxzdWRwX3NlbmQ6IGNhbid0IGdldCBhZGRyZXNzIHRvIHNlbmQgdG9cbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjIsIHN0ZXAgMjoKKyAgICAgICAyKSAgRXh0cmFjdCB0aGUgdG1TZXNzaW9uSUQsIHRtVHJhbnNwb3J0RG9tYWluLCB0bVRyYW5zcG9ydEFkZHJlc3MsCisgICAgICAgICAgIHRtU2VjdXJpdHlOYW1lLCB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwsIGFuZCB0bVNhbWVTZWN1cml0eQorICAgICAgICAgICB2YWx1ZXMgZnJvbSB0aGUgdG1TdGF0ZVJlZmVyZW5jZS4gIE5vdGU6IFRoZSB0bVNlc3Npb25JRCB2YWx1ZQorICAgICAgICAgICBtYXkgYmUgdW5kZWZpbmVkIGlmIG5vIHNlc3Npb24gZXhpc3RzIHlldCBvdmVyIHdoaWNoIHRoZSBtZXNzYWdlCisgICAgICAgICAgIGNhbiBiZSBzZW50LgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgLSB3ZSB1c2UgdGhlIHQtPmRhdGEgbWVtb3J5IHBvaW50ZXIgYXMgdGhlIHNlc3Npb24gSUQKKyAgICAgICAtIHRoZSB0cmFuc3BvcnQgZG9tYWluIGlzIGFscmVhZHkgdGhlIGNvcnJlY3QgdHlwZSBpZiB3ZSBnb3QgaGVyZQorICAgICAgIC0gaWYgd2UgZG9uJ3QgaGF2ZSBhIHNlc3Npb24geWV0IChlZywgbm8gdG1TZXNzaW9uSUQgZnJvbSB0aGUKKyAgICAgICAgIHNwZWNzKSB0aGVuIHdlIGNyZWF0ZSBvbmUgYXV0b21hdGljYWxseSBoZXJlLgorICAgICovCisgICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgorICAgICAgICBvbGVuZ3RoICE9IE5VTEwgJiYgKm9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSkpCisgICAgICAgIHRtU3RhdGVSZWYgPSAobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICopICpvcGFxdWU7CisKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4yLCBzdGVwIDM6CisgICAgICAgMykgIElmIHRtU2FtZVNlY3VyaXR5IGlzIHRydWUgYW5kIGVpdGhlciB0bVNlc3Npb25JRCBpcyB1bmRlZmluZWQgb3IKKyAgICAgICAgICAgcmVmZXJzIHRvIGEgc2Vzc2lvbiB0aGF0IGlzIG5vIGxvbmdlciBvcGVuIHRoZW4gaW5jcmVtZW50IHRoZQorICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uTm9TZXNzaW9ucyBjb3VudGVyLCBkaXNjYXJkIHRoZSBtZXNzYWdlIGFuZAorICAgICAgICAgICByZXR1cm4gdGhlIGVycm9yIGluZGljYXRpb24gaW4gdGhlIHN0YXR1c0luZm9ybWF0aW9uLiAgUHJvY2Vzc2luZworICAgICAgICAgICBvZiB0aGlzIG1lc3NhZ2Ugc3RvcHMuCisgICAgKi8KKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMiwgc3RlcCA0OgorICAgICAgIDQpICBJZiB0bVNhbWVTZWN1cml0eSBpcyBmYWxzZSBhbmQgdG1TZXNzaW9uSUQgcmVmZXJzIHRvIGEgc2Vzc2lvbgorICAgICAgICAgICB0aGF0IGlzIG5vIGxvbmdlciBhdmFpbGFibGUgdGhlbiBhbiBpbXBsZW1lbnRhdGlvbiBTSE9VTEQgb3BlbiBhCisgICAgICAgICAgIG5ldyBzZXNzaW9uIHVzaW5nIHRoZSBvcGVuU2Vzc2lvbigpIEFTSSAoZGVzY3JpYmVkIGluIGdyZWF0ZXIKKyAgICAgICAgICAgZGV0YWlsIGluIHN0ZXAgNWIpLiAgSW5zdGVhZCBvZiBvcGVuaW5nIGEgbmV3IHNlc3Npb24gYW4KKyAgICAgICAgICAgaW1wbGVtZW50YXRpb24gTUFZIHJldHVybiBhIHNubXBUbHN0bVNlc3Npb25Ob1Nlc3Npb25zIGVycm9yIHRvCisgICAgICAgICAgIHRoZSBjYWxsaW5nIG1vZHVsZSBhbmQgc3RvcCBwcm9jZXNzaW5nIG9mIHRoZSBtZXNzYWdlLgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gTm90ZXM6CisgICAgICAgLSBXZSB3b3VsZCBuZXZlciBnZXQgaGVyZSBpZiB0aGUgc2Vzc2lvbklEIHdhcyBkaWZmZXJlbnQuICBXZQorICAgICAgICAgdGllIHBhY2tldHMgZGlyZWN0bHkgdG8gdGhlIHRyYW5zcG9ydCBvYmplY3QgYW5kIGl0IGNvdWxkCisgICAgICAgICBuZXZlciBiZSBzZW50IGJhY2sgb3ZlciBhIGRpZmZlcmVudCB0cmFuc3BvcnQsIHdoaWNoIGlzIHdoYXQKKyAgICAgICAgIHRoZSBhYm92ZSB0ZXh0IGlzIHRyeWluZyB0byBwcmV2ZW50LgorICAgICAgIC0gQXV0by1jb25uZWN0aW9ucyBhcmUgaGFuZGxlZCBoaWdoZXIgaW4gdGhlIE5ldC1TTk1QIGxpYnJhcnkgc3RhY2sKKyAgICAgKi8KKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4yLCBzdGVwIDU6CisgICAgICAgNSkgIElmIHRtU2Vzc2lvbklEIGlzIHVuZGVmaW5lZCwgdGhlbiB1c2UgdG1UcmFuc3BvcnREb21haW4sCisgICAgICAgICAgIHRtVHJhbnNwb3J0QWRkcmVzcywgdG1TZWN1cml0eU5hbWUgYW5kIHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbAorICAgICAgICAgICB0byBzZWUgaWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBMQ0Qgc3VpdGFibGUgdG8KKyAgICAgICAgICAgc2VuZCB0aGUgbWVzc2FnZSBvdmVyLgorCisgICAgICAgICAgIDVhKSAgSWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIExDRCBlbnRyeSwgdGhlbiB0aGlzIHNlc3Npb24KKyAgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgdG8gc2VuZCB0aGUgbWVzc2FnZS4KKworICAgICAgICAgICA1YikgIElmIHRoZXJlIGlzIG5vIGNvcnJlc3BvbmRpbmcgTENEIGVudHJ5LCB0aGVuIG9wZW4gYSBzZXNzaW9uCisgICAgICAgICAgICAgICAgdXNpbmcgdGhlIG9wZW5TZXNzaW9uKCkgQVNJIChkaXNjdXNzZWQgZnVydGhlciBpbgorICAgICAgICAgICAgICAgIFNlY3Rpb24gNS4zLjEpLiAgSW1wbGVtZW50YXRpb25zIE1BWSB3aXNoIHRvIG9mZmVyIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBidWZmZXJpbmcgdG8gcHJldmVudCByZWR1bmRhbnQgb3BlblNlc3Npb24oKSBjYWxscyBmb3IgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBjYWNoZSBlbnRyeS4gIElmIGFuIGVycm9yIGlzIHJldHVybmVkIGZyb20KKyAgICAgICAgICAgICAgICBvcGVuU2Vzc2lvbigpLCB0aGVuIGRpc2NhcmQgdGhlIG1lc3NhZ2UsIGRpc2NhcmQgdGhlCisgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSwgaW5jcmVtZW50IHRoZSBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycywKKyAgICAgICAgICAgICAgICByZXR1cm4gYW4gZXJyb3IgaW5kaWNhdGlvbiB0byB0aGUgY2FsbGluZyBtb2R1bGUgYW5kIHN0b3AKKyAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIG9mIHRoZSBtZXNzYWdlLgorICAgICovCisKKyAgICAvKiB3ZSdyZSBhbHdheXMgYSBjbGllbnQgaWYgd2UncmUgc2VuZGluZyB0byBzb21ldGhpbmcgdW5rbm93biB5ZXQgKi8KKyAgICBpZiAoTlVMTCA9PQorICAgICAgICAoY2FjaGVwID0gZmluZF9vcl9jcmVhdGVfYmlvX2NhY2hlKHQsICZhZGRyX3BhaXItPnJlbW90ZV9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdFX0FSRV9DTElFTlQpKSkgeworICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB0bHNkYXRhID0gY2FjaGVwLT50bHNkYXRhOworICAgIGlmIChOVUxMID09IHRsc2RhdGEgfHwgTlVMTCA9PSB0bHNkYXRhLT5zc2wpIHsKKyAgICAgICAgLyoqIHh4eCBtZW0gbGVhbj8gZnJlZSBjcmVhdGVkIGJpbyBjYWNoZT8gKi8KKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk5PU0VTU0lPTlMpOworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYmFkIHRscyBkYXRhIG9yIHNzbCBwdHIgaW4gbmV0c25tcF9kdGxzdWRwX3NlbmRcbiIpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgICAgICAKKyAgICBpZiAoIXRsc2RhdGEtPnNlY3VyaXR5TmFtZSAmJiB0bVN0YXRlUmVmICYmCisJdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuID4gMCkgeworICAgICAgICB0bHNkYXRhLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKTsKKyAgICB9CisKKyAgICAvKiBzZWUgaWYgd2UgaGF2ZSBwcmV2aW91cyBvdXRnb2luZyBkYXRhIHRvIHNlbmQgKi8KKyAgICBpZiAoY2FjaGVwLT53cml0ZV9jYWNoZSkgeworICAgICAgICBpZiAoU05NUEVSUl9HRU5FUlIgPT0gX25ldHNubXBfYmlvX3RyeV9hbmRfd3JpdGVfYnVmZmVyZWQodCwgY2FjaGVwKSkgeworICAgICAgICAgICAgLyogd2Ugc3RpbGwgaGF2ZSBkYXRhIHRoYXQgY2FuJ3QgZ2V0IG91dCBpbiB0aGUgYnVmZmVyICovCisKKyAgICAgICAgICAgIC8qIGFkZCB0aGUgbmV3IGRhdGEgdG8gdGhlIGVuZCBvZiB0aGUgZXhpc3RpbmcgY2FjaGUgKi8KKyAgICAgICAgICAgIGlmIChfbmV0c25tcF9hZGRfYnVmZmVyZWRfZGF0YShjYWNoZXAsIGJ1Ziwgc2l6ZSkgIT0KKyAgICAgICAgICAgICAgICBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgICAgICAgICAvKiBYWFg6IGZyZWUgYW5kIGNsb3NlICovCisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBERUJVR0lGICgiOTpkdGxzdWRwIikgeworICAgICAgICBjaGFyICpzdHIgPSB0LT5iYXNlX3RyYW5zcG9ydC0+Zl9mbXRhZGRyKHQsICh2b2lkICopIGFkZHJfcGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICBERUJVR01TR1RMKCgiOTpkdGxzdWRwIiwgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKKyAgICAgICAgZnJlZShzdHIpOworICAgIH0KKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4yLCBzdGVwIDY6CisgICAgICAgNikgIFVzaW5nIGVpdGhlciB0aGUgc2Vzc2lvbiBpbmRpY2F0ZWQgYnkgdGhlIHRtU2Vzc2lvbklEIGlmIHRoZXJlCisgICAgICAgICAgIHdhcyBvbmUgb3IgdGhlIHNlc3Npb24gcmVzdWx0aW5nIGZyb20gYSBwcmV2aW91cyBzdGVwICg0IG9yIDUpLAorICAgICAgICAgICBwYXNzIHRoZSBvdXRnb2luZ01lc3NhZ2UgdG8gKEQpVExTIGZvciBlbmNhcHN1bGF0aW9uIGFuZAorICAgICAgICAgICB0cmFuc21pc3Npb24uCisgICAgKi8KKyAgICByYyA9IFNTTF93cml0ZSh0bHNkYXRhLT5zc2wsIGJ1Ziwgc2l6ZSk7CisKKyAgICB3aGlsZSAocmMgPT0gLTEpIHsKKyAgICAgICAgaW50IGJ5dGVzb3V0OworICAgICAgICBpbnQgZXJybnVtID0gU1NMX2dldF9lcnJvcih0bHNkYXRhLT5zc2wsIHJjKTsKKworICAgICAgICAvKiBkb24ndCB0cmVhdCB3YW50X3JlYWQvd3JpdGUgZXJyb3JzIGFzIHJlYWwgZXJyb3JzICovCisgICAgICAgIGlmIChlcnJudW0gIT0gU1NMX0VSUk9SX1dBTlRfUkVBRCAmJgorICAgICAgICAgICAgZXJybnVtICE9IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgiZHRsc3VkcCIsICJzc2xfd3JpdGUgZXJyb3JcbiIpKTsgCisgICAgICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIHRsc2RhdGEtPnNzbCwgIlNTTF93cml0ZSIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICAvKiBjaGVjayB0byBzZWUgaWYgd2UgaGF2ZSBvdXRnb2luZyBEVExTIHBhY2tldHMgdG8gc2VuZCAqLworICAgICAgICAvKiAoU1NMX3JlYWQgY291bGQgaGF2ZSBjcmVhdGVkIERUTFMgY29udHJvbCBwYWNrZXRzKSAqLyAKKyAgICAgICAgYnl0ZXNvdXQgPSBfbmV0c25tcF9zZW5kX3F1ZXVlZF9kdGxzX3BrdHModCwgY2FjaGVwKTsKKworICAgICAgICAvKiBJZiB3YW50X3JlYWQvd3JpdGUgYnV0IGZhaWxlZCB0byBhY3R1YWxseSBzZW5kCisgICAgICAgICAgIGFueXRoaW5nIHRoZW4gd2UgbmVlZCB0byB3YWl0IGZvciB0aGUgb3RoZXIgc2lkZSwKKyAgICAgICAgICAgc28gcXVpdCAqLworICAgICAgICBpZiAoKGVycm51bSA9PSBTU0xfRVJST1JfV0FOVF9SRUFEIHx8CisgICAgICAgICAgICAgZXJybnVtID09IFNTTF9FUlJPUl9XQU5UX1dSSVRFKSAmJgorICAgICAgICAgICAgYnl0ZXNvdXQgPD0gMCkgeworICAgICAgICAgICAgLyogV2UgbmVlZCBtb3JlIGRhdGEgd3JpdHRlbiB0byBvciByZWFkIGZyb20gdGhlIHNvY2tldAorICAgICAgICAgICAgICAgYnV0IHdlJ3JlIGZhaWxpbmcgdG8gZG8gc28gYW5kIG5lZWQgdG8gd2FpdCB0aWxsIHRoZQorICAgICAgICAgICAgICAgc29ja2V0IGlzIHJlYWR5IGFnYWluOyB1bmZvcnR1bmF0ZWx5IHRoaXMgbWVhbnMgd2UgbmVlZAorICAgICAgICAgICAgICAgdG8gYnVmZmVyIHRoZSBTTk1QIGRhdGEgdGVtcG9yYXJpbHkgaW4gdGhlIG1lYW4gdGltZSAqLworCisgICAgICAgICAgICAvKiByZW1lbWJlciB0aGUgcGFja2V0ICovCisgICAgICAgICAgICBpZiAoX25ldHNubXBfYWRkX2J1ZmZlcmVkX2RhdGEoY2FjaGVwLCBidWYsIHNpemUpICE9CisgICAgICAgICAgICAgICAgU05NUEVSUl9TVUNDRVNTKSB7CisKKyAgICAgICAgICAgICAgICAvKiBYWFg6IGZyZWUgYW5kIGNsb3NlICovCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBleGl0IG91dCBvZiB0aGUgbG9vcCB1bnRpbCB3ZSBnZXQgY2FsZWQgYWdhaW4gZnJvbQorICAgICAgICAgICAgICAgc29ja2V0IGRhdGEgKi8gCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TR1RMKCgiOTpkdGxzdWRwIiwgInJlY2FsbGluZyBzc2xfd3JpdGVcbiIpKTsgCisgICAgICAgIHJjID0gU1NMX3dyaXRlKHRsc2RhdGEtPnNzbCwgYnVmLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAocmMgPiAwKQorICAgICAgICBjYWNoZXAtPm1zZ251bSsrOworCisgICAgLyogZm9yIG1lbW9yeSBiaW9zLCB3ZSBub3cgcmVhZCBmcm9tIG9wZW5zc2wncyB3cml0ZSBidWZmZXIgKGllLAorICAgICAgIHRoZSBwYWNrZXQgdG8gZ28gb3V0KSBhbmQgc2VuZCBpdCBvdXQgdGhlIHVkcCBwb3J0IG1hbnVhbGx5ICovCisgICAgcmMgPSBCSU9fcmVhZChjYWNoZXAtPndyaXRlX2Jpbywgb3V0YnVmLCBzaXplb2Yob3V0YnVmKSk7CisgICAgaWYgKHJjIDw9IDApIHsKKyAgICAgICAgLyogaW4gdGhlb3J5IGFuIG9rIHRoaW5nICovCisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBzb2Nrc2l6ZSA9IG5ldHNubXBfc29ja2FkZHJfc2l6ZSgmY2FjaGVwLT5zYXMuc2EpOworICAgIHNhID0gJmNhY2hlcC0+c2FzLnNhOworICAgIHJjID0gdC0+YmFzZV90cmFuc3BvcnQtPmZfc2VuZCh0LCBvdXRidWYsIHJjLCAodm9pZCoqKSZzYSwgJnNvY2tzaXplKTsKKworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfZHRsc3VkcF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyAgICAvKiBYWFg6IGlzc3VlIGEgcHJvcGVyIGR0bHMgY2xvc3VyZSBub3RpZmljYXRpb24ocykgKi8KKworICAgIGJpb19jYWNoZSAqY2FjaGVwID0gTlVMTDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNiYXNlID0gTlVMTDsKKworICAgIERFQlVHVFJBQ0VUT0soIjk6ZHRsc3VkcCIpOworCisgICAgREVCVUdNU0dUTCgoImR0bHN1ZHA6Y2xvc2UiLCAiY2xvc2luZyBkdGxzdWRwIHRyYW5zcG9ydCAlcFxuIiwgdCkpOworCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjQsIHN0ZXAgMToKKyAgICAgICAgMSkgIEluY3JlbWVudCBlaXRoZXIgdGhlIHNubXBUbHN0bVNlc3Npb25DbGllbnRDbG9zZXMgb3IgdGhlCisgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uU2VydmVyQ2xvc2VzIGNvdW50ZXIgYXMgYXBwcm9wcmlhdGUuCisgICAgKi8KKyAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQ0xJRU5UQ0xPU0VTKTsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS40LCBzdGVwIDI6CisgICAgICAgIDIpICBMb29rIHVwIHRoZSBzZXNzaW9uIHVzaW5nIHRoZSB0bVNlc3Npb25JRC4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICsgT3VyIHNlc3Npb24gaWQgaXMgc3RvcmVkIGFzIHRoZSB0LT5kYXRhIHBvaW50ZXIKKyAgICAqLworICAgIGlmIChOVUxMICE9IHQtPmRhdGEgJiYgdC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKF9uZXRzbm1wVExTQmFzZURhdGEpKSB7CisgICAgICAgIHRsc2Jhc2UgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSB0LT5kYXRhOworCisgICAgICAgIGlmICh0bHNiYXNlLT5hZGRyKQorICAgICAgICAgICAgY2FjaGVwID0gZmluZF9iaW9fY2FjaGUoJnRsc2Jhc2UtPmFkZHItPnJlbW90ZV9hZGRyKTsKKyAgICB9CisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuNCwgc3RlcCAzOgorICAgICAgICAzKSAgSWYgdGhlcmUgaXMgbm8gb3BlbiBzZXNzaW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgdG1TZXNzaW9uSUQsIHRoZW4KKyAgICAgICAgICAgIGNsb3NlU2Vzc2lvbiBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZC4KKyAgICAqLworICAgIGlmIChOVUxMID09IGNhY2hlcCkKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKworICAgIC8qIGlmIHdlIGhhdmUgYW55IHJlbWFpbmluZyBwYWNrdGVzIHRvIHNlbmQsIHRyeSB0byBzZW5kIHRoZW0gKi8KKyAgICBpZiAoY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPiAwKSB7CisgICAgICAgIGludCBpID0gMDsKKyAgICAgICAgY2hhciBidWZbODE5Ml07CisgICAgICAgIGludCByYzsKKyAgICAgICAgdm9pZCAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgaW50IG9wYXF1ZV9sZW4gPSAwOworICAgICAgICBmZF9zZXQgcmVhZGZzOworICAgICAgICBzdHJ1Y3QgdGltZXZhbCB0djsKKyAKKyAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHA6Y2xvc2UiLAorCQkgICAgIiUiIE5FVFNOTVBfUFJJeiAiZCBieXRlcyByZW1haW4gaW4gd3JpdGVfY2FjaGVcbiIsCisgICAgICAgICAgICAgICAgICAgIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuKSk7CisgCisgICAgICAgIC8qCisgICAgICAgICAqIGlmIG5lZ290aWF0aW9ucyBoYXZlIGNvbXBsZXRlZCBhbmQgd2UndmUgcmVjZWl2ZWQgZGF0YSwgdHJ5IGFuZAorICAgICAgICAgKiBzZW5kIGFueSBxdWV1ZWQgcGFja2V0cy4KKyAgICAgICAgICovCisgICAgICAgIGlmIChjYWNoZXAtPmZsYWdzICYgTkVUU05NUF9CSU9fQ09OTkVDVEVEKSB7CisgICAgICAgICAgICAvKiBtYWtlIGNvbmZpZ3VyYWJsZToKKyAgICAgICAgICAgICAgIC0gZG8gdGhpcyBhdCBhbGw/CisgICAgICAgICAgICAgICAtIHJldHJpZXMKKyAgICAgICAgICAgICAgIC0gdGltZW91dAorICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCA2ICYmIGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuICE9IDA7ICsraSkgeworCisgICAgICAgICAgICAgICAgLyogZmlyc3Qgc2VlIGlmIHdlIGNhbiBzZW5kIG91dCB3aGF0IHdlIGhhdmUgKi8KKyAgICAgICAgICAgICAgICBfbmV0c25tcF9iaW9fdHJ5X2FuZF93cml0ZV9idWZmZXJlZCh0LCBjYWNoZXApOworICAgICAgICAgICAgICAgIGlmIChjYWNoZXAtPndyaXRlX2NhY2hlX2xlbiA9PSAwKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAKKyAgICAgICAgICAgICAgICAvKiBpZiB3ZSd2ZSBmYWlsZWQgdGhhdCwgd2UgcHJvYmFibHkgbmVlZCB0byB3YWl0IGZvciBwYWNrZXRzICovCisgICAgICAgICAgICAgICAgRkRfWkVSTygmcmVhZGZzKTsKKyAgICAgICAgICAgICAgICBGRF9TRVQodC0+c29jaywgJnJlYWRmcyk7CisgICAgICAgICAgICAgICAgdHYudHZfc2VjID0gMDsKKyAgICAgICAgICAgICAgICB0di50dl91c2VjID0gNTAwMDA7CisgICAgICAgICAgICAgICAgcmMgPSBzZWxlY3QodC0+c29jaysxLCAmcmVhZGZzLCBOVUxMLCBOVUxMLCAmdHYpOworICAgICAgICAgICAgICAgIGlmIChyYyA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyoganVuayByZWN2IGZvciBjYXRjaGluZyBuZWdvdGF0aW9ucyBzdGlsbCBpbiBwbGF5ICovCisgICAgICAgICAgICAgICAgICAgIG9wYXF1ZV9sZW4gPSAwOworICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX2R0bHN1ZHBfcmVjdih0LCBidWYsIHNpemVvZihidWYpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3BhcXVlLCAmb3BhcXVlX2xlbik7CisgICAgICAgICAgICAgICAgICAgIFNOTVBfRlJFRShvcGFxdWUpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gLyogZm9yIGxvb3AgKi8KKyAgICAgICAgfQorCisgICAgICAgIC8qKiBkdW1wIGFueXRoaW5nIHRoYXQgd2Fzbid0IHNlbnQgKi8KKyAgICAgICAgaWYgKGNhY2hlcC0+d3JpdGVfY2FjaGVfbGVuID4gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoImR0bHN1ZHA6Y2xvc2UiLAorCQkJImR1bXBpbmcgJSIgTkVUU05NUF9QUkl6ICJkIGJ5dGVzIGZyb20gd3JpdGVfY2FjaGVcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBjYWNoZXAtPndyaXRlX2NhY2hlX2xlbikpOworICAgICAgICAgICAgU05NUF9GUkVFKGNhY2hlcC0+d3JpdGVfY2FjaGUpOworICAgICAgICAgICAgY2FjaGVwLT53cml0ZV9jYWNoZV9sZW4gPSAwOworICAgICAgICB9CisgICAgfQorCisgICAgLyogUkZDNTk1Mzogc2VjdGlvbiA1LjQsIHN0ZXAgNDoKKyAgICAgICAgNCkgIEhhdmUgKEQpVExTIGNsb3NlIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbi4gIFRoaXMgTVVTVCBpbmNsdWRlCisgICAgICAgICAgICBzZW5kaW5nIGEgY2xvc2Vfbm90aWZ5IFRMUyBBbGVydCB0byBpbmZvcm0gdGhlIG90aGVyIHNpZGUgdGhhdAorICAgICAgICAgICAgc2Vzc2lvbiBjbGVhbnVwIG1heSBiZSBwZXJmb3JtZWQuCisgICAgKi8KKyAgICBpZiAoTlVMTCAhPSBjYWNoZXAtPnRsc2RhdGEgJiYgTlVMTCAhPSBjYWNoZXAtPnRsc2RhdGEtPnNzbCkgeworCisgICAgICAgIERFQlVHTVNHVEwoKCJkdGxzdWRwOmNsb3NlIiwgImNsb3NpbmcgU1NMIHNvY2tldFxuIikpOworICAgICAgICBTU0xfc2h1dGRvd24oY2FjaGVwLT50bHNkYXRhLT5zc2wpOworCisgICAgICAgIC8qIHNlbmQgdGhlIGNsb3NlX25vdGlmeSB3ZSBtYXliZSBnZW5lcmF0ZWQgaW4gc3RlcCA0ICovCisgICAgICAgIGlmIChCSU9fY3RybF9wZW5kaW5nKGNhY2hlcC0+d3JpdGVfYmlvKSA+IDApCisgICAgICAgICAgICBfbmV0c25tcF9zZW5kX3F1ZXVlZF9kdGxzX3BrdHModCwgY2FjaGVwKTsKKyAgICB9CisKKyAgICByZW1vdmVfYW5kX2ZyZWVfYmlvX2NhY2hlKGNhY2hlcCk7CisKKyAgICByZXR1cm4gbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworfQorCitjaGFyICoKK25ldHNubXBfZHRsc3VkcF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIGludCAgICAgICAgICAgICAgc2FfbGVuOworICAgIHN0cnVjdCBzb2NrYWRkciAqc2EgPSBfZmluZF9yZW1vdGVfc29ja2FkZHIodCwgZGF0YSwgbGVuLCAmc2FfbGVuKTsKKyAgICBpZiAoc2EpIHsKKyAgICAgICAgZGF0YSA9IHNhOworICAgICAgICBsZW4gPSBzYV9sZW47CisgICAgfQorCisgICAgcmV0dXJuIG5ldHNubXBfaXB2NF9mbXRhZGRyKCJEVExTVURQIiwgdCwgZGF0YSwgbGVuKTsKK30KKworLyoKKyAqIE9wZW4gYSBEVExTLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAorICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworc3RhdGljIG5ldHNubXBfdHJhbnNwb3J0ICoKK190cmFuc3BvcnRfY29tbW9uKG5ldHNubXBfdHJhbnNwb3J0ICp0LCBpbnQgbG9jYWwpCit7CisgICAgY2hhciAqdG1wID0gTlVMTDsKKyAgICBpbnQgdG1wX2xlbjsKKworICAgIERFQlVHVFJBQ0VUT0soIjk6ZHRsc3VkcCIpOworCisgICAgaWYgKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiogc2F2ZSBiYXNlIHRyYW5zcG9ydCBmb3IgY2xpZW50czsgbmVlZCBpbiBzZW5kL3JlY3YgZnVuY3Rpb25zIGxhdGVyICovCisgICAgaWYgKHQtPmRhdGEpIHsgLyogZG9uJ3QgY29weSBkYXRhICovCisgICAgICAgIHRtcCA9IHQtPmRhdGE7CisgICAgICAgIHRtcF9sZW4gPSB0LT5kYXRhX2xlbmd0aDsKKyAgICAgICAgdC0+ZGF0YSA9IE5VTEw7CisgICAgfQorICAgIHQtPmJhc2VfdHJhbnNwb3J0ID0gbmV0c25tcF90cmFuc3BvcnRfY29weSh0KTsKKworICAgIGlmICh0bXApIHsKKyAgICAgICAgdC0+ZGF0YSA9IHRtcDsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSB0bXBfbGVuOworICAgIH0KKyAgICBpZiAoTlVMTCAhPSB0LT5kYXRhICYmCisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSkgeworICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhID0KKyAgICAgICAgICAgIG5ldHNubXBfdGxzYmFzZV9hbGxvY2F0ZV90bHNkYXRhKHQsIGxvY2FsKTsKKyAgICAgICAgdGxzZGF0YS0+YWRkciA9IHQtPmRhdGE7CisgICAgICAgIHQtPmRhdGEgPSB0bHNkYXRhOworICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihfbmV0c25tcFRMU0Jhc2VEYXRhKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCBEb21haW4KKyAgICAgKi8KKyAgICB0LT5kb21haW4gPSBuZXRzbm1wRFRMU1VEUERvbWFpbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgdC0+ZG9tYWluX2xlbmd0aCA9IG5ldHNubXBEVExTVURQRG9tYWluX2xlbjsgICAgIAorCisgICAgdC0+Zl9yZWN2ICAgICAgICAgID0gbmV0c25tcF9kdGxzdWRwX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICAgICAgID0gbmV0c25tcF9kdGxzdWRwX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICAgICAgID0gbmV0c25tcF9kdGxzdWRwX2Nsb3NlOworICAgIHQtPmZfY29uZmlnICAgICAgICA9IG5ldHNubXBfdGxzYmFzZV9jb25maWc7CisgICAgdC0+Zl9zZXR1cF9zZXNzaW9uID0gbmV0c25tcF90bHNiYXNlX3Nlc3Npb25faW5pdDsKKyAgICB0LT5mX2FjY2VwdCAgICAgICAgPSBOVUxMOworICAgIHQtPmZfZm10YWRkciAgICAgICA9IG5ldHNubXBfZHRsc3VkcF9mbXRhZGRyOworCisgICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEOworCisgICAgcmV0dXJuIHQ7Cit9CisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfZHRsc3VkcF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpCit7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworCisgICAgREVCVUdUUkFDRVRPSygiZHRsc3VkcCIpOworCisgICAgdCA9IG5ldHNubXBfdWRwX3RyYW5zcG9ydChhZGRyLCBsb2NhbCk7CisgICAgaWYgKE5VTEwgPT0gdCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBfdHJhbnNwb3J0X2NvbW1vbih0LCBsb2NhbCk7CisKKyAgICBpZiAoIWxvY2FsKSB7CisgICAgICAgIC8qIGR0bHMgbmVlZHMgdG8gYmluZCB0aGUgc29ja2V0IGZvciBTU0xfd3JpdGUgdG8gd29yayAqLworICAgICAgICBpZiAoY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsIHNpemVvZigqYWRkcikpID09IC0xKQorICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IGZhaWxlZCB0byBjb25uZWN0XG4iKTsKKyAgICB9CisKKyAgICByZXR1cm4gdDsKK30KKworCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKworY2hhciAqCituZXRzbm1wX2R0bHN1ZHA2X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgaW50ICAgICAgICAgICAgICBzYV9sZW47CisgICAgc3RydWN0IHNvY2thZGRyICpzYSA9IF9maW5kX3JlbW90ZV9zb2NrYWRkcih0LCBkYXRhLCBsZW4sICZzYV9sZW4pOworICAgIGlmIChzYSkgeworICAgICAgICBkYXRhID0gc2E7CisgICAgICAgIGxlbiA9IHNhX2xlbjsKKyAgICB9CisKKyAgICByZXR1cm4gbmV0c25tcF9pcHY2X2ZtdGFkZHIoIkRUTFNVRFA2IiwgdCwgZGF0YSwgbGVuKTsKK30KKworLyoKKyAqIE9wZW4gYSBEVExTLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAorICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9kdGxzdWRwNl90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKworICAgIERFQlVHVFJBQ0VUT0soImR0bHN1ZHAiKTsKKworICAgIHQgPSBuZXRzbm1wX3VkcDZfdHJhbnNwb3J0KGFkZHIsIGxvY2FsKTsKKyAgICBpZiAoTlVMTCA9PSB0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIF90cmFuc3BvcnRfY29tbW9uKHQsIGxvY2FsKTsKKworICAgIGlmICghbG9jYWwpIHsKKyAgICAgICAgLyogZHRscyBuZWVkcyB0byBiaW5kIHRoZSBzb2NrZXQgZm9yIFNTTF93cml0ZSB0byB3b3JrICovCisgICAgICAgIGlmIChjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwgc2l6ZW9mKCphZGRyKSkgPT0gLTEpCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZHRsczogZmFpbGVkIHRvIGNvbm5lY3RcbiIpOworICAgIH0KKworICAgIC8qIFhYWDogUG90ZW50aWFsbHkgc2V0IHNvY2sgb3B0cyBoZXJlIChTT19TTkRCVUYvU09fUkNWX0JVRikgKi8gICAgICAKKyAgICAvKiBYWFg6IGFuZCBidWYgc2l6ZSAqLyAgICAgICAgCisKKyAgICB0LT5mX2ZtdGFkZHIgICAgICAgPSBuZXRzbm1wX2R0bHN1ZHA2X2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKyNlbmRpZgorCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfZHRsc3VkcF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBpc3NlcnZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisjZW5kaWYKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworICAgIGNoYXIgYnVmW1NQUklOVF9NQVhfTEVOXSwgKmNwOworCisgICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW4yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkKKyAgICAgICAgdCA9IG5ldHNubXBfZHRsc3VkcF90cmFuc3BvcnQoJmFkZHIsIGlzc2VydmVyKTsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGVsc2UgaWYgKG5ldHNubXBfc29ja2FkZHJfaW42XzIoJmFkZHI2LCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkKKyAgICAgICAgdCA9IG5ldHNubXBfZHRsc3VkcDZfdHJhbnNwb3J0KCZhZGRyNiwgaXNzZXJ2ZXIpOworI2VuZGlmCisgICAgZWxzZQorICAgICAgICByZXR1cm4gTlVMTDsKKworCisgICAgLyogc2VlIGlmIHdlIGNhbiBleHRyYWN0IHRoZSByZW1vdGUgaG9zdG5hbWUgKi8KKyAgICBpZiAoIWlzc2VydmVyICYmIHQgJiYgdC0+ZGF0YSAmJiBzdHIpIHsKKyAgICAgICAgdGxzZGF0YSA9IChfbmV0c25tcFRMU0Jhc2VEYXRhICopIHQtPmRhdGE7CisgICAgICAgIC8qIHNlYXJjaCBmb3IgYSA6ICovCisgICAgICAgIGlmIChOVUxMICE9IChjcCA9IHN0cnJjaHIoc3RyLCAnOicpKSkgeworICAgICAgICAgICAgc3ByaW50ZihidWYsICIlLipzIiwgKGludCkgU05NUF9NSU4oY3AgLSBzdHIsIHNpemVvZihidWYpIC0gMSksCisgICAgICAgICAgICAgICAgICAgIHN0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiBlbHNlIHRoZSBlbnRpcmUgc3BlYyBpcyBhIGhvc3QgbmFtZSBvbmx5ICovCisgICAgICAgICAgICBzdHJsY3B5KGJ1Ziwgc3RyLCBzaXplb2YoYnVmKSk7CisgICAgICAgIH0KKyAgICAgICAgdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUgPSBzdHJkdXAoYnVmKTsKKyAgICB9CisgICAgcmV0dXJuIHQ7Cit9CisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9kdGxzdWRwX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisgICAgaWYgKG9fbGVuID09IDYpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydHRtcCA9IChvWzRdIDw8IDgpICsgb1s1XTsKKyAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW5fYWRkci5zX2FkZHIpLCBvLCA0KTsKKyAgICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnR0bXApOworICAgICAgICByZXR1cm4gbmV0c25tcF9kdGxzdWRwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0KKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGVsc2UgaWYgKG9fbGVuID09IDE4KSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnR0bXAgPSAob1sxNl0gPDwgOCkgKyBvWzE3XTsKKyAgICAgICAgYWRkcjYuc2luNl9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkcjYuc2luNl9hZGRyLnM2X2FkZHIpLCBvLCA0KTsKKyAgICAgICAgYWRkcjYuc2luNl9wb3J0ID0gaHRvbnMocG9ydHRtcCk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX2R0bHN1ZHA2X3RyYW5zcG9ydCgmYWRkcjYsIGxvY2FsKTsKKyAgICB9CisjZW5kaWYKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZAorbmV0c25tcF9kdGxzdWRwX2N0b3Iodm9pZCkKK3sKKyAgICBjaGFyIGluZGV4bmFtZVtdID0gIl9uZXRzbm1wX2FkZHJfaW5mbyI7CisgICAgc3RhdGljIGNvbnN0IGNoYXIgKnByZWZpeGVzW10gPSB7ICJkdGxzdWRwIiwgImR0bHMiCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLCAiZHRsc3VkcDYiLCAiZHRsczYiCisjZW5kaWYKKyAgICB9OworICAgIGludCBpLCBudW1fcHJlZml4ZXMgPSBzaXplb2YocHJlZml4ZXMpIC8gc2l6ZW9mKGNoYXIgKik7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBjaGFyIGluZGV4bmFtZTZbXSA9ICJfbmV0c25tcF9hZGRyX2luZm82IjsKKyNlbmRpZgorCisgICAgREVCVUdNU0dUTCgoImR0bHN1ZHAiLCAicmVnaXN0ZXJpbmcgRFRMUyBjb25zdHJ1Y3RvclxuIikpOworCisgICAgLyogY29uZmlnIHNldHRpbmdzICovCisKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGlmICghb3BlbnNzbF9hZGRyX2luZGV4NikKKyAgICAgICAgb3BlbnNzbF9hZGRyX2luZGV4NiA9CisgICAgICAgICAgICBTU0xfZ2V0X2V4X25ld19pbmRleCgwLCBpbmRleG5hbWU2LCBOVUxMLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorCisgICAgZHRsc3VkcERvbWFpbi5uYW1lID0gbmV0c25tcERUTFNVRFBEb21haW47CisgICAgZHRsc3VkcERvbWFpbi5uYW1lX2xlbmd0aCA9IG5ldHNubXBEVExTVURQRG9tYWluX2xlbjsKKyAgICBkdGxzdWRwRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKG51bV9wcmVmaXhlcyArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoY2hhciAqKSk7CisgICAgZm9yIChpID0gMDsgaSA8IG51bV9wcmVmaXhlczsgKysgaSkKKyAgICAgICAgZHRsc3VkcERvbWFpbi5wcmVmaXhbaV0gPSBwcmVmaXhlc1tpXTsKKworICAgIGR0bHN1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgZHRsc3VkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9kdGxzdWRwX2NyZWF0ZV90c3RyaW5nOworICAgIGR0bHN1ZHBEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfZHRsc3VkcF9jcmVhdGVfb3N0cmluZzsKKworICAgIGlmICghb3BlbnNzbF9hZGRyX2luZGV4KQorICAgICAgICBvcGVuc3NsX2FkZHJfaW5kZXggPQorICAgICAgICAgICAgU1NMX2dldF9leF9uZXdfaW5kZXgoMCwgaW5kZXhuYW1lLCBOVUxMLCBOVUxMLCBOVUxMKTsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmZHRsc3VkcERvbWFpbik7Cit9CisKKy8qCisgKiBNdWNoIG9mIHRoZSBjb2RlIGJlbG93IHdhcyB0YWtlbiBmcm9tIHRoZSBPcGVuU1NMIGV4YW1wbGUgY29kZQorICogYW5kIGlzIHN1YmplY3QgdG8gdGhlIE9wZW5TU0wgY29weXJpZ2h0LgorICovCisjZGVmaW5lCU5FVFNOTVBfQ09PS0lFX1NFQ1JFVF9MRU5HVEgJMTYKK2ludCBjb29raWVfaW5pdGlhbGl6ZWQ9MDsKK3Vuc2lnbmVkIGNoYXIgY29va2llX3NlY3JldFtORVRTTk1QX0NPT0tJRV9TRUNSRVRfTEVOR1RIXTsKKwordHlwZWRlZiB1bmlvbiB7CisgICAgICAgc3RydWN0IHNvY2thZGRyIHNhOworICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzNDsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgczY7CisjZW5kaWYKK30gX3BlZXJfdW5pb247CisKK2ludCBuZXRzbm1wX2R0bHNfZ2VuX2Nvb2tpZShTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCAqY29va2llX2xlbikKK3sKKyAgICB1bnNpZ25lZCBjaGFyICpidWZmZXIsIHJlc3VsdFtFVlBfTUFYX01EX1NJWkVdOworICAgIHVuc2lnbmVkIGludCBsZW5ndGgsIHJlc3VsdGxlbmd0aDsKKyAgICBiaW9fY2FjaGUgKmNhY2hlcCA9IE5VTEw7CisgICAgX3BlZXJfdW5pb24gKnBlZXI7CisKKyAgICAvKiBJbml0aWFsaXplIGEgcmFuZG9tIHNlY3JldCAqLworICAgIGlmICghY29va2llX2luaXRpYWxpemVkKSB7CisgICAgICAgIGlmICghUkFORF9ieXRlcyhjb29raWVfc2VjcmV0LCBORVRTTk1QX0NPT0tJRV9TRUNSRVRfTEVOR1RIKSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IGVycm9yIHNldHRpbmcgcmFuZG9tIGNvb2tpZSBzZWNyZXRcbiIpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgY29va2llX2luaXRpYWxpemVkID0gMTsKKyAgICB9CisKKyAgICBERUJVR01TR1QoKCJkdGxzdWRwOmNvb2tpZSIsICJnZW5lcmF0aW5nIGNvb2tpZS4uLlxuIikpOworCisgICAgLyogUmVhZCBwZWVyIGluZm9ybWF0aW9uICovCisgICAgY2FjaGVwID0gU1NMX2dldF9leF9kYXRhKHNzbCwgb3BlbnNzbF9hZGRyX2luZGV4KTsKKyAgICBpZiAoIWNhY2hlcCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZHRsczogZmFpbGVkIHRvIGdldCB0aGUgcGVlciBhZGRyZXNzXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHBlZXIgPSAoX3BlZXJfdW5pb24gKikmY2FjaGVwLT5zYXM7CisKKyAgICAvKiBDcmVhdGUgYnVmZmVyIHdpdGggcGVlcidzIGFkZHJlc3MgYW5kIHBvcnQgKi8KKyAgICBsZW5ndGggPSAwOworICAgIHN3aXRjaCAocGVlci0+c2Euc2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihwZWVyLT5zNC5zaW5fcG9ydCk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOworICAgICAgICBsZW5ndGggKz0gc2l6ZW9mKHBlZXItPnM2LnNpbjZfcG9ydCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHMgZ2VuZXJhdGluZyBjb29raWU6IHVua25vd24gZmFtaWx5OiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgcGVlci0+c2Euc2FfZmFtaWx5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGJ1ZmZlciA9IG1hbGxvYyhsZW5ndGgpOworICAgIGlmIChidWZmZXIgPT0gTlVMTCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCJkdGxzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgc3dpdGNoIChwZWVyLT5zYS5zYV9mYW1pbHkpIHsKKyAgICBjYXNlIEFGX0lORVQ6CisgICAgICAgIG1lbWNweShidWZmZXIsCisgICAgICAgICAgICAgICAmcGVlci0+czQuc2luX3BvcnQsCisgICAgICAgICAgICAgICBzaXplb2YocGVlci0+czQuc2luX3BvcnQpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNpemVvZihwZWVyLT5zNC5zaW5fcG9ydCksCisgICAgICAgICAgICAgICAmcGVlci0+czQuc2luX2FkZHIsCisgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKyAgICBjYXNlIEFGX0lORVQ2OgorICAgICAgICBtZW1jcHkoYnVmZmVyLAorICAgICAgICAgICAgICAgJnBlZXItPnM2LnNpbjZfcG9ydCwKKyAgICAgICAgICAgICAgIHNpemVvZihwZWVyLT5zNi5zaW42X3BvcnQpKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciArIHNpemVvZihwZWVyLT5zNi5zaW42X3BvcnQpLAorICAgICAgICAgICAgICAgJnBlZXItPnM2LnNpbjZfYWRkciwKKyAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBkZWZhdWx0OgorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZHRsczogdW5rbm93biBhZGRyZXNzIGZhbWlseSBnZW5lcmF0aW5nIGEgY29va2llXG4iKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIEhNQUMgb2YgYnVmZmVyIHVzaW5nIHRoZSBzZWNyZXQgKi8KKyAgICBITUFDKEVWUF9zaGExKCksIGNvb2tpZV9zZWNyZXQsIE5FVFNOTVBfQ09PS0lFX1NFQ1JFVF9MRU5HVEgsCisgICAgICAgICBidWZmZXIsIGxlbmd0aCwgcmVzdWx0LCAmcmVzdWx0bGVuZ3RoKTsKKyAgICBPUEVOU1NMX2ZyZWUoYnVmZmVyKTsKKworICAgIG1lbWNweShjb29raWUsIHJlc3VsdCwgcmVzdWx0bGVuZ3RoKTsKKyAgICAqY29va2llX2xlbiA9IHJlc3VsdGxlbmd0aDsKKworICAgIERFQlVHTVNHVCgoIjk6ZHRsc3VkcDpjb29raWUiLCAiZ2VuZXJhdGVkICVkIGJ5dGUgY29va2llXG4iLCAqY29va2llX2xlbikpOworCisgICAgcmV0dXJuIDE7Cit9CisKK2ludCBuZXRzbm1wX2R0bHNfdmVyaWZ5X2Nvb2tpZShTU0wgKnNzbCwgdW5zaWduZWQgY2hhciAqY29va2llLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjb29raWVfbGVuKQoreworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgcmVzdWx0W0VWUF9NQVhfTURfU0laRV07CisgICAgdW5zaWduZWQgaW50IGxlbmd0aCwgcmVzdWx0bGVuZ3RoLCByYzsKKyAgICBiaW9fY2FjaGUgKmNhY2hlcCA9IE5VTEw7CisgICAgX3BlZXJfdW5pb24gKnBlZXI7CisKKyAgICAvKiBJZiBzZWNyZXQgaXNuJ3QgaW5pdGlhbGl6ZWQgeWV0LCB0aGUgY29va2llIGNhbid0IGJlIHZhbGlkICovCisgICAgaWYgKCFjb29raWVfaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiAwOworCisgICAgREVCVUdNU0dUKCgiOTpkdGxzdWRwOmNvb2tpZSIsICJ2ZXJpZnlpbmcgJWQgYnl0ZSBjb29raWVcbiIsIGNvb2tpZV9sZW4pKTsKKworICAgIGNhY2hlcCA9IFNTTF9nZXRfZXhfZGF0YShzc2wsIG9wZW5zc2xfYWRkcl9pbmRleCk7CisgICAgaWYgKCFjYWNoZXApIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IGZhaWxlZCB0byBnZXQgdGhlIHBlZXIgYWRkcmVzc1xuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBwZWVyID0gKF9wZWVyX3VuaW9uICopJmNhY2hlcC0+c2FzOworCisgICAgLyogQ3JlYXRlIGJ1ZmZlciB3aXRoIHBlZXIncyBhZGRyZXNzIGFuZCBwb3J0ICovCisgICAgbGVuZ3RoID0gMDsKKyAgICBzd2l0Y2ggKHBlZXItPnNhLnNhX2ZhbWlseSkgeworICAgIGNhc2UgQUZfSU5FVDoKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisgICAgICAgIGxlbmd0aCArPSBzaXplb2YocGVlci0+czQuc2luX3BvcnQpOworICAgICAgICBicmVhazsKKyNpZmRlZiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorICAgIGNhc2UgQUZfSU5FVDY6CisgICAgICAgIGxlbmd0aCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKyAgICAgICAgbGVuZ3RoICs9IHNpemVvZihwZWVyLT5zNi5zaW42X3BvcnQpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGRlZmF1bHQ6CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJkdGxzOiB1bmtub3duIGFkZHJlc3MgZmFtaWx5ICVkIGdlbmVyYXRpbmcgYSBjb29raWVcbiIsCisgICAgICAgICAgICAgICAgIHBlZXItPnNhLnNhX2ZhbWlseSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBidWZmZXIgPSBtYWxsb2MobGVuZ3RoKTsKKyAgICBpZiAoYnVmZmVyID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgImR0bHM6IHVua25vd24gYWRkcmVzcyBmYW1pbHkgZ2VuZXJhdGluZyBhIGNvb2tpZVxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN3aXRjaCAocGVlci0+c2Euc2FfZmFtaWx5KSB7CisgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICBtZW1jcHkoYnVmZmVyLAorICAgICAgICAgICAgICAgJnBlZXItPnM0LnNpbl9wb3J0LAorICAgICAgICAgICAgICAgc2l6ZW9mKHBlZXItPnM0LnNpbl9wb3J0KSk7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci0+czQuc2luX3BvcnQpLAorICAgICAgICAgICAgICAgJnBlZXItPnM0LnNpbl9hZGRyLAorICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisgICAgICAgIGJyZWFrOworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciwKKyAgICAgICAgICAgICAgICZwZWVyLT5zNi5zaW42X3BvcnQsCisgICAgICAgICAgICAgICBzaXplb2YocGVlci0+czYuc2luNl9wb3J0KSk7CisgICAgICAgIG1lbWNweShidWZmZXIgKyBzaXplb2YocGVlci0+czYuc2luNl9wb3J0KSwKKyAgICAgICAgICAgICAgICZwZWVyLT5zNi5zaW42X2FkZHIsCisgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgZGVmYXVsdDoKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgImR0bHM6IHVua25vd24gYWRkcmVzcyBmYW1pbHkgJWQgZ2VuZXJhdGluZyBhIGNvb2tpZVxuIiwKKyAgICAgICAgICAgICAgICAgcGVlci0+c2Euc2FfZmFtaWx5KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2FsY3VsYXRlIEhNQUMgb2YgYnVmZmVyIHVzaW5nIHRoZSBzZWNyZXQgKi8KKyAgICBITUFDKEVWUF9zaGExKCksIGNvb2tpZV9zZWNyZXQsIE5FVFNOTVBfQ09PS0lFX1NFQ1JFVF9MRU5HVEgsCisgICAgICAgICBidWZmZXIsIGxlbmd0aCwgcmVzdWx0LCAmcmVzdWx0bGVuZ3RoKTsKKyAgICBPUEVOU1NMX2ZyZWUoYnVmZmVyKTsKKworICAgIGlmIChjb29raWVfbGVuICE9IHJlc3VsdGxlbmd0aCB8fCBtZW1jbXAocmVzdWx0LCBjb29raWUsIHJlc3VsdGxlbmd0aCkgIT0gMCkKKyAgICAgICAgcmMgPSAwOworICAgIGVsc2UgeworICAgICAgICByYyA9IDE7CisgICAgICAgIGNhY2hlcC0+ZmxhZ3MgfD0gTkVUU05NUF9CSU9fSEFWRV9DT09LSUU7CisgICAgfQorCisgICAgREVCVUdNU0dUKCgiZHRsc3VkcDpjb29raWUiLCAidmVyaWZ5IGNvb2tpZTogJWRcbiIsIHJjKSk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKKyNlbmRpZiAvKiBIQVZFX0xJQlNTTF9EVExTICovCmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcElQWERvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ2MTU2Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUFhEb21haW4uYwpAQCAtMCwwICsxLDQ2OSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVBYRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKKyNkZWZpbmUgU05NUF9JUFhfREVGQVVMVF9QT1JUCTM2ODc5ICAgLyogIFNwZWNpZmllZCBpbiBSRkMgMTQyMC4gICovCitzdGF0aWMgbmV0c25tcF90ZG9tYWluIGlweERvbWFpbjsKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfaXB4X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgc3RydWN0IHNvY2thZGRyX2lweCAqdG8gPSBOVUxMOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pcHggKikgZGF0YTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyX2lweCAqKSB0LT5kYXRhOworICAgIH0KKyAgICBpZiAodG8gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gc3RyZHVwKCJJUFg6IHVua25vd24iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyIHRtcFs2NF07CisgICAgICAgIHNwcmludGYodG1wLCAiSVBYOiAlMDhYOiUwMlglMDJYJTAyWCUwMlglMDJYJTAyWC8laHUiLAorICAgICAgICAgICAgICAgIG50b2hsKHRvLT5zaXB4X25ldHdvcmspLCB0by0+c2lweF9ub2RlWzBdLAorICAgICAgICAgICAgICAgIHRvLT5zaXB4X25vZGVbMV0sIHRvLT5zaXB4X25vZGVbMl0sIHRvLT5zaXB4X25vZGVbM10sCisgICAgICAgICAgICAgICAgdG8tPnNpcHhfbm9kZVs0XSwgdG8tPnNpcHhfbm9kZVs1XSwgbnRvaHModG8tPnNpcHhfcG9ydCkpOworICAgICAgICByZXR1cm4gc3RyZHVwKHRtcCk7CisgICAgfQorfQorCisKKworLyoKKyAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAorICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bworICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKKyAqLworCitzdGF0aWMgaW50CituZXRzbm1wX2lweF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludAkJICAgICByYyA9IC0xOworICAgIHNvY2tsZW5fdAkgICAgIGZyb21sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyKTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBmcm9tID0gKHN0cnVjdCBzb2NrYWRkciAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOworICAgICAgICBpZiAoZnJvbSA9PSBOVUxMKSB7CisgICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1lbXNldChmcm9tLCAwLCBmcm9tbGVuKTsKKyAgICAgICAgfQorCisJd2hpbGUgKHJjIDwgMCkgeworCSAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIDAsIGZyb20sICZmcm9tbGVuKTsKKwkgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkgICAgYnJlYWs7CisJICB9CisJfQorCisgICAgICAgIGlmIChyYyA+PSAwKSB7CisgICAgICAgICAgICBERUJVR0lGKCJuZXRzbm1wX2lweCIpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX2lweF9mbXRhZGRyKE5VTEwsIGZyb20sIGZyb21sZW4pOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgInJlY3Zmcm9tIGZkICVkIGdvdCAlZCBieXRlcyhmcm9tICVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCByYywgc3RyKSk7CisgICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaXB4IiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgfQorICAgICAgICAqb3BhcXVlID0gKHZvaWQgKikgZnJvbTsKKyAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCk7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfaXB4X3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7CisKKyAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCisJKm9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoKm9wYXF1ZSk7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICh0LT5kYXRhKTsKKyAgICB9CisKKyAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHSUYoIm5ldHNubXBfaXB4IikgeworICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF9pcHhfZm10YWRkcihOVUxMLCAodm9pZCAqKXRvLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfaXB4IiwgInNlbmQgJWQgYnl0ZXMgZnJvbSAlcCB0byAlcyBvbiBmZCAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemUsIGJ1Ziwgc3RyLCB0LT5zb2NrKSk7CisgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgIH0KKwl3aGlsZSAocmMgPCAwKSB7CisJICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgdG8sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKwkgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworCQlicmVhazsKKwkgICAgfQorCX0KKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF9pcHhfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgaWYgKHQtPnNvY2sgPj0gMCkgeworI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCisgICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7CisjZWxzZQorICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOworI2VuZGlmCisgICAgICAgIHQtPnNvY2sgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKworLyoKKyAqIE9wZW4gYSBJUFgtYmFzZWQgdHJhbnNwb3J0IGZvciBTTk1QLiAgTG9jYWwgaXMgVFJVRSBpZiBhZGRyIGlzIHRoZSBsb2NhbAorICogYWRkcmVzcyB0byBiaW5kIHRvIChpLmUuIHRoaXMgaXMgYSBzZXJ2ZXItdHlwZSBzZXNzaW9uKTsgb3RoZXJ3aXNlIGFkZHIgaXMgCisgKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX2lweF90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAwOworCisjaWZkZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgIGlmIChsb2NhbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworCisgICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaXB4X2ZhbWlseSAhPSBBRl9JUFgpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmICh0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdJRigibmV0c25tcF9pcHgiKSB7CisgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfaXB4X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKilhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lweCIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKKyAgICAgICAgICAgICAgICAgICAgc3RyKSk7CisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisKKyAgICB0LT5kb21haW4gPSBuZXRzbm1wSVBYRG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wSVBYRG9tYWluX2xlbjsKKworICAgIHQtPnNvY2sgPSBzb2NrZXQoQUZfSVBYLCBTT0NLX0RHUkFNLCBBRl9JUFgpOworICAgIGlmICh0LT5zb2NrIDwgMCkgeworICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAobG9jYWwpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgICAgICB0LT5sb2NhbCA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTIpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSgmKHQtPmxvY2FsWzAwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9uZXR3b3JrKSwgNCk7CisgICAgICAgIG1lbWNweSgmKHQtPmxvY2FsWzA0XSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9ub2RlKSwgNik7CisgICAgICAgIG1lbWNweSgmKHQtPmxvY2FsWzEwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9wb3J0KSwgMik7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDEyOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmVkZWQgYXMgYSBzZXJ2ZXIsIHNvIHdlIG11c3QgYmluZCBvbiB0byB0aGUKKyAgICAgICAgICogZ2l2ZW4gYWRkcmVzcyAod2hpY2ggbWF5IGluY2x1ZGUgYSBwYXJ0aWN1bGFyIG5ldHdvcmsgYW5kL29yIG5vZGUKKyAgICAgICAgICogYWRkcmVzcywgYnV0IGRlZmluaXRlbHkgaW5jbHVkZXMgYSBwb3J0IG51bWJlcikuCisgICAgICAgICAqLworCisgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCisgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX2lweF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICB0LT5kYXRhID0gTlVMTDsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSAwOworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgdC0+cmVtb3RlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxMik7CisgICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSgmKHQtPnJlbW90ZVswMF0pLCAodV9jaGFyICopICYgKGFkZHItPnNpcHhfbmV0d29yayksIDQpOworICAgICAgICBtZW1jcHkoJih0LT5yZW1vdGVbMDRdKSwgKHVfY2hhciAqKSAmIChhZGRyLT5zaXB4X25vZGUpLCA2KTsKKyAgICAgICAgbWVtY3B5KCYodC0+cmVtb3RlWzEwXSksICh1X2NoYXIgKikgJiAoYWRkci0+c2lweF9wb3J0KSwgMik7CisgICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSAxMjsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50IHNlc3Npb24uICBTYXZlIHRoZSBhZGRyZXNzIGluIHRoZQorICAgICAgICAgKiB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvciBsYXRlciB1c2UgYnkgc25tcF9pcHhfc2VuZC4KKyAgICAgICAgICovCisKKyAgICAgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOworICAgICAgICBpZiAodC0+ZGF0YSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPmRhdGEsIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaXB4KSk7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pcHgpOworICAgIH0KKworICAgIC8qCisgICAgICogTWF4aW11bSBzaXplIG9mIGFuIElQWCBQRFUgaXMgNTc2IGJ5dGVzIGluY2x1ZGluZyBhIDMwLWJ5dGUgaGVhZGVyLgorICAgICAqIFJpZGljdWxvdXMhICAKKyAgICAgKi8KKworICAgIHQtPm1zZ01heFNpemUgPSA1NzYgLSAzMDsKKyAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF9pcHhfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF9pcHhfc2VuZDsKKyAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9pcHhfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICA9IE5VTEw7CisgICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfaXB4X2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworCisKKy8qCisgKiBBdHRlbXB0IHRvIHBhcnNlIGEgc3RyaW5nIG9mIHRoZSBmb3JtIFslMDh4XTolMTJ4Wy8lZF0gd2hlcmUgdGhlIHBhcnRzCisgKiBhcmUgdGhlIG5ldHdvcmsgbnVtYmVyLCB0aGUgbm9kZSBhZGRyZXNzIGFuZCB0aGUgcG9ydCBpbiB0aGF0IG9yZGVyLiAgCisgKi8KKworaW50CituZXRzbm1wX3NvY2thZGRyX2lweDIoc3RydWN0IHNvY2thZGRyX2lweCAqYWRkciwgY29uc3QgY2hhciAqcGVlcm5hbWUsCisJCSAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIGNoYXIgICAgICAgICAgICppbnB1dCA9IE5VTEwsICpkZWYgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgICAgICpuZXR3b3JrLCAqbm9kZSwgKnBvcnQ7CisgICAgY2hhciAgICAgICAgICAgKnRtcDsKKyAgICB1bnNpZ25lZCBsb25nICAgaTsKKworICAgIGlmIChhZGRyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIG1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2lweCkpOworCisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwKKwkJImFkZHIgJXAsIHBlZXJuYW1lIFwiJXNcIiBkZWZhdWx0X3RhcmdldCBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgYWRkciwgcGVlcm5hbWUgPyBwZWVybmFtZSA6ICJbTklMXSIsCisJCWRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiW05JTF0iKSk7CisKKyAgICBhZGRyLT5zaXB4X2ZhbWlseSA9IEFGX0lQWDsKKyAgICBhZGRyLT5zaXB4X3R5cGUgPSA0OyAgICAgICAgLyogIFNwZWNpZmllZCBpbiBSRkMgMTQyMC4gICovCisKKyAgICBuZXR3b3JrID0gaW5wdXQgPSBzdHJkdXAocGVlcm5hbWUgPyBwZWVybmFtZSA6ICIiKTsKKyAgICB0bXAgPSBzdHJjaHIoaW5wdXQsICc6Jyk7CisgICAgaWYgKHRtcCAhPSBOVUxMKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJOb2RlIGlkZW50aWZpZWRcbiIpKTsKKyAgICAgICAgKnRtcCsrID0gJ1wwJzsKKwlub2RlID0gdG1wOworICAgICAgICB0bXAgPSBzdHJjaHIodG1wLCAnLycpOworICAgIH0gZWxzZSB7CisgICAgICAgIG5vZGUgPSBOVUxMOworICAgICAgICB0bXAgPSBzdHJjaHIoaW5wdXQsICcvJyk7CisgICAgfQorICAgIGlmICh0bXAgIT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiUG9ydCBpZGVudGlmaWVkXG4iKSk7CisgICAgICAgICp0bXArKyA9ICdcMCc7CisgICAgICAgIHBvcnQgPSB0bXA7CisgICAgfSBlbHNlCisgICAgICAgIHBvcnQgPSBOVUxMOworCisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwgIkFkZHJlc3M6ICVzOiVzLyVzXG4iLAorICAgICAgICAgICAgICAgIG5ldHdvcmsgPyBuZXR3b3JrIDogIltOSUxdIiwgbm9kZSA/IG5vZGUgOiAiW05JTF0iLAorICAgICAgICAgICAgICAgIHBvcnQgPyBwb3J0IDogIltOSUxdIikpOworCisgICAgZGVmID0gc3RyZHVwKGRlZmF1bHRfdGFyZ2V0ID8gZGVmYXVsdF90YXJnZXQgOiAiIik7CisgICAgaWYgKG5ldHdvcmsgPT0gTlVMTCB8fCAqbmV0d29yayA9PSAnXDAnKQorICAgICAgICBuZXR3b3JrID0gZGVmOworICAgIHRtcCA9IHN0cmNocihkZWYsICc6Jyk7CisgICAgaWYgKHRtcCAhPSBOVUxMKSB7CisgICAgICAgICp0bXArKyA9ICdcMCc7CisJaWYgKG5vZGUgPT0gTlVMTCB8fCAqbm9kZSA9PSAnXDAnKQorICAgICAgICAgICAgbm9kZSA9IHRtcDsKKyAgICAgICAgdG1wID0gc3RyY2hyKHRtcCwgJy8nKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdG1wID0gc3RyY2hyKGRlZiwgJy8nKTsKKyAgICBpZiAodG1wICE9IE5VTEwpIHsKKyAgICAgICAgKnRtcCsrID0gJ1wwJzsKKyAgICAgICAgaWYgKHBvcnQgPT0gTlVMTCB8fCAqcG9ydCA9PSAnXDAnKQorICAgICAgICAgICAgcG9ydCA9IHRtcDsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pcHgiLCAiQWRkcmVzczogJXM6JXMvJXNcbiIsCisgICAgICAgICAgICAgICAgbmV0d29yayA/IG5ldHdvcmsgOiAiW05JTF0iLCBub2RlID8gbm9kZSA6ICJbTklMXSIsCisgICAgICAgICAgICAgICAgcG9ydCA/IHBvcnQgOiAiW05JTF0iKSk7CisKKyAgICBpZiAobmV0d29yayA9PSBOVUxMIHx8ICpuZXR3b3JrID09ICdcMCcpCisgICAgICAgIG5ldHdvcmsgPSAiMCI7CisKKyAgICBpZiAobm9kZSA9PSBOVUxMIHx8ICpub2RlID09ICdcMCcpCisgICAgICAgIG5vZGUgPSAiMDAwMDAwMDAwMDAwIjsKKworICAgIGlmIChwb3J0ID09IE5VTEwgfHwgKnBvcnQgPT0gJ1wwJykKKyNkZWZpbmUgdmFsKHgpIF9fU1RSSU5HKHgpCisgICAgICAgIHBvcnQgPSB2YWwoU05NUF9JUFhfREVGQVVMVF9QT1JUKTsKKyN1bmRlZiB2YWwKKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJBZGRyZXNzOiAlczolcy8lc1xuIiwKKyAgICAgICAgICAgICAgICBuZXR3b3JrID8gbmV0d29yayA6ICJbTklMXSIsIG5vZGUgPyBub2RlIDogIltOSUxdIiwKKyAgICAgICAgICAgICAgICBwb3J0ID8gcG9ydCA6ICJbTklMXSIpKTsKKworICAgIGlmKHNzY2FuZihuZXR3b3JrLCAiJThseCUqYyIsICZpKSA9PSAxKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJuZXR3b3JrIHBhcnNlZCBva2F5XG4iKSk7CisgICAgICAgIGFkZHItPnNpcHhfbmV0d29yayA9IGh0b25sKGkpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCisgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2UgbmV0d29yayBwYXJ0IG9mIGFkZHJlc3NcbiIpKTsKKyAgICAgICAgZnJlZShkZWYpOworICAgICAgICBmcmVlKGlucHV0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgaWYoc3NjYW5mKG5vZGUsICIlMmhoeCUyaGh4JTJoaHglMmhoeCUyaGh4JTJoaHglKmMiLAorICAgICAgICAgICAgICAmYWRkci0+c2lweF9ub2RlWzBdLCAmYWRkci0+c2lweF9ub2RlWzFdLAorICAgICAgICAgICAgICAmYWRkci0+c2lweF9ub2RlWzJdLCAmYWRkci0+c2lweF9ub2RlWzNdLAorICAgICAgICAgICAgICAmYWRkci0+c2lweF9ub2RlWzRdLCAmYWRkci0+c2lweF9ub2RlWzVdKSA9PSA2KSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJub2RlIHBhcnNlZCBva2F5XG4iKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaXB4IiwKKyAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBwYXJzZSBub2RlIHBhcnQgb2YgYWRkcmVzc1xuIikpOworICAgICAgICBmcmVlKGRlZik7CisgICAgICAgIGZyZWUoaW5wdXQpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpZihzc2NhbmYocG9ydCwgIiVsdSUqYyIsICZpKSA9PSAxKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsICJwb3J0IHBhcnNlZCBva2F5XG4iKSk7CisgICAgICAgIGFkZHItPnNpcHhfcG9ydCA9IGh0b25zKGkpOworICAgIH0gZWxzZSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2lweCIsCisgICAgICAgICAgICAgICAgICAgICJmYWlsZWQgdG8gcGFyc2UgcG9ydCBwYXJ0IG9mIGFkZHJlc3NcbiIpKTsKKyAgICAgICAgZnJlZShkZWYpOworICAgICAgICBmcmVlKGlucHV0KTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgZnJlZShkZWYpOworICAgIGZyZWUoaW5wdXQpOworICAgIHJldHVybiAxOworfQorCisKKworaW50CituZXRzbm1wX3NvY2thZGRyX2lweChzdHJ1Y3Qgc29ja2FkZHJfaXB4ICphZGRyLCBjb25zdCBjaGFyICpwZWVybmFtZSkKK3sKKyAgICByZXR1cm4gbmV0c25tcF9zb2NrYWRkcl9pcHgyKGFkZHIsIHBlZXJuYW1lLCBOVUxMKTsKK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfaXB4X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAorCQkJICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2lweCBhZGRyOworCisgICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaXB4MigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfaXB4X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfaXB4X2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pcHggYWRkcjsKKworICAgIGlmIChvX2xlbiA9PSAxMikgeworICAgICAgICBhZGRyLnNpcHhfZmFtaWx5ID0gQUZfSVBYOworICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpcHhfbmV0d29yayksICYob1swMF0pLCA0KTsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaXB4X25vZGUpLCAmKG9bMDRdKSwgNik7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2lweF9wb3J0KSwgJihvWzEwXSksIDIpOworICAgICAgICByZXR1cm4gbmV0c25tcF9pcHhfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCisKKwordm9pZAorbmV0c25tcF9pcHhfY3Rvcih2b2lkKQoreworICAgIGlweERvbWFpbi5uYW1lID0gbmV0c25tcElQWERvbWFpbjsKKyAgICBpcHhEb21haW4ubmFtZV9sZW5ndGggPSBuZXRzbm1wSVBYRG9tYWluX2xlbjsKKyAgICBpcHhEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOworICAgIGlweERvbWFpbi5wcmVmaXhbMF0gPSAiaXB4IjsKKworICAgIGlweERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICBpcHhEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfaXB4X2NyZWF0ZV90c3RyaW5nOworICAgIGlweERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF9pcHhfY3JlYXRlX29zdHJpbmc7CisKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJmlweERvbWFpbik7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcElQdjRCYXNlRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDVlMTUwYgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NEJhc2VEb21haW4uYwpAQCAtMCwwICsxLDIyMyBAQAorLyogSVBWNCBiYXNlIHRyYW5zcG9ydCBzdXBwb3J0IGZ1bmN0aW9ucworICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKKworI2lmbmRlZiBJTkFERFJfTk9ORQorI2RlZmluZSBJTkFERFJfTk9ORSAgICAgLTEKKyNlbmRpZgorCitpbnQKK25ldHNubXBfc29ja2FkZHJfaW4oc3RydWN0IHNvY2thZGRyX2luICphZGRyLAorICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBpbnQgcmVtb3RlX3BvcnQpCit7CisgICAgY2hhciBidWZbc2l6ZW9mKGludCkgKiAzICsgMl07CisgICAgc3ByaW50ZihidWYsICI6JXUiLCByZW1vdGVfcG9ydCk7CisgICAgcmV0dXJuIG5ldHNubXBfc29ja2FkZHJfaW4yKGFkZHIsIGlucGVlcm5hbWUsIHJlbW90ZV9wb3J0ID8gYnVmIDogTlVMTCk7Cit9CisKK2ludAorbmV0c25tcF9zb2NrYWRkcl9pbjIoc3RydWN0IHNvY2thZGRyX2luICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgaW50IHJldDsKKworICAgIGlmIChhZGRyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAorICAgICAgICAgICAgICAgICJhZGRyICVwLCBpbnBlZXJuYW1lIFwiJXNcIiwgZGVmYXVsdF90YXJnZXQgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgIGFkZHIsIGlucGVlcm5hbWUgPyBpbnBlZXJuYW1lIDogIltOSUxdIiwKKyAgICAgICAgICAgICAgICBkZWZhdWx0X3RhcmdldCA/IGRlZmF1bHRfdGFyZ2V0IDogIltOSUxdIikpOworCisgICAgbWVtc2V0KGFkZHIsIDAsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKyAgICBhZGRyLT5zaW5fYWRkci5zX2FkZHIgPSBodG9ubChJTkFERFJfQU5ZKTsKKyAgICBhZGRyLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICBhZGRyLT5zaW5fcG9ydCA9IGh0b25zKCh1X3Nob3J0KVNOTVBfUE9SVCk7CisKKyAgICB7CisJaW50IHBvcnQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorCQkJCSAgICAgIE5FVFNOTVBfRFNfTElCX0RFRkFVTFRfUE9SVCk7CisKKwlpZiAocG9ydCAhPSAwKSB7CisJICAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydCk7CisJfSBlbHNlIGlmIChkZWZhdWx0X3RhcmdldCAhPSBOVUxMKQorCSAgICBuZXRzbm1wX3NvY2thZGRyX2luMihhZGRyLCBkZWZhdWx0X3RhcmdldCwgTlVMTCk7CisgICAgfQorCisgICAgaWYgKGlucGVlcm5hbWUgIT0gTlVMTCAmJiAqaW5wZWVybmFtZSAhPSAnXDAnKSB7CisJY29uc3QgY2hhciAgICAgKmhvc3QsICpwb3J0OworCWNoYXIgICAgICAgICAgICpwZWVybmFtZSA9IE5VTEw7CisgICAgICAgIGNoYXIgICAgICAgICAgICpjcDsKKyAgICAgICAgLyoKKyAgICAgICAgICogRHVwbGljYXRlIHRoZSBwZWVybmFtZSBiZWNhdXNlIHdlIG1pZ2h0IHdhbnQgdG8gbWFuayBhcm91bmQgd2l0aAorICAgICAgICAgKiBpdC4KKyAgICAgICAgICovCisKKyAgICAgICAgcGVlcm5hbWUgPSBzdHJkdXAoaW5wZWVybmFtZSk7CisgICAgICAgIGlmIChwZWVybmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRyeSBhbmQgZXh0cmFjdCBhbiBhcHBlbmRlZCBwb3J0IG51bWJlci4KKyAgICAgICAgICovCisgICAgICAgIGNwID0gc3RyY2hyKHBlZXJuYW1lLCAnOicpOworICAgICAgICBpZiAoY3AgIT0gTlVMTCkgeworICAgICAgICAgICAgKmNwID0gJ1wwJzsKKyAgICAgICAgICAgIHBvcnQgPSBjcCArIDE7CisgICAgICAgICAgICBob3N0ID0gcGVlcm5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBob3N0ID0gTlVMTDsKKyAgICAgICAgICAgIHBvcnQgPSBwZWVybmFtZTsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRyeSB0byBjb252ZXJ0IHRoZSB1c2VyIHBvcnQgc3BlY2lmaWVyCisgICAgICAgICAqLworICAgICAgICBpZiAocG9ydCAmJiAqcG9ydCA9PSAnXDAnKQorICAgICAgICAgICAgcG9ydCA9IE5VTEw7CisKKyAgICAgICAgaWYgKHBvcnQgIT0gTlVMTCkgeworICAgICAgICAgICAgbG9uZyBpbnQgbDsKKyAgICAgICAgICAgIGNoYXIqIGVwOworCisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsICJjaGVjayB1c2VyIHNlcnZpY2UgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBwb3J0KSk7CisKKyAgICAgICAgICAgIGwgPSBzdHJ0b2wocG9ydCwgJmVwLCAxMCk7CisgICAgICAgICAgICBpZiAoZXAgIT0gcG9ydCAmJiAqZXAgPT0gJ1wwJyAmJiAwIDw9IGwgJiYgbCA8PSAweDBmZmZmKQorICAgICAgICAgICAgICAgIGFkZHItPnNpbl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpbCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpZiAoaG9zdCA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlcnZuYW1lIG5vdCBudW1lcmljLCAiCisJCQkJImNoZWNrIGlmIGl0IHJlYWxseSBpcyBhIGRlc3RpbmF0aW9uKVxuIikpOworICAgICAgICAgICAgICAgICAgICBob3N0ID0gcG9ydDsKKyAgICAgICAgICAgICAgICAgICAgcG9ydCA9IE5VTEw7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2Vydm5hbWUgbm90IG51bWVyaWNcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRyeSB0byBjb252ZXJ0IHRoZSB1c2VyIGhvc3Qgc3BlY2lmaWVyCisgICAgICAgICAqLworICAgICAgICBpZiAoaG9zdCAmJiAqaG9zdCA9PSAnXDAnKQorICAgICAgICAgICAgaG9zdCA9IE5VTEw7CisKKyAgICAgICAgaWYgKGhvc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgImNoZWNrIGRlc3RpbmF0aW9uICVzXG4iLCBob3N0KSk7CisKKworICAgICAgICAgICAgaWYgKHN0cmNtcChwZWVybmFtZSwgIjI1NS4yNTUuMjU1LjI1NSIpID09IDAgKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBUaGUgZXhwbGljaXQgYnJvYWRjYXN0IGFkZHJlc3MgaGFjaworICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwgIkV4cGxpY2l0IFVEUCBicm9hZGNhc3RcbiIpKTsKKyAgICAgICAgICAgICAgICBhZGRyLT5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfTk9ORTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgcmV0ID0KKyAgICAgICAgICAgICAgICAgICAgbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0KHBlZXJuYW1lLCAmYWRkci0+c2luX2FkZHIuc19hZGRyKTsKKyAgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCByZXNvbHZlIGhvc3RuYW1lXG4iKSk7CisgICAgICAgICAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSAocmVzb2x2ZWQgb2theSlcbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCWZyZWUocGVlcm5hbWUpOworICAgIH0KKworICAgIC8qCisgICAgICogRmluaXNoZWQKKyAgICAgKi8KKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luIiwgInJldHVybiB7IEFGX0lORVQsICVzOiVodSB9XG4iLAorICAgICAgICAgICAgICAgIGluZXRfbnRvYShhZGRyLT5zaW5fYWRkciksIG50b2hzKGFkZHItPnNpbl9wb3J0KSkpOworICAgIHJldHVybiAxOworfQorCitjaGFyICoKK25ldHNubXBfaXB2NF9mbXRhZGRyKGNvbnN0IGNoYXIgKnByZWZpeCwgbmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgc3RydWN0IGhvc3RlbnQgKmhvc3Q7CisgICAgY2hhciB0bXBbNjRdOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBsZW4gPT0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKSB7CisJYWRkcl9wYWlyID0gKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKikgZGF0YTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKKwlhZGRyX3BhaXIgPSAobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqKSB0LT5kYXRhOworICAgIH0KKworICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgeworICAgICAgICBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXM6IHVua25vd24iLCBwcmVmaXgpOworICAgIH0gZWxzZSB7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAqdG8gPSBOVUxMOworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKKyAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKKyAgICAgICAgICAgIHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlczogdW5rbm93bi0+WyVzXTolaHUiLCBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EoYWRkcl9wYWlyLT5sb2NhbF9hZGRyLnNpbi5zaW5fYWRkciksCisgICAgICAgICAgICAgICAgICAgICBudG9ocyhhZGRyX3BhaXItPmxvY2FsX2FkZHIuc2luLnNpbl9wb3J0KSk7CisgICAgICAgIH0gZWxzZSBpZiAoIHQgJiYgdC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0hPU1ROQU1FICkgeworICAgICAgICAgICAgLyogWFhYOiBobW0uLi4gIHdoeSBpc24ndCB0aGlzIHByZWZpeGVkICovCisgICAgICAgICAgICAvKiBhc3N1bWluZyBpbnRlbnRpb25hbCAqLworICAgICAgICAgICAgaG9zdCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigoY2hhciAqKSZ0by0+c2luX2FkZHIsIHNpemVvZihzdHJ1Y3QgaW5fYWRkciksIEFGX0lORVQpOworICAgICAgICAgICAgcmV0dXJuIChob3N0ID8gc3RyZHVwKGhvc3QtPmhfbmFtZSkgOiBOVUxMKTsgCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBzbnByaW50Zih0bXAsIHNpemVvZih0bXApLCAiJXM6IFslc106JWh1LT4iLCBwcmVmaXgsCisgICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EodG8tPnNpbl9hZGRyKSwgbnRvaHModG8tPnNpbl9wb3J0KSk7CisgICAgICAgICAgICBzbnByaW50Zih0bXAgKyBzdHJsZW4odG1wKSwgc2l6ZW9mKHRtcCktc3RybGVuKHRtcCksICJbJXNdOiVodSIsCisgICAgICAgICAgICAgICAgICAgICBpbmV0X250b2EoYWRkcl9wYWlyLT5sb2NhbF9hZGRyLnNpbi5zaW5fYWRkciksCisgICAgICAgICAgICAgICAgICAgICBudG9ocyhhZGRyX3BhaXItPmxvY2FsX2FkZHIuc2luLnNpbl9wb3J0KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgdG1wW3NpemVvZih0bXApLTFdID0gJ1wwJzsKKyAgICByZXR1cm4gc3RyZHVwKHRtcCk7Cit9CisKZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wSVB2NkJhc2VEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWQ2ODg4Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBJUHY2QmFzZURvbWFpbi5jCkBAIC0wLDAgKzEsNDIzIEBACisvKiBJUFY2IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfSVBWNgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBJUHY2QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUX0lGX0gKKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2xvZ2dpbmcuaD4KKworI2luY2x1ZGUgImluZXRfbnRvcC5oIgorI2luY2x1ZGUgImluZXRfcHRvbi5oIgorCisKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChJRl9OQU1FU0laRSkKKyNkZWZpbmUgSUZfTkFNRVNJWkUgMTIKKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkKEhBVkVfV0lOU09DS19IKSAmJiAhZGVmaW5lZChtaW5ndzMyKQorc3RhdGljIGNvbnN0IHN0cnVjdCBpbjZfYWRkciBpbjZhZGRyX2FueSA9IElONkFERFJfQU5ZX0lOSVQ7CisjZW5kaWYKKworCitzdGF0aWMgdW5zaWduZWQKK25ldHNubXBfaWZfbmFtZXRvaW5kZXgoY29uc3QgY2hhciAqaWZuYW1lKQoreworI2lmIGRlZmluZWQoV0lOMzIpCisgICAgcmV0dXJuIGF0b2koaWZuYW1lKTsKKyNlbGlmIGRlZmluZWQoSEFWRV9JRl9OQU1FVE9JTkRFWCkKKyAgICByZXR1cm4gaWZfbmFtZXRvaW5kZXgoaWZuYW1lKTsKKyNlbHNlCisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF9pZl9pbmRleHRvbmFtZSh1bnNpZ25lZCBpZmluZGV4LCBjaGFyICppZm5hbWUpCit7CisjaWYgZGVmaW5lZChXSU4zMikKKyAgICBzbnByaW50ZihpZm5hbWUsIElGX05BTUVTSVpFLCAiJXUiLCBpZmluZGV4KTsKKyAgICByZXR1cm4gaWZuYW1lOworI2VsaWYgZGVmaW5lZChIQVZFX0lGX05BTUVUT0lOREVYKQorICAgIHJldHVybiBpZl9pbmRleHRvbmFtZShpZmluZGV4LCBpZm5hbWUpOworI2Vsc2UKKyAgICByZXR1cm4gTlVMTDsKKyNlbmRpZgorfQorCitjaGFyICoKK25ldHNubXBfaXB2Nl9mbXRhZGRyKGNvbnN0IGNoYXIgKnByZWZpeCwgbmV0c25tcF90cmFuc3BvcnQgKnQsCisgICAgICAgICAgICAgICAgICAgICB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnRvID0gTlVMTDsKKyAgICBjaGFyIGFkZHJbSU5FVDZfQUREUlNUUkxFTl07CisgICAgY2hhciB0bXBbSU5FVDZfQUREUlNUUkxFTiArIDE4XTsKKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX2lwdjYiLCAiZm10YWRkcjogdCA9ICVwLCBkYXRhID0gJXAsIGxlbiA9ICVkXG4iLCB0LAorICAgICAgICAgICAgICAgIGRhdGEsIGxlbikpOworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIGRhdGE7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikgdC0+ZGF0YTsKKyAgICB9CisgICAgaWYgKHRvID09IE5VTEwpIHsKKyAgICAgICAgc25wcmludGYodG1wLCBzaXplb2YodG1wKSwgIiVzOiB1bmtub3duIiwgcHJlZml4KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyIHNjb3BlX2lkW0lGX05BTUVTSVpFICsgMV0gPSAiIjsKKworI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQpCisJaWYgKHRvLT5zaW42X3Njb3BlX2lkCisgICAgICAgICAgICAmJiBuZXRzbm1wX2lmX2luZGV4dG9uYW1lKHRvLT5zaW42X3Njb3BlX2lkLCAmc2NvcGVfaWRbMV0pKSB7CisgICAgICAgICAgICBzY29wZV9pZFswXSA9ICclJzsKKyAgICAgICAgfQorI2VuZGlmCisgICAgICAgIHNucHJpbnRmKHRtcCwgc2l6ZW9mKHRtcCksICIlczogWyVzJXNdOiVodSIsIHByZWZpeCwKKyAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAodm9pZCAqKSAmKHRvLT5zaW42X2FkZHIpLCBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgSU5FVDZfQUREUlNUUkxFTiksIHNjb3BlX2lkLCBudG9ocyh0by0+c2luNl9wb3J0KSk7CisgICAgfQorICAgIHRtcFtzaXplb2YodG1wKS0xXSA9ICdcMCc7CisgICAgcmV0dXJuIHN0cmR1cCh0bXApOworfQorCitpbnQKK25ldHNubXBfc29ja2FkZHJfaW42XzIoc3RydWN0IHNvY2thZGRyX2luNiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgY2hhciAgICAgICAgICAgKmNwID0gTlVMTCwgKnBlZXJuYW1lID0gTlVMTDsKKyAgICBjaGFyICAgICAgICAgICAgZGVidWdfYWRkcltJTkVUNl9BRERSU1RSTEVOXTsKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgc3RydWN0IGFkZHJpbmZvICphZGRycyA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIGVycjsKKyNlbGlmIEhBVkVfR0VUSVBOT0RFQllOQU1FCisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgZXJyOworI2VsaWYgSEFWRV9HRVRIT1NUQllOQU1FCisgICAgc3RydWN0IGhvc3RlbnQgKmhwID0gTlVMTDsKKyNlbmRpZgorICAgIGludCAgICAgICAgICAgICBwb3J0bm87CisKKyAgICBpZiAoYWRkciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKwkJImFkZHIgJXAsIHBlZXJuYW1lIFwiJXNcIiwgZGVmYXVsdF90YXJnZXQgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgIGFkZHIsIGlucGVlcm5hbWUgPyBpbnBlZXJuYW1lIDogIltOSUxdIiwKKwkJZGVmYXVsdF90YXJnZXQgPyBkZWZhdWx0X3RhcmdldCA6ICJbTklMXSIpKTsKKworICAgIG1lbXNldChhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgIGFkZHItPnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgYWRkci0+c2luNl9hZGRyID0gaW42YWRkcl9hbnk7CisgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpU05NUF9QT1JUKTsKKworICAgIHsKKyAgICAgICAgaW50IHBvcnQgPSBuZXRzbm1wX2RzX2dldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9ERUZBVUxUX1BPUlQpOworICAgICAgICBpZiAocG9ydCAhPSAwKQorICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydCk7CisgICAgICAgIGVsc2UgaWYgKGRlZmF1bHRfdGFyZ2V0ICE9IE5VTEwpCisgICAgICAgICAgICBuZXRzbm1wX3NvY2thZGRyX2luNl8yKGFkZHIsIGRlZmF1bHRfdGFyZ2V0LCBOVUxMKTsKKyAgICB9CisKKyAgICBpZiAoaW5wZWVybmFtZSAhPSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIER1cGxpY2F0ZSB0aGUgcGVlcm5hbWUgYmVjYXVzZSB3ZSBtaWdodCB3YW50IHRvIG1hbmsgYXJvdW5kIHdpdGgKKyAgICAgICAgICogaXQuICAKKyAgICAgICAgICovCisKKyAgICAgICAgcGVlcm5hbWUgPSBzdHJkdXAoaW5wZWVybmFtZSk7CisgICAgICAgIGlmIChwZWVybmFtZSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIGNwID0gcGVlcm5hbWU7CisgICAgICAgIGlmICgqY3AgPT0gJzonKSBjcCsrOworICAgICAgICBwb3J0bm8gPSBhdG9pKGNwKTsKKyAgICAgICAgd2hpbGUgKCpjcCAmJiBpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSAqY3ApKSBjcCsrOworICAgICAgICBpZiAoISpjcCAmJiAgcG9ydG5vICE9IDApIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBPa2F5LCBpdCBsb29rcyBsaWtlIEpVU1QgYSBwb3J0IG51bWJlci4gIAorICAgICAgICAgICAgICovCisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJ0b3RhbGx5IG51bWVyaWM6ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgcG9ydG5vKSk7CisgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucygodV9zaG9ydClwb3J0bm8pOworICAgICAgICAgICAgZ290byByZXNvbHZlZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNlZSBpZiBpdCBpcyBhbiBJUHY2IGFkZHJlc3MgY292ZXJlZCB3aXRoIHNxdWFyZSBicmFja2V0cy4gQWxzbyBjaGVjaworICAgICAgICAgKiBmb3IgYW4gYXBwZW5kZWQgOnBvcnQuICAKKyAgICAgICAgICovCisgICAgICAgIGlmICgqcGVlcm5hbWUgPT0gJ1snKSB7CisgICAgICAgICAgICBjcCA9IHN0cmNocihwZWVybmFtZSwgJ10nKTsKKyAgICAgICAgICAgIGlmIChjcCAhPSBOVUxMKSB7CisJICAgICAgLyoKKwkgICAgICAgKiBTZWUgaWYgaXQgaXMgYW4gSVB2NiBsaW5rLWxvY2FsIGFkZHJlc3Mgd2l0aCBpbnRlcmZhY2UKKwkgICAgICAgKiBuYW1lIGFzIDx6b25lX2lkPiwgbGlrZSBmZTgwOjoxMjM0JWV0aDAuCisJICAgICAgICogUGxlYXNlIHJlZmVyIHRvIHRoZSBpbnRlcm5ldCBkcmFmdCwgSVB2NiBTY29wZWQgQWRkcmVzcyBBcmNoaXRlY3R1cmUKKwkgICAgICAgKiBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLWlwbmd3Zy1zY29waW5nLWFyY2gtMDQudHh0CisJICAgICAgICoKKwkgICAgICAgKi8KKwkgICAgICAgIGNoYXIgKnNjb3BlX2lkOworCSAgICAgICAgdW5zaWduZWQgaW50IGlmX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICAqY3AgPSAnXDAnOworCQlzY29wZV9pZCA9IHN0cmNocihwZWVybmFtZSArIDEsICclJyk7CisJCWlmIChzY29wZV9pZCAhPSBOVUxMKSB7CisJCSAgICAqc2NvcGVfaWQgPSAnXDAnOworCQkgICAgaWZfaW5kZXggPSBuZXRzbm1wX2lmX25hbWV0b2luZGV4KHNjb3BlX2lkICsgMSk7CisJCX0KKyAgICAgICAgICAgICAgICBpZiAoKihjcCArIDEpID09ICc6JykgeworICAgICAgICAgICAgICAgICAgICBwb3J0bm8gPSBhdG9pKGNwKzIpOworICAgICAgICAgICAgICAgICAgICBpZiAocG9ydG5vICE9IDAgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfcHRvbihBRl9JTkVUNiwgcGVlcm5hbWUgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUHY2IGFkZHJlc3Mgd2l0aCBwb3J0IHN1ZmZpeCA6JWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0bm8pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0bm8gPiAwICYmIHBvcnRubyA8PSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucygodV9zaG9ydClwb3J0bm8pOworICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJpbnZhbGlkIHBvcnQgbnVtYmVyOiAlZCIsIHBvcnRubykpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisjaWYgZGVmaW5lZChIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfc2NvcGVfaWQgPSBpZl9pbmRleDsKKyNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgZ290byByZXNvbHZlZDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChpbmV0X3B0b24KKyAgICAgICAgICAgICAgICAgICAgICAgIChBRl9JTkVUNiwgcGVlcm5hbWUgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkICopICYoYWRkci0+c2luNl9hZGRyKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUHY2IGFkZHJlc3Mgd2l0aCBzcXVhcmUgYnJhY2tldHNcbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRubyA9IG50b2hzKGFkZHItPnNpbjZfcG9ydCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAocG9ydG5vID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9ydG5vID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfREVGQVVMVF9QT1JUKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwb3J0bm8gPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3J0bm8gPSBTTk1QX1BPUlQ7CisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3BvcnQgPSBodG9ucygodV9zaG9ydClwb3J0bm8pOworI2lmIGRlZmluZWQoSEFWRV9TVFJVQ1RfU09DS0FERFJfSU42X1NJTjZfU0NPUEVfSUQpCisgICAgICAgICAgICAgICAgICAgICAgICBhZGRyLT5zaW42X3Njb3BlX2lkID0gaWZfaW5kZXg7CisjZW5kaWYKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisJCWlmIChzY29wZV9pZCAhPSBOVUxMKSB7CisJCSAgKnNjb3BlX2lkID0gJyUnOworCQl9CisJCSpjcCA9ICddJzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNwID0gc3RycmNocihwZWVybmFtZSwgJzonKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKwkgICAgY2hhciAqc2NvcGVfaWQ7CisJICAgIHVuc2lnbmVkIGludCBpZl9pbmRleCA9IDA7CisJICAgICpjcCA9ICdcMCc7CisJICAgIHNjb3BlX2lkID0gc3RyY2hyKHBlZXJuYW1lICsgMSwgJyUnKTsKKwkgICAgaWYgKHNjb3BlX2lkICE9IE5VTEwpIHsKKwkgICAgICAgICpzY29wZV9pZCA9ICdcMCc7CisJICAgICAgICBpZl9pbmRleCA9IG5ldHNubXBfaWZfbmFtZXRvaW5kZXgoc2NvcGVfaWQgKyAxKTsKKwkgICAgfQorICAgICAgICAgICAgcG9ydG5vID0gYXRvaShjcCArIDEpOworICAgICAgICAgICAgaWYgKHBvcnRubyAhPSAwICYmCisgICAgICAgICAgICAgICAgaW5ldF9wdG9uKEFGX0lORVQ2LCBwZWVybmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvaWQgKikgJihhZGRyLT5zaW42X2FkZHIpKSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiSVB2NiBhZGRyZXNzIHdpdGggcG9ydCBzdWZmaXggOiVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0b2koY3AgKyAxKSkpOworICAgICAgICAgICAgICAgIGlmIChwb3J0bm8gPiAwICYmIHBvcnRubyA8PSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydG5vKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJpbnZhbGlkIHBvcnQgbnVtYmVyOiAlZCIsIHBvcnRubykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyNpZiBkZWZpbmVkKEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEKQorICAgICAgICAgICAgICAgIGFkZHItPnNpbjZfc2NvcGVfaWQgPSBpZl9pbmRleDsKKyNlbmRpZgorICAgICAgICAgICAgICAgIGdvdG8gcmVzb2x2ZWQ7CisgICAgICAgICAgICB9CisJICAgIGlmIChzY29wZV9pZCAhPSBOVUxMKSB7CisJICAgICAgKnNjb3BlX2lkID0gJyUnOworCSAgICB9CisgICAgICAgICAgICAqY3AgPSAnOic7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBTZWUgaWYgaXQgaXMgSlVTVCBhbiBJUHY2IGFkZHJlc3MuICAKKyAgICAgICAgICovCisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHBlZXJuYW1lLCAodm9pZCAqKSAmKGFkZHItPnNpbjZfYWRkcikpKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJqdXN0IElQdjYgYWRkcmVzc1xuIikpOworICAgICAgICAgICAgZ290byByZXNvbHZlZDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFdlbGwsIGl0IG11c3QgYmUgYSBob3N0bmFtZSB0aGVuLCBwb3NzaWJseSB3aXRoIGFuIGFwcGVuZGVkIDpwb3J0LgorICAgICAgICAgKiBTb3J0IHRoYXQgb3V0IGZpcnN0LiAgCisgICAgICAgICAqLworCisgICAgICAgIGNwID0gc3RycmNocihwZWVybmFtZSwgJzonKTsKKyAgICAgICAgaWYgKGNwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICpjcCA9ICdcMCc7CisgICAgICAgICAgICBwb3J0bm8gPSBhdG9pKGNwICsgMSk7CisgICAgICAgICAgICBpZiAocG9ydG5vICE9IDApIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lKD8pIHdpdGggcG9ydCBzdWZmaXggOiVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcnRubykpOworICAgICAgICAgICAgICAgIGlmIChwb3J0bm8gPiAwICYmIHBvcnRubyA8PSAweGZmZmYpIHsKKyAgICAgICAgICAgICAgICAgICAgYWRkci0+c2luNl9wb3J0ID0gaHRvbnMoKHVfc2hvcnQpcG9ydG5vKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJpbnZhbGlkIHBvcnQgbnVtYmVyOiAlZCIsIHBvcnRubykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBObyBpZGVhLCBsb29rcyBib2d1cyBidXQgd2UgbWlnaHQgYXMgd2VsbCBwYXNzIHRoZSBmdWxsIHRoaW5nIHRvCisgICAgICAgICAgICAgICAgICogdGhlIG5hbWUgcmVzb2x2ZXIgYmVsb3cuICAKKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAqY3AgPSAnOic7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJob3N0bmFtZSg/KSB3aXRoIGVtYmVkZGVkICc6Jz9cbiIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBGYWxsIHRocm91Z2guICAKKyAgICAgICAgICAgICAqLworICAgICAgICB9CisKKyAgICAgICAgaWYgKHBlZXJuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJlbXB0eSBob3N0bmFtZVxuIikpOworICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisKKyNpZiBIQVZFX0dFVEFERFJJTkZPCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50ID0geyAwIH07CisgICAgICAgICAgICBoaW50LmFpX2ZsYWdzID0gMDsKKyAgICAgICAgICAgIGhpbnQuYWlfZmFtaWx5ID0gUEZfSU5FVDY7CisgICAgICAgICAgICBoaW50LmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsKKyAgICAgICAgICAgIGhpbnQuYWlfcHJvdG9jb2wgPSAwOworCisgICAgICAgICAgICBlcnIgPSBuZXRzbm1wX2dldGFkZHJpbmZvKHBlZXJuYW1lLCBOVUxMLCAmaGludCwgJmFkZHJzKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoZXJyICE9IDApIHsKKyAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFkZHJzICE9IE5VTEwpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwgImhvc3RuYW1lIChyZXNvbHZlZCBva2F5KVxuIikpOworICAgICAgICAgICAgbWVtY3B5KCZhZGRyLT5zaW42X2FkZHIsCisgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhZGRycy0+YWlfYWRkciktPnNpbjZfYWRkciwKKyAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgICAgICBmcmVlYWRkcmluZm8oYWRkcnMpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiRmFpbGVkIHRvIHJlc29sdmUgSVB2NiBob3N0bmFtZVxuIikpOworICAgICAgICB9CisjZWxpZiBIQVZFX0dFVElQTk9ERUJZTkFNRQorICAgICAgICBocCA9IGdldGlwbm9kZWJ5bmFtZShwZWVybmFtZSwgQUZfSU5FVDYsIDAsICZlcnIpOworICAgICAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlID0gJWQpXG4iLCBlcnIpKTsKKyAgICAgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7CisgICAgICAgIG1lbWNweSgmKGFkZHItPnNpbjZfYWRkciksIGhwLT5oX2FkZHIsIGhwLT5oX2xlbmd0aCk7CisjZWxpZiBIQVZFX0dFVEhPU1RCWU5BTUUKKyAgICAgICAgaHAgPSBuZXRzbm1wX2dldGhvc3RieW5hbWUocGVlcm5hbWUpOworICAgICAgICBpZiAoaHAgPT0gTlVMTCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLAorICAgICAgICAgICAgICAgICAgICAgICAgImhvc3RuYW1lIChjb3VsZG4ndCByZXNvbHZlKVxuIikpOworICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUNikgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKG5vdCBBRl9JTkVUNiEpXG4iKSk7CisgICAgICAgICAgICAgICAgZnJlZShwZWVybmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NvY2thZGRyX2luNl8yIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaG9zdG5hbWUgKHJlc29sdmVkIG9rYXkpXG4iKSk7CisgICAgICAgICAgICAgICAgbWVtY3B5KCYoYWRkci0+c2luNl9hZGRyKSwgaHAtPmhfYWRkciwgaHAtPmhfbGVuZ3RoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKkhBVkVfR0VUSE9TVEJZTkFNRSAqLworICAgICAgICAvKgorICAgICAgICAgKiBUaGVyZSBpcyBubyBuYW1lIHJlc29sdmluZyBmdW5jdGlvbiBhdmFpbGFibGUuICAKKyAgICAgICAgICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsCisgICAgICAgICAgICAgICAgICJubyBnZXRhZGRyaW5mbygpL2dldGlwbm9kZWJ5bmFtZSgpL2dldGhvc3RieW5hbWUoKVxuIik7CisgICAgICAgIGZyZWUocGVlcm5hbWUpOworICAgICAgICByZXR1cm4gMDsKKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLypIQVZFX0dFVEhPU1RCWU5BTUUgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF9zb2NrYWRkcl9pbjZfMiIsICJOVUxMIHBlZXJuYW1lIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgcmVzb2x2ZWQ6CisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc29ja2FkZHJfaW42XzIiLCAicmV0dXJuIHsgQUZfSU5FVDYsIFslc106JWh1IH1cbiIsCisgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkci0+c2luNl9hZGRyLCBkZWJ1Z19hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoZGVidWdfYWRkcikpLCBudG9ocyhhZGRyLT5zaW42X3BvcnQpKSk7CisgICAgZnJlZShwZWVybmFtZSk7CisgICAgcmV0dXJuIDE7Cit9CisKKworaW50CituZXRzbm1wX3NvY2thZGRyX2luNihzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaW5wZWVybmFtZSwgaW50IHJlbW90ZV9wb3J0KQoreworICAgIGNoYXIgYnVmW3NpemVvZihyZW1vdGVfcG9ydCkgKiAzICsgMl07CisgICAgc3ByaW50ZihidWYsICI6JXUiLCByZW1vdGVfcG9ydCk7CisgICAgcmV0dXJuIG5ldHNubXBfc29ja2FkZHJfaW42XzIoYWRkciwgaW5wZWVybmFtZSwgcmVtb3RlX3BvcnQgPyBidWYgOiBOVUxMKTsKK30KKworI2VuZGlmIC8qIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1NIRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZWQ4MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFNTSERvbWFpbi5jCkBAIC0wLDAgKzEsMTAxMCBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTU0hEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPGxpYnNzaDIuaD4KKyNpbmNsdWRlIDxsaWJzc2gyX3NmdHAuaD4KKworI2lmZGVmIEhBVkVfU1lTX1BBUkFNX0gKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19VTl9ICisjaW5jbHVkZSA8c3lzL3VuLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisjaW5jbHVkZSA8cHdkLmg+CisKKyNpZm5kZWYgTUFYUEFUSExFTgorI3dhcm4gbm8gc3lzdGVtIG1heCBwYXRoIGxlbmd0aCBkZXRlY3RlZAorI2RlZmluZSBNQVhQQVRITEVOIDIwNDgKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9kZWZhdWx0X3N0b3JlLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZSh1c2VyX2luZm9ybWF0aW9uKQorCisjZGVmaW5lIE1BWF9OQU1FX0xFTkdUSCAxMjcKKworI2RlZmluZSBORVRTTk1QX1NTSFRPU05NUF9WRVJTSU9OMSAgICAgIDEKKyNkZWZpbmUgTkVUU05NUF9NQVhfU1NIVE9TTk1QX1ZFUlNJT04gICAxCisKKyNkZWZpbmUgREVGQVVMVF9TT0NLX05BTUUgInNzaGRvbWFpbnNvY2tldCIKKwordHlwZWRlZiBzdHJ1Y3QgbmV0c25tcF9zc2hfYWRkcl9wYWlyX3MgeworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByZW1vdGVfYWRkcjsKKyAgICBzdHJ1Y3QgaW5fYWRkciBsb2NhbF9hZGRyOworICAgIExJQlNTSDJfU0VTU0lPTiAqc2Vzc2lvbjsKKyAgICBMSUJTU0gyX0NIQU5ORUwgKmNoYW5uZWw7CisgICAgY2hhciB1c2VybmFtZVtNQVhfTkFNRV9MRU5HVEgrMV07CisgICAgc3RydWN0IHNvY2thZGRyX3VuIHVuaXhfc29ja2V0X2VuZDsKKyAgICBjaGFyIHNvY2tldF9wYXRoW01BWFBBVEhMRU5dOworfSBuZXRzbm1wX3NzaF9hZGRyX3BhaXI7CisKK2NvbnN0IG9pZCBuZXRzbm1wX3NubXBTU0hEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9TU0hfSVAgfTsKK3N0YXRpYyBuZXRzbm1wX3Rkb21haW4gc3NoRG9tYWluOworCisjZGVmaW5lIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUgMQorCisvKgorICogTm90IHN0YXRpYyBzaW5jZSBpdCBpcyBuZWVkZWQgaGVyZSBhcyB3ZWxsIGFzIGluIHNubXBVRFBEb21haW4sIGJ1dCBub3QKKyAqIHB1YmxpYyBlaXRoZXIKKyAqLworaW50CituZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgorICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKKyAqLworCitzdGF0aWMgY2hhciAqCituZXRzbm1wX3NzaF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIG5ldHNubXBfc3NoX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKKworICAgIGlmIChkYXRhICE9IE5VTEwgJiYgbGVuID09IHNpemVvZihuZXRzbm1wX3NzaF9hZGRyX3BhaXIpKSB7CisJYWRkcl9wYWlyID0gKG5ldHNubXBfc3NoX2FkZHJfcGFpciAqKSBkYXRhOworICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgeworCWFkZHJfcGFpciA9IChuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKikgdC0+ZGF0YTsKKyAgICB9CisKKyAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiU1NIOiB1bmtub3duIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RydWN0IHNvY2thZGRyX2luICp0byA9IE5VTEw7CisJY2hhciB0bXBbNjRdOworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikgJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKTsKKyAgICAgICAgaWYgKHRvID09IE5VTEwpIHsKKyAgICAgICAgICAgIHJldHVybiBzdHJkdXAoIlNTSDogdW5rbm93biIpOworICAgICAgICB9CisKKyAgICAgICAgc3ByaW50Zih0bXAsICJTU0g6IFslc106JWhkIiwKKyAgICAgICAgICAgICAgICBpbmV0X250b2EodG8tPnNpbl9hZGRyKSwgbnRvaHModG8tPnNpbl9wb3J0KSk7CisgICAgICAgIHJldHVybiBzdHJkdXAodG1wKTsKKyAgICB9Cit9CisKKworCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK3N0YXRpYyBpbnQKK25ldHNubXBfc3NoX3JlY3YobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmID0gTlVMTDsKKyAgICBuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgaW50IGlhbWNsaWVudCA9IDA7CisKKyAgICBERUJVR01TR1RMKCgic3NoIiwgImF0IHRoZSB0b3Agb2Ygc3NoX3JlY3ZcbiIpKTsKKyAgICBERUJVR01TR1RMKCgic3NoIiwgInQ9JXBcbiIsIHQpKTsKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPmRhdGEgIT0gTlVMTCkgeworCWFkZHJfcGFpciA9IChuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKikgdC0+ZGF0YTsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgic3NoIiwgImFkZHJfcGFpcj0lcFxuIiwgYWRkcl9wYWlyKSk7CisgICAgaWYgKHQgIT0gTlVMTCAmJiBhZGRyX3BhaXIgJiYgYWRkcl9wYWlyLT5jaGFubmVsKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAidD0lcCwgYWRkcl9wYWlyPSVwLCBjaGFubmVsPSVwXG4iLAorICAgICAgICAgICAgICAgICAgICB0LCBhZGRyX3BhaXIsIGFkZHJfcGFpci0+Y2hhbm5lbCkpOworICAgICAgICBpYW1jbGllbnQgPSAxOworCXdoaWxlIChyYyA8IDApIHsKKwkgICAgcmMgPSBsaWJzc2gyX2NoYW5uZWxfcmVhZChhZGRyX3BhaXItPmNoYW5uZWwsIGJ1Ziwgc2l6ZSk7CisJICAgIGlmIChyYyA8IDApIHsgIC8qIFhYWDogZnJvbSB0Y3A7IHNzaCBlcXVpdj86ICAmJiBlcnJubyAhPSBFSU5UUiAqLworCQlERUJVR01TR1RMKCgic3NoIiwgInJlY3YgZmQgJWQgZXJyICVkIChcIiVzXCIpXG4iLAorCQkJICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKwkJYnJlYWs7CisJICAgIH0KKwkgICAgREVCVUdNU0dUTCgoInNzaCIsICJyZWN2IGZkICVkIGdvdCAlZCBieXRlc1xuIiwKKwkJCXQtPnNvY2ssIHJjKSk7CisJfQorICAgIH0gZWxzZSBpZiAodCAhPSBOVUxMKSB7CisKKyNpZmRlZiBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFCisKKyAgICAgICAgc29ja2xlbl90ICAgICAgIHRvbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7CisKKyAgICAgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgICAgIHN0cnVjdCBzb2NrYWRkciAqdG87CisgICAgICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgU05NUF9NQUxMT0NfU1RSVUNUKHNvY2thZGRyX3VuKTsKKyAgICAgICAgICAgIGlmIChOVUxMID09IHRvKSB7CisgICAgICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYoZ2V0c29ja25hbWUodC0+c29jaywgdG8sICZ0b2xlbikgIT0gMCl7CisgICAgICAgICAgICAgICAgZnJlZSh0byk7CisgICAgICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAgICAgKm9sZW5ndGggPSAwOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGlmIChhZGRyX3BhaXItPnVzZXJuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAvKiB3ZSBkb24ndCBoYXZlIGEgdXNlcm5hbWUgeWV0LCBzbyB0aGlzIGlzIHRoZSBmaXJzdCBtZXNzYWdlICovCisgICAgICAgICAgICAgICAgc3RydWN0IHVjcmVkICpyZW1vdGV1c2VyOworICAgICAgICAgICAgICAgIHN0cnVjdCBtc2doZHIgbXNnOworICAgICAgICAgICAgICAgIHN0cnVjdCBpb3ZlYyBpb3ZbMV07CisgICAgICAgICAgICAgICAgY2hhciBjbXNnW0NNU0dfU1BBQ0Uoc2l6ZW9mKHJlbW90ZXVzZXIpKSs0MDk2XTsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgY21zZ2hkciAqY21zZ3B0cjsKKyAgICAgICAgICAgICAgICB1X2NoYXIgKmNoYXJidWYgID0gYnVmOworCisgICAgICAgICAgICAgICAgaW92WzBdLmlvdl9iYXNlID0gYnVmOworICAgICAgICAgICAgICAgIGlvdlswXS5pb3ZfbGVuID0gc2l6ZTsKKworICAgICAgICAgICAgICAgIG1lbXNldCgmbXNnLCAwLCBzaXplb2YgbXNnKTsKKyAgICAgICAgICAgICAgICBtc2cubXNnX2lvdiA9IGlvdjsKKyAgICAgICAgICAgICAgICBtc2cubXNnX2lvdmxlbiA9IDE7CisgICAgICAgICAgICAgICAgbXNnLm1zZ19jb250cm9sID0gJmNtc2c7CisgICAgICAgICAgICAgICAgbXNnLm1zZ19jb250cm9sbGVuID0gc2l6ZW9mKGNtc2cpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIHJjID0gcmVjdm1zZyh0LT5zb2NrLCAmbXNnLCBNU0dfRE9OVFdBSVQpOyAvKiB1c2UgRE9OVFdBSVQ/ICovCisgICAgICAgICAgICAgICAgaWYgKHJjIDw9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIC8qIHdlIGhhdmVuJ3QgcmVjZWl2ZWQgdGhlIHN0YXJ0aW5nIGluZm8gKi8KKyAgICAgICAgICAgICAgICBpZiAoKHVfY2hhcikgY2hhcmJ1ZlswXSA+IE5FVFNOTVBfU1NIVE9TTk1QX1ZFUlNJT04xKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIHVuc3VwcG9ydGVkIGNvbm5lY3Rpb24gdmVyc2lvbiAqLworICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAicmVjZWl2ZWQgdW5zdXBwb3J0ZWQgc3NodG9zbm1wIHZlcnNpb246ICVkXG4iLCBjaGFyYnVmWzBdKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAicmVjZWl2ZWQgZmlyc3QgbXNnIG92ZXIgU1NIOyBpbnRlcm5hbCBTU0ggcHJvdG9jb2wgdmVyc2lvbiAlZFxuIiwgY2hhcmJ1ZlswXSkpOworCisgICAgICAgICAgICAgICAgZm9yIChjbXNncHRyID0gQ01TR19GSVJTVEhEUigmbXNnKTsgY21zZ3B0ciAhPSBOVUxMOyBjbXNncHRyID0gQ01TR19OWFRIRFIoJm1zZywgY21zZ3B0cikpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNtc2dwdHItPmNtc2dfbGV2ZWwgPT0gU09MX1NPQ0tFVCAmJiBjbXNncHRyLT5jbXNnX3R5cGUgPT0gU0NNX0NSRURFTlRJQUxTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAvKiByZWNlaXZlZCBjcmVkZW50aWFsIGluZm8gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwYXNzd2QgKnVzZXJfcHc7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZXVzZXIgPSAoc3RydWN0IHVjcmVkICopIENNU0dfREFUQShjbXNncHRyKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1c2VyX3B3ID0gZ2V0cHd1aWQocmVtb3RldXNlci0+dWlkKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJObyB1c2VyIGZvdW5kIGZvciB1aWQgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZXVzZXItPnVpZCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmxlbih1c2VyX3B3LT5wd19uYW1lKSA+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGFkZHJfcGFpci0+dXNlcm5hbWUpLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVc2VyIG5hbWUgJyVzJyB0b28gbG9uZyBmb3Igc25tcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VyX3B3LT5wd19uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBzdHJsY3B5KGFkZHJfcGFpci0+dXNlcm5hbWUsIHVzZXJfcHctPnB3X25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyX3BhaXItPnVzZXJuYW1lKSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJTZXR0aW5nIHVzZXIgbmFtZSB0byAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkcl9wYWlyLT51c2VybmFtZSkpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhZGRyX3BhaXItPnVzZXJuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZhaWxlZCB0byBleHRyYWN0IHVzZXJuYW1lIGZyb20gc3NoZCBjb25uZWN0ZWQgdW5peCBzb2NrZXRcbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHJjID09IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogdGhlIG9ubHkgcGFja2V0IHdlIHJlY2VpdmVkIHdhcyB0aGUgc3RhcnRpbmcgb25lICovCisgICAgICAgICAgICAgICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfRU1QVFlfUEtUOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByYyAtPSAxOworICAgICAgICAgICAgICAgIG1lbW1vdmUoY2hhcmJ1ZiwgJmNoYXJidWZbMV0sIHJjKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgd2hpbGUgKHJjIDwgMCkgeworICAgICAgICAgICAgICAgICAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAicmVjdiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgKm9wYXF1ZSA9ICh2b2lkKil0bzsKKyAgICAgICAgICAgICAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgInJlY3YgZmQgJWQgZ290ICVkIGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgcmMpKTsKKyAgICAgICAgfQorICAgICAgICAKKyNlbHNlIC8qIHdlJ3JlIGNhbGxlZCBkaXJlY3RseSBieSBzc2hkIGFuZCB1c2Ugc3RkaW4vb3V0ICovCisKKyAgICAgICAgc3RydWN0IHBhc3N3ZCAqdXNlcl9wdzsKKworICAgICAgICBpYW1jbGllbnQgPSAwOworICAgICAgICAvKiB3ZSdyZSBvbiB0aGUgc2VydmVyIHNpZGUgYW5kIHNob3VsZCByZWFkIGZyb20gc3RkaW4gKi8KKyAgICAgICAgd2hpbGUgKHJjIDwgMCkgeworICAgICAgICAgICAgcmMgPSByZWFkKFNURElOX0ZJTEVOTywgYnVmLCBzaXplKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiIHJlYWQgb24gc3RkaW4gZmFpbGVkOiAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAocmMgPT0gMCkgeworICAgICAgICAgICAgICAgIC8qIDAgaW5wdXQgaXMgcHJvYmFibHkgYmFkIHNpbmNlIHdlIHNlbGVjdGVkIG9uIGl0ICovCisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJnb3QgYSAwIHJlYWQgb24gc3RkaW5cbiIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBERUJVR01TR1RMKCgic3NoIiwgInJlYWQgb24gc3RkaW4gZ290ICVkIGJ5dGVzXG4iLCByYykpOworICAgICAgICB9CisKKy8qIFhYWDogbmVlZCB0byBjaGVjayB0aGUgdXNlcm5hbWUsIGJ1dCBhZGRyX3BhaXIgZG9lc24ndCBleGlzdCEgKi8KKyAgICAgICAgLyoKKyAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJjdXJyZW50IHVzZXJuYW1lPSVzXG4iLCBjKSk7CisgICAgICAgIGlmIChhZGRyX3BhaXItPnVzZXJuYW1lWzBdID09ICdcMCcpIHsKKyAgICAgICAgICAgIGlmICgodXNlcl9wdyA9IGdldHB3dWlkKGdldHVpZCgpKSkgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJObyB1c2VyIGZvdW5kIGZvciB1aWQgJWRcbiIsIGdldHVpZCgpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoc3RybGVuKHVzZXJfcHctPnB3X25hbWUpID4gc2l6ZW9mKGFkZHJfcGFpci0+dXNlcm5hbWUpLTEpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVXNlciBuYW1lICclcycgdG9vIGxvbmcgZm9yIHNubXBcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdXNlcl9wdy0+cHdfbmFtZSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RybGNweShhZGRyX3BhaXItPnVzZXJuYW1lLCB1c2VyX3B3LT5wd19uYW1lLAorICAgICAgICAgICAgICAgICAgICBzaXplb2YoYWRkcl9wYWlyLT51c2VybmFtZSkpOworICAgICAgICB9CisgICAgICAgICovCisKKyNlbmRpZiAvKiAhIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUgKi8KKyAgICB9CisKKyAgICAvKiBjcmVhdGUgYSB0bVN0YXRlUmVmIGNhY2hlICovCisgICAgdG1TdGF0ZVJlZiA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKTsKKworICAgIC8qIHNlY3NoZWxsIGRvY3VtZW50IHNheXMgd2VyZSBhbHdheXMgYXV0aHByaXYsIGV2ZW4gaWYgTlVMTCBhbGdvcml0aG1zICovCisgICAgLyogdWdoISAqLworICAgIC8qIFhYWDogZGlzYWxsb3cgTlVMTCBpbiBvdXIgaW1wbGVtZW50YXRpb25zICovCisgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0U2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX0FVVEhQUklWOworCisgICAgLyogWFhYOiBmaWd1cmUgb3V0IGhvdyB0byBnZXQgdGhlIHNwZWNpZmllZCBsb2NhbCBzZWNuYW1lIGZyb20gdGhlIHNlc3Npb24gKi8KKyAgICBpZiAoaWFtY2xpZW50ICYmIDApIHsKKyAgICAgICAgLyogWFhYOiB3ZSdyZSBvbiB0aGUgY2xpZW50OyB3ZSBzaG91bGQgaGF2ZSBuYW1lZCB0aGUKKyAgICAgICAgICAgY29ubmVjdGlvbiBvdXJzZWx2ZXMuLi4gIHB1bGwgdGhpcyBmcm9tIHNlc3Npb24gc29tZWhvdz8gKi8KKyAgICAgICAgc3RybGNweSh0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsIGFkZHJfcGFpci0+dXNlcm5hbWUsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSkpOworICAgIH0gZWxzZSB7CisjaWZkZWYgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRQorICAgICAgICBzdHJsY3B5KHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSwgYWRkcl9wYWlyLT51c2VybmFtZSwKKyAgICAgICAgICAgICAgICBzaXplb2YodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKSk7CisjZWxzZSAvKiB3ZSdyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc3NoZCBhbmQgdXNlIHN0ZGluL291dCAqLworICAgICAgICAvKiB3ZSdyZSBvbiB0aGUgc2VydmVyLi4uICovCisgICAgICAgIC8qIFhYWDogdGhpcyBkb2Vzbid0IGNvcHkgcHJvcGVybHkgYW5kIGNhbiBnZXQgcG9pbnRlcgorICAgICAgICAgICByZWZlcmVuY2UgaXNzdWVzICovCisgICAgICAgIGlmIChzdHJsZW4oZ2V0ZW52KCJVU0VSIikpID4gMTI3KSB7CisgICAgICAgICAgICAvKiBydWggcm9oICovCisgICAgICAgICAgICAvKiBYWFg6IGNsZWFuIHVwICovCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICBleGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogWFhYOiBkZXRlY3QgYW5kIHRocm93IG91dCBvdmVyZmxvdyBzZWNuYW1lIHNpemVzIHJhdGhlcgorICAgICAgICAgICB0aGFuIHRydW5jYXRpbmcuICovCisgICAgICAgIHN0cmxjcHkodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lLCBnZXRlbnYoIlVTRVIiKSwKKyAgICAgICAgICAgICAgICBzaXplb2YodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKSk7CisjZW5kaWYgLyogISBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFICovCisgICAgfQorICAgIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZVtzaXplb2YodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKS0xXSA9ICdcMCc7CisgICAgdG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lTGVuID0gc3RybGVuKHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSk7CisgICAgKm9wYXF1ZSA9IHRtU3RhdGVSZWY7CisgICAgKm9sZW5ndGggPSBzaXplb2YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKTsKKworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfc3NoX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBuZXRzbm1wX3NzaF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmID0gTlVMTDsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMKSB7CisJYWRkcl9wYWlyID0gKG5ldHNubXBfc3NoX2FkZHJfcGFpciAqKSB0LT5kYXRhOworICAgIH0KKworICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKKyAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSkpIHsKKyAgICAgICAgdG1TdGF0ZVJlZiA9IChuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UgKikgKm9wYXF1ZTsKKyAgICB9CisKKyAgICBpZiAoIXRtU3RhdGVSZWYpIHsKKyAgICAgICAgLyogdGhpcyBpcyBub3cgYW4gZXJyb3IgYWNjb3JkaW5nIHRvIG15IG1lbW9yeSBpbiB0aGUgcmVjZW50IGRyYWZ0ICovCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJuZXRzbm1wX3NzaF9zZW5kIHdhc24ndCBwYXNzZWQgYSB2YWxpZCB0bVN0YXRlUmVmZXJlbmNlXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChOVUxMICE9IHQgJiYgTlVMTCAhPSBhZGRyX3BhaXIgJiYgTlVMTCAhPSBhZGRyX3BhaXItPmNoYW5uZWwpIHsKKyAgICAgICAgaWYgKGFkZHJfcGFpci0+dXNlcm5hbWVbMF0gPT0gJ1wwJykgeworICAgICAgICAgICAgc3RybGNweShhZGRyX3BhaXItPnVzZXJuYW1lLCB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsCisgICAgICAgICAgICAgICAgICAgIHNpemVvZihhZGRyX3BhaXItPnVzZXJuYW1lKSk7CisgICAgICAgIH0gZWxzZSBpZiAoc3RyY21wKGFkZHJfcGFpci0+dXNlcm5hbWUsIHRtU3RhdGVSZWYtPnNlY3VyaXR5TmFtZSkgIT0gMCB8fAorICAgICAgICAgICAgICAgICAgIHN0cmxlbihhZGRyX3BhaXItPnVzZXJuYW1lKSAhPSB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVMZW4pIHsKKyAgICAgICAgICAgIC8qIGVycm9yISAgdGhleSBtdXN0IGFsd2F5cyBtYXRjaCAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldHNubXBfc3NoX3NlbmQgd2FzIHBhc3NlZCBhIHRtU3RhdGVSZWZlcmVuY2Ugd2l0aCBhIHNlY3VyaXR5TmFtZSBub3QgZXF1YWwgdG8gcHJldmlvdXMgbWVzc2FnZXNcbiIpOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IGxpYnNzaDJfY2hhbm5lbF93cml0ZShhZGRyX3BhaXItPmNoYW5uZWwsIGJ1Ziwgc2l6ZSk7CisJICAgIGlmIChyYyA8IDApIHsgLyogWFhYOiAgJiYgZXJybm8gIT0gRUlOVFIgKi8KKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwpIHsKKyNpZmRlZiBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFCisKKwl3aGlsZSAocmMgPCAwKSB7CisgICAgICAgICAgICByYyA9IHNlbmR0byh0LT5zb2NrLCBidWYsIHNpemUsIDAsIE5VTEwsIDApOworICAgICAgICAgICAgCisgICAgICAgICAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworI2Vsc2UgLyogd2UncmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHNzaGQgYW5kIHVzZSBzdGRpbi9vdXQgKi8KKyAgICAgICAgLyogb24gdGhlIHNlcnZlcjsgc2VuZCB0byBzdGRvdXQgKi8KKwl3aGlsZSAocmMgPCAwKSB7CisJICAgIHJjID0gd3JpdGUoU1RET1VUX0ZJTEVOTywgYnVmLCBzaXplKTsKKyAgICAgICAgICAgIGZmbHVzaChzdGRvdXQpOworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7IC8qIFhYWDogICYmIGVycm5vICE9IEVJTlRSICovCisJCWJyZWFrOworCSAgICB9CisJfQorI2VuZGlmCisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF9zc2hfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgbmV0c25tcF9zc2hfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKKwlhZGRyX3BhaXIgPSAobmV0c25tcF9zc2hfYWRkcl9wYWlyICopIHQtPmRhdGE7CisgICAgfQorCisgICAgaWYgKHQgIT0gTlVMTCAmJiBhZGRyX3BhaXIgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiY2xvc2UgZmQgJWRcbiIsIHQtPnNvY2spKTsKKworICAgICAgICBpZiAoYWRkcl9wYWlyLT5jaGFubmVsKSB7CisgICAgICAgICAgICBsaWJzc2gyX2NoYW5uZWxfY2xvc2UoYWRkcl9wYWlyLT5jaGFubmVsKTsKKyAgICAgICAgICAgIGxpYnNzaDJfY2hhbm5lbF9mcmVlKGFkZHJfcGFpci0+Y2hhbm5lbCk7CisgICAgICAgICAgICBhZGRyX3BhaXItPmNoYW5uZWwgPSBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGFkZHJfcGFpci0+c2Vzc2lvbikgeworICAgICAgICAgICAgbGlic3NoMl9zZXNzaW9uX2Rpc2Nvbm5lY3QoYWRkcl9wYWlyLT5zZXNzaW9uLCAiTm9ybWFsIFNodXRkb3duIik7CisgICAgICAgICAgICBsaWJzc2gyX3Nlc3Npb25fZnJlZShhZGRyX3BhaXItPnNlc3Npb24pOworICAgICAgICAgICAgYWRkcl9wYWlyLT5zZXNzaW9uID0gTlVMTDsKKyAgICAgICAgfQorCisjaWZuZGVmIEhBVkVfQ0xPU0VTT0NLRVQKKyAgICAgICAgcmMgPSBjbG9zZSh0LT5zb2NrKTsKKyNlbHNlCisgICAgICAgIHJjID0gY2xvc2Vzb2NrZXQodC0+c29jayk7CisjZW5kaWYKKyAgICAgICAgdC0+c29jayA9IC0xOworCisjaWZkZWYgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRQorCisgICAgICAgIGNsb3NlKHQtPnNvY2spOworICAgICAgICAKKyAgICAgICAgaWYgKCFhZGRyX3BhaXItPnNlc3Npb24gJiYgIWFkZHJfcGFpci0+Y2hhbm5lbCkgeworICAgICAgICAgICAgLyogdW5peCBzb2NrZXQgYmFzZWQgY29ubmVjdGlvbiAqLworICAgICAgICAgICAgY2xvc2UodC0+c29jayk7CisKKyAgICAgICAgICAgIC8qIFhYWDogbWFrZSBjb25maWd1cmFibGUgKi8KKyAgICAgICAgICAgIHVubGluayhhZGRyX3BhaXItPnNvY2tldF9wYXRoKTsKKyAgICAgICAgfQorCisjZWxzZSAvKiB3ZSdyZSBjYWxsZWQgZGlyZWN0bHkgYnkgc3NoZCBhbmQgdXNlIHN0ZGluL291dCAqLworCisgICAgICAgIC8qIG9uIHRoZSBzZXJ2ZXI6IGNsb3NlIHN0ZGluL291dCAqLworICAgICAgICBjbG9zZShTVERJTl9GSUxFTk8pOworICAgICAgICBjbG9zZShTVERPVVRfRklMRU5PKTsKKyNlbmRpZiAvKiAhIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUgKi8KKworICAgIH0gZWxzZSB7CisKKyNpZm5kZWYgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRQorICAgICAgICAvKiBvbiB0aGUgc2VydmVyOiBjbG9zZSBzdGRpbi9vdXQgKi8KKyAgICAgICAgY2xvc2UoU1RESU5fRklMRU5PKTsKKyAgICAgICAgY2xvc2UoU1RET1VUX0ZJTEVOTyk7CisjZW5kaWYgLyogISBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFICovCisKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF9zc2hfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworI2lmZGVmIFNOTVBTU0hET01BSU5fVVNFX0VYVEVSTkFMX1BJUEUKKworICAgIC8qIG11Y2ggb2YgdGhpcyBpcyBkdXBsaWNhdGVkIGZyb20gc25tcFVuaXhEb21haW4uYyAqLworCisgICAgbmV0c25tcF9zc2hfYWRkcl9wYWlyICphZGRyX3BhaXI7ICAgIAorICAgIGludCAgICAgICAgICAgICAgICAgICAgbmV3c29jayAgID0gLTE7CisgICAgc3RydWN0IHNvY2thZGRyICAgICAgICpmYXJlbmQgICAgPSBOVUxMOworICAgIHNvY2tsZW5fdCAgICAgICAgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bik7CisKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIGFkZHJfcGFpciA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9zc2hfYWRkcl9wYWlyKTsKKworICAgICAgICBpZiAoYWRkcl9wYWlyID09IE5VTEwpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBhY2NlcHRhbmNlIG9mIHRoaXMgc29ja2V0IGZhaWxlZC4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJhY2NlcHQ6IG1hbGxvYyBmYWlsZWRcbiIpKTsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCisgICAgICAgIGZhcmVuZCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgJmFkZHJfcGFpci0+dW5peF9zb2NrZXRfZW5kOworCisgICAgICAgIG5ld3NvY2sgPSBhY2NlcHQodC0+c29jaywgZmFyZW5kLCAmZmFyZW5kbGVuKTsKKworICAgICAgICAvKiBzZXQgdGhlIFNPX1BBU1NDUkVEIG9wdGlvbiBzbyB3ZSBjYW4gcmVjZWl2ZSB0aGUgcmVtb3RlIHVpZCAqLworICAgICAgICB7CisgICAgICAgICAgICBpbnQgb25lID0gMTsKKyAgICAgICAgICAgIHNldHNvY2tvcHQobmV3c29jaywgU09MX1NPQ0tFVCwgU09fUEFTU0NSRUQsICh2b2lkICopICZvbmUsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihvbmUpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChuZXdzb2NrIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgZnJlZShhZGRyX3BhaXIpOworICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHQtPmRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJhY2NlcHQgc3VjY2VlZGVkIChmYXJlbmQgJXAgbGVuICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgZmFyZW5kLCBmYXJlbmRsZW4pKTsKKyAgICAgICAgdC0+ZGF0YSA9IGFkZHJfcGFpcjsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9zc2hfYWRkcl9wYWlyKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fU05EQlVGLCAxLCAwKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKKyAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworI2Vsc2UgLyogd2UncmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHNzaGQgYW5kIHVzZSBzdGRpbi9vdXQgKi8KKyAgICAvKiB3ZSBkb24ndCBuZWVkIHRvIGRvIGFueXRoaW5nOyBzZXJ2ZXIgc2lkZSB1c2VzIHN0ZGluL291dCAqLworICAgIC8qIFhYWDogY2hlY2sgdGhhdCB3ZSdyZSBhbiBzc2ggY29ubmVjdGlvbiAqLworICAgIAorICAgIHJldHVybiBTVERJTl9GSUxFTk87IC8qIHJldHVybiBzdGRpbiAqLworI2VuZGlmIC8qICEgU05NUFNTSERPTUFJTl9VU0VfRVhURVJOQUxfUElQRSAqLworCit9CisKKworCisvKgorICogT3BlbiBhIFNTSC1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlIGxvY2FsCisgKiBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UgYWRkciBpcyAKKyAqIHRoZSByZW1vdGUgYWRkcmVzcyB0byBzZW5kIHRoaW5ncyB0by4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfc3NoX3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisgICAgbmV0c25tcF9zc2hfYWRkcl9wYWlyICphZGRyX3BhaXIgPSBOVUxMOworICAgIGludCByYyA9IDA7CisgICAgaW50IGksIGF1dGhfcHcgPSAwOworICAgIGNvbnN0IGNoYXIgKmZpbmdlcnByaW50OworICAgIGNoYXIgKnVzZXJhdXRobGlzdDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfdW4gKnVuYWRkcjsKKyAgICBjb25zdCBjaGFyICpzb2NrcGF0aCA9CisgICAgICAgIG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hUT1NOTVBfU09DS0VUKTsKKyAgICBjaGFyIHRtcHNvY2twYXRoW01BWFBBVEhMRU5dOworCisjaWZkZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgIGlmIChsb2NhbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworCisgICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmICh0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+ZG9tYWluID0gbmV0c25tcF9zbm1wU1NIRG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wX3NubXBTU0hEb21haW5fbGVuOworICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU0gfCBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEOworCisgICAgYWRkcl9wYWlyID0gU05NUF9NQUxMT0NfVFlQRURFRihuZXRzbm1wX3NzaF9hZGRyX3BhaXIpOworICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgeworICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgdC0+ZGF0YSA9IGFkZHJfcGFpcjsKKyAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3NzaF9hZGRyX3BhaXIpOworCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyNpZmRlZiBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFCisKKyAgICAgICAgLyogWFhYOiBzZXQgdC0+bG9jYWwgYW5kIHQtPmxvY2FsX2xlbmd0aCAqLworCisKKyAgICAgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU47CisKKyAgICAgICAgdW5hZGRyID0gJmFkZHJfcGFpci0+dW5peF9zb2NrZXRfZW5kOworCisgICAgICAgIC8qIG9wZW4gYSB1bml4IGRvbWFpbiBzb2NrZXQgKi8KKyAgICAgICAgLyogWFhYOiBnZXQgZGF0YSBmcm9tIHRoZSB0cmFuc3BvcnQgZGVmIGZvciBpdCdzIGxvY2F0aW9uICovCisgICAgICAgIHVuYWRkci0+c3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIGlmIChOVUxMID09IHNvY2twYXRoKSB7CisgICAgICAgICAgICBzcHJpbnRmKHRtcHNvY2twYXRoLCAiJXMvJXMiLCBnZXRfcGVyc2lzdGVudF9kaXJlY3RvcnkoKSwKKyAgICAgICAgICAgICAgICAgICAgREVGQVVMVF9TT0NLX05BTUUpOworICAgICAgICAgICAgc29ja3BhdGggPSB0bXBzb2NrcGF0aDsKKyAgICAgICAgfQorCisgICAgICAgIHN0cmNweSh1bmFkZHItPnN1bl9wYXRoLCBzb2NrcGF0aCk7CisgICAgICAgIHN0cmNweShhZGRyX3BhaXItPnNvY2tldF9wYXRoLCBzb2NrcGF0aCk7CisKKyAgICAgICAgdC0+c29jayA9IHNvY2tldChQRl9VTklYLCBTT0NLX1NUUkVBTSwgMCk7CisgICAgICAgIGlmICh0LT5zb2NrIDwgMCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogc2V0IHRoZSBTT19QQVNTQ1JFRCBvcHRpb24gc28gd2UgY2FuIHJlY2VpdmUgdGhlIHJlbW90ZSB1aWQgKi8KKyAgICAgICAgeworICAgICAgICAgICAgaW50IG9uZSA9IDE7CisgICAgICAgICAgICBzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1BBU1NDUkVELCAodm9pZCAqKSAmb25lLAorICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yob25lKSk7CisgICAgICAgIH0KKworICAgICAgICB1bmxpbmsodW5hZGRyLT5zdW5fcGF0aCk7CisgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIHVuYWRkciwgU1VOX0xFTih1bmFkZHIpKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NzaF90cmFuc3BvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGJpbmQgXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdW5hZGRyLT5zdW5fcGF0aCwgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgbmV0c25tcF9zc2hfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworCisgICAgICAgIC8qIHNldCB0aGUgc29ja2V0IHBlcm1pc3Npb25zICovCisgICAgICAgIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBBcHBseSBhbnkgc2V0dGluZ3MgdG8gdGhlIG93bmVyc2hpcC9wZXJtaXNzaW9ucyBvZiB0aGUKKyAgICAgICAgICAgICAqIFNzaGRvbWFpbiBzb2NrZXQKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgaW50IHNzaGRvbWFpbl9zb2NrX3Blcm0gPQorICAgICAgICAgICAgICAgIG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfUEVSTSk7CisgICAgICAgICAgICBpbnQgc3NoZG9tYWluX3NvY2tfdXNlciA9CisgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19VU0VSKTsKKyAgICAgICAgICAgIGludCBzc2hkb21haW5fc29ja19ncm91cCA9CisgICAgICAgICAgICAgICAgbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19HUk9VUCk7CisKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiaGVyZTogJXMsICVkLCAlZCwgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB1bmFkZHItPnN1bl9wYXRoLAorICAgICAgICAgICAgICAgICAgICAgICAgc3NoZG9tYWluX3NvY2tfcGVybSwgc3NoZG9tYWluX3NvY2tfdXNlciwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNzaGRvbWFpbl9zb2NrX2dyb3VwKSk7CisgICAgICAgICAgICBpZiAoc3NoZG9tYWluX3NvY2tfcGVybSAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoInNzaCIsICJTZXR0aW5nIHNvY2tldCBwZXJtcyB0byAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hkb21haW5fc29ja19wZXJtKSk7CisgICAgICAgICAgICAgICAgY2htb2QodW5hZGRyLT5zdW5fcGF0aCwgc3NoZG9tYWluX3NvY2tfcGVybSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzc2hkb21haW5fc29ja191c2VyIHx8IHNzaGRvbWFpbl9zb2NrX2dyb3VwKSB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBJZiBlaXRoZXIgb2YgdXNlciBvciBncm91cCBoYXZlbid0IGJlZW4gc2V0LAorICAgICAgICAgICAgICAgICAqICB0aGVuIGxlYXZlIHRoZW0gdW5jaGFuZ2VkLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIGlmIChzc2hkb21haW5fc29ja191c2VyID09IDAgKQorICAgICAgICAgICAgICAgICAgICBzc2hkb21haW5fc29ja191c2VyID0gLTE7CisgICAgICAgICAgICAgICAgaWYgKHNzaGRvbWFpbl9zb2NrX2dyb3VwID09IDAgKQorICAgICAgICAgICAgICAgICAgICBzc2hkb21haW5fc29ja19ncm91cCA9IC0xOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiU2V0dGluZyBzb2NrZXQgdXNlci9ncm91cCB0byAlZC8lZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzc2hkb21haW5fc29ja191c2VyLCBzc2hkb21haW5fc29ja19ncm91cCkpOworICAgICAgICAgICAgICAgIGNob3duKHVuYWRkci0+c3VuX3BhdGgsCisgICAgICAgICAgICAgICAgICAgICAgc3NoZG9tYWluX3NvY2tfdXNlciwgc3NoZG9tYWluX3NvY2tfZ3JvdXApOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3NzaF90cmFuc3BvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGxpc3RlbiB0byBcIiVzXCIsIGVycm5vICVkICglcylcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB1bmFkZHItPnN1bl9wYXRoLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBuZXRzbm1wX3NzaF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAKKworI2Vsc2UgLyogd2UncmUgY2FsbGVkIGRpcmVjdGx5IGJ5IHNzaGQgYW5kIHVzZSBzdGRpbi9vdXQgKi8KKyAgICAgICAgLyogZm9yIHNzaCBvbiB0aGUgc2VydmVyIHNpZGUgd2UndmUgYmVlbiBsYXVuY2hlZCBzbyBiaW5kIHRvCisgICAgICAgICAgIHN0ZGluL291dCAqLworCisgICAgICAgIC8qIG5vdGhpbmcgdG8gZG8gKi8KKworICAgICAgICAvKiBYWFg6IHZlcmlmeSB3ZSdyZSBpbnNpZGUgc3NoICovCisgICAgICAgIHQtPnNvY2sgPSBTVERJTl9GSUxFTk87CisjZW5kaWYgLyogISBTTk1QU1NIRE9NQUlOX1VTRV9FWFRFUk5BTF9QSVBFICovCisjZWxzZSAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICB9IGVsc2UgeworICAgICAgICBjaGFyICp1c2VybmFtZTsKKyAgICAgICAgY2hhciAqa2V5ZmlsZXB1YjsKKyAgICAgICAgY2hhciAqa2V5ZmlsZXByaXY7CisgICAgICAgIAorICAgICAgICAvKiB1c2UgdGhlIHJlcXVlc3RlZCB1c2VyIG5hbWUgKi8KKyAgICAgICAgLyogWFhYOiBkZWZhdWx0IHRvIHRoZSBjdXJyZW50IHVzZXIgbmFtZSBvbiB0aGUgc3lzdGVtIGxpa2Ugc3NoIGRvZXMgKi8KKyAgICAgICAgdXNlcm5hbWUgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hfVVNFUk5BTUUpOworICAgICAgICBpZiAoIXVzZXJuYW1lIHx8IDAgPT0gKnVzZXJuYW1lKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiWW91IG11c3Qgc3BlY2lmeSBhIHNzaCB1c2VybmFtZSB0byB1c2UuICBTZWUgdGhlIHNubXAuY29uZiBtYW51YWwgcGFnZVxuIik7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHVzZSB0aGUgcmVxdWVzdGVkIHB1YmxpYyBrZXkgZmlsZSAqLworICAgICAgICBrZXlmaWxlcHViID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hfUFVCS0VZKTsKKyAgICAgICAgaWYgKCFrZXlmaWxlcHViIHx8IDAgPT0gKmtleWZpbGVwdWIpIHsKKyAgICAgICAgICAgIC8qIFhYWDogZGVmYXVsdCB0byB+Ly5zc2gvaWRfcnNhLnB1YiAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIllvdSBtdXN0IHNwZWNpZnkgYSBzc2ggcHVibGljIGtleSBmaWxlIHRvIHVzZS4gIFNlZSB0aGUgc25tcC5jb25mIG1hbnVhbCBwYWdlXG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogdXNlIHRoZSByZXF1ZXN0ZWQgcHJpdmF0ZSBrZXkgZmlsZSAqLworICAgICAgICBrZXlmaWxlcHJpdiA9IG5ldHNubXBfZHNfZ2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NTSF9QUklWS0VZKTsKKyAgICAgICAgaWYgKCFrZXlmaWxlcHJpdiB8fCAwID09ICprZXlmaWxlcHJpdikgeworICAgICAgICAgICAgLyogWFhYOiBkZWZhdWx0IHRvIGtleWZpbGVwdWIgd2l0aG91dCB0aGUgLnB1YiBzdWZmaXggKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJZb3UgbXVzdCBzcGVjaWZ5IGEgc3NoIHByaXZhdGUga2V5IGZpbGUgdG8gdXNlLiAgU2VlIHRoZSBzbm1wLmNvbmYgbWFudWFsIHBhZ2VcbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiB4eHg6IG5lZWQgYW4gaXB2NiBmcmllbmRseSBvbmUgdG9vIChzaWdoKSAqLworCisgICAgICAgIC8qIFhYWDogbm90IGlkZWFsIHdoZW4gc3RydWN0cyBkb24ndCBhY3R1YWxseSBtYXRjaCBzaXplIHdpc2UgKi8KKyAgICAgICAgbWVtY3B5KCYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkciksIGFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKworICAgICAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICAgICAgaWYgKHQtPnNvY2sgPCAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICB0LT5yZW1vdGUgPSAodV9jaGFyICopbWFsbG9jKDYpOworICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc3NoX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5yZW1vdGUsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7CisgICAgICAgIHQtPnJlbW90ZVs0XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVs1XSA9IChodG9ucyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSA2OworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQtdHlwZSBzZXNzaW9uLCBzbyBhdHRlbXB0IHRvIGNvbm5lY3QgdG8gdGhlIGZhcgorICAgICAgICAgKiBlbmQuICBXZSBkb24ndCBnbyBub24tYmxvY2tpbmcgaGVyZSBiZWNhdXNlIGl0J3Mgbm90IG9idmlvdXMgd2hhdAorICAgICAgICAgKiB5b3UnZCB0aGVuIGRvIGlmIHlvdSB0cmllZCB0byBkbyBzbm1wX3NlbmRzIGJlZm9yZSB0aGUgY29ubmVjdGlvbgorICAgICAgICAgKiBoYWQgY29tcGxldGVkLiAgU28gdGhpcyBjYW4gYmxvY2suCisgICAgICAgICAqLworCisgICAgICAgIHJjID0gY29ubmVjdCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopYWRkciwKKwkJICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisKKyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgbmV0c25tcF9zc2hfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKKyAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KKyAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fU05EQlVGLCBsb2NhbCwgMCk7CisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1JDVkJVRiwgbG9jYWwsIDApOworCisgICAgICAgIC8qIG9wZW4gdGhlIFNTSCBzZXNzaW9uIGFuZCBjaGFubmVsICovCisgICAgICAgIGFkZHJfcGFpci0+c2Vzc2lvbiA9IGxpYnNzaDJfc2Vzc2lvbl9pbml0KCk7CisgICAgICAgIGlmIChsaWJzc2gyX3Nlc3Npb25fc3RhcnR1cChhZGRyX3BhaXItPnNlc3Npb24sIHQtPnNvY2spKSB7CisgICAgICAgICAgc2h1dGRvd246CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIGVzdGFibGlzaCBhbiBTU0ggc2Vzc2lvblxuIik7CisgICAgICAgICAgICBuZXRzbm1wX3NzaF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIEF0IHRoaXMgcG9pbnQgd2UgaGF2bid0IGF1dGhlbnRpY2F0ZWQsIFRoZSBmaXJzdCB0aGluZyB0bworICAgICAgICAgICBkbyBpcyBjaGVjayB0aGUgaG9zdGtleSdzIGZpbmdlcnByaW50IGFnYWluc3Qgb3VyIGtub3duCisgICAgICAgICAgIGhvc3RzIFlvdXIgYXBwIG1heSBoYXZlIGl0IGhhcmQgY29kZWQsIG1heSBnbyB0byBhIGZpbGUsCisgICAgICAgICAgIG1heSBwcmVzZW50IGl0IHRvIHRoZSB1c2VyLCB0aGF0J3MgeW91ciBjYWxsCisgICAgICAgICAqLworICAgICAgICBmaW5nZXJwcmludCA9CisgICAgICAgICAgICBsaWJzc2gyX2hvc3RrZXlfaGFzaChhZGRyX3BhaXItPnNlc3Npb24sIExJQlNTSDJfSE9TVEtFWV9IQVNIX01ENSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2giLCAiRmluZ2VycHJpbnQ6ICIpKTsKKyAgICAgICAgZm9yKGkgPSAwOyBpIDwgMTY7IGkrKykgeworICAgICAgICAgICAgREVCVUdNU0coKCJzc2giLCAiJTAyeCIsCisgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGNoYXIpZmluZ2VycHJpbnRbaV0pKTsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TRygoInNzaCIsICJcbiIpKTsKKworICAgICAgICAvKiBjaGVjayB3aGF0IGF1dGhlbnRpY2F0aW9uIG1ldGhvZHMgYXJlIGF2YWlsYWJsZSAqLworICAgICAgICB1c2VyYXV0aGxpc3QgPQorICAgICAgICAgICAgbGlic3NoMl91c2VyYXV0aF9saXN0KGFkZHJfcGFpci0+c2Vzc2lvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2VybmFtZSwgc3RybGVuKHVzZXJuYW1lKSk7CisgICAgICAgIERFQlVHTVNHKCgic3NoIiwgIkF1dGhlbnRpY2F0aW9uIG1ldGhvZHM6ICVzXG4iLCB1c2VyYXV0aGxpc3QpKTsKKworICAgICAgICAvKiBYWFg6IGFsbG93IG90aGVyIHR5cGVzICovCisgICAgICAgIC8qIFhYWDogNCBzZWVtcyBtYWdpYyB0byBtZS4uLiAqLworICAgICAgICBpZiAoc3Ryc3RyKHVzZXJhdXRobGlzdCwgInB1YmxpY2tleSIpICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGF1dGhfcHcgfD0gNDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFhYWDogaGFyZCBjb2RlZCBwYXRocyBhbmQgdXNlcnMgKi8KKyAgICAgICAgaWYgKGF1dGhfcHcgJiA0KSB7CisgICAgICAgICAgICAvKiBwdWJsaWMga2V5ICovCisgICAgICAgICAgICBpZiAobGlic3NoMl91c2VyYXV0aF9wdWJsaWNrZXlfZnJvbWZpbGUoYWRkcl9wYWlyLT5zZXNzaW9uLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJuYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWZpbGVwdWIsIGtleWZpbGVwcml2LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpKSB7CisgICAgICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiQXV0aGVudGljYXRpb24gYnkgcHVibGljIGtleSBmYWlsZWQhXG4iKTsKKyAgICAgICAgICAgICAgICBnb3RvIHNodXRkb3duOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBERUJVR01TRygoInNzaCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICJcdEF1dGhlbnRpY2F0aW9uIGJ5IHB1YmxpYyBrZXkgc3VjY2VlZGVkLlxuIikpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwiQXV0aGVudGljYXRpb24gYnkgcHVibGljIGtleSBmYWlsZWQhXG4iKTsKKyAgICAgICAgICAgIGdvdG8gc2h1dGRvd247CisgICAgICAgIH0KKworICAgICAgICAvKiB3ZSd2ZSBub3cgYXV0aGVudGljYXRlZCBib3RoIHNpZGVzOyBjb250aW5pbmcgb253YXJkIC4uLiAqLworCisgICAgICAgIC8qIFJlcXVlc3QgYSBjaGFubmVsICovCisgICAgICAgIGlmICghKGFkZHJfcGFpci0+Y2hhbm5lbCA9CisgICAgICAgICAgICAgIGxpYnNzaDJfY2hhbm5lbF9vcGVuX3Nlc3Npb24oYWRkcl9wYWlyLT5zZXNzaW9uKSkpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJVbmFibGUgdG8gb3BlbiBhIHNlc3Npb25cbiIpOworICAgICAgICAgICAgZ290byBzaHV0ZG93bjsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJlcXVlc3QgYSB0ZXJtaW5hbCB3aXRoICd2YW5pbGxhJyB0ZXJtaW5hbCBlbXVsYXRpb24KKyAgICAgICAgICogU2VlIC9ldGMvdGVybWNhcCBmb3IgbW9yZSBvcHRpb25zCisgICAgICAgICAqLworICAgICAgICAvKiBYWFg6IG5lZWRlZD8gIGRvdWJ0IGl0ICovCisvKiAgICAgICAgIGlmIChsaWJzc2gyX2NoYW5uZWxfcmVxdWVzdF9wdHkoYWRkcl9wYWlyLT5jaGFubmVsLCAidmFuaWxsYSIpKSB7ICovCisvKiAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHJlcXVlc3RpbmcgcHR5XG4iKTsgKi8KKy8qICAgICAgICAgICAgIGdvdG8gc2h1dGRvd247ICovCisvKiAgICAgICAgIH0gKi8KKyAgICAgICAgaWYgKGxpYnNzaDJfY2hhbm5lbF9zdWJzeXN0ZW0oYWRkcl9wYWlyLT5jaGFubmVsLCAic25tcCIpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiRmFpbGVkIHRvIHJlcXVlc3QgdGhlIHNzaCAnc25tcCcgc3Vic3lzdGVtXG4iKTsKKyAgICAgICAgICAgIGdvdG8gc2h1dGRvd247CisgICAgICAgIH0KKyAgICB9CisKKyAgICBERUJVR01TRygoInNzaCIsIk9wZW5lZCBjb25uZWN0aW9uLlxuIikpOworICAgIC8qCisgICAgICogTWVzc2FnZSBzaXplIGlzIG5vdCBsaW1pdGVkIGJ5IHRoaXMgdHJhbnNwb3J0IChoZW5jZSBtc2dNYXhTaXplCisgICAgICogaXMgZXF1YWwgdG8gdGhlIG1heGltdW0gbGVnYWwgc2l6ZSBvZiBhbiBTTk1QIG1lc3NhZ2UpLiAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gMHg3ZmZmZmZmZjsKKyAgICB0LT5mX3JlY3YgICAgID0gbmV0c25tcF9zc2hfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF9zc2hfc2VuZDsKKyAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9zc2hfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICA9IG5ldHNubXBfc3NoX2FjY2VwdDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF9zc2hfZm10YWRkcjsKKworICAgIHJldHVybiB0OworfQorCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF9zc2hfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisJCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfc3NoX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfc3NoX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisgICAgaWYgKG9fbGVuID09IDYpIHsKKyAgICAgICAgdW5zaWduZWQgc2hvcnQgcG9ydHRtcCA9IChvWzRdIDw8IDgpICsgb1s1XTsKKyAgICAgICAgYWRkci5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICAgICAgbWVtY3B5KCh1X2NoYXIgKikgJiAoYWRkci5zaW5fYWRkci5zX2FkZHIpLCBvLCA0KTsKKyAgICAgICAgYWRkci5zaW5fcG9ydCA9IGh0b25zKHBvcnR0bXApOworICAgICAgICByZXR1cm4gbmV0c25tcF9zc2hfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfQorICAgIHJldHVybiBOVUxMOworfQorCit2b2lkCitzc2hkb21haW5fcGFyc2Vfc29ja2V0KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpjcHRyKQoreworICAgIGNoYXIgKnNvY2tldF9wZXJtLCAqc29ja2V0X3VzZXIsICpzb2NrZXRfZ3JvdXA7CisgICAgaW50IHVpZCA9IC0xOworICAgIGludCBnaWQgPSAtMTsKKyAgICBpbnQgc19wZXJtID0gLTE7CisgICAgY2hhciAqc3Q7CisKKyAgICBERUJVR01TR1RMKCgic3NoL2NvbmZpZyIsICJwYXJzaW5nIHNvY2tldCBpbmZvOiAlc1xuIiwgY3B0cikpOworICAgIHNvY2tldF9wZXJtID0gc3RydG9rX3IoY3B0ciwgIiBcdCIsICZzdCk7CisgICAgc29ja2V0X3VzZXIgPSBzdHJ0b2tfcihOVUxMLCAiIFx0IiwgJnN0KTsKKyAgICBzb2NrZXRfZ3JvdXAgPSBzdHJ0b2tfcihOVUxMLCAiIFx0IiwgJnN0KTsKKworICAgIGlmIChzb2NrZXRfcGVybSkgeworICAgICAgICBzX3Blcm0gPSBzdHJ0b2woc29ja2V0X3Blcm0sIE5VTEwsIDgpOworICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19QRVJNLCBzX3Blcm0pOworICAgICAgICBERUJVR01TR1RMKCgic3NoL2NvbmZpZyIsICJzb2NrZXQgcGVybWlzc2lvbnM6ICVvICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHNfcGVybSwgc19wZXJtKSk7CisgICAgfQorICAgIC8qCisgICAgICogVHJ5IHRvIGhhbmRsZSBudW1lcmljIFVJRHMgb3IgdXNlciBuYW1lcyBmb3IgdGhlIHNvY2tldCBvd25lcgorICAgICAqLworICAgIGlmIChzb2NrZXRfdXNlcikgeworICAgICAgICB1aWQgPSBuZXRzbm1wX3N0cl90b191aWQoc29ja2V0X3VzZXIpOworICAgICAgICBpZiAoIHVpZCAhPSAwICkKKyAgICAgICAgICAgIG5ldHNubXBfZHNfc2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19TU0hET01BSU5fU09DS19VU0VSLCB1aWQpOworICAgICAgICBERUJVR01TR1RMKCgic3NoL2NvbmZpZyIsICJzb2NrZXQgb3duZXI6ICVzICglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIHNvY2tldF91c2VyLCB1aWQpKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIGFuZCBzaW1pbGFybHkgZm9yIHRoZSBzb2NrZXQgZ3JvdXAgb3duZXJzaGlwCisgICAgICovCisgICAgaWYgKHNvY2tldF9ncm91cCkgeworICAgICAgICBnaWQgPSBuZXRzbm1wX3N0cl90b19naWQoc29ja2V0X2dyb3VwKTsKKyAgICAgICAgaWYgKCBnaWQgIT0gMCApCisgICAgICAgICAgICBuZXRzbm1wX2RzX3NldF9pbnQoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfU1NIRE9NQUlOX1NPQ0tfR1JPVVAsIGdpZCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2gvY29uZmlnIiwgInNvY2tldCBncm91cDogJXMgKCVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgc29ja2V0X2dyb3VwLCBnaWQpKTsKKyAgICB9Cit9CisKK3ZvaWQKK25ldHNubXBfc3NoX2N0b3Iodm9pZCkgICAgCit7CisgICAgc3NoRG9tYWluLm5hbWUgPSBuZXRzbm1wX3NubXBTU0hEb21haW47CisgICAgc3NoRG9tYWluLm5hbWVfbGVuZ3RoID0gbmV0c25tcF9zbm1wU1NIRG9tYWluX2xlbjsKKyAgICBzc2hEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIgKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKKyAgICBzc2hEb21haW4ucHJlZml4WzBdID0gInNzaCI7CisKKyAgICBzc2hEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgc3NoRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3NzaF9jcmVhdGVfdHN0cmluZzsKKyAgICBzc2hEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfc3NoX2NyZWF0ZV9vc3RyaW5nOworCisgICAgcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIoInNubXAiLCAic3NodG9zbm1wc29ja2V0cGVybXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICZzc2hkb21haW5fcGFyc2Vfc29ja2V0LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzb2NrZXRwZXJtcyBbdXNlcm5hbWUgW2dyb3VwbmFtZV1dIik7CisKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJzc2h0b3NubXBzb2NrZXQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9TU0hUT1NOTVBfU09DS0VUKTsKKworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsICJzbm1wIiwgInNzaHVzZXJuYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfU1NIX1VTRVJOQU1FKTsKKworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsICJzbm1wIiwgInNzaHB1YmxpY2tleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NTSF9QVUJLRVkpOworCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwgInNubXAiLCAic3NocHJpdmF0ZWtleSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NTSF9QUklWS0VZKTsKKworICAgIERFQlVHTVNHVEwoKCJzc2giLCAicmVnaXN0ZXJpbmcgdGhlIHNzaCBkb21haW5cbiIpKTsKKyAgICBuZXRzbm1wX3Rkb21haW5fcmVnaXN0ZXIoJnNzaERvbWFpbik7Cit9CisKKwpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBTVEREb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGExYzNmOQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU1RERG9tYWluLmMKQEAgLTAsMCArMSwyODUgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNURERvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKK29pZCBuZXRzbm1wX3NubXBTVEREb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9TVERfSVAgfTsKK3N0YXRpYyBuZXRzbm1wX3Rkb21haW4gc3RkRG9tYWluOworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCisgKi8KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF9zdGRfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICBjaGFyICpidWY7CisgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJmb3JtYXR0aW5nIGFkZHIuICBkYXRhPSVwXG4iLHQtPmRhdGEpKTsKKyAgICBpZiAodC0+ZGF0YSkgeworICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhID0gKG5ldHNubXBfc3RkX2RhdGEqKXQtPmRhdGE7CisgICAgICAgIGJ1ZiA9IChjaGFyKiltYWxsb2MoU05NUF9NQVhCVUZfTUVESVVNKTsKKyAgICAgICAgaWYgKCFidWYpCisgICAgICAgICAgICByZXR1cm4gc3RyZHVwKCJTVERJbk91dCIpOworICAgICAgICBzbnByaW50ZihidWYsIFNOTVBfTUFYQlVGX01FRElVTSwgIlNURDolcyIsIGRhdGEtPnByb2cpOworICAgICAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsIiAgZm9ybWF0dGVkOj0lc1xuIixidWYpKTsKKyAgICAgICAgcmV0dXJuIGJ1ZjsKKyAgICB9CisgICAgcmV0dXJuIHN0cmR1cCgiU1RESW5PdXQiKTsKK30KKworCisKKy8qCisgKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCisgKi8KKworc3RhdGljIGludAorbmV0c25tcF9zdGRfcmVjdihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqYnVmLCBpbnQgc2l6ZSwKKwkJIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIERFQlVHTVNHVEwoKCJkb21haW46c3RkIiwicmVjdiBvbiBzb2NrICVkLiAgZGF0YT0lcFxuIix0LT5zb2NrLCB0LT5kYXRhKSk7CisgICAgd2hpbGUgKHJjIDwgMCkgeworICAgICAgICByYyA9IHJlYWQodC0+c29jaywgYnVmLCBzaXplKTsKKyAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIgIGJ5dGVzOiAlZC5cbiIsIHJjKSk7CisgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3N0ZCIsICIgcmVhZCBvbiBmZCAlZCBmYWlsZWQ6ICVkIChcIiVzXCIpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjID09IDApIHsKKyAgICAgICAgICAgIC8qIDAgaW5wdXQgaXMgcHJvYmFibHkgYmFkIHNpbmNlIHdlIHNlbGVjdGVkIG9uIGl0ICovCisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfc3RkIiwgInJlYWQgb24gc3RkaW4gZ290ICVkIGJ5dGVzXG4iLCByYykpOworICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfc3RkX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisKKyAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsInNlbmQgb24gc29jay4gIGRhdGE9JXBcbiIsIHQtPmRhdGEpKTsKKyAgICB3aGlsZSAocmMgPCAwKSB7CisgICAgICAgIGlmICh0LT5kYXRhKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhID0gKG5ldHNubXBfc3RkX2RhdGEqKXQtPmRhdGE7CisgICAgICAgICAgICByYyA9IHdyaXRlKGRhdGEtPm91dGZkLCBidWYsIHNpemUpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogc3RyYWlnaHQgdG8gc3Rkb3V0ICovCisgICAgICAgICAgICByYyA9IHdyaXRlKDEsIGJ1Ziwgc2l6ZSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50CituZXRzbm1wX3N0ZF9jbG9zZShuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyAgICBERUJVR01TR1RMKCgiZG9tYWluOnN0ZCIsImNsb3NlLiAgZGF0YT0lcFxuIiwgdC0+ZGF0YSkpOworICAgIGlmICh0LT5kYXRhKSB7CisgICAgICAgIG5ldHNubXBfc3RkX2RhdGEgKmRhdGEgPSAobmV0c25tcF9zdGRfZGF0YSopdC0+ZGF0YTsKKyAgICAgICAgY2xvc2UoZGF0YS0+b3V0ZmQpOworICAgICAgICBjbG9zZSh0LT5zb2NrKTsKKworICAgICAgICAvKiBraWxsIHRoZSBjaGlsZCB0b28gKi8KKyAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIga2lsbGluZyAlZFxuIiwgZGF0YS0+Y2hpbGRwaWQpKTsKKyAgICAgICAga2lsbChkYXRhLT5jaGlsZHBpZCwgU0lHVEVSTSk7CisgICAgICAgIHNsZWVwKDEpOworICAgICAgICBraWxsKGRhdGEtPmNoaWxkcGlkLCBTSUdLSUxMKTsKKyAgICAgICAgLyogWFhYOiBzZXQgYW4gYWxhcm0gdG8ga2lsbCBoYXJkZXIgdGhlIGNoaWxkICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyogY2xvc2Ugc3Rkb3V0L2luICovCisgICAgICAgIGNsb3NlKDEpOworICAgICAgICBjbG9zZSgwKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3N0ZF9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCIgYWNjZXB0IGRhdGE9JXBcbiIsIHQtPmRhdGEpKTsKKyAgICAvKiBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKyAgICByZXR1cm4gMDsKK30KKworLyoKKyAqIE9wZW4gYSBTVERJTi9TVERPVVQgLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4KKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3N0ZF90cmFuc3BvcnQoY29uc3QgY2hhciAqaW5zdHJpbmcsIHNpemVfdCBpbnN0cmluZ19sZW4sCisJCSAgICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0OworCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmICh0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+ZG9tYWluID0gbmV0c25tcF9zbm1wU1RERG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPQorICAgICAgICBzaXplb2YobmV0c25tcF9zbm1wU1RERG9tYWluKSAvIHNpemVvZihuZXRzbm1wX3NubXBTVEREb21haW5bMF0pOworCisgICAgdC0+c29jayA9IDA7CisgICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTSB8IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfVFVOTkVMRUQ7CisKKyAgICAvKgorICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQorICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4gIAorICAgICAqLworCisgICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7CisgICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfc3RkX3JlY3Y7CisgICAgdC0+Zl9zZW5kICAgICA9IG5ldHNubXBfc3RkX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc3RkX2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3N0ZF9hY2NlcHQ7CisgICAgdC0+Zl9mbXRhZGRyICA9IG5ldHNubXBfc3RkX2ZtdGFkZHI7CisKKyAgICAvKgorICAgICAqIGlmIGluc3RyaW5nIGlzIG5vdCBudWxsIGxlbmd0aCwgaXQgc3BlY2lmaWVzIGEgcGF0aCB0byBhIHByb2cKKyAgICAgKiBYWFg6IHBsdXMgYXJncworICAgICAqLworICAgIGlmIChpbnN0cmluZ19sZW4gPT0gMCAmJiBkZWZhdWx0X3RhcmdldCAhPSBOVUxMKSB7CisJaW5zdHJpbmcgPSBkZWZhdWx0X3RhcmdldDsKKwlpbnN0cmluZ19sZW4gPSBzdHJsZW4oZGVmYXVsdF90YXJnZXQpOworICAgIH0KKworICAgIGlmIChpbnN0cmluZ19sZW4gIT0gMCkgeworICAgICAgICBpbnQgaW5mZFsyXSwgb3V0ZmRbMl07ICAvKiBzb2NrZXRzIHRvIGFuZCBmcm9tIHRoZSBjbGllbnQgKi8KKyAgICAgICAgaW50IGNoaWxkcGlkOworCisgICAgICAgIGlmIChwaXBlKGluZmQpIHx8IHBpcGUob3V0ZmQpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAgICAgIkZhaWxlZCB0byBjcmVhdGUgbmVlZGVkIHBpcGVzIGZvciBhIFNURCB0cmFuc3BvcnQiKTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIGNoaWxkcGlkID0gZm9yaygpOworICAgICAgICAvKiBwYXJlbnRwaWQgPT4gY2hpbGRwaWQgKi8KKyAgICAgICAgLyogaW5mZFsxXSAgID0+IGluZmRbMF0gKi8KKyAgICAgICAgLyogb3V0ZmRbMF0gIDw9IG91dGZkWzFdICovCisKKyAgICAgICAgaWYgKGNoaWxkcGlkKSB7CisgICAgICAgICAgICBuZXRzbm1wX3N0ZF9kYXRhICpkYXRhOworICAgICAgICAgICAgCisgICAgICAgICAgICAvKiB3ZSdyZSBpbiB0aGUgcGFyZW50ICovCisgICAgICAgICAgICBjbG9zZShpbmZkWzBdKTsKKyAgICAgICAgICAgIGNsb3NlKG91dGZkWzFdKTsKKworICAgICAgICAgICAgZGF0YSA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF9zdGRfZGF0YSk7CisgICAgICAgICAgICBpZiAoIWRhdGEpIHsKKyAgICAgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAic25tcFNURERvbWFpbjogbWFsbG9jIGZhaWxlZCIpOworICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0LT5kYXRhID0gZGF0YTsKKyAgICAgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfc3RkX2RhdGEpOworICAgICAgICAgICAgdC0+c29jayA9IG91dGZkWzBdOworICAgICAgICAgICAgZGF0YS0+cHJvZyA9IHN0cmR1cChpbnN0cmluZyk7CisgICAgICAgICAgICBkYXRhLT5vdXRmZCA9IGluZmRbMV07CisgICAgICAgICAgICBkYXRhLT5jaGlsZHBpZCA9IGNoaWxkcGlkOworICAgICAgICAgICAgREVCVUdNU0dUTCgoImRvbWFpbjpzdGQiLCJwYXJlbnQuICBkYXRhPSVwXG4iLCB0LT5kYXRhKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAvKiB3ZSdyZSBpbiB0aGUgY2hpbGQgKi8KKworICAgICAgICAgICAgLyogY2xvc2Ugc3RkaW4gKi8KKyAgICAgICAgICAgIGNsb3NlKDApOworICAgICAgICAgICAgLyogY29weSBwaXBlIG91dHB1dCB0byBzdGRvdXQgKi8KKyAgICAgICAgICAgIGR1cChpbmZkWzBdKTsKKworICAgICAgICAgICAgLyogY2xvc2Ugc3Rkb3V0ICovCisgICAgICAgICAgICBjbG9zZSgxKTsKKyAgICAgICAgICAgIC8qIGNvcHkgcGlwZSBvdXRwdXQgdG8gc3RkaW4gKi8KKyAgICAgICAgICAgIGR1cChvdXRmZFsxXSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIC8qIGNsb3NlIGFsbCB0aGUgcGlwZXMgdGhlbXNlbHZlcyAqLworICAgICAgICAgICAgY2xvc2UoaW5mZFswXSk7CisgICAgICAgICAgICBjbG9zZShpbmZkWzFdKTsKKyAgICAgICAgICAgIGNsb3NlKG91dGZkWzBdKTsKKyAgICAgICAgICAgIGNsb3NlKG91dGZkWzFdKTsKKworICAgICAgICAgICAgLyogY2FsbCBleGVjICovCisgICAgICAgICAgICBzeXN0ZW0oaW5zdHJpbmcpOworICAgICAgICAgICAgLyogWFhYOiBUT0RPOiB1c2UgZXhlYyBmb3JtIGluc3RlYWQ7IG5lZWRzIGFyZ3MgKi8KKyAgICAgICAgICAgIC8qIGV4ZWN2KGluc3RyaW5nLCBOVUxMKTsgKi8KKyAgICAgICAgICAgIGV4aXQoMCk7CisKKyAgICAgICAgICAgIC8qIGFjay4uLiAgd2Ugc2hvdWxkIG5ldmVyIGV2ZXIgZ2V0IGhlcmUgKi8KKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJTVEQgdHJhbnNwb3J0IHJldHVybmVkIGFmdGVyIGV4ZWN2KClcbiIpOworICAgICAgICB9CisgICAgfSAgICAgICAgICAgIAorCisgICAgcmV0dXJuIHQ7Cit9CisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfc3RkX2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKmluc3RyaW5nLCBpbnQgbG9jYWwsCisJCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICByZXR1cm4gbmV0c25tcF9zdGRfdHJhbnNwb3J0KGluc3RyaW5nLCBzdHJsZW4oaW5zdHJpbmcpLCBkZWZhdWx0X3RhcmdldCk7Cit9CisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfc3RkX2NyZWF0ZV9vc3RyaW5nKGNvbnN0IHVfY2hhciAqIG8sIHNpemVfdCBvX2xlbiwgaW50IGxvY2FsKQoreworICAgIHJldHVybiBuZXRzbm1wX3N0ZF90cmFuc3BvcnQoKGNvbnN0IGNoYXIqKW8sIG9fbGVuLCBOVUxMKTsKK30KKwordm9pZAorbmV0c25tcF9zdGRfY3Rvcih2b2lkKQoreworICAgIHN0ZERvbWFpbi5uYW1lID0gbmV0c25tcF9zbm1wU1RERG9tYWluOworICAgIHN0ZERvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3NubXBTVEREb21haW4pIC8gc2l6ZW9mKG9pZCk7CisgICAgc3RkRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyICoqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7CisgICAgc3RkRG9tYWluLnByZWZpeFswXSA9ICJzdGQiOworCisgICAgc3RkRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIHN0ZERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF9zdGRfY3JlYXRlX3RzdHJpbmc7CisgICAgc3RkRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3N0ZF9jcmVhdGVfb3N0cmluZzsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3Rlcigmc3RkRG9tYWluKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBTb2NrZXRCYXNlRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZiNjYzMgotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wU29ja2V0QmFzZURvbWFpbi5jCkBAIC0wLDAgKzEsMzYyIEBACisvKioKKyAqIEBmaWxlICBzbm1wU29ja2V0QmFzZURvbWFpbi5jCisgKgorICogQGJyaWVmIFNvY2tldCBzdXBwb3J0IGZ1bmN0aW9ucy4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9kZWJ1Zy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2RlZmF1bHRfc3RvcmUuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hc3NlcnQuaD4KKworLyogYWxsIHNvY2tldHMgcHJldHR5IG11Y2ggY2xvc2UgdGhlIHNhbWUgd2F5ICovCitpbnQgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKG5ldHNubXBfdHJhbnNwb3J0ICp0KSB7CisgICAgaW50IHJjID0gLTE7CisgICAgaWYgKHQtPnNvY2sgPj0gMCkgeworI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCisgICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7CisjZWxzZQorICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOworI2VuZGlmCisgICAgICAgIHQtPnNvY2sgPSAtMTsKKyAgICB9CisgICAgcmV0dXJuIHJjOworfQorCisvKgorICogZmluZCBsYXJnZXN0IHBvc3NpYmxlIGJ1ZmZlciBiZXR3ZWVuIGN1cnJlbnQgc2l6ZSBhbmQgc3BlY2lmaWVkIHNpemUuCisgKgorICogVHJ5IHRvIG1heGltaXplIHRoZSBjdXJyZW50IGJ1ZmZlciBvZiB0eXBlICJvcHRuYW1lIgorICogdG8gdGhlIG1heGltdW0gYWxsb3dhYmxlIHNpemUgYnkgdGhlIE9TIChhcyBjbG9zZSB0bworICogc2l6ZSBhcyBwb3NzaWJsZSkKKyAqLworc3RhdGljIGludAorX3NvY2tfYnVmZmVyX21heGltaXplKGludCBzLCBpbnQgb3B0bmFtZSwgY29uc3QgY2hhciAqYnVmdHlwZSwgaW50IHNpemUpCit7CisgICAgaW50ICAgICAgICAgICAgY3VyYnVmID0gMDsKKyAgICBzb2NrbGVuX3QgICAgICBjdXJidWZsZW4gPSBzaXplb2YoaW50KTsKKyAgICBpbnQgICAgICAgICAgICBsbywgbWlkLCBoaTsKKworICAgIC8qCisgICAgICogRmlyc3Qgd2UgbmVlZCB0byBkZXRlcm1pbmUgb3VyIGN1cnJlbnQgYnVmZmVyCisgICAgICovCisgICAgaWYgKChnZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCisgICAgICAgICAgICAgICAgICAgICZjdXJidWZsZW4pID09IDApIAorICAgICAgICAgICAgJiYgKGN1cmJ1ZmxlbiA9PSBzaXplb2YoaW50KSkpIHsKKworICAgICAgICBERUJVR01TR1RMKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyOm1heCIsICJDdXJyZW50ICVzIGlzICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBjdXJidWYpKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBMZXQncyBub3QgYmUgc3R1cGlkIC4uLiBpZiB3ZSB3ZXJlIGFza2VkIGZvciBsZXNzIHRoYW4gd2hhdCB3ZQorICAgICAgICAgKiBhbHJlYWR5IGhhdmUsIHRoZW4gZm9yZ2V0IGFib3V0IGl0CisgICAgICAgICAqLworICAgICAgICBpZiAoc2l6ZSA8PSBjdXJidWYpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ2ZXJib3NlOnNvY2tldDpidWZmZXI6bWF4IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJSZXF1ZXN0ZWQgJXMgPD0gY3VycmVudCBidWZmZXJcbiIsIGJ1ZnR5cGUpKTsKKyAgICAgICAgICAgIHJldHVybiBjdXJidWY7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBEbyBhIGJpbmFyeSBzZWFyY2ggdGhlIG9wdGltYWwgYnVmZmVyIHdpdGhpbiAxayBvZiB0aGUgcG9pbnQgb2YKKyAgICAgICAgICogZmFpbHVyZS4gVGhpcyBpcyByYXRoZXIgYnJ1dGVmb3JjZSwgYnV0IHNpbXBsZQorICAgICAgICAgKi8KKyAgICAgICAgaGkgPSBzaXplOworICAgICAgICBsbyA9IGN1cmJ1ZjsKKworICAgICAgICB3aGlsZSAoaGkgLSBsbyA+IDEwMjQpIHsKKyAgICAgICAgICAgIG1pZCA9IChsbyArIGhpKSAvIDI7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdChzLCBTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmbWlkLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKGludCkpID09IDApIHsKKyAgICAgICAgICAgICAgICBsbyA9IG1pZDsgLyogU3VjY2Vzczogc2VhcmNoIGJldHdlZW4gbWlkIGFuZCBoaSAqLworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBoaSA9IG1pZDsgLyogRmFpbGVkOiBzZWFyY2ggYmV0d2VlbiBsbyBhbmQgbWlkICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBOb3cgcHJpbnQgaWYgdGhpcyBvcHRpbWl6YXRpb24gaGVscGVkIG9yIG5vdAorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGdldHNvY2tvcHQocyxTT0xfU09DS0VULCBvcHRuYW1lLCAodm9pZCAqKSAmY3VyYnVmLAorICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlcjptYXgiLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICJNYXhpbWl6ZWQgJXM6ICVkXG4iLGJ1ZnR5cGUsIGN1cmJ1ZikpOworICAgICAgICB9IAorICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoZXJlIGlzIHJlYWxseSBub3QgYSBsb3Qgd2UgY2FuIGRvIGFueW1vcmUuCisgICAgICAgICAqIElmIHRoZSBPUyBkb2Vzbid0IGdpdmUgdXMgdGhlIGN1cnJlbnQgYnVmZmVyLCB0aGVuIHdoYXQncyB0aGUgCisgICAgICAgICAqIHBvaW50IGluIHRyeWluZyB0byBtYWtlIGl0IGJldHRlcgorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXI6bWF4IiwgIkdldCAlcyBmYWlsZWQgLi4uIGdpdmluZyB1cCFcbiIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUpKTsKKyAgICAgICAgY3VyYnVmID0gLTE7CisgICAgfQorCisgICAgcmV0dXJuIGN1cmJ1ZjsKK30KKworCitzdGF0aWMgY29uc3QgY2hhciAqCitfc29ja19idWZfdHlwZV9nZXQoaW50IG9wdG5hbWUsIGludCBsb2NhbCkKK3sKKyAgICBpZiAob3B0bmFtZSA9PSBTT19TTkRCVUYpIHsKKyAgICAgICAgaWYgKGxvY2FsKQorICAgICAgICAgICAgcmV0dXJuICJzZXJ2ZXIgc2VuZCBidWZmZXIiOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gImNsaWVudCBzZW5kIGJ1ZmZlciI7CisgICAgfSBlbHNlIGlmIChvcHRuYW1lID09IFNPX1JDVkJVRikgeworICAgICAgICBpZiAobG9jYWwpCisgICAgICAgICAgICByZXR1cm4gInNlcnZlciByZWNlaXZlIGJ1ZmZlciI7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAiY2xpZW50IHJlY2VpdmUgYnVmZmVyIjsKKyAgICB9CisKKyAgICByZXR1cm4gInVua25vd24gYnVmZmVyIjsKK30KKworLyoKKyAqCisgKiBHZXQgdGhlIHJlcXVlc3RlZCBidWZmZXJzaXplLCBiYXNlZCBvbgorICogLSBzb2NrZXR0eXBlIDogY2xpZW50IChsb2NhbCA9IDApIG9yIHNlcnZlciAobG9jYWwgPSAxKSAKKyAqIC0gYnVmZmVydHlwZSA6IHNlbmQgKG9wdG5hbWUgPSBTT19TTkRCVUYpIG9yIHJlY3YgKFNPX1JDVkJVRikKKyAqCisgKiBJbiBjYXNlIGEgY29tcGlsZSB0aW1lIGJ1ZmZlciB3YXMgc3BlY2lmaWVkLCB0aGVuIHVzZSB0aGF0IG9uZQorICogaWYgdGhlcmUgd2FzIG5vIHJ1bnRpbWUgY29uZmlndXJhdGlvbiBvdmVycmlkZQorICovCitzdGF0aWMgaW50Citfc29ja19idWZmZXJfc2l6ZV9nZXQoaW50IG9wdG5hbWUsIGludCBsb2NhbCwgY29uc3QgY2hhciAqKmJ1ZnR5cGUpCit7CisgICAgaW50IHNpemU7CisKKyAgICBpZiAoTlVMTCAhPSBidWZ0eXBlKQorICAgICAgICAqYnVmdHlwZSA9IF9zb2NrX2J1Zl90eXBlX2dldChvcHRuYW1lLCBsb2NhbCk7CisKKyAgICBpZiAob3B0bmFtZSA9PSBTT19TTkRCVUYpIHsKKyAgICAgICAgaWYgKGxvY2FsKSB7CisgICAgICAgICAgICBzaXplID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NFUlZFUlNFTkRCVUYpOworI2lmZGVmIE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfU0VORF9CVUYKKyAgICAgICAgICAgIGlmIChzaXplIDw9IDApCisgICAgICAgICAgICAgICBzaXplID0gTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9TRU5EX0JVRjsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRTRU5EQlVGKTsKKyNpZmRlZiBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1NFTkRfQlVGCisgICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9DTElFTlRfU0VORF9CVUY7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAob3B0bmFtZSA9PSBTT19SQ1ZCVUYpIHsKKyAgICAgICAgaWYgKGxvY2FsKSB7CisgICAgICAgICAgICBzaXplID0gbmV0c25tcF9kc19nZXRfaW50KE5FVFNOTVBfRFNfTElCUkFSWV9JRCwgCisgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1NFUlZFUlJFQ1ZCVUYpOworI2lmZGVmIE5FVFNOTVBfREVGQVVMVF9TRVJWRVJfUkVDVl9CVUYKKyAgICAgICAgICAgIGlmIChzaXplIDw9IDApCisgICAgICAgICAgICAgICBzaXplID0gTkVUU05NUF9ERUZBVUxUX1NFUlZFUl9SRUNWX0JVRjsKKyNlbmRpZgorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgc2l6ZSA9IG5ldHNubXBfZHNfZ2V0X2ludChORVRTTk1QX0RTX0xJQlJBUllfSUQsIAorICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRSRUNWQlVGKTsKKyNpZmRlZiBORVRTTk1QX0RFRkFVTFRfQ0xJRU5UX1JFQ1ZfQlVGCisgICAgICAgICAgICBpZiAoc2l6ZSA8PSAwKQorICAgICAgICAgICAgICAgc2l6ZSA9IE5FVFNOTVBfREVGQVVMVF9DTElFTlRfUkVDVl9CVUY7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIHNpemUgPSAwOworICAgIH0KKworICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwgIlJlcXVlc3RlZCAlcyBpcyAlZFxuIiwKKyAgICAgICAgICAgICAgICAoYnVmdHlwZSkgPyAqYnVmdHlwZSA6ICJ1bmtub3duIGJ1ZmZlciIsIHNpemUpKTsKKworICAgIHJldHVybihzaXplKTsKK30KKworLyoKKyAqIHNldCBzb2NrZXQgYnVmZmVyIHNpemUKKyAqCisgKiBAcGFyYW0gc3MgICAgIDogc29ja2V0CisgKiBAcGFyYW0gb3B0bmFtZTogU09fU05EQlVGIG9yIFNPX1JDVkJVRgorICogQHBhcmFtIGxvY2FsICA6IDEgZm9yIHNlcnZlciwgMCBmb3IgY2xpZW50CisgKiBAcGFyYW0gcmVxYnVmIDogcmVxdWVzdGVkIHNpemUsIG9yIDAgZm9yIGRlZmF1bHQKKyAqCisgKiBAcmV0dmFsICAgIC0xIDogZXJyb3IKKyAqIEByZXR2YWwgICAgPjAgOiBuZXcgYnVmZmVyIHNpemUKKyAqLworaW50CituZXRzbm1wX3NvY2tfYnVmZmVyX3NldChpbnQgcywgaW50IG9wdG5hbWUsIGludCBsb2NhbCwgaW50IHNpemUpCit7CisjaWYgISBkZWZpbmVkKFNPX1NOREJVRikgJiYgISBkZWZpbmVkKFNPX1JDVkJVRikKKyAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsICJDaGFuZ2luZyBzb2NrZXQgYnVmZmVyIGlzIG5vdCBzdXBwb3J0ZWRcbiIpKTsKKyAgICByZXR1cm4gLTE7CisjZWxzZQorICAgIGNvbnN0IGNoYXIgICAgICpidWZ0eXBlOworICAgIGludCAgICAgICAgICAgIGN1cmJ1ZiA9IDA7CisgICAgc29ja2xlbl90ICAgICAgY3VyYnVmbGVuID0gc2l6ZW9mKGludCk7CisKKyMgICBpZm5kZWYgIFNPX1NOREJVRgorICAgIGlmIChTT19TTkRCVUYgPT0gb3B0bmFtZSkgeworICAgICAgICBERUJVR01TR1RMKCgic29ja2V0OmJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICJDaGFuZ2luZyBzb2NrZXQgc2VuZCBidWZmZXIgaXMgbm90IHN1cHBvcnRlZFxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorIyAgIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKlNPX1NOREJVRiAqLworIyAgIGlmbmRlZiAgU09fUkNWQlVGCisgICAgaWYgKFNPX1JDVkJVRiA9PSBvcHRuYW1lKSB7CisgICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6YnVmZmVyIiwKKyAgICAgICAgICAgICAgICAgICAgIkNoYW5naW5nIHNvY2tldCByZWNlaXZlIGJ1ZmZlciBpcyBub3Qgc3VwcG9ydGVkXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisjICAgZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fUkNWQlVGICovCisKKyAgICAvKgorICAgICAqIFdoYXQgaXMgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSA/CisgICAgICovCisgICAgaWYgKDAgPT0gc2l6ZSkKKyAgICAgICAgc2l6ZSA9IF9zb2NrX2J1ZmZlcl9zaXplX2dldChvcHRuYW1lLCBsb2NhbCwgJmJ1ZnR5cGUpOworICAgIGVsc2UgeworICAgICAgICBidWZ0eXBlID0gX3NvY2tfYnVmX3R5cGVfZ2V0KG9wdG5hbWUsIGxvY2FsKTsKKyAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyIiwgIlJlcXVlc3RlZCAlcyBpcyAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBzaXplKSk7CisgICAgfQorCisgICAgaWYgKChnZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZjdXJidWYsCisgICAgICAgICAgICAgICAgICAgICZjdXJidWZsZW4pID09IDApIAorICAgICAgICAmJiAoY3VyYnVmbGVuID09IHNpemVvZihpbnQpKSkgeworICAgICAgICAKKyAgICAgICAgREVCVUdNU0dUKCgidmVyYm9zZTpzb2NrZXQ6YnVmZmVyIiwgIk9yaWdpbmFsICVzIGlzICVkXG4iLAorICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsIGN1cmJ1ZikpOworICAgICAgICBpZiAoY3VyYnVmID49IHNpemUpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAgIk5ldyAlcyBzaXplIGlzIHNtYWxsZXIgdGhhbiBvcmlnaW5hbCFcbiIsIGJ1ZnR5cGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlIGJ1ZmZlcnNpemUgd2FzIG5vdCBzcGVjaWZpZWQgb3IgaXQgd2FzIGEgbmVnYXRpdmUgdmFsdWUKKyAgICAgKiB0aGVuIGRvbid0IGNoYW5nZSB0aGUgT1MgYnVmZmVycyBhdCBhbGwKKyAgICAgKi8KKyAgICBpZiAoc2l6ZSA8PSAwKSB7CisgICAgICAgREVCVUdNU0dUKCgic29ja2V0OmJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICIlcyBub3QgdmFsaWQgb3Igbm90IHNwZWNpZmllZDsgdXNpbmcgT1MgZGVmYXVsdCglZClcbiIsCisgICAgICAgICAgICAgICAgICAgIGJ1ZnR5cGUsY3VyYnVmKSk7CisgICAgICAgcmV0dXJuIGN1cmJ1ZjsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRyeSB0byBzZXQgdGhlIHJlcXVlc3RlZCBzZW5kIGJ1ZmZlcgorICAgICAqLworICAgIGlmIChzZXRzb2Nrb3B0KHMsIFNPTF9TT0NLRVQsIG9wdG5hbWUsICh2b2lkICopICZzaXplLCBzaXplb2YoaW50KSkgPT0gMCkgeworICAgICAgICAvKgorICAgICAgICAgKiBCZWNhdXNlIHNvbWUgcGxhdGZvcm1zIGxpZSBhYm91dCB0aGUgYWN0dWFsIGJ1ZmZlciB0aGF0IGhhcyBiZWVuIAorICAgICAgICAgKiBzZXQgKExpbnV4IHdpbGwgYWx3YXlzIHNheSBpdCB3b3JrZWQgLi4uKSwgd2UgcHJpbnQgc29tZSAKKyAgICAgICAgICogZGlhZ25vc3RpYyBvdXRwdXQgZm9yIGRlYnVnZ2luZworICAgICAgICAgKi8KKyAgICAgICAgREVCVUdJRigic29ja2V0OmJ1ZmZlciIpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVCgoInNvY2tldDpidWZmZXIiLCAiU2V0ICVzIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBzaXplKSk7CisgICAgICAgICAgICBpZiAoKGdldHNvY2tvcHQocywgU09MX1NPQ0tFVCwgb3B0bmFtZSwgKHZvaWQgKikgJmN1cmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY3VyYnVmbGVuKSA9PSAwKSAKKyAgICAgICAgICAgICAgICAgICAgJiYgKGN1cmJ1ZmxlbiA9PSBzaXplb2YoaW50KSkpIHsKKworICAgICAgICAgICAgICAgIERFQlVHTVNHVCgoInZlcmJvc2U6c29ja2V0OmJ1ZmZlciIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiTm93ICVzIGlzICVkXG4iLCBidWZ0eXBlLCBjdXJidWYpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAvKgorICAgICAgICAgKiBJZiB0aGUgbmV3IGJ1ZmZlciBpcyBzbWFsbGVyIHRoYW4gdGhlIHNpemUgd2UgcmVxdWVzdGVkLCB3ZSB3aWxsCisgICAgICAgICAqIHRyeSB0byBpbmNyZW1lbnQgdGhlIG5ldyBidWZmZXIgd2l0aCAxayBpbmNyZW1lbnRzIAorICAgICAgICAgKiAodGhpcyB3aWxsIHNvbWV0aW1lIGFsbG93IHVzIHRvIHJlYWNoIGEgbW9yZSBvcHRpbWFsIGJ1ZmZlci4pCisgICAgICAgICAqICAgRm9yIGV4YW1wbGUgOiBPbiBTb2xhcmlzLCBpZiB0aGUgbWF4IE9TIGJ1ZmZlciBpcyAxMDBrIGFuZCB5b3UKKyAgICAgICAgICogICByZXF1ZXN0IDExMGssIHlvdSBlbmQgdXAgd2l0aCB0aGUgZGVmYXVsdCA4ayA6LSgKKyAgICAgICAgICovCisgICAgICAgIGlmIChjdXJidWYgPCBzaXplKSB7CisgICAgICAgICAgICBjdXJidWYgPSBfc29ja19idWZmZXJfbWF4aW1pemUocywgb3B0bmFtZSwgYnVmdHlwZSwgc2l6ZSk7CisgICAgICAgICAgICBpZigtMSAhPSBjdXJidWYpCisgICAgICAgICAgICAgICAgc2l6ZSA9IGN1cmJ1ZjsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogT2J2aW91c2x5IGNoYW5naW5nIHRoZSBidWZmZXIgZmFpbGVkLCBtb3N0IGxpa2UgbGlrZSBiZWNhdXNlIHdlIAorICAgICAgICAgKiByZXF1ZXN0ZWQgYSBidWZmZXIgZ3JlYXRlciB0aGFuIHRoZSBPUyBsaW1pdC4KKyAgICAgICAgICogVGhlcmVmb3JlIHdlIG5lZWQgdG8gc2VhcmNoIGZvciBhbiBvcHRpbWFsIGJ1ZmZlciB0aGF0IGlzIGNsb3NlCisgICAgICAgICAqIGVub3VnaCB0byB0aGUgcG9pbnQgb2YgZmFpbHVyZS4KKyAgICAgICAgICogVGhpcyB3aWxsIGFsbG93IHVzIHRvIHJlYWNoIGEgbW9yZSBvcHRpbWFsIGJ1ZmZlci4KKyAgICAgICAgICogICBGb3IgZXhhbXBsZSA6IE9uIFNvbGFyaXMsIGlmIHRoZSBtYXggT1MgYnVmZmVyIGlzIDEwMGsgYW5kIHlvdSAKKyAgICAgICAgICogICByZXF1ZXN0IDExMGssIHlvdSBlbmQgdXAgd2l0aCB0aGUgZGVmYXVsdCA4ayA6LSgKKyAgICAgICAgICogICBBZnRlciB0aGlzIHF1aWNrIHNlYWNoIHdlIHdvdWxkIGdldCAxayBjbG9zZSB0byAxMDBrICh0aGUgbWF4KQorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInNvY2tldDpidWZmZXIiLCAiY291bGRuJ3Qgc2V0ICVzIHRvICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBidWZ0eXBlLCBzaXplKSk7CisKKyAgICAgICAgY3VyYnVmID0gX3NvY2tfYnVmZmVyX21heGltaXplKHMsIG9wdG5hbWUsIGJ1ZnR5cGUsIHNpemUpOworICAgICAgICBpZigtMSAhPSBjdXJidWYpCisgICAgICAgICAgICBzaXplID0gY3VyYnVmOworICAgIH0KKworICAgIHJldHVybiBzaXplOworI2VuZGlmCit9CisKKworLyoqCisgKiBTZXRzIHRoZSBtb2RlIG9mIGEgc29ja2V0IGZvciBhbGwgc3Vic2VxdWVudCBJL08gb3BlcmF0aW9ucy4KKyAqCisgKiBAcGFyYW1baW5dIHNvY2sgU29ja2V0IGRlc2NyaXB0b3IgKFVuaXgpIG9yIHNvY2tldCBoYW5kbGUgKFdpbmRvd3MpLgorICogQHBhcmFtW2luXSBub25fYmxvY2tpbmdfbW9kZSBJL08gbW9kZTogbm9uLXplcm8gc2VsZWN0cyBub24tYmxvY2tpbmcgbW9kZTsKKyAqICAgemVybyBzZWxlY3RzIGJsb2NraW5nIG1vZGUuCisgKgorICogQHJldHVybiB6ZXJvIHVwb24gc3VjY2VzcyBhbmQgYSBuZWdhdGl2ZSB2YWx1ZSB1cG9uIGVycm9yLgorICovCitpbnQKK25ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKGludCBzb2NrLCBpbnQgbm9uX2Jsb2NraW5nX21vZGUpCit7CisjaWZkZWYgV0lOMzIKKyAgICB1X2xvbmcgICAgICAgICAgYXJnOworCisgICAgYXJnID0gbm9uX2Jsb2NraW5nX21vZGU7CisgICAgcmV0dXJuIGlvY3Rsc29ja2V0KHNvY2ssIEZJT05CSU8sICZhcmcpOworI2Vsc2UKKyAgICBpbnQgICAgICAgICAgICAgc29ja2ZsYWdzOworCisgICAgaWYgKChzb2NrZmxhZ3MgPSBmY250bChzb2NrLCBGX0dFVEZMLCAwKSkgPj0gMCkgeworICAgICAgICByZXR1cm4gZmNudGwoc29jaywgRl9TRVRGTCwKKyAgICAgICAgICAgICAgICAgICAgIG5vbl9ibG9ja2luZ19tb2RlID8gc29ja2ZsYWdzIHwgT19OT05CTE9DSworICAgICAgICAgICAgICAgICAgICAgOiBzb2NrZmxhZ3MgJiB+T19OT05CTE9DSyk7CisgICAgfSBlbHNlCisgICAgICAgIHJldHVybiAtMTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUEJhc2VEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzcwZGJhCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BCYXNlRG9tYWluLmMKQEAgLTAsMCArMSw5OSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1NPQ0tFVF9ICisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisKKy8qCisgKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCisgKi8KKworaW50IG5ldHNubXBfdGNwYmFzZV9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisJd2hpbGUgKHJjIDwgMCkgeworCSAgICByYyA9IHJlY3Zmcm9tKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgTlVMTCk7CisJICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwYmFzZSIsICJyZWN2IGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKwkJCSAgICB0LT5zb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisJCWJyZWFrOworCSAgICB9CisJICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcGJhc2UiLCAicmVjdiBmZCAlZCBnb3QgJWQgYnl0ZXNcbiIsCisJCQl0LT5zb2NrLCByYykpOworCX0KKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmIG9sZW5ndGggIT0gTlVMTCkgeworICAgICAgICBpZiAodC0+ZGF0YV9sZW5ndGggPiAwKSB7CisgICAgICAgICAgICBpZiAoKCpvcGFxdWUgPSBtYWxsb2ModC0+ZGF0YV9sZW5ndGgpKSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KCpvcGFxdWUsIHQtPmRhdGEsIHQtPmRhdGFfbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAqb2xlbmd0aCA9IHQtPmRhdGFfbGVuZ3RoOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiByYzsKK30KKworaW50IG5ldHNubXBfdGNwYmFzZV9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkgeworICAgIGludCByYyA9IC0xOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKwl3aGlsZSAocmMgPCAwKSB7CisJICAgIHJjID0gc2VuZHRvKHQtPnNvY2ssIGJ1Ziwgc2l6ZSwgMCwgTlVMTCwgMCk7CisJICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByYzsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVENQRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdmZWIwMjgKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUERvbWFpbi5jCkBAIC0wLDAgKzEsMzUxIEBACisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRDUERvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wSVB2NEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVENQQmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKworLyoKKyAqIG5lZWRzIHRvIGJlIGluIHN5bmMgd2l0aCB0aGUgZGVmaW5pdGlvbnMgaW4gc25tcGxpYi9zbm1wVURQRG9tYWluLmMKKyAqIGFuZCBwZXJsL2FnZW50L2FnZW50LnhzCisgKi8KK3R5cGVkZWYgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciBuZXRzbm1wX3VkcF9hZGRyX3BhaXI7CisKK29pZCBuZXRzbm1wX3NubXBUQ1BEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9UQ1BfSVAgfTsKK3N0YXRpYyBuZXRzbm1wX3Rkb21haW4gdGNwRG9tYWluOworCisvKgorICogTm90IHN0YXRpYyBzaW5jZSBpdCBpcyBuZWVkZWQgaGVyZSBhcyB3ZWxsIGFzIGluIHNubXBVRFBEb21haW4sIGJ1dCBub3QKKyAqIHB1YmxpYyBlaXRoZXIKKyAqLworaW50CituZXRzbm1wX3NvY2thZGRyX2luMihzdHJ1Y3Qgc29ja2FkZHJfaW4gKmFkZHIsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppbnBlZXJuYW1lLCBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCk7CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgcmVwcmVzZW50aW5nIHRoZSBhZGRyZXNzIGluIGRhdGEsIG9yIGVsc2UgdGhlICJmYXIgZW5kIgorICogYWRkcmVzcyBpZiBkYXRhIGlzIE5VTEwuICAKKyAqLworCitzdGF0aWMgY2hhciAqCituZXRzbm1wX3RjcF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHJldHVybiBuZXRzbm1wX2lwdjRfZm10YWRkcigiVENQIiwgdCwgZGF0YSwgbGVuKTsKK30KKworc3RhdGljIGludAorbmV0c25tcF90Y3BfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIHN0cnVjdCBzb2NrYWRkciAqZmFyZW5kID0gTlVMTDsKKyAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIG5ld3NvY2sgPSAtMTsKKyAgICBzb2NrbGVuX3QgICAgICAgZmFyZW5kbGVuID0gc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcik7CisKKyAgICBhZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopbWFsbG9jKGZhcmVuZGxlbik7CisgICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIEluZGljYXRlIHRoYXQgdGhlIGFjY2VwdGFuY2Ugb2YgdGhpcyBzb2NrZXQgZmFpbGVkLiAgCisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3AiLCAiYWNjZXB0OiBtYWxsb2MgZmFpbGVkXG4iKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbWVtc2V0KGFkZHJfcGFpciwgMCwgc2l6ZW9mICphZGRyX3BhaXIpOworICAgIGZhcmVuZCA9ICZhZGRyX3BhaXItPnJlbW90ZV9hZGRyLnNhOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgbmV3c29jayA9IGFjY2VwdCh0LT5zb2NrLCBmYXJlbmQsICZmYXJlbmRsZW4pOworCisgICAgICAgIGlmIChuZXdzb2NrIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwIiwgImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAorCQkJbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgZnJlZShhZGRyX3BhaXIpOworICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHQtPmRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgdC0+ZGF0YSA9IGFkZHJfcGFpcjsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKTsKKyAgICAgICAgREVCVUdJRigibmV0c25tcF90Y3AiKSB7CisgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3RjcF9mbXRhZGRyKE5VTEwsIGZhcmVuZCwgZmFyZW5kbGVuKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJhY2NlcHQgc3VjY2VlZGVkIChmcm9tICVzKVxuIiwgc3RyKSk7CisgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBUcnkgdG8gbWFrZSB0aGUgbmV3IHNvY2tldCBibG9ja2luZy4gIAorICAgICAgICAgKi8KKworICAgICAgICBpZiAobmV0c25tcF9zZXRfbm9uX2Jsb2NraW5nX21vZGUobmV3c29jaywgRkFMU0UpIDwgMCkKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcCIsICJjb3VsZG4ndCBmX2dldGZsIG9mIGZkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgbmV3c29jaykpOworCisgICAgICAgIC8qCisgICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcworICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQorICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19TTkRCVUYsIDEsIDApOworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldChuZXdzb2NrLCBTT19SQ1ZCVUYsIDEsIDApOworCisgICAgICAgIHJldHVybiBuZXdzb2NrOworICAgIH0gZWxzZSB7CisgICAgICAgIGZyZWUoYWRkcl9wYWlyKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KK30KKworCisKKy8qCisgKiBPcGVuIGEgVENQLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAorICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90Y3BfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKyAgICBuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgaW50IHJjID0gMDsKKworI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAobG9jYWwpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX3VkcF9hZGRyX3BhaXIgKiltYWxsb2Moc2l6ZW9mKG5ldHNubXBfdWRwX2FkZHJfcGFpcikpOworICAgIGlmIChhZGRyX3BhaXIgPT0gTlVMTCkgeworICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisgICAgbWVtc2V0KGFkZHJfcGFpciwgMCwgc2l6ZW9mICphZGRyX3BhaXIpOworICAgIHQtPmRhdGEgPSBhZGRyX3BhaXI7CisgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKTsKKyAgICBtZW1jcHkoJihhZGRyX3BhaXItPnJlbW90ZV9hZGRyKSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCisgICAgdC0+ZG9tYWluID0gbmV0c25tcF9zbm1wVENQRG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPQorICAgICAgICBzaXplb2YobmV0c25tcF9zbm1wVENQRG9tYWluKSAvIHNpemVvZihuZXRzbm1wX3NubXBUQ1BEb21haW5bMF0pOworCisgICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVULCBTT0NLX1NUUkVBTSwgMCk7CisgICAgaWYgKHQtPnNvY2sgPCAwKSB7CisgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQtPmZsYWdzID0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU07CisKKyAgICBpZiAobG9jYWwpIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgICAgICBpbnQgb3B0ID0gMTsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIHNlc3Npb24gaXMgaW50ZW5lZGVkIGFzIGEgc2VydmVyLCBzbyB3ZSBtdXN0IGJpbmQgdG8gdGhlIGdpdmVuIAorICAgICAgICAgKiBJUCBhZGRyZXNzICh3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQgYmUKKyAgICAgICAgICogSU5BRERSX0FOWSwgYnV0IHdpbGwgYWx3YXlzIGluY2x1ZGUgYSBwb3J0IG51bWJlci4gIAorICAgICAgICAgKi8KKworICAgICAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTjsKKyAgICAgICAgdC0+bG9jYWwgPSAodV9jaGFyICopbWFsbG9jKDYpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5sb2NhbCwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKKyAgICAgICAgdC0+bG9jYWxbNF0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5sb2NhbFs1XSA9IChudG9ocyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDY7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogV2Ugc2hvdWxkIHNldCBTT19SRVVTRUFERFIgdG9vLiAgCisgICAgICAgICAqLworCisgICAgICAgIHNldHNvY2tvcHQodC0+c29jaywgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAodm9pZCAqKSZvcHQsCisJCSAgIHNpemVvZihvcHQpKTsKKworICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNpbmNlIHdlIGFyZSBnb2luZyB0byBiZSBsZXR0aW5nIHNlbGVjdCgpIHRlbGwgdXMgd2hlbiBjb25uZWN0aW9ucworICAgICAgICAgKiBhcmUgcmVhZHkgdG8gYmUgYWNjZXB0KCllZCwgd2UgbmVlZCB0byBtYWtlIHRoZSBzb2NrZXQgbm9uLWJsb2NraW5nCisgICAgICAgICAqIHRvIGF2b2lkIHRoZSByYWNlIGNvbmRpdGlvbiBkZXNjcmliZWQgaW4gVy4gUi4gU3RldmVucywgYGBVbml4CisgICAgICAgICAqIE5ldHdvcmsgUHJvZ3JhbW1pbmcgVm9sdW1lIEkgU2Vjb25kIEVkaXRpb24nJywgcHAuIDQyMi0tNCwgd2hpY2gKKyAgICAgICAgICogY291bGQgb3RoZXJ3aXNlIHdlZGdlIHRoZSBhZ2VudC4KKyAgICAgICAgICovCisKKyAgICAgICAgbmV0c25tcF9zZXRfbm9uX2Jsb2NraW5nX21vZGUodC0+c29jaywgVFJVRSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IHNpdCBoZXJlIGFuZCB3YWl0IGZvciBjb25uZWN0aW9ucyB0byBhcnJpdmUuICAKKyAgICAgICAgICovCisKKyAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgLyoKKyAgICAgICAgICogbm8gYnVmZmVyIHNpemUgb24gbGlzdGVuIHNvY2tldCAtIGRvZXNuJ3QgbWFrZSBzZW5zZQorICAgICAgICAgKi8KKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0gZWxzZSB7CisgICAgICB0LT5yZW1vdGUgPSAodV9jaGFyICopbWFsbG9jKDYpOworICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCAodV9jaGFyICopICYgKGFkZHItPnNpbl9hZGRyLnNfYWRkciksIDQpOworICAgICAgICB0LT5yZW1vdGVbNF0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5yZW1vdGVbNV0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gNjsKKworICAgICAgICAvKgorICAgICAgICAgKiBUaGlzIGlzIGEgY2xpZW50LXR5cGUgc2Vzc2lvbiwgc28gYXR0ZW1wdCB0byBjb25uZWN0IHRvIHRoZSBmYXIKKyAgICAgICAgICogZW5kLiAgV2UgZG9uJ3QgZ28gbm9uLWJsb2NraW5nIGhlcmUgYmVjYXVzZSBpdCdzIG5vdCBvYnZpb3VzIHdoYXQKKyAgICAgICAgICogeW91J2QgdGhlbiBkbyBpZiB5b3UgdHJpZWQgdG8gZG8gc25tcF9zZW5kcyBiZWZvcmUgdGhlIGNvbm5lY3Rpb24KKyAgICAgICAgICogaGFkIGNvbXBsZXRlZC4gIFNvIHRoaXMgY2FuIGJsb2NrLgorICAgICAgICAgKi8KKworICAgICAgICByYyA9IGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKWFkZHIsCisJCSAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworCisgICAgICAgIGlmIChyYyA8IDApIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEFsbG93IHVzZXIgdG8gb3ZlcnJpZGUgdGhlIHNlbmQgYW5kIHJlY2VpdmUgYnVmZmVycy4gRGVmYXVsdCBpcworICAgICAgICAgKiB0byB1c2Ugb3MgZGVmYXVsdC4gIERvbid0IHdvcnJ5IHRvbyBtdWNoIGFib3V0IGVycm9ycyAtLQorICAgICAgICAgKiBqdXN0IHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCisgICAgICAgICAqLworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19TTkRCVUYsIGxvY2FsLCAwKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQodC0+c29jaywgU09fUkNWQlVGLCBsb2NhbCwgMCk7CisgICAgfQorCisgICAgLyoKKyAgICAgKiBNZXNzYWdlIHNpemUgaXMgbm90IGxpbWl0ZWQgYnkgdGhpcyB0cmFuc3BvcnQgKGhlbmNlIG1zZ01heFNpemUKKyAgICAgKiBpcyBlcXVhbCB0byB0aGUgbWF4aW11bSBsZWdhbCBzaXplIG9mIGFuIFNOTVAgbWVzc2FnZSkuICAKKyAgICAgKi8KKworICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3RjcGJhc2VfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF90Y3BiYXNlX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF90Y3BfYWNjZXB0OworICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3RjcF9mbXRhZGRyOworCisgICAgcmV0dXJuIHQ7Cit9CisKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3RjcF9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKKwkJCSAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBhZGRyOworCisgICAgaWYgKG5ldHNubXBfc29ja2FkZHJfaW4yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgeworICAgICAgICByZXR1cm4gbmV0c25tcF90Y3BfdHJhbnNwb3J0KCZhZGRyLCBsb2NhbCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorfQorCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90Y3BfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisKKyAgICBpZiAob19sZW4gPT0gNikgeworICAgICAgICB1bnNpZ25lZCBzaG9ydCBwb3J0dG1wID0gKG9bNF0gPDwgOCkgKyBvWzVdOworICAgICAgICBhZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbl9hZGRyLnNfYWRkciksIG8sIDQpOworICAgICAgICBhZGRyLnNpbl9wb3J0ID0gaHRvbnMocG9ydHRtcCk7CisgICAgICAgIHJldHVybiBuZXRzbm1wX3RjcF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKworCit2b2lkCituZXRzbm1wX3RjcF9jdG9yKHZvaWQpCit7CisgICAgdGNwRG9tYWluLm5hbWUgPSBuZXRzbm1wX3NubXBUQ1BEb21haW47CisgICAgdGNwRG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfc25tcFRDUERvbWFpbikgLyBzaXplb2Yob2lkKTsKKyAgICB0Y3BEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIgKiopY2FsbG9jKDIsIHNpemVvZihjaGFyICopKTsKKyAgICB0Y3BEb21haW4ucHJlZml4WzBdID0gInRjcCI7CisKKyAgICB0Y3BEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nICAgICA9IE5VTEw7CisgICAgdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3RjcF9jcmVhdGVfdHN0cmluZzsKKyAgICB0Y3BEb21haW4uZl9jcmVhdGVfZnJvbV9vc3RyaW5nICAgICA9IG5ldHNubXBfdGNwX2NyZWF0ZV9vc3RyaW5nOworCisgICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ0Y3BEb21haW4pOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRDUElQdjZEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMmUwYTJkCi0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUQ1BJUHY2RG9tYWluLmMKQEAgLTAsMCArMSwzNzQgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRDUElQdjZEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiBIQVZFX0ZDTlRMX0gKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0RNQUxMT0NfSAorI2luY2x1ZGUgPGRtYWxsb2MuaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUQ1BCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorCisjaW5jbHVkZSAiaW5ldF9udG9wLmgiCisKK29pZCBuZXRzbm1wX1RDUElQdjZEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9UQ1BfSVBWNiB9Oworc3RhdGljIG5ldHNubXBfdGRvbWFpbiB0Y3A2RG9tYWluOworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCisgKi8KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF90Y3A2X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgcmV0dXJuIG5ldHNubXBfaXB2Nl9mbXRhZGRyKCJUQ1AvSVB2NiIsIHQsIGRhdGEsIGxlbik7Cit9CisKK3N0YXRpYyBpbnQKK25ldHNubXBfdGNwNl9hY2NlcHQobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqZmFyZW5kID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgbmV3c29jayA9IC0xOworICAgIHNvY2tsZW5fdCAgICAgICBmYXJlbmRsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisKKyAgICBmYXJlbmQgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKworICAgIGlmIChmYXJlbmQgPT0gTlVMTCkgeworICAgICAgICAvKgorICAgICAgICAgKiBJbmRpY2F0ZSB0aGF0IHRoZSBhY2NlcHRhbmNlIG9mIHRoaXMgc29ja2V0IGZhaWxlZC4gIAorICAgICAgICAgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJhY2NlcHQ6IG1hbGxvYyBmYWlsZWRcbiIpKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIG5ld3NvY2sgPSBhY2NlcHQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBmYXJlbmQsICZmYXJlbmRsZW4pOworCisgICAgICAgIGlmIChuZXdzb2NrIDwgMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsImFjY2VwdCBmYWlsZWQgcmMgJWQgZXJybm8gJWQgXCIlc1wiXG4iLAorCQkJbmV3c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgZnJlZShmYXJlbmQpOworICAgICAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgICAgIH0KKworICAgICAgICBpZiAodC0+ZGF0YSAhPSBOVUxMKSB7CisgICAgICAgICAgICBmcmVlKHQtPmRhdGEpOworICAgICAgICB9CisKKyAgICAgICAgdC0+ZGF0YSA9IGZhcmVuZDsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBmYXJlbmRsZW47CisgICAgICAgIERFQlVHSUYoIm5ldHNubXBfdGNwNiIpIHsKKyAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdGNwNl9mbXRhZGRyKE5VTEwsIGZhcmVuZCwgZmFyZW5kbGVuKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiYWNjZXB0IHN1Y2NlZWRlZCAoZnJvbSAlcylcbiIsIHN0cikpOworICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVHJ5IHRvIG1ha2UgdGhlIG5ldyBzb2NrZXQgYmxvY2tpbmcuICAKKyAgICAgICAgICovCisKKyAgICAgICAgaWYgKG5ldHNubXBfc2V0X25vbl9ibG9ja2luZ19tb2RlKG5ld3NvY2ssIEZBTFNFKSA8IDApCisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF90Y3A2IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJhY2NlcHQ6IGNvdWxkbid0IGZfZ2V0Zmwgb2YgZmQgJWRcbiIsIG5ld3NvY2spKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBzZW5kIGFuZCByZWNlaXZlIGJ1ZmZlcnMuIERlZmF1bHQgaXMKKyAgICAgICAgICogdG8gdXNlIG9zIGRlZmF1bHQuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0KKyAgICAgICAgICoganVzdCBwbG91Z2ggb24gcmVnYXJkbGVzcy4gIAorICAgICAgICAgKi8KKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fU05EQlVGLCAxLCAwKTsKKyAgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKKworICAgICAgICByZXR1cm4gbmV3c29jazsKKyAgICB9IGVsc2UgeworICAgICAgICBmcmVlKGZhcmVuZCk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKKworCisvKgorICogT3BlbiBhIFRDUC9JUHY2LWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUKKyAqIGxvY2FsIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZQorICogYWRkciBpcyB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8uICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3RjcDZfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbjYgKmFkZHIsIGludCBsb2NhbCkKK3sKKyAgICBuZXRzbm1wX3RyYW5zcG9ydCAqdCA9IE5VTEw7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gMDsKKworI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAobG9jYWwpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c2luNl9mYW1pbHkgIT0gQUZfSU5FVDYpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmICh0ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgREVCVUdJRigibmV0c25tcF90Y3A2IikgeworICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3RjcDZfZm10YWRkcihOVUxMLCAodm9pZCAqKWFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisgICAgICAgICAgICAgICAgICAgIHN0cikpOworICAgICAgICBmcmVlKHN0cik7CisgICAgfQorCisgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpOworICAgIG1lbWNweSh0LT5kYXRhLCBhZGRyLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCisgICAgdC0+ZG9tYWluID0gbmV0c25tcF9UQ1BJUHY2RG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPSBzaXplb2YobmV0c25tcF9UQ1BJUHY2RG9tYWluKSAvIHNpemVvZihvaWQpOworCisgICAgdC0+c29jayA9IHNvY2tldChQRl9JTkVUNiwgU09DS19TVFJFQU0sIDApOworICAgIGlmICh0LT5zb2NrIDwgMCkgeworICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICB0LT5mbGFncyA9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfU1RSRUFNOworCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICAgICAgaW50IG9wdCA9IDE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQorICAgICAgICAgKiBnaXZlbiBJUCBhZGRyZXNzLCB3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQKKyAgICAgICAgICogYmUgSU5BRERSX0FOWSwgYnV0IGNlcnRhaW5seSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyLgorICAgICAgICAgKi8KKworI2lmZGVmIElQVjZfVjZPTkxZCisgICAgICAgIC8qIFRyeSB0byByZXN0cmljdCBQRl9JTkVUNiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9ucyBvbmx5LiAqLworICAgICAgICB7CisJICBpbnQgb25lPTE7CisJICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAoY2hhciAqKSZvbmUsIHNpemVvZihvbmUpKSAhPSAwKSB7CisJICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3RjcDYiLCAiY291bGRuJ3Qgc2V0IElQVjZfVjZPTkxZIHRvICVkIGJ5dGVzOiAlc1xuIiwgb25lLCBzdHJlcnJvcihlcnJubykpKTsKKwkgIH0gCisJfQorI2VuZGlmCisKKyAgICAgICAgdC0+ZmxhZ3MgfD0gTkVUU05NUF9UUkFOU1BPUlRfRkxBR19MSVNURU47CisgICAgICAgIHQtPmxvY2FsID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7CisgICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOworICAgICAgICB0LT5sb2NhbFsxNl0gPSAobnRvaHMoYWRkci0+c2luNl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+bG9jYWxbMTddID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDE4OworCisgICAgICAgIC8qCisgICAgICAgICAqIFdlIHNob3VsZCBzZXQgU09fUkVVU0VBRERSIHRvby4gIAorICAgICAgICAgKi8KKworICAgICAgICBzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9TT0NLRVQsIFNPX1JFVVNFQUREUiwgKHZvaWQgKikmb3B0LCBzaXplb2Yob3B0KSk7CisKKyAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKKwkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2luY2Ugd2UgYXJlIGdvaW5nIHRvIGJlIGxldHRpbmcgc2VsZWN0KCkgdGVsbCB1cyB3aGVuIGNvbm5lY3Rpb25zCisgICAgICAgICAqIGFyZSByZWFkeSB0byBiZSBhY2NlcHQoKWVkLCB3ZSBuZWVkIHRvIG1ha2UgdGhlIHNvY2tldCBuMG4tYmxvY2tpbmcKKyAgICAgICAgICogdG8gYXZvaWQgdGhlIHJhY2UgY29uZGl0aW9uIGRlc2NyaWJlZCBpbiBXLiBSLiBTdGV2ZW5zLCBgYFVuaXgKKyAgICAgICAgICogTmV0d29yayBQcm9ncmFtbWluZyBWb2x1bWUgSSBTZWNvbmQgRWRpdGlvbicnLCBwcC4gNDIyLS00LCB3aGljaAorICAgICAgICAgKiBjb3VsZCBvdGhlcndpc2Ugd2VkZ2UgdGhlIGFnZW50LgorICAgICAgICAgKi8KKworICAgICAgICBuZXRzbm1wX3NldF9ub25fYmxvY2tpbmdfbW9kZSh0LT5zb2NrLCBUUlVFKTsKKworICAgICAgICAvKgorICAgICAgICAgKiBOb3cgc2l0IGhlcmUgYW5kIHdhaXQgZm9yIGNvbm5lY3Rpb25zIHRvIGFycml2ZS4gIAorICAgICAgICAgKi8KKworICAgICAgICByYyA9IGxpc3Rlbih0LT5zb2NrLCBORVRTTk1QX1NUUkVBTV9RVUVVRV9MRU4pOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICAvKgorICAgICAgICAgKiBubyBidWZmZXIgc2l6ZSBvbiBsaXN0ZW4gc29ja2V0IC0gZG9lc24ndCBtYWtlIHNlbnNlCisgICAgICAgICAqLworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgdC0+cmVtb3RlID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7CisgICAgICAgIGlmICh0LT5yZW1vdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5yZW1vdGUsIGFkZHItPnNpbjZfYWRkci5zNl9hZGRyLCAxNik7CisgICAgICAgIHQtPnJlbW90ZVsxNl0gPSAobnRvaHMoYWRkci0+c2luNl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+cmVtb3RlWzE3XSA9IChudG9ocyhhZGRyLT5zaW42X3BvcnQpICYgMHgwMGZmKSA+PiAwOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gMTg7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudC10eXBlIHNlc3Npb24sIHNvIGF0dGVtcHQgdG8gY29ubmVjdCB0byB0aGUgZmFyCisgICAgICAgICAqIGVuZC4gIFdlIGRvbid0IGdvIG5vbi1ibG9ja2luZyBoZXJlIGJlY2F1c2UgaXQncyBub3Qgb2J2aW91cyB3aGF0CisgICAgICAgICAqIHlvdSdkIHRoZW4gZG8gaWYgeW91IHRyaWVkIHRvIGRvIHNubXBfc2VuZHMgYmVmb3JlIHRoZSBjb25uZWN0aW9uCisgICAgICAgICAqIGhhZCBjb21wbGV0ZWQuICBTbyB0aGlzIGNhbiBibG9jay4KKyAgICAgICAgICovCisKKyAgICAgICAgcmMgPSBjb25uZWN0KHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdGNwNiIsICJjb25uZWN0IHJldHVybnMgJWRcbiIsIHJjKSk7CisKKyAgICAgICAgaWYgKHJjIDwgMCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogQWxsb3cgdXNlciB0byBvdmVycmlkZSB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzLiBEZWZhdWx0IGlzCisgICAgICAgICAqIHRvIHVzZSBvcyBkZWZhdWx0LiAgRG9uJ3Qgd29ycnkgdG9vIG11Y2ggYWJvdXQgZXJyb3JzIC0tCisgICAgICAgICAqIGp1c3QgcGxvdWdoIG9uIHJlZ2FyZGxlc3MuICAKKyAgICAgICAgICovCisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1NOREJVRiwgbG9jYWwsIDApOworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQorICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4gIAorICAgICAqLworCisgICAgdC0+bXNnTWF4U2l6ZSA9IDB4N2ZmZmZmZmY7CisgICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdGNwYmFzZV9yZWN2OworICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3RjcGJhc2Vfc2VuZDsKKyAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICAgPSBuZXRzbm1wX3RjcDZfYWNjZXB0OworICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3RjcDZfZm10YWRkcjsKKworICAgIHJldHVybiB0OworfQorCisvKgorICogTm90IGV4dGVybiBidXQgc3RpbGwgZGVmaW5lZCBpbiBzbm1wVURQSVB2NkRvbWFpbi5jCisgKi8KK2V4dGVybiBpbnQKK25ldHNubXBfc29ja2FkZHJfaW42XzIoc3RydWN0IHNvY2thZGRyX2luNiosIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGNwNl9jcmVhdGVfdHN0cmluZyhjb25zdCBjaGFyICpzdHIsIGludCBsb2NhbCwKKwkJCSAgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisKKyAgICBpZiAobmV0c25tcF9zb2NrYWRkcl9pbjZfMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKworLyoKKyAqIFNlZToKKyAqIAorICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtaWV0Zi1vcHMtdGFkZHJlc3MtbWliLTAxLnR4dAorICogCisgKiAob3IgbmV3ZXIgZXF1aXZhbGVudCkgZm9yIGRldGFpbHMgb2YgdGhlIFRDIHdoaWNoIHdlIGFyZSB1c2luZyBmb3IKKyAqIHRoZSBtYXBwaW5nIGhlcmUuICAKKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3RjcDZfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiBhZGRyOworCisgICAgaWYgKG9fbGVuID09IDE4KSB7CisgICAgICAgIG1lbXNldCgodV9jaGFyICopICYgYWRkciwgMCwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICBtZW1jcHkoKHVfY2hhciAqKSAmIChhZGRyLnNpbjZfYWRkci5zNl9hZGRyKSwgbywgMTYpOworICAgICAgICBhZGRyLnNpbjZfcG9ydCA9IGh0b25zKChvWzE2XSA8PCA4KSArIG9bMTddKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdGNwNl90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CisKKwordm9pZAorbmV0c25tcF90Y3BpcHY2X2N0b3Iodm9pZCkKK3sKKyAgICB0Y3A2RG9tYWluLm5hbWUgPSBuZXRzbm1wX1RDUElQdjZEb21haW47CisgICAgdGNwNkRvbWFpbi5uYW1lX2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX1RDUElQdjZEb21haW4pIC8gc2l6ZW9mKG9pZCk7CisgICAgdGNwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICB0Y3A2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3RjcDZfY3JlYXRlX3RzdHJpbmc7CisgICAgdGNwNkRvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF90Y3A2X2NyZWF0ZV9vc3RyaW5nOworICAgIHRjcDZEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoNCwgc2l6ZW9mKGNoYXIgKikpOworICAgIHRjcDZEb21haW4ucHJlZml4WzBdID0gInRjcDYiOworICAgIHRjcDZEb21haW4ucHJlZml4WzFdID0gInRjcHY2IjsKKyAgICB0Y3A2RG9tYWluLnByZWZpeFsyXSA9ICJ0Y3BpcHY2IjsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdGNwNkRvbWFpbik7Cit9CisKKyNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiAqLworCmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTQmFzZURvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1NGQ2YWQKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFRMU0Jhc2VEb21haW4uYwpAQCAtMCwwICsxLDExODMgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKK25ldHNubXBfZmVhdHVyZV9yZXF1aXJlKGNlcnRfdXRpbCkKKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaD4KKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKworLyogT3BlblNTTCBJbmNsdWRlcyAqLworI2luY2x1ZGUgPG9wZW5zc2wvYmlvLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL2Vyci5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOS5oPgorI2luY2x1ZGUgPG9wZW5zc2wveDUwOV92ZnkuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3g1MDl2My5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jZXJ0X3V0aWwuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfb3BlbnNzbC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfbG9nZ2luZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfc2VjbW9kLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9yZWFkX2NvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKKyNkZWZpbmUgTE9HQU5ERElFKG1zZykgZG8geyBzbm1wX2xvZyhMT0dfRVJSLCAiJXNcbiIsIG1zZyk7IHJldHVybiAwOyB9IHdoaWxlKDApCisKK2ludCBvcGVuc3NsX2xvY2FsX2luZGV4OworCisvKiB0aGlzIGlzIGNhbGxlZCBkdXJpbmcgbmVnb3RpYXRpb25uICovCitpbnQgdmVyaWZ5X2NhbGxiYWNrKGludCBvaywgWDUwOV9TVE9SRV9DVFggKmN0eCkgeworICAgIGludCBlcnIsIGRlcHRoOworICAgIGNoYXIgYnVmWzEwMjRdLCAqZmluZ2VycHJpbnQ7CisgICAgWDUwOSAqdGhlY2VydDsKKyAgICBuZXRzbm1wX2NlcnQgKmNlcnQ7CisgICAgX25ldHNubXBfdmVyaWZ5X2luZm8gKnZlcmlmeV9pbmZvOworICAgIFNTTCAqc3NsOworCisgICAgdGhlY2VydCA9IFg1MDlfU1RPUkVfQ1RYX2dldF9jdXJyZW50X2NlcnQoY3R4KTsKKyAgICBlcnIgPSBYNTA5X1NUT1JFX0NUWF9nZXRfZXJyb3IoY3R4KTsKKyAgICBkZXB0aCA9IFg1MDlfU1RPUkVfQ1RYX2dldF9lcnJvcl9kZXB0aChjdHgpOworICAgIAorICAgIC8qIHRoaW5ncyB0byBkbzogKi8KKworICAgIFg1MDlfTkFNRV9vbmVsaW5lKFg1MDlfZ2V0X3N1YmplY3RfbmFtZSh0aGVjZXJ0KSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgZmluZ2VycHJpbnQgPSBuZXRzbm1wX29wZW5zc2xfY2VydF9nZXRfZmluZ2VycHJpbnQodGhlY2VydCwgLTEpOworICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiQ2VydDogJXNcbiIsIGJ1ZikpOworICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiICBmcDogJXNcbiIsIGZpbmdlcnByaW50ID8KKyAgICAgICAgICAgICAgICBmaW5nZXJwcmludCA6ICJ1bmtub3duIikpOworCisgICAgc3NsID0gWDUwOV9TVE9SRV9DVFhfZ2V0X2V4X2RhdGEoY3R4LCBTU0xfZ2V0X2V4X2RhdGFfWDUwOV9TVE9SRV9DVFhfaWR4KCkpOworICAgIHZlcmlmeV9pbmZvID0gU1NMX2dldF9leF9kYXRhKHNzbCwgb3BlbnNzbF9sb2NhbF9pbmRleCk7CisKKyAgICBpZiAodmVyaWZ5X2luZm8gJiYgb2sgJiYgZGVwdGggPiAwKSB7CisgICAgICAgIC8qIHJlbWVtYmVyIHRoYXQgYSBwYXJlbnQgY2VydGlmaWNhdGUgaGFzIGJlZW4gbWFya2VkIGFzIHRydXN0ZWQgKi8KKyAgICAgICAgdmVyaWZ5X2luZm8tPmZsYWdzIHw9IFZSRllfUEFSRU5UX1dBU19PSzsKKyAgICB9CisKKyAgICAvKiB0aGlzIGVuc3VyZXMgZm9yIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlcyB3ZSBoYXZlIGEgdmFsaWQKKyAgICAgICBsb2NhbGx5IGtub3duIGZpbmdlcnByaW50IGFuZCB0aGVuIGFjY2VwdCBpdCAqLworICAgIGlmICghb2sgJiYKKyAgICAgICAgKFg1MDlfVl9FUlJfREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUID09IGVyciB8fAorICAgICAgICAgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFkgPT0gZXJyIHx8CisgICAgICAgICBYNTA5X1ZfRVJSX0NFUlRfVU5UUlVTVEVEID09IGVyciB8fAorICAgICAgICAgWDUwOV9WX0VSUl9VTkFCTEVfVE9fVkVSSUZZX0xFQUZfU0lHTkFUVVJFID09IGVyciB8fAorICAgICAgICAgWDUwOV9WX0VSUl9TRUxGX1NJR05FRF9DRVJUX0lOX0NIQUlOID09IGVycikpIHsKKworICAgICAgICBjZXJ0ID0gbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9SRU1PVEVfUEVFUiwgTlNfQ0VSVEtFWV9GSU5HRVJQUklOVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh2b2lkKilmaW5nZXJwcmludCk7CisgICAgICAgIGlmIChjZXJ0KQorICAgICAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICIgRm91bmQgbG9jYWxseTogJXMvJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0LT5pbmZvLmRpciwgY2VydC0+aW5mby5maWxlbmFtZSkpOworCisKKyAgICAgICAgaWYgKGNlcnQpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAidmVyaWZ5X2NhbGxiYWNrIGNhbGxlZCB3aXRoOiBvaz0lZCBjdHg9JXAgZGVwdGg9JWQgZXJyPSVpOiVzXG4iLCBvaywgY3R4LCBkZXB0aCwgZXJyLCBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnIpKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIiAgYWNjZXB0aW5nIG1hdGNoaW5nIGZwIG9mIHNlbGYtc2lnbmVkIGNlcnRpZmljYXRlIGZvdW5kIGluOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShmaW5nZXJwcmludCk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiICBubyBtYXRjaGluZyBmcCBmb3VuZFxuIikpOworICAgICAgICAgICAgLyogbG9nIHdoZXJlIHdlIGFyZSBhbmQgd2h5IGNhbGxlZCAqLworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRscyB2ZXJpZmljYXRpb24gZmFpbHVyZTogb2s9JWQgY3R4PSVwIGRlcHRoPSVkIGVycj0laTolc1xuIiwgb2ssIGN0eCwgZGVwdGgsIGVyciwgWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSk7CisgICAgICAgICAgICBTTk1QX0ZSRUUoZmluZ2VycHJpbnQpOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAoMCA9PSBkZXB0aCAmJiB2ZXJpZnlfaW5mbyAmJgorICAgICAgICAgICAgKHZlcmlmeV9pbmZvLT5mbGFncyAmIFZSRllfUEFSRU5UX1dBU19PSykpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAidmVyaWZ5X2NhbGxiYWNrIGNhbGxlZCB3aXRoOiBvaz0lZCBjdHg9JXAgZGVwdGg9JWQgZXJyPSVpOiVzXG4iLCBvaywgY3R4LCBkZXB0aCwgZXJyLCBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnIpKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIiAgYSBwYXJlbnQgd2FzIG9rLCBzbyByZXR1cm5pbmcgb2sgZm9yIHRoaXMgY2hpbGQgY2VydGlmaWNhdGVcbiIpKTsKKyAgICAgICAgICAgIFNOTVBfRlJFRShmaW5nZXJwcmludCk7CisgICAgICAgICAgICByZXR1cm4gMTsgLyogd2UnbGwgY2hlY2sgdGhlIGhvc3RuYW1lIGxhdGVyIGF0IHRoaXMgbGV2ZWwgKi8KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICgwID09IG9rKQorICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzIHZlcmlmaWNhdGlvbiBmYWlsdXJlOiBvaz0lZCBjdHg9JXAgZGVwdGg9JWQgZXJyPSVpOiVzXG4iLCBvaywgY3R4LCBkZXB0aCwgZXJyLCBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnIpKTsKKyAgICBlbHNlCisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAidmVyaWZ5X2NhbGxiYWNrIGNhbGxlZCB3aXRoOiBvaz0lZCBjdHg9JXAgZGVwdGg9JWQgZXJyPSVpOiVzXG4iLCBvaywgY3R4LCBkZXB0aCwgZXJyLCBYNTA5X3ZlcmlmeV9jZXJ0X2Vycm9yX3N0cmluZyhlcnIpKSk7CisgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICIgIHJldHVybmluZyB0aGUgcGFzc2VkIGluIHZhbHVlIG9mICVkXG4iLAorICAgICAgICAgICAgICAgIG9rKSk7CisgICAgU05NUF9GUkVFKGZpbmdlcnByaW50KTsKKyAgICByZXR1cm4ob2spOworfQorCisjZGVmaW5lIFZFUklGSUVEX0ZJTkdFUlBSSU5UICAgICAgMAorI2RlZmluZSBOT19GSU5HRVJQUklOVF9BVkFJTEFCTEUgIDEKKyNkZWZpbmUgRkFJTEVEX0ZJTkdFUlBSSU5UX1ZFUklGWSAyCisKK3N0YXRpYyBpbnQKK19uZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X3JlbW90ZV9maW5nZXJwcmludChYNTA5ICpyZW1vdGVfY2VydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCB0cnlfZGVmYXVsdCkgeworCisgICAgY2hhciAgICAgICAgICAgICpmaW5nZXJwcmludDsKKworICAgIGZpbmdlcnByaW50ID0KKyAgICAgICAgbmV0c25tcF9vcGVuc3NsX2NlcnRfZ2V0X2ZpbmdlcnByaW50KHJlbW90ZV9jZXJ0LCAtMSk7CisKKyAgICBpZiAoIWZpbmdlcnByaW50KSB7CisgICAgICAgIC8qIG5vIHBlZXIgY2VydCAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiZmFpbGVkIHRvIGdldCBmaW5nZXJwcmludCBvZiByZW1vdGUgY2VydGlmaWNhdGVcbiIpOworICAgICAgICByZXR1cm4gRkFJTEVEX0ZJTkdFUlBSSU5UX1ZFUklGWTsKKyAgICB9CisKKyAgICBpZiAoIXRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50ICYmIHRsc2RhdGEtPnRoZWlyX2lkZW50aXR5KSB7CisgICAgICAgIC8qIHdlIGhhdmUgYW4gaWRlbnRpdHk7IHRyeSBhbmQgZmluZCBpdCdzIGZpbmdlcnByaW50ICovCisgICAgICAgIG5ldHNubXBfY2VydCAqcGVlcl9jZXJ0OworICAgICAgICBwZWVyX2NlcnQgPQorICAgICAgICAgICAgbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9SRU1PVEVfUEVFUiwgTlNfQ0VSVEtFWV9NVUxUSVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsc2RhdGEtPnRoZWlyX2lkZW50aXR5KTsKKworICAgICAgICBpZiAocGVlcl9jZXJ0KQorICAgICAgICAgICAgdGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChwZWVyX2NlcnQtPm9jZXJ0LCAtMSk7CisgICAgfQorCisgICAgaWYgKCF0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCAmJiB0cnlfZGVmYXVsdCkgeworICAgICAgICAvKiB0cnkgZm9yIHRoZSBkZWZhdWx0IGluc3RlYWQgKi8KKyAgICAgICAgbmV0c25tcF9jZXJ0ICpwZWVyX2NlcnQ7CisgICAgICAgIHBlZXJfY2VydCA9CisgICAgICAgICAgICBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX1JFTU9URV9QRUVSLCBOU19DRVJUS0VZX0RFRkFVTFQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgICAgICBpZiAocGVlcl9jZXJ0KQorICAgICAgICAgICAgdGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9maW5nZXJwcmludChwZWVyX2NlcnQtPm9jZXJ0LCAtMSk7CisgICAgfQorICAgIAorICAgIGlmICh0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCkgeworICAgICAgICBuZXRzbm1wX2ZwX2xvd2VyY2FzZV9hbmRfc3RyaXBfY29sb24odGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQpOworICAgICAgICBpZiAoMCAhPSBzdHJjbXAodGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQsIGZpbmdlcnByaW50KSkgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRoZSBmaW5nZXJwcmludCBmcm9tIHRoZSByZW1vdGUgc2lkZSdzIGNlcnRpZmljYXRlIGRpZG4ndCBtYXRjaCB0aGUgZXhwZWN0ZWRcbiIpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiAgZ290ICVzLCBleHBlY3RlZCAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIGZpbmdlcnByaW50LCB0bHNkYXRhLT50aGVpcl9maW5nZXJwcmludCk7CisgICAgICAgICAgICBmcmVlKGZpbmdlcnByaW50KTsKKyAgICAgICAgICAgIHJldHVybiBGQUlMRURfRklOR0VSUFJJTlRfVkVSSUZZOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsICJObyBmaW5nZXJwcmludCBmb3IgdGhlIHJlbW90ZSBlbnRpdHkgYXZhaWxhYmxlIHRvIHZlcmlmeVxuIikpOworICAgICAgICBmcmVlKGZpbmdlcnByaW50KTsKKyAgICAgICAgcmV0dXJuIE5PX0ZJTkdFUlBSSU5UX0FWQUlMQUJMRTsKKyAgICB9CisKKyAgICBmcmVlKGZpbmdlcnByaW50KTsKKyAgICByZXR1cm4gVkVSSUZJRURfRklOR0VSUFJJTlQ7Cit9CisKKy8qIHRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBjb25uZWN0aW9uIG9uIHRoZSBjbGllbnQgc2lkZSBieSB1cyB0byBjaGVjaworICAgb3RoZXIgYXNwZWN0cyBhYm91dCB0aGUgY29ubmVjdGlvbiAqLworaW50CituZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X3NlcnZlcl9jZXJ0KFNTTCAqc3NsLCBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhKSB7CisgICAgLyogWFhYICovCisgICAgWDUwOSAgICAgICAgICAgICpyZW1vdGVfY2VydDsKKyAgICBjaGFyICAgICAgICAgICAgKmNoZWNrX25hbWU7CisgICAgaW50ICAgICAgICAgICAgICByZXQ7CisgICAgCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHNzbCAhPSBOVUxMLCBTTk1QRVJSX0dFTkVSUik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHRsc2RhdGEgIT0gTlVMTCwgU05NUEVSUl9HRU5FUlIpOworICAgIAorICAgIGlmIChOVUxMID09IChyZW1vdGVfY2VydCA9IFNTTF9nZXRfcGVlcl9jZXJ0aWZpY2F0ZShzc2wpKSkgeworICAgICAgICAvKiBubyBwZWVyIGNlcnQgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInRsc194NTA5OnZlcmlmeSIsCisgICAgICAgICAgICAgICAgICAgICJyZW1vdGUgY29ubmVjdGlvbiBwcm92aWRlZCBubyBjZXJ0aWZpY2F0ZSAoeWV0KVxuIikpOworICAgICAgICByZXR1cm4gU05NUEVSUl9UTFNfTk9fQ0VSVElGSUNBVEU7CisgICAgfQorCisgICAgLyogbWFrZSBzdXJlIHRoYXQgdGhlIGZpbmdlcnByaW50IG1hdGNoZXMgKi8KKyAgICByZXQgPSBfbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9yZW1vdGVfZmluZ2VycHJpbnQocmVtb3RlX2NlcnQsIHRsc2RhdGEsIDEpOworICAgIHN3aXRjaChyZXQpIHsKKyAgICBjYXNlIFZFUklGSUVEX0ZJTkdFUlBSSU5UOgorICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworCisgICAgY2FzZSBGQUlMRURfRklOR0VSUFJJTlRfVkVSSUZZOgorICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisKKyAgICBjYXNlIE5PX0ZJTkdFUlBSSU5UX0FWQUlMQUJMRToKKyAgICAgICAgaWYgKHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lICYmIHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lWzBdICE9ICdcMCcpIHsKKyAgICAgICAgICAgIEdFTkVSQUxfTkFNRVMgICAgICAqb25hbWVzOworICAgICAgICAgICAgY29uc3QgR0VORVJBTF9OQU1FICpvbmFtZSA9IE5VTEw7CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIGksIGo7CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgIGNvdW50OworICAgICAgICAgICAgY2hhciAgICAgICAgICAgICAgICBidWZbU1BSSU5UX01BWF9MRU5dOworICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICBpc193aWxkY2FyZGVkID0gMDsKKyAgICAgICAgICAgIGNoYXIgICAgICAgICAgICAgICAqY29tcGFyZV90bzsKKworICAgICAgICAgICAgLyogc2VlIGlmIHRoZSByZXF1ZXN0ZWQgaG9zdG5hbWUgaGFzIGEgd2lsZGNhcmQgcHJlZml4ICovCisgICAgICAgICAgICBpZiAoc3RybmNtcCh0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSwgIiouIiwgMikgPT0gMCkgeworICAgICAgICAgICAgICAgIGlzX3dpbGRjYXJkZWQgPSAxOworICAgICAgICAgICAgICAgIGNvbXBhcmVfdG8gPSB0bHNkYXRhLT50aGVpcl9ob3N0bmFtZSArIDI7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGNvbXBhcmVfdG8gPSB0bHNkYXRhLT50aGVpcl9ob3N0bmFtZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogaWYgdGhlIGhvc3RuYW1lIHdlIHdlcmUgZXhwZWN0aW5nIHRvIHRhbGsgdG8gbWF0Y2hlcworICAgICAgICAgICAgICAgdGhlIGNlcnQsIHRoZW4gd2UgY2FuIGFjY2VwdCB0aGlzIGNvbm5lY3Rpb24uICovCisKKyAgICAgICAgICAgIC8qIGNoZWNrIGFnYWluc3QgdGhlIEROUyBzdWJqZWN0QWx0TmFtZSAqLworICAgICAgICAgICAgb25hbWVzID0gKEdFTkVSQUxfTkFNRVMgKilYNTA5X2dldF9leHRfZDJpKHJlbW90ZV9jZXJ0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5JRF9zdWJqZWN0X2FsdF9uYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwgKTsKKyAgICAgICAgICAgIGlmIChOVUxMICE9IG9uYW1lcykgeworICAgICAgICAgICAgICAgIGNvdW50ID0gc2tfR0VORVJBTF9OQU1FX251bShvbmFtZXMpOworCisgICAgICAgICAgICAgICAgZm9yIChpPTAgOyBpIDxjb3VudDsgKytpKSAgeworICAgICAgICAgICAgICAgICAgICBvbmFtZSA9IHNrX0dFTkVSQUxfTkFNRV92YWx1ZShvbmFtZXMsIGkpOworICAgICAgICAgICAgICAgICAgICBpZiAoR0VOX0ROUyA9PSBvbmFtZS0+dHlwZSkgeworCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBnZXQgdGhlIHZhbHVlICovCisgICAgICAgICAgICAgICAgICAgICAgICBBU04xX1NUUklOR190b19VVEY4KCh1bnNpZ25lZCBjaGFyKiopJmNoZWNrX25hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uYW1lLT5kLmlhNSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIGNvbnZlcnQgdG8gbG93ZXJjYXNlIGZvciBjb21wYXJpc29ucyAqLworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChqID0gMCA7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICpjaGVja19uYW1lICYmIGogPCBzaXplb2YoYnVmKS0xOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICArK2NoZWNrX25hbWUsICsraiApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaXNhc2NpaSgqY2hlY2tfbmFtZSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZltqXSA9IHRvbG93ZXIoMHhGRiAmICpjaGVja19uYW1lKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqIDwgc2l6ZW9mKGJ1ZikpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmW2pdID0gJ1wwJzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX25hbWUgPSBidWY7CisgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpc193aWxkY2FyZGVkKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2UgKm9ubHkqIGFsbG93IHBhc3NpbmcgdGlsbCB0aGUgZmlyc3QgJy4nICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogaWUgKi5leGFtcGxlLmNvbSBjYW4ndCBtYXRjaCBhLmIuZXhhbXBsZS5jb20gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja19uYW1lID0gc3RyY2hyKGNoZWNrX25hbWUsICcuJykgKyAxOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgImNoZWNraW5nIHN1YmplY3RBbHRuYW1lIG9mIGRuczolc1xuIiwgY2hlY2tfbmFtZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmNtcChjb21wYXJlX3RvLCBjaGVja19uYW1lKSA9PSAwKSB7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIlN1Y2Nlc3NmdWwgbWF0Y2ggb24gYSBzdWJqZWN0QWx0bmFtZSBvZiBkbnM6JXNcbiIsIGNoZWNrX25hbWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvKiBjaGVjayB0aGUgY29tbW9uIG5hbWUgZm9yIGEgbWF0Y2ggKi8KKyAgICAgICAgICAgIGNoZWNrX25hbWUgPQorICAgICAgICAgICAgICAgIG5ldHNubXBfb3BlbnNzbF9jZXJ0X2dldF9jb21tb25OYW1lKHJlbW90ZV9jZXJ0LCBOVUxMLCBOVUxMKTsKKworICAgICAgICAgICAgaWYgKGlzX3dpbGRjYXJkZWQpIHsKKyAgICAgICAgICAgICAgICAvKiB3ZSAqb25seSogYWxsb3cgcGFzc2luZyB0aWxsIHRoZSBmaXJzdCAnLicgKi8KKyAgICAgICAgICAgICAgICAvKiBpZSAqLmV4YW1wbGUuY29tIGNhbid0IG1hdGNoIGEuYi5leGFtcGxlLmNvbSAqLworICAgICAgICAgICAgICAgIGNoZWNrX25hbWUgPSBzdHJjaHIoY2hlY2tfbmFtZSwgJy4nKSArIDE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHJjbXAoY29tcGFyZV90bywgY2hlY2tfbmFtZSkgPT0gMCkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAiU3VjY2Vzc2Z1bCBtYXRjaCBvbiBhIGNvbW1vbiBuYW1lIG9mICVzXG4iLCBjaGVja19uYW1lKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIk5vIG1hdGNoaW5nIG5hbWVzIGluIHRoZSBjZXJ0aWZpY2F0ZSB0byBtYXRjaCB0aGUgZXhwZWN0ZWQgJXNcbiIsIHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgICAgICB9CisgICAgICAgIC8qIFhYWDogY2hlY2sgZm9yIGhvc3RuYW1lIG1hdGNoIGluc3RlYWQgKi8KKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkNhbiBub3QgdmVyaWZ5IGEgcmVtb3RlIHNlcnZlciBpZGVudGl0eSB3aXRob3V0IGNvbmZpZ3VyYXRpb25cbiIpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAic2hvdWxkbid0IGdldCBoZXJlXG4iKSk7CisgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworfQorCisvKiB0aGlzIGlzIGNhbGxlZCBhZnRlciB0aGUgY29ubmVjdGlvbiBvbiB0aGUgc2VydmVyIHNpZGUgYnkgdXMgdG8gY2hlY2sKKyAgIHRoZSB2YWxpZGl0eSBvZiB0aGUgY2xpZW50J3MgY2VydGlmaWNhdGUgKi8KK2ludAorbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9jbGllbnRfY2VydChTU0wgKnNzbCwgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YSkgeworICAgIC8qIFhYWCAqLworICAgIFg1MDkgICAgICAgICAgICAqcmVtb3RlX2NlcnQ7CisgICAgaW50IHJldDsKKworICAgIC8qIFJGQzU5NTM6IHNlY3Rpb24gNS4zLjIsIHBhcmFncmFwaCAxOgorICAgICAgIEEgKEQpVExTIHNlcnZlciBzaG91bGQgYWNjZXB0IG5ldyBzZXNzaW9uIGNvbm5lY3Rpb25zIGZyb20gYW55IGNsaWVudAorICAgICAgIHRoYXQgaXQgaXMgYWJsZSB0byB2ZXJpZnkgdGhlIGNsaWVudCdzIGNyZWRlbnRpYWxzIGZvci4gIFRoaXMgaXMgZG9uZQorICAgICAgIGJ5IGF1dGhlbnRpY2F0aW5nIHRoZSBjbGllbnQncyBwcmVzZW50ZWQgY2VydGlmaWNhdGUgdGhyb3VnaCBhCisgICAgICAgY2VydGlmaWNhdGUgcGF0aCB2YWxpZGF0aW9uIHByb2Nlc3MgKGUuZy4gIFtSRkM1MjgwXSkgb3IgdGhyb3VnaAorICAgICAgIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbiB1c2luZyBmaW5nZXJwcmludHMgY29uZmlndXJlZCBpbgorICAgICAgIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZS4gIEFmdGVyd2FyZCB0aGUgc2VydmVyIHdpbGwgZGV0ZXJtaW5lIHRoZQorICAgICAgIGlkZW50aXR5IG9mIHRoZSByZW1vdGUgZW50aXR5IHVzaW5nIHRoZSBmb2xsb3dpbmcgcHJvY2VkdXJlcy4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICsgcGF0aCB2YWxpZGF0aW9uIGlzIHRha2VuIGNhcmUgb2YgZHVyaW5nIHRoZSBvcGVuc3NsIHZlcmlmeQorICAgICAgICAgcm91dGluZXMsIG91ciBwYXJ0IG9mIHdoaWNoIGlzIGhhbmxkZWQgaW4gdmVyaWZ5X2NhbGxiYWNrCisgICAgICAgICBhYm92ZS4KKyAgICAgICArIGZpbmdlcnByaW50IHZlcmlmaWNhdGlvbiBoYXBwZW5zIGJlbG93LgorICAgICovCisgICAgaWYgKE5VTEwgPT0gKHJlbW90ZV9jZXJ0ID0gU1NMX2dldF9wZWVyX2NlcnRpZmljYXRlKHNzbCkpKSB7CisgICAgICAgIC8qIG5vIHBlZXIgY2VydCAqLworICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwKKyAgICAgICAgICAgICAgICAgICAgInJlbW90ZSBjb25uZWN0aW9uIHByb3ZpZGVkIG5vIGNlcnRpZmljYXRlICh5ZXQpXG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1RMU19OT19DRVJUSUZJQ0FURTsKKyAgICB9CisKKyAgICAvKiB3ZSBkb24ndCBmb3JjZSBhIGtub3duIHJlbW90ZSBmaW5nZXJwcmludCBmb3IgYSBjbGllbnQgc2luY2Ugd2UKKyAgICAgICB3aWxsIGFjY2VwdCBhbnkgY2VydGlmaWNhdGUgd2Uga25vdyBhYm91dCAoYW5kIGxhdGVyIGRlcml2ZSB0aGUKKyAgICAgICBzZWN1cml0eU5hbWUgZnJvbSBpdCBhbmQgYXBwbHkgYWNjZXNzIGNvbnRyb2wpICovCisgICAgcmV0ID0gX25ldHNubXBfdGxzYmFzZV92ZXJpZnlfcmVtb3RlX2ZpbmdlcnByaW50KHJlbW90ZV9jZXJ0LCB0bHNkYXRhLCAwKTsKKyAgICBzd2l0Y2gocmV0KSB7CisgICAgY2FzZSBGQUlMRURfRklOR0VSUFJJTlRfVkVSSUZZOgorICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgImZhaWxlZCB0byB2ZXJpZnkgYSBjbGllbnQgZmluZ2VycHJpbnRcbiIpKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworCisgICAgY2FzZSBOT19GSU5HRVJQUklOVF9BVkFJTEFCTEU6CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHNfeDUwOTp2ZXJpZnkiLCAibm8ga25vd24gZmluZ2VycHJpbnQgYXZhaWxhYmxlIChub3QgYSBmYWlsdXJlIGNhc2UpXG4iKSk7CisgICAgICAgIHJldHVybiBTTk1QRVJSX1NVQ0NFU1M7CisKKyAgICBjYXNlIFZFUklGSUVEX0ZJTkdFUlBSSU5UOgorICAgICAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgIlZlcmlmaWVkIGNsaWVudCBmaW5nZXJwcmludFxuIikpOworICAgICAgICB0bHNkYXRhLT5mbGFncyB8PSBORVRTTk1QX1RMU0JBU0VfQ0VSVF9GUF9WRVJJRklFRDsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKKyAgICB9CisKKyAgICBERUJVR01TR1RMKCgidGxzX3g1MDk6dmVyaWZ5IiwgInNob3VsZG4ndCBnZXQgaGVyZVxuIikpOworICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKK30KKworLyogdGhpcyBpcyBjYWxsZWQgYWZ0ZXIgdGhlIGNvbm5lY3Rpb24gb24gdGhlIHNlcnZlciBzaWRlIGJ5IHVzIHRvCisgICBjaGVjayBvdGhlciBhc3BlY3RzIGFib3V0IHRoZSBjb25uZWN0aW9uIGFuZCBvYnRhaW4gdGhlCisgICBzZWN1cml0eU5hbWUgZnJvbSB0aGUgcmVtb3RlIGNlcnRpZmljYXRlLiAqLworaW50CituZXRzbm1wX3Rsc2Jhc2VfZXh0cmFjdF9zZWN1cml0eV9uYW1lKFNTTCAqc3NsLCBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhKSB7CisgICAgbmV0c25tcF9jb250YWluZXIgICpjaGFpbl9tYXBzOworICAgIG5ldHNubXBfY2VydF9tYXAgICAqY2VydF9tYXAsICpwZWVyX2NlcnQ7CisgICAgbmV0c25tcF9pdGVyYXRvciAgKml0cjsKKyAgICBpbnQgICAgICAgICAgICAgICAgIHJjOworCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHNzbCAhPSBOVUxMLCBTTk1QRVJSX0dFTkVSUik7CisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHRsc2RhdGEgIT0gTlVMTCwgU05NUEVSUl9HRU5FUlIpOworCisgICAgaWYgKE5VTEwgPT0gKGNoYWluX21hcHMgPSBuZXRzbm1wX29wZW5zc2xfZ2V0X2NlcnRfY2hhaW4oc3NsKSkpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICAvKgorICAgICAqIG1hcCBmaW5nZXJwcmludHMgdG8gbWFwcGluZyBlbnRyaWVzCisgICAgICovCisgICAgcmMgPSBuZXRzbm1wX2NlcnRfZ2V0X3NlY25hbWVfbWFwcyhjaGFpbl9tYXBzKTsKKyAgICBpZiAoKC0xID09IHJjKSB8fCAoQ09OVEFJTkVSX1NJWkUoY2hhaW5fbWFwcykgPT0gMCkpIHsKKyAgICAgICAgbmV0c25tcF9jZXJ0X21hcF9jb250YWluZXJfZnJlZShjaGFpbl9tYXBzKTsKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworICAgIH0KKworICAgIC8qCisgICAgICogY2hhbmdlIGNvbnRhaW5lciB0byBzb3J0ZWQgKGJ5IGNsZWFyaW5nIHVuc29ydGVkIG9wdGlvbiksIHRoZW4KKyAgICAgKiBpdGVyYXRlIG92ZXIgaXQgdW50aWwgd2UgZmluZCBhIG1hcCB0aGF0IHJldHVybnMgYSBzZWNuYW1lLgorICAgICAqLworICAgIENPTlRBSU5FUl9TRVRfT1BUSU9OUyhjaGFpbl9tYXBzLCAwLCByYyk7CisgICAgaXRyID0gQ09OVEFJTkVSX0lURVJBVE9SKGNoYWluX21hcHMpOworICAgIGlmIChOVUxMID09IGl0cikgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiY291bGQgbm90IGdldCBpdGVyYXRvciBmb3Igc2VjbmFtZSBmaW5nZXJwcmludHNcbiIpOworICAgICAgICBuZXRzbm1wX2NlcnRfbWFwX2NvbnRhaW5lcl9mcmVlKGNoYWluX21hcHMpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorICAgIHBlZXJfY2VydCA9IGNlcnRfbWFwID0gSVRFUkFUT1JfRklSU1QoaXRyKTsKKyAgICBmb3IoIDsgIXRsc2RhdGEtPnNlY3VyaXR5TmFtZSAmJiBjZXJ0X21hcDsgY2VydF9tYXAgPSBJVEVSQVRPUl9ORVhUKGl0cikpCisgICAgICAgIHRsc2RhdGEtPnNlY3VyaXR5TmFtZSA9CisgICAgICAgICAgICBuZXRzbm1wX29wZW5zc2xfZXh0cmFjdF9zZWNuYW1lKGNlcnRfbWFwLCBwZWVyX2NlcnQpOworICAgIElURVJBVE9SX1JFTEVBU0UoaXRyKTsKKworICAgIG5ldHNubXBfY2VydF9tYXBfY29udGFpbmVyX2ZyZWUoY2hhaW5fbWFwcyk7CisgICAgICAgCisgICAgcmV0dXJuICh0bHNkYXRhLT5zZWN1cml0eU5hbWUgPyBTTk1QRVJSX1NVQ0NFU1MgOiBTTk1QRVJSX0dFTkVSUik7Cit9CisKK2ludAorX3RydXN0X3RoaXNfY2VydChTU0xfQ1RYICp0aGVfY3R4LCBjaGFyICpjZXJ0c3BlYykgeworICAgIG5ldHNubXBfY2VydCAqdHJ1c3RjZXJ0OworCisgICAgREVCVUdNU0dUTCgoInNzbGN0eF9jbGllbnQiLCAiVHJ5aW5nIHRvIGxvYWQgYSB0cnVzdGVkIGNlcnRpZmljYXRlOiAlc1xuIiwKKyAgICAgICAgICAgICAgICBjZXJ0c3BlYykpOworCisgICAgLyogbG9hZCB0aGlzIGlkZW50aWZpZXIgaW50byB0aGUgdHJ1c3QgY2hhaW4gKi8KKyAgICB0cnVzdGNlcnQgPSBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX0NBLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TX0NFUlRLRVlfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2VydHNwZWMpOworICAgIGlmICghdHJ1c3RjZXJ0KQorICAgICAgICB0cnVzdGNlcnQgPSBuZXRzbm1wX2NlcnRfZmluZChOU19DRVJUX1JFTU9URV9QRUVSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOU19DRVJUS0VZX01VTFRJUExFLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjZXJ0c3BlYyk7CisgICAgaWYgKCF0cnVzdGNlcnQpCisgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIGZpbmQgcmVxdWVzdGVkIGNlcnRpZmljYXRlIHRvIHRydXN0Iik7CisgICAgICAgIAorICAgIC8qIEFkZCB0aGUgY2VydGlmaWNhdGUgdG8gdGhlIGNvbnRleHQgKi8KKyAgICBpZiAobmV0c25tcF9jZXJ0X3RydXN0X2NhKHRoZV9jdHgsIHRydXN0Y2VydCkgIT0gU05NUEVSUl9TVUNDRVNTKQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBsb2FkIHRydXN0IGNlcnRpZmljYXRlIik7CisKKyAgICByZXR1cm4gMTsKK30KKwordm9pZAorX2xvYWRfdHJ1c3RlZF9jZXJ0cyhTU0xfQ1RYICp0aGVfY3R4KSB7CisgICAgbmV0c25tcF9jb250YWluZXIgKnRydXN0ZWRfY2VydHMgPSBOVUxMOworICAgIG5ldHNubXBfaXRlcmF0b3IgICp0cnVzdGVkX2NlcnRfaXRlcmF0b3IgPSBOVUxMOworICAgIGNoYXIgKmZpbmdlcnByaW50OworCisgICAgdHJ1c3RlZF9jZXJ0cyA9IG5ldHNubXBfY2VydF9nZXRfdHJ1c3RsaXN0KCk7CisgICAgdHJ1c3RlZF9jZXJ0X2l0ZXJhdG9yID0gQ09OVEFJTkVSX0lURVJBVE9SKHRydXN0ZWRfY2VydHMpOworICAgIGlmICh0cnVzdGVkX2NlcnRfaXRlcmF0b3IpIHsKKyAgICAgICAgZm9yIChmaW5nZXJwcmludCA9IChjaGFyICopIElURVJBVE9SX0ZJUlNUKHRydXN0ZWRfY2VydF9pdGVyYXRvcik7CisgICAgICAgICAgICAgZmluZ2VycHJpbnQ7IGZpbmdlcnByaW50ID0gSVRFUkFUT1JfTkVYVCh0cnVzdGVkX2NlcnRfaXRlcmF0b3IpKSB7CisgICAgICAgICAgICBpZiAoIV90cnVzdF90aGlzX2NlcnQodGhlX2N0eCwgZmluZ2VycHJpbnQpKQorICAgICAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gbG9hZCB0cnVzdCBjZXJ0OiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBmaW5nZXJwcmludCk7CisgICAgICAgIH0KKyAgICAgICAgSVRFUkFUT1JfUkVMRUFTRSh0cnVzdGVkX2NlcnRfaXRlcmF0b3IpOworICAgIH0KK30gICAgCisKK1NTTF9DVFggKgorX3NzbGN0eF9jb21tb25fc2V0dXAoU1NMX0NUWCAqdGhlX2N0eCwgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzYmFzZSkgeworICAgIGNoYXIgICAgICAgICAqY3JsRmlsZTsKKyAgICBjaGFyICAgICAgICAgKmNpcGhlckxpc3Q7CisgICAgWDUwOV9MT09LVVAgICpsb29rdXA7CisgICAgWDUwOV9TVE9SRSAgICpjZXJ0X3N0b3JlID0gTlVMTDsKKworICAgIF9sb2FkX3RydXN0ZWRfY2VydHModGhlX2N0eCk7CisKKyAgICAvKiBhZGQgaW4gdGhlIENSTHMgaWYgYXZhaWxhYmxlICovCisKKyAgICBjcmxGaWxlID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1g1MDlfQ1JMX0ZJTEUpOworICAgIGlmIChOVUxMICE9IGNybEZpbGUpIHsKKyAgICAgICAgY2VydF9zdG9yZSA9IFNTTF9DVFhfZ2V0X2NlcnRfc3RvcmUodGhlX2N0eCk7CisgICAgICAgIERFQlVHTVNHVEwoKCJzc2xjdHhfY2xpZW50IiwgImxvYWRpbmcgQ1JMOiAlc1xuIiwgY3JsRmlsZSkpOworICAgICAgICBpZiAoIWNlcnRfc3RvcmUpCisgICAgICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBmaW5kIGNlcnRpZmljYXRlIHN0b3JlIik7CisgICAgICAgIGlmICghKGxvb2t1cCA9IFg1MDlfU1RPUkVfYWRkX2xvb2t1cChjZXJ0X3N0b3JlLCBYNTA5X0xPT0tVUF9maWxlKCkpKSkKKyAgICAgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIGNyZWF0ZSBhIGxvb2t1cCBmdW5jdGlvbiBmb3IgdGhlIENSTCBmaWxlIik7CisgICAgICAgIGlmIChYNTA5X2xvYWRfY3JsX2ZpbGUobG9va3VwLCBjcmxGaWxlLCBYNTA5X0ZJTEVUWVBFX1BFTSkgIT0gMSkKKyAgICAgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIGxvYWQgdGhlIENSTCBmaWxlIik7CisgICAgICAgIC8qIHRlbGwgb3BlbnNzbCB0byBjaGVjayBDUkxzICovCisgICAgICAgIFg1MDlfU1RPUkVfc2V0X2ZsYWdzKGNlcnRfc3RvcmUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFg1MDlfVl9GTEFHX0NSTF9DSEVDSyB8IFg1MDlfVl9GTEFHX0NSTF9DSEVDS19BTEwpOworICAgIH0KKworICAgIGNpcGhlckxpc3QgPSBuZXRzbm1wX2RzX2dldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJfVExTX0FMR09SSVRNUyk7CisgICAgaWYgKE5VTEwgIT0gY2lwaGVyTGlzdCkgeworICAgICAgICBpZiAoU1NMX0NUWF9zZXRfY2lwaGVyX2xpc3QodGhlX2N0eCwgY2lwaGVyTGlzdCkgIT0gMSkKKyAgICAgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIHNldCB0aGUgY2lwaGVyIGxpc3QgdG8gdGhlIHJlcXVlc3RlZCB2YWx1ZSIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfSU5GTywic2V0IFNTTCBjaXBoZXIgbGlzdCB0byAnJXMnXG4iLCBjaXBoZXJMaXN0KTsKKyAgICB9CisgICAgcmV0dXJuIHRoZV9jdHg7Cit9CisKK1NTTF9DVFggKgorc3NsY3R4X2NsaWVudF9zZXR1cChjb25zdCBTU0xfTUVUSE9EICptZXRob2QsIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2Jhc2UpIHsKKyAgICBuZXRzbm1wX2NlcnQgKmlkX2NlcnQsICpwZWVyX2NlcnQ7CisgICAgU1NMX0NUWCAgICAgICp0aGVfY3R4OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU2V0IHVwIHRoZSBjbGllbnQgY29udGV4dAorICAgICAqLworICAgIHRoZV9jdHggPSBTU0xfQ1RYX25ldyhORVRTTk1QX1JFTU9WRV9DT05TVChTU0xfTUVUSE9EICosIG1ldGhvZCkpOworICAgIGlmICghdGhlX2N0eCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiYWNrOiAlcFxuIiwgdGhlX2N0eCk7CisgICAgICAgIExPR0FORERJRSgiY2FuJ3QgY3JlYXRlIGEgbmV3IGNvbnRleHQiKTsKKyAgICB9CisgICAgU1NMX0NUWF9zZXRfcmVhZF9haGVhZCAodGhlX2N0eCwgMSk7IC8qIFJlcXVpcmVkIGZvciBEVExTICovCisgICAgICAgIAorICAgIFNTTF9DVFhfc2V0X3ZlcmlmeSh0aGVfY3R4LAorICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX1BFRVJ8CisgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfRkFJTF9JRl9OT19QRUVSX0NFUlR8CisgICAgICAgICAgICAgICAgICAgICAgIFNTTF9WRVJJRllfQ0xJRU5UX09OQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICZ2ZXJpZnlfY2FsbGJhY2spOworCisgICAgaWYgKHRsc2Jhc2UtPm91cl9pZGVudGl0eSkgeworICAgICAgICBERUJVR01TR1RMKCgic3NsY3R4X2NsaWVudCIsICJsb29raW5nIGZvciBsb2NhbCBpZDogJXNcbiIsIHRsc2Jhc2UtPm91cl9pZGVudGl0eSkpOworICAgICAgICBpZF9jZXJ0ID0gbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9JREVOVElUWSwgTlNfQ0VSVEtFWV9NVUxUSVBMRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsc2Jhc2UtPm91cl9pZGVudGl0eSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgREVCVUdNU0dUTCgoInNzbGN0eF9jbGllbnQiLCAibG9va2luZyBmb3IgZGVmYXVsdCBsb2NhbCBpZDogJXNcbiIsIHRsc2Jhc2UtPm91cl9pZGVudGl0eSkpOworICAgICAgICBpZF9jZXJ0ID0gbmV0c25tcF9jZXJ0X2ZpbmQoTlNfQ0VSVF9JREVOVElUWSwgTlNfQ0VSVEtFWV9ERUZBVUxULCBOVUxMKTsKKyAgICB9CisKKyAgICBpZiAoIWlkX2NlcnQpCisgICAgICAgIExPR0FORERJRSAoImVycm9yIGZpbmRpbmcgY2xpZW50IGlkZW50aXR5IGtleXMiKTsKKworICAgIGlmICghaWRfY2VydC0+a2V5IHx8ICFpZF9jZXJ0LT5rZXktPm9rZXkpCisgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIGxvYWQgcHJpdmF0ZSBrZXkiKTsKKworICAgIERFQlVHTVNHVEwoKCJzc2xjdHhfY2xpZW50IiwgInVzaW5nIHB1YmxpYyBrZXk6ICVzXG4iLAorICAgICAgICAgICAgICAgIGlkX2NlcnQtPmluZm8uZmlsZW5hbWUpKTsKKyAgICBERUJVR01TR1RMKCgic3NsY3R4X2NsaWVudCIsICJ1c2luZyBwcml2YXRlIGtleTogJXNcbiIsCisgICAgICAgICAgICAgICAgaWRfY2VydC0+a2V5LT5pbmZvLmZpbGVuYW1lKSk7CisKKyAgICBpZiAoU1NMX0NUWF91c2VfY2VydGlmaWNhdGUodGhlX2N0eCwgaWRfY2VydC0+b2NlcnQpIDw9IDApCisgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIHNldCB0aGUgY2VydGlmaWNhdGUgdG8gdXNlIik7CisKKyAgICBpZiAoU1NMX0NUWF91c2VfUHJpdmF0ZUtleSh0aGVfY3R4LCBpZF9jZXJ0LT5rZXktPm9rZXkpIDw9IDApCisgICAgICAgIExPR0FORERJRSgiZmFpbGVkIHRvIHNldCB0aGUgcHJpdmF0ZSBrZXkgdG8gdXNlIik7CisKKyAgICBpZiAoIVNTTF9DVFhfY2hlY2tfcHJpdmF0ZV9rZXkodGhlX2N0eCkpCisgICAgICAgIExPR0FORERJRSgicHVibGljIGFuZCBwcml2YXRlIGtleXMgaW5jb21wYXRpYmxlIik7CisKKyAgICBpZiAodGxzYmFzZS0+dGhlaXJfaWRlbnRpdHkpCisgICAgICAgIHBlZXJfY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfUkVNT1RFX1BFRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5TX0NFUlRLRVlfTVVMVElQTEUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsc2Jhc2UtPnRoZWlyX2lkZW50aXR5KTsKKyAgICBlbHNlCisgICAgICAgIHBlZXJfY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfUkVNT1RFX1BFRVIsIE5TX0NFUlRLRVlfREVGQVVMVCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCk7CisgICAgaWYgKHBlZXJfY2VydCkgeworICAgICAgICBERUJVR01TR1RMKCgic3NsY3R4X2NsaWVudCIsICJzZXJ2ZXIncyBleHBlY3RlZCBwdWJsaWMga2V5OiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgcGVlcl9jZXJ0ID8gcGVlcl9jZXJ0LT5pbmZvLmZpbGVuYW1lIDogIm5vbmUiKSk7CisKKyAgICAgICAgLyogVHJ1c3QgdGhlIGV4cGVjdGVkIGNlcnRpZmljYXRlICovCisgICAgICAgIGlmIChuZXRzbm1wX2NlcnRfdHJ1c3RfY2EodGhlX2N0eCwgcGVlcl9jZXJ0KSAhPSBTTk1QRVJSX1NVQ0NFU1MpCisgICAgICAgICAgICBMT0dBTkRESUUgKCJmYWlsZWQgdG8gc2V0IHZlcmlmeSBwYXRocyIpOworICAgIH0KKworICAgIC8qIHRydXN0IGEgY2VydGlmaWNhdGUgKHBvc3NpYmx5IGEgQ0EpIGFzcGVjaWZpY2FsbHkgcGFzc2VkIGluICovCisgICAgaWYgKHRsc2Jhc2UtPnRydXN0X2NlcnQpIHsKKyAgICAgICAgaWYgKCFfdHJ1c3RfdGhpc19jZXJ0KHRoZV9jdHgsIHRsc2Jhc2UtPnRydXN0X2NlcnQpKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIF9zc2xjdHhfY29tbW9uX3NldHVwKHRoZV9jdHgsIHRsc2Jhc2UpOworfQorCitTU0xfQ1RYICoKK3NzbGN0eF9zZXJ2ZXJfc2V0dXAoY29uc3QgU1NMX01FVEhPRCAqbWV0aG9kKSB7CisgICAgbmV0c25tcF9jZXJ0ICppZF9jZXJ0OworCisgICAgLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICogU2V0IHVwIHRoZSBzZXJ2ZXIgY29udGV4dAorICAgICAqLworICAgIC8qIHNldHRpbmcgdXAgZm9yIHNzbCAqLworICAgIFNTTF9DVFggKnRoZV9jdHggPSBTU0xfQ1RYX25ldyhORVRTTk1QX1JFTU9WRV9DT05TVChTU0xfTUVUSE9EICosIG1ldGhvZCkpOworICAgIGlmICghdGhlX2N0eCkgeworICAgICAgICBMT0dBTkRESUUoImNhbid0IGNyZWF0ZSBhIG5ldyBjb250ZXh0Iik7CisgICAgfQorCisgICAgaWRfY2VydCA9IG5ldHNubXBfY2VydF9maW5kKE5TX0NFUlRfSURFTlRJVFksIE5TX0NFUlRLRVlfREVGQVVMVCwgTlVMTCk7CisgICAgaWYgKCFpZF9jZXJ0KQorICAgICAgICBMT0dBTkRESUUgKCJlcnJvciBmaW5kaW5nIHNlcnZlciBpZGVudGl0eSBrZXlzIik7CisKKyAgICBpZiAoIWlkX2NlcnQtPmtleSB8fCAhaWRfY2VydC0+a2V5LT5va2V5KQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBsb2FkIHByaXZhdGUga2V5Iik7CisKKyAgICBERUJVR01TR1RMKCgic3NsY3R4X3NlcnZlciIsICJ1c2luZyBwdWJsaWMga2V5OiAlc1xuIiwKKyAgICAgICAgICAgICAgICBpZF9jZXJ0LT5pbmZvLmZpbGVuYW1lKSk7CisgICAgREVCVUdNU0dUTCgoInNzbGN0eF9zZXJ2ZXIiLCAidXNpbmcgcHJpdmF0ZSBrZXk6ICVzXG4iLAorICAgICAgICAgICAgICAgIGlkX2NlcnQtPmtleS0+aW5mby5maWxlbmFtZSkpOworCisgICAgaWYgKFNTTF9DVFhfdXNlX2NlcnRpZmljYXRlKHRoZV9jdHgsIGlkX2NlcnQtPm9jZXJ0KSA8PSAwKQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBzZXQgdGhlIGNlcnRpZmljYXRlIHRvIHVzZSIpOworCisgICAgaWYgKFNTTF9DVFhfdXNlX1ByaXZhdGVLZXkodGhlX2N0eCwgaWRfY2VydC0+a2V5LT5va2V5KSA8PSAwKQorICAgICAgICBMT0dBTkRESUUoImZhaWxlZCB0byBzZXQgdGhlIHByaXZhdGUga2V5IHRvIHVzZSIpOworCisgICAgaWYgKCFTU0xfQ1RYX2NoZWNrX3ByaXZhdGVfa2V5KHRoZV9jdHgpKQorICAgICAgICBMT0dBTkRESUUoInB1YmxpYyBhbmQgcHJpdmF0ZSBrZXlzIGluY29tcGF0aWJsZSIpOworCisgICAgU1NMX0NUWF9zZXRfcmVhZF9haGVhZCh0aGVfY3R4LCAxKTsgLyogWFhYOiBEVExTIG9ubHk/ICovCisKKyAgICBTU0xfQ1RYX3NldF92ZXJpZnkodGhlX2N0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgU1NMX1ZFUklGWV9QRUVSfAorICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX0ZBSUxfSUZfTk9fUEVFUl9DRVJUfAorICAgICAgICAgICAgICAgICAgICAgICBTU0xfVkVSSUZZX0NMSUVOVF9PTkNFLAorICAgICAgICAgICAgICAgICAgICAgICAmdmVyaWZ5X2NhbGxiYWNrKTsKKworICAgIHJldHVybiBfc3NsY3R4X2NvbW1vbl9zZXR1cCh0aGVfY3R4LCBOVUxMKTsKK30KKworaW50CituZXRzbm1wX3Rsc2Jhc2VfY29uZmlnKHN0cnVjdCBuZXRzbm1wX3RyYW5zcG9ydF9zICp0LCBjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqdmFsdWUpIHsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworCisgICAgbmV0c25tcF9hc3NlcnRfb3JfcmV0dXJuKHQgIT0gTlVMTCwgLTEpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih0LT5kYXRhICE9IE5VTEwsIC0xKTsKKworICAgIHRsc2RhdGEgPSB0LT5kYXRhOworCisgICAgaWYgKChzdHJjbXAodG9rZW4sICJsb2NhbENlcnQiKSA9PSAwKSB8fAorICAgICAgICAoc3RyY21wKHRva2VuLCAib3VyX2lkZW50aXR5IikgPT0gMCkpIHsKKyAgICAgICAgU05NUF9GUkVFKHRsc2RhdGEtPm91cl9pZGVudGl0eSk7CisgICAgICAgIHRsc2RhdGEtPm91cl9pZGVudGl0eSA9IHN0cmR1cCh2YWx1ZSk7CisgICAgICAgIERFQlVHTVNHVCgoInRsczpjb25maWciLCJvdXIgaWRlbnRpdHkgJXNcbiIsIHZhbHVlKSk7CisgICAgfQorCisgICAgaWYgKChzdHJjbXAodG9rZW4sICJwZWVyQ2VydCIpID09IDApIHx8CisgICAgICAgIChzdHJjbXAodG9rZW4sICJ0aGVpcl9pZGVudGl0eSIpID09IDApKSB7CisgICAgICAgIFNOTVBfRlJFRSh0bHNkYXRhLT50aGVpcl9pZGVudGl0eSk7CisgICAgICAgIHRsc2RhdGEtPnRoZWlyX2lkZW50aXR5ID0gc3RyZHVwKHZhbHVlKTsKKyAgICAgICAgREVCVUdNU0dUKCgidGxzOmNvbmZpZyIsInRoZWlyIGlkZW50aXR5ICVzXG4iLCB2YWx1ZSkpOworICAgIH0KKworICAgIGlmICgoc3RyY21wKHRva2VuLCAicGVlckhvc3RuYW1lIikgPT0gMCkgfHwKKyAgICAgICAgKHN0cmNtcCh0b2tlbiwgInRoZWlyX2hvc3RuYW1lIikgPT0gMCkpIHsKKyAgICAgICAgU05NUF9GUkVFKHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lKTsKKyAgICAgICAgdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUgPSBzdHJkdXAodmFsdWUpOworICAgIH0KKworICAgIGlmICgoc3RyY21wKHRva2VuLCAidHJ1c3RfY2VydCIpID09IDApIHx8CisgICAgICAgIChzdHJjbXAodG9rZW4sICJ0cnVzdENlcnQiKSA9PSAwKSkgeworICAgICAgICBTTk1QX0ZSRUUodGxzZGF0YS0+dHJ1c3RfY2VydCk7CisgICAgICAgIHRsc2RhdGEtPnRydXN0X2NlcnQgPSBzdHJkdXAodmFsdWUpOworICAgIH0KKyAgICAKKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCitpbnQKK25ldHNubXBfdGxzYmFzZV9zZXNzaW9uX2luaXQoc3RydWN0IG5ldHNubXBfdHJhbnNwb3J0X3MgKnRyYW5zcG9ydCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNubXBfc2Vzc2lvbiAqc2VzcykgeworICAgIC8qIHRoZSBkZWZhdWx0IHNlY3VyaXR5IG1vZGVsIGhlcmUgc2hvdWxkIGJlIFRTTTsgbW9zdCBvdGhlcgorICAgICAgIHRoaW5ncyB3b24ndCB3b3JrIHdpdGggVExTIGJlY2F1c2Ugd2UnbGwgdGhyb3cgb3V0IHRoZSBwYWNrZXQKKyAgICAgICBpZiBpdCBkb2Vzbid0IGhhdmUgYSBwcm9wZXIgdG1TdGF0ZVJlZiAoYW5kIG9ueWwgVFNNIGdlbmVyYXRlcworICAgICAgIHRoaXMgYXQgdGhlIG1vbWVudCAqLworICAgIGlmICghKHRyYW5zcG9ydC0+ZmxhZ3MgJiBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX0xJU1RFTikpIHsKKyAgICAgICAgaWYgKHNlc3MtPnNlY3VyaXR5TW9kZWwgPT0gU05NUF9ERUZBVUxUX1NFQ01PREVMKSB7CisgICAgICAgICAgICBzZXNzLT5zZWN1cml0eU1vZGVsID0gU05NUF9TRUNfTU9ERUxfVFNNOworICAgICAgICB9IGVsc2UgaWYgKHNlc3MtPnNlY3VyaXR5TW9kZWwgIT0gU05NUF9TRUNfTU9ERUxfVFNNKSB7CisgICAgICAgICAgICBzZXNzLT5zZWN1cml0eU1vZGVsID0gU05NUF9TRUNfTU9ERUxfVFNNOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkEgc2VjdXJpdHkgbW9kZWwgb3RoZXIgdGhhbiBUU00gaXMgYmVpbmcgdXNlZCB3aXRoIChEKVRMUzsgdXNpbmcgVFNNIGFueXdheXNcbiIpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKE5VTEwgPT0gc2Vzcy0+c2VjdXJpdHlOYW1lKSB7CisgICAgICAgICAgICAvKiBjbGllbnQgc2lkZSBkb2Vzbid0IG5lZWQgYSByZWFsIHNlY3VyaXR5TmFtZSAqLworICAgICAgICAgICAgLyogWFhYOiBjYWxsLWhvbWUgaXNzdWVzIHJlcXVpcmUgdGhlbSB0byBzZXQgb25lIGZvciBWQUNNOyBidXQKKyAgICAgICAgICAgICAgIHdlIGRvbid0IGRvIGNhbGxob21lIHlldCAqLworICAgICAgICAgICAgc2Vzcy0+c2VjdXJpdHlOYW1lID0gc3RyZHVwKCJfX0JPR1VTX18iKTsKKyAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TmFtZUxlbiA9IHN0cmxlbihzZXNzLT5zZWN1cml0eU5hbWUpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKHNlc3MtPnZlcnNpb24gIT0gU05NUF9WRVJTSU9OXzMpIHsKKyAgICAgICAgICAgIHNlc3MtPnZlcnNpb24gPSBTTk1QX1ZFUlNJT05fMzsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJBIFNOTVAgdmVyc2lvbiBvdGhlciB0aGFuIDMgd2FzIHJlcXVlc3RlZCB3aXRoIChEKVRMUzsgdXNpbmcgMyBhbnl3YXlzXG4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChzZXNzLT5zZWN1cml0eUxldmVsIDw9IDApIHsKKyAgICAgICAgICAgIHNlc3MtPnNlY3VyaXR5TGV2ZWwgPSBTTk1QX1NFQ19MRVZFTF9BVVRIUFJJVjsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gU05NUEVSUl9TVUNDRVNTOworfQorCitzdGF0aWMgaW50IGhhdmVfZG9uZV9ib290c3RyYXAgPSAwOworCitzdGF0aWMgaW50Cit0bHNfYm9vdHN0cmFwKGludCBtYWpvcmlkLCBpbnQgbWlub3JpZCwgdm9pZCAqc2VydmVyYXJnLCB2b2lkICpjbGllbnRhcmcpIHsKKyAgICBjaGFyIGluZGV4bmFtZVtdID0gIl9uZXRzbm1wX3ZlcmlmeV9pbmZvIjsKKworICAgIC8qIGRvbid0IGRvIHRoaXMgbW9yZSB0aGFuIG9uY2UgKi8KKyAgICBpZiAoaGF2ZV9kb25lX2Jvb3RzdHJhcCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaGF2ZV9kb25lX2Jvb3RzdHJhcCA9IDE7CisKKyAgICBuZXRzbm1wX2NlcnRzX2xvYWQoKTsKKworICAgIG9wZW5zc2xfbG9jYWxfaW5kZXggPQorICAgICAgICBTU0xfZ2V0X2V4X25ld19pbmRleCgwLCBpbmRleG5hbWUsIE5VTEwsIE5VTEwsIE5VTEwpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludAordGxzX2dldF92ZXJpZnlfaW5mb19pbmRleCgpIHsKKyAgICByZXR1cm4gb3BlbnNzbF9sb2NhbF9pbmRleDsKK30KKworc3RhdGljIHZvaWQgX3BhcnNlX2NsaWVudF9jZXJ0KGNvbnN0IGNoYXIgKnRvaywgY2hhciAqbGluZSkKK3sKKyAgICBjb25maWdfcHdhcm4oImNsaWVudENlcnQgaXMgZGVwcmVjYXRlZC4gQ2xpZW50cyBzaG91bGQgdXNlIGxvY2FsQ2VydCwgc2VydmVycyBzaG91bGQgdXNlIHBlZXJDZXJ0Iik7CisgICAgaWYgKCpsaW5lID09ICciJykgeworICAgICAgICBjaGFyIGJ1ZltTTk1QX01BWEJVRl07CisgICAgICAgIGNvcHlfbndvcmQobGluZSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X0NMSUVOVF9QVUIsIGJ1Zik7CisgICAgfSBlbHNlCisgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X0NMSUVOVF9QVUIsIGxpbmUpOworfQorCitzdGF0aWMgdm9pZCBfcGFyc2Vfc2VydmVyX2NlcnQoY29uc3QgY2hhciAqdG9rLCBjaGFyICpsaW5lKQoreworICAgIGNvbmZpZ19wd2Fybigic2VydmVyQ2VydCBpcyBkZXByZWNhdGVkLiBDbGllbnRzIHNob3VsZCB1c2UgcGVlckNlcnQsIHNlcnZlcnMgc2hvdWxkIHVzZSBsb2NhbENlcnQuIik7CisgICAgaWYgKCpsaW5lID09ICciJykgeworICAgICAgICBjaGFyIGJ1ZltTTk1QX01BWEJVRl07CisgICAgICAgIGNvcHlfbndvcmQobGluZSwgYnVmLCBzaXplb2YoYnVmKSk7CisgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X0NMSUVOVF9QVUIsIGJ1Zik7CisgICAgfSBlbHNlCisgICAgICAgIG5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X1NFUlZFUl9QVUIsIGxpbmUpOworfQorCit2b2lkCituZXRzbm1wX3Rsc2Jhc2VfY3Rvcih2b2lkKSB7CisKKyAgICAvKiBib290c3RyYXAgc3NsIHNpbmNlIHdlJ2xsIG5lZWQgaXQgKi8KKyAgICBuZXRzbm1wX2luaXRfb3BlbnNzbCgpOworCisgICAgLyogdGhlIHByaXZhdGUgY2xpZW50IGNlcnQgdG8gYXV0aGVudGljYXRlIHdpdGggKi8KKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJleHRyYVg1MDlTdWJEaXIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DRVJUX0VYVFJBX1NVQkRJUik7CisKKyAgICAvKiBEbyB3ZSBoYXZlIGEgQ1JMIGxpc3Q/ICovCisgICAgbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcoQVNOX09DVEVUX1NUUiwgInNubXAiLCAieDUwOUNSTEZpbGUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9YNTA5X0NSTF9GSUxFKTsKKworICAgIC8qIFdoYXQgVExTIGFsZ29yaXRobXMgc2hvdWxkIGJlIHVzZSAqLworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsICJzbm1wIiwgInRsc0FsZ29yaXRobXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9UTFNfQUxHT1JJVE1TKTsKKworICAgIC8qCisgICAgICogZm9yIHRoZSBjbGllbnQKKyAgICAgKi8KKworICAgIC8qIHRoZSBwdWJsaWMgY2xpZW50IGNlcnQgdG8gYXV0aGVudGljYXRlIHdpdGggKi8KKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJjbGllbnRDZXJ0IiwgX3BhcnNlX2NsaWVudF9jZXJ0LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworCisgICAgLyoKKyAgICAgKiBmb3IgdGhlIHNlcnZlcgorICAgICAqLworCisgICAgLyogVGhlIFg1MDkgc2VydmVyIGtleSB0byB1c2UgKi8KKyAgICByZWdpc3Rlcl9jb25maWdfaGFuZGxlcigic25tcCIsICJzZXJ2ZXJDZXJ0IiwgX3BhcnNlX3NlcnZlcl9jZXJ0LCBOVUxMLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwpOworICAgIC8qCisgICAgICogcmVtb3ZlIGNlcnQgY29uZmlnIGFtYmlndWl0eTogbG9jYWxDZXJ0LCBwZWVyQ2VydAorICAgICAqLworICAgIG5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnKEFTTl9PQ1RFVF9TVFIsICJzbm1wIiwgImxvY2FsQ2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RMU19MT0NBTF9DRVJUKTsKKyAgICBuZXRzbm1wX2RzX3JlZ2lzdGVyX2NvbmZpZyhBU05fT0NURVRfU1RSLCAic25tcCIsICJwZWVyQ2VydCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfTElCX1RMU19QRUVSX0NFUlQpOworCisgICAgLyoKKyAgICAgKiByZWdpc3RlciBvdXIgYm9vdC1zdHJhcHBpbmcgbmVlZHMKKyAgICAgKi8KKyAgICBzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwKKwkJCSAgIFNOTVBfQ0FMTEJBQ0tfUE9TVF9QUkVNSUJfUkVBRF9DT05GSUcsCisJCQkgICB0bHNfYm9vdHN0cmFwLCBOVUxMKTsKKworfQorCitfbmV0c25tcFRMU0Jhc2VEYXRhICoKK25ldHNubXBfdGxzYmFzZV9hbGxvY2F0ZV90bHNkYXRhKG5ldHNubXBfdHJhbnNwb3J0ICp0LCBpbnQgaXNzZXJ2ZXIpIHsKKworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGE7CisKKyAgICBpZiAoTlVMTCA9PSB0KQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIGFsbG9jYXRlIG91ciBUTFMgc3BlY2lmaWMgZGF0YSAqLworICAgIHRsc2RhdGEgPSBTTk1QX01BTExPQ19UWVBFREVGKF9uZXRzbm1wVExTQmFzZURhdGEpOworICAgIGlmIChOVUxMID09IHRsc2RhdGEpIHsKKyAgICAgICAgU05NUF9GUkVFKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBpZiAoIWlzc2VydmVyKQorICAgICAgICB0bHNkYXRhLT5mbGFncyB8PSBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UOworCisgICAgcmV0dXJuIHRsc2RhdGE7Cit9CisKK3ZvaWQgbmV0c25tcF90bHNiYXNlX2ZyZWVfdGxzZGF0YShfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNiYXNlKSB7CisgICAgaWYgKCF0bHNiYXNlKQorICAgICAgICByZXR1cm47CisKKyAgICBERUJVR01TR1RMKCgidGxzYmFzZSIsIkZyZWVpbmcgVExTIEJhc2UgZGF0YSBmb3IgYSBzZXNzaW9uXG4iKSk7CisKKyAgICBpZiAodGxzYmFzZS0+c3NsKQorICAgICAgICBTU0xfZnJlZSh0bHNiYXNlLT5zc2wpOworCisgICAgaWYgKHRsc2Jhc2UtPnNzbF9jb250ZXh0KQorICAgICAgICBTU0xfQ1RYX2ZyZWUodGxzYmFzZS0+c3NsX2NvbnRleHQpOworICAgLyogZG9uJ3QgZnJlZSB0aGUgYWNjZXB0X2JpbyBzaW5jZSBpdCdzIHRoZSBwYXJlbnQgYmlvICovCisgICAgLyoKKyAgICBpZiAodGxzYmFzZS0+YWNjZXB0X2JpbykKKyAgICAgICAgQklPX2ZyZWUodGxzYmFzZS0+YWNjZXB0X2Jpbyk7CisgICAgKi8KKyAgICAvKiBhbmQgdGhpcyBpcyBmcmVlZCBieSB0aGUgU1NMIHNodXRkb3duICovCisgICAgLyogCisgICAgaWYgKHRsc2Jhc2UtPmFjY2VwdGVkX2JpbykKKyAgICAgIEJJT19mcmVlKHRsc2Jhc2UtPmFjY2VwdF9iaW8pOworICAgICovCisKKyAgICAvKiBmcmVlIHRoZSBjb25maWcgZGF0YSAqLworICAgIFNOTVBfRlJFRSh0bHNiYXNlLT5zZWN1cml0eU5hbWUpOworICAgIFNOTVBfRlJFRSh0bHNiYXNlLT5hZGRyX3N0cmluZyk7CisgICAgU05NUF9GUkVFKHRsc2Jhc2UtPm91cl9pZGVudGl0eSk7CisgICAgU05NUF9GUkVFKHRsc2Jhc2UtPnRoZWlyX2lkZW50aXR5KTsKKyAgICBTTk1QX0ZSRUUodGxzYmFzZS0+dGhlaXJfZmluZ2VycHJpbnQpOworICAgIFNOTVBfRlJFRSh0bHNiYXNlLT50aGVpcl9ob3N0bmFtZSk7CisgICAgU05NUF9GUkVFKHRsc2Jhc2UtPnRydXN0X2NlcnQpOworCisgICAgLyogZnJlZSB0aGUgYmFzZSBpdHNlbGYgKi8KKyAgICBTTk1QX0ZSRUUodGxzYmFzZSk7Cit9CisKK2ludCBuZXRzbm1wX3Rsc2Jhc2Vfd3JhcHVwX3JlY3YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpIHsKKyAgICBpbnQgbm9fYXV0aCwgbm9fcHJpdjsKKworICAgIGlmIChOVUxMID09IHRsc2RhdGEpCisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjEuMiBzdGVwIDI6IHRtU2VjdXJpdHlMZXZlbCAqLworICAgIC8qCisgICAgICogRG9uJ3QgYWNjZXB0IG51bGwgYXV0aGVudGljYXRpb24uIE51bGwgZW5jcnlwdGlvbiBvay4KKyAgICAgKgorICAgICAqIFhYWDogdGhpcyBzaG91bGQgYWN0dWFsbHkgY2hlY2sgZm9yIGEgY29uZmlndXJlZCBsaXN0IG9mIGVuY3J5cHRpb24KKyAgICAgKiAgICAgIGFsZ29yaXRobXMgdG8gbWFwIHRvIE5PUFJJViwgYnV0IGZvciB0aGUgbW9tZW50IHdlJ2xsCisgICAgICogICAgICBhY2NlcHQgYW55IGVuY3J5cHRpb24gYWxvZ3JpdGhtcyB0aGF0IG9wZW5zc2wgaXMgdXNpbmcuCisgICAgICovCisgICAgbmV0c25tcF9vcGVuc3NsX251bGxfY2hlY2tzKHRsc2RhdGEtPnNzbCwgJm5vX2F1dGgsICZub19wcml2KTsKKyAgICBpZiAobm9fYXV0aCA9PSAxKSB7IC8qIG51bGwvdW5rbm93biBhdXRoZW50aWNhdGlvbiAqLworICAgICAgICAvKiB4eHgtcmtzOiBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF8/Pz8pOyAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzIGNvbm5lY3Rpb24gd2l0aCBOVUxMIGF1dGhlbnRpY2F0aW9uXG4iKTsKKyAgICAgICAgU05NUF9GUkVFKHRtU3RhdGVSZWYpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorICAgIGVsc2UgaWYgKG5vX3ByaXYgPT0gMSkgLyogbnVsbC91bmtub3duIGVuY3J5cHRpb24gKi8KKyAgICAgICAgdG1TdGF0ZVJlZi0+dHJhbnNwb3J0U2VjdXJpdHlMZXZlbCA9IFNOTVBfU0VDX0xFVkVMX0FVVEhOT1BSSVY7CisgICAgZWxzZQorICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnRTZWN1cml0eUxldmVsID0gU05NUF9TRUNfTEVWRUxfQVVUSFBSSVY7CisgICAgREVCVUdNU0dUTCgoInRsczpzZWNMZXZlbCIsICJTZWNMZXZlbCAlZFxuIiwKKyAgICAgICAgICAgICAgICB0bVN0YXRlUmVmLT50cmFuc3BvcnRTZWN1cml0eUxldmVsKSk7CisKKyAgICAvKiB1c2UgeDUwOSBjZXJ0IHRvIGRvIGxvb2t1cCB0byBzZWNuYW1lIGlmIERORSBpbiBjYWNoZXAgeWV0ICovCisKKyAgICAvKiBSRkM1OTUzOiBzZWN0aW9uIDUuMy4yLCBwYXJhZ3JhcGggMjoKKyAgICAgICBUaGUgKEQpVExTIHNlcnZlciBpZGVudGlmaWVzIHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGZyb20gdGhlCisgICAgICAgKEQpVExTIGNsaWVudCdzIHByaW5jaXBhbCBjZXJ0aWZpY2F0ZSB1c2luZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisgICAgICAgZnJvbSB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUgbWFwcGluZyB0YWJsZS4gIFRoZSAoRClUTFMgc2VydmVyCisgICAgICAgTVVTVCByZXF1ZXN0IGFuZCBleHBlY3QgYSBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBjbGllbnQgYW5kIE1VU1QgTk9UCisgICAgICAgYWNjZXB0IFNOTVAgbWVzc2FnZXMgb3ZlciB0aGUgKEQpVExTIGNvbm5lY3Rpb24gdW50aWwgdGhlIGNsaWVudCBoYXMKKyAgICAgICBzZW50IGEgY2VydGlmaWNhdGUgYW5kIGl0IGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQuICBUaGUgcmVzdWx0aW5nCisgICAgICAgZGVyaXZlZCB0bVNlY3VyaXR5TmFtZSBpcyByZWNvcmRlZCBpbiB0aGUgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSBhcworICAgICAgIHRtU2VjdXJpdHlOYW1lLiAgVGhlIGRldGFpbHMgb2YgdGhlIGxvb2t1cCBwcm9jZXNzIGFyZSBmdWxseQorICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgREVTQ1JJUFRJT04gY2xhdXNlIG9mIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZQorICAgICAgIE1JQiBvYmplY3QuICBJZiBhbnkgdmVyaWZpY2F0aW9uIGZhaWxzIGluIGFueSB3YXkgKGZvciBleGFtcGxlCisgICAgICAgYmVjYXVzZSBvZiBmYWlsdXJlcyBpbiBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiBvciBiZWNhdXNlIG9mIHRoZQorICAgICAgIGxhY2sgb2YgYW4gYXBwcm9wcmlhdGUgcm93IGluIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSkgdGhlbiB0aGUKKyAgICAgICBzZXNzaW9uIGVzdGFibGlzaG1lbnQgTVVTVCBmYWlsLCBhbmQgdGhlCisgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDbGllbnRDZXJ0aWZpY2F0ZXMgb2JqZWN0IGlzIGluY3JlbWVudGVkLiAgSWYKKyAgICAgICB0aGUgc2Vzc2lvbiBjYW4gbm90IGJlIG9wZW5lZCBmb3IgYW55IHJlYXNvbiBhdCBhbGwsIGluY2x1ZGluZworICAgICAgIGNyeXB0b2dyYXBoaWMgdmVyaWZpY2F0aW9uIGZhaWx1cmVzLCB0aGVuIHRoZQorICAgICAgIHNubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYW5kIHByb2Nlc3NpbmcKKyAgICAgICBzdG9wcy4KKyAgICAqLworCisgICAgaWYgKCF0bHNkYXRhLT5zZWN1cml0eU5hbWUpIHsKKyAgICAgICAgbmV0c25tcF90bHNiYXNlX2V4dHJhY3Rfc2VjdXJpdHlfbmFtZSh0bHNkYXRhLT5zc2wsIHRsc2RhdGEpOworICAgICAgICBpZiAoTlVMTCAhPSB0bHNkYXRhLT5zZWN1cml0eU5hbWUpIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHMiLCAic2V0IFNlY05hbWUgdG86ICVzXG4iLCB0bHNkYXRhLT5zZWN1cml0eU5hbWUpKTsKKyAgICAgICAgfSBlbHNlIHsKKwkgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDTElFTlRDRVJUSUZJQ0FURVMpOworCSAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyk7CisgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAyOiB0bVNlY3VyaXR5TmFtZSAqLworICAgIC8qIFhYWDogZGV0ZWN0IGFuZCB0aHJvdyBvdXQgb3ZlcmZsb3cgc2VjbmFtZSBzaXplcyByYXRoZXIKKyAgICAgICB0aGFuIHRydW5jYXRpbmcuICovCisgICAgc3RybGNweSh0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUsIHRsc2RhdGEtPnNlY3VyaXR5TmFtZSwKKyAgICAgICAgICAgIHNpemVvZih0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWUpKTsKKyAgICB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVMZW4gPSBzdHJsZW4odG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKTsKKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjEuMiBzdGVwIDI6IHRtU2Vzc2lvbklEICovCisgICAgLyogdXNlIG91ciBUTFNEYXRhIHBvaW50ZXIgYXMgdGhlIHNlc3Npb24gSUQgKi8KKyAgICBtZW1jcHkodG1TdGF0ZVJlZi0+c2Vzc2lvbklELCAmdGxzZGF0YSwgc2l6ZW9mKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqKSk7CisKKyAgICAvKiBzYXZlIHRoZSB0bVN0YXRlUmVmIGluIG91ciBzcGVjaWFsIHBvaW50ZXIgKi8KKyAgICAqb3BhcXVlID0gdG1TdGF0ZVJlZjsKKyAgICAqb2xlbmd0aCA9IHNpemVvZihuZXRzbm1wX3RtU3RhdGVSZWZlcmVuY2UpOworCisgICAgcmV0dXJuIFNOTVBFUlJfU1VDQ0VTUzsKK30KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKF94NTA5X2dldF9lcnJvciwgbmV0c25tcF91bnVzZWQpCisjaWZuZGVmIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfX1g1MDlfR0VUX0VSUk9SCitjb25zdCBjaGFyICogX3g1MDlfZ2V0X2Vycm9yKGludCB4NTA5ZmFpbHZhbHVlLCBjb25zdCBjaGFyICpsb2NhdGlvbikgeworICAgIHN0YXRpYyBjb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOworICAgIAorICAgIC8qIFhYWDogdXNlIHRoaXMgaW5zdGVhZDogWDUwOV92ZXJpZnlfY2VydF9lcnJvcl9zdHJpbmcoZXJyKSAqLworCisgICAgc3dpdGNoICh4NTA5ZmFpbHZhbHVlKSB7CisgICAgY2FzZSBYNTA5X1ZfT0s6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfT0siOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkwiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ1JZUFRfQ0VSVF9TSUdOQVRVUkU6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NFUlRfU0lHTkFUVVJFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkU6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOQUJMRV9UT19ERUNSWVBUX0NSTF9TSUdOQVRVUkUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5BQkxFX1RPX0RFQ09ERV9JU1NVRVJfUFVCTElDX0tFWSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9DRVJUX1NJR05BVFVSRV9GQUlMVVJFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9TSUdOQVRVUkVfRkFJTFVSRToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ1JMX1NJR05BVFVSRV9GQUlMVVJFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfTk9UX1lFVF9WQUxJRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ0VSVF9OT1RfWUVUX1ZBTElEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfSEFTX0VYUElSRUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0NFUlRfSEFTX0VYUElSRUQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfQ1JMX05PVF9ZRVRfVkFMSUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0NSTF9OT1RfWUVUX1ZBTElEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NSTF9IQVNfRVhQSVJFRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ1JMX0hBU19FWFBJUkVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0JFRk9SRV9GSUVMRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfRVJST1JfSU5fQ0VSVF9OT1RfQkVGT1JFX0ZJRUxEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0VSUk9SX0lOX0NFUlRfTk9UX0FGVEVSX0ZJRUxEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9FUlJPUl9JTl9DRVJUX05PVF9BRlRFUl9GSUVMRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTEFTVF9VUERBVEVfRklFTEQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9MQVNUX1VQREFURV9GSUVMRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9FUlJPUl9JTl9DUkxfTkVYVF9VUERBVEVfRklFTEQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0VSUk9SX0lOX0NSTF9ORVhUX1VQREFURV9GSUVMRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9PVVRfT0ZfTUVNOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9PVVRfT0ZfTUVNIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0RFUFRIX1pFUk9fU0VMRl9TSUdORURfQ0VSVDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfREVQVEhfWkVST19TRUxGX1NJR05FRF9DRVJUIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1NFTEZfU0lHTkVEX0NFUlRfSU5fQ0hBSU46CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1NFTEZfU0lHTkVEX0NFUlRfSU5fQ0hBSU4iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9JU1NVRVJfQ0VSVF9MT0NBTExZOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0lTU1VFUl9DRVJUX0xPQ0FMTFkiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5BQkxFX1RPX1ZFUklGWV9MRUFGX1NJR05BVFVSRSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX0NIQUlOX1RPT19MT05HOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9DRVJUX0NIQUlOX1RPT19MT05HIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfUkVWT0tFRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQ0VSVF9SRVZPS0VEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0lOVkFMSURfQ0E6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0lOVkFMSURfQ0EiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfUEFUSF9MRU5HVEhfRVhDRUVERUQ6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1BBVEhfTEVOR1RIX0VYQ0VFREVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0lOVkFMSURfUFVSUE9TRToKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfSU5WQUxJRF9QVVJQT1NFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0NFUlRfVU5UUlVTVEVEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9DRVJUX1VOVFJVU1RFRCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9DRVJUX1JFSkVDVEVEOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9DRVJUX1JFSkVDVEVEIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1NVQkpFQ1RfSVNTVUVSX01JU01BVENIOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9TVUJKRUNUX0lTU1VFUl9NSVNNQVRDSCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9BS0lEX1NLSURfTUlTTUFUQ0g6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0FLSURfU0tJRF9NSVNNQVRDSCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9BS0lEX0lTU1VFUl9TRVJJQUxfTUlTTUFUQ0g6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0FLSURfSVNTVUVSX1NFUklBTF9NSVNNQVRDSCI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9LRVlVU0FHRV9OT19DRVJUU0lHTjoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ0VSVFNJR04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5BQkxFX1RPX0dFVF9DUkxfSVNTVUVSOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9VTkFCTEVfVE9fR0VUX0NSTF9JU1NVRVIiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5IQU5ETEVEX0NSSVRJQ0FMX0VYVEVOU0lPTjoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfVU5IQU5ETEVEX0NSSVRJQ0FMX0VYVEVOU0lPTiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9LRVlVU0FHRV9OT19DUkxfU0lHTjoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fQ1JMX1NJR04iOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfVU5IQU5ETEVEX0NSSVRJQ0FMX0NSTF9FWFRFTlNJT046CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX1VOSEFORExFRF9DUklUSUNBTF9DUkxfRVhURU5TSU9OIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX0lOVkFMSURfTk9OX0NBOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9JTlZBTElEX05PTl9DQSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWDUwOV9WX0VSUl9QUk9YWV9QQVRIX0xFTkdUSF9FWENFRURFRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfUFJPWFlfUEFUSF9MRU5HVEhfRVhDRUVERUQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFg1MDlfVl9FUlJfS0VZVVNBR0VfTk9fRElHSVRBTF9TSUdOQVRVUkU6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0tFWVVTQUdFX05PX0RJR0lUQUxfU0lHTkFUVVJFIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBYNTA5X1ZfRVJSX1BST1hZX0NFUlRJRklDQVRFU19OT1RfQUxMT1dFRDoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfUFJPWFlfQ0VSVElGSUNBVEVTX05PVF9BTExPV0VEIjsKKyAgICAgICAgYnJlYWs7CisjaWZkZWYgWDUwOV9WX0VSUl9JTlZBTElEX0VYVEVOU0lPTiAvKiBub3QgYXZhaWwgb24gZGFyd2luICovCisgICAgY2FzZSBYNTA5X1ZfRVJSX0lOVkFMSURfRVhURU5TSU9OOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9JTlZBTElEX0VYVEVOU0lPTiI7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgWDUwOV9WX0VSUl9JTlZBTElEX1BPTElDWV9FWFRFTlNJT04gLyogbm90IGF2YWlsIG9uIGRhcndpbiAqLworICAgIGNhc2UgWDUwOV9WX0VSUl9JTlZBTElEX1BPTElDWV9FWFRFTlNJT046CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX0lOVkFMSURfUE9MSUNZX0VYVEVOU0lPTiI7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgWDUwOV9WX0VSUl9OT19FWFBMSUNJVF9QT0xJQ1kgLyogbm90IGF2YWlsIG9uIGRhcndpbiAqLworICAgIGNhc2UgWDUwOV9WX0VSUl9OT19FWFBMSUNJVF9QT0xJQ1k6CisgICAgICAgIHJlYXNvbiA9ICJYNTA5X1ZfRVJSX05PX0VYUExJQ0lUX1BPTElDWSI7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisjaWZkZWYgWDUwOV9WX0VSUl9VTk5FU1RFRF9SRVNPVVJDRSAvKiBub3QgYXZhaWwgb24gZGFyd2luICovCisgICAgY2FzZSBYNTA5X1ZfRVJSX1VOTkVTVEVEX1JFU09VUkNFOgorICAgICAgICByZWFzb24gPSAiWDUwOV9WX0VSUl9VTk5FU1RFRF9SRVNPVVJDRSI7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBYNTA5X1ZfRVJSX0FQUExJQ0FUSU9OX1ZFUklGSUNBVElPTjoKKyAgICAgICAgcmVhc29uID0gIlg1MDlfVl9FUlJfQVBQTElDQVRJT05fVkVSSUZJQ0FUSU9OIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmVhc29uID0gInVua25vd24gZmFpbHVyZSBjb2RlIjsKKyAgICB9CisKKyAgICByZXR1cm4gcmVhc29uOworfQorI2VuZGlmIC8qIE5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfX1g1MDlfR0VUX0VSUk9SICovCisKK3ZvaWQgX29wZW5zc2xfbG9nX2Vycm9yKGludCByYywgU1NMICpjb24sIGNvbnN0IGNoYXIgKmxvY2F0aW9uKSB7CisgICAgY29uc3QgY2hhciAgICAgKnJlYXNvbiwgKmZpbGUsICpkYXRhOworICAgIHVuc2lnbmVkIGxvbmcgICBudW1lcmljYWxfcmVhc29uOworICAgIGludCAgICAgICAgICAgICBmbGFncywgbGluZTsKKworICAgIHNubXBfbG9nKExPR19FUlIsICItLS0tIE9wZW5TU0wgUmVsYXRlZCBFcnJvcnM6IC0tLS1cbiIpOworCisgICAgLyogU1NMIHNwZWNpZmljIGVycm9ycyAqLworICAgIGlmIChjb24pIHsKKworICAgICAgICBpbnQgc3NsbnVtID0gU1NMX2dldF9lcnJvcihjb24sIHJjKTsKKworICAgICAgICBzd2l0Y2goc3NsbnVtKSB7CisgICAgICAgIGNhc2UgU1NMX0VSUk9SX05PTkU6CisgICAgICAgICAgICByZWFzb24gPSAiU1NMX0VSUk9SX05PTkUiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTU0xfRVJST1JfU1NMOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9TU0wiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9SRUFEOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9XQU5UX1JFQUQiOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBTU0xfRVJST1JfV0FOVF9XUklURToKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTU0xfRVJST1JfV0FOVF9XUklURSI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9XQU5UX1g1MDlfTE9PS1VQIjsKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgU1NMX0VSUk9SX1NZU0NBTEw6CisgICAgICAgICAgICByZWFzb24gPSAiU1NMX0VSUk9SX1NZU0NBTEwiOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMUyBlcnJvcjogJXM6IHJjPSVkLCBzc2xlcnJvciA9ICVkICglcyk6IHN5c3RlbV9lcnJvcj0lZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb24sIHJjLCBzc2xudW0sIHJlYXNvbiwgZXJybm8sIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVExTIEVycm9yOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAgIEVSUl9yZWFzb25fZXJyb3Jfc3RyaW5nKEVSUl9nZXRfZXJyb3IoKSkpOworICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhc2UgU1NMX0VSUk9SX1pFUk9fUkVUVVJOOgorICAgICAgICAgICAgcmVhc29uID0gIlNTTF9FUlJPUl9aRVJPX1JFVFVSTiI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX0NPTk5FQ1Q6CisgICAgICAgICAgICByZWFzb24gPSAiU1NMX0VSUk9SX1dBTlRfQ09OTkVDVCI7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFNTTF9FUlJPUl9XQU5UX0FDQ0VQVDoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJTU0xfRVJST1JfV0FOVF9BQ0NFUFQiOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJlYXNvbiA9ICJ1bmtub3duIjsKKyAgICAgICAgfQorCisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIgVExTIGVycm9yOiAlczogcmM9JWQsIHNzbGVycm9yID0gJWQgKCVzKVxuIiwKKyAgICAgICAgICAgICAgICAgbG9jYXRpb24sIHJjLCBzc2xudW0sIHJlYXNvbik7CisKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIiBUTFMgRXJyb3I6ICVzXG4iLAorICAgICAgICAgICAgICAgICBFUlJfcmVhc29uX2Vycm9yX3N0cmluZyhFUlJfZ2V0X2Vycm9yKCkpKTsKKworICAgIH0KKworICAgIC8qIG90aGVyIGVycm9ycyAqLworICAgIHdoaWxlICgobnVtZXJpY2FsX3JlYXNvbiA9CisgICAgICAgICAgICBFUlJfZ2V0X2Vycm9yX2xpbmVfZGF0YSgmZmlsZSwgJmxpbmUsICZkYXRhLCAmZmxhZ3MpKSAhPSAwKSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICIgZXJyb3I6ICMlbHUgKGZpbGUgJXMsIGxpbmUgJWQpXG4iLAorICAgICAgICAgICAgICAgICBudW1lcmljYWxfcmVhc29uLCBmaWxlLCBsaW5lKTsKKworICAgICAgICAvKiBpZiB3ZSBoYXZlIGEgdGV4dCB0cmFuc2xhdGlvbjogKi8KKyAgICAgICAgaWYgKGRhdGEgJiYgKGZsYWdzICYgRVJSX1RYVF9TVFJJTkcpKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiICBUZXh0dWFsIEVycm9yOiAlc1xuIiwgZGF0YSk7CisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogcGVyIG9wZW5zc2wgbWFuIHBhZ2U6IElmIGl0IGhhcyBiZWVuIGFsbG9jYXRlZCBieQorICAgICAgICAgICAgICogT1BFTlNTTF9tYWxsb2MoKSwgKmZsYWdzJkVSUl9UWFRfTUFMTE9DRUQgaXMgdHJ1ZS4KKyAgICAgICAgICAgICAqCisgICAgICAgICAgICAgKiBhcmdnaC4uLiBzdHVwaWQgb3BlbnNzbCBwcm90b3R5cGUgZm9yIEVSUl9nZXRfZXJyb3JfbGluZV9kYXRhCisgICAgICAgICAgICAgKiB3YW50cyBhIGNvbnN0IGNoYXIgKiosIGJ1dCByZXR1cm5zIHNvbWV0aGluZyB0aGF0IHdlIG1pZ2h0CisgICAgICAgICAgICAgKiBuZWVkIHRvIGZyZWU/PworICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAoZmxhZ3MgJiBFUlJfVFhUX01BTExPQ0VEKQorICAgICAgICAgICAgICAgIE9QRU5TU0xfZnJlZShORVRTTk1QX1JFTU9WRV9DT05TVCh2b2lkICosIGRhdGEpKTsgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgc25tcF9sb2coTE9HX0VSUiwgIi0tLS0gRW5kIG9mIE9wZW5TU0wgRXJyb3JzIC0tLS1cbiIpOworfQpkaWZmIC0tZ2l0IGEvc25tcGxpYi90cmFuc3BvcnRzL3NubXBUTFNUQ1BEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDczZDAyYwotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVExTVENQRG9tYWluLmMKQEAgLTAsMCArMSwxMDQxIEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyogCisgKiBTZWUgdGhlIGZvbGxvd2luZyB3ZWIgcGFnZXMgZm9yIHVzZWZ1bCBkb2N1bWVudGF0aW9uIG9uIHRoaXMgdHJhbnNwb3J0OgorICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVFVUOlVzaW5nX1RMUworICogaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvd2lraS9pbmRleC5waHAvVXNpbmdfRFRMUworICovCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1mZWF0dXJlcy5oPgorCituZXRzbm1wX2ZlYXR1cmVfcmVxdWlyZShjZXJ0X3V0aWwpCisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBUTFNUQ1BEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1VJT19ICisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2VuZGlmCisKKyNpZiBIQVZFX0FSUEFfSU5FVF9ICisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcElQdjRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFRMU0Jhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3N5c3RlbS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NlcnRfdXRpbC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9vcGVuc3NsLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgorCisjaW5jbHVkZSAib3BlbnNzbC9iaW8uaCIKKyNpbmNsdWRlICJvcGVuc3NsL3NzbC5oIgorI2luY2x1ZGUgIm9wZW5zc2wvZXJyLmgiCisKKyNpZm5kZWYgSU5BRERSX05PTkUKKyNkZWZpbmUgSU5BRERSX05PTkUJLTEKKyNlbmRpZgorCisjZGVmaW5lIFdFX0FSRV9TRVJWRVIgMAorI2RlZmluZSBXRV9BUkVfQ0xJRU5UIDEKKworb2lkICAgICAgICAgICAgIG5ldHNubXBUTFNUQ1BEb21haW5bXSA9IHsgVFJBTlNQT1JUX0RPTUFJTl9UTFNfVENQX0lQIH07CitzaXplX3QgICAgICAgICAgbmV0c25tcFRMU1RDUERvbWFpbl9sZW4gPSBPSURfTEVOR1RIKG5ldHNubXBUTFNUQ1BEb21haW4pOworCitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHRsc3RjcERvbWFpbjsKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfdGxzdGNwX2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgaWYgKE5VTEwgPT0gZGF0YSB8fCAwID09IGxlbiB8fCAwID09ICgoY2hhciAqKSBkYXRhKVswXSkKKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiVExTVENQOiB1bmtub3duIik7CisgICAgZWxzZSBpZiAobGVuID09IHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSB8fAorICAgICAgICAgICAgIGxlbiA9PSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSkKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfaXB2NF9mbXRhZGRyKCJUTFNUQ1AiLCB0LCBkYXRhLCBsZW4pOworICAgIGVsc2UgeworICAgICAgICAvKiBhbiBhbHJlYWR5IGFzY2lpIGZvcm1hdHRlZCBzdHJpbmcgKi8KKyAgICAgICAgY2hhciBidWZbMTAyNF07CisgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwgIlRMU1RDUDogJXMiLCAoY2hhciAqKSBkYXRhKTsKKyAgICAgICAgcmV0dXJuIHN0cmR1cChidWYpOworICAgIH0KK30KKy8qCisgKiBZb3UgY2FuIHdyaXRlIHNvbWV0aGluZyBpbnRvIG9wYXF1ZSB0aGF0IHdpbGwgc3Vic2VxdWVudGx5IGdldCBwYXNzZWQgYmFjayAKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLiAgCisgKi8KKworc3RhdGljIGludAorbmV0c25tcF90bHN0Y3BfY29weShuZXRzbm1wX3RyYW5zcG9ydCAqb2xkdCwgbmV0c25tcF90cmFuc3BvcnQgKm5ld3QpCit7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqb2xkdGxzZGF0YSA9IChfbmV0c25tcFRMU0Jhc2VEYXRhICopIG9sZHQtPmRhdGE7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqbmV3dGxzZGF0YSA9IChfbmV0c25tcFRMU0Jhc2VEYXRhICopIG5ld3QtPmRhdGE7CisgICAgb2xkdGxzZGF0YS0+YWNjZXB0ZWRfYmlvID0gTlVMTDsKKyAgICBvbGR0bHNkYXRhLT5zc2wgPSBOVUxMOworICAgIG5ld3Rsc2RhdGEtPnNzbF9jb250ZXh0ID0gTlVMTDsKKyAgICAKKyAgICBpZiAob2xkdGxzZGF0YS0+YWRkcl9zdHJpbmcpCisgICAgICAgIG5ld3Rsc2RhdGEtPmFkZHJfc3RyaW5nID0gc3RyZHVwKG9sZHRsc2RhdGEtPmFkZHJfc3RyaW5nKTsKKyAgICBpZiAob2xkdGxzZGF0YS0+c2VjdXJpdHlOYW1lKQorICAgICAgICBuZXd0bHNkYXRhLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAob2xkdGxzZGF0YS0+c2VjdXJpdHlOYW1lKTsKKyAgICBpZiAob2xkdGxzZGF0YS0+b3VyX2lkZW50aXR5KQorICAgICAgICBuZXd0bHNkYXRhLT5vdXJfaWRlbnRpdHkgPSBzdHJkdXAob2xkdGxzZGF0YS0+b3VyX2lkZW50aXR5KTsKKyAgICBpZiAob2xkdGxzZGF0YS0+dGhlaXJfaWRlbnRpdHkpCisgICAgICAgIG5ld3Rsc2RhdGEtPnRoZWlyX2lkZW50aXR5ID0gc3RyZHVwKG9sZHRsc2RhdGEtPnRoZWlyX2lkZW50aXR5KTsKKyAgICBpZiAob2xkdGxzZGF0YS0+dGhlaXJfZmluZ2VycHJpbnQpCisgICAgICAgIG5ld3Rsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50ID0gc3RyZHVwKG9sZHRsc2RhdGEtPnRoZWlyX2ZpbmdlcnByaW50KTsKKyAgICBpZiAob2xkdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUpCisgICAgICAgIG5ld3Rsc2RhdGEtPnRoZWlyX2hvc3RuYW1lID0gc3RyZHVwKG9sZHRsc2RhdGEtPnRoZWlyX2hvc3RuYW1lKTsKKyAgICBpZiAob2xkdGxzZGF0YS0+dHJ1c3RfY2VydCkKKyAgICAgICAgbmV3dGxzZGF0YS0+dHJ1c3RfY2VydCA9IHN0cmR1cChvbGR0bHNkYXRhLT50cnVzdF9jZXJ0KTsKKyAgICBpZiAob2xkdGxzZGF0YS0+YWRkcikKKyAgICAgICAgbmV3dGxzZGF0YS0+YWRkciA9IG5ldHNubXBfbWVtZHVwKG9sZHRsc2RhdGEtPmFkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKm9sZHRsc2RhdGEtPmFkZHIpKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CituZXRzbm1wX3Rsc3RjcF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50ICAgICAgICAgICAgIHJjID0gLTE7CisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmID0gTlVMTDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworCisgICAgaWYgKE5VTEwgPT0gdCB8fCB0LT5zb2NrIDwgMCB8fCBOVUxMID09IHQtPmRhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwKKyAgICAgICAgICAgICAgICAgInRsc3RjcCByZWNlaXZlZCBhbiBpbnZhbGlkIGludm9jYXRpb24gd2l0aCBtaXNzaW5nIGRhdGFcbiIpOworICAgICAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgKHQgPyB0LT5zb2NrIDogLTEpLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAiICB0ZGF0YSA9ICVwXG4iLCB0LT5kYXRhKSk7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgICAgIAorICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjEuMiBzdGVwIDE6CisgICAgMSkgRGV0ZXJtaW5lIHRoZSB0bHN0bVNlc3Npb25JRCBmb3IgdGhlIGluY29taW5nIG1lc3NhZ2UuIFRoZQorICAgICAgIHRsc3RtU2Vzc2lvbklEIE1VU1QgYmUgYSB1bmlxdWUgc2Vzc2lvbiBpZGVudGlmaWVyIGZvciB0aGlzCisgICAgICAgKEQpVExTIGNvbm5lY3Rpb24uICBUaGUgY29udGVudHMgYW5kIGZvcm1hdCBvZiB0aGlzIGlkZW50aWZpZXIKKyAgICAgICBhcmUgaW1wbGVtZW50YXRpb24tZGVwZW5kZW50IGFzIGxvbmcgYXMgaXQgaXMgdW5pcXVlIHRvIHRoZQorICAgICAgIHNlc3Npb24uICBBIHNlc3Npb24gaWRlbnRpZmllciBNVVNUIE5PVCBiZSByZXVzZWQgdW50aWwgYWxsCisgICAgICAgcmVmZXJlbmNlcyB0byBpdCBhcmUgbm8gbG9uZ2VyIGluIHVzZS4gIFRoZSB0bVNlc3Npb25JRCBpcworICAgICAgIGVxdWFsIHRvIHRoZSB0bHN0bVNlc3Npb25JRCBkaXNjdXNzZWQgaW4gU2VjdGlvbiA1LjEuMS4KKyAgICAgICB0bVNlc3Npb25JRCByZWZlcnMgdG8gdGhlIHNlc3Npb24gaWRlbnRpZmllciB3aGVuIHN0b3JlZCBpbiB0aGUKKyAgICAgICB0bVN0YXRlUmVmZXJlbmNlIGFuZCB0bHN0bVNlc3Npb25JRCByZWZlcnMgdG8gdGhlIHNlc3Npb24KKyAgICAgICBpZGVudGlmaWVyIHdoZW4gc3RvcmVkIGluIHRoZSBMQ0QuICBUaGV5IE1VU1QgYWx3YXlzIGJlIGVxdWFsCisgICAgICAgd2hlbiBwcm9jZXNzaW5nIGEgZ2l2ZW4gc2Vzc2lvbidzIHRyYWZmaWMuCisgICAgICovCisgICAgLyogRm9yIHRoaXMgaW1wbGVtZW50YXRpb24gd2UgdXNlIHRoZSB0LT5kYXRhIG1lbW9yeSBwb2ludGVyIGFzCisgICAgICAgdGhlIHNlc3Npb25JRC4gIEFzIGl0J3MgYSBwb2ludGVyIHRvIHNlc3Npb24gc3BlY2lmaWMgZGF0YSB0aWVkCisgICAgICAgd2l0aCB0aGUgdHJhbnNwb3J0IG9iamVjdCB3ZSBrbm93IGl0J2xsIG5ldmVyIGJlIHJlYWxsb2F0ZWQKKyAgICAgICAoaWUsIGR1cGxpY2F0ZWQpIHVudGlsIHJlbGVhc2UgYnkgdGhpcyB0cmFuc3BvcnQgb2JqZWN0IGFuZCBpcworICAgICAgIHNhZmUgdG8gdXNlIGFzIGEgdW5pcXVlIHNlc3Npb24gaWRlbnRpZmllci4gKi8KKworICAgIHRsc2RhdGEgPSB0LT5kYXRhOworICAgIGlmIChOVUxMID09IHRsc2RhdGEtPnNzbCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLAorICAgICAgICAgICAgICAgICAidGxzdGNwIHJlY2VpdmVkIGFuIGludmFsaWQgaW52b2NhdGlvbiB3aXRob3V0IHNzbCBkYXRhXG4iKTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjEuMiBzdGVwIDEsIHBhcnQyOgorICAgICAqIFRoaXMgcGFydCAoaW5jcmVtZW50aW5nIHRoZSBjb3VudGVyKSBpcyBkb25lIGluIHRoZQorICAgICAgIG5ldHNubXBfdGxzdGNwX2FjY2VwdCBmdW5jdGlvbi4KKyAgICAgKi8KKworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMS4yIHN0ZXAgMjoKKyAgICAgKiBDcmVhdGUgYSB0bVN0YXRlUmVmZXJlbmNlIGNhY2hlIGZvciB0aGUgc3Vic2VxdWVudCByZWZlcmVuY2UgYW5kCisgICAgICAgYXNzaWduIHRoZSBmb2xsb3dpbmcgdmFsdWVzIHdpdGhpbiBpdDoKKworICAgICAgIHRtVHJhbnNwb3J0RG9tYWluICA9IHNubXBUTFNUQ1BEb21haW4gb3Igc25tcERUTFNVRFBEb21haW4gYXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcHByb3ByaWF0ZS4KKworICAgICAgIHRtVHJhbnNwb3J0QWRkcmVzcyA9IFRoZSBhZGRyZXNzIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZWQgZnJvbS4KKworICAgICAgIHRtU2VjdXJpdHlMZXZlbCAgICA9IFRoZSBkZXJpdmVkIHRtU2VjdXJpdHlMZXZlbCBmb3IgdGhlIHNlc3Npb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXMgZGlzY3Vzc2VkIGluIFNlY3Rpb24gMy4xLjIgYW5kIFNlY3Rpb24gNS4zLgorCisgICAgICAgdG1TZWN1cml0eU5hbWUgICAgID0gVGhlIGZkZXJpdmVkIHRtU2VjdXJpdHlOYW1lIGZvciB0aGUgc2Vzc2lvbiBhcworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2N1c3NlZCBpbiBTZWN0aW9uIDUuMy4gIFRoaXMgdmFsdWUgTVVTVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJlIGNvbnN0YW50IGR1cmluZyB0aGUgbGlmZXRpbWUgb2YgdGhlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2Vzc2lvbi4KKworICAgICAgIHRtU2Vzc2lvbklEICAgICAgICA9IFRoZSB0bHN0bVNlc3Npb25JRCBkZXNjcmliZWQgaW4gc3RlcCAxIGFib3ZlLgorICAgICAqLworCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICogLSBUaGUgdG1UcmFuc3BvcnREb21haW4gaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHRyYW5zcG9ydCBvYmplY3QKKyAgICAgKiAtIFRoZSB0bXBTZXNzaW9uSUQgaXMgcmVwcmVzZW50ZWQgYnkgdGhlIHRsc2RhdGEgcG9pbnRlciAoYXMKKyAgICAgICAgIGRpc2N1c3NlZCBhYm92ZSkKKyAgICAgKiAtIFRoZSBmb2xsb3dpbmcgaXRlbXMgYXJlIGhhbmRsZWQgbGF0ZXIgaW4gbmV0c25tcF90bHNiYXNlX3dyYXB1cF9yZWN2OgorICAgICAgICAgLSB0bVNlY3VyaXR5TGV2ZWwKKyAgICAgICAgIC0gdG1TZWN1cml0eU5hbWUKKyAgICAgICAgIC0gdG1TZXNzaW9uSUQKKyAgICAqLworCisgICAgLyogY3JlYXRlIGEgdG1TdGF0ZVJlZiBjYWNoZSBmb3Igc2xvdyBmaWxsLWluICovCisgICAgdG1TdGF0ZVJlZiA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKTsKKworICAgIGlmICh0bVN0YXRlUmVmID09IE5VTEwpIHsKKyAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICpvbGVuZ3RoID0gMDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIFNldCB0aGUgdHJhbnNwb3J0RG9tYWluICovCisgICAgbWVtY3B5KHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbiwKKyAgICAgICAgICAgbmV0c25tcFRMU1RDUERvbWFpbiwgc2l6ZW9mKG5ldHNubXBUTFNUQ1BEb21haW5bMF0pICoKKyAgICAgICAgICAgbmV0c25tcFRMU1RDUERvbWFpbl9sZW4pOworICAgIHRtU3RhdGVSZWYtPnRyYW5zcG9ydERvbWFpbkxlbiA9IG5ldHNubXBUTFNUQ1BEb21haW5fbGVuOworCisgICAgLyogU2V0IHRoZSB0bVRyYW5zcG9ydEFkZHJlc3MgKi8KKyAgICB0bVN0YXRlUmVmLT5oYXZlX2FkZHJlc3NlcyA9IDE7CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAxOgorICAgICAqIDMpICBUaGUgaW5jb21pbmdNZXNzYWdlIGFuZCBpbmNvbWluZ01lc3NhZ2VMZW5ndGggYXJlIGFzc2lnbmVkIHZhbHVlcworICAgICAgIGZyb20gdGhlIChEKVRMUyBwcm9jZXNzaW5nLgorICAgICAqLworCisgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgLSBpbmNvbWluZ01lc3NhZ2UgICAgICAgPSBidWYgcG9pbnRlcgorICAgICAgIC0gaW5jb21pbmdNZXNzYWdlTGVuZ3RoID0gcmMKKyAgICAqLworCisgICAgLyogcmVhZCB0aGUgcGFja2V0IGZyb20gb3BlbnNzbCAqLworICAgIGRvIHsKKyAgICAgICAgcmMgPSBTU0xfcmVhZCh0bHNkYXRhLT5zc2wsIGJ1Ziwgc2l6ZSk7CisgICAgICAgIGlmIChyYyA9PSAwKSB7CisgICAgICAgICAgICAvKiBYWFggY2xvc2VkIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAicmVtb3RlIHNpZGUgY2xvc2VkIGNvbm5lY3Rpb25cbiIpKTsKKyAgICAgICAgICAgIC8qIFhYWDogb3BlbnNzbCBjbGVhbnVwICovCisgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHJjID09IC0xKSB7CisgICAgICAgICAgICBpbnQgZXJyID0gU1NMX2dldF9lcnJvcih0bHNkYXRhLT5zc2wsIHJjKTsKKyAgICAgICAgICAgIGlmIChlcnIgIT0gU1NMX0VSUk9SX1dBTlRfUkVBRCAmJiBlcnIgIT0gU1NMX0VSUk9SX1dBTlRfV1JJVEUpIHsKKyAgICAgICAgICAgICAgICAvKiBlcnJvciBkZXRlY3RlZCAqLworICAgICAgICAgICAgICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgdGxzZGF0YS0+c3NsLCAiU1NMX3JlYWQiKTsKKyAgICAgICAgICAgICAgICBTTk1QX0ZSRUUodG1TdGF0ZVJlZik7CisgICAgICAgICAgICAgICAgcmV0dXJuIHJjOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIC8qIHJldHJ5IHJlYWQgZm9yIFNTTF9FUlJPUl9XQU5UX1JFQUQgfHwgU1NMX0VSUk9SX1dBTlRfV1JJVEUgKi8KKyAgICB9IHdoaWxlIChyYyA8PSAwKTsgCisKKyAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgInJlY2VpdmVkICVkIGRlY29kZWQgYnl0ZXMgZnJvbSB0bHNcbiIsIHJjKSk7CisKKyAgICAvKiBsb2cgdGhlIHBhY2tldCAqLworICAgIERFQlVHSUYoInRsc3RjcCIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF90bHN0Y3BfZm10YWRkcih0LCBOVUxMLCAwKTsKKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RjcCIsCisgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSBmZCAlZCBnb3QgJWQgYnl0ZXMgKGZyb20gJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCByYywgc3RyKSk7CisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisKKyAgICAvKiBPdGhlciB3cmFwLXVwIHRoaW5ncyBjb21tb24gdG8gVExTIGFuZCBEVExTICovCisgICAgaWYgKG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdih0bVN0YXRlUmVmLCB0bHNkYXRhLCBvcGFxdWUsIG9sZW5ndGgpICE9CisgICAgICAgIFNOTVBFUlJfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuIFNOTVBFUlJfR0VORVJSOworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMS4yIHN0ZXAgMToKKyAgICAgKiA0KSAgVGhlIFRMUyBUcmFuc3BvcnQgTW9kZWwgcGFzc2VzIHRoZSB0cmFuc3BvcnREb21haW4sCisgICAgICAgdHJhbnNwb3J0QWRkcmVzcywgaW5jb21pbmdNZXNzYWdlLCBhbmQgaW5jb21pbmdNZXNzYWdlTGVuZ3RoIHRvCisgICAgICAgdGhlIERpc3BhdGNoZXIgdXNpbmcgdGhlIHJlY2VpdmVNZXNzYWdlIEFTSToKKyAgICAqLworCisgICAgLyogSW4gb3VyIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIGRvbmUgc2ltcGx5IGJ5IHJldHVybmluZyAqLworICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdGxzdGNwX3NlbmQobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmJ1ZiwgaW50IHNpemUsCisJCSB2b2lkICoqb3BhcXVlLCBpbnQgKm9sZW5ndGgpCit7CisgICAgaW50IHJjID0gLTE7CisgICAgbmV0c25tcF90bVN0YXRlUmVmZXJlbmNlICp0bVN0YXRlUmVmID0gTlVMTDsKKyAgICBfbmV0c25tcFRMU0Jhc2VEYXRhICp0bHNkYXRhOworICAgIAorICAgIERFQlVHVFJBQ0VUT0soInRsc3RjcCIpOworCisgICAgLyogUkZDNTk1MyBzZWN0aW9uIDUuMjogCisgICAgICAxKSAgSWYgdG1TdGF0ZVJlZmVyZW5jZSBkb2VzIG5vdCByZWZlciB0byBhIGNhY2hlIGNvbnRhaW5pbmcgdmFsdWVzCisgICAgICBmb3IgdG1UcmFuc3BvcnREb21haW4sIHRtVHJhbnNwb3J0QWRkcmVzcywgdG1TZWN1cml0eU5hbWUsCisgICAgICB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwsIGFuZCB0bVNhbWVTZWN1cml0eSwgdGhlbiBpbmNyZW1lbnQgdGhlCisgICAgICBzbm1wVGxzdG1TZXNzaW9uSW52YWxpZENhY2hlcyBjb3VudGVyLCBkaXNjYXJkIHRoZSBtZXNzYWdlLCBhbmQKKyAgICAgIHJldHVybiB0aGUgZXJyb3IgaW5kaWNhdGlvbiBpbiB0aGUgc3RhdHVzSW5mb3JtYXRpb24uICBQcm9jZXNzaW5nCisgICAgICBvZiB0aGlzIG1lc3NhZ2Ugc3RvcHMuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBOb3RlczogdGhlIHRtU3RhdGVSZWZlcmVuY2UgaXMgc3RvcmVkIGluIHRoZSBvcGFxdWUgcHRyICovCisgICAgaWYgKG9wYXF1ZSAhPSBOVUxMICYmICpvcGFxdWUgIT0gTlVMTCAmJgorICAgICAgICAqb2xlbmd0aCA9PSBzaXplb2YobmV0c25tcF90bVN0YXRlUmVmZXJlbmNlKSkgeworICAgICAgICB0bVN0YXRlUmVmID0gKG5ldHNubXBfdG1TdGF0ZVJlZmVyZW5jZSAqKSAqb3BhcXVlOworICAgIH0gZWxzZSB7CisgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJUTFNUQ1Agd2FzIGNhbGxlZCB3aXRoIGFuIGludmFsaWQgc3RhdGU7IHBvc3NpYmx5IHRoZSB3cm9uZyBzZWN1cml0eSBtb2RlbCBpcyBpbiB1c2UuICBJdCBzaG91bGQgYmUgJ3RzbScuXG4iKTsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDQUNIRVMpOworICAgICAgICByZXR1cm4gU05NUEVSUl9HRU5FUlI7CisgICAgfQorCisgICAgLyogUkZDNTk1MyBzZWN0aW9uIDUuMjogCisgICAgICAgMikgIEV4dHJhY3QgdGhlIHRtU2Vzc2lvbklELCB0bVRyYW5zcG9ydERvbWFpbiwgdG1UcmFuc3BvcnRBZGRyZXNzLAorICAgICAgIHRtU2VjdXJpdHlOYW1lLCB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwsIGFuZCB0bVNhbWVTZWN1cml0eQorICAgICAgIHZhbHVlcyBmcm9tIHRoZSB0bVN0YXRlUmVmZXJlbmNlLiAgTm90ZTogVGhlIHRtU2Vzc2lvbklEIHZhbHVlCisgICAgICAgbWF5IGJlIHVuZGVmaW5lZCBpZiBubyBzZXNzaW9uIGV4aXN0cyB5ZXQgb3ZlciB3aGljaCB0aGUgbWVzc2FnZQorICAgICAgIGNhbiBiZSBzZW50LgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gTm90ZXM6CisgICAgICAgLSBPdXIgc2Vzc2lvbiB3aWxsIGFsd2F5cyBleGlzdCBieSBub3cgYXMgaXQncyBjcmVhdGVkIHdoZW4gdGhlCisgICAgICAgICB0cmFuc3BvcnQgb2JqZWN0IGlzIGNyZWF0ZWQuIEF1dG8tc2Vzc2lvbiBjcmVhdGlvbiBpcyBoYW5kbGVkCisgICAgICAgICBoaWdoZXIgaW4gdGhlIHN0YWNrLgorICAgICAgIC0gV2UgZG9uJ3QgImV4dHJhY3QiIHBlciBzYXkgc2luY2Ugd2UganVzdCBsZWF2ZSB0aGUgZGF0YSBpbgorICAgICAgICAgdGhlIHN0cnVjdHVyZS4KKyAgICAgICAtIFRoZSBzZXNzaW9uSUQgaXMgc3RvcmVkIGluIHRoZSB0LT5kYXRhIG1lbW9yeSBwb2ludGVyLgorICAgICovCisKKyAgICAvKiBSRkM1OTUzIHNlY3Rpb24gNS4yOiAKKyAgICAgICAzKSAgSWYgdG1TYW1lU2VjdXJpdHkgaXMgdHJ1ZSBhbmQgZWl0aGVyIHRtU2Vzc2lvbklEIGlzIHVuZGVmaW5lZCBvcgorICAgICAgICAgICByZWZlcnMgdG8gYSBzZXNzaW9uIHRoYXQgaXMgbm8gbG9uZ2VyIG9wZW4gdGhlbiBpbmNyZW1lbnQgdGhlCisgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25Ob1Nlc3Npb25zIGNvdW50ZXIsIGRpc2NhcmQgdGhlIG1lc3NhZ2UgYW5kCisgICAgICAgICAgIHJldHVybiB0aGUgZXJyb3IgaW5kaWNhdGlvbiBpbiB0aGUgc3RhdHVzSW5mb3JtYXRpb24uICBQcm9jZXNzaW5nCisgICAgICAgICAgIG9mIHRoaXMgbWVzc2FnZSBzdG9wcy4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIE5vdGVzOgorICAgICAgIC0gV2Ugd291bGQgbmV2ZXIgZ2V0IGhlcmUgaWYgdGhlIHNlc3Npb25JRCB3YXMgZWl0aGVyIHVuZGVmaW5lZAorICAgICAgICAgb3IgZGlmZmVyZW50LiAgV2UgdGllIHBhY2tldHMgZGlyZWN0bHkgdG8gdGhlIHRyYW5zcG9ydAorICAgICAgICAgb2JqZWN0IGFuZCBpdCBjb3VsZCBuZXZlciBiZSBzZW50IGJhY2sgb3ZlciBhIGRpZmZlcmVudAorICAgICAgICAgdHJhbnNwb3J0LCB3aGljaCBpcyB3aGF0IHRoZSBhYm92ZSB0ZXh0IGlzIHRyeWluZyB0byBwcmV2ZW50LgorICAgICAqLworCisgICAgLyogUkZDNTk1MyBzZWN0aW9uIDUuMjogCisgICAgICAgNCkgIElmIHRtU2FtZVNlY3VyaXR5IGlzIGZhbHNlIGFuZCB0bVNlc3Npb25JRCByZWZlcnMgdG8gYSBzZXNzaW9uCisgICAgICAgICAgIHRoYXQgaXMgbm8gbG9uZ2VyIGF2YWlsYWJsZSB0aGVuIGFuIGltcGxlbWVudGF0aW9uIFNIT1VMRCBvcGVuIGEKKyAgICAgICAgICAgbmV3IHNlc3Npb24gdXNpbmcgdGhlIG9wZW5TZXNzaW9uKCkgQVNJIChkZXNjcmliZWQgaW4gZ3JlYXRlcgorICAgICAgICAgICBkZXRhaWwgaW4gc3RlcCA1YikuICBJbnN0ZWFkIG9mIG9wZW5pbmcgYSBuZXcgc2Vzc2lvbiBhbgorICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBNQVkgcmV0dXJuIGEgc25tcFRsc3RtU2Vzc2lvbk5vU2Vzc2lvbnMgZXJyb3IgdG8KKyAgICAgICAgICAgdGhlIGNhbGxpbmcgbW9kdWxlIGFuZCBzdG9wIHByb2Nlc3Npbmcgb2YgdGhlIG1lc3NhZ2UuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBOb3RlczoKKyAgICAgICAtIFdlIHdvdWxkIG5ldmVyIGdldCBoZXJlIGlmIHRoZSBzZXNzaW9uSUQgd2FzIGVpdGhlciB1bmRlZmluZWQKKyAgICAgICAgIG9yIGRpZmZlcmVudC4gIFdlIHRpZSBwYWNrZXRzIGRpcmVjdGx5IHRvIHRoZSB0cmFuc3BvcnQKKyAgICAgICAgIG9iamVjdCBhbmQgaXQgY291bGQgbmV2ZXIgYmUgc2VudCBiYWNrIG92ZXIgYSBkaWZmZXJlbnQKKyAgICAgICAgIHRyYW5zcG9ydCwgd2hpY2ggaXMgd2hhdCB0aGUgYWJvdmUgdGV4dCBpcyB0cnlpbmcgdG8gcHJldmVudC4KKyAgICAgICAtIEF1dG8tY29ubmVjdGlvbnMgYXJlIGhhbmRsZWQgaGlnaGVyIGluIHRoZSBOZXQtU05NUCBsaWJyYXJ5IHN0YWNrCisgICAgICovCisgICAgCisgICAgLyogUkZDNTk1MyBzZWN0aW9uIDUuMjogCisgICAgICAgNSkgIElmIHRtU2Vzc2lvbklEIGlzIHVuZGVmaW5lZCwgdGhlbiB1c2UgdG1UcmFuc3BvcnREb21haW4sCisgICAgICAgICAgIHRtVHJhbnNwb3J0QWRkcmVzcywgdG1TZWN1cml0eU5hbWUgYW5kIHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbAorICAgICAgICAgICB0byBzZWUgaWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIGVudHJ5IGluIHRoZSBMQ0Qgc3VpdGFibGUgdG8KKyAgICAgICAgICAgc2VuZCB0aGUgbWVzc2FnZSBvdmVyLgorCisgICAgICAgICAgIDVhKSAgSWYgdGhlcmUgaXMgYSBjb3JyZXNwb25kaW5nIExDRCBlbnRyeSwgdGhlbiB0aGlzIHNlc3Npb24KKyAgICAgICAgICAgICAgICB3aWxsIGJlIHVzZWQgdG8gc2VuZCB0aGUgbWVzc2FnZS4KKworICAgICAgICAgICA1YikgIElmIHRoZXJlIGlzIG5vdCBhIGNvcnJlc3BvbmRpbmcgTENEIGVudHJ5LCB0aGVuIG9wZW4gYQorICAgICAgICAgICAgICAgIHNlc3Npb24gdXNpbmcgdGhlIG9wZW5TZXNzaW9uKCkgQVNJIChkaXNjdXNzZWQgZnVydGhlciBpbgorICAgICAgICAgICAgICAgIFNlY3Rpb24gNS4zLjEpLiAgSW1wbGVtZW50YXRpb25zIE1BWSB3aXNoIHRvIG9mZmVyIG1lc3NhZ2UKKyAgICAgICAgICAgICAgICBidWZmZXJpbmcgdG8gcHJldmVudCByZWR1bmRhbnQgb3BlblNlc3Npb24oKSBjYWxscyBmb3IgdGhlCisgICAgICAgICAgICAgICAgc2FtZSBjYWNoZSBlbnRyeS4gIElmIGFuIGVycm9yIGlzIHJldHVybmVkIGZyb20KKyAgICAgICAgICAgICAgICBvcGVuU2Vzc2lvbigpLCB0aGVuIGRpc2NhcmQgdGhlIG1lc3NhZ2UsIGRpc2NhcmQgdGhlCisgICAgICAgICAgICAgICAgdG1TdGF0ZVJlZmVyZW5jZSwgaW5jcmVtZW50IHRoZSBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycywKKyAgICAgICAgICAgICAgICByZXR1cm4gYW4gZXJyb3IgaW5kaWNhdGlvbiB0byB0aGUgY2FsbGluZyBtb2R1bGUgYW5kIHN0b3AKKyAgICAgICAgICAgICAgICBwcm9jZXNzaW5nIG9mIHRoZSBtZXNzYWdlLgorICAgICovCisgICAgLyogSW1wbGVtZW50YXRpb24gTm90ZXM6CisgICAgICAgLSBXZSB3b3VsZCBuZXZlciBnZXQgaGVyZSBpZiB0aGUgc2Vzc2lvbklEIHdhcyBlaXRoZXIgdW5kZWZpbmVkCisgICAgICAgICBvciBkaWZmZXJlbnQuICBXZSB0aWUgcGFja2V0cyBkaXJlY3RseSB0byB0aGUgdHJhbnNwb3J0CisgICAgICAgICBvYmplY3QgYW5kIGl0IGNvdWxkIG5ldmVyIGJlIHNlbnQgYmFjayBvdmVyIGEgZGlmZmVyZW50CisgICAgICAgICB0cmFuc3BvcnQsIHdoaWNoIGlzIHdoYXQgdGhlIGFib3ZlIHRleHQgaXMgdHJ5aW5nIHRvIHByZXZlbnQuCisgICAgICAgLSBBdXRvLWNvbm5lY3Rpb25zIGFyZSBoYW5kbGVkIGhpZ2hlciBpbiB0aGUgTmV0LVNOTVAgbGlicmFyeSBzdGFjaworICAgICAqLworCisgICAgLyogb3VyIHNlc3Npb24gcG9pbnRlciBpcyBmdW5jdGlvbmFsbHkgdC0+ZGF0YSAqLworICAgIGlmIChOVUxMID09IHQtPmRhdGEpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIm5ldHNubXBfdGxzdGNwX3NlbmQgcmVjZWl2ZWQgbm8gaW5jb21pbmcgZGF0YVxuIik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICB0bHNkYXRhID0gdC0+ZGF0YTsKKyAgICAKKyAgICBpZiAodGxzZGF0YS0+c3NsID09IE5VTEwpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRsc3RjcF9zZW5kIHdhcyBjYWxsZWQgd2l0aG91dCBhIFNTTCBjb25uZWN0aW9uLlxuIik7CisgICAgICAgIHJldHVybiBTTk1QRVJSX0dFTkVSUjsKKyAgICB9CisKKyAgICAvKiBJZiB0aGUgZmlyc3QgcGFja2V0IGFuZCB3ZSBoYXZlIG5vIHNlY25hbWUsIHRoZW4gY29weSB0aGUKKyAgICAgICBpbXBvcnRhbnQgc2VjdXJpdHlOYW1lIGRhdGEgaW50byB0aGUgbG9uZ2VyLWxpdmVkIHNlc3Npb24KKyAgICAgICByZWZlcmVuY2UgaW5mb3JtYXRpb24uICovCisgICAgaWYgKCh0bHNkYXRhLT5mbGFncyAmIE5FVFNOTVBfVExTQkFTRV9JU19DTElFTlQpICYmCisgICAgICAgICF0bHNkYXRhLT5zZWN1cml0eU5hbWUgJiYgdG1TdGF0ZVJlZiAmJiB0bVN0YXRlUmVmLT5zZWN1cml0eU5hbWVMZW4gPiAwKQorICAgICAgICB0bHNkYXRhLT5zZWN1cml0eU5hbWUgPSBzdHJkdXAodG1TdGF0ZVJlZi0+c2VjdXJpdHlOYW1lKTsKKyAgICAgICAgCisgICAgICAgIAorICAgIC8qIFJGQzU5NTMgc2VjdGlvbiA1LjI6IAorICAgICAgIDYpICBVc2luZyBlaXRoZXIgdGhlIHNlc3Npb24gaW5kaWNhdGVkIGJ5IHRoZSB0bVNlc3Npb25JRCBpZiB0aGVyZQorICAgICAgICAgICB3YXMgb25lIG9yIHRoZSBzZXNzaW9uIHJlc3VsdGluZyBmcm9tIGEgcHJldmlvdXMgc3RlcCAoNCBvciA1KSwKKyAgICAgICAgICAgcGFzcyB0aGUgb3V0Z29pbmdNZXNzYWdlIHRvIChEKVRMUyBmb3IgZW5jYXBzdWxhdGlvbiBhbmQKKyAgICAgICAgICAgdHJhbnNtaXNzaW9uLgorICAgICovCisgICAgcmMgPSBTU0xfd3JpdGUodGxzZGF0YS0+c3NsLCBidWYsIHNpemUpOworICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAid3JvdGUgJWQgYnl0ZXNcbiIsIHNpemUpKTsKKyAgICBpZiAocmMgPCAwKSB7CisgICAgICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgdGxzZGF0YS0+c3NsLCAiU1NMX3dyaXRlIik7CisgICAgfQorCisgICAgcmV0dXJuIHJjOworfQorCisKKworc3RhdGljIGludAorbmV0c25tcF90bHN0Y3BfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKworICAgIGlmIChOVUxMID09IHQgfHwgTlVMTCA9PSB0LT5kYXRhKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS40LiAgQ2xvc2luZyBhIFNlc3Npb24KKworICAgICAgIDEpICBJbmNyZW1lbnQgZWl0aGVyIHRoZSBzbm1wVGxzdG1TZXNzaW9uQ2xpZW50Q2xvc2VzIG9yIHRoZQorICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uU2VydmVyQ2xvc2VzIGNvdW50ZXIgYXMgYXBwcm9wcmlhdGUuCisgICAgKi8KKyAgICBpZiAodC0+ZmxhZ3MgJiBORVRTTk1QX1RMU0JBU0VfSVNfQ0xJRU5UKQorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OQ0xJRU5UQ0xPU0VTKTsKKyAgICBlbHNlIAorICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OU0VSVkVSQ0xPU0VTKTsKKworICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjQuICBDbG9zaW5nIGEgU2Vzc2lvbgorICAgICAgIDIpICBMb29rIHVwIHRoZSBzZXNzaW9uIHVzaW5nIHRoZSB0bVNlc3Npb25JRC4KKyAgICAqLworICAgIHRsc2RhdGEgPSAoX25ldHNubXBUTFNCYXNlRGF0YSAqKSB0LT5kYXRhOworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuNC4gIENsb3NpbmcgYSBTZXNzaW9uCisgICAgICAgMykgIElmIHRoZXJlIGlzIG5vIG9wZW4gc2Vzc2lvbiBhc3NvY2lhdGVkIHdpdGggdGhlIHRtU2Vzc2lvbklELCB0aGVuCisgICAgICAgICAgIGNsb3NlU2Vzc2lvbiBwcm9jZXNzaW5nIGlzIGNvbXBsZXRlZC4KKyAgICAqLworICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOiBpZiB3ZSBoYXZlIGEgbm9uLXplcm8gdGxzZGF0YSB0aGVuIGl0J3MKKyAgICAgICBhbHdheXMgdHJ1ZSAqLworCisgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMy4xOiBFc3RhYmxpc2hpbmcgYSBTZXNzaW9uIGFzIGEgQ2xpZW50CisgICAgICAgNCkgIEhhdmUgKEQpVExTIGNsb3NlIHRoZSBzcGVjaWZpZWQgY29ubmVjdGlvbi4gIFRoaXMgU0hPVUxEIGluY2x1ZGUKKyAgICAgICAgICAgc2VuZGluZyBhIGNsb3NlX25vdGlmeSBUTFMgQWxlcnQgdG8gaW5mb3JtIHRoZSBvdGhlciBzaWRlIHRoYXQKKyAgICAgICAgICAgc2Vzc2lvbiBjbGVhbnVwIG1heSBiZSBwZXJmb3JtZWQuCisgICAgKi8KKworICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAiU2h1dHRpbmcgZG93biBTU0wgY29ubmVjdGlvblxuIikpOworICAgIGlmICh0bHNkYXRhLT5zc2wpIHsKKyAgICAgICAgU1NMX3NodXRkb3duKHRsc2RhdGEtPnNzbCk7CisgICAgfQorCisgICAgbmV0c25tcF90bHNiYXNlX2ZyZWVfdGxzZGF0YSh0bHNkYXRhKTsKKworICAgIHQtPmRhdGEgPSBOVUxMOworICAgIHJldHVybiBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7Cit9CisKK3N0YXRpYyBpbnQKK25ldHNubXBfdGxzdGNwX2FjY2VwdChuZXRzbm1wX3RyYW5zcG9ydCAqdCkKK3sKKyAgICBCSU8gICAgICAgICAgICAqYWNjZXB0ZWRfYmlvOworICAgIGludCAgICAgICAgICAgICByYzsKKyAgICBTU0xfQ1RYICpjdHg7CisgICAgU1NMICAgICAqc3NsOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGEgPSBOVUxMOworICAgIAorICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAibmV0c25tcF90bHN0Y3BfYWNjZXB0IGNhbGxlZFxuIikpOworCisgICAgdGxzZGF0YSA9IChfbmV0c25tcFRMU0Jhc2VEYXRhICopIHQtPmRhdGE7CisKKyAgICByYyA9IEJJT19kb19hY2NlcHQodGxzZGF0YS0+YWNjZXB0X2Jpbyk7CisKKyAgICBpZiAocmMgPD0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiQklPX2RvX2FjY2VwdCBmYWlsZWRcbiIpOworICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIE5VTEwsICJCSU9fZG9fYWNjZXB0Iik7CisgICAgICAgIC8qIFhYWDogbmVlZCB0byBjbG9zZSB0aGUgbGlzdGVuaW5nIGNvbm5lY3Rpb24gaGVyZT8gKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHRsc2RhdGEtPmFjY2VwdGVkX2JpbyA9IGFjY2VwdGVkX2JpbyA9IEJJT19wb3AodGxzZGF0YS0+YWNjZXB0X2Jpbyk7CisgICAgaWYgKCFhY2NlcHRlZF9iaW8pIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIkZhaWxlZCB0byBwb3AgYW4gYWNjZXB0ZWQgYmlvIG9mZiB0aGUgYmlvIHN0YWFja1xuIik7CisgICAgICAgIC8qIFhYWDogbmVlZCB0byBjbG9zZSB0aGUgbGlzdGVuaW5nIGNvbm5lY3Rpb24gaGVyZT8gKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGNyZWF0ZSB0aGUgT3BlblNTTCBUTFMgY29udGV4dCAqLworICAgIGN0eCA9IHRsc2RhdGEtPnNzbF9jb250ZXh0OworCisgICAgLyogY3JlYXRlIHRoZSBzZXJ2ZXIncyBtYWluIFNTTCBiaW8gKi8KKyAgICBzc2wgPSB0bHNkYXRhLT5zc2wgPSBTU0xfbmV3KGN0eCk7CisgICAgaWYgKCF0bHNkYXRhLT5zc2wpIHsKKyAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMU1RDUDogRmFpbGVkIHRvIGNyZWF0ZSBhIFNTTCBCSU9cbiIpOworICAgICAgICBCSU9fZnJlZShhY2NlcHRlZF9iaW8pOworICAgICAgICB0bHNkYXRhLT5hY2NlcHRlZF9iaW8gPSBOVUxMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgICAgICAKKyAgICBTU0xfc2V0X2Jpbyhzc2wsIGFjY2VwdGVkX2JpbywgYWNjZXB0ZWRfYmlvKTsKKyAgICAgICAgCisgICAgaWYgKChyYyA9IFNTTF9hY2NlcHQoc3NsKSkgPD0gMCkgeworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVExTVENQOiBGYWlsZWQgU1NMX2FjY2VwdFxuIik7CisgICAgICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgc3NsLCAiU1NMX2FjY2VwdCIpOworICAgICAgICBTU0xfc2h1dGRvd24odGxzZGF0YS0+c3NsKTsKKyAgICAgICAgU1NMX2ZyZWUodGxzZGF0YS0+c3NsKTsKKyAgICAgICAgdGxzZGF0YS0+YWNjZXB0ZWRfYmlvID0gTlVMTDsgLyogZnJlZWQgYnkgU1NMX2ZyZWUgKi8KKyAgICAgICAgdGxzZGF0YS0+c3NsID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0gICAKKworICAgIC8qCisgICAgICogY3VycmVudGx5IG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdiBpcyB3aGVyZSB3ZSBjaGVjayBmb3IKKyAgICAgKiBhbGdvcml0aG0gY29tcGxpYW5jZSwgYnV0IGZvciB0bHMgd2Uga25vdyB0aGUgYWxnb3JpdGhtcworICAgICAqIGF0IHRoaXMgcG9pbnQsIHNvIHdlIGNvdWxkIGJhaWwgZWFybGllci4uLgorICAgICAqLworI2lmIDAgLyogbW92ZWQgY2hlY2tzIHRvIG5ldHNubXBfdGxzYmFzZV93cmFwdXBfcmVjdiAqLworICAgIG5ldHNubXBfb3BlbnNzbF9udWxsX2NoZWNrcyh0bHNkYXRhLT5zc2wsICZub19hdXRoLCBOVUxMKTsKKyAgICBpZiAobm9fYXV0aCAhPSAwKSB7IC8qIG51bGwvdW5rbm93biBhdXRoZW50aWNhdGlvbiAqLworICAgICAgICAvKiB4eHgtcmtzOiBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF8/Pz8pOyAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzdGNwOiBjb25uZWN0aW9uIHdpdGggTlVMTCBhdXRoZW50aWNhdGlvblxuIik7CisgICAgICAgIFNTTF9zaHV0ZG93bih0bHNkYXRhLT5zc2wpOworICAgICAgICBTU0xfZnJlZSh0bHNkYXRhLT5zc2wpOworICAgICAgICB0bHNkYXRhLT5hY2NlcHRlZF9iaW8gPSBOVUxMOyAvKiBmcmVlZCBieSBTU0xfZnJlZSAqLworICAgICAgICB0bHNkYXRhLT5zc2wgPSBOVUxMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorI2VuZGlmCisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4zLjI6IEFjY2VwdGluZyBhIFNlc3Npb24gYXMgYSBTZXJ2ZXIKKyAgICAgICBBIChEKVRMUyBzZXJ2ZXIgc2hvdWxkIGFjY2VwdCBuZXcgc2Vzc2lvbiBjb25uZWN0aW9ucyBmcm9tIGFueSBjbGllbnQKKyAgICAgICB0aGF0IGl0IGlzIGFibGUgdG8gdmVyaWZ5IHRoZSBjbGllbnQncyBjcmVkZW50aWFscyBmb3IuICBUaGlzIGlzIGRvbmUKKyAgICAgICBieSBhdXRoZW50aWNhdGluZyB0aGUgY2xpZW50J3MgcHJlc2VudGVkIGNlcnRpZmljYXRlIHRocm91Z2ggYQorICAgICAgIGNlcnRpZmljYXRlIHBhdGggdmFsaWRhdGlvbiBwcm9jZXNzIChlLmcuICBbUkZDNTI4MF0pIG9yIHRocm91Z2gKKyAgICAgICBjZXJ0aWZpY2F0ZSBmaW5nZXJwcmludCB2ZXJpZmljYXRpb24gdXNpbmcgZmluZ2VycHJpbnRzIGNvbmZpZ3VyZWQgaW4KKyAgICAgICB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUuICBBZnRlcndhcmQgdGhlIHNlcnZlciB3aWxsIGRldGVybWluZSB0aGUKKyAgICAgICBpZGVudGl0eSBvZiB0aGUgcmVtb3RlIGVudGl0eSB1c2luZyB0aGUgZm9sbG93aW5nIHByb2NlZHVyZXMuCisKKyAgICAgICBUaGUgKEQpVExTIHNlcnZlciBpZGVudGlmaWVzIHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGZyb20gdGhlCisgICAgICAgKEQpVExTIGNsaWVudCdzIHByaW5jaXBhbCBjZXJ0aWZpY2F0ZSB1c2luZyBjb25maWd1cmF0aW9uIGluZm9ybWF0aW9uCisgICAgICAgZnJvbSB0aGUgc25tcFRsc3RtQ2VydFRvVFNOVGFibGUgbWFwcGluZyB0YWJsZS4gIFRoZSAoRClUTFMgc2VydmVyCisgICAgICAgTVVTVCByZXF1ZXN0IGFuZCBleHBlY3QgYSBjZXJ0aWZpY2F0ZSBmcm9tIHRoZSBjbGllbnQgYW5kIE1VU1QgTk9UCisgICAgICAgYWNjZXB0IFNOTVAgbWVzc2FnZXMgb3ZlciB0aGUgKEQpVExTIGNvbm5lY3Rpb24gdW50aWwgdGhlIGNsaWVudCBoYXMKKyAgICAgICBzZW50IGEgY2VydGlmaWNhdGUgYW5kIGl0IGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQuICBUaGUgcmVzdWx0aW5nCisgICAgICAgZGVyaXZlZCB0bVNlY3VyaXR5TmFtZSBpcyByZWNvcmRlZCBpbiB0aGUgdG1TdGF0ZVJlZmVyZW5jZSBjYWNoZSBhcworICAgICAgIHRtU2VjdXJpdHlOYW1lLiAgVGhlIGRldGFpbHMgb2YgdGhlIGxvb2t1cCBwcm9jZXNzIGFyZSBmdWxseQorICAgICAgIGRlc2NyaWJlZCBpbiB0aGUgREVTQ1JJUFRJT04gY2xhdXNlIG9mIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZQorICAgICAgIE1JQiBvYmplY3QuICBJZiBhbnkgdmVyaWZpY2F0aW9uIGZhaWxzIGluIGFueSB3YXkgKGZvciBleGFtcGxlCisgICAgICAgYmVjYXVzZSBvZiBmYWlsdXJlcyBpbiBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiBvciBiZWNhdXNlIG9mIHRoZQorICAgICAgIGxhY2sgb2YgYW4gYXBwcm9wcmlhdGUgcm93IGluIHRoZSBzbm1wVGxzdG1DZXJ0VG9UU05UYWJsZSkgdGhlbiB0aGUKKyAgICAgICBzZXNzaW9uIGVzdGFibGlzaG1lbnQgTVVTVCBmYWlsLCBhbmQgdGhlCisgICAgICAgc25tcFRsc3RtU2Vzc2lvbkludmFsaWRDbGllbnRDZXJ0aWZpY2F0ZXMgb2JqZWN0IGlzIGluY3JlbWVudGVkLiAgSWYKKyAgICAgICB0aGUgc2Vzc2lvbiBjYW4gbm90IGJlIG9wZW5lZCBmb3IgYW55IHJlYXNvbiBhdCBhbGwsIGluY2x1ZGluZworICAgICAgIGNyeXB0b2dyYXBoaWMgdmVyaWZpY2F0aW9uIGZhaWx1cmVzLCB0aGVuIHRoZQorICAgICAgIHNubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYW5kIHByb2Nlc3NpbmcKKyAgICAgICBzdG9wcy4KKworICAgICAgIFNlcnZlcnMgdGhhdCB3aXNoIHRvIHN1cHBvcnQgbXVsdGlwbGUgcHJpbmNpcGFscyBhdCBhIHBhcnRpY3VsYXIgcG9ydAorICAgICAgIFNIT1VMRCBtYWtlIHVzZSBvZiBhIChEKVRMUyBleHRlbnNpb24gdGhhdCBhbGxvd3Mgc2VydmVyLXNpZGUKKyAgICAgICBwcmluY2lwYWwgc2VsZWN0aW9uIGxpa2UgdGhlIFNlcnZlciBOYW1lIEluZGljYXRpb24gZXh0ZW5zaW9uIGRlZmluZWQKKyAgICAgICBpbiBTZWN0aW9uIDMuMSBvZiBbUkZDNDM2Nl0uICBTdXBwb3J0aW5nIHRoaXMgd2lsbCBhbGxvdywgZm9yCisgICAgICAgZXhhbXBsZSwgc2VuZGluZyBub3RpZmljYXRpb25zIHRvIGEgc3BlY2lmaWMgcHJpbmNpcGFsIGF0IGEgZ2l2ZW4gVENQCisgICAgICAgb3IgVURQIHBvcnQuCisgICAgKi8KKyAgICAvKiBJbXBsZW1lbnRhdGlvbiBub3RlczoKKyAgICAgICAtIHdlIGV4cGVjdCBmaW5nZXJwcmludHMgdG8gYmUgc3RvcmVkIGluIHRoZSB0cmFuc3BvcnQgY29uZmlnCisgICAgICAgLSB3ZSBkbyBub3QgY3VycmVudGx5IHN1cHBvcnQgbXVsaXRwbGUgcHJpbmNpcGFscyBhbmQgb25seSBvZmZlciBvbmUKKyAgICAqLworICAgIGlmICgocmMgPSBuZXRzbm1wX3Rsc2Jhc2VfdmVyaWZ5X2NsaWVudF9jZXJ0KHNzbCwgdGxzZGF0YSkpCisgICAgICAgICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAvKiBYWFg6IGZyZWUgbmVlZGVkIG1lbW9yeSAqLworICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiVExTVENQOiBGYWxpZWQgY2hlY2tpbmcgY2xpZW50IGNlcnRpZmljYXRlXG4iKTsKKyAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTklOVkFMSURDTElFTlRDRVJUSUZJQ0FURVMpOworICAgICAgICBTU0xfc2h1dGRvd24odGxzZGF0YS0+c3NsKTsKKyAgICAgICAgU1NMX2ZyZWUodGxzZGF0YS0+c3NsKTsKKyAgICAgICAgdGxzZGF0YS0+YWNjZXB0ZWRfYmlvID0gTlVMTDsgLyogZnJlZWQgYnkgU1NMX2ZyZWUgKi8KKyAgICAgICAgdGxzZGF0YS0+c3NsID0gTlVMTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworCisgICAgLyogWFhYOiBjaGVjayBhY2NlcHRhbmNlIGNyaXRlcmlhIGhlcmUgKi8KKworICAgIERFQlVHTVNHVEwoKCJ0bHN0Y3AiLCAiYWNjZXB0IHN1Y2NlZWRlZCBvbiBzb2NrICVkXG4iLCB0LT5zb2NrKSk7CisKKyAgICAvKiBSRkM1OTUzIFNlY3Rpb24gNS4xLjIgc3RlcCAxLCBwYXJ0Mjo6CisgICAgICogSWYgdGhpcyBpcyB0aGUgZmlyc3QgbWVzc2FnZSByZWNlaXZlZCB0aHJvdWdoIHRoaXMgc2Vzc2lvbiBhbmQKKyAgICAgdGhlIHNlc3Npb24gZG9lcyBub3QgaGF2ZSBhbiBhc3NpZ25lZCB0bHN0bVNlc3Npb25JRCB5ZXQgdGhlbiB0aGUKKyAgICAgc25tcFRsc3RtU2Vzc2lvbkFjY2VwdHMgY291bnRlciBpcyBpbmNyZW1lbnRlZCBhbmQgYQorICAgICB0bHN0bVNlc3Npb25JRCBmb3IgdGhlIHNlc3Npb24gaXMgY3JlYXRlZC4gIFRoaXMgd2lsbCBvbmx5IGhhcHBlbgorICAgICBvbiB0aGUgc2VydmVyIHNpZGUgb2YgYSBjb25uZWN0aW9uIGJlY2F1c2UgYSBjbGllbnQgd291bGQgaGF2ZQorICAgICBhbHJlYWR5IGFzc2lnbmVkIGEgdGxzdG1TZXNzaW9uSUQgZHVyaW5nIHRoZSBvcGVuU2Vzc2lvbigpCisgICAgIGludm9jYXRpb24uICBJbXBsZW1lbnRhdGlvbnMgbWF5IGhhdmUgcGVyZm9ybWVkIHRoZSBwcm9jZWR1cmVzCisgICAgIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUuMy4yIHByaW9yIHRvIHRoaXMgcG9pbnQgb3IgdGhleSBtYXkKKyAgICAgcGVyZm9ybSB0aGVtIG5vdywgYnV0IHRoZSBwcm9jZWR1cmVzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDUuMy4yCisgICAgIE1VU1QgYmUgcGVyZm9ybWVkIGJlZm9yZSBjb250aW51aW5nIGJleW9uZCB0aGlzIHBvaW50LgorICAgICovCisgICAgLyogV2UncmUgdGFraW5nIG9wdGlvbiAyIGFuZCBpbmNyZW1lbnRpbmcgdGhlIHNlc3Npb24gYWNjZXB0cyBoZXJlCisgICAgICAgcmF0aGVyIHRoYW4gdXBvbiByZWNlaXZpbmcgdGhlIGZpcnN0IHBhY2tldCAqLworICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05BQ0NFUFRTKTsKKworICAgIC8qIFhYWDogY2hlY2sgdGhhdCBpdCByZXR1cm5zIHNvbWV0aGluZyBzbyB3ZSBjYW4gZnJlZSBzdHVmZj8gKi8KKyAgICByZXR1cm4gQklPX2dldF9mZCh0bHNkYXRhLT5hY2NlcHRlZF9iaW8sIE5VTEwpOworfQorCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdGxzdGNwX29wZW4obmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgX25ldHNubXBUTFNCYXNlRGF0YSAqdGxzZGF0YTsKKyAgICBCSU8gKmJpbzsKKyAgICBTU0xfQ1RYICpjdHg7CisgICAgU1NMICpzc2w7CisgICAgaW50IHJjID0gMDsKKyAgICBfbmV0c25tcF92ZXJpZnlfaW5mbyAqdmVyaWZ5X2luZm87CisKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4odCAhPSBOVUxMLCBOVUxMKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4odC0+ZGF0YSAhPSBOVUxMLCBOVUxMKTsKKyAgICBuZXRzbm1wX2Fzc2VydF9vcl9yZXR1cm4oc2l6ZW9mKF9uZXRzbm1wVExTQmFzZURhdGEpID09IHQtPmRhdGFfbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMKTsKKworICAgIHRsc2RhdGEgPSB0LT5kYXRhOworICAgIAorICAgIGlmICh0bHNkYXRhLT5mbGFncyAmIE5FVFNOTVBfVExTQkFTRV9JU19DTElFTlQpIHsKKyAgICAgICAgLyogSXMgdGhlIGNsaWVudCAqLworCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogIEVzdGFibGlzaGluZyBhIFNlc3Npb24gYXMgYSBDbGllbnQKKyAgICAgICAgICogICAgMSkgIFRoZSBzbm1wVGxzdG1TZXNzaW9uT3BlbnMgY291bnRlciBpcyBpbmNyZW1lbnRlZC4KKyAgICAgICAgICovCisgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVOUyk7CisKKyAgICAgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMy4xOiAgRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgICAgIDIpICBUaGUgY2xpZW50IHNlbGVjdHMgdGhlIGFwcHJvcHJpYXRlIGNlcnRpZmljYXRlIGFuZCBjaXBoZXJfc3VpdGVzCisgICAgICAgICAgICAgIGZvciB0aGUga2V5IGFncmVlbWVudCBiYXNlZCBvbiB0aGUgdG1TZWN1cml0eU5hbWUgYW5kIHRoZQorICAgICAgICAgICAgICB0bVJlcXVlc3RlZFNlY3VyaXR5TGV2ZWwgZm9yIHRoZSBzZXNzaW9uLiAgRm9yIHNlc3Npb25zIGJlaW5nCisgICAgICAgICAgICAgIGVzdGFibGlzaGVkIGFzIGEgcmVzdWx0IG9mIGEgU05NUC1UQVJHRVQtTUlCIGJhc2VkIG9wZXJhdGlvbiwgdGhlCisgICAgICAgICAgICAgIGNlcnRpZmljYXRlIHdpbGwgcG90ZW50aWFsbHkgaGF2ZSBiZWVuIGlkZW50aWZpZWQgdmlhIHRoZQorICAgICAgICAgICAgICBzbm1wVGxzdG1QYXJhbXNUYWJsZSBtYXBwaW5nIGFuZCB0aGUgY2lwaGVyX3N1aXRlcyB3aWxsIGhhdmUgdG8KKyAgICAgICAgICAgICAgYmUgdGFrZW4gZnJvbSBzeXN0ZW0td2lkZSBvciBpbXBsZW1lbnRhdGlvbi1zcGVjaWZpYworICAgICAgICAgICAgICBjb25maWd1cmF0aW9uLiAgSWYgbm8gcm93IGluIHRoZSBzbm1wVGxzdG1QYXJhbXNUYWJsZSBleGlzdHMgdGhlbgorICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbnMgTUFZIGNob29zZSB0byBlc3RhYmxpc2ggdGhlIGNvbm5lY3Rpb24gdXNpbmcgYQorICAgICAgICAgICAgICBkZWZhdWx0IGNsaWVudCBjZXJ0aWZpY2F0ZSBhdmFpbGFibGUgdG8gdGhlIGFwcGxpY2F0aW9uLgorICAgICAgICAgICAgICBPdGhlcndpc2UsIHRoZSBjZXJ0aWZpY2F0ZSBhbmQgYXBwcm9wcmlhdGUgY2lwaGVyX3N1aXRlcyB3aWxsCisgICAgICAgICAgICAgIG5lZWQgdG8gYmUgcGFzc2VkIHRvIHRoZSBvcGVuU2Vzc2lvbigpIEFTSSBhcyBzdXBwbGVtZW50YWwKKyAgICAgICAgICAgICAgaW5mb3JtYXRpb24gb3IgY29uZmlndXJlZCB0aHJvdWdoIGFuIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudAorICAgICAgICAgICAgICBtZWNoYW5pc20uICBJdCBpcyBhbHNvIGltcGxlbWVudGF0aW9uLWRlcGVuZGVudCBhbmQgcG9zc2libHkKKyAgICAgICAgICAgICAgcG9saWN5LWRlcGVuZGVudCBob3cgdG1SZXF1ZXN0ZWRTZWN1cml0eUxldmVsIHdpbGwgYmUgdXNlZCB0bworICAgICAgICAgICAgICBpbmZsdWVuY2UgdGhlIHNlY3VyaXR5IGNhcGFiaWxpdGllcyBwcm92aWRlZCBieSB0aGUgKEQpVExTCisgICAgICAgICAgICAgIGNvbm5lY3Rpb24uICBIb3dldmVyIHRoaXMgaXMgZG9uZSwgdGhlIHNlY3VyaXR5IGNhcGFiaWxpdGllcworICAgICAgICAgICAgICBwcm92aWRlZCBieSAoRClUTFMgTVVTVCBiZSBhdCBsZWFzdCBhcyBoaWdoIGFzIHRoZSBsZXZlbCBvZgorICAgICAgICAgICAgICBzZWN1cml0eSBpbmRpY2F0ZWQgYnkgdGhlIHRtUmVxdWVzdGVkU2VjdXJpdHlMZXZlbCBwYXJhbWV0ZXIuCisgICAgICAgICAgICAgIFRoZSBhY3R1YWwgc2VjdXJpdHkgbGV2ZWwgb2YgdGhlIHNlc3Npb24gaXMgcmVwb3J0ZWQgaW4gdGhlCisgICAgICAgICAgICAgIHRtU3RhdGVSZWZlcmVuY2UgY2FjaGUgYXMgdG1TZWN1cml0eUxldmVsLiAgRm9yIChEKVRMUyB0byBwcm92aWRlCisgICAgICAgICAgICAgIHN0cm9uZyBhdXRoZW50aWNhdGlvbiwgZWFjaCBwcmluY2lwYWwgYWN0aW5nIGFzIGEgY29tbWFuZAorICAgICAgICAgICAgICBnZW5lcmF0b3IgU0hPVUxEIGhhdmUgaXRzIG93biBjZXJ0aWZpY2F0ZS4KKyAgICAgICAgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICBJbXBsZW1lbnRhdGlvbiBub3Rlczogd2UgZG8gbW9zdCBvZiB0aGlzIGluIHRoZQorICAgICAgICAgIHNzbGN0eF9jbGllbnRfc2V0dXAgVGhlIHRyYW5zcG9ydCBzaG91bGQgaGF2ZSBiZWVuCisgICAgICAgICAgZl9jb25maWcoKWVkIHdpdGggdGhlIHByb3BlciBmaW5nZXJwcmludHMgdG8gdXNlICh3aGljaCBpcworICAgICAgICAgIHN0b3JlZCBpbiB0bHNkYXRhKSwgb3Igd2UnbGwgdXNlIHRoZSBkZWZhdWx0IGlkZW50aXR5CisgICAgICAgICAgZmluZ2VycHJpbnQgaWYgdGhhdCBjYW4gYmUgZm91bmQuCisgICAgICAgICovCisKKyAgICAgICAgLyogWFhYOiBjaGVjayBzZWN1cml0eUxldmVsIGFuZCBlbnN1cmUgbm8gTlVMTCBmaW5nZXJwcmludHMgYXJlIHVzZWQgKi8KKworICAgICAgICAvKiBzZXQgdXAgdGhlIG5lZWRlZCBTU0wgY29udGV4dCAqLworICAgICAgICB0bHNkYXRhLT5zc2xfY29udGV4dCA9IGN0eCA9CisgICAgICAgICAgICBzc2xjdHhfY2xpZW50X3NldHVwKFRMU3YxX21ldGhvZCgpLCB0bHNkYXRhKTsKKyAgICAgICAgaWYgKCFjdHgpIHsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJmYWlsZWQgdG8gY3JlYXRlIFRMUyBjb250ZXh0XG4iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisKKyAgICAgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMy4xOiAgRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgICAgICAzKSAgVXNpbmcgdGhlIGRlc3RUcmFuc3BvcnREb21haW4gYW5kIGRlc3RUcmFuc3BvcnRBZGRyZXNzIHZhbHVlcywKKyAgICAgICAgICAgICAgIHRoZSBjbGllbnQgd2lsbCBpbml0aWF0ZSB0aGUgKEQpVExTIGhhbmRzaGFrZSBwcm90b2NvbCB0bworICAgICAgICAgICAgICAgZXN0YWJsaXNoIHNlc3Npb24ga2V5cyBmb3IgbWVzc2FnZSBpbnRlZ3JpdHkgYW5kIGVuY3J5cHRpb24uCisgICAgICAgICovCisgICAgICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGU6CisgICAgICAgICAgIFRoZSB0cmFuc3BvcnQgZG9tYWluIGFuZCBhZGRyZXNzIGFyZSBwcmUtcHJvY2Vzc2VkIGJ5IHRoaXMgcG9pbnQKKyAgICAgICAgKi8KKworICAgICAgICAvKiBDcmVhdGUgYSBCSU8gY29ubmVjdGlvbiBmb3IgaXQgKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RjcCIsICJjb25uZWN0aW5nIHRvIHRsc3RjcCAlc1xuIiwKKwkJICAgIHRsc2RhdGEtPmFkZHJfc3RyaW5nKSk7CisgICAgICAgIHQtPnJlbW90ZSA9ICh2b2lkICopIHN0cmR1cCh0bHNkYXRhLT5hZGRyX3N0cmluZyk7CisgICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSBzdHJsZW4odGxzZGF0YS0+YWRkcl9zdHJpbmcpICsgMTsKKworICAgICAgICBiaW8gPSBCSU9fbmV3X2Nvbm5lY3QodGxzZGF0YS0+YWRkcl9zdHJpbmcpOworCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogIEVzdGFibGlzaGluZyBhIFNlc3Npb24gYXMgYSBDbGllbnQKKyAgICAgICAgICAgMykgY29udGludWVkOgorICAgICAgICAgICAgICBJZiB0aGUgYXR0ZW1wdCB0byBlc3RhYmxpc2ggYSBzZXNzaW9uIGlzIHVuc3VjY2Vzc2Z1bCwgdGhlbgorICAgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uT3BlbkVycm9ycyBpcyBpbmNyZW1lbnRlZCwgYW4gZXJyb3IgaW5kaWNhdGlvbiBpcworICAgICAgICAgICAgICByZXR1cm5lZCwgYW5kIHByb2Nlc3Npbmcgc3RvcHMuCisgICAgICAgICovCisKKyAgICAgICAgaWYgKE5VTEwgPT0gYmlvKSB7CisgICAgICAgICAgICBzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMoU1RBVF9UTFNUTV9TTk1QVExTVE1TRVNTSU9OT1BFTkVSUk9SUyk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzdGNwOiBmYWlsZWQgdG8gY3JlYXRlIGJpb1xuIik7CisgICAgICAgICAgICBfb3BlbnNzbF9sb2dfZXJyb3IocmMsIE5VTEwsICJCSU8gY3JlYXRpb24iKTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgICAgICAKKworICAgICAgICAvKiBUZWxsIHRoZSBCSU8gdG8gYWN0dWFsbHkgZG8gdGhlIGNvbm5lY3Rpb24gKi8KKyAgICAgICAgaWYgKChyYyA9IEJJT19kb19jb25uZWN0KGJpbykpIDw9IDApIHsKKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVORVJST1JTKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0bHN0Y3A6IGZhaWxlZCB0byBjb25uZWN0IHRvICVzXG4iLAorCQkgICAgIHRsc2RhdGEtPmFkZHJfc3RyaW5nKTsKKyAgICAgICAgICAgIF9vcGVuc3NsX2xvZ19lcnJvcihyYywgTlVMTCwgIkJJT19kb19jb25uZWN0Iik7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBDcmVhdGUgdGhlIFNTTCBsYXllciBvbiB0b3Agb2YgdGhlIHNvY2tldCBiaW8gKi8KKyAgICAgICAgc3NsID0gdGxzZGF0YS0+c3NsID0gU1NMX25ldyhjdHgpOworICAgICAgICBpZiAoTlVMTCA9PSBzc2wpIHsKKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVORVJST1JTKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0bHN0Y3A6IGZhaWxlZCB0byBjcmVhdGUgYSBTU0wgY29ubmVjdGlvblxuIik7CisgICAgICAgICAgICBCSU9fZnJlZShiaW8pOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIC8qIEJpbmQgdGhlIFNTTCBsYXllciB0byB0aGUgQklPICovIAorICAgICAgICBTU0xfc2V0X2Jpbyhzc2wsIGJpbywgYmlvKTsKKyAgICAgICAgU1NMX3NldF9tb2RlKHNzbCwgU1NMX01PREVfQVVUT19SRVRSWSk7CisKKyAgICAgICAgdmVyaWZ5X2luZm8gPSBTTk1QX01BTExPQ19UWVBFREVGKF9uZXRzbm1wX3ZlcmlmeV9pbmZvKTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdmVyaWZ5X2luZm8pIHsKKyAgICAgICAgICAgIHNubXBfaW5jcmVtZW50X3N0YXRpc3RpYyhTVEFUX1RMU1RNX1NOTVBUTFNUTVNFU1NJT05PUEVORVJST1JTKTsKKyAgICAgICAgICAgIHNubXBfbG9nKExPR19FUlIsICJ0bHN0Y3A6IGZhaWxlZCB0byBjcmVhdGUgYSBTU0wgY29ubmVjdGlvblxuIik7CisgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsKTsKKyAgICAgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIFNTTF9zZXRfZXhfZGF0YShzc2wsIHRsc19nZXRfdmVyaWZ5X2luZm9faW5kZXgoKSwgdmVyaWZ5X2luZm8pOworCisgICAgICAgIC8qIFRoZW4gaGF2ZSBTU0wgZG8gaXQncyBjb25uZWN0aW9uIG92ZXIgdGhlIEJJTyAqLworICAgICAgICBpZiAoKHJjID0gU1NMX2Nvbm5lY3Qoc3NsKSkgPD0gMCkgeworICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTk9QRU5FUlJPUlMpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgInRsc3RjcDogZmFpbGVkIHRvIHNzbF9jb25uZWN0XG4iKTsKKyAgICAgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgICAgICAzKSBjb250aW51ZWQ6CisgICAgICAgICAgICAgIElmIHRoZSBzZXNzaW9uIGZhaWxlZCB0byBvcGVuIGJlY2F1c2UgdGhlIHByZXNlbnRlZAorICAgICAgICAgICAgICBzZXJ2ZXIgY2VydGlmaWNhdGUgd2FzIHVua25vd24gb3IgaW52YWxpZCB0aGVuIHRoZQorICAgICAgICAgICAgICBzbm1wVGxzdG1TZXNzaW9uVW5rbm93blNlcnZlckNlcnRpZmljYXRlIG9yCisgICAgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIE1VU1QgYmUKKyAgICAgICAgICAgICAgaW5jcmVtZW50ZWQgYW5kIGEgc25tcFRsc3RtU2VydmVyQ2VydGlmaWNhdGVVbmtub3duIG9yCisgICAgICAgICAgICAgIHNubXBUbHN0bVNlcnZlckludmFsaWRDZXJ0aWZpY2F0ZSBub3RpZmljYXRpb24gU0hPVUxEIGJlCisgICAgICAgICAgICAgIHNlbnQgYXMgYXBwcm9wcmlhdGUuICBSZWFzb25zIGZvciBzZXJ2ZXIgY2VydGlmaWNhdGUKKyAgICAgICAgICAgICAgaW52YWxpZGF0aW9uIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sCisgICAgICAgICAgICAgIGNyeXB0b2dyYXBoaWMgdmFsaWRhdGlvbiBmYWlsdXJlcyBhbmQgYW4gdW5leHBlY3RlZAorICAgICAgICAgICAgICBwcmVzZW50ZWQgY2VydGlmaWNhdGUgaWRlbnRpdHkuCisgICAgICAgICovCisKKyAgICAgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMy4xOiBFc3RhYmxpc2hpbmcgYSBTZXNzaW9uIGFzIGEgQ2xpZW50CisgICAgICAgICAgIDQpICBUaGUgKEQpVExTIGNsaWVudCBNVVNUIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIChEKVRMUyBzZXJ2ZXIncworICAgICAgICAgICAgICAgcHJlc2VudGVkIGNlcnRpZmljYXRlIGlzIHRoZSBleHBlY3RlZCBjZXJ0aWZpY2F0ZS4gIFRoZSAoRClUTFMKKyAgICAgICAgICAgICAgIGNsaWVudCBNVVNUIE5PVCB0cmFuc21pdCBTTk1QIG1lc3NhZ2VzIHVudGlsIHRoZSBzZXJ2ZXIKKyAgICAgICAgICAgICAgIGNlcnRpZmljYXRlIGhhcyBiZWVuIGF1dGhlbnRpY2F0ZWQsIHRoZSBjbGllbnQgY2VydGlmaWNhdGUgaGFzCisgICAgICAgICAgICAgICBiZWVuIHRyYW5zbWl0dGVkIGFuZCB0aGUgVExTIGNvbm5lY3Rpb24gaGFzIGJlZW4gZnVsbHkKKyAgICAgICAgICAgICAgIGVzdGFibGlzaGVkLgorCisgICAgICAgICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCBmcm9tIGNvbmZpZ3VyYXRpb24gYmFzZWQKKyAgICAgICAgICAgICAgIG9uIFNOTVAtVEFSR0VULU1JQiBjb25maWd1cmF0aW9uLCB0aGVuIHRoZSBzbm1wVGxzdG1BZGRyVGFibGUKKyAgICAgICAgICAgICAgIERFU0NSSVBUSU9OIGNsYXVzZSBkZXNjcmliZXMgaG93IHRoZSB2ZXJpZmljYXRpb24gaXMgZG9uZSAodXNpbmcKKyAgICAgICAgICAgICAgIGVpdGhlciBhIGNlcnRpZmljYXRlIGZpbmdlcnByaW50LCBvciBhbiBpZGVudGl0eSBhdXRoZW50aWNhdGVkCisgICAgICAgICAgICAgICB2aWEgY2VydGlmaWNhdGlvbiBwYXRoIHZhbGlkYXRpb24pLgorCisgICAgICAgICAgICAgICBJZiB0aGUgY29ubmVjdGlvbiBpcyBiZWluZyBlc3RhYmxpc2hlZCBmb3IgcmVhc29ucyBvdGhlciB0aGFuCisgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZvdW5kIGluIHRoZSBTTk1QLVRBUkdFVC1NSUIgdGhlbiBjb25maWd1cmF0aW9uIGFuZAorICAgICAgICAgICAgICAgcHJvY2VkdXJlcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIGRvY3VtZW50IHNob3VsZCBiZSBmb2xsb3dlZC4KKyAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcyBTSE9VTEQgYmUgc2ltaWxhciBpbiBuYXR1cmUgdG8gdGhvc2UKKyAgICAgICAgICAgICAgIGRlZmluZWQgaW4gdGhlIHNubXBUbHN0bUFkZHJUYWJsZSB0byBlbnN1cmUgY29uc2lzdGVuY3kgYWNyb3NzCisgICAgICAgICAgICAgICBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb24gc3lzdGVtcy4gIEZvciBleGFtcGxlLCBhIGNvbW1hbmQtbGluZQorICAgICAgICAgICAgICAgdG9vbCBmb3IgZ2VuZXJhdGluZyBTTk1QIEdFVHMgbWlnaHQgc3VwcG9ydCBzcGVjaWZ5aW5nIGVpdGhlciB0aGUKKyAgICAgICAgICAgICAgIHNlcnZlcidzIGNlcnRpZmljYXRlIGZpbmdlcnByaW50IG9yIHRoZSBleHBlY3RlZCBob3N0IG5hbWUgYXMgYQorICAgICAgICAgICAgICAgY29tbWFuZCBsaW5lIGFyZ3VtZW50LgorICAgICAgICAqLworCisgICAgICAgIC8qIEltcGxlbWVudGF0aW9uIG5vdGVzOgorICAgICAgICAgICAtIEFsbCByZW1vdGUgY2VydGlmaWNhdGUgZmluZ2VycHJpbnRzIGFyZSBleHBlY3RlZCB0byBiZQorICAgICAgICAgICAgIHN0b3JlZCBpbiB0aGUgdHJhbnNwb3J0J3MgY29uZmlnIGluZm9ybWF0aW9uLiAgVGhpcyBpcworICAgICAgICAgICAgIHRydWUgYm90aCBmb3IgQ0xJIGNsaWVudHMgYW5kIFRBUkdFVC1NSUIgc2Vzc2lvbnMuCisgICAgICAgICAgIC0gbmV0c25tcF90bHNiYXNlX3ZlcmlmeV9zZXJ2ZXJfY2VydCBpbXBsZW1lbnRzIHRoZXNlIGNoZWNrcworICAgICAgICAqLworICAgICAgICBpZiAobmV0c25tcF90bHNiYXNlX3ZlcmlmeV9zZXJ2ZXJfY2VydChzc2wsIHRsc2RhdGEpICE9IFNOTVBFUlJfU1VDQ0VTUykgeworICAgICAgICAgICAgLyogWFhYOiB1bmtub3duIHZzIGludmFsaWQ7IHR3byBjb3VudGVycyAqLworICAgICAgICAgICAgc25tcF9pbmNyZW1lbnRfc3RhdGlzdGljKFNUQVRfVExTVE1fU05NUFRMU1RNU0VTU0lPTlVOS05PV05TRVJWRVJDRVJUSUZJQ0FURSk7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAidGxzdGNwOiBmYWlsZWQgdG8gdmVyaWZ5IHNzbCBjZXJ0aWZpY2F0ZVxuIik7CisgICAgICAgICAgICBTU0xfc2h1dGRvd24oc3NsKTsKKyAgICAgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIFJGQzU5NTMgU2VjdGlvbiA1LjMuMTogRXN0YWJsaXNoaW5nIGEgU2Vzc2lvbiBhcyBhIENsaWVudAorICAgICAgICAgICA1KSAgKEQpVExTIHByb3ZpZGVzIGFzc3VyYW5jZSB0aGF0IHRoZSBhdXRoZW50aWNhdGVkIGlkZW50aXR5IGhhcworICAgICAgICAgICAgICAgYmVlbiBzaWduZWQgYnkgYSB0cnVzdGVkIGNvbmZpZ3VyZWQgY2VydGlmaWNhdGlvbiBhdXRob3JpdHkuICBJZgorICAgICAgICAgICAgICAgdmVyaWZpY2F0aW9uIG9mIHRoZSBzZXJ2ZXIncyBjZXJ0aWZpY2F0ZSBmYWlscyBpbiBhbnkgd2F5IChmb3IKKyAgICAgICAgICAgICAgIGV4YW1wbGUgYmVjYXVzZSBvZiBmYWlsdXJlcyBpbiBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiBvciB0aGUKKyAgICAgICAgICAgICAgIHByZXNlbnRlZCBpZGVudGl0eSBkaWQgbm90IG1hdGNoIHRoZSBleHBlY3RlZCBuYW1lZCBlbnRpdHkpIHRoZW4KKyAgICAgICAgICAgICAgIHRoZSBzZXNzaW9uIGVzdGFibGlzaG1lbnQgTVVTVCBmYWlsLCB0aGUKKyAgICAgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIG9iamVjdCBpcyBpbmNyZW1lbnRlZC4KKyAgICAgICAgICAgICAgIElmIHRoZSBzZXNzaW9uIGNhbiBub3QgYmUgb3BlbmVkIGZvciBhbnkgcmVhc29uIGF0IGFsbCwgaW5jbHVkaW5nCisgICAgICAgICAgICAgICBjcnlwdG9ncmFwaGljIHZlcmlmaWNhdGlvbiBmYWlsdXJlcywgdGhlbiB0aGUKKyAgICAgICAgICAgICAgIHNubXBUbHN0bVNlc3Npb25PcGVuRXJyb3JzIGNvdW50ZXIgaXMgaW5jcmVtZW50ZWQgYW5kIHByb2Nlc3NpbmcKKyAgICAgICAgICAgICAgIHN0b3BzLgorCisgICAgICAgICovCisgICAgICAgIC8qIFhYWDogYWRkIHNubXBUbHN0bVNlc3Npb25JbnZhbGlkU2VydmVyQ2VydGlmaWNhdGVzIG9uCisgICAgICAgICAgIGNyeXB0byBmYWlsdXJlICovCisKKyAgICAgICAgLyogUkZDNTk1MyBTZWN0aW9uIDUuMy4xOiBFc3RhYmxpc2hpbmcgYSBTZXNzaW9uIGFzIGEgQ2xpZW50CisgICAgICAgICAgIDYpICBUaGUgVExTVE0tc3BlY2lmaWMgc2Vzc2lvbiBpZGVudGlmaWVyICh0bHN0bVNlc3Npb25JRCkgaXMgc2V0IGluCisgICAgICAgICAgIHRoZSB0bVNlc3Npb25JRCBvZiB0aGUgdG1TdGF0ZVJlZmVyZW5jZSBwYXNzZWQgdG8gdGhlIFRMUworICAgICAgICAgICBUcmFuc3BvcnQgTW9kZWwgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc2Vzc2lvbiBoYXMgYmVlbiBlc3RhYmxpc2hlZAorICAgICAgICAgICBzdWNjZXNzZnVsbHkgYW5kIHRvIHBvaW50IHRvIGEgc3BlY2lmaWMgKEQpVExTIGNvbm5lY3Rpb24gZm9yCisgICAgICAgICAgIGZ1dHVyZSB1c2UuICBUaGUgdGxzdG1TZXNzaW9uSUQgaXMgYWxzbyBzdG9yZWQgaW4gdGhlIExDRCBmb3IKKyAgICAgICAgICAgbGF0ZXIgbG9va3VwIGR1cmluZyBwcm9jZXNzaW5nIG9mIGluY29taW5nIG1lc3NhZ2VzCisgICAgICAgICAgIChTZWN0aW9uIDUuMS4yKS4KKyAgICAgICAgKi8KKyAgICAgICAgLyogSW1wbGVtZW50YXRpb24gbm90ZXM6CisgICAgICAgICAgIC0gdGhlIHRsc2RhdGEgcG9pbnRlciBpcyB1c2VkIGFzIG91ciBzZXNzaW9uIGlkZW50aWZpZXIsIGFzCisgICAgICAgICAgICAgbm90ZWQgaW4gdGhlIG5ldHNubXBfdGxzdGNwX3JlY3YoKSBmdW5jdGlvbiBjb21tZW50cy4KKyAgICAgICAgKi8KKworICAgICAgICB0LT5zb2NrID0gQklPX2dldF9mZChiaW8sIE5VTEwpOworCisgICAgfSBlbHNlIHsKKyNpZm5kZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgICAgICAvKiBJcyB0aGUgc2VydmVyICovCisgICAgICAgIAorICAgICAgICAvKiBDcmVhdGUgdGhlIHNvY2tldCBiaW8gKi8KKyAgICAgICAgREVCVUdNU0dUTCgoInRsc3RjcCIsICJsaXN0ZW5pbmcgb24gdGxzdGNwIHBvcnQgJXNcbiIsCisJCSAgICB0bHNkYXRhLT5hZGRyX3N0cmluZykpOworICAgICAgICB0bHNkYXRhLT5hY2NlcHRfYmlvID0gQklPX25ld19hY2NlcHQodGxzZGF0YS0+YWRkcl9zdHJpbmcpOworICAgICAgICB0LT5sb2NhbCA9ICh2b2lkICopIHN0cmR1cCh0bHNkYXRhLT5hZGRyX3N0cmluZyk7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IHN0cmxlbih0bHNkYXRhLT5hZGRyX3N0cmluZykrMTsKKyAgICAgICAgaWYgKE5VTEwgPT0gdGxzZGF0YS0+YWNjZXB0X2JpbykgeworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMU1RDUDogRmFsaWVkIHRvIGNyZWF0ZSBhIGFjY2VwdCBCSU9cbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBvcGVuc3NsIHJlcXVpcmVzIGFuIGluaXRpYWwgYWNjZXB0IHRvIGJpbmQoKSB0aGUgc29ja2V0ICovCisgICAgICAgIGlmIChCSU9fZG9fYWNjZXB0KHRsc2RhdGEtPmFjY2VwdF9iaW8pIDw9IDApIHsKKwkgICAgX29wZW5zc2xfbG9nX2Vycm9yKHJjLCB0bHNkYXRhLT5zc2wsICJCSU9fZG9fX2FjY2VwdCIpOworICAgICAgICAgICAgc25tcF9sb2coTE9HX0VSUiwgIlRMU1RDUDogRmFsaWVkIHRvIGRvIGZpcnN0IGFjY2VwdCBvbiB0aGUgVExTIGFjY2VwdCBCSU9cbiIpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKworICAgICAgICAvKiBjcmVhdGUgdGhlIE9wZW5TU0wgVExTIGNvbnRleHQgKi8KKyAgICAgICAgdGxzZGF0YS0+c3NsX2NvbnRleHQgPQorICAgICAgICAgICAgc3NsY3R4X3NlcnZlcl9zZXR1cChUTFN2MV9tZXRob2QoKSk7CisKKyAgICAgICAgdC0+c29jayA9IEJJT19nZXRfZmQodGxzZGF0YS0+YWNjZXB0X2JpbywgTlVMTCk7CisgICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgfQorICAgIHJldHVybiB0OworfQorCisvKgorICogQ3JlYXRlIGEgVExTLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAorICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90bHN0Y3BfdHJhbnNwb3J0KGNvbnN0IGNoYXIgKmFkZHJfc3RyaW5nLCBpbnQgaXNzZXJ2ZXIpCit7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworICAgIF9uZXRzbm1wVExTQmFzZURhdGEgKnRsc2RhdGE7CisgICAgY2hhciAqY3A7CisgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworICAgIAorI2lmZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICBpZiAoaXNzZXJ2ZXIpCisgICAgICAgIHJldHVybiBOVUxMOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIC8qIGFsbG9jYXRlIG91ciB0cmFuc3BvcnQgc3RydWN0dXJlICovCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIGlmIChOVUxMID09IHQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgLyogYWxsb2NhdGUgb3VyIFRMUyBzcGVjaWZpYyBkYXRhICovCisgICAgaWYgKE5VTEwgPT0gKHRsc2RhdGEgPSBuZXRzbm1wX3Rsc2Jhc2VfYWxsb2NhdGVfdGxzZGF0YSh0LCBpc3NlcnZlcikpKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIGlmICghaXNzZXJ2ZXIpCisgICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVExTQkFTRV9JU19DTElFTlQ7CisKKyAgICB0bHNkYXRhLT5hZGRyX3N0cmluZyA9IHN0cmR1cChhZGRyX3N0cmluZyk7CisKKyAgICAvKiBzZWUgaWYgd2UgY2FuIGV4dHJhY3QgdGhlIHJlbW90ZSBob3N0bmFtZSAqLworICAgIGlmICghaXNzZXJ2ZXIgJiYgdGxzZGF0YSAmJiBhZGRyX3N0cmluZykgeworICAgICAgICAvKiBzZWFyY2ggZm9yIGEgOiAqLworICAgICAgICBpZiAoTlVMTCAhPSAoY3AgPSBzdHJyY2hyKGFkZHJfc3RyaW5nLCAnOicpKSkgeworICAgICAgICAgICAgc3ByaW50ZihidWYsICIlLipzIiwKKyAgICAgICAgICAgICAgICAgICAgKGludCkgU05NUF9NSU4oY3AgLSBhZGRyX3N0cmluZywgc2l6ZW9mKGJ1ZikgLSAxKSwKKyAgICAgICAgICAgICAgICAgICAgYWRkcl9zdHJpbmcpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogZWxzZSB0aGUgZW50aXJlIHNwZWMgaXMgYSBob3N0IG5hbWUgb25seSAqLworICAgICAgICAgICAgc3RybGNweShidWYsIGFkZHJfc3RyaW5nLCBzaXplb2YoYnVmKSk7CisgICAgICAgIH0KKyAgICAgICAgdGxzZGF0YS0+dGhlaXJfaG9zdG5hbWUgPSBzdHJkdXAoYnVmKTsKKyAgICB9CisKKyAgICB0LT5kYXRhID0gdGxzZGF0YTsKKyAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihfbmV0c25tcFRMU0Jhc2VEYXRhKTsKKworICAgIC8qCisgICAgICogU2V0IERvbWFpbgorICAgICAqLworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBUTFNUQ1BEb21haW47ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIHQtPmRvbWFpbl9sZW5ndGggPSBuZXRzbm1wVExTVENQRG9tYWluX2xlbjsgICAgIAorCisgICAgLyoKKyAgICAgKiAxNi1iaXQgbGVuZ3RoIGZpZWxkLCA4IGJ5dGUgVExTIGhlYWRlciwgMjAgYnl0ZSBJUHY0IGhlYWRlciAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplICAgICAgPSAweGZmZmYgLSA4IC0gMjA7CisgICAgdC0+Zl9yZWN2ICAgICAgICAgID0gbmV0c25tcF90bHN0Y3BfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgICAgICAgPSBuZXRzbm1wX3Rsc3RjcF9zZW5kOworICAgIHQtPmZfb3BlbiAgICAgICAgICA9IG5ldHNubXBfdGxzdGNwX29wZW47CisgICAgdC0+Zl9jbG9zZSAgICAgICAgID0gbmV0c25tcF90bHN0Y3BfY2xvc2U7CisgICAgdC0+Zl9hY2NlcHQgICAgICAgID0gbmV0c25tcF90bHN0Y3BfYWNjZXB0OworICAgIHQtPmZfY29weSAgICAgICAgICA9IG5ldHNubXBfdGxzdGNwX2NvcHk7CisgICAgdC0+Zl9jb25maWcgICAgICAgID0gbmV0c25tcF90bHNiYXNlX2NvbmZpZzsKKyAgICB0LT5mX3NldHVwX3Nlc3Npb24gPSBuZXRzbm1wX3Rsc2Jhc2Vfc2Vzc2lvbl9pbml0OworICAgIHQtPmZfZm10YWRkciAgICAgICA9IG5ldHNubXBfdGxzdGNwX2ZtdGFkZHI7CisKKyAgICB0LT5mbGFncyB8PSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1RVTk5FTEVEIHwgTkVUU05NUF9UUkFOU1BPUlRfRkxBR19TVFJFQU07CisKKyAgICByZXR1cm4gdDsKK30KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90bHN0Y3BfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqZGVmYXVsdF90YXJnZXQpCit7CisgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworCisgICAgaWYgKHN0ciA9PSBOVUxMIHx8ICpzdHIgPT0gJ1wwJykKKyAgICAgICAgc3RyID0gZGVmYXVsdF90YXJnZXQgKyAxOyAvKiBkcm9wIHRoZSBsZWFkaW5nIDogKi8KKyAgICBlbHNlIGlmICghc3RyY2hyKHN0ciwgJzonKSkgeworICAgICAgICAvKiBpdCdzIGVpdGhlciA6cG9ydCBvciA6YWRkcmVzcy4gIFRyeSB0byBndWVzcyB3aGljaC4gKi8KKyAgICAgICAgY29uc3QgY2hhciAqY3A7CisgICAgICAgIGludCBpc3BvcnQgPSAxOworICAgICAgICBmb3IoY3AgPSBzdHI7ICpjcCAhPSAnXDAnOyBjcCsrKSB7CisgICAgICAgICAgICAvKiBpZiBBTEwgbnVtYmVycywgaXQgbXVzdCBiZSBqdXN0IGEgcG9ydCAqLworICAgICAgICAgICAgLyogaWYgaXQgY29udGFpbnMgYW55dGhpbmcgZWxzZSwgYXNzdW1lIGEgaG9zdCBvciBpcCBhZGRyZXNzICovCisgICAgICAgICAgICBpZiAoIWlzZGlnaXQoMHhGRiAmICpjcCkpIHsKKyAgICAgICAgICAgICAgICBpc3BvcnQgPSAwOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpc3BvcnQpIHsKKyAgICAgICAgICAgIC8qIEp1c3QgOk5OTiBjYW4gYmUgcGFzc2VkIHRvIG9wZW5zc2wgKi8KKyAgICAgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwgIjAuMC4wLjA6JXMiLCBzdHIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogYWRkIHRoZSBkZWZhdWx0IHBvcnQgKi8KKyAgICAgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwgIiVzJXMiLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KTsKKyAgICAgICAgfQorICAgICAgICBzdHIgPSBidWY7CisgICAgfQorICAgIHJldHVybiBuZXRzbm1wX3Rsc3RjcF90cmFuc3BvcnQoc3RyLCBsb2NhbCk7Cit9CisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF90bHN0Y3BfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgY2hhciBidWZbU1BSSU5UX01BWF9MRU5dOworCisgICAgLyogZW5zdXJlIGJ1ZiBpcyBiaWcgZW5vdWdoICovCisgICAgaWYgKG9fbGVuID4gU1BSSU5UX01BWF9MRU4gLSAxKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIG1lbWNweShidWYsIG8sIG9fbGVuKTsKKyAgICBidWZbb19sZW5dID0gJ1wwJzsKKworICAgIHJldHVybiBuZXRzbm1wX3Rsc3RjcF90cmFuc3BvcnQoYnVmLCBsb2NhbCk7Cit9CisKK3ZvaWQKK25ldHNubXBfdGxzdGNwX2N0b3Iodm9pZCkKK3sKKyAgICBERUJVR01TR1RMKCgidGxzdGNwIiwgInJlZ2lzdGVyaW5nIFRMUyBjb25zdHJ1Y3RvclxuIikpOworCisgICAgLyogY29uZmlnIHNldHRpbmdzICovCisKKyAgICB0bHN0Y3BEb21haW4ubmFtZSA9IG5ldHNubXBUTFNUQ1BEb21haW47CisgICAgdGxzdGNwRG9tYWluLm5hbWVfbGVuZ3RoID0gbmV0c25tcFRMU1RDUERvbWFpbl9sZW47CisgICAgdGxzdGNwRG9tYWluLnByZWZpeCA9IChjb25zdCBjaGFyKiopY2FsbG9jKDMsIHNpemVvZihjaGFyICopKTsKKyAgICB0bHN0Y3BEb21haW4ucHJlZml4WzBdID0gInRsc3RjcCI7CisgICAgdGxzdGNwRG9tYWluLnByZWZpeFsxXSA9ICJ0bHMiOworCisgICAgdGxzdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIHRsc3RjcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF90bHN0Y3BfY3JlYXRlX3RzdHJpbmc7CisgICAgdGxzdGNwRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3Rsc3RjcF9jcmVhdGVfb3N0cmluZzsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdGxzdGNwRG9tYWluKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBCYXNlRG9tYWluLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ5N2Y3MQotLS0gL2Rldi9udWxsCisrKyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQQmFzZURvbWFpbi5jCkBAIC0wLDAgKzEsNTEzIEBACisvKiBVRFAgYmFzZSB0cmFuc3BvcnQgc3VwcG9ydCBmdW5jdGlvbnMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUEJhc2VEb21haW4uaD4KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NUUklOR19ICisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZWxzZQorI2luY2x1ZGUgPHN0cmluZ3MuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUSU5FVF9JTl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2VuZGlmCisjaWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWYgSEFWRV9ORVREQl9ICisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1lTX1VJT19ICisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2VuZGlmCisjaWZkZWYgV0lOMzIKKyNpbmNsdWRlIDxtc3dzb2NrLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorCisjaWZuZGVmICBNU0dfRE9OVFdBSVQKKyNkZWZpbmUgTVNHX0RPTlRXQUlUIDAKKyNlbmRpZgorCisjaWZuZGVmICBNU0dfTk9TSUdOQUwKKyNkZWZpbmUgTVNHX05PU0lHTkFMIDAKKyNlbmRpZgorCit2b2lkCitfbmV0c25tcF91ZHBfc29ja29wdF9zZXQoaW50IGZkLCBpbnQgbG9jYWwpCit7CisjaWZkZWYgIFNPX0JTRENPTVBBVAorICAgIC8qCisgICAgICogUGF0Y2ggZm9yIExpbnV4LiAgV2l0aG91dCB0aGlzLCBVRFAgcGFja2V0cyB0aGF0IGZhaWwgZ2V0IGFuIElDTVAKKyAgICAgKiByZXNwb25zZS4gIExpbnV4IHR1cm5zIHRoZSBmYWlsZWQgSUNNUCByZXNwb25zZSBpbnRvIGFuIGVycm9yIG1lc3NhZ2UKKyAgICAgKiBhbmQgcmV0dXJuIHZhbHVlLCB1bmxpa2UgYWxsIG90aGVyIE9TJ3MuICAKKyAgICAgKi8KKyAgICBpZiAoMCA9PSBuZXRzbm1wX29zX3ByZW1hdGNoKCJMaW51eCIsIjIuNCIpKQorICAgIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIG9uZSA9IDE7CisgICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6b3B0aW9uIiwgInNldHRpbmcgc29ja2V0IG9wdGlvbiBTT19CU0RDT01QQVRcbiIpKTsKKyAgICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fQlNEQ09NUEFULCAodm9pZCAqKSAmb25lLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihvbmUpKTsKKyAgICB9CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fQlNEQ09NUEFUICovCisgICAgLyoKKyAgICAgKiBTT19SRVVTRUFERFIgd2lsbCBhbGxvdyBtdWx0aXBsZSBhcHBzIHRvIG9wZW4gdGhlIHNhbWUgcG9ydCBhdAorICAgICAqIHRoZSBzYW1lIHRpbWUuIE9ubHkgdGhlIGxhc3Qgb25lIHRvIG9wZW4gdGhlIHNvY2tldCB3aWxsIGdldAorICAgICAqIGRhdGEuIE9idmlvdXNseSwgZm9yIGFuIGFnZW50LCB0aGlzIGlzIGEgYmFkIHRoaW5nLiBUaGVyZSBzaG91bGQKKyAgICAgKiBvbmx5IGJlIG9uZSBsaXN0ZW5lci4KKyAgICAgKi8KKyNpZmRlZiBBTExPV19QT1JUX0hJSkFDS0lORworI2lmZGVmICBTT19SRVVTRUFERFIKKyAgICAvKgorICAgICAqIEFsbG93IHRoZSBzYW1lIHBvcnQgdG8gYmUgc3BlY2lmaWVkIG11bHRpcGxlIHRpbWVzIHdpdGhvdXQgZmFpbGluZy4KKyAgICAgKiAgICAodXNlZnVsIGZvciBhIGxpc3RlbmVyKQorICAgICAqLworICAgIHsKKyAgICAgICAgaW50ICAgICAgICAgICAgIG9uZSA9IDE7CisgICAgICAgIERFQlVHTVNHVEwoKCJzb2NrZXQ6b3B0aW9uIiwgInNldHRpbmcgc29ja2V0IG9wdGlvbiBTT19SRVVTRUFERFJcbiIpKTsKKyAgICAgICAgc2V0c29ja29wdChmZCwgU09MX1NPQ0tFVCwgU09fUkVVU0VBRERSLCAodm9pZCAqKSAmb25lLAorICAgICAgICAgICAgICAgICAgIHNpemVvZihvbmUpKTsKKyAgICB9CisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qU09fUkVVU0VBRERSICovCisjZW5kaWYKKworICAgIC8qCisgICAgICogVHJ5IHRvIHNldCB0aGUgc2VuZCBhbmQgcmVjZWl2ZSBidWZmZXJzIHRvIGEgcmVhc29uYWJseSBsYXJnZSB2YWx1ZSwgc28KKyAgICAgKiB0aGF0IHdlIGNhbiBzZW5kIGFuZCByZWNlaXZlIGJpZyBQRFVzIChkZWZhdWx0cyB0byA4MTkyIGJ5dGVzICghKSBvbgorICAgICAqIFNvbGFyaXMsIGZvciBpbnN0YW5jZSkuICBEb24ndCB3b3JyeSB0b28gbXVjaCBhYm91dCBlcnJvcnMgLS0ganVzdAorICAgICAqIHBsb3VnaCBvbiByZWdhcmRsZXNzLiAgCisgICAgICovCisgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQoZmQsIFNPX1NOREJVRiwgbG9jYWwsIDApOworICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KGZkLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKK30KKworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKSB8fCBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCisjIGlmIGRlZmluZWQoSVBfUkVDVkRTVEFERFIpICYmICFkZWZpbmVkKElQX1NFTkRTUkNBRERSKQorIyAgZGVmaW5lIElQX1NFTkRTUkNBRERSIElQX1JFQ1ZEU1RBRERSIC8qIERyYWdvbkZseSBCU0QgKi8KKyMgZW5kaWYKKworI2RlZmluZSBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb21fc2VuZHRvX2RlZmluZWQKKworZW51bSB7CisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pCisgICAgY21zZ19kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGluX3BrdGluZm8pCisjZWxpZiBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCisgICAgY21zZ19kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpCisjZW5kaWYKK307CisKKyNpZmRlZiBXSU4zMgorI2lmbmRlZiBXU0FJRF9XU0FTRU5ETVNHCisjZGVmaW5lIFdTQUlEX1dTQVNFTkRNU0cgXAorICAgIHsweGE0NDFlNzEyLDB4NzU0ZiwweDQzY2EsezB4ODQsMHhhNywweDBkLDB4ZWUsMHg0NCwweGNmLDB4NjAsMHg2ZH19Cit0eXBlZGVmIElOVCAoV0lOQVBJICogTFBGTl9XU0FTRU5ETVNHKShTT0NLRVQsIExQV1NBTVNHLCBEV09SRCwgTFBEV09SRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQV1NBT1ZFUkxBUFBFRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExQV1NBT1ZFUkxBUFBFRF9DT01QTEVUSU9OX1JPVVRJTkUpOworI2VuZGlmCisKK3N0YXRpYyBMUEZOX1dTQVJFQ1ZNU0cgcGZXU0FSZWN2TXNnOworc3RhdGljIExQRk5fV1NBU0VORE1TRyBwZldTQVNlbmRNc2c7CisjZW5kaWYKKworaW50CituZXRzbm1wX3VkcGJhc2VfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqZnJvbWxlbiwgc3RydWN0IHNvY2thZGRyICpkc3RpcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKmRzdGxlbiwgaW50ICppZl9pbmRleCkKK3sKKyAgICBpbnQgcjsKKyNpZiAhZGVmaW5lZChXSU4zMikKKyAgICBzdHJ1Y3QgaW92ZWMgaW92OworICAgIGNoYXIgY21zZ1tDTVNHX1NQQUNFKGNtc2dfZGF0YV9zaXplKV07CisgICAgc3RydWN0IGNtc2doZHIgKmNtOworICAgIHN0cnVjdCBtc2doZHIgbXNnOworCisgICAgaW92Lmlvdl9iYXNlID0gYnVmOworICAgIGlvdi5pb3ZfbGVuID0gbGVuOworCisgICAgbWVtc2V0KCZtc2csIDAsIHNpemVvZiBtc2cpOworICAgIG1zZy5tc2dfbmFtZSA9IGZyb207CisgICAgbXNnLm1zZ19uYW1lbGVuID0gKmZyb21sZW47CisgICAgbXNnLm1zZ19pb3YgPSAmaW92OworICAgIG1zZy5tc2dfaW92bGVuID0gMTsKKyAgICBtc2cubXNnX2NvbnRyb2wgPSAmY21zZzsKKyAgICBtc2cubXNnX2NvbnRyb2xsZW4gPSBzaXplb2YoY21zZyk7CisKKyAgICByID0gcmVjdm1zZyhzLCAmbXNnLCBNU0dfRE9OVFdBSVQpOworI2Vsc2UgLyogIWRlZmluZWQoV0lOMzIpICovCisgICAgV1NBQlVGIHdzYWJ1ZjsKKyAgICBjaGFyIGNtc2dbV1NBX0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOworICAgIFdTQUNNU0dIRFIgKmNtOworICAgIFdTQU1TRyBtc2c7CisgICAgRFdPUkQgYnl0ZXNfcmVjZWl2ZWQ7CisKKyAgICB3c2FidWYuYnVmID0gYnVmOworICAgIHdzYWJ1Zi5sZW4gPSBsZW47CisKKyAgICBtc2cubmFtZSA9IGZyb207CisgICAgbXNnLm5hbWVsZW4gPSAqZnJvbWxlbjsKKyAgICBtc2cubHBCdWZmZXJzID0gJndzYWJ1ZjsKKyAgICBtc2cuZHdCdWZmZXJDb3VudCA9IDE7CisgICAgbXNnLkNvbnRyb2wubGVuID0gc2l6ZW9mKGNtc2cpOworICAgIG1zZy5Db250cm9sLmJ1ZiA9IGNtc2c7CisgICAgbXNnLmR3RmxhZ3MgPSAwOworCisgICAgaWYgKHBmV1NBUmVjdk1zZykgeworICAgICAgICByID0gcGZXU0FSZWN2TXNnKHMsICZtc2csICZieXRlc19yZWNlaXZlZCwgTlVMTCwgTlVMTCkgPT0gMCA/CisgICAgICAgICAgICBieXRlc19yZWNlaXZlZCA6IC0xOworICAgICAgICAqZnJvbWxlbiA9IG1zZy5uYW1lbGVuOworICAgIH0gZWxzZSB7CisgICAgICAgIHIgPSByZWN2ZnJvbShzLCBidWYsIGxlbiwgTVNHX0RPTlRXQUlULCBmcm9tLCBmcm9tbGVuKTsKKyAgICB9CisjZW5kaWYgLyogIWRlZmluZWQoV0lOMzIpICovCisKKyAgICBpZiAociA9PSAtMSkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6cmVjdiIsICJnb3Qgc291cmNlIGFkZHI6ICVzXG4iLAorICAgICAgICAgICAgICAgIGluZXRfbnRvYSgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKWZyb20pLT5zaW5fYWRkcikpKTsKKworICAgIHsKKyAgICAgICAgLyogR2V0IHRoZSBsb2NhbCBwb3J0IG51bWJlciBmb3IgdXNlIGluIGRpYWdub3N0aWMgbWVzc2FnZXMgKi8KKyAgICAgICAgaW50IHIyID0gZ2V0c29ja25hbWUocywgZHN0aXAsIGRzdGxlbik7CisgICAgICAgIG5ldHNubXBfYXNzZXJ0KHIyID09IDApOworICAgIH0KKworI2lmICFkZWZpbmVkKFdJTjMyKQorICAgIGZvciAoY20gPSBDTVNHX0ZJUlNUSERSKCZtc2cpOyBjbSAhPSBOVUxMOyBjbSA9IENNU0dfTlhUSERSKCZtc2csIGNtKSkgeworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKQorICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gU09MX0lQICYmIGNtLT5jbXNnX3R5cGUgPT0gSVBfUEtUSU5GTykgeworICAgICAgICAgICAgc3RydWN0IGluX3BrdGluZm8qIHNyYyA9IChzdHJ1Y3QgaW5fcGt0aW5mbyAqKUNNU0dfREFUQShjbSk7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChkc3RpcC0+c2FfZmFtaWx5ID09IEFGX0lORVQpOworICAgICAgICAgICAgKChzdHJ1Y3Qgc29ja2FkZHJfaW4qKWRzdGlwKS0+c2luX2FkZHIgPSBzcmMtPmlwaV9hZGRyOworICAgICAgICAgICAgKmlmX2luZGV4ID0gc3JjLT5pcGlfaWZpbmRleDsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJ1ZHBiYXNlOnJlY3YiLAorICAgICAgICAgICAgICAgICAgICAgICAgImdvdCBkZXN0aW5hdGlvbiAobG9jYWwpIGFkZHIgJXMsIGlmYWNlICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKHNyYy0+aXBpX2FkZHIpLCAqaWZfaW5kZXgpKTsKKyAgICAgICAgfQorI2VsaWYgZGVmaW5lZChIQVZFX0lQX1JFQ1ZEU1RBRERSKQorICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1JFQ1ZEU1RBRERSKSB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciogc3JjID0gKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtKTsKKyAgICAgICAgICAgICgoc3RydWN0IHNvY2thZGRyX2luKilkc3RpcCktPnNpbl9hZGRyID0gKnNyYzsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJnb3QgZGVzdGluYXRpb24gKGxvY2FsKSBhZGRyICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKCpzcmMpKSk7CisgICAgICAgIH0KKyNlbmRpZgorICAgIH0KKyNlbHNlIC8qICFkZWZpbmVkKFdJTjMyKSAqLworICAgIGZvciAoY20gPSBXU0FfQ01TR19GSVJTVEhEUigmbXNnKTsgY207IGNtID0gV1NBX0NNU0dfTlhUSERSKCZtc2csIGNtKSkgeworICAgICAgICBpZiAoY20tPmNtc2dfbGV2ZWwgPT0gSVBQUk9UT19JUCAmJiBjbS0+Y21zZ190eXBlID09IElQX1BLVElORk8pIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvKiBzcmMgPSAoc3RydWN0IGluX3BrdGluZm8gKilXU0FfQ01TR19EQVRBKGNtKTsKKyAgICAgICAgICAgIG5ldHNubXBfYXNzZXJ0KGRzdGlwLT5zYV9mYW1pbHkgPT0gQUZfSU5FVCk7CisgICAgICAgICAgICAoKHN0cnVjdCBzb2NrYWRkcl9pbiopZHN0aXApLT5zaW5fYWRkciA9IHNyYy0+aXBpX2FkZHI7CisgICAgICAgICAgICAqaWZfaW5kZXggPSBzcmMtPmlwaV9pZmluZGV4OworICAgICAgICAgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6cmVjdiIsCisgICAgICAgICAgICAgICAgICAgICAgICAiZ290IGRlc3RpbmF0aW9uIChsb2NhbCkgYWRkciAlcywgaWZhY2UgJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b2Eoc3JjLT5pcGlfYWRkciksICppZl9pbmRleCkpOworICAgICAgICB9CisgICAgfQorI2VuZGlmIC8qICFkZWZpbmVkKFdJTjMyKSAqLworICAgIHJldHVybiByOworfQorCitpbnQgbmV0c25tcF91ZHBiYXNlX3NlbmR0byhpbnQgZmQsIHN0cnVjdCBpbl9hZGRyICpzcmNpcCwgaW50IGlmX2luZGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisjaWYgIWRlZmluZWQoV0lOMzIpCisgICAgc3RydWN0IGlvdmVjIGlvdjsKKyAgICBzdHJ1Y3QgbXNnaGRyIG0gPSB7IDAgfTsKKyAgICBjaGFyICAgICAgICAgIGNtc2dbQ01TR19TUEFDRShjbXNnX2RhdGFfc2l6ZSldOworICAgIGludCAgICAgICAgICAgcmM7CisKKyAgICBpb3YuaW92X2Jhc2UgPSBkYXRhOworICAgIGlvdi5pb3ZfbGVuICA9IGxlbjsKKworICAgIG0ubXNnX25hbWUJCT0gcmVtb3RlOworICAgIG0ubXNnX25hbWVsZW4JPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKTsKKyAgICBtLm1zZ19pb3YJCT0gJmlvdjsKKyAgICBtLm1zZ19pb3ZsZW4JPSAxOworICAgIG0ubXNnX2ZsYWdzCQk9IDA7CisKKyAgICBpZiAoc3JjaXAgJiYgc3JjaXAtPnNfYWRkciAhPSBJTkFERFJfQU5ZKSB7CisgICAgICAgIHN0cnVjdCBjbXNnaGRyICpjbTsKKworICAgICAgICBERUJVR01TR1RMKCgidWRwYmFzZTpzZW5kdG8iLCAic2VuZGluZyBmcm9tICVzXG4iLCBpbmV0X250b2EoKnNyY2lwKSkpOworCisgICAgICAgIG1lbXNldChjbXNnLCAwLCBzaXplb2YoY21zZykpOworCisgICAgICAgIG0ubXNnX2NvbnRyb2wgICAgPSAmY21zZzsKKyAgICAgICAgbS5tc2dfY29udHJvbGxlbiA9IHNpemVvZihjbXNnKTsKKworICAgICAgICBjbSA9IENNU0dfRklSU1RIRFIoJm0pOworICAgICAgICBjbS0+Y21zZ19sZW4gPSBDTVNHX0xFTihjbXNnX2RhdGFfc2l6ZSk7CisKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykKKyAgICAgICAgY20tPmNtc2dfbGV2ZWwgPSBTT0xfSVA7CisgICAgICAgIGNtLT5jbXNnX3R5cGUgPSBJUF9QS1RJTkZPOworCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9wa3RpbmZvIGlwaTsKKworICAgICAgICAgICAgbWVtc2V0KCZpcGksIDAsIHNpemVvZihpcGkpKTsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBFeGNlcHQgaW4gdGhlIGNhc2Ugb2YgcmVzcG9uZGluZworICAgICAgICAgICAgICogdG8gYSBicm9hZGNhc3QsIHNldHRpbmcgdGhlIGlmaW5kZXgKKyAgICAgICAgICAgICAqIHdoZW4gcmVzcG9uZGluZyByZXN1bHRzIGluIGluY29ycmVjdAorICAgICAgICAgICAgICogYmVoYXZpb3Igb2YgY2hhbmdpbmcgdGhlIHNvdXJjZSBhZGRyZXNzCisgICAgICAgICAgICAgKiB0aGF0IHRoZSBtYW5hZ2VyIHNlZXMgdGhlIHJlc3BvbnNlCisgICAgICAgICAgICAgKiBjb21lIGZyb20uCisgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgIGlwaS5pcGlfaWZpbmRleCA9IDA7CisjaWYgZGVmaW5lZChjeWd3aW4pCisgICAgICAgICAgICBpcGkuaXBpX2FkZHIuc19hZGRyID0gc3JjaXAtPnNfYWRkcjsKKyNlbHNlCisgICAgICAgICAgICBpcGkuaXBpX3NwZWNfZHN0LnNfYWRkciA9IHNyY2lwLT5zX2FkZHI7CisjZW5kaWYKKyAgICAgICAgICAgIG1lbWNweShDTVNHX0RBVEEoY20pLCAmaXBpLCBzaXplb2YoaXBpKSk7CisgICAgICAgIH0KKworICAgICAgICByYyA9IHNlbmRtc2coZmQsICZtLCBNU0dfTk9TSUdOQUx8TVNHX0RPTlRXQUlUKTsKKyAgICAgICAgaWYgKHJjID49IDAgfHwgZXJybm8gIT0gRUlOVkFMKQorICAgICAgICAgICAgcmV0dXJuIHJjOworCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBlcnJvciBtaWdodCBiZSBjYXVzZWQgYnkgYnJvYWRjYXN0IHNyY2lwIChpLmUuIHdlJ3JlIHJlc3BvbmRpbmcKKyAgICAgICAgICogdG8gYSBicm9hZGNhc3QgcmVxdWVzdCkgLSBzZW5kbXNnIGRvZXMgbm90IGxpa2UgaXQuIFRyeSB0byByZXNlbmQgaXQKKyAgICAgICAgICogdXNpbmcgdGhlIGludGVyZmFjZSBvbiB3aGljaCBpdCB3YXMgcmVjZWl2ZWQKKyAgICAgICAgICovCisKKyAgICAgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6c2VuZHRvIiwgInJlLXNlbmRpbmcgb24gaWZhY2UgJWRcbiIsIGlmX2luZGV4KSk7CisKKyAgICAgICAgeworICAgICAgICAgICAgc3RydWN0IGluX3BrdGluZm8gaXBpOworCisgICAgICAgICAgICBtZW1zZXQoJmlwaSwgMCwgc2l6ZW9mKGlwaSkpOworICAgICAgICAgICAgaXBpLmlwaV9pZmluZGV4ID0gaWZfaW5kZXg7CisjaWYgZGVmaW5lZChjeWd3aW4pCisgICAgICAgICAgICBpcGkuaXBpX2FkZHIuc19hZGRyID0gSU5BRERSX0FOWTsKKyNlbHNlCisgICAgICAgICAgICBpcGkuaXBpX3NwZWNfZHN0LnNfYWRkciA9IElOQUREUl9BTlk7CisjZW5kaWYKKyAgICAgICAgICAgIG1lbWNweShDTVNHX0RBVEEoY20pLCAmaXBpLCBzaXplb2YoaXBpKSk7CisgICAgICAgIH0KKyNlbGlmIGRlZmluZWQoSVBfU0VORFNSQ0FERFIpCisgICAgICAgIGNtLT5jbXNnX2xldmVsID0gSVBQUk9UT19JUDsKKyAgICAgICAgY20tPmNtc2dfdHlwZSA9IElQX1NFTkRTUkNBRERSOworICAgICAgICBtZW1jcHkoKHN0cnVjdCBpbl9hZGRyICopQ01TR19EQVRBKGNtKSwgc3JjaXAsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworI2VuZGlmCisgICAgICAgIHJjID0gc2VuZG1zZyhmZCwgJm0sIE1TR19OT1NJR05BTHxNU0dfRE9OVFdBSVQpOworICAgICAgICBpZiAocmMgPj0gMCB8fCBlcnJubyAhPSBFSU5WQUwpCisgICAgICAgICAgICByZXR1cm4gcmM7CisKKyAgICAgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6c2VuZHRvIiwgInJlLXNlbmRpbmcgd2l0aG91dCBzb3VyY2UgYWRkcmVzc1xuIikpOworICAgICAgICBtLm1zZ19jb250cm9sID0gTlVMTDsKKyAgICAgICAgbS5tc2dfY29udHJvbGxlbiA9IDA7CisgICAgfQorCisgICAgcmV0dXJuIHNlbmRtc2coZmQsICZtLCBNU0dfTk9TSUdOQUx8TVNHX0RPTlRXQUlUKTsKKyNlbHNlIC8qICFkZWZpbmVkKFdJTjMyKSAqLworICAgIFdTQUJVRiAgICAgICAgd3NhYnVmOworICAgIFdTQU1TRyAgICAgICAgbTsKKyAgICBjaGFyICAgICAgICAgIGNtc2dbV1NBX0NNU0dfU1BBQ0Uoc2l6ZW9mKHN0cnVjdCBpbl9wa3RpbmZvKSldOworICAgIERXT1JEICAgICAgICAgYnl0ZXNfc2VudDsKKyAgICBpbnQgICAgICAgICAgIHJjOworCisgICAgd3NhYnVmLmJ1ZiA9IGRhdGE7CisgICAgd3NhYnVmLmxlbiA9IGxlbjsKKworICAgIG1lbXNldCgmbSwgMCwgc2l6ZW9mKG0pKTsKKyAgICBtLm5hbWUgICAgICAgICAgPSByZW1vdGU7CisgICAgbS5uYW1lbGVuICAgICAgID0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbik7CisgICAgbS5scEJ1ZmZlcnMgICAgID0gJndzYWJ1ZjsKKyAgICBtLmR3QnVmZmVyQ291bnQgPSAxOworCisgICAgaWYgKHBmV1NBU2VuZE1zZyAmJiBzcmNpcCAmJiBzcmNpcC0+c19hZGRyICE9IElOQUREUl9BTlkpIHsKKyAgICAgICAgV1NBQ01TR0hEUiAqY207CisKKyAgICAgICAgREVCVUdNU0dUTCgoInVkcGJhc2U6c2VuZHRvIiwgInNlbmRpbmcgZnJvbSBbJWRdICVzXG4iLCBpZl9pbmRleCwKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9hKCpzcmNpcCkpKTsKKworICAgICAgICBtZW1zZXQoY21zZywgMCwgc2l6ZW9mKGNtc2cpKTsKKworICAgICAgICBtLkNvbnRyb2wuYnVmID0gY21zZzsKKyAgICAgICAgbS5Db250cm9sLmxlbiA9IHNpemVvZihjbXNnKTsKKworICAgICAgICBjbSA9IFdTQV9DTVNHX0ZJUlNUSERSKCZtKTsKKyAgICAgICAgY20tPmNtc2dfbGVuID0gV1NBX0NNU0dfTEVOKGNtc2dfZGF0YV9zaXplKTsKKyAgICAgICAgY20tPmNtc2dfbGV2ZWwgPSBJUFBST1RPX0lQOworICAgICAgICBjbS0+Y21zZ190eXBlID0gSVBfUEtUSU5GTzsKKworICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fcGt0aW5mbyBpcGkgPSB7IDAgfTsKKyAgICAgICAgICAgIGlwaS5pcGlfaWZpbmRleCA9IGlmX2luZGV4OworICAgICAgICAgICAgaXBpLmlwaV9hZGRyLnNfYWRkciA9IHNyY2lwLT5zX2FkZHI7CisgICAgICAgICAgICBtZW1jcHkoV1NBX0NNU0dfREFUQShjbSksICZpcGksIHNpemVvZihpcGkpKTsKKyAgICAgICAgfQorCisgICAgICAgIHJjID0gcGZXU0FTZW5kTXNnKGZkLCAmbSwgMCwgJmJ5dGVzX3NlbnQsIE5VTEwsIE5VTEwpOworICAgICAgICBpZiAocmMgPT0gMCkKKyAgICAgICAgICAgIHJldHVybiBieXRlc19zZW50OworICAgICAgICBERUJVR01TR1RMKCgidWRwYmFzZTpzZW5kdG8iLCAic2VuZGluZyBmcm9tIFslZF0gJXMgZmFpbGVkOiAlZFxuIiwKKyAgICAgICAgICAgICAgICAgICAgaWZfaW5kZXgsIGluZXRfbnRvYSgqc3JjaXApLCBXU0FHZXRMYXN0RXJyb3IoKSkpOworICAgIH0KKyAgICByYyA9IHNlbmR0byhmZCwgZGF0YSwgbGVuLCAwLCByZW1vdGUsIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKTsKKyAgICByZXR1cm4gcmM7CisjZW5kaWYgLyogIWRlZmluZWQoV0lOMzIpICovCit9CisjZW5kaWYgLyogSEFWRV9JUF9QS1RJTkZPIHx8IEhBVkVfSVBfUkVDVkRTVEFERFIgKi8KKworLyoKKyAqIFlvdSBjYW4gd3JpdGUgc29tZXRoaW5nIGludG8gb3BhcXVlIHRoYXQgd2lsbCBzdWJzZXF1ZW50bHkgZ2V0IHBhc3NlZCBiYWNrIAorICogdG8geW91ciBzZW5kIGZ1bmN0aW9uIGlmIHlvdSBsaWtlLiAgRm9yIGluc3RhbmNlLCB5b3UgbWlnaHQgd2FudCB0bworICogcmVtZW1iZXIgd2hlcmUgYSBQRFUgY2FtZSBmcm9tLCBzbyB0aGF0IHlvdSBjYW4gc2VuZCBhIHJlcGx5IHRoZXJlLi4uICAKKyAqLworCitpbnQKK25ldHNubXBfdWRwYmFzZV9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCAgICAgICAgICAgICByYyA9IC0xOworICAgIHNvY2tsZW5fdCAgICAgICBmcm9tbGVuID0gc2l6ZW9mKG5ldHNubXBfc29ja2FkZHJfc3RvcmFnZSk7CisgICAgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqYWRkcl9wYWlyID0gTlVMTDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBhZGRyX3BhaXIgPSAobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciAqKSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICAgICAgaWYgKGFkZHJfcGFpciA9PSBOVUxMKSB7CisgICAgICAgICAgICAqb3BhcXVlID0gTlVMTDsKKyAgICAgICAgICAgICpvbGVuZ3RoID0gMDsKKyAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1lbXNldChhZGRyX3BhaXIsIDAsIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgICAgICBmcm9tID0gJmFkZHJfcGFpci0+cmVtb3RlX2FkZHIuc2E7CisgICAgICAgIH0KKworCXdoaWxlIChyYyA8IDApIHsKKyNpZmRlZiBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb21fc2VuZHRvX2RlZmluZWQKKyAgICAgICAgICAgIHNvY2tsZW5fdCBsb2NhbF9hZGRyX2xlbiA9IHNpemVvZihhZGRyX3BhaXItPmxvY2FsX2FkZHIpOworICAgICAgICAgICAgcmMgPSBuZXRzbm1wX3VkcF9yZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIGZyb20sICZmcm9tbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RydWN0IHNvY2thZGRyKikmKGFkZHJfcGFpci0+bG9jYWxfYWRkciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbF9hZGRyX2xlbiwgJihhZGRyX3BhaXItPmlmX2luZGV4KSk7CisjZWxzZQorICAgICAgICAgICAgcmMgPSByZWN2ZnJvbSh0LT5zb2NrLCBidWYsIHNpemUsIE1TR19ET05UV0FJVCwgZnJvbSwgJmZyb21sZW4pOworI2VuZGlmIC8qIG5ldHNubXBfdWRwYmFzZV9yZWN2ZnJvbV9zZW5kdG9fZGVmaW5lZCAqLworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorCisgICAgICAgIGlmIChyYyA+PSAwKSB7CisgICAgICAgICAgICBERUJVR0lGKCJuZXRzbm1wX3VkcCIpIHsKKyAgICAgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKAorICAgICAgICAgICAgICAgICAgICBOVUxMLCBhZGRyX3BhaXIsIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAicmVjdmZyb20gZmQgJWQgZ290ICVkIGJ5dGVzIChmcm9tICVzKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB0LT5zb2NrLCByYywgc3RyKSk7CisgICAgICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIHQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgfQorICAgICAgICAqb3BhcXVlID0gKHZvaWQgKilhZGRyX3BhaXI7CisgICAgICAgICpvbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpOworICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitpbnQKK25ldHNubXBfdWRwYmFzZV9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKmFkZHJfcGFpciA9IE5VTEw7CisgICAgc3RydWN0IHNvY2thZGRyICp0byA9IE5VTEw7CisKKyAgICBpZiAob3BhcXVlICE9IE5VTEwgJiYgKm9wYXF1ZSAhPSBOVUxMICYmCisgICAgICAgICgoKm9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpIHx8CisgICAgICAgICAgKCpvbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKSkpKSB7CisgICAgICAgIGFkZHJfcGFpciA9IChuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyICopICgqb3BhcXVlKTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwgJiYKKyAgICAgICAgICAgICAgICB0LT5kYXRhX2xlbmd0aCA9PSBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpIHsKKyAgICAgICAgYWRkcl9wYWlyID0gKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgKikgKHQtPmRhdGEpOworICAgIH0KKworICAgIHRvID0gJmFkZHJfcGFpci0+cmVtb3RlX2FkZHIuc2E7CisKKyAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHSUYoIm5ldHNubXBfdWRwIikgeworICAgICAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHBfZm10YWRkcihOVUxMLCAodm9pZCAqKSBhZGRyX3BhaXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHAiLCAic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKKyAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgfQorCXdoaWxlIChyYyA8IDApIHsKKyNpZmRlZiBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb21fc2VuZHRvX2RlZmluZWQKKyAgICAgICAgICAgIHJjID0gbmV0c25tcF91ZHBfc2VuZHRvKHQtPnNvY2ssCisgICAgICAgICAgICAgICAgICAgIGFkZHJfcGFpciA/ICYoYWRkcl9wYWlyLT5sb2NhbF9hZGRyLnNpbi5zaW5fYWRkcikgOiBOVUxMLAorICAgICAgICAgICAgICAgICAgICBhZGRyX3BhaXIgPyBhZGRyX3BhaXItPmlmX2luZGV4IDogMCwgdG8sIGJ1Ziwgc2l6ZSk7CisjZWxzZQorICAgICAgICAgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCB0bywgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworI2VuZGlmIC8qIG5ldHNubXBfdWRwYmFzZV9yZWN2ZnJvbV9zZW5kdG9fZGVmaW5lZCAqLworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgInNlbmR0byBlcnJvciwgcmMgJWQgKGVycm5vICVkKVxuIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByYywgZXJybm8pKTsKKwkJYnJlYWs7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiByYzsKK30KKwordm9pZAorbmV0c25tcF91ZHBfYmFzZV9jdG9yKHZvaWQpCit7CisjaWYgZGVmaW5lZChXSU4zMikgJiYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pCisgICAgU09DS0VUIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgR1VJRCBXU0FSZWN2TXNnR3VpZCA9IFdTQUlEX1dTQVJFQ1ZNU0c7CisgICAgR1VJRCBXU0FTZW5kTXNnR3VpZCA9IFdTQUlEX1dTQVNFTkRNU0c7CisgICAgRFdPUkQgbmJ5dGVzOworICAgIGludCByZXN1bHQ7CisKKyAgICBuZXRzbm1wX2Fzc2VydChzICE9IFNPQ0tFVF9FUlJPUik7CisgICAgLyogV1NBUmVjdk1zZygpOiBXaW5kb3dzIFhQIC8gV2luZG93cyBTZXJ2ZXIgMjAwMyBhbmQgbGF0ZXIgKi8KKyAgICByZXN1bHQgPSBXU0FJb2N0bChzLCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICZXU0FSZWN2TXNnR3VpZCwgc2l6ZW9mKFdTQVJlY3ZNc2dHdWlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAmcGZXU0FSZWN2TXNnLCBzaXplb2YocGZXU0FSZWN2TXNnKSwgJm5ieXRlcywgTlVMTCwgTlVMTCk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJXU0FSZWN2TXNnKCkgbm90IGZvdW5kIChlcnJubyAlbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBXU0FHZXRMYXN0RXJyb3IoKSkpOworCisgICAgLyogV1NBU2VuZE1zZygpOiBXaW5kb3dzIFZpc3RhIC8gV2luZG93cyBTZXJ2ZXIgMjAwOCBhbmQgbGF0ZXIgKi8KKyAgICByZXN1bHQgPSBXU0FJb2N0bChzLCBTSU9fR0VUX0VYVEVOU0lPTl9GVU5DVElPTl9QT0lOVEVSLAorICAgICAgICAgICAgICAgICAgICAgICZXU0FTZW5kTXNnR3VpZCwgc2l6ZW9mKFdTQVNlbmRNc2dHdWlkKSwKKyAgICAgICAgICAgICAgICAgICAgICAmcGZXU0FTZW5kTXNnLCBzaXplb2YocGZXU0FTZW5kTXNnKSwgJm5ieXRlcywgTlVMTCwgTlVMTCk7CisgICAgaWYgKHJlc3VsdCA9PSBTT0NLRVRfRVJST1IpCisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJXU0FTZW5kTXNnKCkgbm90IGZvdW5kIChlcnJubyAlbGQpXG4iLAorICAgICAgICAgICAgICAgICAgICBXU0FHZXRMYXN0RXJyb3IoKSkpOworCisgICAgY2xvc2Vzb2NrZXQocyk7CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQRG9tYWluLmMgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwYWJkOGMKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUERvbWFpbi5jCkBAIC0wLDAgKzEsNTE3IEBACisvKiBQb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQocykuICBTZWUKKyAqIHRoZSBOZXQtU05NUCdzIENPUFlJTkcgZmlsZSBmb3IgbW9yZSBkZXRhaWxzIGFuZCBvdGhlciBjb3B5cmlnaHRzCisgKiB0aGF0IG1heSBhcHBseToKKyAqLworLyoKKyAqIFBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgY29weXJpZ2h0ZWQgYnk6CisgKiBDb3B5cmlnaHQgQ29weXJpZ2h0IDIwMDMgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogVXNlIGlzIHN1YmplY3QgdG8gbGljZW5zZSB0ZXJtcyBzcGVjaWZpZWQgaW4gdGhlIENPUFlJTkcgZmlsZQorICogZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTmV0LVNOTVAgcGFja2FnZS4KKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUERvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFVEUElQdjRCYXNlRG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19VSU9fSAorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNlbmRpZgorCisjaWYgSEFWRV9ETUFMTE9DX0gKKyNpbmNsdWRlIDxkbWFsbG9jLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvb3V0cHV0X2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KKworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF90cmFuc3BvcnQuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBTb2NrZXRCYXNlRG9tYWluLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKworI2lmbmRlZiBJTkFERFJfTk9ORQorI2RlZmluZSBJTkFERFJfTk9ORQktMQorI2VuZGlmCisKKyNpZm5kZWYgSU5FVF9BRERSU1RSTEVOCisjZGVmaW5lIElORVRfQUREUlNUUkxFTiAxNgorI2VuZGlmCisKK3N0YXRpYyBuZXRzbm1wX3Rkb21haW4gdWRwRG9tYWluOworCisvKgorICogbmVlZHMgdG8gYmUgaW4gc3luYyB3aXRoIHRoZSBkZWZpbml0aW9ucyBpbiBzbm1wbGliL3NubXBUQ1BEb21haW4uYyAKKyAqIGFuZCBwZXJsL2FnZW50L2FnZW50LnhzIAorICovCit0eXBlZGVmIG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIgbmV0c25tcF91ZHBfYWRkcl9wYWlyOworCisvKgorICogbm90IHN0YXRpYywgc2luY2Ugc25tcFVEUElQdjZEb21haW4gbmVlZHMgaXQsIGJ1dCBub3QgcHVibGljLCBlaXRoZXIuCisgKiAoaWUgZG9uJ3QgcHV0IGl0IGluIGEgcHVibGljIGhlYWRlci4pCisgKi8KK3ZvaWQgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KGludCBmZCwgaW50IHNlcnZlcik7CitpbnQKK25ldHNubXBfc29ja2FkZHJfaW4yKHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlucGVlcm5hbWUsIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KTsKKworLyoKKyAqIFJldHVybiBhIHN0cmluZyByZXByZXNlbnRpbmcgdGhlIGFkZHJlc3MgaW4gZGF0YSwgb3IgZWxzZSB0aGUgImZhciBlbmQiCisgKiBhZGRyZXNzIGlmIGRhdGEgaXMgTlVMTC4gIAorICovCisKK2NoYXIgKgorbmV0c25tcF91ZHBfZm10YWRkcihuZXRzbm1wX3RyYW5zcG9ydCAqdCwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gbmV0c25tcF9pcHY0X2ZtdGFkZHIoIlVEUCIsIHQsIGRhdGEsIGxlbik7Cit9CisKKworI2lmIGRlZmluZWQoSEFWRV9JUF9QS1RJTkZPKSB8fCBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCisKK2ludCBuZXRzbm1wX3VkcF9yZWN2ZnJvbShpbnQgcywgdm9pZCAqYnVmLCBpbnQgbGVuLCBzdHJ1Y3Qgc29ja2FkZHIgKmZyb20sIHNvY2tsZW5fdCAqZnJvbWxlbiwgc3RydWN0IHNvY2thZGRyICpkc3RpcCwgc29ja2xlbl90ICpkc3RsZW4sIGludCAqaWZfaW5kZXgpCit7CisgICAgLyoqIHVkcGl2NCBqdXN0IGNhbGxzIHVkcGJhc2UuIHNob3VsZCB3ZSBza2lwIGRpcmVjdGx5IHRvIHRoZXJlPyAqLworICAgIHJldHVybiBuZXRzbm1wX3VkcGlwdjRfcmVjdmZyb20ocywgYnVmLCBsZW4sIGZyb20sIGZyb21sZW4sIGRzdGlwLCBkc3RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9pbmRleCk7Cit9CisKK2ludCBuZXRzbm1wX3VkcF9zZW5kdG8oaW50IGZkLCBzdHJ1Y3QgaW5fYWRkciAqc3JjaXAsIGludCBpZl9pbmRleCwgc3RydWN0IHNvY2thZGRyICpyZW1vdGUsCisgICAgICAgICAgICAgICAgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICAvKiogdWRwaXY0IGp1c3QgY2FsbHMgdWRwYmFzZS4gc2hvdWxkIHdlIHNraXAgZGlyZWN0bHkgdG8gdGhlcmU/ICovCisgICAgcmV0dXJuIG5ldHNubXBfdWRwaXB2NF9zZW5kdG8oZmQsIHNyY2lwLCBpZl9pbmRleCwgcmVtb3RlLCBkYXRhLCBsZW4pOworfQorI2VuZGlmIC8qIEhBVkVfSVBfUEtUSU5GTyB8fCBIQVZFX0lQX1JFQ1ZEU1RBRERSICovCisKKy8qCisgKiBPcGVuIGEgVURQLWJhc2VkIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzIAorICogdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91ZHBfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl9pbiAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKworICAgIHQgPSBuZXRzbm1wX3VkcGlwdjRiYXNlX3RyYW5zcG9ydChhZGRyLCBsb2NhbCk7CisgICAgaWYgKE5VTEwgPT0gdCkgeworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFNldCBEb21haW4KKyAgICAgKi8KKworICAgIHQtPmRvbWFpbiA9IG5ldHNubXBVRFBEb21haW47CisgICAgdC0+ZG9tYWluX2xlbmd0aCA9IG5ldHNubXBVRFBEb21haW5fbGVuOworCisgICAgLyoKKyAgICAgKiAxNi1iaXQgbGVuZ3RoIGZpZWxkLCA4IGJ5dGUgVURQIGhlYWRlciwgMjAgYnl0ZSBJUHY0IGhlYWRlciAgCisgICAgICovCisKKyAgICB0LT5tc2dNYXhTaXplID0gMHhmZmZmIC0gOCAtIDIwOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3VkcGJhc2VfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF91ZHBiYXNlX3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gTlVMTDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF91ZHBfZm10YWRkcjsKKworICAgIHJldHVybiB0OworfQorCisjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCisvKgorICogVGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgcHJvdmlkZSB0aGUgImNvbTJzZWMiIGNvbmZpZ3VyYXRpb24gdG9rZW4KKyAqIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbXBhdGliaWxpdHkuCisgKi8KKworI2RlZmluZSBFWEFNUExFX05FVFdPUksJCSJORVRXT1JLIgorI2RlZmluZSBFWEFNUExFX0NPTU1VTklUWQkiQ09NTVVOSVRZIgorCit0eXBlZGVmIHN0cnVjdCBjb20yU2VjRW50cnlfcyB7CisgICAgY29uc3QgY2hhciAqc2VjTmFtZTsKKyAgICBjb25zdCBjaGFyICpjb250ZXh0TmFtZTsKKyAgICBzdHJ1Y3QgY29tMlNlY0VudHJ5X3MgKm5leHQ7CisgICAgaW5fYWRkcl90ICAgbmV0d29yazsKKyAgICBpbl9hZGRyX3QgICBtYXNrOworICAgIGNvbnN0IGNoYXIgIGNvbW11bml0eVsxXTsKK30gY29tMlNlY0VudHJ5OworCitzdGF0aWMgY29tMlNlY0VudHJ5ICAgKmNvbTJTZWNMaXN0ID0gTlVMTCwgKmNvbTJTZWNMaXN0TGFzdCA9IE5VTEw7CisKK3ZvaWQKK25ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpwYXJhbSkKK3sKKyAgICBjaGFyICAgICAgICAgICAgc2VjTmFtZVtWQUNNU1RSSU5HTEVOICsgMV07CisgICAgc2l6ZV90ICAgICAgICAgIHNlY05hbWVMZW47CisgICAgY2hhciAgICAgICAgICAgIGNvbnRleHROYW1lW1ZBQ01TVFJJTkdMRU4gKyAxXTsKKyAgICBzaXplX3QgICAgICAgICAgY29udGV4dE5hbWVMZW47CisgICAgY2hhciAgICAgICAgICAgIGNvbW11bml0eVtDT01NVU5JVFlfTUFYX0xFTiArIDFdOworICAgIHNpemVfdCAgICAgICAgICBjb21tdW5pdHlMZW47CisgICAgY2hhciAgICAgICAgICAgIHNvdXJjZVsyNzBdOyAvKiBkbnMtbmFtZSgyNTMpKy8oMSkrbWFzaygxNSkrXDAoMSkgKi8KKyAgICBzdHJ1Y3QgaW5fYWRkciAgbmV0d29yaywgbWFzazsKKworICAgIC8qCisgICAgICogR2V0IHNlY3VyaXR5LCBzb3VyY2UgYWRkcmVzcy9uZXRtYXNrIGFuZCBjb21tdW5pdHkgc3RyaW5ncy4KKyAgICAgKi8KKworICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7CisgICAgaWYgKHN0cmNtcChzZWNOYW1lLCAiLUNuIikgPT0gMCkgeworICAgICAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBjb250ZXh0TmFtZSwgc2l6ZW9mKGNvbnRleHROYW1lKSk7CisgICAgICAgIGNvbnRleHROYW1lTGVuID0gc3RybGVuKGNvbnRleHROYW1lKSArIDE7CisgICAgICAgIGlmIChjb250ZXh0TmFtZUxlbiA+IFZBQ01TVFJJTkdMRU4pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbnRleHQgbmFtZSB0b28gbG9uZyIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgTkFNRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvbnRleHROYW1lTGVuID0gMDsKKyAgICB9CisKKyAgICBzZWNOYW1lTGVuID0gc3RybGVuKHNlY05hbWUpICsgMTsKKyAgICBpZiAoc2VjTmFtZUxlbiA9PSAxKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImVtcHR5IE5BTUUgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9IGVsc2UgaWYgKHNlY05hbWVMZW4gPiBWQUNNU1RSSU5HTEVOKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoInNlY3VyaXR5IG5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBTT1VSQ0UgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgc291cmNlLCBzaXplb2Yoc291cmNlKSk7CisgICAgaWYgKHNvdXJjZVswXSA9PSAnXDAnKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImVtcHR5IFNPVVJDRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAoc3RybmNtcChzb3VyY2UsIEVYQU1QTEVfTkVUV09SSywgc3RybGVuKEVYQU1QTEVfTkVUV09SSykpID09IDApIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZXhhbXBsZSBjb25maWcgTkVUV09SSyBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwYXJhbSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBjb21tdW5pdHksIHNpemVvZihjb21tdW5pdHkpKTsKKyAgICBpZiAoY29tbXVuaXR5WzBdID09ICdcMCcpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZW1wdHkgQ09NTVVOSVRZIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbW11bml0eUxlbiA9IHN0cmxlbihjb21tdW5pdHkpICsgMTsKKyAgICBpZiAoY29tbXVuaXR5TGVuID49IENPTU1VTklUWV9NQVhfTEVOKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbW11bml0eSBuYW1lIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNvbW11bml0eUxlbiA9PSBzaXplb2YoRVhBTVBMRV9DT01NVU5JVFkpICYmCisgICAgICAgIG1lbWNtcChjb21tdW5pdHksIEVYQU1QTEVfQ09NTVVOSVRZLCBzaXplb2YoRVhBTVBMRV9DT01NVU5JVFkpKSA9PSAwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogRGVhbCB3aXRoIHRoZSAiZGVmYXVsdCIgY2FzZSBmaXJzdC4gKi8KKyAgICBpZiAoc3RyY21wKHNvdXJjZSwgImRlZmF1bHQiKSA9PSAwKSB7CisgICAgICAgIG5ldHdvcmsuc19hZGRyID0gMDsKKyAgICAgICAgbWFzay5zX2FkZHIgPSAwOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIFNwbGl0IHRoZSBzb3VyY2UvbmV0bWFzayBwYXJ0cyAqLworICAgICAgICBjaGFyICpzdHJtYXNrID0gc3RyY2hyKHNvdXJjZSwgJy8nKTsKKyAgICAgICAgaWYgKHN0cm1hc2sgIT0gTlVMTCkKKyAgICAgICAgICAgIC8qIE1hc2sgZ2l2ZW4uICovCisgICAgICAgICAgICAqc3RybWFzaysrID0gJ1wwJzsKKworICAgICAgICAvKiBUcnkgaW50ZXJwcmV0aW5nIGFzIGEgZG90dGVkIHF1YWQuICovCisgICAgICAgIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgc291cmNlLCAmbmV0d29yaykgPT0gMCkgeworICAgICAgICAgICAgLyogTm9wZSwgd2Fzbid0IGEgZG90dGVkIHF1YWQuICBNdXN0IGJlIGEgaG9zdG5hbWUuICovCisgICAgICAgICAgICBpbnQgcmV0ID0gbmV0c25tcF9nZXRob3N0YnluYW1lX3Y0KHNvdXJjZSwgJm5ldHdvcmsuc19hZGRyKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY2Fubm90IHJlc29sdmUgc291cmNlIGhvc3RuYW1lIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogTm93IHdvcmsgb3V0IHRoZSBtYXNrLiAqLworICAgICAgICBpZiAoc3RybWFzayA9PSBOVUxMIHx8ICpzdHJtYXNrID09ICdcMCcpIHsKKyAgICAgICAgICAgIC8qIE5vIG1hc2sgd2FzIGdpdmVuLiBBc3N1bWUgLzMyICovCisgICAgICAgICAgICBtYXNrLnNfYWRkciA9IChpbl9hZGRyX3QpKH4wVUwpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgLyogVHJ5IHRvIGludGVycHJldCBtYXNrIGFzIGEgIm51bWJlciBvZiAxIGJpdHMiLiAqLworICAgICAgICAgICAgY2hhciogY3A7CisgICAgICAgICAgICBsb25nIG1hc2tMZW4gPSBzdHJ0b2woc3RybWFzaywgJmNwLCAxMCk7CisgICAgICAgICAgICBpZiAoKmNwID09ICdcMCcpIHsKKyAgICAgICAgICAgICAgICBpZiAoMCA8IG1hc2tMZW4gJiYgbWFza0xlbiA8PSAzMikKKyAgICAgICAgICAgICAgICAgICAgbWFzay5zX2FkZHIgPSBodG9ubCgoaW5fYWRkcl90KSh+MFVMIDw8ICgzMiAtIG1hc2tMZW4pKSk7CisgICAgICAgICAgICAgICAgZWxzZSBpZiAobWFza0xlbiA9PSAwKQorICAgICAgICAgICAgICAgICAgICBtYXNrLnNfYWRkciA9IDA7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIGxlbmd0aCIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogVHJ5IHRvIGludGVycHJldCBtYXNrIGFzIGEgZG90dGVkIHF1YWQuICovCisgICAgICAgICAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVCwgc3RybWFzaywgJm1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJiYWQgbWFzayIpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogQ2hlY2sgdGhhdCB0aGUgbmV0d29yayBhbmQgbWFzayBhcmUgY29uc2lzdGVudC4gKi8KKyAgICAgICAgICAgIGlmIChuZXR3b3JrLnNfYWRkciAmIH5tYXNrLnNfYWRkcikgeworICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoInNvdXJjZS9tYXNrIG1pc21hdGNoIik7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgeworICAgICAgICB2b2lkKiB2ID0gbWFsbG9jKG9mZnNldG9mKGNvbTJTZWNFbnRyeSwgY29tbXVuaXR5KSArIGNvbW11bml0eUxlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VjTmFtZUxlbiArIGNvbnRleHROYW1lTGVuKTsKKworICAgICAgICBjb20yU2VjRW50cnkqIGUgPSAoY29tMlNlY0VudHJ5Kil2OworICAgICAgICBjaGFyKiBsYXN0ID0gKChjaGFyKil2KSArIG9mZnNldG9mKGNvbTJTZWNFbnRyeSwgY29tbXVuaXR5KTsKKworICAgICAgICBpZiAodiA9PSBOVUxMKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtZW1vcnkgZXJyb3IiKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIEV2ZXJ5dGhpbmcgaXMgb2theS4gIENvcHkgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIHN0cnVjdHVyZSBhbGxvY2F0ZWQKKyAgICAgICAgICogYWJvdmUgYW5kIGFkZCBpdCB0byBFTkQgb2YgdGhlIGxpc3QuCisgICAgICAgICAqLworCisgICAgICAgIHsKKyAgICAgICAgICBjaGFyIGJ1ZjFbSU5FVF9BRERSU1RSTEVOXTsKKyAgICAgICAgICBjaGFyIGJ1ZjJbSU5FVF9BRERSU1RSTEVOXTsKKyAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkiLAorICAgICAgICAgICAgICAgICAgICAgICI8XCIlc1wiLCAlcy8lcz4gPT4gXCIlc1wiXG4iLCBjb21tdW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQsICZuZXR3b3JrLCBidWYxLCBzaXplb2YoYnVmMSkpLAorICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVULCAmbWFzaywgYnVmMiwgc2l6ZW9mKGJ1ZjIpKSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWNOYW1lKSk7CisgICAgICAgIH0KKworICAgICAgICBtZW1jcHkobGFzdCwgY29tbXVuaXR5LCBjb21tdW5pdHlMZW4pOworICAgICAgICBsYXN0ICs9IGNvbW11bml0eUxlbjsKKyAgICAgICAgbWVtY3B5KGxhc3QsIHNlY05hbWUsIHNlY05hbWVMZW4pOworICAgICAgICBlLT5zZWNOYW1lID0gbGFzdDsKKyAgICAgICAgbGFzdCArPSBzZWNOYW1lTGVuOworICAgICAgICBpZiAoY29udGV4dE5hbWVMZW4pIHsKKyAgICAgICAgICAgIG1lbWNweShsYXN0LCBjb250ZXh0TmFtZSwgY29udGV4dE5hbWVMZW4pOworICAgICAgICAgICAgZS0+Y29udGV4dE5hbWUgPSBsYXN0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGUtPmNvbnRleHROYW1lID0gbGFzdCAtIDE7CisgICAgICAgIGUtPm5ldHdvcmsgPSBuZXR3b3JrLnNfYWRkcjsKKyAgICAgICAgZS0+bWFzayA9IG1hc2suc19hZGRyOworICAgICAgICBlLT5uZXh0ID0gTlVMTDsKKworICAgICAgICBpZiAoY29tMlNlY0xpc3RMYXN0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGNvbTJTZWNMaXN0TGFzdC0+bmV4dCA9IGU7CisgICAgICAgICAgICBjb20yU2VjTGlzdExhc3QgPSBlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29tMlNlY0xpc3RMYXN0ID0gY29tMlNlY0xpc3QgPSBlOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkCituZXRzbm1wX3VkcF9jb20yU2VjTGlzdF9mcmVlKHZvaWQpCit7CisgICAgY29tMlNlY0VudHJ5ICAgKmUgPSBjb20yU2VjTGlzdDsKKyAgICB3aGlsZSAoZSAhPSBOVUxMKSB7CisgICAgICAgIGNvbTJTZWNFbnRyeSAgICp0bXAgPSBlOworICAgICAgICBlID0gZS0+bmV4dDsKKyAgICAgICAgZnJlZSh0bXApOworICAgIH0KKyAgICBjb20yU2VjTGlzdCA9IGNvbTJTZWNMaXN0TGFzdCA9IE5VTEw7Cit9CisjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KKwordm9pZAorbmV0c25tcF91ZHBfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKQoreworI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQorICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigiY29tMnNlYyIsIG5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcF9jb20yU2VjTGlzdF9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWy1DbiBDT05URVhUXSBzZWNOYW1lIElQdjQtbmV0d29yay1hZGRyZXNzWy9uZXRtYXNrXSBjb21tdW5pdHkiKTsKKyNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLworfQorCisKKworLyoKKyAqIFJldHVybiAwIGlmIHRoZXJlIGFyZSBubyBjb20yc2VjIGVudHJpZXMsIG9yIHJldHVybiAxIGlmIHRoZXJlIEFSRSBjb20yc2VjCisgKiBlbnRyaWVzLiAgT24gcmV0dXJuLCBpZiBhIGNvbTJzZWMgZW50cnkgbWF0Y2hlZCB0aGUgcGFzc2VkIHBhcmFtZXRlcnMsCisgKiB0aGVuICpzZWNOYW1lIHBvaW50cyBhdCB0aGUgYXBwcm9wcmlhdGUgc2VjdXJpdHkgbmFtZSwgb3IgaXMgTlVMTCBpZiB0aGUKKyAqIHBhcmFtZXRlcnMgZGlkIG5vdCBtYXRjaCBhbnkgY29tMnNlYyBlbnRyeS4KKyAqLworCisjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCitpbnQKK25ldHNubXBfdWRwX2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY29tbXVuaXR5X2xlbiwgY29uc3QgY2hhciAqKnNlY05hbWUsCisgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKipjb250ZXh0TmFtZSkKK3sKKyAgICBjb25zdCBjb20yU2VjRW50cnkgKmM7CisgICAgbmV0c25tcF91ZHBfYWRkcl9wYWlyICphZGRyX3BhaXIgPSAobmV0c25tcF91ZHBfYWRkcl9wYWlyICopIG9wYXF1ZTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gKmZyb20gPSAoc3RydWN0IHNvY2thZGRyX2luICopICYoYWRkcl9wYWlyLT5yZW1vdGVfYWRkcik7CisgICAgY2hhciAgICAgICAgICAgKnp0Y29tbXVuaXR5ID0gTlVMTDsKKworICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgKnNlY05hbWUgPSBOVUxMOyAgLyogSGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB5ZXQgKi8KKyAgICB9CisKKyAgICAvKgorICAgICAqIFNwZWNpYWwgY2FzZSBpZiB0aGVyZSBhcmUgTk8gZW50cmllcyAoYXMgb3Bwb3NlZCB0byBubyBNQVRDSElORworICAgICAqIGVudHJpZXMpLgorICAgICAqLworCisgICAgaWYgKGNvbTJTZWNMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAibm8gY29tMnNlYyBlbnRyaWVzXG4iKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgbm8gSVB2NCBzb3VyY2UgYWRkcmVzcywgdGhlbiB0aGVyZSBjYW4gYmUgbm8gdmFsaWQgc2VjdXJpdHkKKyAgICAgKiBuYW1lLgorICAgICAqLworCisgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsICJvcGFxdWUgPSAlcCAobGVuID0gJWQpLCBzaXplb2YgPSAlZCwgZmFtaWx5ID0gJWQgKCVkKVxuIiwKKyAgIG9wYXF1ZSwgb2xlbmd0aCwgKGludClzaXplb2YobmV0c25tcF91ZHBfYWRkcl9wYWlyKSwgZnJvbS0+c2luX2ZhbWlseSwgQUZfSU5FVCkpOworICAgIGlmIChvcGFxdWUgPT0gTlVMTCB8fCBvbGVuZ3RoICE9IHNpemVvZihuZXRzbm1wX3VkcF9hZGRyX3BhaXIpIHx8CisgICAgICAgIGZyb20tPnNpbl9mYW1pbHkgIT0gQUZfSU5FVCkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBfZ2V0U2VjTmFtZSIsCisJCSAgICAibm8gSVB2NCBzb3VyY2UgYWRkcmVzcyBpbiBQRFU/XG4iKSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIERFQlVHSUYoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiKSB7CisJenRjb21tdW5pdHkgPSAoY2hhciAqKW1hbGxvYyhjb21tdW5pdHlfbGVuICsgMSk7CisJaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKKwkgICAgbWVtY3B5KHp0Y29tbXVuaXR5LCBjb21tdW5pdHksIGNvbW11bml0eV9sZW4pOworCSAgICB6dGNvbW11bml0eVtjb21tdW5pdHlfbGVuXSA9ICdcMCc7CisJfQorCisJREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAicmVzb2x2ZSA8XCIlc1wiLCAweCUwOGx4PlxuIiwKKwkJICAgIHp0Y29tbXVuaXR5ID8genRjb21tdW5pdHkgOiAiPG1hbGxvYyBlcnJvcj4iLAorCQkgICAgKHVuc2lnbmVkIGxvbmcpKGZyb20tPnNpbl9hZGRyLnNfYWRkcikpKTsKKyAgICB9CisKKyAgICBmb3IgKGMgPSBjb20yU2VjTGlzdDsgYyAhPSBOVUxMOyBjID0gYy0+bmV4dCkgeworICAgICAgICB7CisgICAgICAgICAgICBjaGFyIGJ1ZjFbSU5FVF9BRERSU1RSTEVOXTsKKyAgICAgICAgICAgIGNoYXIgYnVmMltJTkVUX0FERFJTVFJMRU5dOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCJjb21wYXJlIDxcIiVzXCIsICVzLyVzPiIsCisgICAgICAgICAgICAgICAgICAgICAgICBjLT5jb21tdW5pdHksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVCwgJmMtPm5ldHdvcmssIGJ1ZjEsIHNpemVvZihidWYxKSksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVCwgJmMtPm1hc2ssIGJ1ZjIsIHNpemVvZihidWYyKSkpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoKGNvbW11bml0eV9sZW4gPT0gc3RybGVuKGMtPmNvbW11bml0eSkpICYmCisJICAgIChtZW1jbXAoY29tbXVuaXR5LCBjLT5jb21tdW5pdHksIGNvbW11bml0eV9sZW4pID09IDApICYmCisgICAgICAgICAgICAoKGZyb20tPnNpbl9hZGRyLnNfYWRkciAmIGMtPm1hc2spID09IGMtPm5ldHdvcmspKSB7CisgICAgICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAiLi4uIFNVQ0NFU1NcbiIpKTsKKyAgICAgICAgICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAqc2VjTmFtZSA9IGMtPnNlY05hbWU7CisgICAgICAgICAgICAgICAgKmNvbnRleHROYW1lID0gYy0+Y29udGV4dE5hbWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwX2dldFNlY05hbWUiLCAiLi4uIG5vcGVcbiIpKTsKKyAgICB9CisgICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKKyAgICAgICAgZnJlZSh6dGNvbW11bml0eSk7CisgICAgfQorICAgIHJldHVybiAxOworfQorI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCisKKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91ZHBfY3JlYXRlX3RzdHJpbmcoY29uc3QgY2hhciAqc3RyLCBpbnQgbG9jYWwsCisJCQkgICBjb25zdCBjaGFyICpkZWZhdWx0X3RhcmdldCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luMigmYWRkciwgc3RyLCBkZWZhdWx0X3RhcmdldCkpIHsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3VkcF9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjsKKworICAgIGlmIChvX2xlbiA9PSA2KSB7CisgICAgICAgIHVuc2lnbmVkIHNob3J0IHBvcnR0bXAgPSAob1s0XSA8PCA4KSArIG9bNV07CisgICAgICAgIGFkZHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luX2FkZHIuc19hZGRyKSwgbywgNCk7CisgICAgICAgIGFkZHIuc2luX3BvcnQgPSBodG9ucyhwb3J0dG1wKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdWRwX3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCit2b2lkCituZXRzbm1wX3VkcF9jdG9yKHZvaWQpCit7CisgICAgdWRwRG9tYWluLm5hbWUgPSBuZXRzbm1wVURQRG9tYWluOworICAgIHVkcERvbWFpbi5uYW1lX2xlbmd0aCA9IG5ldHNubXBVRFBEb21haW5fbGVuOworICAgIHVkcERvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYygyLCBzaXplb2YoY2hhciAqKSk7CisgICAgdWRwRG9tYWluLnByZWZpeFswXSA9ICJ1ZHAiOworCisgICAgdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIHVkcERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmdfbmV3ID0gbmV0c25tcF91ZHBfY3JlYXRlX3RzdHJpbmc7CisgICAgdWRwRG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3VkcF9jcmVhdGVfb3N0cmluZzsKKworICAgIG5ldHNubXBfdGRvbWFpbl9yZWdpc3RlcigmdWRwRG9tYWluKTsKK30KZGlmZiAtLWdpdCBhL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NEJhc2VEb21haW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YzBmYjA1Ci0tLSAvZGV2L251bGwKKysrIGIvc25tcGxpYi90cmFuc3BvcnRzL3NubXBVRFBJUHY0QmFzZURvbWFpbi5jCkBAIC0wLDAgKzEsMjIxIEBACisvKiBJUFY0IGJhc2UgdHJhbnNwb3J0IHN1cHBvcnQgZnVuY3Rpb25zCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVRFBJUHY0QmFzZURvbWFpbi5oPgorCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmIEhBVkVfU1RETElCX0gKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNlbmRpZgorI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfZGVidWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvZGVmYXVsdF9zdG9yZS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorCisjaWYgZGVmaW5lZChIQVZFX0lQX1BLVElORk8pIHx8IGRlZmluZWQoSEFWRV9JUF9SRUNWRFNUQUREUikKK2ludCBuZXRzbm1wX3VkcGlwdjRfcmVjdmZyb20oaW50IHMsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgc3RydWN0IHNvY2thZGRyICpmcm9tLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb2NrbGVuX3QgKmZyb21sZW4sIHN0cnVjdCBzb2NrYWRkciAqZHN0aXAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNvY2tsZW5fdCAqZHN0bGVuLCBpbnQgKmlmX2luZGV4KQoreworICAgIHJldHVybiBuZXRzbm1wX3VkcGJhc2VfcmVjdmZyb20ocywgYnVmLCBsZW4sIGZyb20sIGZyb21sZW4sIGRzdGlwLCBkc3RsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZl9pbmRleCk7Cit9CisKK2ludCBuZXRzbm1wX3VkcGlwdjRfc2VuZHRvKGludCBmZCwgc3RydWN0IGluX2FkZHIgKnNyY2lwLCBpbnQgaWZfaW5kZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgKnJlbW90ZSwgdm9pZCAqZGF0YSwgaW50IGxlbikKK3sKKyAgICByZXR1cm4gbmV0c25tcF91ZHBiYXNlX3NlbmR0byhmZCwgc3JjaXAsIGlmX2luZGV4LCByZW1vdGUsIGRhdGEsIGxlbik7Cit9CisjZW5kaWYgLyogSEFWRV9JUF9QS1RJTkZPIHx8IEhBVkVfSVBfUkVDVkRTVEFERFIgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91ZHBpcHY0YmFzZV90cmFuc3BvcnQoc3RydWN0IHNvY2thZGRyX2luICphZGRyLCBpbnQgbG9jYWwpCit7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICByYyA9IDAsIHJjMjsKKyAgICBjaGFyICAgICAgICAgICAqY2xpZW50X3NvY2tldCA9IE5VTEw7CisgICAgbmV0c25tcF9pbmRleGVkX2FkZHJfcGFpciBhZGRyX3BhaXI7CisgICAgc29ja2xlbl90ICAgICAgIGxvY2FsX2FkZHJfbGVuOworCisjaWZkZWYgTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVAorICAgIGlmIChsb2NhbCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworCisgICAgaWYgKGFkZHIgPT0gTlVMTCB8fCBhZGRyLT5zaW5fZmFtaWx5ICE9IEFGX0lORVQpIHsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgbWVtc2V0KCZhZGRyX3BhaXIsIDAsIHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgbWVtY3B5KCYoYWRkcl9wYWlyLnJlbW90ZV9hZGRyKSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbikpOworCisgICAgdCA9IFNOTVBfTUFMTE9DX1RZUEVERUYobmV0c25tcF90cmFuc3BvcnQpOworICAgIG5ldHNubXBfYXNzZXJ0X29yX3JldHVybih0ICE9IE5VTEwsIE5VTEwpOworCisgICAgREVCVUdJRigibmV0c25tcF91ZHBiYXNlIikgeworICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKE5VTEwsICh2b2lkICopJmFkZHJfcGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcikpOworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHBiYXNlIiwgIm9wZW4gJXMgJXNcbiIsCisgICAgICAgICAgICAgICAgICAgIGxvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCBzdHIpKTsKKyAgICAgICAgZnJlZShzdHIpOworICAgIH0KKworICAgIHQtPnNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgREVCVUdNU0dUTCgoIlVEUEJhc2UiLCAib3Blbm5lZCBzb2NrZXQgJWQgYXMgbG9jYWw9JWRcbiIsIHQtPnNvY2ssIGxvY2FsKSk7IAorICAgIGlmICh0LT5zb2NrIDwgMCkgeworICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBfbmV0c25tcF91ZHBfc29ja29wdF9zZXQodC0+c29jaywgbG9jYWwpOworCisgICAgaWYgKGxvY2FsKSB7CisjaWZuZGVmIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQorICAgICAgICAgKiBnaXZlbiBJUCBhZGRyZXNzLCB3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQKKyAgICAgICAgICogYmUgSU5BRERSX0FOWSwgYnV0IGNlcnRhaW5seSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyLgorICAgICAgICAgKi8KKworICAgICAgICB0LT5sb2NhbCA9ICh1X2NoYXIgKikgbWFsbG9jKDYpOworICAgICAgICBpZiAodC0+bG9jYWwgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5sb2NhbCwgKHVfY2hhciAqKSAmIChhZGRyLT5zaW5fYWRkci5zX2FkZHIpLCA0KTsKKyAgICAgICAgdC0+bG9jYWxbNF0gPSAobnRvaHMoYWRkci0+c2luX3BvcnQpICYgMHhmZjAwKSA+PiA4OworICAgICAgICB0LT5sb2NhbFs1XSA9IChudG9ocyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDY7CisKKyNpZm5kZWYgV0lOMzIKKyNpZiBkZWZpbmVkKEhBVkVfSVBfUEtUSU5GTykKKyAgICAgICAgeyAKKyAgICAgICAgICAgIGludCBzb2Nrb3B0ID0gMTsKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIFNPTF9JUCwgSVBfUEtUSU5GTywgJnNvY2tvcHQsIHNpemVvZiBzb2Nrb3B0KSA9PSAtMSkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAiY291bGRuJ3Qgc2V0IElQX1BLVElORk86ICVzXG4iLAorICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwYmFzZSIsICJzZXQgSVBfUEtUSU5GT1xuIikpOworICAgICAgICB9CisjZWxpZiBkZWZpbmVkKEhBVkVfSVBfUkVDVkRTVEFERFIpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzb2Nrb3B0ID0gMTsKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIElQUFJPVE9fSVAsIElQX1JFQ1ZEU1RBRERSLCAmc29ja29wdCwgc2l6ZW9mIHNvY2tvcHQpID09IC0xKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwIiwgImNvdWxkbid0IHNldCBJUF9SRUNWRFNUQUREUjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcCIsICJzZXQgSVBfUkVDVkRTVEFERFJcbiIpKTsKKyAgICAgICAgfQorI2VuZGlmCisjZWxzZSAvKiAhZGVmaW5lZChXSU4zMikgKi8KKyAgICAgICAgeyAKKyAgICAgICAgICAgIGludCBzb2Nrb3B0ID0gMTsKKyAgICAgICAgICAgIGlmIChzZXRzb2Nrb3B0KHQtPnNvY2ssIElQUFJPVE9fSVAsIElQX1BLVElORk8sICh2b2lkICopJnNvY2tvcHQsCisJCQkgICBzaXplb2Yoc29ja29wdCkpID09IC0xKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwYmFzZSIsICJjb3VsZG4ndCBzZXQgSVBfUEtUSU5GTzogJWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgV1NBR2V0TGFzdEVycm9yKCkpKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwYmFzZSIsICJzZXQgSVBfUEtUSU5GT1xuIikpOworICAgICAgICAgICAgfQorICAgICAgICB9CisjZW5kaWYgLyogIWRlZmluZWQoV0lOMzIpICovCisgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsCisgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSk7CisgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgdC0+ZGF0YSA9IE5VTEw7CisgICAgICAgIHQtPmRhdGFfbGVuZ3RoID0gMDsKKyNlbHNlIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKyAgICAgICAgcmV0dXJuIE5VTEw7CisjZW5kaWYgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgIH0gZWxzZSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgYSBjbGllbnQgc2Vzc2lvbi4gIElmIHdlJ3ZlIGJlZW4gZ2l2ZW4gYQorICAgICAgICAgKiBjbGllbnQgYWRkcmVzcyB0byBzZW5kIGZyb20sIHRoZW4gYmluZCB0byB0aGF0LgorICAgICAgICAgKiBPdGhlcndpc2UgdGhlIHNlbmQgd2lsbCB1c2UgInNvbWV0aGluZyBzZW5zaWJsZSIuCisgICAgICAgICAqLworICAgICAgICBjbGllbnRfc29ja2V0ID0gbmV0c25tcF9kc19nZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9DTElFTlRfQUREUik7CisgICAgICAgIGlmIChjbGllbnRfc29ja2V0KSB7CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gY2xpZW50X2FkZHI7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2thZGRyX2luMigmY2xpZW50X2FkZHIsIGNsaWVudF9zb2NrZXQsIE5VTEwpOworICAgICAgICAgICAgY2xpZW50X2FkZHIuc2luX3BvcnQgPSAwOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwYmFzZSIsICJiaW5kaW5nIHNvY2tldDogJWRcbiIsIHQtPnNvY2spKTsKKyAgICAgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopJmNsaWVudF9hZGRyLAorICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpOworICAgICAgICAgICAgaWYgKCByYyAhPSAwICkgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAiZmFpbGVkIHRvIGJpbmQgZm9yIGNsaWVudGFkZHI6ICVkICVzXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGxvY2FsX2FkZHJfbGVuID0gc2l6ZW9mKGFkZHJfcGFpci5sb2NhbF9hZGRyKTsKKyAgICAgICAgICAgIHJjMiA9IGdldHNvY2tuYW1lKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIqKSZhZGRyX3BhaXIubG9jYWxfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZsb2NhbF9hZGRyX2xlbik7CisgICAgICAgICAgICBuZXRzbm1wX2Fzc2VydChyYzIgPT0gMCk7CisgICAgICAgIH0KKworICAgICAgICBERUJVR0lGKCJuZXRzbm1wX3VkcGJhc2UiKSB7CisgICAgICAgICAgICBjaGFyICpzdHIgPSBuZXRzbm1wX3VkcF9mbXRhZGRyKE5VTEwsICh2b2lkICopJmFkZHJfcGFpciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcGJhc2UiLCAiY2xpZW50IG9wZW4gJXNcbiIsIHN0cikpOworICAgICAgICAgICAgZnJlZShzdHIpOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAgICAgICAgICogU2F2ZSB0aGUgKHJlbW90ZSkgYWRkcmVzcyBpbiB0aGUKKyAgICAgICAgICogdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIGJ5IG5ldHNubXBfdWRwX3NlbmQuCisgICAgICAgICAqLworCisgICAgICAgIHQtPmRhdGEgPSBtYWxsb2Moc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyg2KTsKKyAgICAgICAgaWYgKHQtPmRhdGEgPT0gTlVMTCB8fCB0LT5yZW1vdGUgPT0gTlVMTCkgeworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIG1lbWNweSh0LT5yZW1vdGUsICh1X2NoYXIgKikgJiAoYWRkci0+c2luX2FkZHIuc19hZGRyKSwgNCk7CisgICAgICAgIHQtPnJlbW90ZVs0XSA9IChudG9ocyhhZGRyLT5zaW5fcG9ydCkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVs1XSA9IChudG9ocyhhZGRyLT5zaW5fcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPnJlbW90ZV9sZW5ndGggPSA2OworICAgICAgICBtZW1jcHkodC0+ZGF0YSwgJmFkZHJfcGFpciwgc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKTsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcik7CisgICAgfQorCisgICAgcmV0dXJuIHQ7Cit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVURQSVB2NkRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZGU4NzYKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVEUElQdjZEb21haW4uYwpAQCAtMCwwICsxLDc5MSBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wVURQSVB2NkRvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpZiBIQVZFX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+CisjZW5kaWYKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSA8dW5pc3RkLmg+CisjZW5kaWYKKyNpZiBIQVZFX1NZU19TT0NLRVRfSAorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChIQVZFX1dJTlNPQ0tfSCkgJiYgIWRlZmluZWQobWluZ3czMikKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgaW42YWRkcl9hbnkgPSBJTjZBRERSX0FOWV9JTklUOworI2VuZGlmCisKKyNpZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorI2lmIEhBVkVfQVJQQV9JTkVUX0gKKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNlbmRpZgorI2lmIEhBVkVfTkVUREJfSAorI2luY2x1ZGUgPG5ldGRiLmg+CisjZW5kaWYKKyNpZiBIQVZFX05FVF9JRl9ICisjaW5jbHVkZSA8bmV0L2lmLmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX1NTX0ZBTUlMWQorI2RlZmluZSBTU19GQU1JTFkgc3NfZmFtaWx5CisjZWxpZiBIQVZFX1NUUlVDVF9TT0NLQUREUl9TVE9SQUdFX19fU1NfRkFNSUxZCisjZGVmaW5lIFNTX0ZBTUlMWSBfX3NzX2ZhbWlseQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKGRhcndpbikKKyNpbmNsdWRlIDxzdGRpbnQuaD4gLyogZm9yIHVpbnQ4X3QgKi8KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9vdXRwdXRfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX3RyYW5zcG9ydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcFNvY2tldEJhc2VEb21haW4uaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisKKyNpbmNsdWRlICJpbmV0X250b3AuaCIKKyNpbmNsdWRlICJpbmV0X3B0b24uaCIKKworb2lkIG5ldHNubXBfVURQSVB2NkRvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX1VEUF9JUFY2IH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHVkcDZEb21haW47CisKKy8qCisgKiBmcm9tIHNubXBVRFBEb21haW4uIG5vdCBzdGF0aWMsIGJ1dCBub3QgcHVibGljLCBlaXRoZXIuCisgKiAoaWUgZG9uJ3QgcHV0IGl0IGluIGEgcHVibGljIGhlYWRlci4pCisgKi8KK2V4dGVybiB2b2lkIF9uZXRzbm1wX3VkcF9zb2Nrb3B0X3NldChpbnQgZmQsIGludCBzZXJ2ZXIpOworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLiAgCisgKi8KKworc3RhdGljIGNoYXIgKgorbmV0c25tcF91ZHA2X2ZtdGFkZHIobmV0c25tcF90cmFuc3BvcnQgKnQsIHZvaWQgKmRhdGEsIGludCBsZW4pCit7CisgICAgcmV0dXJuIG5ldHNubXBfaXB2Nl9mbXRhZGRyKCJVRFAvSVB2NiIsIHQsIGRhdGEsIGxlbik7Cit9CisKKworCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sgCisgKiB0byB5b3VyIHNlbmQgZnVuY3Rpb24gaWYgeW91IGxpa2UuICBGb3IgaW5zdGFuY2UsIHlvdSBtaWdodCB3YW50IHRvCisgKiByZW1lbWJlciB3aGVyZSBhIFBEVSBjYW1lIGZyb20sIHNvIHRoYXQgeW91IGNhbiBzZW5kIGEgcmVwbHkgdGhlcmUuLi4gIAorICovCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdWRwNl9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcmMgPSAtMTsKKyAgICBzb2NrbGVuX3QgICAgICAgZnJvbWxlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKmZyb207CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBmcm9tID0gKHN0cnVjdCBzb2NrYWRkciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgaWYgKGZyb20gPT0gTlVMTCkgeworICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1zZXQoZnJvbSwgMCwgZnJvbWxlbik7CisgICAgICAgIH0KKworCXdoaWxlIChyYyA8IDApIHsKKwkgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBmcm9tLCAmZnJvbWxlbik7CisJICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJICAgIGJyZWFrOworCSAgfQorCX0KKworICAgICAgICBpZiAocmMgPj0gMCkgeworICAgICAgICAgICAgREVCVUdJRigibmV0c25tcF91ZHA2IikgeworICAgICAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwNl9mbXRhZGRyKE5VTEwsIGZyb20sIGZyb21sZW4pOworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJyZWN2ZnJvbSBmZCAlZCBnb3QgJWQgYnl0ZXMgKGZyb20gJXMpXG4iLCB0LT5zb2NrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJjLCBzdHIpKTsKKyAgICAgICAgICAgICAgICBmcmVlKHN0cik7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2IiwgInJlY3Zmcm9tIGZkICVkIGVyciAlZCAoXCIlc1wiKVxuIiwKKwkJCXQtPnNvY2ssIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgfQorICAgICAgICAqb3BhcXVlID0gKHZvaWQgKikgZnJvbTsKKyAgICAgICAgKm9sZW5ndGggPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdWRwNl9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorCQkgIHZvaWQgKipvcGFxdWUsIGludCAqb2xlbmd0aCkKK3sKKyAgICBpbnQgcmMgPSAtMTsKKyAgICBzdHJ1Y3Qgc29ja2FkZHIgKnRvID0gTlVMTDsKKworICAgIGlmIChvcGFxdWUgIT0gTlVMTCAmJiAqb3BhcXVlICE9IE5VTEwgJiYKKyAgICAgICAgKm9sZW5ndGggPT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSAoKm9wYXF1ZSk7CisgICAgfSBlbHNlIGlmICh0ICE9IE5VTEwgJiYgdC0+ZGF0YSAhPSBOVUxMICYmCisgICAgICAgICAgICAgICAoKHQtPmRhdGFfbGVuZ3RoID09IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSkgfHwKKyAgICAgICAgICAgICAgICAodC0+ZGF0YV9sZW5ndGggPT0gc2l6ZW9mKG5ldHNubXBfaW5kZXhlZF9hZGRyX3BhaXIpKSkpIHsKKyAgICAgICAgdG8gPSAoc3RydWN0IHNvY2thZGRyICopICh0LT5kYXRhKTsKKyAgICB9CisKKyAgICBpZiAodG8gIT0gTlVMTCAmJiB0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIERFQlVHSUYoIm5ldHNubXBfdWRwNiIpIHsKKyAgICAgICAgICAgIGNoYXIgKnN0ciA9IG5ldHNubXBfdWRwNl9mbXRhZGRyKE5VTEwsICh2b2lkICopdG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsCisgICAgICAgICAgICAgICAgICAgICAgICAic2VuZCAlZCBieXRlcyBmcm9tICVwIHRvICVzIG9uIGZkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSwgYnVmLCBzdHIsIHQtPnNvY2spKTsKKyAgICAgICAgICAgIGZyZWUoc3RyKTsKKyAgICAgICAgfQorCXdoaWxlIChyYyA8IDApIHsKKwkgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCB0byxzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworCSAgICBpZiAocmMgPCAwICYmIGVycm5vICE9IEVJTlRSKSB7CisJCWJyZWFrOworCSAgICB9CisJfQorICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIE9wZW4gYSBVRFAvSVB2Ni1iYXNlZCB0cmFuc3BvcnQgZm9yIFNOTVAuICBMb2NhbCBpcyBUUlVFIGlmIGFkZHIgaXMgdGhlCisgKiBsb2NhbCBhZGRyZXNzIHRvIGJpbmQgdG8gKGkuZS4gdGhpcyBpcyBhIHNlcnZlci10eXBlIHNlc3Npb24pOyBvdGhlcndpc2UKKyAqIGFkZHIgaXMgdGhlIHJlbW90ZSBhZGRyZXNzIHRvIHNlbmQgdGhpbmdzIHRvLiAgCisgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91ZHA2X3RyYW5zcG9ydChzdHJ1Y3Qgc29ja2FkZHJfaW42ICphZGRyLCBpbnQgbG9jYWwpCit7CisgICAgbmV0c25tcF90cmFuc3BvcnQgKnQgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICByYyA9IDA7CisKKyNpZmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgaWYgKGxvY2FsKQorICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisKKyAgICBpZiAoYWRkciA9PSBOVUxMIHx8IGFkZHItPnNpbjZfZmFtaWx5ICE9IEFGX0lORVQ2KSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHSUYoIm5ldHNubXBfdWRwNiIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91ZHA2X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKikgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJvcGVuICVzICVzXG4iLCBsb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwKKyAgICAgICAgICAgICAgICAgICAgc3RyKSk7CisgICAgICAgIGZyZWUoc3RyKTsKKyAgICB9CisKKyAgICB0LT5kb21haW4gPSBuZXRzbm1wX1VEUElQdjZEb21haW47CisgICAgdC0+ZG9tYWluX2xlbmd0aCA9CisgICAgICAgIHNpemVvZihuZXRzbm1wX1VEUElQdjZEb21haW4pIC8gc2l6ZW9mKG5ldHNubXBfVURQSVB2NkRvbWFpblswXSk7CisKKyAgICB0LT5zb2NrID0gc29ja2V0KFBGX0lORVQ2LCBTT0NLX0RHUkFNLCAwKTsKKyAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgX25ldHNubXBfdWRwX3NvY2tvcHRfc2V0KHQtPnNvY2ssIGxvY2FsKTsKKworICAgIGlmIChsb2NhbCkgeworI2lmbmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgc2Vzc2lvbiBpcyBpbnRlbmRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIG9uIHRvIHRoZQorICAgICAgICAgKiBnaXZlbiBJUCBhZGRyZXNzLCB3aGljaCBtYXkgaW5jbHVkZSBhbiBpbnRlcmZhY2UgYWRkcmVzcywgb3IgY291bGQKKyAgICAgICAgICogYmUgSU5BRERSX0FOWSwgYnV0IGNlcnRhaW5seSBpbmNsdWRlcyBhIHBvcnQgbnVtYmVyLgorICAgICAgICAgKi8KKworI2lmZGVmIElQVjZfVjZPTkxZCisgICAgICAgIC8qIFRyeSB0byByZXN0cmljdCBQRl9JTkVUNiBzb2NrZXQgdG8gSVB2NiBjb21tdW5pY2F0aW9ucyBvbmx5LiAqLworICAgICAgICB7CisgICAgICAgICAgICBpbnQgb25lPTE7CisgICAgICAgICAgICBpZiAoc2V0c29ja29wdCh0LT5zb2NrLCBJUFBST1RPX0lQVjYsIElQVjZfVjZPTkxZLCAoY2hhciAqKSZvbmUsIHNpemVvZihvbmUpKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNiIsICJjb3VsZG4ndCBzZXQgSVBWNl9WNk9OTFkgdG8gJWQgYnl0ZXM6ICVzXG4iLCBvbmUsIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgfSAKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgcmMgPSBiaW5kKHQtPnNvY2ssIChzdHJ1Y3Qgc29ja2FkZHIgKikgYWRkciwKKwkJICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlKHQpOworICAgICAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICB9CisgICAgICAgIHQtPmxvY2FsID0gKHVuc2lnbmVkIGNoYXIqKW1hbGxvYygxOCk7CisgICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3NvY2tldGJhc2VfY2xvc2UodCk7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOworICAgICAgICB0LT5sb2NhbFsxNl0gPSAobnRvaHMoYWRkci0+c2luNl9wb3J0KSAmIDB4ZmYwMCkgPj4gODsKKyAgICAgICAgdC0+bG9jYWxbMTddID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweDAwZmYpID4+IDA7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IDE4OworICAgICAgICB0LT5kYXRhID0gTlVMTDsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSAwOworI2Vsc2UgLyogTkVUU05NUF9OT19MSVNURU5fU1VQUE9SVCAqLworICAgICAgICByZXR1cm4gTlVMTDsKKyNlbmRpZiAvKiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUICovCisgICAgfSBlbHNlIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBpcyBhIGNsaWVudCBzZXNzaW9uLiAgU2F2ZSB0aGUgYWRkcmVzcyBpbiB0aGUKKyAgICAgICAgICogdHJhbnNwb3J0LXNwZWNpZmljIGRhdGEgcG9pbnRlciBmb3IgbGF0ZXIgdXNlIGJ5IG5ldHNubXBfdWRwNl9zZW5kLgorICAgICAgICAgKi8KKworICAgICAgICB0LT5kYXRhID0gbWFsbG9jKHNpemVvZihuZXRzbm1wX2luZGV4ZWRfYWRkcl9wYWlyKSk7CisgICAgICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+ZGF0YSwgYWRkciwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpKTsKKyAgICAgICAgdC0+ZGF0YV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9pbmRleGVkX2FkZHJfcGFpcik7CisgICAgICAgIHQtPnJlbW90ZSA9ICh1bnNpZ25lZCBjaGFyKiltYWxsb2MoMTgpOworICAgICAgICBpZiAodC0+cmVtb3RlID09IE5VTEwpIHsKKyAgICAgICAgICAgIG5ldHNubXBfc29ja2V0YmFzZV9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBtZW1jcHkodC0+cmVtb3RlLCBhZGRyLT5zaW42X2FkZHIuczZfYWRkciwgMTYpOworICAgICAgICB0LT5yZW1vdGVbMTZdID0gKG50b2hzKGFkZHItPnNpbjZfcG9ydCkgJiAweGZmMDApID4+IDg7CisgICAgICAgIHQtPnJlbW90ZVsxN10gPSAobnRvaHMoYWRkci0+c2luNl9wb3J0KSAmIDB4MDBmZikgPj4gMDsKKyAgICAgICAgdC0+cmVtb3RlX2xlbmd0aCA9IDE4OworICAgIH0KKworICAgIC8qCisgICAgICogMTYtYml0IGxlbmd0aCBmaWVsZCwgOCBieXRlIFVEUCBoZWFkZXIsIDQwIGJ5dGUgSVB2NiBoZWFkZXIuICAKKyAgICAgKi8KKworICAgIHQtPm1zZ01heFNpemUgPSAweGZmZmYgLSA4IC0gNDA7CisgICAgdC0+Zl9yZWN2ICAgICA9IG5ldHNubXBfdWRwNl9yZWN2OworICAgIHQtPmZfc2VuZCAgICAgPSBuZXRzbm1wX3VkcDZfc2VuZDsKKyAgICB0LT5mX2Nsb3NlICAgID0gbmV0c25tcF9zb2NrZXRiYXNlX2Nsb3NlOworICAgIHQtPmZfYWNjZXB0ICAgPSBOVUxMOworICAgIHQtPmZfZm10YWRkciAgPSBuZXRzbm1wX3VkcDZfZm10YWRkcjsKKworICAgIHJldHVybiB0OworfQorCisKKyNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKy8qCisgKiBUaGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBwcm92aWRlIHRoZSAiY29tMnNlYzYiIGNvbmZpZ3VyYXRpb24gdG9rZW4KKyAqIGZ1bmN0aW9uYWxpdHkgZm9yIGNvbXBhdGliaWxpdHkuCisgKi8KKworI2RlZmluZSBFWEFNUExFX05FVFdPUksgICAgICAgIk5FVFdPUksiCisjZGVmaW5lIEVYQU1QTEVfQ09NTVVOSVRZICAgICAiQ09NTVVOSVRZIgorCit0eXBlZGVmIHN0cnVjdCBjb20yU2VjNkVudHJ5X3MgeworICAgIGNvbnN0IGNoYXIgICAgICpzZWNOYW1lOworICAgIGNvbnN0IGNoYXIgICAgICpjb250ZXh0TmFtZTsKKyAgICBzdHJ1Y3QgY29tMlNlYzZFbnRyeV9zICpuZXh0OworICAgIHN0cnVjdCBpbjZfYWRkciBuZXR3b3JrOworICAgIHN0cnVjdCBpbjZfYWRkciBtYXNrOworICAgIGNvbnN0IGNoYXIgICAgICBjb21tdW5pdHlbMV07Cit9IGNvbTJTZWM2RW50cnk7CisKK3N0YXRpYyBjb20yU2VjNkVudHJ5ICAqY29tMlNlYzZMaXN0ID0gTlVMTCwgKmNvbTJTZWM2TGlzdExhc3QgPSBOVUxMOworCisKK05FVFNOTVBfU1RBVElDX0lOTElORSBpbnQKK2NyZWF0ZV9jb20yU2VjNkVudHJ5KGNvbnN0IHN0cnVjdCBhZGRyaW5mbyogY29uc3QgcnVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGluNl9hZGRyKiBjb25zdCBtYXNrLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3Qgc2VjTmFtZSwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBzZWNOYW1lTGVuLAorICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogY29uc3QgY29udGV4dE5hbWUsCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29udGV4dE5hbWVMZW4sCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiBjb25zdCBjb21tdW5pdHksCisgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3QgY29tbXVuaXR5TGVuLAorICAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZFbnRyeSoqIGNvbnN0IGJlZ2luLAorICAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZFbnRyeSoqIGNvbnN0IGVuZCkKK3sKKyAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICogY29uc3QgcnVuX2FkZHIgPQorICAgICAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiopcnVuLT5haV9hZGRyOworICAgIGludCBpOworCisgICAgLyogQ2hlY2sgdGhhdCB0aGUgbmV0d29yayBhbmQgbWFzayBhcmUgY29uc2lzdGVudC4gKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMTY7ICsraSkgeworICAgICAgICBpZiAocnVuX2FkZHItPnNpbjZfYWRkci5zNl9hZGRyW2ldICYgfm1hc2stPnM2X2FkZHJbaV0pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoInNvdXJjZS9tYXNrIG1pc21hdGNoIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHsKKyAgICAgICAgY2hhciBidWYxW0lORVQ2X0FERFJTVFJMRU5dOworICAgICAgICBjaGFyIGJ1ZjJbSU5FVDZfQUREUlNUUkxFTl07CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkiLAorICAgICAgICAgICAgICAgICAgICAiPFwiJXNcIiwgJXMvJXM+ID0+IFwiJXNcIlxuIiwKKyAgICAgICAgICAgICAgICAgICAgY29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZydW5fYWRkci0+c2luNl9hZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmMSwgc2l6ZW9mKGJ1ZjEpKSwKKyAgICAgICAgICAgICAgICAgICAgaW5ldF9udG9wKEFGX0lORVQ2LCBtYXNrLCBidWYyLCBzaXplb2YoYnVmMikpLAorICAgICAgICAgICAgICAgICAgICBzZWNOYW1lKSk7CisgICAgfQorCisgICAgeworICAgICAgICAvKiBBbGxvY2F0ZSBhbGwgdGhlIG5lZWRlZCBjaHVua3MgKi8KKyAgICAgICAgdm9pZCAqIGNvbnN0IHYgPQorICAgICAgICAgICAgbWFsbG9jKG9mZnNldG9mKGNvbTJTZWM2RW50cnksIGNvbW11bml0eSkgKyBjb21tdW5pdHlMZW4gKworICAgICAgICAgICAgICAgICAgIHNlY05hbWVMZW4gKyBjb250ZXh0TmFtZUxlbik7CisKKyAgICAgICAgY29tMlNlYzZFbnRyeSogY29uc3QgZSA9IChjb20yU2VjNkVudHJ5Kil2OworICAgICAgICBjaGFyICpsYXN0ID0gKChjaGFyKil2KSArIG9mZnNldG9mKGNvbTJTZWM2RW50cnksIGNvbW11bml0eSk7CisKKyAgICAgICAgaWYgKHYgPT0gTlVMTCkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorCisgICAgICAgIG1lbWNweShsYXN0LCBjb21tdW5pdHksIGNvbW11bml0eUxlbik7CisgICAgICAgIGxhc3QgKz0gY29tbXVuaXR5TGVuOworCisgICAgICAgIG1lbWNweShsYXN0LCBzZWNOYW1lLCBzZWNOYW1lTGVuKTsKKyAgICAgICAgZS0+c2VjTmFtZSA9IGxhc3Q7CisgICAgICAgIGxhc3QgKz0gc2VjTmFtZUxlbjsKKworICAgICAgICBpZiAoY29udGV4dE5hbWVMZW4pIHsKKyAgICAgICAgICAgIG1lbWNweShsYXN0LCBjb250ZXh0TmFtZSwgY29udGV4dE5hbWVMZW4pOworICAgICAgICAgICAgZS0+Y29udGV4dE5hbWUgPSBsYXN0OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGUtPmNvbnRleHROYW1lID0gbGFzdCAtIDE7CisKKyAgICAgICAgbWVtY3B5KCZlLT5uZXR3b3JrLCAmcnVuX2FkZHItPnNpbjZfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworICAgICAgICBtZW1jcHkoJmUtPm1hc2ssIG1hc2ssIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKworICAgICAgICBlLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgaWYgKCplbmQgIT0gTlVMTCkgeworICAgICAgICAgICAgKCplbmQpLT5uZXh0ID0gZTsKKyAgICAgICAgICAgICplbmQgPSBlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgKmVuZCA9ICpiZWdpbiA9IGU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQKK25ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eShjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqcGFyYW0pCit7CisgICAgY2hhciAgICAgICAgICAgIHNlY05hbWVbVkFDTVNUUklOR0xFTiArIDFdOworICAgIHNpemVfdCAgICAgICAgICBzZWNOYW1lTGVuOworICAgIGNoYXIgICAgICAgICAgICBjb250ZXh0TmFtZVtWQUNNU1RSSU5HTEVOICsgMV07CisgICAgc2l6ZV90ICAgICAgICAgIGNvbnRleHROYW1lTGVuOworICAgIGNoYXIgICAgICAgICAgICBjb21tdW5pdHlbQ09NTVVOSVRZX01BWF9MRU4gKyAxXTsKKyAgICBzaXplX3QgICAgICAgICAgY29tbXVuaXR5TGVuOworICAgIGNoYXIgICAgICAgICAgICBzb3VyY2VbMzAwXTsgLyogZG5zLW5hbWUoMjUzKSsvKDEpK21hc2soNDUpK1wwKDEpICovCisgICAgc3RydWN0IGluNl9hZGRyIG1hc2s7CisKKyAgICAvKgorICAgICAqIEdldCBzZWN1cml0eSwgc291cmNlIGFkZHJlc3MvbmV0bWFzayBhbmQgY29tbXVuaXR5IHN0cmluZ3MuCisgICAgICovCisKKyAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBzZWNOYW1lLCBzaXplb2Yoc2VjTmFtZSkpOworICAgIGlmIChzdHJjbXAoc2VjTmFtZSwgIi1DbiIpID09IDApIHsKKyAgICAgICAgaWYgKCFwYXJhbSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT05URVhUX05BTUUgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgY29udGV4dE5hbWUsIHNpemVvZihjb250ZXh0TmFtZSkpOworICAgICAgICBjb250ZXh0TmFtZUxlbiA9IHN0cmxlbihjb250ZXh0TmFtZSkgKyAxOworICAgICAgICBpZiAoY29udGV4dE5hbWVMZW4gPiBWQUNNU1RSSU5HTEVOKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJjb250ZXh0IG5hbWUgdG9vIGxvbmciKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIE5BTUUgcGFyYW1ldGVyIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb250ZXh0TmFtZUxlbiA9IDA7CisgICAgfQorCisgICAgc2VjTmFtZUxlbiA9IHN0cmxlbihzZWNOYW1lKSArIDE7CisgICAgaWYgKHNlY05hbWVMZW4gPT0gMSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJlbXB0eSBOQU1FIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfSBlbHNlIGlmIChzZWNOYW1lTGVuID4gVkFDTVNUUklOR0xFTikgeworICAgICAgICBjb25maWdfcGVycm9yKCJzZWN1cml0eSBuYW1lIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIXBhcmFtKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgU09VUkNFIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNvdXJjZSwgc2l6ZW9mKHNvdXJjZSkpOworICAgIGlmIChzb3VyY2VbMF0gPT0gJ1wwJykgeworICAgICAgICBjb25maWdfcGVycm9yKCJlbXB0eSBTT1VSQ0UgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKHN0cm5jbXAoc291cmNlLCBFWEFNUExFX05FVFdPUkssIHN0cmxlbihFWEFNUExFX05FVFdPUkspKSA9PSAwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIE5FVFdPUksgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgY29tbXVuaXR5LCBzaXplb2YoY29tbXVuaXR5KSk7CisgICAgaWYgKGNvbW11bml0eVswXSA9PSAnXDAnKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImVtcHR5IENPTU1VTklUWSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBjb21tdW5pdHlMZW4gPSBzdHJsZW4oY29tbXVuaXR5KSArIDE7CisgICAgaWYgKGNvbW11bml0eUxlbiA+PSBDT01NVU5JVFlfTUFYX0xFTikgeworICAgICAgICBjb25maWdfcGVycm9yKCJjb21tdW5pdHkgbmFtZSB0b28gbG9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChjb21tdW5pdHlMZW4gPT0gc2l6ZW9mKEVYQU1QTEVfQ09NTVVOSVRZKSAmJgorICAgICAgICBtZW1jbXAoY29tbXVuaXR5LCBFWEFNUExFX0NPTU1VTklUWSwgc2l6ZW9mKEVYQU1QTEVfQ09NTVVOSVRZKSkgPT0gMCkgeworICAgICAgICBjb25maWdfcGVycm9yKCJleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8qIFBvc3NpYmxlIG1hc2sgY2FzZXMKKyAgICAgKiAiZGVmYXVsdCIgPD0+IDA6OjAvMAorICAgICAqIDxob3N0bmFtZT5bL10gPD0+IDxob3N0bmFtZT4vMTI4CisgICAgICogPGhvc3RuYW1lPi9udW1iZXIgPD0+IDxob3N0bmFtZT4vbnVtYmVyCisgICAgICogPGhvc3RuYW1lPi88bWFzaz4gPD0+IDxob3N0bmFtZT4vPG1hc2s+CisgICAgICovCisgICAgeworICAgICAgICAvKiBEZWFsIHdpdGggdGhlICJkZWZhdWx0IiBjYXNlIGZpcnN0LiAqLworICAgICAgICBjb25zdCBpbnQgaXNkZWZhdWx0ID0gc3RyY21wKHNvdXJjZSwgImRlZmF1bHQiKSA9PSAwOworCisgICAgICAgIGlmIChpc2RlZmF1bHQpIHsKKyAgICAgICAgICAgIG1lbXNldChtYXNrLnM2X2FkZHIsICdcMCcsIHNpemVvZihtYXNrLnM2X2FkZHIpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIFNwbGl0IHRoZSBzb3VyY2UvbmV0bWFzayBwYXJ0cyAqLworICAgICAgICAgICAgY2hhciAqc3RybWFzayA9IHN0cmNocihzb3VyY2UsICcvJyk7CisgICAgICAgICAgICBpZiAoc3RybWFzayAhPSBOVUxMKQorICAgICAgICAgICAgICAgIC8qIE1hc2sgZ2l2ZW4uICovCisgICAgICAgICAgICAgICAgKnN0cm1hc2srKyA9ICdcMCc7CisKKyAgICAgICAgICAgIC8qIFRyeSB0byBpbnRlcnByZXQgdGhlIG1hc2sgKi8KKyAgICAgICAgICAgIGlmIChzdHJtYXNrID09IE5VTEwgfHwgKnN0cm1hc2sgPT0gJ1wwJykgeworICAgICAgICAgICAgICAgIC8qIE5vIG1hc2sgd2FzIGdpdmVuLiBBc3N1bWUgLzEyOCAqLworICAgICAgICAgICAgICAgIG1lbXNldChtYXNrLnM2X2FkZHIsICdceGZmJywgc2l6ZW9mKG1hc2suczZfYWRkcikpOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiBUcnkgdG8gaW50ZXJwcmV0IG1hc2sgYXMgYSAibnVtYmVyIG9mIDEgYml0cyIuICovCisgICAgICAgICAgICAgICAgY2hhciogY3A7CisgICAgICAgICAgICAgICAgbG9uZyBtYXNrbGVuZ3RoID0gc3RydG9sKHN0cm1hc2ssICZjcCwgMTApOworICAgICAgICAgICAgICAgIGlmICgqY3AgPT0gJ1wwJykgeworICAgICAgICAgICAgICAgICAgICBpZiAoMCA8PSBtYXNrbGVuZ3RoICYmIG1hc2tsZW5ndGggPD0gMTI4KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgaiA9IG1hc2tsZW5ndGggLyA4OworICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaW50IGpqID0gbWFza2xlbmd0aCAlIDg7CisgICAgICAgICAgICAgICAgICAgICAgICBtZW1zZXQobWFzay5zNl9hZGRyLCAnXHhmZicsIGopOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGogPCAxNikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hc2suczZfYWRkcltqXSA9ICgodWludDhfdCl+MFUgPDwgKDggLSBqaikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lbXNldChtYXNrLnM2X2FkZHIgKyBqICsgMSwgJ1wwJywgMTUgLSBqKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIGxlbmd0aCIpOworICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIFRyeSB0byBpbnRlcnByZXQgbWFzayBudW1lcmljYWxseS4gKi8KKyAgICAgICAgICAgICAgICBlbHNlIGlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHN0cm1hc2ssICZtYXNrKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoImJhZCBtYXNrIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICB7CisgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IHB0b25fYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBhZGRyaW5mbyBoaW50cywgKnJlcyA9IE5VTEw7CisgICAgICAgICAgICBtZW1zZXQoJmhpbnRzLCAnXDAnLCBzaXplb2YoaGludHMpKTsKKworICAgICAgICAgICAgLyogRmlyc3QgY2hlY2sgaWYgZGVmYXVsdCwgb3RoZXJ3aXNlIHRyeSB0byBwYXJzZSBhcyBhIG51bWVyaWMKKyAgICAgICAgICAgICAqIGFkZHJlc3MsIGlmIHRoYXQgYWxzbyBmYWlscyB0cnkgdG8gbG9va3VwIHRoZSBhZGRyZXNzICovCisgICAgICAgICAgICBpZiAoaXNkZWZhdWx0KSB7CisgICAgICAgICAgICAgICAgbWVtc2V0KCZwdG9uX2FkZHIuc2luNl9hZGRyLnM2X2FkZHIsICdcMCcsCisgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBzb3VyY2UsICZwdG9uX2FkZHIuc2luNl9hZGRyKSAhPSAxKSB7CisgICAgICAgICAgICAgICAgLyogTm9wZSwgd2Fzbid0IGEgbnVtZXJpYyBhZGRyZXNzLiBNdXN0IGJlIGEgaG9zdG5hbWUuICovCisjaWYgSEFWRV9HRVRBRERSSU5GTworICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBnYWlfZXJyb3I7CisKKyAgICAgICAgICAgICAgICBoaW50cy5haV9mYW1pbHkgPSBBRl9JTkVUNjsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CisgICAgICAgICAgICAgICAgZ2FpX2Vycm9yID0gbmV0c25tcF9nZXRhZGRyaW5mbyhzb3VyY2UsIE5VTEwsICZoaW50cywgJnJlcyk7CisgICAgICAgICAgICAgICAgaWYgKGdhaV9lcnJvciAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoZ2FpX3N0cmVycm9yKGdhaV9lcnJvcikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKyAgICAgICAgICAgICAgICBjb25maWdfcGVycm9yKCJnZXRhZGRyaW5mbygpIG5vdCBhdmFpbGFibGUiKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisjZW5kaWYKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChyZXMgPT0gTlVMTCkgeworICAgICAgICAgICAgICAgIGhpbnRzLmFpX2FkZHJsZW4gPSBzaXplb2YocHRvbl9hZGRyKTsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9hZGRyID0gKHN0cnVjdCBzb2NrYWRkciopJnB0b25fYWRkcjsKKyAgICAgICAgICAgICAgICBoaW50cy5haV9uZXh0ID0gTlVMTDsKKyAgICAgICAgICAgICAgICByZXMgPSAmaGludHM7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3QgYWRkcmluZm8gKnJ1bjsKKyAgICAgICAgICAgICAgICBpbnQgICAgZmFpbGVkID0gMDsKKyAgICAgICAgICAgICAgICBjb20yU2VjNkVudHJ5ICpiZWdpbiA9IE5VTEwsICplbmQgPSBOVUxMOworCisgICAgICAgICAgICAgICAgZm9yIChydW4gPSByZXM7IHJ1biAmJiAhZmFpbGVkOyBydW4gPSBydW4tPmFpX25leHQpCisgICAgICAgICAgICAgICAgICAgIGZhaWxlZCA9CisgICAgICAgICAgICAgICAgICAgICAgICBjcmVhdGVfY29tMlNlYzZFbnRyeShydW4sICZtYXNrLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjTmFtZSwgc2VjTmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHROYW1lLCBjb250ZXh0TmFtZUxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbW11bml0eSwgY29tbXVuaXR5TGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJlZ2luLCAmZW5kKTsKKworICAgICAgICAgICAgICAgIGlmIChmYWlsZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLyogRnJlZSBldmVudHVhbGx5IGFsbG9jYXRlZCBjaHVua3MgKi8KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKGJlZ2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBlbmQgPSBiZWdpbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luID0gYmVnaW4tPm5leHQ7CisgICAgICAgICAgICAgICAgICAgICAgICBmcmVlKGVuZCk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNvbTJTZWM2TGlzdExhc3QgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICAgICBjb20yU2VjNkxpc3RMYXN0LT5uZXh0ID0gYmVnaW47CisgICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QgPSBlbmQ7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgY29tMlNlYzZMaXN0ID0gYmVnaW47CisgICAgICAgICAgICAgICAgICAgIGNvbTJTZWM2TGlzdExhc3QgPSBlbmQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorI2lmIEhBVkVfR0VUQUREUklORk8KKyAgICAgICAgICAgIGlmIChyZXMgIT0gJmhpbnRzKQorICAgICAgICAgICAgICAgIGZyZWVhZGRyaW5mbyhyZXMpOworI2VuZGlmCisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK25ldHNubXBfdWRwNl9jb20yU2VjNkxpc3RfZnJlZSh2b2lkKQoreworICAgIGNvbTJTZWM2RW50cnkgICplID0gY29tMlNlYzZMaXN0OworICAgIHdoaWxlIChlICE9IE5VTEwpIHsKKyAgICAgICAgY29tMlNlYzZFbnRyeSAgKnRtcCA9IGU7CisgICAgICAgIGUgPSBlLT5uZXh0OworICAgICAgICBmcmVlKHRtcCk7CisgICAgfQorICAgIGNvbTJTZWM2TGlzdCA9IGNvbTJTZWM2TGlzdExhc3QgPSBOVUxMOworfQorCisjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KKwordm9pZAorbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKK3sKKyNpZiAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYxKSB8fCAhZGVmaW5lZChORVRTTk1QX0RJU0FCTEVfU05NUFYyQykKKyAgICByZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIoImNvbTJzZWM2IiwgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3VkcDZfY29tMlNlYzZMaXN0X2ZyZWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJbLUNuIENPTlRFWFRdIHNlY05hbWUgSVB2Ni1uZXR3b3JrLWFkZHJlc3NbL25ldG1hc2tdIGNvbW11bml0eSIpOworI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCit9CisKKworCisjaWYgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMSkgfHwgIWRlZmluZWQoTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMpCisKKy8qCisgKiBSZXR1cm4gMCBpZiB0aGVyZSBhcmUgbm8gY29tMnNlYyBlbnRyaWVzLCBvciByZXR1cm4gMSBpZiB0aGVyZSBBUkUgY29tMnNlYworICogZW50cmllcy4gIE9uIHJldHVybiwgaWYgYSBjb20yc2VjIGVudHJ5IG1hdGNoZWQgdGhlIHBhc3NlZCBwYXJhbWV0ZXJzLAorICogdGhlbiAqc2VjTmFtZSBwb2ludHMgYXQgdGhlIGFwcHJvcHJpYXRlIHNlY3VyaXR5IG5hbWUsIG9yIGlzIE5VTEwgaWYgdGhlCisgKiBwYXJhbWV0ZXJzIGRpZCBub3QgbWF0Y2ggYW55IGNvbTJzZWMgZW50cnkuCisgKi8KKworaW50CituZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSh2b2lkICpvcGFxdWUsIGludCBvbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqY29tbXVuaXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNvbW11bml0eV9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqc2VjTmFtZSwgY29uc3QgY2hhciAqKmNvbnRleHROYW1lKQoreworICAgIGNvbnN0IGNvbTJTZWM2RW50cnkgKmM7CisgICAgc3RydWN0IHNvY2thZGRyX2luNiAqZnJvbSA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopIG9wYXF1ZTsKKyAgICBjaGFyICAgICAgICAgICAqenRjb21tdW5pdHkgPSBOVUxMOworICAgIGNoYXIgICAgICAgICAgICBzdHI2W0lORVQ2X0FERFJTVFJMRU5dOworCisgICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgeworICAgICAgICAqc2VjTmFtZSA9IE5VTEw7ICAvKiBIYXZlbid0IGZvdW5kIGFueXRoaW5nIHlldCAqLworICAgIH0KKworICAgIC8qCisgICAgICogU3BlY2lhbCBjYXNlIGlmIHRoZXJlIGFyZSBOTyBlbnRyaWVzIChhcyBvcHBvc2VkIHRvIG5vIE1BVENISU5HCisgICAgICogZW50cmllcykuCisgICAgICovCisKKyAgICBpZiAoY29tMlNlYzZMaXN0ID09IE5VTEwpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgIm5vIGNvbTJzZWMgZW50cmllc1xuIikpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICAvKgorICAgICAqIElmIHRoZXJlIGlzIG5vIElQdjYgc291cmNlIGFkZHJlc3MsIHRoZW4gdGhlcmUgY2FuIGJlIG5vIHZhbGlkIHNlY3VyaXR5CisgICAgICogbmFtZS4KKyAgICAgKi8KKworICAgIGlmIChvcGFxdWUgPT0gTlVMTCB8fCBvbGVuZ3RoICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KQorICAgICAgICB8fCBmcm9tLT5zaW42X2ZhbWlseSAhPSBQRl9JTkVUNikgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91ZHA2X2dldFNlY05hbWUiLAorICAgICAgICAgICAgICAgICAgICAibm8gSVB2NiBzb3VyY2UgYWRkcmVzcyBpbiBQRFU/XG4iKSk7CisgICAgICAgIHJldHVybiAxOworICAgIH0KKworICAgIHp0Y29tbXVuaXR5ID0gKGNoYXIgKikgbWFsbG9jKGNvbW11bml0eV9sZW4gKyAxKTsKKyAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgeworICAgICAgICBtZW1jcHkoenRjb21tdW5pdHksIGNvbW11bml0eSwgY29tbXVuaXR5X2xlbik7CisgICAgICAgIHp0Y29tbXVuaXR5W2NvbW11bml0eV9sZW5dID0gJ1wwJzsKKyAgICB9CisKKyAgICBpbmV0X250b3AoQUZfSU5FVDYsICZmcm9tLT5zaW42X2FkZHIsIHN0cjYsIHNpemVvZihzdHI2KSk7CisgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgInJlc29sdmUgPFwiJXNcIiwgJXM+XG4iLAorICAgICAgICAgICAgICAgIHp0Y29tbXVuaXR5ID8genRjb21tdW5pdHkgOiAiPG1hbGxvYyBlcnJvcj4iLCBzdHI2KSk7CisKKyAgICBmb3IgKGMgPSBjb20yU2VjNkxpc3Q7IGMgIT0gTlVMTDsgYyA9IGMtPm5leHQpIHsKKyAgICAgICAgeworICAgICAgICAgICAgY2hhciBidWYxW0lORVQ2X0FERFJTVFJMRU5dOworICAgICAgICAgICAgY2hhciBidWYyW0lORVQ2X0FERFJTVFJMRU5dOworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb21wYXJlIDxcIiVzXCIsICVzLyVzPiIsIGMtPmNvbW11bml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGluZXRfbnRvcChBRl9JTkVUNiwgJmMtPm5ldHdvcmssIGJ1ZjEsIHNpemVvZihidWYxKSksCisgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoQUZfSU5FVDYsICZjLT5tYXNrLCBidWYyLCBzaXplb2YoYnVmMikpKSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKChjb21tdW5pdHlfbGVuID09IChpbnQpc3RybGVuKGMtPmNvbW11bml0eSkpICYmCisgICAgICAgICAgICAobWVtY21wKGNvbW11bml0eSwgYy0+Y29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKSA9PSAwKSkgeworICAgICAgICAgICAgaW50IGksIG9rID0gMTsKKyAgICAgICAgICAgIGZvciAoaSA9IDA7IG9rICYmIGkgPCAxNjsgKytpKQorICAgICAgICAgICAgICAgIGlmICgoZnJvbS0+c2luNl9hZGRyLnM2X2FkZHJbaV0gJiBjLT5tYXNrLnM2X2FkZHJbaV0pICE9CisgICAgICAgICAgICAgICAgICAgIGMtPm5ldHdvcmsuczZfYWRkcltpXSkKKyAgICAgICAgICAgICAgICAgICAgb2sgPSAwOworICAgICAgICAgICAgaWYgKG9rKSB7CisgICAgICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VkcDZfZ2V0U2VjTmFtZSIsICIuLi4gU1VDQ0VTU1xuIikpOworICAgICAgICAgICAgICAgIGlmIChzZWNOYW1lICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICAgICAgKnNlY05hbWUgPSBjLT5zZWNOYW1lOworICAgICAgICAgICAgICAgICAgICAqY29udGV4dE5hbWUgPSBjLT5jb250ZXh0TmFtZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBERUJVR01TRygoIm5ldHNubXBfdWRwNl9nZXRTZWNOYW1lIiwgIi4uLiBub3BlXG4iKSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoenRjb21tdW5pdHkgIT0gTlVMTCkgeworICAgICAgICBmcmVlKHp0Y29tbXVuaXR5KTsKKyAgICB9CisgICAgcmV0dXJuIDE7Cit9CisjZW5kaWYgLyogc3VwcG9ydCBmb3IgY29tbXVuaXR5IGJhc2VkIFNOTVAgKi8KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91ZHA2X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0ciwgaW50IGxvY2FsLAorCQkJICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjsKKworICAgIGlmIChuZXRzbm1wX3NvY2thZGRyX2luNl8yKCZhZGRyLCBzdHIsIGRlZmF1bHRfdGFyZ2V0KSkgeworICAgICAgICByZXR1cm4gbmV0c25tcF91ZHA2X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KK30KKworCisvKgorICogU2VlOgorICogCisgKiBodHRwOi8vd3d3LmlldGYub3JnL2ludGVybmV0LWRyYWZ0cy9kcmFmdC1pZXRmLW9wcy10YWRkcmVzcy1taWItMDEudHh0CisgKiAKKyAqIChvciBuZXdlciBlcXVpdmFsZW50KSBmb3IgZGV0YWlscyBvZiB0aGUgVEMgd2hpY2ggd2UgYXJlIHVzaW5nIGZvcgorICogdGhlIG1hcHBpbmcgaGVyZS4gIAorICovCisKK25ldHNubXBfdHJhbnNwb3J0ICoKK25ldHNubXBfdWRwNl9jcmVhdGVfb3N0cmluZyhjb25zdCB1X2NoYXIgKiBvLCBzaXplX3Qgb19sZW4sIGludCBsb2NhbCkKK3sKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42IGFkZHI7CisKKyAgICBpZiAob19sZW4gPT0gMTgpIHsKKyAgICAgICAgbWVtc2V0KCh1X2NoYXIgKikgJiBhZGRyLCAwLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNikpOworICAgICAgICBhZGRyLnNpbjZfZmFtaWx5ID0gQUZfSU5FVDY7CisgICAgICAgIG1lbWNweSgodV9jaGFyICopICYgKGFkZHIuc2luNl9hZGRyLnM2X2FkZHIpLCBvLCAxNik7CisgICAgICAgIGFkZHIuc2luNl9wb3J0ID0gaHRvbnMoKG9bMTZdIDw8IDgpICsgb1sxN10pOworICAgICAgICByZXR1cm4gbmV0c25tcF91ZHA2X3RyYW5zcG9ydCgmYWRkciwgbG9jYWwpOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCit2b2lkCituZXRzbm1wX3VkcGlwdjZfY3Rvcih2b2lkKQoreworICAgIHVkcDZEb21haW4ubmFtZSA9IG5ldHNubXBfVURQSVB2NkRvbWFpbjsKKyAgICB1ZHA2RG9tYWluLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG5ldHNubXBfVURQSVB2NkRvbWFpbikgLyBzaXplb2Yob2lkKTsKKyAgICB1ZHA2RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZyAgICAgPSBOVUxMOworICAgIHVkcDZEb21haW4uZl9jcmVhdGVfZnJvbV90c3RyaW5nX25ldyA9IG5ldHNubXBfdWRwNl9jcmVhdGVfdHN0cmluZzsKKyAgICB1ZHA2RG9tYWluLmZfY3JlYXRlX2Zyb21fb3N0cmluZyAgICAgPSBuZXRzbm1wX3VkcDZfY3JlYXRlX29zdHJpbmc7CisgICAgdWRwNkRvbWFpbi5wcmVmaXggPSAoY29uc3QgY2hhcioqKWNhbGxvYyg1LCBzaXplb2YoY2hhciAqKSk7CisgICAgdWRwNkRvbWFpbi5wcmVmaXhbMF0gPSAidWRwNiI7CisgICAgdWRwNkRvbWFpbi5wcmVmaXhbMV0gPSAiaXB2NiI7CisgICAgdWRwNkRvbWFpbi5wcmVmaXhbMl0gPSAidWRwdjYiOworICAgIHVkcDZEb21haW4ucHJlZml4WzNdID0gInVkcGlwdjYiOworCisgICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ1ZHA2RG9tYWluKTsKK30KKworI2Vsc2UKKworI2lmZGVmIE5FVFNOTVBfRExMCisvKiBuZWVkIHRoaXMgaG9vayBmb3Igd2luMzIgTVNWQysrIERMTCBidWlsZCAqLwordm9pZAorbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIodm9pZCkKK3sgfQorI2VuZGlmCisKKyNlbmRpZiAvKiBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTiAqLworCmRpZmYgLS1naXQgYS9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYyBiL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wVW5peERvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3ZGZmYzEKLS0tIC9kZXYvbnVsbAorKysgYi9zbm1wbGliL3RyYW5zcG9ydHMvc25tcFVuaXhEb21haW4uYwpAQCAtMCwwICsxLDc1MiBAQAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBVbml4RG9tYWluLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2lmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2VuZGlmCisjaWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9VTklTVERfSAorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2VuZGlmCisjaWYgSEFWRV9TWVNfU09DS0VUX0gKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjZW5kaWYKKworI2lmIEhBVkVfRE1BTExPQ19ICisjaW5jbHVkZSA8ZG1hbGxvYy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL291dHB1dF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9jb25maWdfYXBpLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfdHJhbnNwb3J0Lmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wU29ja2V0QmFzZURvbWFpbi5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc3lzdGVtLmg+IC8qIG1rZGlyaGllciAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKworbmV0c25tcF9mZWF0dXJlX2NoaWxkX29mKHRyYW5zcG9ydF91bml4X3NvY2tldF9hbGwsIHRyYW5zcG9ydF9hbGwpCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodW5peF9zb2NrZXRfcGF0aHMsIHRyYW5zcG9ydF91bml4X3NvY2tldF9hbGwpCisKKyNpZm5kZWYgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOCisjZGVmaW5lIE5FVFNOTVBfU1RSRUFNX1FVRVVFX0xFTiAgNQorI2VuZGlmCisKKyNpZm5kZWYgU1VOX0xFTgorLyoKKyAqIEV2YWx1YXRlIHRvIGFjdHVhbCBsZW5ndGggb2YgdGhlIGBzb2NrYWRkcl91bicgc3RydWN0dXJlLgorICovCisjZGVmaW5lIFNVTl9MRU4ocHRyKSAoKHNpemVfdCkgKCgoc3RydWN0IHNvY2thZGRyX3VuICopIDApLT5zdW5fcGF0aCkgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgKyBzdHJsZW4gKChwdHIpLT5zdW5fcGF0aCkpCisjZW5kaWYKKworb2lkIG5ldHNubXBfVW5peERvbWFpbltdID0geyBUUkFOU1BPUlRfRE9NQUlOX0xPQ0FMIH07CitzdGF0aWMgbmV0c25tcF90ZG9tYWluIHVuaXhEb21haW47CisKKworLyoKKyAqIFRoaXMgaXMgdGhlIHN0cnVjdHVyZSB3ZSB1c2UgdG8gaG9sZCB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YS4KKyAqLworCit0eXBlZGVmIHN0cnVjdCBfc29ja2FkZHJfdW5fcGFpciB7CisgICAgaW50ICAgICAgICAgICAgIGxvY2FsOworICAgIHN0cnVjdCBzb2NrYWRkcl91biBzZXJ2ZXI7CisgICAgc3RydWN0IHNvY2thZGRyX3VuIGNsaWVudDsKK30gc29ja2FkZHJfdW5fcGFpcjsKKworCisvKgorICogUmV0dXJuIGEgc3RyaW5nIHJlcHJlc2VudGluZyB0aGUgYWRkcmVzcyBpbiBkYXRhLCBvciBlbHNlIHRoZSAiZmFyIGVuZCIKKyAqIGFkZHJlc3MgaWYgZGF0YSBpcyBOVUxMLgorICovCisKK3N0YXRpYyBjaGFyICoKK25ldHNubXBfdW5peF9mbXRhZGRyKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpkYXRhLCBpbnQgbGVuKQoreworICAgIHN0cnVjdCBzb2NrYWRkcl91biAqdG8gPSBOVUxMOworCisgICAgaWYgKGRhdGEgIT0gTlVMTCkgeworICAgICAgICB0byA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgZGF0YTsKKyAgICB9IGVsc2UgaWYgKHQgIT0gTlVMTCAmJiB0LT5kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgdG8gPSAmKCgoc29ja2FkZHJfdW5fcGFpciAqKSB0LT5kYXRhKS0+c2VydmVyKTsKKyAgICAgICAgbGVuID0gU1VOX0xFTih0byk7CisgICAgfQorICAgIGlmICh0byA9PSBOVUxMKSB7CisgICAgICAgIC8qCisgICAgICAgICAqICJMb2NhbCBJUEMiIGlzIHRoZSBQb3NpeC4xZyB0ZXJtIGZvciBVbml4IGRvbWFpbiBwcm90b2NvbHMsCisgICAgICAgICAqIGFjY29yZGluZyB0byBXLiBSLiBTdGV2ZW5zLCBgYFVuaXggTmV0d29yayBQcm9ncmFtbWluZyBWb2x1bWUgSQorICAgICAgICAgKiBTZWNvbmQgRWRpdGlvbicnLCBwLiAzNzQuCisgICAgICAgICAqLworICAgICAgICByZXR1cm4gc3RyZHVwKCJMb2NhbCBJUEM6IHVua25vd24iKTsKKyAgICB9IGVsc2UgaWYgKHRvLT5zdW5fcGF0aFswXSA9PSAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgaXMgYW4gYWJzdHJhY3QgbmFtZS4gIFdlIGNvdWxkIHJlbmRlciBpdCBhcyBoZXggb3Igc29tZXRoaW5nCisgICAgICAgICAqIGJ1dCBsZXQncyBub3Qgd29ycnkgYWJvdXQgdGhhdCBmb3Igbm93LgorICAgICAgICAgKi8KKyAgICAgICAgcmV0dXJuIHN0cmR1cCgiTG9jYWwgSVBDOiBhYnN0cmFjdCIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGNoYXIgICAgICAgICAgICp0bXAgPSAoY2hhciAqKSBtYWxsb2MoMTYgKyBsZW4pOworICAgICAgICBpZiAodG1wICE9IE5VTEwpIHsKKyAgICAgICAgICAgIHNwcmludGYodG1wLCAiTG9jYWwgSVBDOiAlcyIsIHRvLT5zdW5fcGF0aCk7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRtcDsKKyAgICB9Cit9CisKKworCisvKgorICogWW91IGNhbiB3cml0ZSBzb21ldGhpbmcgaW50byBvcGFxdWUgdGhhdCB3aWxsIHN1YnNlcXVlbnRseSBnZXQgcGFzc2VkIGJhY2sKKyAqIHRvIHlvdXIgc2VuZCBmdW5jdGlvbiBpZiB5b3UgbGlrZS4gIEZvciBpbnN0YW5jZSwgeW91IG1pZ2h0IHdhbnQgdG8KKyAqIHJlbWVtYmVyIHdoZXJlIGEgUERVIGNhbWUgZnJvbSwgc28gdGhhdCB5b3UgY2FuIHNlbmQgYSByZXBseSB0aGVyZS4uLgorICovCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdW5peF9yZWN2KG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworICAgIHNvY2tsZW5fdCAgICAgICB0b2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworICAgIHN0cnVjdCBzb2NrYWRkciAqdG87CisKKworICAgIGlmICh0ICE9IE5VTEwgJiYgdC0+c29jayA+PSAwKSB7CisgICAgICAgIHRvID0gKHN0cnVjdCBzb2NrYWRkciAqKSBtYWxsb2Moc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpOworICAgICAgICBpZiAodG8gPT0gTlVMTCkgeworICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1zZXQodG8sIDAsIHRvbGVuKTsKKyAgICAgICAgfQorICAgICAgICBpZihnZXRzb2NrbmFtZSh0LT5zb2NrLCB0bywgJnRvbGVuKSAhPSAwKXsKKyAgICAgICAgICAgIGZyZWUodG8pOworICAgICAgICAgICAgKm9wYXF1ZSA9IE5VTEw7CisgICAgICAgICAgICAqb2xlbmd0aCA9IDA7CisgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIH07CisgICAgICAgIHdoaWxlIChyYyA8IDApIHsKKyNpZmRlZiBNU0dfRE9OVFdBSVQKKyAgICAgICAgICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCBNU0dfRE9OVFdBSVQsIE5VTEwsIE5VTEwpOworI2Vsc2UKKyAgICAgICAgICAgIHJjID0gcmVjdmZyb20odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCBOVUxMKTsKKyNlbmRpZgorICAgICAgICAgICAgaWYgKHJjIDwgMCAmJiBlcnJubyAhPSBFSU5UUikgeworICAgICAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAicmVjdiBmZCAlZCBlcnIgJWQgKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdC0+c29jaywgZXJybm8sIHN0cmVycm9yKGVycm5vKSkpOworICAgICAgICAgICAgICAgIHJldHVybiByYzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgICpvcGFxdWUgPSAodm9pZCopdG87CisgICAgICAgICAgICAqb2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAicmVjdiBmZCAlZCBnb3QgJWQgYnl0ZXNcbiIsIHQtPnNvY2ssIHJjKSk7CisgICAgfQorICAgIHJldHVybiByYzsKK30KKworCisKK3N0YXRpYyBpbnQKK25ldHNubXBfdW5peF9zZW5kKG5ldHNubXBfdHJhbnNwb3J0ICp0LCB2b2lkICpidWYsIGludCBzaXplLAorICAgICAgICAgICAgICAgICAgdm9pZCAqKm9wYXF1ZSwgaW50ICpvbGVuZ3RoKQoreworICAgIGludCByYyA9IC0xOworCisgICAgaWYgKHQgIT0gTlVMTCAmJiB0LT5zb2NrID49IDApIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peCIsICJzZW5kICVkIGJ5dGVzIHRvICVwIG9uIGZkICVkXG4iLAorICAgICAgICAgICAgICAgICAgICBzaXplLCBidWYsIHQtPnNvY2spKTsKKyAgICAgICAgd2hpbGUgKHJjIDwgMCkgeworICAgICAgICAgICAgcmMgPSBzZW5kdG8odC0+c29jaywgYnVmLCBzaXplLCAwLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIGlmIChyYyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmM7Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3VuaXhfY2xvc2UobmV0c25tcF90cmFuc3BvcnQgKnQpCit7CisgICAgaW50IHJjID0gMDsKKyAgICBzb2NrYWRkcl91bl9wYWlyICpzdXAgPSAoc29ja2FkZHJfdW5fcGFpciAqKSB0LT5kYXRhOworCisgICAgaWYgKHQtPnNvY2sgPj0gMCkgeworI2lmbmRlZiBIQVZFX0NMT1NFU09DS0VUCisgICAgICAgIHJjID0gY2xvc2UodC0+c29jayk7CisjZWxzZQorICAgICAgICByYyA9IGNsb3Nlc29ja2V0KHQtPnNvY2spOworI2VuZGlmCisgICAgICAgIHQtPnNvY2sgPSAtMTsKKyAgICAgICAgaWYgKHN1cCAhPSBOVUxMKSB7CisgICAgICAgICAgICBpZiAoc3VwLT5sb2NhbCkgeworICAgICAgICAgICAgICAgIGlmIChzdXAtPnNlcnZlci5zdW5fcGF0aFswXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImNsb3NlOiBzZXJ2ZXIgdW5saW5rKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXAtPnNlcnZlci5zdW5fcGF0aCkpOworICAgICAgICAgICAgICAgICAgdW5saW5rKHN1cC0+c2VydmVyLnN1bl9wYXRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGlmIChzdXAtPmNsaWVudC5zdW5fcGF0aFswXSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImNsb3NlOiBjbGllbnQgdW5saW5rKFwiJXNcIilcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdXAtPmNsaWVudC5zdW5fcGF0aCkpOworICAgICAgICAgICAgICAgICAgdW5saW5rKHN1cC0+Y2xpZW50LnN1bl9wYXRoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHJjOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKKworCitzdGF0aWMgaW50CituZXRzbm1wX3VuaXhfYWNjZXB0KG5ldHNubXBfdHJhbnNwb3J0ICp0KQoreworICAgIHN0cnVjdCBzb2NrYWRkciAqZmFyZW5kID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgICAgbmV3c29jayA9IC0xOworICAgIHNvY2tsZW5fdCAgICAgICBmYXJlbmRsZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKTsKKworICAgIGZhcmVuZCA9IChzdHJ1Y3Qgc29ja2FkZHIgKikgbWFsbG9jKGZhcmVuZGxlbik7CisKKyAgICBpZiAoZmFyZW5kID09IE5VTEwpIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogSW5kaWNhdGUgdGhhdCB0aGUgYWNjZXB0YW5jZSBvZiB0aGlzIHNvY2tldCBmYWlsZWQuCisgICAgICAgICAqLworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImFjY2VwdDogbWFsbG9jIGZhaWxlZFxuIikpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG1lbXNldChmYXJlbmQsIDAsIGZhcmVuZGxlbik7CisKKyAgICBpZiAodCAhPSBOVUxMICYmIHQtPnNvY2sgPj0gMCkgeworICAgICAgICBuZXdzb2NrID0gYWNjZXB0KHQtPnNvY2ssIGZhcmVuZCwgJmZhcmVuZGxlbik7CisKKyAgICAgICAgaWYgKG5ld3NvY2sgPCAwKSB7CisgICAgICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwiYWNjZXB0IGZhaWxlZCByYyAlZCBlcnJubyAlZCBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICBuZXdzb2NrLCBlcnJubywgc3RyZXJyb3IoZXJybm8pKSk7CisgICAgICAgICAgICBmcmVlKGZhcmVuZCk7CisgICAgICAgICAgICByZXR1cm4gbmV3c29jazsKKyAgICAgICAgfQorCisgICAgICAgIGlmICh0LT5kYXRhICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGZyZWUodC0+ZGF0YSk7CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4IiwgImFjY2VwdCBzdWNjZWVkZWQgKGZhcmVuZCAlcCBsZW4gJWQpXG4iLAorICAgICAgICAgICAgICAgICAgICBmYXJlbmQsIChpbnQpIGZhcmVuZGxlbikpOworICAgICAgICB0LT5kYXRhID0gZmFyZW5kOworICAgICAgICB0LT5kYXRhX2xlbmd0aCA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfdW4pOworICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KG5ld3NvY2ssIFNPX1NOREJVRiwgMSwgMCk7CisgICAgICAgbmV0c25tcF9zb2NrX2J1ZmZlcl9zZXQobmV3c29jaywgU09fUkNWQlVGLCAxLCAwKTsKKyAgICAgICAgcmV0dXJuIG5ld3NvY2s7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZnJlZShmYXJlbmQpOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCitzdGF0aWMgaW50IGNyZWF0ZV9wYXRoID0gMDsKK3N0YXRpYyBtb2RlX3QgY3JlYXRlX21vZGU7CisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTklYX1NPQ0tFVF9QQVRIUworLyoqIElmIHRyeWluZyB0byBjcmVhdGUgdW5peCBzb2NrZXRzIGluIG5vbmV4aXN0aW5nIGRpcmVjdG9yaWVzIHRoZW4KKyAqICB0cnkgdG8gY3JlYXRlIHRoZSBkaXJlY3Rvcnkgd2l0aCBtYXNrIG1vZGUuCisgKi8KK3ZvaWQgbmV0c25tcF91bml4X2NyZWF0ZV9wYXRoX3dpdGhfbW9kZShpbnQgbW9kZSkKK3sKKyAgICBjcmVhdGVfcGF0aCA9IDE7CisgICAgY3JlYXRlX21vZGUgPSBtb2RlOworfQorCisvKiogSWYgdHJ5aW5nIHRvIGNyZWF0ZSB1bml4IHNvY2tldHMgaW4gbm9uZXhpc3RpbmcgZGlyZWN0b3JpZXMgdGhlbgorICogIGZhaWwuCisgKi8KK3ZvaWQgbmV0c25tcF91bml4X2RvbnRfY3JlYXRlX3BhdGgodm9pZCkKK3sKKyAgICBjcmVhdGVfcGF0aCA9IDA7Cit9CisjZW5kaWYgLyogTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VTklYX1NPQ0tFVF9QQVRIUyAqLworCisvKgorICogT3BlbiBhIFVuaXgtZG9tYWluIHRyYW5zcG9ydCBmb3IgU05NUC4gIExvY2FsIGlzIFRSVUUgaWYgYWRkciBpcyB0aGUgbG9jYWwKKyAqIGFkZHJlc3MgdG8gYmluZCB0byAoaS5lLiB0aGlzIGlzIGEgc2VydmVyLXR5cGUgc2Vzc2lvbik7IG90aGVyd2lzZSBhZGRyIGlzCisgKiB0aGUgcmVtb3RlIGFkZHJlc3MgdG8gc2VuZCB0aGluZ3MgdG8gKGFuZCB3ZSBtYWtlIHVwIGEgdGVtcG9yYXJ5IG5hbWUgZm9yCisgKiB0aGUgbG9jYWwgZW5kIG9mIHRoZSBjb25uZWN0aW9uKS4KKyAqLworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3VuaXhfdHJhbnNwb3J0KHN0cnVjdCBzb2NrYWRkcl91biAqYWRkciwgaW50IGxvY2FsKQoreworICAgIG5ldHNubXBfdHJhbnNwb3J0ICp0ID0gTlVMTDsKKyAgICBzb2NrYWRkcl91bl9wYWlyICpzdXAgPSBOVUxMOworICAgIGludCAgICAgICAgICAgICByYyA9IDA7CisKKyNpZmRlZiBORVRTTk1QX05PX0xJU1RFTl9TVVBQT1JUCisgICAgLyogU1BFQ0lBTCBDSVJDVU1TVEFOQ0U6IFdlIHN0aWxsIHdhbnQgQWdlbnRYIHRvIGJlIGFibGUgdG8gb3BlcmF0ZSwKKyAgICAgICBzbyB3ZSBhbGxvdyBmb3IgdW5peCBkb21haW4gc29ja3RlcyB0byBzdGlsbCBsaXN0ZW4gd2hlbiBldmVyeXRoaW5nCisgICAgICAgZWxzZSBpc24ndCBhbGxvd2VkIHRvLiAgVGh1cywgd2UgaWdub3JlIHRoaXMgZGVmaW5lIGluIHRoaXMgZmlsZS4KKyAgICAqLworI2VuZGlmIC8qIE5FVFNOTVBfTk9fTElTVEVOX1NVUFBPUlQgKi8KKworICAgIGlmIChhZGRyID09IE5VTEwgfHwgYWRkci0+c3VuX2ZhbWlseSAhPSBBRl9VTklYKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHQgPSBTTk1QX01BTExPQ19UWVBFREVGKG5ldHNubXBfdHJhbnNwb3J0KTsKKyAgICBpZiAodCA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIERFQlVHSUYoIm5ldHNubXBfdW5peCIpIHsKKyAgICAgICAgY2hhciAqc3RyID0gbmV0c25tcF91bml4X2ZtdGFkZHIoTlVMTCwgKHZvaWQgKilhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IHNvY2thZGRyX3VuKSk7CisgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXgiLCAib3BlbiAlcyAlc1xuIiwgbG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsCisgICAgICAgICAgICAgICAgICAgIHN0cikpOworICAgICAgICBmcmVlKHN0cik7CisgICAgfQorCisgICAgdC0+ZG9tYWluID0gbmV0c25tcF9Vbml4RG9tYWluOworICAgIHQtPmRvbWFpbl9sZW5ndGggPQorICAgICAgICBzaXplb2YobmV0c25tcF9Vbml4RG9tYWluKSAvIHNpemVvZihuZXRzbm1wX1VuaXhEb21haW5bMF0pOworCisgICAgdC0+ZGF0YSA9IG1hbGxvYyhzaXplb2Yoc29ja2FkZHJfdW5fcGFpcikpOworICAgIGlmICh0LT5kYXRhID09IE5VTEwpIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorICAgIG1lbXNldCh0LT5kYXRhLCAwLCBzaXplb2Yoc29ja2FkZHJfdW5fcGFpcikpOworICAgIHQtPmRhdGFfbGVuZ3RoID0gc2l6ZW9mKHNvY2thZGRyX3VuX3BhaXIpOworICAgIHN1cCA9IChzb2NrYWRkcl91bl9wYWlyICopIHQtPmRhdGE7CisKKyAgICB0LT5zb2NrID0gc29ja2V0KFBGX1VOSVgsIFNPQ0tfU1RSRUFNLCAwKTsKKyAgICBpZiAodC0+c29jayA8IDApIHsKKyAgICAgICAgbmV0c25tcF90cmFuc3BvcnRfZnJlZSh0KTsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgdC0+ZmxhZ3MgPSBORVRTTk1QX1RSQU5TUE9SVF9GTEFHX1NUUkVBTTsKKworICAgIGlmIChsb2NhbCkgeworICAgICAgICB0LT5sb2NhbCA9ICh1X2NoYXIgKiltYWxsb2Moc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7CisgICAgICAgIGlmICh0LT5sb2NhbCA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPmxvY2FsLCBhZGRyLT5zdW5fcGF0aCwgc3RybGVuKGFkZHItPnN1bl9wYXRoKSk7CisgICAgICAgIHQtPmxvY2FsX2xlbmd0aCA9IHN0cmxlbihhZGRyLT5zdW5fcGF0aCk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogVGhpcyBzZXNzaW9uIGlzIGludGVuZWRlZCBhcyBhIHNlcnZlciwgc28gd2UgbXVzdCBiaW5kIHRvIHRoZSBnaXZlbgorICAgICAgICAgKiBwYXRoICh1bmxpbmtpbmcgaXQgZmlyc3QsIHRvIGF2b2lkIGVycm9ycykuCisgICAgICAgICAqLworCisgICAgICAgIHQtPmZsYWdzIHw9IE5FVFNOTVBfVFJBTlNQT1JUX0ZMQUdfTElTVEVOOworCisgICAgICAgIHVubGluayhhZGRyLT5zdW5fcGF0aCk7CisgICAgICAgIHJjID0gYmluZCh0LT5zb2NrLCAoc3RydWN0IHNvY2thZGRyICopIGFkZHIsIFNVTl9MRU4oYWRkcikpOworCisgICAgICAgIGlmIChyYyAhPSAwICYmIGVycm5vID09IEVOT0VOVCAmJiBjcmVhdGVfcGF0aCkgeworICAgICAgICAgICAgcmMgPSBta2RpcmhpZXIoYWRkci0+c3VuX3BhdGgsIGNyZWF0ZV9tb2RlLCAxKTsKKyAgICAgICAgICAgIGlmIChyYyAhPSAwKSB7CisgICAgICAgICAgICAgICAgbmV0c25tcF91bml4X2Nsb3NlKHQpOworICAgICAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByYyA9IGJpbmQodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLCBTVU5fTEVOKGFkZHIpKTsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF90cmFuc3BvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGJpbmQgXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNhdmUgdGhlIGFkZHJlc3MgaW4gdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBkYXRhIHBvaW50ZXIgZm9yIGxhdGVyCisgICAgICAgICAqIHVzZSBieSBuZXRzbm1wX3VuaXhfY2xvc2UuCisgICAgICAgICAqLworCisgICAgICAgIHN1cC0+c2VydmVyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICBzdHJjcHkoc3VwLT5zZXJ2ZXIuc3VuX3BhdGgsIGFkZHItPnN1bl9wYXRoKTsKKyAgICAgICAgc3VwLT5sb2NhbCA9IDE7CisKKyAgICAgICAgLyoKKyAgICAgICAgICogTm93IHNpdCBoZXJlIGFuZCBsaXN0ZW4gZm9yIGNvbm5lY3Rpb25zIHRvIGFycml2ZS4KKyAgICAgICAgICovCisKKyAgICAgICAgcmMgPSBsaXN0ZW4odC0+c29jaywgTkVUU05NUF9TVFJFQU1fUVVFVUVfTEVOKTsKKyAgICAgICAgaWYgKHJjICE9IDApIHsKKyAgICAgICAgICAgIERFQlVHTVNHVEwoKCJuZXRzbm1wX3VuaXhfdHJhbnNwb3J0IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICJjb3VsZG4ndCBsaXN0ZW4gdG8gXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIHsKKyAgICAgICAgdC0+cmVtb3RlID0gKHVfY2hhciAqKW1hbGxvYyhzdHJsZW4oYWRkci0+c3VuX3BhdGgpKTsKKyAgICAgICAgaWYgKHQtPnJlbW90ZSA9PSBOVUxMKSB7CisgICAgICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9mcmVlKHQpOworICAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KHQtPnJlbW90ZSwgYWRkci0+c3VuX3BhdGgsIHN0cmxlbihhZGRyLT5zdW5fcGF0aCkpOworICAgICAgICB0LT5yZW1vdGVfbGVuZ3RoID0gc3RybGVuKGFkZHItPnN1bl9wYXRoKTsKKworICAgICAgICByYyA9IGNvbm5lY3QodC0+c29jaywgKHN0cnVjdCBzb2NrYWRkciAqKSBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikpOworICAgICAgICBpZiAocmMgIT0gMCkgeworICAgICAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF90cmFuc3BvcnQiLAorICAgICAgICAgICAgICAgICAgICAgICAgImNvdWxkbid0IGNvbm5lY3QgdG8gXCIlc1wiLCBlcnJubyAlZCAoJXMpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgYWRkci0+c3VuX3BhdGgsIGVycm5vLCBzdHJlcnJvcihlcnJubykpKTsKKyAgICAgICAgICAgIG5ldHNubXBfdW5peF9jbG9zZSh0KTsKKyAgICAgICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X2ZyZWUodCk7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorCisgICAgICAgIC8qCisgICAgICAgICAqIFNhdmUgdGhlIHJlbW90ZSBhZGRyZXNzIGluIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgZGF0YSBwb2ludGVyIGZvcgorICAgICAgICAgKiBsYXRlciB1c2UgYnkgbmV0c25tcF91bml4X3NlbmQuCisgICAgICAgICAqLworCisgICAgICAgIHN1cC0+c2VydmVyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworICAgICAgICBzdHJjcHkoc3VwLT5zZXJ2ZXIuc3VuX3BhdGgsIGFkZHItPnN1bl9wYXRoKTsKKyAgICAgICAgc3VwLT5sb2NhbCA9IDA7CisgICAgICAgIG5ldHNubXBfc29ja19idWZmZXJfc2V0KHQtPnNvY2ssIFNPX1NOREJVRiwgbG9jYWwsIDApOworICAgICAgICBuZXRzbm1wX3NvY2tfYnVmZmVyX3NldCh0LT5zb2NrLCBTT19SQ1ZCVUYsIGxvY2FsLCAwKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1lc3NhZ2Ugc2l6ZSBpcyBub3QgbGltaXRlZCBieSB0aGlzIHRyYW5zcG9ydCAoaGVuY2UgbXNnTWF4U2l6ZQorICAgICAqIGlzIGVxdWFsIHRvIHRoZSBtYXhpbXVtIGxlZ2FsIHNpemUgb2YgYW4gU05NUCBtZXNzYWdlKS4KKyAgICAgKi8KKworICAgIHQtPm1zZ01heFNpemUgPSAweDdmZmZmZmZmOworICAgIHQtPmZfcmVjdiAgICAgPSBuZXRzbm1wX3VuaXhfcmVjdjsKKyAgICB0LT5mX3NlbmQgICAgID0gbmV0c25tcF91bml4X3NlbmQ7CisgICAgdC0+Zl9jbG9zZSAgICA9IG5ldHNubXBfdW5peF9jbG9zZTsKKyAgICB0LT5mX2FjY2VwdCAgID0gbmV0c25tcF91bml4X2FjY2VwdDsKKyAgICB0LT5mX2ZtdGFkZHIgID0gbmV0c25tcF91bml4X2ZtdGFkZHI7CisKKyAgICByZXR1cm4gdDsKK30KKworbmV0c25tcF90cmFuc3BvcnQgKgorbmV0c25tcF91bml4X2NyZWF0ZV90c3RyaW5nKGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGxvY2FsLAorCQkJICAgIGNvbnN0IGNoYXIgKmRlZmF1bHRfdGFyZ2V0KQoreworICAgIHN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworCisgICAgaWYgKHN0cmluZyAmJiAqc3RyaW5nICE9ICdcMCcpIHsKKyAgICB9IGVsc2UgaWYgKGRlZmF1bHRfdGFyZ2V0ICYmICpkZWZhdWx0X3RhcmdldCAhPSAnXDAnKSB7CisgICAgICBzdHJpbmcgPSBkZWZhdWx0X3RhcmdldDsKKyAgICB9CisKKyAgICBpZiAoKHN0cmluZyAhPSBOVUxMICYmICpzdHJpbmcgIT0gJ1wwJykgJiYKKwkoc3RybGVuKHN0cmluZykgPCBzaXplb2YoYWRkci5zdW5fcGF0aCkpKSB7CisgICAgICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIG1lbXNldChhZGRyLnN1bl9wYXRoLCAwLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOworICAgICAgICBzdHJsY3B5KGFkZHIuc3VuX3BhdGgsIHN0cmluZywgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdW5peF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoc3RyaW5nICE9IE5VTEwgJiYgKnN0cmluZyAhPSAnXDAnKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiUGF0aCB0b28gbG9uZyBmb3IgVW5peCBkb21haW4gdHJhbnNwb3J0XG4iKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9Cit9CisKKworCituZXRzbm1wX3RyYW5zcG9ydCAqCituZXRzbm1wX3VuaXhfY3JlYXRlX29zdHJpbmcoY29uc3QgdV9jaGFyICogbywgc2l6ZV90IG9fbGVuLCBpbnQgbG9jYWwpCit7CisgICAgc3RydWN0IHNvY2thZGRyX3VuIGFkZHI7CisKKyAgICBpZiAob19sZW4gPiAwICYmIG9fbGVuIDwgKHNpemVvZihhZGRyLnN1bl9wYXRoKSAtIDEpKSB7CisgICAgICAgIGFkZHIuc3VuX2ZhbWlseSA9IEFGX1VOSVg7CisgICAgICAgIG1lbXNldChhZGRyLnN1bl9wYXRoLCAwLCBzaXplb2YoYWRkci5zdW5fcGF0aCkpOworICAgICAgICBzdHJsY3B5KGFkZHIuc3VuX3BhdGgsIChjb25zdCBjaGFyICopbywgc2l6ZW9mKGFkZHIuc3VuX3BhdGgpKTsKKyAgICAgICAgcmV0dXJuIG5ldHNubXBfdW5peF90cmFuc3BvcnQoJmFkZHIsIGxvY2FsKTsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAob19sZW4gPiAwKSB7CisgICAgICAgICAgICBzbm1wX2xvZyhMT0dfRVJSLCAiUGF0aCB0b28gbG9uZyBmb3IgVW5peCBkb21haW4gdHJhbnNwb3J0XG4iKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCisKK3ZvaWQKK25ldHNubXBfdW5peF9jdG9yKHZvaWQpCit7CisgICAgdW5peERvbWFpbi5uYW1lID0gbmV0c25tcF9Vbml4RG9tYWluOworICAgIHVuaXhEb21haW4ubmFtZV9sZW5ndGggPSBzaXplb2YobmV0c25tcF9Vbml4RG9tYWluKSAvIHNpemVvZihvaWQpOworICAgIHVuaXhEb21haW4ucHJlZml4ID0gKGNvbnN0IGNoYXIqKiljYWxsb2MoMiwgc2l6ZW9mKGNoYXIgKikpOworICAgIHVuaXhEb21haW4ucHJlZml4WzBdID0gInVuaXgiOworCisgICAgdW5peERvbWFpbi5mX2NyZWF0ZV9mcm9tX3RzdHJpbmcgICAgID0gTlVMTDsKKyAgICB1bml4RG9tYWluLmZfY3JlYXRlX2Zyb21fdHN0cmluZ19uZXcgPSBuZXRzbm1wX3VuaXhfY3JlYXRlX3RzdHJpbmc7CisgICAgdW5peERvbWFpbi5mX2NyZWF0ZV9mcm9tX29zdHJpbmcgICAgID0gbmV0c25tcF91bml4X2NyZWF0ZV9vc3RyaW5nOworCisgICAgbmV0c25tcF90ZG9tYWluX3JlZ2lzdGVyKCZ1bml4RG9tYWluKTsKK30KKworI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQorLyogc3VwcG9ydCBmb3IgU05NUHYxIGFuZCBTTk1QdjJjIG9uIHVuaXggZG9tYWluKi8KKworI2RlZmluZSBFWEFNUExFX0NPTU1VTklUWSAiQ09NTVVOSVRZIgordHlwZWRlZiBzdHJ1Y3QgY29tMlNlY1VuaXhFbnRyeV9zIHsKKyAgICBjb25zdCBjaGFyKiAgICAgc29ja3BhdGg7CisgICAgY29uc3QgY2hhciogICAgIHNlY05hbWU7CisgICAgY29uc3QgY2hhciogICAgIGNvbnRleHROYW1lOworICAgIHN0cnVjdCBjb20yU2VjVW5peEVudHJ5X3MgKm5leHQ7CisgICAgdW5zaWduZWQgc2hvcnQgIHBhdGhsZW47CisgICAgY29uc3QgY2hhciAgICAgIGNvbW11bml0eVsxXTsKK30gY29tMlNlY1VuaXhFbnRyeTsKKworc3RhdGljIGNvbTJTZWNVbml4RW50cnkgICAqY29tMlNlY1VuaXhMaXN0ID0gTlVMTCwgKmNvbTJTZWNVbml4TGlzdExhc3QgPSBOVUxMOworCisKK2ludAorbmV0c25tcF91bml4X2dldFNlY05hbWUodm9pZCAqb3BhcXVlLCBpbnQgb2xlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbW11bml0eSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBjb21tdW5pdHlfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqKnNlY05hbWUsIGNvbnN0IGNoYXIgKipjb250ZXh0TmFtZSkKK3sKKyAgICBjb25zdCBjb20yU2VjVW5peEVudHJ5ICAgKmM7CisgICAgc3RydWN0IHNvY2thZGRyX3VuICp0byA9IChzdHJ1Y3Qgc29ja2FkZHJfdW4gKikgb3BhcXVlOworICAgIGNoYXIgICAgICAgICAgICp6dGNvbW11bml0eSA9IE5VTEw7CisKKyAgICBpZiAoc2VjTmFtZSAhPSBOVUxMKSB7CisgICAgICAgICpzZWNOYW1lID0gTlVMTDsgIC8qIEhhdmVuJ3QgZm91bmQgYW55dGhpbmcgeWV0ICovCisgICAgfQorCisgICAgLyoKKyAgICAgKiBTcGVjaWFsIGNhc2UgaWYgdGhlcmUgYXJlIE5PIGVudHJpZXMgKGFzIG9wcG9zZWQgdG8gbm8gTUFUQ0hJTkcKKyAgICAgKiBlbnRyaWVzKS4KKyAgICAgKi8KKworICAgIGlmIChjb20yU2VjVW5peExpc3QgPT0gTlVMTCkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAibm8gY29tMnNlYyBlbnRyaWVzXG4iKSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qCisgICAgICogSWYgdGhlcmUgaXMgbm8gdW5peCBzb2NrZXQgcGF0aCwgdGhlbiB0aGVyZSBjYW4gYmUgbm8gdmFsaWQgc2VjdXJpdHkKKyAgICAgKiBuYW1lLgorICAgICAqLworCisgICAgaWYgKG9wYXF1ZSA9PSBOVUxMIHx8IG9sZW5ndGggIT0gc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl91bikgfHwKKyAgICAgICAgdG8tPnN1bl9mYW1pbHkgIT0gQUZfVU5JWCkgeworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLAorICAgICAgICAgICAgICAgICAgICAibm8gdW5peCBkZXN0aW5lIGFkZHJlc3MgaW4gUERVP1xuIikpOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisKKyAgICBERUJVR0lGKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIpIHsKKyAgICAgICAgenRjb21tdW5pdHkgPSAoY2hhciAqKW1hbGxvYyhjb21tdW5pdHlfbGVuICsgMSk7CisgICAgICAgIGlmICh6dGNvbW11bml0eSAhPSBOVUxMKSB7CisgICAgICAgICAgICBtZW1jcHkoenRjb21tdW5pdHksIGNvbW11bml0eSwgY29tbXVuaXR5X2xlbik7CisgICAgICAgICAgICB6dGNvbW11bml0eVtjb21tdW5pdHlfbGVuXSA9ICdcMCc7CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAicmVzb2x2ZSA8XCIlc1wiPlxuIiwKKyAgICAgICAgICAgICAgICAgICAgenRjb21tdW5pdHkgPyB6dGNvbW11bml0eSA6ICI8bWFsbG9jIGVycm9yPiIpKTsKKyAgICB9CisKKyAgICBmb3IgKGMgPSBjb20yU2VjVW5peExpc3Q7IGMgIT0gTlVMTDsgYyA9IGMtPm5leHQpIHsKKyAgICAgICAgREVCVUdNU0dUTCgoIm5ldHNubXBfdW5peF9nZXRTZWNOYW1lIiwiY29tcGFyZSA8XCIlc1wiLHRvIHNvY2tldCAlcz4iLAorICAgICAgICAgICAgICAgICAgICBjLT5jb21tdW5pdHksIGMtPnNvY2twYXRoICkpOworICAgICAgICBpZiAoKGNvbW11bml0eV9sZW4gPT0gc3RybGVuKGMtPmNvbW11bml0eSkpICYmCisgICAgICAgICAgICAobWVtY21wKGNvbW11bml0eSwgYy0+Y29tbXVuaXR5LCBjb21tdW5pdHlfbGVuKSA9PSAwKSAmJgorICAgICAgICAgICAgLyogY29tcGFyZSBzb2NrcGF0aCwgaWYgcGF0aGxlbiA9PSAwLCBhbHdheXMgbWF0Y2ggKi8KKyAgICAgICAgICAgIChzdHJsZW4odG8tPnN1bl9wYXRoKSA9PSBjLT5wYXRobGVuIHx8IGMtPnBhdGhsZW4gPT0gMCkgJiYKKyAgICAgICAgICAgIChtZW1jbXAodG8tPnN1bl9wYXRoLCBjLT5zb2NrcGF0aCwgYy0+cGF0aGxlbikgPT0gMCkKKyAgICAgICAgICAgICkgeworICAgICAgICAgICAgREVCVUdNU0coKCJuZXRzbm1wX3VuaXhfZ2V0U2VjTmFtZSIsICIuLi4gU1VDQ0VTU1xuIikpOworICAgICAgICAgICAgaWYgKHNlY05hbWUgIT0gTlVMTCkgeworICAgICAgICAgICAgICAgICpzZWNOYW1lID0gYy0+c2VjTmFtZTsKKyAgICAgICAgICAgICAgICAqY29udGV4dE5hbWUgPSBjLT5jb250ZXh0TmFtZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIERFQlVHTVNHKCgibmV0c25tcF91bml4X2dldFNlY05hbWUiLCAiLi4uIG5vcGVcbiIpKTsKKyAgICB9CisgICAgaWYgKHp0Y29tbXVuaXR5ICE9IE5VTEwpIHsKKyAgICAgICAgZnJlZSh6dGNvbW11bml0eSk7CisgICAgfQorICAgIHJldHVybiAxOworfQorCit2b2lkCituZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHkoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKnBhcmFtKQoreworICAgIGNoYXIgICBzZWNOYW1lW1ZBQ01TVFJJTkdMRU4gKyAxXTsKKyAgICBzaXplX3Qgc2VjTmFtZUxlbjsKKyAgICBjaGFyICAgY29udGV4dE5hbWVbVkFDTVNUUklOR0xFTiArIDFdOworICAgIHNpemVfdCBjb250ZXh0TmFtZUxlbjsKKyAgICBjaGFyICAgY29tbXVuaXR5W0NPTU1VTklUWV9NQVhfTEVOICsgMV07CisgICAgc2l6ZV90IGNvbW11bml0eUxlbjsKKyAgICBjaGFyICAgc29ja3BhdGhbc2l6ZW9mKCgoc3RydWN0IHNvY2thZGRyX3VuKikwKS0+c3VuX3BhdGgpICsgMV07CisgICAgc2l6ZV90IHNvY2twYXRoTGVuOworCisgICAgcGFyYW0gPSBjb3B5X253b3JkKCBwYXJhbSwgc2VjTmFtZSwgc2l6ZW9mKHNlY05hbWUpKTsKKyAgICBpZiAoc3RyY21wKHNlY05hbWUsICItQ24iKSA9PSAwKSB7CisgICAgICAgIGlmICghcGFyYW0pIHsKKyAgICAgICAgICAgIGNvbmZpZ19wZXJyb3IoIm1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIGNvbnRleHROYW1lLCBzaXplb2YoY29udGV4dE5hbWUpKTsKKyAgICAgICAgY29udGV4dE5hbWVMZW4gPSBzdHJsZW4oY29udGV4dE5hbWUpICsgMTsKKyAgICAgICAgaWYgKGNvbnRleHROYW1lTGVuID4gVkFDTVNUUklOR0xFTikgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigiY29udGV4dCBuYW1lIHRvbyBsb25nIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFwYXJhbSkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWlzc2luZyBOQU1FIHBhcmFtZXRlciIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNlY05hbWUsIHNpemVvZihzZWNOYW1lKSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY29udGV4dE5hbWVMZW4gPSAwOworICAgIH0KKworICAgIHNlY05hbWVMZW4gPSBzdHJsZW4oc2VjTmFtZSkgKyAxOworICAgIGlmIChzZWNOYW1lTGVuID09IDEpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZW1wdHkgTkFNRSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gZWxzZSBpZiAoc2VjTmFtZUxlbiA+IFZBQ01TVFJJTkdMRU4pIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigic2VjdXJpdHkgbmFtZSB0b28gbG9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwYXJhbSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIFNPQ0tQQVRIIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIHBhcmFtID0gY29weV9ud29yZCggcGFyYW0sIHNvY2twYXRoLCBzaXplb2Yoc29ja3BhdGgpKTsKKyAgICBpZiAoc29ja3BhdGhbMF0gPT0gJ1wwJykgeworICAgICAgICBjb25maWdfcGVycm9yKCJlbXB0eSBTT0NLUEFUSCBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBzb2NrcGF0aExlbiA9IHN0cmxlbihzb2NrcGF0aCkgKyAxOworICAgIGlmIChzb2NrcGF0aExlbiA+IHNpemVvZigoKHN0cnVjdCBzb2NrYWRkcl91biopMCktPnN1bl9wYXRoKSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJzb2NrcGF0aCB0b28gbG9uZyIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFwYXJhbSkgeworICAgICAgICBjb25maWdfcGVycm9yKCJtaXNzaW5nIENPTU1VTklUWSBwYXJhbWV0ZXIiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBwYXJhbSA9IGNvcHlfbndvcmQoIHBhcmFtLCBjb21tdW5pdHksIHNpemVvZihjb21tdW5pdHkpKTsKKyAgICBpZiAoY29tbXVuaXR5WzBdID09ICdcMCcpIHsKKyAgICAgICAgY29uZmlnX3BlcnJvcigiZW1wdHkgQ09NTVVOSVRZIHBhcmFtZXRlciIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIGNvbW11bml0eUxlbiA9IHN0cmxlbihjb21tdW5pdHkpICsgMTsKKyAgICBpZiAoY29tbXVuaXR5TGVuID49IENPTU1VTklUWV9NQVhfTEVOKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImNvbW11bml0eSBuYW1lIHRvbyBsb25nIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgaWYgKGNvbW11bml0eUxlbiA9PSBzaXplb2YoRVhBTVBMRV9DT01NVU5JVFkpICYmCisgICAgICAgIG1lbWNtcChjb21tdW5pdHksIEVYQU1QTEVfQ09NTVVOSVRZLCBzaXplb2YoRVhBTVBMRV9DT01NVU5JVFkpKSA9PSAwKSB7CisgICAgICAgIGNvbmZpZ19wZXJyb3IoImV4YW1wbGUgY29uZmlnIENPTU1VTklUWSBub3QgcHJvcGVybHkgY29uZmlndXJlZCIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogRGVhbCB3aXRoIHRoZSAiZGVmYXVsdCIgY2FzZSAqLworICAgIGlmKHN0cmNtcChzb2NrcGF0aCwgImRlZmF1bHQiKSA9PSAwKSB7CisgICAgICAgIHNvY2twYXRoTGVuID0gMDsKKyAgICB9CisKKyAgICB7CisgICAgICAgIHZvaWQqIHYgPSBtYWxsb2Mob2Zmc2V0b2YoY29tMlNlY1VuaXhFbnRyeSwgY29tbXVuaXR5KSArIGNvbW11bml0eUxlbiArCisgICAgICAgICAgICAgICAgICAgICAgICAgc29ja3BhdGhMZW4gKyBzZWNOYW1lTGVuICsgY29udGV4dE5hbWVMZW4pOworICAgICAgICBjb20yU2VjVW5peEVudHJ5KiBlID0gKGNvbTJTZWNVbml4RW50cnkqKXY7CisgICAgICAgIGNoYXIqIGxhc3QgPSAoKGNoYXIqKXYpICsgb2Zmc2V0b2YoY29tMlNlY1VuaXhFbnRyeSwgY29tbXVuaXR5KTsKKyAgICAgICAgaWYgKGUgPT0gTlVMTCkgeworICAgICAgICAgICAgY29uZmlnX3BlcnJvcigibWVtb3J5IGVycm9yIik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBERUJVR01TR1RMKCgibmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5IiwKKyAgICAgICAgICAgICAgICAgICAgIjxcIiVzXCIsIFwiJS4qc1wiPiA9PiBcIiVzXCJcbiIsCisgICAgICAgICAgICAgICAgICAgIGNvbW11bml0eSwgKGludClzb2NrcGF0aExlbiwgc29ja3BhdGgsIHNlY05hbWUpKTsKKworICAgICAgICBtZW1jcHkobGFzdCwgY29tbXVuaXR5LCBjb21tdW5pdHlMZW4pOworICAgICAgICBsYXN0ICs9IGNvbW11bml0eUxlbjsKKworICAgICAgICBpZiAoc29ja3BhdGhMZW4pIHsKKyAgICAgICAgICAgIGUtPnNvY2twYXRoID0gbGFzdDsKKyAgICAgICAgICAgIG1lbWNweShsYXN0LCBzb2NrcGF0aCwgc29ja3BhdGhMZW4pOworICAgICAgICAgICAgbGFzdCArPSBzb2NrcGF0aExlbjsKKyAgICAgICAgICAgIGUtPnBhdGhsZW4gPSBzb2NrcGF0aExlbiAtIDE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBlLT5zb2NrcGF0aCA9IGxhc3QgLSAxOworICAgICAgICAgICAgZS0+cGF0aGxlbiA9IDA7CisgICAgICAgIH0KKworICAgICAgICBlLT5zZWNOYW1lID0gbGFzdDsKKyAgICAgICAgbWVtY3B5KGxhc3QsIHNlY05hbWUsIHNlY05hbWVMZW4pOworICAgICAgICBsYXN0ICs9IHNlY05hbWVMZW47CisKKyAgICAgICAgaWYgKGNvbnRleHROYW1lTGVuKSB7CisgICAgICAgICAgICBlLT5jb250ZXh0TmFtZSA9IGxhc3Q7CisgICAgICAgICAgICBtZW1jcHkobGFzdCwgY29udGV4dE5hbWUsIGNvbnRleHROYW1lTGVuKTsKKyAgICAgICAgICAgIGxhc3QgKz0gY29udGV4dE5hbWVMZW47CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgZS0+Y29udGV4dE5hbWUgPSBsYXN0IC0gMTsKKworICAgICAgICBlLT5uZXh0ID0gTlVMTDsKKworICAgICAgICBpZiAoY29tMlNlY1VuaXhMaXN0TGFzdCAhPSBOVUxMKSB7CisgICAgICAgICAgICBjb20yU2VjVW5peExpc3RMYXN0LT5uZXh0ID0gZTsKKyAgICAgICAgICAgIGNvbTJTZWNVbml4TGlzdExhc3QgPSBlOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgY29tMlNlY1VuaXhMaXN0TGFzdCA9IGNvbTJTZWNVbml4TGlzdCA9IGU7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQKK25ldHNubXBfdW5peF9jb20yU2VjTGlzdF9mcmVlKHZvaWQpCit7CisgICAgY29tMlNlY1VuaXhFbnRyeSAgICplID0gY29tMlNlY1VuaXhMaXN0OworICAgIHdoaWxlIChlICE9IE5VTEwpIHsKKyAgICAgICAgY29tMlNlY1VuaXhFbnRyeSAgICp0bXAgPSBlOworICAgICAgICBlID0gZS0+bmV4dDsKKyAgICAgICAgZnJlZSh0bXApOworICAgIH0KKyAgICBjb20yU2VjVW5peExpc3QgPSBjb20yU2VjVW5peExpc3RMYXN0ID0gTlVMTDsKK30KKyNlbmRpZiAvKiBzdXBwb3J0IGZvciBjb21tdW5pdHkgYmFzZWQgU05NUCAqLworCit2b2lkCituZXRzbm1wX3VuaXhfYWdlbnRfY29uZmlnX3Rva2Vuc19yZWdpc3Rlcih2b2lkKQoreworI2lmICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjEpIHx8ICFkZWZpbmVkKE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDKQorICAgIHJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcigiY29tMnNlY3VuaXgiLCBuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ldHNubXBfdW5peF9jb20yU2VjTGlzdF9mcmVlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiWy1DbiBDT05URVhUXSBzZWNOYW1lIHNvY2twYXRoIGNvbW11bml0eSIpOworI2VuZGlmIC8qIHN1cHBvcnQgZm9yIGNvbW11bml0eSBiYXNlZCBTTk1QICovCit9CmRpZmYgLS1naXQgYS9zbm1wbGliL3VjZF9jb21wYXQuYyBiL3NubXBsaWIvdWNkX2NvbXBhdC5jCmluZGV4IDRmNDIzNGEuLjY0YzFlMTMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvdWNkX2NvbXBhdC5jCisrKyBiL3NubXBsaWIvdWNkX2NvbXBhdC5jCkBAIC00LDEyICs0LDE3IEBACiAgKi8KIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWZlYXR1cmVzLmg+CiAKICNpbmNsdWRlIDxuZXQtc25tcC90eXBlcy5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL3Nlc3Npb25fYXBpLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvY29uZmlnX2FwaS5oPgogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbWliLmg+CS8qIGZvciBPSUQgTy9QIGZvcm1hdCBlbnVtcyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdWNkX2NvbXBhdC5oPgogCituZXRzbm1wX2ZlYXR1cmVfY2hpbGRfb2YodWNkX2NvbXBhdGliaWxpdHksIGxpYm5ldHNubXApCisKKyNpZm5kZWYgTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VQ0RfQ09NUEFUSUJJTElUWQogLyoKICAqIHVzZSA8bmV0c25tcF9zZXNzaW9uICopLT5zX3NubXBfZXJybm8gaW5zdGVhZCAKICAqLwpAQCAtMjIsMTAgKzI3LDEyIEBACiAvKgogICogc3luY2hfcmVzZXQgYW5kIHN5bmNoX3NldHVwIGFyZSBubyBsb25nZXIgdXNlZC4gCiAgKi8KK05FVFNOTVBfSU1QT1JUIHZvaWQgc25tcF9zeW5jaF9yZXNldChuZXRzbm1wX3Nlc3Npb24gKiBub3R1c2VkKTsKIHZvaWQKIHNubXBfc3luY2hfcmVzZXQobmV0c25tcF9zZXNzaW9uICogbm90dXNlZCkKIHsKIH0KK05FVFNOTVBfSU1QT1JUIHZvaWQgc25tcF9zeW5jaF9zZXR1cChuZXRzbm1wX3Nlc3Npb24gKiBub3R1c2VkKTsKIHZvaWQKIHNubXBfc3luY2hfc2V0dXAobmV0c25tcF9zZXNzaW9uICogbm90dXNlZCkKIHsKQEAgLTIxOCwzICsyMjUsNiBAQAogewogICBuZXRzbm1wX2RzX3NodXRkb3duKCk7CiB9CisjZWxzZSAvKiAhTkVUU05NUF9GRUFUVVJFX1JFTU9WRV9VQ0RfQ09NUEFUSUJJTElUWSAqLworbmV0c25tcF9mZWF0dXJlX3VudXNlZCh1Y2RfY29tcGF0aWJpbGl0eSk7CisjZW5kaWYgLyogIU5FVFNOTVBfRkVBVFVSRV9SRU1PVkVfVUNEX0NPTVBBVElCSUxJVFkgKi8KZGlmZiAtLWdpdCBhL3NubXBsaWIvdmFjbS5jIGIvc25tcGxpYi92YWNtLmMKaW5kZXggMzU1MWM3Zi4uYzYzOTc4NSAxMDA2NDQKLS0tIGEvc25tcGxpYi92YWNtLmMKKysrIGIvc25tcGxpYi92YWNtLmMKQEAgLTMxLDExICszMSw3IEBACiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpZiBUSU1FX1dJVEhfU1lTX1RJTUUKLSMgaWZkZWYgV0lOMzIKLSMgIGluY2x1ZGUgPHN5cy90aW1lYi5oPgotIyBlbHNlCi0jICBpbmNsdWRlIDxzeXMvdGltZS5oPgotIyBlbmRpZgorIyBpbmNsdWRlIDxzeXMvdGltZS5oPgogIyBpbmNsdWRlIDx0aW1lLmg+CiAjZWxzZQogIyBpZiBIQVZFX1NZU19USU1FX0gKQEAgLTQ1LDEwICs0MSw2IEBACiAjIGVuZGlmCiAjZW5kaWYKIAotI2lmIEhBVkVfV0lOU09DS19ICi0jaW5jbHVkZSA8d2luc29jay5oPgotI2VuZGlmCi0KICNpZiBIQVZFX05FVElORVRfSU5fSAogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KICNlbmRpZgpAQCAtNjIsNiArNTQsNyBAQAogI2luY2x1ZGUgPG5ldC1zbm1wL2NvbmZpZ19hcGkuaD4KIAogI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvc25tcF9hcGkuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS92YWNtLmg+CiAKIHN0YXRpYyBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZpZXdMaXN0ID0gTlVMTCwgKnZpZXdTY2FuUHRyID0gTlVMTDsKQEAgLTE2Niw3ICsxNTksNyBAQAogfQogCiB2b2lkCi12YWNtX3BhcnNlX2NvbmZpZ192aWV3KGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQordmFjbV9wYXJzZV9jb25maWdfdmlldyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgdmlldzsKICAgICBzdHJ1Y3QgdmFjbV92aWV3RW50cnkgKnZwdHI7CkBAIC0xNzYsMTcgKzE2OSwxNyBAQAogICAgIHNpemVfdCAgICAgICAgICBsZW47CiAKICAgICB2aWV3LnZpZXdTdGF0dXMgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIHZpZXcudmlld1N0b3JhZ2VUeXBlID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICB2aWV3LnZpZXdUeXBlID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICBsZW4gPSBzaXplb2Yodmlldy52aWV3TmFtZSk7CiAgICAgbGluZSA9CiAgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGxpbmUsICh1X2NoYXIgKiopICYgdmlld05hbWUsICZsZW4pOwogICAgIHZpZXcudmlld1N1YnRyZWVMZW4gPSBNQVhfT0lEX0xFTjsKICAgICBsaW5lID0KLSAgICAgICAgcmVhZF9jb25maWdfcmVhZF9vYmppZChsaW5lLCAob2lkICoqKSAmIHZpZXdTdWJ0cmVlLAorICAgICAgICByZWFkX2NvbmZpZ19yZWFkX29iamlkX2NvbnN0KGxpbmUsIChvaWQgKiopICYgdmlld1N1YnRyZWUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnZpZXcudmlld1N1YnRyZWVMZW4pOwogCiAgICAgdnB0ciA9CkBAIC0yODQsNyArMjc3LDggQEAKIH0KIAogY2hhciAqCi1fdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzX2NvbW1vbihzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqKmFwdHIsIGNoYXIgKmxpbmUpCitfdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzX2NvbW1vbihzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqKmFwdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpsaW5lKQogewogICAgIHN0cnVjdCB2YWNtX2FjY2Vzc0VudHJ5IGFjY2VzczsKICAgICBjaGFyICAgICAgICAgICAqY1ByZWZpeCA9IChjaGFyICopICZhY2Nlc3MuY29udGV4dFByZWZpeDsKQEAgLTI5MiwxNSArMjg2LDE1IEBACiAgICAgc2l6ZV90ICAgICAgICAgIGxlbjsKIAogICAgIGFjY2Vzcy5zdGF0dXMgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIGFjY2Vzcy5zdG9yYWdlVHlwZSA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgYWNjZXNzLnNlY3VyaXR5TW9kZWwgPSBhdG9pKGxpbmUpOwotICAgIGxpbmUgPSBza2lwX3Rva2VuKGxpbmUpOworICAgIGxpbmUgPSBza2lwX3Rva2VuX2NvbnN0KGxpbmUpOwogICAgIGFjY2Vzcy5zZWN1cml0eUxldmVsID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICBhY2Nlc3MuY29udGV4dE1hdGNoID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICBsZW4gID0gc2l6ZW9mKGFjY2Vzcy5ncm91cE5hbWUpOwogICAgIGxpbmUgPSByZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZyhsaW5lLCAodV9jaGFyICoqKSAmZ05hbWUsICAgJmxlbik7CiAgICAgbGVuICA9IHNpemVvZihhY2Nlc3MuY29udGV4dFByZWZpeCk7CkBAIC0zMjMsMTEgKzMxNywxMSBAQAogICAgICgqYXB0ciktPnNlY3VyaXR5TW9kZWwgPSBhY2Nlc3Muc2VjdXJpdHlNb2RlbDsKICAgICAoKmFwdHIpLT5zZWN1cml0eUxldmVsID0gYWNjZXNzLnNlY3VyaXR5TGV2ZWw7CiAgICAgKCphcHRyKS0+Y29udGV4dE1hdGNoICA9IGFjY2Vzcy5jb250ZXh0TWF0Y2g7Ci0gICAgcmV0dXJuIGxpbmU7CisgICAgcmV0dXJuIE5FVFNOTVBfUkVNT1ZFX0NPTlNUKGNoYXIgKiwgbGluZSk7CiB9CiAKIHZvaWQKLXZhY21fcGFyc2VfY29uZmlnX2FjY2Vzcyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqbGluZSkKK3ZhY21fcGFyc2VfY29uZmlnX2FjY2Vzcyhjb25zdCBjaGFyICp0b2tlbiwgY29uc3QgY2hhciAqbGluZSkKIHsKICAgICBzdHJ1Y3QgdmFjbV9hY2Nlc3NFbnRyeSAqYXB0cjsKICAgICBjaGFyICAgICAgICAgICAqcmVhZFZpZXcsICp3cml0ZVZpZXcsICpub3RpZnlWaWV3OwpAQCAtMzUzLDcgKzM0Nyw3IEBACiB9CiAKIHZvaWQKLXZhY21fcGFyc2VfY29uZmlnX2F1dGhfYWNjZXNzKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQordmFjbV9wYXJzZV9jb25maWdfYXV0aF9hY2Nlc3MoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgc3RydWN0IHZhY21fYWNjZXNzRW50cnkgKmFwdHI7CiAgICAgaW50ICAgICAgICAgICAgIGF1dGh0eXBlOwpAQCAtMzY1LDcgKzM1OSw3IEBACiAgICAgICAgIHJldHVybjsKIAogICAgIGF1dGh0eXBlID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKIAogICAgIHZpZXcgPSAoY2hhciAqKSBhcHRyLT52aWV3c1thdXRodHlwZV07CiAgICAgbGVuICA9IHNpemVvZihhcHRyLT52aWV3c1thdXRodHlwZV0pOwpAQCAtNDAxLDcgKzM5NSw3IEBACiB9CiAKIHZvaWQKLXZhY21fcGFyc2VfY29uZmlnX2dyb3VwKGNvbnN0IGNoYXIgKnRva2VuLCBjaGFyICpsaW5lKQordmFjbV9wYXJzZV9jb25maWdfZ3JvdXAoY29uc3QgY2hhciAqdG9rZW4sIGNvbnN0IGNoYXIgKmxpbmUpCiB7CiAgICAgc3RydWN0IHZhY21fZ3JvdXBFbnRyeSBncm91cDsKICAgICBzdHJ1Y3QgdmFjbV9ncm91cEVudHJ5ICpncHRyOwpAQCAtNDEwLDExICs0MDQsMTEgQEAKICAgICBzaXplX3QgICAgICAgICAgbGVuOwogCiAgICAgZ3JvdXAuc3RhdHVzID0gYXRvaShsaW5lKTsKLSAgICBsaW5lID0gc2tpcF90b2tlbihsaW5lKTsKKyAgICBsaW5lID0gc2tpcF90b2tlbl9jb25zdChsaW5lKTsKICAgICBncm91cC5zdG9yYWdlVHlwZSA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgZ3JvdXAuc2VjdXJpdHlNb2RlbCA9IGF0b2kobGluZSk7Ci0gICAgbGluZSA9IHNraXBfdG9rZW4obGluZSk7CisgICAgbGluZSA9IHNraXBfdG9rZW5fY29uc3QobGluZSk7CiAgICAgbGVuID0gc2l6ZW9mKGdyb3VwLnNlY3VyaXR5TmFtZSk7CiAgICAgbGluZSA9CiAgICAgICAgIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nKGxpbmUsICh1X2NoYXIgKiopICYgc2VjdXJpdHlOYW1lLApAQCAtNDQ5LDEyICs0NDMsMTIgQEAKICAgICBmb3IgKHZwID0gaGVhZDsgdnA7IHZwID0gdnAtPm5leHQpIHsKICAgICAgICAgaWYgKCFtZW1jbXAodmlldywgdnAtPnZpZXdOYW1lLCBnbGVuICsgMSkKICAgICAgICAgICAgICYmIHZpZXdTdWJ0cmVlTGVuID49ICh2cC0+dmlld1N1YnRyZWVMZW4gLSAxKSkgewotICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1hc2sgPSAweDgwLCBtYXNrcG9zID0gMDsKLSAgICAgICAgICAgIGludCAgICAgICAgICAgICBvaWRwb3M7CisgICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWFzayA9IDB4ODA7CisgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgb2lkcG9zLCBtYXNrcG9zID0gMDsKICAgICAgICAgICAgIGZvdW5kID0gMTsKIAogICAgICAgICAgICAgZm9yIChvaWRwb3MgPSAwOwotICAgICAgICAgICAgICAgICBmb3VuZCAmJiBvaWRwb3MgPCAoaW50KSB2cC0+dmlld1N1YnRyZWVMZW4gLSAxOworICAgICAgICAgICAgICAgICBmb3VuZCAmJiBvaWRwb3MgPCB2cC0+dmlld1N1YnRyZWVMZW4gLSAxOwogICAgICAgICAgICAgICAgICBvaWRwb3MrKykgewogICAgICAgICAgICAgICAgIGlmIChtb2RlPT1WQUNNX01PREVfSUdOT1JFX01BU0sgfHwgKFZJRVdfTUFTSyh2cCwgbWFza3BvcywgbWFzaykgIT0gMCkpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdTdWJ0cmVlW29pZHBvc10gIT0KQEAgLTUzOCwxNSArNTMyLDE1IEBACiAgICAgICAgICAgICAgKiBzdWJ0cmVlIHdlIGFyZSBjb21wYXJpbmcgYWdhaW5zdC4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgaWYgKHZpZXdTdWJ0cmVlTGVuID49ICh2cC0+dmlld1N1YnRyZWVMZW4gLSAxKSkgewotICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXNrID0gMHg4MCwgbWFza3BvcyA9IDA7Ci0gICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG9pZHBvczsKKyAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgbWFzayA9IDB4ODA7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICAgIG9pZHBvcywgbWFza3BvcyA9IDA7CiAgICAgICAgICAgICAgICAgZm91bmQgPSAxOwogCiAgICAgICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAgICAgKiBjaGVjayB0aGUgbWFzawogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIGZvciAob2lkcG9zID0gMDsKLSAgICAgICAgICAgICAgICAgICAgIGZvdW5kICYmIG9pZHBvcyA8IChpbnQpIHZwLT52aWV3U3VidHJlZUxlbiAtIDE7CisgICAgICAgICAgICAgICAgICAgICBmb3VuZCAmJiBvaWRwb3MgPCB2cC0+dmlld1N1YnRyZWVMZW4gLSAxOwogICAgICAgICAgICAgICAgICAgICAgb2lkcG9zKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFZJRVdfTUFTSyh2cCwgbWFza3BvcywgbWFzaykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdTdWJ0cmVlW29pZHBvc10gIT0KQEAgLTU4NiwxNSArNTgwLDE1IEBACiAgICAgICAgICAgICAgKiByZXNwb25zZS4KICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgIG1hc2sgPSAweDgwLCBtYXNrcG9zID0gMDsKLSAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgb2lkcG9zOworICAgICAgICAgICAgICAgIGludCAgICAgICAgICAgICBtYXNrID0gMHg4MDsKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgICAgb2lkcG9zLCBtYXNrcG9zID0gMDsKICAgICAgICAgICAgICAgICBmb3VuZCA9IDE7CiAKICAgICAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICAgICAqIGNoZWNrIHRoZSBtYXNrIHVwIHRvIHRoZSBsZW5ndGggb2YgdGhlIHByb3ZpZGVkIHN1YnRyZWUKICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICBmb3IgKG9pZHBvcyA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICBmb3VuZCAmJiBvaWRwb3MgPCAoaW50KSB2aWV3U3VidHJlZUxlbjsKKyAgICAgICAgICAgICAgICAgICAgIGZvdW5kICYmIG9pZHBvcyA8IHZpZXdTdWJ0cmVlTGVuOwogICAgICAgICAgICAgICAgICAgICAgb2lkcG9zKyspIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKFZJRVdfTUFTSyh2cCwgbWFza3BvcywgbWFzaykgIT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHZpZXdTdWJ0cmVlW29pZHBvc10gIT0KQEAgLTg0OCw2ICs4NDIsNyBAQAogICAgIHJldHVybiBncDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHZvaWQKIHZhY21fZGVzdHJveUdyb3VwRW50cnkoaW50IHNlY3VyaXR5TW9kZWwsIGNvbnN0IGNoYXIgKnNlY3VyaXR5TmFtZSkKIHsKQEAgLTg3Myw2ICs4NjgsNyBAQAogICAgIGZyZWUodnApOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogdm9pZAogdmFjbV9kZXN0cm95QWxsR3JvdXBFbnRyaWVzKHZvaWQpCkBAIC0xMDQ0LDYgKzEwNDAsNyBAQAogICAgIHJldHVybiB2cDsKIH0KIAorI2lmbmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKIHZvaWQKIHZhY21fZGVzdHJveUFjY2Vzc0VudHJ5KGNvbnN0IGNoYXIgKmdyb3VwTmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmNvbnRleHRQcmVmaXgsCkBAIC0xMDc1LDYgKzEwNzIsNyBAQAogICAgIGZyZWUodnApOwogICAgIHJldHVybjsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogdm9pZAogdmFjbV9kZXN0cm95QWxsQWNjZXNzRW50cmllcyh2b2lkKQpAQCAtMTE0OCwxMiArMTE0NiwxNCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWV3U3VidHJlZUxlbik7CiB9CiAKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCiB2b2lkCiB2YWNtX2Rlc3Ryb3lWaWV3RW50cnkoY29uc3QgY2hhciAqdmlld05hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgb2lkICogdmlld1N1YnRyZWUsIHNpemVfdCB2aWV3U3VidHJlZUxlbikKIHsKICAgICBuZXRzbm1wX3ZpZXdfZGVzdHJveSggJnZpZXdMaXN0LCB2aWV3TmFtZSwgdmlld1N1YnRyZWUsIHZpZXdTdWJ0cmVlTGVuKTsKIH0KKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KIAogdm9pZAogdmFjbV9kZXN0cm95QWxsVmlld0VudHJpZXModm9pZCkKZGlmZiAtLWdpdCBhL3NubXBsaWIvd2lucGlwZS5jIGIvc25tcGxpYi93aW5waXBlLmMKaW5kZXggNmYxMzRiMS4uYmJlMzdmMSAxMDA2NDQKLS0tIGEvc25tcGxpYi93aW5waXBlLmMKKysrIGIvc25tcGxpYi93aW5waXBlLmMKQEAgLTMzLDkgKzMzLDEwIEBACiAjaWZkZWYgV0lOMzIKIAogI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL3R5cGVzLmg+CiAjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2Fzc2VydC5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvd2lucGlwZS5oPgogI2luY2x1ZGUgPGlvLmg+Ci0jaW5jbHVkZSA8d2luc29jay5oPgogCiBzdGF0aWMgaW50IEluaXRVUERTb2NrZXQoU09DS0VUICpzb2NrLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNvY2tldGFkZHJlc3MpCiB7CmRpZmYgLS1naXQgYS9zbm1wbGliL3dpbnNlcnZpY2UuYyBiL3NubXBsaWIvd2luc2VydmljZS5jCmluZGV4IGMzMjNjZjAuLmJjMjdmOGMgMTAwNjQ0Ci0tLSBhL3NubXBsaWIvd2luc2VydmljZS5jCisrKyBiL3NubXBsaWIvd2luc2VydmljZS5jCkBAIC02LDYgKzYsOCBAQAogCiAjaWZkZWYgV0lOMzIKIAorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHRjaGFyLmg+CiAKQEAgLTM1LDYgKzM3LDE3IEBACiAjZGVmaW5lIENvdW50T2YoYXJyKSAoIHNpemVvZihhcnIpIC8gc2l6ZW9mKGFyclswXSkgKQogCiAKKyNpZiBkZWZpbmVkKFdJTjMyKSAmJiBkZWZpbmVkKEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLKSAmJiAhZGVmaW5lZChtaW5ndzMyKQorI3ByYWdtYSBjb21tZW50KGxpYiwgImlwaGxwYXBpLmxpYiIpCisjZW5kaWYNCisjaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQobWluZ3czMikNCisjaWZkZWYgVVNJTkdfV0lORVhURExMX01PRFVMRQorI3ByYWdtYSBjb21tZW50KGxpYiwgInNubXBhcGkubGliIikKKyNwcmFnbWEgY29tbWVudChsaWIsICJtZ210YXBpLmxpYiIpCisjZW5kaWYKKyNlbmRpZgorCisgCiAgICAgLyoKICAgICAgKiBFeHRlcm5hbCBnbG9iYWwgdmFyaWFibGVzIHVzZWQgaGVyZQogICAgICAqLwpAQCAtOTAsNiArMTAzLDE4IEBACiAgICAgICovCiBzdGF0aWMgVk9JRCAoKlN0b3BGdW5jdGlvbikgKFZPSUQpID0gMEw7CiAKKworICAgIC8qCisgICAgICogVG8gdXBkYXRlIHdpbmRvd3Mgc2VydmljZSBzdGF0dXMgdG8gU0NNIAorICAgICAqLworc3RhdGljIEJPT0wgVXBkYXRlU2VydmljZVN0YXR1cyAoRFdPUkQgZHdTdGF0dXMsIERXT1JEIGR3RXJyb3JDb2RlLAorCQkJCSBEV09SRCBkd1dhaXRIaW50KTsKKworICAgIC8qCisgICAgICogVG8gUmVwb3J0IGN1cnJlbnQgc2VydmljZSBzdGF0dXMgdG8gU0NNIAorICAgICAqLworc3RhdGljIEJPT0wgUmVwb3J0Q3VycmVudFNlcnZpY2VTdGF0dXMgKFZPSUQpOworCiBWT0lECiBQcm9jZXNzRXJyb3IgKFdPUkQgZXZlbnRMb2dUeXBlLCBMUENUU1RSIHBzek1lc3NhZ2UsIGludCB1c2VHZXRMYXN0RXJyb3IsIGludCBxdWlldCk7CiAKQEAgLTU0OSw3ICs1NzQsNyBAQAogICAKICAgaEV2ZW50U291cmNlID0gUmVnaXN0ZXJFdmVudFNvdXJjZSAoTlVMTCwgYXBwX25hbWVfbG9uZyk7CiAgIGlmIChoRXZlbnRTb3VyY2UgIT0gTlVMTCkgewotICAgIExQQ1NUUiBMb2dTdHJbMV07CisgICAgTFBDVFNUUiBMb2dTdHJbMV07CiAgICAgTG9nU3RyWzBdID0gcHN6TWVzc2FnZUZ1bGw7CiAgICAgCiAgICAgaWYgKFJlcG9ydEV2ZW50IChoRXZlbnRTb3VyY2UsIApkaWZmIC0tZ2l0IGEvdGVzdGluZy9NYWtlZmlsZS5pbiBiL3Rlc3RpbmcvTWFrZWZpbGUuaW4KaW5kZXggN2I4YTAwNS4uMmE2NDEzNyAxMDA2NDQKLS0tIGEvdGVzdGluZy9NYWtlZmlsZS5pbgorKysgYi90ZXN0aW5nL01ha2VmaWxlLmluCkBAIC0xMCw4ICsxMCw2IEBACiAjIGZhbGxiYWNrIHRvIHJlZ3VsYXIgVlBBVEggZm9yIG5vbi1nbnUuLi4KIEBOT05fR05VX1ZQQVRIQCAkKHNyY2RpcikKIAotI1RBUkcJCT0gZXRlc3Qga3Rlc3QgbWlzY3Rlc3Qgc3Rlc3QKLQogVVNFTElCUwkJPSAuLi9zbm1wbGliL2xpYnNubXAuJChMSUJfRVhURU5TSU9OKSQoTElCX1ZFUlNJT04pCiBMSUJTCQk9IC1MLi4vc25tcGxpYiAkKENDX1JVTlRJTUVfQVJHKSAtbHNubXAgQExJQlNACiAKQEAgLTIwLDEwICsxOCw0MyBAQAogQ1BQRkxBR1MJPSAkKFNOTVBMSUJfSU5DTFVERVMpIEBDUFBGTEFHU0AKIENDCQk9IEBDQ0AgJChDUFBGTEFHUykKIAotYWxsOiAkKFRBUkcpCithbGw6CisJQGVjaG8gIlNlbGVjdCBvbmUgb2YgdGhlIGZvbGxvd2luZyB0YXJnZXRzIHRvIHJ1bjoiCisJQGVjaG8gIiIKKwlAZWNobyAiICBtYWtlIHRlc3QgICAgICAgIC0tIGRlZmF1bHQgdGVzdCBzdWl0ZXMiCisJQGVjaG8gIiAgbWFrZSB0ZXN0YWxsICAgICAtLSBSdW4gYWxsIGF2YWlsYWJsZSB0ZXN0cyIKKwlAZWNobyAiICBtYWtlIHRlc3RmYWlsZWQgIC0tIFJ1biBvbmx5IHRoZSB0ZXN0cyB0aGF0IGZhaWxlZCBsYXN0IHRpbWUuIgorCUBlY2hvICIgIG1ha2UgdGVzdHNpbXBsZSAgLS0gUnVuIHRlc3RzIGRpcmVjdGx5IHdpdGggc2ltcGxlX3J1biIKKwlAZWNobyAiIgorCUBlY2hvICJTZXQgYWRkaXRpb25hbCB0ZXN0IHBhcmFtZXRlcnMgd2l0aCBURVNUT1BUUz1hcmdzIgorCUBlY2hvICIiCisJQGVjaG8gIkFsc28gc2VlIHRoZSBSVU5GVUxMVEVTVFMgc2NyaXB0IGZvciBkZXRhaWxzIgogCiB0ZXN0OgotCSQoc3JjZGlyKS9SVU5URVNUUyAtYSAtRCBgcHdkYC8uLiAkKFRFU1RPUFRTKQorCUBpZiB0ZXN0ICJ4JChQRVJMKSIgPSAieCIgXAorCSAgICAgICAgIC1vICJ4QFBFUkxfU1lTVEVNX0lOVk9LRVNfUE9TSVhfU0hFTExAIiAhPSB4eWVzIFwKKwkJIHx8IHsgISAkKFBFUkwpIC1lICdyZXF1aXJlIFRBUDo6SGFybmVzczsnID4vZGV2L251bGwgMj4mMSBcCisJCSAgICAmJiAhICQoUEVSTCkgLWUgJ3JlcXVpcmUgVGVzdDo6SGFybmVzczsgZGllIGlmICQkVGVzdDo6SGFybmVzczo6VkVSU0lPTiA8IDEuMjE7JyA+L2Rldi9udWxsIDI+JjE7IH07XAorCXRoZW4gXAorCQllY2hvICQoc3JjZGlyKS9SVU5URVNUUyA7IFwKKwkJJChzcmNkaXIpL1JVTlRFU1RTIDsgXAorCWVsc2UgXAorCQllY2hvICQoc3JjZGlyKS9SVU5GVUxMVEVTVFMgJChURVNUT1BUUykgOyBcCisJCSQoUEVSTCkgJChzcmNkaXIpL1JVTkZVTExURVNUUyAkKFRFU1RPUFRTKSA7IFwKKwlmaQorCit0ZXN0c2ltcGxlOgorCUAoZXhwb3J0IHNyY2Rpcj0kKHRvcF9zcmNkaXIpIDsgXAorCQlleHBvcnQgYnVpbGRkaXI9JCh0b3BfYnVpbGRkaXIpIDsgXAorCQkkKHNyY2RpcikvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1biAkKFRFU1RPUFRTKSBcCisJKQorCit0ZXN0YWxsOgorCSQoc3JjZGlyKS9SVU5GVUxMVEVTVFMgLWcgYWxsICQoVEVTVE9QVFMpCisKK3Rlc3RmYWlsZWQ6CisJJChzcmNkaXIpL1JVTkZVTExURVNUUyAtZiAkKFRFU1RPUFRTKQorCiAKIHRlc3QtbWliczoKIAljZCAkKHNyY2RpcikvcmZjMTIxMyA7IC4vcnVuCmRpZmYgLS1naXQgYS90ZXN0aW5nL1JFQURNRSBiL3Rlc3RpbmcvUkVBRE1FCmluZGV4IDk5Y2IzYTAuLmZhY2NjM2UgMTAwNjQ0Ci0tLSBhL3Rlc3RpbmcvUkVBRE1FCisrKyBiL3Rlc3RpbmcvUkVBRE1FCkBAIC0xLDIxICsxLDE2IEBACi1UaGUgUlVOVEVTVFMgc2NyaXB0IGlzIHRoZSB3cmFwcGVyIGFyb3VuZCBhbGwgdGhlIHRlc3RzLiAgVG8gcnVuIHRoZQotdGVzdHMsIHNpbXBseSBydW4gIi4vUlVOVEVTVFMiLiAgVGhlIGltcG9ydGFudCBhcmd1bWVudHMgZm9yIFJVTlRFU1RTCi1hY2NlcHRzIChmcm9tIC4vUlVOVEVTVFMgLWgpOgorVGhlIFJVTkZVTExURVNUUyBzY3JpcHQgaXMgYSB3cmFwcGVyIGFyb3VuZCB0aGUgdGVzdHMuICBBbGwgdGhlCit0ZXN0cyBhcmUgcmVxdWlyZWQgdG8gcHJvZHVjZSBUQVAgb3V0cHV0IChob3BlZnVsbHkgc29vbiB0byBiZQorc3RhbmRhcmRpemVkIGl0c2VsZikuCiAKLVVzYWdlOiBSVU5URVNUUyBbLWFdIFstUyBTTEVFUFRJTUVdIFstaF0gWy1pXSBbLXZdIFstVl0gWy1zXQotICAgICAgIFstVCBURVNUTlVNU10gWy1EIGJpbmRpcl0gWy1TIHNlY29uZHNdIFstUCA8dWRwfHRjcHx1ZHA2fHRjcDZ8dW5peD5dIgorQnkgZGVmYXVsdCBSVU5GVUxMVEVTVFMgb25seSBleGVjdXRlcyB0aGUgdGVzdHMgaW4gZnVsbHRlc3RzL2RlZmF1bHQuCitVc2UgdGhlIC1nIGZsYWcgdG8gdGVzdCBvdGhlciBzdWJkaXJlY3Rvcmllcywgb3IgdXNlICctZyBhbGwnIHRvIHRlc3QKK2V2ZXJ5dGhpbmcgaXQgY2FuIGZpbmQuCiAKLSAgLWEgICAgICAgIHJ1biBhbGwgdGVzdHMuCi0gIC1UIE5VTVMgICBydW4gcGFydGljdWxhciB0ZXN0cyAoY29tbWFuZCBzZXBhcmF0ZWQgbGlzdCBvZiBudW1iZXJzKQotICAtaSAgICAgICAgcnVuIGludGVyYWN0aXZlbHkKLSAgLXYgICAgICAgIGJlIHZlcmJvc2UKLSAgLVYgICAgICAgIGJlIHZlcnkgdmVyYm9zZQotICAtUyBUSU1FICAgVElNRSBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdGltZW91dCB3aGVuIHdhaXRpbmcgZm9yIGEKLSAgICAgICAgICAgIHJlc3BvbnNlIGZyb20gdGhlIGFnZW50LgotICAtQSBGTEFHUyAgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byB0aGUgYWdlbnQuCi0gIC10IEZMQUdTICBFeHRyYSBmbGFncyB0byBwYXNzIHRvIHRoZSB0cmFwZC4KLSAgLXMgICAgICAgIERvbid0IGVyYXNlIHRoZSBydW50aW1lIGRhdGEgZGlyZWN0b3J5IGZvciBzdWNjZXNzZnVsIHRlc3RzCi0gIC1YTSAgICAgICBEb24ndCBzZXQgTUlCRElSUyBlbnZpcm9ubWVudCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkKLSAgLXggICAgICAgIFR1cm4gb24gU0ggb3V0cHV0IGRlYnVnZ2luZyBmb3IgdGVzdHMuCi0gIC1QIFRSQU5TICBTcGVjaWZ5IG9uIHdoaWNoIHRyYW5zcG9ydCBkb21haW4gdG8gcnVuIHRoZSB0ZXN0cy4gRGVmYXVsdCBpcyB1ZHAuCi0gICAgICAgICAgICB1ZHAsdGNwLHVkcDYsdGNwNix1bml4IGFyZSBhdmFpbGFibGUuCitTZWUgdGhlIGRvY3VtZW50YXRpb24gY29udGFpbmVkIGluIHRoZSBSVU5GVUxMVEVTVFMgc2NyaXB0IGZvciBkZXRhaWxzCitvbjoKKworICAtIGhvdyB0byBydW4gcGFydGljdWxhciBzZXRzIG9mIHRlc3RzCisgIC0gaG93IHRvIHdyaXRlIHRlc3RzCisgIC0gaG93IHRvIHdyaXRlIF9idWlsZCBzY3JpcHRzCisgIC0gaG93IHRvIHdyaXRlIF9ydW4gc2NyaXB0cworCmRpZmYgLS1naXQgYS90ZXN0aW5nL1JVTkZVTExURVNUUyBiL3Rlc3RpbmcvUlVORlVMTFRFU1RTCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjQwYTQwYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL1JVTkZVTExURVNUUwpAQCAtMCwwICsxLDgxNiBAQAorIyEvdXNyL2Jpbi9lbnYgcGVybAorCit1c2UgR2V0b3B0OjpMb25nOworI3VzZSBEYXRhOjpEdW1wZXI7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgQ3dkIHF3KGFic19wYXRoKTsKK3VzZSBzdHJpY3Q7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR2xvYmFscyBhbmQgQ29tbWFuZCBMaW5lIG9wdGlvbnMKKworbXkgJW9wdHMgPSAoJ2dyb3VwcycgPT4gJ2RlZmF1bHQnLAorICAgICAgICAgICAgJ21hc3Rlci1kaXJlY3RvcnknID0+ICdmdWxsdGVzdHMnLAorCSAgICAnc3JjZGlyJyA9PiBkaXJuYW1lKCIkMCIpIC4gIi8uLiIsCisgICAgICAgICAgICAnYnVpbGRkaXInID0+ICcuLicsCisJICAgICdmYWlsZWQtZmlsZScgPT4gJ2ZhaWxlZF90ZXN0cycsCisJICAgKTsKKworR2V0b3B0OjpMb25nOjpDb25maWd1cmUocXcobm9faWdub3JlX2Nhc2UpKTsKK0dldE9wdGlvbnMoXCVvcHRzLAorICAgICAgICAgICAidmVyYm9zZSIsCisgICAgICAgICAgICJoZWxwfD8iLAorICAgICAgICAgICAicXVpZXR8cSIsCisgICAgICAgICAgICJncm91cHN8Zz1zIiwKKyAgICAgICAgICAgInI9cyIsCisgICAgICAgICAgICJkZWJ1ZyIsCisgICAgICAgICAgICJzcmNkaXJ8RD1zIiwKKyAgICAgICAgICAgImJ1aWxkZGlyfGQ9cyIsCisJICAgImYiLAorCSAgICJGIiwKKwkgICAiZmFpbGVkLWZpbGU9cyIsCisJICAgIm1hc3Rlci1kaXJlY3Rvcnk9cyIsCisJICApIHx8ICsrJG9wdHN7J2hlbHAnfTsKKworIyBDaGFuZ2Ugc3JjZGlyIGFuZCBidWlsZGRpciB0byBhYnNvbHV0ZSBwYXRocworJG9wdHN7J3NyY2Rpcid9ID0gYWJzX3BhdGgoJG9wdHN7J3NyY2Rpcid9KTsKKyRvcHRzeydidWlsZGRpcid9ID0gYWJzX3BhdGgoJG9wdHN7J2J1aWxkZGlyJ30pOworIyBTZXQgZXhlZXh0LgorJG9wdHN7J2V4ZWV4dCd9ID0gam9pbihyZWFkcGlwZSgkb3B0c3snYnVpbGRkaXInfSAuICcvbmV0LXNubXAtY29uZmlnIC0tZXhlZXh0JykpOworCit1c2FnZSgpIGlmICgkb3B0c3snaGVscCd9KTsKKworIyBCdWlsZCB0aGUgaGFybmVzcyBvYmplY3QKK215ICVhcmdzID0gKAorCSAgICB2ZXJib3NpdHkgPT4gKCRvcHRzeyd2ZXJib3NlJ30gPyAxIDogKCRvcHRzeydxdWlldCd9ID8gLTEgOiAwKSksCisJICAgIGV4ZWMgPT4gXCZkZWNpZGVfZXhlYywKKwkgICAgIyB0aGlzIG9wdGlvbiBpcyAqcmVhbGx5KiB3ZWlyZCBpbiBob3cgaXQgd29ya3MKKwkgICAgZmFpbHVyZXMgPT4gKCRvcHRzeydxdWlldCd9ID8gMCA6ICgkb3B0c3sndmVyYm9zZSd9ID8gMCA6IDEpKSwKKwkgICAgZXJyb3JzID0+ICgkb3B0c3sncXVpZXQnfSA/IDAgOiAxKSwKKwkgICApOworCisjIGxpc3Qgb2Ygc3VwcG9ydCBpbmZyYXN0cnVjdHVyZSBjb21wb25lbnRzCitteSAlc3VwcG9ydDsKK215ICVzb3VyY2VzOworCisjIGlmIHRoZSAtZCBvcHRpb24gd2FzIHNwZWNpZmllZCwgcGFzcyBvbiB0aGUgc291cmNlIHJvb3QgZGlyZWN0b3J5IHRvIGFsbCBhcHBzCitpZiAoZXhpc3RzKCRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30pKSB7CisgICAgJEVOVnsnTkVUU05NUFNSQ0RJUid9ID0gJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfTsKK30gZWxzZSB7CisgICAgJEVOVnsnTkVUU05NUFNSQ0RJUid9ID0gJy4nOworfQorCisjIHBhc3Mgc3JjZGlyIGFuZCBidWlsZGRpciB0byBhbGwgYXBwcworJEVOVnsnc3JjZGlyJ30gPSAkb3B0c3snc3JjZGlyJ307CiskRU5WeydidWlsZGRpcid9ID0gJG9wdHN7J2J1aWxkZGlyJ307CisKKyMgc2V0IHVwIE1JQkRJUlMgdG8gcmVmZXIgdG8gdGhlIHNyYyBkaXJlY3RvcnkKK2lmICghJEVOVnsnTUlCRElSUyd9KSB7CisgICAgJEVOVnsnTUlCRElSUyd9ID0gIiRvcHRze3NyY2Rpcn0vbWlicyI7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUHJvdGVjdGlvbiBtZWFzdXJlcworJEVOVnsnU05NUENPTkZQQVRIJ30gPSAiL2Rldi9udWxsIjsKKworIyBjcmVhdGUgdGhlIHRlc3RpbmcgaGFybmVzcyBpbmZyYXN0cnVjdHVyZQorCitteSAkaGFybmVzczsKK2lmIChldmFsIHsgcmVxdWlyZSBUQVA6Okhhcm5lc3M7IH0gKSB7CisgICAgaW1wb3J0IFRBUDo6SGFybmVzczsKKyAgICAkaGFybmVzcyA9IFRBUDo6SGFybmVzcy0+bmV3KFwlYXJncyk7Cit9IGVsc2UgeworICAgIHJlcXVpcmUgVGVzdDo6SGFybmVzczsKKyAgICBpbXBvcnQgVGVzdDo6SGFybmVzczsKKyAgICBpZiAoJG9wdHN7J2dyb3Vwcyd9IG5lICdkZWZhdWx0JykgeworCXByaW50IFNUREVSUiAiCitFUlJPUjogSSBjYW4gbm90IGZpbmQgdGhlIHBlcmwgVEFQOjpIYXJuZXNzIG1vZHVsZS4gIFdlIHN1cHBvcnQgdGhlCittb3JlIGNvbW1vbiBUZXN0OjpIYXJuZXNzIG1vZHVsZSBidXQgb25seSBmb3IgdGhlIGRlZmF1bHQgdGVzdCBncm91cC4KKworRWl0aGVyOgorICAxKSBydW4gb25seSB0aGUgZGVmYXVsdCB0ZXN0cyAoaS5lLiwganVzdCBcIm1ha2UgdGVzdFwiKQorICAyKSBpbnN0YWxsIHRoZSBUQVA6Okhhcm5lc3MgcGVybCBtb2R1bGUKKworIjsKKwlleGl0IDE7CisgICAgfQorICAgIERJRSgiVGVzdDo6SGFybmVzcyBtdXN0IGJlIG9mIHZlcnNpb24gMS4yMSBvciBuZXdlclxuIiAuCisJIkluc3RhbGwgdGhlIFRBUDo6SGFybmVzcyBtb2R1bGUgb3IgdXNlIHRoZSBSVU5URVNUUyBzY3JpcHRcbiIpCisgICAgICBpZiAkVGVzdDo6SGFybmVzczo6VkVSU0lPTiA8IDEuMjE7Cit9CisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBnYXRoZXIgdGhlIHRlc3RzCitteSBAdGVzdHM7CisKK0RFQlVHKCJHYXRoZXJpbmcgYW5kIGJ1aWxkaW5nIHRlc3RzOlxuIik7CitmaW5kX3N1cHBvcnQoKTsKK2lmICgkb3B0c3snZid9KSB7CisgICAgRElFKCJUaGUgLWYgYW5kIC1nIG9wdGlvbnMgY2FuIG5vdCBiZSBib3RoIHNwZWNpZmllZFxuIikKKyAgICAgIGlmICgkb3B0c3snZ3JvdXBzJ30gbmUgJ2RlZmF1bHQnKTsKKyAgICBESUUoIlRoZSAtZiBhbmQgLXIgb3B0aW9ucyBjYW4gbm90IGJlIGJvdGggc3BlY2lmaWVkXG4iKSBpZiAoJG9wdHN7J3InfSk7CisgICAgRElFKCJObyAkb3B0c3snZmFpbGVkLWZpbGUnfSBmaWxlIHdhcyBmb3VuZCB0byByZWFkIGZhaWxlZCBzdGF0ZSBmcm9tXG4iKQorICAgICAgaWYgKCEgLWYgJG9wdHN7J2ZhaWxlZC1maWxlJ30pOworICAgIG9wZW4oRiwgJG9wdHN7J2ZhaWxlZC1maWxlJ30pOworICAgIHdoaWxlICg8Rj4pIHsKKwljaG9tcDsKKwlwdXNoIEB0ZXN0cywgYnVpbGRfdGVzdCgkXyk7CisgICAgfQorfSBlbHNlIHsKKyAgICBAdGVzdHMgPSBnYXRoZXJfdGVzdHMoJG9wdHN7J2dyb3Vwcyd9LCAkb3B0c3sncid9KTsKK30KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyByZW5hbWUgdGhlbSB0byByZW1vdmUgcGFyZW50IGRpcnMKK0B0ZXN0cyA9IHJlbmFtZV90ZXN0cyhAdGVzdHMpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIHJ1biB0aGUgdGVzdHMKKworREVCVUcoIlJ1bm5pbmcgdGVzdHM6XG4iKTsgCitERUJVRygiLSIgeCA3OCwgIlxuIik7CisKK215ICRyZXN1bHRzOworaWYgKCRoYXJuZXNzKSB7CisgICAgJHJlc3VsdHMgPSAkaGFybmVzcy0+cnVudGVzdHMoQHRlc3RzKTsKK30gZWxzZSB7CisgICAgIyBtaW5pbWFsIGJhY2t3YXJkcyBjb21wYXQgd2l0aCBUZXN0OjpIYXJuZXNzCisgICAgcnVuX29sZGVyX3BlcmxfdGVzdHMoQHRlc3RzKTsKK30KKworbXkgQGZhaWxlZCA9ICRyZXN1bHRzLT5mYWlsZWQoKTsKK2lmICghJG9wdHN7J3EnfSAmJiAkI2ZhaWxlZCA+IC0xKSB7CisgICAgcHJpbnQgIlxuV2UgZmFpbGVkIHRoZXNlICIsICgxICsgJCNmYWlsZWQpLCAiIHRlc3RzOlxuIjsKKyAgICBteSBAbGluZXMgPSBAZmFpbGVkOworICAgIG1hcCB7IGlmIChleGlzdHMoJHNvdXJjZXN7JF99KSkgeyAkXyA9ICIkXyAoICRzb3VyY2VzeyRffSApIn0gfSBAbGluZXM7CisgICAgcHJpbnQgIiAgIiwgam9pbigiXG4gICIsQGxpbmVzKSwgIlxuIjsKK30KKworaWYgKCEkb3B0c3snRid9KSB7CisgICAgb3BlbihGLCI+JG9wdHN7J2ZhaWxlZC1maWxlJ30iKTsKKyAgICBpZiAoJCNmYWlsZWQgPiAtMSkgeworCXByaW50IEYgam9pbigiXG4iLCBnZXRfc291cmNlcyhAZmFpbGVkKSkgLiAiXG4iOworICAgIH0KKyAgICBjbG9zZShGKTsKK30KKworZXhpdCgkcmVzdWx0cy0+YWxsX3Bhc3NlZCgpID8gMCA6IDEpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEluZnJhc3RydWN0dXJlCisjCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZGVjaWRlcyBob3cgd2Ugc2hvdWxkIGV4ZWN1dGUgYSB0ZXN0CisjCitzdWIgZGVjaWRlX2V4ZWMgeworICAgIG15ICggJGhhcm5lc3MsICR0ZXN0ZmlsZSApID0gQF87CisKKyAgICAjIDEpIFBhcnNlIHRoZSAkdGVzdGZpbGUgYXJndW1lbnQuCisgICAgbXkgKCRkaXJuYW1lLCAkZ3JvdXBuYW1lLCAkYmFzZW5hbWUsICRhcHBfZXh0ZW5zaW9uLCAkZmlsZV9leHRlbnNpb24pID0gCisgICAgICAoJHRlc3RmaWxlID1+IC8oW15cL10rKVwvKFteXC9dKylcLyhbXlwvXSspXyhbXlwvX10rKVwuKihbXlwvXC5dKikkLyk7CisgICAgJGFwcF9leHRlbnNpb24gPX4gcy8kb3B0c3snZXhlZXh0J31cJC8vOworCisgICAgIyAyKSB3ZSBoYXZlIGEgUlVOX1RZUEUgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKKyAgICBpZiAoZXhpc3RzKCRzdXBwb3J0eydydW4nfXskYXBwX2V4dGVuc2lvbn17JGdyb3VwbmFtZX0pKSB7CisJcmV0dXJuIFskc3VwcG9ydHsncnVuJ317JGFwcF9leHRlbnNpb259eyRncm91cG5hbWV9LCAkdGVzdGZpbGVdOworICAgIH0KKworICAgICMgMykgcmV0dXJuIGEgZ2VuZXJpYyBydW4gc2NyaXB0CisgICAgaWYgKGV4aXN0cygkc3VwcG9ydHsncnVuJ317JGFwcF9leHRlbnNpb259eydnZW5lcmljJ30pKSB7CisJcmV0dXJuIFskc3VwcG9ydHsncnVuJ317JGFwcF9leHRlbnNpb259eydnZW5lcmljJ30sICR0ZXN0ZmlsZV07CisgICAgfQorCisgICAgIyA0KSBnaXZlIHVwIGFuZCBsZXQgdGhlIHRlc3QgaGFybmVzcyBkZWNpZGUgaXRzZWxmCisgICAgcmV0dXJuIHVuZGVmOworfQorCitzdWIgZ2F0aGVyX3Rlc3RzIHsKKyAgICBteSAoICRncm91cHMsICRyZWdleHAgKSA9IEBfOworICAgIG15IEBncm91cHM7CisKKyAgICAjIGZpZ3VyZSBvdXQgdGhlIGxpc3Qgb2YgZ3JvdXBzIHdlIG5lZWQgdG8gc2VhcmNoIHRocm91Z2gKKyAgICBpZiAoJGdyb3VwcyBlcSAnYWxsJykgeworCSMgZmluZCBldmVyeSBncm91cCB3ZSBjYW4KKwkjIHdlIGV4Y2x1ZGU6CisJIyAgLSB0aGluZ3Mgbm90IGEgZGlyZWN0b3J5CisJIyAgLSBhbnl0aGluZyB3aXRoICJ0ZW1wbGF0ZSIgaW4gdGhlIG5hbWUKKwlAZ3JvdXBzID0KKwkgIGdyZXAgeyAhLyh0ZW1wbGF0ZXxzdXBwb3J0KS8gJiYKKwkJICAgLWQgJF8gJiYgcy8kb3B0c3snc3JjZGlyJ31cL3Rlc3RpbmdcLyRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30uLy8gfSBnbG9iKCIkb3B0c3snc3JjZGlyJ30vdGVzdGluZy8kb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9LyoiKTsKKyAgICB9IGVsc2UgeworCSMgdGhleSBzcGVjaWZpZWQgYSBjb21tYSBzZXBhcmF0ZWQgbGlzdAorCUBncm91cHMgPSBzcGxpdCgvLFxzKi8sICRncm91cHMpOworICAgIH0KKyAgICBERUJVRygiQ2hlY2tpbmcgZ3JvdXBzOiAiLCBqb2luKCIsICIsIEBncm91cHMpLCAiXG4iKTsKKworICAgIG15IEB0ZXN0czsKKyAgICBmb3JlYWNoIG15ICRncm91cCAoQGdyb3VwcykgeworCW15IEBmaWxlczsKKworCURFQlVHKCJjaGVja2luZyBncm91cCAkZ3JvdXBcbiIpOworCisJaWYgKCEgLWQgIiRvcHRzeydzcmNkaXInfS90ZXN0aW5nLyRvcHRzeydtYXN0ZXItZGlyZWN0b3J5J30vJGdyb3VwIikgeworCSAgICBFUlJPUigiZ3JvdXAgJyRncm91cCcgaXMgbm90IGEgZGlyZWN0b3J5IHVuZGVyICckb3B0c3snc3JjZGlyJ30vdGVzdGluZy8kb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9JzsgaWdub3JpbmdcbiIpOworCSAgICBuZXh0OworCX0KKworCSMgcHVzaCBvbiBhbGwgZmlsZXMgdGhhdCBzdGFydCB3aXRoIFRbTlVNXSoKKwlwdXNoX29yX3NraXAoXEB0ZXN0cywgJHJlZ2V4cCwgZ2xvYigiJG9wdHN7J3NyY2Rpcid9L3Rlc3RpbmcvJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS8kZ3JvdXAvVFswLTldKiIpKTsKKyAgICB9CisKKyAgICByZXR1cm4gQHRlc3RzOworfQorCitzdWIgcHVzaF9vcl9za2lwIHsKKyAgICBteSAoJGFycmF5LCAkcmVnZXhwLCBAZmlsZXMpID0gQF87CisgICAgZm9yZWFjaCBteSAkZmlsZSAoQGZpbGVzKSB7CisJbmV4dCBpZiAoJGZpbGUgPX4gLy4oYmFrfG9sZHxvcmlnfHJlaikkLyk7CisJbmV4dCBpZiAoJGZpbGUgPX4gL34kLyk7CisJbmV4dCBpZiAoZGVmaW5lZCgkcmVnZXhwKSAmJiAkZmlsZSAhfiAvJHJlZ2V4cC9pKTsKKwlERUJVRygiICBBZGRpbmcgZmlsZSAkZmlsZVxuIik7CisJcHVzaCBAJGFycmF5LCBidWlsZF90ZXN0KCRmaWxlKTsKKyAgICB9Cit9CisKKyMgcmVuYW1lIGFsbCB0aGUgdGVzdHMgdG8gcmVtb3ZlIHRoZSB0b3Agc3ViZGlyIHRvIGhlbHAgcmVhZGFiaWxpdHkKK3N1YiByZW5hbWVfdGVzdHMgeworICAgIG15IChAdGVzdHMpID0gQF87CisgICAgbXkgQG5ld3Rlc3RzOworCisgICAgIyB5ZXMsIEkgY291bGQgaGF2ZSB1c2VkIG1hcC4gIEJ1dCBJIGRpZG4ndC4KKyAgICBmb3JlYWNoIG15ICRmaWxlIChAdGVzdHMpIHsKKwlteSAkdGl0bGUgPSAiJGZpbGUiOworCW15ICRmb3VuZGhlYWRlciA9IDA7CisJJHRpdGxlID0gJHNvdXJjZXN7JGZpbGV9IGlmIChleGlzdHMoJHNvdXJjZXN7JGZpbGV9KSk7CisJCisJb3BlbihTUkMsICR0aXRsZSk7CisJd2hpbGUgKDxTUkM+KSB7CisJICAgIGlmICgvKEhFQURFUnxUSVRMRSlccytbJyJdKiguKikvKSB7CisJCSR0aXRsZSA9ICQyOworCQkkdGl0bGUgPX4gcy9ccypcKlwvLiovLzsKKwkJJHRpdGxlID1+IHMvWyciXSQvLzsKKwkJJGZvdW5kaGVhZGVyID0gMTsKKwkJbGFzdDsKKwkgICAgfQorCX0KKwljbG9zZShTUkMpOworCisJaWYgKCEgJGZvdW5kaGVhZGVyKSB7CisJICAgICR0aXRsZSA9fiBzL14kb3B0c3snc3JjZGlyJ31cL3Rlc3RpbmdcLy8vOworCSAgICAkdGl0bGUgPX4gcy8kb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9Li8vOworCX0KKwkkc291cmNlc3skdGl0bGV9ID0gJHNvdXJjZXN7JGZpbGV9IHx8ICRmaWxlOworCXB1c2ggQG5ld3Rlc3RzLCBbJGZpbGUsICR0aXRsZV07CisgICAgfQorICAgIHJldHVybiBAbmV3dGVzdHM7Cit9CisKKyMgY2FsbGVkIHRvIHBvc3NpYmx5IG1hbmlwdWxhdGUgdGhlIGxpc3Qgb2YgdGVzdHMgdG8gcnVuIGJ5IGJ1aWxkaW5nIHNvbWUKK3N1YiBidWlsZF90ZXN0cyB7CisgICAgbXkgKEB0ZXN0cykgPSBAXzsKKyAgICBteSBAbmV3dGVzdHM7CisKKyAgICBmb3JlYWNoIG15ICR0ZXN0IChAdGVzdHMpIHsKKwlteSAkdGl0bGU7CisJCisJbXkgJGJ1aWx0ID0gYnVpbGRfdGVzdCgkdGVzdCk7CisJaWYgKHJlZigkYnVpbHQpIGVxICdBUlJBWScpIHsKKwkgICAgcHVzaCBAbmV3dGVzdHMsIEAkYnVpbHQ7CisJfSBlbHNpZiAoJGJ1aWx0IG5lICIiKSB7CisJICAgIHB1c2ggQG5ld3Rlc3RzLCAkYnVpbHQ7CisJfQorICAgIH0KKyAgICByZXR1cm4gQG5ld3Rlc3RzOworfQorCisjCisjIEZpbmRzIHNjcmlwdHMgdGhhdCBhcmUgdXNlZCB0byBidWlsZCBhbmQgcnVuIGFjdHVhbCBjb21tYW5kcworIworc3ViIGZpbmRfYnVpbGRlcnMgeworICAgICRzdXBwb3J0eydidWlsZCd9ID0ge307CisgICAgZmluZF9zY3JpcHRzKCdidWlsZCcsICRzdXBwb3J0eydidWlsZCd9KTsKK30KKworc3ViIGZpbmRfcnVubmVycyB7CisgICAgJHN1cHBvcnR7J3J1bid9ID0ge307CisgICAgZmluZF9zY3JpcHRzKCdydW4nLCAkc3VwcG9ydHsncnVuJ30pOworfQorCitzdWIgZmluZF9zdXBwb3J0IHsKKyAgICBmaW5kX2J1aWxkZXJzKCk7CisgICAgZmluZF9ydW5uZXJzKCk7Cit9CisKK3N1YiBmaW5kX3NjcmlwdHMgeworICAgIG15ICgkYnVpbGRuYW1lLCAkaGFzaHJlZikgPSBAXzsKKyAgICBteSAkY291bnQ7CisgICAgREVCVUcoImxvb2tpbmcgZm9yICRidWlsZG5hbWUgc2NyaXB0c1xuIik7CisgICAgZm9yZWFjaCBteSAkYnVpbGRlciAoZ2xvYigiJG9wdHN7J3NyY2Rpcid9L3Rlc3RpbmcvJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS8qLypfJHtidWlsZG5hbWV9IikpIHsKKwluZXh0IGlmICgkYnVpbGRlciA9fiAvfiQvKTsKKwluZXh0IGlmICgkYnVpbGRlciA9fiAvLihiYWt8b3JpZ3xyZWp8b2xkKSQvKTsKKworCW15ICgkZ3JvdXAsICR0eXBlKSA9ICgkYnVpbGRlciA9fiAvKFteXC9dKylcLyhbXlwvXSopXyR7YnVpbGRuYW1lfS8pOworCSMgc2F2ZSB0aGlzIGFzIGEgY2VydGFpbiBncm91cCBidWlsZGVyCisJJGhhc2hyZWYtPnskdHlwZX17JGdyb3VwfSA9ICRidWlsZGVyOworCisJIyBzYXZlIHRoaXMgYXMgYSBnZW5lcmljIGJ1aWxkZXIgaWYgdGhlcmUgaXNuJ3QgYSBiZXR0ZXIKKwkjIGdlbmVyaWMgb25lLCBzdWNoIGFzIG9uZSB0aGF0IGV4aXN0cyBpbiB0aGUgc3VwcG9ydAorCSMgZGlyZWN0b3J5LgorCWlmICghZXhpc3RzKCRoYXNocmVmLT57JHR5cGV9eydnZW5lcmljJ30pIHx8ICRncm91cCBlcSAnc3VwcG9ydCcpIHsKKwkgICAgJGhhc2hyZWYtPnskdHlwZX17J2dlbmVyaWMnfSA9ICRidWlsZGVyOworCX0KKwkkY291bnQrKzsKKyAgICB9CisgICAgREVCVUcoIiAgZm91bmQgJGNvdW50XG4iKTsKK30KKworIyBjYWxsZWQgdG8gYnVpbGQgYSB0ZXN0IGZyb20gYSByZWdpc3RlcmQgYnVpbGRlcgorc3ViIGJ1aWxkX3Rlc3QgeworICAgIG15ICgkdGVzdGZpbGUpID0gQF87CisKKyAgICBteSAoJGRpcm5hbWUsICRncm91cG5hbWUsICRiYXNlbmFtZSwgJGFwcF9leHRlbnNpb24sICRmaWxlX2V4dGVuc2lvbikgPSAKKyAgICAgICgkdGVzdGZpbGUgPX4gLyhbXlwvXSspXC8oW15cL10rKVwvKFteXC9dKylfKFteXC9fXSspXC4oW15cL1wuXSspJC8pOworCisgICAgIyBpcyB0aGlzIGV2ZW4gYSBidWlsZGFibGUgdHlwZSByZWNpcGU/CisgICAgaWYgKCEkZGlybmFtZSB8fCAhJGJhc2VuYW1lIHx8ICEkYXBwX2V4dGVuc2lvbiB8fCAhJGZpbGVfZXh0ZW5zaW9uKSB7CisJcmV0dXJuICR0ZXN0ZmlsZTsKKyAgICB9CisKKyAgICBERUJVRygiZm91bmQ6ICR0ZXN0ZmlsZSA9PiAkZGlybmFtZSwgJGJhc2VuYW1lLCAkYXBwX2V4dGVuc2lvbiwgJGZpbGVfZXh0ZW5zaW9uXG4iKTsKKworICAgICMgY2hvaWNlczoKKyAgICAjIDEpIHdlIGhhdmUgYSByZWdpc3RlcmVkIHN1YnJvdXRpbmUgdG8gYnVpbGQgYW4gZXh0ZW5zaW9uIGZyb20KKyAgICAjIFhYWAorCisgICAgIyAyKSB3ZSBoYXZlIGEgQlVJTERfVFlQRSBmaWxlIGluIHRoZSBzYW1lIGRpcmVjdG9yeQorICAgIGlmIChleGlzdHMoJHN1cHBvcnR7J2J1aWxkJ317JGFwcF9leHRlbnNpb259eyRkaXJuYW1lfSkpIHsKKwlyZXR1cm4KKwkgIGNhbGxfYnVpbGRfc2NyaXB0KCRzdXBwb3J0eydidWlsZCd9eyRhcHBfZXh0ZW5zaW9ufXskZGlybmFtZX0sICR0ZXN0ZmlsZSk7CisgICAgfQorCisgICAgIyAzKSByZXR1cm4gYSBnZW5lcmljIGJ1aWxkIHNjcmlwdAorICAgIGlmIChleGlzdHMoJHN1cHBvcnR7J2J1aWxkJ317JGFwcF9leHRlbnNpb259eydnZW5lcmljJ30pKSB7CisJcmV0dXJuCisJICBjYWxsX2J1aWxkX3NjcmlwdCgkc3VwcG9ydHsnYnVpbGQnfXskYXBwX2V4dGVuc2lvbn17J2dlbmVyaWMnfSwgJHRlc3RmaWxlKTsKKyAgICB9CisKKyAgICAjIDQpIHdlIGFzc3VtZSBpdCdzIGZpbmUgYXMgaXMKKyAgICByZXR1cm4gJHRlc3RmaWxlOworfQorCitzdWIgY2FsbF9idWlsZF9zY3JpcHQgeworICAgIG15ICgkc2NyaXB0bmFtZSwgJGZpbGVuYW1lKSA9IEBfOworCisgICAgbXkgJG1heWJlbmV3ZmlsZSA9ICRmaWxlbmFtZTsKKyAgICAkbWF5YmVuZXdmaWxlID1+IHMvLlteXC5dKyQvJG9wdHN7J2V4ZWV4dCd9LzsKKyAgICAkbWF5YmVuZXdmaWxlID1+IHMvVChbXlwvXSspJC9CJDEvOyAgIyBjaGFuZ2UgcHJlZml4IHRvIEIgZm9yICdCdWlsdCcKKyAgICAkbWF5YmVuZXdmaWxlID1+IHMvXiRvcHRzeydzcmNkaXInfVwvLy87CisKKyAgICBteSAkbmV3cGF0aCA9ICRtYXliZW5ld2ZpbGU7CisgICAgJG5ld3BhdGggPX4gcy9cL1teXC9dKiQvLzsKKworICAgIGlmICghIC1kICRuZXdwYXRoKSB7CisJREVCVUcoIm1ha2luZyBkaXJlY3RvcnkgJG5ld3BhdGhcbiIpOworCXN5c3RlbSgiJG9wdHN7J3NyY2Rpcid9L21raW5zdGFsbGRpcnMgJG5ld3BhdGgiKTsKKyAgICB9CisKKyAgICBteSAkbGFzdGxpbmU7CisgICAgREVCVUcoIkJVSUxESU5HOiAkc2NyaXB0bmFtZSAkZmlsZW5hbWUgJG1heWJlbmV3ZmlsZVxuIik7CisgICAgb3BlbihCLCIkc2NyaXB0bmFtZSAkZmlsZW5hbWUgJG1heWJlbmV3ZmlsZXwiKTsKKyAgICB3aGlsZSAoPEI+KSB7CisJJGxhc3RsaW5lID0gJF87CisgICAgfQorICAgIGNob21wKCRsYXN0bGluZSk7CisKKyAgICBERUJVRygiICByZXN1bHQ6ICRsYXN0bGluZVxuIik7CisgICAgcmV0dXJuIHVuZGVmIGlmICgkbGFzdGxpbmUgZXEgJ2ZhaWwnKTsKKyAgICByZXR1cm4gdW5kZWYgaWYgKCRsYXN0bGluZSBlcSAnc2tpcCcpOworICAgIHJldHVybiAkZmlsZW5hbWUgaWYgKCRsYXN0bGluZSBlcSAnJyk7CisgICAgJHNvdXJjZXN7JGxhc3RsaW5lfSA9ICRmaWxlbmFtZTsgICAgICAgICMgcmVtZW1iZXIgd2hlcmUgd2UgY2FtZSBmcm9tCisgICAgcmV0dXJuICRsYXN0bGluZTsKK30KKworc3ViIGdldF9zb3VyY2VzIHsKKyAgICBteSAoQG5hbWVzKSA9IEBfOworICAgIG1hcCB7IGlmIChleGlzdHMoJHNvdXJjZXN7JF99KSkgeyAkXyA9ICRzb3VyY2VzeyRffSB9IH0gQG5hbWVzOworICAgIHJldHVybiBAbmFtZXM7Cit9CisKK3N1YiBydW5fb2xkZXJfcGVybF90ZXN0cyB7CisgICAgIworICAgICMgT2xkZXIgdmVyc2lvbnMgb2YgcGVybCB1c2VkIGEgZGlmZmVyZW50IHRlc3Qgc3VpdGUgY2FsbGVkIFRlc3Q6Okhhcm5lc3MKKyAgICAjIEl0IGlzIG11Y2ggbW9yZSBsaW1pdGVkIHRoYW4gVEFQOjpIYXJuZXNzOworICAgICMKKyAgICAjIEhlcmUgd2UgbWFzc2FnZSBvdXIgb2xkZXIgdGVzdHMgaW50byBzb21ldGhpbmcgdGhhdCB3aWxsIHdvcmsgdW5kZXIKKyAgICAjIFRlc3Q6Okhhcm5lc3MgdG9vLgorICAgICMKKyAgICBteSBAdGVzdHMgPSBAXzsKKworICAgICMgY3JlYXRlIHRoZSB0ZW1wb3JhcnkgZmlsZXMKKyAgICBteSBAdGVtcGZpbGVzOworICAgIGlmICghIC1kICIkb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9IikgeworCW1rZGlyKCIkb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9IiwgMDc3Nyk7CisgICAgfQorICAgIGlmICghIC1kICIkb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9L3RlbXB0ZXN0cyIpIHsKKwlta2RpcigiJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS90ZW1wdGVzdHMiLCAwNzc3KTsKKyAgICB9CisgICAgZm9yZWFjaCBteSAkdGVzdCAoQHRlc3RzKSB7CisJbXkgJHRlbXBmaWxlID0gIiR0ZXN0LT5bMF0udCI7CisJJHRlbXBmaWxlID1+IHMjXiRvcHRzeydzcmNkaXInfSMkb3B0c3snYnVpbGRkaXInfSM7CisJJHRlbXBmaWxlID1+IHMjJG9wdHN7J21hc3Rlci1kaXJlY3RvcnknfS9kZWZhdWx0LyMkb3B0c3snbWFzdGVyLWRpcmVjdG9yeSd9L3RlbXB0ZXN0cy8jOworCW9wZW4oVCwgIj4kdGVtcGZpbGUiKSB8fCBkaWUoIiR0ZW1wZmlsZTogJCEiKTsKKwlwcmludCBUICIjIGZ1bmN0aW9uYWxseSBwZXJsXG5cbnN5c3RlbShcIiRvcHRzeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ydW4gJHRlc3QtPlswXVwiKTtcbiI7CisJY2xvc2UoVCk7CisJY2htb2QoMDc1NSwgJHRlbXBmaWxlKTsKKwlwdXNoIEB0ZW1wZmlsZXMsICR0ZW1wZmlsZTsKKyAgICB9CisKKyAgICAkcmVzdWx0cyA9IHJ1bnRlc3RzKEB0ZW1wZmlsZXMpOworCisgICAgdW5saW5rKEB0ZW1wZmlsZXMpIHx8IGRpZSgiJEAgJCEiKTsKKyAgICBleGl0OworfQorCisjIHVzYWdlIG91dHB1dAorc3ViIHVzYWdlIHsKKyAgICBwcmludCAiJDAgW09QVElPTlNdXG4iOworCisgICAgcHJpbnQgIlxuT1BUSU9OUzpcbiI7CisgICAgcHJpbnQgIiAgLXZcdFx0XHRSdW5zIGluIHZlcmJvc2UgbW9kZTsgZHVtcGluZyBhbGwgdGVzdCBvdXRwdXRcbiI7CisgICAgcHJpbnQgIiAgICAtLXZlcmJvc2VcbiI7CisgICAgcHJpbnQgIiAgLXFcdFx0XHRSdW5zIGluIHF1aWV0ZXIgbW9kZTsgZHVtcHMgbGVzcyB0ZXN0IG91dHB1dFxuIjsKKyAgICBwcmludCAiICAgIC0tcXVpZXRcbiI7CisgICAgcHJpbnQgIiAgLWcgR1JPVVBcdFx0UnVucyB0aGUgZ3JvdXAgb2Ygc3BlY2lmaWVkIHRlc3RzIChkZWZhdWx0ID0gJ2RlZmF1bHQnKVxuIjsKKyAgICBwcmludCAiICAgIC0tZ3JvdXAgR1JPVVBcbiI7CisgICAgcHJpbnQgIlx0XHRcdCh1c2UgJ2FsbCcgdG8gcnVuIGFsbCB0ZXN0cylcbiI7CisgICAgcHJpbnQgIiAgLXIgUkVHRVhQXHRcdE9ubHkgcnVuIHRlc3QgZmlsZXMgbWF0Y2hpbmcgdGhpcyByZWdleHBcbiI7CisgICAgcHJpbnQgIiAgLWZcdFx0XHRSdW4gb25seSB0aGUgZmFpbGVkIHRlc3RzIGZyb20gdGhlIGxhc3QgcnVuXG4iOworICAgIHByaW50ICIgIC1GXHRcdFx0RG9uJ3QgY3JlYXRlIHRoZSBmYWlsZWRfdGVzdHMgZmlsZVxuIjsKKyAgICBwcmludCAiICAtLWZhaWxlZC1maWxlIEZJTEVcdFRoZSBsb2NhdGlvbiBvZiB0aGUgZmFpbGVkIHN0YXRlIGZpbGVcbiI7CisgICAgcHJpbnQgIiAgLUQgUEFUSFx0XHRTb3VyY2UgZGlyZWN0b3J5XG4iOworICAgIHByaW50ICIgICAgLS1zcmNkaXIgUEFUSFxuIjsKKyAgICBwcmludCAiICAgIChjdXJyZW50bHkgJyRvcHRzeydzcmNkaXInfScpXG4iOworICAgIHByaW50ICIgIC1kIFBBVEhcdFx0QnVpbGQgZGlyZWN0b3J5IHRvIGJlIHRlc3RlZFxuIjsKKyAgICBwcmludCAiICAgIC0tYnVpbGRkaXIgUEFUSFxuIjsKKyAgICBwcmludCAiICAgIChjdXJyZW50bHkgJyRvcHRzeydidWlsZGRpcid9JylcbiI7CisgICAgcHJpbnQgIiAgLS1tYXN0ZXItZGlyZWN0b3J5IERJUk5BTUVcbiI7CisgICAgcHJpbnQgIiAgICAoZGVmYXVsdCA9ICdmdWxsdGVzdHMnKVxuIjsKKyAgICBwcmludCAiICAtaFx0XHRcdFRoaXMgaGVscCBvdXRwdXRcbiI7CisgICAgcHJpbnQgIiAgICAtLWhlbHBcbiI7CisgICAgcHJpbnQgIiAgLS1kZWJ1Z1x0XHREZWJ1Z2dpbmcgb3V0cHV0XG5cbiI7CisgICAgZXhpdDsKK30KKworc3ViIERFQlVHIHsKKyAgICByZXR1cm4gaWYgKCEkb3B0c3snZGVidWcnfSk7CisgICAgcHJpbnQgQF87Cit9CisKK3N1YiBFUlJPUiB7CisgICAgcHJpbnQgU1RERVJSICJFcnJvcjoiLCBAXzsKK30KKworc3ViIERJRSB7CisgICAgRVJST1IoQF8pOworICAgIGV4aXQgMTsKK30KKworPXBvZAorCis9aGVhZDEgTkFNRQorCitydW5mdWxsdGVzdHMgLSB0aGUgTmV0LVNOTVAgdGVzdCBzdWl0ZSBjb29yZGluYXRvcgorCis9aGVhZDEgU1lOT1BTSVMKKworcnVuZnVsbHRlc3RzIFtPUFRJT05TXQorCisjIC4vUlVORlVMTFRFU1RTCisKKyMgLi9SVU5GVUxMVEVTVFMgLWcgYWxsCisKKz1oZWFkMSBERVNDUklQVElPTgorCitCPFJVTkZVTExURVNUUz4gaXMgYSBUQVAgKHNlZSBiZWxvdykgb3V0cHV0IGFnZ3JlZ2F0b3IgYW5kIHRlc3Qgc3VpdGUKK21hbmFnZW1lbnQgcHJvZ3JhbS4gIEl0IHJ1bnMgZ3JvdXBzIG9mIHRlc3RzIHRoYXQgaXQgY2FuIGZpbmQgaW4gdGhlCitJPGZ1bGx0ZXN0cz4gc3ViLWRpcmVjdG9yeS4gIEl0IGRlZmF1bHRzIHRvIHJ1bm5pbmcgYSBiYXNpYyBzZXQgb2YKK2hpZ2gtbGV2ZWwgTmV0LVNOTVAgdGVzdHMgZm91bmQgaW4gdGhlIGZ1bGx0ZXN0cy9kZWZhdWx0IGRpcmVjdG9yeS4KK1RvIHJ1biBhIGRpZmZlcmVudCBzZXQgb2YgdGVzdHMgc2VlIHRoZSAtZyBmbGFnLgorCitJdCBpcyBhYmxlIHRvIGtlZXAgc3RhdGUgYW5kIHJlbWVtYmVyIHdoaWNoIHRlc3RzIGZhaWxlZCBzbyB0aGF0CitkdXJpbmcgZGV2ZWxvcG1lbnQgeW91IGNhbiBzaW1wbHkgcmUtcnVuIG9ubHkgdGhlICJsYXN0IGZhaWxlZCB0ZXN0cyIKK3VzaW5nIHRoZSAtZiBzd2l0Y2guCisKKz1oZWFkMiBQZXJsIFJlcXVpcmVtZW50cworCitJZGVhbGx5IGl0IHNob3VsZCBiZSBydW4gdW5kZXIgYSBmYWlybHkgbW9kZXJuIHZlcnNpb24gb2YgcGVybCAoZWcsCis1LjEwKSBidXQgbWlubWlhbCBzdXBwb3J0IGlzIHByb3ZpZGVkIGZvciBvbGRlciB2ZXJzaW9ucyBvZiBwZXJsIGFzCit3ZWxsLgorCitJZiBubyBwZXJsIGlzIGF2YWlsYWJsZSBvbiB0aGUgc3lzdGVtLCB0aGVyZSBpcyBhbHNvIGEgZmFsbC1iYWNrCisiUlVOVEVTVFMiIHN1aXRlIHdoaWNoIG1lcmVseSBleGVjdXRlcyB0aGUgZGVmYXVsdCBzY3JpcHRzIGZvciB0ZXN0aW5nCitjb21wbGlhbmNlIG9mIHRoZSBoaWdoLWxldmVsIGFwcGxpY2F0aW9ucy4KKworPWhlYWQyIEltcG9ydGFudCBOb3RlcyBBYm91dCBXcml0aW5nIE5ldyBUZXN0cworCitXaGVuIGRlc2lnbmluZyBuZXcgdGVzdHMgaXQgaXMgc3Ryb25nbHkgZW5jb3VyYWdlZCB0aGF0IHNvbWUKK2NvbnZlbnRpb25zIGFyZSBmb2xsb3dlZDoKKworICAtIERlc2lnbiB0aGUgdGVzdCBmaWxlcyBzbyB0aGV5IGNhbiBiZSBidWlsZC9ydW4gd2l0aG91dCB0aGVtCisgICAgbmVlZGluZyB0byBiZSBidWlsZC9ydW4gd2l0aGluIGEgdGVzdGluZyBoYXJuZXNzIGxpa2UgdGhpcyBvbmUKKyAgICAoQjxSVU5GVUxMVEVTVFM+KS4gIElFLCB5b3Ugc2hvdWxkIGJlIGFibGUgdG8gcnVuIHRoZW0gZGlyZWN0bHkgYnkKKyAgICBoYW5kIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMgd2l0aG91dCByZXF1aXJpbmcgdGhlbSB0byBiZSBpbnZva2VkCisgICAgd2l0aGluIHRoaXMgb3IgYW55IG90aGVyIHRlc3RpbmcgaGFybmVzcy4KKyAgLSBOYW1lIHRoZW0gYmVnaW5uaW5nIHdpdGggVE5OTiB3aGVyZSBOTk4gaXMgYSAzIGRpZ2l0IG51bWJlcgorCitUaGUgcmF0aW9uYWwgYmVoaW5kIHRoZXNlIHJ1bGVzIGZvbGxvd3MgaW4gdGhlIHNlY3Rpb25zIGJlbG93CisKKz1oZWFkMSBPUFRJT05TCisKKz1vdmVyCisKKz1pdGVtIC1nIEdST1VQCisKKz1pdGVtIC0tZ3JvdXAgR1JPVVAKKworQnkgZGVmYXVsdCB0aGUgImRlZmF1bHQiIGdyb3VwIG9mIHRlc3RzIGlzIHJ1bi4gIFdoaWNoIGlzIHJlYWxseSBqdXN0CitldmVyeXRoaW5nIHRoYXQgQjxSVU5GVUxMVEVTVFM+IGNhbiBmaW5kIGZyb20gdGhlIEk8ZnVsbHRlc3RzL2RlZmF1bHQ+CitzdWItZGlyZWN0b3J5LiAgVGhlIC1nIHN3aXRjaCBjYW4gYmUgdXNlZCB0byBzcGVjaWZ5IG90aGVyCitzdWItZGlyZWN0b3JpZXMgb2YgdGVzdHMgdG8gcnVuLiAgVGhlIGFyZ3VtZW50IGlzIGEgY29tbWEtc2VwYXJhdGVkCitsaXN0IG9mIHN1YmRpcmVjdG9yaWVzIHRvIHVzZS4KKworVGhlIHNwZWNpYWwga2V5d29yZCBJPGFsbD4gY2FuIGJlIHVzZWQgdG8gcnVuIGV2ZXJ5IHRlc3QgaW4gZXZlcnkKK3N1YmRpcmVjdG9yeSBvZiB0aGUgSTxmdWxsdGVzdHM+IGRpcmVjdG9yeS4KKworPWl0ZW0gLXIgUkVHRVhQCisKK09ubHkgcnVuIHRlc3QgZmlsZXMgdGhhdCBtYXRjaCB0aGUgSTxSRUdFWFA+IHJlZ3VsYXIgZXhwcmVzc2lvbi4KKworVG8gcnVuIG9ubHkgdGVzdHMgb2YgYSBjZXJ0YWluIGZpbGUgbmFtZSB5b3UgbWlnaHQgY29tYmluZSB0aGlzIHdpdGgKKyctZyBhbGwnLiAgRS5HLiwgLWcgYWxsIC1yIHNubXB2MyB3aWxsIHJ1biBhbGwgc25tcHYzIChuYW1lZCkgdGVzdHMKK3RoYXQgQjxSVU5GVUxMVEVTVFM+IGNhbiBmaW5kLgorCis9aXRlbSAtZgorCitPbmx5IHJ1biB0aGUgdGVzdHMgdGhhdCBmYWlsZWQgZnJvbSB0aGUgbGFzdCBydW4uCisKKz1pdGVtIC0tZmFpbGVkLWZpbGUgRklMRQorCitXaGVyZSB0byBzdG9yZSB0aGUgc3RhdGUgb2Ygd2hpY2ggdGVzdHMgaGF2ZSBmYWlsZWQuCisKKz1pdGVtIC1GCisKK0Rvbid0IHNhdmUgc3RhdGUgdG8gdGhlIGZhaWxlZC1maWxlLgorCis9aXRlbSAtRCBQQVRICisKKz1pdGVtIC0tc3JjZGlyIFBBVEgKKworSWYgUlVORlVMTFRFU1RTIGlzIGJlaW5nIGV4ZWN1dGVkIGZyb20gYSBidWlsZCBkaXJlY3Rvcnkgb3RoZXIgdGhhbgord2hlcmUgdGhlIHNvdXJjZSBmaWxlcyBhcmUgbG9jYXRlZCwgdGhpcyBmbGFnIGNhbiBiZSB1c2VkIHRvIHNwZWNpZnkKK3doZXJlIHRoZSBOZXQtU05NUCByb290IHNvdXJjZSBkaXJlY3RvcnkgaXMgZm91bmQuCisKKz1pdGVtIC1kIFBBVEgKKworPWl0ZW0gLS1idWlsZGRpciBQQVRICisKK1NwZWNpZmllcyB0aGUgcm9vdCBvZiB0aGUgYnVpbGQgZGlyZWN0b3J5LgorCis9aXRlbSAtLW1hc3Rlci1kaXJlY3RvcnkgRElSTkFNRQorCitTcGVjaWZpZXMgYW4gYWx0ZXJuYXRlIG1hc3RlciBkaXJlY3RvcnkuICBUaGUgZGVmYXVsdCBpcyAiZnVsbHRlc3RzIgorCis9aXRlbSAtdgorCis9aXRlbSAtLXZlcmJvc2UKKworVHVybnMgb24gdmVyYm9zZSBvdXRwdXQgbW9kZS4KKworPWl0ZW0gLXEKKworPWl0ZW0gLS1xdWlldAorCitUdXJucyBvbiBxdWlldCBvdXRwdXQgbW9kZS4KKworPWl0ZW0gLS1kZWJ1ZworCitUdXJucyBvbiBkZWJ1Z2dpbmcgb3V0cHV0ICh3aGljaCBwcmltYXJpbHkgc2hvd3MgaG93IEI8UlVORlVMTFRFU1RTPgoraXMgY29sbGVjdGluZyB0ZXN0cyB0byBydW4sIGV0YykuCisKKz1pdGVtIC1oCisKKz1pdGVtIC0taGVscAorCitDb21tYW5kIGxpbmUgdXNhZ2UgaGVscCBvdXRwdXQuCisKKz1iYWNrCisKKz1oZWFkMSBURVNUIEFSQ0hJVEVDVFVSRQorCis9aGVhZDIgVEFQIG91dHB1dAorCitUQVAgc3RhbmRzIGZvciAiVGVzdCBBbnl0aGluZyBQcm90b2NvbCIuICBUQVAgd2FzIG9yaWdpbmFsbHkKK3Blcmwtc3BlY2lmaWMgYnV0IGhhcyBiZWVuIHR1cm5pbmcgb3V0IHRvIGJlIGEgZ2VuZXJpYyBwcm90b2NvbCBmb3IKK3Rlc3RpbmcganVzdCBhYm91dCBhbnl0aGluZy4gIEl0J3MgaGVhdmlseSBkb2N1bWVudGVkIGF0OgorCisgIGh0dHA6Ly90ZXN0YW55dGhpbmcub3JnL3dpa2kvaW5kZXgucGhwL01haW5fUGFnZQorCitXZSdyZSB1c2luZyBUQVAgYmVjYXVzZSBpdCdzIGhpZ2hseSBmbGV4aWJsZSBhbmQgc2VwYXJhdGVzIHRoZQoraW52aWR1YWwgdGVzdHMgZnJvbSB0aGUgImNvbGxlY3QgYW5kIHJlcG9ydCIgYXNwZWN0LiAgUlVORlVMTFRFU1RTIGlzCitzaW1wbHkgYSBwZXJsLWJhc2VkIGltcGxlbWVudGF0aW9uIGZvciBjb2xsZWN0aW5nIGFuZCBzdW1tYXJpemluZyB0aGUKK3Rlc3QgcmVzdWx0cy4gIE90aGVyIGNvbGxlY3Rpb24gYWdlbnRzIGNvdWxkIGJlIHVzZWQgaW5zdGVhZCBvZiB0aGlzCitvbmUsIGFuZCBhbnkgc29ydCBvZiB0ZXN0IG9yIGxhbmd1YWdlIGNvdWxkIGJlIHVzZWQgZm9yIHRoZSBpbmRpdmlkdWFsCit0ZXN0cyBhcyB3ZWxsIChpbiBmYWN0IHRoZSBkZWZhdWx0IHN1aXRlIGhhcyBzb21lIHRoYXQgYXJlIFNILWJhc2VkLAorQy1iYXNlZCwgLi4uKS4KKworSXQgbWF5IGJlIHRoYXQgZXZlbnR1YWxseSB0aGUgVEFQIHByb3RvY29sIGFjdHVhbGx5IG1ha2VzIGl0IGludG8gdGhlCitJRVRGIChodHRwOi8vdGVzdGFueXRoaW5nLm9yZy93aWtpL2luZGV4LnBocC9UQVBfYXRfSUVURjpfRHJhZnRfU3RhbmRhcmQpLgorCitUaGUgc3ludGF4IG9mIFRBUCBpcyB2ZXJ5IHNpbXBsZS4gIFNlZSB0aGUgYWJvdmUgd2ViIHBhZ2UgZm9yIGEKK2NvbXBsZXRlIGRlc2NyaXB0aW9uLCBidXQgdGhpcyB3aWxsIHByb3ZpZGUgeW91IGEgbWluaW1hbCAiZ2V0dGluZworc3RhcnRlZCIgZXhhbXBsZSBhbmQgc2hvd3MgdGhlIG91dHB1dCBvZiA1IHN1Yi10ZXN0cyBydW4gZnJvbSBhIHNpbmdsZQordGVzdCBhcHBsaWNhdGlvbi4KKworICAxLi41CisgIG9rIDEgLSBZYXkKKyAgb2sgMiAtIFNlY29uZCBwYXJ0IHN1Y2NlZWRlZAorICBub3Qgb2sgMyAtIE9oIG5vLi4uICBBIHByb2JsZW0gb2NjdXJyZWQuCisgIG5vdCBvayA0IC0gVGhlIGNvbXB1dGVyIHRob3VnaHQgMisyIHdhcyA1CisgIG9rIDUgLSBBbGwgaXMgd2VsbCB0aGF0IGVuZHMgd2VsbAorCitUaGF0J3MgaXQuICBPdXRwdXQgZnJvbSBhIHRlc3QgdG9vbCBsaWtlIHRoYXQgaXMgYXV0by1zdW1tYXJpemVkIGJ5Cit0aGlzIGFwcGxpY2F0aW9uIGluIHN1Y2Nlc3MvZmFpbCByZXBvcnRzLgorCis9aGVhZDIgVGVzdGluZyBQaGFzZXMKKworVGhlIHRlc3RpbmcgcHJvY2VzcyBnb2VzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBwaGFzZXM6CisKKyAtIFRlc3QgYW5kIEluZnJhc3RydWN0dXJlIENvbGxlY3Rpb24KKyAtIFRlc3QgRXhlY3V0aW9uCisgICAtIEJ1aWxkIGlmIG5lZWRlZAorICAgLSBSdW4KKworPWhlYWQyIFRlc3QgQ29sbGVjdGlvbgorCitCPFJVTkZVTExURVNUUz4gd2lsbCBzZWFyY2ggYWxsIHRoZSByZXF1ZXN0ZWQgZ3JvdXBzIGZvciBmaWxlcyB0aGF0CitiZWdpbiB3aXRoIHRoZSBsZXR0ZXIgJ1QnLiAgVGhleSBhcmUgZXhlY3V0ZWQgaW4gYWxwaGFiZXRpY2FsIG9yZGVyCit3aXRoaW4gdGhlaXIgZ3JvdXAuICBDb252ZW50aW9uIGlzIHRvIG51bWJlciB0ZXN0IGZpbGVzIHdpdGggYSB0aHJlZQorZGlnaXQgKHplcm8tcGFkZGVkKSBudW1iZXIgYWZ0ZXIgdGhlICdUJyBsZXR0ZXIgdG8gZW5zdXJlIG9yZGVyaW5nIGlzCithcyBleHBlY3RlZC4KKworRmlsZXMgdG8gYmUgY29sbGVjdGVkIGJ5IEI8UlVORlVMTFRFU1RTPiBhcmUgbWFkZSB1cCBvZiBhIG51bWJlciBvZgorY29tcG9uZW50cyB0byBzdXBwb3J0IGEgZmxleGlibGUgYnVpbGQgYW5kIGV4ZWN1dGlvbiBzeXN0ZW0gKGRpc2N1c3NlZAoraW4gZGV0YWlsIGluIHRoZSBmb2xsb3dpbmcgc2VjdGlvbnMpLiAgVGhleSBhcmUgc3RydWN0dXJlZCBhcyBmb2xsb3dzOgorCisgIFQ8Tk5OPjxOQU1FPl88VFlQRT4uPFNVRkZJWD4KKworV2hlcmU6CisKKyAgTk5OOiAgICAgIElzIHRoZSAzIGRpZ2l0IG51bWJlciBtZW50aW9uZWQgYWJvdmUuCisgIE5BTUU6ICAgICBUaGUgZmlsZW5hbWUgb2YgdGhlIHRlc3QgZGVzY3JpYmluZyB3aGF0IGl0J3MgYWJvdXQKKyAgVFlQRTogICAgIFRoZSBpbnRlcm5hbCAidHlwZSIgb2YgdGhlIHRlc3QsIHdoaWNoIGlzIHVzZWQgbGF0ZXIgaW4gYnVpbGRpbmcKKyAgICAgICAgICAgIGFuZCBleGVjdXRpb24gKHNlZSBiZWxvdykuCisgIC5TVUZGSVg6ICBBbiBvcHRpb25hbCBmaWxlLXR5cGUgc3VmZml4CisKK0V4YW1wbGVzOgorCisgIGZ1bGx0ZXN0cy9kZWZhdWx0L1QwMDFzbm1wdjFnZXRfc2ltcGxlCisgIGZ1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jCisKK0FueSBvdGhlciBmaWxlcyBhcmUgaWdub3JlZCBpbiB0ZXJtcyBvZiB0ZXN0cyBhbmQgbWF5IGJlIHN1cHBsaW1lbnRhbAordG8gdGhlIGFib3ZlIGJ1aWxkIHN5c3RlbXMuICAoU3VwcG9ydGluZyBmaWxlcywgYnkgY29udmVudGlvbiwgYmVnaW4KK3dpdGggYSBjYXBpdGFsICdTJykuCisKKz1oZWFkMyBGdWxsIFRpdGxlCisKK1dpdGhpbiB0aGUgZmlsZSB0aGVyZSBtYXkgYmUgYSBsaW5lIGNvbnRhaW5pbmcgIkhFQURFUiAuLi4iIHRoYXQgd2lsbAorYmUgZXhhbWluZWQgZm9yIGEgYmV0dGVyIHRpdGxlIG9mIHRoZSB0ZXN0LiAgQW55dGhpbmcgYmVmb3JlICJIRUFERVIiCit3aWxsIGJlIGlnbm9yZWQsIGFuZCB0aGUgc3BlY2lhbCAiKi8iIHdpbGwgYmUgcmVwbGFjZWQgYXMgd2VsbC4gIEZvcgorZXhhbXBsZSwgdGhlc2UgYXJlIHZhbGlkIGhlYWRlciBzb3VyY2UgbGluZXM6CisKKyAgIyBIRUFERVIgQSBjb29sIHRlc3QKKyAgLyogSEVBREVSIEEgY29vbCB0ZXN0IGZyb20gbXkgQy1iYXNlZCBzb3VyY2UgZmlsZSAqLworCis9aGVhZDIgSW5mcmFzdHJ1Y3R1cmUgQ29sbGVjdGlvbgorCitJbiBhZGRpdGlvbiB0byB0ZXN0IGZpbGVzLCBJPGluZnJhc3RydWN0dXJlPiBmaWxlcyBhcmUgc2VhcmNoZWQgZm9yCithbmQgcmVtZW1iZXJlZCBmb3IgbGF0ZXIgdXNlIChhZ2Fpbiwgc2VlIGJlbG93KS4gIFRoZXNlIGZpbGVzIHdpbGwgYmUKK29mIHRoZSBmb3JtOgorCisgIDxUWVBFPl88VVNFQUdFPgorCitXaGVyZToKKworICBUWVBFOiAgICAgIFRoZSB0eXBlIG5hbWUgbWF0Y2hpbmcgdGhlIGZpbGUgdG8gc3VwcG9ydC4KKworICBVU0FHRTogICAgIEhvdyB0aGlzIGZpbGUgc2hvdWxkIGJlIHVzZWQuICBDdXJyZW50bHkgc2hvdWxkIGJlIGVpdGhlcgorICAgICAgICAgICAgSTxidWlsZD4gb3IgSTxydW4+IGFzIGRlc2NyaWJlZCBiZWxvdy4KKworRXhhbXBsZSBmaWxlcworCisgIGZ1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfYnVpbGQKKyAgZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bgorCitJbmZyYXN0cnVjdHVyZSBmaWxlcyBtYXkgZXhpc3QgaW4gdGhlIHNvdXJjZSBkaXJlY3Rvcnkgb2Ygd2hlcmUgdGhleSdyZQorZXhwZWN0ZWQgdG8gYmUgcnVuIChpZSwgcGFyYWxsZWwgdG8gdGhlIHRlc3QgZmlsZXMpIG9yIHRoZXkgbWF5IGV4aXN0CitpbiB0aGUgc3BlY2lhbCAic3VwcG9ydCIgZGlyZWN0b3J5IGlmIHRoZXkncmUgZXhwZWN0ZWQgdG8gYmUKK2dlbmVyaWNhbGx5IHVzZWQgYWNyb3NzIG11bHRpbHBlIHRlc3QgZ3JvdXAgdHlwZXMuCisKKz1oZWFkMiBUZXN0IEV4ZWN1dGlvbgorCitUZXN0cyBhcmUgcnVuIGluIHR3byBwaGFzZXMgdXNpbmcgdGhlIGZvbGxvd2luZyBwc2V1ZG8tYWxnb3JpdGhtOgorCisgICsgZm9yIGVhY2ggdGVzdCBmaWxlCisgICAgKyBpZiBhbiBhcHByb3ByaWF0ZSBUWVBFX2J1aWxkIGZpbGUgZXhpc3RzIGZvciBhIHRlc3QgeworICAgICAgKyBydW4gIlRZUEVfYnVpbGQgVEVTVEZJTEUiCisgICAgICArIHJlY29yZCB0aGUgbGFzdCBsaW5lIGFzIHRoZSBuZXcgVEVTVEZJTEUgdG8gcnVuCisgICAgfQorCisgICAgKyBpZiBhbiBhcHBvcnByaWF0ZSBUWVBFX3J1biBmaWxlIGV4aXN0cyBmb3IgYSB0ZXN0IHsKKyAgICAgICsgcnVuICJUWVBFX3J1biBURVNURklMRSIKKyAgICAgICsgY29sbGVjdCBpdCdzIG91dHB1dCBhcyB0aGUgVEFQIG91dHB1dAorICAgIH0gZWxzZSB7CisgICAgICArIHJ1biAiVEVTVEZJTEUiCisgICAgICArIGNvbGxlY3QgaXQncyBvdXRwdXQgYXMgdGhlIFRBUCBvdXRwdXQKKyAgICB9CisKK0ZvciBleGFtcGxlLCBpZiB0aGUgZm9sbG93aW5nIGZpbGVzIGV4aXN0ZWQ6CisKKyAgZnVsbHRlc3RzL2V4YW1wbHJlcy9UMDAxdGVzdGluZ19leGFtcAorICBmdWxsdGVzdHMvZXhhbXBscmVzL2V4YW1wX2J1aWxkCisgIGZ1bGx0ZXN0cy9leGFtcGxyZXMvZXhhbXBfcnVuCisKK1RoZW4gdGhlIGZvbGxvd2luZyB3b3VsZCBiZSB0aGUgcm91Z2ggZXhlY3V0aW9uOgorCisgIG5ld2ZpbGUgPSBgZnVsbHRlc3RzL2V4YW1wbHJlcy9leGFtcF9idWlsZCBcCisgICAgICAgICAgICAgZnVsbHRlc3RzL2V4YW1wbHJlcy9UMDAxdGVzdGluZ19leGFtcCB8IHRhaWwgLTFgCisgIGZ1bGx0ZXN0cy9leGFtcGxyZXMvZXhhbXBfcnVuICRuZXdmaWxlCisKKz1oZWFkMSBURVNUIFRZUEVTCisKK05ldC1TTk1QIHRlc3RpbmcgY29tZXMgd2l0aCBhIG51bWJlciBvZiB0ZXN0IHN1aXRlICJidWlsZGVycyIgYW5kCisicnVubmVycyIgdGhhdCBhcmUgdXNlZnVsIGZvciBkZXZlbG9waW5nIG5ldyB0ZXN0cy4gIFRoZXNlIGFyZQorZG9jdW1lbnRlZCBoZXJlOgorCis9b3ZlcgorCis9aXRlbSBzaW1wbGUKKworSTxzaW1wbGU+IHRlc3QgZmlsZXMgYXJlIHNpbXBsZSBzaC1zaGVsbC1zY3JpcHQgZmlsZXMgdXNlZCB0byB0ZXN0CitoaWdoLWxldmVsIGZ1bmN0aW9uYWxpdHkgb2YgTmV0LVNOTVAgdG9vbHMuICBUaGV5J3JlIGVhc3kgdG8gd3JpdGUgYW5kCitzaG91bGQgZ2VuZXJhbGx5IGNvbnRhaW4gdGhlIGZvbGxvd2luZyBzb3J0IG9mIHN0cnVjdHVyZToKKworICAuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKyAgSEVBREVSIG15IG5hbWUKKyAgU1RBUlRBR0VOVAorICBDQVBUVVJFICJzbm1wZ2V0Li4uIgorICBDSEVDSyAiZm9yIHRoaXMgc3RyaW5nIgorICBTVE9QQUdFTlQKKyAgRklOSVNIRUQKKworRXhhbXBsZSBmaWxlOiBmdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZQorCis9aXRlbSBjYXBwCisKK0k8Y2FwcD4gZmlsZXMgYXJlIGZ1bmRhbWVudGFsbHkgZnVsbCBDLXNvdXJjZS1jb2RlIGFwcGxpY2F0aW9ucyB0aGF0CithcmUgYnVpbHQgYW5kIGxpbmtlZCBhZ2FpbnN0IHRoZSBsaWJuZXRzbm1wIGxpYnJhcnkuICBUaHVzLCBhIGZpbGUKK25hbWVkIEk8VDAwMW15dGVzdF9jYXBwLmM+IGlzIGNvbXBpbGVkIHVzaW5nIHRoZSBzYW1lIGNvbXBpbGVyIHVzZWQgdG8KK2NvbXBpbGUgTmV0LVNOTVAgYW5kIGxpbmtlZCBhZ2FpbnN0IHRoZSByZXF1aXJlZCBsaWJyYXJpZXMgZm9yIGEgYmFzaWMKK05ldC1TTk1QIGFwcGxpY2F0aW9uLiAgSXQgc2hvdWxkLCBvZiBjb3Vyc2UsIHByb2R1Y2UgVEFQIG91dHB1dCBhZnRlcgoraXQncyBjb21waWxlZCBhbmQgcnVuLgorCitFeGFtcGxlIGZpbGU6IGZ1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMKKworPWl0ZW0gY2xpYgorCitJPGNsaWI+IGZpbGVzIGFyZSBzaW1wbGUgQy1zb3VyY2UtY29kZSBmaWxlcyB0aGF0IGFyZSB3cmFwcGVkIGludG8gYQorbWFpbigpIGFwcGxpY2F0aW9uIHdpdGggYXBwcm9wcmlhdGUgI2luY2x1ZGUgZmlsZXMsIGV0Yy4gIEk8Y2xpYj4KK2ZpbGVzIGFyZSBkZXNpZ25lZCBwcmltYXJseSB0byB3cml0ZSBxdWljayB1bml0LXRlc3RzIGZvciB0aGUgTmV0LVNOTVAKK2NvcmUgbGlicmFyeS4KKworRXhhbXBsZSBmaWxlOiBmdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYworCis9aXRlbSBXcml0ZSB5b3VyIG93biEKKworVGhpcyB0ZXN0IHN5c3RlbSBpcyBkZXNpZ25lZCB0byBiZSBmbGV4aWJsZSBhbmQgZXhwYW5kYWJsZSBpZiB0aGUKK2Jhc2ljIGFyY2hpdGVjdHVyZSBpcyBmb2xsb3dlZC4gIFRoZSBnb2FsIGlzIHRvIG1ha2UgaXQgZWFzeSB0byBjcmVhdGUKK3Zlcnkgc2ltcGxlIHRlc3Qgc3VpdGVzIG9yIGNvbXBsZXggdW5pdC10ZXN0cyBvciBhbnl0aGluZyBpbiBiZXR3ZWVuLgorCis9YmFjaworCis9aGVhZDEgREVCVUdHSU5HIEJST0tFTiBURVNUUworCitJZiB0aGUgaW5kaXZpZHVhbCB0ZXN0cyBhcmUgZGVzaWduZWQgd2VsbCwgeW91IHNob3VsZCBiZSBhYmxlIHRvCityZS1ydW4gaW5kaXZpZHVhbCB0ZXN0cyBvdXRzaWRlIG9mIHRoZSBCPFJVTkZVTExURVNUUz4gYWdncmVnYXRpb24KK2Vudmlyb25tZW50IHVzaW5nIHRoZSBhcHByb3ByaWF0ZSBfYnVpbGQgYW5kIF9ydW4gc2NyaXB0cyBhcyBuZWVkZWQuCitUZXN0IHdyaXRlcnMgYXJlIGVuY291cmFnZWQgdG8gb3V0cHV0IGNvbW1lbnRzIGluIHRoZWlyIFRBUCBvdXRwdXQgdG8KK2hlbHAgdXNlcnMgZGVidWcgdGhlIHJlc3VsdHMuCisKKz1oZWFkMSBBdXRob3IKKworT3JpZ2luYWwgYXJjaGl0ZWN0dXJlOiBXZXMgSGFyZGFrZXIgPGhhcmRha2VyQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworPWN1dAorCmRpZmYgLS1naXQgYS90ZXN0aW5nL1JVTlRFU1RTIGIvdGVzdGluZy9SVU5URVNUUwppbmRleCBmNmRjNmE2Li40OTMzMzA3IDEwMDc1NQotLS0gYS90ZXN0aW5nL1JVTlRFU1RTCisrKyBiL3Rlc3RpbmcvUlVOVEVTVFMKQEAgLTEsMzk5ICsxLDQ5IEBACiAjIS9iaW4vc2gKLSMKLSMgUlVOVEVTVFMgWy1oXS4uLgotIwotIyBSRVRVUk5TOglOdW1iZXIgb2YgZmFpbGVkIHRlc3RzLgotIwotIyBDQUxMUzogZXZhbF9vbmVwcm9ncmFtLnNoIFstaF1bLWxrXSA8cHJvZ3JhbT4KLSMKLSMKIAotIwotIyBTdWdnZXN0ZWQgaW1wcm92ZW1lbnQocyk6Ci0jCVJ1biBhIGdpdmVuIHRlc3QgYWdhaW5zdCBhIHJ1bm5pbmcgYWdlbnQuCi0jCi0jIFZhcmlhYmxlczogICgqID0gZXhwb3J0ZWQpCi0jICAqU05NUF9CQVNFRElSOiAgCSAgdGhlIHNvdXJjZSBiYXNlIGRpcmVjdG9yeSBmb3IgdGVzdHMKLSMgICpTTk1QX1VQRElSOiAgCSAgZGlyZWN0b3J5IGFib3ZlIHdoZXJlIHRoZSB0ZXN0IGJpbmFyaWVzIGxpdmUgKC1EIG9wdGlvbikKLSMgICpTTk1QX1BBVEgJIyMgeWVzLCBQQVRIIGlzIGFscmVhZHkgc2V0dXAKLSMgICpTTk1QX1ZFUkJPU0UJIyMgMD1zaWxlbnQsIDE9d2FybmluZ3MsIDI9bW9yZQorc3JjZGlyPWBkaXJuYW1lICQwYAorc3JjZGlyPWBjZCAkc3JjZGlyOyBwd2RgCitzcmNkaXI9YGRpcm5hbWUgJHNyY2RpcmAKIAotIyBVc2FnZSBtZXNzLiAgKE5vLCBpdCB3b3Jrcy4pCi0jCi0KLXVzYWdlKCkgeyAKLSAgICBjYXQgPDwgQkxJSwotCi1Vc2FnZTogYGJhc2VuYW1lICQwYCBbLWFdIFstUyBTTEVFUFRJTUVdIFstaF0gWy1pXSBbLXZdIFstVl0gWy1zXSBbLVhNXQotICAgICAgIFstVCBURVNUTlVNU10gWy1EIGJpbmRpcl0gWy1TIHNlY29uZHNdIFstUCA8dWRwfHRjcHx1ZHA2fHRjcDZ8dW5peD5dCi0KLSAgLWEgICAgICAgIHJ1biBhbGwgdGVzdHMuCi0gIC1UIE5VTVMgICBydW4gcGFydGljdWxhciB0ZXN0cyAoY29tbWFuZCBzZXBhcmF0ZWQgbGlzdCBvZiBudW1iZXJzKQotICAtaSAgICAgICAgcnVuIGludGVyYWN0aXZlbHkKLSAgLXYgICAgICAgIGJlIHZlcmJvc2UKLSAgLVYgICAgICAgIGJlIHZlcnkgdmVyYm9zZQotICAtUyBUSU1FICAgVElNRSBzaG91bGQgYmUgdXNlZCBhcyB0aGUgdGltZW91dCB3aGVuIHdhaXRpbmcgZm9yIGEKLSAgICAgICAgICAgIHJlc3BvbnNlIGZyb20gdGhlIGFnZW50LgotICAtQSBGTEFHUyAgRXh0cmEgZmxhZ3MgdG8gcGFzcyB0byB0aGUgYWdlbnQuCi0gIC10IEZMQUdTICBFeHRyYSBmbGFncyB0byBwYXNzIHRvIHRoZSB0cmFwZC4KLSAgLXMgICAgICAgIERvbid0IGVyYXNlIHRoZSBydW50aW1lIGRhdGEgZGlyZWN0b3J5IGZvciBzdWNjZXNzZnVsIHRlc3RzCi0gIC1YTSAgICAgICBEb24ndCBzZXQgTUlCRElSUyBlbnZpcm9ubWVudCB1bmxlc3MgYWJzb2x1dGVseSBuZWNlc3NhcnkKLSAgLXggICAgICAgIFR1cm4gb24gU0ggb3V0cHV0IGRlYnVnZ2luZyBmb3IgdGVzdHMuCi0gIC1QIFRSQU5TICBTcGVjaWZ5IG9uIHdoaWNoIHRyYW5zcG9ydCBkb21haW4gdG8gcnVuIHRoZSB0ZXN0cy5EZWZhdWx0IGlzIHVkcC4KLSAgLXAgcHJlZml4IFNwZWNpZnkgdGVzdCBjYXNlIHByZWZpeC4gT3B0aW9ucyBhcmUgW1R8Vl0uIERlZmF1bHQgaXMgVAotCi1CTElLCi0gICAgZXhpdCAwCi19Ci0KLXRyYXAgImV4aXQgMTsiIDEgMiAzIDkgMTMgMTUKLQotU05NUF9CQVNFRElSPWBkaXJuYW1lICQwYAotU05NUF9QUkVGRVJfTkVBUl9NSUJTPTEJIyMgcHJlZmVyIE1JQiBmaWxlcyBmb3VuZCBpbiBzb3VyY2UgaGllcmFyY2h5Ci1leHBvcnQgU05NUF9QUkVGRVJfTkVBUl9NSUJTCi1TTk1QX1RFU1RfUFJFRklYPSR7U05NUF9URVNUX1BSRUZJWDo9VH0KLWV4cG9ydCBTTk1QX1RFU1RfUFJFRklYCi0KLSMjIyBDaGVjayBmb3IgdGhlIGNvbmZpZ3VyYXRpb24gc2NyaXB0LgotIyNpZiBbICEgLXMgIiR7U05NUF9CQVNFRElSfS9URVNUQ09ORi5zaCIgIF0gOyB0aGVuIAotIyMgIGVjaG8gIk5vIFRFU1RDT05GLnNoIGluIFwiJFNOTVBfQkFTRURJUlwiIDsgZXhpdGluZyIKLSMjICBleGl0IDAKLSMjZmkKLQotT1JJR0RJUj1gcHdkYAkJIyMgdGhpcyBzY3JpcHQgbWF5IGJlIGludm9rZWQgd2l0aCByZWxhdGl2ZSBwYXRoCi1TTk1QX1VQRElSPS4uCQkjIyBidWlsZGluZyBmcm9tIHRoZSBzb3VyY2UgdHJlZQotaW50ZXJhY3RpdmU9bm8KLVNOTVBfVkVSQk9TRT0ke1NOTVBfVkVSQk9TRTo9MH0KLVNOTVBfU0xFRVA9JHtTTk1QX1NMRUVQOj0xfSAJIyMgZGVmYXVsdCBzZWNvbmRzIHRvIHNsZWVwCi1TSF9ERUJVRz0wCi1VU0VfVEVTVF9OVU1TPTAKLQotd2hpbGUgWyAtbiAiJDEiIF07IGRvCi0gICAgY2FzZSAiJDEiIGluCi0JLWgpCi0JICAgIHVzYWdlCi0JICAgIGV4aXQKLQkgICAgOzsKLQotCS1pKQotCSAgICBpbnRlcmFjdGl2ZT0ieWVzIgotCSAgICA7OwotCS12KQotCSAgICBTTk1QX1ZFUkJPU0U9MQotCSAgICA7OwotCS1WKQotCSAgICBTTk1QX1ZFUkJPU0U9MgotCSAgICA7OwotCS1zKQotCSAgICBTTk1QX1NBVkVfVE1QRElSPSJ5ZXMiCi0JICAgIGV4cG9ydCBTTk1QX1NBVkVfVE1QRElSCi0JICAgIDs7Ci0JLUQpCi0JICAgIHNoaWZ0Ci0JICAgIFNOTVBfVVBESVI9IiQxIgotCSAgICA7OwotCS1wKQotCSAgICBzaGlmdAotCSAgICBTTk1QX1RFU1RfUFJFRklYPSIkMSIKLQkgICAgOzsKLQktUCkKLQkJc2hpZnQKLQkJU05NUF9UUkFOU1BPUlRfU1BFQz0iJDEiCi0JCWV4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCi0JCWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgotCQkJU05NUF9TTk1QRF9QT1JUPSIvdmFyL3RtcC91bml4c25tcGQiCi0JCQlTTk1QX1NOTVBUUkFQRF9QT1JUPSIvdmFyL3RtcC91bml4c25tcHRyYXBkIgotCQkJU05NUF9URVNUX0RFU1Q9IiIKLQkJCWV4cG9ydCBTTk1QX1NOTVBEX1BPUlQKLQkJCWV4cG9ydCBTTk1QX1NOTVBUUkFQRF9QT1JUCi0JCQlleHBvcnQgU05NUF9URVNUX0RFU1QKLQkJZmkKLQkJOzsKLQktVCkKLQkgICAgc2hpZnQKLQkgICAgdGVzdF9udW1zPWBlY2hvICQxIHwgc2VkICdzLywvIC9nJ2AKLQkgICAgOzsKLQktYSkKLQkgICAgdGVzdF9udW1zPSJhbGwiCi0JICAgIDs7Ci0KLQktQSkKLQkgICAgc2hpZnQKLQkgICAgQUdFTlRfRkxBR1M9IiQxIgotCSAgICBleHBvcnQgQUdFTlRfRkxBR1MKLQkgICAgOzsKLQktUykKLQkgICAgc2hpZnQKLQkgICAgU05NUF9TTEVFUD0iJDEiCi0JICAgIDs7Ci0JLXQpCi0JICAgIHNoaWZ0Ci0JICAgIFRSQVBEX0ZMQUdTPSIkMSIKLQkgICAgZXhwb3J0IFRSQVBEX0ZMQUdTCi0JICAgIDs7Ci0KLQkteCkKLQkgICAgU0hfREVCVUc9MQotCSAgICA7OwotCi0JLVhNKQotCSAgICBTTk1QX1BSRUZFUl9ORUFSX01JQlM9MAotCSAgICA7OwotCi0JLW4pCi0JICAgIFVTRV9URVNUX05VTVM9MQotCSAgICA7OwotICAgIGVzYWMKLQotICAgIHNoaWZ0Ci1kb25lCi0KLWV4cG9ydCBTTk1QX1NMRUVQCisjIHNldCB1cCBNSUJESVJTIHRvIHJlZmVyIHRvIHRoZSBzcmMgZGlyZWN0b3J5CitpZiBbICJ4JE1JQkRJUlMiID0gIngiIF07IHRoZW4KKyAgICBNSUJESVJTPSR7c3JjZGlyfS9taWJzCisgICAgZXhwb3J0IE1JQkRJUlMKK2ZpCiAKICMgTWFrZSBzdXJlIE1pbkdXIC8gTVNZUyB1c2VycyBoYXZlIHRoZSBwc2tpbGwuZXhlIHByb2dyYW0gdG8gc3RvcCB0aGUgYWdlbnQgYW5kCiAjIHNubXB0cmFwZAotaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiAtYSAieGB3aGljaCBwc2tpbGwuZXhlIDI+L2Rldi9udWxsYCIgPSAieCIgXTsgdGhlbgotICAgIGVjaG8gIkNvdWxkIG5vdCBmaW5kIHBza2lsbC5leGUuIEFib3J0aW5nIHRlc3RzLiIKLSAgICBlY2hvICJwc2tpbGwuZXhlIGNhbiBiZSBpbnN0YWxsZWQgYXMgZm9sbG93czoiCi0gICAgZWNobyAiLSBEb3dubG9hZCBwc2tpbGwuZXhlIGZyb20gaHR0cDovL3RlY2huZXQubWljcm9zb2Z0LmNvbS9lbi11cy9zeXNpbnRlcm5hbHMvZGVmYXVsdC5hc3B4LiIKLSAgICBlY2hvICItIENvcHkgcHNraWxsLmV4ZSB0byBDOlxcTWluR1dcXG1zeXNcXDEuMFxcYmluLiIKLSAgICBleGl0IDEKLWZpIAotCi0jIEZpbmQgZXhlY3V0YWJsZXMgaW4gc291cmNlIGZpcnN0LCB0aGVuIGJ1aWxkLCB0aGVuIGV4aXN0aW5nIFBBVEguCi0jIyBBZGQgdG8gUEFUSCBpZiBhIGJpbmFyeSBpcyBmb3VuZC4KLQotY2QgJFNOTVBfVVBESVIKLVNOTVBfVVBESVI9YHB3ZGAKLWJmPXNubXBnZXQKLWlmIFsgLXggIiRiZiIgXSA7IHRoZW4KLSAgIFBBVEg9JFNOTVBfVVBESVI6JFBBVEgKLWVsc2UKLSAgZm9yIGRkIGluIGFwcHMgYmluIDsgZG8KLSAgIGJmPSRkZC9zbm1wZ2V0Ci0gICBpZiBbIC14ICIkYmYiIF0gOyB0aGVuCi0gICAgICBQQVRIPSRTTk1QX1VQRElSLyRkZDokUEFUSAotICAgICAgYnJlYWsKLSAgIGZpCi0gIGRvbmUKK2lmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgIGZvciBlIGluIHBza2lsbC5leGUgcHNsaXN0LmV4ZTsgZG8KKwlpZiBbICJ4YHR5cGUgJGUgMj4vZGV2L251bGxgIiA9ICJ4IiBdOyB0aGVuCisJICAgIGVjaG8gIkNvdWxkIG5vdCBmaW5kICRlLiBBYm9ydGluZyB0ZXN0cy4iCisJICAgIGVjaG8gIiRlIGNhbiBiZSBpbnN0YWxsZWQgYXMgZm9sbG93czoiCisJICAgIGVjaG8gIi0gRG93bmxvYWQgUFNUb29scy56aXAgZnJvbSBodHRwOi8vdGVjaG5ldC5taWNyb3NvZnQuY29tL2VuLXVzL3N5c2ludGVybmFscy9kZWZhdWx0LiIKKwkgICAgZWNobyAiLSBDb3B5ICRlIHRvIEM6XFxNaW5HV1xcbXN5c1xcMS4wXFxiaW4uIgorCSAgICBleGl0IDEKKwlmaQorICAgIGRvbmUKIGZpCi1mb3IgZGQgaW4gYWdlbnQgYmluIHNiaW4gOyBkbwotICAgYmY9JGRkL3NubXBkCi0gICBpZiBbIC14ICIkYmYiIF0gOyB0aGVuCi0gICAgICBQQVRIPSRTTk1QX1VQRElSLyRkZDokUEFUSAotICAgICAgYnJlYWsKLSAgIGZpCi1kb25lCi0KLWJmPWluY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKLWlmIFsgISAtcyAiJGJmIiBdIDsgdGhlbgotICAgZWNobyAiTm8gXCIkYmZcIiBpbiAkU05NUF9VUERJUiAuIFNvbWUgdGVzdHMgd2lsbCBiZSBza2lwcGVkIgotZmkKLXVuc2V0IGJmCi0KLSMgUnVuIGZyb20gdGhlIHRlc3Qgc2NyaXB0cyBkaXJlY3RvcnkuCi1jZCAkT1JJR0RJUiA7IGNkICR7U05NUF9CQVNFRElSfQotU05NUF9CQVNFRElSPWBwd2RgCi0KLSMgU2V0dXAgZm9yIHRoZSBuZXh0IHRlc3QgcnVuLgotcm0gLWYgY29yZSB0ZXN0cy9jb3JlCi0KLVBBVEg9JHtTTk1QX0JBU0VESVJ9OiRQQVRICi1TTk1QX1BBVEg9eWVzCi0KLWV4cG9ydCBQQVRICi1leHBvcnQgU05NUF9CQVNFRElSCi1leHBvcnQgU05NUF9QQVRICi1leHBvcnQgU05NUF9VUERJUgotZXhwb3J0IFNOTVBfVkVSQk9TRQotCi1XSElDSD13aGljaAotJFdISUNIICQwID4gL2Rldi9udWxsIDI+JjEKLWlmIFsgJD8gLW5lIDAgXSA7IHRoZW4KLSAgICBXSElDSD10eXBlCi1maQotCi1mb3IgbmVlZGVkIGluIHNubXBkIHNubXBnZXQgc25tcGdldG5leHQ7IGRvCi0gICAgJFdISUNIICRuZWVkZWQgPiAvZGV2L251bGwgMj4mMQotICAgIGlmIFsgJD8gLW5lIDAgIF0gOyB0aGVuIAotICAgICAgICBlY2hvICJObyAkbmVlZGVkIGZvdW5kLiBFeGl0aW5nIgotICAgICAgICBleGl0IDEKLSAgICBmaQotZG9uZQotCi0jCi0jIERpc3Rpbmd1aXNoZWQgZXhwZWN0YXRpb25zLgotIwotaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KLSAgICBlY2hvICR7U05NUF9VUERJUn0vdGVzdGluZwotICAgIGVjaG8gcGF0aCBpcyAkUEFUSAotICAgIGVjaG8gdG9wIG9mIGJ1aWxkIGlzICRTTk1QX1VQRElSCi0gICAgZWNobyBzb3VyY2UgdGVzdGluZyBpcyAkU05NUF9CQVNFRElSCi0gICAgJFdISUNIIHNubXB1c20KLWZpCi0KLSMKLSMgU291cmNlIHRoZSB0ZXN0aW5nIGNvbmZpZ3VyYXRpb24gZmlsZQotIwotCi0uIFRFU1RDT05GLnNoCi0KLSMgSGFjazogdGhlIGFib3ZlIGNyZWF0ZWQgYSBkaXJlY3RvcnksIG5vdyB3ZSBoYXZlIHRvIG51a2UgaXQgYW5kCi0jIGZvcmdldCBhYm91dCBpdC4uLiAgQWxsIGZvciB0aGUgY29udmVuaWVuY2Ugb2YgdGhlIHRlc3Qgd3JpdGVyLgotcm0gLWZSICRTTk1QX1RNUERJUgotdW5zZXQgU05NUF9UTVBESVIKLWV4cG9ydCBTTk1QX1RNUERJUgotCi1pZiBbICJ4JFNOTVBfUFJFRkVSX05FQVJfTUlCUyIgPSAieDAiIF07IHRoZW4KLSAgICAjIHRyeSB0aGUgY29tcGlsZWQgTUlCRElSUyBkaXJlY3RvcnkgZmlyc3QuCi0gICAgIyBpZiBNSUIgZmlsZXMgYXJlIG5vdCBmb3VuZCwgZmFsbGJhY2sgdG8gdGhlIHNvdXJjZSBiYXNlCi0KLSAgICBzbm1wdHJhbnNsYXRlIC1PbiAtSVIgc3lzRGVzY3IgPiAvZGV2L251bGwgMj4mMQotICAgIGlmIFsgJD8gLW5lIDAgXSA7IHRoZW4KLSAgICAgICAgaWYgWyAieCRNSUJESVJTIiA9ICJ4IiBdOyB0aGVuCi0gICAgCU1JQkRJUlM9JHtTTk1QX0JBU0VESVJ9Ly4uL21pYnMKLSAgICAJZXhwb3J0IE1JQkRJUlMKLSAgICAgICAgZmkKLSAgICBmaQotICAgIHNubXB0cmFuc2xhdGUgLU9uIC1JUiBzeXNEZXNjciA+IC9kZXYvbnVsbCAyPiYxCi0gICAgaWYgWyAkPyAtbmUgMCBdIDsgdGhlbgotICAgICAgICBlY2hvICJDb3VsZCBub3QgcmVzb2x2ZSBzeXNEZXNjciBpbiAkTUlCRElSUy4gRXhpdGluZyIKLSAgICAgICAgZXhpdCAxCi0gICAgZmkKLWZpICMjIFNOTVBfUFJFRkVSX05FQVJfTUlCUwotCi0jCi0jIFN3aXRjaCB0byB0aGUgdGVzdGluZyBkaXJlY3RvcnksIGZvciBlYXNlIG9mIHRoZSBjbGllbnQgdGVzdCBwYWNrYWdlcy4KLSMKLWNkIC4vdGVzdHMKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIEdsb2JhbHMuCi0jCi1QUk9HUkFNPQotQVJHVU1FTlRTPSIkKiIKLQotVE1QRklMRT0kU05NUF9UTVBESVIvZXZhbF9zdWl0ZS5zaCQkCi0KLXRlc3RuYW1lPQogCiBzdWNjZXNzX2NvdW50PTAKIGZhaWxlZF9jb3VudD0wCi0KLWlmIFsgIngkZG9fdGVzdHMiID0gIngiIF07IHRoZW4KLSAgICAjCi0gICAgIyBMaXN0IHRoZSB0ZXN0cyBpbiBxdWVzdGlvbgotICAgICMKLSAgICBudW09MAotICAgIGZvciB0ZXN0ZmlsZSBpbiAkU05NUF9URVNUX1BSRUZJWCo7IGRvCi0JY2FzZSAkdGVzdGZpbGUgaW4KLQkgICAgIyBTa2lwIGJhY2t1cCBmaWxlcywgYW5kIHRoZSBsaWtlLgotCSAgICAqfikgICAgIDs7Ci0JICAgICouYmFrKSAgOzsKLQkgICAgKi5vcmlnKSA7OwotCSAgICAqLnJlaikgIDs7Ci0KLQkgICAgIyBEbyB0aGUgcmVzdAotCSAgICAqKQotCQludW09YGV4cHIgJG51bSArIDFgCi0JCWlmIFsgIngkaW50ZXJhY3RpdmUiICE9ICJ4eWVzIiAtYSAieCR0ZXN0X251bXMiID0gIngiIF07IHRoZW4KLQkJICAgIGV2YWxfb25lc2NyaXB0LnNoICR0ZXN0ZmlsZSAkbnVtICJ5ZXMiCi0JCWZpCi0JCWFsbF90ZXN0cz0iJGFsbF90ZXN0cyAkbnVtIgotCQlhbGxfZmlsZXM9IiRhbGxfZmlsZXMgJHRlc3RmaWxlIgotCQk7OwotCWVzYWMKLSAgICBkb25lCi0KLSAgICAjCi0gICAgIyBUT0RPOiBhbGxvdyB1c2VyIHRvIGludGVyYWN0aXZlbHkgcGljayB0aGUgbGlzdCBvZiB0ZXN0cyB0byBydW4uCi0gICAgIwotCi0gICAgaWYgWyAieCRpbnRlcmFjdGl2ZSIgIT0gInh5ZXMiIF07IHRoZW4KLQlpZiBbICJ4JHRlc3RfbnVtcyIgPSAieCIgXTsgdGhlbgotCSAgICBFQ0hPICJFbnRlciB0ZXN0IG51bWJlcnMgW2FsbF06ICIKLQkgICAgcmVhZCBpbnAKLQllbHNlCi0JICAgIGlmIFsgIngkdGVzdF9udW1zIiA9ICJ4YWxsIiBdOyB0aGVuCi0JCWlucD0iIgotCSAgICBlbHNlCi0JCWlucD0iJHRlc3RfbnVtcyIKLQkgICAgZmkKLQlmaQotCWlmIFsgIngkaW5wIiA9ICJ4IiBdOyB0aGVuCi0JICAgIGRvX3Rlc3RzPSIkYWxsX2ZpbGVzIgotCWVsc2UKLQkgICAgYT0xCi0JICAgIHNldCAkYWxsX2ZpbGVzCi0JICAgIHdoaWxlIFsgJGEgLWxlICRudW0gXTsgZG8KLQkJaWYgZWNobyAiICRpbnAgIiB8IGdyZXAgIiAkYSAiID4gL2Rldi9udWxsOyB0aGVuCi0JCSAgICBkb190ZXN0cz0iJGRvX3Rlc3RzICQxIgotCQkgICAgaWYgWyAieCR0ZXN0X251bXMiID0gIngiIF0gOyB0aGVuCi0JCQl0ZXN0X251bXM9JGEKLQkJICAgIGZpCi0JCWZpCi0JCXNoaWZ0Ci0JCWE9YGV4cHIgJGEgKyAxYAotCSAgICBkb25lCi0JZmkKLSAgICBmaQotCi0gICAgI2VjaG8gU3RhcnRpbmc6IFJ1bm5pbmcgdGVzdHMgJGRvX3Rlc3RzCi1maQotCi0jCi0jIFJ1biB0aGUgdGVzdHMKLSMKLWlmIFsgIngkdGVzdF9udW1zIiA9ICJ4YWxsIiAtbyAieCR0ZXN0X251bXMiID0gIngiIF0gOyB0aGVuCi0gICAgbnVtPTEKLWVsc2UKLSAgICBudW09IiR0ZXN0X251bXMiCi1maQotY250cj0wCi1mb3IgdGVzdGZpbGUgaW4gJGRvX3Rlc3RzOyBkbwotICAgIGRvdGhpc29uZT0ieWVzIgotICAgIGlmIFsgJFVTRV9URVNUX05VTVMgPSAxIF0gOyB0aGVuCi0JbnVtPWBlY2hvICR0ZXN0ZmlsZSB8IHNlZCAtZSAncy9eVC8vO3MvW2EtekEtWl0uKi8vOydgCitybSAtZiBmYWlsZWRfdGVzdHMKK2ZvciBpIGluICIke3NyY2Rpcn0iL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVCokMSo7IGRvCisgICAgZWNobyAiUlVOTklORyAkaSIKKyAgICAke3NyY2Rpcn0vdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuICRpCisgICAgaWYgWyAkPyA9IDAgXTsgdGhlbgorICAgICAgICBzdWNjZXNzX2NvdW50PWBleHByICRzdWNjZXNzX2NvdW50ICsgMWAKICAgICBlbHNlCi0gICAgICAgIGlkX3g9MAotICAgICAgICBmb3IgaXRlc3QgaW4gJGlucDsgZG8KLSAgICAgICAgICAgIGlmIFsgIiRjbnRyIiA9ICIkaWRfeCIgXSA7IHRoZW4KLSAgICAgICAgICAgICAgICBudW09IiRpdGVzdCIKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBpZF94PWBleHByICRpZF94ICsgMWAKLSAgICAgICAgZG9uZQorICAgICAgICBmYWlsZWRfY291bnQ9YGV4cHIgJGZhaWxlZF9jb3VudCArIDFgCisgICAgICAgIGVjaG8gIiRpIiA+PiBmYWlsZWRfdGVzdHMKICAgICBmaQotICAgIGlmIFsgIngkaW50ZXJhY3RpdmUiID0gInh5ZXMiIF07IHRoZW4KLQotICAgICAgICBpZiBbICRTSF9ERUJVRyA9IDEgXSA7IHRoZW4KLQkgICAgc2ggLXggIiR7U05NUF9CQVNFRElSfS9ldmFsX29uZXNjcmlwdC5zaCIgJHRlc3RmaWxlICRudW0gInllcyIKLQllbHNlCi0JICAgIGV2YWxfb25lc2NyaXB0LnNoICR0ZXN0ZmlsZSAkbnVtICJ5ZXMiCi0JZmkKLQotCUVDSE8gIiAgUnVuIHRlc3QgIyRudW0gKHkvbikgW3ldPyAiCi0JcmVhZCBpbnAyCi0JaWYgWyAieCRpbnAyIiA9ICJ4biIgXTsgdGhlbgotCSAgICBkb3RoaXNvbmU9bm8KLQlmaQotICAgIGZpCi0gIAotICAgIGlmIFsgIngkZG90aGlzb25lIiA9ICJ4eWVzIiBdOyB0aGVuCi0gICAgICAgIGlmIFsgJFNIX0RFQlVHID0gMSBdIDsgdGhlbgotCSAgICBzaCAteCAiJHtTTk1QX0JBU0VESVJ9L2V2YWxfb25lc2NyaXB0LnNoIiAkdGVzdGZpbGUgJG51bSAibm8iCi0JZWxzZQotCSAgICBldmFsX29uZXNjcmlwdC5zaCAkdGVzdGZpbGUgJG51bSAibm8iCi0JZmkKLQlpZiBbICQ/ID0gMCBdOyB0aGVuCi0JICAgIHN1Y2Nlc3NfY291bnQ9YGV4cHIgJHN1Y2Nlc3NfY291bnQgKyAxYAotCWVsc2UKLQkgICAgZmFpbGVkX2NvdW50PWBleHByICRmYWlsZWRfY291bnQgKyAxYAotCWZpCi0gICAgZmkKLSAgICBudW09YGV4cHIgJG51bSArIDFgCi0gICAgY250cj1gZXhwciAkY250ciArIDFgCiBkb25lCiAKK2lmIFsgLWYgZmFpbGVkX3Rlc3RzIF07IHRoZW4KKyAgICBlY2hvCisgICAgZWNobyBGYWlsZWQgdGVzdHM6CisgICAgY2F0IGZhaWxlZF90ZXN0cworZmkKK2VjaG8KIGVjaG8gU3VtbWFyeTogJHN1Y2Nlc3NfY291bnQgLyBgZXhwciAkZmFpbGVkX2NvdW50ICsgJHN1Y2Nlc3NfY291bnRgIHN1Y2NlZWRlZC4KIAogZXhpdCAkZmFpbGVkX2NvdW50CmRpZmYgLS1naXQgYS90ZXN0aW5nL1QuYyBiL3Rlc3RpbmcvVC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkYTQ4M2ExLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvVC5jCisrKyAvZGV2L251bGwKQEAgLTEsMTgyICswLDAgQEAKLS8qCi0gKiBULmMKLSAqCi0gKiBFeHBlY3RlZCBTVUNDRVNTZXMgZm9yIGFsbCB0ZXN0czogICAgRklYIFsrIEZJWCAuLi5dCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKExpc3QgbnVtYmVyIG9mIGxpbmVzIGNvbnRhaW5pbmcgdGhlCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyAiU1VDQ0VTUyIgdGhhdCBhcmUgZXhwZWN0ZWQKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gYmUgcHJpbnRlZCB0byBzdGRvdXQuKQotICoKLSAqIFJldHVybnM6Ci0gKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KLSAqCi0gKiBGSVggIFNob3J0IHRlc3QgZGVzY3JpcHRpb24vdGFibGUgb2YgY29udGVudHMuICAgICAgIFNVQ0NFU1NlczogRklYCi0gKi8KLQotI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3RkaW8uaD4KLSNpZmRlZiBIQVZFX1NURExJQl9ICi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0jZW5kaWYKLQotLyoKLSAqICNpbmNsdWRlIC4uLiAKLSAqLwotCi1leHRlcm4gY2hhciAgICAqb3B0YXJnOwotZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7Ci0KLQotCi0vKgotICogR2xvYmFscywgJmMuLi4KLSAqLwotY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOwotCi0jZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstYVNdIgotI2RlZmluZSBPUFRJT05MSVNUCSJhaFMiCi0KLWludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9zb21ldGhpbmcgPSAwOwotCi0jZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb3NvbWV0aGluZykKLQotCi0KLSNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKLSNkZWZpbmUgTkwJCSJcbiIKLQotI2RlZmluZSBPVVRQVVQobykJZnByaW50ZihzdGRvdXQsICJcblxuJXNcblxuIiwgbyk7Ci0KLSNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKCFmYWlsY291bnQpCQkJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5TVUNDRVNTOiAlc1xuIiwgcyk7CVwKLX0KLQotI2RlZmluZSBGQUlMRUQoZSwgZikJCQkJCVwKLXsJCQkJCQkJXAotCWlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUykgewkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcbkZBSUxFRDogJXNcbiIsIGYpOwlcCi0JCWZhaWxjb3VudCArPSAxOwkJCQlcCi0JfQkJCQkJCVwKLX0KLQotCi0KLQotCi0vKgotICogUHJvdG90eXBlcy4KLSAqLwotdm9pZCAgICAgICAgICAgIHVzYWdlKEZJTEUgKiBvZnApOwotCi1pbnQgICAgICAgICAgICAgdGVzdF9kb3NvbWV0aGluZyh2b2lkKTsKLQotCi0KLQotaW50Ci1tYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLSAgICBjaGFyICAgICAgICAgICAgY2g7Ci0KLSAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07Ci0KLSAgICBFTSgtMSk7ICAgICAgICAgICAgICAgICAgICAgLyogKi8KLQotICAgIC8qCi0gICAgICogUGFyc2UuCi0gICAgICovCi0gICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgY2FzZSAnYSc6Ci0gICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdTJzoKLSAgICAgICAgICAgIGRvc29tZXRoaW5nID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIHJ2YWwgPSAwOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgICAgIGV4aXQocnZhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgaWYgKG9wdGFyZykgewotICAgICAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICAgICAgYXJndiArPSAxOwotICAgICAgICAgICAgb3B0YXJnID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBvcHRpbmQgPSAxOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KLQotICAgIGlmICgoYXJnYyA+IDEpKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0KLSAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBUZXN0IHN0dWZmLgotICAgICAqLwotICAgIGlmIChkb3NvbWV0aGluZyB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2Rvc29tZXRoaW5nKCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIENsZWFudXAuCi0gICAgICovCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCi0KLQotCi0KLQotdm9pZAotdXNhZ2UoRklMRSAqIG9mcCkKLXsKLSAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAgICAgIFVTQUdFCi0gICAgICAgICAgICAiIiBOTAotICAgICAgICAgICAgIgktYQkJQWxsIHRlc3RzLiIgTkwKLSAgICAgICAgICAgICIJLVMJCVRlc3Qgc29tZXRoaW5nLiIgTkwKLSAgICAgICAgICAgICIJLWgJCUhlbHAuIiBOTCAiIiBOTCwgbG9jYWxfcHJvZ25hbWUpOwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCi0KLQotCi0KLSNpZmRlZiBFWEFNUExFCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2Rvc29tZXRoaW5nCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKgotICogVGVzdCB0ZW1wbGF0ZS4KLSAqLwotaW50Ci10ZXN0X2Rvc29tZXRoaW5nKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0KLSAgICBFTTAoMSwgIlVOSU1QTEVNRU5URUQiKTsgICAgLyogRU0oMSk7IC8qICovCi0KLSAgdGVzdF9kb3NvbWV0aGluZ19xdWl0OgotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9zb21ldGhpbmcoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9UMi5zaCBiL3Rlc3RpbmcvVDIuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGQwYTUxYTguLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9UMi5zaAorKysgL2Rldi9udWxsCkBAIC0xLDMyICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBULnNoCi0jCi0jIEZJWCAgU2hvcnQgZGVzY3JpcHRpb24uCi0jCi0KLS4gZXZhbF90b29scy5zaAotCi1IRUFERVIgYSBzaG9ydCBkZXNjcmlwdGlvbiBvZiB5b3VyIHRlc3QKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIFRlc3QuCi0jCi0KLSMgU3RhcnQgdGhlIGFnZW50IGlmIG5lZWRlZCAobWFrZSBzdXJlIGl0IHN0b3AgaXQgYmVsb3cpCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgIjxleGVjdXRhYmxlX3dpdGhfYXJndW1lbnRzOl9zdG9yZXNfc3Rkb3V0L3N0ZGVycl9mb3JfdXNlX2xhdGVyPiIKLQotQ0hFQ0tFWEFDVCAiPHN0cmluZ190b19sb29rX2Zvcl9hbl9leGFjdF9tYXRjaF9vZl9pbl90aGVfQ0FQVFVSRWRfZmlsZV9vdXRwdXQ+IgotWyAkPyAtZXEgMSBdCi1GQUlMRUQgJD8gIjxkaWFnbm9zdGljX2xhYmVsPiIKLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIENsZWFudXAsIGV4aXQuCi0jCi0KLSMgU3RvcCB0aGUgYWdlbnQgaWYgbmVjZXNzYXJ5Ci1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvVEVTVENPTkYuc2ggYi90ZXN0aW5nL1RFU1RDT05GLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBkNThlZmZkLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvVEVTVENPTkYuc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxODMgKzAsMCBAQAotIyEgL2Jpbi9zaCAtZgotCi0jCi0jIFZhcmlhYmxlczogICgqID0gZXhwb3J0ZWQpCi0jICAqU05NUF9UTVBESVI6ICAJICBwbGFjZSB0byBwdXQgZmlsZXMgdXNlZCBpbiB0ZXN0aW5nLgotIyAgIFNOTVBfVEVTVERJUjogCSAgd2hlcmUgdGhlIHRlc3Qgc2NyaXB0cyBhcmUga2VwdC4KLSMgICpTTk1QX1BFUlNJU1RFTlRfRklMRTogd2hlcmUgdG8gc3RvcmUgdGhlIGFnZW50J3MgcGVyc2lzdGVudCBpbmZvcm1hdGlvbgotIyAgICAgICAgICAgICAgICAgICAgICAgICAoWFhYOiB0aGlzIHNob3VsZCBiZSBzcGVjaWZpYyB0byBqdXN0IHRoZSBhZ2VudCkKLQotIwotIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKLSMKLWlmIFsgIngkVEVTVENPTkZfU0hfRVZBTEVEIiAhPSAieHllcyIgXTsgdGhlbgotICAgIFRFU1RDT05GX1NIX0VWQUxFRD15ZXMKLQotIwotIyBzZXQgY3B1IGFuZCBtZW1vcnkgbGltaXRzIHRvIHByZXZlbnQgbWFqb3IgZGFtYWdlCi0jCi0jIGRlZmF1bHRzOiAxaCBDUFUsIDUwME1CIFZNRU0KLSMKLVsgIngkU05NUF9MSU1JVF9WTUVNIiA9ICJ4IiBdICYmIFNOTVBfTElNSVRfVk1FTT01MTIwMDAKLVsgIngkU05NUF9MSU1JVF9DUFUiID0gIngiIF0gJiYgU05NUF9MSU1JVF9DUFU9MzYwMAotIyB1bGltaXQgd2lsbCBmYWlsIGlmIGV4aXN0aW5nIGxpbWl0IGlzIGxvd2VyIC0tIGlnbm9yZSBiZWNhdXNlIGl0J3Mgb2sKLXVsaW1pdCAtUyAtdCAkU05NUF9MSU1JVF9DUFUgMj4vZGV2L251bGwKLSMgbm90IGFsbCBzaC1hbGlrZXMgc3VwcG9ydCAidWxpbWl0IC12IiAtLSBwbGF5IHNhZmUKLVsgIngkQkFTSF9WRVJTSU9OIiAhPSAieCIgXSAmJiB1bGltaXQgLVMgLXYgJFNOTVBfTElNSVRfVk1FTSAyPi9kZXYvbnVsbAotCi0jCi0jIFNldCB1cCBhbiBOTCBzdXBwcmVzc2luZyBlY2hvIGNvbW1hbmQKLSMKLWNhc2UgImBlY2hvICd4XGMnYCIgaW4KLSAgJ3hcYycpCi0gICAgRUNITygpIHsgZWNobyAtbiAkKjsgfQotICAgIDs7Ci0gIHgpCi0gICAgRUNITygpIHsgZWNobyAkKlxcYzsgfQotICAgIDs7Ci0gICopCi0gICAgZWNobyAiSSBkb24ndCB1bmRlcnN0YW5kIHlvdXIgZWNobyBjb21tYW5kIC4uLiIKLSAgICBleGl0IDEKLSAgICA7OwotZXNhYwotIwotIyBob3cgdmVyYm9zZSBzaG91bGQgd2UgYmUgKDAgb3IgMSkKLSMKLWlmIFsgIngkU05NUF9WRVJCT1NFIiA9ICJ4IiBdOyB0aGVuCi0gICAgU05NUF9WRVJCT1NFPTAKLSAgICBleHBvcnQgU05NUF9WRVJCT1NFCi1maQotCi1pZiBbICJ4JE1JQkRJUlMiID0gIngiIF07IHRoZW4KLSAgaWYgWyAieCRTTk1QX1BSRUZFUl9ORUFSX01JQlMiID0gIngxIiBdOyB0aGVuCi0gICAgTUlCRElSUz0ke1NOTVBfQkFTRURJUn0vLi4vbWlicwotICAgIGV4cG9ydCBNSUJESVJTCi0gIGZpCi1maQotCi0jIFNldCB1cCB0aGUgcGF0aCB0byB0aGUgcHJvZ3JhbXMgd2Ugd2FudCB0byB1c2UuCi1pZiBbICJ4JFNOTVBfUEFUSCIgPSAieCIgXTsgdGhlbgotICAgIFBBVEg9Li4vYWdlbnQ6Li4vYXBwczouLi8uLi9hZ2VudDouLi8uLi9hcHBzOiRQQVRICi0gICAgZXhwb3J0IFBBVEgKLSAgICBTTk1QX1BBVEg9eWVzCi0gICAgZXhwb3J0IFNOTVBfUEFUSAotZmkKLSAgICAKLQotIyBTZXQgdXAgdGVtcG9yYXJ5IGRpcmVjdG9yeQotaWYgWyAieCRTTk1QX1RNUERJUiIgPSAieCIgLWEgIngkU05NUF9IRUFERVJPTkxZIiAhPSAieHllcyIgXTsgdGhlbgotICAgIGlmIFsgIngkdGVzdG51bSIgPSAieCIgXSA7IHRoZW4KLSAgICAgICAgdGVzdG51bT0xCi0gICAgZmkKLSAgICBTTk1QX1RNUERJUj0iL3RtcC9zbm1wLXRlc3QtJHRlc3RudW0tJCQiCi0gICAgZXhwb3J0IFNOTVBfVE1QRElSCi0gICAgaWYgWyAtZCAkU05NUF9UTVBESVIgXTsgdGhlbgotCWVjaG8gIiQwOiBFUlJPUjogJFNOTVBfVE1QRElSIGFscmVhZHkgZXhpc3RlZC4iCi0JZXhpdCAxOwotICAgIGZpCi0gICAgU05NUF9UTVBfUEVSU0lTVEVOVERJUj0kU05NUF9UTVBESVIvcGVyc2lzdAotICAgIGV4cG9ydCBTTk1QX1RNUF9QRVJTSVNURU5URElSCi0gICAgbWtkaXIgJFNOTVBfVE1QRElSCi0gICAgbWtkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLSAgICBjaG1vZCAwNzAwICRTTk1QX1RNUERJUiAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgotZmkKLQotaWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiA9ICJ4IiBdOyB0aGVuCi0gICAgU05NUF9TQVZFX1RNUERJUj0ibm8iCi0gICAgZXhwb3J0IFNOTVBfU0FWRV9UTVBESVIKLWZpCi0KLVNOTVBfSUdOT1JFX1dJTkRPV1NfUkVHSVNUUlk9InRydWUiCi1leHBvcnQgU05NUF9JR05PUkVfV0lORE9XU19SRUdJU1RSWQotU05NUF9FTlZfU0VQQVJBVE9SPSJgJFNOTVBfVVBESVIvbmV0LXNubXAtY29uZmlnIC0tZW52LXNlcGFyYXRvcmAiCi1TTk1QX1BFUkxQUk9HPSJgJFNOTVBfVVBESVIvbmV0LXNubXAtY29uZmlnIC0tcGVybHByb2dgIgotU05NUF9URVNURElSPSIkU05NUF9CQVNFRElSL3Rlc3RzIgotU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3NubXBkLmNvbmYiCi1TTk1QVFJBUERfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wdHJhcGQuY29uZiIKLUFHRU5UWF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2FnZW50eC5jb25mIgotU05NUF9TTk1QVFJBUERfTE9HX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wdHJhcGQubG9nIgotU05NUF9TTk1QVFJBUERfUElEX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wdHJhcGQucGlkIgotU05NUF9TTk1QRF9QSURfRklMRT0iJFNOTVBfVE1QRElSL3NubXBkLnBpZCIKLVNOTVBfU05NUERfTE9HX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wZC5sb2ciCi1TTk1QX0FHRU5UWF9QSURfRklMRT0iJFNOTVBfVE1QRElSL2FnZW50eC5waWQiCi1TTk1QX0FHRU5UWF9MT0dfRklMRT0iJFNOTVBfVE1QRElSL2FnZW50eC5sb2ciCi1TTk1QQ09ORlBBVEg9IiR7U05NUF9UTVBESVJ9JHtTTk1QX0VOVl9TRVBBUkFUT1J9JHtTTk1QX1RNUF9QRVJTSVNURU5URElSfSIKLWV4cG9ydCBTTk1QQ09ORlBBVEgKLVNOTVBfUEVSU0lTVEVOVF9ESVI9JFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLWV4cG9ydCBTTk1QX1BFUlNJU1RFTlRfRElSCi0jU05NUF9QRVJTSVNURU5UX0ZJTEU9IiRTTk1QX1RNUF9QRVJTSVNURU5URElSL3BlcnNpc3RlbnQtc3RvcmUuY29uZiIKLSNleHBvcnQgU05NUF9QRVJTSVNURU5UX0ZJTEUKLQotIyMgU2V0dXAgZGVmYXVsdCBmbGFncyBhbmQgcG9ydHMgaWZmIG5vdCBkb25lCi1pZiBbICJ4JFNOTVBfRkxBR1MiID0gIngiIF07IHRoZW4KLSAgICBTTk1QX0ZMQUdTPSItZCIKLWZpCi1pZiB0ZXN0IC14IC9iaW4vbmV0c3RhdCA7IHRoZW4KLSAgICBORVRTVEFUPS9iaW4vbmV0c3RhdAotZWxpZiB0ZXN0IC14IC91c3IvYmluL25ldHN0YXQgOyB0aGVuCi0gICAgTkVUU1RBVD0vdXNyL2Jpbi9uZXRzdGF0Ci1lbGlmIHRlc3QgLXggL3Vzci9zYmluL25ldHN0YXQgOyB0aGVuCi0gICAgIyBlLmcuIFRydTY0IFVuaXgKLSAgICBORVRTVEFUPS91c3Ivc2Jpbi9uZXRzdGF0Ci1lbGlmIHRlc3QgLXggL3Vzci9ldGMvbmV0c3RhdCA7IHRoZW4KLSAgICAjIGUuZy4gSVJJWAotICAgIE5FVFNUQVQ9L3Vzci9ldGMvbmV0c3RhdAotZWxpZiB0ZXN0IC14IC9jeWdkcml2ZS9jL3dpbmRvd3Mvc3lzdGVtMzIvbmV0c3RhdCA7IHRoZW4KLSAgICAjIEN5Z3dpbgotICAgIE5FVFNUQVQ9L2N5Z2RyaXZlL2Mvd2luZG93cy9zeXN0ZW0zMi9uZXRzdGF0Ci1lbGlmIHRlc3QgLXggL2MvV2luZG93cy9TeXN0ZW0zMi9uZXRzdGF0IDsgdGhlbgotICAgICMgTWluR1cgKyBNU1lTCi0gICAgTkVUU1RBVD0vYy9XaW5kb3dzL1N5c3RlbTMyL25ldHN0YXQKLWVsc2UKLSAgICBORVRTVEFUPSIiCi1maQotCi1QUk9CRV9GT1JfUE9SVCgpIHsKLSAgICBCQVNFX1BPUlQ9JDEKLSAgICBNQVhfUkVUUklFUz0xMAotICAgIGlmIHRlc3QgLXggIiRORVRTVEFUIiA7IHRoZW4KLSAgICAgICAgaWYgdGVzdCAteiAiJFJBTkRPTSI7IHRoZW4KLSAgICAgICAgICAgIFJBTkRPTT0yCi0gICAgICAgIGZpCi0gICAgICAgIHdoaWxlIDoKLSAgICAgICAgZG8KLSAgICAgICAgICAgIEJBU0VfUE9SVD1gZXhwciAkQkFTRV9QT1JUICsgXCggJFJBTkRPTSAlIDEwMCBcKWAKLSAgICAgICAgICAgIElOX1VTRT1gJE5FVFNUQVQgLWEgLW4gMj4vZGV2L251bGwgfCBncmVwICJbXC46XSRCQVNFX1BPUlQgImAKLSAgICAgICAgICAgIGlmIFsgJD8gLW5lIDAgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIiRCQVNFX1BPUlQiCi0gICAgICAgICAgICAgICAgYnJlYWsKLSAgICAgICAgICAgIGZpCi0gICAgICAgICAgICBNQVhfUkVUUklFUz1gZXhwciAkTUFYX1JFVFJJRVMgLSAxYAotICAgICAgICAgICAgaWYgWyAkTUFYX1JFVFJJRVMgLWVxIDAgXTsgdGhlbgotICAgICAgICAgICAgICAgIGVjaG8gIkVSUk9SOiBDb3VsZCBub3QgZmluZCBhdmFpbGFibGUgcG9ydC4iID4mMgotICAgICAgICAgICAgICAgIGVjaG8gIk5PUE9SVCIKLSAgICAgICAgICAgICAgICBleGl0IDI1NQotICAgICAgICAgICAgZmkKLSAgICAgICAgZG9uZQotICAgIGZpCi19Ci0KLWlmIFsgIngkU05NUF9TTk1QRF9QT1JUIiA9ICJ4IiBdOyB0aGVuCi0gICAgU05NUF9TTk1QRF9QT1JUPWBQUk9CRV9GT1JfUE9SVCA4NzY1YAotZmkKLWlmIFsgIngkU05NUF9TTk1QVFJBUERfUE9SVCIgPSAieCIgXTsgdGhlbgotICAgIFNOTVBfU05NUFRSQVBEX1BPUlQ9YFBST0JFX0ZPUl9QT1JUIDU2NzhgCi1maQotaWYgWyAieCRTTk1QX0FHRU5UWF9QT1JUIiA9ICJ4IiBdOyB0aGVuCi0gICAgU05NUF9BR0VOVFhfUE9SVD1gUFJPQkVfRk9SX1BPUlQgNzY3NmAKLWZpCi1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gIngiIF07dGhlbgotCVNOTVBfVFJBTlNQT1JUX1NQRUM9InVkcCIKLWZpCi1pZiBbICJ4JFNOTVBfVEVTVF9ERVNUIiA9ICJ4IiAtYSAkU05NUF9UUkFOU1BPUlRfU1BFQyAhPSAidW5peCIgXTt0aGVuCi0JU05NUF9URVNUX0RFU1Q9ImxvY2FsaG9zdDoiCi1maQotZXhwb3J0IFNOTVBfRkxBR1MgU05NUF9TTk1QRF9QT1JUIFNOTVBfU05NUFRSQVBEX1BPUlQKLQotIyBNYWtlIHN1cmUgdGhlIGFnZW50IGRvZXNuJ3QgcGFyc2UgYW55IGNvbmZpZyBmaWxlIGJ1dCB3aGF0IHdlIGdpdmUgaXQuICAKLSMgdGhpcyBpcyBtYWlubHkgdG8gcHJvdGVjdCBhZ2FpbnN0IGEgYnJva2VuIGFnZW50IHRoYXQgZG9lc24ndAotIyBwcm9wZXJseSBoYW5kbGUgY29tYmluYXRpb25zIG9mIC1jIGFuZCAtQy4gIChzaW5jZSBJJ3ZlIGJyb2tlIGl0IGJlZm9yZSkuCi0jU05NUENPTkZQQVRIPSIkU05NUF9UTVBESVIvZG9lcy1ub3QtZXhpc3QiCi0jZXhwb3J0IFNOTVBDT05GUEFUSAotCi1maSAjIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9kYXRhLmtleWNoYW5nZS1tZDUgYi90ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLW1kNQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMmUyNGM0YS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLW1kNQorKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTB4NTI2ZjVlZWQ5ZmNjZTI2Zjg5NjRjMjkzMDc4N2Q4MmIJIyBvbGQga3VsCi0weDg3MDIxZDdiZDlkMTAxYmEwNWVhNmUzYmY5ZDliZDRhCSMgbmV3IGt1bAotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA4ODA1NjE1MTQxNjc2Y2M5MTk2MTc0ZTc0MmEzMjU1MQkJCQkJCQkjIGtleWNoYW5nZSBzdHJpbmcgLS0gYXV0aC9wcml2YWN5Ci0KLQotCQkjCQkjCQkjCQkjCi0KLSMKLSMgRm9sbG93aW5nIGRhdGEgZXhlcnB0ZWQgZnJvbToKLSMKLSMJTWVzc2FnZS1JZDogPDE5OTgwOTI4MjAwMy5RQUEyNzQ5NEByZWxheS5ocS50aXMuY29tPgotIwlEYXRlOiBNb24sIDI4IFNlcCA5OCAyMTo1Nzo0OCBEU1QKLSMJRnJvbTogIkJlcnQgV2lqbmVuIiA8V0lKTkVOQHZuZXQuaWJtLmNvbT4KLSMJVG86IHNubXB2M0B0aXMuY29tCi0jCVN1YmplY3Q6IHN1Z2dlc3RlZCBuZXcgYXBwZW5kaXggc2VjdGlvbiBBLjUgZm9yIFJGQzIyNzQKLSMKLW1hcGxlc3lydXAJCQkJIyBvbGQgcGFzc3BocmFzZQotMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIJCSMgZW5naW5lSUQKLQotbmV3c3lydXAJCQkJIyBuZXcgcGFzc3BocmFzZQotMDFhZGQyNzMxMDdjNGU1OTZiNGIwMGY4MmIxZDQyYTcJIyBuZXcgS3UKLTg3MDIxZDdiZDlkMTAxYmEwNWVhNmUzYmY5ZDliZDRhCSMgbmV3IGt1bAotCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAkjIHJhbmRvbSBkZWx0YQotCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDg4MDU2MTUxNDE2NzZjYzkxOTYxNzRlNzQyYTMyNTUxCQkJCQkJCSMga2V5Y2hhbmdlIHN0cmluZyAtLSBhdXRoL3ByaXZhY3kKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMSBiL3Rlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGQ5Nzc0OS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2RhdGEua2V5Y2hhbmdlLXNoYTEKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0weDY2OTVmZWJjOTI4OGUzNjI4MjIzNWZjNzE1MWYxMjg0OTdiMzhmM2YJIyBvbGQga3VsIC0tIGZvciBhdXRoCi0weDc4ZTJkY2NlNzlkNTk0MDNiNThjMWJiYWE1YmZmNDYzOTFmMWNkMjUJIyBuZXcga3VsIC0tIGZvciBhdXRoCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOWMxMDE3ZjRmZDQ4M2QyZGU4ZDVmYWRiZjg0MzkyY2IwNjQ1NzA1MQkJCQkJCSMga2V5Y2hhbmdlIHN0cmluZyAtLSBhdXRoCi0KLQotCQkjCQkjCQkjCQkjCi0KLSMKLSMgRm9sbG93aW5nIGRhdGEgZXhlcnB0ZWQgZnJvbToKLSMKLSMgICAgICAgTWVzc2FnZS1JZDogPDE5OTgwOTI4MjAwMy5RQUEyNzQ5NEByZWxheS5ocS50aXMuY29tPgotIyAgICAgICBEYXRlOiBNb24sIDI4IFNlcCA5OCAyMTo1Nzo0OCBEU1QKLSMgICAgICAgRnJvbTogIkJlcnQgV2lqbmVuIiA8V0lKTkVOQHZuZXQuaWJtLmNvbT4KLSMgICAgICAgVG86IHNubXB2M0B0aXMuY29tCi0jICAgICAgIFN1YmplY3Q6IHN1Z2dlc3RlZCBuZXcgYXBwZW5kaXggc2VjdGlvbiBBLjUgZm9yIFJGQzIyNzQKLSMKLW1hcGxlc3lydXAJCQkJCSMgb2xkIHBhc3NwaHJhc2UKLTB4MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAyCQkJIyBlbmdpbmVJRAotCi1uZXdzeXJ1cAkJCQkJIyBuZXcgcGFzc3BocmFzZQotM2E1MWE2ZDczNmFhMzQ3YjgzZGM0YTg3ZTNlNTVlZTRkNjk4YWM3MQkjIG5ldyBLdSAtLSBhdXRoCi03OGUyZGNjZTc5ZDU5NDAzYjU4YzFiYmFhNWJmZjQ2MzkxZjFjZDI1CSMgbmV3IGt1bCAtLSBhdXRoCi0KLTAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAJIyByYW5kb20gZGVsdGEKLQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDljMTAxN2Y0ZmQ0ODNkMmRlOGQ1ZmFkYmY4NDM5MmNiMDY0NTcwNTEJCQkJCQkjIGtleWNoYW5nZSBzdHJpbmcgLS0gYXV0aApkaWZmIC0tZ2l0IGEvdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLWRlcyBiL3Rlc3RpbmcvZGF0YS5rZXljaGFuZ2Utc2hhMS1kZXMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY3NzE5ZDUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9kYXRhLmtleWNoYW5nZS1zaGExLWRlcworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLTB4NjY5NWZlYmM5Mjg4ZTM2MjgyMjM1ZmM3MTUxZjEyODQJCSMgb2xkIGt1bCAtLSBwcml2YWN5Ci0weDc4ZTJkY2NlNzlkNTk0MDNiNThjMWJiYWE1YmZmNDYzCQkjIG5ldyBrdWwgLS0gcHJpdmFjeQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZWY4ZDhhNGM5Y2RiMjZiNDc1OTFjZDg1MmZmODhiNQkJCQkJCQkJIyBrZXljaGFuZ2Ugc3RyaW5nIC0tIHByaXZhY3kKLQotCi0JCSMJCSMJCSMJCSMKLQotIwotIyBGb2xsb3dpbmcgZGF0YSBleGVycHRlZCBmcm9tOgotIwotIyAgICAgICBNZXNzYWdlLUlkOiA8MTk5ODA5MjgyMDAzLlFBQTI3NDk0QHJlbGF5LmhxLnRpcy5jb20+Ci0jICAgICAgIERhdGU6IE1vbiwgMjggU2VwIDk4IDIxOjU3OjQ4IERTVAotIyAgICAgICBGcm9tOiAiQmVydCBXaWpuZW4iIDxXSUpORU5Adm5ldC5pYm0uY29tPgotIyAgICAgICBUbzogc25tcHYzQHRpcy5jb20KLSMgICAgICAgU3ViamVjdDogc3VnZ2VzdGVkIG5ldyBhcHBlbmRpeCBzZWN0aW9uIEEuNSBmb3IgUkZDMjI3NAotIwotbWFwbGVzeXJ1cAkJCQkJIyBvbGQgcGFzc3BocmFzZQotMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIJCQkjIGVuZ2luZUlECi0KLW5ld3N5cnVwCQkJCQkjIG5ldyBwYXNzcGhyYXNlCi0zYTUxYTZkNzM2YWEzNDdiODNkYzRhODdlM2U1NWVlNGQ2OThhYzcxCSMgbmV3IEt1IC0tIHByaXZhY3kKLTc4ZTJkY2NlNzlkNTk0MDNiNThjMWJiYWE1YmZmNDYzCQkjIG5ldyBrdWwgLS0gcHJpdmFjeQotCi0wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAkJIyByYW5kb20gZGVsdGEKLQotMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA3ZWY4ZDhhNGM5Y2RiMjZiNDc1OTFjZDg1MmZmODhiNQkJCQkJCQkJIyBrZXljaGFuZ2Ugc3RyaW5nIC0tIHByaXZhY3kKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZGF0YS5rdWwtbWQ1IGIvdGVzdGluZy9kYXRhLmt1bC1tZDUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc4ZTFlMjcuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9kYXRhLmt1bC1tZDUKKysrIC9kZXYvbnVsbApAQCAtMSw4ICswLDAgQEAKLW1hcGxlc3lydXAJCQkJIyBwYXNzcGhyYXNlCi05ZmFmMzI4Mzg4NGU5MjgzNGViYzk4NDdkOGVkZDk2MwkjIEt1Ci0weDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMgkJIyBlbmdpbmVJRAotNTI2ZjVlZWQ5ZmNjZTI2Zjg5NjRjMjkzMDc4N2Q4MmIJIyBrdWwKLQotIwotIyBUYWtlbiBmcm9tIDxkcmFmdC1pZXRmLXNubXB2My11c20tdjItMDEudHh0PiwgU2VjdGlvbiBBLjMuCi0jCmRpZmYgLS1naXQgYS90ZXN0aW5nL2RhdGEua3VsLXNoYTEgYi90ZXN0aW5nL2RhdGEua3VsLXNoYTEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGM4MjdhYmQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9kYXRhLmt1bC1zaGExCisrKyAvZGV2L251bGwKQEAgLTEsOCArMCwwIEBACi1tYXBsZXN5cnVwCQkJCQkjIHBhc3NwaHJhc2UKLTlmYjVjYzAzODE0OTdiMzc5MzUyODkzOWZmNzg4ZDVkNzkxNDUyMTEJIyBLdQotMHgwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDIJCQkjIGVuZ2luZUlECi02Njk1ZmViYzkyODhlMzYyODIyMzVmYzcxNTFmMTI4NDk3YjM4ZjNmCSMga3VsCi0KLSMKLSMgVGFrZW4gZnJvbSA8ZHJhZnQtaWV0Zi1zbm1wdjMtdXNtLXYyLTAxLnR4dD4sIFNlY3Rpb24gQS4zLgotIwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9ldGltZXRlc3QuYyBiL3Rlc3RpbmcvZXRpbWV0ZXN0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVlN2QzZDUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9ldGltZXRlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDQyMyArMCwwIEBACi0vKgotICogZXRpbWV0ZXN0LmMKLSAqCi0gKiBFeHBlY3RlZCBTVUNDRVNTZXMgZm9yIGFsbCB0ZXN0czogICAgMwotICoKLSAqIFJldHVybnM6Ci0gKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KLSAqCi0gKiBUZXN0IG9mIGhhc2hfZW5naW5lSUQoKS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogIDAKLSAqIFRlc3Qgb2YgTENEIEVuZ2luZSBJRCBhbmQgVGltZSBMaXN0LiAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAgMwotICoKLSAqIEZJWCAgRGV2aXNlIGEgdGVzdCBmb3Ige3NldCxnZXR9X2VuZ2luZXRpbWUoLi4uLCBGQUxTRSkuCi0gKi8KLQotc3RhdGljIGNoYXIgICAgKnJjc2lkID0gIiRJZCQiOyAgICAvKiAqLwotCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaWZkZWYgSEFWRV9TVERMSUJfSAotI2luY2x1ZGUgPHN0ZGxpYi5oPgotI2VuZGlmCi0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImFzbjEuaCIKLSNpbmNsdWRlICJzbm1wX2FwaS5oIgotI2luY2x1ZGUgInRvb2xzLmgiCi0jaW5jbHVkZSAibGNkX3RpbWUuaCIKLSNpbmNsdWRlICJzbm1wX2RlYnVnLmgiCi0jaW5jbHVkZSAiY2FsbGJhY2suaCIKLQotc3RhdGljIHVfaW50ICAgIGR1bW15X2V0aW1lLCBkdW1teV9lYm9vdDsgICAgICAgLyogRm9yIElTRU5HSU5FS05PV04oKS4gKi8KLQotCi0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLWV4dGVybiBjaGFyICAgICpvcHRhcmc7Ci1leHRlcm4gaW50ICAgICAgb3B0aW5kLCBvcHRvcHQsIG9wdGVycjsKLQotCi0KLS8qCi0gKiBHbG9iYWxzLCAmYy4uLgotICovCi1jaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7Ci0KLSNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy1zIDxzZWNvbmRzPl1bLWFlSF0iCi0jZGVmaW5lIE9QVElPTkxJU1QJImFlaEhzOiIKLQotaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2hhc2hpbmRleCA9IDAsIGRvZXRpbWV0ZXN0ID0gMDsKLQotI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9oYXNoaW5kZXggKyBkb2V0aW1ldGVzdCkKLQotCi0KLSNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKLSNkZWZpbmUgTkwJCSJcbiIKLQotI2RlZmluZSBPVVRQVVQobykJZnByaW50ZihzdGRvdXQsICJcblxuJXNcblxuIiwgbyk7Ci0KLSNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKCFmYWlsY291bnQpCQkJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5TVUNDRVNTOiAlc1xuIiwgcyk7CVwKLX0KLQotI2RlZmluZSBGQUlMRUQoZSwgZikJCQkJCVwKLXsJCQkJCQkJXAotCWlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUykgewkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcbkZBSUxFRDogJXNcbiIsIGYpOwlcCi0JCWZhaWxjb3VudCArPSAxOwkJCQlcCi0JfQkJCQkJCVwKLX0KLQotCi0KLS8qCi0gKiBHbG9iYWwgdmFyaWFibGVzLgotICovCi1pbnQgICAgICAgICAgICAgc2xlZXB0aW1lID0gNzsKLQotI2RlZmluZSBCTEFUICJhbGs7ZGpmO2FuIHJpdTthbGljZW5tcnVsO2Fpa25nbGtzYWpoZTEgYWRjZmFsY2VucmNvMiIKLQotCi0KLQotLyoKLSAqIFByb3RvdHlwZXMuCi0gKi8KLXZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKLQotaW50ICAgICAgICAgICAgIHRlc3RfZXRpbWUodm9pZCk7Ci1pbnQgICAgICAgICAgICAgdGVzdF9oYXNoaW5kZXgodm9pZCk7Ci0KLQotCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgIGNoOwotCi0gICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOwotCi0gICAgLyoKLSAgICAgKiBQYXJzZS4KLSAgICAgKi8KLSAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2UnOgotICAgICAgICAgICAgZG9ldGltZXRlc3QgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ0gnOgotICAgICAgICAgICAgZG9oYXNoaW5kZXggPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3MnOgotICAgICAgICAgICAgc2xlZXB0aW1lID0gYXRvaShvcHRhcmcpOwotICAgICAgICAgICAgaWYgKHNsZWVwdGltZSA8IDApIHsKLSAgICAgICAgICAgICAgICB1c2FnZShzdGRlcnIpOwotICAgICAgICAgICAgICAgIGV4aXQoMTAwMCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIHJ2YWwgPSAwOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgICAgIGV4aXQocnZhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgaWYgKG9wdGFyZykgewotICAgICAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICAgICAgYXJndiArPSAxOwotICAgICAgICAgICAgb3B0YXJnID0gTlVMTDsKLSAgICAgICAgfQotICAgICAgICBvcHRpbmQgPSAxOwotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmR3aGlsZSBnZXRvcHQgKi8KLQotICAgIGlmICgoYXJnYyA+IDEpKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0KLSAgICB9IGVsc2UgaWYgKEFMTE9QVElPTlMgIT0gMSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBUZXN0IHN0dWZmLgotICAgICAqLwotICAgIHJ2YWwgPSBzY19pbml0KCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19pbml0KCkiKTsKLQotCi0gICAgaWYgKGRvaGFzaGluZGV4IHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfaGFzaGluZGV4KCk7Ci0gICAgfQotICAgIGlmIChkb2V0aW1ldGVzdCB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2V0aW1lKCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIENsZWFudXAuCi0gICAgICovCi0gICAgcnZhbCA9IHNjX3NodXRkb3duKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19zaHV0ZG93bigpIik7Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCBtYWluKCkgKi8KLQotCi0KLQotCi12b2lkCi11c2FnZShGSUxFICogb2ZwKQotewotICAgIGZwcmludGYob2ZwLAotICAgICAgICAgICAgVVNBR0UKLSAgICAgICAgICAgICIiIE5MCi0gICAgICAgICAgICAiICAgIC1hCQkJQWxsIHRlc3RzLiIgTkwKLSAgICAgICAgICAgICIgICAgLWUJCQlFeGVyY2lzZSB0aGUgbGlzdCBvZiBlbmdpbmV0aW1lcy4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtaAkJCUhlbHAuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLUgJCQlUZXN0IGhhc2hfZW5naW5lSUQoKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtcyA8c2Vjb25kcz4JU2Vjb25kcyB0byBwYXVzZS4gIChEZWZhdWx0OiAwLikiCi0gICAgICAgICAgICBOTCBOTCwgbG9jYWxfcHJvZ25hbWUpOwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCi0KLQotCi0KLSNpZmRlZiBFWEFNUExFCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb3NvbWV0aGluZwotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3QgdGVtcGxhdGUuCi0gKi8KLWludAotdGVzdF9kb3NvbWV0aGluZyh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotCi0gIHRlc3RfZG9zb21ldGhpbmdfcXVpdDoKLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rvc29tZXRoaW5nKCkgKi8KLSNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRVhBTVBMRSAqLwotCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2hhc2hpbmRleAotICoKLSAqIFJldHVybnM6Ci0gKglOdW1iZXIgb2YgZmFpbHVyZXMuCi0gKgotICoKLSAqIFRlc3QgaGFzaF9lbmdpbmVJRCgpLgotICovCi1pbnQKLXRlc3RfaGFzaGluZGV4KHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsICAqLwotICAgICAgICAgICAgICAgICAgICBmYWlsY291bnQgPSAwOwotICAgIGNoYXIgICAgICAgICAgICpzOwotCi0gICAgT1VUUFVUKCJWaXN1YWwgc3BvdCBjaGVjayBvZiBoYXNoIGluZGV4IG91dHB1dHMuICAiCi0gICAgICAgICAgICIoU3VjY2VzcyBvciBmYWlsdXJlIG5vdCBub3RlZC4pIik7Ci0KLSAgICBzID0gIkEiOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4ocykpKTsKLQotICAgIHMgPSAiQkIiOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4ocykpKTsKLQotICAgIHMgPSAiQ0NDIjsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIiVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKHMpKSk7Ci0KLSAgICBzID0gIkREREQiOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4ocykpKTsKLQotICAgIHMgPSAiRUVFRUUiOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4ocykpKTsKLQotICAgIHMgPSBCTEFUOwotICAgIGZwcmludGYoc3Rkb3V0LCAiJXMgPSAlZFxuIiwgcywgaGFzaF9lbmdpbmVJRChzLCBzdHJsZW4ocykpKTsKLQotCi0gICAgT1VUUFVUKCJWaXN1YWwgc3BvdCBjaGVjayAtLSBET05FLiIpOwotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9oYXNoaW5kZXgoKSAqLwotCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2V0aW1lCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKiBUZXN0IG9mIExDRCBFbmdpbmUgSUQgYW5kIFRpbWUgTGlzdC4JCi0gKi8KLWludAotdGVzdF9ldGltZSh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotICAgIHVfaW50ICAgICAgICAgICBldGltZSwgZWJvb3Q7Ci0KLSAgICAvKgotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSAgICAgKi8KLSAgICBPVVRQVVQoIlF1ZXJ5IG9mIGVtcHR5IGxpc3QsIHR3byBzZXQgYWN0aW9ucy4iKTsKLQotCi0gICAgcnZhbCA9IElTRU5HSU5FS05PV04oIkEiLCAxKTsKLSAgICBpZiAocnZhbCA9PSBUUlVFKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIlF1ZXJ5IG9mIGVtcHR5IGxpc3QgcmV0dXJuZWQgVFJVRS4iKQotICAgIH0KLQotCi0gICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKCJCQiIsIDIsIDIsIDIwLCBUUlVFKTsKLSAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkiKTsKLQotCi0gICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKCJDQ0MiLCAzLCAzMSwgOTAxMjcsIFRSVUUpOwotICAgIEZBSUxFRChydmFsLCAic2V0X2VuZ2luZXRpbWUoKSIpOwotCi0KLSAgICBTVUNDRVNTKCJDaGVjayBvZiBlbXB0eSBsaXN0LCBhbmQgdHdvIGFkZGl0aW9ucy4iKTsKLQotCi0KLSAgICAvKgotICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSAgICAgKi8KLSAgICBPVVRQVVQoIkFkZCBlbnRyaWVzIHVzaW5nIG1hY3JvcywgdGVzdCBmb3IgZXhpc3RlbmNlIHdpdGggbWFjcm9zLiIpOwotCi0KLSAgICBydmFsID0gRU5TVVJFX0VOR0lORV9SRUNPUkQoIkREREQiLCA0KTsKLSAgICBGQUlMRUQocnZhbCwgIkVOU1VSRV9FTkdJTkVfUkVDT1JEKCkiKTsKLQotCi0gICAgcnZhbCA9IE1BS0VORVdfRU5HSU5FX1JFQ09SRCgiRUVFRUUiLCA1KTsKLSAgICBpZiAocnZhbCA9PSBTTk1QRVJSX1NVQ0NFU1MpIHsKLSAgICAgICAgRkFJTEVEKHJ2YWwsCi0gICAgICAgICAgICAgICAiTUFLRU5FV19FTkdJTkVfUkVDT1JEIHJldHVybmVkIHN1Y2Nlc3MgZm9yICIKLSAgICAgICAgICAgICAgICJtaXNzaW5nIHJlY29yZC4iKTsKLSAgICB9Ci0KLQotICAgIHJ2YWwgPSBNQUtFTkVXX0VOR0lORV9SRUNPUkQoIkJCIiwgMik7Ci0gICAgRkFJTEVEKHJ2YWwsICJNQUtFTkVXX0VOR0lORV9SRUNPUkQoKS4iKTsKLQotCi0gICAgU1VDQ0VTUwotICAgICAgICAoIkFkZGVkIGVudHJpZXMgd2l0aCBtYWNyb3MsIHRlc3RlZCBmb3IgZXhpc3RlbmNlIHdpdGggbWFjcm9zLiIpOwotCi0KLQotICAgIC8qCi0gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotICAgICAqLwotICAgIE9VVFBVVCgiRHVtcCB0aGUgbGlzdCBhbmQgdGhlbiBzbGVlcC4iKTsKLQotI2lmZGVmIE5FVFNOTVBfRU5BQkxFX1RFU1RJTkdfQ09ERQotICAgIGR1bXBfZXRpbWVsaXN0KCk7Ci0jZW5kaWYKLQotICAgIGZwcmludGYoc3Rkb3V0LCAiXG5TbGVlcGluZyBmb3IgJWQgc2Vjb25kJXMuLi4gIiwKLSAgICAgICAgICAgIHNsZWVwdGltZSwgKHNsZWVwdGltZSA9PSAxKSA/ICIiIDogInMiKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLQotICAgIHNsZWVwKHNsZWVwdGltZSk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwotCi0KLQotICAgIC8qCi0gICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotICAgICAqLwotICAgIE9VVFBVVAotICAgICAgICAoIlJldHJpZXZlIGRhdGEgZnJvbSByZWFsL3N0dWJiZWQgcmVjb3JkcywgdXBkYXRlIHJlYWwvc3R1YmJlZC4iKTsKLQotCi0KLSAgICBydmFsID0gZ2V0X2VuZ2luZXRpbWUoIkJCIiwgMiwgJmVib290LCAmZXRpbWUsIFRSVUUpOwotICAgIEZBSUxFRChydmFsLCAiZ2V0X2VuZ2luZXRpbWUoKS4iKTsKLQotICAgIGZwcmludGYoc3Rkb3V0LCAiQkIgPSA8JWQsJWQ+XG4iLCBlYm9vdCwgZXRpbWUpOwotICAgIGlmICgoZXRpbWUgPCAyMCkgfHwgKGVib290IDwgMikpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgImdldF9lbmdpbmV0aW1lKCkgcmV0dXJuZWQgYmFkIHZhbHVlcy4gICgxKSIpOwotICAgIH0KLQotICAgIHJ2YWwgPSBnZXRfZW5naW5ldGltZSgiRERERCIsIDQsICZlYm9vdCwgJmV0aW1lLCBGQUxTRSk7Ci0gICAgRkFJTEVEKHJ2YWwsICJnZXRfZW5naW5ldGltZSgpLiIpOwotCi0gICAgZnByaW50ZihzdGRvdXQsICJEREREID0gPCVkLCVkPlxuIiwgZWJvb3QsIGV0aW1lKTsKLSAgICBpZiAoKGV0aW1lIDwgc2xlZXB0aW1lKSB8fCAoZWJvb3QgIT0gMCkpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgImdldF9lbmdpbmV0aW1lKCkgcmV0dXJuZWQgYmFkIHZhbHVlcy4gICgyKSIpOwotICAgIH0KLQotCi0gICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKCJDQ0MiLCAzLCAyMzQsIDEwMDAwLCBUUlVFKTsKLSAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkuIik7Ci0KLQotICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgiRUVFRUUiLCA1LCA5ODc2LCA1NTU1NSwgVFJVRSk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpLiIpOwotCi0KLSAgICBTVUNDRVNTKCJSZXRyaWV2YWwgYW5kIHVwZGF0ZXMuIik7Ci0KLQotCi0gICAgLyoKLSAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0gICAgICovCi0gICAgT1VUUFVUKCJTbGVlcCBhZ2FpbiwgdGhlbiBkdW1wIHRoZSBsaXN0IG9uZSBsYXN0IHRpbWUuIik7Ci0KLSAgICBmcHJpbnRmKHN0ZG91dCwgIlNsZWVwaW5nIGZvciAlZCBzZWNvbmQlcy4uLiAiLAotICAgICAgICAgICAgc2xlZXB0aW1lLCAoc2xlZXB0aW1lID09IDEpID8gIiIgOiAicyIpOwotICAgIGZmbHVzaChzdGRvdXQpOwotCi0gICAgc2xlZXAoc2xlZXB0aW1lKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgIlxuIik7Ci0KLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKLSAgICBkdW1wX2V0aW1lbGlzdCgpOwotI2VuZGlmCi0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2V0aW1lKCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZXZhbF9vbmVwcm9ncmFtLnNoIGIvdGVzdGluZy9ldmFsX29uZXByb2dyYW0uc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDQ1ZWRmYzAuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9ldmFsX29uZXByb2dyYW0uc2gKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIGV2YWxfb25lcHJvZ3JhbS5zaCBbLWhdWy1sa10gPHByb2dyYW0+IFs8cHJvZ3JhbV9hcmdzPl0KLSMKLSMgQ0FMTEVEIEJZOiBldmFsX3N1aXRlLnNoCi0jCi0jCi0jIFJ1bnMgPHByb2dyYW0+IGFuZCByZXBvcnRzIGhvdyBtYW55IGluc3RhbmNlcyBvZiB0aGUgc3RyaW5ncyBTVUNDRVNTCi0jIG9yIEZBSUxFRCBvY2N1ci4KLSMKLSMKLSMgRklYCU91dHB1dCBmcm9tICRQUk9HUkFNIG9uIHN0ZGVyciBpcyBzZXBhcmF0ZWQgb3V0IGFuZCBjb21lcyBmaXJzdC4KLSMKLSMKLVVTQUdFX0xPTkc9JwotIwotIyAtaAlIZWxwLgotIyAtawlTYXZlIHRoZSBwcm9ncmFtIG91dHB1dCBpbiAiX188cHJvZ3JhbV9hcmdzPl9fPHBpZD5vIi4KLSMgLWwJTG9uZyBmb3JtLiAgKFNob3J0IGZvcm0gYnkgZGVmYXVsdC4pCi0jCi0jIDxwcm9ncmFtPiBpcyB0aGUgZXhlY3V0YWJsZSB0byBydW4gYW5kIGNvbGxlY3QgdGhlIG91dHB1dCBvZi4KLScKLQotVVNBR0U9IlVzYWdlOiBgYmFzZW5hbWUgJDBgIFstaF1bLWxrXSA8cHJvZ3JhbT4iCi0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBHbG9iYWxzLgotIwotQVdLRklMRT0iX2BiYXNlbmFtZSAkMGAkJC5hd2siCi1TQ1JJUFRGSUxFPQotCi1kb2xvbmdmb3JtPTAKLWRva2VlcG91dHB1dD0KLQotVE9UQUxGQUlMRUQ9MAotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIFBhcnNlICYgc2V0dXAuCi0jCi13aGlsZSBbIC1uICIkMSIgXTsgZG8KLQljYXNlICIkMSIgaW4KLQktaykJZG9rZWVwb3V0cHV0PXRydWUKLQkJOzsKLQktbCkJZG9sb25nZm9ybT0xCi0JCTs7Ci0JLWgpCWVjaG8gJFVTQUdFCi0JCWNhdCA8PEJMSUsgfCBzZWQgJ3MvXiMvLycgfCBzZWQgJzFkJyAgICAxPiYyCi0kVVNBR0VfTE9ORwotQkxJSwotCQlleGl0IDAKLQkJOzsKLQkqKQlQUk9HUkFNPSIkKiIKLQkJc2hpZnQgYGV4cHIgJCMgLSAxYAotCQk7OwotCWVzYWMKLQotCXNoaWZ0Ci1kb25lCi0KLVsgLXogIiRQUk9HUkFNIiBdICYmIGVjaG8gJFVTQUdFICYmIGV4aXQgMQotCi0KLVNDUklQVEZJTEU9Il9fYGVjaG8gXGBiYXNlbmFtZSAkUFJPR1JBTVxgIHwgc2VkICdzLyAvXy9nJ2BfXyQkbyIKLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBDcmVhdGUgYXdrIHNjcmlwdC4KLSMKLQotY2F0IDw8R1JPTksgPiRBV0tGSUxFCi0KLUJFR0lOIHsKLQlwYXNzID0gMAotCXBhc3NsaXN0WzBdID0gIiIKLQotCWZhaWwgPSAwCi0JZmFpbGxpc3RbMF0gPSAiIgotCi0JbG9uZ2Zvcm0gPSAkZG9sb25nZm9ybSArIDAKLX0KLQotL1NVQ0NFU1MvCXsKLQlwYXNzbGlzdFtwYXNzXSA9IFwkMAotCXBhc3MgKz0gMQotfQotCi0vRkFJTEVELwl7Ci0JZmFpbGxpc3RbZmFpbF0gPSBcJDAKLQlmYWlsICs9IDEKLX0KLQotRU5EIHsKLQlwcmludGYgIiRQUk9HUkFNIFNVQ0NFU1M6ICVkXG4iLCBwYXNzCi0JcHJpbnRmICIkUFJPR1JBTSBGQUlMRUQ6ICVkXG4iLCBmYWlsCi0KLQlpZiAobG9uZ2Zvcm0pIHsKLQkJcHJpbnRmICJcbiIKLQkJZm9yIChpPTA7IGk8cGFzczsgaSsrKQotCQkJcHJpbnQgcGFzc2xpc3RbaV0KLQotCQlmb3IgKGk9MDsgaTxmYWlsOyBpKyspCi0JCQlwcmludCBmYWlsbGlzdFtpXQotCX0KLQotCWV4aXQgZmFpbAotfQotR1JPTksKLQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIEdldCBhbmQgcHJpbnQgcmVzdWx0cy4KLSMKLQoteyAkUFJPR1JBTSAkKiAyPiYxIDsgfSA+JFNDUklQVEZJTEUKLQotYXdrIC1mICRBV0tGSUxFICRTQ1JJUFRGSUxFCi1UT1RBTEZBSUxFRD0kPwotCi1ybSAtZiAkQVdLRklMRQotWyAteiAiJGRva2VlcG91dHB1dCIgXSAmJiBybSAtZiAkU0NSSVBURklMRQotCi0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgRXhpdCwgY2xlYW51cC4KLSMKLWV4aXQgJFRPVEFMRkFJTEVECi0KLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9ldmFsX29uZXNjcmlwdC5zaCBiL3Rlc3RpbmcvZXZhbF9vbmVzY3JpcHQuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGYyNDc2ZDEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy9ldmFsX29uZXNjcmlwdC5zaAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyBldmFsX29uZXNjcmlwdC5zaCBTQ1JJUFQgIFtURVNUTlVNQkVSIFtIRUFERVJPTkxZXSBdCi0jCi0jIEV2YWx1YXRlcyBvbmUgdGVzdCBwcm9ncmFtLCBhbmQgaGVscHMgaXQgb3V0IGJ5IGRvaW5nIGEgYml0IG9mIHNldHVwCi0jIGZvciBpdC4gIEl0IGRvZXMgdGhpcyBieSBzb3VyY2luZyBzb21lIGNvbmZpZ3VyYXRpb24gZmlsZXMgZm9yIGl0Ci0jIGZpcnN0LCBhbmQgaWYgaXQgZXhpdGVkIHdpdGhvdXQgY2FsbGluZyBGSU5JU0hFRCwgY2FsbCBpdC4KLSMKLSMgTm90IGludGVuZGVkIHRvIGJlIGEgdG9vbCBmb3IgdGhlIGNvbW1vbiB1c2VyISAgQ2FsbGVkIGJ5IFJVTlRFU1RTCi0jIGRpcmVjdGx5IGluc3RlYWQuCi0jCi0KLXRlc3RudW09MQotaWYgWyAieCQyIiAhPSAieCIgXTsgdGhlbgotCXRlc3RudW09JDIKLWZpCi1leHBvcnQgdGVzdG51bQotCi11bnNldCBTTk1QX0hFQURFUk9OTFkKLWlmIFsgIngkMyIgPSAieHllcyIgXTsgdGhlbgotICAgIFNOTVBfSEVBREVST05MWT15ZXMKLWZpCi1leHBvcnQgU05NUF9IRUFERVJPTkxZCi0KLS4gVEVTVENPTkYuc2gKLQotLiBldmFsX3Rvb2xzLnNoCi0KLUVDSE8gIiR0ZXN0bnVtOiAgIgotCi0uIC4vJDEKLQotIyBXZSBzaG91bGRuJ3QgZ2V0IGhlcmUuLi4KLSMgSWYgd2UgZG8sIGl0IG1lYW5zIHRoZXkgZGlkbid0IGV4aXQgcHJvcGVybHkuCi0jIFNvIHdlIHdpbGwuCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9ldmFsX3N1aXRlLnNoIGIvdGVzdGluZy9ldmFsX3N1aXRlLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAxYzFhMGYyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZXZhbF9zdWl0ZS5zaAorKysgL2Rldi9udWxsCkBAIC0xLDIxOCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgZXZhbF9zdWl0ZS5zaCBbLWhdWzxhcmdzX3Bhc3NlZF90b19nZXRyZXN1bHRzPl0KLSMKLSMgQ0FMTFM6IGV2YWxfb25lcHJvZ3JhbS5zaCBbLWhdWy1sa10gPHByb2dyYW0+Ci0jCi0jIFJFVFVSTlM6CU51bWJlciBvZiBmYWlsZWQgdGVzdHMsIHJlZ2FyZGxlc3Mgb2YgaG93IHRoYXQgZmFpbHVyZSBvY2N1cmVkCi0jCQlvciBob3cgbWFueSBmYWlsdXJlcyB0aGVyZSB3ZXJlIGluIGEgZ2l2ZW4gdGVzdC4KLSMKLSMKLQotCi0JCQkJCQkJCVVTQUdFX0xPTkc9JwotIwotIyBIT1cgVE8gRU5URVIgQSBORVcgVEVTVAotIwotIyBUbyBhZGQgYSB0ZXN0IHRvIHRoZSB0ZXN0bGlzdCwgYWRkIGEgbGluZSB0byB0aGUgVEVTVExJU1RGSUxFIChldmFsX3Rlc3RsaXN0KQotIyB1c2luZyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKLSMKLSMJPCNfb2ZfZXhwZWN0ZWRfc3VjY2Vzc2VzPiBbI108cHJvZ3JhbT4gPGFyZ3M+Ci0jCi0jIEFueSB3aGl0ZSBzcGFjZSBtYXkgYmUgdXNlZCBhcyBzZXBhcmF0b3IuICBJZiA8cHJvZ3JhbT4gaXMgaW1tZWRpYXRlbHkKLSMgcHJlY2VlZGVkIGJ5IGEgcG91bmQgc2lnbiAoIykgdGhhdCB0ZXN0IHdpbGwgYmUgc2tpcHBlZC4gIChObyB3aGl0ZSBzcGFjZQotIyBhbGxvd2VkIGFmdGVyIHRoZSBwb3VuZC4gIEVnLCAiIzxwcm9ncmFtPiIuKQotIwotIwotIyBIT1cgVEVTVFMgQVJFIFJVTiBBTkQgRVZBTFVBVEVECi0jCi0jIFRoZSBoYXJuZXNzIGZvciBpbmRpdmlkdWFsIHRlc3RzIGlzIHRoZSBzY3JpcHQgImV2YWxfb25lcHJvZ3JhbS5zaCIuCi0jIEl0IGV4cGVjdHMgdGhhdCB0aGUgdGVzdCBwcmludCBGQUlMRUQgd2hlbiBzb21ldGhpbmcgZmFpbHMsIGFuZCBTVUNDRVNTCi0jIHdoZW4gc29tZXRoaW5nIHN1Y2NlZWRzLiAgSWYgYSB0ZXN0IGV4ZWN1dGVzIHByb3Blcmx5IHRoZXJlIHNob3VsZCBiZQotIyBzb21lIFNVQ0NFU1Mgc3RyaW5ncyBhbmQgTk8gRkFJTEVEIHN0cmluZ3MuICBJZiB0aGUgcmVhc29uIGZvciB0aGUKLSMgc3VjY2VzcyBvciBmYWlsdXJlIG9mIHRoZSB0ZXN0IHNob3VsZCBiZSBwcmludGVkIG9uIHRoZSBTQU1FIGxpbmUgYXMgdGhlCi0jIFNVQ0NFU1MvRkFJTEVEIHN0cmluZyB0byBhbGxvdyB0aGUgZGlhbm9zdGljIHRvIGJlIGVhc2lsbHkgZ3JlcHBlZCBmcm9tCi0jIHRoZSBpdHMgb3V0cHV0LgotIwotIyBUaGUgbG9uZyBmb3JtIG9mIHRoZSBvdXRwdXQgKC1sIGZsYWcpIHdpbGwgY2FwdHVyZSB0aGF0IG91dHB1dCB3aGljaCBtYXkKLSMgaGVscCB0byBkaWFnbm9zaXMgdGhlIHByb2JsZW0uICBGb3IgbW9yZSBpbmZvcm1hdGlvbjoKLSMKLSMJJSBldmFsX29uZXByb2dyYW0uc2ggLWgKLSMKLSMgCi0jIE1JU1NJTkcgVEVTVFMgQVJFIE5PVEVECi0jCi0jIElmIGFuIGV4ZWN1dGFibGUgaXMgZm91bmQgTUlTU0lORywgYSBub3RlIGlzIHByaW50ZWQgdG8gdGhhdCBlZmZlY3QKLSMgYW5kIFRFU1RGQUlMVVJFIGlzIGluY3JlbWVudGVkIGJ5IDEuCi0jCi0nCi0KLSMKLSMgU3VnZ2VzdGVkIGltcHJvdmVtZW50KHMpOgotIwlIYXZlIHR3byAob3IgbW9yZT8pIGFyYml0cmFyeSBzY3JpcHQocykgdGhhdCBtYXkgYmUgYXNzb2NpYXRlZAotIwl3aXRoIGEgZ2l2ZW4gdGVzdC4gIE9uZSBjb3VsZCBwcmVwYXJlIHRoZSBlbnZpcm9ubWVudCwgdGhlIG90aGVyCi0jCWNvdWxkIGNsZWFuIHVwIHRoZSBlbnZpcm9ubWVudCBhZnRlciBydW5uaW5nIHRoZSB0ZXN0LiAgVGhpcyBjb3VsZAotIwloZWxwIHdoZW4gdGVzdGluZyBsYXJnZSBzdWJzeXN0ZW1zIHRoYXQgbWlnaHQgcmVxdWlyZSBsZWdpdGltYXRlbHkKLSMJYnVpbGRpbmcgb3IgY2hhbmdpbmcgdGhpbmdzIHN1Y2ggdGhhdCB0aGUgdGVzdGFibGUgaXRlbSBtYXkgYmUgCi0jCWFjY2Vzc2VkIGluIHRoZSBmaXJzdCBwbGFjZSAoZWcpLiAuLi4KLSMKLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgVXNhZ2UgbWVzcy4gIChObywgaXQgd29ya3MuKQotIwotVVNBR0U9IlVzYWdlOiBgYmFzZW5hbWUgJDBgIFstaF1bPGFyZ3NfZm9yX2dldHJlc3VsdHM+XSIKLQotdXNhZ2UoKSB7IGVjaG87IGVjaG8gJFVTQUdFOyBjYXQgPDxCTElLIHwgc2VkICdzL14jLy8nIHwgc2VkICcxZCcgfCAkUEFHRVIKLSRVU0FHRV9MT05HCi1CTElLCi1leGl0IDAKLX0KLQotWyAieCQxIiA9ICJ4LWgiIF0gJiYgdXNhZ2UKLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBHbG9iYWxzLgotIwotUFJPR1JBTT0KLUFSR1VNRU5UUz0iJCoiCi0KLXVtYXNrIDAwNzcgIyBqdXN0IHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUKLVNOTVBfVE1QRElSPS90bXAvbmV0LXNubXBkLWV2YWwtZGlyLiQkCi1ybSAtcmYgJFNOTVBfVE1QRElSCi1ta2RpciAkU05NUF9UTVBESVIgfHwgZXhpdCAtMQotY2htb2QgMDcwMCAkU05NUF9UTVBESVIKLVRNUEZJTEU9JFNOTVBfVE1QRElSL2V2YWxfc3VpdGUuc2gkJAotCi1URVNUTElTVEZJTEU9ZXZhbF90ZXN0bGlzdAotCi1FWFBFQ1RFRFNVQ0NFU1NFUz0KLVRFU1RGQUlMVVJFPTAKLQotdGVzdG5hbWU9Ci0KLXN1Y2Nlc3NfY291bnQ9Ci1mYWlsZWRfY291bnQ9Ci0KLSMKLSMgVEVTVExJU1RGSUxFIGZvcm1hdDoKLSMgIAk8ZXhwZWN0ZWRfc3VjY2Vzc2VzPgk8cHJvZ3JhbT4gPGFyZyhzKT4gLi4uCi0jICAJPGV4cGVjdGVkX3N1Y2Nlc3Nlcz4JPHByb2dyYW0+IDxhcmcocyk+IC4uLgotIwkuLi4KLSMKLVRFU1RMSVNUPSJgY2F0ICRURVNUTElTVEZJTEUgfCBzZWQgJ3MvJC8gICA9PT0vJ2AiCi0KLQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIFJ1biBhbGwgdGVzdHMgaW4gdGhlIHRlc3RsaXN0LiAgRm9yIGVhY2ggdGVzdCBkbyB0aGUgZm9sbG93aW5nOgotIwotIwkxKSBOb3RlIHdoZXRoZXIgdGhlIHRlc3QgaXMgU0tJUFBFRCBvciBNSVNTSU5HLgotIwotIwkyKSBSdW4gdGhlIHRlc3Q7IGNvbGxlY3QgdGhlIG51bWJlciBvZiBGQUlMRUQgc3RyaW5ncyBmcm9tIHRoZQotIwkJcmV0dXJuIHZhbHVlIG9mIGV2YWxfb25lcHJvZ3JhbS5zaC4KLSMKLSMJMykgQ291bnQgdGhlIG51bWJlciBvZiBTVUNDRVNTZXMgZnJvbSB0aGUgdGVzdCBvdXRwdXQuCi0jCi0jCTQpIFByaW50IHRoZSByZXN1bHRzLiAgSWYgdGhlcmUgd2VyZSBubyBGQUlMRUQgc3RyaW5ncyAqYW5kKiB0aGUKLSMJCW51bWJlciBvZiBTVUNDRVNTIHN0cmluZ3MgaXMgd2hhdCB3ZSBleHBlY3QsIHNpbXBseQotIwkJbm90ZSB0aGF0IHRoZSB0ZXN0IHBhc3NlZC4gIE90aGVyd2lzZSwgY2F0IHRoZSBvdXRwdXQKLSMJCWdlbmVyYXRlZCBieSBldmFsX29uZXByb2dyYW0uc2ggYW5kIChwb3NzaWJseSkKLSMJCXByaW50IG90aGVyIGRldGFpbHMuCi0jCi1zZXQgeCAkVEVTVExJU1QKLXNoaWZ0Ci0KLXdoaWxlIFsgLW4gIiQxIiBdIDsgZG8KLQkjCi0JIyBQYXJzZSBhZ3VtZW50IHN0cmVhbS4uLgotCSMKLQlFWFBFQ1RFRFNVQ0NFU1NFUz0kMQotCXNoaWZ0Ci0KLQlQUk9HUkFNPQotCXdoaWxlIFsgIiQxIiAhPSAiPT09IiBdIDsgZG8geyBQUk9HUkFNPSIkUFJPR1JBTSAkMSIgOyBzaGlmdCA7IH0gZG9uZQotCXNoaWZ0Ci0KLQl0ZXN0bmFtZT0iYGVjaG8gJFBST0dSQU0gfCBncmVwICdeIycgfCBzZWQgJ3MvXiMvLydgIgotCi0JZWNobyAnKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0tby09PT0rJwotCWVjaG8KLQotCi0KLQkjCi0JIyBEZWNpZGUgd2hldGhlciB0byBza2lwIHRoZSB0ZXN0LCBpZiBpdCdzIG1pc2luZywgZWxzZSBydW4gaXQuCi0JIwotCVsgLW4gIiR0ZXN0bmFtZSIgXSAmJiB7CQkJCQkjIFNraXAgdGhlIHRlc3Q/Ci0JCWVjaG8gIlNLSVBQSU5HIHRlc3QgZm9yIFwiJHRlc3RuYW1lXCIuIgotCQllY2hvCi0JCWNvbnRpbnVlCi0JfQotCVsgISAtZSAiYGVjaG8gJFBST0dSQU0gfCBhd2sgJ3sgcHJpbnQgJDEgfSdgIiBdICYmIHsJIyBNaXNzaW5nIHRlc3Q/Ci0JCVRFU1RGQUlMVVJFPWBleHByICRURVNURkFJTFVSRSArIDFgCi0KLQkJZWNobyAiTUlTU0lORyB0ZXN0IGZvciBcIiRQUk9HUkFNXCIuIgotCQllY2hvCi0JCWNvbnRpbnVlCi0JfQotCi0JZWNobyAiVEVTVElORyBcIiRQUk9HUkFNXCIuLi4iCQkJCSMgQW5ub3VuY2UgdGVzdCEKLQotCi0KLQkjCi0JIyBSdW4gdGhlIHRlc3QgYW5kIGNvbGxlY3QgdGhlIGZhaWxlZF9jb3VudCBhbmQgc3VjY2Vzc19jb3VudC4KLQkjCi0JZXZhbF9vbmVwcm9ncmFtLnNoICRBUkdVTUVOVFMgJFBST0dSQU0gPiRUTVBGSUxFCi0JZmFpbGVkX2NvdW50PSQ/Ci0KLQlzdWNjZXNzX2NvdW50PWBhd2sgJyQoTkYtMSkgPT0gIlNVQ0NFU1M6IiB7IHByaW50ICRORjsgZXhpdCB9JyAkVE1QRklMRWAKLQlbIC16ICIkc3VjY2Vzc19jb3VudCIgXSAmJiBzdWNjZXNzX2NvdW50PTAKLQotCi0JCi0JIwotCSMgT3V0cHV0IGJlc3QtZWZmb3J0IHJlc3VsdHMgb2YgdGhlIHRlc3QgIC1PUi0gIGEgZnVsbHkgc3VjY2Vzc2Z1bCBydW4uCi0JIwotCVsgIiRmYWlsZWRfY291bnQiIC1lcSAwIC1hIFwKLQkJCSIkc3VjY2Vzc19jb3VudCIgLWVxICIkRVhQRUNURURTVUNDRVNTRVMiIF0gJiYKLQl7Ci0JCWVjaG8KLQkJZWNobyAkUFJPR1JBTSBQQVNTRUQJCSMgU3VjY2Vzc2Z1bCwgZnVsbHksIGNvbXBsZXRlZAotCQllY2hvCi0JCQotCQl0cnVlCi0JfSB8fCB7Ci0JCVRFU1RGQUlMVVJFPWBleHByICRURVNURkFJTFVSRSArIDFgCi0KLQkJZWNobwotCQljYXQgJFRNUEZJTEUKLQkJZWNobwotCi0JCVsgIiRzdWNjZXNzX2NvdW50IiAtbmUgJEVYUEVDVEVEU1VDQ0VTU0VTIF0gJiYgewotCQkJZWNobyAiR290ICRzdWNjZXNzX2NvdW50IFNVQ0NFU1NlcyJcCi0JCQkJCQkib3V0IG9mICRFWFBFQ1RFRFNVQ0NFU1NFUy4iCi0JCQllY2hvCi0JCX0KLQkJdHJ1ZQotCX0gICMgZW5kIC0tIGV2YWx1YXRpb24gb2YgYW5kIG91dHB1dCBiYXNlZCB1cG9uIHRlc3Qgc3VjY2Vzcy4KLWRvbmUgICMgZW5kd2hpbGUKLQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIENsZWFudXAsIGV4aXQuCi0jCi1ybSAtZiAkVE1QRklMRQotcm0gLXJmICRTTk1QX1RNUERJUgotCi1leGl0ICRURVNURkFJTFVSRQotCi0KLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9ldmFsX3Rlc3RsaXN0IGIvdGVzdGluZy9ldmFsX3Rlc3RsaXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2ZjBmMWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvZXZhbF90ZXN0bGlzdAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotNwlrdGVzdCAtYQotMTMJc3Rlc3QgLWEJCQotMwkjdGVzdF9rZXljaGFuZ2Uuc2gKLTIJdGVzdF9rdWwuc2gKLTMJZXRlc3QgLWEKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZXZhbF90b29scy5zaCBiL3Rlc3RpbmcvZXZhbF90b29scy5zaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTlkM2FkMS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2V2YWxfdG9vbHMuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw1ODUgKzAsMCBAQAotIwotIyBldmFsX3Rvb2xzLnNoCi0jCi0jIE91dHB1dCBmdW5jdGlvbnMgZm9yIHNjcmlwdCB0ZXN0cy4gIFNvdXJjZSB0aGlzIGZyb20gb3RoZXIgdGVzdCBzY3JpcHRzCi0jIHRvIGVzdGFibGlzaCBhIHN0YW5kYXJkaXplZCByZXBlcnRvcnkgb2YgdGVzdCBmdW5jdGlvbnMuCi0jCi0jCi0jIEV4Y2VwdCB3aGVyZSBub3RlZCwgYWxsIGZ1bmN0aW9ucyByZXR1cm46Ci0jCTAJT24gc3VjY2VzcywJKEJvdXJuZSBTaGVsbCdzIGBgdHJ1ZScnKQotIwlub24tMAlPdGhlcndpc2UuCi0jCi0jIElucHV0IGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGFyZSBkb2N1bWVudGVkIHdpdGggZWFjaCBmdW5jdGlvbi4KLSMKLSMKLSMgWFhYICBTdWdnZXN0aW9uczoKLSMJREVCVUcgT058T0ZGCi0jCWR1bXAgQ0FQVFVSRSBvdXRwdXQgdG8gc3Rkb3V0IGFzIHdlbGwgYXMgdG8ganVua291dHB1dGZpbGUuCi0jCi0KLSMKLSMgT25seSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmUgZXZhbCdlZCBvbmNlCi0jCi1pZiBbICJ4JEVWQUxfVE9PTFNfU0hfRVZBTEVEIiAhPSAieHllcyIgXTsgdGhlbgotICAgIEVWQUxfVE9PTFNfU0hfRVZBTEVEPXllcwotICAgIC4gVEVTVENPTkYuc2gKLQotIwotIyBWYXJpYWJsZXMgdXNlZCBpbiBnbG9iYWwgZW52aXJvbm1lbnQgb2YgY2FsbGluZyBzY3JpcHQuCi0jCi1mYWlsY291bnQ9MAotanVua291dHB1dGZpbGU9IiRTTk1QX1RNUERJUi9vdXRwdXQtYGJhc2VuYW1lICQwYCQkIgotc2VwZXJhdG9yPSItPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09IgotaWYgWyAteiAiJE9LX1RPX1NBVkVfUkVTVUxUIiBdIDsgdGhlbgotT0tfVE9fU0FWRV9SRVNVTFQ9MQotZXhwb3J0IE9LX1RPX1NBVkVfUkVTVUxUCi1maQotCi0KLSMKLSMgSEVBREVSOiByZXR1cm5zIGEgc2luZ2xlIGxpbmUgd2hlbiBTTk1QX0hFQURFUk9OTFkgbW9kZSBhbmQgZXhpdHMuCi0jCi1IRUFERVIoKSB7Ci0gICAgaWYgWyAieCRTTk1QX0hFQURFUk9OTFkiICE9ICJ4IiBdOyB0aGVuCi0gICAgICAgIGVjaG8gdGVzdCAkKgotCWV4aXQgMDsKLSAgICBlbHNlCi0JRUNITyAidGVzdGluZyAkKi4uLiAgIgotCWhlYWRlclN0cj0idGVzdGluZyAkKiIKLSAgICBmaQotfQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1PVVRQVVQoKSB7CSMgPGFueV9hcmd1bWVudHM+Ci0JY2F0IDw8R1JPTksKLQotCi0kKgotCi0KLUdST05LCi19Ci0KLUNBTl9VU0xFRVAoKSB7Ci0gICBpZiBbICIkU05NUF9DQU5fVVNMRUVQIiA9IDAgLW8gIiRTTk1QX0NBTl9VU0xFRVAiID0gMCBdIDsgdGhlbgotICAgICByZXR1cm4gJFNOTVBfQ0FOX1VTTEVFUAotICAgZmkKLSAgIHNsZWVwIC4xID4gL2Rldi9udWxsIDI+JjEKLSAgIGlmIFsgJD8gPSAwIF0gOyB0aGVuCi0gICAgIFNOTVBfQ0FOX1VTTEVFUD0xCi0gICBlbHNlCi0gICAgIFNOTVBfQ0FOX1VTTEVFUD0wCi0gICBmaQotICAgZXhwb3J0IFNOTVBfQ0FOX1VTTEVFUAotfQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1TVUNDRVNTKCkgewkjIDxhbnlfYXJndW1lbnRzPgotCVsgIiRmYWlsY291bnQiIC1uZSAwIF0gJiYgcmV0dXJuCi0JY2F0IDw8R1JPSU5LCi0KLVNVQ0NFU1M6ICQqCi0KLUdST0lOSwotfQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLUZBSUxFRCgpIHsJIyA8cmV0dXJuX3ZhbHVlPiwgPGFueV9hcmd1bWVudHM+Ci0JWyAiJDEiIC1lcSAwIF0gJiYgcmV0dXJuCi0Jc2hpZnQKLQotCWZhaWxjb3VudD1gZXhwciAkZmFpbGNvdW50ICsgMWAKLQljYXQgPDxHUk9OSUsKLQotRkFJTEVEOiAkKgotCi1HUk9OSUsKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLVNLSVAoKSB7Ci0JUkVNT1ZFVEVTVERBVEEKLQllY2hvICJTS0lQUEVEIgotCWV4aXQgMAotfQotCi1JU0RFRklORUQoKSB7Ci0JZ3JlcCAiXiNkZWZpbmUgJDEgIiAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L2FnZW50X21vZHVsZV9jb25maWcuaCA+L2Rldi9udWxsCi19Ci0KLVNLSVBJRk5PVCgpIHsKLQlpZiBJU0RFRklORUQgIiQxIjsgdGhlbgotCSAgICA6Ci0JZWxzZQotCSAgICBTS0lQCi0JZmkKLX0KLQotU0tJUElGKCkgewotCWlmIElTREVGSU5FRCAiJDEiOyB0aGVuCi0JICAgIFNLSVAKLQlmaQotfQotCQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotVkVSSUZZKCkgewkjIDxwYXRoX3RvX2ZpbGUocyk+Ci0JbWlzc2luZ2ZpbGVzPSIiCi0KLQlmb3IgZiBpbiAkKjsgZG8KLQkJWyAtZiAiJGYiIF0gJiYgY29udGludWUKLQkJZWNobyAiRkFJTEVEOiBDYW5ub3QgZmluZCBmaWxlIFwiJGZcIi4iCi0JCW1pc3NpbmdmaWxlcz10cnVlCi0JZG9uZQotCi0JWyAiJG1pc3NpbmdmaWxlcyIgPSB0cnVlIF0gJiYgZXhpdCAxMDAwCi19Ci0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLVNUQVJUVEVTVCgpIHsJCi0JWyAhIC1mICIkanVua291dHB1dGZpbGUiIF0gJiYgewotCQl0b3VjaCAkanVua291dHB1dGZpbGUKLQkJcmV0dXJuCi0JfQotCWVjaG8gIkZBSUxFRDogT3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHM6IFwiJGp1bmtvdXRwdXRmaWxlXCIuIgotCWV4aXQgMTAwMAotfQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1TVE9QVEVTVCgpIHsKLQlybSAtZiAiJGp1bmtvdXRwdXRmaWxlIgotfQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1SRU1PVkVURVNUREFUQSgpIHsKLSMJRUNITyAicmVtb3ZpbmcgJFNOTVBfVE1QRElSICAiCi0Jcm0gLXJmICRTTk1QX1RNUERJUgotfQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jIENhcHR1cmVzIG91dHB1dCBmcm9tIGNvbW1hbmQsIGFuZCByZXR1cm5zIHRoZSBjb21tYW5kJ3MgZXhpdCBjb2RlLgotQ0FQVFVSRSgpIHsJIyA8Y29tbWFuZF93aXRoX2FyZ3VtZW50c190b19leGVjdXRlPgotICAgIGVjaG8gJCogPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKLQotCWlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCi0JCWNhdCA8PEtOT1JHCi0KLUVYRUNVVElORzogJCoKLQotS05PUkcKLQotCWZpCi0JKCAkKiAyPiYxICkgPiAkanVua291dHB1dGZpbGUgMj4mMQotCVJDPSQ/Ci0KLQlpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDEgXTsgdGhlbgotCQllY2hvICJDb21tYW5kIE91dHB1dDogIgotCQllY2hvICJNSUJESVIgJE1JQkRJUlMgJE1JQlMiCi0JCWVjaG8gIiRzZXBlcmF0b3IiCi0JCWNhdCAkanVua291dHB1dGZpbGUgfCBzZWQgJ3MvXi8gIC8nCi0JCWVjaG8gIiRzZXBlcmF0b3IiCi0JZmkKLQlyZXR1cm4gJFJDCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jIERlbGF5IHRvIGxldCBwcm9jZXNzZXMgc2V0dGxlCi1ERUxBWSgpIHsKLSAgICBpZiBbICIkU05NUF9TTEVFUCIgIT0gIjAiIF0gOyB0aGVuCi0Jc2xlZXAgJFNOTVBfU0xFRVAKLSAgICBmaQotfQotCi1TQVZFX1JFU1VMVFMoKSB7Ci0gICByZWFsX3JldHVybl92YWx1ZT0kcmV0dXJuX3ZhbHVlCi19Ci0KLSMKLSMgQ2hlY2tzIHRoZSBvdXRwdXQgcmVzdWx0IGFnYWluc3Qgd2hhdCB3ZSBleHBlY3QuCi0jICAgU2V0cyByZXR1cm5fdmFsdWUgdG8gMCBvciAxLgotIwotRVhQRUNUUkVTVUxUKCkgewotICBpZiBbICRPS19UT19TQVZFX1JFU1VMVCAtbmUgMCBdIDsgdGhlbgotICAgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gIiQxIiBdOyB0aGVuCi0JcmV0dXJuX3ZhbHVlPTAKLSAgICBlbHNlCi0JcmV0dXJuX3ZhbHVlPTEKLSAgICBmaQotICBmaQotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIyBSZXR1cm5zOiBDb3VudCBvZiBtYXRjaGVkIGxpbmVzLgotIwotQ0hFQ0soKSB7CSMgPHBhdHRlcm5fdG9fbWF0Y2g+Ci0gICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KLQllY2hvIC1uICJjaGVja2luZyBvdXRwdXQgZm9yIFwiJCpcIi4uLiIKLSAgICBmaQotCi0gICAgcnZhbD1gZ3JlcCAtYyAiJCoiICIkanVua291dHB1dGZpbGUiIDI+L2Rldi9udWxsYAotCi0gICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KLQllY2hvICIkcnZhbCBtYXRjaGVzIGZvdW5kIgotICAgIGZpCi0KLSAgICBzbm1wX2xhc3RfdGVzdF9yZXN1bHQ9JHJ2YWwKLSAgICBFWFBFQ1RSRVNVTFQgMSAgIyBkZWZhdWx0Ci0gICAgcmV0dXJuICRydmFsCi19Ci0KLUNIRUNLRklMRSgpIHsKLSAgICBmaWxlPSQxCi0gICAgaWYgWyAieCRmaWxlIiA9ICJ4IiBdIDsgdGhlbgotICAgICAgICBmaWxlPSRqdW5rb3V0cHV0ZmlsZQotICAgIGZpCi0gICAgc2hpZnQKLSAgICBteW9sZGp1bmtvdXRwdXRmaWxlPSIkanVua291dHB1dGZpbGUiCi0gICAganVua291dHB1dGZpbGU9IiRmaWxlIgotICAgIENIRUNLICQqCi0gICAganVua291dHB1dGZpbGU9IiRteW9sZGp1bmtvdXRwdXRmaWxlIgotfQotCi1DSEVDS1RSQVBEKCkgewotICAgIENIRUNLRklMRSAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUgJEAKLX0KLQotQ0hFQ0tUUkFQRE9SRElFKCkgewotICAgIENIRUNLT1JESUUgJEAgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCi19Ci0KLUNIRUNLQUdFTlQoKSB7Ci0gICAgQ0hFQ0tGSUxFICRTTk1QX1NOTVBEX0xPR19GSUxFICRACi19Ci0KLVdBSVRGT1JBR0VOVCgpIHsKLSAgICBXQUlURk9SICIkQCIgJFNOTVBfU05NUERfTE9HX0ZJTEUKLX0KLQotV0FJVEZPUlRSQVBEKCkgewotICAgIFdBSVRGT1IgIiRAIiAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUKLX0KLQotV0FJVEZPUigpIHsKLSAgIyMgc2F2ZSB0aGUgcHJldmlvdXMgc2F2ZSBzdGF0ZSBhbmQgdGVzdCByZXN1bHQKLSAgICBzYXZlX3N0YXRlPSRPS19UT19TQVZFX1JFU1VMVAotICAgIHNhdmVfdGVzdD0kc25tcF9sYXN0X3Rlc3RfcmVzdWx0Ci0gICAgT0tfVE9fU0FWRV9SRVNVTFQ9MAotCi0gICAgc2xlZXB0aW1lPSRTTk1QX1NMRUVQCi0gICAgb2xkc2xlZXB0aW1lPSRTTk1QX1NMRUVQCi0gICAgaWYgWyAiJDEiICE9ICIiIF0gOyB0aGVuCi0JQ0FOX1VTTEVFUAotCWlmIFsgJFNOTVBfQ0FOX1VTTEVFUCA9IDEgXSA7IHRoZW4KLQkgIHNsZWVwdGltZT1gZXhwciAkU05NUF9TTEVFUCAnKicgNTBgCi0gICAgICAgICAgU05NUF9TTEVFUD0uMQotCWVsc2UgCi0JICBzbGVlcHRpbWU9YGV4cHIgJFNOTVBfU0xFRVAgJyonIDVgCi0JICBTTk1QX1NMRUVQPTEKLQlmaQotICAgICAgICB3aGlsZSBbICRzbGVlcHRpbWUgLWd0IDAgXSA7IGRvCi0JICBpZiBbICIkMiIgPSAiIiBdIDsgdGhlbgotICAgICAgICAgICAgQ0hFQ0sgIiRAIgotICAgICAgICAgIGVsc2UKLQkgICAgQ0hFQ0tGSUxFICIkMiIgIiQxIgotCSAgZmkKLSAgICAgICAgICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAiIiBdIDsgdGhlbgotICAgICAgICAgICAgICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtZ3QgMCBdIDsgdGhlbgotCSAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICBmaQotCSAgZmkKLSAgICAgICAgICBERUxBWQotICAgICAgICAgIHNsZWVwdGltZT1gZXhwciAkc2xlZXB0aW1lIC0gMWAKLSAgICAgICAgZG9uZQotICAgICAgICBTTk1QX1NMRUVQPSRvbGRzbGVlcHRpbWUKLSAgICBlbHNlCi0gICAgICAgIGlmIFsgJFNOTVBfU0xFRVAgLW5lIDAgXSA7IHRoZW4KLQkgICAgc2xlZXAgJFNOTVBfU0xFRVAKLSAgICAgICAgZmkKLSAgICBmaQotCi0gICMjIHJlc3RvcmUgdGhlIHByZXZpb3VzIHNhdmUgc3RhdGUgYW5kIHRlc3QgcmVzdWx0Ci0gICAgT0tfVE9fU0FWRV9SRVNVTFQ9JHNhdmVfc3RhdGUKLSAgICBzbm1wX2xhc3RfdGVzdF9yZXN1bHQ9JHNhdmVfdGVzdAotfSAgICAKLQotIyBXQUlURk9ST1JESUUgImdyZXAgc3RyaW5nIiBbImZpbGUiXQotV0FJVEZPUk9SRElFKCkgewotICAgIFdBSVRGT1IgIiQxIiAiJDIiCi0gICAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgICAgICBGSU5JU0hFRAotICAgIGZpCi0gICAgRUNITyAiLiIKLX0KLQotIyBDSEVDS09SRElFICJncmVwIHN0cmluZyIgWyJmaWxlIl0gLi4gRkFJTCBpZiAiZ3JlcCBzdHJpbmciIGlzICpub3QqIGZvdW5kCi1DSEVDS09SRElFKCkgewotICAgIENIRUNLRklMRSAiJDIiICIkMSIKLSAgICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDAgXSA7IHRoZW4KLSAgICAgICAgRklOSVNIRUQKLSAgICBmaQotICAgIEVDSE8gIi4iCi19Ci0KLSMgQ0hFQ0tBTkRESUUgImdyZXAgc3RyaW5nIiBbImZpbGUiXSAuLiBGQUlMIGlmICJncmVwIHN0cmluZyIgKmlzKiBmb3VuZAotQ0hFQ0tBTkRESUUoKSB7Ci0gICAgQ0hFQ0tGSUxFICIkMiIgIiQxIgotICAgIEVYUEVDVFJFU1VMVCAwICMgbWFrZSBzdXJlIHJldHVybl92YWx1ZSBnZXRzIHNldCBjb3JyZWN0bHkKLSAgICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgICAgIEZJTklTSEVECi0gICAgZmkKLSAgICBFQ0hPICIuIgotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIyBSZXR1cm5zOiBDb3VudCBvZiBtYXRjaGVkIGxpbmVzLgotIwotQ0hFQ0tFWEFDVCgpIHsJIyA8cGF0dGVybl90b19tYXRjaF9leGFjdGx5PgotCXJ2YWw9YGVncmVwIC1jICJeJCpcJHxeJCpbXmEtekEtWjAtOV9dfFteYS16QS1aMC05X10kKlwkfFteYS16QS1aMC05X10kKlteYS16QS1aMC05X10iICIkanVua291dHB1dGZpbGUiIDI+L2Rldi9udWxsYAotCXNubXBfbGFzdF90ZXN0X3Jlc3VsdD0kcnZhbAotCUVYUEVDVFJFU1VMVCAxICAjIGRlZmF1bHQKLQlyZXR1cm4gJHJ2YWwKLX0KLQotQ09ORklHQUdFTlQoKSB7Ci0gICAgaWYgWyAieCRTTk1QX0NPTkZJR19GSUxFIiA9ICJ4IiBdOyB0aGVuCi0JZWNobyAiJDA6IGZhaWxlZCBiZWNhdXNlIHZhcjogU05NUF9DT05GSUdfRklMRSB3YXNuJ3Qgc2V0IgotCWV4aXQgMTsKLSAgICBmaQotICAgIGVjaG8gJCogPj4gJFNOTVBfQ09ORklHX0ZJTEUKLX0KLQotQ09ORklHVFJBUEQoKSB7Ci0gICAgaWYgWyAieCRTTk1QVFJBUERfQ09ORklHX0ZJTEUiID0gIngiIF07IHRoZW4KLQllY2hvICIkMDogZmFpbGVkIGJlY2F1c2UgdmFyOiBTTk1QVFJBUERfQ09ORklHX0ZJTEUgd2Fzbid0IHNldCIKLQlleGl0IDE7Ci0gICAgZmkKLSAgICBlY2hvICQqID4+ICRTTk1QVFJBUERfQ09ORklHX0ZJTEUKLX0KLQotIwotIyBjb21tb24gdG8gU1RBUlRBR0VOVCBhbmQgU1RBUlRUUkFQRAotIyBsb2cgY29tbWFuZCB0byAiaW52b2tlZCIgZmlsZQotIyBkZWxheSBhZnRlciBjb21tYW5kIHRvIGFsbG93IGZvciBzZXR0bGUKLSMKLVNUQVJUUFJPRygpIHsKLSAgICBpZiBbICJ4JERZTkFNSUNfQU5BTFlaRVIiICE9ICJ4IiBdOyB0aGVuCi0gICAgICAgIENPTU1BTkQ9IiREWU5BTUlDX0FOQUxZWkVSICRDT01NQU5EIgotICAgIGZpCi0gICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KLQllY2hvICIkQ0ZHX0ZJTEUgY29udGFpbnM6ICIKLQlpZiBbIC1mICRDRkdfRklMRSBdOyB0aGVuCi0JICAgIGNhdCAkQ0ZHX0ZJTEUKLQllbHNlCi0JICAgIGVjaG8gIltubyBjb25maWcgZmlsZV0iCi0JZmkKLSAgICBmaQotICAgIGlmIHRlc3QgLWYgJENGR19GSUxFOyB0aGVuCi0JQ09NTUFORD0iJENPTU1BTkQgLUMgLWMgJENGR19GSUxFIgotICAgIGZpCi0gICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KLQllY2hvICJydW5uaW5nOiAkQ09NTUFORCIKLSAgICBmaQotICAgIGlmIFsgIngkUE9SVF9TUEVDIiAhPSAieCIgXTsgdGhlbgotICAgICAgICBDT01NQU5EPSIkQ09NTUFORCAkUE9SVF9TUEVDIgotICAgIGZpCi0gICAgZWNobyAkQ09NTUFORCA+PiAkU05NUF9UTVBESVIvaW52b2tlZAotICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgotICAgICAgIyMgJENPTU1BTkQgPiAkTE9HX0ZJTEUuc3Rkb3V0IDI+JjEgJgotICAgICAgQ09NTUFORD0iY21kLmV4ZSAvL2Mgc3RhcnQgLy9taW4gJENPTU1BTkQiCi0gICAgICBzdGFydCAkQ09NTUFORCA+ICRMT0dfRklMRS5zdGRvdXQgMj4mMQotICAgIGVsc2UKLSAgICAgICRDT01NQU5EID4gJExPR19GSUxFLnN0ZG91dCAyPiYxCi0gICAgZmkKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLVNUQVJUQUdFTlQoKSB7Ci0gICAgU05NUERTVEFSVEVEPTEKLSAgICBDT01NQU5EPSJzbm1wZCAkU05NUF9GTEFHUyAtciAtVSAtcCAkU05NUF9TTk1QRF9QSURfRklMRSAtTGYgJFNOTVBfU05NUERfTE9HX0ZJTEUgJEFHRU5UX0ZMQUdTIgotICAgIENGR19GSUxFPSRTTk1QX0NPTkZJR19GSUxFCi0gICAgTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgICBQT1JUX1NQRUM9IiRTTk1QX1NOTVBEX1BPUlQiCi0gICAgaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiAhPSAieCIgXTsgdGhlbgotICAgICAgICBQT1JUX1NQRUM9IiR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1BPUlRfU1BFQ30iCi0gICAgZmkKLSAgICBTVEFSVFBST0cKLSAgICBXQUlURk9SQUdFTlQgIk5FVC1TTk1QIHZlcnNpb24iCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi1TVEFSVFRSQVBEKCkgewotICAgIFRSQVBEU1RBUlRFRD0xCi0gICAgQ09NTUFORD0ic25tcHRyYXBkIC1kIC1wICRTTk1QX1NOTVBUUkFQRF9QSURfRklMRSAtTGYgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFICRUUkFQRF9GTEFHUyIKLSAgICBDRkdfRklMRT0kU05NUFRSQVBEX0NPTkZJR19GSUxFCi0gICAgTE9HX0ZJTEU9JFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCi0gICAgUE9SVF9TUEVDPSIkU05NUF9TTk1QVFJBUERfUE9SVCIKLSAgICBpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiICE9ICJ4IiBdOyB0aGVuCi0gICAgICAgIFBPUlRfU1BFQz0iJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7UE9SVF9TUEVDfSIKLSAgICBmaQotICAgIFNUQVJUUFJPRwotICAgIFdBSVRGT1JUUkFQRCAiTkVULVNOTVAgdmVyc2lvbiIKLX0KLQotIyMgc2VuZGluZyBTSUdIVVAgZm9yIHJlY29uZmlndXJhdGlvbgotIwotSFVQUFJPRygpIHsKLSAgICBpZiBbIC1mICQxIF07IHRoZW4KLSAgICAgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCi0gICAgICAgICAgQ09NTUFORD0nZWNobyAiU2tpcHBpbmcgU0lHSFVQIChub3QgcG9zc2libGUgd2l0aCBNaW5HVykiJwotICAgICAgICBlbHNlCi0gICAgICAgICAgQ09NTUFORD0ia2lsbCAtSFVQIGBjYXQgJDFgIgotICAgICAgICBmaQotCWVjaG8gJENPTU1BTkQgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKLQkkQ09NTUFORCA+IC9kZXYvbnVsbCAyPiYxCi0gICAgZmkKLX0KLQotSFVQQUdFTlQoKSB7Ci0gICAgSFVQUFJPRyAkU05NUF9TTk1QRF9QSURfRklMRQotICAgIGlmIFsgIngkT1NUWVBFIiAhPSAieG1zeXMiIF07IHRoZW4KLSAgICAgICAgV0FJVEZPUkFHRU5UICJyZXN0YXJ0ZWQiCi0gICAgZmkKLX0KLQotSFVQVFJBUEQoKSB7Ci0gICAgSFVQUFJPRyAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUKLSAgICBpZiBbICJ4JE9TVFlQRSIgIT0gInhtc3lzIiBdOyB0aGVuCi0gICAgICAgIFdBSVRGT1JUUkFQRCAicmVzdGFydGVkIgotICAgIGZpCi19Ci0KLQotIyMgdXNlZCBieSBTVE9QQUdFTlQgYW5kIFNUT1BUUkFQRAotIyBkZWxheSBiZWZvcmUga2lsbCB0byBhbGxvdyBwcmV2aW91cyBhY3Rpb24gdG8gZmluaXNoCi0jICAgIHRoaXMgaXMgZXNwZWNpYWxseSBpbXBvcnRhbnQgZm9yIGludGVyYWN0aW9uIGJldHdlZW4KLSMgICAgbWFzdGVyIGFnZW50IGFuZCBzdWIgYWdlbnQuCi1TVE9QUFJPRygpIHsKLSAgICBpZiBbIC1mICQxIF07IHRoZW4KLSAgICAgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCi0gICAgICAgICAgQ09NTUFORD0icHNraWxsLmV4ZSBgY2F0ICQxYCIKLSAgICAgICAgZWxzZQotICAgICAgICAgIENPTU1BTkQ9ImtpbGwgLVRFUk0gYGNhdCAkMWAiCi0gICAgICAgIGZpCi0JZWNobyAkQ09NTUFORCA+PiAkU05NUF9UTVBESVIvaW52b2tlZAotCSRDT01NQU5EID4gL2Rldi9udWxsIDI+JjEKLSAgICBmaQotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotU1RPUEFHRU5UKCkgewotICAgIFNBVkVfUkVTVUxUUwotICAgIFNUT1BQUk9HICRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gICAgaWYgWyAieCRPU1RZUEUiICE9ICJ4bXN5cyIgXTsgdGhlbgotICAgICAgICBXQUlURk9SQUdFTlQgInNodXR0aW5nIGRvd24iCi0gICAgZmkKLSAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDEgXTsgdGhlbgotCWVjaG8gIkFnZW50IE91dHB1dDoiCi0JZWNobyAiJHNlcGVyYXRvciBbc3Rkb3V0XSIKLQljYXQgJFNOTVBfU05NUERfTE9HX0ZJTEUuc3Rkb3V0Ci0JZWNobyAiJHNlcGVyYXRvciBbbG9nZmlsZV0iCi0JY2F0ICRTTk1QX1NOTVBEX0xPR19GSUxFCi0JZWNobyAiJHNlcGVyYXRvciIKLSAgICBmaQotfQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQotIwotU1RPUFRSQVBEKCkgewotICAgIFNBVkVfUkVTVUxUUwotICAgIFNUT1BQUk9HICRTTk1QX1NOTVBUUkFQRF9QSURfRklMRQotICAgIGlmIFsgIngkT1NUWVBFIiAhPSAieG1zeXMiIF07IHRoZW4KLSAgICAgICAgV0FJVEZPUlRSQVBEICJTdG9wcGVkIgotICAgIGZpCi0gICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KLQllY2hvICJzbm1wdHJhcGQgT3V0cHV0OiIKLQllY2hvICIkc2VwZXJhdG9yIFtzdGRvdXRdIgotCWNhdCAkU05NUF9TTk1QVFJBUERfTE9HX0ZJTEUuc3Rkb3V0Ci0JZWNobyAiJHNlcGVyYXRvciBbbG9nZmlsZV0iCi0JY2F0ICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQotCWVjaG8gIiRzZXBlcmF0b3IiCi0gICAgZmkKLX0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KLSMKLUZJTklTSEVEKCkgewotCi0gICAgIyMgbm8gbW9yZSBjaGFuZ2VzIHRvIHRlc3QgcmVzdWx0LgotICAgIE9LX1RPX1NBVkVfUkVTVUxUPTAKLQotICAgIGlmIFsgIiRTTk1QRFNUQVJURUQiID0gIjEiIF0gOyB0aGVuCi0gICAgICBTVE9QQUdFTlQKLSAgICBmaQotICAgIGlmIFsgIiRUUkFQRFNUQVJURUQiID0gIjEiIF0gOyB0aGVuCi0gICAgICBTVE9QVFJBUEQKLSAgICBmaQotICAgIGZvciBwZmlsZSBpbiAkU05NUF9UTVBESVIvKnBpZCogOyBkbwotICAgICAgICBpZiBbICJ4JHBmaWxlIiA9ICJ4JFNOTVBfVE1QRElSLypwaWQqIiBdOyB0aGVuCi0gICAgICAgICAgICBFQ0hPICIobm8gcGlkIGZpbGUocykgZm91bmQpICIKLSAgICAgICAgICAgIGJyZWFrCi0gICAgICAgIGZpCi0gICAgICAgIGlmIFsgISAtZiAkcGZpbGUgXTsgdGhlbgotICAgICAgICAgICAgRUNITyAiKCckcGZpbGUnIGRpc2FwcGVhcmVkKSAiCi0gICAgICAgICAgICBjb250aW51ZQotICAgICAgICBmaQotCXBpZD1gY2F0ICRwZmlsZWAKLQlwcyAtZSAyPi9kZXYvbnVsbCB8IGVncmVwICJeWwkgXSokcGlkWwkgXSsiID4gL2Rldi9udWxsIDI+JjEKLQlpZiBbICQ/ID0gMCBdIDsgdGhlbgotCSAgICBTTk1QX1NBVkVfVE1QRElSPXllcwotICAgICAgICAgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCi0gICAgICAgICAgICAgIENPTU1BTkQ9InBza2lsbC5leGUgJHBpZCIKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgQ09NTUFORD0ia2lsbCAtOSAkcGlkIgotICAgICAgICAgICAgZmkKLQkgICAgZWNobyAkQ09NTUFORCAiKCRwZmlsZSkiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCi0JICAgICRDT01NQU5EID4gL2Rldi9udWxsIDI+JjEKLQkgICAgcmV0dXJuX3ZhbHVlPTEKLQlmaQotICAgIGRvbmUKLSAgICBpZiBbICJ4JHJlYWxfcmV0dXJuX3ZhbHVlIiAhPSAieDAiIF07IHRoZW4KLQlpZiBbIC1zIGNvcmUgXSA7IHRoZW4KLQkgICAgIyBYWCBob3BlIHRoYXQgb25seSBvbmUgcHJvZyBjb3JlcyAhCi0JICAgIGNwIGNvcmUgJFNOTVBfVE1QRElSL2NvcmUuJCQKLQkgICAgcm0gLWYgY29yZQotCWZpCi0JZWNobyAiRkFJTCIKLQllY2hvICIkaGVhZGVyU3RyLi4uRkFJTCIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKLQlleGl0ICRyZWFsX3JldHVybl92YWx1ZQotICAgIGZpCi0KLSAgICBlY2hvICJvayIKLSAgICBlY2hvICIkaGVhZGVyU3RyLi4ub2siID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCi0KLSAgICBpZiBbICJ4JFNOTVBfU0FWRV9UTVBESVIiICE9ICJ4eWVzIiBdOyB0aGVuCi0JUkVNT1ZFVEVTVERBVEEKLSAgICBmaQotICAgIGV4aXQgJHJlYWxfcmV0dXJuX3ZhbHVlCi19Ci0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCi0jCi1WRVJCT1NFX09VVCgpIHsKLSAgICBpZiBbICRTTk1QX1ZFUkJPU0UgPiAkMSBdOyB0aGVuCi0Jc2hpZnQKLQllY2hvICIkKiIKLSAgICBmaQotfQotCi1maSAjIE9ubHkgYWxsb3cgb3Vyc2VsdmVzIHRvIGJlIGV2YWwnZWQgb25jZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjFjb25maWcgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MWNvbmZpZwpzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdGluZy90ZXN0cy9TdjFjb25maWcKcmVuYW1lIHRvIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YxY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2MmNjb25maWcgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2MmNjb25maWcKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RpbmcvdGVzdHMvU3YyY2NvbmZpZwpyZW5hbWUgdG8gdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjJjY29uZmlnCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1ZGY1YjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M2NvbmZpZwpAQCAtMCwwICsxLDQ2IEBACisjIS9iaW4vc2gKKworU0tJUElGTk9UIE5FVFNOTVBfU0VDTU9EX1VTTQorCitbICJ4JFNOTVBfU01VWF9TT0NLRVQiID0gIngiIF0gJiYgU05NUF9TTVVYX1NPQ0tFVD0xLjAuMC4wCisKK0NPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCitDT05GSUdBR0VOVCBzbXV4c29ja2V0ICRTTk1QX1NNVVhfU09DS0VUCisKKyMgWFhYOiBhdXRvLXN3aXRjaCB0byBhIHN1cHBvcnRlZCBwcm90b2NvbCBpbnN0ZWFkLgoraWYgdGVzdCAieCRERUZBVVRIVFlQRSIgPSAieCI7IHRoZW4KKyAgICBpZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgorCURFRkFVVEhUWVBFPSJTSEEiCisgICAgZWxzZQorCSAgICBERUZBVVRIVFlQRT0iTUQ1IgorICAgIGZpCitmaQorCitpZiB0ZXN0ICJ4JERFRlBSSVZUWVBFIiA9ICJ4IjsgdGhlbgorICAjIFhYWDogSEFWRV9BRVMgZGVwZW5kcyBvbiBjcHAgbG9naWMsIHNvIHdlIG5lZWQgdG8gdGVzdCBmb3IgbG93ZXItbGV2ZWwgc3R1ZmYKKyAgaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICBpZiBncmVwICdeI2RlZmluZSBIQVZFX09QRU5TU0xfQUVTX0ggMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCisgICAgICBpZiBncmVwICdeI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICAgICAgREVGUFJJVlRZUEU9IkFFUyIKKyAgICAgIGVsc2UKKyAgICAgICAgREVGUFJJVlRZUEU9IkRFUyIKKyAgICAgIGZpCisgICAgZWxzZQorICAgICAgREVGUFJJVlRZUEU9IkRFUyIKKyAgICBmaQorICBlbHNlCisgICAgREVGUFJJVlRZUEU9IiIKKyAgZmkKK2ZpCisKK0NPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgaW5pdGlhbCAkREVGQVVUSFRZUEUgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAkREVGUFJJVlRZUEUKK0NPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgdGVtcGxhdGUgJERFRkFVVEhUWVBFIHRlbXBsYXRlX3Rlc3RfcGFzc19hdXRoICRERUZQUklWVFlQRQorQ09ORklHQUdFTlQgcnd1c2VyIGluaXRpYWwgbm9hdXRoCitDT05GSUdBR0VOVCByd3VzZXIgbmV3dGVzdHVzZXIKKworTk9BVVRIVEVTVEFSR1M9Ii1sIG5hbnAgLXUgaW5pdGlhbCAtdiAzIgorQVVUSFRFU1RBUkdTPSItbCBhbnAgLXUgaW5pdGlhbCAtdiAzIC1hICRERUZBVVRIVFlQRSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIgorUFJJVlRFU1RBUkdTPSItbCBhcCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXggJERFRlBSSVZUWVBFIC1YIGluaXRpYWxfdGVzdF9wYXNzX2F1dGgiCisKK0FVVEhOT1BBU1NURVNUQVJHUz0iLWwgYW5wIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUiCitQUklWTk9QQVNTVEVTVEFSR1M9Ii1sIGFwIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUgLXggJERFRlBSSVZUWVBFIgpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdhZ2VudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYWdlbnQKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RpbmcvdGVzdHMvU3YzdXNtY29uZmlnYWdlbnQKcmVuYW1lIHRvIHRlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYWdlbnQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3YzdXNtY29uZmlnYmFzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmUxZWIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWdiYXNlCkBAIC0wLDAgKzEsMTAwIEBACisjIS9iaW4vc2gKKyMKKyMgU05NUHYzIGJhc2UgY29uZmlnCisjCisjIElucHV0K091dHB1dCB2YXJpYWJsZXM6CisjICAgREVGU0VDVVJJVFlMRVZFTCAgICAgICAgIG5vQXV0aE5vUHJpdnxhdXRoTm9Qcml2fGF1dGhQcml2CisjICAgREVGQVVUSFRZUEUgICAgICAgICAgICAgIE1ENXxTSEEKKyMgICBERUZQUklWVFlQRSAgICAgICAgICAgICAgREVTfEFFUworIyAgIFRFU1ROT0FVVEhVU0VSICAgICAgICAgICA8bXl1c2VyPgorIyAgIFRFU1QoQVVUSHxQUklWKVVTRVJbMl0gICA8bXl1c2VyPgorIyAgIFRFU1QoQVVUSHxQUklWKVBBU1NbMl0gICA8bXlwYXNzPgorIworIyBJbnB1dCB2YXJpYWJsZXM6CisjICAgQ1JFQVRFVVNFUkVOR0lORUlEICAgICAgIDxlbmdpbmVpZD4KKyMKKyMgT3V0cHV0IHZhcmlhYmxlczoKKyMgICBDUkVBVEVBVVRIVVNFUlsyXQorIyAgIENSRUFURVBSSVZVU0VSWzJdCisjICAgQ1JFQVRFTk9BVVRIVVNFUgorIyAgIFRFU1ROT0FVVEhBUkdTCisjICAgVEVTVEFVVEhBUkdTW05PUEFTU11bMl0KKyMgICBURVNUUFJJVkFSR1NbTk9QQVNTXVsyXQorIworCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKKyMjIERlZmF1bHRzCitbICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gIngiIF0gJiYgREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgorCisjIyBhdXRvLXByb2JlIGJlc3QgYXV0aCB0eXBlCitpZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgorICBNQVhBVVRIVFlQRT1TSEEKK2VsaWYgZ3JlcCAnXiNkZWZpbmUgTkVUU05NUF9VU0VfSU5URVJOQUxfQ1JZUFRPIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgorICBNQVhBVVRIVFlQRT1TSEEKK2Vsc2UKKyAgIyBNRDUgaXMgYWx3YXlzIGF2YWlsYWJsZSBpbnRlcm5hbGx5CisgIE1BWEFVVEhUWVBFPU1ENQorZmkKKworIyMgYXV0by1wcm9iZSBiZXN0IHByaXYgdHlwZQorIyBYWFg6IEhBVkVfQUVTIGRlcGVuZHMgb24gY3BwIGxvZ2ljLCBzbyB3ZSBuZWVkIHRvIHRlc3QgZm9yIGxvd2VyLWxldmVsIHN0dWZmCitpZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsOyB0aGVuCisgIGlmIGdyZXAgJ14jZGVmaW5lIEhBVkVfT1BFTlNTTF9BRVNfSCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCAmJiBcCisgICBncmVwICdeI2RlZmluZSBIQVZFX0FFU19DRkIxMjhfRU5DUllQVCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KKyAgICBNQVhQUklWVFlQRT1BRVMKKyAgZWxzZQorICAgIE1BWFBSSVZUWVBFPURFUworICBmaQorZWxpZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9DUllQVE8gMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGw7IHRoZW4KKyAgICBNQVhQUklWVFlQRT1BRVMKK2Vsc2UKKyAgICBNQVhQUklWVFlQRT0iIgorZmkKKworQ1JFQVRFVVNFUkNNRD0iY3JlYXRlVXNlciIKK1sgIngkQ1JFQVRFVVNFUkVOR0lORUlEIiAhPSAieCIgXSAmJiBDUkVBVEVVU0VSQ01EPSIkQ1JFQVRFVVNFUkNNRCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEIgorCisjIyBhdXRoIHNldHVwCitpZiBbICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gInhhdXRoUHJpdiIgLW8gIngkREVGU0VDVVJJVFlMRVZFTCIgPSAieGF1dGhOb1ByaXYiIF07IHRoZW4KKyAgWyAieCRNQVhBVVRIVFlQRSIgPSAieCIgXSAmJiBTS0lQIE1BWEFVVEhUWVBFIG5vdCBzZXQKKyAgWyAieCRERUZBVVRIVFlQRSIgPSAieFNIQSIgLWEgIngkTUFYQVVUSFRZUEUiICE9ICJ4U0hBIiBdICYmIFNLSVAgQ2Fubm90IGRvIFNIQQorICBbICJ4JERFRkFVVEhUWVBFIiA9ICJ4IiBdICYmIERFRkFVVEhUWVBFPSRNQVhBVVRIVFlQRQorICAjIHVzZXIvcGFzcyBzZXR1cCAoWFhYOiByYW5kb21pemUpCisgIFsgIngkVEVTVEFVVEhVU0VSIiA9ICJ4IiBdICYmIFRFU1RBVVRIVVNFUj1pbml0aWFsX2F1dGgKKyAgWyAieCRURVNUQVVUSFVTRVIyIiA9ICJ4IiBdICYmIFRFU1RBVVRIVVNFUjI9dGVtcGxhdGVfYXV0aAorICBbICJ4JFRFU1RBVVRIUEFTUyIgPSAieCIgXSAmJiBURVNUQVVUSFBBU1M9aW5pdGlhbF90ZXN0X3Bhc3NfYXV0aAorICBbICJ4JFRFU1RBVVRIUEFTUzIiID0gIngiIF0gJiYgVEVTVEFVVEhQQVNTMj10ZW1wbGF0ZV90ZXN0X3Bhc3NfYXV0aAorICBDUkVBVEVBVVRIVVNFUj0iJENSRUFURVVTRVJDTUQgJFRFU1RBVVRIVVNFUiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUyIKKyAgQ1JFQVRFQVVUSFVTRVIyPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVEFVVEhVU0VSMiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUzIiCisgICMgY29tbWFuZCBhcmdzCisgIFRFU1RBVVRIQVJHU05PUEFTUz0iLXYgMyAtbCBhbnAgLXUgJFRFU1RBVVRIVVNFUiAtYSAkREVGQVVUSFRZUEUiCisgIFRFU1RBVVRIQVJHU05PUEFTUzI9Ii12IDMgLWwgYW5wIC11ICRURVNUQVVUSFVTRVIyIC1hICRERUZBVVRIVFlQRSIKKyAgVEVTVEFVVEhBUkdTPSIkVEVTVEFVVEhBUkdTTk9QQVNTIC1BICRURVNUQVVUSFBBU1MiCisgIFRFU1RBVVRIQVJHUzI9IiRURVNUQVVUSEFSR1NOT1BBU1MyIC1BICRURVNUQVVUSFBBU1MyIgorZmkKKworIyMgcHJpdiBzZXR1cAoraWYgWyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4YXV0aFByaXYiIF07IHRoZW4KKyAgWyAieCRNQVhQUklWVFlQRSIgPSAieCIgXSAmJiBTS0lQIE1BWFBSSVZUWVBFIG5vdCBzZXQKKyAgWyAieCRERUZQUklWVFlQRSIgPSAieEFFUyIgLWEgIngkTUFYUFJJVlRZUEUiICE9ICJ4QUVTIiBdICYmIFNLSVAgQ2Fubm90IGRvIEFFUworICBbICJ4JERFRlBSSVZUWVBFIiA9ICJ4IiBdICYmIERFRlBSSVZUWVBFPSRNQVhQUklWVFlQRQorICAjIHVzZXIvcGFzcyBzZXR1cCAoWFhYOiByYW5kb21pemUpCisgIFsgIngkVEVTVFBSSVZVU0VSIiA9ICJ4IiBdICYmIFRFU1RQUklWVVNFUj1pbml0aWFsX3ByaXYKKyAgWyAieCRURVNUUFJJVlVTRVIyIiA9ICJ4IiBdICYmIFRFU1RQUklWVVNFUjI9dGVtcGxhdGVfcHJpdgorICBbICJ4JFRFU1RQUklWUEFTUyIgPSAieCIgXSAmJiBURVNUUFJJVlBBU1M9aW5pdGlhbF90ZXN0X3Bhc3NfcHJpdgorICBbICJ4JFRFU1RQUklWUEFTUzIiID0gIngiIF0gJiYgVEVTVFBSSVZQQVNTMj10ZW1wbGF0ZV90ZXN0X3Bhc3NfcHJpdgorICBDUkVBVEVQUklWVVNFUj0iJENSRUFURVVTRVJDTUQgJFRFU1RQUklWVVNFUiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUyAkREVGUFJJVlRZUEUgJFRFU1RQUklWUEFTUyIKKyAgQ1JFQVRFUFJJVlVTRVIyPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVFBSSVZVU0VSMiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUzIgJERFRlBSSVZUWVBFICRURVNUUFJJVlBBU1MyIgorICAjIGNvbW1hbmQgYXJncworICBURVNUUFJJVkFSR1NOT1BBU1M9Ii12IDMgLWwgYXAgLXUgJFRFU1RQUklWVVNFUiAtYSAkREVGQVVUSFRZUEUgLXggJERFRlBSSVZUWVBFIgorICBURVNUUFJJVkFSR1NOT1BBU1MyPSItdiAzIC1sIGFwIC11ICRURVNUUFJJVlVTRVIyIC1hICRERUZBVVRIVFlQRSAteCAkREVGUFJJVlRZUEUiCisgIFRFU1RQUklWQVJHUz0iJFRFU1RQUklWQVJHU05PUEFTUyAtQSAkVEVTVEFVVEhQQVNTIC1YICRURVNUUFJJVlBBU1MiCisgIFRFU1RQUklWQVJHUzI9IiRURVNUUFJJVkFSR1NOT1BBU1MyIC1BICRURVNUQVVUSFBBU1MyIC1YICRURVNUUFJJVlBBU1MyIgorZmkKKworIyMgbm9hdXRoIHNldHVwCitbICJ4JFRFU1ROT0FVVEhVU0VSIiA9ICJ4IiBdICYmIFRFU1ROT0FVVEhVU0VSPWluaXRpYWwKK1RFU1ROT0FVVEhBUkdTPSItdiAzIC1sIG5hbnAgLXUgJFRFU1ROT0FVVEhVU0VSIgorQ1JFQVRFTk9BVVRIVVNFUj0iJENSRUFURVVTRVJDTUQgJFRFU1ROT0FVVEhVU0VSIgorCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ3RyYXBkIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWd0cmFwZApzaW1pbGFyaXR5IGluZGV4IDEwMCUKcmVuYW1lIGZyb20gdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWd0cmFwZApyZW5hbWUgdG8gdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN1c21jb25maWd0cmFwZApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdjN2YWNtY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjMzVlMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2M3ZhY21jb25maWcKQEAgLTAsMCArMSwyOSBAQAorIyEvYmluL3NoCisKKyMgZ2VuZXJpY2FsbHkgc2V0IHVwIHRoZSB1c2VyICJpbml0aWFsMSIgYW5kICJpbml0aWFsMiIgIGZvciBzbm1wIHYzCisjIGFjY2VzcyB0byB0aGUgYWdlbnQuCisKKyMgQ29uZmlndXJhdGlvbjoKKyNpbml0aWFsMSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIGRlbnkgb3RoZXJzCisjaW5pdGlhbDIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEgCisKKyMgWFhYOiBkbyBhdXRvc2VsZWN0aW9uIG9mIHN1cHBvcnRlZCBhbGdvcml0aG1zCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX01ENQorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9ERVMKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKKworQ09ORklHQUdFTlQgY3JlYXRlVXNlciBpbml0aWFsMSBNRDUgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCBERVMKK0NPTkZJR0FHRU5UIGNyZWF0ZVVzZXIgaW5pdGlhbDIgTUQ1IGluaXRpYWxfdGVzdF9wYXNzX2F1dGggREVTCisKKworQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAxICB1c20gICAgIGluaXRpYWwxCitDT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDIgIHVzbSAgICAgaW5pdGlhbDIKKworQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0xICAgICBpbmNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAorQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBpbmNsdWRlZCAuMQorQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBleGNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAorQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMSAgIiIgYW55IGF1dGggZXhhY3Qgc3lzdGVtMSBub25lIG5vbmUnCitDT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICAiIiBhbnkgYXV0aCBleGFjdCBzeXN0ZW0yIG5vbmUgbm9uZScKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9TdmFjbWNvbmZpZyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3ZhY21jb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDlkODYyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3ZhY21jb25maWcKQEAgLTAsMCArMSw0MCBAQAorIyEvYmluL3NoCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKKyMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAorIyBnZW5lcmljYWxseSBzZXQgdXAgdGhlIGNvbW11bml0eSAidGVzdGNvbW11bml0eTEgYW5kIHRlc3Rjb21tdW5pdHkyIiBmb3IgdmFyaW91cyBzbm1wCisjIHZlcnNpb24gYWNjZXNzIHRvIHRoZSBhZ2VudC4KKworaWYgWyAieCRzbm1wX3ZlcnNpb24iID0gIngiIF07IHRoZW4KKyAgc25tcF92ZXJzaW9uPSJhbnkiCitmaQorCitDT05GSUdBR0VOVCBbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgorCitDT05GSUdBR0VOVCByb2NvbW11bml0eSB0ZXN0cm9jb21tdW5pdHkgMTI3LjAuMC4xIC4xLjMuNi4xLjIuMS4xLjUuMAorQ09ORklHQUdFTlQgcndjb21tdW5pdHkgdGVzdHJ3Y29tbXVuaXR5IDEyNy4wLjAuMSAuMS4zLjYuMS4yLjEuMS41LjAKKworQ09ORklHQUdFTlQgY29tMnNlYyB0ZXN0Y29tbXVuaXR5c2VjMSAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MQorQ09ORklHQUdFTlQgY29tMnNlYyB0ZXN0Y29tbXVuaXR5c2VjMiAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MgorCitpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4gCitDT05GSUdBR0VOVCByb2NvbW11bml0eTYgdGVzdHJvY29tbXVuaXR5IDo6MSAuMS4zLjYuMS4yLjEuMS41LjAKK0NPTkZJR0FHRU5UIHJ3Y29tbXVuaXR5NiB0ZXN0cndjb21tdW5pdHkgOjoxIC4xLjMuNi4xLjIuMS4xLjUuMAorQ09ORklHQUdFTlQgY29tMnNlYzYgdGVzdGNvbW11bml0eXNlYzEgIGRlZmF1bHQgdGVzdGNvbW11bml0eTEKK0NPTkZJR0FHRU5UIGNvbTJzZWM2IHRlc3Rjb21tdW5pdHlzZWMyICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkyCitmaQorCitpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidW5peCIgXTt0aGVuIAorQ09ORklHQUdFTlQgY29tMnNlY3VuaXggdGVzdGNvbW11bml0eXNlYzEgIHRlc3Rjb21tdW5pdHkxCitDT05GSUdBR0VOVCBjb20yc2VjdW5peCB0ZXN0Y29tbXVuaXR5c2VjMiAgdGVzdGNvbW11bml0eTIKK2ZpCisKK0NPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMSAgJHNubXBfdmVyc2lvbiAgICAgdGVzdGNvbW11bml0eXNlYzEKK0NPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMiAgJHNubXBfdmVyc2lvbiAgICAgdGVzdGNvbW11bml0eXNlYzIKKworQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0xICAgICBpbmNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAorQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBpbmNsdWRlZCAuMQorQ09ORklHQUdFTlQgdmlldyAgICBzeXN0ZW0yICAgICBleGNsdWRlZCAuMS4zLjYuMS4yLjEuMS4xIAorQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMSAgIiIgYW55IG5vYXV0aCBleGFjdCBzeXN0ZW0xIG5vbmUgbm9uZScKK0NPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDIgICIiIGFueSBub2F1dGggZXhhY3Qgc3lzdGVtMiBub25lIG5vbmUnCisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvU3Zhbnljb25maWcgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjYjUzZGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1N2YW55Y29uZmlnCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisjIGdlbmVyaWNhbGx5IHNldCB1cCB0aGUgY29tbXVuaXR5ICJ0ZXN0Y29tbXVuaXR5IiBmb3IgdmFyaW91cyBzbm1wCisjIHZlcnNpb24gYWNjZXNzIHRvIHRoZSBhZ2VudC4KKworaWYgWyAieCRzbm1wX3ZlcnNpb24iID0gIngiIF07IHRoZW4KKyAgc25tcF92ZXJzaW9uPSJhbnkiCitmaQoraWYgWyAieCRzbm1wX3dyaXRlX2FjY2VzcyIgPSAieCIgXTsgdGhlbgorICBzbm1wX3dyaXRlX2FjY2Vzcz0ibm9uZSIKK2ZpCisKK1sgIngkU05NUF9TTVVYX1NPQ0tFVCIgPSAieCIgXSAmJiBTTk1QX1NNVVhfU09DS0VUPTEuMC4wLjAKKworQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKK0NPTkZJR0FHRU5UIHNtdXhzb2NrZXQgJFNOTVBfU01VWF9TT0NLRVQKKworQ09ORklHQUdFTlQgY29tMnNlYyB0ZXN0Y29tbXVuaXR5c2VjICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkKK2lmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1ZHA2IiAtbyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInRjcDYiIF07dGhlbiAKKwlDT05GSUdBR0VOVCBjb20yc2VjNiB0ZXN0Y29tbXVuaXR5c2VjICBkZWZhdWx0IHRlc3Rjb21tdW5pdHkKK2ZpCisKK2lmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1bml4IiBdO3RoZW4gCisJQ09ORklHQUdFTlQgY29tMnNlY3VuaXggdGVzdGNvbW11bml0eXNlYyAgdGVzdGNvbW11bml0eQorZmkKKworQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAgICRzbm1wX3ZlcnNpb24gICAgIHRlc3Rjb21tdW5pdHlzZWMKK0NPTkZJR0FHRU5UIHZpZXcgICAgYWxsICAgICBpbmNsdWRlZCAuMSA4MAorQ09ORklHQUdFTlQgImFjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwICAnJyBhbnkgbm9hdXRoIGV4YWN0IGFsbCAkc25tcF93cml0ZV9hY2Nlc3Mgbm9uZSIKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAwMGNvbmZpZ3VyZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMGNvbmZpZ3VyZV9zaW1wbGUKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIHRlc3RpbmcvdGVzdHMvVDAwMGNvbmZpZ3VyZQpyZW5hbWUgdG8gdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAwY29uZmlndXJlX3NpbXBsZQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDAxc25tcHYxZ2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDdkMzg0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAwMXNubXB2MWdldF9zaW1wbGUKQEAgLTAsMCArMSwzNyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYxIHN1cHBvcnQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitDQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMyIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4xIgorCitDSEVDS09SRElFICJFcnJvciBpbiBwYWNrZXQiCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS09SRElFICJUaW1lb3V0IgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNDFzbm1wdjJjc2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGQ5YmFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0MXNubXB2MmNzZXRfc2ltcGxlCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgc2V0IG9mIHN5c3RlbS5zeXNDb250YWN0LjAKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKK3NubXBfd3JpdGVfYWNjZXNzPSdhbGwnCisuIC4vU3YyY2NvbmZpZworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCBzIGZvb2JhcnRlc3RpbmdiYXoiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCitDSEVDSyAiU1RSSU5HOiBmb29iYXJ0ZXN0aW5nYmF6IgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE0c25tcHYyY2dldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNkZmZkNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNHNubXB2MmNnZXRfc2ltcGxlCkBAIC0wLDAgKzEsMjQgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgZ2V0IG9mIHN5c3RlbS5zeXNVcFRpbWUuMAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2MmNjb25maWcKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE1c25tcHYyY2dldG5leHRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNmVhYTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTVzbm1wdjJjZ2V0bmV4dF9zaW1wbGUKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYyYyBnZXRuZXh0IG9mIHN5c3RlbS5zeXNVcFRpbWUKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTYwc25tcHYyY2J1bGtnZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zOGVjM2IzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2MHNubXB2MmNidWxrZ2V0X3NpbXBsZQpAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjJjIGJ1bGtnZXQgb2Ygc3lzdGVtIGNvbXBvbmVudHMKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjIgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2MmNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wYnVsa2dldCAkU05NUF9GTEFHUyAtdjJjIC1PbiAtQ24xIC1DcjIgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQgLjEuMy42LjEuMi4xLjEiCisKK1NUT1BBR0VOVAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjIuMCA9IE9JRDoiCisKK0NIRUNLQ09VTlQgMCAiLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjUuMCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxNnNubXB2MmNnZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2QwZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE2c25tcHYyY2dldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsMzAgQEAKKyMhL2Jpbi9zaAorCisjCisjIHRlc3Qgc25tcHYyYyBnZXQgc3VwcG9ydCBieSByZWFkaW5nIGEgdmFyaWFibGUKKyMKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjJjIGdldCB3aXRoIHdyb25nIGNvbW11bml0eQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX01JQklJX1ZBQ01fQ09ORl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIlRpbWVvdXQiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMTdzbm1wdjJjdG92MWdldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YzgxMmMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE3c25tcHYyY3RvdjFnZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDMwIEBACisjIS9iaW4vc2gKKworIworIyB0ZXN0IHNubXB2MmMgZ2V0IHN1cHBvcnQgYnkgcmVhZGluZyBhIHZhcmlhYmxlCisjCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgZm9yIGZhaWx1cmUgb2YgU05NUHYyYyBnZXQgYWdhaW5zdCBTTk1QdjEgYWdlbnQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIlRpbWVvdXQiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMThzbm1wdjF0b3YyY2dldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWI4YjZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE4c25tcHYxdG92MmNnZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDI2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjEgZ2V0IGFnYWluc3QgU05NUHYyYyBhZ2VudAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKKy4gLi9TdjJjY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiVGltZW91dCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDE5c25tcHYyY25vc3VjaF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzhhMGJiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAxOXNubXB2MmNub3N1Y2hfc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgZ2V0IG9mIHN5c3RlbS5zeXNVcFRpbWUuMQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMkMgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2MmNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4xIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMSA9IE5vIFN1Y2ggSW5zdGFuY2UiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjBzbm1wdjNnZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGI1OWU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIwc25tcHYzZ2V0X3NpbXBsZQpAQCAtMCwwICsxLDI0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIG5vQXV0aE5vUHJpdiBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIGNvbmZpZ3VyZSB0aGUgYWdlbnQgdG8gYWNjZXB0IHVzZXIgaW5pdGlhbCB3aXRoIG5vQXV0aE5vUHJpdgorLiAuL1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjFzbm1wdjNnZXRuZXh0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NGM4MmQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIxc25tcHYzZ2V0bmV4dF9zaW1wbGUKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIGdldG5leHQgdXNpbmcgaW5pdGlhbCBvZiAuMS4zLjYuMS4yLjEuMS4zCisKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBjb25maWd1cmUgdGhlIGFnZW50IHRvIGFjY2VwdCB1c2VyIGluaXRpYWwgd2l0aCBub0F1dGhOb1ByaXYKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gJFNOTVBfRkxBR1MgJE5PQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMyIKKworU1RPUEFHRU5UCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIyMHNubXB2M2J1bGtnZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjdlZGRjY2YKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjIwc25tcHYzYnVsa2dldF9zaW1wbGUKQEAgLTAsMCArMSwzMCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIGJ1bGtnZXQgb2Ygc3lzdGVtCisKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uOiAKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wYnVsa2dldCAkU05NUF9GTEFHUyAtT24gLUNuMSAtQ3IyICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQgLjEuMy42LjEuMi4xLjEiCisKK1NUT1BBR0VOVAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjIuMCA9IE9JRDoiCisKK0NIRUNLQ09VTlQgMCAiLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjUuMCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyMnNubXB2M2dldE1ENV9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmVlZDQyOTIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjJzbm1wdjNnZXRNRDVfc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgTUQ1L25vUHJpdiBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCitERUZBVVRIVFlQRT0iTUQ1IgorLiAuL1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyM3NubXB2M2dldE1ENUFFU19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4NWIyYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVBRVNfc2ltcGxlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgTUQ1L0FFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCitTS0lQSUZOT1QgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1CisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorREVGQVVUSFRZUEU9TUQ1CitERUZQUklWVFlQRT1BRVMKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjNzbm1wdjNnZXRNRDVERVNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4wMDA0NzhhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDIzc25tcHYzZ2V0TUQ1REVTX3NpbXBsZQpAQCAtMCwwICsxLDI4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIE1ENS9ERVMgb2YgLjEuMy42LjEuMi4xLjEuMy4wCisKK1NLSVBJRk5PVCBORVRTTk1QX0NBTl9ET19DUllQVE8KK1NLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9NRDUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCitERUZBVVRIVFlQRT1NRDUKK0RFRlBSSVZUWVBFPURFUworLiAuL1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRQUklWVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDI0c25tcHYzZ2V0U0hBMV9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODBiN2Y0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNHNubXB2M2dldFNIQTFfc2ltcGxlCkBAIC0wLDAgKzEsMjUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgU0hBL25vUHJpdiBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZVNIQSB1c2VyCitERUZBVVRIVFlQRT0iU0hBIgorLiAuL1N2M2NvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNXNubXB2M2dldFNIQURFU19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmQwMWE0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjVzbm1wdjNnZXRTSEFERVNfc2ltcGxlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgU0hBL0RFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX0RFUworCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZVNIQSB1c2VyCitERUZBVVRIVFlQRT0iU0hBIgorREVGUFJJVlRZUEU9IkRFUyIKKy4gLi9TdjNjb25maWcKKworQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtSS13aW5FeHRETEwiCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRQUklWVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyNnNubXB2M2dldFNIQUFFU19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MWNkYWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjZzbm1wdjNnZXRTSEFBRVNfc2ltcGxlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgU0hBL0FFUyBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKKworU0tJUElGTk9UIE5FVFNOTVBfQ0FOX0RPX0NSWVBUTworU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCitTS0lQSUZOT1QgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgorREVGUFJJVlRZUEU9IkFFUyIKK0RFRkFVVEhUWVBFPSJTSEEiCisuIC4vU3YzY29uZmlnCisKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLUktd2luRXh0RExMIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjdzbm1wdjNEZWZhdWx0c19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjdzbm1wdjNEZWZhdWx0c19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JiZjVlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyN3NubXB2M0RlZmF1bHRzX3NpbXBsZQpAQCAtMCwwICsxLDM5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIGRlZmF1bHQgY29uZmlnIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAorCitTS0lQSUZOT1QgTkVUU05NUF9DQU5fRE9fQ1JZUFRPCitTS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKK1NLSVBJRk5PVCBIQVZFX0FFU19DRkIxMjhfRU5DUllQVAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZVNIQSB1c2VyCitERUZQUklWVFlQRT0iQUVTIgorREVGQVVUSFRZUEU9IlNIQSIKKy4gLi9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDT05GSUdBUFAgZGVmVmVyc2lvbiAzCitDT05GSUdBUFAgZGVmUHJpdlR5cGUgQUVTCitDT05GSUdBUFAgZGVmQXV0aFR5cGUgU0hBCitDT05GSUdBUFAgZGVmQ29udGV4dCBcIlwiCitDT05GSUdBUFAgZGVmQXV0aFBhc3NQaHJhc2UgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aAorQ09ORklHQVBQIGRlZlByaXZQYXNzUGhyYXNlIGluaXRpYWxfdGVzdF9wYXNzX2F1dGgKK0NPTkZJR0FQUCBkZWZTZWN1cml0eUxldmVsIGF1dGhQcml2CitDT05GSUdBUFAgZGVmU2VjdXJpdHlOYW1lIGluaXRpYWwKKworIyBtYWtlIHN1cmUgdGhhdCB0aGUgYWJvdmUgY29uZmlndXJhdGlvbiB0b2tlbnMgcHJvcGVybHkgc2V0IHRoaW5ncyB1cCBzbyB0aGF0CisjIG5vIGZsYWdzIGFyZSBuZWVkZWQKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAyOHNubXB2M2dldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmFkYThhMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMjhzbm1wdjNnZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDIyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjMgZ2V0IHVzaW5nIHVua25vd24gdXNlci4KKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtbCBuYW5wIC11IHVua25vd251c2VyICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitTVE9QQUdFTlQKKworQ0hFQ0sgIlVua25vd24gdXNlciBuYW1lIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDMwc25tcHYzdXNlcmNyZWF0aW9uX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlYWFlOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDAzMHNubXB2M3VzZXJjcmVhdGlvbl9zaW1wbGUKQEAgLTAsMCArMSwxMTkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBhZ2VudCBVU00gdXNlciBtYW5hZ2VtZW50IHdpdGggc25tcHVzbQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitTS0lQSUZOT1QgVVNJTkdfU05NUFYzX1VTTVVTRVJfTU9EVUxFCitTS0lQSUZOT1QgTkVUU05NUF9DQU5fRE9fQ1JZUFRPCitTS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgU05NUHYzIFVTTSBhZ2VudCBjb25maWd1cmF0aW9uCitERUZTRUNVUklUWUxFVkVMPWF1dGhQcml2CisuIC4vU3YzdXNtY29uZmlnYWdlbnQKKworIyB0ZXN0IHVzZXIKK05FV1VTRVI9bmV3dGVzdHVzZXIKK05FV0FVVEhQQVNTPW5ld2F1dGhwYXNzCitORVdQUklWUEFTUz1uZXdwcml2cGFzcworTkVXQVVUSFBSSVZQQVNTPW5ld2F1dGhwcml2cGFzcworCisjIGNvbmZpZ3VyZSBhZ2VudAorQ09ORklHQUdFTlQgcnd1c2VyICRORVdVU0VSCisKKyMgU3RhcnQgdGhlIGFnZW50CitTVEFSVEFHRU5UCisKKyMjIHVzbVVzZXJUYWJsZSBtYW5hZ2VtZW50CisKKyMjIDEpIGNyZWF0ZSwgY2xvbmUsIHRlc3QsIGRlbGV0ZQorCisjIGNyZWF0ZSBuZXcgKHZhbmlsbGEpIHVzZXIKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCisKKyMgY2xvbmUKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNsb25lRnJvbSAkTkVXVVNFUiAkVEVTVFBSSVZVU0VSIgorQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY2xvbmVkIgorCisjIHRlc3QgKGF1dGhQcml2KQorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJFRFU1RBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJFRFU1RQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKKyMgZGVsZXRlIAorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgZGVsZXRlICRORVdVU0VSIgorQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgZGVsZXRlZCIKKworIyMgMikgY3JlYXRlIHcvIGNsb25lLCBwYXNzd2QgKGF1dGgpLCBwYXNzd2QgKHByaXYpLCB0ZXN0IChhdXRoUHJpdithdXRoTm9Qcml2KQorCisjIGNyZWF0ZStjbG9uZSB0ZW1wbGF0ZSB1c2VyCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIgJFRFU1RQUklWVVNFUjIiCitDSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgorCisjIGNoYW5nZSBhdXRoIHBhc3NwaHJhc2Ugb2YgbmV3IHVzZXIKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAtQ2EgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RBVVRIUEFTUzIgJE5FV0FVVEhQQVNTICRORVdVU0VSIgorQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKKworIyBjaGFuZ2UgcHJpdiBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgLUN4ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUUFJJVlBBU1MyICRORVdQUklWUEFTUyAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCisKKyMgdGVzdCAoYXV0aE5vUHJpdikKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYW5wIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIHRlc3QgKGF1dGhQcml2KQorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIyAzKSBwYXNzd2QgKHByaXYpLCBwYXNzd2QgKGF1dGgrcHJpdiksIHRlc3QKKworIyBjaGFuZ2UgcHJpdiBwYXNzcGhyYXNlICh0byBhdXRoIHBhc3NwaHJhc2UpIGJ5IHRoZSB1c2VyIGhpbXNlbGYKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXUFJJVlBBU1MgLUN4ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdQUklWUEFTUyAkTkVXQVVUSFBBU1MiCitDSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgorCisjIGNoYW5nZSBib3RoIHBhc3NwaHJhc2VzIGF0IG9uY2UKK0NBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXQVVUSFBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJE5FV0FVVEhQQVNTICRORVdBVVRIUFJJVlBBU1MiCitDSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgorCisjIHRlc3QgKGF1dGhQcml2KQorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQUklWUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKKyMjIDUpIHBlcnNpc3RlbmN5IEk6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10ZXN0CisKK2lmIElTREVGSU5FRCBIQVZFX1NJR0hVUDsgdGhlbgorCitIVVBBR0VOVAorREVMQVkKKworIyB0ZXN0IChhdXRoUHJpdikKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUFJJVlBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIyA1KSBwZXJzaXN0ZW5jeSBJSTogc3RvcCwgc3RhcnQsIHJlLXRlc3QKKworU1RPUEFHRU5UCitERUxBWQorIyBtYWtlIHN1cmUgaXQgcGlja3MgdXAgcGVyc2lzdGVudCBjb25maWcgYW5kIHVzZXMgYSBuZXcgbG9nZmlsZQorU05NUENPTkZQQVRIPSIke1NOTVBfVE1QRElSfSR7U05NUF9FTlZfU0VQQVJBVE9SfSR7U05NUF9UTVBfUEVSU0lTVEVOVERJUn0iCitleHBvcnQgU05NUENPTkZQQVRICitTTk1QX0NPTkZJR19GSUxFPSJkb2VzLW5vdC1leGlzdCIKK1NOTVBfU05NUERfTE9HX0ZJTEU9JHtTTk1QX1RNUERJUn0vc25tcGQyLmxvZworU1RBUlRBR0VOVAorCisjIHRlc3QgKGF1dGhQcml2KQorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQUklWUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQUklWUEFTUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCisKK2ZpCisKKyMjIHN0b3AgYWdlbnQgYW5kIGZpbmlzaAorU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTdhYWI2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDM1c25tcHYzdHJhcGR1c2VybWdtdF9zaW1wbGUKQEAgLTAsMCArMSwxMjYgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyBzbm1wdHJhcGQgVVNNIHVzZXIgbWFuYWdlbWVudCB3aXRoIHNubXB1c20KKworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX1NOTVBWM19VU01VU0VSX01PRFVMRQorU0tJUElGICAgIE5FVFNOTVBfU05NUFRSQVBEX0RJU0FCTEVfQUdFTlRYCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgICAgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitTS0lQSUZOT1QgTkVUU05NUF9DQU5fRE9fQ1JZUFRPCitTS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgY29uZmlndXJlIEFnZW50WCBzb2NrZXQKK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07IHRoZW4KKyAgQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKKyAgVFJBUERfRkxBR1M9IiRUUkFQRF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKK2Vsc2UKKyAgQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorICBUUkFQRF9GTEFHUz0iJFRSQVBEX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCitmaQorCisjIHN0YW5kYXJkIFNOTVB2MyBVU00gYWdlbnQgY29uZmlndXJhdGlvbgorREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgorLiAuL1N2M3VzbWNvbmZpZ2FnZW50CisKKyMgc2F2ZSBhZ2VudCBhY2Nlc3MKK0FHRU5UX1RFU1RBVVRIQVJHUz0kVEVTVEFVVEhBUkdTCitBR0VOVF9URVNUUFJJVkFSR1M9JFRFU1RQUklWQVJHUworCisjIGNvbmZpZ3VyZSBhZ2VudCBhcyBBZ2VudFggbWFzdGVyCitDT05GSUdBR0VOVCBtYXN0ZXIgYWdlbnR4CisKKyMgU3RhcnQgdGhlIG1hc3RlciBhZ2VudAorU1RBUlRBR0VOVAorCisjIHN0YW5kYXJkIFNOTVB2MyBVU00gc25tcHRyYXBkIGNvbmZpZ3VyYXRpb24KKy4gLi9TdjN1c21jb25maWd0cmFwZAorCisjIGNvbmZpZ3VyZSBzbm1wdHJhcGQKK05FV0FVVEhLRVk9MHg3NDU4ZWFkN2EwYjVhNzUzZTIxYmZjYjg3ZjZjOTgwM2ViZWY2OGNmCitORVdQUklWS0VZPTB4OThlMjY5NmQxY2YzNGQ5MDRkZmNhZTc2YmYwMWM0NzMKK05FV1VTRVI9bmV3dGVzdHVzZXIKK05FV0FVVEhQQVNTPW5ld2F1dGhwYXNzCitORVdQUklWUEFTUz1uZXdwcml2cGFzcworTkVXVVNFUjI9bmV3dGVzdHVzZXJfdmFuaWxsYQorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRORVdVU0VSIGF1dGgKKworIyBzdGFydCBzbm1wdHJhcGQKK1NUQVJUVFJBUEQKKworIyBkZWxheSB0byBsZXQgaXQgY29ubmVjdCBhbmQgcmVnaXN0ZXIgYWxsIE1JQnMKK0RFTEFZCisKKyMjIHZlcmlmeSBzbm1wdHJhcGQgdXNtVXNlclRhYmxlIG1hbmFnZW1lbnQKKworU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1M9Ii1uIHNubXB0cmFwZCAtQ0UgJFRSQVBEX0VOR0lORUlEIgorCisjIyAxKSBjcmVhdGUsIGNsb25lLCBwYXNzd2QgYXV0aCwgcGFzc3dkIHByaXYsIHRlc3QKKworIyBjcmVhdGUgdmFuaWxsYSB1c2VyCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY3JlYXRlICRORVdVU0VSMiIKK0NIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCisKKyMgY2xvbmUgdGVtcGxhdGUgdXNlcgorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUiAkVEVTVFBSSVZVU0VSIgorQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCIKKworIyBjaGFuZ2UgYXV0aCBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTIC1DYSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkVEVTVEFVVEhQQVNTICRORVdBVVRIUEFTUyAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCisKKyMgY2hhbmdlIHByaXYgcGFzc3BocmFzZSBvZiBuZXcgdXNlcgorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVFBSSVZBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ3ggJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RQUklWUEFTUyAkTkVXUFJJVlBBU1MgJE5FV1VTRVIiCitDSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgorCisjIHRlc3QgKGFucCkKK0NBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11ICRORVdVU0VSIC1sIGFucCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FucCIKK0RFTEFZCitDSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hbnAiCisKKyMgdGVzdCAoYXApCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF9pbmZvcm1fYXAiCitERUxBWQorQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYXAiCisKKyMjIDIpIGNoYW5nZSBsb2NhbGl6ZWQgYXV0aCBrZXksIHRlc3QsIGNoYW5nZSBsb2NhbGl6ZWQgcHJpdiBrZXksIHRlc3QKKworIyBjaGFuZ2UgbG9jYWxpemVkIGF1dGgga2V5CitDQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTIC1DYSAtQ2sgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJE5FV0FVVEhQQVNTICRORVdBVVRIS0VZICRORVdVU0VSIgorQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKKworIyB0ZXN0IChhbnApCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhbnAgLWEgJERFRkFVVEhUWVBFIC0zayAkTkVXQVVUSEtFWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHJlY2VpdmVkX2luZm9ybV9hbnAyIgorREVMQVkKK0NIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FucDIiCisKKyMgY2hhbmdlIGxvY2FsaXplZCBwcml2IGtleQorQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVFBSSVZBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ3ggLUNrICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdQUklWUEFTUyAkTkVXUFJJVktFWSAkTkVXVVNFUiIKK0NIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCisKKyMgdGVzdCAoYXApCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLTNrICRORVdBVVRIS0VZIC14ICRERUZQUklWVFlQRSAtM0sgJE5FV1BSSVZLRVkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF9pbmZvcm1fYXAyIgorREVMQVkKK0NIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FwMiIKKworIyMgMykgcGVyc2lzdGVuY3kgSTogcmVjb25maWd1cmUgKFNJR0hVUCksIHJlLXRlc3QKKworIyByZWNvbmZpZ3VyZSBzbm1wdHJhcGQKK0hVUFRSQVBECisKKyMgdGVzdCAoYXApCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLTNrICRORVdBVVRIS0VZIC14ICRERUZQUklWVFlQRSAtM0sgJE5FV1BSSVZLRVkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF9pbmZvcm1fYXAzIgorREVMQVkKK0NIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FwMyIKKworIyMgc3RvcCBkYWVtb25zIGFuZCBmaW5pc2gKK1NUT1BUUkFQRAorU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTljYjVlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybV9zaW1wbGUKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKK0RFRlNFQ1VSSVRZTEVWRUw9bm9BdXRoTm9Qcml2CisKK0hFQURFUiAiU05NUHYzIGluZm9ybXMgKG5vQXV0aE5vUHJpdikgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMiCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitDT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCitDT05GSUdUUkFQRCBhdXRodXNlciBsb2cgdGVzdHVzZXIgJERFRlNFQ1VSSVRZTEVWRUwKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSB0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNDlzbm1wdjNpbmZvcm1hdXRoX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjE4NTc3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtYXV0aF9zaW1wbGUKQEAgLTAsMCArMSwyNyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKK0RFRlNFQ1VSSVRZTEVWRUw9YXV0aE5vUHJpdgorCitIRUFERVIgIlNOTVB2MyBpbmZvcm1zIChhdXRoTm9Qcml2KSByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scyIKKworIworIyBCZWdpbiB0ZXN0CisjCisKKy4gLi9TdjN1c21jb25maWd0cmFwZAorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUQVVUSFVTRVIgJERFRlNFQ1VSSVRZTEVWRUwKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgJFRFU1RBVVRIQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgInJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDQ5c25tcHYzaW5mb3JtcHJpdl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThmNDdkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA0OXNubXB2M2luZm9ybXByaXZfc2ltcGxlCkBAIC0wLDAgKzEsMjggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgorCitIRUFERVIgIlNOTVB2MyBpbmZvcm1zIChhdXRoUHJpdikgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMiCisKK1NLSVBJRk5PVCBORVRTTk1QX0NBTl9ET19DUllQVE8KK1NLSVBJRk5PVCBORVRTTk1QX0VOQUJMRV9TQ0FQSV9BVVRIUFJJVgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworLiAuL1N2M3VzbWNvbmZpZ3RyYXBkCitDT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1RQUklWVVNFUiAkREVGU0VDVVJJVFlMRVZFTAorQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKK0NBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgcmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTBzbm1wdjN0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjdhNGE4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUwc25tcHYzdHJhcF9zaW1wbGUKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIHRyYXBzIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzCisKKyNTS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAorU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitDUkVBVEVVU0VSRU5HSU5FSUQ9MHg4MDAwMWY4ODgwMmIzZDBlMDZiYmRmNDMyMQorLiAuL1N2M3VzbWNvbmZpZ3RyYXBkCitDT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1ROT0FVVEhVU0VSIG5vQXV0aE5vUHJpdgorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUQVVUSFVTRVIgYXV0aE5vUHJpdgorQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUUFJJVlVTRVIgYXV0aFByaXYKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtZCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEICRURVNUTk9BVVRIQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIHJlY2VpdmVkX3RyYXBfbmFucCIKK0RFTEFZCitDQVBUVVJFICJzbm1wdHJhcCAtZCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEICRURVNUQVVUSEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF90cmFwX2FucCIKK0RFTEFZCitDQVBUVVJFICJzbm1wdHJhcCAtZCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyByZWNlaXZlZF90cmFwX2FwIgorREVMQVkKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgInJlY2VpdmVkX3RyYXBfbmFucCIKK0NIRUNLVFJBUEQgInJlY2VpdmVkX3RyYXBfYW5wIgorQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfdHJhcF9hcCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1MXNubXB2MmN0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTFiZTZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUxc25tcHYyY3RyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMjcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MmMgdHJhcHMgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfVkFDTV9DT05GX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgdGVzdGNvbW11bml0eQorQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitUUkFQRF9GTEFHUz0iJFRSQVBEX0ZMQUdTIC1PbiIKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtZCAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgYmxhaCIKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgIi4xLjMuNi4xLjYuMy4xLjEuNC4xLjAgPSBPSUQ6IC4xLjMuNi4xLjYuMy4xLjEuNS4xIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTJzbm1wdjJjaW5mb3JtX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjA4ZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUyc25tcHYyY2luZm9ybV9zaW1wbGUKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYyYyBpbmZvcm1zIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzCisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGTk9UIFVTSU5HX01JQklJX1ZBQ01fQ09ORl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHRlc3Rjb21tdW5pdHkKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIC4xLjMuNi4xLjIuMS4xLjQuMCBzIGJsYWgiCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJSZWNlaXZlZCIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1M2FnZW50djF0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NGIyMTllCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDUzYWdlbnR2MXRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsMzQgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIHNubXB2MSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCBBUEkKKworU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCitTS0lQSUZOT1QgSEFWRV9TSUdIVVAKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2M2NvbmZpZworQ09ORklHQUdFTlQgdHJhcHNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCisKK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYworQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljLGFkZF90cmFwIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjIwMjEuMjU0LjcuMCBpIDEiCisKK1NUT1BBR0VOVAorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAiRW50ZXJwcmlzZSBTcGVjaWZpYyBUcmFwICg5OSkiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTRhZ2VudHYyY3RyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWI2OTA0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU0YWdlbnR2MmN0cmFwX3NpbXBsZQpAQCAtMCwwICsxLDMzIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBzbm1wdjJjIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIEFQSQorCitTS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2M2NvbmZpZworQ09ORklHQUdFTlQgdHJhcDJzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYworQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKK1NUQVJUQUdFTlQKKworI0RFTEFZCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtdCAzIC1yIDAgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC44LjAgaSAxIgorCitTVE9QQUdFTlQKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU1YWdlbnR2MW1pbnRyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhMWMwZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTVhZ2VudHYxbWludHJhcF9zaW1wbGUKQEAgLTAsMCArMSwzMyBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgc25tcHYxIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIHdpdGhvdXQgbm90aWZpY2F0aW9uIG1pYiBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YzY29uZmlnCitDT05GSUdBR0VOVCB0cmFwc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYworQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKKyMgaW5pdGlhbGl6ZSBvbmx5IHRoZSBleGFtcGxlIG1pYiwgYW5kIG5vdCB0aGUgbm90aWZpY2F0aW9uIG1pYiBzdHVmZgorQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtRGV4YW1wbGUsaGVhZGVyX2dlbmVyaWMsYWRkX3RyYXAsbWliX2luaXQsY2FsbGJhY2sgLUkgZXhhbXBsZSx1c21Vc2VyLHVzbUNvbmYsdmFjbV92YXJzIgorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjIwMjEuMjU0LjcuMCBpIDEiCisKK1NUT1BBR0VOVAorCitTVE9QVFJBUEQKKworQ0hFQ0tUUkFQRCAiRW50ZXJwcmlzZSBTcGVjaWZpYyBUcmFwICg5OSkiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTZhZ2VudHYyY21pbnRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43M2M3YTIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU2YWdlbnR2MmNtaW50cmFwX3NpbXBsZQpAQCAtMCwwICsxLDM0IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBzbm1wdjJjIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIHdpdGhvdXQgbm90aWZpY2F0aW9uIG1pYiBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YzY29uZmlnCitDT05GSUdBR0VOVCB0cmFwMnNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCisjIGluaXRpYWxpemUgb25seSB0aGUgZXhhbXBsZSBtaWIsIGFuZCBub3QgdGhlIG5vdGlmaWNhdGlvbiBtaWIgc3R1ZmYKK0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljLGFkZF90cmFwLG1pYl9pbml0LGNhbGxiYWNrIC1JIGV4YW1wbGUsdXNtVXNlcix1c21Db25mLHZhY21fdmFycyIKK1NUQVJUQUdFTlQKKworI0RFTEFZCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtdCAzIC1yIDAgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC44LjAgaSAxIgorCitTVE9QQUdFTlQKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNDM5ODkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0Ml9zaW1wbGUKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKK0hFQURFUiBzbm1wdHJhcGQgZGlzY2FyZHMgb2YgdW5hdXRob3JpemVkIG5vdGlmaWNhdGlvbiB0eXBlcyAKKworIworIyBCZWdpbiB0ZXN0CisjCisKK0NPTkZJR1RSQVBEIGNyZWF0ZVVzZXIgdGVzdHVzZXIKK0NPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyB0ZXN0dXNlciBub0F1dGhOb1ByaXYgLjEuMy42LjEuNi4zLjEuMS41LjIKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSB0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEQ09VTlQgMCAiY29sZFN0YXJ0IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU3dHJhcGRhdXRodGVzdDNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3OGVmMzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0M19zaW1wbGUKQEAgLTAsMCArMSwyNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKK0hFQURFUiBzbm1wdHJhcGQgZGlzY2FyZHMgb2YgaW5jb3JyZWN0IHZpZXcgdHlwZXMgCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitDT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCitDT05GSUdUUkFQRCBhdXRodXNlciBleGVjdXRlIHRlc3R1c2VyIG5vQXV0aE5vUHJpdgorQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAorCitTVEFSVFRSQVBECisKK0NBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11IHRlc3R1c2VyIC1sIG5hbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgYmxhaCIKKworU1RPUFRSQVBECisKK0NIRUNLVFJBUERDT1VOVCAwICJjb2xkU3RhcnQiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1N3RyYXBkYXV0aHRlc3Rfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlMmZjMTAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTd0cmFwZGF1dGh0ZXN0X3NpbXBsZQpAQCAtMCwwICsxLDI1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworSEVBREVSIHNubXB0cmFwZCBhdXRob3JpemF0aW9uIGZhaWx1cmUgb2Ygbm9uIGF1dGhvcml6ZWQgdXNlcnMKKworIworIyBCZWdpbiB0ZXN0CisjCisKK0NPTkZJR1RSQVBEIGNyZWF0ZVVzZXIgdGVzdHVzZXIKK0NPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyB0ZXN0dXNlciBub0F1dGhOb1ByaXYKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSBub3R0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGJsYWgiCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEQ09VTlQgMCAiY29sZFN0YXJ0IgorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNThhZ2VudGF1dGh0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYTYzNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU4YWdlbnRhdXRodHJhcF9zaW1wbGUKQEAgLTAsMCArMSwzNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgYXV0aGVudGljYXRpb24gZmFpbHVyZSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YxY29uZmlnCisjIGFkZCBpbiBhIHYxIHRyYXAgc2luaworQ09ORklHQUdFTlQgdHJhcHNpbmsgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgcHVibGljCitDT05GSUdBR0VOVCBhdXRodHJhcGVuYWJsZSAxCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKK0NPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKKworU1RBUlRUUkFQRAorCitTVEFSVEFHRU5UCisKKyMgZ2l2ZSB0aGUgYWdlbnQgbW9yZSB0aW1lIHRvIHN0YXJ0IHVwLiAgV2Ugb25seSB3YW50IHRvIGZpcmUgb25lCisjIHJlcXVlc3QgKHJldHJpZXMgPSAwKSB0byBtYWtlIHN1cmUgb25seSBvbmUgdHJhcCBpcyBzZW50LgorI0RFTEFZCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtciAwIC10IDUgJFNOTVBfRkxBR1MgLXYgMSAtYyB3cm9uZ2NvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworU1RPUEFHRU5UCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJBdXRoZW50aWNhdGlvbiBGYWlsdXJlIFRyYXAiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNTl0cmFwZHRyYXBoYW5kbGVfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41M2Q1YjkwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDU5dHJhcGR0cmFwaGFuZGxlX3NpbXBsZQpAQCAtMCwwICsxLDcxIEBACisjIS9iaW4vc2gKKworIyBUZXN0aW5nIHRoaXMgc2NyaXB0IGlzIHBvc3NpYmxlIGJ5IHJ1bm5pbmcgZS5nLiB0aGUgZm9sbG93aW5nIGNvbW1hbmRzOgorIyBzcmNkaXI9L3ovc29mdHdhcmUvbmV0LXNubXAvdHJ1bmsgYnVpbGRkaXI9L3ovc29mdHdhcmUvbmV0LXNubXAvdHJ1bmstbWluZ3cKKyMgY2QgJGJ1aWxkZGlyL3Rlc3RpbmcKKyMgVFJBUERfRkxBR1M9Ii1Ec25tcHRyYXBkIC1EcnVuOnNoZWxsIiAkc3JjZGlyL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1biAkc3JjZGlyL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA1OXRyYXBkdHJhcGhhbmRsZV9zaW1wbGUKKworIyAiaW5saW5lIiB0cmFwIGhhbmRsZXIKK2lmIFsgIngkMSIgPSAieHRyYXBoYW5kbGUiIF07IHRoZW4KKyAgY2F0IC0gPj4iJDIiCisgIGV4aXQgMAorZmkKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK1RSQVBIQU5ETEVfTE9HRklMRT0ke1NOTVBfVE1QRElSfS90cmFwaGFuZGxlLmxvZworCitIRUFERVIgc25tcHRyYXBkIHRyYXBoYW5kbGU6IGxhdW5jaGluZyBleHRlcm5hbCBzaGVsbCBzY3JpcHQKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCitTS0lQSUZOT1QgSEFWRV9TSUdIVVAKKworIworIyBCZWdpbiB0ZXN0CisjCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorCisjIE1ha2UgdGhlIHBhdGhzIG9mIGFyZ3VtZW50cyAkMCBhbmQgJDEgYWJzb2x1dGUuCitORVRTTk1QRElSPSJgcHdkYCIKK05FVFNOTVBESVI9ImBkaXJuYW1lICR7TkVUU05NUERJUn1gIgorTkVUU05NUERJUj0iYGRpcm5hbWUgJHtORVRTTk1QRElSfWAiCitORVRTTk1QRElSPSJgZGlybmFtZSAke05FVFNOTVBESVJ9YCIKK2lmIFsgImBlY2hvICQxfGN1dCAtYzFgIiA9ICIvIiBdOyB0aGVuCisgIHRyYXBoYW5kbGVfYXJnPSIkMSIKK2Vsc2UKKyAgdHJhcGhhbmRsZV9hcmc9IiR7TkVUU05NUERJUn0vJDEiCitmaQorCitDT05GSUdUUkFQRCBbc25tcF0gcGVyc2lzdGVudERpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgorQ09ORklHVFJBUEQgW3NubXBdIHRlbXBGaWxlUGF0dGVybiAvdG1wL3NubXBkLXRtcC1YWFhYWFgKK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgZXhlY3V0ZSAkVEVTVENPTU1VTklUWQorQ09ORklHVFJBUEQgZG9Ob3RMb2dUcmFwcyB0cnVlCitpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICBDT05GSUdUUkFQRCB0cmFwaGFuZGxlIGRlZmF1bHQgJE1TWVNfU0ggLWMgIiciICR0cmFwaGFuZGxlX2FyZyB0cmFwaGFuZGxlICRUUkFQSEFORExFX0xPR0ZJTEUgIiciCitlbHNlCisgICAgQ09ORklHVFJBUEQgdHJhcGhhbmRsZSBkZWZhdWx0ICR0cmFwaGFuZGxlX2FyZyB0cmFwaGFuZGxlICRUUkFQSEFORExFX0xPR0ZJTEUKK2ZpCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworIyMgMSkgdGVzdCBub3RpZmljYXRpb24gaGFuZGxlcgorCitDQVBUVVJFICJzbm1wdHJhcCAtZCAtQ2kgLXQgJFNOTVBfU0xFRVAgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSAuMS4zLjYuMS4yLjEuMS40LjAgcyBoYW5kbGVkX2luZm9ybV8kc25tcF92ZXJzaW9uIgorREVMQVkKK0NIRUNLT1JESUUgImhhbmRsZWRfaW5mb3JtXyRzbm1wX3ZlcnNpb24iICRUUkFQSEFORExFX0xPR0ZJTEUgCisKKyMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdGVzdAorCitIVVBUUkFQRAorQ0FQVFVSRSAic25tcHRyYXAgLWQgLUNpIC10ICRTTk1QX1NMRUVQIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgLjEuMy42LjEuMi4xLjEuNC4wIHMgaGFuZGxlZF9pbmZvcm0yXyRzbm1wX3ZlcnNpb24iCitERUxBWQorQ0hFQ0tPUkRJRSAiaGFuZGxlZF9pbmZvcm0yXyRzbm1wX3ZlcnNpb24iICRUUkFQSEFORExFX0xPR0ZJTEUKKworIyMgc3RvcAorU1RPUFRSQVBECisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjB0cmFwZHBlcmxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi43MGRlY2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDYwdHJhcGRwZXJsX3NpbXBsZQpAQCAtMCwwICsxLDU5IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAnc25tcHRyYXBkIGVtYmVkZGVkIHBlcmwgc3VwcG9ydCAoTmV0U05NUDo6VHJhcFJlY2VpdmVyKScKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgTkVUU05NUF9FTUJFRERFRF9QRVJMCitTS0lQSUZOT1QgSEFWRV9TSUdIVVAKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworIworIyBCZWdpbiB0ZXN0CisjCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorVEVTVE9JRD0uMS4zLjYuMS42LjMuMS4xLjUuMQorVEVTVE9JRDI9LjEuMy42LjEuNi4zLjEuMS41LjIKK1ZBUk9JRD0uMS4zLjYuMS4yLjEuMS40LjAKK0VNQlBFUkxfTE9HRklMRT0ke1NOTVBfVE1QRElSfS9lbWJwZXJsLmxvZworCisjIG1ha2Ugc3VyZSB0aGF0IHdlIGNhbiBmdWxmaWxsIGFsbCBsaWJyYXJ5IGRlcGVuZGVuY2llcworX2xkX2xpYl9wYXRoPSIke1NOTVBfVVBESVJ9L3NubXBsaWIvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50L2hlbHBlcnMvLmxpYnMiCitpZiBbIHgkT1NUWVBFID0geGN5Z3dpbiBdOyB0aGVuCisgIFBBVEg9IiR7X2xkX2xpYl9wYXRofTokUEFUSCIKK2ZpCisKK2VjaG8gInVzZSBibGliIHF3KCR7U05NUF9VUERJUn0vcGVybCk7IiA+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybF90cmFwZC5wbAorZWNobyAidXNlIE5ldFNOTVA6OlRyYXBSZWNlaXZlcjsiID4+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybF90cmFwZC5wbAorCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGV4ZWN1dGUgJFRFU1RDT01NVU5JVFkKK0NPTkZJR1RSQVBEIHBlcmxJbml0RmlsZSAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmxfdHJhcGQucGwKK0NPTkZJR1RSQVBEICdwZXJsIHN1YiBteV9yZWNlaXZlciB7IG9wZW4gTE9HLCI+PickRU1CUEVSTF9MT0dGSUxFJyI7IHByaW50IExPRyAiaGFuZGxlZF9ieV9lbWJwZXJsXFxuIjsgY2xvc2UgTE9HIH07JworQ09ORklHVFJBUEQgJ3Blcmwgc3ViIG15X3JlY2VpdmVyMiB7IG9wZW4gTE9HLCI+PickRU1CUEVSTF9MT0dGSUxFJyI7IHByaW50IExPRyAiaGFuZGxlZF9hZ2Fpbl9ieV9lbWJwZXJsXFxuIjsgY2xvc2UgTE9HIH07JworQ09ORklHVFJBUEQgJ3BlcmwgTmV0U05NUDo6VHJhcFJlY2VpdmVyOjpyZWdpc3RlcigiJyRURVNUT0lEJyIsIFwmbXlfcmVjZWl2ZXIpIHx8IHdhcm4gInJlZ2lzdGVyX3BlcmxfaGFuZGxlcl9mYWlsZWQiOycKK0NPTkZJR1RSQVBEICdwZXJsIE5ldFNOTVA6OlRyYXBSZWNlaXZlcjo6cmVnaXN0ZXIoIickVEVTVE9JRDInIiwgXCZteV9yZWNlaXZlcjIpIHx8IHdhcm4gInJlZ2lzdGVyX3NlY29uZF9wZXJsX2hhbmRsZXJfZmFpbGVkIjsnCitDT05GSUdUUkFQRCAncGVybCBwcmludCBTVERFUlIgInJlZ2lzdGVyZWRfcGVybF9oYW5kbGVyX29rXFxuIjsnCitDT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCisKK1NUQVJUVFJBUEQKKworIyMgMSkgdHJpZ2dlciBlbWJlZGRlZCBwZXJsIG5vdGlmaWNhdGlvbiBoYW5kbGVyCisKK0NBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwICRURVNUT0lEICRWQVJPSUQgcyBoYW5kbGVkX3RyYXBfJHNubXBfdmVyc2lvbiIKKworIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10cmlnZ2VyCisKK0hVUFRSQVBECitDQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAkVEVTVE9JRDIgJFZBUk9JRCBzIGhhbmRsZWRfdHJhcDJfJHNubXBfdmVyc2lvbiIKKworIyMgc3RvcAorU1RPUFRSQVBECisKKworQ0hFQ0tPUkRJRSAiaGFuZGxlZF9ieV9lbWJwZXJsIiAgICAgICAkRU1CUEVSTF9MT0dGSUxFCitDSEVDS09SRElFICJoYW5kbGVkX2FnYWluX2J5X2VtYnBlcmwiICRFTUJQRVJMX0xPR0ZJTEUKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2MWFnZW50cGVybF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmMyMGEzZmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjFhZ2VudHBlcmxfc2ltcGxlCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICdzbm1wZCBlbWJlZGRlZCBwZXJsIHN1cHBvcnQgKHVzaW5nIE5ldFNOTVA6OmFnZW50KScKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgTkVUU05NUF9FTUJFRERFRF9QRVJMCitTS0lQSUZOT1QgSEFWRV9TSUdIVVAKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworIworIyBCZWdpbiB0ZXN0CisjCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworVEVTVE9JRD0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMS4wCitURVNUT0lEMj0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMi4wCitFTUJQRVJMX0FHRU5UPSR7U05NUF9UTVBESVJ9L2hlbGxvLnBsCitjYXQgPiRFTUJQRVJMX0FHRU5UIDw8RU5ECisjIS91c3IvYmluL2VudiBwZXJsCisjIG1pbmltYWwgZW1iZWRkZWQgcGVybCBhZ2VudAorCitteSBcJHJlZ2F0ID0gJy4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OSc7ICMgbmV0U25tcFBsYXlQZW4KK215IFwkbXlvaWQgPSBcJHJlZ2F0IC4gIi4xLjAiOyAjIHRoZSAiaGVsbG8gd29ybGQiIE9JRAorbXkgXCRteW9pZDIgPSBcJHJlZ2F0IC4gIi4yLjAiOyAjIHRoZSAiaGVsbG8gYWdhaW4gd29ybGQiIE9JRAorCit1c2UgTmV0U05NUDo6T0lEIHF3KDphbGwpOwordXNlIE5ldFNOTVA6OmFnZW50IHF3KDphbGwpOwordXNlIE5ldFNOTVA6OkFTTiBxdyg6YWxsKTsKK3VzZSBTTk1QOworCitteSBcJHJlZ29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoXCRyZWdhdCk7CitcJGFnZW50LT5yZWdpc3RlcigiaGVsbG8iLCBcJHJlZ29pZCwgXCZteV9zbm1wX2hhbmRsZXIpOworCitzdWIgbXlfc25tcF9oYW5kbGVyIHsKKyAgbXkgKFwkaGFuZGxlciwgXCRyZWdpc3RyYXRpb25faW5mbywgXCRyZXF1ZXN0X2luZm8sIFwkcmVxdWVzdHMpID0gQF87CisgIGZvcihteSBcJHJlcXVlc3QgPSBcJHJlcXVlc3RzOyBcJHJlcXVlc3Q7IFwkcmVxdWVzdCA9IFwkcmVxdWVzdC0+bmV4dCgpKSB7CisgICAgaWYgKFwkcmVxdWVzdF9pbmZvLT5nZXRNb2RlKCkgPT0gTU9ERV9HRVQpIHsKKyAgICAgIGlmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZCkpIHsKKyAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gd29ybGQiKTsKKyAgICAgICAgbGFzdDsKKyAgICAgIH0gZWxzaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkMikpIHsKKyAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gYWdhaW4gd29ybGQiKTsKKyAgICAgICAgbGFzdDsKKyAgICAgIH0KKyAgICB9CisgIH0KK30KK0VORAorCitlY2hvICJ1c2UgYmxpYiBxdygke1NOTVBfVVBESVJ9L3BlcmwpOyIgPiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKK2VjaG8gJ3VzZSBOZXRTTk1QOjphZ2VudDsnID4+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybC5wbAorZWNobyAnJGFnZW50ID0gbmV3IE5ldFNOTVA6OmFnZW50KCciJ2RvbnRfaW5pdF9hZ2VudCcgPT4gMSwgJ2RvbnRfaW5pdF9saWInID0+IDEpOyIgPj4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCisKK0NPTkZJR0FHRU5UIHBlcmxJbml0RmlsZSAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKK0NPTkZJR0FHRU5UICJwZXJsIGRvICckRU1CUEVSTF9BR0VOVCc7IgorQ09ORklHQUdFTlQgJ3BlcmwgcHJpbnQgU1RERVJSICJyZWdpc3RlcmVkX3BlcmxfYWdlbnRfb2siOycKKworU1RBUlRBR0VOVAorCisjIyAxKSBTTk1QIEdFVCBhZ2FpbnN0IGVtYmVkZGVkIHBlcmwgbWliIG1vZHVsZQorQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEIgorQ0hFQ0sgImhlbGxvIHdvcmxkIgorCisjIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgKEhVUCksIHJlLXRlc3QKK0hVUEFHRU5UCitDQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQyIgorQ0hFQ0sgImhlbGxvIGFnYWluIHdvcmxkIgorCisjIyBzdG9wCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NWFnZW50ZXh0ZW5kX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDE5MjY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY1YWdlbnRleHRlbmRfc2ltcGxlCkBAIC0wLDAgKzEsNTQgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIGV4dGVuZCIKKworWyAieCRPU1RZUEUiID0geG1zeXMgLWEgIngkTVNZU19TSCIgPSB4IF0gJiYgU0tJUCAiXCRNU1lTX1NIIGhhcyBub3QgYmVlbiBzZXQiCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19BR0VOVF9FWFRFTkRfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfVVRJTElUSUVTX0VYRUNVVEVfTU9EVUxFCisKKyMgbWFrZSBzdXJlIHNubXBnZXQgY2FuIGJlIGV4ZWN1dGVkCitTTk1QR0VUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcGdldCIKK1sgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAgc25tcGdldCBub3QgY29tcGlsZWQKKworc25tcF92ZXJzaW9uPXYyYworVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5CisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKKworaW5kZXg9JyJoZWxsbyInCitpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICBDT05GSUdBR0VOVCBleHRlbmQgaGVsbG8gJE1TWVNfU0ggLWMgIiciIGVjaG8gaGVsbG9fd29ybGQgIiciCitlbHNlCisgICAgQ09ORklHQUdFTlQgZXh0ZW5kIGhlbGxvIC91c3IvYmluL2VudiBlY2hvIGhlbGxvX3dvcmxkCitmaQorCitTVEFSVEFHRU5UCisKKyMgTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXRwdXQxTGluZS4iaGVsbG8iID0gU1RSSU5HOiAiaGVsbG9fd29ybGQiCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS4xLiRpbmRleCIKK0NIRUNLT1JESUUgIlNUUklORzogaGVsbG9fd29ybGQiCisKKyNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dHB1dEZ1bGwuImhlbGxvIiA9IFNUUklORzogImhlbGxvX3dvcmxkIgorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuMi4kaW5kZXgiCitDSEVDS09SRElFICJTVFJJTkc6IGhlbGxvX3dvcmxkIgorCisjTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXRMaW5lLiJoZWxsbyIuMSA9IFNUUklORzogImhlbGxvX3dvcmxkIgorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi40LjEuMi4kaW5kZXguMSIKK0NIRUNLT1JESUUgIlNUUklORzogaGVsbG9fd29ybGQiCisKKyNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dE51bUxpbmVzLiJoZWxsbyIgPSBJTlRFR0VSOiAxCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS4zLiRpbmRleCIKK0NIRUNLT1JESUUgIklOVEVHRVI6IDEiCisKKyNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZFJlc3VsdC4iaGVsbG8iID0gSU5URUdFUjogMAorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuNC4kaW5kZXgiCitDSEVDS09SRElFICJJTlRFR0VSOiAwIgorCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjZwYXNzX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2NnBhc3Nfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkZWUxNjQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjZwYXNzX3NpbXBsZQpAQCAtMCwwICsxLDUzIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAiZXh0ZW5kaW5nIGFnZW50IGZ1bmN0aW9uYWxpdHkgd2l0aCBwYXNzIgorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QQVNTX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX1VUSUxJVElFU19FWEVDVVRFX01PRFVMRQorCisjIERvbid0IHJ1biB0aGlzIHRlc3Qgb24gTWluR1cgLSBsb2NhbC9wYXNzdGVzdCBpcyBhIHNoZWxsIHNjcmlwdCBhbmQKKyMgaGVuY2UgcGFzc2luZyBpdCB0byB0aGUgTVNWQ1JUIHBvcGVuKCkgZG9lc24ndCB3b3JrLgorWyAieCRPU1RZUEUiID0gInhtc3lzIiBdICYmIFNLSVAgIk1pbkdXIgorCisjIG1ha2Ugc3VyZSBzbm1wZ2V0IGFuZCBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBHRVQ9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcGdldCIKK1sgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAgc25tcGdldCBub3QgY29tcGlsZWQKK1NOTVBXQUxLPSIke2J1aWxkZGlyfS9hcHBzL3NubXB3YWxrIgorWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAgc25tcHdhbGsgbm90IGNvbXBpbGVkCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCitvaWQ9LjEuMy42LjEuNC4xLjgwNzIuMi4yNTUgICMgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzRXhhbXBsZXMKK0NPTkZJR0FHRU5UIHBhc3MgJG9pZCAke3NyY2Rpcn0vbG9jYWwvcGFzc3Rlc3QKKworT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EdWNkLXNubXAvcGFzcyIKK1NUQVJUQUdFTlQKKworI0NPTU1FTlQgQ2hlY2sgYSBmdWxsIHdhbGsgb2YgdGhlIHNhbXBsZSBkYXRhCitDQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkb2lkIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzU3RyaW5nLjAgPSBTVFJJTkc6IExpZmUsIHRoZSBVbml2ZXJzZSwgYW5kIEV2ZXJ5dGhpbmciCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEgPSBJTlRFR0VSOiA0MiIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRC4xID0gT0lEOiBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSURWYWx1ZSIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1RpbWVUaWNrcy4wID0gVGltZXRpY2tzOiAoMzYzMTM2MjAwKSA0MiBkYXlzLCAwOjQyOjQyLjAwICIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0lwQWRkcmVzcy4wID0gSXBBZGRyZXNzOiAxMjcuMC4wLjEiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAgPSBDb3VudGVyMzI6IDQyIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzR2F1Z2UuMCA9IEdhdWdlMzI6IDQyIgorCisjQ09NTUVOVCBBIGNvdXBsZSBvZiBzcG90IGNoZWNrcyBvZiBHRVQgcmVxdWVzdHMuCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSIKK0NIRUNLT1JESUUgIklOVEVHRVI6IDQyIgorCitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCIKK0NIRUNLT1JESUUgIkNvdW50ZXIzMjogNDIiCisKK1NUT1BBR0VOVAorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2N3Bhc3NwZXJzaXN0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGYxMzMzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDY3cGFzc3BlcnNpc3Rfc2ltcGxlCkBAIC0wLDAgKzEsNjMgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICJleHRlbmRpbmcgYWdlbnQgZnVuY3Rpb25hbGl0eSB3aXRoIHBhc3NfcGVyc2lzdCIKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUEFTU19QRVJTSVNUX01PRFVMRQorCisjIERvbid0IHJ1biB0aGlzIHRlc3Qgb24gTWluR1cgLSBsb2NhbC9wYXNzX3BlcnNpc3R0ZXN0IGlzIGEgc2hlbGwgc2NyaXB0IGFuZAorIyBoZW5jZSBwYXNzaW5nIGl0IHRvIHRoZSBNU1ZDUlQgcG9wZW4oKSBkb2Vzbid0IHdvcmsuCitbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF0gJiYgU0tJUCAiTWluR1ciCisKK1sgLXggL3Vzci9iaW4vcGVybCBdIHx8IFNLSVAgIi91c3IvYmluL3Blcmwgbm90IGZvdW5kIgorCisjIG1ha2Ugc3VyZSBzbm1wZ2V0IGFuZCBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKK1NOTVBHRVQ9IiR7YnVpbGRkaXJ9L2FwcHMvc25tcGdldCIKK1sgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAgc25tcGdldCBub3QgY29tcGlsZWQKK1NOTVBXQUxLPSIke2J1aWxkZGlyfS9hcHBzL3NubXB3YWxrIgorWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAgc25tcHdhbGsgbm90IGNvbXBpbGVkCisKK3NubXBfdmVyc2lvbj12MmMKK1RFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQorLiAuL1N2MmNjb25maWcKKworIworIyBCZWdpbiB0ZXN0CisjCitvaWQ9LjEuMy42LjEuNC4xLjgwNzIuMi4yNTUgICMgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzRXhhbXBsZXMKK0NPTkZJR0FHRU5UIHBhc3NfcGVyc2lzdCAkb2lkICR7c3JjZGlyfS9sb2NhbC9wYXNzX3BlcnNpc3R0ZXN0CisKK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRHVjZC1zbm1wL3Bhc3NfcGVyc2lzdCIKK1BBU1NfUEVSU0lTVF9QSURGSUxFPSIkU05NUF9UTVBESVIvcGFzc19wZXJzaXN0LnBpZC4kJCIKK2V4cG9ydCBQQVNTX1BFUlNJU1RfUElERklMRQorU1RBUlRBR0VOVAorCisjQ09NTUVOVCBDaGVjayBhIGZ1bGwgd2FsayBvZiB0aGUgc2FtcGxlIGRhdGEKK0NBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRvaWQiCitDSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NTdHJpbmcuMCA9IFNUUklORzogTGlmZSwgdGhlIFVuaXZlcnNlLCBhbmQgRXZlcnl0aGluZyIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSA9IElOVEVHRVI6IDQyIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lELjEgPSBPSUQ6IE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRFZhbHVlIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzVGltZVRpY2tzLjAgPSBUaW1ldGlja3M6ICgzNjMxMzYyMDApIDQyIGRheXMsIDA6NDI6NDIuMDAgIgorQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSXBBZGRyZXNzLjAgPSBJcEFkZHJlc3M6IDEyNy4wLjAuMSIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCA9IENvdW50ZXIzMjogMSIKK0NIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0dhdWdlLjAgPSBHYXVnZTMyOiA0MiIKKworI0NPTU1FTlQgQSBjb3VwbGUgb2Ygc3BvdCBjaGVja3Mgb2YgR0VUIHJlcXVlc3RzLgorQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEiCitDSEVDS09SRElFICJJTlRFR0VSOiA0MiIKKworI0NPTU1FTlQgbmV0U25tcFBhc3NDb3VudGVyIHNob3VsZCBpbmNyZW1lbnQsIHNpbmNlIHRoaXMgaXMgcGFzc19wZXJzaXN0CitDQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCIKK0NIRUNLT1JESUUgIkNvdW50ZXIzMjogMiIKKworI0NPTU1FTlQgbm93IGtpbGwgdGhlIHBhc3NfcGVyc2lzdCBzY3JpcHQsIGFuZCBjaGVjayB0aGF0IGl0IHJlY292ZXJzLgorU1RPUFBST0cgJFBBU1NfUEVSU0lTVF9QSURGSUxFCisjQ09NTUVOVCBuZXRTbm1wUGFzc0NvdW50ZXIgc2hvdWxkIGhhdmUgcmV2ZXJ0ZWQgdG8gMSwgYXMgdGhpcyBpcyBhIG5ldyBpbnN0YW5jZS4KK0NBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wIgorQ0hFQ0tPUkRJRSAiQ291bnRlcjMyOiAxIgorCitTVE9QQUdFTlQKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjhleGVjZml4X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA2OGV4ZWNmaXhfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhODE4MzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNjhleGVjZml4X3NpbXBsZQpAQCAtMCwwICsxLDcyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiAiZXhlY2ZpeCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSIKKworU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKKworIyBtYWtlIHN1cmUgc25tcHNldCBhbmQgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCitTTk1QU0VUPSIke2J1aWxkZGlyfS9hcHBzL3NubXBzZXQiCitbIC14ICIkU05NUFNFVCIgXSB8fCBTS0lQIHNubXBzZXQgbm90IGNvbXBpbGVkCitTTk1QV0FMSz0iJHtidWlsZGRpcn0vYXBwcy9zbm1wd2FsayIKK1sgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQIHNubXB3YWxrIG5vdCBjb21waWxlZAorCitzbm1wX3ZlcnNpb249djJjCitzbm1wX3dyaXRlX2FjY2Vzcz0nYWxsJworVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5CisuIC4vU3YyY2NvbmZpZworCisjCisjIEJlZ2luIHRlc3QKKyMKK2lmIFsgIngkT1NUWVBFIiA9IHhtc3lzIF07IHRoZW4KKyAgICBjbWQxPSJ0cnVlIgorICAgIGNtZDI9ImZhbHNlIgorICAgIGVjaG89ImVjaG8iCitlbHNlCisgICAgY21kMT0iJCh3aGljaCB0cnVlKSIKKyAgICBjbWQyPSIkKHdoaWNoIGZhbHNlKSIKKyAgICBlY2hvPSIkKHdoaWNoIGVjaG8pIgorZmkKK0NPTkZJR0FHRU5UIGV4ZWMgICAgdHJ1ZS1jb21tYW5kICAgICRjbWQxCitDT05GSUdBR0VOVCBleGVjZml4IHRydWUtY29tbWFuZCAgICAkY21kMQorQ09ORklHQUdFTlQgZXhlYyAgICBmYWxzZS1jb21tYW5kICAgJGNtZDIKK0NPTkZJR0FHRU5UIGV4ZWNmaXggZmFsc2UtY29tbWFuZCAgICRjbWQyCitDT05GSUdBR0VOVCBleGVjICAgIGVjaG8tJXMtY29tbWFuZCAke2VjaG99ICVzCitDT05GSUdBR0VOVCBleGVjZml4IGVjaG8tJXMtY29tbWFuZCAke2VjaG99IGZpeC0lcworCitTVEFSVEFHRU5UCisKKyMgQ2hlY2sgYSBmdWxsIHdhbGsgb2YgVUNELVNOTVAtTUlCOjpleHRUYWJsZQorQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjpleHRFbnRyeSIKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE5hbWVzLjEgPSBTVFJJTkc6IHRydWUtY29tbWFuZCQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRDb21tYW5kLjEgPSBTVFJJTkc6ICciJGNtZDEiCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRSZXN1bHQuMSA9IElOVEVHRVI6IDAkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0T3V0cHV0LjEgPSBTVFJJTkc6ICQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMSA9IElOVEVHRVI6IG5vRXJyb3IoMCkkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjEgPSBTVFJJTkc6ICciJGNtZDEiCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHROYW1lcy4yID0gU1RSSU5HOiBmYWxzZS1jb21tYW5kJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQuMiA9IFNUUklORzogJyIkY21kMiInJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dFJlc3VsdC4yID0gSU5URUdFUjogMSQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRPdXRwdXQuMiA9IFNUUklORzogJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4yID0gSU5URUdFUjogbm9FcnJvcigwKSQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMiA9IFNUUklORzogJyIkY21kMiInJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE5hbWVzLjMgPSBTVFJJTkc6IGVjaG8tJXMtY29tbWFuZCQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRDb21tYW5kLjMgPSBTVFJJTkc6ICciJHtlY2hvfSInICVzJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dFJlc3VsdC4zID0gSU5URUdFUjogMCQnCitDSEVDSyAnVUNELVNOTVAtTUlCOjpleHRPdXRwdXQuMyA9IFNUUklORzogJXMkJworQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjMgPSBJTlRFR0VSOiBub0Vycm9yKDApJCcKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4zID0gU1RSSU5HOiAnIiR7ZWNob30iJyBmaXgtJXMkJworCitDQVBUVVJFICIkU05NUFNFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAtcjAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4zIGkgMSIKK0NIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4zID0gSU5URUdFUjogcnVuRml4KDEpJworCitDQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OmV4dEVudHJ5IgorQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjMgPSBTVFJJTkc6ICciJHtlY2hvfSInIGZpeC0lcycKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzBjb20yc2VjX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjc2ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMDcwY29tMnNlY19zaW1wbGUKQEAgLTAsMCArMSwxNTkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIGNvbTJzZWMgZGlyZWN0aXZlCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9VRFBfRE9NQUlOCitTS0lQSUYgTkVUU05NUF9OT19ERUJVR0dJTkcKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgNDAxYSBUZXN0IG1pc3NpbmcgQ09OVEVYVAorQ09ORklHQUdFTlQgJ2NvbTJzZWMgLUNuJworIyA0MDFiIFRlc3QgZW1wdHkgQ09OVEVYVAorQ09ORklHQUdFTlQgJ2NvbTJzZWMgLUNuICIiJworIyA0MDFjIFRlc3Qgb3ZlcmxvbmcgQ09OVEVYVCAoMzQgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlYyAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKworIyA0MDJhIFRlc3QgbWlzc2luZyBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYycKKyMgNDAyYiBUZXN0IGVtcHR5IHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjICIiJworIyA0MDJjIFRlc3Qgb3Zlcmxvbmcgc2VjTmFtZSAoMzQgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlYyAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworIyA0MDJkIFRlc3QgdmFsaWQgY29udGV4dCBhbmQgbWlzc2luZyBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYyAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzJworIyA0MDJlIFRlc3QgdmFsaWQgY29udGV4dCBhbmQgZW1wdHkgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMyAiIicKKworIyA0MDNhIFRlc3QgbWlzc2luZyBuZXR3b3JrIGFkZHJlc3MKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDNhJworIyA0MDNiIFRlc3QgZW1wdHkgbmV0d29yayBhZGRyZXNzCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDAzYiAiIicKKyMgNDAzYyBUZXN0IGZvcmJpZGRlbiB2YWx1ZSAobm93IHdoeSBpdCBpcyBmb3JiaWRkZW4uLi4pCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDAzYyBORVRXT1JLJworCisjIDQwNGEgVGVzdCBtaXNzaW5nIGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNGEgZGVmYXVsdCcKKyMgNDA0YiBUZXN0IGVtcHR5IGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNGIgZGVmYXVsdCAiIicKKyMgNDA0YyBUZXN0IGZvcmJpZGRlbiB2YWx1ZSAobm93IHdoeSBpdCBpcyBmb3JiaWRkZW4uLi4pCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA0YyBkZWZhdWx0IENPTU1VTklUWScKKyMgNDA0ZCBUZXN0IG92ZXJsb25nIGNvbW11bml0eSAoMjU1IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNGQgZGVmYXVsdCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUnCisjIDQwNGUgVGVzdCB2YWxpZCBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDRlIGRlZmF1bHQgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisKKyMgNDA1YSBUZXN0ICdkZWZhdWx0JyBjb25maWd1cmF0aW9uCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1YSBkZWZhdWx0IGM0MDVhJworIyA0MDViIFRlc3QgaXAgYWRkcmVzcyBjb25maWd1cmF0aW9uCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1YiAxMC4wLjAuMCBjNDA1YicKKyMgNDA1YyBUZXN0IHZhbGlkIG51bWVyaWMgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWMgMTAuMC4wLjAvOCBjNDA1YycKKyMgNDA1ZCBUZXN0IGludmFsaWQgbnVtZXJpYyBtYXNrICh0b28gYmlnKQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWQgMTAuMC4wLjAvMzMgYzQwNWQnCisjIDQwNWUgVGVzdCBpbnZhbGlkIG51bWVyaWMgbWFzayAobmVnYXRpdmUpCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1ZSAxMC4wLjAuMC8tMSBjNDA1ZScKKyMgNDA1ZiBUZXN0IHZhbGlkIGlwIGFkZHJlc3MgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWYgMTAuMC4wLjAvMjU1LjAuMC4wIGM0MDVmJworIyA0MDVnIFRlc3QgaW52YWxpZCBpcCBhZGRyZXNzIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVnIDEwLjAuMC4wLzUxMi4wLjAuMCBjNDA1ZycKKyMgNDA1aCBUZXN0IGludmFsaWQgaXAgYWRkcmVzcyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1aCAxMC4wLjAuMC9oaCBjNDA1aCcKKyMgNDA1aSBUZXN0IGFkZHJlc3Mgd2l0aCAxIGJpdHMgbm90IGNvdmVyZWQgYnkgdGhlIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDVpIDEwLjAuMC4wLzMuMTkyLjAuMCBjNDA1aScKKyMgNDA1aiBUZXN0IHRoYXQgMC4wLjAuMCB3b3JrcyAoYWxpYXMgZm9yIGRlZmF1bHQpCitDT05GSUdBR0VOVCAnY29tMnNlYyB0NDA1aiAwLjAuMC4wIGM0MDVqJworIyA0MDVrIFRlc3QgdGhhdCAwLjAuMC4wLzAgd29ya3MgKGFsaWFzIGZvciBkZWZhdWx0KQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWsgMC4wLjAuMC8wIGM0MDVrJworIyA0MDVsIFRlc3QgdGhhdCAwLjAuMC4wLzAuMC4wLjAgd29ya3MgKGFsaWFzIGZvciBkZWZhdWx0KQorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwNWwgMC4wLjAuMC8wLjAuMC4wIGM0MDVsJworCisjIDQwNmEgVGVzdCBtYXhpbWFsbHkgbG9uZyBhZGRyZXNzL21hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDZhIDI1NS4yNTUuMjU1LjI1NS8yNTUuMjU1LjI1NS4yNTUgYzQwNmEnCisKKyMgNDA3YSBUZXN0IG5vbiBleGlzdGFudCBob3N0IG5hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjIHQ0MDdhIG5vLnN1Y2guYWRkcmVzcy4gYzQwN2EnCisjIDQwN2IgVGVzdCBtYXhpbWFsbHkgbG9uZyBob3N0IG5hbWUvbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwN2IgYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLmEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMy5hMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMS4vMjU1LjI1NS4yNTUuMjU1IGM0MDdiJworCisjIDQwOCBMb29rdXAgdGVzdHMsIHJlcXVpcmUgbmV0d29yayBhY2Nlc3MKKyMgNDA4YSBUZXN0IGxvb2t1cCByZXR1cm5pbmcgYSBzaW5nbGUgaG9zdAorQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwOGEgd3d3LmlldGYub3JnIGM0MDhhJworIyA0MDhhIFRlc3QgbG9va3VwIHJldHVybmluZyBtdWx0aXBsZSBob3N0cworQ09ORklHQUdFTlQgJ2NvbTJzZWMgdDQwOGIgd3d3Lmdvb2dsZS5jb20gYzQwOGInCisKKyMgRGVmYXVsdCBhZ2VudCBzZXR1cAorQ09ORklHQUdFTlQgIltzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSIgorIyBEdW1teSBjb25maWcgdG8gcHJldmVudCB0aGUgYmFzaWNfc2V0dXAgd2FybmluZworQ09ORklHQUdFTlQgJ3JvY29tbXVuaXR5IHB1YmxpYyAxMjcuMC4wLjAvOCcKKworQUdFTlRfRkxBR1M9Jy1EbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHksbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5LG5ldHNubXBfdW5peF9wYXJzZV9zZWN1cml0eScKKworU1RBUlRBR0VOVAorCitTQVZFQ0hFQ0tBR0VOVCgpIHsKKyAgICBDSEVDS0FHRU5UICIkQCIKKyAgICBpZiBbICJ4JHJldHVybl92YWx1ZSIgIT0gIngwIiBdIDsgdGhlbgorICAgICAgICBGSU5JU0hFRAorICAgIGZpCit9CisKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE6IEVycm9yOiBtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyOiBFcnJvcjogbWlzc2luZyBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDM6IEVycm9yOiBjb250ZXh0IG5hbWUgdG9vIGxvbmcnCitDSEVDS0FHRU5UQ09VTlQgYXRsZWFzdG9uZSAnbGluZSA0OiBFcnJvcjogQmxhbmsgbGluZSBmb2xsb3dpbmcgY29tMnNlYyB0b2tlbi4nCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA1OiBFcnJvcjogZW1wdHkgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA2OiBFcnJvcjogc2VjdXJpdHkgbmFtZSB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDc6IEVycm9yOiBtaXNzaW5nIE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgODogRXJyb3I6IGVtcHR5IE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgOTogRXJyb3I6IG1pc3NpbmcgU09VUkNFIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEwOiBFcnJvcjogZW1wdHkgU09VUkNFIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDExOiBFcnJvcjogZXhhbXBsZSBjb25maWcgTkVUV09SSyBub3QgcHJvcGVybHkgY29uZmlndXJlZCcKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEyOiBFcnJvcjogbWlzc2luZyBDT01NVU5JVFkgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTM6IEVycm9yOiBlbXB0eSBDT01NVU5JVFkgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTQ6IEVycm9yOiBleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxNTogRXJyb3I6IGNvbW11bml0eSBuYW1lIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJzwiMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQiLCAwLjAuMC4wLzAuMC4wLjA+ID0+ICJ0NDA0ZSInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1YSIsIDAuMC4wLjAvMC4wLjAuMD4gPT4gInQ0MDVhIicKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDViIiwgMTAuMC4wLjAvMjU1LjI1NS4yNTUuMjU1PiA9PiAidDQwNWIiJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWMiLCAxMC4wLjAuMC8yNTUuMC4wLjA+ID0+ICJ0NDA1YyInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyMDogRXJyb3I6IGJhZCBtYXNrIGxlbmd0aCcKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDIxOiBFcnJvcjogYmFkIG1hc2sgbGVuZ3RoJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWYiLCAxMC4wLjAuMC8yNTUuMC4wLjA+ID0+ICJ0NDA1ZiInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyMzogRXJyb3I6IGJhZCBtYXNrJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjQ6IEVycm9yOiBiYWQgbWFzaycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI1OiBFcnJvcjogc291cmNlL21hc2sgbWlzbWF0Y2gnCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1aiIsIDAuMC4wLjAvMjU1LjI1NS4yNTUuMjU1PiA9PiAidDQwNWoiJworU0FWRUNIRUNLQUdFTlQgJzwiYzQwNWsiLCAwLjAuMC4wLzAuMC4wLjA+ID0+ICJ0NDA1ayInCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNDA1bCIsIDAuMC4wLjAvMC4wLjAuMD4gPT4gInQ0MDVsIicKK1NBVkVDSEVDS0FHRU5UICc8ImM0MDZhIiwgMjU1LjI1NS4yNTUuMjU1LzI1NS4yNTUuMjU1LjI1NT4gPT4gInQ0MDZhIicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDMwOiBFcnJvcjonICMgbXNnIGZyb20gaF9zdHJlcnJvciBzbyBpdCB2YXJpZXMKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDMxOiBFcnJvcjonICMgbXNnIGZyb20gaF9zdHJlcnJvciBzbyBpdCB2YXJpZXMKKworQ0hFQ0tBR0VOVCAnPCJjNDA4YSInCitpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtZXEgMCBdIDsgdGhlbgorICBDSEVDS0FHRU5UICdsaW5lIDMyOiBFcnJvcjonCisgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1uZSAxIF0gOyB0aGVuCisgICAgcmV0dXJuX3ZhbHVlPTEKKyAgICBGSU5JU0hFRAorICBmaQorZWxpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtbmUgMSBdIDsgdGhlbgorICByZXR1cm5fdmFsdWU9MQorICBGSU5JU0hFRAorZmkKKworQ0hFQ0tBR0VOVCAnPCJjNDA4YiInCitpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtZXEgMCBdIDsgdGhlbgorICBDSEVDS0FHRU5UICdsaW5lIDMzOiBFcnJvcjonCisgIGlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiIC1uZSAxIF0gOyB0aGVuCisgICAgcmV0dXJuX3ZhbHVlPTEKKyAgZmkKK2VsaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLW5lIDEgXSA7IHRoZW4KKyAgcmV0dXJuX3ZhbHVlPTEKK2ZpCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzFjb20yc2VjNl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM5MGFkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MWNvbTJzZWM2X3NpbXBsZQpAQCAtMCwwICsxLDE1NSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgY29tMnNlYzYgZGlyZWN0aXZlCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTgorU0tJUElGIE5FVFNOTVBfTk9fREVCVUdHSU5HCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIDYwMWEgVGVzdCBtaXNzaW5nIENPTlRFWFQKK0NPTkZJR0FHRU5UICdjb20yc2VjNiAtQ24nCisjIDYwMWIgVGVzdCBlbXB0eSBDT05URVhUCitDT05GSUdBR0VOVCAnY29tMnNlYzYgLUNuICIiJworIyA2MDFjIFRlc3Qgb3ZlcmxvbmcgQ09OVEVYVCAoMzQgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlYzYgLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisKKyMgNjAyYSBUZXN0IG1pc3Npbmcgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2JworIyA2MDJiIFRlc3QgZW1wdHkgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2ICIiJworIyA2MDJjIFRlc3Qgb3Zlcmxvbmcgc2VjTmFtZSAoMzQgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlYzYgMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKyMgNjAyZCBUZXN0IHZhbGlkIGNvbnRleHQgYW5kIG1pc3Npbmcgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMnCisjIDYwMmUgVGVzdCB2YWxpZCBjb250ZXh0IGFuZCBlbXB0eSBzZWNOYW1lCitDT05GSUdBR0VOVCAnY29tMnNlYzYgLUNuIDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMyAiIicKKworIyA2MDNhIFRlc3QgbWlzc2luZyBuZXR3b3JrIGFkZHJlc3MKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjAzYScKKyMgNjAzYiBUZXN0IGVtcHR5IG5ldHdvcmsgYWRkcmVzcworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDNiICIiJworIyA2MDNjIFRlc3QgZm9yYmlkZGVuIHZhbHVlCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwM2MgTkVUV09SSycKKworIyA2MDRhIFRlc3QgbWlzc2luZyBDT01NVU5JVFkKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA0YSBkZWZhdWx0JworIyA2MDRiICdFcnJvcjogZW1wdHkgQ09NTVVOSVRZIHBhcmFtZXRlcicKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA0YiBkZWZhdWx0ICIiJworIyA2MDRjIFRlc3Qgb3ZlcmxvbmcgQ09NTVVOSVRZCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNGMgZGVmYXVsdCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUnCisjIDYwNGQgVGVzdCBiYXJlbHkgdmFsaWQgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNGQgZGVmYXVsdCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCcKKyMgNjA0ZSBUZXN0IGZvcmJpZGRlbiB2YWx1ZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDRlIGRlZmF1bHQgQ09NTVVOSVRZJworCisjIDYwNWEgVGVzdCAnZGVmYXVsdCcgY29uZmlndXJhdGlvbgorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVhIGRlZmF1bHQgYzYwNWEnCisjIDYwNWIgVGVzdCBpcCBhZGRyZXNzIGNvbmZpZ3VyYXRpb24KK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1YiBhYTAwOjogYzYwNWInCisjIDYwNWMgVGVzdCB2YWxpZCBudW1lcmljIG1hc2sKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA1YyBhYTAwOjovOCBjNjA1YycKKyMgNjA1ZCBUZXN0IGludmFsaWQgbnVtZXJpYyBtYXNrICh0b28gYmlnKQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVkIGFhMDA6Oi8xMjkgYzYwNWQnCisjIDYwNWUgVGVzdCBpbnZhbGlkIG51bWVyaWMgbWFzayAobmVnYXRpdmUpCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWUgYWEwMDo6Ly0xIGM2MDVlJworIyA2MDVmIFRlc3QgdmFsaWQgaXAgYWRkcmVzcyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWYgYWEwMDo6L2ZmMDA6OiBjNjA1ZicKKyMgNjA1ZyBUZXN0IGludmFsaWQgaXAgYWRkcmVzcyBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWcgYWEwMDo6L2ZmZmZmOjogYzYwNWcnCisjIDYwNWggVGVzdCBpbnZhbGlkIGlwIGFkZHJlc3MgbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDVoIGFhMDA6Oi9nZzAwOjogYzYwNWgnCisjIDYwNWkgVGVzdCBhZGRyZXNzIHdpdGggMSBiaXRzIG5vdCBjb3ZlcmVkIGJ5IHRoZSBtYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNWkgYWEwMDo6LzBmZjA6OiBjNjA1aScKKworIyA2MDZhIFRlc3QgbWF4aW1hbGx5IGxvbmcgYWRkcmVzcy9tYXNrCitDT05GSUdBR0VOVCAnY29tMnNlYzYgdDYwNmEgZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmL2ZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZiBjNjA2YScKKworIyA2MDdhIFRlc3Qgbm9uIGV4aXN0YW50IGhvc3QgbmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDdhIG5vLnN1Y2guYWRkcmVzcy4gYzYwN2EnCisjIDYwN2IgVGVzdCBtYXhpbWFsbHkgbG9uZyBob3N0IG5hbWUvbWFzaworQ09ORklHQUdFTlQgJ2NvbTJzZWM2IHQ2MDdiIGEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMy5hMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMuYTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzLmEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEuL2ZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZiBjNjA3YicKKworIyA2MDggTG9va3VwIHRlc3RzLCByZXF1aXJlIG5ldHdvcmsgYWNjZXNzCisjIDYwOGEgVGVzdCBsb29rdXAgcmV0dXJuaW5nIGEgc2luZ2xlIGhvc3QKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA4YSBvbmVhYWFhLm5ldC1zbm1wLm9yZyBjNjA4YScKKyMgNjA4YiBUZXN0IGxvb2t1cCByZXR1cm5pbmcgbXVsdGlwbGUgaG9zdHMKK0NPTkZJR0FHRU5UICdjb20yc2VjNiB0NjA4YiB0d29hYWFhLm5ldC1zbm1wLm9yZyBjNjA4YicKKworIyBEZWZhdWx0IGFnZW50IHNldHVwCitDT05GSUdBR0VOVCAiW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIiCisjIER1bW15IGNvbmZpZyB0byBwcmV2ZW50IHRoZSBiYXNpY19zZXR1cCB3YXJuaW5nCitDT05GSUdBR0VOVCAncm9jb21tdW5pdHkgcHVibGljIDEyNy4wLjAuMC84JworCitBR0VOVF9GTEFHUz0nLURuZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eSxuZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHksbmV0c25tcF91bml4X3BhcnNlX3NlY3VyaXR5JworCitTVEFSVEFHRU5UCisKK1NBVkVDSEVDS0FHRU5UKCkgeworICAgIENIRUNLQUdFTlQgIiRAIgorICAgIGlmIFsgIngkcmV0dXJuX3ZhbHVlIiAhPSAieDAiIF0gOyB0aGVuCisgICAgICAgIEZJTklTSEVECisgICAgZmkKK30KKworIyA2MDEKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE6IEVycm9yOiBtaXNzaW5nIENPTlRFWFRfTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyOiBFcnJvcjogbWlzc2luZyBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDM6IEVycm9yOiBjb250ZXh0IG5hbWUgdG9vIGxvbmcnCisjIDYwMgorQ0hFQ0tBR0VOVENPVU5UIGF0bGVhc3RvbmUgJ2xpbmUgNDogRXJyb3I6IEJsYW5rIGxpbmUgZm9sbG93aW5nIGNvbTJzZWM2IHRva2VuLicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDU6IEVycm9yOiBlbXB0eSBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDY6IEVycm9yOiBzZWN1cml0eSBuYW1lIHRvbyBsb25nJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNzogRXJyb3I6IG1pc3NpbmcgTkFNRSBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA4OiBFcnJvcjogZW1wdHkgTkFNRSBwYXJhbWV0ZXInCisjIDYwMworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgOTogRXJyb3I6IG1pc3NpbmcgU09VUkNFIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEwOiBFcnJvcjogZW1wdHkgU09VUkNFIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDExOiBFcnJvcjogZXhhbXBsZSBjb25maWcgTkVUV09SSyBub3QgcHJvcGVybHkgY29uZmlndXJlZCcKKyMgNjA0CitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMjogRXJyb3I6IG1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDEzOiBFcnJvcjogZW1wdHkgQ09NTVVOSVRZIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE0OiBFcnJvcjogY29tbXVuaXR5IG5hbWUgdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnPCIxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNCIsIDo6Lzo6PiA9PiAidDYwNGQiJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTY6IEVycm9yOiBleGFtcGxlIGNvbmZpZyBDT01NVU5JVFkgbm90IHByb3Blcmx5IGNvbmZpZ3VyZWQnCisjIDYwNQorU0FWRUNIRUNLQUdFTlQgJzwiYzYwNWEiLCA6Oi86Oj4gPT4gInQ2MDVhIicKK1NBVkVDSEVDS0FHRU5UICc8ImM2MDViIiwgYWEwMDo6L2ZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZj4gPT4gInQ2MDViIicKK1NBVkVDSEVDS0FHRU5UICc8ImM2MDVjIiwgYWEwMDo6L2ZmMDA6Oj4gPT4gInQ2MDVjIicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDIwOiBFcnJvcjogYmFkIG1hc2sgbGVuZ3RoJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjE6IEVycm9yOiBiYWQgbWFzayBsZW5ndGgnCitTQVZFQ0hFQ0tBR0VOVCAnPCJjNjA1ZiIsIGFhMDA6Oi9mZjAwOjo+ID0+ICJ0NjA1ZiInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyMzogRXJyb3I6IGJhZCBtYXNrJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMjQ6IEVycm9yOiBiYWQgbWFzaycKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI1OiBFcnJvcjogc291cmNlL21hc2sgbWlzbWF0Y2gnCisjIDYwNgorU0FWRUNIRUNLQUdFTlQgJzwiYzYwNmEiLCBmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmYvZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjpmZmZmPiA9PiAidDYwNmEiJworIyA2MDcKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI3OiBFcnJvcjonCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAyODogRXJyb3I6JworCisjIDYwOAorQ0hFQ0tBR0VOVCAnPCJjNjA4YSInCitpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtZXEgMCBdIDsgdGhlbgorICBDSEVDS0FHRU5UICdsaW5lIDI5OiBFcnJvcjonCisgIGVycm51bT1gZXhwciAkZXJybnVtIC0gMWAKKyAgaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLW5lIDEgXSA7IHRoZW4KKyAgICBGSU5JU0hFRAorICBmaQorZWxpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtbmUgMSBdIDsgdGhlbgorICBGSU5JU0hFRAorZmkKKworQ0hFQ0tBR0VOVENPVU5UIGF0bGVhc3RvbmUgJzwiYzYwOGIiJworaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgLWVxIDAgXSA7IHRoZW4KKyAgQ0hFQ0tBR0VOVCAnbGluZSAzMDogRXJyb3I6JworICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAtZXEgMSBdIDsgdGhlbgorICAgIGVycm51bT1gZXhwciAkZXJybnVtIC0gMWAKKyAgZmkKK2ZpCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QwNzJjb20yc2VjdW5peF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzODBmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDA3MmNvbTJzZWN1bml4X3NpbXBsZQpAQCAtMCwwICsxLDExMSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgY29tMnNlY3VuaXggZGlyZWN0aXZlCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgorU0tJUElGIE5FVFNOTVBfTk9fREVCVUdHSU5HCitTS0lQSUZOT1QgU0laRU9GX1NPQ0tBRERSX1VOX1NVTl9QQVRICisKKyMKKyMgUHJlcGFyZSB0ZXN0CisjCitpZiBbIGB1bmFtZSAtc2AgPSBTdW5PUyBdCit0aGVuIEFXSz1uYXdrCitlbHNlIEFXSz1hd2sKK2ZpCisKK3N1bl9wYXRoX3NpemVkPWAkQVdLICcvXiNkZWZpbmUgU0laRU9GX1NPQ0tBRERSX1VOX1NVTl9QQVRILyB7IHJlcyA9ICJhIjsgZm9yKG4gPSAyOyBuIDwgJDM7ICsrbikgeyByZXMgPSByZXMgc3Vic3RyKCIxMjM0NTY3ODkwIiwgbiAlIDEwICsgMSwgMSk7IH0gcHJpbnQgcmVzOyB9JyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oYAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyB1MDFhIFRlc3QgbWlzc2luZyBDT05URVhUCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggLUNuJworIyB1MDFhIFRlc3QgZW1wdHkgQ09OVEVYVAorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IC1DbiAiIicKKyMgdTAxYyBUZXN0IG92ZXJsb25nIENPTlRFWFQgKDM0IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworCisjIHUwMmEgVGVzdCBtaXNzaW5nIHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCcKKyMgdTAyYiBUZXN0IGVtcHR5IHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAiIicKKyMgdTAyYyBUZXN0IG92ZXJsb25nIHNlY05hbWUgKDM0IGNoYXJzKQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQnCisjIHUwMmQgVGVzdCB2YWxpZCBjb250ZXh0IGFuZCBtaXNzaW5nIHNlY05hbWUKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCAtQ24gMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzJworIyB1MDJlIFRlc3QgdmFsaWQgY29udGV4dCBhbmQgZW1wdHkgc2VjTmFtZQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IC1DbiAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjMgIiInCisKKyMgdTAzYSBUZXN0IG1pc3Npbmcgc29ja3BhdGgKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTAzYScKKyMgdTAzYiBUZXN0IGVtcHR5IHNvY2twYXRoCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwM2IgIiInCisjIHUwM2MgVGVzdCBvdmVybG9uZyBzb2NrcGF0aCAoc2l6ZW9mKHNvY2thZGRyX3VuLnN1bl9wYXRoKSBjaGFycykKK0NPTkZJR0FHRU5UICJjb20yc2VjdW5peCB0dTAzYyAke3N1bl9wYXRoX3NpemVkfXgiCisjIHUwM2QgVGVzdCB2YWxpZCBzb2NrcGF0aCAoc2l6ZW9mKHNvY2thZGRyX3VuLnN1bl9wYXRoKSAtIDEgY2hhcnMpCitDT05GSUdBR0VOVCAiY29tMnNlY3VuaXggdHUwM2QgJHtzdW5fcGF0aF9zaXplZH0iCisKKyMgdTA0YSBUZXN0IG1pc3NpbmcgY29tbXVuaXR5CitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwNGEgZGVmYXVsdCcKKyMgdTA0YiBUZXN0IGVtcHR5IGNvbW11bml0eQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDRiIGRlZmF1bHQgIiInCisjIHUwNGMgVGVzdCBmb3JiaWRkZW4gdmFsdWUgKG5vdyB3aHkgaXQgaXMgZm9yYmlkZGVuLi4uKQorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDRjIGRlZmF1bHQgQ09NTVVOSVRZJworIyB1MDRkIFRlc3Qgb3ZlcmxvbmcgY29tbXVuaXR5ICgyNTUgY2hhcnMpCitDT05GSUdBR0VOVCAnY29tMnNlY3VuaXggdHUwNGQgZGVmYXVsdCAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDUnCisjIHUwNGUgVGVzdCB2YWxpZCBjb21tdW5pdHkKK0NPTkZJR0FHRU5UICdjb20yc2VjdW5peCB0dTA0ZSBkZWZhdWx0IDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0JworCisjIHUwNWEgVGVzdCAnZGVmYXVsdCcgY29uZmlndXJhdGlvbgorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDVhIGRlZmF1bHQgY3UwNWEnCisKKyMgdTA3YSBUZXN0IG5vbiBleGlzdGFudCBzb2NrcGF0aAorQ09ORklHQUdFTlQgJ2NvbTJzZWN1bml4IHR1MDdhIC9kZXYvbnVsbC9uby9zdWNoIGN1MDdhJworCisjIERlZmF1bHQgYWdlbnQgc2V0dXAKK0NPTkZJR0FHRU5UICJbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUiIKKyMgRHVtbXkgY29uZmlnIHRvIHByZXZlbnQgdGhlIGJhc2ljX3NldHVwIHdhcm5pbmcKK0NPTkZJR0FHRU5UICdyb2NvbW11bml0eSBwdWJsaWMgMTI3LjAuMC4wLzgnCisKK0FHRU5UX0ZMQUdTPSctRG5ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5LG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eSxuZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHknCisKK1NUQVJUQUdFTlQKKworU0FWRUNIRUNLQUdFTlQoKSB7CisgICAgQ0hFQ0tBR0VOVCAiJEAiCisgICAgaWYgWyAieCRyZXR1cm5fdmFsdWUiICE9ICJ4MCIgXSA7IHRoZW4KKyAgICAgICAgRklOSVNIRUQKKyAgICBmaQorfQorCisjIHUwMQorU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTogRXJyb3I6IG1pc3NpbmcgQ09OVEVYVF9OQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDI6IEVycm9yOiBtaXNzaW5nIE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMzogRXJyb3I6IGNvbnRleHQgbmFtZSB0b28gbG9uZycKKyMgdTAyCitDSEVDS0FHRU5UQ09VTlQgYXRsZWFzdG9uZSAnbGluZSA0OiBFcnJvcjogQmxhbmsgbGluZSBmb2xsb3dpbmcgY29tMnNlY3VuaXggdG9rZW4uJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNTogRXJyb3I6IGVtcHR5IE5BTUUgcGFyYW1ldGVyJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgNjogRXJyb3I6IHNlY3VyaXR5IG5hbWUgdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA3OiBFcnJvcjogbWlzc2luZyBOQU1FIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDg6IEVycm9yOiBlbXB0eSBOQU1FIHBhcmFtZXRlcicKKyMgdTAzCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSA5OiBFcnJvcjogbWlzc2luZyBTT0NLUEFUSCBwYXJhbWV0ZXInCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMDogRXJyb3I6IGVtcHR5IFNPQ0tQQVRIIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDExOiBFcnJvcjogc29ja3BhdGggdG9vIGxvbmcnCitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMjogRXJyb3I6IG1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlcicKKyMgdTA0CitTQVZFQ0hFQ0tBR0VOVCAnbGluZSAxMzogRXJyb3I6IG1pc3NpbmcgQ09NTVVOSVRZIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE0OiBFcnJvcjogZW1wdHkgQ09NTVVOSVRZIHBhcmFtZXRlcicKK1NBVkVDSEVDS0FHRU5UICdsaW5lIDE1OiBFcnJvcjogZXhhbXBsZSBjb25maWcgQ09NTVVOSVRZIG5vdCBwcm9wZXJseSBjb25maWd1cmVkJworU0FWRUNIRUNLQUdFTlQgJ2xpbmUgMTY6IEVycm9yOiBjb21tdW5pdHkgbmFtZSB0b28gbG9uZycKK1NBVkVDSEVDS0FHRU5UICc8IjEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0NTY3ODkwMTIzNDU2Nzg5MDEyMzQ1Njc4OTAxMjM0IiwgIiI+ID0+ICJ0dTA0ZSInCisjIHUwNQorU0FWRUNIRUNLQUdFTlQgJzwiY3UwNWEiLCAiIj4gPT4gInR1MDVhIicKKyMgdTA3CitTQVZFQ0hFQ0tBR0VOVCAnPCJjdTA3YSIsICIvZGV2L251bGwvbm8vc3VjaCI+ID0+ICJ0dTA3YSInCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMDBhZ2VudGh1cF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZDQ5NDllMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEwMGFnZW50aHVwX3NpbXBsZQpAQCAtMCwwICsxLDM2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiB0aGF0IHRoZSBhZ2VudCByZXNwb25kcyBwcm9wZXJseSB0byBhIGtpbGwgLUhVUAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCitTS0lQSUZOT1QgSEFWRV9TSUdIVVAKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKKyMgYWRkIGEgYWdlbnQgY29uZmlndXJhdGlvbiBsaW5lIHRoYXQgd291bGRuJ3QgaGF2ZSBiZWVuIHRoZXJlIHdoZW4KKyMgdGhlIHN0YXJ0ZWQgdXAuCitDT05GSUdBR0VOVCBzeXNsb2NhdGlvbiBub3QtYW55d2hlcmUtaW4tcGFydGljdWxhcgorCisjIGtpbGwgLUhVUCB0aGUgYWdlbnQgdG8gZ2V0IGl0IHRvIHJlLXJlYWQgdGhlIC5jb25mIGZpbGUuCitERUxBWQora2lsbCAtSFVQIGBjYXQgJFNOTVBfU05NUERfUElEX0ZJTEVgID4gL2Rldi9udWxsIDI+JjEKK0RFTEFZCisKKyMgQW5kIHNlZSBpZiBpdCBoYXMgdGhlIG5ldyB2YWx1ZS4KK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjYuMCIKKworU1RPUEFHRU5UCisKK0NIRUNLICJub3QtYW55d2hlcmUtaW4tcGFydGljdWxhciIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMGFnZW50eGdldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmOTFkMzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTBhZ2VudHhnZXRfc2ltcGxlCkBAIC0wLDAgKzEsNTkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIEFnZW50WCBHRVQgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCitlbHNlCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKK2ZpCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIsd2luRXh0RExMIgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCisKK2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIGFnZW50eCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBzeXN0ZW1fbWliIgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKKyAgU1RBUlRBR0VOVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIHN5c3RlbSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgMyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCisgIENIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMWFnZW50eHNldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3OTM5YmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTFhZ2VudHhzZXRfc2ltcGxlCkBAIC0wLDAgKzEsNzggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIEFnZW50WCBTRVQgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiAgICBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCitlbHNlCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKK2ZpCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIsd2luRXh0RExMIC1EQWdlbnRYIgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKKworaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgQWdlbnRYIHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1YIC1JIHN5c3RlbV9taWIiCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9ib2d1cy5jb25mIgorICBlY2hvICJwc3lzY29udGFjdCB0ZXN0Y29udGFjdCIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgU1RBUlRBR0VOVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBcIip0ZXN0Y29udGFjdCIKKworICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKworICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIHN5c3RlbSBtaWIKKyAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAgcyBuZXd0ZXN0Y29udGFjdCIKKworICAgIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IFwiKm5ld3Rlc3Rjb250YWN0IgorCisgICAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisKKwkjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorCUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKwkKKwlDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBcIipuZXd0ZXN0Y29udGFjdCIKKyAgICBmaQorICBmaQorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEyYWdlbnR4c2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYxMGI0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExMmFnZW50eHNldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsNzIgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIEFnZW50WCBpbGxlZ2FsIFNFVCBoYW5kbGluZyBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGICAgIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCitpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKK2Vsc2UKK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgorZmkKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYix3aW5FeHRETEwgLURBZ2VudFgiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKK0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCitpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBBZ2VudFggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgc3lzdGVtX21pYiIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCisgIFNUQVJUQUdFTlQKKworICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAiCisKKyAgIyB3ZSBkb24ndCBrbm93IHRoZSByZWFsIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LCBzbyB3ZSB0ZXN0IGZvciB3aGF0CisgICMgd2Ugc2hvdWxkICpub3QqIGdldCBiYWNrLgorICBDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCisgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMDsgdGhlbgorCisgICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgc2V0dGluZyB0aGUgc3lzdGVtIG1pYgorICAgIENBUFRVUkUgInNubXBzZXQgLU9uIC1JciAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAgaSA0IgorCisgICAgQ0hFQ0sgIndyb25nVHlwZSIKKworICBmaQorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworZmkKKworIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKK1NUT1BBR0VOVAorCisjIGFsbCBkb25lICh3aGV3KQorRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTEzYWdlbnR4dHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhNWUyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDExM2FnZW50eHRyYXBfc2ltcGxlCkBAIC0wLDAgKzEsNzkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIEFnZW50WCB0cmFwIHNlbmRpbmcgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKK1NLSVBJRk5PVCBORVRTTk1QX1NFQ01PRF9VU00KKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhcnQgdGhlIHRyYXAgZGVtb24KK0NPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYworU1RBUlRUUkFQRAorCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworIyBjb25maWd1cmUgdGhlIHRyYXAgcmVjZWl2ZXIuCitDT05GSUdBR0VOVCB0cmFwc2luayAke1NOTVBfVFJBTlNQT1JUX1NQRUN9OiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX1NOTVBUUkFQRF9QT1JUfSBwdWJsaWMKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIGV4YW1wbGUgbWliLgoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggJFNOTVBfVE1QRElSL2FnZW50eF9zb2NrZXQiCitlbHNlCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLXggdGNwOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSIKK2ZpCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLWV4YW1wbGUiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIGV4YW1wbGUgbWliCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuMjAyMS4yNTQuMS4wIgorCitDSEVDSyAiTm8gU3VjaCBPYmplY3QiCisKK2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIEFnZW50WCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBleGFtcGxlIC1EYWRkIgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKKworICBTVEFSVEFHRU5UCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIGV4YW1wbGUgbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS4yMDIxLjI1NC4xLjAiCisKKyAgQ0hFQ0sgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgorCisgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorCisgICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc2VuZHMgYSB0cmFwIGZyb20gdGhlIGV4bWFwbGUgbWliCisgICAgQ0FQVFVSRSAic25tcHNldCAtT24gLXIgMCAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuMjAyMS4yNTQuOC4wIGkgMSIKKyAgICBERUxBWQorICAgIENIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgorCisgIGZpCisKKyAgIyBzdG9wIHRoZSBzdWJhZ2VudAorICBTVE9QQUdFTlQKKworICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCitmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgc3RvcCB0aGUgdHJhcCBkZW1vbgorU1RPUFRSQVBECisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTRhZ2VudHhhZ2VudHh0cmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODQ3NWQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE0YWdlbnR4YWdlbnR4dHJhcF9zaW1wbGUKQEAgLTAsMCArMSw0NCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgQWdlbnRYIHRyYXAgc2VuZGluZyBzdXBwb3J0IHVzaW5nIGFnZW50eHRyYXAKKworU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCitTS0lQSUZOT1QgTkVUU05NUF9TRUNNT0RfVVNNCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YXJ0IHRoZSB0cmFwIGRlbW9uCitDT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKK1NUQVJUVFJBUEQKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKyMgY29uZmlndXJlIHRoZSB0cmFwIHJlY2VpdmVyLgorQ09ORklHQUdFTlQgdHJhcDJzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYworCisjIFN0YXJ0IHRoZSBhZ2VudAoraWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dW5peCIgXTt0aGVuCitBR0VOVFhfU0VSVkVSPSIteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKK2Vsc2UKK0FHRU5UWF9TRVJWRVI9Ii14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCitmaQorQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAkQUdFTlRYX1NFUlZFUiIKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAiYWdlbnR4dHJhcCAkQUdFTlRYX1NFUlZFUiAwLjAgMC4wIHMgbW9zdGx5X2hhcm1sZXNzIgorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgc3RvcCB0aGUgdHJhcCBkZW1vbgorU1RPUFRSQVBECisKKyMgQ2hlY2sgdGhhdCB0aGUgdHJhcCB3YXMgcmVjZWl2ZWQKK0NIRUNLVFJBUEQgIj0gU1RSSU5HOiBcIiptb3N0bHlfaGFybWxlc3NcIioiCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMTVhZ2VudHhwZXJsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZGY2NDcxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTE1YWdlbnR4cGVybF9zaW1wbGUKQEAgLTAsMCArMSwxMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSICdBZ2VudFggc3ViYWdlbnQgaW4gUGVybCAodXNpbmcgTmV0U05NUDo6YWdlbnQpJworCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQorU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKK1NLSVBJRk5PVCBIQVZFX1NJR0hVUAorIyBtYWtlIHN1cmUgdGhlIHRvb2xraXQgaGFzIGJlZW4gY29uZmlndXJlZCAtLXdpdGgtcGVybC1tb2R1bGVzCitbIC1kICR7U05NUF9VUERJUn0vcGVybC9ibGliL2FyY2gvYXV0by9OZXRTTk1QL2FnZW50IF0gfHwgU0tJUCBOb3QgLS13aXRoLXBlcmwtbW9kdWxlcworCisjCisjIEJlZ2luIHRlc3QKKyMKKworc25tcF92ZXJzaW9uPXYyYworVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5CisuIC4vU3YyY2NvbmZpZworCitURVNUT0lEPS4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OS4xLjAKK1RFU1RPSUQyPS4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OS4yLjAKK0FHRU5UWF9TT0NLRVQ9JHtTTk1QX1RNUERJUn0vYWdlbnR4X3NvY2tldAorUEVSTF9TVUJBR0VOVD0ke1NOTVBfVE1QRElSfS9oZWxsby5wbAorUEVSTF9TVUJBR0VOVF9DT05GPSR7U05NUF9UTVBESVJ9L2hlbGxvLmNvbmYKKworY2F0ID4kUEVSTF9TVUJBR0VOVCA8PEVORAorIyEke1NOTVBfUEVSTFBST0d9CisjIG1pbmltYWwgQWdlbnRYIHN1YmFnZW50IGluIFBlcmwKKwordXNlIGJsaWIgcXcoJHtTTk1QX1VQRElSfS9wZXJsKTsKK3VzZSBOZXRTTk1QOjpPSUQgcXcoOmFsbCk7Cit1c2UgTmV0U05NUDo6YWdlbnQgcXcoOmFsbCk7Cit1c2UgTmV0U05NUDo6QVNOIHF3KDphbGwpOwordXNlIE5ldFNOTVA6OmFnZW50OjpkZWZhdWx0X3N0b3JlOwordXNlIE5ldFNOTVA6OmRlZmF1bHRfc3RvcmUgcXcoOmFsbCk7Cit1c2UgU05NUDsKKworIyMgZG91YmxlLWZvcmsgZGFlbW9uCitteSBcJHBpZDsKK3VubGVzcyAoXCRwaWQgPSBmb3JrKSB7CisgIHVubGVzcyAoZm9yaykgeworICAgICMjIHN0YXJ0IG1haW4gY29kZQorICAgIG15IFwkcmVnYXQgPSAnLjEuMy42LjEuNC4xLjg4NzIuOTk5OS45OTk5JzsgIyBuZXRTbm1wUGxheVBlbgorICAgIG15IFwkbXlvaWQgPSBcJHJlZ2F0IC4gIi4xLjAiOyAjIHRoZSAiaGVsbG8gd29ybGQiIE9JRAorICAgIG15IFwkbXlvaWQyID0gXCRyZWdhdCAuICIuMi4wIjsgIyB0aGUgImhlbGxvIGFnYWluIHdvcmxkIiBPSUQKKworICAgIG15IFwkcGlkZmlsZSA9IHNoaWZ0OyAjIHRha2UgUElEIGZpbGUgYXMgZmlyc3QgYXJndW1lbnQgCisgICAgb3BlbihQSURGSUxFLCAiPlwkcGlkZmlsZSIpIG9yIGRpZSAiQ291bGRuJ3Qgb3BlbiBcJHBpZGZpbGUiOworICAgIHByaW50IFBJREZJTEUgXCRcJDsKKyAgICBjbG9zZShQSURGSUxFKTsKKworc3ViIG15X3NubXBfaGFuZGxlciB7CisgIG15IChcJGhhbmRsZXIsIFwkcmVnaXN0cmF0aW9uX2luZm8sIFwkcmVxdWVzdF9pbmZvLCBcJHJlcXVlc3RzKSA9IEBfOworICBmb3IobXkgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0czsgXCRyZXF1ZXN0OyBcJHJlcXVlc3QgPSBcJHJlcXVlc3QtPm5leHQoKSkgeworICAgIGlmIChcJHJlcXVlc3RfaW5mby0+Z2V0TW9kZSgpID09IE1PREVfR0VUKSB7CisgICAgICBpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQpKSB7CisgICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIHdvcmxkIik7CisgICAgICAgIGxhc3Q7CisgICAgICB9IGVsc2lmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZDIpKSB7CisgICAgICAgIFwkcmVxdWVzdC0+c2V0VmFsdWUoQVNOX09DVEVUX1NUUiwgImhlbGxvIGFnYWluIHdvcmxkIik7CisgICAgICAgIGxhc3Q7CisgICAgICB9CisgICAgfQorICB9Cit9CitzdWIgc2h1dF9pdF9kb3duIHsgXCRydW5uaW5nID0gMDsgfQorCisgICAgbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgTkVUU05NUF9EU19BR0VOVF9OT19ST09UX0FDQ0VTUywgMSk7CisgICAgbXkgXCRhZ2VudCA9IG5ldyBOZXRTTk1QOjphZ2VudCgnTmFtZScgPT4gJ2hlbGxvJywgJ0FnZW50WCcgPT4gMSk7CisgICAgbXkgXCRyZWdvaWQgPSBuZXcgTmV0U05NUDo6T0lEKFwkcmVnYXQpOworICAgIFwkYWdlbnQtPnJlZ2lzdGVyKCJoZWxsbyIsIFwkcmVnb2lkLCBcJm15X3NubXBfaGFuZGxlcik7CisKKyAgICBcJFNJR3snSU5UJ30gPSBcJnNodXRfaXRfZG93bjsKKyAgICBcJFNJR3snUVVJVCd9ID0gXCZzaHV0X2l0X2Rvd247CisgICAgXCRydW5uaW5nID0gMTsKKyAgICB3aGlsZShcJHJ1bm5pbmcpIHsKKyAgICAgIFwkYWdlbnQtPmFnZW50X2NoZWNrX2FuZF9wcm9jZXNzKDEpOworICAgIH0KKyAgICBcJGFnZW50LT5zaHV0ZG93bigpOworICAgICMjIGVuZCBtYWluIGNvZGUKKyAgICBleGl0IDA7CisgIH0KKyAgZXhpdCAwOworfQord2FpdHBpZChcJHBpZCwgMCk7CitFTkQKKworZWNobyAiYWdlbnR4c29ja2V0ICRBR0VOVFhfU09DS0VUIiA+ICRQRVJMX1NVQkFHRU5UX0NPTkYKKworQ09ORklHQUdFTlQgbWFzdGVyIGFnZW50eAorQ09ORklHQUdFTlQgYWdlbnR4c29ja2V0ICRBR0VOVFhfU09DS0VUCisKK1NUQVJUQUdFTlQKKworIyBzdGFydCBwZXJsIHN1YmFnZW50CisvdXNyL2Jpbi9lbnYgU05NUENPTkZQQVRIPSIke1NOTVBfVE1QRElSfSR7U05NUF9FTlZfU0VQQVJBVE9SfSR7U05NUF9UTVBfUEVSU0lTVEVOVERJUn0iICRTTk1QX1BFUkxQUk9HICRQRVJMX1NVQkFHRU5UICRTTk1QX0FHRU5UWF9QSURfRklMRSA+JFNOTVBfQUdFTlRYX0xPR19GSUxFIDI+JjEKK0RFTEFZCisKKyMjIDEpIFNOTVAgR0VUIGFnYWluc3QgbWliIG9iamVjdCBpbXBsZW1lbnRlZCBieSB0aGUgcGVybCBzdWJhZ2VudAorQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEIgorQ0hFQ0sgImhlbGxvIHdvcmxkIgorCisjIyAyKSBwZXJzaXN0ZW5jeTogcmVjb25maWd1cmUgbWFzdGVyIGFnZW50IChIVVApLCByZS10ZXN0CitIVVBBR0VOVAorQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEMiIKK0NIRUNLICJoZWxsbyBhZ2FpbiB3b3JsZCIKKworIyMgc3RvcAorU1RPUEFHRU5UCitTVE9QUFJPRyAkU05NUF9BR0VOVFhfUElEX0ZJTEUKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMHByb3h5Z2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmU5NDc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIwcHJveHlnZXRfc2ltcGxlCkBAIC0wLDAgKzEsNjcgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFByb3h5IEdFVCBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QUk9YWV9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCisKKyMgWFhYOiB1Y2Qtc25tcC9wcm94eSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgVENQIC0tIHJlbW92ZSB0aGlzIG9uY2UgaXQgZG9lcworWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiAtbyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwNiIgXSAmJiBTS0lQIFRlc3QgZG9lcyBub3Qgc3VwcG9ydCBUQ1AKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCisuIC4vU3YzY29uZmlnCisjIGNvbmZpZyB0aGUgcHJveHkKK0NPTkZJR0FHRU5UIHByb3h5IC10IDIgLXIgMSAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSAuMS4zLjYuMS4yLjEuMQorCisjIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KK09SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKK0FHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYix3aW5FeHRETEwgLURwcm94eSIKK1NUQVJUQUdFTlQKKworIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgorI0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKKworI0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKKworI2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorICAjIHRlc3QgdGhlIHByb3h5IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KKworICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKKyAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgorICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKKyAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3Byb3h5LmNvbmYiCisgIGVjaG8gInJ3Y29tbXVuaXR5IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIGlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1ZHA2IiAtbyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInRjcDYiIF07dGhlbgorICAgIGVjaG8gInJ3Y29tbXVuaXR5NiB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBmaQorICBBR0VOVF9GTEFHUz0kT1JJR19BR0VOVF9GTEFHUworICBPUklHX1NOTVBfU05NUERfUE9SVD0kU05NUF9TTk1QRF9QT1JUCisgIFNOTVBfU05NUERfUE9SVD0iJHtTTk1QX0FHRU5UWF9QT1JUfSIKKyAgU1RBUlRBR0VOVAorICBTTk1QX1NOTVBEX1BPUlQ9JE9SSUdfU05NUF9TTk1QRF9QT1JUCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCisgIENIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworI2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjFwcm94eXNldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGQxOTY0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEyMXByb3h5c2V0X3NpbXBsZQpAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBQcm94eSBTRVQgc3VwcG9ydAorCitTS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUFJPWFlfTU9EVUxFCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKK1NLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGICAgIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorCisjIFhYWDogdWNkLXNubXAvcHJveHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IFRDUCAtLSByZW1vdmUgdGhpcyBvbmNlIGl0IGRvZXMKK1sgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgLW8gIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcDYiIF0gJiYgU0tJUCBUZXN0IGRvZXMgbm90IHN1cHBvcnQgVENQCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgorLiAuL1N2M2NvbmZpZworIyBjb25maWcgdGhlIHByb3h5CitDT05GSUdBR0VOVCBwcm94eSAtdCAyIC1yIDEgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0gLjEuMy42LjEuMi4xLjEKKworIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCitPUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCitBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIsd2luRXh0RExMIC1EcHJveHkiCitTVEFSVEFHRU5UCisKKyMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKKyNDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKKyNDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCisKKyNpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KKyAgIyB0ZXN0IHRoZSBwcm94eSBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCisKKyAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCisgIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQorICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKKyAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCisgIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9wcm94eS5jb25mIgorICBlY2hvICJyd2NvbW11bml0eSB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBpZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4KKyAgICBlY2hvICJyd2NvbW11bml0eTYgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgZmkKKyAgZWNobyAicHN5c2NvbnRhY3QgdGVzdGNvbnRhY3QiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRG1pYl9pbml0IgorICBPUklHX1NOTVBfU05NUERfUE9SVD0kU05NUF9TTk1QRF9QT1JUCisgIFNOTVBfU05NUERfUE9SVD0iJHtTTk1QX0FHRU5UWF9QT1JUfSIKKyAgU1RBUlRBR0VOVAorICBTTk1QX1NOTVBEX1BPUlQ9JE9SSUdfU05NUF9TTk1QRF9QT1JUCisKKyAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCisgIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IFwiKnRlc3Rjb250YWN0IgorCisgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgorCisgICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAgcyB0ZXN0bmV3Y29udGFjdCIKKworICAgIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IFwiKnRlc3RuZXdjb250YWN0IgorCisgICAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisKKwkjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgorCUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKwkKKwlDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBcIip0ZXN0bmV3Y29udGFjdCIKKyAgICBmaQorICBmaQorCisgICMgc3RvcCB0aGUgc3ViYWdlbnQKKyAgU1RPUEFHRU5UCisKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRworI2ZpCisKKyMgc3RvcCB0aGUgbWFzdGVyIGFnZW50CitTVE9QQUdFTlQKKworIyBhbGwgZG9uZSAod2hldykKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMjJwcm94eXNldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjI3ODczCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTIycHJveHlzZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBQcm94eSBpbGxlZ2FsIFNFVCBoYW5kbGluZyBzdXBwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QUk9YWV9NT0RVTEUKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCitTS0lQSUYgICAgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCisKKyMgWFhYOiB1Y2Qtc25tcC9wcm94eSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgVENQIC0tIHJlbW92ZSB0aGlzIG9uY2UgaXQgZG9lcworWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiBdICYmIFNLSVAgVGVzdCBkb2VzIG5vdCBzdXBwb3J0IFRDUAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKKy4gLi9TdjNjb25maWcKKyMgY29uZmlnIHRoZSBwcm94eQorQ09ORklHQUdFTlQgcHJveHkgLXQgMiAtciAxIC12IDJjIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IC4xLjMuNi4xLjIuMS4xCisKKyMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgorT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgorQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliLHdpbkV4dERMTCAtRHByb3h5IgorU1RBUlRBR0VOVAorCisjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCisjQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCisjQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCisjaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCisgICMgdGVzdCB0aGUgcHJveHkgc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgorCisgIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQorICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCisgIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgorICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvcHJveHkuY29uZiIKKyAgZWNobyAicndjb21tdW5pdHkgdGVzdGNvbW11bml0eSIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKKyAgaWYgWyAiJFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInVkcDYiIC1vICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidGNwNiIgXTt0aGVuCisgICAgZWNobyAicndjb21tdW5pdHk2IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCisgIGZpCisjICBlY2hvICJzeXNjb250YWN0IHRlc3Rjb250YWN0IiA+PiAkU05NUF9DT05GSUdfRklMRQorICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLURtaWJfaW5pdCIKKyAgT1JJR19TTk1QX1NOTVBEX1BPUlQ9JFNOTVBfU05NUERfUE9SVAorICBTTk1QX1NOTVBEX1BPUlQ9IiR7U05NUF9BR0VOVFhfUE9SVH0iCisgIFNUQVJUQUdFTlQKKyAgU05NUF9TTk1QRF9QT1JUPSRPUklHX1NOTVBfU05NUERfUE9SVAorCisgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCisgIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQuMCIKKworICAKKyAgIyB3ZSBkb24ndCBrbm93IHRoZSByZWFsIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LCBzbyB3ZSB0ZXN0IGZvciB3aGF0CisgICMgd2Ugc2hvdWxkICpub3QqIGdldCBiYWNrLgorICBDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IE5vIFN1Y2ggT2JqZWN0IgorCisgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMDsgdGhlbgorCisgICAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKKyAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAtSXIgJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIGkgNDIiCisKKyAgICAjIDUuMC54IHNubXBzZXQgc2hvd3MgZXJyb3Igb24gc2luZ2xlIGxpbmUKKyAgICAjQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFdyb25nIFR5cGUiCisgICAgIyA1LjEueCBzbm1wc2V0IHNob3dzIGVycm9yIG9uIG11bHRpcGxlIGxpbmVzCisgICAgQ0hFQ0sgIlJlYXNvbjogd3JvbmdUeXBlIgorICAgIENIRUNLICJGYWlsZWQgb2JqZWN0OiAuMS4zLjYuMS4yLjEuMS40LjAiCisKKyAgZmkKKworICAjIHN0b3AgdGhlIHN1YmFnZW50CisgIFNUT1BBR0VOVAorCisgIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRworICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKKyNmaQorCisjIHN0b3AgdGhlIG1hc3RlciBhZ2VudAorU1RPUEFHRU5UCisKKyMgYWxsIGRvbmUgKHdoZXcpCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzBzbm1wdjF2YWNtZ2V0X3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDYyM2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMwc25tcHYxdmFjbWdldF9zaW1wbGUKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYxIHZhY20gYWNjZXB0YW5jZSBzdXBwb3J0CitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgorIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCisjIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCisjIFRoaXMgY2FzZSB0ZXN0IGZvciBzdWNjZXNzZnVsIGFjY2Vzcworc25tcF92ZXJzaW9uPXYxCisuIC4vU3ZhY21jb25maWcKKworQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAtSS13aW5FeHRETEwiCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiAiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMxc25tcHYyY3ZhY21nZXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmNzIzNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxMzFzbm1wdjJjdmFjbWdldF9zaW1wbGUKQEAgLTAsMCArMSwzNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYyIHZhY20gYWNjZXB0YW5jZSBzdXBwb3J0CisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQworCisjCisjIEJlZ2luIHRlc3QKKyMKKworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCisjIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKKyMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKKyMgVGhpcyBjYXNlIHRlc3QgZm9yIHN1Y2Nlc3NmdWwgYWNjZXNzCisKK3NubXBfdmVyc2lvbj12MmMKKy4gLi9TdmFjbWNvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6ICIKKworCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTMyc25tcHYzdmFjbWdldF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0ZDBkZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDEzMnNubXB2M3ZhY21nZXRfc2ltcGxlCkBAIC0wLDAgKzEsMzEgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MyB2YWNtIGFjY2VwdGFuY2Ugc3VwcG9ydAorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBDb25maWd1cmF0aW9uOgorI2luaXRpYWwxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgZGVueSBvdGhlcnMKKyNpbml0aWFsMiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMSAKKyNUaGlzIGNhc2UgdGVzdCBmb3Igc3VjY2Vzc2Z1bCBhY2Nlc3MKKworc25tcF92ZXJzaW9uPXYzCisuIC4vU3YzdmFjbWNvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMSAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDIgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIiAKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogIgorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE0MHNubXB2MXZhY21nZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDdmOTRkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQwc25tcHYxdmFjbWdldGZhaWxfc2ltcGxlCkBAIC0wLDAgKzEsMzUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFNOTVB2MSB2YWNtIGRlbmlhbCBzdXBwb3J0CisKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCisjIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKKyMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKKyMgVGhpcyBjYXNlIHRlc3QgZm9yIGRlbmllZCBhY2Nlc3MKKworc25tcF92ZXJzaW9uPXYxCisuIC4vU3ZhY21jb25maWcKKworU1RBUlRBR0VOVAorCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLT1JESUUgIlJlYXNvbjogKG5vU3VjaE5hbWUpIFRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgbmFtZSBpbiB0aGlzIE1JQi4iCisKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIKKworQ0hFQ0tPUkRJRSAiUmVhc29uOiAobm9TdWNoTmFtZSkgVGhlcmUgaXMgbm8gc3VjaCB2YXJpYWJsZSBuYW1lIGluIHRoaXMgTUlCLiIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDFzbm1wdjJjdmFjbWdldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDM2MmFhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQxc25tcHYyY3ZhY21nZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDQ4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjIgdmFjbSBkZW5pYWwgc3VwcG9ydAorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKK1NLSVBJRiBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKK1NLSVBJRiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9WQUNNX0NPTkZfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKKyMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAorIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQorIyBUaGlzIGNhc2UgdGVzdCBmb3IgZGVuaWVkIGFjY2VzcworCitzbm1wX3ZlcnNpb249djJjCisuIC4vU3ZhY21jb25maWcKKworU1RBUlRBR0VOVAorCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkxIC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCitDSEVDS09SRElFICJSZWFzb246IG5vQWNjZXNzIgorCitDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgorQ0hFQ0tPUkRJRSAiUmVhc29uOiBub0FjY2VzcyIKKworQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdHJ3Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS41LjAgPSBTVFJJTkc6IFwiKmR1bW15IgorCitDQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0cm9jb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKK0NIRUNLT1JESUUgIlJlYXNvbjogbm9BY2Nlc3MiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTQyc25tcHYzdmFjbWdldGZhaWxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmYzAwMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNDJzbm1wdjN2YWNtZ2V0ZmFpbF9zaW1wbGUKQEAgLTAsMCArMSwzMiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgU05NUHYzIHZhY20gZGVuaWFsIHN1cHBvcnQKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgQ29uZmlndXJhdGlvbjoKKyNpbml0aWFsMSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIGRlbnkgb3RoZXJzCisjaW5pdGlhbDIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEgCisjVGhpcyBjYXNlIHRlc3QgZm9yIGRlbmllZCBhY2Nlc3MKKworc25tcF92ZXJzaW9uPXYzCisuIC4vU3YzdmFjbWNvbmZpZworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMSAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiIAorCitDSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKKworCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDIgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gTm8gU3VjaCBPYmplY3QgYXZhaWxhYmxlIG9uIHRoaXMgYWdlbnQgYXQgdGhpcyBPSUQiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUwc29sYXJpc2hvc3RjcHVfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhM2VlNmEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTBzb2xhcmlzaG9zdGNwdV9zaW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgMXN0IENQVSBvbiBTb2xhcmlzIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCisKK2lmIHRlc3QgInhgdW5hbWUgLXNgIiAhPSAieFN1bk9TIiA7IHRoZW4KKyAgICBTS0lQICJub3QgcnVubmluZyBzb2xhcmlzIgorZmkKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKK1NLSVBJRk5PVCBVU0lOR19IT1NUX0hSX0RFVklDRV9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKKyMgYXNrIGZvciB0aGUgZGVzY3JpcHRpb24gb2YgdGhlIGZpcnN0IENQVSBpbiB0aGUgc3lzdGVtCisKK0NBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMy4yLjEuMy43NjciCisKK0NIRUNLT1JESUUgJyA9IFNUUklORzogIipDUFUgJworCitTVE9QQUdFTlQKKyAgCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTUxc29sYXJpc2hvc3RkaXNrX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzdhMTE3ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1MXNvbGFyaXNob3N0ZGlza19zaW1wbGUKQEAgLTAsMCArMSwzMSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgaW5pdGlhbCBsb2FkIGRldmljZSBvbiBTb2xhcmlzIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCisKK2lmIHRlc3QgYHVuYW1lIC1zYCAhPSAiU3VuT1MiIDsgdGhlbgorICAgICMgYSBib2d1cyBza2lwIGZvciAhc3VucworICAgIFNLSVAgICJub3QgcnVubmluZyBzb2xhcmlzIgorZmkKKworU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfU1lTVEVNX01PRFVMRQorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQorLiAuL1N2MWNvbmZpZworCitTVEFSVEFHRU5UCisKKyMgYXNrIGZvciB0aGUgaW5kZXggb2YgdGhlIGluaXRpYWwgZGV2aWNlIChoclN5c3RlbUluaXRpYWxMb2FkRGV2aWNlLjApCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDS09SRElFICJeLjEuMy42LjEuMi4xLjI1LjEuMy4wID0gSU5URUdFUjoiCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1Mmhvc3R1cHRpbWVfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNjJiMzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTJob3N0dXB0aW1lX3NpbXBsZQpAQCAtMCwwICsxLDI3IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiB1cHRpbWUgdXNpbmcgSE9TVC1SRVNPVVJDRVMKKworU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfU1lTVEVNX01PRFVMRQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjEuMS4wIgorCitTVE9QQUdFTlQKKyAgICAKK0NIRUNLT1JESUUgIl4uMS4zLjYuMS4yLjEuMjUuMS4xLjAgPSBUaW1ldGlja3M6IgorCitGSU5JU0hFRAorCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNTNzb2xhcmlzc3dhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU1ZGQ0NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1M3NvbGFyaXNzd2FwX3NpbXBsZQpAQCAtMCwwICsxLDMxIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBzd2FwIG9uIFNvbGFyaXMgdXNpbmcgSE9TVC1SRVNPVVJDRVMKKworaWYgdGVzdCBgdW5hbWUgLXNgICE9ICJTdW5PUyIgOyB0aGVuCisgICAgU0tJUCAibm90IHJ1bm5pbmcgc29sYXJpcyIKK2ZpCisKK0lTREVGSU5FRCBVU0lOR19IT1NUX0hSX1NUT1JBR0VfTU9EVUxFIHx8IElTREVGSU5FRCBVU0lOR19IT1NUX0hSSF9TVE9SQUdFX01PRFVMRSB8fCBTS0lQICJOb3QgdXNpbmcgaHJTdG9yYWdlIgorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5CisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworIyBhc2sgZm9yIGhyU3RvcmFnZVNpemUuMTAgd2hpY2ggcmVwb3J0cyBvdmVyYWxsIHN3YXAgc2l6ZQorQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjIuMy4xLjUuMTAiCisKK1NUT1BBR0VOVAorCitDSEVDS09SRElFICJeLjEuMy42LjEuMi4xLjI1LjIuMy4xLjUuMTAgPSBJTlRFR0VSOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1NGRpc21hbnBpbmdtaWJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTU0ZGlzbWFucGluZ21pYl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDVjZmZlMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL2RlZmF1bHQvVDE1NGRpc21hbnBpbmdtaWJfc2ltcGxlCkBAIC0wLDAgKzEsMTE2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBESVNNQU4gUElORyBNSUIKKworWyAiJFVJRCIgPSAwIF0gfHwgU0tJUCAiTm90IHBlcm1pdHRlZCB0byBjcmVhdGUgcmF3IHNvY2tldHMiCitTS0lQSUZOT1QgVVNJTkdfRElTTUFOX1BJTkdfTUlCX01PRFVMRQorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjEKKworIyBTTk1QdjItVEMKK2FjdGl2ZT0xCitjcmVhdGVBbmRXYWl0PTUKK2Rlc3Ryb3k9NgorIyBESVNNQU4tUElORy1NSUIKK0RJU01BTl9QSU5HX01JQj0uMS4zLjYuMS4yLjEuODAuMQorcGluZ0N0bEVudHJ5PSR7RElTTUFOX1BJTkdfTUlCfS4yLjEKK3BpbmdDdGxUYXJnZXRBZGRyZXNzVHlwZT0ke3BpbmdDdGxFbnRyeX0uMworcGluZ0N0bFRhcmdldEFkZHJlc1R5cGVJcHY0PTEKK3BpbmdDdGxUYXJnZXRBZGRyZXNzPSR7cGluZ0N0bEVudHJ5fS40CitwaW5nQ3RsUHJvYmVDb3VudD0ke3BpbmdDdGxFbnRyeX0uNworcGluZ0N0bEFkbWluU3RhdHVzPSR7cGluZ0N0bEVudHJ5fS44CitwaW5nQ3RsQWRtaW5TdGF0dXNFbmFibGVkPTEKK3BpbmdDdGxGcmVxdWVuY3k9JHtwaW5nQ3RsRW50cnl9LjEwCitwaW5nQ3RsRGVzY3I9JHtwaW5nQ3RsRW50cnl9LjE3CitwaW5nQ3RsUm93U3RhdHVzPSR7cGluZ0N0bEVudHJ5fS4yMworcGluZ1Jlc3VsdHNFbnRyeT0ke0RJU01BTl9QSU5HX01JQn0uMy4xCitwaW5nUmVzdWx0c1Byb2JlUmVzcG9uc2VzPSR7cGluZ1Jlc3VsdHNFbnRyeX0uNworcGluZ1Jlc3VsdHNTZW50UHJvYmVzPSR7cGluZ1Jlc3VsdHNFbnRyeX0uOAorIyBUZXN0IGNvbmZpZ3VyYXRpb24KK1RBUkdFVF9BRERSRVNTPTEyNy4wLjAuMQorSURYUEZYPTguNzguMTAxLjExNi40NS44My43OC43Ny44MC42Ljg0LjQ5LjUzLjUyICMgIk5ldC1TTk1QIi4iVDE1NCIKK0lEWFM9IiR7SURYUEZYfS45NS40OSAke0lEWFBGWH0uOTUuNTAgJHtJRFhQRlh9Ljk1LjUxIgorUFJPQkVfQ09VTlQ9NQorCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKK3NubXBfd3JpdGVfYWNjZXNzPSdhbGwnCisuIC4vU3YxY29uZmlnCisKK1NUQVJUQUdFTlQKKworZm9yIElEWCBpbiAkSURYUzsgZG8KKworQ0FQVFVSRSAic25tcHNldCAtT25lICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICBcCisgICAgICAgICAkcGluZ0N0bFJvd1N0YXR1cy4kSURYIGkgJGRlc3Ryb3kiCisKK0NIRUNLICJeJHBpbmdDdGxSb3dTdGF0dXMuJElEWCA9IElOVEVHRVI6ICRkZXN0cm95IgorCitDQVBUVVJFICJzbm1wc2V0IC1PbmUgJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgIFwKKyAgICAgICAgICRwaW5nQ3RsUm93U3RhdHVzLiRJRFggaSAkY3JlYXRlQW5kV2FpdCIKKworQ0hFQ0sgIl4kcGluZ0N0bFJvd1N0YXR1cy4kSURYID0gSU5URUdFUjogJGNyZWF0ZUFuZFdhaXQiCisKK0NBUFRVUkUgInNubXBzZXQgLU9uZSAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgICAgICAgICBcCisgICAgICAgICAkcGluZ0N0bFRhcmdldEFkZHJlc3NUeXBlLiRJRFggaSAkcGluZ0N0bFRhcmdldEFkZHJlc1R5cGVJcHY0ICBcCisgICAgICAgICAkcGluZ0N0bFRhcmdldEFkZHJlc3MuJElEWCBzICRUQVJHRVRfQUREUkVTUyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAkcGluZ0N0bEZyZXF1ZW5jeS4kSURYIHUgMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAkcGluZ0N0bERlc2NyLiRJRFggcyBTY3JpcHRHZW5lcmF0ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAkcGluZ0N0bFByb2JlQ291bnQuJElEWCB1ICR7UFJPQkVfQ09VTlR9ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAkcGluZ0N0bEFkbWluU3RhdHVzLiRJRFggaSAkcGluZ0N0bEFkbWluU3RhdHVzRW5hYmxlZCIKKworQ0hFQ0sgIl4kcGluZ0N0bEFkbWluU3RhdHVzLiRJRFggPSBJTlRFR0VSOiAkcGluZ0N0bEFkbWluU3RhdHVzRW5hYmxlZCIKKworQ0FQVFVSRSAic25tcHNldCAtT25lICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYxICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICBcCisgICAgICAgICAkcGluZ0N0bFJvd1N0YXR1cy4kSURYIGkgJGFjdGl2ZSIKKworQ0hFQ0sgIl4kcGluZ0N0bFJvd1N0YXR1cy4kSURYID0gSU5URUdFUjogJGFjdGl2ZSIKKworZG9uZQorCitzbGVlcCAke1BST0JFX0NPVU5UfQorc2xlZXAgMgorCitmb3IgSURYIGluICRJRFhTOyBkbworCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICAgXAorICAgICAgICAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAgIFwKKyAgICAgICAgICRwaW5nUmVzdWx0c1NlbnRQcm9iZXMuJElEWCIKKworQ0hFQ0sgIl4kcGluZ1Jlc3VsdHNTZW50UHJvYmVzLiRJRFggPSBHYXVnZTMyOiAke1BST0JFX0NPVU5UfSIKKworQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdjEgICAgICAgICAgIFwKKyAgICAgICAgICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgICBcCisgICAgICAgICAkcGluZ1Jlc3VsdHNQcm9iZVJlc3BvbnNlcy4kSURYIgorCitDSEVDSyAiXiRwaW5nUmVzdWx0c1Byb2JlUmVzcG9uc2VzLiRJRFggPSBHYXVnZTMyOiAke1BST0JFX0NPVU5UfSIKKworZG9uZQorCisjIERlbGV0ZSBmaXJzdCByb3cgYW5kIGxlYXZlIHRoZSByZW1haW5pbmcgcm93cyBpbiB0aGUgdGFibGUuCisKK2ZvciBJRFggaW4gJElEWFM7IGRvCisKK0NBUFRVUkUgInNubXBzZXQgLU9uZSAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12MSAgICAgICAgICBcCisgICAgICAgICAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICAgXAorICAgICAgICAgJHBpbmdDdGxSb3dTdGF0dXMuJElEWCBpICRkZXN0cm95IgorCitDSEVDSyAiXiRwaW5nQ3RsUm93U3RhdHVzLiRJRFggPSBJTlRFR0VSOiAkZGVzdHJveSIKKworYnJlYWsKKworZG9uZQorCitTVE9QQUdFTlQKKworCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYwc25tcG5ldHN0YXRfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyMGJiYmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjBzbm1wbmV0c3RhdF9zaW1wbGUKQEAgLTAsMCArMSw1NSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCisjIHNubXBuZXRzdGF0IHRlc3Qgb25seSB3b3JrcyB3aXRoIFVEUCBvciBUQ1AKK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieCIgLW8gIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVkcCIgXTsgdGhlbgorICBwcm90bz11ZHAKKyAgSEVBREVSICJpZiBzbm1wbmV0c3RhdCBmaW5kcyB0aGUgcnVubmluZyBhZ2VudCBpbiB1ZHBUYWJsZSIKKyAgU0tJUElGTk9UIFVTSU5HX01JQklJX1VEUFRBQkxFX01PRFVMRQorZWxpZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh0Y3AiIF07IHRoZW4KKyAgcHJvdG89dGNwCisgIEhFQURFUiAiaWYgc25tcG5ldHN0YXQgZmluZHMgdGhlIHJ1bm5pbmcgYWdlbnQgaW4gdGNwVGFibGUiCisgIFNLSVBJRk5PVCBVU0lOR19NSUJJSV9UQ1BUQUJMRV9NT0RVTEUKK2Vsc2UKKyAgSEVBREVSICJpZiBzbm1wbmV0c3RhdCBmaW5kcyB0aGUgcnVubmluZyBhZ2VudCBpbiB1ZHBUYWJsZS90Y3BUYWJsZSIKKyAgU0tJUCBOb3QgdXNpbmcgVENQIG9yIFVEUCB0cmFuc3BvcnQKK2ZpCisKKyMgb24gc29tZSBzeXN0ZW1zIHRoZSBhZ2VudCBuZWVkcyB0byBiZSBydW4gYXMgcm9vdCB0byBhY2Nlc3MgdWRwVGFibGUvdGNwVGFibGUKKyMgLSBlbHNlIGZvcmNlIHNraXAKK2Nhc2UgInhgdW5hbWUgLXNgIiBpbgorICB4QUlYKSAgICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQIE5vdCBydW5uaW5nIGFzIHJvb3Q7OworICB4SFAtVVgpICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQIE5vdCBydW5uaW5nIGFzIHJvb3Q7OworICB4SVJJWCopICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQIE5vdCBydW5uaW5nIGFzIHJvb3Q7OworICB4TmV0QlNEKSAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQIE5vdCBydW5uaW5nIGFzIHJvb3Q7OworICB4T3BlbkJTRCkgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQIE5vdCBydW5uaW5nIGFzIHJvb3Q7OworICB4T1NGMSkgICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQIE5vdCBydW5uaW5nIGFzIHJvb3Q7OworZXNhYworCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKKworIyBtYWtlIHN1cmUgc25tcG5ldHN0YXQgY2FuIGJlIGV4ZWN1dGVkCitTTk1QTkVUU1RBVD0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0IgorWyAteCAiJFNOTVBORVRTVEFUIiBdIHx8IFNLSVAgc25tcG5ldHN0YXQgbm90IGNvbXBpbGVkCisKK3NubXBfdmVyc2lvbj12MmMKKy4gLi9TdjJjY29uZmlnCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgIiRTTk1QTkVUU1RBVCAtQ24gLUNwICRwcm90byAtJHNubXBfdmVyc2lvbiAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCitDSEVDS0VYQUNUICIxMjcuMC4wLjEuJFNOTVBfU05NUERfUE9SVCIKKyMgbXVsdGlwbGUgb2NjdXJyZW5jZXMgKGVzcGVjaWFsbHkgaW4gdGNwVGFibGUpIGFyZSBmaW5lCitpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCisgICAgcmV0dXJuX3ZhbHVlPTAKK2Vsc2UKKyAgICByZXR1cm5fdmFsdWU9MQorZmkKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYxc25tcFRhcmdldEFkZHJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMTYxc25tcFRhcmdldEFkZHJfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZTA5NGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QxNjFzbm1wVGFyZ2V0QWRkcl9zaW1wbGUKQEAgLTAsMCArMSwxNDIgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIHNubXBUYXJnZXRBZGRyVGFibGUKKworU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfVEFSR0VUX1NOTVBUQVJHRVRBRERSRU5UUllfTU9EVUxFCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisuIC4vU3YzY29uZmlnCisKK1NUQVJUQUdFTlQKKworIyBDaGVjayB0aGF0IHRoZSB0YWJsZSBzdGFydHMgb3V0IGVtcHR5CitDQVBUVVJFICJzbm1wZ2V0bmV4dCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEiCisKK0NIRUNLQU5ERElFICJeLjEuMy42LjEuNi4zLjEyLjEuMi4xIgorCisjIENyZWF0ZSBhbiBlbnRyeSB3aXRoIGluZGV4ICcnIChlbXB0eSkKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkgaSA1IgorCitDSEVDS09SRElFICJub0NyZWF0aW9uIgorCisjIENyZWF0ZSBhbiBlbnRyeSB3aXRoIGluZGV4ICcwMTIzNDU2Nzg5QTEyMzQ1Njc4OUIxMjM0NTY3ODlDMTIzJyAob3ZlcmxvbmcpCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjMwLjMxLjMyLjMzLjM0LjM1LjM2LjM3LjM4LjM5LjY1LjMxLjMyLjMzLjM0LjM1LjM2LjM3LjM4LjM5LjY2LjMxLjMyLjMzLjM0LjM1LjM2LjM3LjM4LjM5LjY3LjMxLjMyLjMzIGkgNSIKKworQ0hFQ0tPUkRJRSAibm9DcmVhdGlvbiIKKworIyBDcmVhdGUgYW4gZW50cnkgd2l0aCBpbmRleCAnQlwwQScKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjYuMC42NSBpIDUiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY2LjAuNjUgPSBJTlRFR0VSOiA1IgorCisjIENoZWNrIHRoYXQgdGhlIHRhYmxlIGNvbnRhaW5zIHRoZSAnQlwwQScgZW50cnkgYW5kIG5vIG90aGVyCitDQVBUVVJFICJzbm1wd2FsayAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuOSIKKworQ0hFQ0sgIl4uMS4zLjYuMS42LjMuMTIuMS4yLjEuOSIKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY2LjAuNjUgPSIKKworIyBEZWxldGUgYW4gZW50cnkgd2l0aCBpbmRleCAnQlwwQScKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjYuMC42NSBpIDYiCisKKyMgQ3JlYXRlIGFuIGVudHJ5IHdpdGggaW5kZXggJ0EnCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY1IGkgNSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjUgPSBJTlRFR0VSOiA1IgorCisjIENoZWNrIHRoYXQgdGhlIHRhYmxlIGNvbnRhaW5zIG9uZSBhbmQgb25seSBvbmUgZW50cnkKK0NBUFRVUkUgInNubXB3YWxrIC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45IgorCitDSEVDSyAiXi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45IgorCisjIENoZWNrIHRoYXQgdGhlIGVudHJ5IGlzIHRoZSBleHBlY3RlZCBvbmUKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY1ID0gSU5URUdFUjogMyIKKworIyBDaGVjayB0aGF0IHRoZSBkZWZhdWx0IHZhbHVlcyBhcmUgc2V0IGFzIGV4cGVjdGVkCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS4yLjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS4zLjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS41LjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS43LjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS44LjY1IC4xLjMuNi4xLjYuMy4xMi4xLjIuMS45LjY1IgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuMi42NSA9IE5vIFN1Y2ggSW5zdGFuY2UiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuMy42NSA9IE5vIFN1Y2ggSW5zdGFuY2UiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSA9IElOVEVHRVI6IDE1MDAiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNS42NSA9IElOVEVHRVI6IDMiCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSA9IFNUUklORzogIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjcuNjUgPSBObyBTdWNoIEluc3RhbmNlIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjguNjUgPSBJTlRFR0VSOiAzIgorQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjkuNjUgPSBJTlRFR0VSOiAzIgorCisjIFRyeSB0byBzZXQgdGltZW91dCA8IDAKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAtSXIgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1IGkgLTEiCisKK0NIRUNLT1JESUUgIndyb25nVmFsdWUiCisKKyMgVHJ5IHRvIHNldCB0aW1lb3V0IHRvIDIxNDc0ODM2NDcKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAtSXIgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1IGkgMjE0NzQ4MzY0NyIKKworQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1ID0gSU5URUdFUjogMjE0NzQ4MzY0NyIKKworIyBGZXRjaCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHRpbWVvdXQgc3RpbGwgaXMgMjE0NzQ4MzY0NworQ0FQVFVSRSAic25tcGdldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNC42NSIKKworQ0hFQ0tPUkRJRSAiXi4xLjMuNi4xLjYuMy4xMi4xLjIuMS40LjY1ID0gSU5URUdFUjogMjE0NzQ4MzY0NyIKKworIyBUcnkgdG8gc2V0IHJldHJ5IGNvdW50IDwgMAorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lIC1JciAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjUuNjUgaSAtMSIKKworQ0hFQ0tPUkRJRSAid3JvbmdWYWx1ZSIKKworIyBUcnkgdG8gc2V0IHJldHJ5IGNvdW50ID4gMjU1CitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgLUlyICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNS42NSBpIDI1NiIKKworQ0hFQ0tPUkRJRSAid3JvbmdWYWx1ZSIKKworIyBUcnkgdG8gc2V0IHRhZ2xpc3QgdG8gYSBzaW5nbGUgdmFsdWUKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgcyBhbGZhIgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSA9IFNUUklORzogYWxmYSIKKworIyBGZXRjaCBhbmQgdmVyaWZ5IHRoYXQgdGhlIHRhZ2xpc3QgaGF2ZSBrZXB0IGl0J3MgdmFsdWUKK0NBUFRVUkUgInNubXBnZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1ID0gU1RSSU5HOiBhbGZhIgorCisjIFRyeSB0byBzZXQgdGFnbGlzdCB0byBtdWx0aXBsZSB2YWx1ZXMKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgeCA2MTZjNjY2MTIwNjI2NTc0NjEiCisKK0NIRUNLT1JESUUgIi4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1ID0gU1RSSU5HOiBhbGZhIGJldGEiCisKKyMgRmV0Y2ggYW5kIHZlcmlmeSB0aGF0IHRoZSB0YWdsaXN0IGhhdmUga2VwdCBpdCdzIHZhbHVlcworQ0FQVFVSRSAic25tcGdldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSIKKworQ0hFQ0tPUkRJRSAiLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgPSBTVFJJTkc6IGFsZmEgYmV0YSIKKworIyBUcnkgdG8gc2V0IHRhZ2xpc3QgdG8gYSB2YWx1ZSB3aXRoIGFuIGVtYmVkZGVkIG51bCBjaGFyYWN0ZXIKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgeCA2MTZjMDA2NjYxIgorCitDSEVDS09SRElFICIuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSA9IFNUUklORzogYWwuZmEiCisKKyMgVHJ5IHRvIHNldCB0YWdsaXN0IHRvIGEgdmFsdWUgd2l0aCBhIGxlYWRpbmcgc3BhY2UKK0NBUFRVUkUgInNubXBzZXQgLU9uIC1PZSAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNi4zLjEyLjEuMi4xLjYuNjUgeCAyMDYxNmM2NjYxIgorCitDSEVDS09SRElFICJ3cm9uZ1ZhbHVlIgorCisjIFRyeSB0byBzZXQgdGFnbGlzdCB0byBhIHZhbHVlIHdpdGggYSB0cmFpbGluZyBzcGFjZQorQ0FQVFVSRSAic25tcHNldCAtT24gLU9lICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS42LjMuMTIuMS4yLjEuNi42NSB4IDYxNmM2NjYxMjAiCisKK0NIRUNLT1JESUUgIndyb25nVmFsdWUiCisKKyMgVHJ5IHRvIHNldCB0YWdsaXN0IHRvIG11bHRpcGxlIHZhbHVlcyBzZXBhcmF0ZWQgYnkgbW9yZSB0aGFuIG9uIHdoaXRlc3BhY2UKKyMgY2hhcmFjdGVyCitDQVBUVVJFICJzbm1wc2V0IC1PbiAtT2UgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjYuMy4xMi4xLjIuMS42LjY1IHggNjE2YzY2NjEyMDIwNjI2NTc0NjEiCisKK0NIRUNLT1JESUUgIndyb25nVmFsdWUiCisKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvZGVmYXVsdC9UMjAwc25tcHYyY3dhbGthbGxfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNWYxNmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9kZWZhdWx0L1QyMDBzbm1wdjJjd2Fsa2FsbF9zaW1wbGUKQEAgLTAsMCArMSwzOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgImZ1bGwgc25tcHdhbGsgKFNOTVB2MmMpIGFnYWluc3QgYWdlbnQgKG1heSB0YWtlIHRpbWUpIgorCitpZiB0ZXN0IGB1bmFtZSAtc2AgPSAiSFAtVVgiIDsgdGhlbgorICAgIGlmIHRlc3QgYGlkIC11YCAhPSAiMCIgOyB0aGVuCisgICAgICAgICMgVGhlIGFnZW50IG5lZWRzIHRvIGJlIHJ1biBhcyByb290IC0gZWxzZSBmb3JjZSBza2lwCisgICAgICAgIFNLSVAgQWdlbnQgbXVzdCBiZSBydW4gYXQgcm9vdCBvbiBIUC1VWAorICAgIGZpCitmaQorCitTS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKKworIyBtYWtlIHN1cmUgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCitTTk1QV0FMSz0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXB3YWxrIgorWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAgc25tcHdhbGsgbm90IGNvbXBpbGVkCisKK3NubXBfdmVyc2lvbj12MmMKKy4gLi9TdjJjY29uZmlnCisKKyMKKyMgQmVnaW4gdGVzdAorIworCisjIGhpZ2hlciB0aW1lb3V0L3JldHJ5IHZhbHVlcyBmb3Igc2FmZXR5CitUSU1FT1VUPTEwCitSRVRSWT01CisKK1NUQVJUQUdFTlQKKworQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jIHRlc3Rjb21tdW5pdHkgLXQgJFRJTUVPVVQgLXIgJFJFVFJZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEiCitJU0RFRklORUQgVVNJTkdfV0lORVhURExMX01PRFVMRSB8fCBJU0RFRklORUQgVVNJTkdfRVRIRVJMSUtFX01JQl9ET1QzU1RBVFNUQUJMRV9NT0RVTEUgfHwgQ0hFQ0tBTkRESUUgIj0gV3JvbmcgVHlwZSAoc2hvdWxkIGJlICIKK0NIRUNLT1JESUUgIk5vIG1vcmUgdmFyaWFibGVzIGxlZnQgaW4gdGhpcyBNSUIgVmlldyIKKworU1RPUEFHRU5UCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9OZXRTTk1QVGVzdFRyYW5zcG9ydC5wbSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvTmV0U05NUFRlc3RUcmFuc3BvcnQucG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhiY2ZlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvTmV0U05NUFRlc3RUcmFuc3BvcnQucG0KQEAgLTAsMCArMSw1NCBAQAorQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9zdXBwb3J0IikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9zdXBwb3J0IjsKKyAgICB9IGVsc2lmICgtZCAiLi4vc3VwcG9ydCIpIHsKKwlwdXNoIEBJTkMsICIuLi9zdXBwb3J0IjsKKyAgICB9Cit9CisKK3BhY2thZ2UgTmV0U05NUFRlc3RUcmFuc3BvcnQ7CisKK3VzZSBOZXRTTk1QVGVzdDsKK3VzZSBUZXN0OwordXNlIFNOTVA7CisKK291ciBASVNBID0gcXcoTmV0U05NUFRlc3QpOworCitzdWIgcnVuX3Rlc3RzIHsKKyAgICBteSAoJHNlbGYpID0gQF87CisKKyAgICBwbGFuKHRlc3RzID0+IDIpOworCisgICAgIyBzZXQgaXQgdXAgd2l0aCBhIHNubXB2MyBVU00gdXNlcgorICAgICRzZWxmLT5jb25maWdfYWdlbnQoImNyZWF0ZXVzZXIgdGVzdHVzZXIgTUQ1IG5vdGFyZWFsbHBhc3N3b3JkIik7CisgICAgJHNlbGYtPmNvbmZpZ19hZ2VudCgicnd1c2VyIHRlc3R1c2VyIik7CisgICAgJHNlbGYtPmNvbmZpZ19hZ2VudCgic3lzY29udGFjdCBpdHdvcmtlZCIpOworCisgICAgJHNlbGYtPkRJRSgiZmFpbGVkIHRvIHN0YXJ0IHRoZSBhZ2VudCIpIGlmICghJHNlbGYtPnN0YXJ0X2FnZW50KCkpOworCisgICAgIyBub3cgY3JlYXRlIGEgc2Vzc2lvbiB0byB0ZXN0IHRoaW5ncyB3aXRoCisgICAgbXkgJHNlc3Npb24gPSBuZXcgU05NUDo6U2Vzc2lvbihEZXN0SG9zdCA9PiAkc2VsZi0+eydhZ2VudGFkZHJlc3MnfSwKKwkJCQkgICAgVmVyc2lvbiA9PiAnMycsCisJCQkJICAgIFNlY05hbWUgPT4gJ3Rlc3R1c2VyJywKKwkJCQkgICAgU2VjTGV2ZWwgPT4gJ2F1dGhOb1ByaXYnLAorCQkJCSAgICBBdXRoUHJvdG8gPT4gJ01ENScsCisJCQkJICAgIEF1dGhQYXNzID0+ICdub3RhcmVhbGxwYXNzd29yZCcpOworCisgICAgb2socmVmKCRzZXNzaW9uKSwgJ1NOTVA6OlNlc3Npb24nLCAiY3JlYXRlZCBhIHNlc3Npb24iKTsKKworICAgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyAgICAjIEdFVCB0ZXN0CisgICAgaWYgKHJlZigkc2Vzc2lvbikgZXEgJ1NOTVA6OlNlc3Npb24nKSB7CisJJHZhbHVlID0gJHNlc3Npb24tPmdldCgnc3lzQ29udGFjdC4wJyk7CisJb2soJHZhbHVlLCAnaXR3b3JrZWQnKTsKKyAgICB9CisKKyAgICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisgICAgIyBjbGVhbnVwCisgICAgJHNlbGYtPnN0b3BfYWdlbnQoKTsKK30KKworCisxOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMDAxYmFzaWMudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDAwMWJhc2ljLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdhZjEwNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDAwMWJhc2ljLnQKQEAgLTAsMCArMSw5MyBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIEJhc2ljIHBlcmwgZnVuY3Rpb25hbGl0eSB0byBhIFVEUCBhZ2VudAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0IjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3N1cHBvcnQiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3N1cHBvcnQiOworICAgIH0gZWxzaWYgKC1kICIuLi9zdXBwb3J0IikgeworCXB1c2ggQElOQywgIi4uL3N1cHBvcnQiOworICAgIH0KK30KKwordXNlIE5ldFNOTVBUZXN0OwordXNlIFRlc3Q7Cit1c2UgU05NUDsKKworbXkgJHZhbHVlOworCitwbGFuKHRlc3RzID0+IDEwKTsKKworb2soMSwxLCJzdGFydGVkIHVwIik7CisKKyMgdXNlIGEgYmFzaWMgVURQIHBvcnQKK215ICRkZXN0aW5hdGlvbiA9ICJ1ZHA6bG9jYWxob3N0Ojk4OTciOworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdChhZ2VudGFkZHJlc3MgPT4gJGRlc3RpbmF0aW9uKTsKKworIyBzZXQgaXQgdXAgd2l0aCBhIHNubXB2MyBVU00gdXNlcgorJHRlc3QtPmNvbmZpZ19hZ2VudCgiY3JlYXRldXNlciB0ZXN0dXNlciBNRDUgbm90YXJlYWxscGFzc3dvcmQiKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoInJ3dXNlciB0ZXN0dXNlciIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgic3lzY29udGFjdCBpdHdvcmtlZCIpOworCiskdGVzdC0+RElFKCJmYWlsZWQgdG8gc3RhcnQgdGhlIGFnZW50IikgaWYgKCEkdGVzdC0+c3RhcnRfYWdlbnQoKSk7CisKKyMgbm93IGNyZWF0ZSBhIHNlc3Npb24gdG8gdGVzdCB0aGluZ3Mgd2l0aAorbXkgJHNlc3Npb24gPSBuZXcgU05NUDo6U2Vzc2lvbihEZXN0SG9zdCA9PiAkZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gJzMnLAorCQkJCVNlY05hbWUgPT4gJ3Rlc3R1c2VyJywKKwkJCQlTZWNMZXZlbCA9PiAnYXV0aE5vUHJpdicsCisJCQkJQXV0aFByb3RvID0+ICdNRDUnLAorCQkJCUF1dGhQYXNzID0+ICdub3RhcmVhbGxwYXNzd29yZCcpOworCitvayhyZWYoJHNlc3Npb24pLCAnU05NUDo6U2Vzc2lvbicsICJjcmVhdGVkIGEgc2Vzc2lvbiIpOworCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR0VUIHRlc3QKKyR2YWx1ZSA9ICRzZXNzaW9uLT5nZXQoJ3N5c0NvbnRhY3QuMCcpOworCitvaygkdmFsdWUsICdpdHdvcmtlZCcpOworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIEdFVE5FWFQgdGVzdAorJHZhbHVlID0gJHNlc3Npb24tPmdldG5leHQoJ3N5c0NvbnRhY3QnKTsKKworb2soJHZhbHVlLCAnaXR3b3JrZWQnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBTRVQgdGVzdAorJHZhbHVlID0gJHNlc3Npb24tPmdldCgnc3lzTG9jYXRpb24uMCcpOworCitvaygkdmFsdWUgbmUgJ3llcCcsIDEsICdFbnN1cmluZyB0aGUgc3lzTG9jYXRpb24gc2V0dGluZyBpcyBub3QgInllcCInKTsKKworbXkgJHZhcmJpbmQgPSBuZXcgU05NUDo6VmFyYmluZChbJ3N5c0xvY2F0aW9uJywgJzAnLCAneWVwJywgJ09DVEVUU1RSJ10pOworCisKKyR2YWx1ZSA9ICRzZXNzaW9uLT5zZXQoJHZhcmJpbmQpOworCitvaygoJHZhbHVlID09IDApLCAxLCAncmV0dXJuIHZhbHVlIGZyb20gc2V0IHdhcyBhIHN1Y2Nlc3MnKTsKKworbXkgJHZhbHVlID0gJHNlc3Npb24tPmdldCgnc3lzTG9jYXRpb24uMCcpOworCitvaygkdmFsdWUsICd5ZXAnKTsKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBHRVRCVUxLIHRlc3QKKyR2YXJiaW5kID0gbmV3IFNOTVA6OlZhcmJpbmQoWydzeXNDb250YWN0J10pOworbXkgQHZhbHVlcyA9ICRzZXNzaW9uLT5nZXRidWxrKDAsIDMsICR2YXJiaW5kKTsKKworb2soJCN2YWx1ZXMgPT0gMik7CitvaygkdmFsdWVzWzBdIGVxICdpdHdvcmtlZCcpOworb2soJHZhbHVlc1syXSBlcSAneWVwJyk7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgZ2V0dGFibGUoKSB0ZXN0CisKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIGNsZWFudXAKKyR0ZXN0LT5zdG9wX2FnZW50KCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwMXVkcC50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMDE1ZDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDF1ZHAudApAQCAtMCwwICsxLDE4IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBVRFAgSVB2NCBUZXN0CisKK0JFR0lOIHsKKyAgICBpZiAoZXhpc3RzKCRFTlZ7J3NyY2Rpcid9KSkgeworCXB1c2ggQElOQywgIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICJmdWxsdGVzdHMvcGVybCIpIHsKKwlwdXNoIEBJTkMsICJmdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgIi4uL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiLi4vcGVybCI7CisgICAgfQorfQordXNlIE5ldFNOTVBUZXN0VHJhbnNwb3J0OworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdFRyYW5zcG9ydChhZ2VudGFkZHJlc3MgPT4gInVkcDpsb2NhbGhvc3Q6OTg3NSIpOworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgiTkVUU05NUF9UUkFOU1BPUlRfVURQX0RPTUFJTiIpOworJHRlc3QtPnJ1bl90ZXN0cygpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDJ0Y3AudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmEwN2FjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAydGNwLnQKQEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgVENQIElQdjQgVGVzdAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICIuLi9wZXJsIikgeworCXB1c2ggQElOQywgIi4uL3BlcmwiOworICAgIH0KK30KK3VzZSBOZXRTTk1QVGVzdFRyYW5zcG9ydDsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3RUcmFuc3BvcnQoYWdlbnRhZGRyZXNzID0+ICJ0Y3A6bG9jYWxob3N0Ojk4NzUiKTsKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoIk5FVFNOTVBfVFJBTlNQT1JUX1RDUF9ET01BSU4iKTsKKyR0ZXN0LT5ydW5fdGVzdHMoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwM3VkcDYudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwM3VkcDYudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWNiMzMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTAzdWRwNi50CkBAIC0wLDAgKzEsMTggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIFVEUCBJUHY2IFRlc3QKKworQkVHSU4geworICAgIGlmIChleGlzdHMoJEVOVnsnc3JjZGlyJ30pKSB7CisJcHVzaCBASU5DLCAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvcGVybCI7CisgICAgfSBlbHNpZiAoLWQgImZ1bGx0ZXN0cy9wZXJsIikgeworCXB1c2ggQElOQywgImZ1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiLi4vcGVybCIpIHsKKwlwdXNoIEBJTkMsICIuLi9wZXJsIjsKKyAgICB9Cit9Cit1c2UgTmV0U05NUFRlc3RUcmFuc3BvcnQ7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0VHJhbnNwb3J0KGFnZW50YWRkcmVzcyA9PiAidWRwNjpbOjoxXTo5ODc1Iik7CiskdGVzdC0+cmVxdWlyZV9mZWF0dXJlKCJORVRTTk1QX1RSQU5TUE9SVF9VRFBJUFY2X0RPTUFJTiIpOworJHRlc3QtPnJ1bl90ZXN0cygpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA0dGNwNi50IGIvdGVzdGluZy9mdWxsdGVzdHMvcGVybC9UMTA0dGNwNi50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4MjIyZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDR0Y3A2LnQKQEAgLTAsMCArMSwxOCBAQAorIyEvdXNyL2Jpbi9wZXJsCisKKyMgSEVBREVSIFBlcmwgVENQIElQdjYgVGVzdAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICIuLi9wZXJsIikgeworCXB1c2ggQElOQywgIi4uL3BlcmwiOworICAgIH0KK30KK3VzZSBOZXRTTk1QVGVzdFRyYW5zcG9ydDsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3RUcmFuc3BvcnQoYWdlbnRhZGRyZXNzID0+ICJ0Y3A2Ols6OjFdOjk4NzUiKTsKKyR0ZXN0LT5yZXF1aXJlX2ZlYXR1cmUoIk5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOIik7CiskdGVzdC0+cnVuX3Rlc3RzKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDV1bml4LnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsL1QxMDV1bml4LnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MwMTcxOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3BlcmwvVDEwNXVuaXgudApAQCAtMCwwICsxLDE5IEBACisjIS91c3IvYmluL3BlcmwKKworIyBIRUFERVIgUGVybCBVbml4IERvbWFpbiBTb2NrZXQgVGVzdAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9wZXJsIjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3BlcmwiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3BlcmwiOworICAgIH0gZWxzaWYgKC1kICIuLi9wZXJsIikgeworCXB1c2ggQElOQywgIi4uL3BlcmwiOworICAgIH0KK30KK3VzZSBOZXRTTk1QVGVzdFRyYW5zcG9ydDsKKworbXkgJHRlc3QgPSBuZXcgTmV0U05NUFRlc3RUcmFuc3BvcnQoYWdlbnRhZGRyZXNzID0+ICJib2d1cyIpOworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgiTkVUU05NUF9UUkFOU1BPUlRfVU5JWF9ET01BSU4iKTsKKyR0ZXN0LT57J2FnZW50YWRkcmVzcyd9ID0gInVuaXg6IiAuICR0ZXN0LT57J2Rpcid9IC4gIi91bml4dGVzdHNvY2tldCI7CiskdGVzdC0+cnVuX3Rlc3RzKCk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9yZWFkLW9ubHkvVDAxNDFzbm1wdjJjc2V0ZmFpbF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9yZWFkLW9ubHkvVDAxNDFzbm1wdjJjc2V0ZmFpbF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTcwNWY0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3JlYWQtb25seS9UMDE0MXNubXB2MmNzZXRmYWlsX3NpbXBsZQpAQCAtMCwwICsxLDMyIEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBTTk1QdjJjIHNldCBmYWlsdXJlIHRvIHN5c3RlbS5zeXNDb250YWN0LjAKKworU0tJUElGTk9UIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVAorU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCitTS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKKworIworIyBCZWdpbiB0ZXN0CisjCisKKyMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKK3NubXBfd3JpdGVfYWNjZXNzPSdhbGwnCisoY2QgLi4vZGVmYXVsdCA7IC4gLi9TdjJjY29uZmlnKQorU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKKworQ0FQVFVSRSAic25tcHNldCAtciAwIC10IDEgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40LjAgcyBmb29iYXJ0ZXN0aW5nYmF6IgorCitDSEVDSyAiVGltZW91dDogTm8gUmVzcG9uc2UiCisKK1NUT1BBR0VOVAorCitDSEVDS0FHRU5UICdCYWQgUERVIHR5cGUgcmVjZWl2ZWQnCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDAxMHNjYXBpdGVzdF9jYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWU3OTRhNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDEwc2NhcGl0ZXN0X2NhcHAuYwpAQCAtMCwwICsxLDQ1OSBAQAorLyoKKyAqIHNjYXBpdGVzdC5jCisgKgorICogSEVBREVSIFRlc3RpbmcgU0NBUEkgQVBJCisgKgorICogRXhwZWN0ZWQgU1VDQ0VTU2VzOiAgMiArIDEwICsgMSBmb3IgYWxsIHRlc3RzLgorICoKKyAqIFJldHVybnM6CisgKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KKyAqCisgKgorICogQVNTVU1FUyAgTm8ga2V5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJldHVybiBub24temVybyBzdWNjZXNzIGNvZGVzLgorICoKKyAqIFhYWCAgU3BsaXQgaW50byBpbmRpdmlkdWFsIG1vZHVsZXM/CisgKiBYWFggIEVycm9yL2ZyaW5nZSBjb25kaXRpb25zIHNob3VsZCBiZSB0ZXN0ZWQuCisgKgorICoKKyAqIFRlc3Qgb2Ygc2NfcmFuZG9tLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDIuCisgKiAgICAgIFJFUVVJUkVTIGEgaHVtYW4gdG8gc3BvdCBjaGVjayBmb3Igb2J2aW91cyBub24tcmFuZG9tbmVzcy4uLgorICoKKyAqIFRlc3Qgb2Ygc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCBhbmQgc2NfY2hlY2tfa2V5ZWRfaGFzaC4gICAgICBTVUNDRVNTZXM6IDEwLgorICoKKyAqIFRlc3Qgb2Ygc2NfZW5jcnlwdCBhbmQgc2NfZGVjcnlwdC4gICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDEuCisgKi8KKworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9hc24xLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkva2V5dG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rvb2xzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zY2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdHJhbnNmb3JtX29pZHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2NhbGxiYWNrLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gY2hhciAgICAqb3B0YXJnOworZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7CisKKyNkZWZpbmUgREVCVUcgICAgICAgICAgICAgICAgICAgLyogKi8KKworCisKKy8qCisgKiBHbG9iYWxzLCAmYy4uLgorICovCitjaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7CitpbnQgICAgICAgICAgICAgdGVzdGNvdW50PTA7CitpbnQgICAgICAgICAgICAgZmFpbGNvdW50PTA7CisKKyNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy1hY0hyXSIKKyNkZWZpbmUgT1BUSU9OTElTVAkiYWNoSHIiCisKK2ludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9jcnlwdCA9IDAsIGRva2V5ZWRoYXNoID0gMCwgZG9yYW5kb20gPSAwOworCisjZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb2NyeXB0ICsgZG9rZXllZGhhc2ggKyBkb3JhbmRvbSkKKworCisKKyNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKKyNkZWZpbmUgTkwJCSJcbiIKKworI2RlZmluZSBPVVRQVVQobykJcHJpbnRmKCIjICVzXG4iLCBvKTsKKworI2RlZmluZSBTVUNDRVNTKHMpCQkJCQlcCit7CQkJCQkJCVwKKyAgICBwcmludGYoIiMgRG9uZSB3aXRoICVzXG4iLCBzKTsJCQlcCit9CisKKyNkZWZpbmUgRkFJTEVEKGUsIGYpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwcmludGYoIm5vdCBvazogJWQgLSAlc1xuIiwgKyt0ZXN0Y291bnQsIGYpOyAgICAgICAgICAgIFwKKwkJZmFpbGNvdW50ICs9IDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBwcmludGYoIm9rOiAlZCAtICVzXG4iLCArK3Rlc3Rjb3VudCwgZik7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmZmx1c2goc3Rkb3V0KTsgXAorfQorCisjZGVmaW5lIEJJR1NUUklORwkJCQkJCQlcCisgICAgKGNvbnN0IHVfY2hhciAqKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgIiAgIEEgcG9ydCBtYXkgYmUgYSBwbGVhc2FudCByZXRyZWF0IGZvciBhbnkgbWluZCBncm93biB3ZWFyeSBvZiIJXAorICAgICJ0aGUgc3RydWdnbGUgZm9yIGV4aXN0ZW5jZS4gIFRoZSB2YXN0IGV4cGFuc2Ugb2Ygc2t5LCB0aGUiCQlcCisgICAgIm1vYmlsZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGNsb3VkcywgdGhlIGNoYW1lbGVvbiBjb2xvcmF0aW9uIglcCisgICAgIm9mIHRoZSBzZWEsIHRoZSBiZWFjb25zIGZsYXNoaW5nIG9uIHRoZSBzaG9yZSwgdG9nZXRoZXIgbWFrZSIJXAorICAgICJhIHByaXNtIHdoaWNoIGlzIG1hcnZlbGxvdXNseSBjYWxjdWxhdGVkIHRvIGVudGVydGFpbiBidXQgbm90IglcCisgICAgImZhdGlndWUgdGhlIGV5ZS4gIFRoZSBsb2Z0eSBzaGlwcyB3aXRoIHRoZWlyIGNvbXBsZXggd2VicyBvZiIJXAorICAgICJyaWdnaW5nLCBzd2F5ZWQgdG8gYW5kIGZybyBieSB0aGUgc3dlbGwgaW4gaGFybW9uaW91cyBkYW5jZSwiCVwKKyAgICAiYWxsIGhlbHAgdG8gbWFpbnRhaW4gYSB0YXN0ZSBmb3Igcmh5dGhtIGFuZCBiZWF1dHkgaW4gdGhlIgkJXAorICAgICJtaW5kLiAgQW5kIGFib3ZlIGFsbCB0aGVyZSBpcyBhIG15c3RlcmlvdXMsIGFyaXN0cm9jcmF0aWMga2luZCIJXAorICAgICJvZiBwbGVhc3VyZSB0byBiZSBoYWQsIGZvciB0aG9zZSB3aG8gaGF2ZSBsb3N0IGFsbCBjdXJpb3NpdHkiCVwKKyAgICAib3IgYW1iaXRpb24sIGFzIHRoZXkgc3RyZWNoIG9uIHRoZSBiZWx2ZWRlcmUgb3IgbGVhbiBvdmVyIHRoZSIJXAorICAgICJtb2xlIHRvIHdhdGNoIHRoZSBhcnJpdmFscyBhbmQgZGVwYXJ0dXJlcyBvZiBvdGhlciBtZW4sIHRob3NlIglcCisgICAgIndobyBzdGlsbCBoYXZlIHN1ZmZpY2llbnQgc3RyZW5ndGggb2YgcHVycG9zZSBpbiB0aGVtLCB0aGUiCVwKKyAgICAidXJnZSB0byB0cmF2ZWwgb3IgZW5yaWNoIHRoZW1zZWx2ZXMuIgkJCQlcCisgICAgIgktLSBCYXVkZWxhaXJlIgkJCQkJCQlcCisgICAgIgkgICBGcm9tIF9UaGVfUG9lbXNfaW5fUHJvc2VfLCBcIlRoZSBQb3J0XCIgKFhMSSkuIgorCisjZGVmaW5lIEJJR1NFQ1JFVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChjb25zdCB1X2NoYXIgKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiU2hoaGguLi4gRG9uJ3QgdGVsbCAqYW55b25lKiBhYm91dCB0aGlzLiAgTm90IGEgc291bC4iCisjZGVmaW5lIEJLV0RTRUNSRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIChjb25zdCB1X2NoYXIgKikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAiLmx1b3MgYSB0b04gIC5zaWh0IHR1b2JhICplbm95bmEqIGxsZXQgdCdub0QgLi4uaGhoaFMiCisKKyNkZWZpbmUgTUxDT1VOVF9NQVgJNiAgICAgICAvKiBNQUMgTGVuZ3RoIENvdW50IE1heGltdW0uICovCisKKworCisvKgorICogUHJvdG90eXBlcy4KKyAqLwordm9pZCAgICAgICAgICAgIHVzYWdlKHZvaWQpOworCitpbnQgICAgICAgICAgICAgdGVzdF9kb2NyeXB0KHZvaWQpOworaW50ICAgICAgICAgICAgIHRlc3RfZG9rZXllZGhhc2godm9pZCk7CitpbnQgICAgICAgICAgICAgdGVzdF9kb3JhbmRvbSh2b2lkKTsKKworCisKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUzsKKyAgICBjaGFyICAgICAgICAgICAgY2g7CisKKyAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07CisKKyAgICAvKgorICAgICAqIFBhcnNlLgorICAgICAqLworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgeworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnYyc6CisgICAgICAgICAgICBkb2NyeXB0ID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdIJzoKKyAgICAgICAgICAgIGRva2V5ZWRoYXNoID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdyJzoKKyAgICAgICAgICAgIGRvcmFuZG9tID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdoJzoKKyAgICAgICAgICAgIHJ2YWwgPSAwOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgdXNhZ2UoKTsKKyAgICAgICAgICAgIGV4aXQocnZhbCk7CisgICAgICAgIH0KKworICAgICAgICBhcmdjIC09IDE7CisgICAgICAgIGFyZ3YgKz0gMTsKKyAgICAgICAgb3B0aW5kID0gMTsKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCisKKyAgICBpZiAoKGFyZ2MgPiAxKSkgeworICAgICAgICB1c2FnZSgpOworICAgICAgICBleGl0KDEwMDApOworCisgICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKKyAgICAgICAgZG9hbGx0ZXN0cyA9IDE7CisgICAgfQorCisKKyAgICAvKgorICAgICAqIFRlc3Qgc3R1ZmYuCisgICAgICovCisgICAgcnZhbCA9IHNjX2luaXQoKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2luaXQoKSByZXR1cm4gY29kZSIpOworCisKKyAgICBpZiAoZG9jcnlwdCB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIHRlc3RfZG9jcnlwdCgpOworICAgIH0KKyAgICBpZiAoZG9rZXllZGhhc2ggfHwgZG9hbGx0ZXN0cykgeworICAgICAgICB0ZXN0X2Rva2V5ZWRoYXNoKCk7CisgICAgfQorICAgIGlmIChkb3JhbmRvbSB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIHRlc3RfZG9yYW5kb20oKTsKKyAgICB9CisKKyAgICBwcmludGYoIjEuLiVkXG4iLCB0ZXN0Y291bnQpOworICAgIHJldHVybiAwOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCisKKworCisKKwordm9pZAordXNhZ2Uodm9pZCkKK3sKKyAgICBwcmludGYoIFVTQUdFCisgICAgICAgICAgICAiIiBOTAorICAgICAgICAgICAgIgktYQkJQWxsIHRlc3RzLiIgTkwKKyAgICAgICAgICAgICIJLWMJCVRlc3Qgb2Ygc2NfZW5jcnlwdCgpL3NjX2RlY3J5cHQoKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIgktaAkJSGVscC4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIgktSCAgICAgICAgICAgICAgVGVzdCBzY197Z2VuZXJhdGUsY2hlY2t9X2tleWVkX2hhc2goKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIgktciAgICAgICAgICAgICAgVGVzdCBzY19yYW5kb20oKS4iCisgICAgICAgICAgICBOTCAiIiBOTCwgbG9jYWxfcHJvZ25hbWUpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2RvcmFuZG9tCisgKgorICogT25lIGxhcmdlIHJlcXVlc3QsIG9uZSBzZXQgb2Ygc2hvcnQgcmVxdWVzdHMuCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqCisgKiBYWFgJcHJvYmFibHkgc2hvdWxkIHNwbGl0IHVwIGludG8gaW5kaXZpZHVhbCBvcHRpb25zLgorICovCitpbnQKK3Rlc3RfZG9yYW5kb20odm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgICAgb3JpZ3JlcXVlc3QgPSAoMTAyNCAqIDIpLAorICAgICAgICBvcmlncmVxdWVzdF9zaG9ydCA9IDE5LCBzaG9ydGNvdW50ID0gNywgaTsKKyAgICBzaXplX3QgICAgICAgICAgbmJ5dGVzID0gb3JpZ3JlcXVlc3Q7CisgICAgdV9jaGFyICAgICAgICAgIGJ1ZltMT0NBTF9NQVhCVUZdOworCisgICAgT1VUUFVUKCJSYW5kb20gdGVzdCAtLSBsYXJnZSByZXF1ZXN0OiIpOworCisgICAgcnZhbCA9IHNjX3JhbmRvbShidWYsICZuYnl0ZXMpOworICAgIEZBSUxFRChydmFsLCAic2NfcmFuZG9tKCkgcmV0dXJuIGNvZGUiKTsKKworICAgIGlmIChuYnl0ZXMgIT0gb3JpZ3JlcXVlc3QpIHsKKyAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAorICAgICAgICAgICAgICAgInNjX3JhbmRvbSgpIHJldHVybmVkIGRpZmZlcmVudCB0aGFuIHJlcXVlc3RlZC4iKTsKKyAgICB9CisKKyAgICBkdW1wX2NodW5rKCJzY2FwaXRlc3QiLCBOVUxMLCBidWYsIG5ieXRlcyk7CisKKyAgICBTVUNDRVNTKCJSYW5kb20gdGVzdCAtLSBsYXJnZSByZXF1ZXN0LiIpOworCisKKyAgICBPVVRQVVQoIlJhbmRvbSB0ZXN0IC0tIHNob3J0IHJlcXVlc3RzOiIpOworICAgIG9yaWdyZXF1ZXN0X3Nob3J0ID0gMTY7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2hvcnRjb3VudDsgaSsrKSB7CisgICAgICAgIG5ieXRlcyA9IG9yaWdyZXF1ZXN0X3Nob3J0OworICAgICAgICBydmFsID0gc2NfcmFuZG9tKGJ1ZiwgJm5ieXRlcyk7CisgICAgICAgIEZBSUxFRChydmFsLCAic2NfcmFuZG9tKCkgcmV0dXJuIGNvZGUiKTsKKworICAgICAgICBpZiAobmJ5dGVzICE9IG9yaWdyZXF1ZXN0X3Nob3J0KSB7CisgICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgInNjX3JhbmRvbSgpIHJldHVybmVkIGRpZmZlcmVudCAiICJ0aGFuIHJlcXVlc3RlZC4iKTsKKyAgICAgICAgfQorCisgICAgICAgIGR1bXBfY2h1bmsoInNjYXBpdGVzdCIsIE5VTEwsIGJ1ZiwgbmJ5dGVzKTsKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kZm9yICovCisKKyAgICBTVUNDRVNTKCJSYW5kb20gdGVzdCAtLSBzaG9ydCByZXF1ZXN0cy4iKTsKKworCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3JhbmRvbSgpICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9kb2tleWVkaGFzaAorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICoKKyAqIFRlc3Qga2V5ZWQgaGFzaGVzIHdpdGggYSB2YXJpZXR5IG9mIE1BQyBsZW5ndGggcmVxdWVzdHMuCisgKgorICoKKyAqIE5PVEUgQm90aCB0ZXN0cyBpbnRlbnRpb25hbGx5IHVzZSB0aGUgc2FtZSBzZWNyZXQKKyAqCisgKiBGSVgJR2V0IGlucHV0IG9yIG91dHB1dCBmcm9tIHNvbWUgb3RoZXIgcGFja2FnZSB3aGljaCBoYXNoZXMuLi4KKyAqIFhYWAlDb3VsZCBjdXQgdGhpcyBpbiBoYWxmIHdpdGggYSBsaXR0bGUgaW5kaXJlY3Rpb24uLi4KKyAqLworaW50Cit0ZXN0X2Rva2V5ZWRoYXNoKHZvaWQpCit7CisgICAgaW50IHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICAgIGJpZ3N0cmluZ19sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgQklHU1RSSU5HKSwKKyAgICAgICAgc2VjcmV0X2xlbiA9IHN0cmxlbigoY29uc3QgY2hhciAqKSBCSUdTRUNSRVQpLAorICAgICAgICBwcm9wZXJsZW5ndGgsCisgICAgICAgIG1sY291bnQgPSAwOyAgICAgICAgLyogTUFDIExlbmd0aCBjb3VudC4gICAqLworICAgIHNpemVfdCAgICAgICAgICBoYmxlbjsgICAgICAvKiBIYXNoIEJ1ZmZlciBsZW5ndGguICovCisKKyAgICB1X2ludCAgICAgICAgICAgaGFzaGJ1Zl9sZW5bTUxDT1VOVF9NQVhdID0geworICAgICAgICBMT0NBTF9NQVhCVUYsCisgICAgICAgIFVTTV9NRDVfQU5EX1NIQV9BVVRIX0xFTiwKKyAgICAgICAgVVNNX01ENV9BTkRfU0hBX0FVVEhfTEVOLAorICAgICAgICBVU01fTUQ1X0FORF9TSEFfQVVUSF9MRU4sCisgICAgICAgIDcsCisgICAgICAgIDAsCisgICAgfTsKKworICAgIHVfY2hhciAgICAgICAgICBoYXNoYnVmW0xPQ0FMX01BWEJVRl07CisgICAgY2hhciAgICAgICAgICAgKnM7CisKKyAgdGVzdF9kb2tleWVkaGFzaF9hZ2FpbjoKKworICAgIE9VVFBVVCgiU3RhcnRpbmcgS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIE1ENSAtLSIpOworCisgICAgbWVtc2V0KGhhc2hidWYsIDAsIExPQ0FMX01BWEJVRik7CisgICAgaGJsZW4gPSBoYXNoYnVmX2xlblttbGNvdW50XTsKKyAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSk7CisKKyAgICBydmFsID0KKyAgICAgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWdzdHJpbmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hidWYsICZoYmxlbik7CisgICAgRkFJTEVEKHJ2YWwsICJzY19nZW5lcmF0ZV9rZXllZF9oYXNoKCkgcmV0dXJuIGNvZGUiKTsKKworICAgIGlmIChoYXNoYnVmX2xlblttbGNvdW50XSA+IHByb3Blcmxlbmd0aCkgeworICAgICAgICBpZiAoaGJsZW4gIT0gcHJvcGVybGVuZ3RoKSB7CisgICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJXcm9uZyBNRDUgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMSkiKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIChoYmxlbiAhPSBoYXNoYnVmX2xlblttbGNvdW50XSkgeworICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJXcm9uZyBNRDUgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMikiKTsKKyAgICB9CisKKyAgICBydmFsID0KKyAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwgaGFzaGJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYmxlbik7CisgICAgRkFJTEVEKHJ2YWwsICJzY19jaGVja19rZXllZF9oYXNoKCkgcmV0dXJuIGNvZGUiKTsKKworICAgIGJpbmFyeV90b19oZXgoaGFzaGJ1ZiwgaGJsZW4sICZzKTsKKyAgICBwcmludGYoIiMgaGFzaCBidWZmZXIgKGxlbj0lIiBORVRTTk1QX1BSSXogInUsIHJlcXVlc3Q9JWQpOiAgICVzXG4iLAorICAgICAgICAgICAgaGJsZW4sIGhhc2hidWZfbGVuW21sY291bnRdLCBzKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKworCisgICAgT1VUUFVUKCJTdGFydGluZyBLZXllZCBoYXNoIHRlc3QgdXNpbmcgU0hBMSAtLSIpOworCisgICAgbWVtc2V0KGhhc2hidWYsIDAsIExPQ0FMX01BWEJVRik7CisgICAgaGJsZW4gPSBoYXNoYnVmX2xlblttbGNvdW50XTsKKyAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOworCisgICAgcnZhbCA9CisgICAgICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc2hidWYsICZoYmxlbik7CisgICAgRkFJTEVEKHJ2YWwsICJzY19nZW5lcmF0ZV9rZXllZF9oYXNoKCkgcmV0dXJuIGNvZGUiKTsKKworICAgIGlmIChoYXNoYnVmX2xlblttbGNvdW50XSA+IHByb3Blcmxlbmd0aCkgeworICAgICAgICBpZiAoaGJsZW4gIT0gcHJvcGVybGVuZ3RoKSB7CisgICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCisgICAgICAgICAgICAgICAgICAgIldyb25nIFNIQTEgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMSkiKTsKKyAgICAgICAgfQorCisgICAgfSBlbHNlIGlmIChoYmxlbiAhPSBoYXNoYnVmX2xlblttbGNvdW50XSkgeworICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJXcm9uZyBTSEExIGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDIpIik7CisgICAgfQorCisgICAgcnZhbCA9CisgICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLCBoYXNoYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhibGVuKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2NoZWNrX2tleWVkX2hhc2goKSByZXR1cm4gY29kZSIpOworCisgICAgYmluYXJ5X3RvX2hleChoYXNoYnVmLCBoYmxlbiwgJnMpOworICAgIHByaW50ZigiIyBoYXNoIGJ1ZmZlciAobGVuPSUiIE5FVFNOTVBfUFJJeiAidSwgcmVxdWVzdD0lZCk6ICAgJXNcbiIsCisgICAgICAgICAgICBoYmxlbiwgaGFzaGJ1Zl9sZW5bbWxjb3VudF0sIHMpOworICAgIFNOTVBfRlJFRShzKTsKKworICAgIFNVQ0NFU1MoIktleWVkIGhhc2ggdGVzdCB1c2luZyBTSEExLiIpOworCisgICAgLyoKKyAgICAgKiBSdW4gdGhlIGJhc2ljIGhhc2ggdGVzdHMgYnV0IHZhcnkgdGhlIHNpemUgTUFDIHJlcXVlc3RzLgorICAgICAqLworICAgIGlmIChoYXNoYnVmX2xlblsrK21sY291bnRdICE9IDApIHsKKyAgICAgICAgZ290byB0ZXN0X2Rva2V5ZWRoYXNoX2FnYWluOworICAgIH0KKworCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb2tleWVkaGFzaCgpICovCisKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZG9jcnlwdAorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKi8KK2ludAordGVzdF9kb2NyeXB0KHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCisgICAgICAgIGJpZ3N0cmluZ19sZW4gPSBzdHJsZW4oKGNvbnN0IGNoYXIgKikgQklHU1RSSU5HKSwKKyAgICAgICAgc2VjcmV0X2xlbiA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTKSwKKyAgICAgICAgaXZfbGVuID0gQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVNfSVYpOworCisgICAgc2l6ZV90ICAgICAgICAgIGJ1Zl9sZW4gPSBMT0NBTF9NQVhCVUY7CisgICAgc2l6ZV90ICAgICAgICAgIGNyeXB0YnVmX2xlbiA9IExPQ0FMX01BWEJVRjsKKworICAgIHVfY2hhciAgICAgICAgICAgIGJ1ZltMT0NBTF9NQVhCVUZdLAorICAgICAgICBjcnlwdGJ1ZltMT0NBTF9NQVhCVUZdLCBzZWNyZXRbTE9DQUxfTUFYQlVGXSwgaXZbTE9DQUxfTUFYQlVGXTsKKworICAgIE9VVFBVVCgiU3RhcnRpbmcgVGVzdCAxREVTLUNCQyAtLSIpOworCisKKyAgICBtZW1zZXQoYnVmLCAwLCBMT0NBTF9NQVhCVUYpOworCisgICAgbWVtY3B5KHNlY3JldCwgQklHU0VDUkVULCBzZWNyZXRfbGVuKTsKKyAgICBtZW1jcHkoaXYsIEJLV0RTRUNSRVQsIGl2X2xlbik7CisKKyAgICBydmFsID0gc2NfZW5jcnlwdCh1c21ERVNQcml2UHJvdG9jb2wsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICBzZWNyZXQsIHNlY3JldF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgaXYsIGl2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sIGNyeXB0YnVmLCAmY3J5cHRidWZfbGVuKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2VuY3J5cHQoKSByZXR1cm4gY29kZS4iKTsKKworICAgIHJ2YWwgPSBzY19kZWNyeXB0KHVzbURFU1ByaXZQcm90b2NvbCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgIHNlY3JldCwgc2VjcmV0X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLCBjcnlwdGJ1ZiwgY3J5cHRidWZfbGVuLCBidWYsICZidWZfbGVuKTsKKyAgICBGQUlMRUQocnZhbCwgInNjX2RlY3J5cHQoKSByZXR1cm4gY29kZS4iKTsKKworICAgIC8qIGlnbm9yZSB0aGUgcGFkICovCisgICAgYnVmX2xlbiAtPSBidWZbYnVmX2xlbi0xXTsKKworICAgIEZBSUxFRCgoYnVmX2xlbiAhPSBiaWdzdHJpbmdfbGVuKSwgIkRlY3J5cHRlZCBidWZmZXIgaXMgdGhlIHJpZ2h0IGxlbmd0aC4iKTsKKyAgICBwcmludGYoIiMgb3JpZ2luYWwgbGVuZ3RoOiAlZFxuIiwgYmlnc3RyaW5nX2xlbik7CisgICAgcHJpbnRmKCIjIG91dHB1dCAgIGxlbmd0aDogJSIgTkVUU05NUF9QUkl6ICJ1XG4iLCBidWZfbGVuKTsKKworICAgIEZBSUxFRCgobWVtY21wKGJ1ZiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuKSAhPSAwKSwKKyAgICAgICAgICAgIkRlY3J5cHRlZCBidWZmZXIgaXMgdGhlIHNhbWUgYXMgdGhlIG9yaWdpbmFsIHBsYWludGV4dC4iKTsKKyAgICByZXR1cm4gZmFpbGNvdW50OworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb2NyeXB0KCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDIwaGFzaHRlc3RzX2NhcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Y2I1YjQ3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwMjBoYXNodGVzdHNfY2FwcC5jCkBAIC0wLDAgKzEsMTE3IEBACisvKiBIRUFERVIgdGVzdGluZyBTQ0FQSSBoYXNoaW5nIGZ1bmN0aW9ucyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkIHByaW50X2hhc2goY29uc3QgY2hhciAqbGFiZWwsIHVfY2hhciAqTUFDLCBzaXplX3QgTUFDX0xFTik7CisKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgeworICAgIHVfY2hhciBidWZbXSA9ICJ3ZXMgaGFyZGFrZXIiOworICAgIHVfY2hhciBNQUNbMjBdOworICAgIHNpemVfdCBNQUNfTEVOID0gMjA7CisgICAgdV9jaGFyIHNoYTFrZXlbMjBdID0gIjU1NTU1NTU1NTU1NTU1NTU1NTU1IjsKKyAgICB1X2NoYXIgbWQ1a2V5WzE2XSA9ICI1NTU1NTU1NTU1NTU1NTU1IjsKKworICAgIHVfY2hhciBzaGExcHJvcGVyWzIwXSA9IHsgMHg0YSwgMHg1NSwgMHgyZiwgMHg2NSwgMHg3OSwgMHgzYSwgMHg0OSwgMHgzNSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MzcsIDB4OTEsIDB4NTEsIDB4MWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGEwLCAweDhjLCAweDdhLCAweDQ1LCAweDUwLCAweDM0LCAweGQ0LCAweDIzfTsKKyAgICB1X2NoYXIgbWQ1cHJvcGVyWzE2XSA9IHsgMHhlNSwgMHg5MiwgMHhmYSwgMHg0YiwgMHgwNiwgMHhlNiwgMHgyNywgMHhkNywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjOCwgMHgxOCwgMHhmYSwgMHg3YSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhkMCwgMHg4MiwgMHhlYiwgMHg2Nn07CisgICAgaW50IHJlc3VsdDsKKyAgICAKKyAgICBwcmludGYoIjEuLjJcbiIpOworCisgICAgbWVtc2V0KE1BQywgMCwgTUFDX0xFTik7CisgICAgc2NfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwgT0lEX0xFTkdUSCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICBNQUMsICZNQUNfTEVOKTsKKworICAgIHByaW50X2hhc2goInNoYTEgaGFzaCIsIE1BQywgTUFDX0xFTik7CisKKyAgICBtZW1zZXQoTUFDLCAwLCBNQUNfTEVOKTsKKyAgICBzY19oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsIE9JRF9MRU5HVEgodXNtSE1BQ01ENUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICBNQUMsICZNQUNfTEVOKTsKKworICAgIHByaW50X2hhc2goIm1kNSBoYXNoIiwgTUFDLCBNQUNfTEVOKTsKKworICAgIE1BQ19MRU4gPSAyMDsKKyAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgT0lEX0xFTkdUSCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGExa2V5LCBzaXplb2Yoc2hhMWtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHNpemVvZihidWYpLTEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBNQUMsICZNQUNfTEVOKTsKKworICAgIHByaW50X2hhc2goInNoYTEga2V5ZWQiLCBNQUMsIE1BQ19MRU4pOworCisgICAgcmVzdWx0ID0KKyAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHVzbUhNQUNTSEExQXV0aFByb3RvY29sKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGExa2V5LCBzaXplb2Yoc2hhMWtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNoYTFwcm9wZXIsIDEyKTsKKyAgICBpZiAoMCA9PSByZXN1bHQpIHsKKyAgICAgICAgcHJpbnRmKCJvazogMSAtIHNoYTEga2V5ZWQgY29tcGFyZSB3YXMgZXF1YWxcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50Zigibm90IG9rOiAxIC0gc2hhMSBrZXllZCBjb21wYXJlIHdhcyBub3QgZXF1YWxcbiIpOworICAgIH0KKyAgICAKKworICAgIE1BQ19MRU4gPSAxNjsKKyAgICBzY19nZW5lcmF0ZV9rZXllZF9oYXNoKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWQ1a2V5LCBzaXplb2YobWQ1a2V5KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE1BQywgJk1BQ19MRU4pOworCisgICAgcHJpbnRfaGFzaCgibWQ1IGtleWVkIiwgTUFDLCBNQUNfTEVOKTsKKworCisgICAgTUFDX0xFTiA9IDE2OworICAgIHJlc3VsdCA9CisgICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNWtleSwgc2l6ZW9mKG1kNWtleSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1kNXByb3BlciwgMTIpOworCisgICAgaWYgKDAgPT0gcmVzdWx0KSB7CisgICAgICAgIHByaW50Zigib2s6IDIgLSBtZDUga2V5ZWQgY29tcGFyZSB3YXMgZXF1YWxcbiIpOworICAgIH0gZWxzZSB7CisgICAgICAgIHByaW50Zigibm90IG9rOiAyIC0gbWQ1IGtleWVkIGNvbXBhcmUgd2FzIG5vdCBlcXVhbFxuIik7CisgICAgfQorCisgICAgTUFDX0xFTiA9IDIwOworICAgIG1lbXNldChNQUMsIDAsIE1BQ19MRU4pOworICAgIGdlbmVyYXRlX0t1KHVzbUhNQUNTSEExQXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpLAorICAgICAgICAgICAgICAgIGJ1Ziwgc2l6ZW9mKGJ1ZiktMSwKKyAgICAgICAgICAgICAgICBNQUMsICZNQUNfTEVOKTsKKyAgICBwcmludF9oYXNoKCJzaGExIEt1IiwgTUFDLCBNQUNfTEVOKTsKKworICAgIE1BQ19MRU4gPSAxNjsKKyAgICBtZW1zZXQoTUFDLCAwLCBNQUNfTEVOKTsKKyAgICBnZW5lcmF0ZV9LdSh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAorICAgICAgICAgICAgICAgIE9JRF9MRU5HVEgodXNtSE1BQ01ENUF1dGhQcm90b2NvbCksCisgICAgICAgICAgICAgICAgYnVmLCBzaXplb2YoYnVmKS0xLAorICAgICAgICAgICAgICAgIE1BQywgJk1BQ19MRU4pOworICAgIHByaW50X2hhc2goIm1kNSBLdSIsIE1BQywgTUFDX0xFTik7CisKKyAgICAvKiBYWFg6IHRvZG86IGNvbXBhcmUgcmVzdWx0cyBhbmQgZW5zdXJlIHRoZXkncmUgYWx3YXlzIHRoZSBzYW1lCisgICAgICAgdmFsdWVzOyB0aGUgYWxnb3JpdGhtcyBhcmVuJ3QgdGltZS1kZXBlbmRlbnQuICovCisgICAgcmV0dXJuICgwKTsKK30KKwordm9pZAorcHJpbnRfaGFzaChjb25zdCBjaGFyICpsYWJlbCwgdV9jaGFyICpNQUMsIHNpemVfdCBNQUNfTEVOKSB7CisgICAgaW50IGk7CisgICAgcHJpbnRmKCIjICUtMTBzICUiIE5FVFNOTVBfUFJJeiAidTpcbiIsIGxhYmVsLCBNQUNfTEVOKTsKKyAgICBmb3IoaT0wOyBpIDwgTUFDX0xFTjsgaSsrKSB7CisgICAgICAgIHByaW50ZigiIyAlMDJ4ICIsIE1BQ1tpXSk7CisgICAgfQorICAgIHByaW50ZigiXG4iKTsKK30gICAgCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA0MGtleW1hbmFnZXRlc3RfY2FwcC5jIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjhmNjYzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc25tcHYzL1QwNDBrZXltYW5hZ2V0ZXN0X2NhcHAuYwpAQCAtMCwwICsxLDYzNiBAQAorLyoKKyAqIGtleW1hbmFnZXRlc3QuYworICoKKyAqIEhFQURFUiBUZXN0aW5nIGtleSBtYW5hZ2VtZW50IEFQSSBmdW5jdGlvbmFsaXR5CisgKgorICogRXhwZWN0ZWQgU1VDQ0VTU2VzOiAgMiArIDIgKyAzIGZvciBhbGwgdGVzdHMuCisgKgorICogUmV0dXJuczoKKyAqICAgICAgTnVtYmVyIG9mIEZBSUxVUkVzLgorICogCisgKgorICogRklYICBPciBob3cgYWJvdXQgcGFzc2luZyBhIHVzbVVzZXIgbmFtZSBhbmQgbG9va2luZyB1cCB0aGUgZW50cnkgYXMKKyAqICAgICAgYSBtZWFucyBvZiBnZXR0aW5nIGtleSBtYXRlcmlhbD8gIFRoaXMgbWVhbnMgdGhlIHVzZXJMaXN0IGlzCisgKiAgICAgIGF2YWlsYWJsZSBmcm9tIGFuIGFwcGxpY2F0aW9uLi4uCisgKgorICogQVNTVU1FUyAgTm8ga2V5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJldHVybiBub24temVybyBzdWNjZXNzIGNvZGVzLgorICoKKyAqIFRlc3Qgb2YgZ2VuZXJhdGVfS3UoKS4gICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMgorICogVGVzdCBvZiBnZW5lcmF0ZV9rdWwoKS4gICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAyCisgKiBUZXN0IG9mIHtlbmNvZGUsZGVjb2RlfV9rZXljaGFuZ2UoKS4gICAgICAgICBTVUNDRVNTZXM6IDMKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2lmZGVmIEhBVkVfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbmRpZgorCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjZW5kaWYKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9rZXl0b29scy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NjYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90cmFuc2Zvcm1fb2lkcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvY2FsbGJhY2suaD4KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCitleHRlcm4gY2hhciAgICAqb3B0YXJnOworZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7CisKK2ludCB0ZXN0Y291bnQgPSAwOworCisvKgorICogR2xvYmFscywgJmMuLi4KKyAqLworY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOworCisjZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstYWtsdV1bLUUgPGVuZ2luZUlEPl1bLU4gPG5ld2tleT5dWy1PIDxvbGRrZXk+XVstUCA8cGFzc3BocmFzZT5dIgorI2RlZmluZSBPUFRJT05MSVNUCSJhcUU6aGtsTjpPOlA6dSIKKworaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2dlbkt1ID0gMCwgZG9nZW5rdWwgPSAwLCBkb2tleWNoYW5nZSA9IDA7CisKKyNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvZ2VuS3UgKyBkb2dlbmt1bCArIGRva2V5Y2hhbmdlKQorCisKKyNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKKyNkZWZpbmUgTkwJCSJcbiIKKworI2RlZmluZSBPVVRQVVRBTFdBWVMobykJZnByaW50ZihzdGRvdXQsICIjICVzXG4iLCBvKTsKKyNkZWZpbmUgT1VUUFVUKG8pCWlmICghYmVxdWlldCkgeyBPVVRQVVRBTFdBWVMobyk7IH0KKworI2RlZmluZSBTVUNDRVNTKHMpCQkJCQlcCit7CQkJCQkJCVwKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgRG9uZSB3aXRoICVzXG4iLCBzKTsgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEZBSUxFRChlLCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChlKSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJub3Qgb2s6ICVkIC0gJXNcbiIsICsrdGVzdGNvdW50LCBmKTsJXAorCQlmYWlsY291bnQgKz0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAib2s6ICVkIC0gJXNcbiIsICsrdGVzdGNvdW50LCBmKTsJXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZmbHVzaChzdGRvdXQpOyBcCit9CisKKyNkZWZpbmUgREVUQUlMSU5UKHMsIGkpIFwKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXM6ICVkXG4iLCBzLCBpKTsKKworLyoKKyAqIFRlc3Qgc3BlY2lmaWMgZ2xvYmFscy4KKyAqLworI2RlZmluZQlFTkdJTkVJRF9ERUZBVUxUCSIxLjIuMy40d2lsZCIKKyNkZWZpbmUgUEFTU1BIUkFTRV9ERUZBVUxUCSJDbGF5J3MgQ29uY2x1c2lvbjogQ3JlYXRpdml0eSBpcyBncmVhdCwgIiBcCisJCQkJCSJidXQgcGxhZ2lhcmlzbSBpcyBmYXN0ZXIuIgorI2RlZmluZSBPTERLRVlfREVGQVVMVAkJIlRoaXMgaXMgYSB2ZXJ5IG9sZCBrZXkuIgorI2RlZmluZSBORVdLRVlfREVGQVVMVAkJIlRoaXMga2V5LCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgdmVyeSBuZXcuIgorCit1X2NoYXIgICAgICAgICAqZW5naW5lSUQgPSBOVUxMOworY2hhciAgICAgICAgICAgKnBhc3NwaHJhc2UgPSBOVUxMOworY29uc3QgdV9jaGFyICAgKm9sZGtleSA9IE5VTEw7Citjb25zdCB1X2NoYXIgICAqbmV3a2V5ID0gTlVMTDsKK2ludCAgICAgICAgICAgICBiZXF1aWV0ID0gMDsKKworCisvKgorICogUHJvdG90eXBlcy4KKyAqLwordm9pZCAgICAgICAgICAgIHVzYWdlKEZJTEUgKiBvZnApOworCitpbnQgICAgICAgICAgICAgdGVzdF9nZW5rdWwodm9pZCk7CitpbnQgICAgICAgICAgICAgdGVzdF9nZW5LdSh2b2lkKTsKK2ludCAgICAgICAgICAgICB0ZXN0X2tleWNoYW5nZSh2b2lkKTsKKworCisKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKKyAgICBjaGFyICAgICAgICAgICAgY2g7CisKKyAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07CisgICAgb3B0YXJnID0gTlVMTDsKKworICAgIC8qCisgICAgICogUGFyc2UuCisgICAgICovCisgICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7CisgICAgICAgIHN3aXRjaCAoY2gpIHsKKyAgICAgICAgY2FzZSAnYSc6CisgICAgICAgICAgICBkb2FsbHRlc3RzID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdFJzoKKyAgICAgICAgICAgIGVuZ2luZUlEID0gKHVfY2hhciAqKSBvcHRhcmc7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnayc6CisgICAgICAgICAgICBkb2tleWNoYW5nZSA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnbCc6CisgICAgICAgICAgICBkb2dlbmt1bCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnTic6CisgICAgICAgICAgICBuZXdrZXkgPSAodV9jaGFyICopIG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICdPJzoKKyAgICAgICAgICAgIG9sZGtleSA9ICh1X2NoYXIgKikgb3B0YXJnOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ1AnOgorICAgICAgICAgICAgcGFzc3BocmFzZSA9IG9wdGFyZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICd1JzoKKyAgICAgICAgICAgIGRvZ2VuS3UgPSAxOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ3EnOgorICAgICAgICAgICAgYmVxdWlldCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnaCc6CisgICAgICAgICAgICBydmFsID0gMDsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7CisgICAgICAgICAgICBleGl0KHJ2YWwpOworICAgICAgICB9CisKKyAgICAgICAgYXJnYyAtPSAxOworICAgICAgICBhcmd2ICs9IDE7CisgICAgICAgIGlmIChvcHRhcmcpIHsKKyAgICAgICAgICAgIGFyZ2MgLT0gMTsKKyAgICAgICAgICAgIGFyZ3YgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIG9wdGluZCA9IDE7CisgICAgICAgIG9wdGFyZyA9IE5VTEw7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlIGdldG9wdCAqLworCisgICAgaWYgKChhcmdjID4gMSkpIHsKKyAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKKyAgICAgICAgZXhpdCgxMDAwKTsKKworICAgIH0gZWxzZSBpZiAoQUxMT1BUSU9OUyAhPSAxKSB7CisgICAgICAgIGRvYWxsdGVzdHMgPSAxOworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBUZXN0IHN0dWZmLgorICAgICAqLworICAgIHJ2YWwgPSBzY19pbml0KCk7CisgICAgRkFJTEVEKHJ2YWwsICJzY19pbml0KCkuIik7CisKKyAgICBpZiAoZG9nZW5LdSB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2dlbkt1KCk7CisgICAgfQorICAgIGlmIChkb2dlbmt1bCB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2dlbmt1bCgpOworICAgIH0KKyAgICBpZiAoZG9rZXljaGFuZ2UgfHwgZG9hbGx0ZXN0cykgeworICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9rZXljaGFuZ2UoKTsKKyAgICB9CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIjEuLiVkXG4iLCB0ZXN0Y291bnQpOworICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLworCisKKworCisKK3ZvaWQKK3VzYWdlKEZJTEUgKiBvZnApCit7CisgICAgZnByaW50ZihvZnAsCisgICAgICAgICAgICBVU0FHRQorICAgICAgICAgICAgIiIgTkwKKyAgICAgICAgICAgICIgICAgLWEJCQlBbGwgdGVzdHMuIiBOTAorICAgICAgICAgICAgIiAgICAtRSBbMHhdPGVuZ2luZUlEPglzbm1wRW5naW5lSUQgc3RyaW5nLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1rCQkJVGVzdCB7ZW5jb2RlLGRlY29kZX1fa2V5Y2hhbmdlKCkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLWwJCQlnZW5lcmF0ZV9rdWwoKS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtaAkJCUhlbHAuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLU4gWzB4XTxuZXdrZXk+CU5ldyBrZXkgKGZvciB0ZXN0aW5nIEtleUNoYW5nZSBUQykuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLU8gWzB4XTxvbGRrZXk+CU9sZCBrZXkgKGZvciB0ZXN0aW5nIEtleUNoYW5nZSBUQykuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLVAgPHBhc3NwaHJhc2U+CVNvdXJjZSBzdHJpbmcgZm9yIHVzbVVzZXIgbWFzdGVyIGtleS4iCisgICAgICAgICAgICBOTAorICAgICAgICAgICAgIiAgICAtdQkJCWdlbmVyYXRlX0t1KCkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLXEJCQliZSBxdWlldC4iCisgICAgICAgICAgICBOTCAiIiBOTCwgbG9jYWxfcHJvZ25hbWUpOworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCisKKworCisKKyNpZmRlZiBFWEFNUExFCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9kb3NvbWV0aGluZworICoKKyAqIFRlc3QgdGVtcGxhdGUuCisgKgorICogUmV0dXJuczoKKyAqCU51bWJlciBvZiBmYWlsdXJlcy4KKyAqLworaW50Cit0ZXN0X2Rvc29tZXRoaW5nKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7CisKKyAgICBFTTAoMSwgIlVOSU1QTEVNRU5URUQiKTsgICAgLyogRU0oMSk7ICovCisKKyAgdGVzdF9kb3NvbWV0aGluZ19xdWl0OgorICAgIHJldHVybiBmYWlsY291bnQ7CisKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9zb21ldGhpbmcoKSAqLworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFNUExFICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9nZW5LdQorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICoKKyAqIFRlc3QgZ2VuZXJhdGlvbiBvZiB1c21Vc2VyIG1hc3RlciBrZXkgZnJvbSBhIHBhc3NwaHJhc2UuCisgKgorICogQVNTVU1FUyAgUGFzc3BocmFzZSBpcyBtYWRlIG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzIQorICovCitpbnQKK3Rlc3RfZ2VuS3Uodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgICAgZmFpbGNvdW50ID0gMCwKKyAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpOworICAgIHNpemVfdCAgICAgICAgICBrdWxlbjsKKyAgICBjb25zdCBjaGFyICAgICAqaGFzaG5hbWUgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbC4iOworICAgIGNoYXIgICAgICAgICAgICpzOworICAgIHVfY2hhciAgICAgICAgICBLdVtMT0NBTF9NQVhCVUZdOworICAgIG9pZCAgICAgICAgICAgICpoYXNodHlwZSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7CisKKyAgICBPVVRQVVQoIlRlc3Qgb2YgZ2VuZXJhdGVfS3UgLS0iKTsKKworICAgIC8qCisgICAgICogU2V0IHBhc3NwaHJhc2UuCisgICAgICovCisgICAgaWYgKCFwYXNzcGhyYXNlKSB7CisgICAgICAgIHBhc3NwaHJhc2UgPSBzdHJkdXAoUEFTU1BIUkFTRV9ERUZBVUxUKTsKKyAgICB9CisgICAgaWYgKCFiZXF1aWV0KQorICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIlBhc3NwaHJhc2UlczogJXNcbiIsCisgICAgICAgICAgICAgICAgKHN0cmNtcChwYXNzcGhyYXNlLCBQQVNTUEhSQVNFX0RFRkFVTFQpID09IDApID8gIiAoZGVmYXVsdCkiIDogIiIsCisgICAgICAgICAgICAgICAgcGFzc3BocmFzZSk7CisKKworICB0ZXN0X2dlbkt1X2FnYWluOgorICAgIG1lbXNldChLdSwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBrdWxlbiA9IExPQ0FMX01BWEJVRjsKKworICAgIHJ2YWwgPSBnZW5lcmF0ZV9LdShoYXNodHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAoY29uc3QgdV9jaGFyICopIHBhc3NwaHJhc2UsIHN0cmxlbihwYXNzcGhyYXNlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgS3UsICZrdWxlbik7CisgICAgRkFJTEVEKHJ2YWwsICJnZW5lcmF0ZV9LdSgpLiIpOworCisgICAgRkFJTEVEKChrdWxlbiAhPSBwcm9wZXJsZW5ndGgpLAorICAgICAgICAgICAiS3UgbGVuZ3RoIGlzIHRoZSByaWdodCBsZW5ndGggZm9yIHRoaXMgaGFzaHR5cGUuIik7CisKKyAgICBiaW5hcnlfdG9faGV4KEt1LCBrdWxlbiwgJnMpOworICAgIGlmICghYmVxdWlldCkKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIjIEt1IChsZW49JSIgTkVUU05NUF9QUkl6ICJ1KTogICVzXG4iLCBrdWxlbiwgcyk7CisgICAgZnJlZV96ZXJvKHMsIGt1bGVuKTsKKworICAgIE9VVFBVVChoYXNobmFtZSk7CisKKyAgICBpZiAoaGFzaHR5cGUgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgeworICAgICAgICBoYXNodHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOworICAgICAgICBoYXNobmFtZSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbC4iOworICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpOworICAgICAgICBnb3RvIHRlc3RfZ2VuS3VfYWdhaW47CisgICAgfQorCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9nZW5LdSgpICovCisKKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCisgKiB0ZXN0X2dlbmt1bAorICoKKyAqIFJldHVybnM6CisgKglOdW1iZXIgb2YgZmFpbHVyZXMuCisgKgorICoKKyAqIFRlc3Qgb2YgZ2VuZXJhdGVfa3VsKCkuCisgKgorICogQSBwYXNzcGhyYXNlIGFuZCBlbmdpbmVJRCBhcmUgaGFzaGVkIGludG8gYSBtYXN0ZXIga2V5IEt1IHVzaW5nCisgKiBib3RoIGtub3duIGhhc2ggdHJhbnNmb3Jtcy4gIExvY2FsaXplZCBrZXlzLCBhbHNvIHVzaW5nIGJvdGggaGFzaAorICogdHJhbnNmb3JtcywgYXJlIGdlbmVyYXRlZCBmcm9tIGVhY2ggb2YgdGhlc2UgbWFzdGVyIGtleXMuCisgKgorICogQVNTVU1FICBnZW5lcmF0ZV9LdSBpcyBhbHJlYWR5IHRlc3RlZC4KKyAqIEFTU1VNRSAgZW5naW5lSUQgaXMgaW5pdGlhbGx5IGEgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZy4KKyAqLworaW50Cit0ZXN0X2dlbmt1bCh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAorICAgICAgICBmYWlsY291bnQgPSAwLAorICAgICAgICBwcm9wZXJsZW5ndGgsIGVuZ2luZUlEX2xlbiwgaXNkZWZhdWx0ID0gRkFMU0U7CisKKyAgICBzaXplX3QgICAgICAgICAga3VsZW4sIGt1bF9sZW47CisgICAgY2hhciAgICAgICAgICAgKnMgPSBOVUxMOworICAgIGNvbnN0IGNoYXIgKnRlc3RuYW1lID0gIlVzaW5nIEhNQUNNRDUgdG8gY3JlYXRlIG1hc3RlciBrZXkuIjsKKyAgICBjb25zdCBjaGFyICpoYXNobmFtZV9LdSA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sIjsKKworICAgIHVfY2hhciAgICAgICAgICBLdVtMT0NBTF9NQVhCVUZdLCBrdWxbTE9DQUxfTUFYQlVGXTsKKworICAgIG9pZCAgICAgICAgICAgICpoYXNodHlwZV9LdSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wsICpoYXNodHlwZV9rdWw7CisKKyAgICBPVVRQVVQoIlRlc3Qgb2YgZ2VuZXJhdGVfa3VsIC0tIik7CisKKyAgICAvKgorICAgICAqIFNldCBwYXNzcGhyYXNlIGFuZCBlbmdpbmVJRC4KKyAgICAgKgorICAgICAqIElmIGVuZ2luZUlEIGJlZ2lucyB3aXRoIDB4LCBhc3N1bWUgaXQgaXMgd3JpdHRlbiBpbiAocHJpbnRhYmxlKQorICAgICAqIGhleCBhbmQgY29udmVydCBpdCB0byBiaW5hcnkgZGF0YS4KKyAgICAgKi8KKyAgICBpZiAoIXBhc3NwaHJhc2UpIHsKKyAgICAgICAgcGFzc3BocmFzZSA9IHN0cmR1cChQQVNTUEhSQVNFX0RFRkFVTFQpOworICAgIH0KKyAgICBpZiAoIWJlcXVpZXQpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiIyBQYXNzcGhyYXNlJXM6ICVzXG4iLAorICAgICAgICAgICAgICAgIChzdHJjbXAocGFzc3BocmFzZSwgUEFTU1BIUkFTRV9ERUZBVUxUKSA9PSAwKSA/ICIgKGRlZmF1bHQpIiA6ICIiLAorICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UpOworCisgICAgaWYgKCFlbmdpbmVJRCkgeworICAgICAgICBlbmdpbmVJRCA9ICh1X2NoYXIgKikgc3RyZHVwKEVOR0lORUlEX0RFRkFVTFQpOworICAgICAgICBpc2RlZmF1bHQgPSBUUlVFOworICAgIH0KKworICAgIGVuZ2luZUlEX2xlbiA9IHN0cmxlbigoY2hhciAqKSBlbmdpbmVJRCk7CisKKyAgICBpZiAodG9sb3dlcigqKGVuZ2luZUlEICsgMSkpID09ICd4JykgeworICAgICAgICBlbmdpbmVJRF9sZW4gPQorICAgICAgICAgICAgaGV4X3RvX2JpbmFyeTIoZW5naW5lSUQgKyAyLCBlbmdpbmVJRF9sZW4gLSAyLCAmcyk7CisgICAgICAgIEZBSUxFRCgoZW5naW5lSURfbGVuIDwgMCksCisgICAgICAgICAgICAgICAiQ291bGQgbm90IHJlc29sdmUgaGV4IGVuZ2luZUlELiIpOworICAgICAgICBlbmdpbmVJRCA9ICh1X2NoYXIgKikgczsKKyAgICAgICAgYmluYXJ5X3RvX2hleChlbmdpbmVJRCwgZW5naW5lSURfbGVuLCAmcyk7CisgICAgfQorCisgICAgaWYgKCFiZXF1aWV0KQorICAgICAgICBmcHJpbnRmKHN0ZG91dCwgIiMgZW5naW5lSUQlcyAobGVuPSVkKTogICVzXG4iLAorICAgICAgICAgICAgICAgIChpc2RlZmF1bHQpID8gIiAoZGVmYXVsdCkiIDogIiIsCisgICAgICAgICAgICAgICAgZW5naW5lSURfbGVuLCAoKHMgIT0gMCkgPyAoKHVfY2hhciAqKSBzKSA6IGVuZ2luZUlEKSk7CisgICAgU05NUF9GUkVFKHMpOworCisKKworICAgIC8qCisgICAgICogQ3JlYXRlIGEgbWFzdGVyIGtleSB1c2luZyBib3RoIGhhc2ggdHJhbnNmb3JtczsgY3JlYXRlIGxvY2FsaXplZAorICAgICAqIGtleXMgdXNpbmcgYm90aCBoYXNoIHRyYW5zZm9ybXMgZnJvbSBlYWNoIG1hc3RlciBrZXkuCisgICAgICovCisgIHRlc3RfZ2Vua3VsX2FnYWluX21hc3RlcjoKKyAgICBtZW1zZXQoS3UsIDAsIExPQ0FMX01BWEJVRik7CisgICAga3VsZW4gPSBMT0NBTF9NQVhCVUY7CisgICAgaGFzaHR5cGVfa3VsID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbDsKKyAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSk7CisKKworICAgIHJ2YWwgPSBnZW5lcmF0ZV9LdShoYXNodHlwZV9LdSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAodV9jaGFyICopIHBhc3NwaHJhc2UsIHN0cmxlbihwYXNzcGhyYXNlKSwgS3UsICZrdWxlbik7CisgICAgRkFJTEVEKHJ2YWwsICJnZW5lcmF0ZV9LdSgpLiIpOworCisgICAgYmluYXJ5X3RvX2hleChLdSwga3VsZW4sICZzKTsKKyAgICBpZiAoIWJlcXVpZXQpCisgICAgICAgIGZwcmludGYoc3Rkb3V0LAorICAgICAgICAgICAgICAgICIjIE1hc3RlciBLdSB1c2luZyBcIiVzXCI6IFx0JXNcbiIsIGhhc2huYW1lX0t1LCBzKTsKKyAgICBmcmVlX3plcm8ocywga3VsZW4pOworCisKKyAgdGVzdF9nZW5rdWxfYWdhaW5fbG9jYWw6CisgICAgbWVtc2V0KGt1bCwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBrdWxfbGVuID0gTE9DQUxfTUFYQlVGOworCisgICAgcnZhbCA9IGdlbmVyYXRlX2t1bChoYXNodHlwZV9rdWwsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZ2luZUlELCBlbmdpbmVJRF9sZW4sIEt1LCBrdWxlbiwga3VsLCAma3VsX2xlbik7CisKKyAgICBpZiAoKGhhc2h0eXBlX0t1ID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpCisgICAgICAgICYmIChoYXNodHlwZV9rdWwgPT0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wpKSB7CisgICAgICAgIEZBSUxFRCgocnZhbCA9PSBTTk1QRVJSX1NVQ0NFU1MpLAorICAgICAgICAgICAgICAgImdlbmVyYXRlX2t1bCBTSE9VTEQgZmFpbCB3aGVuIEt1IGxlbmd0aCBpcyAiCisgICAgICAgICAgICAgICAibGVzcyB0aGFuIGhhc2ggdHJhbnNmb3JtIGxlbmd0aC4iKTsKKyAgICB9IGVsc2UgeworICAgICAgICBGQUlMRUQocnZhbCwgImdlbmVyYXRlX2t1bCgpLiIpOworCisgICAgICAgIEZBSUxFRChrdWxfbGVuICE9IHByb3Blcmxlbmd0aCwKKyAgICAgICAgICAgICAgICJjaGVja2luZyBpZiBrdWwgbGVuZ3RoIGlzIHJpZ2h0IGZvciB0aGUgZ2l2ZW4gaGFzaHR5cGUuIik7CisKKyAgICAgICAgYmluYXJ5X3RvX2hleChrdWwsIGt1bF9sZW4sICZzKTsKKyAgICAgICAgZnByaW50ZihzdGRvdXQsICIjIGt1bCAoJXMpIChsZW49JSIgTkVUU05NUF9QUkl6ICJ1KTogICVzXG4iLAorICAgICAgICAgICAgICAgICgoaGFzaHR5cGVfS3UgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgPyAiTUQ1IiA6ICJTSEEiKSwKKyAgICAgICAgICAgICAgICBrdWxfbGVuLCBzKTsKKyAgICAgICAgZnJlZV96ZXJvKHMsIGt1bF9sZW4pOworICAgIH0KKworCisgICAgLyoKKyAgICAgKiBDcmVhdGUgbG9jYWxpemVkIGtleSB1c2luZyB0aGUgb3RoZXIgaGFzaCB0cmFuc2Zvcm0sIGJ1dCBmcm9tCisgICAgICogKiB0aGUgc2FtZSBtYXN0ZXIga2V5LgorICAgICAqLworICAgIGlmIChoYXNodHlwZV9rdWwgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgeworICAgICAgICBoYXNodHlwZV9rdWwgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKKyAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKKyAgICAgICAgZ290byB0ZXN0X2dlbmt1bF9hZ2Fpbl9sb2NhbDsKKyAgICB9CisKKyAgICBTVUNDRVNTKHRlc3RuYW1lKTsKKworCisgICAgLyoKKyAgICAgKiBSZS1jcmVhdGUgdGhlIG1hc3RlciBrZXkgdXNpbmcgdGhlIG90aGVyIGhhc2ggdHJhbnNmb3JtLgorICAgICAqLworICAgIGlmIChoYXNodHlwZV9LdSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7CisgICAgICAgIGhhc2h0eXBlX0t1ID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7CisgICAgICAgIGhhc2huYW1lX0t1ID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sIjsKKyAgICAgICAgdGVzdG5hbWUgPSAiVXNpbmcgSE1BQ1NIQTEgdG8gY3JlYXRlIG1hc3RlciBrZXkuIjsKKyAgICAgICAgZ290byB0ZXN0X2dlbmt1bF9hZ2Fpbl9tYXN0ZXI7CisgICAgfQorCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9nZW5rdWwoKSAqLworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9rZXljaGFuZ2UKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqCisgKiBUZXN0IG9mIEtleUNoYW5nZSBUQyBpbXBsZW1lbnRhdGlvbi4KKyAqCisgKiBBU1NVTUUgbmV3a2V5IGFuZCBvbGRrZXkgYmVnaW4gYXMgTlVMTCB0ZXJtaW5hdGVkIHN0cmluZ3MuCisgKi8KK2ludAordGVzdF9rZXljaGFuZ2Uodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgICAgZmFpbGNvdW50ID0gMCwKKyAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpLAorICAgICAgICBvbGRrZXlfbGVuLAorICAgICAgICBuZXdrZXlfbGVuLAorICAgICAgICBpc2RlZmF1bHRfbmV3ID0gRkFMU0UsIGlzZGVmYXVsdF9vbGQgPSBGQUxTRTsKKyAgICBzaXplX3QgICAgICAgICAga2V5Y2hhbmdlX2xlbiwgdGVtcF9sZW47CisKKyAgICBjb25zdCBjaGFyICAgICAqaGFzaG5hbWUgPSAidXNtSE1BQ01ENUF1dGhQcm90b2NvbC4iOworICAgIGNoYXIgICAgICAgICAgICpzOworCisgICAgdV9jaGFyICAgICAgICAgIG9sZGtleV9idWZbTE9DQUxfTUFYQlVGXSwKKyAgICAgICAgbmV3a2V5X2J1ZltMT0NBTF9NQVhCVUZdLAorICAgICAgICB0ZW1wX2J1ZltMT0NBTF9NQVhCVUZdLCBrZXljaGFuZ2VfYnVmW0xPQ0FMX01BWEJVRl07CisKKyAgICBvaWQgICAgICAgICAgICAqaGFzaHR5cGUgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOworCisgICAgT1VUUFVUKCJUZXN0IG9mIEtleUNoYW5nZSBUQyAtLSIpOworCisKKyAgICAvKgorICAgICAqIFNldCBuZXdrZXkgYW5kIG9sZGtleS4KKyAgICAgKi8KKyAgICBpZiAoIW5ld2tleSkgeyAgICAgICAgICAgICAgLyogbmV3a2V5ICovCisgICAgICAgIG5ld2tleSA9IChjb25zdCB1X2NoYXIgKikgTkVXS0VZX0RFRkFVTFQ7CisgICAgICAgIGlzZGVmYXVsdF9uZXcgPSBUUlVFOworICAgIH0KKyAgICBuZXdrZXlfbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopIG5ld2tleSk7CisKKyAgICBpZiAodG9sb3dlcigqKG5ld2tleSArIDEpKSA9PSAneCcpIHsKKyAgICAgICAgbmV3a2V5X2xlbiA9IGhleF90b19iaW5hcnkyKChjb25zdCB1X2NoYXIgKikgbmV3a2V5ICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld2tleV9sZW4gLSAyLCAmcyk7CisgICAgICAgIEZBSUxFRChuZXdrZXlfbGVuIDwgMCwKKyAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSBoZXggbmV3a2V5LiIpOworICAgICAgICBuZXdrZXkgPSAoY29uc3QgdV9jaGFyICopIHM7CisgICAgICAgIGJpbmFyeV90b19oZXgoKGNvbnN0IHVfY2hhciAqKSBuZXdrZXksIG5ld2tleV9sZW4sICZzKTsKKyAgICB9CisKKyAgICBpZiAoIW9sZGtleSkgeyAgICAgICAgICAgICAgLyogb2xka2V5ICovCisgICAgICAgIG9sZGtleSA9IChjb25zdCB1X2NoYXIgKikgT0xES0VZX0RFRkFVTFQ7CisgICAgICAgIGlzZGVmYXVsdF9vbGQgPSBUUlVFOworICAgIH0KKyAgICBvbGRrZXlfbGVuID0gc3RybGVuKChjb25zdCBjaGFyICopIG9sZGtleSk7CisKKyAgICBpZiAodG9sb3dlcigqKG9sZGtleSArIDEpKSA9PSAneCcpIHsKKyAgICAgICAgb2xka2V5X2xlbiA9IGhleF90b19iaW5hcnkyKChjb25zdCB1X2NoYXIgKikgb2xka2V5ICsgMiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGtleV9sZW4gLSAyLCAmcyk7CisgICAgICAgIEZBSUxFRChvbGRrZXlfbGVuIDwgMCwKKyAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSBoZXggb2xka2V5LiIpOworICAgICAgICBvbGRrZXkgPSAoY29uc3QgdV9jaGFyICopIHM7CisgICAgICAgIGJpbmFyeV90b19oZXgob2xka2V5LCBvbGRrZXlfbGVuLCAmcyk7CisgICAgfQorCisKKworICB0ZXN0X2tleWNoYW5nZV9hZ2FpbjoKKyAgICBtZW1zZXQob2xka2V5X2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBtZW1zZXQobmV3a2V5X2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBtZW1zZXQoa2V5Y2hhbmdlX2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKKyAgICBtZW1zZXQodGVtcF9idWYsIDAsIExPQ0FMX01BWEJVRik7CisKKyAgICBtZW1jcHkob2xka2V5X2J1Ziwgb2xka2V5LCBTTk1QX01JTihvbGRrZXlfbGVuLCBwcm9wZXJsZW5ndGgpKTsKKyAgICBtZW1jcHkobmV3a2V5X2J1ZiwgbmV3a2V5LCBTTk1QX01JTihuZXdrZXlfbGVuLCBwcm9wZXJsZW5ndGgpKTsKKyAgICBrZXljaGFuZ2VfbGVuID0gTE9DQUxfTUFYQlVGOworCisKKyAgICBiaW5hcnlfdG9faGV4KG9sZGtleV9idWYsIHByb3Blcmxlbmd0aCwgJnMpOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBvbGRrZXklcyAobGVuPSVkKTogICVzXG4iLAorICAgICAgICAgICAgKGlzZGVmYXVsdF9vbGQpID8gIiAoZGVmYXVsdCkiIDogIiIsIHByb3Blcmxlbmd0aCwgcyk7CisgICAgU05NUF9GUkVFKHMpOworCisgICAgYmluYXJ5X3RvX2hleChuZXdrZXlfYnVmLCBwcm9wZXJsZW5ndGgsICZzKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgbmV3a2V5JXMgKGxlbj0lZCk6ICAlc1xuIiwKKyAgICAgICAgICAgIChpc2RlZmF1bHRfbmV3KSA/ICIgKGRlZmF1bHQpIiA6ICIiLCBwcm9wZXJsZW5ndGgsIHMpOworICAgIFNOTVBfRlJFRShzKTsKKworCisgICAgcnZhbCA9IGVuY29kZV9rZXljaGFuZ2UoaGFzaHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbGRrZXlfYnVmLCBwcm9wZXJsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3a2V5X2J1ZiwgcHJvcGVybGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleWNoYW5nZV9idWYsICZrZXljaGFuZ2VfbGVuKTsKKyAgICBGQUlMRUQocnZhbCwgImVuY29kZV9rZXljaGFuZ2UoKS4iKTsKKworICAgIEZBSUxFRChrZXljaGFuZ2VfbGVuICE9IChwcm9wZXJsZW5ndGggKiAyKSwKKyAgICAgICAgICAgIktleUNoYW5nZSBzdHJpbmcgKGVuY29kZWQpIGlzIG5vdCBwcm9wZXIgbGVuZ3RoICIKKyAgICAgICAgICAgImZvciB0aGlzIGhhc2ggdHJhbnNmb3JtLiIpOworCisgICAgYmluYXJ5X3RvX2hleChrZXljaGFuZ2VfYnVmLCBrZXljaGFuZ2VfbGVuLCAmcyk7CisgICAgZnByaW50ZihzdGRvdXQsICIjICglcykgS2V5Q2hhbmdlIHN0cmluZzogICVzXG4iLAorICAgICAgICAgICAgKChoYXNodHlwZSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSA/ICJNRDUiIDogIlNIQSIpLCBzKTsKKyAgICBTTk1QX0ZSRUUocyk7CisKKyAgICB0ZW1wX2xlbiA9IHByb3Blcmxlbmd0aDsKKyAgICBydmFsID0gZGVjb2RlX2tleWNoYW5nZShoYXNodHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGtleV9idWYsIHByb3Blcmxlbmd0aCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXljaGFuZ2VfYnVmLCBwcm9wZXJsZW5ndGggKiAyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfYnVmLCAmdGVtcF9sZW4pOworICAgIEZBSUxFRChydmFsLCAiZGVjb2RlX2tleWNoYW5nZSgpLiIpOworCisgICAgRkFJTEVEKHRlbXBfbGVuICE9IHByb3Blcmxlbmd0aCwKKyAgICAgICAgICAgImRlY29kZWQgbmV3a2V5IGlzIG5vdCBwcm9wZXIgbGVuZ3RoIGZvciAiCisgICAgICAgICAgICJ0aGlzIGhhc2ggdHJhbnNmb3JtLiIpOworCisgICAgYmluYXJ5X3RvX2hleCh0ZW1wX2J1ZiwgdGVtcF9sZW4sICZzKTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgZGVjb2RlZCBuZXdrZXk6ICAlc1xuIiwgcyk7CisgICAgU05NUF9GUkVFKHMpOworCisKKyAgICBGQUlMRUQobWVtY21wKG5ld2tleV9idWYsIHRlbXBfYnVmLCB0ZW1wX2xlbiksCisgICAgICAgICAgICJuZXdrZXkgZGlkIG5vdCBkZWNvZGUgcHJvcGVybHkuIik7CisKKworICAgIFNVQ0NFU1MoaGFzaG5hbWUpOworCisKKyAgICAvKgorICAgICAqIE11bHRpcGxleCBkaWZmZXJlbnQgdGVzdCBjb21iaW5hdGlvbnMuCisgICAgICoKKyAgICAgKiBGaXJzdCBjbGF1c2UgaXMgZm9yIFRlc3QgIzIsIHNlY29uZCBjbGF1c2UgaXMgZm9yIChsYXN0KSBUZXN0ICMzLgorICAgICAqLworICAgIGlmIChoYXNodHlwZSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSB7CisgICAgICAgIGhhc2h0eXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7CisgICAgICAgIGhhc2huYW1lID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sICh3L0RFUyBsZW5ndGgga3VsJ3MpLiI7CisgICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfUFJJVkxFTl8xREVTKQorICAgICAgICAgICAgKyBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFU19JVik7CisgICAgICAgIGdvdG8gdGVzdF9rZXljaGFuZ2VfYWdhaW47CisKKyAgICB9IGVsc2UgaWYgKHByb3Blcmxlbmd0aCA8IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSkpIHsKKyAgICAgICAgaGFzaHR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKKyAgICAgICAgaGFzaG5hbWUgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wuIjsKKyAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKKyAgICAgICAgZ290byB0ZXN0X2tleWNoYW5nZV9hZ2FpbjsKKyAgICB9CisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2tleWNoYW5nZSgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zbm1wdjMvVDA1MGV0aW1ldGVzdF9jYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM5NTFhYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3NubXB2My9UMDUwZXRpbWV0ZXN0X2NhcHAuYwpAQCAtMCwwICsxLDQyMCBAQAorLyoKKyAqIGV0aW1ldGVzdC5jCisgKgorICogSEVBREVSIFRlc3RpbmcgZW5naW5lSUQgaGFzaGluZyBhbmQgdGltaW5nCisgKgorICogRXhwZWN0ZWQgU1VDQ0VTU2VzIGZvciBhbGwgdGVzdHM6ICAgIDMKKyAqCisgKiBSZXR1cm5zOgorICogICAgICBOdW1iZXIgb2YgRkFJTFVSRXMuCisgKgorICogVGVzdCBvZiBoYXNoX2VuZ2luZUlEKCkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6ICAwCisgKiBUZXN0IG9mIExDRCBFbmdpbmUgSUQgYW5kIFRpbWUgTGlzdC4gICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogIDMKKyAqCisgKiBGSVggIERldmlzZSBhIHRlc3QgZm9yIHtzZXQsZ2V0fV9lbmdpbmV0aW1lKC4uLiwgRkFMU0UpLgorICovCisKKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX05FVElORVRfSU5fSAorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNlbmRpZgorCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2FzbjEuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXBfYXBpLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zY2FwaS5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdG9vbHMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L2xjZF90aW1lLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9zbm1wX2RlYnVnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS9jYWxsYmFjay5oPgorCitzdGF0aWMgdV9pbnQgICAgZHVtbXlfZXRpbWUsIGR1bW15X2Vib290OyAgICAgICAvKiBGb3IgSVNFTkdJTkVLTk9XTigpLiAqLworCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKK2V4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOworCitpbnQgICAgICAgICAgICAgdGVzdGNvdW50PTA7CisKKy8qCisgKiBHbG9iYWxzLCAmYy4uLgorICovCitjaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7CisKKyNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy1zIDxzZWNvbmRzPl1bLWFlSF0iCisjZGVmaW5lIE9QVElPTkxJU1QJImFlaEhzOiIKKworaW50ICAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAwLCBkb2hhc2hpbmRleCA9IDAsIGRvZXRpbWV0ZXN0ID0gMDsKKworI2RlZmluZQlBTExPUFRJT05TCShkb2FsbHRlc3RzICsgZG9oYXNoaW5kZXggKyBkb2V0aW1ldGVzdCkKKworCisKKyNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKKyNkZWZpbmUgTkwJCSJcbiIKKworI2RlZmluZSBPVVRQVVQobykJZnByaW50ZihzdGRvdXQsICIjICVzXG4iLCBvKTsKKworI2RlZmluZSBTVUNDRVNTKHMpCQkJCQlcCit7CQkJCQkJCVwKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgRG9uZSB3aXRoICVzXG4iLCBzKTsgICAgICAgICAgICAgXAorfQorCisjZGVmaW5lIEZBSUxFRChlLCBmKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGUgIT0gU05NUEVSUl9TVUNDRVNTKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRvdXQsICJub3Qgb2s6ICVkIC0gJXNcbiIsICsrdGVzdGNvdW50LCBmKTsJXAorCQlmYWlsY291bnQgKz0gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAib2s6ICVkIC0gJXNcbiIsICsrdGVzdGNvdW50LCBmKTsJXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGZmbHVzaChzdGRvdXQpOyBcCit9CisKKyNkZWZpbmUgREVUQUlMSU5UKHMsIGkpIFwKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgJXM6ICVkXG4iLCBzLCBpKTsKKworLyoKKyAqIEdsb2JhbCB2YXJpYWJsZXMuCisgKi8KK2ludCAgICAgICAgICAgICBzbGVlcHRpbWUgPSAyOworCisjZGVmaW5lIEJMQVQgImFsaztkamY7YW4gcml1O2FsaWNlbm1ydWw7YWlrbmdsa3NhamhlMSBhZGNmYWxjZW5yY28yIgorCisKKworCisvKgorICogUHJvdG90eXBlcy4KKyAqLwordm9pZCAgICAgICAgICAgIHVzYWdlKEZJTEUgKiBvZnApOworCitpbnQgICAgICAgICAgICAgdGVzdF9ldGltZSh2b2lkKTsKK2ludCAgICAgICAgICAgICB0ZXN0X2hhc2hpbmRleCh2b2lkKTsKKworCisKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKKyAgICBjaGFyICAgICAgICAgICAgY2g7CisKKyAgICBsb2NhbF9wcm9nbmFtZSA9IGFyZ3ZbMF07CisKKyAgICAvKgorICAgICAqIFBhcnNlLgorICAgICAqLworICAgIHdoaWxlICgoY2ggPSBnZXRvcHQoYXJnYywgYXJndiwgT1BUSU9OTElTVCkpICE9IEVPRikgeworICAgICAgICBzd2l0Y2ggKGNoKSB7CisgICAgICAgIGNhc2UgJ2EnOgorICAgICAgICAgICAgZG9hbGx0ZXN0cyA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnZSc6CisgICAgICAgICAgICBkb2V0aW1ldGVzdCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAnSCc6CisgICAgICAgICAgICBkb2hhc2hpbmRleCA9IDE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAncyc6CisgICAgICAgICAgICBzbGVlcHRpbWUgPSBhdG9pKG9wdGFyZyk7CisgICAgICAgICAgICBpZiAoc2xlZXB0aW1lIDwgMCkgeworICAgICAgICAgICAgICAgIHVzYWdlKHN0ZGVycik7CisgICAgICAgICAgICAgICAgZXhpdCgxMDAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgJ2gnOgorICAgICAgICAgICAgcnZhbCA9IDA7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICB1c2FnZShzdGRvdXQpOworICAgICAgICAgICAgZXhpdChydmFsKTsKKyAgICAgICAgfQorCisgICAgICAgIGFyZ2MgLT0gMTsKKyAgICAgICAgYXJndiArPSAxOworICAgICAgICBpZiAob3B0YXJnKSB7CisgICAgICAgICAgICBhcmdjIC09IDE7CisgICAgICAgICAgICBhcmd2ICs9IDE7CisgICAgICAgICAgICBvcHRhcmcgPSBOVUxMOworICAgICAgICB9CisgICAgICAgIG9wdGluZCA9IDE7CisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlIGdldG9wdCAqLworCisgICAgaWYgKChhcmdjID4gMSkpIHsKKyAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKKyAgICAgICAgZXhpdCgxMDAwKTsKKworICAgIH0gZWxzZSBpZiAoQUxMT1BUSU9OUyAhPSAxKSB7CisgICAgICAgIGRvYWxsdGVzdHMgPSAxOworICAgIH0KKworICAgIGluaXRfc25tcCgidGVzdGluZyIpOworCisgICAgLyoKKyAgICAgKiB0ZXN0IHN0dWZmLgorICAgICAqLworICAgIHJ2YWwgPSBzY19pbml0KCk7CisgICAgRkFJTEVEKHJ2YWwsICJzY19pbml0KCkiKTsKKworCisgICAgaWYgKGRvaGFzaGluZGV4IHx8IGRvYWxsdGVzdHMpIHsKKyAgICAgICAgZmFpbGNvdW50ICs9IHRlc3RfaGFzaGluZGV4KCk7CisgICAgfQorICAgIGlmIChkb2V0aW1ldGVzdCB8fCBkb2FsbHRlc3RzKSB7CisgICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2V0aW1lKCk7CisgICAgfQorCisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIjEuLiVkXG4iLCB0ZXN0Y291bnQpOworICAgIHJldHVybiAwOworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCisKKworCisKKwordm9pZAordXNhZ2UoRklMRSAqIG9mcCkKK3sKKyAgICBmcHJpbnRmKG9mcCwKKyAgICAgICAgICAgIFVTQUdFCisgICAgICAgICAgICAiIiBOTAorICAgICAgICAgICAgIiAgICAtYQkJCUFsbCB0ZXN0cy4iIE5MCisgICAgICAgICAgICAiICAgIC1lCQkJRXhlcmNpc2UgdGhlIGxpc3Qgb2YgZW5naW5ldGltZXMuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLWgJCQlIZWxwLiIKKyAgICAgICAgICAgIE5MCisgICAgICAgICAgICAiICAgIC1ICQkJVGVzdCBoYXNoX2VuZ2luZUlEKCkuIgorICAgICAgICAgICAgTkwKKyAgICAgICAgICAgICIgICAgLXMgPHNlY29uZHM+CVNlY29uZHMgdG8gcGF1c2UuICAoRGVmYXVsdDogMC4pIgorICAgICAgICAgICAgTkwgTkwsIGxvY2FsX3Byb2duYW1lKTsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdXNhZ2UoKSAqLworCisKKworCisjaWZkZWYgRVhBTVBMRQorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZG9zb21ldGhpbmcKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqCisgKiBUZXN0IHRlbXBsYXRlLgorICovCitpbnQKK3Rlc3RfZG9zb21ldGhpbmcodm9pZCkKK3sKKyAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKKworICB0ZXN0X2Rvc29tZXRoaW5nX3F1aXQ6CisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3NvbWV0aGluZygpICovCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KKworCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgorICogdGVzdF9oYXNoaW5kZXgKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqCisgKiBUZXN0IGhhc2hfZW5naW5lSUQoKS4KKyAqLworaW50Cit0ZXN0X2hhc2hpbmRleCh2b2lkKQoreworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBydmFsID0gU05NUEVSUl9TVUNDRVNTLCAgKi8KKyAgICAgICAgICAgICAgICAgICAgZmFpbGNvdW50ID0gMDsKKyAgICBjb25zdCB1X2NoYXIgICAgICpzOworCisgICAgT1VUUFVUKCJWaXN1YWwgc3BvdCBjaGVjayBvZiBoYXNoIGluZGV4IG91dHB1dHMuICAiCisgICAgICAgICAgICIoU3VjY2VzcyBvciBmYWlsdXJlIG5vdCBub3RlZC4pIik7CisKKyAgICBzID0gKGNvbnN0IHVfY2hhciAqKSAiIEEiOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbigoY29uc3QgY2hhciAqKSBzKSkpOworCisgICAgcyA9IChjb25zdCB1X2NoYXIgKikgIiBCQiI7CisgICAgZnByaW50ZihzdGRvdXQsICIjICVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKChjb25zdCBjaGFyICopIHMpKSk7CisKKyAgICBzID0gKGNvbnN0IHVfY2hhciAqKSAiIENDQyI7CisgICAgZnByaW50ZihzdGRvdXQsICIjICVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKChjb25zdCBjaGFyICopIHMpKSk7CisKKyAgICBzID0gKGNvbnN0IHVfY2hhciAqKSAiIEREREQiOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbigoY29uc3QgY2hhciAqKSBzKSkpOworCisgICAgcyA9IChjb25zdCB1X2NoYXIgKikgIiBFRUVFRSI7CisgICAgZnByaW50ZihzdGRvdXQsICIjICVzID0gJWRcbiIsIHMsIGhhc2hfZW5naW5lSUQocywgc3RybGVuKChjb25zdCBjaGFyICopIHMpKSk7CisKKyAgICBzID0gKGNvbnN0IHVfY2hhciAqKSBCTEFUOworICAgIGZwcmludGYoc3Rkb3V0LCAiIyAlcyA9ICVkXG4iLCBzLCBoYXNoX2VuZ2luZUlEKHMsIHN0cmxlbigoY29uc3QgY2hhciAqKSBzKSkpOworCisKKyAgICBPVVRQVVQoIlZpc3VhbCBzcG90IGNoZWNrIC0tIERPTkUuIik7CisKKyAgICByZXR1cm4gZmFpbGNvdW50OworCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2hhc2hpbmRleCgpICovCisKKworCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKKyAqIHRlc3RfZXRpbWUKKyAqCisgKiBSZXR1cm5zOgorICoJTnVtYmVyIG9mIGZhaWx1cmVzLgorICoKKyAqIFRlc3Qgb2YgTENEIEVuZ2luZSBJRCBhbmQgVGltZSBMaXN0LgkKKyAqLworaW50Cit0ZXN0X2V0aW1lKHZvaWQpCit7CisgICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7CisgICAgdV9pbnQgICAgICAgICAgIGV0aW1lLCBlYm9vdDsKKworICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorICAgICAqLworICAgIE9VVFBVVCgiUXVlcnkgb2YgZW1wdHkgbGlzdCwgdHdvIHNldCBhY3Rpb25zLiIpOworCisKKyAgICBydmFsID0gSVNFTkdJTkVLTk9XTigoY29uc3QgdV9jaGFyICopICJBIiwgMSk7CisgICAgaWYgKHJ2YWwgPT0gVFJVRSkgeworICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJRdWVyeSBvZiBlbXB0eSBsaXN0IHJldHVybmVkIFRSVUUuIikKKyAgICB9CisKKworICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgoY29uc3QgdV9jaGFyICopICJCQiIsIDIsIDIsIDIwLCBUUlVFKTsKKyAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkiKTsKKworCisgICAgcnZhbCA9IHNldF9lbmdpbmV0aW1lKChjb25zdCB1X2NoYXIgKikgIkNDQyIsIDMsIDMxLCA5MDEyNywgVFJVRSk7CisgICAgRkFJTEVEKHJ2YWwsICJzZXRfZW5naW5ldGltZSgpIik7CisKKworICAgIFNVQ0NFU1MoIkNoZWNrIG9mIGVtcHR5IGxpc3QsIGFuZCB0d28gYWRkaXRpb25zLiIpOworCisKKworICAgIC8qCisgICAgICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorICAgICAqLworICAgIE9VVFBVVCgiQWRkIGVudHJpZXMgdXNpbmcgbWFjcm9zLCB0ZXN0IGZvciBleGlzdGVuY2Ugd2l0aCBtYWNyb3MuIik7CisKKworICAgIHJ2YWwgPSBFTlNVUkVfRU5HSU5FX1JFQ09SRCgoY29uc3QgdV9jaGFyICopICJEREREIiwgNCk7CisgICAgRkFJTEVEKHJ2YWwsICJFTlNVUkVfRU5HSU5FX1JFQ09SRCgpIik7CisKKworICAgIHJ2YWwgPSBNQUtFTkVXX0VOR0lORV9SRUNPUkQoKGNvbnN0IHVfY2hhciAqKSAiRUVFRUUiLCA1KTsKKyAgICBpZiAocnZhbCA9PSBTTk1QRVJSX1NVQ0NFU1MpIHsKKyAgICAgICAgRkFJTEVEKHJ2YWwsCisgICAgICAgICAgICAgICAiTUFLRU5FV19FTkdJTkVfUkVDT1JEIHJldHVybmVkIHN1Y2Nlc3MgZm9yICIKKyAgICAgICAgICAgICAgICJtaXNzaW5nIHJlY29yZC4iKTsKKyAgICB9CisKKworICAgIHJ2YWwgPSBNQUtFTkVXX0VOR0lORV9SRUNPUkQoKGNvbnN0IHVfY2hhciAqKSAiQkIiLCAyKTsKKyAgICBGQUlMRUQocnZhbCwgIk1BS0VORVdfRU5HSU5FX1JFQ09SRCgpLiIpOworCisKKyAgICBTVUNDRVNTCisgICAgICAgICgiQWRkZWQgZW50cmllcyB3aXRoIG1hY3JvcywgdGVzdGVkIGZvciBleGlzdGVuY2Ugd2l0aCBtYWNyb3MuIik7CisKKworCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisgICAgICovCisgICAgT1VUUFVUKCJEdW1wIHRoZSBsaXN0IGFuZCB0aGVuIHNsZWVwLiIpOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCisgICAgZHVtcF9ldGltZWxpc3QoKTsKKyNlbmRpZgorCisgICAgZnByaW50ZihzdGRvdXQsICIjIFNsZWVwaW5nIGZvciAlZCBzZWNvbmQlcy4uLiAiLAorICAgICAgICAgICAgc2xlZXB0aW1lLCAoc2xlZXB0aW1lID09IDEpID8gIiIgOiAicyIpOworCisgICAgc2xlZXAoc2xlZXB0aW1lKTsKKworCisgICAgLyoKKyAgICAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisgICAgICovCisgICAgT1VUUFVUCisgICAgICAgICgiUmV0cmlldmUgZGF0YSBmcm9tIHJlYWwvc3R1YmJlZCByZWNvcmRzLCB1cGRhdGUgcmVhbC9zdHViYmVkLiIpOworCisKKworICAgIHJ2YWwgPSBnZXRfZW5naW5ldGltZSgoY29uc3QgdV9jaGFyICopICJCQiIsIDIsICZlYm9vdCwgJmV0aW1lLCBUUlVFKTsKKyAgICBGQUlMRUQocnZhbCwgImdldF9lbmdpbmV0aW1lKCkuIik7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgQkIgPSA8JWQsJWQ+XG4iLCBlYm9vdCwgZXRpbWUpOworICAgIGlmICgoZXRpbWUgPCAyMCkgfHwgKGVib290IDwgMikpIHsKKyAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAorICAgICAgICAgICAgICAgImdldF9lbmdpbmV0aW1lKCkgcmV0dXJuZWQgYmFkIHZhbHVlcy4gICgxKSIpOworICAgIH0KKworICAgIHJ2YWwgPSBnZXRfZW5naW5ldGltZSgoY29uc3QgdV9jaGFyICopICJEREREIiwgNCwgJmVib290LCAmZXRpbWUsIEZBTFNFKTsKKyAgICBGQUlMRUQocnZhbCwgImdldF9lbmdpbmV0aW1lKCkuIik7CisKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgRERERCA9IDwlZCwlZD5cbiIsIGVib290LCBldGltZSk7CisgICAgaWYgKChldGltZSA8IHNsZWVwdGltZSkgfHwgKGVib290ICE9IDApKSB7CisgICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKKyAgICAgICAgICAgICAgICJnZXRfZW5naW5ldGltZSgpIHJldHVybmVkIGJhZCB2YWx1ZXMuICAoMikiKTsKKyAgICB9CisKKworICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgoY29uc3QgdV9jaGFyICopICJDQ0MiLCAzLCAyMzQsIDEwMDAwLCBUUlVFKTsKKyAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkuIik7CisKKworICAgIHJ2YWwgPSBzZXRfZW5naW5ldGltZSgoY29uc3QgdV9jaGFyICopICJFRUVFRSIsIDUsIDk4NzYsIDU1NTU1LCBUUlVFKTsKKyAgICBGQUlMRUQocnZhbCwgInNldF9lbmdpbmV0aW1lKCkuIik7CisKKworICAgIFNVQ0NFU1MoIlJldHJpZXZhbCBhbmQgdXBkYXRlcy4iKTsKKworCisKKyAgICAvKgorICAgICAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyAgICAgKi8KKyAgICBPVVRQVVQoIlNsZWVwIGFnYWluLCB0aGVuIGR1bXAgdGhlIGxpc3Qgb25lIGxhc3QgdGltZS4iKTsKKworICAgIGZwcmludGYoc3Rkb3V0LCAiIyBTbGVlcGluZyBmb3IgJWQgc2Vjb25kJXMuLi5cbiIsCisgICAgICAgICAgICBzbGVlcHRpbWUsIChzbGVlcHRpbWUgPT0gMSkgPyAiIiA6ICJzIik7CisKKyAgICBzbGVlcChzbGVlcHRpbWUpOworCisjaWZkZWYgTkVUU05NUF9FTkFCTEVfVEVTVElOR19DT0RFCisgICAgZHVtcF9ldGltZWxpc3QoKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGZhaWxjb3VudDsKKworfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9ldGltZSgpICovCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L05ldFNOTVBUZXN0LnBtIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGFjMDQwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9OZXRTTk1QVGVzdC5wbQpAQCAtMCwwICsxLDE3MiBAQAorcGFja2FnZSBOZXRTTk1QVGVzdDsKKwordXNlIEZpbGU6OlRlbXAgcXcodGVtcGZpbGUgdGVtcGRpcik7Cit1c2UgSU86OkZpbGU7Cit1c2UgRGF0YTo6RHVtcGVyOwordXNlIHN0cmljdDsKKworc3ViIG5ldyB7CisgICAgbXkgJHR5cGUgPSBzaGlmdDsKKyAgICBteSAoJGNsYXNzKSA9IHJlZigkdHlwZSkgfHwgJHR5cGU7CisgICAgbXkgJHNlbGYgPSB7fTsKKyAgICAlJHNlbGYgPSBAXzsKKyAgICBibGVzcygkc2VsZiwgJGNsYXNzKTsKKyAgICAkc2VsZi0+aW5pdCgpOworICAgIHJldHVybiAkc2VsZjsKK30KKworc3ViIGluaXQgeworICAgIG15ICgkc2VsZikgPSBAXzsKKyAgICAkc2VsZi0+eydkaXInfSA9IHRlbXBkaXIoKTsKKyAgICBwcmludCAiIyB1c2luZyB0ZW1wZGlyICRzZWxmLT57ZGlyfVxuIjsKKworICAgIGZvcmVhY2ggbXkgJHN1ZmZpeCAocXcoY29uZiBwaWQgbG9nIG91dCkpIHsKKwkkc2VsZi0+eyJzbm1wZC4kc3VmZml4In0gfHw9ICRzZWxmLT57J2Rpcid9IC4gIi9zbm1wZC4kc3VmZml4IjsKKyAgICB9CisgICAgJHNlbGYtPnsnc25tcC5jb25mJ30gfHw9ICRzZWxmLT57J2Rpcid9IC4gIi9zbm1wLmNvbmYiOworCisgICAgJHNlbGYtPnsnY29uZmRpcid9IHx8PSAkc2VsZi0+eydkaXInfTsKKyAgICAkc2VsZi0+eydwZXJzaXN0ZW50ZGlyJ30gfHw9ICRzZWxmLT57J2Rpcid9IC4gIi9wZXJzaXN0ZW50IjsKK30KKworc3ViIGNvbmZpZ19maWxlIHsKKyAgICBteSAoJHNlbGYsICRmaWxlLCAkc3RyaW5nKSA9IEBfOworICAgIG15ICRmaCA9IG5ldyBJTzo6RmlsZSAoIj4+ICRmaWxlIik7CisgICAgJGZoLT5wcmludCgkc3RyaW5nKTsKKyAgICBpZiAoJHN0cmluZyAhfiAvXG4kLykgeworCSRmaC0+cHJpbnQoIlxuIik7CisgICAgfQorICAgICRmaC0+Y2xvc2UoKTsKK30KKworc3ViIGNvbmZpZ19hZ2VudCB7CisgICAgbXkgKCRzZWxmLCAkc3RyaW5nKSA9IEBfOworICAgICRzZWxmLT5jb25maWdfZmlsZSgkc2VsZi0+eydzbm1wZC5jb25mJ30sICRzdHJpbmcpOworfQorCitzdWIgY29uZmlnX2FwcCB7CisgICAgbXkgKCRzZWxmLCAkc3RyaW5nKSA9IEBfOworICAgICRzZWxmLT5jb25maWdfZmlsZSgkc2VsZi0+eydzbm1wLmNvbmYnfSwgJHN0cmluZyk7Cit9CisKK3N1YiByZXF1aXJlX2ZlYXR1cmUgeworICAgIG15ICgkc2VsZiwgJGZlYXR1cmUpID0gQF87CisgICAgbXkgJHNyY2RpciA9ICRFTlZ7J3NyY2Rpcid9IHx8ICIuLiI7CisgICAgbXkgJGZoID0gbmV3IElPOjpGaWxlKCIkc3JjZGlyL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgiKTsKKyAgICB3aGlsZSAoPCRmaD4pIHsKKwlpZiAoLyNkZWZpbmUgJGZlYXR1cmUgMS8pIHsKKwkgICAgJGZoLT5jbG9zZSgpOworCSAgICByZXR1cm4gMTsKKwl9CisgICAgfQorICAgIHByaW50ICIxLi4wICMgU0tJUCBtaXNzaW5nICRmZWF0dXJlXG4iOworICAgIGV4aXQ7Cit9CisKK3N1YiBzdGFydF9hZ2VudCB7CisgICAgbXkgKCRzZWxmLCAkZmxhZ3MpID0gQF87CisKKyAgICAkZmxhZ3MgfHw9ICRzZWxmLT57J3NubXBkZmxhZ3MnfTsKKworICAgICRFTlZ7J1NOTVBDT05GUEFUSCd9ID0gJHNlbGYtPnsnY29uZmRpcid9OworICAgICRFTlZ7J1NOTVBfUEVSU0lTVEVOVF9ESVInfSA9ICRzZWxmLT57J3BlcmlzdGVudGRpcid9OworCisgICAgbXkgJGNtZCA9ICJzbm1wZCAkZmxhZ3MgLXIgLVUgLXAgJHNlbGYtPnsnc25tcGQucGlkJ30gLUxmICRzZWxmLT57J3NubXBkLmxvZyd9ICRzZWxmLT57J2FnZW50YWRkcmVzcyd9ID4gJHNlbGYtPnsnc25tcGQub3V0J30gMj4mMSI7CisgICAgU3lzdGVtKCIkY21kICYiKTsKKworICAgIHNsZWVwKDEpOworCisgICAgcmV0dXJuICRzZWxmLT53YWl0X2Zvcigkc2VsZi0+eydzbm1wZC5sb2cnfSwgIk5FVC1TTk1QIHZlcnNpb24iKTsKK30KKworc3ViIHN0b3BfYWdlbnQgeworICAgIG15ICgkc2VsZikgPSBAXzsKKyAgICBteSAkcGlkZmlsZSA9IG5ldyBJTzo6RmlsZSAiJHNlbGYtPnsnc25tcGQucGlkJ30iOworICAgIG15ICRwaWQgPSA8JHBpZGZpbGU+OworICAgIGtpbGwoIlRFUk0iLCAkcGlkKTsKKyAgICAkc2VsZi0+d2FpdF9mb3IoJHNlbGYtPnsnc25tcGQubG9nJ30sICdzaHV0dGluZyBkb3duJyk7Cit9CisKKyMgcmV0dXJucyAxIG9uIHN1Y2Nlc3MsIDAgb24gZmFpbHVyZQorc3ViIHdhaXRfZm9yIHsKKyAgICBteSAoJHNlbGYsICRmaWxlbmFtZSwgJHJlZ2V4cCwgJG1heHRpbWUpID0gQF87CisgICAgbXkgJGZoID0gbmV3IElPOjpGaWxlICIkZmlsZW5hbWUiOworICAgIHJldHVybiAwIGlmICghJGZoKTsKKworICAgICRtYXh0aW1lID0gMTAgaWYgKCFkZWZpbmVkKCRtYXh0aW1lKSk7CisKKyAgICBteSAkdGltZWNvdW50ID0gMDsKKyAgICAjIHByaW50ICIjIHJlYWRpbmcgZnJvbTogJGZpbGVuYW1lXG4iOworICAgIHdoaWxlICgxKSB7CisJbXkgJGxpbmUgPSA8JGZoPjsKKwkjIHByaW50ICIjIGxpbmU6ICRsaW5lXG4iOworCWlmICgkbGluZSBlcSAiIikgeworCSAgICBpZiAoJHRpbWVjb3VudCA9PSAkbWF4dGltZSkgeworCQlyZXR1cm4gMDsKKwkgICAgfQorCSAgICBzbGVlcCgxKTsKKwkgICAgcHJpbnQgIiMgc2xlZXBpbmcgLi4uXG4iOworCSAgICAkZmgtPmNsZWFyZXJyKCk7CisJICAgICR0aW1lY291bnQrKzsKKwl9IGVsc2UgeworCSAgICBjaG9tcCgkbGluZSk7CisJICAgIGlmICgkbGluZSA9fiAvJHJlZ2V4cC8pIHsKKwkJcmV0dXJuIDE7CisJICAgIH0KKwl9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdWIgRGVidWcgeworICAgIHByaW50ICAiIyAiIC4gam9pbigiICIsQF8pOworfQorCitzdWIgU3lzdGVtIHsKKyAgICBteSAoJGNtZCkgPSBAXzsKKyAgICBEZWJ1ZygicnVubmluZzogIiwgJGNtZCwgIlxuIik7CisgICAgc3lzdGVtKCRjbWQpOworfQorCitzdWIgRElFIHsKKyAgICBteSAkc2VsZiA9IHNoaWZ0OworICAgICRzZWxmLT5zdG9wX2FnZW50KCk7CisgICAgZGllIEBfOworfQorCisxOworCis9cG9kCisKKz1oZWFkMSBOQU1FCisKK05ldFNOTVBUZXN0IC0gc2ltcGxlIHRlc3RpbmcgbW9kdWxlIGZvciB0ZXN0aW5nIHBlcmwgdGVzdHMKKworPWhlYWQxIFVTQUdFCisKK3VzZSBOZXRTTk1QVGVzdDsKK3VzZSBUZXN0OwordXNlIFNOTVA7CisKK215ICRkZXN0aW5hdGlvbiA9ICJ1ZHA6bG9jYWxob3N0Ojk4NzYiOworCitteSAkdGVzdCA9IG5ldyBOZXRTTk1QVGVzdChhZ2VudGFkZHJlc3MgPT4gJGRlc3RpbmF0aW9uKTsKKworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgiU09NRV9JRkRFRl9GUk9NX05FVF9TTk1QX0NPTkZJR19IIik7CisKKyR0ZXN0LT5jb25maWdfYWdlbnQoInJvY29tbXVuaXR5IHB1YmxpYyIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgic3lzY29udGFjdCB0ZXN0dmFsdWUiKTsKKyR0ZXN0LT5ESUUoImZhaWxlZCB0byBzdGFydCB0aGUgYWdlbnQiKSBpZiAoISR0ZXN0LT5zdGFydF9hZ2VudCgpKTsKKworbXkgJHNlc3Npb24gPSBuZXcgU05NUDo6U2Vzc2lvbihEZXN0SG9zdCA9PiAkZGVzdGluYXRpb24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gPT4gJzJjJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tbXVuaXR5ID0+ICdwdWJsaWMnKTsKKworbXkgJHZhbHVlID0gJHNlc3Npb24tPmdldCgnc3lzQ29udGFjdC4wJyk7CitwbGFuKHRlc3RzID0+IDEpOworb2soJHZhbHVlLCAndGVzdHZhbHVlJyk7CisKKyR0ZXN0LT5zdG9wX2FnZW50KCk7CisKKz1jdXQKKwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfYnVpbGQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9idWlsZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi41NWEzNWFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfYnVpbGQKQEAgLTAsMCArMSw0NiBAQAorIyEvYmluL3NoCisKKyMgYnVpbGQgdGhlIEMgdGVzdCBmaWxlIC4uLgorCitybSAtZiAiJDIuYyIKK2NhdCA+PiIkMi5jIiA8PEVPRgorLyogbmV0LXNubXAgc3RhbmRhcmQgaGVhZGVycyAqLworI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL25ldC1zbm1wLWluY2x1ZGVzLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvYWdlbnQvbmV0LXNubXAtYWdlbnQtaW5jbHVkZXMuaD4KKworLyogdGVzdGluZyBzcGVjaWZpYyBoZWFkZXIgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3Rlc3RpbmcuaD4KKworLyogc3RhbmRhcmQgaGVhZGVycyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKworaW50CittYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsKKworRU9GCitlY2hvID4+IiQyLmMiICIjbGluZSAxIFwiJDFcIiIKK2NhdCA+PiIkMi5jIiAiJDEiCitjYXQgPj4iJDIuYyIgPDxFT0YKKworICAgaWYgKF9fZGlkX3BsYW4gPT0gMCkgeworICAgICAgIFBMQU4oX190ZXN0X2NvdW50ZXIpOworICAgfQorCisgICByZXR1cm4oMCk7Cit9CisKK0VPRgorCisjIC4uLiBhbmQgY29tcGlsZSBpdC4KKyR7YnVpbGRkaXJ9L2xpYnRvb2wgLS1tb2RlPWxpbmsgYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWJ1aWxkLWNvbW1hbmRgIC1JJGJ1aWxkZGlyL2luY2x1ZGUgLUkkc3JjZGlyL2luY2x1ZGUgLW8gJDIgJDIuYyAke2J1aWxkZGlyfS9zbm1wbGliL2xpYm5ldHNubXAubGEgJHtidWlsZGRpcn0vYWdlbnQvbGlibmV0c25tcGFnZW50LmxhIGAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1leHRlcm5hbC1saWJzYAorZWNobyAkMgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfcnVuIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYWdlbnRsaWJfcnVuCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjg0ZjU0ZTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NhZ2VudGxpYl9ydW4KQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKyR7RFlOQU1JQ19BTkFMWVpFUn0gJHtidWlsZGRpcn0vbGlidG9vbCAtLW1vZGU9ZXhlY3V0ZSAiJDEiIDI+JjEgXAorfCBcCitpZiBbICJ4JFNOTVBfU0FWRV9UTVBESVIiID0gInh5ZXMiIF07IHRoZW4KKyAgdGVlICIvdG1wL3NubXAtdW5pdC10ZXN0LWBiYXNlbmFtZSAkMWAiCitlbHNlCisgIGNhdAorZmkKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9idWlsZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5kYzAzOGM2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX2J1aWxkCkBAIC0wLDAgKzEsNCBAQAorIyEvYmluL3NoCisKKyR7YnVpbGRkaXJ9L2xpYnRvb2wgLS1tb2RlPWxpbmsgYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWJ1aWxkLWNvbW1hbmRgIC1JJGJ1aWxkZGlyL2luY2x1ZGUgLUkkc3JjZGlyL2luY2x1ZGUgLW8gJDIgJDEgJHtidWlsZGRpcn0vc25tcGxpYi9saWJuZXRzbm1wLmxhIGAke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWcgLS1leHRlcm5hbC1saWJzYAorZWNobyAkMgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jYXBwX3J1biBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9ydW4KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uODRmNTRlMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2FwcF9ydW4KQEAgLTAsMCArMSw4IEBACisjIS9iaW4vc2gKKyR7RFlOQU1JQ19BTkFMWVpFUn0gJHtidWlsZGRpcn0vbGlidG9vbCAtLW1vZGU9ZXhlY3V0ZSAiJDEiIDI+JjEgXAorfCBcCitpZiBbICJ4JFNOTVBfU0FWRV9UTVBESVIiID0gInh5ZXMiIF07IHRoZW4KKyAgdGVlICIvdG1wL3NubXAtdW5pdC10ZXN0LWBiYXNlbmFtZSAkMWAiCitlbHNlCisgIGNhdAorZmkKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvY2xpYl9idWlsZApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mOTRiZWJkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX2J1aWxkCkBAIC0wLDAgKzEsNzQgQEAKKyMhL2Jpbi9zaAorCisjIGJ1aWxkIHRoZSBDIHRlc3QgZmlsZSAuLi4KKworc2NyaXB0bmFtZT0iJDAiCitpZiBbICIke3NjcmlwdG5hbWUjL30iID0gIiR7c2NyaXB0bmFtZX0iIF07IHRoZW4KKyAgICBzY3JpcHRuYW1lPSIke1BXRH0vJHtzY3JpcHRuYW1lfSIKK2ZpCitzY3JpcHRkaXI9IiQoZGlybmFtZSAke3NjcmlwdG5hbWV9KSIKK3NyY2Rpcj0iJChkaXJuYW1lICQoZGlybmFtZSAkKGRpcm5hbWUgJHNjcmlwdGRpcikpKSIKKworcm0gLWYgIiQyLmMiCitjYXQgPj4iJDIuYyIgPDxFT0YKKy8qIG5ldC1zbm1wIHN0YW5kYXJkIGhlYWRlcnMgKi8KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvbGFyZ2VfZmRfc2V0Lmg+CisKKy8qIHRlc3Rpbmcgc3BlY2lmaWMgaGVhZGVyICovCisjaW5jbHVkZSA8bmV0LXNubXAvbGlicmFyeS90ZXN0aW5nLmg+CisKKy8qIHN0YW5kYXJkIGhlYWRlcnMgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWZkZWYgSEFWRV9MSU1JVFNfSAorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9TVERMSUJfSAorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2VuZGlmCisjaWYgSEFWRV9TVFJJTkdfSAorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxzdHJpbmdzLmg+CisjZW5kaWYKKyNpZmRlZiBIQVZFX05FVERCX0gKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9BUlBBX0lORVRfSAorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2VuZGlmCisjaWZkZWYgSEFWRV9ORVRJTkVUX0lQNl9ICisjaW5jbHVkZSA8bmV0aW5ldC9pcDYuaD4KKyNlbmRpZgorI2lmbmRlZiBIQVZFX0lORVRfUFRPTgorI2luY2x1ZGUgInNubXBsaWIvaW5ldF9wdG9uLmgiCisjZW5kaWYKKyNpZm5kZWYgSEFWRV9JTkVUX05UT1AKKyNpbmNsdWRlICJzbm1wbGliL2luZXRfbnRvcC5oIgorI2VuZGlmCisKKyNkZWZpbmUgQUJTX1NSQ0RJUiAiJHtzcmNkaXJ9IgorCitpbnQKK21haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkgeworCitFT0YKK2VjaG8gPj4iJDIuYyIgIiNsaW5lIDEgXCIkMVwiIgorY2F0ID4+IiQyLmMiICIkMSIKK2NhdCA+PiIkMi5jIiA8PEVPRgorCisgICBpZiAoX19kaWRfcGxhbiA9PSAwKSB7CisgICAgICAgUExBTihfX3Rlc3RfY291bnRlcik7CisgICB9CisKKyAgIHJldHVybigwKTsKK30KKworRU9GCisKKyMgLi4uIGFuZCBjb21waWxlIGl0LgorJHtidWlsZGRpcn0vbGlidG9vbCAtLW1vZGU9bGluayBgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tYnVpbGQtY29tbWFuZGAgLUkkYnVpbGRkaXIvaW5jbHVkZSAtSSRzcmNkaXIgLUkkc3JjZGlyL2luY2x1ZGUgLW8gJDIgJDIuYyAke2J1aWxkZGlyfS9zbm1wbGliL2xpYm5ldHNubXAubGEgYCR7YnVpbGRkaXJ9L25ldC1zbm1wLWNvbmZpZyAtLWV4dGVybmFsLWxpYnNgCitlY2hvICQyCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L2NsaWJfcnVuIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX3J1bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44NGY1NGUxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9jbGliX3J1bgpAQCAtMCwwICsxLDggQEAKKyMhL2Jpbi9zaAorJHtEWU5BTUlDX0FOQUxZWkVSfSAke2J1aWxkZGlyfS9saWJ0b29sIC0tbW9kZT1leGVjdXRlICIkMSIgMj4mMSBcCit8IFwKK2lmIFsgIngkU05NUF9TQVZFX1RNUERJUiIgPSAieHllcyIgXTsgdGhlbgorICB0ZWUgIi90bXAvc25tcC11bml0LXRlc3QtYGJhc2VuYW1lICQxYCIKK2Vsc2UKKyAgY2F0CitmaQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2ggYi90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9URVNUQ09ORi5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTBhOGFmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfVEVTVENPTkYuc2gKQEAgLTAsMCArMSwyNjQgQEAKKyMhIC9iaW4vc2ggLWYKKworIworIyBWYXJpYWJsZXM6ICAoKiA9IGV4cG9ydGVkKQorIyAgKlNOTVBfVE1QRElSOiAgCSAgcGxhY2UgdG8gcHV0IGZpbGVzIHVzZWQgaW4gdGVzdGluZy4KKyMgICBTTk1QX1RFU1RESVI6IAkgIHdoZXJlIHRoZSB0ZXN0IHNjcmlwdHMgYXJlIGtlcHQuCisjICAqU05NUF9QRVJTSVNURU5UX0ZJTEU6IHdoZXJlIHRvIHN0b3JlIHRoZSBhZ2VudCdzIHBlcnNpc3RlbnQgaW5mb3JtYXRpb24KKyMgICAgICAgICAgICAgICAgICAgICAgICAgKFhYWDogdGhpcyBzaG91bGQgYmUgc3BlY2lmaWMgdG8ganVzdCB0aGUgYWdlbnQpCisKKyMgTWluR1cvTVNZUyBvbmx5OiB0cmFuc2xhdGUgYW4gTVNZUyBwYXRoIGJhY2sgaW50byBhIERPUyBwYXRoIHN1Y2ggdGhhdCBzbm1wZAorIyBhbmQgdGhlIE5ldC1TTk1QIGFwcGxpY2F0aW9ucyBjYW4gdW5kZXJzdGFuZCBpdC4gT25lIG9mIHRoZSBmZWF0dXJlcyBvZiBNU1lTCisjIGlzIHRoYXQgaWYgYSBQT1NJWC1zdHlsZSBwYXRoIGlzIHBhc3NlZCBhcyBhIGNvbW1hbmQtbGluZSBhcmd1bWVudCB0byBhbgorIyBleGVjdXRhYmxlIHRoYXQgTVNZUyB0cmFuc2xhdGVzIHRoYXQgcGF0aCB0byBhIERPUy1zdHlsZSBwYXRoIGJlZm9yZQorIyBzdGFydGluZyB0aGUgZXhlY3V0YWJsZS4gVGhpcyBpcyBhIGtleSBmZWF0dXJlIG9mIE1TWVMgdGhhdCBtYWtlcyBpdAorIyBwb3NzaWJsZSB0byBydW4gc2hlbGwgc2NyaXB0cyB1bm1vZGlmaWVkIGFuZCBhdCB0aGUgc2FtZSB0aW1lIHRvIHVzZQorIyBleGVjdXRhYmxlcyB0aGF0IGFjY2VwdCBET1Mtc3R5bGUgcGF0aHMuIFRoZXJlIGlzIG5vIHN1cHBvcnQgaG93ZXZlciBmb3IKKyMgYXV0b21hdGljYWwgdHJhbnNsYXRpb24gb2YgZW52aXJvbm1lbnQgdmFyaWFibGVzIHRoYXQgY29udGFpbiBwYXRocy4gSGVuY2UKKyMgdGhpcyBmdW5jdGlvbiB0aGF0IHRyYW5zbGF0ZXMgcGF0aHMgZXhwbGljaXRseS4KK3RyYW5zbGF0ZV9wYXRoKCkgeworICBpZiBbICIkT1NUWVBFIiA9IG1zeXMgXTsgdGhlbgorICAgIGxvY2FsIHQ9YHNldCBcCisgICAgICAgICAgICAgfCBzZWQgLW4gLWUgInMvXiQxPSdcKC4qXCknJC8ke1NOTVBfRU5WX1NFUEFSQVRPUn1cMS9wIiBcCisgICAgICAgICAgICAgICAgICAgICAgLWUgInMvXiQxPVwoLipcKSQvJHtTTk1QX0VOVl9TRVBBUkFUT1J9XDEvcCIgXAorICAgICAgICAgICAgIHwgc2VkIC1lICJzfCR7U05NUF9FTlZfU0VQQVJBVE9SfS9jL3wke1NOTVBfRU5WX1NFUEFSQVRPUn1jOi98ZyIgXAorICAgICAgICAgICAgICAgICAgIC1lICJzfCR7U05NUF9FTlZfU0VQQVJBVE9SfS90bXAvfCR7U05NUF9FTlZfU0VQQVJBVE9SfWM6L3dpbmRvd3MvdGVtcC98ZyIgXAorICAgICAgICAgICAgIHwgc2VkIC1lICJzL14ke1NOTVBfRU5WX1NFUEFSQVRPUn0vLyIgXAorICAgICAgICAgICAgYAorICAgIGV2YWwgIiQxPSckdCciCisgIGZpCit9CisKKyMKKyMgT25seSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmUgZXZhbCdlZCBvbmNlCisjCitpZiBbICJ4JFRFU1RDT05GX1NIX0VWQUxFRCIgIT0gInh5ZXMiIF07IHRoZW4KKyAgICBURVNUQ09ORl9TSF9FVkFMRUQ9eWVzCisKKyMKKyMgc2V0IGNwdSBhbmQgbWVtb3J5IGxpbWl0cyB0byBwcmV2ZW50IG1ham9yIGRhbWFnZQorIworIyBkZWZhdWx0czogMWggQ1BVLCA1MDBNQiBWTUVNCisjCitbICJ4JFNOTVBfTElNSVRfVk1FTSIgPSAieCIgXSAmJiBTTk1QX0xJTUlUX1ZNRU09NTEyMDAwCitbICJ4JFNOTVBfTElNSVRfQ1BVIiA9ICJ4IiBdICYmIFNOTVBfTElNSVRfQ1BVPTM2MDAKKyMgdWxpbWl0IHdpbGwgZmFpbCBpZiBleGlzdGluZyBsaW1pdCBpcyBsb3dlciAtLSBpZ25vcmUgYmVjYXVzZSBpdCdzIG9rCit1bGltaXQgLVMgLXQgJFNOTVBfTElNSVRfQ1BVIDI+L2Rldi9udWxsCisjIG5vdCBhbGwgc2gtYWxpa2VzIHN1cHBvcnQgInVsaW1pdCAtdiIgLS0gcGxheSBzYWZlCitbICJ4JEJBU0hfVkVSU0lPTiIgIT0gIngiIF0gJiYgdWxpbWl0IC1TIC12ICRTTk1QX0xJTUlUX1ZNRU0gMj4vZGV2L251bGwKKworIworIyBTZXQgdXAgYW4gTkwgc3VwcHJlc3NpbmcgZWNobyBjb21tYW5kCisjCitjYXNlICJgZWNobyAneFxjJ2AiIGluCisgICd4XGMnKQorICAgIEVDSE8oKSB7IGVjaG8gLW4gJCo7IH0KKyAgICA7OworICB4KQorICAgIEVDSE8oKSB7IGVjaG8gJCpcXGM7IH0KKyAgICA7OworICAqKQorICAgIGVjaG8gIkkgZG9uJ3QgdW5kZXJzdGFuZCB5b3VyIGVjaG8gY29tbWFuZCAuLi4iCisgICAgZXhpdCAxCisgICAgOzsKK2VzYWMKKyMKKyMgaG93IHZlcmJvc2Ugc2hvdWxkIHdlIGJlICgwIG9yIDEpCisjCitpZiBbICJ4JFNOTVBfVkVSQk9TRSIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfVkVSQk9TRT0wCisgICAgZXhwb3J0IFNOTVBfVkVSQk9TRQorZmkKKworU05NUF9FTlZfU0VQQVJBVE9SPSJgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tZW52LXNlcGFyYXRvcmAiCisKK2lmIFsgIngkTUlCRElSUyIgPSAieCIgXTsgdGhlbgorICBpZiBbICJ4JFNOTVBfUFJFRkVSX05FQVJfTUlCUyIgPSAieDEiIF07IHRoZW4KKyAgICBNSUJESVJTPSR7c3JjZGlyfS9taWJzCisgICAgZXhwb3J0IE1JQkRJUlMKKyAgZmkKK2ZpCisKKyMgU2V0IHVwIHRoZSBwYXRoIHRvIHRoZSBwcm9ncmFtcyB3ZSB3YW50IHRvIHVzZS4KK2lmIFsgIngkU05NUF9QQVRIIiA9ICJ4IiBdOyB0aGVuCisgICAgUEFUSD0ke2J1aWxkZGlyfS9hZ2VudDoke2J1aWxkZGlyfS9hcHBzOiRQQVRICisgICAgZXhwb3J0IFBBVEgKKyAgICBTTk1QX1BBVEg9eWVzCisgICAgZXhwb3J0IFNOTVBfUEFUSAorZmkKKworIyBtYWtlIHN1cmUgdGhhdCB3ZSBjYW4gZnVsZmlsbCBhbGwgbGlicmFyeSBkZXBlbmRlbmNpZXMKK19sZF9saWJfcGF0aD0iJHtTTk1QX1VQRElSfS9zbm1wbGliLy5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC9oZWxwZXJzLy5saWJzIgorY2FzZSBgdW5hbWVgIGluCisgIENZR1dJTiopCisgICAgUEFUSD0iJHtfbGRfbGliX3BhdGh9OiRQQVRIIgorICAgIGV4cG9ydCBQQVRICisgICAgOzsKKyAgRGFyd2luKikKKyAgICBpZiBbICJ4JERZTERfTElCUkFSWV9QQVRIIiAhPSAieCIgXTsgdGhlbgorICAgICAgRFlMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke0RZTERfTElCUkFSWV9QQVRIfSIKKyAgICBlbHNlCisgICAgICBEWUxEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgorICAgIGZpCisgICAgZXhwb3J0IERZTERfTElCUkFSWV9QQVRICisgICAgOzsKKyAgSFAtVVgqKQorICAgIGlmIFsgIngkU0hMSUJfUEFUSCIgIT0gIngiIF07IHRoZW4KKyAgICAgIFNITElCX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke1NITElCX1BBVEh9IgorICAgIGVsc2UKKyAgICAgIFNITElCX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKKyAgICBmaQorICAgIGV4cG9ydCBTSExJQl9QQVRICisgICAgOzsKKyAgKikKKyAgICBpZiBbICJ4JExEX0xJQlJBUllfUEFUSCIgIT0gIngiIF07IHRoZW4KKyAgICAgIExEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7TERfTElCUkFSWV9QQVRIfSIKKyAgICBlbHNlCisgICAgICBMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKKyAgICBmaQorICAgIGV4cG9ydCBMRF9MSUJSQVJZX1BBVEgKKyAgICA7OworZXNhYworCisjIFNldCB1cCB0ZW1wb3JhcnkgZGlyZWN0b3J5CitpZiBbICJ4JFNOTVBfSEVBREVST05MWSIgIT0gInh5ZXMiIF07IHRoZW4KKyAgaWYgWyAieCRTTk1QX1RNUERJUiIgPSAieCIgXTsgdGhlbgorICAgIGlmIFsgIngkdGVzdG51bSIgPSAieCIgXSA7IHRoZW4KKyAgICAgICAgdGVzdG51bT0wCisgICAgZmkKKyAgICBTTk1QX1RNUERJUj0iL3RtcC9zbm1wLXRlc3QtJHRlc3RudW0tJCQiCisgICAgdHJhbnNsYXRlX3BhdGggU05NUF9UTVBESVIKKyAgICBleHBvcnQgU05NUF9UTVBESVIKKyAgICBpZiBbIC1kICRTTk1QX1RNUERJUiBdOyB0aGVuCisJZWNobyAiJDA6IEVSUk9SOiAkU05NUF9UTVBESVIgYWxyZWFkeSBleGlzdGVkLiIKKwlleGl0IDE7CisgICAgZmkKKyAgZmkKKyAgaWYgWyAhIC1kICRTTk1QX1RNUERJUiBdOyB0aGVuCisgICAgbWtkaXIgLXAgJFNOTVBfVE1QRElSCisgICAgY2htb2QgMDcwMCAkU05NUF9UTVBESVIKKyAgZmkKKyAgaWYgWyAieCRTTk1QX1RNUF9QRVJTSVNURU5URElSIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9UTVBfUEVSU0lTVEVOVERJUj0kU05NUF9UTVBESVIvcGVyc2lzdAorICAgIGV4cG9ydCBTTk1QX1RNUF9QRVJTSVNURU5URElSCisgIGZpCisgIGlmIFsgISAtZCAkU05NUF9UTVBfUEVSU0lTVEVOVERJUiBdOyB0aGVuCisgICAgbWtkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKKyAgICBjaG1vZCAwNzAwICRTTk1QX1RNUF9QRVJTSVNURU5URElSCisgIGZpCitmaQorCitpZiBbICJ4JFNOTVBfU0FWRV9UTVBESVIiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX1NBVkVfVE1QRElSPSJubyIKKyAgICBleHBvcnQgU05NUF9TQVZFX1RNUERJUgorZmkKKworU05NUF9JR05PUkVfV0lORE9XU19SRUdJU1RSWT0idHJ1ZSIKK2V4cG9ydCBTTk1QX0lHTk9SRV9XSU5ET1dTX1JFR0lTVFJZCitTTk1QX1BFUkxQUk9HPSJgJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIC0tcGVybHByb2dgIgorU05NUF9URVNURElSPSIkU05NUF9CQVNFRElSL3Rlc3RzIgorU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3NubXBkLmNvbmYiCitTTk1QVFJBUERfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wdHJhcGQuY29uZiIKK1NOTVBBUFBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wLmNvbmYiCitBR0VOVFhfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9hZ2VudHguY29uZiIKK1NOTVBfU05NUFRSQVBEX0xPR19GSUxFPSIkU05NUF9UTVBESVIvc25tcHRyYXBkLmxvZyIKK1NOTVBfU05NUFRSQVBEX1BJRF9GSUxFPSIkU05NUF9UTVBESVIvc25tcHRyYXBkLnBpZCIKK1NOTVBfU05NUERfUElEX0ZJTEU9IiRTTk1QX1RNUERJUi9zbm1wZC5waWQiCitTTk1QX1NOTVBEX0xPR19GSUxFPSIkU05NUF9UTVBESVIvc25tcGQubG9nIgorU05NUF9BR0VOVFhfUElEX0ZJTEU9IiRTTk1QX1RNUERJUi9hZ2VudHgucGlkIgorU05NUF9BR0VOVFhfTE9HX0ZJTEU9IiRTTk1QX1RNUERJUi9hZ2VudHgubG9nIgorU05NUENPTkZQQVRIPSIke1NOTVBfVE1QRElSfSR7U05NUF9FTlZfU0VQQVJBVE9SfSR7U05NUF9UTVBfUEVSU0lTVEVOVERJUn0iCit0cmFuc2xhdGVfcGF0aCBTTk1QQ09ORlBBVEgKK2V4cG9ydCBTTk1QQ09ORlBBVEgKK1NOTVBfUEVSU0lTVEVOVF9ESVI9JFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKK3RyYW5zbGF0ZV9wYXRoIFNOTVBfUEVSU0lTVEVOVF9ESVIKK2V4cG9ydCBTTk1QX1BFUlNJU1RFTlRfRElSCisjU05NUF9QRVJTSVNURU5UX0ZJTEU9IiRTTk1QX1RNUF9QRVJTSVNURU5URElSL3BlcnNpc3RlbnQtc3RvcmUuY29uZiIKKyNleHBvcnQgU05NUF9QRVJTSVNURU5UX0ZJTEUKKworIyMgU2V0dXAgZGVmYXVsdCBmbGFncyBhbmQgcG9ydHMgaWZmIG5vdCBkb25lCitpZiBbICJ4JFNOTVBfRkxBR1MiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX0ZMQUdTPSItZCIKK2ZpCitpZiB0ZXN0IC14IC9iaW4vbmV0c3RhdCA7IHRoZW4KKyAgICBORVRTVEFUPS9iaW4vbmV0c3RhdAorZWxpZiB0ZXN0IC14IC91c3IvYmluL25ldHN0YXQgOyB0aGVuCisgICAgTkVUU1RBVD0vdXNyL2Jpbi9uZXRzdGF0CitlbGlmIHRlc3QgLXggL3Vzci9zYmluL25ldHN0YXQgOyB0aGVuCisgICAgIyBlLmcuIFRydTY0IFVuaXgKKyAgICBORVRTVEFUPS91c3Ivc2Jpbi9uZXRzdGF0CitlbGlmIHRlc3QgLXggL3Vzci9ldGMvbmV0c3RhdCA7IHRoZW4KKyAgICAjIGUuZy4gSVJJWAorICAgIE5FVFNUQVQ9L3Vzci9ldGMvbmV0c3RhdAorZWxpZiB0ZXN0IC14IC9jeWdkcml2ZS9jL3dpbmRvd3Mvc3lzdGVtMzIvbmV0c3RhdCA7IHRoZW4KKyAgICAjIEN5Z3dpbgorICAgIE5FVFNUQVQ9L2N5Z2RyaXZlL2Mvd2luZG93cy9zeXN0ZW0zMi9uZXRzdGF0CitlbGlmIHRlc3QgLXggL2MvV2luZG93cy9TeXN0ZW0zMi9uZXRzdGF0IDsgdGhlbgorICAgICMgTWluR1cgKyBNU1lTCisgICAgTkVUU1RBVD0vYy9XaW5kb3dzL1N5c3RlbTMyL25ldHN0YXQKK2Vsc2UKKyAgICBORVRTVEFUPSIiCitmaQorCitpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICAjIE9idGFpbiB0aGUgTVNZUyBpbnN0YWxsYXRpb24gcGF0aCBmcm9tIHRoZSAhQzogZW52aXJvbm1lbnQgdmFyaWFibGUsCisgICAgIyByZW1vdmUgc3Vycm91bmRpbmcgc2luZ2xlIHF1b3RlcyBhbmQgY29udmVydCBiYWNrc2xhc2hlcyBpbnRvIGZvcndhcmQKKyAgICAjIHNsYXNoZXMuCisgICAgTVNZU19QQVRIPSIkKHNldCBcCisgICAgICAgICAgICAgICAgIHwgc2VkIC1uICdzfF5cIUM6PSciJyInXCguKlwpJyInIickfFwxfHAnIHwgc2VkICdzfFxcfC98ZycpIgorICAgIE1TWVNfU0g9IiRNU1lTX1BBVEgvc2guZXhlIgorZmkKKworUFJPQkVfRk9SX1BPUlQoKSB7CisgICAgQkFTRV9QT1JUPSQxCisgICAgTUFYX1JFVFJJRVM9MTAKKyAgICBpZiB0ZXN0IC14ICIkTkVUU1RBVCIgOyB0aGVuCisgICAgICAgIGlmIHRlc3QgLXogIiRSQU5ET00iOyB0aGVuCisgICAgICAgICAgICBSQU5ET009MgorICAgICAgICBmaQorICAgICAgICB3aGlsZSA6CisgICAgICAgIGRvCisgICAgICAgICAgICBCQVNFX1BPUlQ9YGV4cHIgJEJBU0VfUE9SVCArIFwoICRSQU5ET00gJSAxMDAgXClgCisgICAgICAgICAgICBJTl9VU0U9YCRORVRTVEFUIC1hIC1uIDI+L2Rldi9udWxsIHwgZ3JlcCAiW1wuOl0kQkFTRV9QT1JUICJgCisgICAgICAgICAgICBpZiBbICQ/IC1uZSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICIkQkFTRV9QT1JUIgorICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICBmaQorICAgICAgICAgICAgTUFYX1JFVFJJRVM9YGV4cHIgJE1BWF9SRVRSSUVTIC0gMWAKKyAgICAgICAgICAgIGlmIFsgJE1BWF9SRVRSSUVTIC1lcSAwIF07IHRoZW4KKyAgICAgICAgICAgICAgICBlY2hvICJFUlJPUjogQ291bGQgbm90IGZpbmQgYXZhaWxhYmxlIHBvcnQuIiA+JjIKKyAgICAgICAgICAgICAgICBlY2hvICJOT1BPUlQiCisgICAgICAgICAgICAgICAgZXhpdCAyNTUKKyAgICAgICAgICAgIGZpCisgICAgICAgIGRvbmUKKyAgICBlbHNlCisJZWNobyAiRVJST1I6IENhbm5vdCBwcm9iZSBmb3IgcG9ydCAtIG5ldHN0YXQgbm90IGZvdW5kLiIgPiYyCisJZWNobyAiTk9QT1JUIgorCWV4aXQgMjU1CisgICAgZmkKK30KKworaWYgWyAieCRTTk1QX1NOTVBEX1BPUlQiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX1NOTVBEX1BPUlQ9YFBST0JFX0ZPUl9QT1JUIDg3NjVgCitmaQoraWYgWyAieCRTTk1QX1NOTVBUUkFQRF9QT1JUIiA9ICJ4IiBdOyB0aGVuCisgICAgU05NUF9TTk1QVFJBUERfUE9SVD1gUFJPQkVfRk9SX1BPUlQgNTY3OGAKK2ZpCitpZiBbICJ4JFNOTVBfQUdFTlRYX1BPUlQiID0gIngiIF07IHRoZW4KKyAgICBTTk1QX0FHRU5UWF9QT1JUPWBQUk9CRV9GT1JfUE9SVCA3Njc2YAorZmkKK2lmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieCIgXTt0aGVuCisJU05NUF9UUkFOU1BPUlRfU1BFQz0idWRwIgorZmkKK2lmIFsgIngkU05NUF9URVNUX0RFU1QiID0gIngiIC1hICRTTk1QX1RSQU5TUE9SVF9TUEVDICE9ICJ1bml4IiBdO3RoZW4KKwlTTk1QX1RFU1RfREVTVD0iMTI3LjAuMC4xOiIKK2ZpCitleHBvcnQgU05NUF9GTEFHUyBTTk1QX1NOTVBEX1BPUlQgU05NUF9TTk1QVFJBUERfUE9SVAorCisjIE1ha2Ugc3VyZSB0aGUgYWdlbnQgZG9lc24ndCBwYXJzZSBhbnkgY29uZmlnIGZpbGUgYnV0IHdoYXQgd2UgZ2l2ZSBpdC4gIAorIyB0aGlzIGlzIG1haW5seSB0byBwcm90ZWN0IGFnYWluc3QgYSBicm9rZW4gYWdlbnQgdGhhdCBkb2Vzbid0CisjIHByb3Blcmx5IGhhbmRsZSBjb21iaW5hdGlvbnMgb2YgLWMgYW5kIC1DLiAgKHNpbmNlIEkndmUgYnJva2UgaXQgYmVmb3JlKS4KKyNTTk1QQ09ORlBBVEg9IiRTTk1QX1RNUERJUi9kb2VzLW5vdC1leGlzdCIKKyNleHBvcnQgU05NUENPTkZQQVRICisKK2ZpICMgT25seSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmUgZXZhbCdlZCBvbmNlCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MThlZGM0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaApAQCAtMCwwICsxLDcwOCBAQAorIworIyBldmFsX3Rvb2xzLnNoCisjCisjIE91dHB1dCBmdW5jdGlvbnMgZm9yIHNjcmlwdCB0ZXN0cy4gIFNvdXJjZSB0aGlzIGZyb20gb3RoZXIgdGVzdCBzY3JpcHRzCisjIHRvIGVzdGFibGlzaCBhIHN0YW5kYXJkaXplZCByZXBlcnRvcnkgb2YgdGVzdCBmdW5jdGlvbnMuCisjCisjCisjIEV4Y2VwdCB3aGVyZSBub3RlZCwgYWxsIGZ1bmN0aW9ucyByZXR1cm46CisjCTAJT24gc3VjY2VzcywJKEJvdXJuZSBTaGVsbCdzIGBgdHJ1ZScnKQorIwlub24tMAlPdGhlcndpc2UuCisjCisjIElucHV0IGFyZ3VtZW50cyB0byBlYWNoIGZ1bmN0aW9uIGFyZSBkb2N1bWVudGVkIHdpdGggZWFjaCBmdW5jdGlvbi4KKyMKKyMKKyMgWFhYICBTdWdnZXN0aW9uczoKKyMJREVCVUcgT058T0ZGCisjCWR1bXAgQ0FQVFVSRSBvdXRwdXQgdG8gc3Rkb3V0IGFzIHdlbGwgYXMgdG8ganVua291dHB1dGZpbGUuCisjCisKKyMKKyMgT25seSBhbGxvdyBvdXJzZWx2ZXMgdG8gYmUgZXZhbCdlZCBvbmNlCisjCitpZiBbICJ4JEVWQUxfVE9PTFNfU0hfRVZBTEVEIiAhPSAieHllcyIgXTsgdGhlbgorICAgIEVWQUxfVE9PTFNfU0hfRVZBTEVEPXllcworCisjCisjIFZhcmlhYmxlcyB1c2VkIGluIGdsb2JhbCBlbnZpcm9ubWVudCBvZiBjYWxsaW5nIHNjcmlwdC4KKyMKK2ZhaWxjb3VudD0wCit0ZXN0bnVtPTAKK2Vycm51bT0wCitqdW5rb3V0cHV0ZmlsZWJhc2U9IiRTTk1QX1RNUERJUi9vdXRwdXQtYGJhc2VuYW1lICQwYCQkIgoranVua291dHB1dGZpbGU9JGp1bmtvdXRwdXRmaWxlYmFzZQorb3V0cHV0Y291bnQ9MAorc2VwYXJhdG9yPSItPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09IgoraWYgWyAteiAiJE9LX1RPX1NBVkVfUkVTVUxUIiBdIDsgdGhlbgorT0tfVE9fU0FWRV9SRVNVTFQ9MQorZXhwb3J0IE9LX1RPX1NBVkVfUkVTVUxUCitmaQorCitpZiBbIGB1bmFtZSAtc2AgPSBTdW5PUyBdCit0aGVuIFBBVEg9L3Vzci94cGc0L2JpbjokUEFUSAorZmkKKworIworIyBIRUFERVI6IHJldHVybnMgYSBzaW5nbGUgbGluZSB3aGVuIFNOTVBfSEVBREVST05MWSBtb2RlIGFuZCBleGl0cy4KKyMKK0hFQURFUigpIHsKKyAgICBpZiBbICJ4JFNOTVBfSEVBREVST05MWSIgIT0gIngiIF07IHRoZW4KKyAgICAgICAgZWNobyB0ZXN0ICQqCisJZXhpdCAwOworICAgIGVsc2UKKwl7IGVjaG8gIiMgdGVzdGluZyAkKiI7IGVjaG8gIiI7IH0gPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKyAgICBmaQorfQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitPVVRQVVQoKSB7CSMgPGFueV9hcmd1bWVudHM+CisJY2F0IDw8R1JPTksKKworCiskKgorCisKK0dST05LCit9CisKK0NBTl9VU0xFRVAoKSB7CisgICBpZiBbICIkU05NUF9DQU5fVVNMRUVQIiA9IDAgLW8gIiRTTk1QX0NBTl9VU0xFRVAiID0gMSBdIDsgdGhlbgorICAgICByZXR1cm4gMAorICAgZmkKKyAgIHNsZWVwIC4xID4gL2Rldi9udWxsIDI+JjEKKyAgIGlmIFsgJD8gPSAwIF0gOyB0aGVuCisgICAgIFNOTVBfQ0FOX1VTTEVFUD0xCisgICBlbHNlCisgICAgIFNOTVBfQ0FOX1VTTEVFUD0wCisgICBmaQorICAgZXhwb3J0IFNOTVBfQ0FOX1VTTEVFUAorfQorCisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjCitTVUNDRVNTKCkgewkjIDxhbnlfYXJndW1lbnRzPgorCVsgIiRmYWlsY291bnQiIC1uZSAwIF0gJiYgcmV0dXJuCisJY2F0IDw8R1JPSU5LCisKK1NVQ0NFU1M6ICQqCisKK0dST0lOSworfQorCisKKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK0ZBSUxFRCgpIHsJIyA8cmV0dXJuX3ZhbHVlPiwgPGFueV9hcmd1bWVudHM+CisJWyAiJDEiIC1lcSAwIF0gJiYgcmV0dXJuCisJc2hpZnQKKworCWZhaWxjb3VudD1gZXhwciAkZmFpbGNvdW50ICsgMWAKKwljYXQgPDxHUk9OSUsKKworRkFJTEVEOiAkKgorCitHUk9OSUsKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1NLSVAoKSB7CisJUkVNT1ZFVEVTVERBVEEKKwllY2hvICIxLi4wICMgU0tJUCAkKiIKKwlleGl0IDAKK30KKworSVNERUZJTkVEKCkgeworCWdyZXAgIl4jZGVmaW5lICQxICIgJHtidWlsZGRpcn0vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAke2J1aWxkZGlyfS9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggJHtidWlsZGRpcn0vaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9hZ2VudF9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwKK30KKworU0tJUElGTk9UKCkgeworCUlTREVGSU5FRCAiJDEiIHx8IFNLSVAgIiQxIGlzIG5vdCBkZWZpbmVkIgorfQorCitTS0lQSUYoKSB7CisJSVNERUZJTkVEICIkMSIgJiYgU0tJUCAiJDEgaXMgZGVmaW5lZCIKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1ZFUklGWSgpIHsJIyA8cGF0aF90b19maWxlKHMpPgorCW1pc3NpbmdmaWxlcz0iIgorCisJZm9yIGYgaW4gJCo7IGRvCisJCVsgLWYgIiRmIiBdICYmIGNvbnRpbnVlCisJCWVjaG8gIkZBSUxFRDogQ2Fubm90IGZpbmQgZmlsZSBcIiRmXCIuIgorCQltaXNzaW5nZmlsZXM9dHJ1ZQorCWRvbmUKKworCVsgIiRtaXNzaW5nZmlsZXMiID0gdHJ1ZSBdICYmIGV4aXQgMTAwMAorfQorCitORVdPVVRQVVRGSUxFKCkgeworICAgICAgICBvdXRwdXRjb3VudD1gZXhwciAkb3V0cHV0Y291bnQgKyAxYAorICAgICAgICBqdW5rb3V0cHV0ZmlsZT0iJHtqdW5rb3V0cHV0ZmlsZWJhc2V9LSRvdXRwdXRjb3VudCIKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1NUQVJUVEVTVCgpIHsKKyAgICAgICAgTkVXT1VUUFVURklMRQorCVsgISAtZiAiJGp1bmtvdXRwdXRmaWxlIiBdICYmIHsKKwkJdG91Y2ggJGp1bmtvdXRwdXRmaWxlCisJCXJldHVybgorCX0KKwllY2hvICJGQUlMRUQ6IE91dHB1dCBmaWxlIGFscmVhZHkgZXhpc3RzOiBcIiRqdW5rb3V0cHV0ZmlsZVwiLiIKKwlleGl0IDEwMDAKK30KKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworU1RPUFRFU1QoKSB7CisJcm0gLWYgIiRqdW5rb3V0cHV0ZmlsZSIKK30KKworCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworUkVNT1ZFVEVTVERBVEEoKSB7CisjCUVDSE8gInJlbW92aW5nICRTTk1QX1RNUERJUiAgIgorCXJtIC1yZiAkU05NUF9UTVBESVIKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK09VVFBVVEVOVlZBUlMoKSB7CisgICAgZWNobyAiU05NUENPTkZQQVRIPSRTTk1QQ09ORlBBVEgiID4+ICQxCisgICAgZWNobyAiU05NUF9QRVJTSVNURU5UX0RJUj0kU05NUF9QRVJTSVNURU5UX0RJUiIgPj4gJDEKKyAgICBlY2hvICJNSUJESVJTPSRNSUJESVJTIiA+PiAkMQorICAgIGVjaG8gIlBBVEg9JFBBVEgiID4+ICQxCisgICAgZWNobyAiZXhwb3J0IFNOTVBDT05GUEFUSCIgPj4gJDEKKyAgICBlY2hvICJleHBvcnQgU05NUF9QRVJTSVNURU5UX0RJUiIgPj4gJDEKKyAgICBlY2hvICJleHBvcnQgTUlCRElSUyIgPj4gJDEKKyAgICBlY2hvICJleHBvcnQgUEFUSCIgPj4gJDEKK30KKyAgICAKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjIENhcHR1cmVzIG91dHB1dCBmcm9tIGNvbW1hbmQsIGFuZCByZXR1cm5zIHRoZSBjb21tYW5kJ3MgZXhpdCBjb2RlLgorbG9nZ2VkdmFycz0wCitDQVBUVVJFKCkgewkjIDxjb21tYW5kX3dpdGhfYXJndW1lbnRzX3RvX2V4ZWN1dGU+CisgICAgTkVXT1VUUFVURklMRQorCisgICAgIyB0cmFjayBpbnZva2VkIGNvbW1hbmQgcGVyIHRlc3Qgd2hlbiB2ZXJib3NlCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KKyAgICAgICAgT1VUUFVURU5WVkFSUyAkanVua291dHB1dGZpbGUuaW52b2tlZAorICAgICAgICBlY2hvICQqID4+ICRqdW5rb3V0cHV0ZmlsZS5pbnZva2VkCisgICAgZmkKKworICAgIGlmIFsgJGxvZ2dlZHZhcnMgPSAwIF07IHRoZW4KKyAgICAgICAgT1VUUFVURU5WVkFSUyAkU05NUF9UTVBESVIvaW52b2tlZAorICAgICAgICBsb2dnZWR2YXJzPTEKKyAgICBmaQorICAgIGVjaG8gJCogPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKworCWlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMCBdOyB0aGVuCisJCWNhdCA8PEtOT1JHCisKK0VYRUNVVElORzogJCoKKworS05PUkcKKworCWZpCisJZWNobyAiUlVOTklORzogJCoiID4gJGp1bmtvdXRwdXRmaWxlCisJKCAkKiAyPiYxICkgPj4gJGp1bmtvdXRwdXRmaWxlIDI+JjEKKwlSQz0kPworCisJaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KKwkJZWNobyAiQ29tbWFuZCBPdXRwdXQ6ICIKKwkJZWNobyAiTUlCRElSICRNSUJESVJTICRNSUJTIgorCQllY2hvICIkc2VwYXJhdG9yIgorCQljYXQgJGp1bmtvdXRwdXRmaWxlIHwgc2VkICdzL14vICAvJworCQllY2hvICIkc2VwYXJhdG9yIgorCWZpCisJcmV0dXJuICRSQworfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIyBEZWxheSB0byBsZXQgcHJvY2Vzc2VzIHNldHRsZQorREVMQVkoKSB7CisgICAgaWYgWyAiJFNOTVBfU0xFRVAiICE9ICIwIiBdIDsgdGhlbgorCXNsZWVwICRTTk1QX1NMRUVQCisgICAgZmkKK30KKworU0FWRV9SRVNVTFRTKCkgeworICAgcmVhbF9yZXR1cm5fdmFsdWU9JHJldHVybl92YWx1ZQorfQorCisjCisjIENoZWNrcyB0aGUgb3V0cHV0IHJlc3VsdCBhZ2FpbnN0IHdoYXQgd2UgZXhwZWN0LgorIyAgIFNldHMgcmV0dXJuX3ZhbHVlIHRvIDAgb3IgMS4KKyMKK0VYUEVDVFJFU1VMVCgpIHsKKyAgaWYgWyAkT0tfVE9fU0FWRV9SRVNVTFQgLW5lIDAgXSA7IHRoZW4KKyAgICBpZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9ICIkMSIgXTsgdGhlbgorCXJldHVybl92YWx1ZT0wCisgICAgZWxzZQorCXJldHVybl92YWx1ZT0xCisgICAgZmkKKyAgZmkKK30KKworQ0hFQ0tDT1VOVCgpIHsKKyAgIENIRUNLRklMRUNPVU5UICIkanVua291dHB1dGZpbGUiICRACit9CisKK0NIRUNLVkFMVUVJUygpIHsKKyAgICB2YWx1ZTE9JDEKKyAgICB2YWx1ZTI9JDIKKyAgICBpZiBbICJ4JHZhbHVlMSIgPSAieCR2YWx1ZTIiIF07IHRoZW4KKyAgICAgIEdPT0QgIiQzIgorICAgIGVsc2UKKyAgICAgIEJBRCAiJDMiCisgICAgZmkKK30KKworQ0hFQ0tWQUxVRUlTTlQoKSB7CisgICAgdmFsdWUxPSQxCisgICAgdmFsdWUyPSQyCisgICAgaWYgWyAieCR2YWx1ZTEiID0gIngkdmFsdWUyIiBdOyB0aGVuCisgICAgICBCQUQgIiQzIgorICAgIGVsc2UKKyAgICAgIEdPT0QgIiQzIgorICAgIGZpCit9CisKKyMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tCisjIFJldHVybnM6IENvdW50IG9mIG1hdGNoZWQgbGluZXMuCisjCitDSEVDS0ZJTEVDT1VOVCgpIHsJIyA8cGF0dGVybl90b19tYXRjaD4KKyAgICBjaGtmaWxlPSQxCisgICAgY2tmY291bnQ9JDIKKyAgICBzaGlmdAorICAgIHNoaWZ0CisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KKwllY2hvIC1uICJjaGVja2luZyAkY2hrZmlsZSBmb3IgJGNrZmNvdW50IFwiJCpcIi4uLiIKKyAgICBmaQorCisgICAgaWYgWyAtZiAkY2hrZmlsZSBdOyB0aGVuCisJcnZhbD1gZ3JlcCAtYyAiJCoiICIkY2hrZmlsZSIgMj4vZGV2L251bGxgCisgICAgZWxzZQorICAgICAgICBDT01NRU5UICJOb3RlOiBmaWxlICRjaGtmaWxlIGRvZXMgbm90IGV4aXN0IGFuZCB3ZSB3ZXJlIGFza2VkIHRvIGNoZWNrIGl0IgorCXJ2YWw9MAorICAgIGZpCisKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgorCWVjaG8gIiRydmFsIG1hdGNoZXMgZm91bmQiCisgICAgZmkKKworICAgIHNubXBfbGFzdF90ZXN0X3Jlc3VsdD0kcnZhbAorICAgIEVYUEVDVFJFU1VMVCAkY2tmY291bnQgICMgZGVmYXVsdAorICAgIGlmIFsgIiRja2Zjb3VudCIgIT0gIm5vZXJyb3IiIF07IHRoZW4KKyAgICAgIGlmIFsgIiRja2Zjb3VudCIgPSAiYXRsZWFzdG9uZSIgXTsgdGhlbgorICAgICAgICBpZiBbICIkcnZhbCIgLW5lICIwIiBdOyB0aGVuCisgICAgICAgICAgICBHT09EICJmb3VuZCAkY2tmY291bnQgY29waWVzIG9mICckKicgaW4gb3V0cHV0ICgkY2hrZmlsZSk7IG5lZWRlZCBvbmUiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIEJBRCAiZm91bmQgJHJ2YWwgY29waWVzIG9mICckKicgaW4gb3V0cHV0ICgkY2hrZmlsZSk7IGV4cGVjdGVkIDEiCisgICAgICAgICAgICBDT01NRU5UICJPdXRwdXRmaWxlOiAkY2hrZmlsZSIKKyAgICAgICAgZmkKKyAgICAgIGVsc2UKKyAgICAgICAgaWYgWyAiJHJ2YWwiID0gIiRja2Zjb3VudCIgXTsgdGhlbgorICAgICAgICAgICBHT09EICJmb3VuZCAkY2tmY291bnQgY29waWVzIG9mICckKicgaW4gb3V0cHV0ICgkY2hrZmlsZSkiCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgQkFEICJmb3VuZCAkcnZhbCBjb3BpZXMgb2YgJyQqJyBpbiBvdXRwdXQgKCRjaGtmaWxlKTsgZXhwZWN0ZWQgJGNrZmNvdW50IgorICAgICAgICAgICBDT01NRU5UICJPdXRwdXRmaWxlOiAkY2hrZmlsZSIKKyAgICAgICAgZmkKKyAgICAgIGZpCisgICAgZmkKKyAgICByZXR1cm4gJHJ2YWwKK30KKworQ0hFQ0soKSB7CisgICAgQ0hFQ0tDT1VOVCAxICRACit9CisKK0NIRUNLRklMRSgpIHsKKyAgICBmaWxlPSQxCisgICAgc2hpZnQKKyAgICBDSEVDS0ZJTEVDT1VOVCAkZmlsZSAxICRACit9CisKK0NIRUNLVFJBUEQoKSB7CisgICAgQ0hFQ0tGSUxFICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRSAkQAorfQorCitDSEVDS1RSQVBEQ09VTlQoKSB7CisgICAgY291bnQ9JDEKKyAgICBzaGlmdAorICAgIENIRUNLRklMRUNPVU5UICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRSAkY291bnQgJEAKK30KKworQ0hFQ0tUUkFQRE9SRElFKCkgeworICAgIENIRUNLT1JESUUgJEAgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCit9CisKK0NIRUNLQUdFTlQoKSB7CisgICAgQ0hFQ0tGSUxFICRTTk1QX1NOTVBEX0xPR19GSUxFICRACit9CisKK0NIRUNLQUdFTlRDT1VOVCgpIHsKKyAgICBjb3VudD0kMQorICAgIHNoaWZ0CisgICAgQ0hFQ0tGSUxFQ09VTlQgJFNOTVBfU05NUERfTE9HX0ZJTEUgJGNvdW50ICRACit9CisKKyMgUmV0dXJuIDAgKHRydWUpIGlmIGEgcHJvY2VzcyB3aXRoIHBpZCAkMSBleGlzdHMgYW5kIDEgKGZhbHNlKSBpZiBubyBwcm9jZXNzCisjIHdpdGggcGlkICQxIGV4aXN0cy4KK0lTUlVOTklORygpIHsKKyAgICBpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKwlwc2xpc3QuZXhlICIkMSIgMj4mMSB8IHdoaWxlIHJlYWQgbmFtZSBwc3BpZCByZXN0OyBkbworCSAgICBpZiBbICIkMSIgPSAiJHBzcGlkIiBdOyB0aGVuCisJCXJldHVybiAwCisJICAgIGZpCisJZG9uZQorCXJldHVybiAxCisgICAgZWxzZQorICAgICAgICBraWxsIC0wICIkMSIgMj4vZGV2L251bGwKKyAgICBmaQorfQorCisjIEVjaG8gYSBjb21tYW5kIHRoYXQgYXNrcyB0aGUgcHJvY2VzcyB3aXRoIHBpZCAkMSB0byBzdG9wLgorRUNIT1NFTkRTSUdURVJNKCkgeworICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgICAgICBlY2hvIHBza2lsbC5leGUgJDEKKyAgICBlbHNlCisgICAgICAgIGVjaG8ga2lsbCAtVEVSTSAkMQorICAgIGZpCit9CisKKyMgRWNobyBhIGNvbW1hbmQgdGhhdCBzdG9wcyB0aGUgcHJvY2VzcyB3aXRoIHBpZCAkMSBmb3JjaWJseS4KK0VDSE9TRU5EU0lHS0lMTCgpIHsKKyAgICBpZiBbICJ4JE9TVFlQRSIgPSAieG1zeXMiIF07IHRoZW4KKyAgICAgICAgZWNobyBwc2tpbGwuZXhlICQxCisgICAgZWxzZQorICAgICAgICBlY2hvIGtpbGwgLUtJTEwgJDEKKyAgICBmaQorfQorCisjIFdhaXQgdW50aWwgdGhlIHNoZWxsIHN0YXRlbWVudCAiJEAiIGV2YWx1YXRlcyB0byBmYWxzZS4KK1dBSVRGT1JOT1RDT05EKCkgeworICAgIENBTl9VU0xFRVAKKyAgICBpZiBbICRTTk1QX0NBTl9VU0xFRVAgPSAxIF0gOyB0aGVuCisgICAgICAgIHNsZWVwdGltZT1gZXhwciAkU05NUF9TTEVFUCAnKicgNTBgCisgICAgZWxzZSAKKyAgICAgICAgc2xlZXB0aW1lPWBleHByICRTTk1QX1NMRUVQICcqJyA1YAorICAgIGZpCisgICAgd2hpbGUgWyAkc2xlZXB0aW1lIC1ndCAwIF0gJiYgZXZhbCAiJEAiOyBkbworICAgICAgICBpZiBbICRTTk1QX0NBTl9VU0xFRVAgPSAxIF07IHRoZW4KKyAgICAgICAgICAgIHNsZWVwIC4xCisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNsZWVwIDEKKyAgICAgICAgZmkKKyAgICAgICAgc2xlZXB0aW1lPWBleHByICRzbGVlcHRpbWUgLSAxYAorICAgIGRvbmUKK30KKworIyBXYWl0IHVudGlsIHRoZSBzaGVsbCBzdGF0ZW1lbnQgIiRAIiBldmFsdWF0ZXMgdG8gdHJ1ZS4KK1dBSVRGT1JDT05EKCkgeworICAgIFdBSVRGT1JOT1RDT05EIGlmICIkQDsiIHRoZW4gZmFsc2UgIjsiIGVsc2UgdHJ1ZSAiOyIgZmkKK30KKworV0FJVEZPUkFHRU5UKCkgeworICAgIFdBSVRGT1IgIiRAIiAkU05NUF9TTk1QRF9MT0dfRklMRQorICAgIGlmIFsgJFNOTVBfQ0FOX1VTTEVFUCA9IDEgXTsgdGhlbgorICAgICAgICBzbGVlcCAuMQorICAgIGVsc2UKKyAgICAgICAgc2xlZXAgMQorICAgIGZpCit9CisKK1dBSVRGT1JUUkFQRCgpIHsKKyAgICBXQUlURk9SICIkQCIgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCisgICAgaWYgWyAkU05NUF9DQU5fVVNMRUVQID0gMSBdOyB0aGVuCisgICAgICAgIHNsZWVwIC4xCisgICAgZWxzZQorICAgICAgICBzbGVlcCAxCisgICAgZmkKK30KKworIyBXYWl0IHVudGlsIHBhdHRlcm4gIiQxIiBhcHBlYXJzIGluIGZpbGUgIiQyIi4KK1dBSVRGT1IoKSB7CisgICAgV0FJVEZPUkNPTkQgZ3JlcCAiJDEiICIkMiIgIj4vZGV2L251bGwiICIyPiYxIgorfQorCitHT09EKCkgeworICAgIHRlc3RudW09YGV4cHIgJHRlc3RudW0gKyAxYAorICAgIGVjaG8gIm9rICR0ZXN0bnVtIC0gJDEiCisgICAgZWNobyAiIyBvayAkdGVzdG51bSAtICQxIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorfQorCitCQUQoKSB7CisgICAgdGVzdG51bT1gZXhwciAkdGVzdG51bSArIDFgCisgICAgZXJybnVtPWBleHByICRlcnJudW0gKyAxYAorICAgIGVjaG8gIm5vdCBvayAkdGVzdG51bSAtICQxIgorICAgIGVjaG8gIiMgbm90IG9rICR0ZXN0bnVtIC0gJDEiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCit9CisKK0NPTU1FTlQoKSB7CisgICAgZWNobyAiIyAkQCIKKyAgICBlY2hvICIjICRAIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorfQorCisjIENIRUNLT1JESUUgImdyZXAgc3RyaW5nIiBbImZpbGUiXSAuLiBGQUlMIGlmICJncmVwIHN0cmluZyIgaXMgKm5vdCogZm91bmQKK0NIRUNLT1JESUUoKSB7CisgICAgaWYgWyAieCQyIiA9ICJ4IiBdOyB0aGVuCisgICAgICBDSEVDS0ZJTEUgIiRqdW5rb3V0cHV0ZmlsZSIgIiQxIgorICAgIGVsc2UKKyAgICAgIENIRUNLRklMRUNPVU5UICIkMiIgMSAiJDEiCisgICAgZmkKK30KKworIyBDSEVDS0FORERJRSAiZ3JlcCBzdHJpbmciIFsiZmlsZSJdIC4uIEZBSUwgaWYgImdyZXAgc3RyaW5nIiAqaXMqIGZvdW5kCitDSEVDS0FORERJRSgpIHsKKyAgICBpZiBbICJ4JDIiID0gIngiIF07IHRoZW4KKyAgICAgIENIRUNLRklMRUNPVU5UICIkanVua291dHB1dGZpbGUiIDAgIiQxIgorICAgIGVsc2UKKyAgICAgIENIRUNLRklMRUNPVU5UICIkMiIgMCAiJDEiCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMgUmV0dXJuczogQ291bnQgb2YgbWF0Y2hlZCBsaW5lcy4KKyMKK0NIRUNLRVhBQ1QoKSB7CSMgPHBhdHRlcm5fdG9fbWF0Y2hfZXhhY3RseT4KKwlydmFsPWBlZ3JlcCAtYyAiXiQqXCR8XiQqW15hLXpBLVowLTlfXXxbXmEtekEtWjAtOV9dJCpcJHxbXmEtekEtWjAtOV9dJCpbXmEtekEtWjAtOV9dIiAiJGp1bmtvdXRwdXRmaWxlIiAyPi9kZXYvbnVsbGAKKwlzbm1wX2xhc3RfdGVzdF9yZXN1bHQ9JHJ2YWwKKwlFWFBFQ1RSRVNVTFQgMSAgIyBkZWZhdWx0CisJcmV0dXJuICRydmFsCit9CisKK0NPTkZJR0FHRU5UKCkgeworICAgIGlmIFsgIngkU05NUF9DT05GSUdfRklMRSIgPSAieCIgXTsgdGhlbgorCWVjaG8gIiQwOiBmYWlsZWQgYmVjYXVzZSB2YXI6IFNOTVBfQ09ORklHX0ZJTEUgd2Fzbid0IHNldCIKKwlleGl0IDE7CisgICAgZmkKKyAgICBlY2hvICQqID4+ICRTTk1QX0NPTkZJR19GSUxFCit9CisKK0NPTkZJR1RSQVBEKCkgeworICAgIGlmIFsgIngkU05NUFRSQVBEX0NPTkZJR19GSUxFIiA9ICJ4IiBdOyB0aGVuCisJZWNobyAiJDA6IGZhaWxlZCBiZWNhdXNlIHZhcjogU05NUFRSQVBEX0NPTkZJR19GSUxFIHdhc24ndCBzZXQiCisJZXhpdCAxOworICAgIGZpCisgICAgZWNobyAkKiA+PiAkU05NUFRSQVBEX0NPTkZJR19GSUxFCit9CisKK0NPTkZJR0FQUCgpIHsKKyAgICBpZiBbICJ4JFNOTVBBUFBfQ09ORklHX0ZJTEUiID0gIngiIF07IHRoZW4KKwllY2hvICIkMDogZmFpbGVkIGJlY2F1c2UgdmFyOiBTTk1QQVBQX0NPTkZJR19GSUxFIHdhc24ndCBzZXQiCisJZXhpdCAxOworICAgIGZpCisgICAgZWNobyAkKiA+PiAkU05NUEFQUF9DT05GSUdfRklMRQorfQorCisjCisjIGNvbW1vbiB0byBTVEFSVEFHRU5UIGFuZCBTVEFSVFRSQVBECisjIGxvZyBjb21tYW5kIHRvICJpbnZva2VkIiBmaWxlCisjCitTVEFSVFBST0coKSB7CisgICAgaWYgWyAieCREWU5BTUlDX0FOQUxZWkVSIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBDT01NQU5EPSIkRFlOQU1JQ19BTkFMWVpFUiAkQ09NTUFORCIKKyAgICBmaQorICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgMSBdOyB0aGVuCisJZWNobyAiJENGR19GSUxFIGNvbnRhaW5zOiAiCisJaWYgWyAtZiAkQ0ZHX0ZJTEUgXTsgdGhlbgorCSAgICBjYXQgJENGR19GSUxFCisJZWxzZQorCSAgICBlY2hvICJbbm8gY29uZmlnIGZpbGVdIgorCWZpCisgICAgZmkKKyAgICBpZiB0ZXN0IC1mICRDRkdfRklMRTsgdGhlbgorCUNPTU1BTkQ9IiRDT01NQU5EIC1DIC1jICRDRkdfRklMRSIKKyAgICBmaQorICAgIGlmIFsgIngkUE9SVF9TUEVDIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBDT01NQU5EPSIkQ09NTUFORCAkUE9SVF9TUEVDIgorICAgIGZpCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAwIF07IHRoZW4KKwllY2hvICJydW5uaW5nOiAkQ09NTUFORCIKKyAgICBmaQorICAgIGVjaG8gJENPTU1BTkQgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDAgXTsgdGhlbgorICAgICAgICBPVVRQVVRFTlZWQVJTICRMT0dfRklMRS5jb21tYW5kCisgICAgICAgIGVjaG8gJENPTU1BTkQgPj4gJExPR19GSUxFLmNvbW1hbmQKKyAgICBmaQorICAgIGlmIFsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXTsgdGhlbgorICAgICAgJENPTU1BTkQgPiAkTE9HX0ZJTEUuc3Rkb3V0IDI+JjEgJgorICAgICAgIyMgQ09NTUFORD0iY21kLmV4ZSAvL2Mgc3RhcnQgLy9taW4gJENPTU1BTkQiCisgICAgICAjIyBzdGFydCAkQ09NTUFORCA+ICRMT0dfRklMRS5zdGRvdXQgMj4mMQorICAgIGVsc2UKKyAgICAgICRDT01NQU5EID4gJExPR19GSUxFLnN0ZG91dCAyPiYxCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KK1NUQVJUQUdFTlQoKSB7CisgICAgU05NUERTVEFSVEVEPTEKKyAgICBDT01NQU5EPSJzbm1wZCAkU05NUF9GTEFHUyAtciAtVSAtcCAkU05NUF9TTk1QRF9QSURfRklMRSAtTGYgJFNOTVBfU05NUERfTE9HX0ZJTEUgJEFHRU5UX0ZMQUdTIgorICAgIENGR19GSUxFPSRTTk1QX0NPTkZJR19GSUxFCisgICAgTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUKKyAgICBQT1JUX1NQRUM9IiRTTk1QX1NOTVBEX1BPUlQiCisgICAgaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBQT1JUX1NQRUM9IiR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1BPUlRfU1BFQ30iCisgICAgZmkKKyAgICBTVEFSVFBST0cKKyAgICBXQUlURk9SQ09ORCB0ZXN0IC1mICRTTk1QX1NOTVBEX1BJRF9GSUxFCisgICAgV0FJVEZPUkFHRU5UICJORVQtU05NUC52ZXJzaW9uIgorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorU1RBUlRUUkFQRCgpIHsKKyAgICBUUkFQRFNUQVJURUQ9MQorICAgIENPTU1BTkQ9InNubXB0cmFwZCAtZCAtcCAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUgLUxmICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRSAkVFJBUERfRkxBR1MiCisgICAgQ0ZHX0ZJTEU9JFNOTVBUUkFQRF9DT05GSUdfRklMRQorICAgIExPR19GSUxFPSRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRQorICAgIFBPUlRfU1BFQz0iJFNOTVBfU05NUFRSQVBEX1BPUlQiCisgICAgaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiAhPSAieCIgXTsgdGhlbgorICAgICAgICBQT1JUX1NQRUM9IiR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1BPUlRfU1BFQ30iCisgICAgZmkKKyAgICBTVEFSVFBST0cKKyAgICBXQUlURk9SQ09ORCB0ZXN0IC1mICRTTk1QX1NOTVBUUkFQRF9QSURfRklMRQorICAgIFdBSVRGT1JUUkFQRCAiTkVULVNOTVAudmVyc2lvbiIKK30KKworIyMgc2VuZGluZyBTSUdIVVAgZm9yIHJlY29uZmlndXJhdGlvbgorIworSFVQUFJPRygpIHsKKyAgICBpZiBbIC1mICQxIF07IHRoZW4KKyAgICAgICAgaWYgWyAieCRPU1RZUEUiID0gInhtc3lzIiBdOyB0aGVuCisgICAgICAgICAgQ09NTUFORD0nZWNobyAiU2tpcHBpbmcgU0lHSFVQIChub3QgcG9zc2libGUgd2l0aCBNaW5HVykiJworICAgICAgICBlbHNlCisgICAgICAgICAgQ09NTUFORD0ia2lsbCAtSFVQIGBjYXQgJDFgIgorICAgICAgICBmaQorCWVjaG8gJENPTU1BTkQgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKwlWRVJCT1NFX09VVCAwICRDT01NQU5ECisJJENPTU1BTkQgPiAvZGV2L251bGwgMj4mMQorICAgIGZpCit9CisKK0hVUEFHRU5UKCkgeworICAgIEhVUFBST0cgJFNOTVBfU05NUERfUElEX0ZJTEUKKyAgICBpZiBbICJ4JE9TVFlQRSIgIT0gInhtc3lzIiBdOyB0aGVuCisgICAgICAgIFdBSVRGT1JBR0VOVCAicmVzdGFydGVkIgorICAgIGZpCit9CisKK0hVUFRSQVBEKCkgeworICAgIEhVUFBST0cgJFNOTVBfU05NUFRSQVBEX1BJRF9GSUxFCisgICAgaWYgWyAieCRPU1RZUEUiICE9ICJ4bXN5cyIgXTsgdGhlbgorICAgICAgICBXQUlURk9SVFJBUEQgInJlc3RhcnRlZCIKKyAgICBmaQorfQorCisKKyMjIHVzZWQgYnkgU1RPUEFHRU5UIGFuZCBTVE9QVFJBUEQKKyMgZGVsYXkgYmVmb3JlIGtpbGwgdG8gYWxsb3cgcHJldmlvdXMgYWN0aW9uIHRvIGZpbmlzaAorIyAgICB0aGlzIGlzIGVzcGVjaWFsbHkgaW1wb3J0YW50IGZvciBpbnRlcmFjdGlvbiBiZXR3ZWVuCisjICAgIG1hc3RlciBhZ2VudCBhbmQgc3ViIGFnZW50LgorU1RPUFBST0coKSB7CisgICAgcGlkPSJgY2F0ICQxIDI+L2Rldi9udWxsYCIKKyAgICBpZiBbICJ4JHBpZCIgIT0gIngiIF07IHRoZW4KKwlDT01NQU5EPSJgRUNIT1NFTkRTSUdURVJNICRwaWRgIgorCWVjaG8gIiRDT01NQU5EICgkMSkiID4+ICRTTk1QX1RNUERJUi9pbnZva2VkCisJVkVSQk9TRV9PVVQgMCAiJENPTU1BTkQgKCQxKSIKKyAgICAgICAgJENPTU1BTkQgPi9kZXYvbnVsbCAyPiYxCisgICAgICAgIFdBSVRGT1JOT1RDT05EICJJU1JVTk5JTkcgJHBpZCIKKyAgICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworU1RPUEFHRU5UKCkgeworICAgIFNBVkVfUkVTVUxUUworICAgIFNUT1BQUk9HICRTTk1QX1NOTVBEX1BJRF9GSUxFCisgICAgaWYgWyAkU05NUF9WRVJCT1NFIC1ndCAxIF07IHRoZW4KKwllY2hvICJBZ2VudCBPdXRwdXQ6IgorCWVjaG8gIiRzZXBhcmF0b3IgW3N0ZG91dF0iCisJY2F0ICRTTk1QX1NOTVBEX0xPR19GSUxFLnN0ZG91dAorCWVjaG8gIiRzZXBhcmF0b3IgW2xvZ2ZpbGVdIgorCWNhdCAkU05NUF9TTk1QRF9MT0dfRklMRQorCWVjaG8gIiRzZXBhcmF0b3IiCisgICAgZmkKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1NUT1BUUkFQRCgpIHsKKyAgICBTQVZFX1JFU1VMVFMKKyAgICBTVE9QUFJPRyAkU05NUF9TTk1QVFJBUERfUElEX0ZJTEUKKyAgICBpZiBbICRTTk1QX1ZFUkJPU0UgLWd0IDEgXTsgdGhlbgorCWVjaG8gInNubXB0cmFwZCBPdXRwdXQ6IgorCWVjaG8gIiRzZXBhcmF0b3IgW3N0ZG91dF0iCisJY2F0ICRTTk1QX1NOTVBUUkFQRF9MT0dfRklMRS5zdGRvdXQKKwllY2hvICIkc2VwYXJhdG9yIFtsb2dmaWxlXSIKKwljYXQgJFNOTVBfU05NUFRSQVBEX0xPR19GSUxFCisJZWNobyAiJHNlcGFyYXRvciIKKyAgICBmaQorfQorCisjLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLQorIworRklOSVNIRUQoKSB7CisKKyAgICAjIyBubyBtb3JlIGNoYW5nZXMgdG8gdGVzdCByZXN1bHQuCisgICAgT0tfVE9fU0FWRV9SRVNVTFQ9MAorCisgICAgcGlkcz0iYGNhdCAkU05NUF9UTVBESVIvKnBpZCogMj4vZGV2L251bGxgIgorICAgIGlmIFsgIiRTTk1QRFNUQVJURUQiID0gIjEiIF0gOyB0aGVuCisgICAgICBTVE9QQUdFTlQKKyAgICBmaQorICAgIGlmIFsgIiRUUkFQRFNUQVJURUQiID0gIjEiIF0gOyB0aGVuCisgICAgICBTVE9QVFJBUEQKKyAgICBmaQorICAgIGZvciBwaWQgaW4gJHBpZHM7IGRvCisgICAgICAgIGlmIElTUlVOTklORyAkcGlkOyB0aGVuCisJICAgIFNOTVBfU0FWRV9UTVBESVI9eWVzCisJICAgIENPTU1BTkQ9ImBFQ0hPU0VORFNJR0tJTEwgJHBpZGAiCisJICAgIGVjaG8gIiRDT01NQU5EICgkcGZpbGUpIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorCSAgICBWRVJCT1NFX09VVCAwICIkQ09NTUFORCAoJHBmaWxlKSIKKwkgICAgJENPTU1BTkQgPiAvZGV2L251bGwgMj4mMQorCSAgICByZXR1cm5fdmFsdWU9MQorCWZpCisgICAgZG9uZQorCisgICAgIyByZXBvcnQgdGhlIG51bWJlciBvZiB0ZXN0cyBkb25lCisgICAgR09PRCAiZ290IHRvIEZJTklTSEVEIgorICAgIGVjaG8gIjEuLiR0ZXN0bnVtIgorCisgICAgaWYgWyAieCRlcnJudW0iICE9ICJ4MCIgXTsgdGhlbgorCWlmIFsgLXMgY29yZSBdIDsgdGhlbgorCSAgICAjIFhYIGhvcGUgdGhhdCBvbmx5IG9uZSBwcm9nIGNvcmVzICEKKwkgICAgY3AgY29yZSAkU05NUF9UTVBESVIvY29yZS4kJAorCSAgICBybSAtZiBjb3JlCisJZmkKKwllY2hvICIkaGVhZGVyU3RyLi4uRkFJTCIgPj4gJFNOTVBfVE1QRElSL2ludm9rZWQKKwlleGl0IDEKKyAgICBmaQorCisgICAgZWNobyAiJGhlYWRlclN0ci4uLm9rIiA+PiAkU05NUF9UTVBESVIvaW52b2tlZAorCisgICAgaWYgWyAieCRTTk1QX1NBVkVfVE1QRElSIiAhPSAieHllcyIgXTsgdGhlbgorCVJFTU9WRVRFU1REQVRBCisgICAgZmkKKyAgICBleGl0IDAKK30KKworIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0KKyMKK1ZFUkJPU0VfT1VUKCkgeworICAgIGlmIFsgJFNOTVBfVkVSQk9TRSAtZ3QgJDEgXTsgdGhlbgorCXNoaWZ0CisJZWNobyAiJCoiCisgICAgZmkKK30KKworZmkgIyBPbmx5IGFsbG93IG91cnNlbHZlcyB0byBiZSBldmFsJ2VkIG9uY2UKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1biBiL3Rlc3RpbmcvZnVsbHRlc3RzL3N1cHBvcnQvc2ltcGxlX3J1bgpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4xOTc4MDA5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvc3VwcG9ydC9zaW1wbGVfcnVuCkBAIC0wLDAgKzEsMTE5IEBACisjIS9iaW4vc2gKKworaWYgWyAkIyA9IDAgXTsgdGhlbgorICAgIGVjaG8gIlVzYWdlOiAkMCA8dGVzdHNjcmlwdD4gWzxhcmdzPl0iCisgICAgZXhpdCAxCitmaQorCitpZiBbICJ4JGJ1aWxkZGlyIiA9ICJ4IiBdOyB0aGVuCisgICAgY2QgLi4KKyAgICBidWlsZGRpcj1gcHdkYAorICAgIGlmIGNkIHRlc3RpbmcgMj4vZGV2L251bGw7IHRoZW4KKyAgICAgICA6CisgICAgZWxzZQorICAgICAgIGVjaG8gIkVycm9yOiAkMCBtdXN0IGJlIHN0YXJ0ZWQgZnJvbSBpbnNpZGUgdGhlIHRlc3RpbmcgZGlyZWN0b3J5IGluIHRoZSBzb3VyY2UgdHJlZS4iCisgICAgICAgZWNobyAiVGhlIGJ1aWxkZGlyIGVudmlyb25tZW50IHZhcmlhYmxlIGNhbiBiZSBzZXQgdG8gcG9pbnQgdG8gdGhlIGJ1aWxkIGRpcmVjdG9yeS4iCisgICAgICAgZXhpdCAxCisgICAgZmkKK2ZpCisKK2lmIFsgIngkc3JjZGlyIiA9ICJ4IiBdOyB0aGVuCisgICAgc3JjZGlyPWBkaXJuYW1lICQwYAorICAgIHNyY2Rpcj1gY2QgJHNyY2RpcjsgY2QgLi4vLi47IHB3ZGAKKyAgICBzcmNkaXI9YGRpcm5hbWUgJHNyY2RpcmAKKyAgICBjZCAkc3JjZGlyCisgICAgaWYgY2QgdGVzdGluZyAyPi9kZXYvbnVsbDsgdGhlbgorICAgICAgIDoKKyAgICBlbHNlCisgICAgICAgZWNobyAiRXJyb3I6ICQwIG11c3QgYmUgc3RhcnRlZCBmcm9tIGluc2lkZSB0aGUgdGVzdGluZyBkaXJlY3RvcnkgaW4gdGhlIHNvdXJjZSB0cmVlLiIKKyAgICAgICBlY2hvICJUaGUgYnVpbGRkaXIgZW52aXJvbm1lbnQgdmFyaWFibGUgY2FuIGJlIHNldCB0byBwb2ludCB0byB0aGUgYnVpbGQgZGlyZWN0b3J5LiIKKyAgICAgICBleGl0IDEKKyAgICBmaQorZmkKKwordGVzdHNjcmlwdD0kMQoraWYgWyBgZWNobyAkdGVzdHNjcmlwdCB8IGN1dCAtYyAxLTFgICE9ICcvJyBdOyB0aGVuCisgICAgdGVzdHNjcmlwdD0iYHB3ZGAvJDEiCitmaQorCitTTk1QX0JBU0VESVI9YGRpcm5hbWUgJDBgCisKKyMjIHByZWZlciBNSUIgZmlsZXMgZm91bmQgaW4gc291cmNlIGhpZXJhcmNoeQorU05NUF9QUkVGRVJfTkVBUl9NSUJTPTEKKworZXhwb3J0IFNOTVBfUFJFRkVSX05FQVJfTUlCUworU05NUF9URVNUX1BSRUZJWD0ke1NOTVBfVEVTVF9QUkVGSVg6PVR9CitleHBvcnQgU05NUF9URVNUX1BSRUZJWAorCitTTk1QX09SSUdESVI9YHB3ZGAJICAgICAgICAjIyB0aGlzIHNjcmlwdCBtYXkgYmUgaW52b2tlZCB3aXRoIHJlbGF0aXZlIHBhdGgKK2V4cG9ydCBTTk1QX09SSUdESVIKKworU05NUF9VUERJUj0ke2J1aWxkZGlyfSAgICAgICAgICAjIyBidWlsZCBkaXJlY3RvcnkKK2lmIFsgIngkRFlOQU1JQ19BTkFMWVpFUiIgPSAieCIgXTsgdGhlbgorICAgIFNOTVBfU0xFRVBfREVGQVVMVD0xCitlbHNlCisgICAgU05NUF9TTEVFUF9ERUZBVUxUPTEwCitmaQorU05NUF9TTEVFUD0ke1NOTVBfU0xFRVA6PSRTTk1QX1NMRUVQX0RFRkFVTFR9IAkjIyBkZWZhdWx0IHNlY29uZHMgdG8gc2xlZXAKK2V4cG9ydCBTTk1QX1NMRUVQCisKKyMgRmluZCBleGVjdXRhYmxlcyBpbiBzb3VyY2UgZmlyc3QsIHRoZW4gYnVpbGQsIHRoZW4gZXhpc3RpbmcgUEFUSC4KKyMjIEFkZCB0byBQQVRIIGlmIGEgYmluYXJ5IGlzIGZvdW5kLgorCitjZCAkU05NUF9VUERJUgorU05NUF9VUERJUj1gcHdkYAorYmY9c25tcGdldAoraWYgWyAteCAiJGJmIiBdIDsgdGhlbgorICAgUEFUSD0kU05NUF9VUERJUjokUEFUSAorZWxzZQorICBmb3IgZGQgaW4gYXBwcyBiaW4gOyBkbworICAgYmY9JGRkL3NubXBnZXQKKyAgIGlmIFsgLXggIiRiZiIgXSA7IHRoZW4KKyAgICAgIFBBVEg9JFNOTVBfVVBESVIvJGRkOiRQQVRICisgICAgICBicmVhaworICAgZmkKKyAgZG9uZQorZmkKK2ZvciBkZCBpbiBhZ2VudCBiaW4gc2JpbiA7IGRvCisgICBiZj0kZGQvc25tcGQKKyAgIGlmIFsgLXggIiRiZiIgXSA7IHRoZW4KKyAgICAgIFBBVEg9JFNOTVBfVVBESVIvJGRkOiRQQVRICisgICAgICBicmVhaworICAgZmkKK2RvbmUKKworYmY9aW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaAoraWYgWyAhIC1zICIkYmYiIF0gOyB0aGVuCisgICBlY2hvICJObyBcIiRiZlwiIGluICRTTk1QX1VQRElSIC4gU29tZSB0ZXN0cyB3aWxsIGJlIHNraXBwZWQiCitmaQordW5zZXQgYmYKKworIyBSdW4gZnJvbSB0aGUgdGVzdCBzY3JpcHRzIGRpcmVjdG9yeS4KK2NkICRTTk1QX09SSUdESVIgOyBjZCAke1NOTVBfQkFTRURJUn0KK1NOTVBfQkFTRURJUj1gcHdkYAorZXhwb3J0IFNOTVBfQkFTRURJUgorCitQQVRIPSR7U05NUF9CQVNFRElSfTokUEFUSAorZXhwb3J0IFBBVEgKK1NOTVBfUEFUSD15ZXMKK2V4cG9ydCBTTk1QX1BBVEgKKworZXhwb3J0IFNOTVBfVVBESVIKKworIworIyBTb3VyY2UgdGhlIHRlc3RpbmcgY29uZmlndXJhdGlvbiBmaWxlCisjCisKK3Rlc3RudW09ImBiYXNlbmFtZSAkdGVzdHNjcmlwdGAiCisKKy4gc2ltcGxlX1RFU1RDT05GLnNoCisKKy4gc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworY2QgYGRpcm5hbWUgJHRlc3RzY3JpcHRgCitQQVRIPWBwd2RgOiRQQVRICitleHBvcnQgUEFUSAorCisuIGBiYXNlbmFtZSAkdGVzdHNjcmlwdGAKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZWE3YzBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsCkBAIC0wLDAgKzEsNTQgQEAKKyMhL3Vzci9iaW4vcGVybAorCitCRUdJTiB7CisgICAgaWYgKGV4aXN0cygkRU5WeydzcmNkaXInfSkpIHsKKwlwdXNoIEBJTkMsICIkRU5WeydzcmNkaXInfS90ZXN0aW5nL2Z1bGx0ZXN0cy9zdXBwb3J0IjsKKyAgICB9IGVsc2lmICgtZCAiZnVsbHRlc3RzL3N1cHBvcnQiKSB7CisJcHVzaCBASU5DLCAiZnVsbHRlc3RzL3N1cHBvcnQiOworICAgIH0gZWxzaWYgKC1kICIuLi9zdXBwb3J0IikgeworCXB1c2ggQElOQywgIi4uL3N1cHBvcnQiOworICAgIH0KK30KK3VzZSBOZXRTTk1QVGVzdDsKK3VzZSBUZXN0OwordXNlIFNOTVA7CisKK215ICR0ZXN0ID0gbmV3IE5ldFNOTVBUZXN0KGFnZW50YWRkcmVzcyA9PiAkYWdlbnRhZGRyZXNzKTsKKworJHRlc3QtPnJlcXVpcmVfZmVhdHVyZSgkZmVhdHVyZSk7CisKK215ICRuZXRzbm1wY2VydCA9ICIkRU5WeydzcmNkaXInfS9sb2NhbC9uZXQtc25tcC1jZXJ0IC1JIC1DICR0ZXN0LT57J2Rpcid9IjsKKworc3lzdGVtKCIkbmV0c25tcGNlcnQgZ2VuY2VydCAtSSAtdCBzbm1wZCA+IC9kZXYvbnVsbCAyPiYxIik7CitzeXN0ZW0oIiRuZXRzbm1wY2VydCBnZW5jZXJ0IC1JIC10IHNubXBhcHAgLS1jbiBzbm1wYXBwID4gL2Rldi9udWxsIDI+JjEiKTsKK3N5c3RlbSgiJG5ldHNubXBjZXJ0IGdlbmNlcnQgLUkgLXQgcGVybCAtLWNuIHBlcmwgPiAvZGV2L251bGwgMj4mMSIpOworCitteSAkZnAgPSBgJG5ldHNubXBjZXJ0IHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgcGVybGA7CitjaG9tcCgkZnApOworcHJpbnQgIiMgdXNpbmcgbG9jYWwgZnA6ICRmcFxuIjsKKworcGxhbih0ZXN0cyA9PiAyKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoInN5c2NvbnRhY3QgaXR3b3JrZWQiKTsKKyR0ZXN0LT5jb25maWdfYWdlbnQoInJ3dXNlciAtcyB0c20gcGVybCIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgiY2VydFNlY05hbWUgMTAwIHNubXBhcHAgLS1jbiIpOworJHRlc3QtPmNvbmZpZ19hZ2VudCgiY2VydFNlY05hbWUgMTAxICRmcCAtLWNuIik7CisKKyR0ZXN0LT5ESUUoImZhaWxlZCB0byBzdGFydCB0aGUgYWdlbnQiKSBpZiAoISR0ZXN0LT5zdGFydF9hZ2VudCgiIC1EdGxzLHNzbCx0c20sY2VydDptYXAiKSk7CisKKyMgbm93IGNyZWF0ZSBhIHNlc3Npb24gdG8gdGVzdCB0aGluZ3Mgd2l0aAorbXkgJHNlc3Npb24gPSBuZXcgU05NUDo6U2Vzc2lvbihEZXN0SG9zdCA9PiAkdGVzdC0+eydhZ2VudGFkZHJlc3MnfSwKKwkJCQlUaGVpcklkZW50aXR5ID0+ICdzbm1wZCcsCisJCQkgICAgICAgIE91cklkZW50aXR5ID0+ICdwZXJsJyk7CisKK29rKHJlZigkc2Vzc2lvbiksICdTTk1QOjpTZXNzaW9uJywgImNyZWF0ZWQgYSBzZXNzaW9uIik7CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgR0VUIHRlc3QKK2lmIChyZWYoJHNlc3Npb24pIGVxICdTTk1QOjpTZXNzaW9uJykgeworICAgIG15ICR2YWx1ZSA9ICRzZXNzaW9uLT5nZXQoJ3N5c0NvbnRhY3QuMCcpOworICAgIG9rKCR2YWx1ZSwgJ2l0d29ya2VkJyk7Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgY2xlYW51cAorJHRlc3QtPnN0b3BfYWdlbnQoKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ2lwaGVyVGVzdHMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1YWYwYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU0NpcGhlclRlc3RzCkBAIC0wLDAgKzEsNjIgQEAKKy4gU1Rsc1ZhcnMKKworIyBjcmVhdGUgYSBDQQorCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQUZQPWAkTlNDRVJUIHNob3djYXMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhLW5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2EtbmV0LXNubXAub3JnIGNlcnRpZmljYXRlIgorCisjIGNyZWF0ZSBhIHNlcnZlciBjZXJ0aWZpY2F0ZSB1c2luZyB0aGUgQ0EgY2VydGlmaWNhdGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBkIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgJGNoZWNrbmFtZXR5cGUgJHtjaGVja25hbWVwcmVmaXh9Zm9vYmFyICROU0NFUlRBUkdTCitTTk1QREZQPWAkTlNDRVJUIHNob3djZXJ0IC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAkTlNDRVJUQVJHU2AKKworQ09ORklHQUdFTlQgJ1tzbm1wXScgc2VydmVyQ2VydCAkU05NUERGUAorCisjIGNyZWF0ZSBhIHVzZXIgY2VydGlmaWNhdGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCitDT05GSUdBR0VOVCAgY2VydFNlY05hbWUgMTAgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorCitDT05GSUdBUFAgICBjbGllbnRDZXJ0ICAJICAkVEVTVFVTRVJGUAorQ09ORklHQVBQICAgc2VydmVyQ2VydCAgCSAgJFNOTVBERlAKKworQ09ORklHQVBQICAgdHJ1c3RDZXJ0ICRDQUZQCisKKyMgc3BlY2lmeSBhbiBleGFjdCBsaXN0IG9mIGNpcGhlcnMgdG8gYWNjZXB0CitDT05GSUdBR0VOVCAnW3NubXBdJyB0bHNBbGdvcml0aG1zIERIRS1SU0EtQUVTMjU2LVNIQTpBRVMyNTYtU0hBOkRFUy1DQkMzLVNIQQorCitGTEFHUz0iLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCisKKyMgc3RhcnQgdXAgdGhlIGFnZW50CitTVEFSVEFHRU5UCisKKyMgZW5zdXJlIHdlIGNhbiBhY2Nlc3MgaXQgdmlhIHN0YW5kYXJkIGFsZ29yaXRobXMgb24gdGhlIGNsaWVudCBzaWRlCitET1NFVFRFU1QgZGVmYXVsdEFsZ3MgIiRGTEFHUyIKKworIyBsaW1pdCB0aGUgY2xpZW50IHRvIHRoZSBzYW1lIHNldAorQ09ORklHQVBQIHRsc0FsZ29yaXRobXMgREhFLVJTQS1BRVMyNTYtU0hBOkFFUzI1Ni1TSEE6REVTLUNCQzMtU0hBCisKKyMgYW5kIHRlc3QKK0RPU0VUVEVTVCBzcGVjaWZpY0FsZ3MgIiRGTEFHUyIKKworIyBkcm9wIG9uZSBjaXBoZXIKK0NPTkZJR0FQUCB0bHNBbGdvcml0aG1zIERIRS1SU0EtQUVTMjU2LVNIQTpBRVMyNTYtU0hBCisKKyMgYW5kIHRlc3QKK0RPU0VUVEVTVCBvbmx5QWVzMjU2U2hhICIkRkxBR1MiCisKKyMgYW5kIGZpbmFsbHkgZW5zdXJlIHdlIGNhbiBnZXQgYmFjayB0byB3b3JraW5nIGFnYWluCitDT05GSUdBUFAgdGxzQWxnb3JpdGhtcyBESEUtUlNBLUFFUzI1Ni1TSEE6QUVTMjU2LVNIQQorRE9TRVRURVNUIHdvcmtzQWdhaW4gIiRGTEFHUyIKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIERPTkUKKworCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NDcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDE2NzQwMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TQ3JsCkBAIC0wLDAgKzEsOTggQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKKyMgdGhpcyBmaWxlIGNvbnRhaW5zIHRlc3RzIGNvbW1vbiB0byBib3RoIHRscyBhbmQgZHRscyB1c2FnZXMKKworVExTRElSPSRTTk1QX1RNUERJUi90bHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlIHRoZSBjZXJ0aWZpY2F0ZXMKKworIyBjcmVhdGUgdGhlIGNhCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCisKKyMgc25tcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLXQgc25tcGQgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1NFUlZFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRTRVJWRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcGQgY2VydGlmaWNhdGUiCisKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyMgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtdCBzbm1wYXBwMiAtLWNuICd0ZXN0dXNlcjInICAkTlNDRVJUQVJHUworVEVTVFVTRVIyRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwMiAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVIyRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyMiBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb25maWd1cmUgdGhlIC5jb25mIGZpbGVzCisKK0NPTkZJR0FQUCBzZXJ2ZXJDZXJ0ICRTRVJWRVJGUAorCisjIGNvbW1vbiBuYW1lIG1hcHBpbmdzCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAgICRURVNUVVNFUjJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHRlc3R1c2VyMiBhdXRocHJpdgorCitDUkxGSUxFPSRTTk1QX1RNUERJUi9jcmxmaWxlLnBlbQorCisjIGNvbmZpZ3VyZSB0aGUgQ1JMIGxvY2F0aW9ucworQ09ORklHQUdFTlQgJ1tzbm1wXScgeDUwOWNybGZpbGUgJENSTEZJTEUKK0NPTkZJR0FQUCAgICdbc25tcF0nIHg1MDljcmxmaWxlICRDUkxGSUxFCisKK0NSTENBQ01EPSJlbnYgRElSPSRUTFNESVIgQ049Y2EtbmV0LXNucC5vcmcgb3BlbnNzbCBjYSIKK0NSTEFSR1M9Ii1jb25maWcgJFRMU0RJUi8ub3BlbnNzbC5jb25mIC1rZXlmaWxlICRUTFNESVIvcHJpdmF0ZS9jYS1uZXQtc25tcC5vcmcua2V5IC1jZXJ0ICRUTFNESVIvY2EtY2VydHMvY2EtbmV0LXNubXAub3JnLmNydCIKKworIyBnZW5lcmF0ZSB0aGUgaW5pdGlhbCBDUkwKK3RvdWNoICRUTFNESVIvLmluZGV4CitlY2hvICIwMSIgPiAkVExTRElSLy5jcmxudW1iZXIKK0NBUFRVUkUgIiRDUkxDQUNNRCAtZ2VuY3JsICRDUkxBUkdTIC1vdXQgJENSTEZJTEUiCisKKyMKKyMgcHV0IHRoZSBzZWNvbmQgY2xpZW50IGludG8gdGhlIENSTCBhbmQgaXQgc2hvdWxkbid0IHdvcmsKKyMKK0NBUFRVUkUgIiRDUkxDQUNNRCAtcmV2b2tlICRUTFNESVIvY2VydHMvc25tcGFwcDIuY3J0ICRDUkxBUkdTIC1vdXQgJENSTEZJTEUiCitDQVBUVVJFICIkQ1JMQ0FDTUQgLWdlbmNybCAkQ1JMQVJHUyAtb3V0ICRDUkxGSUxFIgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgUnVuIHRoZSBhY3R1YWwgbGlzdCBvZiB0ZXN0cworIworCisjIHN0YXJ0IHRoZSBhZ2VudCB1cAorRkxBR1M9Ii1EdGxzIC1PbiAkU05NUF9GTEFHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgorQUdFTlRfRkxBR1M9Ii1EdGxzIgorU1RBUlRBR0VOVAorCisjIHVzaW5nIHVzZXIgMSAtIGEgY29tbW9uIG5hbWUgbWFwcGVkIGNlcnRpZmljYXRlCisjICh1c2luZyB0aGUgZGVmYXVsdCAic25tcGFwcCIgY2VydGlmaWNhdGUgYmVjYXVzZSB3ZSBkb24ndCBzcGVjaWZ5IGFub3RoZXIpCitDQVBUVVJFICJzbm1wZ2V0IC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICAgICAgICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgorCisjIHVzaW5nIHVzZXIgMiBzaG91bGQgbm93IGZhaWwKK0NBUFRVUkUgInNubXBnZXQgLVQgb3VyX2lkZW50aXR5PXNubXBhcHAyIC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLQ09VTlQgIDAgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCitDSEVDS0FHRU5UICAiY2VydGlmaWNhdGUgcmV2b2tlZCIKKworIworIyBub3cgcHV0IHRoZSBzZXJ2ZXIncyBjZXJ0IGludG8gdGhlIGNsaWVudCBjcmwgZmlsZQorIworQ0FQVFVSRSAiJENSTENBQ01EIC1yZXZva2UgJFRMU0RJUi9jZXJ0cy9zbm1wZC5jcnQgJENSTEFSR1MiCitDQVBUVVJFICIkQ1JMQ0FDTUQgLWdlbmNybCAkQ1JMQVJHUyAtb3V0ICRDUkxGSUxFIgorCisjIHVzZXIgMSBzaG91bGQgbm93IGZhaWwgb24gdGhlIGNsaWVudCBzaWRlCitDQVBUVVJFICJzbm1wZ2V0IC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLICAgICAgICJjZXJ0aWZpY2F0ZSByZXZva2VkIgorCisjIGNsZWFudXAKK1NUT1BBR0VOVAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc0FnZW50VHJhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjBjMzQxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNBZ2VudFRyYXAKQEAgLTAsMCArMSw2NiBAQAorIyEvYmluL3NoCisKKy4gU1Rsc1ZhcnMKKworU0tJUElGTk9UIFVTSU5HX0VYQU1QTEVTX0VYQU1QTEVfTU9EVUxFCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENFUlRJRklDQVRFIFNFVFVQCisjCisKKyMgcHJvZHVjZSB0aGUgY2VydGlmaWNhdGVzIHRvIHVzZQorCisjIHNubXB0cmFwZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcHRyYXBkICAgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1RSQVBERlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wdHJhcGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRUUkFQREZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wdHJhcGQgY2VydGlmaWNhdGUiCisKKyMgc25tcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBkICAgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1NFUlZFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRTRVJWRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcGQgY2VydGlmaWNhdGUiCisKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGFwcCAtLWNuICd0ZXN0dXNlcicgICROU0NFUlRBUkdTCitURVNUVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGFwcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENvbmZpZ3VyYXRpb24KKworIyBzbm1wZAorQ09ORklHQUdFTlQgdHJhcHNlc3MgLUNpIC1UIG91cl9pZGVudGl0eT0kVEVTVFVTRVJGUCAtVCB0aGVpcl9pZGVudGl0eT0kVFJBUERGUCAgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0KK0NPTkZJR0FHRU5UICdbc25tcF0nIHNlcnZlckNlcnQgJFNFUlZFUkZQCitDT05GSUdBR0VOVCAJICAgICBjZXJ0U2VjTmFtZSAgICAgIDkgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCAgICAgICAgICByd3VzZXIgICAgICAgICAgIC1zIHRzbSB0ZXN0dXNlcgorCisjIHNubXB0cmFwZAorQ09ORklHVFJBUEQgJ1tzbm1wXScgc2VydmVyQ2VydCAkVFJBUERGUAorQ09ORklHVFJBUEQgCSAgICAgY2VydFNlY05hbWUgICAgICA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHVFJBUEQgCSAgICAgYXV0aHVzZXIgICAgICAgICBsb2cgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CitDT05GSUdUUkFQRCAgICAgICAgICBhZ2VudHhzb2NrZXQgICAgIC9kZXYvbnVsbAorCisjIGdlbmVyYWwKKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NUQVJUVFJBUEQKKworIyBpbml0aWFsaXplIG9ubHkgdGhlIGV4YW1wbGUgbWliLCBhbmQgbm90IHRoZSBub3RpZmljYXRpb24gbWliIHN0dWZmCitBR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC1EZXhhbXBsZSxoZWFkZXJfZ2VuZXJpYyIKK1NUQVJUQUdFTlQKKworI0RFTEFZCitDQVBUVVJFICJzbm1wc2V0IC1UIHRoZWlyX2lkZW50aXR5PXNubXBkIC1UIG91cl9pZGVudGl0eT1zbm1wYXBwIC1PbiAtdCAzIC1yIDAgJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuMjAyMS4yNTQuOC4wIGkgMSIKKworU1RPUEFHRU5UCisKK1NUT1BUUkFQRAorCitDSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQ05TZXNzaW9uIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNDTlNlc3Npb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjlhNjFiOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzQ05TZXNzaW9uCkBAIC0wLDAgKzEsNiBAQAorIyEvYmluL3NoCisKK2NoZWNrbmFtZXR5cGU9Ii0tc2FuIgorY2hlY2tuYW1lcHJlZml4PSJETlM6IgorCisuIFNUbHNTZXJ2ZXJTZXNzaW9uCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc05hbWUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc05hbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ4NGRhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzTmFtZQpAQCAtMCwwICsxLDYgQEAKKyMhL2Jpbi9zaAorCitjaGVja25hbWV0eXBlPSItLWNuIgorY2hlY2tuYW1lcHJlZml4PSIiCisKKy4gU1Rsc1NlcnZlcgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW4gYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOTRhMGI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW4KQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2hlY2tuYW1ldHlwZT0iLS1zYW4iCitjaGVja25hbWVwcmVmaXg9IkROUzoiCisKKy4gU1Rsc1NlcnZlcgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW5TZXNzaW9uIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTYW5TZXNzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5YTYxYjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1NhblNlc3Npb24KQEAgLTAsMCArMSw2IEBACisjIS9iaW4vc2gKKworY2hlY2tuYW1ldHlwZT0iLS1zYW4iCitjaGVja25hbWVwcmVmaXg9IkROUzoiCisKKy4gU1Rsc1NlcnZlclNlc3Npb24KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4MDAyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyCkBAIC0wLDAgKzEsNzcgQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKKyMgY3JlYXRlIGEgQ0EKKworQ0FQVFVSRSAkTlNDRVJUIGdlbmNhIC0tY24gY2EtbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FGUD1gJE5TQ0VSVCBzaG93Y2FzIC0tZmluZ2VycHJpbnQgLS1icmllZiBjYS1uZXQtc25tcC5vcmcgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhLW5ldC1zbm1wLm9yZyBjZXJ0aWZpY2F0ZSIKKworIyBjcmVhdGUgYSBzZXJ2ZXIgY2VydGlmaWNhdGUgdXNpbmcgdGhlIENBIGNlcnRpZmljYXRlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wZCAtLXdpdGgtY2EgY2EtbmV0LXNubXAub3JnICRjaGVja25hbWV0eXBlICR7Y2hlY2tuYW1lcHJlZml4fWEuYi5leGFtcGxlLmNvbSAkTlNDRVJUQVJHUworU05NUERGUD1gJE5TQ0VSVCBzaG93Y2VydCAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgJE5TQ0VSVEFSR1NgCisKK0NPTkZJR0FHRU5UICdbc25tcF0nIHNlcnZlckNlcnQgJFNOTVBERlAKKworIyBjcmVhdGUgYSB1c2VyIGNlcnRpZmljYXRlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworQ09ORklHQUdFTlQgIGNlcnRTZWNOYW1lIDEwICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKKworQ09ORklHQVBQICAgY2xpZW50Q2VydCAgCSAgJFRFU1RVU0VSRlAKKworIyBzdGFydCB0aGUgYWdlbnQgdXAKK0ZMQUdTPSItT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKKworIyBzdGFydCB1cCB0aGUgYWdlbnQKK1NUQVJUQUdFTlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQb3NpdGl2ZSB0ZXN0cworIyAgICAoc2hvdWxkIHdvcmspCisKKyMgZW5zdXJlIHdlIGNhbiBhY2Nlc3MgaXQgdmlhIGEgZGlyZWN0IEZQIGNoZWNrCitET1NFVFRFU1QgZmluZ2VycHJpbnRJZGVudGl0eSAiLVQgdGhlaXJfaWRlbnRpdHk9JFNOTVBERlAgJEZMQUdTIgorCisjIGVuc3VyZSB3ZSBjYW4gYWNjZXNzIGl0IHZpYSBhIGZpbGUgYmFzZWQgaWRlbnRpdHkgY2hlY2sKK0RPU0VUVEVTVCBmaWxlbmFtZUlkZW50aXR5ICItVCB0aGVpcl9pZGVudGl0eT1zbm1wZCAkRkxBR1MiCisKKyMgZW5zdXJlIHdlIGNhbiBhY2Nlc3MgaXQgdmlhIHRydXN0aW5nIHRoZWlyIENBIGNlcnRpZmljYXRlIGFuZCBhCisjIG1hdGNoaW5nIGNvbW1vbmFtZSAKK0RPU0VUVEVTVCBob3N0bmFtZUlkZW50aXR5ICItVCB0cnVzdF9jZXJ0PSRDQUZQIC1UIHRoZWlyX2hvc3RuYW1lPWEuYi5leGFtcGxlLmNvbSAkRkxBR1MiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgTmVnYXRpdmUgdGVzdHMKKyMgICAgKHNob3VsZCBmYWlsKQorCisjIGlmIHdlIGRvbid0IGxvYWQgdGhlIENBIGNlcnRpZmljYXRlIHdlIHNob3VsZG4ndCBjb25uZWN0CitET0ZBSUxTRVRURVNUIG5vVHJ1c3RDQUNlcnQgICItVCB0aGVpcl9ob3N0bmFtZT1hLmIuZXhhbXBsZS5jb20gJEZMQUdTIgorCisjIGlmIHdlIHNwZWNpZnkgYSBkaWZmZXJlbnQgaG9zdG5hbWUgd2Ugc2hvdWxkIGZhaWwgaG9zdG5hbWUgdGVzdAorIyAoImxvY2FsaG9zIiB3aXRob3V0IHRoZSAidCIgaXMgaW50ZW50aW9uYWwgaGVyZSkKK0RPRkFJTFNFVFRFU1QgaW5jb3JyZWN0TmFtZUEuQi5FeGFtcGxlLkNvICAiLVQgdGhlaXJfaG9zdG5hbWU9YS5iLmV4YW1wbGUuY28gJEZMQUdTIgorRE9GQUlMU0VUVEVTVCBpbmNvcnJlY3ROYW1lQS5CLkV4YW1wbGUuQ29tdCAgIi1UIHRoZWlyX2hvc3RuYW1lPWEuYi5leGFtcGxlLmNvbXQgJEZMQUdTIgorCisjIGlmIHdlIHNwZWNpZnkgdGhlIENBIGNlcnQncyBidXQgZG9uJ3Qgc3BlY2lmeSB0aGUgaG9zdG5hbWUsIGl0CisjIHNob3VsZCBmYWlsICh0aGlzIG1heSBjaGFuZ2UgaW4gdGhlIGZ1dHVyZSBpZiB3ZSBwdWxsIHRoZSBob3N0bmFtZQorIyBmcm9tIHRoZSB0cmFuc3BvcnQgc3BlY2lmaWVyKQorRE9GQUlMU0VUVEVTVCBjZXJ0V2l0aG91dEhvc3QgICItVCB0cnVzdF9jZXJ0PSRDQUZQICRGTEFHUyIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBXaWxkY2FyZCB0ZXN0cworIworRE9TRVRURVNUIHdpbGRjYXJkTWF0Y2ggIi1UIHRydXN0X2NlcnQ9JENBRlAgLVQgdGhlaXJfaG9zdG5hbWU9Ki5iLmV4YW1wbGUuY29tICRGTEFHUyIKKworRE9GQUlMU0VUVEVTVCBub0RvdWJsZVdpbGRjYXJkICItVCB0cnVzdF9jZXJ0PSRDQUZQIC1UIHRoZWlyX2hvc3RuYW1lPSouZXhhbXBsZS5jb20gJEZMQUdTIgorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRE9ORQorCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbiBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzU2VydmVyU2Vzc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hY2Y2OGU1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNTZXJ2ZXJTZXNzaW9uCkBAIC0wLDAgKzEsNTcgQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKKyMgdGhpcyBpcyB1c3VhbGx5IHNvbWV0aGluZyBsaWtlICJsb2NhbGhvc3Q6Iiwgc28gd2UgbmVlZCB0byBzdHJpcCB0aGUgOgorT1VSSE9TVD1gZWNobyAkU05NUF9URVNUX0RFU1QgfCBzZWQgJ3MvOi4qLy8nYAorCisjIGNyZWF0ZSBhIENBCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jYSAtLWNuIGNhLW5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRlA9YCROU0NFUlQgc2hvd2NhcyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2EtbmV0LXNubXAub3JnICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQUZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYS1uZXQtc25tcC5vcmcgY2VydGlmaWNhdGUiCisKKyMgY3JlYXRlIGEgc2VydmVyIGNlcnRpZmljYXRlIHVzaW5nIHRoZSBDQSBjZXJ0aWZpY2F0ZQorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAkY2hlY2tuYW1ldHlwZSAke2NoZWNrbmFtZXByZWZpeH0kT1VSSE9TVCAkTlNDRVJUQVJHUworU05NUERGUD1gJE5TQ0VSVCBzaG93Y2VydCAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgJE5TQ0VSVEFSR1NgCisKK0NPTkZJR0FHRU5UICdbc25tcF0nIHNlcnZlckNlcnQgJFNOTVBERlAKKworIyBjcmVhdGUgYSB1c2VyIGNlcnRpZmljYXRlCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworQ09ORklHQUdFTlQgIGNlcnRTZWNOYW1lIDEwICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKKworQ09ORklHQVBQICAgY2xpZW50Q2VydCAgCSAgJFRFU1RVU0VSRlAKKworIyBzdGFydCB0aGUgYWdlbnQgdXAKK0ZMQUdTPSItT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCIKKworIyBzdGFydCB1cCB0aGUgYWdlbnQKK1NUQVJUQUdFTlQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQb3NpdGl2ZSB0ZXN0cworIyAgICAoc2hvdWxkIHdvcmspCisKKyMgZW5zdXJlIHdlIGNhbiBhY2Nlc3MgaXQgdmlhIGEgZGlyZWN0IEZQIGNoZWNrCitET1NFVFRFU1QgZmluZ2VycHJpbnRJZGVudGl0eSAiLVQgdGhlaXJfaWRlbnRpdHk9JFNOTVBERlAgJEZMQUdTIgorCisjIGRpcmVjdGx5IHNwZWNpZnkgdGhlIGhvc3QgbmFtZQorRE9TRVRURVNUIGhvc3RuYW1lSWRlbnRpdHkgIi1UIHRydXN0X2NlcnQ9JENBRlAgLVQgdGhlaXJfaG9zdG5hbWU9JE9VUkhPU1QgJEZMQUdTIgorCisjIFRoaXMgc2hvdWxkIGFsc28gd29yayBiZWNhdXNlIHdlOgorIyAtIHRydXN0IHRoZSBDQSBjZXJ0CisjIC0gdXNlIGEgc2Vzc2lvbiBkZXN0bmFtZSB0aGF0IG1hdGNoZXMgdGhlIGNlcnRpZmljYXRlCitET1NFVFRFU1Qgc2Vzc2lvbm5hbWVJZGVudGl0eSAiLVQgdHJ1c3RfY2VydD0kQ0FGUCAkRkxBR1MiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRE9ORQorCisjc2xlZXAgNTAwCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNUcmFwZFVzZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTE0YzQyNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVHJhcGRVc2VyCkBAIC0wLDAgKzEsODcgQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENFUlRJRklDQVRFIFNFVFVQCisjCisKKyMgcHJvZHVjZSB0aGUgY2VydGlmaWNhdGVzIHRvIHVzZQorCisjIHNubXB0cmFwZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcHRyYXBkZCAgIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitTRVJWRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXB0cmFwZGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRTRVJWRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcHRyYXBkZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyBDQSBjZXJ0aWZpY2F0ZQorCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQUZQPWAkTlNDRVJUIHNob3djYXMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhLW5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2EtbmV0LXNubXAub3JnIGNlcnRpZmljYXRlIgorCisjIHVzZXIgOTogQ0Egc2lnbmVkIHVzZXIgY2VydAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgY2F1c2VyIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLS1zYW4gZW1haWw6dXNlcjlAdGVzdC5uZXQtc25tcC5vcmcgLS1lbWFpbCB1c2VyOUB0ZXN0Lm5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2F1c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQVVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2F1c2VyIGNlcnRpZmljYXRlIgorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBR0VOVCBDT05GSUdVUkFUSU9OCisjCisKK0NPTkZJR1RSQVBEICdbc25tcF0nIGRlYnVnVG9rZW5zIHRzbQorIyAsdGxzLHNzbCxjZXJ0LHRzbQorQ09ORklHVFJBUEQgJ1tzbm1wXScgZG9EZWJ1Z2dpbmcgMQorQ09ORklHVFJBUEQgJ1tzbm1wXScgc2VydmVyQ2VydCAkU0VSVkVSRlAKKworQ09ORklHVFJBUEQgJ1tzbm1wXScgdHJ1c3RDZXJ0ICRDQUZQCisKKyMgY29tbW9uIG5hbWUgbWFwcGluZ3MKK0NPTkZJR1RSQVBEIGNlcnRTZWNOYW1lIDkgICRURVNUVVNFUkZQICAgICAtLWNuCisKK0NPTkZJR1RSQVBEIGNlcnRTZWNOYW1lIDEwMCAkQ0FGUCAgICAgICAgLS1yZmM4MjIKKworQ09ORklHQVBQICAgc2VydmVyQ2VydCAgCSAgJFNFUlZFUkZQCitDT05GSUdBUFAgICBkZWZTZWN1cml0eU1vZGVsICAgICAgdHNtCisKK0NPTkZJR1RSQVBEICBhdXRodXNlciBsb2cgLXMgdHNtIHRlc3R1c2VyIGF1dGhwcml2CisKKyMgdGhpcyBmaWxlIGNvbnRhaW5zIHRlc3RzIGNvbW1vbiB0byBib3RoIHRscyBhbmQgZHRscyB1c2FnZXMKKworIyBzdGFydCB0aGUgYWdlbnQgdXAKK0ZMQUdTPSItRHRscyAtT24gJFNOTVBfRkxBR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQiCisKK1NUQVJUVFJBUEQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBQT1NULVRSQVBELVNUQVJUVVAgQ2VydGlmaWNhdGVzCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXB0cmFwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wdHJhcCAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgdGVzdHVzZXIgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQUNUVUFMIFRFU1RTCisjCisjIFJ1biB0aGUgYWN0dWFsIGxpc3Qgb2YgdGVzdHMKKyMKKworIyB1c2luZyB1c2VyIDEgLSBhIGNvbW1vbiBuYW1lIG1hcHBlZCBjZXJ0aWZpY2F0ZQorIyAodXNpbmcgdGhlIGRlZmF1bHQgInNubXBhcHAiIGNlcnRpZmljYXRlIGJlY2F1c2Ugd2UgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyKQorRE9UUkFQVEVTVCB1c2VyMVRyYXBUZXN0ICIkRkxBR1MiCisKKyMgZmFpbGluZyB1c2luZyB0aGUgQ0Egc2lnbmVkIGNlcnQgd2l0aG91dAorRE9GQUlMVFJBUFRFU1QgdXNlcjJVbmtub3duVXNlciAiLVQgb3VyX2lkZW50aXR5PXNubXB0cmFwICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDEgLSBzZW5kaW5nIGFuIElORk9STQorIyAodXNpbmcgdGhlIGRlZmF1bHQgInNubXBhcHAiIGNlcnRpZmljYXRlIGJlY2F1c2Ugd2UgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyKQorRE9UUkFQVEVTVCB1c2VyMUluZm9ybVRlc3QgIi1DaSAkRkxBR1MiCisKK1NUT1BUUkFQRAorCitGSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1NUbHNVc2VycyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNiMDNhNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVXNlcnMKQEAgLTAsMCArMSwyNjIgQEAKKyMhL2Jpbi9zaAorCisuIFNUbHNWYXJzCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIENFUlRJRklDQVRFIFNFVFVQCisjCisKKyMgcHJvZHVjZSB0aGUgY2VydGlmaWNhdGVzIHRvIHVzZQorCisjIHNubXBkCitIT1NUTkFNRT1gaG9zdG5hbWVgCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wZCAgIC0tY24gJEhPU1ROQU1FICROU0NFUlRBUkdTCitTRVJWRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBkICAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkU0VSVkVSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHNubXBkIGNlcnRpZmljYXRlIgorCisjIHVzZXIKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IHNubXBhcHAgLS1jbiAndGVzdHVzZXInICAkTlNDRVJUQVJHUworVEVTVFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHNubXBhcHAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFRFU1RVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIgMS41CitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwMiAtLWNuICd0ZXN0dXNlcjInICAkTlNDRVJUQVJHUworVEVTVFVTRVIyRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwMiAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVIyRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIgMgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgb3RoZXJ1c2VyIC0tY24gJ290aGVydXNlcicgICROU0NFUlRBUkdTCitPVEhFUlVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIG90aGVydXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkT1RIRVJVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIG90aGVydXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDMKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGludmFsaWR1c2VyIC0tY24gJ2ludmFsaWR1c2VyJyAgJE5TQ0VSVEFSR1MKK0lOVkFMSURVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBpbnZhbGlkdXNlciAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkSU5WQUxJRFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igb3RoZXJ1c2VyIGNlcnRpZmljYXRlIgorCisjIHVzZXIgNAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgdW5tYXBwZWQgLS1jbiAndW5tYXBwZWQnICAkTlNDRVJUQVJHUworVU5NQVBQRURGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHVubWFwcGVkICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRVTk1BUFBFREZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB1bm1hcHBlZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyIDUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IG1hcHBlZHVzZXIgLS1jbiAnbWFwcGVkdXNlcicgICROU0NFUlRBUkdTCitNQVBQRURVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBtYXBwZWR1c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRNQVBQRURVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIG1hcHBlZHVzZXIgY2VydGlmaWNhdGUiCisKKyMgdXNlciA2OiBTQU4gZW1haWwKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGVtYWlsIC0tc2FuIGVtYWlsOmZvb2JhcnVzZXJAZXhhbXBsZS5jb20gICROU0NFUlRBUkdTCitFTUFJTFVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGVtYWlsICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRFTUFJTFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgZW1haWwgY2VydGlmaWNhdGUiCisKKyMgdXNlciA3OiBTQU4gZG5zCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBkbnMgLS1zYW4gRE5TOmZvb2Jhci5leGFtcGxlLmNvbSAgJE5TQ0VSVEFSR1MKK0ROU1VTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGRucyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkRE5TVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBkbnMgY2VydGlmaWNhdGUiCisKKyMgdXNlciA4OiBTQU4gSVB2NAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgaXBhZGRyIC0tc2FuIElQOjEyNy4wLjAuMSAgJE5TQ0VSVEFSR1MKK0lQVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgaXBhZGRyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRJUFVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgaXBhZGRyIGNlcnRpZmljYXRlIgorCisjIHVzZXIgOC4xOiAgYWZpbGUKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGFmaWxlIC0tY24gYWZpbGV1c2VyICROU0NFUlRBUkdTCitBRklMRVVTRVJGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGFmaWxlICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRBRklMRVVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgYWZpbGUgY2VydGlmaWNhdGUiCisKKworIyBDQSBjZXJ0aWZpY2F0ZQorCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCitDQUZQPWAkTlNDRVJUIHNob3djYXMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhLW5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2EtbmV0LXNubXAub3JnIGNlcnRpZmljYXRlIgorCisjIHVzZXIgOTogQ0Egc2lnbmVkIHVzZXIgY2VydAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgY2F1c2VyIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLS1zYW4gZW1haWw6dXNlcjlAdGVzdC5uZXQtc25tcC5vcmcgLS1lbWFpbCB1c2VyOUB0ZXN0Lm5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBVVNFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2F1c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRDQVVTRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2F1c2VyIGNlcnRpZmljYXRlIgorCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBjYWRpcmVjdDliIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLS1zYW4gZW1haWw6dXNlcjliQHRlc3QubmV0LXNubXAub3JnIC0tZW1haWwgdXNlcjliQHRlc3QubmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FESVJFQ1RGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhZGlyZWN0OWIgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRElSRUNURlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhZGlyZWN0IGNlcnRpZmljYXRlIgorCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYTItbmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0EyRlA9YCROU0NFUlQgc2hvd2NhcyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2EyLW5ldC1zbm1wLm9yZyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0EyRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIGNhMi1uZXQtc25tcC5vcmcgY2VydGlmaWNhdGUiCisKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC10IGNhZGlyZWN0OWMgLS13aXRoLWNhIGNhMi1uZXQtc25tcC5vcmcgLS1zYW4gZW1haWw6dXNlcjljQHRlc3QubmV0LXNubXAub3JnIC0tZW1haWwgdXNlcjljQHRlc3QubmV0LXNubXAub3JnICAkTlNDRVJUQVJHUworQ0FESVJFQ1Q5Q0ZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgY2FkaXJlY3Q5YyAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkQ0FESVJFQ1Q5Q0ZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBjYWRpcmVjdDljIGNlcnRpZmljYXRlIgorCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBjYWRpcmVjdDlkIC0td2l0aC1jYSBjYTItbmV0LXNubXAub3JnIC0tc2FuIGVtYWlsOnVzZXI5ZEB0ZXN0Lm5ldC1zbm1wLm9yZyAtLWVtYWlsIHVzZXI5ZEB0ZXN0Lm5ldC1zbm1wLm9yZyAgJE5TQ0VSVEFSR1MKK0NBRElSRUNUOURGUD1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIGNhZGlyZWN0OWQgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJENBRElSRUNUOURGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3IgY2FkaXJlY3Q5ZCBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQUdFTlQgQ09ORklHVVJBVElPTgorIworCitDT05GSUdBR0VOVCAnW3NubXBdJyBkZWJ1Z1Rva2VucyB0c20KKyMgLHRscyxzc2wsY2VydCx0c20KK0NPTkZJR0FHRU5UICdbc25tcF0nIGRvRGVidWdnaW5nIDEKK0NPTkZJR0FHRU5UICdbc25tcF0nIGxvZ1RpbWVzdGFtcCAxCitDT05GSUdBR0VOVCAnW3NubXBdJyBzZXJ2ZXJDZXJ0ICRTRVJWRVJGUAorCitDT05GSUdBR0VOVCAnW3NubXBdJyB0cnVzdENlcnQgJENBRlAKK0NPTkZJR0FHRU5UICdbc25tcF0nIHRydXN0Q2VydCAkQ0FESVJFQ1Q5Q0ZQCisKKyMgY29tbW9uIG5hbWUgbWFwcGluZ3MKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDkgICRURVNUVVNFUkZQICAgICAtLWNuCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMCAkVEVTVFVTRVIyRlAgICAgLS1jbgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTEgJE9USEVSVVNFUkZQICAgIC0tY24KK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEyICRJTlZBTElEVVNFUkZQICAtLWNuCisKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDIwICRNQVBQRURVU0VSRlAgLS1zbiBhZnRlcm1hcHBpbmcKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDIxICRFTUFJTFVTRVJGUCAgLS1yZmM4MjIKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDIyICRETlNVU0VSRlAgICAgLS1kbnMKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDIzICRJUFVTRVJGUCAgICAgLS1pcAorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMjQgYWZpbGUgICAgICAgICAtLWNuCisKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwMCAkQ0FGUCAgICAgICAgLS1yZmM4MjIKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwMSAkQ0FESVJFQ1RGUCAgLS1zbiBjYXVzZXJkaXJlY3RtYXAKK0NPTkZJR0FHRU5UIGNlcnRTZWNOYW1lIDEwMiAkQ0FESVJFQ1Q5Q0ZQICAtLXNuIGNhdXNlcmRpcmVjdDljbWFwCisjIGludGVudGlvbmFsbHkgbm90IG1hcHBlZDoKKyNDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMDAxICRDQURJUkVDVDlERlAgIC0tc24gY2F1c2VyZGlyZWN0OWRtYXAKKworIyAqKiogSU5URU5USU9OQUxMWSBOT1QgTUFQUElORyBBVCBBTEw6ICoqKgorIyBDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSAxMDAwICRVTk1BUFBFREZQIC4uLi4KKworQ09ORklHQVBQICAgc2VydmVyQ2VydCAgCSAgJFNFUlZFUkZQCitDT05GSUdBUFAgICBkZWZTZWN1cml0eU1vZGVsICAgICAgdHNtCitDT05GSUdBUFAgICBsb2dUaW1lc3RhbXAgICAgICAgICAgMQorCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB0ZXN0dXNlciBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIyIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBvdGhlcnVzZXIgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIGFmdGVybWFwcGluZyBhdXRocHJpdgorCitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBmb29iYXJ1c2VyQGV4YW1wbGUuY29tIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBmb29iYXIuZXhhbXBsZS5jb20gYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIDEyNy4wLjAuMSBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdXNlcjhAdGVzdC5uZXQtc25tcC5vcmcgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIHVzZXI5QHRlc3QubmV0LXNubXAub3JnIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSB1c2VyMTBAdGVzdC5uZXQtc25tcC5vcmcgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtIGFmaWxldXNlciBhdXRocHJpdgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gY2F1c2VyZGlyZWN0bWFwIGF1dGhwcml2CitDT05GSUdBR0VOVCAgcnd1c2VyIC1zIHRzbSBjYXVzZXJkaXJlY3Q5Y21hcCBhdXRocHJpdgorCisKKyMgdGhpcyBmaWxlIGNvbnRhaW5zIHRlc3RzIGNvbW1vbiB0byBib3RoIHRscyBhbmQgZHRscyB1c2FnZXMKKworIyBzdGFydCB0aGUgYWdlbnQgdXAKK0ZMQUdTPSItRHRscyAtdjMgLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCisKK1NUQVJUQUdFTlQKKworIyBzaG91bGRuJ3QgaGF2ZSBjb25maWcgZXJyb3JzCitDSEVDS0FHRU5UQ09VTlQgMCAiOiBFcnJvcjoiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgRVhURU5ERUQgQ0VSVElGSUNBVEUgU0VUVVAKKyMKKyMgUGVyZm9ybSBtb3JlIHN0ZXBzIG9mIGNvbmZpZ3VyYXRpb24gdGhhdCBzaG91bGQgb2NjdXIgKmFmdGVyKiB0aGUKKyMgYWdlbnQgaGFzIHN0YXJ0ZWQgaW4gb3JkZXIgdG8gcHJldmVudCBpdCBmcm9tIGhhdmluZyBzZWVuIHRoZXNlCisjIGZpbGVzIGFoZWFkIG9mIHRpbWUuCisKKyMgdGhpcyB1c2VyJ3MgZmluZ2VycHJpbnQgc2hvdWxkIG5vdCBiZSByZWNvZ25pemVkIAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgdW5rbm93bnVzZXIgLS1zYW4gZW1haWw6dW5rbm93bnVzZXJAZXhhbXBsZS5jb20gICROU0NFUlRBUkdTCitVTktOT1dOVVNFUj1gJE5TQ0VSVCBzaG93Y2VydHMgLS1maW5nZXJwcmludCAtLWJyaWVmIHVua25vd251c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRVTk1BUFBFREZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB1bmtub3dudXNlciBjZXJ0aWZpY2F0ZSIKKworIyB0aGlzIHVzZXIncyBmaW5nZXJwcmludCBzaG91bGQgbm90IGJlIGRpcmVjdGx5IHJlY29nbml6ZWQsIGJ1dCBpdCdzCisjIENBIHNob3VsZC4KKworIyB1c2VyIDEwOiBDQSBzaWduZWQgY2VydAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLUQgLXQgdW5rbm93bmNhdXNlciAtLWNuIHVua25vd25jYXVzZXJAbmV0LXNubXAub3JnIC0tZW1haWwgdW5rbm93bmNhdXNlckBuZXQtc25tcC5vcmcgIC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLS1zYW4gZW1haWw6dXNlcjEwQHRlc3QubmV0LXNubXAub3JnICROU0NFUlRBUkdTCitVTktOT1dOQ0FVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiB1bmtub3duY2F1c2VyICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRVTktOT1dOQ0FVU0VSRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHVua25vd25jYXVzZXIgY2VydGlmaWNhdGUiCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQUNUVUFMIFRFU1RTCisjCisjIFJ1biB0aGUgYWN0dWFsIGxpc3Qgb2YgdGVzdHMKKyMKKworIyB1c2luZyB1c2VyIDEgLSBhIGNvbW1vbiBuYW1lIG1hcHBlZCBjZXJ0aWZpY2F0ZQorIyAodXNpbmcgdGhlIGRlZmF1bHQgInNubXBhcHAiIGNlcnRpZmljYXRlIGJlY2F1c2Ugd2UgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyKQorRE9TRVRURVNUIHVzZXIxU25tcEFwcCAiJEZMQUdTIgorCisjIG5vdyByZXJ1biB0aGUgdGVzdCBhZnRlciBzcGVjaWZ5aW5nIG91ciBkZWZhdWx0IHVzaW5nIHRoZSAoc2FtZSkgZmluZ2VycHJpbnQKK0NPTkZJR0FQUCAgIGNsaWVudENlcnQgIAkgICRURVNUVVNFUjJGUAorRE9TRVRURVNUIHVzZXIxQ2xpZW50UHViICIkRkxBR1MiCisKKyMgdXNpbmcgdXNlciAyIC0gYSBjb21tb24gbmFtZSBtYXBwZWQgY2VydGlmaWNhdGUgd2l0aCBhIGRpcmVjdCAtVCBGUCByZXF1ZXN0CitET1NFVFRFU1QgdXNlcjJEYXNoVEZQRmxhZyAiLVQgb3VyX2lkZW50aXR5PSRPVEhFUlVTRVJGUCAkRkxBR1MiCisKK0NIRUNLQUdFTlRDT1VOVCA0ICAib3RoZXJ1c2VyIgorCisjIHVzaW5nIHVzZXIgMiwgc3BlY2lmeWluZyB0aGUgZmlsZSBuYW1lIGluc3RlYWQgb2YgdGhlIGZpbmdlcnByaW50CitET1NFVFRFU1QgdXNlcjJEYXNoVEZpbGVGbGFnICItVCBvdXJfaWRlbnRpdHk9b3RoZXJ1c2VyICRGTEFHUyIKKworQ0hFQ0tBR0VOVENPVU5UIDggICJvdGhlcnVzZXIiCisKKyMgdXNpbmcgdXNlciAzIC0gYW4gaW52YWxpZCBjZXJ0aWZpY2F0ZSAobWFwcGVkIGJ1dCBub3QgYXV0aG9yaXplZCkKK0RPRkFJTFNFVFRFU1QgImludmFsaWRVbmF1dGhvcml6ZWRDZXJ0IiAiLVQgb3VyX2lkZW50aXR5PSRJTlZBTElEVVNFUkZQICRGTEFHUyIKKworQ0hFQ0sgImF1dGhvcml6YXRpb25FcnJvciIKKworIyB1c2luZyB1c2VyIDQgLSBhbiB1bm1hcHBlZCBjZXJ0aWZpY2F0ZQorRE9GQUlMU0VUVEVTVCAidW5tYXBwZWRDZXJ0aWZpY2F0ZSIgIi1UIG91cl9pZGVudGl0eT0kVU5NQVBQRURGUCAkRkxBR1MiCisKK0NIRUNLICJmYWlsZWQgcmZjNTM0MyIKKworIyBDaGVjayAqdGhlaXIqIGNlcnRpZmljYXRlIHdpdGggYSBkaWZmZXJlbnQgb25lIHRoYW4gZXhwZWN0ZWQ7IHNob3VsZCBmYWlsCitET0ZBSUxTRVRURVNUICJpbmNvcmVjdFNlcnZlckNlcnRpZmljYXRlIiAiLXIgMCAtVCBvdXJfaWRlbnRpdHk9JE9USEVSVVNFUkZQIC1UIHRoZWlyX2lkZW50aXR5PSRPVEhFUlVTRVJGUCAkRkxBR1MiCisKK0NIRUNLICJmYWlsZWQgdG8gdmVyaWZ5IHNzbCBjZXJ0aWZpY2F0ZSIKKworIyB1c2luZyB1c2VyIDUgLSBhIGNvbXBsZXRlbHkgcmVtYXBwZWQgY2VydGlmaWNhdGUgKGRpcmVjdCBzcGVjaWZpZWQgc2VjbmFtZSkKK0RPU0VUVEVTVCB1c2VyNVJlbWFwcGVkU2VjbmFtZSAiLVQgb3VyX2lkZW50aXR5PSRNQVBQRURVU0VSRlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgNiAtIGEgc3ViamVjdEFsdE5hbWU9ZW1haWwgY2VydGlmaWNhdGUgbWFwcGluZworRE9TRVRURVNUIHVzZXI2U0FORW1haWwgIi1UIG91cl9pZGVudGl0eT0kRU1BSUxVU0VSRlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgNyAtIGEgc3ViamVjdEFsdE5hbWU9ZG5zIGNlcnRpZmljYXRlIG1hcHBpbmcKK0RPU0VUVEVTVCB1c2VyN1NBTkROUyAiLVQgb3VyX2lkZW50aXR5PSRETlNVU0VSRlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgOCAtIGEgc3ViamVjdEFsdE5hbWU9aXB2NCBjZXJ0aWZpY2F0ZSBtYXBwaW5nCitET1NFVFRFU1QgdXNlcjhTQU5JUCAiLVQgb3VyX2lkZW50aXR5PSRJUFVTRVJGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA4IC0gdGVzdCB0aGF0IGNlcnRtYXBwaW5nIHdvcmtzIGZyb20gYSBsb2NhbCBmaWxlbmFtZQorRE9TRVRURVNUIGFmaWxldXNlciAiLVQgb3VyX2lkZW50aXR5PWFmaWxlICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDkgLSBhIENBIHNpZ25lZCBjZXJ0aWZpY2F0ZQorRE9TRVRURVNUIHVzZXI5Q0FTaWduZWRDZXJ0ICItVCBvdXJfaWRlbnRpdHk9JENBVVNFUkZQIC1UIHRydXN0X2NlcnQ9JENBRlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgOWIgLSBhIENBIHNpZ25lZCBjZXJ0aWZpY2F0ZSB3aXRoIGEgdXNlci1iYXNlZCBmcCBtYXBwaW5nCitET1NFVFRFU1QgdXNlcjliQ0FTaWduZWREaXJlY3RNYXAgIi1UIG91cl9pZGVudGl0eT0kQ0FESVJFQ1RGUCAkRkxBR1MiCisKKyMgdXNpbmcgdXNlciA5YyAtIGEgQ0EyIHNpZ25lZCBjZXJ0aWZpY2F0ZSB3aXRoIGEgdXNlci1iYXNlZCBmcCBtYXBwaW5nCitET1NFVFRFU1QgdXNlcjljQ0FTaWduZWREaXJlY3RNYXAgIi1UIG91cl9pZGVudGl0eT0kQ0FESVJFQ1Q5Q0ZQICRGTEFHUyIKKworIyB1c2luZyB1c2VyIDlkIC0gYSBDQTIgc2lnbmVkIGNlcnRpZmljYXRlIG5vIHVzZXItYmFzZWQgZnAgbWFwcGluZworRE9GQUlMU0VUVEVTVCB1c2VyOWRDQVNpZ25lZERpcmVjdE1hcCAiLVQgb3VyX2lkZW50aXR5PSRDQURJUkVDVDlERlAgJEZMQUdTIgorCisjIHVzaW5nIHVzZXIgdW5rbm93biAtIHRoZSBzZXJ2ZXIgd2lsbCBub3QgaGF2ZSBzZWVuIHRoaXMgZmluZ2VycHJpbnQgYXQgYWxsCitDQVBUVVJFICJzbm1wZ2V0IC1UIG91cl9pZGVudGl0eT0kVU5LTk9XTlVTRVIgLVQgdHJ1c3RfY2VydD0kQ0FGUCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuNi4wIgorCisjIGRpZmZlcmVudCB0eXBlcyBvZiBmYWlsdXJlIG1lc3NhYWdlcyBmb3IgdGxzL2R0bHMuLi4KK2lmIFsgJFNOTVBfVFJBTlNQT1JUX1NQRUMgPSBkdGxzdWRwIF07IHRoZW4KKyAgICBDSEVDSyAgICAgICAgICAgICAgImZhaWxlZCByZmM1MzQzIGNvbnRleHRFbmdpbmVJRCBwcm9iaW5nIgorICAgIENIRUNLQUdFTlRDT1VOVCAgMSAiVExTIEVycm9yOiBubyBjZXJ0aWZpY2F0ZSByZXR1cm5lZCIKK2Vsc2UKKyAgICBDSEVDSyAgICAgICAgICAgICAgImZhaWxlZCB0byBzc2xfY29ubmVjdCIKKyAgICBDSEVDS0FHRU5UQ09VTlQgIDEgIkZhaWxlZCBTU0xfYWNjZXB0IgorZmkKKworIyB1c2luZyB0aGUgdXNlciB3aXRob3V0IGEga25vd24gZmluZ2VycHJpbnQgYnV0IHdpdGggYSBrbm93biBDQQorRE9TRVRURVNUIHVzZXJOZXdGcm9tQ0EgIiAtVCB0cnVzdF9jZXJ0PSRDQUZQIC1UIG91cl9pZGVudGl0eT0kVU5LTk9XTkNBVVNFUkZQICRGTEFHUyIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1Rsc1ZhcnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJhODRmOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVGxzVmFycwpAQCAtMCwwICsxLDU2IEBACisjIS9iaW4vc2gKKworZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBUUkFQRF9QT1JUCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworZXhwb3J0IE5FVF9TTk1QX0NSVF9DRkdUT09MPSIke2J1aWxkZGlyfS9uZXQtc25tcC1jb25maWciCitOU0NFUlQ9InBlcmwgJFNOTVBfQkFTRURJUi8uLi8uLi8uLi9sb2NhbC9uZXQtc25tcC1jZXJ0IC1JIgorTlNDRVJUQVJHUz0iLUMgJFNOTVBfVE1QRElSIgorCitET1NFVFRFU1QoKSB7CisgIHZhbHVlPSQxCisgIGFyZ3M9JDIKKworICAjIFNOTVB2Mi1NSUI6OnN5c0xvY2F0aW9uLjAKKyAgQ0FQVFVSRSAic25tcHNldCAkYXJncyAuMS4zLjYuMS4yLjEuMS42LjAgcyAnJHZhbHVlJyIKKworICBDQVBUVVJFICJzbm1wZ2V0ICRhcmdzIC4xLjMuNi4xLjIuMS4xLjYuMCIKKworICBDSEVDSyAiU1RSSU5HOiAnJHZhbHVlJyIKK30KKworCitET0ZBSUxTRVRURVNUKCkgeworICB2YWx1ZT0kMQorICBhcmdzPSQyCisKKyAgIyBTTk1QdjItTUlCOjpzeXNMb2NhdGlvbi4wCisgIENBUFRVUkUgInNubXBzZXQgJGFyZ3MgLjEuMy42LjEuMi4xLjEuNi4wIHMgJyR2YWx1ZSciCisKKyAgQ0FQVFVSRSAic25tcGdldCAkYXJncyAuMS4zLjYuMS4yLjEuMS42LjAiCisKKyAgQ0hFQ0tDT1VOVCAwICIkdmFsdWUiCit9CisKK0RPVFJBUFRFU1QoKSB7CisgIHZhbHVlPSQxCisgIGFyZ3M9JDIKKworICAjIElGLU1JQjo6bGlua1VwCisgIENBUFRVUkUgInNubXB0cmFwICRhcmdzIDAgLjEuMy42LjEuNi4zLjEuMS41LjQgc3lzdGVtLnN5c0NvbnRhY3QuMCBzICR2YWx1ZSIKKworICBDSEVDS1RSQVBEICJTVFJJTkc6ICR2YWx1ZSIKK30KKworRE9GQUlMVFJBUFRFU1QoKSB7CisgIHZhbHVlPSQxCisgIGFyZ3M9JDIKKworICAjIElGLU1JQjo6bGlua1VwCisgIENBUFRVUkUgInNubXB0cmFwICRhcmdzIDAgLjEuMy42LjEuNi4zLjEuMS41LjQgc3lzdGVtLnN5c0NvbnRhY3QuMCBzICR2YWx1ZSIKKworICBDSEVDS1RSQVBEQ09VTlQgMCAiJHZhbHVlIgorfQorCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TVHNtUHJlZml4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMGY4ZDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvU1RzbVByZWZpeApAQCAtMCwwICsxLDg2IEBACisjIS9iaW4vc2gKKworLiBTVGxzVmFycworCisjIHRoaXMgZmlsZSBjb250YWlucyB0ZXN0cyBjb21tb24gdG8gYm90aCB0bHMgYW5kIGR0bHMgdXNhZ2VzCisKK2V4cG9ydCBORVRfU05NUF9DUlRfQ0ZHVE9PTD0iJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIgorTlNDRVJUPSJwZXJsICRTTk1QX0JBU0VESVIvLi4vLi4vLi4vbG9jYWwvbmV0LXNubXAtY2VydCIKK05TQ0VSVEFSR1M9Ii1JIC1DICRTTk1QX1RNUERJUiIKKworVExTRElSPSRTTk1QX1RNUERJUi90bHMKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlIHRoZSBjZXJ0aWZpY2F0ZXMKKworIyBjcmVhdGUgdGhlIGNhCitDQVBUVVJFICROU0NFUlQgZ2VuY2EgLS1jbiBjYS1uZXQtc25tcC5vcmcgICROU0NFUlRBUkdTCisKKyMgc25tcGQKK0hPU1ROQU1FPWBob3N0bmFtZWAKK0NBUFRVUkUgJE5TQ0VSVCBnZW5jZXJ0IC0td2l0aC1jYSBjYS1uZXQtc25tcC5vcmcgLXQgc25tcGQgLS1jbiAkSE9TVE5BTUUgJE5TQ0VSVEFSR1MKK1NFUlZFUkZQPWAkTlNDRVJUIHNob3djZXJ0cyAtLWZpbmdlcnByaW50IC0tYnJpZWYgc25tcGQgICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRTRVJWRVJGUCIgIiIgImdlbmVyYXRlZCBmaW5nZXJwcmludCBmb3Igc25tcGQgY2VydGlmaWNhdGUiCisKKyMgdXNlcgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyMgorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLS13aXRoLWNhIGNhLW5ldC1zbm1wLm9yZyAtdCBzbm1wYXBwMiAtLWNuICd0ZXN0dXNlcjInICAkTlNDRVJUQVJHUworVEVTVFVTRVIyRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwMiAkTlNDRVJUQVJHU2AKK0NIRUNLVkFMVUVJU05UICIkVEVTVFVTRVIyRlAiICIiICJnZW5lcmF0ZWQgZmluZ2VycHJpbnQgZm9yIHRlc3R1c2VyMiBjZXJ0aWZpY2F0ZSIKKworQ09ORklHQVBQIHNlcnZlckNlcnQgJFNFUlZFUkZQCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgY2VydFNlY05hbWUgMTAgICRURVNUVVNFUjJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKK0NPTkZJR0FHRU5UICByd3VzZXIgLXMgdHNtICRUU01fUFJFRklYOnRlc3R1c2VyMiBhdXRocHJpdgorQ09ORklHQUdFTlQgcm9jb21tdW5pdHkgcHVibGljCisKKyMKKyMgU3RhcnQgdGhlIGFnZW50CisjCitBR0VOVF9GTEFHUz0iLUR0c20gdWRwOjk5OTkiCitGTEFHUz0iLU9uICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCitTVEFSVEFHRU5UCisKK0NBUFRVUkUgInNubXBnZXQgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xOTAuMS4yLjEuMCIKK0NIRUNLICIuMS4zLjYuMS4yLjEuMTkwLjEuMi4xLjAgPSBJTlRFR0VSOiBmYWxzZSIKKworIyB1c2luZyB1c2VyIDEgLSBhIGNvbW1vbiBuYW1lIG1hcHBlZCBjZXJ0aWZpY2F0ZQorIyAodXNpbmcgdGhlIGRlZmF1bHQgInNubXBhcHAiIGNlcnRpZmljYXRlIGJlY2F1c2Ugd2UgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyKQorQ0FQVFVSRSAic25tcGdldCAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAgICAgICAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworIyB1c2luZyB1c2VyIDIgc2hvdWxkIG5vdyBmYWlsIGJlY2F1c2Ugbm8gcHJlZml4IGlzIGFwcGxpZWQKK0NBUFRVUkUgInNubXBnZXQgLVQgb3VyX2lkZW50aXR5PXNubXBhcHAyIC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK0NIRUNLQ09VTlQgMCAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKK0NIRUNLICJhdXRob3JpemF0aW9uRXJyb3IiCisKKyMgc2V0IHRoZSBUU00gcHJlZml4IHNjYWxhciB0byAxIHRvIHR1cm4gb24gcHJlZml4aW5nCitDQVBUVVJFICJzbm1wc2V0IC1Ec3NsICRGTEFHUyAuMS4zLjYuMS4yLjEuMTkwLjEuMi4xLjAgaSAxIgorCisKKyMgdXNpbmcgdXNlciAyIHNob3VsZCBub3cgd29yayBhbmQgdGhlIHByZWZpeCBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkCisjIHRvIHRoZSBzZWN1cml0eU5hbWUsIHNvIHRoZSBhZ2VudCBub3cgYWNjZXB0cyBpdAorQ0FQVFVSRSAic25tcGdldCAtVCBvdXJfaWRlbnRpdHk9c25tcGFwcDIgLURzc2wgJEZMQUdTIC4xLjMuNi4xLjIuMS4xOTAuMS4yLjEuMCIKKworQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xOTAuMS4yLjEuMCA9IElOVEVHRVI6IHRydWUiCisKKyMgdXNpbmcgdXNlciAxIHNob3VsZCBub3cgZmFpbCBiZWNhdXNlIHRoZSBwcmVmaXggaGFzIGFkZGVkIHRvIHRoZQorIyBzZWN1cml0eU5hbWUsIHNvIHRoZSBhZ2VudCBub3cgYWNjZXB0cyBpdAorQ0FQVFVSRSAic25tcGdldCAtRHNzbCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDS0NPVU5UIDAgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCitDSEVDSyAiYXV0aG9yaXphdGlvbkVycm9yIgorCitDQVBUVVJFICJzbm1wZ2V0IC12IDEgLWMgcHVibGljIDEyNy4wLjAuMTo5OTk5IC4xLjMuNi4xLjIuMS4xOTAuMS4yLjEuMCIKKworIyBjbGVhbnVwCitTVE9QQUdFTlQKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxRHRsc1VzZXJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDFEdGxzVXNlcl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMTBjYWVkZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAxRHRsc1VzZXJfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIHVzZXIgY2VydGlmaWNhdGUgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKKworLiAuL1NUbHNVc2VycwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMDJUbHNVc2VyX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAyVGxzVXNlcl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNmZTExOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTAyVGxzVXNlcl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCB1c2VyIGNlcnRpZmljYXRlIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc1VzZXJzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExMUR0bHNTZXJ2ZXJfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFEdGxzU2VydmVyX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YjQyNDk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTFEdGxzU2VydmVyX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBEVExTLVVEUCBzZXJ2ZXIgY2VydGlmaWNhdGUgdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc05hbWUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEyVGxzU2VydmVyX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEyVGxzU2VydmVyX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGVmYTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTJUbHNTZXJ2ZXJfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1Agc2VydmVyIGNlcnRpZmljYXRlIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc05hbWUKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTEzRHRsc1Nhbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM0R0bHNTYW5fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZGIzYzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExM0R0bHNTYW5fc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIHNlcnZlciBTQU4gdGVzdHMKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc1NhbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTRUbHNTYW5fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTRUbHNTYW5fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWU4YmMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNFRsc1Nhbl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBzZXJ2ZXIgU0FOIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc1NhbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTVEdGxzU2FuU2Vzc2lvbl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExNUR0bHNTYW5TZXNzaW9uX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWQ1ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTVEdGxzU2FuU2Vzc2lvbl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgc2VydmVyIFNBTiB0ZXN0cyB1c2luZyBzZXNzaW9uIGRlc3Rob3N0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCisKKy4gLi9TVGxzU2FuU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTZUbHNTYW5TZXNzaW9uX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE2VGxzU2FuU2Vzc2lvbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkxZmNmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE2VGxzU2FuU2Vzc2lvbl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBzZXJ2ZXIgU0FOIHRlc3RzIHVzaW5nIHNlc3Npb24gZGVzdGhvc3QKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGxzdGNwCisKKy4gLi9TVGxzU2FuU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMTdEdGxzQ05TZXNzaW9uX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3RHRsc0NOU2Vzc2lvbl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJlZWE1NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTE3RHRsc0NOU2Vzc2lvbl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgc2VydmVyIGNvbW1vbk5hbWUgdGVzdHMgdXNpbmcgc2Vzc2lvbiBkZXN0aG9zdAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc0NOU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMThUbHNDTlNlc3Npb25fc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMThUbHNDTlNlc3Npb25fc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwNWFiNDYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDExOFRsc0NOU2Vzc2lvbl9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBzZXJ2ZXIgY29tbW9uTmFtZSB0ZXN0cyB1c2luZyBzZXNzaW9uIGRlc3Rob3N0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc0NOU2Vzc2lvbgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFEdGxzVHJhcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEyMUR0bHNUcmFwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzdjN2JjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjFEdGxzVHJhcF9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgdHJhcCB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc1RyYXBkVXNlcgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMjJUbHNUcmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIyVGxzVHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZThhZWUxNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTIyVGxzVHJhcF9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCB0cmFwIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc1RyYXBkVXNlcgpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzFEdGxzQWdlbnRUcmFwX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxRHRsc0FnZW50VHJhcF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODQ2ZmFhOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTMxRHRsc0FnZW50VHJhcF9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgYWdlbnQgdHJhcCB0ZXN0cworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9ZHRsc3VkcAorCisuIC4vU1Rsc0FnZW50VHJhcApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJUbHNBZ2VudFRyYXBfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxMzJUbHNBZ2VudFRyYXBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiNDQwMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDEzMlRsc0FnZW50VHJhcF9zaW1wbGUKQEAgLTAsMCArMSwxNSBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVExTLVRDUCBhZ2VudCB0cmFwIHRlc3RzCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorCisuIC4vU1Rsc0FnZW50VHJhcApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNDFEdGxzQ3JsX3NpbXBsZSBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxRHRsc0NybF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTJhOGU0ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQxRHRsc0NybF9zaW1wbGUKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgQ1JMIEhhbmRsaW5nCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gLi9TQ3JsCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MlRsc0NybF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE0MlRsc0NybF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyM2MxMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTQyVGxzQ3JsX3NpbXBsZQpAQCAtMCwwICsxLDE4IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUTFMtVENQIENSTCBIYW5kbGluZworCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiAuL1NDcmwKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxRHRsc0NpcGhlcnNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1QxNTFEdGxzQ2lwaGVyc19zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiYmVjNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUxRHRsc0NpcGhlcnNfc2ltcGxlCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIERUTFMtVURQIENpcGhlciBTZWxlY3Rpb24KKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiBTQ2lwaGVyVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMTUyVGxzQ2lwaGVyc19zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MlRsc0NpcGhlcnNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MjhkYzkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDE1MlRsc0NpcGhlcnNfc2ltcGxlCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1AgQ2lwaGVyIFNlbGVjdGlvbgorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiBTQ2lwaGVyVGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMjAwVGxzSXB2Nl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMFRsc0lwdjZfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlMzdmNGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDIwMFRsc0lwdjZfc2ltcGxlCkBAIC0wLDAgKzEsMjkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1Agb3ZlciBJUFY2CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVExTSVBWNl9ET01BSU4KKworIyBlbnN1cmUgd2UgaGF2ZSBhIGxvY2FsaG9zdDYgZW50cnkKKworIyBYWFg6IHRoaXMgc3RlbXMgZnJvbSBicm9rZW4gaXNzdWVzIGluIG9wZW5zc2wgdGhhdCByZWZ1c2UgWzo6MV06CisjIHN0eWxlIGFjY2VwdCBzdHJpbmdzIChpdCB3b3JrcyBmb3IgY2xpZW50IGNvbm5lY3Rpb25zKS4KK2dyZXAgbG9jYWxob3N0NiAvZXRjL2hvc3RzID4gL2Rldi9udWxsIDI+JjEKK2lmIFsgJD8gPSAxIF0gOyB0aGVuCisgICAgU0tJUCBUaGlzIHRlc3QgcmVxdWlyZXMgYSBsb2NhbGhvc3Q2IGVudHJ5IGluIC9ldGMvaG9zdHMKK2ZpCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorU05NUF9URVNUX0RFU1Q9J2xvY2FsaG9zdDY6JworZXhwb3J0IFNOTVBfVFJBTlNQT1JUX1NQRUMKK2V4cG9ydCBTTk1QX1NOTVBEX1BPUlQKK2V4cG9ydCBTTk1QX1RFU1RfREVTVAorCisuIC4uL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMFRsc1BlcmwudCBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAwVGxzUGVybC50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiOGVkYjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMFRsc1BlcmwudApAQCAtMCwwICsxLDggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIFRMUy9UQ1AgVGVzdAorCiskYWdlbnRhZGRyZXNzID0gInRsc3RjcDpsb2NhbGhvc3Q6OTg3NSI7CiskZmVhdHVyZSA9ICJORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOIjsKKworZG8gIiRFTlZ7J3NyY2Rpcid9L3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9TMzAwdGxzcGVybC5wbCI7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMUR0bHNQZXJsLnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDMwMUR0bHNQZXJsLnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5ODBjNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UMzAxRHRsc1BlcmwudApAQCAtMCwwICsxLDggQEAKKyMhL3Vzci9iaW4vcGVybAorCisjIEhFQURFUiBQZXJsIERUTFMvVURQIFRlc3QKKworJGFnZW50YWRkcmVzcyA9ICJkdGxzdWRwOmxvY2FsaG9zdDo5ODc1IjsKKyRmZWF0dXJlID0gIk5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4iOworCitkbyAiJEVOVnsnc3JjZGlyJ30vdGVzdGluZy9mdWxsdGVzdHMvdGxzL1MzMDB0bHNwZXJsLnBsIjsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3Rscy9UNDAxRHRsc1RzbVByZWZpeF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMUR0bHNUc21QcmVmaXhfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjODVhZDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMUR0bHNUc21QcmVmaXhfc2ltcGxlCkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRTTSBwcmVmaXhpbmcgc3VwcG9ydCBmb3IgRFRMUy9VRFAKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPWR0bHN1ZHAKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKK1RTTV9QUkVGSVg9ZHRscworCisuIC4vU1RzbVByZWZpeApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJUbHNUc21QcmVmaXhfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdGxzL1Q0MDJUbHNUc21QcmVmaXhfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjNjJlZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90bHMvVDQwMlRsc1RzbVByZWZpeF9zaW1wbGUKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVFNNIHByZWZpeGluZyBzdXBwb3J0IGZvciBUTFMvVENQCisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UTFNUQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRsc3RjcAorVFNNX1BSRUZJWD10bHMKKworLiAuL1NUc21QcmVmaXgKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9TdGxzdGVzdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFiMmI4MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvU3Rsc3Rlc3RzCkBAIC0wLDAgKzEsNDkgQEAKKyMhL2Jpbi9zaAorCisjIHRoaXMgZmlsZSBjb250YWlucyB0ZXN0cyBjb21tb24gdG8gYm90aCB0bHMgYW5kIGR0bHMgdXNhZ2VzCisKK2V4cG9ydCBORVRfU05NUF9DUlRfQ0ZHVE9PTD0iJHtidWlsZGRpcn0vbmV0LXNubXAtY29uZmlnIgorTlNDRVJUPSJwZXJsICRTTk1QX0JBU0VESVIvLi4vLi4vLi4vbG9jYWwvbmV0LXNubXAtY2VydCAtSSIKK05TQ0VSVEFSR1M9Ii1DICRTTk1QX1RNUERJUiIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMgQ3JlYXRlIHRoZSBjZXJ0aWZpY2F0ZXMKKworIyBzbm1wZAorSE9TVE5BTUU9YGhvc3RuYW1lYAorQ0FQVFVSRSAkTlNDRVJUIGdlbmNlcnQgLXQgc25tcGQgICAtLWNuICRIT1NUTkFNRSAkTlNDRVJUQVJHUworU0VSVkVSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wZCAgJE5TQ0VSVEFSR1NgCitDSEVDS1ZBTFVFSVNOVCAiJFNFUlZFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciBzbm1wZCBjZXJ0aWZpY2F0ZSIKKworIyB1c2VyCitDQVBUVVJFICROU0NFUlQgZ2VuY2VydCAtdCBzbm1wYXBwIC0tY24gJ3Rlc3R1c2VyJyAgJE5TQ0VSVEFSR1MKK1RFU1RVU0VSRlA9YCROU0NFUlQgc2hvd2NlcnRzIC0tZmluZ2VycHJpbnQgLS1icmllZiBzbm1wYXBwICROU0NFUlRBUkdTYAorQ0hFQ0tWQUxVRUlTTlQgIiRURVNUVVNFUkZQIiAiIiAiZ2VuZXJhdGVkIGZpbmdlcnByaW50IGZvciB0ZXN0dXNlciBjZXJ0aWZpY2F0ZSIKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBDb25maWd1cmUgdGhlIC5jb25mIGZpbGVzCisKK0NPTkZJR0FQUCBzZXJ2ZXJDZXJ0ICRTRVJWRVJGUAorCisjIGNvbW1vbiBuYW1lIG1hcHBpbmdzCitDT05GSUdBR0VOVCBjZXJ0U2VjTmFtZSA5ICAkVEVTVFVTRVJGUCAgICAgLS1jbgorQ09ORklHQUdFTlQgIHJ3dXNlciAtcyB0c20gdGVzdHVzZXIgYXV0aHByaXYKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBSdW4gdGhlIGFjdHVhbCBsaXN0IG9mIHRlc3RzCisjCisKKyMgc3RhcnQgdGhlIGFnZW50IHVwCitGTEFHUz0iLU9uICRTTk1QX0ZMQUdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQiCisKK1NUQVJUQUdFTlQKKworIyB1c2luZyB1c2VyIDEgLSBhIGNvbW1vbiBuYW1lIG1hcHBlZCBjZXJ0aWZpY2F0ZQorIyAodXNpbmcgdGhlIGRlZmF1bHQgInNubXBhcHAiIGNlcnRpZmljYXRlIGJlY2F1c2Ugd2UgZG9uJ3Qgc3BlY2lmeSBhbm90aGVyKQorQ0FQVFVSRSAic25tcGdldCAkRkxBR1MgLjEuMy42LjEuMi4xLjEuMy4wIgorCitDSEVDSyAgICAgICAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworU1RPUEFHRU5UCisKK0ZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uYjMzZmY1NzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1N0cmFuc3BvcnQKQEAgLTAsMCArMSwxOCBAQAorU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCisKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworIyBjb25maWd1cmUgdGhlIGFnZW50IHRvIGFjY2VwdCB1c2VyIGluaXRpYWwgd2l0aCBub0F1dGhOb1ByaXYKKy4gLi4vZGVmYXVsdC9TdjNjb25maWcKKworU1RBUlRBR0VOVAorCitDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkTk9BVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCisKK1NUT1BBR0VOVAorCitDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKKworRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMwMHVkcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YTY3ZjAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMDB1ZHBfc2ltcGxlCkBAIC0wLDAgKzEsMTUgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFVEUCBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1VEUF9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dWRwCisKKy4gLi9TdHJhbnNwb3J0CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMTB0Y3Bfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGM2YThhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzEwdGNwX3NpbXBsZQpAQCAtMCwwICsxLDE1IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUQ1AgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9UQ1BfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXRjcAorCisuIC4vU3RyYW5zcG9ydApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzIwdWRwdjZfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNjA3YzYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMjB1ZHB2Nl9zaW1wbGUKQEAgLTAsMCArMSwxNiBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgVURQNiBUcmFuc3BvcnQKKworU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCisKKyMKKyMgQmVnaW4gdGVzdAorIworCitTTk1QX1RSQU5TUE9SVF9TUEVDPXVkcDYKK1NOTVBfVEVTVF9ERVNUPSJbOjoxXToiCisKKy4gLi9TdHJhbnNwb3J0CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzMzB0Y3B2Nl9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDllYjM1MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDMzMHRjcHY2X3NpbXBsZQpAQCAtMCwwICsxLDE2IEBACisjIS9iaW4vc2gKKworLiAuLi9zdXBwb3J0L3NpbXBsZV9ldmFsX3Rvb2xzLnNoCisKK0hFQURFUiBUQ1A2IFRyYW5zcG9ydAorCitTS0lQSUZOT1QgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KKworIworIyBCZWdpbiB0ZXN0CisjCisKK1NOTVBfVFJBTlNQT1JUX1NQRUM9dGNwNgorU05NUF9URVNUX0RFU1Q9Ils6OjFdOiIKKworLiAuL1N0cmFuc3BvcnQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzUwdW5peF9zaW1wbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDUzYmExZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM1MHVuaXhfc2ltcGxlCkBAIC0wLDAgKzEsMTkgQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFVuaXggVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9VTklYX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz11bml4CitTTk1QX1RFU1RfREVTVD0ke1NOTVBfVE1QRElSfS90ZXN0dW5peHNvY2tldAorCisuIC4vU3RyYW5zcG9ydAorCisjIGNsZWFudXAKK3JtIC1mICRTTk1QX1RFU1RfREVTVApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjBkdGxzdWRwX3NpbXBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODk5Mzc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzYwZHRsc3VkcF9zaW1wbGUKQEAgLTAsMCArMSwxOCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgRFRMUy1VRFAgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz1kdGxzdWRwCitleHBvcnQgU05NUF9UUkFOU1BPUlRfU1BFQworZXhwb3J0IFNOTVBfU05NUERfUE9SVAorZXhwb3J0IFNOTVBfVEVTVF9ERVNUCisKKy4gLi9TdGxzdGVzdHMKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvVDM2MXRsc3RjcF9zaW1wbGUgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5NzJhMmUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzNjF0bHN0Y3Bfc2ltcGxlCkBAIC0wLDAgKzEsMTggQEAKKyMhL2Jpbi9zaAorCisuIC4uL3N1cHBvcnQvc2ltcGxlX2V2YWxfdG9vbHMuc2gKKworSEVBREVSIFRMUy1UQ1AgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBORVRTTk1QX1RSQU5TUE9SVF9EVExTVURQX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworU05NUF9UUkFOU1BPUlRfU1BFQz10bHN0Y3AKK2V4cG9ydCBTTk1QX1RSQU5TUE9SVF9TUEVDCitleHBvcnQgU05NUF9TTk1QRF9QT1JUCitleHBvcnQgU05NUF9URVNUX0RFU1QKKworLiAuL1N0bHN0ZXN0cwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlIGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy9UMzk5YWxpYXNfc2ltcGxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmNDgzMTEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL1QzOTlhbGlhc19zaW1wbGUKQEAgLTAsMCArMSwyNCBAQAorIyEvYmluL3NoCisKKy4gLi4vc3VwcG9ydC9zaW1wbGVfZXZhbF90b29scy5zaAorCitIRUFERVIgQUxJQVMgVHJhbnNwb3J0CisKK1NLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQorU0tJUElGTk9UIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTgorCisjCisjIEJlZ2luIHRlc3QKKyMKKworIyBjb25maWd1cmUgdGhlIGFnZW50IHRvIGFjY2VwdCB1c2VyIGluaXRpYWwgd2l0aCBub0F1dGhOb1ByaXYKKy4gLi4vZGVmYXVsdC9TdjNjb25maWcKKworQ09ORklHQVBQIGFsaWFzIGFsaWFzdGVzdCB1ZHA6bG9jYWxob3N0OiRTTk1QX1NOTVBEX1BPUlQKK0NPTkZJR0FHRU5UICdbc25tcF0nIGFsaWFzIGFsaWFzdGVzdCB1ZHA6bG9jYWxob3N0OiRTTk1QX1NOTVBEX1BPUlQKKworU05NUF9UUkFOU1BPUlRfU1BFQz1hbGlhcworU05NUF9URVNUX0RFU1Q9ImFsaWFzdGVzdCIKK1NOTVBfU05NUERfUE9SVD0iIgorCisuIC4vU3RyYW5zcG9ydApkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0IGIvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LWxvY2FsaG9zdC5jZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNDliMjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LmNlcnQKQEAgLTAsMCArMSwyMyBAQAorLS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCitNSUlEMmpDQ0FzS2dBd0lCQWdJSkFJU0VRUmdaSlhINE1BMEdDU3FHU0liM0RRRUJCUVVBTUZFeEN6QUpCZ05WCitCQVlUQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVPTUF3R0ExVUVCeE1GUkdGMmFYTXhFVEFQQmdOVkJBb1RDRTVsCitkQzFUVGsxUU1SSXdFQVlEVlFRREV3bHNiMk5oYkdodmMzUXdIaGNOTURrd056QTVNak16TmpNd1doY05NRGt3CitPREE0TWpNek5qTXdXakJSTVFzd0NRWURWUVFHRXdKVlV6RUxNQWtHQTFVRUNCTUNRMEV4RGpBTUJnTlZCQWNUCitCVVJoZG1sek1SRXdEd1lEVlFRS0V3aE9aWFF0VTA1TlVERVNNQkFHQTFVRUF4TUpiRzlqWVd4b2IzTjBNSUlCCitJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBNHlqY1E3bmpjd255Nk5zRmdNNVd3RWNWCitHdFZlK2gyazQxSlU5bEo5STFFZzdrUnNTZko3ejlqWDVKWHBIWFVYcTU0TXQvc0xPRGVoZXlFOHo1WndqcGxjCitNR3hMaVBkUlJwLzNCbWxoM3FyUExSTFIxN0IrMU1rY0l6OVVCVXV0MlB1c3hFZUNlQS9nOFJWRXdLOG9QZ2VyCis0SStLYVhvblhXbWhtODVFRUhsV21aSFREVERhNk1YVVJOcytFcWNRcldSZ0h5ZjhiUWh3cFNqQnptYlV0VnE1CitpcFZOV21xeFBsU1RrajVDcWtyYk5ka3BPSUJ2WjZUaEZmaTJyd1BETytZenJ1Y0ZjTStCZktSQ0RCY0M0VHNOCisyejBTMUlzZUpHVE5PMWlpZE1yakNWem9JYk1CK0dvdVhqTEpYQXVMSUYwWDNkUCt5T1p6ZVN0NUoydkNnUUlECitBUUFCbzRHME1JR3hNQjBHQTFVZERnUVdCQlIrWmR1TkFHdmJBdGpvOCs3RFBVT0k1Q3BRUmpDQmdRWURWUjBqCitCSG93ZUlBVWZtWGJqUUJyMndMWTZQUHV3ejFEaU9RcVVFYWhWYVJUTUZFeEN6QUpCZ05WQkFZVEFsVlRNUXN3CitDUVlEVlFRSUV3SkRRVEVPTUF3R0ExVUVCeE1GUkdGMmFYTXhFVEFQQmdOVkJBb1RDRTVsZEMxVFRrMVFNUkl3CitFQVlEVlFRREV3bHNiMk5oYkdodmMzU0NDUUNFaEVFWUdTVngrREFNQmdOVkhSTUVCVEFEQVFIL01BMEdDU3FHCitTSWIzRFFFQkJRVUFBNElCQVFDYTIrNXR6K2ZtZ3c5aDhBRjlsKys4TTFMbnpxcm1zdnk0NXBoeHg1Zi9yWmU4CitCcnNwTWxyVDZiS2NNOUNUcWV6amtEWk9yR0V1WXZjYk1lYTJudGxYRzBDSU14aFdwZ2N6d3haaXpHWUlONmYxCitDSzVzaVBsT3pLT2Jwa0F3VWpXYkxtN04yQkpHS3AzRk1xMTFKdDMxdFV3SlRCYzV2aVl6V0JDUVY0Q3hWb0w1CitNcU1mVnlLak9LMGVxZ012dHJSZ1o2dC8wOThPaUU0VVNoZVcrKytiMHp6bzhVbS9ZSUE5SlFtQ2JaNGJoNmpkCisvQWdaaEtSUjViWGlPR21DTFZ3ZURWNE1UaTEyWTI4NUdCYnlsYmREdWo4WVY3bXU3TnpPbjVrSjZ4STAwVnVjCitiR1d0ZGNwRUdrVzdabjRZQ3V4c3pwcXRNM2pMR1pIQ1VxQ3VLU2VQCistLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LnByaXYgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtbG9jYWxob3N0LnByaXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmUyYThlYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC1sb2NhbGhvc3QucHJpdgpAQCAtMCwwICsxLDI3IEBACistLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tCitNSUlFcFFJQkFBS0NBUUVBNHlqY1E3bmpjd255Nk5zRmdNNVd3RWNWR3RWZStoMms0MUpVOWxKOUkxRWc3a1JzCitTZko3ejlqWDVKWHBIWFVYcTU0TXQvc0xPRGVoZXlFOHo1WndqcGxjTUd4TGlQZFJScC8zQm1saDNxclBMUkxSCisxN0IrMU1rY0l6OVVCVXV0MlB1c3hFZUNlQS9nOFJWRXdLOG9QZ2VyNEkrS2FYb25YV21obTg1RUVIbFdtWkhUCitEVERhNk1YVVJOcytFcWNRcldSZ0h5ZjhiUWh3cFNqQnptYlV0VnE1aXBWTldtcXhQbFNUa2o1Q3FrcmJOZGtwCitPSUJ2WjZUaEZmaTJyd1BETytZenJ1Y0ZjTStCZktSQ0RCY0M0VHNOMnowUzFJc2VKR1ROTzFpaWRNcmpDVnpvCitJYk1CK0dvdVhqTEpYQXVMSUYwWDNkUCt5T1p6ZVN0NUoydkNnUUlEQVFBQkFvSUJBREg0bmlQajg2NHQ1UnJtCitlNXB2U2RRNGp1TDlSMHg4VXZhUytRL0s2NjVtUFhsTTRnbU9aMEE4OHBsZGhRK3UzNHNvVktId2Z2SmFBcE1FCitwOHoreWpvRWNLeFNWbmVGK0lJeDFIUzdvQVVNekZDZEVENkRuQk1SUHJoZVNReDFMb1JLTVNKb25NSHV0RXcwCitvcEJFdC9TVldYRW9Bb25iam1kVlFuRDAraklwSlJIWXZQajhUV0d0djdWbDduSFZUUUJVWXkramQxQ0JRNGpBCitlbUhLNUlHeCsreXRyZk5YQTF1RGEzOHQ4Y1NIZzJLcHI4dmh3a3paV1Z4c2tTNDZ3U1Avc1BCcUsvd2crRnhkCis4V292YUdYcGl5TGIyS2oxNXJIQnFkNXdGZUtIR0pJL1EvWDRxVnZ4TGpLR2VGSjFHRE52dmc4bWV2Ulo5UmVpCit5SUJ1OG9VQ2dZRUE4OTVXeGVhQzBTOGRLWlZBUjdlWExhdUhVUS9sQUlqcWw4T3Rkc0hCZnBUUkxXdnM5SXBRCis4eTBuNHNnY0IvNGlhQlZWcDhXNDE0emp1dEN4WEpycTVaSEtPaTV6VnFwUHNhbWtLUVluR0tmYlUycTBXcHRECitUMXoycExTazFML01IamhidXdaYmUwSHhmN3ZQZzEwbG91a0ZsVUdrRWFqYUhLT25oeTEvQnRjQ2dZRUE3blc3Cis0Vm1WY0RNOHlZYmxOTlFQdjJUSG9vd1pKbFNUOXY3K1E5cGpvWU1ZdnJ1UVdLY1p5SWpGU3Q5aGV0cmZCdHhPCisrUXhVcXZmQjhkL1JTemc3d0Y3QW1XSGEzRWZnVDdoM1g4Z2xoN2lzYjlZSVJuNnFCdHh5c1dUWFJxTkdNK1dmCitoeHlsRlFYZXpKUFowaFNiZFhaVGhod3Z2ekQ0MVpianEzWEp6bWNDZ1lFQW9BNE1PNFRuMU8wc0lhK2dhYkY0CitHblJhc254Ukc0SEJIbXhDUEJBOHM1eHVrWFlsSmZabDNNU0ZTaFYyT0ZTMk5rUFNYUE9yTm1WMHpaYk00VytYCit2YVpxNkxhMTRtcVROWktXZUlwZVBKTm1vcUFFMFBiWVBZMVJINWFrSERIcGdPZ1NaSFJ1dEQzNmg1QTNTUXRvCitlVHlnK200RGhjZWhwMnhOdHEzSWtpOENnWUVBM3ZQUFRWeHYvMjY0aUFnSzU4RGFWRzNLeGV6Tld1dzdSL1dVCitFQ2J4ZmtKUGNZMTI0WnlpMjc4ZEQrc1pmaitEeFN0WTN6d3JNWXJpbDk1WEZrZ21mYTlaems4U3pXQ2FsbzczCitkZU54UzV0Y0JsaU1kalRaamY2eGNiRENJclpuM2YvMGp1UTJhUmlLL3FYQ1E4eW1xVVdQeEZVNFF6OXJlSEJTCit2NjRxbUVNQ2dZRUFzdW1xK2pVb2EzcVluYTQ1dnlCTVFmNk5KTFdDRllYbG9BdEtWVEVDQ2I4OFQ2TVZ5ck9FCitjeWowWWJlaytpZXpOOHRiSkhxaVNXVnRuUkE5a2pyQzBBcndPS0RpcE5GUmtGb2dwVVJhanpiL0xuVVFkVytQCityT3ROdUxhTm5MVm8ya2lLNFFOYmQrM0JKUUNEUEJjWlFxNmRHY2N2eU5YWVZ0ZkV4WTRXSTJjPQorLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLmNlcnQgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5jZXJ0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkNTZiMzUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy90cmFuc3BvcnRzL3Rlc3QtdXNlci5jZXJ0CkBAIC0wLDAgKzEsMjMgQEAKKy0tLS0tQkVHSU4gQ0VSVElGSUNBVEUtLS0tLQorTUlJRDR6Q0NBc3VnQXdJQkFnSUpBSXBCUUh6cStuaGJNQTBHQ1NxR1NJYjNEUUVCQlFVQU1GUXhDekFKQmdOVgorQkFZVEFsVlRNUXN3Q1FZRFZRUUlFd0pEUVRFT01Bd0dBMVVFQnhNRlJHRjJhWE14RVRBUEJnTlZCQW9UQ0U1bAorZEMxVFRrMVFNUlV3RXdZRFZRUURFd3hrZEd4emRHVnpkSFZ6WlhJd0hoY05NRGt3TnpBNU1qTTBNREEyV2hjTgorTURrd09EQTRNak0wTURBMldqQlVNUXN3Q1FZRFZRUUdFd0pWVXpFTE1Ba0dBMVVFQ0JNQ1EwRXhEakFNQmdOVgorQkFjVEJVUmhkbWx6TVJFd0R3WURWUVFLRXdoT1pYUXRVMDVOVURFVk1CTUdBMVVFQXhNTVpIUnNjM1JsYzNSMQorYzJWeU1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBMHJ3OUJjVllieko4Y2pjNAorTTBGWDdoNHl3VDUzeHRDV3lwUVhMZ3dOeDdHZHVaVTFEVHpoVnJjeVdwZVQ4YXcrenRXOXdtSDRORWVPUlNUSwordkdaSkpQZTNxSmlGaVBLTlNKMTdRektTVkcwUVN0Sk1QVUZTQ3E3bk5ZSXpaM2JsbGlNSFNESmVmM3E2YngrbAorNE5VYURYMDNVc2FjZ2tlOENDWmxBNTFCUmYrT090cVdOV29KNFFYdWN1Si9yRVJxZ1lSUjFmN1BvanMzNVpBRQorN2M3MS9XVmN6dGw2OHRMSDZ5VlpocFZEUUtkK0VlL01waXI1ajJYN0ZvUnAzZFVuNUFUanBCdzZXRVR3OXRiVQorZ2piY3NyRzR3RTZjekswWVNUeE5UR0p6QzlydkVxM1MrdmJqUHpMQlZ4ckFXeFhkN3RBTWtVU1VXVkpqQ01NdgorZTdob09RSURBUUFCbzRHM01JRzBNQjBHQTFVZERnUVdCQlRGV1ZNazdmc0dDVTJHc0tZOW5rMGJDMlBOK2pDQgoraEFZRFZSMGpCSDB3ZTRBVXhWbFRKTzM3QmdsTmhyQ21QWjVOR3d0anpmcWhXS1JXTUZReEN6QUpCZ05WQkFZVAorQWxWVE1Rc3dDUVlEVlFRSUV3SkRRVEVPTUF3R0ExVUVCeE1GUkdGMmFYTXhFVEFQQmdOVkJBb1RDRTVsZEMxVAorVGsxUU1SVXdFd1lEVlFRREV3eGtkR3h6ZEdWemRIVnpaWEtDQ1FDS1FVQjg2dnA0V3pBTUJnTlZIUk1FQlRBRAorQVFIL01BMEdDU3FHU0liM0RRRUJCUVVBQTRJQkFRQ1d4S0ZFb2hBK1ZsK2dqNHgwbmc1RlVNdUh0VGJ0TGJTRworMStyNlM5NEx2TUJlZGxvWVQ3bVBJUGdjVmJNVDVmcUFlUXBmVklhQzBpNVBraVVJOUgyTVh0TzJBZEJhNUp4NQorcTE4T2RVai9MakdBM0I3am9zcTVIbklULzBPVGhZa0FlS0xJVkRMSHhpcU9Zcm1Gd3FaT3NLNUJaMVJNLzZZbAorKy9VWnV3dWp1SHRud1JXM1ZXc2tWVkZURjROR0taNWY3bEErTlNZcWJIbi83T0JxcWdTMkd4blN6Y0NEOUJPcQorOXpOTVpvaVczalcrRW9JTDYycFJ0RStTL2lMMUJSQmN0NHh3TlAvUlF5TjRpYURWZzBTQzEwWVNTWGs0K29mKworZTJnQ0xnQ3hzMFZ5QnpHOGZJb1g4UmlxN2NWOTlHMTE5TTFLVDQ1alhjb3MxaE8yZ1l1QgorLS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdHJhbnNwb3J0cy90ZXN0LXVzZXIucHJpdiBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLnByaXYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjI1MDdlMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3RyYW5zcG9ydHMvdGVzdC11c2VyLnByaXYKQEAgLTAsMCArMSwyNyBAQAorLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQorTUlJRXBBSUJBQUtDQVFFQTBydzlCY1ZZYnpKOGNqYzRNMEZYN2g0eXdUNTN4dENXeXBRWExnd054N0dkdVpVMQorRFR6aFZyY3lXcGVUOGF3K3p0Vzl3bUg0TkVlT1JTVEt2R1pKSlBlM3FKaUZpUEtOU0oxN1F6S1NWRzBRU3RKTQorUFVGU0NxN25OWUl6WjNibGxpTUhTREplZjNxNmJ4K2w0TlVhRFgwM1VzYWNna2U4Q0NabEE1MUJSZitPT3RxVworTldvSjRRWHVjdUovckVScWdZUlIxZjdQb2pzMzVaQUU3YzcxL1dWY3p0bDY4dExINnlWWmhwVkRRS2QrRWUvTQorcGlyNWoyWDdGb1JwM2RVbjVBVGpwQnc2V0VUdzl0YlVnamJjc3JHNHdFNmN6SzBZU1R4TlRHSnpDOXJ2RXEzUworK3ZialB6TEJWeHJBV3hYZDd0QU1rVVNVV1ZKakNNTXZlN2hvT1FJREFRQUJBb0lCQURjWGFPaVNUKzA2Q0ppZgorWVB6ZFQweDc3bzdnY3RXeUFFblRiei9sZk5EQTJWZ0Q3c3VZSjl6UXBjUlRMaVVXLzVCNUJsUEQ0dXhmN0l5YworOHJkUUVqMHMyWUdrNWZ3SVZQRXY0bUtOM1AxZlNjd1ZzRUt2U2ZCckN4ek0vZjFGY3YzT0NJQlNVcXdHL0toQworWU00blI5bFE2OTZpOTVXRGhWK29FZTVnOVFpRUxkQUREbGMxYnYrbmI5dFZCelVUbUhRZ3BHand5YUpNSXpJVgorcWtmcEM0UlY4T2p0NUVMYjZYakpSRnhnOVFpKzRrdzZtTGJCYy9pbnlzdlZRQm1zV0xMbENLcGJIdDAyWWZVQgorYXRWT0R6VFI1YVViY1FLbk5uSG1valUwNWlyYkNlVVhwaGdRS1Y5aXV6c2lXTVY0ZWRKNnRXOEIxMEJ1U2xINQorYjBHTnV3RUNnWUVBL2Z3S21RMGpnckxqUmMxNmNFMkdXTVpSbXFCdWZUdEdTdzl0ZG9obVVNSVBxTnQ0Ky9YUQorZ0tWMHNmRlpnc0xMVUc1MHhxUlI2bW1relM3VFZ3bDR1UnFjckY3RFJLS0FreUZKUDNRa0xTUW0rNEVaRnhPdgorZHBIVkxWcE8xUUorNzFZRTR6S09kSWZXUmFvaDVabEVwR3czdXpmK1Uwb05URDc5WDVmT0E2RUNnWUVBMUdoVworaVNFYlUrMllQbnk0cWVYZGY4aGNTbjkrVXI2Y0J6eExoWU1VSE5JOXlzeUFRbjMvL01Mb1JDb25va2lVRVdHNQorQkxPMnpTbU5xdkhXS1JCemFHcjZaam8vdEdUV2dPV25wTFFNcStYWW1EeFd4REdDVExIMmVkcUMrVklJcUJuQgorUW1MWUJ2ZGU5RW4xVUkvYzNDc3BiMThOaDkySStWR1pOUHpQSFprQ2dZQVBVODJEN1FJT21pTVRERkp1UW85dgorL2cvZ3AvdmkvTmZDSWQwMlFRY0RxcUp0UzBsaTB6UFEvNnNxTGVsNzlhdDFZQ1VWODhhcHdkUmJPWTh4ZW5YWgorbmR5RW5uZGtSZlpDYXNqVDFudDBhZkVjVG04b01GenZaOStZakJHajB6RzcyZElUci9KZTMrK3pacEFESGh2QgorWEhLRWp0MS9RMEhJTHlqMVF1RUE0UUtCZ1FDVWJma1N5SnpWTUhJME1Hbkc2QWU1OU9SeGR0aHFzQ0pPZUJiNgorVEpmd2NBYVlRZ0hhOVR1K2dPRllTUEQ3V2FhRzR2Z3N6ZjBQTDF0OU9wUUNqQ2xwcldBZnNkSzBsOGJCdWpwRgorUVVDZG12ZVpvb2lyZjBGam9QVHhQLzVJaGNmZzJHYVJvb3I5aXozQ2pqQXNST3Y4dXZpd2lBYm5pNnJkTnVWTgorL3VBbytRS0JnUUNmUWYxUkJqL2lNbU9aZGk0U2lmQk9EbXNlSkVZZUFNbGZFUUJIUEZtVGhOTGlmbHorVk4xNwordXFIUzVJZ2hQSzBzWGI3cE9RbUMyaEN4VDJzV3liSngrcUtzb09ZSExReXJHNWtnN0NnVmpsdG02SHp3eWl6dAorS3V3NlQ0Y1VqMXFSUUc4YUFUTCtzR3VUNjlGSFRTRTN2YTV0bGY5b1lHc002cklvQTQzZzN3PT0KKy0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDFkZWZhdWx0c3RvcmVfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTQ0ZjdkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAxZGVmYXVsdHN0b3JlX2NsaWIuYwpAQCAtMCwwICsxLDM1IEBACisvKiBIRUFERVIgVGVzdGluZyB0aGUgZGVmYXVsdF9zdG9yZSBBUEkgKi8KK2ludCBpLCBqOworY2hhciBidWZbMTAyNF07CisKKy8qIGZpcnN0IHdlIGxvYWQgZXZlcnl0aGluZyB1cCAqLworCitmb3IoaSA9IDA7IGkgPCBORVRTTk1QX0RTX01BWF9JRFM7IGkrKykgeworICAgIC8qIGJvb2xlYW5zICovCisgICAgZm9yKGogPSAwOyBqIDwgTkVUU05NUF9EU19NQVhfU1VCSURTOyBqKyspIHsKKyAgICAgICAgT0tGKFNOTVBFUlJfU1VDQ0VTUyA9PSBuZXRzbm1wX2RzX3NldF9ib29sZWFuKGksIGosIChpKmopJTIpLAorICAgICAgICAgICAgKCJkZWZhdWx0IHN0b3JlIGJvb2xlYW46IHNldHRpbmcgJWQvJWQgcmV0dXJuZWQgZmFpbHVyZSIsIGksIGopKTsKKyAgICAgICAgT0tGKFNOTVBFUlJfU1VDQ0VTUyA9PSBuZXRzbm1wX2RzX3NldF9pbnQoaSwgaiwgaSpqKSwKKyAgICAgICAgICAgICgiZGVmYXVsdCBzdG9yZSBpbnQ6IHNldHRpbmcgJWQvJWQgcmV0dXJuZWQgZmFpbHVyZSIsIGksIGopKTsKKyAgICAgICAgc3ByaW50ZihidWYsIiVkLyVkIiwgaSwgaik7CisgICAgICAgIE9LRihTTk1QRVJSX1NVQ0NFU1MgPT0gbmV0c25tcF9kc19zZXRfc3RyaW5nKGksIGosIGJ1ZiksCisgICAgICAgICAgICAoImRlZmF1bHQgc3RvcmUgc3RyaW5nOiBzZXR0aW5nICVkLyVkIHJldHVybmVkIGZhaWx1cmUiLCBpLCBqKSk7CisgICAgfQorfQorICAgIAorLyogdGhlbiB3ZSBjaGVjayBhbGwgdGhlIHZhbHVlcyAqLworCitmb3IoaSA9IDA7IGkgPCBORVRTTk1QX0RTX01BWF9JRFM7IGkrKykgeworICAgIC8qIGJvb2xlYW5zICovCisgICAgZm9yKGogPSAwOyBqIDwgTkVUU05NUF9EU19NQVhfU1VCSURTOyBqKyspIHsKKyAgICAgICAgT0tGKG5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4oaSwgaikgPT0gKGkqaiklMiwKKyAgICAgICAgICAgICgiZGVmYXVsdCBzdG9yZSBib29sZWFuICVkLyVkIHdhcyB0aGUgZXhwZWN0ZWQgdmFsdWUiLCBpLCBqKSk7CisgICAgICAgIE9LRihuZXRzbm1wX2RzX2dldF9pbnQoaSwgaikgPT0gKGkqaiksCisgICAgICAgICAgICAoImRlZmF1bHQgc3RvcmUgaW50ICVkLyVkIHdhcyB0aGUgZXhwZWN0ZWQgdmFsdWUiLCBpLCBqKSk7CisgICAgICAgIHNwcmludGYoYnVmLCIlZC8lZCIsIGksIGopOworICAgICAgICBPS0Yoc3RyY21wKG5ldHNubXBfZHNfZ2V0X3N0cmluZyhpLCBqKSwgYnVmKSA9PSAwLAorICAgICAgICAgICAgKCJkZWZhdWx0IHN0b3JlIHN0cmluZyAlZC8lZCB3YXMgdGhlIGV4cGVjdGVkIHZhbHVlIiwgaSwgaikpOworICAgIH0KK30KKworbmV0c25tcF9kc19zaHV0ZG93bigpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDJjb250YWluZXJzX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OWIyZTk0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDAyY29udGFpbmVyc19jbGliLmMKQEAgLTAsMCArMSwzNSBAQAorLyogSEVBREVSIFRlc3RpbmcgdGhlIGNvbnRhaW5lciBBUEkgKi8KKworbmV0c25tcF9jb250YWluZXIgKmNvbnRhaW5lcjsKK3ZvaWQgKnA7CisKK2luaXRfc25tcCgiY29udGFpbmVyLXRlc3QiKTsKK2NvbnRhaW5lciA9IG5ldHNubXBfY29udGFpbmVyX2ZpbmQoImZpZm8iKTsKK2NvbnRhaW5lci0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKikgc3RyY21wOworCitDT05UQUlORVJfSU5TRVJUKGNvbnRhaW5lciwgImZvbyIpOworQ09OVEFJTkVSX0lOU0VSVChjb250YWluZXIsICJiYXIiKTsKK0NPTlRBSU5FUl9JTlNFUlQoY29udGFpbmVyLCAiYmF6Iik7CisKK09LKENPTlRBSU5FUl9GSU5EKGNvbnRhaW5lciwgImJhciIpICE9IE5VTEwsCisgICAic2hvdWxkIGJlIGFibGUgdG8gZmluZCB0aGUgc3RvcmVkICdiYXInIHN0cmluZyIpOworCitPSyhDT05UQUlORVJfRklORChjb250YWluZXIsICJmb29iYXIiKSA9PSBOVUxMLAorICAgInNob3VsZG4ndCBiZSBhYmxlIHRvIGZpbmQgdGhlIChub3QpIHN0b3JlZCAnZm9vYmFyJyBzdHJpbmciKTsKKworT0soQ09OVEFJTkVSX1NJWkUoY29udGFpbmVyKSA9PSAzLAorICAgImNvbnRhaW5lciBoYXMgdGhlIHByb3BlciBzaXplIGZvciB0aGUgZWxlbWVudHMgd2UndmUgYWRkZWQiKTsKKworQ09OVEFJTkVSX1JFTU9WRShjb250YWluZXIsICJiYXIiKTsKKworT0soQ09OVEFJTkVSX0ZJTkQoY29udGFpbmVyLCAiYmFyIikgPT0gTlVMTCwKKyAgICJzaG91bGQgbm8gbG9uZ2VyIGJlIGFibGUgdG8gZmluZCB0aGUgKHJlb3ZlZCkgJ2Jhcicgc3RyaW5nIik7CisKK09LKENPTlRBSU5FUl9TSVpFKGNvbnRhaW5lcikgPT0gMiwKKyAgICJjb250YWluZXIgaGFzIHRoZSBwcm9wZXIgc2l6ZSBmb3IgdGhlIGVsZW1lbnRzIGFmdGVyIGEgcmVtb3ZhbCIpOworCit3aGlsZSAoKHAgPSBDT05UQUlORVJfRklSU1QoY29udGFpbmVyKSkpCisgIENPTlRBSU5FUl9SRU1PVkUoY29udGFpbmVyLCBwKTsKK0NPTlRBSU5FUl9GUkVFKGNvbnRhaW5lcik7CisKK3NubXBfc2h1dGRvd24oImNvbnRhaW5lci10ZXN0Iik7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDNjb3B5X253b3JkX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwM2NvcHlfbndvcmRfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkNjdlZDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDNjb3B5X253b3JkX2NsaWIuYwpAQCAtMCwwICsxLDE0MiBAQAorLyogSEVBREVSIFRlc3RpbmcgY29weV9ud29yZCAqLworCisjZGVmaW5lIEFTU0VSVDEoY29uZCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICArK19fdGVzdF9jb3VudGVyOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKChjb25kKSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmKCJvayAlZFxuIiwgX190ZXN0X2NvdW50ZXIpOyAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIm5vdCBvayAlZCAtICVkOiAlcyBmYWlsZWRcbiIsICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIF9fdGVzdF9jb3VudGVyLCBfX0xJTkVfXywgI2NvbmQpOyAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgQVNTRVJUMihjb25kLCBvbl9lcnJvcikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICsrX190ZXN0X2NvdW50ZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBpZiAoKGNvbmQpKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICBwcmludGYoIm9rICVkXG4iLCBfX3Rlc3RfY291bnRlcik7ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGVsc2UgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgIHByaW50Zigibm90IG9rICVkIC0gJWQ6ICVzIGZhaWxlZCwgIiwgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgX190ZXN0X2NvdW50ZXIsIF9fTElORV9fLCAjY29uZCk7ICAgICAgICAgICAgICAgICAgXAorICAgICAgcHJpbnRmIG9uX2Vycm9yIDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gd2hpbGUgKDApCisKK3sKKyAgLyogQSBxdW90ZWQgc3RyaW5nICovCisgIGNoYXIgaW5wdXRbXSA9ICJcIlRoZSByZWQgcm9zZVwiIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlRoZSByZWQgcm9zZSIpID09IDAsCisgICAgICAgICAgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogRXNjYXBlZCBxdW90ZXMgKi8KKyAgY2hhciBpbnB1dFtdID0gIlxcXCJUaGUgcmVkIHJvc2VcXFwiIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiIjsKKyAgY2hhciogcnVuID0gY29weV9ud29yZChpbnB1dCwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgIlwiVGhlIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gaW5wdXQgKyA2LAorICAgICAgICAgICgicnVuID0gaW5wdXQgKyAlIiBORVRTTk1QX1BSSXogImRcbiIsIHJ1biAtIGlucHV0KSk7CisgIHJ1biA9IGNvcHlfbndvcmQocnVuLCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAicmVkIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gaW5wdXQgKyAxMCwKKyAgICAgICAgICAoInJ1biA9IGlucHV0ICsgJSIgTkVUU05NUF9QUkl6ICJkXG4iLCBydW4gLSBpbnB1dCkpOworICBydW4gPSBjb3B5X253b3JkKHJ1biwgb3V0cHV0LCBzaXplb2Yob3V0cHV0KSk7CisgIEFTU0VSVDIoc3RyY21wKG91dHB1dCwgInJvc2VcIiIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIFVudGVybWluYXRlZCAiLXF1b3RlICovCisgIGNoYXIgaW5wdXRbXSA9ICJcIlRoZSI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJUaGUiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQxKHJ1biA9PSBOVUxMKTsKK30KKworeworICAvKiBVbnRlcm1pbmF0ZWQgJy1xdW90ZSAqLworICBjaGFyIGlucHV0W10gPSAiXCdUaGUiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVGhlIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogRXh0cmFjdCBmcm9tIE5VTEwgKi8KKyAgY2hhciBvdXRwdXRbMTBdID0gIiI7CisgIGNoYXIqIHJ1biA9IE5VTEw7CisgIHJ1biA9IGNvcHlfbndvcmQocnVuLCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogRXh0cmFjdCB0byBOVUxMICovCisgIGNoYXIgaW5wdXRbXSA9ICJUaGUgcmVkIHJvc2UiOworICBjaGFyKiBvdXRwdXQgPSBOVUxMOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMShydW4gPT0gTlVMTCk7Cit9CisKK3sKKyAgLyogTG9uZyB0b2tlbiAqLworICBjaGFyIGlucHV0W10gPSAiXCJWZXJ5IGxvbmcgdG9rZW4gdGhhdCBvdmVyZmxvd3MgdGhlIGJ1ZmZlclwiIGZvbyI7CisgIGNoYXIgb3V0cHV0WzEwXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVmVyeSBsb25nIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gaW5wdXQgKyA0NCwKKyAgICAgICAgICAoInJ1biA9IGlucHV0ICsgJSIgTkVUU05NUF9QUkl6ICJkXG4iLCBydW4gLSBpbnB1dCkpOworfQorCit7CisgIC8qIFF1b3RlZCBlbmQgb2Ygc3RyaW5nIC8gZW1iZWRkZWQgXDAgKi8KKyAgY2hhciBpbnB1dFtdID0gIlRoZVxcXDByZWQgcm9zZSI7CisgIGNoYXIgb3V0cHV0W3NpemVvZihpbnB1dCldID0gIiI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICJUaGVcXCIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDEocnVuID09IE5VTEwpOworfQorCit7CisgIC8qIEVtcHR5IHN0cmluZyAqLworICBjaGFyIGlucHV0W10gPSAiIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KSArIDFdID0gIlgiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gTlVMTCwgKCJydW4gPSA+JXM8XG4iLCBydW4pKTsKK30KKworeworICAvKiBXaGl0ZXNwYWNlIHN0cmluZyAqLworICBjaGFyIGlucHV0W10gPSAiICAgIFx0ICAgIjsKKyAgY2hhciBvdXRwdXRbc2l6ZW9mKGlucHV0KV0gPSAiWCI7CisgIGNoYXIqIHJ1biA9IGNvcHlfbndvcmQoaW5wdXQsIG91dHB1dCwgc2l6ZW9mKG91dHB1dCkpOworICBBU1NFUlQyKHN0cmNtcChvdXRwdXQsICIiKSA9PSAwLCAoIm91dHB1dCA9ID4lczxcbiIsIG91dHB1dCkpOworICBBU1NFUlQyKHJ1biA9PSBOVUxMLCAoInJ1biA9ID4lczxcbiIsIHJ1bikpOworfQorCit7CisgIC8qIFF1b3RlLCBubyB3aGl0ZXNwYWNlIGFmdGVyICovCisgIGNoYXIgaW5wdXRbXSA9ICJcIlRoZVwicmVkIHJvc2UiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVGhlIikgPT0gMCwgKCJvdXRwdXQgPSA+JXM8XG4iLCBvdXRwdXQpKTsKKyAgQVNTRVJUMihydW4gPT0gaW5wdXQgKyA1LAorICAgICAgICAgICgicnVuID0gaW5wdXQgKyAlIiBORVRTTk1QX1BSSXogImRcbiIsIHJ1biAtIGlucHV0KSk7Cit9CisKK3sKKyAgLyogUXVvdGUsIG5vIHdoaXRlc3BhY2UgYmVmb3JlICovCisgIGNoYXIgaW5wdXRbXSA9ICJUaGVcInJlZFwiIHJvc2UiOworICBjaGFyIG91dHB1dFtzaXplb2YoaW5wdXQpXSA9ICIiOworICBjaGFyKiBydW4gPSBjb3B5X253b3JkKGlucHV0LCBvdXRwdXQsIHNpemVvZihvdXRwdXQpKTsKKyAgQVNTRVJUMihzdHJjbXAob3V0cHV0LCAiVGhlXCJyZWRcIiIpID09IDAsICgib3V0cHV0ID0gPiVzPFxuIiwgb3V0cHV0KSk7CisgIEFTU0VSVDIocnVuID09IGlucHV0ICsgOSwKKyAgICAgICAgICAoInJ1biA9IGlucHV0ICsgJSIgTkVUU05NUF9QUkl6ICJkXG4iLCBydW4gLSBpbnB1dCkpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA0c25tcF9lbnVtX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI4YjE5YgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNHNubXBfZW51bV9jbGliLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHNubXBfZW51bSAqLworCisjZGVmaW5lIENPTkZJR19UWVBFICJzbm1wLWVudW0tdW5pdC10ZXN0IgorI2RlZmluZSBTVFJJTkcxICJsaWZlLCBhbmQgZXZlcnl0aGluZyIKKyNkZWZpbmUgU1RSSU5HMiAicmVzdGF1cmFudCBhdCB0aGUgZW5kIG9mIHRoZSB1bml2ZXJzZSIKKyNkZWZpbmUgU1RSSU5HMyAibGFiZWwzIgorI2RlZmluZSBMT05HX1NUUklORyAiYS1zdHJpbmctb2YtMjU1LWNoYXJhY3RlcnMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIgorCisjZGVmaW5lIFNUT1JFX0FORF9DT01QQVJFKG1haiwgbWluLCBzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIEZJTEUgKmZwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGludCByZWFkID0gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNoYXIgKnAsIGNvbnRlbnRzWzQwOTZdOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHNlX3N0b3JlX2xpc3QobWFqLCBtaW4sIENPTkZJR19UWVBFKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZwID0gZm9wZW4odG1wX3BlcnNpc3RfZmlsZSwgInIiKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChmcCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICByZWFkID0gZnJlYWQoY29udGVudHMsIDEsIHNpemVvZihjb250ZW50cykgLSAxLCBmcCk7ICAgICAgICBcCisgICAgICAgICAgICBmY2xvc2UoZnApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnRlbnRzW3JlYWQgPiAwID8gcmVhZCA6IDBdID0gJ1wwJzsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGZvciAocCA9IGNvbnRlbnRzOyAqcDsgKytwKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoKnAgPT0gJ1xuJykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgKnAgPSAnfCc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIE9LRihzdHJjbXAoY29udGVudHMsIChzKSkgPT0gMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAoInN0b3JlZCBsaXN0ICVzIDw+ICVzIiwgKHMpLCBjb250ZW50cykpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHJlbW92ZSh0bXBfcGVyc2lzdF9maWxlKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgfQorCitjaGFyIHRtcF9wZXJzaXN0X2ZpbGVbMjU2XTsKK2NoYXIgKnNlX2ZpbmRfcmVzdWx0OworCitzcHJpbnRmKHRtcF9wZXJzaXN0X2ZpbGUsICIvdG1wL3NubXAtZW51bS11bml0LXRlc3QtJWQiLCBnZXRwaWQoKSk7CituZXRzbm1wX3NldGVudigiU05NUF9QRVJTSVNURU5UX0ZJTEUiLCB0bXBfcGVyc2lzdF9maWxlLCAxKTsKKworaW5pdF9zbm1wX2VudW0oInNubXAiKTsKKworU1RPUkVfQU5EX0NPTVBBUkUoMSwgMSwgImVudW0gMToxfCIpOworCitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoImhpIiksIDEpOworCitTVE9SRV9BTkRfQ09NUEFSRSgxLCAxLCAiZW51bSAxOjEgMTpoaXwiKTsKKworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKCJ0aGVyZSIpLCAyKTsKKworU1RPUkVfQU5EX0NPTVBBUkUoMSwgMSwgImVudW0gMToxIDE6aGkgMjp0aGVyZXwiKTsKKworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgMyk7CitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCA0KTsKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDUpOworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgNik7CitzZV9hZGRfcGFpcigxLCAxLCBzdHJkdXAoTE9OR19TVFJJTkcpLCA3KTsKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDgpOworc2VfYWRkX3BhaXIoMSwgMSwgc3RyZHVwKExPTkdfU1RSSU5HKSwgOSk7CisKK1NUT1JFX0FORF9DT01QQVJFKDEsIDEsICJlbnVtIDE6MSAxOmhpIDI6dGhlcmUgMzoiIExPTkdfU1RSSU5HICIgNDoiIExPTkdfU1RSSU5HCisgICAgICAgICAgICAgICAgICIgNToiIExPTkdfU1RSSU5HICIgNjoiIExPTkdfU1RSSU5HICIgNzoiIExPTkdfU1RSSU5HCisgICAgICAgICAgICAgICAgICIgODoiIExPTkdfU1RSSU5HICIgOToiIExPTkdfU1RSSU5HICJ8Iik7CisKK3NlX2FkZF9wYWlyKDEsIDEsIHN0cmR1cChMT05HX1NUUklORyksIDEwKTsKKworU1RPUkVfQU5EX0NPTVBBUkUoMSwgMSwgImVudW0gMToxIDE6aGkgMjp0aGVyZSAzOiIgTE9OR19TVFJJTkcgIiA0OiIgTE9OR19TVFJJTkcKKyAgICAgICAgICAgICAgICAgIiA1OiIgTE9OR19TVFJJTkcgIiA2OiIgTE9OR19TVFJJTkcgIiA3OiIgTE9OR19TVFJJTkcKKyAgICAgICAgICAgICAgICAgIiA4OiIgTE9OR19TVFJJTkcgIiA5OiIgTE9OR19TVFJJTkcgInwiCisgICAgICAgICAgICAgICAgICJlbnVtIDE6MSAxMDoiIExPTkdfU1RSSU5HICJ8Iik7CisKK09LKHNlX2ZpbmRfdmFsdWUoMSwgMSwgImhpIikgPT0gMSwKKyAgICJsb29rdXAgYnkgbnVtYmVyICMxIHNob3VsZCBiZSB0aGUgcHJvcGVyIHN0cmluZyIpOworT0soc3RyY21wKHNlX2ZpbmRfbGFiZWwoMSwgMSwgMiksICJ0aGVyZSIpID09IDAsCisgICAibG9va3VwIGJ5IHN0cmluZyAjMSBzaG91bGQgYmUgdGhlIHByb3BlciBudW1iZXIiKTsKKworCitzZV9hZGRfcGFpcl90b19zbGlzdCgidGVzdGluZyIsIHN0cmR1cChTVFJJTkcxKSwgNDIpOworc2VfYWRkX3BhaXJfdG9fc2xpc3QoInRlc3RpbmciLCBzdHJkdXAoU1RSSU5HMiksIDIpOworc2VfYWRkX3BhaXJfdG9fc2xpc3QoInRlc3RpbmciLCBzdHJkdXAoU1RSSU5HMyksIDIpOworICAgIAorT0soc2VfZmluZF92YWx1ZV9pbl9zbGlzdCgidGVzdGluZyIsIFNUUklORzEpID09IDQyLAorICAgImxvb2t1cCBieSBudW1iZXIgc2hvdWxkIGJlIHRoZSBwcm9wZXIgc3RyaW5nIik7CitPSyhzdHJjbXAoc2VfZmluZF9sYWJlbF9pbl9zbGlzdCgidGVzdGluZyIsIDIpLCBTVFJJTkcyKSA9PSAwLAorICAgImxvb2t1cCBieSBzdHJpbmcgc2hvdWxkIGJlIHRoZSBwcm9wZXIgbnVtYmVyIik7CisKK3NlX2NsZWFyX3NsaXN0KCJ0ZXN0aW5nIik7CisKKworc2VfcmVhZF9jb25mKCJlbnVtIiwKKyAgICAgICAgICAgICBORVRTTk1QX1JFTU9WRV9DT05TVChjaGFyICosICIyOjMgMTphcHBsZSAyOnBlYXIgMzpraXdpZnJ1aXQiKSk7CitPSyhzZV9maW5kX2xpc3QoMiwgMyksICJsaXN0ICgyLCAzKSBzaG91bGQgYmUgcHJlc2VudCIpOworaWYgKHNlX2ZpbmRfbGlzdCgyLCAzKSkgeworICBPSyhzZV9maW5kX3ZhbHVlKDIsIDMsICJraXdpZnJ1aXQiKSA9PSAzLAorICAgICAibG9va3VwIGJ5IHN0cmluZyBzaG91bGQgcmV0dXJuIHRoZSBwcm9wZXIgdmFsdWUiKTsKKyAgc2VfZmluZF9yZXN1bHQgPSBzZV9maW5kX2xhYmVsKDIsIDMsIDIpOworICBPSyhzZV9maW5kX3Jlc3VsdCAmJiBzdHJjbXAoc2VfZmluZF9yZXN1bHQsICJwZWFyIikgPT0gMCwKKyAgICAgImxvb2t1cCBieSBsYWJlbCBzaG91bGQgcmV0dXJuIHRoZSBwcm9wZXIgc3RyaW5nIik7Cit9CisKK3NlX3JlYWRfY29uZigiZW51bSIsCisgICAgICAgICAgICAgTkVUU05NUF9SRU1PVkVfQ09OU1QoY2hhciAqLCAiZnJ1aXQgMTphcHBsZSAyOnBlYXIgMzpraXdpZnJ1aXQiKSk7CitPSyhzZV9maW5kX3ZhbHVlX2luX3NsaXN0KCJmcnVpdCIsICJraXdpZnJ1aXQiKSA9PSAzLAorICAgImxvb2t1cCBieSBzdHJpbmcgc2hvdWxkIHJldHVybiB0aGUgcHJvcGVyIHZhbHVlIik7CitzZV9maW5kX3Jlc3VsdCA9IHNlX2ZpbmRfbGFiZWxfaW5fc2xpc3QoImZydWl0IiwgMik7CitPSyhzZV9maW5kX3Jlc3VsdCAmJiBzdHJjbXAoc2VfZmluZF9yZXN1bHQsICJwZWFyIikgPT0gMCwKKyAgICJsb29rdXAgYnkgdmFsdWUgc2hvdWxkIHJldHVybiB0aGUgcHJvcGVyIHN0cmluZyIpOworCitjbGVhcl9zbm1wX2VudW0oKTsKK3VucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycygpOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA1dGFibGVfZGF0YXNldF9jYWdlbnRsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzE1NjQxYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNXRhYmxlX2RhdGFzZXRfY2FnZW50bGliLmMKQEAgLTAsMCArMSw2MiBAQAorLyogSEVBREVSIFRlc3RpbmcgdGFibGVfZGF0YXNldCAqLworCisvKgorICogTm90ZTogdGhlIHByaW1hcnkgcHVycG9zZSBvZiB0aGlzIHVuaXQgdGVzdCBpcyB0byB2ZXJpZnkgd2hldGhlciBhbGwgbWVtb3J5CisgKiB0aGF0IGlzIGFsbG9jYXRlZCBmb3Igc3RvcmluZyBhIHRhYmxlIGRhdGFzZXQgaXMgZnJlZWQgcHJvcGVybHkuIEZlZWwgZnJlZQorICogdG8gZXh0ZW5kIHRoaXMgdW5pdCB0ZXN0IHN1Y2ggdGhhdCBpdCB0ZXN0cyBtb3JlIG9mIHRoZSB0YWJsZSBkYXRhc2V0IGNvZGUuCisgKi8KKworZW51bSB7IENPTDMgPSAyLCBDT0w0ID0gMywgQ09MNSA9IDQsIH07CisKK3N0YXRpYyBjb25zdCBvaWQgT2lkW10gPSB7IDEsIDMsIDYsIDEsIDMsIDI3NyB9OworbmV0c25tcF90YWJsZV9kYXRhX3NldCogdGRzOworbmV0c25tcF9oYW5kbGVyX3JlZ2lzdHJhdGlvbiogdGg7CituZXRzbm1wX3RhYmxlX3Jvdyogcm93OworaW50MzJfdCBpdmFsOworaW50MzJfdCBpLCBqOworCitTT0NLX1NUQVJUVVA7CisKK2luaXRfYWdlbnQoInNubXBkIik7Citpbml0X3NubXAoInNubXBkIik7CisKK3RkcyA9IG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfc2V0KCJ0YWJsZV9kYXRhc2V0IHVuaXQtdGVzdCIpOworT0sodGRzLCAidGFibGUgZGF0YSBzZXQgY3JlYXRpb24iKTsKKworbmV0c25tcF90YWJsZV9kYXRhc2V0X2FkZF9pbmRleCh0ZHMsIEFTTl9JTlRFR0VSKTsKK25ldHNubXBfdGFibGVfZGF0YXNldF9hZGRfaW5kZXgodGRzLCBBU05fSU5URUdFUik7CituZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3codGRzLCBDT0wzLCBBU05fSU5URUdFUiwgICBGQUxTRSwgTlVMTCwgMCk7CituZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3codGRzLCBDT0w0LCBBU05fQ09VTlRFUiwgICBGQUxTRSwgTlVMTCwgMCk7CituZXRzbm1wX3RhYmxlX3NldF9hZGRfZGVmYXVsdF9yb3codGRzLCBDT0w1LCBBU05fT0NURVRfU1RSLCBGQUxTRSwgTlVMTCwgMCk7CisKK3RoID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oInVuaXQtdGVzdCBoYW5kbGVyIiwgTlVMTCwgT2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPSURfTEVOR1RIKE9pZCksIEhBTkRMRVJfQ0FOX1JXUklURSk7CitPSyh0aCwgInRhYmxlIGhhbmRsZXIgcmVnaXN0cmF0aW9uIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfdGFibGVfZGF0YV9zZXQodGgsIHRkcywgTlVMTCkgPT0gU05NUEVSUl9TVUNDRVNTLAorICAgInRhYmxlIGRhdGEgc2V0IHJlZ2lzdHJhdGlvbiIpOworCitmb3IgKGkgPSAxOyBpIDw9IDI7IGkrKykgeworICAgIGZvciAoaiA9IDE7IGogPD0gMjsgaisrKSB7CisgICAgICAgIHJvdyA9IG5ldHNubXBfY3JlYXRlX3RhYmxlX2RhdGFfcm93KCk7CisgICAgICAgIG5ldHNubXBfdGFibGVfcm93X2FkZF9pbmRleChyb3csIEFTTl9JTlRFR0VSLCAmaSwgc2l6ZW9mKGkpKTsKKyAgICAgICAgbmV0c25tcF90YWJsZV9yb3dfYWRkX2luZGV4KHJvdywgQVNOX0lOVEVHRVIsICZqLCBzaXplb2YoaikpOworICAgICAgICBuZXRzbm1wX3RhYmxlX2RhdGFzZXRfYWRkX3Jvdyh0ZHMsIHJvdyk7CisKKyAgICAgICAgaXZhbCA9IDEwICogaSArIGo7CisgICAgICAgIE9LKG5ldHNubXBfc2V0X3Jvd19jb2x1bW4ocm93LCBDT0wzLCBBU05fSU5URUdFUiwgJml2YWwsIHNpemVvZihpdmFsKSkKKyAgICAgICAgICAgPT0gU05NUEVSUl9TVUNDRVNTLCAic2V0IElOVEVHRVIgY29sdW1uIik7CisgICAgICAgIE9LKG5ldHNubXBfc2V0X3Jvd19jb2x1bW4ocm93LCBDT0w1LCBBU05fT0NURVRfU1RSLCAidGVzdCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCJ0ZXN0IikgLSAxKQorICAgICAgICAgICA9PSBTTk1QRVJSX1NVQ0NFU1MsICJzZXQgT0NURVRfU1RSIGNvbHVtbiIpOworICAgIH0KK30KKworbmV0c25tcF9kZWxldGVfdGFibGVfZGF0YV9zZXQodGRzKTsKKworc25tcF9zaHV0ZG93bigic25tcGQiKTsKK3NodXRkb3duX2FnZW50KCk7CisKK1NPQ0tfQ0xFQU5VUDsKKworT0soVFJVRSwgImRvbmUiKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwNnNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkN2FlNjgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDZzbm1wX2hhbmRsZXJfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEhFQURFUiBUZXN0aW5nIFNOTVAgaGFuZGxlciByZWdpc3RyYXRpb24gKi8KKworc3RhdGljIG9pZCBPaWRbXSA9IHsgMSwgMywgNiwgMSwgMywgMzI3IH07IC8qIGV4cGVyaW1lbnRhbC4zMjcgKi8KK25ldHNubXBfaGFuZGxlcl9yZWdpc3RyYXRpb24gKmhhbmRsZXIsICpoYW5kbGVyMjsKK25ldHNubXBfbWliX2hhbmRsZXIgKmRoOworbmV0c25tcF9jYWNoZSAqbmMsICpuYzI7CisKK2luaXRfc25tcCgic25tcCIpOworCitoYW5kbGVyID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImV4cGVyaW1lbnRhbC4zMjciLCBOVUxMLAorCU9pZCwgT0lEX0xFTkdUSChPaWQpLCBIQU5ETEVSX0NBTl9SV1JJVEUpOworT0soaGFuZGxlciAhPSBOVUxMLCAiSGFuZGxlciBjcmVhdGlvbi4iKTsKKworbmMgPSBuZXRzbm1wX2NhY2hlX2NyZWF0ZSgxMCwgTlVMTCwgTlVMTCwgT2lkLCBPSURfTEVOR1RIKE9pZCkpOworT0sobmMsICJuZXRzbm1wX2NhY2hlIGFsbG9jYXRpb24iKTsKK09LKHNubXBfb2lkX2NvbXBhcmUobmMtPnJvb3RvaWQsIG5jLT5yb290b2lkX2xlbiwgT2lkLCBPSURfTEVOR1RIKE9pZCkpID09IDAsCisgICAiSGFuZGxlciBwcml2YXRlIE9JRC4iKTsKKworaGFuZGxlci0+aGFuZGxlci0+bXl2b2lkID0gbmM7CituZXRzbm1wX2NhY2hlX2hhbmRsZXJfb3duc19jYWNoZShoYW5kbGVyLT5oYW5kbGVyKTsKKworbmMyID0gaGFuZGxlci0+aGFuZGxlci0+bXl2b2lkOworT0sobmMyLCAiSGFuZGxlciBwcml2YXRlIGRhdGEiKTsKK09LKHNubXBfb2lkX2NvbXBhcmUobmMyLT5yb290b2lkLCBuYzItPnJvb3RvaWRfbGVuLCBPaWQsIE9JRF9MRU5HVEgoT2lkKSkgPT0gMCwKKyAgICJIYW5kbGVyIHByaXZhdGUgT0lELiIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2luc3RhbmNlKGhhbmRsZXIpID09IE1JQl9SRUdJU1RFUkVEX09LLAorICAgIk1JQiByZWdpc3RyYXRpb24uIik7CisKK2hhbmRsZXIyID0gbmV0c25tcF9jcmVhdGVfaGFuZGxlcl9yZWdpc3RyYXRpb24oImV4cGVyaW1lbnRhbC4zMjciLCBOVUxMLAorICAgICAgICBPaWQsIE9JRF9MRU5HVEgoT2lkKSwgSEFORExFUl9DQU5fUldSSVRFKTsKK09LKGhhbmRsZXIyICE9IE5VTEwsICJTZWNvbmQgcmVnaXN0cmF0aW9uIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfaW5zdGFuY2UoaGFuZGxlcjIpID09IE1JQl9EVVBMSUNBVEVfUkVHSVNUUkFUSU9OLAorICAgIkR1cGxpY2F0ZSBNSUIgcmVnaXN0cmF0aW9uLiIpOworCitkaCA9IG5ldHNubXBfaGFuZGxlcl9kdXAoaGFuZGxlci0+aGFuZGxlcik7CitPSyhkaCwgIkhhbmRsZXIgZHVwbGljYXRpb24uIik7CisKK09LKG5ldHNubXBfdW5yZWdpc3Rlcl9oYW5kbGVyKGhhbmRsZXIpID09IFNOTVBFUlJfU1VDQ0VTUywKKyAgICJIYW5kbGVyIHVucmVnaXN0cmF0aW9uLiIpOworCituZXRzbm1wX2hhbmRsZXJfZnJlZShkaCk7CitPSyhUUlVFLCAiRnJlZWluZyBkdXBsaWNhdGUgaGFuZGxlciIpOworCitzbm1wX3NodXRkb3duKCJzbm1wIik7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDdpbmV0X3B0b25fY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA3aW5ldF9wdG9uX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOWIwMGZhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA3aW5ldF9wdG9uX2NsaWIuYwpAQCAtMCwwICsxLDYwIEBACisvKiBIRUFERVIgVGVzdGluZyBpbmV0X3B0b24oKSBhbmQgaW5ldF9udG9wKCkgKi8KKworaW50IGk7CitjaGFyIHN0clsxMjhdOworc3RydWN0IGluX2FkZHIgaW5fYWRkcjsKK3N0cnVjdCBpbjZfYWRkciBpbjZfYWRkcjsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7IGNvbnN0IGNoYXIqIHM7IHVuc2lnbmVkIGNoYXIgYls0XTsgfSBpbl90ZXN0ZGF0YVtdID0geworICAgIHsgIjAuMC4wLjAiLCAgICAgICAgIHsgICAwLCAgIDAsICAgMCwgICAwIH0gfSwKKyAgICB7ICIxLjIuMy40IiwgICAgICAgICB7ICAgMSwgICAyLCAgIDMsICAgNCB9IH0sCisgICAgeyAiMjU1LjI1NS4yNTUuMjU1IiwgeyAyNTUsIDI1NSwgMjU1LCAyNTUgfSB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB7IGNvbnN0IGNoYXIqIHM7IHVuc2lnbmVkIGNoYXIgYlsxNl07IH0gaW42X3Rlc3RkYXRhW10gPSB7CisgICAgeyAiOjoiLCAgIHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9LCB9LAorICAgIHsgIjo6MSIsICB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEgfSwgfSwKKyAgICB7ICIxOjoiLCAgeyAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH0sIH0sCisgICAgeyAiMTo6MSIsIHsgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMSB9LCB9LAorfTsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZihpbl90ZXN0ZGF0YSkvc2l6ZW9mKGluX3Rlc3RkYXRhWzBdKTsgKytpKSB7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciAqY29uc3QgYiA9IGluX3Rlc3RkYXRhW2ldLmI7CisKKyAgICBPS0YoaW5ldF9wdG9uKEFGX0lORVQsIGluX3Rlc3RkYXRhW2ldLnMsICZpbl9hZGRyKSA9PSAxLAorCSgiSVB2NCBpbmV0X3B0b24oJXMpIiwgaW5fdGVzdGRhdGFbaV0ucykpOworICAgIE9LKG50b2hsKGluX2FkZHIuc19hZGRyKQorICAgICAgID09ICgoYlswXSA8PCAyNCkgfCAoYlsxXSA8PCAxNikgfCAoYlsyXSA8PCA4KSB8IGJbM10pLAorICAgICAgICJpbmV0X3B0b24oKSB2YWx1ZSIpOworICAgIE9LKGluZXRfbnRvcChBRl9JTkVULCAmaW5fYWRkciwgc3RyLCBzaXplb2Yoc3RyKSkgPT0gc3RyLAorICAgICAgICJJUHY0IGluZXRfbnRvcCgpIik7CisgICAgT0tGKHN0cmNtcChpbl90ZXN0ZGF0YVtpXS5zLCBzdHIpID09IDAsCisJKCIlcyA9Pz0gJXMiLCBpbl90ZXN0ZGF0YVtpXS5zLCBzdHIpKTsKK30KKworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGluNl90ZXN0ZGF0YSkvc2l6ZW9mKGluNl90ZXN0ZGF0YVswXSk7ICsraSkgeworICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNvbnN0IGIgPSBpbjZfdGVzdGRhdGFbaV0uYjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpjb25zdCByID0gKHZvaWQgKikmaW42X2FkZHI7CisgICAgaW50IHJlc3VsdCwgajsKKworICAgIHJlc3VsdCA9IGluZXRfcHRvbihBRl9JTkVUNiwgaW42X3Rlc3RkYXRhW2ldLnMsICZpbjZfYWRkcik7CisgICAgT0tGKHJlc3VsdCA9PSAxLAorCSgiSVB2NiBpbmV0X3B0b24oJXMpIC0+ICVkOyAiCisJICIgJTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMngiCisJICI6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMng6JTAyeCUwMngiLAorCSBpbjZfdGVzdGRhdGFbaV0ucywgcmVzdWx0LAorCSByWzBdLCByWzFdLCByWyAyXSwgclsgM10sIHJbIDRdLCByWyA1XSwgclsgNl0sIHJbIDddLAorCSByWzhdLCByWzldLCByWzEwXSwgclsxMV0sIHJbMTJdLCByWzEzXSwgclsxNF0sIHJbMTVdCisJICkpOworICAgIGZvciAoaiA9IDA7IGogPCAxNjsgKytqKQorCXByaW50ZigiJTAyeCAiLCBiW2pdKTsKKyAgICBwcmludGYoIlxuIik7CisgICAgZm9yIChqID0gMDsgaiA8IDE2OyArK2opCisJT0tGKHJbal0gPT0gYltqXSwKKwkgICAgKCJJUHY2IGluZXRfcHRvbigpIHZhbHVlICglIzAyeCA9Pz0gJSMwMngpIiwgcltqXSwgYltqXSkpOworICAgIE9LKGluZXRfbnRvcChBRl9JTkVUNiwgJmluNl9hZGRyLCBzdHIsIHNpemVvZihzdHIpKSA9PSBzdHIsCisgICAgICAgIklQdjYgaW5ldF9udG9wKCkiKTsKKyAgICBPS0Yoc3RyY21wKGluNl90ZXN0ZGF0YVtpXS5zLCBzdHIpID09IDAsCisJKCIlcyA9Pz0gJXMiLCBpbjZfdGVzdGRhdGFbaV0ucywgc3RyKSk7Cit9CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDhhc24xX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOGFzbjFfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5NDcxNGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMDhhc24xX2NsaWIuYwpAQCAtMCwwICsxLDMzMCBAQAorLyogSEVBREVSIFRlc3RpbmcgQVNOLjEgZW5jb2RpbmcgYW5kIGRlY29kaW5nICovCisKK2ludCBpOworCisjaWYgMAorc25tcF9zZXRfZG9fZGVidWdnaW5nKFRSVUUpOworZGVidWdfcmVnaXN0ZXJfdG9rZW5zKCJkdW1wdl9yZWN2LGR1bXB2X3NlbmQsYXNuIik7CisjZW5kaWYKKworeworICAgIGNvbnN0IGxvbmcgaW50dmFsW10gPSB7CisgICAgICAgIC0weDgwMDAwMDAwTCwKKyAgICAgICAgLTB4N2ZmZmZmZmZMLAorICAgICAgICAtMHhmZmZmTCwKKyAgICAgICAgLTMsCisgICAgICAgIC0xLAorICAgICAgICAwLAorICAgICAgICAxLAorICAgICAgICAzLAorICAgICAgICAweGZmZmYsCisgICAgICAgIDB4N2ZmZmZmZmYsCisgICAgfTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworCXVfY2hhciBlbmNvZGVkWzI1Nl07CisJc2l6ZV90IGVuY29kZWRfbGVuZ3RoOworCXVfY2hhciAqYnVpbGRfcmVzdWx0OworCXNpemVfdCBkZWNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgZGVjb2RlZF90eXBlOworCWxvbmcgZGVjb2RlZF92YWx1ZSA9IDA7CisJdV9jaGFyICpwYXJzZV9yZXN1bHQ7CisgICAgICAgIHVfY2hhciAqcmJ1aWxkX3Jlc3VsdCA9IE5VTEw7CisgICAgICAgIHNpemVfdCByYnVpbGRfbGVuID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisKKwllbmNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKTsKKwlidWlsZF9yZXN1bHQgPSBhc25fYnVpbGRfaW50KGVuY29kZWQsICZlbmNvZGVkX2xlbmd0aCwgQVNOX0lOVEVHRVIsCisJCQkJICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSk7CisJT0tGKGJ1aWxkX3Jlc3VsdCArIGVuY29kZWRfbGVuZ3RoID09IGVuY29kZWQgKyBzaXplb2YoZW5jb2RlZCksCisJICAgICgiYXNuX2J1aWxkX2ludCglbGQpIiwgaW50dmFsW2ldKSk7CisJZGVjb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aDsKKwlwYXJzZV9yZXN1bHQgPSBhc25fcGFyc2VfaW50KGVuY29kZWQsICZkZWNvZGVkX2xlbmd0aCwgJmRlY29kZWRfdHlwZSwKKwkJCQkgICAgICZkZWNvZGVkX3ZhbHVlLCBzaXplb2YoZGVjb2RlZF92YWx1ZSkpOworCU9LRihwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ICYmIGRlY29kZWRfdHlwZSA9PSBBU05fSU5URUdFUgorCSAgICAmJiBkZWNvZGVkX3ZhbHVlID09IGludHZhbFtpXSwKKwkgICAgKCJhc25fcGFyc2VfaW50KGFzbl9idWlsZF9pbnQoJWxkKSkgJXM7IGRlY29kZWQgdHlwZSAlZCA8PiAlZDsiCisJICAgICAiIGRlY29kZWQgdmFsdWUgJWxkIiwKKwkgICAgIGludHZhbFtpXSwgcGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIsCisJICAgICBkZWNvZGVkX3R5cGUsIEFTTl9JTlRFR0VSLCBkZWNvZGVkX3ZhbHVlKSk7CisKKyAgICAgICAgT0tGKGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJnJidWlsZF9yZXN1bHQsICZyYnVpbGRfbGVuLCAmb2Zmc2V0LCAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBU05fSU5URUdFUiwgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpLAorICAgICAgICAgICAgKCJhc25fcmVhbGxvY19yYnVpbGRfaW50KCVsZCkiLCBpbnR2YWxbaV0pKTsKKyAgICAgICAgT0tGKHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoID09IG9mZnNldCAmJgorICAgICAgICAgICAgbWVtY21wKGVuY29kZWQsIHJidWlsZF9yZXN1bHQgKyByYnVpbGRfbGVuIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIG9mZnNldCkgPT0gMCwKKyAgICAgICAgICAgICgiYXNuX2J1aWxkX2ludCglbGQpICE9IGFzbl9yZWFsbG9jX3JidWlsZF9pbnQoJWxkKSIsCisgICAgICAgICAgICAgaW50dmFsW2ldLCBpbnR2YWxbaV0pKTsKKyAgICAgICAgZnJlZSAocmJ1aWxkX3Jlc3VsdCk7CisgICAgfQorfQorCit7CisgICAgY29uc3QgdW5zaWduZWQgbG9uZyBpbnR2YWxbXSA9IHsKKwkwLCAxLCAzLCAweGZmZmYsIDB4N2ZmZmZmZmYsIDB4ODAwMDAwMDBVLCAweGZmZmZmZmZmVQorICAgIH07CisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKwl1X2NoYXIgZW5jb2RlZFsyNTZdOworCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgKmJ1aWxkX3Jlc3VsdDsKKwlzaXplX3QgZGVjb2RlZF9sZW5ndGg7CisJdV9jaGFyIGRlY29kZWRfdHlwZTsKKwl1bnNpZ25lZCBsb25nIGRlY29kZWRfdmFsdWUgPSAwOworCXVfY2hhciAqcGFyc2VfcmVzdWx0OworICAgICAgICB1X2NoYXIgKnJidWlsZF9yZXN1bHQgPSBOVUxMOworICAgICAgICBzaXplX3QgcmJ1aWxkX2xlbiA9IDA7CisgICAgICAgIHNpemVfdCBvZmZzZXQgPSAwOworCisJZW5jb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCk7CisJYnVpbGRfcmVzdWx0ID0gYXNuX2J1aWxkX3Vuc2lnbmVkX2ludChlbmNvZGVkLCAmZW5jb2RlZF9sZW5ndGgsCisJCQkJCSAgICAgIEFTTl9VSU5URUdFUiwKKwkJCQkJICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpOworCU9LRihidWlsZF9yZXN1bHQgKyBlbmNvZGVkX2xlbmd0aCA9PSBlbmNvZGVkICsgc2l6ZW9mKGVuY29kZWQpLAorCSAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQoJWx1KSIsIGludHZhbFtpXSkpOworCWRlY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGg7CisJcGFyc2VfcmVzdWx0ID0gYXNuX3BhcnNlX3Vuc2lnbmVkX2ludChlbmNvZGVkLCAmZGVjb2RlZF9sZW5ndGgsCisJCQkJCSAgICAgICZkZWNvZGVkX3R5cGUsICZkZWNvZGVkX3ZhbHVlLAorCQkJCQkgICAgICBzaXplb2YoZGVjb2RlZF92YWx1ZSkpOworCU9LRihwYXJzZV9yZXN1bHQgJiYgZGVjb2RlZF90eXBlID09IEFTTl9VSU5URUdFUgorCSAgICAmJiBkZWNvZGVkX3ZhbHVlID09IGludHZhbFtpXSwKKwkgICAgKCJhc25fcGFyc2VfdW5zaWduZWRfaW50KGFzbl9idWlsZF91bnNpZ25lZF9pbnQoJWx1KSkgJXM7IgorCSAgICAgIiBkZWNvZGVkIHR5cGUgJWQgPD4gJWQ7IGRlY29kZWQgdmFsdWUgJWx1IiwKKwkgICAgIGludHZhbFtpXSwgcGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIsCisJICAgICBkZWNvZGVkX3R5cGUsIEFTTl9VSU5URUdFUiwgZGVjb2RlZF92YWx1ZSkpOworCisgICAgICAgIE9LRihhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50KCZyYnVpbGRfcmVzdWx0LCAmcmJ1aWxkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwgMSwgQVNOX1VJTlRFR0VSLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSksCisgICAgICAgICAgICAoImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQoJWx1ZCkiLCBpbnR2YWxbaV0pKTsKKyAgICAgICAgT0tGKHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoID09IG9mZnNldCAmJgorICAgICAgICAgICAgbWVtY21wKGVuY29kZWQsIHJidWlsZF9yZXN1bHQgKyByYnVpbGRfbGVuIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIG9mZnNldCkgPT0gMCwKKyAgICAgICAgICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludCglbGQpICE9ICIKKyAgICAgICAgICAgICAiYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludCglbGQpIiwKKyAgICAgICAgICAgICBpbnR2YWxbaV0sIGludHZhbFtpXSkpOworICAgICAgICBmcmVlIChyYnVpbGRfcmVzdWx0KTsKKyAgICB9Cit9CisKKyNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKKworI2RlZmluZSBUT0lOVDY0KGMpICgobG9uZyBsb25nKShsb25nKShjKS5oaWdoIDw8IDMyIHwgKGMpLmxvdykKKworeworICAgIGNvbnN0IHN0cnVjdCBjb3VudGVyNjQgaW50dmFsW10gPSB7CisJeyAweDgwMDAwMDAwVSwgICAgICAgICAgMFUgfSwKKwl7IDB4ODAwMDAwMDBVLCAweGZmZmZmZmZmVSB9LAorCXsgMHhmZmZmZmZmZlUsICAgICAgICAgICAwIH0sCisJeyAweGZmZmZmZmZmVSwgMHhmZmZmMDAwMFUgfSwKKwl7IDB4ZmZmZmZmZmZVLCAweGZmZmZmZmZjVSB9LAorCXsgMHhmZmZmZmZmZlUsIDB4ZmZmZmZmZmZVIH0sCisJeyAgICAgICAgICAgMCwgICAgICAgICAgIDAgfSwKKwl7ICAgICAgICAgICAwLCAgICAgICAgICAgMSB9LAorCXsgICAgICAgICAgIDAsICAgICAgICAgICAzIH0sCisJeyAgICAgICAgICAgMCwgICAgICAweGZmZmYgfSwKKwl7ICAgICAgICAgICAwLCAgMHg3ZmZmZmZmZiB9LAorCXsgICAgICAgICAgIDEsICAgICAgICAgICAwIH0sCisJeyAgICAgICAgICAgMSwgIDB4ZmZmZmZmZmYgfSwKKwl7ICAweDdmZmZmZmZmLCAgICAgICAgICAgMCB9LAorCXsgIDB4N2ZmZmZmZmYsICAweGRlYWRiZWVmIH0sCisJeyAgMHg3ZmZmZmZmZiwgIDB4ZmZmZmZmZmYgfSwKKyAgICB9OworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisJdV9jaGFyIGVuY29kZWRbMjU2XTsKKwlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJdV9jaGFyICpidWlsZF9yZXN1bHQ7CisJc2l6ZV90IGRlY29kZWRfbGVuZ3RoOworCXVfY2hhciBkZWNvZGVkX3R5cGU7CisJc3RydWN0IGNvdW50ZXI2NCBkZWNvZGVkX3ZhbHVlID0geyAwIH07CisJdV9jaGFyICpwYXJzZV9yZXN1bHQ7CisgICAgICAgIHVfY2hhciAqcmJ1aWxkX3Jlc3VsdCA9IE5VTEw7CisgICAgICAgIHNpemVfdCByYnVpbGRfbGVuID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisKKwllbmNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKTsKKwlidWlsZF9yZXN1bHQgPSBhc25fYnVpbGRfc2lnbmVkX2ludDY0KGVuY29kZWQsICZlbmNvZGVkX2xlbmd0aCwKKwkJCQkJICAgICAgQVNOX09QQVFVRV9JNjQsCisJCQkJCSAgICAgICZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKTsKKwlPS0YoYnVpbGRfcmVzdWx0ICsgZW5jb2RlZF9sZW5ndGggPT0gZW5jb2RlZCArIHNpemVvZihlbmNvZGVkKSwKKwkgICAgKCJhc25fYnVpbGRfc2lnbmVkX2ludDY0KCVsbGQpIiwgVE9JTlQ2NChpbnR2YWxbaV0pKSk7CisJZGVjb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aDsKKwlwYXJzZV9yZXN1bHQgPSBhc25fcGFyc2Vfc2lnbmVkX2ludDY0KGVuY29kZWQsICZkZWNvZGVkX2xlbmd0aCwKKwkJCQkJICAgICAgJmRlY29kZWRfdHlwZSwgJmRlY29kZWRfdmFsdWUsCisJCQkJCSAgICAgIHNpemVvZihkZWNvZGVkX3ZhbHVlKSk7CisJT0tGKHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgJiYgZGVjb2RlZF90eXBlID09IEFTTl9PUEFRVUVfSTY0CisJICAgICYmIG1lbWNtcCgmZGVjb2RlZF92YWx1ZSwgJmludHZhbFtpXSwgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKSA9PSAwLAorCSAgICAoImFzbl9wYXJzZV9zaWduZWRfaW50NjQoYXNuX2J1aWxkX3NpZ25lZF9pbnQ2NCglbGxkKSkgJXM7IgorCSAgICAgIiBkZWNvZGVkIHR5cGUgJWQgPD4gJWQ7IGRlY29kZWQgdmFsdWUgJWxsZCIsCisJICAgICBUT0lOVDY0KGludHZhbFtpXSksCisJICAgICBwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIiwKKwkgICAgIGRlY29kZWRfdHlwZSwgQVNOX09QQVFVRV9JNjQsIFRPSU5UNjQoZGVjb2RlZF92YWx1ZSkpKTsKKworICAgICAgICBPS0YoYXNuX3JlYWxsb2NfcmJ1aWxkX3NpZ25lZF9pbnQ2NCgmcmJ1aWxkX3Jlc3VsdCwgJnJidWlsZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvZmZzZXQsIDEsIEFTTl9PUEFRVUVfSTY0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSksCisgICAgICAgICAgICAoImFzbl9yZWFsbG9jX3JidWlsZF9zaWduZWRfaW50NjQoJWxsZCkiLCBUT0lOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgT0tGKHNpemVvZihlbmNvZGVkKSAtIGVuY29kZWRfbGVuZ3RoID09IG9mZnNldCAmJgorICAgICAgICAgICAgbWVtY21wKGVuY29kZWQsIHJidWlsZF9yZXN1bHQgKyByYnVpbGRfbGVuIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgIG9mZnNldCkgPT0gMCwKKyAgICAgICAgICAgICgiYXNuX2J1aWxkX3NpZ25lZF9pbnQ2NCglbGxkKSAhPSAiCisgICAgICAgICAgICAgImFzbl9yZWFsbG9jX3JidWlsZF9zaWduZWRfaW50NjQoJWxsZCkiLAorICAgICAgICAgICAgIFRPSU5UNjQoaW50dmFsW2ldKSwgVE9JTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIGZyZWUgKHJidWlsZF9yZXN1bHQpOworICAgIH0KK30KKworI2VuZGlmCisKKyNkZWZpbmUgVE9VSU5UNjQoYykgKCh1bnNpZ25lZCBsb25nIGxvbmcpKGMpLmhpZ2ggPDwgMzIgfCAoYykubG93KQorCit7CisgICAgY29uc3Qgc3RydWN0IGNvdW50ZXI2NCBpbnR2YWxbXSA9IHsKKwl7ICAgICAgICAgIDAsICAgICAgICAgIDAgfSwKKwl7ICAgICAgICAgIDAsICAgICAgICAgIDEgfSwKKwl7ICAgICAgICAgIDAsICAgICAgICAgIDMgfSwKKwl7ICAgICAgICAgIDAsICAgICAweGZmZmYgfSwKKwl7ICAgICAgICAgIDAsIDB4N2ZmZmZmZmYgfSwKKwl7ICAgICAgICAgIDAsIDB4ODAwMDAwMDAgfSwKKwl7ICAgICAgICAgIDAsIDB4ZmZmZmZmZmYgfSwKKwl7ICAgICAgICAgIDEsICAgICAgICAgIDAgfSwKKwl7ICAgICAgICAgIDEsIDB4ZmZmZmZmZmYgfSwKKwl7IDB4N2ZmZmZmZmYsICAgICAgICAgIDAgfSwKKwl7IDB4N2ZmZmZmZmYsIDB4ZGVhZGJlZWYgfSwKKwl7IDB4N2ZmZmZmZmYsIDB4ZmZmZmZmZmYgfSwKKwl7IDB4ZmZmZmZmZmYsICAgICAgICAgIDAgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4ZGVhZGJlZWYgfSwKKwl7IDB4ZmZmZmZmZmYsIDB4ZmZmZmZmZmYgfSwKKyAgICB9OworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisJdV9jaGFyIGVuY29kZWRbMjU2XTsKKwlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJdV9jaGFyICpidWlsZF9yZXN1bHQ7CisJc2l6ZV90IGRlY29kZWRfbGVuZ3RoOworCXVfY2hhciBkZWNvZGVkX3R5cGU7CisJc3RydWN0IGNvdW50ZXI2NCBkZWNvZGVkX3ZhbHVlID0geyAwIH07CisJdV9jaGFyICpwYXJzZV9yZXN1bHQ7CisgICAgICAgIHVfY2hhciAqcmJ1aWxkX3Jlc3VsdCA9IE5VTEw7CisgICAgICAgIHNpemVfdCByYnVpbGRfbGVuID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisKKwllbmNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKTsKKwlidWlsZF9yZXN1bHQgPSBhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoZW5jb2RlZCwgJmVuY29kZWRfbGVuZ3RoLAorCQkJCQkJQVNOX0NPVU5URVI2NCwKKwkJCQkJCSZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKTsKKwlPS0YoYnVpbGRfcmVzdWx0ICsgZW5jb2RlZF9sZW5ndGggPT0gZW5jb2RlZCArIHNpemVvZihlbmNvZGVkKSwKKwkgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdSkiLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisJZGVjb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aDsKKwlwYXJzZV9yZXN1bHQgPSBhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoZW5jb2RlZCwgJmRlY29kZWRfbGVuZ3RoLAorCQkJCQkJJmRlY29kZWRfdHlwZSwgJmRlY29kZWRfdmFsdWUsCisJCQkJCQlzaXplb2YoZGVjb2RlZF92YWx1ZSkpOworCU9LRihwYXJzZV9yZXN1bHQgJiYgZGVjb2RlZF90eXBlID09IEFTTl9DT1VOVEVSNjQKKwkgICAgJiYgbWVtY21wKCZkZWNvZGVkX3ZhbHVlLCAmaW50dmFsW2ldLCBzaXplb2YoZGVjb2RlZF92YWx1ZSkpID09IDAsCisJICAgICgiYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KGFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1KSkgJXM7IgorCSAgICAgIiBkZWNvZGVkIHR5cGUgJWQgPD4gJWQ7IGRlY29kZWQgdmFsdWUgJWxsdSIsCisJICAgICBUT1VJTlQ2NChpbnR2YWxbaV0pLAorCSAgICAgcGFyc2VfcmVzdWx0ID09IGJ1aWxkX3Jlc3VsdCA/ICJzdWNjZWVkZWQiIDogImZhaWxlZCIsCisJICAgICBkZWNvZGVkX3R5cGUsIEFTTl9DT1VOVEVSNjQsIFRPVUlOVDY0KGRlY29kZWRfdmFsdWUpKSk7CisKKyAgICAgICAgT0tGKGFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCgmcmJ1aWxkX3Jlc3VsdCwgJnJidWlsZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwgMSwgQVNOX0NPVU5URVI2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSksCisgICAgICAgICAgICAoImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1ZCkiLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIE9LRihzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aCA9PSBvZmZzZXQgJiYKKyAgICAgICAgICAgIG1lbWNtcChlbmNvZGVkLCByYnVpbGRfcmVzdWx0ICsgcmJ1aWxkX2xlbiAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQpID09IDAsCisgICAgICAgICAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGxkKSAhPSAiCisgICAgICAgICAgICAgImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCglbGxkKSIsCisgICAgICAgICAgICAgVE9VSU5UNjQoaW50dmFsW2ldKSwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBmcmVlIChyYnVpbGRfcmVzdWx0KTsKKyAgICB9CisKKyNpZmRlZiBORVRTTk1QX1dJVEhfT1BBUVVFX1NQRUNJQUxfVFlQRVMKKworICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytpKSB7CisJdV9jaGFyIGVuY29kZWRbMjU2XTsKKwlzaXplX3QgZW5jb2RlZF9sZW5ndGg7CisJdV9jaGFyICpidWlsZF9yZXN1bHQ7CisJc2l6ZV90IGRlY29kZWRfbGVuZ3RoOworCXVfY2hhciBkZWNvZGVkX3R5cGU7CisJc3RydWN0IGNvdW50ZXI2NCBkZWNvZGVkX3ZhbHVlID0geyAwIH07CisJdV9jaGFyICpwYXJzZV9yZXN1bHQ7CisgICAgICAgIHVfY2hhciAqcmJ1aWxkX3Jlc3VsdCA9IE5VTEw7CisgICAgICAgIHNpemVfdCByYnVpbGRfbGVuID0gMDsKKyAgICAgICAgc2l6ZV90IG9mZnNldCA9IDA7CisKKwllbmNvZGVkX2xlbmd0aCA9IHNpemVvZihlbmNvZGVkKTsKKwlidWlsZF9yZXN1bHQgPSBhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoZW5jb2RlZCwgJmVuY29kZWRfbGVuZ3RoLAorCQkJCQkJQVNOX09QQVFVRV9DT1VOVEVSNjQsCisJCQkJCQkmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSk7CisJT0tGKGJ1aWxkX3Jlc3VsdCArIGVuY29kZWRfbGVuZ3RoID09IGVuY29kZWQgKyBzaXplb2YoZW5jb2RlZCksCisJICAgICgiYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHUpIiwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworCWRlY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGg7CisJcGFyc2VfcmVzdWx0ID0gYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0KGVuY29kZWQsICZkZWNvZGVkX2xlbmd0aCwKKwkJCQkJCSZkZWNvZGVkX3R5cGUsICZkZWNvZGVkX3ZhbHVlLAorCQkJCQkJc2l6ZW9mKGRlY29kZWRfdmFsdWUpKTsKKwlPS0YocGFyc2VfcmVzdWx0ICYmIGRlY29kZWRfdHlwZSA9PSBBU05fT1BBUVVFX0NPVU5URVI2NAorCSAgICAmJiBtZW1jbXAoJmRlY29kZWRfdmFsdWUsICZpbnR2YWxbaV0sIHNpemVvZihkZWNvZGVkX3ZhbHVlKSkgPT0gMCwKKwkgICAgKCJhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0KCVsbHUpKSAlczsiCisJICAgICAiIGRlY29kZWQgdHlwZSAlZCA8PiAlZDsgZGVjb2RlZCB2YWx1ZSAlbGx1IiwKKwkgICAgIFRPVUlOVDY0KGludHZhbFtpXSksCisJICAgICBwYXJzZV9yZXN1bHQgPT0gYnVpbGRfcmVzdWx0ID8gInN1Y2NlZWRlZCIgOiAiZmFpbGVkIiwKKwkgICAgIGRlY29kZWRfdHlwZSwgQVNOX09QQVFVRV9DT1VOVEVSNjQsIFRPVUlOVDY0KGRlY29kZWRfdmFsdWUpKSk7CisKKyAgICAgICAgT0tGKGFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCgmcmJ1aWxkX3Jlc3VsdCwgJnJidWlsZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9mZnNldCwgMSwgQVNOX09QQVFVRV9DT1VOVEVSNjQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmludHZhbFtpXSwgc2l6ZW9mKGludHZhbFtpXSkpLAorICAgICAgICAgICAgKCJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdWQpIiwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBPS0Yoc2l6ZW9mKGVuY29kZWQpIC0gZW5jb2RlZF9sZW5ndGggPT0gb2Zmc2V0ICYmCisgICAgICAgICAgICBtZW1jbXAoZW5jb2RlZCwgcmJ1aWxkX3Jlc3VsdCArIHJidWlsZF9sZW4gLSBvZmZzZXQsCisgICAgICAgICAgICAgICAgICAgb2Zmc2V0KSA9PSAwLAorICAgICAgICAgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsZCkgIT0gIgorICAgICAgICAgICAgICJhc25fcmVhbGxvY19yYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsZCkiLAorICAgICAgICAgICAgIFRPVUlOVDY0KGludHZhbFtpXSksIFRPVUlOVDY0KGludHZhbFtpXSkpKTsKKyAgICAgICAgZnJlZSAocmJ1aWxkX3Jlc3VsdCk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKwl1X2NoYXIgZW5jb2RlZFsyNTZdOworCXNpemVfdCBlbmNvZGVkX2xlbmd0aDsKKwl1X2NoYXIgKmJ1aWxkX3Jlc3VsdDsKKwlzaXplX3QgZGVjb2RlZF9sZW5ndGg7CisJdV9jaGFyIGRlY29kZWRfdHlwZTsKKwlzdHJ1Y3QgY291bnRlcjY0IGRlY29kZWRfdmFsdWUgPSB7IDAgfTsKKwl1X2NoYXIgKnBhcnNlX3Jlc3VsdDsKKyAgICAgICAgdV9jaGFyICpyYnVpbGRfcmVzdWx0ID0gTlVMTDsKKyAgICAgICAgc2l6ZV90IHJidWlsZF9sZW4gPSAwOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gMDsKKworCWVuY29kZWRfbGVuZ3RoID0gc2l6ZW9mKGVuY29kZWQpOworCWJ1aWxkX3Jlc3VsdCA9IGFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NChlbmNvZGVkLCAmZW5jb2RlZF9sZW5ndGgsCisJCQkJCQlBU05fT1BBUVVFX1U2NCwKKwkJCQkJCSZpbnR2YWxbaV0sIHNpemVvZihpbnR2YWxbaV0pKTsKKwlPS0YoYnVpbGRfcmVzdWx0ICsgZW5jb2RlZF9sZW5ndGggPT0gZW5jb2RlZCArIHNpemVvZihlbmNvZGVkKSwKKwkgICAgKCJhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdSkiLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisJZGVjb2RlZF9sZW5ndGggPSBzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aDsKKwlwYXJzZV9yZXN1bHQgPSBhc25fcGFyc2VfdW5zaWduZWRfaW50NjQoZW5jb2RlZCwgJmRlY29kZWRfbGVuZ3RoLAorCQkJCQkJJmRlY29kZWRfdHlwZSwgJmRlY29kZWRfdmFsdWUsCisJCQkJCQlzaXplb2YoZGVjb2RlZF92YWx1ZSkpOworCU9LRihwYXJzZV9yZXN1bHQgJiYgZGVjb2RlZF90eXBlID09IEFTTl9PUEFRVUVfVTY0CisJICAgICYmIG1lbWNtcCgmZGVjb2RlZF92YWx1ZSwgJmludHZhbFtpXSwgc2l6ZW9mKGRlY29kZWRfdmFsdWUpKSA9PSAwLAorCSAgICAoImFzbl9wYXJzZV91bnNpZ25lZF9pbnQ2NChhc25fYnVpbGRfdW5zaWduZWRfaW50NjQoJWxsdSkpICVzOyIKKwkgICAgICIgZGVjb2RlZCB0eXBlICVkIDw+ICVkOyBkZWNvZGVkIHZhbHVlICVsbHUiLAorCSAgICAgVE9VSU5UNjQoaW50dmFsW2ldKSwKKwkgICAgIHBhcnNlX3Jlc3VsdCA9PSBidWlsZF9yZXN1bHQgPyAic3VjY2VlZGVkIiA6ICJmYWlsZWQiLAorCSAgICAgZGVjb2RlZF90eXBlLCBBU05fT1BBUVVFX1U2NCwgVE9VSU5UNjQoZGVjb2RlZF92YWx1ZSkpKTsKKworICAgICAgICBPS0YoYXNuX3JlYWxsb2NfcmJ1aWxkX3Vuc2lnbmVkX2ludDY0KCZyYnVpbGRfcmVzdWx0LCAmcmJ1aWxkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb2Zmc2V0LCAxLCBBU05fT1BBUVVFX1U2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmaW50dmFsW2ldLCBzaXplb2YoaW50dmFsW2ldKSksCisgICAgICAgICAgICAoImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCglbGx1ZCkiLCBUT1VJTlQ2NChpbnR2YWxbaV0pKSk7CisgICAgICAgIE9LRihzaXplb2YoZW5jb2RlZCkgLSBlbmNvZGVkX2xlbmd0aCA9PSBvZmZzZXQgJiYKKyAgICAgICAgICAgIG1lbWNtcChlbmNvZGVkLCByYnVpbGRfcmVzdWx0ICsgcmJ1aWxkX2xlbiAtIG9mZnNldCwKKyAgICAgICAgICAgICAgICAgICBvZmZzZXQpID09IDAsCisgICAgICAgICAgICAoImFzbl9idWlsZF91bnNpZ25lZF9pbnQ2NCglbGxkKSAhPSAiCisgICAgICAgICAgICAgImFzbl9yZWFsbG9jX3JidWlsZF91bnNpZ25lZF9pbnQ2NCglbGxkKSIsCisgICAgICAgICAgICAgVE9VSU5UNjQoaW50dmFsW2ldKSwgVE9VSU5UNjQoaW50dmFsW2ldKSkpOworICAgICAgICBmcmVlIChyYnVpbGRfcmVzdWx0KTsKKyAgICB9CisKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDA5bGFyZ2VfZmRfc2V0X2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOWxhcmdlX2ZkX3NldF9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVlNGQ0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAwOWxhcmdlX2ZkX3NldF9jbGliLmMKQEAgLTAsMCArMSw0NiBAQAorLyogSEVBREVSIFRlc3RpbmcgbmV0c25tcF9sYXJnZV9mZF9zZXQgKi8KKworbmV0c25tcF9sYXJnZV9mZF9zZXQgZmRzOworbmV0c25tcF9sYXJnZV9mZF9zZXRfaW5pdCgmZmRzLCAyMDAwKTsKK09LRihmZHMubGZzX3NldHNpemUgPT0gMjAwMCwgKCJpbml0aWFsaXphdGlvbiIpKTsKK09LRihuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoJmZkcywgMjAwMCkgPT0gMSwgKCJyZXNpemluZyB0byAyMDAwIikpOworTkVUU05NUF9MQVJHRV9GRF9aRVJPKCZmZHMpOworCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGZkcy5sZnNfc2V0c2l6ZTsgKytpKSB7CisgICAgICAgIE9LRighTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBub3Qgc2V0IiwgaSkpOworCU5FVFNOTVBfTEFSR0VfRkRfU0VUKGksICZmZHMpOworCU9LRihORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIHNldCIsIGkpKTsKKwlORVRTTk1QX0xBUkdFX0ZEX0NMUihpLCAmZmRzKTsKKwlPS0YoIU5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgbm90IHNldCIsIGkpKTsKKyAgICB9Cit9CisKK09LRihuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoJmZkcywgMzAwMCkgPT0gMSwgKCJyZXNpemluZyB0byAzMDAwIikpOworCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGZkcy5sZnNfc2V0c2l6ZTsgKytpKSB7CisgICAgICAgIE9LRighTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBub3Qgc2V0IiwgaSkpOworCU5FVFNOTVBfTEFSR0VfRkRfU0VUKGksICZmZHMpOworCU9LRihORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIHNldCIsIGkpKTsKKwlORVRTTk1QX0xBUkdFX0ZEX0NMUihpLCAmZmRzKTsKKwlPS0YoIU5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgbm90IHNldCIsIGkpKTsKKyAgICB9Cit9CisKK09LRihuZXRzbm1wX2xhcmdlX2ZkX3NldF9yZXNpemUoJmZkcywgMTAwMCkgPT0gMSwgKCJyZXNpemluZyB0byAxMDAwIikpOworCit7CisgICAgaW50IGk7CisgICAgZm9yIChpID0gMDsgaSA8IGZkcy5sZnNfc2V0c2l6ZTsgKytpKSB7CisgICAgICAgIE9LRighTkVUU05NUF9MQVJHRV9GRF9JU1NFVChpLCAmZmRzKSwgKCIlZCBpcyBub3Qgc2V0IiwgaSkpOworCU5FVFNOTVBfTEFSR0VfRkRfU0VUKGksICZmZHMpOworCU9LRihORVRTTk1QX0xBUkdFX0ZEX0lTU0VUKGksICZmZHMpLCAoIiVkIGlzIHNldCIsIGkpKTsKKwlORVRTTk1QX0xBUkdFX0ZEX0NMUihpLCAmZmRzKTsKKwlPS0YoIU5FVFNOTVBfTEFSR0VfRkRfSVNTRVQoaSwgJmZkcyksICgiJWQgaXMgbm90IHNldCIsIGkpKTsKKyAgICB9Cit9CisKK25ldHNubXBfbGFyZ2VfZmRfc2V0X2NsZWFudXAoJmZkcyk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTBuZXRzbm1wX3N0cmluZ190aW1lX3RvX3NlY3NfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEwbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzFhZWViCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDEwbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzX2NsaWIuYwpAQCAtMCwwICsxLDQ1IEBACisvKiBIRUFERVIgVGVzdGluZyB0aGUgbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzIEFQSSAqLworaW50IHNlY3M7CisKKyNkZWZpbmUgVEVTVElUKHgseSkgXAorICAgIE9LRih5ID09IChzZWNzID0gbmV0c25tcF9zdHJpbmdfdGltZV90b19zZWNzKHgpKSwgXAorICAgICAgICAoIm5ldHNubXBfc3RyaW5nX3RpbWVfdG9fc2VjcyBvZiAlcyByZXR1cm5lZCAlZCwgbm90IDUiLCB4LCBzZWNzKSkKKworVEVTVElUKCI1IiwgNSk7CitURVNUSVQoIjUiLCA1KTsKKworVEVTVElUKCI1cyIsIDUpOworVEVTVElUKCI1UyIsIDUpOworCitURVNUSVQoIjVtIiwgNSAqIDYwKTsKK1RFU1RJVCgiNU0iLCA1ICogNjApOworCitURVNUSVQoIjVoIiwgNSAqIDYwICogNjApOworVEVTVElUKCI1SCIsIDUgKiA2MCAqIDYwKTsKKworVEVTVElUKCI1ZCIsIDUgKiA2MCAqIDYwICogMjQpOworVEVTVElUKCI1RCIsIDUgKiA2MCAqIDYwICogMjQpOworCitURVNUSVQoIjV3IiwgNSAqIDYwICogNjAgKiAyNCAqIDcpOworVEVTVElUKCI1VyIsIDUgKiA2MCAqIDYwICogMjQgKiA3KTsKKworLyogbm93IHdpdGggbG9uZ2VyIHRpbWVzICovCitURVNUSVQoIjEyMzQiLCAxMjM0KTsKK1RFU1RJVCgiMTIzNCIsIDEyMzQpOworCitURVNUSVQoIjEyMzRzIiwgMTIzNCk7CitURVNUSVQoIjEyMzRTIiwgMTIzNCk7CisKK1RFU1RJVCgiMTIzNG0iLCAxMjM0ICogNjApOworVEVTVElUKCIxMjM0TSIsIDEyMzQgKiA2MCk7CisKK1RFU1RJVCgiMTIzNGgiLCAxMjM0ICogNjAgKiA2MCk7CitURVNUSVQoIjEyMzRIIiwgMTIzNCAqIDYwICogNjApOworCitURVNUSVQoIjEyMzRkIiwgMTIzNCAqIDYwICogNjAgKiAyNCk7CitURVNUSVQoIjEyMzREIiwgMTIzNCAqIDYwICogNjAgKiAyNCk7CisKK1RFU1RJVCgiMTIzNHciLCAxMjM0ICogNjAgKiA2MCAqIDI0ICogNyk7CitURVNUSVQoIjEyMzRXIiwgMTIzNCAqIDYwICogNjAgKiAyNCAqIDcpOworCisKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMXNubXBfb2xkX2FwaV9yZWdpc3RyYXRpb25fY2FnZW50bGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTFzbm1wX29sZF9hcGlfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMWQ0NDkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTFzbm1wX29sZF9hcGlfcmVnaXN0cmF0aW9uX2NhZ2VudGxpYi5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qIEhFQURFUiBUZXN0aW5nIFNOTVAgaGFuZGxlciByZWdpc3RyYXRpb24gdmlhIHRoZSBvbGQgQVBJICovCisKK3N0YXRpYyBvaWQgT2lkW10gPSB7IDEsIDMsIDYsIDEsIDMsIDMyNyB9OyAvKiBleHBlcmltZW50YWwuMzI3ICovCitzdHJ1Y3QgdmFyaWFibGUgdmFyX2FycmF5W10gPSB7CisgICAgeyAwLCAwLyp0eXBlKi8sIDAvKmFjbCovLCBOVUxMLypmaW5kVmFyKi8sIDcsIHsgMSwgMywgNiwgMSwgMywgMzI3LCAxIH0gfSwKKyAgICB7IDAsIDAvKnR5cGUqLywgMC8qYWNsKi8sIE5VTEwvKmZpbmRWYXIqLywgNywgeyAxLCAzLCA2LCAxLCAzLCAzMjcsIDIgfSB9LAorICAgIHsgMCwgMC8qdHlwZSovLCAwLyphY2wqLywgTlVMTC8qZmluZFZhciovLCA3LCB7IDEsIDMsIDYsIDEsIDMsIDMyNywgMyB9IH0sCit9OworbmV0c25tcF9zZXNzaW9uICpzZXNzOworaW50IHJlczsKKworaW5pdF9zbm1wKCJzbm1wIik7CisKK3Nlc3MgPSBjYWxsb2MoMSwgc2l6ZW9mKCpzZXNzKSk7Citzbm1wX3Nlc3NfaW5pdChzZXNzKTsKKworcmVzID0gCituZXRzbm1wX3JlZ2lzdGVyX29sZF9hcGkoImV4cC4zMjcuYSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgdmFyX2FycmF5LAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2YXJfYXJyYXlbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZih2YXJfYXJyYXkpL3NpemVvZih2YXJfYXJyYXlbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIE9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoT2lkKS9zaXplb2YoT2lkWzBdKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAyLCAvKiBwcmlvcml0eSAqLworICAgICAgICAgICAgICAgICAgICAgICAgIDAsIC8qIHJhbmdlX3N1YmlkICovCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogcmFuZ2VfdWJvdW5kICovCisgICAgICAgICAgICAgICAgICAgICAgICAgc2VzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAiY29udGV4dCIsIDUvKnRpbWVvdXQqLywgMC8qZmxhZ3MgLSBpZ25vcmVkKi8pOworT0socmVzID09IFNOTVBFUlJfU1VDQ0VTUywgIkhhbmRsZXIgcmVnaXN0cmF0aW9uICgxKS4iKTsKKworLyogVmVyaWZ5IHRoYXQgZHVwbGljYXRlIHJlZ2lzdHJhdGlvbiBkb2VzIG5vdCBjYXVzZSBhbnkgaGF2b2MuICovCityZXMgPSAKK25ldHNubXBfcmVnaXN0ZXJfb2xkX2FwaSgiZXhwLjMyNy5iIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICB2YXJfYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZhcl9hcnJheVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHZhcl9hcnJheSkvc2l6ZW9mKHZhcl9hcnJheVswXSksCisgICAgICAgICAgICAgICAgICAgICAgICAgT2lkLAorICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihPaWQpL3NpemVvZihPaWRbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICAgIDIsIC8qIHByaW9yaXR5ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgMCwgLyogcmFuZ2Vfc3ViaWQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAwLCAvKiByYW5nZV91Ym91bmQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICBzZXNzLAorICAgICAgICAgICAgICAgICAgICAgICAgICJjb250ZXh0IiwgNS8qdGltZW91dCovLCAwLypmbGFncyAtIGlnbm9yZWQqLyk7CitPSyhyZXMgPT0gU05NUEVSUl9TVUNDRVNTLCAiSGFuZGxlciByZWdpc3RyYXRpb24gKDIpLiIpOworCitzbm1wX3NodXRkb3duKCJzbm1wIik7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTJiaW5hcnlfYXJyYXlfb2lkX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxMmJpbmFyeV9hcnJheV9vaWRfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZWI1MDIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTJiaW5hcnlfYXJyYXlfb2lkX2NsaWIuYwpAQCAtMCwwICsxLDcyIEBACisvKiBIRUFERVIgVGVzdGluZyBiaW5hcnkgT0lEIGFycmF5ICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RfbmFtZVtdID0gImJpbmFyeS1hcnJheS1vZi1PSURzLXRlc3QiOworb2lkIG8xID0gMTsKK29pZCBvMiA9IDI7CitvaWQgbzMgPSA2Oworb2lkIG80ID0gODsKK29pZCBvNSA9IDk7CitvaWQgb3ggPSA3Oworb2lkIG95ID0gMTA7CituZXRzbm1wX2luZGV4IGkxLCBpMiwgaTMsIGk0LCBpNSwgaXgsIGl5LCAqaXA7Citjb25zdCBuZXRzbm1wX2luZGV4ICpjb25zdCBpX2xhc3QgPSAmaTU7CituZXRzbm1wX2luZGV4ICphW10gPSB7ICZpeCwgJml5IH07CituZXRzbm1wX2luZGV4ICpiW10gPSB7ICZpNCwgJmkyLCAmaTMsICZpMSwgJmk1IH07CituZXRzbm1wX2NvbnRhaW5lciAqYzsKK2ludCBpOworCitpbml0X3NubXAodGVzdF9uYW1lKTsKKworYyA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKK2MtPmNvbXBhcmUgPSBuZXRzbm1wX2NvbXBhcmVfbmV0c25tcF9pbmRleDsKKyAgICAKK2kxLm9pZHMgPSAmbzE7CitpMi5vaWRzID0gJm8yOworaTMub2lkcyA9ICZvMzsKK2k0Lm9pZHMgPSAmbzQ7CitpNS5vaWRzID0gJm81OworaXgub2lkcyA9ICZveDsKK2l5Lm9pZHMgPSAmb3k7CitpMS5sZW4gPSBpMi5sZW4gPSBpMy5sZW4gPSBpNC5sZW4gPSBpNS5sZW4gPSBpeC5sZW4gPSBpeS5sZW4gPSAxOworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGIpL3NpemVvZihiWzBdKTsgKytpKQorICAgIENPTlRBSU5FUl9JTlNFUlQoYywgYltpXSk7CisKK2ZvciAoaXAgPSBDT05UQUlORVJfRklSU1QoYyk7IGlwOyBpcCA9IENPTlRBSU5FUl9ORVhUKGMsIGlwKSkgeworICAgIGZvciAoaSA9IHNpemVvZihiKS9zaXplb2YoYlswXSkgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgaWYgKGMtPmNvbXBhcmUoaXAsIGJbaV0pID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICBPS0YoaSA+PSAwLCAoIk9JRCBiWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCBwcmVzZW50IiwgaSwgYltpXS0+b2lkc1swXSkpOworfQorCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGIpL3NpemVvZihiWzBdKTsgKytpKSB7CisgICAgaXAgPSBDT05UQUlORVJfRklORChjLCBiW2ldKTsKKyAgICBPS0YoaXAsICgiVmFsdWUgYlslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQgcHJlc2VudCIsIGksIGJbaV0tPm9pZHNbMF0pKTsKKyAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsIGJbaV0pOworICAgIGlmIChjLT5jb21wYXJlKGJbaV0sIGlfbGFzdCkgPCAwKQorICAgICAgICBPS0YoaXAgJiYgYy0+Y29tcGFyZShiW2ldLCBpcCkgPCAwLAorICAgICAgICAgICAgKCJTdWNjZXNzb3Igb2YgYlslZF0gPSAlIiBORVRTTk1QX1BSSW8gImQgaXMgJSIgTkVUU05NUF9QUklvICJkIiwKKyAgICAgICAgICAgICBpLCBiW2ldLT5vaWRzWzBdLCBpcC0+b2lkc1swXSkpOworICAgIGVsc2UKKyAgICAgICAgT0tGKCFpcCwgKCJObyBzdWNjZXNzb3IgZm91bmQgZm9yIGJbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIiwgaSwKKyAgICAgICAgICAgICAgICAgIGJbaV0tPm9pZHNbMF0pKTsKK30KKworZm9yIChpID0gMDsgaSA8IHNpemVvZihhKS9zaXplb2YoYVswXSk7ICsraSkgeworICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYywgYVtpXSk7CisgICAgT0tGKCFpcCwgKCJhWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCBhYnNlbnQiLCBpLCBhW2ldLT5vaWRzWzBdKSk7CisgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLCBhW2ldKTsKKyAgICBpZiAoYy0+Y29tcGFyZShhW2ldLCBpX2xhc3QpIDwgMCkKKyAgICAgICAgT0tGKGlwICYmIGMtPmNvbXBhcmUoaXAsIGFbaV0pID4gMCwKKyAgICAgICAgICAgICgiU3VjY2Vzc29yIG9mIGFbJWRdID0gJSIgTkVUU05NUF9QUklvICJkIGlzICUiIE5FVFNOTVBfUFJJbyAiZCIsCisgICAgICAgICAgICAgaSwgYVtpXS0+b2lkc1swXSwgaXAtPm9pZHNbMF0pKTsKKyAgICBlbHNlCisgICAgICAgIE9LRighaXAsICgiTm8gc3VjY2Vzc29yIGZvdW5kIGZvciBhWyVkXSA9ICUiIE5FVFNOTVBfUFJJbyAiZCIsIGksCisgICAgICAgICAgICAgICAgICBhW2ldLT5vaWRzWzBdKSk7Cit9CisKK3doaWxlICgoaXAgPSBDT05UQUlORVJfRklSU1QoYykpKQorICBDT05UQUlORVJfUkVNT1ZFKGMsIGlwKTsKK0NPTlRBSU5FUl9GUkVFKGMpOworCitzbm1wX3NodXRkb3duKHRlc3RfbmFtZSk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTNiaW5hcnlfYXJyYXlfc3RyaW5nX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxM2JpbmFyeV9hcnJheV9zdHJpbmdfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNjNDM2MWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTNiaW5hcnlfYXJyYXlfc3RyaW5nX2NsaWIuYwpAQCAtMCwwICsxLDU5IEBACisvKiBIRUFERVIgVGVzdGluZyBiaW5hcnkgc3RyaW5nIGFycmF5ICovCisKK3N0YXRpYyBjb25zdCBjaGFyIHRlc3RfbmFtZVtdID0gImJpbmFyeS1hcnJheS1vZi1zdHJpbmdzLXRlc3QiOworY29uc3QgY2hhciBvMVtdID0gInplYnJhIjsKK2NvbnN0IGNoYXIgbzJbXSA9ICJiLXR3byI7Citjb25zdCBjaGFyIG8zW10gPSAiYiI7Citjb25zdCBjaGFyIG80W10gPSAiY2VkYXIiOworY29uc3QgY2hhciBvNVtdID0gImFscGhhIjsKK2NvbnN0IGNoYXIgb3hbXSA9ICJkZXYiOworY29uc3QgY2hhciBveVtdID0gImFhIjsKK2NvbnN0IGNoYXIqIGNvbnN0IG9fbGFzdCA9IG8xOworY29uc3QgY2hhciAqaXA7Citjb25zdCBjaGFyICpjb25zdCBhW10gPSB7IG94LCBveSB9OworY29uc3QgY2hhciAqY29uc3QgYltdID0geyBvNCwgbzIsIG8zLCBvMSwgbzUgfTsKK25ldHNubXBfY29udGFpbmVyICpjOworaW50IGk7CisKK2luaXRfc25tcCh0ZXN0X25hbWUpOworCitjID0gbmV0c25tcF9jb250YWluZXJfZ2V0X2JpbmFyeV9hcnJheSgpOworYy0+Y29tcGFyZSA9IChuZXRzbm1wX2NvbnRhaW5lcl9jb21wYXJlKilzdHJjbXA7CisgICAgCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGIpL3NpemVvZihiWzBdKTsgKytpKQorICAgIENPTlRBSU5FUl9JTlNFUlQoYywgYltpXSk7CisKK2ZvciAoaXAgPSBDT05UQUlORVJfRklSU1QoYyk7IGlwOyBpcCA9IENPTlRBSU5FUl9ORVhUKGMsIGlwKSkgeworICAgIGZvciAoaSA9IHNpemVvZihiKS9zaXplb2YoYlswXSkgLSAxOyBpID49IDA7IC0taSkKKyAgICAgICAgaWYgKGMtPmNvbXBhcmUoaXAsIGJbaV0pID09IDApCisgICAgICAgICAgICBicmVhazsKKyAgICBPS0YoaSA+PSAwLCAoInN0cmluZyBiWyVkXSA9IFwiJXNcIiBwcmVzZW50IiwgaSwgYltpXSkpOworfQorCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGIpL3NpemVvZihiWzBdKTsgKytpKSB7CisgICAgaXAgPSBDT05UQUlORVJfRklORChjLCBiW2ldKTsKKyAgICBPS0YoaXAsICgiYlslZF0gPSBcIiVzXCIgcHJlc2VudCIsIGksIGJbaV0pKTsKKyAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsIGJbaV0pOworICAgIGlmIChjLT5jb21wYXJlKGJbaV0sIG9fbGFzdCkgPCAwKQorICAgICAgICBPS0YoaXAgJiYgYy0+Y29tcGFyZShiW2ldLCBpcCkgPCAwLAorICAgICAgICAgICAgKCJTdWNjZXNzb3Igb2YgYlslZF0gPSBcIiVzXCIgaXMgXCIlc1wiIiwgaSwgYltpXSwgaXApKTsKKyAgICBlbHNlCisgICAgICAgIE9LRighaXAsICgiTm8gc3VjY2Vzc29yIGZvdW5kIGZvciBiWyVkXSA9IFwiJXNcIiIsIGksIGJbaV0pKTsKK30KKworZm9yIChpID0gMDsgaSA8IHNpemVvZihhKS9zaXplb2YoYVswXSk7ICsraSkgeworICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYywgYVtpXSk7CisgICAgT0tGKCFpcCwgKCJhWyVkXSA9IFwiJXNcIiBhYnNlbnQiLCBpLCBhW2ldKSk7CisgICAgaXAgPSBDT05UQUlORVJfTkVYVChjLCBhW2ldKTsKKyAgICBpZiAoYy0+Y29tcGFyZShhW2ldLCBvX2xhc3QpIDwgMCkKKyAgICAgICAgT0tGKGlwICYmIGMtPmNvbXBhcmUoaXAsIGFbaV0pID4gMCwKKyAgICAgICAgICAgICgiU3VjY2Vzc29yIG9mIGFbJWRdID0gXCIlc1wiIGlzIFwiJXNcIiIsIGksIGFbaV0sIGlwKSk7CisgICAgZWxzZQorICAgICAgICBPS0YoIWlwLCAoIk5vIHN1Y2Nlc3NvciBmb3VuZCBmb3IgYVslZF0gPSBcIiVzXCIiLCBpLCBhW2ldKSk7Cit9CisKK3doaWxlICgoaXAgPSBDT05UQUlORVJfRklSU1QoYykpKQorICBDT05UQUlORVJfUkVNT1ZFKGMsIGlwKTsKK0NPTlRBSU5FUl9GUkVFKGMpOworCitzbm1wX3NodXRkb3duKHRlc3RfbmFtZSk7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTRnZXRob3N0YnlhZGRyX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNGdldGhvc3RieWFkZHJfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxYTU3OGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTRnZXRob3N0YnlhZGRyX2NsaWIuYwpAQCAtMCwwICsxLDk3IEBACisvKgorICogSEVBREVSIFRlc3RpbmcgbmV0c25tcF9nZXRob3N0YnlhZGRyKCkgCisgKi8KKworU09DS19TVEFSVFVQOworCit7CisgICAgaW50ICAgICAgICAgICAgIHJhbl90ZXN0ID0gMDsKKyNpZmRlZiBIQVZFX0dFVEhPU1RCWUFERFIKKyAgICBzdHJ1Y3QgaG9zdGVudCAqaCwgKmgyID0gTlVMTDsKKyAgICBzdHJ1Y3QgaW5fYWRkciAgdjRsb29wOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW5fYWRkcjsKKyAgICBpbnQgICAgICAgICAgICAgczsKKworICAgIHY0bG9vcC5zX2FkZHIgPSBodG9ubChJTkFERFJfTE9PUEJBQ0spOworICAgIG1lbXNldCgmc2luX2FkZHIsIDAsIHNpemVvZihzaW5fYWRkcikpOworICAgIHNpbl9hZGRyLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworICAgIHNpbl9hZGRyLnNpbl9hZGRyID0gdjRsb29wOworICAgIHMgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCk7CisgICAgaWYgKHMgPj0gMCkgeworICAgICAgICBpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZzaW5fYWRkciwgc2l6ZW9mKHNpbl9hZGRyKSkgPj0gMCkgeworICAgICAgICAgICAgaCA9IG5ldHNubXBfZ2V0aG9zdGJ5YWRkcigmdjRsb29wLCBzaXplb2YodjRsb29wKSwgQUZfSU5FVCk7CisgICAgICAgICAgICBpZiAoaCkKKyAgICAgICAgICAgICAgICBoMiA9IGdldGhvc3RieW5hbWUoaC0+aF9uYW1lKTsKKyAgICAgICAgICAgIE9LRihoICYmIChzdHJjbXAoaC0+aF9uYW1lLCAibG9jYWxob3N0IikgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgIChoMiAmJiBtZW1jbXAoaDItPmhfYWRkciwgJnY0bG9vcC5zX2FkZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodjRsb29wLnNfYWRkcikpID09IDApKSwKKyAgICAgICAgICAgICAgICAoIjEyNy4wLjAuMSBsb29rdXAgKCVzIC0+ICVzKSIsIGggPyBoLT5oX25hbWUgOiAiKGZhaWxlZCkiLAorICAgICAgICAgICAgICAgICBoMiA/IGluZXRfbnRvYSgqKHN0cnVjdCBpbl9hZGRyICopIGgyLT4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaF9hZGRyKSA6ICIoZmFpbGVkKSIpKTsKKyAgICAgICAgICAgIHJhbl90ZXN0ID0gMTsKKyAgICAgICAgfQorICAgICAgICBjbG9zZShzKTsKKyAgICB9CisjZW5kaWYKKyAgICBpZiAoIXJhbl90ZXN0KQorICAgICAgICBPS0YoMSwgKCJTa2lwcGVkIElQdjQgdGVzdCIpKTsKK30KKworeworICAgIHN0cnVjdCBob3N0ZW50ICpoOworI2lmZGVmIGN5Z3dpbgorICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgdjZsb29wID0geyB7IElONkFERFJfTE9PUEJBQ0tfSU5JVCB9IH07CisjZWxzZQorICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgdjZsb29wID0gSU42QUREUl9MT09QQkFDS19JTklUOworI2VuZGlmCisgICAgc3RydWN0IHNvY2thZGRyX2luNiBzaW42X2FkZHI7CisgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWRkciA9IE5VTEwsICphcDsKKyAgICBjaGFyICAgICAgICAgICAgYnVmWzY0XTsKKyAgICBpbnQgICAgICAgICAgICAgcywgcmVzLCByYW5fdGVzdCA9IDA7CisKKyAgICBtZW1zZXQoJnNpbjZfYWRkciwgMCwgc2l6ZW9mKHNpbjZfYWRkcikpOworICAgIHNpbjZfYWRkci5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworICAgIHNpbjZfYWRkci5zaW42X2FkZHIgPSB2Nmxvb3A7CisgICAgcyA9IHNvY2tldChBRl9JTkVUNiwgU09DS19ER1JBTSwgMCk7CisgICAgaWYgKHMgPj0gMCkgeworICAgICAgICBpZiAoYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopICZzaW42X2FkZHIsIHNpemVvZihzaW42X2FkZHIpKSA+PQorICAgICAgICAgICAgMCkgeworICAgICAgICAgICAgc3RyY3B5KGJ1ZiwgIihmYWlsZWQpIik7CisgICAgICAgICAgICBoID0gbmV0c25tcF9nZXRob3N0YnlhZGRyKCZ2Nmxvb3AsIHNpemVvZih2Nmxvb3ApLCBBRl9JTkVUNik7CisgICAgICAgICAgICBpZiAoaCkgeworICAgICAgICAgICAgICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOworICAgICAgICAgICAgICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX0lORVQ2OworICAgICAgICAgICAgICAgIHJlcyA9IGdldGFkZHJpbmZvKGgtPmhfbmFtZSwgTlVMTCwgJmhpbnRzLCAmYWRkcik7CisgICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoYXAgPSBhZGRyOyBhcDsgYXAgPSBhcC0+YWlfbmV4dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFwLT5haV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmV0X250b3AoYXAtPmFpX2ZhbWlseSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJigoc3RydWN0IHNvY2thZGRyX2luNiAqKSBhcC0+CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlfYWRkciktPnNpbjZfYWRkciwgYnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoYnVmKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgaWYgKCFhcCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweShidWYsICJubyBBRl9JTkVUNiBhZGRyZXNzIGZvdW5kIik7CisgICAgICAgICAgICAgICAgICAgIGlmIChhZGRyKQorICAgICAgICAgICAgICAgICAgICAgICAgZnJlZWFkZHJpbmZvKGFkZHIpOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJnZXRhZGRyaW5mbygpIGZhaWxlZDogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlcnJvcihlcnJubykpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE9LRihoICYmIChzdHJjbXAoaC0+aF9uYW1lLCAibG9jYWxob3N0IikgPT0gMCB8fAorICAgICAgICAgICAgICAgICAgICAgIChyZXMgPT0gMCAmJiBtZW1jbXAoYWRkci0+YWlfYWRkciwgJnNpbjZfYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzaW42X2FkZHIpKSA9PSAwKSksCisgICAgICAgICAgICAgICAgKCI6OjEgbG9va3VwICglcyAtPiAlcykiLCBoID8gaC0+aF9uYW1lIDogIihmYWlsZWQpIiwKKyAgICAgICAgICAgICAgICAgYnVmKSk7CisgICAgICAgICAgICByYW5fdGVzdCA9IDE7CisgICAgICAgIH0KKyAgICAgICAgY2xvc2Uocyk7CisgICAgfQorICAgIGlmICghcmFuX3Rlc3QpCisgICAgICAgIE9LRigxLCAoIlNraXBwZWQgSVB2NiB0ZXN0IikpOworfQorCitTT0NLX0NMRUFOVVA7CmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTVpbnQ2NF9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTVpbnQ2NF9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY1ZjRiNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNWludDY0X2NsaWIuYwpAQCAtMCwwICsxLDgyIEBACisvKiBIRUFERVIgVGVzdGluZyA2NC1iaXQgaW50ZWdlciBvcGVyYXRpb25zIChVNjQpLiAqLworCitpbnQgaSwgajsKK2NoYXIgYnVmWzIyXTsKK3N0YXRpYyBjb25zdCBpbnQ2NF90IGludHZhbFtdID0geworICAgIDAsCisgICAgLTEsCisgICAgMSwKKyAgICAzNywKKyAgICAweDdmZmZmZmZmVUwsCisgICAgMHg4MDAwMDAwMFVMLAorICAgIDB4OTk5OTk5OTlVTCwKKyAgICAweDdmZmZmZmZmZmZmZmZmZmZVTEwsCisgICAgMHg4MDAwMDAwMDAwMDAwMDAwVUxMLAorfTsKKworZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKyAgICBVNjQgYSwgYjsKKyAgICBhLmxvdyA9ICh1aW50MzJfdClpbnR2YWxbaV07CisgICAgYS5oaWdoID0gKHVpbnQzMl90KShpbnR2YWxbaV0gPj4gMzIpOworICAgIHByaW50STY0KGJ1ZiwgJmEpOworICAgIHJlYWQ2NCgmYiwgYnVmKTsKKyAgICBPS0YobWVtY21wKCZhLCAmYiwgc2l6ZW9mKGEpKSA9PSAwLAorICAgICAgICAoIlslZF06ICUiIFBSSWQ2NCAiIDw+ICVzIDw+ICUiIFBSSWQ2NCwgaSwgaW50dmFsW2ldLCBidWYsCisgICAgICAgICAoKHVpbnQ2NF90KWIuaGlnaCkgPDwgMzIgfCBiLmxvdykpOworfQorCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraSkgeworICAgIGZvciAoaiA9IGk7IGogPCBzaXplb2YoaW50dmFsKS9zaXplb2YoaW50dmFsWzBdKTsgKytqKSB7CisgICAgICAgIFU2NCBhLCBiOworICAgICAgICB1aW50NjRfdCBkOworICAgICAgICBhLmxvdyA9ICh1aW50MzJfdClpbnR2YWxbaV07CisgICAgICAgIGEuaGlnaCA9ICh1aW50MzJfdCkoaW50dmFsW2ldID4+IDMyKTsKKyAgICAgICAgYi5sb3cgPSAodWludDMyX3QpaW50dmFsW2pdOworICAgICAgICBiLmhpZ2ggPSAodWludDMyX3QpKGludHZhbFtqXSA+PiAzMik7CisgICAgICAgIHU2NEluY3IoJmEsICZiKTsKKyAgICAgICAgZCA9ICh1aW50NjRfdClhLmhpZ2ggPDwgMzIgfCBhLmxvdzsKKyAgICAgICAgT0tGKGludHZhbFtpXSArIGludHZhbFtqXSA9PSBkLAorICAgICAgICAgICAgKCIlIiBQUklkNjQgIiArICUiIFBSSWQ2NCAiID0gJSIgUFJJZDY0ICIgPD4gJSIgUFJJZDY0LCBpbnR2YWxbaV0sCisgICAgICAgICAgICAgaW50dmFsW2pdLCBpbnR2YWxbaV0gKyBpbnR2YWxbal0sIGQpKTsKKyAgICB9Cit9CisgICAgICAgIAorZm9yIChpID0gMDsgaSA8IHNpemVvZihpbnR2YWwpL3NpemVvZihpbnR2YWxbMF0pOyArK2kpIHsKKyAgICBmb3IgKGogPSBpOyBqIDwgc2l6ZW9mKGludHZhbCkvc2l6ZW9mKGludHZhbFswXSk7ICsraikgeworICAgICAgICBVNjQgYSwgYiwgYzsKKyAgICAgICAgdWludDY0X3QgZDsKKyAgICAgICAgYS5sb3cgPSAodWludDMyX3QpaW50dmFsW2ldOworICAgICAgICBhLmhpZ2ggPSAodWludDMyX3QpKGludHZhbFtpXSA+PiAzMik7CisgICAgICAgIGIubG93ID0gKHVpbnQzMl90KWludHZhbFtqXTsKKyAgICAgICAgYi5oaWdoID0gKHVpbnQzMl90KShpbnR2YWxbal0gPj4gMzIpOworICAgICAgICB1NjRTdWJ0cmFjdCgmYSwgJmIsICZjKTsKKyAgICAgICAgZCA9ICh1aW50NjRfdCljLmhpZ2ggPDwgMzIgfCBjLmxvdzsKKyAgICAgICAgT0tGKGludHZhbFtpXSAtIGludHZhbFtqXSA9PSBkLAorICAgICAgICAgICAgKCIlIiBQUklkNjQgIiAtICUiIFBSSWQ2NCAiID0gJSIgUFJJZDY0ICIgPD4gJSIgUFJJZDY0LCBpbnR2YWxbaV0sCisgICAgICAgICAgICAgaW50dmFsW2pdLCBpbnR2YWxbaV0gLSBpbnR2YWxbal0sIGQpKTsKKyAgICB9Cit9CisgICAgICAgIAoreworICAgIFU2NCBvbGRfdmFsLCBuZXdfdmFsOworICAgIG9sZF92YWwubG93ID0gNzsKKyAgICBvbGRfdmFsLmhpZ2ggPSAwOworICAgIG5ld192YWwgPSBvbGRfdmFsOworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMCkgPT0gMCwgImN3cmFwMSIpOworICAgIG5ld192YWwubG93ID0gODsKKyAgICBPSyhuZXRzbm1wX2M2NF9jaGVja19mb3JfMzJiaXRfd3JhcCgmb2xkX3ZhbCwgJm5ld192YWwsIDApID09IDAsICJjd3JhcDIiKTsKKyAgICBuZXdfdmFsLmxvdyA9IDY7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAwKSA9PSAzMiwgImN3cmFwMyIpOworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMSkgPT0gMzIKKyAgICAgICAmJiBuZXdfdmFsLmxvdyA9PSA2ICYmIG5ld192YWwuaGlnaCA9PSAxLCAiY3dyYXA0Iik7CisgICAgb2xkX3ZhbC5sb3cgPSA3OworICAgIG9sZF92YWwuaGlnaCA9IDB4ZmZmZmZmZmZVOworICAgIG5ld192YWwubG93ID0gNzsKKyAgICBuZXdfdmFsLmhpZ2ggPSBvbGRfdmFsLmhpZ2g7CisgICAgT0sobmV0c25tcF9jNjRfY2hlY2tfZm9yXzMyYml0X3dyYXAoJm9sZF92YWwsICZuZXdfdmFsLCAwKSA9PSAwLCAiY3dyYXA1Iik7CisgICAgbmV3X3ZhbC5sb3cgPSA4OworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMCkgPT0gMCwgImN3cmFwNiIpOworICAgIG5ld192YWwubG93ID0gNjsKKyAgICBuZXdfdmFsLmhpZ2ggPSAwOworICAgIE9LKG5ldHNubXBfYzY0X2NoZWNrX2Zvcl8zMmJpdF93cmFwKCZvbGRfdmFsLCAmbmV3X3ZhbCwgMCkgPT0gNjQsICJjd3JhcDciKTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNnJlYWRfY29uZmlnX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxNnJlYWRfY29uZmlnX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNmNlZWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE2cmVhZF9jb25maWdfY2xpYi5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIHJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0KCkuICovCisKK3N0cnVjdCByZWFkX2NvbmZpZ190ZXN0Y2FzZSB7CisgICAgLyoKKyAgICAgKiBpbnB1dHMgCisgICAgICovCisgICAgY29uc3QgY2hhciAgICAgKigqcGYpIChjb25zdCBjaGFyICogcmVhZGZyb20sIHVfY2hhciAqKiBzdHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBsZW4pOworICAgIGNvbnN0IGNoYXIgICAgICpyZWFkZnJvbTsKKyAgICBzaXplX3QgICAgICAgICAgb2J1Zl9sZW47CisKKyAgICAvKgorICAgICAqIGV4cGVjdGVkIG91dHB1dHMgCisgICAgICovCisgICAgc2l6ZV90ICAgICAgICAgIGV4cGVjdGVkX29mZnNldDsKKyAgICBjb25zdCB1X2NoYXIgICAqZXhwZWN0ZWRfb3V0cHV0OworICAgIHNpemVfdCAgICAgICAgICBleHBlY3RlZF9sZW47Cit9OworCitzdGF0aWMgY29uc3QgdV9jaGFyIG9idWYxW10gPSB7IDEsIDAsIDIgfTsKK3N0YXRpYyBjb25zdCB1X2NoYXIgb2J1ZjJbXSA9IHsgJ2EnLCAnYicsICdjJywgMCB9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHJlYWRfY29uZmlnX3Rlc3RjYXNlIHRlc3RfaW5wdXRbXSA9IHsKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIiIsICAgICAgICAgICAxLCAtMSwgTlVMTCwgIDAgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MCIsICAgICAgICAxLCAtMSwgTlVMTCwgIDEgfSwKKyAgICB7ICZyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZ19jb25zdCwgIjB4MCAwIiwgICAgICAxLCAtMSwgTlVMTCwgIDEgfSwKKworICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwMTAwMDIiLCAgIDEsIC0xLCBOVUxMLCAgMCB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwMTAwMDIiLCAgIDIsIC0xLCBOVUxMLCAgMCB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwMTAwMDIiLCAgIDMsIC0xLCBvYnVmMSwgMCB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwMTAwMDIiLCAgIDQsIC0xLCBvYnVmMSwgMyB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwMTAwMDIgMCIsIDQsICA5LCBvYnVmMSwgMyB9LAorICAgIHsgJnJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nX2NvbnN0LCAiMHgwMTAwMDIiLCAgIDAsIC0xLCBvYnVmMSwgMyB9LAorCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMiLCAgICAgICAgMSwgLTEsIE5VTEwsICAwIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMgeiIsICAgICAgMSwgIDQsIE5VTEwsICAwIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMiLCAgICAgICAgMiwgLTEsIE5VTEwsICAxIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMiLCAgICAgICAgMywgLTEsIG9idWYyLCAyIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMiLCAgICAgICAgNCwgLTEsIG9idWYyLCAzIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMgeiIsICAgICAgNCwgIDQsIG9idWYyLCAzIH0sCisgICAgeyAmcmVhZF9jb25maWdfcmVhZF9vY3RldF9zdHJpbmdfY29uc3QsICJhYmMiLCAgICAgICAgMCwgLTEsIG9idWYyLCAzIH0sCit9OworCit1bnNpZ25lZCBpbnQgaSwgaiwgb2s7CisKK2ZvciAoaSA9IDA7IGkgPCBzaXplb2YodGVzdF9pbnB1dCkgLyBzaXplb2YodGVzdF9pbnB1dFswXSk7IGkrKykgeworICAgIGNvbnN0IHN0cnVjdCByZWFkX2NvbmZpZ190ZXN0Y2FzZSAqY29uc3QgcCA9ICZ0ZXN0X2lucHV0W2ldOworICAgIHNpemVfdCAgICAgICAgICBsZW4gPSBwLT5vYnVmX2xlbjsKKyAgICB1X2NoYXIgICAgICAgICAqc3RyID0gbGVuID4gMCA/IG1hbGxvYyhsZW4pIDogTlVMTDsKKyAgICBjb25zdCBjaGFyICAgICAqcmVzdWx0OworICAgIHNpemVfdCAgICAgICAgICBvZmZzZXQ7CisKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICByZXN1bHQgPSAocC0+cGYpIChwLT5yZWFkZnJvbSwgJnN0ciwgJmxlbik7CisgICAgb2Zmc2V0ID0gcmVzdWx0ID8gcmVzdWx0IC0gcC0+cmVhZGZyb20gOiAtMTsKKyAgICBPS0Yob2Zmc2V0ID09IHAtPmV4cGVjdGVkX29mZnNldCwKKyAgICAgICAgKCJ0ZXN0ICVkOiBleHBlY3RlZCBvZmZzZXQgJSIgTkVUU05NUF9QUkl6ICJkLCBnb3Qgb2Zmc2V0ICUiCisgICAgICAgICBORVRTTk1QX1BSSXogImQiLCBpLCBwLT5leHBlY3RlZF9vZmZzZXQsIG9mZnNldCkpOworICAgIGlmIChvZmZzZXQgPT0gcC0+ZXhwZWN0ZWRfb2Zmc2V0KSB7CisgICAgICAgIE9LRihsZW4gPT0gcC0+ZXhwZWN0ZWRfbGVuLAorICAgICAgICAgICAgKCJ0ZXN0ICVkOiBleHBlY3RlZCBsZW5ndGggJSIgTkVUU05NUF9QUkl6ICJkLCBnb3QgbGVuZ3RoICUiCisgICAgICAgICAgICAgTkVUU05NUF9QUkl6ICJkIiwgaSwgcC0+ZXhwZWN0ZWRfbGVuLCBsZW4pKTsKKyAgICAgICAgaWYgKGxlbiA9PSBwLT5leHBlY3RlZF9sZW4pIHsKKyAgICAgICAgICAgIG9rID0gbGVuIDwgMCB8fCAhcC0+ZXhwZWN0ZWRfb3V0cHV0CisgICAgICAgICAgICAgICAgfHwgbWVtY21wKHN0ciwgcC0+ZXhwZWN0ZWRfb3V0cHV0LCBsZW4pID09IDAKKyAgICAgICAgICAgICAgICB8fCBwLT5leHBlY3RlZF9vdXRwdXRbbGVuXSAhPSAwOworICAgICAgICAgICAgT0tGKG9rLCAoInRlc3QgJWQ6IG91dHB1dCBidWZmZXIgbWlzbWF0Y2giLCBpKSk7CisgICAgICAgICAgICBpZiAoIW9rKSB7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeHBlY3RlZDogIik7CisgICAgICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IHAtPmV4cGVjdGVkX2xlbjsgKytqKQorICAgICAgICAgICAgICAgICAgICBwcmludGYoIiUwMnggIiwgcC0+ZXhwZWN0ZWRfb3V0cHV0W2pdKTsKKyAgICAgICAgICAgICAgICBwcmludGYoIlxuQWN0dWFsOiAgICIpOworICAgICAgICAgICAgICAgIGZvciAoaiA9IDA7IGogPCBsZW47ICsraikKKyAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlMDJ4ICIsIHN0cltqXSk7CisgICAgICAgICAgICAgICAgcHJpbnRmKCJcbiIpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHN0cikKKyAgICAgICAgZnJlZShzdHIpOworfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE3c3RydG91bGxfY2xpYi5jIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE3c3RydG91bGxfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYjljYWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTdzdHJ0b3VsbF9jbGliLmMKQEAgLTAsMCArMSw5NCBAQAorLyogSEVBREVSIFRlc3Rpbmcgc3RydG91bGwoKS4gKi8KKworI2lmZGVmIEhBVkVfU1RSVE9VTEwKKworT0soMSwgIlNraXBwaW5nIHN0cnRvdWxsKCkgdGVzdCBiZWNhdXNlIHVzaW5nIHN0cnRvdWxsKCkgZnJvbSBDIGxpYnJhcnkuXG4iKTs7CisKKyNlbHNlCisKKy8qCisgKiBVSU5UNjRfQzogQzk5IG1hY3JvIGZvciB0aGUgc3VmZml4IGZvciB1aW50NjRfdCBjb25zdGFudHMuIAorICovCisjaWZuZGVmIFVJTlQ2NF9DCisjaWZkZWYgX01TQ19WRVIKKyNkZWZpbmUgVUlOVDY0X0MoYykgYyMjdWk2NAorI2Vsc2UKKyNkZWZpbmUgVUlOVDY0X0MoYykgYyMjVUxMCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogQWNjb3JkaW5nIHRvIHRoZSBDOTkgc3RhbmRhcmQsIHRoZSBjb25zdGFudCBVTExPTkdfTUFYIG11c3QgYmUgZGVmaW5lZCBpbgorICogPGxpbWl0cy5oPi4gRGVmaW5lIGl0IGhlcmUgZm9yIHByZS1DOTkgY29tcGlsZXJzLgorICovCisjaWZuZGVmIFVMTE9OR19NQVgKKyNkZWZpbmUgVUxMT05HX01BWCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpCisjZW5kaWYKKworI2lmbmRlZiBQUkl1NjQKKyNpZmRlZiBfTVNDX1ZFUgorI2RlZmluZSBQUkl1NjQgIkk2NHUiCisjZWxzZQorI2RlZmluZSBQUkl1NjQgImxsdSIKKyNlbmRpZgorI2VuZGlmCisKK3N0cnVjdCBzdHJ0b3VsbF90ZXN0Y2FzZSB7CisgICAgLyoKKyAgICAgKiBpbnB1dHMgCisgICAgICovCisgICAgY29uc3QgY2hhciAgICAgKm5wdHI7CisgICAgaW50ICAgICAgICAgICAgIGJhc2U7CisgICAgLyoKKyAgICAgKiBleHBlY3RlZCBvdXRwdXRzIAorICAgICAqLworICAgIGludCAgICAgICAgICAgICBleHBlY3RlZF9lcnJubzsKKyAgICBpbnQgICAgICAgICAgICAgZXhwZWN0ZWRfZW5kOworICAgIHVpbnQ2NF90ICAgICAgICBleHBlY3RlZF9yZXN1bHQ7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0cnRvdWxsX3Rlc3RjYXNlIHRlc3RfaW5wdXRbXSA9IHsKKyAgICB7IjB4MCIsIDAsIDAsIDMsIDB9LAorICAgIHsiMSIsIDAsIDAsIDEsIDF9LAorICAgIHsiMHgxIiwgMCwgMCwgMywgMX0sCisgICAgeyIgIC0wNjY2IiwgMCwgMCwgNywgLTA2NjZ9LAorICAgIHsiICAtMHg2NjYiLCAwLCAwLCA4LCAtMHg2NjZ9LAorICAgIHsiMTg0NDY3NDQwNzM3MDk1NTE2MTQiLCAwLCAwLCAyMCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZlKX0sCisgICAgeyIweGZmZmZmZmZmZmZmZmZmZmUiLCAwLCAwLCAxOCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZlKX0sCisgICAgeyIxODQ0Njc0NDA3MzcwOTU1MTYxNSIsIDAsIDAsIDIwLCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKKyAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZiIsIDAsIDAsIDE4LCBVSU5UNjRfQygweGZmZmZmZmZmZmZmZmZmZmYpfSwKKyAgICB7IjE4NDQ2NzQ0MDczNzA5NTUxNjE2IiwgMCwgRVJBTkdFLCAyMCwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCisgICAgeyIweDEwMDAwMDAwMDAwMDAwMDAwIiwgMCwgRVJBTkdFLCAxOSwgVUlOVDY0X0MoMHhmZmZmZmZmZmZmZmZmZmZmKX0sCisgICAgeyJmZiIsIDE2LCAwLCAyLCAyNTV9LAorICAgIHsiMHhmZiIsIDE2LCAwLCA0LCAyNTV9LAorICAgIHsiICIsIDAsIDAsIDAsIDB9LAorICAgIHsiMHgiLCAwLCAwLCAxLCAwfSwKKyAgICB7IjB4IiwgOCwgMCwgMSwgMH0sCisgICAgeyIweCIsIDE2LCAwLCAxLCAwfSwKKyAgICB7Inp5eXkiLCAwLCAwLCAwLCAwfSwKKyAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZmYiLCAwLCBFUkFOR0UsIDE5LCBVTExPTkdfTUFYfSwKKyAgICB7IjB4ZmZmZmZmZmZmZmZmZmZmZmZ6IiwgMCwgRVJBTkdFLCAxOSwgVUxMT05HX01BWH0KK307CisKK3Vuc2lnbmVkIGludCAgICBpOworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKHRlc3RfaW5wdXQpIC8gc2l6ZW9mKHRlc3RfaW5wdXRbMF0pOyBpKyspIHsKKyAgICBjb25zdCBzdHJ1Y3Qgc3RydG91bGxfdGVzdGNhc2UgKmNvbnN0IHAgPSAmdGVzdF9pbnB1dFtpXTsKKyAgICBjaGFyICAgICAgICAgICAqZW5kcHRyOworICAgIHVpbnQ2NF90ICAgICAgICByZXN1bHQ7CisKKyAgICBlcnJubyA9IDA7CisgICAgcmVzdWx0ID0gc3RydG91bGwocC0+bnB0ciwgJmVuZHB0ciwgcC0+YmFzZSk7CisgICAgT0tGKGVycm5vID09IHAtPmV4cGVjdGVkX2Vycm5vLAorICAgICAgICAoInRlc3QgJWQgKGlucHV0IFwiJXNcIik6IGV4cGVjdGVkIGVycm5vICVkLCBnb3QgZXJybm8gJWQiLAorICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfZXJybm8sIGVycm5vKSk7CisgICAgT0tGKHJlc3VsdCA9PSBwLT5leHBlY3RlZF9yZXN1bHQsCisgICAgICAgICgidGVzdCAlZCAoaW5wdXQgXCIlc1wiKTogZXhwZWN0ZWQgcmVzdWx0ICUiIFBSSXU2NAorICAgICAgICAgIiwgZ290IHJlc3VsdCAlIiBQUkl1NjQsCisgICAgICAgICBpLCBwLT5ucHRyLCBwLT5leHBlY3RlZF9yZXN1bHQsIHJlc3VsdCkpOworICAgIE9LRihlbmRwdHIgLSBwLT5ucHRyID09IHAtPmV4cGVjdGVkX2VuZCwKKyAgICAgICAgKCJ0ZXN0ICVkIChpbnB1dCBcIiVzXCIpOiBleHBlY3RlZCBlbmQgJWQsIGdvdCBlbmQgJWQiLAorICAgICAgICAgaSwgcC0+bnB0ciwgcC0+ZXhwZWN0ZWRfZW5kLCAoaW50KSAoZW5kcHRyIC0gcC0+bnB0cikpKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMThyZWFkX2NvbmZpZ19jYXBwLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMThyZWFkX2NvbmZpZ19jYXBwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZhOTJjOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAxOHJlYWRfY29uZmlnX2NhcHAuYwpAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqIGV0aW1ldGVzdC5jCisgKgorICogSEVBREVSIFRlc3RpbmcgcmVhZF9jb25maWcuYyBzaHV0ZG93biBjYWxsYmFjaworICoKKyAqIEV4cGVjdGVkIFNVQ0NFU1NlcyBmb3IgYWxsIHRlc3RzOiAgICA4CisgKgorICogVGVzdCBvZiBzbm1wZF91bnJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyICAgICAgICAgICAgICAgICAgICAJU1VDQ0VTU2VzOiAgNAorICogVGVzdCBvZiB1bnJlZ2lzdGVyX2FsbF9jb25maWdfaGFuZGxlcnMJICAgICAgICAgICAgICAJU1VDQ0VTU2VzOiAgNAorICoKKyAqLworCisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CisjaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtaW5jbHVkZXMuaD4KKyNpbmNsdWRlIDxuZXQtc25tcC9hZ2VudC9uZXQtc25tcC1hZ2VudC1pbmNsdWRlcy5oPgorI2luY2x1ZGUgPG5ldC1zbm1wL2xpYnJhcnkvdGVzdGluZy5oPgorCisvKiAjdW5kZWYgVEVTVF9JTlRFUk5BTF9BUEkgKi8KKyNkZWZpbmUgVEVTVF9JTlRFUk5BTF9BUEkgMQorCisvKgorICogR2xvYmFsIHZhcmlhYmxlcy4KKyAqLworaW50IGNhbGxiYWNrX2NhbGxlZCA9IDA7CisKK3N0YXRpYyB2b2lkIHRlc3RfY2FsbGJhY2sodm9pZCk7CitzdGF0aWMgdm9pZCB0ZXN0X2NhbGxiYWNrKHZvaWQpIHsKKwkrK2NhbGxiYWNrX2NhbGxlZDsKK307CisKK3N0YXRpYyB2b2lkIHBhcnNlX2NvbmZpZyhjb25zdCBjaGFyICp0b2tlbiwgY2hhciAqY3B0cik7CitzdGF0aWMgdm9pZCBwYXJzZV9jb25maWcoY29uc3QgY2hhciAqdG9rZW4sIGNoYXIgKmNwdHIpIHsKKwkvKiBkbyBub3RoaW5nICovCit9OworCisvKiBlYWNoIHRlc3QgcmV0dXJucyAwIG9uIHN1Y2Nlc3MsIGFuZCA+MCBvbiBmYWlsdXJlICovCitpbnQgdGVzdDEodm9pZCk7CitpbnQgdGVzdDIodm9pZCk7CitpbnQgdGVzdDModm9pZCk7CisKK2ludCAoKnRlc3RzW10pKHZvaWQpID0geyB0ZXN0MSwgdGVzdDIsIHRlc3QzIH07CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCit7CisgICAgaW50IGkscmV0PTA7CisgICAgZm9yKGk9MDtpPHNpemVvZih0ZXN0cykvc2l6ZW9mKCp0ZXN0cyk7KytpKQorCSAgICByZXQrPXRlc3RzW2ldKCk7CisgICAgaWYgKF9fZGlkX3BsYW4gPT0gMCkgeworICAgICAgIFBMQU4oX190ZXN0X2NvdW50ZXIpOworICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgdGVzdDEoKSB7CisgICAgaW50IHN1bSA9IDA7CisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgc25tcGRfdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlciB0ZXN0c1xuIik7CisgICAgaW5pdF9zbm1wKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyBpdCAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJ0ZXN0aW5nIiwgcGFyc2VfY29uZmlnLCB0ZXN0X2NhbGxiYWNrLCAibW9kdWxlLW5hbWUgbW9kdWxlLXBhdGgiKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYWZ0ZXIgcmVnaXN0ZXJpbmcgaXQgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MSwgKCJDYWxsYmFjayBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIGFuZCBvbmx5IG9uY2UgYWZ0ZXIgdW5yZWdpc3RlcmluZyBoYW5kbGVyIC0gaXQgd2FzIGNhbGxlZCAlZCB0aW1lc1xuIixjYWxsYmFja19jYWxsZWQpKTsKKyAgICBzdW0gKz0gY2FsbGJhY2tfY2FsbGVkOworCisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICBzbm1wX3NodXRkb3duKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGQgaGF2ZSBiZWVuIGNhbGxlZCBvbmNlIGFuZCBvbmx5IG9uY2UgYWZ0ZXIgc2h1dGRvd24gLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICByZXR1cm4gKHN1bT09MSk/MDoxOworfQorCitpbnQgdGVzdDIodm9pZCkgeworICAgIGludCBzdW0gPSAwOworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgZnByaW50ZihzdGRvdXQsICIjIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycyB0ZXN0c1xuIik7CisgICAgaW5pdF9zbm1wKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyBpdCAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJ0ZXN0aW5nIiwgcGFyc2VfY29uZmlnLCB0ZXN0X2NhbGxiYWNrLCAibW9kdWxlLW5hbWUgbW9kdWxlLXBhdGgiKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYWZ0ZXIgcmVnaXN0ZXJpbmcgaXQgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHNubXBfc2h1dGRvd24oInRlc3RpbmciKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0xLCAoIkNhbGxiYWNrIHNob3VsZCBoYXZlIGJlZW4gY2FsbGVkIG9uY2UgYW5kIG9ubHkgb25jZSBkdXJpbmcgc2h1dGRvd24gLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICByZXR1cm4gKHN1bT09MSk/MDoxOworfQorCitpbnQgdGVzdDModm9pZCkgeworI2lmZGVmIFRFU1RfSU5URVJOQUxfQVBJCisgICAgaW50IHN1bSA9IDA7CisgICAgY2FsbGJhY2tfY2FsbGVkID0gMDsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIiMgdW5yZWdpc3Rlcl9hbGxfY29uZmlnX2hhbmRsZXJzIGludGVybmFsIGFwaSB0ZXN0c1xuIik7CisgICAgaW5pdF9zbm1wKCJ0ZXN0aW5nIik7CisgICAgT0tGKGNhbGxiYWNrX2NhbGxlZD09MCwgKCJDYWxsYmFjayBzaG91bGRuJ3QgYmUgY2FsbGVkIGJlZm9yZSByZWdpc3RlcmluZyBpdCAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgcmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyKCJ0ZXN0aW5nIiwgcGFyc2VfY29uZmlnLCB0ZXN0X2NhbGxiYWNrLCAibW9kdWxlLW5hbWUgbW9kdWxlLXBhdGgiKTsKKyAgICBPS0YoY2FsbGJhY2tfY2FsbGVkPT0wLCAoIkNhbGxiYWNrIHNob3VsZG4ndCBiZSBjYWxsZWQgYWZ0ZXIgcmVnaXN0ZXJpbmcgaXQgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICBjYWxsYmFja19jYWxsZWQgPSAwOworICAgIHVucmVnaXN0ZXJfYWxsX2NvbmZpZ19oYW5kbGVycygpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTEsICgiQ2FsbGJhY2sgc2hvdWxkIGhhdmUgYmVlbiBjYWxsZWQgb25jZSBhbmQgb25seSBvbmNlIGFmdGVyIHVucmVnaXN0ZXJpbmcgaGFuZGxlciAtIGl0IHdhcyBjYWxsZWQgJWQgdGltZXNcbiIsY2FsbGJhY2tfY2FsbGVkKSk7CisgICAgc3VtICs9IGNhbGxiYWNrX2NhbGxlZDsKKworICAgIGNhbGxiYWNrX2NhbGxlZCA9IDA7CisgICAgc25tcF9zaHV0ZG93bigidGVzdGluZyIpOworICAgIE9LRihjYWxsYmFja19jYWxsZWQ9PTAsICgiQ2FsbGJhY2sgc2hvdWxkIG5vdCBoYXZlIGJlZW4gY2FsbGVkIGR1cmluZyBzaHV0ZG93biBhZnRlciB1bnJlZ2lzdGVyaW5nIGhhbmRsZXIgLSBpdCB3YXMgY2FsbGVkICVkIHRpbWVzXG4iLGNhbGxiYWNrX2NhbGxlZCkpOworICAgIHN1bSArPSBjYWxsYmFja19jYWxsZWQ7CisKKyAgICByZXR1cm4gKHN1bT09MSk/MDoxOworI2Vsc2UKKyAgICByZXR1cm4gMDsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE5X3NubXBfc2VydmljZV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMTlfc25tcF9zZXJ2aWNlX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVjOGQzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMDE5X3NubXBfc2VydmljZV9jbGliLmMKQEAgLTAsMCArMSwyNTMgQEAKKy8qIEhFQURFUiBUZXN0aW5nIGRvbWFpbiBhbmQgdGFyZ2V0IHJlZ2lzdHJhdGlvbnMgZnJvbSBzbm1wX3NlcnZpY2UuICovCisKKy8qIFNldHVwIGNvbmZpZ3VyYXRpb24gcmVhZGluZyAqLworbmV0c25tcF9kc19zZXRfc3RyaW5nKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKyAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9BUFBUWVBFLCAidGVzdHByb2ciKTsKKworbmV0c25tcF9yZWdpc3Rlcl9zZXJ2aWNlX2hhbmRsZXJzKCk7CisKK25ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19MSUJSQVJZX0lELAorICAgICAgICAgICAgICAgICAgICAgICBORVRTTk1QX0RTX0xJQl9IQVZFX1JFQURfQ09ORklHLCAxKTsKKworLyogQ2xlYXIgYWxsIGRlZmF1bHQgdmFsdWVzICovCituZXRzbm1wX2NsZWFyX2RlZmF1bHRfZG9tYWluKCk7CituZXRzbm1wX2NsZWFyX2RlZmF1bHRfdGFyZ2V0KCk7CisKKy8qIFRlc3QgZG9tYWluIGxvb2t1cCAqLworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfZG9tYWluKCJhIiwgIiIpID09IDAsCisgICAicmVnaXN0ZXIgYW4gZW1wdHkgdG9rZW4gaW4gZG9tYWluICdhJyIpOworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfZG9tYWluKCJiIiwgImFsZmEiKSA9PSAwLAorICAgICJyZWdpc3RlciBhIHNpbmdsZSB0b2tlbiBpbiBkb21haW4gJ2InIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF9kb21haW4oImMiLCAiYWxmYSBiZXRhIikgPT0gMCwKKyAgICJyZWdpc3RlciB0d28gdG9rZW5zIGluIGRvbWFpbiAnYyciKTsKKworI2RlZmluZSBPS19TVFJDTVAobmFtZSwgdmFsdWUsIGV4cGVjdGVkKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBPS0YodmFsdWUgIT0gTlVMTCAmJiBzdHJjbXAoZXhwZWN0ZWQsIHZhbHVlKSA9PSAwLCAgICAgICAgICAgICAgICAgICAgXAorICAgICAgKCJMb29rdXAgb2YgJyIgI25hbWUgIicgZXhwZWN0ZWQgJyIgZXhwZWN0ZWQgIicsIGdvdCAlcyVzJXMiLCAgICAgXAorICAgICAgIHZhbHVlID8gIiciIDogIiIsIHZhbHVlID8gdmFsdWUgOiAiTlVMTCIsIHZhbHVlID8gIiciIDogIiIpKQorCisjZGVmaW5lIE9LX1NUUl9JU19OVUxMKG5hbWUsIHZhbHVlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIE9LRih2YWx1ZSA9PSBOVUxMLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAoIkxvb2t1cCBvZiAnIiAjbmFtZSAiJyBleHBlY3RlZCBOVUxMLCBnb3QgJXMlcyVzIiwgICAgICAgICAgICAgICBcCisgICAgICAgdmFsdWUgPyAiJyIgOiAiIiwgdmFsdWUgPyB2YWx1ZSA6ICJOVUxMIiwgdmFsdWUgPyAiJyIgOiAiIikpCisKKyNkZWZpbmUgT0tfSVNfTlVMTChuYW1lLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgT0tGKHZhbHVlID09IE5VTEwsICgiTG9va3VwIG9mICciICNuYW1lICInIGV4cGVjdGVkIE5VTEwsIGdvdCAlcCIsIHZhbHVlKSkKKworI2RlZmluZSBPS19JU19OT1RfTlVMTChuYW1lLCB2YWx1ZSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBPS0YodmFsdWUgIT0gTlVMTCwgKCJMb29rdXAgb2YgJyIgI25hbWUgIicgZXhwZWN0ZWQgbm9uLU5VTEwsIGdvdCAlcCIsIHZhbHVlKSkKKworeworICBjb25zdCBjaGFyICp0OworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYSIpOworICBPS19TVFJDTVAoYSwgdCwgIiIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYiIpOworICBPS19TVFJDTVAoYiwgdCwgImFsZmEiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImMiKTsKKyAgT0tfU1RSQ01QKGMsIHQsICJhbGZhIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfZG9tYWluKCJkIik7CisgIE9LX1NUUl9JU19OVUxMKGQsIHQpOworfQorCit7CisgIGNvbnN0IGNoYXIgKmNvbnN0ICp0OworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImEiKTsKKyAgT0tfSVNfTk9UX05VTEwoYSwgdCk7CisgIE9LX1NUUkNNUChhWzBdLCB0WzBdLCAiIik7CisgIE9LX1NUUl9JU19OVUxMKGFbMV0sIHRbMV0pOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImIiKTsKKyAgT0tfSVNfTk9UX05VTEwoYiwgdCk7CisgIE9LX1NUUkNNUChiWzBdLCB0WzBdLCAiYWxmYSIpOworICBPS19TVFJfSVNfTlVMTChiWzFdLCB0WzFdKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJjIik7CisgIE9LX0lTX05PVF9OVUxMKGMsIHQpOworICBPS19TVFJDTVAoY1swXSwgdFswXSwgImFsZmEiKTsKKyAgT0tfU1RSQ01QKGNbMV0sIHRbMV0sICJiZXRhIik7CisgIE9LX1NUUl9JU19OVUxMKGNbMl0sIHRbMl0pOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImQiKTsKKyAgT0tfSVNfTlVMTChkLCB0KTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZkRvbWFpbj1iIGdhbW1hIjsKKyAgT0sobmV0c25tcF9jb25maWcoY2ZnKSA9PSBTTk1QRVJSX1NVQ0NFU1MsICJyZWdpc3RlciB1c2VyIGRvbWFpbiBmb3IgJ2InIik7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZEb21haW49YyBnYW1tYSBkZWx0YSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAicmVnaXN0ZXIgdXNlciBkb21haW5zIGZvciAnYyciKTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZkRvbWFpbj1iMiBnYW1tYSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAicmVnaXN0ZXIgdXNlciBkb21haW4gZm9yICdiMiciKTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZkRvbWFpbj1jMiBnYW1tYSBkZWx0YSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAicmVnaXN0ZXIgdXNlciBkb21haW5zIGZvciAnYzInIik7Cit9CisKK3sKKyAgY29uc3QgY2hhciAqdDsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImIiKTsKKyAgT0tfU1RSQ01QKGIsIHQsICJnYW1tYSIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYjIiKTsKKyAgT0tfU1RSQ01QKGIyLCB0LCAiZ2FtbWEiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImMiKTsKKyAgT0tfU1RSQ01QKGMsIHQsICJnYW1tYSIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbigiYzIiKTsKKyAgT0tfU1RSQ01QKGMyLCB0LCAiZ2FtbWEiKTsKK30KKworeworICBjb25zdCBjaGFyICpjb25zdCAqdDsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJiIik7CisgIE9LX0lTX05PVF9OVUxMKGIsIHQpOworICBPS19TVFJDTVAoYlswXSwgdFswXSwgImdhbW1hIik7CisgIE9LX1NUUl9JU19OVUxMKGJbMV0sIHRbMV0pOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImIyIik7CisgIE9LX0lTX05PVF9OVUxMKGIyLCB0KTsKKyAgT0tfU1RSQ01QKGIyWzBdLCB0WzBdLCAiZ2FtbWEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYjJbMV0sIHRbMV0pOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X2RvbWFpbnMoImMiKTsKKyAgT0tfSVNfTk9UX05VTEwoYywgdCk7CisgIE9LX1NUUkNNUChjWzBdLCB0WzBdLCAiZ2FtbWEiKTsKKyAgT0tfU1RSQ01QKGNbMV0sIHRbMV0sICJkZWx0YSIpOworICBPS19TVFJfSVNfTlVMTChjWzJdLCB0WzJdKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW5zKCJjMiIpOworICBPS19JU19OT1RfTlVMTChjMiwgdCk7CisgIE9LX1NUUkNNUChjMlswXSwgdFswXSwgImdhbW1hIik7CisgIE9LX1NUUkNNUChjMlsxXSwgdFsxXSwgImRlbHRhIik7CisgIE9LX1NUUl9JU19OVUxMKGMyWzJdLCB0WzJdKTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZkRvbWFpbj0iOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgIkVtcHR5IGNvbmZpZyBsaW5lIik7Cit9CisKK3sKKyAgY29uc3QgY2hhciogdDsKKyAgY2hhciBjZmdbXSA9ICJkZWZEb21haW49ZSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAiSW5jb21wbGV0ZSBjb25maWcgbGluZSIpOworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF9kb21haW4oImUiKTsKKyAgT0tfU1RSX0lTX05VTEwoZSwgdCk7Cit9CisKKy8qIFRlc3QgdGFyZ2V0IGxvb2t1cCAqLworCitPSyhuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImFsZmEiLCAiYWxmYS1kb21haW46YiIpID09IDAsCisgICAicmVnaXN0ZXIgYSAnYWxmYTphbGZhLWRvbWFpbjpiJyBmb3IgYXBwbGljYXRpb24gJ2InIik7CisKK09LKG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF90YXJnZXQoImIiLCAiYmV0YSIsICJiZXRhLWRvbWFpbjpiIikgPT0gMCwKKyAgICJyZWdpc3RlciBhICdiZXRhOmJldGEtZG9tYWluOmInIGZvciBhcHBsaWNhdGlvbiAnYiciKTsKKworT0sobmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldCgiYyIsICJhbGZhIiwgImFsZmEtZG9tYWluOmMiKSA9PSAwLAorICAgInJlZ2lzdGVyIGEgJ2FsZmE6YWxmYS1kb21haW46YycgZm9yIGFwcGxpY2F0aW9uICdjJyIpOworCit7CisgIGNvbnN0IGNoYXIgKnQ7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJiIiwgImFsZmEiKTsKKyAgT0tfU1RSQ01QKGI6YWxmYSwgdCwgImFsZmEtZG9tYWluOmIiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiYmV0YSIpOworICBPS19TVFJDTVAoYjpiZXRhLCB0LCAiYmV0YS1kb21haW46YiIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYyIsICJhbGZhIik7CisgIE9LX1NUUkNNUChjOmFsZmEsIHQsICJhbGZhLWRvbWFpbjpjIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJhIiwgImFsZmEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYTphbGZhLCB0KTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiZ2FtbWEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYjpnYW1tYSwgdCk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJjIiwgImJldGEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYzpiZXRhLCB0KTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZlRhcmdldD1iIGFsZmEgdXNlci1hbGZhOmIiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgInJlZ2lzdGVyIHVzZXIgdGFyZ2V0ICdhbGZhOnVzZXItYWxmYTpiJyBmb3IgYXBwbGljYXRpb24gJ2InIik7Cit9CisKK3sKKyAgY2hhciBjZmdbXSA9ICJkZWZUYXJnZXQ9YiBnYW1tYSB1c2VyLWdhbW1hOmIiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgInJlZ2lzdGVyIHVzZXIgdGFyZ2V0ICdnYW1tYTp1c2VyLWdhbW1hOmInIGZvciBhcHBsaWNhdGlvbiAnYiciKTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZlRhcmdldD1jIGFsZmEgdXNlci1hbGZhOmMiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywKKyAgICAgInJlZ2lzdGVyIHVzZXIgdGFyZ2V0ICdhbGZhOnVzZXItYWxmYTpjJyBmb3IgYXBwbGljYXRpb24gJ2MnIik7Cit9CisKKworeworICBjb25zdCBjaGFyICp0OworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJhbGZhIik7CisgIE9LX1NUUkNNUChiOmFsZmEsIHQsICJ1c2VyLWFsZmE6YiIpOworCisgIHQgPSBuZXRzbm1wX2xvb2t1cF9kZWZhdWx0X3RhcmdldCgiYiIsICJiZXRhIik7CisgIE9LX1NUUkNNUChiOmJldGEsIHQsICJiZXRhLWRvbWFpbjpiIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJjIiwgImFsZmEiKTsKKyAgT0tfU1RSQ01QKGM6YWxmYSwgdCwgInVzZXItYWxmYTpjIik7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJhIiwgImFsZmEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYTphbGZhLCB0KTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiZ2FtbWEiKTsKKyAgT0tfU1RSQ01QKGI6Z2FtbWEsIHQsICJ1c2VyLWdhbW1hOmIiKTsKKworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImIiLCAiZGVsdGEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYjpkZWx0YSwgdCk7CisKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJjIiwgImJldGEiKTsKKyAgT0tfU1RSX0lTX05VTEwoYzpiZXRhLCB0KTsKK30KKworeworICBjaGFyIGNmZ1tdID0gImRlZlRhcmdldD0iOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgIkVtcHR5IGNvbmZpZyBsaW5lIik7Cit9CisKK3sKKyAgY29uc3QgY2hhciogdDsKKyAgY2hhciBjZmdbXSA9ICJkZWZUYXJnZXQ9ZTEiOworICBPSyhuZXRzbm1wX2NvbmZpZyhjZmcpID09IFNOTVBFUlJfU1VDQ0VTUywgIkluY29tcGxldGUgY29uZmlnIGxpbmUgIzEiKTsKKyAgdCA9IG5ldHNubXBfbG9va3VwX2RlZmF1bHRfdGFyZ2V0KCJlMSIsICIiKTsKKyAgT0tfU1RSX0lTX05VTEwoZTE6LCB0KTsKK30KKworeworICBjb25zdCBjaGFyKiB0OworICBjaGFyIGNmZ1tdID0gImRlZlRhcmdldD1lMiBvbWVnYSI7CisgIE9LKG5ldHNubXBfY29uZmlnKGNmZykgPT0gU05NUEVSUl9TVUNDRVNTLCAiSW5jb21wbGV0ZSBjb25maWcgbGluZSAjMiIpOworICB0ID0gbmV0c25tcF9sb29rdXBfZGVmYXVsdF90YXJnZXQoImUyIiwgIm9tZWdhIik7CisgIE9LX1NUUl9JU19OVUxMKGUyOm9tZWdhLCB0KTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWVfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjNmZjODYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWVfY2xpYi5jCkBAIC0wLDAgKzEsODIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIG5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWRfdHJlZSgpICovCisKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQxW10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDEsIDQsIDEyNywgMCwgMCwgMCwgOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQyW10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDIsIDE2LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLAorICAgIDAsIDAsIDAsIDAsIDEsIDEyOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQzW10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDEsIDQsIDI1NSwgMjU1LCAyNTUsIDI1NSwgOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQ0W10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDIsIDE2LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsCisgICAgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMjU1LCAyNTUsIDI1NSwgMTI4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDVbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMSwgNCwgMjU2LCAyNTYsIDI1NiwgMjU2LCA4Cit9Oworc3RhdGljIGNvbnN0IG9pZCBvYmppZDZbXSA9IHsKKyAgICAxLCAzLCA2LCAxLCAyLCAxLCA0LCAzMiwgMSwgNSwgMSwgMiwgMTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwKKyAgICAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAyNTYsIDI1NiwgMjU2LCAxMjgKK307CitzdGF0aWMgY29uc3Qgb2lkIG9iamlkN1tdID0geworICAgIDEsIDMsIDYsIDEsIDIsIDEsIDQsIDMyLCAxLCA1LCAxLCAxLCA0LCAtMSwgLTEsIC0xLCAtMSwgOAorfTsKK3N0YXRpYyBjb25zdCBvaWQgb2JqaWQ4W10gPSB7CisgICAgMSwgMywgNiwgMSwgMiwgMSwgNCwgMzIsIDEsIDUsIDEsIDIsIDE2LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCisgICAgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAxMjgKKworfTsKK3N0cnVjdCBvYmppZF9kYXRhIHsgb2lkIGNvbnN0ICpvaWQ7IGludCBsZW47IGNvbnN0IGNoYXIgKnN0cjsgfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2JqaWRfZGF0YSBvYmppZF9hcnJheVtdID0geworICAgIHsgb2JqaWQxLCBzaXplb2Yob2JqaWQxKSAvIHNpemVvZihvYmppZDFbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2NC5cIjEyNy4wLjAuMFwiLjgiIH0sCisgICAgeyBvYmppZDIsIHNpemVvZihvYmppZDIpIC8gc2l6ZW9mKG9iamlkMlswXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY2LiIKKyAgICAgICJcIjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAwOjAxXCIuMTI4IiB9LAorICAgIHsgb2JqaWQzLCBzaXplb2Yob2JqaWQzKSAvIHNpemVvZihvYmppZDNbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2NC5cIjI1NS4yNTUuMjU1LjI1NVwiLjgiIH0sCisgICAgeyBvYmppZDQsIHNpemVvZihvYmppZDQpIC8gc2l6ZW9mKG9iamlkNFswXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY2LiIKKyAgICAgICJcImZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmOmZmXCIuMTI4IiB9LAorICAgIHsgb2JqaWQ1LCBzaXplb2Yob2JqaWQ1KSAvIHNpemVvZihvYmppZDVbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2NC5cIi4uLi5cIi44IiB9LAorICAgIHsgb2JqaWQ2LCBzaXplb2Yob2JqaWQ2KSAvIHNpemVvZihvYmppZDZbMF0pLAorICAgICAgIklQLU1JQjo6aXBBZGRyZXNzUHJlZml4T3JpZ2luLjEuaXB2Ni5cIi4uLi4uLi4uLi4uLi4uLi5cIi4xMjgiIH0sCisgICAgeyBvYmppZDcsIHNpemVvZihvYmppZDcpIC8gc2l6ZW9mKG9iamlkN1swXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY0LlwiLi4uLlwiLjgiIH0sCisgICAgeyBvYmppZDgsIHNpemVvZihvYmppZDgpIC8gc2l6ZW9mKG9iamlkOFswXSksCisgICAgICAiSVAtTUlCOjppcEFkZHJlc3NQcmVmaXhPcmlnaW4uMS5pcHY2LlwiLi4uLi4uLi4uLi4uLi4uLlwiLjEyOCIgfSwKK307CitzdHJ1Y3QgdHJlZSAqdHJlZTsKK2NoYXIgKmJ1ZjsKK3NpemVfdCBidWZfbGVuLCBvdXRfbGVuOworaW50IGJ1Zl9vdmVyZmxvdywgaTsKK2NoYXIgbWliZGlyW1BBVEhfTUFYXTsKKworc25wcmludGYobWliZGlyLCBzaXplb2YobWliZGlyKSwgIiVzLyVzIiwgQUJTX1NSQ0RJUiwgIm1pYnMiKTsKK25ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX01JQkRJUlMsIG1pYmRpcik7CisKK2luaXRfc25tcCgiVDAyMCIpOworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKG9iamlkX2FycmF5KSAvIHNpemVvZihvYmppZF9hcnJheVswXSk7IGkrKykgeworICAgIGJ1ZiA9IE5VTEw7CisgICAgYnVmX2xlbiA9IG91dF9sZW4gPSBidWZfb3ZlcmZsb3cgPSAwOworICAgIHRyZWUgPSBuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUoKHVfY2hhciAqKikgJmJ1ZiwgJmJ1Zl9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmb3V0X2xlbiwgMS8qYWxsb3dfcmVhbGxvYyovLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmJ1Zl9vdmVyZmxvdywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamlkX2FycmF5W2ldLm9pZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9iamlkX2FycmF5W2ldLmxlbik7CisgICAgT0soISFvYmppZF9hcnJheVtpXS5zdHIgPT0gISF0cmVlLAorICAgICAgICJuZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUoKSByZXR1cm4gdmFsdWUiKTsKKyAgICBpZiAob2JqaWRfYXJyYXlbaV0uc3RyICYmIHRyZWUpIHsKKyAgICAgICAgT0tGKHN0cmNtcChvYmppZF9hcnJheVtpXS5zdHIsIGJ1ZikgPT0gMCwKKyAgICAgICAgICAgICgiTWlzbWF0Y2g6IGV4cGVjdGVkICVzIGJ1dCBnb3QgJXMiLCBvYmppZF9hcnJheVtpXS5zdHIsCisgICAgICAgICAgICAgYnVmID8gKGNvbnN0IGNoYXIgKilidWYgOiAiKE5VTEwpIikpOworICAgIH0KKyAgICBmcmVlKGJ1Zik7Cit9CisKK3NubXBfc2h1dGRvd24oIlQwMjAiKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMWJpbmFyeV9hcnJheV9vaWRfZHVwbGljYXRlc19jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjFiaW5hcnlfYXJyYXlfb2lkX2R1cGxpY2F0ZXNfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwMjczMjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjFiaW5hcnlfYXJyYXlfb2lkX2R1cGxpY2F0ZXNfY2xpYi5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qIEhFQURFUiBUZXN0aW5nIGR1cGxpY2F0ZSBoYW5kbGluZyBpbiBiaW5hcnkgT0lEIGFycmF5ICovCisKKy8qIE11Y2ggY29waWVkIGZyb20gVDAxMiAqLworc3RhdGljIGNvbnN0IGNoYXIgdGVzdF9uYW1lW10gPSAiYmluYXJ5LWFycmF5LW9mLU9JRHMtZHVwbGljYXRlLXRlc3QiOworb2lkIG8xID0gMTsKK29pZCBvMiA9IDI7CitvaWQgbzMgPSA2Oworb2lkIG80ID0gODsKK29pZCBvNSA9IDk7CitvaWQgb3ggPSA3Oworb2lkIG95ID0gMTA7CituZXRzbm1wX2luZGV4IGkxLCBpMiwgaTMsIGk0LCBpNSwgaXgsIGl5LCAqaXA7CituZXRzbm1wX2luZGV4ICpiW10gPSB7ICZpNCwgJmkyLCAmaTMsICZpMSwgJmk1IH07CituZXRzbm1wX2NvbnRhaW5lciAqYzsKK2ludCBpOworCitpbml0X3NubXAodGVzdF9uYW1lKTsKKworYyA9IG5ldHNubXBfY29udGFpbmVyX2dldF9iaW5hcnlfYXJyYXkoKTsKK2MtPmNvbXBhcmUgPSBuZXRzbm1wX2NvbXBhcmVfbmV0c25tcF9pbmRleDsKK25ldHNubXBfYmluYXJ5X2FycmF5X29wdGlvbnNfc2V0KGMsIDEsCisJCQkJIENPTlRBSU5FUl9LRVlfQUxMT1dfRFVQTElDQVRFUyk7CisKK2kxLm9pZHMgPSAmbzE7CitpMi5vaWRzID0gJm8yOworaTMub2lkcyA9ICZvMzsKK2k0Lm9pZHMgPSAmbzQ7CitpNS5vaWRzID0gJm81OworaXgub2lkcyA9ICZveDsKK2l5Lm9pZHMgPSAmb3k7CitpMS5sZW4gPSBpMi5sZW4gPSBpMy5sZW4gPSBpNC5sZW4gPSBpNS5sZW4gPSBpeC5sZW4gPSBpeS5sZW4gPSAxOworCitmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mKGIpL3NpemVvZihiWzBdKTsgKytpKQorICAgIENPTlRBSU5FUl9JTlNFUlQoYywgYltpXSk7CisKKyNkZWZpbmUgTUFYX1JPVU5EUyA2CisvKiBJbnNlcnQgc29tZSBkdXBsaWNhdGVzIG9mIGk0OyBhbHNvIGluc2VydCBhIGR1cGxpY2F0ZSBvZgorICogaTEgdG8gbW92ZSB0aGUgY29udGVudHMgb2YgdGhlIGFycmF5IGFyb3VuZC4gKi8KK2ZvciAoaSA9IDA7IGkgPCBNQVhfUk9VTkRTOyArK2kpIHsKKyAgICBzd2l0Y2ggKGkpIHsKKwljYXNlIDA6CisJICAgIC8qIEZpcnN0IHJvdW5kOiBubyBpbnNlcnQgKi8KKwkgICAgYnJlYWs7CisJY2FzZSAxOgorCWNhc2UgMjoKKwljYXNlIDQ6CisJY2FzZSA1OgorCSAgICAvKiBJbnNlcnQgYW5vdGhlciBkdXBsaWNhdGUgb2Ygb3VyIHRhcmdldCBvYmplY3QgKi8KKwkgICAgQ09OVEFJTkVSX0lOU0VSVChjLCAmaTQpOworCSAgICBicmVhazsKKwljYXNlIDM6CisJICAgIC8qIEluc2VydCBhIGR1bGljYXRlIG9mIGFuIGVhcmxpZXIgT0lELCBzbyB0aGF0IGl0CisJICAgICAqIGNoYW5nZXMgdGhlIGJpbmFyeSBzZWFyY2ggYmVoYXZpb3IgKi8KKwkgICAgQ09OVEFJTkVSX0lOU0VSVChjLCAmaTEpOworCSAgICBicmVhazsKKyAgICB9CisgICAgLyogUHJpbWFyeSByZXF1aXJlbWVudDogZ2V0bmV4dCByZXR1cm5zIHRoZSBuZXh0IHZhbHVlISAqLworICAgIGlwID0gQ09OVEFJTkVSX0ZJTkQoYywgJmk0KTsKKyAgICBPS0YoaXAsICgiRklORCByZXR1cm5lZCBhIHZhbHVlIikpOworICAgIE9LRihjLT5jb21wYXJlKCZpNCwgaXApID09IDAsCisgICAgICAgICgiRklORCByZXR1cm5lZCBvaWQgJSIgTkVUU05NUF9QUklvICJkIiwgaXAtPm9pZHNbMF0pKTsKKyAgICBpcCA9IENPTlRBSU5FUl9ORVhUKGMsICZpNCk7CisgICAgT0tGKGlwLCAoIk5FWFQgcmV0dXJuZWQgYSB2YWx1ZSIpKTsKKyAgICBPS0YoYy0+Y29tcGFyZSgmaTUsIGlwKSA9PSAwLAorICAgICAgICAoIk5FWFQgcmV0dXJuZWQgaW5kZXggNSA9ICUiIE5FVFNOTVBfUFJJbyAiZCIsIGk1Lm9pZHNbMF0pKTsKK30KKword2hpbGUgKChpcCA9IENPTlRBSU5FUl9GSVJTVChjKSkpCisgIENPTlRBSU5FUl9SRU1PVkUoYywgaXApOworQ09OVEFJTkVSX0ZSRUUoYyk7CisKK3NubXBfc2h1dGRvd24odGVzdF9uYW1lKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDAyMW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfbm9fdHlwZV9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjFuZXRzbm1wX3NwcmludF9yZWFsbG9jX25vX3R5cGVfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NzkzZDQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QwMjFuZXRzbm1wX3NwcmludF9yZWFsbG9jX25vX3R5cGVfY2xpYi5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qIEhFQURFUiBUZXN0IHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlIHdpdGggLU9RICovCisKKy8qCisgKiBDaGVjayB0aGF0IHNwcmludF9yZWFsbG9jX3ZhcmlhYmxlIGRvZXMgbm90IGNyYXNoIHdoZW4gaXQgcHJpbnRzCisgKiBhIHZhcmlhYmxlIHdpdGggTlVMTCB0eXBlLCB3aGlsZSBNSUcgc2F5cyBpdCdzIGRpZmZlcmVudCB0eXBlIChJTlRFR0VSLCAuLi4pLgorICogV2Ugd2lsbCB1c2UgTUlCIGRlZmluaXRpb24gb2YgbmxtTG9nVmFyaWFibGVUYWJsZSwgd2hpY2ggaGFzIGEgY29sdW1uCisgKiBmb3IgbW9zdCBvZiB0aGUgTUlCIHR5cGVzLgorICovCitzdGF0aWMgb2lkIG9iamlkW10gPSB7CisgICAgICAgIDEsIDMsIDYsIDEsIDIsIDEsIDkyLCAxLCAzLCAyLCAxLCA0Cit9OworCit1X2NoYXIgKmJ1ZjsKK3NpemVfdCBidWZfbGVuLCBvdXRfbGVuOworaW50IGJ1Zl9vdmVyZmxvdywgaTsKK2NoYXIgbWliZGlyW1BBVEhfTUFYXTsKK2ludCByZXQ7CisKK3NucHJpbnRmKG1pYmRpciwgc2l6ZW9mKG1pYmRpciksICIlcy8lcyIsIEFCU19TUkNESVIsICJtaWJzIik7CituZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19MSUJSQVJZX0lELCBORVRTTk1QX0RTX0xJQl9NSUJESVJTLCBtaWJkaXIpOworbmV0c25tcF9kc19zZXRfYm9vbGVhbihORVRTTk1QX0RTX0xJQlJBUllfSUQsIE5FVFNOTVBfRFNfTElCX1FVSUNLRV9QUklOVCwgVFJVRSk7CisKK2luaXRfc25tcCgiVDAyMSIpOworCituZXRzbm1wX3ZhcmlhYmxlX2xpc3QgdmFyaWFibGU7Cit2YXJpYWJsZS5uZXh0X3ZhcmlhYmxlID0gTlVMTDsKK3ZhcmlhYmxlLm5hbWUgPSBvYmppZDsKK3ZhcmlhYmxlLm5hbWVfbGVuZ3RoID0gc2l6ZW9mKG9iamlkKSAvIHNpemVvZihvYmppZFswXSk7Cit2YXJpYWJsZS50eXBlID0gQVNOX05VTEw7Cit2YXJpYWJsZS52YWwuaW50ZWdlciA9IE5VTEw7Cit2YXJpYWJsZS52YWxfbGVuID0gMDsKKworCitidWYgPSBOVUxMOworYnVmX2xlbiA9IG91dF9sZW4gPSBidWZfb3ZlcmZsb3cgPSAwOworCisvKiBUcnkgdG8gZm9ybWF0IHZhcmlhYmxlIHdpdGggbmxtTG9nVmFyaWFibGVFbnRyeS40IC0gbmxtTG9nVmFyaWFibGVFbnRyeS4xMQorICogT0lEcyBhbmQgd2l0aCBOVUxMIHR5cGUuCisgKi8KK2ZvciAoaT00OyBpPD0xMTsgaSsrKSB7CisgICAgYnVmID0gTlVMTDsKKyAgICBidWZfbGVuID0gb3V0X2xlbiA9IGJ1Zl9vdmVyZmxvdyA9IDA7CisgICAgb2JqaWRbMTFdID0gaTsKKyAgICByZXQgPSBzcHJpbnRfcmVhbGxvY192YXJpYWJsZSgmYnVmLCAmYnVmX2xlbiwgJm91dF9sZW4sIDEsIG9iamlkLAorICAgICAgICAgICAgc2l6ZW9mKG9iamlkKSAvIHNpemVvZihvYmppZFswXSksICZ2YXJpYWJsZSk7CisgICAgT0tGKHJldCA9PSAxLCAoInNwcmludF9yZWFsbG9jX3ZhcmlhYmxlIGZvciAlZCByZXR1cm5lZCAlZDogJXMsIGV4cGVjdGVkIDEiLAorICAgICAgICAgICAgaSwgcmV0LCBidWYpKTsKKyAgICBmcmVlKGJ1Zik7Cit9CisKK3NubXBfc2h1dGRvd24oIlQwMjEiKTsKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMXBkdV90eXBlX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMXBkdV90eXBlX2NsaWIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzFhYTYxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAxcGR1X3R5cGVfY2xpYi5jCkBAIC0wLDAgKzEsMTMgQEAKKy8qIEhFQURFUiBQRFUgdHlwZSBkZXNjcmlwdGlvbnMgKi8KK2NvbnN0IGNoYXIgKnBkdV9kZXNjcmlwdGlvbjsKK3BkdV9kZXNjcmlwdGlvbiA9IHNubXBfcGR1X3R5cGUoU05NUF9NU0dfR0VUKTsKK09LRigoc3RyY21wKHBkdV9kZXNjcmlwdGlvbiwgIkdFVCIpID09IDApLAorICAgICgiU05NUCBHRVQgUERVIHR5cGUgZGlkIG5vdCByZXR1cm4gdGhlIGV4cGVjdGVkIGlkZW50aWZpZXIgKEdFVCk6ICVzIiwKKyAgICAgcGR1X2Rlc2NyaXB0aW9uKSk7CisKKyNpZmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK3BkdV9kZXNjcmlwdGlvbiA9IHNubXBfcGR1X3R5cGUoMTYzKTsKK09LRigoc3RyY21wKHBkdV9kZXNjcmlwdGlvbiwgIj8weEEzPyIpID09IDApLAorICAgICgiU05NUCBTRVQgUERVIHR5cGUgZGlkIG5vdCByZXR1cm4gdGhlIGV4cGVjdGVkIHVua25vd24gaWRlbnRpZmllciAoPzB4QTM/KTogJXMiLAorICAgICBwZHVfZGVzY3JpcHRpb24pKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQgKi8KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwMnBkdV9idWlsZF9jbGliLmMgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmYmE2OWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0aW5nL2Z1bGx0ZXN0cy91bml0LXRlc3RzL1QxMDJwZHVfYnVpbGRfY2xpYi5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qIEhFQURFUiBQRFUgYnVpbGRpbmcgKi8KKworU09DS19TVEFSVFVQOworCituZXRzbm1wX3BkdSAqcGR1OwordV9jaGFyICpwYWNrZXQ7CitzaXplX3QgcGFja2V0X2xlbiwgb2Zmc2V0ID0gMDsKK25ldHNubXBfc2Vzc2lvbiBzZXNzaW9uLCAqc3M7CitpbnQgcmM7CisKKy8qIHByb3RvdHlwZSBjb3BpZWQgZnJvbSBzbm1wX2FwaS5jICovCitpbnQgICAgICAgICAgICAgc25tcF9idWlsZCh1X2NoYXIgKiogcGt0LCBzaXplX3QgKiBwa3RfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogb2Zmc2V0LCBuZXRzbm1wX3Nlc3Npb24gKiBwc3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXRzbm1wX3BkdSAqcGR1KTsKKworaW5pdF9zbm1wKCJ0ZXN0aW5nIik7Citzbm1wX3Nlc3NfaW5pdCgmc2Vzc2lvbik7CitzZXNzaW9uLnZlcnNpb24gPSBTTk1QX1ZFUlNJT05fMmM7CitzZXNzaW9uLnBlZXJuYW1lID0gc3RyZHVwKCJ1ZHA6MTI3LjAuMC4xIik7IC8qIHdlIHdvbid0IGFjdHVhbGx5IGNvbm5lY3QgKi8KK3Nlc3Npb24uY29tbXVuaXR5ID0gKHVfY2hhciAqKSBzdHJkdXAoImJvZ3VzIik7CitzZXNzaW9uLmNvbW11bml0eV9sZW4gPSBzdHJsZW4oKGNoYXIgKikgc2Vzc2lvbi5jb21tdW5pdHkpOworc3MgPSBzbm1wX29wZW4oJnNlc3Npb24pOworCitPS0YoKHNzICE9IE5VTEwpLCAoIkNyZWF0aW5nIGEgc2Vzc2lvbiBmYWlsZWQiKSk7CitpZiAoc3MgPT0gTlVMTCkKKyAgICBzbm1wX3BlcnJvcigiYWNrIik7CisKK3BhY2tldF9sZW4gPSA0MDk2OworcGFja2V0ID0gbWFsbG9jKHBhY2tldF9sZW4pOworCitwZHUgPSBzbm1wX3BkdV9jcmVhdGUoU05NUF9NU0dfR0VUKTsKK3BkdS0+dmVyc2lvbiA9IHNlc3Npb24udmVyc2lvbjsKKworT0tGKChwZHUgIT0gTlVMTCksICgiQ3JlYXRpbmcgYSBHRVQgUERVIGZhaWxlZCIpKTsKKworcmMgPSBzbm1wX2J1aWxkKCZwYWNrZXQsICZwYWNrZXRfbGVuLCAmb2Zmc2V0LCBzcywgcGR1KTsKKworI2lmbmRlZiBORVRTTk1QX05PVElGWV9PTkxZCitPS0YoKHJjID09IFNOTVBFUlJfU1VDQ0VTUyksCisgICAgKCJCdWlsZGluZyBhIEdFVCBQRFUvcGFja2V0IHNob3VsZCBoYXZlIHdvcmtlZDogJWQiLCByYykpOworI2Vsc2UgLyogTkVUU05NUF9OT1RJRllfT05MWSAqLworT0tGKChyYyAhPSBTTk1QRVJSX1NVQ0NFU1MpLAorICAgICgiQnVpbGRpbmcgYSBHRVQgUERVL3BhY2tldCBzaG91bGQgaGF2ZSBmYWlsZWQ6ICVkIiwgcmMpKTsKKyNlbmRpZiAvKiBORVRTTk1QX05PVElGWV9PTkxZICovCisKK29mZnNldCA9IDA7CitwZHUtPmNvbW1hbmQgPSAxNjM7IC8qIGEgU0VUIG1lc3NhZ2UgKi8KK3JjID0gc25tcF9idWlsZCgmcGFja2V0LCAmcGFja2V0X2xlbiwgJm9mZnNldCwgc3MsIHBkdSk7CisKKyNpZm5kZWYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCitPS0YoKHJjID09IFNOTVBFUlJfU1VDQ0VTUyksCisgICAgKCJCdWlsZGluZyBhIFNFVCBQRFUvcGFja2V0IHNob3VsZCBoYXZlIHN1Y2NlZWRlZDogJWQiLCByYykpOworI2Vsc2UgLyogTkVUU05NUF9OT19XUklURV9TVVBQT1JUICovCitPS0YoKHJjICE9IFNOTVBFUlJfU1VDQ0VTUyksCisgICAgKCJCdWlsZGluZyBhIFNFVCBQRFUvcGFja2V0IHNob3VsZCBoYXZlIGZhaWxlZDogJWQiLCByYykpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLworCisKKworb2Zmc2V0ID0gMDsKK3BkdS0+Y29tbWFuZCA9IFNOTVBfTVNHX0lORk9STTsKK3JjID0gc25tcF9idWlsZCgmcGFja2V0LCAmcGFja2V0X2xlbiwgJm9mZnNldCwgc3MsIHBkdSk7CisKK09LRigocmMgPT0gU05NUEVSUl9TVUNDRVNTKSwKKyAgICAoIkJ1aWxkaW5nIGFuIElORk9STSBQRFUvcGFja2V0IHNob3VsZCBoYXZlIHN1Y2NlZWQ6ICVkIiwgcmMpKTsKKworU09DS19DTEVBTlVQOwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9mdWxsdGVzdHMvdW5pdC10ZXN0cy9UMTAzcGR1X3BhcnNlX2NsaWIuYyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwM3BkdV9wYXJzZV9jbGliLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGQ1ODgyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RpbmcvZnVsbHRlc3RzL3VuaXQtdGVzdHMvVDEwM3BkdV9wYXJzZV9jbGliLmMKQEAgLTAsMCArMSwyMiBAQAorLyogSEVBREVSIFBhcnNpbmcgb2YgUERVcyAqLworbmV0c25tcF9wZHUgcGR1OworaW50IHJjOwordV9jaGFyIGRhdGFbXSA9IHsgCisgICAgMHhBMiwgMHgxRCwgMHgwMiwgMHgwNCwgMHg0RSwgMHgzOSwKKyAgICAweEIyLCAweDhFLCAweDAyLCAweDAxLCAweDAwLCAweDAyLCAweDAxLCAweDAwLAorICAgIDB4MzAsIDB4MEYsIDB4MzAsIDB4MEQsIDB4MDYsIDB4MDgsIDB4MkIsIDB4MDYsCisgICAgMHgwMSwgMHgwMiwgMHgwMSwgMHgwMSwgMHgwNCwgMHgwMCwgMHgwNCwgMHgwMSwKKyAgICAweDY2Cit9Oworc2l6ZV90IGRhdGFfbGVuZ3RoPXNpemVvZihkYXRhKTsKKworcmMgPSBzbm1wX3BkdV9wYXJzZSgmcGR1LCBkYXRhLCAmZGF0YV9sZW5ndGgpOworCitPS0YoKHJjID09IDApLCAoIlBhcnNpbmcgb2YgYSBnZW5lcmljIFBEVSBmYWlsZWQiKSk7CisKKyNpZmRlZiBORVRTTk1QX05PX1dSSVRFX1NVUFBPUlQKK2RhdGFbMF0gPSAweEEzOyAvKiBjaGFuZ2VzIGl0IHRvIGEgU0VUIHBkdSAqLworcmMgPSBzbm1wX3BkdV9wYXJzZSgmcGR1LCBkYXRhLCAmZGF0YV9sZW5ndGgpOworCitPS0YoKHJjICE9IDApLCAoIlBhcnNpbmcgb2YgYSBnZW5lcmljIFNFVCBQRFUgc3VjY2VlZGVkIikpOworI2VuZGlmIC8qIE5FVFNOTVBfTk9fV1JJVEVfU1VQUE9SVCAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9rZXltYW5hZ2V0ZXN0LmMgYi90ZXN0aW5nL2tleW1hbmFnZXRlc3QuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDlhMWFhOC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL2tleW1hbmFnZXRlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDY1MSArMCwwIEBACi0vKgotICoga2V5bWFuYWdldGVzdC5jCi0gKgotICogRXhwZWN0ZWQgU1VDQ0VTU2VzOiAgMiArIDIgKyAzIGZvciBhbGwgdGVzdHMuCi0gKgotICogUmV0dXJuczoKLSAqICAgICAgTnVtYmVyIG9mIEZBSUxVUkVzLgotICogCi0gKgotICogRklYICBPciBob3cgYWJvdXQgcGFzc2luZyBhIHVzbVVzZXIgbmFtZSBhbmQgbG9va2luZyB1cCB0aGUgZW50cnkgYXMKLSAqICAgICAgYSBtZWFucyBvZiBnZXR0aW5nIGtleSBtYXRlcmlhbD8gIFRoaXMgbWVhbnMgdGhlIHVzZXJMaXN0IGlzCi0gKiAgICAgIGF2YWlsYWJsZSBmcm9tIGFuIGFwcGxpY2F0aW9uLi4uCi0gKgotICogQVNTVU1FUyAgTm8ga2V5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJldHVybiBub24temVybyBzdWNjZXNzIGNvZGVzLgotICoKLSAqIFRlc3Qgb2YgZ2VuZXJhdGVfS3UoKS4gICAgICAgICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogMgotICogVGVzdCBvZiBnZW5lcmF0ZV9rdWwoKS4gICAgICAgICAgICAgICAgICAgICAgU1VDQ0VTU2VzOiAyCi0gKiBUZXN0IG9mIHtlbmNvZGUsZGVjb2RlfV9rZXljaGFuZ2UoKS4gICAgICAgICBTVUNDRVNTZXM6IDMKLSAqLwotCi1zdGF0aWMgY2hhciAgICAqcmNzaWQgPSAiJElkJCI7ICAgICAgICAvKiAqLwotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJhc24xLmgiCi0jaW5jbHVkZSAic25tcF9hcGkuaCIKLSNpbmNsdWRlICJrZXl0b29scy5oIgotI2luY2x1ZGUgInRvb2xzLmgiCi0jaW5jbHVkZSAic2NhcGkuaCIKLSNpbmNsdWRlICJ0cmFuc2Zvcm1fb2lkcy5oIgotI2luY2x1ZGUgImNhbGxiYWNrLmgiCi0KLSNpbmNsdWRlIDxzdGRsaWIuaD4KLQotZXh0ZXJuIGNoYXIgICAgKm9wdGFyZzsKLWV4dGVybiBpbnQgICAgICBvcHRpbmQsIG9wdG9wdCwgb3B0ZXJyOwotCi0KLQotLyoKLSAqIEdsb2JhbHMsICZjLi4uCi0gKi8KLWNoYXIgICAgICAgICAgICpsb2NhbF9wcm9nbmFtZTsKLQotI2RlZmluZSBVU0FHRQkiVXNhZ2U6ICVzIFstaF1bLWFrbHVdWy1FIDxlbmdpbmVJRD5dWy1OIDxuZXdrZXk+XVstTyA8b2xka2V5Pl1bLVAgPHBhc3NwaHJhc2U+XSIKLSNkZWZpbmUgT1BUSU9OTElTVAkiYXFFOmhrbE46TzpQOnUiCi0KLWludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9nZW5LdSA9IDAsIGRvZ2Vua3VsID0gMCwgZG9rZXljaGFuZ2UgPSAwOwotCi0jZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb2dlbkt1ICsgZG9nZW5rdWwgKyBkb2tleWNoYW5nZSkKLQotCi0jZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCi0jZGVmaW5lIE5MCQkiXG4iCi0KLSNkZWZpbmUgT1VUUFVUQUxXQVlTKG8pCWZwcmludGYoc3Rkb3V0LCAiXG5cbiVzXG5cbiIsIG8pOwotI2RlZmluZSBPVVRQVVQobykJaWYgKCFiZXF1aWV0KSB7IE9VVFBVVEFMV0FZUyhvKTsgfQotCi0jZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKLXsJCQkJCQkJXAotCWlmICghZmFpbGNvdW50ICYmICFiZXF1aWV0KQkJCQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuU1VDQ0VTUzogJXNcbiIsIHMpOwlcCi19Ci0KLSNkZWZpbmUgRkFJTEVEKGUsIGYpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MgJiYgIWJlcXVpZXQpIHsJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5GQUlMRUQ6ICVzXG4iLCBmKTsJXAotCQlmYWlsY291bnQgKz0gMTsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLQotCi0vKgotICogVGVzdCBzcGVjaWZpYyBnbG9iYWxzLgotICovCi0jZGVmaW5lCUVOR0lORUlEX0RFRkFVTFQJIjEuMi4zLjR3aWxkIgotI2RlZmluZSBQQVNTUEhSQVNFX0RFRkFVTFQJIkNsYXkncyBDb25jbHVzaW9uOiBDcmVhdGl2aXR5IGlzIGdyZWF0LCAiIFwKLQkJCQkJImJ1dCBwbGFnaWFyaXNtIGlzIGZhc3Rlci4iCi0jZGVmaW5lIE9MREtFWV9ERUZBVUxUCQkiVGhpcyBpcyBhIHZlcnkgb2xkIGtleS4iCi0jZGVmaW5lIE5FV0tFWV9ERUZBVUxUCQkiVGhpcyBrZXksIG9uIHRoZSBvdGhlciBoYW5kLCBpcyB2ZXJ5IG5ldy4iCi0KLWNoYXIgICAgICAgICAgICplbmdpbmVJRCA9IE5VTEw7Ci1jaGFyICAgICAgICAgICAqcGFzc3BocmFzZSA9IE5VTEw7Ci1jaGFyICAgICAgICAgICAqb2xka2V5ID0gTlVMTDsKLWNoYXIgICAgICAgICAgICpuZXdrZXkgPSBOVUxMOwotaW50ICAgICAgICAgICAgIGJlcXVpZXQgPSAwOwotCi0KLS8qCi0gKiBQcm90b3R5cGVzLgotICovCi12b2lkICAgICAgICAgICAgdXNhZ2UoRklMRSAqIG9mcCk7Ci0KLWludCAgICAgICAgICAgICB0ZXN0X2dlbmt1bCh2b2lkKTsKLWludCAgICAgICAgICAgICB0ZXN0X2dlbkt1KHZvaWQpOwotaW50ICAgICAgICAgICAgIHRlc3Rfa2V5Y2hhbmdlKHZvaWQpOwotCi0KLQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotICAgIGNoYXIgICAgICAgICAgICBjaDsKLQotICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKLSAgICBvcHRhcmcgPSBOVUxMOwotCi0gICAgLyoKLSAgICAgKiBQYXJzZS4KLSAgICAgKi8KLSAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ0UnOgotICAgICAgICAgICAgZW5naW5lSUQgPSBvcHRhcmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnayc6Ci0gICAgICAgICAgICBkb2tleWNoYW5nZSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnbCc6Ci0gICAgICAgICAgICBkb2dlbmt1bCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnTic6Ci0gICAgICAgICAgICBuZXdrZXkgPSBvcHRhcmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnTyc6Ci0gICAgICAgICAgICBvbGRrZXkgPSBvcHRhcmc7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnUCc6Ci0gICAgICAgICAgICBwYXNzcGhyYXNlID0gb3B0YXJnOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ3UnOgotICAgICAgICAgICAgZG9nZW5LdSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncSc6Ci0gICAgICAgICAgICBiZXF1aWV0ID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdoJzoKLSAgICAgICAgICAgIHJ2YWwgPSAwOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgICAgIGV4aXQocnZhbCk7Ci0gICAgICAgIH0KLQotICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgIGFyZ3YgKz0gMTsKLSAgICAgICAgaWYgKG9wdGFyZykgewotICAgICAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICAgICAgYXJndiArPSAxOwotICAgICAgICB9Ci0KLSAgICAgICAgb3B0aW5kID0gMTsKLSAgICAgICAgb3B0YXJnID0gTlVMTDsKLSAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kd2hpbGUgZ2V0b3B0ICovCi0KLSAgICBpZiAoKGFyZ2MgPiAxKSkgewotICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICBleGl0KDEwMDApOwotCi0gICAgfSBlbHNlIGlmIChBTExPUFRJT05TICE9IDEpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogVGVzdCBzdHVmZi4KLSAgICAgKi8KLSAgICBydmFsID0gc2NfaW5pdCgpOwotICAgIEZBSUxFRChydmFsLCAic2NfaW5pdCgpLiIpOwotCi0gICAgaWYgKGRvZ2VuS3UgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9nZW5LdSgpOwotICAgIH0KLSAgICBpZiAoZG9nZW5rdWwgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9nZW5rdWwoKTsKLSAgICB9Ci0gICAgaWYgKGRva2V5Y2hhbmdlIHx8IGRvYWxsdGVzdHMpIHsKLSAgICAgICAgZmFpbGNvdW50ICs9IHRlc3Rfa2V5Y2hhbmdlKCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIENsZWFudXAuCi0gICAgICovCi0gICAgcnZhbCA9IHNjX3NodXRkb3duKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19zaHV0ZG93bigpLiIpOwotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCi0KLQotCi0KLQotdm9pZAotdXNhZ2UoRklMRSAqIG9mcCkKLXsKLSAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAgICAgIFVTQUdFCi0gICAgICAgICAgICAiIiBOTAotICAgICAgICAgICAgIiAgICAtYQkJCUFsbCB0ZXN0cy4iIE5MCi0gICAgICAgICAgICAiICAgIC1FIFsweF08ZW5naW5lSUQ+CXNubXBFbmdpbmVJRCBzdHJpbmcuIgotICAgICAgICAgICAgTkwKLSAgICAgICAgICAgICIgICAgLWsJCQlUZXN0IHtlbmNvZGUsZGVjb2RlfV9rZXljaGFuZ2UoKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtbAkJCWdlbmVyYXRlX2t1bCgpLiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC1oCQkJSGVscC4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtTiBbMHhdPG5ld2tleT4JTmV3IGtleSAoZm9yIHRlc3RpbmcgS2V5Q2hhbmdlIFRDKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtTyBbMHhdPG9sZGtleT4JT2xkIGtleSAoZm9yIHRlc3RpbmcgS2V5Q2hhbmdlIFRDKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtUCA8cGFzc3BocmFzZT4JU291cmNlIHN0cmluZyBmb3IgdXNtVXNlciBtYXN0ZXIga2V5LiIKLSAgICAgICAgICAgIE5MCi0gICAgICAgICAgICAiICAgIC11CQkJZ2VuZXJhdGVfS3UoKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIiAgICAtcQkJCWJlIHF1aWV0LiIKLSAgICAgICAgICAgIE5MICIiIE5MLCBsb2NhbF9wcm9nbmFtZSk7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzYWdlKCkgKi8KLQotCi0KLQotI2lmZGVmIEVYQU1QTEUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2Rvc29tZXRoaW5nCi0gKgotICogVGVzdCB0ZW1wbGF0ZS4KLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICovCi1pbnQKLXRlc3RfZG9zb21ldGhpbmcodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywgZmFpbGNvdW50ID0gMDsKLQotICAgIEVNMCgxLCAiVU5JTVBMRU1FTlRFRCIpOyAgICAvKiBFTSgxKTsgLyogKi8KLQotICB0ZXN0X2Rvc29tZXRoaW5nX3F1aXQ6Ci0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9kb3NvbWV0aGluZygpICovCi0jZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVYQU1QTEUgKi8KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2dlbkt1Ci0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKgotICogVGVzdCBnZW5lcmF0aW9uIG9mIHVzbVVzZXIgbWFzdGVyIGtleSBmcm9tIGEgcGFzc3BocmFzZS4KLSAqCi0gKiBBU1NVTUVTICBQYXNzcGhyYXNlIGlzIG1hZGUgb2YgcHJpbnRhYmxlIGNoYXJhY3RlcnMhCi0gKi8KLWludAotdGVzdF9nZW5LdSh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAotICAgICAgICBmYWlsY291bnQgPSAwLAotICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSksIGt1bGVuOwotICAgIGNoYXIgICAgICAgICAgICpoYXNobmFtZSA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sLiIsICpzOwotICAgIHVfY2hhciAgICAgICAgICBLdVtMT0NBTF9NQVhCVUZdOwotICAgIG9pZCAgICAgICAgICAgICpoYXNodHlwZSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7Ci0KLSAgICBPVVRQVVQoIlRlc3Qgb2YgZ2VuZXJhdGVfS3UgLS0iKTsKLQotICAgIC8qCi0gICAgICogU2V0IHBhc3NwaHJhc2UuCi0gICAgICovCi0gICAgaWYgKCFwYXNzcGhyYXNlKSB7Ci0gICAgICAgIHBhc3NwaHJhc2UgPSBQQVNTUEhSQVNFX0RFRkFVTFQ7Ci0gICAgfQotICAgIGlmICghYmVxdWlldCkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJQYXNzcGhyYXNlJXM6XG5cdCVzXG5cbiIsCi0gICAgICAgICAgICAgICAgKHBhc3NwaHJhc2UgPT0gUEFTU1BIUkFTRV9ERUZBVUxUKSA/ICIgKGRlZmF1bHQpIiA6ICIiLAotICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UpOwotCi0KLSAgdGVzdF9nZW5LdV9hZ2FpbjoKLSAgICBtZW1zZXQoS3UsIDAsIExPQ0FMX01BWEJVRik7Ci0gICAga3VsZW4gPSBMT0NBTF9NQVhCVUY7Ci0KLSAgICBydmFsID0gZ2VuZXJhdGVfS3UoaGFzaHR5cGUsIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwKLSAgICAgICAgICAgICAgICAgICAgICAgcGFzc3BocmFzZSwgc3RybGVuKHBhc3NwaHJhc2UpLCBLdSwgJmt1bGVuKTsKLSAgICBGQUlMRUQocnZhbCwgImdlbmVyYXRlX0t1KCkuIik7Ci0KLSAgICBpZiAoa3VsZW4gIT0gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIkt1IGxlbmd0aCBpcyB3cm9uZyBmb3IgdGhpcyBoYXNodHlwZS4iKTsKLSAgICB9Ci0KLSAgICBiaW5hcnlfdG9faGV4KEt1LCBrdWxlbiwgJnMpOwotICAgIGlmICghYmVxdWlldCkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJLdSAobGVuPSVkKTogICVzXG4iLCBrdWxlbiwgcyk7Ci0gICAgZnJlZV96ZXJvKHMsIGt1bGVuKTsKLQotICAgIFNVQ0NFU1MoaGFzaG5hbWUpOwotICAgIGlmICghYmVxdWlldCkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJcbiIpOwotCi0gICAgaWYgKGhhc2h0eXBlID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKLSAgICAgICAgaGFzaHR5cGUgPSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbDsKLSAgICAgICAgaGFzaG5hbWUgPSAidXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wuIjsKLSAgICAgICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNTSEExKTsKLSAgICAgICAgZ290byB0ZXN0X2dlbkt1X2FnYWluOwotICAgIH0KLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZ2VuS3UoKSAqLwotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9nZW5rdWwKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IG9mIGdlbmVyYXRlX2t1bCgpLgotICoKLSAqIEEgcGFzc3BocmFzZSBhbmQgZW5naW5lSUQgYXJlIGhhc2hlZCBpbnRvIGEgbWFzdGVyIGtleSBLdSB1c2luZwotICogYm90aCBrbm93biBoYXNoIHRyYW5zZm9ybXMuICBMb2NhbGl6ZWQga2V5cywgYWxzbyB1c2luZyBib3RoIGhhc2gKLSAqIHRyYW5zZm9ybXMsIGFyZSBnZW5lcmF0ZWQgZnJvbSBlYWNoIG9mIHRoZXNlIG1hc3RlciBrZXlzLgotICoKLSAqIEFTU1VNRSAgZ2VuZXJhdGVfS3UgaXMgYWxyZWFkeSB0ZXN0ZWQuCi0gKiBBU1NVTUUgIGVuZ2luZUlEIGlzIGluaXRpYWxseSBhIE5VTEwgdGVybWluYXRlZCBzdHJpbmcuCi0gKi8KLWludAotdGVzdF9nZW5rdWwodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKLSAgICAgICAgZmFpbGNvdW50ID0gMCwKLSAgICAgICAgcHJvcGVybGVuZ3RoLCBrdWxlbiwga3VsX2xlbiwgZW5naW5lSURfbGVuLCBpc2RlZmF1bHQgPSBGQUxTRTsKLQotICAgIGNoYXIgICAgICAgICAgICpzID0gTlVMTCwKLSAgICAgICAgKnRlc3RuYW1lID0gIlVzaW5nIEhNQUNNRDUgdG8gY3JlYXRlIG1hc3RlciBrZXkuIiwKLSAgICAgICAgKmhhc2huYW1lX0t1ID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wiLCAqaGFzaG5hbWVfa3VsOwotCi0gICAgdV9jaGFyICAgICAgICAgIEt1W0xPQ0FMX01BWEJVRl0sIGt1bFtMT0NBTF9NQVhCVUZdOwotCi0gICAgb2lkICAgICAgICAgICAgKmhhc2h0eXBlX0t1ID0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCwgKmhhc2h0eXBlX2t1bDsKLQotICAgIE9VVFBVVCgiVGVzdCBvZiBnZW5lcmF0ZV9rdWwgLS0iKTsKLQotCi0gICAgLyoKLSAgICAgKiBTZXQgcGFzc3BocmFzZSBhbmQgZW5naW5lSUQuCi0gICAgICoKLSAgICAgKiBJZiBlbmdpbmVJRCBiZWdpbnMgd2l0aCAweCwgYXNzdW1lIGl0IGlzIHdyaXR0ZW4gaW4gKHByaW50YWJsZSkKLSAgICAgKiBoZXggYW5kIGNvbnZlcnQgaXQgdG8gYmluYXJ5IGRhdGEuCi0gICAgICovCi0gICAgaWYgKCFwYXNzcGhyYXNlKSB7Ci0gICAgICAgIHBhc3NwaHJhc2UgPSBQQVNTUEhSQVNFX0RFRkFVTFQ7Ci0gICAgfQotICAgIGlmICghYmVxdWlldCkKLSAgICAgICAgZnByaW50ZihzdGRvdXQsICJQYXNzcGhyYXNlJXM6XG5cdCVzXG5cbiIsCi0gICAgICAgICAgICAgICAgKHBhc3NwaHJhc2UgPT0gUEFTU1BIUkFTRV9ERUZBVUxUKSA/ICIgKGRlZmF1bHQpIiA6ICIiLAotICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UpOwotCi0gICAgaWYgKCFlbmdpbmVJRCkgewotICAgICAgICBlbmdpbmVJRCA9IEVOR0lORUlEX0RFRkFVTFQ7Ci0gICAgICAgIGlzZGVmYXVsdCA9IFRSVUU7Ci0gICAgfQotCi0gICAgZW5naW5lSURfbGVuID0gc3RybGVuKGVuZ2luZUlEKTsKLQotICAgIGlmICh0b2xvd2VyKCooZW5naW5lSUQgKyAxKSkgPT0gJ3gnKSB7Ci0gICAgICAgIGVuZ2luZUlEX2xlbiA9IGhleF90b19iaW5hcnkyKGVuZ2luZUlEICsgMiwgZW5naW5lSURfbGVuIC0gMiwgJnMpOwotICAgICAgICBpZiAoZW5naW5lSURfbGVuIDwgMCkgewotICAgICAgICAgICAgRkFJTEVEKChydmFsID0gU05NUEVSUl9HRU5FUlIpLAotICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSBoZXggZW5naW5lSUQuIik7Ci0gICAgICAgIH0KLSAgICAgICAgZW5naW5lSUQgPSBzOwotICAgICAgICBiaW5hcnlfdG9faGV4KGVuZ2luZUlELCBlbmdpbmVJRF9sZW4sICZzKTsKLSAgICB9Ci0KLSAgICBpZiAoIWJlcXVpZXQpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZW5naW5lSUQlcyAobGVuPSVkKTogICVzXG5cbiIsCi0gICAgICAgICAgICAgICAgKGlzZGVmYXVsdCkgPyAiIChkZWZhdWx0KSIgOiAiIiwKLSAgICAgICAgICAgICAgICBlbmdpbmVJRF9sZW4sIChzKSA/IHMgOiBlbmdpbmVJRCk7Ci0gICAgaWYgKHMpIHsKLSAgICAgICAgU05NUF9GUkVFKHMpOwotICAgIH0KLQotCi0KLSAgICAvKgotICAgICAqIENyZWF0ZSBhIG1hc3RlciBrZXkgdXNpbmcgYm90aCBoYXNoIHRyYW5zZm9ybXM7IGNyZWF0ZSBsb2NhbGl6ZWQKLSAgICAgKiBrZXlzIHVzaW5nIGJvdGggaGFzaCB0cmFuc2Zvcm1zIGZyb20gZWFjaCBtYXN0ZXIga2V5LgotICAgICAqLwotICB0ZXN0X2dlbmt1bF9hZ2Fpbl9tYXN0ZXI6Ci0gICAgbWVtc2V0KEt1LCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIGt1bGVuID0gTE9DQUxfTUFYQlVGOwotICAgIGhhc2huYW1lX2t1bCA9ICJ1c21ITUFDTUQ1QXV0aFByb3RvY29sIjsKLSAgICBoYXNodHlwZV9rdWwgPSB1c21ITUFDTUQ1QXV0aFByb3RvY29sOwotICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KTsKLQotCi0gICAgcnZhbCA9IGdlbmVyYXRlX0t1KGhhc2h0eXBlX0t1LCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgIHBhc3NwaHJhc2UsIHN0cmxlbihwYXNzcGhyYXNlKSwgS3UsICZrdWxlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJnZW5lcmF0ZV9LdSgpLiIpOwotCi0gICAgYmluYXJ5X3RvX2hleChLdSwga3VsZW4sICZzKTsKLSAgICBpZiAoIWJlcXVpZXQpCi0gICAgICAgIGZwcmludGYoc3Rkb3V0LAotICAgICAgICAgICAgICAgICJcblxuTWFzdGVyIEt1IHVzaW5nIFwiJXNcIjpcblx0JXNcblxuIiwgaGFzaG5hbWVfS3UsIHMpOwotICAgIGZyZWVfemVybyhzLCBrdWxlbik7Ci0KLQotICB0ZXN0X2dlbmt1bF9hZ2Fpbl9sb2NhbDoKLSAgICBtZW1zZXQoa3VsLCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIGt1bF9sZW4gPSBMT0NBTF9NQVhCVUY7Ci0KLSAgICBydmFsID0gZ2VuZXJhdGVfa3VsKGhhc2h0eXBlX2t1bCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgICAgZW5naW5lSUQsIGVuZ2luZUlEX2xlbiwgS3UsIGt1bGVuLCBrdWwsICZrdWxfbGVuKTsKLQotICAgIGlmICgoaGFzaHR5cGVfS3UgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkKLSAgICAgICAgJiYgKGhhc2h0eXBlX2t1bCA9PSB1c21ITUFDU0hBMUF1dGhQcm90b2NvbCkpIHsKLSAgICAgICAgaWYgKHJ2YWwgPT0gU05NUEVSUl9TVUNDRVNTKSB7Ci0gICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAgICAgImdlbmVyYXRlX2t1bCBTSE9VTEQgZmFpbCB3aGVuIEt1IGxlbmd0aCBpcyAiCi0gICAgICAgICAgICAgICAgICAgImxlc3MgdGhhbiBoYXNoIHRyYW5zZm9ybSBsZW5ndGguIik7Ci0gICAgICAgIH0KLQotICAgIH0gZWxzZSB7Ci0gICAgICAgIEZBSUxFRChydmFsLCAiZ2VuZXJhdGVfa3VsKCkuIik7Ci0KLSAgICAgICAgaWYgKGt1bF9sZW4gIT0gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAgICAgImt1bCBsZW5ndGggaXMgd3JvbmcgZm9yIHRoZSBnaXZlbiBoYXNodHlwZS4iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGJpbmFyeV90b19oZXgoa3VsLCBrdWxfbGVuLCAmcyk7Ci0gICAgICAgIGZwcmludGYoc3Rkb3V0LCAia3VsICglcykgKGxlbj0lZCk6ICAlc1xuIiwKLSAgICAgICAgICAgICAgICAoKGhhc2h0eXBlX0t1ID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpID8gIk1ENSIgOiAiU0hBIiksCi0gICAgICAgICAgICAgICAga3VsX2xlbiwgcyk7Ci0gICAgICAgIGZyZWVfemVybyhzLCBrdWxfbGVuKTsKLSAgICB9Ci0KLQotICAgIC8qCi0gICAgICogQ3JlYXRlIGxvY2FsaXplZCBrZXkgdXNpbmcgdGhlIG90aGVyIGhhc2ggdHJhbnNmb3JtLCBidXQgZnJvbQotICAgICAqICogdGhlIHNhbWUgbWFzdGVyIGtleS4KLSAgICAgKi8KLSAgICBpZiAoaGFzaHR5cGVfa3VsID09IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2wpIHsKLSAgICAgICAgaGFzaHR5cGVfa3VsID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7Ci0gICAgICAgIGhhc2huYW1lX2t1bCA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbCI7Ci0gICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7Ci0gICAgICAgIGdvdG8gdGVzdF9nZW5rdWxfYWdhaW5fbG9jYWw7Ci0gICAgfQotCi0gICAgU1VDQ0VTUyh0ZXN0bmFtZSk7Ci0KLQotICAgIC8qCi0gICAgICogUmUtY3JlYXRlIHRoZSBtYXN0ZXIga2V5IHVzaW5nIHRoZSBvdGhlciBoYXNoIHRyYW5zZm9ybS4KLSAgICAgKi8KLSAgICBpZiAoaGFzaHR5cGVfS3UgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgewotICAgICAgICBoYXNodHlwZV9LdSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOwotICAgICAgICBoYXNobmFtZV9LdSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbCI7Ci0gICAgICAgIHRlc3RuYW1lID0gIlVzaW5nIEhNQUNTSEExIHRvIGNyZWF0ZSBtYXN0ZXIga2V5LiI7Ci0gICAgICAgIGdvdG8gdGVzdF9nZW5rdWxfYWdhaW5fbWFzdGVyOwotICAgIH0KLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZ2Vua3VsKCkgKi8KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3Rfa2V5Y2hhbmdlCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKgotICogVGVzdCBvZiBLZXlDaGFuZ2UgVEMgaW1wbGVtZW50YXRpb24uCi0gKgotICogQVNTVU1FIG5ld2tleSBhbmQgb2xka2V5IGJlZ2luIGFzIE5VTEwgdGVybWluYXRlZCBzdHJpbmdzLgotICovCi1pbnQKLXRlc3Rfa2V5Y2hhbmdlKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsCi0gICAgICAgIGZhaWxjb3VudCA9IDAsCi0gICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDTUQ1KSwKLSAgICAgICAgb2xka2V5X2xlbiwKLSAgICAgICAgbmV3a2V5X2xlbiwKLSAgICAgICAga2V5Y2hhbmdlX2xlbiwKLSAgICAgICAgdGVtcF9sZW4sIGlzZGVmYXVsdF9uZXcgPSBGQUxTRSwgaXNkZWZhdWx0X29sZCA9IEZBTFNFOwotCi0gICAgY2hhciAgICAgICAgICAgKmhhc2huYW1lID0gInVzbUhNQUNNRDVBdXRoUHJvdG9jb2wuIiwgKnM7Ci0KLSAgICB1X2NoYXIgICAgICAgICAgb2xka2V5X2J1ZltMT0NBTF9NQVhCVUZdLAotICAgICAgICBuZXdrZXlfYnVmW0xPQ0FMX01BWEJVRl0sCi0gICAgICAgIHRlbXBfYnVmW0xPQ0FMX01BWEJVRl0sIGtleWNoYW5nZV9idWZbTE9DQUxfTUFYQlVGXTsKLQotICAgIG9pZCAgICAgICAgICAgICpoYXNodHlwZSA9IHVzbUhNQUNNRDVBdXRoUHJvdG9jb2w7Ci0KLSAgICBPVVRQVVQoIlRlc3Qgb2YgS2V5Q2hhbmdlIFRDIC0tIik7Ci0KLQotICAgIC8qCi0gICAgICogU2V0IG5ld2tleSBhbmQgb2xka2V5LgotICAgICAqLwotICAgIGlmICghbmV3a2V5KSB7ICAgICAgICAgICAgICAvKiBuZXdrZXkgKi8KLSAgICAgICAgbmV3a2V5ID0gTkVXS0VZX0RFRkFVTFQ7Ci0gICAgICAgIGlzZGVmYXVsdF9uZXcgPSBUUlVFOwotICAgIH0KLSAgICBuZXdrZXlfbGVuID0gc3RybGVuKG5ld2tleSk7Ci0KLSAgICBpZiAodG9sb3dlcigqKG5ld2tleSArIDEpKSA9PSAneCcpIHsKLSAgICAgICAgbmV3a2V5X2xlbiA9IGhleF90b19iaW5hcnkyKG5ld2tleSArIDIsIG5ld2tleV9sZW4gLSAyLCAmcyk7Ci0gICAgICAgIGlmIChuZXdrZXlfbGVuIDwgMCkgewotICAgICAgICAgICAgRkFJTEVEKChydmFsID0gU05NUEVSUl9HRU5FUlIpLAotICAgICAgICAgICAgICAgICAgICJDb3VsZCBub3QgcmVzb2x2ZSBoZXggbmV3a2V5LiIpOwotICAgICAgICB9Ci0gICAgICAgIG5ld2tleSA9IHM7Ci0gICAgICAgIGJpbmFyeV90b19oZXgobmV3a2V5LCBuZXdrZXlfbGVuLCAmcyk7Ci0gICAgfQotCi0gICAgaWYgKCFvbGRrZXkpIHsgICAgICAgICAgICAgIC8qIG9sZGtleSAqLwotICAgICAgICBvbGRrZXkgPSBPTERLRVlfREVGQVVMVDsKLSAgICAgICAgaXNkZWZhdWx0X29sZCA9IFRSVUU7Ci0gICAgfQotICAgIG9sZGtleV9sZW4gPSBzdHJsZW4ob2xka2V5KTsKLQotICAgIGlmICh0b2xvd2VyKCoob2xka2V5ICsgMSkpID09ICd4JykgewotICAgICAgICBvbGRrZXlfbGVuID0gaGV4X3RvX2JpbmFyeTIob2xka2V5ICsgMiwgb2xka2V5X2xlbiAtIDIsICZzKTsKLSAgICAgICAgaWYgKG9sZGtleV9sZW4gPCAwKSB7Ci0gICAgICAgICAgICBGQUlMRUQoKHJ2YWwgPSBTTk1QRVJSX0dFTkVSUiksCi0gICAgICAgICAgICAgICAgICAgIkNvdWxkIG5vdCByZXNvbHZlIGhleCBvbGRrZXkuIik7Ci0gICAgICAgIH0KLSAgICAgICAgb2xka2V5ID0gczsKLSAgICAgICAgYmluYXJ5X3RvX2hleChvbGRrZXksIG9sZGtleV9sZW4sICZzKTsKLSAgICB9Ci0KLQotCi0gIHRlc3Rfa2V5Y2hhbmdlX2FnYWluOgotICAgIG1lbXNldChvbGRrZXlfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIG1lbXNldChuZXdrZXlfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIG1lbXNldChrZXljaGFuZ2VfYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIG1lbXNldCh0ZW1wX2J1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLQotICAgIG1lbWNweShvbGRrZXlfYnVmLCBvbGRrZXksIFNOTVBfTUlOKG9sZGtleV9sZW4sIHByb3Blcmxlbmd0aCkpOwotICAgIG1lbWNweShuZXdrZXlfYnVmLCBuZXdrZXksIFNOTVBfTUlOKG5ld2tleV9sZW4sIHByb3Blcmxlbmd0aCkpOwotICAgIGtleWNoYW5nZV9sZW4gPSBMT0NBTF9NQVhCVUY7Ci0KLQotICAgIGJpbmFyeV90b19oZXgob2xka2V5X2J1ZiwgcHJvcGVybGVuZ3RoLCAmcyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJcbm9sZGtleSVzIChsZW49JWQpOiAgJXNcbiIsCi0gICAgICAgICAgICAoaXNkZWZhdWx0X29sZCkgPyAiIChkZWZhdWx0KSIgOiAiIiwgcHJvcGVybGVuZ3RoLCBzKTsKLSAgICBTTk1QX0ZSRUUocyk7Ci0KLSAgICBiaW5hcnlfdG9faGV4KG5ld2tleV9idWYsIHByb3Blcmxlbmd0aCwgJnMpOwotICAgIGZwcmludGYoc3Rkb3V0LCAibmV3a2V5JXMgKGxlbj0lZCk6ICAlc1xuXG4iLAotICAgICAgICAgICAgKGlzZGVmYXVsdF9uZXcpID8gIiAoZGVmYXVsdCkiIDogIiIsIHByb3Blcmxlbmd0aCwgcyk7Ci0gICAgU05NUF9GUkVFKHMpOwotCi0KLSAgICBydmFsID0gZW5jb2RlX2tleWNoYW5nZShoYXNodHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGtleV9idWYsIHByb3Blcmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZXdrZXlfYnVmLCBwcm9wZXJsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5Y2hhbmdlX2J1ZiwgJmtleWNoYW5nZV9sZW4pOwotICAgIEZBSUxFRChydmFsLCAiZW5jb2RlX2tleWNoYW5nZSgpLiIpOwotCi0gICAgaWYgKGtleWNoYW5nZV9sZW4gIT0gKHByb3Blcmxlbmd0aCAqIDIpKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICJLZXlDaGFuZ2Ugc3RyaW5nIChlbmNvZGVkKSBpcyBub3QgcHJvcGVyIGxlbmd0aCAiCi0gICAgICAgICAgICAgICAiZm9yIHRoaXMgaGFzaCB0cmFuc2Zvcm0uIik7Ci0gICAgfQotCi0gICAgYmluYXJ5X3RvX2hleChrZXljaGFuZ2VfYnVmLCBrZXljaGFuZ2VfbGVuLCAmcyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICIoJXMpIEtleUNoYW5nZSBzdHJpbmc6ICAlc1xuXG4iLAotICAgICAgICAgICAgKChoYXNodHlwZSA9PSB1c21ITUFDTUQ1QXV0aFByb3RvY29sKSA/ICJNRDUiIDogIlNIQSIpLCBzKTsKLSAgICBTTk1QX0ZSRUUocyk7Ci0KLSAgICB0ZW1wX2xlbiA9IHByb3Blcmxlbmd0aDsKLSAgICBydmFsID0gZGVjb2RlX2tleWNoYW5nZShoYXNodHlwZSwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZGtleV9idWYsIHByb3Blcmxlbmd0aCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBrZXljaGFuZ2VfYnVmLCBwcm9wZXJsZW5ndGggKiAyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRlbXBfYnVmLCAmdGVtcF9sZW4pOwotICAgIEZBSUxFRChydmFsLCAiZGVjb2RlX2tleWNoYW5nZSgpLiIpOwotCi0gICAgaWYgKHRlbXBfbGVuICE9IHByb3Blcmxlbmd0aCkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAiZGVjb2RlZCBuZXdrZXkgaXMgbm90IHByb3BlciBsZW5ndGggZm9yICIKLSAgICAgICAgICAgICAgICJ0aGlzIGhhc2ggdHJhbnNmb3JtLiIpOwotICAgIH0KLQotICAgIGJpbmFyeV90b19oZXgodGVtcF9idWYsIHRlbXBfbGVuLCAmcyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJkZWNvZGVkIG5ld2tleTogICVzXG5cbiIsIHMpOwotICAgIFNOTVBfRlJFRShzKTsKLQotCi0gICAgaWYgKG1lbWNtcChuZXdrZXlfYnVmLCB0ZW1wX2J1ZiwgdGVtcF9sZW4pKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwgIm5ld2tleSBkaWQgbm90IGRlY29kZSBwcm9wZXJseS4iKTsKLSAgICB9Ci0KLQotICAgIFNVQ0NFU1MoaGFzaG5hbWUpOwotICAgIGZwcmludGYoc3Rkb3V0LCAiXG4iKTsKLQotCi0gICAgLyoKLSAgICAgKiBNdWx0aXBsZXggZGlmZmVyZW50IHRlc3QgY29tYmluYXRpb25zLgotICAgICAqCi0gICAgICogRmlyc3QgY2xhdXNlIGlzIGZvciBUZXN0ICMyLCBzZWNvbmQgY2xhdXNlIGlzIGZvciAobGFzdCkgVGVzdCAjMy4KLSAgICAgKi8KLSAgICBpZiAoaGFzaHR5cGUgPT0gdXNtSE1BQ01ENUF1dGhQcm90b2NvbCkgewotICAgICAgICBoYXNodHlwZSA9IHVzbUhNQUNTSEExQXV0aFByb3RvY29sOwotICAgICAgICBoYXNobmFtZSA9ICJ1c21ITUFDU0hBMUF1dGhQcm90b2NvbCAody9ERVMgbGVuZ3RoIGt1bCdzKS4iOwotICAgICAgICBwcm9wZXJsZW5ndGggPSBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFUykKLSAgICAgICAgICAgICsgQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVNfSVYpOwotICAgICAgICBnb3RvIHRlc3Rfa2V5Y2hhbmdlX2FnYWluOwotCi0gICAgfSBlbHNlIGlmIChwcm9wZXJsZW5ndGggPCBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpKSB7Ci0gICAgICAgIGhhc2h0eXBlID0gdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2w7Ci0gICAgICAgIGhhc2huYW1lID0gInVzbUhNQUNTSEExQXV0aFByb3RvY29sLiI7Ci0gICAgICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7Ci0gICAgICAgIGdvdG8gdGVzdF9rZXljaGFuZ2VfYWdhaW47Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgdGVzdF9rZXljaGFuZ2UoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy9taXNjdGVzdC5jIGIvdGVzdGluZy9taXNjdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3OWYwNDY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvbWlzY3Rlc3QuYworKysgL2Rldi9udWxsCkBAIC0xLDI2NiArMCwwIEBACi0vKgotICogbWlzY3Rlc3QuYwotICoKLSAqIEV4cGVjdGVkIFNVQ0NFU1NlcyBmb3IgYWxsIHRlc3RzOiAgICAwCi0gKgotICogUmV0dXJuczoKLSAqICAgICAgTnVtYmVyIG9mIEZBSUxVUkVzLgotICoKLSAqIFRlc3Qgb2YgZHVtcF9zbm1wRW5naW5lSUQoKS4gICAgICAgICAgICAgICAgIFNVQ0NFU1NlczogIDAKLSAqLwotCi1zdGF0aWMgY2hhciAgICAqcmNzaWQgPSAiJElkJCI7ICAgICAvKiAqLwotCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+Ci0KLSNpbmNsdWRlIDxzdGRpby5oPgotI2lmZGVmIEhBVkVfTkVUSU5FVF9JTl9ICi0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJhc24xLmgiCi0jaW5jbHVkZSAic25tcF9hcGkuaCIKLSNpbmNsdWRlICJ0b29scy5oIgotI2luY2x1ZGUgInRyYW5zZm9ybV9vaWRzLmgiCi0jaW5jbHVkZSAiY2FsbGJhY2suaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1leHRlcm4gY2hhciAgICAqb3B0YXJnOwotZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7Ci0KLQotCi0vKgotICogR2xvYmFscywgJmMuLi4KLSAqLwotY2hhciAgICAgICAgICAgKmxvY2FsX3Byb2duYW1lOwotCi0jZGVmaW5lIFVTQUdFCSJVc2FnZTogJXMgWy1oXVstMWFdIgotI2RlZmluZSBPUFRJT05MSVNUCSIxYWgiCi0KLWludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9kdW1wc2VpZCA9IDA7Ci0KLSNkZWZpbmUJQUxMT1BUSU9OUwkoZG9hbGx0ZXN0cyArIGRvZHVtcHNlaWQpCi0KLQotCi0jZGVmaW5lIExPQ0FMX01BWEJVRgkoMTAyNCAqIDgpCi0jZGVmaW5lIE5MCQkiXG4iCi0KLSNkZWZpbmUgT1VUUFVUKG8pCWZwcmludGYoc3Rkb3V0LCAiXG5cbiVzXG5cbiIsIG8pOwotCi0jZGVmaW5lIFNVQ0NFU1MocykJCQkJCVwKLXsJCQkJCQkJXAotCWlmICghZmFpbGNvdW50KQkJCQkJXAotCQlmcHJpbnRmKHN0ZG91dCwgIlxuU1VDQ0VTUzogJXNcbiIsIHMpOwlcCi19Ci0KLSNkZWZpbmUgRkFJTEVEKGUsIGYpCQkJCQlcCi17CQkJCQkJCVwKLQlpZiAoZSAhPSBTTk1QRVJSX1NVQ0NFU1MpIHsJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5GQUlMRUQ6ICVzXG4iLCBmKTsJXAotCQlmYWlsY291bnQgKz0gMTsJCQkJXAotCX0JCQkJCQlcCi19Ci0KLQotCi0KLSNkZWZpbmUgSURCTEFUXzQJIjAwMDEwMjAzIgotCi0jZGVmaW5lIElEVklPTEFURTEJIjgwMDAwMDAzMDBkZWVkY2FmZSIKLQotI2RlZmluZSBJRElQdjQJCSI4MDAwMDAwMzAxMGEwOTA4MDciCi0jZGVmaW5lIElESVB2NgkJIjgwMDAwMDAzMDIxMDBmMGUwZDBjMGIwYTA5MDgwNzA2MDUwNDAzMDIwMSIKLSNkZWZpbmUgSURNQUMJCSI4MDAwMDAwMzAzZmZlZWRkY2NiYmFhIgotCi0jZGVmaW5lIElEVEVYVAkJIjgwMDAwMDAzMDQiCi0jZGVmaW5lIFBSSU5UQUJMRQkiTGV0IHRoaXMgYmUgcHJpbnRhYmxlLiIKLQotI2RlZmluZSBJRE9DVEVUU183CSI4MDAwMDAwMzA1MDAwMTAyMDMwNDA1MDYwNyIKLQotI2RlZmluZSBJRExPQ0FMXzExCSI4MDAwMDAwMzA2MDAwMTAyMDMwNDA1MDYwNzA4MDkwYTBiIgotCi0jZGVmaW5lIElESVB2NF9FWFRSQTMJIjgwMDAwMDAzMDEwYTA5MDgwNzAxMDIwMyIKLQotI2RlZmluZSBJRF9OVU1TVFJJTkdTCQkxMAotCi0KLQotCi0vKgotICogUHJvdG90eXBlcy4KLSAqLwotdm9pZCAgICAgICAgICAgIHVzYWdlKEZJTEUgKiBvZnApOwotCi1pbnQgICAgICAgICAgICAgdGVzdF9kdW1wc2VpZCh2b2lkKTsKLQotCi0KLQotCi1pbnQKLW1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwOwotICAgIGNoYXIgICAgICAgICAgICBjaDsKLQotICAgIGxvY2FsX3Byb2duYW1lID0gYXJndlswXTsKLQotICAgIC8qCi0gICAgICogUGFyc2UuCi0gICAgICovCi0gICAgd2hpbGUgKChjaCA9IGdldG9wdChhcmdjLCBhcmd2LCBPUFRJT05MSVNUKSkgIT0gRU9GKSB7Ci0gICAgICAgIHN3aXRjaCAoY2gpIHsKLSAgICAgICAgY2FzZSAnMSc6Ci0gICAgICAgICAgICBkb2R1bXBzZWlkID0gMTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2gnOgotICAgICAgICAgICAgcnZhbCA9IDA7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICB1c2FnZShzdGRvdXQpOwotICAgICAgICAgICAgZXhpdChydmFsKTsKLSAgICAgICAgfQotCi0gICAgICAgIGFyZ2MgLT0gMTsKLSAgICAgICAgYXJndiArPSAxOwotICAgICAgICBpZiAob3B0YXJnKSB7Ci0gICAgICAgICAgICBhcmdjIC09IDE7Ci0gICAgICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgICAgICBvcHRhcmcgPSBOVUxMOwotICAgICAgICB9Ci0gICAgICAgIG9wdGluZCA9IDE7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlIGdldG9wdCAqLwotCi0gICAgaWYgKChhcmdjID4gMSkpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLQotICAgIH0gZWxzZSBpZiAoQUxMT1BUSU9OUyAhPSAxKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIFRlc3Qgc3R1ZmYuCi0gICAgICovCi0gICAgaWYgKGRvZHVtcHNlaWQgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9kdW1wc2VpZCgpOwotICAgIH0KLQotCi0gICAgLyoKLSAgICAgKiBDbGVhbnVwLgotICAgICAqLwotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIG1haW4oKSAqLwotCi0KLQotCi0KLXZvaWQKLXVzYWdlKEZJTEUgKiBvZnApCi17Ci0gICAgZnByaW50ZihvZnAsCi0gICAgICAgICAgICBVU0FHRQotICAgICAgICAgICAgIiIgTkwKLSAgICAgICAgICAgICIJLTEJCVRlc3QgZHVtcF9zbm1wRW5naW5lSUQoKS4iIE5MCi0gICAgICAgICAgICAiCS1hCQlBbGwgdGVzdHMuIiBOTAotICAgICAgICAgICAgIgktaAkJSGVscC4iIE5MICIiIE5MLCBsb2NhbF9wcm9nbmFtZSk7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHVzYWdlKCkgKi8KLQotCi0KLQotI2lmZGVmIEVYQU1QTEUKLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2Rvc29tZXRoaW5nCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKgotICogVGVzdCB0ZW1wbGF0ZS4KLSAqLwotaW50Ci10ZXN0X2Rvc29tZXRoaW5nKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0KLSAgICBFTTAoMSwgIlVOSU1QTEVNRU5URUQiKTsgICAgLyogRU0oMSk7IC8qICovCi0KLSAgdGVzdF9kb3NvbWV0aGluZ19xdWl0OgotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9zb21ldGhpbmcoKSAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFNUExFICovCi0KLQotCi0KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLW8tKioqKioqCi0gKiB0ZXN0X2R1bXBzZWlkCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqCi0gKiBUZXN0IGR1bXBfc25tcEVuZ2luZUlEKCkuCi0gKi8KLWludAotdGVzdF9kdW1wc2VpZCh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICAvKiBydmFsID0gU05NUEVSUl9TVUNDRVNTLCAqLwotICAgICAgICAgICAgICAgICAgICBmYWlsY291bnQgPSAwLCB0bGVuLCBjb3VudCA9IDA7Ci0KLSAgICBjaGFyICAgICAgICAgICAgYnVmW1NOTVBfTUFYQlVGXSwKLSAgICAgICAgKnMsICp0LCAqcmlzLCAqcmF3aWRfc2V0W0lEX05VTVNUUklOR1MgKyAxXSA9IHsKLSAgICAgICAgSURCTEFUXzQsCi0gICAgICAgIElEVklPTEFURTEsCi0gICAgICAgIElESVB2NCwKLSAgICAgICAgSURJUHY2LAotICAgICAgICBJRE1BQywKLSAgICAgICAgSURURVhULAotICAgICAgICBJRE9DVEVUU183LAotICAgICAgICBJRExPQ0FMXzExLAotICAgICAgICBJRElQdjRfRVhUUkEzLAotICAgICAgICBOVUxMCi0gICAgfTsKLQotICAgIE9VVFBVVCgiVGVzdCBvZiBkdW1wX3NubXBFbmdpbmVJRC4gICIKLSAgICAgICAgICAgIihEb2VzIG5vdCByZXBvcnQgZmFpbHVyZSBvciBzdWNjZXNzLikiKTsKLQotCi0gICAgd2hpbGUgKChyaXMgPSByYXdpZF9zZXRbY291bnQrK10pKSB7Ci0gICAgICAgIHRsZW4gPSBoZXhfdG9fYmluYXJ5MihyaXMsIHN0cmxlbihyaXMpLCAmdCk7Ci0KLSAgICAgICAgaWYgKHJpcyA9PSBJRFRFWFQpIHsKLSAgICAgICAgICAgIG1lbXNldChidWYsIDAsIFNOTVBfTUFYQlVGKTsKLSAgICAgICAgICAgIG1lbWNweShidWYsIHQsIHRsZW4pOwotICAgICAgICAgICAgdGxlbiArPSBzcHJpbnRmKGJ1ZiArIHRsZW4sICIlcyIsIFBSSU5UQUJMRSk7Ci0KLSAgICAgICAgICAgIFNOTVBfRlJFRSh0KTsKLSAgICAgICAgICAgIHQgPSBidWY7Ci0gICAgICAgIH0KLSNpZmRlZiBORVRTTk1QX0VOQUJMRV9URVNUSU5HX0NPREUKLSAgICAgICAgcyA9IGR1bXBfc25tcEVuZ2luZUlEKHQsICZ0bGVuKTsKLSAgICAgICAgcHJpbnRmKCIlcyAgICAobGVuPSVkKVxuIiwgcywgdGxlbik7Ci0jZW5kaWYKLQotICAgICAgICBTTk1QX0ZSRUUocyk7Ci0gICAgICAgIGlmICh0ICE9IGJ1ZikgewotICAgICAgICAgICAgU05NUF9GUkVFKHQpOwotICAgICAgICB9Ci0gICAgfQotCi0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2R1bXBzZWlkKCkgKi8KZGlmZiAtLWdpdCBhL3Rlc3Rpbmcvc2NhcGl0ZXN0LmMgYi90ZXN0aW5nL3NjYXBpdGVzdC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4MmU5MDk4Li4wMDAwMDAwCi0tLSBhL3Rlc3Rpbmcvc2NhcGl0ZXN0LmMKKysrIC9kZXYvbnVsbApAQCAtMSw0ODkgKzAsMCBAQAotLyoKLSAqIHNjYXBpdGVzdC5jCi0gKgotICogRXhwZWN0ZWQgU1VDQ0VTU2VzOiAgMiArIDEwICsgMSBmb3IgYWxsIHRlc3RzLgotICoKLSAqIFJldHVybnM6Ci0gKiAgICAgIE51bWJlciBvZiBGQUlMVVJFcy4KLSAqCi0gKgotICogQVNTVU1FUyAgTm8ga2V5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJldHVybiBub24temVybyBzdWNjZXNzIGNvZGVzLgotICoKLSAqIFhYWCAgU3BsaXQgaW50byBpbmRpdmlkdWFsIG1vZHVsZXM/Ci0gKiBYWFggIEVycm9yL2ZyaW5nZSBjb25kaXRpb25zIHNob3VsZCBiZSB0ZXN0ZWQuCi0gKgotICoKLSAqIFRlc3Qgb2Ygc2NfcmFuZG9tLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDIuCi0gKiAgICAgIFJFUVVJUkVTIGEgaHVtYW4gdG8gc3BvdCBjaGVjayBmb3Igb2J2aW91cyBub24tcmFuZG9tbmVzcy4uLgotICoKLSAqIFRlc3Qgb2Ygc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCBhbmQgc2NfY2hlY2tfa2V5ZWRfaGFzaC4gICAgICBTVUNDRVNTZXM6IDEwLgotICoKLSAqIFRlc3Qgb2Ygc2NfZW5jcnlwdCBhbmQgc2NfZGVjcnlwdC4gICAgICAgICAgICAgICAgICAgICAgICAgICBTVUNDRVNTZXM6IDEuCi0gKi8KLQotc3RhdGljIGNoYXIgICAgKnJjc2lkID0gIiRJZCQiOyAgICAvKiAqLwotCi0KLSNpbmNsdWRlIDxuZXQtc25tcC9uZXQtc25tcC1jb25maWcuaD4KLQotI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaWZkZWYgSEFWRV9ORVRJTkVUX0lOX0gKLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jZW5kaWYKLQotI2luY2x1ZGUgImFzbjEuaCIKLSNpbmNsdWRlICJzbm1wX2FwaS5oIgotI2luY2x1ZGUgImtleXRvb2xzLmgiCi0jaW5jbHVkZSAidG9vbHMuaCIKLSNpbmNsdWRlICJzY2FwaS5oIgotI2luY2x1ZGUgInRyYW5zZm9ybV9vaWRzLmgiCi0jaW5jbHVkZSAiY2FsbGJhY2suaCIKLQotI2luY2x1ZGUgPHN0ZGxpYi5oPgotCi1leHRlcm4gY2hhciAgICAqb3B0YXJnOwotZXh0ZXJuIGludCAgICAgIG9wdGluZCwgb3B0b3B0LCBvcHRlcnI7Ci0KLSNkZWZpbmUgREVCVUcgICAgICAgICAgICAgICAgICAgLyogKi8KLQotCi0KLS8qCi0gKiBHbG9iYWxzLCAmYy4uLgotICovCi1jaGFyICAgICAgICAgICAqbG9jYWxfcHJvZ25hbWU7Ci0KLSNkZWZpbmUgVVNBR0UJIlVzYWdlOiAlcyBbLWhdWy1hY0hyXSIKLSNkZWZpbmUgT1BUSU9OTElTVAkiYWNoSHIiCi0KLWludCAgICAgICAgICAgICBkb2FsbHRlc3RzID0gMCwgZG9jcnlwdCA9IDAsIGRva2V5ZWRoYXNoID0gMCwgZG9yYW5kb20gPSAwOwotCi0jZGVmaW5lCUFMTE9QVElPTlMJKGRvYWxsdGVzdHMgKyBkb2NyeXB0ICsgZG9rZXllZGhhc2ggKyBkb3JhbmRvbSkKLQotCi0KLSNkZWZpbmUgTE9DQUxfTUFYQlVGCSgxMDI0ICogOCkKLSNkZWZpbmUgTkwJCSJcbiIKLQotI2RlZmluZSBPVVRQVVQobykJZnByaW50ZihzdGRvdXQsICJcblxuJXNcblxuIiwgbyk7Ci0KLSNkZWZpbmUgU1VDQ0VTUyhzKQkJCQkJXAotewkJCQkJCQlcCi0JaWYgKCFmYWlsY291bnQpCQkJCQlcCi0JCWZwcmludGYoc3Rkb3V0LCAiXG5TVUNDRVNTOiAlc1xuIiwgcyk7CVwKLX0KLQotI2RlZmluZSBGQUlMRUQoZSwgZikJCQkJCVwKLXsJCQkJCQkJXAotCWlmIChlICE9IFNOTVBFUlJfU1VDQ0VTUykgewkJCVwKLQkJZnByaW50ZihzdGRvdXQsICJcbkZBSUxFRDogJXNcbiIsIGYpOwlcCi0JCWZhaWxjb3VudCArPSAxOwkJCQlcCi0JfQkJCQkJCVwKLX0KLQotCi0jZGVmaW5lIEJJR1NUUklORwkJCQkJCQlcCi0gICAgIiAgIEEgcG9ydCBtYXkgYmUgYSBwbGVhc2FudCByZXRyZWF0IGZvciBhbnkgbWluZCBncm93biB3ZWFyeSBvZiIJXAotICAgICJ0aGUgc3RydWdnbGUgZm9yIGV4aXN0ZW5jZS4gIFRoZSB2YXN0IGV4cGFuc2Ugb2Ygc2t5LCB0aGUiCQlcCi0gICAgIm1vYmlsZSBhcmNoaXRlY3R1cmUgb2YgdGhlIGNsb3VkcywgdGhlIGNoYW1lbGVvbiBjb2xvcmF0aW9uIglcCi0gICAgIm9mIHRoZSBzZWEsIHRoZSBiZWFjb25zIGZsYXNoaW5nIG9uIHRoZSBzaG9yZSwgdG9nZXRoZXIgbWFrZSIJXAotICAgICJhIHByaXNtIHdoaWNoIGlzIG1hcnZlbGxvdXNseSBjYWxjdWxhdGVkIHRvIGVudGVydGFpbiBidXQgbm90IglcCi0gICAgImZhdGlndWUgdGhlIGV5ZS4gIFRoZSBsb2Z0eSBzaGlwcyB3aXRoIHRoZWlyIGNvbXBsZXggd2VicyBvZiIJXAotICAgICJyaWdnaW5nLCBzd2F5ZWQgdG8gYW5kIGZybyBieSB0aGUgc3dlbGwgaW4gaGFybW9uaW91cyBkYW5jZSwiCVwKLSAgICAiYWxsIGhlbHAgdG8gbWFpbnRhaW4gYSB0YXN0ZSBmb3Igcmh5dGhtIGFuZCBiZWF1dHkgaW4gdGhlIgkJXAotICAgICJtaW5kLiAgQW5kIGFib3ZlIGFsbCB0aGVyZSBpcyBhIG15c3RlcmlvdXMsIGFyaXN0cm9jcmF0aWMga2luZCIJXAotICAgICJvZiBwbGVhc3VyZSB0byBiZSBoYWQsIGZvciB0aG9zZSB3aG8gaGF2ZSBsb3N0IGFsbCBjdXJpb3NpdHkiCVwKLSAgICAib3IgYW1iaXRpb24sIGFzIHRoZXkgc3RyZWNoIG9uIHRoZSBiZWx2ZWRlcmUgb3IgbGVhbiBvdmVyIHRoZSIJXAotICAgICJtb2xlIHRvIHdhdGNoIHRoZSBhcnJpdmFscyBhbmQgZGVwYXJ0dXJlcyBvZiBvdGhlciBtZW4sIHRob3NlIglcCi0gICAgIndobyBzdGlsbCBoYXZlIHN1ZmZpY2llbnQgc3RyZW5ndGggb2YgcHVycG9zZSBpbiB0aGVtLCB0aGUiCVwKLSAgICAidXJnZSB0byB0cmF2ZWwgb3IgZW5yaWNoIHRoZW1zZWx2ZXMuIgkJCQlcCi0gICAgIgktLSBCYXVkZWxhaXJlIgkJCQkJCQlcCi0gICAgIgkgICBGcm9tIF9UaGVfUG9lbXNfaW5fUHJvc2VfLCBcIlRoZSBQb3J0XCIgKFhMSSkuIgotCi0jZGVmaW5lIEJJR1NFQ1JFVAkiU2hoaGguLi4gRG9uJ3QgdGVsbCAqYW55b25lKiBhYm91dCB0aGlzLiAgTm90IGEgc291bC4iCi0jZGVmaW5lIEJLV0RTRUNSRVQJIi5sdW9zIGEgdG9OICAuc2lodCB0dW9iYSAqZW5veW5hKiBsbGV0IHQnbm9EIC4uLmhoaGhTIgotCi0jZGVmaW5lIE1MQ09VTlRfTUFYCTYgICAgICAgLyogTUFDIExlbmd0aCBDb3VudCBNYXhpbXVtLiAqLwotCi0KLQotLyoKLSAqIFByb3RvdHlwZXMuCi0gKi8KLXZvaWQgICAgICAgICAgICB1c2FnZShGSUxFICogb2ZwKTsKLQotaW50ICAgICAgICAgICAgIHRlc3RfZG9jcnlwdCh2b2lkKTsKLWludCAgICAgICAgICAgICB0ZXN0X2Rva2V5ZWRoYXNoKHZvaWQpOwotaW50ICAgICAgICAgICAgIHRlc3RfZG9yYW5kb20odm9pZCk7Ci0KLQotCi0KLWludAotbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0gICAgY2hhciAgICAgICAgICAgIGNoOwotCi0gICAgbG9jYWxfcHJvZ25hbWUgPSBhcmd2WzBdOwotCi0gICAgLyoKLSAgICAgKiBQYXJzZS4KLSAgICAgKi8KLSAgICB3aGlsZSAoKGNoID0gZ2V0b3B0KGFyZ2MsIGFyZ3YsIE9QVElPTkxJU1QpKSAhPSBFT0YpIHsKLSAgICAgICAgc3dpdGNoIChjaCkgewotICAgICAgICBjYXNlICdhJzoKLSAgICAgICAgICAgIGRvYWxsdGVzdHMgPSAxOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgJ2MnOgotICAgICAgICAgICAgZG9jcnlwdCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnSCc6Ci0gICAgICAgICAgICBkb2tleWVkaGFzaCA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAncic6Ci0gICAgICAgICAgICBkb3JhbmRvbSA9IDE7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSAnaCc6Ci0gICAgICAgICAgICBydmFsID0gMDsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgICAgICBleGl0KHJ2YWwpOwotICAgICAgICB9Ci0KLSAgICAgICAgYXJnYyAtPSAxOwotICAgICAgICBhcmd2ICs9IDE7Ci0gICAgICAgIG9wdGluZCA9IDE7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZHdoaWxlIGdldG9wdCAqLwotCi0gICAgaWYgKChhcmdjID4gMSkpIHsKLSAgICAgICAgdXNhZ2Uoc3Rkb3V0KTsKLSAgICAgICAgZXhpdCgxMDAwKTsKLQotICAgIH0gZWxzZSBpZiAoQUxMT1BUSU9OUyAhPSAxKSB7Ci0gICAgICAgIHVzYWdlKHN0ZG91dCk7Ci0gICAgICAgIGV4aXQoMTAwMCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIFRlc3Qgc3R1ZmYuCi0gICAgICovCi0gICAgcnZhbCA9IHNjX2luaXQoKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2luaXQoKS4iKTsKLQotCi0gICAgaWYgKGRvY3J5cHQgfHwgZG9hbGx0ZXN0cykgewotICAgICAgICBmYWlsY291bnQgKz0gdGVzdF9kb2NyeXB0KCk7Ci0gICAgfQotICAgIGlmIChkb2tleWVkaGFzaCB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2Rva2V5ZWRoYXNoKCk7Ci0gICAgfQotICAgIGlmIChkb3JhbmRvbSB8fCBkb2FsbHRlc3RzKSB7Ci0gICAgICAgIGZhaWxjb3VudCArPSB0ZXN0X2RvcmFuZG9tKCk7Ci0gICAgfQotCi0KLSAgICAvKgotICAgICAqIENsZWFudXAuCi0gICAgICovCi0gICAgcnZhbCA9IHNjX3NodXRkb3duKFNOTVBfQ0FMTEJBQ0tfTElCUkFSWSwgU05NUF9DQUxMQkFDS19TSFVURE9XTiwKLSAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgTlVMTCk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19zaHV0ZG93bigpLiIpOwotCi0gICAgcmV0dXJuIGZhaWxjb3VudDsKLQotfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBlbmQgbWFpbigpICovCi0KLQotCi0KLQotdm9pZAotdXNhZ2UoRklMRSAqIG9mcCkKLXsKLSAgICBmcHJpbnRmKG9mcCwKLSAgICAgICAgICAgIFVTQUdFCi0gICAgICAgICAgICAiIiBOTAotICAgICAgICAgICAgIgktYQkJQWxsIHRlc3RzLiIgTkwKLSAgICAgICAgICAgICIJLWMJCVRlc3Qgb2Ygc2NfZW5jcnlwdCgpL3NjX2RlY3J5cHQoKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIgktaAkJSGVscC4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIgktSCAgICAgICAgICAgICAgVGVzdCBzY197Z2VuZXJhdGUsY2hlY2t9X2tleWVkX2hhc2goKS4iCi0gICAgICAgICAgICBOTAotICAgICAgICAgICAgIgktciAgICAgICAgICAgICAgVGVzdCBzY19yYW5kb20oKS4iCi0gICAgICAgICAgICBOTCAiIiBOTCwgbG9jYWxfcHJvZ25hbWUpOwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB1c2FnZSgpICovCi0KLQotCi0KLSNpZmRlZiBFWEFNUExFCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb3NvbWV0aGluZwotICoKLSAqIFRlc3QgdGVtcGxhdGUuCi0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqLwotaW50Ci10ZXN0X2Rvc29tZXRoaW5nKHZvaWQpCi17Ci0gICAgaW50ICAgICAgICAgICAgIHJ2YWwgPSBTTk1QRVJSX1NVQ0NFU1MsIGZhaWxjb3VudCA9IDA7Ci0KLSAgICBFTTAoMSwgIlVOSU1QTEVNRU5URUQiKTsgICAgLyogRU0oMSk7IC8qICovCi0KLSAgdGVzdF9kb3NvbWV0aGluZ19xdWl0OgotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9zb21ldGhpbmcoKSAqLwotI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFWEFNUExFICovCi0KLQotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9yYW5kb20KLSAqCi0gKiBPbmUgbGFyZ2UgcmVxdWVzdCwgb25lIHNldCBvZiBzaG9ydCByZXF1ZXN0cy4KLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqIFhYWAlwcm9iYWJseSBzaG91bGQgc3BsaXQgdXAgaW50byBpbmRpdmlkdWFsIG9wdGlvbnMuCi0gKi8KLWludAotdGVzdF9kb3JhbmRvbSh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLAotICAgICAgICBmYWlsY291bnQgPSAwLAotICAgICAgICBvcmlncmVxdWVzdCA9ICgxMDI0ICogMiksCi0gICAgICAgIG9yaWdyZXF1ZXN0X3Nob3J0ID0gMTksIG5ieXRlcyA9IG9yaWdyZXF1ZXN0LCBzaG9ydGNvdW50ID0gNywgaTsKLSAgICBjaGFyICAgICAgICAgICAgYnVmW0xPQ0FMX01BWEJVRl07Ci0KLSAgICBPVVRQVVQoIlJhbmRvbSB0ZXN0IC0tIGxhcmdlIHJlcXVlc3Q6Iik7Ci0KLSAgICBydmFsID0gc2NfcmFuZG9tKGJ1ZiwgJm5ieXRlcyk7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19yYW5kb20oKS4iKTsKLQotICAgIGlmIChuYnl0ZXMgIT0gb3JpZ3JlcXVlc3QpIHsKLSAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgInNjX3JhbmRvbSgpIHJldHVybmVkIGRpZmZlcmVudCB0aGFuIHJlcXVlc3RlZC4iKTsKLSAgICB9Ci0KLSAgICBkdW1wX2NodW5rKCJzY2FwaXRlc3QiLCBOVUxMLCBidWYsIG5ieXRlcyk7Ci0KLSAgICBTVUNDRVNTKCJSYW5kb20gdGVzdCAtLSBsYXJnZSByZXF1ZXN0LiIpOwotCi0KLSAgICBPVVRQVVQoIlJhbmRvbSB0ZXN0IC0tIHNob3J0IHJlcXVlc3RzOiIpOwotICAgIG9yaWdyZXF1ZXN0X3Nob3J0ID0gMTY7Ci0KLSAgICBmb3IgKGkgPSAwOyBpIDwgc2hvcnRjb3VudDsgaSsrKSB7Ci0gICAgICAgIG5ieXRlcyA9IG9yaWdyZXF1ZXN0X3Nob3J0OwotICAgICAgICBydmFsID0gc2NfcmFuZG9tKGJ1ZiwgJm5ieXRlcyk7Ci0gICAgICAgIEZBSUxFRChydmFsLCAic2NfcmFuZG9tKCkuIik7Ci0KLSAgICAgICAgaWYgKG5ieXRlcyAhPSBvcmlncmVxdWVzdF9zaG9ydCkgewotICAgICAgICAgICAgRkFJTEVEKFNOTVBFUlJfR0VORVJSLAotICAgICAgICAgICAgICAgICAgICJzY19yYW5kb20oKSByZXR1cm5lZCBkaWZmZXJlbnQgIiAidGhhbiByZXF1ZXN0ZWQuIik7Ci0gICAgICAgIH0KLQotICAgICAgICBkdW1wX2NodW5rKCJzY2FwaXRlc3QiLCBOVUxMLCBidWYsIG5ieXRlcyk7Ci0gICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZGZvciAqLwotCi0gICAgU1VDQ0VTUygiUmFuZG9tIHRlc3QgLS0gc2hvcnQgcmVxdWVzdHMuIik7Ci0KLQotICAgIHJldHVybiBmYWlsY291bnQ7Ci0KLX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZW5kIHRlc3RfZG9yYW5kb20oKSAqLwotCi0KLQotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotby0qKioqKioKLSAqIHRlc3RfZG9rZXllZGhhc2gKLSAqCi0gKiBSZXR1cm5zOgotICoJTnVtYmVyIG9mIGZhaWx1cmVzLgotICoKLSAqCi0gKiBUZXN0IGtleWVkIGhhc2hlcyB3aXRoIGEgdmFyaWV0eSBvZiBNQUMgbGVuZ3RoIHJlcXVlc3RzLgotICoKLSAqCi0gKiBOT1RFIEJvdGggdGVzdHMgaW50ZW50aW9uYWxseSB1c2UgdGhlIHNhbWUgc2VjcmV0Ci0gKgotICogRklYCUdldCBpbnB1dCBvciBvdXRwdXQgZnJvbSBzb21lIG90aGVyIHBhY2thZ2Ugd2hpY2ggaGFzaGVzLi4uCi0gKiBYWFgJQ291bGQgY3V0IHRoaXMgaW4gaGFsZiB3aXRoIGEgbGl0dGxlIGluZGlyZWN0aW9uLi4uCi0gKi8KLWludAotdGVzdF9kb2tleWVkaGFzaCh2b2lkKQotewotICAgIGludCAgICAgICAgICAgICBydmFsID0gU05NUEVSUl9TVUNDRVNTLCBmYWlsY291bnQgPSAwLCBiaWdzdHJpbmdfbGVuID0gc3RybGVuKEJJR1NUUklORyksIHNlY3JldF9sZW4gPSBzdHJsZW4oQklHU0VDUkVUKSwgcHJvcGVybGVuZ3RoLCBtbGNvdW50ID0gMCwgICAgICAgIC8qIE1BQyBMZW5ndGggY291bnQuICAgKi8KLSAgICAgICAgICAgICAgICAgICAgaGJsZW47ICAgICAgLyogSGFzaCBCdWZmZXIgbGVuZ3RoLiAqLwotCi0gICAgdV9pbnQgICAgICAgICAgIGhhc2hidWZfbGVuW01MQ09VTlRfTUFYXSA9IHsKLSAgICAgICAgTE9DQUxfTUFYQlVGLAotICAgICAgICBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ1NIQTEpLAotICAgICAgICBCWVRFU0laRShTTk1QX1RSQU5TX0FVVEhMRU5fSE1BQ01ENSksCi0gICAgICAgIEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDOTYpLAotICAgICAgICA3LAotICAgICAgICAwLAotICAgIH07Ci0KLSAgICB1X2NoYXIgICAgICAgICAgaGFzaGJ1ZltMT0NBTF9NQVhCVUZdOwotICAgIGNoYXIgICAgICAgICAgICpzOwotCi0gIHRlc3RfZG9rZXllZGhhc2hfYWdhaW46Ci0KLSAgICBPVVRQVVQoIktleWVkIGhhc2ggdGVzdCB1c2luZyBNRDUgLS0iKTsKLQotICAgIG1lbXNldChoYXNoYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotICAgIGhibGVuID0gaGFzaGJ1Zl9sZW5bbWxjb3VudF07Ci0gICAgcHJvcGVybGVuZ3RoID0gQllURVNJWkUoU05NUF9UUkFOU19BVVRITEVOX0hNQUNNRDUpOwotCi0gICAgcnZhbCA9Ci0gICAgICAgIHNjX2dlbmVyYXRlX2tleWVkX2hhc2godXNtSE1BQ01ENUF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGJ1ZiwgJmhibGVuKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2dlbmVyYXRlX2tleWVkX2hhc2goKS4iKTsKLQotICAgIGlmIChoYXNoYnVmX2xlblttbGNvdW50XSA+IHByb3Blcmxlbmd0aCkgewotICAgICAgICBpZiAoaGJsZW4gIT0gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJXcm9uZyBNRDUgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMSkiKTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIGlmIChoYmxlbiAhPSBoYXNoYnVmX2xlblttbGNvdW50XSkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJXcm9uZyBNRDUgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMikiKTsKLSAgICB9Ci0KLSAgICBydmFsID0KLSAgICAgICAgc2NfY2hlY2tfa2V5ZWRfaGFzaCh1c21ITUFDTUQ1QXV0aFByb3RvY29sLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTTV9MRU5HVEhfT0lEX1RSQU5TRk9STSwgQklHU0VDUkVULAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlY3JldF9sZW4sIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwgaGFzaGJ1ZiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYmxlbik7Ci0gICAgRkFJTEVEKHJ2YWwsICJzY19jaGVja19rZXllZF9oYXNoKCkuIik7Ci0KLSAgICBiaW5hcnlfdG9faGV4KGhhc2hidWYsIGhibGVuLCAmcyk7Ci0gICAgZnByaW50ZihzdGRvdXQsICJoYXNoIGJ1ZmZlciAobGVuPSVkLCByZXF1ZXN0PSVkKTogICAlc1xuIiwKLSAgICAgICAgICAgIGhibGVuLCBoYXNoYnVmX2xlblttbGNvdW50XSwgcyk7Ci0gICAgU05NUF9GUkVFKHMpOwotCi0gICAgU1VDQ0VTUygiS2V5ZWQgaGFzaCB0ZXN0IHVzaW5nIE1ENS4iKTsKLQotCi0KLSAgICBPVVRQVVQoIktleWVkIGhhc2ggdGVzdCB1c2luZyBTSEExIC0tIik7Ci0KLSAgICBtZW1zZXQoaGFzaGJ1ZiwgMCwgTE9DQUxfTUFYQlVGKTsKLSAgICBoYmxlbiA9IGhhc2hidWZfbGVuW21sY291bnRdOwotICAgIHByb3Blcmxlbmd0aCA9IEJZVEVTSVpFKFNOTVBfVFJBTlNfQVVUSExFTl9ITUFDU0hBMSk7Ci0KLSAgICBydmFsID0KLSAgICAgICAgc2NfZ2VuZXJhdGVfa2V5ZWRfaGFzaCh1c21ITUFDU0hBMUF1dGhQcm90b2NvbCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sIEJJR1NFQ1JFVCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWNyZXRfbGVuLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzaGJ1ZiwgJmhibGVuKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2dlbmVyYXRlX2tleWVkX2hhc2goKS4iKTsKLQotICAgIGlmIChoYXNoYnVmX2xlblttbGNvdW50XSA+IHByb3Blcmxlbmd0aCkgewotICAgICAgICBpZiAoaGJsZW4gIT0gcHJvcGVybGVuZ3RoKSB7Ci0gICAgICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsCi0gICAgICAgICAgICAgICAgICAgIldyb25nIFNIQTEgaGFzaCBsZW5ndGggcmV0dXJuZWQuICAoMSkiKTsKLSAgICAgICAgfQotCi0gICAgfSBlbHNlIGlmIChoYmxlbiAhPSBoYXNoYnVmX2xlblttbGNvdW50XSkgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJXcm9uZyBTSEExIGhhc2ggbGVuZ3RoIHJldHVybmVkLiAgKDIpIik7Ci0gICAgfQotCi0gICAgcnZhbCA9Ci0gICAgICAgIHNjX2NoZWNrX2tleWVkX2hhc2godXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLCBCSUdTRUNSRVQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VjcmV0X2xlbiwgQklHU1RSSU5HLCBiaWdzdHJpbmdfbGVuLCBoYXNoYnVmLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhibGVuKTsKLSAgICBGQUlMRUQocnZhbCwgInNjX2NoZWNrX2tleWVkX2hhc2goKS4iKTsKLQotICAgIGJpbmFyeV90b19oZXgoaGFzaGJ1ZiwgaGJsZW4sICZzKTsKLSAgICBmcHJpbnRmKHN0ZG91dCwgImhhc2ggYnVmZmVyIChsZW49JWQsIHJlcXVlc3Q9JWQpOiAgICVzXG4iLAotICAgICAgICAgICAgaGJsZW4sIGhhc2hidWZfbGVuW21sY291bnRdLCBzKTsKLSAgICBTTk1QX0ZSRUUocyk7Ci0KLSAgICBTVUNDRVNTKCJLZXllZCBoYXNoIHRlc3QgdXNpbmcgU0hBMS4iKTsKLQotCi0KLSAgICAvKgotICAgICAqIFJ1biB0aGUgYmFzaWMgaGFzaCB0ZXN0cyBidXQgdmFyeSB0aGUgc2l6ZSBNQUMgcmVxdWVzdHMuCi0gICAgICovCi0gICAgaWYgKGhhc2hidWZfbGVuWysrbWxjb3VudF0gIT0gMCkgewotICAgICAgICBnb3RvIHRlc3RfZG9rZXllZGhhc2hfYWdhaW47Ci0gICAgfQotCi0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2Rva2V5ZWRoYXNoKCkgKi8KLQotCi0KLQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi1vLSoqKioqKgotICogdGVzdF9kb2NyeXB0Ci0gKgotICogUmV0dXJuczoKLSAqCU51bWJlciBvZiBmYWlsdXJlcy4KLSAqLwotaW50Ci10ZXN0X2RvY3J5cHQodm9pZCkKLXsKLSAgICBpbnQgICAgICAgICAgICAgcnZhbCA9IFNOTVBFUlJfU1VDQ0VTUywKLSAgICAgICAgZmFpbGNvdW50ID0gMCwKLSAgICAgICAgYmlnc3RyaW5nX2xlbiA9IHN0cmxlbihCSUdTVFJJTkcpLAotICAgICAgICBzZWNyZXRfbGVuID0gQllURVNJWkUoU05NUF9UUkFOU19QUklWTEVOXzFERVMpLAotICAgICAgICBpdl9sZW4gPSBCWVRFU0laRShTTk1QX1RSQU5TX1BSSVZMRU5fMURFU19JVik7Ci0KLSAgICB1X2ludCAgICAgICAgICAgYnVmX2xlbiA9IExPQ0FMX01BWEJVRiwgY3J5cHRidWZfbGVuID0gTE9DQUxfTUFYQlVGOwotCi0gICAgY2hhciAgICAgICAgICAgIGJ1ZltMT0NBTF9NQVhCVUZdLAotICAgICAgICBjcnlwdGJ1ZltMT0NBTF9NQVhCVUZdLCBzZWNyZXRbTE9DQUxfTUFYQlVGXSwgaXZbTE9DQUxfTUFYQlVGXTsKLQotICAgIE9VVFBVVCgiVGVzdCAxREVTLUNCQyAtLSIpOwotCi0KLSAgICBtZW1zZXQoYnVmLCAwLCBMT0NBTF9NQVhCVUYpOwotCi0gICAgbWVtY3B5KHNlY3JldCwgQklHU0VDUkVULCBzZWNyZXRfbGVuKTsKLSAgICBtZW1jcHkoaXYsIEJLV0RTRUNSRVQsIGl2X2xlbik7Ci0KLQotICAgIHJ2YWwgPSBzY19lbmNyeXB0KHVzbURFU1ByaXZQcm90b2NvbCwgVVNNX0xFTkdUSF9PSURfVFJBTlNGT1JNLAotICAgICAgICAgICAgICAgICAgICAgIHNlY3JldCwgc2VjcmV0X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICBpdiwgaXZfbGVuLAotICAgICAgICAgICAgICAgICAgICAgIEJJR1NUUklORywgYmlnc3RyaW5nX2xlbiwgY3J5cHRidWYsICZjcnlwdGJ1Zl9sZW4pOwotICAgIEZBSUxFRChydmFsLCAic2NfZW5jcnlwdCgpLiIpOwotCi0gICAgcnZhbCA9IHNjX2RlY3J5cHQodXNtREVTUHJpdlByb3RvY29sLCBVU01fTEVOR1RIX09JRF9UUkFOU0ZPUk0sCi0gICAgICAgICAgICAgICAgICAgICAgc2VjcmV0LCBzZWNyZXRfbGVuLAotICAgICAgICAgICAgICAgICAgICAgIGl2LCBpdl9sZW4sIGNyeXB0YnVmLCBjcnlwdGJ1Zl9sZW4sIGJ1ZiwgJmJ1Zl9sZW4pOwotICAgIEZBSUxFRChydmFsLCAic2NfZGVjcnlwdCgpLiIpOwotCi0gICAgaWYgKGJ1Zl9sZW4gIT0gYmlnc3RyaW5nX2xlbikgewotICAgICAgICBGQUlMRUQoU05NUEVSUl9HRU5FUlIsICJEZWNyeXB0ZWQgYnVmZmVyIGlzIHRoZSB3cm9uZyBsZW5ndGguIik7Ci0gICAgfQotICAgIGlmIChtZW1jbXAoYnVmLCBCSUdTVFJJTkcsIGJpZ3N0cmluZ19sZW4pKSB7Ci0gICAgICAgIEZBSUxFRChTTk1QRVJSX0dFTkVSUiwKLSAgICAgICAgICAgICAgICJEZWNyeXB0ZWQgYnVmZmVyIGlzIG5vdCBlcXVhbCB0byBvcmlnaW5hbCBwbGFpbnRleHQuIik7Ci0gICAgfQotCi0KLSAgICBTVUNDRVNTKCJUZXN0IDFERVMtQ0JDIC0tIik7Ci0KLSAgICByZXR1cm4gZmFpbGNvdW50OwotCi19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGVuZCB0ZXN0X2RvY3J5cHQoKSAqLwpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0X2tleWNoYW5nZS5zaCBiL3Rlc3RpbmcvdGVzdF9rZXljaGFuZ2Uuc2gKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDkyNTlmZTUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0X2tleWNoYW5nZS5zaAorKysgL2Rldi9udWxsCkBAIC0xLDcxICswLDAgQEAKLSMhL2Jpbi9zaAotIwotIyB0ZXN0X2tleWNoYW5nZS5zaAotIwotIyBOdW1iZXIgb2YgU1VDQ0VTU2VzOiAgMwotIwotIwotIyBSdW4gdGVzdCBvZiBLZXlDaGFuZ2UgVEMgYWdhaW5zdCBkYXRhIGdpdmVuIGJ5IEJlcnQgV2lqbmVuIGluIGVtYWlsLgotIwotIyBOT1RFCVRoZSBzbm1wX2RlYnVnIGZsYWcgYml0IERFQlVHX1JBTkRPTVpFUk9TIGluIGZpbGUgc25tcGxpYi9kZWJ1Zy5oCi0jCU1VU1QgYmUgc2V0IGJlZm9yZSBjb21waWxpbmcgYW5kIGxpbmtpbmcgbGlic25tcC5hIHRvIHRlc3Rpbmcva3Rlc3QKLSMJZm9yIHRoaXMgdG8gc3VjY2VlZC4KLSMKLQotCi0uIGV2YWxfdG9vbHMuc2gKLQotVkVSSUZZIGt0ZXN0Ci0KLVNUQVJUVEVTVAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBEZWNsYXJhdGlvbnMuCi0jCi1EQVRBRklMRV9QUkVGSVg9ZGF0YS5rZXljaGFuZ2UtCi1EQVRBRklMRV9TVUZGSVhFUz0ibWQ1IHNoYTEgc2hhMS1kZXMiCi0KLW9sZGt1bD0KLW5ld2t1bD0KLWtleWNoYW5nZXN0cmluZz0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBUZXN0LgotIwotZm9yIGRmcyBpbiAkREFUQUZJTEVfU1VGRklYRVM7IGRvCi0JT1VUUFVUICI9PSBUZXN0IG9mIEtleUNoYW5nZSBUQyBjb3JyZWN0bmVzcyBmb3IgXCIkZGZzXCIuIgotCi0Jc2V0IHggYGF3ayAneyBwcmludCAkMSB9JyAke0RBVEFGSUxFX1BSRUZJWH0kZGZzYAotCXNoaWZ0Ci0KLQlbICQjIC1sdCAzIF0gJiYgRkFJTEVEIDEgXAotCSAgICAiV3JvbmcgbnVtYmVyIG9mIGxpbmVzICgkIykgaW4gZGF0YWZpbGUgXCIkREFUQUZJTEVfUFJFRklYfSRkZnNcIi4iCi0KLQlvbGRrZXk9JDEKLQluZXdrZXk9JDIKLQlrZXljaGFuZ2VzdHJpbmc9JDMKLQotCUNBUFRVUkUgImt0ZXN0IC1rIC1PICRvbGRrZXkgLU4gJG5ld2tleSIKLQlGQUlMRUQgJD8gImt0ZXN0IgotCi0JQ0hFQ0tFWEFDVCAka2V5Y2hhbmdlc3RyaW5nCi0JWyAkPyAtZXEgMSBdCi0JRkFJTEVEICQ/ICJQcm9wZXIgS2V5Q2hhbmdlIHN0cmluZyB3YXMgbm90IGdlbmVyYXRlZC4iCi0KLQotCVNVQ0NFU1MgIktleUNoYW5nZSBUQyBjb3JyZWN0bmVzcyB0ZXN0IGZvciBcIiRkZnNcIi4iCi1kb25lCi0KLQotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBDbGVhbnVwLCBleGl0LgotIwotU1RPUFRFU1QKLQotZXhpdCAkZmFpbGNvdW50Ci0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdF9rdWwuc2ggYi90ZXN0aW5nL3Rlc3Rfa3VsLnNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA3MGI3Yjc2Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdF9rdWwuc2gKKysrIC9kZXYvbnVsbApAQCAtMSw3OCArMCwwIEBACi0jIS9iaW4vc2gKLSMKLSMgdGVzdF9rdWwuc2gKLSMKLSMgTnVtYmVyIG9mIFNVQ0NFU1NlczoJMgotIwotIyBSdW4ga2V5IGxvY2FsaXphdGlvbiB0ZXN0cyBhbmQgY29tcGFyZSB3aXRoIGRhdGEgZ2l2ZW4gaW4gdGhlIFVTTQotIyBkb2N1bWVudGF0aW9uLgotIwotIyBGSVgJQ0hFQ0tFWEFDVCgpIHdpbGwgcHJvZHVjZSAyIGxpbmVzIHdoZW4gU0NBUEkgaXMgYnVpbHQgd2l0aAotIwlTTk1QX1RFU1RJTkdfQ09ERSwgYnV0IG9ubHkgMSBsaW5lIHdpdGhvdXQgdGhlICNkZWZpbmUuICBUaGUgc2NyaXB0Ci0jCWFzc3VtZXMgU05NUF9URVNUSU5HX0NPREUgaXMgZGVmaW5lZC4KLSMKLSMKLQotCi0uIGV2YWxfdG9vbHMuc2gKLQotVkVSSUZZIGt0ZXN0Ci0KLVNUQVJUVEVTVAotCi0KLSMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gLW8tIAotIyBEZWNsYXJhdGlvbnMuCi0jCi1EQVRBRklMRV9QUkVGSVg9ZGF0YS5rdWwtCi1EQVRBRklMRV9TVUZGSVhFUz0ibWQ1IHNoYTEiCi0KLVA9Ci1LdT0KLWVuZ2luZUlEPQota3VsPQotCi0KLQotIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAtby0gCi0jIFRlc3QuCi0jCi1mb3IgZGZzIGluICREQVRBRklMRV9TVUZGSVhFUzsgZG8KLQlPVVRQVVQgIj09IFRlc3Qgb2Yga2V5IGxvY2FsaXphdGlvbiBjb3JyZWN0bmVzcyB3aXRoIHRyYW5zZm9ybSBcIiRkZnNcIi4iCi0KLQlzZXQgeCBgYXdrICd7IHByaW50ICQxIH0nICR7REFUQUZJTEVfUFJFRklYfSRkZnNgCi0Jc2hpZnQKLQotCVsgJCMgLWx0IDQgXSAmJiBGQUlMRUQgMSBcCi0JICAgICJXcm9uZyBudW1iZXIgb2YgbGluZXMgKCQjKSBpbiBkYXRhZmlsZSBcIiREQVRBRklMRV9QUkVGSVh9JGRmc1wiLiIKLQotCVA9JDEKLQlLdT0kMgotCWVuZ2luZUlEPSQzCi0Ja3VsPSQ0Ci0KLQlDQVBUVVJFICJrdGVzdCAtbCAtUCAkUCAtRSAkZW5naW5lSUQgIgotCUZBSUxFRCAkPyAia3Rlc3QiCi0KLQlDSEVDS0VYQUNUICRLdQotCVsgJD8gLWVxIDIgXQotCUZBSUxFRCAkPyAiTWFzdGVyIGtleSB3YXMgbm90IGdlbmVyYXRlZC4iCi0KLQlDSEVDS0VYQUNUICRrdWwKLQlbICQ/IC1lcSAyIF0KLQlGQUlMRUQgJD8gIkxvY2FsaXplZCBrZXkgd2FzIG5vdCBnZW5lcmF0ZWQuIgotCi0KLQlTVUNDRVNTICJLZXkgbG9jYWxpemF0aW9uIGNvcnJlY3RuZXNzIHRlc3Qgd2l0aCB0cmFuc2Zvcm0gXCIkZGZzXCIuIgotZG9uZQotCi0KLQotCi0jLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIC1vLSAKLSMgQ2xlYW51cCwgZXhpdC4KLSMKLVNUT1BURVNUCi0KLWV4aXQgJGZhaWxjb3VudAotCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2M2NvbmZpZyBiL3Rlc3RpbmcvdGVzdHMvU3YzY29uZmlnCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0M2E3ZmIyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvU3YzY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsNDQgKzAsMCBAQAotIyEvYmluL3NoCi0KLVsgIngkU05NUF9TTVVYX1NPQ0tFVCIgPSAieCIgXSAmJiBTTk1QX1NNVVhfU09DS0VUPTEuMC4wLjAKLQotQ09ORklHQUdFTlQgW3NubXBdIHBlcnNpc3RlbnRkaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLUNPTkZJR0FHRU5UIHNtdXhzb2NrZXQgJFNOTVBfU01VWF9TT0NLRVQKLQotIyBYWFg6IGF1dG8tc3dpdGNoIHRvIGEgc3VwcG9ydGVkIHByb3RvY29sIGluc3RlYWQuCi1pZiB0ZXN0ICJ4JERFRkFVVEhUWVBFIiA9ICJ4IjsgdGhlbgotICAgIGlmIGdyZXAgJ14jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCi0JREVGQVVUSFRZUEU9IlNIQSIKLSAgICBlbHNlCi0JICAgIERFRkFVVEhUWVBFPSJNRDUiCi0gICAgZmkKLWZpCi0KLWlmIHRlc3QgIngkREVGUFJJVlRZUEUiID0gIngiOyB0aGVuCi0gICMgWFhYOiBIQVZFX0FFUyBkZXBlbmRzIG9uIGNwcCBsb2dpYywgc28gd2UgbmVlZCB0byB0ZXN0IGZvciBsb3dlci1sZXZlbCBzdHVmZgotICBpZiBncmVwICdeI2RlZmluZSBORVRTTk1QX1VTRV9PUEVOU1NMIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgotICAgIGlmIGdyZXAgJ14jZGVmaW5lIEhBVkVfT1BFTlNTTF9BRVNfSCAxJyAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaCA+IC9kZXYvbnVsbCA7IHRoZW4KLSAgICAgIGlmIGdyZXAgJ14jZGVmaW5lIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgotICAgICAgICBERUZQUklWVFlQRT0iQUVTIgotICAgICAgZWxzZQotICAgICAgICBERUZQUklWVFlQRT0iREVTIgotICAgICAgZmkKLSAgICBlbHNlCi0gICAgICBERUZQUklWVFlQRT0iREVTIgotICAgIGZpCi0gIGVsc2UKLSAgICBERUZQUklWVFlQRT0iIgotICBmaQotZmkKLQotQ09ORklHQUdFTlQgY3JlYXRlVXNlciBpbml0aWFsICRERUZBVVRIVFlQRSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoICRERUZQUklWVFlQRQotQ09ORklHQUdFTlQgY3JlYXRlVXNlciB0ZW1wbGF0ZSAkREVGQVVUSFRZUEUgdGVtcGxhdGVfdGVzdF9wYXNzX2F1dGggJERFRlBSSVZUWVBFCi1DT05GSUdBR0VOVCByd3VzZXIgaW5pdGlhbCBub2F1dGgKLUNPTkZJR0FHRU5UIHJ3dXNlciBuZXd0ZXN0dXNlcgotCi1OT0FVVEhURVNUQVJHUz0iLWwgbmFucCAtdSBpbml0aWFsIC12IDMiCi1BVVRIVEVTVEFSR1M9Ii1sIGFucCAtdSBpbml0aWFsIC12IDMgLWEgJERFRkFVVEhUWVBFIC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGgiCi1QUklWVEVTVEFSR1M9Ii1sIGFwIC11IGluaXRpYWwgLXYgMyAtYSAkREVGQVVUSFRZUEUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAteCAkREVGUFJJVlRZUEUgLVggaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCIKLQotQVVUSE5PUEFTU1RFU1RBUkdTPSItbCBhbnAgLXUgaW5pdGlhbCAtdiAzIC1hICRERUZBVVRIVFlQRSIKLVBSSVZOT1BBU1NURVNUQVJHUz0iLWwgYXAgLXUgaW5pdGlhbCAtdiAzIC1hICRERUZBVVRIVFlQRSAteCAkREVGUFJJVlRZUEUiCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2Jhc2UgYi90ZXN0aW5nL3Rlc3RzL1N2M3VzbWNvbmZpZ2Jhc2UKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYyNDE4OTQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9TdjN1c21jb25maWdiYXNlCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotIyEvYmluL3NoCi0jCi0jIFNOTVB2MyBiYXNlIGNvbmZpZwotIwotIyBJbnB1dCtPdXRwdXQgdmFyaWFibGVzOgotIyAgIERFRlNFQ1VSSVRZTEVWRUwgICAgICAgICBub0F1dGhOb1ByaXZ8YXV0aE5vUHJpdnxhdXRoUHJpdgotIyAgIERFRkFVVEhUWVBFICAgICAgICAgICAgICBNRDV8U0hBCi0jICAgREVGUFJJVlRZUEUgICAgICAgICAgICAgIERFU3xBRVMKLSMgICBURVNUTk9BVVRIVVNFUiAgICAgICAgICAgPG15dXNlcj4KLSMgICBURVNUKEFVVEh8UFJJVilVU0VSWzJdICAgPG15dXNlcj4KLSMgICBURVNUKEFVVEh8UFJJVilQQVNTWzJdICAgPG15cGFzcz4KLSMKLSMgSW5wdXQgdmFyaWFibGVzOgotIyAgIENSRUFURVVTRVJFTkdJTkVJRCAgICAgICA8ZW5naW5laWQ+Ci0jCi0jIE91dHB1dCB2YXJpYWJsZXM6Ci0jICAgQ1JFQVRFQVVUSFVTRVJbMl0KLSMgICBDUkVBVEVQUklWVVNFUlsyXQotIyAgIENSRUFURU5PQVVUSFVTRVIKLSMgICBURVNUTk9BVVRIQVJHUwotIyAgIFRFU1RBVVRIQVJHU1tOT1BBU1NdWzJdCi0jICAgVEVTVFBSSVZBUkdTW05PUEFTU11bMl0KLSMKLQotIyMgRGVmYXVsdHMKLVsgIngkREVGU0VDVVJJVFlMRVZFTCIgPSAieCIgXSAmJiBERUZTRUNVUklUWUxFVkVMPWF1dGhQcml2Ci0KLSMjIGF1dG8tcHJvYmUgYmVzdCBhdXRoIHR5cGUKLWlmIGdyZXAgJ14jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGwgOyB0aGVuCi0gIE1BWEFVVEhUWVBFPVNIQQotZWxzZQotICAjIE1ENSBpcyBhbHdheXMgYXZhaWxhYmxlIGludGVybmFsbHkKLSAgTUFYQVVUSFRZUEU9TUQ1Ci1maQotCi0jIyBhdXRvLXByb2JlIGJlc3QgcHJpdiB0eXBlCi0jIFhYWDogSEFWRV9BRVMgZGVwZW5kcyBvbiBjcHAgbG9naWMsIHNvIHdlIG5lZWQgdG8gdGVzdCBmb3IgbG93ZXItbGV2ZWwgc3R1ZmYKLWlmIGdyZXAgJ14jZGVmaW5lIE5FVFNOTVBfVVNFX09QRU5TU0wgMScgJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCAkU05NUF9VUERJUi9pbmNsdWRlL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggPiAvZGV2L251bGw7IHRoZW4KLSAgaWYgZ3JlcCAnXiNkZWZpbmUgSEFWRV9PUEVOU1NMX0FFU19IIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsICYmIFwKLSAgIGdyZXAgJ14jZGVmaW5lIEhBVkVfQUVTX0NGQjEyOF9FTkNSWVBUIDEnICRTTk1QX1VQRElSL2luY2x1ZGUvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmggJFNOTVBfVVBESVIvaW5jbHVkZS9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oID4gL2Rldi9udWxsIDsgdGhlbgotICAgIE1BWFBSSVZUWVBFPUFFUwotICBlbHNlCi0gICAgTUFYUFJJVlRZUEU9REVTCi0gIGZpCi1lbHNlCi0gICAgTUFYUFJJVlRZUEU9IiIKLWZpCi0KLUNSRUFURVVTRVJDTUQ9ImNyZWF0ZVVzZXIiCi1bICJ4JENSRUFURVVTRVJFTkdJTkVJRCIgIT0gIngiIF0gJiYgQ1JFQVRFVVNFUkNNRD0iJENSRUFURVVTRVJDTUQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCIKLQotIyMgYXV0aCBzZXR1cAotaWYgWyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4YXV0aFByaXYiIC1vICJ4JERFRlNFQ1VSSVRZTEVWRUwiID0gInhhdXRoTm9Qcml2IiBdOyB0aGVuCi0gIFsgIngkTUFYQVVUSFRZUEUiID0gIngiIF0gJiYgU0tJUAotICBbICJ4JERFRkFVVEhUWVBFIiA9ICJ4U0hBIiAtYSAieCRNQVhBVVRIVFlQRSIgIT0gInhTSEEiIF0gJiYgU0tJUAotICBbICJ4JERFRkFVVEhUWVBFIiA9ICJ4IiBdICYmIERFRkFVVEhUWVBFPSRNQVhBVVRIVFlQRQotICAjIHVzZXIvcGFzcyBzZXR1cCAoWFhYOiByYW5kb21pemUpCi0gIFsgIngkVEVTVEFVVEhVU0VSIiA9ICJ4IiBdICYmIFRFU1RBVVRIVVNFUj1pbml0aWFsX2F1dGgKLSAgWyAieCRURVNUQVVUSFVTRVIyIiA9ICJ4IiBdICYmIFRFU1RBVVRIVVNFUjI9dGVtcGxhdGVfYXV0aAotICBbICJ4JFRFU1RBVVRIUEFTUyIgPSAieCIgXSAmJiBURVNUQVVUSFBBU1M9aW5pdGlhbF90ZXN0X3Bhc3NfYXV0aAotICBbICJ4JFRFU1RBVVRIUEFTUzIiID0gIngiIF0gJiYgVEVTVEFVVEhQQVNTMj10ZW1wbGF0ZV90ZXN0X3Bhc3NfYXV0aAotICBDUkVBVEVBVVRIVVNFUj0iJENSRUFURVVTRVJDTUQgJFRFU1RBVVRIVVNFUiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUyIKLSAgQ1JFQVRFQVVUSFVTRVIyPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVEFVVEhVU0VSMiAkREVGQVVUSFRZUEUgJFRFU1RBVVRIUEFTUzIiCi0gICMgY29tbWFuZCBhcmdzCi0gIFRFU1RBVVRIQVJHU05PUEFTUz0iLXYgMyAtbCBhbnAgLXUgJFRFU1RBVVRIVVNFUiAtYSAkREVGQVVUSFRZUEUiCi0gIFRFU1RBVVRIQVJHU05PUEFTUzI9Ii12IDMgLWwgYW5wIC11ICRURVNUQVVUSFVTRVIyIC1hICRERUZBVVRIVFlQRSIKLSAgVEVTVEFVVEhBUkdTPSIkVEVTVEFVVEhBUkdTTk9QQVNTIC1BICRURVNUQVVUSFBBU1MiCi0gIFRFU1RBVVRIQVJHUzI9IiRURVNUQVVUSEFSR1NOT1BBU1MyIC1BICRURVNUQVVUSFBBU1MyIgotZmkKLQotIyMgcHJpdiBzZXR1cAotaWYgWyAieCRERUZTRUNVUklUWUxFVkVMIiA9ICJ4YXV0aFByaXYiIF07IHRoZW4KLSAgWyAieCRNQVhQUklWVFlQRSIgPSAieCIgXSAmJiBTS0lQCi0gIFsgIngkREVGUFJJVlRZUEUiID0gInhBRVMiIC1hICJ4JE1BWFBSSVZUWVBFIiAhPSAieEFFUyIgXSAmJiBTS0lQCi0gIFsgIngkREVGUFJJVlRZUEUiID0gIngiIF0gJiYgREVGUFJJVlRZUEU9JE1BWFBSSVZUWVBFCi0gICMgdXNlci9wYXNzIHNldHVwIChYWFg6IHJhbmRvbWl6ZSkKLSAgWyAieCRURVNUUFJJVlVTRVIiID0gIngiIF0gJiYgVEVTVFBSSVZVU0VSPWluaXRpYWxfcHJpdgotICBbICJ4JFRFU1RQUklWVVNFUjIiID0gIngiIF0gJiYgVEVTVFBSSVZVU0VSMj10ZW1wbGF0ZV9wcml2Ci0gIFsgIngkVEVTVFBSSVZQQVNTIiA9ICJ4IiBdICYmIFRFU1RQUklWUEFTUz1pbml0aWFsX3Rlc3RfcGFzc19wcml2Ci0gIFsgIngkVEVTVFBSSVZQQVNTMiIgPSAieCIgXSAmJiBURVNUUFJJVlBBU1MyPXRlbXBsYXRlX3Rlc3RfcGFzc19wcml2Ci0gIENSRUFURVBSSVZVU0VSPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVFBSSVZVU0VSICRERUZBVVRIVFlQRSAkVEVTVEFVVEhQQVNTICRERUZQUklWVFlQRSAkVEVTVFBSSVZQQVNTIgotICBDUkVBVEVQUklWVVNFUjI9IiRDUkVBVEVVU0VSQ01EICRURVNUUFJJVlVTRVIyICRERUZBVVRIVFlQRSAkVEVTVEFVVEhQQVNTMiAkREVGUFJJVlRZUEUgJFRFU1RQUklWUEFTUzIiCi0gICMgY29tbWFuZCBhcmdzCi0gIFRFU1RQUklWQVJHU05PUEFTUz0iLXYgMyAtbCBhcCAtdSAkVEVTVFBSSVZVU0VSIC1hICRERUZBVVRIVFlQRSAteCAkREVGUFJJVlRZUEUiCi0gIFRFU1RQUklWQVJHU05PUEFTUzI9Ii12IDMgLWwgYXAgLXUgJFRFU1RQUklWVVNFUjIgLWEgJERFRkFVVEhUWVBFIC14ICRERUZQUklWVFlQRSIKLSAgVEVTVFBSSVZBUkdTPSIkVEVTVFBSSVZBUkdTTk9QQVNTIC1BICRURVNUQVVUSFBBU1MgLVggJFRFU1RQUklWUEFTUyIKLSAgVEVTVFBSSVZBUkdTMj0iJFRFU1RQUklWQVJHU05PUEFTUzIgLUEgJFRFU1RBVVRIUEFTUzIgLVggJFRFU1RQUklWUEFTUzIiCi1maQotCi0jIyBub2F1dGggc2V0dXAKLVsgIngkVEVTVE5PQVVUSFVTRVIiID0gIngiIF0gJiYgVEVTVE5PQVVUSFVTRVI9aW5pdGlhbAotVEVTVE5PQVVUSEFSR1M9Ii12IDMgLWwgbmFucCAtdSAkVEVTVE5PQVVUSFVTRVIiCi1DUkVBVEVOT0FVVEhVU0VSPSIkQ1JFQVRFVVNFUkNNRCAkVEVTVE5PQVVUSFVTRVIiCi0KZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZyBiL3Rlc3RpbmcvdGVzdHMvU3YzdmFjbWNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggM2Q3YmY5NS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1N2M3ZhY21jb25maWcKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotIyBnZW5lcmljYWxseSBzZXQgdXAgdGhlIHVzZXIgImluaXRpYWwxIiBhbmQgImluaXRpYWwyIiAgZm9yIHNubXAgdjMKLSMgYWNjZXNzIHRvIHRoZSBhZ2VudC4KLQotIyBDb25maWd1cmF0aW9uOgotI2luaXRpYWwxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgZGVueSBvdGhlcnMKLSNpbml0aWFsMiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMSAKLQotIyBYWFg6IGRvIGF1dG9zZWxlY3Rpb24gb2Ygc3VwcG9ydGVkIGFsZ29yaXRobXMKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX0RFUwotCi1DT05GSUdBR0VOVCBbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgotCi1DT05GSUdBR0VOVCBjcmVhdGVVc2VyIGluaXRpYWwxIE1ENSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIERFUwotQ09ORklHQUdFTlQgY3JlYXRlVXNlciBpbml0aWFsMiBNRDUgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCBERVMKLQotCi1DT05GSUdBR0VOVCBncm91cCAgIHRlc3Rjb21tdW5pdHlncm91cDEgIHVzbSAgICAgaW5pdGlhbDEKLUNPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwMiAgdXNtICAgICBpbml0aWFsMgotCi1DT05GSUdBR0VOVCB2aWV3ICAgIHN5c3RlbTEgICAgIGluY2x1ZGVkIC4xLjMuNi4xLjIuMS4xLjEgCi1DT05GSUdBR0VOVCB2aWV3ICAgIHN5c3RlbTIgICAgIGluY2x1ZGVkIC4xCi1DT05GSUdBR0VOVCB2aWV3ICAgIHN5c3RlbTIgICAgIGV4Y2x1ZGVkIC4xLjMuNi4xLjIuMS4xLjEgCi1DT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAxICAiIiBhbnkgYXV0aCBleGFjdCBzeXN0ZW0xIG5vbmUgbm9uZScKLUNPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cDIgICIiIGFueSBhdXRoIGV4YWN0IHN5c3RlbTIgbm9uZSBub25lJwotCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnIGIvdGVzdGluZy90ZXN0cy9TdmFjbWNvbmZpZwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RjYzM1Yi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1N2YWNtY29uZmlnCisrKyAvZGV2L251bGwKQEAgLTEsMzggKzAsMCBAQAotIyEvYmluL3NoCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKLSMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAotIyBnZW5lcmljYWxseSBzZXQgdXAgdGhlIGNvbW11bml0eSAidGVzdGNvbW11bml0eTEgYW5kIHRlc3Rjb21tdW5pdHkyIiBmb3IgdmFyaW91cyBzbm1wCi0jIHZlcnNpb24gYWNjZXNzIHRvIHRoZSBhZ2VudC4KLQotaWYgWyAieCRzbm1wX3ZlcnNpb24iID0gIngiIF07IHRoZW4KLSAgc25tcF92ZXJzaW9uPSJhbnkiCi1maQotCi1DT05GSUdBR0VOVCBbc25tcF0gcGVyc2lzdGVudGRpciAkU05NUF9UTVBfUEVSU0lTVEVOVERJUgotCi1DT05GSUdBR0VOVCByb2NvbW11bml0eSB0ZXN0cm9jb21tdW5pdHkgMTI3LjAuMC4xIC4xLjMuNi4xLjIuMS4xLjUuMAotQ09ORklHQUdFTlQgcndjb21tdW5pdHkgdGVzdHJ3Y29tbXVuaXR5IDEyNy4wLjAuMSAuMS4zLjYuMS4yLjEuMS41LjAKLQotQ09ORklHQUdFTlQgY29tMnNlYyB0ZXN0Y29tbXVuaXR5c2VjMSAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MQotQ09ORklHQUdFTlQgY29tMnNlYyB0ZXN0Y29tbXVuaXR5c2VjMiAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MgotCi1pZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4gCi1DT05GSUdBR0VOVCBjb20yc2VjNiB0ZXN0Y29tbXVuaXR5c2VjMSAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5MQotQ09ORklHQUdFTlQgY29tMnNlYzYgdGVzdGNvbW11bml0eXNlYzIgIGRlZmF1bHQgdGVzdGNvbW11bml0eTIKLWZpCi0KLWlmIFsgIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ1bml4IiBdO3RoZW4gCi1DT05GSUdBR0VOVCBjb20yc2VjdW5peCB0ZXN0Y29tbXVuaXR5c2VjMSAgdGVzdGNvbW11bml0eTEKLUNPTkZJR0FHRU5UIGNvbTJzZWN1bml4IHRlc3Rjb21tdW5pdHlzZWMyICB0ZXN0Y29tbXVuaXR5MgotZmkKLQotQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAxICAkc25tcF92ZXJzaW9uICAgICB0ZXN0Y29tbXVuaXR5c2VjMQotQ09ORklHQUdFTlQgZ3JvdXAgICB0ZXN0Y29tbXVuaXR5Z3JvdXAyICAkc25tcF92ZXJzaW9uICAgICB0ZXN0Y29tbXVuaXR5c2VjMgotCi1DT05GSUdBR0VOVCB2aWV3ICAgIHN5c3RlbTEgICAgIGluY2x1ZGVkIC4xLjMuNi4xLjIuMS4xLjEgCi1DT05GSUdBR0VOVCB2aWV3ICAgIHN5c3RlbTIgICAgIGluY2x1ZGVkIC4xCi1DT05GSUdBR0VOVCB2aWV3ICAgIHN5c3RlbTIgICAgIGV4Y2x1ZGVkIC4xLjMuNi4xLjIuMS4xLjEgCi1DT05GSUdBR0VOVCAnYWNjZXNzICB0ZXN0Y29tbXVuaXR5Z3JvdXAxICAiIiBhbnkgbm9hdXRoIGV4YWN0IHN5c3RlbTEgbm9uZSBub25lJwotQ09ORklHQUdFTlQgJ2FjY2VzcyAgdGVzdGNvbW11bml0eWdyb3VwMiAgIiIgYW55IG5vYXV0aCBleGFjdCBzeXN0ZW0yIG5vbmUgbm9uZScKLQpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9TdmFueWNvbmZpZyBiL3Rlc3RpbmcvdGVzdHMvU3Zhbnljb25maWcKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGFkNGQzYjUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9TdmFueWNvbmZpZworKysgL2Rldi9udWxsCkBAIC0xLDI2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jIGdlbmVyaWNhbGx5IHNldCB1cCB0aGUgY29tbXVuaXR5ICJ0ZXN0Y29tbXVuaXR5IiBmb3IgdmFyaW91cyBzbm1wCi0jIHZlcnNpb24gYWNjZXNzIHRvIHRoZSBhZ2VudC4KLQotaWYgWyAieCRzbm1wX3ZlcnNpb24iID0gIngiIF07IHRoZW4KLSAgc25tcF92ZXJzaW9uPSJhbnkiCi1maQotCi1bICJ4JFNOTVBfU01VWF9TT0NLRVQiID0gIngiIF0gJiYgU05NUF9TTVVYX1NPQ0tFVD0xLjAuMC4wCi0KLUNPTkZJR0FHRU5UIFtzbm1wXSBwZXJzaXN0ZW50ZGlyICRTTk1QX1RNUF9QRVJTSVNURU5URElSCi1DT05GSUdBR0VOVCBzbXV4c29ja2V0ICRTTk1QX1NNVVhfU09DS0VUCi0KLUNPTkZJR0FHRU5UIGNvbTJzZWMgdGVzdGNvbW11bml0eXNlYyAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5Ci1pZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidWRwNiIgLW8gIiRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ0Y3A2IiBdO3RoZW4gCi0JQ09ORklHQUdFTlQgY29tMnNlYzYgdGVzdGNvbW11bml0eXNlYyAgZGVmYXVsdCB0ZXN0Y29tbXVuaXR5Ci1maQotCi1pZiBbICIkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAidW5peCIgXTt0aGVuIAotCUNPTkZJR0FHRU5UIGNvbTJzZWN1bml4IHRlc3Rjb21tdW5pdHlzZWMgIHRlc3Rjb21tdW5pdHkKLWZpCi0KLUNPTkZJR0FHRU5UIGdyb3VwICAgdGVzdGNvbW11bml0eWdyb3VwICAkc25tcF92ZXJzaW9uICAgICB0ZXN0Y29tbXVuaXR5c2VjCi1DT05GSUdBR0VOVCB2aWV3ICAgIGFsbCAgICAgaW5jbHVkZWQgLjEgODAKLUNPTkZJR0FHRU5UICdhY2Nlc3MgIHRlc3Rjb21tdW5pdHlncm91cCAgIiIgYW55IG5vYXV0aCBleGFjdCBhbGwgbm9uZSBub25lJwpkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0IGIvdGVzdGluZy90ZXN0cy9UMDAxc25tcHYxZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyMmNiMDYwLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAwMXNubXB2MWdldAorKysgL2Rldi9udWxsCkBAIC0xLDM3ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MSBzdXBwb3J0Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2MWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMiCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMSIKLQotQ0hFQ0tPUkRJRSAiRXJyb3IgaW4gcGFja2V0IgotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyBub3RhdmFsaWRjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotQ0hFQ0tPUkRJRSAiVGltZW91dCIKLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0IGIvdGVzdGluZy90ZXN0cy9UMDE0c25tcHYyY2dldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjcxZjk3OC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMTRzbm1wdjJjZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyYyBnZXQgb2Ygc3lzdGVtLnN5c1VwVGltZS4wCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YyY2NvbmZpZwotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMTVzbm1wdjJjZ2V0bmV4dCBiL3Rlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YzNmZGY2Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxNXNubXB2MmNnZXRuZXh0CisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyYyBnZXRuZXh0IG9mIHN5c3RlbS5zeXNVcFRpbWUKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQgYi90ZXN0aW5nL3Rlc3RzL1QwMTYwc25tcHYyY2J1bGtnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IGVjMmM0MjcuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDE2MHNubXB2MmNidWxrZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsNDAgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYyYyBidWxrZ2V0IG9mIHN5c3RlbSBjb21wb25lbnRzCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGJ1bGtnZXQgJFNOTVBfRkxBR1MgLXYyYyAtT24gLUNuMSAtQ3IyIC1jIHRlc3Rjb21tdW5pdHkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS40IC4xLjMuNi4xLjIuMS4xIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IFNUUklORzoiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4yLjAgPSBPSUQ6IgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wIgotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS41LjAiCi1FWFBFQ1RSRVNVTFQgMAotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0xCi0gICAgRklOSVNIRUQKLWZpCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMTZzbm1wdjJjZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0YmMyNDEyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxNnNubXB2MmNnZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyEvYmluL3NoCi0KLSMKLSMgdGVzdCBzbm1wdjJjIGdldCBzdXBwb3J0IGJ5IHJlYWRpbmcgYSB2YXJpYWJsZQotIwotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIGZvciBmYWlsdXJlIG9mIFNOTVB2MmMgZ2V0IHdpdGggd3JvbmcgY29tbXVuaXR5Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYyQyBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIG5vdGF2YWxpZGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICJUaW1lb3V0IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMDE3c25tcHYyY3RvdjFnZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4YTk3OTQyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxN3NubXB2MmN0b3YxZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDMwICswLDAgQEAKLSMhL2Jpbi9zaAotCi0jCi0jIHRlc3Qgc25tcHYyYyBnZXQgc3VwcG9ydCBieSByZWFkaW5nIGEgdmFyaWFibGUKLSMKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjJjIGdldCBhZ2FpbnN0IFNOTVB2MSBhZ2VudAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyBub3RhdmFsaWRjb21tdW5pdHkgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiVGltZW91dCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDAxOHNubXB2MXRvdjJjZ2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjM2Y2Q0ZC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMThzbm1wdjF0b3YyY2dldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwyNiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBmb3IgZmFpbHVyZSBvZiBTTk1QdjEgZ2V0IGFnYWluc3QgU05NUHYyYyBhZ2VudAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgbm90YXZhbGlkY29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiVGltZW91dCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2ggYi90ZXN0aW5nL3Rlc3RzL1QwMTlzbm1wdjJjbm9zdWNoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlNjlhYjlhLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAxOXNubXB2MmNub3N1Y2gKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjJjIGdldCBvZiBzeXN0ZW0uc3lzVXBUaW1lLjEKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjJDIGNvbmZpZ3VyYXRpb246IHRlc3Rjb211bm5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMSIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjEgPSBObyBTdWNoIEluc3RhbmNlIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0IGIvdGVzdGluZy90ZXN0cy9UMDIwc25tcHYzZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1OGM2Y2UzLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyMHNubXB2M2dldAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgbm9BdXRoTm9Qcml2IG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgY29uZmlndXJlIHRoZSBhZ2VudCB0byBhY2NlcHQgdXNlciBpbml0aWFsIHdpdGggbm9BdXRoTm9Qcml2Ci0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJE5PQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0IGIvdGVzdGluZy90ZXN0cy9UMDIxc25tcHYzZ2V0bmV4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMmI5ZjY0Ni4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjFzbm1wdjNnZXRuZXh0CisrKyAvZGV2L251bGwKQEAgLTEsMjQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldG5leHQgdXNpbmcgaW5pdGlhbCBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIGNvbmZpZ3VyZSB0aGUgYWdlbnQgdG8gYWNjZXB0IHVzZXIgaW5pdGlhbCB3aXRoIG5vQXV0aE5vUHJpdgotLiAuL1N2M2NvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXRuZXh0IC1PbiAkU05NUF9GTEFHUyAkTk9BVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXN0ZW0uc3lzVXBUaW1lIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjIwc25tcHYzYnVsa2dldCBiL3Rlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA4YThlY2I3Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAyMjBzbm1wdjNidWxrZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMzkgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGJ1bGtnZXQgb2Ygc3lzdGVtCi0KLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uOiAKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wYnVsa2dldCAkU05NUF9GTEFHUyAtT24gLUNuMSAtQ3IyICROT0FVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjQgLjEuMy42LjEuMi4xLjEiCi0KLVNUT1BBR0VOVAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjIuMCA9IE9JRDoiCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAiCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjUuMCIKLUVYUEVDVFJFU1VMVCAwCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENSBiL3Rlc3RpbmcvdGVzdHMvVDAyMnNubXB2M2dldE1ENQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWU3OTYwZC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwMjJzbm1wdjNnZXRNRDUKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgZ2V0IHVzaW5nIE1ENS9ub1ByaXYgb2YgLjEuMy42LjEuMi4xLjEuMy4wCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotREVGQVVUSFRZUEU9Ik1ENSIKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMgYi90ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVBRVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc3M2M5ODAuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1QUVTCisrKyAvZGV2L251bGwKQEAgLTEsMjkgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBNRDUvQUVTIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi1TS0lQSUZOT1QgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfTUQ1Ci0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotREVGQVVUSFRZUEU9TUQ1Ci1ERUZQUklWVFlQRT1BRVMKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMgYi90ZXN0aW5nL3Rlc3RzL1QwMjNzbm1wdjNnZXRNRDVERVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDA2ODlkZWEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDIzc25tcHYzZ2V0TUQ1REVTCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBNRDUvREVTIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX01ENQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLURFRkFVVEhUWVBFPU1ENQotREVGUFJJVlRZUEU9REVTCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJFBSSVZURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDI0c25tcHYzZ2V0U0hBMSBiL3Rlc3RpbmcvdGVzdHMvVDAyNHNubXB2M2dldFNIQTEKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDljMTQ3NGQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDI0c25tcHYzZ2V0U0hBMQorKysgL2Rldi9udWxsCkBAIC0xLDI1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBnZXQgdXNpbmcgU0hBL25vUHJpdiBvZiAuMS4zLjYuMS4yLjEuMS4zLjAKLQotU0tJUElGTk9UIE5FVFNOTVBfVVNFX09QRU5TU0wKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgotREVGQVVUSFRZUEU9IlNIQSIKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMgYi90ZXN0aW5nL3Rlc3RzL1QwMjVzbm1wdjNnZXRTSEFERVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk0ZmJhY2EuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDI1c25tcHYzZ2V0U0hBREVTCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBTSEEvREVTIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX0RFUwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciB0ZW1wbGF0ZVNIQSB1c2VyCi1ERUZBVVRIVFlQRT0iU0hBIgotREVGUFJJVlRZUEU9IkRFUyIKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAkUFJJVlRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMjZzbm1wdjNnZXRTSEFBRVMgYi90ZXN0aW5nL3Rlc3RzL1QwMjZzbm1wdjNnZXRTSEFBRVMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDc2NjUxM2EuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDI2c25tcHYzZ2V0U0hBQUVTCisrKyAvZGV2L251bGwKQEAgLTEsMjggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIGdldCB1c2luZyBTSEEvQUVTIG9mIC4xLjMuNi4xLjIuMS4xLjMuMAotCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi1TS0lQSUZOT1QgSEFWRV9BRVNfQ0ZCMTI4X0VOQ1JZUFQKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgdGVtcGxhdGVTSEEgdXNlcgotREVGUFJJVlRZUEU9IkFFUyIKLURFRkFVVEhUWVBFPSJTSEEiCi0uIC4vU3YzY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJFBSSVZURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDI4c25tcHYzZ2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDAyOHNubXB2M2dldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDk5MDk1ZTEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDI4c25tcHYzZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDIyICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIGZvciBmYWlsdXJlIG9mIFNOTVB2MyBnZXQgdXNpbmcgdW5rbm93biB1c2VyLgotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC1sIG5hbnAgLXUgdW5rbm93bnVzZXIgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAiVW5rbm93biB1c2VyIG5hbWUiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24gYi90ZXN0aW5nL3Rlc3RzL1QwMzBzbm1wdjN1c2VyY3JlYXRpb24KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGExY2I0NDMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDMwc25tcHYzdXNlcmNyZWF0aW9uCisrKyAvZGV2L251bGwKQEAgLTEsMTE4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyBhZ2VudCBVU00gdXNlciBtYW5hZ2VtZW50IHdpdGggc25tcHVzbQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi1TS0lQSUZOT1QgVVNJTkdfU05NUFYzX1VTTVVTRVJfTU9EVUxFCi1TS0lQSUZOT1QgTkVUU05NUF9VU0VfT1BFTlNTTAotU0tJUElGTk9UIE5FVFNOTVBfRU5BQkxFX1NDQVBJX0FVVEhQUklWCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFNOTVB2MyBVU00gYWdlbnQgY29uZmlndXJhdGlvbgotREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgotLiAuL1N2M3VzbWNvbmZpZ2FnZW50Ci0KLSMgdGVzdCB1c2VyCi1ORVdVU0VSPW5ld3Rlc3R1c2VyCi1ORVdBVVRIUEFTUz1uZXdhdXRocGFzcwotTkVXUFJJVlBBU1M9bmV3cHJpdnBhc3MKLU5FV0FVVEhQUklWUEFTUz1uZXdhdXRocHJpdnBhc3MKLQotIyBjb25maWd1cmUgYWdlbnQKLUNPTkZJR0FHRU5UIHJ3dXNlciAkTkVXVVNFUgotCi0jIFN0YXJ0IHRoZSBhZ2VudAotU1RBUlRBR0VOVAotCi0jIyB1c21Vc2VyVGFibGUgbWFuYWdlbWVudAotCi0jIyAxKSBjcmVhdGUsIGNsb25lLCB0ZXN0LCBkZWxldGUKLQotIyBjcmVhdGUgbmV3ICh2YW5pbGxhKSB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjcmVhdGUgJE5FV1VTRVIiCi1DSEVDS09SRElFICJVc2VyIHN1Y2Nlc3NmdWxseSBjcmVhdGVkIgotCi0jIGNsb25lCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBjbG9uZUZyb20gJE5FV1VTRVIgJFRFU1RQUklWVVNFUiIKLUNIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNsb25lZCIKLQotIyB0ZXN0IChhdXRoUHJpdikKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRURVNUQVVUSFBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRURVNUUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0jIGRlbGV0ZSAKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGRlbGV0ZSAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGRlbGV0ZWQiCi0KLSMjIDIpIGNyZWF0ZSB3LyBjbG9uZSwgcGFzc3dkIChhdXRoKSwgcGFzc3dkIChwcml2KSwgdGVzdCAoYXV0aFByaXYrYXV0aE5vUHJpdikKLQotIyBjcmVhdGUrY2xvbmUgdGVtcGxhdGUgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY3JlYXRlICRORVdVU0VSICRURVNUUFJJVlVTRVIyIgotQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCIKLQotIyBjaGFuZ2UgYXV0aCBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRURVNUUFJJVkFSR1MgLUNhICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRURVNUQVVUSFBBU1MyICRORVdBVVRIUEFTUyAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgY2hhbmdlIHByaXYgcGFzc3BocmFzZSBvZiBuZXcgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkVEVTVFBSSVZBUkdTIC1DeCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkVEVTVFBSSVZQQVNTMiAkTkVXUFJJVlBBU1MgJE5FV1VTRVIiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIHRlc3QgKGF1dGhOb1ByaXYpCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFucCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotIyB0ZXN0IChhdXRoUHJpdikKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV1BSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotIyMgMykgcGFzc3dkIChwcml2KSwgcGFzc3dkIChhdXRoK3ByaXYpLCB0ZXN0Ci0KLSMgY2hhbmdlIHByaXYgcGFzc3BocmFzZSAodG8gYXV0aCBwYXNzcGhyYXNlKSBieSB0aGUgdXNlciBoaW1zZWxmCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV1BSSVZQQVNTIC1DeCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkTkVXUFJJVlBBU1MgJE5FV0FVVEhQQVNTIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyBjaGFuZ2UgYm90aCBwYXNzcGhyYXNlcyBhdCBvbmNlCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV0FVVEhQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdBVVRIUEFTUyAkTkVXQVVUSFBSSVZQQVNTIgotQ0hFQ0tPUkRJRSAiU05NUHYzIEtleShzKSBzdWNjZXNzZnVsbHkgY2hhbmdlZCIKLQotIyB0ZXN0IChhdXRoUHJpdikKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUFJJVlBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi0jIyA1KSBwZXJzaXN0ZW5jeSBJOiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdGVzdAotCi1pZiBJU0RFRklORUQgSEFWRV9TSUdIVVA7IHRoZW4KLQotSFVQQUdFTlQKLURFTEFZCi0KLSMgdGVzdCAoYXV0aFByaXYpCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdiAzIC11ICRORVdVU0VSIC1sIGFwIC1hICRERUZBVVRIVFlQRSAtQSAkTkVXQVVUSFBSSVZQQVNTIC14ICRERUZQUklWVFlQRSAtWCAkTkVXQVVUSFBSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotIyMgNSkgcGVyc2lzdGVuY3kgSUk6IHN0b3AsIHN0YXJ0LCByZS10ZXN0Ci0KLVNUT1BBR0VOVAotREVMQVkKLSMgbWFrZSBzdXJlIGl0IHBpY2tzIHVwIHBlcnNpc3RlbnQgY29uZmlnIGFuZCB1c2VzIGEgbmV3IGxvZ2ZpbGUKLVNOTVBDT05GUEFUSD0iJHtTTk1QX1RNUERJUn0ke1NOTVBfRU5WX1NFUEFSQVRPUn0ke1NOTVBfVE1QX1BFUlNJU1RFTlRESVJ9IgotZXhwb3J0IFNOTVBDT05GUEFUSAotU05NUF9DT05GSUdfRklMRT0iZG9lcy1ub3QtZXhpc3QiCi1TTk1QX1NOTVBEX0xPR19GSUxFPSR7U05NUF9UTVBESVJ9L3NubXBkMi5sb2cKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IChhdXRoUHJpdikKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUFJJVlBBU1MgLXggJERFRlBSSVZUWVBFIC1YICRORVdBVVRIUFJJVlBBU1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBUaW1ldGlja3M6IgotCi1maQotCi0jIyBzdG9wIGFnZW50IGFuZCBmaW5pc2gKLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQgYi90ZXN0aW5nL3Rlc3RzL1QwMzVzbm1wdjN0cmFwZHVzZXJtZ210CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmYTI2ZGI5Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDAzNXNubXB2M3RyYXBkdXNlcm1nbXQKKysrIC9kZXYvbnVsbApAQCAtMSwxMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIHNubXB0cmFwZCBVU00gdXNlciBtYW5hZ2VtZW50IHdpdGggc25tcHVzbQotCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX01BU1RFUl9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfU1VCQUdFTlRfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfU05NUFYzX1VTTVVTRVJfTU9EVUxFCi1TS0lQSUYgICAgTkVUU05NUF9TTk1QVFJBUERfRElTQUJMRV9BR0VOVFgKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU0VUX1NVUFBPUlQKLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgY29uZmlndXJlIEFnZW50WCBzb2NrZXQKLWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07IHRoZW4KLSAgQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKLSAgVFJBUERfRkxBR1M9IiRUUkFQRF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKLWVsc2UKLSAgQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgotICBUUkFQRF9GTEFHUz0iJFRSQVBEX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCi1maQotCi0jIHN0YW5kYXJkIFNOTVB2MyBVU00gYWdlbnQgY29uZmlndXJhdGlvbgotREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgotLiAuL1N2M3VzbWNvbmZpZ2FnZW50Ci0KLSMgc2F2ZSBhZ2VudCBhY2Nlc3MKLUFHRU5UX1RFU1RBVVRIQVJHUz0kVEVTVEFVVEhBUkdTCi1BR0VOVF9URVNUUFJJVkFSR1M9JFRFU1RQUklWQVJHUwotCi0jIGNvbmZpZ3VyZSBhZ2VudCBhcyBBZ2VudFggbWFzdGVyCi1DT05GSUdBR0VOVCBtYXN0ZXIgYWdlbnR4Ci0KLSMgU3RhcnQgdGhlIG1hc3RlciBhZ2VudAotU1RBUlRBR0VOVAotCi0jIHN0YW5kYXJkIFNOTVB2MyBVU00gc25tcHRyYXBkIGNvbmZpZ3VyYXRpb24KLS4gLi9TdjN1c21jb25maWd0cmFwZAotCi0jIGNvbmZpZ3VyZSBzbm1wdHJhcGQKLU5FV0FVVEhLRVk9MHg3NDU4ZWFkN2EwYjVhNzUzZTIxYmZjYjg3ZjZjOTgwM2ViZWY2OGNmCi1ORVdQUklWS0VZPTB4OThlMjY5NmQxY2YzNGQ5MDRkZmNhZTc2YmYwMWM0NzMKLU5FV1VTRVI9bmV3dGVzdHVzZXIKLU5FV0FVVEhQQVNTPW5ld2F1dGhwYXNzCi1ORVdQUklWUEFTUz1uZXdwcml2cGFzcwotTkVXVVNFUjI9bmV3dGVzdHVzZXJfdmFuaWxsYQotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRORVdVU0VSIGF1dGgKLQotIyBzdGFydCBzbm1wdHJhcGQKLVNUQVJUVFJBUEQKLQotIyBkZWxheSB0byBsZXQgaXQgY29ubmVjdCBhbmQgcmVnaXN0ZXIgYWxsIE1JQnMKLURFTEFZCi0KLSMjIHZlcmlmeSBzbm1wdHJhcGQgdXNtVXNlclRhYmxlIG1hbmFnZW1lbnQKLQotU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1M9Ii1uIHNubXB0cmFwZCAtQ0UgJFRSQVBEX0VOR0lORUlEIgotCi0jIyAxKSBjcmVhdGUsIGNsb25lLCBwYXNzd2QgYXV0aCwgcGFzc3dkIHByaXYsIHRlc3QKLQotIyBjcmVhdGUgdmFuaWxsYSB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgY3JlYXRlICRORVdVU0VSMiIKLUNIRUNLT1JESUUgIlVzZXIgc3VjY2Vzc2Z1bGx5IGNyZWF0ZWQiCi0KLSMgY2xvbmUgdGVtcGxhdGUgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVEFVVEhBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIGNyZWF0ZSAkTkVXVVNFUiAkVEVTVFBSSVZVU0VSIgotQ0hFQ0tPUkRJRSAiVXNlciBzdWNjZXNzZnVsbHkgY3JlYXRlZCIKLQotIyBjaGFuZ2UgYXV0aCBwYXNzcGhyYXNlIG9mIG5ldyB1c2VyCi1DQVBUVVJFICJzbm1wdXNtICRTTk1QX0ZMQUdTICRBR0VOVF9URVNUQVVUSEFSR1MgJFNOTVBVU01fVFJBUERfQ09OVEVYVF9BUkdTIC1DYSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkVEVTVEFVVEhQQVNTICRORVdBVVRIUEFTUyAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgY2hhbmdlIHByaXYgcGFzc3BocmFzZSBvZiBuZXcgdXNlcgotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVFBSSVZBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ3ggJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBwYXNzd2QgJFRFU1RQUklWUEFTUyAkTkVXUFJJVlBBU1MgJE5FV1VTRVIiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIHRlc3QgKGFucCkKLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11ICRORVdVU0VSIC1sIGFucCAtYSAkREVGQVVUSFRZUEUgLUEgJE5FV0FVVEhQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV9hbnAiCi1ERUxBWQotQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYW5wIgotCi0jIHRlc3QgKGFwKQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC1BICRORVdBVVRIUEFTUyAteCAkREVGUFJJVlRZUEUgLVggJE5FV1BSSVZQQVNTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV9hcCIKLURFTEFZCi1DSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hcCIKLQotIyMgMikgY2hhbmdlIGxvY2FsaXplZCBhdXRoIGtleSwgdGVzdCwgY2hhbmdlIGxvY2FsaXplZCBwcml2IGtleSwgdGVzdAotCi0jIGNoYW5nZSBsb2NhbGl6ZWQgYXV0aCBrZXkKLUNBUFRVUkUgInNubXB1c20gJFNOTVBfRkxBR1MgJEFHRU5UX1RFU1RBVVRIQVJHUyAkU05NUFVTTV9UUkFQRF9DT05URVhUX0FSR1MgLUNhIC1DayAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHBhc3N3ZCAkTkVXQVVUSFBBU1MgJE5FV0FVVEhLRVkgJE5FV1VTRVIiCi1DSEVDS09SRElFICJTTk1QdjMgS2V5KHMpIHN1Y2Nlc3NmdWxseSBjaGFuZ2VkIgotCi0jIHRlc3QgKGFucCkKLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11ICRORVdVU0VSIC1sIGFucCAtYSAkREVGQVVUSFRZUEUgLTNrICRORVdBVVRIS0VZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV9hbnAyIgotREVMQVkKLUNIRUNLVFJBUERPUkRJRSAicmVjZWl2ZWRfaW5mb3JtX2FucDIiCi0KLSMgY2hhbmdlIGxvY2FsaXplZCBwcml2IGtleQotQ0FQVFVSRSAic25tcHVzbSAkU05NUF9GTEFHUyAkQUdFTlRfVEVTVFBSSVZBUkdTICRTTk1QVVNNX1RSQVBEX0NPTlRFWFRfQVJHUyAtQ3ggLUNrICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgcGFzc3dkICRORVdQUklWUEFTUyAkTkVXUFJJVktFWSAkTkVXVVNFUiIKLUNIRUNLT1JESUUgIlNOTVB2MyBLZXkocykgc3VjY2Vzc2Z1bGx5IGNoYW5nZWQiCi0KLSMgdGVzdCAoYXApCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSAkTkVXVVNFUiAtbCBhcCAtYSAkREVGQVVUSFRZUEUgLTNrICRORVdBVVRIS0VZIC14ICRERUZQUklWVFlQRSAtM0sgJE5FV1BSSVZLRVkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtX2FwMiIKLURFTEFZCi1DSEVDS1RSQVBET1JESUUgInJlY2VpdmVkX2luZm9ybV9hcDIiCi0KLSMjIDMpIHBlcnNpc3RlbmN5IEk6IHJlY29uZmlndXJlIChTSUdIVVApLCByZS10ZXN0Ci0KLSMgcmVjb25maWd1cmUgc25tcHRyYXBkCi1IVVBUUkFQRAotCi0jIHRlc3QgKGFwKQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgJE5FV1VTRVIgLWwgYXAgLWEgJERFRkFVVEhUWVBFIC0zayAkTkVXQVVUSEtFWSAteCAkREVGUFJJVlRZUEUgLTNLICRORVdQUklWS0VZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV9hcDMiCi1ERUxBWQotQ0hFQ0tUUkFQRE9SRElFICJyZWNlaXZlZF9pbmZvcm1fYXAzIgotCi0jIyBzdG9wIGRhZW1vbnMgYW5kIGZpbmlzaAotU1RPUFRSQVBECi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0gYi90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU3NjJkMTMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtCisrKyAvZGV2L251bGwKQEAgLTEsMjUgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1ERUZTRUNVUklUWUxFVkVMPW5vQXV0aE5vUHJpdgotCi1IRUFERVIgIlNOTVB2MyBpbmZvcm1zICgkREVGU0VDVVJJVFlMRVZFTCkgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMiCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgdGVzdHVzZXIgJERFRlNFQ1VSSVRZTEVWRUwKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMyAtdSB0ZXN0dXNlciAtbCBuYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgInJlY2VpdmVkX2luZm9ybV8kREVGU0VDVVJJVFlMRVZFTCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGggYi90ZXN0aW5nL3Rlc3RzL1QwNDlzbm1wdjNpbmZvcm1hdXRoCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhYjY3ZmY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybWF1dGgKKysrIC9kZXYvbnVsbApAQCAtMSwyNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLURFRlNFQ1VSSVRZTEVWRUw9YXV0aE5vUHJpdgotCi1IRUFERVIgIlNOTVB2MyBpbmZvcm1zICgkREVGU0VDVVJJVFlMRVZFTCkgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMiCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0uIC4vU3YzdXNtY29uZmlndHJhcGQKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVEFVVEhVU0VSICRERUZTRUNVUklUWUxFVkVMCi1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kICRURVNUQVVUSEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfaW5mb3JtXyRERUZTRUNVUklUWUxFVkVMIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdiBiL3Rlc3RpbmcvdGVzdHMvVDA0OXNubXB2M2luZm9ybXByaXYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiYmYyZjMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDQ5c25tcHYzaW5mb3JtcHJpdgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotREVGU0VDVVJJVFlMRVZFTD1hdXRoUHJpdgotCi1IRUFERVIgIlNOTVB2MyBpbmZvcm1zICgkREVGU0VDVVJJVFlMRVZFTCkgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMiCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLS4gLi9TdjN1c21jb25maWd0cmFwZAotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nICRURVNUUFJJVlVTRVIgJERFRlNFQ1VSSVRZTEVWRUwKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgJFRFU1RQUklWQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyByZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJyZWNlaXZlZF9pbmZvcm1fJERFRlNFQ1VSSVRZTEVWRUwiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwIGIvdGVzdGluZy90ZXN0cy9UMDUwc25tcHYzdHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggODE5ZDE1MS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTBzbm1wdjN0cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMzYgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYzIHRyYXBzIHJlY2VpdmVkIGFuZCBzZW50IGJ5IHRvb2xzCi0KLVNLSVBJRk5PVCBORVRTTk1QX1VTRV9PUEVOU1NMCi1TS0lQSUZOT1QgTkVUU05NUF9FTkFCTEVfU0NBUElfQVVUSFBSSVYKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNSRUFURVVTRVJFTkdJTkVJRD0weDgwMDAxZjg4ODAyYjNkMGUwNmJiZGY0MzIxCi0uIC4vU3YzdXNtY29uZmlndHJhcGQKLUNPTkZJR1RSQVBEIGF1dGh1c2VyIGxvZyAkVEVTVE5PQVVUSFVTRVIgbm9BdXRoTm9Qcml2Ci1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1RBVVRIVVNFUiBhdXRoTm9Qcml2Ci1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgJFRFU1RQUklWVVNFUiBhdXRoUHJpdgotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1kIC1lICRDUkVBVEVVU0VSRU5HSU5FSUQgJFRFU1ROT0FVVEhBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX3RyYXBfbmFucCIKLURFTEFZCi1DQVBUVVJFICJzbm1wdHJhcCAtZCAtZSAkQ1JFQVRFVVNFUkVOR0lORUlEICRURVNUQVVUSEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgcmVjZWl2ZWRfdHJhcF9hbnAiCi1ERUxBWQotQ0FQVFVSRSAic25tcHRyYXAgLWQgLWUgJENSRUFURVVTRVJFTkdJTkVJRCAkVEVTVFBSSVZBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIHJlY2VpdmVkX3RyYXBfYXAiCi1ERUxBWQotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfdHJhcF9uYW5wIgotQ0hFQ0tUUkFQRCAicmVjZWl2ZWRfdHJhcF9hbnAiCi1DSEVDS1RSQVBEICJyZWNlaXZlZF90cmFwX2FwIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDUxc25tcHYyY3RyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYWM0YTMxMi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTFzbm1wdjJjdHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MmMgdHJhcHMgcmVjZWl2ZWQgYW5kIHNlbnQgYnkgdG9vbHMKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyB0ZXN0Y29tbXVuaXR5Ci1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLWQgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiY29sZFN0YXJ0IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybSBiL3Rlc3RpbmcvdGVzdHMvVDA1MnNubXB2MmNpbmZvcm0KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDI0NjRkZDIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDUyc25tcHYyY2luZm9ybQorKysgL2Rldi9udWxsCkBAIC0xLDI0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MmMgaW5mb3JtcyByZWNlaXZlZCBhbmQgc2VudCBieSB0b29scwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHRlc3Rjb21tdW5pdHkKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiUmVjZWl2ZWQiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNTNhZ2VudHYxdHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5YjI1YzUyLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1M2FnZW50djF0cmFwCisrKyAvZGV2L251bGwKQEAgLTEsMzMgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc25tcHYxIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIEFQSQotCi1TS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbXVubml0eQotLiAuL1N2M2NvbmZpZwotQ09ORklHQUdFTlQgdHJhcHNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCi0KLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYwotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljLGFkZF90cmFwIgotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC43LjAgaSAxIgotCi1TVE9QQUdFTlQKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgIkVudGVycHJpc2UgU3BlY2lmaWMgVHJhcCAoOTkpIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwIGIvdGVzdGluZy90ZXN0cy9UMDU0YWdlbnR2MmN0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzYTg1ZGM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1NGFnZW50djJjdHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB2MmMgdHJhcHMgYXJlIHNlbnQgYnkgc25tcGQgQVBJCi0KLVNLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YzY29uZmlnCi1DT05GSUdBR0VOVCB0cmFwMnNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi1BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgotU1RBUlRBR0VOVAotCi0jREVMQVkKLUNBUFRVUkUgInNubXBzZXQgLU9uIC10IDMgLXIgMCAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC44LjAgaSAxIgotCi1TVE9QQUdFTlQKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgImxpZmUgdGhlIHVuaXZlcnNlIGFuZCBldmVyeXRoaW5nIgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU1YWdlbnR2MW1pbnRyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjU2MzZhNy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTVhZ2VudHYxbWludHJhcAorKysgL2Rldi9udWxsCkBAIC0xLDMzICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB2MSB0cmFwcyBhcmUgc2VudCBieSBzbm1wZCB3aXRob3V0IG5vdGlmaWNhdGlvbiBtaWIgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eQotLiAuL1N2M2NvbmZpZwotQ09ORklHQUdFTlQgdHJhcHNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi0jIGluaXRpYWxpemUgb25seSB0aGUgZXhhbXBsZSBtaWIsIGFuZCBub3QgdGhlIG5vdGlmaWNhdGlvbiBtaWIgc3R1ZmYKLUFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljLGFkZF90cmFwLG1pYl9pbml0LGNhbGxiYWNrIC1JIGV4YW1wbGUsdXNtVXNlcix1c21Db25mLHZhY21fdmFycyIKLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuNy4wIGkgMSIKLQotU1RPUEFHRU5UCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJFbnRlcnByaXNlIFNwZWNpZmljIFRyYXAgKDk5KSIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcCBiL3Rlc3RpbmcvdGVzdHMvVDA1NmFnZW50djJjbWludHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGMzMjEzZi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTZhZ2VudHYyY21pbnRyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdjJjIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkIHdpdGhvdXQgbm90aWZpY2F0aW9uIG1pYiBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YzY29uZmlnCi1DT05GSUdBR0VOVCB0cmFwMnNpbmsgJHtTTk1QX1RSQU5TUE9SVF9TUEVDfToke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9TTk1QVFJBUERfUE9SVH0gcHVibGljCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGxvZyBwdWJsaWMKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi0jIGluaXRpYWxpemUgb25seSB0aGUgZXhhbXBsZSBtaWIsIGFuZCBub3QgdGhlIG5vdGlmaWNhdGlvbiBtaWIgc3R1ZmYKLUFHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MgLURleGFtcGxlLGhlYWRlcl9nZW5lcmljLGFkZF90cmFwLG1pYl9pbml0LGNhbGxiYWNrIC1JIGV4YW1wbGUsdXNtVXNlcix1c21Db25mLHZhY21fdmFycyIKLVNUQVJUQUdFTlQKLQotI0RFTEFZCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAtdCAzIC1yIDAgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuOC4wIGkgMSIKLQotU1RPUEFHRU5UCi0KLVNUT1BUUkFQRAotCi1DSEVDS1RSQVBEICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QgYi90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAzMzY5ZmFmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdHJhcGQgYXV0aG9yaXphdGlvbiBmYWlsdXJlIG9mIG5vbiBhdXRob3JpemVkIHVzZXJzCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCi1DT05GSUdUUkFQRCBhdXRodXNlciBsb2cgdGVzdHVzZXIgbm9BdXRoTm9Qcml2Ci1DT05GSUdUUkFQRCBhZ2VudHhzb2NrZXQgL2Rldi9udWxsCi0KLVNUQVJUVFJBUEQKLQotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC12IDMgLXUgbm90dGVzdHVzZXIgLWwgbmFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBibGFoIgotCi1TVE9QVFJBUEQKLQotQ0hFQ0tUUkFQRCAiY29sZFN0YXJ0IgotRVhQRUNUUkVTVUxUIDAKLWlmIFsgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiICE9IDAgXSA7IHRoZW4KLSAgICByZXR1cm5fdmFsdWU9MQotICAgIEZJTklTSEVECi1maQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDIgYi90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYTVhMDJjZi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTd0cmFwZGF1dGh0ZXN0MgorKysgL2Rldi9udWxsCkBAIC0xLDI4ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHNubXB0cmFwZCBkaXNjYXJkcyBvZiB1bmF1dGhvcml6ZWQgbm90aWZpY2F0aW9uIHR5cGVzIAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotQ09ORklHVFJBUEQgY3JlYXRlVXNlciB0ZXN0dXNlcgotQ09ORklHVFJBUEQgYXV0aHVzZXIgbG9nIHRlc3R1c2VyIG5vQXV0aE5vUHJpdiAuMS4zLjYuMS42LjMuMS4xLjUuMgotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11IHRlc3R1c2VyIC1sIG5hbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgYmxhaCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgImNvbGRTdGFydCIKLUVYUEVDVFJFU1VMVCAwCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1N3RyYXBkYXV0aHRlc3QzIGIvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDJjY2I1Y2IuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDU3dHJhcGRhdXRodGVzdDMKKysrIC9kZXYvbnVsbApAQCAtMSwyOCArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBzbm1wdHJhcGQgZGlzY2FyZHMgb2YgaW5jb3JyZWN0IHZpZXcgdHlwZXMgCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdUUkFQRCBjcmVhdGVVc2VyIHRlc3R1c2VyCi1DT05GSUdUUkFQRCBhdXRodXNlciBleGVjdXRlIHRlc3R1c2VyIG5vQXV0aE5vUHJpdgotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLUNBUFRVUkUgInNubXB0cmFwIC1DaSAtdCAkU05NUF9TTEVFUCAtZCAtdiAzIC11IHRlc3R1c2VyIC1sIG5hbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAuMS4zLjYuMS42LjMuMS4xLjUuMSBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgYmxhaCIKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgImNvbGRTdGFydCIKLUVYUEVDVFJFU1VMVCAwCi1pZiBbICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiAhPSAwIF0gOyB0aGVuCi0gICAgcmV0dXJuX3ZhbHVlPTEKLSAgICBGSU5JU0hFRAotZmkKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAgYi90ZXN0aW5nL3Rlc3RzL1QwNThhZ2VudGF1dGh0cmFwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmUzYTdiLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA1OGFnZW50YXV0aHRyYXAKKysrIC9kZXYvbnVsbApAQCAtMSwzNiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBhdXRoZW50aWNhdGlvbiBmYWlsdXJlIHRyYXBzIGFyZSBzZW50IGJ5IHNubXBkCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjFjb25maWcKLSMgYWRkIGluIGEgdjEgdHJhcCBzaW5rCi1DT05GSUdBR0VOVCB0cmFwc2luayAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCBwdWJsaWMKLUNPTkZJR0FHRU5UIGF1dGh0cmFwZW5hYmxlIDEKLUNPTkZJR1RSQVBEIGF1dGhjb21tdW5pdHkgbG9nIHB1YmxpYwotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLVNUQVJUQUdFTlQKLQotIyBnaXZlIHRoZSBhZ2VudCBtb3JlIHRpbWUgdG8gc3RhcnQgdXAuICBXZSBvbmx5IHdhbnQgdG8gZmlyZSBvbmUKLSMgcmVxdWVzdCAocmV0cmllcyA9IDApIHRvIG1ha2Ugc3VyZSBvbmx5IG9uZSB0cmFwIGlzIHNlbnQuCi0jREVMQVkKLUNBUFRVUkUgInNubXBnZXQgLU9uIC1yIDAgLXQgNSAkU05NUF9GTEFHUyAtdiAxIC1jIHdyb25nY29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1TVE9QQUdFTlQKLQotU1RPUFRSQVBECi0KLUNIRUNLVFJBUEQgIkF1dGhlbnRpY2F0aW9uIEZhaWx1cmUgVHJhcCIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZSBiL3Rlc3RpbmcvdGVzdHMvVDA1OXRyYXBkdHJhcGhhbmRsZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMzY1NzQ5NC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNTl0cmFwZHRyYXBoYW5kbGUKKysrIC9kZXYvbnVsbApAQCAtMSw0OSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLVRSQVBIQU5ETEVfTE9HRklMRT0ke1NOTVBfVE1QRElSfS90cmFwaGFuZGxlLmxvZwotCi0jICJpbmxpbmUiIHRyYXAgaGFuZGxlcgotaWYgWyAieCQyIiA9ICJ4dHJhcGhhbmRsZSIgXTsgdGhlbgotICBjYXQgLSA+PiRUUkFQSEFORExFX0xPR0ZJTEUKLSAgZXhpdCAwCi1maQotCi1IRUFERVIgc25tcHRyYXBkIHRyYXBoYW5kbGU6IGxhdW5jaGluZyBleHRlcm5hbCBzaGVsbCBzY3JpcHQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLQotQ09ORklHVFJBUEQgW3NubXBdIHBlcnNpc3RlbnREaXIgJFNOTVBfVE1QX1BFUlNJU1RFTlRESVIKLUNPTkZJR1RSQVBEIFtzbm1wXSB0ZW1wRmlsZVBhdHRlcm4gL3RtcC9zbm1wZC10bXAtWFhYWFhYCi1DT05GSUdUUkFQRCBhdXRoY29tbXVuaXR5IGV4ZWN1dGUgJFRFU1RDT01NVU5JVFkKLUNPTkZJR1RSQVBEIGRvTm90TG9nVHJhcHMgdHJ1ZQotQ09ORklHVFJBUEQgdHJhcGhhbmRsZSBkZWZhdWx0ICQwICQxIHRyYXBoYW5kbGUKLUNPTkZJR1RSQVBEIGFnZW50eHNvY2tldCAvZGV2L251bGwKLQotU1RBUlRUUkFQRAotCi0jIyAxKSB0ZXN0IG5vdGlmaWNhdGlvbiBoYW5kbGVyCi0KLUNBUFRVUkUgInNubXB0cmFwIC1kIC1DaSAtdCAkU05NUF9TTEVFUCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QVFJBUERfUE9SVCAwIC4xLjMuNi4xLjYuMy4xLjEuNS4xIHN5c3RlbS5zeXNDb250YWN0LjAgcyBoYW5kbGVkX2luZm9ybV8kc25tcF92ZXJzaW9uIgotREVMQVkKLUNIRUNLT1JESUUgImhhbmRsZWRfaW5mb3JtXyRzbm1wX3ZlcnNpb24iICRUUkFQSEFORExFX0xPR0ZJTEUgCi0KLSMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdGVzdAotCi1IVVBUUkFQRAotQ0FQVFVSRSAic25tcHRyYXAgLWQgLUNpIC10ICRTTk1QX1NMRUVQIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgLjEuMy42LjEuNi4zLjEuMS41LjEgc3lzdGVtLnN5c0NvbnRhY3QuMCBzIGhhbmRsZWRfaW5mb3JtMl8kc25tcF92ZXJzaW9uIgotREVMQVkKLUNIRUNLT1JESUUgImhhbmRsZWRfaW5mb3JtMl8kc25tcF92ZXJzaW9uIiAkVFJBUEhBTkRMRV9MT0dGSUxFCi0KLSMjIHN0b3AKLVNUT1BUUkFQRAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsIGIvdGVzdGluZy90ZXN0cy9UMDYwdHJhcGRwZXJsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDc1NQppbmRleCA2M2E2ZjRjLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA2MHRyYXBkcGVybAorKysgL2Rldi9udWxsCkBAIC0xLDUwICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICdzbm1wdHJhcGQgZW1iZWRkZWQgcGVybCBzdXBwb3J0IChOZXRTTk1QOjpUcmFwUmVjZWl2ZXIpJwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBORVRTTk1QX0VNQkVEREVEX1BFUkwKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotVEVTVE9JRD0uMS4zLjYuMS42LjMuMS4xLjUuMQotVEVTVE9JRDI9LjEuMy42LjEuNi4zLjEuMS41LjIKLUVNQlBFUkxfTE9HRklMRT0ke1NOTVBfVE1QRElSfS9lbWJwZXJsLmxvZwotCi1lY2hvICJ1c2UgYmxpYiBxdygke1NOTVBfVVBESVJ9L3BlcmwpOyIgPiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmxfdHJhcGQucGwKLWVjaG8gInVzZSBOZXRTTk1QOjpUcmFwUmVjZWl2ZXI7IiA+PiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmxfdHJhcGQucGwKLQotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBleGVjdXRlICRURVNUQ09NTVVOSVRZCi1DT05GSUdUUkFQRCBwZXJsSW5pdEZpbGUgJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsX3RyYXBkLnBsCi1DT05GSUdUUkFQRCAncGVybCBzdWIgbXlfcmVjZWl2ZXIgeyBvcGVuIExPRywiPj4nJEVNQlBFUkxfTE9HRklMRSciOyBwcmludCBMT0cgImhhbmRsZWRfYnlfZW1icGVybCI7IGNsb3NlIExPRyB9OycKLUNPTkZJR1RSQVBEICdwZXJsIHN1YiBteV9yZWNlaXZlcjIgeyBvcGVuIExPRywiPj4nJEVNQlBFUkxfTE9HRklMRSciOyBwcmludCBMT0cgImhhbmRsZWRfYWdhaW5fYnlfZW1icGVybCI7IGNsb3NlIExPRyB9OycKLUNPTkZJR1RSQVBEICdwZXJsIE5ldFNOTVA6OlRyYXBSZWNlaXZlcjo6cmVnaXN0ZXIoIickVEVTVE9JRCciLCBcJm15X3JlY2VpdmVyKSB8fCB3YXJuICJyZWdpc3Rlcl9wZXJsX2hhbmRsZXJfZmFpbGVkIjsnCi1DT05GSUdUUkFQRCAncGVybCBOZXRTTk1QOjpUcmFwUmVjZWl2ZXI6OnJlZ2lzdGVyKCInJFRFU1RPSUQyJyIsIFwmbXlfcmVjZWl2ZXIyKSB8fCB3YXJuICJyZWdpc3Rlcl9zZWNvbmRfcGVybF9oYW5kbGVyX2ZhaWxlZCI7JwotQ09ORklHVFJBUEQgJ3BlcmwgcHJpbnQgU1RERVJSICJyZWdpc3RlcmVkX3BlcmxfaGFuZGxlcl9vayI7JwotQ09ORklHVFJBUEQgYWdlbnR4c29ja2V0IC9kZXYvbnVsbAotCi1TVEFSVFRSQVBECi0KLSMjIDEpIHRyaWdnZXIgZW1iZWRkZWQgcGVybCBub3RpZmljYXRpb24gaGFuZGxlcgotCi1DQVBUVVJFICJzbm1wdHJhcCAtQ2kgLXQgJFNOTVBfU0xFRVAgLWQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUFRSQVBEX1BPUlQgMCAkVEVTVE9JRCBzeXN0ZW0uc3lzQ29udGFjdC4wIHMgaGFuZGxlZF90cmFwXyRzbm1wX3ZlcnNpb24iCi0KLSMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSAoU0lHSFVQKSwgcmUtdHJpZ2dlcgotCi1IVVBUUkFQRAotQ0FQVFVSRSAic25tcHRyYXAgLUNpIC10ICRTTk1QX1NMRUVQIC1kIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBUUkFQRF9QT1JUIDAgJFRFU1RPSUQyIHN5c3RlbS5zeXNDb250YWN0LjAgcyBoYW5kbGVkX3RyYXAyXyRzbm1wX3ZlcnNpb24iCi0KLSMjIHN0b3AKLVNUT1BUUkFQRAotCi0KLUNIRUNLT1JESUUgImhhbmRsZWRfYnlfZW1icGVybCIgICAgICAgJEVNQlBFUkxfTE9HRklMRQotQ0hFQ0tPUkRJRSAiaGFuZGxlZF9hZ2Fpbl9ieV9lbWJwZXJsIiAkRU1CUEVSTF9MT0dGSUxFCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwgYi90ZXN0aW5nL3Rlc3RzL1QwNjFhZ2VudHBlcmwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDI3ZTViMzEuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDYxYWdlbnRwZXJsCisrKyAvZGV2L251bGwKQEAgLTEsOTQgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgJ3NubXBkIGVtYmVkZGVkIHBlcmwgc3VwcG9ydCAodXNpbmcgTmV0U05NUDo6YWdlbnQpJwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBORVRTTk1QX0VNQkVEREVEX1BFUkwKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotLiAuL1N2MmNjb25maWcKLQotVEVTVE9JRD0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMS4wCi1URVNUT0lEMj0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMi4wCi1FTUJQRVJMX0FHRU5UPSR7U05NUF9UTVBESVJ9L2hlbGxvLnBsCi1jYXQgPiRFTUJQRVJMX0FHRU5UIDw8RU5ECi0jIS91c3IvYmluL2VudiBwZXJsCi0jIG1pbmltYWwgZW1iZWRkZWQgcGVybCBhZ2VudAotCi1teSBcJHJlZ2F0ID0gJy4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OSc7ICMgbmV0U25tcFBsYXlQZW4KLW15IFwkbXlvaWQgPSBcJHJlZ2F0IC4gIi4xLjAiOyAjIHRoZSAiaGVsbG8gd29ybGQiIE9JRAotbXkgXCRteW9pZDIgPSBcJHJlZ2F0IC4gIi4yLjAiOyAjIHRoZSAiaGVsbG8gYWdhaW4gd29ybGQiIE9JRAotCi11c2UgTmV0U05NUDo6T0lEIHF3KDphbGwpOwotdXNlIE5ldFNOTVA6OmFnZW50IHF3KDphbGwpOwotdXNlIE5ldFNOTVA6OkFTTiBxdyg6YWxsKTsKLXVzZSBTTk1QOwotCi1teSBcJHJlZ29pZCA9IG5ldyBOZXRTTk1QOjpPSUQoXCRyZWdhdCk7Ci1cJGFnZW50LT5yZWdpc3RlcigiaGVsbG8iLCBcJHJlZ29pZCwgXCZteV9zbm1wX2hhbmRsZXIpOwotCi1zdWIgbXlfc25tcF9oYW5kbGVyIHsKLSAgbXkgKFwkaGFuZGxlciwgXCRyZWdpc3RyYXRpb25faW5mbywgXCRyZXF1ZXN0X2luZm8sIFwkcmVxdWVzdHMpID0gQF87Ci0gIGZvcihteSBcJHJlcXVlc3QgPSBcJHJlcXVlc3RzOyBcJHJlcXVlc3Q7IFwkcmVxdWVzdCA9IFwkcmVxdWVzdC0+bmV4dCgpKSB7Ci0gICAgaWYgKFwkcmVxdWVzdF9pbmZvLT5nZXRNb2RlKCkgPT0gTU9ERV9HRVQpIHsKLSAgICAgIGlmIChcJHJlcXVlc3QtPmdldE9JRCgpID09IG5ldyBOZXRTTk1QOjpPSUQoXCRteW9pZCkpIHsKLSAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gd29ybGQiKTsKLSAgICAgICAgbGFzdDsKLSAgICAgIH0gZWxzaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkMikpIHsKLSAgICAgICAgXCRyZXF1ZXN0LT5zZXRWYWx1ZShBU05fT0NURVRfU1RSLCAiaGVsbG8gYWdhaW4gd29ybGQiKTsKLSAgICAgICAgbGFzdDsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLX0KLUVORAotCi1lY2hvICJ1c2UgYmxpYiBxdygke1NOTVBfVVBESVJ9L3BlcmwpOyIgPiAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKLWVjaG8gJ3VzZSBOZXRTTk1QOjphZ2VudDsnID4+ICR7U05NUF9UTVBESVJ9L3NubXBfcGVybC5wbAotZWNobyAnJGFnZW50ID0gbmV3IE5ldFNOTVA6OmFnZW50KCciJ2RvbnRfaW5pdF9hZ2VudCcgPT4gMSwgJ2RvbnRfaW5pdF9saWInID0+IDEpOyIgPj4gJHtTTk1QX1RNUERJUn0vc25tcF9wZXJsLnBsCi0KLUNPTkZJR0FHRU5UIHBlcmxJbml0RmlsZSAke1NOTVBfVE1QRElSfS9zbm1wX3BlcmwucGwKLUNPTkZJR0FHRU5UICJwZXJsIGRvICckRU1CUEVSTF9BR0VOVCc7IgotQ09ORklHQUdFTlQgJ3BlcmwgcHJpbnQgU1RERVJSICJyZWdpc3RlcmVkX3BlcmxfYWdlbnRfb2siOycKLQotIyBtYWtlIHN1cmUgdGhhdCBOZXRTTk1QOjphZ2VudCdzIGFnZW50LnNvIGNhbiBsb2FkICh1bmluc3RhbGxlZCkgbGlibmV0c25tcCouc28KLV9sZF9saWJfcGF0aD0iJHtTTk1QX1VQRElSfS9zbm1wbGliLy5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvLmxpYnM6JHtTTk1QX1VQRElSfS9hZ2VudC9oZWxwZXJzLy5saWJzIgotaWYgWyAieCRMRF9MSUJSQVJZX1BBVEgiICE9ICJ4IiBdOyB0aGVuCi0gIExEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7TERfTElCUkFSWV9QQVRIfSIKLWVsc2UKLSAgTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH0iCi1maSAKLWlmIFsgIngkRFlMRF9MSUJSQVJZX1BBVEgiICE9ICJ4IiBdOyB0aGVuCi0gIERZTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH06JHtEWUxEX0xJQlJBUllfUEFUSH0iCi1lbHNlCi0gIERZTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH0iCi1maSAKLWlmIFsgIngkU0hMSUJfUEFUSCIgIT0gIngiIF07IHRoZW4KLSAgU0hMSUJfUEFUSD0iJHtfbGRfbGliX3BhdGh9OiR7U0hMSUJfUEFUSH0iCi1lbHNlCi0gIFNITElCX1BBVEg9IiR7X2xkX2xpYl9wYXRofSIKLWZpIAotZXhwb3J0IExEX0xJQlJBUllfUEFUSCBEWUxEX0xJQlJBUllfUEFUSCBTSExJQl9QQVRICi0KLVNUQVJUQUdFTlQKLQotIyMgMSkgU05NUCBHRVQgYWdhaW5zdCBlbWJlZGRlZCBwZXJsIG1pYiBtb2R1bGUKLUNBUFRVUkUgInNubXBnZXQgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAkVEVTVE9JRCIKLUNIRUNLICJoZWxsbyB3b3JsZCIKLQotIyMgMikgcGVyc2lzdGVuY3k6IHJlY29uZmlndXJlIChIVVApLCByZS10ZXN0Ci1IVVBBR0VOVAotQ0FQVFVSRSAic25tcGdldCAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRURVNUT0lEMiIKLUNIRUNLICJoZWxsbyBhZ2FpbiB3b3JsZCIKLQotIyMgc3RvcAotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNjVhZ2VudGV4dGVuZCBiL3Rlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MjdmNThmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA2NWFnZW50ZXh0ZW5kCisrKyAvZGV2L251bGwKQEAgLTEsNDggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgImV4dGVuZGluZyBhZ2VudCBmdW5jdGlvbmFsaXR5IHdpdGggZXh0ZW5kIgotCi1bICJ4JE9TVFlQRSIgPSB4bXN5cyAtYSAieCRNU1lTX1NIIiA9IHggXSAmJiBTS0lQICJcJE1TWVNfU0ggaGFzIG5vdCBiZWVuIHNldCIKLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGTk9UIFVTSU5HX0FHRU5UX0VYVEVORF9NT0RVTEUKLQotIyBtYWtlIHN1cmUgc25tcGdldCBjYW4gYmUgZXhlY3V0ZWQKLVNOTVBHRVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wZ2V0IgotWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUAotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi1DT05GSUdBR0VOVCBleHRlbmQgaGVsbG8gL3Vzci9iaW4vZW52IGVjaG8gaGVsbG9fd29ybGQKLQotU1RBUlRBR0VOVAotCi0jIE5FVC1TTk1QLUVYVEVORC1NSUI6Om5zRXh0ZW5kT3V0cHV0MUxpbmUuImhlbGxvIiA9IFNUUklORzogImhlbGxvX3dvcmxkIgotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAxLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS4xLlwiaGVsbG9cIiIKLUNIRUNLT1JESUUgImhlbGxvX3dvcmxkIgotCi0jTkVULVNOTVAtRVhURU5ELU1JQjo6bnNFeHRlbmRPdXRwdXRGdWxsLiJoZWxsbyIgPSBTVFJJTkc6ICJoZWxsb193b3JsZCIKLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuNC4xLjgwNzIuMS4zLjIuMy4xLjIuXCJoZWxsb1wiIgotQ0hFQ0tPUkRJRSAiaGVsbG9fd29ybGQiCi0KLSNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dExpbmUuImhlbGxvIi4xID0gU1RSSU5HOiAiaGVsbG9fd29ybGQiCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjQuMS4yLlwiaGVsbG9cIi4xIgotQ0hFQ0tPUkRJRSAiaGVsbG9fd29ybGQiCi0KLSNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZE91dE51bUxpbmVzLiJoZWxsbyIgPSBJTlRFR0VSOiAxCi1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjQuMS44MDcyLjEuMy4yLjMuMS4zLlwiaGVsbG9cIiIKLUNIRUNLT1JESUUgIklOVEVHRVI6IDEiCi0KLSNORVQtU05NUC1FWFRFTkQtTUlCOjpuc0V4dGVuZFJlc3VsdC4iaGVsbG8iID0gSU5URUdFUjogMAotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS40LjEuODA3Mi4xLjMuMi4zLjEuNC5cImhlbGxvXCIiCi1DSEVDS09SRElFICJJTlRFR0VSOiAwIgotCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNjZwYXNzX3NpbXBsZSBiL3Rlc3RpbmcvdGVzdHMvVDA2NnBhc3Nfc2ltcGxlCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2MWIxNGMwLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDA2NnBhc3Nfc2ltcGxlCisrKyAvZGV2L251bGwKQEAgLTEsNTMgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgImV4dGVuZGluZyBhZ2VudCBmdW5jdGlvbmFsaXR5IHdpdGggcGFzcyIKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUEFTU19NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19VVElMSVRJRVNfRVhFQ1VURV9NT0RVTEUKLQotIyBEb24ndCBydW4gdGhpcyB0ZXN0IG9uIE1pbkdXIC0gbG9jYWwvcGFzc3Rlc3QgaXMgYSBzaGVsbCBzY3JpcHQgYW5kCi0jIGhlbmNlIHBhc3NpbmcgaXQgdG8gdGhlIE1TVkNSVCBwb3BlbigpIGRvZXNuJ3Qgd29yay4KLVsgIngkT1NUWVBFIiA9ICJ4bXN5cyIgXSAmJiBTS0lQICJNaW5HVyIKLQotIyBtYWtlIHN1cmUgc25tcGdldCBhbmQgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCi1TTk1QR0VUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcGdldCIKLVsgLXggIiRTTk1QR0VUIiBdIHx8IFNLSVAKLVNOTVBXQUxLPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcHdhbGsiCi1bIC14ICIkU05NUFdBTEsiIF0gfHwgU0tJUAotCi1zbm1wX3ZlcnNpb249djJjCi1URVNUQ09NTVVOSVRZPXRlc3Rjb21tdW5pdHkKLS4gLi9TdjJjY29uZmlnCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotb2lkPS4xLjMuNi4xLjQuMS44MDcyLjIuMjU1ICAjIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0V4YW1wbGVzCi1DT05GSUdBR0VOVCBwYXNzICRvaWQgJHtTTk1QX0JBU0VESVJ9Ly4uL2xvY2FsL3Bhc3N0ZXN0Ci0KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRHVjZC1zbm1wL3Bhc3MiCi1TVEFSVEFHRU5UCi0KLSNDT01NRU5UIENoZWNrIGEgZnVsbCB3YWxrIG9mIHRoZSBzYW1wbGUgZGF0YQotQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJG9pZCIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc1N0cmluZy4wID0gU1RSSU5HOiBMaWZlLCB0aGUgVW5pdmVyc2UsIGFuZCBFdmVyeXRoaW5nIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSW50ZWdlci4xID0gSU5URUdFUjogNDIiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NPSUQuMSA9IE9JRDogTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lEVmFsdWUiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NUaW1lVGlja3MuMCA9IFRpbWV0aWNrczogKDM2MzEzNjIwMCkgNDIgZGF5cywgMDo0Mjo0Mi4wMCAiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJcEFkZHJlc3MuMCA9IElwQWRkcmVzczogMTI3LjAuMC4xIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wID0gQ291bnRlcjMyOiA0MiIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0dhdWdlLjAgPSBHYXVnZTMyOiA0MiIKLQotI0NPTU1FTlQgQSBjb3VwbGUgb2Ygc3BvdCBjaGVja3Mgb2YgR0VUIHJlcXVlc3RzLgotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEiCi1DSEVDS09SRElFICJJTlRFR0VSOiA0MiIKLQotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NDb3VudGVyLjAiCi1DSEVDS09SRElFICJDb3VudGVyMzI6IDQyIgotCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNjdwYXNzcGVyc2lzdF9zaW1wbGUgYi90ZXN0aW5nL3Rlc3RzL1QwNjdwYXNzcGVyc2lzdF9zaW1wbGUKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjNjZhMWQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMDY3cGFzc3BlcnNpc3Rfc2ltcGxlCisrKyAvZGV2L251bGwKQEAgLTEsNjIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgImV4dGVuZGluZyBhZ2VudCBmdW5jdGlvbmFsaXR5IHdpdGggcGFzc19wZXJzaXN0IgotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QQVNTX1BFUlNJU1RfTU9EVUxFCi1bIC14IC91c3IvYmluL3BlcmwgXSB8fCBTS0lQIC91c3IvYmluL3BlcmwKLQotIyBEb24ndCBydW4gdGhpcyB0ZXN0IG9uIE1pbkdXIC0gbG9jYWwvcGFzc19wZXJzaXN0dGVzdCBpcyBhIHNoZWxsIHNjcmlwdCBhbmQKLSMgaGVuY2UgcGFzc2luZyBpdCB0byB0aGUgTVNWQ1JUIHBvcGVuKCkgZG9lc24ndCB3b3JrLgotWyAieCRPU1RZUEUiID0gInhtc3lzIiBdICYmIFNLSVAgIk1pbkdXIgotCi0jIG1ha2Ugc3VyZSBzbm1wZ2V0IGFuZCBzbm1wd2FsayBjYW4gYmUgZXhlY3V0ZWQKLVNOTVBHRVQ9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wZ2V0IgotWyAteCAiJFNOTVBHRVQiIF0gfHwgU0tJUAotU05NUFdBTEs9IiR7U05NUF9VUERJUn0vYXBwcy9zbm1wd2FsayIKLVsgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotLiAuL1N2MmNjb25maWcKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi1vaWQ9LjEuMy42LjEuNC4xLjgwNzIuMi4yNTUgICMgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzRXhhbXBsZXMKLUNPTkZJR0FHRU5UIHBhc3NfcGVyc2lzdCAkb2lkICR7U05NUF9CQVNFRElSfS8uLi9sb2NhbC9wYXNzX3BlcnNpc3R0ZXN0Ci0KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyIKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtRHVjZC1zbm1wL3Bhc3NfcGVyc2lzdCIKLVBBU1NfUEVSU0lTVF9QSURGSUxFPSIkU05NUF9UTVBESVIvcGFzc19wZXJzaXN0LnBpZC4kJCIKLWV4cG9ydCBQQVNTX1BFUlNJU1RfUElERklMRQotU1RBUlRBR0VOVAotCi0jQ09NTUVOVCBDaGVjayBhIGZ1bGwgd2FsayBvZiB0aGUgc2FtcGxlIGRhdGEKLUNBUFRVUkUgIiRTTk1QV0FMSyAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUICRvaWQiCi1DSEVDS09SRElFICJORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NTdHJpbmcuMCA9IFNUUklORzogTGlmZSwgdGhlIFVuaXZlcnNlLCBhbmQgRXZlcnl0aGluZyIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0ludGVnZXIuMSA9IElOVEVHRVI6IDQyIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzT0lELjEgPSBPSUQ6IE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc09JRFZhbHVlIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzVGltZVRpY2tzLjAgPSBUaW1ldGlja3M6ICgzNjMxMzYyMDApIDQyIGRheXMsIDA6NDI6NDIuMDAgIgotQ0hFQ0tPUkRJRSAiTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzSXBBZGRyZXNzLjAgPSBJcEFkZHJlc3M6IDEyNy4wLjAuMSIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCA9IENvdW50ZXIzMjogMSIKLUNIRUNLT1JESUUgIk5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0dhdWdlLjAgPSBHYXVnZTMyOiA0MiIKLQotI0NPTU1FTlQgQSBjb3VwbGUgb2Ygc3BvdCBjaGVja3Mgb2YgR0VUIHJlcXVlc3RzLgotQ0FQVFVSRSAiJFNOTVBHRVQgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBORVQtU05NUC1QQVNTLU1JQjo6bmV0U25tcFBhc3NJbnRlZ2VyLjEiCi1DSEVDS09SRElFICJJTlRFR0VSOiA0MiIKLQotI0NPTU1FTlQgbmV0U25tcFBhc3NDb3VudGVyIHNob3VsZCBpbmNyZW1lbnQsIHNpbmNlIHRoaXMgaXMgcGFzc19wZXJzaXN0Ci1DQVBUVVJFICIkU05NUEdFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIE5FVC1TTk1QLVBBU1MtTUlCOjpuZXRTbm1wUGFzc0NvdW50ZXIuMCIKLUNIRUNLT1JESUUgIkNvdW50ZXIzMjogMiIKLQotI0NPTU1FTlQgbm93IGtpbGwgdGhlIHBhc3NfcGVyc2lzdCBzY3JpcHQsIGFuZCBjaGVjayB0aGF0IGl0IHJlY292ZXJzLgotU1RPUFBST0cgJFBBU1NfUEVSU0lTVF9QSURGSUxFCi0jQ09NTUVOVCBuZXRTbm1wUGFzc0NvdW50ZXIgc2hvdWxkIGhhdmUgcmV2ZXJ0ZWQgdG8gMSwgYXMgdGhpcyBpcyBhIG5ldyBpbnN0YW5jZS4KLUNBUFRVUkUgIiRTTk1QR0VUICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgTkVULVNOTVAtUEFTUy1NSUI6Om5ldFNubXBQYXNzQ291bnRlci4wIgotQ0hFQ0tPUkRJRSAiQ291bnRlcjMyOiAxIgotCi1TVE9QQUdFTlQKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QwNjhleGVjZml4IGIvdGVzdGluZy90ZXN0cy9UMDY4ZXhlY2ZpeApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZjQ5MjA2ZS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QwNjhleGVjZml4CisrKyAvZGV2L251bGwKQEAgLTEsNzAgKzAsMCBAQAotIyEvYmluL3NoCi0KLUhFQURFUiAiZXhlY2ZpeCBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSIKLQotU0tJUElGTk9UIFVTSU5HX1VDRF9TTk1QX0VYVEVOU0lCTEVfTU9EVUxFCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi1TS0lQSUYgTkVUU05NUF9OT19XUklURV9TVVBQT1JUCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIyBtYWtlIHN1cmUgc25tcHNldCBhbmQgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCi1TTk1QU0VUPSIke2J1aWxkZGlyfS9hcHBzL3NubXBzZXQiCi1bIC14ICIkU05NUFNFVCIgXSB8fCBTS0lQIHNubXBzZXQgbm90IGNvbXBpbGVkCi1TTk1QV0FMSz0iJHtidWlsZGRpcn0vYXBwcy9zbm1wd2FsayIKLVsgLXggIiRTTk1QV0FMSyIgXSB8fCBTS0lQIHNubXB3YWxrIG5vdCBjb21waWxlZAotCi1zbm1wX3ZlcnNpb249djJjCi1zbm1wX3dyaXRlX2FjY2Vzcz0nYWxsJwotVEVTVENPTU1VTklUWT10ZXN0Y29tbXVuaXR5Ci0uIC4vU3YyY2NvbmZpZwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLWlmIFsgIngkT1NUWVBFIiA9IHhtc3lzIF07IHRoZW4KLSAgICBjbWQxPSJ0cnVlIgotICAgIGNtZDI9ImZhbHNlIgotICAgIGVjaG89ImVjaG8iCi1lbHNlCi0gICAgY21kMT0iJCh3aGljaCB0cnVlKSIKLSAgICBjbWQyPSIkKHdoaWNoIGZhbHNlKSIKLSAgICBlY2hvPSIkKHdoaWNoIGVjaG8pIgotZmkKLUNPTkZJR0FHRU5UIGV4ZWMgICAgdHJ1ZS1jb21tYW5kICAgICRjbWQxCi1DT05GSUdBR0VOVCBleGVjZml4IHRydWUtY29tbWFuZCAgICAkY21kMQotQ09ORklHQUdFTlQgZXhlYyAgICBmYWxzZS1jb21tYW5kICAgJGNtZDIKLUNPTkZJR0FHRU5UIGV4ZWNmaXggZmFsc2UtY29tbWFuZCAgICRjbWQyCi1DT05GSUdBR0VOVCBleGVjICAgIGVjaG8tJXMtY29tbWFuZCAke2VjaG99ICVzCi1DT05GSUdBR0VOVCBleGVjZml4IGVjaG8tJXMtY29tbWFuZCAke2VjaG99IGZpeC0lcwotCi1TVEFSVEFHRU5UCi0KLSMgQ2hlY2sgYSBmdWxsIHdhbGsgb2YgVUNELVNOTVAtTUlCOjpleHRUYWJsZQotQ0FQVFVSRSAiJFNOTVBXQUxLICRTTk1QX0ZMQUdTIC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjpleHRFbnRyeSIKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE5hbWVzLjEgPSBTVFJJTkc6IHRydWUtY29tbWFuZCQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRDb21tYW5kLjEgPSBTVFJJTkc6ICciJGNtZDEiCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRSZXN1bHQuMSA9IElOVEVHRVI6IDAkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0T3V0cHV0LjEgPSBTVFJJTkc6ICQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXguMSA9IElOVEVHRVI6IG5vRXJyb3IoMCkkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjEgPSBTVFJJTkc6ICciJGNtZDEiCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHROYW1lcy4yID0gU1RSSU5HOiBmYWxzZS1jb21tYW5kJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dENvbW1hbmQuMiA9IFNUUklORzogJyIkY21kMiInJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dFJlc3VsdC4yID0gSU5URUdFUjogMSQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRPdXRwdXQuMiA9IFNUUklORzogJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4yID0gSU5URUdFUjogbm9FcnJvcigwKSQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRFcnJGaXhDbWQuMiA9IFNUUklORzogJyIkY21kMiInJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dE5hbWVzLjMgPSBTVFJJTkc6IGVjaG8tJXMtY29tbWFuZCQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRDb21tYW5kLjMgPSBTVFJJTkc6ICciJHtlY2hvfSInICVzJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dFJlc3VsdC4zID0gSU5URUdFUjogMCQnCi1DSEVDSyAnVUNELVNOTVAtTUlCOjpleHRPdXRwdXQuMyA9IFNUUklORzogJXMkJwotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4LjMgPSBJTlRFR0VSOiBub0Vycm9yKDApJCcKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeENtZC4zID0gU1RSSU5HOiAnIiR7ZWNob30iJyBmaXgtJXMkJwotCi1DQVBUVVJFICIkU05NUFNFVCAkU05NUF9GTEFHUyAtJHNubXBfdmVyc2lvbiAtYyAkVEVTVENPTU1VTklUWSAtcjAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4zIGkgMSIKLUNIRUNLICdVQ0QtU05NUC1NSUI6OmV4dEVyckZpeC4zID0gSU5URUdFUjogcnVuRml4KDEpJwotCi1DQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgJFRFU1RDT01NVU5JVFkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBVQ0QtU05NUC1NSUI6OmV4dEVudHJ5IgotQ0hFQ0sgJ1VDRC1TTk1QLU1JQjo6ZXh0RXJyRml4Q21kLjMgPSBTVFJJTkc6ICciJHtlY2hvfSInIGZpeC0lcycKLQotU1RPUEFHRU5UCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTAwYWdlbnRodXAgYi90ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggNTA1ZWZiNC4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMDBhZ2VudGh1cAorKysgL2Rldi9udWxsCkBAIC0xLDM2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIHRoYXQgdGhlIGFnZW50IHJlc3BvbmRzIHByb3Blcmx5IHRvIGEga2lsbCAtSFVQCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLVNLSVBJRk5PVCBIQVZFX1NJR05BTAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tdW5uaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotIyBhZGQgYSBhZ2VudCBjb25maWd1cmF0aW9uIGxpbmUgdGhhdCB3b3VsZG4ndCBoYXZlIGJlZW4gdGhlcmUgd2hlbgotIyB0aGUgc3RhcnRlZCB1cC4KLUNPTkZJR0FHRU5UIHN5c2xvY2F0aW9uIG5vdC1hbnl3aGVyZS1pbi1wYXJ0aWN1bGFyCi0KLSMga2lsbCAtSFVQIHRoZSBhZ2VudCB0byBnZXQgaXQgdG8gcmUtcmVhZCB0aGUgLmNvbmYgZmlsZS4KLURFTEFZCi1raWxsIC1IVVAgYGNhdCAkU05NUF9TTk1QRF9QSURfRklMRWAgPiAvZGV2L251bGwgMj4mMQotREVMQVkKLQotIyBBbmQgc2VlIGlmIGl0IGhhcyB0aGUgbmV3IHZhbHVlLgotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzdGVtLnN5c0xvY2F0aW9uLjAiCi0KLVNUT1BBR0VOVAotCi1DSEVDSyAibm90LWFueXdoZXJlLWluLXBhcnRpY3VsYXIiCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMTBhZ2VudHhnZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMTBhZ2VudHhnZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ0OTI4MGYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTEwYWdlbnR4Z2V0CisrKyAvZGV2L251bGwKQEAgLTEsNTkgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgQWdlbnRYIEdFVCBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCi1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKLWVsc2UKLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgotZmkKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYiIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IgotCi1pZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBhZ2VudHggc3ViYWdlbnQgYnkgZmlyc3QgcnVubmluZyBpdC4uLgotCi0gIFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9QSURfRklMRQotICBTTk1QX1NOTVBEX0xPR19GSUxFX09SSUc9JFNOTVBfU05NUERfTE9HX0ZJTEUKLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRS5udW0yCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEUubnVtMgotICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLVggLUkgc3lzdGVtX21pYiIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL2JvZ3VzLmNvbmYiCi0gIFNUQVJUQUdFTlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyBzZXR0aW5nIHRoZSBzeXN0ZW0gbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDMgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gVGltZXRpY2tzOiIKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLWZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMTFhZ2VudHhzZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk2Y2JiNTAuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTExYWdlbnR4c2V0CisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgQWdlbnRYIFNFVCBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMyBjb25maWd1cmF0aW9uIGZvciBpbml0aWFsIHVzZXIKLS4gLi9TdjNjb25maWcKLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCi1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKLWVsc2UKLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgotZmkKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtc3lzdGVtX21pYiAtREFnZW50WCIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgotQ0FQVFVSRSAic25tcGdldCAtT24gLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNC4wIgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCi0KLWlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIEFnZW50WCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBzeXN0ZW1fbWliIgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKLSAgZWNobyAicHN5c2NvbnRhY3QgdGVzdGNvbnRhY3QiID4+ICRTTk1QX0NPTkZJR19GSUxFCi0gIFNUQVJUQUdFTlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAiCi0KLSAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogdGVzdGNvbnRhY3QiCi0KLSAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0KLSAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyBzZXR0aW5nIHRoZSBzeXN0ZW0gbWliCi0gICAgQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIHMgbmV3dGVzdGNvbnRhY3QiCi0KLSAgICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gU1RSSU5HOiBuZXd0ZXN0Y29udGFjdCIKLQotICAgIGlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotCi0JIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIHN5c3RlbSBtaWIKLQlDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAiCi0JCi0JQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogbmV3dGVzdGNvbnRhY3QiCi0gICAgZmkKLSAgZmkKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLWZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMTEyYWdlbnR4c2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNGRjZTcyNy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMTJhZ2VudHhzZXRmYWlsCisrKyAvZGV2L251bGwKQEAgLTEsNzEgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgQWdlbnRYIGlsbGVnYWwgU0VUIGhhbmRsaW5nIHN1cHBvcnQKLQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9NQVNURVJfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfQUdFTlRYX1NVQkFHRU5UX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX01JQklJX1NZU1RFTV9NSUJfTU9EVUxFCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgc3lzdGVtIG1pYi4KLWlmIFsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHVuaXgiIF07dGhlbgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14ICRTTk1QX1RNUERJUi9hZ2VudHhfc29ja2V0IgotZWxzZQotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIC14IHRjcDoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0iCi1maQotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliIC1EQWdlbnRYIgotU1RBUlRBR0VOVAotCi0jIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGN1cnJlbnQgYWdlbnQgZG9lc24ndCBzdXBwb3J0IHRoZSBzeXN0ZW0gbWliCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXN0ZW0uc3lzQ29udGFjdC4wIgotCi1DSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCi0KLWlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIEFnZW50WCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBzeXN0ZW1fbWliIgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKLSAgU1RBUlRBR0VOVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCIKLQotICAjIHdlIGRvbid0IGtub3cgdGhlIHJlYWwgdmFsdWUsIHVuZm9ydHVuYXRlbHksIHNvIHdlIHRlc3QgZm9yIHdoYXQKLSAgIyB3ZSBzaG91bGQgKm5vdCogZ2V0IGJhY2suCi0gIENIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBObyBTdWNoIE9iamVjdCIKLQotICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDA7IHRoZW4KLQotICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHNldHRpbmcgdGhlIHN5c3RlbSBtaWIKLSAgICBDQVBUVVJFICJzbm1wc2V0IC1PbiAtSXIgJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIGkgNCIKLQotICAgIENIRUNLICJ3cm9uZ1R5cGUiCi0KLSAgZmkKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLWZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwIGIvdGVzdGluZy90ZXN0cy9UMTEzYWdlbnR4dHJhcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMjVjM2VlMS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMTNhZ2VudHh0cmFwCisrKyAvZGV2L251bGwKQEAgLTEsNzggKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgQWdlbnRYIHRyYXAgc2VuZGluZyBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFydCB0aGUgdHJhcCBkZW1vbgotQ09ORklHVFJBUEQgYXV0aGNvbW11bml0eSBsb2cgcHVibGljCi1TVEFSVFRSQVBECi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0jIGNvbmZpZ3VyZSB0aGUgdHJhcCByZWNlaXZlci4KLUNPTkZJR0FHRU5UIHRyYXBzaW5rICR7U05NUF9UUkFOU1BPUlRfU1BFQ306JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfU05NUFRSQVBEX1BPUlR9IHB1YmxpYwotCi0jIFN0YXJ0IHRoZSBhZ2VudCB3aXRob3V0IGluaXRpYWxpemluZyB0aGUgZXhhbXBsZSBtaWIuCi1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1bml4IiBdO3RoZW4KLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCAkU05NUF9UTVBESVIvYWdlbnR4X3NvY2tldCIKLWVsc2UKLU9SSUdfQUdFTlRfRkxBR1M9IiRBR0VOVF9GTEFHUyAteCB0Y3A6JHtTTk1QX1RFU1RfREVTVH0ke1NOTVBfQUdFTlRYX1BPUlR9IgotZmkKLUFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtSSAtZXhhbXBsZSIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgZXhhbXBsZSBtaWIKLUNBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuMS4wIgotCi1DSEVDSyAiTm8gU3VjaCBPYmplY3QiCi0KLWlmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIEFnZW50WCBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIEFHRU5UX0ZMQUdTPSIkT1JJR19BR0VOVF9GTEFHUyAtWCAtSSBleGFtcGxlIC1EYWRkIgotICBTTk1QX0NPTkZJR19GSUxFPSIkU05NUF9UTVBESVIvYm9ndXMuY29uZiIKLQotICBTVEFSVEFHRU5UCi0KLSAgIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBhZ2VudCBub3cgc3VwcG9ydHMgdGhlIGV4YW1wbGUgbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIFVDRC1TTk1QLU1JQjo6dWNkYXZpcy4yNTQuMS4wIgotCi0gIENIRUNLICJsaWZlIHRoZSB1bml2ZXJzZSBhbmQgZXZlcnl0aGluZyIKLQotICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLQotICAgICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHNlbmRzIGEgdHJhcCBmcm9tIHRoZSBleG1hcGxlIG1pYgotICAgIENBUFRVUkUgInNubXBzZXQgLU9uIC1yIDAgLXQgMyAkU05NUF9GTEFHUyAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgVUNELVNOTVAtTUlCOjp1Y2RhdmlzLjI1NC44LjAgaSAxIgotICAgIERFTEFZCi0gICAgQ0hFQ0tUUkFQRCAibGlmZSB0aGUgdW5pdmVyc2UgYW5kIGV2ZXJ5dGhpbmciCi0KLSAgZmkKLQotICAjIHN0b3AgdGhlIHN1YmFnZW50Ci0gIFNUT1BBR0VOVAotCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEVfT1JJRwotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFX09SSUcKLWZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBzdG9wIHRoZSB0cmFwIGRlbW9uCi1TVE9QVFJBUEQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsIGIvdGVzdGluZy90ZXN0cy9UMTE1YWdlbnR4cGVybApkZWxldGVkIGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggOWRhMjRmNi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMTVhZ2VudHhwZXJsCisrKyAvZGV2L251bGwKQEAgLTEsMTMzICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSICdBZ2VudFggc3ViYWdlbnQgaW4gUGVybCAodXNpbmcgTmV0U05NUDo6YWdlbnQpJwotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLVNLSVBJRk5PVCBVU0lOR19BR0VOVFhfTUFTVEVSX01PRFVMRQotU0tJUElGTk9UIFVTSU5HX0FHRU5UWF9TVUJBR0VOVF9NT0RVTEUKLSMgbWFrZSBzdXJlIHRoZSB0b29sa2l0IGhhcyBiZWVuIGNvbmZpZ3VyZWQgLS13aXRoLXBlcmwtbW9kdWxlcwotWyAtZCAke1NOTVBfVVBESVJ9L3BlcmwvYmxpYi9hcmNoL2F1dG8vTmV0U05NUC9hZ2VudCBdIHx8IFNLSVAKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLXNubXBfdmVyc2lvbj12MmMKLVRFU1RDT01NVU5JVFk9dGVzdGNvbW11bml0eQotLiAuL1N2MmNjb25maWcKLQotVEVTVE9JRD0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMS4wCi1URVNUT0lEMj0uMS4zLjYuMS40LjEuODg3Mi45OTk5Ljk5OTkuMi4wCi1BR0VOVFhfU09DS0VUPSR7U05NUF9UTVBESVJ9L2FnZW50eF9zb2NrZXQKLVBFUkxfU1VCQUdFTlQ9JHtTTk1QX1RNUERJUn0vaGVsbG8ucGwKLVBFUkxfU1VCQUdFTlRfQ09ORj0ke1NOTVBfVE1QRElSfS9oZWxsby5jb25mCi0KLWNhdCA+JFBFUkxfU1VCQUdFTlQgPDxFTkQKLSMhJHtTTk1QX1BFUkxQUk9HfQotIyBtaW5pbWFsIEFnZW50WCBzdWJhZ2VudCBpbiBQZXJsCi0KLXVzZSBibGliIHF3KCR7U05NUF9VUERJUn0vcGVybCk7Ci11c2UgTmV0U05NUDo6T0lEIHF3KDphbGwpOwotdXNlIE5ldFNOTVA6OmFnZW50IHF3KDphbGwpOwotdXNlIE5ldFNOTVA6OkFTTiBxdyg6YWxsKTsKLXVzZSBOZXRTTk1QOjphZ2VudDo6ZGVmYXVsdF9zdG9yZTsKLXVzZSBOZXRTTk1QOjpkZWZhdWx0X3N0b3JlIHF3KDphbGwpOwotdXNlIFNOTVA7Ci0KLSMjIGRvdWJsZS1mb3JrIGRhZW1vbgotbXkgXCRwaWQ7Ci11bmxlc3MgKFwkcGlkID0gZm9yaykgewotICB1bmxlc3MgKGZvcmspIHsKLSAgICAjIyBzdGFydCBtYWluIGNvZGUKLSAgICBteSBcJHJlZ2F0ID0gJy4xLjMuNi4xLjQuMS44ODcyLjk5OTkuOTk5OSc7ICMgbmV0U25tcFBsYXlQZW4KLSAgICBteSBcJG15b2lkID0gXCRyZWdhdCAuICIuMS4wIjsgIyB0aGUgImhlbGxvIHdvcmxkIiBPSUQKLSAgICBteSBcJG15b2lkMiA9IFwkcmVnYXQgLiAiLjIuMCI7ICMgdGhlICJoZWxsbyBhZ2FpbiB3b3JsZCIgT0lECi0KLSAgICBteSBcJHBpZGZpbGUgPSBzaGlmdDsgIyB0YWtlIFBJRCBmaWxlIGFzIGZpcnN0IGFyZ3VtZW50IAotICAgIG9wZW4oUElERklMRSwgIj5cJHBpZGZpbGUiKSBvciBkaWUgIkNvdWxkbid0IG9wZW4gXCRwaWRmaWxlIjsKLSAgICBwcmludCBQSURGSUxFIFwkXCQ7Ci0gICAgY2xvc2UoUElERklMRSk7Ci0KLXN1YiBteV9zbm1wX2hhbmRsZXIgewotICBteSAoXCRoYW5kbGVyLCBcJHJlZ2lzdHJhdGlvbl9pbmZvLCBcJHJlcXVlc3RfaW5mbywgXCRyZXF1ZXN0cykgPSBAXzsKLSAgZm9yKG15IFwkcmVxdWVzdCA9IFwkcmVxdWVzdHM7IFwkcmVxdWVzdDsgXCRyZXF1ZXN0ID0gXCRyZXF1ZXN0LT5uZXh0KCkpIHsKLSAgICBpZiAoXCRyZXF1ZXN0X2luZm8tPmdldE1vZGUoKSA9PSBNT0RFX0dFVCkgewotICAgICAgaWYgKFwkcmVxdWVzdC0+Z2V0T0lEKCkgPT0gbmV3IE5ldFNOTVA6Ok9JRChcJG15b2lkKSkgewotICAgICAgICBcJHJlcXVlc3QtPnNldFZhbHVlKEFTTl9PQ1RFVF9TVFIsICJoZWxsbyB3b3JsZCIpOwotICAgICAgICBsYXN0OwotICAgICAgfSBlbHNpZiAoXCRyZXF1ZXN0LT5nZXRPSUQoKSA9PSBuZXcgTmV0U05NUDo6T0lEKFwkbXlvaWQyKSkgewotICAgICAgICBcJHJlcXVlc3QtPnNldFZhbHVlKEFTTl9PQ1RFVF9TVFIsICJoZWxsbyBhZ2FpbiB3b3JsZCIpOwotICAgICAgICBsYXN0OwotICAgICAgfQotICAgIH0KLSAgfQotfQotc3ViIHNodXRfaXRfZG93biB7IFwkcnVubmluZyA9IDA7IH0KLQotICAgIG5ldHNubXBfZHNfc2V0X2Jvb2xlYW4oTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfTk9fUk9PVF9BQ0NFU1MsIDEpOwotICAgIG15IFwkYWdlbnQgPSBuZXcgTmV0U05NUDo6YWdlbnQoJ05hbWUnID0+ICdoZWxsbycsICdBZ2VudFgnID0+IDEpOwotICAgIG15IFwkcmVnb2lkID0gbmV3IE5ldFNOTVA6Ok9JRChcJHJlZ2F0KTsKLSAgICBcJGFnZW50LT5yZWdpc3RlcigiaGVsbG8iLCBcJHJlZ29pZCwgXCZteV9zbm1wX2hhbmRsZXIpOwotCi0gICAgXCRTSUd7J0lOVCd9ID0gXCZzaHV0X2l0X2Rvd247Ci0gICAgXCRTSUd7J1FVSVQnfSA9IFwmc2h1dF9pdF9kb3duOwotICAgIFwkcnVubmluZyA9IDE7Ci0gICAgd2hpbGUoXCRydW5uaW5nKSB7Ci0gICAgICBcJGFnZW50LT5hZ2VudF9jaGVja19hbmRfcHJvY2VzcygxKTsKLSAgICB9Ci0gICAgXCRhZ2VudC0+c2h1dGRvd24oKTsKLSAgICAjIyBlbmQgbWFpbiBjb2RlCi0gICAgZXhpdCAwOwotICB9Ci0gIGV4aXQgMDsKLX0KLXdhaXRwaWQoXCRwaWQsIDApOwotRU5ECi0KLWVjaG8gImFnZW50eHNvY2tldCAkQUdFTlRYX1NPQ0tFVCIgPiAkUEVSTF9TVUJBR0VOVF9DT05GCi0KLUNPTkZJR0FHRU5UIG1hc3RlciBhZ2VudHgKLUNPTkZJR0FHRU5UIGFnZW50eHNvY2tldCAkQUdFTlRYX1NPQ0tFVAotCi1TVEFSVEFHRU5UCi0KLSMgbWFrZSBzdXJlIHRoYXQgd2UgY2FuIGZ1bGZpbGwgYWxsIGxpYnJhcnkgZGVwZW5kZW5jaWVzCi1fbGRfbGliX3BhdGg9IiR7U05NUF9VUERJUn0vc25tcGxpYi8ubGliczoke1NOTVBfVVBESVJ9L2FnZW50Ly5saWJzOiR7U05NUF9VUERJUn0vYWdlbnQvaGVscGVycy8ubGlicyIKLWlmIFsgIngkTERfTElCUkFSWV9QQVRIIiAhPSAieCIgXTsgdGhlbgotICBMRF9MSUJSQVJZX1BBVEg9IiR7X2xkX2xpYl9wYXRofToke0xEX0xJQlJBUllfUEFUSH0iCi1lbHNlCi0gIExEX0xJQlJBUllfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgotZmkKLWlmIFsgIngkRFlMRF9MSUJSQVJZX1BBVEgiICE9ICJ4IiBdOyB0aGVuCi0gIERZTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH06JHtEWUxEX0xJQlJBUllfUEFUSH0iCi1lbHNlCi0gIERZTERfTElCUkFSWV9QQVRIPSIke19sZF9saWJfcGF0aH0iCi1maQotaWYgWyAieCRTSExJQl9QQVRIIiAhPSAieCIgXTsgdGhlbgotICBTSExJQl9QQVRIPSIke19sZF9saWJfcGF0aH06JHtTSExJQl9QQVRIfSIKLWVsc2UKLSAgU0hMSUJfUEFUSD0iJHtfbGRfbGliX3BhdGh9IgotZmkKLWV4cG9ydCBMRF9MSUJSQVJZX1BBVEggRFlMRF9MSUJSQVJZX1BBVEggU0hMSUJfUEFUSAotCi0jIHN0YXJ0IHBlcmwgc3ViYWdlbnQKLS91c3IvYmluL2VudiBTTk1QQ09ORlBBVEg9IiR7U05NUF9UTVBESVJ9JHtTTk1QX0VOVl9TRVBBUkFUT1J9JHtTTk1QX1RNUF9QRVJTSVNURU5URElSfSIgJFNOTVBfUEVSTFBST0cgJFBFUkxfU1VCQUdFTlQgJFNOTVBfQUdFTlRYX1BJRF9GSUxFID4kU05NUF9BR0VOVFhfTE9HX0ZJTEUgMj4mMQotREVMQVkKLQotIyMgMSkgU05NUCBHRVQgYWdhaW5zdCBtaWIgb2JqZWN0IGltcGxlbWVudGVkIGJ5IHRoZSBwZXJsIHN1YmFnZW50Ci1DQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQiCi1DSEVDSyAiaGVsbG8gd29ybGQiCi0KLSMjIDIpIHBlcnNpc3RlbmN5OiByZWNvbmZpZ3VyZSBtYXN0ZXIgYWdlbnQgKEhVUCksIHJlLXRlc3QKLUhVUEFHRU5UCi1DQVBUVVJFICJzbm1wZ2V0IC0kc25tcF92ZXJzaW9uIC1jICRURVNUQ09NTVVOSVRZICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgJFRFU1RPSUQyIgotQ0hFQ0sgImhlbGxvIGFnYWluIHdvcmxkIgotCi0jIyBzdG9wCi1TVE9QQUdFTlQKLVNUT1BQUk9HICRTTk1QX0FHRU5UWF9QSURfRklMRQotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTIwcHJveHlnZXQgYi90ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDEwMTc3Yi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMjBwcm94eWdldAorKysgL2Rldi9udWxsCkBAIC0xLDY0ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFByb3h5IEdFVCBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QUk9YWV9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMgWFhYOiB1Y2Qtc25tcC9wcm94eSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgVENQIC0tIHJlbW92ZSB0aGlzIG9uY2UgaXQgZG9lcwotWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiBdICYmIFNLSVAKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0jIGNvbmZpZyB0aGUgcHJveHkKLUNPTkZJR0FHRU5UIHByb3h5IC10IDIgLXIgMSAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSBzeXN0ZW0KLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIgLURwcm94eSIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgotI0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotI0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKLQotI2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIHByb3h5IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3Byb3h5LmNvbmYiCi0gIGVjaG8gInJ3Y29tbXVuaXR5IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCi0gIEFHRU5UX0ZMQUdTPSRPUklHX0FHRU5UX0ZMQUdTCi0gIE9SSUdfU05NUF9TTk1QRF9QT1JUPSRTTk1QX1NOTVBEX1BPUlQKLSAgU05NUF9TTk1QRF9QT1JUPSIke1NOTVBfQUdFTlRYX1BPUlR9IgotICBTVEFSVEFHRU5UCi0gIFNOTVBfU05NUERfUE9SVD0kT1JJR19TTk1QX1NOTVBEX1BPUlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLSAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczoiCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi0jZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEyMXByb3h5c2V0IGIvdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjMWM3YTYuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTIxcHJveHlzZXQKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBQcm94eSBTRVQgc3VwcG9ydAotCi1TS0lQSUZOT1QgVVNJTkdfVUNEX1NOTVBfUFJPWFlfTU9EVUxFCi1TS0lQSUZOT1QgVVNJTkdfTUlCSUlfU1lTVEVNX01JQl9NT0RVTEUKLVNLSVBJRiAgICBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotCi0jIFhYWDogdWNkLXNubXAvcHJveHkgZG9lc24ndCBwcm9wZXJseSBzdXBwb3J0IFRDUCAtLSByZW1vdmUgdGhpcyBvbmNlIGl0IGRvZXMKLVsgIngkU05NUF9UUkFOU1BPUlRfU1BFQyIgPSAieHRjcCIgXSAmJiBTS0lQCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYzIGNvbmZpZ3VyYXRpb24gZm9yIGluaXRpYWwgdXNlcgotLiAuL1N2M2NvbmZpZwotIyBjb25maWcgdGhlIHByb3h5Ci1DT05GSUdBR0VOVCBwcm94eSAtdCAyIC1yIDEgLXYgMmMgLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzoke1NOTVBfVEVTVF9ERVNUfSR7U05NUF9BR0VOVFhfUE9SVH0gc3lzdGVtCi0KLSMgU3RhcnQgdGhlIGFnZW50IHdpdGhvdXQgaW5pdGlhbGl6aW5nIHRoZSBzeXN0ZW0gbWliLgotT1JJR19BR0VOVF9GTEFHUz0iJEFHRU5UX0ZMQUdTIgotQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1JIC1zeXN0ZW1fbWliIC1EcHJveHkiCi1TVEFSVEFHRU5UCi0KLSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgY3VycmVudCBhZ2VudCBkb2Vzbid0IHN1cHBvcnQgdGhlIHN5c3RlbSBtaWIKLSNDQVBUVVJFICJzbm1wZ2V0IC1PbiAtdCAzICRTTk1QX0ZMQUdTICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4zLjAiCi0KLSNDSEVDSyAiLjEuMy42LjEuMi4xLjEuMy4wID0gTm8gU3VjaCBPYmplY3QiCi0KLSNpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLSAgIyB0ZXN0IHRoZSBwcm94eSBzdWJhZ2VudCBieSBmaXJzdCBydW5uaW5nIGl0Li4uCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRV9PUklHPSRTTk1QX1NOTVBEX1BJRF9GSUxFCi0gIFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRz0kU05NUF9TTk1QRF9MT0dfRklMRQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFLm51bTIKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRS5udW0yCi0gIFNOTVBfQ09ORklHX0ZJTEU9IiRTTk1QX1RNUERJUi9wcm94eS5jb25mIgotICBlY2hvICJyd2NvbW11bml0eSB0ZXN0Y29tbXVuaXR5IiA+PiAkU05NUF9DT05GSUdfRklMRQotICBlY2hvICJwc3lzY29udGFjdCB0ZXN0Y29udGFjdCIgPj4gJFNOTVBfQ09ORklHX0ZJTEUKLSAgQUdFTlRfRkxBR1M9IiRPUklHX0FHRU5UX0ZMQUdTIC1EbWliX2luaXQiCi0gIE9SSUdfU05NUF9TTk1QRF9QT1JUPSRTTk1QX1NOTVBEX1BPUlQKLSAgU05NUF9TTk1QRF9QT1JUPSIke1NOTVBfQUdFTlRYX1BPUlR9IgotICBTVEFSVEFHRU5UCi0gIFNOTVBfU05NUERfUE9SVD0kT1JJR19TTk1QX1NOTVBEX1BPUlQKLQotICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICBDQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAiCi0KLSAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogdGVzdGNvbnRhY3QiCi0KLSAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAxOyB0aGVuCi0KLSAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICAgIENBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCBzIG5ld3Rlc3Rjb250YWN0IgotCi0gICAgQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjQuMCA9IFNUUklORzogbmV3dGVzdGNvbnRhY3QiCi0KLSAgICBpZiB0ZXN0ICIkc25tcF9sYXN0X3Rlc3RfcmVzdWx0IiA9IDE7IHRoZW4KLQotCSMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0JQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXQgNSAkQVVUSFRFU1RBUkdTICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgc3lzQ29udGFjdC4wIgotCQotCUNIRUNLICIuMS4zLjYuMS4yLjEuMS40LjAgPSBTVFJJTkc6IG5ld3Rlc3Rjb250YWN0IgotICAgIGZpCi0gIGZpCi0KLSAgIyBzdG9wIHRoZSBzdWJhZ2VudAotICBTVE9QQUdFTlQKLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFPSRTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUcKLSAgU05NUF9TTk1QRF9MT0dfRklMRT0kU05NUF9TTk1QRF9MT0dfRklMRV9PUklHCi0jZmkKLQotIyBzdG9wIHRoZSBtYXN0ZXIgYWdlbnQKLVNUT1BBR0VOVAotCi0jIGFsbCBkb25lICh3aGV3KQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbCBiL3Rlc3RpbmcvdGVzdHMvVDEyMnByb3h5c2V0ZmFpbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGVjZjliZi4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMjJwcm94eXNldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSw4MiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBQcm94eSBpbGxlZ2FsIFNFVCBoYW5kbGluZyBzdXBwb3J0Ci0KLVNLSVBJRk5PVCBVU0lOR19VQ0RfU05NUF9QUk9YWV9NT0RVTEUKLVNLSVBJRk5PVCBVU0lOR19NSUJJSV9TWVNURU1fTUlCX01PRFVMRQotU0tJUElGICAgIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi1TS0lQSUYgICAgTkVUU05NUF9ESVNBQkxFX1NFVF9TVVBQT1JUCi0KLSMgWFhYOiB1Y2Qtc25tcC9wcm94eSBkb2Vzbid0IHByb3Blcmx5IHN1cHBvcnQgVENQIC0tIHJlbW92ZSB0aGlzIG9uY2UgaXQgZG9lcwotWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiBdICYmIFNLSVAKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgc3RhbmRhcmQgVjMgY29uZmlndXJhdGlvbiBmb3IgaW5pdGlhbCB1c2VyCi0uIC4vU3YzY29uZmlnCi0jIGNvbmZpZyB0aGUgcHJveHkKLUNPTkZJR0FHRU5UIHByb3h5IC10IDIgLXIgMSAtdiAyYyAtYyB0ZXN0Y29tbXVuaXR5ICRTTk1QX1RSQU5TUE9SVF9TUEVDOiR7U05NUF9URVNUX0RFU1R9JHtTTk1QX0FHRU5UWF9QT1JUfSBzeXN0ZW0KLQotIyBTdGFydCB0aGUgYWdlbnQgd2l0aG91dCBpbml0aWFsaXppbmcgdGhlIHN5c3RlbSBtaWIuCi1PUklHX0FHRU5UX0ZMQUdTPSIkQUdFTlRfRkxBR1MiCi1BR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLUkgLXN5c3RlbV9taWIgLURwcm94eSIKLVNUQVJUQUdFTlQKLQotIyB0ZXN0IHRvIHNlZSB0aGF0IHRoZSBjdXJyZW50IGFnZW50IGRvZXNuJ3Qgc3VwcG9ydCB0aGUgc3lzdGVtIG1pYgotI0NBUFRVUkUgInNubXBnZXQgLU9uIC10IDMgJFNOTVBfRkxBR1MgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotI0NIRUNLICIuMS4zLjYuMS4yLjEuMS4zLjAgPSBObyBTdWNoIE9iamVjdCIKLQotI2lmIHRlc3QgIiRzbm1wX2xhc3RfdGVzdF9yZXN1bHQiID0gMTsgdGhlbgotICAjIHRlc3QgdGhlIHByb3h5IHN1YmFnZW50IGJ5IGZpcnN0IHJ1bm5pbmcgaXQuLi4KLQotICBTTk1QX1NOTVBEX1BJRF9GSUxFX09SSUc9JFNOTVBfU05NUERfUElEX0ZJTEUKLSAgU05NUF9TTk1QRF9MT0dfRklMRV9PUklHPSRTTk1QX1NOTVBEX0xPR19GSUxFCi0gIFNOTVBfU05NUERfUElEX0ZJTEU9JFNOTVBfU05NUERfUElEX0ZJTEUubnVtMgotICBTTk1QX1NOTVBEX0xPR19GSUxFPSRTTk1QX1NOTVBEX0xPR19GSUxFLm51bTIKLSAgU05NUF9DT05GSUdfRklMRT0iJFNOTVBfVE1QRElSL3Byb3h5LmNvbmYiCi0gIGVjaG8gInJ3Y29tbXVuaXR5IHRlc3Rjb21tdW5pdHkiID4+ICRTTk1QX0NPTkZJR19GSUxFCi0jICBlY2hvICJzeXNjb250YWN0IHRlc3Rjb250YWN0IiA+PiAkU05NUF9DT05GSUdfRklMRQotICBBR0VOVF9GTEFHUz0iJE9SSUdfQUdFTlRfRkxBR1MgLURtaWJfaW5pdCIKLSAgT1JJR19TTk1QX1NOTVBEX1BPUlQ9JFNOTVBfU05NUERfUE9SVAotICBTTk1QX1NOTVBEX1BPUlQ9IiR7U05NUF9BR0VOVFhfUE9SVH0iCi0gIFNUQVJUQUdFTlQKLSAgU05NUF9TTk1QRF9QT1JUPSRPUklHX1NOTVBfU05NUERfUE9SVAotCi0gICMgdGVzdCB0byBzZWUgdGhhdCB0aGUgYWdlbnQgbm93IHN1cHBvcnRzIHRoZSBzeXN0ZW0gbWliCi0gIENBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC10IDUgJEFVVEhURVNUQVJHUyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIHN5c0NvbnRhY3QuMCIKLQotICAKLSAgIyB3ZSBkb24ndCBrbm93IHRoZSByZWFsIHZhbHVlLCB1bmZvcnR1bmF0ZWx5LCBzbyB3ZSB0ZXN0IGZvciB3aGF0Ci0gICMgd2Ugc2hvdWxkICpub3QqIGdldCBiYWNrLgotICBDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gTm8gU3VjaCBPYmplY3QiCi0KLSAgaWYgdGVzdCAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgPSAwOyB0aGVuCi0KLSAgICAjIHRlc3QgdG8gc2VlIHRoYXQgdGhlIGFnZW50IG5vdyBzdXBwb3J0cyB0aGUgc3lzdGVtIG1pYgotICAgIENBUFRVUkUgInNubXBzZXQgLU9uIC1JciAkU05NUF9GTEFHUyAtdCA1ICRBVVRIVEVTVEFSR1MgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCBzeXNDb250YWN0LjAgaSA0MiIKLQotICAgICMgNS4wLnggc25tcHNldCBzaG93cyBlcnJvciBvbiBzaW5nbGUgbGluZQotICAgICNDSEVDSyAiLjEuMy42LjEuMi4xLjEuNC4wID0gV3JvbmcgVHlwZSIKLSAgICAjIDUuMS54IHNubXBzZXQgc2hvd3MgZXJyb3Igb24gbXVsdGlwbGUgbGluZXMKLSAgICBDSEVDSyAiUmVhc29uOiB3cm9uZ1R5cGUiCi0gICAgQ0hFQ0sgIkZhaWxlZCBvYmplY3Q6IC4xLjMuNi4xLjIuMS4xLjQuMCIKLQotICBmaQotCi0gICMgc3RvcCB0aGUgc3ViYWdlbnQKLSAgU1RPUEFHRU5UCi0KLSAgU05NUF9TTk1QRF9QSURfRklMRT0kU05NUF9TTk1QRF9QSURfRklMRV9PUklHCi0gIFNOTVBfU05NUERfTE9HX0ZJTEU9JFNOTVBfU05NUERfTE9HX0ZJTEVfT1JJRwotI2ZpCi0KLSMgc3RvcCB0aGUgbWFzdGVyIGFnZW50Ci1TVE9QQUdFTlQKLQotIyBhbGwgZG9uZSAod2hldykKLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0IGIvdGVzdGluZy90ZXN0cy9UMTMwc25tcHYxdmFjbWdldApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzFiZGM3MS4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxMzBzbm1wdjF2YWNtZ2V0CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgU05NUHYxIHZhY20gYWNjZXB0YW5jZSBzdXBwb3J0Ci1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgotIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCi0jIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCi0jIFRoaXMgY2FzZSB0ZXN0IGZvciBzdWNjZXNzZnVsIGFjY2Vzcwotc25tcF92ZXJzaW9uPXYxCi0uIC4vU3ZhY21jb25maWcKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMS4wIiAKLQotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuMS4wID0gU1RSSU5HOiIKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogIgotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDEzMXNubXB2MmN2YWNtZ2V0IGIvdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDlkNDgxZjIuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTMxc25tcHYyY3ZhY21nZXQKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjIgdmFjbSBhY2NlcHRhbmNlIHN1cHBvcnQKLQotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TTk1QVjJDCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0KLSMgc3RhbmRhcmQgVjEgY29uZmlndXJhdGlvbjogdGVzdGNvbW11bml0eTEgdGVzdGNvbW11bml0eTIKLSMgdGVzdGNvbW11bml0eTEgY2FuIGFjY2VzcyAuMS4zLjYuMS4yLjEuMS4xLCBvdGhlcnMgYXJlIGRlbmllZAotIyB0ZXN0Y29tbXVuaXR5MiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMQotIyBUaGlzIGNhc2UgdGVzdCBmb3Igc3VjY2Vzc2Z1bCBhY2Nlc3MKLQotc25tcF92ZXJzaW9uPXYyYwotLiAuL1N2YWNtY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTEgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogIgotCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTMyc25tcHYzdmFjbWdldCBiL3Rlc3RpbmcvdGVzdHMvVDEzMnNubXB2M3ZhY21nZXQKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhjZTkzNjQuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTMyc25tcHYzdmFjbWdldAorKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MyB2YWNtIGFjY2VwdGFuY2Ugc3VwcG9ydAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBDb25maWd1cmF0aW9uOgotI2luaXRpYWwxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgZGVueSBvdGhlcnMKLSNpbml0aWFsMiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMSAKLSNUaGlzIGNhc2UgdGVzdCBmb3Igc3VjY2Vzc2Z1bCBhY2Nlc3MKLQotc25tcF92ZXJzaW9uPXYzCi0uIC4vU3YzdmFjbWNvbmZpZwotCi1TVEFSVEFHRU5UCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMSAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBTVFJJTkc6IgotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtdjMgLWEgTUQ1IC1BIGluaXRpYWxfdGVzdF9wYXNzX2F1dGggLXUgaW5pdGlhbDIgLWwgYW5wICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIiAKLQotQ0hFQ0sgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IFRpbWV0aWNrczogIgotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE0MHNubXB2MXZhY21nZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDA1MTAwMDguLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTQwc25tcHYxdmFjbWdldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwzNSArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjEgdmFjbSBkZW5pYWwgc3VwcG9ydAotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5MSB0ZXN0Y29tbXVuaXR5MgotIyB0ZXN0Y29tbXVuaXR5MSBjYW4gYWNjZXNzIC4xLjMuNi4xLjIuMS4xLjEsIG90aGVycyBhcmUgZGVuaWVkCi0jIHRlc3Rjb21tdW5pdHkyIGNhbiBhY2Nlc3MgYWxsIGV4Y2VwdCAuMS4zLjYuMS4yLjEuMS4xCi0jIFRoaXMgY2FzZSB0ZXN0IGZvciBkZW5pZWQgYWNjZXNzCi0KLXNubXBfdmVyc2lvbj12MQotLiAuL1N2YWNtY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuMy4wIgotCi1DSEVDS09SRElFICJSZWFzb246IChub1N1Y2hOYW1lKSBUaGVyZSBpcyBubyBzdWNoIHZhcmlhYmxlIG5hbWUgaW4gdGhpcyBNSUIuIgotCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkyIC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiCi0KLUNIRUNLT1JESUUgIlJlYXNvbjogKG5vU3VjaE5hbWUpIFRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgbmFtZSBpbiB0aGlzIE1JQi4iCi0KLVNUT1BBR0VOVAotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMTQxc25tcHYyY3ZhY21nZXRmYWlsCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjMmVkMzM3Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE0MXNubXB2MmN2YWNtZ2V0ZmFpbAorKysgL2Rldi9udWxsCkBAIC0xLDQ2ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIFNOTVB2MiB2YWNtIGRlbmlhbCBzdXBwb3J0Ci0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotU0tJUElGIE5FVFNOTVBfRElTQUJMRV9TRVRfU1VQUE9SVAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkxIHRlc3Rjb21tdW5pdHkyCi0jIHRlc3Rjb21tdW5pdHkxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgb3RoZXJzIGFyZSBkZW5pZWQKLSMgdGVzdGNvbW11bml0eTIgY2FuIGFjY2VzcyBhbGwgZXhjZXB0IC4xLjMuNi4xLjIuMS4xLjEKLSMgVGhpcyBjYXNlIHRlc3QgZm9yIGRlbmllZCBhY2Nlc3MKLQotc25tcF92ZXJzaW9uPXYyYwotLiAuL1N2YWNtY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgotCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MiAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjEuMCIKLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjEuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgotCi1DQVBUVVJFICJzbm1wc2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5MSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgotQ0hFQ0tPUkRJRSAiUmVhc29uOiBub0FjY2VzcyIKLQotQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eTIgLXYgMmMgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS41LjAgcyBkdW1teSIKLUNIRUNLT1JESUUgIlJlYXNvbjogbm9BY2Nlc3MiCi0KLUNBUFRVUkUgInNubXBzZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Ryd2NvbW11bml0eSAtdiAyYyAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjUuMCBzIGR1bW15IgotQ0hFQ0tPUkRJRSAiLjEuMy42LjEuMi4xLjEuNS4wID0gU1RSSU5HOiBkdW1teSIKLQotQ0FQVFVSRSAic25tcHNldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdHJvY29tbXVuaXR5IC12IDJjICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjEuNS4wIHMgZHVtbXkiCi1DSEVDS09SRElFICJSZWFzb246IG5vQWNjZXNzIgotCi1TVE9QQUdFTlQKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE0MnNubXB2M3ZhY21nZXRmYWlsIGIvdGVzdGluZy90ZXN0cy9UMTQyc25tcHYzdmFjbWdldGZhaWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDhmN2ViOWMuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMTQyc25tcHYzdmFjbWdldGZhaWwKKysrIC9kZXYvbnVsbApAQCAtMSwzMiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiBTTk1QdjMgdmFjbSBkZW5pYWwgc3VwcG9ydAotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBDb25maWd1cmF0aW9uOgotI2luaXRpYWwxIGNhbiBhY2Nlc3MgLjEuMy42LjEuMi4xLjEuMSwgZGVueSBvdGhlcnMKLSNpbml0aWFsMiBjYW4gYWNjZXNzIGFsbCBleGNlcHQgLjEuMy42LjEuMi4xLjEuMSAKLSNUaGlzIGNhc2UgdGVzdCBmb3IgZGVuaWVkIGFjY2VzcwotCi1zbm1wX3ZlcnNpb249djMKLS4gLi9TdjN2YWNtY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLXYzIC1hIE1ENSAtQSBpbml0aWFsX3Rlc3RfcGFzc19hdXRoIC11IGluaXRpYWwxIC1sIGFucCAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4xLjMuMCIgCi0KLUNIRUNLT1JESUUgIi4xLjMuNi4xLjIuMS4xLjMuMCA9IE5vIFN1Y2ggT2JqZWN0IGF2YWlsYWJsZSBvbiB0aGlzIGFnZW50IGF0IHRoaXMgT0lEIgotCi0KLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC12MyAtYSBNRDUgLUEgaW5pdGlhbF90ZXN0X3Bhc3NfYXV0aCAtdSBpbml0aWFsMiAtbCBhbnAgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMS4xLjAiIAotCi1DSEVDS09SRElFICIuMS4zLjYuMS4yLjEuMS4xLjAgPSBObyBTdWNoIE9iamVjdCBhdmFpbGFibGUgb24gdGhpcyBhZ2VudCBhdCB0aGlzIE9JRCIKLQotU1RPUEFHRU5UCi0KLUZJTklTSEVECmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNTBzb2xhcmlzaG9zdGNwdSBiL3Rlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMjhlOTM5Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE1MHNvbGFyaXNob3N0Y3B1CisrKyAvZGV2L251bGwKQEAgLTEsMzEgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgMXN0IENQVSBvbiBTb2xhcmlzIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCi0KLWlmIHRlc3QgInhgdW5hbWUgLXNgIiAhPSAieFN1bk9TIiA7IHRoZW4KLSAgICBTS0lQCi1maQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfREVWSUNFX01PRFVMRQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotIyBhc2sgZm9yIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgZmlyc3QgQ1BVIGluIHRoZSBzeXN0ZW0KLQotQ0FQVFVSRSAic25tcGdldG5leHQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4zLjIuMS4zLjc2NyIKLQotQ0hFQ0tPUkRJRSAiID0gU1RSSU5HOiBDUFUgIgotCi1TVE9QQUdFTlQKLSAgCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrIGIvdGVzdGluZy90ZXN0cy9UMTUxc29sYXJpc2hvc3RkaXNrCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmOTgxMWY1Li4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE1MXNvbGFyaXNob3N0ZGlzaworKysgL2Rldi9udWxsCkBAIC0xLDMxICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotSEVBREVSIGluaXRpYWwgbG9hZCBkZXZpY2Ugb24gU29sYXJpcyB1c2luZyBIT1NULVJFU09VUkNFUwotCi1pZiB0ZXN0IGB1bmFtZSAtc2AgIT0gIlN1bk9TIiA7IHRoZW4KLSAgICAjIGEgYm9ndXMgc2tpcCBmb3IgIXN1bnMKLSAgICBTS0lQSUZOT1QgWFhYWVlZWlpaCi1maQotCi1TS0lQSUZOT1QgVVNJTkdfSE9TVF9IUl9TWVNURU1fTU9EVUxFCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotIyBhc2sgZm9yIHRoZSBpbmRleCBvZiB0aGUgaW5pdGlhbCBkZXZpY2UgKGhyU3lzdGVtSW5pdGlhbExvYWREZXZpY2UuMCkKLUNBUFRVUkUgInNubXBnZXQgLU9uICRTTk1QX0ZMQUdTIC1jIHRlc3Rjb21tdW5pdHkgLXYgMSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIC4xLjMuNi4xLjIuMS4yNS4xLjMuMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLT1JESUUgIl4uMS4zLjYuMS4yLjEuMjUuMS4zLjAgPSBJTlRFR0VSOiIKLQotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUgYi90ZXN0aW5nL3Rlc3RzL1QxNTJob3N0dXB0aW1lCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxZTkwZDNmLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE1Mmhvc3R1cHRpbWUKKysrIC9kZXYvbnVsbApAQCAtMSwyNyArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiB1cHRpbWUgdXNpbmcgSE9TVC1SRVNPVVJDRVMKLQotU0tJUElGTk9UIFVTSU5HX0hPU1RfSFJfU1lTVEVNX01PRFVMRQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMQotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotIyBzdGFuZGFyZCBWMSBjb25maWd1cmF0aW9uOiB0ZXN0Y29tbXVuaXR5Ci0uIC4vU3YxY29uZmlnCi0KLVNUQVJUQUdFTlQKLQotQ0FQVFVSRSAic25tcGdldCAtT24gJFNOTVBfRkxBR1MgLWMgdGVzdGNvbW11bml0eSAtdiAxICRTTk1QX1RSQU5TUE9SVF9TUEVDOiRTTk1QX1RFU1RfREVTVCRTTk1QX1NOTVBEX1BPUlQgLjEuMy42LjEuMi4xLjI1LjEuMS4wIgotCi1TVE9QQUdFTlQKLSAgICAKLUNIRUNLT1JESUUgIl4uMS4zLjYuMS4yLjEuMjUuMS4xLjAgPSBUaW1ldGlja3M6IgotCi1GSU5JU0hFRAotCmRpZmYgLS1naXQgYS90ZXN0aW5nL3Rlc3RzL1QxNTNzb2xhcmlzc3dhcCBiL3Rlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwNGUyZTNjLi4wMDAwMDAwCi0tLSBhL3Rlc3RpbmcvdGVzdHMvVDE1M3NvbGFyaXNzd2FwCisrKyAvZGV2L251bGwKQEAgLTEsMzIgKzAsMCBAQAotIyEvYmluL3NoCi0KLS4gLi4vZXZhbF90b29scy5zaAotCi1IRUFERVIgc3dhcCBvbiBTb2xhcmlzIHVzaW5nIEhPU1QtUkVTT1VSQ0VTCi0KLWlmIHRlc3QgYHVuYW1lIC1zYCAhPSAiU3VuT1MiIDsgdGhlbgotICAgICMgYSBib2d1cyBza2lwIGZvciAhc3VucwotICAgIFNLSVBJRk5PVCBYWFhZWVlaWloKLWZpCi0KLVNLSVBJRk5PVCBVU0lOR19IT1NUX0hSX1NUT1JBR0VfTU9EVUxFCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYxCi0KLSMKLSMgQmVnaW4gdGVzdAotIwotCi0jIHN0YW5kYXJkIFYxIGNvbmZpZ3VyYXRpb246IHRlc3Rjb21tdW5pdHkKLS4gLi9TdjFjb25maWcKLQotU1RBUlRBR0VOVAotCi0jIGFzayBmb3IgaHJTdG9yYWdlU2l6ZS4xMCB3aGljaCByZXBvcnRzIG92ZXJhbGwgc3dhcCBzaXplCi1DQVBUVVJFICJzbm1wZ2V0IC1PbiAkU05NUF9GTEFHUyAtYyB0ZXN0Y29tbXVuaXR5IC12IDEgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMS4zLjYuMS4yLjEuMjUuMi4zLjEuNS4xMCIKLQotU1RPUEFHRU5UCi0KLUNIRUNLT1JESUUgIl4uMS4zLjYuMS4yLjEuMjUuMi4zLjEuNS4xMCA9IElOVEVHRVI6IgotCi1GSU5JU0hFRApkaWZmIC0tZ2l0IGEvdGVzdGluZy90ZXN0cy9UMTYwc25tcG5ldHN0YXQgYi90ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTVkZTU0Yy4uMDAwMDAwMAotLS0gYS90ZXN0aW5nL3Rlc3RzL1QxNjBzbm1wbmV0c3RhdAorKysgL2Rldi9udWxsCkBAIC0xLDU1ICswLDAgQEAKLSMhL2Jpbi9zaAotCi0uIC4uL2V2YWxfdG9vbHMuc2gKLQotIyBzbm1wbmV0c3RhdCB0ZXN0IG9ubHkgd29ya3Mgd2l0aCBVRFAgb3IgVENQCi1pZiBbICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gIngiIC1vICJ4JFNOTVBfVFJBTlNQT1JUX1NQRUMiID0gInh1ZHAiIF07IHRoZW4KLSAgcHJvdG89dWRwCi0gIFNLSVBJRk5PVCBVU0lOR19NSUJJSV9VRFBUQUJMRV9NT0RVTEUKLWVsaWYgWyAieCRTTk1QX1RSQU5TUE9SVF9TUEVDIiA9ICJ4dGNwIiBdOyB0aGVuCi0gIHByb3RvPXRjcAotICBTS0lQSUZOT1QgVVNJTkdfTUlCSUlfVENQVEFCTEVfTU9EVUxFCi1lbHNlCi0gIEhFQURFUiAiaWYgc25tcG5ldHN0YXQgZmluZHMgdGhlIHJ1bm5pbmcgYWdlbnQgaW4gdWRwVGFibGUvdGNwVGFibGUiCi0gIFNLSVAKLWZpCi0KLUhFQURFUiAiaWYgc25tcG5ldHN0YXQgZmluZHMgdGhlIHJ1bm5pbmcgYWdlbnQgaW4gJHtwcm90b31UYWJsZSIKLQotIyBvbiBzb21lIHN5c3RlbXMgdGhlIGFnZW50IG5lZWRzIHRvIGJlIHJ1biBhcyByb290IHRvIGFjY2VzcyB1ZHBUYWJsZS90Y3BUYWJsZQotIyAtIGVsc2UgZm9yY2Ugc2tpcAotY2FzZSAieGB1bmFtZSAtc2AiIGluCi0gIHhBSVgpICAgICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVA7OwotICB4SFAtVVgpICAgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQOzsKLSAgeElSSVgqKSAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUDs7Ci0gIHhOZXRCU0QpICBbICJ4YGlkIC11YCIgIT0gIngwIiBdICYmIFNLSVA7OwotICB4T3BlbkJTRCkgWyAieGBpZCAtdWAiICE9ICJ4MCIgXSAmJiBTS0lQOzsKLSAgeE9TRjEpICAgIFsgInhgaWQgLXVgIiAhPSAieDAiIF0gJiYgU0tJUDs7Ci1lc2FjCi0KLVNLSVBJRiBORVRTTk1QX0RJU0FCTEVfU05NUFYyQwotCi0jIG1ha2Ugc3VyZSBzbm1wbmV0c3RhdCBjYW4gYmUgZXhlY3V0ZWQKLVNOTVBORVRTVEFUPSIke1NOTVBfVVBESVJ9L2FwcHMvc25tcG5ldHN0YXQvc25tcG5ldHN0YXQiCi1bIC14ICIkU05NUE5FVFNUQVQiIF0gfHwgU0tJUAotCi1zbm1wX3ZlcnNpb249djJjCi0uIC4vU3YyY2NvbmZpZwotCi0jCi0jIEJlZ2luIHRlc3QKLSMKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICIkU05NUE5FVFNUQVQgLUNuIC1DcCAkcHJvdG8gLSRzbm1wX3ZlcnNpb24gLWMgdGVzdGNvbW11bml0eSAkU05NUF9UUkFOU1BPUlRfU1BFQzokU05NUF9URVNUX0RFU1QkU05NUF9TTk1QRF9QT1JUIgotQ0hFQ0tFWEFDVCAiMTI3LjAuMC4xLiRTTk1QX1NOTVBEX1BPUlQiCi0jIG11bHRpcGxlIG9jY3VycmVuY2VzIChlc3BlY2lhbGx5IGluIHRjcFRhYmxlKSBhcmUgZmluZQotaWYgWyAiJHNubXBfbGFzdF90ZXN0X3Jlc3VsdCIgIT0gMCBdIDsgdGhlbgotICAgIHJldHVybl92YWx1ZT0wCi1lbHNlCi0gICAgcmV0dXJuX3ZhbHVlPTEKLWZpCi0KLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3Rlc3RpbmcvdGVzdHMvVDIwMHNubXB2MmN3YWxrYWxsIGIvdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDIzODgyMzUuLjAwMDAwMDAKLS0tIGEvdGVzdGluZy90ZXN0cy9UMjAwc25tcHYyY3dhbGthbGwKKysrIC9kZXYvbnVsbApAQCAtMSw0MiArMCwwIEBACi0jIS9iaW4vc2gKLQotLiAuLi9ldmFsX3Rvb2xzLnNoCi0KLUhFQURFUiAiZnVsbCBzbm1wd2FsayAoU05NUHYyYykgYWdhaW5zdCBhZ2VudCAobWF5IHRha2UgdGltZSkiCi0KLWlmIHRlc3QgYHVuYW1lIC1zYCA9ICJIUC1VWCIgOyB0aGVuCi0gICAgaWYgdGVzdCBgaWQgLXVgICE9ICIwIiA7IHRoZW4KLSAgICAgICAgIyBUaGUgYWdlbnQgbmVlZHMgdG8gYmUgcnVuIGFzIHJvb3QgLSBlbHNlIGZvcmNlIHNraXAKLSAgICAgICAgU0tJUAotICAgIGZpCi1maQotCi1TS0lQSUYgTkVUU05NUF9ESVNBQkxFX1NOTVBWMkMKLQotIyBtYWtlIHN1cmUgc25tcHdhbGsgY2FuIGJlIGV4ZWN1dGVkCi1TTk1QV0FMSz0iJHtTTk1QX1VQRElSfS9hcHBzL3NubXB3YWxrIgotWyAteCAiJFNOTVBXQUxLIiBdIHx8IFNLSVAKLQotc25tcF92ZXJzaW9uPXYyYwotLiAuL1N2MmNjb25maWcKLQotIwotIyBCZWdpbiB0ZXN0Ci0jCi0KLSMgaGlnaGVyIHRpbWVvdXQvcmV0cnkgdmFsdWVzIGZvciBzYWZldHkKLVRJTUVPVVQ9MTAKLVJFVFJZPTUKLQotU1RBUlRBR0VOVAotCi1DQVBUVVJFICIkU05NUFdBTEsgJFNOTVBfRkxBR1MgLSRzbm1wX3ZlcnNpb24gLWMgdGVzdGNvbW11bml0eSAtdCAkVElNRU9VVCAtciAkUkVUUlkgJFNOTVBfVFJBTlNQT1JUX1NQRUM6JFNOTVBfVEVTVF9ERVNUJFNOTVBfU05NUERfUE9SVCAuMSIKLWlmIElTREVGSU5FRCBVU0lOR19XSU5FWFRETExfTU9EVUxFOyB0aGVuCi0gIDoKLWVsc2UKLSAgQ0hFQ0tBTkRESUUgIj0gV3JvbmcgVHlwZSAoc2hvdWxkIGJlICIKLWZpCi1DSEVDS09SRElFICJObyBtb3JlIHZhcmlhYmxlcyBsZWZ0IGluIHRoaXMgTUlCIFZpZXciCi0KLVNUT1BBR0VOVAotRklOSVNIRUQKZGlmZiAtLWdpdCBhL3dpbjMyL0NvbmZpZ3VyZSBiL3dpbjMyL0NvbmZpZ3VyZQpvbGQgbW9kZSAxMDA2NDQKbmV3IG1vZGUgMTAwNzU1CmluZGV4IDk4ZmEzZmQuLmEzNmRiMGIKLS0tIGEvd2luMzIvQ29uZmlndXJlCisrKyBiL3dpbjMyL0NvbmZpZ3VyZQpAQCAtNyw2ICs3LDcgQEAKIHVzZSBHZXRvcHQ6Okxvbmc7CiB1c2Ugc3RyaWN0OwogCitteSAkdmVyc2lvbiA9ICJ1bmtub3duIjsKIG15ICRjb25maWc7CiBteSAkc2RrID0gMDsKIG15ICRsaW5rdHlwZTsKQEAgLTg1LDQ1ICs4Niw3MyBAQAogCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwotIyBDcmVhdGUgbWFpbiBNYWtlZmlsZQorIyBEZXRlcm1pbmUgdmVyc2lvbiBmcm9tIHVuaXggY29uZmlndXJlIHNjcmlwdAogIwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworbXkgJHVuaXhfY29uZmlndXJlX2luID0gIi4uL2NvbmZpZ3VyZSI7CisKK29wZW4gKFVOSVhfQ09ORklHVVJFX0lOLCAiPCR1bml4X2NvbmZpZ3VyZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkdW5peF9jb25maWd1cmVfaW5cbiI7CisKK3doaWxlICg8VU5JWF9DT05GSUdVUkVfSU4+KQogewotICBteSAkbWFrZWZpbGVfb3V0ID0gIk1ha2VmaWxlIjsKLSAgbXkgJG1ha2VmaWxlX2luICA9ICJNYWtlZmlsZS5pbiI7Ci0KLSAgb3BlbiAoTUFLRV9PVVQsICI+JG1ha2VmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfb3V0XG4iOwotICBvcGVuIChNQUtFX0lOLCAiPCRtYWtlZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRtYWtlZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxNQUtFX0lOPikKLSAgewotICAgIGNob21wOwotICAgIGlmICgkc2RrID09IDEpIHsKLSAgICAgIHMvXlNESz0vU0RLPXRydWUvOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgIHMvXlNESz0vU0RLPWZhbHNlLzsKLSAgICB9Ci0KLSAgICBzL15MSU5LVFlQRT0vTElOS1RZUEU9JGxpbmt0eXBlLzsKLSAgICBzL15DRkc9L0NGRz0kY29uZmlnLzsKLSAgICBzL15QUkVGSVg9L1BSRUZJWD0kcHJlZml4LzsKLSAgICBzL15QUkVGSVhfRE9TPS9QUkVGSVhfRE9TPSRwcmVmaXhkb3MvOwotICAgIHMvXlNTTD0uKi9TU0w9JG9wZW5zc2wvOwotCi0gICAgcHJpbnQgTUFLRV9PVVQgJF8gLiAiXG4iOworICBjaG9tcDsKKyAgL1BBQ0tBR0VfVkVSU0lPTj0nKC4qKScvOworICBpZiAoJDEgbmUgIiIpIHsKKyAgICAkdmVyc2lvbiA9ICQxOworICAgIGxhc3Q7CiAgIH0KIH0KIAorIyBBcmd1bWVudHM6CisjICQxOiBOYW1lIG9mIG91dHB1dCBmaWxlCisjICQyOiBOYW1lIG9mIGlucHV0IGZpbGUKKyMgJDM6IFJlZmVyZW5jZSB0byBhIGhhc2ggd2l0aCBzdWJzdGl0dXRpb25zLiBBIHN1YnN0aXR1dGlvbiBpcyBhbiBhcnJheSB3aXRoCisjICAgICB0d28gZWxlbWVudHMgd2hlcmUgZWxlbWVudCBbMF0gaXMgdGhlIHBhdHRlcm4gdG8gc2VhcmNoIGZvciBhbmQgZWxlbWVudAorIyAgICAgWzFdIHRoZSByZXBsYWNlbWVudCB0ZXh0Lgorc3ViIHN1YnN0aXR1dGUKK3sKKyAgbXkgJG91dCAgPSBzaGlmdDsKKyAgbXkgJGluICAgPSBzaGlmdDsKKyAgbXkgJHN1YnMgPSBzaGlmdDsKKworICBvcGVuIChPVVQsICI+JG91dCIpIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAkb3V0XG4iOworICBvcGVuIChJTiwgICI8JGluIikgIHx8IGRpZSAiQ2FuJ3Qgb3BlbiAkaW5cbiI7CisKKyAgcHJpbnQgImNyZWF0aW5nICRvdXRcbiI7CisKKyAgd2hpbGUgKDxJTj4pIHsKKyAgICBjaG9tcDsKKyAgICBmb3JlYWNoIG15ICRlIChrZXlzICUkc3VicykgeworICAgICAgICBteSAkcCA9ICQkc3Vic3skZX1bMF07CisgICAgICAgIG15ICRxID0gJCRzdWJzeyRlfVsxXTsKKyAgICAgICAgcy8kcC8kcS87CisgICAgfQorICAgIHByaW50IE9VVCAkXyAuICJcbiI7CisgIH0KKworICBjbG9zZSBJTjsKKyAgY2xvc2UgT1VUOworfQorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIwotIyBDcmVhdGUgTWFrZWZpbGVzIGZvciBhcHBsaWNhdGlvbnMgZnJvbQotIyBNYWtlZmlsZS1hcHBzLmluCi0jIChleGNlcHQgZm9yIHNubXBuZXRzdGF0KQorIyBQZXJmb3JtIHN1YnN0aXR1dGlvbnMKICMKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCitteSAlc3VicyA9ICgKKyAgICAiY2ZnIiA9PiBbICJeQ0ZHPSIsICAgICAgICAiQ0ZHPSRjb25maWciICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAiaW50IiA9PiBbICJeSU5URElSPSIsICAgICAiSU5URElSPS5cXCRjb25maWciICAgICAgICAgICAgICAgICAgXSwKKyAgICAibG5rIiA9PiBbICJeTElOS1RZUEU9IiwgICAiTElOS1RZUEU9JGxpbmt0eXBlIiAgICAgICAgICAgICAgICAgXSwKKyAgICAib3V0IiA9PiBbICJeT1VURElSPSIsICAgICAiT1VURElSPS5cXCRjb25maWciICAgICAgICAgICAgICAgICAgXSwKKyAgICAicGZ4IiA9PiBbICJeUFJFRklYPSIsICAgICAiUFJFRklYPSRwcmVmaXgiICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAiZG9zIiA9PiBbICJeUFJFRklYX0RPUz0iLCAiUFJFRklYX0RPUz0kcHJlZml4ZG9zIiAgICAgICAgICAgICAgXSwKKyAgICAic2RrIiA9PiBbICJeU0RLPSIsICAgICAgICAkc2RrID09IDEgPyAiU0RLPXRydWUiIDogIlNESz1mYWxzZSIgXSwKKyAgICApOworCitzdWJzdGl0dXRlKCJNYWtlZmlsZSIsICJNYWtlZmlsZS5pbiIsIFwlc3Vicyk7CitzdWJzdGl0dXRlKCJsb2NhbC9NYWtlZmlsZSIsICJsb2NhbC9NYWtlZmlsZS5pbiIsIFwlc3Vicyk7CisKIG15IEBwcm9ncmFtcyA9IHF3CiAvZW5jb2RlX2tleWNoYW5nZQogc25tcGJ1bGtnZXQKQEAgLTE0NCwyNzAgKzE3Myw1MSBAQAogLzsKIAogZm9yZWFjaCBteSAkcHJvZ05hbWUgKEBwcm9ncmFtcykgewotCi0gIG15ICRtYWtlZmlsZV9vdXQgPSAiJHByb2dOYW1lXFxNYWtlZmlsZSI7Ci0gIG15ICRtYWtlZmlsZV9pbiA9ICJNYWtlZmlsZS1hcHBzLmluIjsKLQotICBteSAkb3V0ZGlyID0gJGNvbmZpZzsKLSAgbXkgJGludGRpciA9ICRjb25maWc7Ci0KLSAgb3BlbiAoTUFLRV9PVVQsICI+JG1ha2VmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfb3V0XG4iOwotICBvcGVuIChNQUtFX0lOLCAiPCRtYWtlZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRtYWtlZmlsZV9vdXRcbiI7Ci0KLSAgd2hpbGUgKDxNQUtFX0lOPikKLSAgewotICAgIGNob21wOwotCi0gICAgcy9eTElOS1RZUEU9L0xJTktUWVBFPSRsaW5rdHlwZS87Ci0gICAgcy9eUFJPR05BTUU9L1BST0dOQU1FPSRwcm9nTmFtZS87Ci0gICAgcy9eQ0ZHPS9DRkc9JGNvbmZpZy87Ci0gICAgcy9eT1VURElSPS9PVVRESVI9LlxcJG91dGRpci87Ci0gICAgcy9eSU5URElSPS9JTlRESVI9LlxcJGludGRpci87Ci0gICAgcy9eU1NMPS4qL1NTTD0kb3BlbnNzbC87Ci0KLSAgICBwcmludCBNQUtFX09VVCAkXyAuICJcbiI7Ci0gIH0KKyAgICAkc3Vic3sicHJnIn0gPSBbICJeUFJPR05BTUU9IiwgIlBST0dOQU1FPSRwcm9nTmFtZSIgXTsKKyAgICBzdWJzdGl0dXRlKCIkcHJvZ05hbWUvTWFrZWZpbGUiLCAiTWFrZWZpbGUtYXBwcy5pbiIsIFwlc3Vicyk7CiB9CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIENyZWF0ZSBNYWtlZmlsZXMgZm9yIHNubXBuZXRzdGF0IGZyb20KLSMgc25tcG5ldHN0YXRcTWFrZWZpbGUuaW4KLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1teSBAcHJvZ3JhbXMgPSBxdwotL3NubXBuZXRzdGF0Ci0vOwotCi1mb3JlYWNoIG15ICRwcm9nTmFtZSAoQHByb2dyYW1zKSB7Ci0KLSAgbXkgJG1ha2VmaWxlX291dCA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlIjsKLSAgbXkgJG1ha2VmaWxlX2luID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUuaW4iOwotCi0gIG15ICRvdXRkaXIgPSAkY29uZmlnOwotICBteSAkaW50ZGlyID0gJGNvbmZpZzsKLQotICBvcGVuIChNQUtFX09VVCwgIj4kbWFrZWZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKE1BS0VfSU4sICI8JG1ha2VmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJG1ha2VmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPE1BS0VfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0KLSAgICBzL15MSU5LVFlQRT0vTElOS1RZUEU9JGxpbmt0eXBlLzsKLSAgICBzL15QUk9HTkFNRT0vUFJPR05BTUU9JHByb2dOYW1lLzsKLSAgICBzL15DRkc9L0NGRz0kY29uZmlnLzsKLSAgICBzL15PVVRESVI9L09VVERJUj0uXFwkb3V0ZGlyLzsKLSAgICBzL15JTlRESVI9L0lOVERJUj0uXFwkaW50ZGlyLzsKLSAgICBzL15TU0w9LiovU1NMPSRvcGVuc3NsLzsKLQotICAgIHByaW50IE1BS0VfT1VUICRfIC4gIlxuIjsKLSAgfQorZm9yZWFjaCBteSAkcHJvZ05hbWUgKCJsaWJhZ2VudCIsICJsaWJuZXRzbm1wdHJhcGQiLCAibG9jYWwiLAorICAgICAgICAgICAgICAgICAgICAgICJuZXRzbm1wbWlicyIsICJzbm1wZCIsICJzbm1wdHJhcGQiLCAic25tcG5ldHN0YXQiLAorICAgICAgICAgICAgICAgICAgICAgICRsaW5rdHlwZSBlcSAiZHluYW1pYyIgPyAibGlic25tcF9kbGwiIDogImxpYnNubXAiKSB7CisgICAgJHN1YnN7InByZyJ9ID0gWyAiXlBST0dOQU1FPSIsICJQUk9HTkFNRT0kcHJvZ05hbWUiIF07CisgICAgc3Vic3RpdHV0ZSgiJHByb2dOYW1lL01ha2VmaWxlIiwgIiRwcm9nTmFtZS9NYWtlZmlsZS5pbiIsIFwlc3Vicyk7CiB9CiAKK215ICVzdWJzID0gKAorICAgICJlbnYiID0+IFsgIlxARU5WX1NFUEFSQVRPUlxAIiwgIjsiIF0KKyk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIENyZWF0ZSBNYWtlZmlsZXMgZm9yIGxpYnJhcmllcwotIyBmcm9tIG5hbWVcTWFrZWZpbGUuaW4KLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1teSBAcHJvZ3JhbXMgPSBxdwotL2xpYmFnZW50Ci1saWJoZWxwZXJzCi1saWJuZXRzbm1wdHJhcGQKLS87CitzdWJzdGl0dXRlKCIuLi9sb2NhbC9zbm1wY29uZiIsICIuLi9sb2NhbC9zbm1wY29uZi5pbiIsIFwlc3Vicyk7CiAKLWlmICgkc2RrID09IDEpIHsKLSAgcHVzaCAoQHByb2dyYW1zLCAibmV0c25tcG1pYnNzZGsiKTsKKworbXkgJXN1YnMgPSAoCisgICAgInZlciIgPT4gWyAiXiNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OLioiLAorICAgICAgICAgICAgICAgIiNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OIFwiJHZlcnNpb25cIiIgXQorICAgICk7CitpZiAoJHByZWZpeCBuZSAiIikgeworICAgICRzdWJzeyJwZngifSA9IFsgIl4jZGVmaW5lIElOU1RBTExfQkFTRS4qIiwgIiNkZWZpbmUgSU5TVEFMTF9CQVNFIFwiJHByZWZpeFwiIiBdOwogfQotZWxzZSB7Ci0gIHB1c2ggKEBwcm9ncmFtcywgIm5ldHNubXBtaWJzIik7Ci19Ci0KIGlmICgkbGlua3R5cGUgZXEgImR5bmFtaWMiKSB7Ci0gIHB1c2ggKEBwcm9ncmFtcywgImxpYnNubXBfZGxsIik7CisgICAgJHN1YnN7ImRsbCJ9ID0gWyAiXi4qI3VuZGVmIE5FVFNOTVBfVVNFX0RMTC4qIiwgIiNkZWZpbmUgTkVUU05NUF9VU0VfRExMIDEiIF07CiB9Ci1lbHNlIHsKLSAgcHVzaCAoQHByb2dyYW1zLCAibGlic25tcCIpOwotfQotCi1mb3JlYWNoIG15ICRwcm9nTmFtZSAoQHByb2dyYW1zKSB7Ci0KLSAgbXkgJG1ha2VmaWxlX291dCA9ICIkcHJvZ05hbWVcXE1ha2VmaWxlIjsKLSAgbXkgJG1ha2VmaWxlX2luID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUuaW4iOwotCi0gIG15ICRvdXRkaXIgPSAkY29uZmlnOwotICBteSAkaW50ZGlyID0gJGNvbmZpZzsKLQotICBvcGVuIChNQUtFX09VVCwgIj4kbWFrZWZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKE1BS0VfSU4sICI8JG1ha2VmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRtYWtlZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJG1ha2VmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPE1BS0VfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0KLSAgICBzL15QUk9HTkFNRT0vUFJPR05BTUU9JHByb2dOYW1lLzsKLSAgICBzL15DRkc9L0NGRz0kY29uZmlnLzsKLSAgICBzL15PVVRESVI9L09VVERJUj0uXFwkb3V0ZGlyLzsKLSAgICBzL15JTlRESVI9L0lOVERJUj0uXFwkaW50ZGlyLzsKLSAgICBzL15TU0w9LiovU1NMPSRvcGVuc3NsLzsKLSAgICBpZiAoJGJfd2luZXh0ZGxsID09IDEpIHsKLSAgICAgIHMvIyguKj8pXHMrIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTC4qLyQxLzsKLSAgICAgIHMvXkxJQjMyX0ZMQUdTPSguKikvTElCMzJfRkxBR1M9TWdtdEFQSS5saWIgc25tcGFwaS5saWIgJDEvOwotICAgIH0KLSAgICBwcmludCBNQUtFX09VVCAkXyAuICJcbiI7Ci0gIH0KLX0KLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMKLSMgQ3JlYXRlIE1ha2VmaWxlcyBmb3IgZGFlbW9ucwotIyBmcm9tIG5hbWVcTWFrZWZpbGUuaW4KLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1teSBAcHJvZ3JhbXMgPSBxdwotL3NubXB0cmFwZAotLzsKLQogaWYgKCRzZGsgPT0gMSkgewotICBwdXNoIChAcHJvZ3JhbXMsICJzbm1wZHNkayIpOworICAgICRzdWJzeyJzZGsifSA9IFsgIl4uKiN1bmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESy4qIiwgIiNkZWZpbmUgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgMSIgXTsKIH0KLWVsc2UgewotICBwdXNoIChAcHJvZ3JhbXMsICJzbm1wZCIpOworaWYgKCRvcGVuc3NsID09IDEpIHsKKyAgICAkc3Vic3sic3NsIn0gPSBbICJeLiojdW5kZWYgTkVUU05NUF9VU0VfT1BFTlNTTC4qIiwgIiNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxIiBdOworfSBlbHNlIHsKKyAgICAkc3Vic3sic3NsIn0gPSBbICJeLiojdW5kZWYgTkVUU05NUF9VU0VfSU5URVJOQUxfTUQ1LioiLCAiI2RlZmluZSBORVRTTk1QX1VTRV9JTlRFUk5BTF9NRDUgMSIgXTsKK30KK2lmICgkYl9pcHY2ID09IDEpIHsKKyAgICAkc3Vic3siaXB2NiJ9ID0gWyAiXi4qI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYuKiIsICIjZGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lQVjYgMSIgXTsKK30KK2lmICgkYl93aW5leHRkbGwgPT0gMSkgeworICAgICRzdWJzeyJ3aW5leHRkbGwifSA9IFsgIl4uKiN1bmRlZiBVU0lOR19XSU5FWFRETExfTU9EVUxFLioiLCAiI2RlZmluZSBVU0lOR19XSU5FWFRETExfTU9EVUxFIDEiIF07CiB9CiAKLWZvcmVhY2ggbXkgJHByb2dOYW1lIChAcHJvZ3JhbXMpIHsKLQotICBteSAkbWFrZWZpbGVfb3V0ID0gIiRwcm9nTmFtZVxcTWFrZWZpbGUiOwotICBteSAkbWFrZWZpbGVfaW4gPSAiJHByb2dOYW1lXFxNYWtlZmlsZS5pbiI7Ci0KLSAgbXkgJG91dGRpciA9ICRjb25maWc7Ci0gIG15ICRpbnRkaXIgPSAkY29uZmlnOwotCi0gIG9wZW4gKE1BS0VfT1VULCAiPiRtYWtlZmlsZV9vdXQiKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX291dFxuIjsKLSAgb3BlbiAoTUFLRV9JTiwgIjwkbWFrZWZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX2luXG4iOwotCi0gIHByaW50ICJjcmVhdGluZyAkbWFrZWZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8TUFLRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLQotICAgIHMvXkxJTktUWVBFPS9MSU5LVFlQRT0kbGlua3R5cGUvOwotICAgIHMvXlBST0dOQU1FPS9QUk9HTkFNRT0kcHJvZ05hbWUvOwotICAgIHMvXkNGRz0vQ0ZHPSRjb25maWcvOwotICAgIHMvXk9VVERJUj0vT1VURElSPS5cXCRvdXRkaXIvOwotICAgIHMvXklOVERJUj0vSU5URElSPS5cXCRpbnRkaXIvOwotICAgIHMvXlNTTD0uKi9TU0w9JG9wZW5zc2wvOwotCi0gICAgcHJpbnQgTUFLRV9PVVQgJF8gLiAiXG4iOwotICB9Ci19Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jCi0jIENyZWF0ZSBNYWtlZmlsZSBmb3IgUGVybCBzY3JpcHRzIGluIGxvY2FsCi0jIGZyb20gbG9jYWxcTWFrZWZpbGUuaW4KLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0KLW15ICRtYWtlZmlsZV9vdXQgPSAibG9jYWxcXE1ha2VmaWxlIjsKLW15ICRtYWtlZmlsZV9pbiA9ICJsb2NhbFxcTWFrZWZpbGUuaW4iOwotCi1teSAkb3V0ZGlyID0gJGNvbmZpZzsKLQotb3BlbiAoTUFLRV9PVVQsICI+JG1ha2VmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkbWFrZWZpbGVfb3V0XG4iOwotb3BlbiAoTUFLRV9JTiwgIjwkbWFrZWZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJG1ha2VmaWxlX2luXG4iOwotCi1wcmludCAiY3JlYXRpbmcgJG1ha2VmaWxlX291dFxuIjsKLQotd2hpbGUgKDxNQUtFX0lOPikKLXsKLSAgY2hvbXA7Ci0KLSAgcy9eT1VURElSPS9PVVRESVI9LlxcJG91dGRpci87Ci0gIHMvXlBSRUZJWD0vUFJFRklYPSRwcmVmaXgvOwotICBzL15QUkVGSVhfRE9TPS9QUkVGSVhfRE9TPSRwcmVmaXhkb3MvOwotCi0gIHByaW50IE1BS0VfT1VUICRfIC4gIlxuIjsKLX0KLQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBDcmVhdGUgbmV0LXNubXAtY29uZmlnLmgKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi17Ci0gIG15ICRmaWxlX291dCA9ICJuZXQtc25tcFxcbmV0LXNubXAtY29uZmlnLmgiOwotICBteSAkZmlsZV9pbiA9ICJuZXQtc25tcFxcbmV0LXNubXAtY29uZmlnLmguaW4iOwotCi0gIG9wZW4gKEZJTEVfT1VULCAiPiRmaWxlX291dCIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkZmlsZV9vdXRcbiI7Ci0gIG9wZW4gKEZJTEVfSU4sICI8JGZpbGVfaW4iKSB8fCBkaWUgIkNhbid0IE9wZW4gJGZpbGVfaW5cbiI7Ci0KLSAgcHJpbnQgImNyZWF0aW5nICRmaWxlX291dFxuIjsKLQotICB3aGlsZSAoPEZJTEVfSU4+KQotICB7Ci0gICAgY2hvbXA7Ci0KLSAgICBpZiAoJHByZWZpeCBuZSAiIikgewotICAgICAgcy9eI2RlZmluZSBJTlNUQUxMX0JBU0UuKi8jZGVmaW5lIElOU1RBTExfQkFTRSBcIiRwcmVmaXhcIi87Ci0gICAgfQotICAgIGlmICgkbGlua3R5cGUgZXEgImR5bmFtaWMiKSB7Ci0gICAgICBzL14uKiN1bmRlZiBORVRTTk1QX1VTRV9ETEwuKi8jZGVmaW5lIE5FVFNOTVBfVVNFX0RMTCAxLzsKLSAgICB9Ci0gICAgaWYgKCRzZGsgPT0gMSkgewotICAgICAgcy9eLiojdW5kZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsuKi8jZGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIDEvOwotICAgIH0KLSAgICBpZiAoJG9wZW5zc2wgPT0gMSkgewotICAgICAgcy9eLiojdW5kZWYgTkVUU05NUF9VU0VfT1BFTlNTTC4qLyNkZWZpbmUgTkVUU05NUF9VU0VfT1BFTlNTTCAxLzsKLSAgICB9Ci0gICAgaWYgKCRiX2lwdjYgPT0gMSkgewotICAgICAgcy9eLiojdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNi4qLyNkZWZpbmUgTkVUU05NUF9FTkFCTEVfSVBWNiAxLzsKLSAgICB9Ci0gICAgaWYgKCRiX3dpbmV4dGRsbCA9PSAxKSB7Ci0gICAgICBzL14uKiN1bmRlZiBVU0lOR19XSU5FWFRETExfTU9EVUxFLiovI2RlZmluZSBVU0lOR19XSU5FWFRETExfTU9EVUxFIDEvOwotICAgIH0KLQotICAgIHByaW50IEZJTEVfT1VUICRfIC4gIlxuIjsKLSAgfQotfQotCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIwotIyBDcmVhdGUgbGlic25tcC5kZWYgZmlsZSBmb3IgbGlic25tcF9kbGwKLSMKLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi1pZiAoJGxpbmt0eXBlIGVxICJkeW5hbWljIikKLXsKLSAgbXkgJGZpbGVfb3V0ID0gImxpYnNubXBfZGxsXFxsaWJzbm1wLmRlZiI7Ci0gIG15ICRmaWxlX2luID0gImxpYnNubXBfZGxsXFxsaWJzbm1wLmRlZi5pbiI7Ci0KLSAgb3BlbiAoRklMRV9PVVQsICI+JGZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRmaWxlX291dFxuIjsKLSAgb3BlbiAoRklMRV9JTiwgIjwkZmlsZV9pbiIpIHx8IGRpZSAiQ2FuJ3QgT3BlbiAkZmlsZV9pblxuIjsKLQotICBwcmludCAiY3JlYXRpbmcgJGZpbGVfb3V0XG4iOwotCi0gIHdoaWxlICg8RklMRV9JTj4pCi0gIHsKLSAgICBjaG9tcDsKLQotICAgIGlmICgkYl9pcHY2ID09ICIxIikgewotICAgICAgcy9eO2lwdjYvL2k7Ci0gICAgfQotCi0gICAgcHJpbnQgRklMRV9PVVQgJF8gLiAiXG4iOwotICB9Ci19Ci0KK3N1YnN0aXR1dGUoIm5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIiwgIm5ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluIiwKKyAgICAgICAgICAgXCVzdWJzKTsKIAogcHJpbnQgcXEvCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQxNiw2ICsyMjYsMTEgQEAKIAogLzsKIAoraWYgKCR2ZXJzaW9uIGVxICJ1bmtub3duIikgeworICAkdmVyc2lvbiA9ICJ1bmtub3duIC0gQ291bGQgbm90IGRldGVybWluZSB2ZXJzaW9uIGZyb20gLi4vY29uZmlndXJlISI7Cit9CisKK3ByaW50ICIgIFZlcnNpb246ICAgICAgICAgICAgICAgICAgICAkdmVyc2lvblxuIjsKIHByaW50ICIgIENvbmZpZyB0eXBlOiAgICAgICAgICAgICAgICAkY29uZmlnXG4iOwogcHJpbnQgIiAgU0RLOiAgICAgICAgICAgICAgICAgICAgICAgICIgLiAoJHNkayA9PSAxID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogcHJpbnQgIiAgTGluayB0eXBlOiAgICAgICAgICAgICAgICAgICRsaW5rdHlwZVxuIjsKZGlmZiAtLWdpdCBhL3dpbjMyL01ha2VmaWxlLWFwcHMuaW4gYi93aW4zMi9NYWtlZmlsZS1hcHBzLmluCmluZGV4IGI1ZmVkNjEuLmJjZmIyNmUgMTAwNjQ0Ci0tLSBhL3dpbjMyL01ha2VmaWxlLWFwcHMuaW4KKysrIGIvd2luMzIvTWFrZWZpbGUtYXBwcy5pbgpAQCAtMyw3ICszLDYgQEAKIE9VVERJUj0KIElOVERJUj0KIExJTktUWVBFPQotU1NMPQogCiAjIFNldCB0byAxIHRvIGFsbG93IHRoZSBidWlsZGluZyB1c2luZyB0aGUgRExMIHZlcnNpb24gb2YgU05NUExJQi4KIEFMTE9XX0RMTD0xCkBAIC0yNCw2ICsyMyw3IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgpAQCAtMzIsNyArMzIsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAogCiAhSUYgIiQoTElOS1RZUEUpIiA9PSAiZHluYW1pYyIKIENQUF9QUk9KPSQoQ1BQX1BST0opIC9EICJOTUFLRV9ORVRTTk1QX1VTRV9ETEwiCkBAIC03NCw3ICs3NCw3IEBACiBCU0MzMl9TQlJTPSBcCiAKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9vdXQ6Ii4uXGJpblwkKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAogTElOSzMyX09CSlM9IFwKIAkiJChJTlRESVIpXCQoUFJPR05BTUUpLm9iaiIKIApAQCAtODMsNiArODMsOCBAQAogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCkBAIC0xMDMsNiArMTA1LDcgQEAKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGRiIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgpAQCAtMTExLDcgKzExNCw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKQEAgLTE1OSw3ICsxNjIsNyBAQAogPDwKIAogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvb3V0OiIuLlxiaW5cJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVwkKFBST0dOQU1FKS5vYmoiCiAKQEAgLTE2OCw2ICsxNzEsOCBAQAogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCmRpZmYgLS1naXQgYS93aW4zMi9NYWtlZmlsZS5pbiBiL3dpbjMyL01ha2VmaWxlLmluCmluZGV4IGI5MDg1ODIuLmJiYTU0NjQgMTAwNjQ0Ci0tLSBhL3dpbjMyL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL01ha2VmaWxlLmluCkBAIC0xMCwxNyArMTAsMTAgQEAKIAogY2xlYW4gOiBhcHBzX2NsZWFuIGxpYnNfY2xlYW4gc25tcHRyYXBkX2NsZWFuIHNubXBkX2NsZWFuIGxvY2FsX2NsZWFuCiAKLSFJRiAiJChTREspIiA9PSAidHJ1ZSIKLXNubXBkIDogc25tcGRzZGtfCi1zbm1wZF9jbGVhbiA6IHNubXBkc2RrX2NsZWFuXwotbmV0c25tcG1pYnMgOiBuZXRzbm1wbWlic3Nka18KLW5ldHNubXBtaWJzX2NsZWFuIDogbmV0c25tcG1pYnNzZGtfY2xlYW5fCi0hRUxTRQogc25tcGQgOiBzbm1wZF8KIHNubXBkX2NsZWFuIDogc25tcGRfY2xlYW5fCiBuZXRzbm1wbWlicyA6IG5ldHNubXBtaWJzXwkKIG5ldHNubXBtaWJzX2NsZWFuIDogbmV0c25tcG1pYnNfY2xlYW5fCi0hRU5ESUYKIAogIUlGICIkKExJTktUWVBFKSIgPT0gInN0YXRpYyIKIGxpYnNubXAgOiBsaWJzbm1wXwpAQCAtMzAsOCArMjMsOCBAQAogbGlic25tcF9jbGVhbiA6IGxpYnNubXBfZGxsX2NsZWFuXwogIUVORElGCiAKLWxpYnMgOiBsaWJhZ2VudCBsaWJoZWxwZXJzIGxpYnNubXAgbGlibmV0c25tcHRyYXBkIG5ldHNubXBtaWJzIAotbGlic19jbGVhbiA6IGxpYmFnZW50X2NsZWFuIGxpYmhlbHBlcnNfY2xlYW4gbGlic25tcF9jbGVhbiBsaWJuZXRzbm1wdHJhcGRfY2xlYW4gbmV0c25tcG1pYnNfY2xlYW4KK2xpYnMgOiBsaWJhZ2VudCBsaWJzbm1wIGxpYm5ldHNubXB0cmFwZCBuZXRzbm1wbWlicyAKK2xpYnNfY2xlYW4gOiBsaWJhZ2VudF9jbGVhbiBsaWJzbm1wX2NsZWFuIGxpYm5ldHNubXB0cmFwZF9jbGVhbiBuZXRzbm1wbWlic19jbGVhbgogCiBhcHBzIDogc25tcGRmIHNubXBzZXQgc25tcHVzbSBzbm1wdGVzdCBzbm1wdHJhcCBzbm1wdmFjbSBzbm1wd2FsayBzbm1wZGVsdGEgc25tcHRhYmxlIHNubXBzdGF0dXMgc25tcGJ1bGtnZXQgc25tcGdldCBzbm1wZ2V0bmV4dCBzbm1wYnVsa3dhbGsgc25tcHRyYW5zbGF0ZSBlbmNvZGVfa2V5Y2hhbmdlIHNubXBuZXRzdGF0CiAKQEAgLTExMywxMSArMTA2LDYgQEAKIAkkKE5NQUtFKSBhbGwKIAljZCAuLgogCi1saWJoZWxwZXJzIDo6Ci0JY2QgbGliaGVscGVycwotCSQoTk1BS0UpIGFsbAotCWNkIC4uCi0KIGxpYnNubXBfIDo6CiAJY2QgbGlic25tcAogCSQoTk1BS0UpIGFsbApAQCAtMTM4LDExICsxMjYsNiBAQAogCSQoTk1BS0UpIGFsbAogCWNkIC4uCiAKLW5ldHNubXBtaWJzc2RrXyA6OgotCWNkIG5ldHNubXBtaWJzc2RrCi0JJChOTUFLRSkgYWxsCi0JY2QgLi4KLQogc25tcGRmIDo6CiAJY2Qgc25tcGRmCiAJJChOTUFLRSkgYWxsCkBAIC0yMzgsMTEgKzIyMSw2IEBACiAJJChOTUFLRSkgYWxsCiAJY2QgLi4KIAotc25tcGRzZGtfIDo6Ci0JY2Qgc25tcGRzZGsKLQkkKE5NQUtFKSBhbGwKLQljZCAuLgotCiBzbm1wY29uZiA6OgogCWNkIGxvY2FsCiAJJChOTUFLRSkgc25tcGNvbmYKQEAgLTI2NywxMSArMjQ1LDYgQEAKIAkkKE5NQUtFKSBjbGVhbgogCWNkIC4uCiAKLWxpYmhlbHBlcnNfY2xlYW4gOjoKLQljZCBsaWJoZWxwZXJzCi0JJChOTUFLRSkgY2xlYW4KLQljZCAuLgotCiBsaWJzbm1wX2NsZWFuXyA6OgogCWNkIGxpYnNubXAKIAkkKE5NQUtFKSBjbGVhbgpAQCAtMjkyLDExICsyNjUsNiBAQAogCSQoTk1BS0UpIGNsZWFuCiAJY2QgLi4KIAotbmV0c25tcG1pYnNzZGtfY2xlYW5fIDo6Ci0JY2QgbmV0c25tcG1pYnNzZGsKLQkkKE5NQUtFKSBjbGVhbgotCWNkIC4uCi0KIHNubXBkZl9jbGVhbiA6OgogCWNkIHNubXBkZgogCSQoTk1BS0UpIGNsZWFuCkBAIC0zOTIsMTEgKzM2MCw2IEBACiAJJChOTUFLRSkgY2xlYW4KIAljZCAuLgogCi1zbm1wZHNka19jbGVhbl8gOjoKLQljZCBzbm1wZHNkawotCSQoTk1BS0UpIGNsZWFuCi0JY2QgLi4KLQogc25tcGNvbmZfY2xlYW4gOjoKIAljZCBsb2NhbAogCSQoTk1BS0UpIHNubXBjb25mX2NsZWFuCkBAIC00MjEsMTEgKzM4NCw5IEBACiAgICAgICAgIEAtZWNobyAiYWxsICAgICAgICAgICAgIGxpYnMgYXBwcyBzbm1wdHJhcGQgc25tcGQgICAgICAgICAgICAgICAgICAgICAiCiAgICAgICAgIEAtZWNobyAiY2xlYW4gICAgICAgICAgIGxpYnNfY2xlYW4gYXBwc19jbGVhbiBzbm1wdHJhcGRfY2xlYW4gICAgICAgICAiCiAgICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgIHNubXBkX2NsZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAgIEAtZWNobyAibGlicyAgICAgICAgICAgIGxpYmFnZW50IGxpYmhlbHBlcnMgbGlic25tcCBsaWJuZXRzbm1wdHJhcGQgICAiCi0gICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgIG5ldHNubXBtaWJzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCi0gICAgICAgIEAtZWNobyAibGlic19jbGVhbiAgICAgIGxpYmFnZW50X2NsZWFuIGxpYmhlbHBlcnNfY2xlYW4gICAgICAgICAgICAgICAiCi0gICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgIGxpYm5ldHNubXB0cmFwZF9jbGVhbiBsaWJzbm1wX2NsZWFuICAgICAgICAgICAiCi0gICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgIG5ldHNubXBtaWJzX2NsZWFuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCisgICAgICAgIEAtZWNobyAibGlicyAgICAgICAgICAgIGxpYmFnZW50IGxpYnNubXAgbGlibmV0c25tcHRyYXBkIG5ldHNubXBtaWJzICAiCisgICAgICAgIEAtZWNobyAibGlic19jbGVhbiAgICAgIGxpYmFnZW50X2NsZWFuIGxpYm5ldHNubXB0cmFwZF9jbGVhbiAgICAgICAgICAiCisgICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgIGxpYnNubXBfY2xlYW4gbmV0c25tcG1pYnNfY2xlYW4gICAgICAgICAgICAgICAiCiAgICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiCiAgICAgICAgIEAtZWNobyAiYXBwcyAgICAgICAgICAgIGVuY29kZV9rZXljaGFuZ2Ugc25tcGJ1bGtnZXQgc25tcGJ1bGt3YWxrICAgICAiCiAgICAgICAgIEAtZWNobyAiICAgICAgICAgICAgICAgIHNubXBkZWx0YSBzbm1wZGYgc25tcGdldCBzbm1wZ2V0bmV4dCAgICAgICAgICAiCmRpZmYgLS1naXQgYS93aW4zMi9idWlsZC5wbCBiL3dpbjMyL2J1aWxkLnBsCmluZGV4IGE3ZjkzMzguLjQwMDdmYWUgMTAwNjQ0Ci0tLSBhL3dpbjMyL2J1aWxkLnBsCisrKyBiL3dpbjMyL2J1aWxkLnBsCkBAIC01LDMyICs1LDQ5IEBACiAjIE1hcmNoIDEydGgsIDIwMDQKICMKIHVzZSBzdHJpY3Q7Ci1teSAkb3BlbnNzbCA9ICJkaXNhYmxlZCI7Ci1teSAkYl9pcHY2ID0gImRpc2FibGVkIjsKLW15ICRiX3dpbmV4dGRsbCA9ICJkaXNhYmxlZCI7Ci1teSAkc2RrID0gImRpc2FibGVkIjsKK3VzZSB3YXJuaW5nczsKK3VzZSBDb25maWc7Cit1c2UgQ3dkICdhYnNfcGF0aCc7Cit1c2UgRmlsZTo6QmFzZW5hbWU7Cit1c2UgY29uc3RhbnQgZmFsc2UgPT4gMDsKK3VzZSBjb25zdGFudCB0cnVlID0+IDE7CitteSAkdGFyZ2V0X2FyY2ggPSAkRU5We1RBUkdFVF9DUFV9ID8gJEVOVntUQVJHRVRfQ1BVfSA6ICRFTlZ7UGxhdGZvcm19ID8KKyAgICAgICAgICAgICAgICAgICRFTlZ7UGxhdGZvcm19IDogIng4NiI7CitpZiAoJHRhcmdldF9hcmNoIG5lICJ4ODYiICYmICR0YXJnZXRfYXJjaCBuZSAieDY0IikgeworICAgIHByaW50ICJFcnJvcjogdW5zdXBwb3J0ZWQgdGFyZ2V0IGFyY2hpdGVjdHVyZSAkdGFyZ2V0X2FyY2hcbiI7CisgICAgZGllOworfQorbXkgQHBlcmxfYXJjaCA9IHNwbGl0KC8tLywgJENvbmZpZ3thcmNobmFtZX0pOworaWYgKCRwZXJsX2FyY2hbMV0gbmUgJHRhcmdldF9hcmNoKSB7CisgICAgcHJpbnQgInBlcmxfYXJjaCA9ICRwZXJsX2FyY2hbMV0gZG9lcyBub3QgbWF0Y2ggdGFyZ2V0X2FyY2ggPSAkdGFyZ2V0X2FyY2hcbiI7CisgICAgZGllOworfQorbXkgJG9wZW5zc2wgPSBmYWxzZTsKK215ICRkZWZhdWx0X29wZW5zc2xkaXIgPSAkdGFyZ2V0X2FyY2ggZXEgIng2NCIgPworICAgICJDOlxcT3BlblNTTC1XaW42NCIgOiAiQzpcXE9wZW5TU0wtV2luMzIiOworbXkgJGRlZmF1bHRfb3BlbnNzbGluY2RpciA9ICRkZWZhdWx0X29wZW5zc2xkaXIgLiAiXFxpbmNsdWRlIjsKK215ICRvcGVuc3NsaW5jZGlyID0gJGRlZmF1bHRfb3BlbnNzbGluY2RpcjsKK215ICRkZWZhdWx0X29wZW5zc2xsaWJkaXIgPSAkZGVmYXVsdF9vcGVuc3NsZGlyIC4gIlxcbGliXFxWQyI7CitteSAkb3BlbnNzbGxpYmRpciA9ICRkZWZhdWx0X29wZW5zc2xsaWJkaXI7CitteSAkYl9pcHY2ID0gZmFsc2U7CitteSAkYl93aW5leHRkbGwgPSBmYWxzZTsKK215ICRzZGsgPSBmYWxzZTsKIG15ICRkZWZhdWx0X2luc3RhbGxfYmFzZSA9ICJjOi91c3IiOwogbXkgJGluc3RhbGxfYmFzZSA9ICRkZWZhdWx0X2luc3RhbGxfYmFzZTsKLW15ICRpbnN0YWxsID0gImVuYWJsZWQiOwotbXkgJGluc3RhbGxfZGV2ZWwgPSAiZGlzYWJsZWQiOwotbXkgJHBlcmwgPSAiZGlzYWJsZWQiOwotbXkgJHBlcmxfaW5zdGFsbCA9ICJkaXNhYmxlZCI7Ci1teSAkbG9nZ2luZyA9ICJlbmFibGVkIjsKLW15ICRkZWJ1ZyA9ICJkaXNhYmxlZCI7CitteSAkaW5zdGFsbCA9IHRydWU7CitteSAkaW5zdGFsbF9kZXZlbCA9IGZhbHNlOworbXkgJHBlcmwgPSBmYWxzZTsKK215ICRwZXJsX2luc3RhbGwgPSBmYWxzZTsKK215ICRsb2dnaW5nID0gdHJ1ZTsKK215ICRkZWJ1ZyA9IGZhbHNlOwogbXkgJGNvbmZpZ09wdHMgPSAiIjsKLW15ICRsaW5rdHlwZSA9ICJzdGF0aWMiOworbXkgJGxpbmtfZHluYW1pYyA9IGZhbHNlOwogbXkgJG9wdGlvbjsKIAotIyBQcmVwZW5kIHdpbjMyXCBpZiBydW5uaW5nIGZyb20gbWFpbiBkaXJlY3RvcnkKLW15ICRjdXJyZW50X3B3ZCA9IGAlQ09NU1BFQyUgL2MgY2RgOwotY2hvbXAgJGN1cnJlbnRfcHdkOwotaWYgKCEgKCRjdXJyZW50X3B3ZCA9fiAvXFx3aW4zMiQvKSkgewotICBjaGRpciAoIndpbjMyIik7Ci0gICRjdXJyZW50X3B3ZCA9IGAlQ09NU1BFQyUgL2MgY2RgOwotICBjaG9tcCAkY3VycmVudF9wd2Q7Ci19CisjIFBhdGggb2YgdGhpcyBzY3JpcHQgKHNvdXJjZSB0cmVlIHBhdGggKyAid2luMzIiKS4KK215ICRjdXJyZW50X3B3ZCA9IGRpcm5hbWUoYWJzX3BhdGgoJDApKTsKIAotaWYgKCAtZCAkRU5We01TVkNEaXJ9IHx8IC1kICRFTlZ7VkNJTlNUQUxMRElSfSkgeworaWYgKCAtZCAkRU5We01TVkNEaXJ9IHx8IC1kICRFTlZ7VkNJTlNUQUxMRElSfSB8fCBkZWZpbmVkKCRFTlZ7VEFSR0VUX0NQVX0pICkgewogfQogZWxzZSB7CiAgIHByaW50ICJcblBsZWFzZSBydW4gVkNWQVJTMzIuQkFUIGZpcnN0IHRvIHNldCB1cCB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZFxuIiAuCkBAIC00MiwxMzIgKzU5LDg5IEBACiB3aGlsZSAoMSkgewogICBwcmludCAiXG5cbk5ldC1TTk1QIGJ1aWxkIGFuZCBpbnN0YWxsIG9wdGlvbnNcbiI7CiAgIHByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiI7Ci0gIHByaW50ICIxLiAgT3BlblNTTCBzdXBwb3J0OiAgICAgICAgICAgICAgICAiIC4gJG9wZW5zc2wuICJcbiI7Ci0gIHByaW50ICIyLiAgUGxhdGZvcm0gU0RLIHN1cHBvcnQ6ICAgICAgICAgICAiIC4gJHNkayAuICJcbiI7CisgIHByaW50ICIxLiAgT3BlblNTTCBzdXBwb3J0OiAgICAgICAgICAgICAgICAiIC4gKCRvcGVuc3NsID8gImVuYWJsZWQiIDogImRpc2FibGVkIikuICJcbiI7CisgIHByaW50ICIyLiAgT3BlblNTTCBpbmNsdWRlIGRpcmVjdG9yeTogICAgICAiIC4gJG9wZW5zc2xpbmNkaXIuICJcbiI7CisgIHByaW50ICIzLiAgT3BlblNTTCBsaWJyYXJ5IGRpcmVjdG9yOiAgICAgICAiIC4gJG9wZW5zc2xsaWJkaXIuICJcbiI7CisgIHByaW50ICI0LiAgUGxhdGZvcm0gU0RLIHN1cHBvcnQ6ICAgICAgICAgICAiIC4gKCRzZGsgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CiAgIHByaW50ICJcbiI7Ci0gIHByaW50ICIzLiAgSW5zdGFsbCBwYXRoOiAgICAgICAgICAgICAgICAgICAiIC4gJGluc3RhbGxfYmFzZSAuICJcbiI7Ci0gIHByaW50ICI0LiAgSW5zdGFsbCBhZnRlciBidWlsZDogICAgICAgICAgICAiIC4gJGluc3RhbGwgLiAiXG4iOworICBwcmludCAiNS4gIEluc3RhbGwgcGF0aDogICAgICAgICAgICAgICAgICAgIiAuICRpbnN0YWxsX2Jhc2UgLiAiXG4iOworICBwcmludCAiNi4gIEluc3RhbGwgYWZ0ZXIgYnVpbGQ6ICAgICAgICAgICAgIiAuICgkaW5zdGFsbCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKICAgcHJpbnQgIlxuIjsKLSAgcHJpbnQgIjUuICBQZXJsIG1vZHVsZXM6ICAgICAgICAgICAgICAgICAgICIgLiAkcGVybCAuICJcbiI7Ci0gIHByaW50ICI2LiAgSW5zdGFsbCBwZXJsIG1vZHVsZXM6ICAgICAgICAgICAiIC4gJHBlcmxfaW5zdGFsbCAuICJcbiI7CisgIHByaW50ICI3LiAgUGVybCBtb2R1bGVzOiAgICAgICAgICAgICAgICAgICAiIC4gKCRwZXJsID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOworICBwcmludCAiOC4gIEluc3RhbGwgcGVybCBtb2R1bGVzOiAgICAgICAgICAgIiAuICgkcGVybF9pbnN0YWxsID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogICBwcmludCAiXG4iOwotICBwcmludCAiNy4gIFF1aWV0IGJ1aWxkIChsb2dnZWQpOiAgICAgICAgICAgIiAuICRsb2dnaW5nIC4gIlxuIjsKLSAgcHJpbnQgIjguICBEZWJ1ZyBtb2RlOiAgICAgICAgICAgICAgICAgICAgICIgLiAkZGVidWcgLiAiXG4iOworICBwcmludCAiOS4gIFF1aWV0IGJ1aWxkIChsb2dnZWQpOiAgICAgICAgICAgIiAuICgkbG9nZ2luZyA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKKyAgcHJpbnQgIjEwLiBEZWJ1ZyBtb2RlOiAgICAgICAgICAgICAgICAgICAgICIgLiAoJGRlYnVnID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogICBwcmludCAiXG4iOwotICBwcmludCAiOS4gIElQdjYgdHJhbnNwb3J0cyAocmVxdWlyZXMgU0RLKTogIiAuICRiX2lwdjYgLiAiXG4iOwotICBwcmludCAiMTAuIHdpbkV4dERMTCBhZ2VudCAocmVxdWlyZXMgU0RLKTogIiAuICRiX3dpbmV4dGRsbCAuICJcbiI7CisgIHByaW50ICIxMS4gSVB2NiB0cmFuc3BvcnRzIChyZXF1aXJlcyBTREspOiAiIC4gKCRiX2lwdjYgPyAiZW5hYmxlZCIgOiAiZGlzYWJsZWQiKSAuICJcbiI7CisgIHByaW50ICIxMi4gd2luRXh0RExMIGFnZW50IChyZXF1aXJlcyBTREspOiAiIC4gKCRiX3dpbmV4dGRsbCA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpIC4gIlxuIjsKICAgcHJpbnQgIlxuIjsKLSAgcHJpbnQgIjExLiBMaW5rIHR5cGU6ICAgICAgICAgICAgICAgICAgICAgICIgLiAkbGlua3R5cGUgLiAiXG4iOworICBwcmludCAiMTMuIExpbmsgdHlwZTogICAgICAgICAgICAgICAgICAgICAgIiAuICgkbGlua19keW5hbWljID8gImR5bmFtaWMiIDogInN0YXRpYyIpIC4gIlxuIjsKICAgcHJpbnQgIlxuIjsKLSAgcHJpbnQgIjEyLiBJbnN0YWxsIGRldmVsb3BtZW50IGZpbGVzICAgICAgICIgLiAkaW5zdGFsbF9kZXZlbCAuICJcbiI7CisgIHByaW50ICIxNC4gSW5zdGFsbCBkZXZlbG9wbWVudCBmaWxlcyAgICAgICAiIC4gKCRpbnN0YWxsX2RldmVsID8gImVuYWJsZWQiIDogImRpc2FibGVkIikgLiAiXG4iOwogICBwcmludCAiXG5GLiAgRmluaXNoZWQgLSBzdGFydCBidWlsZFxuIjsKICAgcHJpbnQgIlEuICBRdWl0IC0gYWJvcnQgYnVpbGRcblxuIjsKICAgcHJpbnQgIlNlbGVjdCBvcHRpb24gdG8gc2V0IC8gdG9nZ2xlOiAiOwogCiAgIGNob21wICgkb3B0aW9uID0gPD4pOwogICBpZiAoJG9wdGlvbiBlcSAiMSIpIHsKLSAgICBpZiAoJG9wZW5zc2wgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkb3BlbnNzbCA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJG9wZW5zc2wgPSAiZW5hYmxlZCI7Ci0gICAgfQorICAgICRvcGVuc3NsID0gISRvcGVuc3NsOwogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICIyIikgewotICAgIGlmICgkc2RrIGVxICJlbmFibGVkIikgewotICAgICAgJHNkayA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJHNkayA9ICJlbmFibGVkIjsKLSAgICB9Ci0gIH0KLSAgZWxzaWYgKCRvcHRpb24gZXEgIjkiKSB7Ci0gICAgaWYgKCRiX2lwdjYgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkYl9pcHY2ID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkYl9pcHY2ID0gImVuYWJsZWQiOwotICAgICAgaWYgKCRzZGsgPSAiZGlzYWJsZWQiKSB7Ci0gICAgICAgIHByaW50ICJcblxuKiBTREsgcmVxdWlyZWQgZm9yIElQdjYgYW5kIGhhcyBiZWVuIGF1dG9tYXRpY2FsbHkgZW5hYmxlZCI7Ci0gICAgICAgICRzZGsgPSAiZW5hYmxlZCI7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0gIGVsc2lmICgkb3B0aW9uIGVxICIxMCIpIHsKLSAgICBpZiAoJGJfd2luZXh0ZGxsIGVxICJlbmFibGVkIikgewotICAgICAgJGJfd2luZXh0ZGxsID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkYl93aW5leHRkbGwgPSAiZW5hYmxlZCI7Ci0gICAgICBpZiAoJHNkayA9ICJkaXNhYmxlZCIpIHsKLSAgICAgICAgcHJpbnQgIlxuXG4qIFNESyByZXF1aXJlZCBmb3IgSVB2NiBhbmQgaGFzIGJlZW4gYXV0b21hdGljYWxseSBlbmFibGVkIjsKLSAgICAgICAgJHNkayA9ICJlbmFibGVkIjsKLSAgICAgIH0KLSAgICB9CisgICAgcHJpbnQgIlBsZWFzZSBlbnRlciB0aGUgT3BlblNTTCBpbmNsdWRlIGRpcmVjdG9yeSBbJG9wZW5zc2xpbmNkaXJdOiAiOworICAgIGNob21wICgkb3BlbnNzbGluY2RpciA9IDw+KTsKKyAgICAkb3BlbnNzbGluY2RpciA9fiBzL1xcL1wvL2c7CisgICAgJG9wZW5zc2xpbmNkaXIgPSAkZGVmYXVsdF9vcGVuc3NsaW5jZGlyIGlmICgkb3BlbnNzbGluY2RpciBlcSAiIik7CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjMiKSB7Ci0gICAgcHJpbnQgIlBsZWFzZSBlbnRlciB0aGUgbmV3IGluc3RhbGwgcGF0aCBbJGRlZmF1bHRfaW5zdGFsbF9iYXNlXTogIjsKLSAgICBjaG9tcCAoJGluc3RhbGxfYmFzZSA9IDw+KTsKLSAgICBpZiAoJGluc3RhbGxfYmFzZSBlcSAiIikgewotICAgICAgJGluc3RhbGxfYmFzZSA9ICRkZWZhdWx0X2luc3RhbGxfYmFzZTsKLSAgICB9Ci0gICAgJGluc3RhbGxfYmFzZSA9fiBzL1xcL1wvL2c7CisgICAgcHJpbnQgIlBsZWFzZSBlbnRlciB0aGUgT3BlblNTTCBsaWJyYXJ5IGRpcmVjdG9yeSBbJG9wZW5zc2xsaWJkaXJdOiAiOworICAgIGNob21wICgkb3BlbnNzbGxpYmRpciA9IDw+KTsKKyAgICAkb3BlbnNzbGxpYmRpciA9fiBzL1xcL1wvL2c7CisgICAgJG9wZW5zc2xsaWJkaXIgPSAkZGVmYXVsdF9vcGVuc3NsbGliZGlyIGlmICgkb3BlbnNzbGxpYmRpciBlcSAiIik7CiAgIH0KICAgZWxzaWYgKCRvcHRpb24gZXEgIjQiKSB7Ci0gICAgaWYgKCRpbnN0YWxsIGVxICJlbmFibGVkIikgewotICAgICAgJGluc3RhbGwgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRpbnN0YWxsID0gImVuYWJsZWQiOworICAgICRzZGsgPSAhJHNkazsKKyAgfQorICBlbHNpZiAoJG9wdGlvbiBlcSAiMTEiKSB7CisgICAgJGJfaXB2NiA9ICEkYl9pcHY2OworICAgIGlmICgkYl9pcHY2ICYmICEkc2RrKSB7CisgICAgICBwcmludCAiXG5cbiogU0RLIHJlcXVpcmVkIGZvciBJUHY2IGFuZCBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGVuYWJsZWQiOworICAgICAgJHNkayA9IHRydWU7CiAgICAgfQogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICIxMiIpIHsKLSAgICBpZiAoJGluc3RhbGxfZGV2ZWwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkaW5zdGFsbF9kZXZlbCA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGluc3RhbGxfZGV2ZWwgPSAiZW5hYmxlZCI7CisgICAgJGJfd2luZXh0ZGxsID0gISRiX3dpbmV4dGRsbDsKKyAgICBpZiAoJGJfd2luZXh0ZGxsICYmICEkc2RrKSB7CisgICAgICBwcmludCAiXG5cbiogU0RLIHJlcXVpcmVkIGZvciBJUHY2IGFuZCBoYXMgYmVlbiBhdXRvbWF0aWNhbGx5IGVuYWJsZWQiOworICAgICAgJHNkayA9IHRydWU7CiAgICAgfQogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICI1IikgewotICAgIGlmICgkcGVybCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRwZXJsID0gImRpc2FibGVkIjsKLSAgICB9Ci0gICAgZWxzZSB7Ci0gICAgICAkcGVybCA9ICJlbmFibGVkIjsKLSAgICB9CisgICAgcHJpbnQgIlBsZWFzZSBlbnRlciB0aGUgbmV3IGluc3RhbGwgcGF0aCBbJGRlZmF1bHRfaW5zdGFsbF9iYXNlXTogIjsKKyAgICBjaG9tcCAoJGluc3RhbGxfYmFzZSA9IDw+KTsKKyAgICAkaW5zdGFsbF9iYXNlID1+IHMvXFwvXC8vZzsKKyAgICAkaW5zdGFsbF9iYXNlID0gJGRlZmF1bHRfaW5zdGFsbF9iYXNlIGlmICgkaW5zdGFsbF9iYXNlIGVxICIiKTsKICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiNiIpIHsKLSAgICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZW5hYmxlZCIpIHsKLSAgICAgICRwZXJsX2luc3RhbGwgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRwZXJsX2luc3RhbGwgPSAiZW5hYmxlZCI7Ci0gICAgfQorICAgICRpbnN0YWxsID0gISRpbnN0YWxsOworICB9CisgIGVsc2lmICgkb3B0aW9uIGVxICIxNCIpIHsKKyAgICAkaW5zdGFsbF9kZXZlbCA9ICEkaW5zdGFsbF9kZXZlbDsKICAgfQogICBlbHNpZiAoJG9wdGlvbiBlcSAiNyIpIHsKLSAgICBpZiAoJGxvZ2dpbmcgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkbG9nZ2luZyA9ICJkaXNhYmxlZCI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGxvZ2dpbmcgPSAiZW5hYmxlZCI7Ci0gICAgfQorICAgICRwZXJsID0gISRwZXJsOwogICB9CiAgIGVsc2lmICgkb3B0aW9uIGVxICI4IikgewotICAgIGlmICgkZGVidWcgZXEgImVuYWJsZWQiKSB7Ci0gICAgICAkZGVidWcgPSAiZGlzYWJsZWQiOwotICAgIH0KLSAgICBlbHNlIHsKLSAgICAgICRkZWJ1ZyA9ICJlbmFibGVkIjsKLSAgICB9CisgICAgJHBlcmxfaW5zdGFsbCA9ICEkcGVybF9pbnN0YWxsOwogICB9Ci0gIGVsc2lmICgkb3B0aW9uIGVxICIxMSIpIHsKLSAgICBpZiAoJGxpbmt0eXBlIGVxICJzdGF0aWMiKSB7Ci0gICAgICAkbGlua3R5cGUgPSAiZHluYW1pYyI7Ci0gICAgfQotICAgIGVsc2UgewotICAgICAgJGxpbmt0eXBlID0gInN0YXRpYyI7Ci0gICAgfQorICBlbHNpZiAoJG9wdGlvbiBlcSAiOSIpIHsKKyAgICAkbG9nZ2luZyA9ICEkbG9nZ2luZzsKKyAgfQorICBlbHNpZiAoJG9wdGlvbiBlcSAiMTAiKSB7CisgICAgJGRlYnVnID0gISRkZWJ1ZzsKKyAgfQorICBlbHNpZiAoJG9wdGlvbiBlcSAiMTMiKSB7CisgICAgJGxpbmtfZHluYW1pYyA9ICEkbGlua19keW5hbWljOwogICB9CiAgIGVsc2lmIChsYygkb3B0aW9uKSBlcSAiZiIpIHsKICAgICBsYXN0OwpAQCAtMTc3LDE1ICsxNTEsMTYgQEAKICAgfQogfQogCi0kY29uZmlnT3B0cyAuPSAkb3BlbnNzbCBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLXNzbCIgOiAiIjsKK215ICRsaW5rdHlwZSA9ICRsaW5rX2R5bmFtaWMgPyAiZHluYW1pYyIgOiAic3RhdGljIjsKKyRjb25maWdPcHRzIC49ICRvcGVuc3NsID8gIi0td2l0aC1zc2wiIDogIiI7CiAkY29uZmlnT3B0cyAuPSAiICI7Ci0kY29uZmlnT3B0cyAuPSAkc2RrIGVxICJlbmFibGVkIiA/ICItLXdpdGgtc2RrIiA6ICIiOworJGNvbmZpZ09wdHMgLj0gJHNkayA/ICItLXdpdGgtc2RrIiA6ICIiOwogJGNvbmZpZ09wdHMgLj0gIiAiOwotJGNvbmZpZ09wdHMgLj0gJGJfaXB2NiBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLWlwdjYiIDogIiI7CiskY29uZmlnT3B0cyAuPSAkYl9pcHY2ID8gIi0td2l0aC1pcHY2IiA6ICIiOwogJGNvbmZpZ09wdHMgLj0gIiAiOwotJGNvbmZpZ09wdHMgLj0gJGJfd2luZXh0ZGxsIGVxICJlbmFibGVkIiA/ICItLXdpdGgtd2luZXh0ZGxsIiA6ICIiOworJGNvbmZpZ09wdHMgLj0gJGJfd2luZXh0ZGxsID8gIi0td2l0aC13aW5leHRkbGwiIDogIiI7CiAkY29uZmlnT3B0cyAuPSAiICI7Ci0kY29uZmlnT3B0cyAuPSAkZGVidWcgZXEgImVuYWJsZWQiID8gIi0tY29uZmlnPWRlYnVnIiA6ICItLWNvbmZpZz1yZWxlYXNlIjsKKyRjb25maWdPcHRzIC49ICRkZWJ1ZyA/ICItLWNvbmZpZz1kZWJ1ZyIgOiAiLS1jb25maWc9cmVsZWFzZSI7CiAKICMgU2V0IGVudmlyb25tZW50IHZhcmlhYmxlcwogCkBAIC0xOTMsMTQzICsxNjgsOTQgQEAKICRFTlZ7Tk9fRVhURVJOQUxfREVQU309IjEiOwogCiAjIFNldCBQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIFBlcmwgbWFrZSB0ZXN0cyBjYW4gbG9jYXRlIHRoZSBETEwKLSRFTlZ7UEFUSH0gPSAiJGN1cnJlbnRfcHdkXFxiaW5cXCIgLiAoJGRlYnVnIGVxICJlbmFibGVkIiA/ICJkZWJ1ZyIgOiAicmVsZWFzZSIgKSAuICI7JEVOVntQQVRIfSI7CiskRU5We1BBVEh9ID0gIiRjdXJyZW50X3B3ZFxcYmluXFwiIC4gKCRkZWJ1ZyA/ICJkZWJ1ZyIgOiAicmVsZWFzZSIgKSAuICI7JEVOVntQQVRIfSI7CisKKyRFTlZ7SU5DTFVERX0gLj0gIjskb3BlbnNzbGluY2RpciI7CiskRU5We0xJQn0gICAgIC49ICI7JG9wZW5zc2xsaWJkaXIiOwogCiAjIFNldCBNSUJESVJTIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIFBlcmwgbWFrZSB0ZXN0cyBjYW4gbG9jYXRlIHRoZSBtaWJzCi1teSAkdGVtcF9taWJkaXIgPSAiJGN1cnJlbnRfcHdkLy4uL21pYnMiOwotJHRlbXBfbWliZGlyID1+IHMvXFwvXC8vZzsKLSRFTlZ7TUlCRElSU309JHRlbXBfbWliZGlyOworJEVOVntNSUJESVJTfSA9IGRpcm5hbWUoJGN1cnJlbnRfcHdkKSAuICIvbWlicyI7CiAKICMgU2V0IFNOTVBDT05GUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBQZXJsIGNvbmYudCB0ZXN0IGNhbiBsb2NhdGUKICMgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMuCiAjIFNlZSB0aGUgbm90ZSBhYm91dCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIFdpbjMyIHNlY3Rpb24gb2YKICMgcGVybC9TTk1QL1JFQURNRSBmb3IgZGV0YWlscyBvbiB3aHkgdGhpcyBpcyBuZWVkZWQuCi0kRU5We1NOTVBDT05GUEFUSH09InQiOyRFTlZ7U05NUENPTkZQQVRIfTsKKyRFTlZ7U05NUENPTkZQQVRIfT0idCI7CiAKIHByaW50ICJcbkJ1aWxkaW5nLi4uXG4iOwogCi1pZiAoJGxvZ2dpbmcgZXEgImVuYWJsZWQiKSB7Ci0gIHByaW50ICJcbkNyZWF0aW5nICoub3V0IGxvZyBmaWxlcy5cblxuIjsKK3ByaW50ICJcbkNyZWF0aW5nICoub3V0IGxvZyBmaWxlcy5cblxuIjsKKworcHJpbnQgIkRlbGV0aW5nIG9sZCBsb2cgZmlsZXMuLi5cbiI7CitzeXN0ZW0oImRlbCAqLm91dCIgLiAoJGxvZ2dpbmcgPyAiID4gTlVMOiAyPiYxIiA6ICIiKSk7CisKKyMgRGVsZXRlIG5ldC1zbm1wLWNvbmZpZy5oIGZyb20gbWFpbiBpbmNsdWRlIGZvbGRlciBqdXN0IGluIGNhc2UgaXQgd2FzIGNyZWF0ZWQgYnkgYSBDeWd3aW4gb3IgTWluR1cgYnVpbGQKK3VubGluayAiLi4vaW5jbHVkZS9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaCI7Cit1bmxpbmsgIi4uL3NubXBsaWIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oIjsKKworcHJpbnQgIlJ1bm5pbmcgQ29uZmlndXJlLi4uXG4iOworc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPSRsaW5rdHlwZSAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiIgLiAoJGxvZ2dpbmcgPyAiID4gY29uZmlndXJlLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgY29uZmlndXJlLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisKK3ByaW50ICJDbGVhbmluZy4uLlxuIjsKK3N5c3RlbSgibm1ha2UgL25vbG9nbyBjbGVhbiIgLiAoJGxvZ2dpbmcgPyAiID4gY2xlYW4ub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBjbGVhbi5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworCitwcmludCAiQnVpbGRpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOworc3lzdGVtKCJubWFrZSAvbm9sb2dvIiAuICgkbG9nZ2luZyA/ICIgPiBtYWtlLm91dCAyPiYxIiA6ICIiKSkgPT0gMCB8fCBkaWUgKCRsb2dnaW5nID8gIkJ1aWxkIGVycm9yIChzZWUgbWFrZS5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworCitpZiAoJHBlcmwpIHsKKyAgaWYgKCEkbGlua19keW5hbWljKSB7CisgICAgcHJpbnQgIlJ1bm5pbmcgQ29uZmlndXJlIGZvciBETEwuLi5cbiI7CisgICAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPWR5bmFtaWMgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIiIC4gKCRsb2dnaW5nID8gIiA+IHBlcmxjb25maWd1cmUub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsY29uZmlndXJlLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisKKyAgICBwcmludCAiQ2xlYW5pbmcgbGlicmFyaWVzLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzX2NsZWFuIiAuICgkbG9nZ2luZyA/ICIgPj4gY2xlYW4ub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBjbGVhbi5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworCisgICAgcHJpbnQgIkJ1aWxkaW5nIERMTCBsaWJyYXJpZXMuLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGxpYnMiIC4gKCRsb2dnaW5nID8gIiA+IGRsbC5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIGRsbC5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworICB9CisKKyAgcHJpbnQgIkNsZWFuaW5nIFBlcmwuLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9jbGVhbiIgLiAoJGxvZ2dpbmcgPyAiID4+IGNsZWFuLm91dCAyPiYxIiA6ICIiKSk7ICMgSWYgYWxyZWFkeSBjbGVhbmVkLCBNYWtlZmlsZSBpcyBnb25lIHNvIGRvbid0IHdvcnJ5IGFib3V0IGVycm9ycyEKKworICBwcmludCAiQnVpbGRpbmcgUGVybCBtb2R1bGVzLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybCIgLiAoJGxvZ2dpbmcgPyAiID4gcGVybG1ha2Uub3V0IDI+JjEiIDogIiIpKSA9PSAwIHx8IGRpZSAoJGxvZ2dpbmcgPyAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsbWFrZS5vdXQpIiA6ICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSIpOworCisgIHByaW50ICJUZXN0aW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfdGVzdCIgLiAoJGxvZ2dpbmcgPyAiID4gcGVybHRlc3Qub3V0IDI+JjEiIDogIiIpKTsgIyBEb24ndCBkaWUgaWYgYWxsIHRoZSB0ZXN0cyBkb24ndCBwYXNzLi4KKworICBpZiAoJHBlcmxfaW5zdGFsbCkgeworICAgIHByaW50ICJJbnN0YWxsaW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9pbnN0YWxsIiAuICgkbG9nZ2luZyA/ICIgPiBwZXJsaW5zdGFsbC5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIHBlcmxpbnN0YWxsLm91dCkiIDogIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIik7CisgIH0KKworICBwcmludCAiXG5TZWUgcGVybHRlc3Qub3V0IGZvciBQZXJsIHRlc3QgcmVzdWx0c1xuIjsKIH0KIAotaWYgKCRsb2dnaW5nIGVxICJlbmFibGVkIikgewotICBwcmludCAiRGVsZXRpbmcgb2xkIGxvZyBmaWxlcy4uLlxuIjsKLSAgc3lzdGVtKCJkZWwgKi5vdXQgPiBOVUw6IDI+JjEiKTsKLQotICAjIERlbGV0ZSBuZXQtc25tcC1jb25maWcuaCBmcm9tIG1haW4gaW5jbHVkZSBmb2xkZXIganVzdCBpbiBjYXNlIGl0IHdhcyBjcmVhdGVkIGJ5IGEgQ3lnd2luIG9yIE1pbkdXIGJ1aWxkCi0gIHN5c3RlbSgiZGVsIC4uXFxpbmNsdWRlXFxuZXQtc25tcFxcbmV0LXNubXAtY29uZmlnLmggPiBOVUw6IDI+JjEiKTsKLQotICBwcmludCAiUnVubmluZyBDb25maWd1cmUuLi5cbiI7Ci0gIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT0kbGlua3R5cGUgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIgPiBjb25maWd1cmUub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBjb25maWd1cmUub3V0KSI7Ci0KLSAgcHJpbnQgIkNsZWFuaW5nLi4uXG4iOwotICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gY2xlYW4gPiBjbGVhbi5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGNsZWFuLm91dCkiOwotCi0gIHByaW50ICJCdWlsZGluZyBtYWluIHBhY2thZ2UuLi5cbiI7Ci0gIHN5c3RlbSgibm1ha2UgL25vbG9nbyA+IG1ha2Uub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBtYWtlLm91dCkiOwotCi0gIGlmICgkcGVybCBlcSAiZW5hYmxlZCIpIHsKLSAgICBpZiAoJGxpbmt0eXBlIGVxICJzdGF0aWMiKSB7Ci0gICAgICBwcmludCAiUnVubmluZyBDb25maWd1cmUgZm9yIERMTC4uLlxuIjsKLSAgICAgIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT1keW5hbWljIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiID4gcGVybGNvbmZpZ3VyZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxjb25maWd1cmUub3V0KSI7Ci0KLSAgICAgIHByaW50ICJDbGVhbmluZyBsaWJyYXJpZXMuLi5cbiI7Ci0gICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlic19jbGVhbiA+PiBjbGVhbi5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGNsZWFuLm91dCkiOwotCi0gICAgICBwcmludCAiQnVpbGRpbmcgRExMIGxpYnJhcmllcy4uLlxuIjsKLSAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzID4gZGxsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgZGxsLm91dCkiOwotICAgIH0KLQotICAgIHByaW50ICJDbGVhbmluZyBQZXJsLi4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9jbGVhbiA+PiBjbGVhbi5vdXQgMj4mMSIpOyAjIElmIGFscmVhZHkgY2xlYW5lZCwgTWFrZWZpbGUgaXMgZ29uZSBzbyBkb24ndCB3b3JyeSBhYm91dCBlcnJvcnMhCi0KLSAgICBwcmludCAiQnVpbGRpbmcgUGVybCBtb2R1bGVzLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsID4gcGVybG1ha2Uub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsbWFrZS5vdXQpIjsKLQotICAgIHByaW50ICJUZXN0aW5nIFBlcmwgbW9kdWxlcy4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF90ZXN0ID4gcGVybHRlc3Qub3V0IDI+JjEiKTsgIyBEb24ndCBkaWUgaWYgYWxsIHRoZSB0ZXN0cyBkb24ndCBwYXNzLi4KLQotICAgIGlmICgkcGVybF9pbnN0YWxsIGVxICJlbmFibGVkIikgewotICAgICAgcHJpbnQgIkluc3RhbGxpbmcgUGVybCBtb2R1bGVzLi4uXG4iOwotICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfaW5zdGFsbCA+IHBlcmxpbnN0YWxsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybGluc3RhbGwub3V0KSI7Ci0gICAgfQotCi0gICAgcHJpbnQgIlxuU2VlIHBlcmx0ZXN0Lm91dCBmb3IgUGVybCB0ZXN0IHJlc3VsdHNcbiI7Ci0gIH0KLQotICBwcmludCAiXG4iOwotICBpZiAoJGluc3RhbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgcHJpbnQgIkluc3RhbGxpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsID4gaW5zdGFsbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGwub3V0KSI7Ci0gIH0KLSAgZWxzZSB7Ci0gICAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlIHRvICRpbnN0YWxsX2Jhc2VcbiI7Ci0gIH0KLQotICBpZiAoJGluc3RhbGxfZGV2ZWwgZXEgImVuYWJsZWQiKSB7Ci0gICAgcHJpbnQgIkluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMuLi5cbiI7Ci0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGxfZGV2ZWwgPiBpbnN0YWxsX2RldmVsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbF9kZXZlbC5vdXQpIjsKLSAgfQotICBlbHNlIHsKLSAgICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsX2RldmVsIHRvIGluc3RhbGwgdGhlIGRldmVsb3BtZW50IGZpbGVzIHRvICRpbnN0YWxsX2Jhc2VcbiI7Ci0gIH0KLQotICBpZiAoJHBlcmxfaW5zdGFsbCBlcSAiZGlzYWJsZWQiICYmICRwZXJsIGVxICJlbmFibGVkIikgewotICAgIHByaW50ICJUeXBlIG5tYWtlIHBlcmxfaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXNcbiI7Ci0gIH0KK3ByaW50ICJcbiI7CitpZiAoJGluc3RhbGwpIHsKKyAgcHJpbnQgIkluc3RhbGxpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbCIgLiAoJGxvZ2dpbmcgPyAiID4gaW5zdGFsbC5vdXQgMj4mMSIgOiAiIikpID09IDAgfHwgZGllICgkbG9nZ2luZyA/ICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGwub3V0KSIgOiAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiKTsKIH0KIGVsc2UgewotICBzeXN0ZW0oImRlbCAqLm91dCIpOworICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgdG8gJGluc3RhbGxfYmFzZVxuIjsKK30KIAotICAjIERlbGV0ZSBuZXQtc25tcC1jb25maWcuaCBmcm9tIG1haW4gaW5jbHVkZSBmb2xkZXIganVzdCBpbiBjYXNlIGl0IHdhcyBjcmVhdGVkIGJ5IGEgQ3lnd2luIG9yIE1pbkdXIGJ1aWxkCi0gIHN5c3RlbSgiZGVsIC4uXFxpbmNsdWRlXFxuZXQtc25tcFxcbmV0LXNubXAtY29uZmlnLmggPiBOVUw6IDI+JjEiKTsKK2lmICgkaW5zdGFsbF9kZXZlbCkgeworICBwcmludCAiSW5zdGFsbGluZyBkZXZlbG9wbWVudCBmaWxlcy4uLlxuIjsKKyAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGxfZGV2ZWwgPiBpbnN0YWxsX2RldmVsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbF9kZXZlbC5vdXQpIjsKK30KK2Vsc2UgeworICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsX2RldmVsIHRvIGluc3RhbGwgdGhlIGRldmVsb3BtZW50IGZpbGVzIHRvICRpbnN0YWxsX2Jhc2VcbiI7Cit9CiAKLSAgc3lzdGVtKCJwZXJsIENvbmZpZ3VyZSAkY29uZmlnT3B0cyAtLWxpbmt0eXBlPSRsaW5rdHlwZSAtLXByZWZpeD1cIiRpbnN0YWxsX2Jhc2VcIiIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gIHN5c3RlbSgibm1ha2UgL25vbG9nbyBjbGVhbiIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0gIHN5c3RlbSgibm1ha2UgL25vbG9nbyIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGFib3ZlKSI7Ci0KLSAgaWYgKCRwZXJsIGVxICJlbmFibGVkIikgewotICAgIGlmICgkbGlua3R5cGUgZXEgInN0YXRpYyIpIHsKLSAgICAgIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT1keW5hbWljIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzX2NsZWFuIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgICB9Ci0KLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9jbGVhbiIpOyAjIElmIGFscmVhZHkgY2xlYW5lZCwgTWFrZWZpbGUgaXMgZ29uZSBzbyBkb24ndCB3b3JyeSBhYm91dCBlcnJvcnMhCi0gICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmwiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBhYm92ZSkiOwotCi0gICAgbXkgJHBhdGhfb2xkID0gJEVOVntQQVRIfTsKLSAgICAkRU5We1BBVEh9ID0gIiRjdXJyZW50X3B3ZFxcYmluXFwiIC4gKCRkZWJ1ZyBlcSAiZW5hYmxlZCIgPyAiZGVidWciIDogInJlbGVhc2UiICkgLiAiOyRFTlZ7UEFUSH0iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX3Rlc3QiKTsgIyBEb24ndCBkaWUgaWYgYWxsIHRoZSB0ZXN0cyBkb24ndCBwYXNzLi4KLSAgICAkRU5We1BBVEh9ID0gJHBhdGhfb2xkOwotCi0gICAgaWYgKCRwZXJsX2luc3RhbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgICBwcmludCAiSW5zdGFsbGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7Ci0gICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9pbnN0YWxsIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgICB9Ci0gIH0KLQotICBwcmludCAiXG4iOwotICBpZiAoJGluc3RhbGwgZXEgImVuYWJsZWQiKSB7Ci0gICAgcHJpbnQgIkluc3RhbGxpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOwotICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgYWJvdmUpIjsKLSAgfQotICBlbHNlIHsKLSAgICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsIHRvIGluc3RhbGwgdGhlIHBhY2thZ2UgdG8gJGluc3RhbGxfYmFzZVxuIjsKLSAgfQotCi0gIGlmICgkaW5zdGFsbF9kZXZlbCBlcSAiZW5hYmxlZCIpIHsKLSAgICBwcmludCAiSW5zdGFsbGluZyBkZXZlbG9wbWVudCBmaWxlcy4uLlxuIjsKLSAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gaW5zdGFsbF9kZXZlbCA+IGluc3RhbGxfZGV2ZWwub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBpbnN0YWxsX2RldmVsLm91dCkiOwotICB9Ci0gIGVsc2UgewotICAgIHByaW50ICJUeXBlIG5tYWtlIGluc3RhbGxfZGV2ZWwgdG8gaW5zdGFsbCB0aGUgZGV2ZWxvcG1lbnQgZmlsZXMgdG8gJGluc3RhbGxfYmFzZVxuIjsKLSAgfQotCi0gIGlmICgkcGVybF9pbnN0YWxsIGVxICJkaXNhYmxlZCIgJiYgJHBlcmwgZXEgImVuYWJsZWQiKSB7Ci0gICAgcHJpbnQgIlR5cGUgbm1ha2UgcGVybF9pbnN0YWxsIHRvIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlc1xuIjsKLSAgfQoraWYgKCRwZXJsICYmICEkcGVybF9pbnN0YWxsKSB7CisgIHByaW50ICJUeXBlIG5tYWtlIHBlcmxfaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXNcbiI7CiB9CiAKIHByaW50ICJcbkRvbmUhXG4iOwogCisjIExvY2FsIFZhcmlhYmxlczoKKyMgbW9kZTogcGVybAorIyBwZXJsLWluZGVudC1sZXZlbDogMgorIyBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyMgRW5kOgpkaWZmIC0tZ2l0IGEvd2luMzIvY29uZmlnLmggYi93aW4zMi9jb25maWcuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTQxY2I5YS4uMDAwMDAwMAotLS0gYS93aW4zMi9jb25maWcuaAorKysgL2Rldi9udWxsCkBAIC0xLDUgKzAsMCBAQAotLyoKLSAqIEV2ZXJ5b25lIHNob3VsZCBiZSBpbmNsdWRpbmcgdGhlIG5ldyBzdHlsZSBjb25maWcgaGVhZGVyLgotICogRm9yIG5vdywgd2UnbGwgZG8gaXQgZm9yIHRoZW0gZm9yIGJhY2t3YXJkcyBjb21wYXRhYmlsaXR5LgotICovCi0jaW5jbHVkZSA8bmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmg+CmRpZmYgLS1naXQgYS93aW4zMi9jb25maWcuaC5ib3JsYW5kIGIvd2luMzIvY29uZmlnLmguYm9ybGFuZAppbmRleCAzYWVmNmJiLi40N2UxYjA3IDEwMDY0NAotLS0gYS93aW4zMi9jb25maWcuaC5ib3JsYW5kCisrKyBiL3dpbjMyL2NvbmZpZy5oLmJvcmxhbmQKQEAgLTE2NCw5ICsxNjQsNiBAQAogLyogSWYgeW91IGRvbid0IGhhdmUgcm9vdCBhY2Nlc3MgZG9uJ3QgZXhpdCB1cG9uIGttZW0gZXJyb3JzICovCiAjdW5kZWYgTkVUU05NUF9OT19ST09UX0FDQ0VTUwogCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGJjb3B5IGZ1bmN0aW9uLiAgKi8KLSN1bmRlZiBIQVZFX0JDT1BZCi0KIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgZ2V0aG9zdGJ5bmFtZSBmdW5jdGlvbi4gICovCiAjZGVmaW5lIEhBVkVfR0VUSE9TVEJZTkFNRSAxCiAKQEAgLTE4NSwyMSArMTgyLDEyIEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHZzbnByaW50ZiBmdW5jdGlvbi4gICovCiAjZGVmaW5lIEhBVkVfVlNOUFJJTlRGIDEKIAotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBpbmRleCBmdW5jdGlvbi4gICovCi0jdW5kZWYgSEFWRV9JTkRFWAotCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGt2bV9vcGVuZmlsZXMgZnVuY3Rpb24uICAqLwogI3VuZGVmIEhBVkVfS1ZNX09QRU5GSUxFUwogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGxyYW5kNDggZnVuY3Rpb24uICAqLwogI3VuZGVmIEhBVkVfTFJBTkQ0OAogCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIG1lbWNweSBmdW5jdGlvbi4gICovCi0jZGVmaW5lIEhBVkVfTUVNQ1BZIDEKLQotLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBtZW1tb3ZlIGZ1bmN0aW9uLiAgKi8KLSNkZWZpbmUgSEFWRV9NRU1NT1ZFIDEKLQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSByYW5kIGZ1bmN0aW9uLiAgKi8KICNkZWZpbmUgSEFWRV9SQU5EIDEKIApAQCAtMjM5LDkgKzIyNyw2IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0YXR2ZnMgZnVuY3Rpb24uICAqLwogI3VuZGVmIEhBVkVfU1RBVFZGUwogCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmNociBmdW5jdGlvbi4gICovCi0jZGVmaW5lIEhBVkVfU1RSQ0hSIDEKLQogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBzdHJjYXNlY21wIGZ1bmN0aW9uICovCiAjZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCiAKQEAgLTQ5MSw5ICs0NzYsNiBAQAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBrc3RhdCBsaWJyYXJ5ICgtbGtzdGF0KS4gICovCiAjdW5kZWYgSEFWRV9MSUJLU1RBVAogCi0vKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGt2bSBsaWJyYXJ5ICgtbGt2bSkuICAqLwotI3VuZGVmIEhBVkVfTElCS1ZNCi0KIC8qIERlZmluZSBpZiB5b3UgaGF2ZSB0aGUgbSBsaWJyYXJ5ICgtbG0pLiAgKi8KICN1bmRlZiBIQVZFX0xJQk0KIApAQCAtNTQzLDkgKzUyNSw2IEBACiAvKiB0eXBlIGNoZWNrIGZvciBpbl9hZGRyX3QgKi8KICNkZWZpbmUgaW5fYWRkcl90IHVfbG9uZwogCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciAocHJvY2Vzc29yKSBkZWZpbmVzIF9fRlVOQ1RJT05fXyBmb3IgeW91ICovCi0jdW5kZWYgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRAotCiAvKiBtaWIgcG9pbnRlciB0byB0aGUgdG9wIG9mIHRoZSBleHRlbnNpYmxlIHRyZWUuICBUaGlzIGhhcyBiZWVuCiAgYXNzaWduZWQgdG8gVUNEYXZpcyBieSB0aGUgaWFuYSBncm91cC4gIE9wdGlvbmFsbHksIHBvaW50IHRoaXMgdG8gdGhlCiAgbG9jYXRpb24gaW4gdGhlIHRyZWUgeW91ciBjb21wYW55L29yZ2FuaXphdGlvbiBoYXMgYmVlbiBhbGxvY2F0ZWQuICovCkBAIC03MzIsNDMgKzcxMSw2IEBACiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIHN0cmVycm9yIGZ1bmN0aW9uLiAgKi8KICNkZWZpbmUgSEFWRV9TVFJFUlJPUiAxCiAKLSNpZm5kZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBIQVZFX0lOREVYCi0jIGRlZmluZSBzdHJjaHIgaW5kZXgKLSMgZGVmaW5lIHN0cnJjaHIgcmluZGV4Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWZuZGVmIEhBVkVfSU5ERVgKLSNpZmRlZiBIQVZFX1NUUkNIUgotIyBkZWZpbmUgaW5kZXggc3RyY2hyCi0jIGRlZmluZSByaW5kZXggc3RycmNocgotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTUNQWQotI2lmZGVmIEhBVkVfQkNPUFkKLSMgZGVmaW5lIG1lbWNweShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbW1vdmUoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1jbXAgYmNtcAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTU1PVkUKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgbWVtbW92ZSBtZW1jcHkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9CQ09QWQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBiY29weShzLCBkLCBuKSBtZW1jcHkgKChkKSwgKHMpLCAobikpCi0jIGRlZmluZSBiemVybyhwLG4pIG1lbXNldCgocCksKDApLChuKSkKLSMgZGVmaW5lIGJjbXAgbWVtY21wCi0jZW5kaWYKLSNlbmRpZgotCi0KIC8qIGRlZmluZSByYW5kb20gZnVuY3Rpb25zICovCiAKICNpZm5kZWYgSEFWRV9SQU5ET00KZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dCBiL3dpbjMyL2Rpc3QvUkVBRE1FLmJ1aWxkLndpbjMyLnR4dAppbmRleCAwYmQwZWU1Li4xOTI1ZmI3IDEwMDY0NAotLS0gYS93aW4zMi9kaXN0L1JFQURNRS5idWlsZC53aW4zMi50eHQKKysrIGIvd2luMzIvZGlzdC9SRUFETUUuYnVpbGQud2luMzIudHh0CkBAIC0xLDUyMCArMSwzNTkgQEAKLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgotKgotKiBSRUFETUUuYnVpbGQud2luMzIKLSoKLSogQXV0aG9yczogQWxleCBCdXJnZXIgPGFsZXhfYkB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQ+Ci0qICAgICAgICAgIAotKgotKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0KLUludHJvZHVjdGlvbgotPT09PT09PT09PT09Ci0KLVRoaXMgUkVBRE1FIG91dGxpbmVzIHRoZSBzdGVwcyByZXF1aXJlZCB0byBjcmVhdGUgYSBiaW5hcnkgcmVsZWFzZSBmb3IKLVdpbmRvd3MgdXNpbmcgTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gYW5kIHRoZSBOdWxsU29mdCBpbnN0YWxsZXIuCi0KLVRoZXJlIGFyZSBmb3VyIHNlY3Rpb25zOgotCi0gIENvbXBpbGluZyBiaW5hcmllcwotCi0gIENvbXBpbGluZyBIVE1MSGVscCBmaWxlCi0KLSAgQ29tYmluaW5nIHRoZSBiaW5hcmllcyBhbmQgSFRNTEhlbHAgZmlsZXMKLQotICBCdWxkaW5nIGEgTnVsbFNvZnQgaW5zdGFsbGVyIHBhY2thZ2UKLQotICBCdWxkaW5nIGFuIE9wZW5TU0wgdmVyc2lvbgotCi0KLUNvbXBpbGluZyBiaW5hcmllcwotPT09PT09PT09PT09PT09PT09Ci0KLVJlcXVpcmVtZW50cwotLS0tLS0tLS0tLS0tCi0KLSAtV2luZG93cyBOVC8yMDAwL1hQCi0gLU1TVkMrKyA2LjAgU1A1Ci0gLUFjdGl2ZVBlcmwgNS44LjIgYnVpbGQgODA4Ci0gLWdudV9yZWdleC5leGUgKDAuMTIpIC0gaHR0cDovL3Blb3BsZS5kZWxwaGlmb3J1bXMuY29tL2dqYy9nbnVfcmVnZXguaHRtbAotIC1QbGF0Zm9ybSBTREsKLSAtTVNZUyAvIE1pbkdXIC1vci0gdGFyLmV4ZSBhbmQgZ3ppcC5leGUKLSAtd2luMzIvZGlzdCBmb2xkZXIgZnJvbSBNQUlOIGluIENWUwotCi0KLUJ1aWxkaW5nIHRoZSBtYWluIGJpbmFyaWVzCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob3RlOiAgQWxsIHNoZWxsIHN0ZXBzIGFyZSB1c2luZyB0aGUgV2luZG93IENNRCBwcm9tcHQgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuCi0KLVBhcnQgMQotLS0tLS0tCi0KLTEuICBFeHRyYWN0IHNvdXJjZS4gIFRoZSBsb2NhdGlvbiB3aWxsIGJlIHJlZmVyZW5jZXMgYXMgKHNvdXJjZSBkaXIpCi0KLTIuICBEZWxldGUgYzpcdXNyIGlmIGl0IGV4aXN0cyBhbmQgcmVuYW1lIE5ldC1TTk1QLmRsbCBpbiB5b3VyICV3aW5kaXIlIGlmIHlvdSAKLSAgICBoYXZlIGl0IGFscmVhZHkgKHRvIGVuc3VyZSBQZXJsIHRlc3RzIGFyZSB1c2luZyB0aGUgY29tcGlsZWQgRExMKQotCi0zLiAgQXBwbHkgYW55IHJlcXVpcmVkIHBhdGNoZXMKLQotNC4gIFJlbW92ZSB0aGUgZXhhbXBsZSBNSUIgZmlsZXM6ICAKLQotICAgIEVkaXQgd2luMzJcbmV0LXNubXBcYWdlbnRcbWliX21vZHVsZV9jb25maWcuaCBhbmQgY2hhbmdlIHRoZSBmb2xsb3dpbmcgbGluZXM6Ci0KLSAgICAgICNkZWZpbmUgVVNJTkdfRVhBTVBMRVNfVUNEREVNT1BVQkxJQ19NT0RVTEUgMQotICAgICAgI2RlZmluZSBVU0lOR19FWEFNUExFU19FWEFNUExFX01PRFVMRSAxCi0KLSAgICB0bzoKLQotICAgICAgI3VuZGVmIFVTSU5HX0VYQU1QTEVTX1VDRERFTU9QVUJMSUNfTU9EVUxFCi0gICAgICAjdW5kZWYgVVNJTkdfRVhBTVBMRVNfRVhBTVBMRV9NT0RVTEUKLQotNS4gIGNkIChzb3VyY2UgZGlyKVx3aW4zMgotCi02LiAgUnVuIGJ1aWxkLmJhdAotCi03LiAgU2V0IHRvIHRoZSBmb2xsb3dpbmc6Ci0KLSAgICBOZXQtU05NUCBidWlsZCBhbmQgaW5zdGFsbCBvcHRpb25zCi0gICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotICAgIAotICAgIDEuIE9wZW5TU0wgc3VwcG9ydDogICAgICAJCWRpc2FibGVkCi0gICAgMi4gUGxhdGZvcm0gU0RLIHN1cHBvcnQ6IAkJZW5hYmxlZCAgICAgICAgICoqKgotICAgIAotICAgIDMuIEluc3RhbGwgcGF0aDogICAgICAgICAJCWM6L3VzcgotICAgIDQuIEluc3RhbGwgYWZ0ZXIgYnVpbGQ6ICAJCWVuYWJsZWQKLSAgICAKLSAgICA1LiBQZXJsIG1vZHVsZXM6ICAgICAgICAgCQllbmFibGVkICAgICAgICAgKioqCi0gICAgNi4gSW5zdGFsbCBwZXJsIG1vZHVsZXM6IAkJZGlzYWJsZWQKLSAgICAKLSAgICA3LiBRdWlldCBidWlsZCAobG9nZ2VkKTogCQllbmFibGVkCi0gICAgOC4gRGVidWcgbW9kZTogICAgICAgICAgIAkJZGlzYWJsZWQKLSAgICA5LiBJUHY2IHRyYW5zcG9ydHM6ICAgICAgCQlkaXNhYmxlZAotCi0gICAgMTAuIExpbmsgdHlwZTogICAgICAgICAgICAgICAgICAgICAgc3RhdGljCi0KLSAgICAxMS4gSW5zdGFsbCBkZXZlbG9wbWVudCBmaWxlcyAgIAllbmFibGVkICAgICAgICAgKioqCi0gICAgCi0gICAgRi4gIEZpbmlzaGVkIC0gc3RhcnQgYnVpbGQKLSAgICBRLiAgUXVpdCAtIGFib3J0IGJ1aWxkCi0gICAgCi0gICAgU2VsZWN0IG9wdGlvbiB0byBzZXQgLyB0b2dnbGU6Ci0KLTguICBGIHRvIHN0YXJ0IHRoZSBidWlsZCBhbmQgdmVyaWZ5IGV2ZXJ5dGhpbmcgd2FzIGJ1aWx0IG9rCi0KLTkuICBEZWxldGUgYW55IGdlbmVyYXRlZCBjb25maWcgZmlsZXMgZnJvbSBjOlx1c3Jcc25tcFxwZXJzaXN0Ci0KLVBhcnQgMiAtIENvbXBpbGluZyB3aW5FeHRETEwKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotMTAuIE1vZGlmeSBmaWxlcyBhcyBleHBsYWluZWQgaW4gUkVBRE1FLndpbjMyIHNlY3Rpb24gJ1J1bm5pbmcgTmV0LVNOTVAgYXMKLSAgICBhIHJlcGxhY2VtZW50IGZvciB0aGUgTWljcm9zb2Z0IFNOTVAgc2VydmljZScgLSAnQ29tcGlsaW5nIE5ldC1TTk1QIHdpdGggCi0gICAgdGhlIHdpbkV4dERMTCBleHRlbnNpb24gKE1TVkMpJy4KLQotMTEuICBTZXQgdG8gdGhlIGZvbGxvd2luZzoKLQotICAgIE5ldC1TTk1QIGJ1aWxkIGFuZCBpbnN0YWxsIG9wdGlvbnMKLSAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0gICAgCi0gICAgMS4gT3BlblNTTCBzdXBwb3J0OiAgICAgIAkJZGlzYWJsZWQKLSAgICAyLiBQbGF0Zm9ybSBTREsgc3VwcG9ydDogCQllbmFibGVkICAgICAgICAgKioqCi0gICAgCi0gICAgMy4gSW5zdGFsbCBwYXRoOiAgICAgICAgIAkJYzovdXNyCi0gICAgNC4gSW5zdGFsbCBhZnRlciBidWlsZDogIAkJZGlzYWJsZWQgICAgICAgICoqKgotICAgIAotICAgIDUuIFBlcmwgbW9kdWxlczogICAgICAgICAJCWRpc2FibGVkCi0gICAgNi4gSW5zdGFsbCBwZXJsIG1vZHVsZXM6IAkJZGlzYWJsZWQKLSAgICAKLSAgICA3LiBRdWlldCBidWlsZCAobG9nZ2VkKTogCQllbmFibGVkCi0gICAgOC4gRGVidWcgbW9kZTogICAgICAgICAgIAkJZGlzYWJsZWQKLSAgICA5LiBJUHY2IHRyYW5zcG9ydHM6ICAgICAgCQlkaXNhYmxlZAotCi0gICAgMTAuIExpbmsgdHlwZTogICAgICAgICAgICAgICAgICAgICAgc3RhdGljCi0KLSAgICAxMS4gSW5zdGFsbCBkZXZlbG9wbWVudCBmaWxlcyAgIAlkaXNhYmxlZAotICAgIAotICAgIEYuICBGaW5pc2hlZCAtIHN0YXJ0IGJ1aWxkCi0gICAgUS4gIFF1aXQgLSBhYm9ydCBidWlsZAotICAgIAotICAgIFNlbGVjdCBvcHRpb24gdG8gc2V0IC8gdG9nZ2xlOgotCi0xMi4gRiB0byBzdGFydCB0aGUgYnVpbGQgYW5kIHZlcmlmeSBldmVyeXRoaW5nIHdhcyBidWlsdCBvawotCi0xMy4gQ29weSB0aGUgbmV3IGJpbmFyeToKLQotICAgIGNvcHkgYmluXHJlbGVhc2Vcc25tcGQuZXhlIGM6XHVzclxiaW5cc25tcGQtd2luRXh0RExMLmV4ZQotCi0xNC4gVGVzdCBlYWNoIGJpbmFyeSBieSBydW5uaW5nIGVhY2ggb25lIHdpdGggLUR3aW5FeHRETEwuICBNYWtlIHN1cmUgb25seSB0aGUKLSAgICB3aW5FeHRETEwgdmVyc2lvbiBoYXMgZGVidWcgb3V0cHV0LgotCi0KLVBhcnQgMyAtIENyZWF0aW5nIHRoZSBQZXJsIHBhY2thZ2UKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotMS4gIGNkIChzb3VyY2UgZGlyKQotICAgIGNkIHBlcmwKLQotMi4gIG5tYWtlIHBwZAotCi0zLiAgT3BlbiBhbiBNU1lTIHNoZWxsICh1bmxlc3MgeW91IGhhdmUgdGFyLmV4ZSBhbmQgZ3ppcC5leGUpCi0KLTQuICBjZCAoc291cmNlIGRpcikKLSAgICBjZCBwZXJsCi0KLTUuICB0YXIgY3ZmIE5ldFNOTVAudGFyIGJsaWI7IGd6aXAgLS1iZXN0IE5ldFNOTVAudGFyCi0KLTYuICBPcGVuIGEgV2luZG93cyBjb21tYW5kIHByb21wdCAoQ01EKSBhbmQgY2QgKHNvdXJjZSBkaXIpXHBlcmwKLQotNy4gIHJlbiBCdW5kbGUtTmV0U05NUC5wcGQgTmV0U05NUC5wcGQKLQotOC4gIE1vZGlmeSBOZXRTTk1QLnBwZCB0byBsb29rIGxpa2UgdGhlIGZvbGxvd2luZy4gIENoYW5nZSB0aGUgCi0gICAgVkVSU0lPTj0ieCx4LHgseCIgbGluZSB0byB0aGUgY29ycmVjdCB2YWx1ZXMuICBEbyBOT1QgY2hhbmdlIAotICAgICogbGluZXMgaW4gdGhlIG9yaWdpbmFsIGZpbGUuCi0KLTxTT0ZUUEtHIE5BTUU9Ik5ldFNOTVAiIFZFUlNJT049IjUsMiwwLDAiPgotICAgIDxUSVRMRT5OZXQtU05NUDwvVElUTEU+Ci0gICAgPEFCU1RSQUNUPk9iamVjdCBPcmllbnRlZCBJbnRlcmZhY2UgdG8gTmV0LVNOTVA8L0FCU1RSQUNUPgotICAgIDxBVVRIT1I+PC9BVVRIT1I+Ci0gICAgPElNUExFTUVOVEFUSU9OPgotKiAgICAgICAgPE9TIE5BTUU9Ik1TV2luMzIiIC8+Ci0qICAgICAgICA8QVJDSElURUNUVVJFIE5BTUU9Ik1TV2luMzIteDg2LW11bHRpLXRocmVhZC01LjgiIC8+Ci0gICAgICAgIDxDT0RFQkFTRSBIUkVGPSJ4ODYvTmV0U05NUC50YXIuZ3oiIC8+Ci0gICAgPC9JTVBMRU1FTlRBVElPTj4KLTwvU09GVFBLRz4KLQotOS4gIENyZWF0ZSBiYXNlIGRpcmVjdG9yaWVzOgotCi0gICAgbWQgImM6XHVzclxkb2NzIgotICAgIG1kICJjOlx1c3JccGVybCIKLSAgICBtZCAiYzpcdXNyXHBlcmxceDg2IgotICAgIG1kICJjOlx1c3JcdGVtcCIKLQotMTAuIENvcHkgZmlsZXM6Ci0KLSAgICBjZCAoc291cmNlIGRpcikKLSAgICBjb3B5IENPUFlJTkcgImM6XHVzclxkb2NzIgotICAgIGNvcHkgd2luMzJcZGlzdFxSRUFETUUudHh0ICJjOlx1c3IiCi0gICAgY29weSB3aW4zMlxkaXN0XHNjcmlwdHNcbmV0LXNubXAtcGVybC10ZXN0LnBsICJjOlx1c3JcYmluIgotCi0gICAgY29weSBwZXJsXE5ldFNOTVAucHBkICJjOlx1c3JcUGVybCIKLSAgICBjb3B5IHBlcmxcTmV0U05NUC50YXIuZ3ogImM6XHVzclxQZXJsXHg4NiIKLQotMTEuIFVwZGF0ZSB0aGUgQlVJTEQgSU5GT1JNQVRJT04gc2VjdGlvbiBvZiBjOlx1c3JcUkVBRE1FLnR4dAotCi0KLUNvbXBpbGluZyBIVE1MSGVscCBmaWxlCi09PT09PT09PT09PT09PT09PT09PT09PQotCi1UaGlzIHNlY3Rpb24gb3V0bGluZXMgdGhlIHN0ZXBzIHJlcXVpcmVkIHRvIGJ1aWxkIGEgV2luZG93cyBIVE1MIEhlbHAgZmlsZQotYmFzZWQgb24gdGhlIE5ldC1TTk1QIG1hbiBwYWdlcywgUkVBRE1FIGZpbGVzLCBQZXJsZG9jIGRvY3VtZW50YXRpb24gZXRjLgotCi1SZXF1aXJlbWVudHMKLS0tLS0tLS0tLS0tLQotCi0gLUxpbnV4IChvciBzaW1pbGFyKSB3aXRoOgotICAgLW1hbiAobWFuIHBhZ2Ugdmlld2VyKQotICAgLXRpZHkgKEhUTUwgdGlkeSAtIGh0dHA6Ly90aWR5LnNvdXJjZWZvcmdlLm5ldCkKLSAgIC1QZXJsCi0gICAtcGVybGRvYwotICAgLW1hbjJodG1sMy4wLjEudGFyLmd6IChodHRwOi8vc2VhcmNoLmNwYW4ub3JnL35laG9vZC9tYW4yaHRtbDMuMC4xLykKLSAgICBOb3RlOiAgTW9zdCBMaW51eCBkaXN0cmlidXRpb25zIGNvbWUgd2l0aCBtYW4yaHRtbCBhcyBwYXJ0IG9mIHRoZSBtYW4gcnBtCi0gICAgICAgICAgIHBhY2thZ2Ugd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIG1hbjJodG1sIGZyb20gbWFuMmh0bWwzLjAuMS50YXIuZ3ouCi0gICAgICAgICAgIEFsbCB0aGF0IGlzIG5lZWRlZCBmcm9tIG1hbjJodG1sMy4wLjEudGFyLmd6IGlzIHRoZSBtYW4yaHRtbCBzY3JpcHQuICAKLSAgICAgICAgICAgWW91IGRvIG5vdCBuZWVkIHRvIGRvIGEgY29tcGxldGUgaW5zdGFsbCAobWFrZS9tYWtlIGluc3RhbGwpIGJ1dCB5b3UKLSAgICAgICAgICAgZG8gbmVlZCB0byBtYWtlIHN1cmUgdGhlIHNjcmlwdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBieSBzZXR0aW5nIHRoZQotICAgICAgICAgICBtYW4gY29tbWFuZCBsaW5lIHN3aXRjaGVzIGV0YyBmb3IgdGhlIE9TIGZyb20gaW5zaWRlIG9mIHRoZSBzY3JpcHQuCi0KLSAtV2luZG93cyB3aXRoOgotICAgLUhUTUwgSGVscCBXb3Jrc2hvcCAoU2VhcmNoIG1zZG4ubWljcm9zb2Z0LmNvbSBmb3IgJ2h0bWwgaGVscCB3b3Jrc2hvcCBkb3dubG9hZCcpCi0KLQotQ29udmVydCBkb2N1bWVudHMgdG8gaHRtbAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1Ob3RlOiAgVGhlIGZvbGxvd2luZyBzdGVwcyBhcmUgY29tcGxldGVkIHVzaW5nIExpbnV4LgotCi1Ob3RlOiAgQSB0ZW1wb3JhcnkgbG9jYXRpb24gb2YgL3RtcC9uZXQtc25tcCBpcyB1c2VkLgotCi0xLiAgRXh0cmFjdCBOZXQtU05NUCBzb3VyY2UgYW5kIGNkIChzb3VyY2UgZGlyKQotCi0yLiAgY2QgKHNvdXJjZSBkaXIpCi0KLTMuICBjcCBwZXJsL1NOTVAvUkVBRE1FIFJFQURNRS5wZXJsCi0KLTQuICBSZW1vdmUgb2xkZXIgY29waWVzIG9mIGNvbnZlcnRlZCBmaWxlczoKLQotICAgIHJtIC1SIC1mIC90bXAvbmV0LXNubXAKLQotNS4gIEJ1aWxkIE5ldC1TTk1QIG1hbiBwYWdlczogCi0KLSAgICAuL2NvbmZpZ3VyZSAtLXByZWZpeD1jOi91c3I7IG1ha2Ugc2Vkc2NyaXB0OyBjZCBtYW47bWFrZTsgY2QgLi4KLQotNi4gIEluc3RhbGwgb25seSB0aGUgbWFuIGZpbGVzIHRvIC90ZW1wL25ldC1zbm1wOgotCi0gICAgY2QgbWFuOyBtYWtlIGluc3RhbGwgcHJlZml4PS90bXAvbmV0LXNubXA7IGNkIC4uCi0KLTcuICBHbyB0byB0aGUgc2NyaXB0cyBmb2xkZXIgYW5kIG1ha2Ugc3VyZSBhbGwgdGhlIHNjcmlwdHMgYXJlIGV4ZWN1dGFibGU6Ci0KLSAgICBjZCAoc291cmNlIGRpcikKLSAgICBjZCB3aW4zMi9kaXN0L3NjcmlwdHM7IGNobW9kICt4ICoKLQotOC4gIEVkaXQgdGhlc2UgZmlsZXMgYW5kIG1ha2Ugc3VyZSB0aGUgcGF0aHMgYXJlIGNvcnJlY3QgaW4gdGhlIE9QVElPTlMgCi0gICAgc2VjdGlvbi4gIEFsc28gZW5zdXJlIHRoZSBsaXN0IG9mIFJFQURNRSBmaWxlcyBhbmQgUGVybCBtb2R1bGVzIAotICAgIGFyZSBjb3JyZWN0IGluIHJlYWRtZTJodG1sIGFuZCBwb2RkaXIyaHRtbC4KLQotICAgIG1hbmRpcjJodG1sCi0gICAgcmVhZG1lMmh0bWwKLSAgICBwb2RkaXIyaHRtbAotCi0gICAgTm90ZTogIG1hbmRpcjJodG1sIHdpbGwgcHJvY2VzcyBBTEwgbWFuIHBhZ2VzIGluIGM6XHRlbXBcbmV0LXNubXAgd2hpbGUKLSAgICAgICAgICAgcmVhZG1lMmh0bWwgYW5kIHBvZGRpcjJodG1sIHdpbGwgb25seSBwcm9jZXNzIGZpbGVzIGxpc3RlZCBpbiB0aGUKLSAgICAgICAgICAgc2NyaXB0LiAgSWYgbmV3IG1hbiBwYWdlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgdGhlIFRhYmxlIG9mIAotICAgICAgICAgICBDb250ZW50cyAodG9jLmhoYykgYW5kIHByb2plY3QgZmlsZSAoTmV0LVNOTVAuaGhwKSBuZWVkIHRvIGJlIAotICAgICAgICAgICB1cGRhdGVkIGJ5IGhhbmQuCi0KLTkuICBSdW4gZWFjaCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIC5odG1sIGZpbGVzOgotCi0gICAgLi9tYW5kaXIyaHRtbDsgLi9yZWFkbWUyaHRtbDsgLi9wb2RkaXIyaHRtbAotCi0gICAgTm90ZTogIFRoZXJlIHdpbGwgYmUgbWFueSB3YXJuaW5ncyBmcm9tIHRpZHkgd2hpY2ggY2FuIGJlIGlnbm9yZWQuCi0KLTEwLiBWZXJpZnkgZWFjaCBjb252ZXJ0ZWQgZmlsZSB0byBlbnN1cmUgYWxsIHRoZSBsaW5rcyBhcmUgY29ycmVjdC4gIFRoZSBmaWxlcwotICAgIGFyZSBsb2NhdGVkIGluIC90bXAvbmV0LXNubXAvaHRtbCBieSBkZWZhdWx0LiAgSW4gc29tZSBpbnN0YW5jZXMsIFVSTHMgbWF5IGJlIAotICAgIHNwbGl0IGFjcm9zcyB0d28gbGluZXMgc3VjaCBhcyB0aGUgVmFyaWFibGVzIGxpbmsgYXQgdGhlIGJvdHRvbSBvZiAKLSAgICAvdG1wL25ldC1zbm1wL2h0bWwvbWFuOC1zbm1wdHJhcGQuOC5odG1sLgotCi0xMS4gSWYgbmV3IG1hbiBwYWdlcyBhcmUgYWRkZWQgb3IgcmVtb3ZlZCwgdGhlIFRhYmxlIG9mIENvbnRlbnRzIChOZXQtU05NUC5oaGMpIGFuZAotICAgIHByb2plY3QgZmlsZSAoTmV0LVNOTVAuaGhwKSBuZWVkIHRvIGJlIHVwZGF0ZWQgYnkgaGFuZC4KLQotMTIuIENvbnZlcnQgRVhBTVBMRS5jb25mLndpbjMyIHRvIGh0bWw6Ci0KLSAgICAuL3R4dDJodG1sIC4uLy4uL0VYQU1QTEUuY29uZi53aW4zMiB8IHRpZHkgPiAvdG1wL25ldC1zbm1wL2h0bWwvRVhBTVBMRS5jb25mLndpbjMyLmh0bWwKLSAgICAKLQotQnVpbGQgTmV0LVNOTVAuY2htCi0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTm90ZTogIFRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGNvbXBsZXRlZCB1c2luZyBXaW5kb3dzLgotCi1Ob3RlOiAgQSB0ZW1wb3JhcnkgbG9jYXRpb24gb2YgYzpcdGVtcFxuZXQtc25tcCBpcyB1c2VkLgotCi0xLiAgVHJhbnNmZXIgL3RtcC9uZXQtc25tcC9odG1sIGZyb20gTGludXggdG8gYzpcdGVtcFxuZXQtc25tcFxodG1sCi0KLTIuICBHcmFiIHRoZSBGQVEgZnJvbSB0aGUgd2ViIHNpdGUsIHN0cmlwIG91dCB0aGUgaW5jbHVkZXMgYW5kIHNhdmUgYXMKLSAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRkFRLmh0bWwgYW5kIHJ1bjoKLQotICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXEZBUS5odG1sCi0KLTMuICBHcmFiIHRoZSBEZXZsb3BlciBGQVEgZnJvbSB0aGUgd2ViIHNpdGUsIHN0cmlwIG91dCB0aGUgaW5jbHVkZXMgYW5kIHNhdmUgYXMKLSAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcRGV2ZWxvcGVyX0ZBUS5odG1sIGFuZCBydW46Ci0KLSAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxEZXZlbG9wZXJfRkFRLmh0bWwKLQotNC4gIENvcHkgdGhlIGZvbGxvd2luZyBmaWxlcyB0byBjOlx0ZW1wXG5ldC1zbm1wXGh0bWw6Ci0KLSAgICBjZCAoc291cmNlIGRpcikKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXENvbmZpZ3VyYXRpb25fT3ZlcnZpZXcuaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcSGVscF9DYXZlYXRzLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXEludHJvZHVjdGlvbi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxOZXQtU05NUC5oaGMiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXE5ldC1TTk1QLmhocCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXAotICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcbmV0LXNubXAtNC4yLTgwMC5qcGciIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXHNubXAuY29uZi53aW4zMi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcCi0gICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxzbm1wZC5jb25mLndpbjMyLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLSAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXHNubXB0cmFwZC5jb25mLndpbjMyLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwKLQotNS4gIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3IHJlbGVhc2Ugb2YKLSAgICBOZXQtU05NUCwgc28gdGhlICouY29uZi53aW4zMi5odG1sIGZpbGVzIHNob3VsZCBiZSB1cGRhdGVkLgotCi0gICAgQ3JlYXRlIGEgdGV4dCBmaWxlIHdpdGggYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHNubXBkIGFuZCAKLSAgICBzbm1wdHJhcGQgdXNpbmc6Ci0KLSAgICBjZCB3aW4zMlxiaW5ccmVsZWFzZSAoZm9sZGVyIG9mICpXaW5kb3dzKiBjb21waWxlZCBOZXQtU05NUCkKLSAgICBzbm1wdHJhcGQgLUggMj4gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXB0cmFwZC5vcHRpb25zCi0gICAgc25tcGQgLUggMj4gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXBkLm9wdGlvbnMKLQotICAgIFVwZGF0ZSB0aGVzZSBmaWxlcyB1c2luZyBhbiBIVE1MIGVkaXRvciAoTW96aWxsYSBldGMpOgotCi0gICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXAuY29uZi53aW4zMi5odG1sCi0gICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXBkLmNvbmYud2luMzIuaHRtbAotICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wdHJhcGQuY29uZi53aW4zMi5odG1sCi0gCi0gICAgT25seSBhZGQgdGhlIHJlbGV2ZW50IHNlY3Rpb24gdG8gZWFjaCBmaWxlIGZyb20gdGhlIC5vcHRpb25zIGZpbGVzCi0gICAgY3JlYXRlZCBhYm92ZSwgZW5zdXJlIHRoZSBmb250IGlzIHNldCB0byBmaXhlZCB3aWR0aC4KLQotICAgIFRpZHkgZWFjaCBmaWxlIHVzaW5nIHRpZHkgdW5kZXIgV2luZG93cyAob3IgdHJhbnNmZXIgdG8gTGludXggYW5kIHRpZHkKLSAgICB1c2luZyBMaW51eCk6Ci0KLSAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wdHJhcGQuY29uZi53aW4zMi5odG1sCi0gICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcGQuY29uZi53aW4zMi5odG1sCi0gICAgdGlkeSAtYXN4aHRtbCAtbSBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcC5jb25mLndpbjMyLmh0bWwKLQotNi4gIEVkaXQgYzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmhocCBhbmQgdXBkYXRlIHRoZSB2ZXJzaW9uIGZvciB0aGUgCi0gICAgJ1RpdGxlJyB2YXJpYWJsZS4KLQotNy4gIFJ1biBIVE1MIFdvcmtzaG9wCi0KLTguICBPcGVuIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5oaHAKLQotOS4gIENsaWNrIEZpbGUgLSBDb21waWxlCi0KLTEwLiBTZWxlY3QgJ0M6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5oaHAnIGFzIHRoZSBmaWxlbmFtZQotCi0xMS4gQ2xpY2sgQ29tcGlsZQotCi0xMi4gWW91IHNob3VsZCBub3cgaGF2ZSBhIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5jaG0gZmlsZS4KLQotMTMuIExhdW5jaCB0aGUgZmlsZSBhbmQgZW5zdXJlIGV2ZXJ5IGNvbnRlbnQgaXRlbSBkaXNwbGF5cyB0aGUgY29ycmVjdCBwYWdlLgotCi0KLUNvbWJpbmluZyB0aGUgYmluYXJpZXMgYW5kIEhUTUxIZWxwIGZpbGVzCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCi0xLiAgQ29weSB0aGUgSFRNTCBIZWxwIGZpbGUgdG8gYzpcdXNyXGRvY3M6Ci0KLSAgICBjb3B5IGM6XHRlbXBcTmV0LVNOTVBcaHRtbFxOZXQtU05NUC5jaG0gYzpcdXNyXGRvY3NcCi0KLQotQnVsZGluZyBhIE51bGxTb2Z0IGluc3RhbGxlciBwYWNrYWdlCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0KLQotIC1XaW5kb3dzCi0gLU51bGxzb2Z0IFNjcmlwdGFibGUgSW5zdGFsbCBTeXN0ZW0gMi4wIC0gaHR0cDovL25zaXMuc291cmNlZm9yZ2UubmV0L2hvbWUvCi0KLTEuICBDb21wbGV0ZSB0aGUgdGhyZWUgc2VjdGlvbnMgYWJvdmU6ICAnQ29tcGlsaW5nIGJpbmFyaWVzJywgJ0NvbXBpbGluZyAKLSAgICBIVE1MSGVscCBmaWxlJyBhbmQgJ0NvbWJpbmluZyB0aGUgYmluYXJpZXMgYW5kIEhUTUxIZWxwIGZpbGVzJy4gIE5ldC1TTk1QCi0gICAgc2hvdWxkIGJlIGxvY2F0ZWQgaW4gYzpcdXNyLgotCi0yLiAgQ29weSB0aGUgZm9sbG93aW5nIGZpbGVzIHRvIGM6XHVzcjoKLQotICAgIGNkIChzb3VyY2UgZGlyKQotICAgIGNvcHkgd2luMzJcZGlzdFxpbnN0YWxsZXJcU2V0RW5WYXIubnNpIGM6XHVzclwKLSAgICBjb3B5IHdpbjMyXGRpc3RcaW5zdGFsbGVyXG5ldC1zbm1wLm5zaSBjOlx1c3JcCi0gICAgY29weSB3aW4zMlxkaXN0XGluc3RhbGxlclxBZGQyUGF0aC5uc2kgYzpcdXNyXAotICAgIGNvcHkgd2luMzJcZGlzdFxpbnN0YWxsZXJcbmV0LXNubXAtaGVhZGVyMS5ibXAgYzpcdXNyXAotCi0zLiAgQ3JlYXRlIHRoZSBmb2xsb3dpbmcgZW1wdHkgZmlsZXM6Ci0KLSAgICBlY2hvIC4gPiBjOlx1c3JccmVnaXN0ZXJhZ2VudC5iYXQKLSAgICBlY2hvIC4gPiBjOlx1c3JcdW5yZWdpc3RlcmFnZW50LmJhdAotICAgIGVjaG8gLiA+IGM6XHVzclxyZWdpc3RlcnRyYXBkLmJhdAotICAgIGVjaG8gLiA+IGM6XHVzclx1bnJlZ2lzdGVydHJhcGQuYmF0Ci0gICAgZWNobyAuID4gYzpcdXNyXGV0Y1xzbm1wXHNubXAuY29uZgotCi00LiAgRWRpdCB0aGUgZm9sbG93aW5nIHZhcmlhYmxlcyBpbiBjOlx1c3JcbmV0LXNubXAubnNpOgotCi0gICAgUFJPRFVDVF9NQUpfVkVSU0lPTgotICAgIFBST0RVQ1RfTUlOX1ZFUlNJT04KLSAgICBQUk9EVUNUX1JFVklTSU9OCi0gICAgUFJPRFVDVF9FWEVfVkVSU0lPTgotCi0gICAgRm9yIGV4YW1wbGUsIGZvciA1LjEuMjoKLQotICAgIFBST0RVQ1RfTUFKX1ZFUlNJT04gIjUiCi0gICAgUFJPRFVDVF9NSU5fVkVSU0lPTiAiMSIKLSAgICBQUk9EVUNUX1JFVklTSU9OICIyIgotICAgIFBST0RVQ1RfRVhFX1ZFUlNJT04gIjEiCi0KLSAgICBUaGUgZ2VuZXJhdGVkIGZpbGVuYW1lIHdvdWxkIGJlOiBuZXQtc25tcC01LjEuMi0xLndpbjMyLmV4ZQotCi0gICAgUFJPRFVDVF9FWEVfVkVSU0lPTiBpcyB1c3VhbGx5IDEgdW5sZXNzIHRoZSBiaW5hcnkgcGFja2FnZSBpcyByZS1yZWxlYXNlZAotICAgIGR1ZSB0byBwYWNrYWdpbmcgaXNzdWVzLiAgRm9yIHByZSByZWxlYXNlcywgaW5jbHVkZSB0aGUgcHJlLXJlbGVhc2UgdmVyc2lvbiAKLSAgICBpbiBQUk9EVUNUX1JFVklTSU9OLiAgIEZvciBleGFtcGxlLCBmb3IgNS4xLjIgcHJlMiB1c2U6Ci0KLSAgICBQUk9EVUNUX01BSl9WRVJTSU9OICI1IgotICAgIFBST0RVQ1RfTUlOX1ZFUlNJT04gIjEiCi0gICAgUFJPRFVDVF9SRVZJU0lPTiAiMi5wcmUyIgotICAgIFBST0RVQ1RfRVhFX1ZFUlNJT04gIjEiCi0KLSAgICBUaGlzIHdpbGwgZW5zdXJlIHRoZSB2ZXJzaW9uIG51bWJlciBpcyB2aXNpYmxlIGR1cmluZyBpbnN0YWxsYXRpb24uCi0KLSAgICBUaGUgZ2VuZXJhdGVkIGZpbGVuYW1lIHdvdWxkIGJlOiBuZXQtc25tcC01LjEuMi5wcmUyLTEud2luMzIuZXhlCi0KLTUuICBMYXVuY2ggdGhlICdOdWxsc29mdCBJbnN0YWxsIFN5c3RlbSAoTlNJUyAyLjApJwotCi02LiAgU2VsZWN0ICdNYWtlTlNJU1cgKGNvbXBpbGVyIGludGVyZmFjZSknCi0KLTcuICBDbGljayBGaWxlIC0gTG9hZCBTY3JpcHQKLQotOC4gIFNlbGVjdCBjOlx1c3JcbmV0LXNubXAubnNpCi0KLTkuICBZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgYzpcdXNyXE5ldC1TTk1QLXgueC54LXguZXhlIGJpbmFyeSBpbnN0YWxsZXIgCi0gICAgcGFja2FnZQotCi0xMC4gVGVzdCB0aGUgcGFja2FnZQotCi0xMS4gQ29tcGFyZSB0aGUgZGlyZWN0b3J5IGNvbnRlbnRzIG9mIHRoZSBjb21waWxlZCBmb2xkZXIgd2l0aCB0aGUgaW5zdGFsbGVkCi0gICAgZm9sZGVyIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gbWlzc2luZyBNSUIgZmlsZXMgZXRjLiAgTW9kaWZ5IG5ldC1zbm1wLm5zaQotICAgIGFuZCByZWJ1aWxkIGlmIHJlcXVpcmVkLgotCi0xMi4gQ3JlYXRlIGEgLnppcCBmaWxlIG9mIGM6XHVzciBmb3IgYXJjaGl2ZSBwdXJwb3Nlcy4KLQotCi1CdWxkaW5nIGFuIE9wZW5TU0wgdmVyc2lvbgotPT09PT09PT09PT09PT09PT09PT09PT09PT0KLQotUmVxdWlyZW1lbnRzCi0tLS0tLS0tLS0tLS0KLQotIC1PcGVuU1NMIGJpbmFyeSBmcm9tIGh0dHA6Ly93d3cuc2xwcm93ZWIuY29tL3Byb2R1Y3RzL1dpbjMyT3BlblNTTC5odG1sCi0KLTEuICBJbnN0YWxsIHRoZSBPcGVuU1NMIGJpbmFyeSwgaGVhZGVyIGFuZCBsaWJyYXJ5IGZpbGVzIGFzIGV4cGxhaW5lZCBpbiAKLSAgICAnVXNpbmcgYSBwcmUtY29tcGlsZWQgdmVyc2lvbicgb2YgdGhlICdNaWNyb3NvZnQgVmlzdWFsIEMrKyAtIEJ1aWxkaW5nIHdpdGggCi0gICAgT3BlblNTTCcgc2VjdGlvbiBvZiBSRUFETUUud2luMzIuCi0KLTIuICBNb3ZlIGM6XHVzciBjOlx1c3IudGVtcAotCi0zLiAgUmUtYnVpbGQgdGhlIGJpbmFyeSBieSBmb2xsb3dpbmcgdGhlIHN0ZXBzIGluIHRoZSBzZWN0aW9uICdCdWlsZGluZyB0aGUgCi0gICAgbWFpbiBiaW5hcmllcycgZXhjZXB0IGVuYWJsZSBPcGVuU1NMLiAgQmUgc3VyZSB0byB1bmRvIHRoZSB3aW5FeHRETEwgCi0gICAgY2hhbmdlcyBiZWZvcmUgc3RhcnRpbmcgYnkgY29weWluZyBhIGZyZXNoIG5ldC1zbm1wLWNvbmZpZy5oLmluIGFuZCAKLSAgICBuZXRzbm1wbWlic3Nkay5kc3AuCi0KLTQuICBDb3B5IGNvbnRlbnRzIG9mIGM6XHVzciB0byBjOlx1c3IudGVtcAotCi01LiAgRGVsZXRlIGM6XHVzcgotCi02LiAgTW92ZSBjOlx1c3IudGVtcCBjOlx1c3IKLQotNy4gIFVwZGF0ZSB0aGUgQlVJTEQgSU5GT1JNQVRJT04gc2VjdGlvbiBvZiBjOlx1c3JcUkVBRE1FLnR4dCB0byBpbmNsdWRlIHRoZSBTU0wgCi0gICAgaW5mbyBhbmQgdGhlIGZpbGVuYW1lLgotCi04LiAgVXBkYXRlIHRoZSB2ZXJzaW9uIHN0YW1wIGluIGM6XHVzclxuZXQtc25tcC5uc2kgdG8gaW5jbHVkZSAtc3NsLiAgRXhhbXBsZToKLQotICAgIEZvciBleGFtcGxlLCBmb3IgNS4zLjA6Ci0KLSAgICBQUk9EVUNUX01BSl9WRVJTSU9OICI1IgotICAgIFBST0RVQ1RfTUlOX1ZFUlNJT04gIjMiCi0gICAgUFJPRFVDVF9SRVZJU0lPTiAiMC1zc2wiCi0gICAgUFJPRFVDVF9FWEVfVkVSU0lPTiAiMSIKLQotICAgIFRoZSBnZW5lcmF0ZWQgZmlsZW5hbWUgd291bGQgYmU6IG5ldC1zbm1wLTUuMy4wLXNzbC0xLndpbjMyLmV4ZQotCi05LiAgSW4gYzpcdXNyXG5ldC1zbm1wLm5zaSwgY2hhbmdlOgotCi0gICAgIWRlZmluZSBPUEVOU1NMX1JFUVVJUkVEICIwIgotCi0gICAgdG8KLQotICAgICFkZWZpbmUgT1BFTlNTTF9SRVFVSVJFRCAiMSIKLQotMTAuIExhdW5jaCB0aGUgJ051bGxzb2Z0IEluc3RhbGwgU3lzdGVtIChOU0lTIDIuMCknCi0KLTExLiBTZWxlY3QgJ01ha2VOU0lTVyAoY29tcGlsZXIgaW50ZXJmYWNlKScKLQotMTIuIENsaWNrIEZpbGUgLSBMb2FkIFNjcmlwdAotCi0xMy4gU2VsZWN0IGM6XHVzclxuZXQtc25tcC5uc2kKLQotMTQuIFlvdSBzaG91bGQgbm93IGhhdmUgYSBjOlx1c3JcTmV0LVNOTVAteC54LngteC5leGUgYmluYXJ5IGluc3RhbGxlciAKLSAgICBwYWNrYWdlCi0KLTE1LiBUZXN0IHRoZSBwYWNrYWdlCi0KLTE2LiBDb21wYXJlIHRoZSBkaXJlY3RvcnkgY29udGVudHMgb2YgdGhlIGNvbXBpbGVkIGZvbGRlciB3aXRoIHRoZSBpbnN0YWxsZWQKLSAgICBmb2xkZXIgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtaXNzaW5nIE1JQiBmaWxlcyBldGMuICBNb2RpZnkgbmV0LXNubXAubnNpCi0gICAgYW5kIHJlYnVpbGQgaWYgcmVxdWlyZWQuCi0KLTE3LiBDcmVhdGUgYSAuemlwIGZpbGUgb2YgYzpcdXNyIGZvciBhcmNoaXZlIHB1cnBvc2VzLgotCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCisqDQorKiBSRUFETUUuYnVpbGQud2luMzINCisqDQorKiBBdXRob3I6IEFsZXggQnVyZ2VyIDxhbGV4X2JAdXNlcnMuc291cmNlZm9yZ2UubmV0Pg0KKyogICAgICAgICAgDQorKg0KKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KKw0KK0ludHJvZHVjdGlvbg0KKz09PT09PT09PT09PQ0KKw0KK1RoaXMgUkVBRE1FIG91dGxpbmVzIHRoZSBzdGVwcyByZXF1aXJlZCB0byBjcmVhdGUgYSBiaW5hcnkgcmVsZWFzZSBmb3INCitXaW5kb3dzIHVzaW5nIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIGFuZCB0aGUgTnVsbFNvZnQgaW5zdGFsbGVyLg0KKw0KK1RoZXJlIGFyZSBmb3VyIHNlY3Rpb25zOg0KKw0KKyAgQ29tcGlsaW5nIGJpbmFyaWVzDQorDQorICBDb21waWxpbmcgSFRNTEhlbHAgZmlsZQ0KKw0KKyAgQ29tYmluaW5nIHRoZSBiaW5hcmllcyBhbmQgSFRNTEhlbHAgZmlsZXMNCisNCisgIEJ1bGRpbmcgYSBOdWxsU29mdCBpbnN0YWxsZXIgcGFja2FnZQ0KKw0KKw0KK0NvbXBpbGluZyBiaW5hcmllcw0KKz09PT09PT09PT09PT09PT09PQ0KKw0KK1JlcXVpcmVtZW50cw0KKy0tLS0tLS0tLS0tLQ0KKw0KKzMyLWJpdCBiaW5hcnk6DQorDQorIC1XaW5kb3dzIFhQIDMyLWJpdCBTUDIgb3IgaGlnaGVyDQorIC1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDA4IFNQMSB3aXRoIFBsYXRmb3JtIFNESyBhbmQgbGF0ZXN0IHVwZGF0ZXMgZnJvbSBNaWNyb3NvZnQNCisgIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSByZWRpc3RyaWJ1dGFibGUgY29tcG9uZW50cw0KKyAtQWN0aXZlUGVybCA1LjEwDQorIC1NU1lTIC8gTWluR1cgLW9yLSB0YXIuZXhlIGFuZCBnemlwLmV4ZQ0KKyAtd2luMzIvZGlzdCBmb2xkZXIgZnJvbSBNQUlOIGluIENWUw0KKyAtT3BlblNTTCBiaW5hcnkgYW5kIGxpYnJhcnkgZmlsZXMgZnJvbSBodHRwOi8vd3d3LnNscHJvd2ViLmNvbS9wcm9kdWN0cy9XaW4zMk9wZW5TU0wuaHRtbA0KKw0KKzY0LWJpdCBiaW5hcnk6DQorDQorIC1XaW5kb3dzIDcgNjQtYml0DQorIC1NaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyAyMDA4IFNQMSB3aXRoIFBsYXRmb3JtIFNESyBhbmQgbGF0ZXN0IHVwZGF0ZXMgZnJvbSBNaWNyb3NvZnQNCisgIGluY2x1ZGluZyB1cGRhdGVzIHRvIHRoZSByZWRpc3RyaWJ1dGFibGUgY29tcG9uZW50cy4gIEFsc28gbmVlZCBhcmUgdGhlIDY0LWJpdCBjb21waWxlciBvcHRpb25zLg0KKyAtQWN0aXZlUGVybCA1LjEwICg2NC1iaXQpDQorIC1NU1lTIC8gTWluR1cgLW9yLSB0YXIuZXhlIGFuZCBnemlwLmV4ZQ0KKyAtd2luMzIvZGlzdCBmb2xkZXIgZnJvbSBNQUlOIGluIENWUw0KKyAtT3BlblNTTCA2NC1iaXQgYmluYXJ5IGFuZCBsaWJyYXJ5IGZpbGVzIGZyb20gaHR0cDovL3d3dy5zbHByb3dlYi5jb20vcHJvZHVjdHMvV2luMzJPcGVuU1NMLmh0bWwNCisNCisNCitCdWlsZGluZyB0aGUgbWFpbiBiaW5hcmllcw0KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorTm90ZTogIEFsbCBzaGVsbCBzdGVwcyBhcmUgdXNpbmcgdGhlIFdpbmRvdyBDTUQgcHJvbXB0IHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLg0KKw0KK1BhcnQgMQ0KKy0tLS0tLQ0KKw0KKzEuICBJbnN0YWxsIHByZS1yZXF1aXNpdGVzOg0KKw0KKyAgICBNU1ZDIDIwMDg6DQorICAgICAgSW5jbHVkZSB0aGUgUGxhdGZvcm0gU0RLIGFuZCBmb3IgNjQtYml0LCBtYWtlIHN1cmUgdGhlIDY0LWJpdCBjb21waWxlciBpcyBpbnN0YWxsZWQNCisgICAgICAobm90IGluY2x1ZGVkIGJ5IGRlZmF1bHQpLg0KKw0KKyAgICAgIExhdGVzdCB1cGRhdGVzIGZyb20gTWljcm9zb2Z0IHRvIGVuc3VyZSB0aGUgcmVkaXN0cmlidXRhYmxlIERMTHMgaGF2ZSB0aGUgbGF0ZXN0DQorICAgICAgc2VjdXJpdHkgZml4ZXMuDQorDQorICAgIEFjdGl2ZVBlcmw6DQorICAgICAgRm9yIDY0LWJpdCwgbWFrZSBzdXJlIHlvdSBpbnN0YWxsIHRoZSA2NC1iaXQgdmVyc2lvbiBvdGhlcndpc2UgY29tcGlsaW5nIHdpbGwgZmFpbC4NCisNCisgICAgTVNZUyAvIE1pbkdXOg0KKyAgICAgIE5lZWRlZCBmb3IgdGFyIGNvbW1hbmQgaW4gYnVpbGQtYmluYXJ5LmJhdC9wbC4gIA0KKw0KKyAgICBPcGVuU1NMOg0KKyAgICAgIEluc3RhbGwgdGhlIE9wZW5TU0wgYmluYXJ5LCBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgYXMgZXhwbGFpbmVkIGluIA0KKyAgICAgICdVc2luZyBhIHByZS1jb21waWxlZCB2ZXJzaW9uJyBvZiB0aGUgJ01pY3Jvc29mdCBWaXN1YWwgQysrIC0gQnVpbGRpbmcgd2l0aCANCisgICAgICBPcGVuU1NMJyBzZWN0aW9uIG9mIFJFQURNRS53aW4zMi4gIEZvciA2NC1iaXQsIG1ha2Ugc3VyZSB5b3UgaW5zdGFsbCB0aGUgNjQtYml0IA0KKyAgICAgIHZlcnNpb24gb3RoZXJ3aXNlIGNvbXBpbGluZyB3aWxsIGZhaWwuDQorDQorMi4gIEV4dHJhY3Qgc291cmNlLiAgVGhlIGxvY2F0aW9uIHdpbGwgYmUgcmVmZXJlbmNlZCBhcyAoc291cmNlIGRpcikNCisNCiszLiAgRGVsZXRlIGM6XHVzciBpZiBpdCBleGlzdHMuDQorDQorNC4gIEFwcGx5IGFueSByZXF1aXJlZCBwYXRjaGVzDQorDQorNS4gIGNkIChzb3VyY2UgZGlyKVx3aW4zMlxkaXN0DQorDQorNi4gIFJ1biBidWlsZC1iaW5hcnkuYmF0LiAgDQorDQorICAgIElmIGM6XHVzciBhbHJlYWR5IGV4aXN0cywgaXQgd2lsbCBzdG9wIHdpdGggYW4gZXJyb3IuDQorDQorICAgIElmICV3aW5kaXIlXHN5c3RlbTMyXG5ldHNubXAuZGxsIGV4aXN0cywgaXQgd2lsbCBhc2sgaWYgaXQgY2FuIGJlIGRlbGV0ZWQuICBBbnN3ZXIgeWVzLg0KKw0KKzcuICBBdCBhIGhpZ2ggbGV2ZWwsIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSBjb21wbGV0ZWQ6DQorDQorICAgIGEpICBHZXQgcGFja2FnZSB2ZXJzaW9uIGZyb20gVW5peCBjb25maWd1cmUgc2NyaXB0IGZvciB1c2UgaW4gdGhlIFBlcmwgbW9kdWxlIGFuZCBOU0lTDQorICAgICAgICBpbnN0YWxsZXIgcGFja2FnZS4NCisgICAgYikgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbnMgYW5kIFBlcmwgbW9kdWxlcyB3aXRoIE9wZW5TU0wgZW5hYmxlZCBhbmQgd2luRXh0RExMIGRpc2FibGVkDQorICAgIGMpICBCdWlsZCB0aGUgYXBwbGljYXRpb25zIGFuZCBQZXJsIG1vZHVsZXMgd2l0aCBPcGVuU1NMIGVuYWJsZWQgYW5kIHdpbkV4dERMTCBlbmFibGVkDQorICAgIGQpICBCdWlsZCB0aGUgYXBwbGljYXRpb25zIGFuZCBQZXJsIG1vZHVsZXMgd2l0aCBPcGVuU1NMIGRpc2FibGVkIGFuZCB3aW5FeHRETEwgZGlzYWJsZWQNCisgICAgZSkgIEJ1aWxkIHRoZSBhcHBsaWNhdGlvbnMgYW5kIFBlcmwgbW9kdWxlcyB3aXRoIE9wZW5TU0wgZGlzYWJsZWQgYW5kIHdpbkV4dERMTCBlbmFibGVkDQorICAgIGYpICBDb3B5IGRpc3RyaWJ1dGlvbiBmaWxlcyAocmVhZG1lLCBiYXRjaCBmaWxlcyBldGMpDQorICAgIGcpICBDb3B5IE5TSVMgaW5zdGFsbGVyIHNjcmlwdCBhbmQgdXBkYXRlIHRoZSB2ZXJzaW9uIHN0YW1wDQorDQorOC4gIENvcHkgdGhlIGZvbGxvd2luZyB0byBjOlx1c3JcYmluOg0KKw0KKyAgICA2NC1iaXQ6DQorDQorICAgIEM6XFByb2dyYW0gRmlsZXMgKHg4NilcTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gOS4wXFZDXHJlZGlzdFxhbWQ2NFxNaWNyb3NvZnQuVkM5MC5DUlRcKi4qDQorDQorICAgIDMyLWJpdDoNCisNCisgICAgQzpcUHJvZ3JhbSBGaWxlc1xNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyA5LjBcVkNccmVkaXN0XHg4NlxNaWNyb3NvZnQuVkM5MC5DUlRcKi4qICAgDQorDQorICAgIE5vdGU6ICBDb3B5IHRoZSBmaWxlcyBkaXJlY3RseSB0byB0aGUgZm9sZGVyLiAgSWYgeW91IGNvcHkgdGhlIGZvbGRlciwgdGhlIGJpbmFyaWVzIHdvbid0DQorICAgICAgICAgICBydW4gb24gV2luZG93cyAyMDAwLg0KKw0KKzkuICBWZXJpZnkgdGhhdCB0aGUgYmluYXJpZXMgY3JlYXRlZCBhcmUgbGlua2VkIHRvIHRoZSBjb3JyZWN0IE1TVkMgMjAwOCByZWRpc3RyaWJ1dGlvbiB0aGF0IHdhcw0KKyAgICBjb3BpZWQgaW4gdGhlIHByZXZpb3VzIHN0ZXAuDQorDQorICAgIFJpZ2h0LWNsaWNrIG1zdmNyOTAuZGxsLCBwcm9wZXJ0aWVzLCBEZXRhaWxzLiAgQ2hlY2sgdGhlIHByb2R1Y3QgdmVyc2lvbi4gIA0KKyAgICBFeGFtcGxlOiA5LjAwLjMwNzI5LjQxNDgNCisNCisgICAgY2QgXHVzclxiaW4NCisgICAgbXQuZXhlIC1pbnB1dHJlc291cmNlOnNubXBnZXQuZXhlOyMxIC1vdXQ6ZXh0cmFjdGVkLm1hbmlmZXN0DQorICAgIHR5cGUgZXh0cmFjdGVkLm1hbmlmZXN0DQorICAgIA0KKyAgICBFeGFtcGxlOg0KKw0KKyAgICA8YXNzZW1ibHlJZGVudGl0eSB0eXBlPSJ3aW4zMiIgbmFtZT0iTWljcm9zb2Z0LlZDOTAuQ1JUIiB2ZXJzaW9uPSI5LjAuMzA3MjkuMSINCisgICANCisxMC4gVXBkYXRlIHRoZSBCVUlMRCBJTkZPUk1BVElPTiBzZWN0aW9uIG9mIGM6XHVzclxSRUFETUUudHh0DQorDQorDQorQ29tcGlsaW5nIEhUTUxIZWxwIGZpbGUNCis9PT09PT09PT09PT09PT09PT09PT09PQ0KKw0KK1RoaXMgc2VjdGlvbiBvdXRsaW5lcyB0aGUgc3RlcHMgcmVxdWlyZWQgdG8gYnVpbGQgYSBXaW5kb3dzIEhUTUwgSGVscCBmaWxlDQorYmFzZWQgb24gdGhlIE5ldC1TTk1QIG1hbiBwYWdlcywgUkVBRE1FIGZpbGVzLCBQZXJsZG9jIGRvY3VtZW50YXRpb24gZXRjLg0KKw0KK1JlcXVpcmVtZW50cw0KKy0tLS0tLS0tLS0tLQ0KKw0KKyAtTGludXggKG9yIHNpbWlsYXIpIHdpdGg6DQorICAgLW1hbiAobWFuIHBhZ2Ugdmlld2VyKQ0KKyAgIC10aWR5IChIVE1MIHRpZHkgLSBodHRwOi8vdGlkeS5zb3VyY2Vmb3JnZS5uZXQpDQorICAgLVBlcmwNCisgICAtcGVybGRvYw0KKyAgIC1tYW4yaHRtbDMuMC4xLnRhci5neiAoaHR0cDovL3NlYXJjaC5jcGFuLm9yZy9+ZWhvb2QvbWFuMmh0bWwzLjAuMS8pDQorICAgIE5vdGU6ICBNb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMgY29tZSB3aXRoIG1hbjJodG1sIGFzIHBhcnQgb2YgdGhlIG1hbiBycG0NCisgICAgICAgICAgIHBhY2thZ2Ugd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIG1hbjJodG1sIGZyb20gbWFuMmh0bWwzLjAuMS50YXIuZ3ouDQorICAgICAgICAgICBBbGwgdGhhdCBpcyBuZWVkZWQgZnJvbSBtYW4yaHRtbDMuMC4xLnRhci5neiBpcyB0aGUgbWFuMmh0bWwgc2NyaXB0LiAgDQorICAgICAgICAgICBZb3UgZG8gbm90IG5lZWQgdG8gZG8gYSBjb21wbGV0ZSBpbnN0YWxsIChtYWtlL21ha2UgaW5zdGFsbCkgYnV0IHlvdQ0KKyAgICAgICAgICAgZG8gbmVlZCB0byBtYWtlIHN1cmUgdGhlIHNjcmlwdCBpcyBjb25maWd1cmVkIGNvcnJlY3RseSBieSBzZXR0aW5nIHRoZQ0KKyAgICAgICAgICAgbWFuIGNvbW1hbmQgbGluZSBzd2l0Y2hlcyBldGMgZm9yIHRoZSBPUyBmcm9tIGluc2lkZSBvZiB0aGUgc2NyaXB0Lg0KKw0KKyAtV2luZG93cyB3aXRoOg0KKyAgIC1IVE1MIEhlbHAgV29ya3Nob3AgKFNlYXJjaCBtc2RuLm1pY3Jvc29mdC5jb20gZm9yICdodG1sIGhlbHAgd29ya3Nob3AgZG93bmxvYWQnKQ0KKw0KKw0KK0NvbnZlcnQgZG9jdW1lbnRzIHRvIGh0bWwNCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorDQorTm90ZTogIFRoZSBmb2xsb3dpbmcgc3RlcHMgYXJlIGNvbXBsZXRlZCB1c2luZyBMaW51eC4NCisNCitOb3RlOiAgQSB0ZW1wb3JhcnkgbG9jYXRpb24gb2YgL3RtcC9uZXQtc25tcCBpcyB1c2VkLg0KKw0KKzEuICBFeHRyYWN0IE5ldC1TTk1QIHNvdXJjZSBhbmQgY2QgKHNvdXJjZSBkaXIpDQorDQorMi4gIGNkIChzb3VyY2UgZGlyKQ0KKw0KKzMuICBjcCBwZXJsL1NOTVAvUkVBRE1FIFJFQURNRS5wZXJsDQorDQorNC4gIFJlbW92ZSBvbGRlciBjb3BpZXMgb2YgY29udmVydGVkIGZpbGVzOg0KKw0KKyAgICBybSAtUiAtZiAvdG1wL25ldC1zbm1wDQorDQorNS4gIEJ1aWxkIE5ldC1TTk1QIG1hbiBwYWdlczogDQorDQorICAgIC4vY29uZmlndXJlIC0tcHJlZml4PWM6L3VzcjsgbWFrZSBzZWRzY3JpcHQ7IGNkIG1hbjttYWtlOyBjZCAuLg0KKw0KKzYuICBJbnN0YWxsIG9ubHkgdGhlIG1hbiBmaWxlcyB0byAvdGVtcC9uZXQtc25tcDoNCisNCisgICAgY2QgbWFuOyBtYWtlIGluc3RhbGwgcHJlZml4PS90bXAvbmV0LXNubXA7IGNkIC4uDQorDQorNy4gIEdvIHRvIHRoZSBzY3JpcHRzIGZvbGRlciBhbmQgbWFrZSBzdXJlIGFsbCB0aGUgc2NyaXB0cyBhcmUgZXhlY3V0YWJsZToNCisNCisgICAgY2QgKHNvdXJjZSBkaXIpDQorICAgIGNkIHdpbjMyL2Rpc3Qvc2NyaXB0czsgY2htb2QgK3ggKg0KKw0KKzguICBFZGl0IHRoZXNlIGZpbGVzIGFuZCBtYWtlIHN1cmUgdGhlIHBhdGhzIGFyZSBjb3JyZWN0IGluIHRoZSBPUFRJT05TIA0KKyAgICBzZWN0aW9uLiAgQWxzbyBlbnN1cmUgdGhlIGxpc3Qgb2YgUkVBRE1FIGZpbGVzIGFuZCBQZXJsIG1vZHVsZXMgDQorICAgIGFyZSBjb3JyZWN0IGluIHJlYWRtZTJodG1sIGFuZCBwb2RkaXIyaHRtbC4NCisNCisgICAgbWFuZGlyMmh0bWwNCisgICAgcmVhZG1lMmh0bWwNCisgICAgcG9kZGlyMmh0bWwNCisNCisgICAgTm90ZTogIG1hbmRpcjJodG1sIHdpbGwgcHJvY2VzcyBBTEwgbWFuIHBhZ2VzIGluIGM6XHRlbXBcbmV0LXNubXAgd2hpbGUNCisgICAgICAgICAgIHJlYWRtZTJodG1sIGFuZCBwb2RkaXIyaHRtbCB3aWxsIG9ubHkgcHJvY2VzcyBmaWxlcyBsaXN0ZWQgaW4gdGhlDQorICAgICAgICAgICBzY3JpcHQuICBJZiBuZXcgbWFuIHBhZ2VzIGFyZSBhZGRlZCBvciByZW1vdmVkLCB0aGUgVGFibGUgb2YgDQorICAgICAgICAgICBDb250ZW50cyAodG9jLmhoYykgYW5kIHByb2plY3QgZmlsZSAoTmV0LVNOTVAuaGhwKSBuZWVkIHRvIGJlIA0KKyAgICAgICAgICAgdXBkYXRlZCBieSBoYW5kLg0KKw0KKzkuICBSdW4gZWFjaCBzY3JpcHQgdG8gZ2VuZXJhdGUgdGhlIC5odG1sIGZpbGVzOg0KKw0KKyAgICAuL21hbmRpcjJodG1sOyAuL3JlYWRtZTJodG1sOyAuL3BvZGRpcjJodG1sDQorDQorICAgIE5vdGU6ICBUaGVyZSB3aWxsIGJlIG1hbnkgd2FybmluZ3MgZnJvbSB0aWR5IHdoaWNoIGNhbiBiZSBpZ25vcmVkLg0KKw0KKzEwLiBWZXJpZnkgZWFjaCBjb252ZXJ0ZWQgZmlsZSB0byBlbnN1cmUgYWxsIHRoZSBsaW5rcyBhcmUgY29ycmVjdC4gIFRoZSBmaWxlcw0KKyAgICBhcmUgbG9jYXRlZCBpbiAvdG1wL25ldC1zbm1wL2h0bWwgYnkgZGVmYXVsdC4gIEluIHNvbWUgaW5zdGFuY2VzLCBVUkxzIG1heSBiZSANCisgICAgc3BsaXQgYWNyb3NzIHR3byBsaW5lcyBzdWNoIGFzIHRoZSBWYXJpYWJsZXMgbGluayBhdCB0aGUgYm90dG9tIG9mIA0KKyAgICAvdG1wL25ldC1zbm1wL2h0bWwvbWFuOC1zbm1wdHJhcGQuOC5odG1sLg0KKw0KKzExLiBJZiBuZXcgbWFuIHBhZ2VzIGFyZSBhZGRlZCBvciByZW1vdmVkLCB0aGUgVGFibGUgb2YgQ29udGVudHMgKE5ldC1TTk1QLmhoYykgYW5kDQorICAgIHByb2plY3QgZmlsZSAoTmV0LVNOTVAuaGhwKSBuZWVkIHRvIGJlIHVwZGF0ZWQgYnkgaGFuZC4NCisNCisxMi4gQ29udmVydCBFWEFNUExFLmNvbmYud2luMzIgdG8gaHRtbDoNCisNCisgICAgLi90eHQyaHRtbCAuLi8uLi9FWEFNUExFLmNvbmYud2luMzIgfCB0aWR5ID4gL3RtcC9uZXQtc25tcC9odG1sL0VYQU1QTEUuY29uZi53aW4zMi5odG1sDQorICAgIA0KKw0KK0J1aWxkIE5ldC1TTk1QLmNobQ0KKy0tLS0tLS0tLS0tLS0tLS0tLQ0KKw0KK05vdGU6ICBUaGUgZm9sbG93aW5nIHN0ZXBzIGFyZSBjb21wbGV0ZWQgdXNpbmcgV2luZG93cy4NCisNCitOb3RlOiAgQSB0ZW1wb3JhcnkgbG9jYXRpb24gb2YgYzpcdGVtcFxuZXQtc25tcCBpcyB1c2VkLg0KKw0KKzEuICBUcmFuc2ZlciAvdG1wL25ldC1zbm1wL2h0bWwgZnJvbSBMaW51eCB0byBjOlx0ZW1wXG5ldC1zbm1wXGh0bWwNCisNCisyLiAgR3JhYiB0aGUgRkFRIGZyb20gdGhlIHdlYiBzaXRlLCBzdHJpcCBvdXQgdGhlIGluY2x1ZGVzIGFuZCBzYXZlIGFzDQorICAgIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxGQVEuaHRtbCBhbmQgcnVuOg0KKw0KKyAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxGQVEuaHRtbA0KKw0KKzMuICBHcmFiIHRoZSBEZXZsb3BlciBGQVEgZnJvbSB0aGUgd2ViIHNpdGUsIHN0cmlwIG91dCB0aGUgaW5jbHVkZXMgYW5kIHNhdmUgYXMNCisgICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXERldmVsb3Blcl9GQVEuaHRtbCBhbmQgcnVuOg0KKw0KKyAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxEZXZlbG9wZXJfRkFRLmh0bWwNCisNCis0LiAgQ29weSB0aGUgZm9sbG93aW5nIGZpbGVzIHRvIGM6XHRlbXBcbmV0LXNubXBcaHRtbDoNCisNCisgICAgY2QgKHNvdXJjZSBkaXIpDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcQ29uZmlndXJhdGlvbl9PdmVydmlldy5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcSGVscF9DYXZlYXRzLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxJbnRyb2R1Y3Rpb24uaHRtbCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXE5ldC1TTk1QLmhoYyIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXE5ldC1TTk1QLmhocCIgYzpcdGVtcFxuZXQtc25tcFxodG1sXA0KKyAgICBjb3B5ICJ3aW4zMlxkaXN0XGh0bWxoZWxwXG5ldC1zbm1wLTQuMi04MDAuanBnIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorICAgIGNvcHkgIndpbjMyXGRpc3RcaHRtbGhlbHBcc25tcC5jb25mLndpbjMyLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxzbm1wZC5jb25mLndpbjMyLmh0bWwiIGM6XHRlbXBcbmV0LXNubXBcaHRtbFwNCisgICAgY29weSAid2luMzJcZGlzdFxodG1saGVscFxzbm1wdHJhcGQuY29uZi53aW4zMi5odG1sIiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcDQorDQorNS4gIE5ldyBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWF5IGJlIGF2YWlsYWJsZSBpbiB0aGUgbmV3IHJlbGVhc2Ugb2YNCisgICAgTmV0LVNOTVAsIHNvIHRoZSAqLmNvbmYud2luMzIuaHRtbCBmaWxlcyBzaG91bGQgYmUgdXBkYXRlZC4NCisNCisgICAgQ3JlYXRlIGEgdGV4dCBmaWxlIHdpdGggYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHNubXBkIGFuZCANCisgICAgc25tcHRyYXBkIHVzaW5nOg0KKw0KKyAgICBjZCB3aW4zMlxiaW5ccmVsZWFzZSAoZm9sZGVyIG9mICpXaW5kb3dzKiBjb21waWxlZCBOZXQtU05NUCkNCisgICAgc25tcHRyYXBkIC1IIDI+IGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wdHJhcGQub3B0aW9ucw0KKyAgICBzbm1wZCAtSCAyPiBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcGQub3B0aW9ucw0KKw0KKyAgICBVcGRhdGUgdGhlc2UgZmlsZXMgdXNpbmcgYW4gSFRNTCBlZGl0b3IgKE52dSBldGMpOg0KKw0KKyAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcC5jb25mLndpbjMyLmh0bWwNCisgICAgYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXBkLmNvbmYud2luMzIuaHRtbA0KKyAgICBjOlx0ZW1wXG5ldC1zbm1wXGh0bWxcc25tcHRyYXBkLmNvbmYud2luMzIuaHRtbA0KKyANCisgICAgT25seSBhZGQgdGhlIHJlbGV2ZW50IHNlY3Rpb24gdG8gZWFjaCBmaWxlIGZyb20gdGhlIC5vcHRpb25zIGZpbGVzDQorICAgIGNyZWF0ZWQgYWJvdmUsIGVuc3VyZSB0aGUgZm9udCBpcyBzZXQgdG8gZml4ZWQgd2lkdGguDQorDQorICAgIFRpZHkgZWFjaCBmaWxlIHVzaW5nIHRpZHkgdW5kZXIgV2luZG93cyAob3IgdHJhbnNmZXIgdG8gTGludXggYW5kIHRpZHkNCisgICAgdXNpbmcgTGludXgpOg0KKw0KKyAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wdHJhcGQuY29uZi53aW4zMi5odG1sDQorICAgIHRpZHkgLWFzeGh0bWwgLW0gYzpcdGVtcFxuZXQtc25tcFxodG1sXHNubXBkLmNvbmYud2luMzIuaHRtbA0KKyAgICB0aWR5IC1hc3hodG1sIC1tIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxzbm1wLmNvbmYud2luMzIuaHRtbA0KKw0KKzYuICBFZGl0IGM6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5oaHAgYW5kIHVwZGF0ZSB0aGUgdmVyc2lvbiBmb3IgdGhlIA0KKyAgICAnVGl0bGUnIHZhcmlhYmxlLg0KKw0KKzcuICBSdW4gSFRNTCBXb3Jrc2hvcA0KKw0KKzguICBPcGVuIGM6XHRlbXBcbmV0LXNubXBcaHRtbFxOZXQtU05NUC5oaHANCisNCis5LiAgQ2xpY2sgRmlsZSAtIENvbXBpbGUNCisNCisxMC4gU2VsZWN0ICdDOlx0ZW1wXG5ldC1zbm1wXGh0bWxcTmV0LVNOTVAuaGhwJyBhcyB0aGUgZmlsZW5hbWUNCisNCisxMS4gQ2xpY2sgQ29tcGlsZQ0KKw0KKzEyLiBZb3Ugc2hvdWxkIG5vdyBoYXZlIGEgYzpcdGVtcFxuZXQtc25tcFxodG1sXE5ldC1TTk1QLmNobSBmaWxlLg0KKw0KKzEzLiBMYXVuY2ggdGhlIGZpbGUgYW5kIGVuc3VyZSBldmVyeSBjb250ZW50IGl0ZW0gZGlzcGxheXMgdGhlIGNvcnJlY3QgcGFnZS4NCisNCisNCitDb21iaW5pbmcgdGhlIGJpbmFyaWVzIGFuZCBIVE1MSGVscCBmaWxlcw0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorMS4gIENvcHkgdGhlIEhUTUwgSGVscCBmaWxlIHRvIGM6XHVzclxkb2NzOg0KKw0KKyAgICBjb3B5IGM6XHRlbXBcTmV0LVNOTVBcaHRtbFxOZXQtU05NUC5jaG0gYzpcdXNyXGRvY3NcDQorDQorDQorQnVsZGluZyBhIE51bGxTb2Z0IGluc3RhbGxlciBwYWNrYWdlDQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQorDQorUmVxdWlyZW1lbnRzDQorLS0tLS0tLS0tLS0tDQorDQorIC1XaW5kb3dzDQorIC1OdWxsc29mdCBTY3JpcHRhYmxlIEluc3RhbGwgU3lzdGVtIDIuMCAtIGh0dHA6Ly9uc2lzLnNvdXJjZWZvcmdlLm5ldC9ob21lLw0KKw0KKzEuICBDb21wbGV0ZSB0aGUgc2VjdGlvbnMgYWJvdmUuDQorDQorMi4gIExhdW5jaCB0aGUgJ051bGxzb2Z0IEluc3RhbGwgU3lzdGVtIChOU0lTIDIuMCknDQorDQorMy4gIFNlbGVjdCAnTWFrZU5TSVNXIChjb21waWxlciBpbnRlcmZhY2UpJw0KKw0KKzQuICBDbGljayBGaWxlIC0gTG9hZCBTY3JpcHQNCisNCis1LiAgU2VsZWN0IGM6XHVzclxuZXQtc25tcC5uc2kNCisNCis2LiAgWW91IHNob3VsZCBub3cgaGF2ZSBhIGM6XHVzclxOZXQtU05NUC14LngueC14LmV4ZSBiaW5hcnkgaW5zdGFsbGVyIA0KKyAgICBwYWNrYWdlDQorDQorNy4gIFRlc3QgdGhlIHBhY2thZ2U6DQorDQorICAgIFBlcmZvcm0gdGhlIGJhc2ljIHRlc3RzIGJlbG93IG9uIHRoZSBmb2xsb3dpbmcgcGxhdGZvcm1zOg0KKw0KKyAgICAgIDMyLWJpdCBwYWNrYWdlOg0KKyAgICAgICAgV2luZG93cyAyMDAwDQorICAgICAgICBXaW5kb3dzIFhQIDMyLWJpdA0KKyAgICAgIDY0LWJpdCBwYWNrYWdlOg0KKyAgICAgICAgV2luZG93cyA3IDY0LWJpdA0KKw0KKyAgICBUZXN0czoNCisNCisgICAgYSkgSW5zdGFsbGF0aW9uIHdpdGggV2luRXh0RExMIGFuZCBTU0wNCisgICAgYikgQ29uZmlndXJlIHNubXBkIHRvIGFsbG93IGEgcXVlcnkNCisgICAgYykgSW5zdGFsbCBzbm1wZCBhbmQgc25tcHRyYXBkIHNlcnZpY2VzDQorICAgIGQpIFN0b3AgdGhlIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2UgYW5kIHN0YXJ0IGJvdGggTmV0LVNOTVAgc2VydmljZXMNCisgICAgZSkgc25tcHdhbGsgLXYgMSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbQ0KKyAgICBmKSBJbnN0YWxsIFBlcmwgbW9kdWxlcw0KKyAgICBnKSBMYXVuY2ggbmV0LXNubXAtcGVybC10ZXN0LnBsDQorDQorOC4gIENvbXBhcmUgdGhlIGRpcmVjdG9yeSBjb250ZW50cyBvZiB0aGUgY29tcGlsZWQgZm9sZGVyIHdpdGggdGhlIGluc3RhbGxlZA0KKyAgICBmb2xkZXIgdG8gZW5zdXJlIHRoZXJlIGFyZSBubyBtaXNzaW5nIE1JQiBmaWxlcyBldGMuICBJZiB0aGVyZSBhcmUgbWlzc2luZw0KKyAgICBmaWxlcywgbW9kaWZ5IG5ldC1zbm1wLm5zaSBhbmQgcmVidWlsZCBpZiByZXF1aXJlZCBhbmQgdXBkYXRlIG5ldC1zbm1wLm5zaQ0KKyAgICBldGMgaW4gU1ZOLg0KKw0KKzkuICBDcmVhdGUgYSAuemlwIGZpbGUgb2YgYzpcdXNyIGZvciBhcmNoaXZlIHB1cnBvc2VzLg0KKw0KZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvUkVBRE1FLnR4dCBiL3dpbjMyL2Rpc3QvUkVBRE1FLnR4dAppbmRleCA5ZGE0OGVjLi4zMDdjODYwIDEwMDY0NAotLS0gYS93aW4zMi9kaXN0L1JFQURNRS50eHQKKysrIGIvd2luMzIvZGlzdC9SRUFETUUudHh0CkBAIC0xLDE4NCArMSwxODggQEAKLSAgICAgICBSRUFETUUgZmlsZSBmb3Igd2luMzIgYmluYXJ5IHJlbGVhc2Ugb2YgTmV0LVNOTVAKLQotRElTQ0xBSU1FUgotCi0gIFRoZSBBdXRob3JzIGFzc3VtZSBubyByZXNwb25zaWJpbGl0eSBmb3IgZGFtYWdlIG9yIGxvc3Mgb2Ygc3lzdGVtCi0gIHBlcmZvcm1hbmNlIGFzIGEgZGlyZWN0IG9yIGluZGlyZWN0IHJlc3VsdCBvZiB0aGUgdXNlIG9mIHRoaXMKLSAgc29mdHdhcmUuICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yCi0gIGltcGxpZWQgd2FycmFudHkuCi0KLQotVEFCTEUgT0YgQ09OVEVOVFMKLQotICBEaXNjbGFpbWVyCi0gIFRhYmxlIE9mIENvbnRlbnRzCi0gIEludHJvZHVjdGlvbgotKiBJbnN0YWxsYXRpb24KLSogQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMKLSAgSW5zdGFsbGF0aW9uIC0gUGVybCBtb2R1bGUKLSogQ29uZmlndXJhdGlvbgotICBCdWlsZCBJbmZvcm1hdGlvbgotCi0gICogPSBSZXF1aXJlZCBSZWFkaW5nLgotCi0KLUlOVFJPRFVDVElPTgotCi0gIFRoaXMgcGFja2FnZSBjb250YWlucyBhIGNvbXBpbGVkIGJpbmFyeSByZWxlYXNlIG9mIE5ldC1TTk1QIGZvciBXaW5kb3dzIE5ULzIwMDAvWFAuCi0gIFRoZSBiaW5hcmllcyBydW4gdW5tb2RpZmllZCBvbiBXaW5kb3dzIDk4LiAgVGhlICJzbm1wZCIgYW5kICJzbm1wdHJhcGQiIHByb2dyYW0gY2FuIAotICBub3QgcnVuIGFzIHNlcnZpY2VzIG9uIFdpbmRvd3MgOTgsIGFzIFdpbmRvd3MgOTggZG9lcyBub3QgcHJvdmlkZSBhIFNlcnZpY2UgQ29udHJvbCAKLSAgTWFuYWdlciAoU0NNKS4KLQotICBEb2N1bWVudGF0aW9uIGZvciB1c2luZyB0aGUgYXBwbGljYXRpb25zIGlzIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBoZWxwIGZpbGUKLSAgKE5ldC1TTk1QLmNobSkgbG9jYXRlZCBpbiB0aGUgZG9jcyBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlLiAgSGVscCBpcyBhbHNvCi0gIGF2YWlsYWJsZSBmcm9tIHRoZSB3ZWIgc2l0ZSBhdCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9kb2NzLy4KLQotCi1JTlNUQUxMQVRJT04KLQotICBUaGUgTmV0LVNOTVAgV2luZG93cyBpbnN0YWxsZXIgcGFja2FnZSBwZXJmb3JtcyB0aGUgZm9sbG93aW5nIHRhc2tzOgotCi0gIC0gSW5zdGFsbHMgdGhlIE5ldC1TTk1QIGJpbmFyaWVzLCBNSUIgZmlsZXMgYW5kIEFjdGl2ZVN0YXRlIDUuOC54IFBlcmwgUFBNIAotICAgIHBhY2thZ2UgaW50byB0aGUgaW5zdGFsbGF0aW9uIGZvbGRlciAoZGVmYXVsdHMgdG8gYzpcdXNyKS4gCi0gIC0gQWRkcyAoaW5zdGFsbCBmb2xkZXIpXGJpbiB0byB0aGUgc3lzdGVtIFBBVEguIAotICAtIEFkZHMgdGhlIGZvbGxvd2luZyByZWdpc3RyeSBrZXlzOgotICAgIC0gSEtFWV9MT0NBTF9NQUNISU5FXFNvZnR3YXJlXE5ldC1TTk1QXFNOTVBDT05GUEFUSD0oaW5zdGFsbCBmb2xkZXIpL2V0Yy9zbm1wOwotICAgICAgKGluc3RhbGwgZm9sZGVyKS9zbm1wL3BlcnNpc3QKLSAgICAtIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxOZXQtU05NUFxTTk1QU0hBUkVQQVRIPShpbnN0YWxsIGZvbGRlcikvc2hhcmUvc25tcAotICAtIENyZWF0ZXMgYW4gc25tcC5jb25mIGZpbGUgaW4gU05NUENPTkZQQVRIIHdoaWNoIGRlZmluZXM6IAotICAgIC0gbWliZGlycyAoaW5zdGFsbCBmb2xkZXIpL3NoYXJlL3NubXAvbWlicyAKLSAgICAtIHBlcnNpc3RlbnREaXIgKGluc3RhbGwgZm9sZGVyKS9zbm1wL3BlcnNpc3QgCi0gICAgLSB0ZW1wRmlsZVBhdHRlcm4gKGluc3RhbGwgZm9sZGVyKS90ZW1wL3NubXBkWFhYWFhYIAotCi0gIEFmdGVyIGluc3RhbGxpbmcgdXNpbmcgdGhlIHNldHVwIHdpemFyZCwgcGVyZm9ybSBhIHF1aWNrIHRlc3QgdG8gdmVyaWZ5IHRoYXQgCi0gIE5ldC1TTk1QIHdhcyBpbnN0YWxsZWQgY29ycmVjdGx5LiAgUnVuIHRoZSBmb2xsb3dpbmcgZnJvbSBhIGNvbW1hbmQgcHJvbXB0OgotCi0gICAgc25tcHRyYW5zbGF0ZSAtSVIgLVRkIElGLU1JQjo6bGlua0Rvd24KLQotICBUaGUgYWJvdmUgY29tbWFuZCBzaG91bGQgZ2VuZXJhdGU6Ci0KLSAgICBJRi1NSUI6OmxpbmtEb3duCi0gICAgbGlua0Rvd24gTk9USUZJQ0FUSU9OLVRZUEUKLSAgICAgIC0tIEZST00gICAgICAgSUYtTUlCCi0gICAgICBPQkpFQ1RTICAgICAgIHsgaWZJbmRleCwgaWZBZG1pblN0YXR1cywgaWZPcGVyU3RhdHVzIH0KLSAgICAgIERFU0NSSVBUSU9OICAgIkEgbGlua0Rvd24gdHJhcCBzaWduaWZpZXMgdGhhdCB0aGUgU05NUCBlbnRpdHksIGFjdGluZyBpbgotICAgICAgICAgICAgICAgIGFuIGFnZW50IHJvbGUsIGhhcyBkZXRlY3RlZCB0aGF0IHRoZSBpZk9wZXJTdGF0dXMgb2JqZWN0IGZvcgotICAgICAgICAgICAgICAgIG9uZSBvZiBpdHMgY29tbXVuaWNhdGlvbiBsaW5rcyBpcyBhYm91dCB0byBlbnRlciB0aGUgZG93bgotICAgICAgICAgICAgICAgIHN0YXRlIGZyb20gc29tZSBvdGhlciBzdGF0ZSAoYnV0IG5vdCBmcm9tIHRoZSBub3RQcmVzZW50Ci0gICAgICAgICAgICAgICAgc3RhdGUpLiAgVGhpcyBvdGhlciBzdGF0ZSBpcyBpbmRpY2F0ZWQgYnkgdGhlIGluY2x1ZGVkIHZhbHVlCi0gICAgICAgICAgICAgICAgb2YgaWZPcGVyU3RhdHVzLiIKLSAgICA6Oj0geyBpc28oMSkgb3JnKDMpIGRvZCg2KSBpbnRlcm5ldCgxKSBzbm1wVjIoNikgc25tcE1vZHVsZXMoMykgc25tcE1JQigxKSAKLSAgICAgICAgICBzbm1wTUlCT2JqZWN0cygxKSBzbm1wVHJhcHMoNSkgMyB9Ci0KLSAgSWYgc25tcHRyYW5zbGF0ZSBjYW4gbm90IGJlIGZvdW5kLCB0aGVuIHZlcmlmeSB0aGF0IHRoZSBOZXQtU05NUCBiaW4gZm9sZGVyIGlzIGluIAotICB5b3VyIHN5c3RlbSBwYXRoLgotCi0gIElmIHlvdSBnZXQgTW9kdWxlIG5vdCBmb3VuZCBlcnJvcnMgc3VjaCBhcyAnSVAtTUlCOiBNb2R1bGUgbm90IGZvdW5kJywgdGhlIGFwcGxpY2F0aW9uCi0gIHdhcyBub3QgYWJsZSB0byBsb2NhdGUgdGhlIG1pYnMgZm9sZGVyLiAgVmVyaWZ5IHRoYXQgU05NUENPTkZQQVRIIGlzIHNldCB0byB0aGUgbG9jYXRpb24KLSAgb2YgdGhlIGNvbmZpZ3VyYXRpb24gZm9sZGVyIGFuZCB0aGUgcGVyc2lzdGVudCBzdG9yYWdlIGZvbGRlciAKLSAgKGM6L3Vzci9ldGMvc25tcDtjOi91c3Ivc25tcC9wZXJzaXN0IGZvciBleGFtcGxlKS4gIEFsc28gdmVyaWZ5IHRoYXQgdGhlcmUgaXMgYW4gCi0gIHNubXAuY29uZiBmaWxlIHRoYXQgY29udGFpbnMgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIG1pYmRpcnMsIHBlcnNpc3RlbnREaXIgYW5kIAotICB0ZW1wRmlsZVBhdHRlcm4uICBGb3IgZXhhbXBsZToKLQotICAgIG1pYmRpcnMgYzovdXNyL3NoYXJlL3NubXAvbWlicwotICAgIHBlcnNpc3RlbnREaXIgYzovdXNyL3NubXAvcGVyc2lzdAotICAgIHRlbXBGaWxlUGF0dGVybiBDOi91c3IvdGVtcC9zbm1wZFhYWFhYWAotCi0gIEZvciBkZXRhaWxlZCBpbmZvcm1hdGlvbiBvbiB1c2luZyBlbnZpcm9ubWVudCB2YXJpYWJsZXMgYW5kIHRoZSByZWdpc3RyeSB0byBjb25maWd1cmUKLSAgTmV0LVNOTVAsIHNlZSAnT3ZlcnZpZXcnIGRvY3VtZW50IGluIHRoZSBDb25maWd1cmF0aW9uIHNlY3Rpb24gb2YgdGhlIE5ldC1TTk1QIGhlbHAgZmlsZS4KLQotICBGb3IgaW5mb3JtYXRpb24gb24gcnVubmluZyBzbm1wZC5leGUgYW5kIHNubXB0cmFwZC5leGUgYXMgYSBXaW5kb3dzIHNlcnZpY2UsIHNlZSAKLSAgJ0hvdyB0byBSZWdpc3RlciB0aGUgTmV0LVNOTVAgQWdlbnQgYW5kIFRyYXAgRGFlbW9uIGFzIFdpbmRvd3Mgc2VydmljZXMnIGluIFJFQURNRS53aW4zMi4KLQotCi1DTy1FWElTVEVOQ0UgV0lUSCBNSUNST1NPRlQgU05NUCBTRVJWSUNFUwotCi1QbGVhc2Ugc2VlIHRoZSBzZWN0aW9uICdDby1leGlzdGVuY2Ugd2l0aCBNaWNyb3NvZnQgU05NUCBzZXJ2aWNlcycgaW4gUkVBRE1FLndpbjMyCi0KLQotSU5TVEFMTEFUSU9OIC0gUEVSTCBNT0RVTEUKLQotICBJbmNsdWRlZCBpbiB0aGUgKGluc3RhbGwgZm9sZGVyKVxQZXJsIGZvbGRlciBpcyBhbiBBY3RpdmVTdGF0ZSBQZXJsIAotICA1LjgueC4gUFBNIHBhY2thZ2UuICBOb3RlOiAgSW4gcHJldmlvdXMgdmVyc2lvbiBvZiBOZXQtU05NUCwgdGhlIFBQTQotICBwYWNrYWdlIHdhcyBjYWxsZWQgTmV0LVNOTVAucHBkLiAgVGhlIHBhY2thZ2UgaGFzIGJlZW4gcmVuYW1lZCB0bwotICBOZXRTTk1QLnBwZCB0byBwcmV2ZW50IGNvbmZsaWN0cyB3aXRoIHRoZSBOZXQ6OlNOTVAgcGFja2FnZSBhdmFpbGFibGUKLSAgZnJvbSBBY3RpdmVTdGF0ZS4KLQotICBUaGUgUGVybCBtb2R1bGVzIHJlcXVpcmUgdGhlIFdpbjMyIFJFR0VYIChSZWd1bGFyIEV4cHJlc3Npb24pIHBhY2thZ2Ugd2hpY2ggCi0gIGlzIGF2YWlsYWJsZSBmcm9tOgotCi0gICAgaHR0cDovL3Blb3BsZS5kZWxwaGlmb3J1bXMuY29tL2dqYy9nbnVfcmVnZXguaHRtbAotCi0gIERvd25sb2FkIGdudV9yZWdleC5leGUsIGNvcHkgaXQgdG8gYSB0ZW1wb3JhcnkgZmlsZSBhbmQgZXhlY3V0ZSBpdCB0byAKLSAgZXh0cmFjdCB0aGUgZmlsZXMuCi0KLSAgQ29weSB0aGUgZXh0cmFjdGVkIGdudV9yZWdleC5kbGwgdG8geW91ciAld2luZGlyJVxzeXN0ZW0zMiBmb2xkZXIuCi0KLSAgUmVtb3ZlIGFueSBleGlzdGluZyBOZXQtU05NUCBQZXJsIG1vZHVsZXM6Ci0KLSAgICBwcG0gcmVtb3ZlIE5ldFNOTVAKLQotICBJbnN0YWxsIHRoZSBQZXJsIG1vZHVsZXM6Ci0KLSAgICBjZCAoaW5zdGFsbCBmb2xkZXIpXFBlcmwKLSAgICBwcG0gaW5zdGFsbCBOZXRTTk1QLnBwZAotCi0gIFBlcmZvcm0gYSBiYXNpYyB0ZXN0IHVzaW5nOgotCi0gICAgbmV0LXNubXAtcGVybC10ZXN0LnBsCi0KLQotQ09ORklHVVJBVElPTgotCi0gIEFsbCBjb25maWd1cmF0aW9uIGZpbGVzIHNob3VsZCBiZSBwbGFjZWQgaW4gdGhlICVTTk1QQ09ORlBBVEglIGZvbGRlci4KLQotICBOb3RlOiBBbGwgcGF0aHMgaW4gY29uZmlndXJhdGlvbiBmaWxlcyBzaG91bGQgdXNlIGZvcndhcmQgc2xhc2hlcyAoVW5peCBzdHlsZSksIAotICBOT1QgYmFjayBzbGFzaGVzLiAgRXhhbXBsZTogYzovdXNyCi0KLSAgSW5jbHVkZWQgaXMgYSBQZXJsIHNjcmlwdCBjYWxsZWQgc25tcGNvbmYgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY3JlYXRlIAotICBjb25maWd1cmF0aW9uIGZpbGVzLiAgCi0KLSAgRG9jdW1lbnRhdGlvbiBmb3IgdXNpbmcgdGhlIHNubXBjb25mIGlzIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBoZWxwIGZpbGUKLSAgKE5ldC1TTk1QLmNobSkgbG9jYXRlZCBpbiB0aGUgZG9jcyBkaXJlY3Rvcnkgb2YgdGhlIGluc3RhbGxlZCBwYWNrYWdlLiAgSGVscCBpcyBhbHNvCi0gIGF2YWlsYWJsZSBmcm9tIHRoZSB3ZWIgc2l0ZSBhdCBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9kb2NzLy4KLQotICBUbyBydW4gc25tcGNvbmYsIHVzZSB0aGUgZm9sbG93aW5nIGNvbW1hbmQgbGluZToKLQotICAgICBzbm1wY29uZiAtaQotCi0KLUJVSUxEIElORk9STUFUSU9OCi0KLSAgTmFtZToJCQluZXQtc25tcC14LngueC0xLndpbjMyLmV4ZQotICBVUkw6CQkJaHR0cDovL3d3dy5uZXQtc25tcC5vcmcKLSAgQnVpbGQgZGF0ZToJCQotICBCdWlsdCBieToJCQotICBJbnN0YWxsZXIgUGFja2FnZSBieTogCi0gIAotICBPUzoJCQlXaW5kb3dzIDIwMDAgU1A0Ci0gIENvbXBpbGVyOgkJTVNWQysrIDYuMCBTUDUKLSAgUGxhdGZvcm0gU0RLOgkJRmVicnVhcnkgMjAwMwotICBQZXJsOgkJCUFjdGl2ZVBlcmwgNS44LjIgYnVpbGQgODA4Ci0gIFJFR0VYOgkJZ251X3JlZ2V4LmV4ZSAoMC4xMikgLSBodHRwOi8vcGVvcGxlLmRlbHBoaWZvcnVtcy5jb20vZ2pjL2dudV9yZWdleC5odG1sCi0KLSAgU291cmNlOiAJCW5ldC1zbm1wLXgueC54LnRhci5negotICBEZXN0aW5hdGlvbjogIAljOlx1c3IKLSAgUHJvamVjdDoJCXdpbjMyc2RrLmRzdyAvIGxpYmRsbC5kc3cKLSAgTGlicmFyeToJCW5ldHNubXAgZm9yIGFwcGxpY2F0aW9ucywgbmV0c25tcC5kbGwgZm9yIFBlcmwgbW9kdWxlcwotICBPcGVuU1NMOgkJbi9hCi0KLQotICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgZGVmYXVsdCBwYXRocyBhcmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb25zOgotCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgbmV0LXNubXAtY29uZmlnLmggZGVmaW5lICAgfCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgfCBvcHRpb25hbCBlbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICB8IHZhcmlhYmxlCi0gIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgREVGQVVMVF9NSUJESVJTICAgICAgICAgICAgfCBjOi91c3Ivc2hhcmUvc25tcC9taWJzICAgfCBNSUJESVJTCi0gIFNOTVBETE1PRFBBVEggICAgICAgICAgICAgIHwgYzovdXNyL2xpYi9kbG1vZCAgICAgICAgIHwgU05NUERMTU9EUEFUSAotICBTTk1QTElCUEFUSCAgICAgICAgICAgICAgICB8IGM6L3Vzci9saWIgICAgICAgICAgICAgICB8IFNOTVBMSUJQQVRICi0gIFNOTVBTSEFSRVBBVEggICAgICAgICAgICAgIHwgYzovdXNyL3NoYXJlL3NubXAgICAgICAgIHwgU05NUFNIQVJFUEFUSAotICBTTk1QQ09ORlBBVEggICAgICAgICAgICAgICB8IGM6L3Vzci9ldGMvc25tcCAgICAgICAgICB8IFNOTVBDT05GUEFUSAotICBQRVJTSVNURU5UX0RJUkVDVE9SWSAgICAgICB8IGM6L3Vzci9zbm1wL3BlcnNpc3QgICAgICB8IFNOTVBfUEVSU0lTVEVOVF9ESVIKLSAgTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiAgfCBjOi91c3IvdGVtcC9zbm1wZFhYWFhYWCAgfCAKLQorICAgICAgIFJFQURNRSBmaWxlIGZvciB3aW4zMiBiaW5hcnkgcmVsZWFzZSBvZiBOZXQtU05NUA0KKw0KK0RJU0NMQUlNRVINCisNCisgIFRoZSBBdXRob3JzIGFzc3VtZSBubyByZXNwb25zaWJpbGl0eSBmb3IgZGFtYWdlIG9yIGxvc3Mgb2Ygc3lzdGVtDQorICBwZXJmb3JtYW5jZSBhcyBhIGRpcmVjdCBvciBpbmRpcmVjdCByZXN1bHQgb2YgdGhlIHVzZSBvZiB0aGlzDQorICBzb2Z0d2FyZS4gIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3INCisgIGltcGxpZWQgd2FycmFudHkuDQorDQorDQorVEFCTEUgT0YgQ09OVEVOVFMNCisNCisgIERpc2NsYWltZXINCisgIFRhYmxlIE9mIENvbnRlbnRzDQorICBJbnRyb2R1Y3Rpb24NCisqIEluc3RhbGxhdGlvbg0KKyogQ28tZXhpc3RlbmNlIHdpdGggTWljcm9zb2Z0IFNOTVAgc2VydmljZXMNCisgIEluc3RhbGxhdGlvbiAtIFBlcmwgbW9kdWxlDQorKiBDb25maWd1cmF0aW9uDQorICBCdWlsZCBJbmZvcm1hdGlvbg0KKw0KKyAgKiA9IFJlcXVpcmVkIFJlYWRpbmcuDQorDQorDQorSU5UUk9EVUNUSU9ODQorDQorICBUaGlzIHBhY2thZ2UgY29udGFpbnMgYSBjb21waWxlZCBiaW5hcnkgcmVsZWFzZSBvZiBOZXQtU05NUCBmb3IgV2luZG93cyBOVC8yMDAwL1hQLg0KKyAgVGhlIGJpbmFyaWVzIHJ1biB1bm1vZGlmaWVkIG9uIFdpbmRvd3MgOTguICBUaGUgInNubXBkIiBhbmQgInNubXB0cmFwZCIgcHJvZ3JhbSBjYW4gDQorICBub3QgcnVuIGFzIHNlcnZpY2VzIG9uIFdpbmRvd3MgOTgsIGFzIFdpbmRvd3MgOTggZG9lcyBub3QgcHJvdmlkZSBhIFNlcnZpY2UgQ29udHJvbCANCisgIE1hbmFnZXIgKFNDTSkuDQorDQorICBEb2N1bWVudGF0aW9uIGZvciB1c2luZyB0aGUgYXBwbGljYXRpb25zIGlzIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBoZWxwIGZpbGUNCisgIChOZXQtU05NUC5jaG0pIGxvY2F0ZWQgaW4gdGhlIGRvY3MgZGlyZWN0b3J5IG9mIHRoZSBpbnN0YWxsZWQgcGFja2FnZS4gIEhlbHAgaXMgYWxzbw0KKyAgYXZhaWxhYmxlIGZyb20gdGhlIHdlYiBzaXRlIGF0IGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2RvY3MvLg0KKw0KKw0KK0lOU1RBTExBVElPTg0KKw0KKyAgVGhlIE5ldC1TTk1QIFdpbmRvd3MgaW5zdGFsbGVyIHBhY2thZ2UgcGVyZm9ybXMgdGhlIGZvbGxvd2luZyB0YXNrczoNCisNCisgIC0gSW5zdGFsbHMgdGhlIE5ldC1TTk1QIGJpbmFyaWVzLCBNSUIgZmlsZXMgYW5kIEFjdGl2ZVN0YXRlIDUuOC54IFBlcmwgUFBNIA0KKyAgICBwYWNrYWdlIGludG8gdGhlIGluc3RhbGxhdGlvbiBmb2xkZXIgKGRlZmF1bHRzIHRvIGM6XHVzcikuIA0KKyAgLSBBZGRzIChpbnN0YWxsIGZvbGRlcilcYmluIHRvIHRoZSBzeXN0ZW0gUEFUSC4gDQorICAtIEFkZHMgdGhlIGZvbGxvd2luZyByZWdpc3RyeSBrZXlzOg0KKyAgICAtIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxOZXQtU05NUFxTTk1QQ09ORlBBVEg9KGluc3RhbGwgZm9sZGVyKS9ldGMvc25tcDsNCisgICAgICAoaW5zdGFsbCBmb2xkZXIpL3NubXAvcGVyc2lzdA0KKyAgICAtIEhLRVlfTE9DQUxfTUFDSElORVxTb2Z0d2FyZVxOZXQtU05NUFxTTk1QU0hBUkVQQVRIPShpbnN0YWxsIGZvbGRlcikvc2hhcmUvc25tcA0KKyAgLSBDcmVhdGVzIGFuIHNubXAuY29uZiBmaWxlIGluIFNOTVBDT05GUEFUSCB3aGljaCBkZWZpbmVzOiANCisgICAgLSBtaWJkaXJzIChpbnN0YWxsIGZvbGRlcikvc2hhcmUvc25tcC9taWJzIA0KKyAgICAtIHBlcnNpc3RlbnREaXIgKGluc3RhbGwgZm9sZGVyKS9zbm1wL3BlcnNpc3QgDQorICAgIC0gdGVtcEZpbGVQYXR0ZXJuIChpbnN0YWxsIGZvbGRlcikvdGVtcC9zbm1wZFhYWFhYWCANCisNCisgIEFmdGVyIGluc3RhbGxpbmcgdXNpbmcgdGhlIHNldHVwIHdpemFyZCwgcGVyZm9ybSBhIHF1aWNrIHRlc3QgdG8gdmVyaWZ5IHRoYXQgDQorICBOZXQtU05NUCB3YXMgaW5zdGFsbGVkIGNvcnJlY3RseS4gIFJ1biB0aGUgZm9sbG93aW5nIGZyb20gYSBjb21tYW5kIHByb21wdDoNCisNCisgICAgc25tcHRyYW5zbGF0ZSAtSVIgLVRkIElGLU1JQjo6bGlua0Rvd24NCisNCisgIFRoZSBhYm92ZSBjb21tYW5kIHNob3VsZCBnZW5lcmF0ZToNCisNCisgICAgSUYtTUlCOjpsaW5rRG93bg0KKyAgICBsaW5rRG93biBOT1RJRklDQVRJT04tVFlQRQ0KKyAgICAgIC0tIEZST00gICAgICAgSUYtTUlCDQorICAgICAgT0JKRUNUUyAgICAgICB7IGlmSW5kZXgsIGlmQWRtaW5TdGF0dXMsIGlmT3BlclN0YXR1cyB9DQorICAgICAgREVTQ1JJUFRJT04gICAiQSBsaW5rRG93biB0cmFwIHNpZ25pZmllcyB0aGF0IHRoZSBTTk1QIGVudGl0eSwgYWN0aW5nIGluDQorICAgICAgICAgICAgICAgIGFuIGFnZW50IHJvbGUsIGhhcyBkZXRlY3RlZCB0aGF0IHRoZSBpZk9wZXJTdGF0dXMgb2JqZWN0IGZvcg0KKyAgICAgICAgICAgICAgICBvbmUgb2YgaXRzIGNvbW11bmljYXRpb24gbGlua3MgaXMgYWJvdXQgdG8gZW50ZXIgdGhlIGRvd24NCisgICAgICAgICAgICAgICAgc3RhdGUgZnJvbSBzb21lIG90aGVyIHN0YXRlIChidXQgbm90IGZyb20gdGhlIG5vdFByZXNlbnQNCisgICAgICAgICAgICAgICAgc3RhdGUpLiAgVGhpcyBvdGhlciBzdGF0ZSBpcyBpbmRpY2F0ZWQgYnkgdGhlIGluY2x1ZGVkIHZhbHVlDQorICAgICAgICAgICAgICAgIG9mIGlmT3BlclN0YXR1cy4iDQorICAgIDo6PSB7IGlzbygxKSBvcmcoMykgZG9kKDYpIGludGVybmV0KDEpIHNubXBWMig2KSBzbm1wTW9kdWxlcygzKSBzbm1wTUlCKDEpIA0KKyAgICAgICAgICBzbm1wTUlCT2JqZWN0cygxKSBzbm1wVHJhcHMoNSkgMyB9DQorDQorICBJZiBzbm1wdHJhbnNsYXRlIGNhbiBub3QgYmUgZm91bmQsIHRoZW4gdmVyaWZ5IHRoYXQgdGhlIE5ldC1TTk1QIGJpbiBmb2xkZXIgaXMgaW4gDQorICB5b3VyIHN5c3RlbSBwYXRoLg0KKw0KKyAgSWYgeW91IGdldCBNb2R1bGUgbm90IGZvdW5kIGVycm9ycyBzdWNoIGFzICdJUC1NSUI6IE1vZHVsZSBub3QgZm91bmQnLCB0aGUgYXBwbGljYXRpb24NCisgIHdhcyBub3QgYWJsZSB0byBsb2NhdGUgdGhlIG1pYnMgZm9sZGVyLiAgVmVyaWZ5IHRoYXQgU05NUENPTkZQQVRIIGlzIHNldCB0byB0aGUgbG9jYXRpb24NCisgIG9mIHRoZSBjb25maWd1cmF0aW9uIGZvbGRlciBhbmQgdGhlIHBlcnNpc3RlbnQgc3RvcmFnZSBmb2xkZXIgDQorICAoYzovdXNyL2V0Yy9zbm1wO2M6L3Vzci9zbm1wL3BlcnNpc3QgZm9yIGV4YW1wbGUpLiAgQWxzbyB2ZXJpZnkgdGhhdCB0aGVyZSBpcyBhbiANCisgIHNubXAuY29uZiBmaWxlIHRoYXQgY29udGFpbnMgY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIG1pYmRpcnMsIHBlcnNpc3RlbnREaXIgYW5kIA0KKyAgdGVtcEZpbGVQYXR0ZXJuLiAgRm9yIGV4YW1wbGU6DQorDQorICAgIG1pYmRpcnMgYzovdXNyL3NoYXJlL3NubXAvbWlicw0KKyAgICBwZXJzaXN0ZW50RGlyIGM6L3Vzci9zbm1wL3BlcnNpc3QNCisgICAgdGVtcEZpbGVQYXR0ZXJuIEM6L3Vzci90ZW1wL3NubXBkWFhYWFhYDQorDQorICBGb3IgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gdXNpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIGFuZCB0aGUgcmVnaXN0cnkgdG8gY29uZmlndXJlDQorICBOZXQtU05NUCwgc2VlICdPdmVydmlldycgZG9jdW1lbnQgaW4gdGhlIENvbmZpZ3VyYXRpb24gc2VjdGlvbiBvZiB0aGUgTmV0LVNOTVAgaGVscCBmaWxlLg0KKw0KKyAgRm9yIGluZm9ybWF0aW9uIG9uIHJ1bm5pbmcgc25tcGQuZXhlIGFuZCBzbm1wdHJhcGQuZXhlIGFzIGEgV2luZG93cyBzZXJ2aWNlLCBzZWUgDQorICAnSG93IHRvIFJlZ2lzdGVyIHRoZSBOZXQtU05NUCBBZ2VudCBhbmQgVHJhcCBEYWVtb24gYXMgV2luZG93cyBzZXJ2aWNlcycgaW4gUkVBRE1FLndpbjMyDQorICB3aGljaCBjYW4gYmUgZm91bmQgaW4gdGhlIE5ldC1TTk1QIEhlbHAgZmlsZSBpbiB0aGUgU3RhcnQgbWVudS4NCisNCisNCitDTy1FWElTVEVOQ0UgV0lUSCBNSUNST1NPRlQgU05NUCBTRVJWSUNFUw0KKw0KK1BsZWFzZSBzZWUgdGhlIHNlY3Rpb24gJ0NvLWV4aXN0ZW5jZSB3aXRoIE1pY3Jvc29mdCBTTk1QIHNlcnZpY2VzJyBpbiBSRUFETUUud2luMzIgd2hpY2ggDQorY2FuIGJlIGZvdW5kIGluIHRoZSBOZXQtU05NUCBIZWxwIGZpbGUgaW4gdGhlIFN0YXJ0IG1lbnUuDQorDQorDQorSU5TVEFMTEFUSU9OIC0gUEVSTCBNT0RVTEUNCisNCisgIEluY2x1ZGVkIGluIHRoZSAoaW5zdGFsbCBmb2xkZXIpXFBlcmwgZm9sZGVyIGlzIGFuIEFjdGl2ZVN0YXRlIFBlcmwgDQorICA1LjgueC4gUFBNIHBhY2thZ2UuICBOb3RlOiAgSW4gcHJldmlvdXMgdmVyc2lvbiBvZiBOZXQtU05NUCwgdGhlIFBQTQ0KKyAgcGFja2FnZSB3YXMgY2FsbGVkIE5ldC1TTk1QLnBwZC4gIFRoZSBwYWNrYWdlIGhhcyBiZWVuIHJlbmFtZWQgdG8NCisgIE5ldFNOTVAucHBkIHRvIHByZXZlbnQgY29uZmxpY3RzIHdpdGggdGhlIE5ldDo6U05NUCBwYWNrYWdlIGF2YWlsYWJsZQ0KKyAgZnJvbSBBY3RpdmVTdGF0ZS4NCisNCisgIFRoZSBQZXJsIG1vZHVsZXMgcmVxdWlyZSB0aGUgV2luMzIgUkVHRVggKFJlZ3VsYXIgRXhwcmVzc2lvbikgcGFja2FnZSB3aGljaCANCisgIGlzIGF2YWlsYWJsZSBmcm9tOg0KKw0KKyAgICBodHRwOi8vcGVvcGxlLmRlbHBoaWZvcnVtcy5jb20vZ2pjL2dudV9yZWdleC5odG1sDQorDQorICBEb3dubG9hZCBnbnVfcmVnZXguZXhlLCBjb3B5IGl0IHRvIGEgdGVtcG9yYXJ5IGZpbGUgYW5kIGV4ZWN1dGUgaXQgdG8gDQorICBleHRyYWN0IHRoZSBmaWxlcy4NCisNCisgIENvcHkgdGhlIGV4dHJhY3RlZCBnbnVfcmVnZXguZGxsIHRvIHlvdXIgJXdpbmRpciVcc3lzdGVtMzIgZm9sZGVyLg0KKw0KKyAgUmVtb3ZlIGFueSBleGlzdGluZyBOZXQtU05NUCBQZXJsIG1vZHVsZXM6DQorDQorICAgIHBwbSByZW1vdmUgTmV0U05NUA0KKw0KKyAgSW5zdGFsbCB0aGUgUGVybCBtb2R1bGVzOg0KKw0KKyAgICBjZCAoaW5zdGFsbCBmb2xkZXIpXFBlcmwNCisgICAgcHBtIGluc3RhbGwgTmV0U05NUC5wcGQNCisNCisgIFBlcmZvcm0gYSBiYXNpYyB0ZXN0IHVzaW5nOg0KKw0KKyAgICBuZXQtc25tcC1wZXJsLXRlc3QucGwNCisNCisNCitDT05GSUdVUkFUSU9ODQorDQorICBBbGwgY29uZmlndXJhdGlvbiBmaWxlcyBzaG91bGQgYmUgcGxhY2VkIGluIHRoZSAlU05NUENPTkZQQVRIJSBmb2xkZXIuDQorDQorICBOb3RlOiBBbGwgcGF0aHMgaW4gY29uZmlndXJhdGlvbiBmaWxlcyBzaG91bGQgdXNlIGZvcndhcmQgc2xhc2hlcyAoVW5peCBzdHlsZSksIA0KKyAgTk9UIGJhY2sgc2xhc2hlcy4gIEV4YW1wbGU6IGM6L3Vzcg0KKw0KKyAgSW5jbHVkZWQgaXMgYSBQZXJsIHNjcmlwdCBjYWxsZWQgc25tcGNvbmYgd2hpY2ggY2FuIGJlIHVzZWQgdG8gY3JlYXRlIA0KKyAgY29uZmlndXJhdGlvbiBmaWxlcy4gIA0KKw0KKyAgRG9jdW1lbnRhdGlvbiBmb3IgdXNpbmcgdGhlIHNubXBjb25mIGlzIGF2YWlsYWJsZSBpbiB0aGUgV2luZG93cyBoZWxwIGZpbGUNCisgIChOZXQtU05NUC5jaG0pIGxvY2F0ZWQgaW4gdGhlIGRvY3MgZGlyZWN0b3J5IG9mIHRoZSBpbnN0YWxsZWQgcGFja2FnZS4gIEhlbHAgaXMgYWxzbw0KKyAgYXZhaWxhYmxlIGZyb20gdGhlIHdlYiBzaXRlIGF0IGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2RvY3MvLg0KKw0KKyAgVG8gcnVuIHNubXBjb25mLCB1c2UgdGhlIGZvbGxvd2luZyBjb21tYW5kIGxpbmU6DQorDQorICAgICBzbm1wY29uZiAtaQ0KKw0KKw0KK0JVSUxEIElORk9STUFUSU9ODQorDQorICBOYW1lOgkJCW5ldC1zbm1wLXgueC54LTEud2luMzIuZXhlDQorICBVUkw6CQkJaHR0cDovL3d3dy5uZXQtc25tcC5vcmcNCisgIEJ1aWxkIGRhdGU6CQkNCisgIEJ1aWx0IGJ5OgkJDQorICBJbnN0YWxsZXIgUGFja2FnZSBieTogDQorICBOU0lTIENvbXBpbGVyOglWZXJzaW9uIDIuMw0KKyAgDQorICBPUzoJCQlXaW5kb3dzIDIwMDAgU1A0DQorICBDb21waWxlcjoJCU1TVkMrKyA2LjAgU1A1DQorICBQbGF0Zm9ybSBTREs6CQlGZWJydWFyeSAyMDAzDQorICBQZXJsOgkJCUFjdGl2ZVBlcmwgNS44LjIgYnVpbGQgODA4DQorICBSRUdFWDoJCWdudV9yZWdleC5leGUgKDAuMTIpIC0gaHR0cDovL3Blb3BsZS5kZWxwaGlmb3J1bXMuY29tL2dqYy9nbnVfcmVnZXguaHRtbA0KKw0KKyAgU291cmNlOiAJCW5ldC1zbm1wLXgueC54LnRhci5neg0KKyAgUGF0Y2hlcwkJDQorICBEZXN0aW5hdGlvbjogIAljOlx1c3INCisgIFByb2plY3Q6CQl3aW4zMnNkay5kc3cgLyBsaWJkbGwuZHN3DQorICBMaWJyYXJ5OgkJbmV0c25tcCBmb3IgYXBwbGljYXRpb25zLCBuZXRzbm1wLmRsbCBmb3IgUGVybCBtb2R1bGVzDQorICBPcGVuU1NMOgkJbi9hDQorDQorDQorICBUaGUgZm9sbG93aW5nIGFyZSB0aGUgZGVmYXVsdCBwYXRocyBhcmUgdXNlZCBieSB0aGUgYXBwbGljYXRpb25zOg0KKw0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgbmV0LXNubXAtY29uZmlnLmggZGVmaW5lICAgfCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgfCBvcHRpb25hbCBlbnZpcm9ubWVudA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgfCB2YXJpYWJsZQ0KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KKyAgREVGQVVMVF9NSUJESVJTICAgICAgICAgICAgfCBjOi91c3Ivc2hhcmUvc25tcC9taWJzICAgfCBNSUJESVJTDQorICBTTk1QRExNT0RQQVRIICAgICAgICAgICAgICB8IGM6L3Vzci9saWIvZGxtb2QgICAgICAgICB8IFNOTVBETE1PRFBBVEgNCisgIFNOTVBMSUJQQVRIICAgICAgICAgICAgICAgIHwgYzovdXNyL2xpYiAgICAgICAgICAgICAgIHwgU05NUExJQlBBVEgNCisgIFNOTVBTSEFSRVBBVEggICAgICAgICAgICAgIHwgYzovdXNyL3NoYXJlL3NubXAgICAgICAgIHwgU05NUFNIQVJFUEFUSA0KKyAgU05NUENPTkZQQVRIICAgICAgICAgICAgICAgfCBjOi91c3IvZXRjL3NubXAgICAgICAgICAgfCBTTk1QQ09ORlBBVEgNCisgIFBFUlNJU1RFTlRfRElSRUNUT1JZICAgICAgIHwgYzovdXNyL3NubXAvcGVyc2lzdCAgICAgIHwgU05NUF9QRVJTSVNURU5UX0RJUg0KKyAgTkVUU05NUF9URU1QX0ZJTEVfUEFUVEVSTiAgfCBjOi91c3IvdGVtcC9zbm1wZFhYWFhYWCAgfCANCisNCmRpZmYgLS1naXQgYS93aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQgYi93aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5iYXQKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjBlMTcyOAotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2Rpc3QvYnVpbGQtYmluYXJ5LmJhdApAQCAtMCwwICsxLDMgQEAKK0BlY2hvIG9mZgorCitwZXJsICV+ZHAwXGJ1aWxkLWJpbmFyeS5wbApkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwgYi93aW4zMi9kaXN0L2J1aWxkLWJpbmFyeS5wbApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iMDY0Y2M4Ci0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvZGlzdC9idWlsZC1iaW5hcnkucGwKQEAgLTAsMCArMSw1MzggQEAKKyMhL3Vzci9iaW4vcGVybAorIyAKKyMgQnVpbGQgc2NyaXB0IGZvciBOZXQtU05NUCBhbmQgTVNWQworIyBXcml0dGVuIGJ5IEFsZXggQnVyZ2VyIC0gYWxleF9iQHVzZXJzLnNvdXJjZWZvcmdlLm5ldAorIyBNYXkgMTB0aCwgMjAwOQorIwordXNlIHN0cmljdDsKK3VzZSBGaWxlOjpCYXNlbmFtZTsKK3VzZSBGaWxlOjpDb3B5OwordXNlIEZpbGU6OlNwZWM7Cit1c2UgQ3dkICdhYnNfcGF0aCc7CisKK3ByaW50ICItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7CisKK215ICR0YXJfY29tbWFuZDsKK215ICRnemlwX2NvbW1hbmQ7Citmb3IgbXkgJG1zeXNiaW5kaXIgKCgiQzpcXG1zeXNcXDEuMFxcYmluIiwgIkM6XFxtaW5nd1xcbXN5c1xcMS4wXFxiaW4iKSkgeworICAgICR0YXJfY29tbWFuZCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJG1zeXNiaW5kaXIsICJ0YXIuZXhlIik7CisgICAgJGd6aXBfY29tbWFuZCA9IEZpbGU6OlNwZWMtPmNhdGZpbGUoJG1zeXNiaW5kaXIsICJnemlwLmV4ZSIpOworICAgIGxhc3QgaWYgKC1mICR0YXJfY29tbWFuZCk7Cit9CisKK2lmICghICgtZiAkdGFyX2NvbW1hbmQpKSB7CisgIGRpZSAoIkNvdWxkIG5vdCBmaW5kIHRhciBjb21tYW5kIik7Cit9CitlbHNlIHsKKyAgcHJpbnQgInRhciBjb21tYW5kOiAgJHRhcl9jb21tYW5kXG4iOworfQoraWYgKCEgKC1mICRnemlwX2NvbW1hbmQpKSB7CisgIGRpZSAoIkNvdWxkIG5vdCBmaW5kIGd6aXAgY29tbWFuZCIpOworfQorZWxzZSB7CisgIHByaW50ICJnemlwIGNvbW1hbmQ6ICRnemlwX2NvbW1hbmRcbiI7Cit9CisKK215ICRtYWtlbnNpczsKK2ZvciBteSAkbnNpc2RpciAoKCJDOlxcUHJvZ3JhbSBGaWxlc1xcTlNJUyIsICJDOlxcUHJvZ3JhbSBGaWxlcyAoeDg2KVxcTlNJUyIpKSB7CisgICAgJG1ha2Vuc2lzID0gRmlsZTo6U3BlYy0+Y2F0ZmlsZSgkbnNpc2RpciwgIm1ha2Vuc2lzLmV4ZSIpOworICAgIGxhc3QgaWYgKC1mICRtYWtlbnNpcyk7Cit9CitkaWUoIm1ha2Vuc2lzLmV4ZSBub3QgZm91bmQiKSBpZiAoISgtZiAkbWFrZW5zaXMpKTsKKworbXkgJHRhcmdldF9hcmNoID0gJEVOVntUQVJHRVRfQ1BVfSA/ICRFTlZ7VEFSR0VUX0NQVX0gOiAkRU5We1BsYXRmb3JtfSA/CisgICAgICAgICAgICAgICAgICAkRU5We1BsYXRmb3JtfSA6ICJ4ODYiOworbXkgJG9wZW5zc2xkaXIgPSAkdGFyZ2V0X2FyY2ggZXEgIng2NCIgPyAiQzpcXE9wZW5TU0wtV2luNjQiIDoKKyAgICAgICAgICAgICAgICAgIkM6XFxPcGVuU1NMLVdpbjMyIjsKK215ICRvcGVuc3NsaW5jZGlyID0gJG9wZW5zc2xkaXIgLiAiXFxpbmNsdWRlIjsKK215ICRvcGVuc3NsbGliZGlyID0gJG9wZW5zc2xkaXIgLiAiXFxsaWJcXFZDIjsKKworbXkgJHZlcnNpb24gPSAidW5rbm93biI7CitteSAkdmVyc2lvbl9mb3JfcGVybCA9ICJ1bmtub3duIjsKK215ICR2ZXJzaW9uX21hajsKK215ICR2ZXJzaW9uX21pbjsKK215ICR2ZXJzaW9uX3JldjsKK215ICRpbnN0YWxsZXJfZXhlX3ZlcnNpb24gPSAxOworbXkgJG9wZW5zc2wgPSAiZGlzYWJsZWQiOworbXkgJGJfaXB2NiA9ICJkaXNhYmxlZCI7CitteSAkYl93aW5leHRkbGwgPSAiZGlzYWJsZWQiOworbXkgJHNkayA9ICJkaXNhYmxlZCI7CitteSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2UgPSAiYzovdXNyIjsKK215ICRpbnN0YWxsX2Jhc2UgPSAkZGVmYXVsdF9pbnN0YWxsX2Jhc2U7CitteSAkaW5zdGFsbCA9ICJlbmFibGVkIjsKK215ICRpbnN0YWxsX2RldmVsID0gImRpc2FibGVkIjsKK215ICRwZXJsID0gImRpc2FibGVkIjsKK215ICRwZXJsX2luc3RhbGwgPSAiZGlzYWJsZWQiOworbXkgJGxvZ2dpbmcgPSAiZW5hYmxlZCI7CitteSAkZGVidWcgPSAiZGlzYWJsZWQiOworbXkgJGNvbmZpZ09wdHMgPSAiIjsKK215ICRjVG1wID0gIiI7CitteSAkbGlua3R5cGUgPSAic3RhdGljIjsKK215ICRvcHRpb247CisKK215ICRzY3JpcHRkaXIgPSBkaXJuYW1lKGFic19wYXRoKCQwKSk7CitteSAkd2luMzJfZGlyID0gZGlybmFtZSgkc2NyaXB0ZGlyKTsKK215ICR0b3BfZGlyID0gZGlybmFtZSgkd2luMzJfZGlyKTsKK215ICRwZXJsX2RpciA9IEZpbGU6OlNwZWMtPmNhdGRpcigkdG9wX2RpciwgInBlcmwiKTsKKworcHJpbnQgIlxudG9wX2RpcjogICAgICAkdG9wX2RpclxuIjsKK3ByaW50ICJ3aW4zMl9kaXI6ICAgICR3aW4zMl9kaXJcbiI7CitwcmludCAicGVybF9kaXI6ICAgICAkcGVybF9kaXJcbiI7CitwcmludCAiaW5zdGFsbCBiYXNlOiAkaW5zdGFsbF9iYXNlXG5cbiI7CisKK2NoZGlyICR3aW4zMl9kaXI7CisKK2lmICggLWQgImRpc3QiICkgeyB9CitlbHNlIHsKKyAgcHJpbnQgIlxuUGxlYXNlIGNvcHkgdGhlIHdpbjMyL2Rpc3QgZm9sZGVyIGZyb20gdHJ1bmsgdG8gJHdpbjMyX2Rpci9cblxuIjsKKyAgZXhpdDsKK30KKworaWYgKCEoLWQgJEVOVntNU1ZDRGlyfSkgJiYgISgtZCAkRU5We1ZDSU5TVEFMTERJUn0pICYmICFkZWZpbmVkKCRFTlZ7VEFSR0VUX0NQVX0pKSB7CisgIHByaW50ICJcblBsZWFzZSBydW4gVkNWQVJTMzIuQkFUIGZpcnN0IHRvIHNldCB1cCB0aGUgVmlzdWFsIFN0dWRpbyBidWlsZFxuIiAuCisgICAgICAgICJlbnZpcm9ubWVudC5cblxuIjsKKyAgZXhpdDsKK30KKworaWYgKCAtZCAkaW5zdGFsbF9iYXNlKSB7CisgIHByaW50ICJcblBsZWFzZSBkZWxldGUgb3IgcmVuYW1lIHRoZSAkaW5zdGFsbF9iYXNlIGZvbGRlci5cblxuIjsKKyAgZXhpdDsKK30KKworbXkgJHN5c3RlbV9uZXRzbm1wZGxsID0gIiRFTlZ7V0lORElSfVxcc3lzdGVtMzJcXG5ldHNubXAuZGxsIjsKK2lmICggLWYgJHN5c3RlbV9uZXRzbm1wZGxsKSB7CisgIHByaW50ICJcbiRzeXN0ZW1fbmV0c25tcGRsbCBzaG91bGQgYmUgcmVuYW1lZCBvciBkZWxldGVkLlxuXG4iOworICAKKyAgcHJpbnQgIldvdWxkIHlvdSBsaWtlIG1lIHRvIGRlbGV0ZSBpdD8gKHkvbj8pIjsKKyAgJHwgPSAxOworICBteSAkdGVtcCA9IDxTVERJTj47CisgIGNob21wICR0ZW1wOworICBpZiAobGMoJHRlbXApIGVxICJ5IiB8fCBsYygkdGVtcCkgZXEgInllcyIpIHsKKyAgICB1bmxpbmsgJHN5c3RlbV9uZXRzbm1wZGxsIHx8IGRpZSAiQ291bGQgbm90IGRlbGV0ZSBmaWxlICRzeXN0ZW1fbmV0c25tcGRsbFxuIjsKKyAgfQorICBlbHNlIHsKKyAgICBleGl0OworICB9Cit9CisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjCisjIERldGVybWluZSB2ZXJzaW9uIGZyb20gdW5peCBjb25maWd1cmUgc2NyaXB0CisjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitteSAkdW5peF9jb25maWd1cmVfaW4gPSAiLi4vY29uZmlndXJlIjsKKworb3BlbiAoVU5JWF9DT05GSUdVUkVfSU4sICI8JHVuaXhfY29uZmlndXJlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICR1bml4X2NvbmZpZ3VyZV9pblxuIjsKKword2hpbGUgKDxVTklYX0NPTkZJR1VSRV9JTj4pCit7CisgIGNob21wOworICAvUEFDS0FHRV9WRVJTSU9OPScoLiopJy87CisgIGlmICgkMSBuZSAiIikgeworICAgICR2ZXJzaW9uID0gJDE7CisgICAgbGFzdDsKKyAgfQorfQorY2xvc2UgVU5JWF9DT05GSUdVUkVfSU47CisKKyMgRGV0ZXJtaW5lIHZlcnNpb24gZm9yIFBlcmwgKDQgY2hhcmFjdGVycyB3aXRoIGNvbW1hcykKKyR2ZXJzaW9uX2Zvcl9wZXJsID0gJHZlcnNpb247CitteSAkZG90Q291bnQgPSAoJHZlcnNpb24gPX4gdHIvLi8vKTsKK3doaWxlICgkZG90Q291bnQgPCAzKSB7CisgICR2ZXJzaW9uX2Zvcl9wZXJsIC49ICIuMCI7CisgICRkb3RDb3VudCsrOworfQorJHZlcnNpb25fZm9yX3BlcmwgPX4gcy9cLi8sL2c7CisKKyMgRGV0ZXJtaW5lIHZlcnNpb24gZm9yIE5TSVMgaW5zdGFsbGVyCitteSBAdmVyc2lvbl9hcnJheSA9IHNwbGl0KC9cLi8sICR2ZXJzaW9uKTsKKyR2ZXJzaW9uID1+IC8uKj9cLi4qP1wuKC4qKS87CiskdmVyc2lvbl9yZXYgPSAkMSB8fCAwOworJHZlcnNpb25fbWFqID0gJHZlcnNpb25fYXJyYXlbMF0gfHwgMDsKKyR2ZXJzaW9uX21pbiA9ICR2ZXJzaW9uX2FycmF5WzFdIHx8IDA7CisKK3ByaW50ICJOZXQtU05NUCB2ZXJzaW9uOiAgICAgICR2ZXJzaW9uXG4iOworcHJpbnQgIk5ldC1TTk1QIFBlcmwgdmVyc2lvbjogJHZlcnNpb25fZm9yX3BlcmxcbiI7CitwcmludCAiTmV0LVNOTVAgdmVyc2lvbiBNQUo6ICAkdmVyc2lvbl9tYWpcbiI7CitwcmludCAiTmV0LVNOTVAgdmVyc2lvbiBNSU4xOiAkdmVyc2lvbl9taW5cbiI7CitwcmludCAiTmV0LVNOTVAgdmVyc2lvbiBNSU4yOiAkdmVyc2lvbl9yZXZcblxuIjsKKworI2dvdG8gc2tpcDE7CisjZXhpdDsKKworCisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgQ29tbW9uIGJ1aWxkIG9wdGlvbnM6CiskYl9pcHY2ID0gImVuYWJsZWQiOworJHNkayA9ICJlbmFibGVkIjsKKyRkZWZhdWx0X2luc3RhbGxfYmFzZSA9ICJjOi91c3IiOworJGluc3RhbGxfYmFzZSA9ICRkZWZhdWx0X2luc3RhbGxfYmFzZTsKKyRwZXJsX2luc3RhbGwgPSAiZGlzYWJsZWQiOworJGRlYnVnID0gImRpc2FibGVkIjsKKyRjb25maWdPcHRzID0gIiI7CiskY1RtcCA9ICIiOworJGxpbmt0eXBlID0gImR5bmFtaWMiOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEJ1aWxkIGJpbmFyeToKKyMgd2luRXh0RExMID0gZGlzYWJsZWQKKyMgU1NMID0gZW5hYmxlZAorJG9wZW5zc2wgPSAiZW5hYmxlZCI7CiskYl93aW5leHRkbGwgPSAiZGlzYWJsZWQiOworJHBlcmwgPSAiZW5hYmxlZCI7CiskaW5zdGFsbCA9ICJlbmFibGVkIjsKKyRpbnN0YWxsX2RldmVsID0gImVuYWJsZWQiOworCitjaGRpciAkd2luMzJfZGlyOworJmJ1aWxkKCk7CismY3JlYXRlX3BlcmxfcGFja2FnZSgpOworCitwcmludCAiXG5DbGVhbmluZyB1cCAkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9cbiI7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wZC5jb25mIik7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wdHJhcGQuY29uZiIpOworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEJ1aWxkIGJpbmFyeToKKyMgd2luRXh0RExMID0gZW5hYmxlZAorIyBTU0wgPSBlbmFibGVkCiskb3BlbnNzbCA9ICJlbmFibGVkIjsKKyRiX3dpbmV4dGRsbCA9ICJlbmFibGVkIjsKKyRwZXJsID0gImRpc2FibGVkIjsKKyRpbnN0YWxsID0gImRpc2FibGVkIjsKKyRpbnN0YWxsX2RldmVsID0gImRpc2FibGVkIjsKKworY2hkaXIgJHdpbjMyX2RpcjsKKyZidWlsZCgpOworCitwcmludCAiXG5Db3B5aW5nIHNubXBkLmV4ZSB0byBzbm1wZC13aW5FeHRETEwuZXhlXG4iOworY29weSgiYmluL3JlbGVhc2Uvc25tcGQuZXhlIiwiJGluc3RhbGxfYmFzZS9iaW4vc25tcGQtd2luRXh0RExMLmV4ZSIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IHNubXBkLmV4ZSB0byBzbm1wZC13aW5FeHRETEwuZXhlOiAkPyIpOworCitwcmludCAiXG5DbGVhbmluZyB1cCAkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9cbiI7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wZC5jb25mIik7Cit1bmxpbmsgKCIkaW5zdGFsbF9iYXNlL3NubXAvcGVyc2lzdC9zbm1wdHJhcGQuY29uZiIpOworCisKK3ByaW50ICJSZW5hbWluZyAkaW5zdGFsbF9iYXNlL2JpbiB0byAkaW5zdGFsbF9iYXNlL2Jpbi5zc2xcbiI7CityZW5hbWUgKCIkaW5zdGFsbF9iYXNlL2JpbiIsIiRpbnN0YWxsX2Jhc2UvYmluLnNzbCIpIHx8IGRpZSAoIkNvdWxkIG5vdCByZW5hbWUgZm9sZGVyOiAkPyIpOworcHJpbnQgIlJlbmFtaW5nICRpbnN0YWxsX2Jhc2UvbGliIHRvICRpbnN0YWxsX2Jhc2UvbGliLnNzbFxuIjsKK3JlbmFtZSAoIiRpbnN0YWxsX2Jhc2UvbGliIiwiJGluc3RhbGxfYmFzZS9saWIuc3NsIikgfHwgZGllICgiQ291bGQgbm90IHJlbmFtZSBmb2xkZXI6ICQ/Iik7CitwcmludCAiUmVuYW1pbmcgJGluc3RhbGxfYmFzZS9wZXJsIHRvICRpbnN0YWxsX2Jhc2UvcGVybC5zc2xcbiI7CityZW5hbWUgKCIkaW5zdGFsbF9iYXNlL3BlcmwiLCIkaW5zdGFsbF9iYXNlL3Blcmwuc3NsIikgfHwgZGllICgiQ291bGQgbm90IHJlbmFtZSBmb2xkZXI6ICQ/Iik7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisjIEJ1aWxkIGJpbmFyeToKKyMgd2luRXh0RExMID0gZGlzYWJsZWQKKyMgU1NMID0gZGlzYWJsZWQKKyRvcGVuc3NsID0gImRpc2FibGVkIjsKKyRiX3dpbmV4dGRsbCA9ICJkaXNhYmxlZCI7CiskcGVybCA9ICJlbmFibGVkIjsKKyRpbnN0YWxsID0gImVuYWJsZWQiOworJGluc3RhbGxfZGV2ZWwgPSAiZW5hYmxlZCI7CisKK2NoZGlyICR3aW4zMl9kaXI7CismYnVpbGQoKTsKKyZjcmVhdGVfcGVybF9wYWNrYWdlKCk7CisKK3ByaW50ICJcbkNsZWFuaW5nIHVwICRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L1xuIjsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXBkLmNvbmYiKTsKK3VubGluayAoIiRpbnN0YWxsX2Jhc2Uvc25tcC9wZXJzaXN0L3NubXB0cmFwZC5jb25mIik7CisKKyMqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyMgQnVpbGQgYmluYXJ5OgorIyB3aW5FeHRETEwgPSBlbmFibGVkCisjIFNTTCA9IGRpc2FibGVkCiskb3BlbnNzbCA9ICJkaXNhYmxlZCI7CiskYl93aW5leHRkbGwgPSAiZW5hYmxlZCI7CiskcGVybCA9ICJkaXNhYmxlZCI7CiskaW5zdGFsbCA9ICJkaXNhYmxlZCI7CiskaW5zdGFsbF9kZXZlbCA9ICJkaXNhYmxlZCI7CisKK2NoZGlyICR3aW4zMl9kaXI7CismYnVpbGQoKTsKKworcHJpbnQgIlxuQ29weWluZyBzbm1wZC5leGUgdG8gc25tcGQtd2luRXh0RExMLmV4ZVxuIjsKK2NvcHkoImJpbi9yZWxlYXNlL3NubXBkLmV4ZSIsIiRpbnN0YWxsX2Jhc2UvYmluL3NubXBkLXdpbkV4dERMTC5leGUiKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBzbm1wZC5leGUgdG8gc25tcGQtd2luRXh0RExMLmV4ZTogJD8iKTsKKworcHJpbnQgIlxuQ2xlYW5pbmcgdXAgJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3QvXG4iOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcGQuY29uZiIpOwordW5saW5rICgiJGluc3RhbGxfYmFzZS9zbm1wL3BlcnNpc3Qvc25tcHRyYXBkLmNvbmYiKTsKKworIyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitwcmludCAiXG5cbkNvcHlpbmcgZGlzdCBmaWxlczpcbiI7CitwcmludCAiPT09PT09PT09PT09PT09PT09PVxuXG4iOworCitta2RpciAoIiRpbnN0YWxsX2Jhc2UvZG9jcyIpOworbWtkaXIgKCIkaW5zdGFsbF9iYXNlL3RlbXAiKTsKKworJmNoZWNrX2Rpcl9leGlzdHMoIiRpbnN0YWxsX2Jhc2UvZG9jcyIpOworJmNoZWNrX2Rpcl9leGlzdHMoIiRpbnN0YWxsX2Jhc2UvdGVtcCIpOworCitjaGRpciAkdG9wX2RpcjsKK2NvcHkoIkNPUFlJTkciLCIkaW5zdGFsbF9iYXNlL2RvY3MvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKK2NvcHkoJ3dpbjMyXGRpc3RcUkVBRE1FLnR4dCcsIiRpbnN0YWxsX2Jhc2UvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKK2NvcHkoJ3dpbjMyXGRpc3Rcc2NyaXB0c1xuZXQtc25tcC1wZXJsLXRlc3QucGwnLCIkaW5zdGFsbF9iYXNlL2Jpbi8iKSB8fCBkaWUgKCJDb3VsZCBub3QgY29weSBmaWxlOiAkPyIpOworCisKK3NraXAxOgorCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK3ByaW50ICJcblxuQ29weWluZyBOU0lTIGluc3RhbGxlciBmaWxlczpcbiI7CitwcmludCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKKworY2hkaXIgJHRvcF9kaXI7Citjb3B5KCd3aW4zMlxkaXN0XGluc3RhbGxlclxTZXRFblZhci5uc2knLCIkaW5zdGFsbF9iYXNlLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7Citjb3B5KCd3aW4zMlxkaXN0XGluc3RhbGxlclxuZXQtc25tcC5uc2knLCIkaW5zdGFsbF9iYXNlL25ldC1zbm1wLm5zaSIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7Citjb3B5KCd3aW4zMlxkaXN0XGluc3RhbGxlclxBZGQyUGF0aC5uc2knLCIkaW5zdGFsbF9iYXNlLyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7Citjb3B5KCd3aW4zMlxkaXN0XGluc3RhbGxlclxuZXQtc25tcC1oZWFkZXIxLmJtcCcsIiRpbnN0YWxsX2Jhc2UvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKKworb3BlbiAoVEVNUCwgIj4kaW5zdGFsbF9iYXNlL3JlZ2lzdGVyYWdlbnQuYmF0IikgfHwgZGllICgiQ291bGQgbm90IGNyZWF0ZSBmaWxlOiAkPyIpOworY2xvc2UgVEVNUDsKK29wZW4gKFRFTVAsICI+JGluc3RhbGxfYmFzZS91bnJlZ2lzdGVyYWdlbnQuYmF0IikgfHwgZGllICgiQ291bGQgbm90IGNyZWF0ZSBmaWxlOiAkPyIpOworY2xvc2UgVEVNUDsKK29wZW4gKFRFTVAsICI+JGluc3RhbGxfYmFzZS9yZWdpc3RlcnRyYXBkLmJhdCIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjcmVhdGUgZmlsZTogJD8iKTsKK2Nsb3NlIFRFTVA7CitvcGVuIChURU1QLCAiPiRpbnN0YWxsX2Jhc2UvdW5yZWdpc3RlcnRyYXBkLmJhdCIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjcmVhdGUgZmlsZTogJD8iKTsKK2Nsb3NlIFRFTVA7CitvcGVuIChURU1QLCAiPiRpbnN0YWxsX2Jhc2UvZXRjL3NubXAvc25tcC5jb25mIikgfHwgZGllICgiQ291bGQgbm90IGNyZWF0ZSBmaWxlOiAkPyIpOworY2xvc2UgVEVNUDsKKworcHJpbnQgIlxuXG5Db3B5aW5nIGRvY3VtZW50YXRpb246XG4iOworcHJpbnQgIj09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5cbiI7CisKKyMgVG8gZG86IHJlcGxhY2UgdGhlIHR3byBsaW5lcyBiZWxvdyB3aXRoIGNvbW1hbmRzIHRoYXQgYnVpbGQgdGhlIC5jaG0gZmlsZS4KK29wZW4gb3V0LCAiPiRpbnN0YWxsX2Jhc2UvZG9jcy9uZXQtc25tcC5jaG0iOworY2xvc2Ugb3V0OworCitwcmludCAiXG5cbkJ1aWxkaW5nIGluc3RhbGxlcjpcbiI7CitwcmludCAiPT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKKworbXkgJHN1ZmZpeCA9ICRFTlZ7TElCfSA9fiAvXFx4NjR8XFxhbWQ2NC8gPyAieDY0IiA6ICJ4ODYiOworaWYgKHN5c3RlbSgiXCIkbWFrZW5zaXNcIiAvRFBST0RVQ1RfTUFKX1ZFUlNJT049XCIkdmVyc2lvbl9tYWpcIiAvRFBST0RVQ1RfTUlOX1ZFUlNJT049XCIkdmVyc2lvbl9taW5cIiAvRFBST0RVQ1RfUkVWSVNJT049XCIkdmVyc2lvbl9yZXZcIiAvRFBST0RVQ1RfRVhFX1ZFUlNJT049XCIkaW5zdGFsbGVyX2V4ZV92ZXJzaW9uXCIgL0RJTlNUQUxMRVJfUExBVEZPUk09XCIkc3VmZml4XCIgXCIkaW5zdGFsbF9iYXNlL25ldC1zbm1wLm5zaVwiIikgIT0gMCkgeworICAgIGRpZSgiQnVpbGRpbmcgaW5zdGFsbGVyIGZhaWxlZCIpOworfQorCitwcmludCAiXG49PT09PT09XG4iOworcHJpbnQgIkRvbmUhISFcbiI7CitwcmludCAiPT09PT09PVxuXG4iOworCitleGl0OworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisKKworCisjKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitzdWIgYnVpbGQgeworICBwcmludCAiXG5cbkJ1aWxkaW5nIHdpdGggb3B0aW9uczpcbiI7CisgIHByaW50ICI9PT09PT09PT09PT09PT09PT09PT09XG5cbiI7CisgIHByaW50ICIxLiAgT3BlblNTTCBzdXBwb3J0OiAgICAgICAgICAgICAgICAiIC4gJG9wZW5zc2wuICJcbiI7CisgIHByaW50ICIyLiAgUGxhdGZvcm0gU0RLIHN1cHBvcnQ6ICAgICAgICAgICAiIC4gJHNkayAuICJcbiI7CisgIHByaW50ICJcbiI7CisgIHByaW50ICIzLiAgSW5zdGFsbCBwYXRoOiAgICAgICAgICAgICAgICAgICAiIC4gJGluc3RhbGxfYmFzZSAuICJcbiI7CisgIHByaW50ICI0LiAgSW5zdGFsbCBhZnRlciBidWlsZDogICAgICAgICAgICAiIC4gJGluc3RhbGwgLiAiXG4iOworICBwcmludCAiXG4iOworICBwcmludCAiNS4gIFBlcmwgbW9kdWxlczogICAgICAgICAgICAgICAgICAgIiAuICRwZXJsIC4gIlxuIjsKKyAgcHJpbnQgIjYuICBJbnN0YWxsIHBlcmwgbW9kdWxlczogICAgICAgICAgICIgLiAkcGVybF9pbnN0YWxsIC4gIlxuIjsKKyAgcHJpbnQgIlxuIjsKKyAgcHJpbnQgIjcuICBRdWlldCBidWlsZCAobG9nZ2VkKTogICAgICAgICAgICIgLiAkbG9nZ2luZyAuICJcbiI7CisgIHByaW50ICI4LiAgRGVidWcgbW9kZTogICAgICAgICAgICAgICAgICAgICAiIC4gJGRlYnVnIC4gIlxuIjsKKyAgcHJpbnQgIlxuIjsKKyAgcHJpbnQgIjkuICBJUHY2IHRyYW5zcG9ydHMgKHJlcXVpcmVzIFNESyk6ICIgLiAkYl9pcHY2IC4gIlxuIjsKKyAgcHJpbnQgIjEwLiB3aW5FeHRETEwgYWdlbnQgKHJlcXVpcmVzIFNESyk6ICIgLiAkYl93aW5leHRkbGwgLiAiXG4iOworICBwcmludCAiXG4iOworICBwcmludCAiMTEuIExpbmsgdHlwZTogICAgICAgICAgICAgICAgICAgICAgIiAuICRsaW5rdHlwZSAuICJcbiI7CisgIHByaW50ICJcbiI7CisgIHByaW50ICIxMi4gSW5zdGFsbCBkZXZlbG9wbWVudCBmaWxlcyAgICAgICAiIC4gJGluc3RhbGxfZGV2ZWwgLiAiXG4iOworCisgICRjVG1wID0gKCRvcGVuc3NsIGVxICJlbmFibGVkIiA/ICItLXdpdGgtc3NsIiA6ICIiICk7CisgICRjb25maWdPcHRzID0gIiRjVG1wIjsKKyAgJGNUbXAgPSAoJHNkayBlcSAiZW5hYmxlZCIgPyAiLS13aXRoLXNkayIgOiAiIiApOworICAkY29uZmlnT3B0cyA9ICIkY29uZmlnT3B0cyAkY1RtcCI7CisgICRjVG1wID0gKCRiX2lwdjYgZXEgImVuYWJsZWQiID8gIi0td2l0aC1pcHY2IiA6ICIiICk7CisgICRjb25maWdPcHRzID0gIiRjb25maWdPcHRzICRjVG1wIjsKKyAgJGNUbXAgPSAoJGJfd2luZXh0ZGxsIGVxICJlbmFibGVkIiA/ICItLXdpdGgtd2luZXh0ZGxsIiA6ICIiICk7CisgICRjb25maWdPcHRzID0gIiRjb25maWdPcHRzICRjVG1wIjsKKyAgJGNUbXAgPSAoJGRlYnVnIGVxICJlbmFibGVkIiA/ICItLWNvbmZpZz1kZWJ1ZyIgOiAiLS1jb25maWc9cmVsZWFzZSIgKTsKKyAgJGNvbmZpZ09wdHMgPSAiJGNvbmZpZ09wdHMgJGNUbXAiOworICAKKyAgIyBTZXQgZW52aXJvbm1lbnQgdmFyaWFibGVzCisgIAorICAjIFNldCB0byBub3Qgc2VhcmNoIGZvciBub24tZXhpc3RlbnQgIi5kZXAiIGZpbGVzCisgICRFTlZ7Tk9fRVhURVJOQUxfREVQU309IjEiOworCisgICRFTlZ7SU5DTFVERX0gLj0gIjskb3BlbnNzbGluY2RpciI7CisgICRFTlZ7TElCfSAgICAgLj0gIjskb3BlbnNzbGxpYmRpciI7CisKKyAgIyBTZXQgUEFUSCBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBQZXJsIG1ha2UgdGVzdHMgY2FuIGxvY2F0ZSB0aGUgRExMCisgICRFTlZ7UEFUSH0gPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHRvcF9kaXIsICJiaW4iLCAkZGVidWcgZXEgImVuYWJsZWQiID8gImRlYnVnIiA6ICJyZWxlYXNlIikgLiAiOyRFTlZ7UEFUSH0iOworICAKKyAgIyBTZXQgTUlCRElSUyBlbnZpcm9ubWVudCB2YXJpYWJsZSBzbyBQZXJsIG1ha2UgdGVzdHMgY2FuIGxvY2F0ZSB0aGUgbWlicworICBteSAkdGVtcF9taWJkaXIgPSBGaWxlOjpTcGVjLT5jYXRkaXIoJHRvcF9kaXIsICJtaWJzIik7CisgICR0ZW1wX21pYmRpciA9fiBzL1xcL1wvL2c7CisgICRFTlZ7TUlCRElSU309JHRlbXBfbWliZGlyOworICAKKyAgIyBTZXQgU05NUENPTkZQQVRIIGVudmlyb25tZW50IHZhcmlhYmxlIHNvIFBlcmwgY29uZi50IHRlc3QgY2FuIGxvY2F0ZQorICAjIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLgorICAjIFNlZSB0aGUgbm90ZSBhYm91dCBlbnZpcm9ubWVudCB2YXJpYWJsZXMgaW4gdGhlIFdpbjMyIHNlY3Rpb24gb2YgCisgICMgcGVybC9TTk1QL1JFQURNRSBmb3IgZGV0YWlscyBvbiB3aHkgdGhpcyBpcyBuZWVkZWQuIAorICAkRU5We1NOTVBDT05GUEFUSH09InQiOyRFTlZ7U05NUENPTkZQQVRIfTsKKyAgCisgIHByaW50ICJcbkJ1aWxkaW5nLi4uXG4iOworICAKKyAgcHJpbnQgIlxuQ3JlYXRpbmcgKi5vdXQgbG9nIGZpbGVzLlxuXG4iOworCisgICNwcmludCAiRGVsZXRpbmcgb2xkIGxvZyBmaWxlcy4uLlxuIjsKKyAgI3N5c3RlbSgiZGVsICoub3V0ID4gTlVMOiAyPiYxIik7CisKKyAgIyBEZWxldGUgbmV0LXNubXAtY29uZmlnLmggZnJvbSBtYWluIGluY2x1ZGUgZm9sZGVyIGp1c3QgaW4gY2FzZSBpdCB3YXMgY3JlYXRlZCBieSBhIEN5Z3dpbiBvciBNaW5HVyBidWlsZAorICBzeXN0ZW0oImRlbCAuLlxcaW5jbHVkZVxcbmV0LXNubXBcXG5ldC1zbm1wLWNvbmZpZy5oID4gTlVMOiAyPiYxIik7CisgIAorICBwcmludCAiUnVubmluZyBDb25maWd1cmUuLi5cbiI7CisgIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT0kbGlua3R5cGUgLS1wcmVmaXg9XCIkaW5zdGFsbF9iYXNlXCIgPiBjb25maWd1cmUub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBjb25maWd1cmUub3V0KSI7CisKKyAgcHJpbnQgIkNsZWFuaW5nLi4uXG4iOworICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gY2xlYW4gPiBjbGVhbi5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGNsZWFuLm91dCkiOworCisgIHByaW50ICJCdWlsZGluZyBtYWluIHBhY2thZ2UuLi5cbiI7CisgIHN5c3RlbSgibm1ha2UgL25vbG9nbyA+IG1ha2Uub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBtYWtlLm91dCkiOworCisgIGlmICgkcGVybCBlcSAiZW5hYmxlZCIpIHsKKyAgICBpZiAoJGxpbmt0eXBlIGVxICJzdGF0aWMiKSB7CisgICAgICBwcmludCAiUnVubmluZyBDb25maWd1cmUgZm9yIERMTC4uLlxuIjsKKyAgICAgIHN5c3RlbSgicGVybCBDb25maWd1cmUgJGNvbmZpZ09wdHMgLS1saW5rdHlwZT1keW5hbWljIC0tcHJlZml4PVwiJGluc3RhbGxfYmFzZVwiID4gcGVybGNvbmZpZ3VyZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxjb25maWd1cmUub3V0KSI7CisgICAgICAKKyAgICAgIHByaW50ICJDbGVhbmluZyBsaWJyYXJpZXMuLi5cbiI7CisgICAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gbGlic19jbGVhbiA+PiBjbGVhbi5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGNsZWFuLm91dCkiOworICAgICAgCisgICAgICBwcmludCAiQnVpbGRpbmcgRExMIGxpYnJhcmllcy4uLlxuIjsKKyAgICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBsaWJzID4gZGxsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgZGxsLm91dCkiOworICAgIH0KKworICAgIHByaW50ICJDbGVhbmluZyBQZXJsLi4uLlxuIjsKKyAgICBzeXN0ZW0oIm5tYWtlIC9ub2xvZ28gcGVybF9jbGVhbiA+PiBjbGVhbi5vdXQgMj4mMSIpOyAjIElmIGFscmVhZHkgY2xlYW5lZCwgTWFrZWZpbGUgaXMgZ29uZSBzbyBkb24ndCB3b3JyeSBhYm91dCBlcnJvcnMhCisKKyAgICBwcmludCAiQnVpbGRpbmcgUGVybCBtb2R1bGVzLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsID4gcGVybG1ha2Uub3V0IDI+JjEiKSA9PSAwIHx8IGRpZSAiQnVpbGQgZXJyb3IgKHNlZSBwZXJsbWFrZS5vdXQpIjsKKworIyAgICBwcmludCAiVGVzdGluZyBQZXJsIG1vZHVsZXMuLi5cbiI7CisjICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBwZXJsX3Rlc3QgPiBwZXJsdGVzdC5vdXQgMj4mMSIpOyAjIERvbid0IGRpZSBpZiBhbGwgdGhlIHRlc3RzIGRvbid0IHBhc3MuLgorICAgIAorICAgIGlmICgkcGVybF9pbnN0YWxsIGVxICJlbmFibGVkIikgeworICAgICAgcHJpbnQgIkluc3RhbGxpbmcgUGVybCBtb2R1bGVzLi4uXG4iOworICAgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIHBlcmxfaW5zdGFsbCA+IHBlcmxpbnN0YWxsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgcGVybGluc3RhbGwub3V0KSI7CisgICAgfQorICAgICAgCisgICAgcHJpbnQgIlxuU2VlIHBlcmx0ZXN0Lm91dCBmb3IgUGVybCB0ZXN0IHJlc3VsdHNcbiI7CisgIH0KKworICBwcmludCAiXG4iOworICBpZiAoJGluc3RhbGwgZXEgImVuYWJsZWQiKSB7CisgICAgcHJpbnQgIkluc3RhbGxpbmcgbWFpbiBwYWNrYWdlLi4uXG4iOworICAgIHN5c3RlbSgibm1ha2UgL25vbG9nbyBpbnN0YWxsID4gaW5zdGFsbC5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIGluc3RhbGwub3V0KSI7CisgIH0KKyAgZWxzZSB7CisgICAgcHJpbnQgIlR5cGUgbm1ha2UgaW5zdGFsbCB0byBpbnN0YWxsIHRoZSBwYWNrYWdlIHRvICRpbnN0YWxsX2Jhc2VcbiI7CisgIH0KKworICBpZiAoJGluc3RhbGxfZGV2ZWwgZXEgImVuYWJsZWQiKSB7CisgICAgcHJpbnQgIkluc3RhbGxpbmcgZGV2ZWxvcG1lbnQgZmlsZXMuLi5cbiI7CisgICAgc3lzdGVtKCJubWFrZSAvbm9sb2dvIGluc3RhbGxfZGV2ZWwgPiBpbnN0YWxsX2RldmVsLm91dCAyPiYxIikgPT0gMCB8fCBkaWUgIkJ1aWxkIGVycm9yIChzZWUgaW5zdGFsbF9kZXZlbC5vdXQpIjsKKyAgfQorICBlbHNlIHsKKyAgICBwcmludCAiVHlwZSBubWFrZSBpbnN0YWxsX2RldmVsIHRvIGluc3RhbGwgdGhlIGRldmVsb3BtZW50IGZpbGVzIHRvICRpbnN0YWxsX2Jhc2VcbiI7CisgIH0KKyAgCisgIGlmICgkcGVybF9pbnN0YWxsIGVxICJkaXNhYmxlZCIgJiYgJHBlcmwgZXEgImVuYWJsZWQiKSB7CisgICAgcHJpbnQgIlR5cGUgbm1ha2UgcGVybF9pbnN0YWxsIHRvIGluc3RhbGwgdGhlIFBlcmwgbW9kdWxlc1xuIjsKKyAgfQorCisgIHByaW50ICJcbkRvbmUhXG4iOyAgCit9ICMgc3ViIGJ1aWxkCisKKworCisKK3N1YiBjcmVhdGVfcGVybF9wYWNrYWdlIHsKKworICBwcmludCAiXG5cbkNyZWF0aW5nIFBlcmwgcGFja2FnZTpcbiI7CisgIHByaW50ICI9PT09PT09PT09PT09PT09PT09PT09PT1cblxuIjsKKyAgCisgIGNoZGlyICRwZXJsX2RpciB8fCBkaWUgKCJDb3VsZCBub3QgZW50ZXIgUGVybCBkaXJlY3Rvcnk6ICRwZXJsX2RpciIpOworICAKKyAgc3lzdGVtKCJubWFrZSBwcGQgPiBwZXJscGFja2FnZS5vdXQgMj4mMSIpID09IDAgfHwgZGllICJCdWlsZCBlcnJvciAoc2VlIHBlcmxwYWNrYWdlLm91dCkiOworICAjcmVuYW1lKCJCdW5kbGUtTmV0U05NUC5wcGQiLCJOZXRTTk1QLnBwZCIpIHx8IGRpZSAiQ291bGQgbm90IHJlbmFtZSBCdW5kbGUtTmV0U05NUC5wcGQgdG8gTmV0U05NUC5wcGQiOworICAKKyAgeworICAgIG15ICRmaWxlX291dCA9ICJOZXRTTk1QLnBwZCI7CisgICAgbXkgJGZpbGVfaW4gPSAiQnVuZGxlLU5ldFNOTVAucHBkIjsKKyAgCisgICAgb3BlbiAoRklMRV9PVVQsICI+JGZpbGVfb3V0IikgfHwgZGllICJDYW4ndCBPcGVuICRmaWxlX291dFxuIjsKKyAgICBvcGVuIChGSUxFX0lOLCAiPCRmaWxlX2luIikgfHwgZGllICJDYW4ndCBPcGVuICRmaWxlX2luXG4iOworICAgIAorICAgIHByaW50ICJjcmVhdGluZyAkZmlsZV9vdXRcbiI7CisgIAorICAgIHdoaWxlICg8RklMRV9JTj4pCisgICAgeworICAgICAgY2hvbXA7CisgICAgICBzL148U09GVFBLRyBOQU1FLiovPFNPRlRQS0cgTkFNRT0iTmV0U05NUCIgVkVSU0lPTj0iJHZlcnNpb25fZm9yX3BlcmwiPi87CisgICAgICBzLy4qPzxUSVRMRT4uKi8gICAgPFRJVExFPk5ldC1TTk1QPFwvVElUTEU+LzsKKyAgICAgIHMvLio/PEFCU1RSQUNUPi4qLyAgICA8QUJTVFJBQ1Q+T2JqZWN0IE9yaWVudGVkIEludGVyZmFjZSB0byBOZXQtU05NUDxcL0FCU1RSQUNUPi87CisgICAgICBzLy4qPzxDT0RFQkFTRS4qLyAgICAgICAgPENPREVCQVNFIEhSRUY9Ing4NlwvTmV0U05NUC50YXIuZ3oiIFwvPi87CisgIAorICAgICAgcHJpbnQgRklMRV9PVVQgJF8gLiAiXG4iOworICAgIH0KKyAgICBjbG9zZSBGSUxFX0lOOworICAgIGNsb3NlIEZJTEVfT1VUOworICB9CisgIAorICBwcmludCAiQ29tcHJlc3NpbmcgUGVybCBtb2R1bGVzXG4iOworICB1bmxpbmsgIk5ldFNOTVAudGFyIjsKKyAgdW5saW5rICJOZXRTTk1QLnRhci5neiI7CisgIHVubGluayAicGVybC10YXIub3V0IjsKKyAgdW5saW5rICJwZXJsLWd6aXAub3V0IjsKKyAgcHJpbnQgIiAgQ3JlYXRpbmcgUGVybCB0YXIgZmlsZVxuIjsKKyAgaWYgKHN5c3RlbSgiXCIkdGFyX2NvbW1hbmRcIiBjdmYgTmV0U05NUC50YXIgYmxpYiA+IHBlcmwtdGFyLm91dCAyPiYxIikpIHsgZGllICgiQ291bGQgbm90IGNyZWF0ZSB0YXIgZmlsZS4gIFNlZSBwZXJsLXRhci5vdXQiKTsgfQorICBwcmludCAiICBDb21wcmVzc2luZyBQZXJsIHRhciBmaWxlXG4iOworICBpZiAoc3lzdGVtKCJcIiRnemlwX2NvbW1hbmRcIiAtLWJlc3QgTmV0U05NUC50YXIgPiBwZXJsLWd6aXAub3V0IDI+JjEiKSkgeyBkaWUgKCJDb3VsZCBub3QgY29tcHJlc3MgdGFyIGZpbGUgd2l0aCBnemlwLiBTZWUgcGVybC1nemlwLm91dCIpOyB9CisgICAKKyAgIyBSZW1vdmUgY2hkaXIuLgorICBjaGRpciAkcGVybF9kaXIgfHwgZGllICgiQ291bGQgbm90IGVudGVyIFBlcmwgZGlyZWN0b3J5OiAkcGVybF9kaXIiKTsKKyAgbWtkaXIgKCIkaW5zdGFsbF9iYXNlL3BlcmwiKTsKKyAgbWtkaXIgKCIkaW5zdGFsbF9iYXNlL3BlcmwveDg2Iik7CisgICZjaGVja19kaXJfZXhpc3RzKCIkaW5zdGFsbF9iYXNlL3BlcmwiKTsKKyAgJmNoZWNrX2Rpcl9leGlzdHMoIiRpbnN0YWxsX2Jhc2UvcGVybC94ODYiKTsKKyAgY29weSgiTmV0U05NUC5wcGQiLCIkaW5zdGFsbF9iYXNlL3BlcmwvIikgfHwgZGllICgiQ291bGQgbm90IGNvcHkgZmlsZTogJD8iKTsKKyAgY29weSgiTmV0U05NUC50YXIuZ3oiLCIkaW5zdGFsbF9iYXNlL3BlcmwveDg2LyIpIHx8IGRpZSAoIkNvdWxkIG5vdCBjb3B5IGZpbGU6ICQ/Iik7Cit9ICAjIHN1YiBjcmVhdGVfcGVybF9wYWNrYWdlCisKK3N1YiBjaGVja19kaXJfZXhpc3RzIHsKKyAgbXkgJGRpciA9IHNoaWZ0OworICBpZiAoISAtZCAkZGlyKSB7CisgICAgZGllICJEaXJlY3RvcnkgJGRpciBpcyBtaXNzaW5nXG4iOworICB9Cit9CisKZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3QvaHRtbGhlbHAvRGV2ZWxvcGVyX0ZBUS5odG1sIGIvd2luMzIvZGlzdC9odG1saGVscC9EZXZlbG9wZXJfRkFRLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgwYWNiYwotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2Rpc3QvaHRtbGhlbHAvRGV2ZWxvcGVyX0ZBUS5odG1sCkBAIC0wLDAgKzEsNzg2IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgMy4yIEZpbmFsLy9FTiI+Cis8aHRtbD4KKyAgPGhlYWQ+CisgICAgPHRpdGxlPnJzdG9yeSdzIE5FVC1TTk1QIERldmVsb3BlcnMgRnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgUGFnZTwvdGl0bGU+CisgIDwvaGVhZD4KKworICA8Ym9keSBiZ2NvbG9yPSIjZmZmZmZmIiBiYWNrZ3JvdW5kPSJ1Y2Qtc25tcC1iZzMuZ2lmIj4KKyAgICA8ZGl2IGFsaWduPWNlbnRlcj4KKyAgICA8aDE+cnN0b3J5J3MgTkVULVNOTVAgRGV2ZWxvcGVycyBGcmVxdWVudGx5IEFza2VkIFF1ZXN0aW9ucyBQYWdlPC9oMT4KKyAgICA8L2Rpdj4KKzxocj4KKyAgICA8ZGl2IGFsaWduPWNlbnRlcj4KKyAgICA8Zm9udCBzaXplPS0xPgorICAgICAgPGEgaHJlZj0iRkFRLmh0bWwiPltPZmZpY2lhbCBGQVFdPC9hPiB8IAorCTxhIGhyZWY9IiN0b2tlbnMiPltEZWJ1ZyB0b2tlbnNdPC9hPiB8IAorCTxhIGhyZWY9IiNhZ2VudHgiPltBZ2VudFhdPC9hPiB8IAorCTxhIGhyZWY9IiNpbnN0YWxsIj5bSW5zdGFsbF08L2E+IHwgCisJPGEgaHJlZj0iI2Rpc2FibGUiPltEaXNhYmxlXTwvYT4gfCAKKwk8YSBocmVmPSIjZXJyb3JzIj5bRXJyb3JzXTwvYT4gfCAKKwk8YSBocmVmPSIjYml0cyI+W0JpdHNdPC9hPiB8IAorCTxhIGhyZWY9IiNlbWJlZGRlZCI+W2VtYmVkZGVkIHBlcmxdPC9hPiB8IAorCTxhIGhyZWY9IiNzbXV4Ij5bU01VWF08L2E+IHwgCisJPGEgaHJlZj0iI2VudGlkIj5bRW50ZXJwcmlzZSBPSURdPC9hPiB8IAorCTxhIGhyZWY9IiNhdXRvZGVwcyI+W0F1dG9tYXRpYyBkZXBlbmRlbmNpZXNdPC9hPiB8IAorCTxhIGhyZWY9IiNjcm9zcyI+W0Nyb3NzIGNvbXBpbGluZ108L2E+IHwgCisJPGEgaHJlZj0iI3N0YXRpYyI+W1N0YXRpYyBsaW5raW5nXTwvYT4gfCAKKwk8YSBocmVmPSIjcmVhZGZkcyI+W3JlYWRmZHNdPC9hPiB8IAorCTxhIGhyZWY9IiNzaGFyaW5nIj5bU2hhcmluZyBkYXRhXTwvYT4gfCAKKwk8YSBocmVmPSJtYW4xLW1pYjJjLjEuaHRtbCI+W21pYjJjLmFycmF5LXVzZXIuY29uZl08L2E+IHwgCisJPGEgaHJlZj0iI3N0ZXBzIj5bQmFieSBTdGVwcyBmbG93XTwvYT4gfCAKKyAgICAgIDwvZm9udD4KKyAgICA8L2Rpdj4KKzxocj4KK1RoaXMgaXMganVzdCBhIHF1aWNrIHBhZ2UgdG8gYW5zd2VyIHNvbWUgY29tbW9uIHF1ZXN0aW9ucyB0aGF0IGFyZW4ndCBjb3ZlcmVkCitpbiB0aGUgPGEgaHJlZj0iL0ZBUS5odG1sIj5vZmZpY2lhbCBGQVE8L2E+LgorCis8YSBuYW1lPSJhZ2VudHgiPjwvYT4gPGgyPkFnZW50WDwvaDI+Cis8cHJlPiBUbyBoYXZlIHRoZSBzdWItYWdlbnQgY29tbXVuaWNhdGUgb24gYSBkaWZmZXJlbnQgc29ja2V0LCBvciB3aXRoCitkaWZmZXJlbnQgcGVybWlzc2lvbnMsIGFkZCB0aGVzZSBsaW5lIHRvIHlvdXIgc25tcGQuY29uZgorCisJIyBzb2NrZXQgcGF0aAorCWFnZW50eHNvY2tldCAvdG1wL2FnZW50eAorCisJIyBwZXJtcyBzb2NrZXQgZGlyZWN0b3J5IHVzZXJpZCBncm91cGlkCisJYWdlbnR4cGVybXMgNzc3IDc3NyByc3RvcnkgcnN0b3J5CisKKworYW5kIGFkZCB0aGlzIGxpbmUgdG8geW91ciBzdWJhZ2VudDoKKworCW5ldHNubXBfZHNfc2V0X3N0cmluZyhORVRTTk1QX0RTX0FQUExJQ0FUSU9OX0lELCBORVRTTk1QX0RTX0FHRU5UX1hfU09DS0VULCAiL3RtcC9hZ2VudHgiKTsKKworKmJlZm9yZSogeW91IGNhbGwgaW5pdF9hZ2VudCgpLgorCisgPC9wcmU+CisKKzxhIG5hbWU9Imluc3RhbGwiPjwvYT48aDI+aW5zdGFsbDwvaDI+Cis8cHJlPiBJTlNUQUxMX1BSRUZJWCBnb2VzIGJlZm9yZSBldmVyeXRoaW5nLi4gc28sIHdpdGggdGhlIGRlZmF1bHRzLCBqdXN0CitzZXR0aW5nIElOU1RBTExfUFJFRklYPS90bXAgd291bGQgcmVzdWx0IGluIC90bXAvdXNyL2xvY2FsLi4gCitzbyBJTlNUQUxMX1BSRUZJWD0vdG1wIHByZWZpeD0vdXNyIGV4ZWNfcHJlZml4PS91c3Igd291bGQgZ28gaW50byAvdG1wL3VzcgorIDwvcHJlPgorCis8YSBuYW1lPSJkaXNhYmxlIj48L2E+PGgyPmRpc2FibGU8L2gyPgorPHByZT4gSWYgeW91IGFyZSB1c2luZyBuZXQtc25tcCBWZXJzaW9uID49IDUuMSwgdGhlbiB0aGUgZm9sbG93aW5nIGNvbmZpZ3VyZQorb3B0aW9ucyBtYXkgYmUgdXNlZnVsIHRvIHlvdToKKworICAtLWRpc2FibGUtYWdlbnQgICAgICAgICAgICAgICAgIERvIG5vdCBidWlsZCB0aGUgYWdlbnQgKHNubXBkKS4KKyAgLS1kaXNhYmxlLWFwcGxpY2F0aW9ucyAgICAgICAgICBEbyBub3QgYnVpbGQgdGhlIGFwcHMgKHNubXBnZXQsIC4uLikuCisgIC0tZGlzYWJsZS1tYW51YWxzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIG1hbnVhbHMuCisgIC0tZGlzYWJsZS1zY3JpcHRzICAgICAgICAgICAgICAgRG8gbm90IGluc3RhbGwgdGhlIHNjcmlwdHMgKG1pYjJjLCAuLi4pLgorICAtLWRpc2FibGUtbWlicyAgICAgICAgICAgICAgICAgIERvIG5vdCBpbnN0YWxsIHRoZSBtaWIgZmlsZXMuCisgIC0tZGlzYWJsZS1taWItbG9hZGluZyAgICAgICAgICAgIERvIG5vdCBpbmNsdWRlIGNvZGUgdGhhdCBwYXJzZXMgYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbmlwdWxhdGVzIHRoZSBtaWIgZmlsZXMuCisgPC9wcmU+CisKKzxhIG5hbWU9ImVycm9ycyI+PC9hPjxoMj5lcnJvcnM8L2gyPgorPHByZT4gZnJvbSBSRkMgMzQxNjoKKworICAgICAgICAgICAgICAgICAgIG5vRXJyb3IoMCksCisgICAgICAgICAgICAgICAgICAgdG9vQmlnKDEpLAorICAgICAgICAgICAgICAgICAgIG5vU3VjaE5hbWUoMiksICAgICAgLS0gZm9yIHByb3h5IGNvbXBhdGliaWxpdHkKKyAgICAgICAgICAgICAgICAgICBiYWRWYWx1ZSgzKSwgICAgICAgIC0tIGZvciBwcm94eSBjb21wYXRpYmlsaXR5CisgICAgICAgICAgICAgICAgICAgcmVhZE9ubHkoNCksICAgICAgICAtLSBmb3IgcHJveHkgY29tcGF0aWJpbGl0eQorICAgICAgICAgICAgICAgICAgIGdlbkVycig1KSwKKyAgICAgICAgICAgICAgICAgICBub0FjY2Vzcyg2KSwKKyAgICAgICAgICAgICAgICAgICB3cm9uZ1R5cGUoNyksCisgICAgICAgICAgICAgICAgICAgd3JvbmdMZW5ndGgoOCksCisgICAgICAgICAgICAgICAgICAgd3JvbmdFbmNvZGluZyg5KSwKKyAgICAgICAgICAgICAgICAgICB3cm9uZ1ZhbHVlKDEwKSwKKyAgICAgICAgICAgICAgICAgICBub0NyZWF0aW9uKDExKSwKKyAgICAgICAgICAgICAgICAgICBpbmNvbnNpc3RlbnRWYWx1ZSgxMiksCisgICAgICAgICAgICAgICAgICAgcmVzb3VyY2VVbmF2YWlsYWJsZSgxMyksCisgICAgICAgICAgICAgICAgICAgY29tbWl0RmFpbGVkKDE0KSwKKyAgICAgICAgICAgICAgICAgICB1bmRvRmFpbGVkKDE1KSwKKyAgICAgICAgICAgICAgICAgICBhdXRob3JpemF0aW9uRXJyb3IoMTYpLAorICAgICAgICAgICAgICAgICAgIG5vdFdyaXRhYmxlKDE3KSwKKyAgICAgICAgICAgICAgICAgICBpbmNvbnNpc3RlbnROYW1lKDE4KQorIDwvcHJlPgorCis8YSBuYW1lPSJiaXRzIj48L2E+PGgyPmJpdHM8L2gyPgorPHByZT4gU05NUHYxIHVzZSBCSVQgU1RSSU5HcyAoUkZDIDEyMTIsIDUuMS4xKToKKworICAgICAgICAgICgzKSAgQW4gb2JqZWN0IHdpdGggQklUIFNUUklORyBzeW50YXggY29udGFpbmluZyBubyBtb3JlIHRoYW4KKyAgICAgICAgICAgICAgIDMyIGJpdHMgYmVjb21lcyBhbiBJTlRFR0VSIGRlZmluZWQgYXMgYSBzdW07IG90aGVyd2lzZSBpZgorICAgICAgICAgICAgICAgbW9yZSB0aGFuIDMyIGJpdHMgYXJlIHByZXNlbnQsIHRoZSBvYmplY3QgYmVjb21lcyBhbgorICAgICAgICAgICAgICAgT0NURVQgU1RSSU5HLCB3aXRoIHRoZSBiaXRzIG51bWJlcmVkIGZyb20gbGVmdC10by1yaWdodCwKKyAgICAgICAgICAgICAgIGluIHdoaWNoIHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXRzIG9mIHRoZSBsYXN0IG9jdGV0IG1heQorICAgICAgICAgICAgICAgYmUgInJlc2VydmVkIGZvciBmdXR1cmUgdXNlIi4KKworU05NUHYyIGFuZCBiZXlvbmQgdXNlcyBCSVRTIChSRkMgMzQxNywgOC4xKToKKworICAgKDMpICAgV2hlbiBlbmNvZGluZyBhbiBvYmplY3Qgd2hvc2Ugc3ludGF4IGlzIGRlc2NyaWJlZCB1c2luZyB0aGUKKyAgICAgICAgIEJJVFMgY29uc3RydWN0LCB0aGUgdmFsdWUgaXMgZW5jb2RlZCBhcyBhbiBPQ1RFVCBTVFJJTkcsIGluCisgICAgICAgICB3aGljaCBhbGwgdGhlIG5hbWVkIGJpdHMgaW4gKHRoZSBkZWZpbml0aW9uIG9mKSB0aGUgYml0c3RyaW5nLAorICAgICAgICAgY29tbWVuY2luZyB3aXRoIHRoZSBmaXJzdCBiaXQgYW5kIHByb2NlZWRpbmcgdG8gdGhlIGxhc3QgYml0LAorICAgICAgICAgYXJlIHBsYWNlZCBpbiBiaXRzIDggKGhpZ2ggb3JkZXIgYml0KSB0byAxIChsb3cgb3JkZXIgYml0KSBvZgorICAgICAgICAgdGhlIGZpcnN0IG9jdGV0LCBmb2xsb3dlZCBieSBiaXRzIDggdG8gMSBvZiBlYWNoIHN1YnNlcXVlbnQKKyAgICAgICAgIG9jdGV0IGluIHR1cm4sIGZvbGxvd2VkIGJ5IGFzIG1hbnkgYml0cyBhcyBhcmUgbmVlZGVkIG9mIHRoZQorICAgICAgICAgZmluYWwgc3Vic2VxdWVudCBvY3RldCwgY29tbWVuY2luZyB3aXRoIGJpdCA4LiAgUmVtYWluaW5nIGJpdHMsCisgICAgICAgICBpZiBhbnksIG9mIHRoZSBmaW5hbCBvY3RldCBhcmUgc2V0IHRvIHplcm8gb24gZ2VuZXJhdGlvbiBhbmQKKyAgICAgICAgIGlnbm9yZWQgb24gcmVjZWlwdC4KKyA8L3ByZT4KKworPGEgbmFtZT0iZW1iZWRkZWQiPjwvYT4gPGgyPmVtYmVkZGVkIHBlcmw8L2gyPgorPHByZT4gQWRkIHRoZSBmb2xsb3dpbmcgbGluZSB0byBzbm1wZC5jb25mOgorIAorICAgcGVybCBkbyAiL3BhdGgvdG8vcGVybF9tb2R1bGUucGwiCisKKworVG8gdGVzdDoKKworMSkgVHJ5IHN0YXJpbmcgdXAgc25tcGQsIGxpa2Ugc286ICdzbm1wZCAtRHBlcmwnLiBDaGVjayB5b3VyIGxvZyBmaWxlcyBmb3I6CisKKyAgcGVybDogaW5pdGlhbGl6aW5nIHBlcmwgKC90bXAvc25tcF9wZXJsLnBsKQorICBzdGFydGluZyBwZXJsX21vZHVsZS5wbAorICBwZXJsX21vZHVsZS5wbCBsb2FkZWQgb2sKKyAgcmVnaXN0ZXJpbmcgYXQgbmV0U25tcC45OTkKKworSWYgeW91IGdldDoKKworICBwZXJsOiBpbml0aWFsaXppbmcgcGVybCAoL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXBfcGVybC5wbCkKKyAgQ2FuJ3Qgb3BlbiBwZXJsIHNjcmlwdCAiL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXBfcGVybC5wbCI6IE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnkKKyAgZW1iZWRkZWQgcGVybCBzdXBwb3J0IGZhaWxlZCB0byBpbml0YWxpemUKKworVGhlbiB5b3UgbmVlZCB0byBsb2NhdGUgc25tcF9wZXJsLnBsLCBhbmQgcHV0IGl0IGluIHRoZSBjb3JyZWN0IHBhdGgsIE9SIHB1dAordGhlIHBhdGggaW4geW91ciBzbm1wZC5jb25mOgorCisJcGVybEluaXRGaWxlIC90bXAvc25tcF9wZXJsLnBsCisKKworMikgT25jZSBpdCdzIGxvYWRlZCBvaywgdHJ5IGEgd2FsazoKKworCXNubXB3YWxrIC12MmMgLWMgcHVibGljIGxvY2FsaG9zdCBuZXRTbm1wLjk5OQorCitZb3Ugc2hvdWxkIHNlZSBzb21ldGhpbmcgbGlrZSB0aGlzIGluIHlvdXIgbG9nczoKKworIHJlZnM6IE5ldFNOTVA6OmFnZW50OjpuZXRzbm1wX21pYl9oYW5kbGVyLCBOZXRTTk1QOjphZ2VudDo6cmVnaW5mbywgTmV0U05NUDo6YWdlbnQ6Om5ldHNubXBfYWdlbnRfcmVxdWVzdF9pbmZvLCBOZXRTTk1QOjphZ2VudDo6bmV0c25tcF9yZXF1ZXN0X2luZm9QdHIKK3Byb2Nlc3NpbmcgYSByZXF1ZXN0IG9mIHR5cGUgMTYxCisgICBwcm9jZXNzaW5nIHJlcXVlc3Qgb2YgbnNUcmFuc2FjdGlvbkVudHJ5LjMKKyAgICAuMS4zLjYuMS40LjEuODA3Mi45OTkuMS4yLjEgLT4gaGVsbG8gd29ybGQKKyAgIGZpbmlzaGVkIHByb2Nlc3NpbmcKKworMykgSWYgbm90LCBtYXliZSBjaGVjayAvcGF0aC90by9wZXJsX21vZHVsZS5wbCBhbmQgbWFrZSBzdXJlIGl0IGlzIGV4ZWN1dGFibGUuCisKK0hvcGUgdGhhdCBoZWxwcy4KKworIDwvcHJlPgorCis8YSBuYW1lPSJzbXV4Ij48L2E+IDxoMj5TTVVYPC9oMj4KKzxwcmU+IFRvIHR1cm4gb2ZmIFNNVVggd2hlbiB5b3UgZG9uJ3QgaGF2ZSB0aGUgb3B0aW9ucyBvZiByZWNvbXBpbGluZyBmcm9tIHNvdXJjZQordG8gZGlzYWJsZSBTTVVYIHN1cHBvcnQsIHlvdSBoYXZlIHRvIGdpdmUgaXQgYW4gaW52YWxpZCBJUCBhZGRyZXNzIHRvIGJpbmQKK3RvLiBUaGlzIG1heSBiZSBPUyBzcGVjaWZpYy4gT24gTGludXgsIGlmIEkgcHV0IHRoaXMgaW4gbXkgc25tcGQuY29uZjoKKworCXNtdXhzb2NrZXQgMS4wLjAuMAorCitJIGdldCBhbiBlcnJvciBhdCBzdGFydHVwLCBhbmQgbHNvZiBvciBuZXRzdGF0IHNob3cgdGhhdCBzbm1wZCBpcyBubyBsb25nZXIKK2xpc3RlbnRpbmcgb24gcG9ydCAxOTkuIElmIHlvdSBnZXQgYW5kIGVycm9yIG1lc3NhZ2UgYWJvdXQgdGhlIHNtdXhzb2NrZXQKK3Rva2VuIG5vdCBiZWluZyByZWNvbmduaXplZCwgdGhlbiB5b3UncmUgb3V0IG9mIGx1Y2suIFlvdSdsbCBoYXZlIHRvIHJlY29tcGlsZQorZnJvbSBzb3VyY2UgKG9yIGp1c3QgdXNlIGxvY2FsIGZpcmV3YWxsIHJ1bGVzIHRvIGJsb2NrIGNvbm5lY3Rpb25zIHRvIHBvcnQKKzE5OSkuCisgPC9wcmU+CisKKzxhIG5hbWU9ImVudGlkIj48L2E+IDxoMj5FbnRlcnByaXNlIE9JRDwvaDI+Cis8cHJlPiBGcm9tOiBEYXZlIFNoaWVsZCwgUk9iZXJ0IFN0b3J5CisKK1JlY2VudCBWZXJzaW9ucyAoNS54KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJZiB5b3Ugd2FudCB0byAqanVzdCogY2hhbmdlIHRoZSBzeXNPYmplY3RJRCBudW1iZXJpbmcsCisoYW5kIGxlYXZlIHRoZSBub3RpZmljYXRpb25zIHVzaW5nIHRoZSBOZXQtU05NUCBlbnRlcnByaXNlIE9JRCkKK3RoZW4gdXNlICAtLXdpdGgtZW50ZXJwcmlzZS1zeXNvaWQKK09yIHlvdSBjb3VsZCBqdXN0IHVzZSB0aGUgc25tcGQuY29uZiBkaXJlY3RpdmUgJ3N5c29iamVjdGlkJwordG8gc2V0IHRoaXMgYXQgcnVuIHRpbWUuCisKKworSWYgeW91IHdhbnQgdG8gKmp1c3QqIGNoYW5nZSBlbnRlcnByaXNlLXNwZWNpZmljIG5vdGlmaWNhdGlvbiBPSUQKKyhhbmQgbGVhdmUgdGhlIHN5c09iamVjdElEIHVzaW5nIHRoZSBOZXQtU05NUCB2YWx1ZXMpCit0aGVuIHVzZSAgLS13aXRoLWVudGVycHJpc2Utbm90aWZpY2F0aW9uLW9pZAorCisKK0lmIHlvdSB3YW50IHRvIGNoYW5nZSAqYm90aCogb2YgdGhlc2UsCit0aGVuIHVzZSAtLXdpdGgtZW50ZXJwcmlzZS1vaWQKKworT2xkZXIgVmVyc2lvbnMgKDQuMi54KQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorSW4gb2xkZXIgdmVyc2lvbiwgeW91IGhhdmUgdG8gbWFudWFsbCB1cGRhdGUgdGhlIHZlcnNpb25faWQgaW4KK2FnZW50L2FnZW50X3RyYXAuYzo4MAorCisgICBvaWQgdmVyc2lvbl9pZFtdICAgID0geyBFWFRFTlNJQkxFTUlCLCBBR0VOVElELCBPU1RZUEUgfTsKKworIDwvcHJlPgorCis8YSBuYW1lPSJhdXRvZGVwcyI+PC9hPiA8aDI+QXV0b21hdGljIGRlcGVuZGVuY2llczwvaDI+Cis8cHJlPiBGb3IgYXV0by1kZXBlbmRlbmNpZXMsIGFkZCB0aGUgZm9sbG93aW5nIHRvIHlvdXIgTWFrZWZpbGU6CisKKyMKKyMgQnVpbGQgcnVsZXMKKyMKKyUuZCA6ICUuYworCUBlY2hvICJHZW5lcmF0aW5nIG1ha2VmaWxlICRAIC4uLiIKKwlAc2V0IC1lOyAkKENDKSAtTSAkKENPUFRTKSAkKENGTEFHUykgJChDUFBGTEFHUykgJDwgXAorCXwgc2VkICdzL1woJCpcKVwub1sgOl0qL1wxLm8gJEAgOiAvZycgPiAkQDsgXAorCVsgLXMgJEAgXSB8fCAkKFJNKSAkKFJNRkxBR1MpICRACisKK2luY2x1ZGUgJChTT1VSQ0VTOi5jPS5kKQorCisgPC9wcmU+CisKKzxhIG5hbWU9ImNyb3NzIj48L2E+IDxoMj5Dcm9zcyBjb21waWxpbmc8L2gyPgorPHByZT4gRnJvbSB0aGUgbmV0LXNubXAgSU5TVEFMTCBmaWxlOgorCisgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisKK1NwZWNpZnlpbmcgdGhlIFN5c3RlbSBUeXBlCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgICBUaGVyZSBtYXkgYmUgc29tZSBmZWF0dXJlcyBgY29uZmlndXJlJyBjYW4gbm90IGZpZ3VyZSBvdXQKK2F1dG9tYXRpY2FsbHksIGJ1dCBuZWVkcyB0byBkZXRlcm1pbmUgYnkgdGhlIHR5cGUgb2YgaG9zdCB0aGUgcGFja2FnZQord2lsbCBydW4gb24uICBVc3VhbGx5IGBjb25maWd1cmUnIGNhbiBmaWd1cmUgdGhhdCBvdXQsIGJ1dCBpZiBpdCBwcmludHMKK2EgbWVzc2FnZSBzYXlpbmcgaXQgY2FuIG5vdCBndWVzcyB0aGUgaG9zdCB0eXBlLCBnaXZlIGl0IHRoZQorYC0taG9zdD1UWVBFJyBvcHRpb24uICBUWVBFIGNhbiBlaXRoZXIgYmUgYSBzaG9ydCBuYW1lIGZvciB0aGUgc3lzdGVtCit0eXBlLCBzdWNoIGFzIGBzdW40Jywgb3IgYSBjYW5vbmljYWwgbmFtZSB3aXRoIHRocmVlIGZpZWxkczoKKyAgICAgQ1BVLUNPTVBBTlktU1lTVEVNCisKK1NlZSB0aGUgZmlsZSBgY29uZmlnLnN1YicgZm9yIHRoZSBwb3NzaWJsZSB2YWx1ZXMgb2YgZWFjaCBmaWVsZC4gIElmCitgY29uZmlnLnN1YicgaXNuJ3QgaW5jbHVkZWQgaW4gdGhpcyBwYWNrYWdlLCB0aGVuIHRoaXMgcGFja2FnZSBkb2Vzbid0CituZWVkIHRvIGtub3cgdGhlIGhvc3QgdHlwZS4KKworICAgSWYgeW91IGFyZSBidWlsZGluZyBjb21waWxlciB0b29scyBmb3IgY3Jvc3MtY29tcGlsaW5nLCB5b3UgY2FuIGFsc28KK3VzZSB0aGUgYC0tdGFyZ2V0PVRZUEUnIG9wdGlvbiB0byBzZWxlY3QgdGhlIHR5cGUgb2Ygc3lzdGVtIHRoZXkgd2lsbAorcHJvZHVjZSBjb2RlIGZvciBhbmQgdGhlIGAtLWJ1aWxkPVRZUEUnIG9wdGlvbiB0byBzZWxlY3QgdGhlIHR5cGUgb2YKK3N5c3RlbSBvbiB3aGljaCB5b3UgYXJlIGNvbXBpbGluZyB0aGUgcGFja2FnZS4KKworIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLQorCitUaGUgbW9zdCBpbXBvcnRhbnQgY29uZmlndXJlIG9wdGlvbnMgYXJlOgorCisJLS13aXRoLWNjPVtjcm9zcy1jb21waWxlcl0KKwktLXdpdGgtbGQ9W2Nyb3NzLWxpbmtlcl0KKwktLXRhcmdldD1bdGFyZ2V0LWVudmlyb25tZW50XQorCS0td2l0aC1lbmRpYW5uZXNzPVtiaWd8bGl0dGxlXQorCitPdGhlciBwb3RlbnRpYWxseSB1c2VmdWwgb3B0aW9uczoKKworCS0td2l0aC1jZmxhZ3M9Ii4uLiIKKwktLXdpdGgtbGRsYWdzPSIuLi4iCisJLS13aXRoLWFyPS9wYXRoL2FyCisKKwktLWVuYWJsZS1taW5pLWFnZW50CisJLS1lbmFibGUtc2hhcmVkPSJubyIKKwktLXdpdGhvdXQtcGljCisKK1R3byBzaW1wbGUgZXhhbXBsZXMgb2YgY3Jvc3MtY29tcGlsaW5nOgorCisuL2NvbmZpZ3VyZSAtLXRhcmdldD1wcGMtbGludXggLS13aXRoLWNjPXBwY180MDUtZ2NjIC0td2l0aC1lbmRpYW5uZXNzPWJpZworCisuL2NvbmZpZ3VyZSAtLXRhcmdldD1wb3dlcnBjLXNubWMtbGludXgtZ251IC0tYnVpbGQ9aTM4Ni1yZWRoYXQtbGludXggXAorICAgICAgICAtLXdpdGgtZW5kaWFubmVzcz1iaWcKKworQSBtb3JlIGNvbXBsZXggZXhhbXBsZSBpbnZvbHZlcyBzZXR0aW5nIGVudmlyb25tZW50IHZhcmlhYmxlcyBmb3IgYWxsCit0aGUgZmxhZ3MgZm9yIHRoZSB0b29scyBuZWVkZWQgZm9yIHRoZSBjcm9zcyBjb21waWxlOgorCisgICBleHBvcnQgVE9PTFBBVEg9L29wdC9oYXJkaGF0L2RldmtpdC9wcGMvNDA1CisgICBleHBvcnQgUEFUSD0kVE9PTFBBVEgvYmluOiRQQVRICisgICBleHBvcnQgQ0ZMQUdTPScgLWcgLWZQSUMgLW1zb2Z0LWZsb2F0IC1EX1NPRlRfRkxPQVQgLURsaW51eCAtbWNwdT00MDMnCisgICBleHBvcnQgQ1BQRkxBR1M9Jy1JJFRPT0xQQVRIL2luY2x1ZGUgLUkkVE9PTFBBVEgvdGFyZ2V0L3Vzci9pbmNsdWRlJworICAgZXhwb3J0IEFTRkxBR1M9Jy1nIC1nc3RhYnMnCisgICBleHBvcnQgTERGTEFHUz0nLVdsLC1zb25hbWUsLUJkeW5hbWljIC1sYycgCisgICBleHBvcnQgTElCPSdhciByY3UnIAorCisgICAuL2NvbmZpZ3VyZSAtLWJ1aWxkPWk2ODYtcGMtbGludXgtZ251ICAtLWhvc3Q9cG93ZXJwYyBcCisgICAgICAgICAgIC0tdGFyZ2V0PXBvd2VycGMtaGFyZGhhdC1saW51eC1nbnUgLS13aXRoLWVuZGlhbm5lc3M9YmlnCisKKworCisgLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtIC0gLSAtCisKK1RoZSBtaWJncm91cCBzZWN0aW9uIGlzIHRoZSBtb3N0IE9TIHNwZWNpZmljIHBhcnQgb2YgdGhlIGFnZW50LiBJdCdzIGxpa2VseQordGhhdCB5b3Ugd2lsbCBoYXZlIHRvIHJlbW92ZSBzb21lIG9mIHRoZW0uIFlvdSBqdXN0IG5lZWQgdG8gZmlndXJlIG91dCB3aGljaAorb25lcyB0byByZW1vdmUuIAorCitGb3IgZXhhbXBsZSwgYWdlbnQvbWliZ3JvdXAvbWliSUkvdGNwVGFibGUuYyBpcyBhIGNvbW1vbiBtb2R1bGUgdGhhdCBkb2Vzbid0Cit3b3JrIG9uIG5ldyBwbGF0Zm9ybXMuIFNvIGlmIGl0IGlzbid0IHdvcmtpbmcsIG9taXQgaXQgZHVyaW5nIGNvbmZpZ3VyZSwgbGlrZQorc286CisKKwkuL2NvbmZpZ3VyZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGVzPW1pYklJL3RjcFRhYmxlCisKKworQWx0ZXJuYXRpdmVseSwgeW91IGNvdWxkIHdvcmsgdGhlIG90aGVyIHdheS4gU3RhcnQgd2l0aCBhIG1pbmltYWwKK2NvbmZpZ3VyYXRpb246CisKKwkuL2NvbmZpZ3VyZSAtLWVuYWJsZS1taW5pLWFnZW50CisKK2FuZCB0aGVuIHN0YXJ0IGFkZGluZyBNSUIgbW9kdWxlcyBvbmUtYnktb25lOgorCisJLi9jb25maWd1cmUgLS1lbmFibGUtbWluaS1hZ2VudAorICAgICAgICAgICAgICAgICAgICAtLXdpdGgtbWliLW1vZHVsZXM9bWliSUkvc3lzdGVtX21pYixtaWJJSS9zeXNPUlRhYmxlCisKKworIDwvcHJlPgorCis8YSBuYW1lPSJzdGF0aWMiPjwvYT4gPGgyPlN0YXRpYyBsaW5raW5nPC9oMj4KKzxwcmU+IG1YYXVyZWxpdTogSSB3YW50IHRvIGNvbXBpbGUgdGhlIDUuMSBzbm1wdHJhcGQgYmluYXJ5IHdpdGggc3RhdGljYWxseSBsaW5rZWQgbGlicmFyaWVzLi4gQ2FuIGFueW9uZSBoZWxwIG1lIHdpdGggdGhpcz8gSXMgaXQganVzdCBhIHNpbXBsZSBjb25maWd1cmUgc3dpdGNoCityc3Rvcnk6IG1YYXVyZWxpdTogeW91IHdhbnQgc3RhdGljIHNubXAgbGlicmFyaWVzLCBvciB0b3RhbGx5IHN0YXRpYyAoc3lzdGVtIGxpYnJhcmllcyB0b28pPworbVhhdXJlbGl1OiB0b3RhbGx5IHN0YXRpYy4uIGV2ZXJ5dGhpbmcgaW4gb25lIGV4ZWN1dGFibGUKK21YYXVyZWxpdTogYWN0dWFsbHksIGhvdyBkbyBpIGRvIGJvdGggd2F5cz8KK3JzdG9yeTogZm9yIHNubXAgbGlicywgdHJ5ICdjb25maWd1cmUgLS1lbmFibGUtc2hhcmVkPW5vJy4uIHRoYXQgd29uJ3QgYnVpbGQgdGhlIHNoYXJlZCBsaWJyYXJpZXMKK3JzdG9yeTogKHRob3VnaCBpZiB5b3UgaGF2ZSBwcmV2aW91cyB2ZXJzaW9ucyBvZiBuZXQtc25tcCBsaWJyYXJpZXMgaW5zdGFsbGVkLCB0aGUgbGlua2VyIG1pZ2h0IHBpY2sgdGhvc2UgdXAgYW5kIHRyeSBhbmQgdXNlIHRoZW0pCityc3Rvcnk6IGZvciB0b3RhbGx5IHN0YXRpYywgeW91J2xsIGhhdmUgdG8gdHdlYWsgdGhlIE1ha2VmaWxlCityc3Rvcnk6IGFkZCAtQnN0YXRpYyB0byBMREZMQUdTCisKK1tub3RlOiBhY3R1YWxseSwgZm9yIHRvdGFsbHkgc3RhdGljLCAnY29uZmlndXJlIC0td2l0aC1sZGZsYWdzPS1Cc3RhdGljJ10KKyA8L3ByZT4KKworPGEgbmFtZT0icmVhZGZkcyI+PC9hPiA8aDI+cmVhZGZkczwvaDI+Cis8cHJlPiA+IGNhbiB5b3UgcGxlYXNlIHRlbGwgbWUgdGhlIG1lYW5pbmcgb2YgdGhlIHRoaXJkIGFyZ3VtZW50LiBvYnZpb3VzbHkgdGhlIAorPiBmaXJzdCBwYXJhbWV0ZXIgdG8gcmVnaXN0ZXJfcmVhZGZkIGlzIGEgZmlsZSBkZXNjcmlwdG9yIGFuZCBzZWNvbmQgaXMgdGhlIAorPiBjYWxsYmFjayBmdW5jdGlvbi4KKworQ29ycmVjdC4KK1RoZSB0aGlyZCBwYXJhbWV0ZXIgaXMgYXJiaXRyYXJ5IGRhdGEgdGhhdCB5b3UgY2FuIHNwZWNpZnkgd2hlbiB5b3UKK3JlZ2lzdGVyIHRoZSBmaWxlIGRlc2NyaXB0b3IsIGFuZCB3aWxsIHRoZW4gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjaworZnVuY3Rpb24gd2hlbiBpdCdzIGludm9rZWQuCisKKworU28gaWYgeW91IHdlcmUgbGlzdGVuaW5nIG9uIHR3byBzZXBhcmF0ZSBzb2NrZXRzLCBmb3IgdmVyeSBzaW1pbGFyCit0eXBlcyBvZiBkYXRhLCB0aGVuIHlvdSBjb3VsZCB1c2UgdGhlIHNhbWUgY2FsbGJhY2sgZm9yIGJvdGggYW5kCit1c2UgdGhpcyB0aGlyZCBwYXJhbWV0ZXIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGVtOgorCisKKwlmZDEgPSBvcGVuKCAiL3Byb2MvdHdlZWRsZWR1bSIgKTsKKwlmZDIgPSBvcGVuKCAiL3Byb2MvdHdlZWRsZWRlZSIgKTsKKworCXJlZ2lzdGVyX3JlYWRmZCggZmQxLCB3aG9fYnJva2VfdGhlX3JhdHRsZSgpLCAidHdlZWRsZWRlZSIgKTsKKwlyZWdpc3Rlcl9yZWFkZmQoIGZkMiwgd2hvX2Jyb2tlX3RoZV9yYXR0bGUoKSwgInR3ZWVkbGVkdW0iICk7CisKKwordm9pZAord2hvX2Jyb2tlX3RoZV9yYXR0bGUoIGludCBmZCwgdm9pZCAqZGF0YSApCit7CisgICAgY2hhciAqaGVfZGlkID0gKGNoYXIgKilkYXRhOworCisgICAgcHJpbnRmKCIlcyBicm9rZSB0aGUgcmF0dGxlIVxuIiwgaGVfZGlkICk7Cit9CisKKyA8L3ByZT4KKworPGEgbmFtZT0ic2hhcmluZyI+PC9hPiA8aDI+c2hhcmluZyBkYXRhPC9oMj4KKzxwcmU+IElmIHR3byBtb2R1bGVzIGFyZSBjb21waWxlZCBpbnRvIHRoZSBzYW1lIGFnZW50L3N1YmFnZW50LCB0aGVuIGp1c3QgdXNlIGEKK25vcm1hbCBDIGdsb2JhbCB2YXIuIE5vIG5lZWQgdG8gaW52b2x2ZSBuZXQtc25tcCBpbiB0aGUgcHJvY2Vzcy4KKworaWYgdGhleSBhcmUgZGlmZmVyZW50IHN1Yi1hZ2VudHMsIHlvdSBhcmUgYmV0dGVyIG9mZiB1c2luZyB0cmFkaXRpb24gSVBDCittZWNoYW5pc21zLiB0aGVyZSBpcyBubyBuZXQtc25tcCBhcGkgZm9yIHNoYXJpbmcgZGF0YSBiZXR3ZWVuIHN1YmFnZW50cy4KKworVGhhdCBzYWlkLCAqSUYqIHlvdSBvbmx5IG5lZWQgdGhlIGRhdGEgZHVyaW5nIHByb2Nlc3Npbmcgb2YgR0VUIHJlcXVlc3RzLCBvcgord2hlbiB5b3UgYXJlbid0IHByb2Nlc3NpbmcgYSByZXF1ZXN0IGF0IGFsbCwgeW91IHNlbmQgYSBzbm1wIHJlcXVlc3QgdG8gdGhlCittYXN0ZXIsIHdoaWNoIHdpbGwgcXVlcnkgdGhlIG90aGVyIHN1YmFnZW50LiBJZiB5b3UgYXJlIHByb2Nlc3NpbmcgYSBHRVQKK3JlcXVlc3QgYW5kIGFyZSBjb21waWxlZCBpbnRvIHRoZSBtYXN0ZXIsIHlvdSB3aWxsIGhhdmUgdG8gZGVsZWdhdGUgdGhlCitjdXJyZW50IHJlcXVlc3QpLgorCitJdCdzIGEgbGl0dGxlIGluZWZmaWNpZW50LCBjb21wYXJlZCB0byBkaXJlY3QgY29tbXVuaWNhdGlvbiB3L3RoZSBvdGhlcgorc3ViYWdlbnQgYW5kIGl0ICp3aWxsIG5vdCogd29yayBkdXJpbmcgc2V0IHByb2Nlc3NpbmcuCisgPC9wcmU+CisKKzxhIG5hbWU9InRva2VucyI+PC9hPiA8aDI+RGVidWcgVG9rZW5zPC9oMj4KKzxwcmU+IFNvbWUgb2YgdGhlIG1vcmUgY29tbW9uIG9uZXMgYXJlOgorCisgICBBZ2VudDogYWdlbnQsIGFnZW50eCwgZGxtb2QsIGhhbmRsZXIsIGhlbHBlciwgc25tcGQsIHRyYXAsIHRhYmxlCisgICBNSUJzOiBpbml0X21pYiwgbWliX2luaXQsIHBhcnNlLWZpbGUsIHBhcnNlLW1pYnMKKyAgIEFwcHM6IHJlYWRfY29uZmlnCisKK0FkZCB0aGVtIHRvIHlvdXIgc25tcC5jb25mIGxpa2Ugc286CisKKyAgICMgb3B0aW9uYWxseSB0dXJuIG9uIHRpbWUgc3RhbXBzCisgICBsb2dUaW1lc3RhbXAgdHJ1ZQorICAgZG9EZWJ1Z2dpbmcgMQorICAgZGVidWdUb2tlbnMgYWdlbnR4L2NvbmZpZworCitJZiB5b3UgcHV0IHRoZW0gaW4gYSBkaWZmZXJlbnQgY29uZiBmaWxlLCBsaWtlIHNubXBkLmNvbmYgb3IgbXlhcHAuY29uZiwKK3ByZWZpeCBlYWNoIHdpdGggJ1tzbm1wXScsIGxpa2Ugc286CisKKyAgIFtzbm1wXSBkb0RlYnVnZ2luZyAxCisKKworVGhpcyBsaXN0IHdhcyBnZW5lcmF0ZWQgYnkgcnVubmluZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgaW4gdGhlIG1haW4gQ1ZTIGJyYW5jaDoKKworZmluZCAuIC1uYW1lIFwiKi5jXCIgLXByaW50IHwgeGFyZ3MgZ3JlcCBERUJVR01TR1QgfCBncmVwIFwiIHwgY3V0IC1mIDIgLWRcIiB8IHNvcnQgLXUKKworYWRkCithZ2VudF9oYW5kbGVyCithZ2VudF9yZWdpc3RyeQorYWdlbnRfc2V0CithZ2VudHgKK2FnZW50eF9idWlsZAorYWdlbnR4X2J1aWxkX3ZhcmJpbmQKK2FnZW50eC9jb25maWcKK2FnZW50eC9jb25maWcvcmV0cmllcworYWdlbnR4L2NvbmZpZy90aW1lb3V0CithZ2VudHgvbWFzdGVyCithZ2VudHgvc3ViYWdlbnQKK2FnZW50eC9zdWJnYWVudAorYXNuX3JlYWxsb2MKK2F1dG9fbmxpc3QKK2J1aWxkX29pZF9ub2FsbG9jCitidWlsZF9vaWRfc2VnbWVudAorY2FsbGJhY2sKK2NhbGxiYWNrX2NsZWFyCitjaGVja19nZXRuZXh0X3Jlc3VsdHMKK2NsZWFyX25zYXBfbGlzdAorY29tcGFyZTppbmRleAorY29tcGFyZXgKK2NvbnRhaW5lcgorY29udGFpbmVyX2l0ZXJhdG9yCitjb250YWluZXJfaXRlcmF0b3I6cmVzdWx0cworY29udGFpbmVyOm51bGw6Citjb250YWluZXI6bnVsbDpmaW5kCitjb250YWluZXI6bnVsbDpmaW5kX25leHQKK2NvbnRhaW5lcjpudWxsOmZvcl9lYWNoCitjb250YWluZXI6bnVsbDpmcmVlCitjb250YWluZXI6bnVsbDpnZXRfbnVsbAorY29udGFpbmVyOm51bGw6Z2V0X251bGxfZmFjdG9yeQorY29udGFpbmVyOm51bGw6Z2V0X251bGxfbm9hbGxvYworY29udGFpbmVyOm51bGw6aW5zZXJ0Citjb250YWluZXI6bnVsbDpyZW1vdmUKK2NvbnRhaW5lcjpudWxsOnNpemUKK2NvbnRhaW5lcl9yZWdpc3RyeQorZGFlbW9uaXplCitkZWluaXRfdXNtX3Bvc3RfY29uZmlnCitkZWxheWVkX2luc3RhbmNlCitkbG1vZAorZHVtcF9ldGltZWxpc3QKK2VuY29kZV9rZXljaGFuZ2UKK2V4YW1wbGUKK2V4YW1wbGVfZGF0YV9zZXQKK2V4YW1wbGVfbm90aWZpY2F0aW9uCitleGFtcGxlX3NjYWxhcl9pbnQKK2ZpeHVwX21pYl9kaXJlY3RvcnkKK2dlbmVyYXRlX0t1CitnZW5lcmF0ZV9rdWwKK2dldF9taWJfZGlyZWN0b3J5CitoYW5kbGVyOmNhbGxpbmcKK2hhbmRsZXI6aW5qZWN0CitoYW5kbGVyOjpyZWdpc3RlcgoraGFuZGxlcl9yZWdpc3RyeQoraGFuZGxlcjpyZXR1cm5lZAoraGVhZGVyX2NvbXBsZXgKK2hlYWRlcl9jb21wbGV4X2FkZF9kYXRhCitoZWFkZXJfY29tcGxleF9kdW1wCitoZWFkZXJfY29tcGxleF9leHRyYWN0X2VudHJ5CitoZWFkZXJfY29tcGxleF9nZW5lcmF0ZV9vaWQKK2hlYWRlcl9jb21wbGV4X2dlbmVyYXRlX3Zhcm9pZAoraGVhZGVyX2NvbXBsZXhfcGFyc2Vfb2lkCitoZWFkZXJfY29tcGxleF90ZXN0CitoZWxwZXI6YmFieV9zdGVwcworaGVscGVyOmNhY2hlX2hhbmRsZXIKK2hlbHBlcjpkZWJ1ZworaGVscGVyOmluc3RhbmNlCitoZWxwZXI6bWZkCitoZWxwZXI6bnVsbAoraGVscGVyOnJlYWRfb25seQoraGVscGVyOnJvd19tZXJnZQoraGVscGVyOnNjYWxhcgoraGVscGVyOnNjYWxhcl9ncm91cAoraGVscGVyOnNlcmlhbGl6ZQoraGVscGVyOnN0YXNoX2NhY2hlCitoZWxwZXI6dGFibGUKK2hlbHBlcjp3YXRjaGVyCitoZWxwZXI6d2F0Y2hlcjpzcGlubG9jaworaGVscGVyOndhdGNoZXI6dGltZXN0YW1wCitob3N0L2hyX2RldmljZQoraG9zdC9ocl9kaXNrCitob3N0L2hyX2ZpbGVzeXMKK2hvc3QvaHJfaW5zdAoraG9zdC9ocl9uZXR3b3JrCitob3N0L2hyX3BhcnRpdGlvbgoraG9zdC9ocl9wcmludAoraG9zdC9ocl9wcm9jCitob3N0L2hyX3N0b3JhZ2UKK2hvc3QvaHJfc3dpbnN0Citob3N0L2hyX3N3cnVuCitob3N0L2hyX3N3cnVuOjpHZXROZXh0SFJfU1dSdW4KK2hvc3QvaHJfc3lzdGVtCitocl9wcm9jCitpbml0aWFsaXplX3RhYmxlX2lwQ2lkclJvdXRlVGFibGUKK2luaXRpYWxpemVfdGFibGVfbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9tdGVFdmVudFRhYmxlCitpbml0aWFsaXplX3RhYmxlX25ldFNubXBIb3N0c1RhYmxlCitpbml0aWFsaXplX3RhYmxlX25sbUxvZ1RhYmxlCitpbml0aWFsaXplX3RhYmxlX25sbUxvZ1ZhcmlhYmxlVGFibGUKK2luaXRpYWxpemVfdGFibGVfbnNNb2R1bGVUYWJsZQoraW5pdGlhbGl6ZV90YWJsZV9uc1RyYW5zYWN0aW9uVGFibGUKK2luaXRfbWliCitpbml0X3VzbQoraW5qZWN0SGFuZGxlcgora2VybmVsX3N1bm9zNQora3NtCitsY2RfZ2V0X2VuZ2luZXRpbWUKK2xjZF9nZXRfZW5naW5ldGltZV9leAorbGNkX3NldF9lbmdpbmV0aW1lCitsb2dfbm90aWZpY2F0aW9uCittZDUKK21mZAorbWliSUkvYXQKK21pYklJL2ljbXAKK21pYklJL2ludGVyZmFjZXMKK21pYklJL2lwCittaWJJSS9pcHY2CittaWJJSS9tdGFfc2VuZG1haWwuYzptdGFfc2VuZG1haWxfcGFyc2VfY29uZmlnCittaWJJSS9tdGFfc2VuZG1haWwuYzpvcGVuX3NlbmRtYWlsc3QKK21pYklJL210YV9zZW5kbWFpbC5jOnJlYWRfc2VuZG1haWxjZgorbWliSUkvc25tcF9taWIKK21pYklJL3N5c09SVGFibGUKK21pYklJL3RjcFNjYWxhcgorbWliSUkvdGNwVGFibGUKK21pYklJL3VkcFNjYWxhcgorbWliSUkvdWRwVGFibGUKK21pYklJL3ZhY21fdmFycworbWliSUkvdmFyX3JvdXRlCittaWJfaW5pdAorbXRlX2Rpc2NvCittdGVFdmVudFRhYmxlOnNlbmRfZXZlbnRzCittdGVPYmplY3RzVGFibGUKK210ZVRyaWdnZXJCb29sZWFuVGFibGUKK210ZVRyaWdnZXJEZWx0YVRhYmxlCittdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUKK210ZVRyaWdnZXJ0YWJsZQorbXRlVHJpZ2dlclRhYmxlCittdGVUcmlnZ2VyVGVzdAorbXRlVHJpZ2dlclRlc3Q6c2VuZF9tdGVfdHJhcAorbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlCituZXRzbm1wX2FhbDVwdmMKK25ldHNubXBfYWdlbnRfY2hlY2tfcGFja2V0CituZXRzbm1wX2RlcmVnaXN0ZXJfYWdlbnRfbnNhcAorbmV0c25tcF9kc19oYW5kbGVfY29uZmlnCituZXRzbm1wX2RzX3NldF9ib29sZWFuCituZXRzbm1wX2RzX3NldF9pbnQKK25ldHNubXBfZHNfc2V0X3N0cmluZworbmV0c25tcF9kc19zZXRfdm9pZAorbmV0c25tcF9kc190b2dnbGVfYm9vbGVhbgorbmV0c25tcF9pbnN0YW5jZV9jb3VudGVyMzJfaGFuZGxlcgorbmV0c25tcF9pbnN0YW5jZV9pbnRfaGFuZGxlcgorbmV0c25tcF9pbnN0YW5jZV9sb25nX2hhbmRsZXIKK25ldHNubXBfaW5zdGFuY2VfdWxvbmdfaGFuZGxlcgorbmV0c25tcF9pcHgKK25ldHNubXBfcmVnaXN0ZXJfYWdlbnRfbnNhcAorbmV0c25tcF9yZWdpc3Rlcl9taWJfdGFibGVfcm93CituZXRzbm1wX3NvY2thZGRyX2luCituZXRzbm1wX3NvY2thZGRyX2luNgorbmV0c25tcF9zb2NrYWRkcl9pcHgKK25ldHNubXBfdGFibGVfZGF0YV9zZXQKK25ldHNubXBfdGNwCituZXRzbm1wX3RjcDYKK25ldHNubXBfdWRwCituZXRzbm1wX3VkcDYKK25ldHNubXBfdWRwNl9nZXRTZWNOYW1lCituZXRzbm1wX3VkcDZfcGFyc2Vfc2VjdXJpdHkKK25ldHNubXBfdWRwX2dldFNlY05hbWUKK25ldHNubXBfdWRwX3BhcnNlX3NlY3VyaXR5CituZXRzbm1wX3VuaXgKK25ldHNubXBfdW5peF9nZXRTZWNOYW1lCituZXRzbm1wX3VuaXhfcGFyc2Vfc2VjdXJpdHkKK25ldHNubXBfdW5peF90cmFuc3BvcnQKK25ldHN0YXQ6aWYKK25vdGlmaWNhdGlvbl9sb2cKK25zQ2FjaGVTY2FsYXJzCituc0RlYnVnU2NhbGFycworb2JqZWN0X21vbml0b3IKK29sZF9hcGkKK291dHB1dAorb3ZlcnJpZGUKK3BhcnNlLWZpbGUKK3BhcnNlLW1pYnMKK3BhcnNlX29pZAorcGFyc2Vfb2lkX2luZGV4ZXMKK3BlcmwKK3Byb2MKK3Byb3h5Citwcm94eV9hcmdzCitwcm94eV9jb25maWcKK3Byb3h5X2luaXQKK3JlYWRfY29uZmlnCityZWFkX2NvbmZpZ19jb3B5X3dvcmQKK3JlYWRfY29uZmlnX2ZpbGVzCityZWFkX2NvbmZpZzpmb3J3YXJkCityZWFkX2NvbmZpZzppbml0bWliCityZWFkX2NvbmZpZ19yZWFkX2RhdGEKK3JlYWRfY29uZmlnX3JlYWRfbWVtb3J5CityZWFkX2NvbmZpZ19yZWFkX29iamlkCityZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZworcmVhZF9jb25maWdfc3RvcmVfZGF0YV9wcmVmaXgKK3JlYWRfY29uZmlnOnRyYXBoYW5kbGUKK3JlZ2lzdGVyX2V4Y2VwdGZkCityZWdpc3Rlcl9pbmRleAorcmVnaXN0ZXJfbWliCityZWdpc3Rlcl9yZWFkZmQKK3JlZ2lzdGVyX3NpZ25hbAorcmVnaXN0ZXJfd3JpdGVmZAorcmVwb3J0CityZXN1bHRzCitzY2FsYXJfaW50CitzY2FwaQorc2NvcGVkUERVX3BhcnNlCitzZW5kX25vdGlmaWNhdGlvbnMKK3Nlc3NfYXN5bmNfc2VuZAorX3Nlc3Nfb3Blbgorc2Vzc19wcm9jZXNzX3BhY2tldAorc2Vzc19yZWFkCitzZXNzX3Jlc2VuZAorc2Vzc19zZWxlY3QKK3NldHRpbmcgYXV0aCB0eXBlOiBcCitzaWduYWwKK3NtdXgKK3NtdXhfY29uZgorc211eF9pbml0CitzbXV4L3NubXBfYmdwCitzbXV4L3NubXBfb3NwZgorc211eC9zbm1wX3JpcDIKK3NubXBfYWdlbnQKK3NubXBfYWxhcm0KK3NubXBfYXBpCitzbm1wX2J1aWxkCitzbm1wX2NsZWFuX3BlcnNpc3RlbnQKK3NubXBfY29uZmlnCitzbm1wZAorc25tcGQvbWFpbgorc25tcGRfcG9ydHMKK3NubXBkX3JlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgorc25tcGQvc2VsZWN0Citzbm1wRW5naW5lCitzbm1wTm90aWZ5RmlsdGVyUHJvZmlsZVRhYmxlCitzbm1wTm90aWZ5RmlsdGVyVGFibGUKK3NubXBOb3RpZnlUYWJsZQorc25tcF9wYXJzZQorc25tcF9wYXJzZV9hcmdzCitzbm1wX3BhcnNlX29pZAorc25tcF9wZHVfcmVhbGxvY19yYnVpbGQKK3NubXBfc2F2ZV9wZXJzaXN0ZW50Citzbm1wX3NlbmQKK3NubXBfc2Vzc19hZGQKK3NubXBfc2Vzc19jbG9zZQorc25tcF9zZXNzX29wZW4KK3NubXBTZXRTZXJpYWxObworc25tcF9zdG9yZQorc25tcFRhcmdldEFkZHJFbnRyeQorc25tcFRhcmdldFBhcmFtc0VudHJ5Citzbm1wdHJhcGQKK3NubXB2Mworc25tcHYzX3BhcnNlCitzcHJpbnRfYnlfdHlwZQorc3Rhc2hfY2FjaGUKK3N1YnRyZWUKK3RhYmxlX2FycmF5Cit0YWJsZV9hcnJheTpnZXQKK3RhYmxlX2FycmF5Omdyb3VwCit0YWJsZV9kYXRhX2FkZF9kYXRhCit0YWJsZV9pdGVyYXRvcgordGFibGVfc2V0X2FkZF9yb3cKK3Rha2Vfc25hcHNob3QKK3RhcmdldF9jb3VudGVycwordGFyZ2V0X3Nlc3Npb25zCit0ZG9tYWluCit0ZXN0aGFuZGxlcgordGVzdGhhbmRsZXJfdGFibGUKK3RyYW5zcG9ydF9jYWxsYmFjawordHJhcAordHJhcHNlc3MKK3R1bm5lbAordWNkRGVtb1B1YmxpYwordWNkLXNubXAvZGlzawordWNkLXNubXAvZGlzazoKK3VjZC1zbm1wL21lbW9yeQordWNkLXNubXAvcGFzcwordWNkLXNubXAvcGFzc19wZXJzaXN0Cit1Y2Qtc25tcC9wcm9jCit1Y2Qtc25tcC92ZXJzaW9uaW5mbwordWNkLXNubXAvdm1zdGF0X2FpeDQuYzp1cGRhdGVfc3RhdHMKK3VjZC1zbm1wL3Ztc3RhdF9keW5peC5jOnVwZGF0ZV9zdGF0cwordWNkLXNubXAvdm1zdGF0X2hwdXguYzp1cGRhdGVfc3RhdHMKK3VjZC1zbm1wL3Ztc3RhdF9zb2xhcmlzMi5jOnVwZGF0ZV9zdGF0cwordW5saW5rX3RyZWUKK3VubG9hZC1taWIKK3VucmVnaXN0ZXJfZXhjZXB0ZmQKK3VucmVnaXN0ZXJfcmVhZGZkCit1bnJlZ2lzdGVyX3NpZ25hbAordW5yZWdpc3Rlcl93cml0ZWZkCit1c20KK3VzbVVzZXIKK3V0aWxfZnVuY3MKK3ZhY206Y2hlY2tTdWJ0cmVlCit2YWNtOmdldFZpZXcKK3ZlcnNpb25pbmZvCit2bXN0YXQKK3l5eWluamVjdEhhbmRsZXIKKyA8L3ByZT4KKworPGEgbmFtZT0ic3RlcHMiPjwvYT4gPGgyPkJhYnkgU3RlcHMgRmxvdzwvaDI+Cis8cHJlPiAgICAgLyoqCisgICAgICogQmFieSBTdGVwcyBGbG93IGRpYWdyYW0gKHJldiAyMDAzLjA5LjI5LjEzMzApCisgICAgICoKKyAgICAgKiBMZWdlbmQ6ICh0ZXN0KSBbb3B0aW9uYWxdICZsdDtyZXF1aXJlZD4KKyAgICAgKgorICAgICAqIE9MRCAgICAgICAgICAgICAgTkVXCisgICAgICogPT09PT09PT0gID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgICAgICogKysrICAgICAgICAgICBbcHJlX3JlcXVlc3RdCisgICAgICogICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgIChyb3cgZXhpc3RzPykgTiAtPihyb3dfY3JlYXRpb24pIE4gPi0tPisKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IFkgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCZsdDstLS0tLS0tLS0tLS0tLS0tLS0rICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICBcfC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXHwvCisgICAgICogUkVTRVJWRTEgICZsdDtvYmplY3Rfc3ludGF4X2NoZWNrcz4gICAgICAgICAgICAgICAgICAgICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAorICAgICAqICAgICAgICAgICAgICAgICAgKGVycj8pICBZID4tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0+KworICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfC8KKyAgICAgKiArKysgICAgICAgICAgKHJvdyBleGlzdGVkPykgTiAtLS0+W3Jvd19jcmVhdGlvbl0gICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCZsdDstLS0tLS0tLS0tLS0tLU4gKGVycj8pICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8IFkgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICBbcm93X2NyZWF0aW9uX2NsZWFudXBdLS0tPisKKyAgICAgKiAgICAgICAgICAgICAgICAgICBcfC8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiBSRVNFUlZFUjIgICAgIFt1bmRvX3NldHVwXSAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgIChlcnI/KSAgWSAtLS0+LS0tLS0tLS0+LS0tLS0tLS0tPisgIHwKKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgXHwvCisgICAgICogQUNUSU9OICAgICAgICAmbHQ7c2V0X3ZhbHVlcz4gICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAoZXJyPykgIFkgPi0tLS0tLS0tLSsgICAgICAgICAgIFx8LyB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8ICB8CisgICAgICogKysrICAgICAgICBbY29uc2lzdGVuY3lfY2hlY2tzXSAgICAgIHwgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgXHwvICAgICAgICAgICB8ICB8CisgICAgICogVU5ETyAgICAgICAgICAgICAoZXJyPykgIFkgPi0tLS0tLS1bdW5kb10tLS0tLS0tLT4rICB8CisgICAgICogICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICogICAgICAgICAgICBbcmV2ZXJzaWJsZV9jb21taXRdICAgICAgICAgICAgICAgICAgICB8ICB8CisgICAgICogKysrICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFx8LworICAgICAqICAgICAgICAgICAgICAgICAgKGVycj8pICBZID4tLVtyZXZlcnNlX2NvbW1pdF0gICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgfAorICAgICAqIENPTU1JVCAgICAgICAgJmx0O2ZpbmFsX2NvbW1pdD4gICAgICB8ICAgICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgKGVycj8pICBZID4tLVtsb2cgbXNnXSAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgfCAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICBcfC8gfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICZsdDstLS0tLS0tLS0tLSZsdDsrLS0tJmx0Oy0tLS0tLS0tLS0tKyAgfAorICAgICAqICAgICAgICAgICAgICAgICAgIFx8LyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqIEZSRUUgICAgICAgICAgW3VuZG9fY2xlYW51cF0gICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAqICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcfC8KKyAgICAgKiAgICAgICAgICAgICAgICAgICAgfCZsdDstLS0tLS0tLS0tLS0tLSZsdDstLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAgKiAgICAgICAgICAgICAgICAgICBcfC8KKyAgICAgKiAgICAgICAgICAgICAgIFtwb3N0X3JlcXVlc3RdCisgICAgICovCisgPC9wcmU+CisKKzxocj4KKzx0YWJsZSB3aWR0aD0iMTAwJSI+Cis8dHI+PHRkIGFsaWduPWxlZnQ+Cis8YnI+UGFnZQorPCEtLSBDcmVhdGVkOiBUaHUgSnVsIDI0IDEwOjA4OjI2IE1FVCBEU1QgMTk5NyAtLT4KKzwhLS0gaGhtdHMgc3RhcnQgLS0+CitMYXN0IG1vZGlmaWVkOiBXZWQgTWFyIDEyIDEzOjQ5OjMyIFBTVCAyMDAzCis8IS0tIGhobXRzIGVuZCAtLT4KKzwvdGQ+PHRkIGFsaWduPXJpZ2h0PgorPGJyPlBvd2VyZWQgYnk6Cis8QSBocmVmPSJodHRwOi8vc291cmNlZm9yZ2UubmV0Ij4KKyAgICAgIDxJTUcgc3JjPSJodHRwOi8vc291cmNlZm9yZ2UubmV0L3NmbG9nby5waHA/Z3JvdXBfaWQ9MTI2OTQmYW1wO3R5cGU9MSIgd2lkdGg9Ijg4IiBoZWlnaHQ9IjMxIiBib3JkZXI9IjAiIGFsdD0iU291cmNlRm9yZ2UgTG9nbyI+PC9BPgorCis8L3RkPjwvdHI+PC90YWJsZT4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9odG1saGVscC9GQVEuaHRtbCBiL3dpbjMyL2Rpc3QvaHRtbGhlbHAvRkFRLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTYzNWFjZQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL2Rpc3QvaHRtbGhlbHAvRkFRLmh0bWwKQEAgLTAsMCArMSwzMzc1IEBACis8Ym9keSBiZ2NvbG9yPSIjZmZmZmZmIiBiYWNrZ3JvdW5kPSJ1Y2Qtc25tcC1iZzMuZ2lmIj4KKzx0aXRsZT5ORVQtU05NUCBGQVE8L3RpdGxlPgorPGRpdiBhbGlnbj1jZW50ZXI+Cis8aDE+RnJlcXVlbnRseSBBc2tlZCBRdWVzdGlvbnMgKEZBUSkgZm9yIHRoZSBOZXQtU05NUCBwYWNrYWdlPC9oMT4KK0ZBUSBNYWludGFpbmVyOiBEYXZlIFNoaWVsZDxicj4KK0VtYWlsOiA8YSBocmVmPSJtYWlsdG86bmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCI+bmV0LXNubXAtY29kZXJzQGxpc3Quc291cmNlZm9yZ2UubmV0PC9hPjxicj4KKzwvZGl2PgorPGhyPgorPGgyPlRhYmxlIG9mIENvbnRlbnRzPC9oMj4KKzwvdWw+PGxpPjxiPkdFTkVSQUw8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjV2hhdF9pc19pdF8iPldoYXQgaXMgaXQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hlcmVfY2FuX0lfZ2V0X2l0XyI+V2hlcmUgY2FuIEkgZ2V0IGl0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfZG9jdW1lbnRhdGlvbl9pc19hdmFpbGFibGVfIj5XaGF0IGRvY3VtZW50YXRpb24gaXMgYXZhaWxhYmxlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0FyZV90aGVyZV9iaW5hcmllc19hdmFpbGFibGVfIj5BcmUgdGhlcmUgYmluYXJpZXMgYXZhaWxhYmxlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX1VDRF9TTk1QX2FuZF9OZXRfU05NUF8iPldoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIFVDRC1TTk1QIGFuZCBOZXQtU05NUD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X29wZXJhdGluZ19zeXN0ZW1zX2RvZXNfaXRfcnVuX29uXyI+V2hhdCBvcGVyYXRpbmcgc3lzdGVtcyBkb2VzIGl0IHJ1biBvbj88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2hhcHBlbnNfaWZfbWluZV9pc25fdF9saXN0ZWRfIj5XaGF0IGhhcHBlbnMgaWYgbWluZSBpc24ndCBsaXN0ZWQ/PC9hPgorPGxpPiA8YSBocmVmPSIjRG9lc19pdF9ydW5fb25fV2luZG93c18iPkRvZXMgaXQgcnVuIG9uIFdpbmRvd3M/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfZmluZF9vdXRfYWJvdXRfbmV3X3JlbGVhc2VzXyI+SG93IGRvIEkgZmluZCBvdXQgYWJvdXQgbmV3IHJlbGVhc2VzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9maW5kX291dF93aGF0X290aGVyX3Blb3BsZV9hcmVfZG9pbmdfIj5Ib3cgY2FuIEkgZmluZCBvdXQgd2hhdCBvdGhlciBwZW9wbGUgYXJlIGRvaW5nPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX3N1Ym1pdF9hX3BhdGNoX29yX2J1Z19yZXBvcnRfIj5Ib3cgZG8gSSBzdWJtaXQgYSBwYXRjaCBvciBidWcgcmVwb3J0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0Nhbl9JX3JldXNlX3RoZV9jb2RlX2luX215X2NvbW1lcmNpYWxfYXBwbGljYXRpb25fIj5DYW4gSSByZXVzZSB0aGUgY29kZSBpbiBteSBjb21tZXJjaWFsIGFwcGxpY2F0aW9uPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX1NOTVB2X19fU05NUHZfX2FuZF9TTk1Qdl9fIj5XaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBTTk1QdjEsIFNOTVB2MiBhbmQgU05NUHYzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfYXJlX2FsbF90aGVzZV9kaWZmZXJlbnRfU05NUHZfX3NfYW55d2F5XyI+V2hhdCBhcmUgYWxsIHRoZXNlIGRpZmZlcmVudCBTTk1QdjIncyBhbnl3YXk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hpY2hfdmVyc2lvbnNfb2ZfU05NUF9hcmVfc3VwcG9ydGVkX2luX3RoaXNfcGFja2FnZV8iPldoaWNoIHZlcnNpb25zIG9mIFNOTVAgYXJlIHN1cHBvcnRlZCBpbiB0aGlzIHBhY2thZ2U/PC9hPgorPGxpPiA8YSBocmVmPSIjQ2FuX0lfdXNlX1NOTVB2X19yZXF1ZXN0c193aXRoX2FuX1NOTVB2X19NSUJfX29yX3ZpY2VfdmVyc2FfXyI+Q2FuIEkgdXNlIFNOTVB2MSByZXF1ZXN0cyB3aXRoIGFuIFNOTVB2MiBNSUIgKG9yIHZpY2UgdmVyc2EpPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doZXJlX2Nhbl9JX2ZpbmRfbW9yZV9pbmZvcm1hdGlvbl9hYm91dF9uZXR3b3JrX21hbmFnZW1lbnRfIj5XaGVyZSBjYW4gSSBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbmV0d29yayBtYW5hZ2VtZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lzX3VjZF9zbm1wX3RocmVhZF9zYWZlXyI+SXMgdWNkLXNubXAgdGhyZWFkIHNhZmU/PC9hPgorPC91bD48bGk+PGI+QVBQTElDQVRJT05TPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2FkZF9hX01JQl8iPkhvdyBkbyBJIGFkZCBhIE1JQj88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfZG9fSV9hZGRfYV9NSUJfdG9fdGhlX3Rvb2xzXyI+SG93IGRvIEkgYWRkIGEgTUlCIHRvIHRoZSB0b29scz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfY2FuX3RfSV9zZWVfYW55dGhpbmdfZnJvbV90aGVfYWdlbnRfIj5XaHkgY2FuJ3QgSSBzZWUgYW55dGhpbmcgZnJvbSB0aGUgYWdlbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2Nhbl90X0lfc2VlX3ZhbHVlc19pbl90aGVfX0lOU0VSVF9FTlRFUlBSSVNFX0hFUkVfX3RyZWVfIj5XaHkgY2FuJ3QgSSBzZWUgdmFsdWVzIGluIHRoZSA8SU5TRVJUIEVOVEVSUFJJU0UgSEVSRT4gdHJlZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNSZXF1ZXN0c19hbHdheXNfc2VlbV90b190aW1lb3V0X19hbmRfZG9uX3RfZ2l2ZV9tZV9hbnl0aGluZ19iYWNrX19fV2h5XyI+UmVxdWVzdHMgYWx3YXlzIHNlZW0gdG8gdGltZW91dCwgYW5kIGRvbid0IGdpdmUgbWUgYW55dGhpbmcgYmFjay4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX2Nhbl9zZWVfdGhlX3N5c3RlbV9ncm91cF9fYnV0X25vdGhpbmdfZWxzZV9fX1doeV8iPkkgY2FuIHNlZSB0aGUgc3lzdGVtIGdyb3VwLCBidXQgbm90aGluZyBlbHNlLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9hZ2VudF93b3JrZWRfZm9yX2Ffd2hpbGVfX3RoZW5fc3RvcHBlZF9yZXNwb25kaW5nX19fV2h5XyI+VGhlIGFnZW50IHdvcmtlZCBmb3IgYSB3aGlsZSwgdGhlbiBzdG9wcGVkIHJlc3BvbmRpbmcuICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjUmVxdWVzdGluZ19hbl9vYmplY3RfZmFpbHNfd2l0aF9fVW5rbm93bl9PYmplY3RfSWRlbnRpZmllcl9fX1doeV8iPlJlcXVlc3RpbmcgYW4gb2JqZWN0IGZhaWxzIHdpdGggIlVua25vd24gT2JqZWN0IElkZW50aWZpZXIiICBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvX0lfZ2V0X19ub1N1Y2hOYW1lX193aGVuX2Fza2luZ19mb3JfX3N5c1VwVGltZV9fX29yX3NpbWlsYXJfXyI+V2h5IGRvIEkgZ2V0ICJub1N1Y2hOYW1lIiB3aGVuIGFza2luZyBmb3IgInN5c1VwVGltZSIgKG9yIHNpbWlsYXIpPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb19JX3NvbWV0aW1lc19nZXRfX0VuZF9vZl9NSUJfX3doZW5fd2Fsa2luZ19hX3RyZWVfX2FuZF9zb21ldGltZXNfbm90XyI+V2h5IGRvIEkgc29tZXRpbWVzIGdldCAiRW5kIG9mIE1JQiIgd2hlbiB3YWxraW5nIGEgdHJlZSwgYW5kIHNvbWV0aW1lcyBub3Q/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9jYW5ub3Rfc2V0X2FueV92YXJpYWJsZXNfaW5fdGhlX01JQl8iPkkgY2Fubm90IHNldCBhbnkgdmFyaWFibGVzIGluIHRoZSBNSUIuPC9hPgorPGxpPiA8YSBocmVmPSIjVmFyaWFibGVzX3NlZW1fdG9fZGlzYXBwZWFyX3doZW5fSV90cnlfdG9fc2V0X3RoZW1fX19XaHlfIj5WYXJpYWJsZXMgc2VlbSB0byBkaXNhcHBlYXIgd2hlbiBJIHRyeSB0byBzZXQgdGhlbS4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX3N0aWxsX2Nhbl90X2NoYW5nZV9zeXNMb2NhdGlvbl9fdGhvdWdoX3RoZV9hY2Nlc3Nfc2V0dGluZ3NfYWxsb3ciPkkgc3RpbGwgY2FuJ3QgY2hhbmdlIHN5c0xvY2F0aW9uLCB0aG91Z2ggdGhlIGFjY2VzcyBzZXR0aW5ncyBhbGxvdzwvYT4KKzxhIGhyZWY9IiNJX3N0aWxsX2Nhbl90X2NoYW5nZV9zeXNMb2NhdGlvbl9fdGhvdWdoX3RoZV9hY2Nlc3Nfc2V0dGluZ3NfYWxsb3ciPiAgICAgICBpdC4gIFdoeSBub3Q/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9nZXRfYW5fZXJyb3Jfd2hlbl90cnlpbmdfdG9fc2V0X2FfbmVnYXRpdmVfdmFsdWVfX193aHlfIj5JIGdldCBhbiBlcnJvciB3aGVuIHRyeWluZyB0byBzZXQgYSBuZWdhdGl2ZSB2YWx1ZSAtIHdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX2dldF9hbl9lcnJvcl93aGVuX3RyeWluZ190b19nZXRfYV9zdHJpbmdfaW5kZXhlZF90YWJsZV92YWx1ZV9fX3doeV8iPkkgZ2V0IGFuIGVycm9yIHdoZW4gdHJ5aW5nIHRvIGdldCBhIHN0cmluZy1pbmRleGVkIHRhYmxlIHZhbHVlIC0gd2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX3NlbmRfdHJhcHNfYW5kX25vdGlmaWNhdGlvbnNfIj5Ib3cgZG8gSSBzZW5kIHRyYXBzIGFuZCBub3RpZmljYXRpb25zPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2hhbmRsZV90cmFwc19hbmRfbm90aWZpY2F0aW9uc18iPkhvdyBkbyBJIGhhbmRsZSB0cmFwcyBhbmQgbm90aWZpY2F0aW9ucz88L2E+Cis8bGk+IDxhIGhyZWY9IiNNeV90cmFwaGFuZGxlcl9zY3JpcHRfZG9lc25fdF93b3JrX3doZW5fcnVuX2xpa2VfdGhpc19fX3doeV9ub3RfIj5NeSB0cmFwaGFuZGxlciBzY3JpcHQgZG9lc24ndCB3b3JrIHdoZW4gcnVuIGxpa2UgdGhpcyAtIHdoeSBub3Q/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX3VjZFNodXRkb3duX3RyYXBfT0lEX3JlY2VpdmVkX2J5X215X21hbmFnZXJfaXNfd3JvbmdfX1doeV8iPlRoZSB1Y2RTaHV0ZG93biB0cmFwIE9JRCByZWNlaXZlZCBieSBteSBtYW5hZ2VyIGlzIHdyb25nLiBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvZXNfc25tcHRyYXBkX2NvbXBsYWluX2Fib3V0X0FnZW50WF8iPldoeSBkb2VzIHNubXB0cmFwZCBjb21wbGFpbiBhYm91dCBBZ2VudFg/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfdXNlX1NOTVB2X18iPkhvdyBkbyBJIHVzZSBTTk1QdjM/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2JpZ19jYW5fYW5fU05NUF9yZXF1ZXN0X19vcl9yZXBseV9fYmVfIj5Ib3cgYmlnIGNhbiBhbiBTTk1QIHJlcXVlc3QgKG9yIHJlcGx5KSBiZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfbW9uaXRvcl9teV9zeXN0ZW1zX19kaXNrX19tZW1vcnlfX2V0Y19fIj5Ib3cgY2FuIEkgbW9uaXRvciBteSBzeXN0ZW1zIChkaXNrLCBtZW1vcnksIGV0Yyk/PC9hPgorPGxpPiA8YSBocmVmPSIjQXBwbGljYXRpb25zX2NvbXBsYWluX2Fib3V0X2VudHJpZXNfaW5feW91cl9leGFtcGxlX19zbm1wX2NvbmZfX2ZpbGVfX19XaHlfIj5BcHBsaWNhdGlvbnMgY29tcGxhaW4gYWJvdXQgZW50cmllcyBpbiB5b3VyIGV4YW1wbGUgJ3NubXAuY29uZicgZmlsZS4gIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNPS19fd2hhdF9zaG91bGRfSV9wdXRfaW5fc25tcF9jb25mXyI+T0ssIHdoYXQgc2hvdWxkIEkgcHV0IGluIHNubXAuY29uZj88L2E+Cis8L3VsPjxsaT48Yj5QRVJMPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI1doZXJlX2Nhbl9JX2dldF90aGVfcGVybF9TTk1QX3BhY2thZ2VfIj5XaGVyZSBjYW4gSSBnZXQgdGhlIHBlcmwgU05NUCBwYWNrYWdlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2luc3RhbGxfdGhlX1BlcmxfU05NUF9tb2R1bGVzXyI+SG93IGRvIEkgaW5zdGFsbCB0aGUgUGVybCBTTk1QIG1vZHVsZXM/PC9hPgorPGxpPiA8YSBocmVmPSIjQnV0X2NvbXBpbGluZ190aGlzX2ZhaWxzX19XaHlfIj5CdXQgY29tcGlsaW5nIHRoaXMgZmFpbHMhIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNDb21waWxpbmdfdGhlX3BlcmxfbW9kdWxlX3dvcmtzX09LX19idXRfX21ha2VfdGVzdF9fZmFpbHNfX1doeV8iPkNvbXBpbGluZyB0aGUgcGVybCBtb2R1bGUgd29ya3MgT0ssIGJ1dCAnbWFrZSB0ZXN0JyBmYWlscy4gV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9wZXJsX19tYWtlX3Rlc3RfX2ZhaWxzX29uX3RoZV9PSURfdGVzdHNfX0lzX2l0X3NhZmVfdG9fY29udGludWVfIj5UaGUgcGVybCAnbWFrZSB0ZXN0JyBmYWlscyBvbiB0aGUgT0lEIHRlc3RzLiBJcyBpdCBzYWZlIHRvIGNvbnRpbnVlPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV90cnlpbmdfdG9fdXNlX21pYl9jX19vcl90a21pYl9fYW5kX2l0X2Nhbl90X2xvY2F0ZV9TTk1QX3BtXyI+SSdtIHRyeWluZyB0byB1c2UgbWliMmMgKG9yIHRrbWliKSBhbmQgaXQgY2FuJ3QgbG9jYXRlIFNOTVAucG0/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX3RyeWluZ190b191c2VfbWliX2NfX29yX3RrbWliX19hbmRfaXRfY2FuX3RfbG9hZF9TTk1QX3NvXyI+SSdtIHRyeWluZyB0byB1c2UgbWliMmMgKG9yIHRrbWliKSBhbmQgaXQgY2FuJ3QgbG9hZCBTTk1QLnNvPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV90cnlpbmdfdG9fdXNlX3RrbWliX2FuZF9pdF9jYW5fdF9sb2NhdGVfVGtfcG1fIj5JJ20gdHJ5aW5nIHRvIHVzZSB0a21pYiBhbmQgaXQgY2FuJ3QgbG9jYXRlIFRrLnBtPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfdmVfZ290X2FfcHJvYmxlbV93aXRoX3RoZV9OZXRfU05NUF9tb2R1bGVfX19DYW5feW91X2hlbHBfIj5JJ3ZlIGdvdCBhIHByb2JsZW0gd2l0aCB0aGUgTmV0LVNOTVAgbW9kdWxlLiAgQ2FuIHlvdSBoZWxwPzwvYT4KKzwvdWw+PGxpPjxiPk1JQlM8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjV2hlcmVfY2FuX0lfZmluZF9hX01JQl9jb21waWxlcl8iPldoZXJlIGNhbiBJIGZpbmQgYSBNSUIgY29tcGlsZXI/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9jYW5fdF9sb2FkX2FueV9vZl90aGVfbWliX2ZpbGVzX19hbmRfdGhleV9zZWVtX3RvX2JlX21pc3NpbmciPkkgY2FuJ3QgbG9hZCBhbnkgb2YgdGhlIG1pYiBmaWxlcywgYW5kIHRoZXkgc2VlbSB0byBiZSBtaXNzaW5nPC9hPgorPGEgaHJlZj0iI0lfY2FuX3RfbG9hZF9hbnlfb2ZfdGhlX21pYl9maWxlc19fYW5kX3RoZXlfc2VlbV90b19iZV9taXNzaW5nIj4gICAgICAgdGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBmaWxlbmFtZS4gIFdoYXQncyBoYXBwZW5pbmc/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2FyZW5fdF9teV9taWJfZmlsZXNfYmVpbmdfcmVhZF9pbl8iPldoeSBhcmVuJ3QgbXkgbWliIGZpbGVzIGJlaW5nIHJlYWQgaW4/PC9hPgorPGxpPiA8YSBocmVmPSIjSV9tX2dldHRpbmdfYW5zd2Vyc19fYnV0X3RoZXlfcmVfYWxsX251bWJlcnNfX1doeV8iPkknbSBnZXR0aW5nIGFuc3dlcnMsIGJ1dCB0aGV5J3JlIGFsbCBudW1iZXJzLiBXaHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9kb2VzX19DYW5ub3RfZmluZF9tb2R1bGVfX1hYWF9NSUJfX19tZWFuXyI+V2hhdCBkb2VzICJDYW5ub3QgZmluZCBtb2R1bGUgKFhYWC1NSUIpIiBtZWFuPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfYWJvdXRfX3VubGlua2VkX09JRF9fIj5XaGF0IGFib3V0ICJ1bmxpbmtlZCBPSUQiPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9wYXJzZXJfZG9lc25fdF9oYW5kbGVfY29tbWVudHNfcHJvcGVybHlfX1doeV9ub3RfIj5UaGUgcGFyc2VyIGRvZXNuJ3QgaGFuZGxlIGNvbW1lbnRzIHByb3Blcmx5LiBXaHkgbm90PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX3JlcGxhY2VfTUlCX3ZhbHVlc193aXRoX25ld19vbmVzXyI+SG93IGRvIEkgcmVwbGFjZSBNSUIgdmFsdWVzIHdpdGggbmV3IG9uZXM/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX2dldF9tb3JlX2luZm9ybWF0aW9uX2Fib3V0X3RoZXNlX01JQl9maWxlX3Byb2JsZW1zXyI+SG93IGNhbiBJIGdldCBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZXNlIE1JQiBmaWxlIHByb2JsZW1zPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfc190aGlzX2Fib3V0X190b29fbWFueV9pbXBvcnRlZF9zeW1ib2xzX18iPldoYXQncyB0aGlzIGFib3V0ICJ0b28gbWFueSBpbXBvcnRlZCBzeW1ib2xzIj88L2E+Cis8L3VsPjxsaT48Yj5BR0VOVDwvYj48dWw+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X01JQnNfYXJlX3N1cHBvcnRlZF8iPldoYXQgTUlCcyBhcmUgc3VwcG9ydGVkPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfcHJvdG9jb2xzX2FyZV9zdXBwb3J0ZWRfIj5XaGF0IHByb3RvY29scyBhcmUgc3VwcG9ydGVkPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2NvbmZpZ3VyZV90aGVfYWdlbnRfIj5Ib3cgZG8gSSBjb25maWd1cmUgdGhlIGFnZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2FkZF9hX01JQl90b190aGVfYWdlbnRfIj5Ib3cgZG8gSSBhZGQgYSBNSUIgdG8gdGhlIGFnZW50PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX19leGVjX19fX3NoX19hbmRfX3Bhc3NfXyI+V2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ2V4ZWMnLCAnc2gnIGFuZCAncGFzcyc/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fQWdlbnRYX19TTVVYX2FuZF9wcm94aWVkX1NOTVBfIj5XaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBBZ2VudFgsIFNNVVggYW5kIHByb3hpZWQgU05NUD88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGF0X2Fib3V0X19kbG1vZF9fX193aGF0X3NfdGhhdF9hYm91dF8iPldoYXQgYWJvdXQgJ2RsbW9kJyAtIHdoYXQncyB0aGF0IGFib3V0PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doaWNoX3Nob3VsZF9JX3VzZV8iPldoaWNoIHNob3VsZCBJIHVzZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNDYW5fSV91c2VfQWdlbnRYX3doZW5fcnVubmluZ191bmRlcl9XaW5kb3dzXyI+Q2FuIEkgdXNlIEFnZW50WCB3aGVuIHJ1bm5pbmcgdW5kZXIgV2luZG93cz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfcnVuX0FnZW50WF93aXRoX2FfZGlmZmVyZW50X3NvY2tldF9hZGRyZXNzXyI+SG93IGNhbiBJIHJ1biBBZ2VudFggd2l0aCBhIGRpZmZlcmVudCBzb2NrZXQgYWRkcmVzcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfY29tYmluZV90d29fY29waWVzX29mX3RoZV9fbWliX19fdHJlZV9mcm9tX3NlcGFyYXRlX3N1YmFnZW50c18iPkhvdyBjYW4gSSBjb21iaW5lIHR3byBjb3BpZXMgb2YgdGhlICdtaWIyJyB0cmVlIGZyb20gc2VwYXJhdGUgc3ViYWdlbnRzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfdHJhcHNfYXJlX3NlbnRfYnlfdGhlX2FnZW50XyI+V2hhdCB0cmFwcyBhcmUgc2VudCBieSB0aGUgYWdlbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hlcmVfYXJlX3RoZXNlX3RyYXBzX3NlbnRfdG9fIj5XaGVyZSBhcmUgdGhlc2UgdHJhcHMgc2VudCB0bz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfc2VuZF9hX3BhcnRpY3VsYXJfdHJhcF90b19zZWxlY3RlZF9kZXN0aW5hdGlvbnNfIj5Ib3cgY2FuIEkgc2VuZCBhIHBhcnRpY3VsYXIgdHJhcCB0byBzZWxlY3RlZCBkZXN0aW5hdGlvbnM/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvZXNfY2FsbGluZ19fc2VuZF92X3RyYXBfX2dlbmVyYXRlX2FuX1NOTVB2X190cmFwX19vcl92aWNlX3ZlcnNhX18iPldoeSBkb2VzIGNhbGxpbmcgJ3NlbmRfdjJ0cmFwJyBnZW5lcmF0ZSBhbiBTTk1QdjEgdHJhcCAob3IgdmljZSB2ZXJzYSk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hlbl9JX3J1bl90aGVfYWdlbnRfaXRfcnVuc19hbmRfdGhlbl9xdWl0c193aXRob3V0X3N0YXlpbmdfYXJvdW5kX19XaHlfIj5XaGVuIEkgcnVuIHRoZSBhZ2VudCBpdCBydW5zIGFuZCB0aGVuIHF1aXRzIHdpdGhvdXQgc3RheWluZyBhcm91bmQuIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNBZnRlcl9hX3doaWxlX3RoZV9hZ2VudF9zdG9wc19yZXNwb25kaW5nX19hbmRfc3RhcnRzX2VhdGluZ19DUFVfdGltZV9fX1doeV8iPkFmdGVyIGEgd2hpbGUgdGhlIGFnZW50IHN0b3BzIHJlc3BvbmRpbmcsIGFuZCBzdGFydHMgZWF0aW5nIENQVSB0aW1lLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19jYW5fSV9zdG9wX290aGVyX3Blb3BsZV9nZXR0aW5nX2F0X215X2FnZW50XyI+SG93IGNhbiBJIHN0b3Agb3RoZXIgcGVvcGxlIGdldHRpbmcgYXQgbXkgYWdlbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX2xpc3Rlbl9vbl9qdXN0X29uZV9wYXJ0aWN1bGFyX2ludGVyZmFjZV8iPkhvdyBjYW4gSSBsaXN0ZW4gb24ganVzdCBvbmUgcGFydGljdWxhciBpbnRlcmZhY2U/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfY29uZmlndXJlX2FjY2Vzc19jb250cm9sXyI+SG93IGRvIEkgY29uZmlndXJlIGFjY2VzcyBjb250cm9sPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfZG9uX3RfdW5kZXJzdGFuZF90aGVfbmV3X2FjY2Vzc19jb250cm9sX3N0dWZmX19fd2hhdF9kb2VzX2l0X21lYW5fIj5JIGRvbid0IHVuZGVyc3RhbmQgdGhlIG5ldyBhY2Nlc3MgY29udHJvbCBzdHVmZiAtIHdoYXQgZG9lcyBpdCBtZWFuPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2NvbmZpZ3VyZV9TTk1Qdl9fdXNlcnNfIj5Ib3cgZG8gSSBjb25maWd1cmUgU05NUHYzIHVzZXJzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9fY3JlYXRlVXNlcl9fbGluZV9kaXNhcHBlYXJzX3doZW5fSV9zdGFydF90aGVfYWdlbnRfX19XaHlfIj5UaGUgJ2NyZWF0ZVVzZXInIGxpbmUgZGlzYXBwZWFycyB3aGVuIEkgc3RhcnQgdGhlIGFnZW50LiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX192YXJfdWNkX3NubXBfYW5kX191c3JfbG9jYWxfc2hhcmVfc25tcF8iPldoYXQncyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIC92YXIvdWNkLXNubXAgYW5kIC91c3IvbG9jYWwvc2hhcmUvc25tcD88L2E+Cis8bGk+IDxhIGhyZWY9IiNNeV9uZXdfYWdlbnRfaXNfaWdub3JpbmdfdGhlX29sZF9zbm1wZF9jb25mX2ZpbGVfX1doeV8iPk15IG5ldyBhZ2VudCBpcyBpZ25vcmluZyB0aGUgb2xkIHNubXBkLmNvbmYgZmlsZS4gV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9hbV9JX2dldHRpbmdfX0Nvbm5lY3Rpb25fcmVmdXNlZF9fIj5XaHkgYW0gSSBnZXR0aW5nICJDb25uZWN0aW9uIHJlZnVzZWQiPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfbV9nZXR0aW5nX2Vycm9yc19hYm91dF9fYmFkX3NlY3VyaXR5X21vZGVsX19fX3doeV8iPkknbSBnZXR0aW5nIGVycm9ycyBhYm91dCAiYmFkIHNlY3VyaXR5IG1vZGVsIiAtIHdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fZ2V0dGluZ19lcnJvcnNfYWJvdXRfX2JhZF9wcmVmaXhfbWF0Y2hfcGFyYW1ldGVyX19fX3doeV8iPkknbSBnZXR0aW5nIGVycm9ycyBhYm91dCAiYmFkIHByZWZpeCBtYXRjaCBwYXJhbWV0ZXIiIC0gd2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9jYW5fdF9JX3NlZV92YWx1ZXNfaW5fdGhlX1VDRGF2aXNfX2V4dGVuc2libGVfX29yX19kaXNrX190cmVlc18iPldoeSBjYW4ndCBJIHNlZSB2YWx1ZXMgaW4gdGhlIFVDRGF2aXMgJ2V4dGVuc2libGUnIG9yICdkaXNrJyB0cmVlcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfY2FuX3RfSV9zZWVfdmFsdWVzX2luX3RoZV9VQ0RhdmlzX19tZW1vcnlfX29yX192bXN0YXRfX3RyZWVfIj5XaHkgY2FuJ3QgSSBzZWUgdmFsdWVzIGluIHRoZSBVQ0RhdmlzICdtZW1vcnknIG9yICd2bXN0YXQnIHRyZWU/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9kb190aGVfQ1BVX3N0YXRpc3RpY3NfbWVhbl9fX2lzX3RoaXNfdGhlX2xvYWRfYXZlcmFnZV8iPldoYXQgZG8gdGhlIENQVSBzdGF0aXN0aWNzIG1lYW4gLSBpcyB0aGlzIHRoZSBsb2FkIGF2ZXJhZ2U/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfZ2V0X3BlcmNlbnRhZ2VfQ1BVX3V0aWxpemF0aW9uX3VzaW5nX3NzQ3B1UmF3SWRsZV8iPkhvdyBkbyBJIGdldCBwZXJjZW50YWdlIENQVSB1dGlsaXphdGlvbiB1c2luZyBzc0NwdVJhd0lkbGU/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9hYm91dF9tdWx0aV9wcm9jZXNzb3Jfc3lzdGVtc18iPldoYXQgYWJvdXQgbXVsdGktcHJvY2Vzc29yIHN5c3RlbXM/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX3NwZWVkX3R5cGVfb2ZfbXlfbmV0d29ya19pbnRlcmZhY2VzX2lzX3dyb25nX19faG93X2Nhbl9JX2ZpeF9pdF8iPlRoZSBzcGVlZC90eXBlIG9mIG15IG5ldHdvcmsgaW50ZXJmYWNlcyBpcyB3cm9uZyAtIGhvdyBjYW4gSSBmaXggaXQ/PC9hPgorPGxpPiA8YSBocmVmPSIjVGhlX2ludGVyZmFjZV9zdGF0aXN0aWNzX2Zvcl9teV9zdWJpbnRlcmZhY2VzX2FyZV9hbGxfemVyb19fX3doeV8iPlRoZSBpbnRlcmZhY2Ugc3RhdGlzdGljcyBmb3IgbXkgc3ViaW50ZXJmYWNlcyBhcmUgYWxsIHplcm8gLSB3aHk/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9kb2VzX19rbHJlYWRfX19iYWRfYWRkcmVzc19fbWVhbl8iPldoYXQgZG9lcyAia2xyZWFkOiAgYmFkIGFkZHJlc3MiIG1lYW4/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hhdF9kb2VzX19ubGlzdF9lcnJfX193b21iYXRfbm90X2ZvdW5kX19fb3Jfc2ltaWxhcl9fbWVhbl8iPldoYXQgZG9lcyAibmxpc3QgZXJyOiAgd29tYmF0IG5vdCBmb3VuZCIgKG9yIHNpbWlsYXIpIG1lYW4/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Fib3V0X19DYW5fdF9vcGVuX19kZXZfa21lbV9fIj5Ib3cgYWJvdXQgIkNhbid0IG9wZW4gL2Rldi9rbWVtIj88L2E+Cis8bGk+IDxhIGhyZWY9IiNUaGVfYWdlbnRfaXNfY29tcGxhaW5pbmdfYWJvdXRfX3NubXBkX2NvbmZfX19fV2hlcmVfaXNfdGhpc18iPlRoZSBhZ2VudCBpcyBjb21wbGFpbmluZyBhYm91dCAnc25tcGQuY29uZicuICBXaGVyZSBpcyB0aGlzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1RoZV9zeXN0ZW1fdXB0aW1lX19zeXNVcFRpbWVfX3JldHVybmVkX2lzX3dyb25nXyI+VGhlIHN5c3RlbSB1cHRpbWUgKHN5c1VwVGltZSkgcmV0dXJuZWQgaXMgd3JvbmchPC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX3JlZHVjZV90aGVfbWVtb3J5X2Zvb3RwcmludF8iPkhvdyBjYW4gSSByZWR1Y2UgdGhlIG1lbW9yeSBmb290cHJpbnQ/PC9hPgorPC91bD48bGk+PGI+Q09NUElMSU5HPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI0hvd19kb19JX2NvbXBpbGVfd2l0aF9fY2NfX2luc3RlYWRfb2ZfX2djY19fIj5Ib3cgZG8gSSBjb21waWxlIHdpdGggJ2NjJyBpbnN0ZWFkIG9mICdnY2MnPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0J1dF9nY2NfZG9lc25fdF9jb21waWxlX2l0X3N1Y2Nlc3NmdWxseV9vbl9teV9uZXdfU29sYXJpc19zeXN0ZW1fX1doeV9ub3RfIj5CdXQgZ2NjIGRvZXNuJ3QgY29tcGlsZSBpdCBzdWNjZXNzZnVsbHkgb24gbXkgbmV3IFNvbGFyaXMgc3lzdGVtLiBXaHkgbm90PzwvYT4KKzxsaT4gPGEgaHJlZj0iI09uX1JlZEhhdF9fX19fb3JfdXBfSV9nZXRfX191c3JfYmluX2xkX19jYW5ub3RfZmluZF9fbGVsZl9fX1doeV8iPk9uIFJlZEhhdCA4LjAgb3IgdXAgSSBnZXQgIi91c3IvYmluL2xkOiBjYW5ub3QgZmluZCAtbGVsZiIuIFdoeT88L2E+Cis8bGk+IDxhIGhyZWY9IiNJX21fZ2V0dGluZ19hbl9lcnJvcl9fYXV0b2hlYWRlcl9fbm90X2ZvdW5kX19fX3doYXRfc193cm9uZ18iPkknbSBnZXR0aW5nIGFuIGVycm9yICJhdXRvaGVhZGVyOiBub3QgZm91bmQiIC0gd2hhdCdzIHdyb25nPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfYWJvdXRfYV9mYWlsZWRfZGVwZW5kZW5jeV9vbl9fbGliY3J5cHRvX19fX1doZXJlX2Nhbl9JX2dldF90aGF0XyI+V2hhdCBhYm91dCBhIGZhaWxlZCBkZXBlbmRlbmN5IG9uICdsaWJjcnlwdG8nPyAgV2hlcmUgY2FuIEkgZ2V0IHRoYXQ/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2lzX3RoZV9wcm9qZWN0X3dvcmtzcGFjZV9lbXB0eV91bmRlcl9WaXN1YWxfQ19fXyI+V2h5IGlzIHRoZSBwcm9qZWN0IHdvcmtzcGFjZSBlbXB0eSB1bmRlciBWaXN1YWwgQysrPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doeV9kb2VzX19tYWtlX3Rlc3RfX3NraXBfZml2ZV90ZXN0c18iPldoeSBkb2VzICdtYWtlIHRlc3QnIHNraXAgZml2ZSB0ZXN0cz88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaHlfZG9lc19fbWFrZV90ZXN0X19jb21wbGFpbl9hYm91dF9hX3BpZF9maWxlXyI+V2h5IGRvZXMgJ21ha2UgdGVzdCcgY29tcGxhaW4gYWJvdXQgYSBwaWQgZmlsZT88L2E+Cis8L3VsPjxsaT48Yj5DT0RJTkc8L2I+PHVsPgorPGxpPiA8YSBocmVmPSIjSG93X2RvX0lfd3JpdGVfQ19jb2RlX3RvX2ludGVncmF0ZV93aXRoX3RoZV9hZ2VudF8iPkhvdyBkbyBJIHdyaXRlIEMgY29kZSB0byBpbnRlZ3JhdGUgd2l0aCB0aGUgYWdlbnQ/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2RvZXNfdGhlX2FnZW50X2ZldGNoX3RoZV92YWx1ZV9vZl9hX3ZhcmlhYmxlX2Zyb21fdGhlX3N5c3RlbV8iPkhvdyBkb2VzIHRoZSBhZ2VudCBmZXRjaCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBmcm9tIHRoZSBzeXN0ZW0/PC9hPgorPGxpPiA8YSBocmVmPSIjTWliX2NfY29tcGxhaW5zX2Fib3V0X2FfbWlzc2luZ19fbWliX3JlZmVyZW5jZV9fX193aGF0X2RvZXNfdGhpc19tZWFuXyI+TWliMmMgY29tcGxhaW5zIGFib3V0IGEgbWlzc2luZyAibWliIHJlZmVyZW5jZSIgLSB3aGF0IGRvZXMgdGhpcyBtZWFuPzwvYT4KKzxsaT4gPGEgaHJlZj0iI01pYl9jX2NvbXBsYWluc19hYm91dF9ub3RfaGF2aW5nX2FfX3ZhbGlkX09JRF9fX193aGF0X2RvZXNfdGhpc19tZWFuXyI+TWliMmMgY29tcGxhaW5zIGFib3V0IG5vdCBoYXZpbmcgYSAidmFsaWQgT0lEIiAtIHdoYXQgZG9lcyB0aGlzIG1lYW4/PC9hPgorPGxpPiA8YSBocmVmPSIjV2h5X2RvZXNuX3RfTWliX2NfbGlrZV90aGVfTUlCX2ZpbGVfSV9tX2dpdmluZ19pdF8iPldoeSBkb2Vzbid0IE1pYjJjIGxpa2UgdGhlIE1JQiBmaWxlIEknbSBnaXZpbmcgaXQ/PC9hPgorPGxpPiA8YSBocmVmPSIjTWliX2NfaWdub3Jlc19teV9NSUJfYW5kX2dlbmVyYXRlc19hX3BhaXJfb2ZfX21pYl9fX19jb2RlX2ZpbGVzX19fV2h5XyI+TWliMmMgaWdub3JlcyBteSBNSUIgYW5kIGdlbmVyYXRlcyBhIHBhaXIgb2YgJ21pYi0yJyBjb2RlIGZpbGVzLiAgV2h5PzwvYT4KKzxsaT4gPGEgaHJlZj0iI01pYl9jX2NvbXBsYWluc19hYm91dF9fY29uZmlndXJhdGlvbl9maWxlc19fX1doYXRfc190aGlzX2Zvcl8iPk1pYjJjIGNvbXBsYWlucyBhYm91dCAiY29uZmlndXJhdGlvbiBmaWxlcyIuIFdoYXQncyB0aGlzIGZvcj88L2E+Cis8bGk+IDxhIGhyZWY9IiNXaGljaF9taWJfY19jb25maWd1cmF0aW9uX2ZpbGVfc2hvdWxkX0lfdXNlXyI+V2hpY2ggbWliMmMgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBJIHVzZT88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfaGF2ZV9NaWJfY19nZW5lcmF0ZV9jb2RlX2Zvcl9ib3RoX3NjYWxhcnNfYW5kX3RhYmxlc18iPkhvdyBjYW4gSSBoYXZlIE1pYjJjIGdlbmVyYXRlIGNvZGUgZm9yIGJvdGggc2NhbGFycyBhbmQgdGFibGVzPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0FyZV90aGVyZV9hbnlfZXhhbXBsZXNfX29yX2RvY3VtZW50YXRpb25fIj5BcmUgdGhlcmUgYW55IGV4YW1wbGVzLCBvciBkb2N1bWVudGF0aW9uPzwvYT4KKzxsaT4gPGEgaHJlZj0iI0lfdmVfY3JlYXRlZF9hX25ld19tb2R1bGVfd2l0aF9fbWliX2NfX2J1dF9pdF9kb2Vzbl90X3dvcmtfX19XaHlfbm90XyI+SSd2ZSBjcmVhdGVkIGEgbmV3IG1vZHVsZSB3aXRoICdtaWIyYycgYnV0IGl0IGRvZXNuJ3Qgd29yay4gIFdoeSBub3Q/PC9hPgorPGxpPiA8YSBocmVmPSIjV2hlcmVfc2hvdWxkX0lfcHV0X3RoZV9maWxlc19wcm9kdWNlZF9ieV9fbWliX2NfXyI+V2hlcmUgc2hvdWxkIEkgcHV0IHRoZSBmaWxlcyBwcm9kdWNlZCBieSAnbWliMmMnPzwvYT4KKzxsaT4gPGEgaHJlZj0iI01pYl9jX29ubHlfaGFuZGxlc19hX3NpbmdsZV90YWJsZV9pbl9teV9NSUJfX0hvd19jYW5fSV9maXhfdGhpc18iPk1pYjJjIG9ubHkgaGFuZGxlcyBhIHNpbmdsZSB0YWJsZSBpbiBteSBNSUIuIEhvdyBjYW4gSSBmaXggdGhpcz88L2E+Cis8bGk+IDxhIGhyZWY9IiNIb3dfY2FuX0lfc3VwcG9ydF9hX2xhcmdlX3RhYmxlX193aXRoX21vcmVfdGhhbl9fX19fY29sdW1uX29iamVjdHNfIj5Ib3cgY2FuIEkgc3VwcG9ydCBhIGxhcmdlIHRhYmxlLCB3aXRoIG1vcmUgdGhhbiAyNTYgY29sdW1uIG9iamVjdHM/PC9hPgorPGxpPiA8YSBocmVmPSIjSG93X2Nhbl9JX2dldF90aGVfYWdlbnRfdG9fZ2VuZXJhdGVfYV90cmFwX19vcl9pbmZvcm1fXyI+SG93IGNhbiBJIGdldCB0aGUgYWdlbnQgdG8gZ2VuZXJhdGUgYSB0cmFwIChvciBpbmZvcm0pPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfaWZfSV9tX3VzaW5nX2FuX0FnZW50WF9zdWJfYWdlbnRfaW5zdGVhZF8iPldoYXQgaWYgSSdtIHVzaW5nIGFuIEFnZW50WCBzdWItYWdlbnQgaW5zdGVhZD88L2E+Cis8L3VsPjxsaT48Yj5NSVNDPC9iPjx1bD4KKzxsaT4gPGEgaHJlZj0iI1doeV9hcmVfcGFja2V0c19yZXF1ZXN0aW5nX3RoZV9zYW1lX2luZm9ybWF0aW9uX2xhcmdlcl93aXRoX1VDX0RhdmlzX1NOTVBfIj5XaHkgYXJlIHBhY2tldHMgcmVxdWVzdGluZyB0aGUgc2FtZSBpbmZvcm1hdGlvbiBsYXJnZXIgd2l0aCBVQy1EYXZpcyBTTk1QPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfQVNOX19fcGFyc2VyX2lzX3VzZWRfIj5XaGF0IEFTTi4xIHBhcnNlciBpcyB1c2VkPzwvYT4KKzxsaT4gPGEgaHJlZj0iI1doYXRfaXNfdGhlX09mZmljaWFsX1Nsb2dhbl9vZl90aGVfbmV0X3NubXBfY29kZXJzX2xpc3RfIj5XaGF0IGlzIHRoZSBPZmZpY2lhbCBTbG9nYW4gb2YgdGhlIG5ldC1zbm1wLWNvZGVycyBsaXN0PzwvYT4KKzwvdWw+PGhyPjxwcmU+CisKKzxhIG5hbWU9IkdFTkVSQUwiPgorR0VORVJBTAorPT09PT09PQorCis8YSBuYW1lPSJXaGF0X2lzX2l0XyI+CitXaGF0IGlzIGl0PworLS0tLS0tLS0tLQorCisgIC0gVmFyaW91cyB0b29scyByZWxhdGluZyB0byB0aGUgU2ltcGxlIE5ldHdvcmsgTWFuYWdlbWVudCBQcm90b2NvbAorICAgIGluY2x1ZGluZzoKKworCSogQW4gZXh0ZW5zaWJsZSBhZ2VudAorCSogQW4gU05NUCBsaWJyYXJ5CisJKiB0b29scyB0byByZXF1ZXN0IG9yIHNldCBpbmZvcm1hdGlvbiBmcm9tIFNOTVAgYWdlbnRzCisJKiB0b29scyB0byBnZW5lcmF0ZSBhbmQgaGFuZGxlIFNOTVAgdHJhcHMKKwkqIGEgdmVyc2lvbiBvZiB0aGUgdW5peCAnbmV0c3RhdCcgY29tbWFuZCB1c2luZyBTTk1QCisJKiBhIGdyYXBoaWNhbCBQZXJsL1RrL1NOTVAgYmFzZWQgbWliIGJyb3dzZXIKKworICAgIFRoaXMgcGFja2FnZSBpcyBvcmlnaW5hbGx5IGJhc2VkIG9uIHRoZSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorICAgIFNOTVAgaW1wbGVtZW50YXRpb24gKHZlcnNpb24gMi4xLjIuMSksIGJ1dCBoYXMgZGV2ZWxvcGVkIHNpZ25pZmljYW50bHkKKyAgICBzaW5jZSB0aGVuLgorCisKKworPGEgbmFtZT0iV2hlcmVfY2FuX0lfZ2V0X2l0XyI+CitXaGVyZSBjYW4gSSBnZXQgaXQ/CistLS0tLS0tLS0tLS0tLS0tLS0KKworICBEb3dubG9hZDoKKyAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2Rvd25sb2FkLworICAgIC0gZnRwOi8vZnRwLm5ldC1zbm1wLm9yZy9wdWIvc291cmNlZm9yZ2UvbmV0LXNubXAvCisgIE1ENSBTdW1zOgorICAgIC0gaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvbWQ1LworICBXZWIgcGFnZToKKyAgICAtIGh0dHA6Ly93d3cubmV0LXNubXAub3JnLworICBTb3VyY2Vmb3JnZSBQcm9qZWN0IHBhZ2U6CisgICAgLSBodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy9wcm9qZWN0LworICBNaXJyb3JzIChub3RlIHRoYXQgc291cmNlZm9yZ2UgZG93bmxvYWQgc2VydmVycyBhcmUgbWlycm9yZWQgdGhlbXNlbHZlcyk6CisgICAgLSBVUzogICAgICAgICAgZnRwOi8vZnRwLmZyZWVzbm1wLmNvbS9taXJyb3JzL25ldC1zbm1wLworICAgIC0gQnVsZ2FyaWE6ICAgIGh0dHA6Ly9ydGZtLnVuaS1zdmlzaHRvdi5iZy9uZXQtc25tcC8gICAgKGFwcGVhcnMgdG8gYmUgb3V0IG9mIGRhdGUpCisgICAgLSBKYXBhbjogICAgICAgZnRwOi8vZnRwLmF5YW11cmEub3JnL3B1Yi9uZXQtc25tcC8gICAgICAobWF5IG9ubHkgd29yayBpbnNpZGUgSmFwYW4pCisgICAgLSBHZXJtYW55OiAgICAgZnRwOi8vZnRwLm1wZy5nb2Uubmkuc2NodWxlLmRlL3B1Yi9pbnRlcm5ldC9uZXQtc25tcC8gICh1bmtub3duIGhvc3QpCisgICAgLSBHcmVlY2U6ICAgICAgZnRwOi8vZnRwLm50dWEuZ3IvcHViL25ldC9zbm1wL25ldC1zbm1wLworCisgIFRoZSBvbGQgdWNkLXNubXAudWNkYXZpcy5lZHUgd2ViIHNpdGUgYW5kIGZ0cCBzZXJ2ZXIgaXMgbm93CisgIG9mZmxpbmUgYW5kIHNob3VsZCBub3QgYmUgYWNjZXNzZWQgYW55IGxvbmdlci4KKworCisKKzxhIG5hbWU9IldoYXRfZG9jdW1lbnRhdGlvbl9pc19hdmFpbGFibGVfIj4KK1doYXQgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwlUaGlzIEZBUSAoISkKKwlSRUFETUUgYW5kIGluZGl2aWR1YWwgUkVBRE1FcyBmb3IgdmFyaW91cyBwbGF0Zm9ybXMKKwlSRUFETUUudGhyZWFkIChkaXNjdXNzZXMgdGhyZWFkaW5nIGlzc3VlcykKKwlJTlNUQUxMCisJUE9SVElORworCUVYQU1QTEUuY29uZgorCW1hbiBwYWdlcyBmb3IgdGhlIGluZGl2aWR1YWwgdG9vbHMsIGZpbGVzIGFuZCB0aGUgQVBJCisJQSBndWlkZSBmb3IgZXh0ZW5kaW5nIHRoZSBhZ2VudAorCVR1dG9yaWFscyBmb3IgYm90aCB1Y2Qtc25tcCB2NCBhbmQgbmV0LXNubXAgdjUKKyAgICAgICAgICAgYXQgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLworICAgICAgICAgICBhbmQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS8gcmVzcGVjdGl2ZWx5CisKKyAgICAgIE1vc3Qgb2YgdGhpcyBkb2N1bWVudGF0aW9uIChwbHVzIGFyY2hpdmVzIG9mIHRoZSBtYWlsaW5nIGxpc3RzKQorCSBpcyBhbHNvIGF2YWlsYWJsZSBvbiBvdXIgd2ViIHBhZ2U6CisKKyAgICAgICAgCWh0dHA6Ly93d3cubmV0LXNubXAub3JnLworCisKKworPGEgbmFtZT0iQXJlX3RoZXJlX2JpbmFyaWVzX2F2YWlsYWJsZV8iPgorQXJlIHRoZXJlIGJpbmFyaWVzIGF2YWlsYWJsZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAtIFRoZXJlIGFyZSBiaW5hcmllcyBmb3Igc29tZSBzeXN0ZW1zIGF2YWlsYWJsZSBpbiB0aGUgYmluYXJpZXMKKyAgICBkaXJlY3Rvcnkgb24gdGhlIGZ0cCBzaXRlLgorCisKKworPGEgbmFtZT0iV2hhdF9zX3RoZV9kaWZmZXJlbmNlX2JldHdlZW5fVUNEX1NOTVBfYW5kX05ldF9TTk1QXyI+CitXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBVQ0QtU05NUCBhbmQgTmV0LVNOTVA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBOb3QgYSBncmVhdCBkZWFsLCByZWFsbHkuCisgIEFsdGhvdWdoIHRoZSBwcm9qZWN0IG9yaWdpbmFsbHkgc3RhcnRlZCBhdCBVQyBEYXZpcyAoaGVuY2UgdGhlIG5hbWUpLAorICBhbmQgaXQgaGFzIGFsd2F5cyBiZWVuIGJhc2VkIHRoZXJlLCBtb3N0IG9mIHRoZSBjb250cmlidXRvcnMgaGF2ZSBoYWQKKyAgbGl0dGxlIG9yIG5vIGNvbm5lY3Rpb24gd2l0aCB0aGlzIGluc3RpdHV0aW9uLgorCisgICAgVGhlIG1vdmUgdG8gU291cmNlRm9yZ2Ugd2FzIGludGVuZGVkIHRvIHByb3ZpZGUgYSBtb3JlIGZsZXhpYmxlCisgIGVudmlyb25tZW50IGZvciB0aGUgcHJvamVjdCwgYW5kIHRvIGRpc3RyaWJ1dGUgdGhlIGFkbWluaXN0cmF0aXZlCisgIHdvcmtsb2FkIG1vcmUgZXZlbmx5LiAgVGhlIGNoYW5nZSBvZiBuYW1lIHNpbXBseSByZWZsZWN0cyB0aGlzIG1vdmUsCisgIHdoaWNoIHdhcyB0aGUgbGFzdCByZW1haW5pbmcgbGluayB3aXRoIFVDIERhdmlzLgorCisgICAgVGhlIDQuMi54IGxpbmUgaXMgdGhlIGxhc3QgcmVsZWFzZSBsaW5lIHRoYXQgdXNlcyB0aGUgdWNkLXNubXAgbmFtZSwKKyAgYW5kIGFsbCByZWxlYXNlcyB1bmRlciB0aGlzIGJhbm5lciB3aWxsIGJlIGJ1Zy1maXhlcyBvbmx5LiAgUmVsZWFzZQorICA1LjAgaXMgdGhlIGZpcnN0IHZlcnNpb24gdXNpbmcgdGhlIG5ldC1zbm1wIG5hbWUsIGFuZCBhbGwgbmV3IGZlYXR1cmVzCisgIGFuZCBzaWduaWZpY2FudCBkZXZlbG9wbWVudCB3aWxsIGJlIHJlbGVhc2VkIHVuZGVyIHRoaXMgbmFtZS4KKyAgICAoVGhvdWdoIHRoZSBkaXZpZGluZyBsaW5lIGJldHdlZW4gYSBidWctZml4IGFuZCBhIG5ldyBmZWF0dXJlIGlzCisgIHNvbWV0aGluZyBvZiBhIHZhZ3VlIG9uZSwgc28gc29tZSBjaGFuZ2VzIGluIHRoZSA0LjIueCBsaW5lIG1heSBiZQorICByZWxhdGl2ZWx5IG5vbi10cml2aWFsISkKKyAKKyAgICBTdGFydGluZyB3aXRoIHRoZSA1LjAgcmVsZWFzZSwgd2UgYXJlIGFsc28gdHJ5aW5nIHRvIHJldmlldyBhbmQKKyAgcmV3b3JrIHRoZSB1bmRlcmx5aW5nIGNvZGUgYmFzZSB0byBpbXByb3ZlIHRoZSByZWFkYWJpbGl0eSBhbmQKKyAgbWFpbnRhaW5hYmlsaXR5IG9mIHRoZSBwYWNrYWdlLiAgVGhlIDUuMCBjaGFuZ2VzIGhhdmUgbW9zdGx5CisgIGNvbmNlbnRyYXRlZCBvbiB0aGUgYWdlbnQgYXJjaGl0ZWN0dXJlLCB0aG91Z2ggdGhlcmUgaGF2ZSBiZWVuIHNvbWUKKyAgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhcyB3ZWxsLiAgRnV0dXJlIHJlbGVhc2VzIG1heQorICBpbmNsdWRlIGZ1cnRoZXIgcmVzdHJ1Y3R1cmluZyBvZiB0aGUgbGlicmFyeS4KKyAgICBUaGlzIHByb2Nlc3Mgd2lsbCBwcm9iYWJseSByZXN1bHQgaW4gc29tZSBjaGFuZ2VzIHRvIHRoZSBBUEksCisgIHRob3VnaCB3ZSB3aWxsIGF0dGVtcHQgdG8gcmV0YWluIHNvbWUgZm9ybSBvZiBiYWNrd2FyZHMKKyAgY29tcGF0aWJpbGl0eSBhcyBmYXIgYXMgcG9zc2libGUsIGFuZCBjbGVhcmx5IG1hcmsgYW55dGhpbmcgdGhhdCBoYXMKKyAgY2hhbmdlZC4gIFRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSB3aXRoIHRoZSA1LjAgcmVsZWFzZSBpcyBhCisgIHJlc3RydWN0dXJpbmcgb2YgdGhlIGhlYWRlciBmaWxlIG9yZ2FuaXNhdGlvbiAtIG5vdCBsZWFzdCBhIGNoYW5nZQorICBmcm9tICZsdDt1Y2Qtc25tcC94eHguaCZndDsgdG8gJmx0O25ldC1zbm1wL3l5eS5oJmd0Oy4KKworCisKKzxhIG5hbWU9IldoYXRfb3BlcmF0aW5nX3N5c3RlbXNfZG9lc19pdF9ydW5fb25fIj4KK1doYXQgb3BlcmF0aW5nIHN5c3RlbXMgZG9lcyBpdCBydW4gb24/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQm90aCB0aGUgYXBwbGljYXRpb25zIGFuZCB0aGUgYWdlbnQgaGF2ZSBiZWVuIHJlcG9ydGVkIGFzIHJ1bm5pbmcKKyAgKGF0IGxlYXN0IGluIHBhcnQpIG9uIHRoZSBmb2xsb3dpbmcgb3BlcmF0aW5nIHN5c3RlbXM6CisKKwkqIEhQLVVYICgxMC4yMCB0byA5LjAxIGFuZCAxMS4wIC0tIHNlZSBSRUFETUUuaHB1eDExKQorCSogVWx0cml4ICg0LjUgdG8gNC4yKQorCSogU29sYXJpcyBTUEFSQy9VTFRSQSAoMi44IHRvIDIuMyksIEludGVsICgyLjkpIGFuZCBTdW5PUyAoNC4xLjQgdG8gNC4xLjIpCisJKiBPU0YgKDQuMCwgMy4yKQorCSogTmV0QlNEICgxLjVhbHBoYSB0byAxLjApCisJKiBGcmVlQlNEICg0LjEgdG8gMi4yKQorCSogQlNEaSAoNC4wLjEgdG8gMi4xKQorCSogTGludXggKGtlcm5lbHMgMi40IHRvIDEuMykKKwkqIEFJWCAoNC4xLjUsIDMuMi41KQorCSogT3BlbkJTRCAoMi44LCAyLjYpCisJKiBJcml4ICg2LjUgdG8gNS4xKQorCSogT1MgWCAoMTAuMS4xIGFuZCAxMC4xLjIpCisJKiBEeW5peC9QVFggNC40CisJKiBRTlggNi4yLjFBCisKKyAgV2UgaGF2ZSBhbHNvIGJlZW4gaW5mb3JtZWQgYWJvdXQgYSBwb3J0IHRvIHRoZSBTdHJhdHVzIFZPUy4KKyAgU2VlIGh0dHA6Ly9mdHAuc3RyYXR1cy5jb20vdm9zL25ldHdvcmsvbmV0d29yay5odG1sIGZvciBkZXRhaWxzLgorCisgIFNlZSB0aGUgbmV4dCBxdWVzdGlvbiBidXQgb25lIGZvciB0aGUgc3RhdHVzIG9mIFdpbmRvd3Mgc3VwcG9ydC4KKworICBDZXJ0YWluIHN5c3RlbXMgKGUuZy4gSFAtVVggMTEsIElyaXg/KSBmYWlsIHRvIGNvbXBpbGUgcGFydGljdWxhcgorICBwb3J0aW9ucyBvZiB0aGUgYWdlbnQuICBUaGVzZSBjYW4gdXN1YWxseSBiZSBwZXJzdWFkZWQgdG8gY29tcGlsZQorICAoYXQgdGhlIGxvc3Mgb2Ygc29tZSBmdW5jdGlvbmFsaXR5KSBieSBvbWl0dGluZyB0aGUgbW9kdWxlcyBhZmZlY3RlZC4KKyAgU2VlIHRoZSBuZXh0IHF1ZXN0aW9uIGZvciBtb3JlIGRldGFpbHMuCisKKyAgQWxzbyBub3RlIHRoYXQgdGhlIHByZXNlbmNlIG9mIGEgcGFydGljdWxhciBjb25maWd1cmF0aW9uIGluIHRoaXMKKyAgbGlzdCBkb2VzIG5vdCBpbXBseSBhIHBlcmZlY3Qgb3IgY29tcGxldGUgaW1wbGVtZW50YXRpb24uICBUaGlzIGlzCisgIHNpbXBseSB3aGF0IHZhcmlvdXMgcGVvcGxlIGhhdmUgcmVwb3J0ZWQgYXMgc2VlbWluZyB0byB3b3JrLiAoT3IgbW9yZQorICBmcmVxdWVudGx5LCB0aGUgY29uZmlndXJhdGlvbnMgcGVvcGxlIGhhdmUgcmVwb3J0ZWQgcHJvYmxlbXMgd2l0aAorICB0aGF0IHdlIHRoaW5rIHdlJ3ZlIGZpeGVkISkKKworCisKKzxhIG5hbWU9IldoYXRfaGFwcGVuc19pZl9taW5lX2lzbl90X2xpc3RlZF8iPgorV2hhdCBoYXBwZW5zIGlmIG1pbmUgaXNuJ3QgbGlzdGVkPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBJdCdzIHByb2JhYmx5IHdvcnRoIHRyeWluZyB0byBjb21waWxlIGl0IGFueXdheS4gIElmIHlvdXIgc3lzdGVtCisgIGlzIHJlYXNvbmFibHkgc2ltaWxhciB0byBhbm90aGVyIHN1cHBvcnRlZCBjb25maWd1cmF0aW9uLCBpdCBtYXkKKyAgd2VsbCBjb21waWxlIHdpdGggbGl0dGxlIG9yIG5vIGRpZmZpY3VsdHkuICBUaGUgbW9zdCBsaWtlbHkgc291cmNlCisgIG9mIHByb2JsZW1zIHdpbGwgYmUgTUlCIG1vZHVsZXMgd2l0aGluIHRoZSBhZ2VudCwgYXMgdGhpcyB0ZW5kcyB0bworICBiZSB3aGVyZSB0aGUgbW9zdCBzeXN0ZW0tc3BlY2lmaWMgY29kZSBpcyBmb3VuZC4KKworICAgIElmIG9ubHkgYSBmZXcgbW9kdWxlcyBmYWlsIHRvIGNvbXBpbGUsIHRyeSByZW1vdmluZyB0aGVtIGZyb20KKyAgdGhlIGFnZW50IGJ5IHJ1bm5pbmcgImNvbmZpZ3VyZSAtLXdpdGgtb3V0LW1pYi1tb2R1bGU9eHh4LHl5eSIsCisgIGFuZCByZS1jb21waWxpbmcuICBJZiBhIGxhcmdlIG51bWJlciBvZiBtb2R1bGVzIGZhaWwsIHRoZW4gaXQKKyAgbWlnaHQgYmUgZWFzaWVyIHRvIHN0YXJ0IGZyb20gYSByZWxhdGl2ZWx5IGJhcmUgc3lzdGVtLCB1c2luZworICAiY29uZmlndXJlIC0tZW5hYmxlLW1pbmktYWdlbnQgLS13aXRoLWRlZmF1bHRzIi4gIFRoZW4gaWYgdGhpcworICBtaW5pbWFsIGFnZW50IGNvbXBpbGVzIGFuZCBydW5zIHN1Y2Nlc3NmdWxseSwgdHJ5IGFkZGluZyB0aGUKKyAgbWlzc2luZyBtaWJncm91cHMgdXNpbmcgdGhlIGNvbmZpZ3VyZSBvcHRpb24gJy0td2l0aC1taWItbW9kdWxlJy4KKyAgCisgICAgSWYgY29uZmlndXJlIGZhaWxzIHdpdGggImludmFsaWQgY29uZmlndXJhdGlvbiIgbWVzc2FnZXMsIG9yCisgIHlvdSBnZXQgY29tcGxldGVseSBzdHVjaywgY29udGFjdCB0aGUgY29kZXJzIGxpc3QgZm9yIGFkdmljZS4KKyAgU2ltaWxhcmx5LCBpZiB5b3UgbWFuYWdlIHRvIGdldCB0aGlzIHdvcmtpbmcgb24gYSBuZXcgc3lzdGVtLAorICBwbGVhc2UgbGV0IHVzIGtub3cgYm90aCBkZXRhaWxzIG9mIHRoZSBoYXJkd2FyZSB5b3UncmUgdXNpbmcsCisgIGFuZCB3aGF0IHZlcnNpb25zIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIHlvdSd2ZSB0cmllZCBpdCBvbi4KKyAgVGhlIGVudHJ5ICdob3N0JyBpbiB0aGUgZmlsZSAnY29uZmlnLnN0YXR1cycgd2lsbCBzaG93IHRoaXMKKyAgaW5mb3JtYXRpb24uICBPaCwgYW5kIGNvbmdyYXR1bGF0aW9ucyEKKworCisKKzxhIG5hbWU9IkRvZXNfaXRfcnVuX29uX1dpbmRvd3NfIj4KK0RvZXMgaXQgcnVuIG9uIFdpbmRvd3M/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgc3VpdGUgc2hvdWxkIGNvbXBpbGUgYW5kIHJ1biBvbiBXaW4zMiBwbGF0Zm9ybXMsIGluY2x1ZGluZworICB0aGUgbGlicmFyeSwgY29tbWFuZC1saW5lIHRvb2xzIGFuZCB0aGUgYmFzaWMgYWdlbnQgZnJhbWV3b3JrLgorICBOb3RlIHRoYXQgdGhlIGFnZW50IG5vdyBpbmNsdWRlcyBzdXBwb3J0IGZvciB0aGUgTUlCLUlJIG1vZHVsZSwKKyAgYnV0IHRoaXMgcmVxdWlyZXMgTWljcm9zb2Z0J3MgQ29yZSBQbGF0Zm9ybSBTREsuICBJbnN0cnVjdGlvbnMKKyAgZm9yIGhvdyB0byBpbnN0YWxsIHRoaXMgYXJlIGdpdmVuIGluIFJFQURNRS53aW4zMi4KKworICAgIFNvbWUgb3RoZXIgTUlCIG1vZHVsZXMsIGluY2x1ZGluZyB0aGUgVUNEIHBhc3MtdGhyb3VnaCBleHRlbnNpb25zLAorICBkbyBub3QgY3VycmVudGx5IHdvcmsgdW5kZXIgV2luZG93cy4gIFZvbHVudGVlcnMgdG8gYXNzaXN0IGluCisgIHRoZXNlIG1pc3NpbmcgbW9kdWxlcyBhcmUgbGlrZWx5IHRvIHdlbGNvbWVkIHdpdGggb3BlbiBhcm1zIDotKQorCisgICAgRnVydGhlciBkZXRhaWxzIG9mIFdpbmRvd3Mgc3VwcG9ydCAoY3VycmVudGx5IFZpc3VhbCBDKysgYW5kCisgIEN5Z251cyBjeWd3aW4zMikgaXMgYXZhaWxhYmxlIGluIHRoZSBmaWxlIFJFQURNRS53aW4zMgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfZmluZF9vdXRfYWJvdXRfbmV3X3JlbGVhc2VzXyI+CitIb3cgZG8gSSBmaW5kIG91dCBhYm91dCBuZXcgcmVsZWFzZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBpcyBhIG1haWxpbmcgbGlzdCBmb3IgdGhlc2UgYW5ub3VuY2VtZW50cworCisgIAluZXQtc25tcC1hbm5vdW5jZUBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworICBUbyBiZSBhZGRlZCB0byAob3IgcmVtb3ZlZCBmcm9tKSB0aGlzIGxpc3QsIHZpc2l0CisgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2xpc3RzL25ldC1zbm1wLWFubm91bmNlLy4gIE9yIHlvdSBjYW4gc2VuZCBhCisgIG1lc3NhZ2UgdG8gdGhlIGFkZHJlc3MKKyAgJ25ldC1zbm1wLWFubm91bmNlLXJlcXVlc3RAbGlzdHMuc291cmNlZm9yZ2UubmV0JyB3aXRoIGEgc3ViamVjdAorICBsaW5lIG9mICdzdWJzY3JpYmUnIChvciAndW5zdWJzY3JpYmUnIGFzIGFwcHJvcHJpYXRlKS4KKworICBNYWpvciBjb2RlIHJldmlzaW9ucyBtYXkgYmUgYW5ub3VuY2VkIG1vcmUgd2lkZWx5IChlLmcuIG9uIHRoZQorICBTTk1QIG1haWxpbmcgbGlzdHMsIG9yIGNvbXAucHJvdG9jb2xzLnNubXApIGJ1dCB0aGlzIGxpc3QgaXMgdGhlIG1vc3QKKyAgcmVsaWFibGUgd2F5IHRvIGtlZXAgaW4gdG91Y2ggd2l0aCB0aGUgc3RhdHVzIG9mIHRoaXMgcGFja2FnZS4KKworICBQYXRjaGVzIHRvIGZpeCBrbm93biBwcm9ibGVtcyBhcmUgYWxzbyBtYWRlIGF2YWlsYWJsZSB2aWEgdGhlIHdlYiBzaXRlOgorCisgICAgICAgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3BhdGNoZXMvCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfZmluZF9vdXRfd2hhdF9vdGhlcl9wZW9wbGVfYXJlX2RvaW5nXyI+CitIb3cgY2FuIEkgZmluZCBvdXQgd2hhdCBvdGhlciBwZW9wbGUgYXJlIGRvaW5nPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGlzIGEgZ2VuZXJhbCBwdXJwb3NlIGRpc2N1c3Npb24gbGlzdAorCisgIAluZXQtc25tcC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQKKworICBUbyBiZSBhZGRlZCB0byAob3IgcmVtb3ZlZCBmcm9tKSB0aGlzIGxpc3QsIHZpc2l0CisgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL2xpc3RzL25ldC1zbm1wLXVzZXJzLiAgT3IgeW91IGNhbiBzZW5kIGEKKyAgbWVzc2FnZSB0byB0aGUgYWRkcmVzcyAnbmV0LXNubXAtdXNlcnMtcmVxdWVzdEBsaXN0cy5zb3VyY2Vmb3JnZS5uZXQnCisgIHdpdGggYSBzdWJqZWN0IGxpbmUgb2YgJ3N1YnNjcmliZScgKG9yICd1bnN1YnNjcmliZScgYXMgYXBwcm9wcmlhdGUpLgorCisgIFRvIGZpbmQgb3V0IHdoYXQgdGhlIGRldmVsb3BlcnMgYXJlIGRvaW5nLCBhbmQgdG8gaGVscCB0aGVtIG91dCwgcGxlYXNlCisgIHJlYWQgdGhlIFBPUlRJTkcgZmlsZSBlbmNsb3NlZCB3aXRoIHRoZSBwYWNrYWdlLgorCisgIFRoZXJlIGlzIGFsc28gYW4gbmV0LXNubXAgSVJDIGNoYW5uZWwgc2V0IHVwIG9uIHRoZSBmcmVlbm9kZS5uZXQgSVJDCisgIGNoYXQgc2VydmVycyAoeW91IGNhbiB1c2UgaXJjLmZyZWVub2RlLm5ldCB0byBjb25uZWN0IGFuZC9vciBzZWUKKyAgaHR0cDovL3d3dy5mcmVlbm9kZS5uZXQvIGZvciBnZXR0aW5nIHN0YXJ0ZWQgd2l0aCBpcmMpLiAgTXVsdGlwbGUKKyAgY29yZSBkZXZlbG9wZXJzIGhhbmcgb3V0IHRoZXJlIG9uIGEgcmVndWxhciBiYXNpcy4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX3N1Ym1pdF9hX3BhdGNoX29yX2J1Z19yZXBvcnRfIj4KK0hvdyBkbyBJIHN1Ym1pdCBhIHBhdGNoIG9yIGJ1ZyByZXBvcnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQWxsIGJ1ZyByZXBvcnRzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gdGhlIGJ1ZyBkYXRhYmFzZSB0aHJvdWdoIHRoZQorICBpbnRlcmZhY2UgZm91bmQgYXQgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvYnVncy8uICBCZQorICBzdXJlIHRvIGluY2x1ZGUgdGhlIHZlcnNpb24gb2YgdGhlIHBhY2thZ2UgdGhhdCB5b3UndmUgYmVlbiB3b3JraW5nCisgIHdpdGgsIHRoZSBvdXRwdXQgb2YgdGhlIGNvbW1hbmQgJ3VuYW1lIC1hJywgdGhlIHByZWNpc2UgY29tbWFuZCB0aGF0CisgIHRyaWdnZXJzIHRoZSBwcm9ibGVtIGFuZCBhIGNvcHkgb2YgdGhlIG91dHB1dCBpdCBwcm9kdWNlcy4KKworICAgIEFsbCBwYXRjaGVzIHNob3VsZCBiZSBzdWJtaXR0ZWQgdG8gdGhlIHBhdGNoIG1hbmFnZXIgYXQKKyAgaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvcGF0Y2hlcy8uICBJZiBwb3NzaWJsZSwgc3VibWl0IGEKKyAgYnVnIHJlcG9ydCBkZXNjcmliaW5nIHRoZSBwYXRjaCBhcyB3ZWxsIChyZWZlcmVuY2luZyBpdCBieSBpdHMgcGF0Y2gKKyAgbnVtYmVyKSBzaW5jZSB0aGUgcGF0Y2ggbWFuYWdlciBkb2Vzbid0IGNvbnRhaW4gYSBkZWNlbnQgZGVzY3JpcHRpb24KKyAgZmllbGQuCisKKyAgICBRdWVzdGlvbnMgYWJvdXQgdXNpbmcgdGhlIHBhY2thZ2Ugc2hvdWxkIGJlIGRpcmVjdGVkIGF0IHRoZQorICBuZXQtc25tcC11c2Vyc0BsaXN0cy5zb3VyY2Vmb3JnZS5uZXQgbWFpbGluZyBsaXN0LiAgTm90ZSB0aGF0IHRoaXMKKyAgbWFpbGluZyBsaXN0IGlzIHJlbGF0aXZlbHkgYnVzeSwgYW5kIHRoZSBwZW9wbGUgYW5zd2VyaW5nIHRoZXNlCisgIHF1ZXN0aW9ucyBhcmUgZG9pbmcgc28gb3V0IG9mIHRoZSBnb29kbmVzcyBvZiB0aGVpciBoZWFydHMsIGFuZCBpbgorICBhZGRpdGlvbiB0byB0aGVpciBtYWluIGVtcGxveW1lbnQuICBQbGVhc2Ugbm90ZSB0aGUgZm9sbG93aW5nOgorCisgICAgIC0gdXNlIHBsYWluIHRleHQgbWFpbCwgcmF0aGVyIHRoYW4gSFRNTAorICAgICAtIGRvbid0IHJlc2VuZCBxdWVzdGlvbnMgbW9yZSB0aGFuIG9uY2UKKyAgICAgICAgICAoZXZlbiBpZiBuby1vbmUgYW5zd2VyZWQgaW1tZWRpYXRlbHkpCisgICAgIC0gaW5jbHVkZSBmdWxsIGRldGFpbHMgb2YgZXhhY3QgY29tbWFuZHMgYW5kIGVycm9yIG1lc3NhZ2VzCisgICAgICAgICAgKCJJJ3ZlIHRyaWVkIGV2ZXJ5dGhpbmcsIGFuZCBpdCBkb2Vzbid0IHdvcmsiIGlzbid0IG11Y2ggdXNlISkKKyAgICAgLSBkbyAqTk9UKiBzZW5kIG1lc3NhZ2VzIHRvIC11c2VycyBhbmQgLWNvZGVycyBtYWlsaW5nIGxpc3RzCisgICAgICAgICAgKG1vc3QgZGV2ZWxvcGVycyByZWFkIGJvdGggYW55d2F5KQorICAgICAtIGRvbid0IG1haWwgdGhlIGRldmVsb3BlcnMgcHJpdmF0ZWx5IC0ga2VlcCBldmVyeXRoaW5nIG9uIHRoZSBsaXN0CisKKyAgUmVtZW1iZXIgdGhhdCB0aGlzIGlzIGJhc2ljYWxseSBhbiB1bnN1cHBvcnRlZCBwYWNrYWdlLiAgRnVuZGFtZW50YWxseQorICBpdCdzIE9wZW4gU291cmNlLCBzbyB5b3UgaGF2ZSB0aGUgc291cmNlIGNvZGUuICBJZiB5b3UgbmVlZCBzb21ldGhpbmcKKyAgZml4aW5nIGJhZGx5IGVub3VnaCwgaXQncyB1cCB0byB5b3UgdG8gZG8gdGhlIHdvcmsuCisKKyAgICBXZSBjYW4ndCBwcm9taXNlIHRvIGJlIGFibGUgdG8gc29sdmUgYWxsIHByb2JsZW1zLCBidXQgd2UnbGwKKyAgY2VydGFpbmx5IHRyeSBhbmQgaGVscC4gIEJ1dCByZW1lbWJlciB0aGF0IHRoaXMgaXMgYmFzaWNhbGx5IGFuCisgIHVuc3VwcG9ydGVkIHBhY2thZ2UuICBJdCdzIE9wZW4gU291cmNlLCBzbyBpZiB5b3UgbmVlZCBzb21ldGhpbmcKKyAgZml4aW5nIGJhZGx5IGVub3VnaCwgIGZ1bmRhbWVudGFsbHkgaXQncyB1cCB0byB5b3UgdG8gZG8gdGhlIHdvcmsuCisKKzxhIG5hbWU9IkNhbl9JX3JldXNlX3RoZV9jb2RlX2luX215X2NvbW1lcmNpYWxfYXBwbGljYXRpb25fIj4KK0NhbiBJIHJldXNlIHRoZSBjb2RlIGluIG15IGNvbW1lcmNpYWwgYXBwbGljYXRpb24/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBkZXRhaWxzIG9mIHRoZSBDT1BZUklHSFRzIG9uIHRoZSBwYWNrYWdlIGNhbiBiZSBmb3VuZCBpbiB0aGUKK0NPUFlJTkcgZmlsZS4gIFlvdSBzaG91bGQgaGF2ZSB5b3VyIGxhd3llciByZWFkIHRoaXMgZmlsZSBpZiB5b3Ugd2lzaAordG8gdXNlIHRoZSBjb2RlIGluIHlvdXIgY29tbWVyY2lhbCBhcHBsaWNhdGlvbi4gIFdlIHdpbGwgbm90IHN1bW1hcml6ZQoraGVyZSB3aGF0IGlzIGluIHRoZSBmaWxlLCBhcyB3ZSdyZSBub3QgbGF3eWVycyBhbmQgYXJlIHVucXVhbGlmaWVkIHRvCitkbyBzby4KKworCis8YSBuYW1lPSJXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9TTk1Qdl9fX1NOTVB2X19hbmRfU05NUHZfXyI+CitXaGF0J3MgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBTTk1QdjEsIFNOTVB2MiBhbmQgU05NUHYzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorPGEgbmFtZT0iV2hhdF9hcmVfYWxsX3RoZXNlX2RpZmZlcmVudF9TTk1Qdl9fc19hbnl3YXlfIj4KK1doYXQgYXJlIGFsbCB0aGVzZSBkaWZmZXJlbnQgU05NUHYyJ3MgYW55d2F5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisgIEEgZnVsbCBkZXNjcmlwdGlvbiBpcyBwcm9iYWJseSBiZXlvbmQgdGhlIHNjb3BlIG9mIHRoaXMgRkFRLgorICBWZXJ5IGJyaWVmbHksIHRoZSBvcmlnaW5hbCBwcm90b2NvbCBhbmQgZnJhbWV3b3JrIHdhcyBkZXNjcmliZWQKKyAgaW4gUkZDcyAxMTU1LTExNTcsIGFuZCBpcyBub3cga25vd24gYXMgU05NUHYxLgorCisgICAgUHJhY3RpY2FsIGV4cGVyaWVuY2Ugc2hvd2VkIHVwIHZhcmlvdXMgcHJvYmxlbXMgYW5kCisgIGRlZmljaWVuY2llcyB3aXRoIHRoaXMsIGFuZCBhIHJldmlzZWQgZnJhbWV3b3JrIHdhcyBkZXZlbG9wZWQgdG8KKyAgdHJ5IGFuZCBhZGRyZXNzIHRoZXNlLiAgVGhpcyB3YXMgZGVzY3JpYmVkIGluIFJGQ3MgMTQ0MS0xNDUyLCBhbmQKKyAga25vd24gYXMgIlNOTVB2MiBjbGFzc2ljIi4KKyAgVGhlIGNoYW5nZXMgcHJvcG9zZWQgaW5jbHVkZToKKworCSogbmV3IHdheXMgb2YgZGVmaW5pbmcgaW5mb3JtYXRpb24gKE1JQiBzdHJ1Y3R1cmUpCisJCShTTUksIFRleHR1YWwgY29udmVudGlvbnMsIGNvbmZvcm1hbmNlIHN0YXRlbWVudHMpCisJKiBuZXcgcHJvdG9jb2wgcGFja2V0IHR5cGVzIGFuZCB0cmFuc3BvcnQgbWFwcGluZ3MKKwkqIG5ldyBtZWNoYW5pc21zIGZvciBhZG1pbmlzdHJhdGlvbiBhbmQgc2VjdXJpdHkKKwkqIG1lY2hhbmlzbXMgZm9yIHJlbW90ZSBjb25maWd1cmF0aW9uCisKKyAgVW5mb3J0dW5hdGVseSwgd2hpbGUgbWFueSBvZiB0aGVzZSB3ZXJlIGdlbmVyYWxseSBhY2NlcHRlZCwgdGhlcmUKKyAgd2FzIHNvbWUgZGlzYWdyZWVtZW50IGluIHRoZXNlIGxhc3QgdHdvIGFyZWFzLCBzZWN1cml0eS9hZG1pbgorICBhbmQgcmVtb3RlIGNvbmZpZ3VyYXRpb24uICBUaGlzIHJlc3VsdGVkIGluIGEgbnVtYmVyIG9mIHZhcmlhbnRzIGFuZAorICBhbHRlcm5hdGl2ZSBwcm9wb3NhbHM6CisKKwlTTk1QdjJjCQlDb250YWlucyB0aGUgbmV3IHByb3RvY29sIGFuZCBNSUIgc3RydWN0dXJlIGVsZW1lbnRzLAorCQkJdXNpbmcgdGhlIGV4aXN0aW5nIFNOTVB2MSBhZG1pbmlzdHJhdGlvbiBzdHJ1Y3R1cmUuCisJCQlUaGlzIGlzIHRoZSBkZS1mYWN0byBTTk1QdjIgc3RhbmRhcmQgKGRlc2NyaWJlZCBpbgorCQkJUkZDcyAxOTAxLTE5MDgpLCBzdXBlcnNlZGluZyBTTk1QdjIgY2xhc3NpYywgYW5kIGlzCisJCQlrbm93biBhcyAiQ29tbXVuaXR5LWJhc2VkIFNOTVB2MiIgb3Igc2ltcGx5ICJTTk1QdjIiLgorCisKKwlTTk1QdjIgdXNlYwl9IEFsdGVybmF0aXZlIHByb3Bvc2FscyB0byBhZGRyZXNzIHRoZQorCVNOTVB2MioJCX0gbGltaXRhdGlvbnMgb2YgU05NUHYxIGFkbWluaXN0cmF0aW9uCisJCQl9IFRoZXNlIGFyZSBib3RoIHN1cGVyLXNldHMgb2YgU05NUHYyYworCisJCQkKKwlTTk1QLU5HCQlBbiBhdHRlbXB0IHRvIHJlYWNoIGFncmVlbWVudCBiZXR3ZWVuCisJCQl0aGUgcHJvcG9uZW50cyBvZiB1c2VjIGFuZCB2MnN0YXIuCisKKyAgVGhlIGZvcm1hbCBzdWNjZXNzb3IgdG8gdGhlIFNOTVAtTkcgd29yayBoYXMgYmVlbiB0ZXJtZWQgU05NUHYzLgorICBUaGlzIGhhcyBub3cgYmVlbiBlZmZlY3RpdmVseSBmaW5hbGlzZWQsIGFuZCBpcyBkZXNjcmliZWQgaW4gUkZDcworICAyNTcxLTI1NzUuICBUaGlzIGlzIGN1cnJlbnRseSBhIFByb3Bvc2VkIFN0YW5kYXJkLCBidXQgaXMgbGlrZWx5CisgIHRvIHByb2dyZXNzIHRvIGZ1bGwgU3RhbmRhcmQgaW4gdGhlIHJlbGF0aXZlbHkgbmVhciBmdXR1cmUuCisKKworCis8YSBuYW1lPSJXaGljaF92ZXJzaW9uc19vZl9TTk1QX2FyZV9zdXBwb3J0ZWRfaW5fdGhpc19wYWNrYWdlXyI+CitXaGljaCB2ZXJzaW9ucyBvZiBTTk1QIGFyZSBzdXBwb3J0ZWQgaW4gdGhpcyBwYWNrYWdlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgcGFja2FnZSBjdXJyZW50bHkgc3VwcG9ydHMgdGhlIG9yaWdpbmFsIFNOTVB2MSwgQ29tbXVuaXR5LWJhc2VkCisgIFNOTVB2MiAoaS5lLiBSRkNzIDE5MDEtMTkwOCksIGFuZCBTTk1QdjMgKGkuZS4gUkZDcyAyNTcxLTI1NzUpLgorICAgIFRoZSBhZ2VudCB3aWxsIHJlc3BvbmQgdG8gcmVxdWVzdHMgdXNpbmcgYW55IG9mIHRoZXNlIHByb3RvY29scywKKyAgYW5kIGFsbCB0aGUgdG9vbHMgdGFrZSBhIGNvbW1hbmQtbGluZSBvcHRpb24gdG8gZGV0ZXJtaW5lIHdoaWNoCisgIHZlcnNpb24gdG8gdXNlLgorCisgIFN1cHBvcnQgZm9yIFNOTVB2MiBjbGFzc2ljIChhLmsuYS4gIlNOTVB2MiBoaXN0b3JpYyIgLSBSRkNzIDE0NDEtMTQ1MikKKyAgd2FzIGRyb3BwZWQgd2l0aCB0aGUgNC4wIHJlbGVhc2Ugb2YgdGhlIFVDRC1zbm1wIHBhY2thZ2UuCisKKworCis8YSBuYW1lPSJDYW5fSV91c2VfU05NUHZfX3JlcXVlc3RzX3dpdGhfYW5fU05NUHZfX01JQl9fb3JfdmljZV92ZXJzYV9fIj4KK0NhbiBJIHVzZSBTTk1QdjEgcmVxdWVzdHMgd2l0aCBhbiBTTk1QdjIgTUlCIChvciB2aWNlIHZlcnNhKT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgWWVzLgorCisgICAgVGhlIHZlcnNpb24gb2YgdGhlIHN5bnRheCB1c2VkIHRvIGRlZmluZSBhIE1JQiBmaWxlCisgIGlzIGJldHRlciByZWZlcnJlZCB0byBhcyBTTUl2MSBvciBTTUl2MiwgYW5kIGlzIHB1cmVseQorICBjb25jZXJuZWQgd2l0aCBkZWZpbmluZyB0aGUgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZQorICB2YXJpb3VzIG1hbmFnZW1lbnQgb2JqZWN0cy4gIFRoaXMgaXMgKGFsbW9zdCkgY29tcGxldGVseQorICB1bnJlbGF0ZWQgdG8gdGhlIHZlcnNpb25zIG9mIHRoZSBwcm90b2NvbCBvcGVyYXRpb25zLgorICBTbyBpdCBpcyBxdWl0ZSByZWFzb25hYmxlIHRvIHVzZSBTTk1QdjEgcmVxdWVzdHMgb24KKyAgb2JqZWN0cyBkZWZpbmVkIHVzaW5nIFNNSXYyLCBvciBTTk1QdjIgKG9yIFNOTVB2MykKKyAgcmVxdWVzdHMgb24gb2JqZWN0cyBkZWZpbmVkIHVzaW5nIFNNSXYxLgorCisgICAgVGhlIG9uZSBleGNlcHRpb24gaXMgb2JqZWN0cyBvZiBzeW50YXggQ291bnRlcjY0LAorICB3aGljaCBhcmUgb25seSBhY2Nlc3NpYmxlIHVzaW5nIFNOTVB2MiBvciBoaWdoZXIuCisgIFNOTVB2MSByZXF1ZXN0cyB3aWxsIGVpdGhlciB0cmVhdCBzdWNoIG9iamVjdHMgYXMgYW4KKyAgZXJyb3IsIG9yIHNraXAgb3ZlciB0aGVtIGNvbXBsZXRlbHkuCisKKyAgCisKKzxhIG5hbWU9IldoZXJlX2Nhbl9JX2ZpbmRfbW9yZV9pbmZvcm1hdGlvbl9hYm91dF9uZXR3b3JrX21hbmFnZW1lbnRfIj4KK1doZXJlIGNhbiBJIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBuZXR3b3JrIG1hbmFnZW1lbnQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHNpdGVzIHdpdGggbmV0d29yayBtYW5hZ2VtZW50IGluZm9ybWF0aW9uIG9uCisgIHRoZSBXb3JsZCBXaWRlIFdlYi4gVGhyZWUgb2YgdGhlIG1vc3QgdXNlZnVsIGFyZQorCisgICAgICBodHRwOi8vd3d3LnNubXB3ZWIub3JnLworICAgICAgaHR0cDovL3d3dy5zbm1wbGluay5vcmcvCisgICAgICBodHRwOi8vd3d3Lm1pYmRlcG90LmNvbS8KKworICBUaGVyZSBhcmUgdHdvIFVzZW5ldCBuZXdzZ3JvdXBzIHdoaWNoIGFyZSByZWxldmFudC4KKwknY29tcC5kY29tLm5ldC1tYW5hZ2VtZW50JworCQl3aGljaCBkaXNjdXNzZXMgZ2VuZXJhbCBpc3N1ZXMgcmVsYXRpbmcgdG8gbmV0d29yayBtYW5hZ2VtZW50CisJJ2NvbXAucHJvdG9jb2xzLnNubXAnCisJCXdoaWNoIGlzIHNwZWNpZmljYWxseSBjb25jZXJuZWQgd2l0aCB1c2Ugb2YgU05NUCBpbiBwYXJ0aWN1bGFyCisKKyAgKHRob3VnaCB0aGVyZSBpcyBhIGxhcmdlIG92ZXJsYXAgYmV0d2VlbiB0aGVzZSB0d28gZ3JvdXBzKS4KKyAgVGhlIFNOTVAgZ3JvdXAgYWxzbyBoYXMgYW4gRkFRIChzcGxpdCBpbnRvIHR3byBwYXJ0cykgd2hpY2ggZGlzY3Vzc2VzIG1vcmUKKyAgZ2VuZXJhbCBpc3N1ZXMgcmVsYXRlZCB0byBTTk1QLCBpbmNsdWRpbmcgYm9va3MsIHNvZnR3YXJlLCBvdGhlciBzaXRlcywKKyAgaG93IHRvIGdldCBhbiBlbnRlcnByaXNlIG51bWJlciwgZXRjLCBldGMuCisgIFRoaXMgaXMgYXZhaWxhYmxlIGZyb20KKworICAgICAgZnRwOi8vcnRmbS5taXQuZWR1L3B1Yi91c2VuZXQvY29tcC5wcm90b2NvbHMuc25tcC8KKworICBvciB2aWEgYW55IG9mIHRoZSBXZWIgc2l0ZXMgYWJvdmUuCisKKworCis8YSBuYW1lPSJJc191Y2Rfc25tcF90aHJlYWRfc2FmZV8iPgorSXMgdWNkLXNubXAgdGhyZWFkIHNhZmU/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFN0cmljdGx5IHNwZWFraW5nLCBuby4gIEhvd2V2ZXIsIGl0IHNob3VsZCBiZSBwb3NzaWJsZSB0byB1c2UgdGhlCisgIGxpYnJhcnkgaW4gYSB0aHJlYWQtc2FmZSBtYW5uZXIuICBUaGlzIGlzIGNvdmVyZWQgaW4gZGV0YWlsIGluIHRoZSBmaWxlCisgIFJFQURNRS50aHJlYWQgKHNoaXBwZWQgd2l0aCB0aGUgc3RhbmRhcmQgZGlzdHJpYnV0aW9uKSwgYnV0IGNhbiBiZQorICBzdW1tYXJpc2VkIGFzIGZvbGxvd3M6CisKKyAgICAtCUNhbGwgJ3NubXBfc2Vzc19pbml0KCknIHByaW9yIHRvIGFjdGl2YXRpbmcgYW55IHRocmVhZHMuCisJVGhpcyByZWFkcyBpbiBhbmQgcGFyc2VzIE1JQiBpbmZvcm1hdGlvbiAod2hpY2ggaXNuJ3QgdGhyZWFkLXNhZmUpCisJYXMgd2VsbCBhcyBwcmVwYXJpbmcgYSBzZXNzaW9uIHN0cnVjdHVyZSBmb3Igc3Vic2VxdWVudCB1c2UuCisKKyAgICAtCU9wZW4gYW4gU05NUCBzZXNzaW9uIHVzaW5nICdzbm1wX3Nlc3Nfb3BlbigpJyB3aGljaCByZXR1cm5zIGFuCisJb3BhcXVlIHNlc3Npb24gaGFuZGxlLCB3aGljaCBpcyBlc3NlbnRpYWxseSBpbmRlcGVuZGVudCBvZiBhbnkKKwlvdGhlciBzZXNzaW9ucyAocmVnYXJkbGVzcyBvZiB0aHJlYWQpLgorCisgICAgLQlSZXNvdXJjZSBsb2NraW5nIGlzIG5vdCBoYW5kbGVkIHdpdGhpbiB0aGUgbGlicmFyeSwgYW5kIGlzIHRoZQorCXJlc3BvbnNpYmlsaXR5IG9mIHRoZSBtYWluIGFwcGxpY2F0aW9uLgorCisgIFRoZSBhcHBsaWNhdGlvbnMgYW5kIHRoZSBhZ2VudCBoYXZlIG5vdCBiZWVuIGRlc2lnbmVkIGZvciB0aHJlYWRlZCB1c2UuCisKKworCis8YSBuYW1lPSJBUFBMSUNBVElPTlMiPgorQVBQTElDQVRJT05TCis9PT09PT09PT09PT0KKworPGEgbmFtZT0iSG93X2RvX0lfYWRkX2FfTUlCXyI+CitIb3cgZG8gSSBhZGQgYSBNSUI/CistLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIGFjdHVhbGx5IHR3byBzZXBhcmF0ZSBxdWVzdGlvbnMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHlvdQorICBhcmUgcmVmZXJyaW5nIHRvIHRoZSB0b29scywgb3IgdGhlIGFnZW50IChvciBib3RoKS4KKyAgICBTZWUgdGhlIG5leHQgcXVlc3Rpb24gb3IgdGhlIG5leHQgc2VjdGlvbiByZXNwZWN0aXZlbHkuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9hZGRfYV9NSUJfdG9fdGhlX3Rvb2xzXyI+CitIb3cgZG8gSSBhZGQgYSBNSUIgdG8gdGhlIHRvb2xzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEZpcnN0bHksCisKKwljcCBNWS1NSUIudHh0IC91c3IvbG9jYWwvc2hhcmUvc25tcC9taWJzCisKKyAgICAgICAgICBvcgorCisgICAgICAgIG1rZGlyICRIT01FLy5zbm1wCisgICAgICAgIG1rZGlyICRIT01FLy5zbm1wL21pYnMKKwljcCBNWS1NSUIudHh0ICRIT01FLy5zbm1wL21pYnMKKworICBBbmQgdGhlbiwKKworCWV4cG9ydCBNSUJTPStNWS1NSUIKKworICAgICAgICAgIG9yIGFsdGVybmF0aXZlbHk6CisKKyAgICAgICAgZWNobyAibWlicyArTVktTUlCIiAmZ3Q7Jmd0OyAkSE9NRS8uc25tcC9zbm1wLmNvbmYKKworICBOb3RlIHRoYXQgeW91IG5lZWQgKmJvdGgqIHN0ZXBzLgorICBUaGUgZmlyc3QgY29tbWFuZCBjb3BpZXMgdGhlIGZpbGUgZGVmaW5pbmcgdGhlIG5ldyBNSUIgdG8gYQorICBleHBlY3RlZCBsb2NhdGlvbiBmb3IgTUlCIGZpbGVzLiAgVGhpcyBkZWZhdWx0cyB0bworICAvdXNyL2xvY2FsL3NoYXJlL3NubXAvbWlicyAob3IgUFJFRklYL3NoYXJlL3NubXAvbWlicyBpZiB0aGUgdGhlCisgIHN1aXRlIHdhcyBpbnN0YWxsZWQgaW50byBhIGRpZmZlcmVudCBiYXNlIGxvY2F0aW9uKS4gIFNvbWUKKyAgcmVhZHktcGFja2FnZWQgZGlzdHJpYnV0aW9ucyAoc3VjaCBhcyBMaW51eCBSUE0gcGFja2FnZXMpIG1heSBsb29rCisgIGZvciBNSUIgZmlsZXMgaW4gYSBkaWZmZXJlbnQgbG9jYXRpb24sIHN1Y2ggYXMgL2V0Yy9zbm1wL21pYnMgLSBwdXQKKyAgdGhlIG5ldyBmaWxlIGluIHRoaXMgZGlyZWN0b3J5IGluc3RlYWQuICBUaGlzIG1ha2VzIGl0IGF2YWlsYWJsZSBmb3IKKyAgZXZlcnlvbmUgb24gdGhlIHN5c3RlbS4KKyAgVGhlIHRvb2xzIHdpbGwgYWxzbyBsb29rIGZvciBtaWJzIGluIHlvdXIgcGVyc29uYWwgJEhPTUUvLnNubXAvbWlicworICBkaXJlY3RvcnksIGJ1dCB0aGlzIHdpbGwgb25seSB3b3JrIGZvciB5b3UuCisKKyAgVGhlIHNlY29uZCBjb21tYW5kIHRlbGxzIHRoZSB0b29scyB0byBsb2FkIGluIHRoaXMgbmV3IE1JQiBmaWxlIGFzIHdlbGwKKyAgYXMgdGhlIGRlZmF1bHQgc2V0LiAgIE5vdGUgdGhhdCB0aGUgdG9vbHMgZG8gKm5vdCogbG9hZCBldmVyeSBNSUIgZm91bmQKKyAgaW4gdGhlIGRpcmVjdG9yeSAtIHRoaXMgaXMgdG8gYXZvaWQgc2xvd2luZyB0aGVtIGRvd24gZXhjZXNzaXZlbHkgd2hlbgorICB0aGVyZSBpcyBhIGxhcmdlIGNvbGxlY3Rpb24gb2YgTUlCIGZpbGVzLiAgSWYgeW91IGRvIHdhbnQgdGhlIHRvb2xzIHRvCisgIGxvYWQgYWxsIHRoZSBNSUIgZmlsZXMsIHNldCB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSBNSUJTIHRvIHRoZSBzcGVjaWFsCisgIHZhbHVlICJBTEwiLgorCisgICAgIE5vdGUgdGhhdCB0aGUgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUgaXMgdGhlIG5hbWUgb2YgdGhlIE1JQiBtb2R1bGUsCisgICpub3QqIHRoZSBuYW1lIG9mIHRoZSBNSUIgZmlsZS4gICBUaGVzZSBhcmUgdHlwaWNhbGx5IHRoZSBzYW1lIChhcGFydAorICBmcm9tIHRoZSAudHh0IHN1ZmZpeCksIGJ1dCBpZiBpbiBkb3VidCwgY2hlY2sgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlLgorICBUaGUgdmFsdWUgdG8gdXNlIGlzIHRoZSB0b2tlbiBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIHdvcmQgREVGSU5JVElPTlMKKyAgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmaWxlLiAgT2YgY291cnNlLCBpZiB5b3UgbG9hZCAnQUxMJyBtaWJzLCB0aGVuIHRoaXMKKyAgZGlzdGluY3Rpb24gaXMgaXJyZWxldmFudC4KKworICAgIE1vc3Qgb2YgdGhlIHRvb2xzIChhcGFydCBmcm9tICdzbm1wdGFibGUnKSB3aWxsIHdvcmsgcXVpdGUgaGFwcGlseQorICB3aXRob3V0IGFueSBNSUIgZmlsZXMgYXQgYWxsLCBhcyBsb25nIGFzIHlvdSBhcmUgcHJlcGFyZWQgdG8gd29yayB3aXRoCisgIG51bWVyaWMgT0lEcyB0aHJvdWdob3V0LiAgVGhlIE1JQiBmaWxlcyBhcmUgb25seSB1c2VkIGZvciB0cmFuc2xhdGluZworICBiZXR3ZWVuIG51bWVyaWMgYW5kIHRleHR1YWwgZm9ybXMgZm9yIHF1ZXJpZXMgYW5kIHJlc3BvbnNlcy4KKyAgICBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciB0aGUgYWdlbnQgLSBzZWUgdGhlIEFHRU5UIHNlY3Rpb24gZm9yIGRldGFpbHMuCisKKworCis8YSBuYW1lPSJXaHlfY2FuX3RfSV9zZWVfYW55dGhpbmdfZnJvbV90aGVfYWdlbnRfIj4KK1doeSBjYW4ndCBJIHNlZSBhbnl0aGluZyBmcm9tIHRoZSBhZ2VudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbiBnZW5lcmFsIGNhdXNlcyBvZiBwcm9ibGVtcyByZXRyaWV2aW5nIGluZm9ybWF0aW9uCisgIGZyb20gdGhlIGFnZW50LiAgIEZpcnN0bHksIHRoZSB2YXJpYWJsZSAob3IgdmFyaWFibGVzKSBzcGVjaWZpZWQgbWF5CisgIG5vdCBiZSByZWNvZ25pc2VkIGJ5IHRoZSB0b29scyBhcyB2YWxpZCBuYW1lcy4gIEluIHRoaXMgY2FzZSwgdGhlCisgIHRvb2xzIHdpbGwgdHlwaWNhbGx5IHJlamVjdCB0aGUgcmVxdWVzdCB3aXRob3V0IGV2ZXIgY29udGFjdGluZyB0aGUKKyAgcmVtb3RlIGFnZW50LgorCisgICAgQWx0ZXJuYXRpdmVseSwgdGhlIHRvb2wgbWF5IGJlIGhhcHB5IHdpdGggdGhlIHJlcXVlc3QsIGJ1dCB0aGUgYWdlbnQKKyAgZG9lcyBub3QgcmV0dXJuIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlKHMpLiAgSXQgbWF5IHJldHVybiBhbiBleHBsaWNpdAorICBlcnJvciBtZXNzYWdlIGluc3RlYWQsIG9yIHRoZSByZXF1ZXN0IG1heSB0aW1lIG91dCB3aXRob3V0IGFueSByZXNwb25zZQorICBiZWluZyBzZW50IGJhY2sgYXQgYWxsLiAgVGhlIG5leHQgZmV3IGVudHJpZXMgbG9vayBhdCB0aGVzZSBpbiBtb3JlIGRldGFpbC4KKworCisKKzxhIG5hbWU9IldoeV9jYW5fdF9JX3NlZV92YWx1ZXNfaW5fdGhlX19JTlNFUlRfRU5URVJQUklTRV9IRVJFX190cmVlXyI+CitXaHkgY2FuJ3QgSSBzZWUgdmFsdWVzIGluIHRoZSAmbHQ7SU5TRVJUIEVOVEVSUFJJU0UgSEVSRSZndDsgdHJlZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSGF2aW5nIHNhaWQgdGhhdCB0aGVyZSBhcmUgdHdvIG1haW4gcmVhc29ucyBmb3Igbm90IGdldHRpbmcgYSByZXNwb25zZSwKKyAgdGhlIG1vc3QgbGlrZWx5IGNhdXNlIG9mIHRoaXMgcHJvYmxlbSBpcyBhY3R1YWxseSBzb21ldGhpbmcgZWxzZSBhZ2Fpbi4KKworICBUaGUgJ3NubXB3YWxrJyBjb21tYW5kIHRha2VzIGEgcG9pbnQgaW4gdGhlIG92ZXJhbGwgTUlCIHRyZWUsIGFuZCB0cmllcworICB0byBkaXNwbGF5IGFsbCB0aGUgdmFsdWVzIHRoYXQgbGllIHdpdGhpbiB0aGlzIHN1YnRyZWUuICBIb3dldmVyLCBpdAorICBhY3R1YWxseSBkb2VzIHRoaXMgYnkgaXNzdWluZyBhIHNlcmllcyBvZiAiZ2V0bmV4dCIgcmVxdWVzdHMsIHVudGlsCisgIHRoZSB2YXJpYWJsZSByZXR1cm5lZCBsaWVzIG91dHNpZGUgdGhlIHN1YnRyZWUgb2YgaW50ZXJlc3QuICBJZiB0aGUKKyAgdmVyeSBmaXJzdCByZXF1ZXN0IHJldHVybnMgc3VjaCBhbiB1bmRlc2lyZWQgdmFsdWUsIHRoZW4gdGhlIGNvbW1hbmQKKyAgd2lsbCB0ZXJtaW5hdGUsIHdpdGhvdXQgaGF2aW5nIGRpc3BsYXllZCBhbnl0aGluZyBhdCBhbGwuCisKKyAgICBJZiBhbiBleHBpY2l0IHN0YXJ0aW5nIHBvaW50IGlzIGdpdmVuIHRvICdzbm1wd2FsaycsIHRoZW4gaXQgaXMgcmVhc29uYWJseQorICBjbGVhciB3aGF0IGlzIGhhcHBlbmluZywgYW5kIHRoYXQgdGhlcmUgaXMgc2ltcGx5IG5vdGhpbmcgaW4gdGhlIHN1YnRyZWUKKyAgc3BlY2lmaWVkLiAgSG93ZXZlciwgaWYgJ3NubXB3YWxrJyBpcyBjYWxsZWQgd2l0aG91dCBnaXZpbmcgYW4gZXhwbGljaXQKKyAgc3RhcnRpbmcgcG9pbnQsIHRoZW4gaXQgd2lsbCBkaXNwbGF5IHRoZSBjb250ZW50cyBvZiB0aGUgJ21pYi0yJyBzdWJ0cmVlLgorICBJdCB3aWxsIG5vdCBhdHRlbXB0IHRvIHRyYXZlcnNlIGFueSAncHJpdmF0ZS5lbnRlcnByaXNlJyBzdWJ0cmVlLCBzdWNoIGFzCisgIHRoZSBVQ0Qtc3BlY2lmaWMgb2JqZWN0cyAoaW5jbHVkaW5nIGFueSBsb2NhbCBleHRlbnNpb25zKS4KKworICAgIFRvIHdhbGsgdGhlIHdob2xlIHRyZWUsIHNwZWNpZnkgYSBzdGFydGluZyBwb2ludCBvZiAnLmlzbycKKyAgVG8gd2FsayBhIHNwZWNpZmljIGVudGVycHJpc2Ugc3VidHJlZSwgc3BlY2lmeSB0aGUgcm9vdCBvZiB0aGlzIGFzCisgIHRoZSBzdGFydGluZyBwb2ludCAtIGUuZzoKKworCXNubXB3YWxrIC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHVjZGF2aXMKKyAKKyAgT3IsIG9mIGNvdXJzZSwgeW91IGNhbiB3YWxrIGEgc2VsZWN0ZWQgcG9ydGlvbiBvZiBhbiBlbnRlcnByaXNlIHN1YnRyZWUKKyAgYnkgc3BlY2lmeWluZyB0aGUgYXBwcm9wcmlhdGUgc3RhcnRpbmcgcG9pbnQgLSBlLmc6CisKKwlzbm1wd2FsayAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCB1Y2RhdmlzLnZlcnNpb24KKyAgCisgIElmIHlvdSBzdGlsbCBjYW4ndCBzZWUgYW55IGluZm9ybWF0aW9uLCBrZWVwIHJlYWRpbmcuICBUaGUgbmV4dCBmZXcKKyAgcXVlc3Rpb25zIHdpbGwgcHJvYmFibHkgaGVscCB5b3UuCisKKworCis8YSBuYW1lPSJSZXF1ZXN0c19hbHdheXNfc2VlbV90b190aW1lb3V0X19hbmRfZG9uX3RfZ2l2ZV9tZV9hbnl0aGluZ19iYWNrX19fV2h5XyI+CitSZXF1ZXN0cyBhbHdheXMgc2VlbSB0byB0aW1lb3V0LCBhbmQgZG9uJ3QgZ2l2ZSBtZSBhbnl0aGluZyBiYWNrLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBwb3NzaWJsZSBjYXVzZXMgb2YgdGhpcy4KKworICBUaGUgbW9zdCBsaWtlbHkgYXJlIHRoZSBhZ2VudCBhY2Nlc3MgY29udHJvbCBzZXR0aW5ncyAod2hvIGlzIGFsbG93ZWQKKyAgYWNjZXNzIGJ5IHRoZSBhZ2VudCBpdHNlbGYpLCBvciBmaXJld2FsbC9wYWNrZXQgZmlsdGVyaW5nIHNldHRpbmdzCisgICh3aG8gaXMgYWxsb3dlZCBhY2Nlc3MgYnkgdGhlIHVuZGVybHlpbmcgb3BlcmF0aW5nIHN5c3RlbSkuCisKKyAgQSBmdWxsZXIgbGlzdCBvZiBwb3NzaWJsZSBjYXVzZXMgKHdpdGggaW5kaWNhdGlvbnMgb2YgaG93IHRvIGNoZWNrCisgIGZvciBlYWNoKSBpcyBhcyBmb2xsb3dzOgorICAKKwktIGlzIHRoZSBtYWNoaW5lIHlvdSBhcmUgcXVlcnlpbmcgdXAgYW5kIHJ1bm5pbmc/CisJCShEb2VzIGl0IHJlc3BvbmQgdG8gJ3BpbmcnIG9yIHNpbWlsYXIgcmVxdWVzdHM/KQorCS0gaXMgdGhlcmUgYW4gU05NUCBhZ2VudCBydW5uaW5nIG9uIGl0PworCQkoUnVuICdwcyAtZWYgfCBncmVwIHNubXAnIG9yICduZXRzdGF0IC1hbiB8IGdyZXAgMTYxJykKKwktIGFyZSB0aGUgcmVxdWVzdHMgYXJyaXZpbmcsIG9yIGJlaW5nIGJsb2NrZWQgKGUuZy4gYnkgYSBmaXJld2FsbCk/CisJCShSZXN0YXJ0IHRoZSBhZ2VudCB1c2luZyAnc25tcGQgLWYgLUwgLWQnCisJCSBhbmQgc2VlIGlmIGl0IHNob3dzIHRoZSBpbmNvbWluZyBwYWNrZXQgZHVtcHMpCisJLSBpcyB0aGUgYWdlbnQgc2ltcGx5IHRha2luZyBhIGxvbmcgdGltZSB0byByZXNwb25kPworCQkoVGhlICdzbm1wZCAtZiAtTCAtZCcgY29tbWFuZCBzaG91bGQgc2hvdyBhIHNlcmllcyBvZgorIAkJIGluY29taW5nIFBEVXMsIGZvbGxvd2VkIGV2ZW50dWFsbHkgYnkgdGhlIG91dGdvaW5nIFBEVXMuCisJCSBUcnkgdGhlIHJlcXVlc3QgYWdhaW4gd2l0aCBhIGxvbmcgdGltZW91dCB2YWx1ZSwKKwkJIGUuZy4gJ3NubXBjbWQgLXQgMTIwIC4uLi4nKQorCS0gZG9lcyB0aGUgYWdlbnQncyBjb250cm9sIHNldHRpbmdzIGFsbG93IHRoaXMgcmVxdWVzdD8KKwkJKFRoZSAnc25tcGQgLWYgLUwgLWQnIGNvbW1hbmQgd2lsbCBzaG93IGEgc2VyaWVzIG9mCisgCQkgaW5jb21pbmcgUERVcyB3aXRoICpubyogY29ycmVzcG9uZGluZyBvdXRnb2luZyBQRFVzKQorCisgIE5vdGUgdGhhdCBpZiB0aGUgYWdlbnQgaXMgbm90IGNvbmZpZ3VyZWQgdG8gYWxsb3cgYWNjZXNzIGZvciBhCisgIHBhcnRpY3VsYXIgY29tbXVuaXR5LCB0aGVuIHRoZSBTTk1QIHNwZWNpZmljYXRpb24gZGVjbGFyZXMgdGhhdCBubworICBlcnJvciByZXNwb25zZSBzaG91bGQgYmUgc2VudCBhdCBhbGwuICBUaGUgTmV0LVNOTVAgdG9vbHMgd2lsbCByZXRyeQorICB0aGUgcmVxdWVzdCBhIG51bWJlciBvZiB0aW1lcywgYmVmb3JlIHJlcG9ydGluZyBhIHRpbWVvdXQgZXJyb3IuCisKKyAgICBJZiB0aGUgYWdlbnQgaXMgY29uZmlndXJlZCB0byBhbGxvdyBwYXJ0aWFsIGFjY2VzcyBmb3IgYSBnaXZlbgorICBjb21tdW5pdHksIHRoZW4gcmVxdWVzdHMgdGhhdCBmYWxsIG91dHNpZGUgdGhpcyBhdXRob3Jpc2VkIGFjY2VzcworICAqd2lsbCogcmVzdWx0IGluIGFuIGVycm9yIHJlc3BvbnNlLgorICAgIChTTk1QIGFnZW50cyBjYW4gYmUgdmVyeSBmdXNzeSBvdmVyIHdobyB0aGV5IHRhbGsgdG8hKQorCisgICAgU2VlIHRoZSBlbnRyaWVzIG9uIGFjY2VzcyBjb250cm9sIGluIHRoZSBBR0VOVCBzZWN0aW9uIGZvciBob3cgdG8KKyAgY29uZmlndXJlIHRoZSBOZXQtU05NUCBhZ2VudCB0byBhbGxvdyBzdWl0YWJsZSBhY2Nlc3MuICBGb3Igb3RoZXIKKyAgdmVuZG9ycycgYWdlbnRzLCB5b3Ugd2lsbCBuZWVkIHRvIGNvbnN1bHQgdGhlIHJlbGV2YW50IGRvY3VtZW50YXRpb24uCisKKworCis8YSBuYW1lPSJJX2Nhbl9zZWVfdGhlX3N5c3RlbV9ncm91cF9fYnV0X25vdGhpbmdfZWxzZV9fX1doeV8iPgorSSBjYW4gc2VlIHRoZSBzeXN0ZW0gZ3JvdXAsIGJ1dCBub3RoaW5nIGVsc2UuICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgcHJvYmFibHkgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHF1ZXN0aW9uIC0gYSBwcm9ibGVtIHdpdGgKKyAgdGhlIGFjY2VzcyBjb25maWd1cmF0aW9uIG9mIHRoZSBhZ2VudC4gIE1hbnkgcHJlLWNvbmZpZ3VyZWQgc3lzdGVtcworICAoc3VjaCBhcyBtb3N0IExpbnV4IGRpc3RyaWJ1dGlvbnMpIHdpbGwgb25seSBhbGxvdyBhY2Nlc3MgdG8gdGhlIHN5c3RlbQorICBncm91cCBieSBkZWZhdWx0LCBhbmQgbmVlZCB0byBiZSBjb25maWd1cmVkIHRvIGVuYWJsZSBtb3JlIGdlbmVyYWwgYWNjZXNzLgorCisgICAgVGhlIGVhc2llc3Qgd2F5IHRvIHRlc3QgdGhpcyBpcyB0byB0cnkgYSBHRVRORVhUIHJlcXVlc3QsIHRoYXQgb3VnaHQKKyAgdG8gcmV0dXJuIHRoZSBlbnRyeSBvZiBpbnRlcmVzdC4KKyAgZS5nLgorCXNubXBnZXRuZXh0IC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHVjZGF2aXMudmVyc2lvbi52ZXJzaW9uVGFnCisgIGluc3RlYWQgb2YKKwlzbm1wZ2V0ICAgICAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCB1Y2RhdmlzLnZlcnNpb24udmVyc2lvblRhZy4wCisKKyAgSWYgdGhlIGFnZW50IHJlc3BvbmRzIHdpdGggImVuZCBvZiBNSUIiIG9yIGEgZGlmZmVyZW50IG9iamVjdCwgdGhlbgorICBlaXRoZXIgdGhlIGFnZW50IGRvZXNuJ3QgaW1wbGVtZW50IHRoYXQgcGFydGljdWxhciBvYmplY3QgYXQgYWxsLCBvcgorICB0aGUgYWNjZXNzIGNvbnRyb2wgd29uJ3QgYWxsb3cgeW91IGFjY2VzcyB0byBpdC4KKworICBTZWUgdGhlIGVudHJpZXMgb24gYWNjZXNzIGNvbnRyb2wgaW4gdGhlIEFHRU5UIHNlY3Rpb24gZm9yIGhvdyB0bworICBjb25maWd1cmUgdGhlIE5ldC1TTk1QIGFnZW50LCBvciBjb25zdWx0IHRoZSBhZ2VudCdzIG93biBkb2N1bWVudGF0aW9uLgorCisKKworPGEgbmFtZT0iVGhlX2FnZW50X3dvcmtlZF9mb3JfYV93aGlsZV9fdGhlbl9zdG9wcGVkX3Jlc3BvbmRpbmdfX19XaHlfIj4KK1RoZSBhZ2VudCB3b3JrZWQgZm9yIGEgd2hpbGUsIHRoZW4gc3RvcHBlZCByZXNwb25kaW5nLiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBc3N1bWluZyB0aGF0IHRoZSBhZ2VudCBoYXNuJ3QgY3Jhc2hlZCBjb21wbGV0ZWx5LCB0aGUgbW9zdCBsaWtlbHkKKyAgZXhwbGFuYXRpb24gaXMgdGhhdCBpdCdzIHNpbXBseSBvdmVybG9hZGVkLCBhbmQgaXMgdGFraW5nIGxvbmdlciB0bworICByZXNwb25kIHRoYW4gdGhlIHF1ZXJ5aW5nIHRvb2wgaXMgd2FpdGluZy4gIFNpbmNlIHRoZSBhZ2VudCBoYW5kbGVzCisgIGVhY2ggcmVxdWVzdCBpbiB0dXJuLCB3aXRob3V0IHJlZ2FyZCB0byBlYXJsaWVyIGFjdGl2aXR5LCBhbmQgbW9zdAorICB0b29scyB3aWxsIHJldHJ5IGEgcmVxdWVzdCB3aGVuIGl0IHRpbWVzIG91dCwgdGhlIGxpc3Qgb2Ygb3V0c3RhbmRpbmcKKyAgcmVxdWVzdHMgY2FuIGdyb3cgbG9uZ2VyIGFuZCBsb25nZXIuCisKKyAgICBUbyBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIHRoZSBjYXVzZSBvciBub3QsIHRyeSBsZWF2aW5nIHRoZQorICBhZ2VudCB1bmRpc3R1cmJlZCBmb3IgYSB3aGlsZSwgYW5kIHRoZW4gcHJvYmUgaXQgdXNpbmcgYSBsb25nZXIKKyAgdGltZW91dCAoZS5nLiAnLXQgMTIwJykuICBUaGlzIHNob3VsZCBnaXZlIHRoZSBhZ2VudCB0aW1lIHRvIGhhbmRsZQorICBlYWNoIHJlcXVlc3QgZmlyc3QgdGltZSByb3VuZCwgYW5kIGF2b2lkcyBvdmVybG9hZGluZyBpdCB3aXRoCisgIGR1cGxpY2F0ZSByZXF1ZXN0cy4KKworICBUaGlzIGlzIG5vdCBhIGZ1bGwgc29sdXRpb24sIG9mIGNvdXJzZSwgYnV0IGF0IGxlYXN0IGl0IHNob3VsZAorICBhbGxvdyB5b3UgdG8gaXNvbGF0ZSB0aGUgb2ZmZW5kaW5nIHBvcnRpb24gb2YgdGhlIHRyZWUuIFRoZQorICBkZXZlbG9wZXJzIG1heSB0aGVuIGJlIGFibGUgdG8gb2ZmZXIgYSBtb3JlIGxvbmctdGVybSBzb2x1dGlvbi4KKworCisKKzxhIG5hbWU9IlJlcXVlc3RpbmdfYW5fb2JqZWN0X2ZhaWxzX3dpdGhfX1Vua25vd25fT2JqZWN0X0lkZW50aWZpZXJfX19XaHlfIj4KK1JlcXVlc3RpbmcgYW4gb2JqZWN0IGZhaWxzIHdpdGggIlVua25vd24gT2JqZWN0IElkZW50aWZpZXIiICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSWYgYSBnZW5lcmFsIHNubXB3YWxrIHNob3dzIHRoZSBlbnRyeSwgYnV0IGFza2luZyBmb3IgaXQgbW9yZQorICBzcGVjaWZpY2FsbHkgZ2l2ZXMgYSAic3ViLWlkZW50aWZpZXIgbm90IGZvdW5kOiIgb3IgIlVua25vd24gT2JqZWN0CisgIElkZW50aWZpZXIiIGVycm9yLCB0aGVuIHRoYXQncyBhIHByb2JsZW0gd2l0aCB0aGUgdG9vbCwgcmF0aGVyIHRoYW4KKyAgdGhlIGFnZW50LgorCisgICAgRmlyc3RseSwgbWFrZSBzdXJlIHRoYXQgeW91J3JlIGFza2luZyBmb3IgdGhlIG9iamVjdCBieSB0aGUgcmlnaHQgbmFtZS4KKyAgT2JqZWN0IGRlc2NyaXB0b3JzIGFyZSBjYXNlLXNlbnNpdGl2ZSwgc28gYXNraW5nIGZvciAnc3lzdXB0aW1lJyB3aWxsCisgIG5vdCBiZSByZWNvZ25pc2VkLCBidXQgJ3N5c1VwVGltZScgd2lsbC4KKworICAgIFNlY29uZGx5LCB0aGUgb2JqZWN0IG1heSBiZSBkZWZpbmVkIGluIGEgTUlCIHRoYXQgaGFzbid0IGJlZW4gbG9hZGVkLgorICBUcnkgbG9hZGluZyBpbiBhbGwgdGhlIE1JQiBmaWxlczoKKworCXNubXBnZXQgLW0gQUxMIC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c1VwVGltZS4wCisKKyAgKHRob3VnaCBpZiBzbm1wd2FsayB0cmFuc2xhdGVzIGl0IE9LLCB0aGF0J3MgbGVzcyBsaWtlbHkgdG8gYmUgdGhlIGNhdXNlKS4KKworICAgIFRoaXJkbHksIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIFVDRCBzb2Z0d2FyZSBleHBlY3RlZCAiZnVsbCIgcGF0aHMKKyAgZm9yIG9iamVjdCBuYW1lcywgZWl0aGVyIGJhc2VkIGF0IHRoZSByb290IG9mIHRoZSB3aG9sZSBNSUIgdHJlZQorICAoIi5pc28ub3JnLmRvZC5pbnRlcm5ldC5tZ210Lm1pYi0yLnN5c3RlbS5zeXNVcFRpbWUiKSBvciB0aGUgJ21pYi0yJworICBzdWJ0cmVlICgic3lzdGVtLnN5c1VwVGltZSIpLiAgVHJ5OgorICAKKwlzbm1wZ2V0IC12MSAtYyBwdWJsaWMgbXlob3N0IHN5c3RlbS5zeXNVcFRpbWUuMAorCisgIFRoZXNlIGVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIHRvb2xzIG1heSB0YWtlIGEgY29tbWFuZC1saW5lIG9wdGlvbiAnLVInCisgIG9yICctSVInIChkZXBlbmRpbmcgb24gdmludGFnZSkgdG8gaW52b2tlIHRoaXMgInJhbmRvbS1hY2Nlc3MiIG1vZGUuCisgIE5vdGUgdGhhdCBzbm1wdHJhbnNsYXRlIHN0aWxsIHJlcXVpcmVzICJyYW5kb20tYWNjZXNzIiB0byBiZSBzcGVjaWZpZWQKKyAgZXhwbGljaXRseSAtIGFsbCBvdGhlciBjb21tYW5kIHRvb2xzIG5vdyB1c2UgdGhpcyBtb2RlIGJ5IGRlZmF1bHRzLgorCisgIEFsbCB2ZXJzaW9ucyBvZiB0aGUgVUNEIGFuZCBOZXQtU05NUCB0b29scyBhY2NlcHQgdGhlIHN5bnRheAorCisJc25tcGdldCAtdjEgLWMgcHVibGljIG15aG9zdCBSRkMxMjEzLU1JQjpzeXNVcFRpbWUuMAorCisgIHRvIGRlbm90ZSBhIHBhcnRpY3VsYXIgb2JqZWN0IGluIGEgc3BlY2lmaWMgTUlCIG1vZHVsZS4gIE5vdGUgdGhhdCB0aGlzCisgIHVzZXMgdGhlIG5hbWUgb2YgdGhlICptb2R1bGUqLCBub3QgdGhlIG5hbWUgb2YgdGhlIGZpbGUuICBTZWUgdGhlIHNlY29uZAorICBxdWVzdGlvbiBpbiB0aGlzIHNlY3Rpb24gZm9yIHRoZSBkaXN0aW5jdGlvbi4KKworCisKKzxhIG5hbWU9IldoeV9kb19JX2dldF9fbm9TdWNoTmFtZV9fd2hlbl9hc2tpbmdfZm9yX19zeXNVcFRpbWVfX19vcl9zaW1pbGFyX18iPgorV2h5IGRvIEkgZ2V0ICJub1N1Y2hOYW1lIiB3aGVuIGFza2luZyBmb3IgInN5c1VwVGltZSIgKG9yIHNpbWlsYXIpPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBvc3NpYmxlIGNhdXNlcyBvZiB0aGlzIChzY2F0dGVyZWQgdGhyb3VnaG91dAorICB0aGlzIEZBUSwgc28ga2VlcCByZWFkaW5nISkuICAgQnV0IG9uZSBvZiB0aGUgbW9zdCBsaWtlbHkgc25hcmVzIGZvcgorICB0aGUgdW53YXJ5IGlzIGZvcmdldHRpbmcgdGhlIGluc3RhbmNlIHN1YmlkZW50aWZpZXIgZm9yICdub24tdGFibGUnCisgIG9iamVjdHMuICBJZiB5b3Ugd2FsayB0aGUgJ3N5c3RlbScgdHJlZSwgeW91J2xsIG5vdGljZSB0aGF0IGFsbCB0aGUKKyAgcmVzdWx0cyAoYXBhcnQgZnJvbSB0aGUgc3lzT1JUYWJsZSksIGhhdmUgYSAnLjAnIGF0IHRoZSBlbmQgb2YgdGhlIE9JRC4KKyAgVGhpcyBpcyB0aGUgImluc3RhbmNlIHN1Yi1pZGVudGlmaWVyIiAtIHdoaWNoICptdXN0KiBiZSBpbmNsdWRlZCBmb3IKKyAgYSBHRVQgcmVxdWVzdC4KKyAgICAgQ29tcGFyZSB0aGUgZm9sbG93aW5nOgorCisJJCBzbm1wZ2V0IC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c1VwVGltZQorCUVycm9yIGluIHBhY2tldAorCVJlYXNvbjogKG5vU3VjaE5hbWUpIFRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgbmFtZSBpbiB0aGlzIE1JQi4KKwlUaGlzIG5hbWUgZG9lc24ndCBleGlzdDogc3lzdGVtLnN5c1VwVGltZQorCSQgc25tcGdldCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXNVcFRpbWUuMAorCXN5c3RlbS5zeXNVcFRpbWUuMCA9IFRpbWV0aWNrczogKDY5MTg5MjcxKSA4IGRheXMsIDA6MTE6MzIuNzEKKworICBUaGlzIGlzIGEgbGl0dGxlIGxlc3Mgb2JzY3VyZSB3aGVuIHVzaW5nIFNOTVB2MmMgb3IgdjMgcmVxdWVzdHM6CisKKwkkIHNubXBnZXQgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCBzeXNVcFRpbWUKKwlzeXN0ZW0uc3lzVXBUaW1lID0gTm8gU3VjaCBJbnN0YW5jZSBjdXJyZW50bHkgZXhpc3RzCisKKworCis8YSBuYW1lPSJXaHlfZG9fSV9zb21ldGltZXNfZ2V0X19FbmRfb2ZfTUlCX193aGVuX3dhbGtpbmdfYV90cmVlX19hbmRfc29tZXRpbWVzX25vdF8iPgorV2h5IGRvIEkgc29tZXRpbWVzIGdldCAiRW5kIG9mIE1JQiIgd2hlbiB3YWxraW5nIGEgdHJlZSwgYW5kIHNvbWV0aW1lcyBub3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgZGVwZW5kcyBvbiB3aGljaCBNSUIgbW9kdWxlcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBhZ2VudCB5b3UgYXJlCisgIHF1ZXJ5aW5nIGFuZCB3aGF0IHlvdSdyZSBhc2tpbmcgZm9yLgorCisgIFJlY2FsbCB0aGF0IGEgdHJlZSBpcyB3YWxrZWQgYnkgcmVwZWF0ZWRseSBhc2tpbmcgZm9yICJ0aGUgbmV4dCBlbnRyeSIgdW50aWwKKyAgYWxsIHRoZSB2YWx1ZXMgdW5kZXIgdGhhdCB0cmVlIGhhdmUgYmVlbiByZXRyaWV2ZWQuICBIb3dldmVyLCB0aGUgYWdlbnQgaGFzCisgIG5vIGlkZWEgdGhhdCB0aGlzIGlzIHdoYXQncyBoYXBwZW5pbmcgLSBhbGwgaXQgc2VlcyBpcyBhIHJlcXVlc3QgZm9yICJ0aGUKKyAgbmV4dCBlbnRyeSBhZnRlciBYIi4KKworICBJZiB0aGUgb2JqZWN0IFggaGFwcGVucyB0byBiZSB0aGUgbGFzdCBlbnRyeSBpbiBhIHN1Yi10cmVlLCB0aGUgYWdlbnQgd2lsbAorICBwcm92aWRlIHRoZSBuZXh0IG9iamVjdCBzdXBwb3J0ZWQgKGFzIHJlcXVlc3RlZCkgZXZlbiB0aG91Z2ggdGhpcyB3aWxsIGJlCisgIGluIGEgZGlmZmVyZW50IHN1YnRyZWUuICBJdCdzIHVwIHRvIHRoZSBxdWVyeWluZyB0b29sIHRvIHJlY29nbmlzZSB0aGF0CisgIHRoaXMgbGFzdCByZXN1bHQgbGllcyBvdXRzaWRlIHRoZSBhcmVhIG9mIGludGVyZXN0LCBhbmQgc2ltcGx5IGRpc2NhcmQgaXQuCisKKyAgSWYgdGhlIG9iamVjdCBYIGhhcHBlbnMgdG8gYmUgdGhlIGxhc3QgZW50cnkgc3VwcG9ydGVkIGJ5IHRoZSBhZ2VudCwgaXQKKyAgZG9lc24ndCBoYXZlIGFub3RoZXIgb2JqZWN0IHRvIHByb3ZpZGUsIHNvIHJldHVybnMgYW4gImVuZCBvZiBNSUIiCisgIGluZGljYXRpb24uICBUaGUgTmV0LVNOTVAgdG9vbHMgcmVwb3J0IHRoaXMgd2l0aCB0aGUgbWVzc2FnZSBhYm92ZS4KKworICBCdXQgaW4gZWl0aGVyIGNhc2UsIHRoZSBhY3R1YWwgaW5mb3JtYXRpb24gcHJvdmlkZWQgd2lsbCBiZSB0aGUgc2FtZS4KKworCisKKzxhIG5hbWU9IklfY2Fubm90X3NldF9hbnlfdmFyaWFibGVzX2luX3RoZV9NSUJfIj4KK0kgY2Fubm90IHNldCBhbnkgdmFyaWFibGVzIGluIHRoZSBNSUIuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhlcmUgYXJlIHRocmVlIHBvc3NpYmxlIHJlYXNvbnMgZm9yIHRoaXM6CisKKyAgVGhlIG1ham9yaXR5IG9mIE1JQiBvYmplY3RzIGFyZSBkZWZpbmVkIGFzICJyZWFkLW9ubHkiIGFuZCBpbmhlcmVudGx5CisgIGNhbm5vdCBiZSBjaGFuZ2VkIHZpYSBTRVQgcmVxdWVzdHMuCisKKyAgT2YgdGhvc2UgdGhhdCBjYW4gaW4gcHJpbmNpcGxlIGJlIGNoYW5nZWQsIG5vdCBhbGwgaGF2ZSBiZWVuIGltcGxlbWVudGVkCisgIGFzIHN1Y2ggaW4gdGhpcyBhZ2VudC4KKworICBFdmVuIGlmIFNFVCBzdXBwb3J0IGhhcyBiZWVuIGltcGxlbWVudGVkLCB0aGUgYWdlbnQgbWF5IG5vdCBiZSBjb25maWd1cmVkCisgIHRvIGFsbG93IHdyaXRlIGFjY2VzcyB0byB0aGlzIG9iamVjdC4KKworICBUaGUgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgc2hpcHBlZCB3aXRoIHRoZSBiYXNpYyBkaXN0cmlidXRpb24gb25seQorICBhbGxvd3Mgd3JpdGUgYWNjZXNzIGZvciB0aGUgbG9jYWwgaG9zdCBpdHNlbGYgKGFuZCBhIHN1aXRhYmxlIGNvbW11bml0eQorICBuYW1lIG11c3QgYmUgY29uZmlndXJlZCBmaXJzdCkuCisgICAgUmVhZHktaW5zdGFsbGVkIGRpc3RyaWJ1dGlvbnMgKHN1Y2ggYXMgdGhvc2Ugc2hpcHBlZCB3aXRoIExpbnV4KSB0ZW5kCisgIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aCByZWFkLW9ubHkgYWNjZXNzIHRvIHBhcnQgb2YgdGhlIG1pYiB0cmVlICh0eXBpY2FsbHkKKyAganVzdCB0aGUgc3lzdGVtIGdyb3VwKSBhbmQgbm8gd3JpdGUgYWNjZXNzIGF0IGFsbC4KKworICBUbyBjaGFuZ2UgdGhpcywgeW91IHdpbGwgbmVlZCB0byBzZXQgdXAgdGhlIGFnZW50J3MgYWNjZXNzIGNvbnRyb2wKKyAgY29uZmlndXJhdGlvbi4gIFNlZSB0aGUgQUdFTlQgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgTm90ZSB0aGF0IG5laXRoZXIgdGhlIGNvbW11bml0eSBzdHJpbmcgInB1YmxpYyIgbm9yICJwcml2YXRlIiBjYW4gYmUKKyAgdXNlZCB0byBzZXQgdmFyaWFibGVzIGluIGEgdHlwaWNhbCBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCisKKworCis8YSBuYW1lPSJWYXJpYWJsZXNfc2VlbV90b19kaXNhcHBlYXJfd2hlbl9JX3RyeV90b19zZXRfdGhlbV9fX1doeV8iPgorVmFyaWFibGVzIHNlZW0gdG8gZGlzYXBwZWFyIHdoZW4gSSB0cnkgdG8gc2V0IHRoZW0uICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgYWN0dWFsbHkgdGhlIHNhbWUgYXMgdGhlIHByZXZpb3VzIHF1ZXN0aW9uIC0gaXQganVzdCBpc24ndAorICBwYXJ0aWN1bGFybHkgb2J2aW91cywgcGFydGljdWxhcmx5IHdoZW4gdXNpbmcgU05NUHYxLiAgQSB0eXBpY2FsCisgIGV4YW1wbGUgb2YgdGhpcyBlZmZlY3Qgd291bGQgYmUKKworCSQgc25tcGdldCAtdjEgLWMgcHVibGljIGxvY2FsaG9zdCBzeXN0ZW0uc3lzTG9jYXRpb24uMAorCXN5c3RlbS5zeXNMb2NhdGlvbi4wID0gc29tZXdoZXJlIG5lYXJieQorCisJJCBzbm1wc2V0IC12MSAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNMb2NhdGlvbi4wIHMgInJpZ2h0IGhlcmUiCisJRXJyb3IgaW4gcGFja2V0LgorCVJlYXNvbjogKG5vU3VjaE5hbWUpIFRoZXJlIGlzIG5vIHN1Y2ggdmFyaWFibGUgbmFtZSBpbiB0aGlzIE1JQi4KKwlUaGlzIG5hbWUgZG9lc24ndCBleGlzdDogc3lzdGVtLnN5c0xvY2F0aW9uLjAKKworICBUcnlpbmcgdGhlIHNhbWUgcmVxdWVzdCB1c2luZyBTTk1QdjIgb3IgYWJvdmUgaXMgc29tZXdoYXQgbW9yZSBpbmZvcm1hdGl2ZToKKworCSQgc25tcHNldCAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0IHN5c3RlbS5zeXNMb2NhdGlvbi4wIHMgInJpZ2h0IGhlcmUiCisgICAgICAgIEVycm9yIGluIHBhY2tldC4KKyAgICAgICAgUmVhc29uOiBub3RXcml0YWJsZQorCisgIFRoZSBTTk1QdjEgZXJyb3IgJ25vU3VjaE5hbWUnIGFjdHVhbGx5IG1lYW5zOgorCisJIllvdSBjYW4ndCBkbyB0aGF0IHRvIHRoaXMgdmFyaWFibGUiCisKKyAgVGhpcyBtaWdodCBiZSBiZWNhdXNlIHRoZSB2YXJpYWJsZSBkb2Vzbid0IGV4aXN0LCBpdCBkb2VzIGV4aXN0IGJ1dAorICB5b3UgZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gaXQgKGJ1dCBzb21lb25lIGVsc2UgbWF5IGRvKSwgb3IgaXQgZXhpc3RzCisgIGJ1dCB5b3UgY2FuJ3QgcGVyZm9ybSB0aGF0IHBhcnRpY3VsYXIgb3BlcmF0aW9uIChpLmUuIGNoYW5naW5nIGl0KS4KKyAgICBTaW1pbGFybHksIHRoZSBTTk1QdjIgZXJyb3IgJ25vdFdyaXRhYmxlJyBtZWFucyAibm90IHdyaXRhYmxlIGluCisgIHRoaXMgcGFydGljdWxhciBjYXNlIiByYXRoZXIgdGhhbiAibm90IHdyaXRhYmxlIHVuZGVyIGFueSBjaXJjdW1zdGFuY2VzIi4KKworICBJZiB5b3UgYXJlIHN1cmUgdGhhdCB0aGUgb2JqZWN0IGlzIHdyaXRhYmxlIChhbmQgaGFzIGJlZW4gaW1wbGVtZW50ZWQKKyAgYXMgc3VjaCksIHRoZW4geW91IHByb2JhYmx5IG5lZWQgdG8gbG9vayBhdCB0aGUgYWdlbnQgYWNjZXNzIGNvbnRyb2wuCisgIFNlZSB0aGUgQUdFTlQgc2VjdGlvbiBmb3IgbW9yZSBkZXRhaWxzLgorCisKKworSSBzdGlsbCBjYW4ndCBjaGFuZ2Ugc3lzTG9jYXRpb24sIHRob3VnaCB0aGUgYWNjZXNzIHNldHRpbmdzIGFsbG93IGl0LiAgV2h5IG5vdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIE9uZSBvdGhlciBwb3NzaWJpbGl0eSBmb3IgdGhlICdzeXNMb2NhdGlvbicgYW5kICdzeXNDb250YWN0JyBvYmplY3RzLAorICBpcyB0aGF0IHlvdSd2ZSBnb3QgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBpbiB0aGUgJ3NubXBkLmNvbmYnIGZpbGUgd2hpY2gKKyAgYWxyZWFkeSBzZXRzIHRoZSBjb3JyZXNwb25kaW5nIHZhbHVlIHRoZXJlLgorCisgICAgRWFybGllciB2ZXJzaW9ucyBvZiB0aGUgYWdlbnQgd291bGQgYWxsb3cgeW91IHRvIHdyaXRlIHRvIHRoZXNlIG9iamVjdHMsCisgIGJ1dCB0aGUgbmV3IHZhbHVlIHdvdWxkIGJlIGZvcmdvdHRlbiB0aGUgbmV4dCB0aW1lIHRoZSBhZ2VudCB3YXMgcmUtc3RhcnRlZC4KKyAgTW9yZSByZWNlbnQgdmVyc2lvbnMgb2YgdGhlIGFnZW50IHJlamVjdCBzdWNoIHdyaXRlIHJlcXVlc3RzIGlmIHRoZXJlJ3MgYQorICB2YWx1ZSBzZXQgdmlhIHRoZSBjb25maWcgZmlsZS4gICBJZiB0aGVyZSBpc24ndCBzdWNoIGEgY29uZmlnIHNldHRpbmcsIHRoZW4KKyAgdGhlIHdyaXRlIHJlcXVlc3Qgd2lsbCBzdWNjZWVkIChhc3N1bWluZyB0aGUgYWNjZXNzIHNldHRpbmdzIGFsbG93IGl0KSwgYW5kCisgIHRoZSBuZXcgdmFsdWUgd2lsbCBiZSByZXRhaW5lZCB0aGUgbmV4dCB0aW1lIHRoZSBhZ2VudCByZXN0YXJ0cy4KKworCisKKzxhIG5hbWU9IklfZ2V0X2FuX2Vycm9yX3doZW5fdHJ5aW5nX3RvX3NldF9hX25lZ2F0aXZlX3ZhbHVlX19fd2h5XyI+CitJIGdldCBhbiBlcnJvciB3aGVuIHRyeWluZyB0byBzZXQgYSBuZWdhdGl2ZSB2YWx1ZSAtIHdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIGEgZGlmZmVyZW50IHByb2JsZW0uICBXaGF0J3MgaGFwcGVuaW5nIGhlcmUgaXMgdGhhdCB0aGUKKyAgcm91dGluZSB0aGF0IHBhcnNlcyB0aGUgYXJndW1lbnRzIHRvIHRoZSAnc25tcHNldCcgY29tbWFuZCBpcyBzZWVpbmcKKyAgdGhlICctJyBvZiB0aGUgbmV3IHZhbHVlLCBhbmQgdHJlYXRpbmcgaXQgYXMgYSBjb21tYW5kLWxpbmUgb3B0aW9uLgorICBUaGlzIG5vcm1hbGx5IGdlbmVyYXRlcyBhbiBlcnJvciAoc2luY2UgZGlnaXRzIHByb2JhYmx5IGFyZW4ndCB2YWxpZAorICBjb21tYW5kIGxpbmUgb3B0aW9uKS4KKworICAgIFRoZSBlYXNpZXN0IHdheSB0byBzb2x2ZSB0aGlzIGlzIGluY2x1ZGUgdGhlICJlbmQtb2Ytb3B0aW9uIgorICBpbmRpY2F0b3IgJy0tJyBpbiB0aGUgY29tbWFuZCBsaW5lLCBzb21ld2hlcmUgYmVmb3JlIHRoZSBuZXcgdmFsdWUKKyAgKGJ1dCBhZnRlciBhbGwgb2YgdGhlIG9wdGlvbnMsIG9idmlvdXNseSkuICBGb3IgZXhhbXBsZToKKworCXNubXBzZXQgLXYgMmMgLWMgcHVibGljIGxvY2FsaG9zdCAtLSB2ZXJzaW9uUmVzdGFydEFnZW50LjAgaSAtMQorCisgIChUaGlzIHdpbGwgYWxzbyBmYWlsLCBzaW5jZSAtMSBpc24ndCBhbiBhY2NlcHRhYmxlIHZhbHVlIGZvciB0aGlzCisgIG9iamVjdCwgYnV0IGl0IHdpbGwgYmUgcmVqZWN0ZWQgYnkgdGhlIGFnZW50LCByYXRoZXIgdGhhbiBjb25mdXNpbmcKKyAgdGhlIHNubXBzZXQgY29tbWFuZCEpCisKKworCis8YSBuYW1lPSJJX2dldF9hbl9lcnJvcl93aGVuX3RyeWluZ190b19nZXRfYV9zdHJpbmdfaW5kZXhlZF90YWJsZV92YWx1ZV9fX3doeV8iPgorSSBnZXQgYW4gZXJyb3Igd2hlbiB0cnlpbmcgdG8gZ2V0IGEgc3RyaW5nLWluZGV4ZWQgdGFibGUgdmFsdWUgLSB3aHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBwcm9iYWJseSBkdWUgdG8gdGhlIHNoZWxsIHN3YWxsb3dpbmcgdGhlIHF1b3RlcywgYmVmb3JlCisgIHRoZXkgZXZlciBnZXQgdG8gdGhlIFNOTVAgY29tbWFuZCdzIE9JRCBwYXJzZXIuICBUcnkgZXNjYXBpbmcgdGhlbToKKworCXNubXBnZXQgLi4uLi4gICB2YWNtU2VjdXJpdHlNb2RlbC4wLlwid2VzXCIKKyAgb3IJc25tcGdldCAuLi4uLiAgJ3ZhY21TZWN1cml0eU1vZGVsLjAuIndlcyInCisKKworICAKKzxhIG5hbWU9Ikhvd19kb19JX3NlbmRfdHJhcHNfYW5kX25vdGlmaWNhdGlvbnNfIj4KK0hvdyBkbyBJIHNlbmQgdHJhcHMgYW5kIG5vdGlmaWNhdGlvbnM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRyYXBzIGFuZCBub3RpZmljYXRpb25zIGNhbiBiZSBzZW50IHVzaW5nIHRoZSBjb21tYW5kICdzbm1wdHJhcCcuCisgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZXMgZ2VuZXJhdGUgdGhlIGdlbmVyaWMgdHJhcCAnY29sZFN0YXJ0JyBhbmQgYQorICAoZHVtbXkpIGVudGVycHJpc2Ugc3BlY2lmaWMgdHJhcCAnOTknIHJlc3BlY3RpdmVseToKKworCXNubXB0cmFwIC12IDEgLWMgcHVibGljIGxvY2FsaG9zdCAiIiAiIiAwIDAgICIiCisJc25tcHRyYXAgLXYgMSAtYyBwdWJsaWMgbG9jYWxob3N0ICIiICIiIDYgOTkgIiIKKyAgCisgIFRoZSBlbXB0eSBwYXJhbWV0ZXJzICIiIHdpbGwgdXNlIHN1aXRhYmxlIGRlZmF1bHRzIGZvciB0aGUgcmVsZXZhbnQgCisgIHZhbHVlcyAoZW50ZXJwcmlzZSBPSUQsIGFkZHJlc3Mgb2Ygc2VuZGVyIGFuZCBjdXJyZW50IHN5c3VwdGltZSkuCisKKyAgICBBbiBTTk1QdjIgb3IgU05NUHYzIG5vdGlmaWNhdGlvbiAoZWl0aGVyIHRyYXAgb3IgaW5mb3JtKSB0YWtlcworICB0aGUgT0lEIG9mIHRoZSB0cmFwIHRvIHNlbmQ6CisKKwlzbm1wdHJhcCAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0ICIiIFVDRC1TTk1QLU1JQjo6dWNkU3RhcnQKKwlzbm1wdHJhcCAtdiAyYyAtYyBwdWJsaWMgbG9jYWxob3N0ICIiIC4xLjMuNi4xLjQuMS4yMDIxLjI1MS4xCisKKyAgKFRoZXNlIHR3byBhcmUgZXF1aXZhbGVudCB3YXlzIG9mIHNwZWNpZnlpbmcgdGhlIHNhbWUgdHJhcCkuCisKKyAgQW55IG9mIHRoZXNlIGNvbW1hbmRzIGNhbiBiZSBmb2xsb3dlZCBieSBvbmUgb3IgbW9yZSB2YXJiaW5kcywKKyAgdXNpbmcgdGhlIHNhbWUgKE9JRC90eXBlL3ZhbHVlKSBzeW50YXggYXMgZm9yICdzbm1wc2V0JzoKKworCXNubXB0cmFwIC12IDJjIC1jIHB1YmxpYyBsb2NhbGhvc3QgIiIgdWNkU3RhcnQgc3lzQ29udGFjdC4wIHMgIkRhdmUiCisKKyAgR2VuZXJhdGluZyB0cmFwcyBmcm9tIHdpdGhpbiB0aGUgYWdlbnQgaXMgY292ZXJlZCBpbiB0aGUgQUdFTlQgYW5kCisgIENPRElORyBzZWN0aW9ucy4KKworICBZb3Ugc2hvdWxkIGFsc28gcmVhZCB0aGUgc25tcHRyYXAgdHV0b3JpYWwgYXQKKwlodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZy90dXRvcmlhbC01L2NvbW1hbmRzL3NubXB0cmFwLmh0bWwKKyAgd2hpY2ggd2lsbCBoZWxwIHlvdSB1bmRlcnN0YW5kIGV2ZXJ5dGhpbmcgeW91IG5lZWQgdG8ga25vdyBhYm91dCB0cmFwcy4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2hhbmRsZV90cmFwc19hbmRfbm90aWZpY2F0aW9uc18iPgorSG93IGRvIEkgaGFuZGxlIHRyYXBzIGFuZCBub3RpZmljYXRpb25zPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBIYW5kbGluZyByZWNlaXZlZCB0cmFwcyBpcyBkb25lIHVzaW5nIHRoZSB0b29sICdzbm1wdHJhcGQnLgorICBUaGlzIGNhbiBsb2cgdGhlc2UgdHJhcHMgdmlhIHRoZSBzeXNsb2cgbWVjaGFuaXNtOgorCisJc25tcHRyYXBkIC1zIC1sNwkobG9nIHRvICdMT0NBTDcnKQorCisgIHByaW50ZWQgdG8gc3RhbmRhcmQgb3V0cHV0CisKKwlzbm1wdHJhcGQgLWYgLVAKKworICBvciBwYXNzIHRoZW0gdG8gYW4gZXh0ZXJuYWwgY29tbWFuZC4gIFRoaXMgbGFzdCBhcHByb2FjaCB1c2VzCisgIGEgJ3RyYXBoYW5kbGUnIGRpcmVjdGl2ZSBpbiB0aGUgY29uZmlndXJhdGlvbiBmaWxlICdzbm1wdHJhcGQuY29uZicuCisgIEEgdHlwaWNhbCBmaWxlIG1pZ2h0IGxvb2sgc29tZXRoaW5nIGxpa2U6CisKKwl0cmFwaGFuZGxlIC4xLjMuNi4xLjYuMy4xLjUuMSAgICAgICBwYWdlX21lIHVwCisJdHJhcGhhbmRsZSAuMS4zLjYuMS40LjEuMjAyMS4yNTEuMSAgcGFnZV9tZSB1cAorCXRyYXBoYW5kbGUgLjEuMy42LjEuNC4xLjIwMjEuMjUxLjIgIHBhZ2VfbWUgZG93bgorCXRyYXBoYW5kbGUgZGVmYXVsdCAgICAgICAgICAgICAgICAgIGxvZ19pdAorCisgIHdoZXJlICdwYWdlX21lJyBhbmQgJ2xvZ19pdCcgYXJlIHRoZSBjb21tYW5kIHRvIGJlIHJ1bi4gIChZb3UgcHJvYmFibHkKKyAgbmVlZCB0byBzcGVjaWZ5IGZ1bGwgcGF0aG5hbWVzLCB0byBlbnN1cmUgdGhhdCB0aGUgY29tbWFuZHMgd2lsbCBiZQorICBmb3VuZC4gIFRoZXkncmUganVzdCBzaG9ydCBoZXJlIGZvciByZWFkYWJpbGl0eSkuCisKKyAgTm90ZSB0aGF0IHRoZSBmaXJzdCBlbnRyeSB1c2VzIHRoZSBPSUQgY29ycmVzcG9uZGluZyB0byB0aGUgU05NUHYxCisgICdjb2xkU3RhcnQnIHRyYXAuICBTZWUgdGhlIGNvLWV4aXN0ZW5jZSBSRkMgKFJGQyAyNTc2KSBmb3IgZGV0YWlscworICBvZiBtYXBwaW5nIFNOTVB2MSB0cmFwcyB0byBTTk1QdjIgT0lEcy4KKworICBUaGVyZSdzIGEgdHV0b3JpYWwgd2l0aCBtb3JlIGRldGFpbHMgb24gdGhlIHdlYiBzaXRlIGF0CisJaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS9jb21tYW5kcy9zbm1wdHJhcC5odG1sCisgIAorCisKKzxhIG5hbWU9Ik15X3RyYXBoYW5kbGVyX3NjcmlwdF9kb2Vzbl90X3dvcmtfd2hlbl9ydW5fbGlrZV90aGlzX19fd2h5X25vdF8iPgorTXkgdHJhcGhhbmRsZXIgc2NyaXB0IGRvZXNuJ3Qgd29yayB3aGVuIHJ1biBsaWtlIHRoaXMgLSB3aHkgbm90PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBJZiBhIHRyYXBoYW5kbGVyIHNjcmlwdCB3b3JrcyBmaW5lIHdoZW4gcnVuIG1hbnVhbGx5IGZyb20gdGhlCisgIGNvbW1hbmQgbGluZSwgYnV0IGdlbmVyYXRlcyBhbiBlcnJvciB3aGVuIHRyaWdnZXJlZCBieSBhbiBpbmNvbWluZworICBub3RpZmljYXRpb24sIHRoZW4gdGhpcyBpcyBwcm9iYWJseSBkb3duIHRvIG9uZSBvZiB0d28gbGlrZWx5IGNhdXNlcy4KKworICAgIEZpcnN0bHksIHRoZSBpbnRlcmFjdGl2ZSBzaGVsbCBlbnZpcm9ubWVudCBtYXkgbm90IGJlIHByZWNpc2VseQorICB0aGUgc2FtZSBhcyB0aGF0IGZvciBwcm9ncmFtcyBleGVjdXRlZCBieSB0aGUgc25tcHRyYXBkIGRhZW1vbi4KKyAgSW4gcGFydGljdWxhciwgaXQncyBxdWl0ZSBwb3NzaWJsZSB0aGF0IHRoZSBQQVRIIGVudmlyb25tZW50YWwKKyAgdmFyaWFibGUgbWF5IG5vdCBpbmNsdWRlIGFsbCB0aGUgYWRkaXRpb25hbCBkaXJlY3RvcmllcyB0aGF0IGFyZQorICBjb21tb25seSBzZXQgdXAgZm9yIGEgcGVyc29uYWwgbG9naW4gY29uZmlndXJhdGlvbi4gIFRvIGF2b2lkIHRoaXMKKyAgcHJvYmxlbSAocGFydGljdWxhcmx5IGZvciB0cmFwaGFuZGxlciBzaGVsbCBzY3JpcHRzKSwgaXQncyB3b3J0aAorICBnaXZpbmcgdGhlIGZ1bGwgcGF0aCB0byBhbGwgcHJvZ3JhbXMgdXNlZCB3aXRoaW4gdGhlIHNjcmlwdC4KKworICAgIFNlY29uZGx5LCB0aGUgc25tcHRyYXBkIGRhZW1vbiBtYXkgbm90IGFsd2F5cyByZWNvZ25pc2UgdGhlCisgIGFwcHJvcHJpYXRlIGludGVycHJldGVyIHRvIHVzZSBmb3IgYSBwYXJ0aWN1bGFyIHRyYXAgaGFuZGxlci4KKyAgSWYgdGhpcyBpcyB0aGUgY2FzZSwgdGhlbiB5b3UgY2FuIHNwZWNpZnkgdGhpcyBpbnRlcnByZXRlcgorICBleHBsaWNpdGx5IGFzIHBhcnQgb2YgdGhlIHRyYXAgaGFuZGxlIGRpcmVjdGl2ZToKKworCXRyYXBoYW5kbGUgZGVmYXVsdCAvdXNyL2Jpbi9wZXJsIC91c3IvbG9jYWwvYmluL2xvZ19pdAorCisgIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UsIGl0J3MgYWxtb3N0IGNlcnRhaW4gdGhhdCB5b3UnbGwgYWxzbworICBuZWVkIHRvIGdpdmUgdGhlIGZ1bGwgcGF0aCB0byB0aGUgdHJhcGhhbmRsZSBzY3JpcHQgKGFzIHNob3duKQorCisKKworPGEgbmFtZT0iVGhlX3VjZFNodXRkb3duX3RyYXBfT0lEX3JlY2VpdmVkX2J5X215X21hbmFnZXJfaXNfd3JvbmdfX1doeV8iPgorVGhlIHVjZFNodXRkb3duIHRyYXAgT0lEIHJlY2VpdmVkIGJ5IG15IG1hbmFnZXIgaXMgd3JvbmcuIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgZHVlIHRvIHRoZSB3YXkgdGhhdCB0cmFwcyBhcmUgY29udmVydGVkIGJldHdlZW4KKyAgU05NUHYxIGFuZCBTTk1QdjIgZm9ybWF0cy4gIFRoZSBhbGdvcml0aG0gdXNlZCBmb3IgY29udmVydGluZworICBmcm9tIGFuIFNOTVB2MSBlbnRlcnByaXNlLXNwZWNpZmljIHRyYXAgbnVtYmVyLCB0byBhbiBTTk1QdjIKKyAgdHJhcCBPSUQgcmVzdWx0cyBpbiBhIHBlbnVsdGltYXRlICcwJyBzdWJpZGVudGlmaWVyLCBiZWZvcmUKKyAgdGhlIHRyYXAgbnVtYmVyIGl0c2VsZi4gIFRoZSBkZWZpbml0aW9uIG9mIHRoZSB0cmFwIG9iamVjdHMKKyAgaW4gdGhlIFVDRC1TTk1QLU1JQiBmaWxlIGRvZXMgbm90IGluY2x1ZGUgdGhpcyBzdWJpZGVudGlmaWVyLgorCisgICAgSW4gZHVlIGNvdXJzZSwgdGhlIGludGVudGlvbiBpcyB0byBkZWZpbmUgYSBuZXcgc2V0IG9mIE1JQgorICBvYmplY3RzLCB1bmRlciB0aGUgJ25ldC1zbm1wJyBlbnRlcnByaXNlIHRyZWUuICBUaGlzIHdpbGwKKyAgaW5jbHVkZSBuZXcgdHJhcCBPSURzLCB3aGljaCB3aWxsIGJlIGRlc2lnbmVkIHN1Y2ggdGhhdAorICB0aGlzIHByb2JsZW0gZG9lcyBub3QgYXJpc2UgaW4gdGhlIGZ1dHVyZS4KKworCisKKzxhIG5hbWU9IldoeV9kb2VzX3NubXB0cmFwZF9jb21wbGFpbl9hYm91dF9BZ2VudFhfIj4KK1doeSBkb2VzIHNubXB0cmFwZCBjb21wbGFpbiBhYm91dCBBZ2VudFg/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBTdGFydGluZyBmcm9tIHRoZSB2NSByZWxlYXNlLCB0aGUgdHJhcCBoYW5kbGluZyBkYWVtb24gaGFzCisgIGltcGxlbWVudGVkIHRoZSBub3RpZmljYXRpb24gbG9nZ2luZyBhc3BlY3RzIG9mIHRoZSBOT1RJRklDQVRJT04tTUlCCisgIChSRkMgMzAxNCkuICBUaGlzIGlzIGhhbmRsZWQgYnkgdGhlIHRyYXAgaGFuZGxlciBkYWVtb24gcmVnaXN0ZXJpbmcKKyAgYXMgYW4gQWdlbnRYIHN1YmFnZW50LCB0byBzdXBwbHkgdGhpcyBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KKworICAgIElmIHRoZXJlIGlzIG5vIEFnZW50WCBtYXN0ZXIgYWdlbnQgYXZhaWxhYmxlLCB0aGlzIHJlZ2lzdHJhdGlvbgorICBmYWlscywgZ2VuZXJhdGluZyB0aGUgd2FybmluZyBhYm91dCAiZmFpbGVkIHRvIGNvbm5lY3QgdG8gdGhlIGFnZW50eAorICBtYXN0ZXIiLiAgVGhpcyB3YXJuaW5nIG9ubHkgYXBwZWFycyBiZXR3ZWVuIHZlcnNpb24gNS4wIGFuZCA1LjAuNAorICAoaW4gNS4wLjQgYW5kIGFmdGVyIHRoZSB3YXJuaW5nIHdhcyBzaWxlbmNlZCkuICBUaGlzIGZhaWx1cmUgZG9lcworICBub3QgYWZmZWN0IHRoZSBtYWluIG9wZXJhdGlvbiBvZiB0aGUgdHJhcCBoYW5kbGVyLiAgSXQgc2ltcGx5IG1lYW5zCisgIHRoYXQgdGhlIG5zbUxvZyBpbmZvcm1hdGlvbiB3b24ndCBiZSBhdmFpbGFibGUgZm9yIHF1ZXJ5IHZpYSBTTk1QLgorCisgICAgQmFzaWNhbGx5LCB0aGlzIGlzIGEgd2FybmluZyB0aGF0IGNhbiBzYWZlbHkgYmUgaWdub3JlZC4KKworCisKKzxhIG5hbWU9Ikhvd19kb19JX3VzZV9TTk1Qdl9fIj4KK0hvdyBkbyBJIHVzZSBTTk1QdjM/CistLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgc2ltcGxlc3QgZm9ybSBvZiBTTk1QdjMgcmVxdWVzdCAodW5hdXRoZW50aWNhdGVkLCB1bmVuY3J5cHRlZCkKKyAgd291bGQgYmUgc29tZXRoaW5nIGxpa2U6CisKKwlzbm1wZ2V0IC12IDMgLWwgbm9BdXRoTm9Qcml2IGxvY2FsaG9zdCBzeXNVcFRpbWUuMAorCisgICAgQW4gYXV0aGVudGljYXRlZCByZXF1ZXN0IHdvdWxkIHNwZWNpZnkgYSB1c2VybmFtZSBhbmQgcGFzcyBwaHJhc2U6CisKKwlzbm1wZ2V0IC12IDMgLWwgYXV0aE5vUHJpdiAtdSBkYXZlIC1BICJPcGVuIHRoZSBEb29yIgorCQkJCWxvY2FsaG9zdCBzeXNVcFRpbWUuMAorCisgICAgQSBmdWxseSBzZWN1cmUgcmVxdWVzdCB3b3VsZCBhbHNvIHNwZWNpZnkgdGhlIHByaXZhY3kgcGFzcyBwaHJhc2U6CisKKwlzbm1wZ2V0IC12IDMgLWwgYXV0aFByaXYgLXUgZGF2ZSAtQSAiT3BlbiB0aGUgRG9vciIKKwkJCS1YICJCZXQgeW91IGNhbid0IHNlZSBtZSIgIGxvY2FsaG9zdCBzeXNVcFRpbWUuMAorCisgIEluIHByYWN0aXNlLCBtb3N0IG9mIHRoZXNlIHdvdWxkIHByb2JhYmx5IGJlIHNldCB2aWEgY29uZmlndXJhdGlvbgorICBkaXJlY3RpdmVzIGluIGEgcGVyc29uYWwgJEhPTUUvLnNubXAvc25tcC5jb25mIGZpbGUgKG5vdGUsICpub3QqIHRoZQorICBhZ2VudCdzIHNubXBkLmNvbmYgZmlsZSkuICBUaGUgZXF1aXZhbGVudCBzZXR0aW5ncyBmb3IgdGhlIHRoaXJkCisgIGV4YW1wbGUgd291bGQgYmU6CisKKwlkZWZTZWN1cml0eU5hbWUJCWRhdmUKKwlkZWZTZWN1cml0eUxldmVsCWF1dGhQcml2CisJZGVmQXV0aFBhc3NwaHJhc2UJIk9wZW4gdGhlIERvb3IiCisJZGVmUHJpdlBhc3NwaHJhc2UJIkJldCB5b3UgY2FuJ3Qgc2VlIG1lIgorCisgIElmIHRoZSBBdXRoUGFzc3BocmFzZSBhbmQgdGhlIFByaXZQYXNzcGhyYXNlIGFyZSB0aGUgc2FtZSwgdGhlbiB5b3UKKyAgY2FuIHVzZSB0aGUgc2V0dGluZworCQlkZWZQYXNzcGhyYXNlCSJPcGVuIHRoZSBEb29yIGFuZCBzZWUgbWUiCisJCQkJCQkJaW5zdGVhZAorCisgIEZvciBob3cgdG8gY29uZmlndXJlIHRoZSBhZ2VudCB0byByZXNwb25kIHRvIFNOTVB2MyByZXF1ZXN0cywgc2VlCisgIHRoZSBBR0VOVCBzZWN0aW9uLgorIAorCisKKzxhIG5hbWU9Ikhvd19iaWdfY2FuX2FuX1NOTVBfcmVxdWVzdF9fb3JfcmVwbHlfX2JlXyI+CitIb3cgYmlnIGNhbiBhbiBTTk1QIHJlcXVlc3QgKG9yIHJlcGx5KSBiZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgcHJvdG9jb2wgZGVmaW5pdGlvbiBzcGVjaWZpZXMgYSAibWluaW11bSBtYXhpbXVtIiBwYWNrZXQgc2l6ZQorICAoNDg0IGJ5dGVzIGZvciBVRFApLCB3aGljaCBhbGwgc3lzdGVtcyBtdXN0IHN1cHBvcnQsIGJ1dCBkb2VzIG5vdAorICBhdHRlbXB0IHRvIGRlZmluZSBhbiB1cHBlciBib3VuZCBmb3IgdGhpcyBtYXhpbXVtIHNpemUuICBUaGlzIGlzIGxlZnQKKyAgdG8gZWFjaCBpbmRpdmlkdWFsIGltcGxlbWVudGF0aW9uLgorCisgICAgVGhlIFVDRCBzb2Z0d2FyZSB1c2VzIGEgZml4ZWQgc2l6ZSBidWZmZXIgb2YgMTQ3MiBieXRlcyB0byBob2xkIHRoZQorICBlbmNvZGVkIHBhY2tldCwgc28gYWxsIHJlcXVlc3RzIGFuZCByZXNwb25zZXMgbXVzdCBmaXQgd2l0aGluIHRoaXMuCisgIFVuZm9ydHVuYXRlbHksIGl0J3Mgbm90IHBvc3NpYmxlIHRvIHByZWRpY3QgaG93IG1hbnkgdmFyYmluZHMgdGhpcworICBjb3JyZXNwb25kcyB0bywgc2luY2UgaXQgZGVwZW5kcyBvbiB0aGUgdHlwZSBhbmQgYWN0dWFsIHZhbHVlcyBiZWluZworICBzZW50LCBhcyB3ZWxsIGFzIHRoZSBjb3JyZXNwb25kaW5nIE9JRHMuCisKKyAgICBBcyBhIHJ1bGUgb2YgdGh1bWIsIHNlbmRpbmcgNDAwIGludGVnZXItdmFsdWVkIHZhcmJpbmRzIHNlZW1zIHRvCisgIHdvcmsgT0ssIHdoaWxlIDMwMCBzdHJpbmctdmFsdWVkIHZhcmJpbmRzIHRyaWdnZXJzIGFuIG92ZXJydW4uCisKKyAgICBUaGUgTmV0LVNOTVAgcmVsZWFzZXMgaGFuZGxlIHBhY2tldCBidWZmZXJzIHJhdGhlciBkaWZmZXJlbnRseSwKKyAgYW5kIGFyZSBub3Qgc3ViamVjdCB0byB0aGUgc2FtZSBmaXhlZCByZXN0cmljdGlvbnMuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfbW9uaXRvcl9teV9zeXN0ZW1zX19kaXNrX19tZW1vcnlfX2V0Y19fIj4KK0hvdyBjYW4gSSBtb25pdG9yIG15IHN5c3RlbXMgKGRpc2ssIG1lbW9yeSwgZXRjKT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgSW4gZ2VuZXJhbCwgdGhlIE5ldC1TTk1QIHN1aXRlIGNvbnNpc3RzIG9mIHJlbGF0aXZlbHkgbG93LWxldmVsCisgIHRvb2xzLCBhbmQgdGhlcmUgaXMgbm90aGluZyBpbmNsdWRlZCB0aGF0IGlzIGRlc2lnbmVkIGZvciBoaWdoLWxldmVsLAorICBsb25nLXRlcm0gbW9uaXRvcmluZyBvZiB0cmVuZHMgaW4gbmV0d29yayB0cmFmZmljLCBkaXNrIG9yIG1lbW9yeQorICB1c2FnZSwgZXRjLgorCisgICAgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIHBhY2thZ2VzIGF2YWlsYWJsZSB0aGF0IGFyZSBkZXNpZ25lZCBmb3IgdGhpcworICBwdXJwb3NlLiAgVHdvIG9mIHRoZSBtb3N0IHdpZGVseSB1c2VkIGFyZSBNUlRHIChodHRwOi8vd3d3Lm1ydGcub3JnLykKKyAgYW5kIENyaWNrZXQgKGh0dHA6Ly9jcmlja2V0LnNvdXJjZWZvcmdlLm5ldC8pLiAgVGhlcmUgYXJlIGRldGFpbHMgb2YKKyAgaG93IHRvIHNldCB1cCBDcmlja2V0IHRvIG1vbml0b3Igc29tZSBvZiB0aGUgVUNEIGV4dGVuc2lvbnMgYXQKKyAgaHR0cDovL3d3dy5hZm4ub3JnL35qYW0vc29mdHdhcmUvY3JpY2tldC8KKworICAgICBXZSBoYXZlIGFsc28gc2V0IHVwIGEgcGFnZSB0aGF0IGRlc2NyaWJlcyBpbiBkZXRhaWwgaG93IE1SVEcKKyAgY2FuIGJlIHNldCB1cCB0byBtb25pdG9yIGRpc2ssIG1lbW9yeSBhbmQgY3B1IGFjdGl2aXR5IGF0CisgIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvbXJ0Zy9pbmRleC5odG1sCisKKyAgICBUaGVyZSBpcyBhbHNvIGEgd2ViLWJhc2VkIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzeXN0ZW0gIk5ldC1Qb2xpY3kiLAorICBiYXNlZCB1cG9uIFNOTVAuICBUaGlzIGlzIG5vdCBzdHJpY3RseSBjb25uZWN0ZWQgdG8gdGhlIE5ldC1TTk1QIHByb2plY3QsCisgIGJ1dCBhIG51bWJlciBvZiB0aGUgY29yZSBkZXZlbG9wZXJzIGFyZSBhbHNvIGludm9sdmVkIHdpdGggdGhhdCBzeXN0ZW0uCisgIFNlZSBodHRwOi8vbmV0LXBvbGljeS5zb3VyY2Vmb3JnZS5uZXQgZm9yIG1vcmUgZGV0YWlscy4KKworCisKKzxhIG5hbWU9IkFwcGxpY2F0aW9uc19jb21wbGFpbl9hYm91dF9lbnRyaWVzX2luX3lvdXJfZXhhbXBsZV9fc25tcF9jb25mX19maWxlX19fV2h5XyI+CitBcHBsaWNhdGlvbnMgY29tcGxhaW4gYWJvdXQgZW50cmllcyBpbiB5b3VyIGV4YW1wbGUgJ3NubXAuY29uZicgZmlsZS4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgZXhhbXBsZSBjb25maWd1cmF0aW9uIGZpbGUgJ0VYQU1QTEUuY29uZicgaXMgZGVzaWduZWQgYXMgYSBjb25maWcKKyAgZm9yIHRoZSBhZ2VudCwgYW5kIHNob3VsZCBiZSBpbnN0YWxsZWQgYXMgJ3NubXBkLmNvbmYnIChub3RlIHRoZSAnZCcpLgorICBUaGUgZmlsZSAnc25tcC5jb25mJyBpcyBpbnRlbmRlZCBmb3IgZ2VuZXJhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsCisgIGFwcGxpY2FibGUgdG8gYWxsIGFwcGxpY2F0aW9ucyAodmlhIHRoZSBTTk1QIGxpYnJhcnkpLgorICAgIFJlbmFtZSAob3IgbWVyZ2UpIHRoZSAnc25tcC5jb25mJyBmaWxlIHRvICdzbm1wZC5jb25mJywgYW5kIHRoaXMgc2hvdWxkCisgIGZpeCB0aGUgcHJvYmxlbS4KKyAgICBOb3RlIHRoYXQgdGhlcmUgaXMgbm8gZXhhbXBsZSBzbm1wLmNvbmYgc2hpcHBlZCB3aXRoIHRoZSBzdGFuZGFyZAorICBkaXN0cmlidXRpb24uCisKKworCis8YSBuYW1lPSJPS19fd2hhdF9zaG91bGRfSV9wdXRfaW5fc25tcF9jb25mXyI+CitPSywgd2hhdCBzaG91bGQgSSBwdXQgaW4gc25tcC5jb25mPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyB1c2VkIHRvIHNldCBjb21tb24gY29uZmlndXJhdGlvbiB2YWx1ZXMgZm9yIG1vc3Qgb2YgdGhlCisgIGFwcGxpY2F0aW9ucywgdG8gYXZvaWQgaGF2aW5nIHRvIHNwZWNpZnkgdGhlbSBldmVyeSB0aW1lLiAgRXhhbXBsZXMKKyAgaW5jbHVkZSB0aGUgU05NUHYzIHNldHRpbmdzIG1lbnRpb25lZCBhYm92ZSwgZGVmYXVsdHMgZm9yIHdoaWNoIE1JQnMKKyAgdG8gbG9hZCBhbmQgd2hlcmUgZnJvbSwgYW5kIHRoZSBkZWZhdWx0IFNOTVAgdmVyc2lvbiwgcG9ydCBhbmQKKyAgKGlmIGFwcHJvcHJpYXRlKSB0aGUgY29tbXVuaXR5IHN0cmluZyB0byB1c2UuCisKKyAgICBTb21lIG9mIHRoZXNlIChzdWNoIGFzIHRoZSBNSUIgZmlsZSBsb2NhdGlvbiksIG1pZ2h0IGJlbG9uZyBpbiBhCisgIHNoYXJlZCBzbm1wLmNvbmYgZmlsZSAodHlwaWNhbGx5IC91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wLmNvbmYgb3IKKyAgL2V0Yy9zbm1wL3NubXAuY29uZikgdG8gYXBwbHkgdG8gYWxsIHVzZXJzIG9mIHRoZSBzeXN0ZW0uICBPdGhlcnMKKyAgKHBhcnRpY3VsYXJseSB0aGUgU05NUHYzIHNlY3VyaXR5IHNldHRpbmdzKSwgYXJlIG1vcmUgbGlrZWx5IHRvIHJlZmVyCisgIHRvIGEgcGFydGljdWxhciB1c2VyLCBhbmQgc2hvdWxkIGdvIGluIGEgcGVyc29uYWwgc25tcC5jb25mIGZpbGUKKyAgKHR5cGljYWxseSAkSE9NRS8uc25tcC9zbm1wLmNvbmYpLgorCisgICAgTm90ZSB0aGF0IHRoZSBOZXQtU05NUCBwYWNrYWdlIGRvZXMgbm90IGNvbWUgd2l0aCBhbiBleGFtcGxlIHNubXAuY29uZgorICBmaWxlLiAgU2VlICdzbm1wZ2V0IC1IJyBhbmQvb3IgdGhlIHNubXAuY29uZig1KSBtYW4gcGFnZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IGNhbiBhbHNvIHVzZSB0aGUgInNubXBjb25mIiBjb21tYW5kIHRvIGhlbHAgeW91IGdlbmVyYXRlIHlvdXIKKyAgc25tcC5jb25mIGNvbmZpZ3VyYXRpb24gZmlsZSAoanVzdCBydW4gaXQgYW5kIGFuc3dlciBpdHMgcXVlc3Rpb25zKS4KKworCisKKzxhIG5hbWU9IlBFUkwiPgorUEVSTAorPT09PQorCis8YSBuYW1lPSJXaGVyZV9jYW5fSV9nZXRfdGhlX3BlcmxfU05NUF9wYWNrYWdlXyI+CitXaGVyZSBjYW4gSSBnZXQgdGhlIHBlcmwgU05NUCBwYWNrYWdlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIEpvZSBNYXJ6b3QncyBleGNlbGxlbnQgcGVybCBTTk1QIG1vZHVsZSwgd2hpY2ggcmVxdWlyZXMgdGhlIHVjZC1zbm1wCisgIGxpYnJhcnksIGlzIG5vdyBpbmNsdWRlZCBpbiB0aGUgdWNkLXNubXAgc291cmNlIHJlbGVhc2UuICBJdCdzCisgIGxvY2F0ZWQgaW4gdGhlIHBlcmwvU05NUCBzdWJkaXJlY3Rvcnkgb2YgdGhlIHVjZC1zbm1wIHNvdXJjZSB0cmVlLgorCisgIEl0IGNhbiBhbHNvIGJlIGZvdW5kIGF0IGFueSBDb21wcmVoZW5zaXZlIFBlcmwgQXJjaGl2ZSBOZXR3b3JrCisgIChDUEFOKSBzaXRlIG1pcnJvciBpbiBtb2R1bGVzL2J5LW1vZHVsZS9TTk1QLiAgVG8gZmluZCB0aGUgQ1BBTiBzaXRlCisgIG5lYXJlc3QgeW91LCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cuY3Bhbi5vcmcvU0lURVMuaHRtbC4KKworICBXaXRoIHRoZSB2NSByZWxlYXNlIG9mIHRoZSBOZXQtU05NUCBzdWl0ZSwgdGhpcyBpcyBub3cgYWNjb21wYW5pZWQgYnkKKyAgYSBudW1iZXIgb2YgcGVybCBtb2R1bGVzIGdyb3VwZWQgdG9nZXRoZXIgdW5kZXIgdGhlIE5ldFNOTVAgbmFtZXNwYWNlLgorCisgIENvbnN1bHQgdGhlIFJFQURNRSBmaWxlIGluIHRoZSBTTk1QIHBlcmwgbW9kdWxlIGRpc3RyaWJ1dGlvbiB0byBmaW5kIAorICBvdXQgd2hhdCB2ZXJzaW9uIG9mIHRoZSB1Y2Qtc25tcCBsaWJyYXJ5IGl0IG5lZWRzIHRvIGJlIGxpbmtlZCBhZ2FpbnN0LgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfaW5zdGFsbF90aGVfUGVybF9TTk1QX21vZHVsZXNfIj4KK0hvdyBkbyBJIGluc3RhbGwgdGhlIFBlcmwgU05NUCBtb2R1bGVzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBc3N1bWluZyB5b3UgaGF2ZSBhIHJlYXNvbmFibHkgbmV3IChhbmQgcHJvcGVybHkgY29uZmlndXJlZCkgcGVybCBzeXN0ZW0sCisgIHRoaXMgc2hvdWxkIGJlIHNpbXBseToKKworICAgICAgICBjZCBwZXJsCQkoZm9yIDUuMC54KQorICBvciAgICBjZCBwZXJsL1NOTVAJKGZvciA0LjIueCkKKwlwZXJsIE1ha2VmaWxlLlBMCisJICAgIChwcmVzcyBSRVRVUk4gd2hlbiBwcm9tcHRlZCBmb3IgaG9zdCBhbmQgY29tbXVuaXR5KQorCW1ha2UKKwltYWtlIHRlc3QKKwltYWtlIGluc3RhbGwgIChwcm9iYWJseSBhcyByb290KQorCisgIE5vdGUgdGhhdCB3aXRoIHRoZSA1LjAgcmVsZWFzZSBsaW5lLCB0aGVyZSBhcmUgYWRkaXRpb25hbCBTTk1QLXJlbGF0ZWQKKyAgcGVybCBtb2R1bGVzIHRoYXQgc2hvdWxkIHByb2JhYmx5IGJlIGluc3RhbGxlZCBhcyB3ZWxsLiAgVGhlc2UgY2FuIGFsc28KKyAgYmUgZm91bmQgdW5kZXIgdGhlICdwZXJsJyBzdWJkaXJlY3RvcnkuICBBdCB0aGUgdmVyeSBsZWFzdCwgaW5zdGFsbCB0aGUKKyAgJ2RlZmF1bHRfc3RvcmUnIG1vZHVsZS4KKyAgICBUaGlzIGlzIG5vdCBuZWNlc3Nhcnkgd2l0aCB0aGUgNC4yLnggcmVsZWFzZXMuCisKKworCis8YSBuYW1lPSJCdXRfY29tcGlsaW5nX3RoaXNfZmFpbHNfX1doeV8iPgorQnV0IGNvbXBpbGluZyB0aGlzIGZhaWxzISBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBwZXJsIG1vZHVsZSB0ZW5kcyB0byBkZWx2ZSBxdWl0ZSBkZWVwbHkgaW50byB0aGUgaW50ZXJuYWxzIG9mIHRoZQorICBtYWluIE5ldC1TTk1QIGxpYnJhcnksIGFuZCBzbyBpcyBxdWl0ZSBzZW5zaXRpdmUgdG8gY2hhbmdlcyB3aXRoaW4gdGhlCisgIGxpYnJhcnkuICBJdCdzIGltcG9ydGFudCB0byB1c2UgdGhlIGNvcnJlY3QgdmVyc2lvbiBvZiB0aGUgbW9kdWxlLCB0aGF0CisgIGNvcnJlc3BvbmRzIHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IHlvdSBoYXZlIGluc3RhbGxlZC4gIElmIHlvdSdyZQorICB3b3JraW5nIHdpdGggdGhlIG1haW4gTmV0LVNOTVAgZGlzdHJpYnV0aW9uLCB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbiBvZgorICB0aGUgcGVybCBtb2R1bGUgaXMgc2hpcHBlZCBhcyBwYXJ0IG9mIHRoaXMsIGJ1dCB5b3UgKm11c3QqIGhhdmUKKyAgcnVuICJtYWtlIGluc3RhbGwiIG9uIHRoZSBtYWluIE5ldC1TTk1QIGRpc3RyaWJ1dGlvbiAqZmlyc3QqLgorCisgIElmIHlvdSdyZSB3b3JraW5nIHdpdGggYSByZWFkeS1pbnN0YWxsZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgbWFrZQorICBzdXJlIHlvdSBvYnRhaW4gYSBjb21wYXRpYmxlIHZlcnNpb24gb2YgdGhlIHBlcmwgbW9kdWxlLgorCisgICAgTm90ZSB0aGF0IHRoZSBwZXJsIG1vZHVsZXMgd2lsbCBiZSBjb21waWxlZCB1c2luZyB0aGUgY29tcGlsZXIKKyAgKGFuZCBjb21waWxlciBzZXR0aW5ncykgdXNlZCBmb3IgY29tcGlsaW5nIHRoZSBvcmlnaW5hbCBwZXJsIGJpbmFyeSwKKyAgKm5vdCogdGhvc2UgdXNlZCBmb3IgY29tcGlsaW5nIHRoZSBOZXQtU05NUCAob3IgVUNEKSBsaWJyYXJ5LgorICBJZiB0aGVzZSBhcmUgZGlmZmVyZW50IChlLmcuICdnY2MnIHVzZWQgZm9yIG9uZSBhbmQgJ2NjJyBmb3IgdGhlIG90aGVyKQorICB0aGVuIHRoaXMgbWF5IHdlbGwgY2F1c2UgcHJvYmxlbXMuICBJdCdzIG11Y2ggc2FmZXIgdG8gdXNlIGEgY29uc2lzdGVudAorICBlbnZpcm9ubWVudCBmb3IgYm90aC4gIFRoaXMgaXNzdWUgaXMgZGlzY3Vzc2VkIGluIGdyZWF0ZXIgZGV0YWlsIGluCisgIHRoZSBSRUFETUUuc29sYXJpcyBmaWxlLgorCisgICAgQWxzbyBub3RlIHRoYXQgdGhlIHY1IE5ldC1TTk1QIHN1aXRlICptdXN0KiBiZSBjb25maWd1cmVkIHRvIHByb3ZpZGUKKyAgc2hhcmVkIGxpYnJhcmllcyBpbiBvcmRlciBmb3IgdGhlIHBlcmwgbW9kdWxlcyB0byB3b3JrIGNvcnJlY3RseS4gIFRoaXMKKyAgaXMgbm90IG5lY2Vzc2FyeSB3aXRoIHRoZSB2NCBVQ0QtU05NUCBsaWJyYXJpZXMuCisKKworCis8YSBuYW1lPSJDb21waWxpbmdfdGhlX3BlcmxfbW9kdWxlX3dvcmtzX09LX19idXRfX21ha2VfdGVzdF9fZmFpbHNfX1doeV8iPgorQ29tcGlsaW5nIHRoZSBwZXJsIG1vZHVsZSB3b3JrcyBPSywgYnV0ICdtYWtlIHRlc3QnIGZhaWxzLiBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoYXQncyBkaWZmaWN1bHQgdG8gYW5zd2VyIGluIGdlbmVyYWwuCisgIFNvbWUgb2YgdGhlIHBlcmwgdGVzdHMgYXJlIHJhdGhlciBwaWNreSwgc28gdGhpcyBtYXkgc2ltcGx5IGJlCisgIHNvbWUgbWlub3IgaW5jb25zaXN0ZW5jeSBiZXR3ZWVuIHlvdXIgcHJlY2lzZSBzZXR1cCwgYW5kIHRoZQorICBleHBlY3RhdGlvbnMgb2YgdGhlIHRlc3QgZW52aXJvbm1lbnQuCisKKyAgICBDaGVjayB0aGF0IHlvdSBhcmUgd29ya2luZyB3aXRoIHRoZSBwZXJsIGRpc3RyaWJ1dGlvbiB0aGF0IG1hdGNoZXMKKyAgdGhlIFNOTVAgbGlicmFyaWVzICh1c2UgdGhlICdwZXJsL1NOTVAnIGluIHByZWZlcmVuY2UgdG8gQ1BBTiksIGFuZAorICB0aGF0IHlvdSBoYXZlIGluc3RhbGxlZCB0aGUgbWFpbiBsaWJyYXJpZXMgc3VjY2Vzc2Z1bGx5ICh1bmluc3RhbGwKKyAgYW55IG9sZCB2ZXJzaW9ucyBpZiB5b3UncmUgaGF2aW5nIHRyb3VibGUpLgorCisgICAgSWYgYWxsIHRoaXMgbG9va3MgT0ssIGFuZCBpZiBtb3N0IG9mIHRoZSB0ZXN0cyBwYXNzLCB0aGVuIGl0J3MKKyAgcHJvYmFibHkgc2FmZSB0byBydW4gJ21ha2UgaW5zdGFsbCcgYW55d2F5LiAgIFByb2JhYmx5LgorCisKKworPGEgbmFtZT0iVGhlX3BlcmxfX21ha2VfdGVzdF9fZmFpbHNfb25fdGhlX09JRF90ZXN0c19fSXNfaXRfc2FmZV90b19jb250aW51ZV8iPgorVGhlIHBlcmwgJ21ha2UgdGVzdCcgZmFpbHMgb24gdGhlIE9JRCB0ZXN0cy4gSXMgaXQgc2FmZSB0byBjb250aW51ZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBOby4gIEFsbW9zdCBjZXJ0YWlubHkgbm90LiAgSWYgdGhlICJwZXJsL09JRCIgdGVzdHMgZmFpbCB0aGUgZmlyc3QKKyAgZm91ciB0ZXN0cywgYW5kIHRoZW4gY3Jhc2hlcyBvdXQgY29tcGxhaW5pbmcgYWJvdXQgYSAibmV0c25tcF9vaWRQdHIiLAorICB0aGVuIHRoaXMgaXMgYSBzaWduIG9mIGEgbW9yZSBmdW5kYW1lbnRhbCBwcm9ibGVtLgorCisgIFRoZSA0LjIueCBsaW5lIHBlcmwgc3VwcG9ydCB3YXMgYSBzaW5nbGUgbW9kdWxlLCBzbyB3YXMgaW5kZXBlbmRlbnQKKyAgb2YgdGhlIHdheSB0aGF0IHRoZSBDIGxpYnJhcnkgd2FzIGNvbmZpZ3VyZWQuICBJbiBjb250cmFzdCB0byB0aGlzLCAKKyAgdGhlIDUuMC54IHBlcmwgc3VwcG9ydCBjb25zaXN0IG9mIGEgbnVtYmVyIG9mIGludGVyLWNvb3BlcmF0aW5nIG1vZHVsZXMsCisgIHdoaWNoIHJlbHkgb24gc2hhcmluZyBhIGNvbnNpc3RlbnQgQyBsaWJyYXJ5IGVudmlyb25tZW50LiAgSW4gcHJhY3Rpc2UsCisgIHRoaXMgbWVhbnMgdGhhdCB0aGUgcGVybCBtb2R1bGVzICpNVVNUKiBiZSBjb25maWd1cmVkIGFuZCBjb21waWxlZCB1c2luZworICBhIHNoYXJlZCB2ZXJzaW9uIG9mIHRoZSBDIGxpYnJhcnkuICAgVW5mb3J0dW5hdGVseSwgdGhlIGRlZmF1bHQgZm9yCisgIG1vc3QgZWFybHkgdmVyc2lvbnMgb2YgdGhlIE5ldC1TTk1QIHN1aXRlIHdhcyB0byBjb21waWxlIHVzaW5nIHN0YXRpYworICBsaWJyYXJpZXMgdW5sZXNzIGV4cGxpY2l0bHkgY29uZmlndXJlZCB0byB1c2Ugc2hhcmVkIGxpYnJhcmllcy4gIFRoZQorICBkZWZhdWx0IHNob3VsZCBiZSB0byB1c2Ugc2hhcmVkIGxpYnJhcmllcyBmcm9tIDUuMC43IG9ud2FyZHMuCisKKyAgVGhlIGVycm9yICJvaWQxIGlzIG5vdCBvZiB0eXBlIG5ldHNubXBfb2lkUHRyIiBpcyBhIGZhaXJseSBzdXJlIGluZGljYXRpb24KKyAgdGhhdCB0aGUgQyBsaWJyYXJ5IHdhcyBjb21waWxlZCBzdGF0aWNhbGx5LiAgIFlvdSdsbCBuZWVkIHRvIHJlLWNvbmZpZ3VyZQorICB0aGUgbWFpbiBOZXQtU05NUCBwYWNrYWdlIHVzaW5nIHRoZSAiLS1lbmFibGUtc2hhcmVkIiBjb25maWd1cmUgZmxhZy4KKyAgVGhlbiByZS1pbnN0YWxsIHRoZSBDIGxpYnJhcnkgYmVmb3JlIHJlLWNvbmZpZ3VyaW5nIGFuZCByZS1jb21waWxpbmcKKyAgdGhlIHBlcmwgbW9kdWxlIHN1cHBvcnQuCisKKyAgTm90ZSB0aGF0IHRoaXMgcHJvYmxlbSBkb2VzIG5vdCBhcmlzZSB3aGVuIHVzaW5nIHRoZSA0LjIueCB2ZXJzaW9uCisgIG9mIHBlcmwgc3VwcG9ydC4KKworCisKKzxhIG5hbWU9IklfbV90cnlpbmdfdG9fdXNlX21pYl9jX19vcl90a21pYl9fYW5kX2l0X2Nhbl90X2xvY2F0ZV9TTk1QX3BtXyI+CitJJ20gdHJ5aW5nIHRvIHVzZSBtaWIyYyAob3IgdGttaWIpIGFuZCBpdCBjYW4ndCBsb2NhdGUgU05NUC5wbT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoYXQncyBwcm9iYWJseSBiZWNhdXNlIHRoZSBTTk1QIHBlcmwgbW9kdWxlIGhhc24ndCBiZWVuIGluc3RhbGxlZC4KKyAgSXQncyBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgcGVybCBkaXN0cmlidXRpb24sIG5vciBpcyBpdCBpbnN0YWxsZWQKKyAgYnkgZGVmYXVsdCBpbiBSZWRIYXQgTGludXggKGZvciBleGFtcGxlKS4KKyAgICBZb3UnbGwgbmVlZCB0byBpbnN0YWxsIGl0LiAgU2VlIHRoZSBwcmV2aW91cyB0d28gcXVlc3Rpb25zLgorCisKKworPGEgbmFtZT0iSV9tX3RyeWluZ190b191c2VfbWliX2NfX29yX3RrbWliX19hbmRfaXRfY2FuX3RfbG9hZF9TTk1QX3NvXyI+CitJJ20gdHJ5aW5nIHRvIHVzZSBtaWIyYyAob3IgdGttaWIpIGFuZCBpdCBjYW4ndCBsb2FkIFNOTVAuc28/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgcHJvYmFibHkgdGhlIHNhbWUgcHJvYmxlbS4gIEVpdGhlciB0aGUgU05NUCBtb2R1bGUKKyAgaGFzbid0IGJlZW4gaW5zdGFsbGVkLCBvciBpdCdzIHRoZSB3cm9uZyB2ZXJzaW9uLiAgU2VlIHRoZQorICBwcmV2aW91cyB0d28gcXVlc3Rpb25zLgorCisKKworPGEgbmFtZT0iSV9tX3RyeWluZ190b191c2VfdGttaWJfYW5kX2l0X2Nhbl90X2xvY2F0ZV9Ua19wbV8iPgorSSdtIHRyeWluZyB0byB1c2UgdGttaWIgYW5kIGl0IGNhbid0IGxvY2F0ZSBUay5wbT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUay5wbSBpcyBhbm90aGVyIFBlcmwgcGFja2FnZSB0aGF0IG5lZWRzIHRvIGJlIGluc3RhbGxlZCBiZWZvcmUgdGttaWIKKyAgd2lsbCBydW4uICBJdCdzIGFsc28gYXZhaWxhYmxlIG9uIFBlcmwgQ1BBTi4gIFdlIHN1Z2dlc3QgdXNpbmcgdmVyc2lvbgorICAiVGs4MDAuMDExIiBvciBsYXRlci4gIEl0IGNhbiBiZSBpbnN0YWxsZWQgYnkgaXNzdWluZyB0aGUgY29tbWFuZDoKKworCQlwZXJsIC1NQ1BBTiAtZSBzaGVsbCA7ICJpbnN0YWxsIFRrIgorCisKKworPGEgbmFtZT0iSV92ZV9nb3RfYV9wcm9ibGVtX3dpdGhfdGhlX05ldF9TTk1QX21vZHVsZV9fX0Nhbl95b3VfaGVscF8iPgorSSd2ZSBnb3QgYSBwcm9ibGVtIHdpdGggdGhlIE5ldC1TTk1QIG1vZHVsZS4gIENhbiB5b3UgaGVscD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBTb3JyeSwgZGVzcGl0ZSB0aGUgc2ltaWxhci1zb3VuZGluZyBuYW1lLCB0aGUgTmV0LVNOTVAgKG9yIE5ldDo6U05NUCkKKyAgbW9kdWxlIGlzIG5vdGhpbmcgdG8gZG8gd2l0aCB0aGlzIHBhY2thZ2UsIG9yIHRoZSBOZXRTTk1QIG1vZHVsZXMuCisgIE5ldDo6U05NUCBpcyBhICJwdXJlLXBlcmwiIGltcGxlbWVudGF0aW9uIG9mIFNOTVAgc3VwcG9ydCwgZGV2ZWxvcGVkCisgIGJ5IERhdmlkIFRvd24uICBUaGUgZGV2ZWxvcGVycyBvZiB0aGUgKEMtYmFzZWQpIE5ldC1TTk1QIHN1aXRlIGRvCisgIG5vdCBoYXZlIGFueSBzaWduaWZpY2FudCBleHBlcmllbmNlIGluIHVzaW5nIHRoaXMgcGFydGljdWxhciBtb2R1bGUsCisgIGFuZCB5b3UnbGwgcHJvYmFibHkgYmUgYmV0dGVyIG9mZiBhc2tpbmcgZm9yIGhlbHAgdmlhIENQQU4gb3Igc29tZQorICBvdGhlciBwZXJsLXJlbGF0ZWQgZm9ydW0uCisKKworCis8YSBuYW1lPSJNSUJTIj4KK01JQlMKKz09PT0KKworPGEgbmFtZT0iV2hlcmVfY2FuX0lfZmluZF9hX01JQl9jb21waWxlcl8iPgorV2hlcmUgY2FuIEkgZmluZCBhIE1JQiBjb21waWxlcj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGF0IGRlcGVuZHMgd2hhdCB5b3UgbWVhbiBieSBhICJNSUIgY29tcGlsZXIiLiAgVGhlcmUgYXJlIGF0IGxlYXN0IHR3bworICB0eXBlcyBvZiB0b29sIHRoYXQgYXJlIGNvbW1vbmx5IHJlZmVycmVkIHRvIGJ5IHRoaXMgbmFtZS4KKworICBUaGUgZmlyc3QgaXMgYSB0b29sIHRvIGNoZWNrIE1JQiBmaWxlcyBmb3IgdmFsaWRpdHkuICBUaGlzIGZ1bmN0aW9uYWxpdHkKKyAgaXMgbW9zdGx5IGludGVncmF0ZWQgd2l0aGluIHRoZSBNSUIgcGFyc2VyIChwYXJ0IG9mIHRoZSBOZXQtU05NUCBsaWJyYXJ5KQorICBhbmQgaGVuY2UgaW5jbHVkZWQgaW4gYWxsIHRoZSBhcHBsaWNhdGlvbnMuICBUaGUgdG9vbCAnc25tcHRyYW5zbGF0ZScgaXMKKyAgcHJvYmFibHkgdGhlIG1vc3QgYXBwcm9wcmlhdGUgZm9yIHRoaXMgcHVycG9zZS4KKyAgICBOb3RlIHRoYXQgdGhlIHBhcnNlciBpcyBmYWlybHkgZm9yZ2l2aW5nIChzZWUgJ1doYXQgQVNOLjEgcGFyc2VyIGlzIHVzZWQnCisgIGJlbG93KSwgc28gdGhpcyBzaG91bGQgbm90IGJlIHJlZ2FyZGVkIGFzIGEgc3RhbXAgb2YgYXBwcm92YWwuCisKKyAgICBUaGUgc2Vjb25kIHR5cGUgb2YgdG9vbCBpcyBvbmUgdG8gdHVybiBhIE1JQiBzcGVjaWZpY2F0aW9uIGludG8gQyBjb2RlLAorICBzcGVjaWZpY2FsbHkgb25lIGRlc2lnbmVkIHRvIGFpZCBhZ2VudCBpbXBsZW1lbnRhdGlvbi4gIFRoZSBjb21tYW5kICdtaWIyYycKKyAgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgdG9vbCBmb3IgdGhlIE5ldC1TTk1QIGFnZW50LiAgCisgIFNlZSB0aGUgQ09ESU5HIHNlY3Rpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworCis8YSBuYW1lPSJJX2Nhbl90X2xvYWRfYW55X29mX3RoZV9taWJfZmlsZXNfX2FuZF90aGV5X3NlZW1fdG9fYmVfbWlzc2luZyI+CitJIGNhbid0IGxvYWQgYW55IG9mIHRoZSBtaWIgZmlsZXMsIGFuZCB0aGV5IHNlZW0gdG8gYmUgbWlzc2luZwordGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIG9mIHRoZSBmaWxlbmFtZS4gIFdoYXQncyBoYXBwZW5pbmc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgYSBwcm9ibGVtIGV4cGVyaWVuY2VkIHdpdGggU3VuIHN5c3RlbXMgd2hlbiB0aGUgdG9vbHMgaGF2ZQorICBiZWVuIGNvbXBpbGVkIHdpdGggYSBtaXh0dXJlIG9mIEJTRCBhbmQgU29sYXJpcyBlbnZpcm9ubWVudHMuCisgIFlvdSdsbCBuZWVkIHRvIHJlLWNvbmZpZ3VyZSBhbmQgY29tcGlsZSB0aGUgdG9vbHMsIG1ha2luZyBzdXJlIHRoYXQKKyAgJy91c3IvdWNiJyBpcyBub3QgaW4geW91ciBQQVRIIChvciBhdCBsZWFzdCBjb21lcyBhdCB0aGUgZW5kKS4KKworCisKKzxhIG5hbWU9IldoeV9hcmVuX3RfbXlfbWliX2ZpbGVzX2JlaW5nX3JlYWRfaW5fIj4KK1doeSBhcmVuJ3QgbXkgbWliIGZpbGVzIGJlaW5nIHJlYWQgaW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGUgTmV0LVNOTVAgbGlicmFyeSBvbmx5IGxvYWRzIGEgc3Vic2V0IG9mIE1JQiBmaWxlcyBieSBkZWZhdWx0LgorICBUaGlzIGxpc3QgaXMgc2V0IGF0IHdoZW4gdGhlIHN1aXRlIGlzIGZpcnN0IGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkLAorICBhbmQgYmFzaWNhbGx5IGNvcnJlc3BvbmRzIHRvIHRoZSBsaXN0IG9mIG1vZHVsZXMgdGhhdCB0aGUgYWdlbnQgc3VwcG9ydHMuCisgIChUaGlzIGlzIGEgc2ltcGxpZmljYXRpb24sIGJ1dCBpcyBhIHJlYXNvbmFibGUgZmlyc3QgYXBwcm94aW1hdGlvbikuCisKKyAgICBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgYnkgdXNpbmcgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gJy1tJywgdGhlCisgIGVudmlyb25tZW50YWwgdmFyaWFibGUgJ01JQlMnIG9yIHRoZSBzbm1wLmNvbmYgZGlyZWN0aXZlICdtaWJzJy4KKyAgRWFjaCBvZiB0aGVzZSB0YWtlIGEgKGNvbG9uLXNlcGFyYXRlZCkgbGlzdCBvZiBNSUIgbW9kdWxlIG5hbWVzCisgIHRvIGxvYWQuICAgU3RhcnRpbmcgdGhlIGxpc3Qgd2l0aCBhICcrJyBjaGFyYWN0ZXIgd2lsbCBhZGQgdGhlbSB0bworICB0aGUgZGVmYXVsdCBsaXN0IC0gb3RoZXJ3aXNlIGl0IHJlcGxhY2VzIHRoZSBkZWZhdWx0cy4KKworICAgIFVzaW5nIHRoZSBzcGVjaWFsIHZhbHVlICdBTEwnIHdpbGwgbG9hZCBhbGwgdGhlIE1JQiBmaWxlcyB0aGF0CisgIHRoZSBsaWJyYXJ5IGNhbiBmaW5kLgorCisKKyAgICBBbHRlcm5hdGl2ZWx5LCB0aGUgdG9vbHMgbWF5IGJlIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlLgorICBUaGUgZGVmYXVsdCBsb2NhdGlvbiBmb3IgdGhlIG1pYiBmaWxlcyBpcyAvdXNyL2xvY2FsL3NoYXJlL3NubXAvbWlicy4KKyAgQWdhaW4sIHRoaXMgaXMgc2V0IHdoZW4gdGhlIHN1aXRlIGlzIGZpcnN0IGNvbmZpZ3VyZWQgYW5kIGNvbXBpbGVkLgorICBUaGlzIGNhbiBiZSBjaGFuZ2VkIHVzaW5nIHRoZSBlbnZpcm9ubWVudGFsIHZhcmlhYmxlICdNSUJESVJTJworICBvciB0aGUgc25tcC5jb25mIGRpcmVjdGl2ZSAnbWliZGlycycuCisKKyAgICBOb3RlIHRoYXQgdGhpcyBtYXkgdmVyeSB3ZWxsIGFmZmVjdCB5b3UgaWYgeW91J3ZlIGluc3RhbGxlZCBhCisgIG5ldyB2ZXJzaW9uIG9mIHRoZSBzdWl0ZSBtYW51YWxseSwgcmVwbGFjaW5nIG9uZSBwcm92aWRlZCBieSB0aGUKKyAgc3VwcGxpZXIgKHdoaWNoIHR5cGljYWxseSB3b3VsZCB1c2UgYSBtb3JlICdjZW50cmFsJyBsb2NhdGlvbikuCisKKworICAgIEZpbmFsbHksIGFyZSB5b3Ugc3VyZSB0aGF0IHlvdSd2ZSBpbnN0YWxsZWQgdGhlIE1JQiBmaWxlcz8KKyAgSWYgeW91J3ZlIGNvbXBpbGVkIHRoZSBzdWl0ZSBmcm9tIHNjcmF0Y2gsIHlvdSBuZWVkIHRvIHJ1bgorICAibWFrZSBpbnN0YWxsIiBhdCBsZWFzdCBvbmNlLCBiZWZvcmUgdGhlIHRvb2xzIHdpbGwgYmUgYWJsZSB0bworICBmaW5kIHRoZSBNSUIgZmlsZXMuICBUaGlzIGlzIHVubGlrZWx5IHRvIGJlIGEgcHJvYmxlbSBpZiB5b3UndmUKKyAgYmVlbiB3b3JraW5nIHdpdGggdGhlIHRvb2xzIGZvciBhIHdoaWxlLCBidXQgY2FuIGJpdGUgdGhvc2UgY29taW5nCisgIGZyZXNoIHRvIHRoZSBTTk1QIHdvcmxkLgorCisKKworPGEgbmFtZT0iSV9tX2dldHRpbmdfYW5zd2Vyc19fYnV0X3RoZXlfcmVfYWxsX251bWJlcnNfX1doeV8iPgorSSdtIGdldHRpbmcgYW5zd2VycywgYnV0IHRoZXkncmUgYWxsIG51bWJlcnMuIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIGlzIGFjdHVhbGx5IHRoZSBzYW1lIGFzIHRoZSBwcmV2aW91cyBxdWVzdGlvbi4gIEJlY2F1c2UgdGhlIHRvb2xzCisgIGRvbid0IHJlYWQgaW4gZXZlcnkgTUlCIG1vZHVsZSB0aGV5IGNhbiBmaW5kLCBpdCBpcyBxdWl0ZSBwb3NzaWJsZQorICBmb3IgcmVzdWx0cyBmcm9tIGFuIGFnZW50IHRvIHJlZmVyIHRvIG1vZHVsZXMgdGhhdCBoYXZlIG5vdCBiZWVuIGxvYWRlZAorICAocGFydGljdWxhcmx5IHdpdGggR0VUTkVYVCByZXF1ZXN0cywgb3Igd2hlbiB3YWxraW5nIGEgdHJlZSkuCisgICAgIFRoZSB0b29scyB3aWxsIHJlcG9ydCB0aGUgYW5zd2VyIHF1aXRlIGNvcnJlY3RseSwgYnV0IHdvbid0IHRyYW5zbGF0ZQorICBpZGVudGlmaWVycyBhbmQgZW51bWVyYXRpb25zIGludG8gcmVhZGFibGUgc3RyaW5ncy4gIFRvIGZpeCB0aGlzLCB1c2UKKyAgdGhlIGVudmlyb25tZW50YWwgdmFyaWFibGVzIE1JQlMgb3IgTUlCRklMRVMgKG9yIHRoZSAnLW0nIGFuZCAnLU0nIGZsYWdzKQorICB0byByZWFkIGluIHRoZSByZWxldmFudCBtb2R1bGUgZmlsZXMuCisKKworCis8YSBuYW1lPSJXaGF0X2RvZXNfX0Nhbm5vdF9maW5kX21vZHVsZV9fWFhYX01JQl9fX21lYW5fIj4KK1doYXQgZG9lcyAiQ2Fubm90IGZpbmQgbW9kdWxlIChYWFgtTUlCKSIgbWVhbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBzaW1pbGFyIHRvIHRoZSBwcmV2aW91cyBxdWVzdGlvbnMuICAgSW4gdGhpcyBjYXNlLCBpdCdzCisgIHN0YXRpbmcgdGhhdCBpdCBjYW4ndCBmaW5kIHRoZSBzcGVjaWZpZWQgbW9kdWxlIC0gZWl0aGVyIGJlY2F1c2UKKyAgaXQncyBub3QgaW5zdGFsbGVkIHByb3Blcmx5LCBvciB0aGUgbmFtZSB1c2VkIGlzIHN1YnRseSB3cm9uZy4KKworICAgIElmIGl0J3MganVzdCBvbmUgb3IgdHdvIG1vZHVsZXMgdGhhdCBhcmUgbm90IGJlaW5nIGZvdW5kLCBjaGVjaworICB0aGF0IHRoZSBmaWxlcyBhcmUgaW4gdGhlIGV4cGVjdGVkIGxvY2F0aW9uLCBhcmUgcmVhZGFibGUsIGFuZCB0aGUKKyAgbmFtZSBiZWluZyB1c2VkIGlzIGNvcnJlY3QuICBOb3RlIHRoYXQgdGhlIG5hbWUgcmVwb3J0ZWQgaXMgdGhlCisgIG5hbWUgb2YgdGhlIE1JQiBtb2R1bGUsIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB0aGUgc2FtZSBhcyB0aGUKKyAgbmFtZSBvZiB0aGUgZmlsZS4gU2VlIHRoZSBxdWVzdGlvbiAnSG93IGRvIEkgYWRkIGEgTUlCIHRvIHRoZSB0b29scz8nCisgIGZvciBtb3JlIGRldGFpbHMgb24gdGhpcy4KKworICAgIElmIHRoZSB0b29sIGlzIGdlbmVyYXRpbmcgYSB3aG9sZSBzbGV3IG9mIGVycm9ycywgdGhlbiBpdCdzCisgIGxpa2VseSB0aGF0IGVpdGhlciB0aGUgTUlCIGZpbGVzIGhhdmVuJ3QgYmVlbiBpbnN0YWxsZWQgYXQgYWxsLAorICBvciB0aGUgbGlicmFyeSBpcyBsb29raW5nIGluIHRoZSB3cm9uZyBwbGFjZS4gICBTZWUgdGhlIHByZXZpb3VzCisgIHR3byBxdWVzdGlvbnMuCisKKworCis8YSBuYW1lPSJXaGF0X2Fib3V0X191bmxpbmtlZF9PSURfXyI+CitXaGF0IGFib3V0ICJ1bmxpbmtlZCBPSUQiPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBtZWFucyB0aGF0IHRoZSBsaWJyYXJ5IGhhcyBiZWVuIGFibGUgdG8gZmluZCB0aGUgTUlCIG1vZHVsZSwKKyAgYW5kIHBhcnNlIHRoZSBpbmRpdmlkdWFsIG9iamVjdHMgZGVmaW5lZCBpbiBpdCwgYnV0IGlzIGhhdmluZyBwcm9ibGVtcworICBsaW5raW5nIHRoZW0gdG9nZXRoZXIgaW50byBhIGNvbnNpc3RlbnQgdHJlZS4gIEluIHBhcnRpY3VsYXIsIGl0CisgIGNhbid0IGZpbmQgYW4gb2JqZWN0IGNvcnJlc3BvbmRpbmcgdG8gdGhlIG5hbWUgd2l0aGluIHRoZSBicmFjZXMKKyAgKGkuZS4gdGhlICd4eHgnIGluICd7eHh4IDk5fScpLgorCisgICAgVGhpcyBpcyBwcm9iYWJseSBkdWUgZWl0aGVyIHRvIGEgdHlwbyBpbiB0aGlzIG5hbWUgKHJlbWVtYmVyIHRoYXQKKyAgbmFtZXMgYXJlIGNhc2Ugc2Vuc2l0aXZlLCBzbyBhIHJlZmVyZW5jZSB0byAneHh4JyB3aWxsICpub3QqIG1hdGNoCisgIGEgZGVmaW5pdGlvbiBvZiAnWHh4JyksIG9yIGVsc2UgdGhlIG5hbWUgaXMgZGVmaW5lZCBpbiBhbm90aGVyIE1JQgorICBmaWxlLCBhbmQgdGhpcyBkZXBlbmRlbmN5IGlzIG1pc3NpbmcgZnJvbSB0aGUgSU1QT1JUIGNsYXVzZSBvZiB0aGlzCisgIE1JQiBmaWxlLgorCisKKworPGEgbmFtZT0iVGhlX3BhcnNlcl9kb2Vzbl90X2hhbmRsZV9jb21tZW50c19wcm9wZXJseV9fV2h5X25vdF8iPgorVGhlIHBhcnNlciBkb2Vzbid0IGhhbmRsZSBjb21tZW50cyBwcm9wZXJseS4gV2h5IG5vdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBtb3N0IGxpa2VseSByZWFzb24gaXMgdGhhdCB0aGUgbGluZSBpbiBxdWVzdGlvbiBjb250YWlucyB0d28KKyAgKG9yIG1vcmUpIHNlcXVlbmNlcyBvZiBwYWlycyBvZiBkYXNoZXMuICBUaGlzIGlzIG9mdGVuIHVzZWQgdG8gdHJ5CisgIGFuZCAiY29tbWVudCBvdXQiIGFuIHVud2FudGVkIGxpbmUgdGhhdCBhbHJlYWR5IGNvbnRhaW5zIGEgY29tbWVudDoKKworCS0tICAgYnJva2VuIDo6PSB7IG15TUlCIDEgfSAgIC0tIFRoaXMgaXNuJ3Qgd29ya2luZyB5ZXQKKworICBUaGUgYXNzdW1wdGlvbiBoZXJlIGlzIHRoYXQgYSBjb21tZW50IGNvbnRpbnVlcyB0byB0aGUgZW5kIG9mIHRoZSBsaW5lLgorICBVbmZvcnR1bmF0ZWx5LCB0aGlzIGFzc3VtcHRpb24gaXMgbm90IGNvcnJlY3QuCisgICAgQSBjb21tZW50IHdpbGwgY29udGludWUgZWl0aGVyIHRvIHRoZSBlbmQgb2YgdGhlIGxpbmUsIG9yIHRoZSBuZXh0CisgIG9jY3VyYW5jZSBvZiBhIHBhaXIgb2YgZGFzaGVzLiAgVGh1cyBpbiB0aGlzIGNhc2UsIHRoZSBkZWZpbml0aW9uIG9mCisgICJicm9rZW4iIGlzIGNvbW1lbnRlZCBvdXQgKGFzIGludGVuZGVkKSBidXQgdGhlIGZvbGxvd2luZyB0ZXh0IGlzCisgIHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUgTUlCLCBhbmQgd2lsbCBnZW5lcmF0ZSBhbiBlcnJvci4KKworICAgIEEgc2ltaWxhciBlZmZlY3QgY2FuIGJlIG9idGFpbmVkIHdoZW4gYSBsaW5lIG9mIGRhc2hlcyBoYXMgYmVlbiB1c2VkCisgIHRvIHRyeSBhbmQgbWFyayBzZXBhcmF0ZSBwYXJ0cyBvZiBhIE1JQiBmaWxlLgorCisgICAgTW9zdCBvZiB0aGUgYXBwbGljYXRpb25zIGhhdmUgYSBjb21tYW5kLWxpbmUgb3B0aW9uICgtUGMpIHdoaWNoIHdpbGwKKyAgd29yayBhcm91bmQgdGhpcyBwcm9ibGVtIGJ5IHRyZWF0aW5nIHRoZSB3aG9sZSBsaW5lIGFzIGEgY29tbWVudC4gIEJ1dAorICB0aGlzIGlzIG5vdCBzdHJpY3RseSBsZWdhbCwgYW5kIHRoZSBvZmZlbmRpbmcgTUlCIGZpbGUgc2hvdWxkIHJlYWxseSBiZQorICBjb3JyZWN0ZWQuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9yZXBsYWNlX01JQl92YWx1ZXNfd2l0aF9uZXdfb25lc18iPgorSG93IGRvIEkgcmVwbGFjZSBNSUIgdmFsdWVzIHdpdGggbmV3IG9uZXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBOZXQtU05NUCBwYXJzZXIgZ2VuZXJhbGx5IHRha2VzIHRoZSBmaXJzdCBkZWZpbml0aW9uIGl0IHNlZXMgZm9yIGVhY2gKKyAgb2JqZWN0IGluIHRoZSBNSUIgaGllcmFyY2h5LiAgIEV2ZW4gaWYgeW91IHNwZWNpZnkgeW91ciBmaWxlIHRvIGJlIHJlYWQKKyAgZmlyc3QsIGlmIHRoZSBJTVBPUlRTIGNsYXVzZXMgcmVmZXJlbmNlIGEgTUlCIHdpdGggY29tcGV0aW5nIG9iamVjdHMsCisgIHRob3NlIG9iamVjdHMgd2lsbCBiZSBwYXJzZWQgZmlyc3QuCisKKyAgV2hlbiBzcGVjaWZ5aW5nIHRoZSBSZXBsYWNlIE1JQiBjb21tYW5kLWxpbmUgb3B0aW9uICgtUFIpLCB0aGUgcGFyc2VyCisgIHdpbGwgdXNlIGRlZmluaXRpb25zIHNvdXJjZWQgZnJvbSB0aGUgbW9zdCByZWNlbnQgTUlCIGZpbGUuCisgIFRoZSBwYXJzZXIgd2lsbCByZXBsYWNlIE1JQiBvYmplY3RzIHdoZW4gdGhlIHN1Yi1pZGVudGlmaWVyIGFuZCBuYW1lIG1hdGNoLgorCisgIENhdXRpb246IFVzaW5nIFJlcGxhY2UgTUlCLCB0aGVyZSBpcyBOTyBndWFyYW50ZWUgdGhhdCB0aGUgcmVzdWx0aW5nCisgIE1JQiB0cmVlIHdpbGwgYmUgY29ycmVjdC4gIE90aGVyIE1JQiBvYmplY3RzIG1hdGNoaW5nIHRoZSBuYW1lIGJ1dAorICBub3QgdGhlIHN1Yi1pZGVudGlmaWVyIHdpbGwgcGVyc2lzdC4gIFN1Yi1oaWVyYXJjaGllcyBtYXkgYmUgcmVwYXJlbnRlZC4KKyAgSW4gcGFydGljdWxhciwgcmFuZG9tIGFjY2VzcyBzZWFyY2hpbmcgW3NlZSBtYW4gMSBzbm1wY21kXQorICBtYXkgZ2l2ZSB1bmV4cGVjdGVkIHJlc3VsdC4KKyAgVGhlIFJlcGxhY2UgTUlCIG9wdGlvbiBpcyBleHBlcmltZW50YWwsIGJ1eWVyIGJld2FyZSwgY2FycGUgZGllbSwgZXRjLgorCisgIEhlcmUgYXJlIGEgZmV3IGNvbnNpZGVyYXRpb25zIHRvIGhlbHAgeW91IG9idGFpbiBnb29kIHJlc3VsdHMuCisgIFRoZXNlIGhvbGQgdHJ1ZSBldmVuIGlmIHlvdSBuZXZlciB1c2UgdGhlIFJlcGxhY2UgTUlCIGZlYXR1cmUuCisgIFlvdXIgc3VnZ2VzdGlvbnMgZm9yIGltcHJvdmVtZW50IGFyZSB3ZWxjb21lZC4KKworICAgIDEuIFRoZSBwYXJzZXIgc2VhcmNoZXMgdGhlIHNwZWNpZmllZCBkaXJlY3RvcmllcyBhbmQgYXR0ZW1wdAorICAgICAgIHRvIHBhcnNlIGV2ZXJ5IGZpbGUgd2hvc2UgcGF0aCBkb2VzIG5vdCBiZWdpbiB3aXRoICIuIiAocGVyaW9kKS4KKyAgICAgICBSZW1vdmUgKG9yIHJlbmFtZSkgb2xkZXIgTUlCIGZpbGVzIGZyb20gdGhlc2UgZGlyZWN0b3JpZXMuCisgICAgICAgUmVuYW1lICJSRUFETUUiIHRvICIuUkVBRE1FIiAsIGV0Yy4KKworICAgIDIuIEhpbnQ6IHRoZSBwYXJzZXIncyBtb2R1bGUgbGlzdCBpcyBpbiBMSUZPIG9yZGVyLiBZb3UgbWF5IHNlZSBiZXR0ZXIKKyAgICAgICByZXN1bHRzIGlmIHRoZSBkaXJlY3Rvcnkgd2l0aCB0aGUgbW9zdCBjb3JyZWN0IE1JQiBmaWxlcyBpcworICAgICAgIHNwZWNpZmllZCBsYXN0IGluIHRoZSBNSUJESVJTIGVudmlyb25tZW50LgorCisgICAgMy4gQ29uc3RyYWluIHRoZSBwYXJzZXIgdG8gbm90IHJlYWQgaW4gZGVmYXVsdCBNSUIgZmlsZXMgYnkgc2V0dGluZworICAgICAgIHRoZSBNSUJTIGVudmlyb25tZW50YWwgdmFyaWFibGUgdG8gdGhlIGFwcHJvcHJpYXRlIHNlcGFyYXRvciBjaGFyYWN0ZXIKKyAgICAgICAoc2VtaS1jb2xvbiBvbiB3aW4zMiwgY29sb24gZXZlcnl3aGVyZSBlbHNlKS4KKyAgICAgICBTZXR0aW5nIHRoaXMgdG8gIiIgbWF5IGFsc28gaGF2ZSB0aGUgc2FtZSBlZmZlY3QuCisKKyAgICA0LiBUaGUgTUlCRklMRVMgZW52aXJvbm1lbnQgY2FuIHNwZWNpZnkgdGhlIHBhdGggb2YgdGhlIG5ldyBNSUIgZmlsZS4KKworICBXaXRoaW4gYSBwcm9ncmFtLCB0aGUgY2FsbDoKKwkgLyogIDQuMi54ICAqLworCSBkc19zZXRfYm9vbGVhbihEU19MSUJSQVJZX0lELCBEU19MSUJfTUlCX1JFUExBQ0UsIDEgfCAwKTsKKworICBvciwgaWYgdXNpbmcgdGhlIDUuMC54IHNlcmllcyBjb2RlOgorCS8qICA1LjAueCAgKi8KKwluZXRzbm1wX2RzX3NldF9ib29sZWFuKE5FVFNOTVBfRFNfTElCUkFSWV9JRCwKKwkJCSAgICAgICBORVRTTk1QX0RTX0xJQl9NSUJfUkVQTEFDRSwgMSB8IDApOworCisgIHdpbGwgZW5hYmxlIG9yIGRpc2FibGUgdGhlIFJlcGxhY2UgTUlCIGZlYXR1cmUgcmVzcGVjdGl2ZWx5LgorICBJZiB5b3UncmUgaGF2aW5nIHByb2JsZW1zIGxvYWRpbmcgYSBwYXJ0aWN1bGFyIE1JQiBmaWxlLCB0aGlzCisgIGNhbGwgY2FuIGJlIHVzZWQgdG8gZGlzYWJsZSB0aGlzIGZlYXR1cmUsIGJlZm9yZSB1c2luZyByZWFkX21pYigpIHRvCisgIGxvYWQgdGhlIHJlcXVpcmVkIGZpbGUsIGFuZCB0aGVuIHJlLWVuYWJsaW5nIHRoZSBSZXBsYWNlIE1JQiBmZWF0dXJlLgorICAob3IgdmljZSB2ZXJzYSwgYXMgYXBwcm9wcmlhdGUpLgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX2dldF9tb3JlX2luZm9ybWF0aW9uX2Fib3V0X3RoZXNlX01JQl9maWxlX3Byb2JsZW1zXyI+CitIb3cgY2FuIEkgZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlc2UgTUlCIGZpbGUgcHJvYmxlbXM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgY29tbWFuZCAnc25tcHRyYW5zbGF0ZScgaXMgdXNlZCB0byB0cmFuc2xhdGUgYmV0d2VlbiBudW1lcmljCisgIGFuZCBzeW1ib2xpYyBmb3JtcyBvZiBPSURzLiAgSXQgdXNlcyB0aGUgc2FtZSByb3V0aW5lcyBhcyB0aGUKKyAgJ2FjdGl2ZScgY29tbWFuZHMsIGJ1dCBkb2VzIG5vdCByZWx5IG9uIGNvbW11bmljYXRpbmcgc3VjY2Vzc2Z1bGx5CisgIHdpdGggYSBuZXR3b3JrIG1hbmFnZW1lbnQgYWdlbnQuICBBcyBzdWNoLCBpdCBpcyBhIHVzZWZ1bCB0b29sCisgIGZvciBpZGVudGlmeWluZyBwcm9ibGVtcyB3aXRoIHJlYWRpbmcgaW4gTUlCIGZpbGVzLgorCisgICAgSW4gcGFydGljdWxhciwgdGhlIGZvbGxvd2luZyBvcHRpb25zIG1heSBiZSB1c2VmdWwgaW4KKyAgaWRlbnRpZnlpbmcgcHJvYmxlbXM6CisJLVB3ICB3YXJucyBhYm91dCBjb25mbGljdGluZyBzeW1ib2xzCisJLVBXICBwcmludHMgbW9yZSB2ZXJib3NlIHdhcm5pbmdzIGFib3V0IG90aGVyIHByb2JsZW1zIGFzIHdlbGwKKwkJKGluIGJvdGggY2FzZXMsIGlnbm9yZSB0aGUgJ3htYWxsb2MnIHJlcG9ydHMpCisJLVQgICBwcm92aWRlcyBzdWItb3B0aW9ucyBmb3IgdmFyaW91cyB2aWV3cyBvZiB0aGVzZSBlbnRyaWVzCisKKyAgVGhlcmUgYXJlIG90aGVyICctUCcgb3B0aW9ucyB0byBjb250cm9sIHZhcmlvdXMgYXNwZWN0cyBvZiBNSUIgcGFyc2luZy4KKyAgU2VlIHRoZSAnc25tcHRyYW5zbGF0ZSgxKScgYW5kICdzbm1wY21kKDEpJyBtYW4gcGFnZXMgZm9yIG1vcmUgZGV0YWlscywKKyAgb3IgdGhlIHR1dG9yaWFsIGF0CisJaHR0cDovL3d3dy5uZXQtc25tcC5vcmcvdHV0b3JpYWwtNS9jb21tYW5kcy9zbm1wdHJhbnNsYXRlLmh0bWwKKworCisKKzxhIG5hbWU9IldoYXRfc190aGlzX2Fib3V0X190b29fbWFueV9pbXBvcnRlZF9zeW1ib2xzX18iPgorV2hhdCdzIHRoaXMgYWJvdXQgInRvbyBtYW55IGltcG9ydGVkIHN5bWJvbHMiPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQW55IE1JQiBmaWxlIHN0YXJ0cyB3aXRoIGFuIChvcHRpb25hbCkgbGlzdCBvZiBpZGVudGlmaWVycyB0aGF0CisgIGl0ICJpbXBvcnRzIiBmcm9tIG90aGVyIGZpbGVzLiAgVGhlIHBhcnNlciBpbXBsZW1lbnRzIHRoaXMgdXNpbmcKKyAgYSBmaXhlZCBzaXplIGJ1ZmZlciB0byBob2xkIHRoZSBpbXBvcnQgaW5mb3JtYXRpb24uCisgICAgVGhlcmUgYXJlIHR3byBjaXJjdW1zdGFuY2VzIGluIHdoaWNoIHRoaXMgY2FuIHJlc3VsdCBpbiB0aGUKKyAgZXJyb3IgbWVzc2FnZSBzaG93biBhYm92ZS4KKworICAgIEZpcnN0bHksIGlmIHRoZSBNSUIgZmlsZSByZWZlcnMgdG8gYW4gdW51c3VhbGx5IGxhcmdlIG51bWJlcgorICBvZiBleHRlcm5hbCBpZGVudGlmaWVycy4gIEhhbmRsaW5nIHRoaXMgY2FzZSByZXF1aXJlcyBhICh0cml2aWFsKQorICBwYXRjaCB0byB0aGUgcGFyc2luZyBjb2RlLiAgQ29udGFjdCB0aGUgY29kZXJzIGxpc3QgZm9yIGFkdmljZS4KKyAgICAgKFRoaXMgaXMgZXh0cmVtZWx5IHJhcmUgLSB0aGUgb25seSBleGFtcGxlIHRoYXQKKyAgICAgIHdlJ3ZlIGNvbWUgYWNyb3NzIGlzIHRoZSBDYWJsZXRyb24gVHJhcCBNSUIpLgorCisgICAgTXVjaCBtb3JlIGNvbW1vbiBpcyBhIHN5bnRheCBlcnJvciBpbiB0aGUgSU1QT1JUUyBjbGF1c2Ugb2YgdGhlCisgIE1JQiBmaWxlIGluIHF1ZXN0aW9uLiAgSW4gcGFydGljdWxhciwgY2hlY2sgdGhhdCB0aGlzIGVuZHMgaW4gYQorICBzZW1pY29sb24sIGJlZm9yZSBnb2luZyBvbiB0byB0aGUgbWFpbiBkZWZpbml0aW9uIHNlY3Rpb24uCisgIAorCisKKzxhIG5hbWU9IkFHRU5UIj4KK0FHRU5UCis9PT09PQorCis8YSBuYW1lPSJXaGF0X01JQnNfYXJlX3N1cHBvcnRlZF8iPgorV2hhdCBNSUJzIGFyZSBzdXBwb3J0ZWQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBmb2xsb3dpbmcgTUlCcyBhcmUgc3VwcG9ydGVkIChhdCBsZWFzdCBpbiBwYXJ0IGFuZCBvbiBzb21lIHN5c3RlbXMpOgorCisJLSBNSUItMiAgR2VuZXJhbCBuZXR3b3JrIHN0YXRpc3RpY3MgKFJGQyAxMjEzKQorCS0gVUNEIGFnZW50IGV4dGVuc2lvbnMKKwkJKHByb2Nlc3NlcywgZGlza3MsIG1lbW9yeSwgbG9hZCBhdmVyYWdlLAorCQkgc2hlbGwgY29tbWFuZHMsIGVycm9yIGhhbmRsaW5nKQorCS0gSG9zdCBSZXNvdXJjZXMgKFJGQyAxNTE0IGFuZCAyNzkwKQorCS0gU05NUHYzIE1JQlMgKFJGQ3MgMjU3MS02KQorCisgIFRoZSBTTk1QdjIgUGFydHkgYW5kIE1hbmFnZXItdG8tTWFuYWdlciBNSUJzIChSRkNzIDE0NDcgJiAxNDUxKSBoYXZlIGJlZW4KKyAgd2l0aGRyYXduLgorCisKKworPGEgbmFtZT0iV2hhdF9wcm90b2NvbHNfYXJlX3N1cHBvcnRlZF8iPgorV2hhdCBwcm90b2NvbHMgYXJlIHN1cHBvcnRlZD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgYWdlbnQgc3VwcG9ydHMgYWxsIHRocmVlIGN1cnJlbnQgdmVyc2lvbnMgb2YgU05NUCAodjEsIHYyYyBhbmQgdjMpLAorICBvdmVyIGJvdGggVURQIGFuZCBUQ1AgdHJhbnNwb3J0cywgYXMgd2VsbCBhcyBhIFNNVVggKFJGQyAxMjI3KSBtYXN0ZXIKKyAgYWdlbnQsIEFnZW50WCAoUkZDIDIyNTcgKSBpbiBib3RoIG1hc3RlciBhbmQgc3ViYWdlbnQgcm9sZXMsIGFuZCBTTk1QCisgIHByb3h5aW5nLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfY29uZmlndXJlX3RoZV9hZ2VudF8iPgorSG93IGRvIEkgY29uZmlndXJlIHRoZSBhZ2VudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGF0IGRlcGVuZHMgb24gd2hhdCB5b3Ugd2FudCBpdCB0byBkby4gIFNlZSB0aGUgc25tcGQuY29uZig1KSBtYW51YWwKKyAgcGFnZSBmb3IgdGhlIHBvc3NpYmlsaXRpZXMuCisKKyAgWW91IGNhbiBhbHNvIHJ1biB0aGUgInNubXBjb25mIiBwZXJsIHNjcmlwdCB0byBoZWxwIHlvdSBjcmVhdGUgdGhpcworICBmaWxlLiAgU3RhcnQgb2ZmIHdpdGggJ3NubXBjb25mIC1nIGJhc2ljX3NldHVwJyB0byBnZXQgeW91IGdvaW5nLgorCisKKworPGEgbmFtZT0iSG93X2RvX0lfYWRkX2FfTUlCX3RvX3RoZV9hZ2VudF8iPgorSG93IGRvIEkgYWRkIGEgTUlCIHRvIHRoZSBhZ2VudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hvdyBkbyBJIGFkZCBmdW5jdGlvbmFsaXR5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBXaGlsZSBzaW1wbHkgYWRkaW5nIGEgZmlsZSB0byB0aGUgTUlCIGRpcmVjdG9yeSAoYW5kIHBvc3NpYmx5IHR3ZWFraW5nCisgIHRoZSBsaXN0IG9mIE1JQnMgdG8gbG9hZCkgaXMgc3VmZmljaWVudCBmb3IgdGhlIHRvb2xzLCB1bmZvcnR1bmF0ZWx5CisgIGV4dGVuZGluZyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgYWdlbnQgdG8gaW5jbHVkZSB0aGlzIGlzIG5vdCBzbyBzaW1wbGUuCisgIEluIGZhY3QsIHRoZSBhZ2VudCBtYWtlcyBsaXR0bGUgb3Igbm8gdXNlIG9mIHRoZXNlIGZpbGVzLCBhbmQgd2lsbCB3b3JrCisgIHF1aXRlIGhhcHBpbHkgd2l0aG91dCB0aGVtLiAgQWxsIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3ludGF4IGFuZAorICBzY29wZSBvZiB0aGUgdmFyaWFibGVzIHN1cHBvcnRlZCBpcyBoYXJkd2lyZWQgaW50byB0aGUgaW1wbGVtZW50YXRpb24KKyAgb2YgdGhlIGFnZW50LgorCisgIFRoZXJlIGFyZSBhIG51bWJlciBvZiBhbHRlcm5hdGl2ZSB3YXlzIHRvIGFkZCBmdW5jdGlvbmFsaXR5IGZvciBhIG5ldworICBNSUIgdG8gdGhlIGFnZW50LgorCisgIEZpcnN0bHksIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhlIGFnZW50IGRpc3RyaWJ1dGlvbiBhbHJlYWR5IGluY2x1ZGVzCisgIHRoZSBkZXNpcmVkIGZ1bmN0aW9uYWxpdHksIGJ1dCB0aGlzIGhhcyBzaW1wbHkgbm90IGJlZW4gY29uZmlndXJlZCBpbgorICB0byB0aGUgcnVubmluZyB2ZXJzaW9uLiAgVGhpcyBpcyBkb25lIHVzaW5nIHRoZSBjb25maWd1cmUgb3B0aW9uCisJCS0td2l0aC1taWItbW9kdWxlcz0ibGlzdCIKKyAgKHdoZXJlICJsaXN0IiBpcyBhIHNwYWNlLXNlcGFyYXRlZCBsaXN0IG9mIG1vZHVsZXMgdG8gaW5jbHVkZSkgdGhlbgorICByZWNvbXBpbGluZyB0aGUgYWdlbnQuCisgIE5vdGUgdGhhdCBzb21lIGZ1bmN0aW9uYWxpdHkgY29uY2VybmVkIHdpdGggbW9uaXRvcmluZyBhbmQgbWFuYWdpbmcKKyAgdW5peCBob3N0cyBpcyBpbmNsdWRlZCBpbiB0aGUgVUNEIGV4dGVuc2lvbiBtb2R1bGVzLCB3aGljaCBhcmUgbG9jYXRlZAorICB3aXRoaW4gdGhlICdwcml2YXRlJyBicmFuY2ggb2YgdGhlIE1JQiB0cmVlLiAgVGhpcyBpcyBjb3ZlcmVkIGluIGEgbGF0ZXIKKyAgcXVlc3Rpb24gaW4gdGhpcyBGQVEuCisKKyAgU2Vjb25kbHksIGl0IGlzIHBvc3NpYmxlIGZvciB0aGUgYWdlbnQgdG8gcnVuIGNvbW1hbmRzIG9yIHNoZWxsIHNjcmlwdHMKKyAgaW4gcmVzcG9uc2UgdG8gcXVlcmllcy4gIFRoZXNlIGNhbiBvYnRhaW4gYW5kIHJlcG9ydCB0aGUgbmVjZXNzYXJ5CisgIGluZm9ybWF0aW9uLCBvciBwZXJmb3JtIGFjdGlvbnMgYXMgcmVxdWlyZWQuCisgIERldGFpbGVkIGluZm9ybWF0aW9uIGFuZCBleGFtcGxlcyBhcmUgcHJvdmlkZWQgaW4gdGhlIHNubXBkKDgpIGFuZAorICBzbm1wZC5jb25mKDUpIG1hbnVhbCBwYWdlcywgYW5kIHRoZSBFWEFNUExFLmNvbmYgZmlsZS4KKyAgVGhpcyBpcyBrbm93biBhcyAicGFzcy10aHJvdWdoIiBzdXBwb3J0LgorCisgIFRoaXJkbHksIGl0IG1heSBiZSBwb3NzaWJsZSB0byBsaW5rIGFub3RoZXIgYWdlbnQgKHdoaWNoIGFscmVhZHkKKyAgc3VwcG9ydHMgdGhlIGRlc2lyZWQgTUlCKSwgYXMgYSAic3ViYWdlbnQiIG9mIHRoZSBOZXQtU05NUCBtYXN0ZXIKKyAgKG9yIHZpY2UgdmVyc2EpLiAgVGhlIHBvc3NpYmlsaXRpZXMgaGVyZSBhcmUgU01VWCwgQWdlbnRYIG9yIHByb3hpZWQKKyAgU05NUCAoc2VlIHRoZSBuZXh0IHF1ZXN0aW9uIGJ1dCBvbmUpLgorCisgIEZpbmFsbHksIHRoZSBhZ2VudCBpdHNlbGYgY2FuIGJlIGV4dGVuZGVkIHRvIHN1cHBvcnQgYWRkaXRpb25hbCBNSUIKKyAgZ3JvdXBzLCBieSB3cml0aW5nIHRoZSBuZWNlc3NhcnkgQyBjb2RlLCBhbmQgaW5jbHVkaW5nIHRoaXMgd2l0aGluCisgIHRoZSBtYWluIGFnZW50IC0gZWl0aGVyIHN0YXRpY2FsbHkgY29tcGlsZWQgaW4sIG9yIGR5bmFtaWNhbGx5IGxvYWRlZC4KKyAgVGhpcyBpcyBjb3ZlcmVkIGZ1cnRoZXIgaW4gdGhlIG5leHQgc2VjdGlvbi4KKworICAgIE5vdGUgdGhhdCB0aGVyZSBpcyBubyB2aXNpYmxlIGRpZmZlcmVuY2UgYmV0d2VlbiAncGFzcy10aHJvdWdoJworICBNSUIgc3VwcG9ydCwgc3ViYWdlbnRzLCBhbmQgbW9kdWxlcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhlIG1haW4gYWdlbnQKKyAgaXRzZWxmLiBUb29scyBxdWVyeWluZyB0aGUgYWdlbnQgd2lsbCBzZWUgYSBzaW5nbGUgTUlCIHN0cnVjdHVyZS4KKyAKKworCis8YSBuYW1lPSJXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9fZXhlY19fX19zaF9fYW5kX19wYXNzX18iPgorV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gJ2V4ZWMnLCAnc2gnIGFuZCAncGFzcyc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgJ2V4ZWMnIHdpbGwgZm9yayBvZmYgdGhlIHNwZWNpZmllZCBjb21tYW5kIGFuZCByZXR1cm4gdGhlIGV4aXQgc3RhdHVzCisgIGFuZC9vciB0aGUgb3V0cHV0LiAgQXJndW1lbnRzIGFyZSBwYXNzZWQgZGlyZWN0bHkgdG8gdGhlIGNvbW1hbmQuCisKKyAgICAnc2gnIGlzIHNpbWlsYXIsIGJ1dCBpbnZva2VzIGEgc2hlbGwgdG8gcnVuIHRoZSBjb21tYW5kIGxpbmUgZ2l2ZW4uCisgIFRoaXMgbWVhbnMgdGhhdCBxdW90ZWQgYXJndW1lbnRzIHdpbGwgYmUgcmVjb2duaXNlZCBhcyBzdWNoLCBhbmQgYWxzbworICBhbGxvd3MgcmVkaXJlY3Rpb24sIGFuZCBvdGhlciBzaW1pbGFyIHNoZWxsIGludGVycHJldGF0aW9uLgorCisgIE5laXRoZXIgb2YgdGhlc2UgbWVjaGFuaXNtcyByZXF1aXJlIHRoZSBjb21tYW5kIHRvIGhhdmUgYW55IGtub3dsZWRnZQorICBvZiB0aGUgZmFjdCB0aGF0IHRoZXkgYXJlIGJlaW5nIHVzZWQgaW4gdGhpcyBtYW5uZXIuICBOb3RlIHRoYXQgcmV0dXJuCisgIHZhbHVlcyBhcmUgY2FjaGVkIHdpdGhpbiB0aGUgYWdlbnQgZm9yIDMwIHNlY29uZHMsIHJhdGhlciB0aGFuIGludm9raW5nCisgIHRoZSBjb21tYW5kIGZvciBldmVyeSByZXF1ZXN0LgorCisKKyAgICAncGFzcycgaXMgYSBtb3JlIGdlbmVyYWwgbWVjaGFuaXNtIGZvciBleHRlbmRpbmcgdGhlIGFnZW50LCBhbmQgdGhlCisgIGNvbW1hbmQgZ2l2ZW4gd2lsbCBiZSBpbnZva2VkIGZvciBhbnkgcmVxdWVzdCB3aXRoaW4gdGhlIHNwZWNpZmljIE1JQgorICBzdWJ0cmVlLiAgRGV0YWlscyBvZiBwcmVjaXNlbHkgaG93IHRoaXMgY29tbWFuZCB3aWxsIGJlIGNhbGxlZCBpbgorICB2YXJpb3VzIGNpcmN1bXN0YW5jZXMgaXMgZ2l2ZW4gaW4gdGhlICdzbm1wZC5jb25mKDUpJyBtYW4gcGFnZS4KKworICAgICdwYXNzLXBlcnNpc3QnIGlzIHNpbWlsYXIsIGJ1dCB0aGUgY29tbWFuZCB3aWxsIGNvbnRpbnVlIHJ1bm5pbmcKKyAgZXZlbiBvbmNlIHRoZSBpbml0aWFsIHJlcXVlc3QgaGFzIGJlZW4gYW5zd2VyZWQuCisKKyAgU2VlICdzbm1wZC5jb25mKDUpJyBmb3IgbW9yZSBkZXRhaWxzLgorCisgIAorCis8YSBuYW1lPSJXaGF0X3NfdGhlX2RpZmZlcmVuY2VfYmV0d2Vlbl9BZ2VudFhfX1NNVVhfYW5kX3Byb3hpZWRfU05NUF8iPgorV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gQWdlbnRYLCBTTVVYIGFuZCBwcm94aWVkIFNOTVA/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgQWxsIHRocmVlIGFyZSBwcm90b2NvbHMgdGhhdCBjYW4gYmUgdXNlZCB0byBtYWtlIHR3byBvciBtb3JlIGFnZW50cworICBhcHBlYXIgYXMgb25lIHRvIHRoZSBxdWVyeWluZyBhcHBsaWNhdGlvbi4gIEluIGVhY2ggY2FzZSwgb25lIGFnZW50CisgIHRha2VzIHRoZSByb2xlIG9mICJtYXN0ZXIiLCBhbmQgZGVsZWdhdGVzIHJlcXVlc3RzIHRvIG9uZSBvZiB0aGUgb3RoZXJzCisgIGFzIGFuZCB3aGVyZSB0aGlzIGlzIGFwcHJvcHJpYXRlLiAgVGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gdGhlbSBtYWlubHkKKyAgcmVsYXRlIHRvIGhvdyBkYXRhIGlzIHJlcHJlc2VudGVkLCBhbmQgdGhlIG1lY2hhbmlzbXMgZm9yIGNvbW11bmljYXRpb24KKyAgYmV0d2VlbiBtYXN0ZXIgYW5kIHN1YmFnZW50cy4KKworICAgIFNNVVggYW5kIHByb3h5IFNOTVAgYm90aCBlc3NlbnRpYWxseSB1c2UgdGhlIHN0YW5kYXJkIFNOTVAgcGFja2V0IGZvcm1hdC4KKyAgVGhlIG1haW4gZGlmZmVyZW5jZSBpcyB0aGF0IGEgcHJveHkgU05NUCBzdWJhZ2VudCBuZWVkIG5vdCBiZSBhd2FyZSB0aGF0CisgIGl0IGlzIGFjdGluZyBpbiBzdWNoIGEgcm9sZS4gIEl0IHR5cGljYWxseSBsaXN0ZW5zIG9uIGEgbm9uLXN0YW5kYXJkIHBvcnQsCisgIGFuZCBzaW1wbHkgcmVjZWl2ZXMgcmVxdWVzdHMgYXMgdXN1YWwsIGZvcndhcmRlZCBmcm9tIHRoZSBtYXN0ZXIgYWdlbnQuIAorICBUaGUgbWFpbiBpc3N1ZSB0byBiZSBhd2FyZSBvZiBpcyB0aGF0IHN1Y2ggcmVxdWVzdHMgd2lsbCB1c3VhbGx5IGFwcGVhcgorICB0byBjb21lIGZyb20gdGhlIGxvY2FsIGhvc3QsIGFuZCB0aGlzIG1heSBhZmZlY3QgaG93IHRoZSBhY2Nlc3MgY29udHJvbAorICBtZWNoYW5pc21zIG5lZWQgdG8gYmUgc2V0IHVwLgorCisgICAgU01VWCB1c2VzIGEgc2ltaWxhciBwYWNrZXQgZm9ybWF0LCBidXQgdGhlIHN1YmFnZW50ICJyZWdpc3RlcnMiIHdpdGgKKyAgdGhlIG1hc3RlciBhZ2VudCwgcHJvdmlkaW5nIGEgc3VpdGFibGUgcGFzc3dvcmQuICBUaGUgTmV0LVNOTVAgKGFuZCBVQ0QpCisgIGFnZW50IGluY2x1ZGVzIHRoZSBwb3NzaWJpbGl0eSBvZiBhY3RpbmcgYXMgYSBTTVVYIG1hc3RlciBhZ2VudCwgYnV0IHRoZQorICBzdWl0ZSBkb2VzIG5vdCBpbmNsdWRlIGEgc3ViYWdlbnQgQVBJLiAgIE5vdGUgdGhhdCB0aGUgU01VWCBwcm90b2NvbCBoYXMKKyAgZXNzZW50aWFsbHkgYmVlbiBzdXBlcmNlZGVkIGJ5IEFnZW50WCwgYnV0IGlzIHN0aWxsIHByb3ZpZGVkIGluIG9yZGVyIHRvCisgIHN1cHBvcnQgZXhpc3RpbmcgU01VWCBzdWJhZ2VudHMuCisgICAgU2VlIHRoZSBmaWxlICdhZ2VudC9taWJncm91cC9SRUFETUUuc211eCcgZm9yIGRldGFpbHMuCisKKyAgICBBZ2VudFggdXNlcyBhIG1vcmUgY29tcGFjdCAoYW5kIHNpbXBsZXIpIHBhY2tldCBmb3JtYXQsIHdpdGggYSByaWNoZXIKKyAgcmFuZ2Ugb2YgYWRtaW5pc3RyYXRpdmUgY29tbWFuZHMsIGFuZCBwcm92aWRlcyBhIG1vcmUgZmxleGlibGUgYW5kIHJlbGlhYmxlCisgIGV4dGVuc2lvbiBtZWNoYW5pc20uICBUaGUgTmV0LVNOTVAgYWdlbnQgY2FuIGJlIHVzZWQgaW4gYm90aCBtYXN0ZXIgYW5kCisgIHN1YmFnZW50IHJvbGVzLCBhbmQgdGhlIGFnZW50IGxpYnJhcnkgY2FuIGFsc28gYmUgdXNlZCB0byBlbWJlZCBhbiBBZ2VudFgKKyAgc3ViYWdlbnQgd2l0aGluIGFub3RoZXIgYXBwbGljYXRpb24uCisgICAgU2VlIHRoZSBmaWxlICdSRUFETUUuYWdlbnR4JyBmb3IgZGV0YWlscy4KKworICBOb3RlIHRoYXQgc3VwcG9ydCBmb3IgU01VWCBpcyBub3QgY29uZmlndXJlZCBpbiBieSBkZWZhdWx0LiAgWW91IHdpbGwKKyAgbmVlZCB0byBydW4gY29uZmlndXJlIHdpdGggdGhlIG9wdGlvbgorCisJCS0td2l0aC1taWItbW9kdWxlcz1zbXV4CisKKyAgU3RhcnRpbmcgZnJvbSByZWxlYXNlIDQuMi4xLCBBZ2VudFggc3VwcG9ydCBpcyBub3cgaW5jbHVkZWQgYnkgZGVmYXVsdCwKKyAgYnV0IG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgYWN0aXZhdGVkIGluIHRoZSBtYXN0ZXIgYWdlbnQuICBEbyB0aGlzIGJ5CisgIGFkZGluZyB0aGUgbGluZQorCisJCW1hc3RlciBhZ2VudHgKKworICB0byB0aGUgc25tcGQuY29uZiBmaWxlIGJlZm9yZSBzdGFydGluZyB0aGUgYWdlbnQuICBOb3RlIHRoYXQgdGhlcmUgYXJlCisgIGEgbnVtYmVyIG9mIGtub3duIHByb2JsZW1zIHdpdGggdGhlIEFnZW50WCBzdXBwb3J0IGluIHRoZSA0LnggbGluZSwgYW5kCisgIHRoaXMgc2hvdWxkIG5vdCBiZSB1c2VkIG9uIHByb2R1Y3Rpb24gc3lzdGVtcy4gIFRoZSA1LjAgQWdlbnRYIHN1cHBvcnQKKyAgaGFzIGJlZW4gc2lnbmlmaWNhbnRseSBpbXByb3ZlZCwgYW5kIHByb2R1Y3Rpb24gdXNlIGlzIGxlc3MgZm9vbGhhcmR5LgorICAgIFNlZSBSRUFETUUuYWdlbnR4IGZvciBkZXRhaWxzLgorCisKKworPGEgbmFtZT0iV2hhdF9hYm91dF9fZGxtb2RfX19fd2hhdF9zX3RoYXRfYWJvdXRfIj4KK1doYXQgYWJvdXQgJ2RsbW9kJyAtIHdoYXQncyB0aGF0IGFib3V0PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBEeW5hbWljYWxseSBsb2FkZWQgbW9kdWxlcyBhcmUgYSBtZWFucyBvZiBpbmNsdWRpbmcgYSBNSUIgaW1wbGVtZW50YXRpb24KKyAgbW9kdWxlIHdpdGhpbiB0aGUgbWFpbiBTTk1QIGFnZW50IChvciBhbiBBZ2VudFggc3ViYWdlbnQpIHdpdGhvdXQgbmVlZGluZworICB0byByZS1jb21waWxlIGFuZCByZS1saW5rIHRoZSBhZ2VudCBiaW5hcnkuICBJbnN0ZWFkLCBkZXRhaWxzIG9mIHRoZQorICBtb2R1bGUocykgdG8gbG9hZCBhcmUgc3BlY2lmaWVkIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUsIGFuZCB0aGUgYWdlbnQKKyAgbG9jYXRlcyB0aGUgZmlsZXMgbGlzdGVkLCBhbmQgbWVyZ2VzIHRoZW0gaW4gYXQgcnVuIHRpbWUuCisKKyAgU2VlIGh0dHA6Ly93d3cubmV0LXNubXAub3JnL3R1dG9yaWFsLTUvdG9vbGtpdC9kbG1vZC8gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKKworCis8YSBuYW1lPSJXaGljaF9zaG91bGRfSV91c2VfIj4KK1doaWNoIHNob3VsZCBJIHVzZT8KKy0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoYXQncyBhIGRpZmZpY3VsdCBxdWVzdGlvbi4KKworICBDb21wYXJpbmcgdGhlIHRocmVlIHByb3RvY29scywgU05NUCB3YXMgbm90IG9yaWdpbmFsbHkgZGVzaWduZWQKKyAgYXMgYW4gaW50ZXJuYWwgc3ViYWdlbnQtY29tbXVuaWNhdGlvbiBwcm90b2NvbCwgYW5kIHRoZXJlIGFyZQorICBjZXJ0YWluIGFyY2hpdGVjdHVyYWwgbGltaXRhdGlvbnMgdG8gU01VWCwgd2hpY2ggd2VyZSBhZGRyZXNzZWQKKyAgYXMgcGFydCBvZiB0aGUgZGVzaWduIG9mIEFnZW50WC4gIFRoZXNlIGluY2x1ZGUgc3VjaCBhc3BlY3RzIGFzCisgIHJlbGlhYmxlIGhhbmRsaW5nIG9mIFNFVCByZXF1ZXN0cyAocGFydGljdWxhcmx5IGluIHRoZSBmYWNlIG9mCisgIGZhaWx1cmVzKSwgYSBjb21tb24gdmFsdWUgZm9yIHN5c1VwVGltZSwgYW5kIGEgbWVjaGFuaXNtIGZvcgorICBzaGFyaW5nIHRhYmxlcyBhY3Jvc3MgbXVsdGlwbGUgc3ViYWdlbnRzLgorICAgIFNvIGZyb20gYSBwdXJlbHkgZnVuY3Rpb25hbCBwb2ludCBvZiB2aWV3LCBBZ2VudFggaXMgdGhlIG1vc3QKKyAgYXBwcm9wcmlhdGUgY2hvaWNlIGZvciBzdWJhZ2VudCBjb21tdW5pY2F0aW9uLgorCisgIEluIHRlcm1zIG9mIGltcGxlbWVudGF0aW9uLCBTTVVYIGlzIHRoZSBtb3N0IG1hdHVyZSBvZiB0aGUgdGhyZWUsCisgIGJ1dCBpcyBubyBsb25nZXIgYmVpbmcgYWN0aXZlbHkgbWFpbnRhaW5lZC4gIFRoZSBvcmlnaW5hbCBhdXRob3IKKyAgaGFzIG1vdmVkIG9uLCBhbmQgdGhlIGN1cnJlbnQgZGV2ZWxvcGVycyBkb24ndCB1c2UgdGhpcyBmYWNpbGl0eS4KKyAgSXQgYWxzbyBvbmx5IGluY2x1ZGVzIG1hc3RlciBhZ2VudCBzdXBwb3J0IC0gdGhlIHBhY2thZ2UgZG9lcyBub3QKKyAgcHJvdmlkZSBhIFNNVVggc3ViLWFnZW50IEFQSS4KKyAgICBUaGUgQWdlbnRYIHN1cHBvcnQgaW4gdGhlIDQueCBsaW5lIGhhcyBhIG51bWJlciBvZiBrbm93biBwcm9ibGVtcywKKyAgYW5kIGlzIG5vdCBzdWl0YWJsZSBmb3IgdXNlIGluIGZyb250LWxpbmUgc2l0dWF0aW9ucyAodGhvdWdoIGl0J3MKKyAgcHJvYmFibHkgc3VmZmljaWVudGx5IHN0YWJsZSBhbmQgZnVuY3Rpb25hbCBmb3Igc2ltcGxlIGRheS10by1kYXkKKyAgdXNlKS4gIFRoZSA1LjAgYWdlbnQgaGFzIHNlZW4gYSBzaWduaWZpY2FudCBhbW91bnQgb2YgZGV2ZWxvcG1lbnQsCisgIGFuZCBpcyBhIG11Y2ggbW9yZSByZWxpYWJsZSBiZWFzdC4KKyAgICBCZWFyIGluIG1pbmQgdGhhdCB0aGUgQWdlbnRYIGFuZCBwcm94eSBTTk1QIGltcGxlbWVudGF0aW9ucyBhcmUKKyAgcmVsYXRpdmVseSBuZXcgY29kZSwgc28gaGF2ZSBub3QgcmVjZWl2ZWQgdGhlIHNhbWUgbGV2ZWwgb2YgYWN0aXZlCisgIHNlcnZpY2UgdGhhdCB0aGUgY29yZSBhZ2VudCBoYXMuICBCdXQgd2l0aCB0aGF0IGNhdmVhdCwgZWl0aGVyIG9mCisgIHRoZXNlIG9wdGlvbnMgc2hvdWxkIGJlIHN1aXRhYmxlIGZvciBtb3N0IHVzZS4KKworICAgIFRoaXMgZGVjaXNpb24gd2lsbCBwcm9iYWJseSBiZSBkaWN0YXRlZCBieSBleHRlcm5hbCBjb25zaWRlcmF0aW9ucworICAoaS5lLiB0aGUgb3RoZXIgYWdlbnRzIHlvdSBuZWVkIHRvIGNvbWJpbmUgd2l0aCkuICBJZGVhbGx5LCB5b3UKKyAgc2hvdWxkIGJlIGxvb2tpbmcgdG93YXJkcyBBZ2VudFgsIGJ1dCB0aGlzIGlzIG5vdCBhbHdheXMgcG9zc2libGUuCisKKyAgRHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMgc2VydmUgYSBzb21ld2hhdCBkaWZmZXJlbnQgcHVycG9zZSwKKyAgYW5kIGFyZSBwdXJlbHkgY29uY2VybmVkIHdpdGggaG93IHRoZSBpbmRpdmlkdWFsIE1JQiBpbXBsZW1lbnRhdGlvbgorICBtb2R1bGVzIGFyZSBsb2NhdGVkLiAgVGhlc2UgY2FuIGJlIGNvbWJpbmVkIHdpdGggZWl0aGVyIGEgInB1cmUgU05NUCIKKyAgbW9kZWwsIGFuIEFnZW50WCBzdWJhZ2VudCBvciBhIHByb3hpZWQgU05NUCBhZ2VudC4gIFRoZXkgd2lsbCBpbnZvbHZlCisgIGEgc2xpZ2h0bHkgZ3JlYXRlciBsb2FkIG9uIGFnZW50IHN0YXJ0LXVwIChwbHVzIGFuIGV4dHJhIGxldmVsIG9mCisgIGNvbXBsZXhpdHkgaWYgdGhpbmdzIGdvIHdyb25nKSAtIGJhbGFuY2VkIGFnYWluc3QgdGhlIGFiaWxpdHkgdG8KKyAgYXZvaWQgcmUtY29tcGlsaW5nIGFuZCByZS1saW5raW5nIGEgd29ya2luZyBiaW5hcnkuCisKKyAgICBOb3RlIHRoYXQgYXMgZmFyIGFzIGluZGl2aWR1YWwgTUlCIG1vZHVsZXMgYXJlIGNvbmNlcm5lZCwgdGhlCisgIHByb3RvY29sIHVzZWQgdG8gdHJhbnNwb3J0IHRoZSByZXF1ZXN0IGlzIG1vcmUgb3IgbGVzcyBpcnJlbGV2YW50LgorICBUaGUgc2FtZSBpbmZvcm1hdGlvbiBpcyBiZWluZyByZXF1ZXN0ZWQgKG9yIHNldCkgZWFjaCB0aW1lLCBzbworICBhIE1JQiBtb2R1bGUgb3VnaHQgdG8gYmUgcHJvdG9jb2wtaW5kZXBlbmRlbnQuICBUaGlzIHdhcyBvbmUgb2YKKyAgdGhlIGRlc2lnbiBhaW1zIG9mIHRoZSBBZ2VudFggc3VwcG9ydCwgYW5kIHRoZSBleGFjdCBzYW1lIG1vZHVsZQorICBjb2RlIGNhbiBiZSBpbmNsdWRlZCBhcyBwYXJ0IG9mIGEgcHVyZS1TTk1QIG1hc3RlciBhZ2VudCwgb3IgYW4KKyAgQWdlbnRYIHN1YmFnZW50LCBlaXRoZXIgY29tcGlsZWQgaW4gb3IgZHluYW1pY2FsbHkgbG9hZGVkIHdpdGggbm8KKyAgbW9kaWZpY2F0aW9ucyBuZWVkZWQgdG8gdGhlIE1JQiBtb2R1bGUgY29kZSBpdHNlbGYuCisKKworCis8YSBuYW1lPSJDYW5fSV91c2VfQWdlbnRYX3doZW5fcnVubmluZ191bmRlcl9XaW5kb3dzXyI+CitDYW4gSSB1c2UgQWdlbnRYIHdoZW4gcnVubmluZyB1bmRlciBXaW5kb3dzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFllcywgYnV0IHRoZXJlIGFyZSBhIGNvdXBsZSBvZiB0aGluZ3MgdG8gYmUgYXdhcmUgb2YuCisKKyAgRmlyc3RseSwgYnkgZGVmYXVsdCB0aGUgQWdlbnRYIG1hc3RlciBsaXN0ZW5zIG9uIHRoZSBVbml4IGRvbWFpbgorICBzb2NrZXQgJy92YXIvYWdlbnR4L21hc3RlcicsIHdoaWNoIGRvZXNuJ3Qgd29yayB1bmRlciBXaW5kb3dzLgorICBZb3UnbGwgbmVlZCB0byB0ZWxsIGl0IHRvIGxpc3RlbiBvbiBhIFRDUCBwb3J0LCBlaXRoZXIgYnkgdXNpbmcKKyAgdGhlIGNvbW1hbmQtbGluZSBvcHRpb24gIi14IGxvY2FsaG9zdDo3MDUiLCAgb3IgYnkgYWRkaW5nIHRoZQorICBkaXJlY3RpdmUgImFnZW50eEFkZHJlc3MgbG9jYWxob3N0OjcwNSIgdG8gdGhlIHNubXBkLmNvbmYgZmlsZS4KKworICBTZWNvbmRseSwgYmUgYXdhcmUgdGhhdCB0aGUgc2VjdXJpdHkgb2YgQWdlbnRYIGNvbm5lY3Rpdml0eSBpcyBub3QKKyAgcGFydGljdWxhcmx5IHN0cm9uZy4gIFRoZSBleGFtcGxlcyBnaXZlbiBoZXJlIHdvdWxkIGFsbG93IGFueSBwcm9jZXNzCisgIHJ1bm5pbmcgb24gdGhlIGxvY2FsIG1hY2hpbmUgdG8gcmVnaXN0ZXIgYXMgYW4gQWdlbnRYIHN1YmFnZW50LiAgVGhlCisgIG1vcmUgb2J2aW91cyBzZXR0aW5ncyAiLXggNzA1IiBvciAiYWdlbnR4QWRkcmVzcyA3MDUiIHdvdWxkIGFsbG93CisgIGEgc3lzdGVtICphbnl3aGVyZSogb24gdGhlIG5ldHdvcmsgKG9yIGV2ZW4gZnJvbSByZW1vdGUgbmV0d29ya3MpIHRvCisgIHJlZ2lzdGVyIGFzIGFuIEFnZW50WCBzdWJhZ2VudC4gIFRoaXMgY291bGQgcG90ZW50aWFsbHkgYmUgdXNlZCB0bworICBoaWphY2sgdGhlIGFnZW50LCBvciBwcm92aWRlIGZhbHNlIGluZm9ybWF0aW9uLgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX3J1bl9BZ2VudFhfd2l0aF9hX2RpZmZlcmVudF9zb2NrZXRfYWRkcmVzc18iPgorSG93IGNhbiBJIHJ1biBBZ2VudFggd2l0aCBhIGRpZmZlcmVudCBzb2NrZXQgYWRkcmVzcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGVyZSBhcmUgdHdvIHNpZGVzIHRvIGFuIEFnZW50WCBjb25uZWN0aW9uLCBhbmQgdGhleSBuZWVkIHRvCisgIGFncmVlIGFib3V0IHdoaWNoIHNvY2tldCBhZGRyZXNzIHRvIHVzZS4gIFNvIGlmIHlvdSB3YW50IHRvIHVzZQorICBhIGRpZmZlcmVudCBzb2NrZXQsIHlvdSBuZWVkIHRvIGNvbmZpZ3VyZSBib3RoIHNpZGVzIGFjY29yZGluZ2x5LgorCisgIEZvciB0aGUgTmV0LVNOTVAgbWFzdGVyIGFnZW50LCB0aGlzIGlzIGRvbmUgdXNpbmcgdGhlIGNvbW1hbmQtbGluZQorICBvcHRpb24gJy14Jy4gIFRoZSBjb21tYW5kCisJCSJzbm1wZCAteCBsb2NhbGhvc3Q6NzA1IC4uLi4iCisgIHdvdWxkIHN0YXJ0IHRoZSBhZ2VudCBsaXN0ZW5pbmcgb24gdGhlIFRDUCBwb3J0IDcwNSBmb3IgY29ubmVjdGlvbnMKKyAgZnJvbSB0aGUgbG9jYWwgc3lzdGVtLgorCisgIFRoZSBtYWluIE5ldC1TTk1QIGFnZW50IGNhbiBhbHNvIGJlIHJ1biBpbiBhICJzdWJhZ2VudCIgbW9kZSwgYW5kCisgIHRoaXMgdXNlcyB0aGUgc2FtZSBjb21tYW5kLWxpbmUgb3B0aW9uIHRvIHNwZWNpZnkgYSBkaWZmZXJlbnQKKyAgQWdlbnRYIHNvY2tldC4gIFNvCisJCSJzbm1wZCAtWCAteCBsb2NhbGhvc3Q6NzA1IC4uLi4iCisgIHdvdWxkIHN0YXJ0IGl0IGFzIGEgc3ViYWdlbnQsIGFuZCBjb25uZWN0IHRvIHRoZSBtYXN0ZXIgYWdlbnQKKyAgbGlzdGVuaW5nIG9uIFRDUCBwb3J0IDcwNSBvbiB0aGUgc2FtZSBzeXN0ZW0uCisKKyAgQSBzdWJhZ2VudCBydW5uaW5nIGVtYmVkZGVkIHdpdGhpbiBzb21lIG90aGVyIGFwcGxpY2F0aW9uIHdpbGwKKyAgdHlwaWNhbGx5IG5vdCB1bmRlcnN0YW5kIHRoZSBzYW1lIGNvbW1hbmQtbGluZSBvcHRpb25zLiAgVGhpcworICB3aWxsIG5lZWQgdG8gc2V0IHRoZSBzYW1lIGNvbmZpZ3VyYXRpb24gcHJvZ3JhbW1hdGljYWxseS4KKyAgRm9yIGV4YW1wbGUsIHRoZSBleGFtcGxlIHN1YmFnZW50IGRyaXZpbmcgY29kZSBmcm9tIHRoZSBOZXQtU05NUAorICAic3ViYWdlbnQgcHJvZ3JhbSIgdHV0b3JpYWwgKG9uIHRoZSBwcm9qZWN0IHdlYiBwYWdlcykgY291bGQKKyAgYmUgbWFkZSB0byBjb25uZWN0IHRvIHRoZSBzYW1lIFRDUCBwb3J0IGJ5IGFkZGluZyB0aGUgbGluZQorICAgICBuZXRzbm1wX2RzX3NldF9zdHJpbmcoTkVUU05NUF9EU19BUFBMSUNBVElPTl9JRCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIE5FVFNOTVBfRFNfQUdFTlRfWF9TT0NLRVQsICJsb2NhbGhvc3Q6NzA1Iik7CisgIGJlZm9yZSB0aGUgJ2luaXRfYWdlbnQnIGNhbGwuCisKKyAgSG93ZXZlciwgc2VlIHRoZSBtZW50aW9uIG9mIEFnZW50WCBzZWN1cml0eSAob3IgdGhlIGxhY2sgb2YgaXQhKQorICBpbiB0aGUgcHJldmlvdXMgZW50cnkuCisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfY29tYmluZV90d29fY29waWVzX29mX3RoZV9fbWliX19fdHJlZV9mcm9tX3NlcGFyYXRlX3N1YmFnZW50c18iPgorSG93IGNhbiBJIGNvbWJpbmUgdHdvIGNvcGllcyBvZiB0aGUgJ21pYjInIHRyZWUgZnJvbSBzZXBhcmF0ZSBzdWJhZ2VudHM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFdpdGggdGhlIDQueCBsaW5lIGFnZW50LCB5b3UgY2FuJ3QuICBTb3JyeSBhYm91dCB0aGF0LgorCisgIFdpdGggdGhlIDUuMCBhZ2VudCwgdGhpcyBpcyBwb3NzaWJsZSBieSB1c2luZyB0aGUgU05NUHYzIGNvbnRleHQgc3RyaW5nCisgIHRvIGRpc3Rpbmd1aXNoIGJldHdlZW4gcGFyYWxsZWwgTUlCIHRyZWVzLiAgVGhpcyBjYW4gYmUgc2V0IHVwIGZvciBhbgorICBpbmRpdmlkdWFsIE1JQiBpbXBsZW1lbnRhdGlvbiBtb2R1bGUgd2hlbiBpdCByZWdpc3RlcnMgaXRzZWxmIHdpdGggdGhlCisgIG1haW4gYWdlbnQgZnJhbWV3b3JrIChlaXRoZXIgZGlyZWN0bHksIG9yIHZpYSBBZ2VudFgpLiAgSXQgY2FuIGFsc28KKyAgYmUgc2V0IHVwIGZvciBhIHByb3hpZWQgc3ViYWdlbnQgYXMgcGFydCBvZiB0aGUgcHJveHkgY29uZmlndXJhdGlvbgorICBlbnRyeSAoc2VlICdzbm1wZC5jb25mKDUpJykuCisgICAgVGhpcyBmYWNpbGl0eSBpcyBub3QgY3VycmVudGx5IGF2YWlsYWJsZSBmb3IgU05NUHYxIG9yIFNOTVB2MmMKKyAgcmVxdWVzdHMgKGFsdGhvdWdoIGl0IG91Z2h0IHRvIGJlIHBvc3NpYmxlIHRvIHVzZSB0aGUgY29tbXVuaXR5CisgIHN0cmluZyBpbiBhIHNpbWlsYXIgd2F5KS4KKworICAgIEFub3RoZXIgd2F5IHRvIGhhbmRsZSB0aGlzIHdvdWxkIGJlIHRvIHR3ZWFrIG9uZSBvZiB0aGUgc3ViYWdlbnRzIHRvCisgIHVzZSBhIGRpZmZlcmVudCBzZXQgb2YgKG5vbi1zdGFuZGFyZCkgT0lEIGFzc2lnbm1lbnRzIC0gcGVyaGFwcyBieQorICByZWxvY2F0aW5nIHRoZSB3aG9sZSBvZiB0aGUgc3VidHJlZSB0byBhbm90aGVyIChwcml2YXRlKSBPSUQuICBUaGlzCisgIGlzIG5vdCBpZGVhbCwgYnV0IHNob3VsZCB3b3JrIHdpdGggYWxsIGNvbmZpZ3VyYXRpb25zLgorCisKKworPGEgbmFtZT0iV2hhdF90cmFwc19hcmVfc2VudF9ieV90aGVfYWdlbnRfIj4KK1doYXQgdHJhcHMgYXJlIHNlbnQgYnkgdGhlIGFnZW50PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGUgYWdlbnQgc2VuZHMgYSAnY29sZFN0YXJ0KDApJyB0cmFwIHdoZW4gaXQgZmlyc3Qgc3RhcnRzIHVwLCBhbmQgYW4KKyAgZW50ZXJwcmlzZS1zcGVjaWZpYyB0cmFwICduc05vdGlmeVNodXRkb3duJyAob3IgJ3VjZFNodXRkb3duJykgd2hlbiBpdAorICBzdG9wcy4gIEl0IGNhbiBhbHNvIGJlIGNvbmZpZ3VyZWQgdG8gc2VuZCBhbiAnYXV0aGVudGljYXRpb25GYWlsdXJlKDQpJworICB0cmFwIHdoZW4gaXQgcmVjZWl2ZXMgYW4gU05NUHYxIHJlcXVlc3QgdXNpbmcgYW4gdW5rbm93biBjb21tdW5pdHkgbmFtZS4KKyAgVGhlIE5ldC1TTk1QIGFnZW50IGdlbmVyYXRlcyBhbiBlbnRlcnByaXNlLXNwZWNpZmljIHRyYXAgJ25zTm90aWZ5UmVzdGFydCcKKyAgKHJhdGhlciB0aGFuIHRoZSBzdGFuZGFyZCAnY29sZFN0YXJ0KDApJyBvciAnd2FybVN0YXJ0KDEpJyB0cmFwcykgb24KKyAgcmVjZWl2aW5nIGEgSFVQIHNpZ25hbCAtIHR5cGljYWxseSBhZnRlciBiZWluZyByZS1jb25maWd1cmVkLgorCisgICAgVGhlIGFnZW50IGRvZXMgbm90IHNlbmQgJ2xpbmtVcCcgb3IgJ2xpbmtEb3duJyB0cmFwcyBieSBkZWZhdWx0LiAgVGhlCisgIE5ldC1TTk1QIGFnZW50IGNhbiBiZSBjb25maWd1cmVkIHRvIGRvIHRoaXMgdXNpbmcgdGhlICdtb25pdG9yJyBjb25maWcKKyAgZGlyZWN0aXZlLiAgU2VlIHRoZSAnc25tcGQuY29uZig1KScgbWFuIHBhZ2UgKHVuZGVyIERJU01BTi1FVkVOVC1NSUIpCisgIGZvciBkZXRhaWxzIChpbmNsdWRpbmcgdGhlIG5lZWQgZm9yIGFuICdhZ2VudFNlY05hbWUnIHNldHRpbmcpLgorCisgICAgU2ltaWxhcmx5LCBpdCBkb2VzIG5vdCBnZW5lcmF0ZSB0cmFwcyBieSBkZWZhdWx0IHdoZW4gb25lIG9mIHRoZQorICBtb25pdG9yZWQgY2hhcmFjdGVyaXN0aWNzIChkaXNrIHVzYWdlLCBydW5uaW5nIHByb2Nlc3NlcywgZXRjKSBlbnRlcnMgb3IKKyAgbGVhdmVzIGFuIGVycm9yIHN0YXRlLiAgVGhpcyBjYW4gYmUgY29uZmlndXJlZCB1c2luZyB0aGUgJ2RlZmF1bHRNb25pdG9ycycKKyAgY29uZmlnIGRpcmVjdGl2ZSAoYWxzbyBkb2N1bWVudGVkIHVuZGVyIERJU01BTi1FVkVOVC1NSUIpLiAgTm90ZSB0aGF0CisgIHRoZXNlIGZhY2lsaXRpZXMgYXJlIG9ubHkgYXZhaWxhYmxlIHdpdGggdGhlIHY1IE5ldC1TTk1QIGFnZW50LCBhbmQgYXJlCisgIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIHY0IFVDRCBhZ2VudC4KKworCisKKzxhIG5hbWU9IldoZXJlX2FyZV90aGVzZV90cmFwc19zZW50X3RvXyI+CitXaGVyZSBhcmUgdGhlc2UgdHJhcHMgc2VudCB0bz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBXaXRoIGFsbCB0aGVzZSBhbGVydHMsIHRoZSBhZ2VudCBhbHNvIG5lZWRzIHRvIGJlIGNvbmZpZ3VyZWQgd2l0aAorICAob25lIG9yIG1vcmUpIGRlc3RpbmF0aW9ucyB0byBzZW5kIHRoZW0gdG8sIHNwZWNpZnlpbmcgdGhlIHR5cGUgb2YKKyAgbm90aWZpY2F0aW9uICh2MSBvciB2MiB0cmFwLCBvciB2MiBpbmZvcm0pIGFuZCB0aGUgY29tbXVuaXR5IG5hbWUgdG8KKyAgdXNlLiAgVGhpcyB1c2VzIHRoZSBzbm1wZC5jb25mIGRpcmVjdGl2ZXMgJ3RyYXBzaW5rJywgJ3RyYXAyc2luaycgYW5kCisgICdpbmZvcm1zaW5rJyBmb3IgdGhlIGRlc3RpbmF0aW9uIHR5cGUsIGFuZCAndHJhcGNvbW11bml0eScgZm9yIHRoZQorICBjb21tdW5pdHkgbmFtZS4gIFNOTVB2MyBkZXN0aW5hdGlvbnMgY2FuIGJlIGNvbmZpZ3VyZWQgdXNpbmcgdGhlIGRpcmVjdGl2ZQorICAndHJhcHNlc3MnLiAgIFNlZSB0aGUgJ3NubXBkLmNvbmYoNSknIG1hbiBwYWdlIGZvciBkZXRhaWxzLgorCisgICAgTm90ZSB0aGF0IHRoZXNlIGRpcmVjdGl2ZXMgY29udHJvbCB0aGUgdHlwZSBvZiBub3RpZmljYXRpb24gdGhhdCBpcworICBnZW5lcmF0ZWQuICBUaGlzIGlzIGNvbXBsZXRlbHkgc2VwYXJhdGUgZnJvbSB0aGUgc3R5bGUgb2YgQVBJIHVzZWQgdG8KKyAgcmVxdWVzdCB0aGF0IHRoZSBub3RpZmljYXRpb24gc2hvdWxkIGJlIHNlbnQuICBJZiBhIG1vZHVsZSBpbnZva2VzIHRoZQorICB2MS1zdHlsZSBBUEkgJ3NlbmRfZWFzeV90cmFwJywgdGhpcyB3aWxsIHN0aWxsIHNlbmQgU05NUHYyIG5vdGlmaWNhdGlvbnMKKyAgdG8gZGVzdGluYXRpb25zIGNvbmZpZ3VyZWQgdXNpbmcgJ3RyYXAyc2luaycgb3IgJ2luZm9ybXNpbmsnIChhbmQgdmljZQorICB2ZXJzYSkuCisKKyAgICBBIGNvbmZpZ3VyYXRpb24gYmxvY2sgc3VjaCBhcworCisgICAgICAgIHRyYXBzaW5rICAgbG9jYWxob3N0CisgICAgICAgIHRyYXAyc2luayAgbG9jYWxob3N0CisgICAgICAgIGluZm9ybXNpbmsgbG9jYWxob3N0CisKKyAgd2lsbCByZXN1bHQgaW4gKnRocmVlKiBub3RpZmljYXRpb25zIGJlaW5nIHNlbnQgZm9yIGVhY2ggY2FsbCB0bworICAnc2VuZF9lYXN5X3RyYXAnIChvciAnc2VuZF92MnRyYXAnKS4gIFNlZSAnc25tcF90cmFwX2FwaSgzKScgZm9yIGRldGFpbHMuCisKKyAgICBOb3RlIHRoYXQgYWxsIG5vdGlmaWNhdGlvbnMgd2lsbCBiZSBzZW50IHRvIGFsbCBkZXN0aW5hdGlvbnMuICBUaGUKKyAgYWdlbnQgZG9lcyBub3QgKGN1cnJlbnRseSkgc3VwcG9ydCBub3RpZmljYXRpb24gZmlsdGVyaW5nLgorIAorCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9zZW5kX2FfcGFydGljdWxhcl90cmFwX3RvX3NlbGVjdGVkX2Rlc3RpbmF0aW9uc18iPgorSG93IGNhbiBJIHNlbmQgYSBwYXJ0aWN1bGFyIHRyYXAgdG8gc2VsZWN0ZWQgZGVzdGluYXRpb25zPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgV2l0aCB0aGUgdjQgVUNEIGFnZW50LCB0aGlzIGlzbid0IHBvc3NpYmxlIChvciBhdCBsZWFzdCBub3QKKyAgZWFzaWx5KS4gIFdoZW4geW91IHJlcXVlc3QgdGhlIGFnZW50IHRvIGdlbmVyYXRlIGEgdHJhcCAodXNpbmcKKyAgZWl0aGVyICdzZW5kX3YydHJhcCcgb3IgJ3NlbmRfZWFzeV90cmFwJyksIHRoaXMgd2lsbCBiZSBzZW50CisgIHRvICphbGwqIHRoZSBrbm93biBkZXN0aW5hdGlvbnMuCisKKyAgICBUaGUgdjUgTmV0LVNOTVAgYWdlbnQgaW50cm9kdWNlZCBwcmVsaW1pbmFyeSBzdXBwb3J0IGZvciB0aGUKKyAgc25tcE5vdGlmeUZpbHRlclRhYmxlIHdoaWNoIGlzIGRlc2lnbmVkIHRvIGFsbG93IHRoaXMgc29ydCBvZgorICBzZWxlY3RpdmUgdHJhcCBkaXJlY3Rpb24sIHRob3VnaCB0aGlzIGlzIG5vdCBjdXJyZW50bHkgYWN0aXZlLgorICAoVGhlIHRhYmxlcyBhcmUgcHJlc2VudCwgYnV0IHRoZSBpbmZvcm1hdGlvbiBpcyBub3QgY29uc3VsdGVkKQorICBEb2N1bWVudGF0aW9uIG9uIGhvdyB0byB1c2UgdGhpcyBmYWNpbGl0eSB3aWxsIGFwcGVhciBvbmNlIHRoZQorICBmdW5jdGlvbmFsaXR5IGlzIHdvcmtpbmcgcHJvcGVybHkuCisKKworCis8YSBuYW1lPSJXaHlfZG9lc19jYWxsaW5nX19zZW5kX3ZfdHJhcF9fZ2VuZXJhdGVfYW5fU05NUHZfX3RyYXBfX29yX3ZpY2VfdmVyc2FfXyI+CitXaHkgZG9lcyBjYWxsaW5nICdzZW5kX3YydHJhcCcgZ2VuZXJhdGUgYW4gU05NUHYxIHRyYXAgKG9yIHZpY2UgdmVyc2EpPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIHR3byB2ZXJzaW9ucyBvZiB0aGUgdHJhcCBBUEkgY2FsbHMgYXJlIGNvbmNlcm5lZCB3aXRoIGhvdworICB0aGUgdHJhcCBpcyByZXByZXNlbnRlZCB3aGVuIGl0IGlzIHBhc3NlZCAqaW4qIHRvIHRoZSBBUEksIG5vdAorICB0aGUgdmVyc2lvbiBvZiB0aGUgdHJhcCBQRFUgdGhhdCB3aWxsIGFjdHVhbGx5IGJlIGdlbmVyYXRlZCBieQorICB0aGUgYWdlbnQuICBUaGF0IGlzIGRldGVybWluZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24gdG9rZW4gdXNlZAorICB0byBzZXQgdXAgdGhlIHRyYXAgZGVzdGluYXRpb24uCisKKyAgICBSZW1lbWJlciB0aGF0IGluIGdlbmVyYWwsIGFsbCB0cmFwcyBhcmUgc2VudCB0byBhbGwgZGVzdGluYXRpb25zLgorICBUaGlzIG1lYW5zIHRoYXQgYSB0cmFwIHNwZWNpZmllZCB1c2luZyB0aGUgU05NUHYxIHRyYXAgc3ludGF4CisgIG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgU05NUHYyIGZvcm1hdCBiZWZvcmUgaXQgY2FuIGJlIHNlbnQKKyAgdG8gYW4gU05NUHYyIChvciBTTk1QdjMpIGRlc3RpbmF0aW9uLiAgU2ltaWxhcmx5LCBhIHRyYXAgc3BlY2lmaWVkCisgIHVzaW5nIHRoZSBTTk1QdjIgc3ludGF4IG5lZWRzIHRvIGJlIGNvbnZlcnRlZCB0byB0aGUgU05NUHYxIGZvcm1hdAorICBiZWZvcmUgaXQgY2FuIGJlIHNlbnQgdG8gYW4gU05NUHYxIHNpbmsuCisKKyAgICBFc3NlbnRpYWxseSwgdGhlIEFQSSBjYWxsIHRvIHVzZSBkZXBlbmRzIG9uIHdoYXQgeW91IGFza2luZyBmb3IsCisgIHdoaWNoIGlzIG5vdCBuZWNlc3NhcmlseSB3aGF0IHRoZSByZWNpcGllbnRzIHdpbGwgYWN0dWFsbHkgZ2V0IQorICBTZWUgJ3NubXBfdHJhcF9hcGkoMyknIGZvciBhIGZ1bGxlciBleHBsYW5hdGlvbi4KKworCisKKzxhIG5hbWU9IldoZW5fSV9ydW5fdGhlX2FnZW50X2l0X3J1bnNfYW5kX3RoZW5fcXVpdHNfd2l0aG91dF9zdGF5aW5nX2Fyb3VuZF9fV2h5XyI+CitXaGVuIEkgcnVuIHRoZSBhZ2VudCBpdCBydW5zIGFuZCB0aGVuIHF1aXRzIHdpdGhvdXQgc3RheWluZyBhcm91bmQuIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRmlyc3RseSwgYXJlIHlvdSBjZXJ0YWluIHRoYXQgdGhpcyBpcyB3aGF0IGlzIGhhcHBlbmluZz8KKworICBUaGUgbm9ybWFsIG9wZXJhdGlvbiBvZiB0aGUgYWdlbnQgaXMgdG8gJ2ZvcmsnIGl0c2VsZiBpbnRvIHRoZQorICBiYWNrZ3JvdW5kLCBkZXRhY2hpbmcgaXRzZWxmIHNvIHRoYXQgaXQgd2lsbCBjb250aW51ZSBydW5uaW5nIGV2ZW4KKyAgd2hlbiB5b3UgbG9nIG91dCwgYW5kIGZyZWVpbmcgdGhlIGNvbW1hbmQgbGluZSBmb3Igc3Vic2VxdWVudCB1c2UuCisgIFRoaXMgbG9va3MgYXQgZmlyc3Qgc2lnaHQgYXMgaWYgdGhlIGFnZW50IGhhcyBkaWVkLCBidXQgdXNpbmcgJ3BzJworICB0byBzaG93IGFsbCBwcm9jZXNzZXMgc2hvdWxkIHJldmVhbCB0aGF0IHRoZSBhZ2VudCBpcyBzdGlsbCBydW5uaW5nLgorCisgIFRvIHByZXZlbnQgdGhpcyBiZWhhdmlvdXIgKHN1Y2ggYXMgd2hlbiBhdHRlbXB0aW5nIHRvIGRlYnVnIHRoZQorICBhZ2VudCksIHlvdSBjYW4gc3RhcnQgaXQgd2l0aCB0aGUgJy1mJyBmbGFnLiAgVGhpcyBzdXBwcmVzc2VzIHRoZQorICBmb3JrLCBhbmQgdGhlIGFnZW50IHdpbGwgcnVuIGFzIGEgJ25vcm1hbCcgY29tbWFuZC4gIEl0J3MgYWxzbyBvZnRlbgorICB1c2VmdWwgdG8gdXNlIHRoZSAnLUwnIChvciAnLUxlJykgZmxhZywgdG8gbG9nIG1lc3NhZ2VzIHRvIHN0ZG91dC4KKworICBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgJ3BzJyBzaG93cyB0aGF0IHRoZSBhZ2VudCBpcyBub3QgcnVubmluZywgdGhlbgorICB0aGlzIGlzIGFuIGVycm9yLCBhbmQgcHJvYmFibHkgc2hvdyB0aGF0IHNvbWV0aGluZyB3ZW50IHdyb25nIGluCisgIHN0YXJ0aW5nIHRoZSBhZ2VudCB1cC4gIENoZWNrIHRoZSBhZ2VudCBsb2cgZmlsZSBmb3IgYW55IGVycm9yIG1lc3NhZ2VzLAorICBvciBydW4gaXQgd2l0aCAnLWYgLUwnIGFuZCBzZWUgd2hhdCBpdCByZXBvcnRzLgorCisgIE9uZSBrbm93biBleGFtcGxlIG9mIHRoaXMgaXMgdGhlICd1Y2Qtc25tcCcgUlBNIGRpc3RyaWJ1dGVkIGJ5IFJlZEhhdC4KKyAgVGhpcyBhZ2VudCBjcmFzaGVzIGlmIHRoZXJlIGlzIGEgJ2Rpc2snIGNvbmZpZ3VyYXRpb24gZW50cnkgaW4gdGhlCisgIHNubXBkLmNvbmYgZmlsZS4gIEl0IGlzIG5vdCBjdXJyZW50bHkga25vd24gd2hhdCBjYXVzZXMgdGhpcywgYXMgdGhpcworICBzZXR0aW5nIHdvcmtzIGNvcnJlY3RseSBpZiB0aGUgYWdlbnQgaXMgY29tcGlsZWQgZnJvbSBzb3VyY2UuCisKKworCis8YSBuYW1lPSJBZnRlcl9hX3doaWxlX3RoZV9hZ2VudF9zdG9wc19yZXNwb25kaW5nX19hbmRfc3RhcnRzX2VhdGluZ19DUFVfdGltZV9fX1doeV8iPgorQWZ0ZXIgYSB3aGlsZSB0aGUgYWdlbnQgc3RvcHMgcmVzcG9uZGluZywgYW5kIHN0YXJ0cyBlYXRpbmcgQ1BVIHRpbWUuICBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgbW9zdCBjb21tb25seSBzZWVuIHdoZW4gcGVyZm9ybWluZyBhbiAic25tcHdhbGsiIG9uIGFuIGFnZW50CisgIHRoYXQncyBlaXRoZXIgdXNpbmcgYSBkZWZhdWx0ICJ2ZW5kb3IgcHJvdmlkZWQiIGNvbmZpZ3VyYXRpb24KKyAgKHR5cGljYWxseSBhY2Nlc3MgdG8gdGhlICdzeXN0ZW0nIGdyb3VwIG9ubHkpLCBvciB3aGljaCBpcyB0cnlpbmcKKyAgdG8gcmVzdHJpY3QgYWNjZXNzIGZvciBpbmRpdmlkdWFsIHVzZXJzIG9yIGNvbW11bml0aWVzIHRvIGEgc3Vic2V0CisgIG9mIHRoZSB3aG9sZSBPSUQgdHJlZS4KKworICBUaGUgYWdlbnQgaW1wbGVtZW50YXRpb24gb2YgIkdldE5leHQiIHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseQorICBpbmVmZmljaWVudCB3aGVuIGRlYWxpbmcgd2l0aCBpbmFjY2Vzc2libGUgb2JqZWN0cywgYW5kIGl0IGlzIHF1aXRlCisgIGVhc3kgZm9yIHRoZSBjbGllbnRzIHRvIHRpbWUtb3V0IGFuZCByZXRyeSBhIHJlcXVlc3QsIHdoaWxlIHRoZSBhZ2VudAorICBpcyBzdGlsbCB0cnlpbmcgdG8gcHJvY2VzcyB0aGUgb3JpZ2luYWwuICBJZiB0aGlzIGhhcHBlbnMgY29udGludWFsbHkKKyAgKGFzIGlzIHR5cGljYWxseSB0aGUgY2FzZSB3aXRoIGFuIHNubXB3YWxrKSwgdGhlIGFnZW50IGNhbiBnZXQgc3dhbXBlZAorICBieSB0aGlzIGJhY2tsb2cuCisKKyAgVGhlIDUuMC54IGxpbmUgaGFzIG5vdyBhZGRyZXNzZWQgdGhpcywgc3RhcnRpbmcgd2l0aCB0aGUgNS4wLjcgcmVsZWFzZS4KKyAgVGhlIDQuMi54IGxpbmUgc3RpbGwgc3VmZmVycyBmcm9tIHRoaXMgcHJvYmxlbSwgYW5kIGl0IGlzIHVubGlrZWx5IHRoYXQKKyAgdGhpcyB3aWxsIGJlIGZpeGVkLiAgKFRoZSA1LjAuNyBhcHByb2FjaCByZWxpZXMgb24gc29tZSBvZiB0aGUgbmV3CisgIGZlYXR1cmVzIGluIHRoZSA1LjAueCBsaW5lLCBhbmQgaXQgaGFzIG5vdCBwcm92ZWQgcG9zc2libGUgdG8gYXBwbHkKKyAgdGhpcyB0byB0aGUgNC4yLnggY29kZSBiYXNlKS4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9zdG9wX290aGVyX3Blb3BsZV9nZXR0aW5nX2F0X215X2FnZW50XyI+CitIb3cgY2FuIEkgc3RvcCBvdGhlciBwZW9wbGUgZ2V0dGluZyBhdCBteSBhZ2VudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgRmlyc3RseSwgYXJlIHlvdSBjb25jZXJuZWQgd2l0aCByZWFkIGFjY2VzcyBvciB3cml0ZSBhY2Nlc3M/CisKKyAgQXMgZmFyIGFzIGNoYW5naW5nIHRoaW5ncyBvbiB0aGUgYWdlbnQgaXMgY29uY2VybmVkLCB0aGVyZSBpcyByZWxhdGl2ZWx5CisgIGxpdHRsZSB0aGF0IGNhbiBhY3R1YWxseSBiZSBhbHRlcmVkIChzZWUgdGhlIGFuc3dlciB0byAiIEkgY2Fubm90IHNldAorICBhbnkgdmFyaWFibGVzIGluIHRoZSBNSUIiIGFib3ZlKS4KKworICAgIElmIHlvdSBhcmUgdXNpbmcgdGhlIGV4YW1wbGUgY29uZmlnIGZpbGUsIHRoaXMgaXMgc2V0IHVwIHRvIGFsbG93CisgIHJlYWQgYWNjZXNzIGZyb20geW91ciBsb2NhbCBuZXR3b3JrLCBhbmQgd3JpdGUgYWNjZXNzIG9ubHkgZnJvbSB0aGUKKyAgc3lzdGVtIGl0c2VsZiAoYWNjZXNzZWQgYXMgJ2xvY2FsaG9zdCcpLCBib3RoIHVzaW5nIHRoZSBjb21tdW5pdHkgbmFtZQorICBzcGVjaWZpZWQuICBZb3Ugd2lsbCBuZWVkIHRvIHNldCBhcHByb3ByaWF0ZSB2YWx1ZXMgZm9yIGJvdGggTkVUV09SSworICBhbmQgQ09NTVVOSVRZIGluIHRoaXMgZmlsZSBiZWZvcmUgdXNpbmcgaXQuCisgICAgVGhpcyBtZWNoYW5pc20gY2FuIGFsc28gYmUgdXNlZCB0byBjb250cm9sIGFjY2VzcyBtdWNoIG1vcmUgcHJlY2lzZWx5LgorICAoc2VlIHRoZSBuZXh0IHF1ZXN0aW9ucyBmb3IgZGV0YWlscykKKworICBPdGhlciBvcHRpb25zIGluY2x1ZGU6CisJLSBCbG9ja2luZyBhY2Nlc3MgdG8gcG9ydCAxNjEgZnJvbSBvdXRzaWRlIHlvdXIgb3JnYW5pc2F0aW9uCisJCSh1c2luZyBmaWx0ZXJzIG9uIG5ldHdvcmsgcm91dGVycykKKwktIENvbmZpZ3VyaW5nIFRDUCB3cmFwcGVyIHN1cHBvcnQgKCItLXdpdGgtbGlid3JhcCIpCisJCVRoaXMgdXNlcyB0aGUgVENQICdsaWJ3cmFwJyBsaWJyYXJ5IChhdmFpbGFibGUgc2VwYXJhdGVseSkKKwkJdG8gYWxsb3cvZGVueSBhY2Nlc3MgdmlhIC9ldGMvaG9zdHMue2FsbG93LGRlbnl9CisKKyAgRm9yIHN0cmljdCBzZWN1cml0eSB5b3Ugc2hvdWxkIHVzZSBvbmx5IFNOTVB2Mywgd2hpY2ggaXMgdGhlIHNlY3VyZQorICBmb3JtIG9mIHRoZSBwcm90b2NvbC4KKworCisKKzxhIG5hbWU9Ikhvd19jYW5fSV9saXN0ZW5fb25fanVzdF9vbmVfcGFydGljdWxhcl9pbnRlcmZhY2VfIj4KK0hvdyBjYW4gSSBsaXN0ZW4gb24ganVzdCBvbmUgcGFydGljdWxhciBpbnRlcmZhY2U/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBOb3JtYWxseSwgdGhlIGFnZW50IHdpbGwgYmluZCB0byB0aGUgc3BlY2lmaWVkIHBvcnQgb24gYWxsIGludGVyZmFjZXMKKyAgb24gdGhlIHN5c3RlbSwgYW5kIGFjY2VwdCByZXF1ZXN0IHJlY2VpdmVkIGZyb20gYW55IG9mIHRoZW0uICBXaXRoCisgIHZlcnNpb24gNC4yLCB0aGUgJy1wJyBvcHRpb24gY2FuIGJlIHVzZWQgdG8gbGlzdGVuIG9uIGluZGl2aWR1YWwKKyAgaW50ZXJmYWNlcy4gIEZvciBleGFtcGxlLAorCQorCQkJc25tcGQgLXAgMTYxQDEyNy4wLjAuMQorCisgIHdpbGwgbGlzdGVuIChvbiB0aGUgc3RhbmRhcmQgcG9ydCkgb24gdGhlIGxvb3BiYWNrIGludGVyZmFjZSBvbmx5LCBhbmQKKworCQkJc25tcGQgLXAgNjE2MUAxMC4wLjAuMQorCisgIHdpbGwgbGlzdGVuIG9uIHBvcnQgNjE2MSwgb24gdGhlIChpbnRlcm5hbCBuZXR3b3JrKSBpbnRlcmZhY2Ugd2l0aCBhZGRyZXNzCisgIDEwLjAuMC4xLiAgIElmIHlvdSB3YW50IHRvIGxpc3RlbiBvbiBtdWx0aXBsZSBpbnRlcmZhY2VzIChidXQgbm90IGFsbCksCisgIHRoZW4gc2ltcGx5IHJlcGVhdCB0aGlzIG9wdGlvbiBmb3IgZWFjaCBvbmU6CisKKwkJc25tcGQgLXAgMTYxQDEyNy4wLjAuMSAtcCA2MTYxQDEwLjAuMC4xCisKKyAgVGhlIHY1IE5ldC1TTk1QIGFnZW50IGhhcyBhIHNpbWlsYXIgZmFjaWxpdHksIGJ1dCBkb2VzIG5vdCB1c2UgdGhlICctcCcKKyAgY29tbWFuZCBsaW5lIG9wdGlvbiBmbGFnLiAgSW5zdGVhZCwgdGhlIHBvcnRzIGFuZC9vciBpbnRlcmZhY2VzIHRvIGxpc3RlbgorICBvbiBhcmUgc2ltcGx5IGxpc3RlZCBvbiB0aGUgY29tbWFuZCBsaW5lLCBmb2xsb3dpbmcgYW55IG90aGVyIG9wdGlvbnMuICBBbHNvLAorICB0aGUgc3ludGF4IG9mIHBvcnQgYW5kIGludGVyZmFjZSBpcyBzbGlnaHRseSBkaWZmZXJlbnQgKGludGVyZmFjZTpwb3J0KS4KKyAgICBTbyB0aGUgdGhyZWUgZXhhbXBsZXMgYWJvdmUgd291bGQgYmUKKworCQkJc25tcGQgMTI3LjAuMC4xOjE2MQorCQkJc25tcGQgMTI3LjAuMC4xOjYxNjEKKwkJCXNubXBkIDEyNy4wLjAuMToxNjEgMTI3LjAuMC4xOjYxNjEKKworICBUaGUgQWdlbnRYIHBvcnQgb3B0aW9uICgnLXgnKSB3b3JrcyBpbiBtdWNoIHRoZSBzYW1lIHdheSwgdXNpbmcgdGhlCisgICJob3N0OnBvcnQiIHN5bnRheCAoaW4gYm90aCA0LjIgYW5kIDUuMCBsaW5lcyAtIGFuZCB5ZXMsIHRoaXMgKmlzKiBhbgorICBpbmNvbnNpc3RlbmN5IGluIDQuMiEpCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9jb25maWd1cmVfYWNjZXNzX2NvbnRyb2xfIj4KK0hvdyBkbyBJIGNvbmZpZ3VyZSBhY2Nlc3MgY29udHJvbD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIHNpbXBsZXN0IHdheSBpcyB0byB1c2UgdGhlIGNvbmZpZ3VyZSBkaXJlY3RpdmVzOgorCisJCXJvY29tbXVuaXR5IHB1YmxpYwkoZm9yIFNOTVB2MS8yYykKKwkJcndjb21tdW5pdHkgcHJpdmF0ZQorICBvcgorCQlyb3VzZXIgdXNlcjEJCShmb3IgU05NUHYzKQorCQlyd3VzZXIgdXNlcjIKKworICBUaGVzZSBzcGVjaWZ5IHRoZSBjb21tdW5pdHkgbmFtZXMgb3Igc2VjdXJpdHkgbmFtZXMgdG8gYWNjZXB0IGZvcgorICByZWFkLW9ubHkgYW5kIHJlYWQtd3JpdGUgYWNjZXNzIHRvIHRoZSB3aG9sZSBvZiB0aGUgc3VwcG9ydGVkIE1JQiB0cmVlLgorICAoT2J2aW91c2x5IHlvdSBzaG91bGQgY2hhbmdlIHRoZXNlIG5hbWVzIHRvIG1hdGNoIHlvdXIgcmVxdWlyZW1lbnRzIC0KKyAgd2hpY2ggaXMgYSBwYXJ0aWN1bGFybHkgZ29vZCBpZGVhIGluIHRoZSBjYXNlIG9mICdyd2NvbW11bml0eSchKQorCisgIE5vdGUgdGhhdCBpdCBpcyAqbm90KiBuZWNlc3NhcnkgKGFuZCBub3QgYWR2aXNpYmxlKSB0byBzcGVjaWZ5IHRoZQorICBzYW1lIGNvbW11bml0eSBuYW1lIGZvciBib3RoIHJvY29tbXVuaXR5IGFuZCByd2NvbW11bml0eSBkaXJlY3RpdmVzLgorICBUaGUgcndjb21tdW5pdHkgc2V0dGluZyBhdXRvbWF0aWNhbGx5IGluY2x1ZGVzIHJvY29tbXVuaXR5IGFjY2VzcywKKyAgYW5kIGhhdmluZyBib3RoIGxpbmVzICh3aXRoIHRoZSBzYW1lIGNvbW11bml0eSBuYW1lKSBtYXkgcmVzdWx0IGluCisgIGFwcGFyZW50bHkgaW5jb25zaXN0ZW50IGJlaGF2aW91ci4gIE9ubHkgdXNlIGJvdGggc2V0dGluZ3Mgd2hlbgorICBzcGVjaWZ5aW5nICpkaWZmZXJlbnQqIGNvbW11bml0eSBuYW1lcy4KKyAgICBUaGUgc2FtZSBob2xkcyB0cnVlIGZvciByb3VzZXIgYW5kIHJ3dXNlci4KKworICBBbGwgZm91ciBvZiB0aGVzZSBzZXR0aW5ncyBjYW4gY2FuIGFsc28gYmUgcmVzdHJpY3RlZCB0byBwYXJ0aWN1bGFyCisgIHN1YnRyZWVzLCBhbmQvb3IgcmVxdWVzdCBzb3VyY2VzLiAgU2VlICdzbm1wZC5jb25mKDUpJyBmb3IgZGV0YWlscy4KKworICBUaGVzZSBkaXJlY3RpdmVzIGFyZSBlZmZlY3RpdmVseSB3cmFwcGVycyByb3VuZCB0aGUgY29yZSBhY2Nlc3MgY29udHJvbAorICBtZWNoYW5pc20sIHdoaWNoIHVzZXMgdGhlIGZvdXIgZGlyZWN0aXZlcyAnY29tMnNlYycsICdncm91cCcsICd2aWV3JworICBhbmQgJ2FjY2VzcycgdG8gcHJvdmlkZSBhIG1vcmUgZWZmaWNpZW50IGFuZCBmbGV4aWJsZSBjb250cm9sCisgIG92ZXIgd2hvIGNhbiBhY2Nlc3Mgd2hpY2ggcG9ydGlvbnMgb2YgdGhlIHRyZWUuCisKKyAgICBTZWUgdGhlIG5leHQgcXVlc3Rpb24gZm9yIHRoZSBnb3J5IGRldGFpbHMsIGFuZCB0aGUgZW50cnkgYWZ0ZXIKKyAgdGhhdCBmb3Igc2V0dGluZyB1cCBTTk1QdjMgdXNlcnMuCisKKworCis8YSBuYW1lPSJJX2Rvbl90X3VuZGVyc3RhbmRfdGhlX25ld19hY2Nlc3NfY29udHJvbF9zdHVmZl9fX3doYXRfZG9lc19pdF9tZWFuXyI+CitJIGRvbid0IHVuZGVyc3RhbmQgdGhlIG5ldyBhY2Nlc3MgY29udHJvbCBzdHVmZiAtIHdoYXQgZG9lcyBpdCBtZWFuPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBpZGVhIGJlaGluZCB0aGUgbmV3IGFjY2VzcyBjb250cm9sIG1vZGVsIGlzIHRvIGdpdmUgYSBtb3JlIGZsZXhpYmxlCisgIHdheSBvZiBzcGVjaWZ5aW5nIHdobyBjYW4gc2VlIGFuZCBkbyB3aGF0IHdpdGhpbiB0aGUgTUlCIHRyZWUuCisgIEl0J3MgbW9yZSBjb21wbGljYXRlZCB0byB1bmRlcnN0YW5kIHRoYW4gdGhlIHNpbXBsZSBleGFtcGxlIGFib3ZlLCBidXQKKyAgdGhhdCdzIGJlY2F1c2UgaXQgY2FuIGRvIGEgd2hvbGUgbG90IG1vcmUuCisKKyAgICBUaGVyZSBhcmUgZm91ciBjb25maWd1cmF0aW9uIGtleXdvcmRzIGluIHRoZSBuZXcgc2NoZW1lOgorCSdjb20yc2VjJywgJ2dyb3VwJywgJ3ZpZXcnLCBhbmQgJ2FjY2VzcycKKworICBXZSdsbCBjb25zaWRlciB0aGVzZSBvbmUgYXQgYSB0aW1lLCBzdGFydGluZyB3aXRoICdhY2Nlc3MnLgorICAoQmVjYXVzZSBJIGZlZWwgbGlrZSBzdGFydGluZyB3aXRoIHRoZSBsYXN0IG9uZSwgdGhhdCdzIHdoeSAtIE9LPykKKworCisgIFRoZSAiYWNjZXNzIiBrZXl3b3JkIGhhcyB0aGUgam9iIG9mIHNwZWNpZnlpbmcgd2hvIGhhcyBhY2Nlc3MgdG8KKyAgd2hpY2ggYml0cyBvZiB0aGUgTUlCIHRyZWUuICBUaGlzIGhhcyBlaWdodCBwYXJhbWV0ZXJzLCBzbyBjYW4gbG9vaworICByYXRoZXIgb2ZmcHV0dGluZy4gTW9zdCBvZiB0aGVzZSBjYW4gYmUgc2FmZWx5IGxlZnQgd2l0aCBkZWZhdWx0IHZhbHVlcworICBpbiBtb3N0IGNhc2VzIChzbyBkb24ndCB5b3Ugd29ycnkgeW91ciBwcmV0dHkgbGl0dGxlIGhlYWQgYWJvdXQgdGhlbSkuCisgIFRoZSBzeW50YXggaXMKKworCWFjY2VzcyB7Z3JvdXB9ICIiIGFueSBub2F1dGggZXhhY3Qge3JlYWQtdHJlZX0ge3dyaXRlLXRyZWV9IHtub3RpZnktdHJlZX0KKworICB3aGVyZSB0aGUgZW50cmllcyBpbiBicmFjZXMgbmVlZCB0byBiZSBkZWZpbmVkIGVsc2V3aGVyZSAoSSdtIGNvbWluZworICB0byB0aGF0IC0gYmUgcGF0aWVudCEpLCBhbmQgdGhlIHJlc3QgY2FuIGJlIGxlZnQgYXMgc2hvd24gaGVyZS4KKworCVsgSWYgeW91IHJlYWxseSB3YW50IHRvIGtub3csIHRoZSAnc2VjLm1vZGVsJyBmaWVsZCBjYW4gCisJICBiZSB1c2VkIHRvIGhhdmUgYW4gYWNjZXNzIGxpbmUgdGhhdCdzIG9ubHkgcmVsZXZhbnQgdG8KKwkgIHBhcnRpY3VsYXIgdmVyc2lvbnMgb2YgU05NUCAoc3VjaCB2MSBvciB2MmMpIHJhdGhlciB0aGFuCisJICAiYW55IiB2ZXJzaW9uLCBhbmQgdGhlICdzZWMubGV2ZWwnIGZpZWxkIHRvIGVuc3VyZSB0aGF0CisJICB0aGUgcmVxdWVzdCBtdXN0IGJlIGF1dGhlbnRpY2F0ZWQgb3IgZW5jcnlwdGVkLgorCSAgICBUaGUgY29udGV4dCBhbmQgcHJlZml4IGZpZWxkcyBjYW4gYmUgdXNlZCB0byBkaXN0aW5ndWlzaAorCSAgYmV0d2VlbiBwYXJhbGxlbCB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBvdmVyYWxsIE9JRCB0cmVlCisJXQorCisKKyAgVGhlICJ2aWV3IiBrZXl3b3JkIGlzIHVzZWQgdG8gZGVmaW5lIHBhcnRpY3VsYXIgYml0cyBvZiB0aGUgTUlCIHRyZWUsCisgIGZvciB1c2UgaW4gdGhlIGxhc3QgdGhyZWUgZmllbGQgb2YgdGhlIGFjY2VzcyBlbnRyeS4KKyAgVGhpcyBoYXMgdGhlIHN5bnRheAorCisJdmlldyAge25hbWV9ICBpbmNsdWRlZC9leGNsdWRlZCAge3N1YnRyZWV9ICAge21hc2t9CisKKyAgd2hlcmUge25hbWV9IGlzIHRoZSBpZGVudGlmaWVyIHRvIGJlIHVzZWQgZm9yIHRoaXMgdmlldyAoaS5lLiB3aGF0IHNob3VsZAorICBhcHBlYXIgaW4gdGhlIGFjY2VzcyBlbnRyeSksIGFuZCB7c3VidHJlZX0gaXMgdGhlIHBvcnRpb24gb2YgdGhlIE1JQiB0cmVlCisgIHRoYXQgdGhpcyBuYW1lIHJlZmVycyB0byAoaW4gZWl0aGVyIG51bWVyaWMgb3IgbmFtZWQgZm9ybSkuCisgICAgTm90ZSB0aGF0IHRoZSBuYW1lIG9mIHRoZSB2aWV3IGRvZXMgbm90IGhhdmUgdG8gaGF2ZSBhbnl0aGluZyB0byBkbworICB3aXRoIHRoZSBNSUIgc3ViLWlkZW50aWZpZXIgbmFtZXMgLSBpdCdzIHB1cmVseSBhbiBpZGVudGlmeWluZyB0YWcgZm9yCisgIHVzZSB3aXRoaW4gdGhlIGNvbmZpZyBmaWxlICh0aG91Z2ggY2hvb3NpbmcgYSBtZWFuaW5nZnVsIG5hbWUgaXMsIGFzCisgIGFsd2F5cywgYSB2ZXJ5IGdvb2QgaWRlYSkuCisgIAorICAgIFRoZSB7bWFza30gZmllbGQgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBlbGVtZW50cyBvZiB0aGUgT0lEIHN1YnRyZWUKKyAgc2hvdWxkIGJlIHJlZ2FyZGVkIGFzIHJlbGV2YW50IHdoZW4gZGV0ZXJtaW5pbmcgd2hpY2ggdmlldyBhbiBPSUQgaXMgaW4uCisgIE5vcm1hbGx5LCB0aGUgd2hvbGUgb2YgdGhlIE9JRCBzaG91bGQgYmUgaW5jbHVkZWQsIGFuZCBpbiB0aGlzIGNhc2UgdGhlCisgIG1hc2sgZmllbGQgY2FuIGJlIG9taXR0ZWQuICBTZWUgc25tcGQuY29uZiBmb3IgYSBkZXNjcmlwdGlvbiBvZiBob3cgdGhpcworICBtaWdodCBiZSB1c2VkLgorICBUaGUgdGhpcmQgZmllbGQgY2FuIGJlIHVzZWQgdG8gaW5jbHVkZSBvciBleGNsdWRlIHBhcnRpY3VsYXIgcG9ydGlvbnMKKyAgb2YgdGhlIE1JQiBmcm9tIHRoZSB2aWV3LCBhbmQgZGlmZmVyZW50IGxpbmVzIGNhbiB1c2UgdGhlIHNhbWUgdmlldyBuYW1lCisgIHRvIGJ1aWxkIHVwIGEgbW9yZSBjb21wbGljYXRlZCB2aWV3LCBpZiB0aGF0J3Mgd2hhdCdzIG5lZWRlZC4KKworICAgIFRoZSB0aHJlZSB2aWV3IGZpZWxkcyBpbiB0aGUgYWNjZXNzIGxpbmUgYXJlIHVzZWQgdG8gY29udHJvbCB3aGljaAorICBwb3J0aW9ucyBvZiB0aGUgTUlCIHRyZWUgYSBwYXJ0aWN1bGFyIHtncm91cH0gY2FuIHNlZSAoR0VUIGV0IGFsKSwKKyAgYWx0ZXIgKFNFVCksIG9yIHJlcXVlc3QgTk9USUZZcyBvbi4KKworCisKKyAgICBUaGF0J3MgZGVhbHQgd2l0aCB0aGUgIndoYXQiIC0gbm93IGZvciB0aGUgIndobyIuCisgIFRoaXMgaXMgdGhlIHJvbGUgb2YgdGhlICJncm91cCIgYW5kICJjb20yc2VjIiBlbnRyaWVzLgorCisgIFRoZSAiZ3JvdXAiIGtleXdvcmQgZ2l2ZXMgZ2VuZXJhbCBjb250cm9sLCBieSBtYXBwaW5nIGJldHdlZW4gYSAic2VjdXJpdHkKKyAgbmFtZSIgKGZvciBhIHBhcnRpY3VsYXIgcHJvdG9jb2wgdmVyc2lvbiksIGFuZCB0aGUgaW50ZXJuYWwgbmFtZSB1c2VkIGluIHRoZQorICBhY2Nlc3MgbGluZS4gIE5vdGUgdGhhdCB0aGUgdG9rZW4gImFueSIgaXMgbm8gbG9uZ2VyIGFjY2VwdGFibGUgZm9yIHRoZQorICBzZWN1cml0eSBtb2RlbCAtIHRoZSBvcmlnaW5hbCBzdXBwb3J0IGZvciB0aGlzIHdhcyBkdWUgZHVlIHRvIGEgbWlzcmVhZGluZworICBvZiB0aGUgUkZDLiAgWW91IHNob3VsZCByZXBsYWNlIGFueSBzdWNoIGxpbmUgd2l0aCBzZXBhcmF0ZSB2ZXJzaW9ucyBmb3IKKyAgZWFjaCBvZiB0aGUgZGVzaXJlZCBzZWN1cml0eSBtb2RlbHMgKCd2MScsICd2MmMnICYgJ3VzbScpLgorCisgICAgRm9yIFNOTVB2MSBhbmQgU05NUHYyYywgdGhlIGdyb3VwIGxpbmUgaXMganVzdCBhbiBpbnRlcm1lZGlhdGUgc3RlcAorICBiZXR3ZWVuIHRoZSAiYWNjZXNzIiBsaW5lIGFuZCB0aGUgImNvbTJzZWMiIGxpbmUsIHdoaWNoIGlzIHRoZSBsYXN0IGJpdAorICBvZiB0aGUgamlnc2F3LiAgVGhlICJjb20yc2VjIiBlbnRyeSBpcyB1c2VkIHRvIGRldGVybWluZSBhICJzZWN1cml0eSBuYW1lIgorICBmcm9tIHRoZSB0cmFkaXRpb25hbCBjb21tdW5pdHkgc3RyaW5nLCB0YWtpbmcgaW50byBhY2NvdW50IHdoZXJlIHRoZSByZXF1ZXN0CisgIGhhcyBjb21lIGZyb20uICBUaHVzIHRoZSBzYW1lIGNvbW11bml0eSBzdHJpbmcgY2FuIGdpdmUgYWNjZXNzIHRvICBkaWZmZXJlbnQKKyAgcG9ydGlvbnMgb2YgdGhlIHRyZWUsIGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgcmVxdWVzdCBpcyBzZW50IGZyb20uCisKKyAgICAgRm9yIGV4YW1wbGUsIGluIGFuIGVhcmxpZXIgdmVyc2lvbiBvZiB0aGUgZXhhbXBsZSBjb25maWcgZmlsZSwgdGhlcmUKKyAgd2VyZSB0d28gY29tMnNlYyBsaW5lcyB3aXRoIHRoZSBjb21tdW5pdHkgc3RyaW5nICJwdWJsaWMiIC0gb25lIHdhcyB2YWxpZAorICBmcm9tIGFueXdoZXJlICh3aXRoIHRoZSBzZWN1cml0eSBuYW1lICJwdWJsaWMiKSBhbmQgb25lIHdhcyBvbmx5IHZhbGlkCisgIGZyb20gdGhlIGxvY2FsIG5ldHdvcmsgKHVzaW5nIHRoZSBzZWN1cml0eSBuYW1lICJteW5ldCIpLgorICAgICBUaGUgZ3JvdXAgbGluZXMgY29udmVydGVkIHRoZXNlIHNlY3VyaXR5IG5hbWVzIGludG8gdGhlIGdyb3VwcyAicHVibGljIgorICBhbmQgIm15Z3JvdXAiIHJlc3BlY3RpdmVseSwgYW5kIHRoZSBhY2Nlc3MgbGluZXMgZ2F2ZSB0aGVzZSB0d28gZ3JvdXBzCisgIHRoZSBhYmlsaXR5IHRvIEdFVCB2YWx1ZXMgaW4gdGhlICdzeXN0ZW0nIHN1Yi10cmVlIChmcm9tIGFueXdoZXJlKSBvcgorICB0aGUgJ21pYi0yJyBzdWItdHJlZSAoZnJvbSB0aGUgbG9jYWwgbmV0d29yaykuICBOZWl0aGVyIG9mIHRoZXNlIGNvdWxkCisgIFNFVCBhbnkgdmFsdWVzIHRob3VnaCwgKHNpbmNlIHRoZSB3cml0ZS10cmVlIHdhcyAibm9uZSIgaW4gYm90aCBjYXNlcykuCisgICAgU29tZW9uZSBvbiB0aGUgbG9jYWwgbWFjaGluZSwgdXNpbmcgdGhlIGNvbW11bml0eSBzdHJpbmcgInByaXZhdGUiLAorICBoYWQgdGhlIHNlY3VyaXR5IG5hbWUgImxvY2FsIiBhbmQgdGhlIGdyb3VwIG5hbWUgImxvY2FsIiwgYW5kIGhlbmNlIGhhZAorICBmdWxsIGFjY2VzcyAoYm90aCBHRVQgYW5kIFNFVCwgYXMgd2VsbCBhcyBOT1RJRlkpIHRvIHRoZSB3aG9sZSBvZiB0aGUKKyAgTUlCIHRyZWUgKG9yIGF0IGxlYXN0IGV2ZXJ5dGhpbmcgdW5kZXIgLjEsIHdoaWNoIGNvdmVycyBtb3N0IHRoaW5ncyEpCisKKyAgICAgTm90ZSB0aGF0IHRoZSB0aHJlZSBvY2N1cnJlbmNlcyBvZiAicHVibGljIiwgYXMgY29tbXVuaXR5IHN0cmluZywKKyAgc2VjdXJpdHkgbmFtZSBhbmQgZ3JvdXAgbmFtZSwgd2VyZSB0aHJlZSB0b3RhbGx5IHNlcGFyYXRlIHRoaW5ncy4KKyAgWW91IGNhbid0IHVzZSBhIGNvbW11bml0eSBzdHJpbmcgaW4gYSBzZWN1cml0eSBuYW1lIGZpZWxkLCBvciBlaXRoZXIKKyAgb2YgdGhlc2UgYXMgYSBncm91cCBuYW1lIChvciB2aWNlIHZlcnNhKSwgdW5sZXNzIHlvdSBzZXQgdXAgc3VpdGFibGUKKyAgZW50cmllcyB0byBtYXAgb25lIG5hbWUgb250byB0aGUgb3RoZXIuCisKKyAgICBXaXRoIFNOTVB2MywgdGhlIHNlY3VyaXR5IG5hbWUgaXMgcGFydCBvZiB0aGUgYmFzaWMgcHJvdG9jb2wsIGFuZCBjYW4KKyAgYmUgdXNlZCBkaXJlY3RseSBpbiBhIGdyb3VwIGRlZmluaXRpb24uCisKKyAgQW5kIGhlcmUgY29uY2x1ZGVzIG91ciB0b3VyIG9mIHRoZSB2aWV3LWJhc2VkIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbS4KKyAgUGhldyEKKworCisKKzxhIG5hbWU9Ikhvd19kb19JX2NvbmZpZ3VyZV9TTk1Qdl9fdXNlcnNfIj4KK0hvdyBkbyBJIGNvbmZpZ3VyZSBTTk1QdjMgdXNlcnM/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBDcmVhdGUgYSBmaWxlIC92YXIvdWNkLXNubXAvc25tcGQuY29uZiBmaWxlLCBjb250YWluaW5nIHRoZSBsaW5lCisKKwljcmVhdGVVc2VyIHtteVVzZXJ9IE1ENSB7bXlQYXNzd29yZH0gREVTCisKKyAgKHdoZXJlIHtteVVzZXJ9IGFuZCB7bXlQYXNzd29yZH0gYXJlIHRoZSBhcHByb3ByaWF0ZSB2YWx1ZXMsIF93aXRob3V0XworICB0aGUgYnJhY2VzISkuICBUaGVuIHN0YXJ0IChvciByZS1zdGFydCkgdGhlIHNubXBkIGFnZW50LgorICBUaGlzIHdpbGwgY3JlYXRlIHRoZSBuZXcgdXNlci4gIFNlZSB0aGUgYWNjZXNzIGNvbnRyb2wgZW50cmllcyBhYm92ZQorICBmb3IgaG93IHRvIHVzZSB0aGlzLCBhbmQgdGhlIGZpbGUgJ1JFQURNRS5zbm1wdjMnIGZvciBtb3JlIGRldGFpbHMuCisKKworCis8YSBuYW1lPSJUaGVfX2NyZWF0ZVVzZXJfX2xpbmVfZGlzYXBwZWFyc193aGVuX0lfc3RhcnRfdGhlX2FnZW50X19fV2h5XyI+CitUaGUgJ2NyZWF0ZVVzZXInIGxpbmUgZGlzYXBwZWFycyB3aGVuIEkgc3RhcnQgdGhlIGFnZW50LiAgV2h5PworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhhdCdzIGRlbGliZXJhdGUuICAgVGhlIGFnZW50IHJlbW92ZXMgdGhlIChodW1hbi1yZWFkYWJsZSkgJ2NyZWF0ZVVzZXInCisgIGRpcmVjdGl2ZSwgYW5kIHJlcGxhY2VzIGl0IHdpdGggYW4gZXF1aXZhbGVudCAndXNtVXNlcicuICBUaGlzCisgIGNvbnRhaW5zIHRoZSBzYW1lIGluZm9ybWF0aW9uLCBidXQgaW4gYSBmb3JtIHRoYXQncyBvbmx5IG1lYW5pbmdmdWwKKyAgaW50ZXJuYWxseS4gIFRoaXMgbWVhbnMgdGhhdCB0aGUgcGFzc3dvcmQgaXMgbm90IGxvbmdlciBzdG9yZWQgaW4KKyAgYSBodW1hbi1yZWFkYWJsZSBmb3JtLiAgQWRkaXRpb25hbGx5LCB0aGUgcGFzc3dvcmQgaGFzIGJlZW4gY29udmVydGVkCisgIHRvIGEga2V5IHRoYXQgY2FuIG9ubHkgYmUgdXNlZCB0byBhY2Nlc3MgdGhlIGxvY2FsIG1hY2hpbmUuICBJZiBzb21lb25lCisgIHN0b2xlIHRoZSBuZXcgdXNtVXNlciBsaW5lIG9uIHRoaXMgbWFjaGluZSwgdGhleSBjb3VsZCBub3QgdXNlIHRoYXQKKyAgaW5mb3JtYXRpb24gdG8gYWNjZXNzIGFueSBvZiB5b3VyIG90aGVyIGFnZW50cy4KKworCisKKzxhIG5hbWU9IldoYXRfc190aGVfZGlmZmVyZW5jZV9iZXR3ZWVuX192YXJfdWNkX3NubXBfYW5kX191c3JfbG9jYWxfc2hhcmVfc25tcF8iPgorV2hhdCdzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gL3Zhci91Y2Qtc25tcCBhbmQgL3Vzci9sb2NhbC9zaGFyZS9zbm1wPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBNb3N0ICJzdGF0aWMiIGFnZW50IGNvbmZpZ3VyYXRpb24gc2hvdWxkIGdvIGluIHRoZSB0cmFkaXRpb25hbCBsb2NhdGlvbgorICAodHlwaWNhbGx5IC91c3IvbG9jYWwvc2hhcmUvc25tcC9zbm1wZC5jb25mIG9yIC9ldGMvc25tcCkuICAgVGhlCisgIC92YXIvdWNkLXNubXAgKG9yIC92YXIvbmV0LXNubXApIGxvY2F0aW9uIGlzIHVzZWQgZm9yIGluZm9ybWF0aW9uIHNldCBkdXJpbmcKKyAgdGhlIHJ1bm5pbmcgb2YgdGhlIGFnZW50LCB3aGljaCBuZWVkcyB0byBiZSBwZXJzaXN0ZW50IGJldHdlZW4gb25lIHJ1biBvZgorICB0aGUgYWdlbnQgYW5kIHRoZSBuZXh0LgorCisgICAgUHV0dGluZyB0aGUgJ2NyZWF0ZVVzZXInIGxpbmUgaW4gdGhpcyBwZXJzaXN0ZW50IGZpbGUgaXMgYW4gZXhjZXB0aW9uLAorICBmb3Igc2VjdXJpdHkgcmVhc29ucyAoc2VlIGFib3ZlKS4gIEluIGdlbmVyYWwgeW91IHNob3VsZG4ndCBuZWVkIHRvIHB1dAorICBhbnl0aGluZyBlbHNlIGhlcmUuCisKKworCis8YSBuYW1lPSJNeV9uZXdfYWdlbnRfaXNfaWdub3JpbmdfdGhlX29sZF9zbm1wZF9jb25mX2ZpbGVfX1doeV8iPgorTXkgbmV3IGFnZW50IGlzIGlnbm9yaW5nIHRoZSBvbGQgc25tcGQuY29uZiBmaWxlLiBXaHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhlIG1vc3QgbGlrZWx5IGV4cGxhbmF0aW9uIGlzIHRoYXQgdGhlIG5ldyB2ZXJzaW9uIG9mIHRoZSBhZ2VudCBpcworICBsb29raW5nIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uIHRoYW4gdGhlIHByZXZpb3VzIG9uZS4gIFRoaXMgaXMgY29tbW9ubHkKKyAgZXhwZXJpZW5jZWQgd2hlbiByZXBsYWNpbmcgYSByZWFkeS1pbnN0YWxsZWQgdmVyc2lvbiAoZS5nLiBmcm9tIGEgdmVuZG9yCisgIGRpc3RyaWJ1dGlvbiksIHdpdGggdGhlIGN1cnJlbnQgcmVsZWFzZSBpbnN0YWxsZWQgZnJvbSB0aGUgc291cmNlLgorCisgICAgVGhlIGRlZmF1bHQgbG9jYXRpb24gZm9yIHRoaXMgZmlsZSB3aXRoIHRoZSBiYXNpYyBkaXN0cmlidXRpb24gaXMKKyAgL3Vzci9sb2NhbC9zaGFyZS9zbm1wL3NubXBkLmNvbmYgKG9yIFBSRUZJWC9zaGFyZS9zbm1wL3NubXBkLmNvbmYpLgorICBSZWFkeS1pbnN0YWxsZWQgdmVyc2lvbnMgb2Z0ZW4gbG9vayBmb3IgdGhlIGZpbGUgYXMgL2V0Yy9zbm1wZC5jb25mLAorICBvciAvZXRjL3NubXAvc25tcGQuY29uZi4gIFRyeSBtb3ZpbmcgdGhlIG9sZCBjb25maWcgZmlsZSB0byB0aGUgbmV3CisgIGxvY2F0aW9uLCBhbmQgcmVzdGFydCB0aGUgYWdlbnQuCisKKyAgICBXaXRoIHJlbGVhc2UgNS4wLCB0aGUgbmFtZSBvZiB0aGUgcGFja2FnZSBjaGFuZ2VkIGZyb20gInVjZC1zbm1wIgorICB0byAibmV0LXNubXAiLCBhbmQgdGhpcyBjaGFuZ2Ugd2FzIHJlZmxlY3RlZCBpbiB0aGUgbmFtZSBvZiB0aGUgcGVyc2lzdGVudAorICAvdmFyIGRpcmVjdG9yeS4gIFNvIGEgdjUgTmV0LVNOTVAgYWdlbnQgd2lsbCBub3QgbG9vayBpbgorICAvdmFyL3VjZC1zbm1wL3NubXBkLmNvbmYgZm9yIHNldHRpbmdzIGZyb20gYSB2NCBVQ0QgYWdlbnQuCisKKworCis8YSBuYW1lPSJXaHlfYW1fSV9nZXR0aW5nX19Db25uZWN0aW9uX3JlZnVzZWRfXyI+CitXaHkgYW0gSSBnZXR0aW5nICJDb25uZWN0aW9uIHJlZnVzZWQiPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBhY3R1YWxseSBub3RoaW5nIHRvIGRvIHdpdGggdGhlIGFjY2VzcyBjb250cm9sIG1lY2hhbmlzbQorICAodGhvdWdoIHRoYXQncyBhbiB1bmRlcnN0YW5kYWJsZSBtaXN0YWtlKS4gIFRoaXMgaXMgdGhlIHJlc3VsdCBvZgorICB0aGUgVENQIHdyYXBwZXIgbWVjaGFuaXNtIHVzaW5nIHRoZSBmaWxlcyAnaG9zdHMuYWxsb3cnIGFuZCAnaG9zdHMuZGVueScKKyAgdG8gY29udHJvbCBhY2Nlc3MgdG8gdGhlIHNlcnZpY2UuICBTb21lIGRpc3RyaWJ1dGlvbnMgbWF5IGNvbWUgd2l0aAorICB0aGlzIGVuYWJsZWQgYXV0b21hdGljYWxseSAtIG90aGVyd2lzZSB5b3UgbmVlZCB0byBzZWxlY3QgaXQgZXhwbGljaXRseQorICBieSBjb25maWd1cmluZyB1c2luZyAnLS13aXRoLWxpYndyYXAnLgorCisgICAgVGhlIHNpbXBsZXN0IHdheSB0byBhdm9pZCB0aGlzIHByb2JsZW0gaXMgdG8gYWRkIHRoZSBsaW5lCisKKwkJc25tcGQ6IEFMTAorCisgIGluIHRoZSBmaWxlIC9ldGMvaG9zdHMuYWxsb3cgKG9yIHdoZXJldmVyIHRoaXMgZmlsZSBpcyBvbiB5b3VyIHN5c3RlbSkuCisgIFRob3VnaCBiZSBhd2FyZSB0aGF0IGRvaW5nIHRoaXMgcmVtb3ZlcyBvbmUgbGV2ZWwgb2YgcHJvdGVjdGlvbiBhbmQgYWxsb3dzCisgIGFueW9uZSB0byB0cnkgYW5kIHF1ZXJ5IHlvdXIgYWdlbnQgKHRob3VnaCB0aGUgYWdlbnQncyBvd24gYWNjZXNzIGNvbnRyb2wKKyAgbWVjaGFuaXNtcyBjYW4gc3RpbGwgYmUgdXNlZCB0byByZXN0cmljdCB3aGF0IC0gaWYgYW55dGhpbmcgLSB0aGV5IGNhbiBzZWUpLgorCisgIE5vdGUgdGhhdCBwZXJzb25hbCBmaXJld2FsbHMgKHN1Y2ggYXMgTGludXgnIGlwY2hhaW5zIG9yIGlwdGFibGVzIG1lY2hhbmlzbSkKKyAgbWF5IGhhdmUgYSBzaW1pbGFyIGVmZmVjdCAodGhvdWdoIHR5cGljYWxseSB0aGlzIHdvbid0IGJlIGxvZ2dlZCkuCisgIFNlZSB0aGUgZWFybGllciBlbnRyeQorICAgIFJlcXVlc3RzIGFsd2F5cyBzZWVtIHRvIHRpbWVvdXQsIGFuZCBkb24ndCBnaXZlIG1lIGFueXRoaW5nIGJhY2suICBXaHk/CisKKworIAorPGEgbmFtZT0iSV9tX2dldHRpbmdfZXJyb3JzX2Fib3V0X19iYWRfc2VjdXJpdHlfbW9kZWxfX19fd2h5XyI+CitJJ20gZ2V0dGluZyBlcnJvcnMgYWJvdXQgImJhZCBzZWN1cml0eSBtb2RlbCIgLSB3aHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVW50aWwgcmVsZWFzZSA0LjIsIHRoZSBhY2Nlc3MgY29udHJvbCBoYW5kbGluZyBhY2NlcHRlZCB0aGUgdG9rZW4gImFueSIgCisgIHRvIGNvdmVyIGFsbCBvZiB0aGUgcmVjb2duaXNlZCBzZWN1cml0eSBtb2RlbHMuICBUaGlzIGlzIGV4cGxpY2l0bHkKKyAgZm9yYmlkZGVuIGluIHRoZSByZWxldmFudCBSRkMsIHNvIHN1cHBvcnQgZm9yIHRoaXMgaXMgYmVpbmcgd2l0aGRyYXduLgorICAgIEFzIGFuIGludGVyaW0gbWVhc3VyZSwgaXQgaXMgY3VycmVudGx5IGFjY2VwdGVkICh3aXRoIHRoZSB3YXJuaW5nIHlvdQorICBzZWUpLCBidXQgdGhpcyB3aWxsIG5vdCBiZSB0aGUgY2FzZSBpbiBmdXR1cmUgcmVsZWFzZXMgb2YgdGhlIGFnZW50LgorIAorICAgIFlvdSBzaG91bGQgcmVwbGFjZSB0aGUgdG9rZW4gJ2FueScgd2l0aCAndjEnLCAndjJjJyBvciAndXNtJyBhcworICBhcHByb3ByaWF0ZS4gIElmIHlvdSB3YW50IHRvIHN1cHBvcnQgYWxsIHRocmVlIG9mIHRoZXNlIHNlY3VyaXR5IG1vZGVscywKKyAgeW91J2xsIG5lZWQgdG8gdXNlIHRocmVlIGRpc3RpbmN0IGdyb3VwIGxpbmVzLCBvbmUgZm9yIGVhY2guIFNlZSB0aGUKKyAgZXhhbXBsZSBzbm1wZC5jb25mIGZpbGUgZm9yIGRldGFpbHMuCisKKyAgCisKKzxhIG5hbWU9IklfbV9nZXR0aW5nX2Vycm9yc19hYm91dF9fYmFkX3ByZWZpeF9tYXRjaF9wYXJhbWV0ZXJfX19fd2h5XyI+CitJJ20gZ2V0dGluZyBlcnJvcnMgYWJvdXQgImJhZCBwcmVmaXggbWF0Y2ggcGFyYW1ldGVyIiAtIHdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgaXMgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgcXVlc3Rpb24uICBXaXRoIDQuMiwgdGhlIHN5bnRheCBvZiB0aGUKKyAgJ2FjY2VzcycgY29uZmlndXJlIGxpbmUgaGFzIGNoYW5nZWQsIGFuZCBhIHZhbHVlIG9mICcwJyBpcyBubyBsb25nZXIKKyAgYWNjZXB0YWJsZSBmb3IgdGhlIHNpeHRoIGZpZWxkLiAgU2ltcGx5IHJlcGxhY2UgdGhpcyB3aXRoIHRoZSB3b3JkICdleGFjdCcuCisKKworICAKKzxhIG5hbWU9IldoeV9jYW5fdF9JX3NlZV92YWx1ZXNfaW5fdGhlX1VDRGF2aXNfX2V4dGVuc2libGVfX29yX19kaXNrX190cmVlc18iPgorV2h5IGNhbid0IEkgc2VlIHZhbHVlcyBpbiB0aGUgVUNEYXZpcyAnZXh0ZW5zaWJsZScgb3IgJ2Rpc2snIHRyZWVzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgQm90aCB0aGVzZSB0cmVlcyBhcmUgZGVzaWduZWQgdG8gcmVwb3J0IHRoaW5ncyB5b3UgYXNrIGl0IHRvIHJlcG9ydAorICBvbi4gIElmIHlvdSBkb24ndCBkZWNsYXJlIGFueXRoaW5nIGluIHRoZSBzbm1wZC5jb25mIGZpbGUgZm9yIGl0IHRvCisgIG1vbml0b3IsIGl0IHdpbGwgbm90IHJlcG9ydCBhbnl0aGluZy4gIFNlZSB0aGUgc25tcGQuY29uZiBtYW51YWwgcGFnZQorICBhbmQgdGhlIEVYQU1QTEUuY29uZiBmaWxlIGZvciBkZXRhaWxzIG9uIGNvbmZpZ3VyaW5nIHRoZSBhZ2VudC4KKworICBPcHRpb25hbGx5LCBydW4gc25tcGNvbmYgLWcgbW9uaXRvcmluZyB0byBoZWxwIHlvdSBzZXQgdXAgdGhpcworICBzZWN0aW9uIG9mIHRoZSBzbm1wZC5jb25mIGZpbGUuCisKKworCitXaHkgY2FuJ3QgSSBzZWUgdmFsdWVzIGluIHRoZSBVQ0RhdmlzICdtZW1vcnknIG9yICd2bXN0YXQnIHRyZWVzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZXNlIG1pYiBtb2R1bGVzIGFyZSBub3Qgc3VwcG9ydGVkIG9uIGFsbCBvcGVyYXRpbmcgc3lzdGVtcywgYW5kCisgIHdpbGwgbm90IGJlIGluY2x1ZGVkIG9uIGFueSBvdGhlciBzeXN0ZW0uICBDdXJyZW50bHksIHRoZXkgYXJlIG9ubHkKKyAgc3VwcG9ydGVkIG9uIExpbnV4LCBIUC1VWCAobWVtb3J5IG9ubHkpLCBTb2xhcmlzLCBCU0RpICh2bXN0YXQgb24KKyAgQlNEaTQgb25seSksIER5bml4LCBGcmVlQlNELCBOZXRCU0QgYW5kIE9wZW5CU0QuCisgICAgSWYgeW91IHdhbnQgdG8gaGVscCBwb3J0IGl0IHRvIG90aGVyIHN5c3RlbXMsIGxldCB1cyBrbm93LgorCisgIE5vdGUgdGhhdCB0aGVzZSBzdWJ0cmVlcyBvbmx5IHJlcG9ydCB0aGUgY3VycmVudCB1c2FnZSB3aGVuCisgIGV4cGxpY2l0bHkgcXVlcmllZC4gIFRoZXkgZG8gKm5vdCogZ2VuZXJhdGUgdHJhcHMgd2hlbiB0aGUKKyAgdXNhZ2Ugc3RyYXlzIG91dHNpZGUgdGhlIGNvbmZpZ3VyZWQgYm91bmRzLgorICBTZWUgdGhlIGVhcmxpZXIgRkFRIGVudHJ5CisgICAgV2hhdCB0cmFwcyBhcmUgc2VudCBieSB0aGUgYWdlbnQ/CisKKworCis8YSBuYW1lPSJXaGF0X2RvX3RoZV9DUFVfc3RhdGlzdGljc19tZWFuX19faXNfdGhpc190aGVfbG9hZF9hdmVyYWdlXyI+CitXaGF0IGRvIHRoZSBDUFUgc3RhdGlzdGljcyBtZWFuIC0gaXMgdGhpcyB0aGUgbG9hZCBhdmVyYWdlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIE5vLiAgVW5mb3J0dW5hdGVseSwgdGhlIG9yaWdpbmFsIGRlZmluaXRpb24gb2YgdGhlIHZhcmlvdXMgQ1BVIHN0YXRpc3RpY3MKKyAgd2FzIGEgbGl0dGxlIHZhZ3VlLiAgSXQgcmVmZXJyZWQgdG8gYSAicGVyY2VudGFnZSIsIHdpdGhvdXQgc3BlY2lmeWluZworICB3aGF0IHBlcmlvZCB0aGlzIHNob3VsZCBiZSBjYWxjdWxhdGVkIG92ZXIuICBJdCB3YXMgdGhlcmVmb3JlCisgIGltcGxlbWVudGVkIHNsaWdodGx5IGRpZmZlcmVudGx5IG9uIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzLgorCisgICAgUmVjZW50IHJlbGVhc2VzIGluY2x1ZGVzICJyYXcgY291bnRlcnMiLCB3aGljaCBjYW4gYmUgdXNlZCB0bworICBjYWxjdWxhdGUgdGhlIHBlcmNlbnRhZ2UgdXNhZ2Ugb3ZlciBhbnkgZGVzaXJlZCBwZXJpb2QuICBUaGlzIGlzCisgIHRoZSAicmlnaHQiIHdheSB0byBoYW5kbGUgdGhpbmdzIGluIHRoZSBTTk1QIG1vZGVsLiAgVGhlIG9yaWdpbmFsCisgIGZsYXdlZCBwZXJjZW50YWdlIG9iamVjdHMgc2hvdWxkIG5vdCBiZSB1c2VkLCBhbmQgd2lsbCBiZSByZW1vdmVkCisgIGluIGEgZnV0dXJlIHJlbGVhc2Ugb2YgdGhlIGFnZW50LgorCisgICAgTm90ZSB0aGF0IHRoaXMgaXMgZGlmZmVyZW50IGZyb20gdGhlIFVuaXggbG9hZCBhdmVyYWdlLCB3aGljaCBpcworICBhdmFpbGFibGUgdmlhIHRoZSBsb2FkVGFibGUsIGFuZCBpcyBzdXBwb3J0ZWQgb24gYWxsIGFyY2hpdGVjdHVyZXMuCisKKworCis8YSBuYW1lPSJIb3dfZG9fSV9nZXRfcGVyY2VudGFnZV9DUFVfdXRpbGl6YXRpb25fdXNpbmdfc3NDcHVSYXdJZGxlXyI+CitIb3cgZG8gSSBnZXQgcGVyY2VudGFnZSBDUFUgdXRpbGl6YXRpb24gdXNpbmcgc3NDcHVSYXdJZGxlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIG9uZSBvZiB0aGUgInJhdyBjb3VudGVycyIgbWVudGlvbmVkIGluIHRoZSBwcmV2aW91cyBlbnRyeS4KKyAgWW91IG5lZWQgdG8gdGFrZSB0d28gcmVhZGluZ3Mgb2YgdGhpcyBvYmplY3QgYW5kIGxvb2sgYXQgdGhlCisgIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtLiAgVGhhdCBkaWZmZXJlbmNlIGRpdmlkZWQgYnkgdGhlIHRvdGFsCisgIG51bWJlciBvZiAndGlja3MnIGJldHdlZW4gdGhlIHR3byByZWFkaW5ncyAod2hlcmUgb25lIHRpY2sgaXMKKyAgcHJvYmFibHkgMC4wMSBzZWNvbmRzKSB3aWxsIGdpdmUgeW91IHRoZSBwZXJjZW50YWdlIHV0aWxpemF0aW9uCisgIG92ZXIgdGhhdCBwZXJpb2QuCisKKworCis8YSBuYW1lPSJXaGF0X2Fib3V0X211bHRpX3Byb2Nlc3Nvcl9zeXN0ZW1zXyI+CitXaGF0IGFib3V0IG11bHRpLXByb2Nlc3NvciBzeXN0ZW1zPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgU29ycnkgLSB0aGUgQ1BVIHN0YXRpc3RpY3MgKGJvdGggb3JpZ2luYWwgcGVyY2VudGFnZXMsIGFuZCB0aGUKKyAgbmV3ZXIgcmF3IHN0YXRpc3RpY3MpIGJvdGggcmVmZXIgdG8gdGhlIHN5c3RlbSBhcyBhIHdob2xlLiAgVGhlcmUKKyAgaXMgY3VycmVudGx5IG5vIHdheSB0byBhY2Nlc3MgaW5kaXZpZHVhbCBzdGF0aXN0aWNzIGZvciBhIHBhcnRpY3VsYXIKKyAgcHJvY2Vzc29yIChleGNlcHQgb24gU29sYXJpcyBzeXN0ZW1zIC0gc2VlIGJlbG93KS4KKworICAgIE5vdGUgdGhhdCBhbHRob3VnaCB0aGUgSG9zdCBSZXNvdXJjZXMgdGFibGUgaW5jbHVkZXMgYSBoclByb2Nlc3NvclRhYmxlLAorICB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBzdWZmZXJzIGZyb20gdHdvIG1ham9yIGZsYXdzLiAgRmlyc3RseSwgaXQKKyAgZG9lc24ndCBjdXJyZW50bHkgcmVjb2duaXNlIHRoZSBwcmVzZW5jZSBvZiBtdWx0aXBsZSBwcm9jZXNzb3JzLCBhbmQKKyAgc2ltcGx5IGFzc3VtZXMgdGhhdCBhbGwgc3lzdGVtcyBoYXZlIHByZWNpc2VseSBvbmUgQ1BVLiAgU2Vjb25kbHksIGl0CisgIGRvZXNuJ3QgY2FsY3VsYXRlIHRoZSBoclByb2Nlc3NvckxvYWQgdmFsdWUgY29ycmVjdGx5LCBhbmQgZWl0aGVyIHJldHVybnMKKyAgYSBkdW1teSB2YWx1ZSAoYmFzZWQgb24gdGhlIGxvYWQgYXZlcmFnZSkgb3Igbm90aGluZyBhdCBhbGwuCisKKyAgICBBcyBvZiBuZXQtc25tcCB2ZXJzaW9uIDUuMSwgdGhlIFNvbGFyaXMgb3BlcmF0aW5nIHN5c3RlbSBkZWxpdmVycyBzb21lCisgIGluZm9ybWF0aW9uIGFib3V0IG11bHRpcGxlIENQVSdzIHN1Y2ggYXMgc3BlZWQgYW5kIHR5cGUuCisKKyAgICBPdGhlciB0aGFuIHRoYXQsIHRvIG1vbml0b3IgYSBtdWx0aS1wcm9jZXNzb3Igc3lzdGVtLCB5b3UncmUgY3VycmVudGx5CisgIG91dCBvZiBsdWNrLiAgV2UgaG9wZSB0byBhZGRyZXNzIHRoaXMgaW4gYSBmdXR1cmUgcmVsZWFzZSBvZiB0aGUgYWdlbnQuCisgIEJ1dCB5b3UndmUgZ290IHRoZSBzb3VyY2UsIHNvIHlvdSBjYW4gYWx3YXlzIGhhdmUgYSBnbyB5b3Vyc2VsZiA6LSkKKworCisKKzxhIG5hbWU9IlRoZV9zcGVlZF90eXBlX29mX215X25ldHdvcmtfaW50ZXJmYWNlc19pc193cm9uZ19fX2hvd19jYW5fSV9maXhfaXRfIj4KK1RoZSBzcGVlZC90eXBlIG9mIG15IG5ldHdvcmsgaW50ZXJmYWNlcyBpcyB3cm9uZyAtIGhvdyBjYW4gSSBmaXggaXQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBTb21lIG9wZXJhdGluZyBzeXN0ZW1zIHdpbGwgcHJvdmlkZSBhIG1lY2hhbmlzbSBmb3IgZGV0ZXJtaW5pbmcKKyAgdGhlIHNwZWVkIGFuZCB0eXBlIG9mIG5ldHdvcmsgaW50ZXJmYWNlcywgYnV0IG1hbnkgZG8gbm90LiAgSW4gdGhpcworICBjYXNlLCB0aGUgYWdlbnQgYXR0ZW1wdHMgdG8gZ3Vlc3MgdGhlIG1vc3QgYXBwcm9wcmlhdGUgdmFsdWVzLCBiYXNlZAorICBvbiB0aGUgbmFtZSBvZiB0aGUgaW50ZXJmYWNlLgorICAgIFZlcnNpb24gNC4yIGFsbG93cyB5b3UgdG8gb3ZlcnJpZGUgdGhlc2UgZ3Vlc3NlZCB2YWx1ZXMsIHVzaW5nIHRoZQorICBjb25maWd1cmF0aW9uIGRpcmVjdGl2ZSAnaW50ZXJmYWNlJywgc3BlY2lmeWluZyB0aGUgbmFtZSwgdHlwZSBhbmQKKyAgc3BlZWQgb2YgYSBwYXJ0aWN1bGFyIGludGVyZmFjZS4gIFRoaXMgaXMgcGFydGljdWxhcmx5IHVzZWZ1bCBmb3IKKyAgZmFzdC1ldGhlcm5ldCwgb3IgZGlhbC11cCBpbnRlcmZhY2VzLCB3aGVyZSB0aGUgc3BlZWQgY2Fubm90IGJlCisgIGd1ZXNzZWQgZnJvbSB0aGUgbmFtZS4KKyAgICBTZWUgdGhlIHNubXBkLmNvbmYoNSkgbWFuIHBhZ2UgZm9yIGRldGFpbHMuCisgIAorCisKKzxhIG5hbWU9IlRoZV9pbnRlcmZhY2Vfc3RhdGlzdGljc19mb3JfbXlfc3ViaW50ZXJmYWNlc19hcmVfYWxsX3plcm9fX193aHlfIj4KK1RoZSBpbnRlcmZhY2Ugc3RhdGlzdGljcyBmb3IgbXkgc3ViaW50ZXJmYWNlcyBhcmUgYWxsIHplcm8gLSB3aHk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBVbmZvcnR1bmF0ZWx5LCBtb3N0IGtlcm5lbHMgdGhhdCBzdXBwb3J0IG11bHRpcGxlIGxvZ2ljYWwKKyAgaW50ZXJmYWNlcyBvbiBhIHNpbmdsZSBwaHlzaWNhbCBpbnRlcmZhY2UsIGRvbid0IGtlZXAgc2VwYXJhdGUKKyAgc3RhdGlzdGljcyBmb3IgZWFjaCBvZiB0aGVzZS4gIFRoZXkgc2ltcGx5IHJlcG9ydCB0aGUgb3ZlcmFsbAorICBzdGF0aXN0aWNzIGZvciB0aGUgcGh5c2ljYWwgaW50ZXJmYWNlIGl0c2VsZi4KKyAgICBUaGVyZSdzIG5vIGVhc3kgd2F5IGFyb3VuZCB0aGlzIHByb2JsZW0gLSB0aGUgYWdlbnQgY2FuIG9ubHkKKyAgcmVwb3J0IHN1Y2ggdmFsdWVzIGFzIGl0IGNhbiBmaW5kIG91dC4gIElmIHRoZSBrZXJuZWwgZG9lc24ndAorICBrZWVwIHRyYWNrIG9mIHRoZXNlIGZpZ3VyZXMsIHRoZSBhZ2VudCBjYW4ndCByZXBvcnQgdGhlbS4KKyAgICBTb3JyeSEKKworCis8YSBuYW1lPSJXaGF0X2RvZXNfX2tscmVhZF9fX2JhZF9hZGRyZXNzX19tZWFuXyI+CitXaGF0IGRvZXMgImtscmVhZDogIGJhZCBhZGRyZXNzIiBtZWFuPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgbWVhbnMgdGhhdCB0aGUgYWdlbnQgd2FzIHVuYWJsZSB0byBleHRyYWN0IHNvbWUgb2YgdGhlCisgIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiBmcm9tIHRoZSBrZXJuZWwgc3RydWN0dXJlcy4gIFRoaXMgaXMKKyAgcG9zc2libHkgZHVlIHRvOgorCS0gZWl0aGVyIGxvb2tpbmcgaW4gdGhlIHdyb25nIHBsYWNlIGZvciBrZXJuZWwgaW5mb3JtYXRpb24KKwkJKGNoZWNrIHRoZSB2YWx1ZSBvZiBLRVJORUxfTE9DKQorCS0gYW4gZXJyb3IgaW4gdGhlIGltcGxlbWVudGF0aW9uIG9mIHBhcnQgb2YgdGhlIE1JQiB0cmVlCisJCWZvciB0aGF0IGFyY2hpdGVjdHVyZS4gIFRyeSBhbmQgaWRlbnRpZnkgd2hpY2gKKwkJT0lEIGlzIGdlbmVyYXRpbmcgdGhlIGVycm9yLCBhbmQgY29udGFjdCB0aGUKKwkJbGlzdCAnbmV0LXNubXAtY29kZXJzQGxpc3RzLnNvdXJjZWZvcmdlLm5ldCcKKwkJUmVtZW1iZXIgdG8gdGVsbCB1cyB3aGF0IGFyY2hpdGVjdHVyZSB5b3UgaGF2ZSEKKworCisKKzxhIG5hbWU9IldoYXRfZG9lc19fbmxpc3RfZXJyX19fd29tYmF0X25vdF9mb3VuZF9fX29yX3NpbWlsYXJfX21lYW5fIj4KK1doYXQgZG9lcyAibmxpc3QgZXJyOiAgd29tYmF0IG5vdCBmb3VuZCIgKG9yIHNpbWlsYXIpIG1lYW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBtZWFucyB0aGF0IHRoZSBhZ2VudCB3YXNuJ3QgYWJsZSB0byBsb2NhdGUgb25lIG9mIHRoZQorICBrZXJuZWwgc3RydWN0dXJlcyBpdCB3YXMgbG9va2luZyBmb3IuICBUaGlzIG1heSBvciBtYXkgbm90CisgIGJlIGltcG9ydGFudCAtIHNvbWUgc3lzdGVtcyBwcm92aWRlIGFsdGVybmF0aXZlIG1lY2hhbmlzbXMKKyAgZm9yIG9idGFpbmluZyB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIC0gU29sYXJpcywgZm9yIGV4YW1wbGUsCisgIGNhbiBwcm9kdWNlIGEgd2hvbGUgc2xldyBvZiBzdWNoIG1lc3NhZ2VzLCBidXQgc3RpbGwgcHJvdmlkZQorICB0aGUgY29ycmVjdCBpbmZvcm1hdGlvbi4KKyAgICBUaGlzIGVycm9yIG9ubHkgb2NjdXJzIGlmIHlvdSBoYXZlIHVzZWQgdGhlIGZsYWcKKyAgJy0tZW5hYmxlLWRlYnVnZ2luZycgYXMgcGFydCBvZiB0aGUgaW5pdGlhbCBjb25maWd1cmF0aW9uLgorICBSZWNvbmZpZ3VyZSB0aGUgYWdlbnQgd2l0aCAnLS1kaXNhYmxlLWRlYnVnZ2luZycgYW5kIHRoZXNlCisgIG1lc3NhZ2VzIHdpbGwgZGlzYXBwZWFyLiAgKEl0IHdvbid0IGZpeCB0aGUgdW5kZXJseWluZyBwcm9ibGVtLAorICBidXQgYXQgbGVhc3QgeW91IHdvbid0IGJlIG5hZ2dlZCBhYm91dCBpdCkuCisKKworCis8YSBuYW1lPSJIb3dfYWJvdXRfX0Nhbl90X29wZW5fX2Rldl9rbWVtX18iPgorSG93IGFib3V0ICJDYW4ndCBvcGVuIC9kZXYva21lbSI/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoaXMgZGV2aWNlIGlzIG5vcm1hbGx5IHJlc3RyaWN0ZWQgdG8ganVzdCBiZWluZyBhY2Nlc3NpYmxlIGJ5IHJvb3QKKyAgKG9yIHBvc3NpYmx5IGJ5IGEgc3BlY2lhbCBncm91cCBzdWNoIGFzICdrbWVtJyBvciAnc3lzJykuICBUaGUgYWdlbnQKKyAgbXVzdCBiZSBhYmxlIHRvIHJlYWQgdGhpcyBkZXZpY2UgdG8gb2J0YWluIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24KKyAgYWJvdXQgdGhlIHJ1bm5pbmcgc3lzdGVtLgorICAgIENoZWNrIHRoYXQgdGhlIGFnZW50IHdhcyBzdGFydGVkIGJ5IHJvb3QsIGFuZCBpcyBydW5uaW5nIHdpdGggVUlEIDAKKyAgKG9yIHN1aXRhYmxlIEdJRCBpZiBhcHByb3ByaWF0ZSkuICBUaGUgYWdlbnQgd2lsbCBub3JtYWxseSBjb250aW51ZQorICB0byBydW4gd2l0aG91dCB0aGlzIGxldmVsIG9mIGFjY2VzcyBwZXJtaXNzaW9uLCBidXQgd29uJ3QgYmUgYWJsZSB0bworICByZXBvcnQgdmFsdWVzIGZvciBtYW55IG9mIHRoZSB2YXJpYWJsZXMgKHBhcnRpY3VsYXJseSB0aG9zZSByZWxhdGluZworICB0byBuZXR3b3JrIHN0YXRpc3RpY3MpLgorCisgCisKKzxhIG5hbWU9IlRoZV9hZ2VudF9pc19jb21wbGFpbmluZ19hYm91dF9fc25tcGRfY29uZl9fX19XaGVyZV9pc190aGlzXyI+CitUaGUgYWdlbnQgaXMgY29tcGxhaW5pbmcgYWJvdXQgJ3NubXBkLmNvbmYnLiAgV2hlcmUgaXMgdGhpcz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSXQgZG9lc24ndCBleGlzdCBpbiB0aGUgZGlzdHJpYnV0aW9uIGFzIHNoaXBwZWQuICBZb3UgbmVlZCB0bworICBjcmVhdGUgaXQgdG8gcmVmbGVjdCB5b3VyIGxvY2FsIHJlcXVpcmVtZW50LgorICAgIFRvIGdldCBzdGFydGVkLCB5b3UgY2FuIGVpdGhlciBqdXN0IGNyZWF0ZSB0aGlzIGFzIGFuIGVtcHR5IGZpbGUsCisgIG9yIHJ1biBzbm1wY29uZiB0byBoZWxwIHlvdSBjcmVhdGUgb25lLgorICAgIFNlZSB0aGUgc25tcGQuY29uZig1KSBtYW51YWwgcGFnZSBmb3IgZnVydGhlciBkZXRhaWxzLgorCisKKworPGEgbmFtZT0iVGhlX3N5c3RlbV91cHRpbWVfX3N5c1VwVGltZV9fcmV0dXJuZWRfaXNfd3JvbmdfIj4KK1RoZSBzeXN0ZW0gdXB0aW1lIChzeXNVcFRpbWUpIHJldHVybmVkIGlzIHdyb25nIQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBPaCBubyBpdCdzIG5vdC4KKyAgVGhlIGRlZmluZWQgbWVhbmluZyBvZiAnc3lzVXBUaW1lJyBpcworCSJ0aGUgdGltZSAuLi4gc2luY2UgdGhlICpuZXR3b3JrIG1hbmFnZW1lbnQqCisJIHBvcnRpb24gb2YgdGhlIHN5c3RlbSB3YXMgcmUtaW5pdGlhbGl6ZWQuIgorCisgIEluIG90aGVyIHdvcmRzLCB3aGVuIHRoZSBzbm1wIGFnZW50IHdhcyBzdGFydGVkLCBub3Qgd2hlbiB0aGUKKyAgc3lzdGVtIGl0c2VsZiBsYXN0IGJvb3RlZC4gIFRoaXMgbGF0dGVyIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZQorICBpbiB0aGUgSG9zdCBSZXNvdXJjZXMgTUlCIGFzICJob3N0LmhyU3lzdGVtLmhyU3lzdGVtVXBUaW1lIgorICBOb3RlIHRoYXQgZXZlbiBpZiB0aGUgZnVsbCBIb3N0IFJlc291cmNlcyBpcyBub3Qgc3VwcG9ydGVkIG9uCisgIHlvdXIgc3lzdGVtLCBpdCdzIHdvcnRoIGNvbmZpZ3VyaW5nIGluIHRoZSBzeXN0ZW0gcG9ydGlvbiB1c2luZworCisJCSctLXdpdGgtbWliLW1vZHVsZXM9aG9zdC9ocl9zeXN0ZW0nCisKKyAgYW5kIHJlY29tcGlsaW5nLiAgVGhpcyBwYXJ0aWN1bGFyIGdyb3VwIGlzIHJlYXNvbmFibHkgbGlrZWx5IHRvCisgIHdvcmssIGV2ZW4gaWYgc29tZSBvZiB0aGUgb3RoZXIgbW9yZSBzeXN0ZW0tc3BlY2lmaWMgZ3JvdXBzIGRvbid0LgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX3JlZHVjZV90aGVfbWVtb3J5X2Zvb3RwcmludF8iPgorSG93IGNhbiBJIHJlZHVjZSB0aGUgbWVtb3J5IGZvb3RwcmludD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSW4gb3JkZXIgdG8gcmVkdWNlIHRoZSBtZW1vcnkgZm9vdHByaW50IChmb3IgaW5zdGFuY2UsIHRvCisgIGVtYmVkIHRoZSBzbm1wZCBpbnRvIGEgZGV2aWNlKSwgdGhlIGZvbGxvd2luZyBjb25maWd1cmUgb3B0aW9ucworICBjb3VsZCBiZSB1c2VkLgorCisgICctLWRpc2FibGUtZGVidWdnaW5nJworICAgICBUaGlzIHR1cm5zIG9mZiBhbGwgY29tcGlsYXRpb24gb2YgZGVidWdnaW5nIGluZm8uCisKKyAgJy0tZW5hYmxlLW1pbmktYWdlbnQnICctLXdpdGgtb3V0LW1pYi1tb2R1bGVzPWV4YW1wbGVzL3VjZERlbW9QdWJsaWMnCisgICAgIFRoaXMgY3JlYXRlcyBhbiBhZ2VudCB0aGUgbWluaW11bSBhbW91bnQgb2YgTUlCIG1vZHVsZXMKKyAgICAgY29tcGlsZWQgaW4uCisgICAgIE5PVEU6IElmIHlvdSBuZWVkIG1vcmUgTUlCIG1vZHVsZXMgYWRkIHRoZW4gd2l0aCB0aGUgb3B0aW9uCisgICAgICctLXdpdGgtbWliLW1vZHVsZXM9Li4uJyB5b3UgYWRkIG9mIGNvdXJzZSBleHRyYSBtZW1vcnkgZm9vdHByaW50LgorCisgICctLXdpdGgtdHJhbnNwb3J0cz1VRFAnCisgICAgIFRoaXMgb3B0aW9uIHNwZWNpZmllcyB0aGUgdHJhbnNwb3J0cyBkb21haW4geW91IG5lZWQuCisgICAgIEZvciBhIHNpbXBsZSBhZ2VudCBVRFAgc2hvdWxkIGJlIHN1ZmZpY2llbnQuCisKKyAgICctLXdpdGhvdXQta21lbS11c2FnZScKKyAgICAgVGhpcyBjYW4gYmUgdXNlZCBpbiBvcmRlciBub3QgdG8gaW5jbHVkZSB0aGUgY29kZSB0aGF0CisgICAgIG9wZXJhdGVzIG9uIHRoZSAvZGV2L2ttZW0uIFRoaXMgb3B0aW9uIGNhbm5vdCBiZSB1c2VkIHdoZW4KKyAgICAgeW91IGRvIHdhbnQgYSBNSUIgbW9kdWxlIGNvbXBpbGVkIGluIHRoYXQgZGVwZW5kcyBvbiBpdC4KKworICAgJy0td2l0aC1taWJkaXJzPScgYW5kICctLXdpdGgtbWlicz0nCisgICAgIFRoZXNlIG9wdGlvbnMgc3BlY2lmeSBub3QgbG9hZGluZyB0aGUgTUlCIG1vZHVsZXMgZm9yIHRoZQorICAgICBhZ2VudC4gSXQgcmVkdWNlcyB0aGUgbWVtb3J5IGZvb3RwcmludCBvbmx5IGR1cmluZworICAgICBydW50aW1lLgorCisgIE9uIHRvcCBvZiB0aGlzIG9uZSBjb3VsZCBldmVuIGF0dGVtcHQgdG8gZXhjbHVkZSB0aGUgY29tcGxldGUKKyAgTUlCIGxvYWRpbmcgZnVuY3Rpb25hbGl0eSwgYnV0IHRoZXJlIGlzIGN1cnJlbnRseSBubworICBjb25maWd1cmUgb3B0aW9uIGZvciB0aGlzLgorCisgIE9uY2UgdGhlIGFnZW50IChzbm1wZCkgaGFzIGJlZW4gbGlua2VkLCB5b3UgbWlnaHQgYWxzbyB0cnkgcnVubmluZworICAnc3RyaXAgc25tcGQnIHRvIHJlbW92ZSB1bi1uZWNlc3NhcnkgZGVidWcvc3ltYm9sIGluZm9ybWF0aW9uLgorCisKKworPGEgbmFtZT0iQ09NUElMSU5HIj4KK0NPTVBJTElORworPT09PT09PT09CisKKzxhIG5hbWU9Ikhvd19kb19JX2NvbXBpbGVfd2l0aF9fY2NfX2luc3RlYWRfb2ZfX2djY19fIj4KK0hvdyBkbyBJIGNvbXBpbGUgd2l0aCAnY2MnIGluc3RlYWQgb2YgJ2djYyc/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgUnVuIGNvbmZpZ3VyZSB3aXRoIC0td2l0aC1jYz1jYworCisgIE5vdGUgdGhhdCBpZiB5b3UndmUgYWxyZWFkeSBydW4gY29uZmlndXJlIG9uY2UsIGl0IHdpbGwgcHJvYmFibHkgaGF2ZQorICBkZXRlY3RlZCB0aGUgcHJlc2VuY2Ugb2YgJ2djYycsIGNhY2hlZCB0aGlzIGluZm9ybWF0aW9uLCBhbmQgbWF5IHN0aWxsCisgIHRyeSB0byB1c2UgdGhpcyBhbnl3YXkuICAgSW4gd2hpY2ggY2FzZSwgc2ltcGx5IHJlbW92ZSB0aGUgJ2NvbmZpZy5jYWNoZScKKyAgZmlsZSBiZWZvcmUgcmUtcnVubmluZyBjb25maWd1cmUuCisgCisKKworPGEgbmFtZT0iQnV0X2djY19kb2Vzbl90X2NvbXBpbGVfaXRfc3VjY2Vzc2Z1bGx5X29uX215X25ld19Tb2xhcmlzX3N5c3RlbV9fV2h5X25vdF8iPgorQnV0IGdjYyBkb2Vzbid0IGNvbXBpbGUgaXQgc3VjY2Vzc2Z1bGx5IG9uIG15IG5ldyBTb2xhcmlzIHN5c3RlbS4gV2h5IG5vdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBXaGVuZXZlciB5b3UgdXBncmFkZSB0aGUgb3BlcmF0aW5nIHN5c3RlbSB1bmRlciBTb2xhcmlzLCB5b3UgbmVlZCB0bworICByZWluc3RhbGwgZ2NjLCBhbmQgcnVuIHRoZSAnZml4aW5jbHVkZXMnIHNjcmlwdC4gIChUaGlzIGlzIHByb2JhYmx5CisgIGEgc2Vuc2libGUgc3RlcCB0byB0YWtlIHdoZW4geW91IHVwZ3JhZGUgYW55IG9wZXJhdGluZyBzeXN0ZW0pLgorICAgIFVuZGVyIFNvbGFyaXMgMi42LCB0aGVyZSBpcyBhbHNvIGEgYnVnIGluIHRoZSBnY2MgJ2ZpeGluYy5zdjQnIHNjcmlwdC4KKyAgVGhpcyBuZWVkcyBhbiBhZGRpdGlvbmFsIGxpbmUgYXMgZm9sbG93czoKKworKioqIGZpeGluYy5zdnI0LmNsbiAgICAgVGh1IEp1biAxNSAyMjowMzoyOSAxOTk1CistLS0gZml4aW5jLnN2cjQgVHVlIE5vdiAyNSAwOTo0Nzo1NyAxOTk3CisqKioqKioqKioqKioqKioKKyoqKiAxOTEsMTkxICoqKioKKy0tLSAxOTEsMTkyIC0tLS0KKyAgICAgICAgICBzL19fU1REQ19fIC0gMCA9PSAwLyFkZWZpbmVkIChfX1NUUklDVF9BTlNJX18pL2cKKysgICAgICAgICBzL19fU1REQ19fIC0gMCA9PSAxL2RlZmluZWQgKF9fU1RSSUNUX0FOU0lfXykvZworCisgIE5PVEU6IFRoaXMgYXBwZWFycyB0byBoYXZlIGJlZW4gcmVzb2x2ZWQuCisKKworCitPbiBSZWRIYXQgOC4wIG9yIHVwIEkgZ2V0ICIvdXNyL2Jpbi9sZDogY2Fubm90IGZpbmQgLWxlbGYiPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFJlZEhhdCA4LjAgYW5kIHVwIGRvZXNuJ3QgY29tZSB3aXRoIGxpYmVsZiBpbnN0YWxsZWQgKHByb3Blcmx5KSBieQorICBkZWZhdWx0LiAgSW4gb3JkZXIgdG8gYnVpbGQgTmV0LVNOTVAgeW91J2xsIG5lZWQgdGhlIGVsZnV0aWxzLWRldmVsCisgIHJwbSBpbnN0YWxsZWQsIHdoaWNoIHlvdSBjdXJyZW50bHkgZG9uJ3QgaGF2ZS4KKworICBBbHRlcm5hdGl2ZWx5LCB0aGlzIGNvdWxkIHF1aWNrbHkgZml4IHRoZSBwcm9ibGVtIHdpdGhvdXQgcmVxdWlyaW5nCisgIHRoZSAtZGV2ZWwgcnBtIGluc3RhbGxlZCAoYXMgdGhpcyBpcyBvbmUgb2YgdGhlIHRoaW5ncyB0aGUgLWRldmVsIHJwbQorICBkb2VzIHdoZW4geW91IGluc3RhbGwgaXQpOgorCisgICAgY2QgL3Vzci9saWIgOyBsbiAtcyBsaWJlbGYuc28uMSBsaWJlbGYuc28KKworICBOb3RlIHRoYXQgdGhpcyB3aWxsIG9ubHkgYWZmZWN0IHlvdSBpZiB5b3UgYXJlIHRyeWluZyB0byBjb21waWxlIGluCisgIHRoZSBob3N0IHJlc291cmNlcyBtaWIgc3VwcG9ydCwgYXMgaXQnbGwgdHJ5IHRvIHVzZSB0aGUgcnBtIGxpYnJhcmllcworICB3aGljaCB3aWxsIGluIHR1cm4gcmVxdWlyZSB0aGF0IGxpYmVsZi5hIG9yIGxpYmVsZi5zbyBiZSBwcmVzZW50LgorCisKKworPGEgbmFtZT0iSV9tX2dldHRpbmdfYW5fZXJyb3JfX2F1dG9oZWFkZXJfX25vdF9mb3VuZF9fX193aGF0X3Nfd3JvbmdfIj4KK0knbSBnZXR0aW5nIGFuIGVycm9yICJhdXRvaGVhZGVyOiBub3QgZm91bmQiIC0gd2hhdCdzIHdyb25nPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgdXN1YWxseSBhcHBlYXJzIHdoZW4gY29tcGlsaW5nIHRoZSBjdXJyZW50IGRldmVsb3BtZW50IHNvdXJjZQorICB2ZXJzaW9uLCBvYnRhaW5lZCB2aWEgQ1ZTLiAgVW5mb3J0dW5hdGVseSwgdGhlIHRpbWVzdGFtcHMgb24gc29tZSBvZgorICB0aGUgY29uZmlndXJlIGZpbGVzIGFyZSBzdWNoIHRoYXQgbWFrZSBhc3N1bWVzIChtaXN0YWtlbmx5KSB0aGF0IHRoZQorICBjb25maWd1cmUgc2NyaXB0IG5lZWRzIHRvIGJlIHJlLWdlbmVyYXRlZC4KKyAgICBBIHNpbWlsYXIgcHJvYmxlbSBtYXkgYXJpc2UgcmVsYXRpbmcgdG8gJ2F1dG9jb25mJy4KKworICAgIEluIGJvdGggY2FzZXMsIHRoaXMgY2FuIGJlIGNvcnJlY3RlZCBieSBydW5uaW5nIHRoZSBjb21tYW5kCisgICJtYWtlIC1rIHRvdWNoaXQiIGJlZm9yZSBhdHRlbXB0aW5nIHRvIG1ha2UgdGhlIG1haW4gcGFja2FnZS4KKworCisKKzxhIG5hbWU9IldoYXRfYWJvdXRfYV9mYWlsZWRfZGVwZW5kZW5jeV9vbl9fbGliY3J5cHRvX19fX1doZXJlX2Nhbl9JX2dldF90aGF0XyI+CitXaGF0IGFib3V0IGEgZmFpbGVkIGRlcGVuZGVuY3kgb24gJ2xpYmNyeXB0byc/ICBXaGVyZSBjYW4gSSBnZXQgdGhhdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIGlzIHR5cGljYWxseSBlbmNvdW50ZXJlZCB3aGVuIGluc3RhbGxpbmcgYSBMaW51eCBSUE0gb2YKKyAgdGhlIHVjZC1zbm1wIHBhY2thZ2UuICBUaGlzIGxpYnJhcnkgaXMgcGFydCBvZiB0aGUgJ29wZW5zc2wnCisgIHN1aXRlLCBzbyBzaW1wbHkgaW5zdGFsbCB0aGF0IFJQTSBmaXJzdCwgb3IgZG93bmxvYWQgdGhlIHNvdXJjZQorICBmcm9tIGZ0cDovL2Z0cC5vcGVuc3NsLm9yZyBhbmQgY29tcGlsZSBhbmQgaW5zdGFsbCB0aGF0LgorCisgICAgV2hlbiBjb21waWxpbmcge1VDRCxOZXR9LVNOTVAgZnJvbSBzb3VyY2UsIHRoZSBjb25maWd1cmUgc2NyaXB0CisgIHNob3VsZCBkZXRlY3QgdGhhdCB0aGlzIGxpYnJhcnkgaXMgbm90IHByZXNlbnQsIGFuZCB1c2UgYWx0ZXJuYXRpdmUKKyAgYXJyYW5nZW1lbnRzIGZvciBNRDUtYmFzZWQgYXV0aGVudGljYXRpb24uCisKKyAgICBJZiBlbmNyeXB0aW9uIChvciBTSEExLWJhc2VkIGF1dGhlbnRpY2F0aW9uKSBpcyByZXF1aXJlZCwgdGhlbgorICB0aGlzIHR5cGljYWxseSByZXF1aXJlcyBjb21waWxpbmcgZnJvbSBzb3VyY2UuICBVbmRlciBMaW51eCwgYm90aAorICB0aGUgJ29wZW5zc2wnIGFuZCAnb3BlbnNzbC1kZXZlbCcgUlBNcyBzaG91bGQgYmUgaW5zdGFsbGVkLCBhbmQgdGhlCisgICdjb25maWcuY2FjaGUnIGZpbGUgcmVtb3ZlZCBiZWZvcmUgcnVubmluZyAiY29uZmlndXJlIC0td2l0aC1vcGVuc3NsIgorICBhbmQgcmUtY29tcGlsaW5nLgorCisKKworPGEgbmFtZT0iV2h5X2lzX3RoZV9wcm9qZWN0X3dvcmtzcGFjZV9lbXB0eV91bmRlcl9WaXN1YWxfQ19fXyI+CitXaHkgaXMgdGhlIHByb2plY3Qgd29ya3NwYWNlIGVtcHR5IHVuZGVyIFZpc3VhbCBDKys/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgcHJvYmFibHkgZHVlIHRvIHRoZSBkaWZmZXJlbnQgd2F5cyB0aGF0IFVuaXggYW5kIFdpbmRvd3MKKyAgaGFuZGxlIHRleHQgZmlsZSBsaW5lIHRlcm1pbmF0aW9uLiAgT2xkZXIgdmVyc2lvbnMgb2YgV2luWmlwIGRvbid0CisgIGhhbmRsZSB0aGlzIHByb3Blcmx5LCBhbmQgVmlzdWFsIEMrKyBnZXRzIGNvbmZ1c2VkIChwb29yIGRlYXIhKS4KKyAgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFdpblppcCBpcyByZXBvcnRlZCB0byB1bnBhY2sgdGhpcyBjb3JyZWN0bHkuCisKKworCis8YSBuYW1lPSJXaHlfZG9lc19fbWFrZV90ZXN0X19za2lwX2ZpdmVfdGVzdHNfIj4KK1doeSBkb2VzICdtYWtlIHRlc3QnIHNraXAgZml2ZSB0ZXN0cz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBZb3UgbWVhbiBUMDUzYWdlbnR2MXRyYXAsIFQwNTRhZ2VudHYyY3RyYXAsIFQwNTVhZ2VudHYxbWludHJhcCwKKyAgVDA1NmFnZW50djJjbWludHJhcCBhbmQgVDExM2FnZW50eHRyYXA/CisKKyAgICBUaGVzZSB0ZXN0cyByZWx5IHVwb24gZnVuY3Rpb25hbGl0eSBpbiB0aGUgTkVULVNOTVAtRVhBTVBMRVMtTUlCCisgIHdoaWNoIGlzIG5vdCBpbXBsZW1lbnRlZCBpbiB0aGUgZGVmYXVsdCBhZ2VudCBjb25maWd1cmF0aW9uLiAgVG8KKyAgaW5jbHVkZSB0aGVzZSB0ZXN0cywgaW52b2tlIHRoZSBgY29uZmlndXJlYCBzY3JpcHQgdG8gaW5jbHVkZQorICAgICAgJy0td2l0aC1taWItbW9kdWxlcz0iZXhhbXBsZXMvZXhhbXBsZSIuCisKKworCis8YSBuYW1lPSJXaHlfZG9lc19fbWFrZV90ZXN0X19jb21wbGFpbl9hYm91dF9hX3BpZF9maWxlXyI+CitXaHkgZG9lcyAnbWFrZSB0ZXN0JyBjb21wbGFpbiBhYm91dCBhIHBpZCBmaWxlPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFR5cGljYWxseSBpdCBzYXlzIHNvbWV0aGluZyBsaWtlOgorCisgICAgY2F0OiAgY2Fubm90IG9wZW4gL3RtcC9zbm1wLXRlc3QtMS04Njk0LypwaWQqCisKKyAgICBJdCdzIHRyeWluZyB0byB0ZWxsIHlvdSB0aGUgcG9ydCBpcyBibG9ja2VkIC0gdHlwaWNhbGx5IGJlY2F1c2UKKyAgYW5vdGhlciBjb3B5IG9mIHRoZSBhZ2VudCBpcyBzdGlsbCBydW5uaW5nLCBsZWZ0IG92ZXIgZnJvbSBmcm9tIGEKKyAgcHJldmlvdXMgdGVzdGluZyBydW4uCisKKyAgSWYgeW91IHR5cGUgJ3BzIC1lZicgeW91IHNob3VsZCBub3RpY2UgYW4gb3JwaGFuZWQgcHJvY2VzcyBsaWtlOgorCisgIHNubXBkIC1kIC1yIC1VIC1QIC90bXAvc25tcC10ZXN0LTUtMjcyOTUvc25tcGQucGlkLi4uCisKKyAgS2lsbCB0aGlzIHByb2Nlc3MuCisKKyAgVGhpcyBjb3VsZCBiZSBoYXBwZW5pbmcgZm9yIHNldmVyYWwgcmVhc29ucyBpbmNsdWRpbmc6CisKKyAgICAxLiAgWW91IGFyZSB0cnlpbmcgdG8gZG8gY29uY3VycmVudCBydW5zIG9mICdtYWtlIHRlc3QnLgorCisgICAgMi4gIE9uIGEgc2xvdyBtYWNoaW5lLCB0aGUgYWdlbnQgbWlnaHQgYmUgdGFraW5nIHRvbyBsb25nIHRvCisgICAgICBzdGFydCB1cC4gVHJ5IGNoYW5naW5nIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUgU05NUF9TTEVFUAorICAgICAgaW4gdGVzdGluZy9SVU5URVNUUyBmcm9tIDEgdG8gc29tZXRoaW5nIGhpZ2hlciAtIHNheSAzIG9yIDUuCisKKworCis8YSBuYW1lPSJDT0RJTkciPgorQ09ESU5HCis9PT09PT0KKworPGEgbmFtZT0iSG93X2RvX0lfd3JpdGVfQ19jb2RlX3RvX2ludGVncmF0ZV93aXRoX3RoZV9hZ2VudF8iPgorSG93IGRvIEkgd3JpdGUgQyBjb2RlIHRvIGludGVncmF0ZSB3aXRoIHRoZSBhZ2VudD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBBdCB0aGUgbW9tZW50LCB0aGVyZSBhcmUgdGhyZWUgbWV0aG9kcyBmb3IgaW50ZWdyYXRpbmcgZXh0ZXJuYWwgQyBjb2RlCisgIHdpdGhpbiB0aGUgYWdlbnQuCisKKyAgICBUaGUgY29kZSBjYW4gYmUgaW5jbHVkZWQgd2l0aGluIHRoZSBhZ2VudCBpdHNlbGYsIHN0YXRpY2FsbHkgY29uZmlndXJlZAorICBhbmQgbGlua2VkIGluIHdoZW4gdGhlIGFnZW50IGlzIGNvbXBpbGVkLiAgQWx0ZXJuYXRpdmVseSwgd2l0aCB0aGUgNC4yCisgIHJlbGVhc2Ugb2YgdGhlIGFnZW50LCBpdCdzIHBvc3NpYmxlIHRvIGR5bmFtaWNhbGx5IGxvYWQgTUlCIG1vZHVsZXMgb25jZQorICB0aGUgYWdlbnQgaXMgcnVubmluZy4gIEZpbmFsbHksIHRoZSBhZ2VudCBjYW4gYmUgY29uZmlndXJlZCB0byBwYXNzIGNlcnRhaW4KKyAgcG9ydGlvbnMgb2YgdGhlIE1JQiB0cmVlIG9mZiB0byBvbmUgb3IgbW9yZSBzdWJhZ2VudHMuICBTZWUgdGhlIGVhcmxpZXIKKyAgcXVlc3Rpb24gb24gQWdlbnRYLCBTTVVYIGFuZCBwcm94aWVkIFNOTVAgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIEFsbCB0aHJlZSBtZWNoYW5pc21zIHVzZSB0aGUgc2FtZSBtb2R1bGUgQVBJLiAgVGhpcyBpcyBkZXNjcmliZWQgKGluCisgIGV4Y3J1Y2lhdGluZyBkZXRhaWwpIGluIHRoZSBmaWxlIEFHRU5ULnR4dCwgc2hpcHBlZCB3aXRoIHRoZSBzdGFuZGFyZAorICBkaXN0cmlidXRpb24uICBUaGVyZSBpcyBhbHNvIGFuIEhUTUwgdmVyc2lvbiBhY2Nlc3NpYmxlIHZpYSB0aGUgcHJvamVjdAorICB3ZWIgcGFnZS4gIFRoaXMgdGFzayBjYW4gYmUgYWlkZWQgdXNpbmcgdGhlIHRvb2wgJ21pYjJjJyB3aGljaCBnZW5lcmF0ZXMKKyAgbW9zdCBvZiB0aGUgbmVjZXNzYXJ5IHNrZWxldG9uIGNvZGUgZnJvbSB0aGUgZGVzY3JpcHRpb24gaW4gdGhlIE1JQiBmaWxlLgorCisgICAgTm90ZSB0aGF0IHRoZSBVQ0Qgc3VpdGUgZG9lcyBub3QgaW5jbHVkZSBzdXBwb3J0IGZvciBTTVVYIHN1YmFnZW50cy4KKworCisKKzxhIG5hbWU9Ikhvd19kb2VzX3RoZV9hZ2VudF9mZXRjaF90aGVfdmFsdWVfb2ZfYV92YXJpYWJsZV9mcm9tX3RoZV9zeXN0ZW1fIj4KK0hvdyBkb2VzIHRoZSBhZ2VudCBmZXRjaCB0aGUgdmFsdWUgb2YgYSB2YXJpYWJsZSBmcm9tIHRoZSBzeXN0ZW0/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgTXVjaCBvZiB0aGUgaW5mb3JtYXRpb24gaXMgZXh0cmFjdGVkIGZyb20ga2VybmVsIG1lbW9yeSAtIHVzdWFsbHkKKyAgYnkgc2Vla2luZyB0byB0aGUgYXBwcm9wcmlhdGUgbG9jYXRpb24gYW5kIHJlYWRpbmcgdGhlIHN0cnVjdHVyZXMKKyAgZGlyZWN0bHkuCisgICAgU29tZSBzeXN0ZW1zIHByb3ZpZGUgY2xlYW5lciBpbnRlcmZhY2VzIHRvIHN1Y2gga2VybmVsIGluZm9ybWF0aW9uCisgIChpdCB3b3VsZCBiZSBoYXJkIHRvIHRoaW5rIG9mIGEgbGVzcyBjbGVhbiBpbnRlcmZhY2UhKSwgdmlhIGlvY3RsKCkKKyAgY2FsbHMgb3Igc2ltaWxhciBzeXN0ZW0gcm91dGluZXMgYW5kIHRoZXNlIG1lY2hhbmlzbXMgYXJlIHVzdWFsbHkgdXNlZAorICBpbiBwcmVmZXJlbmNlLgorCisKKworPGEgbmFtZT0iTWliX2NfY29tcGxhaW5zX2Fib3V0X2FfbWlzc2luZ19fbWliX3JlZmVyZW5jZV9fX193aGF0X2RvZXNfdGhpc19tZWFuXyI+CitNaWIyYyBjb21wbGFpbnMgYWJvdXQgYSBtaXNzaW5nICJtaWIgcmVmZXJlbmNlIiAtIHdoYXQgZG9lcyB0aGlzIG1lYW4/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgYmFzaWNhbGx5IG1lYW5zIHRoYXQgaXQgaGFzbid0IGxvYWRlZCB0aGUgTUlCIGZpbGUgY29udGFpbmluZworICB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgTUlCIHN1YnRyZWUgeW91J3JlIHRyeWluZyB0byBpbXBsZW1lbnQuICBUaGlzCisgIG1pZ2h0IGJlIGJlY2F1c2UgaXQgaGFzbid0IGJlZW4gaW5zdGFsbGVkLCB0aGUgbmFtZSBpcyB3cm9uZywgb3IKKyAgKG1vc3QgbGlrZWx5KSwgYmVjYXVzZSBpdCBpc24ndCBpbiB0aGUgZGVmYXVsdCBsaXN0LiAgU2VlIHRoZSBNSUJTCisgIHNlY3Rpb24gZm9yIG1vcmUgZGV0YWlscy4KKworCisKKzxhIG5hbWU9Ik1pYl9jX2NvbXBsYWluc19hYm91dF9ub3RfaGF2aW5nX2FfX3ZhbGlkX09JRF9fX193aGF0X2RvZXNfdGhpc19tZWFuXyI+CitNaWIyYyBjb21wbGFpbnMgYWJvdXQgbm90IGhhdmluZyBhICJ2YWxpZCBPSUQiIC0gd2hhdCBkb2VzIHRoaXMgbWVhbj8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBwcm9iYWJseSBtZWFucyB0aGF0IHlvdSBnYXZlIGl0IHRoZSBuYW1lIG9mIGEgTUlCIGZpbGUgKG9yCisgIG1vZHVsZSksIHJhdGhlciB0aGFuIHRoZSBuYW1lIG9mIGFuIG9iamVjdCBkZWZpbmVkIGluIHRoYXQgZmlsZS4KKyAgTWliMmMgZXhwZWN0cyB0aGUgbmFtZSBvZiBhICdyb290JyBvYmplY3QsIGFuZCB3aWxsIGdlbmVyYXRlIGEKKyAgdGVtcGxhdGUgZm9yIHRoZSBzdWItdHJlZSBzdGFydGluZyBmcm9tIHRoZXJlLgorCisgICAgSWYgeW91J3ZlIGdvdCBhIGZpbGUgJ01ZLU1JQi50eHQnLCBkZWZpbmluZyB0aGUgTUlCIG1vZHVsZQorICAnTVktTUlCJyB3aGljaCBjb250YWlucyBhIHN1YnRyZWUgYmFzZWQgb24gdGhlIG9iamVjdCAnbXlNaWInLAorICB0aGVuIHlvdSBzaG91bGQgaW52b2tlIG1pYjJjIGFzCisgICAgICAgICAgICAibWliMmMgLi4uLiBteU1pYiIKKyAgcmF0aGVyIHRoYW4KKyAgICAgICAgICAgICJtaWIyYyAuLi4uIE1ZLU1JQi50eHQiCisgIG9yICAgICAgICAibWliMmMgLi4uLiBNWS1NSUIiCisKKyAgICBOb3RlIHRoYXQgeW91J2xsIHByb2JhYmx5IGFsc28gaGF2ZSB0byBhZGQgeW91ciBNSUIgdG8gdGhlIGxpc3Qgb2YKKyAgTUlCcyB0aGF0IGFyZSBsb2FkZWQgYXV0b21hdGljYWxseSwgaW4gb3JkZXIgZm9yIG1pYjJjIHRvIHJlY29nbmlzZQorICB0aGUgbmFtZSBvZiB0aGlzIG9iamVjdC4gIFNvIHRoZSBjb21tYW5kIHdvdWxkIHR5cGljYWxseSBiZQorICAgICAgICAgICAgIk1JQlM9K01ZLU1JQiBtaWIyYyAuLi4uIG15TWliIgorICBvciAgICAgICAgIk1JQlM9QUxMICAgICBtaWIyYyAuLi4uIG15TWliIgorCisKKworPGEgbmFtZT0iV2h5X2RvZXNuX3RfTWliX2NfbGlrZV90aGVfTUlCX2ZpbGVfSV9tX2dpdmluZ19pdF8iPgorV2h5IGRvZXNuJ3QgTWliMmMgbGlrZSB0aGUgTUlCIGZpbGUgSSdtIGdpdmluZyBpdD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgaXMgdGhlIHNhbWUgcHJvYmxlbSBhcyBhYm92ZS4gIE1pYjJjIHRha2VzIHRoZSBuYW1lIG9mIGEgTUlCCisgIG9iamVjdCwgbm90IHRoZSBuYW1lIG9mIGEgZmlsZSAob3IgYSBNSUIgbW9kdWxlKS4gIFRyeSB1c2luZyB0aGUKKyAgbmFtZSBvZiB0aGUgTU9EVUxFLUlERU5USVRZIGRlZmluaXRpb24uCisKKworCis8YSBuYW1lPSJNaWJfY19pZ25vcmVzX215X01JQl9hbmRfZ2VuZXJhdGVzX2FfcGFpcl9vZl9fbWliX19fX2NvZGVfZmlsZXNfX19XaHlfIj4KK01pYjJjIGlnbm9yZXMgbXkgTUlCIGFuZCBnZW5lcmF0ZXMgYSBwYWlyIG9mICdtaWItMicgY29kZSBmaWxlcy4gIFdoeT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyB0aGUgc2FtZSBwcm9ibGVtIGFzIGFib3ZlIC0gIGdpdmluZyBtaWIyYyB0aGUgbmFtZSBvZgorICB0aGUgZmlsZSBjb250YWluaW5nIHRoZSBNSUIsIHJhdGhlciB0aGFuIGFuIG9iamVjdCB3aXRoaW4gaXQuCisgIEVhcmxpZXIgdmVyc2lvbnMgb2YgbWliMmMgZGlkbid0IGRldGVjdCB0aGlzIHNpdHVhdGlvbiwgYW5kCisgIHJhdGhlciB0aGFuIHJlcG9ydCBhbiBlcnJvciwgaXQgbWVycmlseSBjb25zdHJ1Y3RlZCBhIHRlbXBsYXRlCisgIGZvciBhIGRlZmF1bHQgc3RhcnRpbmcgcG9pbnQgb2YgdGhlIG1pYi0yIG5vZGUuCisKKyAgTW9yZSByZWNlbnQgdmVyc2lvbnMgaXNzdWUgdGhlIGVycm9yIG1lbnRpb25lZCBhYm92ZSwgaW5zdGVhZC4KKworCisKKzxhIG5hbWU9Ik1pYl9jX2NvbXBsYWluc19hYm91dF9fY29uZmlndXJhdGlvbl9maWxlc19fX1doYXRfc190aGlzX2Zvcl8iPgorTWliMmMgY29tcGxhaW5zIGFib3V0ICJjb25maWd1cmF0aW9uIGZpbGVzIi4gV2hhdCdzIHRoaXMgZm9yPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBZb3UndmUgcHJvYmFibHkgdXBncmFkZWQgdG8gdGhlIHY1IG5ldC1zbm1wIHJlbGVhc2UgKGZyb20gdGhlCisgIHY0IHVjZC1zbm1wIHJlbGVhc2UpLiAgVGhpcyBpbnRyb2R1Y2VkIGEgbmV3IGFwcHJvYWNoIHRvIGFnZW50CisgIG1vZHVsZSBkZXZlbG9wbWVudCwgaW5jbHVkaW5nIGEgbnVtYmVyIG9mIGRpZmZlcmVudCAiaGVscGVycyIuCisgIFRoZSBtaWIyYyB0b29sIGNvbWVzIHdpdGggY29uZmlndXJhdGlvbnMgdG8gZ2VuZXJhdGUgY29kZSBmb3IKKyAgbWFueSBvZiB0aGVzZSwgYnV0IHlvdSdsbCBuZWVkIHRvIHNlbGVjdCB3aGljaCBpcyBtb3N0IGNvbnZlbmllbnQKKyAgZm9yIHlvdXIgcGFydGljdWxhciBjYXNlLgorCisKKworPGEgbmFtZT0iV2hpY2hfbWliX2NfY29uZmlndXJhdGlvbl9maWxlX3Nob3VsZF9JX3VzZV8iPgorV2hpY2ggbWliMmMgY29uZmlndXJhdGlvbiBmaWxlIHNob3VsZCBJIHVzZT8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIElmIHRoZSBNSUIgY29udGFpbnMgc2NhbGFyIG9iamVjdHMsIHRoZW4gdXNlIHRoZSBjb25maWcgZmlsZQorICAnbWliMmMuc2NhbGFyLmNvbmYnLiAgIFRoaXMgd2lsbCBnZW5lcmF0ZSB0ZW1wbGF0ZSBoYW5kbGVycyBmb3IKKyAgdGhlc2Ugc2NhbGFyIG9iamVjdHMgKGlnbm9yaW5nIGludGVybmFsIHN0cnVjdHVyYWwgZGVmaW5pdGlvbnMsCisgIHRhYmxlIG9iamVjdHMgYW5kIG5vdGlmaWNhdGlvbnMpLgorCisgICAgSWYgdGhlIE1JQiBjb250YWlucyB0YWJsZXMsIHRoZW4gdGhlcmUgYXJlIG51bWJlciBvZiBwb3NzaWJsZQorICBjaG9pY2VzLiAgVGhlcmUgYXJlIGF0IGxlYXN0IGZvdXIgY29uZmlndXJhdGlvbiBmaWxlcyB0aGF0IHdpbGwKKyAgZ2VuZXJhdGUgdGVtcGxhdGUgaGFuZGxlcnMgZm9yIHRhYmxlIG9iamVjdHMgKGlnbm9yaW5nIGludGVybmFsCisgIGludGVybmFsIHN0cnVjdHVyYWwgZGVmaW5pdGlvbnMsIHNjYWxhciBvYmplY3RzIGFuZCBub3RpZmljYXRpb25zKS4KKyAgV2hpY2ggdG8gdXNlIGRlcGVuZHMgb24gdGhlIGNoYXJhY3RlcmlzdGljcyBvZiB0aGUgdGFibGUgYmVpbmcKKyAgbW9kZWxsZWQgKGluIHBhcnRpY3VsYXIgd2hlcmUgdGhlIGRhdGEgaXMgaGVsZCksIGFuZCBwcmVmZXJlbmNlcworICBhcyB0byB0aGUgc3R5bGUgb2YgY29kZSBzdHJ1Y3R1cmUuCisKKyAgICBUaGUgY29uZmlnIGZpbGUgJ21pYjJjLmNyZWF0ZS1kYXRhc2V0LmNvbmYnIGFzc3VtZXMgdGhhdCB0aGUKKyAgZGF0YSBpcyBoZWxkIGludGVybmFsbHkgd2l0aGluIHRoZSBhZ2VudCwgYW5kIGdlbmVyYXRlcyBhIHNpbmdsZQorICBoYW5kbGVyIHJvdXRpbmUgZm9yIGVhY2ggdGFibGUuICBNb3N0IG9mIHRoZSBwcm9jZXNzaW5nIGlzIGhhbmRsZWQKKyAgaW50ZXJuYWxseSB3aXRoaW4gdGhlIGFnZW50LCBzbyB0aGlzIGhhbmRsZXIgcm91dGluZSBpcyByZWFsbHkKKyAgb25seSBuZWVkZWQgaWYgcGFydGljdWxhciBjb2x1bW4gb2JqZWN0cyByZXF1aXJlIHNwZWNpYWwgcHJvY2Vzc2luZy4KKyAgCisgICAgVGhlIGNvbmZpZyBmaWxlICdtaWIyYy5pdGVyYXRlLmNvbmYnIGlzIGFpbWVkIGF0IHRhYmxlcyB3aGljaAorICBtb2RlbCBkYXRhIGhlbGQgZXh0ZXJuYWwgdG8gdGhlIGFnZW50IChub3QgbmVjZXNzYXJpbHkgb3JkZXJlZAorICBhY2NvcmRpbmcgdG8gdGhlIE1JQiBpbmRleGluZyByZXF1aXJlbWVudHMpLiAgSXQgZ2VuZXJhdGVzIGEgcGFpcgorICBvZiAiaXRlcmF0aW9uIiByb3V0aW5lcywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gc3RlcCB0aHJvdWdoIHRoZQorICB0YWJsZSwgdG8gc2VsZWN0IHRoZSBhcHByb3ByaWF0ZSByb3cgZm9yIGFueSBnaXZlbiByZXF1ZXN0LgorICBUaGlzIHJvdyBpcyB0aGVuIHBhc3NlZCB0byB0aGUgKHNpbmdsZSkgdGFibGUgaGFuZGxlciByb3V0aW5lLAorICB3aGljaCBoYW5kbGVzIHRoZSByZXN0IG9mIHRoZSBwcm9jZXNzaW5nIGZvciBhbGwgb2YgdGhlIGNvbHVtbgorICBvYmplY3RzIChmb3IgYm90aCBHRVQgYW5kIFNFVCByZXF1ZXN0cykuCisKKyAgICBUaGVyZSBpcyBhbHNvIGEgc2ltaWxhciAnbWliMmMuaXRlcmF0ZV9hY2Nlc3MuY29uZicgd2hpY2gKKyAgYnVpbGRzIG9uIHRoaXMsIGJ1dCBnZW5lcmF0ZXMgYSBzZXJpZXMgb2YgaW5kaXZpZHVhbCByb3V0aW5lcworICBmb3IgaGFuZGxpbmcgR0VUIG9yIFNFVCByZXF1ZXN0cyBmb3IgZWFjaCBjb2x1bW4gb2JqZWN0LgorCisgICAgVGhlIGNvbmZpZyBmaWxlICdtaWIyYy5hcnJheS11c2VyLmNvbmYnIGlzIGFnYWluIHByaW1hcmlseQorICBhaW1lZCBhdCBkYXRhIGhlbGQgd2l0aGluIHRoZSBhZ2VudCAoYWx0aG91Z2ggaXQgY2FuIGFsc28gYmUgdXNlZAorICB3aXRoIGV4dGVybmFsIGRhdGEpLiAgSW4gY29udHJhc3QgdG8gdGhlIHNpbmdsZSBoYW5kbGVyIHJvdXRpbmUgb2YKKyAgdGhlIGZpcnN0IHR3byBhcHByb2FjaGVzLCB0aGlzIGdlbmVyYXRlcyBhIHNlcmllcyBvZiBzZXBhcmF0ZQorICB0ZW1wbGF0ZSByb3V0aW5lcyB0byBoYW5kbGUgZGlmZmVyZW50IGFzcGVjdHMgb2YgcHJvY2Vzc2luZyB0aGUKKyAgcmVxdWVzdC4gIEFzIHdpdGggdGhlICdtaWIyYy5jcmVhdGUtZGF0YXNldC5jb25mJyBhcHByb2FjaCwgbXVjaAorICBvZiB0aGUgcHJvY2Vzc2luZyBpcyBoYW5kbGVkIGludGVybmFsbHkuICBNYW55IG9mIHRoZSBnZW5lcmF0ZWQKKyAgcm91dGluZXMgY2FuIGJlIGRlbGV0ZWQgaWYgdGhlIHJlbGV2YW50IG9iamVjdHMgbmVlZCBubyBzcGVjaWFsCisgIHByb2Nlc3NpbmcuCisgCisgICAgVGhlIG1vc3QgcmVjZW50ICdtZmQnIChvciAnTUlCcyBGb3IgRHVtbWllcycpIGNvbmZpZ3VyYXRpb24gdGFrZXMKKyAgdGhpcyBpZGVhIG9mIHNtYWxsIChvZnRlbiBvcHRpb25hbCkgJ3N0dWInIHJvdXRpbmVzIGV2ZW4gZnVydGhlci4KKyAgVGhpcyBnZW5lcmF0ZXMgYSBjb2xsZWN0aW9uIG9mIHNlcGFyYXRlICpmaWxlcyosIGVhY2ggb2Ygd2hpY2gKKyAgaW1wbGVtZW50cyBhIHBhcnRpY3VsYXIgYXNwZWN0IG9mIHRoZSB0YWJsZSBwcm9jZXNzaW5nLiAgVGhlIGlkZWEKKyAgaGVyZSBpcyB0byBoYXZlIGxvdHMgb2YgImJhYnkgc3RlcHMiLCByYXRoZXIgdGhhbiBoYXZlIGFsbCB0aGUKKyAgcHJvY2Vzc2luZyBkZWFsdCB3aXRoIGluIG9uZSBwbGFjZS4KKworICAgIFRoZXJlIGFyZSBhbHNvIHNvbWUgb3RoZXIgJ21pYjJjJyBjb25maWd1cmF0aW9uIGZpbGVzLCBmb3IgbW9yZQorICBzcGVjaWFsaXNlZCByZXF1aXJlbWVudHMgKGUuZy4gZ2VuZXJhdGluZyBub3RpZmljYXRpb25zLCAid2F0Y2hlZCIKKyAgc2NhbGFyIG9iamVjdHMsIG9yIGNvZGUgdGhhdCBpcyBjb21wYXRpYmxlIHdpdGggdGhlIHY0IFVDRCBhZ2VudAorICBBUEkpLCBidXQgdGhlc2UgYXJlIHRoZSBtYWluIGNob2ljZXMgZm9yIG1vc3QgcmVxdWlyZW1lbnRzLgorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX2hhdmVfTWliX2NfZ2VuZXJhdGVfY29kZV9mb3JfYm90aF9zY2FsYXJzX2FuZF90YWJsZXNfIj4KK0hvdyBjYW4gSSBoYXZlIE1pYjJjIGdlbmVyYXRlIGNvZGUgZm9yIGJvdGggc2NhbGFycyBhbmQgdGFibGVzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoZSB2NSBOZXQtU05NUCBtaWIyYyB0b29sIHVzZXMgc2VwYXJhdGUgY29uZmlndXJhdGlvbiBmaWxlcyB0bworICBnZW5lcmF0ZSBjb2RlIGZvciBzY2FsYXIgb2JqZWN0cywgYW5kIGZvciB0YWJsZXMuICBUaGlzIG1lYW5zIHRoYXQKKyAgaXQncyBub3QgcG9zc2libGUgdG8gYXV0b21hdGljYWxseSBnZW5lcmF0ZSBhIHNpbmdsZSBjb2RlIGZpbGUKKyAgdGhhdCBzdXBwb3J0cyBib3RoIHNjYWxhcnMgYW5kIHRhYmxlcy4KKworICAgIEluc3RlYWQsIGl0J3MgbmVjZXNzYXJ5IHRvIGdlbmVyYXRlIHRoZSB0d28gY29kZSBmaWxlcyBzZXBhcmF0ZWx5LAorICBhbmQgdGhlbiBjb21iaW5lIHRoZSB0d28gZmlsZXMgbWFudWFsbHkuICBUaGUgaGFuZGxlciByb3V0aW5lcyBmcm9tCisgIG9uZSBmaWxlIGNhbiBzaW1wbHkgYmUgaW5jbHVkZWQgaW4gdGhlIG90aGVyIHdpdGggbm8gY2hhbmdlcyBuZWVkZWQuCisgIFRoZSBjb3JyZXNwb25kaW5nIHJlZ2lzdHJhdGlvbiBvZiB0aGVzZSBoYW5kbGVycyBjYW4gdGhlbiBiZSBjb3BpZWQKKyAgZnJvbSB0aGUgZmlyc3QgaW5pdGlhbGlzYXRpb24gcm91dGluZSBpbnRvIHRoZSBzZWNvbmQuCisKKworCis8YSBuYW1lPSJBcmVfdGhlcmVfYW55X2V4YW1wbGVzX19vcl9kb2N1bWVudGF0aW9uXyI+CitBcmUgdGhlcmUgYW55IGV4YW1wbGVzLCBvciBkb2N1bWVudGF0aW9uPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgTW9zdCBvZiB0aGUgTUlCIG1vZHVsZXMgc2hpcHBlZCB3aXRoIHRoZSBOZXQtU05NUCBhZ2VudCBzdGlsbAorICB1c2UgdGhlIHY0ICJ0cmFkaXRpb25hbCIgTUlCIG1vZHVsZSBBUEksIGJ1dCBhIGZldyB1c2Ugb25lIG9mIHRoZQorICBuZXdlciB2NSBoZWxwZXItYmFzZWQgaGFuZGxlcnMuCisKKyAgICBUaGUgZGF0YXNldCBoYW5kbGVyIGlzIHVzZWQgaW4gdGhlIHR3byBESVNNQU4tRVZFTlQtTUlCIG1vZHVsZXMKKyAgKGRpc21hbi9tdGVFdmVudFRhYmxlIGFuZCBkaXNtYW4vbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZSksIGFzCisgIHdlbGwgYXMgdGhlICdzbm1wdHJhcGQnIGltcGxlbWVudGF0aW9uIG9mIGxvZ2dpbmcgaW5jb21pbmcgdHJhcHMKKyAgKGFwcHMvbm90aWZpY2F0aW9uX2xvZykKKworICAgIFRoZSBiYXNpYyBpdGVyYXRvciBoYW5kbGVyIGlzIHVzZWQgaW4gYSBudW1iZXIgb2YgbW9kdWxlcywgc3VjaAorICBhcyB0aGUgbGF0ZXN0IFRDUCBhbmQgVURQIHRhYmxlIGltcGxlbWVudGF0aW9ucyAobWliSUkvdGNwVGFibGUgJgorICBtaWJJSS91ZHBUYWJsZSksIFZBQ00gY29udGV4dCBoYW5kbGluZyAobWliSUkvdmFjbV9jb250ZXh0KSBhbmQKKyAgdmFyaW91cyB0YWJsZXMgcmVsYXRpbmcgdG8gYWdlbnQgaW50ZXJuYWxzIChhZ2VudC8qKS4gIFRoZXNlIHNob3cKKyAgYSBudW1iZXIgb2YgZGlmZmVyZW50IGFwcHJvYWNoZXMgdG8gdXNpbmcgdGhlIGl0ZXJhdG9yIGhlbHBlciwgc28KKyAgaXQncyB3b3J0aCBjb21wYXJpbmcgdGhlbS4KKworICAgIFRoZSB0d28gZXhhbXBsZXMvbmV0U25tcEhvc3RzVGFibGUqIG1vZHVsZXMgcHJvdmlkZSBhIGNvbnRyYXN0CisgIGJldHdlZW4gdGhlIGl0ZXJhdG9yIGFuZCBpdGVyYXRvcl9hY2Nlc3MgaGVscGVycy4KKworICAgIFRoZSBOZXQtU05NUCBhZ2VudCBkb2VzIG5vdCBjdXJyZW50bHkgaW5jbHVkZSBhbnkgTUlCIG1vZHVsZXMKKyAgdXNpbmcgdGhlIGFycmF5LXVzZXIgY29udGFpbmVyLWJhc2VkIGhlbHBlci4gIFRoZSBiZXN0IGV4YW1wbGVzCisgIG9mIHRoaXMgYXJlIHRvIGJlIGZvdW5kIGluIHRoZSBuZXQtcG9saWN5IHByb2plY3QuCisgIFNlZSBodHRwOi8vbmV0LXBvbGljeS5zb3VyY2Vmb3JnZS5uZXQvCisKKworCis8YSBuYW1lPSJJX3ZlX2NyZWF0ZWRfYV9uZXdfbW9kdWxlX3dpdGhfX21pYl9jX19idXRfaXRfZG9lc25fdF93b3JrX19fV2h5X25vdF8iPgorSSd2ZSBjcmVhdGVkIGEgbmV3IG1vZHVsZSB3aXRoICdtaWIyYycgYnV0IGl0IGRvZXNuJ3Qgd29yay4gIFdoeSBub3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgUmVtZW1iZXIgdGhhdCAnbWliMmMnIGdlbmVyYXRlcyBhIHRlbXBsYXRlIGZvciB0aGUgTUlCIGltcGxlbWVudGF0aW9uLgorICBJdCBkb2Vzbid0IGZpbGwgaW4gYWxsIHRoZSBkZXRhaWxzIGZvciB5b3UuICBJbiBwYXJ0aWN1bGFyLCBpdCBjYW5ub3QKKyAga25vdyBob3cgdG8gb2J0YWluIHRoZSBpbmZvcm1hdGlvbiBuZWVkZWQgdG8gYW5zd2VyIHBhcnRpY3VsYXIgcXVlcmllcy4KKyAgVGhhdCdzIHRoZSBqb2Igb2YgdGhlIE1JQiBtb2R1bGUgcHJvZ3JhbW1lciAoeW91ISkgLSAgU2VlIHRoZSBwcmV2aW91cworICBxdWVzdGlvbiBmb3IgaG93IHRvIHByb2NlZWQuCisKKyAgICBFc3NlbnRpYWxseSBtaWIyYyBoYW5kbGVzIHRoZSBzeW50YXggb2YgdGhlIE1JQiBpbXBsZW1lbnRhdGlvbiwKKyAgbGVhdmluZyB5b3UgdG8gY29uY2VudHJhdGUgb24gdGhlIHNlbWFudGljcy4KKworCisKKzxhIG5hbWU9IldoZXJlX3Nob3VsZF9JX3B1dF90aGVfZmlsZXNfcHJvZHVjZWRfYnlfX21pYl9jX18iPgorV2hlcmUgc2hvdWxkIEkgcHV0IHRoZSBmaWxlcyBwcm9kdWNlZCBieSAnbWliMmMnPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgSWYgeW91J3JlIHVzaW5nIHRoZSBtYWluIHNvdXJjZSB0cmVlIHRvIGNvbXBpbGUgeW91ciBuZXcgbW9kdWxlLCB0aGVuCisgIHB1dCB0aGVzZSB0d28gZmlsZXMgKG15bWliLltjaF0pIGluIHRoZSBkaXJlY3RvcnkgJ2FnZW50L21pYmdyb3VwJy4KKyAgWW91IHNob3VsZCB0aGVuIHJlLXJ1biBjb25maWd1cmUgdG8gYWRkIGluIHlvdXIgbmV3IG1vZHVsZQorICAoImNvbmZpZ3VyZSAtLXdpdGgtbWliLW1vZHVsZXM9bXltaWIiKSBhbmQgcmVjb21waWxlLgorCisgICAgSWYgeW91J3ZlIGdvdCBhIG51bWJlciBvZiBuZXcgbW9kdWxlcyB0byBhZGQsIGl0IG1pZ2h0IGJlCisgIHNlbnNpYmxlIHRvIHB1dCB0aGVtIGFsbCBpbnRvIGEgc2luZ2xlIHN1YmRpcmVjdG9yeSBvZiAnbWliZ3JvdXAnLgorICBUaGVuIGNyZWF0ZSBhIGhlYWRlciBmaWxlLCBsaXN0aW5nIHRoZSBpbmRpdmlkdWFsIGNvbXBvbmVudHMuCisgIFRoaXMgbWlnaHQgbG9vayBzb21ldGhpbmcgbGlrZToKKworCQljb25maWdfcmVxdWlyZShteW1pYi9teU9iamVjdHMpCisJCWNvbmZpZ19yZXF1aXJlKG15bWliL215VGFibGUpCisJCWNvbmZpZ19yZXF1aXJlKG15bWliL215T3RoZXJUYWJsZSkKKworICBJZiB0aGlzIHdhcyBzYXZlZCBhcyB0aGUgZmlsZSAnbXltaWIuaCcsIHRoZW4gdGhlIHNhbWUgY29uZmlndXJlCisgIGxpbmUgZ2l2ZW4gYWJvdmUsIHdvdWxkIHB1bGwgaW4gYWxsIHRocmVlIG1vZHVsZXMuICBTZWUgdGhlCisgIGN1cnJlbnQgY29udGVudHMgb2YgJ2FnZW50L21pYmdyb3VwJyBmb3IgZXhhbXBsZXMgb2YgdGhpcy4KKworCisKKzxhIG5hbWU9Ik1pYl9jX29ubHlfaGFuZGxlc19hX3NpbmdsZV90YWJsZV9pbl9teV9NSUJfX0hvd19jYW5fSV9maXhfdGhpc18iPgorTWliMmMgb25seSBoYW5kbGVzIGEgc2luZ2xlIHRhYmxlIGluIG15IE1JQi4gSG93IGNhbiBJIGZpeCB0aGlzPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICBUaGlzIHdhcyBhIGJ1ZyBpbiB0aGUgbWliMmMgc2NyaXB0LCB3aGljaCB3YXMgY29ycmVjdGVkIHdpdGgKKyAgdGhlIDQuMiByZWxlYXNlLiAgRWFybGllciB2ZXJzaW9ucyBjYW4gYmUgZml4ZWQgYnkgYXBwbHlpbmcgdGhlCisgIGZvbGxvd2luZyBwYXRjaDoKKworCSQgZGlmZiAtdSBtaWIyYy5jbG4gbWliMmMKKwktLS0gbWliMmMuY2xuICAgV2VkIE5vdiAyOSAxNToxMjo0NyAyMDAwCisJKysrIG1pYjJjICAgICAgIFdlZCBOb3YgMjkgMTU6MTM6MTggMjAwMAorCUBAIC0xMzIsNiArMTMyLDYgQEAKKwkgIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisJIGZvcmVhY2ggJHZ0YWJsZSAoQHRhYmxlX2xpc3QpIHsKKwkgICAgIGZvcmVhY2ggJHB0YWJsZSAoQHByb2Nlc3N0YWJsZSkgeworCS0gICAgICAgJHZhcmlhYmxlc3skcHRhYmxlfXsncHJvY2Vzc2VkJ30gPSAKKwkrICAgICAgICR2YXJpYWJsZXN7JHB0YWJsZX17J3Byb2Nlc3NlZCd9IC49IAorCSAgICAgICAgICAgIChldmFsICJcIiR2YXJpYWJsZXN7JHB0YWJsZX17J2NvZGUnfVwiIikgLiAiXG5cbiI7CisJICAgICB9CisKKworCis8YSBuYW1lPSJIb3dfY2FuX0lfc3VwcG9ydF9hX2xhcmdlX3RhYmxlX193aXRoX21vcmVfdGhhbl9fX19fY29sdW1uX29iamVjdHNfIj4KK0hvdyBjYW4gSSBzdXBwb3J0IGEgbGFyZ2UgdGFibGUsIHdpdGggbW9yZSB0aGFuIDI1NiBjb2x1bW4gb2JqZWN0cz8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgVGhpcyBpcyBhIHByb2JsZW0gKGF0IGxlYXN0IGFwcGFyZW50bHkpIHdpdGggdGhlIHY0IFVDRCBtb2R1bGUKKyAgQVBJLCB3aGljaCB1c2VzIGEgIm1hZ2ljIG51bWJlciIgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB0aGUgdmFyaW91cworICBjb2x1bW4gb2JqZWN0cyBpbXBsZW1lbnRlZCBieSBhIGNvbW1vbiB2YXJpYWJsZSBoYW5kbGluZyByb3V0aW5lLgorICBTaW5jZSB0aGlzIGZpZWxkIGlzIGRlZmluZWQgYXMgYW4gdW5zaWduZWQgY2hhcmFjdGVyLCBpdCBjYW4gb25seQorICB0YWtlIHZhbHVlcyAwLTI1NS4gICBTbyBpdCB3b3VsZCBhcHBlYXIgdGhhdCB0aGUgYWdlbnQgY2Fubm90CisgIHN1cHBvcnQgdGFibGVzIChvciBzY2FsYXIgZ3JvdXBzKSB3aXRoIG1vcmUgdGhhbiAyNTYgb2JqZWN0cywKKyAgc2luY2UgdGhpcyB3b3VsZCBzdGFydCB0byBkdXBsaWNhdGUgdGhlc2UgbWFnaWMgbnVtYmVycy4KKworICAgIEhvd2V2ZXIsIHRoZSBhZ2VudCBkb2Vzbid0IGFjdHVhbGx5IGNhcmUgd2hpY2ggcm91dGluZSBpbXBsZW1lbnRzCisgIGEgZ2l2ZW4gb2JqZWN0LCBhbmQgbWFnaWMgbnVtYmVycyBvbmx5IG5lZWQgdG8gYmUgdW5pcXVlIHdpdGhpbiBhCisgIHNpbmdsZSB2YXJpYWJsZSBoYW5kbGluZyByb3V0aW5lLiAgU28gaXQgaXMgYWN0dWFsbHkgcGVyZmVjdGx5CisgIHBvc3NpYmxlIHRvIGltcGxlbWVudCBhIGxhcmdlciB0YWJsZSBieSBzcGxpdHRpbmcgaXQgYmV0d2VlbiB0d28KKyAgKG9yIG1vcmUpIHZhcmlhYmxlIGhhbmRsaW5nIHJvdXRpbmVzLiAgVGhlc2UgY2FuIHRoZW4gcmUtdXNlIHRoZQorICBtYWdpYyBudW1iZXJzIHF1aXRlIHNhZmVseToKKworICAgIHN0cnVjdCB2YXJpYWJsZTEgW10gPSB7CisgICAgICAge01BR0lDMSwgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLCB2YXJfbXlmaXJzdCwgIDEsIHsgIDF9fSwKKyAgICAgICB7TUFHSUMyLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsIHZhcl9teWZpcnN0LCAgMSwgeyAgMn19LAorICAgIAkJOgorICAgICAgIHtNQUdJQzI1NSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwgdmFyX215Zmlyc3QsICAxLCB7MjU1fX0sCisgICAgICAge01BR0lDMSwgICBBU05fSU5URUdFUiwgTkVUU05NUF9PTERBUElfUldSSVRFLCB2YXJfbXlzZWNvbmQsIDEsIHsyNTZ9fSwKKyAgICAgICB7TUFHSUMyLCAgIEFTTl9JTlRFR0VSLCBORVRTTk1QX09MREFQSV9SV1JJVEUsIHZhcl9teXNlY29uZCwgMSwgezI1N319LAorICAgIAkJOgorICAgICAgIHtNQUdJQzI1NSwgQVNOX0lOVEVHRVIsIE5FVFNOTVBfT0xEQVBJX1JXUklURSwgdmFyX215c2Vjb25kLCAxLCB7NTEwfX0KKyAgICB9OworCisgIEFsbCB0aGF0IG1hdHRlcnMgaXMgdGhhdCBhIGdpdmVuIG1hZ2ljIG51bWJlciBpc24ndCByZS11c2VkIHdpdGhpbgorICB0aGUgc2FtZSB2YXJpYWJsZSBoYW5kbGluZyByb3V0aW5lLiAgVGhlIHY1IHRhYmxlIGhhbmRsZXJzIHR5cGljYWxseQorICB1c2UgYW4gaW50ZWdlciB2YXJpYWJsZSBmb3IgaG9sZGluZyBjb2x1bW4gaW5mb3JtYXRpb24sIHNvIGFyZW4ndAorICBzdWJqZWN0IHRvIHRoZSBzYW1lIGxpbWl0YXRpb25zLgorCisgICAgVGhvdWdoIEknZCBoYXZlIHRvIHF1ZXN0aW9uIHdoZXRoZXIgaGF2aW5nIHN1Y2ggYSB3aWRlIHRhYmxlIGlzCisgIG5lY2Vzc2FyaWx5IGEgcGFydGljdWxhcmx5IGdvb2QgZGVzaWduIHN0cmF0ZWd5IQorCisKKworPGEgbmFtZT0iSG93X2Nhbl9JX2dldF90aGVfYWdlbnRfdG9fZ2VuZXJhdGVfYV90cmFwX19vcl9pbmZvcm1fXyI+CitIb3cgY2FuIEkgZ2V0IHRoZSBhZ2VudCB0byBnZW5lcmF0ZSBhIHRyYXAgKG9yIGluZm9ybSk/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIEdlbmVyYXRpbmcgYSB0cmFwIGlzIHJlYXNvbmFibHkgc2ltcGxlIC0ganVzdCBjYWxsIG9uZSBvZiB0aGUKKyAgdHJhcCBBUEkgcm91dGluZXMgJ3NlbmRfZWFzeV90cmFwKCknIG9yICdzZW5kX3YydHJhcCcgd2l0aCB0aGUKKyAgcmVsZXZhbnQgaW5mb3JtYXRpb24gKGdlbmVyaWMgYW5kIHNwZWNpZmljIHRyYXAgdmFsdWVzLCBvciBhCisgIHZhcmJpbmQgbGlzdCByZXNwZWN0aXZlbHkpLiAgU2VlIHRoZSAnc25tcF90cmFwX2FwaSgzKScgbWFuIHBhZ2UKKyAgZm9yIGRldGFpbHMuCisKKyAgICBUaGUgJ21pYjJjLm5vdGlmeS5jb25mJyBjb25maWd1cmF0aW9uIGZpbGUgY2FuIGJlIHVzZWQgdG8KKyAgY29uc3RydWN0IGEgc3VpdGFibGUgdGVtcGxhdGUgcm91dGluZSBmb3IgZ2VuZXJhdGluZyBhIHRyYXAsCisgIGluY2x1ZGluZyBidWlsZGluZyB0aGUgdmFyaWFibGUgbGlzdCBmcm9tIHRoZSBNSUIgdHJhcAorICBkZWZpbml0aW9uLiAgVGhlc2UgdmFyaWFibGVzIGNhbiB0aGVuIGJlIGdpdmVuIHN1aXRhYmxlIHZhbHVlcywKKyAgYmVmb3JlIGludm9raW5nIHRoZSAnc2VuZF92MnRyYXAnIGNhbGwgdG8gYWN0dWFsbHkgc2VuZCB0aGUgdHJhcC4KKworICAgIE5vdGUgdGhhdCB0aGVzZSBBUElzIGFyZSBvbmx5IGF2YWlsYWJsZSB3aXRoaW4gdGhlIGFnZW50IChvcgorICBzdWJhZ2VudHMpLCBhbmQgYXJlIG5vdCBhdmFpbGFibGUgdG8gc3RhbmQtYWxvbmUgYXBwbGljYXRpb25zLgorICBUaGUgY29kZSBmb3IgJ3NubXB0cmFwJyBzaG93cyBhbiBhcHByb2FjaCB0byB1c2UgaW4gc3VjaCBhIGNhc2UuCisKKyAgICBEZXRlcm1pbmluZyBfd2hlbl8gdG8gZ2VuZXJhdGUgdGhlIHRyYXAgKGVpdGhlciBkaXJlY3RseSBvcgorICB2aWEgdGhlIG1pYjJjLWdlbmVyYXRlZCByb3V0aW5lKSBpcyBvZnRlbiBoYXJkZXIuICBJZiB0aGUgdHJhcAorICBpcyBnZW5lcmF0ZWQgaW4gcmVzcG9uc2UgdG8gc29tZSBhY3Rpb24gd2l0aGluIHRoZSBhZ2VudCwgKGUuZy4KKyAgYXMgdGhlIHJlc3VsdCBvZiBhIFNFVCksIHRoZW4gdGhpcyBpc24ndCB0b28gbXVjaCBvZiBhIHByb2JsZW0uCisKKyAgICBCdXQgaWYgdGhlIHRyYXAgaXMgaW50ZW5kZWQgdG8gcmVwb3J0IG9uIGEgY2hhbmdlIG9mIHN0YXR1cworICAoZS5nLiBhIG5ldHdvcmsgaW50ZXJmYWNlIGdvaW5nIHVwIG9yIGRvd24sIG9yIGEgZGlzayBmaWxsaW5nIHVwKSwKKyAgdGhlbiBhY3R1YWxseSBkZXRlY3RpbmcgdGhpcyBpcyBub24tdHJpdmlhbC4gICBJdCdzIG5lY2Vzc2FyeSB0bworICBwb2xsIHRoZSB2YWx1ZShzKSBvbiBhIHJlZ3VsYXIgYmFzaXMsIHNhdmUgdGhlIHJlc3VsdHMgYW5kIGNvbXBhcmUKKyAgdGhlbSB3aXRoIHRoZSBuZXcgdmFsdWVzIHRoZSBuZXh0IHRpbWUgcm91bmQuCisKKyAgICBXaXRoIHRoZSB2NCBVQ0QgYWdlbnQsIHRoaXMgd291bGQgaGF2ZSB0byBiZSBkb25lIG1hbnVhbGx5LAorICB1c2luZyB0aGUgcm91dGluZXMgZG9jdW1lbnRlZCBpbiAnc25tcF9hbGFybSgzKScuICBUaGUgdjUgTmV0LVNOTVAKKyAgYWdlbnQgaGFzIGltcGxlbWVudGVkIHRoZSBEaXN0cmlidXRlZCBNYW5hZ2VtZW50IEV2ZW50IE1JQiwgd2hpY2gKKyAgcHJvdmlkZXMgdGhpcyBmdW5jdGlvbmFsaXR5IGluIGEgZmxleGlibGUsIHN0YW5kYXJkaXNlZCBtYW5uZXIuCisgIFNlZSB0aGUgJ3NubXBkLmNvbmYoNSknIG1hbiBwYWdlICh1bmRlciBESVNNQU4tRVZFTlQtTUlCKSBmb3IKKyAgZGV0YWlscyAoaW5jbHVkaW5nIHRoZSBuZWVkIGZvciBhbiAnYWdlbnRTZWNOYW1lJyBzZXR0aW5nKS4KKyAgCisKKworPGEgbmFtZT0iV2hhdF9pZl9JX21fdXNpbmdfYW5fQWdlbnRYX3N1Yl9hZ2VudF9pbnN0ZWFkXyI+CitXaGF0IGlmIEknbSB1c2luZyBhbiBBZ2VudFggc3ViLWFnZW50IGluc3RlYWQ/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoYXQgZG9lc24ndCBtYXR0ZXIgLSB0aGUgcm91dGluZXMgZGVzY3JpYmVkIGluICdzbm1wX3RyYXBfYXBpKDMpJworICBjYW4gc3RpbGwgYmUgdXNlZCwgYW5kIHRoZSBzdWJhZ2VudCB3aWxsIGRvIHRoZSBSaWdodCBUaGluZy4KKyAgCisgIE9uZSBvZiB0aGUgb3JpZ2luYWwgZGVzaWduIGFpbXMgb2YgdGhlIEFnZW50WCBzdXBwb3J0IHdhcyB0aGF0IHRoaXMKKyAgc2hvdWxkIGJlIHRyYW5zcGFyZW50IHRvIGEgTUlCIG1vZHVsZSBpbXBsZW1lbnRlci4gIFRoZSBhZ2VudC1tb2R1bGUKKyAgaW50ZXJmYWNlIHNob3VsZCBiZSBpbmRlcGVuZGVudCBvZiB0aGUgcHJvdG9jb2wgdXNlZCB0byByZWNlaXZlIHRoZQorICBvcmlnaW5hbCByZXF1ZXN0LiAgU28gdGhlIGV4YWN0IHNhbWUgTUlCIG1vZHVsZSBjb2RlIGNvdWxkIGJlIHVzZWQKKyAgd2l0aGluIGEgdHJhZGl0aW9uYWwgU05NUC1vbmx5IGFnZW50LCBvciBhbiBBZ2VudFggc3ViYWdlbnQsIHdpdGggbm8KKyAgY2hhbmdlcyBuZWVkZWQuCisgICAgSW4gZmFjdCwgdGhlIG1haW4gYWdlbnQgc3VwcGxpZWQgYXMgcGFydCBvZiB0aGUgcGFja2FnZSBjYW4gaW5kZWVkCisgIGJlIHJ1biBhcyBhbiBTTk1QIGFnZW50IG9yIGFuIEFnZW50WCBzdWJhZ2VudCwgc2ltcGx5IGJhc2VkIG9uIGNvbW1hbmQKKyAgbGluZSBmbGFncyAob3Igc2ltaWxhciBjb25maWd1cmF0aW9uIG9wdGlvbnMpLgorCisKKworPGEgbmFtZT0iTUlTQyI+CitNSVNDCis9PT09PT0KKworPGEgbmFtZT0iV2h5X2FyZV9wYWNrZXRzX3JlcXVlc3RpbmdfdGhlX3NhbWVfaW5mb3JtYXRpb25fbGFyZ2VyX3dpdGhfVUNfRGF2aXNfU05NUF8iPgorV2h5IGFyZSBwYWNrZXRzIHJlcXVlc3RpbmcgdGhlIHNhbWUgaW5mb3JtYXRpb24gbGFyZ2VyIHdpdGggVUMtRGF2aXMgU05NUD8KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgIFRoaXMgc2hvdWxkbid0IGhhcHBlbiB3aXRoIHZlcnNpb24gNC4yIG9yIGxhdGVyLCBidXQgZm9yIG9sZGVyCisgIHZlcnNpb24gdGhlIGZvbGxvd2luZyBzdGlsbCBhcHBsaWVzOgorCisgICAgU29tZSB1c2VycyBub3RlIHRoYXQgVUNELVNOTVAgYXBwbGljYXRpb25zIGFsd2F5cyBnZW5lcmF0ZSBsYXJnZXIgUERVcworICB0aGFuIG90aGVyIFNOTVAgcGFja2FnZXMsIGV2ZW4gaWYgdGhlIGluZm9ybWF0aW9uIHJlcXVlc3RlZCBpcyB0aGUgc2FtZS4KKyAgRnVydGhlciwgdGhlcmUgYXJlIHNvbWUgYWdlbnRzIHRoYXQgcmVmdXNlIFBEVXMgZnJvbSBVQ0QtU05NUCBhcHBsaWNhdGlvbnMKKyAgYnV0IGFjY2VwdCBQRFVzIGZyb20gb3RoZXIgYXBwbGljYXRpb25zLgorCisgIFVDRC1TTk1QIGlzIGJhc2VkIG9uIHRoZSBDTVUgY29kZSBmcm9tIGEgbG9uZyB0aW1lIGFnbyB3aGljaCBlbmNvZGVkIHRoaW5ncworICB1c2luZyB0aGUgbG9uZyBmb3JtIG9mIGxlbmd0aCBlbmNvZGluZy4gIFNvbWUgYWdlbnRzIHVzZSB0aGUgc2hvcnQgZm9ybQorICBvZiBsZW5ndGggZW5jb2Rpbmcgb25seSwgYW5kIGRvIG5vdCB1bmRlcnN0YW5kIHRoZSBsb25nIGZvcm0uCisKKyAgICBUaGlzIHNob3VsZCBub3QgYmUgYSBwcm9ibGVtIHdpdGggVUNEIHY0LjIgb3IgaGlnaGVyLCBvciB0aGUgTmV0LVNOTVAKKyAgcmVsZWFzZXMuCisKKworCis8YSBuYW1lPSJXaGF0X0FTTl9fX3BhcnNlcl9pc191c2VkXyI+CitXaGF0IEFTTi4xIHBhcnNlciBpcyB1c2VkPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgIFRoZSBwYXJzZXIgdXNlZCBieSBib3RoIHRoZSBhZ2VudCBhbmQgY2xpZW50IHByb2dyYW1zIGlzIGNvZGVkIGJ5IGhhbmQuCisgIFRoaXMgcGFyc2VyIGhhcyByZWNlbnRseSBiZWVuIHJlLXZhbXBlZCB0byBhbGxvdyBjb250cm9sIG9mIHdoaWNoIG9mIAorICB0aGUgYXZhaWxhYmxlIE1JQnMgc2hvdWxkIGJlIGluY2x1ZGVkLCBhbmQgdG8gaGFuZGxlIGR1cGxpY2F0ZSBvYmplY3QKKyAgc3ViaWRlbnRpZmllcnMuCisgICAgVGhlIHNvdXJjZSBjb2RlIGNhbiBiZSBmb3VuZCBpbiB0aGUgc25tcGxpYiBkaXJlY3RvcnkgKGluICdwYXJzZS5jJyksCisgIGFuZCB0aGUgcGFyc2VyIGlzIHVzdWFsbHkgYnVuZGxlZCBpbnRvIHRoZSBsaWJyYXJ5ICdsaWJzbm1wLmEnCisKKyAgICBOb3RlIHRoYXQgdGhlIHBhcnNlciBhdHRlbXB0cyB0byBiZSBmYWlybHkgZm9yZ2l2aW5nIG9mIHNvbWUgY29tbW9uCisgIGVycm9ycyBhbmQgaW5jb21wYXRpYmlsaXRpZXMgaW4gTUlCIGZpbGVzLiAgVGhlIE5ldC1TTk1QIHRvb2xzIGFjY2VwdGluZworICBhIE1JQiBmaWxlIHdpdGhvdXQgY29tcGxhaW50IGRvZXMgKm5vdCogaW1wbHkgdGhhdCB0aGUgTUlCIGlzIHN0cmljdGx5CisgIGNvcnJlY3QuCisgICAgQ2VydGFpbiBNSUJzIG1heSBuZWVkIHNvbWUgYW1lbmRtZW50cyB0byBhbGxvdyB0aGVtIHRvIGJlIHJlYWQKKyAgY29ycmVjdGx5IGJ5IHRoZSBwYXJzZXIuICBDb250YWN0IHRoZSBjb2RlcnMnIGxpc3QgZm9yIGFkdmljZS4KKworCisKKzxhIG5hbWU9IldoYXRfaXNfdGhlX09mZmljaWFsX1Nsb2dhbl9vZl90aGVfbmV0X3NubXBfY29kZXJzX2xpc3RfIj4KK1doYXQgaXMgdGhlIE9mZmljaWFsIFNsb2dhbiBvZiB0aGUgbmV0LXNubXAtY29kZXJzIGxpc3Q/CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgIlRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uIGlzIG5vbi1vYnZpb3VzIGFuZCBtYXkgbmVlZCB0byBiZSBpbXByb3ZlZC4iCisJKHdpdGggdGhhbmtzIHRvIFJvaGl0IER1YmUpCisKKyAgQW5kIGFuIGFsdGVybmF0ZSwgYWRkZWQgMjYtQXByLTIwMDA6CisgIAorICAiSW4gdGhlb3J5LCBpdCBzaG91bGRuJ3QgYmUgdGhhdCBoYXJkLCBidXQgaXQganVzdCBuZWVkcyB0byBiZSBkb25lLiIKKworCisKKzwvcHJlPjxocj4KK0xhc3QgbW9kaWZpZWQ6IFNhdCBNYXIgMjAgMjE6NTM6MzkgMjAwNApkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9pbnN0YWxsZXIvQWRkMlBhdGgubnNpIGIvd2luMzIvZGlzdC9pbnN0YWxsZXIvQWRkMlBhdGgubnNpCmluZGV4IDNmOGQ2NDAuLjEwNGRjMTYgMTAwNjQ0Ci0tLSBhL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL0FkZDJQYXRoLm5zaQorKysgYi93aW4zMi9kaXN0L2luc3RhbGxlci9BZGQyUGF0aC5uc2kKQEAgLTExLDExICsxMSwzMiBAQAogICBQdXNoICQxCiAgIFB1c2ggJDIKICAgUHVzaCAkMworICBQdXNoICQ0CisgIFB1c2ggJDUKIAogICAjIGRvbid0IGFkZCBpZiB0aGUgcGF0aCBkb2Vzbid0IGV4aXN0CiAgIElmRmlsZUV4aXN0cyAkMCAiIiBBZGRUb1BhdGhfZG9uZQotCisgIAogICBSZWFkRW52U3RyICQxIFBBVEgKKyAgCisgICMgSWYgbGVuZ3RoIG9mIFBBVEggcmV0dXJuZWQgaXMgMCwgd2UgY291bGRuJ3QgcmVhZCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgKHVubGlrZWx5KSBvcgorICAjIGl0J3MgZW1wdHkgYmVjYXVzZSBpdCdzID4gMTAyNCBjaGFyYWN0ZXJzIGxvbmcuICBOU0lTIG9ubHkgc3VwcG9ydHMgdmFyaWFibGVzIHVwIHRvIDEwMjQgCisgICMgY2hhcmFjdGVycyB1bmxlc3Mgd2UncmUgdXNpbmcgdGhlIDgxOTIgbGVuZ3RoIHZlcnNpb24sIHdoaWNoIHdlIGFyZSBub3QuICAKKyAgIyBOb3RlOiAgT24gWFAgKGF0IGxlYXN0KSwgdGhlIHN0cmluZyByZWFkIHVzaW5nIFJlYWRFbnZTdHIgaXMgc2hvcnRlciB0aGFuIHdlIHdvdWxkIGV4cGVjdC4KKyAgIyBEdXJpbmcgdGVzdGluZywgd2hlbiB0aGUgUEFUSCB3YXMgMTAyMCBjaGFyYWN0ZXJzIGxvbmcsIFN0ckxlbiBvZiB0aGUgcGF0aCByZXR1cm5lZCA5ODQuCisgICMgV2hlbiBtYW5pcHVsYXRpbmcgdGhlIHBhdGggb24gWFAsIHVzZSB0aGUgcmVnaXN0cnkgaW5zdGVhZC4KKyAgU3RyTGVuICQ0ICIkMSIKKyAgIyBNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiUEFUSCBsZW5ndGg6ICQ0Li4uIgorICBJbnRDbXAgJDQgMCBQYXRoX1Rvb19TaG9ydDEKKyAgR290byBBZGRUb1BhdGhfQ29udDEKKyAgCisgIFBhdGhfVG9vX1Nob3J0MToKKyAgIyBQQVRIIGlzIGVtcHR5LiAgRGlzcGxheSB3YXJuaW5nLgorICBNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiWW91ciBQQVRIIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSByZWFkLCBwcm9iYWJseSBiZWNhdXNlIGl0IGlzIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycyAoaW5zdGFsbGVyIGxpbWl0YXRpb24pLiAgUGxlYXNlIGFkZCB0aGUgZm9sZGVyICQwIHRvIHlvdXIgUEFUSCB1c2luZyB0aGUgU3lzdGVtIENvbnRyb2wgUGFuZWwuIgorICBnb3RvIEFkZFRvUGF0aF9kb25lCisKKyAgQWRkVG9QYXRoX0NvbnQxOgorICAKICAgUHVzaCAiJDE7IgogICBQdXNoICIkMDsiCiAgIENhbGwgU3RyU3RyCkBAIC01NiwxNyArNzcsNDEgQEAKICAgQWRkVG9QYXRoX05UOgogICAgIDtSZWFkUmVnU3RyICQxIEhLQ1UgIkVudmlyb25tZW50IiAiUEFUSCIKICAgICBSZWFkUmVnU3RyICQxIEhLTE0gJ1NZU1RFTVxDdXJyZW50Q29udHJvbFNldFxDb250cm9sXFNlc3Npb24gTWFuYWdlclxFbnZpcm9ubWVudCcgIlBBVEgiCisKICAgICBTdHJDcHkgJDIgJDEgMSAtMSAjIGNvcHkgbGFzdCBjaGFyCiAgICAgU3RyQ21wICQyICI7IiAwICsyICMgaWYgbGFzdCBjaGFyID09IDsKICAgICAgIFN0ckNweSAkMSAkMSAtMSAjIHJlbW92ZSBsYXN0IGNoYXIKLSAgICBTdHJDbXAgJDEgIiIgQWRkVG9QYXRoX05UZG9JdAotICAgICAgU3RyQ3B5ICQwICIkMTskMCIKLSAgICBBZGRUb1BhdGhfTlRkb0l0OgotICAgICAgO1dyaXRlUmVnRXhwYW5kU3RyIEhLQ1UgIkVudmlyb25tZW50IiAiUEFUSCIgJDAKLSAgICAgIFdyaXRlUmVnRXhwYW5kU3RyIEhLTE0gJ1NZU1RFTVxDdXJyZW50Q29udHJvbFNldFxDb250cm9sXFNlc3Npb24gTWFuYWdlclxFbnZpcm9ubWVudCcgIlBBVEgiICQwCi0gICAgICBTZW5kTWVzc2FnZSAke0hXTkRfQlJPQURDQVNUfSAke1dNX1dJTklOSUNIQU5HRX0gMCAiU1RSOkVudmlyb25tZW50IiAvVElNRU9VVD01MDAwCisKKyAgICAjIE1ha2Ugc3VyZSBvbGQgUEFUSCBpcyBub3QgZW1wdHkuLgorICAgIFN0ckxlbiAkNCAiJDEiCisgICAgI01lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJSZWcgUEFUSCBsZW5ndGg6ICQ0Li4uIgorICAgIEludENtcCAkNCAwIFBhdGhfVG9vX1Nob3J0MgorICAgIEdvdG8gQWRkVG9QYXRoX0NvbnQyCisgICAgUGF0aF9Ub29fU2hvcnQyOgorICAgICMgUEFUSCBpcyBlbXB0eS4gIERpc3BsYXkgd2FybmluZy4KKyAgICBNZXNzYWdlQm94IE1CX0lDT05JTkZPUk1BVElPTnxNQl9PSyAiWW91ciBQQVRIIHZhcmlhYmxlIGNvdWxkIG5vdCBiZSByZWFkLCBwcm9iYWJseSBiZWNhdXNlIGl0IGlzIGxvbmdlciB0aGFuIDEwMjQgY2hhcmFjdGVycyAoaW5zdGFsbGVyIGxpbWl0YXRpb24pLiAgUGxlYXNlIGFkZCB0aGUgZm9sZGVyICQwIHRvIHlvdXIgUEFUSCB1c2luZyB0aGUgU3lzdGVtIENvbnRyb2wgUGFuZWwuIgorICAgIGdvdG8gQWRkVG9QYXRoX2RvbmUKKyAgICBBZGRUb1BhdGhfQ29udDI6CisKKyAgICAjIE1ha2Ugc3VyZSBuZXcgUEFUSCB3b24ndCBiZSB0b28gbG9uZy4KKyAgICBTdHJMZW4gJDUgIiQwIgorICAgIEludE9wICQ0ICQ0ICsgJDUKKyAgICBJbnRDbXAgJDQgMTAyMiAiIiAiIiBQYXRoX1Rvb19Mb25nMworICAgIEdvdG8gQWRkVG9QYXRoX0NvbnQzCisgICAgUGF0aF9Ub29fTG9uZzM6CisgICAgTWVzc2FnZUJveCBNQl9JQ09OSU5GT1JNQVRJT058TUJfT0sgIllvdXIgbmV3IFBBVEggdmFyaWFibGUgY291bGQgbm90IGJlIHNldCBhcyBpdCB3b3VsZCBiZSBncmVhdGVyIHRoYW4gMTAyNCBjaGFyYWN0ZXJzIChpbnN0YWxsZXIgbGltaXRhdGlvbikuICBQbGVhc2UgYWRkIHRoZSBmb2xkZXIgJDAgdG8geW91ciBQQVRIIHVzaW5nIHRoZSBTeXN0ZW0gQ29udHJvbCBQYW5lbC4iCisgICAgZ290byBBZGRUb1BhdGhfZG9uZQorICAgIEFkZFRvUGF0aF9Db250MzoKKworICAgIFN0ckNweSAkMCAiJDE7JDAiCisKKyAgICA7V3JpdGVSZWdFeHBhbmRTdHIgSEtDVSAiRW52aXJvbm1lbnQiICJQQVRIIiAkMAorICAgIFdyaXRlUmVnRXhwYW5kU3RyIEhLTE0gJ1NZU1RFTVxDdXJyZW50Q29udHJvbFNldFxDb250cm9sXFNlc3Npb24gTWFuYWdlclxFbnZpcm9ubWVudCcgIlBBVEgiICQwCisgICAgU2VuZE1lc3NhZ2UgJHtIV05EX0JST0FEQ0FTVH0gJHtXTV9XSU5JTklDSEFOR0V9IDAgIlNUUjpFbnZpcm9ubWVudCIgL1RJTUVPVVQ9NTAwMAogCiAgIEFkZFRvUGF0aF9kb25lOgorICAgIFBvcCAkNQorICAgIFBvcCAkNAogICAgIFBvcCAkMwogICAgIFBvcCAkMgogICAgIFBvcCAkMQpkaWZmIC0tZ2l0IGEvd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpIGIvd2luMzIvZGlzdC9pbnN0YWxsZXIvbmV0LXNubXAubnNpCmluZGV4IDk1ZDdiNTUuLjI0MDNkNzcgMTAwNjQ0Ci0tLSBhL3dpbjMyL2Rpc3QvaW5zdGFsbGVyL25ldC1zbm1wLm5zaQorKysgYi93aW4zMi9kaXN0L2luc3RhbGxlci9uZXQtc25tcC5uc2kKQEAgLTEsMTMgKzEsMTYgQEAKIDsgU2NyaXB0IGdlbmVyYXRlZCBieSB0aGUgSE0gTklTIEVkaXQgU2NyaXB0IFdpemFyZC4KK1NldENvbXByZXNzb3IgL1NPTElEIGx6bWEKIAorIWluY2x1ZGUgeDY0Lm5zaAogIWluY2x1ZGUgIlNlY3Rpb25zLm5zaCIKKyFpbmNsdWRlIEZpbGVGdW5jLm5zaAorIWluc2VydG1hY3JvIEdldFBhcmFtZXRlcnMKKyFpbnNlcnRtYWNybyBHZXRPcHRpb25zCit2YXIgY21kTGluZVBhcmFtZXRlcnMKIAogOyBITSBOSVMgRWRpdCBXaXphcmQgaGVscGVyIGRlZmluZXMKICFkZWZpbmUgUFJPRFVDVF9OQU1FICJOZXQtU05NUCIKLSFkZWZpbmUgUFJPRFVDVF9NQUpfVkVSU0lPTiAiNSIKLSFkZWZpbmUgUFJPRFVDVF9NSU5fVkVSU0lPTiAiNCIKLSFkZWZpbmUgUFJPRFVDVF9SRVZJU0lPTiAiMC5wcmU0IgotIWRlZmluZSBQUk9EVUNUX0VYRV9WRVJTSU9OICIxIgorIWRlZmluZSBQUk9EVUNUX0VYRV9TVUZGSVggIi4ke0lOU1RBTExFUl9QTEFURk9STX0uZXhlIgogIWRlZmluZSBQUk9EVUNUX1dFQl9TSVRFICJodHRwOi8vd3d3Lm5ldC1zbm1wLm9yZyIKICFkZWZpbmUgUFJPRFVDVF9ESVJfUkVHS0VZICJTb2Z0d2FyZVxOZXQtU05NUCIKICFkZWZpbmUgUFJPRFVDVF9VTklOU1RfS0VZICJTb2Z0d2FyZVxNaWNyb3NvZnRcV2luZG93c1xDdXJyZW50VmVyc2lvblxVbmluc3RhbGxcJHtQUk9EVUNUX05BTUV9IgpAQCAtMzgsNyArNDEsNyBAQAogIWluc2VydG1hY3JvIE1VSV9QQUdFX0xJQ0VOU0UgImRvY3NcQ09QWUlORyIKIAogOyBNYWtlIHN1cmUgU1NMIGlzIGluc3RhbGxlZC4KLVBhZ2UgY3VzdG9tIElzU1NMSW5zdGFsbGVkICIiICI6IGN1c3RvbSBwYWdlIgorOyBQYWdlIGN1c3RvbSBJc1NTTEluc3RhbGxlZCAiIiAiOiBjdXN0b20gcGFnZSIKIAogOyBDb21wb25lbnRzIHBhZ2UKICFpbnNlcnRtYWNybyBNVUlfUEFHRV9DT01QT05FTlRTCkBAIC02OSwxMSArNzIsMTEgQEAKIDsgTVVJIGVuZCAtLS0tLS0KIAogTmFtZSAiJHtQUk9EVUNUX05BTUV9ICR7UFJPRFVDVF9NQUpfVkVSU0lPTn0uJHtQUk9EVUNUX01JTl9WRVJTSU9OfS4ke1BST0RVQ1RfUkVWSVNJT059IgotT3V0RmlsZSAiLi5cXG5ldC1zbm1wLSR7UFJPRFVDVF9NQUpfVkVSU0lPTn0uXAorT3V0RmlsZSAibmV0LXNubXAtJHtQUk9EVUNUX01BSl9WRVJTSU9OfS5cCiAgICAgICAgICAgICAgICAgICAke1BST0RVQ1RfTUlOX1ZFUlNJT059LlwKICAgICAgICAgICAgICAgICAgICR7UFJPRFVDVF9SRVZJU0lPTn1cCiAgICAgICAgICAgICAgICAgICAtJHtQUk9EVUNUX0VYRV9WRVJTSU9OfVwKLSAgICAgICAgICAgICAgICAgIC53aW4zMi5leGUiCisgICAgICAgICAgICAgICAgICAke1BST0RVQ1RfRVhFX1NVRkZJWH0iCiBJbnN0YWxsRGlyICJDOlx1c3IiCiBJbnN0YWxsRGlyUmVnS2V5IEhLTE0gIiR7UFJPRFVDVF9ESVJfUkVHS0VZfSIgIkluc3RhbGxEaXIiCiBTaG93SW5zdERldGFpbHMgc2hvdwpAQCAtODEsMTMgKzg0LDIwIEBACiAKIDsgVmFyaWFibGVzIGZvciB3cml0aW5nIGNvbmZpZyBmaWxlcwogVmFyIGNvbmZfZmlsZQorCiBWYXIgd2luRXh0RExMCitWYXIgb3BlblNTTAogCiBTZWN0aW9uICJCYXNlIENvbXBvbmVudHMiIFNFQzAxCisgIFNlY3Rpb25JbiBSTworICBTdHJDbXAgJG9wZW5TU0wgImZhbHNlIiBTRUMwMV9ub09wZW5TU0wgU0VDMDFfT3BlblNTTAorICAKKyAgU0VDMDFfbm9PcGVuU1NMOgogICBTZXRPdXRQYXRoICIkSU5TVERJUiIKICAgU2V0T3ZlcndyaXRlIGlmbmV3ZXIKICAgRmlsZSAiUkVBRE1FLnR4dCIKICAgU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgorCiAgIEZpbGUgImJpblxuZXRzbm1wLmRsbCIKICAgRmlsZSAiYmluXGVuY29kZV9rZXljaGFuZ2UuZXhlIgogICBGaWxlICJiaW5cc25tcHZhY20uZXhlIgpAQCAtMTA2LDYgKzExNiwzNSBAQAogICBGaWxlICJiaW5cc25tcGJ1bGt3YWxrLmV4ZSIKICAgRmlsZSAiYmluXHNubXBidWxrZ2V0LmV4ZSIKICAgRmlsZSAiYmluXHNubXB3YWxrLmV4ZSIKKyAgZ290byBTRUMwMV9jb250aW51ZQorCisgIFNFQzAxX09wZW5TU0w6CisgIFNldE91dFBhdGggIiRJTlNURElSIgorICBTZXRPdmVyd3JpdGUgaWZuZXdlcgorICBGaWxlICJSRUFETUUudHh0IgorICBTZXRPdXRQYXRoICIkSU5TVERJUlxiaW4iCisKKyAgRmlsZSAiYmluLnNzbFxuZXRzbm1wLmRsbCIKKyAgRmlsZSAiYmluLnNzbFxlbmNvZGVfa2V5Y2hhbmdlLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wdmFjbS5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHVzbS5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcHRyYXAuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB0cmFuc2xhdGUuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB0ZXN0LmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wdGFibGUuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBzdGF0dXMuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBzZXQuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBuZXRzdGF0LmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wZ2V0bmV4dC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcGdldC5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcGRmLmV4ZSIKKyAgRmlsZSAiYmluLnNzbFxzbm1wZGVsdGEuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXBidWxrd2Fsay5leGUiCisgIEZpbGUgImJpbi5zc2xcc25tcGJ1bGtnZXQuZXhlIgorICBGaWxlICJiaW4uc3NsXHNubXB3YWxrLmV4ZSIKKworICBTRUMwMV9jb250aW51ZToKKwogICBGaWxlICJiaW5cbWliMmMiCiAgIEZpbGUgImJpblxtaWIyYy5iYXQiCiAgIENhbGwgQ3JlYXRlTWliMmNCYXQKQEAgLTE1MSwxOCArMTkwLDk0IEBACiBTZWN0aW9uR3JvdXAgL2UgIk5ldC1TTk1QIEFnZW50IFNlcnZpY2UiCiAgIFNlY3Rpb24gIlN0YW5kYXJkIGFnZW50IiBTRUMwMgogICAgIFN0ckNweSAkd2luRXh0RExMICIwIgotICAgIENhbGwgSW5zdGFsbEFnZW50CisgICAgU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgorCisgICAgOyBEZWxldGUgYWdlbnQgb3RoZXJ3aXNlIHJlLWluc3RhbGxpbmcgYSBkaWZmZXJlbnQgYWdlbnQgbWF5IG5vdCB3b3JrIGJlY2F1c2Ugb2YgZGF0ZSBzdGFtcHMKKyAgICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wZC5leGUiICAKKworICAgIFN0ckNtcCAkb3BlblNTTCAiZmFsc2UiIFNFQzAyX25vT3BlblNTTCBTRUMwMl9PcGVuU1NMCisgICAgU0VDMDJfbm9PcGVuU1NMOgorICAgICAgRmlsZSAiYmluXHNubXBkLmV4ZSIKKworICAgIFNFQzAyX09wZW5TU0w6CisgICAgICBGaWxlICJiaW4uc3NsXHNubXBkLmV4ZSIKKworICAgIFNldE91dFBhdGggIiRJTlNURElSXHNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wZC1kYXRhIgorICAgIEZpbGUgInNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wZC1kYXRhXCouKiIKKyAgCisgICAgOyBJZiB3ZSBhcmUgb24gYW4gTlQgc3lzdGVtIHRoZW4gaW5zdGFsbCB0aGUgc2VydmljZSBiYXRjaCBmaWxlcy4KKyAgICBDYWxsIElzTlQKKyAgICBQb3AgJDEKKyAgICBTdHJDbXAgJDEgMCBTRUMwMl9Ob1NlcnZpY2UKKyAgCisgICAgU2V0T3V0UGF0aCAiJElOU1RESVJcIgorICAgIEZpbGUgInJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIEZpbGUgInVucmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgQ2FsbCBDcmVhdGVBZ2VudEJhdHMKKworCUNsZWFyRXJyb3JzCisJU3RyQ21wICRJQ09OU19HUk9VUCAiIiBTRUMwMl9Ob1NlcnZpY2UKKyAgICBDcmVhdGVEaXJlY3RvcnkgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlIgorICAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxVbnJlZ2lzdGVyIEFnZW50IFNlcnZpY2UubG5rIiAiJElOU1RESVJcdW5yZWdpc3RlcmFnZW50LmJhdCIKKyAgICAKKyAgICBTRUMwMl9Ob1NlcnZpY2U6CisJCiAgIFNlY3Rpb25FbmQKIAotICBTZWN0aW9uIC9vICJXaXRoIFdpbmRvd3MgRXh0ZW5zaW9uIERMTCBzdXBwb3J0IiBTRUMwMwotICAgIFN0ckNweSAkd2luRXh0RExMICIxIgotICAgIENhbGwgSW5zdGFsbEFnZW50CisgIFNlY3Rpb24gIldpdGggV2luZG93cyBFeHRlbnNpb24gRExMIHN1cHBvcnQiIFNFQzAzCQorCVN0ckNweSAkd2luRXh0RExMICIxIgorCVNldE91dFBhdGggIiRJTlNURElSXGJpbiIKKworICAgIDsgRGVsZXRlIGFnZW50IG90aGVyd2lzZSByZS1pbnN0YWxsaW5nIGEgZGlmZmVyZW50IGFnZW50IG1heSBub3Qgd29yayBiZWNhdXNlIG9mIGRhdGUgc3RhbXBzCisgICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcGQuZXhlIiAgCisKKyAgICBTdHJDbXAgJG9wZW5TU0wgImZhbHNlIiBTRUMwM19ub09wZW5TU0wgU0VDMDNfT3BlblNTTAorICAgIFNFQzAzX25vT3BlblNTTDoKKyAgICAgIEZpbGUgL29uYW1lPXNubXBkLmV4ZSAiYmluXHNubXBkLXdpbkV4dERMTC5leGUiCisKKyAgICBTRUMwM19PcGVuU1NMOgorICAgICAgRmlsZSAvb25hbWU9c25tcGQuZXhlICJiaW4uc3NsXHNubXBkLXdpbkV4dERMTC5leGUiCisKKyAgICBTZXRPdXRQYXRoICIkSU5TVERJUlxzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcGQtZGF0YSIKKyAgICBGaWxlICJzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcGQtZGF0YVwqLioiCisgIAorICAgIDsgSWYgd2UgYXJlIG9uIGFuIE5UIHN5c3RlbSB0aGVuIGluc3RhbGwgdGhlIHNlcnZpY2UgYmF0Y2ggZmlsZXMuCisgICAgQ2FsbCBJc05UCisgICAgUG9wICQxCisgICAgU3RyQ21wICQxIDAgU0VDMDNfTm9TZXJ2aWNlCisgIAorICAgIFNldE91dFBhdGggIiRJTlNURElSXCIKKyAgICBGaWxlICJyZWdpc3RlcmFnZW50LmJhdCIKKyAgICBGaWxlICJ1bnJlZ2lzdGVyYWdlbnQuYmF0IgorICAgIENhbGwgQ3JlYXRlQWdlbnRCYXRzCisKKwlDbGVhckVycm9ycworCVN0ckNtcCAkSUNPTlNfR1JPVVAgIiIgU0VDMDNfTm9TZXJ2aWNlCisgICAgQ3JlYXRlRGlyZWN0b3J5ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZSIKKyAgICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiICIkSU5TVERJUlxyZWdpc3RlcmFnZW50LmJhdCIKKyAgICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHVucmVnaXN0ZXJhZ2VudC5iYXQiCisgICAgCisgICAgU0VDMDNfTm9TZXJ2aWNlOgogICBTZWN0aW9uRW5kCisgIAorOyAgU2VjdGlvbiAiSGlkZGVuIiBTRUNBZ2VudEhpZGRlbgorICA7U2VjdGlvbkVuZAogU2VjdGlvbkdyb3VwRW5kCiAKIFNlY3Rpb24gIk5ldC1TTk1QIFRyYXAgU2VydmljZSIgU0VDMDQKICAgU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgorCisgIFN0ckNtcCAkb3BlblNTTCAiZmFsc2UiIFNFQzA0X25vT3BlblNTTCBTRUMwNF9PcGVuU1NMCisKKyAgU0VDMDRfbm9PcGVuU1NMOgogICBGaWxlICJiaW5cc25tcHRyYXBkLmV4ZSIKKyAgZ290byBTRUMwNF9jb250aW51ZQorCisgIFNFQzA0X09wZW5TU0w6CisgIEZpbGUgImJpbi5zc2xcc25tcHRyYXBkLmV4ZSIKKworICBTRUMwNF9jb250aW51ZToKICAgU2V0T3V0UGF0aCAiJElOU1RESVJcc2hhcmVcc25tcFxzbm1wY29uZi1kYXRhXHNubXB0cmFwZC1kYXRhIgogICBGaWxlICJzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcHRyYXBkLWRhdGFcKi4qIgogICA7U2V0T3V0UGF0aCAiJElOU1RESVJcZXRjXHNubXAiCkBAIC0xNzgsNiArMjkzLDggQEAKICAgRmlsZSAidW5yZWdpc3RlcnRyYXBkLmJhdCIKICAgQ2FsbCBDcmVhdGVUcmFwZEJhdHMKICAgCisgIENsZWFyRXJyb3JzCisgIFN0ckNtcCAkSUNPTlNfR1JPVVAgIiIgTm9UcmFwU2VydmljZQogICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgVHJhcCBTZXJ2aWNlLmxuayIgIiRJTlNURElSXHJlZ2lzdGVydHJhcGQuYmF0IgogICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBUcmFwIFNlcnZpY2UubG5rIiAiJElOU1RESVJcdW5yZWdpc3RlcnRyYXBkLmJhdCIKICAgCkBAIC0xODYsNyArMzAzLDE4IEBACiAKIFNlY3Rpb24gIlBlcmwgU05NUCBNb2R1bGVzIiBTRUMwNQogICBTZXRPdXRQYXRoICIkSU5TVERJUlxwZXJsXHg4NiIKKworICBTdHJDbXAgJG9wZW5TU0wgImZhbHNlIiBTRUMwNV9ub09wZW5TU0wgU0VDMDVfT3BlblNTTAorCisgIFNFQzA1X25vT3BlblNTTDoKICAgRmlsZSAicGVybFx4ODZcTmV0U05NUC50YXIuZ3oiCisgIGdvdG8gU0VDMDVfY29udGludWUKKworICBTRUMwNV9PcGVuU1NMOgorICBGaWxlICJwZXJsLnNzbFx4ODZcTmV0U05NUC50YXIuZ3oiCisKKyAgU0VDMDVfY29udGludWU6CisKICAgU2V0T3V0UGF0aCAiJElOU1RESVJccGVybCIKICAgRmlsZSAicGVybFxOZXRTTk1QLnBwZCIKICAgU2V0T3V0UGF0aCAiJElOU1RESVJcYmluIgpAQCAtMjI0LDExICszNTIsMTggQEAKICAgRmlsZSAibGliXCouKiIKIFNlY3Rpb25FbmQKIAorU2VjdGlvbiAiRW5jcnlwdGlvbiBzdXBwb3J0IChPcGVuU1NMKSIgU0VDMDcKK1NlY3Rpb25FbmQKKwogU2VjdGlvbiAtQWRkaXRpb25hbEljb25zCisgIENsZWFyRXJyb3JzCisgIFN0ckNtcCAkSUNPTlNfR1JPVVAgIiIgbm9BZGRpdGlvbmFsSXRlbXMKICAgQ3JlYXRlRGlyZWN0b3J5ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVAiCiAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcVW5pbnN0YWxsLmxuayIgIiRJTlNURElSXHVuaW5zdC5leGUiCiAgIENyZWF0ZVNob3J0Q3V0ICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcTmV0LVNOTVAgSGVscC5sbmsiICIkSU5TVERJUlxkb2NzXE5ldC1TTk1QLmNobSIKICAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxSRUFETUUubG5rIiAiJElOU1RESVJcUkVBRE1FLnR4dCIKKyAgCisgIG5vQWRkaXRpb25hbEl0ZW1zOgogU2VjdGlvbkVuZAogCiBTZWN0aW9uIC1Qb3N0CkBAIC0yNjIsNiArMzk3LDggQEAKICAgIWluc2VydG1hY3JvIE1VSV9ERVNDUklQVElPTl9URVhUICR7U0VDMDZ9IFwKICAgICAgICAgICAgICAgICJUaGUgRGV2ZWxvcG1lbnQgZmlsZXMgcHJvdmlkZSBoZWFkZXIgYW5kIGxpYnJhcnkgZmlsZXMgdXNlZCBmb3IgZGV2ZWxvcGluZyBcCiAgICAgICAgICAgICAgICBhcHBsaWNhdGlvbnMgdGhhdCB1c2UgdGhlIE5ldC1TTk1QIGxpYnJhcnkuIgorICAhaW5zZXJ0bWFjcm8gTVVJX0RFU0NSSVBUSU9OX1RFWFQgJHtTRUMwN30gXAorICAgICAgICAgICAgICAgIkVuY3J5cHRpb24gc3VwcG9ydCBpcyByZXF1aXJlZCBmb3IgU05NUHYzIFNIQSBhdXRoZW50aWNhdGlvbiBhbmQgREVTIC8gQUVTIHByaXZhY3kuICBBIFdpbmRvd3MgcGFja2FnZSBpcyBhdmFpbGFibGUgZnJvbSB3d3cuc2xwcm93ZWIuY29tLiIKICFpbnNlcnRtYWNybyBNVUlfRlVOQ1RJT05fREVTQ1JJUFRJT05fRU5ECiAKIEZ1bmN0aW9uIENyZWF0ZVNubXBDb25mCkBAIC01MjUsMzAgKzY2MiwyNTYgQEAKIEZ1bmN0aW9uRW5kCiAKIEZ1bmN0aW9uIHVuLm9uSW5pdAorICBTZXRSZWdWaWV3IDY0CQk7IFByZXZlbnQgdGhlIGluc3RhbGxlciBmcm9tIHVzaW5nIHRoZSBXb3c2NDMyTm9kZSBIS0xNIHN1YmtleSBvbiA2NC1iaXQgc3lzdGVtcwogICBNZXNzYWdlQm94IE1CX0lDT05RVUVTVElPTnxNQl9ZRVNOT3xNQl9ERUZCVVRUT04yICJBcmUgeW91IHN1cmUgeW91IHdhbnQgdG8gY29tcGxldGVseSByZW1vdmUgJCheTmFtZSkgYW5kIGFsbCBvZiBpdHMgY29tcG9uZW50cz8iIElEWUVTICsyCiAgIEFib3J0CiBGdW5jdGlvbkVuZAogCiBGdW5jdGlvbiAub25Jbml0Ci0KLVN0ckNweSAkMyAke1NFQzAyfQotCitTZXRSZWdWaWV3IDY0CQk7IFByZXZlbnQgdGhlIGluc3RhbGxlciBmcm9tIHVzaW5nIHRoZSBXb3c2NDMyTm9kZSBIS0xNIHN1YmtleSBvbiA2NC1iaXQgc3lzdGVtcwogUHVzaCAkMAorUHVzaCAkUjAKK1B1c2ggJFIxCisKKzsgQ2hlY2sgZm9yIC8/IGNvbW1hbmQgbGluZSB1c2FnZSBvcHRpb24KKyR7R2V0UGFyYW1ldGVyc30gJFIxCitTdHJDcHkgJGNtZExpbmVQYXJhbWV0ZXJzICRSMQorQ2xlYXJFcnJvcnMKKyR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICcvPycgJFIwCitJZkVycm9ycyArMyAwCitNZXNzYWdlQm94IE1CX09LICJPcHRpb25zOiRcbiAgXFN0YXJ0TWVudT17R3JvdXBOYW1lfSRcbiAgXEFnZW50PXN0YW5kYXJkfGV4dERMTHxub25lICAgKGRlZmF1bHQgc3RhbmRhcmQpJFxuICBcbm9UcmFwZCRcdChkZWZhdWx0IFxUcmFwZCkkXG4gIFxub1BlcmwkXHQkXHQoZGVmYXVsdCBcUGVybCkkXG4gIFxEZXYkXHQkXHQoZGVmYXVsdCBcbm9EZXYpJFxuICBcT3BlblNTTCRcdChkZWZhdWx0IFxub09wZW5TU0wpIgorQWJvcnQKKworOyBNYWtlIHN1cmUgd2UncmUgcnVubmluZyBXaW5kb3dzIDIwMDAgKDUuMCkgb3IgaGlnaGVyCitDbGVhckVycm9ycworUmVhZFJlZ1N0ciAkUjAgSEtMTSBcCisgICJTT0ZUV0FSRVxNaWNyb3NvZnRcV2luZG93cyBOVFxDdXJyZW50VmVyc2lvbiIgQ3VycmVudFZlcnNpb24KK0lmRXJyb3JzIHdpbmRvd3NWZXJzaW9uRXJyb3IKKworSW50Q21wICRSMCAnNS4wJyB3aW5kb3dzVmVyc2lvbk9LIHdpbmRvd3NWZXJzaW9uRXJyb3Igd2luZG93c1ZlcnNpb25PSword2luZG93c1ZlcnNpb25FcnJvcjoKK01lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJUaGlzIHZlcnNpb24gb2YgJCheTmFtZSkgcmVxdWlyZXMgV2luZG93cyAyMDAwIG9yIGhpZ2hlci4gIEZvciBXaW5kb3dzIE5UIGFuZCBsb3dlciwgcGxlYXNlIHVzZSBOZXQtU05NUCA1LjQuIgorUXVpdAorCit3aW5kb3dzVmVyc2lvbk9LOgorO01lc3NhZ2VCb3ggTUJfSUNPTklORk9STUFUSU9OfE1CX09LICJXaW5kb3dzIHZlcnNpb24gb2s6ICRSMCIKKworOyBNYWtlIHN1cmUgd2UncmUgcnVubmluZyB0aGUgcmlnaHQgcGxhdGZvcm0KKztJTlNUQUxMRVJfUExBVEZPUk0KKyR7SWZ9ICR7SU5TVEFMTEVSX1BMQVRGT1JNfSA9PSAieDY0IgorICA7TWVzc2FnZUJveCBNQl9PSyAiNjQtYml0IGJpbmFyeSIKKyAgJHtJZk5vdH0gJHtSdW5uaW5nWDY0fQorICAgIDtNZXNzYWdlQm94IE1CX09LICIzMi1iaXQgT1MiCisJTWVzc2FnZUJveCBNQl9PSyAiVGhpcyBOZXQtU05NUCBwYWNrYWdlIHJlcXVpcmVzIDY0LWJpdCBXaW5kb3dzICh4NjQpLiAgUGxlYXNlIGRvd25sb2FkIHRoZSB4ODYgaW5zdGFsbGVyIHBhY2thZ2UuIgorCVF1aXQKKyAgJHtFbHNlfQorICAgIDtNZXNzYWdlQm94IE1CX09LICI2NC1iaXQgT1MiCisgICR7RW5kSWZ9Ciske0Vsc2V9CisgIDtNZXNzYWdlQm94IE1CX09LICJ4ODYgKDMyLWJpdCkgYmluYXJ5IgorICAke0lmfSAke1J1bm5pbmdYNjR9CisgICAgO01lc3NhZ2VCb3ggTUJfT0sgIjY0LWJpdCBPUyIKKwlNZXNzYWdlQm94IE1CX09LICJZb3UgYXJlIGluc3RhbGxpbmcgYSAzMi1iaXQgcGFja2FnZSBvbiBhIDY0LWJpdCBvcGVyYXRpbmcgc3lzdGVtLiAgQWxsIGFwcGxpY2F0aW9ucyBzaG91bGQgd29yayBleGNlcHQgZm9yIHRoZSAnTmV0LVNOTVAgQWdlbnQgU2VydmljZSB3aXRoIFdpbmRvd3MgRXh0ZW5zaW9uIERMTCBzdXBwb3J0Jy4gIFBsZWFzZSBkb3dubG9hZCB0aGUgeDY0IGluc3RhbGxlciBwYWNrYWdlLiIKKyAgJHtFbmRJZn0JCiske0VuZElmfQogCiA7IERpc2FibGUgRGV2ZWxvcG1lbnQgZmlsZXMgc2VjdGlvbiBieSBkZWZhdWx0CiBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNn0gJDAKIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KIFNlY3Rpb25TZXRGbGFncyAke1NFQzA2fSAkMAogCis7IERpc2FibGUgT3BlblNTTCBzZWN0aW9uIGJ5IGRlZmF1bHQKK1NlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkMAorSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorU2VjdGlvblNldEZsYWdzICR7U0VDMDd9ICQwCitTdHJDcHkgJG9wZW5TU0wgImZhbHNlIgorCis7IERpc2FibGUgQWdlbnQgd2l0aCB3aW5FeHRETEwgc3VwcG9ydCAtIHVzZXIgY2FuIHNlbGVjdCBlaXRoZXIgYnV0IG5vdCBib3RoLgorU3RyQ3B5ICRSOCAke1NFQzAyfQorU2VjdGlvbkdldEZsYWdzICR7U0VDMDJ9ICQwCitJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CitTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwMn0gJDAKK1NlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorU2VjdGlvblNldEZsYWdzICR7U0VDMDN9ICQwCisKKzsgU3RvcmUgY3VycmVudCBzdGF0dXMgb2YgU0VDMDcgKFNTTCkuICBVc2VkIGZvciBjaGVja2luZyBpZiBPcGVuU1NMIGlzIGluc3RhbGxlZC4KK1NlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkUjkKKworOyBwcm9jZXNzIG90aGVyIGNvbW1hbmQgbGluZSBwYXJhbWV0ZXJzCitDYWxsIHBhcnNlUGFyYW1ldGVycworCitQb3AgJFIwCiBQb3AgJDAKIEZ1bmN0aW9uRW5kCiAKK0Z1bmN0aW9uIHBhcnNlUGFyYW1ldGVycworICBQdXNoICRSMAorICBQdXNoICQwCisKKyAgOyAvU3RhcnRNZW51PQorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL1N0YXJ0TWVudT0iICAkUjAKKyAgSWZFcnJvcnMgKzIgMAorICBTdHJDcHkgJElDT05TX0dST1VQICRSMAorCisgIDsgL3tubyx9VHJhcGQgIAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL1RyYXBkIiAgJFIwCisgIElmRXJyb3JzICs0IDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDR9ICQwCisgIEludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDR9ICQwCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvbm9UcmFwZCIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA0fSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA0fSAkMAorCisgIDsgL3tubyx9UGVybCAgCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvUGVybCIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA1fSAkMAorICBJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA1fSAkMAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL25vUGVybCIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA1fSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA1fSAkMAorCisgIDsgL3tubyx9RGV2ICAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9EZXYiICAkUjAKKyAgSWZFcnJvcnMgKzQgMAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwNn0gJDAKKyAgSW50T3AgJDAgJDAgfCAke1NGX1NFTEVDVEVEfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwNn0gJDAKKyAgQ2xlYXJFcnJvcnMKKyAgJHtHZXRPcHRpb25zfSAkY21kTGluZVBhcmFtZXRlcnMgIi9ub0RldiIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA2fSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA2fSAkMAorCisgIDsgL3tubyx9T3BlblNTTCAgCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvT3BlblNTTCIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkMAorICBJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA3fSAkMAorICBDbGVhckVycm9ycworICAke0dldE9wdGlvbnN9ICRjbWRMaW5lUGFyYW1ldGVycyAiL25vT3BlblNTTCIgICRSMAorICBJZkVycm9ycyArNCAwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzA3fSAkMAorCisgIDsgL0FnZW50PSAgCisgIENsZWFyRXJyb3JzCisgICR7R2V0T3B0aW9uc30gJGNtZExpbmVQYXJhbWV0ZXJzICIvQWdlbnQ9IiAgJFIwCisgIElmRXJyb3JzIGVuZE9mQWdlbnQgMAorICA7IC9BZ2VudD1ub25lCisgIENsZWFyRXJyb3JzCisgIFN0ckNtcCAkUjAgIm5vbmUiIDAgc3RhbmRhcmRBZ2VudAorICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgSW50T3AgJDAgJDAgJiAke1NFQ1RJT05fT0ZGfQorICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDN9ICQwCisgIEdvdG8gZW5kT2ZBZ2VudAorICAKKyAgc3RhbmRhcmRBZ2VudDoKKyAgOyAvQWdlbnQ9c3RhbmRhcmQKKyAgQ2xlYXJFcnJvcnMKKyAgU3RyQ21wICRSMCAic3RhbmRhcmQiIDAgd2luRXh0RExMQWdlbnQKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDJ9ICQwCisgIEludE9wICQwICQwIHwgJHtTRl9TRUxFQ1RFRH0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDJ9ICQwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAzfSAkMAorICBHb3RvIGVuZE9mQWdlbnQKKyAgCisgIHdpbkV4dERMTEFnZW50OgorICA7IC9BZ2VudD1leHRETEwKKyAgQ2xlYXJFcnJvcnMKKyAgU3RyQ21wICRSMCAiZXh0RExMIiAwIGVuZE9mQWdlbnQKKyAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDJ9ICQwCisgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgU2VjdGlvblNldEZsYWdzICR7U0VDMDJ9ICQwCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorICBJbnRPcCAkMCAkMCB8ICR7U0ZfU0VMRUNURUR9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAzfSAkMAorICBlbmRPZkFnZW50OgorICAKKyAgUG9wICRSMCAgCitGdW5jdGlvbkVuZAorCiBGdW5jdGlvbiAub25TZWxDaGFuZ2UKIAotICAhaW5zZXJ0bWFjcm8gU3RhcnRSYWRpb0J1dHRvbnMgJDMKLSAgICAhaW5zZXJ0bWFjcm8gUmFkaW9CdXR0b24gJHtTRUMwMn0KLSAgICAhaW5zZXJ0bWFjcm8gUmFkaW9CdXR0b24gJHtTRUMwM30KLSAgIWluc2VydG1hY3JvIEVuZFJhZGlvQnV0dG9ucworOyAgIWluc2VydG1hY3JvIFN0YXJ0UmFkaW9CdXR0b25zICQyCisgICAgOyFpbnNlcnRtYWNybyBSYWRpb0J1dHRvbiAke1NFQzAyfQorICAgIDshaW5zZXJ0bWFjcm8gUmFkaW9CdXR0b24gJHtTRUMwM30KKyAgOyFpbnNlcnRtYWNybyBFbmRSYWRpb0J1dHRvbnMKKworICAjIENyZWF0ZSBhIGJhY2t1cCBjb3B5IG9mICQwCisgIFB1c2ggJDAKKworICA7IEFnZW50IC0gT25seSBhbGxvdyB1c2VyIHRvIHNlbGVjdCBzdGFuZGFyZCBvciB3aW5FeHRETEwgYWdlbnQKKyAgU3RyQ21wICRSOCAke1NFQzAyfSBvblNlbENoYW5nZV9jaGVja19TRUMzCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAyfSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0ZfU0VMRUNURUR9CisgIEludENtcCAkMCAke1NGX1NFTEVDVEVEfSAwIG9uU2VsQ2hhbmdlX2FnZW50X2RvbmUgb25TZWxDaGFuZ2VfYWdlbnRfZG9uZQorICBTdHJDcHkgJFI4ICR7U0VDMDJ9CisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAzfSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgIFNlY3Rpb25TZXRGbGFncyAke1NFQzAzfSAkMAorICBHb3RvIG9uU2VsQ2hhbmdlX2FnZW50X2RvbmUKKyAKKyAgb25TZWxDaGFuZ2VfY2hlY2tfU0VDMzoKKyAgICBTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgICBJbnRPcCAkMCAkMCAmICR7U0ZfU0VMRUNURUR9CisgICAgSW50Q21wICQwICR7U0ZfU0VMRUNURUR9IDAgb25TZWxDaGFuZ2VfYWdlbnRfZG9uZSBvblNlbENoYW5nZV9hZ2VudF9kb25lCisgICAgU3RyQ3B5ICRSOCAke1NFQzAzfQorICAgIFNlY3Rpb25HZXRGbGFncyAke1NFQzAyfSAkMAorICAgIEludE9wICQwICQwICYgJHtTRUNUSU9OX09GRn0KKyAgICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwMn0gJDAKKyAKKyAgb25TZWxDaGFuZ2VfYWdlbnRfZG9uZToKKworICA7IElmIHRoZSB1c2VyIGlzIGluc3RhbGxpbmcgYSAzMi1iaXQgYmluYXJ5IG9uIGEgNjQtYml0IE9TLCBkaXNhYmxlIHdpbkV4dERMTCBhZ2VudC4KKyAgJHtJZn0gJHtSdW5uaW5nWDY0fQorICAgICR7SWZOb3R9ICR7SU5TVEFMTEVSX1BMQVRGT1JNfSA9PSAieDY0IgorCSAgU2VjdGlvbkdldEZsYWdzICR7U0VDMDN9ICQwCisgICAgICBJbnRPcCAkMCAkMCAmICR7U0VDVElPTl9PRkZ9CisgICAgICBTZWN0aW9uU2V0RmxhZ3MgJHtTRUMwM30gJDAKKyAgICAke0VuZElmfQorICAke0VuZElmfQorICAgIAorICA7IElmIHVzZXIgc2VsZWN0ZWQgRW5jcnlwdGlvbiBzdXBwb3J0LCBtYWtlIHN1cmUgT3BlblNTTCBpcyBpbnN0YWxsZWQuCisgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkMAorICBJbnRPcCAkMCAkMCAmICR7U0ZfU0VMRUNURUR9CisgIEludENtcCAkMCAke1NGX1NFTEVDVEVEfSBlbmFibGVTU0xvblNlbENoYW5nZSBkaXNhYmxlU1NMb25TZWxDaGFuZ2UKKyAgZW5hYmxlU1NMb25TZWxDaGFuZ2U6CisgICAgU3RyQ3B5ICRvcGVuU1NMICJ0cnVlIgorICAgIEludENtcCAkUjkgJDAgU1NMYWxyZWFkeUVuYWJsZWQgU1NManVzdEVuYWJsZWQKKyAgICBTU0xqdXN0RW5hYmxlZDoKKyAgICAgIENhbGwgSXNTU0xJbnN0YWxsZWQKKyAgICAgIFNlY3Rpb25HZXRGbGFncyAke1NFQzA3fSAkUjkKKyAgICBTU0xhbHJlYWR5RW5hYmxlZDoKKyAgICAgIGdvdG8gY29udGludWVTU0xvblNlbENoYW5nZQorICBkaXNhYmxlU1NMb25TZWxDaGFuZ2U6CisgICAgU3RyQ3B5ICRvcGVuU1NMICJmYWxzZSIKKwlTZWN0aW9uR2V0RmxhZ3MgJHtTRUMwN30gJFI5CisgIGNvbnRpbnVlU1NMb25TZWxDaGFuZ2U6CisgIAorICBQb3AgJDAKIAogRnVuY3Rpb25FbmQKIApAQCAtNTc5LDYgKzk0Miw5IEBACiAgIERlbGV0ZSAiJElOU1RESVJcZG9jc1xDT1BZSU5HIgogICBEZWxldGUgIiRJTlNURElSXGRvY3NcTmV0LVNOTVAuY2htIgogICBEZWxldGUgIiRJTlNURElSXGJpblxuZXQtc25tcC1wZXJsLXRlc3QucGwiCisgIDsgaWRlYWxseSB3ZSBzaG91bGQgY2hlY2sgd2hldGhlciB0aGlzIGZpbGUgaGFzIGNoYW5nZWQKKyAgRGVsZXRlICIkSU5TVERJUlxldGNcc25tcFxzbm1wLmNvbmYiCisKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcHRyYXBkLmV4ZSIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcGQuZXhlIgogICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wd2Fsay5leGUiCkBAIC02MDAsNiArOTY2LDcgQEAKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcHZhY20uZXhlIgogICBEZWxldGUgIiRJTlNURElSXGJpblxlbmNvZGVfa2V5Y2hhbmdlLmV4ZSIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cbmV0c25tcC5kbGwiCisKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cbWliMmMiCiAgIERlbGV0ZSAiJElOU1RESVJcYmluXG1pYjJjLmJhdCIKICAgRGVsZXRlICIkSU5TVERJUlxiaW5cc25tcGNvbmYiCkBAIC02MjYsNiArOTkzLDcgQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcHRyYXBkLWRhdGFcbG9nZ2luZyIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcHRyYXBkLWRhdGFccnVudGltZSIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcQUdFTlRYLU1JQi50eHQiCisgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXEJSSURHRS1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xESVNNQU4tRVZFTlQtTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcRElTTUFOLUVYUFJFU1NJT04tTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcRElTTUFOLU5TTE9PS1VQLU1JQi50eHQiCkBAIC02NjAsNiArMTAyOCw3IEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLU1PTklUT1ItTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtUEFTUy1NSUIudHh0IgorICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xORVQtU05NUC1QRVJJT0RJQy1OT1RJRlktTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtU1lTVEVNLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXE5FVC1TTk1QLVRDLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcTkVULVNOTVAtVkFDTS1NSUIudHh0IgpAQCAtNjc3LDYgKzEwNDYsOCBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLU5PVElGSUNBVElPTi1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVBST1hZLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtVEFSR0VULU1JQi50eHQiCisgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtVExTLVRNLU1JQi50eHQiCisgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtVFNNLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXFNOTVAtVVNFUi1CQVNFRC1TTS1NSUIudHh0IgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xTTk1QLVVTTS1BRVMtTUlCLnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcU05NUC1VU00tREgtT0JKRUNUUy1NSUIudHh0IgpAQCAtNjk4LDggKzEwNjksOCBAQAogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWlic1xVQ0QtU05NUC1NSUItT0xELnR4dCIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYnNcVURQLU1JQi50eHQiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWJzXC5pbmRleCIKKyAgRGVsZXRlICIkSU5TVERJUlxzbm1wXHBlcnNpc3RcbWliX2luZGV4ZXNcMCIKIAotICBTZXRPdXRQYXRoICIkSU5TVERJUlxzaGFyZVxzbm1wIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMuYWNjZXNzX2Z1bmN0aW9ucy5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMuYXJyYXktdXNlci5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMuY2hlY2tfdmFsdWVzLmNvbmYiCkBAIC03MTksMTEgKzEwOTAsMTEgQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLm5vdGlmeS5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMub2xkLWFwaS5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMucGVybC5jb25mIgorICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMucmF3LXRhYmxlLmNvbmYiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy5yb3cuY29uZiIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLnNjYWxhci5jb25mIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMudGFibGVfZGF0YS5jb25mIgogCi0gIFNldE91dFBhdGggIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YSIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcZGVmYXVsdC1tZmQtdG9wLm0yYyIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcZGV0YWlscy1lbnVtcy5tMmkiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXGRldGFpbHMtbm9kZS5tMmkiCkBAIC03NjYsNyArMTEzNyw3IEBACiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC1pbnRlcmFjdGl2ZS1zZXR1cC5tMmMiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG1mZC1pbnRlcmZhY2UubTJjIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtbWFrZWZpbGUubTJtIgotICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtcGVyc2lzdGVuY2UubTJtIgorICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtcGVyc2lzdGVuY2UubTJpIgogICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVxtZmQtcmVhZG1lLm0yYyIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcbWZkLXRvcC5tMmMiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXG5vZGUtZ2V0Lm0yaSIKQEAgLTc5MCw3ICsxMTYxLDYgQEAKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcc3ludGF4LVJvd1N0YXR1cy12YXJiaW5kLXZhbGlkYXRlLm0yaSIKICAgRGVsZXRlICIkSU5TVERJUlxzaGFyZVxzbm1wXG1pYjJjLWRhdGFcc3ludGF4LVN0b3JhZ2VUeXBlLWRlcGVuZGVuY2llcy5tMmkiCiAgIERlbGV0ZSAiJElOU1RESVJcc2hhcmVcc25tcFxtaWIyYy1kYXRhXHN5bnRheC1UZXN0QW5kSW5jci1nZXQubTJpIgotICBEZWxldGUgIiRJTlNURElSXHNoYXJlXHNubXBcbWliMmMtZGF0YVwiCiAKICAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcTmV0LVNOTVAgSGVscC5sbmsiCiAgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFVuaW5zdGFsbC5sbmsiCkBAIC04MzEsNiArMTIwMSw3IEBACiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1cZnJlZWJzZDYuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxmcmVlYnNkNy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcc3lzdGVtXGZyZWVic2Q4LmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1ca2ZyZWVic2QuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxkcmFnb25mbHkuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXHN5c3RlbVxtaW5ndzMyLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxzeXN0ZW1cc29sYXJpczIuOS5oIgpAQCAtOTEwLDYgKzEyODEsOSBAQAogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wX2xvY2tpbmcuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcHYzLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XG9pZF9zdGFzaC5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wQWxpYXNEb21haW4uaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcERUTFNVRFBEb21haW4uaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcFNTSERvbWFpbi5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wU1RERG9tYWluLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBUQ1BEb21haW4uaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcFVEUERvbWFpbi5oIgpAQCAtOTE4LDEwICsxMjkyLDE1IEBACiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBfZW51bS5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxjbXVfY29tcGF0LmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxkaXJfdXRpbHMuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZmlsZV91dGlscy5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVx0ZXh0X3V0aWxzLmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHR5cGVzLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGZkX2V2ZW50X21hbmFnZXIuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcbGFyZ2VfZmRfc2V0LmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHNubXBfb3BlbnNzbC5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzbm1wX3NlcnZpY2UuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc25tcHRzbS5oIgogCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzdGFzaF9jYWNoZS5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcaW5zdGFuY2UuaCIKQEAgLTk2NCw2ICsxMzQzLDggQEAKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHNlcmlhbGl6ZS5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcc3Rhc2hfdG9fbmV4dC5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfdGRhdGEuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHN5c09SVGFibGUuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGFnZW50X3N5c09SVGFibGUuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG1pYl9tb2R1bGVfY29uZmlnLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxhZ2VudFxhZ2VudF9tb2R1bGVfY29uZmlnLmgiCiAKQEAgLTk3Nyw3ICsxMzU4LDExIEBACiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xpcHN0YXRzLmgiCiAgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xpcGFkZHJlc3MuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXHRjcENvbm4uaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXGRlZmF1bHRfcm91dGUuaCIKICAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXGlwX3NjYWxhcnMuaCIKKyAgRGVsZXRlICIkSU5TVERJUlxpbmNsdWRlXG5ldC1zbm1wXGRhdGFfYWNjZXNzXHNjb3Blem9uZS5oIgorICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3Ncc3dpbnN0LmgiCisgIERlbGV0ZSAiJElOU1RESVJcaW5jbHVkZVxuZXQtc25tcFxkYXRhX2FjY2Vzc1xzd3J1bi5oIgogICBEZWxldGUgIiRJTlNURElSXGluY2x1ZGVcbmV0LXNubXBcZGF0YV9hY2Nlc3NcdWRwX2VuZHBvaW50LmgiCiAKICAgRGVsZXRlICIkSU5TVERJUlxsaWJcbmV0c25tcGFnZW50LmxpYiIKQEAgLTk4Nyw4ICsxMzcyLDYgQEAKICAgRGVsZXRlICIkSU5TVERJUlxsaWJcbmV0c25tcG1pYnMubGliIgogICBEZWxldGUgIiRJTlNURElSXGxpYlxuZXRzbm1wLmV4cCIKICAgCi0gIFJNRGlyICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZSIKLSAgUk1EaXIgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUCIKICAgUk1EaXIgIiRJTlNURElSXHBlcmxceDg2IgogICBSTURpciAiJElOU1RESVJccGVybCIKICAgUk1EaXIgIiRJTlNURElSXGxpYiIKQEAgLTEwMTIsNiArMTM5NSw3IEBACiAgIFJNRGlyICIkSU5TVERJUlxzaGFyZSIKIAogICBSTURpciAiJElOU1RESVJcdGVtcCIKKyAgUk1EaXIgIiRJTlNURElSXHNubXBccGVyc2lzdFxtaWJfaW5kZXhlcyIKICAgUk1EaXIgIiRJTlNURElSXHNubXBccGVyc2lzdCIKICAgUk1EaXIgIiRJTlNURElSXHNubXAiCiAgIFJNRGlyICIkSU5TVERJUlxldGNcc25tcCIKQEAgLTEwMjEsNiArMTQwNSwzMSBAQAogICBSTURpciAiJElOU1RESVJcaW5jbHVkZSIKICAgUk1EaXIgIiRJTlNURElSXGxvZyIKICAgUk1EaXIgIiRJTlNURElSIgorICAKKyAgOyBTdGFydCBNZW51IGVudHJpZXMgbWF5IGhhdmUgYmVlbiBpbnN0YWxsZWQgZm9yIHRoZSBjdXJyZW50IHVzZXIgb25seSwKKyAgOyBvciBmb3IgQWxsIFVzZXJzLiAgU28gbGV0J3MgZGVsZXRlIGJvdGggc2V0cy4uLi4KKyAgU2V0U2hlbGxWYXJDb250ZXh0IGN1cnJlbnQKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcVW5pbnN0YWxsLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcTmV0LVNOTVAgSGVscC5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFJFQURNRS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBUcmFwIFNlcnZpY2UubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgVHJhcCBTZXJ2aWNlLmxuayIKKyAgUk1EaXIgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlIgorICBSTURpciAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQIgorCisgIFNldFNoZWxsVmFyQ29udGV4dCBhbGwKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcVW5pbnN0YWxsLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcTmV0LVNOTVAgSGVscC5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFJFQURNRS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiCisgIERlbGV0ZSAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcVW5yZWdpc3RlciBBZ2VudCBTZXJ2aWNlLmxuayIKKyAgRGVsZXRlICIkU01QUk9HUkFNU1wkSUNPTlNfR1JPVVBcU2VydmljZVxSZWdpc3RlciBUcmFwIFNlcnZpY2UubG5rIgorICBEZWxldGUgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgVHJhcCBTZXJ2aWNlLmxuayIKKyAgUk1EaXIgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlIgorICBSTURpciAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQIgorICAKICAgOyBEZWxldGUgdGhlIGVudmlyb25tZW50IHZhcmlhYmxlcwogICA7UHVzaCAiU05NUENPTkZQQVRIIgogICA7Q2FsbCB1bi5EZWxldGVFbnZTdHIKQEAgLTEwMzgsNTEgKzE0NDcsMjQgQEAKIAogRnVuY3Rpb24gSXNTU0xJbnN0YWxsZWQKICAgUHVzaCAkUjAKLSAgU3RyQ21wICR7T1BFTlNTTF9SRVFVSVJFRH0gIjAiIGNvbnRpbnVlSW5zdGFsbAotICBSZWFkRW52U3RyICRSMCAid2luZGlyIgotICBJZkZpbGVFeGlzdHMgIiRSMFxzeXN0ZW0zMlxsaWJlYXkzMi5kbGwiIDAgbm9TU0wKLSAgICBHb3RvIGNvbnRpbnVlSW5zdGFsbAotICBub1NTTDoKLSAgICBNZXNzYWdlQm94IE1CX1lFU05PfE1CX0lDT05RVUVTVElPTiAiT3BlblNTTCAoJFIwXHN5c3RlbTMyXGxpYmVheTMyLmRsbCkgZG9lcyBub3QgYXBwZWFyIHRvIGJlIGluc3RhbGxlZC4gIE9wZW5TU0wgaXMgcmVxdWlyZWQgZm9yIHRoaXMgaW5zdGFsbGF0aW9uIG9mIE5ldC1TTk1QLiAgUGxlYXNlIGluc3RhbGwgT3BlblNTTCBmcm9tIGh0dHA6Ly93d3cuc2xwcm93ZWIuY29tL3Byb2R1Y3RzL1dpbjMyT3BlblNTTC5odG1sIGFuZCB0cnkgYWdhaW4uICBXb3VsZCB5b3UgbGlrZSB0byBjb250aW51ZSBpbnN0YWxsaW5nIGFueXdheXM/IiBJRFlFUyBjb250aW51ZUluc3RhbGwKKyAgUHVzaCAkUjEKKworICBHZXRETExWZXJzaW9uIGxpYmVheTMyLmRsbCAkUjAgJFIxCisgIElmRXJyb3JzIG5vU1NMCisKKyAgOyBDb250aW51ZSBpbnN0YWxsaW5nIGlmIHRoZSBETEwgdmVyc2lvbiBpcyA+PSAxLjAuMC4wCisgIEludENtcFUgNjU1MzYgJFIwIGNvbnRpbnVlSW5zdGFsbCBjb250aW51ZUluc3RhbGwKKworICBNZXNzYWdlQm94IE1CX09LICJUaGlzIHBhY2thZ2UgaXMga25vd24gbm90IHRvIHdvcmsgd2l0aCBPcGVuU1NMIHZlcnNpb25zIGJlZm9yZSAxLjAuMC4gIFBsZWFzZSBpbnN0YWxsIHRoZSBsYXRlc3QgT3BlblNTTCB2ZXJzaW9uIGZyb20gaHR0cDovL3d3dy5zbHByb3dlYi5jb20vcHJvZHVjdHMvV2luMzJPcGVuU1NMLmh0bWwgYW5kIHRyeSBhZ2Fpbi4iCiAgIFF1aXQKKworICBub1NTTDoKKyAgICBNZXNzYWdlQm94IE1CX1lFU05PfE1CX0lDT05RVUVTVElPTiAiT3BlblNTTCBkb2VzIG5vdCBhcHBlYXIgdG8gYmUgaW5zdGFsbGVkLiAgT3BlblNTTCBpcyByZXF1aXJlZCBmb3IgdGhpcyBpbnN0YWxsYXRpb24gb2YgTmV0LVNOTVAuICBQbGVhc2UgaW5zdGFsbCBPcGVuU1NMIGZyb20gaHR0cDovL3d3dy5zbHByb3dlYi5jb20vcHJvZHVjdHMvV2luMzJPcGVuU1NMLmh0bWwgYW5kIHRyeSBhZ2Fpbi4gIFdvdWxkIHlvdSBsaWtlIHRvIGNvbnRpbnVlIGluc3RhbGxpbmcgYW55d2F5cz8iIElEWUVTIGNvbnRpbnVlSW5zdGFsbAorICBRdWl0CisgIAogICBjb250aW51ZUluc3RhbGw6CisgIFBvcCAkUjEKICAgUG9wICRSMAogRnVuY3Rpb25FbmQKIAotRnVuY3Rpb24gSW5zdGFsbEFnZW50Ci0gIFNldE91dFBhdGggIiRJTlNURElSXGJpbiIKIAotICA7IERlbGV0ZSBhZ2VudCBvdGhlcndpc2UgcmUtaW5zdGFsbGluZyBhIGRpZmZlcmVudCBhZ2VudCBtYXkgbm90IHdvcmsgYmVjYXVzZSBvZiBkYXRlIHN0YW1wcwotICBEZWxldGUgIiRJTlNURElSXGJpblxzbm1wZC5leGUiICAKLQotICBTdHJDbXAgJHdpbkV4dERMTCAiMSIgc2VjMDJfd2luRXh0RExMIHNlYzAyX25vcm1hbAotCi0gIHNlYzAyX3dpbkV4dERMTDoKLSAgO0ZpbGUgImJpblxzbm1wZC13aW5FeHRETEwuZXhlIgotICBGaWxlIC9vbmFtZT1zbm1wZC5leGUgImJpblxzbm1wZC13aW5FeHRETEwuZXhlIgotICBnb3RvIHNlYzAyX2NvbnRpbnVlCi0KLSAgc2VjMDJfbm9ybWFsOgotICBGaWxlICJiaW5cc25tcGQuZXhlIgotCi0gIHNlYzAyX2NvbnRpbnVlOgotCi0gIFNldE91dFBhdGggIiRJTlNURElSXHNoYXJlXHNubXBcc25tcGNvbmYtZGF0YVxzbm1wZC1kYXRhIgotICBGaWxlICJzaGFyZVxzbm1wXHNubXBjb25mLWRhdGFcc25tcGQtZGF0YVwqLioiCi0gIAotICA7IElmIHdlIGFyZSBvbiBhbiBOVCBzeXN0ZW0gdGhlbiBpbnN0YWxsIHRoZSBzZXJ2aWNlIGJhdGNoIGZpbGVzLgotICBDYWxsIElzTlQKLSAgUG9wICQxCi0gIFN0ckNtcCAkMSAwIE5vU2VydmljZQotICAKLSAgU2V0T3V0UGF0aCAiJElOU1RESVJcIgotICBGaWxlICJyZWdpc3RlcmFnZW50LmJhdCIKLSAgRmlsZSAidW5yZWdpc3RlcmFnZW50LmJhdCIKLSAgQ2FsbCBDcmVhdGVBZ2VudEJhdHMKLQotICBDcmVhdGVEaXJlY3RvcnkgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlIgotICBDcmVhdGVTaG9ydEN1dCAiJFNNUFJPR1JBTVNcJElDT05TX0dST1VQXFNlcnZpY2VcUmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiICIkSU5TVERJUlxyZWdpc3RlcmFnZW50LmJhdCIKLSAgQ3JlYXRlU2hvcnRDdXQgIiRTTVBST0dSQU1TXCRJQ09OU19HUk9VUFxTZXJ2aWNlXFVucmVnaXN0ZXIgQWdlbnQgU2VydmljZS5sbmsiICIkSU5TVERJUlx1bnJlZ2lzdGVyYWdlbnQuYmF0IgotICAKLSAgTm9TZXJ2aWNlOgotRnVuY3Rpb25FbmQKZGlmZiAtLWdpdCBhL3dpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbCBiL3dpbjMyL2Rpc3Qvc2NyaXB0cy9tYW5kaXIyaHRtbAppbmRleCAwOGE2NjMwLi41NDM1ZGFmIDEwMDY0NAotLS0gYS93aW4zMi9kaXN0L3NjcmlwdHMvbWFuZGlyMmh0bWwKKysrIGIvd2luMzIvZGlzdC9zY3JpcHRzL21hbmRpcjJodG1sCkBAIC0zNSw3ICszNSw3IEBACiAKICMgTG9jYXRpb24gb2YgbWFuIHBhZ2VzIHRvIHBhcnNlCiAjIEJlbG93IHRoaXMgZGlyZWN0b3J5IHNob3VsZCBiZSB0aGUgZm9sZGVycyBtYW4xIHRvIG1hbjkuCi0kbWFuX2RpciA9ICIvdG1wL25ldC1zbm1wL21hbi8iOworJG1hbl9kaXIgPSAiL3RtcC9uZXQtc25tcC9zaGFyZS9tYW4vIjsKIAogIyBPdXRwdXQgZm9sZGVyIHRvIGNyZWF0ZSB0aGUgSFRNTCBmaWxlcwogJG1hbl9kaXJfaHRtbCA9ICIvdG1wL25ldC1zbm1wL2h0bWwvIjsKZGlmZiAtLWdpdCBhL3dpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AgYi93aW4zMi9lbmNvZGVfa2V5Y2hhbmdlL2VuY29kZV9rZXljaGFuZ2UuZHNwCmluZGV4IDVlMTkzNjYuLjVhMjUyZjUgMTAwNjQ0Ci0tLSBhL3dpbjMyL2VuY29kZV9rZXljaGFuZ2UvZW5jb2RlX2tleWNoYW5nZS5kc3AKKysrIGIvd2luMzIvZW5jb2RlX2tleWNoYW5nZS9lbmNvZGVfa2V5Y2hhbmdlLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL2VuY29kZV9rZXljaGFuZ2UuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL2VuY29kZV9rZXljaGFuZ2UuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImVuY29kZV9rZXljaGFuZ2UgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9lbmNvZGVfa2V5Y2hhbmdlLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL2VuY29kZV9rZXljaGFuZ2UuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYmFnZW50L01ha2VmaWxlLmluIGIvd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4KaW5kZXggMGI0ZGJjNC4uYWJjZDgyZSAxMDA2NDQKLS0tIGEvd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvbGliYWdlbnQvTWFrZWZpbGUuaW4KQEAgLTksMzEgKzksNjIgQEAKIE5VTEw9bnVsCiAhRU5ESUYgCiAKK0FMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiCisKKworTElCMzJfT0JKUz0gXAorCSIkKElOVERJUilcYWdlbnRfaGFuZGxlci5vYmoiIFwKKwkiJChJTlRESVIpXGFnZW50X2luZGV4Lm9iaiIgXAorCSIkKElOVERJUilcYWdlbnRfcmVhZF9jb25maWcub2JqIiBcCisJIiQoSU5URElSKVxhZ2VudF9yZWdpc3RyeS5vYmoiIFwKKwkiJChJTlRESVIpXGFnZW50X3N5c09SVGFibGUub2JqIiBcCisJIiQoSU5URElSKVxhZ2VudF90cmFwLm9iaiIgXAorCSIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIiBcCisJIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIgXAorCSIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIgXAorCSIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiIFwKKwkiJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIiBcCisJIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiIFwKKwkiJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIiBcCisJIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiIFwKKwkiJChJTlRESVIpXG51bGwub2JqIiBcCisJIiQoSU5URElSKVxvbGRfYXBpLm9iaiIgXAorCSIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIgXAorCSIkKElOVERJUilccm93X21lcmdlLm9iaiIgXAorCSIkKElOVERJUilcc2NhbGFyLm9iaiIgXAorCSIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIgXAorCSIkKElOVERJUilcc2VyaWFsaXplLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hZ2VudC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfZ2V0X3N0YXRpc3RpYy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfdmFycy5vYmoiIFwKKwkiJChJTlRESVIpXHN0YXNoX2NhY2hlLm9iaiIgXAorCSIkKElOVERJUilcc3Rhc2hfdG9fbmV4dC5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIiBcCisJIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIgXAorCSIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiIFwKKwkiJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIgXAorCSIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIiBcCisJIiQoSU5URElSKVx3YXRjaGVyLm9iaiIKKworQ0xFQU4gOgorCS1AZm9yICVmIGluICgkKExJQjMyX09CSlMpKSBkbyBlcmFzZSAlJWYKKwktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCisJLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIgorCisiLi5cbGliXCQoT1VURElSKSIgOgorICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKKworIiQoSU5URElSKSIgOgorICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCisKK0NQUD1jbC5leGUKICFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9oYW5kbGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfaW5kZXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9yZWFkX2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X3JlZ2lzdHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfdHJhcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYWdlbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3ZhcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxsaWJhZ2VudC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVMU0UKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVORElGCiAKIC5jeyQoSU5URElSKX0ub2JqOjoKICAgICQoQ1BQKSBAPDwKQEAgLTUwLDEyMiArODEsMTYgQEAKICAgICQoQ1BQX1BST0opICQ8IAogPDwKIAotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8CiAKIFJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxsaWJhZ2VudC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCiBMSUIzMj1saW5rLmV4ZSAtbGliCiBMSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhZ2VudF9oYW5kbGVyLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfaW5kZXgub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF9yZWFkX2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X3JlZ2lzdHJ5Lm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfdHJhcC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYWdlbnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3ZhcnMub2JqIgogCiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCiAgICAgJChMSUIzMikgQDw8CiAgICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCiA8PAogCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9oYW5kbGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfaW5kZXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudF9yZWFkX2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50X3JlZ2lzdHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnRfdHJhcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYWdlbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3ZhcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBhZ2VudC5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVxsaWJhZ2VudC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxsaWJhZ2VudC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcGFnZW50LmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhZ2VudF9oYW5kbGVyLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfaW5kZXgub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudF9yZWFkX2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50X3JlZ2lzdHJ5Lm9iaiIgXAotCSIkKElOVERJUilcYWdlbnRfdHJhcC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYWdlbnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3ZhcnMub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVxuZXRzbm1wYWdlbnQubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCi0hRU5ESUYgCi0KIAogIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKICFJRiBFWElTVFMoImxpYmFnZW50LmRlcCIpCkBAIC0xNzYsNyArMTAxLDYgQEAKICFFTkRJRiAKIAogCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKIFNPVVJDRT0uLlwuLlxhZ2VudFxhZ2VudF9oYW5kbGVyLmMKIAogIiQoSU5URElSKVxhZ2VudF9oYW5kbGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTIwMCw2ICsxMjQsMTAgQEAKICIkKElOVERJUilcYWdlbnRfcmVnaXN0cnkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAorU09VUkNFPS4uXC4uXGFnZW50XGFnZW50X3N5c09SVGFibGUuYworCisiJChJTlRESVIpXGFnZW50X3N5c09SVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogU09VUkNFPS4uXC4uXGFnZW50XGFnZW50X3RyYXAuYwogCkBAIC0yMTksNyArMTQ3LDE1OCBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xhbGxfaGVscGVycy5jCiAKLSFFTkRJRiAKKyIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xiYWJ5X3N0ZXBzLmMKKworIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYnVsa190b19uZXh0LmMKKworIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xjYWNoZV9oYW5kbGVyLmMKKworIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcZGVidWdfaGFuZGxlci5jCisKKyIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGluc3RhbmNlLmMKKworIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG1vZGVfZW5kX2NhbGwuYworCisiJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtdWx0aXBsZXhlci5jCisKKyIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xudWxsLmMKKworIiQoSU5URElSKVxudWxsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcb2xkX2FwaS5jCisKKyIkKElOVERJUilcb2xkX2FwaS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJlYWRfb25seS5jCisKKyIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccm93X21lcmdlLmMKKworIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXIuYworCisiJChJTlRESVIpXHNjYWxhci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhcl9ncm91cC5jCisKKyIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2VyaWFsaXplLmMKKworIiQoSU5URElSKVxzZXJpYWxpemUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzbm1wX2dldF9zdGF0aXN0aWMuYworCisiJChJTlRESVIpXHNubXBfZ2V0X3N0YXRpc3RpYy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX2NhY2hlLmMKKworIiQoSU5URElSKVxzdGFzaF9jYWNoZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX3RvX25leHQuYworCisiJChJTlRESVIpXHN0YXNoX3RvX25leHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZS5jCisKKyIkKElOVERJUilcdGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9hcnJheS5jCisKKyIkKElOVERJUilcdGFibGVfYXJyYXkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9jb250YWluZXIuYworCisiJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGEuYworCisiJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV90ZGF0YS5jCisKKyIkKElOVERJUilcdGFibGVfdGRhdGEub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhc2V0LmMKKworIiQoSU5URElSKVx0YWJsZV9kYXRhc2V0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfaXRlcmF0b3IuYworCisiJChJTlRESVIpXHRhYmxlX2l0ZXJhdG9yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcd2F0Y2hlci5jCisKKyIkKElOVERJUilcd2F0Y2hlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCmRpZmYgLS1naXQgYS93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYgYi93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kZWYKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDY4NmE1MGUuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotOyAgICAgICBAKCMpbGliYWdlbnQuZGVmICAgIDEuMCAxMC8yNi85NyAoZ21hcnpvdEBiYXluZXR3b3Jrcy5jb20pCi0KLURFU0NSSVBUSU9OICAgICAnVUNEIFNOTVAgQWdlbnQgTGlicmFyeScKLTtDT0RFICAgICAgICAgICAgU0hBUkVEIFJFQUQgRVhFQ1VURQotO0RBVEEgICAgICAgICAgICBTSEFSRUQgUkVBRCBXUklURQotRVhQT1JUUwotCXNlbmRfZWFzeV90cmFwCi0JaW5pdF9tYXN0ZXJfYWdlbnQKLQlpbml0X21pYl9tb2R1bGVzCi0JaW5pdF9hZ2VudAotCWFyZ3ZyZXN0YXJ0bmFtZQotCWFyZ3ZyZXN0YXJ0Ci0JYXJndnJlc3RhcnRwCi0JdXBkYXRlX2NvbmZpZwotCWR1bXBfaWR4X3JlZ2lzdHJ5Ci0JbmV0c25tcF9jbGVhcl9oYW5kbGVyX2xpc3QKLQpkaWZmIC0tZ2l0IGEvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwIGIvd2luMzIvbGliYWdlbnQvbGliYWdlbnQuZHNwCmluZGV4IGY3MGQ0OTQuLjYzNjQyYzIgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYmFnZW50L2xpYmFnZW50LmRzcAorKysgYi93aW4zMi9saWJhZ2VudC9saWJhZ2VudC5kc3AKQEAgLTEwMSwxNiArMTAxLDEyNCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFnZW50XGFnZW50X3N5c09SVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxhZ2VudF90cmFwLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xhbGxfaGVscGVycy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYmFieV9zdGVwcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYnVsa190b19uZXh0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xjYWNoZV9oYW5kbGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xkZWJ1Z19oYW5kbGVyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xpbnN0YW5jZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbW9kZV9lbmRfY2FsbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbXVsdGlwbGV4ZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG51bGwuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG9sZF9hcGkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJlYWRfb25seS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccm93X21lcmdlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhcl9ncm91cC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2VyaWFsaXplLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcc25tcF9hZ2VudC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXGFnZW50XHNubXBfdmFycy5jDQogIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc25tcF9nZXRfc3RhdGlzdGljLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF9jYWNoZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc3Rhc2hfdG9fbmV4dC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2FycmF5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9jb250YWluZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGEuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGFzZXQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2l0ZXJhdG9yLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV90ZGF0YS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcd2F0Y2hlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCiANCkBAIC0xMzMsMTYgKzI0MSw4MCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGFnZW50X3N5c09SVGFibGUuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYWdlbnRfdHJhcC5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxhbGxfaGVscGVycy5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxidWxrX3RvX25leHQuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcZGVidWdfaGFuZGxlci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxpbnN0YW5jZS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxtdWx0aXBsZXhlci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxudWxsLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XG9sZF9hcGkuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRccmVhZF9vbmx5LmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHNlcmlhbGl6ZS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzbm1wX2FnZW50LmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHNubXBfdmFycy5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9hcnJheS5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9kYXRhLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2RhdGFzZXQuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfaXRlcmF0b3IuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfdGRhdGEuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBFbmQgVGFyZ2V0DQogIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4gYi93aW4zMi9saWJoZWxwZXJzL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAyNjNiY2QyLi4wMDAwMDAwCi0tLSBhL3dpbjMyL2xpYmhlbHBlcnMvTWFrZWZpbGUuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0MDUgKzAsMCBAQAotUFJPR05BTUU9Ci1DRkc9Ci1PVVRESVI9Ci1JTlRESVI9Ci0KLSFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgotTlVMTD0KLSFFTFNFIAotTlVMTD1udWwKLSFFTkRJRiAKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG51bGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvbGRfYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccm93X21lcmdlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhbGFyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2VyaWFsaXplLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3YXRjaGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcbGliaGVscGVycy5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxsaWJoZWxwZXJzLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIiBcCi0JIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIgXAotCSIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIgXAotCSIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiIFwKLQkiJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIiBcCi0JIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiIFwKLQkiJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIiBcCi0JIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiIFwKLQkiJChJTlRESVIpXG51bGwub2JqIiBcCi0JIiQoSU5URElSKVxvbGRfYXBpLm9iaiIgXAotCSIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIgXAotCSIkKElOVERJUilccm93X21lcmdlLm9iaiIgXAotCSIkKElOVERJUilcc2NhbGFyLm9iaiIgXAotCSIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIgXAotCSIkKElOVERJUilcc2VyaWFsaXplLm9iaiIgXAotCSIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIiBcCi0JIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIgXAotCSIkKElOVERJUilcdGFibGUub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiIFwKLQkiJChJTlRESVIpXHdhdGNoZXIub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcGhlbHBlcnMubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG51bGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvbGRfYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccm93X21lcmdlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhbGFyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2VyaWFsaXplLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2F0Y2hlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBoZWxwZXJzLmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcbGliaGVscGVycy5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxsaWJoZWxwZXJzLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIiBcCi0JIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIgXAotCSIkKElOVERJUilcYnVsa190b19uZXh0Lm9iaiIgXAotCSIkKElOVERJUilcY2FjaGVfaGFuZGxlci5vYmoiIFwKLQkiJChJTlRESVIpXGRlYnVnX2hhbmRsZXIub2JqIiBcCi0JIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiIFwKLQkiJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIiBcCi0JIiQoSU5URElSKVxtdWx0aXBsZXhlci5vYmoiIFwKLQkiJChJTlRESVIpXG51bGwub2JqIiBcCi0JIiQoSU5URElSKVxvbGRfYXBpLm9iaiIgXAotCSIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIgXAotCSIkKElOVERJUilccm93X21lcmdlLm9iaiIgXAotCSIkKElOVERJUilcc2NhbGFyLm9iaiIgXAotCSIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIgXAotCSIkKElOVERJUilcc2VyaWFsaXplLm9iaiIgXAotCSIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIiBcCi0JIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIgXAotCSIkKElOVERJUilcdGFibGUub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9hcnJheS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2NvbnRhaW5lci5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2RhdGEub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV90ZGF0YS5vYmoiIFwKLQkiJChJTlRESVIpXHRhYmxlX2RhdGFzZXQub2JqIiBcCi0JIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiIFwKLQkiJChJTlRESVIpXHdhdGNoZXIub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVxuZXRzbm1waGVscGVycy5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KLSFFTkRJRiAKLQotCi0hSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgotIUlGIEVYSVNUUygibGliaGVscGVycy5kZXAiKQotIUlOQ0xVREUgImxpYmhlbHBlcnMuZGVwIgotIUVMU0UgCi0hTUVTU0FHRSBXYXJuaW5nOiBjYW5ub3QgZmluZCAibGliaGVscGVycy5kZXAiCi0hRU5ESUYgCi0hRU5ESUYgCi0KLQotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xhbGxfaGVscGVycy5jCi0KLSIkKElOVERJUilcYWxsX2hlbHBlcnMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xiYWJ5X3N0ZXBzLmMKLQotIiQoSU5URElSKVxiYWJ5X3N0ZXBzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcYnVsa190b19uZXh0LmMKLQotIiQoSU5URElSKVxidWxrX3RvX25leHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xjYWNoZV9oYW5kbGVyLmMKLQotIiQoSU5URElSKVxjYWNoZV9oYW5kbGVyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcZGVidWdfaGFuZGxlci5jCi0KLSIkKElOVERJUilcZGVidWdfaGFuZGxlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGluc3RhbmNlLmMKLQotIiQoSU5URElSKVxpbnN0YW5jZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXG1vZGVfZW5kX2NhbGwuYwotCi0iJChJTlRESVIpXG1vZGVfZW5kX2NhbGwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtdWx0aXBsZXhlci5jCi0KLSIkKElOVERJUilcbXVsdGlwbGV4ZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xudWxsLmMKLQotIiQoSU5URElSKVxudWxsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcb2xkX2FwaS5jCi0KLSIkKElOVERJUilcb2xkX2FwaS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHJlYWRfb25seS5jCi0KLSIkKElOVERJUilccmVhZF9vbmx5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccm93X21lcmdlLmMKLQotIiQoSU5URElSKVxyb3dfbWVyZ2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzY2FsYXIuYwotCi0iJChJTlRESVIpXHNjYWxhci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhcl9ncm91cC5jCi0KLSIkKElOVERJUilcc2NhbGFyX2dyb3VwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2VyaWFsaXplLmMKLQotIiQoSU5URElSKVxzZXJpYWxpemUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF9jYWNoZS5jCi0KLSIkKElOVERJUilcc3Rhc2hfY2FjaGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF90b19uZXh0LmMKLQotIiQoSU5URElSKVxzdGFzaF90b19uZXh0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGUuYwotCi0iJChJTlRESVIpXHRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfYXJyYXkuYwotCi0iJChJTlRESVIpXHRhYmxlX2FycmF5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfY29udGFpbmVyLmMKLQotIiQoSU5URElSKVx0YWJsZV9jb250YWluZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZV9kYXRhLmMKLQotIiQoSU5URElSKVx0YWJsZV9kYXRhLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfdGRhdGEuYwotCi0iJChJTlRESVIpXHRhYmxlX3RkYXRhLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YXNldC5jCi0KLSIkKElOVERJUilcdGFibGVfZGF0YXNldC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2l0ZXJhdG9yLmMKLQotIiQoSU5URElSKVx0YWJsZV9pdGVyYXRvci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHdhdGNoZXIuYwotCi0iJChJTlRESVIpXHdhdGNoZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0KLSFFTkRJRiAKLQotCmRpZmYgLS1naXQgYS93aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwIGIvd2luMzIvbGliaGVscGVycy9saWJoZWxwZXJzLmRzcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTkwYzU2ZC4uMDAwMDAwMAotLS0gYS93aW4zMi9saWJoZWxwZXJzL2xpYmhlbHBlcnMuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsMjUyICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibGliaGVscGVycyIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gR2VuZXJhdGVkIEJ1aWxkIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jICoqIERPIE5PVCBFRElUICoqDQotDQotIyBUQVJHVFlQRSAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiIDB4MDEwNA0KLQ0KLUNGRz1saWJoZWxwZXJzIC0gV2luMzIgRGVidWcNCi0hTUVTU0FHRSBUaGlzIGlzIG5vdCBhIHZhbGlkIG1ha2VmaWxlLiBUbyBidWlsZCB0aGlzIHByb2plY3QgdXNpbmcgTk1BS0UsDQotIU1FU1NBR0UgdXNlIHRoZSBFeHBvcnQgTWFrZWZpbGUgY29tbWFuZCBhbmQgcnVuDQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImxpYmhlbHBlcnMubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgImxpYmhlbHBlcnMubWFrIiBDRkc9ImxpYmhlbHBlcnMgLSBXaW4zMiBEZWJ1ZyINCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBQb3NzaWJsZSBjaG9pY2VzIGZvciBjb25maWd1cmF0aW9uIGFyZToNCi0hTUVTU0FHRSANCi0hTUVTU0FHRSAibGliaGVscGVycyAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJsaWJoZWxwZXJzIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KLSFNRVNTQUdFIA0KLQ0KLSMgQmVnaW4gUHJvamVjdA0KLSMgUFJPUCBBbGxvd1BlckNvbmZpZ0RlcGVuZGVuY2llcyAwDQotIyBQUk9QIFNjY19Qcm9qTmFtZSAiIg0KLSMgUFJPUCBTY2NfTG9jYWxQYXRoICIiDQotQ1BQPWNsLmV4ZQ0KLVJTQz1yYy5leGUNCi0NCi0hSUYgICIkKENGRykiID09ICJsaWJoZWxwZXJzIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIi4uL2xpYi9yZWxlYXNlIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dYIC9PMiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBDUFAgL25vbG9nbyAvTUQgL1czIC9HWCAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOQ0KLSMgQUREIFJTQyAvbCAweDQwOQ0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJQjMyPWxpbmsuZXhlIC1saWINCi0jIEFERCBCQVNFIExJQjMyIC9ub2xvZ28NCi0jIEFERCBMSUIzMiAvbm9sb2dvIC9vdXQ6Ii4uL2xpYi9yZWxlYXNlL25ldHNubXBoZWxwZXJzLmxpYiINCi0NCi0hRUxTRUlGICAiJChDRkcpIiA9PSAibGliaGVscGVycyAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuLi9saWIvZGVidWciDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5DQotIyBBREQgUlNDIC9sIDB4NDA5DQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElCMzI9bGluay5leGUgLWxpYg0KLSMgQUREIEJBU0UgTElCMzIgL25vbG9nbw0KLSMgQUREIExJQjMyIC9ub2xvZ28gL291dDoiLi4vbGliL2RlYnVnL25ldHNubXBoZWxwZXJzLmxpYiINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgImxpYmhlbHBlcnMgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAibGliaGVscGVycyAtIFdpbjMyIERlYnVnIg0KLSMgQmVnaW4gR3JvdXAgIlNvdXJjZSBGaWxlcyINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgImNwcDtjO2N4eDtyYztkZWY7cjtvZGw7aWRsO2hwajtiYXQiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGFsbF9oZWxwZXJzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xiYWJ5X3N0ZXBzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xidWxrX3RvX25leHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGNhY2hlX2hhbmRsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGRlYnVnX2hhbmRsZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXGluc3RhbmNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtb2RlX2VuZF9jYWxsLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xtdWx0aXBsZXhlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcbnVsbC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcb2xkX2FwaS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNccmVhZF9vbmx5LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xyb3dfbWVyZ2UuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHNjYWxhci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcc2NhbGFyX2dyb3VwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzZXJpYWxpemUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHN0YXNoX2NhY2hlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1xzdGFzaF90b19uZXh0LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x0YWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfYXJyYXkuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2NvbnRhaW5lci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfZGF0YS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGhlbHBlcnNcdGFibGVfdGRhdGEuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2RhdGFzZXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxoZWxwZXJzXHRhYmxlX2l0ZXJhdG9yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcaGVscGVyc1x3YXRjaGVyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYWxsX2hlbHBlcnMuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcYnVsa190b19uZXh0LmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XGRlYnVnX2hhbmRsZXIuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcaW5zdGFuY2UuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcbXVsdGlwbGV4ZXIuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcbnVsbC5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxvbGRfYXBpLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHJlYWRfb25seS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFxzZXJpYWxpemUuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGUuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfYXJyYXkuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcYWdlbnRcdGFibGVfZGF0YS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV90ZGF0YS5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxhZ2VudFx0YWJsZV9kYXRhc2V0LmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGFnZW50XHRhYmxlX2l0ZXJhdG9yLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4gYi93aW4zMi9saWJuZXRzbm1wdHJhcGQvTWFrZWZpbGUuaW4KaW5kZXggYjVjOGIyNS4uMzgyNDkxOSAxMDA2NDQKLS0tIGEvd2luMzIvbGlibmV0c25tcHRyYXBkL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9NYWtlZmlsZS5pbgpAQCAtMTksNyArMTksNiBAQAogCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdHJhcGRfaGFuZGxlcnMub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdHJhcGRfbG9nLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcc25tcHRyYXBkX2F1dGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCkBAIC0zMiw3ICszMSw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcbGlibmV0c25tcHRyYXBkLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKIC5jeyQoSU5URElSKX0ub2JqOjoKICAgICQoQ1BQKSBAPDwKQEAgLTc2LDcgKzc1LDYgQEAKIAkiJChJTlRESVIpXHNubXB0cmFwZF9oYW5kbGVycy5vYmoiIFwKIAkiJChJTlRESVIpXHNubXB0cmFwZF9sb2cub2JqIiBcCiAJIiQoSU5URElSKVxzbm1wdHJhcGRfYXV0aC5vYmoiIFwKLQkiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKIAogIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcHRyYXBkLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQpAQCAtOTQsNyArOTIsNiBAQAogCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdHJhcGRfaGFuZGxlcnMub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdHJhcGRfbG9nLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcc25tcHRyYXBkX2F1dGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKQEAgLTEwOCw3ICsxMDUsNyBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcbGlibmV0c25tcHRyYXBkLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogLmN7JChJTlRESVIpfS5vYmo6OgogICAgJChDUFApIEA8PApAQCAtMTUyLDcgKzE0OSw2IEBACiAJIiQoSU5URElSKVxzbm1wdHJhcGRfaGFuZGxlcnMub2JqIiBcCiAJIiQoSU5URElSKVxzbm1wdHJhcGRfbG9nLm9iaiIgXAogCSIkKElOVERJUilcc25tcHRyYXBkX2F1dGgub2JqIiBcCi0JIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgXAogCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiCiAKICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXB0cmFwZC5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKQEAgLTE5NywxMSArMTkzLDYgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuYwotCi0iJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQogU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5jCiAKICIkKElOVERJUilcd2luc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCmRpZmYgLS1naXQgYS93aW4zMi9saWJuZXRzbm1wdHJhcGQvbGlibmV0c25tcHRyYXBkLmRzcCBiL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwCmluZGV4IGQ1NDc0M2IuLjA4YjQxZmYgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwCisrKyBiL3dpbjMyL2xpYm5ldHNubXB0cmFwZC9saWJuZXRzbm1wdHJhcGQuZHNwCkBAIC04OSwzNyArODksMzYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhcHBzXHNubXB0cmFwZF9hdXRoLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wdHJhcGRfaGFuZGxlcnMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KIFNPVVJDRT0uLlwuLlxhcHBzXHNubXB0cmFwZF9sb2cuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhcHBzXHNubXB0cmFwZF9hdXRoLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KIA0KICMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Ii4uXC4uXGFwcHNcc25tcHRyYXBkX2F1dGguaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGFwcHNcc25tcHRyYXBkX2hhbmRsZXJzLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPSIuLlwuLlxhcHBzXHNubXB0cmFwZF9sb2cuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFwcHNcc25tcHRyYXBkX2F1dGguaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBFbmQgVGFyZ2V0DQogIyBFbmQgUHJvamVjdA0KLQ0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNkbGwuZHN3IGIvd2luMzIvbGlic2RsbC5kc3cKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDE1NWM5OTkuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGlic2RsbC5kc3cKKysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi1NaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJhZ2VudCI9Ii5cbGliYWdlbnRcbGliYWdlbnQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGliaGVscGVycyI9Ii5cbGliaGVscGVyc1xsaWJoZWxwZXJzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYnNubXBfZGxsIj0iLlxsaWJzbm1wX2RsbFxsaWJzbm1wX2RsbC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJuZXRzbm1wbWlicyI9Ii5cbmV0c25tcG1pYnNcbmV0c25tcG1pYnMuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGlibmV0c25tcHRyYXBkIj0iLlxsaWJuZXRzbm1wdHJhcGRcbGlibmV0c25tcHRyYXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotR2xvYmFsOg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08Mz4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbiBiL3dpbjMyL2xpYnNubXAvTWFrZWZpbGUuaW4KaW5kZXggOWIzNmJiOC4uOThkODNjOCAxMDA2NDQKLS0tIGEvd2luMzIvbGlic25tcC9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9saWJzbm1wL01ha2VmaWxlLmluCkBAIC0yLDYgKzIsNyBAQAogQ0ZHPQogT1VURElSPQogSU5URElSPQorU0RLPQogCiAhSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKIE5VTEw9CkBAIC05LDI1MCArMTAsOTQgQEAKIE5VTEw9bnVsCiAhRU5ESUYgCiAKK0FMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgorCitMSUIzMl9PQkpTPSBcCisJIiQoSU5URElSKVxhc24xLm9iaiIgXAorCSIkKElOVERJUilcY2FsbGJhY2sub2JqIiBcCisJIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIgXAorCSIkKElOVERJUilcY2xvc2VkaXIub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXIub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIgXAorCSIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIgXAorCSIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiIFwKKwkiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIiBcCisJIiQoSU5URElSKVxnZXRvcHQub2JqIiBcCisJIiQoSU5URElSKVxnZXR0aW1lb2ZkYXkub2JqIiBcCisJIiQoSU5URElSKVxpbmV0X250b3Aub2JqIiBcCisJIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIiBcCisJIiQoSU5URElSKVxpbnQ2NC5vYmoiIFwKKwkiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgXAorCSIkKElOVERJUilcbGFyZ2VfZmRfc2V0Lm9iaiIgXAorCSIkKElOVERJUilcbGNkX3RpbWUub2JqIiBcCisJIiQoSU5URElSKVxtZDUub2JqIiBcCisJIiQoSU5URElSKVxtaWIub2JqIiBcCisJIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIgXAorCSIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIgXAorCSIkKElOVERJUilcb3BlbmRpci5vYmoiIFwKKwkiJChJTlRESVIpXHBhcnNlLm9iaiIgXAorCSIkKElOVERJUilccmVhZF9jb25maWcub2JqIiBcCisJIiQoSU5URElSKVxyZWFkZGlyLm9iaiIgXAorCSIkKElOVERJUilcc2NhcGkub2JqIiBcCisJIiQoSU5URElSKVxzbm1wLXRjLm9iaiIgXAorCSIkKElOVERJUilcc25tcC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBJUHY0QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBTb2NrZXRCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFRDUEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUElQdjRCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYXBpLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9hdXRoLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9jbGllbnQub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9lbnVtLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXB1c20ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wdjMub2JqIiBcCisJIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIgXAorCSIkKElOVERJUilcc3RybGNweS5vYmoiIFwKKwkiJChJTlRESVIpXHN0cnRva19yLm9iaiIgXAorCSIkKElOVERJUilcc3RydG91bGwub2JqIiBcCisJIiQoSU5URElSKVxzeXN0ZW0ub2JqIiBcCisJIiQoSU5URElSKVx0b29scy5vYmoiIFwKKwkiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiBcCisJIiQoSU5URElSKVx2YWNtLm9iaiIgXAorCSIkKElOVERJUilcd2lucGlwZS5vYmoiCishSUYgIiQoU0RLKSIgPT0gInRydWUiCitMSUIzMl9PQkpTPSQoTElCMzJfT0JKUylcCisJIiQoSU5URElSKVxzbm1wSVB2NkJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIKKyFFTkRJRgorCitDTEVBTiA6CisJLUBmb3IgJWYgaW4gJChMSUIzMl9PQkpTKSBkbyBlcmFzZSAlJWYKKwktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgorCisiLi5cbGliXCQoT1VURElSKSIgOgorICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKKworIiQoSU5URElSKSIgOgorICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCisKK0NQUD1jbC5leGUKICFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXNuMS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGdldG9wdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGludDY0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9udG9wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2V5dG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsY2RfdGltZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1kNS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXJzZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLXRjLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZW51bS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdXNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHYzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjcHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cnRva19yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2lucGlwZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIKLQotIi4uXGxpYlwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXCQoUFJPR05BTUUpLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmxpYiIgCi1MSUIzMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhc24xLm9iaiIgXAotCSIkKElOVERJUilcY2FsbGJhY2sub2JqIiBcCi0JIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIgXAotCSIkKElOVERJUilcY211X2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIiBcCi0JIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIgXAotCSIkKElOVERJUilcZ2V0b3B0Lm9iaiIgXAotCSIkKElOVERJUilcaW50NjQub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X250b3Aub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIiBcCi0JIiQoSU5URElSKVxrZXl0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgXAotCSIkKElOVERJUilcbWQ1Lm9iaiIgXAotCSIkKElOVERJUilcbWliLm9iaiIgXAotCSIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiIFwKLQkiJChJTlRESVIpXHBhcnNlLm9iaiIgXAotCSIkKElOVERJUilccmVhZF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxzY2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAtdGMub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hdXRoLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9jbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9lbnVtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB1c20ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdjMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIgXAotCSIkKElOVERJUilcc3RybGNweS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbS5vYmoiIFwKLQkiJChJTlRESVIpXHRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcc3RydG9rX3Iub2JqIiBcCi0JIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnBpcGUub2JqIiBcCi0JIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAhRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXNuMS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGdldG9wdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGludDY0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9udG9wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilca2V5dG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsY2RfdGltZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1kNS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXJzZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2NhcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLXRjLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZW51bS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdXNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHYzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjcHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cnRva19yLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnBpcGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRU5ESUYKIAogLmN7JChJTlRESVIpfS5vYmo6OgogICAgJChDUFApIEA8PApAQCAtMjY5LDkxICsxMTQsMTUgQEAKICAgICQoQ1BQX1BST0opICQ8IAogPDwKIAotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8CiAKIFJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVwkKFBST0dOQU1FKS5ic2MiIAotQlNDMzJfU0JSUz0gXAotCiBMSUIzMj1saW5rLmV4ZSAtbGliCiBMSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcC5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXNuMS5vYmoiIFwKLQkiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIgXAotCSIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiIFwKLQkiJChJTlRESVIpXGNtdV9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXIub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfYmluYXJ5X2FycmF5Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2l0ZXJhdG9yLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2xpc3Rfc3NsbC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9udWxsLm9iaiIgXAotCSIkKElOVERJUilcZGF0YV9saXN0Lm9iaiIgXAotCSIkKElOVERJUilcZGVmYXVsdF9zdG9yZS5vYmoiIFwKLQkiJChJTlRESVIpXGdldG9wdC5vYmoiIFwKLQkiJChJTlRESVIpXGludDY0Lm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9udG9wLm9iaiIgXAotCSIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIgXAotCSIkKElOVERJUilca2V5dG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIFwKLQkiJChJTlRESVIpXG1kNS5vYmoiIFwKLQkiJChJTlRESVIpXG1pYi5vYmoiIFwKLQkiJChJTlRESVIpXG10X3N1cHBvcnQub2JqIiBcCi0JIiQoSU5URElSKVxvaWRfc3Rhc2gub2JqIiBcCi0JIiQoSU5URElSKVxwYXJzZS5vYmoiIFwKLQkiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcc2NhcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLXRjLm9iaiIgXAotCSIkKElOVERJUilcc25tcC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZW51bS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIgXAotCSIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgXAotCSIkKElOVERJUilcc25tcHYzLm9iaiIgXAotCSIkKElOVERJUilcc3RybGNhdC5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjcHkub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW0ub2JqIiBcCi0JIiQoSU5URElSKVx0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXHN0cnRva19yLm9iaiIgXAotCSIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY20ub2JqIiBcCi0JIiQoSU5URElSKVx3aW5waXBlLm9iaiIgXAotCSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiCi0KICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCiAgICAgJChMSUIzMikgQDw8CiAgICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCiA8PAogCi0hRU5ESUYgCi0KIAogIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKICFJRiBFWElTVFMoIiQoUFJPR05BTUUpLmRlcCIpCkBAIC0zNjQsNyArMTMzLDYgQEAKICFFTkRJRiAKIAogCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGFzbjEuYwogCiAiJChJTlRESVIpXGFzbjEub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtMzgzLDkgKzE1MSw5IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXGNtdV9jb21wYXQuYworU09VUkNFPS4uXC4uXHNubXBsaWJcY2xvc2VkaXIuYwogCi0iJChJTlRESVIpXGNtdV9jb21wYXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorIiQoSU5URElSKVxjbG9zZWRpci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKQEAgLTQzMSwxNSArMTk5LDIxIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYworCisiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXRvcHQuYwogCiAiJChJTlRESVIpXGdldG9wdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKLVNPVVJDRT0uLlwuLlxzbm1wbGliXGludDY0LmMKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGdldHRpbWVvZmRheS5jCiAKLSIkKElOVERJUilcaW50NjQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorIiQoSU5URElSKVxnZXR0aW1lb2ZkYXkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCkBAIC00NTUsMTIgKzIyOSwyNCBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxpbnQ2NC5jCisKKyIkKElOVERJUilcaW50NjQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxrZXl0b29scy5jCiAKICIkKElOVERJUilca2V5dG9vbHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxsYXJnZV9mZF9zZXQuYworCisiJChJTlRESVIpXGxhcmdlX2ZkX3NldC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXGxjZF90aW1lLmMKIAogIiQoSU5URElSKVxsY2RfdGltZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC00OTEsNiArMjc3LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXG9wZW5kaXIuYworCisiJChJTlRESVIpXG9wZW5kaXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxwYXJzZS5jCiAKICIkKElOVERJUilccGFyc2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTAzLDYgKzI5NSwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxyZWFkZGlyLmMKKworIiQoSU5URElSKVxyZWFkZGlyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc2NhcGkuYwogCiAiJChJTlRESVIpXHNjYXBpLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTUyMSw2ICszMTksNzIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wQ2FsbGJhY2tEb21haW4uYworCisiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjRCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wSVB2NEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY2QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcElQdjZCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wU29ja2V0QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFNvY2tldEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BCYXNlRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVENQQmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUERvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUElQdjZEb21haW4uYworCisiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQQmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY0QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUElQdjRCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NkRvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX2FsYXJtLmMKIAogIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTU3NSw2ICs0MzksMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMKKworIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3RyYW5zcG9ydC5jCiAKICIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTg3LDQyICs0NTcsNiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYwotCi0iJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBDYWxsYmFja0RvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUERvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BJUHY2RG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQSVB2NkRvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFVEUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wdXNtLmMKIAogIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTY0Nyw2ICs0ODEsMTggQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYworCisiJChJTlRESVIpXHN0cnRva19yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG91bGwuYworCisiJChJTlRESVIpXHN0cnRvdWxsLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc3lzdGVtLmMKIAogIiQoSU5URElSKVxzeXN0ZW0ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNjU5LDEyICs1MDUsNiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jCi0KLSIkKElOVERJUilcc3RydG9rX3Iub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx1Y2RfY29tcGF0LmMKIAogIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTY4MywxMSArNTIzLDMgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jCi0KLSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQpkaWZmIC0tZ2l0IGEvd2luMzIvbGlic25tcC9saWJzbm1wLmRzcCBiL3dpbjMyL2xpYnNubXAvbGlic25tcC5kc3AKaW5kZXggMTZlZWEyZC4uMjM4NjMzMSAxMDA2NDQKLS0tIGEvd2luMzIvbGlic25tcC9saWJzbm1wLmRzcAorKysgYi93aW4zMi9saWJzbm1wL2xpYnNubXAuZHNwCkBAIC05Nyw3ICs5Nyw3IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxjbXVfY29tcGF0LmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxjbG9zZWRpci5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMTI5LDEwICsxMjksMTggQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGZkX2V2ZW50X21hbmFnZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXGdldG9wdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0dGltZW9mZGF5LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxpbmV0X250b3AuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE0OSw2ICsxNTcsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGxhcmdlX2ZkX3NldC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcbGNkX3RpbWUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE2OSw2ICsxODEsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXG9wZW5kaXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHBhcnNlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xNzcsNiArMTkzLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxyZWFkZGlyLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzY2FwaS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjI1LDYgKzI0NSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3RyYW5zcG9ydC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjMzLDI3ICsyNTcsNTEgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wQWxpYXNEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBDYWxsYmFja0RvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wQ2FsbGJhY2tEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcElQdjRCYXNlRG9tYWluLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQSVB2NkRvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NkJhc2VEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFNvY2tldEJhc2VEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBVRFBJUHY2RG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BCYXNlRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUElQdjZEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUEJhc2VEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUERvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NEJhc2VEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjZEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTI3Myw2ICszMjEsMTQgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b3VsbC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcc3lzdGVtLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yODEsMTAgKzMzNyw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzdHJ0b2tfci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPS4uXC4uXHNubXBsaWJcdWNkX2NvbXBhdC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMjk1LDEwICszNDcsNiBAQAogDQogU09VUkNFPS4uXC4uXHNubXBsaWJcd2lucGlwZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCiAjIEVuZCBHcm91cA0KICMgQmVnaW4gR3JvdXAgIkhlYWRlciBGaWxlcyINCiANCkBAIC0zMTcsMTAgKzM2NSw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxjbXVfY29tcGF0LmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcY29udGFpbmVyLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMzMzLDYgKzM3NywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZmRfZXZlbnRfbWFuYWdlci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGdldG9wdC5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTM0NSw2ICszOTMsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGxhcmdlX2ZkX3NldC5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGxjZF90aW1lLmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtNDM3LDYgKzQ4OSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcc3RydG9rX3IuaCINCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzeXN0ZW0uaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC00NDUsMTAgKzUwMSw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzdHJ0b2tfci5oIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHVjZF9jb21wYXQuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCmRpZmYgLS1naXQgYS93aW4zMi9saWJzbm1wX2RsbC9NYWtlZmlsZS5pbiBiL3dpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluCmluZGV4IGJlZjcwYWUuLjBhYWY0MWIgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL2xpYnNubXBfZGxsL01ha2VmaWxlLmluCkBAIC0yLDcgKzIsNyBAQAogQ0ZHPQogT1VURElSPQogSU5URElSPQotU1NMPQorU0RLPQogCiAhSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKIE5VTEw9CkBAIC0xMCw3MSArMTAsODQgQEAKIE5VTEw9bnVsCiAhRU5ESUYgCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KIEFMTCA6ICIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsIgogCitMSU5LMzJfT0JKUz0gXAorCSIkKElOVERJUilcYXNuMS5vYmoiIFwKKwkiJChJTlRESVIpXGNhbGxiYWNrLm9iaiIgXAorCSIkKElOVERJUilcY2hlY2tfdmFyYmluZC5vYmoiIFwKKwkiJChJTlRESVIpXGNsb3NlZGlyLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyLm9iaiIgXAorCSIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiIFwKKwkiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIiBcCisJIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiIFwKKwkiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiIFwKKwkiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIiBcCisJIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIgXAorCSIkKElOVERJUilcZ2V0b3B0Lm9iaiIgXAorCSIkKElOVERJUilcZ2V0dGltZW9mZGF5Lm9iaiIgXAorCSIkKElOVERJUilcaW5ldF9udG9wLm9iaiIgXAorCSIkKElOVERJUilcaW5ldF9wdG9uLm9iaiIgXAorCSIkKElOVERJUilcaW50NjQub2JqIiBcCisJIiQoSU5URElSKVxrZXl0b29scy5vYmoiIFwKKwkiJChJTlRESVIpXGxhcmdlX2ZkX3NldC5vYmoiIFwKKwkiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgXAorCSIkKElOVERJUilcbWQ1Lm9iaiIgXAorCSIkKElOVERJUilcbWliLm9iaiIgXAorCSIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiIFwKKwkiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiIFwKKwkiJChJTlRESVIpXG9wZW5kaXIub2JqIiBcCisJIiQoSU5URElSKVxwYXJzZS5vYmoiIFwKKwkiJChJTlRESVIpXHJlYWRfY29uZmlnLm9iaiIgXAorCSIkKElOVERJUilccmVhZGRpci5vYmoiIFwKKwkiJChJTlRESVIpXHNjYXBpLm9iaiIgXAorCSIkKElOVERJUilcc25tcC10Yy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXAub2JqIiBcCisJIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wSVB2NEJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wU29ja2V0QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBUQ1BCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBCYXNlRG9tYWluLm9iaiIgXAorCSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBJUHY0QmFzZURvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYWxhcm0ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX2FwaS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfYXV0aC5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfY2xpZW50Lm9iaiIgXAorCSIkKElOVERJUilcc25tcF9kZWJ1Zy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfZW51bS5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfbG9nZ2luZy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfcGFyc2VfYXJncy5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBfc2VjbW9kLm9iaiIgXAorCSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgXAorCSIkKElOVERJUilcc25tcF90cmFuc3BvcnQub2JqIiBcCisJIiQoSU5URElSKVxzbm1wX3ZlcnNpb24ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wdXNtLm9iaiIgXAorCSIkKElOVERJUilcc25tcHYzLm9iaiIgXAorCSIkKElOVERJUilcc3RybGNhdC5vYmoiIFwKKwkiJChJTlRESVIpXHN0cmxjcHkub2JqIiBcCisJIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIFwKKwkiJChJTlRESVIpXHN0cnRvdWxsLm9iaiIgXAorCSIkKElOVERJUilcc3lzdGVtLm9iaiIgXAorCSIkKElOVERJUilcdG9vbHMub2JqIiBcCisJIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgXAorCSIkKElOVERJUilcdmFjbS5vYmoiIFwKKwkiJChJTlRESVIpXHdpbnBpcGUub2JqIgorIUlGICIkKFNESykiID09ICJ0cnVlIgorTElOSzMyX09CSlM9JChMSU5LMzJfT0JKUylcCisJIiQoSU5URElSKVxzbm1wSVB2NkJhc2VEb21haW4ub2JqIiBcCisJIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIFwKKwkiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIKKyFFTkRJRgogCiBDTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFzbjEub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjYWxsYmFjay5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxnZXRvcHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbnQ2NC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtleXRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbGNkX3RpbWUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtZDUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFyc2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNjYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcC10Yy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hcGkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfZGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcHVzbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB2My5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN0cmxjYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdG9vbHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnBpcGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgorCS1AZm9yICVmIGluICgkKExJTkszMl9PQkpTKSkgZG8gZXJhc2UgJSVmCiAJLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmV4cCIKIAktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbC5tYW5pZmVzdCIKIAogIi4uXGxpYlwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGxpYlwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGxpYlwkKE9VVERJUikiCkBAIC04Niw3ICs5OSwxMSBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJORVRTTk1QX0RMTCIgL0ZwIiQoSU5URElSKVxsaWJzbm1wX2RsbC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRCAiTkVUU05NUF9ETEwiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRUxTRQorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0QgIk5FVFNOTVBfRExMIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVORElGCiAKIC5jeyQoSU5URElSKX0ub2JqOjoKICAgICQoQ1BQKSBAPDwKQEAgLTEwMywyNzIgKzEyMCwyMyBAQAogICAgJChDUFBfUFJPSikgJDwgCiA8PAogCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQogTVRMPW1pZGwuZXhlCiBNVExfUFJPSj0vbm9sb2dvIC9EICJOREVCVUciIC9ta3R5cGxpYjIwMyAvbyAiTlVMIiAvd2luMzIgCiBSU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbGlic25tcF9kbGwuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9YWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RsbCAvcGRiOiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvZGVmOiIuXGxpYnNubXAuZGVmIiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsIiAvaW1wbGliOiIuLi9saWIvJChPVVRESVIpXG5ldHNubXAubGliIiAKLUxJTkszMl9PQkpTPSBcCi0JIiQoSU5URElSKVxhc24xLm9iaiIgXAotCSIkKElOVERJUilcY2FsbGJhY2sub2JqIiBcCi0JIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIgXAotCSIkKElOVERJUilcY211X2NvbXBhdC5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIiBcCi0JIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIgXAotCSIkKElOVERJUilcZ2V0b3B0Lm9iaiIgXAotCSIkKElOVERJUilcaW50NjQub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X250b3Aub2JqIiBcCi0JIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIiBcCi0JIiQoSU5URElSKVxrZXl0b29scy5vYmoiIFwKLQkiJChJTlRESVIpXGxjZF90aW1lLm9iaiIgXAotCSIkKElOVERJUilcbWQ1Lm9iaiIgXAotCSIkKElOVERJUilcbWliLm9iaiIgXAotCSIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiIFwKLQkiJChJTlRESVIpXHBhcnNlLm9iaiIgXAotCSIkKElOVERJUilccmVhZF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxzY2FwaS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAtdGMub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hdXRoLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9jbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9lbnVtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB1c20ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wdjMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIgXAotCSIkKElOVERJUilcc3RybGNweS5vYmoiIFwKLQkiJChJTlRESVIpXHN5c3RlbS5vYmoiIFwKLQkiJChJTlRESVIpXHRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcc3RydG9rX3Iub2JqIiBcCi0JIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnBpcGUub2JqIiBcCi0JIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIKKyFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCitMSU5LMzJfRkxBR1M9YWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RsbCAvcGRiOiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAucGRiIiAvZGVidWcgL2RlZjoiLlxsaWJzbm1wLmRlZiIgL291dDoiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbCIgL2ltcGxpYjoiLi4vbGliLyQoT1VURElSKS9uZXRzbm1wLmxpYiIgCishRUxTRQorTElOSzMyX0ZMQUdTPWFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kbGwgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5wZGIiIC9kZWJ1ZyAvZGVmOiIuXGxpYnNubXAuZGVmIiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsIiAvaW1wbGliOiIuLi9saWIvJChPVVRESVIpL25ldHNubXAubGliIiAKKyFFTkRJRgogCiAiLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbCIgOiAiLi5cYmluXCQoT1VURElSKSIgIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElOSzMyX09CSlMpCiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8Ci0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGJpblwkKE9VVERJUilcbmV0c25tcC5kbGwiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhc24xLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2FsbGJhY2sub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjaGVja192YXJiaW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY211X2NvbXBhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNvbnRhaW5lcl9iaW5hcnlfYXJyYXkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfaXRlcmF0b3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjb250YWluZXJfbGlzdF9zc2xsLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY29udGFpbmVyX251bGwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkYXRhX2xpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkZWZhdWx0X3N0b3JlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZ2V0b3B0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW50NjQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X250b3Aub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0X3B0b24ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXl0b29scy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxjZF90aW1lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWQ1Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRfc3VwcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG9pZF9zdGFzaC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhcnNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccmVhZF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzY2FwaS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXAtdGMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hbGFybS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfYXBpLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9hdXRoLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9jbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX2RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9lbnVtLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9sb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9wYXJzZV9hcmdzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9zZWNtb2Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wX3RyYW5zcG9ydC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfdmVyc2lvbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfc2VydmljZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBVRFBEb21haW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVURQSVB2NkRvbWFpbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXB1c20ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wdjMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdHJsY2F0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RybGNweS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRvb2xzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3RydG9rX3Iub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2RfY29tcGF0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcd2lucGlwZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wLmV4cCIKLQktQGVyYXNlICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXAubGliIgotCS1AZXJhc2UgIiQoSU5URElSKVxuZXRzbm1wLnBkYiIKLQktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXG5ldHNubXAuZGxsIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIi4uXGJpblwkKE9VVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCi0KLSIkKElOVERJUikiIDoKLSAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgotCi1DUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJORVRTTk1QX0RMTCIgL0ZwIiQoSU5URElSKVxsaWJzbm1wX2RsbC5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLU1UTD1taWRsLmV4ZQotTVRMX1BST0o9L25vbG9nbyAvRCAiX0RFQlVHIiAvbWt0eXBsaWIyMDMgL28gIk5VTCIgL3dpbjMyIAotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXGxpYnNubXBfZGxsLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KKyBpZiBleGlzdCAiLi4vYmluLyQoT1VURElSKS9uZXRzbm1wLmRsbC5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLi9iaW4vJChPVVRESVIpL25ldHNubXAuZGxsLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwiOzIKIExJTkszMj1saW5rLmV4ZQotTElOSzMyX0ZMQUdTPWFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kbGwgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUilcbmV0c25tcC5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9kZWY6Ii5cbGlic25tcC5kZWYiIC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvbmV0c25tcC5kbGwiIC9pbXBsaWI6Ii4uL2xpYi8kKE9VVERJUilcbmV0c25tcC5saWIiIAotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGFzbjEub2JqIiBcCi0JIiQoSU5URElSKVxjYWxsYmFjay5vYmoiIFwKLQkiJChJTlRESVIpXGNoZWNrX3ZhcmJpbmQub2JqIiBcCi0JIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyLm9iaiIgXAotCSIkKElOVERJUilcY29udGFpbmVyX2JpbmFyeV9hcnJheS5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9pdGVyYXRvci5vYmoiIFwKLQkiJChJTlRESVIpXGNvbnRhaW5lcl9saXN0X3NzbGwub2JqIiBcCi0JIiQoSU5URElSKVxjb250YWluZXJfbnVsbC5vYmoiIFwKLQkiJChJTlRESVIpXGRhdGFfbGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGRlZmF1bHRfc3RvcmUub2JqIiBcCi0JIiQoSU5URElSKVxnZXRvcHQub2JqIiBcCi0JIiQoSU5URElSKVxpbnQ2NC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfbnRvcC5vYmoiIFwKLQkiJChJTlRESVIpXGluZXRfcHRvbi5vYmoiIFwKLQkiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgXAotCSIkKElOVERJUilcbGNkX3RpbWUub2JqIiBcCi0JIiQoSU5URElSKVxtZDUub2JqIiBcCi0JIiQoSU5URElSKVxtaWIub2JqIiBcCi0JIiQoSU5URElSKVxtdF9zdXBwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcb2lkX3N0YXNoLm9iaiIgXAotCSIkKElOVERJUilccGFyc2Uub2JqIiBcCi0JIiQoSU5URElSKVxyZWFkX2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXHNjYXBpLm9iaiIgXAotCSIkKElOVERJUilcc25tcC10Yy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXAub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2FsYXJtLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9hcGkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2F1dGgub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2NsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfZGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2VudW0ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX2xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3BhcnNlX2FyZ3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX3NlY21vZC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgXAotCSIkKElOVERJUilcc25tcF92ZXJzaW9uLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcENhbGxiYWNrRG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRDUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUQ1BJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcFVEUERvbWFpbi5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgXAotCSIkKElOVERJUilcc25tcHVzbS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXB2My5vYmoiIFwKLQkiJChJTlRESVIpXHN0cmxjYXQub2JqIiBcCi0JIiQoSU5URElSKVxzdHJsY3B5Lm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtLm9iaiIgXAotCSIkKElOVERJUilcdG9vbHMub2JqIiBcCi0JIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIFwKLQkiJChJTlRESVIpXHVjZF9jb21wYXQub2JqIiBcCi0JIiQoSU5URElSKVx2YWNtLm9iaiIgXAotCSIkKElOVERJUilcd2lucGlwZS5vYmoiIFwKLQkiJChJTlRESVIpXGZkX2V2ZW50X21hbmFnZXIub2JqIgotCi0iLi5cYmluXCQoT1VURElSKVxuZXRzbm1wLmRsbCIgOiAiLi5cYmluXCQoT1VURElSKSIgIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElOSzMyX09CSlMpCi0gICAgJChMSU5LMzIpIEA8PAotICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKLTw8Ci0KLSFFTkRJRiAKIAogCiAhSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgpAQCAtMzgwLDcgKzE0OCw2IEBACiAhRU5ESUYgCiAKIAotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxhc24xLmMKIAogIiQoSU5URElSKVxhc24xLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTM5OSw5ICsxNjYsOSBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxjbXVfY29tcGF0LmMKK1NPVVJDRT0uLlwuLlxzbm1wbGliXGNsb3NlZGlyLmMKIAotIiQoSU5URElSKVxjbXVfY29tcGF0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKyIkKElOVERJUilcY2xvc2VkaXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCkBAIC00NDcsMTUgKzIxNCwyMSBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMKKworIiQoSU5URElSKVxmZF9ldmVudF9tYW5hZ2VyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0b3B0LmMKIAogIiQoSU5URElSKVxnZXRvcHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxpbnQ2NC5jCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXR0aW1lb2ZkYXkuYwogCi0iJChJTlRESVIpXGludDY0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKyIkKElOVERJUilcZ2V0dGltZW9mZGF5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIApAQCAtNDcxLDEyICsyNDQsMjQgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcaW50NjQuYworCisiJChJTlRESVIpXGludDY0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJca2V5dG9vbHMuYwogCiAiJChJTlRESVIpXGtleXRvb2xzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJcbGFyZ2VfZmRfc2V0LmMKKworIiQoSU5URElSKVxsYXJnZV9mZF9zZXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxsY2RfdGltZS5jCiAKICIkKElOVERJUilcbGNkX3RpbWUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNTA3LDYgKzI5MiwxMiBAQAogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxvcGVuZGlyLmMKKworIiQoSU5URElSKVxvcGVuZGlyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJccGFyc2UuYwogCiAiJChJTlRESVIpXHBhcnNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTUxOSw2ICszMTAsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXHNubXBsaWJccmVhZGRpci5jCisKKyIkKElOVERJUilccmVhZGRpci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNjYXBpLmMKIAogIiQoSU5URElSKVxzY2FwaS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01MzcsNiArMzM0LDcyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcENhbGxiYWNrRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wQ2FsbGJhY2tEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY0QmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcElQdjRCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NkJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBJUHY2QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFNvY2tldEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBTb2NrZXRCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQQmFzZURvbWFpbi5jCisKKyIkKElOVERJUilcc25tcFRDUEJhc2VEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BEb21haW4uYworCisiJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBUQ1BJUHY2RG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVENQSVB2NkRvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBCYXNlRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQRG9tYWluLmMKKworIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NEJhc2VEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBJUHY0QmFzZURvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFVEUElQdjZEb21haW4uYworCisiJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9hbGFybS5jCiAKICIkKElOVERJUilcc25tcF9hbGFybS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01OTEsNiArNDU0LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfc2VydmljZS5jCisKKyIkKElOVERJUilcc25tcF9zZXJ2aWNlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF90cmFuc3BvcnQuYwogCiAiJChJTlRESVIpXHNubXBfdHJhbnNwb3J0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTYwMyw0MiArNDcyLDYgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMKLQotIiQoSU5URElSKVxzbm1wX3NlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wQ2FsbGJhY2tEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBDYWxsYmFja0RvbWFpbi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBUQ1BEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVENQSVB2NkRvbWFpbi5jCi0KLSIkKElOVERJUilcc25tcFRDUElQdjZEb21haW4ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wVURQRG9tYWluLmMKLQotIiQoSU5URElSKVxzbm1wVURQRG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUElQdjZEb21haW4uYwotCi0iJChJTlRESVIpXHNubXBVRFBJUHY2RG9tYWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQogU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcHVzbS5jCiAKICIkKElOVERJUilcc25tcHVzbS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02NjMsNiArNDk2LDE4IEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMKKworIiQoSU5URElSKVxzdHJ0b2tfci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRvdWxsLmMKKworIiQoSU5URElSKVxzdHJ0b3VsbC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxzbm1wbGliXHN5c3RlbS5jCiAKICIkKElOVERJUilcc3lzdGVtLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKQEAgLTY3NSwxMiArNTIwLDYgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYwotCi0iJChJTlRESVIpXHN0cnRva19yLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQogU09VUkNFPS4uXC4uXHNubXBsaWJcdWNkX2NvbXBhdC5jCiAKICIkKElOVERJUilcdWNkX2NvbXBhdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC02OTgsMTIgKzUzNyw0IEBACiAiJChJTlRESVIpXHdpbnBpcGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAotU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jCi0KLSIkKElOVERJUilcZmRfZXZlbnRfbWFuYWdlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQogCmRpZmYgLS1naXQgYS93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wLmRlZiBiL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmCmluZGV4IDQ2NzBmYjYuLjQ1ZGQzNTYgMTAwNjQ0Ci0tLSBhL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmCisrKyBiL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmCkBAIC0xLDQ1OSArMSwyIEBACi07ICAgICAgIEAoIylzbm1wLmRlZiAgICAxLjAgMTAvMjYvOTcgKGdtYXJ6b3RAYmF5bmV0d29ya3MuY29tKQotOyAgICAgICBTaW5nbGUgc2Vzc2lvbiBBUEkgbW9kcyBieSBNLiBTbGlmY2FrLCBJbnRlcm5ldCBTZWN1cml0eSBTeXN0ZW1zLCBJbmMuCi0KLURFU0NSSVBUSU9OICAgICAnVUNEIFNOTVAgTGlicmFyeScKLTtDT0RFICAgICAgICAgICAgU0hBUkVEIFJFQUQgRVhFQ1VURQotO0RBVEEgICAgICAgICAgICBTSEFSRUQgUkVBRCBXUklURQotRVhQT1JUUwotCWFzbl9wYXJzZV9pbnQKLQlhc25fYnVpbGRfaW50Ci0JYXNuX3BhcnNlX3Vuc2lnbmVkX2ludAotCWFzbl9idWlsZF91bnNpZ25lZF9pbnQKLQlhc25fcGFyc2Vfc3RyaW5nCi0JYXNuX2J1aWxkX3N0cmluZwotCWFzbl9wYXJzZV9oZWFkZXIKLQlhc25fYnVpbGRfaGVhZGVyCi0JYXNuX2J1aWxkX3NlcXVlbmNlCi0JYXNuX3BhcnNlX2xlbmd0aAotCWFzbl9idWlsZF9sZW5ndGgKLQlhc25fcGFyc2Vfb2JqaWQKLQlhc25fYnVpbGRfb2JqaWQKLQlhc25fcGFyc2VfbnVsbAotCWFzbl9idWlsZF9udWxsCi0JYXNuX3BhcnNlX2JpdHN0cmluZwotCWFzbl9idWlsZF9iaXRzdHJpbmcKLQlhc25fcGFyc2VfdW5zaWduZWRfaW50NjQKLQlhc25fYnVpbGRfdW5zaWduZWRfaW50NjQKLQltaWJfdG9fYXNuX3R5cGUKLQlNRGJlZ2luCi0JTUR1cGRhdGUKLQlwcmludF9taWIKLQlwcmludF9taWJfdHJlZQotCXByaW50X2FzY2lpX2R1bXAKLQlyZWFkX29iamlkCi0JZ2V0X3RyZWVfaGVhZAotCW5ldHNubXBfaW5pdF9taWIKLQlpbml0X21pYgotCWluaXRfbWliX2ludGVybmFscwotCXByaW50X3ZhcmlhYmxlCi0JcHJpbnRfdmFsdWUKLQlwcmludEk2NAotCXByaW50X29iamlkCi0JZnByaW50X29iamlkCi0JcHJpbnRfZGVzY3JpcHRpb24KLQlmcHJpbnRfZGVzY3JpcHRpb24KLQlnZXRfbW9kdWxlX25vZGUKLQlnZXRfbm9kZQotCXNubXBfcGFyc2Vfb2lkCi0JZmluZF9ub2RlCi0JZmluZF9iZXN0X3RyZWVfbm9kZQotCWdldF93aWxkX25vZGUKLQlmaW5kX3RyZWVfbm9kZQotCWNsZWFyX3RyZWVfZmxhZ3MKLQlnZXRfdHJlZQotCXJlYWRfbW9kdWxlCi0JbmV0c25tcF9yZWFkX21vZHVsZQotCXJlYWRfbWliCi0JcmVhZF9hbGxfbWlicwotCWFkZF9taWJkaXIKLQlzbm1wX2dldF90b2tlbgotCXNubXBfc2V0X21pYl93YXJuaW5ncwotCXNubXBfc2V0X3NhdmVfZGVzY3JpcHRpb25zCi0JYWRkX21vZHVsZV9yZXBsYWNlbWVudAotCXByaW50X3N1YnRyZWUKLQlwcmludF9hc2NpaV9kdW1wX3RyZWUKLQl4ZHVtcAotCXNubXBfcGFyc2VfdmFyX29wCi0Jc25tcF9idWlsZF92YXJfb3AKLQlwcmludFU2NAotCXU2NFN1YnRyYWN0Ci0JemVyb1U2NAotCW9wZW5kaXIKLQlyZWFkZGlyCi0JY2xvc2VkaXIKLQlnZXR0aW1lb2ZkYXkKLQlta2RpcmhpZXIKLQl3aW5zb2NrX3N0YXJ0dXAKLQl3aW5zb2NrX2NsZWFudXAKLQlnZXRfbXlhZGRyCi0JZ2V0X3VwdGltZQotCXNubXBfb3BlbgotCXNubXBfb3Blbl9leAotCXNubXBfY2xvc2UKLQlzbm1wX3NlbmQKLQlzbm1wX3JlYWQKLQlzbm1wX2ZyZWVfcGR1Ci0Jc25tcF9mcmVlX3ZhcgotCXNubXBfc2VsZWN0X2luZm8KLQlzbm1wX3RpbWVvdXQKLQlzbm1wX3NldF9kb19kZWJ1Z2dpbmcKLQlzbm1wX2dldF9kb19kZWJ1Z2dpbmcKLQlzbm1wX2dldF9kb19sb2dnaW5nCi0Jc25tcF9kaXNhYmxlX3N0ZGVycmxvZwotCXNubXBfZW5hYmxlX3N5c2xvZwotCXNubXBfZW5hYmxlX3N0ZGVycmxvZwotCXNubXBfZW5hYmxlX2ZpbGVsb2cKLQlzbm1wX2xvZwotCXNubXBfbG9nX3BlcnJvcgotCXNubXBfcGVycm9yCi0Jc25tcF9zZXNzX3BlcnJvcgotCXNubXBfYWRkX251bGxfdmFyCi0Jc25tcF9wZHVfY3JlYXRlCi0Jc25tcF9maXhfcGR1Ci0Jc25tcF9jbG9uZV9wZHUKLQlzbm1wX2Nsb25lX21lbQotCXNubXBfc2V0X3Zhcl92YWx1ZQotCXNubXBfc2V0X3Zhcl90eXBlZF92YWx1ZQotCXNubXBfc2V0X3Zhcl9vYmppZAotCXNubXBfcmVwbGFjZV92YXJfdHlwZXMKLQlzbm1wX2FwaV9lcnJzdHJpbmcKLQlzbm1wX2VycnN0cmluZwotCXNubXBfc2V0X2RldGFpbAotCXNubXBfc3luY2hfc2V0dXAKLQlzbm1wX3N5bmNoX3Jlc3BvbnNlCi0Jc25tcF9kdXBsaWNhdGVfb2JqaWQKLQlzbm1wX2dldF9uZXh0X3Nlc3NpZAotCXNubXBfZ2V0X25leHRfdHJhbnNpZAotCXNubXBfaW5jcmVtZW50X3N0YXRpc3RpYwotCXNubXBfaW5jcmVtZW50X3N0YXRpc3RpY19ieQotCXNubXBfZ2V0X3N0YXRpc3RpYwotCWluaXRfc25tcAotCXNubXBfc2h1dGRvd24KLQlzbm1wX2FkZF92YXIKLQlydW5fYWxhcm1zCi0Jc25tcF9jbG9uZV92YXIKLQlwcmludF9vaWRfcmVwb3J0Ci0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3VmZml4Ci0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfc3ltYm9saWMKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9vaWQKLQlwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9sYWJlbGVkb2lkCi07CWFzY2lpX3RvX2JpbmFyeQotOwloZXhfdG9fYmluYXJ5Ci0JZ2V0X3RjX2Rlc2NyaXB0b3IKLQlnZXRfdGNfZGVzY3JpcHRpb24KLQlzZXRlbnYKLQlmaW5kX21vZHVsZQotCXNubXBfYXN5bmNfc2VuZAotCXNubXBfZXJyb3IKLQlzbm1wX3Nlc3NfaW5pdAotCXNubXBfc2Vzc19vcGVuCi0Jc25tcF9zZXNzX3Nlc3Npb24KLQlzbm1wX3Nlc3Nfc2VuZAotCXNubXBfc2Vzc19hc3luY19zZW5kCi0Jc25tcF9zZXNzX3NlbGVjdF9pbmZvCi0Jc25tcF9zZXNzX3JlYWQKLQlzbm1wX3Nlc3NfdGltZW91dAotCXNubXBfc2Vzc19jbG9zZQotCXNubXBfc2Vzc19lcnJvcgotCXNubXBfc2Vzc19zeW5jaF9yZXNwb25zZQotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zCi0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlyZWFkX2NvbmZpZ19yZWFkX2RhdGEKLQlyZWFkX2NvbmZpZ19zdG9yZV9kYXRhCi0JcmVhZF9jb25maWdfcHJpbnRfdXNhZ2UKLQlyZWFkX2NvbmZpZ193aXRoX3R5cGUKLQlyZWFkX2NvbmZpZ19zdG9yZQotCXJlYWRfY29uZmlnX3JlYWRfb2N0ZXRfc3RyaW5nCi0JcmVhZF9jb25maWdfc2F2ZV9vY3RldF9zdHJpbmcKLQlyZWFkX2NvbmZpZ19yZWFkX21lbW9yeQotCXJlYWRfY29uZmlnX3JlYWRfb2JqaWQKLQlmcmVlX2NvbmZpZwotCXNraXBfd2hpdGUKLQlza2lwX25vdF93aGl0ZQotCXJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgotCXVucmVnaXN0ZXJfYXBwX2NvbmZpZ19oYW5kbGVyCi0JcmVhZF9hcHBfY29uZmlnX3N0b3JlCi0JdW5yZWdpc3Rlcl9jb25maWdfaGFuZGxlcgotCXNubXBfc2V0X2RvX2RlYnVnZ2luZwotCXNubXBfZ2V0X2RvX2RlYnVnZ2luZwotCWRlYnVnX2luZGVudAotCWRlYnVnX2luZGVudF9hZGQKLQlkZWJ1Z19pc190b2tlbl9yZWdpc3RlcmVkCi0JZGVidWdtc2cKLQlkZWJ1Z21zZ19oZXgKLQlkZWJ1Z21zZ19oZXh0bGkKLQlkZWJ1Z21zZ3Rva2VuCi0JZGVidWdtc2dfdmFyCi0JZGVidWdtc2dfb2lkcmFuZ2UKLQlkZWJ1Z19yZWdpc3Rlcl90b2tlbnMKLQlnZW5lcmF0ZV9LdQotCXVwdGltZV9zdHJpbmcKLQluZXRzbm1wX21lbWR1cAotCWR1bXBfY2h1bmsKLQlpbml0X2NhbGxiYWNrcwotCXNubXBfcmVnaXN0ZXJfY2FsbGJhY2sKLQlzbm1wX3VucmVnaXN0ZXJfY2FsbGJhY2sKLQlzbm1wX2NhbGxfY2FsbGJhY2tzCi0Jc25tcF9jb3VudF9jYWxsYmFja3MKLQlzbm1wX2NhbGxiYWNrX2F2YWlsYWJsZQotCXN0cm5jYXNlY21wCi0Jc3RyY2FzZWNtcAotCWluaXRfc25tcF9hbGFybQotCW5ldHNubXBfZHNfcmVnaXN0ZXJfcHJlbWliCi0JbmV0c25tcF9kc19yZWdpc3Rlcl9jb25maWcKLQluZXRzbm1wX2RzX3NldF9ib29sZWFuCi0JbmV0c25tcF9kc19nZXRfYm9vbGVhbgotCW5ldHNubXBfZHNfdG9nZ2xlX2Jvb2xlYW4KLQluZXRzbm1wX2RzX3NldF9pbnQKLQluZXRzbm1wX2RzX2dldF9pbnQKLQluZXRzbm1wX2RzX3NldF9zdHJpbmcKLQluZXRzbm1wX2RzX2dldF9zdHJpbmcKLQlzbm1wX3BkdV9hZGRfdmFyaWFibGUKLQlzbm1wX3Zhcmxpc3RfYWRkX3ZhcmlhYmxlCi0JZW5jb2RlX2tleWNoYW5nZQotCWRlY29kZV9rZXljaGFuZ2UKLQlnZW5lcmF0ZV9rdWwKLQlzY19pbml0Ci0Jc2V0dXBfZW5naW5lSUQKLQliaW5hcnlfdG9faGV4Ci0JaGV4X3RvX2JpbmFyeTIKLQlzbm1wX3Jlc19pbml0Ci0Jc25tcF9yZXNfbG9jawotCXNubXBfcmVzX3VubG9jawotCXNubXBfcmVzX2Rlc3Ryb3lfbXV0ZXgKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9ucwotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0Jc25tcF9pbl90b2dnbGVfb3B0aW9ucwotCXNubXBfaW5fdG9nZ2xlX29wdGlvbnNfdXNhZ2UKLQlzbm1wX291dF90b2dnbGVfb3B0aW9ucwotCXNubXBfb3V0X3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0Jc25tcF9vaWRfY29tcGFyZQotCXNubXBfb2lkdHJlZV9jb21wYXJlCi0JbmV0c25tcF9vaWRfZXF1YWxzCi0JdXNtX2ZyZWVfdXNlcgotCXVzbV9hZGRfdXNlcgotCXVzbV9jcmVhdGVfaW5pdGlhbF91c2VyCi0JdXNtX3BhcnNlX2NyZWF0ZV91c21Vc2VyCi0JdXNtX3NhdmVfdXNlcnMKLQl1c21fcGFyc2VfY29uZmlnX3VzbVVzZXIKLQl1c21fZ2V0X3VzZXIKLQl1c21fZ2V0X3VzZXJMaXN0Ci0JdXNtX2Nsb25lRnJvbV91c2VyCi0JdXNtX2NyZWF0ZV91c2VyCi0JdXNtX3JlbW92ZV91c2VyCi0JdXNtX3NldF91c2VyX3Bhc3N3b3JkCi0JcmVhZF9wcmVtaWJfY29uZmlncwotCWluaXRfc25tcHYzCi0Jc25tcHYzX2xvY2FsX3NubXBFbmdpbmVUaW1lCi0Jc25tcHYzX2xvY2FsX3NubXBFbmdpbmVCb290cwotCXNubXB2M19nZXRfZW5naW5lSUQKLQlzbm1wdjNfZ2VuZXJhdGVfZW5naW5lSUQKLQlnZXRfZGVmYXVsdF9hdXRodHlwZQotCWdldF9kZWZhdWx0X3ByaXZ0eXBlCi0JcmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKLQlyZWFkX2NvbmZpZ3MKLQlkZWJ1Z21zZ19vaWQKLQljb25maWdfcGVycm9yCi0JY29uZmlnX3B3YXJuCi0JY29weV93b3JkCi0JY29weV9ud29yZAotCWNhbGN1bGF0ZV90aW1lX2RpZmYKLQl2YWNtX2lzX2NvbmZpZ3VyZWQKLQlnZXRfY29uZmlndXJhdGlvbl9kaXJlY3RvcnkKLQl2YWNtX2NyZWF0ZUdyb3VwRW50cnkKLQl2YWNtX2Rlc3Ryb3lHcm91cEVudHJ5Ci0JdmFjbV9kZXN0cm95QWxsR3JvdXBFbnRyaWVzCi0JdmFjbV9jcmVhdGVBY2Nlc3NFbnRyeQotCXZhY21fZGVzdHJveUFjY2Vzc0VudHJ5Ci0JdmFjbV9kZXN0cm95QWxsQWNjZXNzRW50cmllcwotCXZhY21fY3JlYXRlVmlld0VudHJ5Ci0JdmFjbV9kZXN0cm95Vmlld0VudHJ5Ci0JdmFjbV9kZXN0cm95QWxsVmlld0VudHJpZXMKLQl2YWNtX2dldFZpZXdFbnRyeQotCXZhY21fZ2V0R3JvdXBFbnRyeQotCXZhY21fZ2V0QWNjZXNzRW50cnkKLQl2YWNtX3BhcnNlX2NvbmZpZ19hY2Nlc3MKLQl2YWNtX3BhcnNlX2NvbmZpZ19ncm91cAotCXZhY21fcGFyc2VfY29uZmlnX3ZpZXcKLQl2YWNtX3BhcnNlX2NvbmZpZ19hdXRoX2FjY2VzcwotCXN0b3JlX3ZhY20KLQl2YWNtX3NjYW5Hcm91cEluaXQKLQl2YWNtX3NjYW5Hcm91cE5leHQKLQl2YWNtX3NjYW5BY2Nlc3NJbml0Ci0JdmFjbV9zY2FuQWNjZXNzTmV4dAotCXZhY21fc2NhblZpZXdJbml0Ci0JdmFjbV9zY2FuVmlld05leHQKLQl2YWNtX2NoZWNrU3VidHJlZQotCXNubXBfc3luY2hfcmVzcG9uc2VfY2IKLQlzbm1wX2Nsb25lX3ZhcmJpbmQKLQlzbm1wX2ZyZWVfdmFyYmluZAotCXNubXBfZ2V0X2R1bXBfcGFja2V0Ci0Jc25tcF9nZXRfcXVpY2tfcHJpbnQKLQlzbm1wX2dldF9yYW5kb21fYWNjZXNzCi0Jc25tcF9nZXRfc3VmZml4X29ubHkKLQlzbm1wX3NldF9kdW1wX3BhY2tldAotCXNubXBfc2V0X2Z1bGxfb2JqaWQKLQlzbm1wX3NldF9xdWlja19wcmludAotCXNubXBfc2V0X3JhbmRvbV9hY2Nlc3MKLQlzbm1wX3NldF9zdWZmaXhfb25seQotCXNubXBfY2xlYW5fcGVyc2lzdGVudAotCXNubXBfc2F2ZV9wZXJzaXN0ZW50Ci0JdXNtX3N0b3JlX3VzZXJzCi0Jc25tcF9zdG9yZQotCWF0aW1lX2RpZmYKLQl1YXRpbWVfaGRpZmYKLQlhdGltZV9uZXdNYXJrZXIKLQlhdGltZV9zZXRNYXJrZXIKLQlhdGltZV9yZWFkeQotCXNubXBfc3RyY2F0Ci0JZnByaW50X3ZhcmlhYmxlCi0Jc3ByaW50X3JlYWxsb2Nfb2JqaWQKLQlzcHJpbnRfcmVhbGxvY19hc2NpaXN0cmluZwotCXNwcmludF9yZWFsbG9jX3ZhcmlhYmxlCi0Jc3ByaW50X3JlYWxsb2NfdmFsdWUKLQlzcHJpbnRfcmVhbGxvY19ieV90eXBlCi0Jc25tcF9yZWFsbG9jCi0gICAgICBuZXRzbm1wX2NvbmZpZwotICAgICAgbmV0c25tcF9jb25maWdfcmVtZW1iZXIKLSAgICAgIHNubXBfaGV4X3RvX2JpbmFyeQotICAgICAgc25tcHYzX29wdGlvbnMKLSAgICAgIG5ldHNubXBfZ2V0X3ZlcnNpb24KLSAgICAgIHNubXBfc2Vzc190cmFuc3BvcnQKLSAgICAgIHNubXBfc2Vzc19wb2ludGVyCi0gICAgICBzbm1wX2RlY2ltYWxfdG9fYmluYXJ5Ci0Jc25tcF9hbGFybV9yZWdpc3RlcgotCXNubXBfYWxhcm1fdW5yZWdpc3RlcgotICAgICAgZGF0ZV9uX3RpbWUKLQlzbm1wX2Rpc2FibGVfbG9nCi0Jc25tcF9lbmFibGVfc3lzbG9nX2lkZW50Ci0JbmV0c25tcF9zZXNzX2xvZ19lcnJvcgotCXNubXBfYWRkCi0JaGFuZGxlX2xvbmdfb3B0Ci0JbmV0c25tcF90cmFuc3BvcnRfZnJlZQotCW5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnQKLQluZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X29pZAotCW5ldHNubXBfdGRvbWFpbl9zdXBwb3J0Ci0JbmV0c25tcFVEUERvbWFpbgotCW5ldHNubXBfc25tcFRDUERvbWFpbgotCW5ldHNubXBfY3JlYXRlX2RhdGFfbGlzdAotCW5ldHNubXBfYWRkX2xpc3RfZGF0YQotCW5ldHNubXBfZ2V0X2xpc3RfZGF0YQotCW5ldHNubXBfZnJlZV9saXN0X2RhdGEKLQluZXRzbm1wX2ZyZWVfYWxsX2xpc3RfZGF0YQotCW5ldHNubXBfb2lkX3N0YXNoX2FkZF9kYXRhCi0JbmV0c25tcF9vaWRfc3Rhc2hfZ2V0X2RhdGEKLQluZXRzbm1wX29pZF9maW5kX3ByZWZpeAotCW5ldHNubXBfY29udGFpbmVyX2luaXRfbGlzdAotCW5ldHNubXBfY29udGFpbmVyX251bGxfaW5pdAotCW5ldHNubXBfY29udGFpbmVyX3NzbGxfaW5pdAotCW5ldHNubXBfc3RyZHVwX2FuZF9udWxsCi0JYnVpbGRfb2lkCi0JYnVpbGRfb2lkX25vYWxsb2MKLQlwYXJzZV9vbmVfb2lkX2luZGV4Ci0JcGFyc2Vfb2lkX2luZGV4ZXMKLQljb3VudF92YXJiaW5kcwotCWNvdW50X3ZhcmJpbmRzX29mX3R5cGUKLQlzZV9maW5kX2xhYmVsX2luX3NsaXN0Ci0Jc2VfZmluZF92YWx1ZV9pbl9zbGlzdAotCXNlX2FkZF9wYWlyX3RvX3NsaXN0Ci0Jc25tcF9wYXJzZV9hcmdzCi0Jc25tcF9wYXJzZV9hcmdzX2Rlc2NyaXB0aW9ucwotCXNubXBfcGFyc2VfYXJnc191c2FnZQotCW5ldHNubXBfY2FsbGJhY2tfb3BlbgotCW5ldHNubXBfdWRwX2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIKLQluZXRzbm1wX3VkcF9wYXJzZV9zZWN1cml0eQotCW5ldHNubXBfdWRwX2dldFNlY05hbWUKLQlmaW5kX3NlY19tb2QKLQlzdHJsY2F0Ci0Jc3RybGNweQotCWdldG9wdAotCW9wdGFyZyAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRlcnIgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0aW5kICAgICAgICAgICAgICAgICAgREFUQQotCW9wdG9wdCAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRyZXNldCAgICAgICAgICAgICAgICBEQVRBCi0JdXNtTm9BdXRoUHJvdG9jb2wgICAgICAgREFUQQotCXVzbUhNQUNNRDVBdXRoUHJvdG9jb2wgIERBVEEKLQl1c21ITUFDU0hBMUF1dGhQcm90b2NvbCBEQVRBCi0JdXNtTm9Qcml2UHJvdG9jb2wgICAgICAgREFUQQotCXVzbURFU1ByaXZQcm90b2NvbCAgICAgIERBVEEKLQl1c21BRVNQcml2UHJvdG9jb2wgICAgICBEQVRBCi0Jc25wcmludF9iaXRzdHJpbmcKLQlzbnByaW50X3ZhbHVlCi0Jc25wcmludF9vYmppZAotCXNucHJpbnRfdmFyaWFibGUKLQlzbm1wX3N5bmNoX3Jlc2V0Ci0Jc25tcF9sb2dfb3B0aW9ucwotCXNubXBfbG9nX3N5c2xvZ25hbWUKLQluZXRzbm1wX2NsZWFyX2NhbGxiYWNrX2xpc3QKLQluZXRzbm1wX2NsZWFyX3Rkb21haW5fbGlzdAotCWNsZWFyX3NlY19tb2QKLQljbGVhcl9zbm1wX2VudW0KLQljbGVhcl9jYWxsYmFjawotCWNsZWFyX3VzZXJfbGlzdAotCW5ldHNubXBfZHNfZ2V0X3ZvaWQKLQluZXRzbm1wX2RzX3NldF92b2lkCi0JbmV0c25tcF9kc19zaHV0ZG93bgotCW5ldHNubXBfc3ByaW50X3JlYWxsb2Nfb2JqaWQKLQluZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkX3RyZWUKLQltb2R1bGVfbmFtZQotCU1pYiAgICAgICAgICAgICAgICAgICAgIERBVEEKLQl0cmVlX2hlYWQgICAgICAgICAgICAgICBEQVRBCi0Jc25tcF9lcnJubyAgICAgICAgICAgICAgREFUQQotCW5ldHNubXBfZGFlbW9uaXplCi0Jc25tcF9sb2dfb3B0aW9uc191c2FnZQotCW5ldHNubXBfY29udGFpbmVyX2ZyZWVfbGlzdAotCW5ldHNubXBfb2lkX3N0YXNoX2dldG5leHRfbm9kZQotCW5ldHNubXBfb2lkX3N0YXNoX2ZyZWUKLQluZXRzbm1wX2dldF9saXN0X25vZGUKLQluZXRzbm1wX3JlbW92ZV9saXN0X25vZGUKLQluZXRzbm1wX3JlbW92ZV9sb2doYW5kbGVyCi0JbmV0c25tcF9yZWdpc3Rlcl9sb2doYW5kbGVyCi0JZ2V0X2xvZ2hfaGVhZAotCWRiZ190b2tlbnMKLQlkZWJ1Z19udW1fdG9rZW5zCi0JY3JlYXRlX3dpbnBpcGVfdHJhbnNwb3J0Ci0JZ2V0X3RlbXBfZmlsZV9wYXR0ZXJuCi0JbmV0c25tcF9zdHJkdXAKLQluZXRzbm1wX2NhbGxvYwotCW5ldHNubXBfbWFsbG9jCi0JbmV0c25tcF9yZWFsbG9jCi0JbmV0c25tcF9mcmVlCi0JbmV0c25tcF91ZHA2X2FnZW50X2NvbmZpZ190b2tlbnNfcmVnaXN0ZXIKLQlpbml0X3VzbV9jb25mCi0Jc3RydG9rX3IKLSAgICAgICAgc25tcF9yZXNldF92YXJfYnVmZmVycwotICAgICAgICBuZXRzbm1wX2NvbnRhaW5lcl9hZGRfaW5kZXgKLSAgICAgICAgbmV0c25tcF9jb250YWluZXJfZmluZAotICAgICAgICBuZXRzbm1wX2M2NF9jaGVjazMyX2FuZF91cGRhdGUKLSAgICAgICAgbmV0c25tcF9vaWRfY29tcGFyZV9sbAotICAgICAgICBuZXRzbm1wX25jb21wYXJlX25ldHNubXBfaW5kZXgKLSAgICAgICAgbmV0c25tcF9jb21wYXJlX25ldHNubXBfaW5kZXgKLSAgICAgICAgZmluZF92YXJiaW5kX2luX2xpc3QKLSAgICAgICAgbmV0c25tcF9kaXNwYXRjaF9leHRlcm5hbF9ldmVudHMKLSAgICAgICAgbmV0c25tcF9leHRlcm5hbF9ldmVudF9pbmZvCi0gICAgICAgIG5ldHNubXBfbG9nZ2luZ19yZXN0YXJ0Ci0gICAgICAgIHNraXBfdG9rZW4KLSAgICAgICAgcGFyc2Vfc2VjTGV2ZWxfY29uZgotICAgICAgICBuZXRzbm1wX3F1ZXJ5X2dldF9kZWZhdWx0X3Nlc3Npb24KLSAgICAgICAgbmV0c25tcF9xdWVyeV9zZXRfZGVmYXVsdF9zZXNzaW9uCi0gICAgICAgIG5ldHNubXBfZHNfcGFyc2VfYm9vbGVhbgotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfdGFyZ2V0Ci0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfZGVmYXVsdF9kb21haW4KLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9zZXJ2aWNlX2hhbmRsZXJzCi0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fc2VydmVyCi0gICAgICAgIG5ldHNubXBfdGRvbWFpbl90cmFuc3BvcnRfZnVsbAotICAgICAgICBzbm1wX2FkZF9mdWxsCi0gICAgICAgIG5ldHNubXBfdHJhbnNwb3J0X29wZW5fY2xpZW50Ci0gICAgICAgIHNubXBfb2lkc3VidHJlZV9jb21wYXJlCi0gICAgICAgIHNubXBfZGlzYWJsZV9zeXNsb2cKLSAgICAgICAgc25tcF9zdGRlcnJsb2dfc3RhdHVzCi0gICAgICAgIHNhX2ZpbmRfc3BlY2lmaWMKLSAgICAgICAgY2hlY2tfcm93c3RhdHVzX3RyYW5zaXRpb24KLSAgICAgICAgY2hlY2tfc3RvcmFnZV90cmFuc2l0aW9uCi0gICAgICAgIG5ldHNubXBfdmlld19nZXQKLSAgICAgICAgbmV0c25tcF9jaGVja192Yl9yb3dzdGF0dXNfdmFsdWUKLSAgICAgICAgbmV0c25tcF9jaGVja192Yl90eXBlX2FuZF9zaXplCi0gICAgICAgIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfbWF4X3NpemUKLSAgICAgICAgcmVhZF9jb25maWdfc2F2ZV9vYmppZAotICAgICAgICBwcmludF9vaWRfcmVwb3J0X2VuYWJsZV9taWJjaGlsZG9pZAotICAgICAgICBuZXRzbm1wX3F1ZXJ5X3dhbGsKLSAgICAgICAgbmV0c25tcF9xdWVyeV9nZXRuZXh0Ci0gICAgICAgIG5ldHNubXBfcXVlcnlfZ2V0Ci0JbmV0c25tcF9ta3RlbXAKLSAgICAgICAgZGVidWdtc2dfc3Vib2lkCi07SVB2NiAgICAgICAgbmV0c25tcF91ZHA2X3BhcnNlX3NlY3VyaXR5Ci07SVB2NiAgICAgICAgbmV0c25tcF91ZHA2X2dldFNlY05hbWUKLTtJUHY2ICAgICAgICBuZXRzbm1wX1RDUElQdjZEb21haW4KLTtJUHY2ICAgICAgICBuZXRzbm1wX1VEUElQdjZEb21haW4KLQorOyBUaGlzIC5kZWYgZmlsZSBpcyBvYnNvbGV0ZS4gRG8gbm90IGFkZCBhbnkgbmFtZXMgb2YgZXhwb3J0ZWQgZnVuY3Rpb25zIGhlcmUKKzsgYnV0IGFkZCBORVRTTk1QX0lNUE9SVCB0byBmdW5jdGlvbiBkZWNsYXJhdGlvbnMgaW5zdGVhZC4KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXAuZGVmLmluIGIvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4KZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ2NzBmYjYuLjAwMDAwMDAKLS0tIGEvd2luMzIvbGlic25tcF9kbGwvbGlic25tcC5kZWYuaW4KKysrIC9kZXYvbnVsbApAQCAtMSw0NTkgKzAsMCBAQAotOyAgICAgICBAKCMpc25tcC5kZWYgICAgMS4wIDEwLzI2Lzk3IChnbWFyem90QGJheW5ldHdvcmtzLmNvbSkKLTsgICAgICAgU2luZ2xlIHNlc3Npb24gQVBJIG1vZHMgYnkgTS4gU2xpZmNhaywgSW50ZXJuZXQgU2VjdXJpdHkgU3lzdGVtcywgSW5jLgotCi1ERVNDUklQVElPTiAgICAgJ1VDRCBTTk1QIExpYnJhcnknCi07Q09ERSAgICAgICAgICAgIFNIQVJFRCBSRUFEIEVYRUNVVEUKLTtEQVRBICAgICAgICAgICAgU0hBUkVEIFJFQUQgV1JJVEUKLUVYUE9SVFMKLQlhc25fcGFyc2VfaW50Ci0JYXNuX2J1aWxkX2ludAotCWFzbl9wYXJzZV91bnNpZ25lZF9pbnQKLQlhc25fYnVpbGRfdW5zaWduZWRfaW50Ci0JYXNuX3BhcnNlX3N0cmluZwotCWFzbl9idWlsZF9zdHJpbmcKLQlhc25fcGFyc2VfaGVhZGVyCi0JYXNuX2J1aWxkX2hlYWRlcgotCWFzbl9idWlsZF9zZXF1ZW5jZQotCWFzbl9wYXJzZV9sZW5ndGgKLQlhc25fYnVpbGRfbGVuZ3RoCi0JYXNuX3BhcnNlX29iamlkCi0JYXNuX2J1aWxkX29iamlkCi0JYXNuX3BhcnNlX251bGwKLQlhc25fYnVpbGRfbnVsbAotCWFzbl9wYXJzZV9iaXRzdHJpbmcKLQlhc25fYnVpbGRfYml0c3RyaW5nCi0JYXNuX3BhcnNlX3Vuc2lnbmVkX2ludDY0Ci0JYXNuX2J1aWxkX3Vuc2lnbmVkX2ludDY0Ci0JbWliX3RvX2Fzbl90eXBlCi0JTURiZWdpbgotCU1EdXBkYXRlCi0JcHJpbnRfbWliCi0JcHJpbnRfbWliX3RyZWUKLQlwcmludF9hc2NpaV9kdW1wCi0JcmVhZF9vYmppZAotCWdldF90cmVlX2hlYWQKLQluZXRzbm1wX2luaXRfbWliCi0JaW5pdF9taWIKLQlpbml0X21pYl9pbnRlcm5hbHMKLQlwcmludF92YXJpYWJsZQotCXByaW50X3ZhbHVlCi0JcHJpbnRJNjQKLQlwcmludF9vYmppZAotCWZwcmludF9vYmppZAotCXByaW50X2Rlc2NyaXB0aW9uCi0JZnByaW50X2Rlc2NyaXB0aW9uCi0JZ2V0X21vZHVsZV9ub2RlCi0JZ2V0X25vZGUKLQlzbm1wX3BhcnNlX29pZAotCWZpbmRfbm9kZQotCWZpbmRfYmVzdF90cmVlX25vZGUKLQlnZXRfd2lsZF9ub2RlCi0JZmluZF90cmVlX25vZGUKLQljbGVhcl90cmVlX2ZsYWdzCi0JZ2V0X3RyZWUKLQlyZWFkX21vZHVsZQotCW5ldHNubXBfcmVhZF9tb2R1bGUKLQlyZWFkX21pYgotCXJlYWRfYWxsX21pYnMKLQlhZGRfbWliZGlyCi0Jc25tcF9nZXRfdG9rZW4KLQlzbm1wX3NldF9taWJfd2FybmluZ3MKLQlzbm1wX3NldF9zYXZlX2Rlc2NyaXB0aW9ucwotCWFkZF9tb2R1bGVfcmVwbGFjZW1lbnQKLQlwcmludF9zdWJ0cmVlCi0JcHJpbnRfYXNjaWlfZHVtcF90cmVlCi0JeGR1bXAKLQlzbm1wX3BhcnNlX3Zhcl9vcAotCXNubXBfYnVpbGRfdmFyX29wCi0JcHJpbnRVNjQKLQl1NjRTdWJ0cmFjdAotCXplcm9VNjQKLQlvcGVuZGlyCi0JcmVhZGRpcgotCWNsb3NlZGlyCi0JZ2V0dGltZW9mZGF5Ci0JbWtkaXJoaWVyCi0Jd2luc29ja19zdGFydHVwCi0Jd2luc29ja19jbGVhbnVwCi0JZ2V0X215YWRkcgotCWdldF91cHRpbWUKLQlzbm1wX29wZW4KLQlzbm1wX29wZW5fZXgKLQlzbm1wX2Nsb3NlCi0Jc25tcF9zZW5kCi0Jc25tcF9yZWFkCi0Jc25tcF9mcmVlX3BkdQotCXNubXBfZnJlZV92YXIKLQlzbm1wX3NlbGVjdF9pbmZvCi0Jc25tcF90aW1lb3V0Ci0Jc25tcF9zZXRfZG9fZGVidWdnaW5nCi0Jc25tcF9nZXRfZG9fZGVidWdnaW5nCi0Jc25tcF9nZXRfZG9fbG9nZ2luZwotCXNubXBfZGlzYWJsZV9zdGRlcnJsb2cKLQlzbm1wX2VuYWJsZV9zeXNsb2cKLQlzbm1wX2VuYWJsZV9zdGRlcnJsb2cKLQlzbm1wX2VuYWJsZV9maWxlbG9nCi0Jc25tcF9sb2cKLQlzbm1wX2xvZ19wZXJyb3IKLQlzbm1wX3BlcnJvcgotCXNubXBfc2Vzc19wZXJyb3IKLQlzbm1wX2FkZF9udWxsX3ZhcgotCXNubXBfcGR1X2NyZWF0ZQotCXNubXBfZml4X3BkdQotCXNubXBfY2xvbmVfcGR1Ci0Jc25tcF9jbG9uZV9tZW0KLQlzbm1wX3NldF92YXJfdmFsdWUKLQlzbm1wX3NldF92YXJfdHlwZWRfdmFsdWUKLQlzbm1wX3NldF92YXJfb2JqaWQKLQlzbm1wX3JlcGxhY2VfdmFyX3R5cGVzCi0Jc25tcF9hcGlfZXJyc3RyaW5nCi0Jc25tcF9lcnJzdHJpbmcKLQlzbm1wX3NldF9kZXRhaWwKLQlzbm1wX3N5bmNoX3NldHVwCi0Jc25tcF9zeW5jaF9yZXNwb25zZQotCXNubXBfZHVwbGljYXRlX29iamlkCi0Jc25tcF9nZXRfbmV4dF9zZXNzaWQKLQlzbm1wX2dldF9uZXh0X3RyYW5zaWQKLQlzbm1wX2luY3JlbWVudF9zdGF0aXN0aWMKLQlzbm1wX2luY3JlbWVudF9zdGF0aXN0aWNfYnkKLQlzbm1wX2dldF9zdGF0aXN0aWMKLQlpbml0X3NubXAKLQlzbm1wX3NodXRkb3duCi0Jc25tcF9hZGRfdmFyCi0JcnVuX2FsYXJtcwotCXNubXBfY2xvbmVfdmFyCi0JcHJpbnRfb2lkX3JlcG9ydAotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N1ZmZpeAotCXByaW50X29pZF9yZXBvcnRfZW5hYmxlX3N5bWJvbGljCi0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfb2lkCi0JcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbGFiZWxlZG9pZAotOwlhc2NpaV90b19iaW5hcnkKLTsJaGV4X3RvX2JpbmFyeQotCWdldF90Y19kZXNjcmlwdG9yCi0JZ2V0X3RjX2Rlc2NyaXB0aW9uCi0Jc2V0ZW52Ci0JZmluZF9tb2R1bGUKLQlzbm1wX2FzeW5jX3NlbmQKLQlzbm1wX2Vycm9yCi0Jc25tcF9zZXNzX2luaXQKLQlzbm1wX3Nlc3Nfb3BlbgotCXNubXBfc2Vzc19zZXNzaW9uCi0Jc25tcF9zZXNzX3NlbmQKLQlzbm1wX3Nlc3NfYXN5bmNfc2VuZAotCXNubXBfc2Vzc19zZWxlY3RfaW5mbwotCXNubXBfc2Vzc19yZWFkCi0Jc25tcF9zZXNzX3RpbWVvdXQKLQlzbm1wX3Nlc3NfY2xvc2UKLQlzbm1wX3Nlc3NfZXJyb3IKLQlzbm1wX3Nlc3Nfc3luY2hfcmVzcG9uc2UKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9ucwotCXNubXBfbWliX3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0JcmVhZF9jb25maWdfcmVhZF9kYXRhCi0JcmVhZF9jb25maWdfc3RvcmVfZGF0YQotCXJlYWRfY29uZmlnX3ByaW50X3VzYWdlCi0JcmVhZF9jb25maWdfd2l0aF90eXBlCi0JcmVhZF9jb25maWdfc3RvcmUKLQlyZWFkX2NvbmZpZ19yZWFkX29jdGV0X3N0cmluZwotCXJlYWRfY29uZmlnX3NhdmVfb2N0ZXRfc3RyaW5nCi0JcmVhZF9jb25maWdfcmVhZF9tZW1vcnkKLQlyZWFkX2NvbmZpZ19yZWFkX29iamlkCi0JZnJlZV9jb25maWcKLQlza2lwX3doaXRlCi0Jc2tpcF9ub3Rfd2hpdGUKLQlyZWdpc3Rlcl9hcHBfY29uZmlnX2hhbmRsZXIKLQl1bnJlZ2lzdGVyX2FwcF9jb25maWdfaGFuZGxlcgotCXJlYWRfYXBwX2NvbmZpZ19zdG9yZQotCXVucmVnaXN0ZXJfY29uZmlnX2hhbmRsZXIKLQlzbm1wX3NldF9kb19kZWJ1Z2dpbmcKLQlzbm1wX2dldF9kb19kZWJ1Z2dpbmcKLQlkZWJ1Z19pbmRlbnQKLQlkZWJ1Z19pbmRlbnRfYWRkCi0JZGVidWdfaXNfdG9rZW5fcmVnaXN0ZXJlZAotCWRlYnVnbXNnCi0JZGVidWdtc2dfaGV4Ci0JZGVidWdtc2dfaGV4dGxpCi0JZGVidWdtc2d0b2tlbgotCWRlYnVnbXNnX3ZhcgotCWRlYnVnbXNnX29pZHJhbmdlCi0JZGVidWdfcmVnaXN0ZXJfdG9rZW5zCi0JZ2VuZXJhdGVfS3UKLQl1cHRpbWVfc3RyaW5nCi0JbmV0c25tcF9tZW1kdXAKLQlkdW1wX2NodW5rCi0JaW5pdF9jYWxsYmFja3MKLQlzbm1wX3JlZ2lzdGVyX2NhbGxiYWNrCi0Jc25tcF91bnJlZ2lzdGVyX2NhbGxiYWNrCi0Jc25tcF9jYWxsX2NhbGxiYWNrcwotCXNubXBfY291bnRfY2FsbGJhY2tzCi0Jc25tcF9jYWxsYmFja19hdmFpbGFibGUKLQlzdHJuY2FzZWNtcAotCXN0cmNhc2VjbXAKLQlpbml0X3NubXBfYWxhcm0KLQluZXRzbm1wX2RzX3JlZ2lzdGVyX3ByZW1pYgotCW5ldHNubXBfZHNfcmVnaXN0ZXJfY29uZmlnCi0JbmV0c25tcF9kc19zZXRfYm9vbGVhbgotCW5ldHNubXBfZHNfZ2V0X2Jvb2xlYW4KLQluZXRzbm1wX2RzX3RvZ2dsZV9ib29sZWFuCi0JbmV0c25tcF9kc19zZXRfaW50Ci0JbmV0c25tcF9kc19nZXRfaW50Ci0JbmV0c25tcF9kc19zZXRfc3RyaW5nCi0JbmV0c25tcF9kc19nZXRfc3RyaW5nCi0Jc25tcF9wZHVfYWRkX3ZhcmlhYmxlCi0Jc25tcF92YXJsaXN0X2FkZF92YXJpYWJsZQotCWVuY29kZV9rZXljaGFuZ2UKLQlkZWNvZGVfa2V5Y2hhbmdlCi0JZ2VuZXJhdGVfa3VsCi0Jc2NfaW5pdAotCXNldHVwX2VuZ2luZUlECi0JYmluYXJ5X3RvX2hleAotCWhleF90b19iaW5hcnkyCi0Jc25tcF9yZXNfaW5pdAotCXNubXBfcmVzX2xvY2sKLQlzbm1wX3Jlc191bmxvY2sKLQlzbm1wX3Jlc19kZXN0cm95X211dGV4Ci0Jc25tcF9taWJfdG9nZ2xlX29wdGlvbnMKLQlzbm1wX21pYl90b2dnbGVfb3B0aW9uc191c2FnZQotCXNubXBfaW5fdG9nZ2xlX29wdGlvbnMKLQlzbm1wX2luX3RvZ2dsZV9vcHRpb25zX3VzYWdlCi0Jc25tcF9vdXRfdG9nZ2xlX29wdGlvbnMKLQlzbm1wX291dF90b2dnbGVfb3B0aW9uc191c2FnZQotCXNubXBfb2lkX2NvbXBhcmUKLQlzbm1wX29pZHRyZWVfY29tcGFyZQotCW5ldHNubXBfb2lkX2VxdWFscwotCXVzbV9mcmVlX3VzZXIKLQl1c21fYWRkX3VzZXIKLQl1c21fY3JlYXRlX2luaXRpYWxfdXNlcgotCXVzbV9wYXJzZV9jcmVhdGVfdXNtVXNlcgotCXVzbV9zYXZlX3VzZXJzCi0JdXNtX3BhcnNlX2NvbmZpZ191c21Vc2VyCi0JdXNtX2dldF91c2VyCi0JdXNtX2dldF91c2VyTGlzdAotCXVzbV9jbG9uZUZyb21fdXNlcgotCXVzbV9jcmVhdGVfdXNlcgotCXVzbV9yZW1vdmVfdXNlcgotCXVzbV9zZXRfdXNlcl9wYXNzd29yZAotCXJlYWRfcHJlbWliX2NvbmZpZ3MKLQlpbml0X3NubXB2MwotCXNubXB2M19sb2NhbF9zbm1wRW5naW5lVGltZQotCXNubXB2M19sb2NhbF9zbm1wRW5naW5lQm9vdHMKLQlzbm1wdjNfZ2V0X2VuZ2luZUlECi0Jc25tcHYzX2dlbmVyYXRlX2VuZ2luZUlECi0JZ2V0X2RlZmF1bHRfYXV0aHR5cGUKLQlnZXRfZGVmYXVsdF9wcml2dHlwZQotCXJlZ2lzdGVyX2NvbmZpZ19oYW5kbGVyCi0JcmVhZF9jb25maWdzCi0JZGVidWdtc2dfb2lkCi0JY29uZmlnX3BlcnJvcgotCWNvbmZpZ19wd2FybgotCWNvcHlfd29yZAotCWNvcHlfbndvcmQKLQljYWxjdWxhdGVfdGltZV9kaWZmCi0JdmFjbV9pc19jb25maWd1cmVkCi0JZ2V0X2NvbmZpZ3VyYXRpb25fZGlyZWN0b3J5Ci0JdmFjbV9jcmVhdGVHcm91cEVudHJ5Ci0JdmFjbV9kZXN0cm95R3JvdXBFbnRyeQotCXZhY21fZGVzdHJveUFsbEdyb3VwRW50cmllcwotCXZhY21fY3JlYXRlQWNjZXNzRW50cnkKLQl2YWNtX2Rlc3Ryb3lBY2Nlc3NFbnRyeQotCXZhY21fZGVzdHJveUFsbEFjY2Vzc0VudHJpZXMKLQl2YWNtX2NyZWF0ZVZpZXdFbnRyeQotCXZhY21fZGVzdHJveVZpZXdFbnRyeQotCXZhY21fZGVzdHJveUFsbFZpZXdFbnRyaWVzCi0JdmFjbV9nZXRWaWV3RW50cnkKLQl2YWNtX2dldEdyb3VwRW50cnkKLQl2YWNtX2dldEFjY2Vzc0VudHJ5Ci0JdmFjbV9wYXJzZV9jb25maWdfYWNjZXNzCi0JdmFjbV9wYXJzZV9jb25maWdfZ3JvdXAKLQl2YWNtX3BhcnNlX2NvbmZpZ192aWV3Ci0JdmFjbV9wYXJzZV9jb25maWdfYXV0aF9hY2Nlc3MKLQlzdG9yZV92YWNtCi0JdmFjbV9zY2FuR3JvdXBJbml0Ci0JdmFjbV9zY2FuR3JvdXBOZXh0Ci0JdmFjbV9zY2FuQWNjZXNzSW5pdAotCXZhY21fc2NhbkFjY2Vzc05leHQKLQl2YWNtX3NjYW5WaWV3SW5pdAotCXZhY21fc2NhblZpZXdOZXh0Ci0JdmFjbV9jaGVja1N1YnRyZWUKLQlzbm1wX3N5bmNoX3Jlc3BvbnNlX2NiCi0Jc25tcF9jbG9uZV92YXJiaW5kCi0Jc25tcF9mcmVlX3ZhcmJpbmQKLQlzbm1wX2dldF9kdW1wX3BhY2tldAotCXNubXBfZ2V0X3F1aWNrX3ByaW50Ci0Jc25tcF9nZXRfcmFuZG9tX2FjY2VzcwotCXNubXBfZ2V0X3N1ZmZpeF9vbmx5Ci0Jc25tcF9zZXRfZHVtcF9wYWNrZXQKLQlzbm1wX3NldF9mdWxsX29iamlkCi0Jc25tcF9zZXRfcXVpY2tfcHJpbnQKLQlzbm1wX3NldF9yYW5kb21fYWNjZXNzCi0Jc25tcF9zZXRfc3VmZml4X29ubHkKLQlzbm1wX2NsZWFuX3BlcnNpc3RlbnQKLQlzbm1wX3NhdmVfcGVyc2lzdGVudAotCXVzbV9zdG9yZV91c2VycwotCXNubXBfc3RvcmUKLQlhdGltZV9kaWZmCi0JdWF0aW1lX2hkaWZmCi0JYXRpbWVfbmV3TWFya2VyCi0JYXRpbWVfc2V0TWFya2VyCi0JYXRpbWVfcmVhZHkKLQlzbm1wX3N0cmNhdAotCWZwcmludF92YXJpYWJsZQotCXNwcmludF9yZWFsbG9jX29iamlkCi0Jc3ByaW50X3JlYWxsb2NfYXNjaWlzdHJpbmcKLQlzcHJpbnRfcmVhbGxvY192YXJpYWJsZQotCXNwcmludF9yZWFsbG9jX3ZhbHVlCi0Jc3ByaW50X3JlYWxsb2NfYnlfdHlwZQotCXNubXBfcmVhbGxvYwotICAgICAgbmV0c25tcF9jb25maWcKLSAgICAgIG5ldHNubXBfY29uZmlnX3JlbWVtYmVyCi0gICAgICBzbm1wX2hleF90b19iaW5hcnkKLSAgICAgIHNubXB2M19vcHRpb25zCi0gICAgICBuZXRzbm1wX2dldF92ZXJzaW9uCi0gICAgICBzbm1wX3Nlc3NfdHJhbnNwb3J0Ci0gICAgICBzbm1wX3Nlc3NfcG9pbnRlcgotICAgICAgc25tcF9kZWNpbWFsX3RvX2JpbmFyeQotCXNubXBfYWxhcm1fcmVnaXN0ZXIKLQlzbm1wX2FsYXJtX3VucmVnaXN0ZXIKLSAgICAgIGRhdGVfbl90aW1lCi0Jc25tcF9kaXNhYmxlX2xvZwotCXNubXBfZW5hYmxlX3N5c2xvZ19pZGVudAotCW5ldHNubXBfc2Vzc19sb2dfZXJyb3IKLQlzbm1wX2FkZAotCWhhbmRsZV9sb25nX29wdAotCW5ldHNubXBfdHJhbnNwb3J0X2ZyZWUKLQluZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0Ci0JbmV0c25tcF90ZG9tYWluX3RyYW5zcG9ydF9vaWQKLQluZXRzbm1wX3Rkb21haW5fc3VwcG9ydAotCW5ldHNubXBVRFBEb21haW4KLQluZXRzbm1wX3NubXBUQ1BEb21haW4KLQluZXRzbm1wX2NyZWF0ZV9kYXRhX2xpc3QKLQluZXRzbm1wX2FkZF9saXN0X2RhdGEKLQluZXRzbm1wX2dldF9saXN0X2RhdGEKLQluZXRzbm1wX2ZyZWVfbGlzdF9kYXRhCi0JbmV0c25tcF9mcmVlX2FsbF9saXN0X2RhdGEKLQluZXRzbm1wX29pZF9zdGFzaF9hZGRfZGF0YQotCW5ldHNubXBfb2lkX3N0YXNoX2dldF9kYXRhCi0JbmV0c25tcF9vaWRfZmluZF9wcmVmaXgKLQluZXRzbm1wX2NvbnRhaW5lcl9pbml0X2xpc3QKLQluZXRzbm1wX2NvbnRhaW5lcl9udWxsX2luaXQKLQluZXRzbm1wX2NvbnRhaW5lcl9zc2xsX2luaXQKLQluZXRzbm1wX3N0cmR1cF9hbmRfbnVsbAotCWJ1aWxkX29pZAotCWJ1aWxkX29pZF9ub2FsbG9jCi0JcGFyc2Vfb25lX29pZF9pbmRleAotCXBhcnNlX29pZF9pbmRleGVzCi0JY291bnRfdmFyYmluZHMKLQljb3VudF92YXJiaW5kc19vZl90eXBlCi0Jc2VfZmluZF9sYWJlbF9pbl9zbGlzdAotCXNlX2ZpbmRfdmFsdWVfaW5fc2xpc3QKLQlzZV9hZGRfcGFpcl90b19zbGlzdAotCXNubXBfcGFyc2VfYXJncwotCXNubXBfcGFyc2VfYXJnc19kZXNjcmlwdGlvbnMKLQlzbm1wX3BhcnNlX2FyZ3NfdXNhZ2UKLQluZXRzbm1wX2NhbGxiYWNrX29wZW4KLQluZXRzbm1wX3VkcF9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyCi0JbmV0c25tcF91ZHBfcGFyc2Vfc2VjdXJpdHkKLQluZXRzbm1wX3VkcF9nZXRTZWNOYW1lCi0JZmluZF9zZWNfbW9kCi0Jc3RybGNhdAotCXN0cmxjcHkKLQlnZXRvcHQKLQlvcHRhcmcgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0ZXJyICAgICAgICAgICAgICAgICAgREFUQQotCW9wdGluZCAgICAgICAgICAgICAgICAgIERBVEEKLQlvcHRvcHQgICAgICAgICAgICAgICAgICBEQVRBCi0Jb3B0cmVzZXQgICAgICAgICAgICAgICAgREFUQQotCXVzbU5vQXV0aFByb3RvY29sICAgICAgIERBVEEKLQl1c21ITUFDTUQ1QXV0aFByb3RvY29sICBEQVRBCi0JdXNtSE1BQ1NIQTFBdXRoUHJvdG9jb2wgREFUQQotCXVzbU5vUHJpdlByb3RvY29sICAgICAgIERBVEEKLQl1c21ERVNQcml2UHJvdG9jb2wgICAgICBEQVRBCi0JdXNtQUVTUHJpdlByb3RvY29sICAgICAgREFUQQotCXNucHJpbnRfYml0c3RyaW5nCi0Jc25wcmludF92YWx1ZQotCXNucHJpbnRfb2JqaWQKLQlzbnByaW50X3ZhcmlhYmxlCi0Jc25tcF9zeW5jaF9yZXNldAotCXNubXBfbG9nX29wdGlvbnMKLQlzbm1wX2xvZ19zeXNsb2duYW1lCi0JbmV0c25tcF9jbGVhcl9jYWxsYmFja19saXN0Ci0JbmV0c25tcF9jbGVhcl90ZG9tYWluX2xpc3QKLQljbGVhcl9zZWNfbW9kCi0JY2xlYXJfc25tcF9lbnVtCi0JY2xlYXJfY2FsbGJhY2sKLQljbGVhcl91c2VyX2xpc3QKLQluZXRzbm1wX2RzX2dldF92b2lkCi0JbmV0c25tcF9kc19zZXRfdm9pZAotCW5ldHNubXBfZHNfc2h1dGRvd24KLQluZXRzbm1wX3NwcmludF9yZWFsbG9jX29iamlkCi0JbmV0c25tcF9zcHJpbnRfcmVhbGxvY19vYmppZF90cmVlCi0JbW9kdWxlX25hbWUKLQlNaWIgICAgICAgICAgICAgICAgICAgICBEQVRBCi0JdHJlZV9oZWFkICAgICAgICAgICAgICAgREFUQQotCXNubXBfZXJybm8gICAgICAgICAgICAgIERBVEEKLQluZXRzbm1wX2RhZW1vbml6ZQotCXNubXBfbG9nX29wdGlvbnNfdXNhZ2UKLQluZXRzbm1wX2NvbnRhaW5lcl9mcmVlX2xpc3QKLQluZXRzbm1wX29pZF9zdGFzaF9nZXRuZXh0X25vZGUKLQluZXRzbm1wX29pZF9zdGFzaF9mcmVlCi0JbmV0c25tcF9nZXRfbGlzdF9ub2RlCi0JbmV0c25tcF9yZW1vdmVfbGlzdF9ub2RlCi0JbmV0c25tcF9yZW1vdmVfbG9naGFuZGxlcgotCW5ldHNubXBfcmVnaXN0ZXJfbG9naGFuZGxlcgotCWdldF9sb2doX2hlYWQKLQlkYmdfdG9rZW5zCi0JZGVidWdfbnVtX3Rva2VucwotCWNyZWF0ZV93aW5waXBlX3RyYW5zcG9ydAotCWdldF90ZW1wX2ZpbGVfcGF0dGVybgotCW5ldHNubXBfc3RyZHVwCi0JbmV0c25tcF9jYWxsb2MKLQluZXRzbm1wX21hbGxvYwotCW5ldHNubXBfcmVhbGxvYwotCW5ldHNubXBfZnJlZQotCW5ldHNubXBfdWRwNl9hZ2VudF9jb25maWdfdG9rZW5zX3JlZ2lzdGVyCi0JaW5pdF91c21fY29uZgotCXN0cnRva19yCi0gICAgICAgIHNubXBfcmVzZXRfdmFyX2J1ZmZlcnMKLSAgICAgICAgbmV0c25tcF9jb250YWluZXJfYWRkX2luZGV4Ci0gICAgICAgIG5ldHNubXBfY29udGFpbmVyX2ZpbmQKLSAgICAgICAgbmV0c25tcF9jNjRfY2hlY2szMl9hbmRfdXBkYXRlCi0gICAgICAgIG5ldHNubXBfb2lkX2NvbXBhcmVfbGwKLSAgICAgICAgbmV0c25tcF9uY29tcGFyZV9uZXRzbm1wX2luZGV4Ci0gICAgICAgIG5ldHNubXBfY29tcGFyZV9uZXRzbm1wX2luZGV4Ci0gICAgICAgIGZpbmRfdmFyYmluZF9pbl9saXN0Ci0gICAgICAgIG5ldHNubXBfZGlzcGF0Y2hfZXh0ZXJuYWxfZXZlbnRzCi0gICAgICAgIG5ldHNubXBfZXh0ZXJuYWxfZXZlbnRfaW5mbwotICAgICAgICBuZXRzbm1wX2xvZ2dpbmdfcmVzdGFydAotICAgICAgICBza2lwX3Rva2VuCi0gICAgICAgIHBhcnNlX3NlY0xldmVsX2NvbmYKLSAgICAgICAgbmV0c25tcF9xdWVyeV9nZXRfZGVmYXVsdF9zZXNzaW9uCi0gICAgICAgIG5ldHNubXBfcXVlcnlfc2V0X2RlZmF1bHRfc2Vzc2lvbgotICAgICAgICBuZXRzbm1wX2RzX3BhcnNlX2Jvb2xlYW4KLSAgICAgICAgbmV0c25tcF9yZWdpc3Rlcl9kZWZhdWx0X3RhcmdldAotICAgICAgICBuZXRzbm1wX3JlZ2lzdGVyX2RlZmF1bHRfZG9tYWluCi0gICAgICAgIG5ldHNubXBfcmVnaXN0ZXJfc2VydmljZV9oYW5kbGVycwotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX3NlcnZlcgotICAgICAgICBuZXRzbm1wX3Rkb21haW5fdHJhbnNwb3J0X2Z1bGwKLSAgICAgICAgc25tcF9hZGRfZnVsbAotICAgICAgICBuZXRzbm1wX3RyYW5zcG9ydF9vcGVuX2NsaWVudAotICAgICAgICBzbm1wX29pZHN1YnRyZWVfY29tcGFyZQotICAgICAgICBzbm1wX2Rpc2FibGVfc3lzbG9nCi0gICAgICAgIHNubXBfc3RkZXJybG9nX3N0YXR1cwotICAgICAgICBzYV9maW5kX3NwZWNpZmljCi0gICAgICAgIGNoZWNrX3Jvd3N0YXR1c190cmFuc2l0aW9uCi0gICAgICAgIGNoZWNrX3N0b3JhZ2VfdHJhbnNpdGlvbgotICAgICAgICBuZXRzbm1wX3ZpZXdfZ2V0Ci0gICAgICAgIG5ldHNubXBfY2hlY2tfdmJfcm93c3RhdHVzX3ZhbHVlCi0gICAgICAgIG5ldHNubXBfY2hlY2tfdmJfdHlwZV9hbmRfc2l6ZQotICAgICAgICBuZXRzbm1wX2NoZWNrX3ZiX3R5cGVfYW5kX21heF9zaXplCi0gICAgICAgIHJlYWRfY29uZmlnX3NhdmVfb2JqaWQKLSAgICAgICAgcHJpbnRfb2lkX3JlcG9ydF9lbmFibGVfbWliY2hpbGRvaWQKLSAgICAgICAgbmV0c25tcF9xdWVyeV93YWxrCi0gICAgICAgIG5ldHNubXBfcXVlcnlfZ2V0bmV4dAotICAgICAgICBuZXRzbm1wX3F1ZXJ5X2dldAotCW5ldHNubXBfbWt0ZW1wCi0gICAgICAgIGRlYnVnbXNnX3N1Ym9pZAotO0lQdjYgICAgICAgIG5ldHNubXBfdWRwNl9wYXJzZV9zZWN1cml0eQotO0lQdjYgICAgICAgIG5ldHNubXBfdWRwNl9nZXRTZWNOYW1lCi07SVB2NiAgICAgICAgbmV0c25tcF9UQ1BJUHY2RG9tYWluCi07SVB2NiAgICAgICAgbmV0c25tcF9VRFBJUHY2RG9tYWluCi0KZGlmZiAtLWdpdCBhL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcCBiL3dpbjMyL2xpYnNubXBfZGxsL2xpYnNubXBfZGxsLmRzcAppbmRleCBlY2I5ZDVlLi4xMmMwNDE0IDEwMDY0NAotLS0gYS93aW4zMi9saWJzbm1wX2RsbC9saWJzbm1wX2RsbC5kc3AKKysrIGIvd2luMzIvbGlic25tcF9kbGwvbGlic25tcF9kbGwuZHNwCkBAIC0xMDQsNyArMTA0LDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXGNtdV9jb21wYXQuYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXGNsb3NlZGlyLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0xMzYsMTAgKzEzNiwxOCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcZmRfZXZlbnRfbWFuYWdlci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJcZ2V0b3B0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxnZXR0aW1lb2ZkYXkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXGluZXRfbnRvcC5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTU2LDYgKzE2NCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcbGFyZ2VfZmRfc2V0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxsY2RfdGltZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMTc2LDYgKzE4OCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcb3BlbmRpci5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXHNubXBsaWJccGFyc2UuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTE4NCw2ICsyMDAsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHJlYWRkaXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNjYXBpLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yMzIsNiArMjUyLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cc25tcGxpYlxzbm1wX3NlcnZpY2UuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBfdHJhbnNwb3J0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0yNDAsMjcgKzI2NCw1MSBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcF9zZXJ2aWNlLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBBbGlhc0RvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcENhbGxiYWNrRG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBDYWxsYmFja0RvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFRDUERvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wSVB2NEJhc2VEb21haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHNubXBUQ1BJUHY2RG9tYWluLmMNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBJUHY2QmFzZURvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUERvbWFpbi5jDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wU29ja2V0QmFzZURvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXHNubXBsaWJcc25tcFVEUElQdjZEb21haW4uYw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUEJhc2VEb21haW4uYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHRyYW5zcG9ydHNcc25tcFRDUERvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVENQSVB2NkRvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQQmFzZURvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQRG9tYWluLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cc25tcGxpYlx0cmFuc3BvcnRzXHNubXBVRFBJUHY0QmFzZURvbWFpbi5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXHNubXBsaWJcdHJhbnNwb3J0c1xzbm1wVURQSVB2NkRvbWFpbi5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQpAQCAtMjgwLDYgKzMyOCwxNCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXHNubXBsaWJcc3RydG9rX3IuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRvdWxsLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlxzeXN0ZW0uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTI4OCwxMCArMzQ0LDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxzbm1wbGliXHN0cnRva19yLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx1Y2RfY29tcGF0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zMDIsMTAgKzM1NCw2IEBACiANCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5waXBlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlxmZF9ldmVudF9tYW5hZ2VyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiSGVhZGVyIEZpbGVzIg0KIA0KQEAgLTMyNCwxMCArMzcyLDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XGNtdV9jb21wYXQuaCINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCiBTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxjb250YWluZXIuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0zNDAsNiArMzg0LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxmZF9ldmVudF9tYW5hZ2VyLmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcZ2V0b3B0LmgiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMzUyLDYgKzQwMCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcbGFyZ2VfZmRfc2V0LmgiDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcbGNkX3RpbWUuaCINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC00NDQsNiArNDk2LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Ii4uXC4uXGluY2x1ZGVcbmV0LXNubXBcbGlicmFyeVxzdHJ0b2tfci5oIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHN5c3RlbS5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTQ1MiwxMCArNTA4LDYgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0iLi5cLi5caW5jbHVkZVxuZXQtc25tcFxsaWJyYXJ5XHN0cnRva19yLmgiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcdWNkX2NvbXBhdC5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTQ2Myw1ICs1MTUsOSBAQAogU09VUkNFPSIuLlwuLlxpbmNsdWRlXG5ldC1zbm1wXGxpYnJhcnlcdmFjbS5oIg0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS5cbGlic25tcC5kZWYNCisjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIFRhcmdldA0KICMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmIGIvd2luMzIvbGlidWNkbWlicy9saWJ1Y2RtaWJzLmRlZgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWY0NzNkOS4uMDAwMDAwMAotLS0gYS93aW4zMi9saWJ1Y2RtaWJzL2xpYnVjZG1pYnMuZGVmCisrKyAvZGV2L251bGwKQEAgLTEsMTcgKzAsMCBAQAotOyAgICAgICBAKCMpbGlidWNkbWlicy5kZWYgICAgMS4wIDEwLzI2Lzk3IChnbWFyem90QGJheW5ldHdvcmtzLmNvbSkKLQotREVTQ1JJUFRJT04gICAgICdVQ0QgU05NUCBNSUJTIExpYnJhcnknCi07Q09ERQotICAgICAgICAgICAgU0hBUkVEIFJFQUQgRVhFQ1VURQotO0RBVEEgICAgICAgICAgICBTSEFSRUQgUkVBRCBXUklURQotRVhQT1JUUwotCXNlbmRfZWFzeV90cmFwCi0JaW5pdF9tYXN0ZXJfYWdlbnQKLQlpbml0X21pYl9tb2R1bGVzCi0JaW5pdF9hZ2VudAotCWFyZ3ZyZXN0YXJ0bmFtZQotCWFyZ3ZyZXN0YXJ0Ci0JYXJndnJlc3RhcnRwCi0JdXBkYXRlX2NvbmZpZwotCWdldF90YXJnZXRfc2Vzc2lvbnMKLQpkaWZmIC0tZ2l0IGEvd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oIGIvd2luMzIvbWliX21vZHVsZV9pbmNsdWRlcy5oCmluZGV4IDNiZmRmNmEuLjljYjc1MGMgMTAwNjQ0Ci0tLSBhL3dpbjMyL21pYl9tb2R1bGVfaW5jbHVkZXMuaAorKysgYi93aW4zMi9taWJfbW9kdWxlX2luY2x1ZGVzLmgKQEAgLTI4LDggKzI4LDggQEAKICNpbmNsdWRlICJtaWJncm91cC9SbW9uLmgiCiAjZW5kaWYKIAotI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NSUJfTU9EVUxFCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50LW1pYi5oIgorI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NT0RVTEUKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQuaCIKICNlbmRpZgogCiAjaWZkZWYgVVNJTkdfU01VWF9NT0RVTEUKQEAgLTg4LDggKzg4LDkgQEAKICNpbmNsdWRlICJtaWJncm91cC9zbm1wdjMvdXNtU3RhdHMuaCIKICNpbmNsdWRlICJtaWJncm91cC9zbm1wdjMvdXNtVXNlci5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL25vdGlmaWNhdGlvbi9zbm1wTm90aWZ5VGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvbm90aWZpY2F0aW9uL3NubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9zbm1wLW5vdGlmaWNhdGlvbi1taWIvc25tcE5vdGlmeUZpbHRlclRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvc25tcC1ub3RpZmljYXRpb24tbWliL3NubXBOb3RpZnlGaWx0ZXJUYWJsZS9zbm1wTm90aWZ5RmlsdGVyVGFibGUuaCIKICNpbmNsdWRlICJtaWJncm91cC90YXJnZXQvc25tcFRhcmdldEFkZHJFbnRyeS5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL3RhcmdldC9zbm1wVGFyZ2V0UGFyYW1zRW50cnkuaCIKICNpbmNsdWRlICJtaWJncm91cC90YXJnZXQvdGFyZ2V0LmgiCkBAIC05OSw2ICsxMDAsNyBAQAogI2luY2x1ZGUgIm1pYmdyb3VwL2FnZW50L25zRGVidWcuaCIKICNpbmNsdWRlICJtaWJncm91cC9hZ2VudC9uc0NhY2hlLmgiCiAjaW5jbHVkZSAibWliZ3JvdXAvYWdlbnQvbnNMb2dnaW5nLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvdXRpbGl0aWVzL2lxdWVyeS5oIgogI2luY2x1ZGUgIm1pYmdyb3VwL3V0aWxpdGllcy9vdmVycmlkZS5oIgogCiAjaWZkZWYgVVNJTkdfSE9TVF9NT0RVTEUKQEAgLTEyNSwxNSArMTI3LDIzIEBACiAjaW5jbHVkZSAibWliZ3JvdXAvUm1vbi9ldmVudC5oIgogI2VuZGlmCiAKLSNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTUlCX01PRFVMRQotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVUcmlnZ2VyVGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCIKLSNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZU9iamVjdHNUYWJsZS5oIgotI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9tdGVFdmVudFRhYmxlLmgiCi0jaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuaCIKKyNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTU9EVUxFCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZi5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudC5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlRXZlbnRUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzQ29uZi5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVPYmplY3RzLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZU9iamVjdHNUYWJsZS5oIgorI2luY2x1ZGUgIm1pYmdyb3VwL2Rpc21hbi9ldmVudC9tdGVTY2FsYXJzLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJCb29sZWFuVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckNvbmYuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckRlbHRhVGFibGUuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXIuaCIKKyNpbmNsdWRlICJtaWJncm91cC9kaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlLmgiCisjaW5jbHVkZSAibWliZ3JvdXAvZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5oIgogI2VuZGlmCiAKICNpZmRlZiBVU0lOR19TTVVYX01PRFVMRQpkaWZmIC0tZ2l0IGEvd2luMzIvbWliX21vZHVsZV9pbml0cy5oIGIvd2luMzIvbWliX21vZHVsZV9pbml0cy5oCmluZGV4IGZkMGE3YjIuLmY3OGQ4OTMgMTAwNjQ0Ci0tLSBhL3dpbjMyL21pYl9tb2R1bGVfaW5pdHMuaAorKysgYi93aW4zMi9taWJfbW9kdWxlX2luaXRzLmgKQEAgLTI5LDYgKzI5LDkgQEAKICNpZm5kZWYgX01TQ19WRVIKICAgaWYgKHNob3VsZF9pbml0KCJkaXNrIikpIGluaXRfZGlzaygpOwogI2VuZGlmCisjaWZkZWYgVVNJTkdfVUNEX1NOTVBfRExNT0RfTU9EVUxFCisgIGlmIChzaG91bGRfaW5pdCgiZGxtb2QiKSkgaW5pdF9kbG1vZCgpOworI2VuZGlmCiAgIGlmIChzaG91bGRfaW5pdCgibG9hZGF2ZSIpKSBpbml0X2xvYWRhdmUoKTsKICAgaWYgKHNob3VsZF9pbml0KCJleHRlbnNpYmxlIikpIGluaXRfZXh0ZW5zaWJsZSgpOwogICBpZiAoc2hvdWxkX2luaXQoImV4dGVuZCIpKSBpbml0X2V4dGVuZCgpOwpAQCAtNzgsMTcgKzgxLDIyIEBACiAKICAgaWYgKHNob3VsZF9pbml0KCJvdmVycmlkZSIpKSBpbml0X292ZXJyaWRlKCk7CiAKLSNpZmRlZiBVU0lOR19ESVNNQU5fRVZFTlRfTUlCX01PRFVMRQotI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0NBTExCQUNLX0RPTUFJTgorI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NT0RVTEUKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyIikpIGluaXRfbXRlVHJpZ2dlcigpOworICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXJDb25mIikpIGluaXRfbXRlVHJpZ2dlckNvbmYoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyVGFibGUiKSkgaW5pdF9tdGVUcmlnZ2VyVGFibGUoKTsKLSNlbmRpZgogICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXJEZWx0YVRhYmxlIikpIGluaXRfbXRlVHJpZ2dlckRlbHRhVGFibGUoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUiKSkgaW5pdF9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVUcmlnZ2VyQm9vbGVhblRhYmxlIikpIGluaXRfbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSgpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSIpKSBpbml0X210ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZSgpOworICBpZiAoc2hvdWxkX2luaXQoIm10ZU9iamVjdHMiKSkgaW5pdF9tdGVPYmplY3RzKCk7CisgIGlmIChzaG91bGRfaW5pdCgibXRlT2JqZWN0c0NvbmYiKSkgaW5pdF9tdGVPYmplY3RzQ29uZigpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZU9iamVjdHNUYWJsZSIpKSBpbml0X210ZU9iamVjdHNUYWJsZSgpOworICBpZiAoc2hvdWxkX2luaXQoIm10ZUV2ZW50IikpIGluaXRfbXRlRXZlbnQoKTsKKyAgaWYgKHNob3VsZF9pbml0KCJtdGVFdmVudENvbmYiKSkgaW5pdF9tdGVFdmVudENvbmYoKTsKICAgaWYgKHNob3VsZF9pbml0KCJtdGVFdmVudFRhYmxlIikpIGluaXRfbXRlRXZlbnRUYWJsZSgpOwogICBpZiAoc2hvdWxkX2luaXQoIm10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUiKSkgaW5pdF9tdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlKCk7CisgIGlmIChzaG91bGRfaW5pdCgibXRlRXZlbnRTZXRUYWJsZSIpKSBpbml0X210ZUV2ZW50U2V0VGFibGUoKTsKICNlbmRpZgogCiAgIGlmIChzaG91bGRfaW5pdCgidmFjbV9jb250ZXh0IikpIGluaXRfdmFjbV9jb250ZXh0KCk7CmRpZmYgLS1naXQgYS93aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmggYi93aW4zMi9taWJfbW9kdWxlX3NodXRkb3duLmgKaW5kZXggMDQzMjI2NS4uY2FlZGY2MCAxMDA2NDQKLS0tIGEvd2luMzIvbWliX21vZHVsZV9zaHV0ZG93bi5oCisrKyBiL3dpbjMyL21pYl9tb2R1bGVfc2h1dGRvd24uaApAQCAtMSw2ICsxLDE1IEBACiAvKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLwogICBpZiAoc2hvdWxkX2luaXQoInByb3h5IikpIHNodXRkb3duX3Byb3h5KCk7CisgIGlmIChzaG91bGRfaW5pdCgic25tcE5vdGlmeUZpbHRlclRhYmxlIikpIHNodXRkb3duX3NubXBOb3RpZnlGaWx0ZXJUYWJsZSgpOwogIAogI2lmZGVmIFVTSU5HX1VDRF9TTk1QX01PRFVMRQogICBpZiAoc2hvdWxkX2luaXQoInBhc3NfcGVyc2lzdCIpKSBzaHV0ZG93bl9wYXNzX3BlcnNpc3QoKTsKICNlbmRpZgorCisjaWZkZWYgVVNJTkdfVUNEX1NOTVBfRExNT0RfTU9EVUxFCisgIGlmIChzaG91bGRfaW5pdCgiZGxtb2QiKSkgc2h1dGRvd25fZGxtb2QoKTsKKyNlbmRpZgorCisjaWZkZWYgVVNJTkdfV0lORVhURExMX01PRFVMRQorICAgaWYgKHNob3VsZF9pbml0KCJ3aW5FeHRETEwiKSkgc2h1dGRvd25fd2luRXh0RExMKCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3dpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmggYi93aW4zMi9uZXQtc25tcC9hZ2VudC9taWJfbW9kdWxlX2NvbmZpZy5oCmluZGV4IDk1NjYyYWQuLjQ5NzhkYzggMTAwNjQ0Ci0tLSBhL3dpbjMyL25ldC1zbm1wL2FnZW50L21pYl9tb2R1bGVfY29uZmlnLmgKKysrIGIvd2luMzIvbmV0LXNubXAvYWdlbnQvbWliX21vZHVsZV9jb25maWcuaApAQCAtMTUsMTEgKzE1LDEyIEBACiAvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIG5vdGlmaWNhdGlvbiBtb2R1bGUgZmlsZXMuICAqLwogI2RlZmluZSBVU0lOR19OT1RJRklDQVRJT05fTU9EVUxFIDEKICAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50IG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NT0RVTEUgMQorIAogLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBub3RpZmljYXRpb24tbG9nLW1pYiBtb2R1bGUgZmlsZXMuICovCiAjaWZkZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsKICNkZWZpbmUgVVNJTkdfTk9USUZJQ0FUSU9OX0xPR19NSUJfTk9USUZJQ0FUSU9OX0xPR19NT0RVTEUgMQotI2Vsc2UKLS8qICN1bmRlZiBVU0lOR19OT1RJRklDQVRJT05fTE9HX01JQl9OT1RJRklDQVRJT05fTE9HX01PRFVMRSAqLwogI2VuZGlmCiAKIC8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgdGFyZ2V0IG1vZHVsZSBmaWxlcy4gICovCkBAIC0yNDUsMzMgKzI0Niw1NyBAQAogI2VuZGlmIC8qIFVTSU5HX1JNT05fTU9EVUxFICovCiAKIAotI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NSUJfTU9EVUxFIAorI2lmZGVmIFVTSU5HX0RJU01BTl9FVkVOVF9NT0RVTEUgCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVUcmlnZ2VyVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URVRSSUdHRVJUQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlU2NhbGFycyBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFU0NBTEFSU19NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlVHJpZ2dlckRlbHRhVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URVRSSUdHRVJERUxUQVRBQkxFX01PRFVMRSAxCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVUcmlnZ2VyIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URVRSSUdHRVJFWElTVEVOQ0VUQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSVEFCTEVfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZVRyaWdnZXJCb29sZWFuVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URVRSSUdHRVJCT09MRUFOVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJEZWx0YVRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSREVMVEFUQUJMRV9NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIG1vZHVsZSBmaWxlcy4gICovCi0jZGVmaW5lIFVTSU5HX0RJU01BTl9NVEVUUklHR0VSVEhSRVNIT0xEVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUkVYSVNURU5DRVRBQkxFX01PRFVMRSAxCiAgCi0vKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9tdGVPYmplY3RzVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URU9CSkVDVFNUQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlckJvb2xlYW5UYWJsZSBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFVFJJR0dFUkJPT0xFQU5UQUJMRV9NT0RVTEUgMQogIAotLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vbXRlRXZlbnRUYWJsZSBtb2R1bGUgZmlsZXMuICAqLwotI2RlZmluZSBVU0lOR19ESVNNQU5fTVRFRVZFTlRUQUJMRV9NT0RVTEUgMQorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSVEhSRVNIT0xEVEFCTEVfTU9EVUxFIDEKICAKLS8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KLSNkZWZpbmUgVVNJTkdfRElTTUFOX01URUVWRU5UTk9USUZJQ0FUSU9OVEFCTEVfTU9EVUxFIDEKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZVRyaWdnZXJDb25mIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVUUklHR0VSQ09ORl9NT0RVTEUgMQogIAotI2VuZGlmIC8qIFVTSU5HX0RJU01BTl9FVkVOVF9NSUJfTU9EVUxFICovCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVFdmVudCBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFRVZFTlRfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZUV2ZW50VGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URUVWRU5UVEFCTEVfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZUV2ZW50U2V0VGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URUVWRU5UU0VUVEFCTEVfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URUVWRU5UTk9USUZJQ0FUSU9OVEFCTEVfTU9EVUxFIDEKKyAKKy8qIERlZmluZSBpZiBjb21waWxpbmcgd2l0aCB0aGUgZGlzbWFuL2V2ZW50L210ZUV2ZW50Q29uZiBtb2R1bGUgZmlsZXMuICAqLworI2RlZmluZSBVU0lOR19ESVNNQU5fRVZFTlRfTVRFRVZFTlRDT05GX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVPYmplY3RzIG1vZHVsZSBmaWxlcy4gICovCisjZGVmaW5lIFVTSU5HX0RJU01BTl9FVkVOVF9NVEVPQkpFQ1RTX01PRFVMRSAxCisgCisvKiBEZWZpbmUgaWYgY29tcGlsaW5nIHdpdGggdGhlIGRpc21hbi9ldmVudC9tdGVPYmplY3RzVGFibGUgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URU9CSkVDVFNUQUJMRV9NT0RVTEUgMQorIAorLyogRGVmaW5lIGlmIGNvbXBpbGluZyB3aXRoIHRoZSBkaXNtYW4vZXZlbnQvbXRlT2JqZWN0c0NvbmYgbW9kdWxlIGZpbGVzLiAgKi8KKyNkZWZpbmUgVVNJTkdfRElTTUFOX0VWRU5UX01URU9CSkVDVFNDT05GX01PRFVMRSAxCisgCisjZW5kaWYgLyogVVNJTkdfRElTTUFOX0VWRU5UX01PRFVMRSAqLwogCiAjaWZkZWYgVVNJTkdfU01VWF9NT0RVTEUKICAKZGlmZiAtLWdpdCBhL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oIGIvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKaW5kZXggYTY4MjZiMy4uMTYwODU2MyAxMDA2NDQKLS0tIGEvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKKysrIGIvd2luMzIvbmV0LXNubXAvbmV0LXNubXAtY29uZmlnLmgKQEAgLTUsMzEgKzUsNDUgQEAKICNkZWZpbmUgTkVUX1NOTVBfQ09ORklHX0gKIAogLyogX01TQ19WRVIgdmFsdWVzCi0gICAxNjAwID0gMTAuMCAoMjAxMCkKLSAgIDE1MDAgPSAgOS4wICgyMDA4KQotICAgMTQwMCA9ICA4LjAgKDIwMDUpCi0gICAxMzEwID0gIDcuMSAoMjAwMykKLSAgIDEzMDAgPSAgNy4wICgyMDAyKQotICAgMTIwMCA9ICA2LjAKKyAgIDE4MDAgPSBNU1ZDKysgMTIuMCAoVmlzdWFsIFN0dWRpbyAyMDEzKQorICAgMTcwMCA9IE1TVkMrKyAxMS4wIChWaXN1YWwgU3R1ZGlvIDIwMTIpCisgICAxNjAwID0gTVNWQysrIDEwLjAgKFZpc3VhbCBTdHVkaW8gMjAxMCkKKyAgIDE1MDAgPSBNU1ZDKysgIDkuMCAoVmlzdWFsIFN0dWRpbyAyMDA4KQorICAgMTQwMCA9IE1TVkMrKyAgOC4wIChWaXN1YWwgU3R1ZGlvIDIwMDUpCisgICAxMzEwID0gTVNWQysrICA3LjEgKFZpc3VhbCBTdHVkaW8gMjAwMykKKyAgIDEzMDAgPSBNU1ZDKysgIDcuMCAoVmlzdWFsIFN0dWRpbyAyMDAyKQorICAgMTIwMCA9IE1TVkMrKyAgNi4wCiAqLwogCisjaWZkZWYgX01TQ19WRVIKKy8qIERpc2FibGUgd2FybmluZyA0MDE4OiBzaWduZWQvdW5zaWduZWQgbWlzbWF0Y2guICovCisjcHJhZ21hIHdhcm5pbmcgKGRpc2FibGU6IDQwMTgpCisjZW5kaWYKKworLyogQXV0b21hdGljYWxseSBzZXQgYnkgV2luZG93cyBwZXJsIENvbmZpZ3VyZSBzY3JpcHQuCisgKiBXaGVuIGNvbXBpbGluZyB3aXRoIHRoZSBNU1ZDIHdvcmtzcGFjZSwgdGhpcyBtdXN0IGJlIHNldCBtYW51YWxseS4KKyAqIFNlZSB0aGUgUEFDS0FHRV9WRVJTSU9OIHZhcmlhYmxlIGluIFVuaXggL2NvbmZpZ3VyZSBzY3JpcHQKKyovCisjaWZuZGVmIFBBQ0tBR0VfVkVSU0lPTgorI2RlZmluZSBQQUNLQUdFX1ZFUlNJT04gInVua25vd24iCisjZW5kaWYKKwogLyogRGVmaW5lIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIGlmIHlvdSBoYXZlOgogICogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8gTVNWQyA2LjAgYW5kIHRoZSBQbGF0Zm9ybSBTREsgKFBTREspCiAgKiBNaWNyb3NvZnQgVmlzdWFsIFN0dWRpby5OZXQgMjAwMgogICogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uTmV0IDIwMDMKLSAqIEN5Z3dpbgotICogTWluR1cgCiAgKi8KLS8qICN1bmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAqLworI2RlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyAxCiAKLS8qIE9ubHkgdXNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gV2luZG93cyAyMDAwIFNQNCBvciBsYXRlci4KLSAqIFdlIG5lZWQgYXQgbGVhc3QgU1AxIGZvciBzb21lIElQdjYgZGVmaW5lcyBpbiB3czJpcGRlZi5oLgotICogT25seSBkZWZpbmUgX1dJTjMyX1dJTk5UIHdoZW4gbm90IGJlaW5nIGNvbXBpbGVkIHdpdGggTVNWQyA2IHdpdGhvdXQgUFNESwotICogYmVjYXVzZSB0aGVyZSBpcyBhIGJ1ZyBpbiB0aGUgTVNWQyA2IGhlYWRlciA8d2luc29jay5oPiB0aGF0IGNhdXNlcwotICogaW5jbHVzaW9uIG9mIDx3aW5zb2NrMi5oPi4KKy8qIERlZmluZSBORVRTTk1QX0VOQUJMRV9JUFY2IHRvIGVuYWJsZSBJUHY2LiAgSVB2NiBpcyBvbmx5IGF2YWlsYWJsZSBvbgorICogV2luZG93cyBYUCBhbmQgaGlnaGVyLiAgKi8KKy8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCisKKy8qIE9ubHkgdXNlIFdpbmRvd3MgQVBJIGZ1bmN0aW9ucyBhdmFpbGFibGUgb24gV2luZG93cyAyMDAwIFNQNCBvciBsYXRlci4gIAorICogV2UgbmVlZCBhdCBsZWFzdCBTUDEgZm9yIHNvbWUgSVB2NiBkZWZpbmVzIGluIHdzMmlwZGVmLmgKICAqLwogI2lmbmRlZiBfV0lOMzJfV0lOTlQKLSNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4NTAxIC8qX1dJTjMyX1dJTk5UX1dJTjJLKi8KKyNkZWZpbmUgX1dJTjMyX1dJTk5UIDB4NjAwIC8qX1dJTjMyX1dJTk5UX1dJTjYqLwogI2Vsc2UKICNpZiBfV0lOMzJfV0lOTlQgPCAweDUwMQogI2Vycm9yIF9XSU4zMl9XSU5OVCBpcyB0b28gbG93IC0gaXQgc2hvdWxkIGJlIHNldCB0byBhdCBsZWFzdCAweDUwMS4KQEAgLTIyNywxOSArMjQxLDE3IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGFzbS9wYWdlLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfQVNNX1BBR0VfSCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJjb3B5JyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0JDT1BZICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2dldG5leHQnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfQ0dFVE5FWFQgKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjcnRkYmcuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfQ1JUREJHX0ggMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVjdC5oPiBoZWFkZXIgZmlsZS4gKi8KLS8qICN1bmRlZiBIQVZFX0RJUkVDVF9IICovCisjZGVmaW5lIEhBVkVfRElSRUNUX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNob3duJyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0NIT1dOICovCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4gICovCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRpcmVudC5oPiBoZWFkZXIgZmlsZSwgYW5kIGl0IGRlZmluZXMgYERJUicuCisgICAqLwogLyogI3VuZGVmIEhBVkVfRElSRU5UX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkbGZjbi5oPiBoZWFkZXIgZmlsZS4gKi8KQEAgLTMxNCwxMiArMzI2LDE0IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGlmX25hbWVpbmRleCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9JRl9OQU1FSU5ERVggKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBpbmRleCcgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9JTkRFWCAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGluZXQvbWliMi5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX0lORVRfTUlCMl9IICovCiAKKyNpZmRlZiBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxpcGhscGFwaS5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9JUEhMUEFQSV9ICisjZW5kaWYKKwogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYGludDMyX3QnLiAqLwogI2RlZmluZSBIQVZFX0lOVDMyX1QgMQogCkBAIC0zNjUsOSArMzc5LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJDUllQVE8gKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBkbCcgbGlicmFyeSAoLWxkbCkuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJETCAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGVmZW5jZScgbGlicmFyeSAoLWxlZmVuY2UpLiAqLwogLyogI3VuZGVmIEhBVkVfTElCRUZFTkNFICovCiAKQEAgLTM3Nyw5ICszODgsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBrc3RhdCcgbGlicmFyeSAoLWxrc3RhdCkuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJLU1RBVCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGt2bScgbGlicmFyeSAoLWxrdm0pLiAqLwotLyogI3VuZGVmIEhBVkVfTElCS1ZNICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbScgbGlicmFyeSAoLWxtKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQk0gKi8KIApAQCAtNDA0LDkgKzQxMiw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNlbnNvcnMnIGxpYnJhcnkgKC1sc2Vuc29ycykuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJTRU5TT1JTICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgeicgbGlicmFyeSAoLWx6KS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQlogKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsaW1pdHMuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTElNSVRTX0ggMQogCkBAIC00MTksOSArNDI0LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bG9jYWxlLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0xPQ0FMRV9IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBsb2NhbHRpbWVfcicgZnVuY3Rpb24uICovCi0vKiAjdW5kZWYgSEFWRV9MT0NBTFRJTUVfUiAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxyYW5kNDgnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfTFJBTkQ0OCAqLwogCkBAIC00MzcsMTIgKzQzOSw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1hbGxvYy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9NQUxMT0NfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtY3B5JyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9NRU1DUFkgMQotCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYG1lbW1vdmUnIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTU1PVkUgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG1lbW9yeS5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9NRU1PUllfSCAxCiAKQEAgLTUxMiw2ICs1MDgsOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lwX2ljbXAuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lQX0lDTVBfSCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWNtcDYuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lDTVA2X0ggKi8KKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXRpbmV0L2lwX3Zhci5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX05FVElORVRfSVBfVkFSX0ggKi8KIApAQCAtNjgzLDkgKzY4Miw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0YXR2ZnMnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfU1RBVFZGUyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGFyZy5oPiBoZWFkZXIgZmlsZS4gKi8KLSNkZWZpbmUgSEFWRV9TVERBUkdfSCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkaW50Lmg+IGhlYWRlciBmaWxlLiAqLwogI2lmZGVmIF9fTUlOR1czMl9fCiAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQpAQCAtNzAwLDkgKzY5Niw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNhc2VzdHInIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfU1RSQ0FTRVNUUiAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmNocicgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSQ0hSIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJkdXAnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1NUUkRVUCAxCiAKQEAgLTg0Niw2ICs4MzksOSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1NZU19USU1FX0ggKi8KIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzeXMvdGltZWIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfU1lTX1RJTUVCX0ggMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90eXBlcy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TWVNfVFlQRVNfSCAxCiAKQEAgLTkzOSw2ICs5MzUsMTUgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jay5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9XSU5TT0NLX0ggMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdpbnNvY2syLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dJTlNPQ0syX0ggMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHdzMnRjcGlwLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX1dTMlRDUElQX0ggMQorCisvKiBTZXQgaWYgSVBfUEtUSU5GTyBpcyB1c2FibGUgKi8KKyNkZWZpbmUgSEFWRV9JUF9QS1RJTkZPIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx4dGkuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9YVElfSCAqLwogCkBAIC05NDYsMTMgKzk1MSwxNyBAQAogLyogI3VuZGVmIFBBQ0tBR0VfQlVHUkVQT1JUICovCiAKIC8qIERlZmluZSB0byB0aGUgZnVsbCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9OQU1FCiAjZGVmaW5lIFBBQ0tBR0VfTkFNRSAiTmV0LVNOTVAiCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgYW5kIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogLyogI3VuZGVmIFBBQ0tBR0VfU1RSSU5HICovCiAKIC8qIERlZmluZSB0byB0aGUgb25lIHN5bWJvbCBzaG9ydCBuYW1lIG9mIHRoaXMgcGFja2FnZS4gKi8KKyNpZm5kZWYgUEFDS0FHRV9UQVJOQU1FCiAjZGVmaW5lIFBBQ0tBR0VfVEFSTkFNRSAibmV0LXNubXAiCisjZW5kaWYKIAogLyogRGVmaW5lIHRvIHRoZSB2ZXJzaW9uIG9mIHRoaXMgcGFja2FnZS4gKi8KIC8qICN1bmRlZiBQQUNLQUdFX1ZFUlNJT04gKi8KQEAgLTk2Niw2ICs5NzUsOSBAQAogLyogVGhlIHNpemUgb2YgYSBgbG9uZycsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX0xPTkcgNAogCisvKiBUaGUgc2l6ZSBvZiBhIGBpbnRtYXhfdCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KKyNkZWZpbmUgU0laRU9GX0lOVE1BWF9UIDgKKwogLyogVGhlIHNpemUgb2YgYSBgc2hvcnQnLCBhcyBjb21wdXRlZCBieSBzaXplb2YuICovCiAjZGVmaW5lIFNJWkVPRl9TSE9SVCAyCiAKQEAgLTk4MSw3ICs5OTMsNyBAQAogI2RlZmluZSBTVERDX0hFQURFUlMgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgY2FuIHNhZmVseSBpbmNsdWRlIGJvdGggPHN5cy90aW1lLmg+IGFuZCA8dGltZS5oPi4gKi8KLSNkZWZpbmUgVElNRV9XSVRIX1NZU19USU1FIDEKKy8qICN1bmRlZiBUSU1FX1dJVEhfU1lTX1RJTUUgKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91ciBwcm9jZXNzb3Igc3RvcmVzIHdvcmRzIHdpdGggdGhlIG1vc3Qgc2lnbmlmaWNhbnQgYnl0ZQogICAgZmlyc3QgKGxpa2UgTW90b3JvbGEgYW5kIFNQQVJDLCB1bmxpa2UgSW50ZWwgYW5kIFZBWCkuICovCkBAIC0xMDMwLDk2ICsxMDQyLDEwMiBAQAogLyogI3VuZGVmIFJURU5UUllfNF80ICovCiAKIC8qIERvZXMgc3RydWN0IHNpZ2FjdGlvbiBoYXZlIGEgc2Ffc2lnYWN0aW9uIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9TSUdBQ1RJT05fSEFTX1NBX1NJR0FDVElPTiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NJR0FDVElPTl9TQV9TSUdBQ1RJT04gKi8KIAogLyogRG9lcyBzdHJ1Y3Qgc29ja2FkZHIgaGF2ZSBhIHNhX2xlbiBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX0xFTiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX0xFTiAqLwogCiAvKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfZmFtaWx5MiBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfU09DS0FERFJfSEFTX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NBX1VOSU9OX1NBX0dFTkVSSUNfU0FfRkFNSUxZMiAqLwogCiAvKiBEb2VzIHN0cnVjdCBpbjZfYWRkciBoYXZlIGEgczZfdW4uc2E2X2xhZGQgZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX0lONl9BRERSX0hBU19TNl9VTl9TQTZfTEFERFIgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JTjZfQUREUl9TNl9VTl9TQTZfTEFERFIgKi8KKworLyogbXNnaGRyLm1zZ19jb250cm9sICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfTVNHSERSX01TR19DT05UUk9MICovCisKKy8qIG1zZ2hkci5tc2dfZmxhZ3MgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0ZMQUdTICovCiAKIC8qIHJ0ZW50cnkgc3RydWN0dXJlIHRlc3RzICovCiAvKiAjdW5kZWYgUlRFTlRSWV9SVF9ORVhUICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX0RTVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9VTklUICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VTRSAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9SRUZDTlQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfSEFTSCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfRFNUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VTklUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9VU0UgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1JFRkNOVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfSEFTSCAqLwogCiAvKiBpZm5ldCBzdHJ1Y3R1cmUgdGVzdHMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9CQVVEUkFURV9JRlNfVkFMVUUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1NQRUVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9UWVBFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JTUNBU1RTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JUURST1BTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9MQVNUQ0hBTkdFX1RWX1NFQyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTk9QUk9UTyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT01DQVNUUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfWE5BTUUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX09CWVRFUyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfSUJZVEVTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9BRERSTElTVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0JBVURSQVRFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEVfSUZTX1ZBTFVFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfU1BFRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9UWVBFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSU1DQVNUUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lRRFJPUFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9MQVNUQ0hBTkdFX1RWX1NFQyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX05PUFJPVE8gKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PTUNBU1RTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfWE5BTUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9PQllURVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JQllURVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9BRERSTElTVCAqLwogCiAvKiB0Y3BzdGF0LnRjcHNfcmN2bWVtZHJvcCAqLwotLyogI3VuZGVmIFNUUlVDVF9UQ1BTVEFUX0hBU19UQ1BTX1JDVk1FTURST1AgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9UQ1BTVEFUX1RDUFNfUkNWTUVNRFJPUCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0RJU0NBUkQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRElTQ0FSRCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlQgKi8KIAogLyogdWRwc3RhdC51ZHBzX2Rpc2NhcmQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfVURQU1RBVF9IQVNfVURQU19OT1BPUlRCQ0FTVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19OT1BPUlRCQ0FTVCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX0ZVTExTT0NLICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX0ZVTExTT0NLICovCiAKIC8qIGFycGhkLmF0X25leHQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfQVJQSERfSEFTX0FUX05FWFQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9BUlBIRF9BVF9ORVhUICovCiAKIC8qIGlmYWRkci5pZmFfbmV4dCAqLwotLyogI3VuZGVmIFNUUlVDVF9JRkFERFJfSEFTX0lGQV9ORVhUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZBRERSX0lGQV9ORVhUICovCiAKIC8qIGlmbmV0LmlmX210dSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfTVRVICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTVRVICovCiAKIC8qIHN3ZGV2dC5zd19uYmxrc2VuYWJsZWQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1dERVZUX0hBU19TV19OQkxLU0VOQUJMRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TV0RFVlRfU1dfTkJMS1NFTkFCTEVEICovCiAKIC8qIG5saXN0Lm5fdmFsdWUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFICovCiAKIC8qIGlwc3RhdCBzdHJ1Y3R1cmUgdGVzdHMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZPUldBUkQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfQ0FOVEZSQUcgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfREVMSVZFUkVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdEUk9QUEVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0ZSQUdUSU1FT1VUICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX0xPQ0FMT1VUICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX05PUFJPVE8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9ST1VURSAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRFJPUFBFRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19PRlJBR01FTlRTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX1JFQVNTRU1CTEVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URk9SV0FSRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfQ0FOVEZSQUcgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0RFTElWRVJFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR0RST1BQRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0ZSQUdUSU1FT1VUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19MT0NBTE9VVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9QUk9UTyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfTk9ST1VURSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0RST1BQRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX09GUkFHTUVOVFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX1JFQVNTRU1CTEVEICovCiAKIC8qIHZmc3N0YXQuZl9mcnNpemUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVFZGU19IQVNfRl9GUlNJWkUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRlJTSVpFICovCiAKIC8qIHZmc3N0YXQuZl9maWxlcyAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZJTEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVFZGU19GX0ZJTEVTICovCiAKIC8qIHN0YXRmcyBpbm9kZSBzdHJ1Y3R1cmUgdGVzdHMqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRklMRVMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZGUkVFICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GQVZBSUwgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GSUxFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZGUkVFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkFWQUlMICovCiAKIC8qIGRlc19rc19zdHJ1Y3Qud2Vha19rZXkgKi8KLS8qICN1bmRlZiBTVFJVQ1RfREVTX0tTX1NUUlVDVF9IQVNfV0VBS19LRVkgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9ERVNfS1NfU1RSVUNUX1dFQUtfS0VZICovCiAKIC8qIGlmbmV0IG5lZWRzIHRvIGhhdmUgX0tFUk5FTCBkZWZpbmVkICovCiAvKiAjdW5kZWYgSUZORVRfTkVFRFNfS0VSTkVMICovCkBAIC0xMTMzLDkgKzExNTEsNiBAQAogLyogZGVmaW5lIGlmIFNJT0NHSUZBRERSIGV4aXN0cyBpbiBzeXMvaW9jdGwuaCAqLwogLyogI3VuZGVmIFNZU19JT0NUTF9IX0hBU19TSU9DR0lGQUREUiAqLwogCi0vKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciAocHJvY2Vzc29yKSBkZWZpbmVzIF9fRlVOQ1RJT05fXyBmb3IgeW91ICovCi0vKiAjdW5kZWYgSEFWRV9DUFBfVU5ERVJCQVJfRlVOQ1RJT05fREVGSU5FRCAqLwotCiAvKiBNaWItMiB0cmVlIEluZm8gKi8KIC8qIFRoZXNlIGFyZSB0aGUgc3lzdGVtIGluZm9ybWF0aW9uIHZhcmlhYmxlcy4gKi8KIApAQCAtMTM0MCw0NCArMTM1NSw2IEBACiAjZGVmaW5lIEhBVkVfU1NJWkVfVAogI2VuZGlmCiAKLSNpZm5kZWYgSEFWRV9TVFJDSFIKLSNpZmRlZiBIQVZFX0lOREVYCi0jIGRlZmluZSBzdHJjaHIoYSxiKSBpbmRleChhLGIpCi0jIGRlZmluZSBzdHJyY2hyKGEsYikgcmluZGV4KGEsYikKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9JTkRFWAotI2lmZGVmIEhBVkVfU1RSQ0hSCi0jIGRlZmluZSBpbmRleChhLGIpIHN0cmNocihhLGIpCi0jIGRlZmluZSByaW5kZXgoYSxiKSBzdHJyY2hyKGEsYikKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1DUFkKLSNpZmRlZiBIQVZFX0JDT1BZCi0jIGRlZmluZSBtZW1jcHkoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1tb3ZlKGQsIHMsIG4pIGJjb3B5ICgocyksIChkKSwgKG4pKQotIyBkZWZpbmUgbWVtY21wIGJjbXAKLSNlbmRpZgotI2VuZGlmCi0KLSNpZm5kZWYgSEFWRV9NRU1NT1ZFCi0jaWZkZWYgSEFWRV9NRU1DUFkKLSMgZGVmaW5lIG1lbW1vdmUgbWVtY3B5Ci0jZW5kaWYKLSNlbmRpZgotCi0jaWYgbm90dXNlZCAvKiBkb250IHN0ZXAgb24gb3RoZXIgZGVmbnMgb2YgYmNvcHksYnplcm8sIGFuZCBiY21wICovCi0jaWZuZGVmIEhBVkVfQkNPUFkKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgYmNvcHkocywgZCwgbikgbWVtY3B5ICgoZCksIChzKSwgKG4pKQotIyBkZWZpbmUgYnplcm8ocCxuKSBtZW1zZXQoKHApLCgwKSwobikpCi0jIGRlZmluZSBiY21wIG1lbWNtcAotI2VuZGlmCi0jZW5kaWYKLSNlbmRpZgotCiAvKiBJZiB5b3UgaGF2ZSBvcGVuc3NsIDAuOS43IG9yIGFib3ZlLCB5b3UgbGlrZWx5IGhhdmUgQUVTIHN1cHBvcnQuICovCiAvKiAjdW5kZWYgTkVUU05NUF9VU0VfT1BFTlNTTCAqLwogCkBAIC0xNDg2LDYgKzE0NjMsMzIgQEAKICAgICBhdmFpbGFibGUuICAqLwogLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RDUElQVjZfRE9NQUlOICovCiAKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTQkFTRV9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgQWxpYXMgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0FMSUFTX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBTU0ggdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NTSF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgRFRMUy9VRFAgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX0RUTFNVRFBfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFRMUy9UQ1AgdHJhbnNwb3J0IGRvbWFpbiBpcworICAgIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1RMU1RDUF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciBzdGRpbi9vdXQgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9TVERfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIElQdjRCYXNlIHRyYW5zcG9ydCBkb21haW4gaXMgYXZhaWxhYmxlLiAgICovCisjZGVmaW5lIE5FVFNOTVBfVFJBTlNQT1JUX0lQVjRCQVNFX0RPTUFJTiAxCisKIC8qIGRlZmluZSB0aGlzIGlmIHRoZSBVU00gc2VjdXJpdHkgbW9kdWxlIGlzIGF2YWlsYWJsZSAqLwogI2RlZmluZSBORVRTTk1QX1NFQ01PRF9VU00gMQogCkBAIC0xNTAzLDE0ICsxNTA2LDE2IEBACiAKIC8qIE5vdC10by1iZS1jb21waWxlZCBtYWNyb3MgZm9yIHVzZSBieSBjb25maWd1cmUgb25seSAqLwogI2RlZmluZSBjb25maWdfcmVxdWlyZSh4KQorI2RlZmluZSBjb25maWdfdmVyc2lvbl9yZXF1aXJlKHgpCiAjZGVmaW5lIGNvbmZpZ193YXJuaW5nKHgpCisjZGVmaW5lIGNvbmZpZ19lcnJvcih4KQogI2RlZmluZSBjb25maWdfZXhjbHVkZSh4KQogI2RlZmluZSBjb25maWdfYXJjaF9yZXF1aXJlKHgseSkKICNkZWZpbmUgY29uZmlnX3BhcnNlX2RvdF9jb25mKHcseCx5LHopCiAjZGVmaW5lIGNvbmZpZ19hZGRfbWliKHgpCiAjZGVmaW5lIGNvbmZpZ19iZWxvbmdzX2luKHgpCiAKLSNpZiBkZWZpbmVkIChXSU4zMikgfHwgZGVmaW5lZCAobWluZ3czMikgfHwgZGVmaW5lZCAoY3lnd2luKQorI2lmIGRlZmluZWQgKFdJTjMyKQogI2RlZmluZSBFTlZfU0VQQVJBVE9SICI7IgogI2RlZmluZSBFTlZfU0VQQVJBVE9SX0NIQVIgJzsnCiAjZWxzZQpAQCAtMTU3NywyMCArMTU4Miw1MyBAQAogdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBtb2RlX3Q7CiAjZW5kaWYKICNpZm5kZWYgSEFWRV9TVERJTlRfSAordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVpbnQ4X3Q7Cit0eXBlZGVmIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBfX2ludDE2IHVpbnQxNl90OwordHlwZWRlZiBfX2ludDE2IGludDE2X3Q7CiB0eXBlZGVmIHVuc2lnbmVkIF9faW50MzIgdWludDMyX3Q7Ci10eXBlZGVmIGxvbmcgaW50MzJfdDsKK3R5cGVkZWYgX19pbnQzMiBpbnQzMl90OwogdHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnQ2NF90OwogdHlwZWRlZiBfX2ludDY0IGludDY0X3Q7Ci10eXBlZGVmIHVuc2lnbmVkIHNob3J0ICAgdWludDE2X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludG1heF90OwordHlwZWRlZiBfX2ludDY0IGludG1heF90OwogI2Vsc2UgLyogSEFWRV9TVERJTlRfSCAqLwogI2luY2x1ZGUgPHN0ZGludC5oPgogI2VuZGlmIC8qIEhBVkVfU1RESU5UX0ggKi8KIAorCisvKiAodSlpbnRwdHJfdCBzaG91bGQgb25seSBiZSBuZWVkZWQgZm9yIE1TVkMgNiAzMi1iaXQuICovCisvKiBTREsgaGFzIGl0IGZvciA2NC1iaXQgYW5kIG5ld2VyIE1TVkMgc2hvdWxkIGFsc28gaGF2ZSBpdCBpbiBzdGRkZWYuaC4gKi8KKyNpZm5kZWYgX0lOVFBUUl9UX0RFRklORUQKKyNpZmRlZiBfTV9YNjQKK3R5cGVkZWYgX19pbnQ2NCAgICAgICAgICBpbnRwdHJfdDsKKyNlbHNlCit0eXBlZGVmIGludCAgICAgICAgICAgICAgaW50cHRyX3Q7CisjZW5kaWYKKyNkZWZpbmUgX0lOVFBUUl9UX0RFRklORUQKKyNlbmRpZgorCisjaWZuZGVmIF9VSU5UUFRSX1RfREVGSU5FRAorI2lmZGVmIF9NX1g2NAordHlwZWRlZiB1bnNpZ25lZCBfX2ludDY0IHVpbnRwdHJfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgdWludHB0cl90OworI2VuZGlmCisjZGVmaW5lIF9VSU5UUFRSX1RfREVGSU5FRAorI2VuZGlmCisKICNpZm5kZWYgX19jcGx1c3BsdXMKKyNpZmRlZiBfTVNDX1ZFUgorI3ByYWdtYSB3YXJuaW5nKHB1c2gpCisjcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDgwNCkgLy8gJy0nIDogdW5zYWZlIHVzZSBvZiB0eXBlICdib29sJyBpbiBvcGVyYXRpb24KKyNlbmRpZgogZW51bSB7CiAgICAgbmV0c25tcF9jb21waWxlX3RpbWVfdWludHB0cl90X3NpemVfY2hlY2sKICAgICAgICAgPSBzaXplb2Yoc3RydWN0IG5ldHNubXBfY29tcGlsZV90aW1lX3VpbnRwdHJfdF9zaXplX2NoZWNrX3MgeyBpbnQ6LSEoc2l6ZW9mKHVpbnRwdHJfdCkgPT0gc2l6ZW9mKHZvaWQqKSk7IH0pCiB9OworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocG9wKQorI2VuZGlmCiAjZW5kaWYKIAogLyogRGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBjbG9zZXNvY2tldCBmdW5jdGlvbi4gICovCkBAIC0xNjE3LDE3ICsxNjU1LDkgQEAKIC8qIERlZmluZSBORVRTTk1QX1VTRV9ETEwgd2hlbiBidWlsZGluZyBvciB1c2luZyBuZXRzbm1wLkRMTCAqLwogLyogI3VuZGVmIE5FVFNOTVBfVVNFX0RMTCAqLwogCi0jaWZkZWYgTkVUU05NUF9VU0VfRExMCi0gICNpZmRlZiBORVRTTk1QX0RMTAotICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKLSAgICAjZW5kaWYKLSAgI2Vsc2UKLSAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKLSAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxpbXBvcnQpCi0gICAgI2VuZGlmCi0gICNlbmRpZiAgIC8qIE5FVFNOTVBfRExMICovCi0jZW5kaWYgICAgIC8qIE5FVFNOTVBfVVNFX0RMTCAqLworI2lmIGRlZmluZWQoTkVUU05NUF9ETEwpICYmICFkZWZpbmVkKE5FVFNOTVBfVVNFX0RMTCkKKyNlcnJvciBORVRTTk1QX1VTRV9ETEwgbXVzdCBiZSBkZWZpbmVkIHdoZW4gYnVpbGRpbmcgbGlic25tcCBhcyBhIERMTC4KKyNlbmRpZgogCiAvKgogICogRExMIGRlY29yYXRpb24sIGlmIHVzZWQgYXQgYWxsLCBtdXN0IGJlIGNvbnNpc3RlbnQuCkBAIC0xNjQwLDI1ICsxNjcwLDIyIEBACiAgKiAgdGhlIE5FVFNOTVBfSU1QT1JUIGRlZmluaXRpb25zIGhhcm1sZXNzLgogICovCiAKLQotICAjaWZkZWYgTkVUU05NUF9VU0VfRExMCi0gICAgI2lmbmRlZiBORVRTTk1QX1RPT0xTX0MKLQotICAvKiB3cmFwIGFsbG9jIGZ1bmN0aW9ucyB0byB1c2UgRExMJ3MgbWVtb3J5IGhlYXAgKi8KLSAgLyogVGhpcyBpcyBub3QgZG9uZSBpbiB0b29scy5jLCB3aGVyZSB0aGVzZSB3cmFwcGVycyBhcmUgZGVmaW5lZCAqLwotCi0gICAgICAjZGVmaW5lIHN0cmR1cCAgICBuZXRzbm1wX3N0cmR1cAotICAgICAgI2RlZmluZSBjYWxsb2MgICAgbmV0c25tcF9jYWxsb2MKLSAgICAgICNkZWZpbmUgbWFsbG9jICAgIG5ldHNubXBfbWFsbG9jCi0gICAgICAjZGVmaW5lIHJlYWxsb2MgICBuZXRzbm1wX3JlYWxsb2MKLSAgICAgICNkZWZpbmUgZnJlZSAgICAgIG5ldHNubXBfZnJlZQorI2lmZGVmIE5FVFNOTVBfVVNFX0RMTAorICAjaWZkZWYgTkVUU05NUF9ETEwKKyAgICAjaWYgZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICNkZWZpbmUgTkVUU05NUF9JTVBPUlQgX19kZWNsc3BlYyhkbGxleHBvcnQpCiAgICAgI2VuZGlmCi0gICNlbmRpZgorICAjZWxzZQorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyAgICAjZW5kaWYKKyAgI2VuZGlmICAgLyogTkVUU05NUF9ETEwgKi8KKyNlbmRpZiAgICAgLyogTkVUU05NUF9VU0VfRExMICovCiAKIC8qIE1TVkMgT3BlblNTTCBsaW5rZXIgc2V0dGluZ3MuICovCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQobWluZ3czMikKKyNpZiBkZWZpbmVkKF9NU0NfVkVSKQogIyAgaWYgZGVmaW5lZChORVRTTk1QX1VTRV9PUEVOU1NMKQotIyAgICBpZmRlZiBORVRTTk1QX1VTRV9ETEwKKyMgICAgaWZkZWYgX0RMTAogIyAgICAgIGlmZGVmIF9ERUJVRwogIyAgICAgICAgcHJhZ21hIGNvbW1lbnQobGliLCAibGliZWF5MzJNRGQubGliIikKICMgICAgICBlbHNlCkBAIC0xNjcyLDYgKzE2OTksNyBAQAogIyAgICAgIGVuZGlmCiAjICAgIGVuZGlmCiAjICAgIHByYWdtYSBjb21tZW50KGxpYiwgImdkaTMyLmxpYiIpCisjICAgIHByYWdtYSBjb21tZW50KGxpYiwgInVzZXIzMi5saWIiKQogIyAgZW5kaWYKICNlbmRpZgogCkBAIC0xNjgxLDcgKzE3MDksNyBAQAogIyAgZGVmaW5lIE5FVFNOTVBfSU1QT1JUIGV4dGVybgogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKEhBVkVfTkxJU1QpICYmIGRlZmluZWQoU1RSVUNUX05MSVNUX0hBU19OX1ZBTFVFKSAmJiAhZGVmaW5lZChET05UX1VTRV9OTElTVCkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQorI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChIQVZFX1NUUlVDVF9OTElTVF9OX1ZBTFVFKSAmJiAhZGVmaW5lZChET05UX1VTRV9OTElTVCkgJiYgIWRlZmluZWQoTkVUU05NUF9OT19LTUVNX1VTQUdFKQogI2RlZmluZSBORVRTTk1QX0NBTl9VU0VfTkxJU1QKICNlbmRpZgogCkBAIC0xNjg5LDcgKzE3MTcsNiBAQAogI2RlZmluZSBETUFMTE9DX0ZVTkNfQ0hFQ0sKICNlbmRpZgogCi0vKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfSVBWNiAqLwogLyogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0xPQ0FMX1NNVVggKi8KIAogLyogZGVmaW5lIGlmIGFnZW50eCB0cmFuc3BvcnQgaXMgdG8gdXNlIGRvbWFpbiBzb2NrZXRzIG9ubHkgKi8KQEAgLTE3MTAsMTkgKzE3MzcsMzUgQEAKICN1bmRlZiBIQVZFX0lORVRfTlRPUAogI3VuZGVmIEhBVkVfSU5FVF9QVE9OCiAKLSNpZiBORVRTTk1QX0VOQUJMRV9JUFY2CisvKiBJUHY2IHRyYW5zcG9ydHMgKi8KKyNpZmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2CiAgICNkZWZpbmUgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4gMQogICAjZGVmaW5lIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOIDEKKyAgI2RlZmluZSBIQVZFX1NUUlVDVF9TT0NLQUREUl9JTjZfU0lONl9TQ09QRV9JRCAxCiAjZWxzZQogICAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KICAgI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCiAjZW5kaWYKICNlbmRpZgogCisvKgorICogQWx0aG91Z2ggaWZfbmFtZXRvaW5kZXgoKSBpcyBhdmFpbGFibGUgb24gV2luZG93cyBWaXN0YSwgV2luZG93cyBTZXJ2ZXIKKyAqIDIwMDggYW5kIGxhdGVyIGluIGlwaGxwYXBpLmRsbCwgZG8gbm90IGxpbmsgd2l0aCBpZl9uYW1ldG9pbmRleCgpIHN1Y2gKKyAqIHRoYXQgdGhlIE5ldC1TTk1QIGV4ZWN1dGFibGUgY2FuIGJlIHN0YXJ0ZWQgb24gZWFybGllciBXaW5kb3dzIHZlcnNpb25zLgorICovCisjdW5kZWYgSEFWRV9JRl9OQU1FVE9JTkRFWAorCiAjaWZuZGVmIE5JX01BWEhPU1QKICNkZWZpbmUgTklfTUFYSE9TVAkxMDI1CiAjZW5kaWYKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzdHJ0b3VsbCcgZnVuY3Rpb24uICovCisjaWYgX01TQ19WRVIgPj0gMTgwMAorI2RlZmluZSBIQVZFX1NUUlRPVUxMIDEKKyNlbHNlCisvKiAjdW5kZWYgSEFWRV9TVFJUT1VMTCAqLworI2VuZGlmCisKIC8qCiAgKiBNb2R1bGUgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCBzdGFydHMgaGVyZS4KICAqCkBAIC0xNzY2LDkgKzE4MDksMTkgQEAKICNkZWZpbmUgTkVUU05NUF9USU1FT1VUX1dBSVRGT1JTSU5HTEVPQkpFQ1QgNTAwMAogCiAjaWZkZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsKLSNkZWZpbmUgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX1NTX0ZBTUlMWSAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZIDEKICNlbmRpZgogCisvKiBTaXplIHByZWZpeCB0byB1c2UgdG8gcHJpbnRmIGEgdWludDMyX3QgKi8KKyNkZWZpbmUgTkVUU05NUF9QUkkzMiAiIgorCisjaWZkZWYgX01TQ19WRVIKKyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgTkVUU05NUF9QUkl6ICJJNjQiCisjZWxzZQorI2RlZmluZSBORVRTTk1QX1BSSXogIiIKKyNlbmRpZgorI2VuZGlmCiAKICNlbmRpZiAvKiBORVRfU05NUF9DT05GSUdfSCAqLwogCmRpZmYgLS1naXQgYS93aW4zMi9uZXQtc25tcC9uZXQtc25tcC1jb25maWcuaC5pbiBiL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluCmluZGV4IGE2ODI2YjMuLjk2OTM3MzAgMTAwNjQ0Ci0tLSBhL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluCisrKyBiL3dpbjMyL25ldC1zbm1wL25ldC1zbm1wLWNvbmZpZy5oLmluCkBAIC01LDMxICs1LDQ1IEBACiAjZGVmaW5lIE5FVF9TTk1QX0NPTkZJR19ICiAKIC8qIF9NU0NfVkVSIHZhbHVlcwotICAgMTYwMCA9IDEwLjAgKDIwMTApCi0gICAxNTAwID0gIDkuMCAoMjAwOCkKLSAgIDE0MDAgPSAgOC4wICgyMDA1KQotICAgMTMxMCA9ICA3LjEgKDIwMDMpCi0gICAxMzAwID0gIDcuMCAoMjAwMikKLSAgIDEyMDAgPSAgNi4wCisgICAxODAwID0gTVNWQysrIDEyLjAgKFZpc3VhbCBTdHVkaW8gMjAxMykKKyAgIDE3MDAgPSBNU1ZDKysgMTEuMCAoVmlzdWFsIFN0dWRpbyAyMDEyKQorICAgMTYwMCA9IE1TVkMrKyAxMC4wIChWaXN1YWwgU3R1ZGlvIDIwMTApCisgICAxNTAwID0gTVNWQysrICA5LjAgKFZpc3VhbCBTdHVkaW8gMjAwOCkKKyAgIDE0MDAgPSBNU1ZDKysgIDguMCAoVmlzdWFsIFN0dWRpbyAyMDA1KQorICAgMTMxMCA9IE1TVkMrKyAgNy4xIChWaXN1YWwgU3R1ZGlvIDIwMDMpCisgICAxMzAwID0gTVNWQysrICA3LjAgKFZpc3VhbCBTdHVkaW8gMjAwMikKKyAgIDEyMDAgPSBNU1ZDKysgIDYuMAogKi8KIAorI2lmZGVmIF9NU0NfVkVSCisvKiBEaXNhYmxlIHdhcm5pbmcgNDAxODogc2lnbmVkL3Vuc2lnbmVkIG1pc21hdGNoLiAqLworI3ByYWdtYSB3YXJuaW5nIChkaXNhYmxlOiA0MDE4KQorI2VuZGlmCisKKy8qIEF1dG9tYXRpY2FsbHkgc2V0IGJ5IFdpbmRvd3MgcGVybCBDb25maWd1cmUgc2NyaXB0LgorICogV2hlbiBjb21waWxpbmcgd2l0aCB0aGUgTVNWQyB3b3Jrc3BhY2UsIHRoaXMgbXVzdCBiZSBzZXQgbWFudWFsbHkuCisgKiBTZWUgdGhlIFBBQ0tBR0VfVkVSU0lPTiB2YXJpYWJsZSBpbiBVbml4IC9jb25maWd1cmUgc2NyaXB0CisqLworI2lmbmRlZiBQQUNLQUdFX1ZFUlNJT04KKyNkZWZpbmUgUEFDS0FHRV9WRVJTSU9OICJ1bmtub3duIgorI2VuZGlmCisKIC8qIERlZmluZSBIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyBpZiB5b3UgaGF2ZToKICAqIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvIE1TVkMgNi4wIGFuZCB0aGUgUGxhdGZvcm0gU0RLIChQU0RLKQogICogTWljcm9zb2Z0IFZpc3VhbCBTdHVkaW8uTmV0IDIwMDIKICAqIE1pY3Jvc29mdCBWaXN1YWwgU3R1ZGlvLk5ldCAyMDAzCi0gKiBDeWd3aW4KLSAqIE1pbkdXIAogICovCiAvKiAjdW5kZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsgKi8KIAotLyogT25seSB1c2UgV2luZG93cyBBUEkgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiBXaW5kb3dzIDIwMDAgU1A0IG9yIGxhdGVyLgotICogV2UgbmVlZCBhdCBsZWFzdCBTUDEgZm9yIHNvbWUgSVB2NiBkZWZpbmVzIGluIHdzMmlwZGVmLmguCi0gKiBPbmx5IGRlZmluZSBfV0lOMzJfV0lOTlQgd2hlbiBub3QgYmVpbmcgY29tcGlsZWQgd2l0aCBNU1ZDIDYgd2l0aG91dCBQU0RLCi0gKiBiZWNhdXNlIHRoZXJlIGlzIGEgYnVnIGluIHRoZSBNU1ZDIDYgaGVhZGVyIDx3aW5zb2NrLmg+IHRoYXQgY2F1c2VzCi0gKiBpbmNsdXNpb24gb2YgPHdpbnNvY2syLmg+LgorLyogRGVmaW5lIE5FVFNOTVBfRU5BQkxFX0lQVjYgdG8gZW5hYmxlIElQdjYuICBJUHY2IGlzIG9ubHkgYXZhaWxhYmxlIG9uCisgKiBXaW5kb3dzIFhQIGFuZCBoaWdoZXIuICAqLworLyogI3VuZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYgKi8KKworLyogT25seSB1c2UgV2luZG93cyBBUEkgZnVuY3Rpb25zIGF2YWlsYWJsZSBvbiBXaW5kb3dzIDIwMDAgU1A0IG9yIGxhdGVyLiAgCisgKiBXZSBuZWVkIGF0IGxlYXN0IFNQMSBmb3Igc29tZSBJUHY2IGRlZmluZXMgaW4gd3MyaXBkZWYuaAogICovCiAjaWZuZGVmIF9XSU4zMl9XSU5OVAotI2RlZmluZSBfV0lOMzJfV0lOTlQgMHg1MDEgLypfV0lOMzJfV0lOTlRfV0lOMksqLworI2RlZmluZSBfV0lOMzJfV0lOTlQgMHg2MDAgLypfV0lOMzJfV0lOTlRfV0lONiovCiAjZWxzZQogI2lmIF9XSU4zMl9XSU5OVCA8IDB4NTAxCiAjZXJyb3IgX1dJTjMyX1dJTk5UIGlzIHRvbyBsb3cgLSBpdCBzaG91bGQgYmUgc2V0IHRvIGF0IGxlYXN0IDB4NTAxLgpAQCAtMjI3LDE5ICsyNDEsMTcgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8YXNtL3BhZ2UuaD4gaGVhZGVyIGZpbGUuICovCiAvKiAjdW5kZWYgSEFWRV9BU01fUEFHRV9IICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYmNvcHknIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfQkNPUFkgKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjZ2V0bmV4dCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9DR0VUTkVYVCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGNydGRiZy5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9DUlREQkdfSCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZWN0Lmg+IGhlYWRlciBmaWxlLiAqLwotLyogI3VuZGVmIEhBVkVfRElSRUNUX0ggKi8KKyNkZWZpbmUgSEFWRV9ESVJFQ1RfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY2hvd24nIGZ1bmN0aW9uLiAqLwotLyogI3VuZGVmIEhBVkVfQ0hPV04gKi8KLQotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxkaXJlbnQuaD4gaGVhZGVyIGZpbGUsIGFuZCBpdCBkZWZpbmVzIGBESVInLiAgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8ZGlyZW50Lmg+IGhlYWRlciBmaWxlLCBhbmQgaXQgZGVmaW5lcyBgRElSJy4KKyAgICovCiAvKiAjdW5kZWYgSEFWRV9ESVJFTlRfSCAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGRsZmNuLmg+IGhlYWRlciBmaWxlLiAqLwpAQCAtMzE0LDEyICszMjYsMTQgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgaWZfbmFtZWluZGV4JyBmdW5jdGlvbi4gKi8KIC8qICN1bmRlZiBIQVZFX0lGX05BTUVJTkRFWCAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGluZGV4JyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0lOREVYICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8aW5ldC9taWIyLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfSU5FVF9NSUIyX0ggKi8KIAorI2lmZGVmIEhBVkVfV0lOMzJfUExBVEZPUk1fU0RLCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGlwaGxwYXBpLmg+IGhlYWRlciBmaWxlLiAqLworI2RlZmluZSBIQVZFX0lQSExQQVBJX0gKKyNlbmRpZgorCiAvKiBEZWZpbmUgdG8gMSBpZiB0aGUgc3lzdGVtIGhhcyB0aGUgdHlwZSBgaW50MzJfdCcuICovCiAjZGVmaW5lIEhBVkVfSU5UMzJfVCAxCiAKQEAgLTM2NSw5ICszNzksNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjcnlwdG8nIGxpYnJhcnkgKC1sY3J5cHRvKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQkNSWVBUTyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGRsJyBsaWJyYXJ5ICgtbGRsKS4gKi8KLS8qICN1bmRlZiBIQVZFX0xJQkRMICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZWZlbmNlJyBsaWJyYXJ5ICgtbGVmZW5jZSkuICovCiAvKiAjdW5kZWYgSEFWRV9MSUJFRkVOQ0UgKi8KIApAQCAtMzc3LDkgKzM4OCw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGtzdGF0JyBsaWJyYXJ5ICgtbGtzdGF0KS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQktTVEFUICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBga3ZtJyBsaWJyYXJ5ICgtbGt2bSkuICovCi0vKiAjdW5kZWYgSEFWRV9MSUJLVk0gKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtJyBsaWJyYXJ5ICgtbG0pLiAqLwogLyogI3VuZGVmIEhBVkVfTElCTSAqLwogCkBAIC00MDQsOSArNDEyLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc2Vuc29ycycgbGlicmFyeSAoLWxzZW5zb3JzKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQlNFTlNPUlMgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGB6JyBsaWJyYXJ5ICgtbHopLiAqLwotLyogI3VuZGVmIEhBVkVfTElCWiAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGxpbWl0cy5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9MSU1JVFNfSCAxCiAKQEAgLTQxOSw5ICs0MjQsNiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxsb2NhbGUuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTE9DQUxFX0ggMQogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGxvY2FsdGltZV9yJyBmdW5jdGlvbi4gKi8KLS8qICN1bmRlZiBIQVZFX0xPQ0FMVElNRV9SICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbHJhbmQ0OCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9MUkFORDQ4ICovCiAKQEAgLTQzNywxMiArNDM5LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWFsbG9jLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01BTExPQ19IIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBtZW1jcHknIGZ1bmN0aW9uLiAqLwotI2RlZmluZSBIQVZFX01FTUNQWSAxCi0KLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgbWVtbW92ZScgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfTUVNTU9WRSAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKIApAQCAtNTEyLDYgKzUwOCw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaXBfaWNtcC5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX05FVElORVRfSVBfSUNNUF9IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bmV0aW5ldC9pY21wNi5oPiBoZWFkZXIgZmlsZS4gKi8KKy8qICN1bmRlZiBIQVZFX05FVElORVRfSUNNUDZfSCAqLworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaXBfdmFyLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfTkVUSU5FVF9JUF9WQVJfSCAqLwogCkBAIC02ODMsOSArNjgyLDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RhdHZmcycgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9TVEFUVkZTICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3RkYXJnLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1NUREFSR19IIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCiAjaWZkZWYgX19NSU5HVzMyX18KICNkZWZpbmUgSEFWRV9TVERJTlRfSCAxCkBAIC03MDAsOSArNjk2LDYgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZXN0cicgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9TVFJDQVNFU1RSICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2hyJyBmdW5jdGlvbi4gKi8KLSNkZWZpbmUgSEFWRV9TVFJDSFIgMQotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cmR1cCcgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfU1RSRFVQIDEKIApAQCAtODQ2LDYgKzgzOSw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lLmg+IGhlYWRlciBmaWxlLiAqLwogLyogI3VuZGVmIEhBVkVfU1lTX1RJTUVfSCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN5cy90aW1lYi5oPiBoZWFkZXIgZmlsZS4gKi8KKyNkZWZpbmUgSEFWRV9TWVNfVElNRUJfSCAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKIApAQCAtOTM5LDYgKzkzNSwxNSBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx3aW5zb2NrLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1dJTlNPQ0tfSCAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d2luc29jazIuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV0lOU09DSzJfSCAxCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8d3MydGNwaXAuaD4gaGVhZGVyIGZpbGUuICovCisjZGVmaW5lIEhBVkVfV1MyVENQSVBfSCAxCisKKy8qIFNldCBpZiBJUF9QS1RJTkZPIGlzIHVzYWJsZSAqLworI2RlZmluZSBIQVZFX0lQX1BLVElORk8gMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHh0aS5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX1hUSV9IICovCiAKQEAgLTk0NiwxMyArOTUxLDE3IEBACiAvKiAjdW5kZWYgUEFDS0FHRV9CVUdSRVBPUlQgKi8KIAogLyogRGVmaW5lIHRvIHRoZSBmdWxsIG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX05BTUUKICNkZWZpbmUgUEFDS0FHRV9OQU1FICJOZXQtU05NUCIKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gdGhlIGZ1bGwgbmFtZSBhbmQgdmVyc2lvbiBvZiB0aGlzIHBhY2thZ2UuICovCiAvKiAjdW5kZWYgUEFDS0FHRV9TVFJJTkcgKi8KIAogLyogRGVmaW5lIHRvIHRoZSBvbmUgc3ltYm9sIHNob3J0IG5hbWUgb2YgdGhpcyBwYWNrYWdlLiAqLworI2lmbmRlZiBQQUNLQUdFX1RBUk5BTUUKICNkZWZpbmUgUEFDS0FHRV9UQVJOQU1FICJuZXQtc25tcCIKKyNlbmRpZgogCiAvKiBEZWZpbmUgdG8gdGhlIHZlcnNpb24gb2YgdGhpcyBwYWNrYWdlLiAqLwogLyogI3VuZGVmIFBBQ0tBR0VfVkVSU0lPTiAqLwpAQCAtOTY2LDYgKzk3NSw5IEBACiAvKiBUaGUgc2l6ZSBvZiBhIGBsb25nJywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLwogI2RlZmluZSBTSVpFT0ZfTE9ORyA0CiAKKy8qIFRoZSBzaXplIG9mIGEgYGludG1heF90JywgYXMgY29tcHV0ZWQgYnkgc2l6ZW9mLiAqLworI2RlZmluZSBTSVpFT0ZfSU5UTUFYX1QgOAorCiAvKiBUaGUgc2l6ZSBvZiBhIGBzaG9ydCcsIGFzIGNvbXB1dGVkIGJ5IHNpemVvZi4gKi8KICNkZWZpbmUgU0laRU9GX1NIT1JUIDIKIApAQCAtOTgxLDcgKzk5Myw3IEBACiAjZGVmaW5lIFNURENfSEVBREVSUyAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwotI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQorLyogI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRSAqLwogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3VyIHByb2Nlc3NvciBzdG9yZXMgd29yZHMgd2l0aCB0aGUgbW9zdCBzaWduaWZpY2FudCBieXRlCiAgICBmaXJzdCAobGlrZSBNb3Rvcm9sYSBhbmQgU1BBUkMsIHVubGlrZSBJbnRlbCBhbmQgVkFYKS4gKi8KQEAgLTEwMzAsOTYgKzEwNDIsMTAyIEBACiAvKiAjdW5kZWYgUlRFTlRSWV80XzQgKi8KIAogLyogRG9lcyBzdHJ1Y3Qgc2lnYWN0aW9uIGhhdmUgYSBzYV9zaWdhY3Rpb24gZmllbGQ/ICovCi0vKiAjdW5kZWYgU1RSVUNUX1NJR0FDVElPTl9IQVNfU0FfU0lHQUNUSU9OICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU0lHQUNUSU9OX1NBX1NJR0FDVElPTiAqLwogCiAvKiBEb2VzIHN0cnVjdCBzb2NrYWRkciBoYXZlIGEgc2FfbGVuIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfTEVOICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfTEVOICovCiAKIC8qIERvZXMgc3RydWN0IHNvY2thZGRyIGhhdmUgYSBzYV9mYW1pbHkyIGZpZWxkPyAqLwotLyogI3VuZGVmIFNUUlVDVF9TT0NLQUREUl9IQVNfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU09DS0FERFJfU0FfVU5JT05fU0FfR0VORVJJQ19TQV9GQU1JTFkyICovCiAKIC8qIERvZXMgc3RydWN0IGluNl9hZGRyIGhhdmUgYSBzNl91bi5zYTZfbGFkZCBmaWVsZD8gKi8KLS8qICN1bmRlZiBTVFJVQ1RfSU42X0FERFJfSEFTX1M2X1VOX1NBNl9MQUREUiAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lONl9BRERSX1M2X1VOX1NBNl9MQUREUiAqLworCisvKiBtc2doZHIubXNnX2NvbnRyb2wgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9NU0dIRFJfTVNHX0NPTlRST0wgKi8KKworLyogbXNnaGRyLm1zZ19mbGFncyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX01TR0hEUl9NU0dfRkxBR1MgKi8KIAogLyogcnRlbnRyeSBzdHJ1Y3R1cmUgdGVzdHMgKi8KIC8qICN1bmRlZiBSVEVOVFJZX1JUX05FWFQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfRFNUICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1VOSVQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfUlRFTlRSWV9IQVNfUlRfVVNFICovCi0vKiAjdW5kZWYgU1RSVUNUX1JURU5UUllfSEFTX1JUX1JFRkNOVCAqLwotLyogI3VuZGVmIFNUUlVDVF9SVEVOVFJZX0hBU19SVF9IQVNIICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9EU1QgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VOSVQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9SVEVOVFJZX1JUX1VTRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1JURU5UUllfUlRfUkVGQ05UICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfUlRFTlRSWV9SVF9IQVNIICovCiAKIC8qIGlmbmV0IHN0cnVjdHVyZSB0ZXN0cyAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfQkFVRFJBVEUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0JBVURSQVRFX0lGU19WQUxVRSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfU1BFRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX1RZUEUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lNQ0FTVFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0lRRFJPUFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0xBU1RDSEFOR0VfVFZfU0VDICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9OT1BST1RPICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9PTUNBU1RTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9YTkFNRSAqLwotLyogI3VuZGVmIFNUUlVDVF9JRk5FVF9IQVNfSUZfT0JZVEVTICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9JQllURVMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSUZORVRfSEFTX0lGX0FERFJMSVNUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfQkFVRFJBVEUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9CQVVEUkFURV9JRlNfVkFMVUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9TUEVFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX1RZUEUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9JTUNBU1RTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfSVFEUk9QUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0xBU1RDSEFOR0VfVFZfU0VDICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSUZORVRfSUZfTk9QUk9UTyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09NQ0FTVFMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9YTkFNRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX09CWVRFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0lCWVRFUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lGTkVUX0lGX0FERFJMSVNUICovCiAKIC8qIHRjcHN0YXQudGNwc19yY3ZtZW1kcm9wICovCi0vKiAjdW5kZWYgU1RSVUNUX1RDUFNUQVRfSEFTX1RDUFNfUkNWTUVNRFJPUCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1RDUFNUQVRfVENQU19SQ1ZNRU1EUk9QICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRElTQ0FSRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1VEUFNUQVRfVURQU19ESVNDQVJEICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfTk9QT1JUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVCAqLwogCiAvKiB1ZHBzdGF0LnVkcHNfZGlzY2FyZCAqLwotLyogI3VuZGVmIFNUUlVDVF9VRFBTVEFUX0hBU19VRFBTX05PUE9SVEJDQVNUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfVURQU1RBVF9VRFBTX05PUE9SVEJDQVNUICovCiAKIC8qIHVkcHN0YXQudWRwc19kaXNjYXJkICovCi0vKiAjdW5kZWYgU1RSVUNUX1VEUFNUQVRfSEFTX1VEUFNfRlVMTFNPQ0sgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9VRFBTVEFUX1VEUFNfRlVMTFNPQ0sgKi8KIAogLyogYXJwaGQuYXRfbmV4dCAqLwotLyogI3VuZGVmIFNUUlVDVF9BUlBIRF9IQVNfQVRfTkVYVCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0FSUEhEX0FUX05FWFQgKi8KIAogLyogaWZhZGRyLmlmYV9uZXh0ICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGQUREUl9IQVNfSUZBX05FWFQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRkFERFJfSUZBX05FWFQgKi8KIAogLyogaWZuZXQuaWZfbXR1ICovCi0vKiAjdW5kZWYgU1RSVUNUX0lGTkVUX0hBU19JRl9NVFUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JRk5FVF9JRl9NVFUgKi8KIAogLyogc3dkZXZ0LnN3X25ibGtzZW5hYmxlZCAqLwotLyogI3VuZGVmIFNUUlVDVF9TV0RFVlRfSEFTX1NXX05CTEtTRU5BQkxFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NXREVWVF9TV19OQkxLU0VOQUJMRUQgKi8KIAogLyogbmxpc3Qubl92YWx1ZSAqLwotLyogI3VuZGVmIFNUUlVDVF9OTElTVF9IQVNfTl9WQUxVRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUgKi8KIAogLyogaXBzdGF0IHN0cnVjdHVyZSB0ZXN0cyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URk9SV0FSRCAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19DQU5URlJBRyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19ERUxJVkVSRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR0RST1BQRUQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfRlJBR1RJTUVPVVQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTE9DQUxPVVQgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfTk9QUk9UTyAqLwotLyogI3VuZGVmIFNUUlVDVF9JUFNUQVRfSEFTX0lQU19OT1JPVVRFICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09EUk9QUEVEICovCi0vKiAjdW5kZWYgU1RSVUNUX0lQU1RBVF9IQVNfSVBTX09GUkFHTUVOVFMgKi8KLS8qICN1bmRlZiBTVFJVQ1RfSVBTVEFUX0hBU19JUFNfUkVBU1NFTUJMRUQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0NBTlRGT1JXQVJEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19DQU5URlJBRyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfREVMSVZFUkVEICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19GUkFHRFJPUFBFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfRlJBR1RJTUVPVVQgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9JUFNUQVRfSVBTX0xPQ0FMT1VUICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1BST1RPICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19OT1JPVVRFICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfSVBTVEFUX0lQU19PRFJPUFBFRCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfT0ZSQUdNRU5UUyAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0lQU1RBVF9JUFNfUkVBU1NFTUJMRUQgKi8KIAogLyogdmZzc3RhdC5mX2Zyc2l6ZSAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFUVkZTX0hBU19GX0ZSU0laRSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRWRlNfRl9GUlNJWkUgKi8KIAogLyogdmZzc3RhdC5mX2ZpbGVzICovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRWRlNfSEFTX0ZfRklMRVMgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFUVkZTX0ZfRklMRVMgKi8KIAogLyogc3RhdGZzIGlub2RlIHN0cnVjdHVyZSB0ZXN0cyovCi0vKiAjdW5kZWYgU1RSVUNUX1NUQVRGU19IQVNfRl9GSUxFUyAqLwotLyogI3VuZGVmIFNUUlVDVF9TVEFURlNfSEFTX0ZfRkZSRUUgKi8KLS8qICN1bmRlZiBTVFJVQ1RfU1RBVEZTX0hBU19GX0ZBVkFJTCAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX1NUQVRGU19GX0ZJTEVTICovCisvKiAjdW5kZWYgSEFWRV9TVFJVQ1RfU1RBVEZTX0ZfRkZSRUUgKi8KKy8qICN1bmRlZiBIQVZFX1NUUlVDVF9TVEFURlNfRl9GQVZBSUwgKi8KIAogLyogZGVzX2tzX3N0cnVjdC53ZWFrX2tleSAqLwotLyogI3VuZGVmIFNUUlVDVF9ERVNfS1NfU1RSVUNUX0hBU19XRUFLX0tFWSAqLworLyogI3VuZGVmIEhBVkVfU1RSVUNUX0RFU19LU19TVFJVQ1RfV0VBS19LRVkgKi8KIAogLyogaWZuZXQgbmVlZHMgdG8gaGF2ZSBfS0VSTkVMIGRlZmluZWQgKi8KIC8qICN1bmRlZiBJRk5FVF9ORUVEU19LRVJORUwgKi8KQEAgLTExMzMsOSArMTE1MSw2IEBACiAvKiBkZWZpbmUgaWYgU0lPQ0dJRkFERFIgZXhpc3RzIGluIHN5cy9pb2N0bC5oICovCiAvKiAjdW5kZWYgU1lTX0lPQ1RMX0hfSEFTX1NJT0NHSUZBRERSICovCiAKLS8qIGRlZmluZSBpZiB5b3VyIGNvbXBpbGVyIChwcm9jZXNzb3IpIGRlZmluZXMgX19GVU5DVElPTl9fIGZvciB5b3UgKi8KLS8qICN1bmRlZiBIQVZFX0NQUF9VTkRFUkJBUl9GVU5DVElPTl9ERUZJTkVEICovCi0KIC8qIE1pYi0yIHRyZWUgSW5mbyAqLwogLyogVGhlc2UgYXJlIHRoZSBzeXN0ZW0gaW5mb3JtYXRpb24gdmFyaWFibGVzLiAqLwogCkBAIC0xMzQwLDQ0ICsxMzU1LDYgQEAKICNkZWZpbmUgSEFWRV9TU0laRV9UCiAjZW5kaWYKIAotI2lmbmRlZiBIQVZFX1NUUkNIUgotI2lmZGVmIEhBVkVfSU5ERVgKLSMgZGVmaW5lIHN0cmNocihhLGIpIGluZGV4KGEsYikKLSMgZGVmaW5lIHN0cnJjaHIoYSxiKSByaW5kZXgoYSxiKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX0lOREVYCi0jaWZkZWYgSEFWRV9TVFJDSFIKLSMgZGVmaW5lIGluZGV4KGEsYikgc3RyY2hyKGEsYikKLSMgZGVmaW5lIHJpbmRleChhLGIpIHN0cnJjaHIoYSxiKQotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTUNQWQotI2lmZGVmIEhBVkVfQkNPUFkKLSMgZGVmaW5lIG1lbWNweShkLCBzLCBuKSBiY29weSAoKHMpLCAoZCksIChuKSkKLSMgZGVmaW5lIG1lbW1vdmUoZCwgcywgbikgYmNvcHkgKChzKSwgKGQpLCAobikpCi0jIGRlZmluZSBtZW1jbXAgYmNtcAotI2VuZGlmCi0jZW5kaWYKLQotI2lmbmRlZiBIQVZFX01FTU1PVkUKLSNpZmRlZiBIQVZFX01FTUNQWQotIyBkZWZpbmUgbWVtbW92ZSBtZW1jcHkKLSNlbmRpZgotI2VuZGlmCi0KLSNpZiBub3R1c2VkIC8qIGRvbnQgc3RlcCBvbiBvdGhlciBkZWZucyBvZiBiY29weSxiemVybywgYW5kIGJjbXAgKi8KLSNpZm5kZWYgSEFWRV9CQ09QWQotI2lmZGVmIEhBVkVfTUVNQ1BZCi0jIGRlZmluZSBiY29weShzLCBkLCBuKSBtZW1jcHkgKChkKSwgKHMpLCAobikpCi0jIGRlZmluZSBiemVybyhwLG4pIG1lbXNldCgocCksKDApLChuKSkKLSMgZGVmaW5lIGJjbXAgbWVtY21wCi0jZW5kaWYKLSNlbmRpZgotI2VuZGlmCi0KIC8qIElmIHlvdSBoYXZlIG9wZW5zc2wgMC45Ljcgb3IgYWJvdmUsIHlvdSBsaWtlbHkgaGF2ZSBBRVMgc3VwcG9ydC4gKi8KIC8qICN1bmRlZiBORVRTTk1QX1VTRV9PUEVOU1NMICovCiAKQEAgLTE0ODYsNiArMTQ2MywzMiBAQAogICAgIGF2YWlsYWJsZS4gICovCiAvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4gKi8KIAorLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTIHRyYW5zcG9ydCBkb21haW4gaXMKKyAgICBhdmFpbGFibGUuICAgKi8KKy8qICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UTFNCQVNFX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBBbGlhcyB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOICovCisKKy8qICBUaGlzIGlzIGRlZmluZWQgaWYgc3VwcG9ydCBmb3IgdGhlIFNTSCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfU1NIX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHRoZSBEVExTL1VEUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfRFRMU1VEUF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgVExTL1RDUCB0cmFuc3BvcnQgZG9tYWluIGlzCisgICAgYXZhaWxhYmxlLiAgICovCisvKiAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVExTVENQX0RPTUFJTiAqLworCisvKiAgVGhpcyBpcyBkZWZpbmVkIGlmIHN1cHBvcnQgZm9yIHN0ZGluL291dCB0cmFuc3BvcnQgZG9tYWluIGlzIGF2YWlsYWJsZS4gICAqLworLyogI3VuZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1NURF9ET01BSU4gKi8KKworLyogIFRoaXMgaXMgZGVmaW5lZCBpZiBzdXBwb3J0IGZvciB0aGUgSVB2NEJhc2UgdHJhbnNwb3J0IGRvbWFpbiBpcyBhdmFpbGFibGUuICAgKi8KKyNkZWZpbmUgTkVUU05NUF9UUkFOU1BPUlRfSVBWNEJBU0VfRE9NQUlOIDEKKwogLyogZGVmaW5lIHRoaXMgaWYgdGhlIFVTTSBzZWN1cml0eSBtb2R1bGUgaXMgYXZhaWxhYmxlICovCiAjZGVmaW5lIE5FVFNOTVBfU0VDTU9EX1VTTSAxCiAKQEAgLTE1MDMsMTQgKzE1MDYsMTYgQEAKIAogLyogTm90LXRvLWJlLWNvbXBpbGVkIG1hY3JvcyBmb3IgdXNlIGJ5IGNvbmZpZ3VyZSBvbmx5ICovCiAjZGVmaW5lIGNvbmZpZ19yZXF1aXJlKHgpCisjZGVmaW5lIGNvbmZpZ192ZXJzaW9uX3JlcXVpcmUoeCkKICNkZWZpbmUgY29uZmlnX3dhcm5pbmcoeCkKKyNkZWZpbmUgY29uZmlnX2Vycm9yKHgpCiAjZGVmaW5lIGNvbmZpZ19leGNsdWRlKHgpCiAjZGVmaW5lIGNvbmZpZ19hcmNoX3JlcXVpcmUoeCx5KQogI2RlZmluZSBjb25maWdfcGFyc2VfZG90X2NvbmYodyx4LHkseikKICNkZWZpbmUgY29uZmlnX2FkZF9taWIoeCkKICNkZWZpbmUgY29uZmlnX2JlbG9uZ3NfaW4oeCkKIAotI2lmIGRlZmluZWQgKFdJTjMyKSB8fCBkZWZpbmVkIChtaW5ndzMyKSB8fCBkZWZpbmVkIChjeWd3aW4pCisjaWYgZGVmaW5lZCAoV0lOMzIpCiAjZGVmaW5lIEVOVl9TRVBBUkFUT1IgIjsiCiAjZGVmaW5lIEVOVl9TRVBBUkFUT1JfQ0hBUiAnOycKICNlbHNlCkBAIC0xNTc3LDIwICsxNTgyLDUzIEBACiB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1vZGVfdDsKICNlbmRpZgogI2lmbmRlZiBIQVZFX1NURElOVF9ICit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludDhfdDsKK3R5cGVkZWYgY2hhciBpbnQ4X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50MTYgdWludDE2X3Q7Cit0eXBlZGVmIF9faW50MTYgaW50MTZfdDsKIHR5cGVkZWYgdW5zaWduZWQgX19pbnQzMiB1aW50MzJfdDsKLXR5cGVkZWYgbG9uZyBpbnQzMl90OwordHlwZWRlZiBfX2ludDMyIGludDMyX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludDY0X3Q7CiB0eXBlZGVmIF9faW50NjQgaW50NjRfdDsKLXR5cGVkZWYgdW5zaWduZWQgc2hvcnQgICB1aW50MTZfdDsKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1aW50bWF4X3Q7Cit0eXBlZGVmIF9faW50NjQgaW50bWF4X3Q7CiAjZWxzZSAvKiBIQVZFX1NURElOVF9IICovCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjZW5kaWYgLyogSEFWRV9TVERJTlRfSCAqLwogCisKKy8qICh1KWludHB0cl90IHNob3VsZCBvbmx5IGJlIG5lZWRlZCBmb3IgTVNWQyA2IDMyLWJpdC4gKi8KKy8qIFNESyBoYXMgaXQgZm9yIDY0LWJpdCBhbmQgbmV3ZXIgTVNWQyBzaG91bGQgYWxzbyBoYXZlIGl0IGluIHN0ZGRlZi5oLiAqLworI2lmbmRlZiBfSU5UUFRSX1RfREVGSU5FRAorI2lmZGVmIF9NX1g2NAordHlwZWRlZiBfX2ludDY0ICAgICAgICAgIGludHB0cl90OworI2Vsc2UKK3R5cGVkZWYgaW50ICAgICAgICAgICAgICBpbnRwdHJfdDsKKyNlbmRpZgorI2RlZmluZSBfSU5UUFRSX1RfREVGSU5FRAorI2VuZGlmCisKKyNpZm5kZWYgX1VJTlRQVFJfVF9ERUZJTkVECisjaWZkZWYgX01fWDY0Cit0eXBlZGVmIHVuc2lnbmVkIF9faW50NjQgdWludHB0cl90OworI2Vsc2UKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICB1aW50cHRyX3Q7CisjZW5kaWYKKyNkZWZpbmUgX1VJTlRQVFJfVF9ERUZJTkVECisjZW5kaWYKKwogI2lmbmRlZiBfX2NwbHVzcGx1cworI2lmZGVmIF9NU0NfVkVSCisjcHJhZ21hIHdhcm5pbmcocHVzaCkKKyNwcmFnbWEgd2FybmluZyhkaXNhYmxlOiA0ODA0KSAvLyAnLScgOiB1bnNhZmUgdXNlIG9mIHR5cGUgJ2Jvb2wnIGluIG9wZXJhdGlvbgorI2VuZGlmCiBlbnVtIHsKICAgICBuZXRzbm1wX2NvbXBpbGVfdGltZV91aW50cHRyX3Rfc2l6ZV9jaGVjawogICAgICAgICA9IHNpemVvZihzdHJ1Y3QgbmV0c25tcF9jb21waWxlX3RpbWVfdWludHB0cl90X3NpemVfY2hlY2tfcyB7IGludDotIShzaXplb2YodWludHB0cl90KSA9PSBzaXplb2Yodm9pZCopKTsgfSkKIH07CisjaWZkZWYgX01TQ19WRVIKKyNwcmFnbWEgd2FybmluZyhwb3ApCisjZW5kaWYKICNlbmRpZgogCiAvKiBEZWZpbmUgaWYgeW91IGhhdmUgdGhlIGNsb3Nlc29ja2V0IGZ1bmN0aW9uLiAgKi8KQEAgLTE2MTcsMTcgKzE2NTUsOSBAQAogLyogRGVmaW5lIE5FVFNOTVBfVVNFX0RMTCB3aGVuIGJ1aWxkaW5nIG9yIHVzaW5nIG5ldHNubXAuRExMICovCiAvKiAjdW5kZWYgTkVUU05NUF9VU0VfRExMICovCiAKLSNpZmRlZiBORVRTTk1QX1VTRV9ETEwKLSAgI2lmZGVmIE5FVFNOTVBfRExMCi0gICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCi0gICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsZXhwb3J0KQotICAgICNlbmRpZgotICAjZWxzZQotICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQotICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGltcG9ydCkKLSAgICAjZW5kaWYKLSAgI2VuZGlmICAgLyogTkVUU05NUF9ETEwgKi8KLSNlbmRpZiAgICAgLyogTkVUU05NUF9VU0VfRExMICovCisjaWYgZGVmaW5lZChORVRTTk1QX0RMTCkgJiYgIWRlZmluZWQoTkVUU05NUF9VU0VfRExMKQorI2Vycm9yIE5FVFNOTVBfVVNFX0RMTCBtdXN0IGJlIGRlZmluZWQgd2hlbiBidWlsZGluZyBsaWJzbm1wIGFzIGEgRExMLgorI2VuZGlmCiAKIC8qCiAgKiBETEwgZGVjb3JhdGlvbiwgaWYgdXNlZCBhdCBhbGwsIG11c3QgYmUgY29uc2lzdGVudC4KQEAgLTE2NDAsMjUgKzE2NzAsMjIgQEAKICAqICB0aGUgTkVUU05NUF9JTVBPUlQgZGVmaW5pdGlvbnMgaGFybWxlc3MuCiAgKi8KIAotCi0gICNpZmRlZiBORVRTTk1QX1VTRV9ETEwKLSAgICAjaWZuZGVmIE5FVFNOTVBfVE9PTFNfQwotCi0gIC8qIHdyYXAgYWxsb2MgZnVuY3Rpb25zIHRvIHVzZSBETEwncyBtZW1vcnkgaGVhcCAqLwotICAvKiBUaGlzIGlzIG5vdCBkb25lIGluIHRvb2xzLmMsIHdoZXJlIHRoZXNlIHdyYXBwZXJzIGFyZSBkZWZpbmVkICovCi0KLSAgICAgICNkZWZpbmUgc3RyZHVwICAgIG5ldHNubXBfc3RyZHVwCi0gICAgICAjZGVmaW5lIGNhbGxvYyAgICBuZXRzbm1wX2NhbGxvYwotICAgICAgI2RlZmluZSBtYWxsb2MgICAgbmV0c25tcF9tYWxsb2MKLSAgICAgICNkZWZpbmUgcmVhbGxvYyAgIG5ldHNubXBfcmVhbGxvYwotICAgICAgI2RlZmluZSBmcmVlICAgICAgbmV0c25tcF9mcmVlCisjaWZkZWYgTkVUU05NUF9VU0VfRExMCisgICNpZmRlZiBORVRTTk1QX0RMTAorICAgICNpZiBkZWZpbmVkKF9NU0NfVkVSKQorICAgICAgI2RlZmluZSBORVRTTk1QX0lNUE9SVCBfX2RlY2xzcGVjKGRsbGV4cG9ydCkKICAgICAjZW5kaWYKLSAgI2VuZGlmCisgICNlbHNlCisgICAgI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgICAjZGVmaW5lIE5FVFNOTVBfSU1QT1JUIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQorICAgICNlbmRpZgorICAjZW5kaWYgICAvKiBORVRTTk1QX0RMTCAqLworI2VuZGlmICAgICAvKiBORVRTTk1QX1VTRV9ETEwgKi8KIAogLyogTVNWQyBPcGVuU1NMIGxpbmtlciBzZXR0aW5ncy4gKi8KLSNpZiBkZWZpbmVkKFdJTjMyKSAmJiAhZGVmaW5lZChtaW5ndzMyKQorI2lmIGRlZmluZWQoX01TQ19WRVIpCiAjICBpZiBkZWZpbmVkKE5FVFNOTVBfVVNFX09QRU5TU0wpCi0jICAgIGlmZGVmIE5FVFNOTVBfVVNFX0RMTAorIyAgICBpZmRlZiBfRExMCiAjICAgICAgaWZkZWYgX0RFQlVHCiAjICAgICAgICBwcmFnbWEgY29tbWVudChsaWIsICJsaWJlYXkzMk1EZC5saWIiKQogIyAgICAgIGVsc2UKQEAgLTE2NzIsNiArMTY5OSw3IEBACiAjICAgICAgZW5kaWYKICMgICAgZW5kaWYKICMgICAgcHJhZ21hIGNvbW1lbnQobGliLCAiZ2RpMzIubGliIikKKyMgICAgcHJhZ21hIGNvbW1lbnQobGliLCAidXNlcjMyLmxpYiIpCiAjICBlbmRpZgogI2VuZGlmCiAKQEAgLTE2ODEsNyArMTcwOSw3IEBACiAjICBkZWZpbmUgTkVUU05NUF9JTVBPUlQgZXh0ZXJuCiAjZW5kaWYKIAotI2lmIGRlZmluZWQoSEFWRV9OTElTVCkgJiYgZGVmaW5lZChTVFJVQ1RfTkxJU1RfSEFTX05fVkFMVUUpICYmICFkZWZpbmVkKERPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCisjaWYgZGVmaW5lZChIQVZFX05MSVNUKSAmJiBkZWZpbmVkKEhBVkVfU1RSVUNUX05MSVNUX05fVkFMVUUpICYmICFkZWZpbmVkKERPTlRfVVNFX05MSVNUKSAmJiAhZGVmaW5lZChORVRTTk1QX05PX0tNRU1fVVNBR0UpCiAjZGVmaW5lIE5FVFNOTVBfQ0FOX1VTRV9OTElTVAogI2VuZGlmCiAKQEAgLTE2ODksNyArMTcxNyw2IEBACiAjZGVmaW5lIERNQUxMT0NfRlVOQ19DSEVDSwogI2VuZGlmCiAKLS8qICN1bmRlZiBORVRTTk1QX0VOQUJMRV9JUFY2ICovCiAvKiAjdW5kZWYgTkVUU05NUF9FTkFCTEVfTE9DQUxfU01VWCAqLwogCiAvKiBkZWZpbmUgaWYgYWdlbnR4IHRyYW5zcG9ydCBpcyB0byB1c2UgZG9tYWluIHNvY2tldHMgb25seSAqLwpAQCAtMTcxMCwxOSArMTczNywzNSBAQAogI3VuZGVmIEhBVkVfSU5FVF9OVE9QCiAjdW5kZWYgSEFWRV9JTkVUX1BUT04KIAotI2lmIE5FVFNOTVBfRU5BQkxFX0lQVjYKKy8qIElQdjYgdHJhbnNwb3J0cyAqLworI2lmZGVmIE5FVFNOTVBfRU5BQkxFX0lQVjYKICAgI2RlZmluZSBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTiAxCiAgICNkZWZpbmUgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4gMQorICAjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX0lONl9TSU42X1NDT1BFX0lEIDEKICNlbHNlCiAgICN1bmRlZiBORVRTTk1QX1RSQU5TUE9SVF9UQ1BJUFY2X0RPTUFJTgogICAjdW5kZWYgTkVUU05NUF9UUkFOU1BPUlRfVURQSVBWNl9ET01BSU4KICNlbmRpZgogI2VuZGlmCiAKKy8qCisgKiBBbHRob3VnaCBpZl9uYW1ldG9pbmRleCgpIGlzIGF2YWlsYWJsZSBvbiBXaW5kb3dzIFZpc3RhLCBXaW5kb3dzIFNlcnZlcgorICogMjAwOCBhbmQgbGF0ZXIgaW4gaXBobHBhcGkuZGxsLCBkbyBub3QgbGluayB3aXRoIGlmX25hbWV0b2luZGV4KCkgc3VjaAorICogdGhhdCB0aGUgTmV0LVNOTVAgZXhlY3V0YWJsZSBjYW4gYmUgc3RhcnRlZCBvbiBlYXJsaWVyIFdpbmRvd3MgdmVyc2lvbnMuCisgKi8KKyN1bmRlZiBIQVZFX0lGX05BTUVUT0lOREVYCisKICNpZm5kZWYgTklfTUFYSE9TVAogI2RlZmluZSBOSV9NQVhIT1NUCTEwMjUKICNlbmRpZgogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHN0cnRvdWxsJyBmdW5jdGlvbi4gKi8KKyNpZiBfTVNDX1ZFUiA+PSAxODAwCisjZGVmaW5lIEhBVkVfU1RSVE9VTEwKKyNlbHNlCisvKiAjdW5kZWYgSEFWRV9TVFJUT1VMTCAqLworI2VuZGlmCisKIC8qCiAgKiBNb2R1bGUgY29uZmlndXJhdGlvbiBhbmQgY29udHJvbCBzdGFydHMgaGVyZS4KICAqCkBAIC0xNzY2LDkgKzE4MDksMTkgQEAKICNkZWZpbmUgTkVUU05NUF9USU1FT1VUX1dBSVRGT1JTSU5HTEVPQkpFQ1QgNTAwMAogCiAjaWZkZWYgSEFWRV9XSU4zMl9QTEFURk9STV9TREsKLSNkZWZpbmUgU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfSEFTX1NTX0ZBTUlMWSAxCisjZGVmaW5lIEhBVkVfU1RSVUNUX1NPQ0tBRERSX1NUT1JBR0VfU1NfRkFNSUxZIDEKICNlbmRpZgogCisvKiBTaXplIHByZWZpeCB0byB1c2UgdG8gcHJpbnRmIGEgdWludDMyX3QgKi8KKyNkZWZpbmUgTkVUU05NUF9QUkkzMiAiIgorCisjaWZkZWYgX01TQ19WRVIKKyNpZmRlZiBfV0lONjQKKyNkZWZpbmUgTkVUU05NUF9QUkl6ICJJNjQiCisjZWxzZQorI2RlZmluZSBORVRTTk1QX1BSSXogIiIKKyNlbmRpZgorI2VuZGlmCiAKICNlbmRpZiAvKiBORVRfU05NUF9DT05GSUdfSCAqLwogCmRpZmYgLS1naXQgYS93aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbiBiL3dpbjMyL25ldHNubXBtaWJzL01ha2VmaWxlLmluCm9sZCBtb2RlIDEwMDY0NApuZXcgbW9kZSAxMDA3NTUKaW5kZXggNGUyNGQ3NS4uYjZiYWNiYwotLS0gYS93aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbgorKysgYi93aW4zMi9uZXRzbm1wbWlicy9NYWtlZmlsZS5pbgpAQCAtMiw2ICsyLDcgQEAKIENGRz0KIE9VVERJUj0KIElOVERJUj0KK1NESz0KIAogIUlGICIkKE9TKSIgPT0gIldpbmRvd3NfTlQiCiBOVUxMPQpAQCAtOSw3NSArMTAsOCBAQAogTlVMTD1udWwKICFFTkRJRiAKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQogQUxMIDogIi4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIgogCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGVycm9ybWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhhbXBsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4ZWN1dGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcXVlcnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmlsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbG9hZGF2ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0NhY2hlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNEZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvdmVycmlkZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm9jLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvdG9jb2wub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm94eS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc211eC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtQ29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtVXNlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiCi0KICIuLlxsaWJcJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgogCkBAIC04NSw3ICsxOSwxMSBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishSUYgICIkKENGRykiID09ICJyZWxlYXNlIgorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgorQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0VIc2MgL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCishRU5ESUYKIAogLmN7JChJTlRESVIpfS5vYmo6OgogICAgJChDUFApIEA8PApAQCAtMTE4LDMzICs1Niw0MCBAQAogPDwKIAogUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXCQoUFJPR05BTUUpLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KIExJQjMyPWxpbmsuZXhlIC1saWIKIExJQjMyX0ZMQUdTPS9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiIAotTElCMzJfT0JKUz0gXAorTElCMzJfT0JKUzE9IFwKIAkiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIgXAogCSIkKElOVERJUilcc25tcF9taWIub2JqIiBcCiAJIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiIFwKKwkiJChJTlRESVIpXHVwZGF0ZXMub2JqIiBcCiAJIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIiBcCiAJIiQoSU5URElSKVx2YWNtX2NvbmYub2JqIiBcCiAJIiQoSU5URElSKVx2YWNtX3ZhcnMub2JqIiBcCisJIiQoSU5URElSKVxtdGVFdmVudC5vYmoiIFwKKwkiJChJTlRESVIpXG10ZUV2ZW50Q29uZi5vYmoiIFwKIAkiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIiBcCisJIiQoSU5URElSKVxtdGVFdmVudFNldFRhYmxlLm9iaiIgXAogCSIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXG10ZU9iamVjdHMub2JqIiBcCisJIiQoSU5URElSKVxtdGVPYmplY3RzQ29uZi5vYmoiIFwKIAkiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXG10ZVNjYWxhcnMub2JqIiBcCiAJIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIgXAorCSIkKElOVERJUilcbXRlVHJpZ2dlci5vYmoiIFwKKwkiJChJTlRESVIpXG10ZVRyaWdnZXJDb25mLm9iaiIgXAogCSIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIiBcCiAJIiQoSU5URElSKVxleGFtcGxlLm9iaiIgXAogCSIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiIFwKKwkiJChJTlRESVIpXGRsbW9kLm9iaiIgXAogCSIkKElOVERJUilcZXJyb3JtaWIub2JqIiBcCiAJIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIgXAotCSIkKElOVERJUilcZmlsZS5vYmoiIFwKKwkiJChJTlRESVIpXGZpbGUub2JqIgorTElCMzJfT0JKUzI9IFwKIAkiJChJTlRESVIpXGxvYWRhdmUub2JqIiBcCiAJIiQoSU5URElSKVxwYXNzLm9iaiIgXAogCSIkKElOVERJUilccGFzc19jb21tb24ub2JqIiBcCkBAIC0xODAsMjAxICsxMjUsNDQgQEAKIAkiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXGV4ZWN1dGUub2JqIiBcCiAJIiQoSU5URElSKVxpcXVlcnkub2JqIiBcCisJIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIFwKKwkiJChJTlRESVIpXGhlYWRlcl9nZW5lcmljLm9iaiIgXAorCSIkKElOVERJUilcaGVhZGVyX3NpbXBsZV90YWJsZS5vYmoiIFwKIAkiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIgXAogCSIkKElOVERJUilcbWliX21vZHVsZXMub2JqIiBcCi0JIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIFwKIAkiJChJTlRESVIpXHV0aWxfZnVuY3Mub2JqIiBcCisJIiQoSU5URElSKVxFeGl0Lm9iaiIgXAorCSIkKElOVERJUilccmVzdGFydC5vYmoiIFwKIAkiJChJTlRESVIpXHNtdXgub2JqIgotCi0iLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKLSAgICAkKExJQjMyKSBAPDwKLSAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKLTw8Ci0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotQUxMIDogIi4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIgotCishSUYgIiQoU0RLKSIgPT0gInRydWUiCitMSUIzMl9PQkpTMz0gXAorCSIkKElOVERJUilcYXQub2JqIiBcCisJIiQoSU5URElSKVxpY21wLm9iaiIgXAorCSIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiIFwKKwkiJChJTlRESVIpXGlwLm9iaiIgXAorCSIkKElOVERJUilcaXBBZGRyLm9iaiIgXAorCSIkKElOVERJUilcbm90aWZpY2F0aW9uX2xvZy5vYmoiIFwKKwkiJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIgXAorCSIkKElOVERJUilcdGNwLm9iaiIgXAorCSIkKElOVERJUilcdGNwVGFibGUub2JqIiBcCisJIiQoSU5URElSKVx1ZHAub2JqIiBcCisJIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiIFwKKwkiJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiIFwKKwkiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiCishRU5ESUYKK0xJQjMyX09CSlM9JChMSUIzMl9PQkpTMSkgJChMSUIzMl9PQkpTMikgJChMSUIzMl9PQkpTMykKIAogQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcY2xpZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXJyb3JtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGFtcGxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhlY3V0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlxdWVyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuc2libGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmaWxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxsb2FkYXZlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbWliX21vZHVsZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJCb29sZWFuVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRGVsdGFUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zQ2FjaGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0RlYnVnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb2Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm90b2NvbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3h5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbXV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3ViYWdlbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Db25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Vc2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fdmFycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCisJLUBmb3IgJWYgaW4gKCQoTElCMzJfT0JKUzEpKSBkbyBlcmFzZSAlJWYKKwktQGZvciAlZiBpbiAoJChMSUIzMl9PQkpTMikpIGRvIGVyYXNlICUlZgorCS1AZm9yICVmIGluICgkKExJQjMyX09CSlMzKSkgZG8gZXJhc2UgJSVmCiAJLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiCiAKLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVwkKFBST0dOQU1FKS5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSUIzMj1saW5rLmV4ZSAtbGliCi1MSUIzMl9GTEFHUz0vbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcJChQUk9HTkFNRSkubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9taWIub2JqIiBcCi0JIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fY29uZi5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fdmFycy5vYmoiIFwKLQkiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcZXhhbXBsZS5vYmoiIFwKLQkiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIiBcCi0JIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiIFwKLQkiJChJTlRESVIpXGV4dGVuc2libGUub2JqIiBcCi0JIiQoSU5URElSKVxmaWxlLm9iaiIgXAotCSIkKElOVERJUilcbG9hZGF2ZS5vYmoiIFwKLQkiJChJTlRESVIpXHBhc3Mub2JqIiBcCi0JIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxwcm9jLm9iaiIgXAotCSIkKElOVERJUilccHJveHkub2JqIiBcCi0JIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIiBcCi0JIiQoSU5URElSKVx1c21Db25mLm9iaiIgXAotCSIkKElOVERJUilcdXNtU3RhdHMub2JqIiBcCi0JIiQoSU5URElSKVx1c21Vc2VyLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5VGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIgXAotCSIkKElOVERJUilcc25tcFRhcmdldFBhcmFtc0VudHJ5Lm9iaiIgXAotCSIkKElOVERJUilcdGFyZ2V0Lm9iaiIgXAotCSIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIgXAotCSIkKElOVERJUilcYWdlbnR4X2NvbmZpZy5vYmoiIFwKLQkiJChJTlRESVIpXGNsaWVudC5vYmoiIFwKLQkiJChJTlRESVIpXG1hc3Rlci5vYmoiIFwKLQkiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiIFwKLQkiJChJTlRESVIpXHByb3RvY29sLm9iaiIgXAotCSIkKElOVERJUilcc3ViYWdlbnQub2JqIiBcCi0JIiQoSU5URElSKVxleHRlbmQub2JqIiBcCi0JIiQoSU5URElSKVxuc0NhY2hlLm9iaiIgXAotCSIkKElOVERJUilcbnNEZWJ1Zy5vYmoiIFwKLQkiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiIFwKLQkiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxleGVjdXRlLm9iaiIgXAotCSIkKElOVERJUilcaXF1ZXJ5Lm9iaiIgXAotCSIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIiBcCi0JIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiIFwKLQkiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgXAotCSIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiIFwKLQkiJChJTlRESVIpXHNtdXgub2JqIgotCiAiLi5cbGliXCQoT1VURElSKVwkKFBST0dOQU1FKS5saWIiIDogIi4uXGxpYlwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElCMzJfT0JKUykKICAgICAkKExJQjMyKSBAPDwKICAgJChMSUIzMl9GTEFHUykgJChERUZfRkxBR1MpICQoTElCMzJfT0JKUykKIDw8CiAKLSFFTkRJRiAKLQogCiAhSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgogIUlGIEVYSVNUUygiJChQUk9HTkFNRSkuZGVwIikKQEAgLTQxMCw2ICsxOTgsMTIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVwZGF0ZXMuYworCisiJChJTlRESVIpXHVwZGF0ZXMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb250ZXh0LmMKIAogIiQoSU5URElSKVx2YWNtX2NvbnRleHQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNDI4LDQ5ICsyMjIsODIgQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnQuYworCisiJChJTlRESVIpXG10ZUV2ZW50Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnRDb25mLmMKKworIiQoSU5URElSKVxtdGVFdmVudENvbmYub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnRTZXRUYWJsZS5jCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnRUYWJsZS5jCisiJChJTlRESVIpXG10ZUV2ZW50U2V0VGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudFRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlT2JqZWN0cy5jCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlT2JqZWN0c1RhYmxlLmMKKyIkKElOVERJUilcbXRlT2JqZWN0cy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZU9iamVjdHNDb25mLmMKKworIiQoSU5URElSKVxtdGVPYmplY3RzQ29uZi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZU9iamVjdHNUYWJsZS5jCiAKICIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlU2NhbGFycy5jCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCisiJChJTlRESVIpXG10ZVNjYWxhcnMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlci5jCiAKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckRlbHRhVGFibGUuYworIiQoSU5URElSKVxtdGVUcmlnZ2VyLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckNvbmYuYworCisiJChJTlRESVIpXG10ZVRyaWdnZXJDb25mLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckRlbHRhVGFibGUuYwogCiAiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwogCiAiJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRhYmxlLmMKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlclRhYmxlLmMKIAogIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCiAKICIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCkBAIC00ODgsNiArMzE1LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZGxtb2QuYyIKKworIiQoSU5URElSKVxkbG1vZC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZXJyb3JtaWIuYyIKIAogIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC01ODQsNiArNDE3LDEyIEBACiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5jIgorCisiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGUuYwogCiAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCkBAIC03MTUsNiArNTU0LDI1IEBACiAiJChJTlRESVIpXGlxdWVyeS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcb3ZlcnJpZGUuYworCisiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NcaGVhZGVyX2dlbmVyaWMuYworCisiJChJTlRESVIpXGhlYWRlcl9nZW5lcmljLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NcaGVhZGVyX3NpbXBsZV90YWJsZS5jCisKKyIkKElOVERJUilcaGVhZGVyX3NpbXBsZV90YWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxoZWFkZXJfY29tcGxleC5jCiAKICIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgpAQCAtNzI3LDI2ICs1ODUsODggQEAKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xvdmVycmlkZS5jCi0KLSIkKElOVERJUilcb3ZlcnJpZGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jcy5jCiAKICIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXEV4aXQuYworCisiJChJTlRESVIpXEV4aXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xyZXN0YXJ0LmMKKworIiQoSU5URElSKVxyZXN0YXJ0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKwogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNtdXhcc211eC5jCiAKICIkKElOVERJUilcc211eC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCiAJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQogCiAKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx3aW5FeHRETEwuYworIiQoSU5URElSKVx3aW5FeHRETEwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgorCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKKworCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcYXQuYworIiQoSU5URElSKVxhdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpY21wLmMKKyIkKElOVERJUilcaWNtcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpbnRlcmZhY2VzLmMKKyIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcC5jCisiJChJTlRESVIpXGlwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwQWRkci5jCisiJChJTlRESVIpXGlwQWRkci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxyb3V0ZV93cml0ZS5jCisiJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHRjcC5jCisiJChJTlRESVIpXHRjcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3BUYWJsZS5jCisiJChJTlRESVIpXHRjcFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcC5jCisiJChJTlRESVIpXHVkcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCisKK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHBUYWJsZS5jCisiJChJTlRESVIpXHVkcFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKKworU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhcl9yb3V0ZS5jCisiJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCiAKICFFTkRJRiAKLQotCi0KZGlmZiAtLWdpdCBhL3dpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcCBiL3dpbjMyL25ldHNubXBtaWJzL25ldHNubXBtaWJzLmRzcAppbmRleCAzYWQ4NzlkLi5jZGU0OTZjIDEwMDY0NAotLS0gYS93aW4zMi9uZXRzbm1wbWlicy9uZXRzbm1wbWlicy5kc3AKKysrIGIvd2luMzIvbmV0c25tcG1pYnMvbmV0c25tcG1pYnMuZHNwCkBAIC04NSw2ICs4NSwzMCBAQAogIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxhdC5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGljbXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpbnRlcmZhY2VzLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcEFkZHIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxyb3V0ZV93cml0ZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHNldFNlcmlhbE5vLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCkBAIC0xMDEsNyArMTI1LDIzIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb250ZXh0LmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHAuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx1ZHBUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVwZGF0ZXMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KQEAgLTEwOSw0MyArMTQ5LDgzIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV9jb250ZXh0LmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCiBTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFjbV92YXJzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFyX3JvdXRlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQogIyBCZWdpbiBHcm91cCAiZGlzbWFuIg0KIA0KICMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlRXZlbnQuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnRUYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudENvbmYuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlT2JqZWN0c1RhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVFdmVudFNldFRhYmxlLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJEZWx0YVRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZUV2ZW50VGFibGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZU9iamVjdHMuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRhYmxlLmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZU9iamVjdHNDb25mLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVPYmplY3RzVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlU2NhbGFycy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXIuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckNvbmYuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckRlbHRhVGFibGUuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cZXZlbnRcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXGV2ZW50XG10ZVRyaWdnZXJUYWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxldmVudFxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBFbmQgR3JvdXANCiAjIEJlZ2luIEdyb3VwICJleGFtcGxlcyINCkBAIC0yMzcsMTkgKzMxNywyMyBAQAogIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uLWxvZy1taWJcbm90aWZpY2F0aW9uX2xvZy5jIg0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb25cc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlLmMNCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlLmMiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMNCitTT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMiDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5jDQorU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYyINCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0zNDEsNyArNDI1LDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcaXF1ZXJ5LmMNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xFeGl0LmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCkBAIC0zNDksNiArNDMzLDE4IEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jc1xoZWFkZXJfZ2VuZXJpYy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxfZnVuY3NcaGVhZGVyX3NpbXBsZV90YWJsZS5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQorU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xpcXVlcnkuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJfbW9kdWxlcy5jDQogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQpAQCAtMzU3LDEyICs0NTMsMzIgQEAKICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzXHJlc3RhcnQuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzLmMNCiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAid2luRXh0RExMIg0KKw0KKyMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcd2luRXh0RExMLmMNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgQmVnaW4gU291cmNlIEZpbGUNCisNCitTT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcd2luRXh0RExMLmgNCisjIEVuZCBTb3VyY2UgRmlsZQ0KKyMgRW5kIEdyb3VwDQorIyBCZWdpbiBHcm91cCAic211eCINCisNCisjIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQogU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNtdXhcc211eC5jDQogIyBFbmQgU291cmNlIEZpbGUNCisjIEVuZCBHcm91cA0KICMgRW5kIFRhcmdldA0KICMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi9uZXRzbm1wbWlic3Nkay9NYWtlZmlsZS5pbiBiL3dpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0N2QxOTA0Li4wMDAwMDAwCi0tLSBhL3dpbjMyL25ldHNubXBtaWJzc2RrL01ha2VmaWxlLmluCisrKyAvZGV2L251bGwKQEAgLTEsODg1ICswLDAgQEAKLVBST0dOQU1FPQotQ0ZHPQotT1VURElSPQotSU5URElSPQotCi0hSUYgIiQoT1MpIiA9PSAiV2luZG93c19OVCIKLU5VTEw9Ci0hRUxTRSAKLU5VTEw9bnVsCi0hRU5ESUYgCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLUFMTCA6ICIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIKLQotCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxhdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGNsaWVudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGRsbW9kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXJyb3JtaWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleGFtcGxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhlY3V0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlxdWVyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4dGVuc2libGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxmaWxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaGVhZGVyX2NvbXBsZXgub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpY21wLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaXBBZGRyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbG9hZGF2ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1hc3Rlcl9hZG1pbi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbmQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0NhY2hlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNEZWJ1Zy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTG9nZ2luZy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zTW9kdWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc1RyYW5zYWN0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxvdmVycmlkZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHBhc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm9jLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvdG9jb2wub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwcm94eS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbXV4Lm9iaiIKLSMJLUBlcmFzZSAiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLQktQGVyYXNlICIkKElOVERJUilcc25tcF9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c3RlbV9taWIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0Y3Aub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1ZHAub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbUNvbmYub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21TdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHVzbVVzZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV9jb25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFjbV92YXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZlcnNpb25pbmZvLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgotCS1AZXJhc2UgIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIgotCi0iLi5cbGliXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cbGliXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cbGliXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9GcCIkKElOVERJUilcbmV0c25tcG1pYnNzZGsucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotLmN7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi1SU0M9cmMuZXhlCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcbmV0c25tcG1pYnNzZGsuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElCMzI9bGluay5leGUgLWxpYgotTElCMzJfRkxBR1M9aXBobHBhcGkubGliIC9ub2xvZ28gL291dDoiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiIAotTElCMzJfT0JKUz0gXAotCSIkKElOVERJUilcc2V0U2VyaWFsTm8ub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wX21pYi5vYmoiIFwKLQkiJChJTlRESVIpXHN5c09SVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIgXAotCSIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIgXAotCSIkKElOVERJUilcdmFjbV9jb25mLm9iaiIgXAotCSIkKElOVERJUilcdmFjbV92YXJzLm9iaiIgXAotCSIkKElOVERJUilcbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZUV2ZW50VGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVPYmplY3RzVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckRlbHRhVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVUcmlnZ2VyVGhyZXNob2xkVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxleGFtcGxlLm9iaiIgXAotCSIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBFbmdpbmUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIiBcCi0JIiQoSU5URElSKVx1c21Db25mLm9iaiIgXAotCSIkKElOVERJUilcdXNtU3RhdHMub2JqIiBcCi0JIiQoSU5URElSKVx1c21Vc2VyLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3Mub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcFRhcmdldEFkZHJFbnRyeS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiIFwKLQkiJChJTlRESVIpXHRhcmdldC5vYmoiIFwKLQkiJChJTlRESVIpXHRhcmdldF9jb3VudGVycy5vYmoiIFwKLQkiJChJTlRESVIpXGFnZW50eF9jb25maWcub2JqIiBcCi0JIiQoSU5URElSKVxjbGllbnQub2JqIiBcCi0JIiQoSU5URElSKVxtYXN0ZXIub2JqIiBcCi0JIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIiBcCi0JIiQoSU5URElSKVxwcm90b2NvbC5vYmoiIFwKLQkiJChJTlRESVIpXHN1YmFnZW50Lm9iaiIgXAotCSIkKElOVERJUilcZXh0ZW5kLm9iaiIgXAotCSIkKElOVERJUilcbnNDYWNoZS5vYmoiIFwKLQkiJChJTlRESVIpXG5zRGVidWcub2JqIiBcCi0JIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIiBcCi0JIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcZXhlY3V0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGlxdWVyeS5vYmoiIFwKLQkiJChJTlRESVIpXG92ZXJyaWRlLm9iaiIgXAotCSIkKElOVERJUilcYXQub2JqIiBcCi0JIiQoSU5URElSKVxpY21wLm9iaiIgXAotCSIkKElOVERJUilcaW50ZXJmYWNlcy5vYmoiIFwKLQkiJChJTlRESVIpXGlwLm9iaiIgXAotCSIkKElOVERJUilcaXBBZGRyLm9iaiIgXAotCSIkKElOVERJUilccm91dGVfd3JpdGUub2JqIiBcCi0JIiQoSU5URElSKVx0Y3Aub2JqIiBcCi0JIiQoSU5URElSKVx0Y3BUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHVkcC5vYmoiIFwKLQkiJChJTlRESVIpXHVkcFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcdmFyX3JvdXRlLm9iaiIgXAotCSIkKElOVERJUilcZGxtb2Qub2JqIiBcCi0JIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiIFwKLQkiJChJTlRESVIpXGV4dGVuc2libGUub2JqIiBcCi0JIiQoSU5URElSKVxmaWxlLm9iaiIgXAotCSIkKElOVERJUilcbG9hZGF2ZS5vYmoiIFwKLQkiJChJTlRESVIpXHBhc3Mub2JqIiBcCi0JIiQoSU5URElSKVxwYXNzX3BlcnNpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxwcm9jLm9iaiIgXAotCSIkKElOVERJUilccHJveHkub2JqIiBcCi0JIiQoSU5URElSKVx2ZXJzaW9uaW5mby5vYmoiIFwKLQkiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIgXAotCSIkKElOVERJUilcbWliX21vZHVsZXMub2JqIiBcCi0JIiQoSU5URElSKVx1dGlsX2Z1bmNzLm9iaiIgXAotIwkiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiIFwJIyB1bmNvbW1lbnQgZm9yIHdpbkV4dERMTAotCSIkKElOVERJUilcc211eC5vYmoiCi0KLSIuLlxsaWJcJChPVVRESVIpXG5ldHNubXBtaWJzLmxpYiIgOiAiLi5cbGliXCQoT1VURElSKSIgJChERUZfRklMRSkgJChMSUIzMl9PQkpTKQotICAgICQoTElCMzIpIEA8PAotICAkKExJQjMyX0ZMQUdTKSAkKERFRl9GTEFHUykgJChMSUIzMl9PQkpTKQotPDwKLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYXQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxjbGllbnQub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxkbG1vZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGVycm9ybWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXhhbXBsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGV4ZWN1dGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcXVlcnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZmlsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcaWNtcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGludGVyZmFjZXMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxpcC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGlwQWRkci5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGxvYWRhdmUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXIub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtYXN0ZXJfYWRtaW4ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcZXh0ZW5kLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNDYWNoZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXG5zRGVidWcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxuc01vZHVsZVRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcbnNUcmFuc2FjdGlvblRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcb3ZlcnJpZGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxwYXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJvYy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHByb3RvY29sLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilccHJveHkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZV93cml0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc211eC5vYmoiCi0jCS1AZXJhc2UgIiQoSU5URElSKVx3aW5FeHRETEwub2JqIgkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBfbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBNUERTdGF0cy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHN5c09SVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGNwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdGNwVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1Y2REZW1vUHVibGljLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWRwLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdWRwVGFibGUub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Db25mLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXNtU3RhdHMub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx1c21Vc2VyLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fY29uZi5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhY21fdmFycy5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cbGliXCQoT1VURElSKVxuZXRzbm1wbWlicy5saWIiCi0KLSIuLlxsaWJcJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxsaWJcJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxsaWJcJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvRnAiJChJTlRESVIpXG5ldHNubXBtaWJzc2RrLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXG5ldHNubXBtaWJzc2RrLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0KLUxJQjMyPWxpbmsuZXhlIC1saWIKLUxJQjMyX0ZMQUdTPWlwaGxwYXBpLmxpYiAvbm9sb2dvIC9vdXQ6Ii4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIiAKLUxJQjMyX09CSlM9IFwKLQkiJChJTlRESVIpXHNldFNlcmlhbE5vLm9iaiIgXAotCSIkKElOVERJUilcc25tcF9taWIub2JqIiBcCi0JIiQoSU5URElSKVxzeXNPUlRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc3lzdGVtX21pYi5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fY29udGV4dC5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fY29uZi5vYmoiIFwKLQkiJChJTlRESVIpXHZhY21fdmFycy5vYmoiIFwKLQkiJChJTlRESVIpXG10ZUV2ZW50Tm90aWZpY2F0aW9uVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlT2JqZWN0c1RhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlckV4aXN0ZW5jZVRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlclRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcZXhhbXBsZS5vYmoiIFwKLQkiJChJTlRESVIpXHVjZERlbW9QdWJsaWMub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wRW5naW5lLm9iaiIgXAotCSIkKElOVERJUilcc25tcE1QRFN0YXRzLm9iaiIgXAotCSIkKElOVERJUilcdXNtQ29uZi5vYmoiIFwKLQkiJChJTlRESVIpXHVzbVN0YXRzLm9iaiIgXAotCSIkKElOVERJUilcdXNtVXNlci5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJQcm9maWxlVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLm9iaiIgXAotCSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclRhYmxlX2ludGVyZmFjZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBOb3RpZnlUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBUYXJnZXRBZGRyRW50cnkub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wVGFyZ2V0UGFyYW1zRW50cnkub2JqIiBcCi0JIiQoSU5URElSKVx0YXJnZXQub2JqIiBcCi0JIiQoSU5URElSKVx0YXJnZXRfY291bnRlcnMub2JqIiBcCi0JIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIgXAotCSIkKElOVERJUilcY2xpZW50Lm9iaiIgXAotCSIkKElOVERJUilcbWFzdGVyLm9iaiIgXAotCSIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIgXAotCSIkKElOVERJUilccHJvdG9jb2wub2JqIiBcCi0JIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiIFwKLQkiJChJTlRESVIpXGV4dGVuZC5vYmoiIFwKLQkiJChJTlRESVIpXG5zQ2FjaGUub2JqIiBcCi0JIiQoSU5URElSKVxuc0RlYnVnLm9iaiIgXAotCSIkKElOVERJUilcbnNMb2dnaW5nLm9iaiIgXAotCSIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXGV4ZWN1dGUub2JqIiBcCi0JIiQoSU5URElSKVxpcXVlcnkub2JqIiBcCi0JIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIFwKLQkiJChJTlRESVIpXGF0Lm9iaiIgXAotCSIkKElOVERJUilcaWNtcC5vYmoiIFwKLQkiJChJTlRESVIpXGludGVyZmFjZXMub2JqIiBcCi0JIiQoSU5URElSKVxpcC5vYmoiIFwKLQkiJChJTlRESVIpXGlwQWRkci5vYmoiIFwKLQkiJChJTlRESVIpXHJvdXRlX3dyaXRlLm9iaiIgXAotCSIkKElOVERJUilcdGNwLm9iaiIgXAotCSIkKElOVERJUilcdGNwVGFibGUub2JqIiBcCi0JIiQoSU5URElSKVx1ZHAub2JqIiBcCi0JIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiIFwKLQkiJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiIFwKLQkiJChJTlRESVIpXGRsbW9kLm9iaiIgXAotCSIkKElOVERJUilcZXJyb3JtaWIub2JqIiBcCi0JIiQoSU5URElSKVxleHRlbnNpYmxlLm9iaiIgXAotCSIkKElOVERJUilcZmlsZS5vYmoiIFwKLQkiJChJTlRESVIpXGxvYWRhdmUub2JqIiBcCi0JIiQoSU5URElSKVxwYXNzLm9iaiIgXAotCSIkKElOVERJUilccGFzc19wZXJzaXN0Lm9iaiIgXAotCSIkKElOVERJUilccHJvYy5vYmoiIFwKLQkiJChJTlRESVIpXHByb3h5Lm9iaiIgXAotCSIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIiBcCi0JIiQoSU5URElSKVxoZWFkZXJfY29tcGxleC5vYmoiIFwKLQkiJChJTlRESVIpXG1pYl9tb2R1bGVzLm9iaiIgXAotCSIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiIFwKLQkiJChJTlRESVIpXHNtdXgub2JqIiBcCi0jCSIkKElOVERJUilcd2luRXh0RExMLm9iaiIgXAkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0JIiQoSU5URElSKVxzbXV4Lm9iaiIKLQotIi4uXGxpYlwkKE9VVERJUilcbmV0c25tcG1pYnMubGliIiA6ICIuLlxsaWJcJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJQjMyX09CSlMpCi0gICAgJChMSUIzMikgQDw8Ci0gICQoTElCMzJfRkxBR1MpICQoREVGX0ZMQUdTKSAkKExJQjMyX09CSlMpCi08PAotCi0hRU5ESUYgCi0KLQotIUlGICIkKE5PX0VYVEVSTkFMX0RFUFMpIiAhPSAiMSIKLSFJRiBFWElTVFMoIm5ldHNubXBtaWJzc2RrLmRlcCIpCi0hSU5DTFVERSAibmV0c25tcG1pYnNzZGsuZGVwIgotIUVMU0UgCi0hTUVTU0FHRSBXYXJuaW5nOiBjYW5ub3QgZmluZCAibmV0c25tcG1pYnNzZGsuZGVwIgotIUVORElGIAotIUVORElGIAotCi0KLSFJRiAiJChDRkcpIiA9PSAicmVsZWFzZSIgfHwgIiQoQ0ZHKSIgPT0gImRlYnVnIgotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHNldFNlcmlhbE5vLmMKLQotIiQoSU5URElSKVxzZXRTZXJpYWxOby5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzbm1wX21pYi5jCi0KLSIkKElOVERJUilcc25tcF9taWIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc3lzT1JUYWJsZS5jCi0KLSIkKElOVERJUilcc3lzT1JUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzeXN0ZW1fbWliLmMKLQotIiQoSU5URElSKVxzeXN0ZW1fbWliLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29udGV4dC5jCi0KLSIkKElOVERJUilcdmFjbV9jb250ZXh0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fY29uZi5jCi0KLSIkKElOVERJUilcdmFjbV9jb25mLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHZhY21fdmFycy5jCi0KLSIkKElOVERJUilcdmFjbV92YXJzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVFdmVudE5vdGlmaWNhdGlvblRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudFRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVFdmVudFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVPYmplY3RzVGFibGUuYwotCi0iJChJTlRESVIpXG10ZU9iamVjdHNUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5jCi0KLSIkKElOVERJUilcbXRlVHJpZ2dlckJvb2xlYW5UYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlckRlbHRhVGFibGUuYwotCi0iJChJTlRESVIpXG10ZVRyaWdnZXJEZWx0YVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyRXhpc3RlbmNlVGFibGUuYwotCi0iJChJTlRESVIpXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRhYmxlLmMKLQotIiQoSU5URElSKVxtdGVUcmlnZ2VyVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJUaHJlc2hvbGRUYWJsZS5jCi0KLSIkKElOVERJUilcbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGV4YW1wbGVzXGV4YW1wbGUuYwotCi0iJChJTlRESVIpXGV4YW1wbGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZXhhbXBsZXNcdWNkRGVtb1B1YmxpYy5jCi0KLSIkKElOVERJUilcdWNkRGVtb1B1YmxpYy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcc25tcEVuZ2luZS5jCi0KLSIkKElOVERJUilcc25tcEVuZ2luZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcc25tcE1QRFN0YXRzLmMKLQotIiQoSU5URElSKVxzbm1wTVBEU3RhdHMub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHVzbUNvbmYuYwotCi0iJChJTlRESVIpXHVzbUNvbmYub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHVzbVN0YXRzLmMKLQotIiQoSU5URElSKVx1c21TdGF0cy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wdjNcdXNtVXNlci5jCi0KLSIkKElOVERJUilcdXNtVXNlci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb25cc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jCi0KLSIkKElOVERJUilcc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmMKLQotIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlLmMKLQotIiQoSU5URElSKVxzbm1wTm90aWZ5RmlsdGVyVGFibGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfZGF0YV9hY2Nlc3MuYwotCi0iJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9kYXRhX2FjY2Vzcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2UuYwotCi0iJChJTlRESVIpXHNubXBOb3RpZnlGaWx0ZXJUYWJsZV9pbnRlcmZhY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uXHNubXBOb3RpZnlUYWJsZS5jCi0KLSIkKElOVERJUilcc25tcE5vdGlmeVRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFxzbm1wVGFyZ2V0QWRkckVudHJ5LmMKLQotIiQoSU5URElSKVxzbm1wVGFyZ2V0QWRkckVudHJ5Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFxzbm1wVGFyZ2V0UGFyYW1zRW50cnkuYwotCi0iJChJTlRESVIpXHNubXBUYXJnZXRQYXJhbXNFbnRyeS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcdGFyZ2V0LmMKLQotIiQoSU5URElSKVx0YXJnZXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHRhcmdldF9jb3VudGVycy5jCi0KLSIkKElOVERJUilcdGFyZ2V0X2NvdW50ZXJzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxhZ2VudHhfY29uZmlnLmMKLQotIiQoSU5URElSKVxhZ2VudHhfY29uZmlnLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxjbGllbnQuYwotCi0iJChJTlRESVIpXGNsaWVudC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcbWFzdGVyLmMKLQotIiQoSU5URElSKVxtYXN0ZXIub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XG1hc3Rlcl9hZG1pbi5jCi0KLSIkKElOVERJUilcbWFzdGVyX2FkbWluLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxwcm90b2NvbC5jCi0KLSIkKElOVERJUilccHJvdG9jb2wub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XHN1YmFnZW50LmMKLQotIiQoSU5URElSKVxzdWJhZ2VudC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxleHRlbmQuYwotCi0iJChJTlRESVIpXGV4dGVuZC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc0NhY2hlLmMKLQotIiQoSU5URElSKVxuc0NhY2hlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zRGVidWcuYwotCi0iJChJTlRESVIpXG5zRGVidWcub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNMb2dnaW5nLmMKLQotIiQoSU5URElSKVxuc0xvZ2dpbmcub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNNb2R1bGVUYWJsZS5jCi0KLSIkKElOVERJUilcbnNNb2R1bGVUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc1RyYW5zYWN0aW9uVGFibGUuYwotCi0iJChJTlRESVIpXG5zVHJhbnNhY3Rpb25UYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcZXhlY3V0ZS5jCi0KLSIkKElOVERJUilcZXhlY3V0ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsaXRpZXNcaXF1ZXJ5LmMKLQotIiQoSU5URElSKVxpcXVlcnkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXG92ZXJyaWRlLmMKLQotIiQoSU5URElSKVxvdmVycmlkZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxhdC5jCi0KLSIkKElOVERJUilcYXQub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaWNtcC5jCi0KLSIkKElOVERJUilcaWNtcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpbnRlcmZhY2VzLmMKLQotIiQoSU5URElSKVxpbnRlcmZhY2VzLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwLmMKLQotIiQoSU5URElSKVxpcC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpcEFkZHIuYwotCi0iJChJTlRESVIpXGlwQWRkci5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxyb3V0ZV93cml0ZS5jCi0KLSIkKElOVERJUilccm91dGVfd3JpdGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwLmMKLQotIiQoSU5URElSKVx0Y3Aub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdGNwVGFibGUuYwotCi0iJChJTlRESVIpXHRjcFRhYmxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcC5jCi0KLSIkKElOVERJUilcdWRwLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcFRhYmxlLmMKLQotIiQoSU5URElSKVx1ZHBUYWJsZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YXJfcm91dGUuYwotCi0iJChJTlRESVIpXHZhcl9yb3V0ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZGxtb2QuYyIKLQotIiQoSU5URElSKVxkbG1vZC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZXJyb3JtaWIuYyIKLQotIiQoSU5URElSKVxlcnJvcm1pYi5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZXh0ZW5zaWJsZS5jIgotCi0iJChJTlRESVIpXGV4dGVuc2libGUub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGZpbGUuYyIKLQotIiQoSU5URElSKVxmaWxlLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxsb2FkYXZlLmMiCi0KLSIkKElOVERJUilcbG9hZGF2ZS5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccGFzcy5jIgotCi0iJChJTlRESVIpXHBhc3Mub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHBhc3NfcGVyc2lzdC5jIgotCi0iJChJTlRESVIpXHBhc3NfcGVyc2lzdC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBccHJvYy5jIgotCi0iJChJTlRESVIpXHByb2Mub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHByb3h5LmMiCi0KLSIkKElOVERJUilccHJveHkub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHZlcnNpb25pbmZvLmMiCi0KLSIkKElOVERJUilcdmVyc2lvbmluZm8ub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcaGVhZGVyX2NvbXBsZXguYwotCi0iJChJTlRESVIpXGhlYWRlcl9jb21wbGV4Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotU09VUkNFPS4uXC4uXGFnZW50XG1pYl9tb2R1bGVzLmMKLQotIiQoSU5URElSKVxtaWJfbW9kdWxlcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbXV4XHNtdXguYwotCi0iJChJTlRESVIpXHNtdXgub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0jU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHdpbkV4dERMTC5jCQkjIHVuY29tbWVudCBmb3Igd2luRXh0RExMCi0KLSMiJChJTlRESVIpXHdpbkV4dERMTC5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLSMJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQkJCSMgdW5jb21tZW50IGZvciB3aW5FeHRETEwKLQotCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbF9mdW5jcy5jCi0KLSIkKElOVERJUilcdXRpbF9mdW5jcy5vYmoiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotCmRpZmYgLS1naXQgYS93aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3AgYi93aW4zMi9uZXRzbm1wbWlic3Nkay9uZXRzbm1wbWlic3Nkay5kc3AKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkxZDVjY2MuLjAwMDAwMDAKLS0tIGEvd2luMzIvbmV0c25tcG1pYnNzZGsvbmV0c25tcG1pYnNzZGsuZHNwCisrKyAvZGV2L251bGwKQEAgLTEsNDIwICswLDAgQEAKLSMgTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gUHJvamVjdCBGaWxlIC0gTmFtZT0ibmV0c25tcG1pYnNzZGsiIC0gUGFja2FnZSBPd25lcj08ND4NCi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIEdlbmVyYXRlZCBCdWlsZCBGaWxlLCBGb3JtYXQgVmVyc2lvbiA2LjAwDQotIyAqKiBETyBOT1QgRURJVCAqKg0KLQ0KLSMgVEFSR1RZUEUgIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IiAweDAxMDQNCi0NCi1DRkc9bmV0c25tcG1pYnNzZGsgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAibmV0c25tcG1pYnNzZGsubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgIm5ldHNubXBtaWJzc2RrLm1hayIgQ0ZHPSJuZXRzbm1wbWlic3NkayAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJuZXRzbm1wbWlic3NkayAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgU3RhdGljIExpYnJhcnkiKQ0KLSFNRVNTQUdFICJuZXRzbm1wbWlic3NkayAtIFdpbjMyIERlYnVnIiAoYmFzZWQgb24gIldpbjMyICh4ODYpIFN0YXRpYyBMaWJyYXJ5IikNCi0hTUVTU0FHRSANCi0NCi0jIEJlZ2luIFByb2plY3QNCi0jIFBST1AgQWxsb3dQZXJDb25maWdEZXBlbmRlbmNpZXMgMA0KLSMgUFJPUCBTY2NfUHJvak5hbWUgIiINCi0jIFBST1AgU2NjX0xvY2FsUGF0aCAiIg0KLUNQUD1jbC5leGUNCi1SU0M9cmMuZXhlDQotDQotIUlGICAiJChDRkcpIiA9PSAibmV0c25tcG1pYnNzZGsgLSBXaW4zMiBSZWxlYXNlIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMA0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiUmVsZWFzZSINCi0jIFBST1AgQkFTRSBUYXJnZXRfRGlyICIiDQotIyBQUk9QIFVzZV9NRkMgMA0KLSMgUFJPUCBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgT3V0cHV0X0RpciAiLi4vbGliL3JlbGVhc2UiDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIFRhcmdldF9EaXIgIiINCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRCAvVzMgL0dYIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkNCi0jIEFERCBSU0MgL2wgMHg0MDkNCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgaXBobHBhcGkubGliIG1nbXRhcGkubGliIHNubXBhcGkubGliIC9ub2xvZ28gL291dDoiLi4vbGliL3JlbGVhc2UvbmV0c25tcG1pYnMubGliIg0KLQ0KLSFFTFNFSUYgICIkKENGRykiID09ICJuZXRzbm1wbWlic3NkayAtIFdpbjMyIERlYnVnIg0KLQ0KLSMgUFJPUCBCQVNFIFVzZV9NRkMgMA0KLSMgUFJPUCBCQVNFIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBCQVNFIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBCQVNFIFRhcmdldF9EaXIgIiINCi0jIFBST1AgVXNlX01GQyAwDQotIyBQUk9QIFVzZV9EZWJ1Z19MaWJyYXJpZXMgMQ0KLSMgUFJPUCBPdXRwdXRfRGlyICIuLi9saWIvZGVidWciDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIkRlYnVnIg0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvWVggL0ZEIC9jDQotIyBBREQgQkFTRSBSU0MgL2wgMHg0MDkNCi0jIEFERCBSU0MgL2wgMHg0MDkNCi1CU0MzMj1ic2NtYWtlLmV4ZQ0KLSMgQUREIEJBU0UgQlNDMzIgL25vbG9nbw0KLSMgQUREIEJTQzMyIC9ub2xvZ28NCi1MSUIzMj1saW5rLmV4ZSAtbGliDQotIyBBREQgQkFTRSBMSUIzMiAvbm9sb2dvDQotIyBBREQgTElCMzIgaXBobHBhcGkubGliIG1nbXRhcGkubGliIHNubXBhcGkubGliIC9ub2xvZ28gL291dDoiLi4vbGliL2RlYnVnL25ldHNubXBtaWJzLmxpYiINCi0NCi0hRU5ESUYgDQotDQotIyBCZWdpbiBUYXJnZXQNCi0NCi0jIE5hbWUgIm5ldHNubXBtaWJzc2RrIC0gV2luMzIgUmVsZWFzZSINCi0jIE5hbWUgIm5ldHNubXBtaWJzc2RrIC0gV2luMzIgRGVidWciDQotIyBCZWdpbiBHcm91cCAibWliSUkiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxzZXRTZXJpYWxOby5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHNubXBfbWliLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcc3lzT1JUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHN5c3RlbV9taWIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbnRleHQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX2NvbmYuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx2YWNtX3ZhcnMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJkaXNtYW4iDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlRXZlbnROb3RpZmljYXRpb25UYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVFdmVudFRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZU9iamVjdHNUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyQm9vbGVhblRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJEZWx0YVRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZGlzbWFuXG10ZVRyaWdnZXJFeGlzdGVuY2VUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGRpc21hblxtdGVUcmlnZ2VyVGFibGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxkaXNtYW5cbXRlVHJpZ2dlclRocmVzaG9sZFRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAiZXhhbXBsZXMiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxleGFtcGxlc1xleGFtcGxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcZXhhbXBsZXNcdWNkRGVtb1B1YmxpYy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgInNubXB2MyINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1xzbm1wRW5naW5lLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHNubXBNUERTdGF0cy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXB2M1x1c21Db25mLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHVzbVN0YXRzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcHYzXHVzbVVzZXIuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJub3RpZmljYXRpb24iDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb25cc25tcE5vdGlmeUZpbHRlclByb2ZpbGVUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG5vdGlmaWNhdGlvbi1sb2ctbWliXG5vdGlmaWNhdGlvbl9sb2cuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxzbm1wLW5vdGlmaWNhdGlvbi1taWJcc25tcE5vdGlmeUZpbHRlclRhYmxlXHNubXBOb3RpZnlGaWx0ZXJUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHNubXAtbm90aWZpY2F0aW9uLW1pYlxzbm1wTm90aWZ5RmlsdGVyVGFibGVcc25tcE5vdGlmeUZpbHRlclRhYmxlX2RhdGFfYWNjZXNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc25tcC1ub3RpZmljYXRpb24tbWliXHNubXBOb3RpZnlGaWx0ZXJUYWJsZVxzbm1wTm90aWZ5RmlsdGVyVGFibGVfaW50ZXJmYWNlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbm90aWZpY2F0aW9uXHNubXBOb3RpZnlUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgInRhcmdldCINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFxzbm1wVGFyZ2V0QWRkckVudHJ5LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdGFyZ2V0XHNubXBUYXJnZXRQYXJhbXNFbnRyeS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHRhcmdldFx0YXJnZXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx0YXJnZXRcdGFyZ2V0X2NvdW50ZXJzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAiYWdlbnR4Ig0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XGFnZW50eF9jb25maWcuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcY2xpZW50LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnR4XG1hc3Rlci5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50eFxtYXN0ZXJfYWRtaW4uYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhccHJvdG9jb2wuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudHhcc3ViYWdlbnQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIEdyb3VwICJhZ2VudCINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XGV4dGVuZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zQ2FjaGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxhZ2VudFxuc0RlYnVnLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNMb2dnaW5nLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcYWdlbnRcbnNNb2R1bGVUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGFnZW50XG5zVHJhbnNhY3Rpb25UYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgInV0aWxpdGllcyINCi0NCi0jIFBST1AgRGVmYXVsdF9GaWx0ZXIgIiINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xleGVjdXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcdXRpbGl0aWVzXGlxdWVyeS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXHV0aWxpdGllc1xvdmVycmlkZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEVuZCBHcm91cA0KLSMgQmVnaW4gR3JvdXAgIm1pYklJc2RrIg0KLQ0KLSMgUFJPUCBEZWZhdWx0X0ZpbHRlciAiIg0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcYXQuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVxpY21wLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaW50ZXJmYWNlcy5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXGlwLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcaXBBZGRyLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlccm91dGVfd3JpdGUuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3AuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxtaWJJSVx0Y3BUYWJsZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXG1pYklJXHVkcFRhYmxlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcbWliSUlcdmFyX3JvdXRlLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIEdyb3VwDQotIyBCZWdpbiBHcm91cCAidWNkLXNubXAiDQotDQotIyBQUk9QIERlZmF1bHRfRmlsdGVyICIiDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0iLi5cLi5cYWdlbnRcbWliZ3JvdXBcdWNkLXNubXBcZGxtb2QuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXGVycm9ybWliLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxleHRlbnNpYmxlLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxmaWxlLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxsb2FkYXZlLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwYXNzLmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFxwYXNzX3BlcnNpc3QuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHByb2MuYyINCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Ii4uXC4uXGFnZW50XG1pYmdyb3VwXHVjZC1zbm1wXHByb3h5LmMiDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPSIuLlwuLlxhZ2VudFxtaWJncm91cFx1Y2Qtc25tcFx2ZXJzaW9uaW5mby5jIg0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgR3JvdXANCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XG1pYmdyb3VwXGhlYWRlcl9jb21wbGV4LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliX21vZHVsZXMuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFx1dGlsX2Z1bmNzLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcc211eFxzbXV4LmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgQmVnaW4gU291cmNlIEZpbGUNCi0NCi1TT1VSQ0U9Li5cLi5cYWdlbnRcbWliZ3JvdXBcd2luRXh0RExMLmMNCi0jIEVuZCBTb3VyY2UgRmlsZQ0KLSMgRW5kIFRhcmdldA0KLSMgRW5kIFByb2plY3QNCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AgYi93aW4zMi9zbm1wYnVsa2dldC9zbm1wYnVsa2dldC5kc3AKaW5kZXggZmU1ZTVhZS4uMzk1OTlkYiAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGJ1bGtnZXQvc25tcGJ1bGtnZXQuZHNwCisrKyBiL3dpbjMyL3NubXBidWxrZ2V0L3NubXBidWxrZ2V0LmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBidWxrZ2V0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wYnVsa2dldC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGJ1bGtnZXQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wYnVsa2dldC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wYnVsa2dldC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGJ1bGt3YWxrL3NubXBidWxrd2Fsay5kc3AgYi93aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcAppbmRleCBlYThiYjBjLi45MWU5NGQzIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcAorKysgYi93aW4zMi9zbm1wYnVsa3dhbGsvc25tcGJ1bGt3YWxrLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBidWxrd2Fsay5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGJ1bGt3YWxrLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wYnVsa3dhbGsgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wYnVsa3dhbGsuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGJ1bGt3YWxrLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZC9NYWtlZmlsZS5pbiBiL3dpbjMyL3NubXBkL01ha2VmaWxlLmluCmluZGV4IDQxYWM1NWUuLjFiMWIzYWMgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBkL01ha2VmaWxlLmluCisrKyBiL3dpbjMyL3NubXBkL01ha2VmaWxlLmluCkBAIC0yLDcgKzIsNyBAQAogQ0ZHPQogT1VURElSPQogSU5URElSPQotU1NMPQorU0RLPQogTElOS1RZUEU9CiAKICMgU2V0IHRvIDEgdG8gYWxsb3cgdGhlIGJ1aWxkaW5nIHVzaW5nIHRoZSBETEwgdmVyc2lvbiBvZiBTTk1QTElCLgpAQCAtMTQsMjEgKzE0LDkgQEAKIE5VTEw9bnVsCiAhRU5ESUYgCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KIEFMTCA6ICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIgIiQoSU5URElSKSIKIAogCi1DTEVBTiA6Ci0JLUBlcmFzZSAiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXJuZWwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8uaWRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0JLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKLQktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIKLQogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCiAKQEAgLTM2LDk5ICsyNCwxNCBAQAogICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCiAKIENQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRnAiJChJTlRESVIpXHNubXBkLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLSFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgotQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKLSFFTkRJRgotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKKyFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCitDUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0VIc2MgL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiBSU0NfUFJPSj0vbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvZCAiTkRFQlVHIiAKLUJTQzMyPWJzY21ha2UuZXhlCi1CU0MzMl9GTEFHUz0vbm9sb2dvIC9vIiQoSU5URElSKVxzbm1wZC5ic2MiIAotQlNDMzJfU0JSUz0gXAotCi1MSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxrZXJuZWwub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wZC5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQotIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIiA6ICIuLlxiaW5cJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotIUlGICIkKExJTktUWVBFKSIgPT0gInN0YXRpYyIgfHwgIiQoQUxMT1dfRExMKSIgPT0gIjEiCi0gICAgJChMSU5LMzIpIEA8PAotICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKLTw8Ci0hRUxTRQkjIExpbmt0eXBlIGNoZWNrCi0JLUBlY2hvIC4KLQktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKLQktQGVjaG8gLgorIUVMU0UKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitSU0NfUFJPSj0vbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvZCAiX0RFQlVHIiAKICFFTkRJRgogCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLUFMTCA6ICIuLlxiaW5cJChPVVRESVIpXHNubXBkLmV4ZSIgIiQoSU5URElSKVxzbm1wZC5ic2MiICIkKElOVERJUikiCi0KLQotQ0xFQU4gOgotCS1AZXJhc2UgIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcYXV0b19ubGlzdC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtlcm5lbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtlcm5lbC5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5wZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5zYnIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLmJzYyIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giCi0JLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiCi0KLSIuLlxiaW5cJChPVVRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgotCi0iJChJTlRESVIpIiA6Ci0gICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKLQotQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudCIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRnAiJChJTlRESVIpXHNubXBkLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKICFFTkRJRgpAQCAtMTQ4LDM4ICs1MSwxNCBAQAogICAgJChDUFBfUFJPSikgJDwgCiA8PAogCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQogUlNDPXJjLmV4ZQotUlNDX1BST0o9L2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2QgIl9ERUJVRyIgCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcc25tcGQuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQkiJChJTlRESVIpXGF1dG9fbmxpc3Quc2JyIiBcCi0JIiQoSU5URElSKVxrZXJuZWwuc2JyIiBcCi0JIiQoSU5URElSKVxzbm1wZC5zYnIiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2Uuc2JyIgotCi0iJChJTlRESVIpXHNubXBkLmJzYyIgOiAiLi5cYmluXCQoT1VURElSKSIgJChCU0MzMl9TQlJTKQotICAgICQoQlNDMzIpIEA8PAotICAkKEJTQzMyX0ZMQUdTKSAkKEJTQzMyX1NCUlMpCi08PAotCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpL3NubXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvb3V0OiIuLlxiaW5cJChPVVRESVIpL3NubXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi8kKE9VVERJUikiCishSUYgICIkKENGRykiID09ICJyZWxlYXNlIgorTElOSzMyX0ZMQUdTPSQoTElOSzMyX0ZMQUdTKSAvZGVidWcgL3BkYjoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5wZGIiCishRUxTRQorTElOSzMyX0ZMQUdTPSQoTElOSzMyX0ZMQUdTKSAvZGVidWcgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvc25tcGQucGRiIiAvcGRidHlwZTpzZXB0CishRU5ESUYKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIgXAogCSIkKElOVERJUilca2VybmVsLm9iaiIgXApAQCAtMTg3LDIxICs2NiwyNCBAQAogCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgogCitDTEVBTiA6CisJLUBmb3IgJWYgaW4gKCQoTElOSzMyX09CSlMpKSBkbyBlcmFzZSAlJWYKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIiA6ICIuLlxiaW5cJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQogIUlGICIkKExJTktUWVBFKSIgPT0gInN0YXRpYyIgfHwgIiQoQUxMT1dfRExMKSIgPT0gIjEiCiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKIAktQGVjaG8gLgogIUVORElGCiAKLSFFTkRJRiAKLQotCiAhSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgogIUlGIEVYSVNUUygic25tcGQuZGVwIikKICFJTkNMVURFICJzbm1wZC5kZXAiCkBAIC0yMTEsOTcgKzkzLDMxIEBACiAhRU5ESUYgCiAKIAotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCiBTT1VSQ0U9Li5cLi5cYWdlbnRcYXV0b19ubGlzdC5jCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQogIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiCSIkKElOVERJUilcYXV0b19ubGlzdC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQogU09VUkNFPS4uXC4uXGFnZW50XGtlcm5lbC5jCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQogIiQoSU5URElSKVxrZXJuZWwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxrZXJuZWwub2JqIgkiJChJTlRESVIpXGtlcm5lbC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQogU09VUkNFPS4uXC4uXGFnZW50XHNubXBkLmMKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCiAiJChJTlRESVIpXHNubXBkLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKIAkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCiAKIAotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcc25tcGQub2JqIgkiJChJTlRESVIpXHNubXBkLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLmMKIAotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCiAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgogCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKIAogCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIJIiQoSU5URElSKVx3aW5zZXJ2aWNlLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCiBTT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLnJjCiAKLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQogIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKFJTQykgL2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2kgIi4uXC4uXHNubXBsaWIiIC9kICJOREVCVUciICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoUlNDKSAvbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvaSAiLi5cLi5cc25tcGxpYiIgL2QgIl9ERUJVRyIgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi0KLSFFTkRJRiAKLQorCSQoUlNDKSAkKFJTQ19QUk9KKSAvaSAiLi5cLi5cc25tcGxpYiIgJChTT1VSQ0UpCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZC9zbm1wZC5kc3AgYi93aW4zMi9zbm1wZC9zbm1wZC5kc3AKaW5kZXggNDI2OWFhNC4uNDVlMmNhZCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGQvc25tcGQuZHNwCisrKyBiL3dpbjMyL3NubXBkL3NubXBkLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBkIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wZGVsdGEvc25tcGRlbHRhLmRzcCBiL3dpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwCmluZGV4IGIxN2I4MjIuLjdmNWE1ZDMgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwCisrKyBiL3dpbjMyL3NubXBkZWx0YS9zbm1wZGVsdGEuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGRlbHRhLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZGVsdGEuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBkZWx0YSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkZWx0YS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZGVsdGEuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBkZi9zbm1wZGYuZHNwIGIvd2luMzIvc25tcGRmL3NubXBkZi5kc3AKaW5kZXggODhjM2Y2ZC4uZTJlNGI5NCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcGRmL3NubXBkZi5kc3AKKysrIGIvd2luMzIvc25tcGRmL3NubXBkZi5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wZGYuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBkZi5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcGRmIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcGRmLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkZi5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGRzZGsvTWFrZWZpbGUuaW4gYi93aW4zMi9zbm1wZHNkay9NYWtlZmlsZS5pbgpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNmI4ZGU0My4uMDAwMDAwMAotLS0gYS93aW4zMi9zbm1wZHNkay9NYWtlZmlsZS5pbgorKysgL2Rldi9udWxsCkBAIC0xLDMwNiArMCwwIEBACi1QUk9HTkFNRT0KLUNGRz0KLU9VVERJUj0KLUlOVERJUj0KLVNTTD0KLUxJTktUWVBFPQotCi0jIFNldCB0byAxIHRvIGFsbG93IHRoZSBidWlsZGluZyB1c2luZyB0aGUgRExMIHZlcnNpb24gb2YgU05NUExJQi4KLUFMTE9XX0RMTD0xCi0KLSFJRiAiJChPUykiID09ICJXaW5kb3dzX05UIgotTlVMTD0KLSFFTFNFIAotTlVMTD1udWwKLSFFTkRJRiAKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotQUxMIDogIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIiAiJChJTlRESVIpIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGtlcm5lbC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQucGNoIgotCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIgotCi0iLi5cYmluXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvR1ggL1ppIC9PMiAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9GcCIkKElOVERJUilcc25tcGQucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKLQotIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCi1DUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgotIUVORElGCi0KLS5jeyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmNwcHskKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jeHh7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3skKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotUlNDPXJjLmV4ZQotUlNDX1BST0o9L2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2QgIk5ERUJVRyIgCi1CU0MzMj1ic2NtYWtlLmV4ZQotQlNDMzJfRkxBR1M9L25vbG9nbyAvbyIkKElOVERJUilcc25tcGQuYnNjIiAKLUJTQzMyX1NCUlM9IFwKLQotTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGlwaGxwYXBpLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpL3NubXBkLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCi1MSU5LMzJfT0JKUz0gXAotCSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiIFwKLQkiJChJTlRESVIpXGtlcm5lbC5vYmoiIFwKLQkiJChJTlRESVIpXHNubXBkLm9iaiIgXAotCSIkKElOVERJUilcd2luc2VydmljZS5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIgotCi0iLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiIDogIi4uXGJpblwkKE9VVERJUikiICQoREVGX0ZJTEUpICQoTElOSzMyX09CSlMpCi0hSUYgIiQoTElOS1RZUEUpIiA9PSAic3RhdGljIiB8fCAiJChBTExPV19ETEwpIiA9PSAiMSIKLSAgICAkKExJTkszMikgQDw8Ci0gICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQotPDwKLSFFTFNFCSMgTGlua3R5cGUgY2hlY2sKLQktQGVjaG8gLgotCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwotCS1AZWNobyAuCi0hRU5ESUYKLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi1BTEwgOiAiLi5cYmluXCQoT1VURElSKVxzbm1wZC5leGUiICIkKElOVERJUilcc25tcGQuYnNjIiAiJChJTlRESVIpIgotCi0KLUNMRUFOIDoKLQktQGVyYXNlICIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXGF1dG9fbmxpc3Quc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXJuZWwub2JqIgotCS1AZXJhc2UgIiQoSU5URElSKVxrZXJuZWwuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5vYmoiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLnNiciIKLQktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCi0JLUBlcmFzZSAiJChJTlRESVIpXHZjPz8ucGRiIgotCS1AZXJhc2UgIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIKLQktQGVyYXNlICIkKElOVERJUilcd2luc2VydmljZS5yZXMiCi0JLUBlcmFzZSAiJChJTlRESVIpXHdpbnNlcnZpY2Uuc2JyIgotCS1AZXJhc2UgIiQoSU5URElSKVxzbm1wZC5ic2MiCi0JLUBlcmFzZSAiJChJTlRESVIpXHNubXBkLnBkYiIKLQktQGVyYXNlICIkKElOVERJUilcc25tcGQucGNoIgotCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIgotCi0iLi5cYmluXCQoT1VURElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKLQotIiQoSU5URElSKSIgOgotICAgIGlmIG5vdCBleGlzdCAiJChJTlRESVIpLyQoTlVMTCkiIG1rZGlyICIkKElOVERJUikiCi0KLUNQUD1jbC5leGUKLUNQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9HWCAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9EICJIQVZFX1dJTjMyX1BMQVRGT1JNX1NESyIgL0ZSIiQoSU5URElSKVxcIiAvRnAiJChJTlRESVIpXHNubXBkLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCi0KLSFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgotQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKLSFFTkRJRgotCi0uY3skKElOVERJUil9Lm9iajo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLS5jcHB7JChJTlRESVIpfS5vYmo6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3h4eyQoSU5URElSKX0ub2JqOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN7JChJTlRESVIpfS5zYnI6OgotICAgJChDUFApIEA8PAotICAgJChDUFBfUFJPSikgJDwgCi08PAotCi0uY3BweyQoSU5URElSKX0uc2JyOjoKLSAgICQoQ1BQKSBAPDwKLSAgICQoQ1BQX1BST0opICQ8IAotPDwKLQotLmN4eHskKElOVERJUil9LnNicjo6Ci0gICAkKENQUCkgQDw8Ci0gICAkKENQUF9QUk9KKSAkPCAKLTw8Ci0KLVJTQz1yYy5leGUKLVJTQ19QUk9KPS9sIDB4NDA5IC9mbyIkKElOVERJUilcd2luc2VydmljZS5yZXMiIC9kICJfREVCVUciIAotQlNDMzI9YnNjbWFrZS5leGUKLUJTQzMyX0ZMQUdTPS9ub2xvZ28gL28iJChJTlRESVIpXHNubXBkLmJzYyIgCi1CU0MzMl9TQlJTPSBcCi0JIiQoSU5URElSKVxhdXRvX25saXN0LnNiciIgXAotCSIkKElOVERJUilca2VybmVsLnNiciIgXAotCSIkKElOVERJUilcc25tcGQuc2JyIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLnNiciIKLQotIiQoSU5URElSKVxzbm1wZC5ic2MiIDogIi4uXGJpblwkKE9VVERJUikiICQoQlNDMzJfU0JSUykKLSAgICAkKEJTQzMyKSBAPDwKLSAgJChCU0MzMl9GTEFHUykgJChCU0MzMl9TQlJTKQotPDwKLQotTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGlwaGxwYXBpLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS9zbm1wZC5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2JpblwkKE9VVERJUikvc25tcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAotTElOSzMyX09CSlM9IFwKLQkiJChJTlRESVIpXGF1dG9fbmxpc3Qub2JqIiBcCi0JIiQoSU5URElSKVxrZXJuZWwub2JqIiBcCi0JIiQoSU5URElSKVxzbm1wZC5vYmoiIFwKLQkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiBcCi0JIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIKLQotIi4uXGJpblwkKE9VVERJUilcc25tcGQuZXhlIiA6ICIuLlxiaW5cJChPVVRESVIpIiAkKERFRl9GSUxFKSAkKExJTkszMl9PQkpTKQotIUlGICIkKExJTktUWVBFKSIgPT0gInN0YXRpYyIgfHwgIiQoQUxMT1dfRExMKSIgPT0gIjEiCi0gICAgJChMSU5LMzIpIEA8PAotICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKLTw8Ci0hRUxTRQkjIExpbmt0eXBlIGNoZWNrCi0JLUBlY2hvIC4KLQktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKLQktQGVjaG8gLgotIUVORElGCi0KLSFFTkRJRiAKLQotCi0hSUYgIiQoTk9fRVhURVJOQUxfREVQUykiICE9ICIxIgotIUlGIEVYSVNUUygic25tcGQuZGVwIikKLSFJTkNMVURFICJzbm1wZC5kZXAiCi0hRUxTRSAKLSFNRVNTQUdFIFdhcm5pbmc6IGNhbm5vdCBmaW5kICJzbm1wZC5kZXAiCi0hRU5ESUYgCi0hRU5ESUYgCi0KLQotIUlGICIkKENGRykiID09ICJyZWxlYXNlIiB8fCAiJChDRkcpIiA9PSAiZGVidWciCi1TT1VSQ0U9Li5cLi5cYWdlbnRcYXV0b19ubGlzdC5jCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxhdXRvX25saXN0Lm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcYXV0b19ubGlzdC5vYmoiCSIkKElOVERJUilcYXV0b19ubGlzdC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotU09VUkNFPS4uXC4uXGFnZW50XGtlcm5lbC5jCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQotIiQoSU5URElSKVxrZXJuZWwub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxrZXJuZWwub2JqIgkiJChJTlRESVIpXGtlcm5lbC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCi0JJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQotCi0KLSFFTkRJRiAKLQotU09VUkNFPS4uXC4uXGFnZW50XHNubXBkLmMKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCi0iJChJTlRESVIpXHNubXBkLm9iaiIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gImRlYnVnIgotCi0KLSIkKElOVERJUilcc25tcGQub2JqIgkiJChJTlRESVIpXHNubXBkLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLmMKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCi0iJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIJIiQoSU5URElSKVx3aW5zZXJ2aWNlLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi1TT1VSQ0U9Li5cLi5cc25tcGxpYlx3aW5zZXJ2aWNlLnJjCi0KLSFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCi0KLQotIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKFJTQykgL2wgMHg0MDkgL2ZvIiQoSU5URElSKVx3aW5zZXJ2aWNlLnJlcyIgL2kgIi4uXC4uXHNubXBsaWIiIC9kICJOREVCVUciICQoU09VUkNFKQotCi0KLSFFTFNFSUYgICIkKENGRykiID09ICJkZWJ1ZyIKLQotCi0iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoUlNDKSAvbCAweDQwOSAvZm8iJChJTlRESVIpXHdpbnNlcnZpY2UucmVzIiAvaSAiLi5cLi5cc25tcGxpYiIgL2QgIl9ERUJVRyIgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCi0KLSFFTkRJRiAKLQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcGRzZGsvc25tcGQuZHNwIGIvd2luMzIvc25tcGRzZGsvc25tcGQuZHNwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ODJhZDIyLi4wMDAwMDAwCi0tLSBhL3dpbjMyL3NubXBkc2RrL3NubXBkLmRzcAorKysgL2Rldi9udWxsCkBAIC0xLDEwNiArMCwwIEBACi0jIE1pY3Jvc29mdCBEZXZlbG9wZXIgU3R1ZGlvIFByb2plY3QgRmlsZSAtIE5hbWU9InNubXBkc2RrIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotIyBNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBHZW5lcmF0ZWQgQnVpbGQgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KLSMgKiogRE8gTk9UIEVESVQgKioNCi0NCi0jIFRBUkdUWVBFICJXaW4zMiAoeDg2KSBDb25zb2xlIEFwcGxpY2F0aW9uIiAweDAxMDMNCi0NCi1DRkc9c25tcGRzZGsgLSBXaW4zMiBEZWJ1Zw0KLSFNRVNTQUdFIFRoaXMgaXMgbm90IGEgdmFsaWQgbWFrZWZpbGUuIFRvIGJ1aWxkIHRoaXMgcHJvamVjdCB1c2luZyBOTUFLRSwNCi0hTUVTU0FHRSB1c2UgdGhlIEV4cG9ydCBNYWtlZmlsZSBjb21tYW5kIGFuZCBydW4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBOTUFLRSAvZiAic25tcGQubWFrIi4NCi0hTUVTU0FHRSANCi0hTUVTU0FHRSBZb3UgY2FuIHNwZWNpZnkgYSBjb25maWd1cmF0aW9uIHdoZW4gcnVubmluZyBOTUFLRQ0KLSFNRVNTQUdFIGJ5IGRlZmluaW5nIHRoZSBtYWNybyBDRkcgb24gdGhlIGNvbW1hbmQgbGluZS4gRm9yIGV4YW1wbGU6DQotIU1FU1NBR0UgDQotIU1FU1NBR0UgTk1BS0UgL2YgInNubXBkLm1hayIgQ0ZHPSJzbm1wZHNkayAtIFdpbjMyIERlYnVnIg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFIFBvc3NpYmxlIGNob2ljZXMgZm9yIGNvbmZpZ3VyYXRpb24gYXJlOg0KLSFNRVNTQUdFIA0KLSFNRVNTQUdFICJzbm1wZHNkayAtIFdpbjMyIFJlbGVhc2UiIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgInNubXBkc2RrIC0gV2luMzIgRGVidWciIChiYXNlZCBvbiAiV2luMzIgKHg4NikgQ29uc29sZSBBcHBsaWNhdGlvbiIpDQotIU1FU1NBR0UgDQotDQotIyBCZWdpbiBQcm9qZWN0DQotIyBQUk9QIEFsbG93UGVyQ29uZmlnRGVwZW5kZW5jaWVzIDANCi0jIFBST1AgU2NjX1Byb2pOYW1lICIiDQotIyBQUk9QIFNjY19Mb2NhbFBhdGggIiINCi1DUFA9Y2wuZXhlDQotUlNDPXJjLmV4ZQ0KLQ0KLSFJRiAgIiQoQ0ZHKSIgPT0gInNubXBkc2RrIC0gV2luMzIgUmVsZWFzZSINCi0NCi0jIFBST1AgQkFTRSBVc2VfTUZDIDANCi0jIFBST1AgQkFTRSBVc2VfRGVidWdfTGlicmFyaWVzIDANCi0jIFBST1AgQkFTRSBPdXRwdXRfRGlyICJSZWxlYXNlIg0KLSMgUFJPUCBCQVNFIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAwDQotIyBQUk9QIE91dHB1dF9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIEludGVybWVkaWF0ZV9EaXIgIlJlbGVhc2UiDQotIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDANCi0jIFBST1AgVGFyZ2V0X0RpciAiIg0KLSMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jDQotIyBBREQgQ1BQIC9ub2xvZ28gL01EIC9XMyAvR1ggL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnQiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIgL0QgIl9DUlRfTk9OU1REQ19OT19XQVJOSU5HUyIgL0QgIl9NQkNTIiAvRCAiSEFWRV9XSU4zMl9QTEFURk9STV9TREsiIC9ZWCAvRkQgL2MNCi0jIEFERCBCQVNFIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLSMgQUREIFJTQyAvbCAweDQwOSAvZCAiTkRFQlVHIg0KLUJTQzMyPWJzY21ha2UuZXhlDQotIyBBREQgQkFTRSBCU0MzMiAvbm9sb2dvDQotIyBBREQgQlNDMzIgL25vbG9nbw0KLUxJTkszMj1saW5rLmV4ZQ0KLSMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXBoZWxwZXJzLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBpcGhscGFwaS5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQotDQotIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBkc2RrIC0gV2luMzIgRGVidWciDQotDQotIyBQUk9QIEJBU0UgVXNlX01GQyAwDQotIyBQUk9QIEJBU0UgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIEJBU0UgT3V0cHV0X0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgSW50ZXJtZWRpYXRlX0RpciAiRGVidWciDQotIyBQUk9QIEJBU0UgVGFyZ2V0X0RpciAiIg0KLSMgUFJPUCBVc2VfTUZDIDANCi0jIFBST1AgVXNlX0RlYnVnX0xpYnJhcmllcyAxDQotIyBQUk9QIE91dHB1dF9EaXIgIkRlYnVnIg0KLSMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyINCi0jIFBST1AgSWdub3JlX0V4cG9ydF9MaWIgMA0KLSMgUFJPUCBUYXJnZXRfRGlyICIiDQotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL1lYIC9GRCAvYw0KLSMgQUREIENQUCAvbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50IiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX0NSVF9TRUNVUkVfTk9fV0FSTklOR1MiIC9EICJfQ1JUX05PTlNURENfTk9fV0FSTklOR1MiIC9EICJfTUJDUyIgL0QgIkhBVkVfV0lOMzJfUExBVEZPUk1fU0RLIiAvRlIgL1lYIC9GRCAvYw0KLSMgQUREIEJBU0UgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotIyBBREQgUlNDIC9sIDB4NDA5IC9kICJfREVCVUciDQotQlNDMzI9YnNjbWFrZS5leGUNCi0jIEFERCBCQVNFIEJTQzMyIC9ub2xvZ28NCi0jIEFERCBCU0MzMiAvbm9sb2dvDQotTElOSzMyPWxpbmsuZXhlDQotIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGlwaGxwYXBpLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBkLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KLQ0KLSFFTkRJRiANCi0NCi0jIEJlZ2luIFRhcmdldA0KLQ0KLSMgTmFtZSAic25tcGRzZGsgLSBXaW4zMiBSZWxlYXNlIg0KLSMgTmFtZSAic25tcGRzZGsgLSBXaW4zMiBEZWJ1ZyINCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXGFnZW50XGF1dG9fbmxpc3QuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxrZXJuZWwuYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBCZWdpbiBTb3VyY2UgRmlsZQ0KLQ0KLVNPVVJDRT0uLlwuLlxhZ2VudFxzbm1wZC5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5jDQotIyBFbmQgU291cmNlIEZpbGUNCi0jIEJlZ2luIFNvdXJjZSBGaWxlDQotDQotU09VUkNFPS4uXC4uXHNubXBsaWJcd2luc2VydmljZS5yYw0KLSMgRW5kIFNvdXJjZSBGaWxlDQotIyBFbmQgVGFyZ2V0DQotIyBFbmQgUHJvamVjdA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBnZXQvc25tcGdldC5kc3AgYi93aW4zMi9zbm1wZ2V0L3NubXBnZXQuZHNwCmluZGV4IDY0OTgwZWQuLjA2MDMyMzIgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBnZXQvc25tcGdldC5kc3AKKysrIGIvd2luMzIvc25tcGdldC9zbm1wZ2V0LmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBnZXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBnZXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBnZXQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wZ2V0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBnZXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcCBiL3dpbjMyL3NubXBnZXRuZXh0L3NubXBnZXRuZXh0LmRzcAppbmRleCAyMzMxOTlkLi5jYjYzYzg0IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wZ2V0bmV4dC9zbm1wZ2V0bmV4dC5kc3AKKysrIGIvd2luMzIvc25tcGdldG5leHQvc25tcGdldG5leHQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcGdldG5leHQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBnZXRuZXh0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wZ2V0bmV4dCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBnZXRuZXh0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBnZXRuZXh0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wbmV0c3RhdC9NYWtlZmlsZS5pbiBiL3dpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluCmluZGV4IGJhNGQ1ZTIuLjA1YTAxZTggMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluCisrKyBiL3dpbjMyL3NubXBuZXRzdGF0L01ha2VmaWxlLmluCkBAIC0yLDcgKzIsNiBAQAogQ0ZHPQogT1VURElSPQogSU5URElSPQotU1NMPQogTElOS1RZUEU9CiAKICMgU2V0IHRvIDEgdG8gYWxsb3cgdGhlIGJ1aWxkaW5nIHVzaW5nIHRoZSBETEwgdmVyc2lvbiBvZiBTTk1QTElCLgpAQCAtMjMsMTMgKzIyLDE2IEBACiAJLUBlcmFzZSAiJChJTlRESVIpXGlmLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcaW5ldC5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXGluZXQ2Lm9iaiIKKwktQGVyYXNlICIkKElOVERJUilcaW5ldHgub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxtYWluLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilccm91dGUub2JqIgorCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZXgub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVxmZnMub2JqIgogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKIAktQGVyYXNlICIkKElOVERJUilcd2luc3R1Yi5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCkBAIC0zOCw3ICs0MCw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9HWCAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiTkRFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZwIiQoSU5URElSKVwkKFBST0dOQU1FKS5wY2giIC9ZWCAvRm8iJChJTlRESVIpXFwiIC9GZCIkKElOVERJUilcXCQoUFJPR05BTUUpLnBkYiIgL0ZEIC9jIAorQ1BQX1BST0o9L25vbG9nbyAvTUQgL1czIC9FSHNjIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKQEAgLTgwLDEzICs4MiwxNSBAQAogQlNDMzJfU0JSUz0gXAogCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLnBkYiIgL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSIgCitMSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVxpZi5vYmoiIFwKIAkiJChJTlRESVIpXGluZXQub2JqIiBcCiAJIiQoSU5URElSKVxpbmV0Ni5vYmoiIFwKKwkiJChJTlRESVIpXGluZXR4Lm9iaiIgXAogCSIkKElOVERJUilcbWFpbi5vYmoiIFwKIAkiJChJTlRESVIpXHJvdXRlLm9iaiIgXAorCSIkKElOVERJUilccm91dGV4Lm9iaiIgXAogCSIkKElOVERJUilcZmZzLm9iaiIgXAogCSIkKElOVERJUilcd2luc3R1Yi5vYmoiCiAKQEAgLTk1LDYgKzk5LDggQEAKICAgICAkKExJTkszMikgQDw8CiAgICQoTElOSzMyX0ZMQUdTKSAkKExJTkszMl9PQkpTKQogPDwKKyBpZiBleGlzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIFwKKwkgICAgbXQuZXhlIC1tYW5pZmVzdCAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiIC1vdXRwdXRyZXNvdXJjZToiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiOzEKICFFTFNFCSMgTGlua3R5cGUgY2hlY2sKIAktQGVjaG8gLgogCS1AZWNobyBBYm9ydGluZyBidWlsZC4gIEFwcGxpY2F0aW9ucyBjYW4gbm90IGJlIGJ1aWx0IHVzaW5nIC0tbGlua3R5cGU9ZHluYW1pYwpAQCAtMTEzLDEwICsxMTksMTQgQEAKIAktQGVyYXNlICIkKElOVERJUilcaW5ldC5zYnIiCiAJLUBlcmFzZSAiJChJTlRESVIpXGluZXQ2Lm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcaW5ldDYuc2JyIgorCS1AZXJhc2UgIiQoSU5URElSKVxpbmV0eC5vYmoiCisJLUBlcmFzZSAiJChJTlRESVIpXGluZXR4LnNiciIKIAktQGVyYXNlICIkKElOVERJUilcbWFpbi5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXG1haW4uc2JyIgogCS1AZXJhc2UgIiQoSU5URElSKVxyb3V0ZS5vYmoiCiAJLUBlcmFzZSAiJChJTlRESVIpXHJvdXRlLnNiciIKKwktQGVyYXNlICIkKElOVERJUilccm91dGV4Lm9iaiIKKwktQGVyYXNlICIkKElOVERJUilccm91dGV4LnNiciIKIAktQGVyYXNlICIkKElOVERJUilcZmZzLm9iaiIKIAktQGVyYXNlICIkKElOVERJUilcZmZzLnNiciIKIAktQGVyYXNlICIkKElOVERJUilcdmM/Py5pZGIiCkBAIC0xMjcsNiArMTM3LDcgQEAKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkuYnNjIgogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5wZGIiCiAJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUiCisJLUBlcmFzZSAiLi5cYmluXCQoT1VURElSKVwkKFBST0dOQU1FKS5leGUubWFuaWZlc3QiCiAKICIuLlxiaW5cJChPVVRESVIpIiA6CiAgICAgaWYgbm90IGV4aXN0ICIuLlxiaW5cJChPVVRESVIpLyQoTlVMTCkiIG1rZGlyICIuLlxiaW5cJChPVVRESVIpIgpAQCAtMTM1LDcgKzE0Niw3IEBACiAgICAgaWYgbm90IGV4aXN0ICIkKElOVERJUikvJChOVUxMKSIgbWtkaXIgIiQoSU5URElSKSIKIAogQ1BQPWNsLmV4ZQotQ1BQX1BST0o9L25vbG9nbyAvTURkIC9XMyAvR20gL0dYIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvRlIiJChJTlRESVIpXFwiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EZCAvVzMgL0dtIC9FSHNjIC9aaSAvT2QgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgpAQCAtMTc4LDggKzE4OSwxMCBAQAogCSIkKElOVERJUilcaWYuc2JyIiBcCiAJIiQoSU5URElSKVxpbmV0LnNiciIgXAogCSIkKElOVERJUilcaW5ldDYuc2JyIiBcCisJIiQoSU5URElSKVxpbmV0eC5zYnIiIFwKIAkiJChJTlRESVIpXG1haW4uc2JyIiBcCiAJIiQoSU5URElSKVxyb3V0ZS5zYnIiIFwKKwkiJChJTlRESVIpXHJvdXRleC5zYnIiIFwKIAkiJChJTlRESVIpXGZmcy5zYnIiIFwKIAkiJChJTlRESVIpXHdpbnN0dWIuc2JyIgogCkBAIC0xODksMTMgKzIwMiwxNSBAQAogPDwKIAogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKK0xJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvb3V0OiIuLlxiaW5cJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIiAKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVxpZi5vYmoiIFwKIAkiJChJTlRESVIpXGluZXQub2JqIiBcCiAJIiQoSU5URElSKVxpbmV0Ni5vYmoiIFwKKwkiJChJTlRESVIpXGluZXR4Lm9iaiIgXAogCSIkKElOVERJUilcbWFpbi5vYmoiIFwKIAkiJChJTlRESVIpXHJvdXRlLm9iaiIgXAorCSIkKElOVERJUilccm91dGV4Lm9iaiIgXAogCSIkKElOVERJUilcZmZzLm9iaiIgXAogCSIkKElOVERJUilcd2luc3R1Yi5vYmoiCiAKQEAgLTIwNCw2ICsyMTksOCBAQAogICAgICQoTElOSzMyKSBAPDwKICAgJChMSU5LMzJfRkxBR1MpICQoTElOSzMyX09CSlMpCiA8PAorIGlmIGV4aXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgXAorCSAgICBtdC5leGUgLW1hbmlmZXN0ICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIgLW91dHB1dHJlc291cmNlOiIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSI7MQogIUVMU0UJIyBMaW5rdHlwZSBjaGVjawogCS1AZWNobyAuCiAJLUBlY2hvIEFib3J0aW5nIGJ1aWxkLiAgQXBwbGljYXRpb25zIGNhbiBub3QgYmUgYnVpbHQgdXNpbmcgLS1saW5rdHlwZT1keW5hbWljCkBAIC0yNzcsNiArMjk0LDExIEBACiAKICFFTkRJRiAKIAorU09VUkNFPS4uXC4uXGFwcHNcJChQUk9HTkFNRSlcaW5ldHguYworCisiJChJTlRESVIpXGluZXR4Lm9iaiIJIiQoSU5URElSKVxpbmV0eC5zYnIiIDogJChTT1VSQ0UpICIkKElOVERJUikiCisJJChDUFApICQoQ1BQX1BST0opICQoU09VUkNFKQorCiBTT1VSQ0U9Li5cLi5cYXBwc1wkKFBST0dOQU1FKVxtYWluLmMKIAogIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKQEAgLTMxMyw2ICszMzUsMTEgQEAKIAogIUVORElGIAogCitTT1VSQ0U9Li5cLi5cYXBwc1wkKFBST0dOQU1FKVxyb3V0ZXguYworCisiJChJTlRESVIpXHJvdXRleC5vYmoiCSIkKElOVERJUilccm91dGV4LnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKKwkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCisKIFNPVVJDRT0uLlwuLlxhcHBzXCQoUFJPR05BTUUpXGZmcy5jCiAKICFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AgYi93aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AKb2xkIG1vZGUgMTAwNjQ0Cm5ldyBtb2RlIDEwMDc1NQppbmRleCAyNWVjMDMxLi4yZWRhNTc1Ci0tLSBhL3dpbjMyL3NubXBuZXRzdGF0L3NubXBuZXRzdGF0LmRzcAorKysgYi93aW4zMi9zbm1wbmV0c3RhdC9zbm1wbmV0c3RhdC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wbmV0c3RhdC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcG5ldHN0YXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBuZXRzdGF0IC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcG5ldHN0YXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcG5ldHN0YXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KQEAgLTg0LDYgKzg0LDEwIEBACiAjIE5hbWUgInNubXBuZXRzdGF0IC0gV2luMzIgRGVidWciDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KK1NPVVJDRT0uLlwuLlxhcHBzXHNubXBuZXRzdGF0XGZmcy5jDQorIyBFbmQgU291cmNlIEZpbGUNCisjIEJlZ2luIFNvdXJjZSBGaWxlDQorDQogU09VUkNFPS4uXC4uXGFwcHNcc25tcG5ldHN0YXRcaWYuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTk2LDYgKzEwMCwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQorU09VUkNFPS4uXC4uXGFwcHNcc25tcG5ldHN0YXRcaW5ldHguYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxhcHBzXHNubXBuZXRzdGF0XG1haW4uYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KQEAgLTEwNCw3ICsxMTIsNyBAQAogIyBFbmQgU291cmNlIEZpbGUNCiAjIEJlZ2luIFNvdXJjZSBGaWxlDQogDQotU09VUkNFPS4uXC4uXGFwcHNcc25tcG5ldHN0YXRcZmZzLmMNCitTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wbmV0c3RhdFxyb3V0ZXguYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBzZXQvc25tcHNldC5kc3AgYi93aW4zMi9zbm1wc2V0L3NubXBzZXQuZHNwCmluZGV4IGZkZWNhMzAuLmFkMGY1MDkgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBzZXQvc25tcHNldC5kc3AKKysrIGIvd2luMzIvc25tcHNldC9zbm1wc2V0LmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBzZXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXBzZXQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXBzZXQgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wc2V0LmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBzZXQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBzbV9pbml0LmggYi93aW4zMi9zbm1wc21faW5pdC5oCmluZGV4IDgwMTVmZjYuLmM4YTQxMGIgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXBzbV9pbml0LmgKKysrIGIvd2luMzIvc25tcHNtX2luaXQuaApAQCAtMSwyICsxIEBACi0vKiBUaGlzIGZpbGUgaXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgYnkgY29uZmlndXJlLiAgRG8gbm90IG1vZGlmeSBieSBoYW5kLiAqLwogaW5pdF91c20oKTsKZGlmZiAtLWdpdCBhL3dpbjMyL3NubXBzbV9zaHV0ZG93bi5oIGIvd2luMzIvc25tcHNtX3NodXRkb3duLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUwYzU1MQotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3NubXBzbV9zaHV0ZG93bi5oCkBAIC0wLDAgKzEgQEAKK3NodXRkb3duX3VzbSgpOwpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcCBiL3dpbjMyL3NubXBzdGF0dXMvc25tcHN0YXR1cy5kc3AKaW5kZXggMWI2ODM3My4uZTZhNDEwMCAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHN0YXR1cy9zbm1wc3RhdHVzLmRzcAorKysgYi93aW4zMi9zbm1wc3RhdHVzL3NubXBzdGF0dXMuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHN0YXR1cy5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHN0YXR1cy5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHN0YXR1cyAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXBzdGF0dXMuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHN0YXR1cy5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHRhYmxlL3NubXB0YWJsZS5kc3AgYi93aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcAppbmRleCA3NWY5NjRmLi4xZGZjMTM4IDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcAorKysgYi93aW4zMi9zbm1wdGFibGUvc25tcHRhYmxlLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0YWJsZS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRhYmxlLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdGFibGUgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdGFibGUuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRhYmxlLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AgYi93aW4zMi9zbm1wdGVzdC9zbm1wdGVzdC5kc3AKaW5kZXggZGZiMGNmMS4uODljMDhlOSAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHRlc3Qvc25tcHRlc3QuZHNwCisrKyBiL3dpbjMyL3NubXB0ZXN0L3NubXB0ZXN0LmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB0ZXN0LmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdGVzdC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHRlc3QgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdGVzdC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdGVzdC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcCBiL3dpbjMyL3NubXB0cmFuc2xhdGUvc25tcHRyYW5zbGF0ZS5kc3AKaW5kZXggYTNlYmRlNS4uYzNlY2EwMiAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHRyYW5zbGF0ZS9zbm1wdHJhbnNsYXRlLmRzcAorKysgYi93aW4zMi9zbm1wdHJhbnNsYXRlL3NubXB0cmFuc2xhdGUuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRyYW5zbGF0ZS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRyYW5zbGF0ZS5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHRyYW5zbGF0ZSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0cmFuc2xhdGUuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRyYW5zbGF0ZS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwIGIvd2luMzIvc25tcHRyYXAvc25tcHRyYXAuZHNwCmluZGV4IDhkMjdlZTEuLmMzNGZmZDggMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB0cmFwL3NubXB0cmFwLmRzcAorKysgYi93aW4zMi9zbm1wdHJhcC9zbm1wdHJhcC5kc3AKQEAgLTUwLDcgKzUwLDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL21hY2hpbmU6STM4Ng0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdHJhcC5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRyYXAuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB0cmFwIC0gV2luMzIgRGVidWciDQogDQpAQCAtNzQsNyArNzQsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvZGVidWcgL21hY2hpbmU6STM4NiAvcGRidHlwZTpzZXB0DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRyYXAuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9pbmNyZW1lbnRhbDpubyAvZGVidWcgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vZGVidWcvc25tcHRyYXAuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbiBiL3dpbjMyL3NubXB0cmFwZC9NYWtlZmlsZS5pbgppbmRleCBlYjcyZmE3Li4yZmE1Y2NiIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdHJhcGQvTWFrZWZpbGUuaW4KKysrIGIvd2luMzIvc25tcHRyYXBkL01ha2VmaWxlLmluCkBAIC0yLDcgKzIsNiBAQAogQ0ZHPQogT1VURElSPQogSU5URElSPQotU1NMPQogTElOS1RZUEU9CiAKICMgU2V0IHRvIDEgdG8gYWxsb3cgdGhlIGJ1aWxkaW5nIHVzaW5nIHRoZSBETEwgdmVyc2lvbiBvZiBTTk1QTElCLgpAQCAtMjYsNiArMjUsNyBAQAogCS1AZXJhc2UgIiQoSU5URElSKVx2Yz8/LmlkYiIKIAktQGVyYXNlICIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIgogCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIgorCS1AZXJhc2UgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IgogCiAiLi5cYmluXCQoT1VURElSKSIgOgogICAgIGlmIG5vdCBleGlzdCAiLi5cYmluXCQoT1VURElSKS8kKE5VTEwpIiBta2RpciAiLi5cYmluXCQoT1VURElSKSIKQEAgLTM0LDcgKzM0LDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRCAvVzMgL0dYIC9aaSAvTzIgL0kgIi4iIC9JICIuLiIgL0kgIi4uXC4uXHNubXBsaWIiIC9JICIuLlwuLiIgL0kgIi4uXC4uXGluY2x1ZGUiIC9JICIuLlwuLlxhZ2VudFxtaWJncm91cCIgL0QgIldJTjMyIiAvRCAiX0JJTkRfVE9fQ1VSUkVOVF9WQ0xJQlNfVkVSU0lPTiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9GcCIkKElOVERJUilcJChQUk9HTkFNRSkucGNoIiAvWVggL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKK0NQUF9QUk9KPS9ub2xvZ28gL01EIC9XMyAvRUhzYyAvWmkgL08yIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJOREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCiAKICFJRiAiJChMSU5LVFlQRSkiID09ICJkeW5hbWljIgogQ1BQX1BST0o9JChDUFBfUFJPSikgL0QgIk5NQUtFX05FVFNOTVBfVVNFX0RMTCIKQEAgLTc3LDcgKzc3LDcgQEAKIEJTQzMyX1NCUlM9IFwKIAogTElOSzMyPWxpbmsuZXhlCi1MSU5LMzJfRkxBR1M9bmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIG5ldHNubXB0cmFwZC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXB0cmFwZC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvb3V0OiIuLlxiaW5cJChPVVRESVIpLyQoUFJPR05BTUUpLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIiAKIExJTkszMl9PQkpTPSBcCiAJIiQoSU5URElSKVwkKFBST0dOQU1FKS5vYmoiIFwKIAkiJChJTlRESVIpXHdpbnNlcnZpY2Uub2JqIiBcCkBAIC04OCw2ICs4OCw4IEBACiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKQEAgLTExMSw2ICsxMTMsNyBAQAogCS1AZXJhc2UgIiQoSU5URElSKVwkKFBST0dOQU1FKS5ic2MiCiAJLUBlcmFzZSAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBkYiIKIAktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZSIKKwktQGVyYXNlICIuLlxiaW5cJChPVVRESVIpXCQoUFJPR05BTUUpLmV4ZS5tYW5pZmVzdCIKIAogIi4uXGJpblwkKE9VVERJUikiIDoKICAgICBpZiBub3QgZXhpc3QgIi4uXGJpblwkKE9VVERJUikvJChOVUxMKSIgbWtkaXIgIi4uXGJpblwkKE9VVERJUikiCkBAIC0xMTksNyArMTIyLDcgQEAKICAgICBpZiBub3QgZXhpc3QgIiQoSU5URElSKS8kKE5VTEwpIiBta2RpciAiJChJTlRESVIpIgogCiBDUFA9Y2wuZXhlCi1DUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvR1ggL1ppIC9PZCAvSSAiLiIgL0kgIi4uIiAvSSAiLi5cLi5cc25tcGxpYiIgL0kgIi4uXC4uIiAvSSAiLi5cLi5caW5jbHVkZSIgL0kgIi4uXC4uXGFnZW50XG1pYmdyb3VwIiAvRCAiV0lOMzIiIC9EICJfQklORF9UT19DVVJSRU5UX1ZDTElCU19WRVJTSU9OIiAvRCAiX0RFQlVHIiAvRCAiX0NPTlNPTEUiIC9EICJfTUJDUyIgL0ZSIiQoSU5URElSKVxcIiAvRnAiJChJTlRESVIpXCQoUFJPR05BTUUpLnBjaCIgL1lYIC9GbyIkKElOVERJUilcXCIgL0ZkIiQoSU5URElSKVxcJChQUk9HTkFNRSkucGRiIiAvRkQgL2MgCitDUFBfUFJPSj0vbm9sb2dvIC9NRGQgL1czIC9HbSAvRUhzYyAvWmkgL09kIC9JICIuIiAvSSAiLi4iIC9JICIuLlwuLlxzbm1wbGliIiAvSSAiLi5cLi4iIC9JICIuLlwuLlxpbmNsdWRlIiAvSSAiLi5cLi5cYWdlbnRcbWliZ3JvdXAiIC9EICJXSU4zMiIgL0QgIl9CSU5EX1RPX0NVUlJFTlRfVkNMSUJTX1ZFUlNJT04iIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9DUlRfU0VDVVJFX05PX1dBUk5JTkdTIiAvRCAiX0NSVF9OT05TVERDX05PX1dBUk5JTkdTIiAvRCAiX01CQ1MiIC9GUiIkKElOVERJUilcXCIgL0ZvIiQoSU5URElSKVxcIiAvRmQiJChJTlRESVIpXFwkKFBST0dOQU1FKS5wZGIiIC9GRCAvYyAKIAogIUlGICIkKExJTktUWVBFKSIgPT0gImR5bmFtaWMiCiBDUFBfUFJPSj0kKENQUF9QUk9KKSAvRCAiTk1BS0VfTkVUU05NUF9VU0VfRExMIgpAQCAtMTY5LDcgKzE3Miw3IEBACiA8PAogCiBMSU5LMzI9bGluay5leGUKLUxJTkszMl9GTEFHUz1uZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgbmV0c25tcHRyYXBkLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL3BkYjoiLi4vYmluLyQoT1VURElSKS8kKFBST0dOQU1FKS5wZGIiIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciIAorTElOSzMyX0ZMQUdTPW5ldHNubXAubGliIG5ldHNubXBhZ2VudC5saWIgbmV0c25tcG1pYnMubGliIG5ldHNubXB0cmFwZC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9wZGI6Ii4uL2Jpbi8kKE9VVERJUikvJChQUk9HTkFNRSkucGRiIiAvZGVidWcgL291dDoiLi5cYmluXCQoT1VURElSKS8kKFBST0dOQU1FKS5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyIgCiBMSU5LMzJfT0JKUz0gXAogCSIkKElOVERJUilcJChQUk9HTkFNRSkub2JqIiBcCiAJIiQoSU5URElSKVx3aW5zZXJ2aWNlLm9iaiIgXApAQCAtMTgwLDYgKzE4Myw4IEBACiAgICAgJChMSU5LMzIpIEA8PAogICAkKExJTkszMl9GTEFHUykgJChMSU5LMzJfT0JKUykKIDw8CisgaWYgZXhpc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiBcCisJICAgIG10LmV4ZSAtbWFuaWZlc3QgIi4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlLm1hbmlmZXN0IiAtb3V0cHV0cmVzb3VyY2U6Ii4uXGJpblwkKE9VVERJUilcJChQUk9HTkFNRSkuZXhlIjsxCiAhRUxTRQkjIExpbmt0eXBlIGNoZWNrCiAJLUBlY2hvIC4KIAktQGVjaG8gQWJvcnRpbmcgYnVpbGQuICBBcHBsaWNhdGlvbnMgY2FuIG5vdCBiZSBidWlsdCB1c2luZyAtLWxpbmt0eXBlPWR5bmFtaWMKQEAgLTE5OCwyNSArMjAzLDYgQEAKICFFTkRJRiAKIAogCi0hSUYgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiIHx8ICIkKENGRykiID09ICJkZWJ1ZyIKLVNPVVJDRT0uLlwuLlxhZ2VudFxtaWJncm91cFxub3RpZmljYXRpb24tbG9nLW1pYlxub3RpZmljYXRpb25fbG9nLmMKLQotIUlGICAiJChDRkcpIiA9PSAicmVsZWFzZSIKLQotCi0iJChJTlRESVIpXG5vdGlmaWNhdGlvbl9sb2cub2JqIiA6ICQoU09VUkNFKSAiJChJTlRESVIpIgotCSQoQ1BQKSAkKENQUF9QUk9KKSAkKFNPVVJDRSkKLQotCi0hRUxTRUlGICAiJChDRkcpIiA9PSAiZGVidWciCi0KLQotIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLm9iaiIJIiQoSU5URElSKVxub3RpZmljYXRpb25fbG9nLnNiciIgOiAkKFNPVVJDRSkgIiQoSU5URElSKSIKLQkkKENQUCkgJChDUFBfUFJPSikgJChTT1VSQ0UpCi0KLQotIUVORElGIAotCiBTT1VSQ0U9Li5cLi5cYXBwc1wkKFBST0dOQU1FKS5jCiAKICFJRiAgIiQoQ0ZHKSIgPT0gInJlbGVhc2UiCkBAIC0zMDYsNyArMjkyLDMgQEAKIAogCiAhRU5ESUYgCi0KLQotIUVORElGIAotCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wdHJhcGQvc25tcHRyYXBkLmRzcCBiL3dpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwCmluZGV4IGRlNDQ3MzcuLjlmNDkzODkgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwCisrKyBiL3dpbjMyL3NubXB0cmFwZC9zbm1wdHJhcGQuZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgbmV0c25tcGFnZW50LmxpYiBuZXRzbm1wbWlicy5saWIgbmV0c25tcGhlbHBlcnMubGliIG5ldHNubXB0cmFwZC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHRyYXBkLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wdHJhcGQuZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB0cmFwZCAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBuZXRzbm1wYWdlbnQubGliIG5ldHNubXBtaWJzLmxpYiBuZXRzbm1waGVscGVycy5saWIgbmV0c25tcHRyYXBkLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB0cmFwZC5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdHJhcGQuZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KQEAgLTg4LDYgKzg4LDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQ0KICMgQmVnaW4gU291cmNlIEZpbGUNCiANCitTT1VSQ0U9Li5cLi5cYXBwc1xzbm1wdHJhcGRfaGFuZGxlcnMuYw0KKyMgRW5kIFNvdXJjZSBGaWxlDQorIyBCZWdpbiBTb3VyY2UgRmlsZQ0KKw0KIFNPVVJDRT0uLlwuLlxzbm1wbGliXHdpbnNlcnZpY2UuYw0KICMgRW5kIFNvdXJjZSBGaWxlDQogIyBCZWdpbiBTb3VyY2UgRmlsZQ0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB1c20vc25tcHVzbS5kc3AgYi93aW4zMi9zbm1wdXNtL3NubXB1c20uZHNwCmluZGV4IGRiNDNmMmUuLmExYzAxMjQgMTAwNjQ0Ci0tLSBhL3dpbjMyL3NubXB1c20vc25tcHVzbS5kc3AKKysrIGIvd2luMzIvc25tcHVzbS9zbm1wdXNtLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB1c20uZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB1c20uZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQogDQogIUVMU0VJRiAgIiQoQ0ZHKSIgPT0gInNubXB1c20gLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wdXNtLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB1c20uZXhlIiAvcGRidHlwZTpzZXB0IC9saWJwYXRoOiIuLi9saWIvZGVidWciDQogDQogIUVORElGIA0KIA0KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oIGIvd2luMzIvc25tcHYzLXNlY3VyaXR5LWluY2x1ZGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc2M2NmOAotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3NubXB2My1zZWN1cml0eS1pbmNsdWRlcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxuZXQtc25tcC9saWJyYXJ5L3NubXB1c20uaD4KZGlmZiAtLWdpdCBhL3dpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcCBiL3dpbjMyL3NubXB2YWNtL3NubXB2YWNtLmRzcAppbmRleCAwODU2ODMyLi4yZmQ1M2ZkIDEwMDY0NAotLS0gYS93aW4zMi9zbm1wdmFjbS9zbm1wdmFjbS5kc3AKKysrIGIvd2luMzIvc25tcHZhY20vc25tcHZhY20uZHNwCkBAIC01MCw3ICs1MCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9tYWNoaW5lOkkzODYNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL3BkYjpub25lIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL3JlbGVhc2Uvc25tcHZhY20uZXhlIiAvbGlicGF0aDoiLi4vbGliL3JlbGVhc2UiDQorIyBBREQgTElOSzMyIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB2YWNtLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KIA0KICFFTFNFSUYgICIkKENGRykiID09ICJzbm1wdmFjbSAtIFdpbjMyIERlYnVnIg0KIA0KQEAgLTc0LDcgKzc0LDcgQEAKICMgQUREIEJTQzMyIC9ub2xvZ28NCiBMSU5LMzI9bGluay5leGUNCiAjIEFERCBCQVNFIExJTkszMiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiBhZHZhcGkzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2RlYnVnIC9tYWNoaW5lOkkzODYgL3BkYnR5cGU6c2VwdA0KLSMgQUREIExJTkszMiBuZXRzbm1wLmxpYiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB2YWNtLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvaW5jcmVtZW50YWw6bm8gL2RlYnVnIC9tYWNoaW5lOkkzODYgL291dDoiLi4vYmluL2RlYnVnL3NubXB2YWNtLmV4ZSIgL3BkYnR5cGU6c2VwdCAvbGlicGF0aDoiLi4vbGliL2RlYnVnIg0KIA0KICFFTkRJRiANCiANCmRpZmYgLS1naXQgYS93aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AgYi93aW4zMi9zbm1wd2Fsay9zbm1wd2Fsay5kc3AKaW5kZXggNWQ4MTk1Ny4uNjc1OThmMSAxMDA2NDQKLS0tIGEvd2luMzIvc25tcHdhbGsvc25tcHdhbGsuZHNwCisrKyBiL3dpbjMyL3NubXB3YWxrL3NubXB3YWxrLmRzcApAQCAtNTAsNyArNTAsNyBAQAogIyBBREQgQlNDMzIgL25vbG9nbw0KIExJTkszMj1saW5rLmV4ZQ0KICMgQUREIEJBU0UgTElOSzMyIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIGFkdmFwaTMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvbWFjaGluZTpJMzg2DQotIyBBREQgTElOSzMyIG5ldHNubXAubGliIGFkdmFwaTMyLmxpYiB3czJfMzIubGliIGtlcm5lbDMyLmxpYiB1c2VyMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9wZGI6bm9uZSAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9yZWxlYXNlL3NubXB3YWxrLmV4ZSIgL2xpYnBhdGg6Ii4uL2xpYi9yZWxlYXNlIg0KKyMgQUREIExJTkszMiBhZHZhcGkzMi5saWIgd3MyXzMyLmxpYiBrZXJuZWwzMi5saWIgdXNlcjMyLmxpYiAvbm9sb2dvIC9zdWJzeXN0ZW06Y29uc29sZSAvcGRiOm5vbmUgL21hY2hpbmU6STM4NiAvb3V0OiIuLi9iaW4vcmVsZWFzZS9zbm1wd2Fsay5leGUiIC9saWJwYXRoOiIuLi9saWIvcmVsZWFzZSINCiANCiAhRUxTRUlGICAiJChDRkcpIiA9PSAic25tcHdhbGsgLSBXaW4zMiBEZWJ1ZyINCiANCkBAIC03NCw3ICs3NCw3IEBACiAjIEFERCBCU0MzMiAvbm9sb2dvDQogTElOSzMyPWxpbmsuZXhlDQogIyBBREQgQkFTRSBMSU5LMzIga2VybmVsMzIubGliIHVzZXIzMi5saWIgYWR2YXBpMzIubGliIC9ub2xvZ28gL3N1YnN5c3RlbTpjb25zb2xlIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9wZGJ0eXBlOnNlcHQNCi0jIEFERCBMSU5LMzIgbmV0c25tcC5saWIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wd2Fsay5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCisjIEFERCBMSU5LMzIgYWR2YXBpMzIubGliIHdzMl8zMi5saWIga2VybmVsMzIubGliIHVzZXIzMi5saWIgL25vbG9nbyAvc3Vic3lzdGVtOmNvbnNvbGUgL2luY3JlbWVudGFsOm5vIC9kZWJ1ZyAvbWFjaGluZTpJMzg2IC9vdXQ6Ii4uL2Jpbi9kZWJ1Zy9zbm1wd2Fsay5leGUiIC9wZGJ0eXBlOnNlcHQgL2xpYnBhdGg6Ii4uL2xpYi9kZWJ1ZyINCiANCiAhRU5ESUYgDQogDQpkaWZmIC0tZ2l0IGEvd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oIGIvd2luMzIvdHJhbnNwb3J0cy9zbm1wX3RyYW5zcG9ydF9pbml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjE0MDkKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi90cmFuc3BvcnRzL3NubXBfdHJhbnNwb3J0X2luaXRzLmgKQEAgLTAsMCArMSwxNiBAQAorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUF9ET01BSU4KK25ldHNubXBfdWRwX2Jhc2VfY3RvcigpOworbmV0c25tcF91ZHBfY3RvcigpOworI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQX0RPTUFJTgorbmV0c25tcF90Y3BfY3RvcigpOworI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfQUxJQVNfRE9NQUlOCituZXRzbm1wX2FsaWFzX2N0b3IoKTsKKyNlbmRpZgorI2lmZGVmIE5FVFNOTVBfVFJBTlNQT1JUX1VEUElQVjZfRE9NQUlOCituZXRzbm1wX3VkcGlwdjZfY3RvcigpOworI2VuZGlmCisjaWZkZWYgTkVUU05NUF9UUkFOU1BPUlRfVENQSVBWNl9ET01BSU4KK25ldHNubXBfdGNwaXB2Nl9jdG9yKCk7CisjZW5kaWYKZGlmZiAtLWdpdCBhL3dpbjMyL3dpbjMyLmRzdyBiL3dpbjMyL3dpbjMyLmRzdwppbmRleCA0NzYzYzM3Li41YWQxYWIwIDEwMDY0NAotLS0gYS93aW4zMi93aW4zMi5kc3cKKysrIGIvd2luMzIvd2luMzIuZHN3CkBAIC0xMSwzMCArMTEsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYmhlbHBlcnMiPSIuXGxpYmhlbHBlcnNcbGliaGVscGVycy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJzbm1wIj0iLlxsaWJzbm1wXGxpYnNubXAuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtNDcsNiArMjYsMjEgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibGlic25tcCI9Ii5cbGlic25tcFxsaWJzbm1wLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtNTksNiArNTMsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTcxLDkgKzY4LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtODYsOSArODMsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0xMDEsOSArOTgsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0xMTYsMTggKzExMywxNSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJoZWxwZXJzDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnMNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0xNDAsOSArMTM0LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMTU1LDkgKzE0OSw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTE3MCw5ICsxNjQsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0xODUsOSArMTc5LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjAwLDkgKzE5NCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTIxNSw5ICsyMDksOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yMzAsOSArMjI0LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjQ1LDkgKzIzOSw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTI2MCw5ICsyNTQsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0yNzUsOSArMjY5LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMjkwLDkgKzI4NCw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTMwNSwyMSArMjk5LDE4IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmhlbHBlcnMNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlicw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYm5ldHNubXB0cmFwZA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYm5ldHNubXB0cmFwZA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlicw0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KQEAgLTMzMiw5ICszMjMsOSBAQAogDQogUGFja2FnZT08ND4NCiB7e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KIH19fQ0KIA0KICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCkBAIC0zNDcsOSArMzM4LDkgQEAKIA0KIFBhY2thZ2U9PDQ+DQoge3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCiB9fX0NCiANCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQpAQCAtMzYyLDkgKzM1Myw5IEBACiANCiBQYWNrYWdlPTw0Pg0KIHt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQogfX19DQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KZGlmZiAtLWdpdCBhL3dpbjMyL3dpbjMyZGxsLmRzdyBiL3dpbjMyL3dpbjMyZGxsLmRzdwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5mYzI0ZjVhCi0tLSAvZGV2L251bGwKKysrIGIvd2luMzIvd2luMzJkbGwuZHN3CkBAIC0wLDAgKzEsMzc0IEBACitNaWNyb3NvZnQgRGV2ZWxvcGVyIFN0dWRpbyBXb3Jrc3BhY2UgRmlsZSwgRm9ybWF0IFZlcnNpb24gNi4wMA0KKyMgV0FSTklORzogRE8gTk9UIEVESVQgT1IgREVMRVRFIFRISVMgV09SS1NQQUNFIEZJTEUhDQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJlbmNvZGVfa2V5Y2hhbmdlIj0iLlxlbmNvZGVfa2V5Y2hhbmdlXGVuY29kZV9rZXljaGFuZ2UuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJhZ2VudCI9Ii5cbGliYWdlbnRcbGliYWdlbnQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJuZXRzbm1wdHJhcGQiPSIuXGxpYm5ldHNubXB0cmFwZFxsaWJuZXRzbm1wdHJhcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJsaWJzbm1wX2RsbCI9Ii5cbGlic25tcF9kbGxcbGlic25tcF9kbGwuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAibmV0c25tcG1pYnMiPSIuXG5ldHNubXBtaWJzXG5ldHNubXBtaWJzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGJ1bGtnZXQiPSIuXHNubXBidWxrZ2V0XHNubXBidWxrZ2V0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGJ1bGt3YWxrIj0iLlxzbm1wYnVsa3dhbGtcc25tcGJ1bGt3YWxrLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlic25tcF9kbGwNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KK319fQ0KKw0KKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCisNCitQcm9qZWN0OiAic25tcGQiPSIuXHNubXBkXHNubXBkLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KKw0KK1BhY2thZ2U9PDU+DQore3t7DQorfX19DQorDQorUGFja2FnZT08ND4NCit7e3sNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGliYWdlbnQNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlicw0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBkZWx0YSI9Ii5cc25tcGRlbHRhXHNubXBkZWx0YS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBkZiI9Ii5cc25tcGRmXHNubXBkZi5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBnZXQiPSIuXHNubXBnZXRcc25tcGdldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBnZXRuZXh0Ij0iLlxzbm1wZ2V0bmV4dFxzbm1wZ2V0bmV4dC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBuZXRzdGF0Ij0iLlxzbm1wbmV0c3RhdFxzbm1wbmV0c3RhdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBzZXQiPSIuXHNubXBzZXRcc25tcHNldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXBzdGF0dXMiPSIuXHNubXBzdGF0dXNcc25tcHN0YXR1cy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB0YWJsZSI9Ii5cc25tcHRhYmxlXHNubXB0YWJsZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB0ZXN0Ij0iLlxzbm1wdGVzdFxzbm1wdGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB0cmFuc2xhdGUiPSIuXHNubXB0cmFuc2xhdGVcc25tcHRyYW5zbGF0ZS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB0cmFwIj0iLlxzbm1wdHJhcFxzbm1wdHJhcC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXBfZGxsDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCit9fX0NCisNCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQorDQorUHJvamVjdDogInNubXB0cmFwZCI9Ii5cc25tcHRyYXBkXHNubXB0cmFwZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDQ+DQore3t7DQorICAgIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbGlibmV0c25tcHRyYXBkDQorICAgIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQorICAgIFByb2plY3RfRGVwX05hbWUgbmV0c25tcG1pYnMNCisgICAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdXNtIj0iLlxzbm1wdXNtXHNubXB1c20uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wdmFjbSI9Ii5cc25tcHZhY21cc25tcHZhY20uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK1Byb2plY3Q6ICJzbm1wd2FsayI9Ii5cc25tcHdhbGtcc25tcHdhbGsuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQorDQorUGFja2FnZT08NT4NCit7e3sNCit9fX0NCisNCitQYWNrYWdlPTw0Pg0KK3t7ew0KKyAgICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCisgICAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wX2RsbA0KKyAgICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KK0dsb2JhbDoNCisNCitQYWNrYWdlPTw1Pg0KK3t7ew0KK319fQ0KKw0KK1BhY2thZ2U9PDM+DQore3t7DQorfX19DQorDQorIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KKw0KZGlmZiAtLWdpdCBhL3dpbjMyL3dpbjMyc2RrLmRzdyBiL3dpbjMyL3dpbjMyc2RrLmRzdwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjNjNmNiYS4uMDAwMDAwMAotLS0gYS93aW4zMi93aW4zMnNkay5kc3cKKysrIC9kZXYvbnVsbApAQCAtMSwzODMgKzAsMCBAQAotTWljcm9zb2Z0IERldmVsb3BlciBTdHVkaW8gV29ya3NwYWNlIEZpbGUsIEZvcm1hdCBWZXJzaW9uIDYuMDANCi0jIFdBUk5JTkc6IERPIE5PVCBFRElUIE9SIERFTEVURSBUSElTIFdPUktTUEFDRSBGSUxFIQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibGliYWdlbnQiPSIuXGxpYmFnZW50XGxpYmFnZW50LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYmhlbHBlcnMiPSIuXGxpYmhlbHBlcnNcbGliaGVscGVycy5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJsaWJzbm1wIj0iLlxsaWJzbm1wXGxpYnNubXAuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAibmV0c25tcG1pYnNzZGsiPSIuXG5ldHNubXBtaWJzc2RrXG5ldHNubXBtaWJzc2RrLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogImxpYm5ldHNubXB0cmFwZCI9Ii5cbGlibmV0c25tcHRyYXBkXGxpYm5ldHNubXB0cmFwZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJlbmNvZGVfa2V5Y2hhbmdlIj0iLlxlbmNvZGVfa2V5Y2hhbmdlXGVuY29kZV9rZXljaGFuZ2UuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBidWxrZ2V0Ij0iLlxzbm1wYnVsa2dldFxzbm1wYnVsa2dldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGJ1bGt3YWxrIj0iLlxzbm1wYnVsa3dhbGtcc25tcGJ1bGt3YWxrLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wZHNkayI9Ii5cc25tcGRzZGtcc25tcGQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJhZ2VudA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmhlbHBlcnMNCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBuZXRzbm1wbWlic3Nkaw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGRlbHRhIj0iLlxzbm1wZGVsdGFcc25tcGRlbHRhLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wZGYiPSIuXHNubXBkZlxzbm1wZGYuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBnZXQiPSIuXHNubXBnZXRcc25tcGdldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcGdldG5leHQiPSIuXHNubXBnZXRuZXh0XHNubXBnZXRuZXh0LmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wbmV0c3RhdCI9Ii5cc25tcG5ldHN0YXRcc25tcG5ldHN0YXQuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXBzZXQiPSIuXHNubXBzZXRcc25tcHNldC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHN0YXR1cyI9Ii5cc25tcHN0YXR1c1xzbm1wc3RhdHVzLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdGFibGUiPSIuXHNubXB0YWJsZVxzbm1wdGFibGUuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB0ZXN0Ij0iLlxzbm1wdGVzdFxzbm1wdGVzdC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHRyYW5zbGF0ZSI9Ii5cc25tcHRyYW5zbGF0ZVxzbm1wdHJhbnNsYXRlLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdHJhcCI9Ii5cc25tcHRyYXBcc25tcHRyYXAuZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB0cmFwZCI9Ii5cc25tcHRyYXBkXHNubXB0cmFwZC5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYmFnZW50DQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGliaGVscGVycw0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIG5ldHNubXBtaWJzc2RrDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlibmV0c25tcHRyYXBkDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLVByb2plY3Q6ICJzbm1wdXNtIj0iLlxzbm1wdXNtXHNubXB1c20uZHNwIiAtIFBhY2thZ2UgT3duZXI9PDQ+DQotDQotUGFja2FnZT08NT4NCi17e3sNCi19fX0NCi0NCi1QYWNrYWdlPTw0Pg0KLXt7ew0KLSAgQmVnaW4gUHJvamVjdCBEZXBlbmRlbmN5DQotICBQcm9qZWN0X0RlcF9OYW1lIGxpYnNubXANCi0gIEVuZCBQcm9qZWN0IERlcGVuZGVuY3kNCi19fX0NCi0NCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjDQotDQotUHJvamVjdDogInNubXB2YWNtIj0iLlxzbm1wdmFjbVxzbm1wdmFjbS5kc3AiIC0gUGFja2FnZSBPd25lcj08ND4NCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDQ+DQote3t7DQotICBCZWdpbiBQcm9qZWN0IERlcGVuZGVuY3kNCi0gIFByb2plY3RfRGVwX05hbWUgbGlic25tcA0KLSAgRW5kIFByb2plY3QgRGVwZW5kZW5jeQ0KLX19fQ0KLQ0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCi0NCi1Qcm9qZWN0OiAic25tcHdhbGsiPSIuXHNubXB3YWxrXHNubXB3YWxrLmRzcCIgLSBQYWNrYWdlIE93bmVyPTw0Pg0KLQ0KLVBhY2thZ2U9PDU+DQote3t7DQotfX19DQotDQotUGFja2FnZT08ND4NCi17e3sNCi0gIEJlZ2luIFByb2plY3QgRGVwZW5kZW5jeQ0KLSAgUHJvamVjdF9EZXBfTmFtZSBsaWJzbm1wDQotICBFbmQgUHJvamVjdCBEZXBlbmRlbmN5DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0KLUdsb2JhbDoNCi0NCi1QYWNrYWdlPTw1Pg0KLXt7ew0KLX19fQ0KLQ0KLVBhY2thZ2U9PDM+DQote3t7DQotfX19DQotDQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KLQ0K